[
  {
    "path": ".codesandbox/tasks.json",
    "content": "{\n  // These tasks will run in order when initializing your CodeSandbox project.\n  \"setupTasks\": [\n    {\n      \"name\": \"Install PNPM\",\n      \"command\": \"npm i -g pnpm@~7.4.0 --force\"\n    },\n    {\n      \"name\": \"Install Dependencies\",\n      \"command\": \"pnpm install\"\n    },\n    {\n      \"name\": \"Build Dependencies\",\n      \"command\": \"pnpm build\"\n    }\n  ],\n\n  // These tasks can be run from CodeSandbox. Running one will open a log in the app.\n  \"tasks\": {\n    \"install\": {\n      \"name\": \"Install Dependencies\",\n      \"command\": \"pnpm install\"\n    },\n    \"build\": {\n      \"name\": \"Build\",\n      \"command\": \"pnpm build\"\n    },\n    \"build:prod\": {\n      \"name\": \"Build:prod\",\n      \"command\": \"IS_PROD_BUILD=1 pnpm build\"\n    },\n    \"start\": {\n      \"name\": \"Start\",\n      \"command\": \"pnpm start\",\n      \"runAtStart\": true\n    },\n    \"watch:consumer\": {\n      \"name\": \"Watch consumer\",\n      \"command\": \"pnpm watch:consumer\",\n      \"runAtStart\": true\n    },\n    \"test:unit\": {\n      \"name\": \"Unit tests\",\n      \"command\": \"pnpm run test:unit\"\n    },\n    \"Lint\": {\n      \"name\": \"Lint\",\n      \"command\": \"pnpm lint\"\n    },\n    \"Format:write\": {\n      \"name\": \"Format:write\",\n      \"command\": \"pnpm format:write\"\n    }\n  }\n}\n"
  },
  {
    "path": ".editorconfig",
    "content": "root = true\n\n[*]\nend_of_line = lf\n\n[*.{js,ts,json}]\nindent_style = space\nindent_size = 2\n\n[Makefile]\nindent_style = tab\n"
  },
  {
    "path": ".env.example",
    "content": "PREVIEW_HOST=csb.test:3000"
  },
  {
    "path": ".env.test",
    "content": "EMULATOR_HOST=localhost:4000\nPREVIEW_HOST=csb.test:3000\nSANDPACK_CDN_ROOT=https://localhost:3500\n"
  },
  {
    "path": ".eslintignore",
    "content": ".turbo\nbuild\ninternals/servers/consumer/dist/consumer.js\n/packages/runtime/preview/**/*.js\n/preview\ntmp"
  },
  {
    "path": ".eslintrc.js",
    "content": "module.exports = {\n  env: { browser: true, es2021: true },\n  parser: '@typescript-eslint/parser',\n  parserOptions: { ecmaVersion: 'latest', sourceType: 'module' },\n  plugins: ['@typescript-eslint'],\n  rules: { 'no-console': ['error', { allow: ['warn', 'error'] }] },\n};\n"
  },
  {
    "path": ".gitignore",
    "content": "node_modules\n.DS_Store\n.turbo\nbuild\ninternals/servers/consumer/dist/consumer.js\ninternals/servers/consumer/bin\n.env*\n!.env.test\n!.env.example\ncertificates\n/packages/runtime/preview/**/*.js\n*-error.log\n*.log\n/preview\ntmp\ntest-results"
  },
  {
    "path": ".prettierignore",
    "content": "fixture\nfixtures\nbuild\ninternals/servers/consumer/dist/consumer.js\n/packages/runtime/preview/**/*.js\n/preview\ntmp"
  },
  {
    "path": ".prettierrc",
    "content": "{\n  \"semi\": true,\n  \"singleQuote\": true,\n  \"bracketSpacing\": true,\n  \"printWidth\": 120,\n  \"tabWidth\": 2,\n  \"overrides\": [\n    {\n      \"files\": \"*.(scss|css)\",\n      \"options\": {\n        \"singleQuote\": false\n      }\n    }\n  ]\n}\n"
  },
  {
    "path": ".release-please-manifest.json",
    "content": "{\"packages/nodebox\":\"0.1.9\"}\n"
  },
  {
    "path": "ATTRIBUTIONS.md",
    "content": "# Open Source License Attribution\n\nNodebox uses various components from existing open source projects. You can find the source code of their open source projects along with license information below. We acknowledge and are grateful to these developers for their contributions to open source.\n\n- [Node.js](https://github.com/nodejs/node): MIT - Node.js contributors\n- [bun](https://github.com/oven-sh/bun): MIT - Oven.sh\n- [browserify](https://github.com/browserify/browserify): MIT - James Halliday\n- [os-browserify](https://github.com/CoderPuppy/os-browserify): MIT - CoderPuppy\n- [node-process](https://github.com/defunctzombie/node-process): MIT - Roman Shtylman\n- [deno_std](https://github.com/denoland/deno_std): MIT - Deno authors\n"
  },
  {
    "path": "LICENSE",
    "content": "Sustainable Use License\n\nVersion 1.0\n\nAcceptance\n\nBy using the software, you agree to all of the terms and conditions below.\n\nCopyright License\n\nThe licensor grants you a non-exclusive, royalty-free, worldwide, non-sublicensable, non-transferable license to use, copy, distribute, make available, and prepare derivative works of the software, in each case subject to the limitations below.\n\nLimitations\n\nYou may use or modify the software only for your own internal business purposes or for non-commercial or personal use. You may distribute the software or provide it to others only if you do so free of charge for non-commercial purposes. You may not alter, remove, or obscure any licensing, copyright, or other notices of the licensor in the software. Any use of the licensor's trademarks is subject to applicable law.\n\nPatents\n\nThe licensor grants you a license, under any patent claims the licensor can license, or becomes able to license, to make, have made, use, sell, offer for sale, import and have imported the software, in each case subject to the limitations and conditions in this license. This license does not cover any patent claims that you cause to be infringed by modifications or additions to the software. If you or your company make any written claim that the software infringes or contributes to infringement of any patent, your patent license for the software granted under these terms ends immediately. If your company makes such a claim, your patent license ends immediately for work on behalf of your company.\n\nNotices\n\nYou must ensure that anyone who gets a copy of any part of the software from you also gets a copy of these terms. If you modify the software, you must include in any modified copies of the software a prominent notice stating that you have modified the software.\n\nNo Other Rights\n\nThese terms do not imply any licenses other than those expressly granted in these terms.\n\nTermination\n\nIf you use the software in violation of these terms, such use is not licensed, and your license will automatically terminate. If the licensor provides you with a notice of your violation, and you cease all violation of this license no later than 30 days after you receive that notice, your license will be reinstated retroactively. However, if you violate these terms after such reinstatement, any additional violation of these terms will cause your license to terminate automatically and permanently.\n\nNo Liability\n\nAs far as the law allows, the software comes as is, without any warranty or condition, and the licensor will not be liable to you for any damages arising out of these terms or the use or nature of the software, under any kind of legal claim.\n\nDefinitions\n\nThe \"licensor\" is CodeSandBox B.V.\n\nThe \"software\" is the software the licensor makes available under these terms, including any portion of it.\n\n\"You\" refers to the individual or entity agreeing to these terms.\n\n\"Your company\" is any legal entity, sole proprietorship, or other kind of organization that you work for, plus all organizations that have control over, are under the control of, or are under common control with that organization. Control means ownership of substantially all the assets of an entity, or the power to direct its management and policies by vote, contract, or otherwise. Control can be direct or indirect.\n\n\"Your license\" is the license granted to you for the software under these terms.\n\n\"Use\" means anything you do with the software requiring your license.\n\n\"Trademark\" means trademarks, service marks, and similar rights."
  },
  {
    "path": "README.md",
    "content": "# Nodebox\n\nNodebox is a runtime for executing Node.js modules in the browser.\n\n## Why we built Nodebox\n\nWith `sandpack-bundler`, we allowed any developer anywhere to instantly create a fast, local, shareable playground inside their browser, without having to wait forever to install dependencies and fight with devtools. This improves the learning, experimentation and sharing experience of client-side JavaScript code.\n\nHowever, server-side JavaScript remained a challenge. At CodeSandbox we have solved this by using [Firecracker VMs](https://codesandbox.io/blog/how-we-clone-a-running-vm-in-2-seconds), allowing us to bring your entire development environment to the cloud regardless of the programming language or tooling you might be using. Unfortunately, as VMs live in the cloud, they require infrastructure and a network connection, resulting in a higher cost compared to our client-side sandboxes.\n\nTo solve this problem, we built Nodebox, a runtime that runs entirely in the browser, eliminating the need for a network connection and infrastructure.\n\nNodebox gives you the same user experience you have come to expect from Sandpack, which means a near-instant server-side JavaScript environment at the click of a button—built for experimentation, examples and documentation.\n\n## The differences between a VM and Nodebox\n\nAs mentioned in the previous section, we solved server-side sandboxes in CodeSandbox by using Firecracker VMs. In this section, we'll explain the advantages and disadvantages of each approach.\n\n### Advantages of VMs over Nodebox\n\n- You get dedicated resources, with no resource limits enforced by the browser\n- You have an entire Unix OS available\n- You can run any language, database, command\n- You can use network sockets\n- You can run large and complex projects\n- A perfect 1:1 environment as compared to your local setup (at least, if you're using a Unix-based system)\n- No emulation, so Node.js would run exactly the same way as locally\n\n### Advantages of Nodebox\n\n- No need for any infrastructure\n- No need for a network connection\n- Instant feedback to any change\n- Easy to get started\n- Easy and instant reset - simply refresh the page/iframe\n- Every page visitor gets their own Nodebox instance automatically\n\n## What makes it different\n\nNodebox is currently the only cross-browser Node.js runtime supporting all the latest browsers:\n\n- Chrome;\n- Firefox;\n- Safari \\*\n\n> - Support for iOS Safari is in beta\n\nNodebox does not emulate Node.js but is, instead, a Node.js-compatible runtime. This means that it implements as much of the Node.js API as possible while keeping a minimal performance imprint, using browser API where applicable and, in some cases, leaving out certain parts of Node.js due to browser [limitations](#Limitations) or complexity.\n\nNodebox uses an internal dependency manager that is fine-tuned to deliver optimal initial load time by utilizing dependency caching via [Sandpack CDN](https://github.com/codesandbox/sandpack-cdn). That CDN is an open-source Rust package manager that runs in the cloud and can be self-hosted pretty easily as well.\n\nWhile there are alternatives to Nodebox, they are closer to mimicking a container-based environment, running commands step-by-step, or even the entire Linux distributive in your browser. That makes them slower and harder to use compared to Nodebox, which is optimized to run sandboxes fast and with as little friction as possible.\n\n## Limitations\n\nUnfortunately, any type of runtime that does not have access to operating system-level APIs will come with certain limitations. For Nodebox, those are the following:\n\n- N-API modules\n- net#Sockets pointing to external IPs\n- Synchronous exec/spawn\n- async_hooks (planned for implementation)\n- Automatic process exiting - users now need to manually call `process.exit` before the process is exited (planned for implementation)\n\nAs we implement every module manually one by one, it is possible that some will not behave correctly. If this happens, feel free to open an issue here on GitHub and we'll make sure to fix it.\n\n## Documentation\n\n- [**Getting started**](#getting-started)\n- [API documentation](https://github.com/codesandbox/nodebox-runtime/blob/main/packages/nodebox/api.md)\n\n---\n\n## Getting started\n\nNodebox is meant for usage in your client-side applications, granting them the capability of running actual Node.js code directly in the browser. Here are a couple of examples of when Nodebox can be used:\n\n- Building interactive examples for server-side code in your documentation;\n- Showcasing a UI component library in the actual framework it's built for;\n- Generally any evaluation of Node.js code and previewing it in the browser.\n\nIn the context of this tutorial, we will be working on a documentation website that illustrates different examples of using a Next.js application. Bear in mind that our documentation itself can be written in any framework of our choosing.\n\n### Install\n\nNodebox can be installed from NPM just like any other dependency:\n\n```sh\nnpm install @codesandbox/nodebox\n```\n\n### Setup\n\nNodebox consists of two main parts:\n\n- A runtime environment evaluating the code;\n- A preview environment serving the result of the evaluation.\n\nCorresponding to these two parts, let's create two iframes in our application:\n\n```html\n<!--\n  The \"nodebox\" iframe will mount the Nodebox runtime,\n  allowing it to communicate with the rest of the application.\n-->\n<iframe id=\"nodebox-iframe\"></iframe>\n\n<!--\n  The \"preview\" iframe will contain the result of running\n  the Next.js example we will configure in a moment.\n-->\n<iframe id=\"preview-iframe\"></iframe>\n```\n\nAlthough the runtime environment can be self-hosted, we will use the default one pointing to the deployed Nodebox instance on CodeSandbox servers. We do need, however, to specify an `iframe` reference in our application where Nodebox should render its preview.\n\n```js\nimport { Nodebox } from '@codesandbox/nodebox';\n\nconst runtime = new Nodebox({\n  // Provide a reference to the <iframe> element in the DOM\n  // where Nodebox should render the preview.\n  iframe: document.getElementById('nodebox-iframe'),\n});\n\n// Establish a connection with the runtime environment.\nawait runtime.connect();\n```\n\n> Learn more about the [Nodebox API](https://github.com/codesandbox/nodebox-runtime/blob/main/packages/nodebox/api.md).\n\nYou want to establish **a single Nodebox instance** across your entire application. Bear that in mind during the setup phase and consult your framework's documentation and best practices regarding the most efficient way of achieving this.\n\nPreviews correspond to _commands_ executed in Nodebox, meaning that at this stage there will be no previews mounted at the given iframe because we haven't run any commands yet. Let's change that.\n\n### Initialize file system\n\nMuch like your own project, the project you create in Nodebox needs files to work with. It can be a single JavaScript file or the entire project, like Astro or Next.js.\n\nLet's describe a Next.js project that we need.\n\n```js\n// Populate the in-memory file system of Nodebox\n// with a Next.js project files.\nawait runtime.fs.init({\n  'package.json': JSON.stringify({\n    name: 'nextjs-preview',\n    dependencies: {\n      '@next/swc-wasm-nodejs': '12.1.6',\n      next: '12.1.6',\n      react: '18.2.0',\n      'react-dom': '18.2.0',\n    },\n  }),\n  // On the index page, let's illustrate how server-side props\n  // propagate to your page component in Next.js.\n  'pages/index.jsx': `\nexport default function Homepage({ name }) {\n  return (\n    <div>\n      <h1>Hello, {name}</h1>\n      <p>The name \"{name}\" has been received from server-side props.</p>\n    </div>\n  )\n}\n\nexport function getServerSideProps() {\n  return {\n    props: {\n      name: 'John'\n    }\n  }\n}\n    `,\n});\n```\n\n> You can reference standard Node.js modules, as well as external dependencies while writing your project files. Note that you **don't have to install** those dependencies as Nodebox will manage dependency installation, caching, and resolution automatically.\n\nWhat we did above was outline a file system state of an actual Next.js project for Nodebox to run. The last step remaining is to run Next.js.\n\n### Run project\n\nTo run the project, we will run the `npm dev` command using the Shell API provided by Nodebox.\n\n```js\n// First, create a new shell instance.\n// You can use the same instance to spawn commands,\n// observe stdio, restart and kill the process.\nconst shell = runtime.shell.create();\n\n// Then, let's run the \"dev\" script that we've defined\n// in \"package.json\" during the previous step.\nconst nextProcess = await shell.runCommand('npm', ['dev']);\n\n// Find the preview by the process and mount it\n// on the preview iframe on the page.\nconst previewInfo = await runtime.preview.getByShellId(nextProcess.id);\nconst previewIframe = document.getElementById('preview-iframe');\npreviewIframe.setAttribute('src', previewInfo.url);\n```\n\n> Note that you can treat `shell.runCommand` similar to `spawn` in Node.js. Learn more about the Shell API in the [documentation](https://github.com/codesandbox/nodebox-runtime/blob/main/packages/nodebox/api.md).\n\nOnce this command runs, it will return a shell reference we can use to retrieve the preview URL. By mounting that preview URL on our preview iframe from the setup, we can see the Next.js project running:\n\n![](https://github.com/codesandbox/nodebox-runtime/blob/main/packages/nodebox/nextjs-preview.png)\n\nThat's it! 🎉 **Not a single server was spawned while running this Next.js application**. Everything was managed by Nodebox directly in your browser.\n\n👉 Check out the [Sandbox for this tutorial](https://codesandbox.io/p/sandbox/nodebox-next-js-example-ji27x8)."
  },
  {
    "path": "dnsmasq.conf",
    "content": "# Handle local wildcard codesandbox domain\naddress=/csb.test/127.0.0.1\n\n# Don't read /etc/resolv.conf or any other configuration files.\nno-resolv\n# Never forward plain names (without a dot or domain part)\ndomain-needed\n# Never forward addresses in the non-routed address spaces.\nbogus-priv\n"
  },
  {
    "path": "internals/esbuild-plugins/inline-file.ts",
    "content": "import path from 'path';\nimport fs from 'fs-extra';\nimport type { Plugin, OnLoadArgs } from 'esbuild';\n\nexport function inlineFilePlugin(): Plugin {\n  const { filter, namespace, transform } = {\n    /**\n     *  A regex filter to match the desired import. Defaults to imports that start with `inline:`, e.g.\n     *  import 'inline:./file.ext';\n     */\n    filter: /^inline:/,\n\n    /**\n     * The namespace to use. If you use more than one instance of this plugin, each one should have a unique\n     * namespace. This is a random string by default, so you won't need to change it unless you're targeting a\n     * specific namespace.\n     */\n    namespace: '_' + Math.random().toString(36).substr(2, 9),\n\n    /**\n     * A function to transform the contents of the imported file. This can be a simple string replace or a more\n     * complex operation, such as a call to PostCSS, Sass, etc. The function must return a string.\n     *\n     * The contents argument will be a string containing the file's contents. The args argument is passed through from\n     * esbuild, but the most useful is probably args.path which references the file path.\n     *\n     * Note that heavy operations here can impact esbuild's performance!\n     */\n    transform: async (contents: string, args: OnLoadArgs) => contents,\n  };\n\n  return {\n    name: 'esbuild-inline-plugin',\n    setup(build) {\n      build.onResolve({ filter }, (args) => {\n        const realPath = args.path.replace(filter, '');\n        return {\n          path: path.resolve(args.resolveDir, realPath),\n          namespace,\n        };\n      });\n\n      build.onLoad({ filter: /.*/, namespace }, async (args) => {\n        let contents = await fs.readFile(args.path, 'utf8');\n\n        if (typeof transform === 'function') {\n          contents = await transform(contents, args);\n        }\n\n        return {\n          contents,\n          loader: 'text',\n        };\n      });\n    },\n  };\n}\n"
  },
  {
    "path": "internals/esbuild-plugins/inline-worker.ts",
    "content": "import crypto from 'crypto';\nimport path from 'path';\nimport fs from 'fs-extra';\nimport type { Plugin } from 'esbuild';\nimport BaseX from 'base-x';\n\nconst WORKER_RE = /(?:new Worker|createNodeWorker|StatefulWorker)\\(require\\.resolve\\([\"'`]([.\\\\/\\-\\w]*)[\"'`]\\)\\)/g;\n\nconst base36 = BaseX('0123456789abcdefghijklmnopqrstuvwxyz');\nexport function hashString(val: string): string {\n  const hash = crypto.createHash('sha1');\n  const data = hash.update(val, 'utf-8');\n  return base36.encode(data.digest());\n}\n\nexport async function writeWorker(dirname: string, content: string): Promise<string> {\n  const filename = `worker-${hashString(content)}.js`;\n  await fs.writeFile(path.join(dirname, filename), content, 'utf-8');\n  return filename;\n}\n\nconst existingBundles = new Map<string, string>();\nconst existingReplaces = new Map<string, string>();\n\nexport function inlineWorkerPlugin(outDir: string, bundle: (entry: string) => Promise<string>): Plugin {\n  const filter = /^worker-content:/;\n  const namespace = '_' + Math.random().toString(36).substr(2, 9);\n\n  return {\n    name: 'esbuild-worker-threads-plugin',\n    setup(build) {\n      // Links worker-content: calls to this namespace\n      build.onResolve({ filter }, (args) => {\n        const realPath = args.path.replace(filter, '');\n        return {\n          path: path.resolve(args.resolveDir, realPath),\n          namespace,\n        };\n      });\n\n      // Handles `worker-content:` values to bundle them and replace with new link\n      build.onLoad({ filter: /.*/, namespace }, async (args) => {\n        // console.log(args);\n        let workerPath = existingBundles.get(args.path);\n        if (!workerPath) {\n          const result = await bundle(args.path);\n          workerPath = await writeWorker(outDir, result);\n          existingBundles.set(args.path, workerPath);\n        }\n        return {\n          contents: workerPath,\n          loader: 'text',\n        };\n      });\n\n      // Gets called when loading files, extracts worker constructors and replaces them with worker-content:...\n      // to be handled by other onLoad\n      build.onLoad({ filter: /.*\\.(js|ts|mjs|cjs)/ }, async (args) => {\n        const content = await fs.readFile(args.path, 'utf8');\n        if (WORKER_RE.test(content)) {\n          if (existingReplaces.has(args.path)) {\n            return {\n              contents: content,\n              loader: args.path.endsWith('.ts') ? 'ts' : 'js',\n            };\n          }\n          const result = content.replace(WORKER_RE, (...params) => {\n            const replacement = /StatefulWorker/.test(params[0])\n              ? `StatefulWorker(require(\"worker-content:${params[1]}\"), { eval: true })`\n              : `new Worker(require(\"worker-content:${params[1]}\"), { eval: true })`;\n\n            console.log(`Replacing: \"${params[0]}\" with \"${replacement}\"`);\n\n            return replacement;\n          });\n          existingReplaces.set(args.path, result);\n          //   console.log(`Rewrote worker constructor for ${path.relative(process.cwd(), args.path)}`);\n          return {\n            contents: result,\n            loader: args.path.endsWith('.ts') ? 'ts' : 'js',\n          };\n        }\n      });\n    },\n  };\n}\n"
  },
  {
    "path": "internals/servers/consumer/build.ts",
    "content": "import esbuild from 'esbuild';\nimport path from 'path';\nimport os from 'os';\nimport { readFile, writeFile } from 'node:fs/promises';\nimport glob from 'glob-promise';\nimport { mkdir } from 'fs/promises';\nimport { existsSync } from 'fs';\n\nconst RUNTIME_PORT = 4000;\nconst RUNTIME_URL = `https://${os.hostname()}-${RUNTIME_PORT}.${\n  process.env.CSB_PREVIEW_BASE_HOST ?? 'preview.csb.app'\n}`;\n\n(async function buildConsumer() {\n  const files = await glob('tests/**/*.example.js', { cwd: path.resolve(process.cwd()) });\n  const fileContent = [];\n\n  for (const file of files) {\n    const content = await readFile(file, { encoding: 'utf8' });\n\n    const pickShellProcess = content.replace(\n      `const shellProcess = emulator.shell.create();`,\n      `const shellProcess = emulator.shell.create();\n      onShellProcessAvailable(shellProcess);`\n    );\n\n    const splitPath = file.split('/');\n    const exampleName = splitPath[splitPath.length - 1].replace('.example.js', '');\n\n    fileContent.push({\n      exampleName,\n      content: pickShellProcess,\n    });\n  }\n\n  const fileTemplate = `\n  import { Nodebox } from '../../../../packages/nodebox';\n      \n  /**\n   * Global vars\n   */\n  window.emulatorUrl = '${RUNTIME_URL}?layout=debug';\n  window.Nodebox = Nodebox;\n  const templates = ${JSON.stringify(fileContent)};\n`;\n\n  const output = path.resolve(process.cwd() + '/internals/servers/consumer/bin');\n\n  if (!existsSync(output)) {\n    await mkdir(output);\n  }\n\n  await writeFile(output + '/consumer.js', fileTemplate);\n\n  await esbuild.build({\n    bundle: true,\n    minify: false,\n    sourcemap: false,\n    treeShaking: false,\n    platform: 'browser',\n    format: 'cjs',\n    outdir: path.join(__dirname, './dist'),\n    entryPoints: [path.join(__dirname, './bin/consumer.js')],\n  });\n})();\n"
  },
  {
    "path": "internals/servers/consumer/dist/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <script src=\"https://cdn.tailwindcss.com\"></script>\n    <script src=\"https://cdn.jsdelivr.net/npm/xterm@5.1.0/lib/xterm.min.js\"></script>\n    <link href=\"https://cdn.jsdelivr.net/npm/xterm@5.1.0/css/xterm.min.css\" rel=\"stylesheet\" />\n    <title>Nodebox</title>\n  </head>\n  <body class=\"md:flex\" style=\"border-top: 4px solid #028922\">\n    <aside class=\"md:max-w-sm md:w-full md:h-screen p-10 flex flex-col gap-4\">\n      <h1 class=\"text-4xl font-medium\">Nodebox</h1>\n\n      <div class=\"p-2 border rounded mt-1 flex\">\n        <select class=\"w-full\" id=\"use-cases\"></select>\n        <button style=\"color: #028922\" class=\"hover:text-sky-600 font-medium py-1 px-3 rounded text-sm leading-tight\" id=\"run\">Run</button>\n        <button class=\"text-gray-600 hover:text-gray-800 py-1 px-3 rounded text-sm leading-tight\" id=\"kill\">\n          Kill\n        </button>\n      </div>\n\n      <div class=\"px-2\">\n        <table class=\"text-sm font-light w-full\" style=\"color: #0e0e0e\">\n          <tr>\n            <td>Dependencies:</td>\n            <td id=\"timedependencies\" class=\"tabular-nums text-right\"><span></span></td>\n          </tr>\n          <tr>\n            <td class=\"font-medium\">Total: </td>\n            <td id=\"timetotal\" class=\"tabular-nums text-right\"><span></span></td>\n          </tr>\n        </table>\n      </div>\n\n      <h2 class=\"mt-2 font-medium\">Dependencies <span id=\"total-dependencies\"></h2>\n      <div class=\"overflow-auto mt-1 text-sm\">\n        <pre id=\"dependencies\"></pre>\n      </div>\n    </aside>\n    \n    <main class=\"h-96 md:w-full md:h-screen pt-10\">\n      <iframe id=\"frame\" style=\"width: 100%; height: 55vh\" sandbox=\"allow-scripts allow-same-origin\"></iframe>\n      <div style=\"width: 100%; height: 40vh; padding: 1em; background: black;\" id=\"terminal\"></div>\n    </main>\n\n    <script src=\"./consumer.js\"></script>\n    <script>\n      /**\n       * User interface\n       */\n      const select = document.querySelector('#use-cases');\n      const exitButton = document.querySelector('#kill');\n      const runButton = document.querySelector('#run');\n      const dependenciesArea = document.querySelector('#dependencies');\n      const timeLoadParagraph = document.querySelector('#timetotal span');\n      const timeLoadDepParagraph = document.querySelector('#timedependencies span');\n      const totalDependencies = document.querySelector(\"#total-dependencies\")\n      const terminal = document.querySelector(\"#terminal\")\n      \n      var term = new Terminal({\n        convertEol: true,\n        cursorBlink: false,\n        disableStdin: false,\n        cols: 140\n      });\n      term.open(terminal);\n\n      let timer;\n\n      templates.forEach(({ exampleName }) => {\n        const opt = document.createElement('option');\n        opt.text = exampleName;\n\n        select.appendChild(opt);\n      });\n\n      select.value = localStorage['CSB_EMULATOR_PLAYGROUND_OPT'];\n\n      const clean = () => {\n        dependenciesArea.innerText = '';\n        timeLoadParagraph.innerText = '';\n        timeLoadDepParagraph.innerText = '';\n        term.clear()\n      };\n\n      runButton.addEventListener('click', () => {\n        clean();\n        localStorage['CSB_EMULATOR_PLAYGROUND_OPT'] = select.value;\n\n        const func = templates.find((item) => item.exampleName === select.value);\n        eval(func.content);\n        window.runExample(window.emulatorUrl);\n\n        timer = new Date().getTime();\n      });\n\n      const onShellProcessAvailable = (shellProcess) => {\n        let initialTotalPending\n        shellProcess.on('progress', (data) => {\n          if (data.state === 'downloaded_module') {\n            dependenciesArea.innerText = dependenciesArea.innerText.trim() + `\\n${data.totalPending} ${data.name.trim()}@${data.version}`;\n            \n            if(!initialTotalPending) {\n              initialTotalPending = data.totalPending\n            }\n\n            if (data.totalPending === 1) {\n              timeLoadDepParagraph.innerText = new Date().getTime() - timer + 'ms';\n            }\n            \n            totalDependencies.innerText = `(${initialTotalPending +1 - data.totalPending}/${initialTotalPending})`\n          }\n        });\n\n        term.onData((data) => {\n          shellProcess.stdin.write(data);\n        });\n\n        shellProcess.stdout.on('data', (data) => {\n          term.write(data);\n          \n          timeLoadParagraph.innerText = new Date().getTime() - timer + 'ms';\n        });\n        \n        shellProcess.stderr.on(\"data\", (data) => {\n          term.write(data);\n        })\n\n\n        exitButton.addEventListener('click', () => {\n          shellProcess.kill();\n          clean();\n        });\n      };\n    </script>\n  </body>\n</html>\n"
  },
  {
    "path": "internals/servers/consumer/serve.ts",
    "content": "import 'dotenv/config';\nimport { setupApp } from '../utils';\n\nimport fastifyStatic from '@fastify/static';\nimport path from 'path';\n\nconst PORT = 5000;\n\nconst app = setupApp();\n\napp.register(fastifyStatic, {\n  root: path.join(__dirname, './dist'),\n  index: ['index.html'],\n  setHeaders: (res) => {\n    res.setHeader('x-csb-no-sw-proxy', '1');\n  },\n  decorateReply: false,\n});\n\napp.listen({ port: PORT }, function (err, address) {\n  if (err) {\n    app.log.error(err);\n    process.exit(1);\n  }\n\n  /* eslint-disable-next-line no-console */\n  console.log(`Server is now listening on ${address}`);\n});\n"
  },
  {
    "path": "internals/servers/main-server.ts",
    "content": "import path from 'path';\nimport 'dotenv/config';\nimport { setupApp } from './utils';\n\nimport fastifyStatic from '@fastify/static';\n\nconst PORT = +(process.env.PORT || '4000');\n\nconst app = setupApp();\n\nconst NODE_EMULATOR_RUNTIME_BUILD_DIR = path.join(__dirname, '../../packages/runtime/build');\n\napp.register(fastifyStatic, {\n  root: NODE_EMULATOR_RUNTIME_BUILD_DIR,\n  index: ['index.html'],\n  setHeaders: (res) => {\n    res.setHeader('x-csb-no-sw-proxy', '1');\n  },\n  decorateReply: false,\n});\n\napp.register(fastifyStatic, {\n  prefix: '/public/',\n  root: path.join(__dirname, '../public'),\n  index: ['index.html'],\n  setHeaders: (res, filePath) => {\n    const parsedPath = path.parse(filePath);\n    if (parsedPath.ext === '.gz') {\n      res.setHeader('Content-Encoding', 'gzip');\n    } else if (parsedPath.ext === '.br') {\n      res.setHeader('Content-Encoding', 'br');\n    }\n  },\n  decorateReply: false,\n});\n\n// Run the server!\napp.listen({ port: PORT }, function (err, address) {\n  if (err) {\n    app.log.error(err);\n    process.exit(1);\n  }\n\n  console.log(`Server is now listening on ${address}`);\n});\n"
  },
  {
    "path": "internals/servers/preview-server.ts",
    "content": "import 'dotenv/config';\nimport { setupApp } from './utils';\n\nimport fastifyStatic from '@fastify/static';\nimport path from 'path';\n\nconst PORT = +(process.env.PORT || '3000');\n\nconst app = setupApp();\n\nconst PREVIEW_BUILD_DIR = path.join(__dirname, '../../packages/runtime/preview');\n\napp.register(fastifyStatic, {\n  root: PREVIEW_BUILD_DIR,\n  index: ['index.html'],\n  setHeaders: (res) => {\n    res.setHeader('x-csb-no-sw-proxy', '1');\n  },\n  decorateReply: false,\n});\n\n// Run the server!\napp.listen({ port: PORT }, function (err, address) {\n  if (err) {\n    app.log.error(err);\n    process.exit(1);\n  }\n\n  console.log(`Server is now listening on ${address}`);\n});\n"
  },
  {
    "path": "internals/servers/test/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <title>Test Server</title>\n  </head>\n  <body>\n    <script type=\"module\" src=\"/nodebox/index.mjs\"></script>\n    <script type=\"module\">\n      import { Nodebox } from '/nodebox/index.mjs';\n      window.Nodebox = Nodebox;\n    </script>\n\n    <h1>Test server</h1>\n    <iframe id=\"frame\" sandbox=\"allow-scripts allow-same-origin\"></iframe>\n  </body>\n</html>\n"
  },
  {
    "path": "internals/servers/test/test-server.ts",
    "content": "import 'dotenv/config';\nimport { setupApp } from '../utils';\n\nimport fastifyStatic from '@fastify/static';\nimport path from 'path';\n\nconst PORT = 4007;\n\nconst app = setupApp();\n\napp.register(fastifyStatic, {\n  root: path.join(__dirname),\n  index: ['index.html'],\n  decorateReply: false,\n});\n\napp.register(fastifyStatic, {\n  root: path.join(__dirname, '../../..', 'packages/nodebox/build'),\n  prefix: '/nodebox/',\n  decorateReply: false,\n});\n\napp.listen({ port: PORT }, function (err, address) {\n  if (err) {\n    app.log.error(err);\n    process.exit(1);\n  }\n\n  console.log(`Server is now listening on ${address}`);\n});\n"
  },
  {
    "path": "internals/servers/utils.ts",
    "content": "import fastify, { FastifyInstance } from 'fastify';\nimport fs from 'fs';\nimport path from 'path';\n\nexport function setupApp(): FastifyInstance {\n  if (process.env.CSB) {\n    return fastify({\n      logger: true,\n    });\n  }\n\n  const app = fastify({\n    logger: true,\n    https: {\n      key: fs.readFileSync(path.join(__dirname, '../../certificates/cert.key')),\n      cert: fs.readFileSync(path.join(__dirname, '../../certificates/cert.crt')),\n    },\n  });\n\n  app.log.level = process.env.NODE_ENV === 'test' ? 'error' : 'debug';\n\n  return app;\n}\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"private\": true,\n  \"name\": \"nodebox\",\n  \"version\": \"0.0.0\",\n  \"scripts\": {\n    \"build\": \"turbo run build --no-cache && pnpm build:consumer\",\n    \"build:runtime\": \"turbo run build --filter runtime --no-cache\",\n    \"build:api\": \"turbo run build --filter @codesandbox/nodebox --no-cache\",\n    \"build:consumer\": \"node -r esbuild-register ./internals/servers/consumer/build.ts\",\n    \"---\": \"---\",\n    \"watch:consumer\": \"onchange 'tests/**/**.example.js' -- pnpm build:consumer\",\n    \"----\": \"----\",\n    \"start:preview\": \"node -r esbuild-register ./internals/servers/preview-server.ts\",\n    \"start:runtime\": \"node -r esbuild-register ./internals/servers/main-server.ts\",\n    \"start:consumer\": \"node -r esbuild-register ./internals/servers/consumer/serve.ts\",\n    \"start:test-server\": \"node -r esbuild-register ./internals/servers/test/test-server.ts\",\n    \"-----\": \"-----\",\n    \"start\": \"concurrently \\\"pnpm start:runtime\\\" \\\"pnpm start:consumer\\\" \\\"pnpm start:preview\\\"\",\n    \"cert\": \"mkdir -p certificates && openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout certificates/cert.key -out certificates/cert.crt -config req.conf -extensions v3_req\",\n    \"cert:trust\": \"sudo security add-trusted-cert -d -r trustRoot -k \\\"/Library/Keychains/System.keychain\\\" ./certificates/cert.crt\",\n    \"test:unit\": \"turbo run test:unit\",\n    \"test:e2e\": \"pnpm playwright test\",\n    \"test:e2e:debug\": \"PWDEBUG=1 pnpm run test:e2e\",\n    \"------\": \"------\",\n    \"lint\": \"eslint packages/**/*.{ts,js}\",\n    \"format:check\": \"prettier --check packages/**/*.{ts,js}\",\n    \"format:write\": \"prettier --write packages/**/*.{ts,js}\"\n  },\n  \"dependencies\": {\n    \"@open-draft/deferred-promise\": \"^2.1.0\",\n    \"@swc/helpers\": \"^0.4.2\",\n    \"@typescript-eslint/eslint-plugin\": \"^5.43.0\",\n    \"@typescript-eslint/parser\": \"^5.43.0\",\n    \"base-x\": \"^4.0.0\",\n    \"concurrently\": \"^7.5.0\",\n    \"cuid\": \"^2.1.8\",\n    \"dotenv\": \"^16.0.1\",\n    \"esbuild-plugin-alias\": \"^0.2.1\",\n    \"esbuild-register\": \"^3.4.1\",\n    \"eslint\": \"^8.28.0\",\n    \"node-fetch\": \"^2.6.7\",\n    \"vite\": \"^2.9.12\"\n  },\n  \"devDependencies\": {\n    \"@fastify/static\": \"^6.4.0\",\n    \"@msgpack/msgpack\": \"^2.7.2\",\n    \"@playwright/test\": \"^1.25.1\",\n    \"@swc/core\": \"^1.2.204\",\n    \"@swc/register\": \"^0.1.10\",\n    \"@types/fs-extra\": \"^9.0.13\",\n    \"@types/glob\": \"8.0.0\",\n    \"@types/jest\": \"^29.2.0\",\n    \"@types/node\": \"^18.0.0\",\n    \"@types/node-fetch\": \"^2.6.2\",\n    \"esbuild\": \"^0.14.46\",\n    \"fastify\": \"^4.1.0\",\n    \"fs-extra\": \"^10.1.0\",\n    \"glob\": \"8.0.3\",\n    \"glob-promise\": \"5.0.0\",\n    \"jest\": \"^29.2.1\",\n    \"onchange\": \"7.1.0\",\n    \"outvariant\": \"^1.4.0\",\n    \"playwright\": \"^1.25.1\",\n    \"playwright-testing-library\": \"^4.3.1\",\n    \"prettier\": \"^2.7.1\",\n    \"rimraf\": \"^3.0.2\",\n    \"ts-jest\": \"^29.0.3\",\n    \"turbo\": \"^1.5.5\",\n    \"typescript\": \"^4.8.4\",\n    \"wait-for-expect\": \"^3.0.2\"\n  }\n}\n"
  },
  {
    "path": "packages/nodebox/.npmignore",
    "content": "src\nbuild.ts\nCHANGELOG.md"
  },
  {
    "path": "packages/nodebox/CHANGELOG.md",
    "content": "# Changelog\n\n## [0.1.9](https://github.com/Sandpack/nodebox-internal/compare/nodebox-v0.1.8...nodebox-v0.1.9) (2023-11-29)\n\n\n### Bug Fixes\n\n* force a new release ([5b50af9](https://github.com/Sandpack/nodebox-internal/commit/5b50af93a58a3ddf6bcc9ce001f92cc7711e4702))\n\n## [0.1.8](https://github.com/codesandbox/nodebox-internal/compare/nodebox-v0.1.7...nodebox-v0.1.8) (2023-05-19)\n\n\n### Bug Fixes\n\n* **package.json:** update outvariant dependency to 1.4.0 in all packages ([#378](https://github.com/codesandbox/nodebox-internal/issues/378)) ([1e2658f](https://github.com/codesandbox/nodebox-internal/commit/1e2658f68764373e95b3ee90973a68886d708139))\n\n## [0.1.7](https://github.com/codesandbox/nodebox-internal/compare/nodebox-v0.1.6...nodebox-v0.1.7) (2023-03-30)\n\n\n### Features\n\n* Add `INTERNAL_NODEBOX_DEV` to improve debugging experience ([#372](https://github.com/codesandbox/nodebox-internal/issues/372)) ([f78ebd3](https://github.com/codesandbox/nodebox-internal/commit/f78ebd377a3d8de35bf3a4fafc12fc4c6c83b255))\n* **console:** Implement Console class ([#370](https://github.com/codesandbox/nodebox-internal/issues/370)) ([265e194](https://github.com/codesandbox/nodebox-internal/commit/265e1942ee97a159b1fb3c238f19f0f6725c42f5))\n\n## [0.1.6](https://github.com/codesandbox/nodebox-internal/compare/nodebox-v0.1.5...nodebox-v0.1.6) (2023-03-07)\n\n\n### Features\n\n* **nodebox:** Implement fs.rm api ([#360](https://github.com/codesandbox/nodebox-internal/issues/360)) ([52d7dc3](https://github.com/codesandbox/nodebox-internal/commit/52d7dc3d589dddffb3ca6d0ccd342f9e409022c9))\n\n\n### Bug Fixes\n\n* **nodebox:** add repo url for npm find the package homepage ([#361](https://github.com/codesandbox/nodebox-internal/issues/361)) ([70057b7](https://github.com/codesandbox/nodebox-internal/commit/70057b7da7d97d6c5409c62fd329ba3f16824515))\n\n## [0.1.5](https://github.com/codesandbox/nodebox-internal/compare/nodebox-v0.1.4...nodebox-v0.1.5) (2023-03-05)\n\n\n### Bug Fixes\n\n* API page link ([#355](https://github.com/codesandbox/nodebox-internal/issues/355)) ([2c6970c](https://github.com/codesandbox/nodebox-internal/commit/2c6970c72d237258e10434c6f0b6f2232891be3d))\n\n## [0.1.4](https://github.com/codesandbox/nodebox-internal/compare/nodebox-v0.1.3...nodebox-v0.1.4) (2023-03-02)\n\n\n### Bug Fixes\n\n* **preview:** increase timeout message ([#349](https://github.com/codesandbox/nodebox-internal/issues/349)) ([3aba917](https://github.com/codesandbox/nodebox-internal/commit/3aba91788df1e5eb44f82f022c5298c11ecb2bf8))\n\n## [0.1.3](https://github.com/codesandbox/nodebox-internal/compare/nodebox-v0.1.2...nodebox-v0.1.3) (2023-03-01)\n\n\n### Features\n\n* **shell:** introduce stdin api on shell ([#338](https://github.com/codesandbox/nodebox-internal/issues/338)) ([7630ca2](https://github.com/codesandbox/nodebox-internal/commit/7630ca295107e3a25cdd0d553f97240b79fa6b10))\n\n\n### Bug Fixes\n\n* **fs-writeFile:** content can be string or Uint8Array ([#346](https://github.com/codesandbox/nodebox-internal/issues/346)) ([8309deb](https://github.com/codesandbox/nodebox-internal/commit/8309deb35776b1a1dfee786bdf9b534ef08d99ee))\n\n## [0.1.2](https://github.com/codesandbox/nodebox-internal/compare/nodebox-v0.1.1...nodebox-v0.1.2) (2023-02-23)\n\n\n### Features\n\n* accept custom \"cdnUrl\" ([#273](https://github.com/codesandbox/nodebox-internal/issues/273)) ([21cca7a](https://github.com/codesandbox/nodebox-internal/commit/21cca7a298c64d355bc125ff12339e3c82d8e00f))\n* **nodebox:** Add more fs methods to the public API ([#332](https://github.com/codesandbox/nodebox-internal/issues/332)) ([38c1abc](https://github.com/codesandbox/nodebox-internal/commit/38c1abc29b25d85665f67414042489131fb8637d))\n* **nodebox:** make runtime URL optional and imply the default value ([#299](https://github.com/codesandbox/nodebox-internal/issues/299)) ([bb65224](https://github.com/codesandbox/nodebox-internal/commit/bb6522498fe8529ac74c79ab1bb238727127bdb0))\n* remove picomatch for simple glob util ([#236](https://github.com/codesandbox/nodebox-internal/issues/236)) ([0d10685](https://github.com/codesandbox/nodebox-internal/commit/0d10685a5b733155a50fc928872a90eb966e975a))\n* **shell:** implement stdout/stderr emitters ([#227](https://github.com/codesandbox/nodebox-internal/issues/227)) ([cd7cd9a](https://github.com/codesandbox/nodebox-internal/commit/cd7cd9a63a1c515a04e4d713c9a324773a2fb72a))\n* **shell:** replace \".exit()\" with \".kill()\" ([#226](https://github.com/codesandbox/nodebox-internal/issues/226)) ([43b6e78](https://github.com/codesandbox/nodebox-internal/commit/43b6e78b67ace366ade9fab96e37e79ee66fa6db))\n\n\n### Bug Fixes\n\n* improve error handling, support operation rejections ([#251](https://github.com/codesandbox/nodebox-internal/issues/251)) ([78ce271](https://github.com/codesandbox/nodebox-internal/commit/78ce2714e5c29839e93a655e250042aac57ff36d))\n* incorrect cdnUrl typings on runtime iframe protocol ([b68abb2](https://github.com/codesandbox/nodebox-internal/commit/b68abb272265b96086ac904f232583e933238b92))\n* **nodebox:** check url argument, improve error messages ([#218](https://github.com/codesandbox/nodebox-internal/issues/218)) ([f9ec17c](https://github.com/codesandbox/nodebox-internal/commit/f9ec17c33d674ccb73f1b15dbb4f442ae2b39c15))\n* **nodebox:** publish version ([#334](https://github.com/codesandbox/nodebox-internal/issues/334)) ([18ad452](https://github.com/codesandbox/nodebox-internal/commit/18ad452635f0b82d036f3693ec4fd6a202ea6557))\n* package export for nodebox ([#321](https://github.com/codesandbox/nodebox-internal/issues/321)) ([a486b44](https://github.com/codesandbox/nodebox-internal/commit/a486b44d0dfc86e10fb54c346cb294f5f3e8c215))\n* **progress message:** drop `progress` key in favor of `totalPending` ([#292](https://github.com/codesandbox/nodebox-internal/issues/292)) ([9856a15](https://github.com/codesandbox/nodebox-internal/commit/9856a155e536ae24072c818e8b68986bd27702bc))\n* readme links ([#306](https://github.com/codesandbox/nodebox-internal/issues/306)) ([d83bbbc](https://github.com/codesandbox/nodebox-internal/commit/d83bbbcd0e0d33931a7cafd419252bf68d84b093))\n* **readme:** remove sentence about VMs ([#312](https://github.com/codesandbox/nodebox-internal/issues/312)) ([6c9260f](https://github.com/codesandbox/nodebox-internal/commit/6c9260f1f6cb806351327a69fef316982b0f94af))\n* rename publish script and folder name ([#239](https://github.com/codesandbox/nodebox-internal/issues/239)) ([2dac1db](https://github.com/codesandbox/nodebox-internal/commit/2dac1dba061a1ff42adb29d6265ff88ebc4993ff))\n* **shell:** emit \"exit\" when shell exits ([#287](https://github.com/codesandbox/nodebox-internal/issues/287)) ([3b25008](https://github.com/codesandbox/nodebox-internal/commit/3b25008cb386ef45b58b0672b16a86a86ced2593))\n* **shell:** replace \"shell.listen()\" with \"shell.on()\" ([#234](https://github.com/codesandbox/nodebox-internal/issues/234)) ([1774241](https://github.com/codesandbox/nodebox-internal/commit/17742414bc938707d9142e1895b64f522c5366a0))\n* update configuration steps ([#310](https://github.com/codesandbox/nodebox-internal/issues/310)) ([9d7df79](https://github.com/codesandbox/nodebox-internal/commit/9d7df79ffb90b67632e3e20ba2c2ef5125e0df4d))\n\n## [0.0.41](https://github.com/codesandbox/nodebox-internal/compare/nodebox-v0.0.40...nodebox-v0.0.41) (2023-02-23)\n\n\n### Features\n\n* **nodebox:** Add more fs methods to the public API ([#332](https://github.com/codesandbox/nodebox-internal/issues/332)) ([38c1abc](https://github.com/codesandbox/nodebox-internal/commit/38c1abc29b25d85665f67414042489131fb8637d))\n\n## [0.0.40](https://github.com/codesandbox/nodebox-internal/compare/nodebox-v0.0.39...nodebox-v0.0.40) (2023-02-21)\n\n\n### Bug Fixes\n\n* package export for nodebox ([#321](https://github.com/codesandbox/nodebox-internal/issues/321)) ([a486b44](https://github.com/codesandbox/nodebox-internal/commit/a486b44d0dfc86e10fb54c346cb294f5f3e8c215))\n\n## [0.0.39](https://github.com/codesandbox/nodebox-internal/compare/nodebox-v0.0.38...nodebox-v0.0.39) (2023-02-16)\n\n\n### Bug Fixes\n\n* readme links ([#306](https://github.com/codesandbox/nodebox-internal/issues/306)) ([d83bbbc](https://github.com/codesandbox/nodebox-internal/commit/d83bbbcd0e0d33931a7cafd419252bf68d84b093))\n* **readme:** remove sentence about VMs ([#312](https://github.com/codesandbox/nodebox-internal/issues/312)) ([6c9260f](https://github.com/codesandbox/nodebox-internal/commit/6c9260f1f6cb806351327a69fef316982b0f94af))\n* update configuration steps ([#310](https://github.com/codesandbox/nodebox-internal/issues/310)) ([9d7df79](https://github.com/codesandbox/nodebox-internal/commit/9d7df79ffb90b67632e3e20ba2c2ef5125e0df4d))\n\n## [0.0.38](https://github.com/codesandbox/nodebox/compare/nodebox-v0.0.37...nodebox-v0.0.38) (2023-02-15)\n\n\n### Features\n\n* **nodebox:** make runtime URL optional and imply the default value ([#299](https://github.com/codesandbox/nodebox/issues/299)) ([bb65224](https://github.com/codesandbox/nodebox/commit/bb6522498fe8529ac74c79ab1bb238727127bdb0))\n\n## [0.0.37](https://github.com/codesandbox/nodebox/compare/nodebox-v0.0.36...nodebox-v0.0.37) (2023-02-08)\n\n\n### Bug Fixes\n\n* **progress message:** drop `progress` key in favor of `totalPending` ([#292](https://github.com/codesandbox/nodebox/issues/292)) ([9856a15](https://github.com/codesandbox/nodebox/commit/9856a155e536ae24072c818e8b68986bd27702bc))\n* **shell:** emit \"exit\" when shell exits ([#287](https://github.com/codesandbox/nodebox/issues/287)) ([3b25008](https://github.com/codesandbox/nodebox/commit/3b25008cb386ef45b58b0672b16a86a86ced2593))\n\n## [0.0.36](https://github.com/codesandbox/nodebox/compare/nodebox-v0.0.35...nodebox-v0.0.36) (2023-02-02)\n\n\n### Bug Fixes\n\n* incorrect cdnUrl typings on runtime iframe protocol ([b68abb2](https://github.com/codesandbox/nodebox/commit/b68abb272265b96086ac904f232583e933238b92))\n\n## [0.0.35](https://github.com/codesandbox/nodebox/compare/nodebox-v0.0.34...nodebox-v0.0.35) (2023-01-26)\n\n\n### Features\n\n* accept custom \"cdnUrl\" ([#273](https://github.com/codesandbox/nodebox/issues/273)) ([21cca7a](https://github.com/codesandbox/nodebox/commit/21cca7a298c64d355bc125ff12339e3c82d8e00f))\n\n## [0.0.34](https://github.com/codesandbox/nodebox/compare/nodebox-v0.0.33...nodebox-v0.0.34) (2023-01-17)\n\n\n### Bug Fixes\n\n* improve error handling, support operation rejections ([#251](https://github.com/codesandbox/nodebox/issues/251)) ([78ce271](https://github.com/codesandbox/nodebox/commit/78ce2714e5c29839e93a655e250042aac57ff36d))\n\n## [0.0.33](https://github.com/codesandbox/nodebox/compare/nodebox-v0.0.32...nodebox-v0.0.33) (2023-01-10)\n\n\n### Bug Fixes\n\n* rename publish script and folder name ([#239](https://github.com/codesandbox/nodebox/issues/239)) ([2dac1db](https://github.com/codesandbox/nodebox/commit/2dac1dba061a1ff42adb29d6265ff88ebc4993ff))\n\n## [0.0.32](https://github.com/codesandbox/nodebox/compare/nodebox-v0.0.31...nodebox-v0.0.32) (2023-01-10)\n\n\n### Features\n\n* remove picomatch for simple glob util ([#236](https://github.com/codesandbox/nodebox/issues/236)) ([0d10685](https://github.com/codesandbox/nodebox/commit/0d10685a5b733155a50fc928872a90eb966e975a))\n* **shell:** implement stdout/stderr emitters ([#227](https://github.com/codesandbox/nodebox/issues/227)) ([cd7cd9a](https://github.com/codesandbox/nodebox/commit/cd7cd9a63a1c515a04e4d713c9a324773a2fb72a))\n\n\n### Bug Fixes\n\n* **shell:** replace \"shell.listen()\" with \"shell.on()\" ([#234](https://github.com/codesandbox/nodebox/issues/234)) ([1774241](https://github.com/codesandbox/nodebox/commit/17742414bc938707d9142e1895b64f522c5366a0))\n\n## [0.0.31](https://github.com/codesandbox/nodebox/compare/nodebox-v0.0.30...nodebox-v0.0.31) (2022-12-20)\n\n\n### Features\n\n* **shell:** replace \".exit()\" with \".kill()\" ([#226](https://github.com/codesandbox/nodebox/issues/226)) ([43b6e78](https://github.com/codesandbox/nodebox/commit/43b6e78b67ace366ade9fab96e37e79ee66fa6db))\n\n\n### Bug Fixes\n\n* **nodebox:** check url argument, improve error messages ([#218](https://github.com/codesandbox/nodebox/issues/218)) ([f9ec17c](https://github.com/codesandbox/nodebox/commit/f9ec17c33d674ccb73f1b15dbb4f442ae2b39c15))\n\n## [0.0.30](https://github.com/codesandbox/nodebox/compare/nodebox-v0.0.29...nodebox-v0.0.30) (2022-12-14)\n\n\n### Features\n\n* Refactor node worker spawning to use MessageChannel ([#205](https://github.com/codesandbox/nodebox/issues/205)) ([6896135](https://github.com/codesandbox/nodebox/commit/6896135706bf2bd847c34ab9d289eb67de76a2f7))\n\n## [0.0.29](https://github.com/codesandbox/nodebox/compare/nodebox-v0.0.28...nodebox-v0.0.29) (2022-12-08)\n\n\n### Bug Fixes\n\n* update deferred promises ([#200](https://github.com/codesandbox/nodebox/issues/200)) ([d11066e](https://github.com/codesandbox/nodebox/commit/d11066eb2852b51717f237b918b8eb8f4c878274))\n\n## [0.0.28](https://github.com/codesandbox/browser-node-emulator/compare/nodebox-v0.0.27...nodebox-v0.0.28) (2022-11-29)\n\n\n### Features\n\n* **bridge:** improve worker handling, use MessageChannel for worker ([#162](https://github.com/codesandbox/browser-node-emulator/issues/162)) ([bbe1e11](https://github.com/codesandbox/browser-node-emulator/commit/bbe1e11679daed2b28ff8eec1d5e6aad39373976))\n* fs refactor ([#100](https://github.com/codesandbox/browser-node-emulator/issues/100)) ([5797d19](https://github.com/codesandbox/browser-node-emulator/commit/5797d19528defb2724abbd1d2cf0cb03d05b2b60))\n* **fs:** FSWatcher ([#75](https://github.com/codesandbox/browser-node-emulator/issues/75)) ([b378b76](https://github.com/codesandbox/browser-node-emulator/commit/b378b763e85ec24b117a3ac962ee22ef39f22738))\n* **fs:** read / write files ([#60](https://github.com/codesandbox/browser-node-emulator/issues/60)) ([05c032d](https://github.com/codesandbox/browser-node-emulator/commit/05c032dbe33916faa563a858c67e464c9b03a9f6))\n* **node emulator:** preview interface ([#41](https://github.com/codesandbox/browser-node-emulator/issues/41)) ([e7e66bb](https://github.com/codesandbox/browser-node-emulator/commit/e7e66bbaced7cf5eb20d14b58816e11737f9c3ed))\n* **public fs:** implement fs watch ([#90](https://github.com/codesandbox/browser-node-emulator/issues/90)) ([fe9b0b6](https://github.com/codesandbox/browser-node-emulator/commit/fe9b0b68ef61532483a326e3d3ea0b9e565bc273))\n* **runtime:** runtime protocols ([#131](https://github.com/codesandbox/browser-node-emulator/issues/131)) ([18a92b9](https://github.com/codesandbox/browser-node-emulator/commit/18a92b993d3d21475a903708ff565bb3cf586583))\n* **shell:** Allow custom commands ([#61](https://github.com/codesandbox/browser-node-emulator/issues/61)) ([c90890d](https://github.com/codesandbox/browser-node-emulator/commit/c90890db2e0f1c143221772ab76eacb3cafbe23f))\n* **shellProcess:** consume stdout ([#94](https://github.com/codesandbox/browser-node-emulator/issues/94)) ([7e5667e](https://github.com/codesandbox/browser-node-emulator/commit/7e5667ebaecf2afb968a1ceb6cf57a90df1a9575))\n* **shellProcess:** on exit ([#108](https://github.com/codesandbox/browser-node-emulator/issues/108)) ([dcbd2c5](https://github.com/codesandbox/browser-node-emulator/commit/dcbd2c59aec2479617a37972507081b90bc88fbb))\n* **shell:** ShellProcess interface ([#72](https://github.com/codesandbox/browser-node-emulator/issues/72)) ([cdc0cf7](https://github.com/codesandbox/browser-node-emulator/commit/cdc0cf759f016ac5c923bb957caefd555ccaafab))\n* Worker progress messages ([#122](https://github.com/codesandbox/browser-node-emulator/issues/122)) ([084eb2f](https://github.com/codesandbox/browser-node-emulator/commit/084eb2f9cfe63d205894e7dd5f89016a40b0b200))\n\n\n### Bug Fixes\n\n* **emulator:** get rid of internal dependency ([#173](https://github.com/codesandbox/browser-node-emulator/issues/173)) ([b0db69a](https://github.com/codesandbox/browser-node-emulator/commit/b0db69adb70cb4619169dc6a56c1423f17307217))\n* **emulator:** get rid of internal dependency ([#173](https://github.com/codesandbox/browser-node-emulator/issues/173)) ([d4c9b8f](https://github.com/codesandbox/browser-node-emulator/commit/d4c9b8f94bfb310949ed90005bb615b9ecf88f4a))\n* **node-emulator:** set build target to es2020 ([#38](https://github.com/codesandbox/browser-node-emulator/issues/38)) ([5ff50fc](https://github.com/codesandbox/browser-node-emulator/commit/5ff50fca586101b6270f5f587900a031466c024a))\n* **node-emulator:** trigger a new publish ([4b42c8f](https://github.com/codesandbox/browser-node-emulator/commit/4b42c8f43c8dea0491b48af067b07eb74922848f))\n* **node-emulator:** trigger a new publish ([baef111](https://github.com/codesandbox/browser-node-emulator/commit/baef111bc1bd3bd34b5ff82fbeaa0a141372c417))\n* **node-emulator:** trigger a new publish ([#171](https://github.com/codesandbox/browser-node-emulator/issues/171)) ([8485b15](https://github.com/codesandbox/browser-node-emulator/commit/8485b151f3cbfd88692183a48a263ef070da08b3))\n* **NodeEmulator.ts:** export FilesMap type to consumer ([#57](https://github.com/codesandbox/browser-node-emulator/issues/57)) ([d676be5](https://github.com/codesandbox/browser-node-emulator/commit/d676be50f20f6d88bd7bbd6fa9edf3047e5fa8f2))\n* Potential race condition with public api ([#111](https://github.com/codesandbox/browser-node-emulator/issues/111)) ([e5e0492](https://github.com/codesandbox/browser-node-emulator/commit/e5e04929c2f2b1dc28a22970bd1e796ed2119236))\n* **preview:** remove conditional over listener ([#53](https://github.com/codesandbox/browser-node-emulator/issues/53)) ([5c6e8c0](https://github.com/codesandbox/browser-node-emulator/commit/5c6e8c0a0600a3b408f734a17b13a8f37ef8e09d))\n* public watch api and public message bus refactor ([#117](https://github.com/codesandbox/browser-node-emulator/issues/117)) ([2d23b09](https://github.com/codesandbox/browser-node-emulator/commit/2d23b0969652d9c1ff17a9fac79d512f53c332f8))\n* remove handshake timeout log ([49413a6](https://github.com/codesandbox/browser-node-emulator/commit/49413a6dde5d8300e626298553fb09a9ce32cf4c))\n* **runtime protocol:** remove promise ([#139](https://github.com/codesandbox/browser-node-emulator/issues/139)) ([51a996e](https://github.com/codesandbox/browser-node-emulator/commit/51a996e64ba105bc2a1164bf09000a13f9076936))\n* **runtime-protocol.types.ts:** export `InjectMessage` type ([#133](https://github.com/codesandbox/browser-node-emulator/issues/133)) ([b47387a](https://github.com/codesandbox/browser-node-emulator/commit/b47387adbb303552fdc1dd8f0a3aab93704a7550))\n* **shell stdout:** fix types ([#105](https://github.com/codesandbox/browser-node-emulator/issues/105)) ([e77d244](https://github.com/codesandbox/browser-node-emulator/commit/e77d244ce2d9ca45ff6a28d0b60dc51b3c512eb7))\n* **ShellProcess:** drop restart ([#88](https://github.com/codesandbox/browser-node-emulator/issues/88)) ([5371e4b](https://github.com/codesandbox/browser-node-emulator/commit/5371e4b681c4806112873e1c58a9fafea418ddb6))\n* **shellprocess:** reassign internal state to running after restart ([#77](https://github.com/codesandbox/browser-node-emulator/issues/77)) ([13ae624](https://github.com/codesandbox/browser-node-emulator/commit/13ae6242aded1e8896256bb6a78edeb764aecf81))\n* **shellprocess:** returning id on restart ([#78](https://github.com/codesandbox/browser-node-emulator/issues/78)) ([23f1230](https://github.com/codesandbox/browser-node-emulator/commit/23f1230c33b8c84911eede9d03d3b9e9bb2ac62f))\n* UI tweak on fallback page and improve conditional on FS module ([#102](https://github.com/codesandbox/browser-node-emulator/issues/102)) ([bdfb9cc](https://github.com/codesandbox/browser-node-emulator/commit/bdfb9cc7e89992017bf257133500261fbe7eb933))\n* Use picomatch-browser and fix build script ([#125](https://github.com/codesandbox/browser-node-emulator/issues/125)) ([521a432](https://github.com/codesandbox/browser-node-emulator/commit/521a432e22f6b11cc119af19c06ed29fdaad218f))\n* **worker controller:** fix exit/restart worker ([#114](https://github.com/codesandbox/browser-node-emulator/issues/114)) ([fbb9ad5](https://github.com/codesandbox/browser-node-emulator/commit/fbb9ad5f890c8e188f9cd7c3b39f71de0e9a3c7e))\n\n## [0.0.27](https://github.com/codesandbox/browser-node-emulator/compare/node-emulator-v0.0.26...node-emulator-v0.0.27) (2022-11-24)\n\n\n### Features\n\n* **bridge:** improve worker handling, use MessageChannel for worker ([#162](https://github.com/codesandbox/browser-node-emulator/issues/162)) ([bbe1e11](https://github.com/codesandbox/browser-node-emulator/commit/bbe1e11679daed2b28ff8eec1d5e6aad39373976))\n\n## [0.0.26](https://github.com/codesandbox/browser-node-emulator/compare/node-emulator-v0.0.25...node-emulator-v0.0.26) (2022-11-22)\n\n\n### Bug Fixes\n\n* **emulator:** get rid of internal dependency ([#173](https://github.com/codesandbox/browser-node-emulator/issues/173)) ([d4c9b8f](https://github.com/codesandbox/browser-node-emulator/commit/d4c9b8f94bfb310949ed90005bb615b9ecf88f4a))\n\n## [0.0.25](https://github.com/codesandbox/browser-node-emulator/compare/node-emulator-v0.0.24...node-emulator-v0.0.25) (2022-11-22)\n\n\n### Bug Fixes\n\n* **node-emulator:** trigger a new publish ([#171](https://github.com/codesandbox/browser-node-emulator/issues/171)) ([8485b15](https://github.com/codesandbox/browser-node-emulator/commit/8485b151f3cbfd88692183a48a263ef070da08b3))\n\n## [0.0.24](https://github.com/codesandbox/browser-node-emulator/compare/node-emulator-v0.0.23...node-emulator-v0.0.24) (2022-11-10)\n\n\n### Bug Fixes\n\n* **runtime protocol:** remove promise ([#139](https://github.com/codesandbox/browser-node-emulator/issues/139)) ([51a996e](https://github.com/codesandbox/browser-node-emulator/commit/51a996e64ba105bc2a1164bf09000a13f9076936))\n\n## [0.0.23](https://github.com/codesandbox/browser-node-emulator/compare/node-emulator-v0.0.22...node-emulator-v0.0.23) (2022-11-10)\n\n\n### Bug Fixes\n\n* **runtime-protocol.types.ts:** export `InjectMessage` type ([#133](https://github.com/codesandbox/browser-node-emulator/issues/133)) ([b47387a](https://github.com/codesandbox/browser-node-emulator/commit/b47387adbb303552fdc1dd8f0a3aab93704a7550))\n\n## [0.0.22](https://github.com/codesandbox/browser-node-emulator/compare/node-emulator-v0.0.21...node-emulator-v0.0.22) (2022-11-10)\n\n\n### Features\n\n* **runtime:** runtime protocols ([#131](https://github.com/codesandbox/browser-node-emulator/issues/131)) ([18a92b9](https://github.com/codesandbox/browser-node-emulator/commit/18a92b993d3d21475a903708ff565bb3cf586583))\n\n## [0.0.21](https://github.com/codesandbox/browser-node-emulator/compare/node-emulator-v0.0.20...node-emulator-v0.0.21) (2022-11-01)\n\n\n### Bug Fixes\n\n* Use picomatch-browser and fix build script ([#125](https://github.com/codesandbox/browser-node-emulator/issues/125)) ([521a432](https://github.com/codesandbox/browser-node-emulator/commit/521a432e22f6b11cc119af19c06ed29fdaad218f))\n\n## [0.0.20](https://github.com/codesandbox/browser-node-emulator/compare/node-emulator-v0.0.19...node-emulator-v0.0.20) (2022-11-01)\n\n\n### Features\n\n* Worker progress messages ([#122](https://github.com/codesandbox/browser-node-emulator/issues/122)) ([084eb2f](https://github.com/codesandbox/browser-node-emulator/commit/084eb2f9cfe63d205894e7dd5f89016a40b0b200))\n\n## [0.0.19](https://github.com/codesandbox/browser-node-emulator/compare/node-emulator-v0.0.18...node-emulator-v0.0.19) (2022-10-31)\n\n\n### Bug Fixes\n\n* public watch api and public message bus refactor ([#117](https://github.com/codesandbox/browser-node-emulator/issues/117)) ([2d23b09](https://github.com/codesandbox/browser-node-emulator/commit/2d23b0969652d9c1ff17a9fac79d512f53c332f8))\n\n## [0.0.18](https://github.com/codesandbox/browser-node-emulator/compare/node-emulator-v0.0.17...node-emulator-v0.0.18) (2022-10-28)\n\n\n### Bug Fixes\n\n* **worker controller:** fix exit/restart worker ([#114](https://github.com/codesandbox/browser-node-emulator/issues/114)) ([fbb9ad5](https://github.com/codesandbox/browser-node-emulator/commit/fbb9ad5f890c8e188f9cd7c3b39f71de0e9a3c7e))\n\n## [0.0.17](https://github.com/codesandbox/browser-node-emulator/compare/node-emulator-v0.0.16...node-emulator-v0.0.17) (2022-10-28)\n\n\n### Features\n\n* **shellProcess:** on exit ([#108](https://github.com/codesandbox/browser-node-emulator/issues/108)) ([dcbd2c5](https://github.com/codesandbox/browser-node-emulator/commit/dcbd2c59aec2479617a37972507081b90bc88fbb))\n\n\n### Bug Fixes\n\n* Potential race condition with public api ([#111](https://github.com/codesandbox/browser-node-emulator/issues/111)) ([e5e0492](https://github.com/codesandbox/browser-node-emulator/commit/e5e04929c2f2b1dc28a22970bd1e796ed2119236))\n\n## [0.0.16](https://github.com/codesandbox/browser-node-emulator/compare/node-emulator-v0.0.15...node-emulator-v0.0.16) (2022-10-28)\n\n\n### Features\n\n* fs refactor ([#100](https://github.com/codesandbox/browser-node-emulator/issues/100)) ([5797d19](https://github.com/codesandbox/browser-node-emulator/commit/5797d19528defb2724abbd1d2cf0cb03d05b2b60))\n\n\n### Bug Fixes\n\n* **shell stdout:** fix types ([#105](https://github.com/codesandbox/browser-node-emulator/issues/105)) ([e77d244](https://github.com/codesandbox/browser-node-emulator/commit/e77d244ce2d9ca45ff6a28d0b60dc51b3c512eb7))\n\n## [0.0.15](https://github.com/codesandbox/browser-node-emulator/compare/node-emulator-v0.0.14...node-emulator-v0.0.15) (2022-10-28)\n\n\n### Features\n\n* **shellProcess:** consume stdout ([#94](https://github.com/codesandbox/browser-node-emulator/issues/94)) ([7e5667e](https://github.com/codesandbox/browser-node-emulator/commit/7e5667ebaecf2afb968a1ceb6cf57a90df1a9575))\n\n## [0.0.14](https://github.com/codesandbox/browser-node-emulator/compare/node-emulator-v0.0.13...node-emulator-v0.0.14) (2022-10-27)\n\n\n### Bug Fixes\n\n* UI tweak on fallback page and improve conditional on FS module ([#102](https://github.com/codesandbox/browser-node-emulator/issues/102)) ([bdfb9cc](https://github.com/codesandbox/browser-node-emulator/commit/bdfb9cc7e89992017bf257133500261fbe7eb933))\n\n## [0.0.13](https://github.com/codesandbox/browser-node-emulator/compare/node-emulator-v0.0.12...node-emulator-v0.0.13) (2022-10-27)\n\n\n### Features\n\n* **public fs:** implement fs watch ([#90](https://github.com/codesandbox/browser-node-emulator/issues/90)) ([fe9b0b6](https://github.com/codesandbox/browser-node-emulator/commit/fe9b0b68ef61532483a326e3d3ea0b9e565bc273))\n\n## [0.0.12](https://github.com/codesandbox/browser-node-emulator/compare/node-emulator-v0.0.11...node-emulator-v0.0.12) (2022-10-25)\n\n\n### Features\n\n* **fs:** FSWatcher ([#75](https://github.com/codesandbox/browser-node-emulator/issues/75)) ([b378b76](https://github.com/codesandbox/browser-node-emulator/commit/b378b763e85ec24b117a3ac962ee22ef39f22738))\n\n\n### Bug Fixes\n\n* **ShellProcess:** drop restart ([#88](https://github.com/codesandbox/browser-node-emulator/issues/88)) ([5371e4b](https://github.com/codesandbox/browser-node-emulator/commit/5371e4b681c4806112873e1c58a9fafea418ddb6))\n* **shellprocess:** reassign internal state to running after restart ([#77](https://github.com/codesandbox/browser-node-emulator/issues/77)) ([13ae624](https://github.com/codesandbox/browser-node-emulator/commit/13ae6242aded1e8896256bb6a78edeb764aecf81))\n\n## [0.0.11](https://github.com/codesandbox/browser-node-emulator/compare/node-emulator-v0.0.10...node-emulator-v0.0.11) (2022-10-21)\n\n\n### Bug Fixes\n\n* **shellprocess:** returning id on restart ([#78](https://github.com/codesandbox/browser-node-emulator/issues/78)) ([23f1230](https://github.com/codesandbox/browser-node-emulator/commit/23f1230c33b8c84911eede9d03d3b9e9bb2ac62f))\n\n## [0.0.10](https://github.com/codesandbox/browser-node-emulator/compare/node-emulator-v0.0.9...node-emulator-v0.0.10) (2022-10-20)\n\n\n### Features\n\n* **shell:** ShellProcess interface ([#72](https://github.com/codesandbox/browser-node-emulator/issues/72)) ([cdc0cf7](https://github.com/codesandbox/browser-node-emulator/commit/cdc0cf759f016ac5c923bb957caefd555ccaafab))\n\n## [0.0.9](https://github.com/codesandbox/browser-node-emulator/compare/node-emulator-v0.0.8...node-emulator-v0.0.9) (2022-10-18)\n\n\n### Features\n\n* **fs:** read / write files ([#60](https://github.com/codesandbox/browser-node-emulator/issues/60)) ([05c032d](https://github.com/codesandbox/browser-node-emulator/commit/05c032dbe33916faa563a858c67e464c9b03a9f6))\n* **shell:** Allow custom commands ([#61](https://github.com/codesandbox/browser-node-emulator/issues/61)) ([c90890d](https://github.com/codesandbox/browser-node-emulator/commit/c90890db2e0f1c143221772ab76eacb3cafbe23f))\n\n## [0.0.8](https://github.com/codesandbox/browser-node-emulator/compare/node-emulator-v0.0.7...node-emulator-v0.0.8) (2022-10-17)\n\n\n### Bug Fixes\n\n* **NodeEmulator.ts:** export FilesMap type to consumer ([#57](https://github.com/codesandbox/browser-node-emulator/issues/57)) ([d676be5](https://github.com/codesandbox/browser-node-emulator/commit/d676be50f20f6d88bd7bbd6fa9edf3047e5fa8f2))\n\n## [0.0.7](https://github.com/codesandbox/browser-node-emulator/compare/node-emulator-v0.0.6...node-emulator-v0.0.7) (2022-10-14)\n\n\n### Bug Fixes\n\n* **preview:** remove conditional over listener ([#53](https://github.com/codesandbox/browser-node-emulator/issues/53)) ([5c6e8c0](https://github.com/codesandbox/browser-node-emulator/commit/5c6e8c0a0600a3b408f734a17b13a8f37ef8e09d))\n\n## [0.0.6](https://github.com/codesandbox/browser-node-emulator/compare/node-emulator-v0.0.5...node-emulator-v0.0.6) (2022-10-14)\n\n\n### Bug Fixes\n\n* **node-emulator:** trigger a new publish ([4b42c8f](https://github.com/codesandbox/browser-node-emulator/commit/4b42c8f43c8dea0491b48af067b07eb74922848f))\n\n## [0.0.5](https://github.com/codesandbox/browser-node-emulator/compare/node-emulator-v0.0.4...node-emulator-v0.0.5) (2022-10-14)\n\n\n### Features\n\n* **node emulator:** preview interface ([#41](https://github.com/codesandbox/browser-node-emulator/issues/41)) ([e7e66bb](https://github.com/codesandbox/browser-node-emulator/commit/e7e66bbaced7cf5eb20d14b58816e11737f9c3ed))\n\n## [0.0.4](https://github.com/codesandbox/browser-node-emulator/compare/node-emulator-v0.0.3...node-emulator-v0.0.4) (2022-10-11)\n\n\n### Bug Fixes\n\n* **node-emulator:** set build target to es2020 ([#38](https://github.com/codesandbox/browser-node-emulator/issues/38)) ([5ff50fc](https://github.com/codesandbox/browser-node-emulator/commit/5ff50fca586101b6270f5f587900a031466c024a))\n\n## [0.0.3](https://github.com/codesandbox/browser-node-emulator/compare/node-emulator-v0.0.2...node-emulator-v0.0.3) (2022-10-11)\n\n\n### Bug Fixes\n\n* **node-emulator:** trigger a new publish ([baef111](https://github.com/codesandbox/browser-node-emulator/commit/baef111bc1bd3bd34b5ff82fbeaa0a141372c417))\n\n## [0.0.2](https://github.com/codesandbox/browser-node-emulator/compare/node-emulator-v0.0.1...node-emulator-v0.0.2) (2022-10-10)\n\n\n### Bug Fixes\n\n* remove handshake timeout log ([49413a6](https://github.com/codesandbox/browser-node-emulator/commit/49413a6dde5d8300e626298553fb09a9ce32cf4c))\n"
  },
  {
    "path": "packages/nodebox/LICENSE",
    "content": "Sustainable Use License\n\nVersion 1.0\n\nAcceptance\n\nBy using the software, you agree to all of the terms and conditions below.\n\nCopyright License\n\nThe licensor grants you a non-exclusive, royalty-free, worldwide, non-sublicensable, non-transferable license to use, copy, distribute, make available, and prepare derivative works of the software, in each case subject to the limitations below.\n\nLimitations\n\nYou may use or modify the software only for your own internal business purposes or for non-commercial or personal use. You may distribute the software or provide it to others only if you do so free of charge for non-commercial purposes. You may not alter, remove, or obscure any licensing, copyright, or other notices of the licensor in the software. Any use of the licensor's trademarks is subject to applicable law.\n\nPatents\n\nThe licensor grants you a license, under any patent claims the licensor can license, or becomes able to license, to make, have made, use, sell, offer for sale, import and have imported the software, in each case subject to the limitations and conditions in this license. This license does not cover any patent claims that you cause to be infringed by modifications or additions to the software. If you or your company make any written claim that the software infringes or contributes to infringement of any patent, your patent license for the software granted under these terms ends immediately. If your company makes such a claim, your patent license ends immediately for work on behalf of your company.\n\nNotices\n\nYou must ensure that anyone who gets a copy of any part of the software from you also gets a copy of these terms. If you modify the software, you must include in any modified copies of the software a prominent notice stating that you have modified the software.\n\nNo Other Rights\n\nThese terms do not imply any licenses other than those expressly granted in these terms.\n\nTermination\n\nIf you use the software in violation of these terms, such use is not licensed, and your license will automatically terminate. If the licensor provides you with a notice of your violation, and you cease all violation of this license no later than 30 days after you receive that notice, your license will be reinstated retroactively. However, if you violate these terms after such reinstatement, any additional violation of these terms will cause your license to terminate automatically and permanently.\n\nNo Liability\n\nAs far as the law allows, the software comes as is, without any warranty or condition, and the licensor will not be liable to you for any damages arising out of these terms or the use or nature of the software, under any kind of legal claim.\n\nDefinitions\n\nThe \"licensor\" is CodeSandBox B.V.\n\nThe \"software\" is the software the licensor makes available under these terms, including any portion of it.\n\n\"You\" refers to the individual or entity agreeing to these terms.\n\n\"Your company\" is any legal entity, sole proprietorship, or other kind of organization that you work for, plus all organizations that have control over, are under the control of, or are under common control with that organization. Control means ownership of substantially all the assets of an entity, or the power to direct its management and policies by vote, contract, or otherwise. Control can be direct or indirect.\n\n\"Your license\" is the license granted to you for the software under these terms.\n\n\"Use\" means anything you do with the software requiring your license.\n\n\"Trademark\" means trademarks, service marks, and similar rights."
  },
  {
    "path": "packages/nodebox/README.md",
    "content": "# Nodebox\n\nNodebox is a runtime for executing Node.js modules in the browser.\n\n## Why we built Nodebox\n\nWith `sandpack-bundler`, we allowed any developer anywhere to instantly create a fast, local, shareable playground inside their browser, without having to wait forever to install dependencies and fight with devtools. This improves the learning, experimentation and sharing experience of client-side JavaScript code.\n\nHowever, server-side JavaScript remained a challenge. At CodeSandbox we have solved this by using [Firecracker VMs](https://codesandbox.io/blog/how-we-clone-a-running-vm-in-2-seconds), allowing us to bring your entire development environment to the cloud regardless of the programming language or tooling you might be using. Unfortunately, as VMs live in the cloud, they require infrastructure and a network connection, resulting in a higher cost compared to our client-side sandboxes.\n\nTo solve this problem, we built Nodebox, a runtime that runs entirely in the browser, eliminating the need for a network connection and infrastructure.\n\nNodebox gives you the same user experience you have come to expect from Sandpack, which means a near-instant server-side JavaScript environment at the click of a button—built for experimentation, examples and documentation.\n\n## The differences between a VM and Nodebox\n\nAs mentioned in the previous section, we solved server-side sandboxes in CodeSandbox by using Firecracker VMs. In this section, we'll explain the advantages and disadvantages of each approach.\n\n### Advantages of VMs over Nodebox\n\n- You get dedicated resources, with no resource limits enforced by the browser\n- You have an entire Unix OS available\n- You can run any language, database, command\n- You can use network sockets\n- You can run large and complex projects\n- A perfect 1:1 environment as compared to your local setup (at least, if you're using a Unix-based system)\n- No emulation, so Node.js would run exactly the same way as locally\n\n### Advantages of Nodebox\n\n- No need for any infrastructure\n- No need for a network connection\n- Instant feedback to any change\n- Easy to get started\n- Easy and instant reset - simply refresh the page/iframe\n- Every page visitor gets their own Nodebox instance automatically\n\n## What makes it different\n\nNodebox is currently the only cross-browser Node.js runtime supporting all the latest browsers:\n\n- Chrome;\n- Firefox;\n- Safari \\*\n\n> - Support for iOS Safari is in beta\n\nNodebox does not emulate Node.js but is, instead, a Node.js-compatible runtime. This means that it implements as much of the Node.js API as possible while keeping a minimal performance imprint, using browser API where applicable and, in some cases, leaving out certain parts of Node.js due to browser [limitations](#Limitations) or complexity.\n\nNodebox uses an internal dependency manager that is fine-tuned to deliver optimal initial load time by utilizing dependency caching via [Sandpack CDN](https://github.com/codesandbox/sandpack-cdn). That CDN is an open-source Rust package manager that runs in the cloud and can be self-hosted pretty easily as well.\n\nWhile there are alternatives to Nodebox, they are closer to mimicking a container-based environment, running commands step-by-step, or even the entire Linux distributive in your browser. That makes them slower and harder to use compared to Nodebox, which is optimized to run sandboxes fast and with as little friction as possible.\n\n## Limitations\n\nUnfortunately, any type of runtime that does not have access to operating system-level APIs will come with certain limitations. For Nodebox, those are the following:\n\n- N-API modules\n- net#Sockets pointing to external IPs\n- Synchronous exec/spawn\n- async_hooks (planned for implementation)\n- Automatic process exiting - users now need to manually call `process.exit` before the process is exited (planned for implementation)\n\nAs we implement every module manually one by one, it is possible that some will not behave correctly. If this happens, feel free to open an issue here on GitHub and we'll make sure to fix it.\n\n## Documentation\n\n- [**Getting started**](#getting-started)\n- [API documentation](https://github.com/codesandbox/nodebox-runtime/blob/main/packages/nodebox/api.md)\n\n---\n\n## Getting started\n\nNodebox is meant for usage in your client-side applications, granting them the capability of running actual Node.js code directly in the browser. Here are a couple of examples of when Nodebox can be used:\n\n- Building interactive examples for server-side code in your documentation;\n- Showcasing a UI component library in the actual framework it's built for;\n- Generally any evaluation of Node.js code and previewing it in the browser.\n\nIn the context of this tutorial, we will be working on a documentation website that illustrates different examples of using a Next.js application. Bear in mind that our documentation itself can be written in any framework of our choosing.\n\n### Install\n\nNodebox can be installed from NPM just like any other dependency:\n\n```sh\nnpm install @codesandbox/nodebox\n```\n\n### Setup\n\nNodebox consists of two main parts:\n\n- A runtime environment evaluating the code;\n- A preview environment serving the result of the evaluation.\n\nCorresponding to these two parts, let's create two iframes in our application:\n\n```html\n<!--\n  The \"nodebox\" iframe will mount the Nodebox runtime,\n  allowing it to communicate with the rest of the application.\n-->\n<iframe id=\"nodebox-iframe\"></iframe>\n\n<!--\n  The \"preview\" iframe will contain the result of running\n  the Next.js example we will configure in a moment.\n-->\n<iframe id=\"preview-iframe\"></iframe>\n```\n\nAlthough the runtime environment can be self-hosted, we will use the default one pointing to the deployed Nodebox instance on CodeSandbox servers. We do need, however, to specify an `iframe` reference in our application where Nodebox should render its preview.\n\n```js\nimport { Nodebox } from '@codesandbox/nodebox';\n\nconst runtime = new Nodebox({\n  // Provide a reference to the <iframe> element in the DOM\n  // where Nodebox should render the preview.\n  iframe: document.getElementById('nodebox-iframe'),\n});\n\n// Establish a connection with the runtime environment.\nawait runtime.connect();\n```\n\n> Learn more about the [Nodebox API](https://github.com/codesandbox/nodebox-runtime/blob/main/packages/nodebox/api.md).\n\nYou want to establish **a single Nodebox instance** across your entire application. Bear that in mind during the setup phase and consult your framework's documentation and best practices regarding the most efficient way of achieving this.\n\nPreviews correspond to _commands_ executed in Nodebox, meaning that at this stage there will be no previews mounted at the given iframe because we haven't run any commands yet. Let's change that.\n\n### Initialize file system\n\nMuch like your own project, the project you create in Nodebox needs files to work with. It can be a single JavaScript file or the entire project, like Astro or Next.js.\n\nLet's describe a Next.js project that we need.\n\n```js\n// Populate the in-memory file system of Nodebox\n// with a Next.js project files.\nawait runtime.fs.init({\n  'package.json': JSON.stringify({\n    name: 'nextjs-preview',\n    dependencies: {\n      '@next/swc-wasm-nodejs': '12.1.6',\n      next: '12.1.6',\n      react: '18.2.0',\n      'react-dom': '18.2.0',\n    },\n  }),\n  // On the index page, let's illustrate how server-side props\n  // propagate to your page component in Next.js.\n  'pages/index.jsx': `\nexport default function Homepage({ name }) {\n  return (\n    <div>\n      <h1>Hello, {name}</h1>\n      <p>The name \"{name}\" has been received from server-side props.</p>\n    </div>\n  )\n}\n\nexport function getServerSideProps() {\n  return {\n    props: {\n      name: 'John'\n    }\n  }\n}\n    `,\n});\n```\n\n> You can reference standard Node.js modules, as well as external dependencies while writing your project files. Note that you **don't have to install** those dependencies as Nodebox will manage dependency installation, caching, and resolution automatically.\n\nWhat we did above was outline a file system state of an actual Next.js project for Nodebox to run. The last step remaining is to run Next.js.\n\n### Run project\n\nTo run the project, we will run the `npm dev` command using the Shell API provided by Nodebox.\n\n```js\n// First, create a new shell instance.\n// You can use the same instance to spawn commands,\n// observe stdio, restart and kill the process.\nconst shell = runtime.shell.create();\n\n// Then, let's run the \"dev\" script that we've defined\n// in \"package.json\" during the previous step.\nconst nextProcess = await shell.runCommand('npm', ['dev']);\n\n// Find the preview by the process and mount it\n// on the preview iframe on the page.\nconst previewInfo = await runtime.preview.getByShellId(nextProcess.id);\nconst previewIframe = document.getElementById('preview-iframe');\npreviewIframe.setAttribute('src', previewInfo.url);\n```\n\n> Note that you can treat `shell.runCommand` similar to `spawn` in Node.js. Learn more about the Shell API in the [documentation](https://github.com/codesandbox/nodebox-runtime/blob/main/packages/nodebox/api.md).\n\nOnce this command runs, it will return a shell reference we can use to retrieve the preview URL. By mounting that preview URL on our preview iframe from the setup, we can see the Next.js project running:\n\n![](https://github.com/codesandbox/nodebox-runtime/blob/main/packages/nodebox/nextjs-preview.png)\n\nThat's it! 🎉 **Not a single server was spawned while running this Next.js application**. Everything was managed by Nodebox directly in your browser.\n\n👉 Check out the [Sandbox for this tutorial](https://codesandbox.io/p/sandbox/nodebox-next-js-example-ji27x8)."
  },
  {
    "path": "packages/nodebox/api.md",
    "content": "# API\n\n- [Class: `Nodebox`](#class-nodebox)\n  - [`new Nodebox(options)`](#new-nodeboxurl-options)\n  - [`nodebox.connect()`](#nodeboxconnect)\n  - [`nodebox.fs`](#nodeboxfs)\n  - [`nodebox.shell`](#nodeboxshell)\n- [File system API](#file-system-api)\n  - [`fs.init()`](#nodeboxfsinitfiles)\n  - [`fs.readFile(path[, encoding])`](#nodeboxfsreadfilepath-encoding)\n  - [`fs.writeFile(path[, content[, options]])`](#nodeboxfswritefilepath-content-options)\n  - [`fs.mkdir(path[, options])`](#nodeboxfsmkdirpath-options)\n  - [`fs.readdir(path)`](#nodeboxfsreaddirpath)\n  - [`fs.stat(path)`](#nodeboxfsstatpath)\n  - [`fs.rm(path[, options])`](#nodeboxfsrmpath-options)\n  - [`fs.watch(glob, listener)`](#nodeboxfswatchglob-listener)\n- [Shell API](#shell-api)\n  - [`shell.create()`](#nodeboxshellcreate)\n- [Class: `Shell`](#class-shell)\n  - [`shell.runCommand(binary, args[, options])`](#shellruncommandbinary-args-options)\n  - [`shell.on(event, listener)`](#shellonevent-listener)\n  - [`shell.stdout.on(event, listener)`](#shellstdoutonevent-listener)\n  - [`shell.stderr.on(event, listener)`](#shellstderronevent-listener)\n  - [`shell.stdin.write(data)`](#shellstdinwritedata)\n  - [`shell.kill()`](#shellkill)\n- [Preview API](#preview-api)\n  - [`preview.getByShellId(shellId[, timeout])`](#previewgetbyshellidshellid-timeout)\n  - [`preview.waitForPort(port[, timeout])`](#previewwaitforportport-timeout)\n\n## Class: `Nodebox`\n\nA `Nodebox` is an interface to create and interact with a runtime evaluation context. It's responsible for attaching a _bridge frame_ and orchestrating events between the bridge and the _preview_ frames.\n\nNodebox connects to the provided deployed Nodebox runtime.\n\nThe `Nodebox` interface is available directly from the `@codesandbox/nodebox` package:\n\n```js\nimport { Nodebox } from '@codesandbox/nodebox';\n```\n\n### `new Nodebox(options)`\n\n- `options` `<Object>`\n  - `runtimeUrl` `<string>` An absolute URL to the deployed Nodebox runtime.\n  - `frame` `<HTMLFrameElement>` Reference to the `<iframe>` element on the page where the Nodebox should be mounted.\n\n```js\nimport { Nodebox } from '@codesandbox/nodebox';\n\nconst nodebox = new Nodebox({\n  iframe: document.getElementById('preview'),\n});\n```\n\n### `nodebox.connect()`\n\nReturns a Promise that resolves when a connection to the deployed Nodebox instance is established.\n\nThe connection must be awaited before operating with the Nodebox instance (e.g. writing files or creating shells).\n\n```js\nnodebox.connect().then(() => {\n  console.log('Nodebox is ready!');\n});\n```\n\n### `nodebox.fs`\n\nA reference to the [File system API](#file-system-api).\n\n```js\nawait nodebox.fs.init({\n  'file.js': `console.log('Hello world')`,\n});\n```\n\n### `nodebox.shell`\n\nA reference to the [Shell API](#shell-api).\n\n```js\nconst shell = nodebox.shell.create();\n```\n\n## File system API\n\n### `nodebox.fs.init(files)`\n\n- `files` `<Object>` A record of files and their content to write.\n- Returns: `<Promise>` Fulfills when all the specified files are successfully written.\n\nWrites given files to the in-memory file system managed by Nodebox.\n\n```js\nawait nodebox.fs.init({\n  'index.js': `\nimport { greet } from './greet'\n\ngreet('Hello world')\n  `,\n\n  'greet.js': `\nexport function greet(message) {\n  console.log(message)\n}\n  `,\n});\n```\n\n### `nodebox.fs.readFile(path[, encoding])`\n\n- `path` `<string>`\n- `encoding` `<string | BufferEncoding>`\n- Returns: `<Promise>` Fulfills to either a `string` or `Uint8Array` depending on the `encoding` provided.\n\n```js\nconst content = await nodebox.fs.readFile('./index.js', 'utf8');\n// \"console.log('Hello world')\n```\n\n### `nodebox.fs.writeFile(path[, content[, options]])`\n\n- `path` `<string>`\n- `content` `<string | Uint8Array>`\n- `options` `<string | { encoding?: string, recursive?: boolean }>`\n- Returns: `<Promise>` Fulfills when the file content is successfully written.\n\n```js\nawait nodebox.fs.writeFile('./util.js', '');\n```\n\n### `nodebox.fs.mkdir(path[, options])`\n\n- `path` `<string>`\n- `options` `<{ recursive?: boolean }>`\n- Returns: `<Promise>` Fulfills when the directory is successfully created.\n\n```js\nawait nodebox.fs.mkdir('./a/b/c', { recursive: true });\n```\n\n### `nodebox.fs.readdir(path)`\n\n- `path` `<string>`\n- Returns: `<Promise<string[]>>` Fulfills with a list of files in the directory.\n\n```js\nawait nodebox.fs.readdir('./a/b/c');\n```\n\n### `nodebox.fs.stat(path)`\n\n- `path` `<string>`\n- Returns: `<Promise<FileStats>>` Fulfills with the stats of the provided file.\n\n```js\nawait nodebox.fs.stat('./index.js');\n```\n\n### `nodebox.fs.rm(path[, options])`\n\n- `path` `<string>`\n- `options` `<Object | undefined>`\n  - `recursive` `<boolean | undefined>` remove all nested files/directories as well\n  - `force` `<boolean | undefined>` don't throw if file/directory does not exist\n- Returns: `<Promise<void>>` Fulfills with the stats of the provided file.\n\n```js\nawait nodebox.fs.rm('./index.js', { recursive: true, force: true });\n```\n\n### `nodebox.fs.watch(glob, listener)`\n\n- `glob` `<string>` A glob pattern of the files to watch.\n- `listener` `<Function>` A listener to react to file watch events.\n  - `event` `<FileWatchEvent>`\n- Returns: `<Promise>` Fulfills to the control object with the following properties:\n  - `dispose()` Removes the glob listener and stops watching the files.\n\nUsing the `listener` function, you can handle the following file watch events:\n\n- `create`\n  - `path` `<string>`\n- `change`\n  - `path` `<string>`\n- `rename`\n  - `newPath` `<string>`\n  - `oldPath` `<string>`\n- `remove`\n  - `path` `<string>`\n\n```js\n// Watch all JavaScript files in the project.\nconst watcher = nodebox.fs.watch('**/*.js', (event) => {\n  if (event.type === 'create') {\n    console.log('A new file created!', event.path);\n  }\n});\n\n// Stop watching the files.\nwatcher.dispose();\n```\n\n## Shell API\n\n### `nodebox.shell.create()`\n\n- Returns: `<Object>` A [Shell](#class-shell) instance.\n\nCreates a new shell instance. Shell is used to run commands and control their execution.\n\n```js\nconst shell = nodebox.shell.create();\n```\n\n## Class: `Shell`\n\n### `shell.runCommand(binary, args[, options])`\n\n- `binary` `<string>` Global name or a path to the binary.\n- `args` `<Array>` List of arguments to pass to the commands.\n- `options` `<Object>`\n  - `cwd` `<string>` Path to use as the current working directory.\n  - `env` `<Object>`\n\n```js\nawait nodebox.fs.init({\n  'index.js': `console.log(process.env.DB_URL)`,\n});\n\nconst shell = nodebox.shell.create();\nawait shell.runCommand('node', ['index.js'], {\n  env: {\n    DB_URL: 'https://example.com',\n  },\n});\n```\n\n### `shell.on(event, listener)`\n\n- `event` `<string>` Event type to listen to.\n- `listener` `Function`\n\nYou can listen to the following events:\n\n- `progress`\n  - `status` `<WorkerStatusUpdate>`\n- `exit`\n  - `exitCode` `<number>`\n\n```js\nshell.on('exit', (exitCode) => {\n  console.log(exitCode);\n});\n```\n\n### `shell.stdout.on(event, listener)`\n\n- `event` `<string>`\n- `listener` `<Function>`\n\n```js\nshell.stdout.on('data', (data) => {\n  console.log('Output:', data);\n});\n```\n\n### `shell.stderr.on(event, listener)`\n\n- `event` `<string>`\n- `listener` `<Function>`\n\n```js\nshell.stderr.on('data', (data) => {\n  console.log('Error:', data);\n});\n```\n\n### `shell.stdin.write(data)`\n\n- `data` `<string | Uint8Array>`\n\n```js\nshellProcess.stdin.write(data);\n```\n\n### `shell.kill()`\n\n- Returns: `<Promise>` Fulfills when the shell successfully exits.\n\n## Preview API\n\n### `preview.getByShellId(shellId[, timeout])`\n\n- `shellId` `<string>`\n- `timeout` `<number>` Duration of the timeout window. _Default:_ `10_000` milliseconds.\n- Returns: `<PreviewInfo>`\n\nGet a preview info object for the preview opened by the given shell. If there's no preview found by the given shell within the `timeout` period, the function throws.\n\n```ts\nconst previewInfo = await nodebox.preview.getByShellId('cjld2cjxh0000qzrmn831i7rn');\n// {\n//   \"url\": \"https://t3rmni-3000.preview.csb.app/\",\n//   \"sourceShellId\": \"cjld2cjxh0000qzrmn831i7rn\",\n//   \"port\": 3000\n// }\n```\n\n### `preview.waitForPort(port[, timeout])`\n\n- `port` `<number>`\n- `timeout` `<number>` Duration of the timeout window. _Default:_ `10_000` milliseconds.\n- Returns: `<Promise>` Fulfills with the preview info object.\n\nGet a preview info object for the preview at the given port. If there's no preview found open at the given port within the `timeout` window, the function throws.\n\n```js\nconst shell = await nodebox.shell.create();\nawait shell.runCommand('node', ['start:docs']);\n\n// Await a preview at the specific port.\nconst previewInfo = await nodebox.preview.waitForPort(3004);\nconsole.log(previewInfo);\n// {\n//   \"url\": \"https://t3rmni-3004.preview.csb.app/\",\n//   \"sourceShellId\": \"cjld2cjxh0000qzrmn831i7rn\",\n//   \"port\": 3004\n// }\n```\n"
  },
  {
    "path": "packages/nodebox/build.ts",
    "content": "import path from 'path';\nimport esbuild from 'esbuild';\nimport { spawnSync } from 'node:child_process';\n\nconst EXIT_TS_ERROR = Boolean(process.env.IS_PROD_BUILD || process.env.CI);\n\nasync function build() {\n  const tscScriptOutput = spawnSync('tsc', ['-p', require.resolve('./tsconfig.build.json')], {\n    stdio: 'inherit',\n  });\n\n  if (EXIT_TS_ERROR && tscScriptOutput?.status && tscScriptOutput.status > 0) {\n    process.exit(tscScriptOutput.status);\n  }\n\n  await esbuild.build({\n    entryPoints: [require.resolve('./src/index')],\n    outdir: path.resolve(process.cwd(), './build'),\n    format: 'cjs',\n    target: 'es2020',\n    platform: 'browser',\n    bundle: true,\n    minify: false,\n  });\n\n  await esbuild.build({\n    entryPoints: [require.resolve('./src/index')],\n    outdir: path.resolve(process.cwd(), './build'),\n    format: 'esm',\n    platform: 'browser',\n    outExtension: { '.js': '.mjs' },\n    bundle: true,\n    minify: false,\n  });\n}\n\nbuild();\n"
  },
  {
    "path": "packages/nodebox/package.json",
    "content": "{\n  \"name\": \"@codesandbox/nodebox\",\n  \"version\": \"0.1.9\",\n  \"description\": \"Public API of Nodebox\",\n  \"main\": \"./build/index.js\",\n  \"module\": \"./build/index.mjs\",\n  \"typings\": \"./build/index.d.ts\",\n  \"license\": \"SEE LICENSE IN ./LICENSE\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/codesandbox/nodebox-runtime\"\n  },\n  \"exports\": {\n    \".\": {\n      \"import\": \"./build/index.mjs\",\n      \"require\": \"./build/index.js\",\n      \"types\": \"./build/index.d.ts\"\n    }\n  },\n  \"files\": [\n    \"./build\"\n  ],\n  \"scripts\": {\n    \"dev\": \"NODE_ENV=development pnpm build\",\n    \"prebuild\": \"rimraf ./build\",\n    \"build\": \"node -r esbuild-register ./build.ts\"\n  },\n  \"dependencies\": {\n    \"outvariant\": \"^1.4.0\",\n    \"strict-event-emitter\": \"^0.4.3\"\n  }\n}\n"
  },
  {
    "path": "packages/nodebox/src/Nodebox.ts",
    "content": "import { invariant } from 'outvariant';\nimport { DeferredPromise } from '@open-draft/deferred-promise';\nimport { createDebug } from './logger';\n\nimport { MessageSender } from './messages';\nimport { FileSystemApi, FilesMap } from './modules/fs';\nimport type { FileWatchEvent } from './modules/fs';\nimport { ShellApi, ShellInfo, ShellProcess } from './modules/shell';\nimport { PreviewApi, PreviewInfo } from './modules/preview';\n\nexport type { ShellInfo, PreviewInfo, FilesMap, ShellProcess, FileWatchEvent };\n\nconst DEFAULT_RUNTIME_URL = 'https://nodebox-runtime.codesandbox.io';\n\nexport interface ChannelOptions {\n  iframe: HTMLIFrameElement;\n\n  /**\n   * A custom Nodebox runtime URL\n   */\n  runtimeUrl?: string;\n\n  /**\n   * A custom Sandpack CDN URL.\n   */\n  cdnUrl?: string;\n}\n\nconst debug = createDebug('emulator');\n\n/**\n * Create a new Node emulator instance\n */\nexport class Nodebox {\n  private channel: MessageSender = null as any;\n  private isConnected: boolean;\n  private url: string;\n\n  /* API */\n  private fileSystemApi: FileSystemApi = null as any;\n  private shellApi: ShellApi = null as any;\n  private previewApi: PreviewApi = null as any;\n\n  constructor(private readonly options: ChannelOptions) {\n    invariant(\n      this.options.iframe,\n      'Failed to create a Nodebox: expected \"iframe\" argument to be a reference to an <iframe> element but got %j',\n      this.options.iframe\n    );\n\n    this.url = this.options.runtimeUrl || DEFAULT_RUNTIME_URL;\n\n    this.isConnected = false;\n  }\n\n  /**\n   * Connect to the deployed Node Emulator instance.\n   */\n  public async connect(): Promise<void> {\n    const { iframe, cdnUrl } = this.options;\n\n    debug('[message-sender]: Connecting to node emulator...');\n\n    const connectionPromise = new DeferredPromise<void>();\n\n    if (!this.url) {\n      connectionPromise.reject(\n        new Error('Nodebox URL is missing. Did you forget to provide it when creating this Nodebox instance?')\n      );\n    }\n\n    invariant(\n      iframe.contentWindow,\n      'Failed to create a MessageChannel with the Nodebox iframe: no content window found'\n    );\n\n    // Establish a message channel with the worker frame\n    // to communicate with the worker instance.\n    this.channel = new MessageSender(iframe.contentWindow);\n\n    // Connect to the emulator.\n    const frameLoadPromise = new DeferredPromise<void>();\n    iframe.setAttribute('src', this.url);\n    iframe.addEventListener(\n      'load',\n      () => {\n        frameLoadPromise.resolve();\n      },\n      { once: true }\n    );\n    iframe.addEventListener(\n      'error',\n      (event) => {\n        frameLoadPromise.reject(event.error);\n      },\n      { once: true }\n    );\n\n    // Wait until the Emulator iframe is ready\n    // before communicating with it.\n    await frameLoadPromise;\n\n    debug('[message-sender]: IFrame loaded...');\n\n    // Await the worker frame to establish the receiver channel\n    // and confirm the functioning message port via handshake.\n    await this.channel.handshake();\n\n    debug('[message-sender]: Handshake completed...');\n\n    // Prompt a connection to the worker.\n    this.channel.send('connect', {\n      cdnUrl,\n    });\n\n    this.channel.on('runtime/ready', () => {\n      connectionPromise.resolve();\n    });\n\n    return connectionPromise.then(() => {\n      debug('[message-sender]: Connected to runtime...');\n      this.isConnected = true;\n    });\n  }\n\n  get fs(): FileSystemApi {\n    invariant(\n      this.isConnected,\n      'Failed to access the File System API: consumer is not connected. Did you forget to run \"connect()\"?'\n    );\n\n    if (this.fileSystemApi) {\n      return this.fileSystemApi;\n    }\n\n    this.fileSystemApi = new FileSystemApi(this.channel);\n    return this.fileSystemApi;\n  }\n\n  get shell(): ShellApi {\n    invariant(\n      this.isConnected,\n      'Failed to access the Shell API: consumer is not connected. Did you forget to run \"connect()\"?'\n    );\n\n    if (this.shellApi) {\n      return this.shellApi;\n    }\n\n    this.shellApi = new ShellApi(this.channel);\n    return this.shellApi;\n  }\n\n  get preview(): PreviewApi {\n    invariant(\n      this.isConnected,\n      'Failed to access the Preview API: consumer is not connected. Did you forget to run \"connect()\"?'\n    );\n\n    if (this.previewApi) {\n      return this.previewApi;\n    }\n\n    this.previewApi = new PreviewApi(this.channel);\n    return this.previewApi;\n  }\n}\n"
  },
  {
    "path": "packages/nodebox/src/index.ts",
    "content": "export * from './messages';\nexport * from './Nodebox';\nexport * from './runtime-protocol.types';\n\nexport type { IFileStats } from './modules/fs';\n"
  },
  {
    "path": "packages/nodebox/src/logger.ts",
    "content": "/* eslint-disable no-console */\nconst FLAG = window.localStorage['CSB_EMULATOR_DEBUG'];\n\n/**\n * Colors\n */\nconst DEFAULT = '\\u001b[0m';\n// Status\nconst GREEN = '\\u001b[32;1m';\nconst RED = '\\u001b[31m';\n// Scopes\nconst BLUE = '\\u001b[34m';\nconst YELLOW = '\\u001b[33;1m';\nconst MAGENTA = '\\u001b[35;1m';\nconst CYAN = '\\u001b[36;1m';\n\ntype Scope = 'preview' | 'emulator' | 'runtime' | 'bridge' | 'runtime:worker';\nconst COLOR_SCOPE: Record<Scope, string> = {\n  preview: YELLOW,\n  emulator: MAGENTA,\n  runtime: CYAN,\n  bridge: BLUE,\n  'runtime:worker': CYAN,\n};\n\nexport function createDebug(scope: Scope) {\n  return function debug(message: string, ...data: any[]) {\n    if (FLAG === 'true') {\n      const direction = () => {\n        if (message.includes('sender')) return `${GREEN}sender`;\n        if (message.includes('receiver')) return `${RED}receiver`;\n        return '';\n      };\n      const cleanMessage = message.replace(/\\[.+\\]:/, '');\n      console.debug(`${COLOR_SCOPE[scope]}${scope}:${direction()}${DEFAULT}:${cleanMessage}`, ...data);\n    }\n  };\n}\n"
  },
  {
    "path": "packages/nodebox/src/messages.ts",
    "content": "/**\n * This is a message contract between the Consumer and the Worker (Emulator).\n * @see \"consumer-worker-messages.md\" in the documentation.\n */\nimport cuid from 'cuid';\nimport { invariant } from 'outvariant';\nimport { DeferredPromise } from '@open-draft/deferred-promise';\nimport type { FileSystemEvents } from './modules/fs';\nimport type { ShellEvents } from './modules/shell';\nimport type { PreviewInfo } from './modules/preview';\nimport type { PreviewEvents } from './modules/preview';\nimport { createDebug } from './logger';\n\nconst debug = createDebug('emulator');\n\nexport interface ConsumerEvents extends FileSystemEvents, ShellEvents, PreviewEvents {\n  connect: {\n    cdnUrl?: string | null;\n  };\n}\n\ntype WatcherEvent =\n  | {\n      type: 'create';\n      path: string;\n    }\n  | {\n      type: 'remove';\n      path: string;\n    }\n  | {\n      type: 'change';\n      path: string;\n    }\n  | {\n      type: 'rename';\n      oldPath: string;\n      newPath: string;\n    }\n  | {\n      type: 'close';\n    };\n\nexport type FSWatchEvent = WatcherEvent & {\n  watcherId: string;\n};\n\nexport type WorkerStatusUpdate =\n  | {\n      state: 'downloading_manifest';\n    }\n  | {\n      state: 'downloaded_module';\n      name: string;\n      version: string;\n      totalPending: number;\n    }\n  | {\n      state: 'starting_command';\n    }\n  | {\n      state: 'command_running';\n    };\n\nexport interface WorkerEvents {\n  'internal/handshake/done': void;\n  'internal/operation/done': {\n    operationId: string;\n    listenerPayload: unknown;\n  };\n  'internal/operation/failed': {\n    operationId: string;\n    error: Error;\n  };\n  'runtime/ready': void;\n  'worker/progress': {\n    workerId?: string;\n    status: WorkerStatusUpdate;\n  };\n  'worker/tty': {\n    workerId: string;\n    payload: {\n      data: string;\n      type: 'out' | 'err';\n    };\n  };\n  'worker/exit': {\n    workerId: string;\n    exitCode: number;\n    error?: {\n      message: string;\n    };\n  };\n  'preview/port/ready': PreviewInfo;\n  'fs/watch-event': FSWatchEvent;\n}\n\ntype OperationEvent<Payload> = Payload & {\n  operationId: string;\n};\n\ntype MaybePromise<T> = T | Promise<T>;\n\nexport class MessageReceiver {\n  private emitter: EventTarget;\n  private senderPort: MessagePort = null as any;\n\n  constructor() {\n    this.emitter = new EventTarget();\n    this.waitForHandshake();\n  }\n\n  private waitForHandshake() {\n    const handshakePromise = new DeferredPromise();\n\n    const handshakeListener = (message: MessageEvent) => {\n      const { data } = message;\n\n      debug('[message-receiver]: incoming', message);\n\n      if (data.type === 'internal/handshake') {\n        invariant(\n          message.ports.length > 0,\n          'Failed to confirm a MessageReceiver handshake: received event has no ports'\n        );\n\n        this.senderPort = message.ports[0];\n        this.addMessageListener();\n\n        debug('[message-receiver]: handshake received!', this.senderPort);\n\n        this.send('internal/handshake/done');\n        debug('[message-receiver]: finish handshake');\n      }\n    };\n\n    window.addEventListener('message', handshakeListener);\n    handshakePromise.then(() => {\n      window.removeEventListener('message', handshakeListener);\n    });\n\n    window.parent.postMessage({ type: 'internal/ready' }, '*');\n\n    return handshakePromise;\n  }\n\n  private addMessageListener(): void {\n    invariant(\n      this.senderPort,\n      '[MessageReceiver] Failed to add a message listener: sender port is not defined. Did you forget to await a handshake?'\n    );\n\n    this.senderPort.onmessage = (evt) => {\n      const data = evt.data;\n      if (data.type == null) {\n        return;\n      }\n\n      this.emitter.dispatchEvent(\n        new MessageEvent(data.type, {\n          data: data.payload,\n        })\n      );\n    };\n  }\n\n  public on<Event extends keyof ConsumerEvents & string>(\n    event: Event,\n    listener: (\n      message: ConsumerEvents[Event] extends [infer PayloadType, infer _] ? PayloadType : ConsumerEvents[Event]\n    ) => MaybePromise<ConsumerEvents[Event] extends [infer _, infer ReturnType] ? ReturnType | undefined : void>,\n    options?: AddEventListenerOptions\n  ): void {\n    this.emitter.addEventListener(\n      event,\n      async (message) => {\n        if (!(message instanceof MessageEvent)) {\n          return;\n        }\n\n        // Send back the confirmation about the operation completion.\n        const { operationId, payload } = message.data;\n\n        try {\n          const listenerPayload = await listener(payload);\n          this.send('internal/operation/done', { operationId, listenerPayload });\n        } catch (error) {\n          if (error instanceof Error) {\n            this.send('internal/operation/failed', { operationId, error });\n          }\n        }\n      },\n      options\n    );\n  }\n\n  public send<Event extends keyof WorkerEvents & string>(\n    event: Event,\n    ...data: WorkerEvents[Event] extends Record<string, unknown> ? [WorkerEvents[Event]] : [undefined?]\n  ): void {\n    invariant(\n      this.senderPort,\n      '[MessageReceiver] Failed to send a message \"%j\": sender port is not defined. Did you forget to await a handshake?',\n      event\n    );\n\n    const payload = data[0] || {};\n    debug('[message-receiver]: send \"%s\"', event, payload);\n\n    this.senderPort.postMessage({ type: event, payload });\n  }\n}\n\nexport class MessageSender {\n  private emitter: EventTarget;\n  private channel: MessageChannel;\n  private receiverPort: MessagePort;\n  private receiverReadyPromise: DeferredPromise<void>;\n\n  constructor(private readonly target: Window) {\n    this.emitter = new EventTarget();\n    this.channel = new MessageChannel();\n    this.receiverPort = this.channel.port1;\n\n    const receiverReadyPromise = new DeferredPromise<void>();\n    const handshakeListener = (message: MessageEvent) => {\n      if (message.data.type === 'internal/ready') {\n        debug('[message-sender]: runtime is ready');\n        receiverReadyPromise.resolve();\n      }\n    };\n    window.addEventListener('message', handshakeListener);\n    receiverReadyPromise.then(() => {\n      window.removeEventListener('message', handshakeListener);\n    });\n    this.receiverReadyPromise = receiverReadyPromise;\n\n    // Attach a message listener once.\n    this.receiverPort.onmessage = (evt) => {\n      const data = evt.data;\n      if (data.type != null) {\n        debug('[message-sender]: emitting \"%s\" event...', data.type, data.payload);\n        this.emitter.dispatchEvent(new MessageEvent(data.type, { data: data.payload }));\n      }\n    };\n  }\n\n  public async handshake(): Promise<void> {\n    const handshakePromise = new DeferredPromise<void>();\n\n    await this.receiverReadyPromise;\n\n    debug('[message-sender]: sending handshake');\n    this.target.postMessage(\n      {\n        type: 'internal/handshake',\n      },\n      '*',\n      [this.channel.port2]\n    );\n\n    this.on('internal/handshake/done', () => {\n      handshakePromise.resolve();\n      clearTimeout(rejectionTimeout);\n    });\n\n    const rejectionTimeout = setTimeout(() => {\n      handshakePromise.reject(new Error('MessageSender: Handshake timeout'));\n    }, 5000);\n\n    return handshakePromise;\n  }\n\n  public on<Event extends keyof WorkerEvents & string>(\n    event: Event,\n    listener: (message: MessageEvent<WorkerEvents[Event]>) => void,\n    options?: AddEventListenerOptions\n  ): void {\n    debug('[message-sender]: add listener \"%s\"', event);\n\n    this.emitter.addEventListener(\n      event,\n      (message) => {\n        if (message instanceof MessageEvent) {\n          listener(message);\n        }\n      },\n      options\n    );\n  }\n\n  public off<Event extends keyof WorkerEvents & string>(\n    event: Event,\n    listener: (message: MessageEvent<WorkerEvents[Event]>) => void,\n    options?: AddEventListenerOptions\n  ): void {\n    this.emitter.removeEventListener(event, listener as EventListener, options);\n  }\n\n  public async send<Event extends keyof ConsumerEvents & string>(\n    event: Event,\n    ...data: ConsumerEvents[Event] extends [infer PayloadType, infer _]\n      ? [PayloadType]\n      : ConsumerEvents[Event] extends Record<string, unknown>\n      ? [ConsumerEvents[Event]]\n      : [undefined?]\n  ): Promise<\n    ConsumerEvents[Event] extends [infer _, infer ReturnType] ? OperationEvent<ReturnType> | undefined : void\n  > {\n    const operationPromise = new DeferredPromise<\n      ConsumerEvents[Event] extends [infer _, infer ReturnType] ? OperationEvent<ReturnType> : void\n    >();\n    const operationId = cuid();\n\n    const payload = data[0] || {};\n    debug('[message-sender]: send \"%s\" (%s)', event, operationId, payload);\n\n    this.receiverPort.postMessage({ type: event, payload: { operationId, payload } });\n\n    // Await this operation to be confirmed as done by the receiver.\n    debug('[message-sender]: adding done listener for \"%s\" (%s)', event, operationId);\n\n    const handleOperationDone = (doneEvent: MessageEvent<WorkerEvents['internal/operation/done']>) => {\n      const { data } = doneEvent;\n\n      if (data.operationId === operationId) {\n        const listenerPayload = (data.listenerPayload || {}) as ConsumerEvents[Event] extends [\n          infer _,\n          infer ReturnType\n        ]\n          ? OperationEvent<ReturnType>\n          : void;\n\n        debug('[message-sender]: resolving \"%s (%s) promise!', event, operationId);\n\n        operationPromise.resolve({\n          ...listenerPayload,\n          operationId: data.operationId,\n        });\n      }\n    };\n\n    const handleOperationFailed = (failEvent: MessageEvent<WorkerEvents['internal/operation/failed']>) => {\n      const { data } = failEvent;\n\n      if (data.operationId === operationId) {\n        debug('[message-sender]: rejecting \"%s (%s) promise!', event, operationId);\n\n        operationPromise.reject(data.error);\n      }\n    };\n\n    this.on('internal/operation/done', handleOperationDone);\n\n    // Handle exceptions from the receiver.\n    this.on('internal/operation/failed', handleOperationFailed);\n\n    return operationPromise.finally(() => {\n      // Clean up all the listeners for this particular operation.\n      // Each operation has its own unique ID, so we can safely remove all the listeners for this operation.\n      this.emitter.removeEventListener('internal/operation/done', handleOperationDone as EventListener);\n      this.emitter.removeEventListener('internal/operation/failed', handleOperationFailed as EventListener);\n    });\n  }\n}\n"
  },
  {
    "path": "packages/nodebox/src/modules/fs.ts",
    "content": "import cuid from 'cuid';\nimport { format } from 'outvariant';\nimport type { MessageSender, FSWatchEvent } from '../messages';\n\ntype FSEncoding = BufferEncoding | 'buffer';\n\nexport type FileContent = Uint8Array | string;\n\nexport interface FilesMap {\n  [filePath: string]: FileContent;\n}\n\nexport interface FileWatchOptions {\n  recursive?: boolean;\n}\n\nexport type FileWatchEvent = Omit<FSWatchEvent, 'watcherId'>;\n\nexport interface IFileStats {\n  type: 'dir' | 'file' | 'link';\n  size: number;\n  ino: number;\n  atimeMs: number;\n  mtimeMs: number;\n  ctimeMs: number;\n  blocks: number;\n  mode: number;\n}\n\nexport interface FileSystemEvents {\n  'fs/init': {\n    files: FilesMap;\n  };\n\n  'fs/readFile':\n    | [{ path: string; encoding?: undefined }, { data: Uint8Array }]\n    | [{ path: string; encoding?: 'buffer' }, { data: Uint8Array }]\n    | [{ path: string; encoding?: FSEncoding }, { data: string | FileContent }];\n\n  'fs/writeFile': {\n    path: string;\n    content: FileContent;\n    encoding?: BufferEncoding;\n    recursive?: boolean;\n  };\n\n  'fs/readdir': [\n    {\n      path: string;\n    },\n    { data: string[] }\n  ];\n\n  'fs/stat': [\n    {\n      path: string;\n    },\n    { data: IFileStats }\n  ];\n\n  'fs/mkdir': {\n    path: string;\n    recursive?: boolean;\n  };\n\n  'fs/rm': {\n    path: string;\n    force?: boolean;\n    recursive?: boolean;\n  };\n\n  'fs/watch': {\n    watcherId: string;\n    includes: string[];\n    excludes: string[];\n  };\n\n  'fs/unwatch': {\n    watcherId: string;\n  };\n}\n\ntype WriteFileOptions = BufferEncoding | { encoding?: BufferEncoding; recursive?: boolean };\n\nexport class FileSystemApi {\n  constructor(private readonly channel: MessageSender) {}\n\n  /**\n   * Initialize the File System worker with the files.\n   */\n  public async init(files: FilesMap): Promise<void> {\n    // Await the sent event to know when the worker\n    // is done writing the files.\n    await this.channel.send('fs/init', { files });\n  }\n\n  /**\n   * Read a file at the given path.\n   */\n  public async readFile(path: string, encoding?: undefined): Promise<Uint8Array>;\n  public async readFile(path: string, encoding: 'buffer'): Promise<Uint8Array>;\n  public async readFile(path: string, encoding: BufferEncoding): Promise<string>;\n\n  public async readFile(path: string, encoding?: FSEncoding): Promise<FileContent> {\n    const response = await this.channel.send('fs/readFile', { path, encoding }).catch((error) => {\n      throw new Error(format('Failed to read file at path \"%s\"', path), { cause: error });\n    });\n    if (!response) {\n      throw new Error('File not found');\n    }\n    return response.data;\n  }\n\n  /**\n   * Write a file at the given path.\n   * Replaces the file content if the file already exists.\n   */\n  public async writeFile(path: string, content: FileContent): Promise<void>;\n  public async writeFile(path: string, content: FileContent, options: WriteFileOptions): Promise<void>;\n\n  public async writeFile(path: string, content: FileContent, options?: WriteFileOptions): Promise<void> {\n    let encoding = undefined;\n    let recursive = false;\n\n    if (typeof options === 'object') {\n      encoding = options.encoding;\n      recursive = !!options.recursive;\n    } else if (typeof options === 'string') {\n      encoding = options;\n    }\n\n    await this.channel.send('fs/writeFile', { path, content, encoding, recursive }).catch((error) => {\n      throw new Error(format('Failed to write file at path \"%s\"', path), { cause: error });\n    });\n  }\n\n  public async readdir(path: string): Promise<string[]> {\n    const response = await this.channel.send('fs/readdir', { path }).catch((error) => {\n      throw new Error(format('Failed to read directory at path \"%s\"', path), { cause: error });\n    });\n    if (!response) {\n      throw new Error('Directory not found');\n    }\n    return response.data;\n  }\n\n  public async mkdir(path: string, options?: { recursive?: boolean }): Promise<void> {\n    const recursive = !!options?.recursive;\n    await this.channel.send('fs/mkdir', { path, recursive }).catch((error) => {\n      throw new Error(format('Failed to make directory at path \"%s\"', path), { cause: error });\n    });\n  }\n\n  public async stat(path: string): Promise<IFileStats> {\n    const response = await this.channel.send('fs/stat', { path }).catch((error) => {\n      throw new Error(format('Failed to stat file at path \"%s\"', path), { cause: error });\n    });\n    if (!response) {\n      throw new Error('File not found');\n    }\n    return response.data;\n  }\n\n  public async rm(path: string, options?: { force?: boolean; recursive?: boolean }): Promise<void> {\n    const { force, recursive } = options || {};\n    await this.channel.send('fs/rm', { path, force, recursive }).catch((error) => {\n      throw new Error(format('Failed to remove file at path \"%s\"', path), { cause: error });\n    });\n  }\n\n  /**\n   * Subscribe to changes at the given file or directory.\n   */\n  public async watch(\n    includes: string[],\n    excludes: string[],\n    listener?: (evt?: FileWatchEvent) => void\n  ): Promise<{ dispose: () => Promise<void> }> {\n    const watcherId = cuid();\n\n    await this.channel.send('fs/watch', { watcherId, includes, excludes });\n\n    this.channel.on('fs/watch-event', ({ data }) => {\n      if (data.watcherId === watcherId && listener) {\n        const evt = { ...data } as FSWatchEvent;\n        // @ts-ignore\n        delete evt.watcherId;\n        listener(evt);\n      }\n    });\n\n    return {\n      dispose: () => this.channel.send('fs/unwatch', { watcherId }),\n    };\n  }\n}\n"
  },
  {
    "path": "packages/nodebox/src/modules/preview.ts",
    "content": "import { format } from 'outvariant';\nimport { DeferredPromise } from '@open-draft/deferred-promise';\nimport type { MessageSender } from '../messages';\n\nexport interface PreviewEvents {\n  'preview/get/info': [\n    {\n      port?: number;\n      sourceShellId?: string;\n    },\n    PreviewInfo\n  ];\n}\n\nconst TIMEOUT = 20_000;\n\nexport type PreviewInfo = {\n  url: string;\n  sourceShellId: string;\n  port: number;\n};\n\nexport class PreviewApi {\n  constructor(private readonly channel: MessageSender) {}\n\n  private async waitFor(\n    payload: { sourceShellId?: string; port?: number },\n    predicate: (data: PreviewInfo) => boolean,\n    timeout = TIMEOUT\n  ): Promise<PreviewInfo> {\n    const readyPromise = new DeferredPromise<PreviewInfo>();\n\n    const rejectTimeout = setTimeout(() => {\n      readyPromise.reject();\n    }, timeout);\n\n    // Look up for the informaton on PreviewManager\n    const previewInformation = await this.channel.send('preview/get/info', payload).catch((error) => {\n      readyPromise.reject(\n        new Error(\n          format(\n            'Failed to look up preview information for shell ID \"%s\" (port: %d)',\n            payload.sourceShellId,\n            payload.port\n          )\n        )\n      );\n    });\n\n    const foundPreview = previewInformation && predicate(previewInformation);\n\n    if (foundPreview) {\n      readyPromise.resolve({\n        url: previewInformation.url,\n        port: previewInformation.port,\n        sourceShellId: previewInformation.sourceShellId,\n      });\n    }\n\n    // Response from PreviewManager\n    this.channel.on('preview/port/ready', ({ data }) => {\n      // Avoid resolve the promise once again\n      if (!foundPreview && predicate(data)) {\n        readyPromise.resolve({\n          url: data.url,\n          port: data.port,\n          sourceShellId: data.sourceShellId,\n        });\n      }\n    });\n\n    return readyPromise.finally(() => {\n      clearTimeout(rejectTimeout);\n    });\n  }\n\n  public async getByShellId(sourceShellId: string, timeout?: number): Promise<PreviewInfo> {\n    return this.waitFor({ sourceShellId }, (data) => data.sourceShellId === sourceShellId, timeout).catch((error) => {\n      throw new Error(format('Failed to get shell by ID \"%s\"', sourceShellId), { cause: error });\n    });\n  }\n\n  public async waitForPort(port: number, timeout?: number): Promise<PreviewInfo> {\n    return this.waitFor({ port }, (data) => data.port === port, timeout).catch((error) => {\n      throw new Error(format('Failed to await port %d', port), { cause: error });\n    });\n  }\n}\n"
  },
  {
    "path": "packages/nodebox/src/modules/shell.ts",
    "content": "import { format, invariant } from 'outvariant';\nimport { Emitter } from 'strict-event-emitter';\nimport type { MessageSender, WorkerStatusUpdate } from '../messages';\n\nexport interface ShellEvents {\n  'shell/runCommand': [\n    {\n      command: string;\n      args: Array<string>;\n      options: ShellCommandOptions;\n    },\n    ShellInfo\n  ];\n  'shell/exit': ShellInfo;\n  'shell/stdin': { data: string | Uint8Array; workerId: string };\n}\n\nexport interface ShellCommandOptions {\n  cwd?: string;\n  env?: Record<string, string>;\n}\n\nexport type ShellInfo = {\n  id: string;\n};\n\nexport class ShellApi {\n  constructor(private readonly channel: MessageSender) {}\n\n  public create(): ShellProcess {\n    return new ShellProcess(this.channel);\n  }\n}\n\nexport class ShellProcess {\n  public id?: string;\n  public state: 'running' | 'idle';\n\n  public stdout: Emitter<{\n    data: [string];\n  }>;\n  public stderr: Emitter<{\n    data: [string];\n  }>;\n  public stdin: {\n    write: (data: string | Uint8Array) => Promise<void>;\n  };\n\n  constructor(private readonly channel: MessageSender) {\n    this.state = 'running';\n    this.stdout = new Emitter();\n    this.stderr = new Emitter();\n    this.stdin = {\n      write: (data: string | Uint8Array): Promise<void> => {\n        if (!this.id) {\n          throw new Error('Failed to write to stdin, no process is currently running');\n        }\n\n        return this.channel.send('shell/stdin', { data: data, workerId: this.id });\n      },\n    };\n\n    this.forwardStdEvents();\n  }\n\n  private forwardStdEvents(): void {\n    this.channel.on('worker/tty', (message) => {\n      const { data } = message;\n\n      if (data.workerId !== this.id) {\n        return;\n      }\n\n      switch (data.payload.type) {\n        case 'out': {\n          this.stdout.emit('data', data.payload.data);\n          break;\n        }\n\n        case 'err': {\n          this.stderr.emit('data', data.payload.data);\n          break;\n        }\n      }\n    });\n  }\n\n  /**\n   * Evaluates a given module in the File\n   */\n  public async runCommand(command: string, args: Array<string>, options: ShellCommandOptions = {}): Promise<ShellInfo> {\n    invariant(!this.id, 'Failed to run \"runCommand\" on a ShellProcess: there is already a process running.');\n\n    const shellInfo = await this.channel.send('shell/runCommand', { command, args, options });\n\n    invariant(shellInfo, 'Failed to run \"runCommand\" on a ShellProcess: was not able to retrieve a running process.');\n\n    this.id = shellInfo.id;\n    this.state = 'running';\n\n    return shellInfo;\n  }\n\n  public async on(message: 'exit', listener: (exitCode: number, error?: { message: string }) => void): Promise<void>;\n  public async on(message: 'progress', listener: (status: WorkerStatusUpdate) => void): Promise<void>;\n\n  public async on(message: 'exit' | 'progress' | 'error', listener: any): Promise<void> {\n    switch (message) {\n      case 'progress': {\n        this.channel.on('worker/progress', ({ data }) => {\n          listener(data.status);\n        });\n        return;\n      }\n\n      case 'exit': {\n        this.channel.on('worker/exit', ({ data }) => {\n          if (data.workerId === this.id) {\n            listener(data.exitCode, data.error);\n          }\n        });\n        return;\n      }\n    }\n  }\n\n  /**\n   * Terminates the shell process.\n   */\n  public async kill(): Promise<void> {\n    invariant(\n      this.id,\n      'Failed to run \"kill\" on a ShellProcess: there is no process running. Did you forget to run it?'\n    );\n\n    /**\n     * @note Optimistically (and eagerly) transition the shell to the next state.\n     * Shell exit only fails on protocol mismatch or when it's already been killed.\n     */\n    this.state = 'idle';\n\n    /**\n     * @todo I wonder if we should support a custom \"exitCode\" here\n     * or a signal.\n     */\n    await this.channel.send('shell/exit', { id: this.id }).catch((error) => {\n      throw new Error(format('Failed to kill shell with ID \"%s\"', this.id), { cause: error });\n    });\n\n    this.id = undefined;\n  }\n}\n"
  },
  {
    "path": "packages/nodebox/src/runtime-protocol.types.ts",
    "content": "export const INJECT_MESSAGE_TYPE = 'INJECT_AND_INVOKE';\nexport const PREVIEW_LOADED_MESSAGE_TYPE = 'PREVIEW_LOADED';\n\nexport interface Message {\n  type: string;\n}\n\ntype BaseScope = Record<string, unknown>;\n\nexport interface InjectMessage<Scope = BaseScope> {\n  uid: string;\n\n  type: typeof INJECT_MESSAGE_TYPE;\n  /* A stringified function that will be called inside the iFrame. */\n  code: string;\n  /* The scope that will be passed to the injected code, as `options.scope`. */\n  scope: Scope;\n}\n"
  },
  {
    "path": "packages/nodebox/tsconfig.build.json",
    "content": "{\n  \"extends\": \"../../tsconfig.json\",\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"commonjs\",\n    \"rootDir\": \"./src\",\n    \"emitDeclarationOnly\": true,\n    \"declaration\": true,\n    \"declarationDir\": \"./build\"\n  },\n  \"include\": [\"src\"]\n}\n"
  },
  {
    "path": "packages/nodebox/tsconfig.json",
    "content": "{\n  \"extends\": \"../../tsconfig.json\",\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"commonjs\",\n    \"noEmit\": true\n  },\n  \"include\": [\"../../internals\", \"**/*.ts\"]\n}\n"
  },
  {
    "path": "packages/utils/jest.config.js",
    "content": "module.exports = {\n  preset: 'ts-jest',\n};\n"
  },
  {
    "path": "packages/utils/package.json",
    "content": "{\n  \"name\": \"internal-utils\",\n  \"version\": \"0.0.0\",\n  \"scripts\": {\n    \"test:unit\": \"jest\"\n  }\n}\n"
  },
  {
    "path": "packages/utils/withTimeout.test.ts",
    "content": "import { DeferredPromise } from '@open-draft/deferred-promise';\nimport { withTimeout } from './withTimeout';\n\nit('rejects a pending promise if it exceeds the timeout', async () => {\n  const promise = new DeferredPromise<void>();\n  withTimeout(promise, 200);\n\n  const rejectionError = new Error(`DeferredPromise hasn't settled within 200ms`);\n\n  await expect(promise).rejects.toThrowError(rejectionError);\n  expect(promise.state).toBe('rejected');\n  expect(promise.rejectionReason).toEqual(rejectionError);\n});\n\nit('rejects a pending promise that resolves post-timeout', async () => {\n  const promise = new DeferredPromise<number>();\n  withTimeout(promise, 200);\n  setTimeout(() => promise.resolve(123), 510);\n\n  const rejectionError = new Error(`DeferredPromise hasn't settled within 200ms`);\n\n  await expect(promise).rejects.toThrowError(rejectionError);\n  expect(promise.state).toBe('rejected');\n  expect(promise.rejectionReason).toEqual(rejectionError);\n});\n\nit('rejects a pending promise that rejects post-timeout', async () => {\n  const promise = new DeferredPromise<void>();\n  withTimeout(promise, 200);\n  setTimeout(() => promise.reject('reason'), 250);\n\n  const rejectionError = new Error(`DeferredPromise hasn't settled within 200ms`);\n\n  await expect(promise).rejects.toThrowError(rejectionError);\n  expect(promise.state).toBe('rejected');\n  expect(promise.rejectionReason).toEqual(rejectionError);\n});\n\nit('does not reject a promise that resolves within the timeout', async () => {\n  const promise = new DeferredPromise<number>();\n  withTimeout(promise, 200);\n  setTimeout(() => promise.resolve(123), 100);\n\n  expect(await promise).toBe(123);\n  expect(promise.state).toBe('fulfilled');\n\n  expect(await promise).toBe(123);\n  expect(promise.state).toBe('fulfilled');\n  expect(promise.rejectionReason).toBeUndefined();\n});\n\nit('does not reject a promise that rejects within the timeout', async () => {\n  const promise = new DeferredPromise<number>();\n  withTimeout(promise, 200);\n  setTimeout(() => promise.reject('reason'), 100);\n\n  await expect(promise).rejects.toBe('reason');\n  expect(promise.state).toBe('rejected');\n  expect(promise.rejectionReason).toBe('reason');\n});\n"
  },
  {
    "path": "packages/utils/withTimeout.ts",
    "content": "import { DeferredPromise } from '@open-draft/deferred-promise';\n\n/**\n * Rejects a given `DeferredPromise` if it doesn't settle within\n * the timeout duration.\n */\nexport function withTimeout(promise: DeferredPromise<any>, duration: number): void {\n  const timeout = setTimeout(() => {\n    // Prevent the timeout rejection if the Promise has already been settled.\n    // Rejecting a Promise multiple times is also a no-op, and it'd throw.\n    if (promise.state === 'pending') {\n      promise.reject(new Error(`DeferredPromise hasn't settled within ${duration}ms`));\n    }\n  }, duration);\n\n  const cancelTimeout = () => clearTimeout(timeout);\n  promise.then(cancelTimeout, cancelTimeout);\n}\n"
  },
  {
    "path": "playwright.config.ts",
    "content": "import type { PlaywrightTestConfig } from '@playwright/test';\nimport { devices } from '@playwright/test';\n\nconst config: PlaywrightTestConfig = {\n  testDir: './tests',\n  globalSetup: require.resolve('./tests/setup/globalSetup'),\n  workers: 1,\n  reporter: process.env.CI ? 'github' : undefined,\n  use: {\n    browserName: 'chromium',\n    channel: 'chrome',\n    ignoreHTTPSErrors: true,\n    launchOptions: {\n      args: [\n        '--allow-insecure-localhost',\n        '--ignore-certificate-errors',\n        /**\n         * @note Setting this feature flag prevents \"SharedArrayBuffer is not defined\"\n         * for insecure hosts.\n         */\n        '--enable-features=SharedArrayBuffer',\n        '--unsafely-treat-insecure-origin-as-secure=https://localhost',\n      ],\n      devtools: true,\n    },\n    screenshot: 'only-on-failure',\n  },\n  projects: process.env.CI\n    ? [\n        { name: 'chromium', use: devices['Desktop Chrome'] },\n        { name: 'firefox', use: devices['Desktop Firefox'] },\n        { name: 'webkit', use: devices['Desktop Safari'] },\n      ]\n    : [],\n  forbidOnly: !!process.env.CI,\n};\n\nexport default config;\n"
  },
  {
    "path": "pnpm-workspace.yaml",
    "content": "packages:\n  - ./packages/*\n"
  },
  {
    "path": "release-please-config.json",
    "content": "{\n  \"packages\": {\n    \"packages/nodebox\": {\n      \"release-type\": \"node\",\n      \"bump-minor-pre-major\": true,\n      \"bump-patch-for-minor-pre-major\": true\n    }\n  }\n}\n"
  },
  {
    "path": "req.conf",
    "content": "[req]\ndistinguished_name = req_distinguished_name\nx509_extensions = v3_req\nprompt = no\n\n[req_distinguished_name]\n# C = US\n# ST = California\n# L = Los Angeles\n# O = Internet Corporation for Assigned Names and Numbers\n# OU = IT Operations\nCN = csb.test\n\n[v3_req]\nkeyUsage = nonRepudiation, digitalSignature, keyEncipherment\nextendedKeyUsage = serverAuth\nsubjectAltName = @alt_names\n\n[alt_names]\nDNS.1 = csb.test\nDNS.2 = *.csb.test\nIP.1 = 127.0.0.1\n"
  },
  {
    "path": "sync-repo.js",
    "content": "const fs = require(\"fs\");\nconst path = require(\"path\");\n\nconsole.log('Syncing private repo to this public repo...');\n\nconst publicEntries = fs.readdirSync(__dirname);\nfor (const entry of publicEntries) {\n  // Skip git content\n  if (entry === \".git\" || entry === \".github\" || entry === \"sync-repo.js\") {\n    continue;\n  }\n  \n  console.log('Cleaning up public repo:', entry);\n  fs.rmSync(path.join(__dirname, entry), {\n    recursive: true,\n  });\n}\n\nconst privateNodeboxRoot = path.join(__dirname, \"../nodebox\");\nconst privateEntries = fs.readdirSync(privateNodeboxRoot);\nfor (const entry of privateEntries) {\n  // Skip git content\n  if (entry === \".git\" || entry === \".github\" || entry === \"sync-repo.js\" || entry === \"node_modules\") {\n    continue;\n  }\n\n  console.log('Copying to public repo:', entry);\n  fs.cpSync(path.join(privateNodeboxRoot, entry), path.join(__dirname, entry), {\n    recursive: true,\n    force: true,\n  });\n}\n\nconsole.log('Removing internal/closed-source code...');\nconst INTERNAL_ENTRIES = ['packages/runtime', 'documentation'];\nfor (const entry of INTERNAL_ENTRIES) {\n  fs.rmSync(path.join(__dirname, entry), {\n    recursive: true,\n  });\n}\n\nconsole.log('Sync completed! :D');\n"
  },
  {
    "path": "tests/cdn-proxy/v2/deps/ZXNidWlsZC13YXNtQDAuMTcuMTI7dml0ZUA0LjIuMA==",
    "content": "esbuild-wasm@00.17.12esbuild@00.17.9function-bind@11.1.1has@11.0.3is-core-module@22.9.0nanoid@33.3.4path-parse@11.0.7picocolors@11.0.0postcss@88.4.21resolve@11.22.1rollup@33.20.0source-map-js@11.0.2!supports-preserve-symlinks-flag@11.0.0vite@44.2.0"
  },
  {
    "path": "tests/cdn-proxy/v2/deps/bm9kZS1mZXRjaEAzLjMuMA==",
    "content": "data-uri-to-buffer@44.0.1fetch-blob@33.2.0formdata-polyfill@44.0.10node-domexception@11.0.0node-fetch@33.3.0web-streams-polyfill@33.2.1"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QG1kaXQtdnVlL3BsdWdpbi10aXRsZUAwLjExLjI=",
    "content": "/dist/index.cjs\u0001'use strict';\n\nconst shared = require('@mdit-vue/shared');\n\nconst titlePlugin = (md) => {\n  const render = md.renderer.render.bind(md.renderer);\n  md.renderer.render = (tokens, options, env) => {\n    const tokenIdx = tokens.findIndex((token) => token.tag === \"h1\");\n    env.title = tokenIdx > -1 ? shared.resolveTitleFromToken(tokens[tokenIdx + 1], {\n      shouldAllowHtml: false,\n      shouldEscapeText: false\n    }) : \"\";\n    return render(tokens, options, env);\n  };\n};\n\nexports.titlePlugin = titlePlugin;\n/README.md\u0003C# @mdit-vue/plugin-title\n\n[![npm](https://badgen.net/npm/v/@mdit-vue/plugin-title)](https://www.npmjs.com/package/@mdit-vue/plugin-title)\n[![license](https://badgen.net/github/license/mdit-vue/mdit-vue)](https://github.com/mdit-vue/mdit-vue/blob/main/LICENSE)\n\nA [markdown-it](https://github.com/markdown-it/markdown-it) plugin to get page title.\n\n- Extracts title (the content of the first level-1 heading) into markdown-it `env.title`.\n\n## Install\n\n```sh\nnpm i @mdit-vue/plugin-title\n```\n\n## Usage\n\n```ts\nimport MarkdownIt from 'markdown-it';\nimport { titlePlugin } from '@mdit-vue/plugin-title';\nimport type { MarkdownItEnv } from '@mdit-vue/types';\n\nconst md = MarkdownIt({ html: true }).use(titlePlugin);\nconst env: MarkdownItEnv = {};\n\nconst rendered = md.render(\n  `\\\n# h1\n## h2\n### h3\n`,\n  env,\n);\n\nconsole.log(env.title);\n```\n/dist/index.mjs\u0001import { resolveTitleFromToken } from '@mdit-vue/shared';\n\nconst titlePlugin = (md) => {\n  const render = md.renderer.render.bind(md.renderer);\n  md.renderer.render = (tokens, options, env) => {\n    const tokenIdx = tokens.findIndex((token) => token.tag === \"h1\");\n    env.title = tokenIdx > -1 ? resolveTitleFromToken(tokens[tokenIdx + 1], {\n      shouldAllowHtml: false,\n      shouldEscapeText: false\n    }) : \"\";\n    return render(tokens, options, env);\n  };\n};\n\nexport { titlePlugin };\n/package.json\u0004{\n  \"name\": \"@mdit-vue/plugin-title\",\n  \"version\": \"0.11.2\",\n  \"description\": \"A markdown-it plugin to get markdown page title\",\n  \"keywords\": [\n    \"markdown-it\",\n    \"markdown-it-plugin\",\n    \"vue\",\n    \"title\"\n  ],\n  \"homepage\": \"https://github.com/mdit-vue\",\n  \"bugs\": {\n    \"url\": \"https://github.com/mdit-vue/mdit-vue/issues\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/mdit-vue/mdit-vue.git\"\n  },\n  \"license\": \"MIT\",\n  \"author\": \"meteorlxy <meteor.lxy@foxmail.com>\",\n  \"type\": \"module\",\n  \"exports\": {\n    \".\": {\n      \"types\": \"./dist/index.d.ts\",\n      \"import\": \"./dist/index.mjs\",\n      \"require\": \"./dist/index.cjs\"\n    }\n  },\n  \"main\": \"./dist/index.cjs\",\n  \"module\": \"./dist/index.mjs\",\n  \"types\": \"./dist/index.d.ts\",\n  \"files\": [\n    \"./dist\"\n  ],\n  \"scripts\": {\n    \"build\": \"unbuild\",\n    \"test\": \"vitest\"\n  },\n  \"dependencies\": {\n    \"@mdit-vue/shared\": \"0.11.2\",\n    \"@mdit-vue/types\": \"0.11.0\",\n    \"@types/markdown-it\": \"^12.2.3\",\n    \"markdown-it\": \"^13.0.1\"\n  },\n  \"devDependencies\": {\n    \"@types/markdown-it-emoji\": \"^2.0.2\",\n    \"markdown-it-emoji\": \"^2.0.2\"\n  },\n  \"publishConfig\": {\n    \"access\": \"public\"\n  },\n  \"gitHead\": \"676ec4ca8704d709e7a47f7f6d41ff3f70dc2356\"\n}\n/LICENSE\u0004IThe MIT License (MIT)\n\nCopyright (c) 2022-present, mdit-vue Contributors\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n/dist/index.d.ts\u0001pimport MarkdownIt from 'markdown-it';\n\n/**\n * Get markdown page title info\n *\n * Extract it into env\n */\ndeclare const titlePlugin: MarkdownIt.PluginSimple;\n\ndeclare module '@mdit-vue/types' {\n    interface MarkdownItEnv {\n        /**\n         * The title that extracted by `@mdit-vue/plugin-title`\n         */\n        title?: string;\n    }\n}\n\nexport { titlePlugin };\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QG1kaXQtdnVlL3BsdWdpbi10b2NAMC4xMS4y",
    "content": "/dist/index.cjs\f\u0001'use strict';\n\nconst shared = require('@mdit-vue/shared');\n\nconst createRenderHeaders = ({\n  listTag,\n  listClass,\n  itemClass,\n  linkTag,\n  linkClass\n}) => {\n  const listTagString = shared.htmlEscape(listTag);\n  const listClassString = listClass ? ` class=\"${shared.htmlEscape(listClass)}\"` : \"\";\n  const itemTagString = \"li\";\n  const itemClassString = itemClass ? ` class=\"${shared.htmlEscape(itemClass)}\"` : \"\";\n  const linkTagString = shared.htmlEscape(linkTag);\n  const linkClassString = linkClass ? ` class=\"${shared.htmlEscape(linkClass)}\"` : \"\";\n  const linkTo = (link) => linkTag === \"router-link\" ? ` to=\"${link}\"` : ` href=\"${link}\"`;\n  const renderHeaders = (headers) => `<${listTagString}${listClassString}>${headers.map(\n    (header) => `<${itemTagString}${itemClassString}${itemClassString}><${linkTagString}${linkClassString}${linkTo(header.link)}>${header.title}</${linkTagString}>${header.children.length > 0 ? renderHeaders(header.children) : \"\"}</${itemTagString}>`\n  ).join(\"\")}</${listTagString}>`;\n  return renderHeaders;\n};\n\nconst createTocBlockRule = ({\n  pattern,\n  containerTag,\n  containerClass\n}) => {\n  return (state, startLine, endLine, silent) => {\n    if (state.sCount[startLine] - state.blkIndent >= 4) {\n      return false;\n    }\n    const pos = state.bMarks[startLine] + state.tShift[startLine];\n    const max = state.eMarks[startLine];\n    const lineFirstToken = state.src.slice(pos, max).split(\" \")[0];\n    if (!pattern.test(lineFirstToken))\n      return false;\n    if (silent)\n      return true;\n    state.line = startLine + 1;\n    const tokenOpen = state.push(\"toc_open\", containerTag, 1);\n    tokenOpen.markup = \"\";\n    tokenOpen.map = [startLine, state.line];\n    if (containerClass) {\n      tokenOpen.attrSet(\"class\", containerClass);\n    }\n    const tokenBody = state.push(\"toc_body\", \"\", 0);\n    tokenBody.markup = lineFirstToken;\n    tokenBody.map = [startLine, state.line];\n    tokenBody.hidden = true;\n    const tokenClose = state.push(\"toc_close\", containerTag, -1);\n    tokenClose.markup = \"\";\n    tokenBody.map = [startLine, state.line];\n    return true;\n  };\n};\n\nconst tocPlugin = (md, {\n  pattern = /^\\[\\[toc\\]\\]$/i,\n  slugify = shared.slugify,\n  format,\n  level = [2, 3],\n  containerTag = \"nav\",\n  containerClass = \"table-of-contents\",\n  listTag = \"ul\",\n  listClass = \"\",\n  itemClass = \"\",\n  linkTag = \"a\",\n  linkClass = \"\"\n} = {}) => {\n  md.block.ruler.before(\n    \"heading\",\n    \"toc\",\n    createTocBlockRule({\n      pattern,\n      containerTag,\n      containerClass\n    }),\n    {\n      alt: [\"paragraph\", \"reference\", \"blockquote\"]\n    }\n  );\n  const renderHeaders = createRenderHeaders({\n    listTag,\n    listClass,\n    itemClass,\n    linkTag,\n    linkClass\n  });\n  md.renderer.rules.toc_body = (tokens) => renderHeaders(\n    shared.resolveHeadersFromTokens(tokens, {\n      level,\n      shouldAllowHtml: true,\n      shouldEscapeText: true,\n      slugify,\n      format\n    })\n  );\n};\n\nexports.createRenderHeaders = createRenderHeaders;\nexports.createTocBlockRule = createTocBlockRule;\nexports.tocPlugin = tocPlugin;\n/LICENSE\u0004IThe MIT License (MIT)\n\nCopyright (c) 2022-present, mdit-vue Contributors\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n/dist/index.mjs\u000bimport { htmlEscape, resolveHeadersFromTokens, slugify } from '@mdit-vue/shared';\n\nconst createRenderHeaders = ({\n  listTag,\n  listClass,\n  itemClass,\n  linkTag,\n  linkClass\n}) => {\n  const listTagString = htmlEscape(listTag);\n  const listClassString = listClass ? ` class=\"${htmlEscape(listClass)}\"` : \"\";\n  const itemTagString = \"li\";\n  const itemClassString = itemClass ? ` class=\"${htmlEscape(itemClass)}\"` : \"\";\n  const linkTagString = htmlEscape(linkTag);\n  const linkClassString = linkClass ? ` class=\"${htmlEscape(linkClass)}\"` : \"\";\n  const linkTo = (link) => linkTag === \"router-link\" ? ` to=\"${link}\"` : ` href=\"${link}\"`;\n  const renderHeaders = (headers) => `<${listTagString}${listClassString}>${headers.map(\n    (header) => `<${itemTagString}${itemClassString}${itemClassString}><${linkTagString}${linkClassString}${linkTo(header.link)}>${header.title}</${linkTagString}>${header.children.length > 0 ? renderHeaders(header.children) : \"\"}</${itemTagString}>`\n  ).join(\"\")}</${listTagString}>`;\n  return renderHeaders;\n};\n\nconst createTocBlockRule = ({\n  pattern,\n  containerTag,\n  containerClass\n}) => {\n  return (state, startLine, endLine, silent) => {\n    if (state.sCount[startLine] - state.blkIndent >= 4) {\n      return false;\n    }\n    const pos = state.bMarks[startLine] + state.tShift[startLine];\n    const max = state.eMarks[startLine];\n    const lineFirstToken = state.src.slice(pos, max).split(\" \")[0];\n    if (!pattern.test(lineFirstToken))\n      return false;\n    if (silent)\n      return true;\n    state.line = startLine + 1;\n    const tokenOpen = state.push(\"toc_open\", containerTag, 1);\n    tokenOpen.markup = \"\";\n    tokenOpen.map = [startLine, state.line];\n    if (containerClass) {\n      tokenOpen.attrSet(\"class\", containerClass);\n    }\n    const tokenBody = state.push(\"toc_body\", \"\", 0);\n    tokenBody.markup = lineFirstToken;\n    tokenBody.map = [startLine, state.line];\n    tokenBody.hidden = true;\n    const tokenClose = state.push(\"toc_close\", containerTag, -1);\n    tokenClose.markup = \"\";\n    tokenBody.map = [startLine, state.line];\n    return true;\n  };\n};\n\nconst tocPlugin = (md, {\n  pattern = /^\\[\\[toc\\]\\]$/i,\n  slugify: slugify$1 = slugify,\n  format,\n  level = [2, 3],\n  containerTag = \"nav\",\n  containerClass = \"table-of-contents\",\n  listTag = \"ul\",\n  listClass = \"\",\n  itemClass = \"\",\n  linkTag = \"a\",\n  linkClass = \"\"\n} = {}) => {\n  md.block.ruler.before(\n    \"heading\",\n    \"toc\",\n    createTocBlockRule({\n      pattern,\n      containerTag,\n      containerClass\n    }),\n    {\n      alt: [\"paragraph\", \"reference\", \"blockquote\"]\n    }\n  );\n  const renderHeaders = createRenderHeaders({\n    listTag,\n    listClass,\n    itemClass,\n    linkTag,\n    linkClass\n  });\n  md.renderer.rules.toc_body = (tokens) => renderHeaders(\n    resolveHeadersFromTokens(tokens, {\n      level,\n      shouldAllowHtml: true,\n      shouldEscapeText: true,\n      slugify: slugify$1,\n      format\n    })\n  );\n};\n\nexport { createRenderHeaders, createTocBlockRule, tocPlugin };\n/dist/index.d.ts\nimport { MarkdownItHeader } from '@mdit-vue/types';\nimport ParserBlock from 'markdown-it/lib/parser_block.js';\nimport MarkdownIt from 'markdown-it';\n\n/**\n * Options of @mdit-vue/plugin-toc\n */\ninterface TocPluginOptions {\n    /**\n     * The pattern serving as the TOC placeholder in your markdown\n     *\n     * @default /^\\[\\[toc\\]\\]$/i\n     */\n    pattern?: RegExp;\n    /**\n     * A custom slugification function\n     *\n     * Should use the same slugify function with markdown-it-anchor\n     * to ensure the link is matched\n     */\n    slugify?: (str: string) => string;\n    /**\n     * A function for formatting headings\n     */\n    format?: (str: string) => string;\n    /**\n     * Heading level that going to be included in the TOC\n     *\n     * Should be a subset of markdown-it-anchor's `level` option\n     * to ensure the link is existed\n     *\n     * @default [2,3]\n     */\n    level?: number[];\n    /**\n     * HTML tag of the TOC container\n     *\n     * @default 'nav'\n     */\n    containerTag?: string;\n    /**\n     * The class for the TOC container\n     *\n     * @default 'table-of-contents'\n     */\n    containerClass?: string;\n    /**\n     * HTML tag of the TOC list\n     *\n     * @default 'ul'\n     */\n    listTag?: 'ul' | 'ol';\n    /**\n     * The class for the TOC list\n     *\n     * @default ''\n     */\n    listClass?: string;\n    /**\n     * The class for the `<li>` tag\n     *\n     * @default ''\n     */\n    itemClass?: string;\n    /**\n     * The tag of the link inside `<li>` tag\n     *\n     * @default 'a'\n     */\n    linkTag?: 'a' | 'router-link';\n    /**\n     * The class for the link inside the `<li>` tag\n     *\n     * @default ''\n     */\n    linkClass?: string;\n}\n\ntype RenderHeadersFn = (headers: MarkdownItHeader[]) => string;\ndeclare const createRenderHeaders: ({ listTag, listClass, itemClass, linkTag, linkClass, }: Pick<Required<TocPluginOptions>, 'listTag' | 'listClass' | 'itemClass' | 'linkTag' | 'linkClass'>) => RenderHeadersFn;\n\n/**\n * Forked and modified from markdown-it-toc-done-right\n *\n * - remove the `inlineOptions` support\n * - use markdown-it default renderer to render token whenever possible\n *\n * @see https://github.com/nagaozen/markdown-it-toc-done-right\n */\ndeclare const createTocBlockRule: ({ pattern, containerTag, containerClass, }: Pick<Required<TocPluginOptions>, 'pattern' | 'containerTag' | 'containerClass'>) => ParserBlock.RuleBlock;\n\n/**\n * Generate table of contents\n *\n * Forked and modified from markdown-it-toc-done-right:\n *\n * @see https://github.com/nagaozen/markdown-it-toc-done-right\n */\ndeclare const tocPlugin: MarkdownIt.PluginWithOptions<TocPluginOptions>;\n\nexport { TocPluginOptions, createRenderHeaders, createTocBlockRule, tocPlugin };\n/package.json\u0004{\n  \"name\": \"@mdit-vue/plugin-toc\",\n  \"version\": \"0.11.2\",\n  \"description\": \"A markdown-it plugin to generate table-of-contents that compatible with Vue.js\",\n  \"keywords\": [\n    \"markdown-it\",\n    \"markdown-it-plugin\",\n    \"vue\",\n    \"toc\",\n    \"table-of-contents\"\n  ],\n  \"homepage\": \"https://github.com/mdit-vue\",\n  \"bugs\": {\n    \"url\": \"https://github.com/mdit-vue/mdit-vue/issues\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/mdit-vue/mdit-vue.git\"\n  },\n  \"license\": \"MIT\",\n  \"author\": \"meteorlxy <meteor.lxy@foxmail.com>\",\n  \"type\": \"module\",\n  \"exports\": {\n    \".\": {\n      \"types\": \"./dist/index.d.ts\",\n      \"import\": \"./dist/index.mjs\",\n      \"require\": \"./dist/index.cjs\"\n    }\n  },\n  \"main\": \"./dist/index.cjs\",\n  \"module\": \"./dist/index.mjs\",\n  \"types\": \"./dist/index.d.ts\",\n  \"files\": [\n    \"./dist\"\n  ],\n  \"scripts\": {\n    \"build\": \"unbuild\",\n    \"test\": \"vitest\"\n  },\n  \"dependencies\": {\n    \"@mdit-vue/shared\": \"0.11.2\",\n    \"@mdit-vue/types\": \"0.11.0\",\n    \"@types/markdown-it\": \"^12.2.3\",\n    \"markdown-it\": \"^13.0.1\"\n  },\n  \"devDependencies\": {\n    \"markdown-it-anchor\": \"^8.6.6\"\n  },\n  \"publishConfig\": {\n    \"access\": \"public\"\n  },\n  \"gitHead\": \"676ec4ca8704d709e7a47f7f6d41ff3f70dc2356\"\n}\n/README.md\u000b# @mdit-vue/plugin-toc\n\n[![npm](https://badgen.net/npm/v/@mdit-vue/plugin-toc)](https://www.npmjs.com/package/@mdit-vue/plugin-toc)\n[![license](https://badgen.net/github/license/mdit-vue/mdit-vue)](https://github.com/mdit-vue/mdit-vue/blob/main/LICENSE)\n\nA [markdown-it](https://github.com/markdown-it/markdown-it) plugin to generate table-of-contents (TOC) that compatible with [Vue.js](https://vuejs.org).\n\nThis plugin is basically a fork of [markdown-it-toc-done-right](https://github.com/nagaozen/markdown-it-toc-done-right), with following enhancement:\n\n- Allows `html_inline` tags in headings to support vue components.\n- Supports [containerTag](#containertag), [listTag](#listtag) and [linkTag](#linktag).\n- Only allows array in [level](#level) option.\n- Code refactor and optimizations.\n\n## Install\n\n```sh\nnpm i @mdit-vue/plugin-toc\n```\n\n## Usage\n\n```ts\nimport MarkdownIt from 'markdown-it';\nimport { tocPlugin } from '@mdit-vue/plugin-toc';\n\nconst md = MarkdownIt({ html: true }).use(tocPlugin, {\n  // options\n});\n```\n\n## Options\n\n### pattern\n\n- Type: `RegExp`\n\n- Default: `/^\\[\\[toc\\]\\]$/i`\n\n- Details:\n\n  The pattern serving as the TOC placeholder in your markdown.\n\n### slugify\n\n- Type: `(str: string) => string`\n\n- Default: `slugify` from `@mdit-vue/shared`\n\n- Details:\n\n  A custom slugification function.\n\n  The default slugify function comes from [@mdit-vue/shared](https://github.com/mdit-vue/mdit-vue/tree/main/packages/shared) package.\n\n  When using this plugin with [markdown-it-anchor](https://github.com/valeriangalliat/markdown-it-anchor) (recommended), this option will be ignored because the `id` of the headings have already been determined by markdown-it-anchor's `slugify` option.\n\n### format\n\n- Type: `(str: string) => string`\n\n- Details:\n\n  A function for formatting headings.\n\n### level\n\n- Type: `number[]`\n\n- Default: `[2, 3]`\n\n- Details:\n\n  Heading level that going to be included in the TOC.\n\n  When using this plugin with [markdown-it-anchor](https://github.com/valeriangalliat/markdown-it-anchor) (recommended), this option should be a subset of markdown-it-anchor's `level` option to ensure the target links are existed.\n\n### containerTag\n\n- Type: `string`\n\n- Default: `'nav'`\n\n- Details:\n\n  HTML tag of the TOC container.\n\n### containerClass\n\n- Type: `string`\n\n- Default: `'table-of-contents'`\n\n- Details:\n\n  The class for the TOC container.\n\n### listTag\n\n- Type: `'ul' | 'ol'`\n\n- Default: `'ul'`\n\n- Details:\n\n  HTML tag of the TOC list.\n\n### listClass\n\n- Type: `string`\n\n- Default: `''`\n\n- Details:\n\n  The class for the TOC list.\n\n### itemClass\n\n- Type: `string`\n\n- Default: `''`\n\n- Details:\n\n  The class for the `<li>` tag.\n\n### linkTag\n\n- Type: `'a' | 'router-link'`\n\n- Default: `'a'`\n\n- Details:\n\n  The tag of the link inside the `<li>` tag.\n\n  You can set this option to render to links as [vue-router's router-link](https://router.vuejs.org/guide/#html).\n\n### linkClass\n\n- Type: `string`\n\n- Default: `''`\n\n- Details:\n\n  The class for the link inside the `<li>` tag.\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QG1kaXQtdnVlL3BsdWdpbi1jb21wb25lbnRAMC4xMS4y",
    "content": "/dist/index.d.ts\bimport MarkdownIt from 'markdown-it';\nimport ParserBlock from 'markdown-it/lib/parser_block.js';\nimport ParserInline from 'markdown-it/lib/parser_inline.js';\n\n/**\n * Options of @mdit-vue/plugin-component\n */\ninterface ComponentPluginOptions {\n    /**\n     * Extra tags to be treated as block tags.\n     *\n     * @default []\n     */\n    blockTags?: string[];\n    /**\n     * Extra tags to be treated as inline tags.\n     *\n     * @default []\n     */\n    inlineTags?: string[];\n}\n\n/**\n * Allows better use of Vue components in Markdown\n */\ndeclare const componentPlugin: MarkdownIt.PluginWithOptions<ComponentPluginOptions>;\n\ndeclare const createHtmlBlockRule: (options: Required<ComponentPluginOptions>) => ParserBlock.RuleBlock;\n\ndeclare const htmlInlineRule: ParserInline.RuleInline;\n\ndeclare const HTML_TAG_RE: RegExp;\ndeclare const HTML_OPEN_CLOSE_TAG_RE: RegExp;\ndeclare const HTML_SELF_CLOSING_TAG_RE: RegExp;\ndeclare const HTML_OPEN_AND_CLOSE_TAG_IN_THE_SAME_LINE_RE: RegExp;\n\n/**\n * List of block tags\n *\n * @see https://spec.commonmark.org/0.30/#html-blocks\n */\ndeclare const TAGS_BLOCK: string[];\n/**\n * According to markdown spec, all non-block html tags are treated as \"inline\"\n * tags (wrapped with <p></p>), including those \"unknown\" tags\n *\n * Therefore, markdown-it processes \"inline\" tags and \"unknown\" tags in the same\n * way, and does not care if a tag is \"inline\" or \"unknown\"\n *\n * As we want to take those \"unknown\" tags as custom components, we should\n * treat them as \"block\" tags\n *\n * So we have to distinguish between \"inline\" and \"unknown\" tags ourselves\n *\n * The inline tags list comes from MDN\n *\n * @see https://spec.commonmark.org/0.30/#raw-html\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Inline_elements\n */\ndeclare const TAGS_INLINE: string[];\n/**\n * Tags of Vue built-in components\n *\n * @see https://vuejs.org/api/built-in-components.html\n * @see https://vuejs.org/api/built-in-special-elements.html\n */\ndeclare const TAGS_VUE_RESERVED: string[];\n\nexport { ComponentPluginOptions, HTML_OPEN_AND_CLOSE_TAG_IN_THE_SAME_LINE_RE, HTML_OPEN_CLOSE_TAG_RE, HTML_SELF_CLOSING_TAG_RE, HTML_TAG_RE, TAGS_BLOCK, TAGS_INLINE, TAGS_VUE_RESERVED, componentPlugin, createHtmlBlockRule, htmlInlineRule };\n/package.json\u0004n{\n  \"name\": \"@mdit-vue/plugin-component\",\n  \"version\": \"0.11.2\",\n  \"description\": \"A markdown-it plugin to allow vue components in markdown\",\n  \"keywords\": [\n    \"markdown-it\",\n    \"markdown-it-plugin\",\n    \"vue\",\n    \"component\"\n  ],\n  \"homepage\": \"https://github.com/mdit-vue\",\n  \"bugs\": {\n    \"url\": \"https://github.com/mdit-vue/mdit-vue/issues\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/mdit-vue/mdit-vue.git\"\n  },\n  \"license\": \"MIT\",\n  \"author\": \"meteorlxy <meteor.lxy@foxmail.com>\",\n  \"type\": \"module\",\n  \"exports\": {\n    \".\": {\n      \"types\": \"./dist/index.d.ts\",\n      \"import\": \"./dist/index.mjs\",\n      \"require\": \"./dist/index.cjs\"\n    }\n  },\n  \"main\": \"./dist/index.cjs\",\n  \"module\": \"./dist/index.mjs\",\n  \"types\": \"./dist/index.d.ts\",\n  \"files\": [\n    \"./dist\"\n  ],\n  \"scripts\": {\n    \"build\": \"unbuild\",\n    \"test\": \"vitest\"\n  },\n  \"dependencies\": {\n    \"@types/markdown-it\": \"^12.2.3\",\n    \"markdown-it\": \"^13.0.1\"\n  },\n  \"devDependencies\": {\n    \"@vue/shared\": \"^3.2.45\"\n  },\n  \"publishConfig\": {\n    \"access\": \"public\"\n  },\n  \"gitHead\": \"676ec4ca8704d709e7a47f7f6d41ff3f70dc2356\"\n}\n/dist/index.mjs\u0018\u000fimport blockNames from 'markdown-it/lib/common/html_blocks.js';\n\nconst attr_name = \"[a-zA-Z_:@][a-zA-Z0-9:._-]*\";\nconst unquoted = \"[^\\\"'=<>`\\\\x00-\\\\x20]+\";\nconst single_quoted = \"'[^']*'\";\nconst double_quoted = '\"[^\"]*\"';\nconst attr_value = \"(?:\" + unquoted + \"|\" + single_quoted + \"|\" + double_quoted + \")\";\nconst attribute = \"(?:\\\\s+\" + attr_name + \"(?:\\\\s*=\\\\s*\" + attr_value + \")?)\";\nconst open_tag = \"<[A-Za-z][A-Za-z0-9\\\\-]*\" + attribute + \"*\\\\s*\\\\/?>\";\nconst close_tag = \"<\\\\/[A-Za-z][A-Za-z0-9\\\\-]*\\\\s*>\";\nconst comment = \"<!---->|<!--(?:-?[^>-])(?:-?[^-])*-->\";\nconst processing = \"<[?][\\\\s\\\\S]*?[?]>\";\nconst declaration = \"<![A-Z]+\\\\s+[^>]*>\";\nconst cdata = \"<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>\";\nconst HTML_TAG_RE = new RegExp(\n  \"^(?:\" + open_tag + \"|\" + close_tag + \"|\" + comment + \"|\" + processing + \"|\" + declaration + \"|\" + cdata + \")\"\n);\nconst HTML_OPEN_CLOSE_TAG_RE = new RegExp(\n  \"^(?:\" + open_tag + \"|\" + close_tag + \")\"\n);\nconst HTML_SELF_CLOSING_TAG_RE = new RegExp(\n  \"^<[A-Za-z][A-Za-z0-9\\\\-]*\" + attribute + \"*\\\\s*\\\\/>\"\n);\nconst HTML_OPEN_AND_CLOSE_TAG_IN_THE_SAME_LINE_RE = new RegExp(\n  \"^<([A-Za-z][A-Za-z0-9\\\\-]*)\" + attribute + \"*\\\\s*>.*<\\\\/\\\\1\\\\s*>\"\n);\n\nconst TAGS_BLOCK = blockNames;\nconst TAGS_INLINE = [\n  \"a\",\n  \"abbr\",\n  \"acronym\",\n  \"audio\",\n  \"b\",\n  \"bdi\",\n  \"bdo\",\n  \"big\",\n  \"br\",\n  \"button\",\n  \"canvas\",\n  \"cite\",\n  \"code\",\n  \"data\",\n  \"datalist\",\n  \"del\",\n  \"dfn\",\n  \"em\",\n  \"embed\",\n  \"i\",\n  \"iframe\",\n  \"img\",\n  \"input\",\n  \"ins\",\n  \"kbd\",\n  \"label\",\n  \"map\",\n  \"mark\",\n  \"meter\",\n  \"noscript\",\n  \"object\",\n  \"output\",\n  \"picture\",\n  \"progress\",\n  \"q\",\n  \"ruby\",\n  \"s\",\n  \"samp\",\n  \"script\",\n  \"select\",\n  \"slot\",\n  \"small\",\n  \"span\",\n  \"strong\",\n  \"sub\",\n  \"sup\",\n  \"svg\",\n  \"template\",\n  \"textarea\",\n  \"time\",\n  \"u\",\n  \"tt\",\n  \"var\",\n  \"video\",\n  \"wbr\"\n];\nconst TAGS_VUE_RESERVED = [\n  \"template\",\n  \"component\",\n  \"transition\",\n  \"transition-group\",\n  \"keep-alive\",\n  \"slot\",\n  \"teleport\"\n];\n\nconst createHtmlSequences = ({\n  blockTags,\n  inlineTags\n}) => {\n  const forceBlockTags = [...blockTags, ...TAGS_BLOCK];\n  const forceInlineTags = [\n    ...inlineTags,\n    ...TAGS_INLINE.filter((item) => !TAGS_VUE_RESERVED.includes(item))\n  ];\n  const HTML_SEQUENCES = [\n    [/^<(script|pre|style)(?=(\\s|>|$))/i, /<\\/(script|pre|style)>/i, true],\n    [/^<!--/, /-->/, true],\n    [/^<\\?/, /\\?>/, true],\n    [/^<![A-Z]/, />/, true],\n    [/^<!\\[CDATA\\[/, /\\]\\]>/, true],\n    [\n      new RegExp(\"^</?(\" + forceBlockTags.join(\"|\") + \")(?=(\\\\s|/?>|$))\", \"i\"),\n      /^$/,\n      true\n    ],\n    [\n      new RegExp(\n        \"^</?(?!(\" + forceInlineTags.join(\"|\") + \")(?![\\\\w-]))[A-Za-z][A-Za-z0-9\\\\-]*(?=(\\\\s|/?>|$))\"\n      ),\n      /^$/,\n      true\n    ],\n    [new RegExp(HTML_OPEN_CLOSE_TAG_RE.source + \"\\\\s*$\"), /^$/, false]\n  ];\n  return HTML_SEQUENCES;\n};\nconst createHtmlBlockRule = (options) => {\n  const HTML_SEQUENCES = createHtmlSequences(options);\n  return (state, startLine, endLine, silent) => {\n    let i;\n    let nextLine;\n    let lineText;\n    let pos = state.bMarks[startLine] + state.tShift[startLine];\n    let max = state.eMarks[startLine];\n    if (state.sCount[startLine] - state.blkIndent >= 4) {\n      return false;\n    }\n    if (!state.md.options.html) {\n      return false;\n    }\n    if (state.src.charCodeAt(pos) !== 60) {\n      return false;\n    }\n    lineText = state.src.slice(pos, max);\n    for (i = 0; i < HTML_SEQUENCES.length; i++) {\n      if (HTML_SEQUENCES[i][0].test(lineText)) {\n        break;\n      }\n    }\n    if (i === HTML_SEQUENCES.length) {\n      return false;\n    }\n    if (silent) {\n      return HTML_SEQUENCES[i][2];\n    }\n    if (i === 6) {\n      const match = lineText.match(HTML_SELF_CLOSING_TAG_RE) ?? lineText.match(HTML_OPEN_AND_CLOSE_TAG_IN_THE_SAME_LINE_RE);\n      if (match) {\n        state.line = startLine + 1;\n        let token2 = state.push(\"html_inline\", \"\", 0);\n        token2.content = match[0];\n        token2.map = [startLine, state.line];\n        token2 = state.push(\"inline\", \"\", 0);\n        token2.content = lineText.slice(match[0].length);\n        token2.map = [startLine, state.line];\n        token2.children = [];\n        return true;\n      }\n    }\n    nextLine = startLine + 1;\n    if (!HTML_SEQUENCES[i][1].test(lineText)) {\n      for (; nextLine < endLine; nextLine++) {\n        if (state.sCount[nextLine] < state.blkIndent) {\n          break;\n        }\n        pos = state.bMarks[nextLine] + state.tShift[nextLine];\n        max = state.eMarks[nextLine];\n        lineText = state.src.slice(pos, max);\n        if (HTML_SEQUENCES[i][1].test(lineText)) {\n          if (lineText.length !== 0) {\n            nextLine++;\n          }\n          break;\n        }\n      }\n    }\n    state.line = nextLine;\n    const token = state.push(\"html_block\", \"\", 0);\n    token.map = [startLine, nextLine];\n    token.content = state.getLines(startLine, nextLine, state.blkIndent, true);\n    return true;\n  };\n};\n\nconst isLetter = (ch) => {\n  const lc = ch | 32;\n  return lc >= 97 && lc <= 122;\n};\nconst htmlInlineRule = (state, silent) => {\n  const { pos } = state;\n  if (!state.md.options.html) {\n    return false;\n  }\n  const max = state.posMax;\n  if (state.src.charCodeAt(pos) !== 60 || pos + 2 >= max) {\n    return false;\n  }\n  const ch = state.src.charCodeAt(pos + 1);\n  if (ch !== 33 && ch !== 63 && ch !== 47 && !isLetter(ch)) {\n    return false;\n  }\n  const match = state.src.slice(pos).match(HTML_TAG_RE);\n  if (!match) {\n    return false;\n  }\n  if (!silent) {\n    const token = state.push(\"html_inline\", \"\", 0);\n    token.content = state.src.slice(pos, pos + match[0].length);\n  }\n  state.pos += match[0].length;\n  return true;\n};\n\nconst componentPlugin = (md, { blockTags = [], inlineTags = [] } = {}) => {\n  const htmlBlockRule = createHtmlBlockRule({\n    blockTags,\n    inlineTags\n  });\n  md.block.ruler.at(\"html_block\", htmlBlockRule, {\n    alt: [\"paragraph\", \"reference\", \"blockquote\"]\n  });\n  md.inline.ruler.at(\"html_inline\", htmlInlineRule);\n};\n\nexport { HTML_OPEN_AND_CLOSE_TAG_IN_THE_SAME_LINE_RE, HTML_OPEN_CLOSE_TAG_RE, HTML_SELF_CLOSING_TAG_RE, HTML_TAG_RE, TAGS_BLOCK, TAGS_INLINE, TAGS_VUE_RESERVED, componentPlugin, createHtmlBlockRule, htmlInlineRule };\n/LICENSE\u0004IThe MIT License (MIT)\n\nCopyright (c) 2022-present, mdit-vue Contributors\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n/dist/index.cjs\u0019@'use strict';\n\nconst blockNames = require('markdown-it/lib/common/html_blocks.js');\n\nconst attr_name = \"[a-zA-Z_:@][a-zA-Z0-9:._-]*\";\nconst unquoted = \"[^\\\"'=<>`\\\\x00-\\\\x20]+\";\nconst single_quoted = \"'[^']*'\";\nconst double_quoted = '\"[^\"]*\"';\nconst attr_value = \"(?:\" + unquoted + \"|\" + single_quoted + \"|\" + double_quoted + \")\";\nconst attribute = \"(?:\\\\s+\" + attr_name + \"(?:\\\\s*=\\\\s*\" + attr_value + \")?)\";\nconst open_tag = \"<[A-Za-z][A-Za-z0-9\\\\-]*\" + attribute + \"*\\\\s*\\\\/?>\";\nconst close_tag = \"<\\\\/[A-Za-z][A-Za-z0-9\\\\-]*\\\\s*>\";\nconst comment = \"<!---->|<!--(?:-?[^>-])(?:-?[^-])*-->\";\nconst processing = \"<[?][\\\\s\\\\S]*?[?]>\";\nconst declaration = \"<![A-Z]+\\\\s+[^>]*>\";\nconst cdata = \"<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>\";\nconst HTML_TAG_RE = new RegExp(\n  \"^(?:\" + open_tag + \"|\" + close_tag + \"|\" + comment + \"|\" + processing + \"|\" + declaration + \"|\" + cdata + \")\"\n);\nconst HTML_OPEN_CLOSE_TAG_RE = new RegExp(\n  \"^(?:\" + open_tag + \"|\" + close_tag + \")\"\n);\nconst HTML_SELF_CLOSING_TAG_RE = new RegExp(\n  \"^<[A-Za-z][A-Za-z0-9\\\\-]*\" + attribute + \"*\\\\s*\\\\/>\"\n);\nconst HTML_OPEN_AND_CLOSE_TAG_IN_THE_SAME_LINE_RE = new RegExp(\n  \"^<([A-Za-z][A-Za-z0-9\\\\-]*)\" + attribute + \"*\\\\s*>.*<\\\\/\\\\1\\\\s*>\"\n);\n\nconst TAGS_BLOCK = blockNames;\nconst TAGS_INLINE = [\n  \"a\",\n  \"abbr\",\n  \"acronym\",\n  \"audio\",\n  \"b\",\n  \"bdi\",\n  \"bdo\",\n  \"big\",\n  \"br\",\n  \"button\",\n  \"canvas\",\n  \"cite\",\n  \"code\",\n  \"data\",\n  \"datalist\",\n  \"del\",\n  \"dfn\",\n  \"em\",\n  \"embed\",\n  \"i\",\n  \"iframe\",\n  \"img\",\n  \"input\",\n  \"ins\",\n  \"kbd\",\n  \"label\",\n  \"map\",\n  \"mark\",\n  \"meter\",\n  \"noscript\",\n  \"object\",\n  \"output\",\n  \"picture\",\n  \"progress\",\n  \"q\",\n  \"ruby\",\n  \"s\",\n  \"samp\",\n  \"script\",\n  \"select\",\n  \"slot\",\n  \"small\",\n  \"span\",\n  \"strong\",\n  \"sub\",\n  \"sup\",\n  \"svg\",\n  \"template\",\n  \"textarea\",\n  \"time\",\n  \"u\",\n  \"tt\",\n  \"var\",\n  \"video\",\n  \"wbr\"\n];\nconst TAGS_VUE_RESERVED = [\n  \"template\",\n  \"component\",\n  \"transition\",\n  \"transition-group\",\n  \"keep-alive\",\n  \"slot\",\n  \"teleport\"\n];\n\nconst createHtmlSequences = ({\n  blockTags,\n  inlineTags\n}) => {\n  const forceBlockTags = [...blockTags, ...TAGS_BLOCK];\n  const forceInlineTags = [\n    ...inlineTags,\n    ...TAGS_INLINE.filter((item) => !TAGS_VUE_RESERVED.includes(item))\n  ];\n  const HTML_SEQUENCES = [\n    [/^<(script|pre|style)(?=(\\s|>|$))/i, /<\\/(script|pre|style)>/i, true],\n    [/^<!--/, /-->/, true],\n    [/^<\\?/, /\\?>/, true],\n    [/^<![A-Z]/, />/, true],\n    [/^<!\\[CDATA\\[/, /\\]\\]>/, true],\n    [\n      new RegExp(\"^</?(\" + forceBlockTags.join(\"|\") + \")(?=(\\\\s|/?>|$))\", \"i\"),\n      /^$/,\n      true\n    ],\n    [\n      new RegExp(\n        \"^</?(?!(\" + forceInlineTags.join(\"|\") + \")(?![\\\\w-]))[A-Za-z][A-Za-z0-9\\\\-]*(?=(\\\\s|/?>|$))\"\n      ),\n      /^$/,\n      true\n    ],\n    [new RegExp(HTML_OPEN_CLOSE_TAG_RE.source + \"\\\\s*$\"), /^$/, false]\n  ];\n  return HTML_SEQUENCES;\n};\nconst createHtmlBlockRule = (options) => {\n  const HTML_SEQUENCES = createHtmlSequences(options);\n  return (state, startLine, endLine, silent) => {\n    let i;\n    let nextLine;\n    let lineText;\n    let pos = state.bMarks[startLine] + state.tShift[startLine];\n    let max = state.eMarks[startLine];\n    if (state.sCount[startLine] - state.blkIndent >= 4) {\n      return false;\n    }\n    if (!state.md.options.html) {\n      return false;\n    }\n    if (state.src.charCodeAt(pos) !== 60) {\n      return false;\n    }\n    lineText = state.src.slice(pos, max);\n    for (i = 0; i < HTML_SEQUENCES.length; i++) {\n      if (HTML_SEQUENCES[i][0].test(lineText)) {\n        break;\n      }\n    }\n    if (i === HTML_SEQUENCES.length) {\n      return false;\n    }\n    if (silent) {\n      return HTML_SEQUENCES[i][2];\n    }\n    if (i === 6) {\n      const match = lineText.match(HTML_SELF_CLOSING_TAG_RE) ?? lineText.match(HTML_OPEN_AND_CLOSE_TAG_IN_THE_SAME_LINE_RE);\n      if (match) {\n        state.line = startLine + 1;\n        let token2 = state.push(\"html_inline\", \"\", 0);\n        token2.content = match[0];\n        token2.map = [startLine, state.line];\n        token2 = state.push(\"inline\", \"\", 0);\n        token2.content = lineText.slice(match[0].length);\n        token2.map = [startLine, state.line];\n        token2.children = [];\n        return true;\n      }\n    }\n    nextLine = startLine + 1;\n    if (!HTML_SEQUENCES[i][1].test(lineText)) {\n      for (; nextLine < endLine; nextLine++) {\n        if (state.sCount[nextLine] < state.blkIndent) {\n          break;\n        }\n        pos = state.bMarks[nextLine] + state.tShift[nextLine];\n        max = state.eMarks[nextLine];\n        lineText = state.src.slice(pos, max);\n        if (HTML_SEQUENCES[i][1].test(lineText)) {\n          if (lineText.length !== 0) {\n            nextLine++;\n          }\n          break;\n        }\n      }\n    }\n    state.line = nextLine;\n    const token = state.push(\"html_block\", \"\", 0);\n    token.map = [startLine, nextLine];\n    token.content = state.getLines(startLine, nextLine, state.blkIndent, true);\n    return true;\n  };\n};\n\nconst isLetter = (ch) => {\n  const lc = ch | 32;\n  return lc >= 97 && lc <= 122;\n};\nconst htmlInlineRule = (state, silent) => {\n  const { pos } = state;\n  if (!state.md.options.html) {\n    return false;\n  }\n  const max = state.posMax;\n  if (state.src.charCodeAt(pos) !== 60 || pos + 2 >= max) {\n    return false;\n  }\n  const ch = state.src.charCodeAt(pos + 1);\n  if (ch !== 33 && ch !== 63 && ch !== 47 && !isLetter(ch)) {\n    return false;\n  }\n  const match = state.src.slice(pos).match(HTML_TAG_RE);\n  if (!match) {\n    return false;\n  }\n  if (!silent) {\n    const token = state.push(\"html_inline\", \"\", 0);\n    token.content = state.src.slice(pos, pos + match[0].length);\n  }\n  state.pos += match[0].length;\n  return true;\n};\n\nconst componentPlugin = (md, { blockTags = [], inlineTags = [] } = {}) => {\n  const htmlBlockRule = createHtmlBlockRule({\n    blockTags,\n    inlineTags\n  });\n  md.block.ruler.at(\"html_block\", htmlBlockRule, {\n    alt: [\"paragraph\", \"reference\", \"blockquote\"]\n  });\n  md.inline.ruler.at(\"html_inline\", htmlInlineRule);\n};\n\nexports.HTML_OPEN_AND_CLOSE_TAG_IN_THE_SAME_LINE_RE = HTML_OPEN_AND_CLOSE_TAG_IN_THE_SAME_LINE_RE;\nexports.HTML_OPEN_CLOSE_TAG_RE = HTML_OPEN_CLOSE_TAG_RE;\nexports.HTML_SELF_CLOSING_TAG_RE = HTML_SELF_CLOSING_TAG_RE;\nexports.HTML_TAG_RE = HTML_TAG_RE;\nexports.TAGS_BLOCK = TAGS_BLOCK;\nexports.TAGS_INLINE = TAGS_INLINE;\nexports.TAGS_VUE_RESERVED = TAGS_VUE_RESERVED;\nexports.componentPlugin = componentPlugin;\nexports.createHtmlBlockRule = createHtmlBlockRule;\nexports.htmlInlineRule = htmlInlineRule;\n/README.md\n# @mdit-vue/plugin-component\n\n[![npm](https://badgen.net/npm/v/@mdit-vue/plugin-component)](https://www.npmjs.com/package/@mdit-vue/plugin-component)\n[![license](https://badgen.net/github/license/mdit-vue/mdit-vue)](https://github.com/mdit-vue/mdit-vue/blob/main/LICENSE)\n\nA [markdown-it](https://github.com/markdown-it/markdown-it) plugin to allow Vue components in markdown.\n\n- Treats [vue built-in components](https://vuejs.org/api/built-in-components.html) and unknown HTML tags as vue components (markdown-it would treat them as inline tags by default).\n- Allows vue [`@` directive](https://vuejs.org/api/built-in-directives.html#v-on) on native HTML tags.\n\n## Install\n\n```sh\nnpm i @mdit-vue/plugin-component\n```\n\n## Usage\n\nThis plugin will only take effects when the `html` option of markdown-it is enabled:\n\n```ts\nimport MarkdownIt from 'markdown-it';\nimport { componentPlugin } from '@mdit-vue/plugin-component';\n\nconst md = MarkdownIt({ html: true }).use(componentPlugin, {\n  // options\n});\n\nconst rendered = md.render(\n  `\\\n<!-- @ shorthand is supported -->\n<Foo @click=\"onClick\" />\n\n<!-- multi-line syntax won't be wrapped with <p> -->\n<Foo\n  class=\"foo\"\n  :bar=\"bar\"\n/>\n`,\n);\n```\n\n## Options\n\n### blockTags\n\n- Type: `string[]`\n\n- Default: `[]`\n\n- Details:\n\n  Extra tags to be treated as block tags.\n\n  By default, all standard [HTML inline elements](https://developer.mozilla.org/en-US/docs/Web/HTML/Inline_elements) will be treated as inline tags (excluding [Vue built-in special elements](https://vuejs.org/api/built-in-special-elements.html)). All unknown elements will be assumed as Vue components, and will be treated as block tags (with slight differences).\n\n  In some cases (should be rare though) you might want to force some tags to behave like block tags, then you can use this option to specify the tag names.\n\n  Notice that this option is case-sensitive, and has higher priority than the [inlineTags](#inlinetags) option.\n\n### inlineTags\n\n- Type: `string[]`\n\n- Default: `[]`\n\n- Details:\n\n  Extra tags to be treated as inline tags.\n\n  By default, only standard [HTML inline elements](https://developer.mozilla.org/en-US/docs/Web/HTML/Inline_elements) will be treated as inline tags (excluding [Vue built-in special elements](https://vuejs.org/api/built-in-special-elements.html)). All unknown elements will be assumed as Vue components, and will be treated as block tags (with slight differences).\n\n  Treating Vue components like block tags would work as expected in most cases. However, in some cases you might want to force some tags to behave like inline tags, then you can use this option to specify the tag names.\n\n  Notice that this option is case-sensitive, and has lower priority than the [blockTags](#blocktags) option.\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QG1kaXQtdnVlL3BsdWdpbi1mcm9udG1hdHRlckAwLjExLjE=",
    "content": "/LICENSE\u0004IThe MIT License (MIT)\n\nCopyright (c) 2022-present, mdit-vue Contributors\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n/dist/index.d.ts\u0005=import MarkdownIt from 'markdown-it';\nimport matter from 'gray-matter';\n\ndeclare type GrayMatterOptions = matter.GrayMatterOption<string, GrayMatterOptions>;\n/**\n * Options of @mdit-vue/plugin-frontmatter\n */\ninterface FrontmatterPluginOptions {\n    /**\n     * Options of gray-matter\n     *\n     * @see https://github.com/jonschlinkert/gray-matter#options\n     */\n    grayMatterOptions?: GrayMatterOptions;\n    /**\n     * Render the excerpt or not\n     *\n     * @default true\n     */\n    renderExcerpt?: boolean;\n}\ndeclare module '@mdit-vue/types' {\n    interface MarkdownItEnv {\n        /**\n         * The raw Markdown content without frontmatter\n         */\n        content?: string;\n        /**\n         * The excerpt that extracted by `@mdit-vue/plugin-frontmatter`\n         *\n         * - Would be the rendered HTML when `renderExcerpt` is enabled\n         * - Would be the raw Markdown when `renderExcerpt` is disabled\n         */\n        excerpt?: string;\n        /**\n         * The frontmatter that extracted by `@mdit-vue/plugin-frontmatter`\n         */\n        frontmatter?: Record<string, unknown>;\n    }\n}\n\n/**\n * Get markdown frontmatter and excerpt\n *\n * Extract them into env\n */\ndeclare const frontmatterPlugin: MarkdownIt.PluginWithOptions<FrontmatterPluginOptions>;\n\nexport { FrontmatterPluginOptions, frontmatterPlugin };\n/README.md\u0007# @mdit-vue/plugin-frontmatter\n\n[![npm](https://badgen.net/npm/v/@mdit-vue/plugin-frontmatter)](https://www.npmjs.com/package/@mdit-vue/plugin-frontmatter)\n[![license](https://badgen.net/github/license/mdit-vue/mdit-vue)](https://github.com/mdit-vue/mdit-vue/blob/main/LICENSE)\n\nA [markdown-it](https://github.com/markdown-it/markdown-it) plugin to get markdown frontmatter with [gray-matter](https://github.com/jonschlinkert/gray-matter).\n\n- Extracts frontmatter into markdown-it `env.frontmatter`.\n- Allows providing default frontmatter via markdown-it `env.frontmatter`.\n- Extracts markdown content without frontmatter into markdown-it `env.content`.\n- Supports extracting rendered excerpt into markdown-it `env.excerpt`.\n\n## Install\n\n```sh\nnpm i @mdit-vue/plugin-frontmatter\n```\n\n## Usage\n\n```ts\nimport MarkdownIt from 'markdown-it';\nimport { frontmatterPlugin } from '@mdit-vue/plugin-frontmatter';\nimport type { MarkdownItEnv } from '@mdit-vue/types';\n\nconst md = MarkdownIt({ html: true }).use(frontmatterPlugin, {\n  // options\n  grayMatterOptions: {\n    excerpt: true,\n    excerpt_separator: '<!-- more -->',\n  },\n});\nconst env: MarkdownItEnv = {};\n\nconst rendered = md.render(\n  `\\\n---\ntitle: foobar\n---\n\nEverything above **more** comment will be extracted as excerpt.\n\n<!-- more -->\n\nThings below **more** comment will not be included in the excerpt.\n`,\n  env,\n);\n\nconsole.log(env.frontmatter);\nconsole.log(env.content);\nconsole.log(env.excerpt);\n```\n\n## Options\n\n### grayMatterOptions\n\n- Type: `GrayMatterOptions`\n\n- Details:\n\n  Options of [gray-matter](https://github.com/jonschlinkert/gray-matter).\n\n### renderExcerpt\n\n- Type: `boolean`\n\n- Default: `true`\n\n  Render the [excerpt](https://github.com/jonschlinkert/gray-matter#optionsexcerpt) with markdown-it or not.\n\n  This option will only take effects when `grayMatterOptions.excerpt` is enabled (disabled by default) or `grayMatterOptions.excerpt_separator` is set (undefined by default).\n/dist/index.mjs\u0002\u0013import grayMatter from 'gray-matter';\n\nconst frontmatterPlugin = (md, { grayMatterOptions, renderExcerpt = true } = {}) => {\n  const render = md.render.bind(md);\n  md.render = (src, env = {}) => {\n    const { data, content, excerpt = \"\" } = grayMatter(src, grayMatterOptions);\n    env.content = content;\n    env.frontmatter = {\n      ...env.frontmatter,\n      ...data\n    };\n    env.excerpt = renderExcerpt && excerpt ? render(excerpt, { ...env }) : excerpt;\n    return render(content, env);\n  };\n};\n\nexport { frontmatterPlugin };\n/dist/index.cjs\u0003>'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nconst grayMatter = require('gray-matter');\n\nfunction _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e[\"default\"] : e; }\n\nconst grayMatter__default = /*#__PURE__*/_interopDefaultLegacy(grayMatter);\n\nconst frontmatterPlugin = (md, { grayMatterOptions, renderExcerpt = true } = {}) => {\n  const render = md.render.bind(md);\n  md.render = (src, env = {}) => {\n    const { data, content, excerpt = \"\" } = grayMatter__default(src, grayMatterOptions);\n    env.content = content;\n    env.frontmatter = {\n      ...env.frontmatter,\n      ...data\n    };\n    env.excerpt = renderExcerpt && excerpt ? render(excerpt, { ...env }) : excerpt;\n    return render(content, env);\n  };\n};\n\nexports.frontmatterPlugin = frontmatterPlugin;\n/package.json\u0004~{\n  \"name\": \"@mdit-vue/plugin-frontmatter\",\n  \"version\": \"0.11.1\",\n  \"description\": \"A markdown-it plugin to get markdown frontmatter\",\n  \"keywords\": [\n    \"markdown-it\",\n    \"markdown-it-plugin\",\n    \"vue\",\n    \"frontmatter\",\n    \"excerpt\"\n  ],\n  \"homepage\": \"https://github.com/mdit-vue\",\n  \"bugs\": {\n    \"url\": \"https://github.com/mdit-vue/mdit-vue/issues\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/mdit-vue/mdit-vue.git\"\n  },\n  \"license\": \"MIT\",\n  \"author\": \"meteorlxy <meteor.lxy@foxmail.com>\",\n  \"type\": \"module\",\n  \"exports\": {\n    \".\": {\n      \"types\": \"./dist/index.d.ts\",\n      \"import\": \"./dist/index.mjs\",\n      \"require\": \"./dist/index.cjs\"\n    }\n  },\n  \"main\": \"./dist/index.cjs\",\n  \"module\": \"./dist/index.mjs\",\n  \"types\": \"./dist/index.d.ts\",\n  \"files\": [\n    \"./dist\"\n  ],\n  \"scripts\": {\n    \"build\": \"unbuild\",\n    \"test\": \"vitest\"\n  },\n  \"dependencies\": {\n    \"@mdit-vue/types\": \"0.11.0\",\n    \"@types/markdown-it\": \"^12.2.3\",\n    \"gray-matter\": \"^4.0.3\",\n    \"markdown-it\": \"^13.0.1\"\n  },\n  \"publishConfig\": {\n    \"access\": \"public\"\n  },\n  \"gitHead\": \"98828479d07c7bc52d178a00cdb92c166eff09ee\"\n}\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QG1kaXQtdnVlL3BsdWdpbi1oZWFkZXJzQDAuMTEuMg==",
    "content": "/dist/index.mjs\u0002\nimport { resolveHeadersFromTokens, slugify } from '@mdit-vue/shared';\n\nconst headersPlugin = (md, { level = [2, 3], slugify: slugify$1 = slugify, format } = {}) => {\n  const render = md.renderer.render.bind(md.renderer);\n  md.renderer.render = (tokens, options, env) => {\n    env.headers = resolveHeadersFromTokens(tokens, {\n      level,\n      shouldAllowHtml: false,\n      shouldEscapeText: false,\n      slugify: slugify$1,\n      format\n    });\n    return render(tokens, options, env);\n  };\n};\n\nexport { headersPlugin };\n/package.json\u0004{\n  \"name\": \"@mdit-vue/plugin-headers\",\n  \"version\": \"0.11.2\",\n  \"description\": \"A markdown-it plugin to get markdown headers\",\n  \"keywords\": [\n    \"markdown-it\",\n    \"markdown-it-plugin\",\n    \"vue\",\n    \"header\",\n    \"heading\"\n  ],\n  \"homepage\": \"https://github.com/mdit-vue\",\n  \"bugs\": {\n    \"url\": \"https://github.com/mdit-vue/mdit-vue/issues\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/mdit-vue/mdit-vue.git\"\n  },\n  \"license\": \"MIT\",\n  \"author\": \"meteorlxy <meteor.lxy@foxmail.com>\",\n  \"type\": \"module\",\n  \"exports\": {\n    \".\": {\n      \"types\": \"./dist/index.d.ts\",\n      \"import\": \"./dist/index.mjs\",\n      \"require\": \"./dist/index.cjs\"\n    }\n  },\n  \"main\": \"./dist/index.cjs\",\n  \"module\": \"./dist/index.mjs\",\n  \"types\": \"./dist/index.d.ts\",\n  \"files\": [\n    \"./dist\"\n  ],\n  \"scripts\": {\n    \"build\": \"unbuild\",\n    \"test\": \"vitest\"\n  },\n  \"dependencies\": {\n    \"@mdit-vue/shared\": \"0.11.2\",\n    \"@mdit-vue/types\": \"0.11.0\",\n    \"@types/markdown-it\": \"^12.2.3\",\n    \"markdown-it\": \"^13.0.1\"\n  },\n  \"devDependencies\": {\n    \"markdown-it-anchor\": \"^8.6.6\"\n  },\n  \"publishConfig\": {\n    \"access\": \"public\"\n  },\n  \"gitHead\": \"676ec4ca8704d709e7a47f7f6d41ff3f70dc2356\"\n}\n/dist/index.cjs\u0002\u0004'use strict';\n\nconst shared = require('@mdit-vue/shared');\n\nconst headersPlugin = (md, { level = [2, 3], slugify = shared.slugify, format } = {}) => {\n  const render = md.renderer.render.bind(md.renderer);\n  md.renderer.render = (tokens, options, env) => {\n    env.headers = shared.resolveHeadersFromTokens(tokens, {\n      level,\n      shouldAllowHtml: false,\n      shouldEscapeText: false,\n      slugify,\n      format\n    });\n    return render(tokens, options, env);\n  };\n};\n\nexports.headersPlugin = headersPlugin;\n/LICENSE\u0004IThe MIT License (MIT)\n\nCopyright (c) 2022-present, mdit-vue Contributors\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n/README.md\u0007'# @mdit-vue/plugin-headers\n\n[![npm](https://badgen.net/npm/v/@mdit-vue/plugin-headers)](https://www.npmjs.com/package/@mdit-vue/plugin-headers)\n[![license](https://badgen.net/github/license/mdit-vue/mdit-vue)](https://github.com/mdit-vue/mdit-vue/blob/main/LICENSE)\n\nA [markdown-it](https://github.com/markdown-it/markdown-it) plugin to get markdown headers.\n\n- Extracts all headers info into markdown-it `env.headers`.\n\n## Install\n\n```sh\nnpm i @mdit-vue/plugin-headers\n```\n\n## Usage\n\n```ts\nimport MarkdownIt from 'markdown-it';\nimport { headersPlugin } from '@mdit-vue/plugin-headers';\nimport type { MarkdownItEnv } from '@mdit-vue/types';\n\nconst md = MarkdownIt({ html: true }).use(headersPlugin, {\n  // options\n});\nconst env: MarkdownItEnv = {};\n\nconst rendered = md.render(\n  `\\\n# h1\n## h2\n### h3\n`,\n  env,\n);\n\nconsole.log(env.headers);\n```\n\n## Options\n\n### format\n\n- Type: `(str: string) => string`\n\n- Details:\n\n  A function for formatting header title.\n\n### level\n\n- Type: `number[]`\n\n- Default: `[2, 3]`\n\n- Details:\n\n  Heading level that going to be extracted.\n\n  When using this plugin with [markdown-it-anchor](https://github.com/valeriangalliat/markdown-it-anchor) (recommended), this option should be a subset of markdown-it-anchor's `level` option to ensure the header slugs are existed.\n\n### slugify\n\n- Type: `(str: string) => string`\n\n- Default: `slugify` from `@mdit-vue/shared`\n\n- Details:\n\n  A custom slugification function.\n\n  The default slugify function comes from [@mdit-vue/shared](https://github.com/mdit-vue/mdit-vue/tree/main/packages/shared) package.\n\n  When using this plugin with [markdown-it-anchor](https://github.com/valeriangalliat/markdown-it-anchor) (recommended), this option will be ignored because the `id` of the headings have already been determined by markdown-it-anchor's `slugify` option.\n/dist/index.d.ts\u0004import MarkdownIt from 'markdown-it';\nimport { MarkdownItHeader } from '@mdit-vue/types';\nexport { MarkdownItHeader } from '@mdit-vue/types';\n\n/**\n * Options of @mdit-vue/plugin-headers\n */\ninterface HeadersPluginOptions {\n    /**\n     * A custom slugification function\n     *\n     * Should use the same slugify function with markdown-it-anchor\n     * to ensure the link is matched\n     */\n    slugify?: (str: string) => string;\n    /**\n     * A function for formatting header title\n     */\n    format?: (str: string) => string;\n    /**\n     * Heading level that going to be extracted\n     *\n     * Should be a subset of markdown-it-anchor's `level` option\n     * to ensure the slug is existed\n     *\n     * @default [2,3]\n     */\n    level?: number[];\n}\ndeclare module '@mdit-vue/types' {\n    interface MarkdownItEnv {\n        /**\n         * The headers that extracted by `@mdit-vue/plugin-headers`\n         */\n        headers?: MarkdownItHeader[];\n    }\n}\n\n/**\n * Get markdown headers info\n *\n * Extract them into env\n */\ndeclare const headersPlugin: MarkdownIt.PluginWithOptions<HeadersPluginOptions>;\n\nexport { HeadersPluginOptions, headersPlugin };\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QG1kaXQtdnVlL3BsdWdpbi1zZmNAMC4xMS4x",
    "content": "/package.json\u0004O{\n  \"name\": \"@mdit-vue/plugin-sfc\",\n  \"version\": \"0.11.1\",\n  \"description\": \"A markdown-it plugin to help transforming markdown tu vue sfc\",\n  \"keywords\": [\n    \"markdown-it\",\n    \"markdown-it-plugin\",\n    \"vue\",\n    \"sfc\"\n  ],\n  \"homepage\": \"https://github.com/mdit-vue\",\n  \"bugs\": {\n    \"url\": \"https://github.com/mdit-vue/mdit-vue/issues\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/mdit-vue/mdit-vue.git\"\n  },\n  \"license\": \"MIT\",\n  \"author\": \"meteorlxy <meteor.lxy@foxmail.com>\",\n  \"type\": \"module\",\n  \"exports\": {\n    \".\": {\n      \"types\": \"./dist/index.d.ts\",\n      \"import\": \"./dist/index.mjs\",\n      \"require\": \"./dist/index.cjs\"\n    }\n  },\n  \"main\": \"./dist/index.cjs\",\n  \"module\": \"./dist/index.mjs\",\n  \"types\": \"./dist/index.d.ts\",\n  \"files\": [\n    \"./dist\"\n  ],\n  \"scripts\": {\n    \"build\": \"unbuild\",\n    \"test\": \"vitest\"\n  },\n  \"dependencies\": {\n    \"@mdit-vue/types\": \"0.11.0\",\n    \"@types/markdown-it\": \"^12.2.3\",\n    \"markdown-it\": \"^13.0.1\"\n  },\n  \"publishConfig\": {\n    \"access\": \"public\"\n  },\n  \"gitHead\": \"98828479d07c7bc52d178a00cdb92c166eff09ee\"\n}\n/dist/index.d.ts\t\u0017import MarkdownIt from 'markdown-it';\n\ndeclare const TAG_NAME_SCRIPT = \"script\";\ndeclare const TAG_NAME_STYLE = \"style\";\ndeclare const TAG_NAME_TEMPLATE = \"template\";\n\n/**\n * Options of @mdit-vue/plugin-sfc\n */\ninterface SfcPluginOptions {\n    /**\n     * Custom blocks to be extracted\n     *\n     * @default []\n     */\n    customBlocks?: string[];\n}\n/**\n * SFC block that extracted from markdown\n */\ninterface SfcBlock {\n    /**\n     * The type of the block\n     */\n    type: string;\n    /**\n     * The content, including open-tag and close-tag\n     */\n    content: string;\n    /**\n     * The content that stripped open-tag and close-tag off\n     */\n    contentStripped: string;\n    /**\n     * The open-tag\n     */\n    tagOpen: string;\n    /**\n     * The close-tag\n     */\n    tagClose: string;\n}\ninterface MarkdownSfcBlocks {\n    /**\n     * The `<template>` block\n     */\n    template: SfcBlock | null;\n    /**\n     * The common `<script>` block\n     */\n    script: SfcBlock | null;\n    /**\n     * The `<script setup>` block\n     */\n    scriptSetup: SfcBlock | null;\n    /**\n     * All `<script>` blocks.\n     *\n     * By default, SFC only allows one `<script>` block and one `<script setup>` block.\n     * However, some tools may support different types of `<script>`s, so we keep all of them here.\n     */\n    scripts: SfcBlock[];\n    /**\n     * All `<style>` blocks.\n     */\n    styles: SfcBlock[];\n    /**\n     * All custom blocks.\n     */\n    customBlocks: SfcBlock[];\n}\ndeclare module '@mdit-vue/types' {\n    interface MarkdownItEnv {\n        /**\n         * SFC blocks that extracted by `@mdit-vue/plugin-sfc`\n         */\n        sfcBlocks?: MarkdownSfcBlocks;\n    }\n}\n\n/**\n * Get Vue SFC blocks\n *\n * Extract them into env and avoid rendering them\n */\ndeclare const sfcPlugin: MarkdownIt.PluginWithOptions<SfcPluginOptions>;\n\ndeclare const SCRIPT_SETUP_TAG_OPEN_REGEXP: RegExp;\ninterface SfcRegExpMatchArray extends Omit<RegExpMatchArray, 'groups'> {\n    groups: SfcBlock;\n}\n/**\n * Generate RegExp for sfc blocks\n */\ndeclare const createSfcRegexp: ({ customBlocks, }: Required<Pick<SfcPluginOptions, 'customBlocks'>>) => RegExp;\n\nexport { MarkdownSfcBlocks, SCRIPT_SETUP_TAG_OPEN_REGEXP, SfcBlock, SfcPluginOptions, SfcRegExpMatchArray, TAG_NAME_SCRIPT, TAG_NAME_STYLE, TAG_NAME_TEMPLATE, createSfcRegexp, sfcPlugin };\n/dist/index.mjs\bconst TAG_NAME_SCRIPT = \"script\";\nconst TAG_NAME_STYLE = \"style\";\nconst TAG_NAME_TEMPLATE = \"template\";\n\nconst SCRIPT_SETUP_TAG_OPEN_REGEXP = /^<script\\s+.*?\\bsetup\\b.*?>$/is;\nconst createSfcRegexp = ({\n  customBlocks\n}) => {\n  const sfcTags = Array.from(\n    /* @__PURE__ */ new Set([TAG_NAME_SCRIPT, TAG_NAME_STYLE, ...customBlocks])\n  ).join(\"|\");\n  return new RegExp(\n    `^\\\\s*(?<content>(?<tagOpen><(?<type>${sfcTags})\\\\s?.*?>)(?<contentStripped>.*)(?<tagClose><\\\\/\\\\k<type>\\\\s*>))\\\\s*$`,\n    \"is\"\n  );\n};\n\nconst sfcPlugin = (md, { customBlocks = [] } = {}) => {\n  const sfcRegexp = createSfcRegexp({ customBlocks });\n  const render = md.render.bind(md);\n  md.render = (src, env = {}) => {\n    env.sfcBlocks = {\n      template: null,\n      script: null,\n      scriptSetup: null,\n      scripts: [],\n      styles: [],\n      customBlocks: []\n    };\n    const rendered = render(src, env);\n    env.sfcBlocks.template = {\n      type: TAG_NAME_TEMPLATE,\n      content: `<${TAG_NAME_TEMPLATE}>${rendered}</${TAG_NAME_TEMPLATE}>`,\n      contentStripped: rendered,\n      tagOpen: `<${TAG_NAME_TEMPLATE}>`,\n      tagClose: `</${TAG_NAME_TEMPLATE}>`\n    };\n    return rendered;\n  };\n  const htmlBlockRule = md.renderer.rules.html_block;\n  md.renderer.rules.html_block = (tokens, idx, options, env, self) => {\n    if (!env.sfcBlocks) {\n      return htmlBlockRule(tokens, idx, options, env, self);\n    }\n    const token = tokens[idx];\n    const content = token.content;\n    const match = content.match(sfcRegexp);\n    if (!match) {\n      return htmlBlockRule(tokens, idx, options, env, self);\n    }\n    const sfcBlock = match.groups;\n    if (sfcBlock.type === TAG_NAME_SCRIPT) {\n      env.sfcBlocks.scripts.push(sfcBlock);\n      if (SCRIPT_SETUP_TAG_OPEN_REGEXP.test(sfcBlock.tagOpen)) {\n        env.sfcBlocks.scriptSetup = sfcBlock;\n      } else {\n        env.sfcBlocks.script = sfcBlock;\n      }\n    } else if (sfcBlock.type === TAG_NAME_STYLE) {\n      env.sfcBlocks.styles.push(sfcBlock);\n    } else {\n      env.sfcBlocks.customBlocks.push(sfcBlock);\n    }\n    return \"\";\n  };\n};\n\nexport { SCRIPT_SETUP_TAG_OPEN_REGEXP, TAG_NAME_SCRIPT, TAG_NAME_STYLE, TAG_NAME_TEMPLATE, createSfcRegexp, sfcPlugin };\n/LICENSE\u0004IThe MIT License (MIT)\n\nCopyright (c) 2022-present, mdit-vue Contributors\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n/README.md\u0006 # @mdit-vue/plugin-sfc\n\n[![npm](https://badgen.net/npm/v/@mdit-vue/plugin-sfc)](https://www.npmjs.com/package/@mdit-vue/plugin-sfc)\n[![license](https://badgen.net/github/license/mdit-vue/mdit-vue)](https://github.com/mdit-vue/mdit-vue/blob/main/LICENSE)\n\nA [markdown-it](https://github.com/markdown-it/markdown-it) plugin to help transforming markdown to [Vue SFC](https://vuejs.org/guide/scaling-up/sfc.html).\n\n- Avoids rendering `<script>` and `<style>` tags and extract them into to markdown-it `env.sfcBlocks`.\n- Supports extracting custom blocks.\n- Provides `env.sfcBlocks.template` for convenience.\n\n## Install\n\n```sh\nnpm i @mdit-vue/plugin-sfc\n```\n\n## Usage\n\nThis plugin will only take effects when the `html` option of markdown-it is enabled:\n\n```ts\nimport MarkdownIt from 'markdown-it';\nimport { sfcPlugin } from '@mdit-vue/plugin-sfc';\nimport type { MarkdownItEnv } from '@mdit-vue/types';\n\nconst md = MarkdownIt({ html: true }).use(sfcPlugin, {\n  // options\n});\nconst env: MarkdownItEnv = {};\n\nconst rendered = md.render(\n  `\\\n# foo\n\n<script>\nconsole.log('bar')\n</script>\n`,\n  env,\n);\n\nconsole.log(env.sfcBlocks);\n```\n\n## Options\n\n### customBlocks\n\n- Type: `string[]`\n\n- Default: `[]`\n\n- Details:\n\n  SFC custom blocks to be extracted.\n\n  By default, only `<script>` and `<style>` tags will be extracted. You can set this option to support SFC custom blocks in markdown.\n\n  For example, if you set this option to `['i18n']`, the `<i18n>` tag in your markdown content will be extracted to `env.sfcBlocks.customBlocks` and won't appear in the rendered result.\n/dist/index.cjs\t}'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nconst TAG_NAME_SCRIPT = \"script\";\nconst TAG_NAME_STYLE = \"style\";\nconst TAG_NAME_TEMPLATE = \"template\";\n\nconst SCRIPT_SETUP_TAG_OPEN_REGEXP = /^<script\\s+.*?\\bsetup\\b.*?>$/is;\nconst createSfcRegexp = ({\n  customBlocks\n}) => {\n  const sfcTags = Array.from(\n    /* @__PURE__ */ new Set([TAG_NAME_SCRIPT, TAG_NAME_STYLE, ...customBlocks])\n  ).join(\"|\");\n  return new RegExp(\n    `^\\\\s*(?<content>(?<tagOpen><(?<type>${sfcTags})\\\\s?.*?>)(?<contentStripped>.*)(?<tagClose><\\\\/\\\\k<type>\\\\s*>))\\\\s*$`,\n    \"is\"\n  );\n};\n\nconst sfcPlugin = (md, { customBlocks = [] } = {}) => {\n  const sfcRegexp = createSfcRegexp({ customBlocks });\n  const render = md.render.bind(md);\n  md.render = (src, env = {}) => {\n    env.sfcBlocks = {\n      template: null,\n      script: null,\n      scriptSetup: null,\n      scripts: [],\n      styles: [],\n      customBlocks: []\n    };\n    const rendered = render(src, env);\n    env.sfcBlocks.template = {\n      type: TAG_NAME_TEMPLATE,\n      content: `<${TAG_NAME_TEMPLATE}>${rendered}</${TAG_NAME_TEMPLATE}>`,\n      contentStripped: rendered,\n      tagOpen: `<${TAG_NAME_TEMPLATE}>`,\n      tagClose: `</${TAG_NAME_TEMPLATE}>`\n    };\n    return rendered;\n  };\n  const htmlBlockRule = md.renderer.rules.html_block;\n  md.renderer.rules.html_block = (tokens, idx, options, env, self) => {\n    if (!env.sfcBlocks) {\n      return htmlBlockRule(tokens, idx, options, env, self);\n    }\n    const token = tokens[idx];\n    const content = token.content;\n    const match = content.match(sfcRegexp);\n    if (!match) {\n      return htmlBlockRule(tokens, idx, options, env, self);\n    }\n    const sfcBlock = match.groups;\n    if (sfcBlock.type === TAG_NAME_SCRIPT) {\n      env.sfcBlocks.scripts.push(sfcBlock);\n      if (SCRIPT_SETUP_TAG_OPEN_REGEXP.test(sfcBlock.tagOpen)) {\n        env.sfcBlocks.scriptSetup = sfcBlock;\n      } else {\n        env.sfcBlocks.script = sfcBlock;\n      }\n    } else if (sfcBlock.type === TAG_NAME_STYLE) {\n      env.sfcBlocks.styles.push(sfcBlock);\n    } else {\n      env.sfcBlocks.customBlocks.push(sfcBlock);\n    }\n    return \"\";\n  };\n};\n\nexports.SCRIPT_SETUP_TAG_OPEN_REGEXP = SCRIPT_SETUP_TAG_OPEN_REGEXP;\nexports.TAG_NAME_SCRIPT = TAG_NAME_SCRIPT;\nexports.TAG_NAME_STYLE = TAG_NAME_STYLE;\nexports.TAG_NAME_TEMPLATE = TAG_NAME_TEMPLATE;\nexports.createSfcRegexp = createSfcRegexp;\nexports.sfcPlugin = sfcPlugin;\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QG1kaXQtdnVlL3NoYXJlZEAwLjExLjI=",
    "content": "/README.md# @mdit-vue/shared\n\n[![npm](https://badgen.net/npm/v/@mdit-vue/shared)](https://www.npmjs.com/package/@mdit-vue/shared)\n\nShared utils of mdit-vue.\n\n## Install\n\n```sh\nnpm i @mdit-vue/shared\n```\n/dist/index.d.ts\u0007_import { MarkdownItHeader } from '@mdit-vue/types';\nimport Token from 'markdown-it/lib/token.js';\n\n/**\n * Escape html chars\n */\ndeclare const htmlEscape: (str: string) => string;\n\n/**\n * Unescape html chars\n */\ndeclare const htmlUnescape: (str: string) => string;\n\ninterface ResolveTitleOptions {\n    /**\n     * Should allow inline HTML tags or not.\n     *\n     * If the result is going to be used as Vue template, it should allow inline\n     * HTML tags so that Vue custom components would be kept.\n     */\n    shouldAllowHtml: boolean;\n    /**\n     * Should escape the text content or not.\n     *\n     * If the result is going to be used in HTML directly, it should be escaped\n     * so that the text content won't be wrongly treated as HTML tags.\n     */\n    shouldEscapeText: boolean;\n}\n/**\n * Resolve header title from markdown-it token\n *\n * Typically using the next token of `heading_open` token\n */\ndeclare const resolveTitleFromToken: (token: Token, { shouldAllowHtml, shouldEscapeText }: ResolveTitleOptions) => string;\n\ninterface ResolveHeadersOptions extends ResolveTitleOptions {\n    /**\n     * Heading level that going to be resolved\n     */\n    level: number[];\n    /**\n     * A custom slugification function\n     *\n     * Would be ignored if the `id` attr of the token is set.\n     */\n    slugify: (str: string) => string;\n    /**\n     * A function for formatting headings\n     */\n    format?: (str: string) => string;\n}\n/**\n * Resolve headers from markdown-it tokens\n */\ndeclare const resolveHeadersFromTokens: (tokens: Token[], { level, shouldAllowHtml, shouldEscapeText, slugify, format, }: ResolveHeadersOptions) => MarkdownItHeader[];\n\n/**\n * Default slugification function\n */\ndeclare const slugify: (str: string) => string;\n\nexport { ResolveHeadersOptions, ResolveTitleOptions, htmlEscape, htmlUnescape, resolveHeadersFromTokens, resolveTitleFromToken, slugify };\n/dist/index.mjs\u000b-const htmlEscapeMap = {\n  \"&\": \"&amp;\",\n  \"<\": \"&lt;\",\n  \">\": \"&gt;\",\n  \"'\": \"&#39;\",\n  '\"': \"&quot;\"\n};\nconst htmlEscapeRegexp = /[&<>'\"]/g;\nconst htmlEscape = (str) => str.replace(\n  htmlEscapeRegexp,\n  (char) => htmlEscapeMap[char]\n);\n\nconst htmlUnescapeMap = {\n  \"&amp;\": \"&\",\n  \"&#38;\": \"&\",\n  \"&lt;\": \"<\",\n  \"&#60;\": \"<\",\n  \"&gt;\": \">\",\n  \"&#62;\": \">\",\n  \"&apos;\": \"'\",\n  \"&#39;\": \"'\",\n  \"&quot;\": '\"',\n  \"&#34;\": '\"'\n};\nconst htmlUnescapeRegexp = /&(amp|#38|lt|#60|gt|#62|apos|#39|quot|#34);/g;\nconst htmlUnescape = (str) => str.replace(\n  htmlUnescapeRegexp,\n  (char) => htmlUnescapeMap[char]\n);\n\nconst resolveTitleFromToken = (token, { shouldAllowHtml, shouldEscapeText }) => {\n  const children = token.children ?? [];\n  const titleTokenTypes = [\"text\", \"emoji\", \"code_inline\"];\n  if (shouldAllowHtml) {\n    titleTokenTypes.push(\"html_inline\");\n  }\n  const titleTokens = children.filter(\n    (item) => titleTokenTypes.includes(item.type) && !item.meta?.isPermalinkSymbol\n  );\n  return titleTokens.reduce((result, item) => {\n    if (shouldEscapeText) {\n      if (item.type === \"code_inline\" || item.type === \"text\") {\n        return `${result}${htmlEscape(item.content)}`;\n      }\n    }\n    return `${result}${item.content}`;\n  }, \"\").trim();\n};\n\nconst resolveHeadersFromTokens = (tokens, {\n  level,\n  shouldAllowHtml,\n  shouldEscapeText,\n  slugify,\n  format\n}) => {\n  const headers = [];\n  const stack = [];\n  const push = (header) => {\n    while (stack.length !== 0 && header.level <= stack[0].level) {\n      stack.shift();\n    }\n    if (stack.length === 0) {\n      headers.push(header);\n      stack.push(header);\n    } else {\n      stack[0].children.push(header);\n      stack.unshift(header);\n    }\n  };\n  for (let i = 0; i < tokens.length; i += 1) {\n    const token = tokens[i];\n    if (token?.type !== \"heading_open\" || token?.level !== 0) {\n      continue;\n    }\n    const headerLevel = Number.parseInt(token.tag.slice(1), 10);\n    if (!level.includes(headerLevel)) {\n      continue;\n    }\n    const nextToken = tokens[i + 1];\n    if (!nextToken) {\n      continue;\n    }\n    const title = resolveTitleFromToken(nextToken, {\n      shouldAllowHtml,\n      shouldEscapeText\n    });\n    const slug = token.attrGet(\"id\") ?? slugify(title);\n    push({\n      level: headerLevel,\n      title: format?.(title) ?? title,\n      slug,\n      link: `#${slug}`,\n      children: []\n    });\n  }\n  return headers;\n};\n\nconst rControl = /[\\u0000-\\u001f]/g;\nconst rSpecial = /[\\s~`!@#$%^&*()\\-_+=[\\]{}|\\\\;:\"'“”‘’<>,.?/]+/g;\nconst rCombining = /[\\u0300-\\u036F]/g;\nconst slugify = (str) => str.normalize(\"NFKD\").replace(rCombining, \"\").replace(rControl, \"\").replace(rSpecial, \"-\").replace(/-{2,}/g, \"-\").replace(/^-+|-+$/g, \"\").replace(/^(\\d)/, \"_$1\").toLowerCase();\n\nexport { htmlEscape, htmlUnescape, resolveHeadersFromTokens, resolveTitleFromToken, slugify };\n/package.json\u0004\u0018{\n  \"name\": \"@mdit-vue/shared\",\n  \"version\": \"0.11.2\",\n  \"description\": \"Shared utils and types of mdit-vue\",\n  \"keywords\": [\n    \"markdown-it\",\n    \"vue\",\n    \"utils\"\n  ],\n  \"homepage\": \"https://github.com/mdit-vue\",\n  \"bugs\": {\n    \"url\": \"https://github.com/mdit-vue/mdit-vue/issues\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/mdit-vue/mdit-vue.git\"\n  },\n  \"license\": \"MIT\",\n  \"author\": \"meteorlxy <meteor.lxy@foxmail.com>\",\n  \"type\": \"module\",\n  \"exports\": {\n    \".\": {\n      \"types\": \"./dist/index.d.ts\",\n      \"import\": \"./dist/index.mjs\",\n      \"require\": \"./dist/index.cjs\"\n    }\n  },\n  \"main\": \"./dist/index.cjs\",\n  \"module\": \"./dist/index.mjs\",\n  \"types\": \"./dist/index.d.ts\",\n  \"files\": [\n    \"./dist\"\n  ],\n  \"scripts\": {\n    \"build\": \"unbuild\",\n    \"test\": \"vitest\"\n  },\n  \"dependencies\": {\n    \"@mdit-vue/types\": \"0.11.0\",\n    \"@types/markdown-it\": \"^12.2.3\",\n    \"markdown-it\": \"^13.0.1\"\n  },\n  \"publishConfig\": {\n    \"access\": \"public\"\n  },\n  \"gitHead\": \"676ec4ca8704d709e7a47f7f6d41ff3f70dc2356\"\n}\n/LICENSE\u0004IThe MIT License (MIT)\n\nCopyright (c) 2022-present, mdit-vue Contributors\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n/dist/index.cjs\u000b'use strict';\n\nconst htmlEscapeMap = {\n  \"&\": \"&amp;\",\n  \"<\": \"&lt;\",\n  \">\": \"&gt;\",\n  \"'\": \"&#39;\",\n  '\"': \"&quot;\"\n};\nconst htmlEscapeRegexp = /[&<>'\"]/g;\nconst htmlEscape = (str) => str.replace(\n  htmlEscapeRegexp,\n  (char) => htmlEscapeMap[char]\n);\n\nconst htmlUnescapeMap = {\n  \"&amp;\": \"&\",\n  \"&#38;\": \"&\",\n  \"&lt;\": \"<\",\n  \"&#60;\": \"<\",\n  \"&gt;\": \">\",\n  \"&#62;\": \">\",\n  \"&apos;\": \"'\",\n  \"&#39;\": \"'\",\n  \"&quot;\": '\"',\n  \"&#34;\": '\"'\n};\nconst htmlUnescapeRegexp = /&(amp|#38|lt|#60|gt|#62|apos|#39|quot|#34);/g;\nconst htmlUnescape = (str) => str.replace(\n  htmlUnescapeRegexp,\n  (char) => htmlUnescapeMap[char]\n);\n\nconst resolveTitleFromToken = (token, { shouldAllowHtml, shouldEscapeText }) => {\n  const children = token.children ?? [];\n  const titleTokenTypes = [\"text\", \"emoji\", \"code_inline\"];\n  if (shouldAllowHtml) {\n    titleTokenTypes.push(\"html_inline\");\n  }\n  const titleTokens = children.filter(\n    (item) => titleTokenTypes.includes(item.type) && !item.meta?.isPermalinkSymbol\n  );\n  return titleTokens.reduce((result, item) => {\n    if (shouldEscapeText) {\n      if (item.type === \"code_inline\" || item.type === \"text\") {\n        return `${result}${htmlEscape(item.content)}`;\n      }\n    }\n    return `${result}${item.content}`;\n  }, \"\").trim();\n};\n\nconst resolveHeadersFromTokens = (tokens, {\n  level,\n  shouldAllowHtml,\n  shouldEscapeText,\n  slugify,\n  format\n}) => {\n  const headers = [];\n  const stack = [];\n  const push = (header) => {\n    while (stack.length !== 0 && header.level <= stack[0].level) {\n      stack.shift();\n    }\n    if (stack.length === 0) {\n      headers.push(header);\n      stack.push(header);\n    } else {\n      stack[0].children.push(header);\n      stack.unshift(header);\n    }\n  };\n  for (let i = 0; i < tokens.length; i += 1) {\n    const token = tokens[i];\n    if (token?.type !== \"heading_open\" || token?.level !== 0) {\n      continue;\n    }\n    const headerLevel = Number.parseInt(token.tag.slice(1), 10);\n    if (!level.includes(headerLevel)) {\n      continue;\n    }\n    const nextToken = tokens[i + 1];\n    if (!nextToken) {\n      continue;\n    }\n    const title = resolveTitleFromToken(nextToken, {\n      shouldAllowHtml,\n      shouldEscapeText\n    });\n    const slug = token.attrGet(\"id\") ?? slugify(title);\n    push({\n      level: headerLevel,\n      title: format?.(title) ?? title,\n      slug,\n      link: `#${slug}`,\n      children: []\n    });\n  }\n  return headers;\n};\n\nconst rControl = /[\\u0000-\\u001f]/g;\nconst rSpecial = /[\\s~`!@#$%^&*()\\-_+=[\\]{}|\\\\;:\"'“”‘’<>,.?/]+/g;\nconst rCombining = /[\\u0300-\\u036F]/g;\nconst slugify = (str) => str.normalize(\"NFKD\").replace(rCombining, \"\").replace(rControl, \"\").replace(rSpecial, \"-\").replace(/-{2,}/g, \"-\").replace(/^-+|-+$/g, \"\").replace(/^(\\d)/, \"_$1\").toLowerCase();\n\nexports.htmlEscape = htmlEscape;\nexports.htmlUnescape = htmlUnescape;\nexports.resolveHeadersFromTokens = resolveHeadersFromTokens;\nexports.resolveTitleFromToken = resolveTitleFromToken;\nexports.slugify = slugify;\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QG1kaXQtdnVlL3R5cGVzQDAuMTEuMA==",
    "content": "/README.md\u0002# @mdit-vue/types\n\n[![npm](https://badgen.net/npm/v/@mdit-vue/types)](https://www.npmjs.com/package/@mdit-vue/types)\n\nShared types definition of mdit-vue.\n\n## Install\n\n```sh\nnpm i @mdit-vue/types\n```\n\n## Usage\n\nAdd more properties to `env` via [TypeScript module augmentation](https://www.typescriptlang.org/docs/handbook/declaration-merging.html#module-augmentation):\n\n```ts\ndeclare module '@mdit-vue/types' {\n  interface MarkdownItEnv {\n    foo?: string[];\n  }\n}\n```\n\n```ts\nimport MarkdownIt from 'markdown-it';\nimport type { MarkdownItEnv } from '@mdit-vue/types';\n\nconst md = MarkdownIt({ html: true });\nconst env: MarkdownItEnv = {};\nconst rendered = md.render('raw markdown text', env);\n```\n/package.json\u0003{\n  \"name\": \"@mdit-vue/types\",\n  \"version\": \"0.11.0\",\n  \"description\": \"Shared types definition of mdit-vue\",\n  \"keywords\": [\n    \"markdown-it\",\n    \"vue\",\n    \"types\"\n  ],\n  \"homepage\": \"https://github.com/mdit-vue\",\n  \"bugs\": {\n    \"url\": \"https://github.com/mdit-vue/mdit-vue/issues\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/mdit-vue/mdit-vue.git\"\n  },\n  \"license\": \"MIT\",\n  \"author\": \"meteorlxy <meteor.lxy@foxmail.com>\",\n  \"type\": \"module\",\n  \"exports\": {\n    \".\": {\n      \"types\": \"./dist/index.d.ts\",\n      \"import\": \"./dist/index.mjs\",\n      \"require\": \"./dist/index.cjs\"\n    }\n  },\n  \"main\": \"./dist/index.cjs\",\n  \"module\": \"./dist/index.mjs\",\n  \"types\": \"./dist/index.d.ts\",\n  \"files\": [\n    \"./dist\"\n  ],\n  \"scripts\": {\n    \"build\": \"unbuild\"\n  },\n  \"publishConfig\": {\n    \"access\": \"public\"\n  },\n  \"gitHead\": \"6e4f18dacc06e0aa5d3108df8925f6b0aa885150\"\n}\n/LICENSE\u0004IThe MIT License (MIT)\n\nCopyright (c) 2022-present, mdit-vue Contributors\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n/dist/index.d.ts\u0002ainterface MarkdownItEnv {\n}\ninterface MarkdownItHeader {\n    /**\n     * The level of the header\n     *\n     * `1` to `6` for `<h1>` to `<h6>`\n     */\n    level: number;\n    /**\n     * The title of the header\n     */\n    title: string;\n    /**\n     * The slug of the header\n     *\n     * Typically the `id` attr of the header anchor\n     */\n    slug: string;\n    /**\n     * Link of the header\n     *\n     * Typically using `#${slug}` as the anchor hash\n     */\n    link: string;\n    /**\n     * The children of the header\n     */\n    children: MarkdownItHeader[];\n}\n\nexport { MarkdownItEnv, MarkdownItHeader };\n/dist/index.mjs\u0001\n/dist/index.cjs\u000f'use strict';\n\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QG5vZGVsaWIvZnMuc3RhdEAyLjAuNQ==",
    "content": "/out/providers/async.js\u0004\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.read = void 0;\nfunction read(path, settings, callback) {\n    settings.fs.lstat(path, (lstatError, lstat) => {\n        if (lstatError !== null) {\n            callFailureCallback(callback, lstatError);\n            return;\n        }\n        if (!lstat.isSymbolicLink() || !settings.followSymbolicLink) {\n            callSuccessCallback(callback, lstat);\n            return;\n        }\n        settings.fs.stat(path, (statError, stat) => {\n            if (statError !== null) {\n                if (settings.throwErrorOnBrokenSymbolicLink) {\n                    callFailureCallback(callback, statError);\n                    return;\n                }\n                callSuccessCallback(callback, lstat);\n                return;\n            }\n            if (settings.markSymbolicLink) {\n                stat.isSymbolicLink = () => true;\n            }\n            callSuccessCallback(callback, stat);\n        });\n    });\n}\nexports.read = read;\nfunction callFailureCallback(callback, error) {\n    callback(error);\n}\nfunction callSuccessCallback(callback, result) {\n    callback(null, result);\n}\n/out/providers/sync.js\u0002k\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.read = void 0;\nfunction read(path, settings) {\n    const lstat = settings.fs.lstatSync(path);\n    if (!lstat.isSymbolicLink() || !settings.followSymbolicLink) {\n        return lstat;\n    }\n    try {\n        const stat = settings.fs.statSync(path);\n        if (settings.markSymbolicLink) {\n            stat.isSymbolicLink = () => true;\n        }\n        return stat;\n    }\n    catch (error) {\n        if (!settings.throwErrorOnBrokenSymbolicLink) {\n            return lstat;\n        }\n        throw error;\n    }\n}\nexports.read = read;\n/out/providers/sync.d.tsėimport type Settings from '../settings';\nimport type { Stats } from '../types';\nexport declare function read(path: string, settings: Settings): Stats;\n/out/index.d.ts\u0003%import type { FileSystemAdapter, StatAsynchronousMethod, StatSynchronousMethod } from './adapters/fs';\nimport * as async from './providers/async';\nimport Settings, { Options } from './settings';\nimport type { Stats } from './types';\ndeclare type AsyncCallback = async.AsyncCallback;\ndeclare function stat(path: string, callback: AsyncCallback): void;\ndeclare function stat(path: string, optionsOrSettings: Options | Settings, callback: AsyncCallback): void;\ndeclare namespace stat {\n    function __promisify__(path: string, optionsOrSettings?: Options | Settings): Promise<Stats>;\n}\ndeclare function statSync(path: string, optionsOrSettings?: Options | Settings): Stats;\nexport { Settings, stat, statSync, AsyncCallback, FileSystemAdapter, StatAsynchronousMethod, StatSynchronousMethod, Options, Stats };\n/README.md\f\u0003# @nodelib/fs.stat\n\n> Get the status of a file with some features.\n\n## :bulb: Highlights\n\nWrapper around standard method `fs.lstat` and `fs.stat` with some features.\n\n* :beginner: Normally follows symbolic link.\n* :gear: Can safely work with broken symbolic link.\n\n## Install\n\n```console\nnpm install @nodelib/fs.stat\n```\n\n## Usage\n\n```ts\nimport * as fsStat from '@nodelib/fs.stat';\n\nfsStat.stat('path', (error, stats) => { /* … */ });\n```\n\n## API\n\n### .stat(path, [optionsOrSettings], callback)\n\nReturns an instance of `fs.Stats` class for provided path with standard callback-style.\n\n```ts\nfsStat.stat('path', (error, stats) => { /* … */ });\nfsStat.stat('path', {}, (error, stats) => { /* … */ });\nfsStat.stat('path', new fsStat.Settings(), (error, stats) => { /* … */ });\n```\n\n### .statSync(path, [optionsOrSettings])\n\nReturns an instance of `fs.Stats` class for provided path.\n\n```ts\nconst stats = fsStat.stat('path');\nconst stats = fsStat.stat('path', {});\nconst stats = fsStat.stat('path', new fsStat.Settings());\n```\n\n#### path\n\n* Required: `true`\n* Type: `string | Buffer | URL`\n\nA path to a file. If a URL is provided, it must use the `file:` protocol.\n\n#### optionsOrSettings\n\n* Required: `false`\n* Type: `Options | Settings`\n* Default: An instance of `Settings` class\n\nAn [`Options`](#options) object or an instance of [`Settings`](#settings) class.\n\n> :book: When you pass a plain object, an instance of the `Settings` class will be created automatically. If you plan to call the method frequently, use a pre-created instance of the `Settings` class.\n\n### Settings([options])\n\nA class of full settings of the package.\n\n```ts\nconst settings = new fsStat.Settings({ followSymbolicLink: false });\n\nconst stats = fsStat.stat('path', settings);\n```\n\n## Options\n\n### `followSymbolicLink`\n\n* Type: `boolean`\n* Default: `true`\n\nFollow symbolic link or not. Call `fs.stat` on symbolic link if `true`.\n\n### `markSymbolicLink`\n\n* Type: `boolean`\n* Default: `false`\n\nMark symbolic link by setting the return value of `isSymbolicLink` function to always `true` (even after `fs.stat`).\n\n> :book: Can be used if you want to know what is hidden behind a symbolic link, but still continue to know that it is a symbolic link.\n\n### `throwErrorOnBrokenSymbolicLink`\n\n* Type: `boolean`\n* Default: `true`\n\nThrow an error when symbolic link is broken if `true` or safely return `lstat` call if `false`.\n\n### `fs`\n\n* Type: [`FileSystemAdapter`](./src/adapters/fs.ts)\n* Default: A default FS methods\n\nBy default, the built-in Node.js module (`fs`) is used to work with the file system. You can replace any method with your own.\n\n```ts\ninterface FileSystemAdapter {\n\tlstat?: typeof fs.lstat;\n\tstat?: typeof fs.stat;\n\tlstatSync?: typeof fs.lstatSync;\n\tstatSync?: typeof fs.statSync;\n}\n\nconst settings = new fsStat.Settings({\n\tfs: { lstat: fakeLstat }\n});\n```\n\n## Changelog\n\nSee the [Releases section of our GitHub project](https://github.com/nodelib/nodelib/releases) for changelog for each release version.\n\n## License\n\nThis software is released under the terms of the MIT license.\n/out/types/index.jsM\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/out/settings.js\u0002\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst fs = require(\"./adapters/fs\");\nclass Settings {\n    constructor(_options = {}) {\n        this._options = _options;\n        this.followSymbolicLink = this._getValue(this._options.followSymbolicLink, true);\n        this.fs = fs.createFileSystemAdapter(this._options.fs);\n        this.markSymbolicLink = this._getValue(this._options.markSymbolicLink, false);\n        this.throwErrorOnBrokenSymbolicLink = this._getValue(this._options.throwErrorOnBrokenSymbolicLink, true);\n    }\n    _getValue(option, value) {\n        return option !== null && option !== void 0 ? option : value;\n    }\n}\nexports.default = Settings;\n/LICENSE\u00047The MIT License (MIT)\n\nCopyright (c) Denis Malinochkin\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n/out/types/index.d.tsĠ/// <reference types=\"node\" />\nimport type * as fs from 'fs';\nexport declare type Stats = fs.Stats;\nexport declare type ErrnoException = NodeJS.ErrnoException;\n/out/adapters/fs.d.ts\u0002/// <reference types=\"node\" />\nimport * as fs from 'fs';\nimport type { ErrnoException } from '../types';\nexport declare type StatAsynchronousMethod = (path: string, callback: (error: ErrnoException | null, stats: fs.Stats) => void) => void;\nexport declare type StatSynchronousMethod = (path: string) => fs.Stats;\nexport interface FileSystemAdapter {\n    lstat: StatAsynchronousMethod;\n    stat: StatAsynchronousMethod;\n    lstatSync: StatSynchronousMethod;\n    statSync: StatSynchronousMethod;\n}\nexport declare const FILE_SYSTEM_ADAPTER: FileSystemAdapter;\nexport declare function createFileSystemAdapter(fsMethods?: Partial<FileSystemAdapter>): FileSystemAdapter;\n/out/providers/async.d.ts\u0001\u0012import type Settings from '../settings';\nimport type { ErrnoException, Stats } from '../types';\nexport declare type AsyncCallback = (error: ErrnoException, stats: Stats) => void;\nexport declare function read(path: string, settings: Settings, callback: AsyncCallback): void;\n/out/index.js\u0003\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.statSync = exports.stat = exports.Settings = void 0;\nconst async = require(\"./providers/async\");\nconst sync = require(\"./providers/sync\");\nconst settings_1 = require(\"./settings\");\nexports.Settings = settings_1.default;\nfunction stat(path, optionsOrSettingsOrCallback, callback) {\n    if (typeof optionsOrSettingsOrCallback === 'function') {\n        async.read(path, getSettings(), optionsOrSettingsOrCallback);\n        return;\n    }\n    async.read(path, getSettings(optionsOrSettingsOrCallback), callback);\n}\nexports.stat = stat;\nfunction statSync(path, optionsOrSettings) {\n    const settings = getSettings(optionsOrSettings);\n    return sync.read(path, settings);\n}\nexports.statSync = statSync;\nfunction getSettings(settingsOrOptions = {}) {\n    if (settingsOrOptions instanceof settings_1.default) {\n        return settingsOrOptions;\n    }\n    return new settings_1.default(settingsOrOptions);\n}\n/out/adapters/fs.js\u0002F\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createFileSystemAdapter = exports.FILE_SYSTEM_ADAPTER = void 0;\nconst fs = require(\"fs\");\nexports.FILE_SYSTEM_ADAPTER = {\n    lstat: fs.lstat,\n    stat: fs.stat,\n    lstatSync: fs.lstatSync,\n    statSync: fs.statSync\n};\nfunction createFileSystemAdapter(fsMethods) {\n    if (fsMethods === undefined) {\n        return exports.FILE_SYSTEM_ADAPTER;\n    }\n    return Object.assign(Object.assign({}, exports.FILE_SYSTEM_ADAPTER), fsMethods);\n}\nexports.createFileSystemAdapter = createFileSystemAdapter;\n/package.json\u0003{\n  \"name\": \"@nodelib/fs.stat\",\n  \"version\": \"2.0.5\",\n  \"description\": \"Get the status of a file with some features\",\n  \"license\": \"MIT\",\n  \"repository\": \"https://github.com/nodelib/nodelib/tree/master/packages/fs/fs.stat\",\n  \"keywords\": [\n    \"NodeLib\",\n    \"fs\",\n    \"FileSystem\",\n    \"file system\",\n    \"stat\"\n  ],\n  \"engines\": {\n    \"node\": \">= 8\"\n  },\n  \"files\": [\n    \"out/**\",\n    \"!out/**/*.map\",\n    \"!out/**/*.spec.*\"\n  ],\n  \"main\": \"out/index.js\",\n  \"typings\": \"out/index.d.ts\",\n  \"scripts\": {\n    \"clean\": \"rimraf {tsconfig.tsbuildinfo,out}\",\n    \"lint\": \"eslint \\\"src/**/*.ts\\\" --cache\",\n    \"compile\": \"tsc -b .\",\n    \"compile:watch\": \"tsc -p . --watch --sourceMap\",\n    \"test\": \"mocha \\\"out/**/*.spec.js\\\" -s 0\",\n    \"build\": \"npm run clean && npm run compile && npm run lint && npm test\",\n    \"watch\": \"npm run clean && npm run compile:watch\"\n  },\n  \"devDependencies\": {\n    \"@nodelib/fs.macchiato\": \"1.0.4\"\n  },\n  \"gitHead\": \"d6a7960d5281d3dd5f8e2efba49bb552d090f562\"\n}\n/out/settings.d.ts\u0002\u0006import * as fs from './adapters/fs';\nexport interface Options {\n    followSymbolicLink?: boolean;\n    fs?: Partial<fs.FileSystemAdapter>;\n    markSymbolicLink?: boolean;\n    throwErrorOnBrokenSymbolicLink?: boolean;\n}\nexport default class Settings {\n    private readonly _options;\n    readonly followSymbolicLink: boolean;\n    readonly fs: fs.FileSystemAdapter;\n    readonly markSymbolicLink: boolean;\n    readonly throwErrorOnBrokenSymbolicLink: boolean;\n    constructor(_options?: Options);\n    private _getValue;\n}\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QGFtcHByb2plY3QvcmVtYXBwaW5nQDIuMi4w",
    "content": "/LICENSE,M\n                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright 2019 Google LLC\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n/dist/remapping.umd.js.map\u0017v{\"version\":3,\"file\":\"remapping.umd.js\",\"sources\":[\"../../src/source-map-tree.ts\",\"../../src/build-source-map-tree.ts\",\"../../src/source-map.ts\",\"../../src/remapping.ts\"],\"sourcesContent\":[null,null,null,null],\"names\":[\"GenMapping\",\"decodedMappings\",\"addSegment\",\"setSourceContent\",\"traceSegment\",\"TraceMap\",\"decodedMap\",\"encodedMap\"],\"mappings\":\"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\"}/dist/remapping.mjs!\u0010import { decodedMappings, traceSegment, TraceMap } from '@jridgewell/trace-mapping';\nimport { GenMapping, addSegment, setSourceContent, decodedMap, encodedMap } from '@jridgewell/gen-mapping';\n\nconst SOURCELESS_MAPPING = {\n    source: null,\n    column: null,\n    line: null,\n    name: null,\n    content: null,\n};\nconst EMPTY_SOURCES = [];\nfunction Source(map, sources, source, content) {\n    return {\n        map,\n        sources,\n        source,\n        content,\n    };\n}\n/**\n * MapSource represents a single sourcemap, with the ability to trace mappings into its child nodes\n * (which may themselves be SourceMapTrees).\n */\nfunction MapSource(map, sources) {\n    return Source(map, sources, '', null);\n}\n/**\n * A \"leaf\" node in the sourcemap tree, representing an original, unmodified source file. Recursive\n * segment tracing ends at the `OriginalSource`.\n */\nfunction OriginalSource(source, content) {\n    return Source(null, EMPTY_SOURCES, source, content);\n}\n/**\n * traceMappings is only called on the root level SourceMapTree, and begins the process of\n * resolving each mapping in terms of the original source files.\n */\nfunction traceMappings(tree) {\n    const gen = new GenMapping({ file: tree.map.file });\n    const { sources: rootSources, map } = tree;\n    const rootNames = map.names;\n    const rootMappings = decodedMappings(map);\n    for (let i = 0; i < rootMappings.length; i++) {\n        const segments = rootMappings[i];\n        let lastSource = null;\n        let lastSourceLine = null;\n        let lastSourceColumn = null;\n        for (let j = 0; j < segments.length; j++) {\n            const segment = segments[j];\n            const genCol = segment[0];\n            let traced = SOURCELESS_MAPPING;\n            // 1-length segments only move the current generated column, there's no source information\n            // to gather from it.\n            if (segment.length !== 1) {\n                const source = rootSources[segment[1]];\n                traced = originalPositionFor(source, segment[2], segment[3], segment.length === 5 ? rootNames[segment[4]] : '');\n                // If the trace is invalid, then the trace ran into a sourcemap that doesn't contain a\n                // respective segment into an original source.\n                if (traced == null)\n                    continue;\n            }\n            // So we traced a segment down into its original source file. Now push a\n            // new segment pointing to this location.\n            const { column, line, name, content, source } = traced;\n            if (line === lastSourceLine && column === lastSourceColumn && source === lastSource) {\n                continue;\n            }\n            lastSourceLine = line;\n            lastSourceColumn = column;\n            lastSource = source;\n            // Sigh, TypeScript can't figure out source/line/column are either all null, or all non-null...\n            addSegment(gen, i, genCol, source, line, column, name);\n            if (content != null)\n                setSourceContent(gen, source, content);\n        }\n    }\n    return gen;\n}\n/**\n * originalPositionFor is only called on children SourceMapTrees. It recurses down into its own\n * child SourceMapTrees, until we find the original source map.\n */\nfunction originalPositionFor(source, line, column, name) {\n    if (!source.map) {\n        return { column, line, name, source: source.source, content: source.content };\n    }\n    const segment = traceSegment(source.map, line, column);\n    // If we couldn't find a segment, then this doesn't exist in the sourcemap.\n    if (segment == null)\n        return null;\n    // 1-length segments only move the current generated column, there's no source information\n    // to gather from it.\n    if (segment.length === 1)\n        return SOURCELESS_MAPPING;\n    return originalPositionFor(source.sources[segment[1]], segment[2], segment[3], segment.length === 5 ? source.map.names[segment[4]] : name);\n}\n\nfunction asArray(value) {\n    if (Array.isArray(value))\n        return value;\n    return [value];\n}\n/**\n * Recursively builds a tree structure out of sourcemap files, with each node\n * being either an `OriginalSource` \"leaf\" or a `SourceMapTree` composed of\n * `OriginalSource`s and `SourceMapTree`s.\n *\n * Every sourcemap is composed of a collection of source files and mappings\n * into locations of those source files. When we generate a `SourceMapTree` for\n * the sourcemap, we attempt to load each source file's own sourcemap. If it\n * does not have an associated sourcemap, it is considered an original,\n * unmodified source file.\n */\nfunction buildSourceMapTree(input, loader) {\n    const maps = asArray(input).map((m) => new TraceMap(m, ''));\n    const map = maps.pop();\n    for (let i = 0; i < maps.length; i++) {\n        if (maps[i].sources.length > 1) {\n            throw new Error(`Transformation map ${i} must have exactly one source file.\\n` +\n                'Did you specify these with the most recent transformation maps first?');\n        }\n    }\n    let tree = build(map, loader, '', 0);\n    for (let i = maps.length - 1; i >= 0; i--) {\n        tree = MapSource(maps[i], [tree]);\n    }\n    return tree;\n}\nfunction build(map, loader, importer, importerDepth) {\n    const { resolvedSources, sourcesContent } = map;\n    const depth = importerDepth + 1;\n    const children = resolvedSources.map((sourceFile, i) => {\n        // The loading context gives the loader more information about why this file is being loaded\n        // (eg, from which importer). It also allows the loader to override the location of the loaded\n        // sourcemap/original source, or to override the content in the sourcesContent field if it's\n        // an unmodified source file.\n        const ctx = {\n            importer,\n            depth,\n            source: sourceFile || '',\n            content: undefined,\n        };\n        // Use the provided loader callback to retrieve the file's sourcemap.\n        // TODO: We should eventually support async loading of sourcemap files.\n        const sourceMap = loader(ctx.source, ctx);\n        const { source, content } = ctx;\n        // If there is a sourcemap, then we need to recurse into it to load its source files.\n        if (sourceMap)\n            return build(new TraceMap(sourceMap, source), loader, source, depth);\n        // Else, it's an an unmodified source file.\n        // The contents of this unmodified source file can be overridden via the loader context,\n        // allowing it to be explicitly null or a string. If it remains undefined, we fall back to\n        // the importing sourcemap's `sourcesContent` field.\n        const sourceContent = content !== undefined ? content : sourcesContent ? sourcesContent[i] : null;\n        return OriginalSource(source, sourceContent);\n    });\n    return MapSource(map, children);\n}\n\n/**\n * A SourceMap v3 compatible sourcemap, which only includes fields that were\n * provided to it.\n */\nclass SourceMap {\n    constructor(map, options) {\n        const out = options.decodedMappings ? decodedMap(map) : encodedMap(map);\n        this.version = out.version; // SourceMap spec says this should be first.\n        this.file = out.file;\n        this.mappings = out.mappings;\n        this.names = out.names;\n        this.sourceRoot = out.sourceRoot;\n        this.sources = out.sources;\n        if (!options.excludeContent) {\n            this.sourcesContent = out.sourcesContent;\n        }\n    }\n    toString() {\n        return JSON.stringify(this);\n    }\n}\n\n/**\n * Traces through all the mappings in the root sourcemap, through the sources\n * (and their sourcemaps), all the way back to the original source location.\n *\n * `loader` will be called every time we encounter a source file. If it returns\n * a sourcemap, we will recurse into that sourcemap to continue the trace. If\n * it returns a falsey value, that source file is treated as an original,\n * unmodified source file.\n *\n * Pass `excludeContent` to exclude any self-containing source file content\n * from the output sourcemap.\n *\n * Pass `decodedMappings` to receive a SourceMap with decoded (instead of\n * VLQ encoded) mappings.\n */\nfunction remapping(input, loader, options) {\n    const opts = typeof options === 'object' ? options : { excludeContent: !!options, decodedMappings: false };\n    const tree = buildSourceMapTree(input, loader);\n    return new SourceMap(traceMappings(tree), opts);\n}\n\nexport { remapping as default };\n//# sourceMappingURL=remapping.mjs.map\n/dist/types/remapping.d.ts\u0004+import SourceMap from './source-map';\nimport type { SourceMapInput, SourceMapLoader, Options } from './types';\nexport type { SourceMapSegment, EncodedSourceMap, EncodedSourceMap as RawSourceMap, DecodedSourceMap, SourceMapInput, SourceMapLoader, LoaderContext, Options, } from './types';\n/**\n * Traces through all the mappings in the root sourcemap, through the sources\n * (and their sourcemaps), all the way back to the original source location.\n *\n * `loader` will be called every time we encounter a source file. If it returns\n * a sourcemap, we will recurse into that sourcemap to continue the trace. If\n * it returns a falsey value, that source file is treated as an original,\n * unmodified source file.\n *\n * Pass `excludeContent` to exclude any self-containing source file content\n * from the output sourcemap.\n *\n * Pass `decodedMappings` to receive a SourceMap with decoded (instead of\n * VLQ encoded) mappings.\n */\nexport default function remapping(input: SourceMapInput | SourceMapInput[], loader: SourceMapLoader, options?: boolean | Options): SourceMap;\n&/dist/types/build-source-map-tree.d.ts\u0003\u001fimport type { MapSource as MapSourceType } from './source-map-tree';\nimport type { SourceMapInput, SourceMapLoader } from './types';\n/**\n * Recursively builds a tree structure out of sourcemap files, with each node\n * being either an `OriginalSource` \"leaf\" or a `SourceMapTree` composed of\n * `OriginalSource`s and `SourceMapTree`s.\n *\n * Every sourcemap is composed of a collection of source files and mappings\n * into locations of those source files. When we generate a `SourceMapTree` for\n * the sourcemap, we attempt to load each source file's own sourcemap. If it\n * does not have an associated sourcemap, it is considered an original,\n * unmodified source file.\n */\nexport default function buildSourceMapTree(input: SourceMapInput | SourceMapInput[], loader: SourceMapLoader): MapSourceType;\n/package.json\u0007{\n  \"name\": \"@ampproject/remapping\",\n  \"version\": \"2.2.0\",\n  \"description\": \"Remap sequential sourcemaps through transformations to point at the original source code\",\n  \"keywords\": [\n    \"source\",\n    \"map\",\n    \"remap\"\n  ],\n  \"main\": \"dist/remapping.umd.js\",\n  \"module\": \"dist/remapping.mjs\",\n  \"typings\": \"dist/types/remapping.d.ts\",\n  \"files\": [\n    \"dist\"\n  ],\n  \"author\": \"Justin Ridgewell <jridgewell@google.com>\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/ampproject/remapping.git\"\n  },\n  \"license\": \"Apache-2.0\",\n  \"engines\": {\n    \"node\": \">=6.0.0\"\n  },\n  \"scripts\": {\n    \"build\": \"run-s -n build:*\",\n    \"build:rollup\": \"rollup -c rollup.config.js\",\n    \"build:ts\": \"tsc --project tsconfig.build.json\",\n    \"lint\": \"run-s -n lint:*\",\n    \"lint:prettier\": \"npm run test:lint:prettier -- --write\",\n    \"lint:ts\": \"npm run test:lint:ts -- --fix\",\n    \"prebuild\": \"rm -rf dist\",\n    \"prepublishOnly\": \"npm run preversion\",\n    \"preversion\": \"run-s test build\",\n    \"test\": \"run-s -n test:lint test:only\",\n    \"test:debug\": \"node --inspect-brk node_modules/.bin/jest --runInBand\",\n    \"test:lint\": \"run-s -n test:lint:*\",\n    \"test:lint:prettier\": \"prettier --check '{src,test}/**/*.ts'\",\n    \"test:lint:ts\": \"eslint '{src,test}/**/*.ts'\",\n    \"test:only\": \"jest --coverage\",\n    \"test:watch\": \"jest --coverage --watch\"\n  },\n  \"devDependencies\": {\n    \"@rollup/plugin-typescript\": \"8.3.2\",\n    \"@types/jest\": \"27.4.1\",\n    \"@typescript-eslint/eslint-plugin\": \"5.20.0\",\n    \"@typescript-eslint/parser\": \"5.20.0\",\n    \"eslint\": \"8.14.0\",\n    \"eslint-config-prettier\": \"8.5.0\",\n    \"jest\": \"27.5.1\",\n    \"jest-config\": \"27.5.1\",\n    \"npm-run-all\": \"4.1.5\",\n    \"prettier\": \"2.6.2\",\n    \"rollup\": \"2.70.2\",\n    \"ts-jest\": \"27.1.4\",\n    \"tslib\": \"2.4.0\",\n    \"typescript\": \"4.6.3\"\n  },\n  \"dependencies\": {\n    \"@jridgewell/gen-mapping\": \"^0.1.0\",\n    \"@jridgewell/trace-mapping\": \"^0.3.9\"\n  }\n}\n/README.md\u001c# @ampproject/remapping\n\n> Remap sequential sourcemaps through transformations to point at the original source code\n\nRemapping allows you to take the sourcemaps generated through transforming your code and \"remap\"\nthem to the original source locations. Think \"my minified code, transformed with babel and bundled\nwith webpack\", all pointing to the correct location in your original source code.\n\nWith remapping, none of your source code transformations need to be aware of the input's sourcemap,\nthey only need to generate an output sourcemap. This greatly simplifies building custom\ntransformations (think a find-and-replace).\n\n## Installation\n\n```sh\nnpm install @ampproject/remapping\n```\n\n## Usage\n\n```typescript\nfunction remapping(\n  map: SourceMap | SourceMap[],\n  loader: (file: string, ctx: LoaderContext) => (SourceMap | null | undefined),\n  options?: { excludeContent: boolean, decodedMappings: boolean }\n): SourceMap;\n\n// LoaderContext gives the loader the importing sourcemap, tree depth, the ability to override the\n// \"source\" location (where child sources are resolved relative to, or the location of original\n// source), and the ability to override the \"content\" of an original source for inclusion in the\n// output sourcemap.\ntype LoaderContext = {\n readonly importer: string;\n readonly depth: number;\n source: string;\n content: string | null | undefined;\n}\n```\n\n`remapping` takes the final output sourcemap, and a `loader` function. For every source file pointer\nin the sourcemap, the `loader` will be called with the resolved path. If the path itself represents\na transformed file (it has a sourcmap associated with it), then the `loader` should return that\nsourcemap. If not, the path will be treated as an original, untransformed source code.\n\n```js\n// Babel transformed \"helloworld.js\" into \"transformed.js\"\nconst transformedMap = JSON.stringify({\n  file: 'transformed.js',\n  // 1st column of 2nd line of output file translates into the 1st source\n  // file, line 3, column 2\n  mappings: ';CAEE',\n  sources: ['helloworld.js'],\n  version: 3,\n});\n\n// Uglify minified \"transformed.js\" into \"transformed.min.js\"\nconst minifiedTransformedMap = JSON.stringify({\n  file: 'transformed.min.js',\n  // 0th column of 1st line of output file translates into the 1st source\n  // file, line 2, column 1.\n  mappings: 'AACC',\n  names: [],\n  sources: ['transformed.js'],\n  version: 3,\n});\n\nconst remapped = remapping(\n  minifiedTransformedMap,\n  (file, ctx) => {\n\n    // The \"transformed.js\" file is an transformed file.\n    if (file === 'transformed.js') {\n      // The root importer is empty.\n      console.assert(ctx.importer === '');\n      // The depth in the sourcemap tree we're currently loading.\n      // The root `minifiedTransformedMap` is depth 0, and its source children are depth 1, etc.\n      console.assert(ctx.depth === 1);\n\n      return transformedMap;\n    }\n\n    // Loader will be called to load transformedMap's source file pointers as well.\n    console.assert(file === 'helloworld.js');\n    // `transformed.js`'s sourcemap points into `helloworld.js`.\n    console.assert(ctx.importer === 'transformed.js');\n    // This is a source child of `transformed`, which is a source child of `minifiedTransformedMap`.\n    console.assert(ctx.depth === 2);\n    return null;\n  }\n);\n\nconsole.log(remapped);\n// {\n//   file: 'transpiled.min.js',\n//   mappings: 'AAEE',\n//   sources: ['helloworld.js'],\n//   version: 3,\n// };\n```\n\nIn this example, `loader` will be called twice:\n\n1. `\"transformed.js\"`, the first source file pointer in the `minifiedTransformedMap`. We return the\n   associated sourcemap for it (its a transformed file, after all) so that sourcemap locations can\n   be traced through it into the source files it represents.\n2. `\"helloworld.js\"`, our original, unmodified source code. This file does not have a sourcemap, so\n   we return `null`.\n\nThe `remapped` sourcemap now points from `transformed.min.js` into locations in `helloworld.js`. If\nyou were to read the `mappings`, it says \"0th column of the first line output line points to the 1st\ncolumn of the 2nd line of the file `helloworld.js`\".\n\n### Multiple transformations of a file\n\nAs a convenience, if you have multiple single-source transformations of a file, you may pass an\narray of sourcemap files in the order of most-recent transformation sourcemap first. Note that this\nchanges the `importer` and `depth` of each call to our loader. So our above example could have been\nwritten as:\n\n```js\nconst remapped = remapping(\n  [minifiedTransformedMap, transformedMap],\n  () => null\n);\n\nconsole.log(remapped);\n// {\n//   file: 'transpiled.min.js',\n//   mappings: 'AAEE',\n//   sources: ['helloworld.js'],\n//   version: 3,\n// };\n```\n\n### Advanced control of the loading graph\n\n#### `source`\n\nThe `source` property can overridden to any value to change the location of the current load. Eg,\nfor an original source file, it allows us to change the location to the original source regardless\nof what the sourcemap source entry says. And for transformed files, it allows us to change the\nrelative resolving location for child sources of the loaded sourcemap.\n\n```js\nconst remapped = remapping(\n  minifiedTransformedMap,\n  (file, ctx) => {\n\n    if (file === 'transformed.js') {\n      // We pretend the transformed.js file actually exists in the 'src/' directory. When the nested\n      // source files are loaded, they will now be relative to `src/`.\n      ctx.source = 'src/transformed.js';\n      return transformedMap;\n    }\n\n    console.assert(file === 'src/helloworld.js');\n    // We could futher change the source of this original file, eg, to be inside a nested directory\n    // itself. This will be reflected in the remapped sourcemap.\n    ctx.source = 'src/nested/transformed.js';\n    return null;\n  }\n);\n\nconsole.log(remapped);\n// {\n//   …,\n//   sources: ['src/nested/helloworld.js'],\n// };\n```\n\n\n#### `content`\n\nThe `content` property can be overridden when we encounter an original source file. Eg, this allows\nyou to manually provide the source content of the original file regardless of whether the\n`sourcesContent` field is present in the parent sourcemap. It can also be set to `null` to remove\nthe source content.\n\n```js\nconst remapped = remapping(\n  minifiedTransformedMap,\n  (file, ctx) => {\n\n    if (file === 'transformed.js') {\n      // transformedMap does not include a `sourcesContent` field, so usually the remapped sourcemap\n      // would not include any `sourcesContent` values.\n      return transformedMap;\n    }\n\n    console.assert(file === 'helloworld.js');\n    // We can read the file to provide the source content.\n    ctx.content = fs.readFileSync(file, 'utf8');\n    return null;\n  }\n);\n\nconsole.log(remapped);\n// {\n//   …,\n//   sourcesContent: [\n//     'console.log(\"Hello world!\")',\n//   ],\n// };\n```\n\n### Options\n\n#### excludeContent\n\nBy default, `excludeContent` is `false`. Passing `{ excludeContent: true }` will exclude the\n`sourcesContent` field from the returned sourcemap. This is mainly useful when you want to reduce\nthe size out the sourcemap.\n\n#### decodedMappings\n\nBy default, `decodedMappings` is `false`. Passing `{ decodedMappings: true }` will leave the\n`mappings` field in a [decoded state](https://github.com/rich-harris/sourcemap-codec) instead of\nencoding into a VLQ string.\n/dist/types/source-map.d.ts\u0002Iimport type { GenMapping } from '@jridgewell/gen-mapping';\nimport type { DecodedSourceMap, EncodedSourceMap, Options } from './types';\n/**\n * A SourceMap v3 compatible sourcemap, which only includes fields that were\n * provided to it.\n */\nexport default class SourceMap {\n    file?: string | null;\n    mappings: EncodedSourceMap['mappings'] | DecodedSourceMap['mappings'];\n    sourceRoot?: string;\n    names: string[];\n    sources: (string | null)[];\n    sourcesContent?: (string | null)[];\n    version: 3;\n    constructor(map: GenMapping, options: Options);\n    toString(): string;\n}\n/dist/remapping.mjs.map\u0016{\"version\":3,\"file\":\"remapping.mjs\",\"sources\":[\"../../src/source-map-tree.ts\",\"../../src/build-source-map-tree.ts\",\"../../src/source-map.ts\",\"../../src/remapping.ts\"],\"sourcesContent\":[null,null,null,null],\"names\":[],\"mappings\":\";;;AAqBA,MAAM,kBAAkB,GAAG;AACzB,IAAA,MAAM,EAAE,IAAI;AACZ,IAAA,MAAM,EAAE,IAAI;AACZ,IAAA,IAAI,EAAE,IAAI;AACV,IAAA,IAAI,EAAE,IAAI;AACV,IAAA,OAAO,EAAE,IAAI;CACd,CAAC;AACF,MAAM,aAAa,GAAc,EAAE,CAAC;AAkBpC,SAAS,MAAM,CACb,GAAoB,EACpB,OAAkB,EAClB,MAAc,EACd,OAAsB,EAAA;IAEtB,OAAO;QACL,GAAG;QACH,OAAO;QACP,MAAM;QACN,OAAO;KACD,CAAC;AACX,CAAC;AAED;;;AAGG;AACa,SAAA,SAAS,CAAC,GAAa,EAAE,OAAkB,EAAA;IACzD,OAAO,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;AACxC,CAAC;AAED;;;AAGG;AACa,SAAA,cAAc,CAAC,MAAc,EAAE,OAAsB,EAAA;IACnE,OAAO,MAAM,CAAC,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AACtD,CAAC;AAED;;;AAGG;AACG,SAAU,aAAa,CAAC,IAAe,EAAA;AAC3C,IAAA,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;IACpD,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAC3C,IAAA,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC;AAC5B,IAAA,MAAM,YAAY,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;AAE1C,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC5C,QAAA,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QAEjC,IAAI,UAAU,GAAG,IAAI,CAAC;QACtB,IAAI,cAAc,GAAG,IAAI,CAAC;QAC1B,IAAI,gBAAgB,GAAG,IAAI,CAAC;AAE5B,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACxC,YAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC5B,YAAA,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YAC1B,IAAI,MAAM,GAAkC,kBAAkB,CAAC;;;AAI/D,YAAA,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;gBACxB,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AACvC,gBAAA,MAAM,GAAG,mBAAmB,CAC1B,MAAM,EACN,OAAO,CAAC,CAAC,CAAC,EACV,OAAO,CAAC,CAAC,CAAC,EACV,OAAO,CAAC,MAAM,KAAK,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAClD,CAAC;;;gBAIF,IAAI,MAAM,IAAI,IAAI;oBAAE,SAAS;AAC9B,aAAA;;;AAID,YAAA,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;YACvD,IAAI,IAAI,KAAK,cAAc,IAAI,MAAM,KAAK,gBAAgB,IAAI,MAAM,KAAK,UAAU,EAAE;gBACnF,SAAS;AACV,aAAA;YACD,cAAc,GAAG,IAAI,CAAC;YACtB,gBAAgB,GAAG,MAAM,CAAC;YAC1B,UAAU,GAAG,MAAM,CAAC;;AAGnB,YAAA,UAAkB,CAAC,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;YAChE,IAAI,OAAO,IAAI,IAAI;AAAE,gBAAA,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AAC7D,SAAA;AACF,KAAA;AAED,IAAA,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;AAGG;AACG,SAAU,mBAAmB,CACjC,MAAe,EACf,IAAY,EACZ,MAAc,EACd,IAAY,EAAA;AAEZ,IAAA,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE;AACf,QAAA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;AAC/E,KAAA;AAED,IAAA,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;;IAGvD,IAAI,OAAO,IAAI,IAAI;AAAE,QAAA,OAAO,IAAI,CAAC;;;AAGjC,IAAA,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;AAAE,QAAA,OAAO,kBAAkB,CAAC;IAEpD,OAAO,mBAAmB,CACxB,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAC1B,OAAO,CAAC,CAAC,CAAC,EACV,OAAO,CAAC,CAAC,CAAC,EACV,OAAO,CAAC,MAAM,KAAK,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAC3D,CAAC;AACJ;;AC1JA,SAAS,OAAO,CAAI,KAAc,EAAA;AAChC,IAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;AAAE,QAAA,OAAO,KAAK,CAAC;IACvC,OAAO,CAAC,KAAK,CAAC,CAAC;AACjB,CAAC;AAED;;;;;;;;;;AAUG;AACW,SAAU,kBAAkB,CACxC,KAAwC,EACxC,MAAuB,EAAA;IAEvB,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AAC5D,IAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAG,CAAC;AAExB,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACpC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;AAC9B,YAAA,MAAM,IAAI,KAAK,CACb,CAAA,mBAAA,EAAsB,CAAC,CAAuC,qCAAA,CAAA;AAC5D,gBAAA,uEAAuE,CAC1E,CAAC;AACH,SAAA;AACF,KAAA;AAED,IAAA,IAAI,IAAI,GAAG,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AACrC,IAAA,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;AACzC,QAAA,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;AACnC,KAAA;AACD,IAAA,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,KAAK,CACZ,GAAa,EACb,MAAuB,EACvB,QAAgB,EAChB,aAAqB,EAAA;AAErB,IAAA,MAAM,EAAE,eAAe,EAAE,cAAc,EAAE,GAAG,GAAG,CAAC;AAEhD,IAAA,MAAM,KAAK,GAAG,aAAa,GAAG,CAAC,CAAC;IAChC,MAAM,QAAQ,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,UAAyB,EAAE,CAAS,KAAa;;;;;AAKrF,QAAA,MAAM,GAAG,GAAkB;YACzB,QAAQ;YACR,KAAK;YACL,MAAM,EAAE,UAAU,IAAI,EAAE;AACxB,YAAA,OAAO,EAAE,SAAS;SACnB,CAAC;;;QAIF,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAE1C,QAAA,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,CAAC;;AAGhC,QAAA,IAAI,SAAS;AAAE,YAAA,OAAO,KAAK,CAAC,IAAI,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;;;;;QAMpF,MAAM,aAAa,GACjB,OAAO,KAAK,SAAS,GAAG,OAAO,GAAG,cAAc,GAAG,cAAc,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;AAC9E,QAAA,OAAO,cAAc,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;AAC/C,KAAC,CAAC,CAAC;AAEH,IAAA,OAAO,SAAS,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;AAClC;;ACjFA;;;AAGG;AACW,MAAO,SAAS,CAAA;IAS5B,WAAY,CAAA,GAAe,EAAE,OAAgB,EAAA;AAC3C,QAAA,MAAM,GAAG,GAAG,OAAO,CAAC,eAAe,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;QACxE,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;AAC3B,QAAA,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;AACrB,QAAA,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAiC,CAAC;AACtD,QAAA,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,KAA2B,CAAC;AAE7C,QAAA,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC;AAEjC,QAAA,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC,OAA+B,CAAC;AACnD,QAAA,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE;AAC3B,YAAA,IAAI,CAAC,cAAc,GAAG,GAAG,CAAC,cAA6C,CAAC;AACzE,SAAA;KACF;IAED,QAAQ,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;KAC7B;AACF;;ACpBD;;;;;;;;;;;;;;AAcG;AACqB,SAAA,SAAS,CAC/B,KAAwC,EACxC,MAAuB,EACvB,OAA2B,EAAA;IAE3B,MAAM,IAAI,GACR,OAAO,OAAO,KAAK,QAAQ,GAAG,OAAO,GAAG,EAAE,cAAc,EAAE,CAAC,CAAC,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC;IAChG,MAAM,IAAI,GAAG,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC/C,OAAO,IAAI,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;AAClD;;;;\"}/dist/types/types.d.ts\u0002?import type { SourceMapInput } from '@jridgewell/trace-mapping';\nexport type { SourceMapSegment, DecodedSourceMap, EncodedSourceMap, } from '@jridgewell/trace-mapping';\nexport type { SourceMapInput };\nexport declare type LoaderContext = {\n    readonly importer: string;\n    readonly depth: number;\n    source: string;\n    content: string | null | undefined;\n};\nexport declare type SourceMapLoader = (file: string, ctx: LoaderContext) => SourceMapInput | null | undefined | void;\nexport declare type Options = {\n    excludeContent?: boolean;\n    decodedMappings?: boolean;\n};\n /dist/types/source-map-tree.d.ts\u0006import { GenMapping } from '@jridgewell/gen-mapping';\nimport type { TraceMap } from '@jridgewell/trace-mapping';\nexport declare type SourceMapSegmentObject = {\n    column: number;\n    line: number;\n    name: string;\n    source: string;\n    content: string | null;\n} | {\n    column: null;\n    line: null;\n    name: null;\n    source: null;\n    content: null;\n};\nexport declare type OriginalSource = {\n    map: TraceMap;\n    sources: Sources[];\n    source: string;\n    content: string | null;\n};\nexport declare type MapSource = {\n    map: TraceMap;\n    sources: Sources[];\n    source: string;\n    content: string | null;\n};\nexport declare type Sources = OriginalSource | MapSource;\n/**\n * MapSource represents a single sourcemap, with the ability to trace mappings into its child nodes\n * (which may themselves be SourceMapTrees).\n */\nexport declare function MapSource(map: TraceMap, sources: Sources[]): MapSource;\n/**\n * A \"leaf\" node in the sourcemap tree, representing an original, unmodified source file. Recursive\n * segment tracing ends at the `OriginalSource`.\n */\nexport declare function OriginalSource(source: string, content: string | null): OriginalSource;\n/**\n * traceMappings is only called on the root level SourceMapTree, and begins the process of\n * resolving each mapping in terms of the original source files.\n */\nexport declare function traceMappings(tree: MapSource): GenMapping;\n/**\n * originalPositionFor is only called on children SourceMapTrees. It recurses down into its own\n * child SourceMapTrees, until we find the original source map.\n */\nexport declare function originalPositionFor(source: Sources, line: number, column: number, name: string): SourceMapSegmentObject | null;\n/dist/remapping.umd.js%(function (global, factory) {\n    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('@jridgewell/trace-mapping'), require('@jridgewell/gen-mapping')) :\n    typeof define === 'function' && define.amd ? define(['@jridgewell/trace-mapping', '@jridgewell/gen-mapping'], factory) :\n    (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.remapping = factory(global.traceMapping, global.genMapping));\n})(this, (function (traceMapping, genMapping) { 'use strict';\n\n    const SOURCELESS_MAPPING = {\n        source: null,\n        column: null,\n        line: null,\n        name: null,\n        content: null,\n    };\n    const EMPTY_SOURCES = [];\n    function Source(map, sources, source, content) {\n        return {\n            map,\n            sources,\n            source,\n            content,\n        };\n    }\n    /**\n     * MapSource represents a single sourcemap, with the ability to trace mappings into its child nodes\n     * (which may themselves be SourceMapTrees).\n     */\n    function MapSource(map, sources) {\n        return Source(map, sources, '', null);\n    }\n    /**\n     * A \"leaf\" node in the sourcemap tree, representing an original, unmodified source file. Recursive\n     * segment tracing ends at the `OriginalSource`.\n     */\n    function OriginalSource(source, content) {\n        return Source(null, EMPTY_SOURCES, source, content);\n    }\n    /**\n     * traceMappings is only called on the root level SourceMapTree, and begins the process of\n     * resolving each mapping in terms of the original source files.\n     */\n    function traceMappings(tree) {\n        const gen = new genMapping.GenMapping({ file: tree.map.file });\n        const { sources: rootSources, map } = tree;\n        const rootNames = map.names;\n        const rootMappings = traceMapping.decodedMappings(map);\n        for (let i = 0; i < rootMappings.length; i++) {\n            const segments = rootMappings[i];\n            let lastSource = null;\n            let lastSourceLine = null;\n            let lastSourceColumn = null;\n            for (let j = 0; j < segments.length; j++) {\n                const segment = segments[j];\n                const genCol = segment[0];\n                let traced = SOURCELESS_MAPPING;\n                // 1-length segments only move the current generated column, there's no source information\n                // to gather from it.\n                if (segment.length !== 1) {\n                    const source = rootSources[segment[1]];\n                    traced = originalPositionFor(source, segment[2], segment[3], segment.length === 5 ? rootNames[segment[4]] : '');\n                    // If the trace is invalid, then the trace ran into a sourcemap that doesn't contain a\n                    // respective segment into an original source.\n                    if (traced == null)\n                        continue;\n                }\n                // So we traced a segment down into its original source file. Now push a\n                // new segment pointing to this location.\n                const { column, line, name, content, source } = traced;\n                if (line === lastSourceLine && column === lastSourceColumn && source === lastSource) {\n                    continue;\n                }\n                lastSourceLine = line;\n                lastSourceColumn = column;\n                lastSource = source;\n                // Sigh, TypeScript can't figure out source/line/column are either all null, or all non-null...\n                genMapping.addSegment(gen, i, genCol, source, line, column, name);\n                if (content != null)\n                    genMapping.setSourceContent(gen, source, content);\n            }\n        }\n        return gen;\n    }\n    /**\n     * originalPositionFor is only called on children SourceMapTrees. It recurses down into its own\n     * child SourceMapTrees, until we find the original source map.\n     */\n    function originalPositionFor(source, line, column, name) {\n        if (!source.map) {\n            return { column, line, name, source: source.source, content: source.content };\n        }\n        const segment = traceMapping.traceSegment(source.map, line, column);\n        // If we couldn't find a segment, then this doesn't exist in the sourcemap.\n        if (segment == null)\n            return null;\n        // 1-length segments only move the current generated column, there's no source information\n        // to gather from it.\n        if (segment.length === 1)\n            return SOURCELESS_MAPPING;\n        return originalPositionFor(source.sources[segment[1]], segment[2], segment[3], segment.length === 5 ? source.map.names[segment[4]] : name);\n    }\n\n    function asArray(value) {\n        if (Array.isArray(value))\n            return value;\n        return [value];\n    }\n    /**\n     * Recursively builds a tree structure out of sourcemap files, with each node\n     * being either an `OriginalSource` \"leaf\" or a `SourceMapTree` composed of\n     * `OriginalSource`s and `SourceMapTree`s.\n     *\n     * Every sourcemap is composed of a collection of source files and mappings\n     * into locations of those source files. When we generate a `SourceMapTree` for\n     * the sourcemap, we attempt to load each source file's own sourcemap. If it\n     * does not have an associated sourcemap, it is considered an original,\n     * unmodified source file.\n     */\n    function buildSourceMapTree(input, loader) {\n        const maps = asArray(input).map((m) => new traceMapping.TraceMap(m, ''));\n        const map = maps.pop();\n        for (let i = 0; i < maps.length; i++) {\n            if (maps[i].sources.length > 1) {\n                throw new Error(`Transformation map ${i} must have exactly one source file.\\n` +\n                    'Did you specify these with the most recent transformation maps first?');\n            }\n        }\n        let tree = build(map, loader, '', 0);\n        for (let i = maps.length - 1; i >= 0; i--) {\n            tree = MapSource(maps[i], [tree]);\n        }\n        return tree;\n    }\n    function build(map, loader, importer, importerDepth) {\n        const { resolvedSources, sourcesContent } = map;\n        const depth = importerDepth + 1;\n        const children = resolvedSources.map((sourceFile, i) => {\n            // The loading context gives the loader more information about why this file is being loaded\n            // (eg, from which importer). It also allows the loader to override the location of the loaded\n            // sourcemap/original source, or to override the content in the sourcesContent field if it's\n            // an unmodified source file.\n            const ctx = {\n                importer,\n                depth,\n                source: sourceFile || '',\n                content: undefined,\n            };\n            // Use the provided loader callback to retrieve the file's sourcemap.\n            // TODO: We should eventually support async loading of sourcemap files.\n            const sourceMap = loader(ctx.source, ctx);\n            const { source, content } = ctx;\n            // If there is a sourcemap, then we need to recurse into it to load its source files.\n            if (sourceMap)\n                return build(new traceMapping.TraceMap(sourceMap, source), loader, source, depth);\n            // Else, it's an an unmodified source file.\n            // The contents of this unmodified source file can be overridden via the loader context,\n            // allowing it to be explicitly null or a string. If it remains undefined, we fall back to\n            // the importing sourcemap's `sourcesContent` field.\n            const sourceContent = content !== undefined ? content : sourcesContent ? sourcesContent[i] : null;\n            return OriginalSource(source, sourceContent);\n        });\n        return MapSource(map, children);\n    }\n\n    /**\n     * A SourceMap v3 compatible sourcemap, which only includes fields that were\n     * provided to it.\n     */\n    class SourceMap {\n        constructor(map, options) {\n            const out = options.decodedMappings ? genMapping.decodedMap(map) : genMapping.encodedMap(map);\n            this.version = out.version; // SourceMap spec says this should be first.\n            this.file = out.file;\n            this.mappings = out.mappings;\n            this.names = out.names;\n            this.sourceRoot = out.sourceRoot;\n            this.sources = out.sources;\n            if (!options.excludeContent) {\n                this.sourcesContent = out.sourcesContent;\n            }\n        }\n        toString() {\n            return JSON.stringify(this);\n        }\n    }\n\n    /**\n     * Traces through all the mappings in the root sourcemap, through the sources\n     * (and their sourcemaps), all the way back to the original source location.\n     *\n     * `loader` will be called every time we encounter a source file. If it returns\n     * a sourcemap, we will recurse into that sourcemap to continue the trace. If\n     * it returns a falsey value, that source file is treated as an original,\n     * unmodified source file.\n     *\n     * Pass `excludeContent` to exclude any self-containing source file content\n     * from the output sourcemap.\n     *\n     * Pass `decodedMappings` to receive a SourceMap with decoded (instead of\n     * VLQ encoded) mappings.\n     */\n    function remapping(input, loader, options) {\n        const opts = typeof options === 'object' ? options : { excludeContent: !!options, decodedMappings: false };\n        const tree = buildSourceMapTree(input, loader);\n        return new SourceMap(traceMappings(tree), opts);\n    }\n\n    return remapping;\n\n}));\n//# sourceMappingURL=remapping.umd.js.map\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QGFwb2xsby91dGlscy53aXRocmVxdWlyZWRAMS4wLjE=",
    "content": "/src/index.tsKexport type WithRequired<T, K extends keyof T> = T & Required<Pick<T, K>>;\n/package.json\u0001{\n  \"name\": \"@apollo/utils.withrequired\",\n  \"version\": \"1.0.1\",\n  \"description\": \"TypeScript utility type WithRequired\",\n  \"main\": \"\",\n  \"types\": \"dist/index.d.ts\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/apollographql/apollo-utils.git\",\n    \"directory\": \"packages/withRequired/\"\n  },\n  \"keywords\": [\n    \"apollo\",\n    \"graphql\",\n    \"typescript\",\n    \"node\"\n  ],\n  \"author\": \"Apollo <packages@apollographql.com>\",\n  \"license\": \"MIT\"\n}\n/dist/index.d.ts.map{\"version\":3,\"file\":\"index.d.ts\",\"sourceRoot\":\"\",\"sources\":[\"../src/index.ts\"],\"names\":[],\"mappings\":\"AAAA,oBAAY,YAAY,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC\"}/dist/index.jsn\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=index.js.map/src/__tests__/index.test.ts\u0002import type { WithRequired } from \"..\";\n\n// This \"test suite\" actually does all its work at compile time.\nfunction isWRFoo(_: WRFoo) {}\n\ninterface Foo {\n  alwaysOptional?: number;\n  startsOutOptional?: number;\n  alsoStartsOutOptional?: string;\n  alwaysRequired: string;\n}\n\ntype WRFoo = WithRequired<Foo, \"startsOutOptional\" | \"alsoStartsOutOptional\">;\n\nit(\"can plug in all now-required fields\", () => {\n  isWRFoo({\n    startsOutOptional: 5,\n    alsoStartsOutOptional: \"asdf\",\n    alwaysRequired: \"bla\",\n  });\n});\n\nit(\"now-required fields are required\", () => {\n  // @ts-expect-error\n  isWRFoo({\n    startsOutOptional: 5,\n    alwaysRequired: \"bla\",\n  });\n});\n/LICENSE\u0004]MIT License\n\nCopyright (c) 2022 Apollo Graph, Inc. (Formerly Meteor Development Group, Inc.)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n/dist/index.d.tsvexport declare type WithRequired<T, K extends keyof T> = T & Required<Pick<T, K>>;\n//# sourceMappingURL=index.d.ts.map/src/__tests__/tsconfig.jsonq{\n  \"extends\": \"../../../../tsconfig.test.base\",\n  \"include\": [\"**/*\"],\n  \"references\": [{ \"path\": \"../../\" }]\n}\n/README.md\u0002C# WithRequired type\n\nThis package defines the TypeScript utility type `WithRequired`. It transforms a type that has one or more optional fields into a type where those fields are required.\n\nFor example:\n\n```\nimport { WithRequired } from '@apollo/utils.withrequired';\n\ninterface HasSomeOptionals {\n    foo: number;\n    bar?: string;\n    baz?: boolean;\n    quux?: string;\n}\n\ntype MoreRequired = WithRequired<HasSomeOptions, 'bar' | 'baz'>;\n```\n\nThe `MoreRequired` type is like `HasSomeOptionals`, but `bar` and `baz` are now required rather than optional. `quux` remains optional.\n/dist/index.js.mapf{\"version\":3,\"file\":\"index.js\",\"sourceRoot\":\"\",\"sources\":[\"../src/index.ts\"],\"names\":[],\"mappings\":\"\"}"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QGFwb2xsby91dGlscy5jcmVhdGVoYXNoQDEuMS4w",
    "content": "/LICENSE\u0004]MIT License\n\nCopyright (c) 2022 Apollo Graph, Inc. (Formerly Meteor Development Group, Inc.)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n/dist/index.d.tslexport declare function createHash(kind: string): import(\"crypto\").Hash;\n//# sourceMappingURL=index.d.ts.map/dist/index.d.ts.mapī{\"version\":3,\"file\":\"index.d.ts\",\"sourceRoot\":\"\",\"sources\":[\"../src/index.ts\"],\"names\":[],\"mappings\":\"AAEA,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,QAAQ,EAAE,IAAI,CAO9D\"}/src/__tests__/tsconfig.jsonq{\n  \"extends\": \"../../../../tsconfig.test.base\",\n  \"include\": [\"**/*\"],\n  \"references\": [{ \"path\": \"../../\" }]\n}\n/dist/index.js.map\u00019{\"version\":3,\"file\":\"index.js\",\"sourceRoot\":\"\",\"sources\":[\"../src/index.ts\"],\"names\":[],\"mappings\":\";;;AAAA,+DAAsD;AAEtD,SAAgB,UAAU,CAAC,IAAY;IACrC,IAAI,6BAAU,EAAE;QAGd,OAAO,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;KAClD;IACD,OAAO,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;AACjC,CAAC;AAPD,gCAOC\"}/src/index.ts\u0001ximport { isNodeLike } from \"@apollo/utils.isnodelike\";\n\nexport function createHash(kind: string): import(\"crypto\").Hash {\n  if (isNodeLike) {\n    // Use module.require instead of just require to avoid bundling whatever\n    // crypto polyfills a non-Node bundler might fall back to.\n    return module.require(\"crypto\").createHash(kind);\n  }\n  return require(\"sha.js\")(kind);\n}\n!/src/__tests__/createHash.test.ts\u0001\u0001import { createHash } from \"..\";\n\ndescribe(\"createHash\", () => {\n  it(\"creates a hash\", () => {\n    expect(createHash(\"sha256\").update(\"foo\").digest(\"hex\")).toEqual(\n      \"2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae\",\n    );\n  });\n});\n/package.json\u0002{\n  \"name\": \"@apollo/utils.createhash\",\n  \"version\": \"1.1.0\",\n  \"description\": \"Node-agnostic hashing utility\",\n  \"main\": \"dist/index.js\",\n  \"types\": \"dist/index.d.ts\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/apollographql/apollo-utils.git\",\n    \"directory\": \"createHash/\"\n  },\n  \"keywords\": [\n    \"apollo\",\n    \"graphql\",\n    \"typescript\",\n    \"node\"\n  ],\n  \"author\": \"Apollo <packages@apollographql.com>\",\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"node\": \">=12.13.0\"\n  },\n  \"publishConfig\": {\n    \"access\": \"public\"\n  },\n  \"dependencies\": {\n    \"@apollo/utils.isnodelike\": \"^1.1.0\",\n    \"sha.js\": \"^2.4.11\"\n  }\n}\n/dist/index.js\u0001\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createHash = void 0;\nconst utils_isnodelike_1 = require(\"@apollo/utils.isnodelike\");\nfunction createHash(kind) {\n    if (utils_isnodelike_1.isNodeLike) {\n        return module.require(\"crypto\").createHash(kind);\n    }\n    return require(\"sha.js\")(kind);\n}\nexports.createHash = createHash;\n//# sourceMappingURL=index.js.map/src/__tests__/exports.test.tsĺimport * as allExports from \"..\";\n\nit(\"exports hashing functions\", () => {\n  expect(Object.keys(allExports).length).toBe(1);\n  expect(typeof allExports.createHash).toBe(\"function\");\n});\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QGFwb2xsby91dGlscy5kcm9wdW51c2VkZGVmaW5pdGlvbnNAMS4xLjA=",
    "content": "/package.json\u0002{\n  \"name\": \"@apollo/utils.dropunuseddefinitions\",\n  \"version\": \"1.1.0\",\n  \"description\": \"Drop unused definitions from a GraphQL document\",\n  \"main\": \"dist/index.js\",\n  \"types\": \"dist/index.d.ts\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/apollographql/apollo-utils.git\",\n    \"directory\": \"dropUnusedDefinitions/\"\n  },\n  \"keywords\": [\n    \"apollo\",\n    \"graphql\",\n    \"typescript\",\n    \"node\"\n  ],\n  \"author\": \"Apollo <packages@apollographql.com>\",\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"node\": \">=12.13.0\"\n  },\n  \"publishConfig\": {\n    \"access\": \"public\"\n  },\n  \"peerDependencies\": {\n    \"graphql\": \"14.x || 15.x || 16.x\"\n  }\n}\n/dist/index.d.ts.map{\"version\":3,\"file\":\"index.d.ts\",\"sourceRoot\":\"\",\"sources\":[\"../src/index.ts\"],\"names\":[],\"mappings\":\"AAAA,OAAO,EAAE,YAAY,EAAsB,MAAM,SAAS,CAAC;AAO3D,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,YAAY,EACjB,aAAa,EAAE,MAAM,GACpB,YAAY,CAQd\"}/dist/index.js\u0001\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.dropUnusedDefinitions = void 0;\nconst graphql_1 = require(\"graphql\");\nfunction dropUnusedDefinitions(ast, operationName) {\n    const separated = (0, graphql_1.separateOperations)(ast)[operationName];\n    if (!separated) {\n        return ast;\n    }\n    return separated;\n}\nexports.dropUnusedDefinitions = dropUnusedDefinitions;\n//# sourceMappingURL=index.js.map/LICENSE\u0004]MIT License\n\nCopyright (c) 2022 Apollo Graph, Inc. (Formerly Meteor Development Group, Inc.)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n/src/index.ts\u0003\u001bimport { DocumentNode, separateOperations } from \"graphql\";\n\n// A GraphQL query may contain multiple named operations, with the operation to\n// use specified separately by the client. This transformation drops unused\n// operations from the query, as well as any fragment definitions that are not\n// referenced.  (In general we recommend that unused definitions are dropped on\n// the client before sending to the server to save bandwidth and parsing time.)\nexport function dropUnusedDefinitions(\n  ast: DocumentNode,\n  operationName: string,\n): DocumentNode {\n  const separated = separateOperations(ast)[operationName];\n  if (!separated) {\n    // If the given operationName isn't found, just make this whole transform a\n    // no-op instead of crashing.\n    return ast;\n  }\n  return separated;\n}\n/dist/index.js.map\u0001@{\"version\":3,\"file\":\"index.js\",\"sourceRoot\":\"\",\"sources\":[\"../src/index.ts\"],\"names\":[],\"mappings\":\";;;AAAA,qCAA2D;AAO3D,SAAgB,qBAAqB,CACnC,GAAiB,EACjB,aAAqB;IAErB,MAAM,SAAS,GAAG,IAAA,4BAAkB,EAAC,GAAG,CAAC,CAAC,aAAa,CAAC,CAAC;IACzD,IAAI,CAAC,SAAS,EAAE;QAGd,OAAO,GAAG,CAAC;KACZ;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAXD,sDAWC\"},/src/__tests__/dropUnusedDefinitions.test.ts\u0007import { print, parse } from \"graphql\";\nimport { dropUnusedDefinitions } from \"..\";\n\ndescribe(\"dropUnusedDefinitions\", () => {\n  it(\"anonymous operation\", () => {\n    const operation = parse(`#graphql\n      {abc}\n    `);\n    expect(print(dropUnusedDefinitions(operation, \"\"))).toMatchInlineSnapshot(`\n      \"{\n        abc\n      }\"\n    `);\n  });\n\n  it(\"named operation\", () => {\n    const operation = parse(`#graphql\n      query MyQuery {abc}\n    `);\n    expect(print(dropUnusedDefinitions(operation, \"MyQuery\")))\n      .toMatchInlineSnapshot(`\n      \"query MyQuery {\n        abc\n      }\"\n    `);\n  });\n\n  it(\"multiple operations\", () => {\n    const operation = parse(`#graphql\n      query Keep { abc }\n      query Drop { def }\n    `);\n    expect(print(dropUnusedDefinitions(operation, \"Keep\")))\n      .toMatchInlineSnapshot(`\n      \"query Keep {\n        abc\n      }\"\n    `);\n  });\n\n  it(\"includes only used fragments\", () => {\n    const operation = parse(`#graphql\n      query Drop { ...DroppedFragment }\n      fragment DroppedFragment on Query { abc }\n      query Keep { ...KeptFragment }\n      fragment KeptFragment on Query { def }\n    `);\n    expect(print(dropUnusedDefinitions(operation, \"Keep\")))\n      .toMatchInlineSnapshot(`\n      \"query Keep {\n        ...KeptFragment\n      }\n\n      fragment KeptFragment on Query {\n        def\n      }\"\n    `);\n  });\n\n  it(\"preserves entire document when operation isn't found\", () => {\n    const operation = parse(`#graphql\n      query Keep { ...KeptFragment }\n      fragment KeptFragment on Query { abc }\n      query AlsoKeep { ...AlsoKeptFragment }\n      fragment AlsoKeptFragment on Query { def }\n    `);\n    expect(print(dropUnusedDefinitions(operation, \"Unknown\")))\n      .toMatchInlineSnapshot(`\n      \"query Keep {\n        ...KeptFragment\n      }\n\n      fragment KeptFragment on Query {\n        abc\n      }\n\n      query AlsoKeep {\n        ...AlsoKeptFragment\n      }\n\n      fragment AlsoKeptFragment on Query {\n        def\n      }\"\n    `);\n  });\n});\n/src/__tests__/tsconfig.jsonq{\n  \"extends\": \"../../../../tsconfig.test.base\",\n  \"include\": [\"**/*\"],\n  \"references\": [{ \"path\": \"../../\" }]\n}\n/dist/index.d.tsĲimport { DocumentNode } from \"graphql\";\nexport declare function dropUnusedDefinitions(ast: DocumentNode, operationName: string): DocumentNode;\n//# sourceMappingURL=index.d.ts.map"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QGFwb2xsby91dGlscy5mZXRjaGVyQDEuMS4x",
    "content": "/README.md\u0005# Fetcher interface\n\nThis package defines TypeScript typings for a subset of the [web `fetch` API](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API).\n\nThe goal is for software that wants to be able to make HTTP requests in a configurable fashion to be able to declare an option of this type; users can pass in any valid `fetch` implementation such as `node-fetch`, `make-fetch-happen`, or `undici`.\n\nThe actual `fetch` API is very flexible. You can specify requests either as JSON-style objects or as objects of the `Request` and `Headers` classes. However, some `fetch` implementations distinguish between these cases by using (for example) `instanceof Headers`, where `Headers` is the particular class defined by that implementation. So if you want to write portable code that should work with any `fetch` implementation, you need to use JSON-style objects rather than a particular implementation's classes. (For example, a `Headers` object created with `node-fetch` v2 will not be properly recognized by `make-fetch-happen` v10.)\n\nSpecifically, the `Fetcher` interface only declares options that are currently required by the software that uses it, such as Apollo Server and Apollo Gateway. If more options are required (and they are implemented with the same types in all `fetch` implementations), we can add them as needed.\n\nThis package is validated to be compatible with the typings of `node-fetch` v2, `make-fetch-happen` v10, and `undici` v5.\n/package.json\u0001{\n  \"name\": \"@apollo/utils.fetcher\",\n  \"version\": \"1.1.1\",\n  \"description\": \"Minimal web-style fetch TypeScript typings\",\n  \"main\": \"\",\n  \"types\": \"dist/index.d.ts\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/apollographql/apollo-utils.git\",\n    \"directory\": \"packages/fetcher/\"\n  },\n  \"keywords\": [\n    \"apollo\",\n    \"graphql\",\n    \"typescript\",\n    \"node\"\n  ],\n  \"author\": \"Apollo <packages@apollographql.com>\",\n  \"license\": \"MIT\"\n}\n/dist/index.d.ts\u0004Z/// <reference types=\"node\" />\nexport interface FetcherRequestInit {\n    method?: string;\n    headers?: Record<string, string>;\n    body?: string | Buffer;\n    signal?: any;\n}\nexport interface FetcherResponse {\n    readonly bodyUsed: boolean;\n    readonly url: string;\n    readonly redirected: boolean;\n    readonly status: number;\n    readonly ok: boolean;\n    readonly statusText: string;\n    readonly headers: FetcherHeaders;\n    arrayBuffer(): Promise<ArrayBuffer>;\n    text(): Promise<string>;\n    json(): Promise<any>;\n    clone(): FetcherResponse;\n}\nexport interface FetcherHeaders extends Iterable<[string, string]> {\n    append(name: string, value: string): void;\n    delete(name: string): void;\n    get(name: string): string | null;\n    has(name: string): boolean;\n    set(name: string, value: string): void;\n    entries(): Iterator<[string, string]>;\n    keys(): Iterator<string>;\n    values(): Iterator<string>;\n    [Symbol.iterator](): Iterator<[string, string]>;\n}\nexport declare type Fetcher = (url: string, init?: FetcherRequestInit) => Promise<FetcherResponse>;\n//# sourceMappingURL=index.d.ts.map/LICENSE\u0004]MIT License\n\nCopyright (c) 2022 Apollo Graph, Inc. (Formerly Meteor Development Group, Inc.)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n/dist/index.js.mapf{\"version\":3,\"file\":\"index.js\",\"sourceRoot\":\"\",\"sources\":[\"../src/index.ts\"],\"names\":[],\"mappings\":\"\"}/dist/index.jsn\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=index.js.map/dist/index.d.ts.map\u0005q{\"version\":3,\"file\":\"index.d.ts\",\"sourceRoot\":\"\",\"sources\":[\"../src/index.ts\"],\"names\":[],\"mappings\":\";AAAA,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAIhB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAkCvB,MAAM,CAAC,EAAE,GAAG,CAAC;CAId;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;IAEjC,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC,CAAC;IACpC,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IACxB,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC;IAErB,KAAK,IAAI,eAAe,CAAC;CAC1B;AAED,MAAM,WAAW,cAAe,SAAQ,QAAQ,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1C,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACjC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAC3B,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAEvC,OAAO,IAAI,QAAQ,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACtC,IAAI,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;IACzB,MAAM,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC3B,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACjD;AAED,oBAAY,OAAO,GAAG,CACpB,GAAG,EAAE,MAAM,EAGX,IAAI,CAAC,EAAE,kBAAkB,KACtB,OAAO,CAAC,eAAe,CAAC,CAAC\"}/src/__tests__/tsconfig.jsonq{\n  \"extends\": \"../../../../tsconfig.test.base\",\n  \"include\": [\"**/*\"],\n  \"references\": [{ \"path\": \"../../\" }]\n}\n/src/__tests__/index.test.ts\u0001import type { Fetcher } from \"..\";\nimport nodeFetch from \"node-fetch\";\nimport makeFetchHappen from \"make-fetch-happen\";\nimport { fetch as undiciFetch } from \"undici\";\n\n// This \"test suite\" actually does all its work at compile time.\nfunction isAFetcher(_fetcher: Fetcher) {}\n\nit(\"node-fetch is a Fetcher\", () => {\n  isAFetcher(nodeFetch);\n});\n\nit(\"make-fetch-happen is a Fetcher\", () => {\n  isAFetcher(makeFetchHappen);\n});\n\nit(\"undici is a Fetcher\", () => {\n  isAFetcher(undiciFetch);\n});\n/src/index.ts\rexport interface FetcherRequestInit {\n  method?: string;\n  // We explicitly do not allow you to pass in a Headers (or FetcherHeaders)\n  // object here, because not all implementations recognize \"foreign\" Headers\n  // objects.\n  headers?: Record<string, string>;\n  body?: string | Buffer;\n\n  // A provided `signal` should be an object created by a class named\n  // `AbortSignal` (the constructor name is checked by some implementations like\n  // node-fetch and make-fetch-happen!) which follows the DOM AbortSignal API.\n  // Notably, it should have `aborted: boolean` and methods `addEventListener`\n  // and `removeEventListener`. We do not provide a precise interface for it\n  // because we have found that runtime implementations are more consistent than\n  // TypeScript definitions; for example, the methods such as addEventListener\n  // end up being defined in terms of complex DOM types which vary by\n  // implementation.\n  //\n  // Note that a relatively recent addition to the spec\n  // (https://github.com/whatwg/dom/pull/1027) is the concept of an abort\n  // reason. None of the polyfill Node AbortController/AbortSignal\n  // implementations seems to support this yet (though Node's built-in\n  // implementation does as of v18). It is possible that some Fetch\n  // implementations might rely on the existence of this new functionality, say\n  // by calling signal.throwIfAborted(). If so, you would need to use an\n  // AbortSignal that supports this (such as the Node v18 implementation). As of\n  // now, it does not appear that node-fetch, make-fetch-happen, or undici rely\n  // on throwIfAborted, although undici does look at signal.reason if it is\n  // provided.\n  //\n  // The main motivation for providing this as `any` (rather than, say, an\n  // interface where the functions take `any` arguments to avoid linking in DOM)\n  // is because if we leave out the newer `reason`/`throwIfAborted` fields, then\n  // implementations like undici that use the Node v18 definitions won't\n  // typecheck, but if we include those fields, then `AbortSignal`s from\n  // `AbortController` polyfill libraries such as `node-abort-controller` won't\n  // typecheck because they don't provide those fields. While in a sense that's\n  // correct, we don't want to provide an interface for which there are no\n  // existing implementations for Node v16 or older! (We may later choose to\n  // publish our own polyfill and make this type more exact.)\n  signal?: any;\n\n  // We explicitly do not support non-portable options like `node-fetch`'s\n  // `agent`.\n}\n\nexport interface FetcherResponse {\n  readonly bodyUsed: boolean;\n  readonly url: string;\n  readonly redirected: boolean;\n  readonly status: number;\n  readonly ok: boolean;\n  readonly statusText: string;\n  readonly headers: FetcherHeaders;\n\n  arrayBuffer(): Promise<ArrayBuffer>;\n  text(): Promise<string>;\n  json(): Promise<any>;\n\n  clone(): FetcherResponse;\n}\n\nexport interface FetcherHeaders extends Iterable<[string, string]> {\n  append(name: string, value: string): void;\n  delete(name: string): void;\n  get(name: string): string | null;\n  has(name: string): boolean;\n  set(name: string, value: string): void;\n\n  entries(): Iterator<[string, string]>;\n  keys(): Iterator<string>;\n  values(): Iterator<string>;\n  [Symbol.iterator](): Iterator<[string, string]>;\n}\n\nexport type Fetcher = (\n  url: string,\n  // We explicitly do not allow you to pass in a Request object here, because\n  // not all implementations recognize \"foreign\" Request objects.\n  init?: FetcherRequestInit,\n) => Promise<FetcherResponse>;\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QGFwb2xsby91dGlscy5mZXRjaGVyQDIuMC4w",
    "content": "/src/index.ts\rexport interface FetcherRequestInit {\n  method?: string;\n  // We explicitly do not allow you to pass in a Headers (or FetcherHeaders)\n  // object here, because not all implementations recognize \"foreign\" Headers\n  // objects.\n  headers?: Record<string, string>;\n  body?: string | Buffer;\n\n  // A provided `signal` should be an object created by a class named\n  // `AbortSignal` (the constructor name is checked by some implementations like\n  // node-fetch and make-fetch-happen!) which follows the DOM AbortSignal API.\n  // Notably, it should have `aborted: boolean` and methods `addEventListener`\n  // and `removeEventListener`. We do not provide a precise interface for it\n  // because we have found that runtime implementations are more consistent than\n  // TypeScript definitions; for example, the methods such as addEventListener\n  // end up being defined in terms of complex DOM types which vary by\n  // implementation.\n  //\n  // Note that a relatively recent addition to the spec\n  // (https://github.com/whatwg/dom/pull/1027) is the concept of an abort\n  // reason. None of the polyfill Node AbortController/AbortSignal\n  // implementations seems to support this yet (though Node's built-in\n  // implementation does as of v18). It is possible that some Fetch\n  // implementations might rely on the existence of this new functionality, say\n  // by calling signal.throwIfAborted(). If so, you would need to use an\n  // AbortSignal that supports this (such as the Node v18 implementation). As of\n  // now, it does not appear that node-fetch, make-fetch-happen, or undici rely\n  // on throwIfAborted, although undici does look at signal.reason if it is\n  // provided.\n  //\n  // The main motivation for providing this as `any` (rather than, say, an\n  // interface where the functions take `any` arguments to avoid linking in DOM)\n  // is because if we leave out the newer `reason`/`throwIfAborted` fields, then\n  // implementations like undici that use the Node v18 definitions won't\n  // typecheck, but if we include those fields, then `AbortSignal`s from\n  // `AbortController` polyfill libraries such as `node-abort-controller` won't\n  // typecheck because they don't provide those fields. While in a sense that's\n  // correct, we don't want to provide an interface for which there are no\n  // existing implementations for Node v16 or older! (We may later choose to\n  // publish our own polyfill and make this type more exact.)\n  signal?: any;\n\n  // We explicitly do not support non-portable options like `node-fetch`'s\n  // `agent`.\n}\n\nexport interface FetcherResponse {\n  readonly bodyUsed: boolean;\n  readonly url: string;\n  readonly redirected: boolean;\n  readonly status: number;\n  readonly ok: boolean;\n  readonly statusText: string;\n  readonly headers: FetcherHeaders;\n\n  arrayBuffer(): Promise<ArrayBuffer>;\n  text(): Promise<string>;\n  json(): Promise<any>;\n\n  clone(): FetcherResponse;\n}\n\nexport interface FetcherHeaders extends Iterable<[string, string]> {\n  append(name: string, value: string): void;\n  delete(name: string): void;\n  get(name: string): string | null;\n  has(name: string): boolean;\n  set(name: string, value: string): void;\n\n  entries(): Iterator<[string, string]>;\n  keys(): Iterator<string>;\n  values(): Iterator<string>;\n  [Symbol.iterator](): Iterator<[string, string]>;\n}\n\nexport type Fetcher = (\n  url: string,\n  // We explicitly do not allow you to pass in a Request object here, because\n  // not all implementations recognize \"foreign\" Request objects.\n  init?: FetcherRequestInit,\n) => Promise<FetcherResponse>;\n/LICENSE\u0004]MIT License\n\nCopyright (c) 2022 Apollo Graph, Inc. (Formerly Meteor Development Group, Inc.)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n/README.md\u0005# Fetcher interface\n\nThis package defines TypeScript typings for a subset of the [web `fetch` API](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API).\n\nThe goal is for software that wants to be able to make HTTP requests in a configurable fashion to be able to declare an option of this type; users can pass in any valid `fetch` implementation such as `node-fetch`, `make-fetch-happen`, or `undici`.\n\nThe actual `fetch` API is very flexible. You can specify requests either as JSON-style objects or as objects of the `Request` and `Headers` classes. However, some `fetch` implementations distinguish between these cases by using (for example) `instanceof Headers`, where `Headers` is the particular class defined by that implementation. So if you want to write portable code that should work with any `fetch` implementation, you need to use JSON-style objects rather than a particular implementation's classes. (For example, a `Headers` object created with `node-fetch` v2 will not be properly recognized by `make-fetch-happen` v10.)\n\nSpecifically, the `Fetcher` interface only declares options that are currently required by the software that uses it, such as Apollo Server and Apollo Gateway. If more options are required (and they are implemented with the same types in all `fetch` implementations), we can add them as needed.\n\nThis package is validated to be compatible with the typings of `node-fetch` v2, `make-fetch-happen` v10, and `undici` v5.\n/dist/index.d.ts\u0004Z/// <reference types=\"node\" />\nexport interface FetcherRequestInit {\n    method?: string;\n    headers?: Record<string, string>;\n    body?: string | Buffer;\n    signal?: any;\n}\nexport interface FetcherResponse {\n    readonly bodyUsed: boolean;\n    readonly url: string;\n    readonly redirected: boolean;\n    readonly status: number;\n    readonly ok: boolean;\n    readonly statusText: string;\n    readonly headers: FetcherHeaders;\n    arrayBuffer(): Promise<ArrayBuffer>;\n    text(): Promise<string>;\n    json(): Promise<any>;\n    clone(): FetcherResponse;\n}\nexport interface FetcherHeaders extends Iterable<[string, string]> {\n    append(name: string, value: string): void;\n    delete(name: string): void;\n    get(name: string): string | null;\n    has(name: string): boolean;\n    set(name: string, value: string): void;\n    entries(): Iterator<[string, string]>;\n    keys(): Iterator<string>;\n    values(): Iterator<string>;\n    [Symbol.iterator](): Iterator<[string, string]>;\n}\nexport declare type Fetcher = (url: string, init?: FetcherRequestInit) => Promise<FetcherResponse>;\n//# sourceMappingURL=index.d.ts.map/dist/index.d.ts.map\u0005q{\"version\":3,\"file\":\"index.d.ts\",\"sourceRoot\":\"\",\"sources\":[\"../src/index.ts\"],\"names\":[],\"mappings\":\";AAAA,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAIhB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAkCvB,MAAM,CAAC,EAAE,GAAG,CAAC;CAId;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;IAEjC,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC,CAAC;IACpC,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IACxB,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC;IAErB,KAAK,IAAI,eAAe,CAAC;CAC1B;AAED,MAAM,WAAW,cAAe,SAAQ,QAAQ,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1C,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACjC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAC3B,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAEvC,OAAO,IAAI,QAAQ,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACtC,IAAI,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;IACzB,MAAM,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC3B,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACjD;AAED,oBAAY,OAAO,GAAG,CACpB,GAAG,EAAE,MAAM,EAGX,IAAI,CAAC,EAAE,kBAAkB,KACtB,OAAO,CAAC,eAAe,CAAC,CAAC\"}/package.json\u0001{\n  \"name\": \"@apollo/utils.fetcher\",\n  \"version\": \"2.0.0\",\n  \"description\": \"Minimal web-style fetch TypeScript typings\",\n  \"main\": \"\",\n  \"types\": \"dist/index.d.ts\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/apollographql/apollo-utils.git\",\n    \"directory\": \"packages/fetcher/\"\n  },\n  \"keywords\": [\n    \"apollo\",\n    \"graphql\",\n    \"typescript\",\n    \"node\"\n  ],\n  \"author\": \"Apollo <packages@apollographql.com>\",\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"node\": \">=14\"\n  }\n}\n/dist/index.jsn\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=index.js.map/src/__tests__/tsconfig.jsonq{\n  \"extends\": \"../../../../tsconfig.test.base\",\n  \"include\": [\"**/*\"],\n  \"references\": [{ \"path\": \"../../\" }]\n}\n/src/__tests__/index.test.ts\u0001import type { Fetcher } from \"..\";\nimport nodeFetch from \"node-fetch\";\nimport makeFetchHappen from \"make-fetch-happen\";\nimport { fetch as undiciFetch } from \"undici\";\n\n// This \"test suite\" actually does all its work at compile time.\nfunction isAFetcher(_fetcher: Fetcher) {}\n\nit(\"node-fetch is a Fetcher\", () => {\n  isAFetcher(nodeFetch);\n});\n\nit(\"make-fetch-happen is a Fetcher\", () => {\n  isAFetcher(makeFetchHappen);\n});\n\nit(\"undici is a Fetcher\", () => {\n  isAFetcher(undiciFetch);\n});\n/dist/index.js.mapf{\"version\":3,\"file\":\"index.js\",\"sourceRoot\":\"\",\"sources\":[\"../src/index.ts\"],\"names\":[],\"mappings\":\"\"}"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QGFwb2xsby91dGlscy5pc25vZGVsaWtlQDEuMS4w",
    "content": "/LICENSE\u0004]MIT License\n\nCopyright (c) 2022 Apollo Graph, Inc. (Formerly Meteor Development Group, Inc.)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n/dist/index.js.map{\"version\":3,\"file\":\"index.js\",\"sourceRoot\":\"\",\"sources\":[\"../src/index.ts\"],\"names\":[],\"mappings\":\";;;AAAa,QAAA,UAAU,GACrB,OAAO,OAAO,KAAK,QAAQ;IAC3B,OAAO;IAKP,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,QAAQ;IAGhB,OAAO,OAAO,CAAC,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC\"}/dist/index.d.tsMexport declare const isNodeLike: boolean;\n//# sourceMappingURL=index.d.ts.map/package.json\u0002/{\n  \"name\": \"@apollo/utils.isnodelike\",\n  \"version\": \"1.1.0\",\n  \"description\": \"Node environment detection utility\",\n  \"main\": \"dist/index.js\",\n  \"types\": \"dist/index.d.ts\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/apollographql/apollo-utils.git\",\n    \"directory\": \"isNodeLike/\"\n  },\n  \"keywords\": [\n    \"apollo\",\n    \"graphql\",\n    \"typescript\",\n    \"node\"\n  ],\n  \"author\": \"Apollo <packages@apollographql.com>\",\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"node\": \">=12.13.0\"\n  },\n  \"publishConfig\": {\n    \"access\": \"public\"\n  }\n}\n/dist/index.d.ts.mapĆ{\"version\":3,\"file\":\"index.d.ts\",\"sourceRoot\":\"\",\"sources\":[\"../src/index.ts\"],\"names\":[],\"mappings\":\"AAAA,eAAO,MAAM,UAAU,SAWoB,CAAC\"}/src/index.ts\u0002Qexport const isNodeLike =\n  typeof process === \"object\" &&\n  process &&\n  // We used to check `process.release.name === \"node\"`, however that doesn't\n  // account for certain forks of Node.js which are otherwise identical to\n  // Node.js.  For example, NodeSource's N|Solid reports itself as \"nsolid\",\n  // though it's mostly the same build of Node.js with an extra addon.\n  process.release &&\n  process.versions &&\n  // The one thing which is present on both Node.js and N|Solid (a fork of\n  // Node.js), is `process.versions.node` being defined.\n  typeof process.versions.node === \"string\";\n/dist/index.js\u0001,\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isNodeLike = void 0;\nexports.isNodeLike = typeof process === \"object\" &&\n    process &&\n    process.release &&\n    process.versions &&\n    typeof process.versions.node === \"string\";\n//# sourceMappingURL=index.js.map"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QGFwb2xsby91dGlscy5sb2dnZXJAMS4wLjE=",
    "content": "/LICENSE\u0004]MIT License\n\nCopyright (c) 2022 Apollo Graph, Inc. (Formerly Meteor Development Group, Inc.)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n/src/__tests__/tsconfig.jsonq{\n  \"extends\": \"../../../../tsconfig.test.base\",\n  \"include\": [\"**/*\"],\n  \"references\": [{ \"path\": \"../../\" }]\n}\n/dist/index.jsn\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=index.js.map/README.md\u0002# Logger interface\n\n> ```\n> interface Logger {\n>   debug(message?: any): void;\n>   info(message?: any): void;\n>   warn(message?: any): void;\n>   error(message?: any): void;\n> }\n> ```\n\nThis generic interface for loggers supports logging a string at one of four different levels (`debug`, `info`, `warn`, `error`). It's designed to be compatible with Node's `console` as well as commonly used logging packages and is tested against a few of them. Below are the logging libraries we test for compatibility against.\n\n## bunyan\n\n```\nconst logger = bunyan.createLogger();\n```\n\n## log4js\n\n```\nconst logger = log4js.getLogger();\n```\n\n## loglevel\n\n```\nconst logger = loglevel.getLogger();\n```\n\n## winston\n\n```\nconst logger = winston.createLogger();\n```\n/src/index.tsĒexport interface Logger {\n  debug(message?: any): void;\n  info(message?: any): void;\n  warn(message?: any): void;\n  error(message?: any): void;\n}\n/dist/index.d.ts.map\u0001M{\"version\":3,\"file\":\"index.d.ts\",\"sourceRoot\":\"\",\"sources\":[\"../src/index.ts\"],\"names\":[],\"mappings\":\"AAAA,MAAM,WAAW,MAAM;IACrB,KAAK,CAAC,OAAO,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC;IAC3B,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC;IAC1B,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC;IAC1B,KAAK,CAAC,OAAO,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC;CAC5B\"}/src/__tests__/index.test.ts\u0010import { PassThrough } from \"stream\";\nimport * as winston from \"winston\";\nimport WinstonTransport from \"winston-transport\";\nimport * as bunyan from \"bunyan\";\nimport * as loglevel from \"loglevel\";\nimport * as log4js from \"log4js\";\nimport type { Logger } from \"..\";\n\nconst LOWEST_LOG_LEVEL = \"debug\";\nconst KNOWN_DEBUG_MESSAGE = \"This is a debug message\";\n\ndescribe(\"Logger interface compatibility\", () => {\n  it(\"with console\", () => {\n    const sink = jest.spyOn(console, \"debug\");\n\n    // type checks Logger interface compatibility\n    const logger: Logger = console;\n\n    logger.debug(KNOWN_DEBUG_MESSAGE);\n\n    expect(sink).toHaveBeenCalledWith(KNOWN_DEBUG_MESSAGE);\n  });\n\n  it(\"with loglevel\", () => {\n    const sink = jest.fn();\n    const logLevelLogger = loglevel.getLogger(\"test-logger-loglevel\");\n\n    logLevelLogger.methodFactory =\n      (_methodName, level): loglevel.LoggingMethod =>\n      (message) =>\n        sink({ level, message });\n\n    // The `setLevel` method must be called after overwriting `methodFactory`.\n    // This is an intentional API design pattern of the loglevel package:\n    // https://www.npmjs.com/package/loglevel#writing-plugins\n    logLevelLogger.setLevel(loglevel.levels.DEBUG);\n\n    // type checks Logger interface compatibility\n    const logger: Logger = logLevelLogger;\n\n    logger.debug(KNOWN_DEBUG_MESSAGE);\n\n    expect(sink).toHaveBeenCalledWith({\n      level: loglevel.levels.DEBUG,\n      message: KNOWN_DEBUG_MESSAGE,\n    });\n  });\n\n  it(\"with log4js\", () => {\n    const sink = jest.fn();\n\n    log4js.configure({\n      appenders: {\n        custom: {\n          type: {\n            configure: () => (loggingEvent: log4js.LoggingEvent) =>\n              sink(loggingEvent),\n          },\n        },\n      },\n      categories: {\n        default: {\n          appenders: [\"custom\"],\n          level: LOWEST_LOG_LEVEL,\n        },\n      },\n    });\n\n    const log4jsLogger = log4js.getLogger();\n    log4jsLogger.level = LOWEST_LOG_LEVEL;\n\n    // type checks Logger interface compatibility\n    const logger: Logger = log4jsLogger;\n\n    logger.debug(KNOWN_DEBUG_MESSAGE);\n\n    expect(sink).toHaveBeenCalledWith(\n      expect.objectContaining({\n        level: log4js.levels.DEBUG,\n        data: [KNOWN_DEBUG_MESSAGE],\n      }),\n    );\n  });\n\n  it(\"with bunyan\", () => {\n    const sink = jest.fn();\n\n    // Bunyan uses streams for its logging implementations.\n    const writable = new PassThrough();\n    writable.on(\"data\", (data) => sink(JSON.parse(data.toString())));\n\n    const bunyanLogger = bunyan.createLogger({\n      name: \"test-logger-bunyan\",\n      streams: [\n        {\n          level: LOWEST_LOG_LEVEL,\n          stream: writable,\n        },\n      ],\n    });\n\n    // type checks Logger interface compatibility\n    const logger: Logger = bunyanLogger;\n\n    logger.debug(KNOWN_DEBUG_MESSAGE);\n\n    expect(sink).toHaveBeenCalledWith(\n      expect.objectContaining({\n        level: bunyan.DEBUG,\n        msg: KNOWN_DEBUG_MESSAGE,\n      }),\n    );\n  });\n\n  it(\"with winston\", () => {\n    const sink = jest.fn();\n    const transport = new (class extends WinstonTransport {\n      constructor() {\n        super({\n          format: winston.format.json(),\n        });\n      }\n\n      override log(info: any) {\n        sink(info);\n      }\n    })();\n\n    const winstonLogger = winston\n      .createLogger({ level: \"debug\" })\n      .add(transport);\n\n    // type checks Logger interface compatibility\n    const logger: Logger = winstonLogger;\n\n    logger.debug(KNOWN_DEBUG_MESSAGE);\n\n    expect(sink).toHaveBeenCalledWith(\n      expect.objectContaining({\n        level: LOWEST_LOG_LEVEL,\n        message: KNOWN_DEBUG_MESSAGE,\n      }),\n    );\n  });\n});\n\ndescribe(\"Logger interface incompatibility\", () => {\n  it(\"missing methods\", () => {\n    // @ts-ignore - logger unused\n    let logger: Logger;\n    // @ts-expect-error\n    logger = {\n      info: jest.fn(),\n      warn: jest.fn(),\n      error: jest.fn(),\n    };\n\n    // @ts-expect-error\n    logger = {\n      debug: jest.fn(),\n      warn: jest.fn(),\n      error: jest.fn(),\n    };\n\n    // @ts-expect-error\n    logger = {\n      debug: jest.fn(),\n      info: jest.fn(),\n      error: jest.fn(),\n    };\n\n    // @ts-expect-error\n    logger = {\n      debug: jest.fn(),\n      info: jest.fn(),\n      warn: jest.fn(),\n    };\n  });\n});\n/dist/index.d.tsĽexport interface Logger {\n    debug(message?: any): void;\n    info(message?: any): void;\n    warn(message?: any): void;\n    error(message?: any): void;\n}\n//# sourceMappingURL=index.d.ts.map/dist/index.js.mapf{\"version\":3,\"file\":\"index.js\",\"sourceRoot\":\"\",\"sources\":[\"../src/index.ts\"],\"names\":[],\"mappings\":\"\"}/package.json\u0001{\n  \"name\": \"@apollo/utils.logger\",\n  \"version\": \"1.0.1\",\n  \"description\": \"Generic logger interface\",\n  \"main\": \"\",\n  \"types\": \"dist/index.d.ts\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/apollographql/apollo-utils.git\",\n    \"directory\": \"packages/logger/\"\n  },\n  \"keywords\": [\n    \"apollo\",\n    \"graphql\",\n    \"typescript\",\n    \"node\"\n  ],\n  \"author\": \"Apollo <packages@apollographql.com>\",\n  \"license\": \"MIT\"\n}\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QGFwb2xsby91dGlscy5sb2dnZXJAMi4wLjA=",
    "content": "/LICENSE\u0004]MIT License\n\nCopyright (c) 2022 Apollo Graph, Inc. (Formerly Meteor Development Group, Inc.)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n/src/__tests__/index.test.ts\u0010import { PassThrough } from \"stream\";\nimport * as winston from \"winston\";\nimport WinstonTransport from \"winston-transport\";\nimport * as bunyan from \"bunyan\";\nimport * as loglevel from \"loglevel\";\nimport * as log4js from \"log4js\";\nimport type { Logger } from \"..\";\n\nconst LOWEST_LOG_LEVEL = \"debug\";\nconst KNOWN_DEBUG_MESSAGE = \"This is a debug message\";\n\ndescribe(\"Logger interface compatibility\", () => {\n  it(\"with console\", () => {\n    const sink = jest.spyOn(console, \"debug\");\n\n    // type checks Logger interface compatibility\n    const logger: Logger = console;\n\n    logger.debug(KNOWN_DEBUG_MESSAGE);\n\n    expect(sink).toHaveBeenCalledWith(KNOWN_DEBUG_MESSAGE);\n  });\n\n  it(\"with loglevel\", () => {\n    const sink = jest.fn();\n    const logLevelLogger = loglevel.getLogger(\"test-logger-loglevel\");\n\n    logLevelLogger.methodFactory =\n      (_methodName, level): loglevel.LoggingMethod =>\n      (message) =>\n        sink({ level, message });\n\n    // The `setLevel` method must be called after overwriting `methodFactory`.\n    // This is an intentional API design pattern of the loglevel package:\n    // https://www.npmjs.com/package/loglevel#writing-plugins\n    logLevelLogger.setLevel(loglevel.levels.DEBUG);\n\n    // type checks Logger interface compatibility\n    const logger: Logger = logLevelLogger;\n\n    logger.debug(KNOWN_DEBUG_MESSAGE);\n\n    expect(sink).toHaveBeenCalledWith({\n      level: loglevel.levels.DEBUG,\n      message: KNOWN_DEBUG_MESSAGE,\n    });\n  });\n\n  it(\"with log4js\", () => {\n    const sink = jest.fn();\n\n    log4js.configure({\n      appenders: {\n        custom: {\n          type: {\n            configure: () => (loggingEvent: log4js.LoggingEvent) =>\n              sink(loggingEvent),\n          },\n        },\n      },\n      categories: {\n        default: {\n          appenders: [\"custom\"],\n          level: LOWEST_LOG_LEVEL,\n        },\n      },\n    });\n\n    const log4jsLogger = log4js.getLogger();\n    log4jsLogger.level = LOWEST_LOG_LEVEL;\n\n    // type checks Logger interface compatibility\n    const logger: Logger = log4jsLogger;\n\n    logger.debug(KNOWN_DEBUG_MESSAGE);\n\n    expect(sink).toHaveBeenCalledWith(\n      expect.objectContaining({\n        level: log4js.levels.DEBUG,\n        data: [KNOWN_DEBUG_MESSAGE],\n      }),\n    );\n  });\n\n  it(\"with bunyan\", () => {\n    const sink = jest.fn();\n\n    // Bunyan uses streams for its logging implementations.\n    const writable = new PassThrough();\n    writable.on(\"data\", (data) => sink(JSON.parse(data.toString())));\n\n    const bunyanLogger = bunyan.createLogger({\n      name: \"test-logger-bunyan\",\n      streams: [\n        {\n          level: LOWEST_LOG_LEVEL,\n          stream: writable,\n        },\n      ],\n    });\n\n    // type checks Logger interface compatibility\n    const logger: Logger = bunyanLogger;\n\n    logger.debug(KNOWN_DEBUG_MESSAGE);\n\n    expect(sink).toHaveBeenCalledWith(\n      expect.objectContaining({\n        level: bunyan.DEBUG,\n        msg: KNOWN_DEBUG_MESSAGE,\n      }),\n    );\n  });\n\n  it(\"with winston\", () => {\n    const sink = jest.fn();\n    const transport = new (class extends WinstonTransport {\n      constructor() {\n        super({\n          format: winston.format.json(),\n        });\n      }\n\n      override log(info: any) {\n        sink(info);\n      }\n    })();\n\n    const winstonLogger = winston\n      .createLogger({ level: \"debug\" })\n      .add(transport);\n\n    // type checks Logger interface compatibility\n    const logger: Logger = winstonLogger;\n\n    logger.debug(KNOWN_DEBUG_MESSAGE);\n\n    expect(sink).toHaveBeenCalledWith(\n      expect.objectContaining({\n        level: LOWEST_LOG_LEVEL,\n        message: KNOWN_DEBUG_MESSAGE,\n      }),\n    );\n  });\n});\n\ndescribe(\"Logger interface incompatibility\", () => {\n  it(\"missing methods\", () => {\n    // @ts-ignore - logger unused\n    let logger: Logger;\n    // @ts-expect-error\n    logger = {\n      info: jest.fn(),\n      warn: jest.fn(),\n      error: jest.fn(),\n    };\n\n    // @ts-expect-error\n    logger = {\n      debug: jest.fn(),\n      warn: jest.fn(),\n      error: jest.fn(),\n    };\n\n    // @ts-expect-error\n    logger = {\n      debug: jest.fn(),\n      info: jest.fn(),\n      error: jest.fn(),\n    };\n\n    // @ts-expect-error\n    logger = {\n      debug: jest.fn(),\n      info: jest.fn(),\n      warn: jest.fn(),\n    };\n  });\n});\n/src/__tests__/tsconfig.jsonq{\n  \"extends\": \"../../../../tsconfig.test.base\",\n  \"include\": [\"**/*\"],\n  \"references\": [{ \"path\": \"../../\" }]\n}\n/dist/index.d.ts.map\u0001M{\"version\":3,\"file\":\"index.d.ts\",\"sourceRoot\":\"\",\"sources\":[\"../src/index.ts\"],\"names\":[],\"mappings\":\"AAAA,MAAM,WAAW,MAAM;IACrB,KAAK,CAAC,OAAO,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC;IAC3B,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC;IAC1B,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC;IAC1B,KAAK,CAAC,OAAO,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC;CAC5B\"}/dist/index.jsn\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=index.js.map/README.md\u0002# Logger interface\n\n> ```\n> interface Logger {\n>   debug(message?: any): void;\n>   info(message?: any): void;\n>   warn(message?: any): void;\n>   error(message?: any): void;\n> }\n> ```\n\nThis generic interface for loggers supports logging a string at one of four different levels (`debug`, `info`, `warn`, `error`). It's designed to be compatible with Node's `console` as well as commonly used logging packages and is tested against a few of them. Below are the logging libraries we test for compatibility against.\n\n## bunyan\n\n```\nconst logger = bunyan.createLogger();\n```\n\n## log4js\n\n```\nconst logger = log4js.getLogger();\n```\n\n## loglevel\n\n```\nconst logger = loglevel.getLogger();\n```\n\n## winston\n\n```\nconst logger = winston.createLogger();\n```\n/dist/index.d.tsĽexport interface Logger {\n    debug(message?: any): void;\n    info(message?: any): void;\n    warn(message?: any): void;\n    error(message?: any): void;\n}\n//# sourceMappingURL=index.d.ts.map/package.json\u0001{\n  \"name\": \"@apollo/utils.logger\",\n  \"version\": \"2.0.0\",\n  \"description\": \"Generic logger interface\",\n  \"main\": \"\",\n  \"types\": \"dist/index.d.ts\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/apollographql/apollo-utils.git\",\n    \"directory\": \"packages/logger/\"\n  },\n  \"keywords\": [\n    \"apollo\",\n    \"graphql\",\n    \"typescript\",\n    \"node\"\n  ],\n  \"author\": \"Apollo <packages@apollographql.com>\",\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"node\": \">=14\"\n  }\n}\n/dist/index.js.mapf{\"version\":3,\"file\":\"index.js\",\"sourceRoot\":\"\",\"sources\":[\"../src/index.ts\"],\"names\":[],\"mappings\":\"\"}/src/index.tsĒexport interface Logger {\n  debug(message?: any): void;\n  info(message?: any): void;\n  warn(message?: any): void;\n  error(message?: any): void;\n}\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QGFwb2xsby91dGlscy5wcmludHdpdGhyZWR1Y2Vkd2hpdGVzcGFjZUAxLjEuMA==",
    "content": "/dist/index.d.ts.map{\"version\":3,\"file\":\"index.d.ts\",\"sourceRoot\":\"\",\"sources\":[\"../src/index.ts\"],\"names\":[],\"mappings\":\"AAAA,OAAO,EAAgB,YAAY,EAAmB,MAAM,SAAS,CAAC;AAKtE,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,YAAY,GAAG,MAAM,CA2BpE\"}1/src/__tests__/printWithReducedWhitespace.test.ts\u0003vimport gql from \"graphql-tag\";\nimport { printWithReducedWhitespace } from \"..\";\n\ndescribe(\"printWithReducedWhitespace\", () => {\n  const cases = [\n    {\n      name: \"lots of whitespace\",\n      // Note: there's a tab after \"tab->\", which prettier wants to keep as a\n      // literal tab rather than \\t.  In the output, there should be a literal\n      // backslash-t.\n      input: gql`\n        query Foo($a: Int) {\n          user(\n            name: \"   tab->\tyay\"\n            other: \"\"\"\n            apple\n               bag\n            cat\n            \"\"\"\n          ) {\n            name\n          }\n        }\n      `,\n      output:\n        'query Foo($a:Int){user(name:\"   tab->\\\\tyay\"other:\"apple\\\\n   bag\\\\ncat\"){name}}',\n    },\n  ];\n  cases.forEach(({ name, input, output }) => {\n    test(name, () => {\n      expect(printWithReducedWhitespace(input)).toEqual(output);\n    });\n  });\n});\n/dist/index.js.map\u0003[{\"version\":3,\"file\":\"index.js\",\"sourceRoot\":\"\",\"sources\":[\"../src/index.ts\"],\"names\":[],\"mappings\":\";;;AAAA,qCAAsE;AAKtE,SAAgB,0BAA0B,CAAC,GAAiB;IAU1D,MAAM,YAAY,GAAG,IAAA,eAAK,EAAC,GAAG,EAAE;QAC9B,WAAW,CAAC,IAAqB;YAC/B,OAAO;gBACL,GAAG,IAAI;gBACP,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;gBACtD,KAAK,EAAE,KAAK;aACb,CAAC;QACJ,CAAC;KACF,CAAC,CAAC;IACH,MAAM,cAAc,GAAG,IAAA,eAAK,EAAC,YAAY,CAAC,CAAC;IAC3C,MAAM,oBAAoB,GAAG,cAAc;SACxC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;SACpB,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;SACzC,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7C,OAAO,oBAAoB,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAC/D,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CACzD,CAAC;AACJ,CAAC;AA3BD,gEA2BC\"}/LICENSE\u0004]MIT License\n\nCopyright (c) 2022 Apollo Graph, Inc. (Formerly Meteor Development Group, Inc.)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n/src/index.ts\u0005import { visit, print, DocumentNode, StringValueNode } from \"graphql\";\n// Like the graphql-js print function, but deleting whitespace wherever\n// feasible. Specifically, all whitespace (outside of string literals) is\n// reduced to at most one space, and even that space is removed anywhere except\n// for between two alphanumerics.\nexport function printWithReducedWhitespace(ast: DocumentNode): string {\n  // In a GraphQL AST (which notably does not contain comments), the only place\n  // where meaningful whitespace (or double quotes) can exist is in\n  // StringNodes. So to print with reduced whitespace, we:\n  // - temporarily sanitize strings by replacing their contents with hex\n  // - use the default GraphQL printer\n  // - minimize the whitespace with a simple regexp replacement\n  // - convert strings back to their actual value\n  // We normalize all strings to non-block strings for simplicity.\n\n  const sanitizedAST = visit(ast, {\n    StringValue(node: StringValueNode): StringValueNode {\n      return {\n        ...node,\n        value: Buffer.from(node.value, \"utf8\").toString(\"hex\"),\n        block: false,\n      };\n    },\n  });\n  const withWhitespace = print(sanitizedAST);\n  const minimizedButStillHex = withWhitespace\n    .replace(/\\s+/g, \" \")\n    .replace(/([^_a-zA-Z0-9]) /g, (_, c) => c)\n    .replace(/ ([^_a-zA-Z0-9])/g, (_, c) => c);\n  return minimizedButStillHex.replace(/\"([a-f0-9]+)\"/g, (_, hex) =>\n    JSON.stringify(Buffer.from(hex, \"hex\").toString(\"utf8\")),\n  );\n}\n/dist/index.js\u0003\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.printWithReducedWhitespace = void 0;\nconst graphql_1 = require(\"graphql\");\nfunction printWithReducedWhitespace(ast) {\n    const sanitizedAST = (0, graphql_1.visit)(ast, {\n        StringValue(node) {\n            return {\n                ...node,\n                value: Buffer.from(node.value, \"utf8\").toString(\"hex\"),\n                block: false,\n            };\n        },\n    });\n    const withWhitespace = (0, graphql_1.print)(sanitizedAST);\n    const minimizedButStillHex = withWhitespace\n        .replace(/\\s+/g, \" \")\n        .replace(/([^_a-zA-Z0-9]) /g, (_, c) => c)\n        .replace(/ ([^_a-zA-Z0-9])/g, (_, c) => c);\n    return minimizedButStillHex.replace(/\"([a-f0-9]+)\"/g, (_, hex) => JSON.stringify(Buffer.from(hex, \"hex\").toString(\"utf8\")));\n}\nexports.printWithReducedWhitespace = printWithReducedWhitespace;\n//# sourceMappingURL=index.js.map/package.json\u0002{\n  \"name\": \"@apollo/utils.printwithreducedwhitespace\",\n  \"version\": \"1.1.0\",\n  \"description\": \"Print an AST with as little whitespace as possible\",\n  \"main\": \"dist/index.js\",\n  \"types\": \"dist/index.d.ts\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/apollographql/apollo-utils.git\",\n    \"directory\": \"printWithReducedWhitespace/\"\n  },\n  \"keywords\": [\n    \"apollo\",\n    \"graphql\",\n    \"typescript\",\n    \"node\"\n  ],\n  \"author\": \"Apollo <packages@apollographql.com>\",\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"node\": \">=12.13.0\"\n  },\n  \"publishConfig\": {\n    \"access\": \"public\"\n  },\n  \"peerDependencies\": {\n    \"graphql\": \"14.x || 15.x || 16.x\"\n  }\n}\n/src/__tests__/tsconfig.jsonq{\n  \"extends\": \"../../../../tsconfig.test.base\",\n  \"include\": [\"**/*\"],\n  \"references\": [{ \"path\": \"../../\" }]\n}\n/dist/index.d.tsĚimport { DocumentNode } from \"graphql\";\nexport declare function printWithReducedWhitespace(ast: DocumentNode): string;\n//# sourceMappingURL=index.d.ts.map"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QGFwb2xsby91dGlscy5yZW1vdmVhbGlhc2VzQDEuMC4w",
    "content": "/README.md\u0001~# removeAliases\n\nThe `removeAliases` function is a `graphql-js` visitor which removes aliases from all `Field` nodes. Note that this function makes no guarantees about the output being a valid GraphQL operation.\n\nFor example, the following operation is no longer valid once the alias is removed since the fields can't be merged:\n\n```graphql\nquery {\n  x(a: 1)\n  alias: x(a: 2)\n}\n```\n/dist/index.js\u0001\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.removeAliases = void 0;\nconst graphql_1 = require(\"graphql\");\nfunction removeAliases(ast) {\n    return (0, graphql_1.visit)(ast, {\n        Field(node) {\n            const { alias, ...rest } = node;\n            return rest;\n        },\n    });\n}\nexports.removeAliases = removeAliases;\n//# sourceMappingURL=index.js.map/LICENSE\u0004]MIT License\n\nCopyright (c) 2022 Apollo Graph, Inc. (Formerly Meteor Development Group, Inc.)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n/package.json\u0002{\n  \"name\": \"@apollo/utils.removealiases\",\n  \"version\": \"1.0.0\",\n  \"description\": \"Remove aliases from a GraphQL document\",\n  \"main\": \"dist/index.js\",\n  \"types\": \"dist/index.d.ts\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/apollographql/apollo-utils.git\",\n    \"directory\": \"packages/removeAliases/\"\n  },\n  \"keywords\": [\n    \"apollo\",\n    \"graphql\",\n    \"typescript\",\n    \"node\"\n  ],\n  \"author\": \"Apollo <packages@apollographql.com>\",\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"node\": \">=12.13.0\"\n  },\n  \"publishConfig\": {\n    \"access\": \"public\"\n  },\n  \"peerDependencies\": {\n    \"graphql\": \"14.x || 15.x || 16.x\"\n  }\n}\n/dist/index.d.ts.map{\"version\":3,\"file\":\"index.d.ts\",\"sourceRoot\":\"\",\"sources\":[\"../src/index.ts\"],\"names\":[],\"mappings\":\"AAOA,OAAO,EAAE,YAAY,EAAoB,MAAM,SAAS,CAAC;AAEzD,wBAAgB,aAAa,CAAC,GAAG,EAAE,YAAY,GAAG,YAAY,CAO7D\"}$/src/__tests__/removeAliases.test.ts\u0003gimport gql from \"graphql-tag\";\nimport { removeAliases } from \"..\";\n\nimport graphQLASTSerializer from \"@apollo/utils.jest-graphql-ast-serializer\";\nexpect.addSnapshotSerializer(graphQLASTSerializer);\n\ndescribe(\"removeAliases\", () => {\n  it(\"removes aliases from Field nodes\", () => {\n    expect(\n      removeAliases(gql`\n        query MyQuery {\n          alias: field\n          field\n          fieldWithSelections {\n            selection1\n            selection2\n          }\n          aliasedSelections: fieldWithSelections {\n            selection1\n            selection2\n          }\n        }\n      `),\n    ).toMatchInlineSnapshot(`\n      query MyQuery {\n        field\n        field\n        fieldWithSelections {\n          selection1\n          selection2\n        }\n        fieldWithSelections {\n          selection1\n          selection2\n        }\n      }\n    `);\n  });\n});\n/src/index.ts\u0002// removeAliases gets rid of GraphQL aliases, a feature by which you can tell a\n// server to return a field's data under a different name from the field name.\n// Maybe this is useful if somebody somewhere inserts random aliases into their\n// queries. Note that this function makes no guarantees about the output and its\n// validity as a GraphQL operation, for example:\n// { x(a: 1) alias: x(a:2) } (valid) will yield\n// { x(a:1) x(a:2) } (invalid)\nimport { DocumentNode, FieldNode, visit } from \"graphql\";\n\nexport function removeAliases(ast: DocumentNode): DocumentNode {\n  return visit(ast, {\n    Field(node: FieldNode): FieldNode {\n      const { alias, ...rest } = node;\n      return rest;\n    },\n  });\n}\n/src/__tests__/tsconfig.json{\n  \"extends\": \"../../../../tsconfig.test.base\",\n  \"include\": [\"**/*\"],\n  \"references\": [\n    {\n      \"path\": \"../../\"\n    },\n    {\n      \"path\": \"../../../jestGraphQLASTSerializer\"\n    }\n  ]\n}\n/dist/index.js.map\u0001D{\"version\":3,\"file\":\"index.js\",\"sourceRoot\":\"\",\"sources\":[\"../src/index.ts\"],\"names\":[],\"mappings\":\";;;AAOA,qCAAyD;AAEzD,SAAgB,aAAa,CAAC,GAAiB;IAC7C,OAAO,IAAA,eAAK,EAAC,GAAG,EAAE;QAChB,KAAK,CAAC,IAAe;YACnB,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC;YAChC,OAAO,IAAI,CAAC;QACd,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAPD,sCAOC\"}/dist/index.d.tsēimport { DocumentNode } from \"graphql\";\nexport declare function removeAliases(ast: DocumentNode): DocumentNode;\n//# sourceMappingURL=index.d.ts.map"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QGFwb2xsby91dGlscy5zb3J0YXN0QDEuMS4w",
    "content": "/LICENSE\u0004]MIT License\n\nCopyright (c) 2022 Apollo Graph, Inc. (Formerly Meteor Development Group, Inc.)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n/src/index.ts\u000b// We'll only fetch the `ListIteratee` type from the `@types/lodash`, but get\n// `sortBy` from the modularized version of the package to avoid bringing in\n// all of `lodash`.\nimport {\n  visit,\n  DocumentNode,\n  OperationDefinitionNode,\n  DirectiveNode,\n  FragmentDefinitionNode,\n  InlineFragmentNode,\n  FragmentSpreadNode,\n  FieldNode,\n  SelectionSetNode,\n  ArgumentNode,\n  VariableDefinitionNode,\n} from \"graphql\";\nimport sortBy from \"lodash.sortby\";\n\n// sortAST sorts most multi-child nodes alphabetically. Using this as part of\n// your signature calculation function may make it easier to tell the difference\n// between queries that are similar to each other, and if for some reason your\n// GraphQL client generates query strings with elements in nondeterministic\n// order, it can make sure the queries are treated as identical.\nexport function sortAST(ast: DocumentNode): DocumentNode {\n  return visit(ast, {\n    Document(node: DocumentNode) {\n      return {\n        ...node,\n        // The sort on \"kind\" places fragments before operations within the document\n        definitions: sortBy(node.definitions, \"kind\", \"name.value\"),\n      };\n    },\n    OperationDefinition(\n      node: OperationDefinitionNode,\n    ): OperationDefinitionNode {\n      return sortVariableDefinitions(node);\n    },\n    SelectionSet(node): SelectionSetNode {\n      return {\n        ...node,\n        // Define an ordering for field names in a SelectionSet.  Field first,\n        // then FragmentSpread, then InlineFragment.  By a lovely coincidence,\n        // the order we want them to appear in is alphabetical by node.kind.\n        // Use sortBy instead of sorted because 'selections' is not optional.\n        selections: sortBy(node.selections, \"kind\", \"name.value\"),\n      };\n    },\n    Field(node): FieldNode {\n      return sortArguments(node);\n    },\n    FragmentSpread(node): FragmentSpreadNode {\n      return sortDirectives(node);\n    },\n    InlineFragment(node): InlineFragmentNode {\n      return sortDirectives(node);\n    },\n    FragmentDefinition(node): FragmentDefinitionNode {\n      return sortDirectives(sortVariableDefinitions(node));\n    },\n    Directive(node): DirectiveNode {\n      return sortArguments(node);\n    },\n  });\n}\n\nfunction sortDirectives<T extends { directives?: readonly DirectiveNode[] }>(\n  node: T,\n): T {\n  return \"directives\" in node\n    ? { ...node, directives: sortBy(node.directives, \"name.value\") }\n    : node;\n}\n\nfunction sortArguments<T extends { arguments?: readonly ArgumentNode[] }>(\n  node: T,\n): T {\n  return \"arguments\" in node\n    ? { ...node, arguments: sortBy(node.arguments, \"name.value\") }\n    : node;\n}\n\nfunction sortVariableDefinitions<\n  T extends { variableDefinitions?: readonly VariableDefinitionNode[] },\n>(node: T): T {\n  return \"variableDefinitions\" in node\n    ? {\n        ...node,\n        variableDefinitions: sortBy(\n          node.variableDefinitions,\n          \"variable.name.value\",\n        ),\n      }\n    : node;\n}\n/dist/index.js.map\u0005{\"version\":3,\"file\":\"index.js\",\"sourceRoot\":\"\",\"sources\":[\"../src/index.ts\"],\"names\":[],\"mappings\":\";;;;;;AAGA,qCAYiB;AACjB,kEAAmC;AAOnC,SAAgB,OAAO,CAAC,GAAiB;IACvC,OAAO,IAAA,eAAK,EAAC,GAAG,EAAE;QAChB,QAAQ,CAAC,IAAkB;YACzB,OAAO;gBACL,GAAG,IAAI;gBAEP,WAAW,EAAE,IAAA,uBAAM,EAAC,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,CAAC;aAC5D,CAAC;QACJ,CAAC;QACD,mBAAmB,CACjB,IAA6B;YAE7B,OAAO,uBAAuB,CAAC,IAAI,CAAC,CAAC;QACvC,CAAC;QACD,YAAY,CAAC,IAAI;YACf,OAAO;gBACL,GAAG,IAAI;gBAKP,UAAU,EAAE,IAAA,uBAAM,EAAC,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,CAAC;aAC1D,CAAC;QACJ,CAAC;QACD,KAAK,CAAC,IAAI;YACR,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;QACD,cAAc,CAAC,IAAI;YACjB,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC;QAC9B,CAAC;QACD,cAAc,CAAC,IAAI;YACjB,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC;QAC9B,CAAC;QACD,kBAAkB,CAAC,IAAI;YACrB,OAAO,cAAc,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC;QACvD,CAAC;QACD,SAAS,CAAC,IAAI;YACZ,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAxCD,0BAwCC;AAED,SAAS,cAAc,CACrB,IAAO;IAEP,OAAO,YAAY,IAAI,IAAI;QACzB,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,IAAA,uBAAM,EAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,EAAE;QAChE,CAAC,CAAC,IAAI,CAAC;AACX,CAAC;AAED,SAAS,aAAa,CACpB,IAAO;IAEP,OAAO,WAAW,IAAI,IAAI;QACxB,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,IAAA,uBAAM,EAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE;QAC9D,CAAC,CAAC,IAAI,CAAC;AACX,CAAC;AAED,SAAS,uBAAuB,CAE9B,IAAO;IACP,OAAO,qBAAqB,IAAI,IAAI;QAClC,CAAC,CAAC;YACE,GAAG,IAAI;YACP,mBAAmB,EAAE,IAAA,uBAAM,EACzB,IAAI,CAAC,mBAAmB,EACxB,qBAAqB,CACtB;SACF;QACH,CAAC,CAAC,IAAI,CAAC;AACX,CAAC\"}/dist/index.d.tsčimport { DocumentNode } from \"graphql\";\nexport declare function sortAST(ast: DocumentNode): DocumentNode;\n//# sourceMappingURL=index.d.ts.map/package.json\u0002{\n  \"name\": \"@apollo/utils.sortast\",\n  \"version\": \"1.1.0\",\n  \"description\": \"Sort AST nodes in a document alphabetically\",\n  \"main\": \"dist/index.js\",\n  \"types\": \"dist/index.d.ts\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/apollographql/apollo-utils.git\",\n    \"directory\": \"sortAst/\"\n  },\n  \"keywords\": [\n    \"apollo\",\n    \"graphql\",\n    \"typescript\",\n    \"node\"\n  ],\n  \"author\": \"Apollo <packages@apollographql.com>\",\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"node\": \">=12.13.0\"\n  },\n  \"publishConfig\": {\n    \"access\": \"public\"\n  },\n  \"dependencies\": {\n    \"lodash.sortby\": \"^4.7.0\"\n  },\n  \"peerDependencies\": {\n    \"graphql\": \"14.x || 15.x || 16.x\"\n  }\n}\n/dist/index.js\u0007\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.sortAST = void 0;\nconst graphql_1 = require(\"graphql\");\nconst lodash_sortby_1 = __importDefault(require(\"lodash.sortby\"));\nfunction sortAST(ast) {\n    return (0, graphql_1.visit)(ast, {\n        Document(node) {\n            return {\n                ...node,\n                definitions: (0, lodash_sortby_1.default)(node.definitions, \"kind\", \"name.value\"),\n            };\n        },\n        OperationDefinition(node) {\n            return sortVariableDefinitions(node);\n        },\n        SelectionSet(node) {\n            return {\n                ...node,\n                selections: (0, lodash_sortby_1.default)(node.selections, \"kind\", \"name.value\"),\n            };\n        },\n        Field(node) {\n            return sortArguments(node);\n        },\n        FragmentSpread(node) {\n            return sortDirectives(node);\n        },\n        InlineFragment(node) {\n            return sortDirectives(node);\n        },\n        FragmentDefinition(node) {\n            return sortDirectives(sortVariableDefinitions(node));\n        },\n        Directive(node) {\n            return sortArguments(node);\n        },\n    });\n}\nexports.sortAST = sortAST;\nfunction sortDirectives(node) {\n    return \"directives\" in node\n        ? { ...node, directives: (0, lodash_sortby_1.default)(node.directives, \"name.value\") }\n        : node;\n}\nfunction sortArguments(node) {\n    return \"arguments\" in node\n        ? { ...node, arguments: (0, lodash_sortby_1.default)(node.arguments, \"name.value\") }\n        : node;\n}\nfunction sortVariableDefinitions(node) {\n    return \"variableDefinitions\" in node\n        ? {\n            ...node,\n            variableDefinitions: (0, lodash_sortby_1.default)(node.variableDefinitions, \"variable.name.value\"),\n        }\n        : node;\n}\n//# sourceMappingURL=index.js.map/dist/index.d.ts.map{\"version\":3,\"file\":\"index.d.ts\",\"sourceRoot\":\"\",\"sources\":[\"../src/index.ts\"],\"names\":[],\"mappings\":\"AAGA,OAAO,EAEL,YAAY,EAUb,MAAM,SAAS,CAAC;AAQjB,wBAAgB,OAAO,CAAC,GAAG,EAAE,YAAY,GAAG,YAAY,CAwCvD\"}"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QGFwb2xsby91dGlscy5zdHJpcHNlbnNpdGl2ZWxpdGVyYWxzQDEuMi4w",
    "content": "/dist/index.d.ts.map\u0001\u0003{\"version\":3,\"file\":\"index.d.ts\",\"sourceRoot\":\"\",\"sources\":[\"../src/index.ts\"],\"names\":[],\"mappings\":\"AAAA,OAAO,KAAK,EAEV,YAAY,EAMb,MAAM,SAAS,CAAC;AAIjB,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,YAAY,EACjB,OAAO,GAAE;IAAE,yBAAyB,CAAC,EAAE,OAAO,CAAA;CAE7C,GACA,YAAY,CAyBd\"}/dist/index.js\u0003\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.stripSensitiveLiterals = void 0;\nconst graphql_1 = require(\"graphql\");\nfunction stripSensitiveLiterals(ast, options = {\n    hideListAndObjectLiterals: false,\n}) {\n    const listAndObjectVisitorIfEnabled = options.hideListAndObjectLiterals\n        ? {\n            ListValue(node) {\n                return { ...node, values: [] };\n            },\n            ObjectValue(node) {\n                return { ...node, fields: [] };\n            },\n        }\n        : {};\n    return (0, graphql_1.visit)(ast, {\n        IntValue(node) {\n            return { ...node, value: \"0\" };\n        },\n        FloatValue(node) {\n            return { ...node, value: \"0\" };\n        },\n        StringValue(node) {\n            return { ...node, value: \"\", block: false };\n        },\n        ...listAndObjectVisitorIfEnabled,\n    });\n}\nexports.stripSensitiveLiterals = stripSensitiveLiterals;\n//# sourceMappingURL=index.js.map-/src/__tests__/stripSensitiveLiterals.test.ts\rimport gql from \"graphql-tag\";\nimport { stripSensitiveLiterals } from \"..\";\n\nimport graphQLASTSerializer from \"@apollo/utils.jest-graphql-ast-serializer\";\n\nexpect.addSnapshotSerializer(graphQLASTSerializer);\n\nconst document = gql`\n  query Foo($b: Int, $a: Boolean) {\n    user(\n      name: \"hello\"\n      age: 5\n      pct: 0.4\n      lst: [\"a\", \"b\", \"c\"]\n      obj: { a: \"a\", b: 1 }\n    ) {\n      ...Bar\n      ... on User {\n        hello\n        bee\n      }\n      tz\n      aliased: name\n      withInputs(\n        str: \"hi\"\n        int: 2\n        flt: 0.3\n        lst: [\"\", \"\", \"\"]\n        obj: { q: \"\", s: 0 }\n      )\n    }\n  }\n\n  fragment Bar on User {\n    age @skip(if: $a)\n    ...Nested\n  }\n\n  fragment Nested on User {\n    blah\n  }\n`;\n\ndescribe(\"stripSensitiveLiterals\", () => {\n  it(\"strips only numeric and string literals with default configuration\", () => {\n    expect(stripSensitiveLiterals(document)).toMatchInlineSnapshot(`\n      query Foo($b: Int, $a: Boolean) {\n        user(name: \"\", age: 0, pct: 0, lst: [\"\", \"\", \"\"], obj: {a: \"\", b: 0}) {\n          ...Bar\n          ... on User {\n            hello\n            bee\n          }\n          tz\n          aliased: name\n          withInputs(str: \"\", int: 0, flt: 0, lst: [\"\", \"\", \"\"], obj: {q: \"\", s: 0})\n        }\n      }\n\n      fragment Bar on User {\n        age @skip(if: $a)\n        ...Nested\n      }\n\n      fragment Nested on User {\n        blah\n      }\n    `);\n  });\n\n  it(\"strips only numeric and string literals with empty (but defined) configuration\", () => {\n    expect(stripSensitiveLiterals(document, {})).toMatchInlineSnapshot(`\n      query Foo($b: Int, $a: Boolean) {\n        user(name: \"\", age: 0, pct: 0, lst: [\"\", \"\", \"\"], obj: {a: \"\", b: 0}) {\n          ...Bar\n          ... on User {\n            hello\n            bee\n          }\n          tz\n          aliased: name\n          withInputs(str: \"\", int: 0, flt: 0, lst: [\"\", \"\", \"\"], obj: {q: \"\", s: 0})\n        }\n      }\n\n      fragment Bar on User {\n        age @skip(if: $a)\n        ...Nested\n      }\n\n      fragment Nested on User {\n        blah\n      }\n    `);\n  });\n\n  it(\"strips only numeric and string literals with hideListAndObjectLiterals: false\", () => {\n    expect(\n      stripSensitiveLiterals(document, { hideListAndObjectLiterals: false }),\n    ).toMatchInlineSnapshot(`\n      query Foo($b: Int, $a: Boolean) {\n        user(name: \"\", age: 0, pct: 0, lst: [\"\", \"\", \"\"], obj: {a: \"\", b: 0}) {\n          ...Bar\n          ... on User {\n            hello\n            bee\n          }\n          tz\n          aliased: name\n          withInputs(str: \"\", int: 0, flt: 0, lst: [\"\", \"\", \"\"], obj: {q: \"\", s: 0})\n        }\n      }\n\n      fragment Bar on User {\n        age @skip(if: $a)\n        ...Nested\n      }\n\n      fragment Nested on User {\n        blah\n      }\n    `);\n  });\n\n  it(\"strips all literals with hideListAndObjectLiterals: true\", () => {\n    expect(\n      stripSensitiveLiterals(document, { hideListAndObjectLiterals: true }),\n    ).toMatchInlineSnapshot(`\n      query Foo($b: Int, $a: Boolean) {\n        user(name: \"\", age: 0, pct: 0, lst: [], obj: {}) {\n          ...Bar\n          ... on User {\n            hello\n            bee\n          }\n          tz\n          aliased: name\n          withInputs(str: \"\", int: 0, flt: 0, lst: [], obj: {})\n        }\n      }\n\n      fragment Bar on User {\n        age @skip(if: $a)\n        ...Nested\n      }\n\n      fragment Nested on User {\n        blah\n      }\n    `);\n  });\n});\n/LICENSE\u0004]MIT License\n\nCopyright (c) 2022 Apollo Graph, Inc. (Formerly Meteor Development Group, Inc.)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n/package.json\u0002{\n  \"name\": \"@apollo/utils.stripsensitiveliterals\",\n  \"version\": \"1.2.0\",\n  \"description\": \"Remove literals from an AST which might contain PII (strings and numbers, and optionally lists and objects)\",\n  \"main\": \"dist/index.js\",\n  \"types\": \"dist/index.d.ts\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/apollographql/apollo-utils.git\",\n    \"directory\": \"stripSensitiveLiterals/\"\n  },\n  \"keywords\": [\n    \"apollo\",\n    \"graphql\",\n    \"typescript\",\n    \"node\"\n  ],\n  \"author\": \"Apollo <packages@apollographql.com>\",\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"node\": \">=12.13.0\"\n  },\n  \"publishConfig\": {\n    \"access\": \"public\"\n  },\n  \"peerDependencies\": {\n    \"graphql\": \"14.x || 15.x || 16.x\"\n  }\n}\n/src/__tests__/tsconfig.json{\n  \"extends\": \"../../../../tsconfig.test.base\",\n  \"include\": [\"**/*\"],\n  \"references\": [\n    {\n      \"path\": \"../../\"\n    },\n    {\n      \"path\": \"../../../jestGraphQLASTSerializer\"\n    }\n  ]\n}\n/dist/index.js.map\u00036{\"version\":3,\"file\":\"index.js\",\"sourceRoot\":\"\",\"sources\":[\"../src/index.ts\"],\"names\":[],\"mappings\":\";;;AASA,qCAAgC;AAGhC,SAAgB,sBAAsB,CACpC,GAAiB,EACjB,UAAmD;IACjD,yBAAyB,EAAE,KAAK;CACjC;IAED,MAAM,6BAA6B,GACjC,OAAO,CAAC,yBAAyB;QAC/B,CAAC,CAAC;YACE,SAAS,CAAC,IAAmB;gBAC3B,OAAO,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;YACjC,CAAC;YACD,WAAW,CAAC,IAAqB;gBAC/B,OAAO,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;YACjC,CAAC;SACF;QACH,CAAC,CAAC,EAAE,CAAC;IAET,OAAO,IAAA,eAAK,EAAC,GAAG,EAAE;QAChB,QAAQ,CAAC,IAAI;YACX,OAAO,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;QACjC,CAAC;QACD,UAAU,CAAC,IAAI;YACb,OAAO,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;QACjC,CAAC;QACD,WAAW,CAAC,IAAI;YACd,OAAO,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;QAC9C,CAAC;QACD,GAAG,6BAA6B;KACjC,CAAC,CAAC;AACL,CAAC;AA9BD,wDA8BC\"}/dist/index.d.tsimport type { DocumentNode } from \"graphql\";\nexport declare function stripSensitiveLiterals(ast: DocumentNode, options?: {\n    hideListAndObjectLiterals?: boolean;\n}): DocumentNode;\n//# sourceMappingURL=index.d.ts.map/src/index.ts\u0004import type {\n  ASTVisitor,\n  DocumentNode,\n  FloatValueNode,\n  IntValueNode,\n  ListValueNode,\n  ObjectValueNode,\n  StringValueNode,\n} from \"graphql\";\nimport { visit } from \"graphql\";\n\n// Hide sensitive string and numeric literals. Optionally hide list and object literals with the option `hideListAndObjectLiterals: true`.\nexport function stripSensitiveLiterals(\n  ast: DocumentNode,\n  options: { hideListAndObjectLiterals?: boolean } = {\n    hideListAndObjectLiterals: false,\n  },\n): DocumentNode {\n  const listAndObjectVisitorIfEnabled: ASTVisitor =\n    options.hideListAndObjectLiterals\n      ? {\n          ListValue(node: ListValueNode): ListValueNode {\n            return { ...node, values: [] };\n          },\n          ObjectValue(node: ObjectValueNode): ObjectValueNode {\n            return { ...node, fields: [] };\n          },\n        }\n      : {};\n\n  return visit(ast, {\n    IntValue(node): IntValueNode {\n      return { ...node, value: \"0\" };\n    },\n    FloatValue(node): FloatValueNode {\n      return { ...node, value: \"0\" };\n    },\n    StringValue(node): StringValueNode {\n      return { ...node, value: \"\", block: false };\n    },\n    ...listAndObjectVisitorIfEnabled,\n  });\n}\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QGFwb2xsby9jYWNoZS1jb250cm9sLXR5cGVzQDEuMC4y",
    "content": "/dist/index.js\u0005W\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.cacheControlFromInfo = exports.maybeCacheControlFromInfo = void 0;\nfunction maybeCacheControlFromInfo(info) {\n    var _a, _b;\n    if ((_b = (_a = info.cacheControl) === null || _a === void 0 ? void 0 : _a.cacheHint) === null || _b === void 0 ? void 0 : _b.restrict) {\n        return info.cacheControl;\n    }\n    return null;\n}\nexports.maybeCacheControlFromInfo = maybeCacheControlFromInfo;\nfunction cacheControlFromInfo(info) {\n    var _a, _b;\n    if (!(\"cacheControl\" in info)) {\n        throw new Error(\"The `info` argument does not appear to have a cacheControl field. \" +\n            \"Check that you are using Apollo Server 3 or newer and that you aren't using \" +\n            \"ApolloServerPluginCacheControlDisabled.\");\n    }\n    if (!((_b = (_a = info.cacheControl) === null || _a === void 0 ? void 0 : _a.cacheHint) === null || _b === void 0 ? void 0 : _b.restrict)) {\n        throw new Error(\"The `info` argument has a cacheControl field but it does not appear to be from Apollo\" +\n            \"Server 3 or newer. Check that you are using Apollo Server 3 or newer and that you aren't using \" +\n            \"ApolloServerPluginCacheControlDisabled.\");\n    }\n    return info.cacheControl;\n}\nexports.cacheControlFromInfo = cacheControlFromInfo;\n//# sourceMappingURL=index.js.map/dist/index.d.ts\u0003import type { GraphQLCompositeType, GraphQLResolveInfo } from \"graphql\";\nexport declare type CacheScope = \"PUBLIC\" | \"PRIVATE\";\nexport interface CacheHint {\n    maxAge?: number;\n    scope?: CacheScope;\n}\nexport interface CachePolicy extends CacheHint {\n    replace(hint: CacheHint): void;\n    restrict(hint: CacheHint): void;\n    policyIfCacheable(): Required<CacheHint> | null;\n}\nexport interface ResolveInfoCacheControl {\n    cacheHint: CachePolicy;\n    setCacheHint(hint: CacheHint): void;\n    cacheHintFromType(t: GraphQLCompositeType): CacheHint | undefined;\n}\nexport interface GraphQLResolveInfoWithCacheControl extends Omit<GraphQLResolveInfo, \"cacheControl\"> {\n    cacheControl: ResolveInfoCacheControl;\n}\nexport declare function maybeCacheControlFromInfo(info: GraphQLResolveInfo): ResolveInfoCacheControl | null;\nexport declare function cacheControlFromInfo(info: GraphQLResolveInfo): ResolveInfoCacheControl;\n//# sourceMappingURL=index.d.ts.map/dist/index.js.map\u0002{{\"version\":3,\"file\":\"index.js\",\"sourceRoot\":\"\",\"sources\":[\"../src/index.ts\"],\"names\":[],\"mappings\":\";;;AAmFA,SAAgB,yBAAyB,CACvC,IAAwB;;IAExB,IAAI,MAAA,MAAC,IAAY,CAAC,YAAY,0CAAE,SAAS,0CAAE,QAAQ,EAAE;QACnD,OAAQ,IAAY,CAAC,YAAY,CAAC;KACnC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAPD,8DAOC;AAKD,SAAgB,oBAAoB,CAClC,IAAwB;;IAExB,IAAI,CAAC,CAAC,cAAc,IAAI,IAAI,CAAC,EAAE;QAC7B,MAAM,IAAI,KAAK,CACb,oEAAoE;YAClE,8EAA8E;YAC9E,yCAAyC,CAC5C,CAAC;KACH;IACD,IAAI,CAAC,CAAA,MAAA,MAAC,IAAY,CAAC,YAAY,0CAAE,SAAS,0CAAE,QAAQ,CAAA,EAAE;QACpD,MAAM,IAAI,KAAK,CACb,uFAAuF;YACrF,iGAAiG;YACjG,yCAAyC,CAC5C,CAAC;KACH;IACD,OAAQ,IAAY,CAAC,YAAY,CAAC;AACpC,CAAC;AAlBD,oDAkBC\"}/package.json\u0002<{\n  \"name\": \"@apollo/cache-control-types\",\n  \"version\": \"1.0.2\",\n  \"description\": \"TypeScript types for Apollo Server info.cacheControl\",\n  \"main\": \"dist/index.js\",\n  \"types\": \"dist/index.d.ts\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/apollographql/apollo-utils.git\",\n    \"directory\": \"packages/cache-control-types/\"\n  },\n  \"keywords\": [\n    \"apollo\",\n    \"graphql\",\n    \"typescript\",\n    \"node\"\n  ],\n  \"author\": \"Apollo <packages@apollographql.com>\",\n  \"license\": \"MIT\",\n  \"peerDependencies\": {\n    \"graphql\": \"14.x || 15.x || 16.x\"\n  }\n}\n/src/index.ts\u0011// NOTE: Once Apollo Server 4 is released, move this package into the\n// apollo-server repo. We're placing it in the apollo-utils repo for now to\n// enable us to make non-alpha releases that can be used on the apollo-server\n// version-4 branch.\n\nimport type { GraphQLCompositeType, GraphQLResolveInfo } from \"graphql\";\n\n/**\n * CacheScope represents whether cacheable data should be shared across sessions\n * (PUBLIC) or considered session-specific (PRIVATE).\n */\nexport type CacheScope = \"PUBLIC\" | \"PRIVATE\";\n\n/**\n * CacheHint represents a contribution to an overall cache policy. It can\n * specify a maxAge and/or a scope.\n */\nexport interface CacheHint {\n  maxAge?: number;\n  scope?: CacheScope;\n}\n\n/**\n * CachePolicy is a mutable CacheHint with helpful methods for updating its\n * fields.\n */\nexport interface CachePolicy extends CacheHint {\n  /**\n   * Mutate this CachePolicy by replacing each field defined in `hint`. This can\n   * make the policy more restrictive or less restrictive.\n   */\n  replace(hint: CacheHint): void;\n\n  /**\n   * Mutate this CachePolicy by restricting each field defined in `hint`. This\n   * can only make the policy more restrictive: a previously defined `maxAge`\n   * can only be reduced, and a previously Private scope cannot be made Public.\n   */\n  restrict(hint: CacheHint): void;\n\n  /**\n   * If this policy has a positive `maxAge`, then return a copy of itself as a\n   * `CacheHint` with both fields defined. Otherwise return null.\n   */\n  policyIfCacheable(): Required<CacheHint> | null;\n}\n\n/**\n * When using Apollo Server with the cache control plugin (on by default), an\n * object of this kind is available to resolvers on `info.cacheControl`.\n */\nexport interface ResolveInfoCacheControl {\n  cacheHint: CachePolicy;\n  // Shorthand for `cacheHint.replace(hint)`; also for compatibility with\n  // the Apollo Server 2.x API.\n  setCacheHint(hint: CacheHint): void;\n\n  cacheHintFromType(t: GraphQLCompositeType): CacheHint | undefined;\n}\n\n/** When using Apollo Server with the cache control plugin (on by default), the\n * `info` argument to resolvers can be considered to be of this type. (You can\n * use this type with the customResolveInfo option to the graphql-code-generator\n * typescript-resolvers plugin, for example.) */\nexport interface GraphQLResolveInfoWithCacheControl\n  extends Omit<GraphQLResolveInfo, \"cacheControl\"> {\n  // Why the Omit above? If you happen to have AS2 `apollo-cache-control` or AS3\n  // `apollo-server-core` in your TypeScript build, then there's an ambient\n  // `declare module` floating around that monkey-patches GraphQLResolveInfo to\n  // have a cacheControl field. This led to lots of problems, which is why in\n  // AS4 we're moving towards the approach in this file where don't assume every\n  // GraphQLResolveInfo is a GraphQLResolveInfoWithCacheControl. The AS3 type is\n  // very slightly incompatible with the type in the file, since we changed\n  // CacheScope to be a union of strings rather than an enum. They have the same\n  // runtime representation so it's safe to ignore, but in order for the\n  // `extends` to not error out if you're building with the old ambient\n  // definition floating around too, we need the Omit.\n  cacheControl: ResolveInfoCacheControl;\n}\n\n/** Given an `info` resolver argument, returns the cacheControl field if it\n * exists and appears to be from Apollo Server 3 or newer; returns null\n * otherwise.*/\nexport function maybeCacheControlFromInfo(\n  info: GraphQLResolveInfo,\n): ResolveInfoCacheControl | null {\n  if ((info as any).cacheControl?.cacheHint?.restrict) {\n    return (info as any).cacheControl;\n  }\n  return null;\n}\n\n/** Given an `info` resolver argument, returns the cacheControl field if it\n * exists and appears to be from Apollo Server 3 or newer; throws\n * otherwise.*/\nexport function cacheControlFromInfo(\n  info: GraphQLResolveInfo,\n): ResolveInfoCacheControl {\n  if (!(\"cacheControl\" in info)) {\n    throw new Error(\n      \"The `info` argument does not appear to have a cacheControl field. \" +\n        \"Check that you are using Apollo Server 3 or newer and that you aren't using \" +\n        \"ApolloServerPluginCacheControlDisabled.\",\n    );\n  }\n  if (!(info as any).cacheControl?.cacheHint?.restrict) {\n    throw new Error(\n      \"The `info` argument has a cacheControl field but it does not appear to be from Apollo\" +\n        \"Server 3 or newer. Check that you are using Apollo Server 3 or newer and that you aren't using \" +\n        \"ApolloServerPluginCacheControlDisabled.\",\n    );\n  }\n  return (info as any).cacheControl;\n}\n/LICENSE\u0004]MIT License\n\nCopyright (c) 2022 Apollo Graph, Inc. (Formerly Meteor Development Group, Inc.)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n/README.md\u0002\u000e# Cache Control types\n\nThis package exports various TypeScript types related to Apollo Server's cache\npolicy calculation.\n\nSpecifically, it gives a type-safe way to get the `info.cacheControl` field in resolvers. Either declare your resolver's `info` argument to be of type `GraphQLResolveInfoWithCacheControl` (perhaps with the graphql-code-generator typescript-resolvers customResolveInfo option), or use the `maybeCacheControlFromInfo` or `cacheControlFromInfo` functions to extract `info.cacheControl` in a type-safe way.\n/dist/index.d.ts.map\u0003[{\"version\":3,\"file\":\"index.d.ts\",\"sourceRoot\":\"\",\"sources\":[\"../src/index.ts\"],\"names\":[],\"mappings\":\"AAKA,OAAO,KAAK,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAMxE,oBAAY,UAAU,GAAG,QAAQ,GAAG,SAAS,CAAC;AAM9C,MAAM,WAAW,SAAS;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,UAAU,CAAC;CACpB;AAMD,MAAM,WAAW,WAAY,SAAQ,SAAS;IAK5C,OAAO,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI,CAAC;IAO/B,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI,CAAC;IAMhC,iBAAiB,IAAI,QAAQ,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;CACjD;AAMD,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,WAAW,CAAC;IAGvB,YAAY,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI,CAAC;IAEpC,iBAAiB,CAAC,CAAC,EAAE,oBAAoB,GAAG,SAAS,GAAG,SAAS,CAAC;CACnE;AAMD,MAAM,WAAW,kCACf,SAAQ,IAAI,CAAC,kBAAkB,EAAE,cAAc,CAAC;IAYhD,YAAY,EAAE,uBAAuB,CAAC;CACvC;AAKD,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,kBAAkB,GACvB,uBAAuB,GAAG,IAAI,CAKhC;AAKD,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,kBAAkB,GACvB,uBAAuB,CAgBzB\"}"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QGFwb2xsby9zZXJ2ZXItZ2F0ZXdheS1pbnRlcmZhY2VAMS4xLjA=",
    "content": "/dist/index.d.ts\rpimport type { KeyValueCache } from '@apollo/utils.keyvaluecache';\nimport type { DocumentNode, ExecutionResult, GraphQLError, GraphQLFormattedError, GraphQLSchema, OperationDefinitionNode } from 'graphql';\nimport type { Logger } from '@apollo/utils.logger';\nimport type { Trace } from '@apollo/usage-reporting-protobuf';\nimport type { FetcherHeaders } from '@apollo/utils.fetcher';\nexport interface GatewayInterface {\n    onSchemaLoadOrUpdate(callback: GatewaySchemaLoadOrUpdateCallback): GatewayUnsubscriber;\n    load(options: {\n        apollo: GatewayApolloConfig;\n    }): Promise<GatewayLoadResult>;\n    stop(): Promise<void>;\n}\nexport type GatewaySchemaLoadOrUpdateCallback = (schemaContext: {\n    apiSchema: GraphQLSchema;\n    coreSupergraphSdl: string;\n}) => void;\nexport type GatewayUnsubscriber = () => void;\nexport interface GatewayApolloConfig {\n    key?: string;\n    keyHash?: string;\n    graphRef?: string;\n}\nexport interface GatewayLoadResult {\n    executor: GatewayExecutor | null;\n}\nexport type GatewayExecutor = (requestContext: GatewayGraphQLRequestContext) => Promise<GatewayExecutionResult>;\nexport type GatewayExecutionResult = ExecutionResult<Record<string, any>, Record<string, any>>;\nexport interface GatewayGraphQLRequestContext<TContext = Record<string, any>> {\n    readonly request: GatewayGraphQLRequest;\n    readonly response?: GatewayGraphQLResponse;\n    logger: Logger;\n    readonly schema: GraphQLSchema;\n    readonly schemaHash: GatewaySchemaHash;\n    readonly context: TContext;\n    readonly cache: KeyValueCache;\n    readonly queryHash: string;\n    readonly document: DocumentNode;\n    readonly source: string;\n    readonly operationName: string | null;\n    readonly operation: OperationDefinitionNode;\n    readonly errors?: ReadonlyArray<GraphQLError>;\n    readonly metrics: GatewayGraphQLRequestMetrics;\n    debug?: boolean;\n    readonly overallCachePolicy: any;\n    readonly requestIsBatched?: boolean;\n}\nexport interface GatewayGraphQLRequest {\n    query?: string;\n    operationName?: string;\n    variables?: Record<string, any>;\n    extensions?: Record<string, any>;\n    http?: GatewayHTTPRequest;\n}\nexport interface GatewayHTTPRequest {\n    readonly method: string;\n    readonly url: string;\n    readonly headers: FetcherHeaders;\n}\nexport interface GatewayGraphQLResponse {\n    data?: Record<string, any> | null;\n    errors?: ReadonlyArray<GraphQLFormattedError>;\n    extensions?: Record<string, any>;\n    http?: GatewayHTTPResponse;\n}\nexport interface GatewayHTTPResponse {\n    readonly headers: FetcherHeaders;\n    status?: number;\n}\nexport type GatewaySchemaHash = string & {\n    __fauxpaque: 'SchemaHash';\n};\nexport interface NonFtv1ErrorPath {\n    subgraph: string;\n    path: GraphQLError['path'];\n}\nexport interface GatewayGraphQLRequestMetrics {\n    captureTraces?: boolean;\n    persistedQueryHit?: boolean;\n    persistedQueryRegister?: boolean;\n    responseCacheHit?: boolean;\n    forbiddenOperation?: boolean;\n    registeredOperation?: boolean;\n    startHrTime?: [number, number];\n    queryPlanTrace?: Trace.QueryPlanNode;\n    nonFtv1ErrorPaths?: NonFtv1ErrorPath[];\n}\nexport interface GatewayCachePolicy extends GatewayCacheHint {\n    replace(hint: GatewayCacheHint): void;\n    restrict(hint: GatewayCacheHint): void;\n    policyIfCacheable(): Required<GatewayCacheHint> | null;\n}\nexport interface GatewayCacheHint {\n    maxAge?: number;\n    scope?: any;\n}\n//# sourceMappingURL=index.d.ts.map/src/index.ts\u0011import type { KeyValueCache } from '@apollo/utils.keyvaluecache';\nimport type {\n  DocumentNode,\n  ExecutionResult,\n  GraphQLError,\n  GraphQLFormattedError,\n  GraphQLSchema,\n  OperationDefinitionNode,\n} from 'graphql';\nimport type { Logger } from '@apollo/utils.logger';\nimport type { Trace } from '@apollo/usage-reporting-protobuf';\nimport type { FetcherHeaders } from '@apollo/utils.fetcher';\n\nexport interface GatewayInterface {\n  onSchemaLoadOrUpdate(\n    callback: GatewaySchemaLoadOrUpdateCallback,\n  ): GatewayUnsubscriber;\n  load(options: { apollo: GatewayApolloConfig }): Promise<GatewayLoadResult>;\n  stop(): Promise<void>;\n}\n\nexport type GatewaySchemaLoadOrUpdateCallback = (schemaContext: {\n  apiSchema: GraphQLSchema;\n  coreSupergraphSdl: string;\n}) => void;\n\nexport type GatewayUnsubscriber = () => void;\n\nexport interface GatewayApolloConfig {\n  key?: string;\n  keyHash?: string;\n  graphRef?: string;\n}\n\nexport interface GatewayLoadResult {\n  executor: GatewayExecutor | null;\n}\n\nexport type GatewayExecutor = (\n  requestContext: GatewayGraphQLRequestContext,\n) => Promise<GatewayExecutionResult>;\n\nexport type GatewayExecutionResult = ExecutionResult<\n  Record<string, any>,\n  Record<string, any>\n>;\n\n// Note that the default value for TContext is the same as in AS3, not\n// BaseContext.\nexport interface GatewayGraphQLRequestContext<TContext = Record<string, any>> {\n  readonly request: GatewayGraphQLRequest;\n  readonly response?: GatewayGraphQLResponse;\n  logger: Logger;\n  readonly schema: GraphQLSchema;\n  readonly schemaHash: GatewaySchemaHash;\n  readonly context: TContext;\n  readonly cache: KeyValueCache;\n  readonly queryHash: string;\n  readonly document: DocumentNode;\n  readonly source: string;\n  readonly operationName: string | null;\n  readonly operation: OperationDefinitionNode;\n  readonly errors?: ReadonlyArray<GraphQLError>;\n  readonly metrics: GatewayGraphQLRequestMetrics;\n  debug?: boolean;\n  // In AS3 and AS4, this field is always set and is a GatewayCachePolicy, but\n  // in AS2 it is not always set and is only a GatewayCacheHint. We can't just\n  // declare this as `readonly overallCachePolicy?: GatewayCachePolicy |\n  // GatewayCacheHint` because then older versions of Gateway built against AS3\n  // types will fail to build. Gateway's own code always probes this field at\n  // runtime before using it anyway, so let's just make everything build by\n  // declaring this as `any`.\n  readonly overallCachePolicy: any;\n  // This was only added in v3.11/v4.1, so we don't want to declare that it's\n  // required. (In fact, we made it optional in v3.11.1 for this very reason.)\n  readonly requestIsBatched?: boolean;\n}\n\nexport interface GatewayGraphQLRequest {\n  query?: string;\n  operationName?: string;\n  variables?: Record<string, any>;\n  extensions?: Record<string, any>;\n  http?: GatewayHTTPRequest;\n}\n\nexport interface GatewayHTTPRequest {\n  readonly method: string;\n  readonly url: string;\n  readonly headers: FetcherHeaders;\n}\n\nexport interface GatewayGraphQLResponse {\n  data?: Record<string, any> | null;\n  errors?: ReadonlyArray<GraphQLFormattedError>;\n  extensions?: Record<string, any>;\n  http?: GatewayHTTPResponse;\n}\n\nexport interface GatewayHTTPResponse {\n  readonly headers: FetcherHeaders;\n  status?: number;\n}\n\nexport type GatewaySchemaHash = string & { __fauxpaque: 'SchemaHash' };\n\nexport interface NonFtv1ErrorPath {\n  subgraph: string;\n  path: GraphQLError['path'];\n}\n\nexport interface GatewayGraphQLRequestMetrics {\n  captureTraces?: boolean;\n  persistedQueryHit?: boolean;\n  persistedQueryRegister?: boolean;\n  responseCacheHit?: boolean;\n  forbiddenOperation?: boolean;\n  registeredOperation?: boolean;\n  startHrTime?: [number, number];\n  queryPlanTrace?: Trace.QueryPlanNode;\n  nonFtv1ErrorPaths?: NonFtv1ErrorPath[];\n}\n\nexport interface GatewayCachePolicy extends GatewayCacheHint {\n  replace(hint: GatewayCacheHint): void;\n  restrict(hint: GatewayCacheHint): void;\n  policyIfCacheable(): Required<GatewayCacheHint> | null;\n}\n\nexport interface GatewayCacheHint {\n  maxAge?: number;\n  // In AS3, this field is an enum. In TypeScript, enums are not structurally\n  // typed: you need to actually refer directly to the enum's definition to\n  // produce a value of its type in a typesafe way. Doing that would prevent us\n  // from severing the dependency on apollo-server-types (AS3), so instead we\n  // just use 'any'. The legal runtime values of this fields are the strings\n  // `PUBLIC` and `PRIVATE`.\n  scope?: any;\n}\n/README.md\u0004# Apollo Server/Gateway interface\n\nThis package defines TypeScript types for the interface between Apollo Server and Apollo Gateway. It contains no runtime code.\n\nThe types in this package describe the API as of Gateway 0.35.0 (ie, with onSchemaLoadOrUpdate). It is extracted from the Apollo Server 3 `apollo-server-types` package. Most of the type names have been changed to start with `Gateway`, so that they coexist better with similarly-named types. (Because TypeScript is generally structurally typed, this is OK.)\n\nNote that the cache scope field (eg, on `requestContext.overallCachePolicy.scope`) is defined as `any` in this package. That's because in AS3 this type is an enum, and enums in TypeScript are _not_ structurally typed. So we can't actually create an object of this type without depending on AS3 (or updating AS3 to get its definition from somewhere shared).\n\nWe have updated `@apollo/gateway` (v0 and v2) to define its types from this package rather than `apollo-server-types`. This allows Gateway to be compatible with both AS3 and AS4 (and even AS2, for Gateway 0.x) without needing to pull either package's code into the TypeScript build.\n\nApollo Server 4 directly depends on this package and uses its types to construct its calls to the Gateway.\n/dist/index.d.ts.map\r.{\"version\":3,\"file\":\"index.d.ts\",\"sourceRoot\":\"\",\"sources\":[\"../src/index.ts\"],\"names\":[],\"mappings\":\"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\"}/package.json\u0003{\n  \"name\": \"@apollo/server-gateway-interface\",\n  \"version\": \"1.1.0\",\n  \"description\": \"Interface used to connect Apollo Gateway to Apollo Server\",\n  \"type\": \"module\",\n  \"main\": \"\",\n  \"types\": \"dist/index.d.ts\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/apollographql/apollo-server\",\n    \"directory\": \"packages/gateway-interface\"\n  },\n  \"keywords\": [],\n  \"author\": \"Apollo <packages@apollographql.com>\",\n  \"license\": \"MIT\",\n  \"bugs\": {\n    \"url\": \"https://github.com/apollographql/apollo-server/issues\"\n  },\n  \"homepage\": \"https://github.com/apollographql/apollo-server#readme\",\n  \"dependencies\": {\n    \"@apollo/utils.fetcher\": \"^2.0.0\",\n    \"@apollo/utils.logger\": \"^2.0.0\",\n    \"@apollo/utils.keyvaluecache\": \"^2.1.0\",\n    \"@apollo/usage-reporting-protobuf\": \"^4.0.0\"\n  },\n  \"peerDependencies\": {\n    \"graphql\": \"14.x || 15.x || 16.x\"\n  },\n  \"volta\": {\n    \"extends\": \"../../package.json\"\n  }\n}\n/dist/index.js,export {};\n//# sourceMappingURL=index.js.map/dist/index.js.mapf{\"version\":3,\"file\":\"index.js\",\"sourceRoot\":\"\",\"sources\":[\"../src/index.ts\"],\"names\":[],\"mappings\":\"\"}"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QGFwb2xsby9zZXJ2ZXJANC4xLjE=",
    "content": "\u0001$/src/plugin/drainHttpServer/index.ts\u0004iimport type http from 'http';\nimport type { ApolloServerPlugin } from '../../externalTypes/index.js';\nimport { Stopper } from './stoppable.js';\n\n/**\n * Options for ApolloServerPluginDrainHttpServer.\n */\nexport interface ApolloServerPluginDrainHttpServerOptions {\n  /**\n   * The http.Server (or https.Server, etc) to drain. Required.\n   */\n  httpServer: http.Server;\n  /**\n   * How long to wait before forcefully closing non-idle connections.\n   * Defaults to 10_000 (ten seconds).\n   */\n  stopGracePeriodMillis?: number;\n}\n\n/**\n * This plugin is used with apollo-server-express and other framework\n * integrations to drain your HTTP server on shutdown.\n * See https://www.apollographql.com/docs/apollo-server/api/plugin/drain-http-server/\n * for details.\n */\nexport function ApolloServerPluginDrainHttpServer(\n  options: ApolloServerPluginDrainHttpServerOptions,\n): ApolloServerPlugin {\n  const stopper = new Stopper(options.httpServer);\n  return {\n    async serverWillStart() {\n      return {\n        async drainServer() {\n          await stopper.stop(options.stopGracePeriodMillis ?? 10_000);\n        },\n      };\n    },\n  };\n}\n(/dist/esm/plugin/disabled/index.d.ts.map\u0001{\"version\":3,\"file\":\"index.d.ts\",\"sourceRoot\":\"\",\"sources\":[\"../../../../src/plugin/disabled/index.ts\"],\"names\":[],\"mappings\":\"AAQA,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AActE,wBAAgB,sCAAsC,IAAI,kBAAkB,CAAC,WAAW,CAAC,CAExF;AAED,wBAAgB,qCAAqC,IAAI,kBAAkB,CAAC,WAAW,CAAC,CAEvF;AAED,wBAAgB,qCAAqC,IAAI,kBAAkB,CAAC,WAAW,CAAC,CAEvF;AAED,wBAAgB,yCAAyC,IAAI,kBAAkB,CAAC,WAAW,CAAC,CAE3F;AAED,wBAAgB,wCAAwC,IAAI,kBAAkB,CAAC,WAAW,CAAC,CAE1F\"}./dist/cjs/plugin/usageReporting/options.js.mapĉ{\"version\":3,\"file\":\"options.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../../src/plugin/usageReporting/options.ts\"],\"names\":[],\"mappings\":\"\"}$/plugin/drainHttpServer/package.json\u0001\u001b{\n  \"name\": \"@apollo/server/plugin/drainHttpServer\",\n  \"type\": \"module\",\n  \"main\": \"../../dist/cjs/plugin/drainHttpServer/index.js\",\n  \"module\": \"../../dist/esm/plugin/drainHttpServer/index.js\",\n  \"types\": \"../../dist/esm/plugin/drainHttpServer/index.d.ts\",\n  \"sideEffects\": false\n}\n/dist/cjs/preventCsrf.js.map\u0003{\"version\":3,\"file\":\"preventCsrf.js\",\"sourceRoot\":\"\",\"sources\":[\"../../src/preventCsrf.ts\"],\"names\":[],\"mappings\":\";;;;;;AAAA,sEAAuC;AACvC,uEAA4D;AAa/C,QAAA,uCAAuC,GAAG;IACrD,yBAAyB;IACzB,0BAA0B;CAC3B,CAAC;AAGF,MAAM,6BAA6B,GAAG;IACpC,mCAAmC;IACnC,qBAAqB;IACrB,YAAY;CACb,CAAC;AAqBF,SAAgB,WAAW,CACzB,OAAkB,EAClB,4BAAsC;IAEtC,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAOhD,IAAI,WAAW,KAAK,SAAS,EAAE;QAC7B,MAAM,iBAAiB,GAAG,yBAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACtD,IAAI,iBAAiB,KAAK,IAAI,EAAE;YAQ9B,OAAO;SACR;QACD,IAAI,CAAC,6BAA6B,CAAC,QAAQ,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAE;YAKtE,OAAO;SACR;KACF;IAMD,IACE,4BAA4B,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;QAC3C,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAClC,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IACjD,CAAC,CAAC,EACF;QACA,OAAO;KACR;IAED,MAAM,IAAI,yCAAe,CACvB,4EAA4E;QAC1E,0EAA0E;QAC1E,iBAAiB,6BAA6B,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe;QACxE,uDAAuD,4BAA4B,CAAC,IAAI,CACtF,IAAI,CACL,IAAI,CACR,CAAC;AACJ,CAAC;AArDD,kCAqDC\"} /dist/cjs/utils/isDefined.js.map{\"version\":3,\"file\":\"isDefined.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/utils/isDefined.ts\"],\"names\":[],\"mappings\":\";;;AAAA,SAAgB,SAAS,CAAI,CAA8B;IACzD,OAAO,CAAC,IAAI,IAAI,CAAC;AACnB,CAAC;AAFD,8BAEC\"}(/dist/esm/externalTypes/constructor.d.ts\fAimport type { Logger } from '@apollo/utils.logger';\nimport type { IExecutableSchemaDefinition } from '@graphql-tools/schema';\nimport type { DocumentNode, GraphQLFieldResolver, GraphQLFormattedError, GraphQLSchema, ParseOptions, ValidationRule } from 'graphql';\nimport type { KeyValueCache } from '@apollo/utils.keyvaluecache';\nimport type { GatewayInterface } from '@apollo/server-gateway-interface';\nimport type { ApolloServerPlugin } from './plugins.js';\nimport type { BaseContext } from './index.js';\nimport type { GraphQLExperimentalIncrementalExecutionResults } from '../incrementalDeliveryPolyfill.js';\nexport declare type DocumentStore = KeyValueCache<DocumentNode>;\nexport interface ApolloConfigInput {\n    key?: string;\n    graphRef?: string;\n    graphId?: string;\n    graphVariant?: string;\n}\nexport interface ApolloConfig {\n    key?: string;\n    keyHash?: string;\n    graphRef?: string;\n}\nexport interface PersistedQueryOptions {\n    cache?: KeyValueCache<string>;\n    ttl?: number | null;\n}\nexport interface CSRFPreventionOptions {\n    requestHeaders?: string[];\n}\ninterface ApolloServerOptionsBase<TContext extends BaseContext> {\n    formatError?: (formattedError: GraphQLFormattedError, error: unknown) => GraphQLFormattedError;\n    rootValue?: ((parsedQuery: DocumentNode) => unknown) | unknown;\n    validationRules?: Array<ValidationRule>;\n    fieldResolver?: GraphQLFieldResolver<any, TContext>;\n    cache?: KeyValueCache<string>;\n    includeStacktraceInErrorResponses?: boolean;\n    logger?: Logger;\n    allowBatchedHttpRequests?: boolean;\n    introspection?: boolean;\n    plugins?: ApolloServerPlugin<TContext>[];\n    persistedQueries?: PersistedQueryOptions | false;\n    stopOnTerminationSignals?: boolean;\n    apollo?: ApolloConfigInput;\n    nodeEnv?: string;\n    documentStore?: DocumentStore | null;\n    csrfPrevention?: CSRFPreventionOptions | boolean;\n    parseOptions?: ParseOptions;\n    __testing_incrementalExecutionResults?: GraphQLExperimentalIncrementalExecutionResults;\n}\ninterface ApolloServerOptionsWithGateway<TContext extends BaseContext> extends ApolloServerOptionsBase<TContext> {\n    gateway: GatewayInterface;\n    schema?: undefined;\n    typeDefs?: undefined;\n    resolvers?: undefined;\n}\ninterface ApolloServerOptionsWithSchema<TContext extends BaseContext> extends ApolloServerOptionsBase<TContext> {\n    schema: GraphQLSchema;\n    gateway?: undefined;\n    typeDefs?: undefined;\n    resolvers?: undefined;\n}\ninterface ApolloServerOptionsWithTypeDefs<TContext extends BaseContext> extends ApolloServerOptionsBase<TContext> {\n    typeDefs: IExecutableSchemaDefinition<TContext>['typeDefs'];\n    resolvers?: IExecutableSchemaDefinition<TContext>['resolvers'];\n    gateway?: undefined;\n    schema?: undefined;\n}\nexport declare type ApolloServerOptionsWithStaticSchema<TContext extends BaseContext> = ApolloServerOptionsWithSchema<TContext> | ApolloServerOptionsWithTypeDefs<TContext>;\nexport declare type ApolloServerOptions<TContext extends BaseContext> = ApolloServerOptionsWithGateway<TContext> | ApolloServerOptionsWithStaticSchema<TContext>;\nexport {};\n//# sourceMappingURL=constructor.d.ts.map$/dist/esm/plugin/traceTreeBuilder.js\u00186import { GraphQLError } from 'graphql';\nimport { Trace, google } from '@apollo/usage-reporting-protobuf';\nimport { UnreachableCaseError } from '../utils/UnreachableCaseError.js';\nfunction internalError(message) {\n    return new Error(`[internal apollo-server error] ${message}`);\n}\nexport class TraceTreeBuilder {\n    constructor(options) {\n        this.rootNode = new Trace.Node();\n        this.trace = new Trace({\n            root: this.rootNode,\n            fieldExecutionWeight: 1,\n        });\n        this.stopped = false;\n        this.nodes = new Map([\n            [responsePathAsString(), this.rootNode],\n        ]);\n        const { logger, sendErrors, maskedBy } = options;\n        if (!sendErrors || 'masked' in sendErrors) {\n            this.transformError = () => new GraphQLError('<masked>', {\n                extensions: { maskedBy },\n            });\n        }\n        else if ('transform' in sendErrors) {\n            this.transformError = sendErrors.transform;\n        }\n        else if ('unmodified' in sendErrors) {\n            this.transformError = null;\n        }\n        else {\n            throw new UnreachableCaseError(sendErrors);\n        }\n        this.logger = logger;\n    }\n    startTiming() {\n        if (this.startHrTime) {\n            throw internalError('startTiming called twice!');\n        }\n        if (this.stopped) {\n            throw internalError('startTiming called after stopTiming!');\n        }\n        this.trace.startTime = dateToProtoTimestamp(new Date());\n        this.startHrTime = process.hrtime();\n    }\n    stopTiming() {\n        if (!this.startHrTime) {\n            throw internalError('stopTiming called before startTiming!');\n        }\n        if (this.stopped) {\n            throw internalError('stopTiming called twice!');\n        }\n        this.trace.durationNs = durationHrTimeToNanos(process.hrtime(this.startHrTime));\n        this.trace.endTime = dateToProtoTimestamp(new Date());\n        this.stopped = true;\n    }\n    willResolveField(info) {\n        if (!this.startHrTime) {\n            throw internalError('willResolveField called before startTiming!');\n        }\n        if (this.stopped) {\n            throw internalError('willResolveField called after stopTiming!');\n        }\n        const path = info.path;\n        const node = this.newNode(path);\n        node.type = info.returnType.toString();\n        node.parentType = info.parentType.toString();\n        node.startTime = durationHrTimeToNanos(process.hrtime(this.startHrTime));\n        if (typeof path.key === 'string' && path.key !== info.fieldName) {\n            node.originalFieldName = info.fieldName;\n        }\n        return () => {\n            node.endTime = durationHrTimeToNanos(process.hrtime(this.startHrTime));\n        };\n    }\n    didEncounterErrors(errors) {\n        errors.forEach((err) => {\n            if (err.extensions?.serviceName) {\n                return;\n            }\n            const errorForReporting = this.transformAndNormalizeError(err);\n            if (errorForReporting === null) {\n                return;\n            }\n            this.addProtobufError(errorForReporting.path, errorToProtobufError(errorForReporting));\n        });\n    }\n    addProtobufError(path, error) {\n        if (!this.startHrTime) {\n            throw internalError('addProtobufError called before startTiming!');\n        }\n        if (this.stopped) {\n            throw internalError('addProtobufError called after stopTiming!');\n        }\n        let node = this.rootNode;\n        if (Array.isArray(path)) {\n            const specificNode = this.nodes.get(path.join('.'));\n            if (specificNode) {\n                node = specificNode;\n            }\n            else {\n                this.logger.warn(`Could not find node with path ${path.join('.')}; defaulting to put errors on root node.`);\n            }\n        }\n        node.error.push(error);\n    }\n    newNode(path) {\n        const node = new Trace.Node();\n        const id = path.key;\n        if (typeof id === 'number') {\n            node.index = id;\n        }\n        else {\n            node.responseName = id;\n        }\n        this.nodes.set(responsePathAsString(path), node);\n        const parentNode = this.ensureParentNode(path);\n        parentNode.child.push(node);\n        return node;\n    }\n    ensureParentNode(path) {\n        const parentPath = responsePathAsString(path.prev);\n        const parentNode = this.nodes.get(parentPath);\n        if (parentNode) {\n            return parentNode;\n        }\n        return this.newNode(path.prev);\n    }\n    transformAndNormalizeError(err) {\n        if (this.transformError) {\n            const clonedError = Object.assign(Object.create(Object.getPrototypeOf(err)), err);\n            const rewrittenError = this.transformError(clonedError);\n            if (rewrittenError === null) {\n                return null;\n            }\n            if (!(rewrittenError instanceof GraphQLError)) {\n                return err;\n            }\n            return new GraphQLError(rewrittenError.message, {\n                nodes: err.nodes,\n                source: err.source,\n                positions: err.positions,\n                path: err.path,\n                originalError: err.originalError,\n                extensions: rewrittenError.extensions || err.extensions,\n            });\n        }\n        return err;\n    }\n}\nfunction durationHrTimeToNanos(hrtime) {\n    return hrtime[0] * 1e9 + hrtime[1];\n}\nfunction responsePathAsString(p) {\n    if (p === undefined) {\n        return '';\n    }\n    let res = String(p.key);\n    while ((p = p.prev) !== undefined) {\n        res = `${p.key}.${res}`;\n    }\n    return res;\n}\nfunction errorToProtobufError(error) {\n    return new Trace.Error({\n        message: error.message,\n        location: (error.locations || []).map(({ line, column }) => new Trace.Location({ line, column })),\n        json: JSON.stringify(error),\n    });\n}\nexport function dateToProtoTimestamp(date) {\n    const totalMillis = +date;\n    const millis = totalMillis % 1000;\n    return new google.protobuf.Timestamp({\n        seconds: (totalMillis - millis) / 1000,\n        nanos: millis * 1e6,\n    });\n}\n//# sourceMappingURL=traceTreeBuilder.js.map\"/dist/esm/plugin/disabled/index.js\u0002function disabledPlugin(id) {\n    const plugin = {\n        __internal_plugin_id__: id,\n        __is_disabled_plugin__: true,\n    };\n    return plugin;\n}\nexport function ApolloServerPluginCacheControlDisabled() {\n    return disabledPlugin('CacheControl');\n}\nexport function ApolloServerPluginInlineTraceDisabled() {\n    return disabledPlugin('InlineTrace');\n}\nexport function ApolloServerPluginLandingPageDisabled() {\n    return disabledPlugin('LandingPageDisabled');\n}\nexport function ApolloServerPluginSchemaReportingDisabled() {\n    return disabledPlugin('SchemaReporting');\n}\nexport function ApolloServerPluginUsageReportingDisabled() {\n    return disabledPlugin('UsageReporting');\n}\n//# sourceMappingURL=index.js.map%/dist/esm/utils/urlForHttpServer.d.tsķ/// <reference types=\"node\" />\nimport type { Server } from 'http';\nexport declare function urlForHttpServer(httpServer: Server): string;\n//# sourceMappingURL=urlForHttpServer.d.ts.map-/dist/esm/plugin/landingPage/default/types.js,export {};\n//# sourceMappingURL=types.js.mapA/dist/esm/plugin/usageReporting/defaultSendOperationsAsTrace.d.tsimport type { Trace } from '@apollo/usage-reporting-protobuf';\nexport declare function defaultSendOperationsAsTrace(): (trace: Trace, statsReportKey: string) => boolean;\n//# sourceMappingURL=defaultSendOperationsAsTrace.d.ts.map/dist/cjs/package.json\u0013{\"type\":\"commonjs\"}/README.md\u0015\n# `@apollo/server`\n\n> This `@apollo/server` package is new with Apollo Server 4. Previous major versions of Apollo Server used a set of package names starting with `apollo-server`, such as `apollo-server`, `apollo-server-express`, `apollo-server-core`, etc.\n\n## A TypeScript/JavaScript GraphQL server\n\n**Apollo Server is an [open-source](https://github.com/apollographql/apollo-server), spec-compliant GraphQL server** that's compatible with any GraphQL client, including [Apollo Client](https://www.apollographql.com/docs/react). It's the best way to build a production-ready, self-documenting GraphQL API that can use data from any source.\n\n\nYou can use Apollo Server as:\n\n* A stand-alone GraphQL server\n* The GraphQL server for a [subgraph](https://www.apollographql.com/docs/federation/subgraphs/) in a federated supergraph\n* The gateway for a [federated supergraph](https://www.apollographql.com/docs/federation/)\n\nApollo Server provides a simple API for integrating with any Node.js web framework or serverless environment. The `@apollo/server` package itself ships with a minimally-configurable, standalone web server which handles CORS and body parsing out of the box. Integrations with other environments are community-maintained.\n\nApollo Server provides:\n\n*  **Straightforward setup**, so your client developers can start fetching data quickly\n*  **Incremental adoption**, enabling you to add features as they're needed\n*  **Universal compatibility** with any data source, any build tool, and any GraphQL client\n*  **Production readiness**, enabling you to confidently run your graph in production\n\n## Documentation\n\nFull documentation for Apollo Server is available on [our documentation site](https://www.apollographql.com/docs/apollo-server/). This README shows the basics of getting a server running (both standalone and with Express), but most features are only documented on our docs site.\n\n\n## Getting started: standalone server\n\n> You can also check out the [getting started](https://www.apollographql.com/docs/apollo-server/getting-started) guide in the Apollo Server docs for more details, including examples in both TypeScript and JavaScript.\n\nApollo Server's standalone server lets you get a GraphQL server up and running quickly without needing to set up an HTTP server yourself. It allows all the same configuration of GraphQL logic as the Express integration, but does not provide the ability to make fine-grained tweaks to the HTTP-specific behavior of your server.\n\nFirst, install Apollo Server and the JavaScript implementation of the core GraphQL algorithms:\n\n```\nnpm install @apollo/server graphql\n```\n\nThen, write the following to `server.mjs`. (By using the `.mjs` extension, Node lets you use the `await` keyword at the top level.)\n\n```js\nimport { ApolloServer } from '@apollo/server';\nimport { startStandaloneServer } from '@apollo/server/standalone';\n\n// The GraphQL schema\nconst typeDefs = `#graphql\n  type Query {\n    hello: String\n  }\n`;\n\n// A map of functions which return data for the schema.\nconst resolvers = {\n  Query: {\n    hello: () => 'world',\n  },\n};\n\nconst server = new ApolloServer({\n  typeDefs,\n  resolvers,\n});\n\nconst { url } = await startStandaloneServer(server);\nconsole.log(`🚀 Server ready at ${url}`);\n```\n\nNow run your server with:\n\n```\nnode server.mjs\n```\n\nOpen the URL it prints in a web browser. It will show [Apollo Sandbox](https://www.apollographql.com/docs/studio/explorer/sandbox/), a web-based tool for running GraphQL operations. Try running the operation `query { hello }`!\n\n\n## Getting started: Express middleware\n\nApollo Server's built-in Express middleware lets you run your GraphQL server as part of an app built with [Express](https://expressjs.com/), the most popular web framework for Node.\n\nFirst, install Apollo Server, the JavaScript implementation of the core GraphQL algorithms, Express, and two common Express middleware packages:\n\n```\nnpm install @apollo/server graphql express cors body-parser\n```\n\nThen, write the following to `server.mjs`. (By using the `.mjs` extension, Node lets you use the `await` keyword at the top level.)\n\n```js\nimport { ApolloServer } from '@apollo/server';\nimport { expressMiddleware } from '@apollo/server/express4';\nimport { ApolloServerPluginDrainHttpServer } from '@apollo/server/plugin/drainHttpServer'\nimport express from 'express';\nimport http from 'http';\nimport cors from 'cors';\nimport bodyParser from 'body-parser';\n\n// The GraphQL schema\nconst typeDefs = `#graphql\n  type Query {\n    hello: String\n  }\n`;\n\n// A map of functions which return data for the schema.\nconst resolvers = {\n  Query: {\n    hello: () => 'world',\n  },\n};\n\nconst app = express();\nconst httpServer = http.createServer(app);\n\n// Set up Apollo Server\nconst server = new ApolloServer({\n  typeDefs,\n  resolvers,\n  plugins: [ApolloServerPluginDrainHttpServer({ httpServer })],\n});\nawait server.start();\n\napp.use(\n  cors(),\n  bodyParser.json(),\n  expressMiddleware(server),\n);\n\nawait new Promise((resolve) => httpServer.listen({ port: 4000 }, resolve));\nconsole.log(`🚀 Server ready at http://localhost:4000`);\n```\n\nNow run your server with:\n\n```\nnode server.mjs\n```\n\nOpen the URL it prints in a web browser. It will show [Apollo Sandbox](https://www.apollographql.com/docs/studio/explorer/sandbox/), a web-based tool for running GraphQL operations. Try running the operation `query { hello }`!\n)/dist/cjs/plugin/drainHttpServer/index.js\u0002\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ApolloServerPluginDrainHttpServer = void 0;\nconst stoppable_js_1 = require(\"./stoppable.js\");\nfunction ApolloServerPluginDrainHttpServer(options) {\n    const stopper = new stoppable_js_1.Stopper(options.httpServer);\n    return {\n        async serverWillStart() {\n            return {\n                async drainServer() {\n                    await stopper.stop(options.stopGracePeriodMillis ?? 10000);\n                },\n            };\n        },\n    };\n}\nexports.ApolloServerPluginDrainHttpServer = ApolloServerPluginDrainHttpServer;\n//# sourceMappingURL=index.js.map\"/dist/cjs/determineApolloConfig.js\u0006\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.determineApolloConfig = void 0;\nconst utils_createhash_1 = require(\"@apollo/utils.createhash\");\nfunction determineApolloConfig(input) {\n    const apolloConfig = {};\n    const { APOLLO_KEY, APOLLO_GRAPH_REF, APOLLO_GRAPH_ID, APOLLO_GRAPH_VARIANT, } = process.env;\n    if (input?.key) {\n        apolloConfig.key = input.key;\n    }\n    else if (APOLLO_KEY) {\n        apolloConfig.key = APOLLO_KEY;\n    }\n    if (apolloConfig.key) {\n        apolloConfig.keyHash = (0, utils_createhash_1.createHash)('sha512')\n            .update(apolloConfig.key)\n            .digest('hex');\n    }\n    if (input?.graphRef) {\n        apolloConfig.graphRef = input.graphRef;\n    }\n    else if (APOLLO_GRAPH_REF) {\n        apolloConfig.graphRef = APOLLO_GRAPH_REF;\n    }\n    const graphId = input?.graphId ?? APOLLO_GRAPH_ID;\n    const graphVariant = input?.graphVariant ?? APOLLO_GRAPH_VARIANT;\n    if (apolloConfig.graphRef) {\n        if (graphId) {\n            throw new Error('Cannot specify both graph ref and graph ID. Please use ' +\n                '`apollo.graphRef` or `APOLLO_GRAPH_REF` without also setting the graph ID.');\n        }\n        if (graphVariant) {\n            throw new Error('Cannot specify both graph ref and graph variant. Please use ' +\n                '`apollo.graphRef` or `APOLLO_GRAPH_REF` without also setting the graph variant.');\n        }\n    }\n    else if (graphId) {\n        apolloConfig.graphRef = graphVariant\n            ? `${graphId}@${graphVariant}`\n            : graphId;\n    }\n    return apolloConfig;\n}\nexports.determineApolloConfig = determineApolloConfig;\n//# sourceMappingURL=determineApolloConfig.js.map&/dist/esm/plugin/cacheControl/index.js'import { getNamedType, isCompositeType, isInterfaceType, isObjectType, responsePathAsArray, } from 'graphql';\nimport { newCachePolicy } from '../../cachePolicy.js';\nimport { internalPlugin } from '../../internalPlugin.js';\nimport LRUCache from 'lru-cache';\nexport function ApolloServerPluginCacheControl(options = Object.create(null)) {\n    let typeAnnotationCache;\n    let fieldAnnotationCache;\n    return internalPlugin({\n        __internal_plugin_id__: 'CacheControl',\n        __is_disabled_plugin__: false,\n        async serverWillStart({ schema }) {\n            typeAnnotationCache = new LRUCache({\n                max: Object.values(schema.getTypeMap()).filter(isCompositeType)\n                    .length,\n            });\n            fieldAnnotationCache = new LRUCache({\n                max: Object.values(schema.getTypeMap())\n                    .filter(isObjectType)\n                    .flatMap((t) => Object.values(t.getFields())).length +\n                    Object.values(schema.getTypeMap())\n                        .filter(isInterfaceType)\n                        .flatMap((t) => Object.values(t.getFields())).length,\n            });\n            return undefined;\n        },\n        async requestDidStart(requestContext) {\n            function memoizedCacheAnnotationFromType(t) {\n                const existing = typeAnnotationCache.get(t);\n                if (existing) {\n                    return existing;\n                }\n                const annotation = cacheAnnotationFromType(t);\n                typeAnnotationCache.set(t, annotation);\n                return annotation;\n            }\n            function memoizedCacheAnnotationFromField(field) {\n                const existing = fieldAnnotationCache.get(field);\n                if (existing) {\n                    return existing;\n                }\n                const annotation = cacheAnnotationFromField(field);\n                fieldAnnotationCache.set(field, annotation);\n                return annotation;\n            }\n            const defaultMaxAge = options.defaultMaxAge ?? 0;\n            const calculateHttpHeaders = options.calculateHttpHeaders ?? true;\n            const { __testing__cacheHints } = options;\n            return {\n                async executionDidStart() {\n                    if (isRestricted(requestContext.overallCachePolicy)) {\n                        const fakeFieldPolicy = newCachePolicy();\n                        return {\n                            willResolveField({ info }) {\n                                info.cacheControl = {\n                                    setCacheHint: (dynamicHint) => {\n                                        fakeFieldPolicy.replace(dynamicHint);\n                                    },\n                                    cacheHint: fakeFieldPolicy,\n                                    cacheHintFromType: memoizedCacheAnnotationFromType,\n                                };\n                            },\n                        };\n                    }\n                    return {\n                        willResolveField({ info }) {\n                            const fieldPolicy = newCachePolicy();\n                            let inheritMaxAge = false;\n                            const targetType = getNamedType(info.returnType);\n                            if (isCompositeType(targetType)) {\n                                const typeAnnotation = memoizedCacheAnnotationFromType(targetType);\n                                fieldPolicy.replace(typeAnnotation);\n                                inheritMaxAge = !!typeAnnotation.inheritMaxAge;\n                            }\n                            const fieldAnnotation = memoizedCacheAnnotationFromField(info.parentType.getFields()[info.fieldName]);\n                            if (fieldAnnotation.inheritMaxAge &&\n                                fieldPolicy.maxAge === undefined) {\n                                inheritMaxAge = true;\n                                if (fieldAnnotation.scope) {\n                                    fieldPolicy.replace({ scope: fieldAnnotation.scope });\n                                }\n                            }\n                            else {\n                                fieldPolicy.replace(fieldAnnotation);\n                            }\n                            info.cacheControl = {\n                                setCacheHint: (dynamicHint) => {\n                                    fieldPolicy.replace(dynamicHint);\n                                },\n                                cacheHint: fieldPolicy,\n                                cacheHintFromType: memoizedCacheAnnotationFromType,\n                            };\n                            return () => {\n                                if (fieldPolicy.maxAge === undefined &&\n                                    ((isCompositeType(targetType) && !inheritMaxAge) ||\n                                        !info.path.prev)) {\n                                    fieldPolicy.restrict({ maxAge: defaultMaxAge });\n                                }\n                                if (__testing__cacheHints && isRestricted(fieldPolicy)) {\n                                    const path = responsePathAsArray(info.path).join('.');\n                                    if (__testing__cacheHints.has(path)) {\n                                        throw Error(\"shouldn't happen: addHint should only be called once per path\");\n                                    }\n                                    __testing__cacheHints.set(path, {\n                                        maxAge: fieldPolicy.maxAge,\n                                        scope: fieldPolicy.scope,\n                                    });\n                                }\n                                requestContext.overallCachePolicy.restrict(fieldPolicy);\n                            };\n                        },\n                    };\n                },\n                async willSendResponse(requestContext) {\n                    if (!calculateHttpHeaders) {\n                        return;\n                    }\n                    const { response, overallCachePolicy } = requestContext;\n                    const existingCacheControlHeader = parseExistingCacheControlHeader(response.http.headers.get('cache-control'));\n                    if (existingCacheControlHeader.kind === 'unparsable') {\n                        return;\n                    }\n                    const cachePolicy = newCachePolicy();\n                    cachePolicy.replace(overallCachePolicy);\n                    if (existingCacheControlHeader.kind === 'parsable-and-cacheable') {\n                        cachePolicy.restrict(existingCacheControlHeader.hint);\n                    }\n                    const policyIfCacheable = cachePolicy.policyIfCacheable();\n                    if (policyIfCacheable &&\n                        existingCacheControlHeader.kind !== 'uncacheable' &&\n                        response.body.kind === 'single' &&\n                        !response.body.singleResult.errors) {\n                        response.http.headers.set('cache-control', `max-age=${policyIfCacheable.maxAge}, ${policyIfCacheable.scope.toLowerCase()}`);\n                    }\n                    else if (calculateHttpHeaders !== 'if-cacheable') {\n                        response.http.headers.set('cache-control', CACHE_CONTROL_HEADER_UNCACHEABLE);\n                    }\n                },\n            };\n        },\n    });\n}\nconst CACHE_CONTROL_HEADER_CACHEABLE_REGEXP = /^max-age=(\\d+), (public|private)$/;\nconst CACHE_CONTROL_HEADER_UNCACHEABLE = 'no-store';\nfunction parseExistingCacheControlHeader(header) {\n    if (!header) {\n        return { kind: 'no-header' };\n    }\n    if (header === CACHE_CONTROL_HEADER_UNCACHEABLE) {\n        return { kind: 'uncacheable' };\n    }\n    const match = CACHE_CONTROL_HEADER_CACHEABLE_REGEXP.exec(header);\n    if (!match) {\n        return { kind: 'unparsable' };\n    }\n    return {\n        kind: 'parsable-and-cacheable',\n        hint: {\n            maxAge: +match[1],\n            scope: match[2] === 'public' ? 'PUBLIC' : 'PRIVATE',\n        },\n    };\n}\nfunction cacheAnnotationFromDirectives(directives) {\n    if (!directives)\n        return undefined;\n    const cacheControlDirective = directives.find((directive) => directive.name.value === 'cacheControl');\n    if (!cacheControlDirective)\n        return undefined;\n    if (!cacheControlDirective.arguments)\n        return undefined;\n    const maxAgeArgument = cacheControlDirective.arguments.find((argument) => argument.name.value === 'maxAge');\n    const scopeArgument = cacheControlDirective.arguments.find((argument) => argument.name.value === 'scope');\n    const inheritMaxAgeArgument = cacheControlDirective.arguments.find((argument) => argument.name.value === 'inheritMaxAge');\n    const scopeString = scopeArgument?.value?.kind === 'EnumValue'\n        ? scopeArgument.value.value\n        : undefined;\n    const scope = scopeString === 'PUBLIC' || scopeString === 'PRIVATE'\n        ? scopeString\n        : undefined;\n    if (inheritMaxAgeArgument?.value?.kind === 'BooleanValue' &&\n        inheritMaxAgeArgument.value.value) {\n        return { inheritMaxAge: true, scope };\n    }\n    return {\n        maxAge: maxAgeArgument?.value?.kind === 'IntValue'\n            ? parseInt(maxAgeArgument.value.value)\n            : undefined,\n        scope,\n    };\n}\nfunction cacheAnnotationFromType(t) {\n    if (t.astNode) {\n        const hint = cacheAnnotationFromDirectives(t.astNode.directives);\n        if (hint) {\n            return hint;\n        }\n    }\n    if (t.extensionASTNodes) {\n        for (const node of t.extensionASTNodes) {\n            const hint = cacheAnnotationFromDirectives(node.directives);\n            if (hint) {\n                return hint;\n            }\n        }\n    }\n    return {};\n}\nfunction cacheAnnotationFromField(field) {\n    if (field.astNode) {\n        const hint = cacheAnnotationFromDirectives(field.astNode.directives);\n        if (hint) {\n            return hint;\n        }\n    }\n    return {};\n}\nfunction isRestricted(hint) {\n    return hint.maxAge !== undefined || hint.scope !== undefined;\n}\n//# sourceMappingURL=index.js.map/src/internalPlugin.ts\u0006\u0018import type { BaseContext, ApolloServerPlugin } from './externalTypes/index.js';\n\n// This file's exports should not be exported from the overall\n// @apollo/server module.\n\n// The internal plugins implement this interface which\n// ApolloServer.ensurePluginInstantiation uses to figure out if the plugins have\n// already been installed (or explicitly disabled via the matching Disable\n// plugins).\nexport interface InternalApolloServerPlugin<TContext extends BaseContext>\n  extends ApolloServerPlugin<TContext> {\n  // Used to identify a few specific plugins that are instantiated\n  // by default if not explicitly used or disabled.\n  __internal_plugin_id__: InternalPluginId;\n  __is_disabled_plugin__: boolean;\n}\n\n// Helper function for writing internal plugins which lets you write an object\n// that is type-checked as InternalApolloServerPlugin but is still only of type\n// ApolloServerPlugin (as appropriate for externally-exported plugin-returning\n// functions).\nexport function internalPlugin<TContext extends BaseContext>(\n  p: InternalApolloServerPlugin<TContext>,\n): ApolloServerPlugin<TContext> {\n  return p;\n}\n\nexport type InternalPluginId =\n  | 'CacheControl'\n  | 'LandingPageDisabled'\n  | 'SchemaReporting'\n  | 'InlineTrace'\n  | 'UsageReporting';\n\nexport function pluginIsInternal<TContext extends BaseContext>(\n  plugin: ApolloServerPlugin<TContext>,\n): plugin is InternalApolloServerPlugin<TContext> {\n  // We could call the function and compare it to the list above, but this seems\n  // good enough.\n  return '__internal_plugin_id__' in plugin;\n}\n/dist/esm/internalPlugin.jsĺexport function internalPlugin(p) {\n    return p;\n}\nexport function pluginIsInternal(plugin) {\n    return '__internal_plugin_id__' in plugin;\n}\n//# sourceMappingURL=internalPlugin.js.map%/dist/esm/internalErrorClasses.js.map\t{\"version\":3,\"file\":\"internalErrorClasses.js\",\"sourceRoot\":\"\",\"sources\":[\"../../src/internalErrorClasses.ts\"],\"names\":[],\"mappings\":\"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\"}+/dist/esm/plugin/schemaReporting/index.d.ts\u0002\u0015import type { ApolloServerPlugin } from '../../externalTypes/index.js';\nimport type { Fetcher } from '@apollo/utils.fetcher';\nexport interface ApolloServerPluginSchemaReportingOptions {\n    initialDelayMaxMs?: number;\n    overrideReportedSchema?: string;\n    endpointUrl?: string;\n    fetcher?: Fetcher;\n}\nexport declare function ApolloServerPluginSchemaReporting({ initialDelayMaxMs, overrideReportedSchema, endpointUrl, fetcher, }?: ApolloServerPluginSchemaReportingOptions): ApolloServerPlugin;\n//# sourceMappingURL=index.d.ts.map/dist/cjs/internalPlugin.js\u0001\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.pluginIsInternal = exports.internalPlugin = void 0;\nfunction internalPlugin(p) {\n    return p;\n}\nexports.internalPlugin = internalPlugin;\nfunction pluginIsInternal(plugin) {\n    return '__internal_plugin_id__' in plugin;\n}\nexports.pluginIsInternal = pluginIsInternal;\n//# sourceMappingURL=internalPlugin.js.map+/dist/esm/plugin/usageReporting/plugin.d.ts\u0002import { Trace } from '@apollo/usage-reporting-protobuf';\nimport type { ApolloServerPlugin, BaseContext } from '../../externalTypes/index.js';\nimport type { ApolloServerPluginUsageReportingOptions, SendValuesBaseOptions } from './options.js';\nimport type { HeaderMap } from '../../utils/HeaderMap.js';\nexport declare function ApolloServerPluginUsageReporting<TContext extends BaseContext>(options?: ApolloServerPluginUsageReportingOptions<TContext>): ApolloServerPlugin<TContext>;\nexport declare function makeHTTPRequestHeaders(http: Trace.IHTTP, headers: HeaderMap, sendHeaders?: SendValuesBaseOptions): void;\n//# sourceMappingURL=plugin.d.ts.map</dist/cjs/plugin/usageReporting/operationDerivedDataCache.js\u0006\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.operationDerivedDataCacheKey = exports.createOperationDerivedDataCache = void 0;\nconst lru_cache_1 = __importDefault(require(\"lru-cache\"));\nfunction createOperationDerivedDataCache({ logger, }) {\n    let lastWarn;\n    let lastDisposals = 0;\n    return new lru_cache_1.default({\n        sizeCalculation(obj) {\n            return Buffer.byteLength(JSON.stringify(obj), 'utf8');\n        },\n        maxSize: Math.pow(2, 20) * 10,\n        dispose() {\n            lastDisposals++;\n            if (!lastWarn || new Date().getTime() - lastWarn.getTime() > 60000) {\n                lastWarn = new Date();\n                logger.warn([\n                    'This server is processing a high number of unique operations.  ',\n                    `A total of ${lastDisposals} records have been `,\n                    'ejected from the ApolloServerPluginUsageReporting signature cache in the past ',\n                    'interval.  If you see this warning frequently, please open an ',\n                    'issue on the Apollo Server repository.',\n                ].join(''));\n                lastDisposals = 0;\n            }\n        },\n    });\n}\nexports.createOperationDerivedDataCache = createOperationDerivedDataCache;\nfunction operationDerivedDataCacheKey(queryHash, operationName) {\n    return `${queryHash}${operationName && ':' + operationName}`;\n}\nexports.operationDerivedDataCacheKey = operationDerivedDataCacheKey;\n//# sourceMappingURL=operationDerivedDataCache.js.map!/dist/esm/express4/index.d.ts.map\u0003,{\"version\":3,\"file\":\"index.d.ts\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/express4/index.ts\"],\"names\":[],\"mappings\":\"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AACnC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EACV,WAAW,EACX,eAAe,EAEhB,MAAM,2BAA2B,CAAC;AAGnC,MAAM,WAAW,8BAA8B;IAC7C,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC;IACrB,GAAG,EAAE,OAAO,CAAC,QAAQ,CAAC;CACvB;AAED,MAAM,WAAW,wBAAwB,CAAC,QAAQ,SAAS,WAAW;IACpE,OAAO,CAAC,EAAE,eAAe,CAAC,CAAC,8BAA8B,CAAC,EAAE,QAAQ,CAAC,CAAC;CACvE;AAED,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,YAAY,CAAC,WAAW,CAAC,EACjC,OAAO,CAAC,EAAE,wBAAwB,CAAC,WAAW,CAAC,GAC9C,OAAO,CAAC,cAAc,CAAC;AAC1B,wBAAgB,iBAAiB,CAAC,QAAQ,SAAS,WAAW,EAC5D,MAAM,EAAE,YAAY,CAAC,QAAQ,CAAC,EAC9B,OAAO,EAAE,YAAY,CAAC,wBAAwB,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC,GACnE,OAAO,CAAC,cAAc,CAAC\"}&/dist/esm/plugin/disabled/index.js.map\u0002e{\"version\":3,\"file\":\"index.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../../src/plugin/disabled/index.ts\"],\"names\":[],\"mappings\":\"AAcA,SAAS,cAAc,CAAC,EAAoB;IAC1C,MAAM,MAAM,GAA4C;QACtD,sBAAsB,EAAE,EAAE;QAC1B,sBAAsB,EAAE,IAAI;KAC7B,CAAC;IACF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,sCAAsC;IACpD,OAAO,cAAc,CAAC,cAAc,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,qCAAqC;IACnD,OAAO,cAAc,CAAC,aAAa,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,qCAAqC;IACnD,OAAO,cAAc,CAAC,qBAAqB,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,yCAAyC;IACvD,OAAO,cAAc,CAAC,iBAAiB,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,wCAAwC;IACtD,OAAO,cAAc,CAAC,gBAAgB,CAAC,CAAC;AAC1C,CAAC\"}./dist/cjs/externalTypes/requestPipeline.js.mapĎ{\"version\":3,\"file\":\"requestPipeline.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/externalTypes/requestPipeline.ts\"],\"names\":[],\"mappings\":\"\"} /dist/cjs/utils/HeaderMap.js.map\u0002-{\"version\":3,\"file\":\"HeaderMap.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/utils/HeaderMap.ts\"],\"names\":[],\"mappings\":\";;;AAAA,MAAa,SAAU,SAAQ,GAAmB;IACvC,GAAG,CAAC,GAAW,EAAE,KAAa;QACrC,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC,CAAC;IAC7C,CAAC;IAEQ,GAAG,CAAC,GAAW;QACtB,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;IACtC,CAAC;IAEQ,MAAM,CAAC,GAAW;QACzB,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;IACzC,CAAC;IAEQ,GAAG,CAAC,GAAW;QACtB,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;IACtC,CAAC;CACF;AAhBD,8BAgBC\"}&/dist/esm/externalTypes/graphql.js.map~{\"version\":3,\"file\":\"graphql.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/externalTypes/graphql.ts\"],\"names\":[],\"mappings\":\"\"}/src/runHttpQuery.ts0import type {\n  BaseContext,\n  GraphQLExperimentalFormattedIncrementalResult,\n  GraphQLExperimentalFormattedInitialIncrementalExecutionResult,\n  GraphQLExperimentalFormattedSubsequentIncrementalExecutionResult,\n  GraphQLRequest,\n  HTTPGraphQLHead,\n  HTTPGraphQLRequest,\n  HTTPGraphQLResponse,\n} from './externalTypes/index.js';\nimport {\n  ApolloServer,\n  ApolloServerInternals,\n  chooseContentTypeForSingleResultResponse,\n  internalExecuteOperation,\n  MEDIA_TYPES,\n  SchemaDerivedData,\n} from './ApolloServer.js';\nimport { FormattedExecutionResult, Kind } from 'graphql';\nimport { BadRequestError } from './internalErrorClasses.js';\nimport { URLSearchParams } from 'url';\nimport Negotiator from 'negotiator';\nimport { HeaderMap } from './utils/HeaderMap.js';\n\nfunction fieldIfString(\n  o: Record<string, unknown>,\n  fieldName: string,\n): string | undefined {\n  const value = o[fieldName];\n  if (typeof value === 'string') {\n    return value;\n  }\n  return undefined;\n}\n\nfunction searchParamIfSpecifiedOnce(\n  searchParams: URLSearchParams,\n  paramName: string,\n) {\n  const values = searchParams.getAll(paramName);\n  switch (values.length) {\n    case 0:\n      return undefined;\n    case 1:\n      return values[0];\n    default:\n      throw new BadRequestError(\n        `The '${paramName}' search parameter may only be specified once.`,\n      );\n  }\n}\n\nfunction jsonParsedSearchParamIfSpecifiedOnce(\n  searchParams: URLSearchParams,\n  fieldName: string,\n): Record<string, unknown> | undefined {\n  const value = searchParamIfSpecifiedOnce(searchParams, fieldName);\n  if (value === undefined) {\n    return undefined;\n  }\n  let hopefullyRecord;\n  try {\n    hopefullyRecord = JSON.parse(value);\n  } catch {\n    throw new BadRequestError(\n      `The ${fieldName} search parameter contains invalid JSON.`,\n    );\n  }\n  if (!isStringRecord(hopefullyRecord)) {\n    throw new BadRequestError(\n      `The ${fieldName} search parameter should contain a JSON-encoded object.`,\n    );\n  }\n  return hopefullyRecord;\n}\n\nfunction fieldIfRecord(\n  o: Record<string, unknown>,\n  fieldName: string,\n): Record<string, unknown> | undefined {\n  const value = o[fieldName];\n  if (isStringRecord(value)) {\n    return value;\n  }\n  return undefined;\n}\n\nfunction isStringRecord(o: unknown): o is Record<string, unknown> {\n  return (\n    !!o && typeof o === 'object' && !Buffer.isBuffer(o) && !Array.isArray(o)\n  );\n}\n\nfunction isNonEmptyStringRecord(o: unknown): o is Record<string, unknown> {\n  return isStringRecord(o) && Object.keys(o).length > 0;\n}\n\nfunction ensureQueryIsStringOrMissing(query: unknown) {\n  if (!query || typeof query === 'string') {\n    return;\n  }\n  // Check for a common error first.\n  if ((query as any).kind === Kind.DOCUMENT) {\n    throw new BadRequestError(\n      \"GraphQL queries must be strings. It looks like you're sending the \" +\n        'internal graphql-js representation of a parsed query in your ' +\n        'request instead of a request in the GraphQL query language. You ' +\n        'can convert an AST to a string using the `print` function from ' +\n        '`graphql`, or use a client like `apollo-client` which converts ' +\n        'the internal representation to a string for you.',\n    );\n  } else {\n    throw new BadRequestError('GraphQL queries must be strings.');\n  }\n}\n\nexport async function runHttpQuery<TContext extends BaseContext>({\n  server,\n  httpRequest,\n  contextValue,\n  schemaDerivedData,\n  internals,\n  sharedResponseHTTPGraphQLHead,\n}: {\n  server: ApolloServer<TContext>;\n  httpRequest: HTTPGraphQLRequest;\n  contextValue: TContext;\n  schemaDerivedData: SchemaDerivedData;\n  internals: ApolloServerInternals<TContext>;\n  sharedResponseHTTPGraphQLHead: HTTPGraphQLHead | null;\n}): Promise<HTTPGraphQLResponse> {\n  let graphQLRequest: GraphQLRequest;\n\n  switch (httpRequest.method) {\n    case 'POST': {\n      if (!isNonEmptyStringRecord(httpRequest.body)) {\n        throw new BadRequestError(\n          'POST body missing, invalid Content-Type, or JSON object has no keys.',\n        );\n      }\n\n      ensureQueryIsStringOrMissing(httpRequest.body.query);\n\n      if (typeof httpRequest.body.variables === 'string') {\n        throw new BadRequestError(\n          '`variables` in a POST body should be provided as an object, not a recursively JSON-encoded string.',\n        );\n      }\n\n      if (typeof httpRequest.body.extensions === 'string') {\n        throw new BadRequestError(\n          '`extensions` in a POST body should be provided as an object, not a recursively JSON-encoded string.',\n        );\n      }\n\n      graphQLRequest = {\n        query: fieldIfString(httpRequest.body, 'query'),\n        operationName: fieldIfString(httpRequest.body, 'operationName'),\n        variables: fieldIfRecord(httpRequest.body, 'variables'),\n        extensions: fieldIfRecord(httpRequest.body, 'extensions'),\n        http: httpRequest,\n      };\n\n      break;\n    }\n\n    case 'GET': {\n      const searchParams = new URLSearchParams(httpRequest.search);\n\n      graphQLRequest = {\n        query: searchParamIfSpecifiedOnce(searchParams, 'query'),\n        operationName: searchParamIfSpecifiedOnce(\n          searchParams,\n          'operationName',\n        ),\n        variables: jsonParsedSearchParamIfSpecifiedOnce(\n          searchParams,\n          'variables',\n        ),\n        extensions: jsonParsedSearchParamIfSpecifiedOnce(\n          searchParams,\n          'extensions',\n        ),\n        http: httpRequest,\n      };\n\n      break;\n    }\n    default:\n      throw new BadRequestError(\n        'Apollo Server supports only GET/POST requests.',\n        {\n          extensions: {\n            http: {\n              status: 405,\n              headers: new HeaderMap([['allow', 'GET, POST']]),\n            },\n          },\n        },\n      );\n  }\n\n  const graphQLResponse = await internalExecuteOperation(\n    {\n      server,\n      graphQLRequest,\n      internals,\n      schemaDerivedData,\n      sharedResponseHTTPGraphQLHead,\n    },\n    { contextValue },\n  );\n\n  if (graphQLResponse.body.kind === 'single') {\n    if (!graphQLResponse.http.headers.get('content-type')) {\n      // If we haven't already set the content-type (via a plugin or something),\n      // decide which content-type to use based on the accept header.\n      const contentType = chooseContentTypeForSingleResultResponse(httpRequest);\n      if (contentType === null) {\n        throw new BadRequestError(\n          `An 'accept' header was provided for this request which does not accept ` +\n            `${MEDIA_TYPES.APPLICATION_JSON} or ${MEDIA_TYPES.APPLICATION_GRAPHQL_RESPONSE_JSON}`,\n          // Use 406 Not Accepted\n          { extensions: { http: { status: 406 } } },\n        );\n      }\n      graphQLResponse.http.headers.set('content-type', contentType);\n    }\n\n    return {\n      ...graphQLResponse.http,\n      body: {\n        kind: 'complete',\n        string: prettyJSONStringify(\n          orderExecutionResultFields(graphQLResponse.body.singleResult),\n        ),\n      },\n    };\n  }\n\n  // Note that incremental delivery is not yet part of the official GraphQL\n  // spec. We are implementing a proposed version of the spec, and require\n  // clients to explicitly state `deferSpec=20220824`. Once incremental delivery\n  // has been added to the GraphQL spec, we will support `accept` headers\n  // without `deferSpec` as well (perhaps with slightly different behavior if\n  // anything has changed).\n  const acceptHeader = httpRequest.headers.get('accept');\n  if (\n    !(\n      acceptHeader &&\n      new Negotiator({\n        headers: { accept: httpRequest.headers.get('accept') },\n      }).mediaType([\n        // mediaType() will return the first one that matches, so if the client\n        // doesn't include the deferSpec parameter it will match this one here,\n        // which isn't good enough.\n        MEDIA_TYPES.MULTIPART_MIXED_NO_DEFER_SPEC,\n        MEDIA_TYPES.MULTIPART_MIXED_EXPERIMENTAL,\n      ]) === MEDIA_TYPES.MULTIPART_MIXED_EXPERIMENTAL\n    )\n  ) {\n    // The client ran an operation that would yield multiple parts, but didn't\n    // specify `accept: multipart/mixed`. We return an error.\n    throw new BadRequestError(\n      'Apollo server received an operation that uses incremental delivery ' +\n        '(@defer or @stream), but the client does not accept multipart/mixed ' +\n        'HTTP responses. To enable incremental delivery support, add the HTTP ' +\n        \"header 'Accept: multipart/mixed; deferSpec=20220824'.\",\n      // Use 406 Not Accepted\n      { extensions: { http: { status: 406 } } },\n    );\n  }\n\n  graphQLResponse.http.headers.set(\n    'content-type',\n    'multipart/mixed; boundary=\"-\"; deferSpec=20220824',\n  );\n  return {\n    ...graphQLResponse.http,\n    body: {\n      kind: 'chunked',\n      asyncIterator: writeMultipartBody(\n        graphQLResponse.body.initialResult,\n        graphQLResponse.body.subsequentResults,\n      ),\n    },\n  };\n}\n\nasync function* writeMultipartBody(\n  initialResult: GraphQLExperimentalFormattedInitialIncrementalExecutionResult,\n  subsequentResults: AsyncIterable<GraphQLExperimentalFormattedSubsequentIncrementalExecutionResult>,\n): AsyncGenerator<string> {\n  // Note: we assume in this function that every result other than the last has\n  // hasNext=true and the last has hasNext=false. That is, we choose which kind\n  // of delimiter to place at the end of each block based on the contents of the\n  // message, not the structure of the async iterator. This makes sense because\n  // we want to write the delimiter as soon as each block is done (so the client\n  // can parse it immediately) but we may not know whether a general async\n  // iterator is finished until we do async work.\n\n  yield `\\r\\n---\\r\\ncontent-type: application/json; charset=utf-8\\r\\n\\r\\n${JSON.stringify(\n    orderInitialIncrementalExecutionResultFields(initialResult),\n  )}\\r\\n---${initialResult.hasNext ? '' : '--'}\\r\\n`;\n\n  for await (const result of subsequentResults) {\n    yield `content-type: application/json; charset=utf-8\\r\\n\\r\\n${JSON.stringify(\n      orderSubsequentIncrementalExecutionResultFields(result),\n    )}\\r\\n---${result.hasNext ? '' : '--'}\\r\\n`;\n  }\n}\n\n// See https://github.com/facebook/graphql/pull/384 for why\n// errors comes first.\nfunction orderExecutionResultFields(\n  result: FormattedExecutionResult,\n): FormattedExecutionResult {\n  return {\n    errors: result.errors,\n    data: result.data,\n    extensions: result.extensions,\n  };\n}\nfunction orderInitialIncrementalExecutionResultFields(\n  result: GraphQLExperimentalFormattedInitialIncrementalExecutionResult,\n): GraphQLExperimentalFormattedInitialIncrementalExecutionResult {\n  return {\n    hasNext: result.hasNext,\n    errors: result.errors,\n    data: result.data,\n    incremental: orderIncrementalResultFields(result.incremental),\n    extensions: result.extensions,\n  };\n}\nfunction orderSubsequentIncrementalExecutionResultFields(\n  result: GraphQLExperimentalFormattedSubsequentIncrementalExecutionResult,\n): GraphQLExperimentalFormattedSubsequentIncrementalExecutionResult {\n  return {\n    hasNext: result.hasNext,\n    incremental: orderIncrementalResultFields(result.incremental),\n    extensions: result.extensions,\n  };\n}\n\nfunction orderIncrementalResultFields(\n  incremental?: readonly GraphQLExperimentalFormattedIncrementalResult[],\n): undefined | GraphQLExperimentalFormattedIncrementalResult[] {\n  return incremental?.map((i: any) => ({\n    hasNext: i.hasNext,\n    errors: i.errors,\n    path: i.path,\n    label: i.label,\n    data: i.data,\n    items: i.items,\n    extensions: i.extensions,\n  }));\n}\n\n// The result of a curl does not appear well in the terminal, so we add an extra new line\nexport function prettyJSONStringify(value: FormattedExecutionResult) {\n  return JSON.stringify(value) + '\\n';\n}\n\nexport function newHTTPGraphQLHead(status?: number): HTTPGraphQLHead {\n  return {\n    status,\n    headers: new HeaderMap(),\n  };\n}\n\n// Updates `target` with status code and headers from `source`. For now let's\n// consider it undefined what happens if both have a status code set or both set\n// the same header.\nexport function mergeHTTPGraphQLHead(\n  target: HTTPGraphQLHead,\n  source: HTTPGraphQLHead,\n) {\n  if (source.status) {\n    target.status = source.status;\n  }\n  if (source.headers) {\n    for (const [name, value] of source.headers) {\n      // If source.headers contains non-lowercase header names, this will\n      // catch that case as long as target.headers is a HeaderMap.\n      target.headers.set(name, value);\n    }\n  }\n}\n)/dist/esm/plugin/inlineTrace/index.js.map\b{\"version\":3,\"file\":\"index.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../../src/plugin/inlineTrace/index.ts\"],\"names\":[],\"mappings\":\"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\"}7/dist/cjs/utils/makeGatewayGraphQLRequestContext.js.map\u000b{\"version\":3,\"file\":\"makeGatewayGraphQLRequestContext.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/utils/makeGatewayGraphQLRequestContext.ts\"],\"names\":[],\"mappings\":\"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\"}\"/dist/esm/externalTypes/context.js.export {};\n//# sourceMappingURL=context.js.map//dist/esm/plugin/drainHttpServer/stoppable.d.ts\u0001|/// <reference types=\"node\" />\n/// <reference types=\"node\" />\nimport type http from 'http';\nimport https from 'https';\nexport declare class Stopper {\n    private server;\n    private requestCountPerSocket;\n    private stopped;\n    constructor(server: http.Server | https.Server);\n    stop(stopGracePeriodMillis?: number): Promise<boolean>;\n}\n//# sourceMappingURL=stoppable.d.ts.map6/dist/esm/plugin/usageReporting/durationHistogram.d.ts\u0002mexport interface DurationHistogramOptions {\n    initSize?: number;\n    buckets?: number[];\n}\nexport declare class DurationHistogram {\n    private readonly buckets;\n    static readonly BUCKET_COUNT = 384;\n    static readonly EXPONENT_LOG: number;\n    toArray(): number[];\n    static durationToBucket(durationNs: number): number;\n    incrementDuration(durationNs: number, value?: number): DurationHistogram;\n    incrementBucket(bucket: number, value?: number): void;\n    combine(otherHistogram: DurationHistogram): void;\n    constructor(options?: DurationHistogramOptions);\n}\n//# sourceMappingURL=durationHistogram.d.ts.map&/dist/esm/utils/schemaManager.d.ts.map\u0004i{\"version\":3,\"file\":\"schemaManager.d.ts\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/utils/schemaManager.ts\"],\"names\":[],\"mappings\":\"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,KAAK,EACV,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACpB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,KAAK,EACV,YAAY,EACZ,oBAAoB,EACrB,MAAM,2BAA2B,CAAC;AAEnC,aAAK,yBAAyB,GAAG,CAC/B,SAAS,EAAE,aAAa,KACrB,iBAAiB,CAAC;AAevB,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAA4B;IACtE,OAAO,CAAC,QAAQ,CAAC,6BAA6B,CAE1C;IACJ,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,iBAAiB,CAAC,CAAoB;IAC9C,OAAO,CAAC,aAAa,CAAC,CAAuB;IAG7C,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAW5B;gBAGJ,OAAO,EAAE,CACL;QAAE,OAAO,EAAE,gBAAgB,CAAC;QAAC,YAAY,EAAE,YAAY,CAAA;KAAE,GACzD;QAAE,SAAS,EAAE,aAAa,CAAA;KAAE,CAC/B,GAAG;QACF,MAAM,EAAE,MAAM,CAAC;QACf,yBAAyB,EAAE,yBAAyB,CAAC;KACtD;IA8BU,KAAK,IAAI,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IA8C9C,oBAAoB,CACzB,QAAQ,EAAE,CAAC,aAAa,EAAE,oBAAoB,KAAK,IAAI,GACtD,mBAAmB;IA6Bf,oBAAoB,IAAI,iBAAiB;IAcnC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAQlC,OAAO,CAAC,8BAA8B;CAqBvC\"}7/src/plugin/usageReporting/operationDerivedDataCache.ts\tWimport type { Logger } from '@apollo/utils.logger';\nimport type { ReferencedFieldsByType } from '@apollo/utils.usagereporting';\nimport LRUCache from 'lru-cache';\n\nexport interface OperationDerivedData {\n  signature: string;\n  referencedFieldsByType: ReferencedFieldsByType;\n}\n\nexport function createOperationDerivedDataCache({\n  logger,\n}: {\n  logger: Logger;\n}): LRUCache<string, OperationDerivedData> {\n  let lastWarn: Date;\n  let lastDisposals = 0;\n  return new LRUCache<string, OperationDerivedData>({\n    // Calculate the length of cache objects by the JSON.stringify byteLength.\n    sizeCalculation(obj) {\n      return Buffer.byteLength(JSON.stringify(obj), 'utf8');\n    },\n    // 10MiB limit, very much approximately since we can't be sure how V8 might\n    // be storing this data internally. Though this should be enough to store a\n    // fair amount of operation data, depending on their overall complexity. A\n    // future version of this might expose some configuration option to grow the\n    // cache, but ideally, we could do that dynamically based on the resources\n    // available to the server, and not add more configuration surface area.\n    // Hopefully the warning message will allow us to evaluate the need with\n    // more validated input from those that receive it.\n    maxSize: Math.pow(2, 20) * 10,\n    dispose() {\n      // Count the number of disposals between warning messages.\n      lastDisposals++;\n\n      // Only show a message warning about the high turnover every 60 seconds.\n      if (!lastWarn || new Date().getTime() - lastWarn.getTime() > 60000) {\n        // Log the time that we last displayed the message.\n        lastWarn = new Date();\n        logger.warn(\n          [\n            'This server is processing a high number of unique operations.  ',\n            `A total of ${lastDisposals} records have been `,\n            'ejected from the ApolloServerPluginUsageReporting signature cache in the past ',\n            'interval.  If you see this warning frequently, please open an ',\n            'issue on the Apollo Server repository.',\n          ].join(''),\n        );\n\n        // Reset the disposal counter for the next message interval.\n        lastDisposals = 0;\n      }\n    },\n  });\n}\n\nexport function operationDerivedDataCacheKey(\n  queryHash: string,\n  operationName: string,\n) {\n  return `${queryHash}${operationName && ':' + operationName}`;\n}\n./dist/esm/utils/computeCoreSchemaHash.d.ts.map{\"version\":3,\"file\":\"computeCoreSchemaHash.d.ts\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/utils/computeCoreSchemaHash.ts\"],\"names\":[],\"mappings\":\"AAMA,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAE5D\"}/src/utils/schemaManager.ts\u001cimport type { Logger } from '@apollo/utils.logger';\nimport type { GraphQLSchema } from 'graphql';\nimport type {\n  GatewayExecutor,\n  GatewayInterface,\n  GatewayUnsubscriber,\n} from '@apollo/server-gateway-interface';\nimport type { SchemaDerivedData } from '../ApolloServer.js';\nimport type {\n  ApolloConfig,\n  GraphQLSchemaContext,\n} from '../externalTypes/index.js';\n\ntype SchemaDerivedDataProvider = (\n  apiSchema: GraphQLSchema,\n) => SchemaDerivedData;\n\n/**\n * An async-safe class for tracking changes in schemas and schema-derived data.\n *\n * Specifically, as long as start() is called (and completes) before stop() is\n * called, any set of executions of public methods is linearizable.\n *\n * Note that linearizability in Javascript is trivial if all public methods are\n * non-async, but increasingly difficult to guarantee if public methods become\n * async. Accordingly, if you believe a public method should be async, think\n * carefully on whether it's worth the mental overhead. (E.g. if you wished that\n * a callback was async, consider instead resolving a Promise in a non-async\n * callback and having your async code wait on the Promise in setTimeout().)\n */\nexport class SchemaManager {\n  private readonly logger: Logger;\n  private readonly schemaDerivedDataProvider: SchemaDerivedDataProvider;\n  private readonly onSchemaLoadOrUpdateListeners = new Set<\n    (schemaContext: GraphQLSchemaContext) => void\n  >();\n  private isStopped = false;\n  private schemaDerivedData?: SchemaDerivedData;\n  private schemaContext?: GraphQLSchemaContext;\n\n  // For state that's specific to the mode of operation.\n  private readonly modeSpecificState:\n    | {\n        readonly mode: 'gateway';\n        readonly gateway: GatewayInterface;\n        readonly apolloConfig: ApolloConfig;\n        unsubscribeFromGateway?: GatewayUnsubscriber;\n      }\n    | {\n        readonly mode: 'schema';\n        readonly apiSchema: GraphQLSchema;\n        readonly schemaDerivedData: SchemaDerivedData;\n      };\n\n  constructor(\n    options: (\n      | { gateway: GatewayInterface; apolloConfig: ApolloConfig }\n      | { apiSchema: GraphQLSchema }\n    ) & {\n      logger: Logger;\n      schemaDerivedDataProvider: SchemaDerivedDataProvider;\n    },\n  ) {\n    this.logger = options.logger;\n    this.schemaDerivedDataProvider = options.schemaDerivedDataProvider;\n    if ('gateway' in options) {\n      this.modeSpecificState = {\n        mode: 'gateway',\n        gateway: options.gateway,\n        apolloConfig: options.apolloConfig,\n      };\n    } else {\n      this.modeSpecificState = {\n        mode: 'schema',\n        apiSchema: options.apiSchema,\n        // The caller of the constructor expects us to fail early if the schema\n        // given is invalid/has errors, so we call the provider here. We also\n        // pass the result to start(), as the provider can be expensive to call.\n        schemaDerivedData: options.schemaDerivedDataProvider(options.apiSchema),\n      };\n    }\n  }\n\n  /**\n   * Calling start() will:\n   * - Start gateway schema fetching (if a gateway was provided).\n   * - Initialize schema-derived data.\n   * - Synchronously notify onSchemaLoadOrUpdate() listeners of schema load, and\n   *   asynchronously notify them of schema updates.\n   * - If we started a gateway, returns the gateway's executor; otherwise null.\n   */\n  public async start(): Promise<GatewayExecutor | null> {\n    if (this.modeSpecificState.mode === 'gateway') {\n      const gateway = this.modeSpecificState.gateway;\n      if (gateway.onSchemaLoadOrUpdate) {\n        // Use onSchemaLoadOrUpdate, as it reports the core supergraph SDL and\n        // always reports the initial schema load.\n        this.modeSpecificState.unsubscribeFromGateway =\n          gateway.onSchemaLoadOrUpdate((schemaContext) => {\n            this.processSchemaLoadOrUpdateEvent(schemaContext);\n          });\n      } else {\n        throw new Error(\n          \"Unexpectedly couldn't find onSchemaLoadOrUpdate on gateway\",\n        );\n      }\n\n      const config = await this.modeSpecificState.gateway.load({\n        apollo: this.modeSpecificState.apolloConfig,\n      });\n\n      return config.executor;\n    } else {\n      this.processSchemaLoadOrUpdateEvent(\n        {\n          apiSchema: this.modeSpecificState.apiSchema,\n        },\n        this.modeSpecificState.schemaDerivedData,\n      );\n      return null;\n    }\n  }\n\n  /**\n   * Registers a listener for schema load/update events. Note that the latest\n   * event is buffered, i.e.\n   * - If registered before start(), this method will throw. (We have no need\n   *   for registration before start(), but this is easy enough to change.)\n   * - If registered after start() but before stop(), the callback will be first\n   *   called in this method (for whatever the current schema is), and then\n   *   later for updates.\n   * - If registered after stop(), the callback will never be called.\n   *\n   * For gateways, a core supergraph SDL will be provided to the callback.\n   *\n   * @param callback The listener to execute on schema load/updates.\n   */\n  public onSchemaLoadOrUpdate(\n    callback: (schemaContext: GraphQLSchemaContext) => void,\n  ): GatewayUnsubscriber {\n    if (!this.schemaContext) {\n      throw new Error('You must call start() before onSchemaLoadOrUpdate()');\n    }\n    if (!this.isStopped) {\n      try {\n        callback(this.schemaContext);\n      } catch (e) {\n        // Note that onSchemaLoadOrUpdate() is currently only called from\n        // ApolloServer._start(), so we throw here to alert the user early\n        // that their callback is failing.\n        throw new Error(\n          `An error was thrown from an 'onSchemaLoadOrUpdate' listener: ${\n            (e as Error).message\n          }`,\n        );\n      }\n    }\n    this.onSchemaLoadOrUpdateListeners.add(callback);\n\n    return () => {\n      this.onSchemaLoadOrUpdateListeners.delete(callback);\n    };\n  }\n\n  /**\n   * Get the schema-derived state for the current schema. This throws if called\n   * before start() is called.\n   */\n  public getSchemaDerivedData(): SchemaDerivedData {\n    if (!this.schemaDerivedData) {\n      throw new Error('You must call start() before getSchemaDerivedData()');\n    }\n    return this.schemaDerivedData;\n  }\n\n  /**\n   * Calling stop() will:\n   * - Stop gateway schema fetching (if a gateway was provided).\n   *   - Note that this specific step may not succeed if gateway is old.\n   * - Stop updating schema-derived data.\n   * - Stop notifying onSchemaLoadOrUpdate() listeners.\n   */\n  public async stop(): Promise<void> {\n    this.isStopped = true;\n    if (this.modeSpecificState.mode === 'gateway') {\n      this.modeSpecificState.unsubscribeFromGateway?.();\n      await this.modeSpecificState.gateway.stop?.();\n    }\n  }\n\n  private processSchemaLoadOrUpdateEvent(\n    schemaContext: GraphQLSchemaContext,\n    schemaDerivedData?: SchemaDerivedData,\n  ): void {\n    if (!this.isStopped) {\n      this.schemaDerivedData =\n        schemaDerivedData ??\n        this.schemaDerivedDataProvider(schemaContext.apiSchema);\n      this.schemaContext = schemaContext;\n      this.onSchemaLoadOrUpdateListeners.forEach((listener) => {\n        try {\n          listener(schemaContext);\n        } catch (e) {\n          this.logger.error(\n            \"An error was thrown from an 'onSchemaLoadOrUpdate' listener\",\n          );\n          this.logger.error(e);\n        }\n      });\n    }\n  }\n}\n\"/dist/cjs/externalTypes/graphql.jsp\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=graphql.js.map-/dist/esm/plugin/drainHttpServer/stoppable.js\u0007import https from 'https';\nexport class Stopper {\n    constructor(server) {\n        this.server = server;\n        this.requestCountPerSocket = new Map();\n        this.stopped = false;\n        server.on(server instanceof https.Server ? 'secureConnection' : 'connection', (socket) => {\n            this.requestCountPerSocket.set(socket, 0);\n            socket.once('close', () => this.requestCountPerSocket.delete(socket));\n        });\n        server.on('request', (req, res) => {\n            this.requestCountPerSocket.set(req.socket, (this.requestCountPerSocket.get(req.socket) ?? 0) + 1);\n            res.once('finish', () => {\n                const pending = (this.requestCountPerSocket.get(req.socket) ?? 0) - 1;\n                this.requestCountPerSocket.set(req.socket, pending);\n                if (this.stopped && pending === 0) {\n                    req.socket.end();\n                }\n            });\n        });\n    }\n    async stop(stopGracePeriodMillis = Infinity) {\n        let gracefully = true;\n        await new Promise((resolve) => setImmediate(resolve));\n        this.stopped = true;\n        let timeout = null;\n        if (stopGracePeriodMillis < Infinity) {\n            timeout = setTimeout(() => {\n                gracefully = false;\n                this.requestCountPerSocket.forEach((_, socket) => socket.end());\n                setImmediate(() => {\n                    this.requestCountPerSocket.forEach((_, socket) => socket.destroy());\n                });\n            }, stopGracePeriodMillis);\n        }\n        const closePromise = new Promise((resolve) => this.server.close(() => {\n            if (timeout) {\n                clearTimeout(timeout);\n                timeout = null;\n            }\n            resolve();\n        }));\n        this.requestCountPerSocket.forEach((requests, socket) => {\n            if (requests === 0)\n                socket.end();\n        });\n        await closePromise;\n        return gracefully;\n    }\n}\n//# sourceMappingURL=stoppable.js.map /dist/esm/utils/HeaderMap.js.map\u0002\"{\"version\":3,\"file\":\"HeaderMap.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/utils/HeaderMap.ts\"],\"names\":[],\"mappings\":\"AAAA,MAAM,OAAO,SAAU,SAAQ,GAAmB;IACvC,GAAG,CAAC,GAAW,EAAE,KAAa;QACrC,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC,CAAC;IAC7C,CAAC;IAEQ,GAAG,CAAC,GAAW;QACtB,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;IACtC,CAAC;IAEQ,MAAM,CAAC,GAAW;QACzB,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;IACzC,CAAC;IAEQ,GAAG,CAAC,GAAW;QACtB,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;IACtC,CAAC;CACF\"}\"/dist/esm/externalTypes/graphql.js.export {};\n//# sourceMappingURL=graphql.js.map(/dist/esm/externalTypes/plugins.d.ts.map\u000e{\"version\":3,\"file\":\"plugins.d.ts\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/externalTypes/plugins.ts\"],\"names\":[],\"mappings\":\"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\"}(/src/plugin/landingPage/default/types.ts\u0012\u0002export interface ApolloServerPluginLandingPageDefaultBaseOptions {\n  /**\n   * By default, the landing page plugin uses the latest version of the landing\n   * page published to Apollo's CDN. If you'd like to pin the current version,\n   * pass the SHA served at\n   * https://apollo-server-landing-page.cdn.apollographql.com/_latest/version.txt\n   * here.\n   */\n  version?: string;\n  /**\n   * Set to false to suppress the footer which explains how to configure the\n   * landing page.\n   */\n  footer?: boolean;\n  /**\n   * Users can configure their landing page to link to Studio Explorer with a\n   * document loaded in the UI.\n   */\n  document?: string;\n  /**\n   * Users can configure their landing page to link to Studio Explorer with\n   * variables loaded in the UI.\n   */\n  variables?: Record<string, any>;\n  /**\n   * Users can configure their landing page to link to Studio Explorer with\n   * headers loaded in the UI.\n   */\n  headers?: Record<string, string>;\n\n  includeCookies?: boolean;\n  // For Apollo use only.\n  __internal_apolloStudioEnv__?: 'staging' | 'prod';\n}\n\nexport interface ApolloServerPluginNonEmbeddedLandingPageLocalDefaultOptions\n  extends ApolloServerPluginLandingPageDefaultBaseOptions {\n  /**\n   * Users can configure their landing page to render an embedded Explorer if\n   * given a graphRef, or an embedded Sandbox if there is not graphRef provided.\n   */\n  embed: false;\n}\n\nexport interface ApolloServerPluginNonEmbeddedLandingPageProductionDefaultOptions\n  extends ApolloServerPluginLandingPageDefaultBaseOptions {\n  /**\n   * If specified, provide a link (with opt-in auto-redirect) to the Studio page\n   * for the given graphRef. (You need to explicitly pass this here rather than\n   * relying on the server's ApolloConfig, because if your server is publicly\n   * accessible you may not want to display the graph ref publicly.)\n   */\n  graphRef?: string;\n  /**\n   * Users can configure their landing page to render an embedded Explorer if\n   * given a graphRef, or an embedded Sandbox if there is not graphRef provided.\n   */\n  embed?: false;\n}\n\nexport interface ApolloServerPluginEmbeddedLandingPageLocalDefaultOptions\n  extends ApolloServerPluginLandingPageDefaultBaseOptions {\n  /**\n   * Users can configure their landing page to render an embedded Explorer if\n   * given a graphRef, or an embedded Sandbox if there is not graphRef provided.\n   */\n  embed?: true;\n}\n\nexport interface ApolloServerPluginEmbeddedLandingPageProductionDefaultOptions\n  extends ApolloServerPluginLandingPageDefaultBaseOptions {\n  /**\n   * Use this registered's graphs schema to populate the embedded Explorer.\n   * Required if passing `embed: true`\n   */\n  graphRef: string;\n  /**\n   * Users can configure their landing page to render an embedded Explorer.\n   */\n  embed: true | EmbeddableExplorerOptions;\n}\n\ntype EmbeddableExplorerOptions = {\n  /**\n   * Display options can be configured for the embedded Explorer.\n   */\n  displayOptions?: {\n    /**\n     * If true, the embedded Explorer includes the panels for setting\n     * request headers and environment variables.\n     * If false, those panels are not present.\n     *\n     * The default value is true.\n     */\n    showHeadersAndEnvVars: boolean;\n    /**\n     * If open, the Explorer's Documentation panel (the left column) is\n     * initially expanded. If closed, the panel is initially collapsed.\n     *\n     * The default value is open.\n     */\n    docsPanelState: 'open' | 'closed';\n    /**\n     * If dark, the Explorer's dark theme is used. If light, the light theme is used.\n     *\n     * The default value is dark.\n     */\n    theme: 'light' | 'dark';\n  };\n  /**\n   * If true, the embedded Explorer uses localStorage to persist its state\n   * (including operations, tabs, variables, and headers) between user sessions.\n   * This state is automatically populated in the Explorer on page load.\n   *\n   * If false, the embedded Explorer loads with an example query\n   * based on your schema (unless you provide document).\n   *\n   * The default value is false.\n   */\n  persistExplorerState: boolean;\n};\n\nexport type ApolloServerPluginLandingPageLocalDefaultOptions =\n  | ApolloServerPluginEmbeddedLandingPageLocalDefaultOptions\n  | ApolloServerPluginNonEmbeddedLandingPageLocalDefaultOptions;\n\nexport type ApolloServerPluginLandingPageProductionDefaultOptions =\n  | ApolloServerPluginEmbeddedLandingPageProductionDefaultOptions\n  | ApolloServerPluginNonEmbeddedLandingPageProductionDefaultOptions;\n\nexport type LandingPageConfig =\n  | ApolloServerPluginLandingPageLocalDefaultOptions\n  | ApolloServerPluginLandingPageProductionDefaultOptions;\n1/dist/esm/plugin/landingPage/default/types.js.mapč{\"version\":3,\"file\":\"types.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../../../src/plugin/landingPage/default/types.ts\"],\"names\":[],\"mappings\":\"\"}$/plugin/schemaReporting/package.json\u0001\u001b{\n  \"name\": \"@apollo/server/plugin/schemaReporting\",\n  \"type\": \"module\",\n  \"main\": \"../../dist/cjs/plugin/schemaReporting/index.js\",\n  \"module\": \"../../dist/esm/plugin/schemaReporting/index.js\",\n  \"types\": \"../../dist/esm/plugin/schemaReporting/index.d.ts\",\n  \"sideEffects\": false\n}\n/dist/cjs/express4/index.js.map\u0007){\"version\":3,\"file\":\"index.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/express4/index.ts\"],\"names\":[],\"mappings\":\";;;AAQA,6BAAwC;AAmBxC,SAAgB,iBAAiB,CAC/B,MAA8B,EAC9B,OAA4C;IAE5C,MAAM,CAAC,aAAa,CAAC,qBAAqB,CAAC,CAAC;IAK5C,MAAM,cAAc,GAGhB,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IAErB,MAAM,OAAO,GACX,OAAO,EAAE,OAAO,IAAI,cAAc,CAAC;IAErC,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QACxB,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE;YAKb,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAChB,GAAG,CAAC,IAAI,CACN,sEAAsE;gBACpE,+DAA+D,CAClE,CAAC;YACF,OAAO;SACR;QAED,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;QAC1C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;YACtD,IAAI,KAAK,KAAK,SAAS,EAAE;gBAOvB,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;aACnE;SACF;QAED,MAAM,kBAAkB,GAAuB;YAC7C,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE;YAChC,OAAO;YACP,MAAM,EAAE,IAAA,WAAQ,EAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,EAAE;YACtC,IAAI,EAAE,GAAG,CAAC,IAAI;SACf,CAAC;QAEF,MAAM;aACH,yBAAyB,CAAC;YACzB,kBAAkB;YAClB,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;SACrC,CAAC;aACD,IAAI,CAAC,KAAK,EAAE,mBAAmB,EAAE,EAAE;YAClC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,mBAAmB,CAAC,OAAO,EAAE;gBACtD,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;aAC3B;YACD,GAAG,CAAC,UAAU,GAAG,mBAAmB,CAAC,MAAM,IAAI,GAAG,CAAC;YAEnD,IAAI,mBAAmB,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE;gBAChD,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC1C,OAAO;aACR;YAED,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,mBAAmB,CAAC,IAAI,CAAC,aAAa,EAAE;gBAChE,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBAMjB,IAAI,OAAQ,GAAW,CAAC,KAAK,KAAK,UAAU,EAAE;oBAC3C,GAAW,CAAC,KAAK,EAAE,CAAC;iBACtB;aACF;YACD,GAAG,CAAC,GAAG,EAAE,CAAC;QACZ,CAAC,CAAC;aACD,KAAK,CAAC,IAAI,CAAC,CAAC;IACjB,CAAC,CAAC;AACJ,CAAC;AAlFD,8CAkFC\"}//dist/esm/plugin/schemaReporting/index.d.ts.map\u0001{\"version\":3,\"file\":\"index.d.ts\",\"sourceRoot\":\"\",\"sources\":[\"../../../../src/plugin/schemaReporting/index.ts\"],\"names\":[],\"mappings\":\"AAOA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAIrD,MAAM,WAAW,wCAAwC;IAavD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAuB3B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAKhC,WAAW,CAAC,EAAE,MAAM,CAAC;IAIrB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,iCAAiC,CAC/C,EACE,iBAAiB,EACjB,sBAAsB,EACtB,WAAW,EACX,OAAO,GACR,GAAE,wCAA8D,GAChE,kBAAkB,CAkIpB\"}*/dist/esm/plugin/traceTreeBuilder.d.ts.map\u0003{\"version\":3,\"file\":\"traceTreeBuilder.d.ts\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/plugin/traceTreeBuilder.ts\"],\"names\":[],\"mappings\":\"AAEA,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAgB,MAAM,SAAS,CAAC;AACzE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAO1D,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAoB;IACpC,OAAO,CAAC,MAAM,CAAS;IAChB,KAAK,QAUT;IACI,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,KAAK,CAEV;IACH,OAAO,CAAC,QAAQ,CAAC,cAAc,CAEtB;gBAEU,OAAO,EAAE;QAC1B,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,UAAU,CAAC,EAAE,iBAAiB,CAAC;KAChC;IAiBM,WAAW;IAWX,UAAU;IAeV,gBAAgB,CAAC,IAAI,EAAE,kBAAkB,GAAG,MAAM,IAAI;IAuBtD,kBAAkB,CAAC,MAAM,EAAE,SAAS,YAAY,EAAE;IA6BzD,OAAO,CAAC,gBAAgB;IA+BxB,OAAO,CAAC,OAAO;IAcf,OAAO,CAAC,gBAAgB;IAWxB,OAAO,CAAC,0BAA0B;CAkDnC;AAiDD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,SAAS,CAO1E\"}\"/src/utils/UnreachableCaseError.ts\u0001c/**\n * Throw this in places that should be unreachable (because all other cases have\n * been handled, reducing the type of the argument to `never`). TypeScript will\n * complain if in fact there is a valid type for the argument.\n */\nexport class UnreachableCaseError extends Error {\n  constructor(val: never) {\n    super(`Unreachable case: ${val}`);\n  }\n}\nC/dist/cjs/plugin/usageReporting/defaultSendOperationsAsTrace.js.map\u0005{\"version\":3,\"file\":\"defaultSendOperationsAsTrace.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../../src/plugin/usageReporting/defaultSendOperationsAsTrace.ts\"],\"names\":[],\"mappings\":\";;;;;;AAAA,0DAAiC;AAEjC,+DAAyD;AACzD,iEAA2D;AAE3D,SAAgB,4BAA4B;IAU1C,MAAM,KAAK,GAAG,IAAI,mBAAQ,CAAe;QAWvC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC;QACxB,eAAe,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;YAC7B,OAAO,CAAC,GAAG,IAAI,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;QAC9C,CAAC;KACF,CAAC,CAAC;IAEH,OAAO,CAAC,KAAY,EAAE,cAAsB,EAAW,EAAE;QACvD,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC;QAC9C,IAAI,cAAc,IAAI,IAAI,EAAE;YAC1B,MAAM,KAAK,CAAC,6CAA6C,CAAC,CAAC;SAC5D;QAED,MAAM,SAAS,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC;YAC9B,cAAc;YACd,wCAAiB,CAAC,gBAAgB,CAAC,KAAK,CAAC,UAAU,CAAC;YAEpD,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,EAAE,CAAC;YAG/B,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;SAChD,CAAC,CAAC;QAGH,IAAI,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;YACvB,OAAO,KAAK,CAAC;SACd;QAED,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;AACJ,CAAC;AApDD,oEAoDC;AAID,SAAS,cAAc,CAAC,KAAY;IAClC,IAAI,SAAS,GAAG,KAAK,CAAC;IAEtB,SAAS,cAAc,CAAC,IAAiB;QACvC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE;YACjC,SAAS,GAAG,IAAI,CAAC;SAClB;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAA,sCAAgB,EAAC,KAAK,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC;IAC/C,OAAO,SAAS,CAAC;AACnB,CAAC\"}/src/externalTypes/index.ts\u0007Q/**\n * This file represents the external type definitions needed by end users,\n * integration implementors, and plugin implementors. Everything from this file\n * is re-exported by the root (via * export), so add exports to this file with\n * intention (it's public API).\n */\nexport type { BaseContext, ContextFunction, ContextThunk } from './context.js';\nexport type { GraphQLRequest, GraphQLResponse } from './graphql.js';\nexport type {\n  HTTPGraphQLRequest,\n  HTTPGraphQLResponse,\n  HTTPGraphQLHead,\n} from './http.js';\nexport type {\n  ApolloServerPlugin,\n  GraphQLFieldResolverParams,\n  GraphQLRequestExecutionListener,\n  GraphQLRequestListener,\n  GraphQLRequestListenerDidResolveField,\n  GraphQLRequestListenerExecutionDidEnd,\n  GraphQLRequestListenerParsingDidEnd,\n  GraphQLRequestListenerValidationDidEnd,\n  GraphQLSchemaContext,\n  GraphQLServerListener,\n  GraphQLServerContext,\n  LandingPage,\n} from './plugins.js';\nexport type {\n  GraphQLRequestContext,\n  GraphQLRequestMetrics,\n  GraphQLRequestContextDidEncounterErrors,\n  GraphQLRequestContextDidResolveOperation,\n  GraphQLRequestContextDidResolveSource,\n  GraphQLRequestContextExecutionDidStart,\n  GraphQLRequestContextParsingDidStart,\n  GraphQLRequestContextResponseForOperation,\n  GraphQLRequestContextValidationDidStart,\n  GraphQLRequestContextWillSendResponse,\n} from './requestPipeline.js';\nexport type {\n  DocumentStore,\n  ApolloConfigInput,\n  ApolloConfig,\n  PersistedQueryOptions,\n  CSRFPreventionOptions,\n  ApolloServerOptions,\n} from './constructor.js';\n\nexport type {\n  GraphQLExperimentalFormattedInitialIncrementalExecutionResult,\n  GraphQLExperimentalFormattedSubsequentIncrementalExecutionResult,\n  GraphQLExperimentalFormattedIncrementalResult,\n  GraphQLExperimentalFormattedIncrementalDeferResult,\n  GraphQLExperimentalFormattedIncrementalStreamResult,\n} from './incrementalDeliveryPolyfill.js';\n/src/utils/HeaderMap.ts\u0001export class HeaderMap extends Map<string, string> {\n  override set(key: string, value: string): this {\n    return super.set(key.toLowerCase(), value);\n  }\n\n  override get(key: string) {\n    return super.get(key.toLowerCase());\n  }\n\n  override delete(key: string) {\n    return super.delete(key.toLowerCase());\n  }\n\n  override has(key: string) {\n    return super.has(key.toLowerCase());\n  }\n}\n-/dist/cjs/plugin/landingPage/default/types.jsn\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=types.js.map/errors/package.json{\n  \"name\": \"@apollo/server/errors\",\n  \"type\": \"module\",\n  \"main\": \"../dist/cjs/errors/index.js\",\n  \"module\": \"../dist/esm/errors/index.js\",\n  \"types\": \"../dist/esm/errors/index.d.ts\",\n  \"sideEffects\": false\n}\n./dist/esm/incrementalDeliveryPolyfill.d.ts.map\u0007\u0010{\"version\":3,\"file\":\"incrementalDeliveryPolyfill.d.ts\",\"sourceRoot\":\"\",\"sources\":[\"../../src/incrementalDeliveryPolyfill.ts\"],\"names\":[],\"mappings\":\"AAAA,OAAO,EAAW,aAAa,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAOhF,UAAU,MAAM,CAAC,CAAC;IAChB,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,CAAC;CAClB;AACD,MAAM,WAAW,oDAAoD,CACnE,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,EACvB,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,CAC7B,SAAQ,eAAe,CAAC,KAAK,EAAE,WAAW,CAAC;IAC3C,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,aAAa,CACzB,oCAAoC,CAAC,KAAK,EAAE,WAAW,CAAC,CACzD,CAAC;IACF,UAAU,CAAC,EAAE,WAAW,CAAC;CAC1B;AAED,MAAM,WAAW,uDAAuD,CACtE,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,EACvB,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC;IAE7B,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,aAAa,CACzB,oCAAoC,CAAC,KAAK,EAAE,WAAW,CAAC,CACzD,CAAC;IACF,UAAU,CAAC,EAAE,WAAW,CAAC;CAC1B;AAED,aAAK,oCAAoC,CACvC,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,EACvB,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,IAE3B,yCAAyC,CAAC,KAAK,EAAE,WAAW,CAAC,GAC7D,0CAA0C,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;AAEnE,UAAU,yCAAyC,CACjD,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,EACvB,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,CAC7B,SAAQ,eAAe,CAAC,KAAK,EAAE,WAAW,CAAC;IAC3C,IAAI,CAAC,EAAE,aAAa,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,0CAA0C,CAClD,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,EACtB,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC;IAE7B,MAAM,CAAC,EAAE,aAAa,CAAC,YAAY,CAAC,CAAC;IACrC,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;IACrB,IAAI,CAAC,EAAE,aAAa,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,WAAW,CAAC;CAC1B;AAED,MAAM,WAAW,8CAA8C,CAC7D,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,EACvB,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC;IAE7B,aAAa,EAAE,oDAAoD,CACjE,KAAK,EACL,WAAW,CACZ,CAAC;IACF,iBAAiB,EAAE,cAAc,CAC/B,uDAAuD,CAAC,KAAK,EAAE,WAAW,CAAC,EAC3E,IAAI,EACJ,IAAI,CACL,CAAC;CACH;AA8BD,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,aAAa,GAClB,OAAO,CAAC,eAAe,GAAG,8CAA8C,CAAC,CAM3E\"}2/dist/esm/plugin/schemaReporting/schemaReporter.js\u0012import fetch from 'node-fetch';\nimport { packageVersion } from '../../generated/packageVersion.js';\nexport const schemaReportGql = `mutation SchemaReport($report: SchemaReport!, $coreSchema: String) {\n  reportSchema(report: $report, coreSchema: $coreSchema) {\n    __typename\n    ... on ReportSchemaError {\n      message\n      code\n    }\n    ... on ReportSchemaResponse {\n      inSeconds\n      withCoreSchema\n    }\n  }\n}\n`;\nexport class SchemaReporter {\n    constructor(options) {\n        this.headers = {\n            'Content-Type': 'application/json',\n            'x-api-key': options.apiKey,\n            'apollographql-client-name': 'ApolloServerPluginSchemaReporting',\n            'apollographql-client-version': packageVersion,\n        };\n        this.endpointUrl =\n            options.endpointUrl ||\n                'https://schema-reporting.api.apollographql.com/api/graphql';\n        this.schemaReport = options.schemaReport;\n        this.coreSchema = options.coreSchema;\n        this.isStopped = false;\n        this.logger = options.logger;\n        this.initialReportingDelayInMs = options.initialReportingDelayInMs;\n        this.fallbackReportingDelayInMs = options.fallbackReportingDelayInMs;\n        this.fetcher = options.fetcher ?? fetch;\n    }\n    stopped() {\n        return this.isStopped;\n    }\n    start() {\n        this.pollTimer = setTimeout(() => this.sendOneReportAndScheduleNext(false), this.initialReportingDelayInMs);\n    }\n    stop() {\n        this.isStopped = true;\n        if (this.pollTimer) {\n            clearTimeout(this.pollTimer);\n            this.pollTimer = undefined;\n        }\n    }\n    async sendOneReportAndScheduleNext(sendNextWithCoreSchema) {\n        this.pollTimer = undefined;\n        if (this.stopped())\n            return;\n        try {\n            const result = await this.reportSchema(sendNextWithCoreSchema);\n            if (!result) {\n                return;\n            }\n            if (!this.stopped()) {\n                this.pollTimer = setTimeout(() => this.sendOneReportAndScheduleNext(result.withCoreSchema), result.inSeconds * 1000);\n            }\n            return;\n        }\n        catch (error) {\n            this.logger.error(`Error reporting server info to Apollo during schema reporting: ${error}`);\n            if (!this.stopped()) {\n                this.pollTimer = setTimeout(() => this.sendOneReportAndScheduleNext(false), this.fallbackReportingDelayInMs);\n            }\n        }\n    }\n    async reportSchema(withCoreSchema) {\n        const { data, errors } = await this.apolloQuery({\n            report: this.schemaReport,\n            coreSchema: withCoreSchema ? this.coreSchema : null,\n        });\n        if (errors) {\n            throw new Error(errors.map((x) => x.message).join('\\n'));\n        }\n        function msgForUnexpectedResponse(data) {\n            return [\n                'Unexpected response shape from Apollo when',\n                'reporting schema. If this continues, please reach',\n                'out to support@apollographql.com.',\n                'Received response:',\n                JSON.stringify(data),\n            ].join(' ');\n        }\n        if (!data || !data.reportSchema) {\n            throw new Error(msgForUnexpectedResponse(data));\n        }\n        if (data.reportSchema.__typename === 'ReportSchemaResponse') {\n            return data.reportSchema;\n        }\n        else if (data.reportSchema.__typename === 'ReportSchemaError') {\n            this.logger.error([\n                'Received input validation error from Apollo:',\n                data.reportSchema.message,\n                'Stopping reporting. Please fix the input errors.',\n            ].join(' '));\n            this.stop();\n            return null;\n        }\n        throw new Error(msgForUnexpectedResponse(data));\n    }\n    async apolloQuery(variables) {\n        const request = {\n            query: schemaReportGql,\n            variables,\n        };\n        const httpResponse = await this.fetcher(this.endpointUrl, {\n            method: 'POST',\n            headers: this.headers,\n            body: JSON.stringify(request),\n        });\n        if (!httpResponse.ok) {\n            throw new Error([\n                `An unexpected HTTP status code (${httpResponse.status}) was`,\n                'encountered during schema reporting.',\n            ].join(' '));\n        }\n        try {\n            return await httpResponse.json();\n        }\n        catch (error) {\n            throw new Error([\n                \"Couldn't report schema to Apollo.\",\n                'Parsing response as JSON failed.',\n                'If this continues please reach out to support@apollographql.com',\n                error,\n            ].join(' '));\n        }\n    }\n}\n//# sourceMappingURL=schemaReporter.js.map,/dist/cjs/plugin/usageReporting/index.js.mapī{\"version\":3,\"file\":\"index.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../../src/plugin/usageReporting/index.ts\"],\"names\":[],\"mappings\":\";;;AAAA,yCAA+D;AAAtD,6HAAA,gCAAgC,OAAA\"}#/dist/esm/standalone/index.d.ts.map\u0003{\"version\":3,\"file\":\"index.d.ts\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/standalone/index.ts\"],\"names\":[],\"mappings\":\";;AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAI/D,OAAa,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACzC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAY9E,MAAM,WAAW,uCAAuC;IACtD,GAAG,EAAE,eAAe,CAAC;IACrB,GAAG,EAAE,cAAc,CAAC;CACrB;AAED,MAAM,WAAW,4BAA4B,CAAC,QAAQ,SAAS,WAAW;IACxE,OAAO,CAAC,EAAE,eAAe,CACvB;QAAC,uCAAuC;KAAC,EACzC,QAAQ,CACT,CAAC;CACH;AAED,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,YAAY,CAAC,WAAW,CAAC,EACjC,OAAO,CAAC,EAAE,4BAA4B,CAAC,WAAW,CAAC,GAAG;IACpD,MAAM,CAAC,EAAE,aAAa,CAAC;CACxB,GACA,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAC5B,wBAAsB,qBAAqB,CAAC,QAAQ,SAAS,WAAW,EACtE,MAAM,EAAE,YAAY,CAAC,QAAQ,CAAC,EAC9B,OAAO,EAAE,YAAY,CAAC,4BAA4B,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC,GAAG;IACzE,MAAM,CAAC,EAAE,aAAa,CAAC;CACxB,GACA,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC\"}*/dist/esm/externalTypes/constructor.js.mapĆ{\"version\":3,\"file\":\"constructor.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/externalTypes/constructor.ts\"],\"names\":[],\"mappings\":\"\"}/dist/cjs/standalone/index.js\u0005\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.startStandaloneServer = void 0;\nconst body_parser_1 = __importDefault(require(\"body-parser\"));\nconst cors_1 = __importDefault(require(\"cors\"));\nconst express_1 = __importDefault(require(\"express\"));\nconst http_1 = __importDefault(require(\"http\"));\nconst index_js_1 = require(\"../express4/index.js\");\nconst index_js_2 = require(\"../plugin/drainHttpServer/index.js\");\nconst urlForHttpServer_js_1 = require(\"../utils/urlForHttpServer.js\");\nasync function startStandaloneServer(server, options) {\n    const app = (0, express_1.default)();\n    const httpServer = http_1.default.createServer(app);\n    server.addPlugin((0, index_js_2.ApolloServerPluginDrainHttpServer)({ httpServer: httpServer }));\n    await server.start();\n    const context = options?.context ?? (async () => ({}));\n    app.use((0, cors_1.default)(), body_parser_1.default.json(), (0, index_js_1.expressMiddleware)(server, { context }));\n    const listenOptions = options?.listen ?? { port: 4000 };\n    await new Promise((resolve) => {\n        httpServer.listen(listenOptions, resolve);\n    });\n    return { url: (0, urlForHttpServer_js_1.urlForHttpServer)(httpServer) };\n}\nexports.startStandaloneServer = startStandaloneServer;\n//# sourceMappingURL=index.js.map(/dist/cjs/utils/computeCoreSchemaHash.js\u0001\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.computeCoreSchemaHash = void 0;\nconst utils_createhash_1 = require(\"@apollo/utils.createhash\");\nfunction computeCoreSchemaHash(schema) {\n    return (0, utils_createhash_1.createHash)('sha256').update(schema).digest('hex');\n}\nexports.computeCoreSchemaHash = computeCoreSchemaHash;\n//# sourceMappingURL=computeCoreSchemaHash.js.map-/dist/cjs/plugin/schemaReporting/index.js.map\n{\"version\":3,\"file\":\"index.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../../src/plugin/schemaReporting/index.ts\"],\"names\":[],\"mappings\":\"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\"}6/dist/cjs/externalTypes/incrementalDeliveryPolyfill.jsĄ\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=incrementalDeliveryPolyfill.js.map\"/dist/esm/utils/invokeHooks.js.map\u0004m{\"version\":3,\"file\":\"invokeHooks.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/utils/invokeHooks.ts\"],\"names\":[],\"mappings\":\"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAK3C,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,OAAY,EACZ,IAAyE;IAEzE,MAAM,WAAW,GAAG,CAClB,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CACzD,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAEpB,WAAW,CAAC,OAAO,EAAE,CAAC;IAEtB,OAAO,KAAK,EAAE,GAAG,IAAkB,EAAE,EAAE;QACrC,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE;YACpC,UAAU,CAAC,GAAG,IAAI,CAAC,CAAC;SACrB;IACH,CAAC,CAAC;AACJ,CAAC;AAID,MAAM,UAAU,sBAAsB,CACpC,OAAY,EACZ,IAA+D;IAE/D,MAAM,WAAW,GAAmC,OAAO;SACxD,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SAC7B,MAAM,CAAC,SAAS,CAAC,CAAC;IAErB,WAAW,CAAC,OAAO,EAAE,CAAC;IAEtB,OAAO,CAAC,GAAG,IAAkB,EAAE,EAAE;QAC/B,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE;YACpC,UAAU,CAAC,GAAG,IAAI,CAAC,CAAC;SACrB;IACH,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iCAAiC,CACrD,OAAY,EACZ,IAAgD;IAEhD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;QAC5B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC;QACjC,IAAI,KAAK,IAAI,IAAI,EAAE;YACjB,OAAO,KAAK,CAAC;SACd;KACF;IACD,OAAO,IAAI,CAAC;AACd,CAAC\"}/dist/esm/errorNormalize.d.ts\u0002import { GraphQLError, GraphQLFormattedError } from 'graphql';\nimport type { HTTPGraphQLHead } from './externalTypes/http.js';\nexport declare function normalizeAndFormatErrors(errors: ReadonlyArray<unknown>, options?: {\n    formatError?: (formattedError: GraphQLFormattedError, error: unknown) => GraphQLFormattedError;\n    includeStacktraceInErrorResponses?: boolean;\n}): {\n    formattedErrors: Array<GraphQLFormattedError>;\n    httpFromErrors: HTTPGraphQLHead;\n};\nexport declare function ensureError(maybeError: unknown): Error;\nexport declare function ensureGraphQLError(maybeError: unknown, messagePrefixIfNotGraphQLError?: string): GraphQLError;\n//# sourceMappingURL=errorNormalize.d.ts.map/dist/esm/runHttpQuery.d.ts.map\u0003X{\"version\":3,\"file\":\"runHttpQuery.d.ts\",\"sourceRoot\":\"\",\"sources\":[\"../../src/runHttpQuery.ts\"],\"names\":[],\"mappings\":\"AAAA,OAAO,KAAK,EACV,WAAW,EAKX,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,YAAY,EACZ,qBAAqB,EAIrB,iBAAiB,EAClB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,wBAAwB,EAAQ,MAAM,SAAS,CAAC;AAkGzD,wBAAsB,YAAY,CAAC,QAAQ,SAAS,WAAW,EAAE,EAC/D,MAAM,EACN,WAAW,EACX,YAAY,EACZ,iBAAiB,EACjB,SAAS,EACT,6BAA6B,GAC9B,EAAE;IACD,MAAM,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC/B,WAAW,EAAE,kBAAkB,CAAC;IAChC,YAAY,EAAE,QAAQ,CAAC;IACvB,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,SAAS,EAAE,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IAC3C,6BAA6B,EAAE,eAAe,GAAG,IAAI,CAAC;CACvD,GAAG,OAAO,CAAC,mBAAmB,CAAC,CA6J/B;AAwED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,wBAAwB,UAElE;AAED,wBAAgB,kBAAkB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,eAAe,CAKnE;AAKD,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,eAAe,EACvB,MAAM,EAAE,eAAe,QAYxB\"}\"/dist/cjs/externalTypes/plugins.jsp\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=plugins.js.map3/dist/esm/plugin/drainHttpServer/stoppable.d.ts.map\u0001{\"version\":3,\"file\":\"stoppable.d.ts\",\"sourceRoot\":\"\",\"sources\":[\"../../../../src/plugin/drainHttpServer/stoppable.ts\"],\"names\":[],\"mappings\":\";;AA4BA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,qBAAa,OAAO;IAIN,OAAO,CAAC,MAAM;IAH1B,OAAO,CAAC,qBAAqB,CAA6B;IAC1D,OAAO,CAAC,OAAO,CAAS;gBAEJ,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM;IA+BhD,IAAI,CAAC,qBAAqB,SAAW,GAAG,OAAO,CAAC,OAAO,CAAC;CA8C/D\"}-/dist/cjs/plugin/usageReporting/plugin.js.map;!{\"version\":3,\"file\":\"plugin.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../../src/plugin/usageReporting/plugin.ts\"],\"names\":[],\"mappings\":\"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\"}/dist/esm/express4/index.js.map\u0007>{\"version\":3,\"file\":\"index.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/express4/index.ts\"],\"names\":[],\"mappings\":\"AAQA,OAAO,EAAE,KAAK,IAAI,QAAQ,EAAE,MAAM,KAAK,CAAC;AAmBxC,MAAM,UAAU,iBAAiB,CAC/B,MAA8B,EAC9B,OAA4C;IAE5C,MAAM,CAAC,aAAa,CAAC,qBAAqB,CAAC,CAAC;IAK5C,MAAM,cAAc,GAGhB,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IAErB,MAAM,OAAO,GACX,OAAO,EAAE,OAAO,IAAI,cAAc,CAAC;IAErC,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QACxB,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE;YAKb,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAChB,GAAG,CAAC,IAAI,CACN,sEAAsE;gBACpE,+DAA+D,CAClE,CAAC;YACF,OAAO;SACR;QAED,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;QAC1C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;YACtD,IAAI,KAAK,KAAK,SAAS,EAAE;gBAOvB,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;aACnE;SACF;QAED,MAAM,kBAAkB,GAAuB;YAC7C,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE;YAChC,OAAO;YACP,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,EAAE;YACtC,IAAI,EAAE,GAAG,CAAC,IAAI;SACf,CAAC;QAEF,MAAM;aACH,yBAAyB,CAAC;YACzB,kBAAkB;YAClB,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;SACrC,CAAC;aACD,IAAI,CAAC,KAAK,EAAE,mBAAmB,EAAE,EAAE;YAClC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,mBAAmB,CAAC,OAAO,EAAE;gBACtD,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;aAC3B;YACD,GAAG,CAAC,UAAU,GAAG,mBAAmB,CAAC,MAAM,IAAI,GAAG,CAAC;YAEnD,IAAI,mBAAmB,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE;gBAChD,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC1C,OAAO;aACR;YAED,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,mBAAmB,CAAC,IAAI,CAAC,aAAa,EAAE;gBAChE,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBAMjB,IAAI,OAAQ,GAAW,CAAC,KAAK,KAAK,UAAU,EAAE;oBAC3C,GAAW,CAAC,KAAK,EAAE,CAAC;iBACtB;aACF;YACD,GAAG,CAAC,GAAG,EAAE,CAAC;QACZ,CAAC,CAAC;aACD,KAAK,CAAC,IAAI,CAAC,CAAC;IACjB,CAAC,CAAC;AACJ,CAAC\"}/dist/cjs/preventCsrf.js\u0006\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.preventCsrf = exports.recommendedCsrfPreventionRequestHeaders = void 0;\nconst whatwg_mimetype_1 = __importDefault(require(\"whatwg-mimetype\"));\nconst internalErrorClasses_js_1 = require(\"./internalErrorClasses.js\");\nexports.recommendedCsrfPreventionRequestHeaders = [\n    'x-apollo-operation-name',\n    'apollo-require-preflight',\n];\nconst NON_PREFLIGHTED_CONTENT_TYPES = [\n    'application/x-www-form-urlencoded',\n    'multipart/form-data',\n    'text/plain',\n];\nfunction preventCsrf(headers, csrfPreventionRequestHeaders) {\n    const contentType = headers.get('content-type');\n    if (contentType !== undefined) {\n        const contentTypeParsed = whatwg_mimetype_1.default.parse(contentType);\n        if (contentTypeParsed === null) {\n            return;\n        }\n        if (!NON_PREFLIGHTED_CONTENT_TYPES.includes(contentTypeParsed.essence)) {\n            return;\n        }\n    }\n    if (csrfPreventionRequestHeaders.some((header) => {\n        const value = headers.get(header);\n        return value !== undefined && value.length > 0;\n    })) {\n        return;\n    }\n    throw new internalErrorClasses_js_1.BadRequestError(`This operation has been blocked as a potential Cross-Site Request Forgery ` +\n        `(CSRF). Please either specify a 'content-type' header (with a type that ` +\n        `is not one of ${NON_PREFLIGHTED_CONTENT_TYPES.join(', ')}) or provide ` +\n        `a non-empty value for one of the following headers: ${csrfPreventionRequestHeaders.join(', ')}\\n`);\n}\nexports.preventCsrf = preventCsrf;\n//# sourceMappingURL=preventCsrf.js.map-/dist/cjs/plugin/landingPage/default/index.js\u000f$\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ApolloServerPluginLandingPageProductionDefault = exports.ApolloServerPluginLandingPageLocalDefault = void 0;\nconst getEmbeddedHTML_js_1 = require(\"./getEmbeddedHTML.js\");\nfunction ApolloServerPluginLandingPageLocalDefault(options = {}) {\n    const { version, __internal_apolloStudioEnv__, ...rest } = {\n        embed: true,\n        ...options,\n    };\n    return ApolloServerPluginLandingPageDefault(version, {\n        isProd: false,\n        apolloStudioEnv: __internal_apolloStudioEnv__,\n        ...rest,\n    });\n}\nexports.ApolloServerPluginLandingPageLocalDefault = ApolloServerPluginLandingPageLocalDefault;\nfunction ApolloServerPluginLandingPageProductionDefault(options = {}) {\n    const { version, __internal_apolloStudioEnv__, ...rest } = options;\n    return ApolloServerPluginLandingPageDefault(version, {\n        isProd: true,\n        apolloStudioEnv: __internal_apolloStudioEnv__,\n        ...rest,\n    });\n}\nexports.ApolloServerPluginLandingPageProductionDefault = ApolloServerPluginLandingPageProductionDefault;\nfunction encodeConfig(config) {\n    return JSON.stringify(encodeURIComponent(JSON.stringify(config)));\n}\nconst getNonEmbeddedLandingPageHTML = (version, config) => {\n    const encodedConfig = encodeConfig(config);\n    return `\n <div class=\"fallback\">\n  <h1>Welcome to Apollo Server</h1>\n  <p>The full landing page cannot be loaded; it appears that you might be offline.</p>\n</div>\n<script>window.landingPage = ${encodedConfig};</script>\n<script src=\"https://apollo-server-landing-page.cdn.apollographql.com/${version}/static/js/main.js\"></script>`;\n};\nfunction ApolloServerPluginLandingPageDefault(maybeVersion, config) {\n    const version = maybeVersion ?? '_latest';\n    return {\n        __internal_installed_implicitly__: false,\n        async serverWillStart() {\n            return {\n                async renderLandingPage() {\n                    const html = `\n<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\" />\n    <link\n      rel=\"icon\"\n      href=\"https://apollo-server-landing-page.cdn.apollographql.com/${version}/assets/favicon.png\"\n    />\n    <meta name=\"viewport\" content=\"width=device-width,initial-scale=1\" />\n    <link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" />\n    <link\n      href=\"https://fonts.googleapis.com/css2?family=Source+Sans+Pro&display=swap\"\n      rel=\"stylesheet\"\n    />\n    <meta name=\"theme-color\" content=\"#000000\" />\n    <meta name=\"description\" content=\"Apollo server landing page\" />\n    <link\n      rel=\"apple-touch-icon\"\n      href=\"https://apollo-server-landing-page.cdn.apollographql.com/${version}/assets/favicon.png\"\n    />\n    <link\n      rel=\"manifest\"\n      href=\"https://apollo-server-landing-page.cdn.apollographql.com/${version}/manifest.json\"\n    />\n    <title>Apollo Server</title>\n  </head>\n  <body style=\"margin: 0; overflow-x: hidden; overflow-y: hidden\">\n    <noscript>You need to enable JavaScript to run this app.</noscript>\n    <div id=\"react-root\">\n      <style>\n        .fallback {\n          opacity: 0;\n          animation: fadeIn 1s 1s;\n          animation-iteration-count: 1;\n          animation-fill-mode: forwards;\n          padding: 1em;\n        }\n        @keyframes fadeIn {\n          0% {opacity:0;}\n          100% {opacity:1; }\n        }\n      </style>\n    ${config.embed\n                        ? 'graphRef' in config && config.graphRef\n                            ? (0, getEmbeddedHTML_js_1.getEmbeddedExplorerHTML)(version, config)\n                            : (0, getEmbeddedHTML_js_1.getEmbeddedSandboxHTML)(version, config)\n                        : getNonEmbeddedLandingPageHTML(version, config)}\n    </div>\n  </body>\n</html>\n          `;\n                    return { html };\n                },\n            };\n        },\n    };\n}\n//# sourceMappingURL=index.js.map(/dist/cjs/plugin/usageReporting/stats.js*\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.OurContextualizedStats = exports.OurReport = exports.SizeEstimator = void 0;\nconst usage_reporting_protobuf_1 = require(\"@apollo/usage-reporting-protobuf\");\nconst durationHistogram_js_1 = require(\"./durationHistogram.js\");\nconst iterateOverTrace_js_1 = require(\"./iterateOverTrace.js\");\nclass SizeEstimator {\n    constructor() {\n        this.bytes = 0;\n    }\n}\nexports.SizeEstimator = SizeEstimator;\nclass OurReport {\n    constructor(header) {\n        this.header = header;\n        this.tracesPerQuery = Object.create(null);\n        this.endTime = null;\n        this.operationCount = 0;\n        this.sizeEstimator = new SizeEstimator();\n    }\n    ensureCountsAreIntegers() {\n        for (const tracesAndStats of Object.values(this.tracesPerQuery)) {\n            tracesAndStats.ensureCountsAreIntegers();\n        }\n    }\n    addTrace({ statsReportKey, trace, asTrace, referencedFieldsByType, maxTraceBytes = 10 * 1024 * 1024, }) {\n        const tracesAndStats = this.getTracesAndStats({\n            statsReportKey,\n            referencedFieldsByType,\n        });\n        if (asTrace) {\n            const encodedTrace = usage_reporting_protobuf_1.Trace.encode(trace).finish();\n            if (!isNaN(maxTraceBytes) && encodedTrace.length > maxTraceBytes) {\n                tracesAndStats.statsWithContext.addTrace(trace, this.sizeEstimator);\n            }\n            else {\n                tracesAndStats.trace.push(encodedTrace);\n                this.sizeEstimator.bytes += 2 + encodedTrace.length;\n            }\n        }\n        else {\n            tracesAndStats.statsWithContext.addTrace(trace, this.sizeEstimator);\n        }\n    }\n    getTracesAndStats({ statsReportKey, referencedFieldsByType, }) {\n        const existing = this.tracesPerQuery[statsReportKey];\n        if (existing) {\n            return existing;\n        }\n        this.sizeEstimator.bytes += estimatedBytesForString(statsReportKey);\n        for (const [typeName, referencedFieldsForType] of Object.entries(referencedFieldsByType)) {\n            this.sizeEstimator.bytes += 2 + 2;\n            if (referencedFieldsForType.isInterface) {\n                this.sizeEstimator.bytes += 2;\n            }\n            this.sizeEstimator.bytes += estimatedBytesForString(typeName);\n            for (const fieldName of referencedFieldsForType.fieldNames) {\n                this.sizeEstimator.bytes += estimatedBytesForString(fieldName);\n            }\n        }\n        return (this.tracesPerQuery[statsReportKey] = new OurTracesAndStats(referencedFieldsByType));\n    }\n}\nexports.OurReport = OurReport;\nclass OurTracesAndStats {\n    constructor(referencedFieldsByType) {\n        this.referencedFieldsByType = referencedFieldsByType;\n        this.trace = [];\n        this.statsWithContext = new StatsByContext();\n        this.internalTracesContributingToStats = [];\n    }\n    ensureCountsAreIntegers() {\n        this.statsWithContext.ensureCountsAreIntegers();\n    }\n}\nclass StatsByContext {\n    constructor() {\n        this.map = Object.create(null);\n    }\n    toArray() {\n        return Object.values(this.map);\n    }\n    ensureCountsAreIntegers() {\n        for (const contextualizedStats of Object.values(this.map)) {\n            contextualizedStats.ensureCountsAreIntegers();\n        }\n    }\n    addTrace(trace, sizeEstimator) {\n        this.getContextualizedStats(trace, sizeEstimator).addTrace(trace, sizeEstimator);\n    }\n    getContextualizedStats(trace, sizeEstimator) {\n        const statsContext = {\n            clientName: trace.clientName,\n            clientVersion: trace.clientVersion,\n        };\n        const statsContextKey = JSON.stringify(statsContext);\n        const existing = this.map[statsContextKey];\n        if (existing) {\n            return existing;\n        }\n        sizeEstimator.bytes +=\n            20 +\n                estimatedBytesForString(trace.clientName) +\n                estimatedBytesForString(trace.clientVersion);\n        const contextualizedStats = new OurContextualizedStats(statsContext);\n        this.map[statsContextKey] = contextualizedStats;\n        return contextualizedStats;\n    }\n}\nclass OurContextualizedStats {\n    constructor(context) {\n        this.context = context;\n        this.queryLatencyStats = new OurQueryLatencyStats();\n        this.perTypeStat = Object.create(null);\n    }\n    ensureCountsAreIntegers() {\n        for (const typeStat of Object.values(this.perTypeStat)) {\n            typeStat.ensureCountsAreIntegers();\n        }\n    }\n    addTrace(trace, sizeEstimator) {\n        const { fieldExecutionWeight } = trace;\n        if (!fieldExecutionWeight) {\n            this.queryLatencyStats.requestsWithoutFieldInstrumentation++;\n        }\n        this.queryLatencyStats.requestCount++;\n        if (trace.fullQueryCacheHit) {\n            this.queryLatencyStats.cacheLatencyCount.incrementDuration(trace.durationNs);\n            this.queryLatencyStats.cacheHits++;\n        }\n        else {\n            this.queryLatencyStats.latencyCount.incrementDuration(trace.durationNs);\n        }\n        if (!trace.fullQueryCacheHit && trace.cachePolicy?.maxAgeNs != null) {\n            switch (trace.cachePolicy.scope) {\n                case usage_reporting_protobuf_1.Trace.CachePolicy.Scope.PRIVATE:\n                    this.queryLatencyStats.privateCacheTtlCount.incrementDuration(trace.cachePolicy.maxAgeNs);\n                    break;\n                case usage_reporting_protobuf_1.Trace.CachePolicy.Scope.PUBLIC:\n                    this.queryLatencyStats.publicCacheTtlCount.incrementDuration(trace.cachePolicy.maxAgeNs);\n                    break;\n            }\n        }\n        if (trace.persistedQueryHit) {\n            this.queryLatencyStats.persistedQueryHits++;\n        }\n        if (trace.persistedQueryRegister) {\n            this.queryLatencyStats.persistedQueryMisses++;\n        }\n        if (trace.forbiddenOperation) {\n            this.queryLatencyStats.forbiddenOperationCount++;\n        }\n        if (trace.registeredOperation) {\n            this.queryLatencyStats.registeredOperationCount++;\n        }\n        let hasError = false;\n        const traceNodeStats = (node, path) => {\n            if (node.error?.length) {\n                hasError = true;\n                let currPathErrorStats = this.queryLatencyStats.rootErrorStats;\n                path.toArray().forEach((subPath) => {\n                    currPathErrorStats = currPathErrorStats.getChild(subPath, sizeEstimator);\n                });\n                currPathErrorStats.requestsWithErrorsCount += 1;\n                currPathErrorStats.errorsCount += node.error.length;\n            }\n            if (fieldExecutionWeight) {\n                const fieldName = node.originalFieldName || node.responseName;\n                if (node.parentType &&\n                    fieldName &&\n                    node.type &&\n                    node.endTime != null &&\n                    node.startTime != null &&\n                    node.endTime >= node.startTime) {\n                    const typeStat = this.getTypeStat(node.parentType, sizeEstimator);\n                    const fieldStat = typeStat.getFieldStat(fieldName, node.type, sizeEstimator);\n                    fieldStat.errorsCount += node.error?.length ?? 0;\n                    fieldStat.observedExecutionCount++;\n                    fieldStat.estimatedExecutionCount += fieldExecutionWeight;\n                    fieldStat.requestsWithErrorsCount +=\n                        (node.error?.length ?? 0) > 0 ? 1 : 0;\n                    fieldStat.latencyCount.incrementDuration(node.endTime - node.startTime, fieldExecutionWeight);\n                }\n            }\n            return false;\n        };\n        (0, iterateOverTrace_js_1.iterateOverTrace)(trace, traceNodeStats, true);\n        if (hasError) {\n            this.queryLatencyStats.requestsWithErrorsCount++;\n        }\n    }\n    getTypeStat(parentType, sizeEstimator) {\n        const existing = this.perTypeStat[parentType];\n        if (existing) {\n            return existing;\n        }\n        sizeEstimator.bytes += estimatedBytesForString(parentType);\n        const typeStat = new OurTypeStat();\n        this.perTypeStat[parentType] = typeStat;\n        return typeStat;\n    }\n}\nexports.OurContextualizedStats = OurContextualizedStats;\nclass OurQueryLatencyStats {\n    constructor() {\n        this.latencyCount = new durationHistogram_js_1.DurationHistogram();\n        this.requestCount = 0;\n        this.requestsWithoutFieldInstrumentation = 0;\n        this.cacheHits = 0;\n        this.persistedQueryHits = 0;\n        this.persistedQueryMisses = 0;\n        this.cacheLatencyCount = new durationHistogram_js_1.DurationHistogram();\n        this.rootErrorStats = new OurPathErrorStats();\n        this.requestsWithErrorsCount = 0;\n        this.publicCacheTtlCount = new durationHistogram_js_1.DurationHistogram();\n        this.privateCacheTtlCount = new durationHistogram_js_1.DurationHistogram();\n        this.registeredOperationCount = 0;\n        this.forbiddenOperationCount = 0;\n    }\n}\nclass OurPathErrorStats {\n    constructor() {\n        this.children = Object.create(null);\n        this.errorsCount = 0;\n        this.requestsWithErrorsCount = 0;\n    }\n    getChild(subPath, sizeEstimator) {\n        const existing = this.children[subPath];\n        if (existing) {\n            return existing;\n        }\n        const child = new OurPathErrorStats();\n        this.children[subPath] = child;\n        sizeEstimator.bytes += estimatedBytesForString(subPath) + 4;\n        return child;\n    }\n}\nclass OurTypeStat {\n    constructor() {\n        this.perFieldStat = Object.create(null);\n    }\n    getFieldStat(fieldName, returnType, sizeEstimator) {\n        const existing = this.perFieldStat[fieldName];\n        if (existing) {\n            return existing;\n        }\n        sizeEstimator.bytes +=\n            estimatedBytesForString(fieldName) +\n                estimatedBytesForString(returnType) +\n                10;\n        const fieldStat = new OurFieldStat(returnType);\n        this.perFieldStat[fieldName] = fieldStat;\n        return fieldStat;\n    }\n    ensureCountsAreIntegers() {\n        for (const fieldStat of Object.values(this.perFieldStat)) {\n            fieldStat.ensureCountsAreIntegers();\n        }\n    }\n}\nclass OurFieldStat {\n    constructor(returnType) {\n        this.returnType = returnType;\n        this.errorsCount = 0;\n        this.observedExecutionCount = 0;\n        this.estimatedExecutionCount = 0;\n        this.requestsWithErrorsCount = 0;\n        this.latencyCount = new durationHistogram_js_1.DurationHistogram();\n    }\n    ensureCountsAreIntegers() {\n        this.estimatedExecutionCount = Math.floor(this.estimatedExecutionCount);\n    }\n}\nfunction estimatedBytesForString(s) {\n    return 2 + Buffer.byteLength(s);\n}\n//# sourceMappingURL=stats.js.map/dist/esm/errors/index.js\u0005\u0000import { GraphQLError } from 'graphql';\nexport var ApolloServerErrorCode;\n(function (ApolloServerErrorCode) {\n    ApolloServerErrorCode[\"INTERNAL_SERVER_ERROR\"] = \"INTERNAL_SERVER_ERROR\";\n    ApolloServerErrorCode[\"GRAPHQL_PARSE_FAILED\"] = \"GRAPHQL_PARSE_FAILED\";\n    ApolloServerErrorCode[\"GRAPHQL_VALIDATION_FAILED\"] = \"GRAPHQL_VALIDATION_FAILED\";\n    ApolloServerErrorCode[\"PERSISTED_QUERY_NOT_FOUND\"] = \"PERSISTED_QUERY_NOT_FOUND\";\n    ApolloServerErrorCode[\"PERSISTED_QUERY_NOT_SUPPORTED\"] = \"PERSISTED_QUERY_NOT_SUPPORTED\";\n    ApolloServerErrorCode[\"BAD_USER_INPUT\"] = \"BAD_USER_INPUT\";\n    ApolloServerErrorCode[\"OPERATION_RESOLUTION_FAILURE\"] = \"OPERATION_RESOLUTION_FAILURE\";\n    ApolloServerErrorCode[\"BAD_REQUEST\"] = \"BAD_REQUEST\";\n})(ApolloServerErrorCode || (ApolloServerErrorCode = {}));\nexport var ApolloServerValidationErrorCode;\n(function (ApolloServerValidationErrorCode) {\n    ApolloServerValidationErrorCode[\"INTROSPECTION_DISABLED\"] = \"INTROSPECTION_DISABLED\";\n})(ApolloServerValidationErrorCode || (ApolloServerValidationErrorCode = {}));\nexport function unwrapResolverError(error) {\n    if (error instanceof GraphQLError && error.path && error.originalError) {\n        return error.originalError;\n    }\n    return error;\n}\n//# sourceMappingURL=index.js.map&/dist/esm/externalTypes/context.js.map~{\"version\":3,\"file\":\"context.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/externalTypes/context.ts\"],\"names\":[],\"mappings\":\"\"}/dist/esm/utils/HeaderMap.js\u0001hexport class HeaderMap extends Map {\n    set(key, value) {\n        return super.set(key.toLowerCase(), value);\n    }\n    get(key) {\n        return super.get(key.toLowerCase());\n    }\n    delete(key) {\n        return super.delete(key.toLowerCase());\n    }\n    has(key) {\n        return super.has(key.toLowerCase());\n    }\n}\n//# sourceMappingURL=HeaderMap.js.map$/dist/esm/determineApolloConfig.d.tsimport type { ApolloConfig, ApolloConfigInput } from './externalTypes/index.js';\nexport declare function determineApolloConfig(input: ApolloConfigInput | undefined): ApolloConfig;\n//# sourceMappingURL=determineApolloConfig.d.ts.map%/src/externalTypes/requestPipeline.ts\u0012V// This file defines the GraphQLRequestContext type which is an argument to most\n// plugin hooks, as well as a variety of variants on it which assert that\n// particular sub-fields are set by a particular point in the request pipeline.\n\nimport type { WithRequired } from '@apollo/utils.withrequired';\nimport type { Trace } from '@apollo/usage-reporting-protobuf';\nimport type { BaseContext } from './context.js';\nimport type {\n  GraphQLInProgressResponse,\n  GraphQLRequest,\n  GraphQLResponse,\n} from './graphql.js';\nimport type { Logger } from '@apollo/utils.logger';\nimport type { KeyValueCache } from '@apollo/utils.keyvaluecache';\nimport type {\n  DocumentNode,\n  GraphQLError,\n  GraphQLSchema,\n  OperationDefinitionNode,\n} from 'graphql';\nimport type { CachePolicy } from '@apollo/cache-control-types';\n\nexport interface GraphQLRequestMetrics {\n  // It would be more accurate to call this fieldLevelInstrumentation (it is\n  // true if the hook of that name returns truthy) but for backwards\n  // compatibility we keep this name (this field is read by `@apollo/gateway` to\n  // decide whether or not to send the apollo-federation-include-trace header).\n  captureTraces?: boolean;\n  persistedQueryHit?: boolean;\n  persistedQueryRegister?: boolean;\n  responseCacheHit?: boolean;\n  forbiddenOperation?: boolean;\n  registeredOperation?: boolean;\n  startHrTime?: [number, number];\n  queryPlanTrace?: Trace.QueryPlanNode;\n}\n\nexport interface GraphQLRequestContext<TContext extends BaseContext> {\n  readonly logger: Logger;\n  readonly cache: KeyValueCache<string>;\n\n  readonly request: GraphQLRequest;\n  readonly response: GraphQLInProgressResponse;\n\n  readonly schema: GraphQLSchema;\n\n  readonly contextValue: TContext;\n\n  readonly queryHash?: string;\n\n  readonly document?: DocumentNode;\n  readonly source?: string;\n\n  // `operationName` is set based on the operation AST, so it is defined even if\n  // no `request.operationName` was passed in.  It will be set to `null` for an\n  // anonymous operation, or if `requestName.operationName` was passed in but\n  // doesn't resolve to an operation in the document.\n  readonly operationName?: string | null;\n  readonly operation?: OperationDefinitionNode;\n\n  /**\n   * Unformatted errors which have occurred during the request. Note that these\n   * are present earlier in the request pipeline and differ from **formatted**\n   * errors which are the result of running the user-configurable `formatError`\n   * transformation function over specific errors; these can eventually be found\n   * in `response.result.errors`.\n   */\n  readonly errors?: ReadonlyArray<GraphQLError>;\n\n  readonly metrics: GraphQLRequestMetrics;\n\n  readonly overallCachePolicy: CachePolicy;\n\n  /**\n   * True if this request is part of a potentially multi-operation batch. Note\n   * that if this is true, `response.http` will be shared with the other\n   * operations in the batch.\n   */\n  readonly requestIsBatched: boolean;\n}\n\nexport type GraphQLRequestContextDidResolveSource<\n  TContext extends BaseContext,\n> = WithRequired<GraphQLRequestContext<TContext>, 'source' | 'queryHash'>;\nexport type GraphQLRequestContextParsingDidStart<TContext extends BaseContext> =\n  GraphQLRequestContextDidResolveSource<TContext>;\nexport type GraphQLRequestContextValidationDidStart<\n  TContext extends BaseContext,\n> = GraphQLRequestContextParsingDidStart<TContext> &\n  WithRequired<GraphQLRequestContext<TContext>, 'document'>;\nexport type GraphQLRequestContextDidResolveOperation<\n  TContext extends BaseContext,\n> = GraphQLRequestContextValidationDidStart<TContext> &\n  WithRequired<GraphQLRequestContext<TContext>, 'operationName'>;\nexport type GraphQLRequestContextDidEncounterErrors<\n  TContext extends BaseContext,\n> = WithRequired<GraphQLRequestContext<TContext>, 'errors'>;\nexport type GraphQLRequestContextResponseForOperation<\n  TContext extends BaseContext,\n> = WithRequired<\n  GraphQLRequestContext<TContext>,\n  'source' | 'document' | 'operation' | 'operationName'\n>;\nexport type GraphQLRequestContextExecutionDidStart<\n  TContext extends BaseContext,\n> = GraphQLRequestContextParsingDidStart<TContext> &\n  WithRequired<\n    GraphQLRequestContext<TContext>,\n    'document' | 'operation' | 'operationName'\n  >;\nexport type GraphQLRequestContextWillSendResponse<\n  TContext extends BaseContext,\n> = GraphQLRequestContextDidResolveSource<TContext> & {\n  readonly response: GraphQLResponse;\n};\nexport type GraphQLRequestContextDidEncounterSubsequentErrors<\n  TContext extends BaseContext,\n> = GraphQLRequestContextWillSendResponse<TContext>;\nexport type GraphQLRequestContextWillSendSubsequentPayload<\n  TContext extends BaseContext,\n> = GraphQLRequestContextWillSendResponse<TContext>;\n//dist/esm/plugin/landingPage/default/index.d.ts\u0002import type { ApolloServerPlugin } from '../../../externalTypes/index.js';\nimport type { ApolloServerPluginLandingPageLocalDefaultOptions, ApolloServerPluginLandingPageProductionDefaultOptions } from './types.js';\nexport type { ApolloServerPluginLandingPageLocalDefaultOptions, ApolloServerPluginLandingPageProductionDefaultOptions, };\nexport declare function ApolloServerPluginLandingPageLocalDefault(options?: ApolloServerPluginLandingPageLocalDefaultOptions): ApolloServerPlugin;\nexport declare function ApolloServerPluginLandingPageProductionDefault(options?: ApolloServerPluginLandingPageProductionDefaultOptions): ApolloServerPlugin;\n//# sourceMappingURL=index.d.ts.map,/dist/esm/plugin/usageReporting/options.d.ts\timport type { GraphQLError, DocumentNode } from 'graphql';\nimport type { GraphQLRequestContextDidResolveOperation, GraphQLRequestContext, GraphQLRequestContextWillSendResponse, BaseContext } from '../../externalTypes/index.js';\nimport type { Logger } from '@apollo/utils.logger';\nimport type { Trace } from '@apollo/usage-reporting-protobuf';\nimport type { Fetcher } from '@apollo/utils.fetcher';\nexport interface ApolloServerPluginUsageReportingOptions<TContext extends BaseContext> {\n    sendTraces?: boolean;\n    sendVariableValues?: VariableValueOptions;\n    sendHeaders?: SendValuesBaseOptions;\n    sendErrors?: SendErrorsOptions;\n    fieldLevelInstrumentation?: number | ((request: GraphQLRequestContextDidResolveOperation<TContext>) => Promise<number | boolean>);\n    includeRequest?: (request: GraphQLRequestContextDidResolveOperation<TContext> | GraphQLRequestContextWillSendResponse<TContext>) => Promise<boolean>;\n    generateClientInfo?: GenerateClientInfo<TContext>;\n    overrideReportedSchema?: string;\n    sendUnexecutableOperationDocuments?: boolean;\n    experimental_sendOperationAsTrace?: (trace: Trace, statsReportKey: string) => boolean;\n    sendReportsImmediately?: boolean;\n    fetcher?: Fetcher;\n    reportIntervalMs?: number;\n    maxUncompressedReportSize?: number;\n    maxAttempts?: number;\n    minimumRetryDelayMs?: number;\n    requestTimeoutMs?: number;\n    logger?: Logger;\n    reportErrorFunction?: (err: Error) => void;\n    endpointUrl?: string;\n    debugPrintReports?: boolean;\n    calculateSignature?: (ast: DocumentNode, operationName: string) => string;\n}\nexport declare type SendValuesBaseOptions = {\n    onlyNames: Array<string>;\n} | {\n    exceptNames: Array<string>;\n} | {\n    all: true;\n} | {\n    none: true;\n};\ndeclare type VariableValueTransformOptions = {\n    variables: Record<string, any>;\n    operationString?: string;\n};\nexport declare type VariableValueOptions = {\n    transform: (options: VariableValueTransformOptions) => Record<string, any>;\n} | SendValuesBaseOptions;\nexport declare type SendErrorsOptions = {\n    unmodified: true;\n} | {\n    masked: true;\n} | {\n    transform: (err: GraphQLError) => GraphQLError | null;\n};\nexport interface ClientInfo {\n    clientName?: string;\n    clientVersion?: string;\n}\nexport declare type GenerateClientInfo<TContext extends BaseContext> = (requestContext: GraphQLRequestContext<TContext>) => ClientInfo;\nexport {};\n//# sourceMappingURL=options.d.ts.map%/src/plugin/usageReporting/options.tsK\u0000import type { GraphQLError, DocumentNode } from 'graphql';\nimport type {\n  GraphQLRequestContextDidResolveOperation,\n  GraphQLRequestContext,\n  GraphQLRequestContextWillSendResponse,\n  BaseContext,\n} from '../../externalTypes/index.js';\nimport type { Logger } from '@apollo/utils.logger';\nimport type { Trace } from '@apollo/usage-reporting-protobuf';\nimport type { Fetcher } from '@apollo/utils.fetcher';\n\nexport interface ApolloServerPluginUsageReportingOptions<\n  TContext extends BaseContext,\n> {\n  //#region Configure exactly which data should be sent to Apollo.\n  /**\n   * Apollo Server's usage reports describe each individual request in one of\n   * two ways: as a \"trace\" (a detailed description of the specific request,\n   * including a query plan and resolver tree with timings and errors, as well\n   * as optional details like variable values and HTTP headers), or as part of\n   * aggregated \"stats\" (where invocations of the same operation from the same\n   * client program are aggregated together rather than described individually).\n   * Apollo Server uses an heuristic to decide which operations to describe as\n   * traces and which to aggregate as stats.\n   *\n   * By setting the `sendTraces` option to `false`, Apollo Server will describe\n   * *all* operations as stats; individual requests will never be broken out\n   * into separate traces. If you set `sendTraces: false`, then Apollo Studio's\n   * Traces view won't show any traces (other Studio functionality will be\n   * unaffected).\n   *\n   * Note that the values of `sendVariableValues`, `sendHeaders`, and\n   *  `sendUnexecutableOperationDocuments` are irrelevant if you set\n   *  `sendTraces: false`, because those options control data that is contained\n   *  only in traces (not in stats).\n   *\n   * Setting `sendTraces: false` does *NOT* imply `fieldLevelInstrumentation:\n   * 0`. Apollo Server can still take advantage of field-level instrumentation\n   * (either directly for monolith servers, or via federated tracing for\n   * Gateways) in order to accurately report field execution usage in \"stats\".\n   * This option only controls whether data is sent to Apollo's servers as\n   * traces, not whether traces are internally used to learn about usage.\n   */\n  sendTraces?: boolean;\n\n  /**\n   * By default, Apollo Server does not send the values of any GraphQL variables\n   * to Apollo's servers, because variable values often contain the private data\n   * of your app's users. If you'd like variable values to be included in\n   * traces, set this option. This option can take several forms:\n   * - { none: true }: don't send any variable values (DEFAULT)\n   * - { all: true}: send all variable values\n   * - { transform: ... }: a custom function for modifying variable values. The\n   *    function receives `variables` and `operationString` and should return a\n   *    record of `variables` with the same keys as the `variables` it receives\n   *    (added variables will be ignored and removed variables will be reported\n   *    with an empty value). For security reasons, if an error occurs within\n   *    this function, all variable values will be replaced with\n   *    `[PREDICATE_FUNCTION_ERROR]`.\n   * - { exceptNames: ... }: a case-sensitive list of names of variables whose\n   *   values should not be sent to Apollo servers\n   * - { onlyNames: ... }: A case-sensitive list of names of variables whose\n   *   values will be sent to Apollo servers\n   *\n   * Defaults to not sending any variable values if both this parameter and the\n   * deprecated `privateVariables` are not set. The report will indicate each\n   * private variable key whose value was redacted by { none: true } or {\n   * exceptNames: [...] }.\n   *\n   * The value of this option is not relevant if you set `sendTraces: false`,\n   * because variable values only appear in traces.\n   */\n  sendVariableValues?: VariableValueOptions;\n  /**\n   * By default, Apollo Server does not send the HTTP request headers and values\n   * to Apollo's servers, as these headers may contain your users' private data.\n   * If you'd like this information included in traces, set this option. This\n   * option can take several forms:\n   *\n   * - { none: true } to drop all HTTP request headers (DEFAULT)\n   * - { all: true } to send the values of all HTTP request headers\n   * - { exceptNames: Array<String> } A case-insensitive list of names of HTTP\n   *     headers whose values should not be sent to Apollo servers\n   * - { onlyNames: Array<String> }: A case-insensitive list of names of HTTP\n   *   headers whose values will be sent to Apollo servers\n   *\n   * Unlike with sendVariableValues, names of dropped headers are not reported.\n   * The headers 'authorization', 'cookie', and 'set-cookie' are never reported.\n   *\n   * The value of this option is not relevant if you set `sendTraces: false`,\n   * because request headers only appear in traces.\n   */\n  sendHeaders?: SendValuesBaseOptions;\n  /**\n   * By default, if a trace contains errors, the errors are reported to Apollo\n   * servers with the message `<masked>`. The errors are associated with\n   * specific paths in the operation, but do not include the original error\n   * message or any extensions such as the error `code`, as those details may\n   * contain your users' private data. The extension `maskedBy:\n   * 'ApolloServerPluginUsageReporting'` is added.\n   *\n   * If you'd like details about the error included in traces, set this option.\n   * This option can take several forms:\n   *\n   * - { masked: true }: mask error messages and omit extensions (DEFAULT)\n   * - { unmodified: true }: send all error messages and extensions to Apollo\n   *   servers\n   * - { transform: ... }: a custom function for transforming errors. This\n   *   function receives a `GraphQLError` and may return a `GraphQLError`\n   *   (either a new error, or its potentially-modified argument) or `null`.\n   *   This error is used in the report to Apollo servers; if `null`, the error\n   *   is not included in traces or error statistics.\n   *\n   * If you set `sendTraces: false`, then the only relevant aspect of this\n   * option is whether you return `null` from a `transform` function or not\n   * (which affects aggregated error statistics).\n   */\n  sendErrors?: SendErrorsOptions;\n\n  /**\n   * This option allows you to choose if Apollo Server should calculate detailed\n   * per-field statistics for a particular request. It is only called for\n   * executable operations: operations which parse and validate properly and\n   * which do not have an unknown operation name. It is not called if an\n   * `includeRequest` hook is provided and returns false.\n   *\n   * You can either pass an async function or a number. The function receives a\n   * `GraphQLRequestContext`. (The effect of passing a number is described\n   * later.) Your function can return a boolean or a number; returning false is\n   * equivalent to returning 0 and returning true is equivalent to returning 1.\n   *\n   * Returning false (or 0) means that Apollo Server will only pay attention to\n   * overall properties of the operation, like what GraphQL operation is\n   * executing and how long the entire operation takes to execute, and not\n   * anything about field-by-field execution.\n   *\n   * If you return false (or 0), this operation *will* still contribute to most\n   * features of Studio, such as schema checks, the Operations page, and the\n   * \"referencing operations\" statistic on the Fields page, etc.\n   *\n   * If you return false (or 0), this operation will *not* contribute to the\n   * \"field executions\" statistic on the Fields page or to the execution timing\n   * hints optionally displayed in Studio Explorer or in vscode-graphql.\n   * Additionally, this operation will not produce a trace that can be viewed on\n   * the Traces section of the Operations page.\n   *\n   * Returning false (or 0) for some or all operations can improve your server's\n   * performance, as the overhead of calculating complete traces is not always\n   * negligible. This is especially the case if this server is an Apollo\n   * Gateway, as captured traces are transmitted from the subgraph to the\n   * Gateway in-band inside the actual GraphQL response.\n   *\n   * Returning a positive number means that Apollo Server will track each field\n   * execution and send Apollo Studio statistics on how many times each field\n   * was executed and what the per-field performance was. Apollo Server sends\n   * both a precise observed execution count and an estimated execution count.\n   * The former is calculated by counting each field execution as 1, and the\n   * latter is calculated by counting each field execution as the number\n   * returned from this hook, which can be thought of as a weight.\n   *\n   * Passing a number `x` (which should be between 0 and 1 inclusive) for\n   * `fieldLevelInstrumentation` is equivalent to passing the function `async ()\n   * => Math.random() < x ? 1/x : 0`.  For example, if you pass 0.01, then 99%\n   * of the time this function will return 0, and 1% of the time this function\n   * will return 100. So 99% of the time Apollo Server will not track field\n   * executions, and 1% of the time Apollo Server will track field executions\n   * and send them to Apollo Studio both as an exact observed count and as an\n   * \"estimated\" count which is 100 times higher.  Generally, the weights you\n   * return should be roughly the reciprocal of the probability that the\n   * function returns non-zero; however, you're welcome to craft a more\n   * sophisticated function, such as one that uses a higher probability for\n   * rarer operations and a lower probability for more common operations.\n   *\n   * (Note that returning true here does *not* mean that the data derived from\n   * field-level instrumentation must be transmitted to Apollo Studio's servers\n   * in the form of a trace; it may still be aggregated locally to statistics.\n   * Similarly, setting `sendTraces: false` does not affect\n   * `fieldLevelInstrumentation`. But either way this operation will contribute\n   * to the \"field executions\" statistic and timing hints.)\n   *\n   * The default `fieldLevelInstrumentation` is a function that always returns\n   * true.\n   */\n  fieldLevelInstrumentation?:\n    | number\n    | ((\n        request: GraphQLRequestContextDidResolveOperation<TContext>,\n      ) => Promise<number | boolean>);\n\n  /**\n   * This option allows you to choose if a particular request should be\n   * represented in the usage reporting sent to Apollo servers. By default, all\n   * requests are included. If this async predicate function is specified, its\n   * return value will determine whether a given request is included.\n   *\n   * Note that returning false here means that the operation will be completely\n   * ignored by all Apollo Studio features. If you merely want to improve\n   * performance by skipping the field-level execution trace, set the\n   * `fieldLevelInstrumentation` option instead of this one.\n   *\n   * The predicate function receives the request context. If validation and\n   * parsing of the request succeeds, the function will receive the request\n   * context in the\n   * [`GraphQLRequestContextDidResolveOperation`](https://www.apollographql.com/docs/apollo-server/integrations/plugins/#didresolveoperation)\n   * phase, which permits tracing based on dynamic properties, e.g., HTTP\n   * headers or the `operationName` (when available). Otherwise it will receive\n   * the request context in the\n   * [`GraphQLRequestContextWillSendResponse`](https://www.apollographql.com/docs/apollo-server/integrations/plugins/#willsendresponse)\n   * phase:\n   *\n   * (If you don't want any usage reporting at all, don't use this option:\n   * instead, either avoid specifying an Apollo API key, or use\n   * ApolloServerPluginUsageReportingDisabled to prevent this plugin from being\n   * created by default.)\n   *\n   * **Example:**\n   *\n   * ```js\n   * includeRequest(requestContext) {\n   *   // Always include `query HomeQuery { ... }`.\n   *   if (requestContext.operationName === \"HomeQuery\") return true;\n   *\n   *   // Omit if the \"report-to-apollo\" header is set to \"false\".\n   *   if (requestContext.request.http?.headers?.get(\"report-to-apollo\") === \"false\") {\n   *     return false;\n   *   }\n   *\n   *   // Otherwise include.\n   *   return true;\n   * },\n   * ```\n   *\n   */\n  includeRequest?: (\n    request:\n      | GraphQLRequestContextDidResolveOperation<TContext>\n      | GraphQLRequestContextWillSendResponse<TContext>,\n  ) => Promise<boolean>;\n  /**\n   * By default, this plugin associates client information such as name\n   * and version with user requests based on HTTP headers starting with\n   * `apollographql-client-`. If you have another way of communicating\n   * client information to your server, tell the plugin how it works\n   * with this option.\n   */\n  generateClientInfo?: GenerateClientInfo<TContext>;\n  /**\n   * If you are using the `overrideReportedSchema` option to the schema\n   * reporting plugin (`ApolloServerPluginSchemaReporting`), you should\n   * pass the same value here as well, so that the schema ID associated\n   * with requests in this plugin's usage reports matches the schema\n   * ID that the other plugin reports.\n   */\n  overrideReportedSchema?: string;\n  /**\n   * Whether to include the entire document in the trace if the operation\n   * was a GraphQL parse or validation error (i.e. failed the GraphQL parse or\n   * validation phases). This will be included as a separate field on the trace\n   * and the operation name and signature will always be reported with a constant\n   * identifier. Whether the operation was a parse failure or a validation\n   * failure will be embedded within the stats report key itself.\n   *\n   * The value of this option is not relevant if you set `sendTraces: false`,\n   * because unexecutable operation documents only appear in traces.\n   */\n  sendUnexecutableOperationDocuments?: boolean;\n\n  /**\n   * This plugin sends information about operations to Apollo's servers in two\n   * forms: as detailed operation traces of single operations and as summarized\n   * statistics of many operations. Each individual operation is described in\n   * exactly one of those ways. This hook lets you select which operations are\n   * sent as traces and which are sent as statistics. The default is a heuristic\n   * that tries to send one trace for each rough duration bucket for each\n   * operation each minute, plus more if the operations have errors. (Note that\n   * Apollo's servers perform their own sampling on received traces; not all\n   * traces sent to Apollo's servers can be later retrieved via the trace UI.)\n   *\n   * If you just want to send all operations as stats, set `sendTraces: false`\n   * instead of using this experimental hook.\n   *\n   * This option is highly experimental and may change or be removed in future\n   * versions.\n   */\n  experimental_sendOperationAsTrace?: (\n    trace: Trace,\n    statsReportKey: string,\n  ) => boolean;\n  //#endregion\n\n  //#region Configure the mechanics of communicating with Apollo's servers.\n  /**\n   * Sends a usage report after every request. This options is useful for\n   * stateless environments like Amazon Lambda where processes handle only a\n   * small number of requests before terminating. It defaults to true when the\n   * ApolloServer was started in the background with\n   * `startInBackgroundHandlingStartupErrorsByLoggingAndFailingAllRequests`\n   * (generally used with serverless frameworks), or false otherwise. (Note that\n   * \"immediately\" does not mean synchronously with completing the response, but\n   * \"very soon\", such as after a setImmediate call.)\n   */\n  sendReportsImmediately?: boolean;\n  /**\n   * Specifies which Fetch API implementation to use when sending usage reports.\n   */\n  fetcher?: Fetcher;\n  /**\n   * How often to send reports to Apollo. We'll also send reports when the\n   * report gets big; see maxUncompressedReportSize.\n   */\n  reportIntervalMs?: number;\n  /**\n   * We send a report when the report size will become bigger than this size in\n   * bytes (default: 4MB).  (This is a rough limit --- we ignore the size of the\n   * report header and some other top level bytes. We just add up the lengths of\n   * the serialized traces and signatures.)\n   */\n  maxUncompressedReportSize?: number;\n  /**\n   * Reporting is retried with exponential backoff up to this many times\n   * (including the original request). Defaults to 5.\n   */\n  maxAttempts?: number;\n  /**\n   * Minimum back-off for retries. Defaults to 100ms.\n   */\n  minimumRetryDelayMs?: number;\n  /**\n   * Timeout for each individual attempt to send a report to Apollo. (This is\n   * for each HTTP POST, not for all potential retries.) Defaults to 30 seconds\n   * (30000ms).\n   */\n  requestTimeoutMs?: number;\n  /**\n   * A logger interface to be used for output and errors.  When not provided\n   * it will default to the server's own `logger` implementation and use\n   * `console` when that is not available.\n   */\n  logger?: Logger;\n  /**\n   * By default, if an error occurs when sending trace reports to Apollo\n   * servers, its message will be sent to the `error` method on the logger\n   * specified with the `logger` option to this plugin or to ApolloServer (or to\n   * `console.error` by default). Specify this function to process errors in a\n   * different way. (The difference between using this option and using a logger\n   * is that this option receives the actual Error object whereas `logger.error`\n   * only receives its message.)\n   */\n  reportErrorFunction?: (err: Error) => void;\n  //#endregion\n\n  //#region Internal and non-recommended options\n  /**\n   * The URL base that we send reports to (not including the path). This option\n   * only needs to be set for testing and Apollo-internal uses.\n   */\n  endpointUrl?: string;\n  /**\n   * If set, prints all reports as JSON when they are sent. (Note that for\n   * technical reasons, traces embedded in a report are printed separately when\n   * they are added to a report.) Reports are sent through `logger.info`.\n   */\n  debugPrintReports?: boolean;\n  /**\n   * Specify the function for creating a signature for a query. See signature.ts\n   * for details. This option is not recommended, as Apollo's servers make assumptions\n   * about how the signature relates to the operation you executed.\n   */\n  calculateSignature?: (ast: DocumentNode, operationName: string) => string;\n  //#endregion\n}\n\nexport type SendValuesBaseOptions =\n  | { onlyNames: Array<string> }\n  | { exceptNames: Array<string> }\n  | { all: true }\n  | { none: true };\n\ntype VariableValueTransformOptions = {\n  variables: Record<string, any>;\n  operationString?: string;\n};\n\nexport type VariableValueOptions =\n  | {\n      transform: (\n        options: VariableValueTransformOptions,\n      ) => Record<string, any>;\n    }\n  | SendValuesBaseOptions;\n\nexport type SendErrorsOptions =\n  | { unmodified: true }\n  | { masked: true }\n  | { transform: (err: GraphQLError) => GraphQLError | null };\n\nexport interface ClientInfo {\n  clientName?: string;\n  clientVersion?: string;\n}\nexport type GenerateClientInfo<TContext extends BaseContext> = (\n  requestContext: GraphQLRequestContext<TContext>,\n) => ClientInfo;\n/dist/esm/runHttpQuery.js#\u000fimport { chooseContentTypeForSingleResultResponse, internalExecuteOperation, MEDIA_TYPES, } from './ApolloServer.js';\nimport { Kind } from 'graphql';\nimport { BadRequestError } from './internalErrorClasses.js';\nimport { URLSearchParams } from 'url';\nimport Negotiator from 'negotiator';\nimport { HeaderMap } from './utils/HeaderMap.js';\nfunction fieldIfString(o, fieldName) {\n    const value = o[fieldName];\n    if (typeof value === 'string') {\n        return value;\n    }\n    return undefined;\n}\nfunction searchParamIfSpecifiedOnce(searchParams, paramName) {\n    const values = searchParams.getAll(paramName);\n    switch (values.length) {\n        case 0:\n            return undefined;\n        case 1:\n            return values[0];\n        default:\n            throw new BadRequestError(`The '${paramName}' search parameter may only be specified once.`);\n    }\n}\nfunction jsonParsedSearchParamIfSpecifiedOnce(searchParams, fieldName) {\n    const value = searchParamIfSpecifiedOnce(searchParams, fieldName);\n    if (value === undefined) {\n        return undefined;\n    }\n    let hopefullyRecord;\n    try {\n        hopefullyRecord = JSON.parse(value);\n    }\n    catch {\n        throw new BadRequestError(`The ${fieldName} search parameter contains invalid JSON.`);\n    }\n    if (!isStringRecord(hopefullyRecord)) {\n        throw new BadRequestError(`The ${fieldName} search parameter should contain a JSON-encoded object.`);\n    }\n    return hopefullyRecord;\n}\nfunction fieldIfRecord(o, fieldName) {\n    const value = o[fieldName];\n    if (isStringRecord(value)) {\n        return value;\n    }\n    return undefined;\n}\nfunction isStringRecord(o) {\n    return (!!o && typeof o === 'object' && !Buffer.isBuffer(o) && !Array.isArray(o));\n}\nfunction isNonEmptyStringRecord(o) {\n    return isStringRecord(o) && Object.keys(o).length > 0;\n}\nfunction ensureQueryIsStringOrMissing(query) {\n    if (!query || typeof query === 'string') {\n        return;\n    }\n    if (query.kind === Kind.DOCUMENT) {\n        throw new BadRequestError(\"GraphQL queries must be strings. It looks like you're sending the \" +\n            'internal graphql-js representation of a parsed query in your ' +\n            'request instead of a request in the GraphQL query language. You ' +\n            'can convert an AST to a string using the `print` function from ' +\n            '`graphql`, or use a client like `apollo-client` which converts ' +\n            'the internal representation to a string for you.');\n    }\n    else {\n        throw new BadRequestError('GraphQL queries must be strings.');\n    }\n}\nexport async function runHttpQuery({ server, httpRequest, contextValue, schemaDerivedData, internals, sharedResponseHTTPGraphQLHead, }) {\n    let graphQLRequest;\n    switch (httpRequest.method) {\n        case 'POST': {\n            if (!isNonEmptyStringRecord(httpRequest.body)) {\n                throw new BadRequestError('POST body missing, invalid Content-Type, or JSON object has no keys.');\n            }\n            ensureQueryIsStringOrMissing(httpRequest.body.query);\n            if (typeof httpRequest.body.variables === 'string') {\n                throw new BadRequestError('`variables` in a POST body should be provided as an object, not a recursively JSON-encoded string.');\n            }\n            if (typeof httpRequest.body.extensions === 'string') {\n                throw new BadRequestError('`extensions` in a POST body should be provided as an object, not a recursively JSON-encoded string.');\n            }\n            graphQLRequest = {\n                query: fieldIfString(httpRequest.body, 'query'),\n                operationName: fieldIfString(httpRequest.body, 'operationName'),\n                variables: fieldIfRecord(httpRequest.body, 'variables'),\n                extensions: fieldIfRecord(httpRequest.body, 'extensions'),\n                http: httpRequest,\n            };\n            break;\n        }\n        case 'GET': {\n            const searchParams = new URLSearchParams(httpRequest.search);\n            graphQLRequest = {\n                query: searchParamIfSpecifiedOnce(searchParams, 'query'),\n                operationName: searchParamIfSpecifiedOnce(searchParams, 'operationName'),\n                variables: jsonParsedSearchParamIfSpecifiedOnce(searchParams, 'variables'),\n                extensions: jsonParsedSearchParamIfSpecifiedOnce(searchParams, 'extensions'),\n                http: httpRequest,\n            };\n            break;\n        }\n        default:\n            throw new BadRequestError('Apollo Server supports only GET/POST requests.', {\n                extensions: {\n                    http: {\n                        status: 405,\n                        headers: new HeaderMap([['allow', 'GET, POST']]),\n                    },\n                },\n            });\n    }\n    const graphQLResponse = await internalExecuteOperation({\n        server,\n        graphQLRequest,\n        internals,\n        schemaDerivedData,\n        sharedResponseHTTPGraphQLHead,\n    }, { contextValue });\n    if (graphQLResponse.body.kind === 'single') {\n        if (!graphQLResponse.http.headers.get('content-type')) {\n            const contentType = chooseContentTypeForSingleResultResponse(httpRequest);\n            if (contentType === null) {\n                throw new BadRequestError(`An 'accept' header was provided for this request which does not accept ` +\n                    `${MEDIA_TYPES.APPLICATION_JSON} or ${MEDIA_TYPES.APPLICATION_GRAPHQL_RESPONSE_JSON}`, { extensions: { http: { status: 406 } } });\n            }\n            graphQLResponse.http.headers.set('content-type', contentType);\n        }\n        return {\n            ...graphQLResponse.http,\n            body: {\n                kind: 'complete',\n                string: prettyJSONStringify(orderExecutionResultFields(graphQLResponse.body.singleResult)),\n            },\n        };\n    }\n    const acceptHeader = httpRequest.headers.get('accept');\n    if (!(acceptHeader &&\n        new Negotiator({\n            headers: { accept: httpRequest.headers.get('accept') },\n        }).mediaType([\n            MEDIA_TYPES.MULTIPART_MIXED_NO_DEFER_SPEC,\n            MEDIA_TYPES.MULTIPART_MIXED_EXPERIMENTAL,\n        ]) === MEDIA_TYPES.MULTIPART_MIXED_EXPERIMENTAL)) {\n        throw new BadRequestError('Apollo server received an operation that uses incremental delivery ' +\n            '(@defer or @stream), but the client does not accept multipart/mixed ' +\n            'HTTP responses. To enable incremental delivery support, add the HTTP ' +\n            \"header 'Accept: multipart/mixed; deferSpec=20220824'.\", { extensions: { http: { status: 406 } } });\n    }\n    graphQLResponse.http.headers.set('content-type', 'multipart/mixed; boundary=\"-\"; deferSpec=20220824');\n    return {\n        ...graphQLResponse.http,\n        body: {\n            kind: 'chunked',\n            asyncIterator: writeMultipartBody(graphQLResponse.body.initialResult, graphQLResponse.body.subsequentResults),\n        },\n    };\n}\nasync function* writeMultipartBody(initialResult, subsequentResults) {\n    yield `\\r\\n---\\r\\ncontent-type: application/json; charset=utf-8\\r\\n\\r\\n${JSON.stringify(orderInitialIncrementalExecutionResultFields(initialResult))}\\r\\n---${initialResult.hasNext ? '' : '--'}\\r\\n`;\n    for await (const result of subsequentResults) {\n        yield `content-type: application/json; charset=utf-8\\r\\n\\r\\n${JSON.stringify(orderSubsequentIncrementalExecutionResultFields(result))}\\r\\n---${result.hasNext ? '' : '--'}\\r\\n`;\n    }\n}\nfunction orderExecutionResultFields(result) {\n    return {\n        errors: result.errors,\n        data: result.data,\n        extensions: result.extensions,\n    };\n}\nfunction orderInitialIncrementalExecutionResultFields(result) {\n    return {\n        hasNext: result.hasNext,\n        errors: result.errors,\n        data: result.data,\n        incremental: orderIncrementalResultFields(result.incremental),\n        extensions: result.extensions,\n    };\n}\nfunction orderSubsequentIncrementalExecutionResultFields(result) {\n    return {\n        hasNext: result.hasNext,\n        incremental: orderIncrementalResultFields(result.incremental),\n        extensions: result.extensions,\n    };\n}\nfunction orderIncrementalResultFields(incremental) {\n    return incremental?.map((i) => ({\n        hasNext: i.hasNext,\n        errors: i.errors,\n        path: i.path,\n        label: i.label,\n        data: i.data,\n        items: i.items,\n        extensions: i.extensions,\n    }));\n}\nexport function prettyJSONStringify(value) {\n    return JSON.stringify(value) + '\\n';\n}\nexport function newHTTPGraphQLHead(status) {\n    return {\n        status,\n        headers: new HeaderMap(),\n    };\n}\nexport function mergeHTTPGraphQLHead(target, source) {\n    if (source.status) {\n        target.status = source.status;\n    }\n    if (source.headers) {\n        for (const [name, value] of source.headers) {\n            target.headers.set(name, value);\n        }\n    }\n}\n//# sourceMappingURL=runHttpQuery.js.map/dist/cjs/runHttpQuery.js&\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.mergeHTTPGraphQLHead = exports.newHTTPGraphQLHead = exports.prettyJSONStringify = exports.runHttpQuery = void 0;\nconst ApolloServer_js_1 = require(\"./ApolloServer.js\");\nconst graphql_1 = require(\"graphql\");\nconst internalErrorClasses_js_1 = require(\"./internalErrorClasses.js\");\nconst url_1 = require(\"url\");\nconst negotiator_1 = __importDefault(require(\"negotiator\"));\nconst HeaderMap_js_1 = require(\"./utils/HeaderMap.js\");\nfunction fieldIfString(o, fieldName) {\n    const value = o[fieldName];\n    if (typeof value === 'string') {\n        return value;\n    }\n    return undefined;\n}\nfunction searchParamIfSpecifiedOnce(searchParams, paramName) {\n    const values = searchParams.getAll(paramName);\n    switch (values.length) {\n        case 0:\n            return undefined;\n        case 1:\n            return values[0];\n        default:\n            throw new internalErrorClasses_js_1.BadRequestError(`The '${paramName}' search parameter may only be specified once.`);\n    }\n}\nfunction jsonParsedSearchParamIfSpecifiedOnce(searchParams, fieldName) {\n    const value = searchParamIfSpecifiedOnce(searchParams, fieldName);\n    if (value === undefined) {\n        return undefined;\n    }\n    let hopefullyRecord;\n    try {\n        hopefullyRecord = JSON.parse(value);\n    }\n    catch {\n        throw new internalErrorClasses_js_1.BadRequestError(`The ${fieldName} search parameter contains invalid JSON.`);\n    }\n    if (!isStringRecord(hopefullyRecord)) {\n        throw new internalErrorClasses_js_1.BadRequestError(`The ${fieldName} search parameter should contain a JSON-encoded object.`);\n    }\n    return hopefullyRecord;\n}\nfunction fieldIfRecord(o, fieldName) {\n    const value = o[fieldName];\n    if (isStringRecord(value)) {\n        return value;\n    }\n    return undefined;\n}\nfunction isStringRecord(o) {\n    return (!!o && typeof o === 'object' && !Buffer.isBuffer(o) && !Array.isArray(o));\n}\nfunction isNonEmptyStringRecord(o) {\n    return isStringRecord(o) && Object.keys(o).length > 0;\n}\nfunction ensureQueryIsStringOrMissing(query) {\n    if (!query || typeof query === 'string') {\n        return;\n    }\n    if (query.kind === graphql_1.Kind.DOCUMENT) {\n        throw new internalErrorClasses_js_1.BadRequestError(\"GraphQL queries must be strings. It looks like you're sending the \" +\n            'internal graphql-js representation of a parsed query in your ' +\n            'request instead of a request in the GraphQL query language. You ' +\n            'can convert an AST to a string using the `print` function from ' +\n            '`graphql`, or use a client like `apollo-client` which converts ' +\n            'the internal representation to a string for you.');\n    }\n    else {\n        throw new internalErrorClasses_js_1.BadRequestError('GraphQL queries must be strings.');\n    }\n}\nasync function runHttpQuery({ server, httpRequest, contextValue, schemaDerivedData, internals, sharedResponseHTTPGraphQLHead, }) {\n    let graphQLRequest;\n    switch (httpRequest.method) {\n        case 'POST': {\n            if (!isNonEmptyStringRecord(httpRequest.body)) {\n                throw new internalErrorClasses_js_1.BadRequestError('POST body missing, invalid Content-Type, or JSON object has no keys.');\n            }\n            ensureQueryIsStringOrMissing(httpRequest.body.query);\n            if (typeof httpRequest.body.variables === 'string') {\n                throw new internalErrorClasses_js_1.BadRequestError('`variables` in a POST body should be provided as an object, not a recursively JSON-encoded string.');\n            }\n            if (typeof httpRequest.body.extensions === 'string') {\n                throw new internalErrorClasses_js_1.BadRequestError('`extensions` in a POST body should be provided as an object, not a recursively JSON-encoded string.');\n            }\n            graphQLRequest = {\n                query: fieldIfString(httpRequest.body, 'query'),\n                operationName: fieldIfString(httpRequest.body, 'operationName'),\n                variables: fieldIfRecord(httpRequest.body, 'variables'),\n                extensions: fieldIfRecord(httpRequest.body, 'extensions'),\n                http: httpRequest,\n            };\n            break;\n        }\n        case 'GET': {\n            const searchParams = new url_1.URLSearchParams(httpRequest.search);\n            graphQLRequest = {\n                query: searchParamIfSpecifiedOnce(searchParams, 'query'),\n                operationName: searchParamIfSpecifiedOnce(searchParams, 'operationName'),\n                variables: jsonParsedSearchParamIfSpecifiedOnce(searchParams, 'variables'),\n                extensions: jsonParsedSearchParamIfSpecifiedOnce(searchParams, 'extensions'),\n                http: httpRequest,\n            };\n            break;\n        }\n        default:\n            throw new internalErrorClasses_js_1.BadRequestError('Apollo Server supports only GET/POST requests.', {\n                extensions: {\n                    http: {\n                        status: 405,\n                        headers: new HeaderMap_js_1.HeaderMap([['allow', 'GET, POST']]),\n                    },\n                },\n            });\n    }\n    const graphQLResponse = await (0, ApolloServer_js_1.internalExecuteOperation)({\n        server,\n        graphQLRequest,\n        internals,\n        schemaDerivedData,\n        sharedResponseHTTPGraphQLHead,\n    }, { contextValue });\n    if (graphQLResponse.body.kind === 'single') {\n        if (!graphQLResponse.http.headers.get('content-type')) {\n            const contentType = (0, ApolloServer_js_1.chooseContentTypeForSingleResultResponse)(httpRequest);\n            if (contentType === null) {\n                throw new internalErrorClasses_js_1.BadRequestError(`An 'accept' header was provided for this request which does not accept ` +\n                    `${ApolloServer_js_1.MEDIA_TYPES.APPLICATION_JSON} or ${ApolloServer_js_1.MEDIA_TYPES.APPLICATION_GRAPHQL_RESPONSE_JSON}`, { extensions: { http: { status: 406 } } });\n            }\n            graphQLResponse.http.headers.set('content-type', contentType);\n        }\n        return {\n            ...graphQLResponse.http,\n            body: {\n                kind: 'complete',\n                string: prettyJSONStringify(orderExecutionResultFields(graphQLResponse.body.singleResult)),\n            },\n        };\n    }\n    const acceptHeader = httpRequest.headers.get('accept');\n    if (!(acceptHeader &&\n        new negotiator_1.default({\n            headers: { accept: httpRequest.headers.get('accept') },\n        }).mediaType([\n            ApolloServer_js_1.MEDIA_TYPES.MULTIPART_MIXED_NO_DEFER_SPEC,\n            ApolloServer_js_1.MEDIA_TYPES.MULTIPART_MIXED_EXPERIMENTAL,\n        ]) === ApolloServer_js_1.MEDIA_TYPES.MULTIPART_MIXED_EXPERIMENTAL)) {\n        throw new internalErrorClasses_js_1.BadRequestError('Apollo server received an operation that uses incremental delivery ' +\n            '(@defer or @stream), but the client does not accept multipart/mixed ' +\n            'HTTP responses. To enable incremental delivery support, add the HTTP ' +\n            \"header 'Accept: multipart/mixed; deferSpec=20220824'.\", { extensions: { http: { status: 406 } } });\n    }\n    graphQLResponse.http.headers.set('content-type', 'multipart/mixed; boundary=\"-\"; deferSpec=20220824');\n    return {\n        ...graphQLResponse.http,\n        body: {\n            kind: 'chunked',\n            asyncIterator: writeMultipartBody(graphQLResponse.body.initialResult, graphQLResponse.body.subsequentResults),\n        },\n    };\n}\nexports.runHttpQuery = runHttpQuery;\nasync function* writeMultipartBody(initialResult, subsequentResults) {\n    yield `\\r\\n---\\r\\ncontent-type: application/json; charset=utf-8\\r\\n\\r\\n${JSON.stringify(orderInitialIncrementalExecutionResultFields(initialResult))}\\r\\n---${initialResult.hasNext ? '' : '--'}\\r\\n`;\n    for await (const result of subsequentResults) {\n        yield `content-type: application/json; charset=utf-8\\r\\n\\r\\n${JSON.stringify(orderSubsequentIncrementalExecutionResultFields(result))}\\r\\n---${result.hasNext ? '' : '--'}\\r\\n`;\n    }\n}\nfunction orderExecutionResultFields(result) {\n    return {\n        errors: result.errors,\n        data: result.data,\n        extensions: result.extensions,\n    };\n}\nfunction orderInitialIncrementalExecutionResultFields(result) {\n    return {\n        hasNext: result.hasNext,\n        errors: result.errors,\n        data: result.data,\n        incremental: orderIncrementalResultFields(result.incremental),\n        extensions: result.extensions,\n    };\n}\nfunction orderSubsequentIncrementalExecutionResultFields(result) {\n    return {\n        hasNext: result.hasNext,\n        incremental: orderIncrementalResultFields(result.incremental),\n        extensions: result.extensions,\n    };\n}\nfunction orderIncrementalResultFields(incremental) {\n    return incremental?.map((i) => ({\n        hasNext: i.hasNext,\n        errors: i.errors,\n        path: i.path,\n        label: i.label,\n        data: i.data,\n        items: i.items,\n        extensions: i.extensions,\n    }));\n}\nfunction prettyJSONStringify(value) {\n    return JSON.stringify(value) + '\\n';\n}\nexports.prettyJSONStringify = prettyJSONStringify;\nfunction newHTTPGraphQLHead(status) {\n    return {\n        status,\n        headers: new HeaderMap_js_1.HeaderMap(),\n    };\n}\nexports.newHTTPGraphQLHead = newHTTPGraphQLHead;\nfunction mergeHTTPGraphQLHead(target, source) {\n    if (source.status) {\n        target.status = source.status;\n    }\n    if (source.headers) {\n        for (const [name, value] of source.headers) {\n            target.headers.set(name, value);\n        }\n    }\n}\nexports.mergeHTTPGraphQLHead = mergeHTTPGraphQLHead;\n//# sourceMappingURL=runHttpQuery.js.map1/dist/cjs/plugin/landingPage/default/types.js.mapč{\"version\":3,\"file\":\"types.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../../../src/plugin/landingPage/default/types.ts\"],\"names\":[],\"mappings\":\"\"}#/dist/esm/utils/urlForHttpServer.js\u0001mimport { format } from 'url';\nexport function urlForHttpServer(httpServer) {\n    const { address, port } = httpServer.address();\n    const hostname = address === '' || address === '::' ? 'localhost' : address;\n    return format({\n        protocol: 'http',\n        hostname,\n        port,\n        pathname: '/',\n    });\n}\n//# sourceMappingURL=urlForHttpServer.js.map,/dist/esm/plugin/usageReporting/index.js.mapĮ{\"version\":3,\"file\":\"index.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../../src/plugin/usageReporting/index.ts\"],\"names\":[],\"mappings\":\"AAAA,OAAO,EAAE,gCAAgC,EAAE,MAAM,aAAa,CAAC\"}6/dist/cjs/plugin/schemaReporting/schemaReporter.js.map\r{\"version\":3,\"file\":\"schemaReporter.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../../src/plugin/schemaReporting/schemaReporter.ts\"],\"names\":[],\"mappings\":\"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\"} /plugin/inlineTrace/package.json\u0001\u000b{\n  \"name\": \"@apollo/server/plugin/inlineTrace\",\n  \"type\": \"module\",\n  \"main\": \"../../dist/cjs/plugin/inlineTrace/index.js\",\n  \"module\": \"../../dist/esm/plugin/inlineTrace/index.js\",\n  \"types\": \"../../dist/esm/plugin/inlineTrace/index.d.ts\",\n  \"sideEffects\": false\n}\n=/dist/esm/plugin/landingPage/default/getEmbeddedHTML.d.ts.map\u0001S{\"version\":3,\"file\":\"getEmbeddedHTML.d.ts\",\"sourceRoot\":\"\",\"sources\":[\"../../../../../src/plugin/landingPage/default/getEmbeddedHTML.ts\"],\"names\":[],\"mappings\":\"AAAA,OAAO,KAAK,EACV,6DAA6D,EAC7D,iBAAiB,EAClB,MAAM,SAAS,CAAC;AAmBjB,eAAO,MAAM,uBAAuB,YACzB,MAAM,UACP,6DAA6D,WAmEtE,CAAC;AAEF,eAAO,MAAM,sBAAsB,YACxB,MAAM,UACP,iBAAiB,WA+B1B,CAAC\"}&/dist/esm/externalTypes/plugins.js.map~{\"version\":3,\"file\":\"plugins.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/externalTypes/plugins.ts\"],\"names\":[],\"mappings\":\"\"}!/plugin/cacheControl/package.json\u0001\u000f{\n  \"name\": \"@apollo/server/plugin/cacheControl\",\n  \"type\": \"module\",\n  \"main\": \"../../dist/cjs/plugin/cacheControl/index.js\",\n  \"module\": \"../../dist/esm/plugin/cacheControl/index.js\",\n  \"types\": \"../../dist/esm/plugin/cacheControl/index.d.ts\",\n  \"sideEffects\": false\n}\n'/dist/esm/plugin/schemaIsFederated.d.tsģimport { GraphQLSchema } from 'graphql';\nexport declare function schemaIsFederated(schema: GraphQLSchema): boolean;\n//# sourceMappingURL=schemaIsFederated.d.ts.map/standalone/package.json{\n  \"name\": \"@apollo/server/standalone\",\n  \"type\": \"module\",\n  \"main\": \"../dist/cjs/standalone/index.js\",\n  \"module\": \"../dist/esm/standalone/index.js\",\n  \"types\": \"../dist/esm/standalone/index.d.ts\",\n  \"sideEffects\": false\n}/dist/cjs/errorNormalize.js.map\u0007{\"version\":3,\"file\":\"errorNormalize.js\",\"sourceRoot\":\"\",\"sources\":[\"../../src/errorNormalize.ts\"],\"names\":[],\"mappings\":\";;;AAEA,qCAIiB;AACjB,gDAA0D;AAE1D,uDAA6E;AAC7E,uDAAiD;AAUjD,SAAgB,wBAAwB,CACtC,MAA8B,EAC9B,UAMI,EAAE;IAKN,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;IAC9D,MAAM,cAAc,GAAG,IAAA,oCAAkB,GAAE,CAAC;IAE5C,OAAO;QACL,cAAc;QACd,eAAe,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YACpC,IAAI;gBACF,OAAO,WAAW,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;aAC/C;YAAC,OAAO,eAAe,EAAE;gBACxB,IAAI,OAAO,CAAC,iCAAiC,EAAE;oBAG7C,OAAO,WAAW,CAAC,eAAe,CAAC,CAAC;iBACrC;qBAAM;oBAEL,OAAO;wBACL,OAAO,EAAE,uBAAuB;wBAChC,UAAU,EAAE,EAAE,IAAI,EAAE,gCAAqB,CAAC,qBAAqB,EAAE;qBAClE,CAAC;iBACH;aACF;QACH,CAAC,CAAC;KACH,CAAC;IAEF,SAAS,WAAW,CAAC,UAAmB;QACtC,MAAM,YAAY,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;QAEpD,MAAM,UAAU,GAA2B;YACzC,GAAG,YAAY,CAAC,UAAU;YAC1B,IAAI,EACF,YAAY,CAAC,UAAU,CAAC,IAAI;gBAC5B,gCAAqB,CAAC,qBAAqB;SAC9C,CAAC;QAEF,IAAI,wBAAwB,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;YAC7C,IAAA,sCAAoB,EAAC,cAAc,EAAE;gBACnC,OAAO,EAAE,IAAI,wBAAS,EAAE;gBACxB,GAAG,UAAU,CAAC,IAAI;aACnB,CAAC,CAAC;YACH,OAAO,UAAU,CAAC,IAAI,CAAC;SACxB;QAED,IAAI,OAAO,CAAC,iCAAiC,EAAE;YAK7C,UAAU,CAAC,UAAU,GAAG,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;SACzD;QAED,OAAO,EAAE,GAAG,YAAY,CAAC,MAAM,EAAE,EAAE,UAAU,EAAE,CAAC;IAClD,CAAC;AACH,CAAC;AAjED,4DAiEC;AAED,SAAgB,WAAW,CAAC,UAAmB;IAC7C,OAAO,UAAU,YAAY,KAAK;QAChC,CAAC,CAAC,UAAU;QACZ,CAAC,CAAC,IAAI,sBAAY,CAAC,0BAA0B,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;AACxE,CAAC;AAJD,kCAIC;AAED,SAAgB,kBAAkB,CAChC,UAAmB,EACnB,iCAAyC,EAAE;IAE3C,MAAM,KAAK,GAAU,WAAW,CAAC,UAAU,CAAC,CAAC;IAE7C,OAAO,KAAK,YAAY,sBAAY;QAClC,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,IAAI,sBAAY,CAAC,8BAA8B,GAAG,KAAK,CAAC,OAAO,EAAE;YAC/D,aAAa,EAAE,KAAK;SACrB,CAAC,CAAC;AACT,CAAC;AAXD,gDAWC;AAED,SAAS,wBAAwB,CAAC,CAAU;IAC1C,OAAO,CACL,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,KAAK,QAAQ;QACrB,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAI,OAAQ,CAAS,CAAC,MAAM,KAAK,QAAQ,CAAC;QAC3D,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,IAAK,CAAS,CAAC,OAAO,YAAY,GAAG,CAAC,CACzD,CAAC;AACJ,CAAC\"}#/src/plugin/usageReporting/index.tsexport { ApolloServerPluginUsageReporting } from './plugin.js';\nexport type {\n  ApolloServerPluginUsageReportingOptions,\n  SendValuesBaseOptions,\n  VariableValueOptions,\n  SendErrorsOptions,\n  ClientInfo,\n  GenerateClientInfo,\n} from './options.js';\n,/dist/cjs/incrementalDeliveryPolyfill.js.map\u0002{\"version\":3,\"file\":\"incrementalDeliveryPolyfill.js\",\"sourceRoot\":\"\",\"sources\":[\"../../src/incrementalDeliveryPolyfill.ts\"],\"names\":[],\"mappings\":\";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,qCAAgF;AA+EhF,IAAI,uCAAuC,GAO3B,SAAS,CAAC;AAE1B,KAAK,UAAU,kBAAkB;IAC/B,IAAI,uCAAuC,KAAK,SAAS,EAAE;QACzD,OAAO;KACR;IACD,MAAM,OAAO,GAAG,wDAAa,SAAS,GAAC,CAAC;IACxC,IAAI,kCAAkC,IAAI,OAAO,EAAE;QACjD,uCAAuC,GAAI,OAAe;aACvD,gCAAgC,CAAC;KACrC;SAAM;QACL,uCAAuC,GAAG,IAAI,CAAC;KAChD;AACH,CAAC;AAEM,KAAK,UAAU,oBAAoB,CACxC,IAAmB;IAEnB,MAAM,kBAAkB,EAAE,CAAC;IAC3B,IAAI,uCAAuC,EAAE;QAC3C,OAAO,uCAAuC,CAAC,IAAI,CAAC,CAAC;KACtD;IACD,OAAO,IAAA,iBAAO,EAAC,IAAI,CAAC,CAAC;AACvB,CAAC;AARD,oDAQC\"}&/dist/esm/determineApolloConfig.js.map\u0004{\"version\":3,\"file\":\"determineApolloConfig.js\",\"sourceRoot\":\"\",\"sources\":[\"../../src/determineApolloConfig.ts\"],\"names\":[],\"mappings\":\"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAKtD,MAAM,UAAU,qBAAqB,CACnC,KAAoC;IAEpC,MAAM,YAAY,GAAiB,EAAE,CAAC;IAEtC,MAAM,EACJ,UAAU,EACV,gBAAgB,EAChB,eAAe,EACf,oBAAoB,GACrB,GAAG,OAAO,CAAC,GAAG,CAAC;IAGhB,IAAI,KAAK,EAAE,GAAG,EAAE;QACd,YAAY,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;KAC9B;SAAM,IAAI,UAAU,EAAE;QACrB,YAAY,CAAC,GAAG,GAAG,UAAU,CAAC;KAC/B;IAGD,IAAI,YAAY,CAAC,GAAG,EAAE;QACpB,YAAY,CAAC,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC;aACxC,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC;aACxB,MAAM,CAAC,KAAK,CAAC,CAAC;KAClB;IAGD,IAAI,KAAK,EAAE,QAAQ,EAAE;QACnB,YAAY,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;KACxC;SAAM,IAAI,gBAAgB,EAAE;QAC3B,YAAY,CAAC,QAAQ,GAAG,gBAAgB,CAAC;KAC1C;IAGD,MAAM,OAAO,GAAG,KAAK,EAAE,OAAO,IAAI,eAAe,CAAC;IAClD,MAAM,YAAY,GAAG,KAAK,EAAE,YAAY,IAAI,oBAAoB,CAAC;IAEjE,IAAI,YAAY,CAAC,QAAQ,EAAE;QACzB,IAAI,OAAO,EAAE;YACX,MAAM,IAAI,KAAK,CACb,yDAAyD;gBACvD,4EAA4E,CAC/E,CAAC;SACH;QACD,IAAI,YAAY,EAAE;YAChB,MAAM,IAAI,KAAK,CACb,8DAA8D;gBAC5D,iFAAiF,CACpF,CAAC;SACH;KACF;SAAM,IAAI,OAAO,EAAE;QAKlB,YAAY,CAAC,QAAQ,GAAG,YAAY;YAClC,CAAC,CAAC,GAAG,OAAO,IAAI,YAAY,EAAE;YAC9B,CAAC,CAAC,OAAO,CAAC;KACb;IAED,OAAO,YAAY,CAAC;AACtB,CAAC\"}/dist/esm/cachePolicy.js.map\u0003{\"version\":3,\"file\":\"cachePolicy.js\",\"sourceRoot\":\"\",\"sources\":[\"../../src/cachePolicy.ts\"],\"names\":[],\"mappings\":\"AAEA,MAAM,UAAU,cAAc;IAC5B,OAAO;QACL,MAAM,EAAE,SAAS;QACjB,KAAK,EAAE,SAAS;QAChB,QAAQ,CAAC,IAAe;YACtB,IACE,IAAI,CAAC,MAAM,KAAK,SAAS;gBACzB,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,EACxD;gBACA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;aAC3B;YACD,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE;gBACxD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;aACzB;QACH,CAAC;QACD,OAAO,CAAC,IAAe;YACrB,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE;gBAC7B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;aAC3B;YACD,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE;gBAC5B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;aACzB;QACH,CAAC;QACD,iBAAiB;YACf,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;gBAClD,OAAO,IAAI,CAAC;aACb;YACD,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,QAAQ,EAAE,CAAC;QAChE,CAAC;KACF,CAAC;AACJ,CAAC\"}#/src/incrementalDeliveryPolyfill.ts\fimport { execute, ExecutionArgs, ExecutionResult, GraphQLError } from 'graphql';\n\n// This file \"polyfills\" graphql@17's experimentalExecuteIncrementally (by\n// returning a function that does not understand incremental directives if\n// you're using graphql@16). The types defined in this file are largely copied\n// from graphql-js.\n\ninterface ObjMap<T> {\n  [key: string]: T;\n}\nexport interface GraphQLExperimentalInitialIncrementalExecutionResult<\n  TData = ObjMap<unknown>,\n  TExtensions = ObjMap<unknown>,\n> extends ExecutionResult<TData, TExtensions> {\n  hasNext: boolean;\n  incremental?: ReadonlyArray<\n    GraphQLExperimentalIncrementalResult<TData, TExtensions>\n  >;\n  extensions?: TExtensions;\n}\n\nexport interface GraphQLExperimentalSubsequentIncrementalExecutionResult<\n  TData = ObjMap<unknown>,\n  TExtensions = ObjMap<unknown>,\n> {\n  hasNext: boolean;\n  incremental?: ReadonlyArray<\n    GraphQLExperimentalIncrementalResult<TData, TExtensions>\n  >;\n  extensions?: TExtensions;\n}\n\ntype GraphQLExperimentalIncrementalResult<\n  TData = ObjMap<unknown>,\n  TExtensions = ObjMap<unknown>,\n> =\n  | GraphQLExperimentalIncrementalDeferResult<TData, TExtensions>\n  | GraphQLExperimentalIncrementalStreamResult<TData, TExtensions>;\n\ninterface GraphQLExperimentalIncrementalDeferResult<\n  TData = ObjMap<unknown>,\n  TExtensions = ObjMap<unknown>,\n> extends ExecutionResult<TData, TExtensions> {\n  path?: ReadonlyArray<string | number>;\n  label?: string;\n}\n\ninterface GraphQLExperimentalIncrementalStreamResult<\n  TData = Array<unknown>,\n  TExtensions = ObjMap<unknown>,\n> {\n  errors?: ReadonlyArray<GraphQLError>;\n  items?: TData | null;\n  path?: ReadonlyArray<string | number>;\n  label?: string;\n  extensions?: TExtensions;\n}\n\nexport interface GraphQLExperimentalIncrementalExecutionResults<\n  TData = ObjMap<unknown>,\n  TExtensions = ObjMap<unknown>,\n> {\n  initialResult: GraphQLExperimentalInitialIncrementalExecutionResult<\n    TData,\n    TExtensions\n  >;\n  subsequentResults: AsyncGenerator<\n    GraphQLExperimentalSubsequentIncrementalExecutionResult<TData, TExtensions>,\n    void,\n    void\n  >;\n}\n\ntype PromiseOrValue<T> = Promise<T> | T;\n\n// This starts as undefined and is set to a function or null by running\n// tryToLoadGraphQL17(). If graphql-js 17 is installed, it is set to the\n// experimentalExecuteIncrementally function from that package; otherwise it is\n// set to null.\nlet graphqlExperimentalExecuteIncrementally:\n  | ((\n      args: ExecutionArgs,\n    ) => PromiseOrValue<\n      ExecutionResult | GraphQLExperimentalIncrementalExecutionResults\n    >)\n  | null\n  | undefined = undefined;\n\nasync function tryToLoadGraphQL17() {\n  if (graphqlExperimentalExecuteIncrementally !== undefined) {\n    return;\n  }\n  const graphql = await import('graphql');\n  if ('experimentalExecuteIncrementally' in graphql) {\n    graphqlExperimentalExecuteIncrementally = (graphql as any)\n      .experimentalExecuteIncrementally;\n  } else {\n    graphqlExperimentalExecuteIncrementally = null;\n  }\n}\n\nexport async function executeIncrementally(\n  args: ExecutionArgs,\n): Promise<ExecutionResult | GraphQLExperimentalIncrementalExecutionResults> {\n  await tryToLoadGraphQL17();\n  if (graphqlExperimentalExecuteIncrementally) {\n    return graphqlExperimentalExecuteIncrementally(args);\n  }\n  return execute(args);\n}\n/dist/cjs/httpBatching.js\t0\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.runPotentiallyBatchedHttpQuery = void 0;\nconst runHttpQuery_js_1 = require(\"./runHttpQuery.js\");\nconst internalErrorClasses_js_1 = require(\"./internalErrorClasses.js\");\nasync function runBatchedHttpQuery({ server, batchRequest, body, contextValue, schemaDerivedData, internals, }) {\n    if (body.length === 0) {\n        throw new internalErrorClasses_js_1.BadRequestError('No operations found in request.');\n    }\n    const sharedResponseHTTPGraphQLHead = (0, runHttpQuery_js_1.newHTTPGraphQLHead)();\n    const responseBodies = await Promise.all(body.map(async (bodyPiece) => {\n        const singleRequest = {\n            ...batchRequest,\n            body: bodyPiece,\n        };\n        const response = await (0, runHttpQuery_js_1.runHttpQuery)({\n            server,\n            httpRequest: singleRequest,\n            contextValue,\n            schemaDerivedData,\n            internals,\n            sharedResponseHTTPGraphQLHead,\n        });\n        if (response.body.kind === 'chunked') {\n            throw Error('Incremental delivery is not implemented for batch requests');\n        }\n        return response.body.string;\n    }));\n    return {\n        ...sharedResponseHTTPGraphQLHead,\n        body: { kind: 'complete', string: `[${responseBodies.join(',')}]` },\n    };\n}\nasync function runPotentiallyBatchedHttpQuery(server, httpGraphQLRequest, contextValue, schemaDerivedData, internals) {\n    if (!(httpGraphQLRequest.method === 'POST' &&\n        Array.isArray(httpGraphQLRequest.body))) {\n        return await (0, runHttpQuery_js_1.runHttpQuery)({\n            server,\n            httpRequest: httpGraphQLRequest,\n            contextValue,\n            schemaDerivedData,\n            internals,\n            sharedResponseHTTPGraphQLHead: null,\n        });\n    }\n    if (internals.allowBatchedHttpRequests) {\n        return await runBatchedHttpQuery({\n            server,\n            batchRequest: httpGraphQLRequest,\n            body: httpGraphQLRequest.body,\n            contextValue,\n            schemaDerivedData,\n            internals,\n        });\n    }\n    throw new internalErrorClasses_js_1.BadRequestError('Operation batching disabled.');\n}\nexports.runPotentiallyBatchedHttpQuery = runPotentiallyBatchedHttpQuery;\n//# sourceMappingURL=httpBatching.js.map/dist/esm/preventCsrf.d.ts.map\u0001\u0011{\"version\":3,\"file\":\"preventCsrf.d.ts\",\"sourceRoot\":\"\",\"sources\":[\"../../src/preventCsrf.ts\"],\"names\":[],\"mappings\":\"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAYtD,eAAO,MAAM,uCAAuC,UAGnD,CAAC;AA4BF,wBAAgB,WAAW,CACzB,OAAO,EAAE,SAAS,EAClB,4BAA4B,EAAE,MAAM,EAAE,QAmDvC\"}./dist/esm/utils/schemaInstrumentation.d.ts.map\u0002{\"version\":3,\"file\":\"schemaInstrumentation.d.ts\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/utils/schemaInstrumentation.ts\"],\"names\":[],\"mappings\":\"AAAA,OAAO,EACL,aAAa,EAMd,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EACV,WAAW,EAEZ,MAAM,2BAA2B,CAAC;AAEnC,eAAO,MAAM,yCAAyC,eAErD,CAAC;AACF,eAAO,MAAM,uBAAuB,eAA0C,CAAC;AAC/E,QAAA,MAAM,oBAAoB,eAAuC,CAAC;AAElE,wBAAgB,+BAA+B,CAAC,QAAQ,SAAS,WAAW,EAC1E,MAAM,EAAE,aAAa,GAAG;IAAE,CAAC,oBAAoB,CAAC,CAAC,EAAE,OAAO,CAAA;CAAE;;EAuB7D;AAED,wBAAgB,gCAAgC,CAC9C,MAAM,EAAE,aAAa,GAAG;IAAE,CAAC,oBAAoB,CAAC,CAAC,EAAE,OAAO,CAAA;CAAE,GAC3D,OAAO,CAET;AA4DD,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,GAAG,EACX,QAAQ,EAAE,CAAC,GAAG,EAAE,KAAK,GAAG,IAAI,EAAE,MAAM,CAAC,EAAE,GAAG,KAAK,IAAI,QAmBpD\"};/dist/cjs/plugin/landingPage/default/getEmbeddedHTML.js.map\u0004{\"version\":3,\"file\":\"getEmbeddedHTML.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../../../src/plugin/landingPage/default/getEmbeddedHTML.ts\"],\"names\":[],\"mappings\":\";;;AAcA,SAAS,sBAAsB,CAAC,MAAyB;IACvD,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;SAC1B,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC;SACvB,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC;SACvB,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC;SACvB,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;AAC7B,CAAC;AAEM,MAAM,uBAAuB,GAAG,CACrC,OAAe,EACf,MAAqE,EACrE,EAAE;IAqBF,MAAM,oCAAoC,GAAG;QAC3C,cAAc,EAAE,EAAE;QAClB,oBAAoB,EAAE,KAAK;QAC3B,GAAG,CAAC,OAAO,MAAM,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;KAC3D,CAAC;IACF,MAAM,sBAAsB,GAC1B;QACE,GAAG,MAAM;QACT,MAAM,EAAE,qBAAqB;QAC7B,YAAY,EAAE;YACZ,GAAG,MAAM;YACT,cAAc,EAAE;gBACd,GAAG,oCAAoC,CAAC,cAAc;aACvD;SACF;QACD,oBAAoB,EAClB,oCAAoC,CAAC,oBAAoB;KAC5D,CAAC;IAEJ,OAAO;;;;;;;;;;;;;;iEAcwD,OAAO;;;iCAGvC,sBAAsB,CACnD,sBAAsB,CACvB;;;;;;CAMF,CAAC;AACF,CAAC,CAAC;AArEW,QAAA,uBAAuB,2BAqElC;AAEK,MAAM,sBAAsB,GAAG,CACpC,OAAe,EACf,MAAyB,EACzB,EAAE;IACF,OAAO;;;;;;;;;;;;;;gEAcuD,OAAO;;;;;;sBAMjD,MAAM,CAAC,cAAc,IAAI,OAAO;oBAClC,sBAAsB,CAAC;QACrC,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,SAAS;QACtC,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,SAAS;QACxC,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,SAAS;KACrC,CAAC;;;CAGL,CAAC;AACF,CAAC,CAAC;AAjCW,QAAA,sBAAsB,0BAiCjC\"},/dist/esm/utils/computeCoreSchemaHash.js.map\u0001={\"version\":3,\"file\":\"computeCoreSchemaHash.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/utils/computeCoreSchemaHash.ts\"],\"names\":[],\"mappings\":\"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAMtD,MAAM,UAAU,qBAAqB,CAAC,MAAc;IAClD,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC3D,CAAC\"}/src/ApolloServer.tsimport { isNodeLike } from '@apollo/utils.isnodelike';\nimport type { Logger } from '@apollo/utils.logger';\nimport { makeExecutableSchema } from '@graphql-tools/schema';\nimport resolvable, { Resolvable } from '@josephg/resolvable';\nimport {\n  assertValidSchema,\n  DocumentNode,\n  GraphQLError,\n  GraphQLFieldResolver,\n  GraphQLFormattedError,\n  GraphQLSchema,\n  ParseOptions,\n  print,\n  TypedQueryDocumentNode,\n  ValidationContext,\n  ValidationRule,\n} from 'graphql';\nimport {\n  type KeyValueCache,\n  InMemoryLRUCache,\n  PrefixingKeyValueCache,\n} from '@apollo/utils.keyvaluecache';\nimport loglevel from 'loglevel';\nimport Negotiator from 'negotiator';\nimport * as uuid from 'uuid';\nimport { newCachePolicy } from './cachePolicy.js';\nimport { determineApolloConfig } from './determineApolloConfig.js';\nimport {\n  ensureError,\n  ensureGraphQLError,\n  normalizeAndFormatErrors,\n} from './errorNormalize.js';\nimport {\n  ApolloServerErrorCode,\n  ApolloServerValidationErrorCode,\n} from './errors/index.js';\nimport type {\n  ApolloServerPlugin,\n  BaseContext,\n  GraphQLRequest,\n  GraphQLResponse,\n  GraphQLServerListener,\n  GraphQLServerContext,\n  HTTPGraphQLRequest,\n  HTTPGraphQLResponse,\n  LandingPage,\n  ApolloConfig,\n  ApolloServerOptions,\n  DocumentStore,\n  PersistedQueryOptions,\n  ContextThunk,\n  GraphQLRequestContext,\n  HTTPGraphQLHead,\n} from './externalTypes/index.js';\nimport { runPotentiallyBatchedHttpQuery } from './httpBatching.js';\nimport { InternalPluginId, pluginIsInternal } from './internalPlugin.js';\nimport {\n  preventCsrf,\n  recommendedCsrfPreventionRequestHeaders,\n} from './preventCsrf.js';\nimport { APQ_CACHE_PREFIX, processGraphQLRequest } from './requestPipeline.js';\nimport { newHTTPGraphQLHead, prettyJSONStringify } from './runHttpQuery.js';\nimport { SchemaManager } from './utils/schemaManager.js';\nimport { isDefined } from './utils/isDefined.js';\nimport { UnreachableCaseError } from './utils/UnreachableCaseError.js';\nimport type { WithRequired } from '@apollo/utils.withrequired';\nimport type { ApolloServerOptionsWithStaticSchema } from './externalTypes/constructor.js';\nimport type { GatewayExecutor } from '@apollo/server-gateway-interface';\nimport type { GraphQLExperimentalIncrementalExecutionResults } from './incrementalDeliveryPolyfill.js';\nimport { HeaderMap } from './utils/HeaderMap.js';\nimport type {\n  ExecuteOperationOptions,\n  VariableValues,\n} from './externalTypes/graphql.js';\n\nconst NoIntrospection: ValidationRule = (context: ValidationContext) => ({\n  Field(node) {\n    if (node.name.value === '__schema' || node.name.value === '__type') {\n      context.reportError(\n        new GraphQLError(\n          'GraphQL introspection is not allowed by Apollo Server, but the query contained __schema or __type. To enable introspection, pass introspection: true to ApolloServer in production',\n          {\n            nodes: [node],\n            extensions: {\n              validationErrorCode:\n                ApolloServerValidationErrorCode.INTROSPECTION_DISABLED,\n            },\n          },\n        ),\n      );\n    }\n  },\n});\n\nexport type SchemaDerivedData = {\n  schema: GraphQLSchema;\n  // A store that, when enabled (default), will store the parsed and validated\n  // versions of operations in-memory, allowing subsequent parses/validates\n  // on the same operation to be executed immediately.\n  documentStore: DocumentStore | null;\n};\n\ntype RunningServerState = {\n  schemaManager: SchemaManager;\n  landingPage: LandingPage | null;\n};\n\ntype ServerState =\n  | {\n      phase: 'initialized';\n      schemaManager: SchemaManager;\n    }\n  | {\n      phase: 'starting';\n      barrier: Resolvable<void>;\n      schemaManager: SchemaManager;\n      // This is set to true if you called\n      // startInBackgroundHandlingStartupErrorsByLoggingAndFailingAllRequests\n      // instead of start. The main purpose is that assertStarted allows you to\n      // still be in the starting phase if this is set. (This is the serverless\n      // use case.)\n      startedInBackground: boolean;\n    }\n  | {\n      phase: 'failed to start';\n      error: Error;\n    }\n  | ({\n      phase: 'started';\n      drainServers: (() => Promise<void>) | null;\n      toDispose: (() => Promise<void>)[];\n      toDisposeLast: (() => Promise<void>)[];\n    } & RunningServerState)\n  | ({\n      phase: 'draining';\n      barrier: Resolvable<void>;\n    } & RunningServerState)\n  | {\n      phase: 'stopping';\n      barrier: Resolvable<void>;\n    }\n  | {\n      phase: 'stopped';\n      stopError: Error | null;\n    };\n\nexport interface ApolloServerInternals<TContext extends BaseContext> {\n  state: ServerState;\n  gatewayExecutor: GatewayExecutor | null;\n\n  formatError?: (\n    formattedError: GraphQLFormattedError,\n    error: unknown,\n  ) => GraphQLFormattedError;\n  includeStacktraceInErrorResponses: boolean;\n  persistedQueries?: WithRequired<PersistedQueryOptions, 'cache'>;\n  nodeEnv: string;\n  allowBatchedHttpRequests: boolean;\n  apolloConfig: ApolloConfig;\n  plugins: ApolloServerPlugin<TContext>[];\n  parseOptions: ParseOptions;\n  // `undefined` means we figure out what to do during _start (because\n  // the default depends on whether or not we used the background version\n  // of start).\n  stopOnTerminationSignals: boolean | undefined;\n  csrfPreventionRequestHeaders: string[] | null;\n\n  rootValue?: ((parsedQuery: DocumentNode) => unknown) | unknown;\n  validationRules: Array<ValidationRule>;\n  fieldResolver?: GraphQLFieldResolver<any, TContext>;\n\n  __testing_incrementalExecutionResults?: GraphQLExperimentalIncrementalExecutionResults;\n}\n\nfunction defaultLogger(): Logger {\n  const loglevelLogger = loglevel.getLogger('apollo-server');\n  loglevelLogger.setLevel(loglevel.levels.INFO);\n  return loglevelLogger;\n}\n\n// We really want to prevent this from being legal:\n//\n//     const s: ApolloServer<{}> =\n//       new ApolloServer<{importantContextField: boolean}>({ ... });\n//     s.executeOperation({query}, {contextValue: {}});\n//\n// ie, if you declare an ApolloServer whose context values must be of a certain\n// type, you can't assign it to a variable whose context values are less\n// constrained and then pass in a context value missing important fields.\n//\n// We also want this to be illegal:\n//\n//     const sBase = new ApolloServer<{}>({ ... });\n//     const s: ApolloServer<{importantContextField: boolean}> = sBase;\n//     s.addPlugin({async requestDidStart({contextValue: {importantContextField}}) { ... }})\n//     sBase.executeOperation({query}, {contextValue: {}});\n//\n// so you shouldn't be able to assign an ApolloServer to a variable whose\n// context values are more constrained, either. So we want to declare that\n// ApolloServer is *invariant* in TContext, which we do with `in out` (a\n// TypeScript 4.7 feature).\nexport class ApolloServer<in out TContext extends BaseContext = BaseContext> {\n  private internals: ApolloServerInternals<TContext>;\n\n  public readonly cache: KeyValueCache<string>;\n  public readonly logger: Logger;\n\n  constructor(config: ApolloServerOptions<TContext>) {\n    const nodeEnv = config.nodeEnv ?? process.env.NODE_ENV ?? '';\n\n    this.logger = config.logger ?? defaultLogger();\n\n    const apolloConfig = determineApolloConfig(config.apollo);\n\n    const isDev = nodeEnv !== 'production';\n\n    const state: ServerState = config.gateway\n      ? // ApolloServer has been initialized but we have not yet tried to load the\n        // schema from the gateway. That will wait until `start()` or\n        // `startInBackgroundHandlingStartupErrorsByLoggingAndFailingAllRequests()`\n        // is called. (These may be called by other helpers; for example,\n        // `standaloneServer` calls `start` for you inside its `listen` method,\n        // and a serverless framework integration would call\n        // startInBackgroundHandlingStartupErrorsByLoggingAndFailingAllRequests\n        // for you.)\n        {\n          phase: 'initialized',\n          schemaManager: new SchemaManager({\n            gateway: config.gateway,\n            apolloConfig,\n            schemaDerivedDataProvider: (schema) =>\n              ApolloServer.generateSchemaDerivedData(\n                schema,\n                config.documentStore,\n              ),\n            logger: this.logger,\n          }),\n        }\n      : // We construct the schema synchronously so that we can fail fast if the\n        // schema can't be constructed. (This used to be more important because we\n        // used to have a 'schema' field that was publicly accessible immediately\n        // after construction, though that field never actually worked with\n        // gateways.)\n        {\n          phase: 'initialized',\n          schemaManager: new SchemaManager({\n            apiSchema: ApolloServer.constructSchema(config),\n            schemaDerivedDataProvider: (schema) =>\n              ApolloServer.generateSchemaDerivedData(\n                schema,\n                config.documentStore,\n              ),\n            logger: this.logger,\n          }),\n        };\n\n    const introspectionEnabled = config.introspection ?? isDev;\n\n    this.cache = config.cache ?? new InMemoryLRUCache();\n\n    // Note that we avoid calling methods on `this` before `this.internals` is assigned\n    // (thus a bunch of things being static methods above).\n    this.internals = {\n      formatError: config.formatError,\n      rootValue: config.rootValue,\n      validationRules: [\n        ...(config.validationRules ?? []),\n        ...(introspectionEnabled ? [] : [NoIntrospection]),\n      ],\n      fieldResolver: config.fieldResolver,\n      includeStacktraceInErrorResponses:\n        config.includeStacktraceInErrorResponses ??\n        (nodeEnv !== 'production' && nodeEnv !== 'test'),\n      persistedQueries:\n        config.persistedQueries === false\n          ? undefined\n          : {\n              ...config.persistedQueries,\n              cache: new PrefixingKeyValueCache(\n                config.persistedQueries?.cache ?? this.cache,\n                APQ_CACHE_PREFIX,\n              ),\n            },\n      nodeEnv,\n      allowBatchedHttpRequests: config.allowBatchedHttpRequests ?? false,\n      apolloConfig,\n      // Note that more plugins can be added before `start()` with `addPlugin()`\n      // (eg, plugins that want to take this ApolloServer as an argument), and\n      // `start()` will call `addDefaultPlugins` to add default plugins.\n      plugins: config.plugins ?? [],\n      parseOptions: config.parseOptions ?? {},\n      state,\n      stopOnTerminationSignals: config.stopOnTerminationSignals,\n\n      gatewayExecutor: null, // set by _start\n\n      csrfPreventionRequestHeaders:\n        config.csrfPrevention === true || config.csrfPrevention === undefined\n          ? recommendedCsrfPreventionRequestHeaders\n          : config.csrfPrevention === false\n          ? null\n          : config.csrfPrevention.requestHeaders ??\n            recommendedCsrfPreventionRequestHeaders,\n      __testing_incrementalExecutionResults:\n        config.__testing_incrementalExecutionResults,\n    };\n  }\n\n  // Awaiting a call to `start` ensures that a schema has been loaded and that\n  // all plugin `serverWillStart` hooks have been called. If either of these\n  // processes throw, `start` will (async) throw as well.\n  //\n  // If you're using `standaloneServer`, you don't need to call `start` yourself\n  // (in fact, it will throw if you do so); its `listen` method takes care of\n  // that for you.\n  //\n  // If instead you're using an integration package for a non-serverless\n  // framework (like Express), you must await a call to `start` immediately\n  // after creating your `ApolloServer`, before attaching it to your web\n  // framework and starting to accept requests. `start` should only be called\n  // once; if it throws and you'd like to retry, just create another\n  // `ApolloServer`. (Calling `start` was optional in Apollo Server 2, but in\n  // Apollo Server 3+ the functions like `expressMiddleware` use `assertStarted`\n  // to throw if `start` hasn't successfully completed.)\n  //\n  // Serverless integrations like Lambda do not support calling `start()`,\n  // because their lifecycle doesn't allow you to wait before assigning a\n  // handler or allowing the handler to be called. So they call\n  // `startInBackgroundHandlingStartupErrorsByLoggingAndFailingAllRequests()`\n  // instead, and don't really differentiate between startup failures and\n  // request failures. This is hopefully appropriate for a \"serverless\"\n  // framework. Serverless startup failures result in returning a redacted error\n  // to the end user and logging the more detailed error.\n  public async start(): Promise<void> {\n    return await this._start(false);\n  }\n\n  public startInBackgroundHandlingStartupErrorsByLoggingAndFailingAllRequests(): void {\n    this._start(true).catch((e) => this.logStartupError(e));\n  }\n\n  private async _start(startedInBackground: boolean): Promise<void> {\n    if (this.internals.state.phase !== 'initialized') {\n      // If we wanted we could make this error detectable and change\n      // `standaloneServer` to change the message to say not to call start() at\n      // all.\n      throw new Error(\n        `You should only call 'start()' or ` +\n          `'startInBackgroundHandlingStartupErrorsByLoggingAndFailingAllRequests()' ` +\n          `once on your ApolloServer.`,\n      );\n    }\n    const schemaManager = this.internals.state.schemaManager;\n    const barrier = resolvable();\n    this.internals.state = {\n      phase: 'starting',\n      barrier,\n      schemaManager,\n      startedInBackground,\n    };\n    try {\n      // Now that you can't call addPlugin any more, add default plugins like\n      // usage reporting if they're not already added.\n      await this.addDefaultPlugins();\n\n      const toDispose: (() => Promise<void>)[] = [];\n      const executor = await schemaManager.start();\n      if (executor) {\n        this.internals.gatewayExecutor = executor;\n      }\n      toDispose.push(async () => {\n        await schemaManager.stop();\n      });\n\n      const schemaDerivedData = schemaManager.getSchemaDerivedData();\n      const service: GraphQLServerContext = {\n        logger: this.logger,\n        cache: this.cache,\n        schema: schemaDerivedData.schema,\n        apollo: this.internals.apolloConfig,\n        startedInBackground,\n      };\n\n      const taggedServerListeners = (\n        await Promise.all(\n          this.internals.plugins.map(async (plugin) => ({\n            serverListener:\n              plugin.serverWillStart && (await plugin.serverWillStart(service)),\n            installedImplicitly:\n              isImplicitlyInstallablePlugin(plugin) &&\n              plugin.__internal_installed_implicitly__,\n          })),\n        )\n      ).filter(\n        (\n          maybeTaggedServerListener,\n        ): maybeTaggedServerListener is {\n          serverListener: GraphQLServerListener;\n          installedImplicitly: boolean;\n        } => typeof maybeTaggedServerListener.serverListener === 'object',\n      );\n\n      taggedServerListeners.forEach(\n        ({ serverListener: { schemaDidLoadOrUpdate } }) => {\n          if (schemaDidLoadOrUpdate) {\n            schemaManager.onSchemaLoadOrUpdate(schemaDidLoadOrUpdate);\n          }\n        },\n      );\n\n      const serverWillStops = taggedServerListeners\n        .map((l) => l.serverListener.serverWillStop)\n        .filter(isDefined);\n      if (serverWillStops.length) {\n        toDispose.push(async () => {\n          await Promise.all(\n            serverWillStops.map((serverWillStop) => serverWillStop()),\n          );\n        });\n      }\n\n      const drainServerCallbacks = taggedServerListeners\n        .map((l) => l.serverListener.drainServer)\n        .filter(isDefined);\n      const drainServers = drainServerCallbacks.length\n        ? async () => {\n            await Promise.all(\n              drainServerCallbacks.map((drainServer) => drainServer()),\n            );\n          }\n        : null;\n\n      // Find the renderLandingPage callback, if one is provided. If the user\n      // installed ApolloServerPluginLandingPageDisabled then there may be none\n      // found. On the other hand, if the user installed a landingPage plugin,\n      // then both the implicit installation of\n      // ApolloServerPluginLandingPage*Default and the other plugin will be\n      // found; we skip the implicit plugin.\n      let taggedServerListenersWithRenderLandingPage =\n        taggedServerListeners.filter((l) => l.serverListener.renderLandingPage);\n      if (taggedServerListenersWithRenderLandingPage.length > 1) {\n        taggedServerListenersWithRenderLandingPage =\n          taggedServerListenersWithRenderLandingPage.filter(\n            (l) => !l.installedImplicitly,\n          );\n      }\n      let landingPage: LandingPage | null = null;\n      if (taggedServerListenersWithRenderLandingPage.length > 1) {\n        throw Error('Only one plugin can implement renderLandingPage.');\n      } else if (taggedServerListenersWithRenderLandingPage.length) {\n        landingPage = await taggedServerListenersWithRenderLandingPage[0]\n          .serverListener.renderLandingPage!();\n      }\n\n      const toDisposeLast = this.maybeRegisterTerminationSignalHandlers(\n        ['SIGINT', 'SIGTERM'],\n        startedInBackground,\n      );\n\n      this.internals.state = {\n        phase: 'started',\n        schemaManager,\n        drainServers,\n        landingPage,\n        toDispose,\n        toDisposeLast,\n      };\n    } catch (maybeError: unknown) {\n      const error = ensureError(maybeError);\n\n      try {\n        await Promise.all(\n          this.internals.plugins.map(async (plugin) =>\n            plugin.startupDidFail?.({ error }),\n          ),\n        );\n      } catch (pluginError) {\n        this.logger.error(`startupDidFail hook threw: ${pluginError}`);\n      }\n\n      this.internals.state = {\n        phase: 'failed to start',\n        error,\n      };\n      throw error;\n    } finally {\n      barrier.resolve();\n    }\n  }\n\n  private maybeRegisterTerminationSignalHandlers(\n    signals: NodeJS.Signals[],\n    startedInBackground: boolean,\n  ): (() => Promise<void>)[] {\n    const toDisposeLast: (() => Promise<void>)[] = [];\n\n    // We handle signals if it was explicitly requested\n    // (stopOnTerminationSignals === true), or if we're in Node, not in a test,\n    // not in a serverless framework (which we guess based on whether they\n    // called\n    // startInBackgroundHandlingStartupErrorsByLoggingAndFailingAllRequests),\n    // and it wasn't explicitly turned off. (We only actually register the\n    // signal handlers once we've successfully started up, because there's\n    // nothing to stop otherwise.)\n    if (\n      this.internals.stopOnTerminationSignals === false ||\n      (this.internals.stopOnTerminationSignals === undefined &&\n        !(\n          isNodeLike &&\n          this.internals.nodeEnv !== 'test' &&\n          !startedInBackground\n        ))\n    ) {\n      return toDisposeLast;\n    }\n\n    let receivedSignal = false;\n    const signalHandler: NodeJS.SignalsListener = async (signal) => {\n      if (receivedSignal) {\n        // If we receive another SIGINT or SIGTERM while we're waiting\n        // for the server to stop, just ignore it.\n        return;\n      }\n      receivedSignal = true;\n      try {\n        await this.stop();\n      } catch (e) {\n        this.logger.error(`stop() threw during ${signal} shutdown`);\n        this.logger.error(e);\n        // Can't rely on the signal handlers being removed.\n        process.exit(1);\n      }\n      // Note: this.stop will call the toDisposeLast handlers below, so at\n      // this point this handler will have been removed and we can re-kill\n      // ourself to die with the appropriate signal exit status. this.stop\n      // takes care to call toDisposeLast last, so the signal handler isn't\n      // removed until after the rest of shutdown happens.\n      process.kill(process.pid, signal);\n    };\n\n    signals.forEach((signal) => {\n      process.on(signal, signalHandler);\n      toDisposeLast.push(async () => {\n        process.removeListener(signal, signalHandler);\n      });\n    });\n    return toDisposeLast;\n  }\n\n  // This method is called at the beginning of each GraphQL request by\n  // `executeHTTPGraphQLRequest` and `executeOperation`. Most of its logic is\n  // only helpful if you started the server in the background (ie, for\n  // serverless frameworks): unless you're in a serverless framework, you should\n  // have called `await server.start()` before the server got to the point of\n  // running GraphQL requests (`assertStarted` calls in the framework\n  // integrations verify that) and so the only cases for non-serverless\n  // frameworks that this should hit are 'started', 'stopping', and 'stopped'.\n  // But if you started the server in the background (with\n  // startInBackgroundHandlingStartupErrorsByLoggingAndFailingAllRequests), this\n  // lets the server wait until fully started before serving operations.\n  private async _ensureStarted(): Promise<RunningServerState> {\n    while (true) {\n      switch (this.internals.state.phase) {\n        case 'initialized':\n          // This error probably won't happen: serverless framework integrations\n          // should call\n          // `startInBackgroundHandlingStartupErrorsByLoggingAndFailingAllRequests`\n          // for you, and other frameworks call `assertStarted` before setting\n          // things up enough to make calling this function possible.\n          throw new Error(\n            'You need to call `server.start()` before using your Apollo Server.',\n          );\n        case 'starting':\n          await this.internals.state.barrier;\n          // continue the while loop\n          break;\n        case 'failed to start':\n          // First we log the error that prevented startup (which means it will\n          // get logged once for every GraphQL operation).\n          this.logStartupError(this.internals.state.error);\n          // Now make the operation itself fail.\n          // We intentionally do not re-throw actual startup error as it may contain\n          // implementation details and this error will propagate to the client.\n          throw new Error(\n            'This data graph is missing a valid configuration. More details may be available in the server logs.',\n          );\n        case 'started':\n        case 'draining': // We continue to run operations while draining.\n          return this.internals.state;\n        case 'stopping':\n        case 'stopped':\n          this.logger.warn(\n            'A GraphQL operation was received during server shutdown. The ' +\n              'operation will fail. Consider draining the HTTP server on shutdown; ' +\n              'see https://go.apollo.dev/s/drain for details.',\n          );\n          throw new Error(\n            `Cannot execute GraphQL operations ${\n              this.internals.state.phase === 'stopping'\n                ? 'while the server is stopping'\n                : 'after the server has stopped'\n            }.'`,\n          );\n        default:\n          throw new UnreachableCaseError(this.internals.state);\n      }\n    }\n  }\n\n  // Framework integrations should call this to ensure that you've properly\n  // started your server before you get anywhere close to actually listening for\n  // incoming requests.\n  //\n  // There's a special case that if you called\n  // `startInBackgroundHandlingStartupErrorsByLoggingAndFailingAllRequests` and\n  // it hasn't finished starting up yet, this works too. This is intended for\n  // cases like a serverless integration (say, Google Cloud Functions) that\n  // calls\n  // `startInBackgroundHandlingStartupErrorsByLoggingAndFailingAllRequests` for\n  // you and then immediately sets up an integration based on another middleware\n  // like `expressMiddleware` which calls this function. We'd like this to be\n  // OK, but we still want normal Express users to start their ApolloServer\n  // before setting up their HTTP server unless they know what they are doing\n  // well enough to call the function with the long name themselves.\n  public assertStarted(expressionForError: string) {\n    if (\n      this.internals.state.phase !== 'started' &&\n      this.internals.state.phase !== 'draining' &&\n      !(\n        this.internals.state.phase === 'starting' &&\n        this.internals.state.startedInBackground\n      )\n    ) {\n      throw new Error(\n        'You must `await server.start()` before calling `' +\n          expressionForError +\n          '`',\n      );\n    }\n  }\n\n  // Given an error that occurred during Apollo Server startup, log it with a\n  // helpful message. This should happen when you call\n  // `startInBackgroundHandlingStartupErrorsByLoggingAndFailingAllRequests` (ie,\n  // in serverless frameworks); with other frameworks, you must `await\n  // server.start()` which will throw the startup error directly instead of\n  // logging. This gets called both immediately when the startup error happens,\n  // and on all subsequent requests.\n  private logStartupError(err: Error) {\n    this.logger.error(\n      'An error occurred during Apollo Server startup. All GraphQL requests ' +\n        'will now fail. The startup error was: ' +\n        (err?.message || err),\n    );\n  }\n\n  private static constructSchema<TContext extends BaseContext>(\n    config: ApolloServerOptionsWithStaticSchema<TContext>,\n  ): GraphQLSchema {\n    if (config.schema) {\n      return config.schema;\n    }\n\n    const { typeDefs, resolvers } = config;\n    const augmentedTypeDefs = Array.isArray(typeDefs) ? typeDefs : [typeDefs];\n\n    // For convenience, we allow you to pass a few options that we pass through\n    // to a particular version of `@graphql-tools/schema`'s\n    // `makeExecutableSchema`. If you want to use more of this function's\n    // features or have more control over the version of the packages used, just\n    // call it yourself like `new ApolloServer({schema:\n    // makeExecutableSchema(...)})`.\n    return makeExecutableSchema({\n      typeDefs: augmentedTypeDefs,\n      resolvers,\n    });\n  }\n\n  private static generateSchemaDerivedData(\n    schema: GraphQLSchema,\n    // null means don't use a documentStore at all.\n    // missing/undefined means use the default (creating a new one each\n    // time).\n    // defined means wrap this one in a random prefix for each new schema.\n    providedUnprefixedDocumentStore: DocumentStore | null | undefined,\n  ): SchemaDerivedData {\n    // Instead of waiting for the first operation execution against the schema\n    // to find out if it's a valid schema or not, check right now. In the\n    // non-gateway case, if this throws then the `new ApolloServer` call will\n    // throw. In the gateway case if this throws then it will log a message and\n    // just not update the schema (although oddly the message will claim that\n    // the schema is updating).\n    assertValidSchema(schema);\n\n    return {\n      schema,\n      // The DocumentStore is schema-derived because we put documents in it\n      // after checking that they pass GraphQL validation against the schema and\n      // use this to skip validation as well as parsing. So we can't reuse the\n      // same DocumentStore for different schemas because that might make us\n      // treat invalid operations as valid. If we're using the default\n      // DocumentStore, then we just create it from scratch each time we get a\n      // new schema. If we're using a user-provided DocumentStore, then we use a\n      // random prefix each time we get a new schema.\n      documentStore:\n        providedUnprefixedDocumentStore === undefined\n          ? new InMemoryLRUCache<DocumentNode>()\n          : providedUnprefixedDocumentStore === null\n          ? null\n          : new PrefixingKeyValueCache(\n              providedUnprefixedDocumentStore,\n              `${uuid.v4()}:`,\n            ),\n    };\n  }\n\n  public async stop() {\n    switch (this.internals.state.phase) {\n      case 'initialized':\n      case 'starting':\n      case 'failed to start':\n        throw Error(\n          'apolloServer.stop() should only be called after `await apolloServer.start()` has succeeded',\n        );\n\n      // Calling stop more than once should have the same result as the first time.\n      case 'stopped':\n        if (this.internals.state.stopError) {\n          throw this.internals.state.stopError;\n        }\n        return;\n\n      // Two parallel calls to stop; just wait for the other one to finish and\n      // do whatever it did.\n      case 'stopping':\n      case 'draining': {\n        await this.internals.state.barrier;\n        // The cast here is because TS doesn't understand that this.state can\n        // change during the await\n        // (https://github.com/microsoft/TypeScript/issues/9998).\n        const state = this.internals.state as ServerState;\n        if (state.phase !== 'stopped') {\n          throw Error(`Surprising post-stopping state ${state.phase}`);\n        }\n        if (state.stopError) {\n          throw state.stopError;\n        }\n        return;\n      }\n\n      case 'started':\n        // This is handled by the rest of the function.\n        break;\n\n      default:\n        throw new UnreachableCaseError(this.internals.state);\n    }\n\n    const barrier = resolvable();\n\n    const {\n      schemaManager,\n      drainServers,\n      landingPage,\n      toDispose,\n      toDisposeLast,\n    } = this.internals.state;\n\n    // Commit to stopping and start draining servers.\n    this.internals.state = {\n      phase: 'draining',\n      barrier,\n      schemaManager,\n      landingPage,\n    };\n\n    try {\n      await drainServers?.();\n\n      // Servers are drained. Prevent further operations from starting and call\n      // stop handlers.\n      this.internals.state = { phase: 'stopping', barrier };\n\n      // We run shutdown handlers in two phases because we don't want to turn\n      // off our signal listeners (ie, allow signals to kill the process) until\n      // we've done the important parts of shutdown like running serverWillStop\n      // handlers. (We can make this more generic later if it's helpful.)\n      await Promise.all([...toDispose].map((dispose) => dispose()));\n      await Promise.all([...toDisposeLast].map((dispose) => dispose()));\n    } catch (stopError) {\n      this.internals.state = {\n        phase: 'stopped',\n        stopError: stopError as Error,\n      };\n      barrier.resolve();\n      throw stopError;\n    }\n    this.internals.state = { phase: 'stopped', stopError: null };\n  }\n\n  private async addDefaultPlugins() {\n    const { plugins, apolloConfig, nodeEnv } = this.internals;\n    const isDev = nodeEnv !== 'production';\n\n    const alreadyHavePluginWithInternalId = (id: InternalPluginId) =>\n      plugins.some(\n        (p) => pluginIsInternal(p) && p.__internal_plugin_id__ === id,\n      );\n\n    // Make sure we're not trying to explicitly enable and disable the same\n    // feature. (Be careful: we are not trying to stop people from installing\n    // the same plugin twice if they have a use case for it, like two usage\n    // reporting plugins for different variants.)\n    //\n    // Note that this check doesn't work for the landing page plugin, because\n    // users can write their own landing page plugins and we don't know if a\n    // given plugin is a landing page plugin until the server has started.\n    const pluginsByInternalID = new Map<\n      InternalPluginId,\n      { sawDisabled: boolean; sawNonDisabled: boolean }\n    >();\n    for (const p of plugins) {\n      if (pluginIsInternal(p)) {\n        const id = p.__internal_plugin_id__;\n        if (!pluginsByInternalID.has(id)) {\n          pluginsByInternalID.set(id, {\n            sawDisabled: false,\n            sawNonDisabled: false,\n          });\n        }\n        const seen = pluginsByInternalID.get(id)!;\n        if (p.__is_disabled_plugin__) {\n          seen.sawDisabled = true;\n        } else {\n          seen.sawNonDisabled = true;\n        }\n\n        if (seen.sawDisabled && seen.sawNonDisabled) {\n          throw new Error(\n            `You have tried to install both ApolloServerPlugin${id} and ` +\n              `ApolloServerPlugin${id}Disabled in your server. Please choose ` +\n              `whether or not you want to disable the feature and install the ` +\n              `appropriate plugin for your use case.`,\n          );\n        }\n      }\n    }\n\n    // Special case: cache control is on unless you explicitly disable it.\n    {\n      if (!alreadyHavePluginWithInternalId('CacheControl')) {\n        const { ApolloServerPluginCacheControl } = await import(\n          './plugin/cacheControl/index.js'\n        );\n        plugins.push(ApolloServerPluginCacheControl());\n      }\n    }\n\n    // Special case: usage reporting is on by default (and first!) if you\n    // configure an API key.\n    {\n      const alreadyHavePlugin =\n        alreadyHavePluginWithInternalId('UsageReporting');\n      if (!alreadyHavePlugin && apolloConfig.key) {\n        if (apolloConfig.graphRef) {\n          // Keep this plugin first so it wraps everything. (Unfortunately despite\n          // the fact that the person who wrote this line also was the original\n          // author of the comment above in #1105, they don't quite understand why this was important.)\n          const { ApolloServerPluginUsageReporting } = await import(\n            './plugin/usageReporting/index.js'\n          );\n          plugins.unshift(ApolloServerPluginUsageReporting());\n        } else {\n          this.logger.warn(\n            'You have specified an Apollo key but have not specified a graph ref; usage ' +\n              'reporting is disabled. To enable usage reporting, set the `APOLLO_GRAPH_REF` ' +\n              'environment variable to `your-graph-id@your-graph-variant`. To disable this ' +\n              'warning, install `ApolloServerPluginUsageReportingDisabled`.',\n          );\n        }\n      }\n    }\n\n    // Special case: schema reporting can be turned on via environment variable.\n    {\n      const alreadyHavePlugin =\n        alreadyHavePluginWithInternalId('SchemaReporting');\n      const enabledViaEnvVar = process.env.APOLLO_SCHEMA_REPORTING === 'true';\n      if (!alreadyHavePlugin && enabledViaEnvVar) {\n        if (apolloConfig.key) {\n          const { ApolloServerPluginSchemaReporting } = await import(\n            './plugin/schemaReporting/index.js'\n          );\n          plugins.push(ApolloServerPluginSchemaReporting());\n        } else {\n          throw new Error(\n            \"You've enabled schema reporting by setting the APOLLO_SCHEMA_REPORTING \" +\n              'environment variable to true, but you also need to provide your ' +\n              'Apollo API key, via the APOLLO_KEY environment ' +\n              'variable or via `new ApolloServer({apollo: {key})',\n          );\n        }\n      }\n    }\n\n    // Special case: inline tracing is on by default for federated schemas.\n    {\n      const alreadyHavePlugin = alreadyHavePluginWithInternalId('InlineTrace');\n      if (!alreadyHavePlugin) {\n        // If we haven't explicitly disabled inline tracing via\n        // ApolloServerPluginInlineTraceDisabled or explicitly installed our own\n        // ApolloServerPluginInlineTrace, we set up inline tracing in \"only if\n        // federated\" mode.  (This is slightly different than the\n        // pre-ApolloServerPluginInlineTrace where we would also avoid doing\n        // this if an API key was configured and log a warning.)\n        const { ApolloServerPluginInlineTrace } = await import(\n          './plugin/inlineTrace/index.js'\n        );\n        plugins.push(\n          ApolloServerPluginInlineTrace({ __onlyIfSchemaIsFederated: true }),\n        );\n      }\n    }\n\n    // Special case: If we're not in production, show our default landing page.\n    //\n    // This works a bit differently from the other implicitly installed plugins,\n    // which rely entirely on the __internal_plugin_id__ to decide whether the\n    // plugin takes effect. That's because we want third-party plugins to be\n    // able to provide a landing page that overrides the default landing page,\n    // without them having to know about __internal_plugin_id__. So unless we\n    // actively disable the default landing page with\n    // ApolloServerPluginLandingPageDisabled, we install the default landing\n    // page, but with a special flag that _start() uses to ignore it if some\n    // other plugin defines a renderLandingPage callback. (We can't just look\n    // now to see if the plugin defines renderLandingPage because we haven't run\n    // serverWillStart yet.)\n    const alreadyHavePlugin = alreadyHavePluginWithInternalId(\n      'LandingPageDisabled',\n    );\n    if (!alreadyHavePlugin) {\n      const {\n        ApolloServerPluginLandingPageLocalDefault,\n        ApolloServerPluginLandingPageProductionDefault,\n      } = await import('./plugin/landingPage/default/index.js');\n      const plugin: ApolloServerPlugin<TContext> = isDev\n        ? ApolloServerPluginLandingPageLocalDefault()\n        : ApolloServerPluginLandingPageProductionDefault();\n      if (!isImplicitlyInstallablePlugin(plugin)) {\n        throw Error(\n          'default landing page plugin should be implicitly installable?',\n        );\n      }\n      plugin.__internal_installed_implicitly__ = true;\n      plugins.push(plugin);\n    }\n  }\n\n  public addPlugin(plugin: ApolloServerPlugin<TContext>) {\n    if (this.internals.state.phase !== 'initialized') {\n      throw new Error(\"Can't add plugins after the server has started\");\n    }\n    this.internals.plugins.push(plugin);\n  }\n\n  public async executeHTTPGraphQLRequest({\n    httpGraphQLRequest,\n    context,\n  }: {\n    httpGraphQLRequest: HTTPGraphQLRequest;\n    context: ContextThunk<TContext>;\n  }): Promise<HTTPGraphQLResponse> {\n    try {\n      let runningServerState;\n      try {\n        runningServerState = await this._ensureStarted();\n      } catch (error: unknown) {\n        // This is typically either the masked error from when background startup\n        // failed, or related to invoking this function before startup or\n        // during/after shutdown (due to lack of draining).\n        return this.errorResponse(error, httpGraphQLRequest);\n      }\n\n      if (\n        runningServerState.landingPage &&\n        this.prefersHTML(httpGraphQLRequest)\n      ) {\n        return {\n          headers: new HeaderMap([['content-type', 'text/html']]),\n          body: {\n            kind: 'complete',\n            string: runningServerState.landingPage.html,\n          },\n        };\n      }\n\n      // If enabled, check to ensure that this request was preflighted before doing\n      // anything real (such as running the context function).\n      if (this.internals.csrfPreventionRequestHeaders) {\n        preventCsrf(\n          httpGraphQLRequest.headers,\n          this.internals.csrfPreventionRequestHeaders,\n        );\n      }\n\n      let contextValue: TContext;\n      try {\n        contextValue = await context();\n      } catch (maybeError: unknown) {\n        const error = ensureError(maybeError);\n        try {\n          await Promise.all(\n            this.internals.plugins.map(async (plugin) =>\n              plugin.contextCreationDidFail?.({\n                error,\n              }),\n            ),\n          );\n        } catch (pluginError) {\n          this.logger.error(\n            `contextCreationDidFail hook threw: ${pluginError}`,\n          );\n        }\n\n        // If some random function threw, add a helpful prefix when converting\n        // to GraphQLError. If it was already a GraphQLError, trust that the\n        // message was chosen thoughtfully and leave off the prefix.\n        return this.errorResponse(\n          ensureGraphQLError(error, 'Context creation failed: '),\n          httpGraphQLRequest,\n        );\n      }\n\n      return await runPotentiallyBatchedHttpQuery(\n        this,\n        httpGraphQLRequest,\n        contextValue,\n        runningServerState.schemaManager.getSchemaDerivedData(),\n        this.internals,\n      );\n    } catch (maybeError_: unknown) {\n      const maybeError = maybeError_; // fixes inference because catch vars are not const\n      if (\n        maybeError instanceof GraphQLError &&\n        maybeError.extensions.code === ApolloServerErrorCode.BAD_REQUEST\n      ) {\n        try {\n          await Promise.all(\n            this.internals.plugins.map(async (plugin) =>\n              plugin.invalidRequestWasReceived?.({ error: maybeError }),\n            ),\n          );\n        } catch (pluginError) {\n          this.logger.error(\n            `invalidRequestWasReceived hook threw: ${pluginError}`,\n          );\n        }\n      }\n      return this.errorResponse(maybeError, httpGraphQLRequest);\n    }\n  }\n\n  private errorResponse(\n    error: unknown,\n    requestHead: HTTPGraphQLHead,\n  ): HTTPGraphQLResponse {\n    const { formattedErrors, httpFromErrors } = normalizeAndFormatErrors(\n      [error],\n      {\n        includeStacktraceInErrorResponses:\n          this.internals.includeStacktraceInErrorResponses,\n        formatError: this.internals.formatError,\n      },\n    );\n\n    return {\n      status: httpFromErrors.status ?? 500,\n      headers: new HeaderMap([\n        ...httpFromErrors.headers,\n        [\n          'content-type',\n          // Note that we may change the default to\n          // 'application/graphql-response+json' by 2025 as encouraged by the\n          // graphql-over-http spec. It's maybe a bit bad for us to provide\n          // an application/json response if they send `accept: foo/bar`,\n          // but we're already providing some sort of bad request error, and\n          // it's probably more useful for them to fix the other error before\n          // they deal with the `accept` header.\n          chooseContentTypeForSingleResultResponse(requestHead) ??\n            MEDIA_TYPES.APPLICATION_JSON,\n        ],\n      ]),\n      body: {\n        kind: 'complete',\n        string: prettyJSONStringify({\n          errors: formattedErrors,\n        }),\n      },\n    };\n  }\n\n  private prefersHTML(request: HTTPGraphQLRequest): boolean {\n    const acceptHeader = request.headers.get('accept');\n    return (\n      request.method === 'GET' &&\n      !!acceptHeader &&\n      new Negotiator({\n        headers: { accept: acceptHeader },\n      }).mediaType([\n        // We need it to actively prefer text/html over less browser-y types;\n        // eg, `accept: */*' should still go for JSON. Negotiator does tiebreak\n        // by the order in the list we provide, so we put text/html last.\n        MEDIA_TYPES.APPLICATION_JSON,\n        MEDIA_TYPES.APPLICATION_GRAPHQL_RESPONSE_JSON,\n        MEDIA_TYPES.MULTIPART_MIXED_EXPERIMENTAL,\n        MEDIA_TYPES.MULTIPART_MIXED_NO_DEFER_SPEC,\n        MEDIA_TYPES.TEXT_HTML,\n      ]) === MEDIA_TYPES.TEXT_HTML\n    );\n  }\n\n  /**\n   * This method is primarily meant for testing: it allows you to execute a\n   * GraphQL operation via the request pipeline without going through the HTTP\n   * layer. Note that this means that any handling you do in your server at the\n   * HTTP level will not affect this call!\n   *\n   * For convenience, you can provide `request.query` either as a string or a\n   * DocumentNode, in case you choose to use the gql tag in your tests. This is\n   * just a convenience, not an optimization (we convert provided ASTs back into\n   * string).\n   *\n   * The second object is an optional options object which includes the optional\n   * `contextValue` object available in resolvers.\n   *\n   * You may specify the TData and TVariables generic types when calling this\n   * method; Apollo Server does not validate that the returned data actually\n   * matches the structure of TData. (Typically these types are created by a\n   * code generation tool.) Note that this does not enforce that `variables` is\n   * provided at all, just that it has the right type if provided.\n   */\n  public async executeOperation<\n    TData = Record<string, unknown>,\n    TVariables extends VariableValues = VariableValues,\n  >(\n    this: ApolloServer<BaseContext>,\n    request: Omit<GraphQLRequest<TVariables>, 'query'> & {\n      query?: string | DocumentNode | TypedQueryDocumentNode<TData, TVariables>;\n    },\n  ): Promise<GraphQLResponse<TData>>;\n  public async executeOperation<\n    TData = Record<string, unknown>,\n    TVariables extends VariableValues = VariableValues,\n  >(\n    request: Omit<GraphQLRequest<TVariables>, 'query'> & {\n      query?: string | DocumentNode | TypedQueryDocumentNode<TData, TVariables>;\n    },\n    options?: ExecuteOperationOptions<TContext>,\n  ): Promise<GraphQLResponse<TData>>;\n\n  async executeOperation<\n    TData = Record<string, unknown>,\n    TVariables extends VariableValues = VariableValues,\n  >(\n    request: Omit<GraphQLRequest<TVariables>, 'query'> & {\n      // We should consider supporting TypedDocumentNode from\n      // `@graphql-typed-document-node/core` as well, as it is more popular than\n      // the newer built-in type.\n      query?: string | DocumentNode | TypedQueryDocumentNode<TData, TVariables>;\n    },\n    options: ExecuteOperationOptions<TContext> = {},\n  ): Promise<GraphQLResponse<TData>> {\n    // Since this function is mostly for testing, you don't need to explicitly\n    // start your server before calling it. (That also means you can use it with\n    // `apollo-server` which doesn't support `start()`.)\n    if (this.internals.state.phase === 'initialized') {\n      await this.start();\n    }\n\n    const schemaDerivedData = (\n      await this._ensureStarted()\n    ).schemaManager.getSchemaDerivedData();\n\n    // For convenience, this function lets you pass either a string or an AST,\n    // but we normalize to string.\n    const graphQLRequest: GraphQLRequest = {\n      ...request,\n      query:\n        request.query && typeof request.query !== 'string'\n          ? print(request.query)\n          : request.query,\n    };\n\n    const response: GraphQLResponse = await internalExecuteOperation(\n      {\n        server: this,\n        graphQLRequest,\n        internals: this.internals,\n        schemaDerivedData,\n        sharedResponseHTTPGraphQLHead: null,\n      },\n      options,\n    );\n\n    // It's your job to set an appropriate TData (perhaps using codegen); we\n    // don't validate it.\n    return response as GraphQLResponse<TData>;\n  }\n}\n\n// Shared code between runHttpQuery (ie executeHTTPGraphQLRequest) and\n// executeOperation to set up a request context and invoke the request pipeline.\nexport async function internalExecuteOperation<TContext extends BaseContext>(\n  {\n    server,\n    graphQLRequest,\n    internals,\n    schemaDerivedData,\n    sharedResponseHTTPGraphQLHead,\n  }: {\n    server: ApolloServer<TContext>;\n    graphQLRequest: GraphQLRequest;\n    internals: ApolloServerInternals<TContext>;\n    schemaDerivedData: SchemaDerivedData;\n    sharedResponseHTTPGraphQLHead: HTTPGraphQLHead | null;\n  },\n  options: ExecuteOperationOptions<TContext>,\n): Promise<GraphQLResponse> {\n  const requestContext: GraphQLRequestContext<TContext> = {\n    logger: server.logger,\n    cache: server.cache,\n    schema: schemaDerivedData.schema,\n    request: graphQLRequest,\n    response: {\n      http: sharedResponseHTTPGraphQLHead ?? newHTTPGraphQLHead(),\n    },\n    // We clone the context because there are some assumptions that every operation\n    // execution has a brand new context object; specifically, in order to implement\n    // willResolveField we put a Symbol on the context that is specific to a particular\n    // request pipeline execution. We could avoid this if we had a better way of\n    // instrumenting execution.\n    //\n    // We don't want to do a deep clone here, because one of the main advantages of\n    // using batched HTTP requests is to share context across operations for a\n    // single request.\n    //\n    // The typecast here is safe, because the only way `contextValue` can be\n    // null-ish is if we used the `contextValue?: BaseContext` override, in\n    // which case TContext is BaseContext and {} is ok. (This does depend on\n    // the fact we've hackily forced the class to be contravariant in\n    // TContext.)\n    contextValue: cloneObject(options?.contextValue ?? ({} as TContext)),\n    metrics: {},\n    overallCachePolicy: newCachePolicy(),\n    requestIsBatched: sharedResponseHTTPGraphQLHead !== null,\n  };\n\n  try {\n    return await processGraphQLRequest(\n      schemaDerivedData,\n      server,\n      internals,\n      requestContext,\n    );\n  } catch (maybeError: unknown) {\n    // processGraphQLRequest throwing usually means that either there's a bug in\n    // Apollo Server or some plugin hook threw unexpectedly.\n    const error = ensureError(maybeError);\n    // If *these* hooks throw then we'll still get a 500 but won't mask its\n    // error.\n    await Promise.all(\n      internals.plugins.map(async (plugin) =>\n        plugin.unexpectedErrorProcessingRequest?.({\n          requestContext,\n          error,\n        }),\n      ),\n    );\n    // Mask unexpected error externally.\n    server.logger.error(`Unexpected error processing request: ${error}`);\n    throw new Error('Internal server error');\n  }\n}\n\n// Unlike InternalPlugins (where we can decide whether to install the default\n// plugin based on looking at which plugins are installed),\n// ImplicitlyInstallablePlugins (ie the default landing page plugin) can't\n// determine if they're needed until later in startup. Specifically, we can't\n// know if we've defined our own landing page until after serverWillStart\n// plugins have run.\nexport type ImplicitlyInstallablePlugin<TContext extends BaseContext> =\n  ApolloServerPlugin<TContext> & {\n    __internal_installed_implicitly__: boolean;\n  };\n\nexport function isImplicitlyInstallablePlugin<TContext extends BaseContext>(\n  p: ApolloServerPlugin<TContext>,\n): p is ImplicitlyInstallablePlugin<TContext> {\n  return '__internal_installed_implicitly__' in p;\n}\n\nexport const MEDIA_TYPES = {\n  APPLICATION_JSON: 'application/json; charset=utf-8',\n  APPLICATION_GRAPHQL_RESPONSE_JSON:\n    'application/graphql-response+json; charset=utf-8',\n  // We do *not* currently support this content-type; we will once incremental\n  // delivery is part of the official GraphQL spec.\n  MULTIPART_MIXED_NO_DEFER_SPEC: 'multipart/mixed',\n  MULTIPART_MIXED_EXPERIMENTAL: 'multipart/mixed; deferSpec=20220824',\n  TEXT_HTML: 'text/html',\n};\n\nexport function chooseContentTypeForSingleResultResponse(\n  head: HTTPGraphQLHead,\n): string | null {\n  const acceptHeader = head.headers.get('accept');\n  if (!acceptHeader) {\n    // Note that we may change the default to\n    // 'application/graphql-response+json' by 2025 as encouraged by the\n    // graphql-over-http spec.\n    return MEDIA_TYPES.APPLICATION_JSON;\n  } else {\n    const preferred = new Negotiator({\n      headers: { accept: head.headers.get('accept') },\n    }).mediaType([\n      MEDIA_TYPES.APPLICATION_JSON,\n      MEDIA_TYPES.APPLICATION_GRAPHQL_RESPONSE_JSON,\n    ]);\n    if (preferred) {\n      return preferred;\n    } else {\n      return null;\n    }\n  }\n}\n\nfunction cloneObject<T extends Object>(object: T): T {\n  return Object.assign(Object.create(Object.getPrototypeOf(object)), object);\n}\n*/dist/cjs/externalTypes/constructor.js.mapĆ{\"version\":3,\"file\":\"constructor.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/externalTypes/constructor.ts\"],\"names\":[],\"mappings\":\"\"}*/dist/esm/utils/schemaInstrumentation.d.ts\u0003Aimport { GraphQLSchema } from 'graphql';\nimport type { BaseContext } from '../externalTypes/index.js';\nexport declare const symbolExecutionDispatcherWillResolveField: unique symbol;\nexport declare const symbolUserFieldResolver: unique symbol;\ndeclare const symbolPluginsEnabled: unique symbol;\nexport declare function enablePluginsForSchemaResolvers<TContext extends BaseContext>(schema: GraphQLSchema & {\n    [symbolPluginsEnabled]?: boolean;\n}): GraphQLSchema & {\n    [symbolPluginsEnabled]?: boolean | undefined;\n};\nexport declare function pluginsEnabledForSchemaResolvers(schema: GraphQLSchema & {\n    [symbolPluginsEnabled]?: boolean;\n}): boolean;\nexport declare function whenResultIsFinished(result: any, callback: (err: Error | null, result?: any) => void): void;\nexport {};\n//# sourceMappingURL=schemaInstrumentation.d.ts.map /dist/esm/utils/isDefined.js.map{\"version\":3,\"file\":\"isDefined.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/utils/isDefined.ts\"],\"names\":[],\"mappings\":\"AAAA,MAAM,UAAU,SAAS,CAAI,CAA8B;IACzD,OAAO,CAAC,IAAI,IAAI,CAAC;AACnB,CAAC\"}'/dist/cjs/utils/UnreachableCaseError.js\u0001N\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.UnreachableCaseError = void 0;\nclass UnreachableCaseError extends Error {\n    constructor(val) {\n        super(`Unreachable case: ${val}`);\n    }\n}\nexports.UnreachableCaseError = UnreachableCaseError;\n//# sourceMappingURL=UnreachableCaseError.js.map\"/dist/esm/externalTypes/plugins.js.export {};\n//# sourceMappingURL=plugins.js.map$/dist/esm/utils/schemaManager.js.map\ne{\"version\":3,\"file\":\"schemaManager.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/utils/schemaManager.ts\"],\"names\":[],\"mappings\":\"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\"}/dist/cjs/errorNormalize.js\u000b]\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ensureGraphQLError = exports.ensureError = exports.normalizeAndFormatErrors = void 0;\nconst graphql_1 = require(\"graphql\");\nconst index_js_1 = require(\"./errors/index.js\");\nconst runHttpQuery_js_1 = require(\"./runHttpQuery.js\");\nconst HeaderMap_js_1 = require(\"./utils/HeaderMap.js\");\nfunction normalizeAndFormatErrors(errors, options = {}) {\n    const formatError = options.formatError ?? ((error) => error);\n    const httpFromErrors = (0, runHttpQuery_js_1.newHTTPGraphQLHead)();\n    return {\n        httpFromErrors,\n        formattedErrors: errors.map((error) => {\n            try {\n                return formatError(enrichError(error), error);\n            }\n            catch (formattingError) {\n                if (options.includeStacktraceInErrorResponses) {\n                    return enrichError(formattingError);\n                }\n                else {\n                    return {\n                        message: 'Internal server error',\n                        extensions: { code: index_js_1.ApolloServerErrorCode.INTERNAL_SERVER_ERROR },\n                    };\n                }\n            }\n        }),\n    };\n    function enrichError(maybeError) {\n        const graphqlError = ensureGraphQLError(maybeError);\n        const extensions = {\n            ...graphqlError.extensions,\n            code: graphqlError.extensions.code ??\n                index_js_1.ApolloServerErrorCode.INTERNAL_SERVER_ERROR,\n        };\n        if (isPartialHTTPGraphQLHead(extensions.http)) {\n            (0, runHttpQuery_js_1.mergeHTTPGraphQLHead)(httpFromErrors, {\n                headers: new HeaderMap_js_1.HeaderMap(),\n                ...extensions.http,\n            });\n            delete extensions.http;\n        }\n        if (options.includeStacktraceInErrorResponses) {\n            extensions.stacktrace = graphqlError.stack?.split('\\n');\n        }\n        return { ...graphqlError.toJSON(), extensions };\n    }\n}\nexports.normalizeAndFormatErrors = normalizeAndFormatErrors;\nfunction ensureError(maybeError) {\n    return maybeError instanceof Error\n        ? maybeError\n        : new graphql_1.GraphQLError('Unexpected error value: ' + String(maybeError));\n}\nexports.ensureError = ensureError;\nfunction ensureGraphQLError(maybeError, messagePrefixIfNotGraphQLError = '') {\n    const error = ensureError(maybeError);\n    return error instanceof graphql_1.GraphQLError\n        ? error\n        : new graphql_1.GraphQLError(messagePrefixIfNotGraphQLError + error.message, {\n            originalError: error,\n        });\n}\nexports.ensureGraphQLError = ensureGraphQLError;\nfunction isPartialHTTPGraphQLHead(x) {\n    return (!!x &&\n        typeof x === 'object' &&\n        (!('status' in x) || typeof x.status === 'number') &&\n        (!('headers' in x) || x.headers instanceof Map));\n}\n//# sourceMappingURL=errorNormalize.js.map3/dist/cjs/utils/makeGatewayGraphQLRequestContext.js\f\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.makeGatewayGraphQLRequestContext = void 0;\nfunction makeGatewayGraphQLRequestContext(as4RequestContext, server, internals) {\n    const request = {};\n    if ('query' in as4RequestContext.request) {\n        request.query = as4RequestContext.request.query;\n    }\n    if ('operationName' in as4RequestContext.request) {\n        request.operationName = as4RequestContext.request.operationName;\n    }\n    if ('variables' in as4RequestContext.request) {\n        request.variables = as4RequestContext.request.variables;\n    }\n    if ('extensions' in as4RequestContext.request) {\n        request.extensions = as4RequestContext.request.extensions;\n    }\n    if (as4RequestContext.request.http) {\n        const as4http = as4RequestContext.request.http;\n        const needQuestion = as4http.search !== '' && !as4http.search.startsWith('?');\n        request.http = {\n            method: as4http.method,\n            url: `https://unknown-url.invalid/${needQuestion ? '?' : ''}${as4http.search}`,\n            headers: new FetcherHeadersForHeaderMap(as4http.headers),\n        };\n    }\n    const response = {\n        http: {\n            headers: new FetcherHeadersForHeaderMap(as4RequestContext.response.http.headers),\n            get status() {\n                return as4RequestContext.response.http.status;\n            },\n            set status(newStatus) {\n                as4RequestContext.response.http.status = newStatus;\n            },\n        },\n    };\n    return {\n        request,\n        response,\n        logger: server.logger,\n        schema: as4RequestContext.schema,\n        schemaHash: 'schemaHash no longer exists in Apollo Server 4',\n        context: as4RequestContext.contextValue,\n        cache: server.cache,\n        queryHash: as4RequestContext.queryHash,\n        document: as4RequestContext.document,\n        source: as4RequestContext.source,\n        operationName: as4RequestContext.operationName,\n        operation: as4RequestContext.operation,\n        errors: as4RequestContext.errors,\n        metrics: as4RequestContext.metrics,\n        debug: internals.includeStacktraceInErrorResponses,\n        overallCachePolicy: as4RequestContext.overallCachePolicy,\n        requestIsBatched: as4RequestContext.requestIsBatched,\n    };\n}\nexports.makeGatewayGraphQLRequestContext = makeGatewayGraphQLRequestContext;\nclass FetcherHeadersForHeaderMap {\n    constructor(map) {\n        this.map = map;\n    }\n    append(name, value) {\n        if (this.map.has(name)) {\n            this.map.set(name, this.map.get(name) + ', ' + value);\n        }\n        else {\n            this.map.set(name, value);\n        }\n    }\n    delete(name) {\n        this.map.delete(name);\n    }\n    get(name) {\n        return this.map.get(name) ?? null;\n    }\n    has(name) {\n        return this.map.has(name);\n    }\n    set(name, value) {\n        this.map.set(name, value);\n    }\n    entries() {\n        return this.map.entries();\n    }\n    keys() {\n        return this.map.keys();\n    }\n    values() {\n        return this.map.values();\n    }\n    [Symbol.iterator]() {\n        return this.map.entries();\n    }\n}\n//# sourceMappingURL=makeGatewayGraphQLRequestContext.js.map#/src/plugin/usageReporting/stats.ts>import {\n  type google,\n  type IContextualizedStats,\n  type IFieldStat,\n  type IPathErrorStats,\n  type IQueryLatencyStats,\n  type IReport,\n  type IStatsContext,\n  type ITracesAndStats,\n  type ITypeStat,\n  type ReportHeader,\n  Trace,\n} from '@apollo/usage-reporting-protobuf';\nimport type { ReferencedFieldsByType } from '@apollo/utils.usagereporting';\nimport { DurationHistogram } from './durationHistogram.js';\nimport { iterateOverTrace, ResponseNamePath } from './iterateOverTrace.js';\n\n// protobuf.js exports both a class and an interface (starting with I) for each\n// message type. The class is what it produces when it decodes the message; the\n// interface is what is accepted as input. We build up our messages using custom\n// types implementing the interfaces, so that we can take advantage of the\n// js_use_toArray option we added to our protobuf.js fork which allows us to use\n// classes like DurationHistogram to generate repeated fields. We end up\n// re-creating most of the report structure as custom classes (starting with\n// \"Our\"). TypeScript validates that we've properly listed all of the message\n// fields with the appropriate types (we use `Required` to ensure we implement\n// all message fields). Using our own classes has other advantages, like being\n// able to specify that nested messages are instances of the same class rather\n// than the interface type and thus that they have non-null fields (because the\n// interface type allows all fields to be optional, even though the protobuf\n// format doesn't differentiate between missing and falsey).\n\nexport class SizeEstimator {\n  bytes = 0;\n}\nexport class OurReport implements Required<IReport> {\n  constructor(readonly header: ReportHeader) {}\n  readonly tracesPerQuery: Record<string, OurTracesAndStats> =\n    Object.create(null);\n  endTime: google.protobuf.ITimestamp | null = null;\n  operationCount = 0;\n  // A rough estimate of the number of bytes currently in the report. We start\n  // at zero and don't count `header` and `endTime`, which have the same size\n  // for every report. This really is a rough estimate, so we don't stress too\n  // much about counting bytes for the tags and string/message lengths, etc:\n  // we mostly just count the lengths of strings plus some estimates for the\n  // messages with a bunch of numbers in them.\n  //\n  // We store this in a class so we can pass it down as a reference to other\n  // methods which increment it.\n  readonly sizeEstimator = new SizeEstimator();\n\n  ensureCountsAreIntegers() {\n    for (const tracesAndStats of Object.values(this.tracesPerQuery)) {\n      tracesAndStats.ensureCountsAreIntegers();\n    }\n  }\n\n  addTrace({\n    statsReportKey,\n    trace,\n    asTrace,\n    referencedFieldsByType,\n    // The max size a trace can be before it is sent as stats. Note that the\n    // Apollo reporting ingress server will never store any traces over 10mb\n    // anyway. They will still be converted to stats as we would do here.\n    maxTraceBytes = 10 * 1024 * 1024,\n  }: {\n    statsReportKey: string;\n    trace: Trace;\n    asTrace: boolean;\n    referencedFieldsByType: ReferencedFieldsByType;\n    maxTraceBytes?: number;\n  }) {\n    const tracesAndStats = this.getTracesAndStats({\n      statsReportKey,\n      referencedFieldsByType,\n    });\n    if (asTrace) {\n      const encodedTrace = Trace.encode(trace).finish();\n\n      if (!isNaN(maxTraceBytes) && encodedTrace.length > maxTraceBytes) {\n        tracesAndStats.statsWithContext.addTrace(trace, this.sizeEstimator);\n      } else {\n        tracesAndStats.trace.push(encodedTrace);\n        this.sizeEstimator.bytes += 2 + encodedTrace.length;\n      }\n    } else {\n      tracesAndStats.statsWithContext.addTrace(trace, this.sizeEstimator);\n    }\n  }\n\n  private getTracesAndStats({\n    statsReportKey,\n    referencedFieldsByType,\n  }: {\n    statsReportKey: string;\n    referencedFieldsByType: ReferencedFieldsByType;\n  }) {\n    const existing = this.tracesPerQuery[statsReportKey];\n    if (existing) {\n      return existing;\n    }\n    this.sizeEstimator.bytes += estimatedBytesForString(statsReportKey);\n\n    // Update the size estimator for the referenced field structure.\n    for (const [typeName, referencedFieldsForType] of Object.entries(\n      referencedFieldsByType,\n    )) {\n      // Two bytes each for the map entry and for the ReferencedFieldsForType,\n      // and for the isInterface bool if it's set.\n      this.sizeEstimator.bytes += 2 + 2;\n      if (referencedFieldsForType.isInterface) {\n        this.sizeEstimator.bytes += 2;\n      }\n      this.sizeEstimator.bytes += estimatedBytesForString(typeName);\n      for (const fieldName of referencedFieldsForType.fieldNames) {\n        this.sizeEstimator.bytes += estimatedBytesForString(fieldName);\n      }\n    }\n\n    // Include the referenced fields map in the report. (In an ideal world we\n    // could have a slightly more sophisticated protocol and ingestion pipeline\n    // that allowed us to only have to send this data once for each\n    // schema/operation pair.)\n    return (this.tracesPerQuery[statsReportKey] = new OurTracesAndStats(\n      referencedFieldsByType,\n    ));\n  }\n}\n\nclass OurTracesAndStats implements Required<ITracesAndStats> {\n  constructor(readonly referencedFieldsByType: ReferencedFieldsByType) {}\n  readonly trace: Uint8Array[] = [];\n  readonly statsWithContext = new StatsByContext();\n  readonly internalTracesContributingToStats: Uint8Array[] = [];\n\n  ensureCountsAreIntegers() {\n    this.statsWithContext.ensureCountsAreIntegers();\n  }\n}\n\nclass StatsByContext {\n  readonly map: { [k: string]: OurContextualizedStats } = Object.create(null);\n\n  /**\n   * This function is used by the protobuf generator to convert this map into\n   * an array of contextualized stats to serialize\n   */\n  toArray(): IContextualizedStats[] {\n    return Object.values(this.map);\n  }\n\n  ensureCountsAreIntegers() {\n    for (const contextualizedStats of Object.values(this.map)) {\n      contextualizedStats.ensureCountsAreIntegers();\n    }\n  }\n\n  addTrace(trace: Trace, sizeEstimator: SizeEstimator) {\n    this.getContextualizedStats(trace, sizeEstimator).addTrace(\n      trace,\n      sizeEstimator,\n    );\n  }\n\n  private getContextualizedStats(\n    trace: Trace,\n    sizeEstimator: SizeEstimator,\n  ): OurContextualizedStats {\n    const statsContext: IStatsContext = {\n      clientName: trace.clientName,\n      clientVersion: trace.clientVersion,\n    };\n    const statsContextKey = JSON.stringify(statsContext);\n\n    const existing = this.map[statsContextKey];\n    if (existing) {\n      return existing;\n    }\n    // Adding a ContextualizedStats means adding a StatsContext plus a\n    // QueryLatencyStats. Let's guess about 20 bytes for a QueryLatencyStats;\n    // it'll be more if more features are used (like cache, APQ, etc).\n    sizeEstimator.bytes +=\n      20 +\n      estimatedBytesForString(trace.clientName) +\n      estimatedBytesForString(trace.clientVersion);\n    const contextualizedStats = new OurContextualizedStats(statsContext);\n    this.map[statsContextKey] = contextualizedStats;\n    return contextualizedStats;\n  }\n}\n\nexport class OurContextualizedStats implements Required<IContextualizedStats> {\n  queryLatencyStats = new OurQueryLatencyStats();\n  perTypeStat: { [k: string]: OurTypeStat } = Object.create(null);\n\n  constructor(readonly context: IStatsContext) {}\n\n  ensureCountsAreIntegers() {\n    for (const typeStat of Object.values(this.perTypeStat)) {\n      typeStat.ensureCountsAreIntegers();\n    }\n  }\n\n  // Extract statistics from the trace, and increment the estimated report size.\n  // We only add to the estimate when adding whole sub-messages. If it really\n  // mattered, we could do a lot more careful things like incrementing it\n  // whenever a numeric field on queryLatencyStats gets incremented over 0.\n  addTrace(trace: Trace, sizeEstimator: SizeEstimator) {\n    const { fieldExecutionWeight } = trace;\n    if (!fieldExecutionWeight) {\n      this.queryLatencyStats.requestsWithoutFieldInstrumentation++;\n    }\n\n    this.queryLatencyStats.requestCount++;\n    if (trace.fullQueryCacheHit) {\n      this.queryLatencyStats.cacheLatencyCount.incrementDuration(\n        trace.durationNs,\n      );\n      this.queryLatencyStats.cacheHits++;\n    } else {\n      this.queryLatencyStats.latencyCount.incrementDuration(trace.durationNs);\n    }\n\n    // We only provide stats about cache TTLs on cache misses (ie, TTLs directly\n    // calculated by the backend), not for cache hits. This matches the\n    // behavior we've had for a while when converting traces into statistics\n    // in Studio's servers.\n    if (!trace.fullQueryCacheHit && trace.cachePolicy?.maxAgeNs != null) {\n      switch (trace.cachePolicy.scope) {\n        case Trace.CachePolicy.Scope.PRIVATE:\n          this.queryLatencyStats.privateCacheTtlCount.incrementDuration(\n            trace.cachePolicy.maxAgeNs,\n          );\n          break;\n        case Trace.CachePolicy.Scope.PUBLIC:\n          this.queryLatencyStats.publicCacheTtlCount.incrementDuration(\n            trace.cachePolicy.maxAgeNs,\n          );\n          break;\n      }\n    }\n\n    if (trace.persistedQueryHit) {\n      this.queryLatencyStats.persistedQueryHits++;\n    }\n    if (trace.persistedQueryRegister) {\n      this.queryLatencyStats.persistedQueryMisses++;\n    }\n\n    if (trace.forbiddenOperation) {\n      this.queryLatencyStats.forbiddenOperationCount++;\n    }\n    if (trace.registeredOperation) {\n      this.queryLatencyStats.registeredOperationCount++;\n    }\n\n    let hasError = false;\n\n    const traceNodeStats = (node: Trace.INode, path: ResponseNamePath) => {\n      // Generate error stats and error path information\n      if (node.error?.length) {\n        hasError = true;\n\n        let currPathErrorStats = this.queryLatencyStats.rootErrorStats;\n        path.toArray().forEach((subPath) => {\n          currPathErrorStats = currPathErrorStats.getChild(\n            subPath,\n            sizeEstimator,\n          );\n        });\n\n        currPathErrorStats.requestsWithErrorsCount += 1;\n        currPathErrorStats.errorsCount += node.error.length;\n      }\n\n      if (fieldExecutionWeight) {\n        // The actual field name behind the node; originalFieldName is set\n        // if an alias was used, otherwise responseName. (This is falsey for\n        // nodes that are not fields (root, array index, etc).)\n        const fieldName = node.originalFieldName || node.responseName;\n\n        // Protobuf doesn't really differentiate between \"unset\" and \"falsey\" so\n        // we're mostly actually checking that these things are non-empty string /\n        // non-zero numbers. The time fields represent the number of nanoseconds\n        // since the beginning of the entire trace, so let's pretend for the\n        // moment that it's plausible for a node to start or even end exactly when\n        // the trace started (ie, for the time values to be 0). This is unlikely\n        // in practice (everything should take at least 1ns). In practice we only\n        // write `type` and `parentType` on a Node when we write `startTime`, so\n        // the main thing we're looking out for by checking the time values is\n        // whether we somehow failed to write `endTime` at the end of the field;\n        // in this case, the `endTime >= startTime` check won't match.\n        if (\n          node.parentType &&\n          fieldName &&\n          node.type &&\n          node.endTime != null &&\n          node.startTime != null &&\n          node.endTime >= node.startTime\n        ) {\n          const typeStat = this.getTypeStat(node.parentType, sizeEstimator);\n\n          const fieldStat = typeStat.getFieldStat(\n            fieldName,\n            node.type,\n            sizeEstimator,\n          );\n\n          fieldStat.errorsCount += node.error?.length ?? 0;\n          fieldStat.observedExecutionCount++;\n          fieldStat.estimatedExecutionCount += fieldExecutionWeight;\n          // Note: this is actually counting the number of resolver calls for this\n          // field that had at least one error, not the number of overall GraphQL\n          // queries that had at least one error for this field. That doesn't seem\n          // to match the name, but it does match the other implementations of this\n          // logic.\n          fieldStat.requestsWithErrorsCount +=\n            (node.error?.length ?? 0) > 0 ? 1 : 0;\n          fieldStat.latencyCount.incrementDuration(\n            node.endTime - node.startTime,\n            // The latency histogram is always \"estimated\"; we don't track\n            // \"observed\" and \"estimated\" separately.\n            fieldExecutionWeight,\n          );\n        }\n      }\n\n      return false;\n    };\n\n    iterateOverTrace(trace, traceNodeStats, true);\n    if (hasError) {\n      this.queryLatencyStats.requestsWithErrorsCount++;\n    }\n  }\n\n  getTypeStat(parentType: string, sizeEstimator: SizeEstimator): OurTypeStat {\n    const existing = this.perTypeStat[parentType];\n    if (existing) {\n      return existing;\n    }\n    sizeEstimator.bytes += estimatedBytesForString(parentType);\n    const typeStat = new OurTypeStat();\n    this.perTypeStat[parentType] = typeStat;\n    return typeStat;\n  }\n}\n\nclass OurQueryLatencyStats implements Required<IQueryLatencyStats> {\n  latencyCount: DurationHistogram = new DurationHistogram();\n  requestCount = 0;\n  requestsWithoutFieldInstrumentation = 0;\n  cacheHits = 0;\n  persistedQueryHits = 0;\n  persistedQueryMisses = 0;\n  cacheLatencyCount: DurationHistogram = new DurationHistogram();\n  rootErrorStats: OurPathErrorStats = new OurPathErrorStats();\n  requestsWithErrorsCount = 0;\n  publicCacheTtlCount: DurationHistogram = new DurationHistogram();\n  privateCacheTtlCount: DurationHistogram = new DurationHistogram();\n  registeredOperationCount = 0;\n  forbiddenOperationCount = 0;\n}\n\nclass OurPathErrorStats implements Required<IPathErrorStats> {\n  children: { [k: string]: OurPathErrorStats } = Object.create(null);\n  errorsCount = 0;\n  requestsWithErrorsCount = 0;\n\n  getChild(subPath: string, sizeEstimator: SizeEstimator): OurPathErrorStats {\n    const existing = this.children[subPath];\n    if (existing) {\n      return existing;\n    }\n    const child = new OurPathErrorStats();\n    this.children[subPath] = child;\n    // Include a few bytes in the estimate for the numbers etc.\n    sizeEstimator.bytes += estimatedBytesForString(subPath) + 4;\n    return child;\n  }\n}\n\nclass OurTypeStat implements Required<ITypeStat> {\n  perFieldStat: { [k: string]: OurFieldStat } = Object.create(null);\n\n  getFieldStat(\n    fieldName: string,\n    returnType: string,\n    sizeEstimator: SizeEstimator,\n  ): OurFieldStat {\n    const existing = this.perFieldStat[fieldName];\n    if (existing) {\n      return existing;\n    }\n    // Rough estimate of 10 bytes for the numbers in the FieldStat.\n    sizeEstimator.bytes +=\n      estimatedBytesForString(fieldName) +\n      estimatedBytesForString(returnType) +\n      10;\n    const fieldStat = new OurFieldStat(returnType);\n    this.perFieldStat[fieldName] = fieldStat;\n    return fieldStat;\n  }\n\n  ensureCountsAreIntegers() {\n    for (const fieldStat of Object.values(this.perFieldStat)) {\n      fieldStat.ensureCountsAreIntegers();\n    }\n  }\n}\n\nclass OurFieldStat implements Required<IFieldStat> {\n  errorsCount = 0;\n  observedExecutionCount = 0;\n  // Note that this number isn't necessarily an integer while it is being\n  // aggregated. Before encoding as a protobuf we call ensureCountsAreIntegers\n  // which floors it.\n  estimatedExecutionCount = 0;\n  requestsWithErrorsCount = 0;\n  latencyCount: DurationHistogram = new DurationHistogram();\n\n  constructor(readonly returnType: string) {}\n\n  ensureCountsAreIntegers() {\n    // This is the only one that ever can receive non-integers.\n    this.estimatedExecutionCount = Math.floor(this.estimatedExecutionCount);\n  }\n}\n\nfunction estimatedBytesForString(s: string) {\n  // 2 is for the tag (field ID + wire type) plus the encoded length. (The\n  // encoded length takes up more than 1 byte for strings that are longer than\n  // 127 bytes, but this is an estimate.)\n  return 2 + Buffer.byteLength(s);\n}\n /dist/esm/externalTypes/index.js,export {};\n//# sourceMappingURL=index.js.map./dist/esm/plugin/usageReporting/index.d.ts.map\u0001\u001a{\"version\":3,\"file\":\"index.d.ts\",\"sourceRoot\":\"\",\"sources\":[\"../../../../src/plugin/usageReporting/index.ts\"],\"names\":[],\"mappings\":\"AAAA,OAAO,EAAE,gCAAgC,EAAE,MAAM,aAAa,CAAC;AAC/D,YAAY,EACV,uCAAuC,EACvC,qBAAqB,EACrB,oBAAoB,EACpB,iBAAiB,EACjB,UAAU,EACV,kBAAkB,GACnB,MAAM,cAAc,CAAC\"}:/src/plugin/usageReporting/defaultSendOperationsAsTrace.ts\u000bimport LRUCache from 'lru-cache';\nimport type { Trace } from '@apollo/usage-reporting-protobuf';\nimport { iterateOverTrace } from './iterateOverTrace.js';\nimport { DurationHistogram } from './durationHistogram.js';\n\nexport function defaultSendOperationsAsTrace() {\n  // We keep an LRU cache mapping from a trace key (which consists of the\n  // operation as defined by statsReportKey, the rough duration of the\n  // operation, what minute the operation ended at, etc) to `true` if we've seen\n  // it recently. We actually split this into one cache per minute so we can\n  // throw away a full minute's worth of cache at once; we keep only the last\n  // three minutes.\n  // Note that if a trace is over a certain size, we will always send it as\n  // stats. We check this within the addTrace function of the OurReport class so\n  // that we don't have to encode these large traces twice.\n  const cache = new LRUCache<string, true>({\n    // 3MiB limit, very much approximately since we can't be sure how V8 might\n    // be storing these strings internally. Though this should be enough to\n    // store a fair amount of trace keys.\n\n    // A future version of this might expose some\n    // configuration option to grow the cache, but ideally, we could do that\n    // dynamically based on the resources available to the server, and not add\n    // more configuration surface area. Hopefully the warning message will allow\n    // us to evaluate the need with more validated input from those that receive\n    // it.\n    maxSize: Math.pow(2, 20),\n    sizeCalculation: (_val, key) => {\n      return (key && Buffer.byteLength(key)) || 0;\n    },\n  });\n\n  return (trace: Trace, statsReportKey: string): boolean => {\n    const endTimeSeconds = trace.endTime?.seconds;\n    if (endTimeSeconds == null) {\n      throw Error('programming error: endTime not set on trace');\n    }\n\n    const hasErrors = traceHasErrors(trace);\n    const cacheKey = JSON.stringify([\n      statsReportKey,\n      DurationHistogram.durationToBucket(trace.durationNs),\n      // What minute it started at\n      Math.floor(endTimeSeconds / 60),\n      // If the trace has an error, send one errored trace per 5 second interval\n      // instead of the normal minutely bucket a non-errored trace takes.\n      hasErrors ? Math.floor(endTimeSeconds / 5) : '',\n    ]);\n\n    // If we've already seen something roughly like this, don't send as a trace.\n    if (cache.get(cacheKey)) {\n      return false;\n    }\n\n    cache.set(cacheKey, true);\n    return true;\n  };\n}\n\n// Returns true if any node on the trace has errors. (If this ends up being a\n// hot spot, we can precalculate it in TraceTreeBuilder.)\nfunction traceHasErrors(trace: Trace): boolean {\n  let hasErrors = false;\n\n  function traceNodeStats(node: Trace.INode): boolean {\n    if ((node.error?.length ?? 0) > 0) {\n      hasErrors = true;\n    }\n    return hasErrors;\n  }\n\n  iterateOverTrace(trace, traceNodeStats, false);\n  return hasErrors;\n}\n$/src/plugin/usageReporting/plugin.tsňUimport { Report, ReportHeader, Trace } from '@apollo/usage-reporting-protobuf';\nimport type { Fetcher, FetcherResponse } from '@apollo/utils.fetcher';\nimport {\n  usageReportingSignature,\n  calculateReferencedFieldsByType,\n  ReferencedFieldsByType,\n} from '@apollo/utils.usagereporting';\nimport retry from 'async-retry';\nimport { GraphQLSchema, printSchema } from 'graphql';\nimport type LRUCache from 'lru-cache';\nimport { AbortController } from 'node-abort-controller';\nimport fetch from 'node-fetch';\nimport os from 'os';\nimport { promisify } from 'util';\nimport { gzip } from 'zlib';\nimport type {\n  ApolloServerPlugin,\n  BaseContext,\n  GraphQLRequestContext,\n  GraphQLRequestContextDidResolveOperation,\n  GraphQLRequestContextWillSendResponse,\n  GraphQLRequestListener,\n  GraphQLServerListener,\n} from '../../externalTypes/index.js';\nimport { internalPlugin } from '../../internalPlugin.js';\nimport { dateToProtoTimestamp, TraceTreeBuilder } from '../traceTreeBuilder.js';\nimport { defaultSendOperationsAsTrace } from './defaultSendOperationsAsTrace.js';\nimport {\n  createOperationDerivedDataCache,\n  OperationDerivedData,\n  operationDerivedDataCacheKey,\n} from './operationDerivedDataCache.js';\nimport type {\n  ApolloServerPluginUsageReportingOptions,\n  SendValuesBaseOptions,\n} from './options.js';\nimport { OurReport } from './stats.js';\nimport { makeTraceDetails } from './traceDetails.js';\nimport { packageVersion } from '../../generated/packageVersion.js';\nimport { computeCoreSchemaHash } from '../../utils/computeCoreSchemaHash.js';\nimport type { HeaderMap } from '../../utils/HeaderMap.js';\n\nconst gzipPromise = promisify(gzip);\n\nconst reportHeaderDefaults = {\n  hostname: os.hostname(),\n  agentVersion: `@apollo/server@${packageVersion}`,\n  runtimeVersion: `node ${process.version}`,\n  // XXX not actually uname, but what node has easily.\n  uname: `${os.platform()}, ${os.type()}, ${os.release()}, ${os.arch()})`,\n};\n\nexport function ApolloServerPluginUsageReporting<TContext extends BaseContext>(\n  options: ApolloServerPluginUsageReportingOptions<TContext> = Object.create(\n    null,\n  ),\n): ApolloServerPlugin<TContext> {\n  // Note: We'd like to change the default to false in Apollo Server 4, so that\n  // the default usage reporting experience doesn't include *anything* that\n  // could potentially be PII (like error messages) --- just operations and\n  // numbers.\n  const fieldLevelInstrumentationOption = options.fieldLevelInstrumentation;\n  const fieldLevelInstrumentation =\n    typeof fieldLevelInstrumentationOption === 'number'\n      ? async () =>\n          Math.random() < fieldLevelInstrumentationOption\n            ? 1 / fieldLevelInstrumentationOption\n            : 0\n      : fieldLevelInstrumentationOption\n      ? fieldLevelInstrumentationOption\n      : async () => true;\n\n  let requestDidStartHandler: (\n    requestContext: GraphQLRequestContext<TContext>,\n  ) => GraphQLRequestListener<TContext>;\n  return internalPlugin({\n    __internal_plugin_id__: 'UsageReporting',\n    __is_disabled_plugin__: false,\n\n    // We want to be able to access locals from `serverWillStart` in our `requestDidStart`, thus\n    // this little hack. (Perhaps we should also allow GraphQLServerListener to contain\n    // a requestDidStart?)\n    async requestDidStart(requestContext: GraphQLRequestContext<TContext>) {\n      if (!requestDidStartHandler) {\n        throw Error(\n          'The usage reporting plugin has been asked to handle a request before the ' +\n            'server has started. See https://github.com/apollographql/apollo-server/issues/4588 ' +\n            'for more details.',\n        );\n      }\n      return requestDidStartHandler(requestContext);\n    },\n\n    async serverWillStart({\n      logger: serverLogger,\n      apollo,\n      startedInBackground,\n    }): Promise<GraphQLServerListener> {\n      // Use the plugin-specific logger if one is provided; otherwise the general server one.\n      const logger = options.logger ?? serverLogger;\n      const { key, graphRef } = apollo;\n      if (!(key && graphRef)) {\n        throw new Error(\n          \"You've enabled usage reporting via ApolloServerPluginUsageReporting, \" +\n            'but you also need to provide your Apollo API key and graph ref, via ' +\n            'the APOLLO_KEY/APOLLO_GRAPH_REF environment ' +\n            'variables or via `new ApolloServer({apollo: {key, graphRef})`.',\n        );\n      }\n\n      logger.info(\n        'Apollo usage reporting starting! See your graph at ' +\n          `https://studio.apollographql.com/graph/${encodeURI(graphRef)}/`,\n      );\n\n      // If sendReportsImmediately is not specified, we default to true if we're running\n      // with the ApolloServer designed for Lambda or similar. That's because these\n      // environments aren't designed around letting us run a background task to\n      // send reports later or hook into container destruction to flush buffered reports.\n      const sendReportsImmediately =\n        options.sendReportsImmediately ?? startedInBackground;\n\n      // Since calculating the signature and referenced fields for usage\n      // reporting is potentially an expensive operation, we'll cache the data\n      // we generate and re-use them for repeated operations for the same\n      // `queryHash`. However, because referenced fields depend on the current\n      // schema, we want to throw it out entirely any time the schema changes.\n      let operationDerivedDataCache: {\n        forSchema: GraphQLSchema;\n        cache: LRUCache<string, OperationDerivedData>;\n      } | null = null;\n\n      // This map maps from executable schema ID (schema hash, basically) to the\n      // report we'll send about it. That's because when we're using a gateway,\n      // the schema can change over time, but each report needs to be about a\n      // single schema. We avoid having this function be a memory leak by\n      // removing values from it when we're in the process of sending reports.\n      // That means we have to be very careful never to pull a Report out of it\n      // and hang on to it for a while before writing to it, because the report\n      // might have gotten sent and discarded in the meantime. So you should\n      // only access the values of this Map via\n      // getReportWhichMustBeUsedImmediately and getAndDeleteReport, and never\n      // hang on to the value returned by getReportWhichMustBeUsedImmediately.\n      const reportByExecutableSchemaId = new Map<string, OurReport>();\n      const getReportWhichMustBeUsedImmediately = (\n        executableSchemaId: string,\n      ): OurReport => {\n        const existing = reportByExecutableSchemaId.get(executableSchemaId);\n        if (existing) {\n          return existing;\n        }\n        const report = new OurReport(\n          new ReportHeader({\n            ...reportHeaderDefaults,\n            executableSchemaId,\n            graphRef,\n          }),\n        );\n        reportByExecutableSchemaId.set(executableSchemaId, report);\n        return report;\n      };\n      const getAndDeleteReport = (\n        executableSchemaId: string,\n      ): OurReport | null => {\n        const report = reportByExecutableSchemaId.get(executableSchemaId);\n        if (report) {\n          reportByExecutableSchemaId.delete(executableSchemaId);\n          return report;\n        }\n        return null;\n      };\n\n      const overriddenExecutableSchemaId = options.overrideReportedSchema\n        ? computeCoreSchemaHash(options.overrideReportedSchema)\n        : undefined;\n\n      let lastSeenExecutableSchemaToId:\n        | {\n            executableSchema: GraphQLSchema;\n            executableSchemaId: string;\n          }\n        | undefined;\n\n      let reportTimer: NodeJS.Timer | undefined;\n      if (!sendReportsImmediately) {\n        reportTimer = setInterval(\n          () => sendAllReportsAndReportErrors(),\n          options.reportIntervalMs || 10 * 1000,\n        );\n      }\n\n      // We don't send traces if the user set `sendTraces: false`. We also may\n      // set this to false later if the usage-reporting ingress informs us that\n      // this graph does not support viewing traces.\n      let sendTraces = options.sendTraces ?? true;\n      const sendOperationAsTrace =\n        options.experimental_sendOperationAsTrace ??\n        defaultSendOperationsAsTrace();\n\n      let stopped = false;\n\n      function executableSchemaIdForSchema(schema: GraphQLSchema) {\n        if (lastSeenExecutableSchemaToId?.executableSchema === schema) {\n          return lastSeenExecutableSchemaToId.executableSchemaId;\n        }\n        const id = computeCoreSchemaHash(printSchema(schema));\n\n        // We override this variable every time we get a new schema so we cache\n        // the last seen value. It is a single-entry cache.\n        lastSeenExecutableSchemaToId = {\n          executableSchema: schema,\n          executableSchemaId: id,\n        };\n\n        return id;\n      }\n\n      async function sendAllReportsAndReportErrors(): Promise<void> {\n        await Promise.all(\n          [...reportByExecutableSchemaId.keys()].map((executableSchemaId) =>\n            sendReportAndReportErrors(executableSchemaId),\n          ),\n        );\n      }\n\n      async function sendReportAndReportErrors(\n        executableSchemaId: string,\n      ): Promise<void> {\n        return sendReport(executableSchemaId).catch((err) => {\n          // This catch block is primarily intended to catch network errors from\n          // the retried request itself, which include network errors and non-2xx\n          // HTTP errors.\n          if (options.reportErrorFunction) {\n            options.reportErrorFunction(err);\n          } else {\n            logger.error(err.message);\n          }\n        });\n      }\n\n      // Needs to be an arrow function to be confident that key is defined.\n      const sendReport = async (executableSchemaId: string): Promise<void> => {\n        let report = getAndDeleteReport(executableSchemaId);\n        if (\n          !report ||\n          (Object.keys(report.tracesPerQuery).length === 0 &&\n            report.operationCount === 0)\n        ) {\n          return;\n        }\n\n        // Set the report's overall end time. This is the timestamp that will be\n        // associated with the summarized statistics.\n        report.endTime = dateToProtoTimestamp(new Date());\n\n        report.ensureCountsAreIntegers();\n\n        const protobufError = Report.verify(report);\n        if (protobufError) {\n          throw new Error(`Error verifying report: ${protobufError}`);\n        }\n        let message: Uint8Array | null = Report.encode(report).finish();\n        // Let the original protobuf object be garbage collected (helpful if the\n        // HTTP request hangs).\n        report = null;\n\n        // Potential follow-up: we can compare message.length to\n        // report.sizeEstimator.bytes and use it to \"learn\" if our estimation is\n        // off and adjust it based on what we learn.\n\n        if (options.debugPrintReports) {\n          // We decode the report rather than printing the original `report`\n          // so that it includes all of the pre-encoded traces.\n          const decodedReport = Report.decode(message);\n          logger.info(\n            `Apollo usage report: ${JSON.stringify(decodedReport.toJSON())}`,\n          );\n        }\n\n        const compressed = await gzipPromise(message);\n        // Let the uncompressed message be garbage collected (helpful if the\n        // HTTP request is slow).\n        message = null;\n\n        // Wrap fetcher with async-retry for automatic retrying\n        const fetcher: Fetcher = options.fetcher ?? fetch;\n        const response: FetcherResponse = await retry(\n          // Retry on network errors and 5xx HTTP\n          // responses.\n          async () => {\n            // Note that once we require Node v16 we can use its global\n            // AbortController instead of the one from `node-abort-controller`.\n            const controller = new AbortController();\n            const abortTimeout = setTimeout(() => {\n              controller.abort();\n            }, options.requestTimeoutMs ?? 30_000);\n            let curResponse;\n            try {\n              curResponse = await fetcher(\n                (options.endpointUrl ||\n                  'https://usage-reporting.api.apollographql.com') +\n                  '/api/ingress/traces',\n                {\n                  method: 'POST',\n                  headers: {\n                    'user-agent': 'ApolloServerPluginUsageReporting',\n                    'x-api-key': key,\n                    'content-encoding': 'gzip',\n                    accept: 'application/json',\n                  },\n                  body: compressed,\n                  signal: controller.signal,\n                },\n              );\n            } finally {\n              clearTimeout(abortTimeout);\n            }\n\n            if (curResponse.status >= 500 && curResponse.status < 600) {\n              throw new Error(\n                `HTTP status ${curResponse.status}, ${\n                  (await curResponse.text()) || '(no body)'\n                }`,\n              );\n            } else {\n              return curResponse;\n            }\n          },\n          {\n            retries: (options.maxAttempts || 5) - 1,\n            minTimeout: options.minimumRetryDelayMs || 100,\n            factor: 2,\n          },\n        ).catch((err: Error) => {\n          throw new Error(\n            `Error sending report to Apollo servers: ${err.message}`,\n          );\n        });\n\n        if (response.status < 200 || response.status >= 300) {\n          // Note that we don't expect to see a 3xx here because request follows\n          // redirects.\n          throw new Error(\n            `Error sending report to Apollo servers: HTTP status ${\n              response.status\n            }, ${(await response.text()) || '(no body)'}`,\n          );\n        }\n\n        if (\n          sendTraces &&\n          response.status === 200 &&\n          response.headers\n            .get('content-type')\n            ?.match(/^\\s*application\\/json\\s*(?:;|$)/i)\n        ) {\n          const body = await response.text();\n          let parsedBody;\n          try {\n            parsedBody = JSON.parse(body);\n          } catch (e) {\n            throw new Error(`Error parsing response from Apollo servers: ${e}`);\n          }\n          if (parsedBody.tracesIgnored === true) {\n            logger.debug(\n              \"This graph's organization does not have access to traces; sending all \" +\n                'subsequent operations as stats.',\n            );\n            sendTraces = false;\n          }\n        }\n        if (options.debugPrintReports) {\n          logger.info(`Apollo usage report: status ${response.status}`);\n        }\n      };\n\n      requestDidStartHandler = ({\n        metrics,\n        schema,\n        request: { http, variables },\n      }): GraphQLRequestListener<TContext> => {\n        const treeBuilder: TraceTreeBuilder = new TraceTreeBuilder({\n          maskedBy: 'ApolloServerPluginUsageReporting',\n          sendErrors: options.sendErrors,\n          logger,\n        });\n        treeBuilder.startTiming();\n        metrics.startHrTime = treeBuilder.startHrTime;\n        let graphqlValidationFailure = false;\n        let graphqlUnknownOperationName = false;\n        let includeOperationInUsageReporting: boolean | null = null;\n\n        if (http) {\n          treeBuilder.trace.http = new Trace.HTTP({\n            method:\n              Trace.HTTP.Method[\n                http.method as keyof typeof Trace.HTTP.Method\n              ] || Trace.HTTP.Method.UNKNOWN,\n            // Host and path are not used anywhere on the backend, so let's not bother\n            // trying to parse request.url to get them, which is a potential\n            // source of bugs because integrations have different behavior here.\n            // On Node's HTTP module, request.url only includes the path\n            // (see https://nodejs.org/api/http.html#http_message_url)\n            // The same is true on Lambda (where we pass event.path)\n            // But on environments like Cloudflare we do get a complete URL.\n            host: null,\n            path: null,\n          });\n\n          if (options.sendHeaders) {\n            makeHTTPRequestHeaders(\n              treeBuilder.trace.http,\n              http.headers,\n              options.sendHeaders,\n            );\n          }\n        }\n\n        // After this function completes, includeOperationInUsageReporting is\n        // defined.\n        async function maybeCallIncludeRequestHook(\n          requestContext:\n            | GraphQLRequestContextDidResolveOperation<TContext>\n            | GraphQLRequestContextWillSendResponse<TContext>,\n        ): Promise<void> {\n          // If this is the second call in `willSendResponse` after\n          // `didResolveOperation`, we're done.\n          if (includeOperationInUsageReporting !== null) return;\n\n          if (typeof options.includeRequest !== 'function') {\n            // Default case we always report\n            includeOperationInUsageReporting = true;\n            return;\n          }\n          includeOperationInUsageReporting = await options.includeRequest(\n            requestContext,\n          );\n\n          // Help the user understand they've returned an unexpected value,\n          // which might be a subtle mistake.\n          if (typeof includeOperationInUsageReporting !== 'boolean') {\n            logger.warn(\n              \"The 'includeRequest' async predicate function must return a boolean value.\",\n            );\n            includeOperationInUsageReporting = true;\n          }\n        }\n\n        // Our usage reporting groups everything by operation, so we don't\n        // actually report about any issues that prevent us from getting an\n        // operation string (eg, a missing operation, or APQ problems).\n        // This is effectively bypassing the reporting of:\n        //   - PersistedQueryNotFoundError\n        //   - PersistedQueryNotSupportedError\n        //   - Missing `query` error\n        // We may want to report them some other way later!\n        let didResolveSource = false;\n\n        return {\n          async didResolveSource(requestContext) {\n            didResolveSource = true;\n\n            if (metrics.persistedQueryHit) {\n              treeBuilder.trace.persistedQueryHit = true;\n            }\n            if (metrics.persistedQueryRegister) {\n              treeBuilder.trace.persistedQueryRegister = true;\n            }\n\n            if (variables) {\n              treeBuilder.trace.details = makeTraceDetails(\n                variables,\n                options.sendVariableValues,\n                requestContext.source,\n              );\n            }\n\n            const clientInfo = (\n              options.generateClientInfo || defaultGenerateClientInfo\n            )(requestContext);\n            if (clientInfo) {\n              // While there is a clientAddress protobuf field, the backend\n              // doesn't pay attention to it yet, so we'll ignore it for now.\n              const { clientName, clientVersion } = clientInfo;\n              treeBuilder.trace.clientVersion = clientVersion || '';\n              treeBuilder.trace.clientName = clientName || '';\n            }\n          },\n          async validationDidStart() {\n            return async (validationErrors?: ReadonlyArray<Error>) => {\n              graphqlValidationFailure = validationErrors\n                ? validationErrors.length !== 0\n                : false;\n            };\n          },\n          async didResolveOperation(requestContext) {\n            // If operation is undefined then `getOperationAST` returned null\n            // and an unknown operation was specified.\n            graphqlUnknownOperationName =\n              requestContext.operation === undefined;\n            await maybeCallIncludeRequestHook(requestContext);\n\n            if (\n              includeOperationInUsageReporting &&\n              // No need to capture traces if the operation is going to\n              // immediately fail due to unknown operation name.\n              !graphqlUnknownOperationName\n            ) {\n              if (metrics.captureTraces === undefined) {\n                // We're not completely ignoring the operation. But should we\n                // calculate a detailed trace of every field while we do so (either\n                // directly in this plugin, or in a subgraph by sending the\n                // apollo-federation-include-trace header)? That will allow this\n                // operation to contribute to the \"field executions\" column in the\n                // Studio Fields page, to the timing hints in Explorer and\n                // vscode-graphql, and to the traces visible under Operations. (Note\n                // that `true` here does not imply that this operation will\n                // necessarily be *sent* to the usage-reporting endpoint in the form\n                // of a trace --- it still might be aggregated into stats first. But\n                // capturing a trace will mean we can understand exactly what fields\n                // were executed and what their performance was, at the tradeoff of\n                // some overhead for tracking the trace (and transmitting it between\n                // subgraph and gateway).\n                const rawWeight = await fieldLevelInstrumentation(\n                  requestContext,\n                );\n                treeBuilder.trace.fieldExecutionWeight =\n                  typeof rawWeight === 'number' ? rawWeight : rawWeight ? 1 : 0;\n\n                metrics.captureTraces =\n                  !!treeBuilder.trace.fieldExecutionWeight;\n              }\n            }\n          },\n          async executionDidStart() {\n            // If we're not capturing traces, don't return a willResolveField so\n            // that we don't build up a detailed trace inside treeBuilder. (We still\n            // will use treeBuilder as a convenient place to put top-level facts\n            // about the operation which can end up aggregated as stats, and we do\n            // eventually put *errors* onto the trace tree.)\n            if (!metrics.captureTraces) return;\n\n            return {\n              willResolveField({ info }) {\n                return treeBuilder.willResolveField(info);\n                // We could save the error into the trace during the end handler, but\n                // it won't have all the information that graphql-js adds to it later,\n                // like 'locations'.\n              },\n            };\n          },\n\n          async didEncounterSubsequentErrors(_requestContext, errors) {\n            treeBuilder.didEncounterErrors(errors);\n          },\n\n          async willSendSubsequentPayload(requestContext, payload) {\n            if (!payload.hasNext) {\n              await operationFinished(requestContext);\n            }\n          },\n\n          async willSendResponse(requestContext) {\n            // Search above for a comment about \"didResolveSource\" to see which\n            // of the pre-source-resolution errors we are intentionally avoiding.\n            if (!didResolveSource) return;\n            if (requestContext.errors) {\n              treeBuilder.didEncounterErrors(requestContext.errors);\n            }\n\n            // If there isn't any defer/stream coming later, we're done.\n            // Otherwise willSendSubsequentPayload will trigger\n            // operationFinished.\n            if (requestContext.response.body.kind === 'single') {\n              await operationFinished(requestContext);\n            }\n          },\n        };\n\n        async function operationFinished(\n          requestContext: GraphQLRequestContextWillSendResponse<TContext>,\n        ) {\n          const resolvedOperation = !!requestContext.operation;\n\n          // If we got an error before we called didResolveOperation (eg parse or\n          // validation error), check to see if we should include the request.\n          await maybeCallIncludeRequestHook(requestContext);\n\n          treeBuilder.stopTiming();\n          const executableSchemaId =\n            overriddenExecutableSchemaId ?? executableSchemaIdForSchema(schema);\n\n          if (includeOperationInUsageReporting === false) {\n            if (resolvedOperation) {\n              getReportWhichMustBeUsedImmediately(executableSchemaId)\n                .operationCount++;\n            }\n            return;\n          }\n\n          treeBuilder.trace.fullQueryCacheHit = !!metrics.responseCacheHit;\n          treeBuilder.trace.forbiddenOperation = !!metrics.forbiddenOperation;\n          treeBuilder.trace.registeredOperation = !!metrics.registeredOperation;\n\n          const policyIfCacheable =\n            requestContext.overallCachePolicy.policyIfCacheable();\n          if (policyIfCacheable) {\n            treeBuilder.trace.cachePolicy = new Trace.CachePolicy({\n              scope:\n                policyIfCacheable.scope === 'PRIVATE'\n                  ? Trace.CachePolicy.Scope.PRIVATE\n                  : policyIfCacheable.scope === 'PUBLIC'\n                  ? Trace.CachePolicy.Scope.PUBLIC\n                  : Trace.CachePolicy.Scope.UNKNOWN,\n              // Convert from seconds to ns.\n              maxAgeNs: policyIfCacheable.maxAge * 1e9,\n            });\n          }\n\n          // If this was a federated operation and we're the gateway, add the query plan\n          // to the trace.\n          if (metrics.queryPlanTrace) {\n            treeBuilder.trace.queryPlan = metrics.queryPlanTrace;\n          }\n\n          // Intentionally un-awaited so as not to block the response.  Any\n          // errors will be logged, but will not manifest a user-facing error.\n          // The logger in this case is a request specific logger OR the logger\n          // defined by the plugin if that's unavailable.  The request-specific\n          // logger is preferred since this is very much coupled directly to a\n          // client-triggered action which might be more granularly tagged by\n          // logging implementations.\n          addTrace().catch(logger.error);\n\n          async function addTrace(): Promise<void> {\n            // Ignore traces that come in after stop().\n            if (stopped) {\n              return;\n            }\n\n            // Ensure that the caller of addTrace (which does not await it) is\n            // not blocked. We use setImmediate rather than process.nextTick or\n            // just relying on the Promise microtask queue because setImmediate\n            // comes after IO, which is what we want.\n            await new Promise((res) => setImmediate(res));\n\n            const executableSchemaId =\n              overriddenExecutableSchemaId ??\n              executableSchemaIdForSchema(schema);\n\n            const { trace } = treeBuilder;\n\n            let statsReportKey: string | undefined = undefined;\n            let referencedFieldsByType: ReferencedFieldsByType;\n            if (!requestContext.document) {\n              statsReportKey = `## GraphQLParseFailure\\n`;\n            } else if (graphqlValidationFailure) {\n              statsReportKey = `## GraphQLValidationFailure\\n`;\n            } else if (graphqlUnknownOperationName) {\n              statsReportKey = `## GraphQLUnknownOperationName\\n`;\n            }\n\n            const isExecutable = statsReportKey === undefined;\n\n            if (statsReportKey) {\n              if (options.sendUnexecutableOperationDocuments) {\n                trace.unexecutedOperationBody = requestContext.source;\n                // Get the operation name from the request (which might not\n                // correspond to an actual operation).\n                trace.unexecutedOperationName =\n                  requestContext.request.operationName || '';\n              }\n              referencedFieldsByType = Object.create(null);\n            } else {\n              const operationDerivedData = getOperationDerivedData();\n              statsReportKey = `# ${requestContext.operationName || '-'}\\n${\n                operationDerivedData.signature\n              }`;\n              referencedFieldsByType =\n                operationDerivedData.referencedFieldsByType;\n            }\n\n            const protobufError = Trace.verify(trace);\n            if (protobufError) {\n              throw new Error(`Error encoding trace: ${protobufError}`);\n            }\n\n            if (resolvedOperation) {\n              getReportWhichMustBeUsedImmediately(executableSchemaId)\n                .operationCount++;\n            }\n\n            getReportWhichMustBeUsedImmediately(executableSchemaId).addTrace({\n              statsReportKey,\n              trace,\n              // We include the operation as a trace (rather than aggregated\n              // into stats) only if the user didn't set `sendTraces: false`\n              // *and* we believe it's possible that our organization's plan\n              // allows for viewing traces *and* we actually captured this as\n              // a full trace *and* sendOperationAsTrace says so.\n              //\n              // (As an edge case, if the reason metrics.captureTraces is\n              // falsey is that this is an unexecutable operation and thus we\n              // never ran the code in didResolveOperation that sets\n              // metrics.captureTrace, we allow it to be sent as a trace. This\n              // means we'll still send some parse and validation failures as\n              // traces, for the sake of the Errors page.)\n              asTrace:\n                sendTraces &&\n                (!isExecutable || !!metrics.captureTraces) &&\n                sendOperationAsTrace(trace, statsReportKey),\n              referencedFieldsByType,\n            });\n\n            // If the buffer gets big (according to our estimate), send.\n            if (\n              sendReportsImmediately ||\n              getReportWhichMustBeUsedImmediately(executableSchemaId)\n                .sizeEstimator.bytes >=\n                (options.maxUncompressedReportSize || 4 * 1024 * 1024)\n            ) {\n              await sendReportAndReportErrors(executableSchemaId);\n            }\n          }\n\n          // Calculates signature and referenced fields for the current document.\n          // Only call this when the document properly parses and validates and\n          // the given operation name (if any) is known!\n          function getOperationDerivedData(): OperationDerivedData {\n            if (!requestContext.document) {\n              // This shouldn't happen: no document means parse failure, which\n              // uses its own special statsReportKey.\n              throw new Error('No document?');\n            }\n\n            const cacheKey = operationDerivedDataCacheKey(\n              requestContext.queryHash,\n              requestContext.operationName || '',\n            );\n\n            // Ensure that the cache we have is for the right schema.\n            if (\n              !operationDerivedDataCache ||\n              operationDerivedDataCache.forSchema !== schema\n            ) {\n              operationDerivedDataCache = {\n                forSchema: schema,\n                cache: createOperationDerivedDataCache({ logger }),\n              };\n            }\n\n            // If we didn't have the signature in the cache, we'll resort to\n            // calculating it.\n            const cachedOperationDerivedData =\n              operationDerivedDataCache.cache.get(cacheKey);\n            if (cachedOperationDerivedData) {\n              return cachedOperationDerivedData;\n            }\n\n            const generatedSignature = (\n              options.calculateSignature || usageReportingSignature\n            )(requestContext.document, requestContext.operationName || '');\n\n            const generatedOperationDerivedData: OperationDerivedData = {\n              signature: generatedSignature,\n              referencedFieldsByType: calculateReferencedFieldsByType({\n                document: requestContext.document,\n                schema,\n                resolvedOperationName: requestContext.operationName ?? null,\n              }),\n            };\n\n            // Note that this cache is always an in-memory cache.\n            // If we replace it with a more generic async cache, we should\n            // not await the write operation.\n            operationDerivedDataCache.cache.set(\n              cacheKey,\n              generatedOperationDerivedData,\n            );\n            return generatedOperationDerivedData;\n          }\n        }\n      };\n\n      return {\n        async serverWillStop() {\n          if (reportTimer) {\n            clearInterval(reportTimer);\n            reportTimer = undefined;\n          }\n\n          stopped = true;\n          await sendAllReportsAndReportErrors();\n        },\n      };\n    },\n  });\n}\n\nexport function makeHTTPRequestHeaders(\n  http: Trace.IHTTP,\n  headers: HeaderMap,\n  sendHeaders?: SendValuesBaseOptions,\n): void {\n  if (\n    !sendHeaders ||\n    ('none' in sendHeaders && sendHeaders.none) ||\n    ('all' in sendHeaders && !sendHeaders.all)\n  ) {\n    return;\n  }\n  for (const [key, value] of headers) {\n    // Note that HeaderMap keys are already lower-case.\n    if (\n      ('exceptNames' in sendHeaders &&\n        // We assume that most users only have a few headers to hide, or will\n        // just set {none: true} ; we can change this linear-time\n        // operation if it causes real performance issues.\n        sendHeaders.exceptNames.some((exceptHeader) => {\n          // Headers are case-insensitive, and should be compared as such.\n          return exceptHeader.toLowerCase() === key;\n        })) ||\n      ('onlyNames' in sendHeaders &&\n        !sendHeaders.onlyNames.some((header) => {\n          return header.toLowerCase() === key;\n        }))\n    ) {\n      continue;\n    }\n\n    switch (key) {\n      case 'authorization':\n      case 'cookie':\n      case 'set-cookie':\n        break;\n      default:\n        http!.requestHeaders![key] = new Trace.HTTP.Values({\n          value: [value],\n        });\n    }\n  }\n}\n\nfunction defaultGenerateClientInfo<TContext extends BaseContext>({\n  request,\n}: GraphQLRequestContext<TContext>) {\n  const clientNameHeaderKey = 'apollographql-client-name';\n  const clientVersionHeaderKey = 'apollographql-client-version';\n\n  // Default to using the `apollo-client-x` header fields if present.\n  // If none are present, fallback on the `clientInfo` query extension\n  // for backwards compatibility.\n  // The default value if neither header values nor query extension is\n  // set is the empty String for all fields (as per protobuf defaults)\n  if (\n    request.http?.headers?.get(clientNameHeaderKey) ||\n    request.http?.headers?.get(clientVersionHeaderKey)\n  ) {\n    return {\n      clientName: request.http?.headers?.get(clientNameHeaderKey),\n      clientVersion: request.http?.headers?.get(clientVersionHeaderKey),\n    };\n  } else if (request.extensions?.clientInfo) {\n    return request.extensions.clientInfo;\n  } else {\n    return {};\n  }\n}\n/plugin/disabled/package.json{\n  \"name\": \"@apollo/server/plugin/disabled\",\n  \"type\": \"module\",\n  \"main\": \"../../dist/cjs/plugin/disabled/index.js\",\n  \"module\": \"../../dist/esm/plugin/disabled/index.js\",\n  \"types\": \"../../dist/esm/plugin/disabled/index.d.ts\",\n  \"sideEffects\": false\n}\n</dist/esm/plugin/usageReporting/operationDerivedDataCache.js\u0004import LRUCache from 'lru-cache';\nexport function createOperationDerivedDataCache({ logger, }) {\n    let lastWarn;\n    let lastDisposals = 0;\n    return new LRUCache({\n        sizeCalculation(obj) {\n            return Buffer.byteLength(JSON.stringify(obj), 'utf8');\n        },\n        maxSize: Math.pow(2, 20) * 10,\n        dispose() {\n            lastDisposals++;\n            if (!lastWarn || new Date().getTime() - lastWarn.getTime() > 60000) {\n                lastWarn = new Date();\n                logger.warn([\n                    'This server is processing a high number of unique operations.  ',\n                    `A total of ${lastDisposals} records have been `,\n                    'ejected from the ApolloServerPluginUsageReporting signature cache in the past ',\n                    'interval.  If you see this warning frequently, please open an ',\n                    'issue on the Apollo Server repository.',\n                ].join(''));\n                lastDisposals = 0;\n            }\n        },\n    });\n}\nexport function operationDerivedDataCacheKey(queryHash, operationName) {\n    return `${queryHash}${operationName && ':' + operationName}`;\n}\n//# sourceMappingURL=operationDerivedDataCache.js.map/dist/esm/cachePolicy.js\u0003export function newCachePolicy() {\n    return {\n        maxAge: undefined,\n        scope: undefined,\n        restrict(hint) {\n            if (hint.maxAge !== undefined &&\n                (this.maxAge === undefined || hint.maxAge < this.maxAge)) {\n                this.maxAge = hint.maxAge;\n            }\n            if (hint.scope !== undefined && this.scope !== 'PRIVATE') {\n                this.scope = hint.scope;\n            }\n        },\n        replace(hint) {\n            if (hint.maxAge !== undefined) {\n                this.maxAge = hint.maxAge;\n            }\n            if (hint.scope !== undefined) {\n                this.scope = hint.scope;\n            }\n        },\n        policyIfCacheable() {\n            if (this.maxAge === undefined || this.maxAge === 0) {\n                return null;\n            }\n            return { maxAge: this.maxAge, scope: this.scope ?? 'PUBLIC' };\n        },\n    };\n}\n//# sourceMappingURL=cachePolicy.js.map//dist/esm/plugin/usageReporting/traceDetails.js\t import { Trace } from '@apollo/usage-reporting-protobuf';\nexport function makeTraceDetails(variables, sendVariableValues, operationString) {\n    const details = new Trace.Details();\n    const variablesToRecord = (() => {\n        if (sendVariableValues && 'transform' in sendVariableValues) {\n            const originalKeys = Object.keys(variables);\n            try {\n                const modifiedVariables = sendVariableValues.transform({\n                    variables: variables,\n                    operationString: operationString,\n                });\n                return cleanModifiedVariables(originalKeys, modifiedVariables);\n            }\n            catch (e) {\n                return handleVariableValueTransformError(originalKeys);\n            }\n        }\n        else {\n            return variables;\n        }\n    })();\n    Object.keys(variablesToRecord).forEach((name) => {\n        if (!sendVariableValues ||\n            ('none' in sendVariableValues && sendVariableValues.none) ||\n            ('all' in sendVariableValues && !sendVariableValues.all) ||\n            ('exceptNames' in sendVariableValues &&\n                sendVariableValues.exceptNames.includes(name)) ||\n            ('onlyNames' in sendVariableValues &&\n                !sendVariableValues.onlyNames.includes(name))) {\n            details.variablesJson[name] = '';\n        }\n        else {\n            try {\n                details.variablesJson[name] =\n                    typeof variablesToRecord[name] === 'undefined'\n                        ? ''\n                        : JSON.stringify(variablesToRecord[name]);\n            }\n            catch (e) {\n                details.variablesJson[name] = JSON.stringify('[Unable to convert value to JSON]');\n            }\n        }\n    });\n    return details;\n}\nfunction handleVariableValueTransformError(variableNames) {\n    const modifiedVariables = Object.create(null);\n    variableNames.forEach((name) => {\n        modifiedVariables[name] = '[PREDICATE_FUNCTION_ERROR]';\n    });\n    return modifiedVariables;\n}\nfunction cleanModifiedVariables(originalKeys, modifiedVariables) {\n    const cleanedVariables = Object.create(null);\n    originalKeys.forEach((name) => {\n        cleanedVariables[name] = modifiedVariables[name];\n    });\n    return cleanedVariables;\n}\n//# sourceMappingURL=traceDetails.js.map*/dist/cjs/plugin/cacheControl/index.js.map\u001c+{\"version\":3,\"file\":\"index.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../../src/plugin/cacheControl/index.ts\"],\"names\":[],\"mappings\":\"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\"}6/dist/esm/plugin/schemaReporting/schemaReporter.js.map\u000e\b{\"version\":3,\"file\":\"schemaReporter.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../../src/plugin/schemaReporting/schemaReporter.ts\"],\"names\":[],\"mappings\":\"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\"}1/dist/cjs/plugin/landingPage/default/index.js.map\u0006\u0000{\"version\":3,\"file\":\"index.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../../../src/plugin/landingPage/default/index.ts\"],\"names\":[],\"mappings\":\";;;AAUA,6DAG8B;AAO9B,SAAgB,yCAAyC,CACvD,UAA4D,EAAE;IAE9D,MAAM,EAAE,OAAO,EAAE,4BAA4B,EAAE,GAAG,IAAI,EAAE,GAAG;QAEzD,KAAK,EAAE,IAAa;QACpB,GAAG,OAAO;KACX,CAAC;IACF,OAAO,oCAAoC,CAAC,OAAO,EAAE;QACnD,MAAM,EAAE,KAAK;QACb,eAAe,EAAE,4BAA4B;QAC7C,GAAG,IAAI;KACR,CAAC,CAAC;AACL,CAAC;AAbD,8FAaC;AAED,SAAgB,8CAA8C,CAC5D,UAAiE,EAAE;IAEnE,MAAM,EAAE,OAAO,EAAE,4BAA4B,EAAE,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC;IACnE,OAAO,oCAAoC,CAAC,OAAO,EAAE;QACnD,MAAM,EAAE,IAAI;QACZ,eAAe,EAAE,4BAA4B;QAC7C,GAAG,IAAI;KACR,CAAC,CAAC;AACL,CAAC;AATD,wGASC;AAUD,SAAS,YAAY,CAAC,MAAyB;IAC7C,OAAO,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACpE,CAAC;AAED,MAAM,6BAA6B,GAAG,CACpC,OAAe,EACf,MAAyB,EACzB,EAAE;IACF,MAAM,aAAa,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IAE3C,OAAO;;;;;+BAKsB,aAAa;wEAC4B,OAAO,+BAA+B,CAAC;AAC/G,CAAC,CAAC;AAGF,SAAS,oCAAoC,CAC3C,YAAgC,EAChC,MAGC;IAED,MAAM,OAAO,GAAG,YAAY,IAAI,SAAS,CAAC;IAE1C,OAAO;QACL,iCAAiC,EAAE,KAAK;QACxC,KAAK,CAAC,eAAe;YACnB,OAAO;gBACL,KAAK,CAAC,iBAAiB;oBACrB,MAAM,IAAI,GAAG;;;;;;;uEAOgD,OAAO;;;;;;;;;;;;uEAYP,OAAO;;;;uEAIP,OAAO;;;;;;;;;;;;;;;;;;;;MAqBxE,MAAM,CAAC,KAAK;wBACV,CAAC,CAAC,UAAU,IAAI,MAAM,IAAI,MAAM,CAAC,QAAQ;4BACvC,CAAC,CAAC,IAAA,4CAAuB,EAAC,OAAO,EAAE,MAAM,CAAC;4BAC1C,CAAC,CAAC,IAAA,2CAAsB,EAAC,OAAO,EAAE,MAAM,CAAC;wBAC3C,CAAC,CAAC,6BAA6B,CAAC,OAAO,EAAE,MAAM,CACnD;;;;WAIO,CAAC;oBACF,OAAO,EAAE,IAAI,EAAE,CAAC;gBAClB,CAAC;aACF,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC\"}&/dist/cjs/plugin/disabled/index.js.map\u0002{\"version\":3,\"file\":\"index.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../../src/plugin/disabled/index.ts\"],\"names\":[],\"mappings\":\";;;AAcA,SAAS,cAAc,CAAC,EAAoB;IAC1C,MAAM,MAAM,GAA4C;QACtD,sBAAsB,EAAE,EAAE;QAC1B,sBAAsB,EAAE,IAAI;KAC7B,CAAC;IACF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAgB,sCAAsC;IACpD,OAAO,cAAc,CAAC,cAAc,CAAC,CAAC;AACxC,CAAC;AAFD,wFAEC;AAED,SAAgB,qCAAqC;IACnD,OAAO,cAAc,CAAC,aAAa,CAAC,CAAC;AACvC,CAAC;AAFD,sFAEC;AAED,SAAgB,qCAAqC;IACnD,OAAO,cAAc,CAAC,qBAAqB,CAAC,CAAC;AAC/C,CAAC;AAFD,sFAEC;AAED,SAAgB,yCAAyC;IACvD,OAAO,cAAc,CAAC,iBAAiB,CAAC,CAAC;AAC3C,CAAC;AAFD,8FAEC;AAED,SAAgB,wCAAwC;IACtD,OAAO,cAAc,CAAC,gBAAgB,CAAC,CAAC;AAC1C,CAAC;AAFD,4FAEC\"}8/dist/esm/plugin/schemaReporting/schemaReporter.d.ts.map\u0004L{\"version\":3,\"file\":\"schemaReporter.d.ts\",\"sourceRoot\":\"\",\"sources\":[\"../../../../src/plugin/schemaReporting/schemaReporter.ts\"],\"names\":[],\"mappings\":\"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,KAAK,EACV,YAAY,EAGZ,oBAAoB,EACrB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAGrD,eAAO,MAAM,eAAe,kTAa3B,CAAC;AAGF,qBAAa,cAAc;IAEzB,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAAS;IACnD,OAAO,CAAC,QAAQ,CAAC,0BAA0B,CAAS;IACpD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAElC,OAAO,CAAC,SAAS,CAAU;IAC3B,OAAO,CAAC,SAAS,CAAC,CAAe;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyB;gBAErC,OAAO,EAAE;QACnB,YAAY,EAAE,YAAY,CAAC;QAC3B,UAAU,EAAE,MAAM,CAAC;QACnB,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;QAChC,MAAM,EAAE,MAAM,CAAC;QACf,yBAAyB,EAAE,MAAM,CAAC;QAClC,0BAA0B,EAAE,MAAM,CAAC;QACnC,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB;IAqBM,OAAO,IAAI,OAAO;IAIlB,KAAK;IAOL,IAAI;YAQG,4BAA4B;IAiC7B,YAAY,CACvB,cAAc,EAAE,OAAO,GACtB,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC;YAwCzB,WAAW;CAsC1B\"}/dist/esm/requestPipeline.d.ts\u0002import type { GraphQLRequestContext, BaseContext, GraphQLResponse } from './externalTypes/index.js';\nimport type { ApolloServer, ApolloServerInternals, SchemaDerivedData } from './ApolloServer.js';\nexport declare const APQ_CACHE_PREFIX = \"apq:\";\ndeclare type Mutable<T> = {\n    -readonly [P in keyof T]: T[P];\n};\nexport declare function processGraphQLRequest<TContext extends BaseContext>(schemaDerivedData: SchemaDerivedData, server: ApolloServer<TContext>, internals: ApolloServerInternals<TContext>, requestContext: Mutable<GraphQLRequestContext<TContext>>): Promise<GraphQLResponse>;\nexport {};\n//# sourceMappingURL=requestPipeline.d.ts.map+/dist/esm/plugin/schemaIsFederated.d.ts.map{\"version\":3,\"file\":\"schemaIsFederated.d.ts\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/plugin/schemaIsFederated.ts\"],\"names\":[],\"mappings\":\"AAAA,OAAO,EAAE,aAAa,EAA8B,MAAM,SAAS,CAAC;AAkBpE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAchE\"}1/dist/esm/plugin/landingPage/default/index.js.map\u0006\u0013{\"version\":3,\"file\":\"index.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../../../src/plugin/landingPage/default/index.ts\"],\"names\":[],\"mappings\":\"AAUA,OAAO,EACL,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,sBAAsB,CAAC;AAO9B,MAAM,UAAU,yCAAyC,CACvD,UAA4D,EAAE;IAE9D,MAAM,EAAE,OAAO,EAAE,4BAA4B,EAAE,GAAG,IAAI,EAAE,GAAG;QAEzD,KAAK,EAAE,IAAa;QACpB,GAAG,OAAO;KACX,CAAC;IACF,OAAO,oCAAoC,CAAC,OAAO,EAAE;QACnD,MAAM,EAAE,KAAK;QACb,eAAe,EAAE,4BAA4B;QAC7C,GAAG,IAAI;KACR,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,8CAA8C,CAC5D,UAAiE,EAAE;IAEnE,MAAM,EAAE,OAAO,EAAE,4BAA4B,EAAE,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC;IACnE,OAAO,oCAAoC,CAAC,OAAO,EAAE;QACnD,MAAM,EAAE,IAAI;QACZ,eAAe,EAAE,4BAA4B;QAC7C,GAAG,IAAI;KACR,CAAC,CAAC;AACL,CAAC;AAUD,SAAS,YAAY,CAAC,MAAyB;IAC7C,OAAO,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACpE,CAAC;AAED,MAAM,6BAA6B,GAAG,CACpC,OAAe,EACf,MAAyB,EACzB,EAAE;IACF,MAAM,aAAa,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IAE3C,OAAO;;;;;+BAKsB,aAAa;wEAC4B,OAAO,+BAA+B,CAAC;AAC/G,CAAC,CAAC;AAGF,SAAS,oCAAoC,CAC3C,YAAgC,EAChC,MAGC;IAED,MAAM,OAAO,GAAG,YAAY,IAAI,SAAS,CAAC;IAE1C,OAAO;QACL,iCAAiC,EAAE,KAAK;QACxC,KAAK,CAAC,eAAe;YACnB,OAAO;gBACL,KAAK,CAAC,iBAAiB;oBACrB,MAAM,IAAI,GAAG;;;;;;;uEAOgD,OAAO;;;;;;;;;;;;uEAYP,OAAO;;;;uEAIP,OAAO;;;;;;;;;;;;;;;;;;;;MAqBxE,MAAM,CAAC,KAAK;wBACV,CAAC,CAAC,UAAU,IAAI,MAAM,IAAI,MAAM,CAAC,QAAQ;4BACvC,CAAC,CAAC,uBAAuB,CAAC,OAAO,EAAE,MAAM,CAAC;4BAC1C,CAAC,CAAC,sBAAsB,CAAC,OAAO,EAAE,MAAM,CAAC;wBAC3C,CAAC,CAAC,6BAA6B,CAAC,OAAO,EAAE,MAAM,CACnD;;;;WAIO,CAAC;oBACF,OAAO,EAAE,IAAI,EAAE,CAAC;gBAClB,CAAC;aACF,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC\"}/src/index.tsĹexport { ApolloServer } from './ApolloServer.js';\nexport { HeaderMap } from './utils/HeaderMap.js';\n// Note that this is purely a type export.\nexport * from './externalTypes/index.js';\n-/dist/cjs/plugin/drainHttpServer/stoppable.js\b\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Stopper = void 0;\nconst https_1 = __importDefault(require(\"https\"));\nclass Stopper {\n    constructor(server) {\n        this.server = server;\n        this.requestCountPerSocket = new Map();\n        this.stopped = false;\n        server.on(server instanceof https_1.default.Server ? 'secureConnection' : 'connection', (socket) => {\n            this.requestCountPerSocket.set(socket, 0);\n            socket.once('close', () => this.requestCountPerSocket.delete(socket));\n        });\n        server.on('request', (req, res) => {\n            this.requestCountPerSocket.set(req.socket, (this.requestCountPerSocket.get(req.socket) ?? 0) + 1);\n            res.once('finish', () => {\n                const pending = (this.requestCountPerSocket.get(req.socket) ?? 0) - 1;\n                this.requestCountPerSocket.set(req.socket, pending);\n                if (this.stopped && pending === 0) {\n                    req.socket.end();\n                }\n            });\n        });\n    }\n    async stop(stopGracePeriodMillis = Infinity) {\n        let gracefully = true;\n        await new Promise((resolve) => setImmediate(resolve));\n        this.stopped = true;\n        let timeout = null;\n        if (stopGracePeriodMillis < Infinity) {\n            timeout = setTimeout(() => {\n                gracefully = false;\n                this.requestCountPerSocket.forEach((_, socket) => socket.end());\n                setImmediate(() => {\n                    this.requestCountPerSocket.forEach((_, socket) => socket.destroy());\n                });\n            }, stopGracePeriodMillis);\n        }\n        const closePromise = new Promise((resolve) => this.server.close(() => {\n            if (timeout) {\n                clearTimeout(timeout);\n                timeout = null;\n            }\n            resolve();\n        }));\n        this.requestCountPerSocket.forEach((requests, socket) => {\n            if (requests === 0)\n                socket.end();\n        });\n        await closePromise;\n        return gracefully;\n    }\n}\nexports.Stopper = Stopper;\n//# sourceMappingURL=stoppable.js.map./dist/esm/externalTypes/requestPipeline.js.mapĎ{\"version\":3,\"file\":\"requestPipeline.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/externalTypes/requestPipeline.ts\"],\"names\":[],\"mappings\":\"\"} /dist/esm/utils/schemaManager.js\rexport class SchemaManager {\n    constructor(options) {\n        this.onSchemaLoadOrUpdateListeners = new Set();\n        this.isStopped = false;\n        this.logger = options.logger;\n        this.schemaDerivedDataProvider = options.schemaDerivedDataProvider;\n        if ('gateway' in options) {\n            this.modeSpecificState = {\n                mode: 'gateway',\n                gateway: options.gateway,\n                apolloConfig: options.apolloConfig,\n            };\n        }\n        else {\n            this.modeSpecificState = {\n                mode: 'schema',\n                apiSchema: options.apiSchema,\n                schemaDerivedData: options.schemaDerivedDataProvider(options.apiSchema),\n            };\n        }\n    }\n    async start() {\n        if (this.modeSpecificState.mode === 'gateway') {\n            const gateway = this.modeSpecificState.gateway;\n            if (gateway.onSchemaLoadOrUpdate) {\n                this.modeSpecificState.unsubscribeFromGateway =\n                    gateway.onSchemaLoadOrUpdate((schemaContext) => {\n                        this.processSchemaLoadOrUpdateEvent(schemaContext);\n                    });\n            }\n            else {\n                throw new Error(\"Unexpectedly couldn't find onSchemaLoadOrUpdate on gateway\");\n            }\n            const config = await this.modeSpecificState.gateway.load({\n                apollo: this.modeSpecificState.apolloConfig,\n            });\n            return config.executor;\n        }\n        else {\n            this.processSchemaLoadOrUpdateEvent({\n                apiSchema: this.modeSpecificState.apiSchema,\n            }, this.modeSpecificState.schemaDerivedData);\n            return null;\n        }\n    }\n    onSchemaLoadOrUpdate(callback) {\n        if (!this.schemaContext) {\n            throw new Error('You must call start() before onSchemaLoadOrUpdate()');\n        }\n        if (!this.isStopped) {\n            try {\n                callback(this.schemaContext);\n            }\n            catch (e) {\n                throw new Error(`An error was thrown from an 'onSchemaLoadOrUpdate' listener: ${e.message}`);\n            }\n        }\n        this.onSchemaLoadOrUpdateListeners.add(callback);\n        return () => {\n            this.onSchemaLoadOrUpdateListeners.delete(callback);\n        };\n    }\n    getSchemaDerivedData() {\n        if (!this.schemaDerivedData) {\n            throw new Error('You must call start() before getSchemaDerivedData()');\n        }\n        return this.schemaDerivedData;\n    }\n    async stop() {\n        this.isStopped = true;\n        if (this.modeSpecificState.mode === 'gateway') {\n            this.modeSpecificState.unsubscribeFromGateway?.();\n            await this.modeSpecificState.gateway.stop?.();\n        }\n    }\n    processSchemaLoadOrUpdateEvent(schemaContext, schemaDerivedData) {\n        if (!this.isStopped) {\n            this.schemaDerivedData =\n                schemaDerivedData ??\n                    this.schemaDerivedDataProvider(schemaContext.apiSchema);\n            this.schemaContext = schemaContext;\n            this.onSchemaLoadOrUpdateListeners.forEach((listener) => {\n                try {\n                    listener(schemaContext);\n                }\n                catch (e) {\n                    this.logger.error(\"An error was thrown from an 'onSchemaLoadOrUpdate' listener\");\n                    this.logger.error(e);\n                }\n            });\n        }\n    }\n}\n//# sourceMappingURL=schemaManager.js.map:/dist/cjs/externalTypes/incrementalDeliveryPolyfill.js.mapĦ{\"version\":3,\"file\":\"incrementalDeliveryPolyfill.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/externalTypes/incrementalDeliveryPolyfill.ts\"],\"names\":[],\"mappings\":\"\"}/dist/cjs/errors/index.js.map\u0002{\"version\":3,\"file\":\"index.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/errors/index.ts\"],\"names\":[],\"mappings\":\";;;AAAA,qCAAuC;AAEvC,IAAY,qBASX;AATD,WAAY,qBAAqB;IAC/B,wEAA+C,CAAA;IAC/C,sEAA6C,CAAA;IAC7C,gFAAuD,CAAA;IACvD,gFAAuD,CAAA;IACvD,wFAA+D,CAAA;IAC/D,0DAAiC,CAAA;IACjC,sFAA6D,CAAA;IAC7D,oDAA2B,CAAA;AAC7B,CAAC,EATW,qBAAqB,GAArB,6BAAqB,KAArB,6BAAqB,QAShC;AAED,IAAY,+BAEX;AAFD,WAAY,+BAA+B;IACzC,oFAAiD,CAAA;AACnD,CAAC,EAFW,+BAA+B,GAA/B,uCAA+B,KAA/B,uCAA+B,QAE1C;AAWD,SAAgB,mBAAmB,CAAC,KAAc;IAChD,IAAI,KAAK,YAAY,sBAAY,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,aAAa,EAAE;QACtE,OAAO,KAAK,CAAC,aAAa,CAAC;KAC5B;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AALD,kDAKC\"}8/dist/esm/externalTypes/incrementalDeliveryPolyfill.d.ts\u0006limport type { FormattedExecutionResult, GraphQLFormattedError } from 'graphql';\ninterface ObjMap<T> {\n    [key: string]: T;\n}\nexport interface GraphQLExperimentalFormattedInitialIncrementalExecutionResult<TData = ObjMap<unknown>, TExtensions = ObjMap<unknown>> extends FormattedExecutionResult<TData, TExtensions> {\n    hasNext: boolean;\n    incremental?: ReadonlyArray<GraphQLExperimentalFormattedIncrementalResult<TData, TExtensions>>;\n    extensions?: TExtensions;\n}\nexport interface GraphQLExperimentalFormattedSubsequentIncrementalExecutionResult<TData = ObjMap<unknown>, TExtensions = ObjMap<unknown>> {\n    hasNext: boolean;\n    incremental?: ReadonlyArray<GraphQLExperimentalFormattedIncrementalResult<TData, TExtensions>>;\n    extensions?: TExtensions;\n}\nexport declare type GraphQLExperimentalFormattedIncrementalResult<TData = ObjMap<unknown>, TExtensions = ObjMap<unknown>> = GraphQLExperimentalFormattedIncrementalDeferResult<TData, TExtensions> | GraphQLExperimentalFormattedIncrementalStreamResult<TData, TExtensions>;\nexport interface GraphQLExperimentalFormattedIncrementalDeferResult<TData = ObjMap<unknown>, TExtensions = ObjMap<unknown>> extends FormattedExecutionResult<TData, TExtensions> {\n    path?: ReadonlyArray<string | number>;\n    label?: string;\n}\nexport interface GraphQLExperimentalFormattedIncrementalStreamResult<TData = Array<unknown>, TExtensions = ObjMap<unknown>> {\n    errors?: ReadonlyArray<GraphQLFormattedError>;\n    items?: TData | null;\n    path?: ReadonlyArray<string | number>;\n    label?: string;\n    extensions?: TExtensions;\n}\nexport {};\n//# sourceMappingURL=incrementalDeliveryPolyfill.d.ts.map//dist/esm/plugin/usageReporting/plugin.d.ts.map\u0002D{\"version\":3,\"file\":\"plugin.d.ts\",\"sourceRoot\":\"\",\"sources\":[\"../../../../src/plugin/usageReporting/plugin.ts\"],\"names\":[],\"mappings\":\"AAAA,OAAO,EAAwB,KAAK,EAAE,MAAM,kCAAkC,CAAC;AAe/E,OAAO,KAAK,EACV,kBAAkB,EAClB,WAAW,EAMZ,MAAM,8BAA8B,CAAC;AAStC,OAAO,KAAK,EACV,uCAAuC,EACvC,qBAAqB,EACtB,MAAM,cAAc,CAAC;AAKtB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAY1D,wBAAgB,gCAAgC,CAAC,QAAQ,SAAS,WAAW,EAC3E,OAAO,GAAE,uCAAuC,CAAC,QAAQ,CAExD,GACA,kBAAkB,CAAC,QAAQ,CAAC,CAquB9B;AAED,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,KAAK,CAAC,KAAK,EACjB,OAAO,EAAE,SAAS,EAClB,WAAW,CAAC,EAAE,qBAAqB,GAClC,IAAI,CAsCN\"}5/dist/esm/utils/makeGatewayGraphQLRequestContext.d.ts\u0002Dimport type { GatewayGraphQLRequestContext } from '@apollo/server-gateway-interface';\nimport type { ApolloServer, ApolloServerInternals } from '../ApolloServer';\nimport type { BaseContext, GraphQLRequestContextExecutionDidStart } from '../externalTypes';\nexport declare function makeGatewayGraphQLRequestContext<TContext extends BaseContext>(as4RequestContext: GraphQLRequestContextExecutionDidStart<TContext>, server: ApolloServer<TContext>, internals: ApolloServerInternals<TContext>): GatewayGraphQLRequestContext;\n//# sourceMappingURL=makeGatewayGraphQLRequestContext.d.ts.map/dist/esm/cachePolicy.d.ts.map{\"version\":3,\"file\":\"cachePolicy.d.ts\",\"sourceRoot\":\"\",\"sources\":[\"../../src/cachePolicy.ts\"],\"names\":[],\"mappings\":\"AAAA,OAAO,KAAK,EAAa,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAE1E,wBAAgB,cAAc,IAAI,WAAW,CA8B5C\"}/dist/esm/express4/index.js\u0007Kimport { parse as urlParse } from 'url';\nexport function expressMiddleware(server, options) {\n    server.assertStarted('expressMiddleware()');\n    const defaultContext = async () => ({});\n    const context = options?.context ?? defaultContext;\n    return (req, res, next) => {\n        if (!req.body) {\n            res.status(500);\n            res.send('`req.body` is not set; this probably means you forgot to set up the ' +\n                '`body-parser` middleware before the Apollo Server middleware.');\n            return;\n        }\n        const headers = new Map();\n        for (const [key, value] of Object.entries(req.headers)) {\n            if (value !== undefined) {\n                headers.set(key, Array.isArray(value) ? value.join(', ') : value);\n            }\n        }\n        const httpGraphQLRequest = {\n            method: req.method.toUpperCase(),\n            headers,\n            search: urlParse(req.url).search ?? '',\n            body: req.body,\n        };\n        server\n            .executeHTTPGraphQLRequest({\n            httpGraphQLRequest,\n            context: () => context({ req, res }),\n        })\n            .then(async (httpGraphQLResponse) => {\n            for (const [key, value] of httpGraphQLResponse.headers) {\n                res.setHeader(key, value);\n            }\n            res.statusCode = httpGraphQLResponse.status || 200;\n            if (httpGraphQLResponse.body.kind === 'complete') {\n                res.send(httpGraphQLResponse.body.string);\n                return;\n            }\n            for await (const chunk of httpGraphQLResponse.body.asyncIterator) {\n                res.write(chunk);\n                if (typeof res.flush === 'function') {\n                    res.flush();\n                }\n            }\n            res.end();\n        })\n            .catch(next);\n    };\n}\n//# sourceMappingURL=index.js.map/src/errorNormalize.ts\u000f\u0005// The functions in this file are not part of Apollo Server's external API.\n\nimport {\n  GraphQLError,\n  GraphQLErrorExtensions,\n  GraphQLFormattedError,\n} from 'graphql';\nimport { ApolloServerErrorCode } from './errors/index.js';\nimport type { HTTPGraphQLHead } from './externalTypes/http.js';\nimport { mergeHTTPGraphQLHead, newHTTPGraphQLHead } from './runHttpQuery.js';\nimport { HeaderMap } from './utils/HeaderMap.js';\n\n// This function accepts any value that were thrown and convert it to GraphQLFormattedError.\n// It also add default extensions.code and copy stack trace onto an extension if requested.\n// Additionally, it returns an `HTTPGraphQLHead` created from combining the values of any\n// `HTTPGraphqlHead` objects found on `extensions.http` (the behavior when multiple errors\n// set a status code or set the same header should be treated as undefined); these extensions\n// are removed from the formatted error.\n//\n// This function should not throw.\nexport function normalizeAndFormatErrors(\n  errors: ReadonlyArray<unknown>,\n  options: {\n    formatError?: (\n      formattedError: GraphQLFormattedError,\n      error: unknown,\n    ) => GraphQLFormattedError;\n    includeStacktraceInErrorResponses?: boolean;\n  } = {},\n): {\n  formattedErrors: Array<GraphQLFormattedError>;\n  httpFromErrors: HTTPGraphQLHead;\n} {\n  const formatError = options.formatError ?? ((error) => error);\n  const httpFromErrors = newHTTPGraphQLHead();\n\n  return {\n    httpFromErrors,\n    formattedErrors: errors.map((error) => {\n      try {\n        return formatError(enrichError(error), error);\n      } catch (formattingError) {\n        if (options.includeStacktraceInErrorResponses) {\n          // includeStacktraceInErrorResponses is used in development\n          // so it will be helpful to show errors thrown by formatError hooks in that mode\n          return enrichError(formattingError);\n        } else {\n          // obscure error\n          return {\n            message: 'Internal server error',\n            extensions: { code: ApolloServerErrorCode.INTERNAL_SERVER_ERROR },\n          };\n        }\n      }\n    }),\n  };\n\n  function enrichError(maybeError: unknown): GraphQLFormattedError {\n    const graphqlError = ensureGraphQLError(maybeError);\n\n    const extensions: GraphQLErrorExtensions = {\n      ...graphqlError.extensions,\n      code:\n        graphqlError.extensions.code ??\n        ApolloServerErrorCode.INTERNAL_SERVER_ERROR,\n    };\n\n    if (isPartialHTTPGraphQLHead(extensions.http)) {\n      mergeHTTPGraphQLHead(httpFromErrors, {\n        headers: new HeaderMap(),\n        ...extensions.http,\n      });\n      delete extensions.http;\n    }\n\n    if (options.includeStacktraceInErrorResponses) {\n      // Note that if ensureGraphQLError created graphqlError from an\n      // originalError, graphqlError.stack will be the same as\n      // originalError.stack due to some special code in the GraphQLError\n      // constructor.\n      extensions.stacktrace = graphqlError.stack?.split('\\n');\n    }\n\n    return { ...graphqlError.toJSON(), extensions };\n  }\n}\n\nexport function ensureError(maybeError: unknown): Error {\n  return maybeError instanceof Error\n    ? maybeError\n    : new GraphQLError('Unexpected error value: ' + String(maybeError));\n}\n\nexport function ensureGraphQLError(\n  maybeError: unknown,\n  messagePrefixIfNotGraphQLError: string = '',\n): GraphQLError {\n  const error: Error = ensureError(maybeError);\n\n  return error instanceof GraphQLError\n    ? error\n    : new GraphQLError(messagePrefixIfNotGraphQLError + error.message, {\n        originalError: error,\n      });\n}\n\nfunction isPartialHTTPGraphQLHead(x: unknown): x is Partial<HTTPGraphQLHead> {\n  return (\n    !!x &&\n    typeof x === 'object' &&\n    (!('status' in x) || typeof (x as any).status === 'number') &&\n    (!('headers' in x) || (x as any).headers instanceof Map)\n  );\n}\n(/dist/cjs/incrementalDeliveryPolyfill.js\u0007\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.executeIncrementally = void 0;\nconst graphql_1 = require(\"graphql\");\nlet graphqlExperimentalExecuteIncrementally = undefined;\nasync function tryToLoadGraphQL17() {\n    if (graphqlExperimentalExecuteIncrementally !== undefined) {\n        return;\n    }\n    const graphql = await Promise.resolve().then(() => __importStar(require('graphql')));\n    if ('experimentalExecuteIncrementally' in graphql) {\n        graphqlExperimentalExecuteIncrementally = graphql\n            .experimentalExecuteIncrementally;\n    }\n    else {\n        graphqlExperimentalExecuteIncrementally = null;\n    }\n}\nasync function executeIncrementally(args) {\n    await tryToLoadGraphQL17();\n    if (graphqlExperimentalExecuteIncrementally) {\n        return graphqlExperimentalExecuteIncrementally(args);\n    }\n    return (0, graphql_1.execute)(args);\n}\nexports.executeIncrementally = executeIncrementally;\n//# sourceMappingURL=incrementalDeliveryPolyfill.js.map7/dist/cjs/plugin/landingPage/default/getEmbeddedHTML.js\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getEmbeddedSandboxHTML = exports.getEmbeddedExplorerHTML = void 0;\nfunction getConfigStringForHtml(config) {\n    return JSON.stringify(config)\n        .replace('<', '\\\\u003c')\n        .replace('>', '\\\\u003e')\n        .replace('&', '\\\\u0026')\n        .replace(\"'\", '\\\\u0027');\n}\nconst getEmbeddedExplorerHTML = (version, config) => {\n    const productionLandingPageConfigOrDefault = {\n        displayOptions: {},\n        persistExplorerState: false,\n        ...(typeof config.embed === 'boolean' ? {} : config.embed),\n    };\n    const embeddedExplorerParams = {\n        ...config,\n        target: '#embeddableExplorer',\n        initialState: {\n            ...config,\n            displayOptions: {\n                ...productionLandingPageConfigOrDefault.displayOptions,\n            },\n        },\n        persistExplorerState: productionLandingPageConfigOrDefault.persistExplorerState,\n    };\n    return `\n<div class=\"fallback\">\n  <h1>Welcome to Apollo Server</h1>\n  <p>Apollo Explorer cannot be loaded; it appears that you might be offline.</p>\n</div>\n<style>\n  iframe {\n    background-color: white;\n  }\n</style>\n<div\nstyle=\"width: 100vw; height: 100vh; position: absolute; top: 0;\"\nid=\"embeddableExplorer\"\n></div>\n<script src=\"https://embeddable-explorer.cdn.apollographql.com/${version}/embeddable-explorer.umd.production.min.js\"></script>\n<script>\n  var endpointUrl = window.location.href;\n  var embeddedExplorerConfig = ${getConfigStringForHtml(embeddedExplorerParams)};\n  new window.EmbeddedExplorer({\n    ...embeddedExplorerConfig,\n    endpointUrl,\n  });\n</script>\n`;\n};\nexports.getEmbeddedExplorerHTML = getEmbeddedExplorerHTML;\nconst getEmbeddedSandboxHTML = (version, config) => {\n    return `\n<div class=\"fallback\">\n  <h1>Welcome to Apollo Server</h1>\n  <p>Apollo Sandbox cannot be loaded; it appears that you might be offline.</p>\n</div>\n<style>\n  iframe {\n    background-color: white;\n  }\n</style>\n<div\nstyle=\"width: 100vw; height: 100vh; position: absolute; top: 0;\"\nid=\"embeddableSandbox\"\n></div>\n<script src=\"https://embeddable-sandbox.cdn.apollographql.com/${version}/embeddable-sandbox.umd.production.min.js\"></script>\n<script>\n  var initialEndpoint = window.location.href;\n  new window.EmbeddedSandbox({\n    target: '#embeddableSandbox',\n    initialEndpoint,\n    includeCookies: ${config.includeCookies ?? 'false'},\n    initialState: ${getConfigStringForHtml({\n        document: config.document ?? undefined,\n        variables: config.variables ?? undefined,\n        headers: config.headers ?? undefined,\n    })},\n  });\n</script>\n`;\n};\nexports.getEmbeddedSandboxHTML = getEmbeddedSandboxHTML;\n//# sourceMappingURL=getEmbeddedHTML.js.map)/dist/esm/generated/packageVersion.js.mapį{\"version\":3,\"file\":\"packageVersion.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/generated/packageVersion.ts\"],\"names\":[],\"mappings\":\"AAAA,MAAM,CAAC,MAAM,cAAc,GAAG,OAAO,CAAC\"}/dist/esm/runHttpQuery.js.map\u001as{\"version\":3,\"file\":\"runHttpQuery.js\",\"sourceRoot\":\"\",\"sources\":[\"../../src/runHttpQuery.ts\"],\"names\":[],\"mappings\":\"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\"}/src/httpBatching.ts\u000bimport type {\n  BaseContext,\n  HTTPGraphQLRequest,\n  HTTPGraphQLResponse,\n} from './externalTypes/index.js';\nimport type {\n  ApolloServer,\n  ApolloServerInternals,\n  SchemaDerivedData,\n} from './ApolloServer';\nimport { newHTTPGraphQLHead, runHttpQuery } from './runHttpQuery.js';\nimport { BadRequestError } from './internalErrorClasses.js';\n\nasync function runBatchedHttpQuery<TContext extends BaseContext>({\n  server,\n  batchRequest,\n  body,\n  contextValue,\n  schemaDerivedData,\n  internals,\n}: {\n  server: ApolloServer<TContext>;\n  batchRequest: HTTPGraphQLRequest;\n  body: unknown[];\n  contextValue: TContext;\n  schemaDerivedData: SchemaDerivedData;\n  internals: ApolloServerInternals<TContext>;\n}): Promise<HTTPGraphQLResponse> {\n  if (body.length === 0) {\n    throw new BadRequestError('No operations found in request.');\n  }\n\n  // This single HTTPGraphQLHead is shared across all the operations in the\n  // batch. This means that any changes to response headers or status code from\n  // one operation can be immediately seen by other operations. Plugins that set\n  // response headers or status code can then choose to combine the data they\n  // are setting with data that may already be there from another operation as\n  // they choose.\n  const sharedResponseHTTPGraphQLHead = newHTTPGraphQLHead();\n  const responseBodies = await Promise.all(\n    body.map(async (bodyPiece: unknown) => {\n      const singleRequest: HTTPGraphQLRequest = {\n        ...batchRequest,\n        body: bodyPiece,\n      };\n\n      const response = await runHttpQuery({\n        server,\n        httpRequest: singleRequest,\n        contextValue,\n        schemaDerivedData,\n        internals,\n        sharedResponseHTTPGraphQLHead,\n      });\n\n      if (response.body.kind === 'chunked') {\n        throw Error(\n          'Incremental delivery is not implemented for batch requests',\n        );\n      }\n      return response.body.string;\n    }),\n  );\n  return {\n    ...sharedResponseHTTPGraphQLHead,\n    body: { kind: 'complete', string: `[${responseBodies.join(',')}]` },\n  };\n}\n\nexport async function runPotentiallyBatchedHttpQuery<\n  TContext extends BaseContext,\n>(\n  server: ApolloServer<TContext>,\n  httpGraphQLRequest: HTTPGraphQLRequest,\n  contextValue: TContext,\n  schemaDerivedData: SchemaDerivedData,\n  internals: ApolloServerInternals<TContext>,\n): Promise<HTTPGraphQLResponse> {\n  if (\n    !(\n      httpGraphQLRequest.method === 'POST' &&\n      Array.isArray(httpGraphQLRequest.body)\n    )\n  ) {\n    return await runHttpQuery({\n      server,\n      httpRequest: httpGraphQLRequest,\n      contextValue,\n      schemaDerivedData,\n      internals,\n      sharedResponseHTTPGraphQLHead: null,\n    });\n  }\n  if (internals.allowBatchedHttpRequests) {\n    return await runBatchedHttpQuery({\n      server,\n      batchRequest: httpGraphQLRequest,\n      body: httpGraphQLRequest.body as unknown[],\n      contextValue,\n      schemaDerivedData,\n      internals,\n    });\n  }\n  throw new BadRequestError('Operation batching disabled.');\n}\n7/dist/esm/utils/makeGatewayGraphQLRequestContext.js.map\u000b{\"version\":3,\"file\":\"makeGatewayGraphQLRequestContext.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/utils/makeGatewayGraphQLRequestContext.ts\"],\"names\":[],\"mappings\":\"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\"}B/dist/esm/plugin/usageReporting/operationDerivedDataCache.d.ts.map\u0002>{\"version\":3,\"file\":\"operationDerivedDataCache.d.ts\",\"sourceRoot\":\"\",\"sources\":[\"../../../../src/plugin/usageReporting/operationDerivedDataCache.ts\"],\"names\":[],\"mappings\":\"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAC3E,OAAO,QAAQ,MAAM,WAAW,CAAC;AAEjC,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,sBAAsB,EAAE,sBAAsB,CAAC;CAChD;AAED,wBAAgB,+BAA+B,CAAC,EAC9C,MAAM,GACP,EAAE;IACD,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,QAAQ,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAwCzC;AAED,wBAAgB,4BAA4B,CAC1C,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,UAGtB\"}/dist/esm/package.json\u0011{\"type\":\"module\"}/dist/esm/httpBatching.js.map\u0006E{\"version\":3,\"file\":\"httpBatching.js\",\"sourceRoot\":\"\",\"sources\":[\"../../src/httpBatching.ts\"],\"names\":[],\"mappings\":\"AAUA,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAE5D,KAAK,UAAU,mBAAmB,CAA+B,EAC/D,MAAM,EACN,YAAY,EACZ,IAAI,EACJ,YAAY,EACZ,iBAAiB,EACjB,SAAS,GAQV;IACC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;QACrB,MAAM,IAAI,eAAe,CAAC,iCAAiC,CAAC,CAAC;KAC9D;IAQD,MAAM,6BAA6B,GAAG,kBAAkB,EAAE,CAAC;IAC3D,MAAM,cAAc,GAAG,MAAM,OAAO,CAAC,GAAG,CACtC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,SAAkB,EAAE,EAAE;QACpC,MAAM,aAAa,GAAuB;YACxC,GAAG,YAAY;YACf,IAAI,EAAE,SAAS;SAChB,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC;YAClC,MAAM;YACN,WAAW,EAAE,aAAa;YAC1B,YAAY;YACZ,iBAAiB;YACjB,SAAS;YACT,6BAA6B;SAC9B,CAAC,CAAC;QAEH,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE;YACpC,MAAM,KAAK,CACT,4DAA4D,CAC7D,CAAC;SACH;QACD,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;IAC9B,CAAC,CAAC,CACH,CAAC;IACF,OAAO;QACL,GAAG,6BAA6B;QAChC,IAAI,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE;KACpE,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAGlD,MAA8B,EAC9B,kBAAsC,EACtC,YAAsB,EACtB,iBAAoC,EACpC,SAA0C;IAE1C,IACE,CAAC,CACC,kBAAkB,CAAC,MAAM,KAAK,MAAM;QACpC,KAAK,CAAC,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,CACvC,EACD;QACA,OAAO,MAAM,YAAY,CAAC;YACxB,MAAM;YACN,WAAW,EAAE,kBAAkB;YAC/B,YAAY;YACZ,iBAAiB;YACjB,SAAS;YACT,6BAA6B,EAAE,IAAI;SACpC,CAAC,CAAC;KACJ;IACD,IAAI,SAAS,CAAC,wBAAwB,EAAE;QACtC,OAAO,MAAM,mBAAmB,CAAC;YAC/B,MAAM;YACN,YAAY,EAAE,kBAAkB;YAChC,IAAI,EAAE,kBAAkB,CAAC,IAAiB;YAC1C,YAAY;YACZ,iBAAiB;YACjB,SAAS;SACV,CAAC,CAAC;KACJ;IACD,MAAM,IAAI,eAAe,CAAC,8BAA8B,CAAC,CAAC;AAC5D,CAAC\"}/dist/esm/errorNormalize.js.map\bQ{\"version\":3,\"file\":\"errorNormalize.js\",\"sourceRoot\":\"\",\"sources\":[\"../../src/errorNormalize.ts\"],\"names\":[],\"mappings\":\"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\"})/dist/esm/utils/UnreachableCaseError.d.tsċexport declare class UnreachableCaseError extends Error {\n    constructor(val: never);\n}\n//# sourceMappingURL=UnreachableCaseError.d.ts.map%/dist/cjs/plugin/schemaIsFederated.js\u0002\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.schemaIsFederated = void 0;\nconst graphql_1 = require(\"graphql\");\nfunction schemaIsFederated(schema) {\n    const serviceType = schema.getType('_Service');\n    if (!(0, graphql_1.isObjectType)(serviceType)) {\n        return false;\n    }\n    const sdlField = serviceType.getFields().sdl;\n    if (!sdlField) {\n        return false;\n    }\n    const sdlFieldType = sdlField.type;\n    if (!(0, graphql_1.isScalarType)(sdlFieldType)) {\n        return false;\n    }\n    return sdlFieldType.name == 'String';\n}\nexports.schemaIsFederated = schemaIsFederated;\n//# sourceMappingURL=schemaIsFederated.js.map3/dist/esm/plugin/landingPage/default/types.d.ts.map\u0004e{\"version\":3,\"file\":\"types.d.ts\",\"sourceRoot\":\"\",\"sources\":[\"../../../../../src/plugin/landingPage/default/types.ts\"],\"names\":[],\"mappings\":\"AAAA,MAAM,WAAW,+CAA+C;IAQ9D,OAAO,CAAC,EAAE,MAAM,CAAC;IAKjB,MAAM,CAAC,EAAE,OAAO,CAAC;IAKjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAKlB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAKhC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEjC,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB,4BAA4B,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;CACnD;AAED,MAAM,WAAW,2DACf,SAAQ,+CAA+C;IAKvD,KAAK,EAAE,KAAK,CAAC;CACd;AAED,MAAM,WAAW,gEACf,SAAQ,+CAA+C;IAOvD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAKlB,KAAK,CAAC,EAAE,KAAK,CAAC;CACf;AAED,MAAM,WAAW,wDACf,SAAQ,+CAA+C;IAKvD,KAAK,CAAC,EAAE,IAAI,CAAC;CACd;AAED,MAAM,WAAW,6DACf,SAAQ,+CAA+C;IAKvD,QAAQ,EAAE,MAAM,CAAC;IAIjB,KAAK,EAAE,IAAI,GAAG,yBAAyB,CAAC;CACzC;AAED,aAAK,yBAAyB,GAAG;IAI/B,cAAc,CAAC,EAAE;QAQf,qBAAqB,EAAE,OAAO,CAAC;QAO/B,cAAc,EAAE,MAAM,GAAG,QAAQ,CAAC;QAMlC,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC;KACzB,CAAC;IAWF,oBAAoB,EAAE,OAAO,CAAC;CAC/B,CAAC;AAEF,oBAAY,gDAAgD,GACxD,wDAAwD,GACxD,2DAA2D,CAAC;AAEhE,oBAAY,qDAAqD,GAC7D,6DAA6D,GAC7D,gEAAgE,CAAC;AAErE,oBAAY,iBAAiB,GACzB,gDAAgD,GAChD,qDAAqD,CAAC\"}//src/plugin/usageReporting/durationHistogram.ts\u000b\u001aexport interface DurationHistogramOptions {\n  initSize?: number;\n  buckets?: number[];\n}\nexport class DurationHistogram {\n  // Note that it's legal for the values in \"buckets\" to be non-integers; they\n  // will be floored by toArray (which is called by the protobuf encoder).\n  // (We take advantage of this for field latencies specifically, because\n  // the ability to return a non-1 weight from fieldLevelInstrumentation\n  // means we want to build up our histograms as floating-point rather than\n  // rounding after every operation.)\n  private readonly buckets: number[];\n  static readonly BUCKET_COUNT = 384;\n  static readonly EXPONENT_LOG = Math.log(1.1);\n\n  toArray(): number[] {\n    let bufferedZeroes = 0;\n    const outputArray: number[] = [];\n\n    for (const value of this.buckets) {\n      if (value === 0) {\n        bufferedZeroes++;\n      } else {\n        if (bufferedZeroes === 1) {\n          outputArray.push(0);\n        } else if (bufferedZeroes !== 0) {\n          outputArray.push(-bufferedZeroes);\n        }\n        outputArray.push(Math.floor(value));\n        bufferedZeroes = 0;\n      }\n    }\n    return outputArray;\n  }\n\n  static durationToBucket(durationNs: number): number {\n    const log = Math.log(durationNs / 1000.0);\n    const unboundedBucket = Math.ceil(log / DurationHistogram.EXPONENT_LOG);\n\n    // Compare <= 0 to catch -0 and -infinity\n    return unboundedBucket <= 0 || Number.isNaN(unboundedBucket)\n      ? 0\n      : unboundedBucket >= DurationHistogram.BUCKET_COUNT\n      ? DurationHistogram.BUCKET_COUNT - 1\n      : unboundedBucket;\n  }\n\n  incrementDuration(durationNs: number, value = 1): DurationHistogram {\n    this.incrementBucket(DurationHistogram.durationToBucket(durationNs), value);\n    return this;\n  }\n\n  incrementBucket(bucket: number, value = 1) {\n    if (bucket >= DurationHistogram.BUCKET_COUNT) {\n      // Since we don't have fixed size arrays I'd rather throw the error manually\n      throw Error('Bucket is out of bounds of the buckets array');\n    }\n\n    // Extend the array if we haven't gotten it long enough to handle the new bucket\n    if (bucket >= this.buckets.length) {\n      const oldLength = this.buckets.length;\n      this.buckets.length = bucket + 1;\n      this.buckets.fill(0, oldLength);\n    }\n\n    this.buckets[bucket] += value;\n  }\n\n  combine(otherHistogram: DurationHistogram) {\n    for (let i = 0; i < otherHistogram.buckets.length; i++) {\n      this.incrementBucket(i, otherHistogram.buckets[i]);\n    }\n  }\n\n  constructor(options?: DurationHistogramOptions) {\n    const initSize = options?.initSize || 74;\n    const buckets = options?.buckets;\n\n    const arrayInitSize = Math.max(buckets?.length || 0, initSize);\n\n    this.buckets = Array<number>(arrayInitSize).fill(0);\n\n    if (buckets) {\n      buckets.forEach((val, index) => (this.buckets[index] = val));\n    }\n  }\n}\n/dist/cjs/requestPipeline.js:\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.processGraphQLRequest = exports.APQ_CACHE_PREFIX = void 0;\nconst utils_createhash_1 = require(\"@apollo/utils.createhash\");\nconst graphql_1 = require(\"graphql\");\nconst schemaInstrumentation_js_1 = require(\"./utils/schemaInstrumentation.js\");\nconst internalErrorClasses_js_1 = require(\"./internalErrorClasses.js\");\nconst errorNormalize_js_1 = require(\"./errorNormalize.js\");\nconst invokeHooks_js_1 = require(\"./utils/invokeHooks.js\");\nconst makeGatewayGraphQLRequestContext_js_1 = require(\"./utils/makeGatewayGraphQLRequestContext.js\");\nconst runHttpQuery_js_1 = require(\"./runHttpQuery.js\");\nconst isDefined_js_1 = require(\"./utils/isDefined.js\");\nconst incrementalDeliveryPolyfill_js_1 = require(\"./incrementalDeliveryPolyfill.js\");\nconst HeaderMap_js_1 = require(\"./utils/HeaderMap.js\");\nexports.APQ_CACHE_PREFIX = 'apq:';\nfunction computeQueryHash(query) {\n    return (0, utils_createhash_1.createHash)('sha256').update(query).digest('hex');\n}\nfunction isBadUserInputGraphQLError(error) {\n    return (error.nodes?.length === 1 &&\n        error.nodes[0].kind === graphql_1.Kind.VARIABLE_DEFINITION &&\n        (error.message.startsWith(`Variable \"$${error.nodes[0].variable.name.value}\" got invalid value `) ||\n            error.message.startsWith(`Variable \"$${error.nodes[0].variable.name.value}\" of required type `) ||\n            error.message.startsWith(`Variable \"$${error.nodes[0].variable.name.value}\" of non-null type `)));\n}\nasync function processGraphQLRequest(schemaDerivedData, server, internals, requestContext) {\n    const requestListeners = (await Promise.all(internals.plugins.map((p) => p.requestDidStart?.(requestContext)))).filter(isDefined_js_1.isDefined);\n    const request = requestContext.request;\n    let { query, extensions } = request;\n    let queryHash;\n    requestContext.metrics.persistedQueryHit = false;\n    requestContext.metrics.persistedQueryRegister = false;\n    if (extensions?.persistedQuery) {\n        if (!internals.persistedQueries) {\n            return await sendErrorResponse([new internalErrorClasses_js_1.PersistedQueryNotSupportedError()]);\n        }\n        else if (extensions.persistedQuery.version !== 1) {\n            return await sendErrorResponse([\n                new graphql_1.GraphQLError('Unsupported persisted query version', {\n                    extensions: { http: (0, runHttpQuery_js_1.newHTTPGraphQLHead)(400) },\n                }),\n            ]);\n        }\n        queryHash = extensions.persistedQuery.sha256Hash;\n        if (query === undefined) {\n            query = await internals.persistedQueries.cache.get(queryHash);\n            if (query) {\n                requestContext.metrics.persistedQueryHit = true;\n            }\n            else {\n                return await sendErrorResponse([new internalErrorClasses_js_1.PersistedQueryNotFoundError()]);\n            }\n        }\n        else {\n            const computedQueryHash = computeQueryHash(query);\n            if (queryHash !== computedQueryHash) {\n                return await sendErrorResponse([\n                    new graphql_1.GraphQLError('provided sha does not match query', {\n                        extensions: { http: (0, runHttpQuery_js_1.newHTTPGraphQLHead)(400) },\n                    }),\n                ]);\n            }\n            requestContext.metrics.persistedQueryRegister = true;\n        }\n    }\n    else if (query) {\n        queryHash = computeQueryHash(query);\n    }\n    else {\n        return await sendErrorResponse([\n            new internalErrorClasses_js_1.BadRequestError('GraphQL operations must contain a non-empty `query` or a `persistedQuery` extension.'),\n        ]);\n    }\n    requestContext.queryHash = queryHash;\n    requestContext.source = query;\n    await Promise.all(requestListeners.map((l) => l.didResolveSource?.(requestContext)));\n    if (schemaDerivedData.documentStore) {\n        try {\n            requestContext.document = await schemaDerivedData.documentStore.get(queryHash);\n        }\n        catch (err) {\n            server.logger.warn('An error occurred while attempting to read from the documentStore. ' +\n                (0, errorNormalize_js_1.ensureError)(err).message);\n        }\n    }\n    if (!requestContext.document) {\n        const parsingDidEnd = await (0, invokeHooks_js_1.invokeDidStartHook)(requestListeners, async (l) => l.parsingDidStart?.(requestContext));\n        try {\n            requestContext.document = (0, graphql_1.parse)(query, internals.parseOptions);\n        }\n        catch (syntaxMaybeError) {\n            const error = (0, errorNormalize_js_1.ensureError)(syntaxMaybeError);\n            await parsingDidEnd(error);\n            return await sendErrorResponse([\n                new internalErrorClasses_js_1.SyntaxError((0, errorNormalize_js_1.ensureGraphQLError)(error)),\n            ]);\n        }\n        await parsingDidEnd();\n        const validationDidEnd = await (0, invokeHooks_js_1.invokeDidStartHook)(requestListeners, async (l) => l.validationDidStart?.(requestContext));\n        const validationErrors = (0, graphql_1.validate)(schemaDerivedData.schema, requestContext.document, [...graphql_1.specifiedRules, ...internals.validationRules]);\n        if (validationErrors.length === 0) {\n            await validationDidEnd();\n        }\n        else {\n            await validationDidEnd(validationErrors);\n            return await sendErrorResponse(validationErrors.map((error) => new internalErrorClasses_js_1.ValidationError(error)));\n        }\n        if (schemaDerivedData.documentStore) {\n            Promise.resolve(schemaDerivedData.documentStore.set(queryHash, requestContext.document)).catch((err) => server.logger.warn('Could not store validated document. ' + err?.message || err));\n        }\n    }\n    const operation = (0, graphql_1.getOperationAST)(requestContext.document, request.operationName);\n    requestContext.operation = operation || undefined;\n    requestContext.operationName = operation?.name?.value || null;\n    if (request.http?.method === 'GET' &&\n        operation?.operation &&\n        operation.operation !== 'query') {\n        return await sendErrorResponse([\n            new internalErrorClasses_js_1.BadRequestError(`GET requests only support query operations, not ${operation.operation} operations`, {\n                extensions: {\n                    http: { status: 405, headers: new HeaderMap_js_1.HeaderMap([['allow', 'POST']]) },\n                },\n            }),\n        ]);\n    }\n    try {\n        await Promise.all(requestListeners.map((l) => l.didResolveOperation?.(requestContext)));\n    }\n    catch (err) {\n        return await sendErrorResponse([(0, errorNormalize_js_1.ensureGraphQLError)(err)]);\n    }\n    if (requestContext.metrics.persistedQueryRegister &&\n        internals.persistedQueries) {\n        const ttl = internals.persistedQueries?.ttl;\n        Promise.resolve(internals.persistedQueries.cache.set(queryHash, query, ttl !== undefined\n            ? { ttl: internals.persistedQueries?.ttl }\n            : undefined)).catch(server.logger.warn);\n    }\n    const responseFromPlugin = await (0, invokeHooks_js_1.invokeHooksUntilDefinedAndNonNull)(requestListeners, async (l) => await l.responseForOperation?.(requestContext));\n    if (responseFromPlugin !== null) {\n        requestContext.response.body = responseFromPlugin.body;\n        (0, runHttpQuery_js_1.mergeHTTPGraphQLHead)(requestContext.response.http, responseFromPlugin.http);\n    }\n    else {\n        const executionListeners = (await Promise.all(requestListeners.map((l) => l.executionDidStart?.(requestContext)))).filter(isDefined_js_1.isDefined);\n        executionListeners.reverse();\n        if (executionListeners.some((l) => l.willResolveField)) {\n            const invokeWillResolveField = (...args) => (0, invokeHooks_js_1.invokeSyncDidStartHook)(executionListeners, (l) => l.willResolveField?.(...args));\n            Object.defineProperty(requestContext.contextValue, schemaInstrumentation_js_1.symbolExecutionDispatcherWillResolveField, { value: invokeWillResolveField });\n            if (internals.fieldResolver) {\n                Object.defineProperty(requestContext.contextValue, schemaInstrumentation_js_1.symbolUserFieldResolver, {\n                    value: internals.fieldResolver,\n                });\n            }\n            (0, schemaInstrumentation_js_1.enablePluginsForSchemaResolvers)(schemaDerivedData.schema);\n        }\n        try {\n            const fullResult = await execute(requestContext);\n            const result = 'singleResult' in fullResult\n                ? fullResult.singleResult\n                : fullResult.initialResult;\n            if (!requestContext.operation) {\n                if (!result.errors?.length) {\n                    throw new Error('Unexpected error: Apollo Server did not resolve an operation but execute did not return errors');\n                }\n                throw new internalErrorClasses_js_1.OperationResolutionError(result.errors[0]);\n            }\n            const resultErrors = result.errors?.map((e) => {\n                if (isBadUserInputGraphQLError(e)) {\n                    return new internalErrorClasses_js_1.UserInputError(e);\n                }\n                return e;\n            });\n            if (resultErrors) {\n                await didEncounterErrors(resultErrors);\n            }\n            const { formattedErrors, httpFromErrors } = resultErrors\n                ? formatErrors(resultErrors)\n                : { formattedErrors: undefined, httpFromErrors: (0, runHttpQuery_js_1.newHTTPGraphQLHead)() };\n            (0, runHttpQuery_js_1.mergeHTTPGraphQLHead)(requestContext.response.http, httpFromErrors);\n            if ('singleResult' in fullResult) {\n                requestContext.response.body = {\n                    kind: 'single',\n                    singleResult: {\n                        ...result,\n                        errors: formattedErrors,\n                    },\n                };\n            }\n            else {\n                requestContext.response.body = {\n                    kind: 'incremental',\n                    initialResult: {\n                        ...fullResult.initialResult,\n                        errors: formattedErrors,\n                    },\n                    subsequentResults: fullResult.subsequentResults,\n                };\n            }\n        }\n        catch (executionMaybeError) {\n            const executionError = (0, errorNormalize_js_1.ensureError)(executionMaybeError);\n            await Promise.all(executionListeners.map((l) => l.executionDidEnd?.(executionError)));\n            return await sendErrorResponse([(0, errorNormalize_js_1.ensureGraphQLError)(executionError)]);\n        }\n        await Promise.all(executionListeners.map((l) => l.executionDidEnd?.()));\n    }\n    await invokeWillSendResponse();\n    if (!requestContext.response.body) {\n        throw Error('got to end of processGraphQLRequest without setting body?');\n    }\n    return requestContext.response;\n    async function execute(requestContext) {\n        const { request, document } = requestContext;\n        if (internals.__testing_incrementalExecutionResults) {\n            return internals.__testing_incrementalExecutionResults;\n        }\n        else if (internals.gatewayExecutor) {\n            const result = await internals.gatewayExecutor((0, makeGatewayGraphQLRequestContext_js_1.makeGatewayGraphQLRequestContext)(requestContext, server, internals));\n            return { singleResult: result };\n        }\n        else {\n            const resultOrResults = await (0, incrementalDeliveryPolyfill_js_1.executeIncrementally)({\n                schema: schemaDerivedData.schema,\n                document,\n                rootValue: typeof internals.rootValue === 'function'\n                    ? internals.rootValue(document)\n                    : internals.rootValue,\n                contextValue: requestContext.contextValue,\n                variableValues: request.variables,\n                operationName: request.operationName,\n                fieldResolver: internals.fieldResolver,\n            });\n            if ('initialResult' in resultOrResults) {\n                return {\n                    initialResult: resultOrResults.initialResult,\n                    subsequentResults: formatErrorsInSubsequentResults(resultOrResults.subsequentResults),\n                };\n            }\n            else {\n                return { singleResult: resultOrResults };\n            }\n        }\n    }\n    async function* formatErrorsInSubsequentResults(results) {\n        for await (const result of results) {\n            const payload = result.incremental\n                ? {\n                    ...result,\n                    incremental: await seriesAsyncMap(result.incremental, async (incrementalResult) => {\n                        const { errors } = incrementalResult;\n                        if (errors) {\n                            await Promise.all(requestListeners.map((l) => l.didEncounterSubsequentErrors?.(requestContext, errors)));\n                            return {\n                                ...incrementalResult,\n                                errors: formatErrors(errors).formattedErrors,\n                            };\n                        }\n                        return incrementalResult;\n                    }),\n                }\n                : result;\n            await Promise.all(requestListeners.map((l) => l.willSendSubsequentPayload?.(requestContext, payload)));\n            yield payload;\n        }\n    }\n    async function invokeWillSendResponse() {\n        await Promise.all(requestListeners.map((l) => l.willSendResponse?.(requestContext)));\n    }\n    async function didEncounterErrors(errors) {\n        requestContext.errors = errors;\n        return await Promise.all(requestListeners.map((l) => l.didEncounterErrors?.(requestContext)));\n    }\n    async function sendErrorResponse(errors) {\n        await didEncounterErrors(errors);\n        const { formattedErrors, httpFromErrors } = formatErrors(errors);\n        requestContext.response.body = {\n            kind: 'single',\n            singleResult: {\n                errors: formattedErrors,\n            },\n        };\n        (0, runHttpQuery_js_1.mergeHTTPGraphQLHead)(requestContext.response.http, httpFromErrors);\n        if (!requestContext.response.http.status) {\n            requestContext.response.http.status = 500;\n        }\n        await invokeWillSendResponse();\n        return requestContext.response;\n    }\n    function formatErrors(errors) {\n        return (0, errorNormalize_js_1.normalizeAndFormatErrors)(errors, {\n            formatError: internals.formatError,\n            includeStacktraceInErrorResponses: internals.includeStacktraceInErrorResponses,\n        });\n    }\n}\nexports.processGraphQLRequest = processGraphQLRequest;\nasync function seriesAsyncMap(ts, fn) {\n    const us = [];\n    for (const t of ts) {\n        const u = await fn(t);\n        us.push(u);\n    }\n    return us;\n}\n//# sourceMappingURL=requestPipeline.js.map!/src/externalTypes/constructor.ts\u0016B/**\n * This file consists of types used to define the arguments to the ApolloServer\n * constructor. The top-level and likely most interesting type exported from\n * here is `ApolloServerOptions` which is used to define the input object to the\n * `ApolloServer` constructor.\n */\nimport type { Logger } from '@apollo/utils.logger';\nimport type { IExecutableSchemaDefinition } from '@graphql-tools/schema';\nimport type {\n  DocumentNode,\n  GraphQLFieldResolver,\n  GraphQLFormattedError,\n  GraphQLSchema,\n  ParseOptions,\n  ValidationRule,\n} from 'graphql';\nimport type { KeyValueCache } from '@apollo/utils.keyvaluecache';\nimport type { GatewayInterface } from '@apollo/server-gateway-interface';\nimport type { ApolloServerPlugin } from './plugins.js';\nimport type { BaseContext } from './index.js';\nimport type { GraphQLExperimentalIncrementalExecutionResults } from '../incrementalDeliveryPolyfill.js';\n\nexport type DocumentStore = KeyValueCache<DocumentNode>;\n\n// Configuration for how Apollo Server talks to the Apollo registry, as passed\n// to the ApolloServer constructor. Each field can also be provided as an\n// environment variable.\nexport interface ApolloConfigInput {\n  // Your Apollo API key. Environment variable: APOLLO_KEY.\n  key?: string;\n  // The graph ref for your graph, eg `my-graph@my-variant` or `my-graph` to use\n  // your graph's default variant. Environment variable: APOLLO_GRAPH_REF. For\n  // backwards compatibility, may alternatively specify the ref as graphId and\n  // graphVariant separately.\n  graphRef?: string;\n  // The graph ID of your graph, eg `my-graph`. Environment variable:\n  // APOLLO_GRAPH_ID.\n  graphId?: string;\n  // Your graph's variant name, eg `my-variant`. Environment variable:\n  // APOLLO_GRAPH_VARIANT.\n  graphVariant?: string;\n}\n\n// some defaults filled in from the ApolloConfigInput passed to the constructor.\nexport interface ApolloConfig {\n  key?: string;\n  keyHash?: string;\n  graphRef?: string;\n}\n\nexport interface PersistedQueryOptions {\n  cache?: KeyValueCache<string>;\n  /**\n   * Specified in **seconds**, this time-to-live (TTL) value limits the lifespan\n   * of how long the persisted query should be cached.  To specify a desired\n   * lifespan of \"infinite\", set this to `null`, in which case the eviction will\n   * be determined by the cache's eviction policy, but the record will never\n   * simply expire.\n   */\n  ttl?: number | null;\n}\n\nexport interface CSRFPreventionOptions {\n  // CSRF prevention works by only processing operations from requests whose\n  // structure indicates that if they were sent by a web browser, then the\n  // browser would have had to send a preflight OPTIONS request already. We do\n  // this by specifying some headers that a browser will never automatically set\n  // and which will trigger the browser to preflight. Apollo Server will reject\n  // any operation that does not set at least one of these headers *and* does\n  // not set a content-type (to a header whose parsed type is not\n  // application/x-www-form-urlencoded, multipart/form-data, or text/plain). If\n  // CSRF prevention is enabled (eg, with `csrfPrevention: true`) this list\n  // defaults to ['x-apollo-operation-name', 'apollo-require-preflight']. This\n  // will allow POST operations from any client and GET operations from Apollo\n  // Client Web, Apollo iOS, and Apollo Kotlin.\n  requestHeaders?: string[];\n}\n\ninterface ApolloServerOptionsBase<TContext extends BaseContext> {\n  formatError?: (\n    formattedError: GraphQLFormattedError,\n    error: unknown,\n  ) => GraphQLFormattedError;\n  rootValue?: ((parsedQuery: DocumentNode) => unknown) | unknown;\n  validationRules?: Array<ValidationRule>;\n  fieldResolver?: GraphQLFieldResolver<any, TContext>;\n  cache?: KeyValueCache<string>;\n  includeStacktraceInErrorResponses?: boolean;\n  logger?: Logger;\n  allowBatchedHttpRequests?: boolean;\n\n  introspection?: boolean;\n  plugins?: ApolloServerPlugin<TContext>[];\n  persistedQueries?: PersistedQueryOptions | false;\n  stopOnTerminationSignals?: boolean;\n  apollo?: ApolloConfigInput;\n  nodeEnv?: string;\n  documentStore?: DocumentStore | null;\n  csrfPrevention?: CSRFPreventionOptions | boolean;\n\n  // Used for parsing operations; unlike in AS3, this is not also used for\n  // parsing the schema.\n  parseOptions?: ParseOptions;\n\n  // For testing only.\n  __testing_incrementalExecutionResults?: GraphQLExperimentalIncrementalExecutionResults;\n}\n\ninterface ApolloServerOptionsWithGateway<TContext extends BaseContext>\n  extends ApolloServerOptionsBase<TContext> {\n  gateway: GatewayInterface;\n  schema?: undefined;\n  typeDefs?: undefined;\n  resolvers?: undefined;\n}\n\ninterface ApolloServerOptionsWithSchema<TContext extends BaseContext>\n  extends ApolloServerOptionsBase<TContext> {\n  schema: GraphQLSchema;\n  gateway?: undefined;\n  typeDefs?: undefined;\n  resolvers?: undefined;\n}\n\ninterface ApolloServerOptionsWithTypeDefs<TContext extends BaseContext>\n  extends ApolloServerOptionsBase<TContext> {\n  // These two options are always only passed directly through to\n  // makeExecutableSchema. (If you don't want to use makeExecutableSchema, pass\n  // `schema` instead.)\n  typeDefs: IExecutableSchemaDefinition<TContext>['typeDefs'];\n  resolvers?: IExecutableSchemaDefinition<TContext>['resolvers'];\n  gateway?: undefined;\n  schema?: undefined;\n}\n\n// Used internally in ApolloServer.ts but not publicly exported.\nexport type ApolloServerOptionsWithStaticSchema<TContext extends BaseContext> =\n  | ApolloServerOptionsWithSchema<TContext>\n  | ApolloServerOptionsWithTypeDefs<TContext>;\n\nexport type ApolloServerOptions<TContext extends BaseContext> =\n  | ApolloServerOptionsWithGateway<TContext>\n  | ApolloServerOptionsWithStaticSchema<TContext>;\n#/src/utils/schemaInstrumentation.ts\u000fimport {\n  GraphQLSchema,\n  GraphQLField,\n  getNamedType,\n  GraphQLObjectType,\n  GraphQLFieldResolver,\n  defaultFieldResolver,\n} from 'graphql';\nimport type {\n  BaseContext,\n  GraphQLRequestExecutionListener,\n} from '../externalTypes/index.js';\n\nexport const symbolExecutionDispatcherWillResolveField = Symbol(\n  'apolloServerExecutionDispatcherWillResolveField',\n);\nexport const symbolUserFieldResolver = Symbol('apolloServerUserFieldResolver');\nconst symbolPluginsEnabled = Symbol('apolloServerPluginsEnabled');\n\nexport function enablePluginsForSchemaResolvers<TContext extends BaseContext>(\n  schema: GraphQLSchema & { [symbolPluginsEnabled]?: boolean },\n) {\n  if (pluginsEnabledForSchemaResolvers(schema)) {\n    return schema;\n  }\n  Object.defineProperty(schema, symbolPluginsEnabled, {\n    value: true,\n  });\n\n  const typeMap = schema.getTypeMap();\n  Object.values(typeMap).forEach((type) => {\n    if (\n      !getNamedType(type).name.startsWith('__') &&\n      type instanceof GraphQLObjectType\n    ) {\n      const fields = type.getFields();\n      Object.values(fields).forEach((field) => {\n        wrapField<TContext>(field);\n      });\n    }\n  });\n\n  return schema;\n}\n\nexport function pluginsEnabledForSchemaResolvers(\n  schema: GraphQLSchema & { [symbolPluginsEnabled]?: boolean },\n): boolean {\n  return !!schema[symbolPluginsEnabled];\n}\n\nfunction wrapField<TContext extends BaseContext>(\n  field: GraphQLField<any, any>,\n): void {\n  const originalFieldResolve = field.resolve;\n\n  field.resolve = (source, args, contextValue, info) => {\n    const willResolveField = contextValue?.[\n      symbolExecutionDispatcherWillResolveField\n    ] as\n      | GraphQLRequestExecutionListener<TContext>['willResolveField']\n      | undefined;\n\n    const userFieldResolver = contextValue?.[symbolUserFieldResolver] as\n      | GraphQLFieldResolver<any, any>\n      | undefined;\n\n    // The technique for implementing a  \"did resolve field\" is accomplished by\n    // returning a function from the `willResolveField` handler.  While there\n    // may be several callbacks, depending on the number of plugins which have\n    // implemented a `willResolveField` hook, this hook will call them all\n    // as dictated by the dispatcher.  We will call this when object\n    // resolution is complete.\n    const didResolveField =\n      typeof willResolveField === 'function' &&\n      willResolveField({ source, args, contextValue, info });\n\n    const fieldResolver =\n      originalFieldResolve || userFieldResolver || defaultFieldResolver;\n\n    try {\n      const result = fieldResolver(source, args, contextValue, info);\n\n      // Call the stack's handlers either immediately (if result is not a\n      // Promise) or once the Promise is done. Then return that same\n      // maybe-Promise value.\n      if (typeof didResolveField === 'function') {\n        whenResultIsFinished(result, didResolveField);\n      }\n      return result;\n    } catch (error) {\n      // Normally it's a bad sign to see an error both handled and\n      // re-thrown. But it is useful to allow extensions to track errors while\n      // still handling them in the normal GraphQL way.\n      if (typeof didResolveField === 'function') {\n        didResolveField(error as Error);\n      }\n      throw error;\n    }\n  };\n}\n\nfunction isPromise(x: any): boolean {\n  return x && typeof x.then === 'function';\n}\n\n// Given result (which may be a Promise or an array some of whose elements are\n// promises) Promises, set up 'callback' to be invoked when result is fully\n// resolved.\nexport function whenResultIsFinished(\n  result: any,\n  callback: (err: Error | null, result?: any) => void,\n) {\n  if (isPromise(result)) {\n    result.then(\n      (r: any) => callback(null, r),\n      (err: Error) => callback(err),\n    );\n  } else if (Array.isArray(result)) {\n    if (result.some(isPromise)) {\n      Promise.all(result).then(\n        (r: any) => callback(null, r),\n        (err: Error) => callback(err),\n      );\n    } else {\n      callback(null, result);\n    }\n  } else {\n    callback(null, result);\n  }\n}\n&/dist/esm/externalTypes/constructor.js2export {};\n//# sourceMappingURL=constructor.js.map*/dist/esm/plugin/usageReporting/index.d.ts\u0001\u0011export { ApolloServerPluginUsageReporting } from './plugin.js';\nexport type { ApolloServerPluginUsageReportingOptions, SendValuesBaseOptions, VariableValueOptions, SendErrorsOptions, ClientInfo, GenerateClientInfo, } from './options.js';\n//# sourceMappingURL=index.d.ts.map/dist/esm/preventCsrf.js.map\u0004\u0003{\"version\":3,\"file\":\"preventCsrf.js\",\"sourceRoot\":\"\",\"sources\":[\"../../src/preventCsrf.ts\"],\"names\":[],\"mappings\":\"AAAA,OAAO,QAAQ,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAa5D,MAAM,CAAC,MAAM,uCAAuC,GAAG;IACrD,yBAAyB;IACzB,0BAA0B;CAC3B,CAAC;AAGF,MAAM,6BAA6B,GAAG;IACpC,mCAAmC;IACnC,qBAAqB;IACrB,YAAY;CACb,CAAC;AAqBF,MAAM,UAAU,WAAW,CACzB,OAAkB,EAClB,4BAAsC;IAEtC,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAOhD,IAAI,WAAW,KAAK,SAAS,EAAE;QAC7B,MAAM,iBAAiB,GAAG,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACtD,IAAI,iBAAiB,KAAK,IAAI,EAAE;YAQ9B,OAAO;SACR;QACD,IAAI,CAAC,6BAA6B,CAAC,QAAQ,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAE;YAKtE,OAAO;SACR;KACF;IAMD,IACE,4BAA4B,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;QAC3C,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAClC,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IACjD,CAAC,CAAC,EACF;QACA,OAAO;KACR;IAED,MAAM,IAAI,eAAe,CACvB,4EAA4E;QAC1E,0EAA0E;QAC1E,iBAAiB,6BAA6B,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe;QACxE,uDAAuD,4BAA4B,CAAC,IAAI,CACtF,IAAI,CACL,IAAI,CACR,CAAC;AACJ,CAAC\"}+/dist/esm/generated/packageVersion.d.ts.mapħ{\"version\":3,\"file\":\"packageVersion.d.ts\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/generated/packageVersion.ts\"],\"names\":[],\"mappings\":\"AAAA,eAAO,MAAM,cAAc,UAAU,CAAC\"}/dist/esm/standalone/index.js\u0003import bodyParser from 'body-parser';\nimport cors from 'cors';\nimport express from 'express';\nimport http from 'http';\nimport { expressMiddleware } from '../express4/index.js';\nimport { ApolloServerPluginDrainHttpServer } from '../plugin/drainHttpServer/index.js';\nimport { urlForHttpServer } from '../utils/urlForHttpServer.js';\nexport async function startStandaloneServer(server, options) {\n    const app = express();\n    const httpServer = http.createServer(app);\n    server.addPlugin(ApolloServerPluginDrainHttpServer({ httpServer: httpServer }));\n    await server.start();\n    const context = options?.context ?? (async () => ({}));\n    app.use(cors(), bodyParser.json(), expressMiddleware(server, { context }));\n    const listenOptions = options?.listen ?? { port: 4000 };\n    await new Promise((resolve) => {\n        httpServer.listen(listenOptions, resolve);\n    });\n    return { url: urlForHttpServer(httpServer) };\n}\n//# sourceMappingURL=index.js.map/dist/cjs/utils/HeaderMap.js\u0001\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.HeaderMap = void 0;\nclass HeaderMap extends Map {\n    set(key, value) {\n        return super.set(key.toLowerCase(), value);\n    }\n    get(key) {\n        return super.get(key.toLowerCase());\n    }\n    delete(key) {\n        return super.delete(key.toLowerCase());\n    }\n    has(key) {\n        return super.has(key.toLowerCase());\n    }\n}\nexports.HeaderMap = HeaderMap;\n//# sourceMappingURL=HeaderMap.js.map%/dist/esm/plugin/schemaIsFederated.js\u0001import { isObjectType, isScalarType } from 'graphql';\nexport function schemaIsFederated(schema) {\n    const serviceType = schema.getType('_Service');\n    if (!isObjectType(serviceType)) {\n        return false;\n    }\n    const sdlField = serviceType.getFields().sdl;\n    if (!sdlField) {\n        return false;\n    }\n    const sdlFieldType = sdlField.type;\n    if (!isScalarType(sdlFieldType)) {\n        return false;\n    }\n    return sdlFieldType.name == 'String';\n}\n//# sourceMappingURL=schemaIsFederated.js.map%/dist/cjs/generated/packageVersion.jsĺ\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.packageVersion = void 0;\nexports.packageVersion = \"4.1.1\";\n//# sourceMappingURL=packageVersion.js.map9/dist/esm/plugin/usageReporting/iterateOverTrace.d.ts.map\u0001{\"version\":3,\"file\":\"iterateOverTrace.d.ts\",\"sourceRoot\":\"\",\"sources\":[\"../../../../src/plugin/usageReporting/iterateOverTrace.ts\"],\"names\":[],\"mappings\":\"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kCAAkC,CAAC;AAoB9D,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,KAAK,EACZ,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,gBAAgB,KAAK,OAAO,EACzD,WAAW,EAAE,OAAO,QAYrB;AA8DD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,IAAI,MAAM,EAAE,CAAC;IACpB,KAAK,CAAC,YAAY,EAAE,MAAM,GAAG,gBAAgB,CAAC;CAC/C\"}/src/cachePolicy.ts\u0003yimport type { CacheHint, CachePolicy } from '@apollo/cache-control-types';\n\nexport function newCachePolicy(): CachePolicy {\n  return {\n    maxAge: undefined,\n    scope: undefined,\n    restrict(hint: CacheHint) {\n      if (\n        hint.maxAge !== undefined &&\n        (this.maxAge === undefined || hint.maxAge < this.maxAge)\n      ) {\n        this.maxAge = hint.maxAge;\n      }\n      if (hint.scope !== undefined && this.scope !== 'PRIVATE') {\n        this.scope = hint.scope;\n      }\n    },\n    replace(hint: CacheHint) {\n      if (hint.maxAge !== undefined) {\n        this.maxAge = hint.maxAge;\n      }\n      if (hint.scope !== undefined) {\n        this.scope = hint.scope;\n      }\n    },\n    policyIfCacheable() {\n      if (this.maxAge === undefined || this.maxAge === 0) {\n        return null;\n      }\n      return { maxAge: this.maxAge, scope: this.scope ?? 'PUBLIC' };\n    },\n  };\n}\n/dist/esm/preventCsrf.js\u0005cimport MIMEType from 'whatwg-mimetype';\nimport { BadRequestError } from './internalErrorClasses.js';\nexport const recommendedCsrfPreventionRequestHeaders = [\n    'x-apollo-operation-name',\n    'apollo-require-preflight',\n];\nconst NON_PREFLIGHTED_CONTENT_TYPES = [\n    'application/x-www-form-urlencoded',\n    'multipart/form-data',\n    'text/plain',\n];\nexport function preventCsrf(headers, csrfPreventionRequestHeaders) {\n    const contentType = headers.get('content-type');\n    if (contentType !== undefined) {\n        const contentTypeParsed = MIMEType.parse(contentType);\n        if (contentTypeParsed === null) {\n            return;\n        }\n        if (!NON_PREFLIGHTED_CONTENT_TYPES.includes(contentTypeParsed.essence)) {\n            return;\n        }\n    }\n    if (csrfPreventionRequestHeaders.some((header) => {\n        const value = headers.get(header);\n        return value !== undefined && value.length > 0;\n    })) {\n        return;\n    }\n    throw new BadRequestError(`This operation has been blocked as a potential Cross-Site Request Forgery ` +\n        `(CSRF). Please either specify a 'content-type' header (with a type that ` +\n        `is not one of ${NON_PREFLIGHTED_CONTENT_TYPES.join(', ')}) or provide ` +\n        `a non-empty value for one of the following headers: ${csrfPreventionRequestHeaders.join(', ')}\\n`);\n}\n//# sourceMappingURL=preventCsrf.js.map/dist/esm/requestPipeline.js7import { createHash } from '@apollo/utils.createhash';\nimport { specifiedRules, getOperationAST, GraphQLError, validate, parse, Kind, } from 'graphql';\nimport { symbolExecutionDispatcherWillResolveField, enablePluginsForSchemaResolvers, symbolUserFieldResolver, } from './utils/schemaInstrumentation.js';\nimport { PersistedQueryNotSupportedError, PersistedQueryNotFoundError, UserInputError, BadRequestError, ValidationError, SyntaxError, OperationResolutionError, } from './internalErrorClasses.js';\nimport { ensureError, normalizeAndFormatErrors, ensureGraphQLError, } from './errorNormalize.js';\nimport { invokeDidStartHook, invokeHooksUntilDefinedAndNonNull, invokeSyncDidStartHook, } from './utils/invokeHooks.js';\nimport { makeGatewayGraphQLRequestContext } from './utils/makeGatewayGraphQLRequestContext.js';\nimport { mergeHTTPGraphQLHead, newHTTPGraphQLHead } from './runHttpQuery.js';\nimport { isDefined } from './utils/isDefined.js';\nimport { executeIncrementally, } from './incrementalDeliveryPolyfill.js';\nimport { HeaderMap } from './utils/HeaderMap.js';\nexport const APQ_CACHE_PREFIX = 'apq:';\nfunction computeQueryHash(query) {\n    return createHash('sha256').update(query).digest('hex');\n}\nfunction isBadUserInputGraphQLError(error) {\n    return (error.nodes?.length === 1 &&\n        error.nodes[0].kind === Kind.VARIABLE_DEFINITION &&\n        (error.message.startsWith(`Variable \"$${error.nodes[0].variable.name.value}\" got invalid value `) ||\n            error.message.startsWith(`Variable \"$${error.nodes[0].variable.name.value}\" of required type `) ||\n            error.message.startsWith(`Variable \"$${error.nodes[0].variable.name.value}\" of non-null type `)));\n}\nexport async function processGraphQLRequest(schemaDerivedData, server, internals, requestContext) {\n    const requestListeners = (await Promise.all(internals.plugins.map((p) => p.requestDidStart?.(requestContext)))).filter(isDefined);\n    const request = requestContext.request;\n    let { query, extensions } = request;\n    let queryHash;\n    requestContext.metrics.persistedQueryHit = false;\n    requestContext.metrics.persistedQueryRegister = false;\n    if (extensions?.persistedQuery) {\n        if (!internals.persistedQueries) {\n            return await sendErrorResponse([new PersistedQueryNotSupportedError()]);\n        }\n        else if (extensions.persistedQuery.version !== 1) {\n            return await sendErrorResponse([\n                new GraphQLError('Unsupported persisted query version', {\n                    extensions: { http: newHTTPGraphQLHead(400) },\n                }),\n            ]);\n        }\n        queryHash = extensions.persistedQuery.sha256Hash;\n        if (query === undefined) {\n            query = await internals.persistedQueries.cache.get(queryHash);\n            if (query) {\n                requestContext.metrics.persistedQueryHit = true;\n            }\n            else {\n                return await sendErrorResponse([new PersistedQueryNotFoundError()]);\n            }\n        }\n        else {\n            const computedQueryHash = computeQueryHash(query);\n            if (queryHash !== computedQueryHash) {\n                return await sendErrorResponse([\n                    new GraphQLError('provided sha does not match query', {\n                        extensions: { http: newHTTPGraphQLHead(400) },\n                    }),\n                ]);\n            }\n            requestContext.metrics.persistedQueryRegister = true;\n        }\n    }\n    else if (query) {\n        queryHash = computeQueryHash(query);\n    }\n    else {\n        return await sendErrorResponse([\n            new BadRequestError('GraphQL operations must contain a non-empty `query` or a `persistedQuery` extension.'),\n        ]);\n    }\n    requestContext.queryHash = queryHash;\n    requestContext.source = query;\n    await Promise.all(requestListeners.map((l) => l.didResolveSource?.(requestContext)));\n    if (schemaDerivedData.documentStore) {\n        try {\n            requestContext.document = await schemaDerivedData.documentStore.get(queryHash);\n        }\n        catch (err) {\n            server.logger.warn('An error occurred while attempting to read from the documentStore. ' +\n                ensureError(err).message);\n        }\n    }\n    if (!requestContext.document) {\n        const parsingDidEnd = await invokeDidStartHook(requestListeners, async (l) => l.parsingDidStart?.(requestContext));\n        try {\n            requestContext.document = parse(query, internals.parseOptions);\n        }\n        catch (syntaxMaybeError) {\n            const error = ensureError(syntaxMaybeError);\n            await parsingDidEnd(error);\n            return await sendErrorResponse([\n                new SyntaxError(ensureGraphQLError(error)),\n            ]);\n        }\n        await parsingDidEnd();\n        const validationDidEnd = await invokeDidStartHook(requestListeners, async (l) => l.validationDidStart?.(requestContext));\n        const validationErrors = validate(schemaDerivedData.schema, requestContext.document, [...specifiedRules, ...internals.validationRules]);\n        if (validationErrors.length === 0) {\n            await validationDidEnd();\n        }\n        else {\n            await validationDidEnd(validationErrors);\n            return await sendErrorResponse(validationErrors.map((error) => new ValidationError(error)));\n        }\n        if (schemaDerivedData.documentStore) {\n            Promise.resolve(schemaDerivedData.documentStore.set(queryHash, requestContext.document)).catch((err) => server.logger.warn('Could not store validated document. ' + err?.message || err));\n        }\n    }\n    const operation = getOperationAST(requestContext.document, request.operationName);\n    requestContext.operation = operation || undefined;\n    requestContext.operationName = operation?.name?.value || null;\n    if (request.http?.method === 'GET' &&\n        operation?.operation &&\n        operation.operation !== 'query') {\n        return await sendErrorResponse([\n            new BadRequestError(`GET requests only support query operations, not ${operation.operation} operations`, {\n                extensions: {\n                    http: { status: 405, headers: new HeaderMap([['allow', 'POST']]) },\n                },\n            }),\n        ]);\n    }\n    try {\n        await Promise.all(requestListeners.map((l) => l.didResolveOperation?.(requestContext)));\n    }\n    catch (err) {\n        return await sendErrorResponse([ensureGraphQLError(err)]);\n    }\n    if (requestContext.metrics.persistedQueryRegister &&\n        internals.persistedQueries) {\n        const ttl = internals.persistedQueries?.ttl;\n        Promise.resolve(internals.persistedQueries.cache.set(queryHash, query, ttl !== undefined\n            ? { ttl: internals.persistedQueries?.ttl }\n            : undefined)).catch(server.logger.warn);\n    }\n    const responseFromPlugin = await invokeHooksUntilDefinedAndNonNull(requestListeners, async (l) => await l.responseForOperation?.(requestContext));\n    if (responseFromPlugin !== null) {\n        requestContext.response.body = responseFromPlugin.body;\n        mergeHTTPGraphQLHead(requestContext.response.http, responseFromPlugin.http);\n    }\n    else {\n        const executionListeners = (await Promise.all(requestListeners.map((l) => l.executionDidStart?.(requestContext)))).filter(isDefined);\n        executionListeners.reverse();\n        if (executionListeners.some((l) => l.willResolveField)) {\n            const invokeWillResolveField = (...args) => invokeSyncDidStartHook(executionListeners, (l) => l.willResolveField?.(...args));\n            Object.defineProperty(requestContext.contextValue, symbolExecutionDispatcherWillResolveField, { value: invokeWillResolveField });\n            if (internals.fieldResolver) {\n                Object.defineProperty(requestContext.contextValue, symbolUserFieldResolver, {\n                    value: internals.fieldResolver,\n                });\n            }\n            enablePluginsForSchemaResolvers(schemaDerivedData.schema);\n        }\n        try {\n            const fullResult = await execute(requestContext);\n            const result = 'singleResult' in fullResult\n                ? fullResult.singleResult\n                : fullResult.initialResult;\n            if (!requestContext.operation) {\n                if (!result.errors?.length) {\n                    throw new Error('Unexpected error: Apollo Server did not resolve an operation but execute did not return errors');\n                }\n                throw new OperationResolutionError(result.errors[0]);\n            }\n            const resultErrors = result.errors?.map((e) => {\n                if (isBadUserInputGraphQLError(e)) {\n                    return new UserInputError(e);\n                }\n                return e;\n            });\n            if (resultErrors) {\n                await didEncounterErrors(resultErrors);\n            }\n            const { formattedErrors, httpFromErrors } = resultErrors\n                ? formatErrors(resultErrors)\n                : { formattedErrors: undefined, httpFromErrors: newHTTPGraphQLHead() };\n            mergeHTTPGraphQLHead(requestContext.response.http, httpFromErrors);\n            if ('singleResult' in fullResult) {\n                requestContext.response.body = {\n                    kind: 'single',\n                    singleResult: {\n                        ...result,\n                        errors: formattedErrors,\n                    },\n                };\n            }\n            else {\n                requestContext.response.body = {\n                    kind: 'incremental',\n                    initialResult: {\n                        ...fullResult.initialResult,\n                        errors: formattedErrors,\n                    },\n                    subsequentResults: fullResult.subsequentResults,\n                };\n            }\n        }\n        catch (executionMaybeError) {\n            const executionError = ensureError(executionMaybeError);\n            await Promise.all(executionListeners.map((l) => l.executionDidEnd?.(executionError)));\n            return await sendErrorResponse([ensureGraphQLError(executionError)]);\n        }\n        await Promise.all(executionListeners.map((l) => l.executionDidEnd?.()));\n    }\n    await invokeWillSendResponse();\n    if (!requestContext.response.body) {\n        throw Error('got to end of processGraphQLRequest without setting body?');\n    }\n    return requestContext.response;\n    async function execute(requestContext) {\n        const { request, document } = requestContext;\n        if (internals.__testing_incrementalExecutionResults) {\n            return internals.__testing_incrementalExecutionResults;\n        }\n        else if (internals.gatewayExecutor) {\n            const result = await internals.gatewayExecutor(makeGatewayGraphQLRequestContext(requestContext, server, internals));\n            return { singleResult: result };\n        }\n        else {\n            const resultOrResults = await executeIncrementally({\n                schema: schemaDerivedData.schema,\n                document,\n                rootValue: typeof internals.rootValue === 'function'\n                    ? internals.rootValue(document)\n                    : internals.rootValue,\n                contextValue: requestContext.contextValue,\n                variableValues: request.variables,\n                operationName: request.operationName,\n                fieldResolver: internals.fieldResolver,\n            });\n            if ('initialResult' in resultOrResults) {\n                return {\n                    initialResult: resultOrResults.initialResult,\n                    subsequentResults: formatErrorsInSubsequentResults(resultOrResults.subsequentResults),\n                };\n            }\n            else {\n                return { singleResult: resultOrResults };\n            }\n        }\n    }\n    async function* formatErrorsInSubsequentResults(results) {\n        for await (const result of results) {\n            const payload = result.incremental\n                ? {\n                    ...result,\n                    incremental: await seriesAsyncMap(result.incremental, async (incrementalResult) => {\n                        const { errors } = incrementalResult;\n                        if (errors) {\n                            await Promise.all(requestListeners.map((l) => l.didEncounterSubsequentErrors?.(requestContext, errors)));\n                            return {\n                                ...incrementalResult,\n                                errors: formatErrors(errors).formattedErrors,\n                            };\n                        }\n                        return incrementalResult;\n                    }),\n                }\n                : result;\n            await Promise.all(requestListeners.map((l) => l.willSendSubsequentPayload?.(requestContext, payload)));\n            yield payload;\n        }\n    }\n    async function invokeWillSendResponse() {\n        await Promise.all(requestListeners.map((l) => l.willSendResponse?.(requestContext)));\n    }\n    async function didEncounterErrors(errors) {\n        requestContext.errors = errors;\n        return await Promise.all(requestListeners.map((l) => l.didEncounterErrors?.(requestContext)));\n    }\n    async function sendErrorResponse(errors) {\n        await didEncounterErrors(errors);\n        const { formattedErrors, httpFromErrors } = formatErrors(errors);\n        requestContext.response.body = {\n            kind: 'single',\n            singleResult: {\n                errors: formattedErrors,\n            },\n        };\n        mergeHTTPGraphQLHead(requestContext.response.http, httpFromErrors);\n        if (!requestContext.response.http.status) {\n            requestContext.response.http.status = 500;\n        }\n        await invokeWillSendResponse();\n        return requestContext.response;\n    }\n    function formatErrors(errors) {\n        return normalizeAndFormatErrors(errors, {\n            formatError: internals.formatError,\n            includeStacktraceInErrorResponses: internals.includeStacktraceInErrorResponses,\n        });\n    }\n}\nasync function seriesAsyncMap(ts, fn) {\n    const us = [];\n    for (const t of ts) {\n        const u = await fn(t);\n        us.push(u);\n    }\n    return us;\n}\n//# sourceMappingURL=requestPipeline.js.map//dist/esm/plugin/landingPage/default/types.d.ts\u0007\u0011export interface ApolloServerPluginLandingPageDefaultBaseOptions {\n    version?: string;\n    footer?: boolean;\n    document?: string;\n    variables?: Record<string, any>;\n    headers?: Record<string, string>;\n    includeCookies?: boolean;\n    __internal_apolloStudioEnv__?: 'staging' | 'prod';\n}\nexport interface ApolloServerPluginNonEmbeddedLandingPageLocalDefaultOptions extends ApolloServerPluginLandingPageDefaultBaseOptions {\n    embed: false;\n}\nexport interface ApolloServerPluginNonEmbeddedLandingPageProductionDefaultOptions extends ApolloServerPluginLandingPageDefaultBaseOptions {\n    graphRef?: string;\n    embed?: false;\n}\nexport interface ApolloServerPluginEmbeddedLandingPageLocalDefaultOptions extends ApolloServerPluginLandingPageDefaultBaseOptions {\n    embed?: true;\n}\nexport interface ApolloServerPluginEmbeddedLandingPageProductionDefaultOptions extends ApolloServerPluginLandingPageDefaultBaseOptions {\n    graphRef: string;\n    embed: true | EmbeddableExplorerOptions;\n}\ndeclare type EmbeddableExplorerOptions = {\n    displayOptions?: {\n        showHeadersAndEnvVars: boolean;\n        docsPanelState: 'open' | 'closed';\n        theme: 'light' | 'dark';\n    };\n    persistExplorerState: boolean;\n};\nexport declare type ApolloServerPluginLandingPageLocalDefaultOptions = ApolloServerPluginEmbeddedLandingPageLocalDefaultOptions | ApolloServerPluginNonEmbeddedLandingPageLocalDefaultOptions;\nexport declare type ApolloServerPluginLandingPageProductionDefaultOptions = ApolloServerPluginEmbeddedLandingPageProductionDefaultOptions | ApolloServerPluginNonEmbeddedLandingPageProductionDefaultOptions;\nexport declare type LandingPageConfig = ApolloServerPluginLandingPageLocalDefaultOptions | ApolloServerPluginLandingPageProductionDefaultOptions;\nexport {};\n//# sourceMappingURL=types.d.ts.map\"/dist/esm/utils/HeaderMap.d.ts.map\u0001M{\"version\":3,\"file\":\"HeaderMap.d.ts\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/utils/HeaderMap.ts\"],\"names\":[],\"mappings\":\"AAAA,qBAAa,SAAU,SAAQ,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IACvC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAIrC,GAAG,CAAC,GAAG,EAAE,MAAM;IAIf,MAAM,CAAC,GAAG,EAAE,MAAM;IAIlB,GAAG,CAAC,GAAG,EAAE,MAAM;CAGzB\"}?/dist/cjs/plugin/usageReporting/defaultSendOperationsAsTrace.js\u0007\u0010\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.defaultSendOperationsAsTrace = void 0;\nconst lru_cache_1 = __importDefault(require(\"lru-cache\"));\nconst iterateOverTrace_js_1 = require(\"./iterateOverTrace.js\");\nconst durationHistogram_js_1 = require(\"./durationHistogram.js\");\nfunction defaultSendOperationsAsTrace() {\n    const cache = new lru_cache_1.default({\n        maxSize: Math.pow(2, 20),\n        sizeCalculation: (_val, key) => {\n            return (key && Buffer.byteLength(key)) || 0;\n        },\n    });\n    return (trace, statsReportKey) => {\n        const endTimeSeconds = trace.endTime?.seconds;\n        if (endTimeSeconds == null) {\n            throw Error('programming error: endTime not set on trace');\n        }\n        const hasErrors = traceHasErrors(trace);\n        const cacheKey = JSON.stringify([\n            statsReportKey,\n            durationHistogram_js_1.DurationHistogram.durationToBucket(trace.durationNs),\n            Math.floor(endTimeSeconds / 60),\n            hasErrors ? Math.floor(endTimeSeconds / 5) : '',\n        ]);\n        if (cache.get(cacheKey)) {\n            return false;\n        }\n        cache.set(cacheKey, true);\n        return true;\n    };\n}\nexports.defaultSendOperationsAsTrace = defaultSendOperationsAsTrace;\nfunction traceHasErrors(trace) {\n    let hasErrors = false;\n    function traceNodeStats(node) {\n        if ((node.error?.length ?? 0) > 0) {\n            hasErrors = true;\n        }\n        return hasErrors;\n    }\n    (0, iterateOverTrace_js_1.iterateOverTrace)(trace, traceNodeStats, false);\n    return hasErrors;\n}\n//# sourceMappingURL=defaultSendOperationsAsTrace.js.map /dist/cjs/requestPipeline.js.map,P{\"version\":3,\"file\":\"requestPipeline.js\",\"sourceRoot\":\"\",\"sources\":[\"../../src/requestPipeline.ts\"],\"names\":[],\"mappings\":\"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\"}4/dist/esm/plugin/usageReporting/durationHistogram.js\bexport class DurationHistogram {\n    constructor(options) {\n        const initSize = options?.initSize || 74;\n        const buckets = options?.buckets;\n        const arrayInitSize = Math.max(buckets?.length || 0, initSize);\n        this.buckets = Array(arrayInitSize).fill(0);\n        if (buckets) {\n            buckets.forEach((val, index) => (this.buckets[index] = val));\n        }\n    }\n    toArray() {\n        let bufferedZeroes = 0;\n        const outputArray = [];\n        for (const value of this.buckets) {\n            if (value === 0) {\n                bufferedZeroes++;\n            }\n            else {\n                if (bufferedZeroes === 1) {\n                    outputArray.push(0);\n                }\n                else if (bufferedZeroes !== 0) {\n                    outputArray.push(-bufferedZeroes);\n                }\n                outputArray.push(Math.floor(value));\n                bufferedZeroes = 0;\n            }\n        }\n        return outputArray;\n    }\n    static durationToBucket(durationNs) {\n        const log = Math.log(durationNs / 1000.0);\n        const unboundedBucket = Math.ceil(log / DurationHistogram.EXPONENT_LOG);\n        return unboundedBucket <= 0 || Number.isNaN(unboundedBucket)\n            ? 0\n            : unboundedBucket >= DurationHistogram.BUCKET_COUNT\n                ? DurationHistogram.BUCKET_COUNT - 1\n                : unboundedBucket;\n    }\n    incrementDuration(durationNs, value = 1) {\n        this.incrementBucket(DurationHistogram.durationToBucket(durationNs), value);\n        return this;\n    }\n    incrementBucket(bucket, value = 1) {\n        if (bucket >= DurationHistogram.BUCKET_COUNT) {\n            throw Error('Bucket is out of bounds of the buckets array');\n        }\n        if (bucket >= this.buckets.length) {\n            const oldLength = this.buckets.length;\n            this.buckets.length = bucket + 1;\n            this.buckets.fill(0, oldLength);\n        }\n        this.buckets[bucket] += value;\n    }\n    combine(otherHistogram) {\n        for (let i = 0; i < otherHistogram.buckets.length; i++) {\n            this.incrementBucket(i, otherHistogram.buckets[i]);\n        }\n    }\n}\nDurationHistogram.BUCKET_COUNT = 384;\nDurationHistogram.EXPONENT_LOG = Math.log(1.1);\n//# sourceMappingURL=durationHistogram.js.map//dist/esm/plugin/drainHttpServer/index.d.ts.map\u0001|{\"version\":3,\"file\":\"index.d.ts\",\"sourceRoot\":\"\",\"sources\":[\"../../../../src/plugin/drainHttpServer/index.ts\"],\"names\":[],\"mappings\":\";AAAA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAMvE,MAAM,WAAW,wCAAwC;IAIvD,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC;IAKxB,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC;AAQD,wBAAgB,iCAAiC,CAC/C,OAAO,EAAE,wCAAwC,GAChD,kBAAkB,CAWpB\"}(/dist/esm/determineApolloConfig.d.ts.map\u0001\u000b{\"version\":3,\"file\":\"determineApolloConfig.d.ts\",\"sourceRoot\":\"\",\"sources\":[\"../../src/determineApolloConfig.ts\"],\"names\":[],\"mappings\":\"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAIhF,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,iBAAiB,GAAG,SAAS,GACnC,YAAY,CA2Dd\"}-/dist/esm/utils/UnreachableCaseError.d.ts.map{\"version\":3,\"file\":\"UnreachableCaseError.d.ts\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/utils/UnreachableCaseError.ts\"],\"names\":[],\"mappings\":\"AAKA,qBAAa,oBAAqB,SAAQ,KAAK;gBACjC,GAAG,EAAE,KAAK;CAGvB\"}?/dist/esm/plugin/usageReporting/defaultSendOperationsAsTrace.js\u0005iimport LRUCache from 'lru-cache';\nimport { iterateOverTrace } from './iterateOverTrace.js';\nimport { DurationHistogram } from './durationHistogram.js';\nexport function defaultSendOperationsAsTrace() {\n    const cache = new LRUCache({\n        maxSize: Math.pow(2, 20),\n        sizeCalculation: (_val, key) => {\n            return (key && Buffer.byteLength(key)) || 0;\n        },\n    });\n    return (trace, statsReportKey) => {\n        const endTimeSeconds = trace.endTime?.seconds;\n        if (endTimeSeconds == null) {\n            throw Error('programming error: endTime not set on trace');\n        }\n        const hasErrors = traceHasErrors(trace);\n        const cacheKey = JSON.stringify([\n            statsReportKey,\n            DurationHistogram.durationToBucket(trace.durationNs),\n            Math.floor(endTimeSeconds / 60),\n            hasErrors ? Math.floor(endTimeSeconds / 5) : '',\n        ]);\n        if (cache.get(cacheKey)) {\n            return false;\n        }\n        cache.set(cacheKey, true);\n        return true;\n    };\n}\nfunction traceHasErrors(trace) {\n    let hasErrors = false;\n    function traceNodeStats(node) {\n        if ((node.error?.length ?? 0) > 0) {\n            hasErrors = true;\n        }\n        return hasErrors;\n    }\n    iterateOverTrace(trace, traceNodeStats, false);\n    return hasErrors;\n}\n//# sourceMappingURL=defaultSendOperationsAsTrace.js.map/src/externalTypes/graphql.ts\b&/**\n * This file exports types related specifically to GraphQL execution, most\n * notably `GraphQLRequest` and `GraphQLResponse`, used most heavily by\n * `executeHTTPGraphQLRequest` and `executeOperation`. The\n * `responseForOperation` plugin hook also returns a `GraphQLResponse`.\n */\nimport type { FormattedExecutionResult } from 'graphql';\nimport type { BaseContext } from './context.js';\nimport type { HTTPGraphQLHead, HTTPGraphQLRequest } from './http.js';\nimport type { WithRequired } from '@apollo/utils.withrequired';\nimport type {\n  GraphQLExperimentalFormattedInitialIncrementalExecutionResult,\n  GraphQLExperimentalFormattedSubsequentIncrementalExecutionResult,\n} from './incrementalDeliveryPolyfill.js';\n\nexport interface GraphQLRequest<\n  TVariables extends VariableValues = VariableValues,\n> {\n  query?: string;\n  operationName?: string;\n  variables?: TVariables;\n  extensions?: Record<string, any>;\n  http?: HTTPGraphQLRequest;\n}\n\nexport type VariableValues = { [name: string]: any };\n\n// A GraphQL response can either be a single result, or an initial result\n// followed by a stream of subsequent results. The latter occurs when the\n// GraphQL operation uses incremental delivery directives such as `@defer` or\n// `@stream`. Note that incremental delivery currently requires using a\n// pre-release of graphql-js v17.\nexport type GraphQLResponseBody<TData = Record<string, unknown>> =\n  | {\n      kind: 'single';\n      singleResult: FormattedExecutionResult<TData>;\n    }\n  | {\n      kind: 'incremental';\n      initialResult: GraphQLExperimentalFormattedInitialIncrementalExecutionResult;\n      subsequentResults: AsyncIterable<GraphQLExperimentalFormattedSubsequentIncrementalExecutionResult>;\n    };\n\nexport type GraphQLInProgressResponse<TData = Record<string, unknown>> = {\n  http: HTTPGraphQLHead;\n  body?: GraphQLResponseBody<TData>;\n};\n\nexport type GraphQLResponse<TData = Record<string, unknown>> = WithRequired<\n  GraphQLInProgressResponse<TData>,\n  'body'\n>;\nexport interface ExecuteOperationOptions<TContext extends BaseContext> {\n  contextValue?: TContext;\n}\n\"/dist/esm/utils/schemaManager.d.ts\u0005\u001bimport type { Logger } from '@apollo/utils.logger';\nimport type { GraphQLSchema } from 'graphql';\nimport type { GatewayExecutor, GatewayInterface, GatewayUnsubscriber } from '@apollo/server-gateway-interface';\nimport type { SchemaDerivedData } from '../ApolloServer.js';\nimport type { ApolloConfig, GraphQLSchemaContext } from '../externalTypes/index.js';\ndeclare type SchemaDerivedDataProvider = (apiSchema: GraphQLSchema) => SchemaDerivedData;\nexport declare class SchemaManager {\n    private readonly logger;\n    private readonly schemaDerivedDataProvider;\n    private readonly onSchemaLoadOrUpdateListeners;\n    private isStopped;\n    private schemaDerivedData?;\n    private schemaContext?;\n    private readonly modeSpecificState;\n    constructor(options: ({\n        gateway: GatewayInterface;\n        apolloConfig: ApolloConfig;\n    } | {\n        apiSchema: GraphQLSchema;\n    }) & {\n        logger: Logger;\n        schemaDerivedDataProvider: SchemaDerivedDataProvider;\n    });\n    start(): Promise<GatewayExecutor | null>;\n    onSchemaLoadOrUpdate(callback: (schemaContext: GraphQLSchemaContext) => void): GatewayUnsubscriber;\n    getSchemaDerivedData(): SchemaDerivedData;\n    stop(): Promise<void>;\n    private processSchemaLoadOrUpdateEvent;\n}\nexport {};\n//# sourceMappingURL=schemaManager.d.ts.map/dist/esm/index.d.tsıexport { ApolloServer } from './ApolloServer.js';\nexport { HeaderMap } from './utils/HeaderMap.js';\nexport * from './externalTypes/index.js';\n//# sourceMappingURL=index.d.ts.map/src/express4/index.ts\u000fimport type { WithRequired } from '@apollo/utils.withrequired';\nimport type express from 'express';\nimport type { ApolloServer } from '../index.js';\nimport type {\n  BaseContext,\n  ContextFunction,\n  HTTPGraphQLRequest,\n} from '../externalTypes/index.js';\nimport { parse as urlParse } from 'url';\n\nexport interface ExpressContextFunctionArgument {\n  req: express.Request;\n  res: express.Response;\n}\n\nexport interface ExpressMiddlewareOptions<TContext extends BaseContext> {\n  context?: ContextFunction<[ExpressContextFunctionArgument], TContext>;\n}\n\nexport function expressMiddleware(\n  server: ApolloServer<BaseContext>,\n  options?: ExpressMiddlewareOptions<BaseContext>,\n): express.RequestHandler;\nexport function expressMiddleware<TContext extends BaseContext>(\n  server: ApolloServer<TContext>,\n  options: WithRequired<ExpressMiddlewareOptions<TContext>, 'context'>,\n): express.RequestHandler;\nexport function expressMiddleware<TContext extends BaseContext>(\n  server: ApolloServer<TContext>,\n  options?: ExpressMiddlewareOptions<TContext>,\n): express.RequestHandler {\n  server.assertStarted('expressMiddleware()');\n\n  // This `any` is safe because the overload above shows that context can\n  // only be left out if you're using BaseContext as your context, and {} is a\n  // valid BaseContext.\n  const defaultContext: ContextFunction<\n    [ExpressContextFunctionArgument],\n    any\n  > = async () => ({});\n\n  const context: ContextFunction<[ExpressContextFunctionArgument], TContext> =\n    options?.context ?? defaultContext;\n\n  return (req, res, next) => {\n    if (!req.body) {\n      // The json body-parser *always* sets req.body to {} if it's unset (even\n      // if the Content-Type doesn't match), so if it isn't set, you probably\n      // forgot to set up body-parser. (Note that this may change in the future\n      // body-parser@2.)\n      res.status(500);\n      res.send(\n        '`req.body` is not set; this probably means you forgot to set up the ' +\n          '`body-parser` middleware before the Apollo Server middleware.',\n      );\n      return;\n    }\n\n    const headers = new Map<string, string>();\n    for (const [key, value] of Object.entries(req.headers)) {\n      if (value !== undefined) {\n        // Node/Express headers can be an array or a single value. We join\n        // multi-valued headers with `, ` just like the Fetch API's `Headers`\n        // does. We assume that keys are already lower-cased (as per the Node\n        // docs on IncomingMessage.headers) and so we don't bother to lower-case\n        // them or combine across multiple keys that would lower-case to the\n        // same value.\n        headers.set(key, Array.isArray(value) ? value.join(', ') : value);\n      }\n    }\n\n    const httpGraphQLRequest: HTTPGraphQLRequest = {\n      method: req.method.toUpperCase(),\n      headers,\n      search: urlParse(req.url).search ?? '',\n      body: req.body,\n    };\n\n    server\n      .executeHTTPGraphQLRequest({\n        httpGraphQLRequest,\n        context: () => context({ req, res }),\n      })\n      .then(async (httpGraphQLResponse) => {\n        for (const [key, value] of httpGraphQLResponse.headers) {\n          res.setHeader(key, value);\n        }\n        res.statusCode = httpGraphQLResponse.status || 200;\n\n        if (httpGraphQLResponse.body.kind === 'complete') {\n          res.send(httpGraphQLResponse.body.string);\n          return;\n        }\n\n        for await (const chunk of httpGraphQLResponse.body.asyncIterator) {\n          res.write(chunk);\n          // Express/Node doesn't define a way of saying \"it's time to send this\n          // data over the wire\"... but the popular `compression` middleware\n          // (which implements `accept-encoding: gzip` and friends) does, by\n          // monkey-patching a `flush` method onto the response. So we call it\n          // if it's there.\n          if (typeof (res as any).flush === 'function') {\n            (res as any).flush();\n          }\n        }\n        res.end();\n      })\n      .catch(next);\n  };\n}\n)/dist/esm/plugin/schemaReporting/index.js\u0013import os from 'os';\nimport { internalPlugin } from '../../internalPlugin.js';\nimport { v4 as uuidv4 } from 'uuid';\nimport { printSchema, validateSchema, buildSchema } from 'graphql';\nimport { SchemaReporter } from './schemaReporter.js';\nimport { schemaIsFederated } from '../schemaIsFederated.js';\nimport { packageVersion } from '../../generated/packageVersion.js';\nimport { computeCoreSchemaHash } from '../../utils/computeCoreSchemaHash.js';\nexport function ApolloServerPluginSchemaReporting({ initialDelayMaxMs, overrideReportedSchema, endpointUrl, fetcher, } = Object.create(null)) {\n    const bootId = uuidv4();\n    return internalPlugin({\n        __internal_plugin_id__: 'SchemaReporting',\n        __is_disabled_plugin__: false,\n        async serverWillStart({ apollo, schema, logger }) {\n            const { key, graphRef } = apollo;\n            if (!key) {\n                throw Error('To use ApolloServerPluginSchemaReporting, you must provide an Apollo API ' +\n                    'key, via the APOLLO_KEY environment variable or via `new ApolloServer({apollo: {key})`');\n            }\n            if (!graphRef) {\n                throw Error('To use ApolloServerPluginSchemaReporting, you must provide your graph ref (eg, ' +\n                    \"'my-graph-id@my-graph-variant'). Try setting the APOLLO_GRAPH_REF environment \" +\n                    'variable or passing `new ApolloServer({apollo: {graphRef}})`.');\n            }\n            if (overrideReportedSchema) {\n                try {\n                    const validationErrors = validateSchema(buildSchema(overrideReportedSchema, { noLocation: true }));\n                    if (validationErrors.length) {\n                        throw new Error(validationErrors.map((error) => error.message).join('\\n'));\n                    }\n                }\n                catch (err) {\n                    throw new Error('The schema provided to overrideReportedSchema failed to parse or ' +\n                        `validate: ${err.message}`);\n                }\n            }\n            if (schemaIsFederated(schema)) {\n                throw Error([\n                    'Schema reporting is not yet compatible with federated services.',\n                    \"If you're interested in using schema reporting with federated\",\n                    'services, please contact Apollo support. To set up managed federation, see',\n                    'https://go.apollo.dev/s/managed-federation',\n                ].join(' '));\n            }\n            if (endpointUrl !== undefined) {\n                logger.info(`Apollo schema reporting: schema reporting URL override: ${endpointUrl}`);\n            }\n            const baseSchemaReport = {\n                bootId,\n                graphRef,\n                platform: process.env.APOLLO_SERVER_PLATFORM || 'local',\n                runtimeVersion: `node ${process.version}`,\n                userVersion: process.env.APOLLO_SERVER_USER_VERSION,\n                serverId: process.env.APOLLO_SERVER_ID || process.env.HOSTNAME || os.hostname(),\n                libraryVersion: `@apollo/server@${packageVersion}`,\n            };\n            let currentSchemaReporter;\n            return {\n                schemaDidLoadOrUpdate({ apiSchema, coreSupergraphSdl }) {\n                    if (overrideReportedSchema !== undefined) {\n                        if (currentSchemaReporter) {\n                            return;\n                        }\n                        else {\n                            logger.info('Apollo schema reporting: schema to report has been overridden');\n                        }\n                    }\n                    const coreSchema = overrideReportedSchema ??\n                        coreSupergraphSdl ??\n                        printSchema(apiSchema);\n                    const coreSchemaHash = computeCoreSchemaHash(coreSchema);\n                    const schemaReport = {\n                        ...baseSchemaReport,\n                        coreSchemaHash,\n                    };\n                    currentSchemaReporter?.stop();\n                    currentSchemaReporter = new SchemaReporter({\n                        schemaReport,\n                        coreSchema,\n                        apiKey: key,\n                        endpointUrl,\n                        logger,\n                        initialReportingDelayInMs: Math.floor(Math.random() * (initialDelayMaxMs ?? 10000)),\n                        fallbackReportingDelayInMs: 20000,\n                        fetcher,\n                    });\n                    currentSchemaReporter.start();\n                    logger.info('Apollo schema reporting: reporting a new schema to Studio! See your graph at ' +\n                        `https://studio.apollographql.com/graph/${encodeURI(graphRef)}/ with server info ${JSON.stringify(schemaReport)}`);\n                },\n                async serverWillStop() {\n                    currentSchemaReporter?.stop();\n                },\n            };\n        },\n    });\n}\n//# sourceMappingURL=index.js.map./src/utils/makeGatewayGraphQLRequestContext.ts!import type {\n  GatewayGraphQLRequest,\n  GatewayGraphQLRequestContext,\n  GatewayGraphQLResponse,\n  GatewaySchemaHash,\n} from '@apollo/server-gateway-interface';\nimport type { FetcherHeaders } from '@apollo/utils.fetcher';\nimport type { ApolloServer, ApolloServerInternals } from '../ApolloServer';\nimport type {\n  BaseContext,\n  GraphQLRequestContextExecutionDidStart,\n} from '../externalTypes';\nimport type { HeaderMap } from './HeaderMap';\n\n// Apollo Gateway's API included `GraphQLRequestContext` from AS2/AS3.\n// Specifically, a request context is passed to the main executor method, which\n// it then exposes to user-configurable `GraphQLDataSource`s.\n// `GraphQLRequestContext` has changed in incompatible ways in AS4; for example,\n// we represent HTTP messages using our own data structures rather than Fetches,\n// and some fields have been removed because they relate to features that don't\n// exist any more.\n//\n// In general, the future of Apollo's development is in Apollo Router, not\n// Gateway. So rather than have a big transition where a new version of Gateway\n// supports AS4's GraphQLRequestContext instead of AS3's, we simply teach AS4\n// how to produce AS3-style GraphQLRequestContext objects specifically for use\n// by Gateway. We have changed Gateway to get its TS type definitions from a new\n// package rather than from AS3 itself, so that Gateway no longer needs to\n// depend on Apollo Server.\n//\n// This function turn an AS4 GraphQLRequestContext into a\n// GatewayGraphQLRequestContext (which is basically an AS3\n// GraphQLRequestContext).\n//\n// You might think that *after* invoking the executor, we would then need to\n// propagate any changes made by the gateway back onto the \"real\"\n// GraphQLRequestContext. It turns out that for each bit of data on the request\n// context, this is either unnecessary or impossible. (We don't need to support\n// use cases where people break type safe, eg by changing the values of readonly\n// fields.) Here's why:\n//\n// Many fields on GatewayGraphQLRequestContext are declared readonly and their\n// values are taken directly from the real GraphQLRequestContext. This means\n// that gateways should not change the field's value, and any mutations of the\n// object stored in the field (say, calling\n// `requestContext.overallCachePolicy.restrict`, as RemoteGraphQLDataSource\n// does) already take effect.\n//\n//  The only two fields not declared as readonly are `logger` and `debug`.\n//\n// Technically, a gateway implementation could set `requestContext.logger` to a\n// different Logger without breaking the TypeScript declarations. In AS4 we\n// don't actually have a requestContext.logger; we have `readonly\n// requestContext.server` and `readonly server.logger`. So there's not an easy\n// way for us to carry out this change: AS4 just doesn't let gateway or plugins\n// override the server's logger (and generally doesn't allow the logger to\n// change after the server is created), which seems like a simpler model. If it\n// turns out there is a real use case for the gateway to be able to change the\n// overall logger for the request as seen by plugins, we can fix that later.\n//\n// Similarly, it's not clear what the intended use case of mutating `debug` in\n// gateway would be. `debug` has now mostly changed into\n// `includeStacktraceInErrorResponses`. So perhaps this could be used to let you\n// decide whether or not to include the stacktrace on a per-operation basis...\n// but you can also use `formatError` or `didEncounterErrors` for this perhaps?\n// In any case, AS4 doesn't track `includeStacktraceInErrorResponses` on a\n// per-operation basis; if we find a use case for this we can add it later.\n//\n// So we'll just ignore changes to `logger` and `debug`.\n//\n// Next, there's `request`. We don't know of a use case for mutating the\n// *request* at execution time. If there was a real use case, we could add a\n// function that copies pieces back from the gateway `request` to the AS4\n// request, but we're not bothering to yet.\n//\n// Finally, there's `response`. Sure, the executor *could* mutate `response`.\n// But the main thing the executor is doing is *returning* a response, which\n// then semi-overwrites `requestContext.response` anyway. So it doesn't seem\n// like we need to support `executor` *also* overwriting response. Yet again, we\n// can fix this if it turns out it's necessary. (That said, the executor could\n// in theory write HTTP response headers or status, so we make sure to hook them\n// up directly to the appropriate data in the real GraphQLRequestContext.)\n//\n// So all in all, it looks like it's OK for this to be a \"one-way\" conversion.\nexport function makeGatewayGraphQLRequestContext<TContext extends BaseContext>(\n  as4RequestContext: GraphQLRequestContextExecutionDidStart<TContext>,\n  server: ApolloServer<TContext>,\n  internals: ApolloServerInternals<TContext>,\n): GatewayGraphQLRequestContext {\n  const request: GatewayGraphQLRequest = {};\n  if ('query' in as4RequestContext.request) {\n    request.query = as4RequestContext.request.query;\n  }\n  if ('operationName' in as4RequestContext.request) {\n    request.operationName = as4RequestContext.request.operationName;\n  }\n  if ('variables' in as4RequestContext.request) {\n    request.variables = as4RequestContext.request.variables;\n  }\n  if ('extensions' in as4RequestContext.request) {\n    request.extensions = as4RequestContext.request.extensions;\n  }\n  if (as4RequestContext.request.http) {\n    const as4http = as4RequestContext.request.http;\n    const needQuestion =\n      as4http.search !== '' && !as4http.search.startsWith('?');\n    request.http = {\n      method: as4http.method,\n      // As of AS4, we no longer attempt to track complete URLs (just the search\n      // parameters used in GET requests). So we have to fake them for Gateway.\n      url: `https://unknown-url.invalid/${needQuestion ? '?' : ''}${\n        as4http.search\n      }`,\n      headers: new FetcherHeadersForHeaderMap(as4http.headers),\n    };\n  }\n\n  const response: GatewayGraphQLResponse = {\n    http: {\n      headers: new FetcherHeadersForHeaderMap(\n        as4RequestContext.response.http.headers,\n      ),\n      get status() {\n        return as4RequestContext.response.http.status;\n      },\n      set status(newStatus) {\n        as4RequestContext.response.http.status = newStatus;\n      },\n    },\n    // We leave off `body` because it hasn't been set yet.\n  };\n\n  return {\n    request,\n    response,\n    logger: server.logger,\n    schema: as4RequestContext.schema,\n    // For the sake of typechecking, we still provide this field, but we don't\n    // calculate it. If somebody really needs it in their gateway\n    // implementation, they're welcome to copy\n    // https://github.com/apollographql/apollo-server/blob/3f218e78/packages/apollo-server-core/src/utils/schemaHash.ts\n    // into their code.\n    schemaHash:\n      'schemaHash no longer exists in Apollo Server 4' as GatewaySchemaHash,\n    context: as4RequestContext.contextValue,\n    cache: server.cache,\n    queryHash: as4RequestContext.queryHash,\n    document: as4RequestContext.document,\n    source: as4RequestContext.source,\n    operationName: as4RequestContext.operationName,\n    operation: as4RequestContext.operation,\n    errors: as4RequestContext.errors,\n    metrics: as4RequestContext.metrics,\n    debug: internals.includeStacktraceInErrorResponses,\n    overallCachePolicy: as4RequestContext.overallCachePolicy,\n    requestIsBatched: as4RequestContext.requestIsBatched,\n  };\n}\n\n// An implementation of the W3C-style headers class used by Gateway (and AS3),\n// backed by AS4's HeaderMap. Changes are written directly to the HeaderMap, so\n// any concurrent writes to the underlying HeaderMap (eg from a plugin) can be\n// seen immediately by the gateway and vice versa.\nclass FetcherHeadersForHeaderMap implements FetcherHeaders {\n  constructor(private map: HeaderMap) {}\n  append(name: string, value: string) {\n    if (this.map.has(name)) {\n      this.map.set(name, this.map.get(name) + ', ' + value);\n    } else {\n      this.map.set(name, value);\n    }\n  }\n  delete(name: string) {\n    this.map.delete(name);\n  }\n  get(name: string): string | null {\n    return this.map.get(name) ?? null;\n  }\n  has(name: string): boolean {\n    return this.map.has(name);\n  }\n  set(name: string, value: string) {\n    this.map.set(name, value);\n  }\n  entries(): Iterator<[string, string]> {\n    return this.map.entries();\n  }\n  keys(): Iterator<string> {\n    return this.map.keys();\n  }\n  values(): Iterator<string> {\n    return this.map.values();\n  }\n  [Symbol.iterator](): Iterator<[string, string]> {\n    return this.map.entries();\n  }\n}\n/dist/cjs/utils/isDefined.js\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isDefined = void 0;\nfunction isDefined(t) {\n    return t != null;\n}\nexports.isDefined = isDefined;\n//# sourceMappingURL=isDefined.js.map:/dist/esm/plugin/usageReporting/durationHistogram.d.ts.map\u0002{{\"version\":3,\"file\":\"durationHistogram.d.ts\",\"sourceRoot\":\"\",\"sources\":[\"../../../../src/plugin/usageReporting/durationHistogram.ts\"],\"names\":[],\"mappings\":\"AAAA,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AACD,qBAAa,iBAAiB;IAO5B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAW;IACnC,MAAM,CAAC,QAAQ,CAAC,YAAY,OAAO;IACnC,MAAM,CAAC,QAAQ,CAAC,YAAY,SAAiB;IAE7C,OAAO,IAAI,MAAM,EAAE;IAoBnB,MAAM,CAAC,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;IAYnD,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,SAAI,GAAG,iBAAiB;IAKnE,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,SAAI;IAgBzC,OAAO,CAAC,cAAc,EAAE,iBAAiB;gBAM7B,OAAO,CAAC,EAAE,wBAAwB;CAY/C\"}$/dist/esm/externalTypes/plugins.d.ts\u0012\u000bimport type { KeyValueCache } from '@apollo/utils.keyvaluecache';\nimport type { Logger } from '@apollo/utils.logger';\nimport type { GraphQLError, GraphQLResolveInfo, GraphQLSchema } from 'graphql';\nimport type { ApolloConfig } from './constructor.js';\nimport type { BaseContext } from './context.js';\nimport type { GraphQLResponse } from './graphql.js';\nimport type { GraphQLExperimentalFormattedSubsequentIncrementalExecutionResult } from './incrementalDeliveryPolyfill.js';\nimport type { GraphQLRequestContext, GraphQLRequestContextDidEncounterErrors, GraphQLRequestContextDidEncounterSubsequentErrors, GraphQLRequestContextDidResolveOperation, GraphQLRequestContextDidResolveSource, GraphQLRequestContextExecutionDidStart, GraphQLRequestContextParsingDidStart, GraphQLRequestContextResponseForOperation, GraphQLRequestContextValidationDidStart, GraphQLRequestContextWillSendResponse, GraphQLRequestContextWillSendSubsequentPayload } from './requestPipeline.js';\nexport interface GraphQLServerContext {\n    readonly logger: Logger;\n    readonly cache: KeyValueCache<string>;\n    schema: GraphQLSchema;\n    apollo: ApolloConfig;\n    startedInBackground: boolean;\n}\nexport interface GraphQLSchemaContext {\n    apiSchema: GraphQLSchema;\n    coreSupergraphSdl?: string;\n}\nexport interface ApolloServerPlugin<in TContext extends BaseContext = BaseContext> {\n    serverWillStart?(service: GraphQLServerContext): Promise<GraphQLServerListener | void>;\n    requestDidStart?(requestContext: GraphQLRequestContext<TContext>): Promise<GraphQLRequestListener<TContext> | void>;\n    unexpectedErrorProcessingRequest?({ requestContext, error, }: {\n        requestContext: GraphQLRequestContext<TContext>;\n        error: Error;\n    }): Promise<void>;\n    contextCreationDidFail?({ error }: {\n        error: Error;\n    }): Promise<void>;\n    invalidRequestWasReceived?({ error }: {\n        error: Error;\n    }): Promise<void>;\n    startupDidFail?({ error }: {\n        error: Error;\n    }): Promise<void>;\n}\nexport interface GraphQLServerListener {\n    schemaDidLoadOrUpdate?(schemaContext: GraphQLSchemaContext): void;\n    drainServer?(): Promise<void>;\n    serverWillStop?(): Promise<void>;\n    renderLandingPage?(): Promise<LandingPage>;\n}\nexport interface LandingPage {\n    html: string;\n}\nexport declare type GraphQLRequestListenerParsingDidEnd = (err?: Error) => Promise<void>;\nexport declare type GraphQLRequestListenerValidationDidEnd = (err?: ReadonlyArray<Error>) => Promise<void>;\nexport declare type GraphQLRequestListenerExecutionDidEnd = (err?: Error) => Promise<void>;\nexport declare type GraphQLRequestListenerDidResolveField = (error: Error | null, result?: any) => void;\nexport interface GraphQLRequestListener<TContext extends BaseContext> {\n    didResolveSource?(requestContext: GraphQLRequestContextDidResolveSource<TContext>): Promise<void>;\n    parsingDidStart?(requestContext: GraphQLRequestContextParsingDidStart<TContext>): Promise<GraphQLRequestListenerParsingDidEnd | void>;\n    validationDidStart?(requestContext: GraphQLRequestContextValidationDidStart<TContext>): Promise<GraphQLRequestListenerValidationDidEnd | void>;\n    didResolveOperation?(requestContext: GraphQLRequestContextDidResolveOperation<TContext>): Promise<void>;\n    didEncounterErrors?(requestContext: GraphQLRequestContextDidEncounterErrors<TContext>): Promise<void>;\n    responseForOperation?(requestContext: GraphQLRequestContextResponseForOperation<TContext>): Promise<GraphQLResponse | null>;\n    executionDidStart?(requestContext: GraphQLRequestContextExecutionDidStart<TContext>): Promise<GraphQLRequestExecutionListener<TContext> | void>;\n    willSendResponse?(requestContext: GraphQLRequestContextWillSendResponse<TContext>): Promise<void>;\n    didEncounterSubsequentErrors?(requestContext: GraphQLRequestContextDidEncounterSubsequentErrors<TContext>, errors: ReadonlyArray<GraphQLError>): Promise<void>;\n    willSendSubsequentPayload?(requestContext: GraphQLRequestContextWillSendSubsequentPayload<TContext>, payload: GraphQLExperimentalFormattedSubsequentIncrementalExecutionResult): Promise<void>;\n}\nexport declare type GraphQLFieldResolverParams<TSource, TContext, TArgs = {\n    [argName: string]: any;\n}> = {\n    source: TSource;\n    args: TArgs;\n    contextValue: TContext;\n    info: GraphQLResolveInfo;\n};\nexport interface GraphQLRequestExecutionListener<TContext extends BaseContext> {\n    executionDidEnd?: GraphQLRequestListenerExecutionDidEnd;\n    willResolveField?(fieldResolverParams: GraphQLFieldResolverParams<any, TContext>): GraphQLRequestListenerDidResolveField | void;\n}\n//# sourceMappingURL=plugins.d.ts.map/dist/cjs/index.js.map{\"version\":3,\"file\":\"index.js\",\"sourceRoot\":\"\",\"sources\":[\"../../src/index.ts\"],\"names\":[],\"mappings\":\";;;;;;;;;;;;;;;;;AAAA,qDAAiD;AAAxC,+GAAA,YAAY,OAAA;AACrB,qDAAiD;AAAxC,yGAAA,SAAS,OAAA;AAElB,2DAAyC\"}%/dist/cjs/plugin/inlineTrace/index.js\r!\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ApolloServerPluginInlineTrace = void 0;\nconst usage_reporting_protobuf_1 = require(\"@apollo/usage-reporting-protobuf\");\nconst traceTreeBuilder_js_1 = require(\"../traceTreeBuilder.js\");\nconst internalPlugin_js_1 = require(\"../../internalPlugin.js\");\nconst schemaIsFederated_js_1 = require(\"../schemaIsFederated.js\");\nfunction ApolloServerPluginInlineTrace(options = Object.create(null)) {\n    let enabled = options.__onlyIfSchemaIsFederated ? null : true;\n    return (0, internalPlugin_js_1.internalPlugin)({\n        __internal_plugin_id__: 'InlineTrace',\n        __is_disabled_plugin__: false,\n        async serverWillStart({ schema, logger }) {\n            if (enabled === null) {\n                enabled = (0, schemaIsFederated_js_1.schemaIsFederated)(schema);\n                if (enabled) {\n                    logger.info('Enabling inline tracing for this federated service. To disable, use ' +\n                        'ApolloServerPluginInlineTraceDisabled.');\n                }\n            }\n        },\n        async requestDidStart({ request: { http }, metrics, logger }) {\n            if (!enabled) {\n                return;\n            }\n            const treeBuilder = new traceTreeBuilder_js_1.TraceTreeBuilder({\n                maskedBy: 'ApolloServerPluginInlineTrace',\n                sendErrors: options.includeErrors,\n                logger,\n            });\n            if (http?.headers.get('apollo-federation-include-trace') !== 'ftv1') {\n                return;\n            }\n            if (metrics.captureTraces === false) {\n                return;\n            }\n            metrics.captureTraces = true;\n            treeBuilder.startTiming();\n            return {\n                async executionDidStart() {\n                    return {\n                        willResolveField({ info }) {\n                            return treeBuilder.willResolveField(info);\n                        },\n                    };\n                },\n                async didEncounterErrors({ errors }) {\n                    treeBuilder.didEncounterErrors(errors);\n                },\n                async willSendResponse({ response }) {\n                    treeBuilder.stopTiming();\n                    if (response.body.kind === 'incremental') {\n                        return;\n                    }\n                    if (metrics.queryPlanTrace) {\n                        treeBuilder.trace.queryPlan = metrics.queryPlanTrace;\n                    }\n                    const encodedUint8Array = usage_reporting_protobuf_1.Trace.encode(treeBuilder.trace).finish();\n                    const encodedBuffer = Buffer.from(encodedUint8Array, encodedUint8Array.byteOffset, encodedUint8Array.byteLength);\n                    const extensions = response.body.singleResult.extensions ||\n                        (response.body.singleResult.extensions = Object.create(null));\n                    if (typeof extensions.ftv1 !== 'undefined') {\n                        throw new Error('The `ftv1` extension was already present.');\n                    }\n                    extensions.ftv1 = encodedBuffer.toString('base64');\n                },\n            };\n        },\n    });\n}\nexports.ApolloServerPluginInlineTrace = ApolloServerPluginInlineTrace;\n//# sourceMappingURL=index.js.map./dist/esm/plugin/usageReporting/options.js.mapĉ{\"version\":3,\"file\":\"options.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../../src/plugin/usageReporting/options.ts\"],\"names\":[],\"mappings\":\"\"} /src/plugin/inlineTrace/index.ts\u001a\u0010import { Trace } from '@apollo/usage-reporting-protobuf';\nimport { TraceTreeBuilder } from '../traceTreeBuilder.js';\nimport type { SendErrorsOptions } from '../usageReporting/index.js';\nimport { internalPlugin } from '../../internalPlugin.js';\nimport { schemaIsFederated } from '../schemaIsFederated.js';\nimport type { ApolloServerPlugin } from '../../externalTypes/index.js';\n\nexport interface ApolloServerPluginInlineTraceOptions {\n  /**\n   * By default, if a trace contains errors, the errors are included in the\n   * trace with the message `<masked>`. The errors are associated with specific\n   * paths in the operation, but do not include the original error message or\n   * any extensions such as the error `code`, as those details may contain your\n   * users' private data. The extension `maskedBy:\n   * 'ApolloServerPluginInlineTrace'` is added.\n   *\n   * If you'd like details about the error included in traces, set this option.\n   * This option can take several forms:\n   *\n   * - { masked: true }: mask error messages and omit extensions (DEFAULT)\n   * - { unmodified: true }: include all error messages and extensions\n   * - { transform: ... }: a custom function for transforming errors. This\n   *   function receives a `GraphQLError` and may return a `GraphQLError`\n   *   (either a new error, or its potentially-modified argument) or `null`.\n   *   This error is used in the trace; if `null`, the error is not included in\n   *   traces or error statistics.\n   */\n  includeErrors?: SendErrorsOptions;\n  /**\n   * This option is for internal use by `@apollo/server` only.\n   *\n   * By default we want to enable this plugin for federated schemas only, but we\n   * need to come up with our list of plugins before we have necessarily loaded\n   * the schema. So (unless the user installs this plugin or\n   * ApolloServerPluginInlineTraceDisabled themselves), `@apollo/server`\n   * always installs this plugin and uses this option to make sure traces are\n   * only included if the schema appears to be federated.\n   */\n  __onlyIfSchemaIsFederated?: boolean;\n}\n\n// This ftv1 plugin produces a base64'd Trace protobuf containing only the\n// durationNs, startTime, endTime, and root fields.  This output is placed\n// on the `extensions`.`ftv1` property of the response.  The Apollo Gateway\n// utilizes this data to construct the full trace and submit it to Apollo's\n// usage reporting ingress.\nexport function ApolloServerPluginInlineTrace(\n  options: ApolloServerPluginInlineTraceOptions = Object.create(null),\n): ApolloServerPlugin {\n  let enabled: boolean | null = options.__onlyIfSchemaIsFederated ? null : true;\n  return internalPlugin({\n    __internal_plugin_id__: 'InlineTrace',\n    __is_disabled_plugin__: false,\n    async serverWillStart({ schema, logger }) {\n      // Handle the case that the plugin was implicitly installed. We only want it\n      // to actually be active if the schema appears to be federated. If you don't\n      // like the log line, just install `ApolloServerPluginInlineTrace()` in\n      // `plugins` yourself.\n      if (enabled === null) {\n        enabled = schemaIsFederated(schema);\n        if (enabled) {\n          logger.info(\n            'Enabling inline tracing for this federated service. To disable, use ' +\n              'ApolloServerPluginInlineTraceDisabled.',\n          );\n        }\n      }\n    },\n    async requestDidStart({ request: { http }, metrics, logger }) {\n      if (!enabled) {\n        return;\n      }\n\n      const treeBuilder = new TraceTreeBuilder({\n        maskedBy: 'ApolloServerPluginInlineTrace',\n        sendErrors: options.includeErrors,\n        logger,\n      });\n\n      // XXX Provide a mechanism to customize this logic.\n      if (http?.headers.get('apollo-federation-include-trace') !== 'ftv1') {\n        return;\n      }\n\n      // If some other (user-written?) plugin already decided that we are not\n      // capturing traces, then we should not capture traces.\n      if (metrics.captureTraces === false) {\n        return;\n      }\n\n      // Note that this will override any `fieldLevelInstrumentation` parameter\n      // to the usage reporting plugin for requests with the\n      // `apollo-federation-include-trace` header set.\n      metrics.captureTraces = true;\n\n      treeBuilder.startTiming();\n\n      return {\n        async executionDidStart() {\n          return {\n            willResolveField({ info }) {\n              return treeBuilder.willResolveField(info);\n            },\n          };\n        },\n\n        async didEncounterErrors({ errors }) {\n          treeBuilder.didEncounterErrors(errors);\n        },\n\n        async willSendResponse({ response }) {\n          // We record the end time at the latest possible time: right before serializing the trace.\n          // If we wait any longer, the time we record won't actually be sent anywhere!\n          treeBuilder.stopTiming();\n\n          // For now, we don't support inline traces on incremental delivery\n          // responses. (We could perhaps place the trace on the final chunk, or\n          // even deliver it bit by bit. For now, since Gateway does not support\n          // incremental delivery and Router does not pass through defers to\n          // subgraphs, this doesn't affect the \"federated tracing\" use case,\n          // though it does affect the ability to look at inline traces in other\n          // tools like Explorer.\n          if (response.body.kind === 'incremental') {\n            return;\n          }\n\n          // If we're in a gateway, include the query plan (and subgraph traces)\n          // in the inline trace. This is designed more for manually querying\n          // your graph while running locally to see what the query planner is\n          // doing rather than for running in production.\n          if (metrics.queryPlanTrace) {\n            treeBuilder.trace.queryPlan = metrics.queryPlanTrace;\n          }\n\n          const encodedUint8Array = Trace.encode(treeBuilder.trace).finish();\n          const encodedBuffer = Buffer.from(\n            encodedUint8Array,\n            encodedUint8Array.byteOffset,\n            encodedUint8Array.byteLength,\n          );\n\n          const extensions =\n            response.body.singleResult.extensions ||\n            (response.body.singleResult.extensions = Object.create(null));\n\n          // This should only happen if another plugin is using the same name-\n          // space within the `extensions` object and got to it before us.\n          if (typeof extensions.ftv1 !== 'undefined') {\n            throw new Error('The `ftv1` extension was already present.');\n          }\n\n          extensions.ftv1 = encodedBuffer.toString('base64');\n        },\n      };\n    },\n  });\n}\n+/dist/esm/utils/UnreachableCaseError.js.map{\"version\":3,\"file\":\"UnreachableCaseError.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/utils/UnreachableCaseError.ts\"],\"names\":[],\"mappings\":\"AAKA,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IAC7C,YAAY,GAAU;QACpB,KAAK,CAAC,qBAAqB,GAAG,EAAE,CAAC,CAAC;IACpC,CAAC;CACF\"}$/dist/cjs/plugin/traceTreeBuilder.js\u001a\u0005\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.dateToProtoTimestamp = exports.TraceTreeBuilder = void 0;\nconst graphql_1 = require(\"graphql\");\nconst usage_reporting_protobuf_1 = require(\"@apollo/usage-reporting-protobuf\");\nconst UnreachableCaseError_js_1 = require(\"../utils/UnreachableCaseError.js\");\nfunction internalError(message) {\n    return new Error(`[internal apollo-server error] ${message}`);\n}\nclass TraceTreeBuilder {\n    constructor(options) {\n        this.rootNode = new usage_reporting_protobuf_1.Trace.Node();\n        this.trace = new usage_reporting_protobuf_1.Trace({\n            root: this.rootNode,\n            fieldExecutionWeight: 1,\n        });\n        this.stopped = false;\n        this.nodes = new Map([\n            [responsePathAsString(), this.rootNode],\n        ]);\n        const { logger, sendErrors, maskedBy } = options;\n        if (!sendErrors || 'masked' in sendErrors) {\n            this.transformError = () => new graphql_1.GraphQLError('<masked>', {\n                extensions: { maskedBy },\n            });\n        }\n        else if ('transform' in sendErrors) {\n            this.transformError = sendErrors.transform;\n        }\n        else if ('unmodified' in sendErrors) {\n            this.transformError = null;\n        }\n        else {\n            throw new UnreachableCaseError_js_1.UnreachableCaseError(sendErrors);\n        }\n        this.logger = logger;\n    }\n    startTiming() {\n        if (this.startHrTime) {\n            throw internalError('startTiming called twice!');\n        }\n        if (this.stopped) {\n            throw internalError('startTiming called after stopTiming!');\n        }\n        this.trace.startTime = dateToProtoTimestamp(new Date());\n        this.startHrTime = process.hrtime();\n    }\n    stopTiming() {\n        if (!this.startHrTime) {\n            throw internalError('stopTiming called before startTiming!');\n        }\n        if (this.stopped) {\n            throw internalError('stopTiming called twice!');\n        }\n        this.trace.durationNs = durationHrTimeToNanos(process.hrtime(this.startHrTime));\n        this.trace.endTime = dateToProtoTimestamp(new Date());\n        this.stopped = true;\n    }\n    willResolveField(info) {\n        if (!this.startHrTime) {\n            throw internalError('willResolveField called before startTiming!');\n        }\n        if (this.stopped) {\n            throw internalError('willResolveField called after stopTiming!');\n        }\n        const path = info.path;\n        const node = this.newNode(path);\n        node.type = info.returnType.toString();\n        node.parentType = info.parentType.toString();\n        node.startTime = durationHrTimeToNanos(process.hrtime(this.startHrTime));\n        if (typeof path.key === 'string' && path.key !== info.fieldName) {\n            node.originalFieldName = info.fieldName;\n        }\n        return () => {\n            node.endTime = durationHrTimeToNanos(process.hrtime(this.startHrTime));\n        };\n    }\n    didEncounterErrors(errors) {\n        errors.forEach((err) => {\n            if (err.extensions?.serviceName) {\n                return;\n            }\n            const errorForReporting = this.transformAndNormalizeError(err);\n            if (errorForReporting === null) {\n                return;\n            }\n            this.addProtobufError(errorForReporting.path, errorToProtobufError(errorForReporting));\n        });\n    }\n    addProtobufError(path, error) {\n        if (!this.startHrTime) {\n            throw internalError('addProtobufError called before startTiming!');\n        }\n        if (this.stopped) {\n            throw internalError('addProtobufError called after stopTiming!');\n        }\n        let node = this.rootNode;\n        if (Array.isArray(path)) {\n            const specificNode = this.nodes.get(path.join('.'));\n            if (specificNode) {\n                node = specificNode;\n            }\n            else {\n                this.logger.warn(`Could not find node with path ${path.join('.')}; defaulting to put errors on root node.`);\n            }\n        }\n        node.error.push(error);\n    }\n    newNode(path) {\n        const node = new usage_reporting_protobuf_1.Trace.Node();\n        const id = path.key;\n        if (typeof id === 'number') {\n            node.index = id;\n        }\n        else {\n            node.responseName = id;\n        }\n        this.nodes.set(responsePathAsString(path), node);\n        const parentNode = this.ensureParentNode(path);\n        parentNode.child.push(node);\n        return node;\n    }\n    ensureParentNode(path) {\n        const parentPath = responsePathAsString(path.prev);\n        const parentNode = this.nodes.get(parentPath);\n        if (parentNode) {\n            return parentNode;\n        }\n        return this.newNode(path.prev);\n    }\n    transformAndNormalizeError(err) {\n        if (this.transformError) {\n            const clonedError = Object.assign(Object.create(Object.getPrototypeOf(err)), err);\n            const rewrittenError = this.transformError(clonedError);\n            if (rewrittenError === null) {\n                return null;\n            }\n            if (!(rewrittenError instanceof graphql_1.GraphQLError)) {\n                return err;\n            }\n            return new graphql_1.GraphQLError(rewrittenError.message, {\n                nodes: err.nodes,\n                source: err.source,\n                positions: err.positions,\n                path: err.path,\n                originalError: err.originalError,\n                extensions: rewrittenError.extensions || err.extensions,\n            });\n        }\n        return err;\n    }\n}\nexports.TraceTreeBuilder = TraceTreeBuilder;\nfunction durationHrTimeToNanos(hrtime) {\n    return hrtime[0] * 1e9 + hrtime[1];\n}\nfunction responsePathAsString(p) {\n    if (p === undefined) {\n        return '';\n    }\n    let res = String(p.key);\n    while ((p = p.prev) !== undefined) {\n        res = `${p.key}.${res}`;\n    }\n    return res;\n}\nfunction errorToProtobufError(error) {\n    return new usage_reporting_protobuf_1.Trace.Error({\n        message: error.message,\n        location: (error.locations || []).map(({ line, column }) => new usage_reporting_protobuf_1.Trace.Location({ line, column })),\n        json: JSON.stringify(error),\n    });\n}\nfunction dateToProtoTimestamp(date) {\n    const totalMillis = +date;\n    const millis = totalMillis % 1000;\n    return new usage_reporting_protobuf_1.google.protobuf.Timestamp({\n        seconds: (totalMillis - millis) / 1000,\n        nanos: millis * 1e6,\n    });\n}\nexports.dateToProtoTimestamp = dateToProtoTimestamp;\n//# sourceMappingURL=traceTreeBuilder.js.map/dist/cjs/ApolloServer.jsu\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n    __setModuleDefault(result, mod);\n    return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.chooseContentTypeForSingleResultResponse = exports.MEDIA_TYPES = exports.isImplicitlyInstallablePlugin = exports.internalExecuteOperation = exports.ApolloServer = void 0;\nconst utils_isnodelike_1 = require(\"@apollo/utils.isnodelike\");\nconst schema_1 = require(\"@graphql-tools/schema\");\nconst resolvable_1 = __importDefault(require(\"@josephg/resolvable\"));\nconst graphql_1 = require(\"graphql\");\nconst utils_keyvaluecache_1 = require(\"@apollo/utils.keyvaluecache\");\nconst loglevel_1 = __importDefault(require(\"loglevel\"));\nconst negotiator_1 = __importDefault(require(\"negotiator\"));\nconst uuid = __importStar(require(\"uuid\"));\nconst cachePolicy_js_1 = require(\"./cachePolicy.js\");\nconst determineApolloConfig_js_1 = require(\"./determineApolloConfig.js\");\nconst errorNormalize_js_1 = require(\"./errorNormalize.js\");\nconst index_js_1 = require(\"./errors/index.js\");\nconst httpBatching_js_1 = require(\"./httpBatching.js\");\nconst internalPlugin_js_1 = require(\"./internalPlugin.js\");\nconst preventCsrf_js_1 = require(\"./preventCsrf.js\");\nconst requestPipeline_js_1 = require(\"./requestPipeline.js\");\nconst runHttpQuery_js_1 = require(\"./runHttpQuery.js\");\nconst schemaManager_js_1 = require(\"./utils/schemaManager.js\");\nconst isDefined_js_1 = require(\"./utils/isDefined.js\");\nconst UnreachableCaseError_js_1 = require(\"./utils/UnreachableCaseError.js\");\nconst HeaderMap_js_1 = require(\"./utils/HeaderMap.js\");\nconst NoIntrospection = (context) => ({\n    Field(node) {\n        if (node.name.value === '__schema' || node.name.value === '__type') {\n            context.reportError(new graphql_1.GraphQLError('GraphQL introspection is not allowed by Apollo Server, but the query contained __schema or __type. To enable introspection, pass introspection: true to ApolloServer in production', {\n                nodes: [node],\n                extensions: {\n                    validationErrorCode: index_js_1.ApolloServerValidationErrorCode.INTROSPECTION_DISABLED,\n                },\n            }));\n        }\n    },\n});\nfunction defaultLogger() {\n    const loglevelLogger = loglevel_1.default.getLogger('apollo-server');\n    loglevelLogger.setLevel(loglevel_1.default.levels.INFO);\n    return loglevelLogger;\n}\nclass ApolloServer {\n    constructor(config) {\n        const nodeEnv = config.nodeEnv ?? process.env.NODE_ENV ?? '';\n        this.logger = config.logger ?? defaultLogger();\n        const apolloConfig = (0, determineApolloConfig_js_1.determineApolloConfig)(config.apollo);\n        const isDev = nodeEnv !== 'production';\n        const state = config.gateway\n            ?\n                {\n                    phase: 'initialized',\n                    schemaManager: new schemaManager_js_1.SchemaManager({\n                        gateway: config.gateway,\n                        apolloConfig,\n                        schemaDerivedDataProvider: (schema) => ApolloServer.generateSchemaDerivedData(schema, config.documentStore),\n                        logger: this.logger,\n                    }),\n                }\n            :\n                {\n                    phase: 'initialized',\n                    schemaManager: new schemaManager_js_1.SchemaManager({\n                        apiSchema: ApolloServer.constructSchema(config),\n                        schemaDerivedDataProvider: (schema) => ApolloServer.generateSchemaDerivedData(schema, config.documentStore),\n                        logger: this.logger,\n                    }),\n                };\n        const introspectionEnabled = config.introspection ?? isDev;\n        this.cache = config.cache ?? new utils_keyvaluecache_1.InMemoryLRUCache();\n        this.internals = {\n            formatError: config.formatError,\n            rootValue: config.rootValue,\n            validationRules: [\n                ...(config.validationRules ?? []),\n                ...(introspectionEnabled ? [] : [NoIntrospection]),\n            ],\n            fieldResolver: config.fieldResolver,\n            includeStacktraceInErrorResponses: config.includeStacktraceInErrorResponses ??\n                (nodeEnv !== 'production' && nodeEnv !== 'test'),\n            persistedQueries: config.persistedQueries === false\n                ? undefined\n                : {\n                    ...config.persistedQueries,\n                    cache: new utils_keyvaluecache_1.PrefixingKeyValueCache(config.persistedQueries?.cache ?? this.cache, requestPipeline_js_1.APQ_CACHE_PREFIX),\n                },\n            nodeEnv,\n            allowBatchedHttpRequests: config.allowBatchedHttpRequests ?? false,\n            apolloConfig,\n            plugins: config.plugins ?? [],\n            parseOptions: config.parseOptions ?? {},\n            state,\n            stopOnTerminationSignals: config.stopOnTerminationSignals,\n            gatewayExecutor: null,\n            csrfPreventionRequestHeaders: config.csrfPrevention === true || config.csrfPrevention === undefined\n                ? preventCsrf_js_1.recommendedCsrfPreventionRequestHeaders\n                : config.csrfPrevention === false\n                    ? null\n                    : config.csrfPrevention.requestHeaders ??\n                        preventCsrf_js_1.recommendedCsrfPreventionRequestHeaders,\n            __testing_incrementalExecutionResults: config.__testing_incrementalExecutionResults,\n        };\n    }\n    async start() {\n        return await this._start(false);\n    }\n    startInBackgroundHandlingStartupErrorsByLoggingAndFailingAllRequests() {\n        this._start(true).catch((e) => this.logStartupError(e));\n    }\n    async _start(startedInBackground) {\n        if (this.internals.state.phase !== 'initialized') {\n            throw new Error(`You should only call 'start()' or ` +\n                `'startInBackgroundHandlingStartupErrorsByLoggingAndFailingAllRequests()' ` +\n                `once on your ApolloServer.`);\n        }\n        const schemaManager = this.internals.state.schemaManager;\n        const barrier = (0, resolvable_1.default)();\n        this.internals.state = {\n            phase: 'starting',\n            barrier,\n            schemaManager,\n            startedInBackground,\n        };\n        try {\n            await this.addDefaultPlugins();\n            const toDispose = [];\n            const executor = await schemaManager.start();\n            if (executor) {\n                this.internals.gatewayExecutor = executor;\n            }\n            toDispose.push(async () => {\n                await schemaManager.stop();\n            });\n            const schemaDerivedData = schemaManager.getSchemaDerivedData();\n            const service = {\n                logger: this.logger,\n                cache: this.cache,\n                schema: schemaDerivedData.schema,\n                apollo: this.internals.apolloConfig,\n                startedInBackground,\n            };\n            const taggedServerListeners = (await Promise.all(this.internals.plugins.map(async (plugin) => ({\n                serverListener: plugin.serverWillStart && (await plugin.serverWillStart(service)),\n                installedImplicitly: isImplicitlyInstallablePlugin(plugin) &&\n                    plugin.__internal_installed_implicitly__,\n            })))).filter((maybeTaggedServerListener) => typeof maybeTaggedServerListener.serverListener === 'object');\n            taggedServerListeners.forEach(({ serverListener: { schemaDidLoadOrUpdate } }) => {\n                if (schemaDidLoadOrUpdate) {\n                    schemaManager.onSchemaLoadOrUpdate(schemaDidLoadOrUpdate);\n                }\n            });\n            const serverWillStops = taggedServerListeners\n                .map((l) => l.serverListener.serverWillStop)\n                .filter(isDefined_js_1.isDefined);\n            if (serverWillStops.length) {\n                toDispose.push(async () => {\n                    await Promise.all(serverWillStops.map((serverWillStop) => serverWillStop()));\n                });\n            }\n            const drainServerCallbacks = taggedServerListeners\n                .map((l) => l.serverListener.drainServer)\n                .filter(isDefined_js_1.isDefined);\n            const drainServers = drainServerCallbacks.length\n                ? async () => {\n                    await Promise.all(drainServerCallbacks.map((drainServer) => drainServer()));\n                }\n                : null;\n            let taggedServerListenersWithRenderLandingPage = taggedServerListeners.filter((l) => l.serverListener.renderLandingPage);\n            if (taggedServerListenersWithRenderLandingPage.length > 1) {\n                taggedServerListenersWithRenderLandingPage =\n                    taggedServerListenersWithRenderLandingPage.filter((l) => !l.installedImplicitly);\n            }\n            let landingPage = null;\n            if (taggedServerListenersWithRenderLandingPage.length > 1) {\n                throw Error('Only one plugin can implement renderLandingPage.');\n            }\n            else if (taggedServerListenersWithRenderLandingPage.length) {\n                landingPage = await taggedServerListenersWithRenderLandingPage[0]\n                    .serverListener.renderLandingPage();\n            }\n            const toDisposeLast = this.maybeRegisterTerminationSignalHandlers(['SIGINT', 'SIGTERM'], startedInBackground);\n            this.internals.state = {\n                phase: 'started',\n                schemaManager,\n                drainServers,\n                landingPage,\n                toDispose,\n                toDisposeLast,\n            };\n        }\n        catch (maybeError) {\n            const error = (0, errorNormalize_js_1.ensureError)(maybeError);\n            try {\n                await Promise.all(this.internals.plugins.map(async (plugin) => plugin.startupDidFail?.({ error })));\n            }\n            catch (pluginError) {\n                this.logger.error(`startupDidFail hook threw: ${pluginError}`);\n            }\n            this.internals.state = {\n                phase: 'failed to start',\n                error,\n            };\n            throw error;\n        }\n        finally {\n            barrier.resolve();\n        }\n    }\n    maybeRegisterTerminationSignalHandlers(signals, startedInBackground) {\n        const toDisposeLast = [];\n        if (this.internals.stopOnTerminationSignals === false ||\n            (this.internals.stopOnTerminationSignals === undefined &&\n                !(utils_isnodelike_1.isNodeLike &&\n                    this.internals.nodeEnv !== 'test' &&\n                    !startedInBackground))) {\n            return toDisposeLast;\n        }\n        let receivedSignal = false;\n        const signalHandler = async (signal) => {\n            if (receivedSignal) {\n                return;\n            }\n            receivedSignal = true;\n            try {\n                await this.stop();\n            }\n            catch (e) {\n                this.logger.error(`stop() threw during ${signal} shutdown`);\n                this.logger.error(e);\n                process.exit(1);\n            }\n            process.kill(process.pid, signal);\n        };\n        signals.forEach((signal) => {\n            process.on(signal, signalHandler);\n            toDisposeLast.push(async () => {\n                process.removeListener(signal, signalHandler);\n            });\n        });\n        return toDisposeLast;\n    }\n    async _ensureStarted() {\n        while (true) {\n            switch (this.internals.state.phase) {\n                case 'initialized':\n                    throw new Error('You need to call `server.start()` before using your Apollo Server.');\n                case 'starting':\n                    await this.internals.state.barrier;\n                    break;\n                case 'failed to start':\n                    this.logStartupError(this.internals.state.error);\n                    throw new Error('This data graph is missing a valid configuration. More details may be available in the server logs.');\n                case 'started':\n                case 'draining':\n                    return this.internals.state;\n                case 'stopping':\n                case 'stopped':\n                    this.logger.warn('A GraphQL operation was received during server shutdown. The ' +\n                        'operation will fail. Consider draining the HTTP server on shutdown; ' +\n                        'see https://go.apollo.dev/s/drain for details.');\n                    throw new Error(`Cannot execute GraphQL operations ${this.internals.state.phase === 'stopping'\n                        ? 'while the server is stopping'\n                        : 'after the server has stopped'}.'`);\n                default:\n                    throw new UnreachableCaseError_js_1.UnreachableCaseError(this.internals.state);\n            }\n        }\n    }\n    assertStarted(expressionForError) {\n        if (this.internals.state.phase !== 'started' &&\n            this.internals.state.phase !== 'draining' &&\n            !(this.internals.state.phase === 'starting' &&\n                this.internals.state.startedInBackground)) {\n            throw new Error('You must `await server.start()` before calling `' +\n                expressionForError +\n                '`');\n        }\n    }\n    logStartupError(err) {\n        this.logger.error('An error occurred during Apollo Server startup. All GraphQL requests ' +\n            'will now fail. The startup error was: ' +\n            (err?.message || err));\n    }\n    static constructSchema(config) {\n        if (config.schema) {\n            return config.schema;\n        }\n        const { typeDefs, resolvers } = config;\n        const augmentedTypeDefs = Array.isArray(typeDefs) ? typeDefs : [typeDefs];\n        return (0, schema_1.makeExecutableSchema)({\n            typeDefs: augmentedTypeDefs,\n            resolvers,\n        });\n    }\n    static generateSchemaDerivedData(schema, providedUnprefixedDocumentStore) {\n        (0, graphql_1.assertValidSchema)(schema);\n        return {\n            schema,\n            documentStore: providedUnprefixedDocumentStore === undefined\n                ? new utils_keyvaluecache_1.InMemoryLRUCache()\n                : providedUnprefixedDocumentStore === null\n                    ? null\n                    : new utils_keyvaluecache_1.PrefixingKeyValueCache(providedUnprefixedDocumentStore, `${uuid.v4()}:`),\n        };\n    }\n    async stop() {\n        switch (this.internals.state.phase) {\n            case 'initialized':\n            case 'starting':\n            case 'failed to start':\n                throw Error('apolloServer.stop() should only be called after `await apolloServer.start()` has succeeded');\n            case 'stopped':\n                if (this.internals.state.stopError) {\n                    throw this.internals.state.stopError;\n                }\n                return;\n            case 'stopping':\n            case 'draining': {\n                await this.internals.state.barrier;\n                const state = this.internals.state;\n                if (state.phase !== 'stopped') {\n                    throw Error(`Surprising post-stopping state ${state.phase}`);\n                }\n                if (state.stopError) {\n                    throw state.stopError;\n                }\n                return;\n            }\n            case 'started':\n                break;\n            default:\n                throw new UnreachableCaseError_js_1.UnreachableCaseError(this.internals.state);\n        }\n        const barrier = (0, resolvable_1.default)();\n        const { schemaManager, drainServers, landingPage, toDispose, toDisposeLast, } = this.internals.state;\n        this.internals.state = {\n            phase: 'draining',\n            barrier,\n            schemaManager,\n            landingPage,\n        };\n        try {\n            await drainServers?.();\n            this.internals.state = { phase: 'stopping', barrier };\n            await Promise.all([...toDispose].map((dispose) => dispose()));\n            await Promise.all([...toDisposeLast].map((dispose) => dispose()));\n        }\n        catch (stopError) {\n            this.internals.state = {\n                phase: 'stopped',\n                stopError: stopError,\n            };\n            barrier.resolve();\n            throw stopError;\n        }\n        this.internals.state = { phase: 'stopped', stopError: null };\n    }\n    async addDefaultPlugins() {\n        const { plugins, apolloConfig, nodeEnv } = this.internals;\n        const isDev = nodeEnv !== 'production';\n        const alreadyHavePluginWithInternalId = (id) => plugins.some((p) => (0, internalPlugin_js_1.pluginIsInternal)(p) && p.__internal_plugin_id__ === id);\n        const pluginsByInternalID = new Map();\n        for (const p of plugins) {\n            if ((0, internalPlugin_js_1.pluginIsInternal)(p)) {\n                const id = p.__internal_plugin_id__;\n                if (!pluginsByInternalID.has(id)) {\n                    pluginsByInternalID.set(id, {\n                        sawDisabled: false,\n                        sawNonDisabled: false,\n                    });\n                }\n                const seen = pluginsByInternalID.get(id);\n                if (p.__is_disabled_plugin__) {\n                    seen.sawDisabled = true;\n                }\n                else {\n                    seen.sawNonDisabled = true;\n                }\n                if (seen.sawDisabled && seen.sawNonDisabled) {\n                    throw new Error(`You have tried to install both ApolloServerPlugin${id} and ` +\n                        `ApolloServerPlugin${id}Disabled in your server. Please choose ` +\n                        `whether or not you want to disable the feature and install the ` +\n                        `appropriate plugin for your use case.`);\n                }\n            }\n        }\n        {\n            if (!alreadyHavePluginWithInternalId('CacheControl')) {\n                const { ApolloServerPluginCacheControl } = await Promise.resolve().then(() => __importStar(require('./plugin/cacheControl/index.js')));\n                plugins.push(ApolloServerPluginCacheControl());\n            }\n        }\n        {\n            const alreadyHavePlugin = alreadyHavePluginWithInternalId('UsageReporting');\n            if (!alreadyHavePlugin && apolloConfig.key) {\n                if (apolloConfig.graphRef) {\n                    const { ApolloServerPluginUsageReporting } = await Promise.resolve().then(() => __importStar(require('./plugin/usageReporting/index.js')));\n                    plugins.unshift(ApolloServerPluginUsageReporting());\n                }\n                else {\n                    this.logger.warn('You have specified an Apollo key but have not specified a graph ref; usage ' +\n                        'reporting is disabled. To enable usage reporting, set the `APOLLO_GRAPH_REF` ' +\n                        'environment variable to `your-graph-id@your-graph-variant`. To disable this ' +\n                        'warning, install `ApolloServerPluginUsageReportingDisabled`.');\n                }\n            }\n        }\n        {\n            const alreadyHavePlugin = alreadyHavePluginWithInternalId('SchemaReporting');\n            const enabledViaEnvVar = process.env.APOLLO_SCHEMA_REPORTING === 'true';\n            if (!alreadyHavePlugin && enabledViaEnvVar) {\n                if (apolloConfig.key) {\n                    const { ApolloServerPluginSchemaReporting } = await Promise.resolve().then(() => __importStar(require('./plugin/schemaReporting/index.js')));\n                    plugins.push(ApolloServerPluginSchemaReporting());\n                }\n                else {\n                    throw new Error(\"You've enabled schema reporting by setting the APOLLO_SCHEMA_REPORTING \" +\n                        'environment variable to true, but you also need to provide your ' +\n                        'Apollo API key, via the APOLLO_KEY environment ' +\n                        'variable or via `new ApolloServer({apollo: {key})');\n                }\n            }\n        }\n        {\n            const alreadyHavePlugin = alreadyHavePluginWithInternalId('InlineTrace');\n            if (!alreadyHavePlugin) {\n                const { ApolloServerPluginInlineTrace } = await Promise.resolve().then(() => __importStar(require('./plugin/inlineTrace/index.js')));\n                plugins.push(ApolloServerPluginInlineTrace({ __onlyIfSchemaIsFederated: true }));\n            }\n        }\n        const alreadyHavePlugin = alreadyHavePluginWithInternalId('LandingPageDisabled');\n        if (!alreadyHavePlugin) {\n            const { ApolloServerPluginLandingPageLocalDefault, ApolloServerPluginLandingPageProductionDefault, } = await Promise.resolve().then(() => __importStar(require('./plugin/landingPage/default/index.js')));\n            const plugin = isDev\n                ? ApolloServerPluginLandingPageLocalDefault()\n                : ApolloServerPluginLandingPageProductionDefault();\n            if (!isImplicitlyInstallablePlugin(plugin)) {\n                throw Error('default landing page plugin should be implicitly installable?');\n            }\n            plugin.__internal_installed_implicitly__ = true;\n            plugins.push(plugin);\n        }\n    }\n    addPlugin(plugin) {\n        if (this.internals.state.phase !== 'initialized') {\n            throw new Error(\"Can't add plugins after the server has started\");\n        }\n        this.internals.plugins.push(plugin);\n    }\n    async executeHTTPGraphQLRequest({ httpGraphQLRequest, context, }) {\n        try {\n            let runningServerState;\n            try {\n                runningServerState = await this._ensureStarted();\n            }\n            catch (error) {\n                return this.errorResponse(error, httpGraphQLRequest);\n            }\n            if (runningServerState.landingPage &&\n                this.prefersHTML(httpGraphQLRequest)) {\n                return {\n                    headers: new HeaderMap_js_1.HeaderMap([['content-type', 'text/html']]),\n                    body: {\n                        kind: 'complete',\n                        string: runningServerState.landingPage.html,\n                    },\n                };\n            }\n            if (this.internals.csrfPreventionRequestHeaders) {\n                (0, preventCsrf_js_1.preventCsrf)(httpGraphQLRequest.headers, this.internals.csrfPreventionRequestHeaders);\n            }\n            let contextValue;\n            try {\n                contextValue = await context();\n            }\n            catch (maybeError) {\n                const error = (0, errorNormalize_js_1.ensureError)(maybeError);\n                try {\n                    await Promise.all(this.internals.plugins.map(async (plugin) => plugin.contextCreationDidFail?.({\n                        error,\n                    })));\n                }\n                catch (pluginError) {\n                    this.logger.error(`contextCreationDidFail hook threw: ${pluginError}`);\n                }\n                return this.errorResponse((0, errorNormalize_js_1.ensureGraphQLError)(error, 'Context creation failed: '), httpGraphQLRequest);\n            }\n            return await (0, httpBatching_js_1.runPotentiallyBatchedHttpQuery)(this, httpGraphQLRequest, contextValue, runningServerState.schemaManager.getSchemaDerivedData(), this.internals);\n        }\n        catch (maybeError_) {\n            const maybeError = maybeError_;\n            if (maybeError instanceof graphql_1.GraphQLError &&\n                maybeError.extensions.code === index_js_1.ApolloServerErrorCode.BAD_REQUEST) {\n                try {\n                    await Promise.all(this.internals.plugins.map(async (plugin) => plugin.invalidRequestWasReceived?.({ error: maybeError })));\n                }\n                catch (pluginError) {\n                    this.logger.error(`invalidRequestWasReceived hook threw: ${pluginError}`);\n                }\n            }\n            return this.errorResponse(maybeError, httpGraphQLRequest);\n        }\n    }\n    errorResponse(error, requestHead) {\n        const { formattedErrors, httpFromErrors } = (0, errorNormalize_js_1.normalizeAndFormatErrors)([error], {\n            includeStacktraceInErrorResponses: this.internals.includeStacktraceInErrorResponses,\n            formatError: this.internals.formatError,\n        });\n        return {\n            status: httpFromErrors.status ?? 500,\n            headers: new HeaderMap_js_1.HeaderMap([\n                ...httpFromErrors.headers,\n                [\n                    'content-type',\n                    chooseContentTypeForSingleResultResponse(requestHead) ??\n                        exports.MEDIA_TYPES.APPLICATION_JSON,\n                ],\n            ]),\n            body: {\n                kind: 'complete',\n                string: (0, runHttpQuery_js_1.prettyJSONStringify)({\n                    errors: formattedErrors,\n                }),\n            },\n        };\n    }\n    prefersHTML(request) {\n        const acceptHeader = request.headers.get('accept');\n        return (request.method === 'GET' &&\n            !!acceptHeader &&\n            new negotiator_1.default({\n                headers: { accept: acceptHeader },\n            }).mediaType([\n                exports.MEDIA_TYPES.APPLICATION_JSON,\n                exports.MEDIA_TYPES.APPLICATION_GRAPHQL_RESPONSE_JSON,\n                exports.MEDIA_TYPES.MULTIPART_MIXED_EXPERIMENTAL,\n                exports.MEDIA_TYPES.MULTIPART_MIXED_NO_DEFER_SPEC,\n                exports.MEDIA_TYPES.TEXT_HTML,\n            ]) === exports.MEDIA_TYPES.TEXT_HTML);\n    }\n    async executeOperation(request, options = {}) {\n        if (this.internals.state.phase === 'initialized') {\n            await this.start();\n        }\n        const schemaDerivedData = (await this._ensureStarted()).schemaManager.getSchemaDerivedData();\n        const graphQLRequest = {\n            ...request,\n            query: request.query && typeof request.query !== 'string'\n                ? (0, graphql_1.print)(request.query)\n                : request.query,\n        };\n        const response = await internalExecuteOperation({\n            server: this,\n            graphQLRequest,\n            internals: this.internals,\n            schemaDerivedData,\n            sharedResponseHTTPGraphQLHead: null,\n        }, options);\n        return response;\n    }\n}\nexports.ApolloServer = ApolloServer;\nasync function internalExecuteOperation({ server, graphQLRequest, internals, schemaDerivedData, sharedResponseHTTPGraphQLHead, }, options) {\n    const requestContext = {\n        logger: server.logger,\n        cache: server.cache,\n        schema: schemaDerivedData.schema,\n        request: graphQLRequest,\n        response: {\n            http: sharedResponseHTTPGraphQLHead ?? (0, runHttpQuery_js_1.newHTTPGraphQLHead)(),\n        },\n        contextValue: cloneObject(options?.contextValue ?? {}),\n        metrics: {},\n        overallCachePolicy: (0, cachePolicy_js_1.newCachePolicy)(),\n        requestIsBatched: sharedResponseHTTPGraphQLHead !== null,\n    };\n    try {\n        return await (0, requestPipeline_js_1.processGraphQLRequest)(schemaDerivedData, server, internals, requestContext);\n    }\n    catch (maybeError) {\n        const error = (0, errorNormalize_js_1.ensureError)(maybeError);\n        await Promise.all(internals.plugins.map(async (plugin) => plugin.unexpectedErrorProcessingRequest?.({\n            requestContext,\n            error,\n        })));\n        server.logger.error(`Unexpected error processing request: ${error}`);\n        throw new Error('Internal server error');\n    }\n}\nexports.internalExecuteOperation = internalExecuteOperation;\nfunction isImplicitlyInstallablePlugin(p) {\n    return '__internal_installed_implicitly__' in p;\n}\nexports.isImplicitlyInstallablePlugin = isImplicitlyInstallablePlugin;\nexports.MEDIA_TYPES = {\n    APPLICATION_JSON: 'application/json; charset=utf-8',\n    APPLICATION_GRAPHQL_RESPONSE_JSON: 'application/graphql-response+json; charset=utf-8',\n    MULTIPART_MIXED_NO_DEFER_SPEC: 'multipart/mixed',\n    MULTIPART_MIXED_EXPERIMENTAL: 'multipart/mixed; deferSpec=20220824',\n    TEXT_HTML: 'text/html',\n};\nfunction chooseContentTypeForSingleResultResponse(head) {\n    const acceptHeader = head.headers.get('accept');\n    if (!acceptHeader) {\n        return exports.MEDIA_TYPES.APPLICATION_JSON;\n    }\n    else {\n        const preferred = new negotiator_1.default({\n            headers: { accept: head.headers.get('accept') },\n        }).mediaType([\n            exports.MEDIA_TYPES.APPLICATION_JSON,\n            exports.MEDIA_TYPES.APPLICATION_GRAPHQL_RESPONSE_JSON,\n        ]);\n        if (preferred) {\n            return preferred;\n        }\n        else {\n            return null;\n        }\n    }\n}\nexports.chooseContentTypeForSingleResultResponse = chooseContentTypeForSingleResultResponse;\nfunction cloneObject(object) {\n    return Object.assign(Object.create(Object.getPrototypeOf(object)), object);\n}\n//# sourceMappingURL=ApolloServer.js.map/src/errors/index.ts\u00052import { GraphQLError } from 'graphql';\n\nexport enum ApolloServerErrorCode {\n  INTERNAL_SERVER_ERROR = 'INTERNAL_SERVER_ERROR',\n  GRAPHQL_PARSE_FAILED = 'GRAPHQL_PARSE_FAILED',\n  GRAPHQL_VALIDATION_FAILED = 'GRAPHQL_VALIDATION_FAILED',\n  PERSISTED_QUERY_NOT_FOUND = 'PERSISTED_QUERY_NOT_FOUND',\n  PERSISTED_QUERY_NOT_SUPPORTED = 'PERSISTED_QUERY_NOT_SUPPORTED',\n  BAD_USER_INPUT = 'BAD_USER_INPUT',\n  OPERATION_RESOLUTION_FAILURE = 'OPERATION_RESOLUTION_FAILURE',\n  BAD_REQUEST = 'BAD_REQUEST',\n}\n\nexport enum ApolloServerValidationErrorCode {\n  INTROSPECTION_DISABLED = 'INTROSPECTION_DISABLED',\n}\n\n/**\n * unwrapResolverError is a useful helper function for `formatError` hooks.\n * Errors thrown in resolvers are wrapped by graphql-js in a GraphQLError that\n * adds context such as the `path` to the field in the operation. If you'd like\n * to look directly at the original error thrown in the resolver (with whatever\n * data is on that error object, but without fields like `path`), you can use\n * this function. Note that other GraphQLErrors that contain `originalError`\n * (like parse errors) are not unwrapped by this function.\n */\nexport function unwrapResolverError(error: unknown): unknown {\n  if (error instanceof GraphQLError && error.path && error.originalError) {\n    return error.originalError;\n  }\n  return error;\n}\n&/dist/cjs/externalTypes/graphql.js.map~{\"version\":3,\"file\":\"graphql.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/externalTypes/graphql.ts\"],\"names\":[],\"mappings\":\"\"}#/dist/esm/internalErrorClasses.d.ts\u0004timport { GraphQLError, GraphQLErrorOptions } from 'graphql';\nimport { ApolloServerErrorCode } from './errors/index.js';\ndeclare class GraphQLErrorWithCode extends GraphQLError {\n    constructor(message: string, code: ApolloServerErrorCode, options?: GraphQLErrorOptions);\n}\nexport declare class SyntaxError extends GraphQLErrorWithCode {\n    constructor(graphqlError: GraphQLError);\n}\nexport declare class ValidationError extends GraphQLErrorWithCode {\n    constructor(graphqlError: GraphQLError);\n}\nexport declare class PersistedQueryNotFoundError extends GraphQLErrorWithCode {\n    constructor();\n}\nexport declare class PersistedQueryNotSupportedError extends GraphQLErrorWithCode {\n    constructor();\n}\nexport declare class UserInputError extends GraphQLErrorWithCode {\n    constructor(graphqlError: GraphQLError);\n}\nexport declare class OperationResolutionError extends GraphQLErrorWithCode {\n    constructor(graphqlError: GraphQLError);\n}\nexport declare class BadRequestError extends GraphQLErrorWithCode {\n    constructor(message: string, options?: GraphQLErrorOptions);\n}\nexport {};\n//# sourceMappingURL=internalErrorClasses.d.ts.map/dist/esm/index.js.map{\"version\":3,\"file\":\"index.js\",\"sourceRoot\":\"\",\"sources\":[\"../../src/index.ts\"],\"names\":[],\"mappings\":\"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,cAAc,0BAA0B,CAAC\"}@/dist/cjs/plugin/usageReporting/operationDerivedDataCache.js.map\u0003{\"version\":3,\"file\":\"operationDerivedDataCache.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../../src/plugin/usageReporting/operationDerivedDataCache.ts\"],\"names\":[],\"mappings\":\";;;;;;AAEA,0DAAiC;AAOjC,SAAgB,+BAA+B,CAAC,EAC9C,MAAM,GAGP;IACC,IAAI,QAAc,CAAC;IACnB,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,OAAO,IAAI,mBAAQ,CAA+B;QAEhD,eAAe,CAAC,GAAG;YACjB,OAAO,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;QACxD,CAAC;QASD,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE;QAC7B,OAAO;YAEL,aAAa,EAAE,CAAC;YAGhB,IAAI,CAAC,QAAQ,IAAI,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,QAAQ,CAAC,OAAO,EAAE,GAAG,KAAK,EAAE;gBAElE,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC;gBACtB,MAAM,CAAC,IAAI,CACT;oBACE,iEAAiE;oBACjE,cAAc,aAAa,qBAAqB;oBAChD,gFAAgF;oBAChF,gEAAgE;oBAChE,wCAAwC;iBACzC,CAAC,IAAI,CAAC,EAAE,CAAC,CACX,CAAC;gBAGF,aAAa,GAAG,CAAC,CAAC;aACnB;QACH,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AA5CD,0EA4CC;AAED,SAAgB,4BAA4B,CAC1C,SAAiB,EACjB,aAAqB;IAErB,OAAO,GAAG,SAAS,GAAG,aAAa,IAAI,GAAG,GAAG,aAAa,EAAE,CAAC;AAC/D,CAAC;AALD,oEAKC\"}&/dist/cjs/externalTypes/plugins.js.map~{\"version\":3,\"file\":\"plugins.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/externalTypes/plugins.ts\"],\"names\":[],\"mappings\":\"\"}!/dist/esm/externalTypes/http.d.ts\u00025import type { HeaderMap } from '../utils/HeaderMap.js';\nexport interface HTTPGraphQLRequest {\n    method: string;\n    headers: HeaderMap;\n    search: string;\n    body: unknown;\n}\nexport interface HTTPGraphQLHead {\n    status?: number;\n    headers: HeaderMap;\n}\nexport declare type HTTPGraphQLResponseBody = {\n    kind: 'complete';\n    string: string;\n} | {\n    kind: 'chunked';\n    asyncIterator: AsyncIterableIterator<string>;\n};\nexport declare type HTTPGraphQLResponse = HTTPGraphQLHead & {\n    body: HTTPGraphQLResponseBody;\n};\n//# sourceMappingURL=http.d.ts.map6/dist/esm/externalTypes/incrementalDeliveryPolyfill.jsBexport {};\n//# sourceMappingURL=incrementalDeliveryPolyfill.js.map0/dist/esm/plugin/usageReporting/options.d.ts.map\b{\"version\":3,\"file\":\"options.d.ts\",\"sourceRoot\":\"\",\"sources\":[\"../../../../src/plugin/usageReporting/options.ts\"],\"names\":[],\"mappings\":\"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\"}/src/plugin/traceTreeBuilder.ts(// This class is a helper for ApolloServerPluginUsageReporting and\n// ApolloServerPluginInlineTrace.\nimport { GraphQLError, GraphQLResolveInfo, ResponsePath } from 'graphql';\nimport { Trace, google } from '@apollo/usage-reporting-protobuf';\nimport type { Logger } from '@apollo/utils.logger';\nimport type { SendErrorsOptions } from './usageReporting';\nimport { UnreachableCaseError } from '../utils/UnreachableCaseError.js';\n\nfunction internalError(message: string) {\n  return new Error(`[internal apollo-server error] ${message}`);\n}\n\nexport class TraceTreeBuilder {\n  private rootNode = new Trace.Node();\n  private logger: Logger;\n  public trace = new Trace({\n    root: this.rootNode,\n    // By default, each trace counts as one operation for the sake of field\n    // execution counts. If we end up calling the fieldLevelInstrumentation\n    // callback (once we've successfully resolved the operation) then we\n    // may set this to a higher number; but we'll start it at 1 so that traces\n    // that don't successfully resolve the operation (eg parse failures) or\n    // where we don't call the callback because a plugin set captureTraces to\n    // true have a reasonable default.\n    fieldExecutionWeight: 1,\n  });\n  public startHrTime?: [number, number];\n  private stopped = false;\n  private nodes = new Map<string, Trace.Node>([\n    [responsePathAsString(), this.rootNode],\n  ]);\n  private readonly transformError:\n    | ((err: GraphQLError) => GraphQLError | null)\n    | null;\n\n  public constructor(options: {\n    maskedBy: string;\n    logger: Logger;\n    sendErrors?: SendErrorsOptions;\n  }) {\n    const { logger, sendErrors, maskedBy } = options;\n    if (!sendErrors || 'masked' in sendErrors) {\n      this.transformError = () =>\n        new GraphQLError('<masked>', {\n          extensions: { maskedBy },\n        });\n    } else if ('transform' in sendErrors) {\n      this.transformError = sendErrors.transform;\n    } else if ('unmodified' in sendErrors) {\n      this.transformError = null;\n    } else {\n      throw new UnreachableCaseError(sendErrors);\n    }\n    this.logger = logger;\n  }\n\n  public startTiming() {\n    if (this.startHrTime) {\n      throw internalError('startTiming called twice!');\n    }\n    if (this.stopped) {\n      throw internalError('startTiming called after stopTiming!');\n    }\n    this.trace.startTime = dateToProtoTimestamp(new Date());\n    this.startHrTime = process.hrtime();\n  }\n\n  public stopTiming() {\n    if (!this.startHrTime) {\n      throw internalError('stopTiming called before startTiming!');\n    }\n    if (this.stopped) {\n      throw internalError('stopTiming called twice!');\n    }\n\n    this.trace.durationNs = durationHrTimeToNanos(\n      process.hrtime(this.startHrTime),\n    );\n    this.trace.endTime = dateToProtoTimestamp(new Date());\n    this.stopped = true;\n  }\n\n  public willResolveField(info: GraphQLResolveInfo): () => void {\n    if (!this.startHrTime) {\n      throw internalError('willResolveField called before startTiming!');\n    }\n    if (this.stopped) {\n      throw internalError('willResolveField called after stopTiming!');\n    }\n\n    const path = info.path;\n    const node = this.newNode(path);\n    node.type = info.returnType.toString();\n    node.parentType = info.parentType.toString();\n    node.startTime = durationHrTimeToNanos(process.hrtime(this.startHrTime));\n    if (typeof path.key === 'string' && path.key !== info.fieldName) {\n      // This field was aliased; send the original field name too (for FieldStats).\n      node.originalFieldName = info.fieldName;\n    }\n\n    return () => {\n      node.endTime = durationHrTimeToNanos(process.hrtime(this.startHrTime));\n    };\n  }\n\n  public didEncounterErrors(errors: readonly GraphQLError[]) {\n    errors.forEach((err) => {\n      // This is an error from a federated service. We will already be reporting\n      // it in the nested Trace in the query plan.\n      //\n      // XXX This probably shouldn't skip query or validation errors, which are\n      //      not in nested Traces because format() isn't called in this case! Or\n      //      maybe format() should be called in that case?\n      if (err.extensions?.serviceName) {\n        return;\n      }\n\n      // In terms of reporting, errors can be re-written by the user by\n      // utilizing the `transformError` parameter.  This allows changing\n      // the message or stack to remove potentially sensitive information.\n      // Returning `null` will result in the error not being reported at all.\n      const errorForReporting = this.transformAndNormalizeError(err);\n\n      if (errorForReporting === null) {\n        return;\n      }\n\n      this.addProtobufError(\n        errorForReporting.path,\n        errorToProtobufError(errorForReporting),\n      );\n    });\n  }\n\n  private addProtobufError(\n    path: ReadonlyArray<string | number> | undefined,\n    error: Trace.Error,\n  ) {\n    if (!this.startHrTime) {\n      throw internalError('addProtobufError called before startTiming!');\n    }\n    if (this.stopped) {\n      throw internalError('addProtobufError called after stopTiming!');\n    }\n\n    // By default, put errors on the root node.\n    let node = this.rootNode;\n    // If a non-GraphQLError Error sneaks in here somehow with a non-array\n    // path, don't crash.\n    if (Array.isArray(path)) {\n      const specificNode = this.nodes.get(path.join('.'));\n      if (specificNode) {\n        node = specificNode;\n      } else {\n        this.logger.warn(\n          `Could not find node with path ${path.join(\n            '.',\n          )}; defaulting to put errors on root node.`,\n        );\n      }\n    }\n\n    node.error.push(error);\n  }\n\n  private newNode(path: ResponsePath): Trace.Node {\n    const node = new Trace.Node();\n    const id = path.key;\n    if (typeof id === 'number') {\n      node.index = id;\n    } else {\n      node.responseName = id;\n    }\n    this.nodes.set(responsePathAsString(path), node);\n    const parentNode = this.ensureParentNode(path);\n    parentNode.child.push(node);\n    return node;\n  }\n\n  private ensureParentNode(path: ResponsePath): Trace.Node {\n    const parentPath = responsePathAsString(path.prev);\n    const parentNode = this.nodes.get(parentPath);\n    if (parentNode) {\n      return parentNode;\n    }\n    // Because we set up the root path when creating this.nodes, we now know\n    // that path.prev isn't undefined.\n    return this.newNode(path.prev!);\n  }\n\n  private transformAndNormalizeError(err: GraphQLError): GraphQLError | null {\n    if (this.transformError) {\n      // Before passing the error to the user-provided `transformError` function,\n      // we'll make a shadow copy of the error so the user is free to change\n      // the object as they see fit.\n\n      // At this stage, this error is only for the purposes of reporting, but\n      // this is even more important since this is still a reference to the\n      // original error object and changing it would also change the error which\n      // is returned in the response to the client.\n\n      // For the clone, we'll create a new object which utilizes the exact same\n      // prototype of the error being reported.\n      const clonedError = Object.assign(\n        Object.create(Object.getPrototypeOf(err)),\n        err,\n      );\n\n      const rewrittenError = this.transformError(clonedError);\n\n      // Returning an explicit `null` means the user is requesting that the error\n      // not be reported to Apollo.\n      if (rewrittenError === null) {\n        return null;\n      }\n\n      // We don't want users to be inadvertently not reporting errors, so if\n      // they haven't returned an explicit `GraphQLError` (or `null`, handled\n      // above), then we'll report the error as usual.\n      if (!(rewrittenError instanceof GraphQLError)) {\n        return err;\n      }\n\n      // We only allow transformError to change the message and extensions of the\n      // error; we keep everything else the same. That way people don't have to\n      // do extra work to keep the error on the same trace node. We also keep\n      // extensions the same if it isn't explicitly changed (to, eg, {}). (Note\n      // that many of the fields of GraphQLError are not enumerable and won't\n      // show up in the trace (even in the json field) anyway.)\n      return new GraphQLError(rewrittenError.message, {\n        nodes: err.nodes,\n        source: err.source,\n        positions: err.positions,\n        path: err.path,\n        originalError: err.originalError,\n        extensions: rewrittenError.extensions || err.extensions,\n      });\n    }\n    return err;\n  }\n}\n\n// Converts an hrtime array (as returned from process.hrtime) to nanoseconds.\n//\n// ONLY CALL THIS ON VALUES REPRESENTING DELTAS, NOT ON THE RAW RETURN VALUE\n// FROM process.hrtime() WITH NO ARGUMENTS.\n//\n// The entire point of the hrtime data structure is that the JavaScript Number\n// type can't represent all int64 values without loss of precision:\n// Number.MAX_SAFE_INTEGER nanoseconds is about 104 days. Calling this function\n// on a duration that represents a value less than 104 days is fine. Calling\n// this function on an absolute time (which is generally roughly time since\n// system boot) is not a good idea.\n//\n// XXX We should probably use google.protobuf.Duration on the wire instead of\n// ever trying to store durations in a single number.\nfunction durationHrTimeToNanos(hrtime: [number, number]) {\n  return hrtime[0] * 1e9 + hrtime[1];\n}\n\n// Convert from the linked-list ResponsePath format to a dot-joined\n// string. Includes the full path (field names and array indices).\nfunction responsePathAsString(p?: ResponsePath): string {\n  if (p === undefined) {\n    return '';\n  }\n\n  // A previous implementation used `responsePathAsArray` from `graphql-js/execution`,\n  // however, that employed an approach that created new arrays unnecessarily.\n  let res = String(p.key);\n\n  while ((p = p.prev) !== undefined) {\n    res = `${p.key}.${res}`;\n  }\n\n  return res;\n}\n\nfunction errorToProtobufError(error: GraphQLError): Trace.Error {\n  return new Trace.Error({\n    message: error.message,\n    location: (error.locations || []).map(\n      ({ line, column }) => new Trace.Location({ line, column }),\n    ),\n    json: JSON.stringify(error),\n  });\n}\n\n// Converts a JS Date into a Timestamp.\nexport function dateToProtoTimestamp(date: Date): google.protobuf.Timestamp {\n  const totalMillis = +date;\n  const millis = totalMillis % 1000;\n  return new google.protobuf.Timestamp({\n    seconds: (totalMillis - millis) / 1000,\n    nanos: millis * 1e6,\n  });\n}\n/dist/esm/httpBatching.js\u0007import { newHTTPGraphQLHead, runHttpQuery } from './runHttpQuery.js';\nimport { BadRequestError } from './internalErrorClasses.js';\nasync function runBatchedHttpQuery({ server, batchRequest, body, contextValue, schemaDerivedData, internals, }) {\n    if (body.length === 0) {\n        throw new BadRequestError('No operations found in request.');\n    }\n    const sharedResponseHTTPGraphQLHead = newHTTPGraphQLHead();\n    const responseBodies = await Promise.all(body.map(async (bodyPiece) => {\n        const singleRequest = {\n            ...batchRequest,\n            body: bodyPiece,\n        };\n        const response = await runHttpQuery({\n            server,\n            httpRequest: singleRequest,\n            contextValue,\n            schemaDerivedData,\n            internals,\n            sharedResponseHTTPGraphQLHead,\n        });\n        if (response.body.kind === 'chunked') {\n            throw Error('Incremental delivery is not implemented for batch requests');\n        }\n        return response.body.string;\n    }));\n    return {\n        ...sharedResponseHTTPGraphQLHead,\n        body: { kind: 'complete', string: `[${responseBodies.join(',')}]` },\n    };\n}\nexport async function runPotentiallyBatchedHttpQuery(server, httpGraphQLRequest, contextValue, schemaDerivedData, internals) {\n    if (!(httpGraphQLRequest.method === 'POST' &&\n        Array.isArray(httpGraphQLRequest.body))) {\n        return await runHttpQuery({\n            server,\n            httpRequest: httpGraphQLRequest,\n            contextValue,\n            schemaDerivedData,\n            internals,\n            sharedResponseHTTPGraphQLHead: null,\n        });\n    }\n    if (internals.allowBatchedHttpRequests) {\n        return await runBatchedHttpQuery({\n            server,\n            batchRequest: httpGraphQLRequest,\n            body: httpGraphQLRequest.body,\n            contextValue,\n            schemaDerivedData,\n            internals,\n        });\n    }\n    throw new BadRequestError('Operation batching disabled.');\n}\n//# sourceMappingURL=httpBatching.js.map$/dist/cjs/externalTypes/index.js.mapz{\"version\":3,\"file\":\"index.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/externalTypes/index.ts\"],\"names\":[],\"mappings\":\"\"})/dist/esm/plugin/usageReporting/plugin.jsa9import { Report, ReportHeader, Trace } from '@apollo/usage-reporting-protobuf';\nimport { usageReportingSignature, calculateReferencedFieldsByType, } from '@apollo/utils.usagereporting';\nimport retry from 'async-retry';\nimport { printSchema } from 'graphql';\nimport { AbortController } from 'node-abort-controller';\nimport fetch from 'node-fetch';\nimport os from 'os';\nimport { promisify } from 'util';\nimport { gzip } from 'zlib';\nimport { internalPlugin } from '../../internalPlugin.js';\nimport { dateToProtoTimestamp, TraceTreeBuilder } from '../traceTreeBuilder.js';\nimport { defaultSendOperationsAsTrace } from './defaultSendOperationsAsTrace.js';\nimport { createOperationDerivedDataCache, operationDerivedDataCacheKey, } from './operationDerivedDataCache.js';\nimport { OurReport } from './stats.js';\nimport { makeTraceDetails } from './traceDetails.js';\nimport { packageVersion } from '../../generated/packageVersion.js';\nimport { computeCoreSchemaHash } from '../../utils/computeCoreSchemaHash.js';\nconst gzipPromise = promisify(gzip);\nconst reportHeaderDefaults = {\n    hostname: os.hostname(),\n    agentVersion: `@apollo/server@${packageVersion}`,\n    runtimeVersion: `node ${process.version}`,\n    uname: `${os.platform()}, ${os.type()}, ${os.release()}, ${os.arch()})`,\n};\nexport function ApolloServerPluginUsageReporting(options = Object.create(null)) {\n    const fieldLevelInstrumentationOption = options.fieldLevelInstrumentation;\n    const fieldLevelInstrumentation = typeof fieldLevelInstrumentationOption === 'number'\n        ? async () => Math.random() < fieldLevelInstrumentationOption\n            ? 1 / fieldLevelInstrumentationOption\n            : 0\n        : fieldLevelInstrumentationOption\n            ? fieldLevelInstrumentationOption\n            : async () => true;\n    let requestDidStartHandler;\n    return internalPlugin({\n        __internal_plugin_id__: 'UsageReporting',\n        __is_disabled_plugin__: false,\n        async requestDidStart(requestContext) {\n            if (!requestDidStartHandler) {\n                throw Error('The usage reporting plugin has been asked to handle a request before the ' +\n                    'server has started. See https://github.com/apollographql/apollo-server/issues/4588 ' +\n                    'for more details.');\n            }\n            return requestDidStartHandler(requestContext);\n        },\n        async serverWillStart({ logger: serverLogger, apollo, startedInBackground, }) {\n            const logger = options.logger ?? serverLogger;\n            const { key, graphRef } = apollo;\n            if (!(key && graphRef)) {\n                throw new Error(\"You've enabled usage reporting via ApolloServerPluginUsageReporting, \" +\n                    'but you also need to provide your Apollo API key and graph ref, via ' +\n                    'the APOLLO_KEY/APOLLO_GRAPH_REF environment ' +\n                    'variables or via `new ApolloServer({apollo: {key, graphRef})`.');\n            }\n            logger.info('Apollo usage reporting starting! See your graph at ' +\n                `https://studio.apollographql.com/graph/${encodeURI(graphRef)}/`);\n            const sendReportsImmediately = options.sendReportsImmediately ?? startedInBackground;\n            let operationDerivedDataCache = null;\n            const reportByExecutableSchemaId = new Map();\n            const getReportWhichMustBeUsedImmediately = (executableSchemaId) => {\n                const existing = reportByExecutableSchemaId.get(executableSchemaId);\n                if (existing) {\n                    return existing;\n                }\n                const report = new OurReport(new ReportHeader({\n                    ...reportHeaderDefaults,\n                    executableSchemaId,\n                    graphRef,\n                }));\n                reportByExecutableSchemaId.set(executableSchemaId, report);\n                return report;\n            };\n            const getAndDeleteReport = (executableSchemaId) => {\n                const report = reportByExecutableSchemaId.get(executableSchemaId);\n                if (report) {\n                    reportByExecutableSchemaId.delete(executableSchemaId);\n                    return report;\n                }\n                return null;\n            };\n            const overriddenExecutableSchemaId = options.overrideReportedSchema\n                ? computeCoreSchemaHash(options.overrideReportedSchema)\n                : undefined;\n            let lastSeenExecutableSchemaToId;\n            let reportTimer;\n            if (!sendReportsImmediately) {\n                reportTimer = setInterval(() => sendAllReportsAndReportErrors(), options.reportIntervalMs || 10 * 1000);\n            }\n            let sendTraces = options.sendTraces ?? true;\n            const sendOperationAsTrace = options.experimental_sendOperationAsTrace ??\n                defaultSendOperationsAsTrace();\n            let stopped = false;\n            function executableSchemaIdForSchema(schema) {\n                if (lastSeenExecutableSchemaToId?.executableSchema === schema) {\n                    return lastSeenExecutableSchemaToId.executableSchemaId;\n                }\n                const id = computeCoreSchemaHash(printSchema(schema));\n                lastSeenExecutableSchemaToId = {\n                    executableSchema: schema,\n                    executableSchemaId: id,\n                };\n                return id;\n            }\n            async function sendAllReportsAndReportErrors() {\n                await Promise.all([...reportByExecutableSchemaId.keys()].map((executableSchemaId) => sendReportAndReportErrors(executableSchemaId)));\n            }\n            async function sendReportAndReportErrors(executableSchemaId) {\n                return sendReport(executableSchemaId).catch((err) => {\n                    if (options.reportErrorFunction) {\n                        options.reportErrorFunction(err);\n                    }\n                    else {\n                        logger.error(err.message);\n                    }\n                });\n            }\n            const sendReport = async (executableSchemaId) => {\n                let report = getAndDeleteReport(executableSchemaId);\n                if (!report ||\n                    (Object.keys(report.tracesPerQuery).length === 0 &&\n                        report.operationCount === 0)) {\n                    return;\n                }\n                report.endTime = dateToProtoTimestamp(new Date());\n                report.ensureCountsAreIntegers();\n                const protobufError = Report.verify(report);\n                if (protobufError) {\n                    throw new Error(`Error verifying report: ${protobufError}`);\n                }\n                let message = Report.encode(report).finish();\n                report = null;\n                if (options.debugPrintReports) {\n                    const decodedReport = Report.decode(message);\n                    logger.info(`Apollo usage report: ${JSON.stringify(decodedReport.toJSON())}`);\n                }\n                const compressed = await gzipPromise(message);\n                message = null;\n                const fetcher = options.fetcher ?? fetch;\n                const response = await retry(async () => {\n                    const controller = new AbortController();\n                    const abortTimeout = setTimeout(() => {\n                        controller.abort();\n                    }, options.requestTimeoutMs ?? 30000);\n                    let curResponse;\n                    try {\n                        curResponse = await fetcher((options.endpointUrl ||\n                            'https://usage-reporting.api.apollographql.com') +\n                            '/api/ingress/traces', {\n                            method: 'POST',\n                            headers: {\n                                'user-agent': 'ApolloServerPluginUsageReporting',\n                                'x-api-key': key,\n                                'content-encoding': 'gzip',\n                                accept: 'application/json',\n                            },\n                            body: compressed,\n                            signal: controller.signal,\n                        });\n                    }\n                    finally {\n                        clearTimeout(abortTimeout);\n                    }\n                    if (curResponse.status >= 500 && curResponse.status < 600) {\n                        throw new Error(`HTTP status ${curResponse.status}, ${(await curResponse.text()) || '(no body)'}`);\n                    }\n                    else {\n                        return curResponse;\n                    }\n                }, {\n                    retries: (options.maxAttempts || 5) - 1,\n                    minTimeout: options.minimumRetryDelayMs || 100,\n                    factor: 2,\n                }).catch((err) => {\n                    throw new Error(`Error sending report to Apollo servers: ${err.message}`);\n                });\n                if (response.status < 200 || response.status >= 300) {\n                    throw new Error(`Error sending report to Apollo servers: HTTP status ${response.status}, ${(await response.text()) || '(no body)'}`);\n                }\n                if (sendTraces &&\n                    response.status === 200 &&\n                    response.headers\n                        .get('content-type')\n                        ?.match(/^\\s*application\\/json\\s*(?:;|$)/i)) {\n                    const body = await response.text();\n                    let parsedBody;\n                    try {\n                        parsedBody = JSON.parse(body);\n                    }\n                    catch (e) {\n                        throw new Error(`Error parsing response from Apollo servers: ${e}`);\n                    }\n                    if (parsedBody.tracesIgnored === true) {\n                        logger.debug(\"This graph's organization does not have access to traces; sending all \" +\n                            'subsequent operations as stats.');\n                        sendTraces = false;\n                    }\n                }\n                if (options.debugPrintReports) {\n                    logger.info(`Apollo usage report: status ${response.status}`);\n                }\n            };\n            requestDidStartHandler = ({ metrics, schema, request: { http, variables }, }) => {\n                const treeBuilder = new TraceTreeBuilder({\n                    maskedBy: 'ApolloServerPluginUsageReporting',\n                    sendErrors: options.sendErrors,\n                    logger,\n                });\n                treeBuilder.startTiming();\n                metrics.startHrTime = treeBuilder.startHrTime;\n                let graphqlValidationFailure = false;\n                let graphqlUnknownOperationName = false;\n                let includeOperationInUsageReporting = null;\n                if (http) {\n                    treeBuilder.trace.http = new Trace.HTTP({\n                        method: Trace.HTTP.Method[http.method] || Trace.HTTP.Method.UNKNOWN,\n                        host: null,\n                        path: null,\n                    });\n                    if (options.sendHeaders) {\n                        makeHTTPRequestHeaders(treeBuilder.trace.http, http.headers, options.sendHeaders);\n                    }\n                }\n                async function maybeCallIncludeRequestHook(requestContext) {\n                    if (includeOperationInUsageReporting !== null)\n                        return;\n                    if (typeof options.includeRequest !== 'function') {\n                        includeOperationInUsageReporting = true;\n                        return;\n                    }\n                    includeOperationInUsageReporting = await options.includeRequest(requestContext);\n                    if (typeof includeOperationInUsageReporting !== 'boolean') {\n                        logger.warn(\"The 'includeRequest' async predicate function must return a boolean value.\");\n                        includeOperationInUsageReporting = true;\n                    }\n                }\n                let didResolveSource = false;\n                return {\n                    async didResolveSource(requestContext) {\n                        didResolveSource = true;\n                        if (metrics.persistedQueryHit) {\n                            treeBuilder.trace.persistedQueryHit = true;\n                        }\n                        if (metrics.persistedQueryRegister) {\n                            treeBuilder.trace.persistedQueryRegister = true;\n                        }\n                        if (variables) {\n                            treeBuilder.trace.details = makeTraceDetails(variables, options.sendVariableValues, requestContext.source);\n                        }\n                        const clientInfo = (options.generateClientInfo || defaultGenerateClientInfo)(requestContext);\n                        if (clientInfo) {\n                            const { clientName, clientVersion } = clientInfo;\n                            treeBuilder.trace.clientVersion = clientVersion || '';\n                            treeBuilder.trace.clientName = clientName || '';\n                        }\n                    },\n                    async validationDidStart() {\n                        return async (validationErrors) => {\n                            graphqlValidationFailure = validationErrors\n                                ? validationErrors.length !== 0\n                                : false;\n                        };\n                    },\n                    async didResolveOperation(requestContext) {\n                        graphqlUnknownOperationName =\n                            requestContext.operation === undefined;\n                        await maybeCallIncludeRequestHook(requestContext);\n                        if (includeOperationInUsageReporting &&\n                            !graphqlUnknownOperationName) {\n                            if (metrics.captureTraces === undefined) {\n                                const rawWeight = await fieldLevelInstrumentation(requestContext);\n                                treeBuilder.trace.fieldExecutionWeight =\n                                    typeof rawWeight === 'number' ? rawWeight : rawWeight ? 1 : 0;\n                                metrics.captureTraces =\n                                    !!treeBuilder.trace.fieldExecutionWeight;\n                            }\n                        }\n                    },\n                    async executionDidStart() {\n                        if (!metrics.captureTraces)\n                            return;\n                        return {\n                            willResolveField({ info }) {\n                                return treeBuilder.willResolveField(info);\n                            },\n                        };\n                    },\n                    async didEncounterSubsequentErrors(_requestContext, errors) {\n                        treeBuilder.didEncounterErrors(errors);\n                    },\n                    async willSendSubsequentPayload(requestContext, payload) {\n                        if (!payload.hasNext) {\n                            await operationFinished(requestContext);\n                        }\n                    },\n                    async willSendResponse(requestContext) {\n                        if (!didResolveSource)\n                            return;\n                        if (requestContext.errors) {\n                            treeBuilder.didEncounterErrors(requestContext.errors);\n                        }\n                        if (requestContext.response.body.kind === 'single') {\n                            await operationFinished(requestContext);\n                        }\n                    },\n                };\n                async function operationFinished(requestContext) {\n                    const resolvedOperation = !!requestContext.operation;\n                    await maybeCallIncludeRequestHook(requestContext);\n                    treeBuilder.stopTiming();\n                    const executableSchemaId = overriddenExecutableSchemaId ?? executableSchemaIdForSchema(schema);\n                    if (includeOperationInUsageReporting === false) {\n                        if (resolvedOperation) {\n                            getReportWhichMustBeUsedImmediately(executableSchemaId)\n                                .operationCount++;\n                        }\n                        return;\n                    }\n                    treeBuilder.trace.fullQueryCacheHit = !!metrics.responseCacheHit;\n                    treeBuilder.trace.forbiddenOperation = !!metrics.forbiddenOperation;\n                    treeBuilder.trace.registeredOperation = !!metrics.registeredOperation;\n                    const policyIfCacheable = requestContext.overallCachePolicy.policyIfCacheable();\n                    if (policyIfCacheable) {\n                        treeBuilder.trace.cachePolicy = new Trace.CachePolicy({\n                            scope: policyIfCacheable.scope === 'PRIVATE'\n                                ? Trace.CachePolicy.Scope.PRIVATE\n                                : policyIfCacheable.scope === 'PUBLIC'\n                                    ? Trace.CachePolicy.Scope.PUBLIC\n                                    : Trace.CachePolicy.Scope.UNKNOWN,\n                            maxAgeNs: policyIfCacheable.maxAge * 1e9,\n                        });\n                    }\n                    if (metrics.queryPlanTrace) {\n                        treeBuilder.trace.queryPlan = metrics.queryPlanTrace;\n                    }\n                    addTrace().catch(logger.error);\n                    async function addTrace() {\n                        if (stopped) {\n                            return;\n                        }\n                        await new Promise((res) => setImmediate(res));\n                        const executableSchemaId = overriddenExecutableSchemaId ??\n                            executableSchemaIdForSchema(schema);\n                        const { trace } = treeBuilder;\n                        let statsReportKey = undefined;\n                        let referencedFieldsByType;\n                        if (!requestContext.document) {\n                            statsReportKey = `## GraphQLParseFailure\\n`;\n                        }\n                        else if (graphqlValidationFailure) {\n                            statsReportKey = `## GraphQLValidationFailure\\n`;\n                        }\n                        else if (graphqlUnknownOperationName) {\n                            statsReportKey = `## GraphQLUnknownOperationName\\n`;\n                        }\n                        const isExecutable = statsReportKey === undefined;\n                        if (statsReportKey) {\n                            if (options.sendUnexecutableOperationDocuments) {\n                                trace.unexecutedOperationBody = requestContext.source;\n                                trace.unexecutedOperationName =\n                                    requestContext.request.operationName || '';\n                            }\n                            referencedFieldsByType = Object.create(null);\n                        }\n                        else {\n                            const operationDerivedData = getOperationDerivedData();\n                            statsReportKey = `# ${requestContext.operationName || '-'}\\n${operationDerivedData.signature}`;\n                            referencedFieldsByType =\n                                operationDerivedData.referencedFieldsByType;\n                        }\n                        const protobufError = Trace.verify(trace);\n                        if (protobufError) {\n                            throw new Error(`Error encoding trace: ${protobufError}`);\n                        }\n                        if (resolvedOperation) {\n                            getReportWhichMustBeUsedImmediately(executableSchemaId)\n                                .operationCount++;\n                        }\n                        getReportWhichMustBeUsedImmediately(executableSchemaId).addTrace({\n                            statsReportKey,\n                            trace,\n                            asTrace: sendTraces &&\n                                (!isExecutable || !!metrics.captureTraces) &&\n                                sendOperationAsTrace(trace, statsReportKey),\n                            referencedFieldsByType,\n                        });\n                        if (sendReportsImmediately ||\n                            getReportWhichMustBeUsedImmediately(executableSchemaId)\n                                .sizeEstimator.bytes >=\n                                (options.maxUncompressedReportSize || 4 * 1024 * 1024)) {\n                            await sendReportAndReportErrors(executableSchemaId);\n                        }\n                    }\n                    function getOperationDerivedData() {\n                        if (!requestContext.document) {\n                            throw new Error('No document?');\n                        }\n                        const cacheKey = operationDerivedDataCacheKey(requestContext.queryHash, requestContext.operationName || '');\n                        if (!operationDerivedDataCache ||\n                            operationDerivedDataCache.forSchema !== schema) {\n                            operationDerivedDataCache = {\n                                forSchema: schema,\n                                cache: createOperationDerivedDataCache({ logger }),\n                            };\n                        }\n                        const cachedOperationDerivedData = operationDerivedDataCache.cache.get(cacheKey);\n                        if (cachedOperationDerivedData) {\n                            return cachedOperationDerivedData;\n                        }\n                        const generatedSignature = (options.calculateSignature || usageReportingSignature)(requestContext.document, requestContext.operationName || '');\n                        const generatedOperationDerivedData = {\n                            signature: generatedSignature,\n                            referencedFieldsByType: calculateReferencedFieldsByType({\n                                document: requestContext.document,\n                                schema,\n                                resolvedOperationName: requestContext.operationName ?? null,\n                            }),\n                        };\n                        operationDerivedDataCache.cache.set(cacheKey, generatedOperationDerivedData);\n                        return generatedOperationDerivedData;\n                    }\n                }\n            };\n            return {\n                async serverWillStop() {\n                    if (reportTimer) {\n                        clearInterval(reportTimer);\n                        reportTimer = undefined;\n                    }\n                    stopped = true;\n                    await sendAllReportsAndReportErrors();\n                },\n            };\n        },\n    });\n}\nexport function makeHTTPRequestHeaders(http, headers, sendHeaders) {\n    if (!sendHeaders ||\n        ('none' in sendHeaders && sendHeaders.none) ||\n        ('all' in sendHeaders && !sendHeaders.all)) {\n        return;\n    }\n    for (const [key, value] of headers) {\n        if (('exceptNames' in sendHeaders &&\n            sendHeaders.exceptNames.some((exceptHeader) => {\n                return exceptHeader.toLowerCase() === key;\n            })) ||\n            ('onlyNames' in sendHeaders &&\n                !sendHeaders.onlyNames.some((header) => {\n                    return header.toLowerCase() === key;\n                }))) {\n            continue;\n        }\n        switch (key) {\n            case 'authorization':\n            case 'cookie':\n            case 'set-cookie':\n                break;\n            default:\n                http.requestHeaders[key] = new Trace.HTTP.Values({\n                    value: [value],\n                });\n        }\n    }\n}\nfunction defaultGenerateClientInfo({ request, }) {\n    const clientNameHeaderKey = 'apollographql-client-name';\n    const clientVersionHeaderKey = 'apollographql-client-version';\n    if (request.http?.headers?.get(clientNameHeaderKey) ||\n        request.http?.headers?.get(clientVersionHeaderKey)) {\n        return {\n            clientName: request.http?.headers?.get(clientNameHeaderKey),\n            clientVersion: request.http?.headers?.get(clientVersionHeaderKey),\n        };\n    }\n    else if (request.extensions?.clientInfo) {\n        return request.extensions.clientInfo;\n    }\n    else {\n        return {};\n    }\n}\n//# sourceMappingURL=plugin.js.map4/dist/cjs/plugin/usageReporting/durationHistogram.js\t\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DurationHistogram = void 0;\nclass DurationHistogram {\n    constructor(options) {\n        const initSize = options?.initSize || 74;\n        const buckets = options?.buckets;\n        const arrayInitSize = Math.max(buckets?.length || 0, initSize);\n        this.buckets = Array(arrayInitSize).fill(0);\n        if (buckets) {\n            buckets.forEach((val, index) => (this.buckets[index] = val));\n        }\n    }\n    toArray() {\n        let bufferedZeroes = 0;\n        const outputArray = [];\n        for (const value of this.buckets) {\n            if (value === 0) {\n                bufferedZeroes++;\n            }\n            else {\n                if (bufferedZeroes === 1) {\n                    outputArray.push(0);\n                }\n                else if (bufferedZeroes !== 0) {\n                    outputArray.push(-bufferedZeroes);\n                }\n                outputArray.push(Math.floor(value));\n                bufferedZeroes = 0;\n            }\n        }\n        return outputArray;\n    }\n    static durationToBucket(durationNs) {\n        const log = Math.log(durationNs / 1000.0);\n        const unboundedBucket = Math.ceil(log / DurationHistogram.EXPONENT_LOG);\n        return unboundedBucket <= 0 || Number.isNaN(unboundedBucket)\n            ? 0\n            : unboundedBucket >= DurationHistogram.BUCKET_COUNT\n                ? DurationHistogram.BUCKET_COUNT - 1\n                : unboundedBucket;\n    }\n    incrementDuration(durationNs, value = 1) {\n        this.incrementBucket(DurationHistogram.durationToBucket(durationNs), value);\n        return this;\n    }\n    incrementBucket(bucket, value = 1) {\n        if (bucket >= DurationHistogram.BUCKET_COUNT) {\n            throw Error('Bucket is out of bounds of the buckets array');\n        }\n        if (bucket >= this.buckets.length) {\n            const oldLength = this.buckets.length;\n            this.buckets.length = bucket + 1;\n            this.buckets.fill(0, oldLength);\n        }\n        this.buckets[bucket] += value;\n    }\n    combine(otherHistogram) {\n        for (let i = 0; i < otherHistogram.buckets.length; i++) {\n            this.incrementBucket(i, otherHistogram.buckets[i]);\n        }\n    }\n}\nexports.DurationHistogram = DurationHistogram;\nDurationHistogram.BUCKET_COUNT = 384;\nDurationHistogram.EXPONENT_LOG = Math.log(1.1);\n//# sourceMappingURL=durationHistogram.js.map,/dist/esm/externalTypes/constructor.d.ts.map\n{\"version\":3,\"file\":\"constructor.d.ts\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/externalTypes/constructor.ts\"],\"names\":[],\"mappings\":\"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\"}/dist/cjs/ApolloServer.js.mapJ{\"version\":3,\"file\":\"ApolloServer.js\",\"sourceRoot\":\"\",\"sources\":[\"../../src/ApolloServer.ts\"],\"names\":[],\"mappings\":\"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\"}1/src/externalTypes/incrementalDeliveryPolyfill.ts\u0007import type { FormattedExecutionResult, GraphQLFormattedError } from 'graphql';\n\n// This file defines types used in our public interface that will be imported\n// from `graphql-js` once graphql 17 is released. It is possible that these\n// types will change slightly before the final v17 is released, in which case\n// the relevant parts of our API may change incompatibly in a minor version of\n// AS4; this should not affect any users who aren't explicitly installing\n// pre-releases of graphql 17.\n\ninterface ObjMap<T> {\n  [key: string]: T;\n}\n\nexport interface GraphQLExperimentalFormattedInitialIncrementalExecutionResult<\n  TData = ObjMap<unknown>,\n  TExtensions = ObjMap<unknown>,\n> extends FormattedExecutionResult<TData, TExtensions> {\n  hasNext: boolean;\n  incremental?: ReadonlyArray<\n    GraphQLExperimentalFormattedIncrementalResult<TData, TExtensions>\n  >;\n  extensions?: TExtensions;\n}\n\nexport interface GraphQLExperimentalFormattedSubsequentIncrementalExecutionResult<\n  TData = ObjMap<unknown>,\n  TExtensions = ObjMap<unknown>,\n> {\n  hasNext: boolean;\n  incremental?: ReadonlyArray<\n    GraphQLExperimentalFormattedIncrementalResult<TData, TExtensions>\n  >;\n  extensions?: TExtensions;\n}\n\nexport type GraphQLExperimentalFormattedIncrementalResult<\n  TData = ObjMap<unknown>,\n  TExtensions = ObjMap<unknown>,\n> =\n  | GraphQLExperimentalFormattedIncrementalDeferResult<TData, TExtensions>\n  | GraphQLExperimentalFormattedIncrementalStreamResult<TData, TExtensions>;\n\nexport interface GraphQLExperimentalFormattedIncrementalDeferResult<\n  TData = ObjMap<unknown>,\n  TExtensions = ObjMap<unknown>,\n> extends FormattedExecutionResult<TData, TExtensions> {\n  path?: ReadonlyArray<string | number>;\n  label?: string;\n}\n\nexport interface GraphQLExperimentalFormattedIncrementalStreamResult<\n  TData = Array<unknown>,\n  TExtensions = ObjMap<unknown>,\n> {\n  errors?: ReadonlyArray<GraphQLFormattedError>;\n  items?: TData | null;\n  path?: ReadonlyArray<string | number>;\n  label?: string;\n  extensions?: TExtensions;\n}\n%/dist/esm/generated/packageVersion.jsQexport const packageVersion = \"4.1.1\";\n//# sourceMappingURL=packageVersion.js.map1/dist/cjs/plugin/drainHttpServer/stoppable.js.map\b{\"version\":3,\"file\":\"stoppable.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../../src/plugin/drainHttpServer/stoppable.ts\"],\"names\":[],\"mappings\":\"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\"}$/dist/esm/plugin/disabled/index.d.ts\u0002\\import type { BaseContext, ApolloServerPlugin } from '../../index.js';\nexport declare function ApolloServerPluginCacheControlDisabled(): ApolloServerPlugin<BaseContext>;\nexport declare function ApolloServerPluginInlineTraceDisabled(): ApolloServerPlugin<BaseContext>;\nexport declare function ApolloServerPluginLandingPageDisabled(): ApolloServerPlugin<BaseContext>;\nexport declare function ApolloServerPluginSchemaReportingDisabled(): ApolloServerPlugin<BaseContext>;\nexport declare function ApolloServerPluginUsageReportingDisabled(): ApolloServerPlugin<BaseContext>;\n//# sourceMappingURL=index.d.ts.map+/dist/cjs/utils/UnreachableCaseError.js.map\u0001\u0003{\"version\":3,\"file\":\"UnreachableCaseError.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/utils/UnreachableCaseError.ts\"],\"names\":[],\"mappings\":\";;;AAKA,MAAa,oBAAqB,SAAQ,KAAK;IAC7C,YAAY,GAAU;QACpB,KAAK,CAAC,qBAAqB,GAAG,EAAE,CAAC,CAAC;IACpC,CAAC;CACF;AAJD,oDAIC\"}'/dist/esm/utils/UnreachableCaseError.jsĬexport class UnreachableCaseError extends Error {\n    constructor(val) {\n        super(`Unreachable case: ${val}`);\n    }\n}\n//# sourceMappingURL=UnreachableCaseError.js.map/dist/esm/ApolloServer.js.mapL{\"version\":3,\"file\":\"ApolloServer.js\",\"sourceRoot\":\"\",\"sources\":[\"../../src/ApolloServer.ts\"],\"names\":[],\"mappings\":\"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\"}$/dist/cjs/utils/schemaManager.js.map\np{\"version\":3,\"file\":\"schemaManager.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/utils/schemaManager.ts\"],\"names\":[],\"mappings\":\"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\"}!/dist/esm/standalone/index.js.map\u0004U{\"version\":3,\"file\":\"index.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/standalone/index.ts\"],\"names\":[],\"mappings\":\"AACA,OAAO,UAAU,MAAM,aAAa,CAAC;AACrC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,IAAyC,MAAM,MAAM,CAAC;AAG7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEzD,OAAO,EAAE,iCAAiC,EAAE,MAAM,oCAAoC,CAAC;AACvF,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAkChE,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,MAA8B,EAC9B,OAA6E;IAE7E,MAAM,GAAG,GAAoB,OAAO,EAAE,CAAC;IACvC,MAAM,UAAU,GAAgB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;IAEvD,MAAM,CAAC,SAAS,CACd,iCAAiC,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,CAC9D,CAAC;IAEF,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IAErB,MAAM,OAAO,GAAG,OAAO,EAAE,OAAO,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,EAAe,CAAA,CAAC,CAAC;IACnE,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,UAAU,CAAC,IAAI,EAAE,EAAE,iBAAiB,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;IAE3E,MAAM,aAAa,GAAG,OAAO,EAAE,MAAM,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAExD,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;QAClC,UAAU,CAAC,MAAM,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,OAAO,EAAE,GAAG,EAAE,gBAAgB,CAAC,UAAU,CAAC,EAAE,CAAC;AAC/C,CAAC\"}/dist/esm/errors/index.js.map\u0002{\"version\":3,\"file\":\"index.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/errors/index.ts\"],\"names\":[],\"mappings\":\"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,MAAM,CAAN,IAAY,qBASX;AATD,WAAY,qBAAqB;IAC/B,wEAA+C,CAAA;IAC/C,sEAA6C,CAAA;IAC7C,gFAAuD,CAAA;IACvD,gFAAuD,CAAA;IACvD,wFAA+D,CAAA;IAC/D,0DAAiC,CAAA;IACjC,sFAA6D,CAAA;IAC7D,oDAA2B,CAAA;AAC7B,CAAC,EATW,qBAAqB,KAArB,qBAAqB,QAShC;AAED,MAAM,CAAN,IAAY,+BAEX;AAFD,WAAY,+BAA+B;IACzC,oFAAiD,CAAA;AACnD,CAAC,EAFW,+BAA+B,KAA/B,+BAA+B,QAE1C;AAWD,MAAM,UAAU,mBAAmB,CAAC,KAAc;IAChD,IAAI,KAAK,YAAY,YAAY,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,aAAa,EAAE;QACtE,OAAO,KAAK,CAAC,aAAa,CAAC;KAC5B;IACD,OAAO,KAAK,CAAC;AACf,CAAC\"}/src/utils/urlForHttpServer.ts\u0002import type { Server } from 'http';\nimport type { AddressInfo } from 'net';\nimport { format } from 'url';\n\nexport function urlForHttpServer(httpServer: Server): string {\n  const { address, port } = httpServer.address() as AddressInfo;\n\n  // Convert IPs which mean \"any address\" (IPv4 or IPv6) into localhost\n  // corresponding loopback ip. Note that the url field we're setting is\n  // primarily for consumption by our test suite. If this heuristic is wrong for\n  // your use case, explicitly specify a frontend host (in the `host` option\n  // when listening).\n  const hostname = address === '' || address === '::' ? 'localhost' : address;\n\n  return format({\n    protocol: 'http',\n    hostname,\n    port,\n    pathname: '/',\n  });\n}\n/dist/cjs/express4/index.js\u0007\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.expressMiddleware = void 0;\nconst url_1 = require(\"url\");\nfunction expressMiddleware(server, options) {\n    server.assertStarted('expressMiddleware()');\n    const defaultContext = async () => ({});\n    const context = options?.context ?? defaultContext;\n    return (req, res, next) => {\n        if (!req.body) {\n            res.status(500);\n            res.send('`req.body` is not set; this probably means you forgot to set up the ' +\n                '`body-parser` middleware before the Apollo Server middleware.');\n            return;\n        }\n        const headers = new Map();\n        for (const [key, value] of Object.entries(req.headers)) {\n            if (value !== undefined) {\n                headers.set(key, Array.isArray(value) ? value.join(', ') : value);\n            }\n        }\n        const httpGraphQLRequest = {\n            method: req.method.toUpperCase(),\n            headers,\n            search: (0, url_1.parse)(req.url).search ?? '',\n            body: req.body,\n        };\n        server\n            .executeHTTPGraphQLRequest({\n            httpGraphQLRequest,\n            context: () => context({ req, res }),\n        })\n            .then(async (httpGraphQLResponse) => {\n            for (const [key, value] of httpGraphQLResponse.headers) {\n                res.setHeader(key, value);\n            }\n            res.statusCode = httpGraphQLResponse.status || 200;\n            if (httpGraphQLResponse.body.kind === 'complete') {\n                res.send(httpGraphQLResponse.body.string);\n                return;\n            }\n            for await (const chunk of httpGraphQLResponse.body.asyncIterator) {\n                res.write(chunk);\n                if (typeof res.flush === 'function') {\n                    res.flush();\n                }\n            }\n            res.end();\n        })\n            .catch(next);\n    };\n}\nexports.expressMiddleware = expressMiddleware;\n//# sourceMappingURL=index.js.map#/src/utils/computeCoreSchemaHash.ts\u0001import { createHash } from '@apollo/utils.createhash';\n\n// This hash function is used in both the schema reporting and usage reporting\n// plugins. Making sure we use the same hash function hypothetically allows the\n// two reporting features to work well together, though in practice nothing on\n// the Studio side currently correlates this ID across both features.\nexport function computeCoreSchemaHash(schema: string): string {\n  return createHash('sha256').update(schema).digest('hex');\n}\n2/dist/cjs/plugin/schemaReporting/schemaReporter.js\u0014$\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SchemaReporter = exports.schemaReportGql = void 0;\nconst node_fetch_1 = __importDefault(require(\"node-fetch\"));\nconst packageVersion_js_1 = require(\"../../generated/packageVersion.js\");\nexports.schemaReportGql = `mutation SchemaReport($report: SchemaReport!, $coreSchema: String) {\n  reportSchema(report: $report, coreSchema: $coreSchema) {\n    __typename\n    ... on ReportSchemaError {\n      message\n      code\n    }\n    ... on ReportSchemaResponse {\n      inSeconds\n      withCoreSchema\n    }\n  }\n}\n`;\nclass SchemaReporter {\n    constructor(options) {\n        this.headers = {\n            'Content-Type': 'application/json',\n            'x-api-key': options.apiKey,\n            'apollographql-client-name': 'ApolloServerPluginSchemaReporting',\n            'apollographql-client-version': packageVersion_js_1.packageVersion,\n        };\n        this.endpointUrl =\n            options.endpointUrl ||\n                'https://schema-reporting.api.apollographql.com/api/graphql';\n        this.schemaReport = options.schemaReport;\n        this.coreSchema = options.coreSchema;\n        this.isStopped = false;\n        this.logger = options.logger;\n        this.initialReportingDelayInMs = options.initialReportingDelayInMs;\n        this.fallbackReportingDelayInMs = options.fallbackReportingDelayInMs;\n        this.fetcher = options.fetcher ?? node_fetch_1.default;\n    }\n    stopped() {\n        return this.isStopped;\n    }\n    start() {\n        this.pollTimer = setTimeout(() => this.sendOneReportAndScheduleNext(false), this.initialReportingDelayInMs);\n    }\n    stop() {\n        this.isStopped = true;\n        if (this.pollTimer) {\n            clearTimeout(this.pollTimer);\n            this.pollTimer = undefined;\n        }\n    }\n    async sendOneReportAndScheduleNext(sendNextWithCoreSchema) {\n        this.pollTimer = undefined;\n        if (this.stopped())\n            return;\n        try {\n            const result = await this.reportSchema(sendNextWithCoreSchema);\n            if (!result) {\n                return;\n            }\n            if (!this.stopped()) {\n                this.pollTimer = setTimeout(() => this.sendOneReportAndScheduleNext(result.withCoreSchema), result.inSeconds * 1000);\n            }\n            return;\n        }\n        catch (error) {\n            this.logger.error(`Error reporting server info to Apollo during schema reporting: ${error}`);\n            if (!this.stopped()) {\n                this.pollTimer = setTimeout(() => this.sendOneReportAndScheduleNext(false), this.fallbackReportingDelayInMs);\n            }\n        }\n    }\n    async reportSchema(withCoreSchema) {\n        const { data, errors } = await this.apolloQuery({\n            report: this.schemaReport,\n            coreSchema: withCoreSchema ? this.coreSchema : null,\n        });\n        if (errors) {\n            throw new Error(errors.map((x) => x.message).join('\\n'));\n        }\n        function msgForUnexpectedResponse(data) {\n            return [\n                'Unexpected response shape from Apollo when',\n                'reporting schema. If this continues, please reach',\n                'out to support@apollographql.com.',\n                'Received response:',\n                JSON.stringify(data),\n            ].join(' ');\n        }\n        if (!data || !data.reportSchema) {\n            throw new Error(msgForUnexpectedResponse(data));\n        }\n        if (data.reportSchema.__typename === 'ReportSchemaResponse') {\n            return data.reportSchema;\n        }\n        else if (data.reportSchema.__typename === 'ReportSchemaError') {\n            this.logger.error([\n                'Received input validation error from Apollo:',\n                data.reportSchema.message,\n                'Stopping reporting. Please fix the input errors.',\n            ].join(' '));\n            this.stop();\n            return null;\n        }\n        throw new Error(msgForUnexpectedResponse(data));\n    }\n    async apolloQuery(variables) {\n        const request = {\n            query: exports.schemaReportGql,\n            variables,\n        };\n        const httpResponse = await this.fetcher(this.endpointUrl, {\n            method: 'POST',\n            headers: this.headers,\n            body: JSON.stringify(request),\n        });\n        if (!httpResponse.ok) {\n            throw new Error([\n                `An unexpected HTTP status code (${httpResponse.status}) was`,\n                'encountered during schema reporting.',\n            ].join(' '));\n        }\n        try {\n            return await httpResponse.json();\n        }\n        catch (error) {\n            throw new Error([\n                \"Couldn't report schema to Apollo.\",\n                'Parsing response as JSON failed.',\n                'If this continues please reach out to support@apollographql.com',\n                error,\n            ].join(' '));\n        }\n    }\n}\nexports.SchemaReporter = SchemaReporter;\n//# sourceMappingURL=schemaReporter.js.map$/dist/esm/utils/invokeHooks.d.ts.map\u0003{\"version\":3,\"file\":\"invokeHooks.d.ts\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/utils/invokeHooks.ts\"],\"names\":[],\"mappings\":\"AAEA,aAAK,eAAe,CAAC,KAAK,SAAS,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,EAAE,KAAK,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAC9E,aAAK,cAAc,CAAC,KAAK,SAAS,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,EAAE,KAAK,KAAK,IAAI,CAAC;AAEpE,wBAAsB,kBAAkB,CAAC,CAAC,EAAE,YAAY,SAAS,OAAO,EAAE,EACxE,OAAO,EAAE,CAAC,EAAE,EACZ,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,OAAO,CAAC,eAAe,CAAC,YAAY,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC,GACxE,OAAO,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,CAYxC;AAID,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,YAAY,SAAS,OAAO,EAAE,EACtE,OAAO,EAAE,CAAC,EAAE,EACZ,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,cAAc,CAAC,YAAY,CAAC,GAAG,SAAS,GAAG,IAAI,GAC9D,cAAc,CAAC,YAAY,CAAC,CAY9B;AAED,wBAAsB,iCAAiC,CAAC,CAAC,EAAE,IAAI,EAC7D,OAAO,EAAE,CAAC,EAAE,EACZ,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,GAAG,IAAI,GAAG,SAAS,CAAC,GAC/C,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAQtB\"}2/src/plugin/landingPage/default/getEmbeddedHTML.ts\u000eimport type {\n  ApolloServerPluginEmbeddedLandingPageProductionDefaultOptions,\n  LandingPageConfig,\n} from './types';\n\n// This function turns an object into a string and replaces\n// <, >, &, ' with their unicode chars to avoid adding html tags to\n// the landing page html that might be passed from the config.\n// The only place these characters can appear in the output of\n// JSON.stringify is within string literals, where they can equally\n// well appear \\u-escaped. This specifically means that\n// `</script>` won't terminate the script block early.\n// (Perhaps we should have done this instead of the triple-encoding\n// of encodeConfig for the main landing page.)\nfunction getConfigStringForHtml(config: LandingPageConfig) {\n  return JSON.stringify(config)\n    .replace('<', '\\\\u003c')\n    .replace('>', '\\\\u003e')\n    .replace('&', '\\\\u0026')\n    .replace(\"'\", '\\\\u0027');\n}\n\nexport const getEmbeddedExplorerHTML = (\n  version: string,\n  config: ApolloServerPluginEmbeddedLandingPageProductionDefaultOptions,\n) => {\n  interface EmbeddableExplorerOptions {\n    graphRef: string;\n    target: string;\n\n    initialState?: {\n      document?: string;\n      variables?: Record<string, any>;\n      headers?: Record<string, string>;\n      displayOptions: {\n        docsPanelState?: 'open' | 'closed'; // default to 'open',\n        showHeadersAndEnvVars?: boolean; // default to `false`\n        theme?: 'dark' | 'light';\n      };\n    };\n    persistExplorerState?: boolean; // defaults to 'false'\n\n    endpointUrl: string;\n\n    includeCookies?: boolean; // defaults to 'false'\n  }\n  const productionLandingPageConfigOrDefault = {\n    displayOptions: {},\n    persistExplorerState: false,\n    ...(typeof config.embed === 'boolean' ? {} : config.embed),\n  };\n  const embeddedExplorerParams: Omit<EmbeddableExplorerOptions, 'endpointUrl'> =\n    {\n      ...config,\n      target: '#embeddableExplorer',\n      initialState: {\n        ...config,\n        displayOptions: {\n          ...productionLandingPageConfigOrDefault.displayOptions,\n        },\n      },\n      persistExplorerState:\n        productionLandingPageConfigOrDefault.persistExplorerState,\n    };\n\n  return `\n<div class=\"fallback\">\n  <h1>Welcome to Apollo Server</h1>\n  <p>Apollo Explorer cannot be loaded; it appears that you might be offline.</p>\n</div>\n<style>\n  iframe {\n    background-color: white;\n  }\n</style>\n<div\nstyle=\"width: 100vw; height: 100vh; position: absolute; top: 0;\"\nid=\"embeddableExplorer\"\n></div>\n<script src=\"https://embeddable-explorer.cdn.apollographql.com/${version}/embeddable-explorer.umd.production.min.js\"></script>\n<script>\n  var endpointUrl = window.location.href;\n  var embeddedExplorerConfig = ${getConfigStringForHtml(\n    embeddedExplorerParams,\n  )};\n  new window.EmbeddedExplorer({\n    ...embeddedExplorerConfig,\n    endpointUrl,\n  });\n</script>\n`;\n};\n\nexport const getEmbeddedSandboxHTML = (\n  version: string,\n  config: LandingPageConfig,\n) => {\n  return `\n<div class=\"fallback\">\n  <h1>Welcome to Apollo Server</h1>\n  <p>Apollo Sandbox cannot be loaded; it appears that you might be offline.</p>\n</div>\n<style>\n  iframe {\n    background-color: white;\n  }\n</style>\n<div\nstyle=\"width: 100vw; height: 100vh; position: absolute; top: 0;\"\nid=\"embeddableSandbox\"\n></div>\n<script src=\"https://embeddable-sandbox.cdn.apollographql.com/${version}/embeddable-sandbox.umd.production.min.js\"></script>\n<script>\n  var initialEndpoint = window.location.href;\n  new window.EmbeddedSandbox({\n    target: '#embeddableSandbox',\n    initialEndpoint,\n    includeCookies: ${config.includeCookies ?? 'false'},\n    initialState: ${getConfigStringForHtml({\n      document: config.document ?? undefined,\n      variables: config.variables ?? undefined,\n      headers: config.headers ?? undefined,\n    })},\n  });\n</script>\n`;\n};\n/dist/esm/httpBatching.d.ts.map\u0001{\"version\":3,\"file\":\"httpBatching.d.ts\",\"sourceRoot\":\"\",\"sources\":[\"../../src/httpBatching.ts\"],\"names\":[],\"mappings\":\"AAAA,OAAO,KAAK,EACV,WAAW,EACX,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EACV,YAAY,EACZ,qBAAqB,EACrB,iBAAiB,EAClB,MAAM,gBAAgB,CAAC;AA4DxB,wBAAsB,8BAA8B,CAClD,QAAQ,SAAS,WAAW,EAE5B,MAAM,EAAE,YAAY,CAAC,QAAQ,CAAC,EAC9B,kBAAkB,EAAE,kBAAkB,EACtC,YAAY,EAAE,QAAQ,EACtB,iBAAiB,EAAE,iBAAiB,EACpC,SAAS,EAAE,qBAAqB,CAAC,QAAQ,CAAC,GACzC,OAAO,CAAC,mBAAmB,CAAC,CA2B9B\"})/dist/cjs/plugin/schemaReporting/index.js\u0015\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ApolloServerPluginSchemaReporting = void 0;\nconst os_1 = __importDefault(require(\"os\"));\nconst internalPlugin_js_1 = require(\"../../internalPlugin.js\");\nconst uuid_1 = require(\"uuid\");\nconst graphql_1 = require(\"graphql\");\nconst schemaReporter_js_1 = require(\"./schemaReporter.js\");\nconst schemaIsFederated_js_1 = require(\"../schemaIsFederated.js\");\nconst packageVersion_js_1 = require(\"../../generated/packageVersion.js\");\nconst computeCoreSchemaHash_js_1 = require(\"../../utils/computeCoreSchemaHash.js\");\nfunction ApolloServerPluginSchemaReporting({ initialDelayMaxMs, overrideReportedSchema, endpointUrl, fetcher, } = Object.create(null)) {\n    const bootId = (0, uuid_1.v4)();\n    return (0, internalPlugin_js_1.internalPlugin)({\n        __internal_plugin_id__: 'SchemaReporting',\n        __is_disabled_plugin__: false,\n        async serverWillStart({ apollo, schema, logger }) {\n            const { key, graphRef } = apollo;\n            if (!key) {\n                throw Error('To use ApolloServerPluginSchemaReporting, you must provide an Apollo API ' +\n                    'key, via the APOLLO_KEY environment variable or via `new ApolloServer({apollo: {key})`');\n            }\n            if (!graphRef) {\n                throw Error('To use ApolloServerPluginSchemaReporting, you must provide your graph ref (eg, ' +\n                    \"'my-graph-id@my-graph-variant'). Try setting the APOLLO_GRAPH_REF environment \" +\n                    'variable or passing `new ApolloServer({apollo: {graphRef}})`.');\n            }\n            if (overrideReportedSchema) {\n                try {\n                    const validationErrors = (0, graphql_1.validateSchema)((0, graphql_1.buildSchema)(overrideReportedSchema, { noLocation: true }));\n                    if (validationErrors.length) {\n                        throw new Error(validationErrors.map((error) => error.message).join('\\n'));\n                    }\n                }\n                catch (err) {\n                    throw new Error('The schema provided to overrideReportedSchema failed to parse or ' +\n                        `validate: ${err.message}`);\n                }\n            }\n            if ((0, schemaIsFederated_js_1.schemaIsFederated)(schema)) {\n                throw Error([\n                    'Schema reporting is not yet compatible with federated services.',\n                    \"If you're interested in using schema reporting with federated\",\n                    'services, please contact Apollo support. To set up managed federation, see',\n                    'https://go.apollo.dev/s/managed-federation',\n                ].join(' '));\n            }\n            if (endpointUrl !== undefined) {\n                logger.info(`Apollo schema reporting: schema reporting URL override: ${endpointUrl}`);\n            }\n            const baseSchemaReport = {\n                bootId,\n                graphRef,\n                platform: process.env.APOLLO_SERVER_PLATFORM || 'local',\n                runtimeVersion: `node ${process.version}`,\n                userVersion: process.env.APOLLO_SERVER_USER_VERSION,\n                serverId: process.env.APOLLO_SERVER_ID || process.env.HOSTNAME || os_1.default.hostname(),\n                libraryVersion: `@apollo/server@${packageVersion_js_1.packageVersion}`,\n            };\n            let currentSchemaReporter;\n            return {\n                schemaDidLoadOrUpdate({ apiSchema, coreSupergraphSdl }) {\n                    if (overrideReportedSchema !== undefined) {\n                        if (currentSchemaReporter) {\n                            return;\n                        }\n                        else {\n                            logger.info('Apollo schema reporting: schema to report has been overridden');\n                        }\n                    }\n                    const coreSchema = overrideReportedSchema ??\n                        coreSupergraphSdl ??\n                        (0, graphql_1.printSchema)(apiSchema);\n                    const coreSchemaHash = (0, computeCoreSchemaHash_js_1.computeCoreSchemaHash)(coreSchema);\n                    const schemaReport = {\n                        ...baseSchemaReport,\n                        coreSchemaHash,\n                    };\n                    currentSchemaReporter?.stop();\n                    currentSchemaReporter = new schemaReporter_js_1.SchemaReporter({\n                        schemaReport,\n                        coreSchema,\n                        apiKey: key,\n                        endpointUrl,\n                        logger,\n                        initialReportingDelayInMs: Math.floor(Math.random() * (initialDelayMaxMs ?? 10000)),\n                        fallbackReportingDelayInMs: 20000,\n                        fetcher,\n                    });\n                    currentSchemaReporter.start();\n                    logger.info('Apollo schema reporting: reporting a new schema to Studio! See your graph at ' +\n                        `https://studio.apollographql.com/graph/${encodeURI(graphRef)}/ with server info ${JSON.stringify(schemaReport)}`);\n                },\n                async serverWillStop() {\n                    currentSchemaReporter?.stop();\n                },\n            };\n        },\n    });\n}\nexports.ApolloServerPluginSchemaReporting = ApolloServerPluginSchemaReporting;\n//# sourceMappingURL=index.js.map(/dist/esm/utils/schemaInstrumentation.js\n8import { getNamedType, GraphQLObjectType, defaultFieldResolver, } from 'graphql';\nexport const symbolExecutionDispatcherWillResolveField = Symbol('apolloServerExecutionDispatcherWillResolveField');\nexport const symbolUserFieldResolver = Symbol('apolloServerUserFieldResolver');\nconst symbolPluginsEnabled = Symbol('apolloServerPluginsEnabled');\nexport function enablePluginsForSchemaResolvers(schema) {\n    if (pluginsEnabledForSchemaResolvers(schema)) {\n        return schema;\n    }\n    Object.defineProperty(schema, symbolPluginsEnabled, {\n        value: true,\n    });\n    const typeMap = schema.getTypeMap();\n    Object.values(typeMap).forEach((type) => {\n        if (!getNamedType(type).name.startsWith('__') &&\n            type instanceof GraphQLObjectType) {\n            const fields = type.getFields();\n            Object.values(fields).forEach((field) => {\n                wrapField(field);\n            });\n        }\n    });\n    return schema;\n}\nexport function pluginsEnabledForSchemaResolvers(schema) {\n    return !!schema[symbolPluginsEnabled];\n}\nfunction wrapField(field) {\n    const originalFieldResolve = field.resolve;\n    field.resolve = (source, args, contextValue, info) => {\n        const willResolveField = contextValue?.[symbolExecutionDispatcherWillResolveField];\n        const userFieldResolver = contextValue?.[symbolUserFieldResolver];\n        const didResolveField = typeof willResolveField === 'function' &&\n            willResolveField({ source, args, contextValue, info });\n        const fieldResolver = originalFieldResolve || userFieldResolver || defaultFieldResolver;\n        try {\n            const result = fieldResolver(source, args, contextValue, info);\n            if (typeof didResolveField === 'function') {\n                whenResultIsFinished(result, didResolveField);\n            }\n            return result;\n        }\n        catch (error) {\n            if (typeof didResolveField === 'function') {\n                didResolveField(error);\n            }\n            throw error;\n        }\n    };\n}\nfunction isPromise(x) {\n    return x && typeof x.then === 'function';\n}\nexport function whenResultIsFinished(result, callback) {\n    if (isPromise(result)) {\n        result.then((r) => callback(null, r), (err) => callback(err));\n    }\n    else if (Array.isArray(result)) {\n        if (result.some(isPromise)) {\n            Promise.all(result).then((r) => callback(null, r), (err) => callback(err));\n        }\n        else {\n            callback(null, result);\n        }\n    }\n    else {\n        callback(null, result);\n    }\n}\n//# sourceMappingURL=schemaInstrumentation.js.map$/dist/esm/externalTypes/context.d.ts\u0001uexport declare type BaseContext = {};\nexport declare type ContextFunction<TIntegrationSpecificArgs extends any[], TContext extends BaseContext = BaseContext> = (...integrationContext: TIntegrationSpecificArgs) => Promise<TContext>;\nexport declare type ContextThunk<TContext extends BaseContext = BaseContext> = () => Promise<TContext>;\n//# sourceMappingURL=context.d.ts.map/dist/esm/cachePolicy.d.tsĠimport type { CachePolicy } from '@apollo/cache-control-types';\nexport declare function newCachePolicy(): CachePolicy;\n//# sourceMappingURL=cachePolicy.d.ts.map!/dist/esm/internalErrorClasses.js\f+import { GraphQLError } from 'graphql';\nimport { ApolloServerErrorCode } from './errors/index.js';\nimport { newHTTPGraphQLHead } from './runHttpQuery.js';\nimport { HeaderMap } from './utils/HeaderMap.js';\nclass GraphQLErrorWithCode extends GraphQLError {\n    constructor(message, code, options) {\n        super(message, {\n            ...options,\n            extensions: { ...options?.extensions, code },\n        });\n        this.name = this.constructor.name;\n    }\n}\nexport class SyntaxError extends GraphQLErrorWithCode {\n    constructor(graphqlError) {\n        super(graphqlError.message, ApolloServerErrorCode.GRAPHQL_PARSE_FAILED, {\n            source: graphqlError.source,\n            positions: graphqlError.positions,\n            extensions: { http: newHTTPGraphQLHead(400), ...graphqlError.extensions },\n            originalError: graphqlError,\n        });\n    }\n}\nexport class ValidationError extends GraphQLErrorWithCode {\n    constructor(graphqlError) {\n        super(graphqlError.message, ApolloServerErrorCode.GRAPHQL_VALIDATION_FAILED, {\n            nodes: graphqlError.nodes,\n            extensions: {\n                http: newHTTPGraphQLHead(400),\n                ...graphqlError.extensions,\n            },\n            originalError: graphqlError.originalError ?? graphqlError,\n        });\n    }\n}\nconst getPersistedQueryErrorHttp = () => ({\n    status: 200,\n    headers: new HeaderMap([\n        ['cache-control', 'private, no-cache, must-revalidate'],\n    ]),\n});\nexport class PersistedQueryNotFoundError extends GraphQLErrorWithCode {\n    constructor() {\n        super('PersistedQueryNotFound', ApolloServerErrorCode.PERSISTED_QUERY_NOT_FOUND, { extensions: { http: getPersistedQueryErrorHttp() } });\n    }\n}\nexport class PersistedQueryNotSupportedError extends GraphQLErrorWithCode {\n    constructor() {\n        super('PersistedQueryNotSupported', ApolloServerErrorCode.PERSISTED_QUERY_NOT_SUPPORTED, { extensions: { http: getPersistedQueryErrorHttp() } });\n    }\n}\nexport class UserInputError extends GraphQLErrorWithCode {\n    constructor(graphqlError) {\n        super(graphqlError.message, ApolloServerErrorCode.BAD_USER_INPUT, {\n            nodes: graphqlError.nodes,\n            originalError: graphqlError.originalError ?? graphqlError,\n            extensions: graphqlError.extensions,\n        });\n    }\n}\nexport class OperationResolutionError extends GraphQLErrorWithCode {\n    constructor(graphqlError) {\n        super(graphqlError.message, ApolloServerErrorCode.OPERATION_RESOLUTION_FAILURE, {\n            nodes: graphqlError.nodes,\n            originalError: graphqlError.originalError ?? graphqlError,\n            extensions: {\n                http: newHTTPGraphQLHead(400),\n                ...graphqlError.extensions,\n            },\n        });\n    }\n}\nexport class BadRequestError extends GraphQLErrorWithCode {\n    constructor(message, options) {\n        super(message, ApolloServerErrorCode.BAD_REQUEST, {\n            ...options,\n            extensions: { http: newHTTPGraphQLHead(400), ...options?.extensions },\n        });\n    }\n}\n//# sourceMappingURL=internalErrorClasses.js.map/dist/esm/utils/isDefined.d.tsuexport declare function isDefined<T>(t: T | undefined | null | void): t is T;\n//# sourceMappingURL=isDefined.d.ts.map\"/dist/cjs/utils/invokeHooks.js.map\u0004]{\"version\":3,\"file\":\"invokeHooks.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/utils/invokeHooks.ts\"],\"names\":[],\"mappings\":\";;;AAAA,iDAA2C;AAKpC,KAAK,UAAU,kBAAkB,CACtC,OAAY,EACZ,IAAyE;IAEzE,MAAM,WAAW,GAAG,CAClB,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CACzD,CAAC,MAAM,CAAC,wBAAS,CAAC,CAAC;IAEpB,WAAW,CAAC,OAAO,EAAE,CAAC;IAEtB,OAAO,KAAK,EAAE,GAAG,IAAkB,EAAE,EAAE;QACrC,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE;YACpC,UAAU,CAAC,GAAG,IAAI,CAAC,CAAC;SACrB;IACH,CAAC,CAAC;AACJ,CAAC;AAfD,gDAeC;AAID,SAAgB,sBAAsB,CACpC,OAAY,EACZ,IAA+D;IAE/D,MAAM,WAAW,GAAmC,OAAO;SACxD,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SAC7B,MAAM,CAAC,wBAAS,CAAC,CAAC;IAErB,WAAW,CAAC,OAAO,EAAE,CAAC;IAEtB,OAAO,CAAC,GAAG,IAAkB,EAAE,EAAE;QAC/B,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE;YACpC,UAAU,CAAC,GAAG,IAAI,CAAC,CAAC;SACrB;IACH,CAAC,CAAC;AACJ,CAAC;AAfD,wDAeC;AAEM,KAAK,UAAU,iCAAiC,CACrD,OAAY,EACZ,IAAgD;IAEhD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;QAC5B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC;QACjC,IAAI,KAAK,IAAI,IAAI,EAAE;YACjB,OAAO,KAAK,CAAC;SACd;KACF;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAXD,8EAWC\"},/dist/esm/plugin/usageReporting/stats.js.map!\u001d{\"version\":3,\"file\":\"stats.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../../src/plugin/usageReporting/stats.ts\"],\"names\":[],\"mappings\":\"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\"}/dist/cjs/cachePolicy.js\u0004G\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.newCachePolicy = void 0;\nfunction newCachePolicy() {\n    return {\n        maxAge: undefined,\n        scope: undefined,\n        restrict(hint) {\n            if (hint.maxAge !== undefined &&\n                (this.maxAge === undefined || hint.maxAge < this.maxAge)) {\n                this.maxAge = hint.maxAge;\n            }\n            if (hint.scope !== undefined && this.scope !== 'PRIVATE') {\n                this.scope = hint.scope;\n            }\n        },\n        replace(hint) {\n            if (hint.maxAge !== undefined) {\n                this.maxAge = hint.maxAge;\n            }\n            if (hint.scope !== undefined) {\n                this.scope = hint.scope;\n            }\n        },\n        policyIfCacheable() {\n            if (this.maxAge === undefined || this.maxAge === 0) {\n                return null;\n            }\n            return { maxAge: this.maxAge, scope: this.scope ?? 'PUBLIC' };\n        },\n    };\n}\nexports.newCachePolicy = newCachePolicy;\n//# sourceMappingURL=cachePolicy.js.map/dist/cjs/errors/index.js\u0006=\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.unwrapResolverError = exports.ApolloServerValidationErrorCode = exports.ApolloServerErrorCode = void 0;\nconst graphql_1 = require(\"graphql\");\nvar ApolloServerErrorCode;\n(function (ApolloServerErrorCode) {\n    ApolloServerErrorCode[\"INTERNAL_SERVER_ERROR\"] = \"INTERNAL_SERVER_ERROR\";\n    ApolloServerErrorCode[\"GRAPHQL_PARSE_FAILED\"] = \"GRAPHQL_PARSE_FAILED\";\n    ApolloServerErrorCode[\"GRAPHQL_VALIDATION_FAILED\"] = \"GRAPHQL_VALIDATION_FAILED\";\n    ApolloServerErrorCode[\"PERSISTED_QUERY_NOT_FOUND\"] = \"PERSISTED_QUERY_NOT_FOUND\";\n    ApolloServerErrorCode[\"PERSISTED_QUERY_NOT_SUPPORTED\"] = \"PERSISTED_QUERY_NOT_SUPPORTED\";\n    ApolloServerErrorCode[\"BAD_USER_INPUT\"] = \"BAD_USER_INPUT\";\n    ApolloServerErrorCode[\"OPERATION_RESOLUTION_FAILURE\"] = \"OPERATION_RESOLUTION_FAILURE\";\n    ApolloServerErrorCode[\"BAD_REQUEST\"] = \"BAD_REQUEST\";\n})(ApolloServerErrorCode = exports.ApolloServerErrorCode || (exports.ApolloServerErrorCode = {}));\nvar ApolloServerValidationErrorCode;\n(function (ApolloServerValidationErrorCode) {\n    ApolloServerValidationErrorCode[\"INTROSPECTION_DISABLED\"] = \"INTROSPECTION_DISABLED\";\n})(ApolloServerValidationErrorCode = exports.ApolloServerValidationErrorCode || (exports.ApolloServerValidationErrorCode = {}));\nfunction unwrapResolverError(error) {\n    if (error instanceof graphql_1.GraphQLError && error.path && error.originalError) {\n        return error.originalError;\n    }\n    return error;\n}\nexports.unwrapResolverError = unwrapResolverError;\n//# sourceMappingURL=index.js.map(/src/plugin/landingPage/default/index.ts\u0012import type {\n  ApolloServerPlugin,\n  BaseContext,\n} from '../../../externalTypes/index.js';\nimport type { ImplicitlyInstallablePlugin } from '../../../ApolloServer.js';\nimport type {\n  ApolloServerPluginLandingPageLocalDefaultOptions,\n  ApolloServerPluginLandingPageProductionDefaultOptions,\n  LandingPageConfig,\n} from './types.js';\nimport {\n  getEmbeddedExplorerHTML,\n  getEmbeddedSandboxHTML,\n} from './getEmbeddedHTML.js';\n\nexport type {\n  ApolloServerPluginLandingPageLocalDefaultOptions,\n  ApolloServerPluginLandingPageProductionDefaultOptions,\n};\n\nexport function ApolloServerPluginLandingPageLocalDefault(\n  options: ApolloServerPluginLandingPageLocalDefaultOptions = {},\n): ApolloServerPlugin {\n  const { version, __internal_apolloStudioEnv__, ...rest } = {\n    // we default to Sandbox unless embed is specified as false\n    embed: true as const,\n    ...options,\n  };\n  return ApolloServerPluginLandingPageDefault(version, {\n    isProd: false,\n    apolloStudioEnv: __internal_apolloStudioEnv__,\n    ...rest,\n  });\n}\n\nexport function ApolloServerPluginLandingPageProductionDefault(\n  options: ApolloServerPluginLandingPageProductionDefaultOptions = {},\n): ApolloServerPlugin {\n  const { version, __internal_apolloStudioEnv__, ...rest } = options;\n  return ApolloServerPluginLandingPageDefault(version, {\n    isProd: true,\n    apolloStudioEnv: __internal_apolloStudioEnv__,\n    ...rest,\n  });\n}\n\n// A triple encoding! Wow! First we use JSON.stringify to turn our object into a\n// string. Then we encodeURIComponent so we don't have to stress about what\n// would happen if the config contained `</script>`. Finally, we JSON.stringify\n// it again, which in practice just wraps it in a pair of double quotes (since\n// there shouldn't be any backslashes left after encodeURIComponent). The\n// consumer of this needs to decodeURIComponent and then JSON.parse; there's\n// only one JSON.parse because the outermost JSON string is parsed by the JS\n// parser itself.\nfunction encodeConfig(config: LandingPageConfig): string {\n  return JSON.stringify(encodeURIComponent(JSON.stringify(config)));\n}\n\nconst getNonEmbeddedLandingPageHTML = (\n  version: string,\n  config: LandingPageConfig,\n) => {\n  const encodedConfig = encodeConfig(config);\n\n  return `\n <div class=\"fallback\">\n  <h1>Welcome to Apollo Server</h1>\n  <p>The full landing page cannot be loaded; it appears that you might be offline.</p>\n</div>\n<script>window.landingPage = ${encodedConfig};</script>\n<script src=\"https://apollo-server-landing-page.cdn.apollographql.com/${version}/static/js/main.js\"></script>`;\n};\n\n// Helper for the two actual plugin functions.\nfunction ApolloServerPluginLandingPageDefault<TContext extends BaseContext>(\n  maybeVersion: string | undefined,\n  config: LandingPageConfig & {\n    isProd: boolean;\n    apolloStudioEnv: 'staging' | 'prod' | undefined;\n  },\n): ImplicitlyInstallablePlugin<TContext> {\n  const version = maybeVersion ?? '_latest';\n\n  return {\n    __internal_installed_implicitly__: false,\n    async serverWillStart() {\n      return {\n        async renderLandingPage() {\n          const html = `\n<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\" />\n    <link\n      rel=\"icon\"\n      href=\"https://apollo-server-landing-page.cdn.apollographql.com/${version}/assets/favicon.png\"\n    />\n    <meta name=\"viewport\" content=\"width=device-width,initial-scale=1\" />\n    <link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" />\n    <link\n      href=\"https://fonts.googleapis.com/css2?family=Source+Sans+Pro&display=swap\"\n      rel=\"stylesheet\"\n    />\n    <meta name=\"theme-color\" content=\"#000000\" />\n    <meta name=\"description\" content=\"Apollo server landing page\" />\n    <link\n      rel=\"apple-touch-icon\"\n      href=\"https://apollo-server-landing-page.cdn.apollographql.com/${version}/assets/favicon.png\"\n    />\n    <link\n      rel=\"manifest\"\n      href=\"https://apollo-server-landing-page.cdn.apollographql.com/${version}/manifest.json\"\n    />\n    <title>Apollo Server</title>\n  </head>\n  <body style=\"margin: 0; overflow-x: hidden; overflow-y: hidden\">\n    <noscript>You need to enable JavaScript to run this app.</noscript>\n    <div id=\"react-root\">\n      <style>\n        .fallback {\n          opacity: 0;\n          animation: fadeIn 1s 1s;\n          animation-iteration-count: 1;\n          animation-fill-mode: forwards;\n          padding: 1em;\n        }\n        @keyframes fadeIn {\n          0% {opacity:0;}\n          100% {opacity:1; }\n        }\n      </style>\n    ${\n      config.embed\n        ? 'graphRef' in config && config.graphRef\n          ? getEmbeddedExplorerHTML(version, config)\n          : getEmbeddedSandboxHTML(version, config)\n        : getNonEmbeddedLandingPageHTML(version, config)\n    }\n    </div>\n  </body>\n</html>\n          `;\n          return { html };\n        },\n      };\n    },\n  };\n}\n/dist/esm/internalPlugin.js.map\u0001\b{\"version\":3,\"file\":\"internalPlugin.js\",\"sourceRoot\":\"\",\"sources\":[\"../../src/internalPlugin.ts\"],\"names\":[],\"mappings\":\"AAqBA,MAAM,UAAU,cAAc,CAC5B,CAAuC;IAEvC,OAAO,CAAC,CAAC;AACX,CAAC;AASD,MAAM,UAAU,gBAAgB,CAC9B,MAAoC;IAIpC,OAAO,wBAAwB,IAAI,MAAM,CAAC;AAC5C,CAAC\"}(/dist/esm/plugin/traceTreeBuilder.js.map\u0017\u001a{\"version\":3,\"file\":\"traceTreeBuilder.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/plugin/traceTreeBuilder.ts\"],\"names\":[],\"mappings\":\"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\"}7/dist/esm/plugin/usageReporting/iterateOverTrace.js.map\t{\"version\":3,\"file\":\"iterateOverTrace.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../../src/plugin/usageReporting/iterateOverTrace.ts\"],\"names\":[],\"mappings\":\"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\"}&/dist/cjs/determineApolloConfig.js.map\u0004{\"version\":3,\"file\":\"determineApolloConfig.js\",\"sourceRoot\":\"\",\"sources\":[\"../../src/determineApolloConfig.ts\"],\"names\":[],\"mappings\":\";;;AAAA,+DAAsD;AAKtD,SAAgB,qBAAqB,CACnC,KAAoC;IAEpC,MAAM,YAAY,GAAiB,EAAE,CAAC;IAEtC,MAAM,EACJ,UAAU,EACV,gBAAgB,EAChB,eAAe,EACf,oBAAoB,GACrB,GAAG,OAAO,CAAC,GAAG,CAAC;IAGhB,IAAI,KAAK,EAAE,GAAG,EAAE;QACd,YAAY,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;KAC9B;SAAM,IAAI,UAAU,EAAE;QACrB,YAAY,CAAC,GAAG,GAAG,UAAU,CAAC;KAC/B;IAGD,IAAI,YAAY,CAAC,GAAG,EAAE;QACpB,YAAY,CAAC,OAAO,GAAG,IAAA,6BAAU,EAAC,QAAQ,CAAC;aACxC,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC;aACxB,MAAM,CAAC,KAAK,CAAC,CAAC;KAClB;IAGD,IAAI,KAAK,EAAE,QAAQ,EAAE;QACnB,YAAY,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;KACxC;SAAM,IAAI,gBAAgB,EAAE;QAC3B,YAAY,CAAC,QAAQ,GAAG,gBAAgB,CAAC;KAC1C;IAGD,MAAM,OAAO,GAAG,KAAK,EAAE,OAAO,IAAI,eAAe,CAAC;IAClD,MAAM,YAAY,GAAG,KAAK,EAAE,YAAY,IAAI,oBAAoB,CAAC;IAEjE,IAAI,YAAY,CAAC,QAAQ,EAAE;QACzB,IAAI,OAAO,EAAE;YACX,MAAM,IAAI,KAAK,CACb,yDAAyD;gBACvD,4EAA4E,CAC/E,CAAC;SACH;QACD,IAAI,YAAY,EAAE;YAChB,MAAM,IAAI,KAAK,CACb,8DAA8D;gBAC5D,iFAAiF,CACpF,CAAC;SACH;KACF;SAAM,IAAI,OAAO,EAAE;QAKlB,YAAY,CAAC,QAAQ,GAAG,YAAY;YAClC,CAAC,CAAC,GAAG,OAAO,IAAI,YAAY,EAAE;YAC9B,CAAC,CAAC,OAAO,CAAC;KACb;IAED,OAAO,YAAY,CAAC;AACtB,CAAC;AA7DD,sDA6DC\"} /src/plugin/schemaIsFederated.ts\u0005[import { GraphQLSchema, isObjectType, isScalarType } from 'graphql';\n\n// Returns true if it appears that the schema was returned from\n// @apollo/federation's buildFederatedSchema. This strategy avoids depending\n// explicitly on @apollo/federation or relying on something that might not\n// survive transformations like monkey-patching a boolean field onto the\n// schema.\n//\n// This is used for two things:\n// 1) Determining whether traces should be added to responses if requested\n//    with an HTTP header. If you want to include these traces even for\n//    non-federated schemas (when requested via header) you can use\n//    ApolloServerPluginInlineTrace yourself; if you want to never\n//    include these traces even for federated schemas you can use\n//    ApolloServerPluginInlineTraceDisabled.\n// 2) Determining whether schema-reporting should be allowed; federated\n//    services shouldn't be reporting schemas, and we accordingly throw if\n//    it's attempted.\nexport function schemaIsFederated(schema: GraphQLSchema): boolean {\n  const serviceType = schema.getType('_Service');\n  if (!isObjectType(serviceType)) {\n    return false;\n  }\n  const sdlField = serviceType.getFields().sdl;\n  if (!sdlField) {\n    return false;\n  }\n  const sdlFieldType = sdlField.type;\n  if (!isScalarType(sdlFieldType)) {\n    return false;\n  }\n  return sdlFieldType.name == 'String';\n}\n/dist/cjs/httpBatching.js.map\u0006\u0016{\"version\":3,\"file\":\"httpBatching.js\",\"sourceRoot\":\"\",\"sources\":[\"../../src/httpBatching.ts\"],\"names\":[],\"mappings\":\";;;AAUA,uDAAqE;AACrE,uEAA4D;AAE5D,KAAK,UAAU,mBAAmB,CAA+B,EAC/D,MAAM,EACN,YAAY,EACZ,IAAI,EACJ,YAAY,EACZ,iBAAiB,EACjB,SAAS,GAQV;IACC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;QACrB,MAAM,IAAI,yCAAe,CAAC,iCAAiC,CAAC,CAAC;KAC9D;IAQD,MAAM,6BAA6B,GAAG,IAAA,oCAAkB,GAAE,CAAC;IAC3D,MAAM,cAAc,GAAG,MAAM,OAAO,CAAC,GAAG,CACtC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,SAAkB,EAAE,EAAE;QACpC,MAAM,aAAa,GAAuB;YACxC,GAAG,YAAY;YACf,IAAI,EAAE,SAAS;SAChB,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,IAAA,8BAAY,EAAC;YAClC,MAAM;YACN,WAAW,EAAE,aAAa;YAC1B,YAAY;YACZ,iBAAiB;YACjB,SAAS;YACT,6BAA6B;SAC9B,CAAC,CAAC;QAEH,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE;YACpC,MAAM,KAAK,CACT,4DAA4D,CAC7D,CAAC;SACH;QACD,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;IAC9B,CAAC,CAAC,CACH,CAAC;IACF,OAAO;QACL,GAAG,6BAA6B;QAChC,IAAI,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE;KACpE,CAAC;AACJ,CAAC;AAEM,KAAK,UAAU,8BAA8B,CAGlD,MAA8B,EAC9B,kBAAsC,EACtC,YAAsB,EACtB,iBAAoC,EACpC,SAA0C;IAE1C,IACE,CAAC,CACC,kBAAkB,CAAC,MAAM,KAAK,MAAM;QACpC,KAAK,CAAC,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,CACvC,EACD;QACA,OAAO,MAAM,IAAA,8BAAY,EAAC;YACxB,MAAM;YACN,WAAW,EAAE,kBAAkB;YAC/B,YAAY;YACZ,iBAAiB;YACjB,SAAS;YACT,6BAA6B,EAAE,IAAI;SACpC,CAAC,CAAC;KACJ;IACD,IAAI,SAAS,CAAC,wBAAwB,EAAE;QACtC,OAAO,MAAM,mBAAmB,CAAC;YAC/B,MAAM;YACN,YAAY,EAAE,kBAAkB;YAChC,IAAI,EAAE,kBAAkB,CAAC,IAAiB;YAC1C,YAAY;YACZ,iBAAiB;YACjB,SAAS;SACV,CAAC,CAAC;KACJ;IACD,MAAM,IAAI,yCAAe,CAAC,8BAA8B,CAAC,CAAC;AAC5D,CAAC;AAnCD,wEAmCC\"}/dist/esm/ApolloServer.d.ts.map\u0011{\"version\":3,\"file\":\"ApolloServer.d.ts\",\"sourceRoot\":\"\",\"sources\":[\"../../src/ApolloServer.ts\"],\"names\":[],\"mappings\":\"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\"}\"/dist/cjs/plugin/disabled/index.js\u0005\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ApolloServerPluginUsageReportingDisabled = exports.ApolloServerPluginSchemaReportingDisabled = exports.ApolloServerPluginLandingPageDisabled = exports.ApolloServerPluginInlineTraceDisabled = exports.ApolloServerPluginCacheControlDisabled = void 0;\nfunction disabledPlugin(id) {\n    const plugin = {\n        __internal_plugin_id__: id,\n        __is_disabled_plugin__: true,\n    };\n    return plugin;\n}\nfunction ApolloServerPluginCacheControlDisabled() {\n    return disabledPlugin('CacheControl');\n}\nexports.ApolloServerPluginCacheControlDisabled = ApolloServerPluginCacheControlDisabled;\nfunction ApolloServerPluginInlineTraceDisabled() {\n    return disabledPlugin('InlineTrace');\n}\nexports.ApolloServerPluginInlineTraceDisabled = ApolloServerPluginInlineTraceDisabled;\nfunction ApolloServerPluginLandingPageDisabled() {\n    return disabledPlugin('LandingPageDisabled');\n}\nexports.ApolloServerPluginLandingPageDisabled = ApolloServerPluginLandingPageDisabled;\nfunction ApolloServerPluginSchemaReportingDisabled() {\n    return disabledPlugin('SchemaReporting');\n}\nexports.ApolloServerPluginSchemaReportingDisabled = ApolloServerPluginSchemaReportingDisabled;\nfunction ApolloServerPluginUsageReportingDisabled() {\n    return disabledPlugin('UsageReporting');\n}\nexports.ApolloServerPluginUsageReportingDisabled = ApolloServerPluginUsageReportingDisabled;\n//# sourceMappingURL=index.js.map*/dist/cjs/plugin/usageReporting/options.jsp\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=options.js.map&/dist/cjs/externalTypes/context.js.map~{\"version\":3,\"file\":\"context.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/externalTypes/context.ts\"],\"names\":[],\"mappings\":\"\"}/dist/esm/errorNormalize.js\timport { GraphQLError, } from 'graphql';\nimport { ApolloServerErrorCode } from './errors/index.js';\nimport { mergeHTTPGraphQLHead, newHTTPGraphQLHead } from './runHttpQuery.js';\nimport { HeaderMap } from './utils/HeaderMap.js';\nexport function normalizeAndFormatErrors(errors, options = {}) {\n    const formatError = options.formatError ?? ((error) => error);\n    const httpFromErrors = newHTTPGraphQLHead();\n    return {\n        httpFromErrors,\n        formattedErrors: errors.map((error) => {\n            try {\n                return formatError(enrichError(error), error);\n            }\n            catch (formattingError) {\n                if (options.includeStacktraceInErrorResponses) {\n                    return enrichError(formattingError);\n                }\n                else {\n                    return {\n                        message: 'Internal server error',\n                        extensions: { code: ApolloServerErrorCode.INTERNAL_SERVER_ERROR },\n                    };\n                }\n            }\n        }),\n    };\n    function enrichError(maybeError) {\n        const graphqlError = ensureGraphQLError(maybeError);\n        const extensions = {\n            ...graphqlError.extensions,\n            code: graphqlError.extensions.code ??\n                ApolloServerErrorCode.INTERNAL_SERVER_ERROR,\n        };\n        if (isPartialHTTPGraphQLHead(extensions.http)) {\n            mergeHTTPGraphQLHead(httpFromErrors, {\n                headers: new HeaderMap(),\n                ...extensions.http,\n            });\n            delete extensions.http;\n        }\n        if (options.includeStacktraceInErrorResponses) {\n            extensions.stacktrace = graphqlError.stack?.split('\\n');\n        }\n        return { ...graphqlError.toJSON(), extensions };\n    }\n}\nexport function ensureError(maybeError) {\n    return maybeError instanceof Error\n        ? maybeError\n        : new GraphQLError('Unexpected error value: ' + String(maybeError));\n}\nexport function ensureGraphQLError(maybeError, messagePrefixIfNotGraphQLError = '') {\n    const error = ensureError(maybeError);\n    return error instanceof GraphQLError\n        ? error\n        : new GraphQLError(messagePrefixIfNotGraphQLError + error.message, {\n            originalError: error,\n        });\n}\nfunction isPartialHTTPGraphQLHead(x) {\n    return (!!x &&\n        typeof x === 'object' &&\n        (!('status' in x) || typeof x.status === 'number') &&\n        (!('headers' in x) || x.headers instanceof Map));\n}\n//# sourceMappingURL=errorNormalize.js.map'/dist/esm/plugin/inlineTrace/index.d.ts\u0001import type { SendErrorsOptions } from '../usageReporting/index.js';\nimport type { ApolloServerPlugin } from '../../externalTypes/index.js';\nexport interface ApolloServerPluginInlineTraceOptions {\n    includeErrors?: SendErrorsOptions;\n    __onlyIfSchemaIsFederated?: boolean;\n}\nexport declare function ApolloServerPluginInlineTrace(options?: ApolloServerPluginInlineTraceOptions): ApolloServerPlugin;\n//# sourceMappingURL=index.d.ts.map,/dist/esm/plugin/cacheControl/index.d.ts.map\u0001{\"version\":3,\"file\":\"index.d.ts\",\"sourceRoot\":\"\",\"sources\":[\"../../../../src/plugin/cacheControl/index.ts\"],\"names\":[],\"mappings\":\"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAcvE,OAAO,KAAK,EACV,SAAS,EAGV,MAAM,6BAA6B,CAAC;AAYrC,MAAM,WAAW,qCAAqC;IASpD,aAAa,CAAC,EAAE,MAAM,CAAC;IAUvB,oBAAoB,CAAC,EAAE,OAAO,GAAG,cAAc,CAAC;IAEhD,qBAAqB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;CAChD;AAED,wBAAgB,8BAA8B,CAC5C,OAAO,GAAE,qCAA2D,GACnE,kBAAkB,CAyRpB\"}(/dist/esm/incrementalDeliveryPolyfill.js\u0003\u0016import { execute } from 'graphql';\nlet graphqlExperimentalExecuteIncrementally = undefined;\nasync function tryToLoadGraphQL17() {\n    if (graphqlExperimentalExecuteIncrementally !== undefined) {\n        return;\n    }\n    const graphql = await import('graphql');\n    if ('experimentalExecuteIncrementally' in graphql) {\n        graphqlExperimentalExecuteIncrementally = graphql\n            .experimentalExecuteIncrementally;\n    }\n    else {\n        graphqlExperimentalExecuteIncrementally = null;\n    }\n}\nexport async function executeIncrementally(args) {\n    await tryToLoadGraphQL17();\n    if (graphqlExperimentalExecuteIncrementally) {\n        return graphqlExperimentalExecuteIncrementally(args);\n    }\n    return execute(args);\n}\n//# sourceMappingURL=incrementalDeliveryPolyfill.js.map(/dist/esm/plugin/cacheControl/index.d.ts\u0001import type { ApolloServerPlugin } from '../../externalTypes/index.js';\nimport type { CacheHint } from '@apollo/cache-control-types';\nexport interface ApolloServerPluginCacheControlOptions {\n    defaultMaxAge?: number;\n    calculateHttpHeaders?: boolean | 'if-cacheable';\n    __testing__cacheHints?: Map<string, CacheHint>;\n}\nexport declare function ApolloServerPluginCacheControl(options?: ApolloServerPluginCacheControlOptions): ApolloServerPlugin;\n//# sourceMappingURL=index.d.ts.map(/src/plugin/drainHttpServer/stoppable.ts\u0010// This file is adapted from the stoppable npm package:\n// https://github.com/hunterloftis/stoppable\n//\n// We've ported it to TypeScript and simplified the API and fixed some bugs.\n// Here's the license of the original code:\n//\n// The MIT License (MIT)\n//\n// Copyright (c) 2017 Hunter Loftis <hunter@hunterloftis.com>\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport type http from 'http';\nimport https from 'https';\nimport type { Socket } from 'net';\n\nexport class Stopper {\n  private requestCountPerSocket = new Map<Socket, number>();\n  private stopped = false;\n\n  constructor(private server: http.Server | https.Server) {\n    // Keep a number in requestCountPerSocket for each current connection.\n    server.on(\n      server instanceof https.Server ? 'secureConnection' : 'connection',\n      (socket: Socket) => {\n        this.requestCountPerSocket.set(socket, 0);\n        socket.once('close', () => this.requestCountPerSocket.delete(socket));\n      },\n    );\n\n    // Track how many HTTP requests are active on the socket.\n    server.on(\n      'request',\n      (req: http.IncomingMessage, res: http.ServerResponse) => {\n        this.requestCountPerSocket.set(\n          req.socket,\n          (this.requestCountPerSocket.get(req.socket) ?? 0) + 1,\n        );\n        res.once('finish', () => {\n          const pending = (this.requestCountPerSocket.get(req.socket) ?? 0) - 1;\n          this.requestCountPerSocket.set(req.socket, pending);\n          // If we're in the process of stopping and it's gone idle, close the\n          // socket.\n          if (this.stopped && pending === 0) {\n            req.socket.end();\n          }\n        });\n      },\n    );\n  }\n\n  async stop(stopGracePeriodMillis = Infinity): Promise<boolean> {\n    let gracefully = true;\n\n    // In the off-chance that we are calling `stop` directly from within the\n    // HTTP server's request handler (and so we haven't gotten to the\n    // `connection` event yet), wait a moment so that `connection` can be called\n    // and this request can actually count.\n    await new Promise<void>((resolve) => setImmediate(resolve));\n    this.stopped = true;\n\n    let timeout: NodeJS.Timeout | null = null;\n    // Soon, hard-destroy everything.\n    if (stopGracePeriodMillis < Infinity) {\n      timeout = setTimeout(() => {\n        gracefully = false;\n        this.requestCountPerSocket.forEach((_, socket) => socket.end());\n        // (FYI, when importing from upstream, not sure why we need setImmediate\n        // here.)\n        setImmediate(() => {\n          this.requestCountPerSocket.forEach((_, socket) => socket.destroy());\n        });\n      }, stopGracePeriodMillis);\n    }\n\n    // Close the server and create a Promise that resolves when all connections\n    // are closed. Note that we ignore any error from `close` here.\n    const closePromise = new Promise<void>((resolve) =>\n      this.server.close(() => {\n        if (timeout) {\n          clearTimeout(timeout);\n          timeout = null;\n        }\n        resolve();\n      }),\n    );\n\n    // Immediately close any idle sockets.\n    this.requestCountPerSocket.forEach((requests, socket) => {\n      if (requests === 0) socket.end();\n    });\n\n    // Wait for all connections to be closed.\n    await closePromise;\n\n    return gracefully;\n  }\n}\n*/src/plugin/usageReporting/traceDetails.ts\u000f}import { Trace } from '@apollo/usage-reporting-protobuf';\nimport type { VariableValueOptions } from './options.js';\n\n// Creates trace details from request variables, given a specification for modifying\n// values of private or sensitive variables.\n// The details will include all variable names and their (possibly hidden or modified) values.\n// If sendVariableValues is {all: bool}, {none: bool} or {exceptNames: Array}, the option will act similarly to\n// to the to-be-deprecated options.privateVariables, except that the redacted variable\n// names will still be visible in the UI even if the values are hidden.\n// If sendVariableValues is null or undefined, we default to the {none: true} case.\nexport function makeTraceDetails(\n  variables: Record<string, any>,\n  sendVariableValues?: VariableValueOptions,\n  operationString?: string,\n): Trace.Details {\n  const details = new Trace.Details();\n  const variablesToRecord = (() => {\n    if (sendVariableValues && 'transform' in sendVariableValues) {\n      const originalKeys = Object.keys(variables);\n      try {\n        // Custom function to allow user to specify what variablesJson will look like\n        const modifiedVariables = sendVariableValues.transform({\n          variables: variables,\n          operationString: operationString,\n        });\n        return cleanModifiedVariables(originalKeys, modifiedVariables);\n      } catch (e) {\n        // If the custom function provided by the user throws an exception,\n        // change all the variable values to an appropriate error message.\n        return handleVariableValueTransformError(originalKeys);\n      }\n    } else {\n      return variables;\n    }\n  })();\n\n  // Note: we explicitly do *not* include the details.rawQuery field. The\n  // Studio web app currently does nothing with this other than store it in\n  // the database and offer it up via its GraphQL API, and sending it means\n  // that using calculateSignature to hide sensitive data in the query\n  // string is ineffective.\n  Object.keys(variablesToRecord).forEach((name) => {\n    if (\n      !sendVariableValues ||\n      ('none' in sendVariableValues && sendVariableValues.none) ||\n      ('all' in sendVariableValues && !sendVariableValues.all) ||\n      ('exceptNames' in sendVariableValues &&\n        // We assume that most users will have only a few variables values to hide,\n        // or will just set {none: true}; we can change this\n        // linear-time operation if it causes real performance issues.\n        sendVariableValues.exceptNames.includes(name)) ||\n      ('onlyNames' in sendVariableValues &&\n        !sendVariableValues.onlyNames.includes(name))\n    ) {\n      // Special case for private variables. Note that this is a different\n      // representation from a variable containing the empty string, as that\n      // will be sent as '\"\"'.\n      details.variablesJson![name] = '';\n    } else {\n      try {\n        details.variablesJson![name] =\n          typeof variablesToRecord[name] === 'undefined'\n            ? ''\n            : JSON.stringify(variablesToRecord[name]);\n      } catch (e) {\n        details.variablesJson![name] = JSON.stringify(\n          '[Unable to convert value to JSON]',\n        );\n      }\n    }\n  });\n  return details;\n}\n\nfunction handleVariableValueTransformError(\n  variableNames: string[],\n): Record<string, any> {\n  const modifiedVariables = Object.create(null);\n  variableNames.forEach((name) => {\n    modifiedVariables[name] = '[PREDICATE_FUNCTION_ERROR]';\n  });\n  return modifiedVariables;\n}\n\n// Helper for makeTraceDetails() to enforce that the keys of a modified 'variables'\n// matches that of the original 'variables'\nfunction cleanModifiedVariables(\n  originalKeys: Array<string>,\n  modifiedVariables: Record<string, any>,\n): Record<string, any> {\n  const cleanedVariables: Record<string, any> = Object.create(null);\n  originalKeys.forEach((name) => {\n    cleanedVariables[name] = modifiedVariables[name];\n  });\n  return cleanedVariables;\n}\n//dist/cjs/plugin/usageReporting/traceDetails.js\t\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.makeTraceDetails = void 0;\nconst usage_reporting_protobuf_1 = require(\"@apollo/usage-reporting-protobuf\");\nfunction makeTraceDetails(variables, sendVariableValues, operationString) {\n    const details = new usage_reporting_protobuf_1.Trace.Details();\n    const variablesToRecord = (() => {\n        if (sendVariableValues && 'transform' in sendVariableValues) {\n            const originalKeys = Object.keys(variables);\n            try {\n                const modifiedVariables = sendVariableValues.transform({\n                    variables: variables,\n                    operationString: operationString,\n                });\n                return cleanModifiedVariables(originalKeys, modifiedVariables);\n            }\n            catch (e) {\n                return handleVariableValueTransformError(originalKeys);\n            }\n        }\n        else {\n            return variables;\n        }\n    })();\n    Object.keys(variablesToRecord).forEach((name) => {\n        if (!sendVariableValues ||\n            ('none' in sendVariableValues && sendVariableValues.none) ||\n            ('all' in sendVariableValues && !sendVariableValues.all) ||\n            ('exceptNames' in sendVariableValues &&\n                sendVariableValues.exceptNames.includes(name)) ||\n            ('onlyNames' in sendVariableValues &&\n                !sendVariableValues.onlyNames.includes(name))) {\n            details.variablesJson[name] = '';\n        }\n        else {\n            try {\n                details.variablesJson[name] =\n                    typeof variablesToRecord[name] === 'undefined'\n                        ? ''\n                        : JSON.stringify(variablesToRecord[name]);\n            }\n            catch (e) {\n                details.variablesJson[name] = JSON.stringify('[Unable to convert value to JSON]');\n            }\n        }\n    });\n    return details;\n}\nexports.makeTraceDetails = makeTraceDetails;\nfunction handleVariableValueTransformError(variableNames) {\n    const modifiedVariables = Object.create(null);\n    variableNames.forEach((name) => {\n        modifiedVariables[name] = '[PREDICATE_FUNCTION_ERROR]';\n    });\n    return modifiedVariables;\n}\nfunction cleanModifiedVariables(originalKeys, modifiedVariables) {\n    const cleanedVariables = Object.create(null);\n    originalKeys.forEach((name) => {\n        cleanedVariables[name] = modifiedVariables[name];\n    });\n    return cleanedVariables;\n}\n//# sourceMappingURL=traceDetails.js.map\"/dist/esm/utils/isDefined.d.ts.map{\"version\":3,\"file\":\"isDefined.d.ts\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/utils/isDefined.ts\"],\"names\":[],\"mappings\":\"AAAA,wBAAgB,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAEnE\"}\"/dist/cjs/externalTypes/context.jsp\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=context.js.map!/dist/esm/internalPlugin.d.ts.map\u0002|{\"version\":3,\"file\":\"internalPlugin.d.ts\",\"sourceRoot\":\"\",\"sources\":[\"../../src/internalPlugin.ts\"],\"names\":[],\"mappings\":\"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAShF,MAAM,WAAW,0BAA0B,CAAC,QAAQ,SAAS,WAAW,CACtE,SAAQ,kBAAkB,CAAC,QAAQ,CAAC;IAGpC,sBAAsB,EAAE,gBAAgB,CAAC;IACzC,sBAAsB,EAAE,OAAO,CAAC;CACjC;AAMD,wBAAgB,cAAc,CAAC,QAAQ,SAAS,WAAW,EACzD,CAAC,EAAE,0BAA0B,CAAC,QAAQ,CAAC,GACtC,kBAAkB,CAAC,QAAQ,CAAC,CAE9B;AAED,oBAAY,gBAAgB,GACxB,cAAc,GACd,qBAAqB,GACrB,iBAAiB,GACjB,aAAa,GACb,gBAAgB,CAAC;AAErB,wBAAgB,gBAAgB,CAAC,QAAQ,SAAS,WAAW,EAC3D,MAAM,EAAE,kBAAkB,CAAC,QAAQ,CAAC,GACnC,MAAM,IAAI,0BAA0B,CAAC,QAAQ,CAAC,CAIhD\"}&/dist/cjs/externalTypes/constructor.jst\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=constructor.js.map/express4/package.json{\n  \"name\": \"@apollo/server/express4\",\n  \"type\": \"module\",\n  \"main\": \"../dist/cjs/express4/index.js\",\n  \"module\": \"../dist/esm/express4/index.js\",\n  \"types\": \"../dist/esm/express4/index.d.ts\",\n  \"sideEffects\": false\n}\n/dist/esm/standalone/index.d.ts\u0004l/// <reference types=\"node\" />\n/// <reference types=\"node\" />\nimport type { WithRequired } from '@apollo/utils.withrequired';\nimport { IncomingMessage, ServerResponse } from 'http';\nimport type { ListenOptions } from 'net';\nimport type { ApolloServer } from '../ApolloServer.js';\nimport type { BaseContext, ContextFunction } from '../externalTypes/index.js';\nexport interface StandaloneServerContextFunctionArgument {\n    req: IncomingMessage;\n    res: ServerResponse;\n}\nexport interface StartStandaloneServerOptions<TContext extends BaseContext> {\n    context?: ContextFunction<[\n        StandaloneServerContextFunctionArgument\n    ], TContext>;\n}\nexport declare function startStandaloneServer(server: ApolloServer<BaseContext>, options?: StartStandaloneServerOptions<BaseContext> & {\n    listen?: ListenOptions;\n}): Promise<{\n    url: string;\n}>;\nexport declare function startStandaloneServer<TContext extends BaseContext>(server: ApolloServer<TContext>, options: WithRequired<StartStandaloneServerOptions<TContext>, 'context'> & {\n    listen?: ListenOptions;\n}): Promise<{\n    url: string;\n}>;\n//# sourceMappingURL=index.d.ts.map/dist/esm/utils/HeaderMap.d.tsexport declare class HeaderMap extends Map<string, string> {\n    set(key: string, value: string): this;\n    get(key: string): string | undefined;\n    delete(key: string): boolean;\n    has(key: string): boolean;\n}\n//# sourceMappingURL=HeaderMap.d.ts.map /dist/cjs/externalTypes/index.jsn\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=index.js.map$/dist/esm/externalTypes/index.js.mapz{\"version\":3,\"file\":\"index.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/externalTypes/index.ts\"],\"names\":[],\"mappings\":\"\"}$/dist/esm/externalTypes/graphql.d.ts\u0005import type { FormattedExecutionResult } from 'graphql';\nimport type { BaseContext } from './context.js';\nimport type { HTTPGraphQLHead, HTTPGraphQLRequest } from './http.js';\nimport type { WithRequired } from '@apollo/utils.withrequired';\nimport type { GraphQLExperimentalFormattedInitialIncrementalExecutionResult, GraphQLExperimentalFormattedSubsequentIncrementalExecutionResult } from './incrementalDeliveryPolyfill.js';\nexport interface GraphQLRequest<TVariables extends VariableValues = VariableValues> {\n    query?: string;\n    operationName?: string;\n    variables?: TVariables;\n    extensions?: Record<string, any>;\n    http?: HTTPGraphQLRequest;\n}\nexport declare type VariableValues = {\n    [name: string]: any;\n};\nexport declare type GraphQLResponseBody<TData = Record<string, unknown>> = {\n    kind: 'single';\n    singleResult: FormattedExecutionResult<TData>;\n} | {\n    kind: 'incremental';\n    initialResult: GraphQLExperimentalFormattedInitialIncrementalExecutionResult;\n    subsequentResults: AsyncIterable<GraphQLExperimentalFormattedSubsequentIncrementalExecutionResult>;\n};\nexport declare type GraphQLInProgressResponse<TData = Record<string, unknown>> = {\n    http: HTTPGraphQLHead;\n    body?: GraphQLResponseBody<TData>;\n};\nexport declare type GraphQLResponse<TData = Record<string, unknown>> = WithRequired<GraphQLInProgressResponse<TData>, 'body'>;\nexport interface ExecuteOperationOptions<TContext extends BaseContext> {\n    contextValue?: TContext;\n}\n//# sourceMappingURL=graphql.d.ts.map3/dist/esm/utils/makeGatewayGraphQLRequestContext.js\u000bexport function makeGatewayGraphQLRequestContext(as4RequestContext, server, internals) {\n    const request = {};\n    if ('query' in as4RequestContext.request) {\n        request.query = as4RequestContext.request.query;\n    }\n    if ('operationName' in as4RequestContext.request) {\n        request.operationName = as4RequestContext.request.operationName;\n    }\n    if ('variables' in as4RequestContext.request) {\n        request.variables = as4RequestContext.request.variables;\n    }\n    if ('extensions' in as4RequestContext.request) {\n        request.extensions = as4RequestContext.request.extensions;\n    }\n    if (as4RequestContext.request.http) {\n        const as4http = as4RequestContext.request.http;\n        const needQuestion = as4http.search !== '' && !as4http.search.startsWith('?');\n        request.http = {\n            method: as4http.method,\n            url: `https://unknown-url.invalid/${needQuestion ? '?' : ''}${as4http.search}`,\n            headers: new FetcherHeadersForHeaderMap(as4http.headers),\n        };\n    }\n    const response = {\n        http: {\n            headers: new FetcherHeadersForHeaderMap(as4RequestContext.response.http.headers),\n            get status() {\n                return as4RequestContext.response.http.status;\n            },\n            set status(newStatus) {\n                as4RequestContext.response.http.status = newStatus;\n            },\n        },\n    };\n    return {\n        request,\n        response,\n        logger: server.logger,\n        schema: as4RequestContext.schema,\n        schemaHash: 'schemaHash no longer exists in Apollo Server 4',\n        context: as4RequestContext.contextValue,\n        cache: server.cache,\n        queryHash: as4RequestContext.queryHash,\n        document: as4RequestContext.document,\n        source: as4RequestContext.source,\n        operationName: as4RequestContext.operationName,\n        operation: as4RequestContext.operation,\n        errors: as4RequestContext.errors,\n        metrics: as4RequestContext.metrics,\n        debug: internals.includeStacktraceInErrorResponses,\n        overallCachePolicy: as4RequestContext.overallCachePolicy,\n        requestIsBatched: as4RequestContext.requestIsBatched,\n    };\n}\nclass FetcherHeadersForHeaderMap {\n    constructor(map) {\n        this.map = map;\n    }\n    append(name, value) {\n        if (this.map.has(name)) {\n            this.map.set(name, this.map.get(name) + ', ' + value);\n        }\n        else {\n            this.map.set(name, value);\n        }\n    }\n    delete(name) {\n        this.map.delete(name);\n    }\n    get(name) {\n        return this.map.get(name) ?? null;\n    }\n    has(name) {\n        return this.map.has(name);\n    }\n    set(name, value) {\n        this.map.set(name, value);\n    }\n    entries() {\n        return this.map.entries();\n    }\n    keys() {\n        return this.map.keys();\n    }\n    values() {\n        return this.map.values();\n    }\n    [Symbol.iterator]() {\n        return this.map.entries();\n    }\n}\n//# sourceMappingURL=makeGatewayGraphQLRequestContext.js.map/dist/esm/internalPlugin.d.ts\u0002import type { BaseContext, ApolloServerPlugin } from './externalTypes/index.js';\nexport interface InternalApolloServerPlugin<TContext extends BaseContext> extends ApolloServerPlugin<TContext> {\n    __internal_plugin_id__: InternalPluginId;\n    __is_disabled_plugin__: boolean;\n}\nexport declare function internalPlugin<TContext extends BaseContext>(p: InternalApolloServerPlugin<TContext>): ApolloServerPlugin<TContext>;\nexport declare type InternalPluginId = 'CacheControl' | 'LandingPageDisabled' | 'SchemaReporting' | 'InlineTrace' | 'UsageReporting';\nexport declare function pluginIsInternal<TContext extends BaseContext>(plugin: ApolloServerPlugin<TContext>): plugin is InternalApolloServerPlugin<TContext>;\n//# sourceMappingURL=internalPlugin.d.ts.map*/dist/cjs/externalTypes/requestPipeline.jsx\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=requestPipeline.js.map(/dist/esm/externalTypes/graphql.d.ts.map\u0005\u001d{\"version\":3,\"file\":\"graphql.d.ts\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/externalTypes/graphql.ts\"],\"names\":[],\"mappings\":\"AAMA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AACrE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,KAAK,EACV,6DAA6D,EAC7D,gEAAgE,EACjE,MAAM,kCAAkC,CAAC;AAE1C,MAAM,WAAW,cAAc,CAC7B,UAAU,SAAS,cAAc,GAAG,cAAc;IAElD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,UAAU,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,kBAAkB,CAAC;CAC3B;AAED,oBAAY,cAAc,GAAG;IAAE,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,CAAC;AAOrD,oBAAY,mBAAmB,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAC3D;IACE,IAAI,EAAE,QAAQ,CAAC;IACf,YAAY,EAAE,wBAAwB,CAAC,KAAK,CAAC,CAAC;CAC/C,GACD;IACE,IAAI,EAAE,aAAa,CAAC;IACpB,aAAa,EAAE,6DAA6D,CAAC;IAC7E,iBAAiB,EAAE,aAAa,CAAC,gEAAgE,CAAC,CAAC;CACpG,CAAC;AAEN,oBAAY,yBAAyB,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI;IACvE,IAAI,EAAE,eAAe,CAAC;IACtB,IAAI,CAAC,EAAE,mBAAmB,CAAC,KAAK,CAAC,CAAC;CACnC,CAAC;AAEF,oBAAY,eAAe,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,YAAY,CACzE,yBAAyB,CAAC,KAAK,CAAC,EAChC,MAAM,CACP,CAAC;AACF,MAAM,WAAW,uBAAuB,CAAC,QAAQ,SAAS,WAAW;IACnE,YAAY,CAAC,EAAE,QAAQ,CAAC;CACzB\"}/src/plugin/disabled/index.ts\u0006$// This file exports the \"disabled\" version of various plugins which are\n// installed by default under certain circumstances. This lets users explicitly\n// choose not to enable these plugins. Note that we explicitly keep these tiny\n// plugins separate from the plugins they are enabling; this means that we don't\n// have to load (say) the entire `plugin/usageReporting` entry point (which\n// includes the whole generated protobuf library, etc) just in order to disable\n// usage reporting.\n\nimport type { BaseContext, ApolloServerPlugin } from '../../index.js';\nimport type {\n  InternalApolloServerPlugin,\n  InternalPluginId,\n} from '../../internalPlugin.js';\n\nfunction disabledPlugin(id: InternalPluginId): ApolloServerPlugin {\n  const plugin: InternalApolloServerPlugin<BaseContext> = {\n    __internal_plugin_id__: id,\n    __is_disabled_plugin__: true,\n  };\n  return plugin;\n}\n\nexport function ApolloServerPluginCacheControlDisabled(): ApolloServerPlugin<BaseContext> {\n  return disabledPlugin('CacheControl');\n}\n\nexport function ApolloServerPluginInlineTraceDisabled(): ApolloServerPlugin<BaseContext> {\n  return disabledPlugin('InlineTrace');\n}\n\nexport function ApolloServerPluginLandingPageDisabled(): ApolloServerPlugin<BaseContext> {\n  return disabledPlugin('LandingPageDisabled');\n}\n\nexport function ApolloServerPluginSchemaReportingDisabled(): ApolloServerPlugin<BaseContext> {\n  return disabledPlugin('SchemaReporting');\n}\n\nexport function ApolloServerPluginUsageReportingDisabled(): ApolloServerPlugin<BaseContext> {\n  return disabledPlugin('UsageReporting');\n}\n /src/generated/packageVersion.ts'export const packageVersion = \"4.1.1\";\n'/dist/cjs/utils/urlForHttpServer.js.map\u0001{\"version\":3,\"file\":\"urlForHttpServer.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/utils/urlForHttpServer.ts\"],\"names\":[],\"mappings\":\";;;AAEA,6BAA6B;AAE7B,SAAgB,gBAAgB,CAAC,UAAkB;IACjD,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,UAAU,CAAC,OAAO,EAAiB,CAAC;IAO9D,MAAM,QAAQ,GAAG,OAAO,KAAK,EAAE,IAAI,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC;IAE5E,OAAO,IAAA,YAAM,EAAC;QACZ,QAAQ,EAAE,MAAM;QAChB,QAAQ;QACR,IAAI;QACJ,QAAQ,EAAE,GAAG;KACd,CAAC,CAAC;AACL,CAAC;AAhBD,4CAgBC\"}/dist/esm/httpBatching.d.ts\u0002\u0014import type { BaseContext, HTTPGraphQLRequest, HTTPGraphQLResponse } from './externalTypes/index.js';\nimport type { ApolloServer, ApolloServerInternals, SchemaDerivedData } from './ApolloServer';\nexport declare function runPotentiallyBatchedHttpQuery<TContext extends BaseContext>(server: ApolloServer<TContext>, httpGraphQLRequest: HTTPGraphQLRequest, contextValue: TContext, schemaDerivedData: SchemaDerivedData, internals: ApolloServerInternals<TContext>): Promise<HTTPGraphQLResponse>;\n//# sourceMappingURL=httpBatching.d.ts.map/dist/esm/preventCsrf.d.ts\u0001\u000fimport type { HeaderMap } from './utils/HeaderMap.js';\nexport declare const recommendedCsrfPreventionRequestHeaders: string[];\nexport declare function preventCsrf(headers: HeaderMap, csrfPreventionRequestHeaders: string[]): void;\n//# sourceMappingURL=preventCsrf.d.ts.map-/src/plugin/schemaReporting/schemaReporter.ts\u0017import fetch from 'node-fetch';\nimport type { GraphQLRequest } from '../../externalTypes/index.js';\nimport type { Logger } from '@apollo/utils.logger';\nimport type {\n  SchemaReport,\n  SchemaReportMutationVariables,\n  SchemaReportMutation,\n  ReportSchemaResponse,\n} from './generated/operations';\nimport type { Fetcher } from '@apollo/utils.fetcher';\nimport { packageVersion } from '../../generated/packageVersion.js';\n\nexport const schemaReportGql = `mutation SchemaReport($report: SchemaReport!, $coreSchema: String) {\n  reportSchema(report: $report, coreSchema: $coreSchema) {\n    __typename\n    ... on ReportSchemaError {\n      message\n      code\n    }\n    ... on ReportSchemaResponse {\n      inSeconds\n      withCoreSchema\n    }\n  }\n}\n`;\n\n// This class is meant to be a thin shim around the gql mutations.\nexport class SchemaReporter {\n  // These mirror the gql variables\n  private readonly schemaReport: SchemaReport;\n  private readonly coreSchema: string;\n  private readonly endpointUrl: string;\n  private readonly logger: Logger;\n  private readonly initialReportingDelayInMs: number;\n  private readonly fallbackReportingDelayInMs: number;\n  private readonly fetcher: Fetcher;\n\n  private isStopped: boolean;\n  private pollTimer?: NodeJS.Timer;\n  private readonly headers: Record<string, string>;\n\n  constructor(options: {\n    schemaReport: SchemaReport;\n    coreSchema: string;\n    apiKey: string;\n    endpointUrl: string | undefined;\n    logger: Logger;\n    initialReportingDelayInMs: number;\n    fallbackReportingDelayInMs: number;\n    fetcher?: Fetcher;\n  }) {\n    this.headers = {\n      'Content-Type': 'application/json',\n      'x-api-key': options.apiKey,\n      'apollographql-client-name': 'ApolloServerPluginSchemaReporting',\n      'apollographql-client-version': packageVersion,\n    };\n\n    this.endpointUrl =\n      options.endpointUrl ||\n      'https://schema-reporting.api.apollographql.com/api/graphql';\n\n    this.schemaReport = options.schemaReport;\n    this.coreSchema = options.coreSchema;\n    this.isStopped = false;\n    this.logger = options.logger;\n    this.initialReportingDelayInMs = options.initialReportingDelayInMs;\n    this.fallbackReportingDelayInMs = options.fallbackReportingDelayInMs;\n    this.fetcher = options.fetcher ?? fetch;\n  }\n\n  public stopped(): boolean {\n    return this.isStopped;\n  }\n\n  public start() {\n    this.pollTimer = setTimeout(\n      () => this.sendOneReportAndScheduleNext(false),\n      this.initialReportingDelayInMs,\n    );\n  }\n\n  public stop() {\n    this.isStopped = true;\n    if (this.pollTimer) {\n      clearTimeout(this.pollTimer);\n      this.pollTimer = undefined;\n    }\n  }\n\n  private async sendOneReportAndScheduleNext(sendNextWithCoreSchema: boolean) {\n    this.pollTimer = undefined;\n\n    // Bail out permanently\n    if (this.stopped()) return;\n    try {\n      const result = await this.reportSchema(sendNextWithCoreSchema);\n      if (!result) {\n        return;\n      }\n      if (!this.stopped()) {\n        this.pollTimer = setTimeout(\n          () => this.sendOneReportAndScheduleNext(result.withCoreSchema),\n          result.inSeconds * 1000,\n        );\n      }\n      return;\n    } catch (error) {\n      // In the case of an error we want to continue looping\n      // We can add hardcoded backoff in the future,\n      // or on repeated failures stop responding reporting.\n      this.logger.error(\n        `Error reporting server info to Apollo during schema reporting: ${error}`,\n      );\n      if (!this.stopped()) {\n        this.pollTimer = setTimeout(\n          () => this.sendOneReportAndScheduleNext(false),\n          this.fallbackReportingDelayInMs,\n        );\n      }\n    }\n  }\n\n  public async reportSchema(\n    withCoreSchema: boolean,\n  ): Promise<ReportSchemaResponse | null> {\n    const { data, errors } = await this.apolloQuery({\n      report: this.schemaReport,\n      coreSchema: withCoreSchema ? this.coreSchema : null,\n    });\n\n    if (errors) {\n      throw new Error(errors.map((x: any) => x.message).join('\\n'));\n    }\n\n    function msgForUnexpectedResponse(data: any): string {\n      return [\n        'Unexpected response shape from Apollo when',\n        'reporting schema. If this continues, please reach',\n        'out to support@apollographql.com.',\n        'Received response:',\n        JSON.stringify(data),\n      ].join(' ');\n    }\n\n    if (!data || !data.reportSchema) {\n      throw new Error(msgForUnexpectedResponse(data));\n    }\n\n    if (data.reportSchema.__typename === 'ReportSchemaResponse') {\n      return data.reportSchema;\n    } else if (data.reportSchema.__typename === 'ReportSchemaError') {\n      this.logger.error(\n        [\n          'Received input validation error from Apollo:',\n          data.reportSchema.message,\n          'Stopping reporting. Please fix the input errors.',\n        ].join(' '),\n      );\n      this.stop();\n      return null;\n    }\n    throw new Error(msgForUnexpectedResponse(data));\n  }\n\n  private async apolloQuery(\n    variables: SchemaReportMutationVariables,\n  ): Promise<{ data?: SchemaReportMutation; errors?: any[] }> {\n    const request: GraphQLRequest = {\n      query: schemaReportGql,\n      variables,\n    };\n\n    const httpResponse = await this.fetcher(this.endpointUrl, {\n      method: 'POST',\n      headers: this.headers,\n      body: JSON.stringify(request),\n    });\n\n    if (!httpResponse.ok) {\n      throw new Error(\n        [\n          `An unexpected HTTP status code (${httpResponse.status}) was`,\n          'encountered during schema reporting.',\n        ].join(' '),\n      );\n    }\n\n    try {\n      // JSON parsing failure due to malformed data is the likely failure case\n      // here.  Any non-JSON response (e.g. HTML) is usually the suspect.\n      return await httpResponse.json();\n    } catch (error) {\n      throw new Error(\n        [\n          \"Couldn't report schema to Apollo.\",\n          'Parsing response as JSON failed.',\n          'If this continues please reach out to support@apollographql.com',\n          error,\n        ].join(' '),\n      );\n    }\n  }\n}\n;/dist/esm/plugin/landingPage/default/getEmbeddedHTML.js.map\u0004{\"version\":3,\"file\":\"getEmbeddedHTML.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../../../src/plugin/landingPage/default/getEmbeddedHTML.ts\"],\"names\":[],\"mappings\":\"AAcA,SAAS,sBAAsB,CAAC,MAAyB;IACvD,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;SAC1B,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC;SACvB,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC;SACvB,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC;SACvB,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,CAAC,MAAM,uBAAuB,GAAG,CACrC,OAAe,EACf,MAAqE,EACrE,EAAE;IAqBF,MAAM,oCAAoC,GAAG;QAC3C,cAAc,EAAE,EAAE;QAClB,oBAAoB,EAAE,KAAK;QAC3B,GAAG,CAAC,OAAO,MAAM,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;KAC3D,CAAC;IACF,MAAM,sBAAsB,GAC1B;QACE,GAAG,MAAM;QACT,MAAM,EAAE,qBAAqB;QAC7B,YAAY,EAAE;YACZ,GAAG,MAAM;YACT,cAAc,EAAE;gBACd,GAAG,oCAAoC,CAAC,cAAc;aACvD;SACF;QACD,oBAAoB,EAClB,oCAAoC,CAAC,oBAAoB;KAC5D,CAAC;IAEJ,OAAO;;;;;;;;;;;;;;iEAcwD,OAAO;;;iCAGvC,sBAAsB,CACnD,sBAAsB,CACvB;;;;;;CAMF,CAAC;AACF,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACpC,OAAe,EACf,MAAyB,EACzB,EAAE;IACF,OAAO;;;;;;;;;;;;;;gEAcuD,OAAO;;;;;;sBAMjD,MAAM,CAAC,cAAc,IAAI,OAAO;oBAClC,sBAAsB,CAAC;QACrC,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,SAAS;QACtC,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,SAAS;QACxC,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,SAAS;KACrC,CAAC;;;CAGL,CAAC;AACF,CAAC,CAAC\"}7/dist/cjs/plugin/usageReporting/iterateOverTrace.js.map\t{\"version\":3,\"file\":\"iterateOverTrace.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../../src/plugin/usageReporting/iterateOverTrace.ts\"],\"names\":[],\"mappings\":\"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\"}5/src/plugin/schemaReporting/generated/operations.d.ts\u0000\u0004export type Maybe<T> = T | null;\nexport type InputMaybe<T> = Maybe<T>;\nexport type Exact<T extends { [key: string]: unknown }> = { [K in keyof T]: T[K] };\nexport type MakeOptional<T, K extends keyof T> = Omit<T, K> & { [SubKey in K]?: Maybe<T[SubKey]> };\nexport type MakeMaybe<T, K extends keyof T> = Omit<T, K> & { [SubKey in K]: Maybe<T[SubKey]> };\n/** All built-in and custom scalars, mapped to their actual values */\nexport type Scalars = {\n  ID: string;\n  String: string;\n  Boolean: boolean;\n  Int: number;\n  Float: number;\n  /** A blob (base64'ed in JSON & GraphQL) */\n  Blob: any;\n  GraphQLDocument: any;\n  /** Long type */\n  Long: any;\n  /** Arbitrary JSON object */\n  Object: any;\n  /** A lowercase hexadecimal SHA-256 */\n  SHA256: any;\n  StringOrInt: any;\n  /** ISO 8601, extended format with nanoseconds, Zulu (or '[+-]seconds' for times relative to now) */\n  Timestamp: any;\n  /** Always null */\n  Void: any;\n};\n\nexport type Account = {\n  __typename?: 'Account';\n  auditLogExports?: Maybe<Array<AuditLogExport>>;\n  /** These are the roles that the account is able to use */\n  availableRoles: Array<UserPermission>;\n  /**\n   * Get an URL to which an avatar image can be uploaded. Client uploads by sending a PUT request\n   * with the image data to MediaUploadInfo.url. Client SHOULD set the \"Content-Type\" header to the\n   * browser-inferred MIME type, and SHOULD set the \"x-apollo-content-filename\" header to the\n   * filename, if such information is available. Client MUST set the \"x-apollo-csrf-token\" header to\n   * MediaUploadInfo.csrfToken.\n   */\n  avatarUpload?: Maybe<AvatarUploadResult>;\n  /**\n   * Get an image URL for the account's avatar. Note that CORS is not enabled for these URLs. The size\n   * argument is used for bandwidth reduction, and should be the size of the image as displayed in the\n   * application. Apollo's media server will downscale larger images to at least the requested size,\n   * but this will not happen for third-party media servers.\n   */\n  avatarUrl?: Maybe<Scalars['String']>;\n  billingInfo?: Maybe<BillingInfo>;\n  companyUrl?: Maybe<Scalars['String']>;\n  currentBillingMonth?: Maybe<BillingMonth>;\n  currentPlan: BillingPlan;\n  currentSubscription?: Maybe<BillingSubscription>;\n  experimentalFeatures: AccountExperimentalFeatures;\n  expiredTrialSubscription?: Maybe<BillingSubscription>;\n  graphIDAvailable: Scalars['Boolean'];\n  hasBeenOnTrial: Scalars['Boolean'];\n  id: Scalars['ID'];\n  /**\n   * Internal immutable identifier for the account. Only visible to Apollo admins (because it really\n   * shouldn't be used in normal client apps).\n   */\n  internalID: Scalars['ID'];\n  invitations?: Maybe<Array<AccountInvitation>>;\n  invoices?: Maybe<Array<Invoice>>;\n  isOnExpiredTrial: Scalars['Boolean'];\n  isOnTrial: Scalars['Boolean'];\n  legacyIsOnTrial: Scalars['Boolean'];\n  memberships?: Maybe<Array<AccountMembership>>;\n  name: Scalars['String'];\n  provisionedAt?: Maybe<Scalars['Timestamp']>;\n  recurlyEmail?: Maybe<Scalars['String']>;\n  /** Returns a different registry related stats pertaining to this account. */\n  registryStatsWindow?: Maybe<RegistryStatsWindow>;\n  requests?: Maybe<Scalars['Long']>;\n  requestsInCurrentBillingPeriod?: Maybe<Scalars['Long']>;\n  roles?: Maybe<AccountRoles>;\n  /** How many seats would be included in your next bill, as best estimated today */\n  seatCountForNextBill?: Maybe<Scalars['Int']>;\n  seats?: Maybe<Seats>;\n  secondaryIDs: Array<Scalars['ID']>;\n  services: Array<Service>;\n  /**\n   * If non-null, this organization tracks its members through an upstream, eg PingOne;\n   * invitations are not possible on SSO-synchronized account.\n   */\n  sso?: Maybe<OrganizationSso>;\n  state?: Maybe<AccountState>;\n  /** A list of reusable invitations for the organization. */\n  staticInvitations?: Maybe<Array<OrganizationInviteLink>>;\n  /** @deprecated use Account.statsWindow instead */\n  stats: AccountStatsWindow;\n  statsWindow?: Maybe<AccountStatsWindow>;\n  subscriptions?: Maybe<Array<BillingSubscription>>;\n  /** Gets a ticket for this org, by id */\n  ticket?: Maybe<ZendeskTicket>;\n  /** List of Zendesk tickets submitted for this org */\n  tickets?: Maybe<Array<ZendeskTicket>>;\n};\n\n\nexport type AccountAvatarUrlArgs = {\n  size?: Scalars['Int'];\n};\n\n\nexport type AccountGraphIdAvailableArgs = {\n  id: Scalars['ID'];\n};\n\n\nexport type AccountInvitationsArgs = {\n  includeAccepted?: Scalars['Boolean'];\n};\n\n\nexport type AccountRegistryStatsWindowArgs = {\n  from: Scalars['Timestamp'];\n  resolution?: InputMaybe<Resolution>;\n  to?: InputMaybe<Scalars['Timestamp']>;\n};\n\n\nexport type AccountRequestsArgs = {\n  from: Scalars['Timestamp'];\n  to: Scalars['Timestamp'];\n};\n\n\nexport type AccountServicesArgs = {\n  includeDeleted?: InputMaybe<Scalars['Boolean']>;\n};\n\n\nexport type AccountStatsArgs = {\n  from: Scalars['Timestamp'];\n  resolution?: InputMaybe<Resolution>;\n  to?: InputMaybe<Scalars['Timestamp']>;\n};\n\n\nexport type AccountStatsWindowArgs = {\n  from: Scalars['Timestamp'];\n  resolution?: InputMaybe<Resolution>;\n  to?: InputMaybe<Scalars['Timestamp']>;\n};\n\n\nexport type AccountTicketArgs = {\n  id: Scalars['ID'];\n};\n\nexport type AccountChecksStatsMetrics = {\n  __typename?: 'AccountChecksStatsMetrics';\n  totalFailedChecks: Scalars['Long'];\n  totalSuccessfulChecks: Scalars['Long'];\n};\n\nexport type AccountChecksStatsRecord = {\n  __typename?: 'AccountChecksStatsRecord';\n  id: Scalars['ID'];\n  metrics: AccountChecksStatsMetrics;\n  timestamp: Scalars['Timestamp'];\n};\n\n/** Columns of AccountEdgeServerInfos. */\nexport enum AccountEdgeServerInfosColumn {\n  BootId = 'BOOT_ID',\n  ExecutableSchemaId = 'EXECUTABLE_SCHEMA_ID',\n  LibraryVersion = 'LIBRARY_VERSION',\n  Platform = 'PLATFORM',\n  RuntimeVersion = 'RUNTIME_VERSION',\n  SchemaTag = 'SCHEMA_TAG',\n  ServerId = 'SERVER_ID',\n  ServiceId = 'SERVICE_ID',\n  Timestamp = 'TIMESTAMP',\n  UserVersion = 'USER_VERSION'\n}\n\nexport type AccountEdgeServerInfosDimensions = {\n  __typename?: 'AccountEdgeServerInfosDimensions';\n  bootId?: Maybe<Scalars['ID']>;\n  executableSchemaId?: Maybe<Scalars['ID']>;\n  libraryVersion?: Maybe<Scalars['String']>;\n  platform?: Maybe<Scalars['String']>;\n  runtimeVersion?: Maybe<Scalars['String']>;\n  schemaTag?: Maybe<Scalars['String']>;\n  serverId?: Maybe<Scalars['ID']>;\n  serviceId?: Maybe<Scalars['ID']>;\n  userVersion?: Maybe<Scalars['String']>;\n};\n\n/** Filter for data in AccountEdgeServerInfos. Fields with dimension names represent equality checks. All fields are implicitly ANDed together. */\nexport type AccountEdgeServerInfosFilter = {\n  and?: InputMaybe<Array<AccountEdgeServerInfosFilter>>;\n  /** Selects rows whose bootId dimension equals the given value if not null. To query for the null value, use {in: {bootId: [null]}} instead. */\n  bootId?: InputMaybe<Scalars['ID']>;\n  /** Selects rows whose executableSchemaId dimension equals the given value if not null. To query for the null value, use {in: {executableSchemaId: [null]}} instead. */\n  executableSchemaId?: InputMaybe<Scalars['ID']>;\n  in?: InputMaybe<AccountEdgeServerInfosFilterIn>;\n  /** Selects rows whose libraryVersion dimension equals the given value if not null. To query for the null value, use {in: {libraryVersion: [null]}} instead. */\n  libraryVersion?: InputMaybe<Scalars['String']>;\n  not?: InputMaybe<AccountEdgeServerInfosFilter>;\n  or?: InputMaybe<Array<AccountEdgeServerInfosFilter>>;\n  /** Selects rows whose platform dimension equals the given value if not null. To query for the null value, use {in: {platform: [null]}} instead. */\n  platform?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose runtimeVersion dimension equals the given value if not null. To query for the null value, use {in: {runtimeVersion: [null]}} instead. */\n  runtimeVersion?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose schemaTag dimension equals the given value if not null. To query for the null value, use {in: {schemaTag: [null]}} instead. */\n  schemaTag?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose serverId dimension equals the given value if not null. To query for the null value, use {in: {serverId: [null]}} instead. */\n  serverId?: InputMaybe<Scalars['ID']>;\n  /** Selects rows whose serviceId dimension equals the given value if not null. To query for the null value, use {in: {serviceId: [null]}} instead. */\n  serviceId?: InputMaybe<Scalars['ID']>;\n  /** Selects rows whose userVersion dimension equals the given value if not null. To query for the null value, use {in: {userVersion: [null]}} instead. */\n  userVersion?: InputMaybe<Scalars['String']>;\n};\n\n/** Filter for data in AccountEdgeServerInfos. Fields match if the corresponding dimension's value is in the given list. All fields are implicitly ANDed together. */\nexport type AccountEdgeServerInfosFilterIn = {\n  /** Selects rows whose bootId dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  bootId?: InputMaybe<Array<InputMaybe<Scalars['ID']>>>;\n  /** Selects rows whose executableSchemaId dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  executableSchemaId?: InputMaybe<Array<InputMaybe<Scalars['ID']>>>;\n  /** Selects rows whose libraryVersion dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  libraryVersion?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose platform dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  platform?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose runtimeVersion dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  runtimeVersion?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose schemaTag dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  schemaTag?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose serverId dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  serverId?: InputMaybe<Array<InputMaybe<Scalars['ID']>>>;\n  /** Selects rows whose serviceId dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  serviceId?: InputMaybe<Array<InputMaybe<Scalars['ID']>>>;\n  /** Selects rows whose userVersion dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  userVersion?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n};\n\nexport type AccountEdgeServerInfosOrderBySpec = {\n  column: AccountEdgeServerInfosColumn;\n  direction: Ordering;\n};\n\nexport type AccountEdgeServerInfosRecord = {\n  __typename?: 'AccountEdgeServerInfosRecord';\n  /** Dimensions of AccountEdgeServerInfos that can be grouped by. */\n  groupBy: AccountEdgeServerInfosDimensions;\n  /** Starting segment timestamp. */\n  timestamp: Scalars['Timestamp'];\n};\n\n/** Columns of AccountErrorStats. */\nexport enum AccountErrorStatsColumn {\n  ClientName = 'CLIENT_NAME',\n  ClientVersion = 'CLIENT_VERSION',\n  ErrorsCount = 'ERRORS_COUNT',\n  Path = 'PATH',\n  QueryId = 'QUERY_ID',\n  QueryName = 'QUERY_NAME',\n  RequestsWithErrorsCount = 'REQUESTS_WITH_ERRORS_COUNT',\n  SchemaHash = 'SCHEMA_HASH',\n  SchemaTag = 'SCHEMA_TAG',\n  ServiceId = 'SERVICE_ID',\n  Timestamp = 'TIMESTAMP'\n}\n\nexport type AccountErrorStatsDimensions = {\n  __typename?: 'AccountErrorStatsDimensions';\n  clientName?: Maybe<Scalars['String']>;\n  clientVersion?: Maybe<Scalars['String']>;\n  path?: Maybe<Scalars['String']>;\n  queryId?: Maybe<Scalars['ID']>;\n  queryName?: Maybe<Scalars['String']>;\n  schemaHash?: Maybe<Scalars['String']>;\n  schemaTag?: Maybe<Scalars['String']>;\n  serviceId?: Maybe<Scalars['ID']>;\n};\n\n/** Filter for data in AccountErrorStats. Fields with dimension names represent equality checks. All fields are implicitly ANDed together. */\nexport type AccountErrorStatsFilter = {\n  and?: InputMaybe<Array<AccountErrorStatsFilter>>;\n  /** Selects rows whose clientName dimension equals the given value if not null. To query for the null value, use {in: {clientName: [null]}} instead. */\n  clientName?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose clientVersion dimension equals the given value if not null. To query for the null value, use {in: {clientVersion: [null]}} instead. */\n  clientVersion?: InputMaybe<Scalars['String']>;\n  in?: InputMaybe<AccountErrorStatsFilterIn>;\n  not?: InputMaybe<AccountErrorStatsFilter>;\n  or?: InputMaybe<Array<AccountErrorStatsFilter>>;\n  /** Selects rows whose path dimension equals the given value if not null. To query for the null value, use {in: {path: [null]}} instead. */\n  path?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose queryId dimension equals the given value if not null. To query for the null value, use {in: {queryId: [null]}} instead. */\n  queryId?: InputMaybe<Scalars['ID']>;\n  /** Selects rows whose queryName dimension equals the given value if not null. To query for the null value, use {in: {queryName: [null]}} instead. */\n  queryName?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose schemaHash dimension equals the given value if not null. To query for the null value, use {in: {schemaHash: [null]}} instead. */\n  schemaHash?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose schemaTag dimension equals the given value if not null. To query for the null value, use {in: {schemaTag: [null]}} instead. */\n  schemaTag?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose serviceId dimension equals the given value if not null. To query for the null value, use {in: {serviceId: [null]}} instead. */\n  serviceId?: InputMaybe<Scalars['ID']>;\n};\n\n/** Filter for data in AccountErrorStats. Fields match if the corresponding dimension's value is in the given list. All fields are implicitly ANDed together. */\nexport type AccountErrorStatsFilterIn = {\n  /** Selects rows whose clientName dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  clientName?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose clientVersion dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  clientVersion?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose path dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  path?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose queryId dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  queryId?: InputMaybe<Array<InputMaybe<Scalars['ID']>>>;\n  /** Selects rows whose queryName dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  queryName?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose schemaHash dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  schemaHash?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose schemaTag dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  schemaTag?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose serviceId dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  serviceId?: InputMaybe<Array<InputMaybe<Scalars['ID']>>>;\n};\n\nexport type AccountErrorStatsMetrics = {\n  __typename?: 'AccountErrorStatsMetrics';\n  errorsCount: Scalars['Long'];\n  requestsWithErrorsCount: Scalars['Long'];\n};\n\nexport type AccountErrorStatsOrderBySpec = {\n  column: AccountErrorStatsColumn;\n  direction: Ordering;\n};\n\nexport type AccountErrorStatsRecord = {\n  __typename?: 'AccountErrorStatsRecord';\n  /** Dimensions of AccountErrorStats that can be grouped by. */\n  groupBy: AccountErrorStatsDimensions;\n  /** Metrics of AccountErrorStats that can be aggregated over. */\n  metrics: AccountErrorStatsMetrics;\n  /** Starting segment timestamp. */\n  timestamp: Scalars['Timestamp'];\n};\n\nexport type AccountExperimentalFeatures = {\n  __typename?: 'AccountExperimentalFeatures';\n  auditLogs: Scalars['Boolean'];\n  championDashboard: Scalars['Boolean'];\n  contractsPreview: Scalars['Boolean'];\n  federation2Preview: Scalars['Boolean'];\n  preRequestPreview: Scalars['Boolean'];\n  publicVariants: Scalars['Boolean'];\n  variantHomepage: Scalars['Boolean'];\n  webhooksPreview: Scalars['Boolean'];\n};\n\n/** Columns of AccountFieldLatencies. */\nexport enum AccountFieldLatenciesColumn {\n  FieldHistogram = 'FIELD_HISTOGRAM',\n  FieldName = 'FIELD_NAME',\n  ParentType = 'PARENT_TYPE',\n  SchemaHash = 'SCHEMA_HASH',\n  SchemaTag = 'SCHEMA_TAG',\n  ServiceId = 'SERVICE_ID',\n  Timestamp = 'TIMESTAMP'\n}\n\nexport type AccountFieldLatenciesDimensions = {\n  __typename?: 'AccountFieldLatenciesDimensions';\n  field?: Maybe<Scalars['String']>;\n  fieldName?: Maybe<Scalars['String']>;\n  parentType?: Maybe<Scalars['String']>;\n  schemaHash?: Maybe<Scalars['String']>;\n  schemaTag?: Maybe<Scalars['String']>;\n  serviceId?: Maybe<Scalars['ID']>;\n};\n\n/** Filter for data in AccountFieldLatencies. Fields with dimension names represent equality checks. All fields are implicitly ANDed together. */\nexport type AccountFieldLatenciesFilter = {\n  and?: InputMaybe<Array<AccountFieldLatenciesFilter>>;\n  /** Selects rows whose fieldName dimension equals the given value if not null. To query for the null value, use {in: {fieldName: [null]}} instead. */\n  fieldName?: InputMaybe<Scalars['String']>;\n  in?: InputMaybe<AccountFieldLatenciesFilterIn>;\n  not?: InputMaybe<AccountFieldLatenciesFilter>;\n  or?: InputMaybe<Array<AccountFieldLatenciesFilter>>;\n  /** Selects rows whose parentType dimension equals the given value if not null. To query for the null value, use {in: {parentType: [null]}} instead. */\n  parentType?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose schemaHash dimension equals the given value if not null. To query for the null value, use {in: {schemaHash: [null]}} instead. */\n  schemaHash?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose schemaTag dimension equals the given value if not null. To query for the null value, use {in: {schemaTag: [null]}} instead. */\n  schemaTag?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose serviceId dimension equals the given value if not null. To query for the null value, use {in: {serviceId: [null]}} instead. */\n  serviceId?: InputMaybe<Scalars['ID']>;\n};\n\n/** Filter for data in AccountFieldLatencies. Fields match if the corresponding dimension's value is in the given list. All fields are implicitly ANDed together. */\nexport type AccountFieldLatenciesFilterIn = {\n  /** Selects rows whose fieldName dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  fieldName?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose parentType dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  parentType?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose schemaHash dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  schemaHash?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose schemaTag dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  schemaTag?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose serviceId dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  serviceId?: InputMaybe<Array<InputMaybe<Scalars['ID']>>>;\n};\n\nexport type AccountFieldLatenciesMetrics = {\n  __typename?: 'AccountFieldLatenciesMetrics';\n  fieldHistogram: DurationHistogram;\n};\n\nexport type AccountFieldLatenciesOrderBySpec = {\n  column: AccountFieldLatenciesColumn;\n  direction: Ordering;\n};\n\nexport type AccountFieldLatenciesRecord = {\n  __typename?: 'AccountFieldLatenciesRecord';\n  /** Dimensions of AccountFieldLatencies that can be grouped by. */\n  groupBy: AccountFieldLatenciesDimensions;\n  /** Metrics of AccountFieldLatencies that can be aggregated over. */\n  metrics: AccountFieldLatenciesMetrics;\n  /** Starting segment timestamp. */\n  timestamp: Scalars['Timestamp'];\n};\n\n/** Columns of AccountFieldUsage. */\nexport enum AccountFieldUsageColumn {\n  ClientName = 'CLIENT_NAME',\n  ClientVersion = 'CLIENT_VERSION',\n  EstimatedExecutionCount = 'ESTIMATED_EXECUTION_COUNT',\n  ExecutionCount = 'EXECUTION_COUNT',\n  Field = 'FIELD',\n  FieldName = 'FIELD_NAME',\n  ParentType = 'PARENT_TYPE',\n  QueryId = 'QUERY_ID',\n  QueryName = 'QUERY_NAME',\n  ReferencingOperationCount = 'REFERENCING_OPERATION_COUNT',\n  SchemaHash = 'SCHEMA_HASH',\n  SchemaTag = 'SCHEMA_TAG',\n  ServiceId = 'SERVICE_ID',\n  Timestamp = 'TIMESTAMP'\n}\n\nexport type AccountFieldUsageDimensions = {\n  __typename?: 'AccountFieldUsageDimensions';\n  clientName?: Maybe<Scalars['String']>;\n  clientVersion?: Maybe<Scalars['String']>;\n  field?: Maybe<Scalars['String']>;\n  fieldName?: Maybe<Scalars['String']>;\n  parentType?: Maybe<Scalars['String']>;\n  queryId?: Maybe<Scalars['ID']>;\n  queryName?: Maybe<Scalars['String']>;\n  schemaHash?: Maybe<Scalars['String']>;\n  schemaTag?: Maybe<Scalars['String']>;\n  serviceId?: Maybe<Scalars['ID']>;\n};\n\n/** Filter for data in AccountFieldUsage. Fields with dimension names represent equality checks. All fields are implicitly ANDed together. */\nexport type AccountFieldUsageFilter = {\n  and?: InputMaybe<Array<AccountFieldUsageFilter>>;\n  /** Selects rows whose clientName dimension equals the given value if not null. To query for the null value, use {in: {clientName: [null]}} instead. */\n  clientName?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose clientVersion dimension equals the given value if not null. To query for the null value, use {in: {clientVersion: [null]}} instead. */\n  clientVersion?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose field dimension equals the given value if not null. To query for the null value, use {in: {field: [null]}} instead. */\n  field?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose fieldName dimension equals the given value if not null. To query for the null value, use {in: {fieldName: [null]}} instead. */\n  fieldName?: InputMaybe<Scalars['String']>;\n  in?: InputMaybe<AccountFieldUsageFilterIn>;\n  not?: InputMaybe<AccountFieldUsageFilter>;\n  or?: InputMaybe<Array<AccountFieldUsageFilter>>;\n  /** Selects rows whose parentType dimension equals the given value if not null. To query for the null value, use {in: {parentType: [null]}} instead. */\n  parentType?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose queryId dimension equals the given value if not null. To query for the null value, use {in: {queryId: [null]}} instead. */\n  queryId?: InputMaybe<Scalars['ID']>;\n  /** Selects rows whose queryName dimension equals the given value if not null. To query for the null value, use {in: {queryName: [null]}} instead. */\n  queryName?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose schemaHash dimension equals the given value if not null. To query for the null value, use {in: {schemaHash: [null]}} instead. */\n  schemaHash?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose schemaTag dimension equals the given value if not null. To query for the null value, use {in: {schemaTag: [null]}} instead. */\n  schemaTag?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose serviceId dimension equals the given value if not null. To query for the null value, use {in: {serviceId: [null]}} instead. */\n  serviceId?: InputMaybe<Scalars['ID']>;\n};\n\n/** Filter for data in AccountFieldUsage. Fields match if the corresponding dimension's value is in the given list. All fields are implicitly ANDed together. */\nexport type AccountFieldUsageFilterIn = {\n  /** Selects rows whose clientName dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  clientName?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose clientVersion dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  clientVersion?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose field dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  field?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose fieldName dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  fieldName?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose parentType dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  parentType?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose queryId dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  queryId?: InputMaybe<Array<InputMaybe<Scalars['ID']>>>;\n  /** Selects rows whose queryName dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  queryName?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose schemaHash dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  schemaHash?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose schemaTag dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  schemaTag?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose serviceId dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  serviceId?: InputMaybe<Array<InputMaybe<Scalars['ID']>>>;\n};\n\nexport type AccountFieldUsageMetrics = {\n  __typename?: 'AccountFieldUsageMetrics';\n  estimatedExecutionCount: Scalars['Long'];\n  executionCount: Scalars['Long'];\n  referencingOperationCount: Scalars['Long'];\n};\n\nexport type AccountFieldUsageOrderBySpec = {\n  column: AccountFieldUsageColumn;\n  direction: Ordering;\n};\n\nexport type AccountFieldUsageRecord = {\n  __typename?: 'AccountFieldUsageRecord';\n  /** Dimensions of AccountFieldUsage that can be grouped by. */\n  groupBy: AccountFieldUsageDimensions;\n  /** Metrics of AccountFieldUsage that can be aggregated over. */\n  metrics: AccountFieldUsageMetrics;\n  /** Starting segment timestamp. */\n  timestamp: Scalars['Timestamp'];\n};\n\nexport type AccountInvitation = {\n  __typename?: 'AccountInvitation';\n  /** An accepted invitation cannot be used anymore */\n  acceptedAt?: Maybe<Scalars['Timestamp']>;\n  /** Who accepted the invitation */\n  acceptedBy?: Maybe<User>;\n  /** Time the invitation was created */\n  createdAt: Scalars['Timestamp'];\n  /** Who created the invitation */\n  createdBy?: Maybe<User>;\n  email: Scalars['String'];\n  id: Scalars['ID'];\n  /** Last time we sent an email for the invitation */\n  lastSentAt?: Maybe<Scalars['Timestamp']>;\n  /** Access role for the invitee */\n  role: UserPermission;\n};\n\nexport type AccountMembership = {\n  __typename?: 'AccountMembership';\n  account: Account;\n  createdAt: Scalars['Timestamp'];\n  /** If this membership is a free seat (based on role) */\n  free?: Maybe<Scalars['Boolean']>;\n  permission: UserPermission;\n  user: User;\n};\n\nexport type AccountMutation = {\n  __typename?: 'AccountMutation';\n  auditExport?: Maybe<AuditLogExportMutation>;\n  /** Cancel a pending change from an annual team subscription to a monthly team subscription when the current period expires. */\n  cancelConvertAnnualTeamSubscriptionToMonthlyAtNextPeriod?: Maybe<Account>;\n  /** Cancel account subscriptions, subscriptions will remain active until the end of the paid period */\n  cancelSubscriptions?: Maybe<Account>;\n  /** Changes an annual team subscription to a monthly team subscription when the current period expires. */\n  convertAnnualTeamSubscriptionToMonthlyAtNextPeriod?: Maybe<Account>;\n  /** Changes a monthly team subscription to an annual team subscription. */\n  convertMonthlyTeamSubscriptionToAnnual?: Maybe<Account>;\n  createStaticInvitation?: Maybe<OrganizationInviteLink>;\n  /** Delete the account's avatar. Requires Account.canUpdateAvatar to be true. */\n  deleteAvatar?: Maybe<AvatarDeleteError>;\n  /** Acknowledge that a trial has expired and return to community */\n  dismissExpiredTrial?: Maybe<Account>;\n  /** Apollo admins only: extend an ongoing trial */\n  extendTrial?: Maybe<Account>;\n  /** Hard delete an account and all associated services */\n  hardDelete?: Maybe<Scalars['Void']>;\n  /** Send an invitation to join the account by E-mail */\n  invite?: Maybe<AccountInvitation>;\n  /** Reactivate a canceled current subscription */\n  reactivateCurrentSubscription?: Maybe<Account>;\n  /** Refresh billing information from third-party billing service */\n  refreshBilling?: Maybe<Scalars['Void']>;\n  /** Delete an invitation */\n  removeInvitation?: Maybe<Scalars['Void']>;\n  /** Remove a member of the account */\n  removeMember?: Maybe<Account>;\n  requestAuditExport?: Maybe<Account>;\n  /** Send a new E-mail for an existing invitation */\n  resendInvitation?: Maybe<AccountInvitation>;\n  revokeStaticInvitation?: Maybe<OrganizationInviteLink>;\n  /** Apollo admins only: set the billing plan to an arbitrary plan */\n  setPlan?: Maybe<Scalars['Void']>;\n  /** Start a new team subscription with the given billing period */\n  startTeamSubscription?: Maybe<Account>;\n  /** Start a team trial */\n  startTrial?: Maybe<Account>;\n  /** This is called by the form shown to users after they cancel their team subscription. */\n  submitTeamCancellationFeedback?: Maybe<Scalars['Void']>;\n  /** Apollo admins only: terminate any ongoing subscriptions in the account, without refunds */\n  terminateSubscriptions?: Maybe<Account>;\n  /** Update the billing address for a Recurly token */\n  updateBillingAddress?: Maybe<Account>;\n  /** Update the billing information from a Recurly token */\n  updateBillingInfo?: Maybe<Scalars['Void']>;\n  updateCompanyUrl?: Maybe<Account>;\n  /** Set the E-mail address of the account, used notably for billing */\n  updateEmail?: Maybe<Scalars['Void']>;\n  /** Update the account ID */\n  updateID?: Maybe<Account>;\n  /** Update the company name */\n  updateName?: Maybe<Scalars['Void']>;\n  /** Apollo admins only: enable or disable an account for PingOne SSO login */\n  updatePingOneSSOIDPID?: Maybe<Account>;\n  /** Updates the role assigned to new SSO users. */\n  updateSSODefaultRole?: Maybe<OrganizationSso>;\n  /** A (currently) internal to Apollo mutation to update a user's role within an organization */\n  updateUserPermission?: Maybe<User>;\n};\n\n\nexport type AccountMutationAuditExportArgs = {\n  id: Scalars['String'];\n};\n\n\nexport type AccountMutationCreateStaticInvitationArgs = {\n  role: UserPermission;\n};\n\n\nexport type AccountMutationExtendTrialArgs = {\n  to: Scalars['Timestamp'];\n};\n\n\nexport type AccountMutationInviteArgs = {\n  email: Scalars['String'];\n  role?: InputMaybe<UserPermission>;\n};\n\n\nexport type AccountMutationRemoveInvitationArgs = {\n  id?: InputMaybe<Scalars['ID']>;\n};\n\n\nexport type AccountMutationRemoveMemberArgs = {\n  id: Scalars['ID'];\n};\n\n\nexport type AccountMutationRequestAuditExportArgs = {\n  actors?: InputMaybe<Array<ActorInput>>;\n  from: Scalars['Timestamp'];\n  graphIds?: InputMaybe<Array<Scalars['String']>>;\n  to: Scalars['Timestamp'];\n};\n\n\nexport type AccountMutationResendInvitationArgs = {\n  id?: InputMaybe<Scalars['ID']>;\n};\n\n\nexport type AccountMutationRevokeStaticInvitationArgs = {\n  token: Scalars['String'];\n};\n\n\nexport type AccountMutationSetPlanArgs = {\n  id: Scalars['ID'];\n};\n\n\nexport type AccountMutationStartTeamSubscriptionArgs = {\n  billingPeriod: BillingPeriod;\n};\n\n\nexport type AccountMutationSubmitTeamCancellationFeedbackArgs = {\n  feedback: Scalars['String'];\n};\n\n\nexport type AccountMutationUpdateBillingAddressArgs = {\n  billingAddress: BillingAddressInput;\n};\n\n\nexport type AccountMutationUpdateBillingInfoArgs = {\n  token: Scalars['String'];\n};\n\n\nexport type AccountMutationUpdateCompanyUrlArgs = {\n  companyUrl?: InputMaybe<Scalars['String']>;\n};\n\n\nexport type AccountMutationUpdateEmailArgs = {\n  email: Scalars['String'];\n};\n\n\nexport type AccountMutationUpdateIdArgs = {\n  id: Scalars['ID'];\n};\n\n\nexport type AccountMutationUpdateNameArgs = {\n  name: Scalars['String'];\n};\n\n\nexport type AccountMutationUpdatePingOneSsoidpidArgs = {\n  idpid?: InputMaybe<Scalars['String']>;\n};\n\n\nexport type AccountMutationUpdateSsoDefaultRoleArgs = {\n  role: UserPermission;\n};\n\n\nexport type AccountMutationUpdateUserPermissionArgs = {\n  permission: UserPermission;\n  userID: Scalars['ID'];\n};\n\n/** Columns of AccountOperationCheckStats. */\nexport enum AccountOperationCheckStatsColumn {\n  CachedRequestsCount = 'CACHED_REQUESTS_COUNT',\n  ClientName = 'CLIENT_NAME',\n  ClientVersion = 'CLIENT_VERSION',\n  QueryId = 'QUERY_ID',\n  QueryName = 'QUERY_NAME',\n  SchemaTag = 'SCHEMA_TAG',\n  ServiceId = 'SERVICE_ID',\n  Timestamp = 'TIMESTAMP',\n  UncachedRequestsCount = 'UNCACHED_REQUESTS_COUNT'\n}\n\nexport type AccountOperationCheckStatsDimensions = {\n  __typename?: 'AccountOperationCheckStatsDimensions';\n  clientName?: Maybe<Scalars['String']>;\n  clientVersion?: Maybe<Scalars['String']>;\n  queryId?: Maybe<Scalars['ID']>;\n  queryName?: Maybe<Scalars['String']>;\n  schemaTag?: Maybe<Scalars['String']>;\n  serviceId?: Maybe<Scalars['ID']>;\n};\n\n/** Filter for data in AccountOperationCheckStats. Fields with dimension names represent equality checks. All fields are implicitly ANDed together. */\nexport type AccountOperationCheckStatsFilter = {\n  and?: InputMaybe<Array<AccountOperationCheckStatsFilter>>;\n  /** Selects rows whose clientName dimension equals the given value if not null. To query for the null value, use {in: {clientName: [null]}} instead. */\n  clientName?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose clientVersion dimension equals the given value if not null. To query for the null value, use {in: {clientVersion: [null]}} instead. */\n  clientVersion?: InputMaybe<Scalars['String']>;\n  in?: InputMaybe<AccountOperationCheckStatsFilterIn>;\n  not?: InputMaybe<AccountOperationCheckStatsFilter>;\n  or?: InputMaybe<Array<AccountOperationCheckStatsFilter>>;\n  /** Selects rows whose queryId dimension equals the given value if not null. To query for the null value, use {in: {queryId: [null]}} instead. */\n  queryId?: InputMaybe<Scalars['ID']>;\n  /** Selects rows whose queryName dimension equals the given value if not null. To query for the null value, use {in: {queryName: [null]}} instead. */\n  queryName?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose schemaTag dimension equals the given value if not null. To query for the null value, use {in: {schemaTag: [null]}} instead. */\n  schemaTag?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose serviceId dimension equals the given value if not null. To query for the null value, use {in: {serviceId: [null]}} instead. */\n  serviceId?: InputMaybe<Scalars['ID']>;\n};\n\n/** Filter for data in AccountOperationCheckStats. Fields match if the corresponding dimension's value is in the given list. All fields are implicitly ANDed together. */\nexport type AccountOperationCheckStatsFilterIn = {\n  /** Selects rows whose clientName dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  clientName?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose clientVersion dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  clientVersion?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose queryId dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  queryId?: InputMaybe<Array<InputMaybe<Scalars['ID']>>>;\n  /** Selects rows whose queryName dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  queryName?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose schemaTag dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  schemaTag?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose serviceId dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  serviceId?: InputMaybe<Array<InputMaybe<Scalars['ID']>>>;\n};\n\nexport type AccountOperationCheckStatsMetrics = {\n  __typename?: 'AccountOperationCheckStatsMetrics';\n  cachedRequestsCount: Scalars['Long'];\n  uncachedRequestsCount: Scalars['Long'];\n};\n\nexport type AccountOperationCheckStatsOrderBySpec = {\n  column: AccountOperationCheckStatsColumn;\n  direction: Ordering;\n};\n\nexport type AccountOperationCheckStatsRecord = {\n  __typename?: 'AccountOperationCheckStatsRecord';\n  /** Dimensions of AccountOperationCheckStats that can be grouped by. */\n  groupBy: AccountOperationCheckStatsDimensions;\n  /** Metrics of AccountOperationCheckStats that can be aggregated over. */\n  metrics: AccountOperationCheckStatsMetrics;\n  /** Starting segment timestamp. */\n  timestamp: Scalars['Timestamp'];\n};\n\nexport type AccountPublishesStatsMetrics = {\n  __typename?: 'AccountPublishesStatsMetrics';\n  totalPublishes: Scalars['Long'];\n};\n\nexport type AccountPublishesStatsRecord = {\n  __typename?: 'AccountPublishesStatsRecord';\n  id: Scalars['ID'];\n  metrics: AccountPublishesStatsMetrics;\n  timestamp: Scalars['Timestamp'];\n};\n\n/** Columns of AccountQueryStats. */\nexport enum AccountQueryStatsColumn {\n  CachedHistogram = 'CACHED_HISTOGRAM',\n  CachedRequestsCount = 'CACHED_REQUESTS_COUNT',\n  CacheTtlHistogram = 'CACHE_TTL_HISTOGRAM',\n  ClientName = 'CLIENT_NAME',\n  ClientVersion = 'CLIENT_VERSION',\n  ForbiddenOperationCount = 'FORBIDDEN_OPERATION_COUNT',\n  FromEngineproxy = 'FROM_ENGINEPROXY',\n  QueryId = 'QUERY_ID',\n  QueryName = 'QUERY_NAME',\n  RegisteredOperationCount = 'REGISTERED_OPERATION_COUNT',\n  RequestsWithErrorsCount = 'REQUESTS_WITH_ERRORS_COUNT',\n  SchemaHash = 'SCHEMA_HASH',\n  SchemaTag = 'SCHEMA_TAG',\n  ServiceId = 'SERVICE_ID',\n  Timestamp = 'TIMESTAMP',\n  UncachedHistogram = 'UNCACHED_HISTOGRAM',\n  UncachedRequestsCount = 'UNCACHED_REQUESTS_COUNT'\n}\n\nexport type AccountQueryStatsDimensions = {\n  __typename?: 'AccountQueryStatsDimensions';\n  clientName?: Maybe<Scalars['String']>;\n  clientVersion?: Maybe<Scalars['String']>;\n  fromEngineproxy?: Maybe<Scalars['String']>;\n  queryId?: Maybe<Scalars['ID']>;\n  queryName?: Maybe<Scalars['String']>;\n  querySignature?: Maybe<Scalars['String']>;\n  schemaHash?: Maybe<Scalars['String']>;\n  schemaTag?: Maybe<Scalars['String']>;\n  serviceId?: Maybe<Scalars['ID']>;\n};\n\n/** Filter for data in AccountQueryStats. Fields with dimension names represent equality checks. All fields are implicitly ANDed together. */\nexport type AccountQueryStatsFilter = {\n  and?: InputMaybe<Array<AccountQueryStatsFilter>>;\n  /** Selects rows whose clientName dimension equals the given value if not null. To query for the null value, use {in: {clientName: [null]}} instead. */\n  clientName?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose clientVersion dimension equals the given value if not null. To query for the null value, use {in: {clientVersion: [null]}} instead. */\n  clientVersion?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose fromEngineproxy dimension equals the given value if not null. To query for the null value, use {in: {fromEngineproxy: [null]}} instead. */\n  fromEngineproxy?: InputMaybe<Scalars['String']>;\n  in?: InputMaybe<AccountQueryStatsFilterIn>;\n  not?: InputMaybe<AccountQueryStatsFilter>;\n  or?: InputMaybe<Array<AccountQueryStatsFilter>>;\n  /** Selects rows whose queryId dimension equals the given value if not null. To query for the null value, use {in: {queryId: [null]}} instead. */\n  queryId?: InputMaybe<Scalars['ID']>;\n  /** Selects rows whose queryName dimension equals the given value if not null. To query for the null value, use {in: {queryName: [null]}} instead. */\n  queryName?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose schemaHash dimension equals the given value if not null. To query for the null value, use {in: {schemaHash: [null]}} instead. */\n  schemaHash?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose schemaTag dimension equals the given value if not null. To query for the null value, use {in: {schemaTag: [null]}} instead. */\n  schemaTag?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose serviceId dimension equals the given value if not null. To query for the null value, use {in: {serviceId: [null]}} instead. */\n  serviceId?: InputMaybe<Scalars['ID']>;\n};\n\n/** Filter for data in AccountQueryStats. Fields match if the corresponding dimension's value is in the given list. All fields are implicitly ANDed together. */\nexport type AccountQueryStatsFilterIn = {\n  /** Selects rows whose clientName dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  clientName?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose clientVersion dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  clientVersion?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose fromEngineproxy dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  fromEngineproxy?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose queryId dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  queryId?: InputMaybe<Array<InputMaybe<Scalars['ID']>>>;\n  /** Selects rows whose queryName dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  queryName?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose schemaHash dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  schemaHash?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose schemaTag dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  schemaTag?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose serviceId dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  serviceId?: InputMaybe<Array<InputMaybe<Scalars['ID']>>>;\n};\n\nexport type AccountQueryStatsMetrics = {\n  __typename?: 'AccountQueryStatsMetrics';\n  cacheTtlHistogram: DurationHistogram;\n  cachedHistogram: DurationHistogram;\n  cachedRequestsCount: Scalars['Long'];\n  forbiddenOperationCount: Scalars['Long'];\n  registeredOperationCount: Scalars['Long'];\n  requestsWithErrorsCount: Scalars['Long'];\n  totalLatencyHistogram: DurationHistogram;\n  totalRequestCount: Scalars['Long'];\n  uncachedHistogram: DurationHistogram;\n  uncachedRequestsCount: Scalars['Long'];\n};\n\nexport type AccountQueryStatsOrderBySpec = {\n  column: AccountQueryStatsColumn;\n  direction: Ordering;\n};\n\nexport type AccountQueryStatsRecord = {\n  __typename?: 'AccountQueryStatsRecord';\n  /** Dimensions of AccountQueryStats that can be grouped by. */\n  groupBy: AccountQueryStatsDimensions;\n  /** Metrics of AccountQueryStats that can be aggregated over. */\n  metrics: AccountQueryStatsMetrics;\n  /** Starting segment timestamp. */\n  timestamp: Scalars['Timestamp'];\n};\n\nexport type AccountRoles = {\n  __typename?: 'AccountRoles';\n  canAudit: Scalars['Boolean'];\n  canCreateDevGraph: Scalars['Boolean'];\n  canCreateService: Scalars['Boolean'];\n  canDelete: Scalars['Boolean'];\n  /** @deprecated Use canQueryBillingInfo instead */\n  canDownloadInvoice: Scalars['Boolean'];\n  canManageMembers: Scalars['Boolean'];\n  canQuery: Scalars['Boolean'];\n  canQueryAudit: Scalars['Boolean'];\n  canQueryBillingInfo: Scalars['Boolean'];\n  /** @deprecated Use canQueryBillingInfo instead */\n  canQueryInvoices: Scalars['Boolean'];\n  canQueryMembers: Scalars['Boolean'];\n  canQueryStats: Scalars['Boolean'];\n  canReadTickets: Scalars['Boolean'];\n  canRemoveMembers: Scalars['Boolean'];\n  canSetConstrainedPlan: Scalars['Boolean'];\n  canUpdateBillingInfo: Scalars['Boolean'];\n  canUpdateMetadata: Scalars['Boolean'];\n};\n\nexport enum AccountState {\n  Active = 'ACTIVE',\n  Closed = 'CLOSED',\n  Unknown = 'UNKNOWN',\n  Unprovisioned = 'UNPROVISIONED'\n}\n\n/** A time window with a specified granularity over a given account. */\nexport type AccountStatsWindow = {\n  __typename?: 'AccountStatsWindow';\n  edgeServerInfos: Array<AccountEdgeServerInfosRecord>;\n  errorStats: Array<AccountErrorStatsRecord>;\n  fieldLatencies: Array<AccountFieldLatenciesRecord>;\n  fieldUsage: Array<AccountFieldUsageRecord>;\n  operationCheckStats: Array<AccountOperationCheckStatsRecord>;\n  queryStats: Array<AccountQueryStatsRecord>;\n  /** From field rounded down to the nearest resolution. */\n  roundedDownFrom: Scalars['Timestamp'];\n  /** To field rounded up to the nearest resolution. */\n  roundedUpTo: Scalars['Timestamp'];\n  tracePathErrorsRefs: Array<AccountTracePathErrorsRefsRecord>;\n  traceRefs: Array<AccountTraceRefsRecord>;\n};\n\n\n/** A time window with a specified granularity over a given account. */\nexport type AccountStatsWindowEdgeServerInfosArgs = {\n  filter?: InputMaybe<AccountEdgeServerInfosFilter>;\n  limit?: InputMaybe<Scalars['Int']>;\n  orderBy?: InputMaybe<Array<AccountEdgeServerInfosOrderBySpec>>;\n};\n\n\n/** A time window with a specified granularity over a given account. */\nexport type AccountStatsWindowErrorStatsArgs = {\n  filter?: InputMaybe<AccountErrorStatsFilter>;\n  limit?: InputMaybe<Scalars['Int']>;\n  orderBy?: InputMaybe<Array<AccountErrorStatsOrderBySpec>>;\n};\n\n\n/** A time window with a specified granularity over a given account. */\nexport type AccountStatsWindowFieldLatenciesArgs = {\n  filter?: InputMaybe<AccountFieldLatenciesFilter>;\n  limit?: InputMaybe<Scalars['Int']>;\n  orderBy?: InputMaybe<Array<AccountFieldLatenciesOrderBySpec>>;\n};\n\n\n/** A time window with a specified granularity over a given account. */\nexport type AccountStatsWindowFieldUsageArgs = {\n  filter?: InputMaybe<AccountFieldUsageFilter>;\n  limit?: InputMaybe<Scalars['Int']>;\n  orderBy?: InputMaybe<Array<AccountFieldUsageOrderBySpec>>;\n};\n\n\n/** A time window with a specified granularity over a given account. */\nexport type AccountStatsWindowOperationCheckStatsArgs = {\n  filter?: InputMaybe<AccountOperationCheckStatsFilter>;\n  limit?: InputMaybe<Scalars['Int']>;\n  orderBy?: InputMaybe<Array<AccountOperationCheckStatsOrderBySpec>>;\n};\n\n\n/** A time window with a specified granularity over a given account. */\nexport type AccountStatsWindowQueryStatsArgs = {\n  filter?: InputMaybe<AccountQueryStatsFilter>;\n  limit?: InputMaybe<Scalars['Int']>;\n  orderBy?: InputMaybe<Array<AccountQueryStatsOrderBySpec>>;\n};\n\n\n/** A time window with a specified granularity over a given account. */\nexport type AccountStatsWindowTracePathErrorsRefsArgs = {\n  filter?: InputMaybe<AccountTracePathErrorsRefsFilter>;\n  limit?: InputMaybe<Scalars['Int']>;\n  orderBy?: InputMaybe<Array<AccountTracePathErrorsRefsOrderBySpec>>;\n};\n\n\n/** A time window with a specified granularity over a given account. */\nexport type AccountStatsWindowTraceRefsArgs = {\n  filter?: InputMaybe<AccountTraceRefsFilter>;\n  limit?: InputMaybe<Scalars['Int']>;\n  orderBy?: InputMaybe<Array<AccountTraceRefsOrderBySpec>>;\n};\n\n/** Columns of AccountTracePathErrorsRefs. */\nexport enum AccountTracePathErrorsRefsColumn {\n  ClientName = 'CLIENT_NAME',\n  ClientVersion = 'CLIENT_VERSION',\n  DurationBucket = 'DURATION_BUCKET',\n  ErrorsCountInPath = 'ERRORS_COUNT_IN_PATH',\n  ErrorsCountInTrace = 'ERRORS_COUNT_IN_TRACE',\n  ErrorMessage = 'ERROR_MESSAGE',\n  Path = 'PATH',\n  QueryId = 'QUERY_ID',\n  QueryName = 'QUERY_NAME',\n  SchemaHash = 'SCHEMA_HASH',\n  SchemaTag = 'SCHEMA_TAG',\n  ServiceId = 'SERVICE_ID',\n  Timestamp = 'TIMESTAMP',\n  TraceHttpStatusCode = 'TRACE_HTTP_STATUS_CODE',\n  TraceId = 'TRACE_ID',\n  TraceSizeBytes = 'TRACE_SIZE_BYTES',\n  TraceStartsAt = 'TRACE_STARTS_AT'\n}\n\nexport type AccountTracePathErrorsRefsDimensions = {\n  __typename?: 'AccountTracePathErrorsRefsDimensions';\n  clientName?: Maybe<Scalars['String']>;\n  clientVersion?: Maybe<Scalars['String']>;\n  durationBucket?: Maybe<Scalars['Int']>;\n  errorMessage?: Maybe<Scalars['String']>;\n  path?: Maybe<Scalars['String']>;\n  queryId?: Maybe<Scalars['ID']>;\n  queryName?: Maybe<Scalars['String']>;\n  schemaHash?: Maybe<Scalars['String']>;\n  schemaTag?: Maybe<Scalars['String']>;\n  serviceId?: Maybe<Scalars['ID']>;\n  traceHttpStatusCode?: Maybe<Scalars['Int']>;\n  traceId?: Maybe<Scalars['ID']>;\n  traceStartsAt?: Maybe<Scalars['Timestamp']>;\n};\n\n/** Filter for data in AccountTracePathErrorsRefs. Fields with dimension names represent equality checks. All fields are implicitly ANDed together. */\nexport type AccountTracePathErrorsRefsFilter = {\n  and?: InputMaybe<Array<AccountTracePathErrorsRefsFilter>>;\n  /** Selects rows whose clientName dimension equals the given value if not null. To query for the null value, use {in: {clientName: [null]}} instead. */\n  clientName?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose clientVersion dimension equals the given value if not null. To query for the null value, use {in: {clientVersion: [null]}} instead. */\n  clientVersion?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose durationBucket dimension equals the given value if not null. To query for the null value, use {in: {durationBucket: [null]}} instead. */\n  durationBucket?: InputMaybe<Scalars['Int']>;\n  /** Selects rows whose errorMessage dimension equals the given value if not null. To query for the null value, use {in: {errorMessage: [null]}} instead. */\n  errorMessage?: InputMaybe<Scalars['String']>;\n  in?: InputMaybe<AccountTracePathErrorsRefsFilterIn>;\n  not?: InputMaybe<AccountTracePathErrorsRefsFilter>;\n  or?: InputMaybe<Array<AccountTracePathErrorsRefsFilter>>;\n  /** Selects rows whose path dimension equals the given value if not null. To query for the null value, use {in: {path: [null]}} instead. */\n  path?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose queryId dimension equals the given value if not null. To query for the null value, use {in: {queryId: [null]}} instead. */\n  queryId?: InputMaybe<Scalars['ID']>;\n  /** Selects rows whose queryName dimension equals the given value if not null. To query for the null value, use {in: {queryName: [null]}} instead. */\n  queryName?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose schemaHash dimension equals the given value if not null. To query for the null value, use {in: {schemaHash: [null]}} instead. */\n  schemaHash?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose schemaTag dimension equals the given value if not null. To query for the null value, use {in: {schemaTag: [null]}} instead. */\n  schemaTag?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose serviceId dimension equals the given value if not null. To query for the null value, use {in: {serviceId: [null]}} instead. */\n  serviceId?: InputMaybe<Scalars['ID']>;\n  /** Selects rows whose traceHttpStatusCode dimension equals the given value if not null. To query for the null value, use {in: {traceHttpStatusCode: [null]}} instead. */\n  traceHttpStatusCode?: InputMaybe<Scalars['Int']>;\n  /** Selects rows whose traceId dimension equals the given value if not null. To query for the null value, use {in: {traceId: [null]}} instead. */\n  traceId?: InputMaybe<Scalars['ID']>;\n};\n\n/** Filter for data in AccountTracePathErrorsRefs. Fields match if the corresponding dimension's value is in the given list. All fields are implicitly ANDed together. */\nexport type AccountTracePathErrorsRefsFilterIn = {\n  /** Selects rows whose clientName dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  clientName?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose clientVersion dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  clientVersion?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose durationBucket dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  durationBucket?: InputMaybe<Array<InputMaybe<Scalars['Int']>>>;\n  /** Selects rows whose errorMessage dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  errorMessage?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose path dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  path?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose queryId dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  queryId?: InputMaybe<Array<InputMaybe<Scalars['ID']>>>;\n  /** Selects rows whose queryName dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  queryName?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose schemaHash dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  schemaHash?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose schemaTag dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  schemaTag?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose serviceId dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  serviceId?: InputMaybe<Array<InputMaybe<Scalars['ID']>>>;\n  /** Selects rows whose traceHttpStatusCode dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  traceHttpStatusCode?: InputMaybe<Array<InputMaybe<Scalars['Int']>>>;\n  /** Selects rows whose traceId dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  traceId?: InputMaybe<Array<InputMaybe<Scalars['ID']>>>;\n};\n\nexport type AccountTracePathErrorsRefsMetrics = {\n  __typename?: 'AccountTracePathErrorsRefsMetrics';\n  errorsCountInPath: Scalars['Long'];\n  errorsCountInTrace: Scalars['Long'];\n  traceSizeBytes: Scalars['Long'];\n};\n\nexport type AccountTracePathErrorsRefsOrderBySpec = {\n  column: AccountTracePathErrorsRefsColumn;\n  direction: Ordering;\n};\n\nexport type AccountTracePathErrorsRefsRecord = {\n  __typename?: 'AccountTracePathErrorsRefsRecord';\n  /** Dimensions of AccountTracePathErrorsRefs that can be grouped by. */\n  groupBy: AccountTracePathErrorsRefsDimensions;\n  /** Metrics of AccountTracePathErrorsRefs that can be aggregated over. */\n  metrics: AccountTracePathErrorsRefsMetrics;\n  /** Starting segment timestamp. */\n  timestamp: Scalars['Timestamp'];\n};\n\n/** Columns of AccountTraceRefs. */\nexport enum AccountTraceRefsColumn {\n  ClientName = 'CLIENT_NAME',\n  ClientVersion = 'CLIENT_VERSION',\n  DurationBucket = 'DURATION_BUCKET',\n  DurationNs = 'DURATION_NS',\n  QueryId = 'QUERY_ID',\n  QueryName = 'QUERY_NAME',\n  SchemaHash = 'SCHEMA_HASH',\n  SchemaTag = 'SCHEMA_TAG',\n  ServiceId = 'SERVICE_ID',\n  Timestamp = 'TIMESTAMP',\n  TraceId = 'TRACE_ID',\n  TraceSizeBytes = 'TRACE_SIZE_BYTES'\n}\n\nexport type AccountTraceRefsDimensions = {\n  __typename?: 'AccountTraceRefsDimensions';\n  clientName?: Maybe<Scalars['String']>;\n  clientVersion?: Maybe<Scalars['String']>;\n  durationBucket?: Maybe<Scalars['Int']>;\n  queryId?: Maybe<Scalars['ID']>;\n  queryName?: Maybe<Scalars['String']>;\n  querySignature?: Maybe<Scalars['String']>;\n  schemaHash?: Maybe<Scalars['String']>;\n  schemaTag?: Maybe<Scalars['String']>;\n  serviceId?: Maybe<Scalars['ID']>;\n  traceId?: Maybe<Scalars['ID']>;\n};\n\n/** Filter for data in AccountTraceRefs. Fields with dimension names represent equality checks. All fields are implicitly ANDed together. */\nexport type AccountTraceRefsFilter = {\n  and?: InputMaybe<Array<AccountTraceRefsFilter>>;\n  /** Selects rows whose clientName dimension equals the given value if not null. To query for the null value, use {in: {clientName: [null]}} instead. */\n  clientName?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose clientVersion dimension equals the given value if not null. To query for the null value, use {in: {clientVersion: [null]}} instead. */\n  clientVersion?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose durationBucket dimension equals the given value if not null. To query for the null value, use {in: {durationBucket: [null]}} instead. */\n  durationBucket?: InputMaybe<Scalars['Int']>;\n  in?: InputMaybe<AccountTraceRefsFilterIn>;\n  not?: InputMaybe<AccountTraceRefsFilter>;\n  or?: InputMaybe<Array<AccountTraceRefsFilter>>;\n  /** Selects rows whose queryId dimension equals the given value if not null. To query for the null value, use {in: {queryId: [null]}} instead. */\n  queryId?: InputMaybe<Scalars['ID']>;\n  /** Selects rows whose queryName dimension equals the given value if not null. To query for the null value, use {in: {queryName: [null]}} instead. */\n  queryName?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose schemaHash dimension equals the given value if not null. To query for the null value, use {in: {schemaHash: [null]}} instead. */\n  schemaHash?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose schemaTag dimension equals the given value if not null. To query for the null value, use {in: {schemaTag: [null]}} instead. */\n  schemaTag?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose serviceId dimension equals the given value if not null. To query for the null value, use {in: {serviceId: [null]}} instead. */\n  serviceId?: InputMaybe<Scalars['ID']>;\n  /** Selects rows whose traceId dimension equals the given value if not null. To query for the null value, use {in: {traceId: [null]}} instead. */\n  traceId?: InputMaybe<Scalars['ID']>;\n};\n\n/** Filter for data in AccountTraceRefs. Fields match if the corresponding dimension's value is in the given list. All fields are implicitly ANDed together. */\nexport type AccountTraceRefsFilterIn = {\n  /** Selects rows whose clientName dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  clientName?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose clientVersion dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  clientVersion?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose durationBucket dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  durationBucket?: InputMaybe<Array<InputMaybe<Scalars['Int']>>>;\n  /** Selects rows whose queryId dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  queryId?: InputMaybe<Array<InputMaybe<Scalars['ID']>>>;\n  /** Selects rows whose queryName dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  queryName?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose schemaHash dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  schemaHash?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose schemaTag dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  schemaTag?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose serviceId dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  serviceId?: InputMaybe<Array<InputMaybe<Scalars['ID']>>>;\n  /** Selects rows whose traceId dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  traceId?: InputMaybe<Array<InputMaybe<Scalars['ID']>>>;\n};\n\nexport type AccountTraceRefsMetrics = {\n  __typename?: 'AccountTraceRefsMetrics';\n  durationNs: Scalars['Long'];\n  traceSizeBytes: Scalars['Long'];\n};\n\nexport type AccountTraceRefsOrderBySpec = {\n  column: AccountTraceRefsColumn;\n  direction: Ordering;\n};\n\nexport type AccountTraceRefsRecord = {\n  __typename?: 'AccountTraceRefsRecord';\n  /** Dimensions of AccountTraceRefs that can be grouped by. */\n  groupBy: AccountTraceRefsDimensions;\n  /** Metrics of AccountTraceRefs that can be aggregated over. */\n  metrics: AccountTraceRefsMetrics;\n  /** Starting segment timestamp. */\n  timestamp: Scalars['Timestamp'];\n};\n\nexport type Actor = {\n  __typename?: 'Actor';\n  actorId: Scalars['ID'];\n  type: ActorType;\n};\n\nexport type ActorInput = {\n  actorId: Scalars['ID'];\n  type: ActorType;\n};\n\nexport enum ActorType {\n  AnonymousUser = 'ANONYMOUS_USER',\n  Backfill = 'BACKFILL',\n  Cron = 'CRON',\n  Graph = 'GRAPH',\n  InternalIdentity = 'INTERNAL_IDENTITY',\n  Synchronization = 'SYNCHRONIZATION',\n  User = 'USER'\n}\n\nexport type AddOperationCollectionEntryResult = OperationCollectionEntry | ValidationError;\n\nexport type AddOperationCollectionToVariantResult = GraphVariant | InvalidTarget | ValidationError;\n\nexport type AffectedClient = {\n  __typename?: 'AffectedClient';\n  /**\n   * ID, often the name, of the client set by the user and reported alongside metrics\n   * @deprecated Unsupported.\n   */\n  clientReferenceId?: Maybe<Scalars['ID']>;\n  /**\n   * version of the client set by the user and reported alongside metrics\n   * @deprecated Unsupported.\n   */\n  clientVersion?: Maybe<Scalars['String']>;\n};\n\nexport type AffectedQuery = {\n  __typename?: 'AffectedQuery';\n  /** If the operation would be approved if the check ran again. Returns null if queried from SchemaDiff.changes.affectedQueries.alreadyApproved */\n  alreadyApproved?: Maybe<Scalars['Boolean']>;\n  /** If the operation would be ignored if the check ran again */\n  alreadyIgnored?: Maybe<Scalars['Boolean']>;\n  /** List of changes affecting this query. Returns null if queried from SchemaDiff.changes.affectedQueries.changes */\n  changes?: Maybe<Array<ChangeOnOperation>>;\n  /** Name to display to the user for the operation */\n  displayName?: Maybe<Scalars['String']>;\n  id: Scalars['ID'];\n  /** Determines if this query validates against the proposed schema */\n  isValid?: Maybe<Scalars['Boolean']>;\n  /** Whether this operation was ignored and its severity was downgraded for that reason */\n  markedAsIgnored?: Maybe<Scalars['Boolean']>;\n  /** Whether the changes were marked as safe and its severity was downgraded for that reason */\n  markedAsSafe?: Maybe<Scalars['Boolean']>;\n  /** Name provided for the operation, which can be empty string if it is an anonymous operation */\n  name?: Maybe<Scalars['String']>;\n  /** First 128 characters of query signature for display */\n  signature?: Maybe<Scalars['String']>;\n};\n\nexport type ApiKey = {\n  id: Scalars['ID'];\n  keyName?: Maybe<Scalars['String']>;\n  token: Scalars['String'];\n};\n\nexport type ApiKeyProvision = {\n  __typename?: 'ApiKeyProvision';\n  apiKey: ApiKey;\n  created: Scalars['Boolean'];\n};\n\nexport type AuditLogExport = {\n  __typename?: 'AuditLogExport';\n  actors?: Maybe<Array<Identity>>;\n  bigqueryTriggeredAt?: Maybe<Scalars['Timestamp']>;\n  completedAt?: Maybe<Scalars['Timestamp']>;\n  createdAt: Scalars['Timestamp'];\n  exportedFiles?: Maybe<Array<Scalars['String']>>;\n  from: Scalars['Timestamp'];\n  graphs?: Maybe<Array<Service>>;\n  id: Scalars['ID'];\n  requester?: Maybe<User>;\n  status: AuditStatus;\n  to: Scalars['Timestamp'];\n};\n\nexport type AuditLogExportMutation = {\n  __typename?: 'AuditLogExportMutation';\n  cancel?: Maybe<Account>;\n  delete?: Maybe<Account>;\n};\n\nexport enum AuditStatus {\n  Cancelled = 'CANCELLED',\n  Completed = 'COMPLETED',\n  Expired = 'EXPIRED',\n  Failed = 'FAILED',\n  InProgress = 'IN_PROGRESS',\n  Queued = 'QUEUED'\n}\n\nexport type AvatarDeleteError = {\n  __typename?: 'AvatarDeleteError';\n  clientMessage: Scalars['String'];\n  code: AvatarDeleteErrorCode;\n  serverMessage: Scalars['String'];\n};\n\nexport enum AvatarDeleteErrorCode {\n  SsoUsersCannotDeleteSelfAvatar = 'SSO_USERS_CANNOT_DELETE_SELF_AVATAR'\n}\n\nexport type AvatarUploadError = {\n  __typename?: 'AvatarUploadError';\n  clientMessage: Scalars['String'];\n  code: AvatarUploadErrorCode;\n  serverMessage: Scalars['String'];\n};\n\nexport enum AvatarUploadErrorCode {\n  SsoUsersCannotUploadSelfAvatar = 'SSO_USERS_CANNOT_UPLOAD_SELF_AVATAR'\n}\n\nexport type AvatarUploadResult = AvatarUploadError | MediaUploadInfo;\n\nexport type BillingAddress = {\n  __typename?: 'BillingAddress';\n  address1?: Maybe<Scalars['String']>;\n  address2?: Maybe<Scalars['String']>;\n  city?: Maybe<Scalars['String']>;\n  country?: Maybe<Scalars['String']>;\n  state?: Maybe<Scalars['String']>;\n  zip?: Maybe<Scalars['String']>;\n};\n\n/** Billing address inpnut */\nexport type BillingAddressInput = {\n  address1: Scalars['String'];\n  address2?: InputMaybe<Scalars['String']>;\n  city: Scalars['String'];\n  country: Scalars['String'];\n  state: Scalars['String'];\n  zip: Scalars['String'];\n};\n\nexport type BillingInfo = {\n  __typename?: 'BillingInfo';\n  address: BillingAddress;\n  cardType?: Maybe<Scalars['String']>;\n  firstName?: Maybe<Scalars['String']>;\n  lastFour?: Maybe<Scalars['Int']>;\n  lastName?: Maybe<Scalars['String']>;\n  month?: Maybe<Scalars['Int']>;\n  vatNumber?: Maybe<Scalars['String']>;\n  year?: Maybe<Scalars['Int']>;\n};\n\nexport enum BillingModel {\n  RequestBased = 'REQUEST_BASED',\n  SeatBased = 'SEAT_BASED'\n}\n\nexport type BillingMonth = {\n  __typename?: 'BillingMonth';\n  end: Scalars['Timestamp'];\n  requests: Scalars['Long'];\n  start: Scalars['Timestamp'];\n};\n\nexport enum BillingPeriod {\n  Monthly = 'MONTHLY',\n  Quarterly = 'QUARTERLY',\n  SemiAnnually = 'SEMI_ANNUALLY',\n  Yearly = 'YEARLY'\n}\n\nexport type BillingPlan = {\n  __typename?: 'BillingPlan';\n  addons: Array<BillingPlanAddon>;\n  billingModel: BillingModel;\n  billingPeriod?: Maybe<BillingPeriod>;\n  capabilities: BillingPlanCapabilities;\n  description?: Maybe<Scalars['String']>;\n  id: Scalars['ID'];\n  isTrial: Scalars['Boolean'];\n  kind: BillingPlanKind;\n  name: Scalars['String'];\n  /** The price of every seat */\n  pricePerSeatInUsdCents?: Maybe<Scalars['Int']>;\n  /** The price of subscribing to this plan with a quantity of 1 (currently always the case) */\n  pricePerUnitInUsdCents: Scalars['Int'];\n  /** Whether the plan is accessible by all users in QueryRoot.allPlans, QueryRoot.plan, or AccountMutation.setPlan */\n  public: Scalars['Boolean'];\n  tier: BillingPlanTier;\n};\n\nexport type BillingPlanAddon = {\n  __typename?: 'BillingPlanAddon';\n  id: Scalars['ID'];\n  pricePerUnitInUsdCents: Scalars['Int'];\n};\n\nexport type BillingPlanAddonV2 = {\n  __typename?: 'BillingPlanAddonV2';\n  id: Scalars['ID'];\n  pricePerUnitInUsdCents: Scalars['Int'];\n};\n\nexport type BillingPlanCapabilities = {\n  __typename?: 'BillingPlanCapabilities';\n  clients: Scalars['Boolean'];\n  contracts: Scalars['Boolean'];\n  datadog: Scalars['Boolean'];\n  errors: Scalars['Boolean'];\n  federation: Scalars['Boolean'];\n  launches: Scalars['Boolean'];\n  maxAuditInDays: Scalars['Int'];\n  maxRangeInDays?: Maybe<Scalars['Int']>;\n  maxRequestsPerMonth?: Maybe<Scalars['Long']>;\n  metrics: Scalars['Boolean'];\n  notifications: Scalars['Boolean'];\n  operationRegistry: Scalars['Boolean'];\n  ranges: Array<Scalars['String']>;\n  schemaValidation: Scalars['Boolean'];\n  traces: Scalars['Boolean'];\n  userRoles: Scalars['Boolean'];\n  webhooks: Scalars['Boolean'];\n};\n\nexport enum BillingPlanKind {\n  Community = 'COMMUNITY',\n  EnterpriseInternal = 'ENTERPRISE_INTERNAL',\n  EnterprisePaid = 'ENTERPRISE_PAID',\n  EnterprisePilot = 'ENTERPRISE_PILOT',\n  TeamPaid = 'TEAM_PAID',\n  TeamTrial = 'TEAM_TRIAL'\n}\n\nexport enum BillingPlanKindV2 {\n  Community = 'COMMUNITY',\n  EnterpriseInternal = 'ENTERPRISE_INTERNAL',\n  EnterprisePaid = 'ENTERPRISE_PAID',\n  EnterprisePilot = 'ENTERPRISE_PILOT',\n  TeamPaid = 'TEAM_PAID',\n  TeamTrial = 'TEAM_TRIAL',\n  Unknown = 'UNKNOWN'\n}\n\nexport enum BillingPlanTier {\n  Community = 'COMMUNITY',\n  Enterprise = 'ENTERPRISE',\n  Team = 'TEAM'\n}\n\nexport enum BillingPlanTierV2 {\n  Community = 'COMMUNITY',\n  Enterprise = 'ENTERPRISE',\n  Team = 'TEAM',\n  Unknown = 'UNKNOWN'\n}\n\nexport type BillingPlanV2 = {\n  __typename?: 'BillingPlanV2';\n  addons: Array<BillingPlanAddonV2>;\n  billingModel: BillingModel;\n  billingPeriod?: Maybe<BillingPeriod>;\n  clients: Scalars['Boolean'];\n  contracts: Scalars['Boolean'];\n  datadog: Scalars['Boolean'];\n  description?: Maybe<Scalars['String']>;\n  errors: Scalars['Boolean'];\n  federation: Scalars['Boolean'];\n  id: Scalars['ID'];\n  isTrial: Scalars['Boolean'];\n  kind: BillingPlanKindV2;\n  launches: Scalars['Boolean'];\n  maxAuditInDays: Scalars['Int'];\n  maxRangeInDays?: Maybe<Scalars['Int']>;\n  maxRequestsPerMonth?: Maybe<Scalars['Long']>;\n  metrics: Scalars['Boolean'];\n  name: Scalars['String'];\n  notifications: Scalars['Boolean'];\n  operationRegistry: Scalars['Boolean'];\n  /** The price of every seat */\n  pricePerSeatInUsdCents?: Maybe<Scalars['Int']>;\n  /** The price of subscribing to this plan with a quantity of 1 (currently always the case) */\n  pricePerUnitInUsdCents: Scalars['Int'];\n  /** Whether the plan is accessible by all users in QueryRoot.allPlans, QueryRoot.plan, or AccountMutation.setPlan */\n  public: Scalars['Boolean'];\n  ranges: Array<Scalars['String']>;\n  schemaValidation: Scalars['Boolean'];\n  tier: BillingPlanTierV2;\n  traces: Scalars['Boolean'];\n  userRoles: Scalars['Boolean'];\n  webhooks: Scalars['Boolean'];\n};\n\nexport type BillingSubscription = {\n  __typename?: 'BillingSubscription';\n  activatedAt: Scalars['Timestamp'];\n  addons: Array<BillingSubscriptionAddon>;\n  autoRenew: Scalars['Boolean'];\n  /** The price of the subscription when ignoring add-ons (such as seats), ie quantity * pricePerUnitInUsdCents */\n  basePriceInUsdCents: Scalars['Long'];\n  canceledAt?: Maybe<Scalars['Timestamp']>;\n  currentPeriodEndsAt: Scalars['Timestamp'];\n  currentPeriodStartedAt: Scalars['Timestamp'];\n  expiresAt?: Maybe<Scalars['Timestamp']>;\n  plan: BillingPlan;\n  /** The price of every seat */\n  pricePerSeatInUsdCents?: Maybe<Scalars['Int']>;\n  /** The price of every unit in the subscription (hence multiplied by quantity to get to the basePriceInUsdCents) */\n  pricePerUnitInUsdCents: Scalars['Int'];\n  quantity: Scalars['Int'];\n  /** Total price of the subscription when it next renews, including add-ons (such as seats) */\n  renewalTotalPriceInUsdCents: Scalars['Long'];\n  state: SubscriptionState;\n  /** Total price of the subscription, including add-ons (such as seats) */\n  totalPriceInUsdCents: Scalars['Long'];\n  /**\n   * When this subscription's trial period expires (if it is a trial). Not the same as the\n   * subscription's Recurly expiration).\n   */\n  trialExpiresAt?: Maybe<Scalars['Timestamp']>;\n  uuid: Scalars['ID'];\n};\n\nexport type BillingSubscriptionAddon = {\n  __typename?: 'BillingSubscriptionAddon';\n  id: Scalars['ID'];\n  pricePerUnitInUsdCents: Scalars['Int'];\n  quantity: Scalars['Int'];\n};\n\nexport type Build = {\n  __typename?: 'Build';\n  input: BuildInput;\n  result?: Maybe<BuildResult>;\n};\n\nexport type BuildError = {\n  __typename?: 'BuildError';\n  code?: Maybe<Scalars['String']>;\n  locations: Array<SourceLocation>;\n  message: Scalars['String'];\n};\n\nexport type BuildFailure = {\n  __typename?: 'BuildFailure';\n  errorMessages: Array<BuildError>;\n};\n\nexport type BuildInput = CompositionBuildInput | FilterBuildInput;\n\nexport type BuildResult = BuildFailure | BuildSuccess;\n\nexport type BuildSuccess = {\n  __typename?: 'BuildSuccess';\n  coreSchema: CoreSchema;\n};\n\nexport enum CacheScope {\n  Private = 'PRIVATE',\n  Public = 'PUBLIC',\n  Unknown = 'UNKNOWN',\n  Unrecognized = 'UNRECOGNIZED'\n}\n\nexport type Change = {\n  __typename?: 'Change';\n  affectedQueries?: Maybe<Array<AffectedQuery>>;\n  /** Target arg of change made. */\n  argNode?: Maybe<NamedIntrospectionArg>;\n  /** Indication of the category of the change (e.g. addition, removal, edit). */\n  category: ChangeCategory;\n  /**\n   * Node related to the top level node that was changed, such as a field in an object,\n   * a value in an enum or the object of an interface\n   */\n  childNode?: Maybe<NamedIntrospectionValue>;\n  /** Indication of the kind of target and action of the change, e.g. 'TYPE_REMOVED'. */\n  code: Scalars['String'];\n  /** Explanation of both the target of the change and how it was changed. */\n  description: Scalars['String'];\n  /** Top level node affected by the change */\n  parentNode?: Maybe<NamedIntrospectionType>;\n  /** Indication of the success of the overall change, either failure, warning, or notice. */\n  severity: ChangeSeverity;\n  /**\n   * Indication of the success of the overall change, either failure, warning, or notice.\n   * @deprecated use severity instead\n   */\n  type: ChangeType;\n};\n\n/**\n * Defines a set of categories that a schema change\n * can be grouped by.\n */\nexport enum ChangeCategory {\n  Addition = 'ADDITION',\n  Deprecation = 'DEPRECATION',\n  Edit = 'EDIT',\n  Removal = 'REMOVAL'\n}\n\n/**\n * These schema change codes represent all of the possible changes that can\n * occur during the schema diff algorithm.\n */\nexport enum ChangeCode {\n  /** Type of the argument was changed. */\n  ArgChangedType = 'ARG_CHANGED_TYPE',\n  /** Argument was changed from nullable to non-nullable. */\n  ArgChangedTypeOptionalToRequired = 'ARG_CHANGED_TYPE_OPTIONAL_TO_REQUIRED',\n  /** Default value added or changed for the argument. */\n  ArgDefaultValueChange = 'ARG_DEFAULT_VALUE_CHANGE',\n  /** Description was added, removed, or updated for argument. */\n  ArgDescriptionChange = 'ARG_DESCRIPTION_CHANGE',\n  /** Argument to a field was removed. */\n  ArgRemoved = 'ARG_REMOVED',\n  /** Argument to the directive was removed. */\n  DirectiveArgRemoved = 'DIRECTIVE_ARG_REMOVED',\n  /** Location of the directive was removed. */\n  DirectiveLocationRemoved = 'DIRECTIVE_LOCATION_REMOVED',\n  /** Directive was removed. */\n  DirectiveRemoved = 'DIRECTIVE_REMOVED',\n  /** Repeatable flag was removed for directive. */\n  DirectiveRepeatableRemoved = 'DIRECTIVE_REPEATABLE_REMOVED',\n  /** Enum was deprecated. */\n  EnumDeprecated = 'ENUM_DEPRECATED',\n  /** Reason for enum deprecation changed. */\n  EnumDeprecatedReasonChange = 'ENUM_DEPRECATED_REASON_CHANGE',\n  /** Enum deprecation was removed. */\n  EnumDeprecationRemoved = 'ENUM_DEPRECATION_REMOVED',\n  /** Description was added, removed, or updated for enum value. */\n  EnumValueDescriptionChange = 'ENUM_VALUE_DESCRIPTION_CHANGE',\n  /** Field was added to the type. */\n  FieldAdded = 'FIELD_ADDED',\n  /** Return type for the field was changed. */\n  FieldChangedType = 'FIELD_CHANGED_TYPE',\n  /** Field was deprecated. */\n  FieldDeprecated = 'FIELD_DEPRECATED',\n  /** Reason for field deprecation changed. */\n  FieldDeprecatedReasonChange = 'FIELD_DEPRECATED_REASON_CHANGE',\n  /** Field deprecation removed. */\n  FieldDeprecationRemoved = 'FIELD_DEPRECATION_REMOVED',\n  /** Description was added, removed, or updated for field. */\n  FieldDescriptionChange = 'FIELD_DESCRIPTION_CHANGE',\n  /** Type of the field in the input object was changed. */\n  FieldOnInputObjectChangedType = 'FIELD_ON_INPUT_OBJECT_CHANGED_TYPE',\n  /** Field was removed from the type. */\n  FieldRemoved = 'FIELD_REMOVED',\n  /** Field was removed from the input object. */\n  FieldRemovedFromInputObject = 'FIELD_REMOVED_FROM_INPUT_OBJECT',\n  /** Non-nullable field was added to the input object. */\n  NonNullableFieldAddedToInputObject = 'NON_NULLABLE_FIELD_ADDED_TO_INPUT_OBJECT',\n  /** Nullable field was added to the input type. */\n  NullableFieldAddedToInputObject = 'NULLABLE_FIELD_ADDED_TO_INPUT_OBJECT',\n  /** Nullable argument was added to the field. */\n  OptionalArgAdded = 'OPTIONAL_ARG_ADDED',\n  /** Non-nullable argument was added to the field. */\n  RequiredArgAdded = 'REQUIRED_ARG_ADDED',\n  /** Non-nullable argument added to directive. */\n  RequiredDirectiveArgAdded = 'REQUIRED_DIRECTIVE_ARG_ADDED',\n  /** Type was added to the schema. */\n  TypeAdded = 'TYPE_ADDED',\n  /** Type now implements the interface. */\n  TypeAddedToInterface = 'TYPE_ADDED_TO_INTERFACE',\n  /** A new value was added to the enum. */\n  TypeAddedToUnion = 'TYPE_ADDED_TO_UNION',\n  /**\n   * Type was changed from one kind to another.\n   * Ex: scalar to object or enum to union.\n   */\n  TypeChangedKind = 'TYPE_CHANGED_KIND',\n  /** Description was added, removed, or updated for type. */\n  TypeDescriptionChange = 'TYPE_DESCRIPTION_CHANGE',\n  /** Type (object or scalar) was removed from the schema. */\n  TypeRemoved = 'TYPE_REMOVED',\n  /** Type no longer implements the interface. */\n  TypeRemovedFromInterface = 'TYPE_REMOVED_FROM_INTERFACE',\n  /** Type is no longer included in the union. */\n  TypeRemovedFromUnion = 'TYPE_REMOVED_FROM_UNION',\n  /** A new value was added to the enum. */\n  ValueAddedToEnum = 'VALUE_ADDED_TO_ENUM',\n  /** Value was removed from the enum. */\n  ValueRemovedFromEnum = 'VALUE_REMOVED_FROM_ENUM'\n}\n\n/**\n * Represents the tuple of static information\n * about a particular kind of schema change.\n */\nexport type ChangeDefinition = {\n  __typename?: 'ChangeDefinition';\n  category: ChangeCategory;\n  code: ChangeCode;\n  defaultSeverity: ChangeSeverity;\n};\n\n/** Info about a change in the context of an operation it affects */\nexport type ChangeOnOperation = {\n  __typename?: 'ChangeOnOperation';\n  /** Human-readable explanation of the impact of this change on the operation */\n  impact?: Maybe<Scalars['String']>;\n  /** The semantic info about this change, i.e. info about the change that doesn't depend on the operation */\n  semanticChange: SemanticChange;\n};\n\nexport enum ChangeSeverity {\n  Failure = 'FAILURE',\n  Notice = 'NOTICE'\n}\n\n/**\n * Summary of the changes for a schema diff, computed by placing the changes into categories and then\n * counting the size of each category. This categorization can be done in different ways, and\n * accordingly there are multiple fields here for each type of categorization.\n *\n * Note that if an object or interface field is added/removed, there won't be any addition/removal\n * changes generated for its arguments or @deprecated usages. If an enum type is added/removed, there\n * will be addition/removal changes generated for its values, but not for those values' @deprecated\n * usages. Description changes won't be generated for a schema element if that element (or an\n * ancestor) was added/removed.\n */\nexport type ChangeSummary = {\n  __typename?: 'ChangeSummary';\n  /** Counts for changes to fields of objects, input objects, and interfaces. */\n  field: FieldChangeSummaryCounts;\n  /** Counts for all changes. */\n  total: TotalChangeSummaryCounts;\n  /**\n   * Counts for changes to non-field aspects of objects, input objects, and interfaces,\n   * and all aspects of enums, unions, and scalars.\n   */\n  type: TypeChangeSummaryCounts;\n};\n\nexport enum ChangeType {\n  Failure = 'FAILURE',\n  Notice = 'NOTICE'\n}\n\nexport type ChangelogLaunchResult = {\n  __typename?: 'ChangelogLaunchResult';\n  createdAt: Scalars['Timestamp'];\n  schemaTagID: Scalars['ID'];\n};\n\n/** Destination for notifications */\nexport type Channel = {\n  id: Scalars['ID'];\n  name: Scalars['String'];\n  subscriptions: Array<ChannelSubscription>;\n};\n\nexport type ChannelSubscription = {\n  channels: Array<Channel>;\n  enabled: Scalars['Boolean'];\n  id: Scalars['ID'];\n  variant?: Maybe<Scalars['String']>;\n};\n\nexport type CheckConfiguration = {\n  __typename?: 'CheckConfiguration';\n  /** Time when check configuration was created */\n  createdAt: Scalars['Timestamp'];\n  /** Clients to ignore during validation */\n  excludedClients: Array<ClientFilter>;\n  /** Operations to ignore during validation */\n  excludedOperations: Array<ExcludedOperation>;\n  /** Graph that this check configuration belongs to */\n  graphID: Scalars['ID'];\n  /** ID of the check configuration */\n  id: Scalars['ID'];\n  /** Default configuration to include operations on the base variant. */\n  includeBaseVariant: Scalars['Boolean'];\n  /** Variant overrides for validation */\n  includedVariants: Array<Scalars['String']>;\n  /** Minimum number of requests within the window for an operation to be considered. */\n  operationCountThreshold: Scalars['Int'];\n  /**\n   * Number of requests within the window for an operation to be considered, relative to\n   * total request count. Expected values are between 0 and 0.05 (minimum 5% of\n   * total request volume)\n   */\n  operationCountThresholdPercentage: Scalars['Float'];\n  /**\n   * Only check operations from the last <timeRangeSeconds> seconds.\n   * The default is 7 days (604,800 seconds).\n   */\n  timeRangeSeconds: Scalars['Long'];\n  /** Time when check configuration was last updated */\n  updatedAt: Scalars['Timestamp'];\n  /** Identity of the last user to update the check configuration */\n  updatedBy?: Maybe<Identity>;\n};\n\n/** Filter options available when listing checks. */\nexport type CheckFilterInput = {\n  authors?: InputMaybe<Array<Scalars['String']>>;\n  branches?: InputMaybe<Array<Scalars['String']>>;\n  status?: InputMaybe<CheckFilterInputStatusOption>;\n  subgraphs?: InputMaybe<Array<Scalars['String']>>;\n};\n\n/** Options for filtering CheckWorkflows by status */\nexport enum CheckFilterInputStatusOption {\n  Failed = 'FAILED',\n  Passed = 'PASSED',\n  Pending = 'PENDING'\n}\n\nexport type CheckPartialSchemaResult = {\n  __typename?: 'CheckPartialSchemaResult';\n  /** Result of traffic validation. This will be null if composition validation was unsuccessful. */\n  checkSchemaResult?: Maybe<CheckSchemaResult>;\n  /** Result of composition validation run before the schema check. */\n  compositionValidationResult: CompositionValidationResult;\n  /** Workflow associated with the composition validation. */\n  workflow?: Maybe<CheckWorkflow>;\n};\n\nexport type CheckSchemaResult = {\n  __typename?: 'CheckSchemaResult';\n  /** Schema diff and affected operations generated by the schema check */\n  diffToPrevious: SchemaDiff;\n  /** ID of the operations check that was created */\n  operationsCheckID: Scalars['ID'];\n  /** Generated url to view schema diff in Engine */\n  targetUrl?: Maybe<Scalars['String']>;\n  /** Workflow associated with this check result */\n  workflow?: Maybe<CheckWorkflow>;\n};\n\nexport type CheckWorkflow = {\n  __typename?: 'CheckWorkflow';\n  /**\n   * The variant provided as a base to check against.  Only the differences from the\n   * base schema will be tested in operations checks.\n   */\n  baseVariant?: Maybe<GraphVariant>;\n  completedAt?: Maybe<Scalars['Timestamp']>;\n  createdAt: Scalars['Timestamp'];\n  /** Contextual parameters supplied by the runtime environment where the check was run. */\n  gitContext?: Maybe<GitContext>;\n  id: Scalars['ID'];\n  /** The name of the implementing service that was responsible for triggering the validation. */\n  implementingServiceName?: Maybe<Scalars['String']>;\n  /** If this check is triggered for an sdl fetched using introspection, this is the endpoint where that schema was being served. */\n  introspectionEndpoint?: Maybe<Scalars['String']>;\n  /** Only true if the check was triggered from Sandbox Checks page. */\n  isSandboxCheck: Scalars['Boolean'];\n  /** If this check was created by rerunning, the original check that was rerun. */\n  rerunOf?: Maybe<CheckWorkflow>;\n  /** Checks created by re-running this check, most recent first. */\n  reruns?: Maybe<Array<CheckWorkflow>>;\n  startedAt?: Maybe<Scalars['Timestamp']>;\n  /** Overall status of the workflow, based on the underlying task statuses. */\n  status: CheckWorkflowStatus;\n  /** The set of check tasks associated with this workflow, e.g. OperationsCheck, GraphComposition, etc. */\n  tasks: Array<CheckWorkflowTask>;\n  /** Configuration of validation at the time the check was run. */\n  validationConfig?: Maybe<SchemaDiffValidationConfig>;\n};\n\n\nexport type CheckWorkflowRerunsArgs = {\n  limit?: Scalars['Int'];\n};\n\nexport type CheckWorkflowMutation = {\n  __typename?: 'CheckWorkflowMutation';\n  /** Re-run a check workflow using the current configuration. A new workflow is created and returned. */\n  rerun?: Maybe<CheckWorkflowRerunResult>;\n};\n\nexport type CheckWorkflowRerunResult = {\n  __typename?: 'CheckWorkflowRerunResult';\n  /** Check workflow created by re-running. */\n  result?: Maybe<CheckWorkflow>;\n  /** Check workflow that was rerun. */\n  source?: Maybe<CheckWorkflow>;\n};\n\nexport enum CheckWorkflowStatus {\n  Failed = 'FAILED',\n  Passed = 'PASSED',\n  Pending = 'PENDING'\n}\n\nexport type CheckWorkflowTask = {\n  completedAt?: Maybe<Scalars['Timestamp']>;\n  createdAt: Scalars['Timestamp'];\n  id: Scalars['ID'];\n  status: CheckWorkflowTaskStatus;\n  /** The workflow that this task belongs to. */\n  workflow: CheckWorkflow;\n};\n\nexport enum CheckWorkflowTaskStatus {\n  Blocked = 'BLOCKED',\n  Failed = 'FAILED',\n  Passed = 'PASSED',\n  Pending = 'PENDING'\n}\n\n/** Client filter configuration for a graph. */\nexport type ClientFilter = {\n  __typename?: 'ClientFilter';\n  /** name of the client set by the user and reported alongside metrics */\n  name?: Maybe<Scalars['String']>;\n  /** version of the client set by the user and reported alongside metrics */\n  version?: Maybe<Scalars['String']>;\n};\n\n/**\n * Options to filter by client reference ID, client name, and client version.\n * If passing client version, make sure to either provide a client reference ID or client name.\n */\nexport type ClientFilterInput = {\n  /** name of the client set by the user and reported alongside metrics */\n  name?: InputMaybe<Scalars['String']>;\n  /** version of the client set by the user and reported alongside metrics */\n  version?: InputMaybe<Scalars['String']>;\n};\n\n/** Filter options to exclude by client reference ID, client name, and client version. */\nexport type ClientInfoFilter = {\n  name?: InputMaybe<Scalars['String']>;\n  /** Ignored */\n  referenceID?: InputMaybe<Scalars['ID']>;\n  version?: InputMaybe<Scalars['String']>;\n};\n\n/** Filter options to exclude clients. Used as an output type for SchemaDiffValidationConfig. */\nexport type ClientInfoFilterOutput = {\n  __typename?: 'ClientInfoFilterOutput';\n  name?: Maybe<Scalars['String']>;\n  version?: Maybe<Scalars['String']>;\n};\n\nexport enum ComparisonOperator {\n  Equals = 'EQUALS',\n  GreaterThan = 'GREATER_THAN',\n  GreaterThanOrEqualTo = 'GREATER_THAN_OR_EQUAL_TO',\n  LessThan = 'LESS_THAN',\n  LessThanOrEqualTo = 'LESS_THAN_OR_EQUAL_TO',\n  NotEquals = 'NOT_EQUALS',\n  Unrecognized = 'UNRECOGNIZED'\n}\n\n/** Metadata about the result of composition run in the cloud, combined with removing an implementing service */\nexport type CompositionAndRemoveResult = {\n  __typename?: 'CompositionAndRemoveResult';\n  /** The produced composition config. Will be null if there are any errors */\n  compositionConfig?: Maybe<CompositionConfig>;\n  /** Whether the removed implementing service existed. */\n  didExist: Scalars['Boolean'];\n  /**\n   * List of errors during composition. Errors mean that Apollo was unable to compose the\n   * graph's implementing services into a GraphQL schema. This partial schema should not be\n   * published to the implementing service if there were any errors encountered.\n   */\n  errors: Array<Maybe<SchemaCompositionError>>;\n  /** ID that points to the results of composition. */\n  graphCompositionID: Scalars['String'];\n  /** List of subgraphs that are included in this composition. */\n  subgraphConfigs: Array<SubgraphConfig>;\n  /** Whether the gateway link was updated, or would have been for dry runs. */\n  updatedGateway: Scalars['Boolean'];\n};\n\n/** Metadata about the result of composition run in the cloud, combined with implementing service upsert */\nexport type CompositionAndUpsertResult = {\n  __typename?: 'CompositionAndUpsertResult';\n  /** The produced composition config. Will be null if there are any errors */\n  compositionConfig?: Maybe<CompositionConfig>;\n  /**\n   * List of errors during composition. Errors mean that Apollo was unable to compose the\n   * graph's implementing services into a GraphQL schema. This partial schema should not be\n   * published to the implementing service if there were any errors encountered\n   */\n  errors: Array<Maybe<SchemaCompositionError>>;\n  /** ID that points to the results of composition. */\n  graphCompositionID: Scalars['String'];\n  /** List of subgraphs that are included in this composition. */\n  subgraphConfigs: Array<SubgraphConfig>;\n  /** Whether the gateway link was updated. */\n  updatedGateway: Scalars['Boolean'];\n  /** Whether an implementingService was created as part of this mutation */\n  wasCreated: Scalars['Boolean'];\n  /** Whether an implementingService was updated as part of this mutation */\n  wasUpdated: Scalars['Boolean'];\n};\n\nexport type CompositionBuildInput = {\n  __typename?: 'CompositionBuildInput';\n  subgraphs: Array<Subgraph>;\n  version?: Maybe<Scalars['String']>;\n};\n\nexport type CompositionCheckTask = CheckWorkflowTask & {\n  __typename?: 'CompositionCheckTask';\n  completedAt?: Maybe<Scalars['Timestamp']>;\n  createdAt: Scalars['Timestamp'];\n  id: Scalars['ID'];\n  /** The result of the composition. */\n  result?: Maybe<CompositionResult>;\n  status: CheckWorkflowTaskStatus;\n  workflow: CheckWorkflow;\n};\n\n/** The composition config exposed to the gateway */\nexport type CompositionConfig = {\n  __typename?: 'CompositionConfig';\n  /**\n   * List of GCS links for implementing services that comprise a composed graph. Is empty if tag/inaccessible is enabled.\n   * @deprecated Soon we will stop writing to GCS locations\n   */\n  implementingServiceLocations: Array<ImplementingServiceLocation>;\n  /** Hash of the composed schema */\n  schemaHash: Scalars['String'];\n};\n\n/** Metadata about the result of composition run in the cloud */\nexport type CompositionPublishResult = CompositionResult & {\n  __typename?: 'CompositionPublishResult';\n  /** The produced composition config. Will be null if there are any errors */\n  compositionConfig?: Maybe<CompositionConfig>;\n  /**\n   * Supergraph SDL generated by composition (this is not the CSDL, that is a deprecated format).\n   * @deprecated Use supergraphSdl instead\n   */\n  csdl?: Maybe<Scalars['GraphQLDocument']>;\n  /**\n   * List of errors during composition. Errors mean that Apollo was unable to compose the\n   * graph's implementing services into a GraphQL schema. This partial schema should not be\n   * published to the implementing service if there were any errors encountered\n   */\n  errors: Array<SchemaCompositionError>;\n  /** ID that points to the results of this composition. */\n  graphCompositionID: Scalars['ID'];\n  /** List of subgraphs that are included in this composition. */\n  subgraphConfigs: Array<SubgraphConfig>;\n  /** Supergraph SDL generated by composition. */\n  supergraphSdl?: Maybe<Scalars['GraphQLDocument']>;\n  /** Whether the gateway link was updated. */\n  updatedGateway: Scalars['Boolean'];\n  webhookNotificationBody?: Maybe<Scalars['String']>;\n};\n\n/** Result of a composition, either as the result of a composition validation or a publish. */\nexport type CompositionResult = {\n  /**\n   * Supergraph SDL generated by composition (this is not the CSDL, that is a deprecated format).\n   * @deprecated Use supergraphSdl instead\n   */\n  csdl?: Maybe<Scalars['GraphQLDocument']>;\n  /**\n   * List of errors during composition. Errors mean that Apollo was unable to compose the\n   * graph's implementing services into a GraphQL schema. This partial schema should not be\n   * published to the implementing service if there were any errors encountered\n   */\n  errors: Array<SchemaCompositionError>;\n  /** ID that points to the results of this composition. */\n  graphCompositionID: Scalars['ID'];\n  /** List of subgraphs that are included in this composition. */\n  subgraphConfigs: Array<SubgraphConfig>;\n  /** Supergraph SDL generated by composition. */\n  supergraphSdl?: Maybe<Scalars['GraphQLDocument']>;\n};\n\nexport type CompositionStatusSubscription = ChannelSubscription & {\n  __typename?: 'CompositionStatusSubscription';\n  channels: Array<Channel>;\n  createdAt: Scalars['Timestamp'];\n  enabled: Scalars['Boolean'];\n  id: Scalars['ID'];\n  lastUpdatedAt: Scalars['Timestamp'];\n  variant?: Maybe<Scalars['String']>;\n};\n\n/** The composition config exposed to the gateway */\nexport type CompositionValidationDetails = {\n  __typename?: 'CompositionValidationDetails';\n  /** List of implementing service partial schemas that comprised the graph composed during validation */\n  implementingServices: Array<FederatedImplementingServicePartialSchema>;\n  /** Hash of the composed schema */\n  schemaHash?: Maybe<Scalars['String']>;\n};\n\n/** Metadata about the result of compositions validation run in the cloud */\nexport type CompositionValidationResult = CompositionResult & {\n  __typename?: 'CompositionValidationResult';\n  /** Describes whether composition succeeded. */\n  compositionSuccess: Scalars['Boolean'];\n  /**\n   * Akin to a composition config, represents the partial schemas and implementing services that were used\n   * in running composition. Will be null if any errors are encountered. Also may contain a schema hash if\n   * one could be computed, which can be used for schema validation.\n   */\n  compositionValidationDetails?: Maybe<CompositionValidationDetails>;\n  /**\n   * Supergraph SDL generated by composition (this is not the CSDL, that is a deprecated format).\n   * @deprecated Use supergraphSdl instead\n   */\n  csdl?: Maybe<Scalars['GraphQLDocument']>;\n  /**\n   * List of errors during composition. Errors mean that Apollo was unable to compose the\n   * graph's implementing services into a GraphQL schema. This partial schema should not be\n   * published to the implementing service if there were any errors encountered\n   */\n  errors: Array<SchemaCompositionError>;\n  /** ID that points to the results of this composition. */\n  graphCompositionID: Scalars['ID'];\n  /** The implementing service that was responsible for triggering the validation */\n  proposedImplementingService: FederatedImplementingServicePartialSchema;\n  /** List of subgraphs that are included in this composition. */\n  subgraphConfigs: Array<SubgraphConfig>;\n  /** Supergraph SDL generated by composition. */\n  supergraphSdl?: Maybe<Scalars['GraphQLDocument']>;\n  /** If created as part of a check workflow, the associated workflow task. */\n  workflowTask?: Maybe<CompositionCheckTask>;\n};\n\nexport enum ContractVariantFailedStep {\n  AddDirectiveDefinitionsIfNotPresent = 'ADD_DIRECTIVE_DEFINITIONS_IF_NOT_PRESENT',\n  DirectiveDefinitionLocationAugmenting = 'DIRECTIVE_DEFINITION_LOCATION_AUGMENTING',\n  EmptyObjectAndInterfaceMasking = 'EMPTY_OBJECT_AND_INTERFACE_MASKING',\n  EmptyUnionMasking = 'EMPTY_UNION_MASKING',\n  InputValidation = 'INPUT_VALIDATION',\n  Parsing = 'PARSING',\n  ParsingTagDirectives = 'PARSING_TAG_DIRECTIVES',\n  PartialInterfaceMasking = 'PARTIAL_INTERFACE_MASKING',\n  SchemaRetrieval = 'SCHEMA_RETRIEVAL',\n  TagInheriting = 'TAG_INHERITING',\n  TagMatching = 'TAG_MATCHING',\n  ToApiSchema = 'TO_API_SCHEMA',\n  ToFilterSchema = 'TO_FILTER_SCHEMA',\n  Unknown = 'UNKNOWN',\n  VersionCheck = 'VERSION_CHECK'\n}\n\nexport type ContractVariantPreviewErrors = {\n  __typename?: 'ContractVariantPreviewErrors';\n  errorMessages: Array<Scalars['String']>;\n  failedStep: ContractVariantFailedStep;\n};\n\nexport type ContractVariantPreviewResult = ContractVariantPreviewErrors | ContractVariantPreviewSuccess;\n\nexport type ContractVariantPreviewSuccess = {\n  __typename?: 'ContractVariantPreviewSuccess';\n  allTags: Array<Scalars['String']>;\n  baseApiSchema: Scalars['String'];\n  baseCoreSchema: Scalars['String'];\n  contractApiSchema: Scalars['String'];\n  contractCoreSchema: Scalars['String'];\n};\n\nexport type ContractVariantUpsertErrors = {\n  __typename?: 'ContractVariantUpsertErrors';\n  errorMessages: Array<Scalars['String']>;\n};\n\nexport type ContractVariantUpsertResult = ContractVariantUpsertErrors | ContractVariantUpsertSuccess;\n\nexport type ContractVariantUpsertSuccess = {\n  __typename?: 'ContractVariantUpsertSuccess';\n  contractVariant: GraphVariant;\n};\n\nexport type CoreSchema = {\n  __typename?: 'CoreSchema';\n  apiDocument: Scalars['GraphQLDocument'];\n  coreDocument: Scalars['GraphQLDocument'];\n  coreHash: Scalars['String'];\n};\n\nexport type CreateOperationCollectionResult = OperationCollection | ValidationError;\n\nexport type CronExecution = {\n  __typename?: 'CronExecution';\n  completedAt?: Maybe<Scalars['Timestamp']>;\n  failure?: Maybe<Scalars['String']>;\n  id: Scalars['ID'];\n  job: CronJob;\n  resolvedAt?: Maybe<Scalars['Timestamp']>;\n  resolvedBy?: Maybe<Actor>;\n  schedule: Scalars['String'];\n  startedAt: Scalars['Timestamp'];\n};\n\nexport type CronJob = {\n  __typename?: 'CronJob';\n  group: Scalars['String'];\n  name: Scalars['String'];\n  recentExecutions: Array<CronExecution>;\n};\n\n\nexport type CronJobRecentExecutionsArgs = {\n  n?: InputMaybe<Scalars['Int']>;\n};\n\nexport enum DatadogApiRegion {\n  Eu = 'EU',\n  Eu1 = 'EU1',\n  Us = 'US',\n  Us1 = 'US1',\n  Us1Fed = 'US1FED',\n  Us3 = 'US3',\n  Us5 = 'US5'\n}\n\nexport type DatadogMetricsConfig = {\n  __typename?: 'DatadogMetricsConfig';\n  apiKey: Scalars['String'];\n  apiRegion: DatadogApiRegion;\n  enabled: Scalars['Boolean'];\n  legacyMetricNames: Scalars['Boolean'];\n};\n\nexport type DeleteOperationCollectionSuccess = {\n  __typename?: 'DeleteOperationCollectionSuccess';\n  variants: Array<GraphVariant>;\n};\n\nexport type DeleteSchemaTagResult = {\n  __typename?: 'DeleteSchemaTagResult';\n  deleted: Scalars['Boolean'];\n  deletedSubscriptionIDs: Array<Scalars['ID']>;\n};\n\nexport enum DeletionTargetType {\n  Account = 'ACCOUNT',\n  User = 'USER'\n}\n\n/** Support for a single directive on a graph variant */\nexport type DirectiveSupportStatus = {\n  __typename?: 'DirectiveSupportStatus';\n  /** whether the directive is supported on the current graph variant */\n  enabled: Scalars['Boolean'];\n  /** name of the directive */\n  name: Scalars['String'];\n};\n\nexport type DurationHistogram = {\n  __typename?: 'DurationHistogram';\n  averageDurationMs?: Maybe<Scalars['Float']>;\n  buckets: Array<DurationHistogramBucket>;\n  durationMs?: Maybe<Scalars['Float']>;\n  /** Counts per durationBucket, where sequences of zeroes are replaced with the negative of their size */\n  sparseBuckets: Array<Scalars['Long']>;\n  totalCount: Scalars['Long'];\n  totalDurationMs: Scalars['Float'];\n};\n\n\nexport type DurationHistogramDurationMsArgs = {\n  percentile: Scalars['Float'];\n};\n\nexport type DurationHistogramBucket = {\n  __typename?: 'DurationHistogramBucket';\n  count: Scalars['Long'];\n  index: Scalars['Int'];\n  rangeBeginMs: Scalars['Float'];\n  rangeEndMs: Scalars['Float'];\n};\n\nexport type EdgeServerInfo = {\n  /** A randomly generated UUID, immutable for the lifetime of the edge server runtime. */\n  bootId: Scalars['String'];\n  /** A unique identifier for the executable GraphQL served by the edge server. length must be <= 64 characters. */\n  executableSchemaId: Scalars['String'];\n  /** The graph variant, defaults to 'current' */\n  graphVariant?: Scalars['String'];\n  /** The version of the edge server reporting agent, e.g. apollo-server-2.8, graphql-java-3.1, etc. length must be <= 256 characters. */\n  libraryVersion?: InputMaybe<Scalars['String']>;\n  /** The infra environment in which this edge server is running, e.g. localhost, Kubernetes, AWS Lambda, Google CloudRun, AWS ECS, etc. length must be <= 256 characters. */\n  platform?: InputMaybe<Scalars['String']>;\n  /** The runtime in which the edge server is running, e.g. node 12.03, zulu8.46.0.19-ca-jdk8.0.252-macosx_x64, etc. length must be <= 256 characters. */\n  runtimeVersion?: InputMaybe<Scalars['String']>;\n  /** If available, an identifier for the edge server instance, such that when restarting this instance it will have the same serverId, with a different bootId. For example, in Kubernetes this might be the pod name. Length must be <= 256 characters. */\n  serverId?: InputMaybe<Scalars['String']>;\n  /** An identifier used to distinguish the version (from the user's perspective) of the edge server's code itself. For instance, the git sha of the server's repository or the docker sha of the associated image this server runs with. Length must be <= 256 characters. */\n  userVersion?: InputMaybe<Scalars['String']>;\n};\n\n/** Columns of EdgeServerInfos. */\nexport enum EdgeServerInfosColumn {\n  BootId = 'BOOT_ID',\n  ExecutableSchemaId = 'EXECUTABLE_SCHEMA_ID',\n  LibraryVersion = 'LIBRARY_VERSION',\n  Platform = 'PLATFORM',\n  RuntimeVersion = 'RUNTIME_VERSION',\n  SchemaTag = 'SCHEMA_TAG',\n  ServerId = 'SERVER_ID',\n  ServiceId = 'SERVICE_ID',\n  Timestamp = 'TIMESTAMP',\n  UserVersion = 'USER_VERSION'\n}\n\nexport type EdgeServerInfosDimensions = {\n  __typename?: 'EdgeServerInfosDimensions';\n  bootId?: Maybe<Scalars['ID']>;\n  executableSchemaId?: Maybe<Scalars['ID']>;\n  libraryVersion?: Maybe<Scalars['String']>;\n  platform?: Maybe<Scalars['String']>;\n  runtimeVersion?: Maybe<Scalars['String']>;\n  schemaTag?: Maybe<Scalars['String']>;\n  serverId?: Maybe<Scalars['ID']>;\n  serviceId?: Maybe<Scalars['ID']>;\n  userVersion?: Maybe<Scalars['String']>;\n};\n\n/** Filter for data in EdgeServerInfos. Fields with dimension names represent equality checks. All fields are implicitly ANDed together. */\nexport type EdgeServerInfosFilter = {\n  and?: InputMaybe<Array<EdgeServerInfosFilter>>;\n  /** Selects rows whose bootId dimension equals the given value if not null. To query for the null value, use {in: {bootId: [null]}} instead. */\n  bootId?: InputMaybe<Scalars['ID']>;\n  /** Selects rows whose executableSchemaId dimension equals the given value if not null. To query for the null value, use {in: {executableSchemaId: [null]}} instead. */\n  executableSchemaId?: InputMaybe<Scalars['ID']>;\n  in?: InputMaybe<EdgeServerInfosFilterIn>;\n  /** Selects rows whose libraryVersion dimension equals the given value if not null. To query for the null value, use {in: {libraryVersion: [null]}} instead. */\n  libraryVersion?: InputMaybe<Scalars['String']>;\n  not?: InputMaybe<EdgeServerInfosFilter>;\n  or?: InputMaybe<Array<EdgeServerInfosFilter>>;\n  /** Selects rows whose platform dimension equals the given value if not null. To query for the null value, use {in: {platform: [null]}} instead. */\n  platform?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose runtimeVersion dimension equals the given value if not null. To query for the null value, use {in: {runtimeVersion: [null]}} instead. */\n  runtimeVersion?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose schemaTag dimension equals the given value if not null. To query for the null value, use {in: {schemaTag: [null]}} instead. */\n  schemaTag?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose serverId dimension equals the given value if not null. To query for the null value, use {in: {serverId: [null]}} instead. */\n  serverId?: InputMaybe<Scalars['ID']>;\n  /** Selects rows whose serviceId dimension equals the given value if not null. To query for the null value, use {in: {serviceId: [null]}} instead. */\n  serviceId?: InputMaybe<Scalars['ID']>;\n  /** Selects rows whose userVersion dimension equals the given value if not null. To query for the null value, use {in: {userVersion: [null]}} instead. */\n  userVersion?: InputMaybe<Scalars['String']>;\n};\n\n/** Filter for data in EdgeServerInfos. Fields match if the corresponding dimension's value is in the given list. All fields are implicitly ANDed together. */\nexport type EdgeServerInfosFilterIn = {\n  /** Selects rows whose bootId dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  bootId?: InputMaybe<Array<InputMaybe<Scalars['ID']>>>;\n  /** Selects rows whose executableSchemaId dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  executableSchemaId?: InputMaybe<Array<InputMaybe<Scalars['ID']>>>;\n  /** Selects rows whose libraryVersion dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  libraryVersion?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose platform dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  platform?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose runtimeVersion dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  runtimeVersion?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose schemaTag dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  schemaTag?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose serverId dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  serverId?: InputMaybe<Array<InputMaybe<Scalars['ID']>>>;\n  /** Selects rows whose serviceId dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  serviceId?: InputMaybe<Array<InputMaybe<Scalars['ID']>>>;\n  /** Selects rows whose userVersion dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  userVersion?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n};\n\nexport type EdgeServerInfosOrderBySpec = {\n  column: EdgeServerInfosColumn;\n  direction: Ordering;\n};\n\nexport type EdgeServerInfosRecord = {\n  __typename?: 'EdgeServerInfosRecord';\n  /** Dimensions of EdgeServerInfos that can be grouped by. */\n  groupBy: EdgeServerInfosDimensions;\n  /** Starting segment timestamp. */\n  timestamp: Scalars['Timestamp'];\n};\n\nexport enum EmailCategory {\n  Educational = 'EDUCATIONAL'\n}\n\nexport type EmailPreferences = {\n  __typename?: 'EmailPreferences';\n  email: Scalars['String'];\n  subscriptions: Array<EmailCategory>;\n  unsubscribedFromAll: Scalars['Boolean'];\n};\n\nexport type Error = {\n  message: Scalars['String'];\n};\n\n/** Columns of ErrorStats. */\nexport enum ErrorStatsColumn {\n  AccountId = 'ACCOUNT_ID',\n  ClientName = 'CLIENT_NAME',\n  ClientVersion = 'CLIENT_VERSION',\n  ErrorsCount = 'ERRORS_COUNT',\n  Path = 'PATH',\n  QueryId = 'QUERY_ID',\n  QueryName = 'QUERY_NAME',\n  RequestsWithErrorsCount = 'REQUESTS_WITH_ERRORS_COUNT',\n  SchemaHash = 'SCHEMA_HASH',\n  SchemaTag = 'SCHEMA_TAG',\n  ServiceId = 'SERVICE_ID',\n  Timestamp = 'TIMESTAMP'\n}\n\nexport type ErrorStatsDimensions = {\n  __typename?: 'ErrorStatsDimensions';\n  accountId?: Maybe<Scalars['ID']>;\n  clientName?: Maybe<Scalars['String']>;\n  clientVersion?: Maybe<Scalars['String']>;\n  path?: Maybe<Scalars['String']>;\n  queryId?: Maybe<Scalars['ID']>;\n  queryName?: Maybe<Scalars['String']>;\n  schemaHash?: Maybe<Scalars['String']>;\n  schemaTag?: Maybe<Scalars['String']>;\n  serviceId?: Maybe<Scalars['ID']>;\n};\n\n/** Filter for data in ErrorStats. Fields with dimension names represent equality checks. All fields are implicitly ANDed together. */\nexport type ErrorStatsFilter = {\n  /** Selects rows whose accountId dimension equals the given value if not null. To query for the null value, use {in: {accountId: [null]}} instead. */\n  accountId?: InputMaybe<Scalars['ID']>;\n  and?: InputMaybe<Array<ErrorStatsFilter>>;\n  /** Selects rows whose clientName dimension equals the given value if not null. To query for the null value, use {in: {clientName: [null]}} instead. */\n  clientName?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose clientVersion dimension equals the given value if not null. To query for the null value, use {in: {clientVersion: [null]}} instead. */\n  clientVersion?: InputMaybe<Scalars['String']>;\n  in?: InputMaybe<ErrorStatsFilterIn>;\n  not?: InputMaybe<ErrorStatsFilter>;\n  or?: InputMaybe<Array<ErrorStatsFilter>>;\n  /** Selects rows whose path dimension equals the given value if not null. To query for the null value, use {in: {path: [null]}} instead. */\n  path?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose queryId dimension equals the given value if not null. To query for the null value, use {in: {queryId: [null]}} instead. */\n  queryId?: InputMaybe<Scalars['ID']>;\n  /** Selects rows whose queryName dimension equals the given value if not null. To query for the null value, use {in: {queryName: [null]}} instead. */\n  queryName?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose schemaHash dimension equals the given value if not null. To query for the null value, use {in: {schemaHash: [null]}} instead. */\n  schemaHash?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose schemaTag dimension equals the given value if not null. To query for the null value, use {in: {schemaTag: [null]}} instead. */\n  schemaTag?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose serviceId dimension equals the given value if not null. To query for the null value, use {in: {serviceId: [null]}} instead. */\n  serviceId?: InputMaybe<Scalars['ID']>;\n};\n\n/** Filter for data in ErrorStats. Fields match if the corresponding dimension's value is in the given list. All fields are implicitly ANDed together. */\nexport type ErrorStatsFilterIn = {\n  /** Selects rows whose accountId dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  accountId?: InputMaybe<Array<InputMaybe<Scalars['ID']>>>;\n  /** Selects rows whose clientName dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  clientName?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose clientVersion dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  clientVersion?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose path dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  path?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose queryId dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  queryId?: InputMaybe<Array<InputMaybe<Scalars['ID']>>>;\n  /** Selects rows whose queryName dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  queryName?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose schemaHash dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  schemaHash?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose schemaTag dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  schemaTag?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose serviceId dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  serviceId?: InputMaybe<Array<InputMaybe<Scalars['ID']>>>;\n};\n\nexport type ErrorStatsMetrics = {\n  __typename?: 'ErrorStatsMetrics';\n  errorsCount: Scalars['Long'];\n  requestsWithErrorsCount: Scalars['Long'];\n};\n\nexport type ErrorStatsOrderBySpec = {\n  column: ErrorStatsColumn;\n  direction: Ordering;\n};\n\nexport type ErrorStatsRecord = {\n  __typename?: 'ErrorStatsRecord';\n  /** Dimensions of ErrorStats that can be grouped by. */\n  groupBy: ErrorStatsDimensions;\n  /** Metrics of ErrorStats that can be aggregated over. */\n  metrics: ErrorStatsMetrics;\n  /** Starting segment timestamp. */\n  timestamp: Scalars['Timestamp'];\n};\n\n/**  Input parameters for run explorer operation event. */\nexport enum EventEnum {\n  ClickCheckList = 'CLICK_CHECK_LIST',\n  ClickGoToGraphSettings = 'CLICK_GO_TO_GRAPH_SETTINGS',\n  RunExplorerOperation = 'RUN_EXPLORER_OPERATION'\n}\n\n/** Excluded operation for a graph. */\nexport type ExcludedOperation = {\n  __typename?: 'ExcludedOperation';\n  /** Operation ID to exclude from schema check. */\n  ID: Scalars['ID'];\n};\n\n/** Option to filter by operation ID. */\nexport type ExcludedOperationInput = {\n  /** Operation ID to exclude from schema check. */\n  ID: Scalars['ID'];\n};\n\nexport type FeatureIntros = {\n  __typename?: 'FeatureIntros';\n  devGraph: Scalars['Boolean'];\n  federatedGraph: Scalars['Boolean'];\n  freeConsumerSeats: Scalars['Boolean'];\n};\n\n/** Feature Intros Input Type */\nexport type FeatureIntrosInput = {\n  devGraph?: InputMaybe<Scalars['Boolean']>;\n  federatedGraph?: InputMaybe<Scalars['Boolean']>;\n  freeConsumerSeats?: InputMaybe<Scalars['Boolean']>;\n};\n\nexport type FederatedImplementingService = {\n  __typename?: 'FederatedImplementingService';\n  /**\n   * An implementing service could have multiple inactive partial schemas that were previously uploaded\n   * activePartialSchema returns the one that is designated to be used for composition for a given graph-variant\n   */\n  activePartialSchema: PartialSchema;\n  /** Timestamp of when this implementing service was created */\n  createdAt: Scalars['Timestamp'];\n  /**\n   * Identifies which graph this implementing service belongs to.\n   * Formerly known as \"service_id\"\n   */\n  graphID: Scalars['String'];\n  /**\n   * Specifies which variant of a graph this implementing service belongs to\".\n   * Formerly known as \"tag\"\n   */\n  graphVariant: Scalars['String'];\n  /** Name of the implementing service */\n  name: Scalars['String'];\n  /**\n   * A way to capture some customer-specific way of tracking which version / edition\n   * of the ImplementingService this is. Typically a Git SHA or docker image ID.\n   */\n  revision: Scalars['String'];\n  /** Timestamp for when this implementing service was updated */\n  updatedAt: Scalars['Timestamp'];\n  /** URL of the graphql endpoint of the implementing service */\n  url?: Maybe<Scalars['String']>;\n};\n\n/** A minimal representation of a federated implementing service, using only a name and partial schema SDL */\nexport type FederatedImplementingServicePartialSchema = {\n  __typename?: 'FederatedImplementingServicePartialSchema';\n  /** The name of the implementing service */\n  name: Scalars['String'];\n  /** The partial schema of the implementing service */\n  sdl: Scalars['String'];\n};\n\n/** List of federated implementing services that compose a graph */\nexport type FederatedImplementingServices = {\n  __typename?: 'FederatedImplementingServices';\n  services: Array<FederatedImplementingService>;\n};\n\nexport type FieldChangeSummaryCounts = {\n  __typename?: 'FieldChangeSummaryCounts';\n  /** Number of changes that are additions of fields to object and interface types. */\n  additions: Scalars['Int'];\n  /**\n   * Number of changes that are field edits. This includes fields changing type and any field\n   * deprecation and description changes, but also includes any argument changes and any input object\n   * field changes.\n   */\n  edits: Scalars['Int'];\n  /** Number of changes that are removals of fields from object and interface types. */\n  removals: Scalars['Int'];\n};\n\n/** Columns of FieldLatencies. */\nexport enum FieldLatenciesColumn {\n  FieldHistogram = 'FIELD_HISTOGRAM',\n  FieldName = 'FIELD_NAME',\n  ParentType = 'PARENT_TYPE',\n  SchemaHash = 'SCHEMA_HASH',\n  SchemaTag = 'SCHEMA_TAG',\n  ServiceId = 'SERVICE_ID',\n  Timestamp = 'TIMESTAMP'\n}\n\nexport type FieldLatenciesDimensions = {\n  __typename?: 'FieldLatenciesDimensions';\n  field?: Maybe<Scalars['String']>;\n  fieldName?: Maybe<Scalars['String']>;\n  parentType?: Maybe<Scalars['String']>;\n  schemaHash?: Maybe<Scalars['String']>;\n  schemaTag?: Maybe<Scalars['String']>;\n  serviceId?: Maybe<Scalars['ID']>;\n};\n\n/** Filter for data in FieldLatencies. Fields with dimension names represent equality checks. All fields are implicitly ANDed together. */\nexport type FieldLatenciesFilter = {\n  and?: InputMaybe<Array<FieldLatenciesFilter>>;\n  /** Selects rows whose fieldName dimension equals the given value if not null. To query for the null value, use {in: {fieldName: [null]}} instead. */\n  fieldName?: InputMaybe<Scalars['String']>;\n  in?: InputMaybe<FieldLatenciesFilterIn>;\n  not?: InputMaybe<FieldLatenciesFilter>;\n  or?: InputMaybe<Array<FieldLatenciesFilter>>;\n  /** Selects rows whose parentType dimension equals the given value if not null. To query for the null value, use {in: {parentType: [null]}} instead. */\n  parentType?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose schemaHash dimension equals the given value if not null. To query for the null value, use {in: {schemaHash: [null]}} instead. */\n  schemaHash?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose schemaTag dimension equals the given value if not null. To query for the null value, use {in: {schemaTag: [null]}} instead. */\n  schemaTag?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose serviceId dimension equals the given value if not null. To query for the null value, use {in: {serviceId: [null]}} instead. */\n  serviceId?: InputMaybe<Scalars['ID']>;\n};\n\n/** Filter for data in FieldLatencies. Fields match if the corresponding dimension's value is in the given list. All fields are implicitly ANDed together. */\nexport type FieldLatenciesFilterIn = {\n  /** Selects rows whose fieldName dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  fieldName?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose parentType dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  parentType?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose schemaHash dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  schemaHash?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose schemaTag dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  schemaTag?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose serviceId dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  serviceId?: InputMaybe<Array<InputMaybe<Scalars['ID']>>>;\n};\n\nexport type FieldLatenciesMetrics = {\n  __typename?: 'FieldLatenciesMetrics';\n  fieldHistogram: DurationHistogram;\n};\n\nexport type FieldLatenciesOrderBySpec = {\n  column: FieldLatenciesColumn;\n  direction: Ordering;\n};\n\nexport type FieldLatenciesRecord = {\n  __typename?: 'FieldLatenciesRecord';\n  /** Dimensions of FieldLatencies that can be grouped by. */\n  groupBy: FieldLatenciesDimensions;\n  /** Metrics of FieldLatencies that can be aggregated over. */\n  metrics: FieldLatenciesMetrics;\n  /** Starting segment timestamp. */\n  timestamp: Scalars['Timestamp'];\n};\n\n/** Columns of FieldUsage. */\nexport enum FieldUsageColumn {\n  ClientName = 'CLIENT_NAME',\n  ClientVersion = 'CLIENT_VERSION',\n  EstimatedExecutionCount = 'ESTIMATED_EXECUTION_COUNT',\n  ExecutionCount = 'EXECUTION_COUNT',\n  Field = 'FIELD',\n  FieldName = 'FIELD_NAME',\n  ParentType = 'PARENT_TYPE',\n  QueryId = 'QUERY_ID',\n  QueryName = 'QUERY_NAME',\n  ReferencingOperationCount = 'REFERENCING_OPERATION_COUNT',\n  SchemaHash = 'SCHEMA_HASH',\n  SchemaTag = 'SCHEMA_TAG',\n  ServiceId = 'SERVICE_ID',\n  Timestamp = 'TIMESTAMP'\n}\n\nexport type FieldUsageDimensions = {\n  __typename?: 'FieldUsageDimensions';\n  clientName?: Maybe<Scalars['String']>;\n  clientVersion?: Maybe<Scalars['String']>;\n  field?: Maybe<Scalars['String']>;\n  fieldName?: Maybe<Scalars['String']>;\n  parentType?: Maybe<Scalars['String']>;\n  queryId?: Maybe<Scalars['ID']>;\n  queryName?: Maybe<Scalars['String']>;\n  schemaHash?: Maybe<Scalars['String']>;\n  schemaTag?: Maybe<Scalars['String']>;\n  serviceId?: Maybe<Scalars['ID']>;\n};\n\n/** Filter for data in FieldUsage. Fields with dimension names represent equality checks. All fields are implicitly ANDed together. */\nexport type FieldUsageFilter = {\n  and?: InputMaybe<Array<FieldUsageFilter>>;\n  /** Selects rows whose clientName dimension equals the given value if not null. To query for the null value, use {in: {clientName: [null]}} instead. */\n  clientName?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose clientVersion dimension equals the given value if not null. To query for the null value, use {in: {clientVersion: [null]}} instead. */\n  clientVersion?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose field dimension equals the given value if not null. To query for the null value, use {in: {field: [null]}} instead. */\n  field?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose fieldName dimension equals the given value if not null. To query for the null value, use {in: {fieldName: [null]}} instead. */\n  fieldName?: InputMaybe<Scalars['String']>;\n  in?: InputMaybe<FieldUsageFilterIn>;\n  not?: InputMaybe<FieldUsageFilter>;\n  or?: InputMaybe<Array<FieldUsageFilter>>;\n  /** Selects rows whose parentType dimension equals the given value if not null. To query for the null value, use {in: {parentType: [null]}} instead. */\n  parentType?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose queryId dimension equals the given value if not null. To query for the null value, use {in: {queryId: [null]}} instead. */\n  queryId?: InputMaybe<Scalars['ID']>;\n  /** Selects rows whose queryName dimension equals the given value if not null. To query for the null value, use {in: {queryName: [null]}} instead. */\n  queryName?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose schemaHash dimension equals the given value if not null. To query for the null value, use {in: {schemaHash: [null]}} instead. */\n  schemaHash?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose schemaTag dimension equals the given value if not null. To query for the null value, use {in: {schemaTag: [null]}} instead. */\n  schemaTag?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose serviceId dimension equals the given value if not null. To query for the null value, use {in: {serviceId: [null]}} instead. */\n  serviceId?: InputMaybe<Scalars['ID']>;\n};\n\n/** Filter for data in FieldUsage. Fields match if the corresponding dimension's value is in the given list. All fields are implicitly ANDed together. */\nexport type FieldUsageFilterIn = {\n  /** Selects rows whose clientName dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  clientName?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose clientVersion dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  clientVersion?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose field dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  field?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose fieldName dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  fieldName?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose parentType dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  parentType?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose queryId dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  queryId?: InputMaybe<Array<InputMaybe<Scalars['ID']>>>;\n  /** Selects rows whose queryName dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  queryName?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose schemaHash dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  schemaHash?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose schemaTag dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  schemaTag?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose serviceId dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  serviceId?: InputMaybe<Array<InputMaybe<Scalars['ID']>>>;\n};\n\nexport type FieldUsageMetrics = {\n  __typename?: 'FieldUsageMetrics';\n  estimatedExecutionCount: Scalars['Long'];\n  executionCount: Scalars['Long'];\n  referencingOperationCount: Scalars['Long'];\n};\n\nexport type FieldUsageOrderBySpec = {\n  column: FieldUsageColumn;\n  direction: Ordering;\n};\n\nexport type FieldUsageRecord = {\n  __typename?: 'FieldUsageRecord';\n  /** Dimensions of FieldUsage that can be grouped by. */\n  groupBy: FieldUsageDimensions;\n  /** Metrics of FieldUsage that can be aggregated over. */\n  metrics: FieldUsageMetrics;\n  /** Starting segment timestamp. */\n  timestamp: Scalars['Timestamp'];\n};\n\nexport type FilterBuildInput = {\n  __typename?: 'FilterBuildInput';\n  filterConfig: FilterConfig;\n  schemaHash: Scalars['String'];\n};\n\nexport type FilterConfig = {\n  __typename?: 'FilterConfig';\n  exclude: Array<Scalars['String']>;\n  include: Array<Scalars['String']>;\n};\n\nexport type FilterConfigInput = {\n  exclude: Array<Scalars['String']>;\n  include: Array<Scalars['String']>;\n};\n\nexport type GitContext = {\n  __typename?: 'GitContext';\n  branch?: Maybe<Scalars['String']>;\n  commit?: Maybe<Scalars['ID']>;\n  commitUrl?: Maybe<Scalars['String']>;\n  committer?: Maybe<Scalars['String']>;\n  message?: Maybe<Scalars['String']>;\n  remoteHost?: Maybe<GitRemoteHost>;\n  remoteUrl?: Maybe<Scalars['String']>;\n};\n\n/** This is stored with a schema when it is uploaded */\nexport type GitContextInput = {\n  branch?: InputMaybe<Scalars['String']>;\n  commit?: InputMaybe<Scalars['ID']>;\n  committer?: InputMaybe<Scalars['String']>;\n  message?: InputMaybe<Scalars['String']>;\n  remoteUrl?: InputMaybe<Scalars['String']>;\n};\n\nexport enum GitRemoteHost {\n  Bitbucket = 'BITBUCKET',\n  Github = 'GITHUB',\n  Gitlab = 'GITLAB'\n}\n\nexport type GlobalExperimentalFeatures = {\n  __typename?: 'GlobalExperimentalFeatures';\n  operationsCollections: Scalars['Boolean'];\n  sandboxesFullRelease: Scalars['Boolean'];\n  sandboxesPreview: Scalars['Boolean'];\n  sandboxesSchemaChecksPage: Scalars['Boolean'];\n  sandboxesSchemaDiffPage: Scalars['Boolean'];\n};\n\nexport type GraphApiKey = ApiKey & {\n  __typename?: 'GraphApiKey';\n  createdAt: Scalars['Timestamp'];\n  createdBy?: Maybe<Identity>;\n  id: Scalars['ID'];\n  keyName?: Maybe<Scalars['String']>;\n  role: UserPermission;\n  token: Scalars['String'];\n};\n\n/** A union of all combinations that can comprise the implementingServices for a Service */\nexport type GraphImplementors = FederatedImplementingServices | NonFederatedImplementingService;\n\n/** A variant of a graph, also called a schema tag in parts of our product. */\nexport type GraphVariant = {\n  __typename?: 'GraphVariant';\n  /** As new schema tags keep getting published, activeSchemaPublish refers to the latest. */\n  activeSchemaPublish?: Maybe<SchemaTag>;\n  /** The version of composition currently in use */\n  compositionVersion: Scalars['String'];\n  /** Filter configuration used to create the contract schema */\n  contractFilterConfig?: Maybe<FilterConfig>;\n  /** Explorer setting for default headers for a graph */\n  defaultHeaders?: Maybe<Scalars['String']>;\n  derivedVariantCount: Scalars['Int'];\n  /** Graph the variant belongs to */\n  graph: Service;\n  /** Graph ID of the variant. Prefer using graph { id } when feasible. */\n  graphId: Scalars['String'];\n  /** Global identifier for the graph variant, in the form `graph@variant`. */\n  id: Scalars['ID'];\n  /** Represents whether this variant is a Contract. */\n  isContract: Scalars['Boolean'];\n  /** Is this variant one of the current user's favorite variants? */\n  isFavoriteOfCurrentUser: Scalars['Boolean'];\n  /** If the variant has a composition */\n  isFederated: Scalars['Boolean'];\n  /** If the variant is protected */\n  isProtected: Scalars['Boolean'];\n  isPublic: Scalars['Boolean'];\n  /** Represents whether this variant should be listed in the public variants directory. This can only be true if the variant is also public. */\n  isPubliclyListed: Scalars['Boolean'];\n  /** Represents whether Apollo has verified the authenticity of this public variant. This can only be true if the variant is also public. */\n  isVerified: Scalars['Boolean'];\n  latestLaunch?: Maybe<Launch>;\n  launch?: Maybe<Launch>;\n  launchHistory: Array<Launch>;\n  links?: Maybe<Array<LinkInfo>>;\n  /** Name of the variant, like `variant`. */\n  name: Scalars['String'];\n  operationCollections: Array<OperationCollection>;\n  /** Which permissions the current user has for interacting with this variant */\n  permissions: GraphVariantPermissions;\n  /** Explorer setting for preflight script to run before the actual GraphQL operations is run. */\n  preflightScript?: Maybe<Scalars['String']>;\n  readme?: Maybe<Readme>;\n  /** Registry stats for this particular graph variant */\n  registryStatsWindow?: Maybe<RegistryStatsWindow>;\n  /** The total number of requests for this variant in the last 24 hours */\n  requestsInLastDay?: Maybe<Scalars['Long']>;\n  /** If the graphql endpoint is set up to accept cookies */\n  sendCookies?: Maybe<Scalars['Boolean']>;\n  sourceVariant?: Maybe<GraphVariant>;\n  /** URL where the graph subscription can be queried. */\n  subscriptionUrl?: Maybe<Scalars['String']>;\n  /** A list of supported directives */\n  supportedDirectives?: Maybe<Array<DirectiveSupportStatus>>;\n  /** URL where the graph can be queried. */\n  url?: Maybe<Scalars['String']>;\n  /** The last instant that usage information (e.g. operation stat, client stats) was reported for this variant */\n  usageLastReportedAt?: Maybe<Scalars['Timestamp']>;\n};\n\n\n/** A variant of a graph, also called a schema tag in parts of our product. */\nexport type GraphVariantLaunchArgs = {\n  id: Scalars['ID'];\n};\n\n\n/** A variant of a graph, also called a schema tag in parts of our product. */\nexport type GraphVariantLaunchHistoryArgs = {\n  limit?: Scalars['Int'];\n};\n\n\n/** A variant of a graph, also called a schema tag in parts of our product. */\nexport type GraphVariantRegistryStatsWindowArgs = {\n  from: Scalars['Timestamp'];\n  resolution?: InputMaybe<Resolution>;\n  to?: InputMaybe<Scalars['Timestamp']>;\n};\n\nexport type GraphVariantLookup = GraphVariant | InvalidRefFormat;\n\n/** Modifies a variant of a graph, also called a schema tag in parts of our product. */\nexport type GraphVariantMutation = {\n  __typename?: 'GraphVariantMutation';\n  addLinkToVariant: GraphVariant;\n  configureComposition?: Maybe<GraphVariant>;\n  /** @deprecated Use configureComposition instead */\n  enableTagAndInaccessible?: Maybe<GraphVariant>;\n  /** Graph ID of the variant */\n  graphId: Scalars['String'];\n  /** Global identifier for the graph variant, in the form `graph@variant`. */\n  id: Scalars['ID'];\n  /** Name of the variant, like `variant`. */\n  name: Scalars['String'];\n  relaunch: RelaunchResult;\n  removeLinkFromVariant: GraphVariant;\n  setIsFavoriteOfCurrentUser: GraphVariant;\n  updateDefaultHeaders?: Maybe<GraphVariant>;\n  updateIsProtected?: Maybe<GraphVariant>;\n  updatePreflightScript?: Maybe<GraphVariant>;\n  updateSendCookies?: Maybe<GraphVariant>;\n  updateSubscriptionURL?: Maybe<GraphVariant>;\n  updateURL?: Maybe<GraphVariant>;\n  updateVariantIsPublic?: Maybe<GraphVariant>;\n  updateVariantIsPubliclyListed?: Maybe<GraphVariant>;\n  updateVariantIsVerified?: Maybe<GraphVariant>;\n  updateVariantReadme?: Maybe<GraphVariant>;\n};\n\n\n/** Modifies a variant of a graph, also called a schema tag in parts of our product. */\nexport type GraphVariantMutationAddLinkToVariantArgs = {\n  title?: InputMaybe<Scalars['String']>;\n  type: LinkInfoType;\n  url: Scalars['String'];\n};\n\n\n/** Modifies a variant of a graph, also called a schema tag in parts of our product. */\nexport type GraphVariantMutationConfigureCompositionArgs = {\n  enableTagAndInaccessible?: InputMaybe<Scalars['Boolean']>;\n  version?: InputMaybe<Scalars['String']>;\n};\n\n\n/** Modifies a variant of a graph, also called a schema tag in parts of our product. */\nexport type GraphVariantMutationEnableTagAndInaccessibleArgs = {\n  enabled: Scalars['Boolean'];\n};\n\n\n/** Modifies a variant of a graph, also called a schema tag in parts of our product. */\nexport type GraphVariantMutationRemoveLinkFromVariantArgs = {\n  linkInfoId: Scalars['ID'];\n};\n\n\n/** Modifies a variant of a graph, also called a schema tag in parts of our product. */\nexport type GraphVariantMutationSetIsFavoriteOfCurrentUserArgs = {\n  favorite: Scalars['Boolean'];\n};\n\n\n/** Modifies a variant of a graph, also called a schema tag in parts of our product. */\nexport type GraphVariantMutationUpdateDefaultHeadersArgs = {\n  defaultHeaders?: InputMaybe<Scalars['String']>;\n};\n\n\n/** Modifies a variant of a graph, also called a schema tag in parts of our product. */\nexport type GraphVariantMutationUpdateIsProtectedArgs = {\n  isProtected: Scalars['Boolean'];\n};\n\n\n/** Modifies a variant of a graph, also called a schema tag in parts of our product. */\nexport type GraphVariantMutationUpdatePreflightScriptArgs = {\n  preflightScript?: InputMaybe<Scalars['String']>;\n};\n\n\n/** Modifies a variant of a graph, also called a schema tag in parts of our product. */\nexport type GraphVariantMutationUpdateSendCookiesArgs = {\n  sendCookies: Scalars['Boolean'];\n};\n\n\n/** Modifies a variant of a graph, also called a schema tag in parts of our product. */\nexport type GraphVariantMutationUpdateSubscriptionUrlArgs = {\n  subscriptionUrl?: InputMaybe<Scalars['String']>;\n};\n\n\n/** Modifies a variant of a graph, also called a schema tag in parts of our product. */\nexport type GraphVariantMutationUpdateUrlArgs = {\n  url?: InputMaybe<Scalars['String']>;\n};\n\n\n/** Modifies a variant of a graph, also called a schema tag in parts of our product. */\nexport type GraphVariantMutationUpdateVariantIsPublicArgs = {\n  isPublic: Scalars['Boolean'];\n};\n\n\n/** Modifies a variant of a graph, also called a schema tag in parts of our product. */\nexport type GraphVariantMutationUpdateVariantIsPubliclyListedArgs = {\n  isPubliclyListed: Scalars['Boolean'];\n};\n\n\n/** Modifies a variant of a graph, also called a schema tag in parts of our product. */\nexport type GraphVariantMutationUpdateVariantIsVerifiedArgs = {\n  isVerified: Scalars['Boolean'];\n};\n\n\n/** Modifies a variant of a graph, also called a schema tag in parts of our product. */\nexport type GraphVariantMutationUpdateVariantReadmeArgs = {\n  readme: Scalars['String'];\n};\n\n/** A map from permission String to boolean that the current user is allowed for the root graph variant */\nexport type GraphVariantPermissions = {\n  __typename?: 'GraphVariantPermissions';\n  canManageBuildConfig: Scalars['Boolean'];\n  canManageExplorerSettings: Scalars['Boolean'];\n  canPushSchemas: Scalars['Boolean'];\n  canQueryBuildConfig: Scalars['Boolean'];\n  /**\n   * Whether the current user can access the schema for this variant. This will be anded with\n   * the ServiceRoles.canQuerySchemas, this will be true when the service schema permission is\n   * false for Services with public variants\n   */\n  canQuerySchemas: Scalars['Boolean'];\n  canUpdateVariantLinkInfo: Scalars['Boolean'];\n  canUpdateVariantReadme: Scalars['Boolean'];\n};\n\nexport enum HttpMethod {\n  Connect = 'CONNECT',\n  Delete = 'DELETE',\n  Get = 'GET',\n  Head = 'HEAD',\n  Options = 'OPTIONS',\n  Patch = 'PATCH',\n  Post = 'POST',\n  Put = 'PUT',\n  Trace = 'TRACE',\n  Unknown = 'UNKNOWN',\n  Unrecognized = 'UNRECOGNIZED'\n}\n\nexport type HistoricQueryParameters = {\n  /** A list of clients to filter out during validation. */\n  excludedClients?: InputMaybe<Array<ClientInfoFilter>>;\n  from?: InputMaybe<Scalars['Timestamp']>;\n  /** A list of operation IDs to filter out during validation. */\n  ignoredOperations?: InputMaybe<Array<Scalars['ID']>>;\n  /**\n   * A list of variants to include in the validation. If no variants are provided\n   * then this defaults to the \"current\" variant along with the base variant. The\n   * base variant indicates the schema that generates diff and marks the metrics that\n   * are checked for broken queries. We union this base variant with the untagged values('',\n   * same as null inside of `in`, and 'current') in this metrics fetch. This strategy\n   * supports users who have not tagged their metrics or schema.\n   */\n  includedVariants?: InputMaybe<Array<Scalars['String']>>;\n  /** Minimum number of requests within the window for a query to be considered. */\n  queryCountThreshold?: InputMaybe<Scalars['Int']>;\n  /**\n   * Number of requests within the window for a query to be considered, relative to\n   * total request count. Expected values are between 0 and 0.05 (minimum 5% of total\n   * request volume)\n   */\n  queryCountThresholdPercentage?: InputMaybe<Scalars['Float']>;\n  to?: InputMaybe<Scalars['Timestamp']>;\n};\n\nexport type Identity = {\n  asActor: Actor;\n  id: Scalars['ID'];\n  name: Scalars['String'];\n};\n\n/** An actor's identity and info about the client they used to perform the action */\nexport type IdentityAndClientInfo = {\n  __typename?: 'IdentityAndClientInfo';\n  /** The clientName given to Apollo Cloud when the actor performed the action */\n  clientName?: Maybe<Scalars['String']>;\n  /** The clientVersion given to Apollo Cloud when the actor performed the action */\n  clientVersion?: Maybe<Scalars['String']>;\n  /** Identity info about the actor */\n  identity?: Maybe<Identity>;\n};\n\nexport type IdentityMutation = ServiceMutation | UserMutation;\n\nexport type IgnoreOperationsInChecksResult = {\n  __typename?: 'IgnoreOperationsInChecksResult';\n  graph: Service;\n};\n\n/** The location of the implementing service config file in storage */\nexport type ImplementingServiceLocation = {\n  __typename?: 'ImplementingServiceLocation';\n  /** The name of the implementing service */\n  name: Scalars['String'];\n  /** The path in storage to access the implementing service config file */\n  path: Scalars['String'];\n};\n\nexport type InternalAdminUser = {\n  __typename?: 'InternalAdminUser';\n  role: InternalMdgAdminRole;\n  userID: Scalars['String'];\n};\n\nexport type InternalIdentity = Identity & {\n  __typename?: 'InternalIdentity';\n  accounts: Array<Account>;\n  asActor: Actor;\n  email?: Maybe<Scalars['String']>;\n  id: Scalars['ID'];\n  name: Scalars['String'];\n};\n\nexport enum InternalMdgAdminRole {\n  InternalMdgReadOnly = 'INTERNAL_MDG_READ_ONLY',\n  InternalMdgSales = 'INTERNAL_MDG_SALES',\n  InternalMdgSuperAdmin = 'INTERNAL_MDG_SUPER_ADMIN',\n  InternalMdgSupport = 'INTERNAL_MDG_SUPPORT'\n}\n\nexport type IntrospectionDirective = {\n  __typename?: 'IntrospectionDirective';\n  args: Array<IntrospectionInputValue>;\n  description?: Maybe<Scalars['String']>;\n  locations: Array<IntrospectionDirectiveLocation>;\n  name: Scalars['String'];\n};\n\nexport type IntrospectionDirectiveInput = {\n  args: Array<IntrospectionInputValueInput>;\n  description?: InputMaybe<Scalars['String']>;\n  isRepeatable?: InputMaybe<Scalars['Boolean']>;\n  locations: Array<IntrospectionDirectiveLocation>;\n  name: Scalars['String'];\n};\n\n/** __DirectiveLocation introspection type */\nexport enum IntrospectionDirectiveLocation {\n  /** Location adjacent to an argument definition. */\n  ArgumentDefinition = 'ARGUMENT_DEFINITION',\n  /** Location adjacent to an enum definition. */\n  Enum = 'ENUM',\n  /** Location adjacent to an enum value definition. */\n  EnumValue = 'ENUM_VALUE',\n  /** Location adjacent to a field. */\n  Field = 'FIELD',\n  /** Location adjacent to a field definition. */\n  FieldDefinition = 'FIELD_DEFINITION',\n  /** Location adjacent to a fragment definition. */\n  FragmentDefinition = 'FRAGMENT_DEFINITION',\n  /** Location adjacent to a fragment spread. */\n  FragmentSpread = 'FRAGMENT_SPREAD',\n  /** Location adjacent to an inline fragment. */\n  InlineFragment = 'INLINE_FRAGMENT',\n  /** Location adjacent to an input object field definition. */\n  InputFieldDefinition = 'INPUT_FIELD_DEFINITION',\n  /** Location adjacent to an input object type definition. */\n  InputObject = 'INPUT_OBJECT',\n  /** Location adjacent to an interface definition. */\n  Interface = 'INTERFACE',\n  /** Location adjacent to a mutation operation. */\n  Mutation = 'MUTATION',\n  /** Location adjacent to an object type definition. */\n  Object = 'OBJECT',\n  /** Location adjacent to a query operation. */\n  Query = 'QUERY',\n  /** Location adjacent to a scalar definition. */\n  Scalar = 'SCALAR',\n  /** Location adjacent to a schema definition. */\n  Schema = 'SCHEMA',\n  /** Location adjacent to a subscription operation. */\n  Subscription = 'SUBSCRIPTION',\n  /** Location adjacent to a union definition. */\n  Union = 'UNION',\n  /** Location adjacent to a variable definition. */\n  VariableDefinition = 'VARIABLE_DEFINITION'\n}\n\n/** Values associated with introspection result for an enum value */\nexport type IntrospectionEnumValue = {\n  __typename?: 'IntrospectionEnumValue';\n  /** @deprecated Use deprecationReason instead */\n  depreactionReason?: Maybe<Scalars['String']>;\n  deprecationReason?: Maybe<Scalars['String']>;\n  description?: Maybe<Scalars['String']>;\n  isDeprecated: Scalars['Boolean'];\n  name: Scalars['String'];\n};\n\n/** __EnumValue introspection type */\nexport type IntrospectionEnumValueInput = {\n  deprecationReason?: InputMaybe<Scalars['String']>;\n  description?: InputMaybe<Scalars['String']>;\n  isDeprecated: Scalars['Boolean'];\n  name: Scalars['String'];\n};\n\n/** Values associated with introspection result for field */\nexport type IntrospectionField = {\n  __typename?: 'IntrospectionField';\n  args: Array<IntrospectionInputValue>;\n  deprecationReason?: Maybe<Scalars['String']>;\n  description?: Maybe<Scalars['String']>;\n  isDeprecated: Scalars['Boolean'];\n  name: Scalars['String'];\n  type: IntrospectionType;\n};\n\n/** __Field introspection type */\nexport type IntrospectionFieldInput = {\n  args: Array<IntrospectionInputValueInput>;\n  deprecationReason?: InputMaybe<Scalars['String']>;\n  description?: InputMaybe<Scalars['String']>;\n  isDeprecated: Scalars['Boolean'];\n  name: Scalars['String'];\n  type: IntrospectionTypeInput;\n};\n\n/** Values associated with introspection result for an input field */\nexport type IntrospectionInputValue = {\n  __typename?: 'IntrospectionInputValue';\n  defaultValue?: Maybe<Scalars['String']>;\n  description?: Maybe<Scalars['String']>;\n  name: Scalars['String'];\n  type: IntrospectionType;\n};\n\n/** __Value introspection type */\nexport type IntrospectionInputValueInput = {\n  defaultValue?: InputMaybe<Scalars['String']>;\n  deprecationReason?: InputMaybe<Scalars['String']>;\n  description?: InputMaybe<Scalars['String']>;\n  isDeprecated?: InputMaybe<Scalars['Boolean']>;\n  name: Scalars['String'];\n  type: IntrospectionTypeInput;\n};\n\nexport type IntrospectionSchema = {\n  __typename?: 'IntrospectionSchema';\n  directives: Array<IntrospectionDirective>;\n  mutationType?: Maybe<IntrospectionType>;\n  queryType: IntrospectionType;\n  subscriptionType?: Maybe<IntrospectionType>;\n  types: Array<IntrospectionType>;\n};\n\n\nexport type IntrospectionSchemaTypesArgs = {\n  filter?: InputMaybe<TypeFilterConfig>;\n};\n\n/** __Schema introspection type */\nexport type IntrospectionSchemaInput = {\n  description?: InputMaybe<Scalars['String']>;\n  directives: Array<IntrospectionDirectiveInput>;\n  mutationType?: InputMaybe<IntrospectionTypeRefInput>;\n  queryType: IntrospectionTypeRefInput;\n  subscriptionType?: InputMaybe<IntrospectionTypeRefInput>;\n  types?: InputMaybe<Array<IntrospectionTypeInput>>;\n};\n\n/** Object containing all possible values for an introspectionType */\nexport type IntrospectionType = {\n  __typename?: 'IntrospectionType';\n  /** the base kind of the type this references, ignoring lists and nullability */\n  baseKind?: Maybe<IntrospectionTypeKind>;\n  description?: Maybe<Scalars['String']>;\n  enumValues?: Maybe<Array<IntrospectionEnumValue>>;\n  fields?: Maybe<Array<IntrospectionField>>;\n  inputFields?: Maybe<Array<IntrospectionInputValue>>;\n  interfaces?: Maybe<Array<IntrospectionType>>;\n  kind?: Maybe<IntrospectionTypeKind>;\n  name?: Maybe<Scalars['String']>;\n  ofType?: Maybe<IntrospectionType>;\n  possibleTypes?: Maybe<Array<IntrospectionType>>;\n  /** printed representation of type, including nested nullability and list ofTypes */\n  printed: Scalars['String'];\n};\n\n\n/** Object containing all possible values for an introspectionType */\nexport type IntrospectionTypeEnumValuesArgs = {\n  includeDeprecated?: InputMaybe<Scalars['Boolean']>;\n};\n\n/** __Type introspection type */\nexport type IntrospectionTypeInput = {\n  description?: InputMaybe<Scalars['String']>;\n  enumValues?: InputMaybe<Array<IntrospectionEnumValueInput>>;\n  fields?: InputMaybe<Array<IntrospectionFieldInput>>;\n  inputFields?: InputMaybe<Array<IntrospectionInputValueInput>>;\n  interfaces?: InputMaybe<Array<IntrospectionTypeInput>>;\n  kind: IntrospectionTypeKind;\n  name?: InputMaybe<Scalars['String']>;\n  ofType?: InputMaybe<IntrospectionTypeInput>;\n  possibleTypes?: InputMaybe<Array<IntrospectionTypeInput>>;\n  specifiedByUrl?: InputMaybe<Scalars['String']>;\n};\n\nexport enum IntrospectionTypeKind {\n  /** Indicates this type is an enum. 'enumValues' is a valid field. */\n  Enum = 'ENUM',\n  /** Indicates this type is an input object. 'inputFields' is a valid field. */\n  InputObject = 'INPUT_OBJECT',\n  /**\n   * Indicates this type is an interface. 'fields' and 'possibleTypes' are valid\n   * fields\n   */\n  Interface = 'INTERFACE',\n  /** Indicates this type is a list. 'ofType' is a valid field. */\n  List = 'LIST',\n  /** Indicates this type is a non-null. 'ofType' is a valid field. */\n  NonNull = 'NON_NULL',\n  /** Indicates this type is an object. 'fields' and 'interfaces' are valid fields. */\n  Object = 'OBJECT',\n  /** Indicates this type is a scalar. */\n  Scalar = 'SCALAR',\n  /** Indicates this type is a union. 'possibleTypes' is a valid field. */\n  Union = 'UNION'\n}\n\n/** Shallow __Type introspection type */\nexport type IntrospectionTypeRefInput = {\n  kind?: InputMaybe<Scalars['String']>;\n  name: Scalars['String'];\n};\n\nexport type InvalidOperation = {\n  __typename?: 'InvalidOperation';\n  errors?: Maybe<Array<OperationValidationError>>;\n  signature: Scalars['ID'];\n};\n\nexport type InvalidRefFormat = Error & {\n  __typename?: 'InvalidRefFormat';\n  message: Scalars['String'];\n};\n\nexport type InvalidTarget = Error & {\n  __typename?: 'InvalidTarget';\n  message: Scalars['String'];\n};\n\nexport type Invoice = {\n  __typename?: 'Invoice';\n  closedAt?: Maybe<Scalars['Timestamp']>;\n  collectionMethod?: Maybe<Scalars['String']>;\n  createdAt: Scalars['Timestamp'];\n  invoiceNumber: Scalars['Int'];\n  state: InvoiceState;\n  totalInCents: Scalars['Int'];\n  updatedAt: Scalars['Timestamp'];\n  uuid: Scalars['ID'];\n};\n\nexport enum InvoiceState {\n  Collected = 'COLLECTED',\n  Failed = 'FAILED',\n  Open = 'OPEN',\n  PastDue = 'PAST_DUE',\n  Unknown = 'UNKNOWN'\n}\n\nexport type Launch = {\n  __typename?: 'Launch';\n  approvedAt?: Maybe<Scalars['Timestamp']>;\n  build?: Maybe<Build>;\n  buildInput: BuildInput;\n  completedAt?: Maybe<Scalars['Timestamp']>;\n  createdAt: Scalars['Timestamp'];\n  downstreamLaunches: Array<Launch>;\n  id: Scalars['ID'];\n  isAvailable?: Maybe<Scalars['Boolean']>;\n  isCompleted?: Maybe<Scalars['Boolean']>;\n  isPublished?: Maybe<Scalars['Boolean']>;\n  isTarget?: Maybe<Scalars['Boolean']>;\n  latestSequenceStep?: Maybe<LaunchSequenceStep>;\n  results: Array<LaunchResult>;\n  schemaTag?: Maybe<SchemaTag>;\n  sequence: Array<LaunchSequenceStep>;\n  shortenedID: Scalars['String'];\n  status: LaunchStatus;\n  subgraphChanges?: Maybe<Array<SubgraphChange>>;\n  supersededAt?: Maybe<Scalars['Timestamp']>;\n  supersededBy?: Maybe<Launch>;\n  upstreamLaunch?: Maybe<Launch>;\n};\n\n/** more result types will be supported in the future */\nexport type LaunchResult = ChangelogLaunchResult;\n\nexport type LaunchSequenceBuildStep = {\n  __typename?: 'LaunchSequenceBuildStep';\n  completedAt?: Maybe<Scalars['Timestamp']>;\n  startedAt?: Maybe<Scalars['Timestamp']>;\n};\n\nexport type LaunchSequenceCheckStep = {\n  __typename?: 'LaunchSequenceCheckStep';\n  completedAt?: Maybe<Scalars['Timestamp']>;\n  startedAt?: Maybe<Scalars['Timestamp']>;\n};\n\nexport type LaunchSequenceCompletedStep = {\n  __typename?: 'LaunchSequenceCompletedStep';\n  completedAt?: Maybe<Scalars['Timestamp']>;\n};\n\nexport type LaunchSequenceInitiatedStep = {\n  __typename?: 'LaunchSequenceInitiatedStep';\n  startedAt?: Maybe<Scalars['Timestamp']>;\n};\n\nexport type LaunchSequencePublishStep = {\n  __typename?: 'LaunchSequencePublishStep';\n  completedAt?: Maybe<Scalars['Timestamp']>;\n  startedAt?: Maybe<Scalars['Timestamp']>;\n};\n\nexport type LaunchSequenceStep = LaunchSequenceBuildStep | LaunchSequenceCheckStep | LaunchSequenceCompletedStep | LaunchSequenceInitiatedStep | LaunchSequencePublishStep | LaunchSequenceSupersededStep;\n\nexport type LaunchSequenceSupersededStep = {\n  __typename?: 'LaunchSequenceSupersededStep';\n  completedAt?: Maybe<Scalars['Timestamp']>;\n};\n\nexport enum LaunchStatus {\n  LaunchCompleted = 'LAUNCH_COMPLETED',\n  LaunchFailed = 'LAUNCH_FAILED',\n  LaunchInitiated = 'LAUNCH_INITIATED'\n}\n\nexport type LinkInfo = {\n  __typename?: 'LinkInfo';\n  createdAt: Scalars['Timestamp'];\n  id: Scalars['ID'];\n  title?: Maybe<Scalars['String']>;\n  type: LinkInfoType;\n  url: Scalars['String'];\n};\n\nexport enum LinkInfoType {\n  DeveloperPortal = 'DEVELOPER_PORTAL',\n  Other = 'OTHER',\n  Repository = 'REPOSITORY'\n}\n\nexport type MarkChangesForOperationAsSafeResult = {\n  __typename?: 'MarkChangesForOperationAsSafeResult';\n  /**\n   * Nice to have for the frontend since the Apollo cache is already watching for AffectedQuery to update.\n   * This might return null if no behavior changes were found for the affected operation ID.\n   * This is a weird situation that should never happen.\n   */\n  affectedOperation?: Maybe<AffectedQuery>;\n  message: Scalars['String'];\n  success: Scalars['Boolean'];\n};\n\nexport type MediaUploadInfo = {\n  __typename?: 'MediaUploadInfo';\n  csrfToken: Scalars['String'];\n  maxContentLength: Scalars['Int'];\n  url: Scalars['String'];\n};\n\nexport type Mutation = {\n  __typename?: 'Mutation';\n  account?: Maybe<AccountMutation>;\n  createOperationCollection: CreateOperationCollectionResult;\n  /**\n   * Finalize a password reset with a token included in the E-mail link,\n   * returns the corresponding login email when successful\n   */\n  finalizePasswordReset?: Maybe<Scalars['String']>;\n  /** Join an account with a token */\n  joinAccount?: Maybe<Account>;\n  me?: Maybe<IdentityMutation>;\n  newAccount?: Maybe<Account>;\n  newService?: Maybe<Service>;\n  operationCollection?: Maybe<OperationCollectionMutation>;\n  /** Refresh all plans from third-party billing service */\n  plansRefreshBilling?: Maybe<Scalars['Void']>;\n  /** Report a running GraphQL server's schema. */\n  reportSchema?: Maybe<ReportSchemaResult>;\n  /** Ask for a user's password to be reset by E-mail */\n  resetPassword?: Maybe<Scalars['Void']>;\n  resolveAllInternalCronExecutions?: Maybe<Scalars['Void']>;\n  resolveInternalCronExecution?: Maybe<CronExecution>;\n  service?: Maybe<ServiceMutation>;\n  /** Set the subscriptions for a given email */\n  setSubscriptions?: Maybe<EmailPreferences>;\n  /** Set the studio settings for the current user */\n  setUserSettings?: Maybe<UserSettings>;\n  signUp?: Maybe<User>;\n  /** This is called by the form shown to users after they delete their user or organization account. */\n  submitPostDeletionFeedback?: Maybe<Scalars['Void']>;\n  /** Mutation for basic engagement tracking in studio */\n  track?: Maybe<Scalars['Void']>;\n  /** Unsubscribe a given email from all emails */\n  unsubscribeFromAll?: Maybe<EmailPreferences>;\n  user?: Maybe<UserMutation>;\n};\n\n\nexport type MutationAccountArgs = {\n  id: Scalars['ID'];\n};\n\n\nexport type MutationCreateOperationCollectionArgs = {\n  description?: InputMaybe<Scalars['String']>;\n  name: Scalars['String'];\n  variantRefs?: InputMaybe<Array<Scalars['ID']>>;\n};\n\n\nexport type MutationFinalizePasswordResetArgs = {\n  newPassword: Scalars['String'];\n  resetToken: Scalars['String'];\n};\n\n\nexport type MutationJoinAccountArgs = {\n  accountId: Scalars['ID'];\n  joinToken: Scalars['String'];\n};\n\n\nexport type MutationNewAccountArgs = {\n  companyUrl?: InputMaybe<Scalars['String']>;\n  id: Scalars['ID'];\n};\n\n\nexport type MutationNewServiceArgs = {\n  accountId: Scalars['ID'];\n  description?: InputMaybe<Scalars['String']>;\n  hiddenFromUninvitedNonAdminAccountMembers?: Scalars['Boolean'];\n  id: Scalars['ID'];\n  isDev?: Scalars['Boolean'];\n  name?: InputMaybe<Scalars['String']>;\n  title?: InputMaybe<Scalars['String']>;\n};\n\n\nexport type MutationOperationCollectionArgs = {\n  id: Scalars['ID'];\n};\n\n\nexport type MutationReportSchemaArgs = {\n  coreSchema?: InputMaybe<Scalars['String']>;\n  report: SchemaReport;\n};\n\n\nexport type MutationResetPasswordArgs = {\n  email: Scalars['String'];\n};\n\n\nexport type MutationResolveAllInternalCronExecutionsArgs = {\n  group?: InputMaybe<Scalars['String']>;\n  name?: InputMaybe<Scalars['String']>;\n};\n\n\nexport type MutationResolveInternalCronExecutionArgs = {\n  id: Scalars['ID'];\n};\n\n\nexport type MutationServiceArgs = {\n  id: Scalars['ID'];\n};\n\n\nexport type MutationSetSubscriptionsArgs = {\n  email: Scalars['String'];\n  subscriptions: Array<EmailCategory>;\n  token: Scalars['String'];\n};\n\n\nexport type MutationSetUserSettingsArgs = {\n  newSettings?: InputMaybe<UserSettingsInput>;\n};\n\n\nexport type MutationSignUpArgs = {\n  email: Scalars['String'];\n  fullName: Scalars['String'];\n  password: Scalars['String'];\n  referrer?: InputMaybe<Scalars['String']>;\n  trackingGoogleClientId?: InputMaybe<Scalars['String']>;\n  trackingMarketoClientId?: InputMaybe<Scalars['String']>;\n  userSegment?: InputMaybe<UserSegment>;\n  utmCampaign?: InputMaybe<Scalars['String']>;\n  utmMedium?: InputMaybe<Scalars['String']>;\n  utmSource?: InputMaybe<Scalars['String']>;\n};\n\n\nexport type MutationSubmitPostDeletionFeedbackArgs = {\n  feedback: Scalars['String'];\n  targetIdentifier: Scalars['ID'];\n  targetType: DeletionTargetType;\n};\n\n\nexport type MutationTrackArgs = {\n  event: EventEnum;\n  graphID: Scalars['String'];\n  graphVariant?: Scalars['String'];\n};\n\n\nexport type MutationUnsubscribeFromAllArgs = {\n  email: Scalars['String'];\n  token: Scalars['String'];\n};\n\n\nexport type MutationUserArgs = {\n  id: Scalars['ID'];\n};\n\nexport type NamedIntrospectionArg = {\n  __typename?: 'NamedIntrospectionArg';\n  description?: Maybe<Scalars['String']>;\n  name?: Maybe<Scalars['String']>;\n};\n\nexport type NamedIntrospectionArgNoDescription = {\n  __typename?: 'NamedIntrospectionArgNoDescription';\n  name?: Maybe<Scalars['String']>;\n};\n\n/**\n * The shared fields for a named introspection type. Currently this is returned for the\n * top level value affected by a change. In the future, we may update this\n * type to be an interface, which is extended by the more specific types:\n * scalar, object, input object, union, interface, and enum\n *\n * For an in-depth look at where these types come from, see:\n * https://github.com/DefinitelyTyped/DefinitelyTyped/blob/659eb50d3/types/graphql/utilities/introspectionQuery.d.ts#L31-L37\n */\nexport type NamedIntrospectionType = {\n  __typename?: 'NamedIntrospectionType';\n  description?: Maybe<Scalars['String']>;\n  kind?: Maybe<IntrospectionTypeKind>;\n  name?: Maybe<Scalars['String']>;\n};\n\nexport type NamedIntrospectionTypeNoDescription = {\n  __typename?: 'NamedIntrospectionTypeNoDescription';\n  name?: Maybe<Scalars['String']>;\n};\n\n/**\n * Introspection values that can be children of other types for changes, such\n * as input fields, objects in interfaces, enum values. In the future, this\n * value could become an interface to allow fields specific to the types\n * returned.\n */\nexport type NamedIntrospectionValue = {\n  __typename?: 'NamedIntrospectionValue';\n  description?: Maybe<Scalars['String']>;\n  name?: Maybe<Scalars['String']>;\n  printedType?: Maybe<Scalars['String']>;\n};\n\nexport type NamedIntrospectionValueNoDescription = {\n  __typename?: 'NamedIntrospectionValueNoDescription';\n  name?: Maybe<Scalars['String']>;\n  printedType?: Maybe<Scalars['String']>;\n};\n\n/** A non-federated service for a monolithic graph */\nexport type NonFederatedImplementingService = {\n  __typename?: 'NonFederatedImplementingService';\n  /** Timestamp of when this implementing service was created */\n  createdAt: Scalars['Timestamp'];\n  /**\n   * Identifies which graph this non-implementing service belongs to.\n   * Formerly known as \"service_id\"\n   */\n  graphID: Scalars['String'];\n  /**\n   * Specifies which variant of a graph this implementing service belongs to\".\n   * Formerly known as \"tag\"\n   */\n  graphVariant: Scalars['String'];\n};\n\nexport type NotFoundError = Error & {\n  __typename?: 'NotFoundError';\n  message: Scalars['String'];\n};\n\nexport type OdysseyCertification = {\n  __typename?: 'OdysseyCertification';\n  certificationId: Scalars['String'];\n  earnedAt: Scalars['Timestamp'];\n  id: Scalars['ID'];\n  owner?: Maybe<OdysseyCertificationOwner>;\n};\n\nexport type OdysseyCertificationOwner = {\n  __typename?: 'OdysseyCertificationOwner';\n  fullName: Scalars['String'];\n  id: Scalars['ID'];\n};\n\nexport type OdysseyCourse = {\n  __typename?: 'OdysseyCourse';\n  completedAt?: Maybe<Scalars['Timestamp']>;\n  enrolledAt?: Maybe<Scalars['Timestamp']>;\n  id: Scalars['ID'];\n};\n\nexport type OdysseyCourseInput = {\n  completedAt?: InputMaybe<Scalars['Timestamp']>;\n  courseId: Scalars['String'];\n};\n\nexport type OdysseyTask = {\n  __typename?: 'OdysseyTask';\n  completedAt?: Maybe<Scalars['Timestamp']>;\n  id: Scalars['ID'];\n  value?: Maybe<Scalars['String']>;\n};\n\nexport type OdysseyTaskInput = {\n  completedAt?: InputMaybe<Scalars['Timestamp']>;\n  taskId: Scalars['String'];\n  value?: InputMaybe<Scalars['String']>;\n};\n\nexport type Operation = {\n  __typename?: 'Operation';\n  id: Scalars['ID'];\n  name?: Maybe<Scalars['String']>;\n  signature?: Maybe<Scalars['String']>;\n  truncated: Scalars['Boolean'];\n};\n\nexport type OperationAcceptedChange = {\n  __typename?: 'OperationAcceptedChange';\n  acceptedAt: Scalars['Timestamp'];\n  acceptedBy: Identity;\n  change: StoredApprovedChange;\n  checkID: Scalars['ID'];\n  graphID: Scalars['ID'];\n  id: Scalars['ID'];\n  operationID: Scalars['String'];\n};\n\n/** Columns of OperationCheckStats. */\nexport enum OperationCheckStatsColumn {\n  CachedRequestsCount = 'CACHED_REQUESTS_COUNT',\n  ClientName = 'CLIENT_NAME',\n  ClientVersion = 'CLIENT_VERSION',\n  QueryId = 'QUERY_ID',\n  QueryName = 'QUERY_NAME',\n  SchemaTag = 'SCHEMA_TAG',\n  ServiceId = 'SERVICE_ID',\n  Timestamp = 'TIMESTAMP',\n  UncachedRequestsCount = 'UNCACHED_REQUESTS_COUNT'\n}\n\nexport type OperationCheckStatsDimensions = {\n  __typename?: 'OperationCheckStatsDimensions';\n  clientName?: Maybe<Scalars['String']>;\n  clientVersion?: Maybe<Scalars['String']>;\n  queryId?: Maybe<Scalars['ID']>;\n  queryName?: Maybe<Scalars['String']>;\n  schemaTag?: Maybe<Scalars['String']>;\n  serviceId?: Maybe<Scalars['ID']>;\n};\n\n/** Filter for data in OperationCheckStats. Fields with dimension names represent equality checks. All fields are implicitly ANDed together. */\nexport type OperationCheckStatsFilter = {\n  and?: InputMaybe<Array<OperationCheckStatsFilter>>;\n  /** Selects rows whose clientName dimension equals the given value if not null. To query for the null value, use {in: {clientName: [null]}} instead. */\n  clientName?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose clientVersion dimension equals the given value if not null. To query for the null value, use {in: {clientVersion: [null]}} instead. */\n  clientVersion?: InputMaybe<Scalars['String']>;\n  in?: InputMaybe<OperationCheckStatsFilterIn>;\n  not?: InputMaybe<OperationCheckStatsFilter>;\n  or?: InputMaybe<Array<OperationCheckStatsFilter>>;\n  /** Selects rows whose queryId dimension equals the given value if not null. To query for the null value, use {in: {queryId: [null]}} instead. */\n  queryId?: InputMaybe<Scalars['ID']>;\n  /** Selects rows whose queryName dimension equals the given value if not null. To query for the null value, use {in: {queryName: [null]}} instead. */\n  queryName?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose schemaTag dimension equals the given value if not null. To query for the null value, use {in: {schemaTag: [null]}} instead. */\n  schemaTag?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose serviceId dimension equals the given value if not null. To query for the null value, use {in: {serviceId: [null]}} instead. */\n  serviceId?: InputMaybe<Scalars['ID']>;\n};\n\n/** Filter for data in OperationCheckStats. Fields match if the corresponding dimension's value is in the given list. All fields are implicitly ANDed together. */\nexport type OperationCheckStatsFilterIn = {\n  /** Selects rows whose clientName dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  clientName?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose clientVersion dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  clientVersion?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose queryId dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  queryId?: InputMaybe<Array<InputMaybe<Scalars['ID']>>>;\n  /** Selects rows whose queryName dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  queryName?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose schemaTag dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  schemaTag?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose serviceId dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  serviceId?: InputMaybe<Array<InputMaybe<Scalars['ID']>>>;\n};\n\nexport type OperationCheckStatsMetrics = {\n  __typename?: 'OperationCheckStatsMetrics';\n  cachedRequestsCount: Scalars['Long'];\n  uncachedRequestsCount: Scalars['Long'];\n};\n\nexport type OperationCheckStatsOrderBySpec = {\n  column: OperationCheckStatsColumn;\n  direction: Ordering;\n};\n\nexport type OperationCheckStatsRecord = {\n  __typename?: 'OperationCheckStatsRecord';\n  /** Dimensions of OperationCheckStats that can be grouped by. */\n  groupBy: OperationCheckStatsDimensions;\n  /** Metrics of OperationCheckStats that can be aggregated over. */\n  metrics: OperationCheckStatsMetrics;\n  /** Starting segment timestamp. */\n  timestamp: Scalars['Timestamp'];\n};\n\nexport type OperationCollection = {\n  __typename?: 'OperationCollection';\n  createdAt: Scalars['Timestamp'];\n  createdBy?: Maybe<Identity>;\n  description?: Maybe<Scalars['String']>;\n  id: Scalars['ID'];\n  lastUpdatedAt: Scalars['Timestamp'];\n  lastUpdatedBy?: Maybe<Identity>;\n  name: Scalars['String'];\n  operation?: Maybe<OperationCollectionEntryResult>;\n  operations: Array<OperationCollectionEntry>;\n  variants: Array<GraphVariant>;\n};\n\n\nexport type OperationCollectionOperationArgs = {\n  id: Scalars['ID'];\n};\n\nexport type OperationCollectionEntry = {\n  __typename?: 'OperationCollectionEntry';\n  collection: OperationCollection;\n  createdAt: Scalars['Timestamp'];\n  createdBy?: Maybe<Identity>;\n  currentOperationRevision: OperationCollectionEntryState;\n  id: Scalars['ID'];\n  lastUpdatedAt: Scalars['Timestamp'];\n  lastUpdatedBy?: Maybe<Identity>;\n  name: Scalars['String'];\n};\n\nexport type OperationCollectionEntryMutation = {\n  __typename?: 'OperationCollectionEntryMutation';\n  updateValues?: Maybe<UpdateOperationCollectionEntryResult>;\n};\n\n\nexport type OperationCollectionEntryMutationUpdateValuesArgs = {\n  operationInput: OperationCollectionEntryStateInput;\n};\n\nexport type OperationCollectionEntryResult = NotFoundError | OperationCollectionEntry;\n\nexport type OperationCollectionEntryState = {\n  __typename?: 'OperationCollectionEntryState';\n  body: Scalars['String'];\n  createdAt: Scalars['Timestamp'];\n  createdBy?: Maybe<Identity>;\n  headers?: Maybe<Array<OperationHeader>>;\n  variables?: Maybe<Scalars['String']>;\n};\n\nexport type OperationCollectionEntryStateInput = {\n  body: Scalars['String'];\n  headers?: InputMaybe<Array<OperationHeaderInput>>;\n  /**  I'm assuming this is non null */\n  variables?: InputMaybe<Scalars['String']>;\n};\n\nexport type OperationCollectionMutation = {\n  __typename?: 'OperationCollectionMutation';\n  addOperation?: Maybe<AddOperationCollectionEntryResult>;\n  addToVariant: AddOperationCollectionToVariantResult;\n  delete?: Maybe<DeleteOperationCollectionSuccess>;\n  deleteOperation?: Maybe<OperationCollection>;\n  operation?: Maybe<OperationCollectionEntryMutation>;\n  removeFromVariant: RemoveOperationCollectionFromVariantResult;\n  updateDescription?: Maybe<UpdateOperationCollectionResult>;\n  updateName?: Maybe<UpdateOperationCollectionResult>;\n};\n\n\nexport type OperationCollectionMutationAddOperationArgs = {\n  operationInput: OperationCollectionEntryStateInput;\n};\n\n\nexport type OperationCollectionMutationAddToVariantArgs = {\n  variantRef: Scalars['ID'];\n};\n\n\nexport type OperationCollectionMutationDeleteOperationArgs = {\n  id: Scalars['ID'];\n};\n\n\nexport type OperationCollectionMutationOperationArgs = {\n  id: Scalars['ID'];\n};\n\n\nexport type OperationCollectionMutationRemoveFromVariantArgs = {\n  variantRef: Scalars['ID'];\n};\n\n\nexport type OperationCollectionMutationUpdateDescriptionArgs = {\n  description?: InputMaybe<Scalars['String']>;\n};\n\n\nexport type OperationCollectionMutationUpdateNameArgs = {\n  name: Scalars['String'];\n};\n\nexport type OperationCollectionResult = NotFoundError | OperationCollection;\n\nexport type OperationDocument = {\n  __typename?: 'OperationDocument';\n  /** Operation document body */\n  body: Scalars['String'];\n  /** Operation name */\n  name?: Maybe<Scalars['String']>;\n};\n\nexport type OperationDocumentInput = {\n  /** Operation document body */\n  body: Scalars['String'];\n  /** Operation name */\n  name?: InputMaybe<Scalars['String']>;\n};\n\nexport type OperationHeader = {\n  __typename?: 'OperationHeader';\n  name: Scalars['String'];\n  value: Scalars['String'];\n};\n\nexport type OperationHeaderInput = {\n  name: Scalars['String'];\n  value: Scalars['String'];\n};\n\nexport type OperationValidationError = {\n  __typename?: 'OperationValidationError';\n  message: Scalars['String'];\n};\n\nexport type OperationsCheckResult = {\n  __typename?: 'OperationsCheckResult';\n  /** Operations affected by all changes in diff */\n  affectedQueries?: Maybe<Array<AffectedQuery>>;\n  /** Summary/counts for all changes in diff */\n  changeSummary: ChangeSummary;\n  /** List of schema changes with associated affected clients and operations */\n  changes: Array<Change>;\n  /** Indication of the success of the change, either failure, warning, or notice. */\n  checkSeverity: ChangeSeverity;\n  /** The variant that was used as a base to check against */\n  checkedVariant: GraphVariant;\n  createdAt: Scalars['Timestamp'];\n  id: Scalars['ID'];\n  /** Number of affected query operations that are neither marked as SAFE or IGNORED */\n  numberOfAffectedOperations: Scalars['Int'];\n  /** Number of operations that were validated during schema diff */\n  numberOfCheckedOperations: Scalars['Int'];\n  workflowTask: OperationsCheckTask;\n};\n\nexport type OperationsCheckTask = CheckWorkflowTask & {\n  __typename?: 'OperationsCheckTask';\n  completedAt?: Maybe<Scalars['Timestamp']>;\n  createdAt: Scalars['Timestamp'];\n  id: Scalars['ID'];\n  /** The result of the check. */\n  result?: Maybe<OperationsCheckResult>;\n  status: CheckWorkflowTaskStatus;\n  workflow: CheckWorkflow;\n};\n\nexport enum Ordering {\n  Ascending = 'ASCENDING',\n  Descending = 'DESCENDING'\n}\n\n/** A reusable invite link for an organization. */\nexport type OrganizationInviteLink = {\n  __typename?: 'OrganizationInviteLink';\n  createdAt: Scalars['Timestamp'];\n  /** A joinToken that can be passed to Mutation.joinAccount to join the organization. */\n  joinToken: Scalars['String'];\n  /** The role that the user will receive if they join the organization with this link. */\n  role: UserPermission;\n};\n\nexport type OrganizationSso = {\n  __typename?: 'OrganizationSSO';\n  defaultRole: UserPermission;\n  idpid: Scalars['ID'];\n  provider: OrganizationSsoProvider;\n};\n\nexport enum OrganizationSsoProvider {\n  Pingone = 'PINGONE'\n}\n\n/** PagerDuty notification channel */\nexport type PagerDutyChannel = Channel & {\n  __typename?: 'PagerDutyChannel';\n  id: Scalars['ID'];\n  name: Scalars['String'];\n  routingKey: Scalars['String'];\n  subscriptions: Array<ChannelSubscription>;\n};\n\n/** PagerDuty notification channel parameters */\nexport type PagerDutyChannelInput = {\n  name?: InputMaybe<Scalars['String']>;\n  routingKey: Scalars['String'];\n};\n\n/** Schema for an implementing service with associated metadata */\nexport type PartialSchema = {\n  __typename?: 'PartialSchema';\n  /** Timestamp for when the partial schema was created */\n  createdAt: Scalars['Timestamp'];\n  /** If this sdl is currently actively composed in the gateway, this is true */\n  isLive: Scalars['Boolean'];\n  /** The enriched sdl of a partial schema */\n  sdl: Scalars['String'];\n  /** The path of deep storage to find the raw enriched partial schema file */\n  sdlPath: Scalars['String'];\n};\n\n/**\n * Input for registering a partial schema to an implementing service.\n * One of the fields must be specified (validated server-side).\n *\n * If a new partialSchemaSDL is passed in, this operation will store it before\n * creating the association.\n *\n * If both the sdl and hash are specified, an error will be thrown if the provided\n * hash doesn't match our hash of the sdl contents. If the sdl field is specified,\n * the hash does not need to be and will be computed server-side.\n */\nexport type PartialSchemaInput = {\n  /**\n   * Hash of the partial schema to associate; error is thrown if only the hash is\n   * specified and the hash has not been seen before\n   */\n  hash?: InputMaybe<Scalars['String']>;\n  /**\n   * Contents of the partial schema in SDL syntax, but may reference types\n   * that aren't defined in this document\n   */\n  sdl?: InputMaybe<Scalars['String']>;\n};\n\nexport type PermissionError = Error & {\n  __typename?: 'PermissionError';\n  message: Scalars['String'];\n};\n\nexport type PromoteSchemaError = {\n  __typename?: 'PromoteSchemaError';\n  code: PromoteSchemaErrorCode;\n  message: Scalars['String'];\n};\n\nexport enum PromoteSchemaErrorCode {\n  CannotPromoteSchemaForFederatedGraph = 'CANNOT_PROMOTE_SCHEMA_FOR_FEDERATED_GRAPH'\n}\n\nexport type PromoteSchemaResponse = {\n  __typename?: 'PromoteSchemaResponse';\n  code: PromoteSchemaResponseCode;\n  tag: SchemaTag;\n};\n\nexport enum PromoteSchemaResponseCode {\n  NoChangesDetected = 'NO_CHANGES_DETECTED',\n  PromotionSuccess = 'PROMOTION_SUCCESS'\n}\n\nexport type PromoteSchemaResponseOrError = PromoteSchemaError | PromoteSchemaResponse;\n\nexport type Protobuf = {\n  __typename?: 'Protobuf';\n  json?: Maybe<Scalars['String']>;\n  object?: Maybe<Scalars['Object']>;\n  raw: Scalars['Blob'];\n  text: Scalars['String'];\n};\n\nexport type Query = {\n  __typename?: 'Query';\n  /** Account by ID */\n  account?: Maybe<Account>;\n  /** Whether an account ID is available for mutation{newAccount(id:)} */\n  accountIDAvailable: Scalars['Boolean'];\n  /** All accounts */\n  allAccounts?: Maybe<Array<Account>>;\n  /** All available plans */\n  allPlans: Array<BillingPlan>;\n  /** All services */\n  allServices?: Maybe<Array<Service>>;\n  /** All timezones with their offsets from UTC */\n  allTimezoneOffsets: Array<TimezoneOffset>;\n  /** All users */\n  allUsers?: Maybe<Array<User>>;\n  /** Look up a plan by ID */\n  billingPlan?: Maybe<BillingPlanV2>;\n  /** All available plans */\n  billingPlans: Array<BillingPlanV2>;\n  /** If this is true, the user is an Apollo administrator who can ignore restrictions based purely on billing plan. */\n  canBypassPlanRestrictions: Scalars['Boolean'];\n  diffSchemas: Array<Change>;\n  /** Get the unsubscribe settings for a given email. */\n  emailPreferences?: Maybe<EmailPreferences>;\n  experimentalFeatures: GlobalExperimentalFeatures;\n  frontendUrlRoot: Scalars['String'];\n  internalActiveCronJobs: Array<CronJob>;\n  internalAdminUsers?: Maybe<Array<InternalAdminUser>>;\n  internalUnresolvedCronExecutionFailures: Array<CronExecution>;\n  /** Current identity, null if not authenticated */\n  me?: Maybe<Identity>;\n  odysseyCertification?: Maybe<OdysseyCertification>;\n  operationCollection: OperationCollectionResult;\n  /** Look up a plan by ID */\n  plan?: Maybe<BillingPlan>;\n  /** A list of public variants that have been selected to be shown on our Graph Directory. */\n  publiclyListedVariants?: Maybe<Array<GraphVariant>>;\n  /** Service by ID */\n  service?: Maybe<Service>;\n  /** Query statistics across all services. For admins only; normal users must go through AccountsStatsWindow or ServiceStatsWindow. */\n  stats: StatsWindow;\n  /** Get the studio settings for the current user */\n  studioSettings?: Maybe<UserSettings>;\n  /** The plan started by AccountMutation.startTeamSubscription */\n  teamBillingPlan: BillingPlanV2;\n  /** The plan started by AccountMutation.startTeamSubscription */\n  teamPlan: BillingPlan;\n  /** The plan started by AccountMutation.startTrial */\n  trialBillingPlan: BillingPlanV2;\n  /** The plan started by AccountMutation.startTrial */\n  trialPlan: BillingPlan;\n  /** User by ID */\n  user?: Maybe<User>;\n  /**\n   * Access a variant by reference of the form `graphID@variantName`, or `graphID` for the default `current` variant.\n   * Returns null when the graph or variant do not exist, or when the graph cannot be accessed.\n   * Note that we can return more types implementing Error in the future.\n   */\n  variant?: Maybe<GraphVariantLookup>;\n};\n\n\nexport type QueryAccountArgs = {\n  id: Scalars['ID'];\n};\n\n\nexport type QueryAccountIdAvailableArgs = {\n  id: Scalars['ID'];\n};\n\n\nexport type QueryAllAccountsArgs = {\n  search?: InputMaybe<Scalars['String']>;\n  tier?: InputMaybe<BillingPlanTier>;\n};\n\n\nexport type QueryAllServicesArgs = {\n  search?: InputMaybe<Scalars['String']>;\n};\n\n\nexport type QueryAllUsersArgs = {\n  search?: InputMaybe<Scalars['String']>;\n};\n\n\nexport type QueryBillingPlanArgs = {\n  id?: InputMaybe<Scalars['ID']>;\n};\n\n\nexport type QueryDiffSchemasArgs = {\n  baseSchema: Scalars['String'];\n  nextSchema: Scalars['String'];\n};\n\n\nexport type QueryEmailPreferencesArgs = {\n  email: Scalars['String'];\n  token: Scalars['String'];\n};\n\n\nexport type QueryOdysseyCertificationArgs = {\n  id: Scalars['ID'];\n};\n\n\nexport type QueryOperationCollectionArgs = {\n  id: Scalars['ID'];\n};\n\n\nexport type QueryPlanArgs = {\n  id?: InputMaybe<Scalars['ID']>;\n};\n\n\nexport type QueryServiceArgs = {\n  id: Scalars['ID'];\n};\n\n\nexport type QueryStatsArgs = {\n  from: Scalars['Timestamp'];\n  resolution?: InputMaybe<Resolution>;\n  to?: InputMaybe<Scalars['Timestamp']>;\n};\n\n\nexport type QueryTeamBillingPlanArgs = {\n  billingPeriod: BillingPeriod;\n};\n\n\nexport type QueryTeamPlanArgs = {\n  billingPeriod: BillingPeriod;\n};\n\n\nexport type QueryUserArgs = {\n  id: Scalars['ID'];\n};\n\n\nexport type QueryVariantArgs = {\n  ref: Scalars['ID'];\n};\n\n/** query documents to validate against */\nexport type QueryDocumentInput = {\n  document?: InputMaybe<Scalars['String']>;\n};\n\n/** Columns of QueryStats. */\nexport enum QueryStatsColumn {\n  AccountId = 'ACCOUNT_ID',\n  CachedHistogram = 'CACHED_HISTOGRAM',\n  CachedRequestsCount = 'CACHED_REQUESTS_COUNT',\n  CacheTtlHistogram = 'CACHE_TTL_HISTOGRAM',\n  ClientName = 'CLIENT_NAME',\n  ClientVersion = 'CLIENT_VERSION',\n  ForbiddenOperationCount = 'FORBIDDEN_OPERATION_COUNT',\n  FromEngineproxy = 'FROM_ENGINEPROXY',\n  QueryId = 'QUERY_ID',\n  QueryName = 'QUERY_NAME',\n  RegisteredOperationCount = 'REGISTERED_OPERATION_COUNT',\n  RequestsWithErrorsCount = 'REQUESTS_WITH_ERRORS_COUNT',\n  SchemaHash = 'SCHEMA_HASH',\n  SchemaTag = 'SCHEMA_TAG',\n  ServiceId = 'SERVICE_ID',\n  Timestamp = 'TIMESTAMP',\n  UncachedHistogram = 'UNCACHED_HISTOGRAM',\n  UncachedRequestsCount = 'UNCACHED_REQUESTS_COUNT'\n}\n\nexport type QueryStatsDimensions = {\n  __typename?: 'QueryStatsDimensions';\n  accountId?: Maybe<Scalars['ID']>;\n  clientName?: Maybe<Scalars['String']>;\n  clientVersion?: Maybe<Scalars['String']>;\n  fromEngineproxy?: Maybe<Scalars['String']>;\n  queryId?: Maybe<Scalars['ID']>;\n  queryName?: Maybe<Scalars['String']>;\n  querySignature?: Maybe<Scalars['String']>;\n  schemaHash?: Maybe<Scalars['String']>;\n  schemaTag?: Maybe<Scalars['String']>;\n  serviceId?: Maybe<Scalars['ID']>;\n};\n\n/** Filter for data in QueryStats. Fields with dimension names represent equality checks. All fields are implicitly ANDed together. */\nexport type QueryStatsFilter = {\n  /** Selects rows whose accountId dimension equals the given value if not null. To query for the null value, use {in: {accountId: [null]}} instead. */\n  accountId?: InputMaybe<Scalars['ID']>;\n  and?: InputMaybe<Array<QueryStatsFilter>>;\n  /** Selects rows whose clientName dimension equals the given value if not null. To query for the null value, use {in: {clientName: [null]}} instead. */\n  clientName?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose clientVersion dimension equals the given value if not null. To query for the null value, use {in: {clientVersion: [null]}} instead. */\n  clientVersion?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose fromEngineproxy dimension equals the given value if not null. To query for the null value, use {in: {fromEngineproxy: [null]}} instead. */\n  fromEngineproxy?: InputMaybe<Scalars['String']>;\n  in?: InputMaybe<QueryStatsFilterIn>;\n  not?: InputMaybe<QueryStatsFilter>;\n  or?: InputMaybe<Array<QueryStatsFilter>>;\n  /** Selects rows whose queryId dimension equals the given value if not null. To query for the null value, use {in: {queryId: [null]}} instead. */\n  queryId?: InputMaybe<Scalars['ID']>;\n  /** Selects rows whose queryName dimension equals the given value if not null. To query for the null value, use {in: {queryName: [null]}} instead. */\n  queryName?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose schemaHash dimension equals the given value if not null. To query for the null value, use {in: {schemaHash: [null]}} instead. */\n  schemaHash?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose schemaTag dimension equals the given value if not null. To query for the null value, use {in: {schemaTag: [null]}} instead. */\n  schemaTag?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose serviceId dimension equals the given value if not null. To query for the null value, use {in: {serviceId: [null]}} instead. */\n  serviceId?: InputMaybe<Scalars['ID']>;\n};\n\n/** Filter for data in QueryStats. Fields match if the corresponding dimension's value is in the given list. All fields are implicitly ANDed together. */\nexport type QueryStatsFilterIn = {\n  /** Selects rows whose accountId dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  accountId?: InputMaybe<Array<InputMaybe<Scalars['ID']>>>;\n  /** Selects rows whose clientName dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  clientName?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose clientVersion dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  clientVersion?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose fromEngineproxy dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  fromEngineproxy?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose queryId dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  queryId?: InputMaybe<Array<InputMaybe<Scalars['ID']>>>;\n  /** Selects rows whose queryName dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  queryName?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose schemaHash dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  schemaHash?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose schemaTag dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  schemaTag?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose serviceId dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  serviceId?: InputMaybe<Array<InputMaybe<Scalars['ID']>>>;\n};\n\nexport type QueryStatsMetrics = {\n  __typename?: 'QueryStatsMetrics';\n  cacheTtlHistogram: DurationHistogram;\n  cachedHistogram: DurationHistogram;\n  cachedRequestsCount: Scalars['Long'];\n  forbiddenOperationCount: Scalars['Long'];\n  registeredOperationCount: Scalars['Long'];\n  requestsWithErrorsCount: Scalars['Long'];\n  totalLatencyHistogram: DurationHistogram;\n  totalRequestCount: Scalars['Long'];\n  uncachedHistogram: DurationHistogram;\n  uncachedRequestsCount: Scalars['Long'];\n};\n\nexport type QueryStatsOrderBySpec = {\n  column: QueryStatsColumn;\n  direction: Ordering;\n};\n\nexport type QueryStatsRecord = {\n  __typename?: 'QueryStatsRecord';\n  /** Dimensions of QueryStats that can be grouped by. */\n  groupBy: QueryStatsDimensions;\n  /** Metrics of QueryStats that can be aggregated over. */\n  metrics: QueryStatsMetrics;\n  /** Starting segment timestamp. */\n  timestamp: Scalars['Timestamp'];\n};\n\n/** Query Trigger */\nexport type QueryTrigger = ChannelSubscription & {\n  __typename?: 'QueryTrigger';\n  channels: Array<Channel>;\n  comparisonOperator: ComparisonOperator;\n  enabled: Scalars['Boolean'];\n  excludedOperationNames: Array<Scalars['String']>;\n  id: Scalars['ID'];\n  metric: QueryTriggerMetric;\n  operationNames: Array<Scalars['String']>;\n  percentile?: Maybe<Scalars['Float']>;\n  scope: QueryTriggerScope;\n  serviceId: Scalars['String'];\n  state: QueryTriggerState;\n  threshold: Scalars['Float'];\n  variant?: Maybe<Scalars['String']>;\n  window: QueryTriggerWindow;\n};\n\n/** Query trigger */\nexport type QueryTriggerInput = {\n  channelIds?: InputMaybe<Array<Scalars['String']>>;\n  comparisonOperator: ComparisonOperator;\n  enabled?: InputMaybe<Scalars['Boolean']>;\n  excludedOperationNames?: InputMaybe<Array<Scalars['String']>>;\n  metric: QueryTriggerMetric;\n  operationNames?: InputMaybe<Array<Scalars['String']>>;\n  percentile?: InputMaybe<Scalars['Float']>;\n  scope?: InputMaybe<QueryTriggerScope>;\n  threshold: Scalars['Float'];\n  variant?: InputMaybe<Scalars['String']>;\n  window: QueryTriggerWindow;\n};\n\nexport enum QueryTriggerMetric {\n  /** Number of requests within the window that resulted in an error. Ignores `percentile`. */\n  ErrorCount = 'ERROR_COUNT',\n  /** Number of error requests divided by total number of requests. Ignores `percentile`. */\n  ErrorPercentage = 'ERROR_PERCENTAGE',\n  /** Number of requests within the window. Ignores `percentile`. */\n  RequestCount = 'REQUEST_COUNT',\n  /** Request latency in ms. Requires `percentile`. */\n  RequestServiceTime = 'REQUEST_SERVICE_TIME'\n}\n\nexport enum QueryTriggerScope {\n  All = 'ALL',\n  Any = 'ANY',\n  Unrecognized = 'UNRECOGNIZED'\n}\n\n/** Query trigger state */\nexport type QueryTriggerState = {\n  __typename?: 'QueryTriggerState';\n  evaluatedAt: Scalars['Timestamp'];\n  lastTriggeredAt?: Maybe<Scalars['Timestamp']>;\n  operations: Array<QueryTriggerStateOperation>;\n  triggered: Scalars['Boolean'];\n};\n\nexport type QueryTriggerStateOperation = {\n  __typename?: 'QueryTriggerStateOperation';\n  count: Scalars['Long'];\n  operation: Scalars['String'];\n  triggered: Scalars['Boolean'];\n  value: Scalars['Float'];\n};\n\nexport enum QueryTriggerWindow {\n  FifteenMinutes = 'FIFTEEN_MINUTES',\n  FiveMinutes = 'FIVE_MINUTES',\n  OneMinute = 'ONE_MINUTE',\n  Unrecognized = 'UNRECOGNIZED'\n}\n\nexport type Readme = {\n  __typename?: 'Readme';\n  content: Scalars['String'];\n  id: Scalars['ID'];\n  lastUpdatedAt: Scalars['Timestamp'];\n  lastUpdatedBy?: Maybe<Identity>;\n};\n\nexport type RegisterOperationsMutationResponse = {\n  __typename?: 'RegisterOperationsMutationResponse';\n  invalidOperations?: Maybe<Array<InvalidOperation>>;\n  newOperations?: Maybe<Array<RegisteredOperation>>;\n  registrationSuccess: Scalars['Boolean'];\n};\n\nexport type RegisteredClientIdentityInput = {\n  identifier: Scalars['String'];\n  name: Scalars['String'];\n  version?: InputMaybe<Scalars['String']>;\n};\n\nexport type RegisteredOperation = {\n  __typename?: 'RegisteredOperation';\n  signature: Scalars['ID'];\n};\n\nexport type RegisteredOperationInput = {\n  document?: InputMaybe<Scalars['String']>;\n  metadata?: InputMaybe<RegisteredOperationMetadataInput>;\n  signature: Scalars['ID'];\n};\n\nexport type RegisteredOperationMetadataInput = {\n  /** This will be used to link existing records in Engine to a new ID. */\n  engineSignature?: InputMaybe<Scalars['String']>;\n};\n\nexport type RegistryApiKey = {\n  __typename?: 'RegistryApiKey';\n  keyName?: Maybe<Scalars['String']>;\n  token: Scalars['String'];\n};\n\nexport type RegistryStatsWindow = {\n  __typename?: 'RegistryStatsWindow';\n  schemaCheckStats: Array<AccountChecksStatsRecord>;\n  schemaPublishStats: Array<AccountPublishesStatsRecord>;\n};\n\nexport type RegistrySubscription = ChannelSubscription & {\n  __typename?: 'RegistrySubscription';\n  channel?: Maybe<Channel>;\n  /** @deprecated Use channels list instead */\n  channels: Array<Channel>;\n  createdAt: Scalars['Timestamp'];\n  enabled: Scalars['Boolean'];\n  id: Scalars['ID'];\n  lastUpdatedAt: Scalars['Timestamp'];\n  options: SubscriptionOptions;\n  variant?: Maybe<Scalars['String']>;\n};\n\nexport type RelaunchComplete = {\n  __typename?: 'RelaunchComplete';\n  latestLaunch: Launch;\n  updated: Scalars['Boolean'];\n};\n\nexport type RelaunchError = {\n  __typename?: 'RelaunchError';\n  message: Scalars['String'];\n};\n\nexport type RelaunchResult = RelaunchComplete | RelaunchError;\n\nexport type RemoveOperationCollectionFromVariantResult = GraphVariant | NotFoundError | ValidationError;\n\nexport type ReportSchemaError = ReportSchemaResult & {\n  __typename?: 'ReportSchemaError';\n  code: ReportSchemaErrorCode;\n  inSeconds: Scalars['Int'];\n  message: Scalars['String'];\n  withCoreSchema: Scalars['Boolean'];\n};\n\nexport enum ReportSchemaErrorCode {\n  BootIdIsNotValidUuid = 'BOOT_ID_IS_NOT_VALID_UUID',\n  BootIdIsRequired = 'BOOT_ID_IS_REQUIRED',\n  CoreSchemaHashIsNotSchemaSha256 = 'CORE_SCHEMA_HASH_IS_NOT_SCHEMA_SHA256',\n  CoreSchemaHashIsRequired = 'CORE_SCHEMA_HASH_IS_REQUIRED',\n  CoreSchemaHashIsTooLong = 'CORE_SCHEMA_HASH_IS_TOO_LONG',\n  ExecutableSchemaIdIsNotSchemaSha256 = 'EXECUTABLE_SCHEMA_ID_IS_NOT_SCHEMA_SHA256',\n  ExecutableSchemaIdIsRequired = 'EXECUTABLE_SCHEMA_ID_IS_REQUIRED',\n  ExecutableSchemaIdIsTooLong = 'EXECUTABLE_SCHEMA_ID_IS_TOO_LONG',\n  GraphRefInvalidFormat = 'GRAPH_REF_INVALID_FORMAT',\n  GraphRefIsRequired = 'GRAPH_REF_IS_REQUIRED',\n  GraphVariantDoesNotMatchRegex = 'GRAPH_VARIANT_DOES_NOT_MATCH_REGEX',\n  GraphVariantIsRequired = 'GRAPH_VARIANT_IS_REQUIRED',\n  LibraryVersionIsTooLong = 'LIBRARY_VERSION_IS_TOO_LONG',\n  PlatformIsTooLong = 'PLATFORM_IS_TOO_LONG',\n  RuntimeVersionIsTooLong = 'RUNTIME_VERSION_IS_TOO_LONG',\n  SchemaIsNotParsable = 'SCHEMA_IS_NOT_PARSABLE',\n  SchemaIsNotValid = 'SCHEMA_IS_NOT_VALID',\n  ServerIdIsTooLong = 'SERVER_ID_IS_TOO_LONG',\n  UserVersionIsTooLong = 'USER_VERSION_IS_TOO_LONG'\n}\n\nexport type ReportSchemaResponse = ReportSchemaResult & {\n  __typename?: 'ReportSchemaResponse';\n  inSeconds: Scalars['Int'];\n  withCoreSchema: Scalars['Boolean'];\n};\n\nexport type ReportSchemaResult = {\n  inSeconds: Scalars['Int'];\n  withCoreSchema: Scalars['Boolean'];\n};\n\nexport type ReportServerInfoError = ReportServerInfoResult & {\n  __typename?: 'ReportServerInfoError';\n  code: ReportSchemaErrorCode;\n  inSeconds: Scalars['Int'];\n  message: Scalars['String'];\n  withExecutableSchema: Scalars['Boolean'];\n};\n\nexport type ReportServerInfoResponse = ReportServerInfoResult & {\n  __typename?: 'ReportServerInfoResponse';\n  inSeconds: Scalars['Int'];\n  withExecutableSchema: Scalars['Boolean'];\n};\n\nexport type ReportServerInfoResult = {\n  inSeconds: Scalars['Int'];\n  withExecutableSchema: Scalars['Boolean'];\n};\n\nexport enum Resolution {\n  R1D = 'R1D',\n  R1H = 'R1H',\n  R1M = 'R1M',\n  R5M = 'R5M',\n  R6H = 'R6H',\n  R15M = 'R15M'\n}\n\nexport enum ResponseHints {\n  None = 'NONE',\n  SampleResponses = 'SAMPLE_RESPONSES',\n  Subgraphs = 'SUBGRAPHS',\n  Timings = 'TIMINGS',\n  TraceTimings = 'TRACE_TIMINGS'\n}\n\nexport type RoleOverride = {\n  __typename?: 'RoleOverride';\n  graph: Service;\n  lastUpdatedAt: Scalars['Timestamp'];\n  role: UserPermission;\n  user: User;\n};\n\nexport type ScheduledSummary = ChannelSubscription & {\n  __typename?: 'ScheduledSummary';\n  /** @deprecated Use channels list instead */\n  channel?: Maybe<Channel>;\n  channels: Array<Channel>;\n  enabled: Scalars['Boolean'];\n  id: Scalars['ID'];\n  timezone: Scalars['String'];\n  variant: Scalars['String'];\n};\n\nexport type Schema = {\n  __typename?: 'Schema';\n  createTemporaryURL?: Maybe<TemporaryUrl>;\n  createdAt: Scalars['Timestamp'];\n  document: Scalars['GraphQLDocument'];\n  /** The number of fields; this includes user defined fields only, excluding built-in types and fields */\n  fieldCount: Scalars['Int'];\n  gitContext?: Maybe<GitContext>;\n  hash: Scalars['ID'];\n  introspection: IntrospectionSchema;\n  /** The number of types; this includes user defined types only, excluding built-in types */\n  typeCount: Scalars['Int'];\n};\n\n\nexport type SchemaCreateTemporaryUrlArgs = {\n  expiresInSeconds?: Scalars['Int'];\n};\n\n/** Represents an error from running schema composition on a list of service definitions. */\nexport type SchemaCompositionError = {\n  __typename?: 'SchemaCompositionError';\n  code?: Maybe<Scalars['String']>;\n  locations: Array<Maybe<SourceLocation>>;\n  message: Scalars['String'];\n};\n\nexport type SchemaDiff = {\n  __typename?: 'SchemaDiff';\n  /**\n   * Clients affected by all changes in diff\n   * @deprecated Unsupported.\n   */\n  affectedClients?: Maybe<Array<AffectedClient>>;\n  /** Operations affected by all changes in diff */\n  affectedQueries?: Maybe<Array<AffectedQuery>>;\n  /** Summary/counts for all changes in diff */\n  changeSummary: ChangeSummary;\n  /** List of schema changes with associated affected clients and operations */\n  changes: Array<Change>;\n  /** Number of affected query operations that are neither marked as SAFE or IGNORED */\n  numberOfAffectedOperations: Scalars['Int'];\n  /** Number of operations that were validated during schema diff */\n  numberOfCheckedOperations?: Maybe<Scalars['Int']>;\n  /** Indication of the success of the change, either failure, warning, or notice. */\n  severity: ChangeSeverity;\n  /** The tag against which this diff was created */\n  tag?: Maybe<Scalars['String']>;\n  /** @deprecated use severity instead */\n  type: ChangeType;\n  /** Configuration of validation */\n  validationConfig?: Maybe<SchemaDiffValidationConfig>;\n};\n\nexport type SchemaDiffValidationConfig = {\n  __typename?: 'SchemaDiffValidationConfig';\n  /** Clients to ignore during validation. */\n  excludedClients?: Maybe<Array<ClientInfoFilterOutput>>;\n  /**\n   * delta in seconds from current time that determines the start of the window\n   * for reported metrics included in a schema diff. A day window from the present\n   * day would have a `from` value of -86400. In rare cases, this could be an ISO\n   * timestamp if the user passed one in on diff creation\n   */\n  from?: Maybe<Scalars['Timestamp']>;\n  /** Operation IDs to ignore during validation. */\n  ignoredOperations?: Maybe<Array<Scalars['ID']>>;\n  /** Variants to include during validation. */\n  includedVariants?: Maybe<Array<Scalars['String']>>;\n  /** Minimum number of requests within the window for a query to be considered. */\n  queryCountThreshold?: Maybe<Scalars['Int']>;\n  /**\n   * Number of requests within the window for a query to be considered, relative to\n   * total request count. Expected values are between 0 and 0.05 (minimum 5% of\n   * total request volume)\n   */\n  queryCountThresholdPercentage?: Maybe<Scalars['Float']>;\n  /**\n   * delta in seconds from current time that determines the end of the\n   * window for reported metrics included in a schema diff. A day window\n   * from the present day would have a `to` value of -0. In rare\n   * cases, this could be an ISO timestamp if the user passed one in on diff\n   * creation\n   */\n  to?: Maybe<Scalars['Timestamp']>;\n};\n\nexport type SchemaPublishSubscription = ChannelSubscription & {\n  __typename?: 'SchemaPublishSubscription';\n  channels: Array<Channel>;\n  createdAt: Scalars['Timestamp'];\n  enabled: Scalars['Boolean'];\n  id: Scalars['ID'];\n  lastUpdatedAt: Scalars['Timestamp'];\n  variant?: Maybe<Scalars['String']>;\n};\n\nexport type SchemaReport = {\n  /** A randomly generated UUID, immutable for the lifetime of the edge server runtime. */\n  bootId: Scalars['String'];\n  /** The hex SHA256 hash of the schema being reported. Note that for a GraphQL server with a core schema, this should be the core schema, not the API schema. */\n  coreSchemaHash: Scalars['String'];\n  /** The graph ref (eg, 'id@variant') */\n  graphRef: Scalars['String'];\n  /** The version of the edge server reporting agent, e.g. apollo-server-2.8, graphql-java-3.1, etc. length must be <= 256 characters. */\n  libraryVersion?: InputMaybe<Scalars['String']>;\n  /** The infra environment in which this edge server is running, e.g. localhost, Kubernetes, AWS Lambda, Google CloudRun, AWS ECS, etc. length must be <= 256 characters. */\n  platform?: InputMaybe<Scalars['String']>;\n  /** The runtime in which the edge server is running, e.g. node 12.03, zulu8.46.0.19-ca-jdk8.0.252-macosx_x64, etc. length must be <= 256 characters. */\n  runtimeVersion?: InputMaybe<Scalars['String']>;\n  /** If available, an identifier for the edge server instance, such that when restarting this instance it will have the same serverId, with a different bootId. For example, in Kubernetes this might be the pod name. Length must be <= 256 characters. */\n  serverId?: InputMaybe<Scalars['String']>;\n  /** An identifier used to distinguish the version (from the user's perspective) of the edge server's code itself. For instance, the git sha of the server's repository or the docker sha of the associated image this server runs with. Length must be <= 256 characters. */\n  userVersion?: InputMaybe<Scalars['String']>;\n};\n\nexport type SchemaTag = {\n  __typename?: 'SchemaTag';\n  /** The composition result that corresponds to this schema repo tag, if it exists. */\n  compositionResult?: Maybe<CompositionResult>;\n  createdAt: Scalars['Timestamp'];\n  diffToPrevious?: Maybe<SchemaDiff>;\n  gitContext?: Maybe<GitContext>;\n  /**\n   * List of previously uploaded SchemaTags under the same tag name, starting with\n   * the selected published schema record. Sorted in reverse chronological order\n   * by creation date (newest publish first).\n   *\n   * Note: This does not include the history of checked schemas\n   */\n  history: Array<SchemaTag>;\n  /**\n   * Number of tagged schemas created under the same tag name.\n   * Also represents the maximum size of the history's limit argument.\n   */\n  historyLength: Scalars['Int'];\n  /**\n   * Number of schemas tagged prior to this one under the same tag name, its position\n   * in the tag history.\n   */\n  historyOrder: Scalars['Int'];\n  /**\n   * The identifier for this particular schema tag, which may be either a particular\n   * run of a check or a specific publish. This ID can be used alongside `schemaTagByID`\n   * in order to look up a particular entry.\n   */\n  id: Scalars['ID'];\n  /**\n   * Indicates this schema is \"published\" meaning that our users correspond this schema\n   * with a long-running or permanent initiative. Published schemas appear in the UI\n   * when exploring a service's schemas, and typically refer to either active environments\n   * with metrics (e.g. \"staging\") or git branches that are constantly used as a base\n   * (e.g. \"main\"). If this field is not found, the schema is \"private\" to Engine\n   * and is uploaded but not promoted to published yet. The other benefit is this makes\n   * for nice UX around publishing events\n   */\n  publishedAt: Scalars['Timestamp'];\n  /**\n   * The Identity that published this schema and their client info, or null if this isn't\n   * a publish. Sub-fields may be null if they weren't recorded.\n   */\n  publishedBy?: Maybe<IdentityAndClientInfo>;\n  /**\n   * Indicates the schemaTag of the schema's original upload, null if this is the\n   * first upload of the schema.\n   */\n  reversionFrom?: Maybe<SchemaTag>;\n  schema: Schema;\n  slackNotificationBody?: Maybe<Scalars['String']>;\n  /** @deprecated Please use variant { name } instead */\n  tag: Scalars['String'];\n  /** The graph variant this schema tag belongs to. */\n  variant: GraphVariant;\n  webhookNotificationBody: Scalars['String'];\n};\n\n\nexport type SchemaTagHistoryArgs = {\n  includeUnchanged?: Scalars['Boolean'];\n  limit?: Scalars['Int'];\n  offset?: InputMaybe<Scalars['Int']>;\n};\n\n\nexport type SchemaTagSlackNotificationBodyArgs = {\n  graphDisplayName: Scalars['String'];\n};\n\n/** How many seats of the given types does an organization have (regardless of plan type)? */\nexport type Seats = {\n  __typename?: 'Seats';\n  /** How many members that are free in this organization. */\n  free: Scalars['Int'];\n  /** How many members that are not free in this organization. */\n  fullPrice: Scalars['Int'];\n};\n\nexport type SemanticChange = {\n  __typename?: 'SemanticChange';\n  /** Target arg of change made. */\n  argNode?: Maybe<NamedIntrospectionArg>;\n  /**\n   * Node related to the top level node that was changed, such as a field in an object,\n   * a value in an enum or the object of an interface\n   */\n  childNode?: Maybe<NamedIntrospectionValue>;\n  /** Semantic metadata about the type of change */\n  definition: ChangeDefinition;\n  /** Top level node affected by the change */\n  parentNode?: Maybe<NamedIntrospectionType>;\n};\n\nexport type Service = Identity & {\n  __typename?: 'Service';\n  account?: Maybe<Account>;\n  accountId?: Maybe<Scalars['ID']>;\n  apiKeys?: Maybe<Array<GraphApiKey>>;\n  asActor: Actor;\n  /**\n   * Get an URL to which an avatar image can be uploaded. Client uploads by sending a PUT request\n   * with the image data to MediaUploadInfo.url. Client SHOULD set the \"Content-Type\" header to the\n   * browser-inferred MIME type, and SHOULD set the \"x-apollo-content-filename\" header to the\n   * filename, if such information is available. Client MUST set the \"x-apollo-csrf-token\" header to\n   * MediaUploadInfo.csrfToken.\n   */\n  avatarUpload?: Maybe<AvatarUploadResult>;\n  /**\n   * Get an image URL for the service's avatar. Note that CORS is not enabled for these URLs. The size\n   * argument is used for bandwidth reduction, and should be the size of the image as displayed in the\n   * application. Apollo's media server will downscale larger images to at least the requested size,\n   * but this will not happen for third-party media servers.\n   */\n  avatarUrl?: Maybe<Scalars['String']>;\n  /** Get available notification endpoints */\n  channels?: Maybe<Array<Channel>>;\n  /** Get check configuration for this graph. */\n  checkConfiguration?: Maybe<CheckConfiguration>;\n  /** Get a check workflow for this graph by its ID */\n  checkWorkflow?: Maybe<CheckWorkflow>;\n  /** Get check workflows for this graph ordered by creation time, most recent first. */\n  checkWorkflows: Array<CheckWorkflow>;\n  /**\n   * List of options available for filtering checks for this graph by author.\n   * If a filter is passed, constrains results to match the filter.\n   */\n  checksAuthorOptions: Array<Scalars['String']>;\n  /**\n   * List of options available for filtering checks for this graph by branch.\n   * If a filter is passed, constrains results to match the filter.\n   */\n  checksBranchOptions: Array<Scalars['String']>;\n  /**\n   * List of options available for filtering checks for this graph by subgraph name.\n   * If a filter is passed, constrains results to match the filter.\n   */\n  checksSubgraphOptions: Array<Scalars['String']>;\n  /** Given a graphCompositionID, return the results of composition. This can represent either a validation or a publish. */\n  compositionResultById?: Maybe<CompositionResult>;\n  createdAt: Scalars['Timestamp'];\n  createdBy?: Maybe<Identity>;\n  datadogMetricsConfig?: Maybe<DatadogMetricsConfig>;\n  deletedAt?: Maybe<Scalars['Timestamp']>;\n  description?: Maybe<Scalars['String']>;\n  devGraphOwner?: Maybe<User>;\n  /** Get a GraphQL document by hash */\n  document?: Maybe<Scalars['GraphQLDocument']>;\n  /**\n   * When this is true, this graph will be hidden from non-admin members of the org who haven't been explicitly assigned a\n   * role on this graph.\n   */\n  hiddenFromUninvitedNonAdminAccountMembers: Scalars['Boolean'];\n  id: Scalars['ID'];\n  /**\n   * List of implementing services that comprise a graph. A non-federated graph should have a single implementing service.\n   * Set includeDeleted to see deleted implementing services.\n   */\n  implementingServices?: Maybe<GraphImplementors>;\n  lastReportedAt?: Maybe<Scalars['Timestamp']>;\n  /** Current identity, null if not authenticated. */\n  me?: Maybe<Identity>;\n  /**\n   * This returns the composition result that was most recently published to the graph.\n   * Only identities that canQuerySchemas and canQueryImplementingServices have access\n   * to this field\n   */\n  mostRecentCompositionPublish?: Maybe<CompositionPublishResult>;\n  myRole?: Maybe<UserPermission>;\n  /** @deprecated Use Service.title */\n  name: Scalars['String'];\n  operation?: Maybe<Operation>;\n  /** Gets the operations and their approved changes for this graph, checkID, and operationID. */\n  operationsAcceptedChanges: Array<OperationAcceptedChange>;\n  /** Get an operations check result for a specific check ID */\n  operationsCheck?: Maybe<OperationsCheckResult>;\n  /** Get query triggers for a given variant. If variant is null all the triggers for this service will be gotten. */\n  queryTriggers?: Maybe<Array<QueryTrigger>>;\n  readme?: Maybe<Readme>;\n  /** Registry specific stats for this graph. */\n  registryStatsWindow?: Maybe<RegistryStatsWindow>;\n  /**\n   * Whether registry subscriptions (with any options) are enabled. If variant is not passed, returns true if configuration is present for any variant\n   * @deprecated This field will be removed\n   */\n  registrySubscriptionsEnabled: Scalars['Boolean'];\n  reportingEnabled: Scalars['Boolean'];\n  /** The list of members that can access this graph, accounting for graph role overrides */\n  roleOverrides?: Maybe<Array<RoleOverride>>;\n  /** Which permissions the current user has for interacting with this service */\n  roles?: Maybe<ServiceRoles>;\n  scheduledSummaries: Array<ScheduledSummary>;\n  /** Get a schema by hash OR current tag */\n  schema?: Maybe<Schema>;\n  /** Get the schema tag */\n  schemaTag?: Maybe<SchemaTag>;\n  schemaTagById?: Maybe<SchemaTag>;\n  /**\n   * Get schema tags, with optional filtering to a set of tags. Always sorted by creation\n   * date in reverse chronological order.\n   */\n  schemaTags?: Maybe<Array<SchemaTag>>;\n  /** @deprecated use Service.statsWindow instead */\n  stats: ServiceStatsWindow;\n  statsWindow?: Maybe<ServiceStatsWindow>;\n  /** Generate a test schema publish notification body */\n  testSchemaPublishBody: Scalars['String'];\n  title: Scalars['String'];\n  trace?: Maybe<Trace>;\n  traceStorageEnabled: Scalars['Boolean'];\n  /** A particular variant (sometimes called \"tag\") of the graph, often representing a live traffic environment (such as \"prod\"). Each variant can represent a specific URL or destination to query at, analytics, and its own schema history. */\n  variant?: Maybe<GraphVariant>;\n  /** The list of variants that exist for this graph */\n  variants: Array<GraphVariant>;\n};\n\n\nexport type ServiceAvatarUrlArgs = {\n  size?: Scalars['Int'];\n};\n\n\nexport type ServiceChannelsArgs = {\n  channelIds?: InputMaybe<Array<Scalars['ID']>>;\n};\n\n\nexport type ServiceCheckWorkflowArgs = {\n  id: Scalars['ID'];\n};\n\n\nexport type ServiceCheckWorkflowsArgs = {\n  filter?: InputMaybe<CheckFilterInput>;\n  limit?: Scalars['Int'];\n};\n\n\nexport type ServiceChecksAuthorOptionsArgs = {\n  filter?: InputMaybe<CheckFilterInput>;\n};\n\n\nexport type ServiceChecksBranchOptionsArgs = {\n  filter?: InputMaybe<CheckFilterInput>;\n};\n\n\nexport type ServiceChecksSubgraphOptionsArgs = {\n  filter?: InputMaybe<CheckFilterInput>;\n};\n\n\nexport type ServiceCompositionResultByIdArgs = {\n  id: Scalars['ID'];\n};\n\n\nexport type ServiceDocumentArgs = {\n  hash?: InputMaybe<Scalars['SHA256']>;\n};\n\n\nexport type ServiceImplementingServicesArgs = {\n  graphVariant: Scalars['String'];\n  includeDeleted?: InputMaybe<Scalars['Boolean']>;\n};\n\n\nexport type ServiceLastReportedAtArgs = {\n  graphVariant?: InputMaybe<Scalars['String']>;\n};\n\n\nexport type ServiceMostRecentCompositionPublishArgs = {\n  graphVariant: Scalars['String'];\n};\n\n\nexport type ServiceOperationArgs = {\n  id: Scalars['ID'];\n};\n\n\nexport type ServiceOperationsAcceptedChangesArgs = {\n  checkID: Scalars['ID'];\n  operationID: Scalars['String'];\n};\n\n\nexport type ServiceOperationsCheckArgs = {\n  checkID: Scalars['ID'];\n};\n\n\nexport type ServiceQueryTriggersArgs = {\n  graphVariant?: InputMaybe<Scalars['String']>;\n  operationNames?: InputMaybe<Array<Scalars['String']>>;\n};\n\n\nexport type ServiceRegistryStatsWindowArgs = {\n  from: Scalars['Timestamp'];\n  resolution?: InputMaybe<Resolution>;\n  to?: InputMaybe<Scalars['Timestamp']>;\n};\n\n\nexport type ServiceRegistrySubscriptionsEnabledArgs = {\n  graphVariant?: InputMaybe<Scalars['String']>;\n};\n\n\nexport type ServiceSchemaArgs = {\n  hash?: InputMaybe<Scalars['ID']>;\n  tag?: InputMaybe<Scalars['String']>;\n};\n\n\nexport type ServiceSchemaTagArgs = {\n  tag: Scalars['String'];\n};\n\n\nexport type ServiceSchemaTagByIdArgs = {\n  id: Scalars['ID'];\n};\n\n\nexport type ServiceSchemaTagsArgs = {\n  tags?: InputMaybe<Array<Scalars['String']>>;\n};\n\n\nexport type ServiceStatsArgs = {\n  from: Scalars['Timestamp'];\n  resolution?: InputMaybe<Resolution>;\n  to?: InputMaybe<Scalars['Timestamp']>;\n};\n\n\nexport type ServiceStatsWindowArgs = {\n  from: Scalars['Timestamp'];\n  resolution?: InputMaybe<Resolution>;\n  to?: InputMaybe<Scalars['Timestamp']>;\n};\n\n\nexport type ServiceTestSchemaPublishBodyArgs = {\n  variant: Scalars['String'];\n};\n\n\nexport type ServiceTraceArgs = {\n  id: Scalars['ID'];\n};\n\n\nexport type ServiceVariantArgs = {\n  name: Scalars['String'];\n};\n\n/** Columns of ServiceEdgeServerInfos. */\nexport enum ServiceEdgeServerInfosColumn {\n  BootId = 'BOOT_ID',\n  ExecutableSchemaId = 'EXECUTABLE_SCHEMA_ID',\n  LibraryVersion = 'LIBRARY_VERSION',\n  Platform = 'PLATFORM',\n  RuntimeVersion = 'RUNTIME_VERSION',\n  SchemaTag = 'SCHEMA_TAG',\n  ServerId = 'SERVER_ID',\n  Timestamp = 'TIMESTAMP',\n  UserVersion = 'USER_VERSION'\n}\n\nexport type ServiceEdgeServerInfosDimensions = {\n  __typename?: 'ServiceEdgeServerInfosDimensions';\n  bootId?: Maybe<Scalars['ID']>;\n  executableSchemaId?: Maybe<Scalars['ID']>;\n  libraryVersion?: Maybe<Scalars['String']>;\n  platform?: Maybe<Scalars['String']>;\n  runtimeVersion?: Maybe<Scalars['String']>;\n  schemaTag?: Maybe<Scalars['String']>;\n  serverId?: Maybe<Scalars['ID']>;\n  userVersion?: Maybe<Scalars['String']>;\n};\n\n/** Filter for data in ServiceEdgeServerInfos. Fields with dimension names represent equality checks. All fields are implicitly ANDed together. */\nexport type ServiceEdgeServerInfosFilter = {\n  and?: InputMaybe<Array<ServiceEdgeServerInfosFilter>>;\n  /** Selects rows whose bootId dimension equals the given value if not null. To query for the null value, use {in: {bootId: [null]}} instead. */\n  bootId?: InputMaybe<Scalars['ID']>;\n  /** Selects rows whose executableSchemaId dimension equals the given value if not null. To query for the null value, use {in: {executableSchemaId: [null]}} instead. */\n  executableSchemaId?: InputMaybe<Scalars['ID']>;\n  in?: InputMaybe<ServiceEdgeServerInfosFilterIn>;\n  /** Selects rows whose libraryVersion dimension equals the given value if not null. To query for the null value, use {in: {libraryVersion: [null]}} instead. */\n  libraryVersion?: InputMaybe<Scalars['String']>;\n  not?: InputMaybe<ServiceEdgeServerInfosFilter>;\n  or?: InputMaybe<Array<ServiceEdgeServerInfosFilter>>;\n  /** Selects rows whose platform dimension equals the given value if not null. To query for the null value, use {in: {platform: [null]}} instead. */\n  platform?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose runtimeVersion dimension equals the given value if not null. To query for the null value, use {in: {runtimeVersion: [null]}} instead. */\n  runtimeVersion?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose schemaTag dimension equals the given value if not null. To query for the null value, use {in: {schemaTag: [null]}} instead. */\n  schemaTag?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose serverId dimension equals the given value if not null. To query for the null value, use {in: {serverId: [null]}} instead. */\n  serverId?: InputMaybe<Scalars['ID']>;\n  /** Selects rows whose userVersion dimension equals the given value if not null. To query for the null value, use {in: {userVersion: [null]}} instead. */\n  userVersion?: InputMaybe<Scalars['String']>;\n};\n\n/** Filter for data in ServiceEdgeServerInfos. Fields match if the corresponding dimension's value is in the given list. All fields are implicitly ANDed together. */\nexport type ServiceEdgeServerInfosFilterIn = {\n  /** Selects rows whose bootId dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  bootId?: InputMaybe<Array<InputMaybe<Scalars['ID']>>>;\n  /** Selects rows whose executableSchemaId dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  executableSchemaId?: InputMaybe<Array<InputMaybe<Scalars['ID']>>>;\n  /** Selects rows whose libraryVersion dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  libraryVersion?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose platform dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  platform?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose runtimeVersion dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  runtimeVersion?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose schemaTag dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  schemaTag?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose serverId dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  serverId?: InputMaybe<Array<InputMaybe<Scalars['ID']>>>;\n  /** Selects rows whose userVersion dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  userVersion?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n};\n\nexport type ServiceEdgeServerInfosOrderBySpec = {\n  column: ServiceEdgeServerInfosColumn;\n  direction: Ordering;\n};\n\nexport type ServiceEdgeServerInfosRecord = {\n  __typename?: 'ServiceEdgeServerInfosRecord';\n  /** Dimensions of ServiceEdgeServerInfos that can be grouped by. */\n  groupBy: ServiceEdgeServerInfosDimensions;\n  /** Starting segment timestamp. */\n  timestamp: Scalars['Timestamp'];\n};\n\n/** Columns of ServiceErrorStats. */\nexport enum ServiceErrorStatsColumn {\n  ClientName = 'CLIENT_NAME',\n  ClientVersion = 'CLIENT_VERSION',\n  ErrorsCount = 'ERRORS_COUNT',\n  Path = 'PATH',\n  QueryId = 'QUERY_ID',\n  QueryName = 'QUERY_NAME',\n  RequestsWithErrorsCount = 'REQUESTS_WITH_ERRORS_COUNT',\n  SchemaHash = 'SCHEMA_HASH',\n  SchemaTag = 'SCHEMA_TAG',\n  Timestamp = 'TIMESTAMP'\n}\n\nexport type ServiceErrorStatsDimensions = {\n  __typename?: 'ServiceErrorStatsDimensions';\n  clientName?: Maybe<Scalars['String']>;\n  clientVersion?: Maybe<Scalars['String']>;\n  path?: Maybe<Scalars['String']>;\n  queryId?: Maybe<Scalars['ID']>;\n  queryName?: Maybe<Scalars['String']>;\n  schemaHash?: Maybe<Scalars['String']>;\n  schemaTag?: Maybe<Scalars['String']>;\n};\n\n/** Filter for data in ServiceErrorStats. Fields with dimension names represent equality checks. All fields are implicitly ANDed together. */\nexport type ServiceErrorStatsFilter = {\n  and?: InputMaybe<Array<ServiceErrorStatsFilter>>;\n  /** Selects rows whose clientName dimension equals the given value if not null. To query for the null value, use {in: {clientName: [null]}} instead. */\n  clientName?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose clientVersion dimension equals the given value if not null. To query for the null value, use {in: {clientVersion: [null]}} instead. */\n  clientVersion?: InputMaybe<Scalars['String']>;\n  in?: InputMaybe<ServiceErrorStatsFilterIn>;\n  not?: InputMaybe<ServiceErrorStatsFilter>;\n  or?: InputMaybe<Array<ServiceErrorStatsFilter>>;\n  /** Selects rows whose path dimension equals the given value if not null. To query for the null value, use {in: {path: [null]}} instead. */\n  path?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose queryId dimension equals the given value if not null. To query for the null value, use {in: {queryId: [null]}} instead. */\n  queryId?: InputMaybe<Scalars['ID']>;\n  /** Selects rows whose queryName dimension equals the given value if not null. To query for the null value, use {in: {queryName: [null]}} instead. */\n  queryName?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose schemaHash dimension equals the given value if not null. To query for the null value, use {in: {schemaHash: [null]}} instead. */\n  schemaHash?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose schemaTag dimension equals the given value if not null. To query for the null value, use {in: {schemaTag: [null]}} instead. */\n  schemaTag?: InputMaybe<Scalars['String']>;\n};\n\n/** Filter for data in ServiceErrorStats. Fields match if the corresponding dimension's value is in the given list. All fields are implicitly ANDed together. */\nexport type ServiceErrorStatsFilterIn = {\n  /** Selects rows whose clientName dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  clientName?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose clientVersion dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  clientVersion?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose path dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  path?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose queryId dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  queryId?: InputMaybe<Array<InputMaybe<Scalars['ID']>>>;\n  /** Selects rows whose queryName dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  queryName?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose schemaHash dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  schemaHash?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose schemaTag dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  schemaTag?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n};\n\nexport type ServiceErrorStatsMetrics = {\n  __typename?: 'ServiceErrorStatsMetrics';\n  errorsCount: Scalars['Long'];\n  requestsWithErrorsCount: Scalars['Long'];\n};\n\nexport type ServiceErrorStatsOrderBySpec = {\n  column: ServiceErrorStatsColumn;\n  direction: Ordering;\n};\n\nexport type ServiceErrorStatsRecord = {\n  __typename?: 'ServiceErrorStatsRecord';\n  /** Dimensions of ServiceErrorStats that can be grouped by. */\n  groupBy: ServiceErrorStatsDimensions;\n  /** Metrics of ServiceErrorStats that can be aggregated over. */\n  metrics: ServiceErrorStatsMetrics;\n  /** Starting segment timestamp. */\n  timestamp: Scalars['Timestamp'];\n};\n\n/** Columns of ServiceFieldLatencies. */\nexport enum ServiceFieldLatenciesColumn {\n  FieldHistogram = 'FIELD_HISTOGRAM',\n  FieldName = 'FIELD_NAME',\n  ParentType = 'PARENT_TYPE',\n  SchemaHash = 'SCHEMA_HASH',\n  SchemaTag = 'SCHEMA_TAG',\n  Timestamp = 'TIMESTAMP'\n}\n\nexport type ServiceFieldLatenciesDimensions = {\n  __typename?: 'ServiceFieldLatenciesDimensions';\n  field?: Maybe<Scalars['String']>;\n  fieldName?: Maybe<Scalars['String']>;\n  parentType?: Maybe<Scalars['String']>;\n  schemaHash?: Maybe<Scalars['String']>;\n  schemaTag?: Maybe<Scalars['String']>;\n};\n\n/** Filter for data in ServiceFieldLatencies. Fields with dimension names represent equality checks. All fields are implicitly ANDed together. */\nexport type ServiceFieldLatenciesFilter = {\n  and?: InputMaybe<Array<ServiceFieldLatenciesFilter>>;\n  /** Selects rows whose fieldName dimension equals the given value if not null. To query for the null value, use {in: {fieldName: [null]}} instead. */\n  fieldName?: InputMaybe<Scalars['String']>;\n  in?: InputMaybe<ServiceFieldLatenciesFilterIn>;\n  not?: InputMaybe<ServiceFieldLatenciesFilter>;\n  or?: InputMaybe<Array<ServiceFieldLatenciesFilter>>;\n  /** Selects rows whose parentType dimension equals the given value if not null. To query for the null value, use {in: {parentType: [null]}} instead. */\n  parentType?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose schemaHash dimension equals the given value if not null. To query for the null value, use {in: {schemaHash: [null]}} instead. */\n  schemaHash?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose schemaTag dimension equals the given value if not null. To query for the null value, use {in: {schemaTag: [null]}} instead. */\n  schemaTag?: InputMaybe<Scalars['String']>;\n};\n\n/** Filter for data in ServiceFieldLatencies. Fields match if the corresponding dimension's value is in the given list. All fields are implicitly ANDed together. */\nexport type ServiceFieldLatenciesFilterIn = {\n  /** Selects rows whose fieldName dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  fieldName?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose parentType dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  parentType?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose schemaHash dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  schemaHash?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose schemaTag dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  schemaTag?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n};\n\nexport type ServiceFieldLatenciesMetrics = {\n  __typename?: 'ServiceFieldLatenciesMetrics';\n  fieldHistogram: DurationHistogram;\n};\n\nexport type ServiceFieldLatenciesOrderBySpec = {\n  column: ServiceFieldLatenciesColumn;\n  direction: Ordering;\n};\n\nexport type ServiceFieldLatenciesRecord = {\n  __typename?: 'ServiceFieldLatenciesRecord';\n  /** Dimensions of ServiceFieldLatencies that can be grouped by. */\n  groupBy: ServiceFieldLatenciesDimensions;\n  /** Metrics of ServiceFieldLatencies that can be aggregated over. */\n  metrics: ServiceFieldLatenciesMetrics;\n  /** Starting segment timestamp. */\n  timestamp: Scalars['Timestamp'];\n};\n\n/** Columns of ServiceFieldUsage. */\nexport enum ServiceFieldUsageColumn {\n  ClientName = 'CLIENT_NAME',\n  ClientVersion = 'CLIENT_VERSION',\n  EstimatedExecutionCount = 'ESTIMATED_EXECUTION_COUNT',\n  ExecutionCount = 'EXECUTION_COUNT',\n  Field = 'FIELD',\n  FieldName = 'FIELD_NAME',\n  ParentType = 'PARENT_TYPE',\n  QueryId = 'QUERY_ID',\n  QueryName = 'QUERY_NAME',\n  ReferencingOperationCount = 'REFERENCING_OPERATION_COUNT',\n  SchemaHash = 'SCHEMA_HASH',\n  SchemaTag = 'SCHEMA_TAG',\n  Timestamp = 'TIMESTAMP'\n}\n\nexport type ServiceFieldUsageDimensions = {\n  __typename?: 'ServiceFieldUsageDimensions';\n  clientName?: Maybe<Scalars['String']>;\n  clientVersion?: Maybe<Scalars['String']>;\n  field?: Maybe<Scalars['String']>;\n  fieldName?: Maybe<Scalars['String']>;\n  parentType?: Maybe<Scalars['String']>;\n  queryId?: Maybe<Scalars['ID']>;\n  queryName?: Maybe<Scalars['String']>;\n  schemaHash?: Maybe<Scalars['String']>;\n  schemaTag?: Maybe<Scalars['String']>;\n};\n\n/** Filter for data in ServiceFieldUsage. Fields with dimension names represent equality checks. All fields are implicitly ANDed together. */\nexport type ServiceFieldUsageFilter = {\n  and?: InputMaybe<Array<ServiceFieldUsageFilter>>;\n  /** Selects rows whose clientName dimension equals the given value if not null. To query for the null value, use {in: {clientName: [null]}} instead. */\n  clientName?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose clientVersion dimension equals the given value if not null. To query for the null value, use {in: {clientVersion: [null]}} instead. */\n  clientVersion?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose field dimension equals the given value if not null. To query for the null value, use {in: {field: [null]}} instead. */\n  field?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose fieldName dimension equals the given value if not null. To query for the null value, use {in: {fieldName: [null]}} instead. */\n  fieldName?: InputMaybe<Scalars['String']>;\n  in?: InputMaybe<ServiceFieldUsageFilterIn>;\n  not?: InputMaybe<ServiceFieldUsageFilter>;\n  or?: InputMaybe<Array<ServiceFieldUsageFilter>>;\n  /** Selects rows whose parentType dimension equals the given value if not null. To query for the null value, use {in: {parentType: [null]}} instead. */\n  parentType?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose queryId dimension equals the given value if not null. To query for the null value, use {in: {queryId: [null]}} instead. */\n  queryId?: InputMaybe<Scalars['ID']>;\n  /** Selects rows whose queryName dimension equals the given value if not null. To query for the null value, use {in: {queryName: [null]}} instead. */\n  queryName?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose schemaHash dimension equals the given value if not null. To query for the null value, use {in: {schemaHash: [null]}} instead. */\n  schemaHash?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose schemaTag dimension equals the given value if not null. To query for the null value, use {in: {schemaTag: [null]}} instead. */\n  schemaTag?: InputMaybe<Scalars['String']>;\n};\n\n/** Filter for data in ServiceFieldUsage. Fields match if the corresponding dimension's value is in the given list. All fields are implicitly ANDed together. */\nexport type ServiceFieldUsageFilterIn = {\n  /** Selects rows whose clientName dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  clientName?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose clientVersion dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  clientVersion?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose field dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  field?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose fieldName dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  fieldName?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose parentType dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  parentType?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose queryId dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  queryId?: InputMaybe<Array<InputMaybe<Scalars['ID']>>>;\n  /** Selects rows whose queryName dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  queryName?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose schemaHash dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  schemaHash?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose schemaTag dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  schemaTag?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n};\n\nexport type ServiceFieldUsageMetrics = {\n  __typename?: 'ServiceFieldUsageMetrics';\n  estimatedExecutionCount: Scalars['Long'];\n  executionCount: Scalars['Long'];\n  referencingOperationCount: Scalars['Long'];\n};\n\nexport type ServiceFieldUsageOrderBySpec = {\n  column: ServiceFieldUsageColumn;\n  direction: Ordering;\n};\n\nexport type ServiceFieldUsageRecord = {\n  __typename?: 'ServiceFieldUsageRecord';\n  /** Dimensions of ServiceFieldUsage that can be grouped by. */\n  groupBy: ServiceFieldUsageDimensions;\n  /** Metrics of ServiceFieldUsage that can be aggregated over. */\n  metrics: ServiceFieldUsageMetrics;\n  /** Starting segment timestamp. */\n  timestamp: Scalars['Timestamp'];\n};\n\nexport type ServiceMutation = {\n  __typename?: 'ServiceMutation';\n  /**\n   * Compose an implementing service's partial schema, diff the composed schema, validate traffic against that schema,\n   * and store the result so the details can be viewed by users in the UI.\n   * This mutation will not mark the schema as \"published\".\n   */\n  checkPartialSchema: CheckPartialSchemaResult;\n  /**\n   * Checks a proposed schema against the schema that has been published to\n   * a particular tag, using metrics that have been published to the base tag.\n   * Callers can set the historicParameters directly, which will be used if\n   * provided. If useMaximumRetention is provided, but historicParameters is not,\n   * then validation will use the maximum retention the graph has access to.\n   * If neither historicParameters nor useMaximumRetention is provided, the\n   * default time range of one week (7 days) will be used.\n   */\n  checkSchema: CheckSchemaResult;\n  /** Make changes to a check workflow. */\n  checkWorkflow?: Maybe<CheckWorkflowMutation>;\n  createCompositionStatusSubscription: SchemaPublishSubscription;\n  createSchemaPublishSubscription: SchemaPublishSubscription;\n  /** Soft delete a graph. Data associated with the graph is not permanently deleted; Apollo support can undo. */\n  delete?: Maybe<Scalars['Void']>;\n  /** Delete the service's avatar. Requires Service.roles.canUpdateAvatar to be true. */\n  deleteAvatar?: Maybe<AvatarDeleteError>;\n  /** Delete an existing channel */\n  deleteChannel: Scalars['Boolean'];\n  /** Delete an existing query trigger */\n  deleteQueryTrigger: Scalars['Boolean'];\n  /** Deletes this service's current subscriptions specific to the ID, returns true if it existed */\n  deleteRegistrySubscription: Scalars['Boolean'];\n  /**\n   * Deletes this service's current registry subscription(s) specific to its graph variant,\n   * returns a list of subscription IDs that were deleted.\n   */\n  deleteRegistrySubscriptions: Array<Scalars['ID']>;\n  deleteScheduledSummary: Scalars['Boolean'];\n  deleteSchemaTag: DeleteSchemaTagResult;\n  /** Given a UTC timestamp, delete all traces associated with this Service, on that corresponding day. If a timestamp to is provided, deletes all days inclusive. */\n  deleteTraces?: Maybe<Scalars['Void']>;\n  disableDatadogForwardingLegacyMetricNames?: Maybe<Service>;\n  /** Hard delete a graph and all data associated with it. Its ID cannot be reused. */\n  hardDelete?: Maybe<Scalars['Void']>;\n  /** @deprecated Use service.id */\n  id: Scalars['ID'];\n  /**\n   * Ignore an operation in future checks;\n   * changes affecting it will be tracked,\n   * but won't affect the outcome of the check.\n   * Returns true if the operation is newly ignored,\n   * false if it already was.\n   */\n  ignoreOperationsInChecks?: Maybe<IgnoreOperationsInChecksResult>;\n  /**\n   * Mark the changeset that affects an operation in a given check instance as safe.\n   * Note that only operations marked as behavior changes are allowed to be marked as safe.\n   */\n  markChangesForOperationAsSafe: MarkChangesForOperationAsSafeResult;\n  newKey: GraphApiKey;\n  /** Adds an override to the given users permission for this graph */\n  overrideUserPermission?: Maybe<Service>;\n  /** Returns a preview of the Core and API schema contracts derived from a source variant and a set of filter configurations */\n  previewContractVariant: ContractVariantPreviewResult;\n  /** Promote the schema with the given SHA-256 hash to active for the given variant/tag. */\n  promoteSchema: PromoteSchemaResponseOrError;\n  registerOperationsWithResponse?: Maybe<RegisterOperationsMutationResponse>;\n  removeImplementingServiceAndTriggerComposition: CompositionAndRemoveResult;\n  removeKey?: Maybe<Scalars['Void']>;\n  renameKey?: Maybe<GraphApiKey>;\n  /** @deprecated use Mutation.reportSchema instead */\n  reportServerInfo?: Maybe<ReportServerInfoResult>;\n  service: Service;\n  /**\n   * Store a given schema document. This schema will be attached to the graph but\n   * not be associated with any variant. On success, returns the schema hash.\n   */\n  storeSchemaDocument: StoreSchemaResponseOrError;\n  /** Test Slack notification channel */\n  testSlackChannel?: Maybe<Scalars['Void']>;\n  testSubscriptionForChannel: Scalars['String'];\n  transfer?: Maybe<Service>;\n  triggerRepublish?: Maybe<Scalars['Void']>;\n  undelete?: Maybe<Service>;\n  /**\n   * Revert the effects of ignoreOperation.\n   * Returns true if the operation is no longer ignored,\n   * false if it wasn't.\n   */\n  unignoreOperationsInChecks?: Maybe<UnignoreOperationsInChecksResult>;\n  /** Unmark changes for an operation as safe. */\n  unmarkChangesForOperationAsSafe: MarkChangesForOperationAsSafeResult;\n  /** Update schema check configuration for a graph. */\n  updateCheckConfiguration: CheckConfiguration;\n  updateDatadogMetricsConfig?: Maybe<DatadogMetricsConfig>;\n  updateDescription?: Maybe<Service>;\n  /** Update hiddenFromUninvitedNonAdminAccountMembers */\n  updateHiddenFromUninvitedNonAdminAccountMembers?: Maybe<Service>;\n  updateReadme?: Maybe<Service>;\n  updateTitle?: Maybe<Service>;\n  uploadSchema?: Maybe<UploadSchemaMutationResponse>;\n  upsertChannel?: Maybe<Channel>;\n  /** Creates a contract schema from a source variant and a set of filter configurations */\n  upsertContractVariant: ContractVariantUpsertResult;\n  upsertImplementingServiceAndTriggerComposition?: Maybe<CompositionAndUpsertResult>;\n  /** Create/update PagerDuty notification channel */\n  upsertPagerDutyChannel?: Maybe<PagerDutyChannel>;\n  upsertQueryTrigger?: Maybe<QueryTrigger>;\n  /** Create or update a subscription for a service. */\n  upsertRegistrySubscription: RegistrySubscription;\n  upsertScheduledSummary?: Maybe<ScheduledSummary>;\n  /** Create/update Slack notification channel */\n  upsertSlackChannel?: Maybe<SlackChannel>;\n  upsertWebhookChannel?: Maybe<WebhookChannel>;\n  validateOperations: ValidateOperationsResult;\n  /**\n   * This mutation will not result in any changes to the implementing service\n   * Run composition with the Implementing Service's partial schema replaced with the one provided\n   * in the mutation's input. Store the composed schema, return the hash of the composed schema,\n   * and any warnings and errors pertaining to composition.\n   * This mutation will not run validation against operations.\n   */\n  validatePartialSchemaOfImplementingServiceAgainstGraph: CompositionValidationResult;\n  /** Make changes to a graph variant. */\n  variant?: Maybe<GraphVariantMutation>;\n};\n\n\nexport type ServiceMutationCheckPartialSchemaArgs = {\n  frontend?: InputMaybe<Scalars['String']>;\n  gitContext?: InputMaybe<GitContextInput>;\n  graphVariant: Scalars['String'];\n  historicParameters?: InputMaybe<HistoricQueryParameters>;\n  implementingServiceName: Scalars['String'];\n  partialSchema: PartialSchemaInput;\n  useMaximumRetention?: InputMaybe<Scalars['Boolean']>;\n};\n\n\nexport type ServiceMutationCheckSchemaArgs = {\n  baseSchemaTag?: InputMaybe<Scalars['String']>;\n  frontend?: InputMaybe<Scalars['String']>;\n  gitContext?: InputMaybe<GitContextInput>;\n  historicParameters?: InputMaybe<HistoricQueryParameters>;\n  introspectionEndpoint?: InputMaybe<Scalars['String']>;\n  isSandboxCheck?: Scalars['Boolean'];\n  proposedSchema?: InputMaybe<IntrospectionSchemaInput>;\n  proposedSchemaDocument?: InputMaybe<Scalars['String']>;\n  proposedSchemaHash?: InputMaybe<Scalars['String']>;\n  useMaximumRetention?: InputMaybe<Scalars['Boolean']>;\n};\n\n\nexport type ServiceMutationCheckWorkflowArgs = {\n  id: Scalars['ID'];\n};\n\n\nexport type ServiceMutationCreateCompositionStatusSubscriptionArgs = {\n  channelID: Scalars['ID'];\n  variant: Scalars['String'];\n};\n\n\nexport type ServiceMutationCreateSchemaPublishSubscriptionArgs = {\n  channelID: Scalars['ID'];\n  variant: Scalars['String'];\n};\n\n\nexport type ServiceMutationDeleteChannelArgs = {\n  id: Scalars['ID'];\n};\n\n\nexport type ServiceMutationDeleteQueryTriggerArgs = {\n  id: Scalars['ID'];\n};\n\n\nexport type ServiceMutationDeleteRegistrySubscriptionArgs = {\n  id: Scalars['ID'];\n};\n\n\nexport type ServiceMutationDeleteRegistrySubscriptionsArgs = {\n  variant: Scalars['String'];\n};\n\n\nexport type ServiceMutationDeleteScheduledSummaryArgs = {\n  id: Scalars['ID'];\n};\n\n\nexport type ServiceMutationDeleteSchemaTagArgs = {\n  tag: Scalars['String'];\n};\n\n\nexport type ServiceMutationDeleteTracesArgs = {\n  from: Scalars['Timestamp'];\n  to?: InputMaybe<Scalars['Timestamp']>;\n};\n\n\nexport type ServiceMutationIgnoreOperationsInChecksArgs = {\n  ids: Array<Scalars['ID']>;\n};\n\n\nexport type ServiceMutationMarkChangesForOperationAsSafeArgs = {\n  checkID: Scalars['ID'];\n  operationID: Scalars['ID'];\n};\n\n\nexport type ServiceMutationNewKeyArgs = {\n  keyName?: InputMaybe<Scalars['String']>;\n  role?: UserPermission;\n};\n\n\nexport type ServiceMutationOverrideUserPermissionArgs = {\n  permission?: InputMaybe<UserPermission>;\n  userID: Scalars['ID'];\n};\n\n\nexport type ServiceMutationPreviewContractVariantArgs = {\n  filterConfig: FilterConfigInput;\n  sourceVariant: Scalars['String'];\n};\n\n\nexport type ServiceMutationPromoteSchemaArgs = {\n  graphVariant: Scalars['String'];\n  historicParameters?: InputMaybe<HistoricQueryParameters>;\n  overrideComposedSchema?: Scalars['Boolean'];\n  sha256: Scalars['SHA256'];\n};\n\n\nexport type ServiceMutationRegisterOperationsWithResponseArgs = {\n  clientIdentity?: InputMaybe<RegisteredClientIdentityInput>;\n  gitContext?: InputMaybe<GitContextInput>;\n  graphVariant?: Scalars['String'];\n  manifestVersion?: InputMaybe<Scalars['Int']>;\n  operations: Array<RegisteredOperationInput>;\n};\n\n\nexport type ServiceMutationRemoveImplementingServiceAndTriggerCompositionArgs = {\n  dryRun?: Scalars['Boolean'];\n  graphVariant: Scalars['String'];\n  name: Scalars['String'];\n};\n\n\nexport type ServiceMutationRemoveKeyArgs = {\n  id?: InputMaybe<Scalars['ID']>;\n};\n\n\nexport type ServiceMutationRenameKeyArgs = {\n  id: Scalars['ID'];\n  newKeyName?: InputMaybe<Scalars['String']>;\n};\n\n\nexport type ServiceMutationReportServerInfoArgs = {\n  executableSchema?: InputMaybe<Scalars['String']>;\n  info: EdgeServerInfo;\n};\n\n\nexport type ServiceMutationStoreSchemaDocumentArgs = {\n  schemaDocument: Scalars['String'];\n};\n\n\nexport type ServiceMutationTestSlackChannelArgs = {\n  id: Scalars['ID'];\n  notification: SlackNotificationInput;\n};\n\n\nexport type ServiceMutationTestSubscriptionForChannelArgs = {\n  channelID: Scalars['ID'];\n  subscriptionID: Scalars['ID'];\n};\n\n\nexport type ServiceMutationTransferArgs = {\n  to: Scalars['String'];\n};\n\n\nexport type ServiceMutationTriggerRepublishArgs = {\n  graphVariant: Scalars['String'];\n};\n\n\nexport type ServiceMutationUnignoreOperationsInChecksArgs = {\n  ids: Array<Scalars['ID']>;\n};\n\n\nexport type ServiceMutationUnmarkChangesForOperationAsSafeArgs = {\n  checkID: Scalars['ID'];\n  operationID: Scalars['ID'];\n};\n\n\nexport type ServiceMutationUpdateCheckConfigurationArgs = {\n  excludedClients?: InputMaybe<Array<ClientFilterInput>>;\n  excludedOperations?: InputMaybe<Array<ExcludedOperationInput>>;\n  includeBaseVariant?: InputMaybe<Scalars['Boolean']>;\n  includedVariants?: InputMaybe<Array<Scalars['String']>>;\n  operationCountThreshold?: InputMaybe<Scalars['Int']>;\n  operationCountThresholdPercentage?: InputMaybe<Scalars['Float']>;\n  timeRangeSeconds?: InputMaybe<Scalars['Long']>;\n};\n\n\nexport type ServiceMutationUpdateDatadogMetricsConfigArgs = {\n  apiKey?: InputMaybe<Scalars['String']>;\n  apiRegion?: InputMaybe<DatadogApiRegion>;\n  enabled?: InputMaybe<Scalars['Boolean']>;\n};\n\n\nexport type ServiceMutationUpdateDescriptionArgs = {\n  description: Scalars['String'];\n};\n\n\nexport type ServiceMutationUpdateHiddenFromUninvitedNonAdminAccountMembersArgs = {\n  hiddenFromUninvitedNonAdminAccountMembers: Scalars['Boolean'];\n};\n\n\nexport type ServiceMutationUpdateReadmeArgs = {\n  readme: Scalars['String'];\n};\n\n\nexport type ServiceMutationUpdateTitleArgs = {\n  title: Scalars['String'];\n};\n\n\nexport type ServiceMutationUploadSchemaArgs = {\n  errorOnBadRequest?: Scalars['Boolean'];\n  gitContext?: InputMaybe<GitContextInput>;\n  historicParameters?: InputMaybe<HistoricQueryParameters>;\n  overrideComposedSchema?: Scalars['Boolean'];\n  schema?: InputMaybe<IntrospectionSchemaInput>;\n  schemaDocument?: InputMaybe<Scalars['String']>;\n  tag: Scalars['String'];\n};\n\n\nexport type ServiceMutationUpsertChannelArgs = {\n  id?: InputMaybe<Scalars['ID']>;\n  pagerDutyChannel?: InputMaybe<PagerDutyChannelInput>;\n  slackChannel?: InputMaybe<SlackChannelInput>;\n  webhookChannel?: InputMaybe<WebhookChannelInput>;\n};\n\n\nexport type ServiceMutationUpsertContractVariantArgs = {\n  contractVariantName: Scalars['String'];\n  filterConfig: FilterConfigInput;\n  initiateLaunch?: Scalars['Boolean'];\n  sourceVariant: Scalars['String'];\n};\n\n\nexport type ServiceMutationUpsertImplementingServiceAndTriggerCompositionArgs = {\n  activePartialSchema: PartialSchemaInput;\n  gitContext?: InputMaybe<GitContextInput>;\n  graphVariant: Scalars['String'];\n  name: Scalars['String'];\n  revision: Scalars['String'];\n  url?: InputMaybe<Scalars['String']>;\n};\n\n\nexport type ServiceMutationUpsertPagerDutyChannelArgs = {\n  channel: PagerDutyChannelInput;\n  id?: InputMaybe<Scalars['ID']>;\n};\n\n\nexport type ServiceMutationUpsertQueryTriggerArgs = {\n  id?: InputMaybe<Scalars['ID']>;\n  trigger: QueryTriggerInput;\n};\n\n\nexport type ServiceMutationUpsertRegistrySubscriptionArgs = {\n  channelID?: InputMaybe<Scalars['ID']>;\n  id?: InputMaybe<Scalars['ID']>;\n  options?: InputMaybe<SubscriptionOptionsInput>;\n  variant?: InputMaybe<Scalars['String']>;\n};\n\n\nexport type ServiceMutationUpsertScheduledSummaryArgs = {\n  channelID?: InputMaybe<Scalars['ID']>;\n  enabled?: InputMaybe<Scalars['Boolean']>;\n  id?: InputMaybe<Scalars['ID']>;\n  tag?: InputMaybe<Scalars['String']>;\n  timezone?: InputMaybe<Scalars['String']>;\n  variant?: InputMaybe<Scalars['String']>;\n};\n\n\nexport type ServiceMutationUpsertSlackChannelArgs = {\n  channel: SlackChannelInput;\n  id?: InputMaybe<Scalars['ID']>;\n};\n\n\nexport type ServiceMutationUpsertWebhookChannelArgs = {\n  id?: InputMaybe<Scalars['ID']>;\n  name?: InputMaybe<Scalars['String']>;\n  secretToken?: InputMaybe<Scalars['String']>;\n  url: Scalars['String'];\n};\n\n\nexport type ServiceMutationValidateOperationsArgs = {\n  gitContext?: InputMaybe<GitContextInput>;\n  operations: Array<OperationDocumentInput>;\n  tag?: InputMaybe<Scalars['String']>;\n};\n\n\nexport type ServiceMutationValidatePartialSchemaOfImplementingServiceAgainstGraphArgs = {\n  graphVariant: Scalars['String'];\n  implementingServiceName: Scalars['String'];\n  partialSchema: PartialSchemaInput;\n};\n\n\nexport type ServiceMutationVariantArgs = {\n  name: Scalars['String'];\n};\n\n/** Columns of ServiceOperationCheckStats. */\nexport enum ServiceOperationCheckStatsColumn {\n  CachedRequestsCount = 'CACHED_REQUESTS_COUNT',\n  ClientName = 'CLIENT_NAME',\n  ClientVersion = 'CLIENT_VERSION',\n  QueryId = 'QUERY_ID',\n  QueryName = 'QUERY_NAME',\n  SchemaTag = 'SCHEMA_TAG',\n  Timestamp = 'TIMESTAMP',\n  UncachedRequestsCount = 'UNCACHED_REQUESTS_COUNT'\n}\n\nexport type ServiceOperationCheckStatsDimensions = {\n  __typename?: 'ServiceOperationCheckStatsDimensions';\n  clientName?: Maybe<Scalars['String']>;\n  clientVersion?: Maybe<Scalars['String']>;\n  queryId?: Maybe<Scalars['ID']>;\n  queryName?: Maybe<Scalars['String']>;\n  schemaTag?: Maybe<Scalars['String']>;\n};\n\n/** Filter for data in ServiceOperationCheckStats. Fields with dimension names represent equality checks. All fields are implicitly ANDed together. */\nexport type ServiceOperationCheckStatsFilter = {\n  and?: InputMaybe<Array<ServiceOperationCheckStatsFilter>>;\n  /** Selects rows whose clientName dimension equals the given value if not null. To query for the null value, use {in: {clientName: [null]}} instead. */\n  clientName?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose clientVersion dimension equals the given value if not null. To query for the null value, use {in: {clientVersion: [null]}} instead. */\n  clientVersion?: InputMaybe<Scalars['String']>;\n  in?: InputMaybe<ServiceOperationCheckStatsFilterIn>;\n  not?: InputMaybe<ServiceOperationCheckStatsFilter>;\n  or?: InputMaybe<Array<ServiceOperationCheckStatsFilter>>;\n  /** Selects rows whose queryId dimension equals the given value if not null. To query for the null value, use {in: {queryId: [null]}} instead. */\n  queryId?: InputMaybe<Scalars['ID']>;\n  /** Selects rows whose queryName dimension equals the given value if not null. To query for the null value, use {in: {queryName: [null]}} instead. */\n  queryName?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose schemaTag dimension equals the given value if not null. To query for the null value, use {in: {schemaTag: [null]}} instead. */\n  schemaTag?: InputMaybe<Scalars['String']>;\n};\n\n/** Filter for data in ServiceOperationCheckStats. Fields match if the corresponding dimension's value is in the given list. All fields are implicitly ANDed together. */\nexport type ServiceOperationCheckStatsFilterIn = {\n  /** Selects rows whose clientName dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  clientName?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose clientVersion dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  clientVersion?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose queryId dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  queryId?: InputMaybe<Array<InputMaybe<Scalars['ID']>>>;\n  /** Selects rows whose queryName dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  queryName?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose schemaTag dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  schemaTag?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n};\n\nexport type ServiceOperationCheckStatsMetrics = {\n  __typename?: 'ServiceOperationCheckStatsMetrics';\n  cachedRequestsCount: Scalars['Long'];\n  uncachedRequestsCount: Scalars['Long'];\n};\n\nexport type ServiceOperationCheckStatsOrderBySpec = {\n  column: ServiceOperationCheckStatsColumn;\n  direction: Ordering;\n};\n\nexport type ServiceOperationCheckStatsRecord = {\n  __typename?: 'ServiceOperationCheckStatsRecord';\n  /** Dimensions of ServiceOperationCheckStats that can be grouped by. */\n  groupBy: ServiceOperationCheckStatsDimensions;\n  /** Metrics of ServiceOperationCheckStats that can be aggregated over. */\n  metrics: ServiceOperationCheckStatsMetrics;\n  /** Starting segment timestamp. */\n  timestamp: Scalars['Timestamp'];\n};\n\n/** Columns of ServiceQueryStats. */\nexport enum ServiceQueryStatsColumn {\n  CachedHistogram = 'CACHED_HISTOGRAM',\n  CachedRequestsCount = 'CACHED_REQUESTS_COUNT',\n  CacheTtlHistogram = 'CACHE_TTL_HISTOGRAM',\n  ClientName = 'CLIENT_NAME',\n  ClientVersion = 'CLIENT_VERSION',\n  ForbiddenOperationCount = 'FORBIDDEN_OPERATION_COUNT',\n  FromEngineproxy = 'FROM_ENGINEPROXY',\n  QueryId = 'QUERY_ID',\n  QueryName = 'QUERY_NAME',\n  RegisteredOperationCount = 'REGISTERED_OPERATION_COUNT',\n  RequestsWithErrorsCount = 'REQUESTS_WITH_ERRORS_COUNT',\n  SchemaHash = 'SCHEMA_HASH',\n  SchemaTag = 'SCHEMA_TAG',\n  Timestamp = 'TIMESTAMP',\n  UncachedHistogram = 'UNCACHED_HISTOGRAM',\n  UncachedRequestsCount = 'UNCACHED_REQUESTS_COUNT'\n}\n\nexport type ServiceQueryStatsDimensions = {\n  __typename?: 'ServiceQueryStatsDimensions';\n  clientName?: Maybe<Scalars['String']>;\n  clientVersion?: Maybe<Scalars['String']>;\n  fromEngineproxy?: Maybe<Scalars['String']>;\n  queryId?: Maybe<Scalars['ID']>;\n  queryName?: Maybe<Scalars['String']>;\n  querySignature?: Maybe<Scalars['String']>;\n  schemaHash?: Maybe<Scalars['String']>;\n  schemaTag?: Maybe<Scalars['String']>;\n};\n\n/** Filter for data in ServiceQueryStats. Fields with dimension names represent equality checks. All fields are implicitly ANDed together. */\nexport type ServiceQueryStatsFilter = {\n  and?: InputMaybe<Array<ServiceQueryStatsFilter>>;\n  /** Selects rows whose clientName dimension equals the given value if not null. To query for the null value, use {in: {clientName: [null]}} instead. */\n  clientName?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose clientVersion dimension equals the given value if not null. To query for the null value, use {in: {clientVersion: [null]}} instead. */\n  clientVersion?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose fromEngineproxy dimension equals the given value if not null. To query for the null value, use {in: {fromEngineproxy: [null]}} instead. */\n  fromEngineproxy?: InputMaybe<Scalars['String']>;\n  in?: InputMaybe<ServiceQueryStatsFilterIn>;\n  not?: InputMaybe<ServiceQueryStatsFilter>;\n  or?: InputMaybe<Array<ServiceQueryStatsFilter>>;\n  /** Selects rows whose queryId dimension equals the given value if not null. To query for the null value, use {in: {queryId: [null]}} instead. */\n  queryId?: InputMaybe<Scalars['ID']>;\n  /** Selects rows whose queryName dimension equals the given value if not null. To query for the null value, use {in: {queryName: [null]}} instead. */\n  queryName?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose schemaHash dimension equals the given value if not null. To query for the null value, use {in: {schemaHash: [null]}} instead. */\n  schemaHash?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose schemaTag dimension equals the given value if not null. To query for the null value, use {in: {schemaTag: [null]}} instead. */\n  schemaTag?: InputMaybe<Scalars['String']>;\n};\n\n/** Filter for data in ServiceQueryStats. Fields match if the corresponding dimension's value is in the given list. All fields are implicitly ANDed together. */\nexport type ServiceQueryStatsFilterIn = {\n  /** Selects rows whose clientName dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  clientName?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose clientVersion dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  clientVersion?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose fromEngineproxy dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  fromEngineproxy?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose queryId dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  queryId?: InputMaybe<Array<InputMaybe<Scalars['ID']>>>;\n  /** Selects rows whose queryName dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  queryName?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose schemaHash dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  schemaHash?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose schemaTag dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  schemaTag?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n};\n\nexport type ServiceQueryStatsMetrics = {\n  __typename?: 'ServiceQueryStatsMetrics';\n  cacheTtlHistogram: DurationHistogram;\n  cachedHistogram: DurationHistogram;\n  cachedRequestsCount: Scalars['Long'];\n  forbiddenOperationCount: Scalars['Long'];\n  registeredOperationCount: Scalars['Long'];\n  requestsWithErrorsCount: Scalars['Long'];\n  totalLatencyHistogram: DurationHistogram;\n  totalRequestCount: Scalars['Long'];\n  uncachedHistogram: DurationHistogram;\n  uncachedRequestsCount: Scalars['Long'];\n};\n\nexport type ServiceQueryStatsOrderBySpec = {\n  column: ServiceQueryStatsColumn;\n  direction: Ordering;\n};\n\nexport type ServiceQueryStatsRecord = {\n  __typename?: 'ServiceQueryStatsRecord';\n  /** Dimensions of ServiceQueryStats that can be grouped by. */\n  groupBy: ServiceQueryStatsDimensions;\n  /** Metrics of ServiceQueryStats that can be aggregated over. */\n  metrics: ServiceQueryStatsMetrics;\n  /** Starting segment timestamp. */\n  timestamp: Scalars['Timestamp'];\n};\n\n/** A map from role (permission) String to boolean that the current user is allowed for the root service */\nexport type ServiceRoles = {\n  __typename?: 'ServiceRoles';\n  canCheckSchemas: Scalars['Boolean'];\n  canCreateVariants: Scalars['Boolean'];\n  canDelete: Scalars['Boolean'];\n  canManageAccess: Scalars['Boolean'];\n  canManageBuildConfig: Scalars['Boolean'];\n  canManageIntegrations: Scalars['Boolean'];\n  canManageKeys: Scalars['Boolean'];\n  canManageVariants: Scalars['Boolean'];\n  canQueryBuildConfig: Scalars['Boolean'];\n  canQueryCheckConfiguration: Scalars['Boolean'];\n  canQueryDeletedImplementingServices: Scalars['Boolean'];\n  canQueryImplementingServices: Scalars['Boolean'];\n  canQueryIntegrations: Scalars['Boolean'];\n  canQueryPrivateInfo: Scalars['Boolean'];\n  canQueryPublicInfo: Scalars['Boolean'];\n  canQueryReadmeAuthor: Scalars['Boolean'];\n  canQueryRoleOverrides: Scalars['Boolean'];\n  canQuerySchemas: Scalars['Boolean'];\n  canQueryStats: Scalars['Boolean'];\n  canQueryTokens: Scalars['Boolean'];\n  canQueryTraces: Scalars['Boolean'];\n  canRegisterOperations: Scalars['Boolean'];\n  canStoreSchemasWithoutVariant: Scalars['Boolean'];\n  canUndelete: Scalars['Boolean'];\n  canUpdateAvatar: Scalars['Boolean'];\n  canUpdateDescription: Scalars['Boolean'];\n  canUpdateTitle: Scalars['Boolean'];\n  /** @deprecated Replaced with canQueryTraces and canQueryStats */\n  canVisualizeStats: Scalars['Boolean'];\n  canWriteCheckConfiguration: Scalars['Boolean'];\n  /** @deprecated Never worked, not replaced */\n  canWriteTraces: Scalars['Boolean'];\n};\n\n/** A time window with a specified granularity over a given service. */\nexport type ServiceStatsWindow = {\n  __typename?: 'ServiceStatsWindow';\n  edgeServerInfos: Array<ServiceEdgeServerInfosRecord>;\n  errorStats: Array<ServiceErrorStatsRecord>;\n  fieldLatencies: Array<ServiceFieldLatenciesRecord>;\n  fieldStats: Array<ServiceFieldLatenciesRecord>;\n  fieldUsage: Array<ServiceFieldUsageRecord>;\n  operationCheckStats: Array<ServiceOperationCheckStatsRecord>;\n  queryStats: Array<ServiceQueryStatsRecord>;\n  /** From field rounded down to the nearest resolution. */\n  roundedDownFrom: Scalars['Timestamp'];\n  /** To field rounded up to the nearest resolution. */\n  roundedUpTo: Scalars['Timestamp'];\n  tracePathErrorsRefs: Array<ServiceTracePathErrorsRefsRecord>;\n  traceRefs: Array<ServiceTraceRefsRecord>;\n};\n\n\n/** A time window with a specified granularity over a given service. */\nexport type ServiceStatsWindowEdgeServerInfosArgs = {\n  filter?: InputMaybe<ServiceEdgeServerInfosFilter>;\n  limit?: InputMaybe<Scalars['Int']>;\n  orderBy?: InputMaybe<Array<ServiceEdgeServerInfosOrderBySpec>>;\n};\n\n\n/** A time window with a specified granularity over a given service. */\nexport type ServiceStatsWindowErrorStatsArgs = {\n  filter?: InputMaybe<ServiceErrorStatsFilter>;\n  limit?: InputMaybe<Scalars['Int']>;\n  orderBy?: InputMaybe<Array<ServiceErrorStatsOrderBySpec>>;\n};\n\n\n/** A time window with a specified granularity over a given service. */\nexport type ServiceStatsWindowFieldLatenciesArgs = {\n  filter?: InputMaybe<ServiceFieldLatenciesFilter>;\n  limit?: InputMaybe<Scalars['Int']>;\n  orderBy?: InputMaybe<Array<ServiceFieldLatenciesOrderBySpec>>;\n};\n\n\n/** A time window with a specified granularity over a given service. */\nexport type ServiceStatsWindowFieldStatsArgs = {\n  filter?: InputMaybe<ServiceFieldLatenciesFilter>;\n  limit?: InputMaybe<Scalars['Int']>;\n  orderBy?: InputMaybe<Array<ServiceFieldLatenciesOrderBySpec>>;\n};\n\n\n/** A time window with a specified granularity over a given service. */\nexport type ServiceStatsWindowFieldUsageArgs = {\n  filter?: InputMaybe<ServiceFieldUsageFilter>;\n  limit?: InputMaybe<Scalars['Int']>;\n  orderBy?: InputMaybe<Array<ServiceFieldUsageOrderBySpec>>;\n};\n\n\n/** A time window with a specified granularity over a given service. */\nexport type ServiceStatsWindowOperationCheckStatsArgs = {\n  filter?: InputMaybe<ServiceOperationCheckStatsFilter>;\n  limit?: InputMaybe<Scalars['Int']>;\n  orderBy?: InputMaybe<Array<ServiceOperationCheckStatsOrderBySpec>>;\n};\n\n\n/** A time window with a specified granularity over a given service. */\nexport type ServiceStatsWindowQueryStatsArgs = {\n  filter?: InputMaybe<ServiceQueryStatsFilter>;\n  limit?: InputMaybe<Scalars['Int']>;\n  orderBy?: InputMaybe<Array<ServiceQueryStatsOrderBySpec>>;\n};\n\n\n/** A time window with a specified granularity over a given service. */\nexport type ServiceStatsWindowTracePathErrorsRefsArgs = {\n  filter?: InputMaybe<ServiceTracePathErrorsRefsFilter>;\n  limit?: InputMaybe<Scalars['Int']>;\n  orderBy?: InputMaybe<Array<ServiceTracePathErrorsRefsOrderBySpec>>;\n};\n\n\n/** A time window with a specified granularity over a given service. */\nexport type ServiceStatsWindowTraceRefsArgs = {\n  filter?: InputMaybe<ServiceTraceRefsFilter>;\n  limit?: InputMaybe<Scalars['Int']>;\n  orderBy?: InputMaybe<Array<ServiceTraceRefsOrderBySpec>>;\n};\n\n/** Columns of ServiceTracePathErrorsRefs. */\nexport enum ServiceTracePathErrorsRefsColumn {\n  ClientName = 'CLIENT_NAME',\n  ClientVersion = 'CLIENT_VERSION',\n  DurationBucket = 'DURATION_BUCKET',\n  ErrorsCountInPath = 'ERRORS_COUNT_IN_PATH',\n  ErrorsCountInTrace = 'ERRORS_COUNT_IN_TRACE',\n  ErrorMessage = 'ERROR_MESSAGE',\n  Path = 'PATH',\n  QueryId = 'QUERY_ID',\n  QueryName = 'QUERY_NAME',\n  SchemaHash = 'SCHEMA_HASH',\n  SchemaTag = 'SCHEMA_TAG',\n  Timestamp = 'TIMESTAMP',\n  TraceHttpStatusCode = 'TRACE_HTTP_STATUS_CODE',\n  TraceId = 'TRACE_ID',\n  TraceSizeBytes = 'TRACE_SIZE_BYTES',\n  TraceStartsAt = 'TRACE_STARTS_AT'\n}\n\nexport type ServiceTracePathErrorsRefsDimensions = {\n  __typename?: 'ServiceTracePathErrorsRefsDimensions';\n  clientName?: Maybe<Scalars['String']>;\n  clientVersion?: Maybe<Scalars['String']>;\n  durationBucket?: Maybe<Scalars['Int']>;\n  errorMessage?: Maybe<Scalars['String']>;\n  path?: Maybe<Scalars['String']>;\n  queryId?: Maybe<Scalars['ID']>;\n  queryName?: Maybe<Scalars['String']>;\n  schemaHash?: Maybe<Scalars['String']>;\n  schemaTag?: Maybe<Scalars['String']>;\n  traceHttpStatusCode?: Maybe<Scalars['Int']>;\n  traceId?: Maybe<Scalars['ID']>;\n  traceStartsAt?: Maybe<Scalars['Timestamp']>;\n};\n\n/** Filter for data in ServiceTracePathErrorsRefs. Fields with dimension names represent equality checks. All fields are implicitly ANDed together. */\nexport type ServiceTracePathErrorsRefsFilter = {\n  and?: InputMaybe<Array<ServiceTracePathErrorsRefsFilter>>;\n  /** Selects rows whose clientName dimension equals the given value if not null. To query for the null value, use {in: {clientName: [null]}} instead. */\n  clientName?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose clientVersion dimension equals the given value if not null. To query for the null value, use {in: {clientVersion: [null]}} instead. */\n  clientVersion?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose durationBucket dimension equals the given value if not null. To query for the null value, use {in: {durationBucket: [null]}} instead. */\n  durationBucket?: InputMaybe<Scalars['Int']>;\n  /** Selects rows whose errorMessage dimension equals the given value if not null. To query for the null value, use {in: {errorMessage: [null]}} instead. */\n  errorMessage?: InputMaybe<Scalars['String']>;\n  in?: InputMaybe<ServiceTracePathErrorsRefsFilterIn>;\n  not?: InputMaybe<ServiceTracePathErrorsRefsFilter>;\n  or?: InputMaybe<Array<ServiceTracePathErrorsRefsFilter>>;\n  /** Selects rows whose path dimension equals the given value if not null. To query for the null value, use {in: {path: [null]}} instead. */\n  path?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose queryId dimension equals the given value if not null. To query for the null value, use {in: {queryId: [null]}} instead. */\n  queryId?: InputMaybe<Scalars['ID']>;\n  /** Selects rows whose queryName dimension equals the given value if not null. To query for the null value, use {in: {queryName: [null]}} instead. */\n  queryName?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose schemaHash dimension equals the given value if not null. To query for the null value, use {in: {schemaHash: [null]}} instead. */\n  schemaHash?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose schemaTag dimension equals the given value if not null. To query for the null value, use {in: {schemaTag: [null]}} instead. */\n  schemaTag?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose traceHttpStatusCode dimension equals the given value if not null. To query for the null value, use {in: {traceHttpStatusCode: [null]}} instead. */\n  traceHttpStatusCode?: InputMaybe<Scalars['Int']>;\n  /** Selects rows whose traceId dimension equals the given value if not null. To query for the null value, use {in: {traceId: [null]}} instead. */\n  traceId?: InputMaybe<Scalars['ID']>;\n};\n\n/** Filter for data in ServiceTracePathErrorsRefs. Fields match if the corresponding dimension's value is in the given list. All fields are implicitly ANDed together. */\nexport type ServiceTracePathErrorsRefsFilterIn = {\n  /** Selects rows whose clientName dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  clientName?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose clientVersion dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  clientVersion?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose durationBucket dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  durationBucket?: InputMaybe<Array<InputMaybe<Scalars['Int']>>>;\n  /** Selects rows whose errorMessage dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  errorMessage?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose path dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  path?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose queryId dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  queryId?: InputMaybe<Array<InputMaybe<Scalars['ID']>>>;\n  /** Selects rows whose queryName dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  queryName?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose schemaHash dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  schemaHash?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose schemaTag dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  schemaTag?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose traceHttpStatusCode dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  traceHttpStatusCode?: InputMaybe<Array<InputMaybe<Scalars['Int']>>>;\n  /** Selects rows whose traceId dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  traceId?: InputMaybe<Array<InputMaybe<Scalars['ID']>>>;\n};\n\nexport type ServiceTracePathErrorsRefsMetrics = {\n  __typename?: 'ServiceTracePathErrorsRefsMetrics';\n  errorsCountInPath: Scalars['Long'];\n  errorsCountInTrace: Scalars['Long'];\n  traceSizeBytes: Scalars['Long'];\n};\n\nexport type ServiceTracePathErrorsRefsOrderBySpec = {\n  column: ServiceTracePathErrorsRefsColumn;\n  direction: Ordering;\n};\n\nexport type ServiceTracePathErrorsRefsRecord = {\n  __typename?: 'ServiceTracePathErrorsRefsRecord';\n  /** Dimensions of ServiceTracePathErrorsRefs that can be grouped by. */\n  groupBy: ServiceTracePathErrorsRefsDimensions;\n  /** Metrics of ServiceTracePathErrorsRefs that can be aggregated over. */\n  metrics: ServiceTracePathErrorsRefsMetrics;\n  /** Starting segment timestamp. */\n  timestamp: Scalars['Timestamp'];\n};\n\n/** Columns of ServiceTraceRefs. */\nexport enum ServiceTraceRefsColumn {\n  ClientName = 'CLIENT_NAME',\n  ClientVersion = 'CLIENT_VERSION',\n  DurationBucket = 'DURATION_BUCKET',\n  DurationNs = 'DURATION_NS',\n  QueryId = 'QUERY_ID',\n  QueryName = 'QUERY_NAME',\n  SchemaHash = 'SCHEMA_HASH',\n  SchemaTag = 'SCHEMA_TAG',\n  Timestamp = 'TIMESTAMP',\n  TraceId = 'TRACE_ID',\n  TraceSizeBytes = 'TRACE_SIZE_BYTES'\n}\n\nexport type ServiceTraceRefsDimensions = {\n  __typename?: 'ServiceTraceRefsDimensions';\n  clientName?: Maybe<Scalars['String']>;\n  clientVersion?: Maybe<Scalars['String']>;\n  durationBucket?: Maybe<Scalars['Int']>;\n  queryId?: Maybe<Scalars['ID']>;\n  queryName?: Maybe<Scalars['String']>;\n  querySignature?: Maybe<Scalars['String']>;\n  schemaHash?: Maybe<Scalars['String']>;\n  schemaTag?: Maybe<Scalars['String']>;\n  traceId?: Maybe<Scalars['ID']>;\n};\n\n/** Filter for data in ServiceTraceRefs. Fields with dimension names represent equality checks. All fields are implicitly ANDed together. */\nexport type ServiceTraceRefsFilter = {\n  and?: InputMaybe<Array<ServiceTraceRefsFilter>>;\n  /** Selects rows whose clientName dimension equals the given value if not null. To query for the null value, use {in: {clientName: [null]}} instead. */\n  clientName?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose clientVersion dimension equals the given value if not null. To query for the null value, use {in: {clientVersion: [null]}} instead. */\n  clientVersion?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose durationBucket dimension equals the given value if not null. To query for the null value, use {in: {durationBucket: [null]}} instead. */\n  durationBucket?: InputMaybe<Scalars['Int']>;\n  in?: InputMaybe<ServiceTraceRefsFilterIn>;\n  not?: InputMaybe<ServiceTraceRefsFilter>;\n  or?: InputMaybe<Array<ServiceTraceRefsFilter>>;\n  /** Selects rows whose queryId dimension equals the given value if not null. To query for the null value, use {in: {queryId: [null]}} instead. */\n  queryId?: InputMaybe<Scalars['ID']>;\n  /** Selects rows whose queryName dimension equals the given value if not null. To query for the null value, use {in: {queryName: [null]}} instead. */\n  queryName?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose schemaHash dimension equals the given value if not null. To query for the null value, use {in: {schemaHash: [null]}} instead. */\n  schemaHash?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose schemaTag dimension equals the given value if not null. To query for the null value, use {in: {schemaTag: [null]}} instead. */\n  schemaTag?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose traceId dimension equals the given value if not null. To query for the null value, use {in: {traceId: [null]}} instead. */\n  traceId?: InputMaybe<Scalars['ID']>;\n};\n\n/** Filter for data in ServiceTraceRefs. Fields match if the corresponding dimension's value is in the given list. All fields are implicitly ANDed together. */\nexport type ServiceTraceRefsFilterIn = {\n  /** Selects rows whose clientName dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  clientName?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose clientVersion dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  clientVersion?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose durationBucket dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  durationBucket?: InputMaybe<Array<InputMaybe<Scalars['Int']>>>;\n  /** Selects rows whose queryId dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  queryId?: InputMaybe<Array<InputMaybe<Scalars['ID']>>>;\n  /** Selects rows whose queryName dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  queryName?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose schemaHash dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  schemaHash?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose schemaTag dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  schemaTag?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose traceId dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  traceId?: InputMaybe<Array<InputMaybe<Scalars['ID']>>>;\n};\n\nexport type ServiceTraceRefsMetrics = {\n  __typename?: 'ServiceTraceRefsMetrics';\n  durationNs: Scalars['Long'];\n  traceSizeBytes: Scalars['Long'];\n};\n\nexport type ServiceTraceRefsOrderBySpec = {\n  column: ServiceTraceRefsColumn;\n  direction: Ordering;\n};\n\nexport type ServiceTraceRefsRecord = {\n  __typename?: 'ServiceTraceRefsRecord';\n  /** Dimensions of ServiceTraceRefs that can be grouped by. */\n  groupBy: ServiceTraceRefsDimensions;\n  /** Metrics of ServiceTraceRefs that can be aggregated over. */\n  metrics: ServiceTraceRefsMetrics;\n  /** Starting segment timestamp. */\n  timestamp: Scalars['Timestamp'];\n};\n\n/** Slack notification channel */\nexport type SlackChannel = Channel & {\n  __typename?: 'SlackChannel';\n  id: Scalars['ID'];\n  name: Scalars['String'];\n  subscriptions: Array<ChannelSubscription>;\n  url: Scalars['String'];\n};\n\n/** Slack notification channel parameters */\nexport type SlackChannelInput = {\n  name?: InputMaybe<Scalars['String']>;\n  url: Scalars['String'];\n};\n\nexport type SlackNotificationField = {\n  key: Scalars['String'];\n  value: Scalars['String'];\n};\n\n/** Slack notification message */\nexport type SlackNotificationInput = {\n  color?: InputMaybe<Scalars['String']>;\n  fallback: Scalars['String'];\n  fields?: InputMaybe<Array<SlackNotificationField>>;\n  iconUrl?: InputMaybe<Scalars['String']>;\n  text?: InputMaybe<Scalars['String']>;\n  timestamp?: InputMaybe<Scalars['Timestamp']>;\n  title?: InputMaybe<Scalars['String']>;\n  titleLink?: InputMaybe<Scalars['String']>;\n  username?: InputMaybe<Scalars['String']>;\n};\n\nexport type SourceLocation = {\n  __typename?: 'SourceLocation';\n  column: Scalars['Int'];\n  line: Scalars['Int'];\n};\n\n/** A time window with a specified granularity. */\nexport type StatsWindow = {\n  __typename?: 'StatsWindow';\n  edgeServerInfos: Array<EdgeServerInfosRecord>;\n  errorStats: Array<ErrorStatsRecord>;\n  fieldLatencies: Array<FieldLatenciesRecord>;\n  fieldUsage: Array<FieldUsageRecord>;\n  operationCheckStats: Array<OperationCheckStatsRecord>;\n  queryStats: Array<QueryStatsRecord>;\n  /** From field rounded down to the nearest resolution. */\n  roundedDownFrom: Scalars['Timestamp'];\n  /** To field rounded up to the nearest resolution. */\n  roundedUpTo: Scalars['Timestamp'];\n  tracePathErrorsRefs: Array<TracePathErrorsRefsRecord>;\n  traceRefs: Array<TraceRefsRecord>;\n};\n\n\n/** A time window with a specified granularity. */\nexport type StatsWindowEdgeServerInfosArgs = {\n  filter?: InputMaybe<EdgeServerInfosFilter>;\n  limit?: InputMaybe<Scalars['Int']>;\n  orderBy?: InputMaybe<Array<EdgeServerInfosOrderBySpec>>;\n};\n\n\n/** A time window with a specified granularity. */\nexport type StatsWindowErrorStatsArgs = {\n  filter?: InputMaybe<ErrorStatsFilter>;\n  limit?: InputMaybe<Scalars['Int']>;\n  orderBy?: InputMaybe<Array<ErrorStatsOrderBySpec>>;\n};\n\n\n/** A time window with a specified granularity. */\nexport type StatsWindowFieldLatenciesArgs = {\n  filter?: InputMaybe<FieldLatenciesFilter>;\n  limit?: InputMaybe<Scalars['Int']>;\n  orderBy?: InputMaybe<Array<FieldLatenciesOrderBySpec>>;\n};\n\n\n/** A time window with a specified granularity. */\nexport type StatsWindowFieldUsageArgs = {\n  filter?: InputMaybe<FieldUsageFilter>;\n  limit?: InputMaybe<Scalars['Int']>;\n  orderBy?: InputMaybe<Array<FieldUsageOrderBySpec>>;\n};\n\n\n/** A time window with a specified granularity. */\nexport type StatsWindowOperationCheckStatsArgs = {\n  filter?: InputMaybe<OperationCheckStatsFilter>;\n  limit?: InputMaybe<Scalars['Int']>;\n  orderBy?: InputMaybe<Array<OperationCheckStatsOrderBySpec>>;\n};\n\n\n/** A time window with a specified granularity. */\nexport type StatsWindowQueryStatsArgs = {\n  filter?: InputMaybe<QueryStatsFilter>;\n  limit?: InputMaybe<Scalars['Int']>;\n  orderBy?: InputMaybe<Array<QueryStatsOrderBySpec>>;\n};\n\n\n/** A time window with a specified granularity. */\nexport type StatsWindowTracePathErrorsRefsArgs = {\n  filter?: InputMaybe<TracePathErrorsRefsFilter>;\n  limit?: InputMaybe<Scalars['Int']>;\n  orderBy?: InputMaybe<Array<TracePathErrorsRefsOrderBySpec>>;\n};\n\n\n/** A time window with a specified granularity. */\nexport type StatsWindowTraceRefsArgs = {\n  filter?: InputMaybe<TraceRefsFilter>;\n  limit?: InputMaybe<Scalars['Int']>;\n  orderBy?: InputMaybe<Array<TraceRefsOrderBySpec>>;\n};\n\nexport type StoreSchemaError = {\n  __typename?: 'StoreSchemaError';\n  code: StoreSchemaErrorCode;\n  message: Scalars['String'];\n};\n\nexport enum StoreSchemaErrorCode {\n  SchemaIsNotParsable = 'SCHEMA_IS_NOT_PARSABLE',\n  SchemaIsNotValid = 'SCHEMA_IS_NOT_VALID'\n}\n\nexport type StoreSchemaResponse = {\n  __typename?: 'StoreSchemaResponse';\n  sha256: Scalars['SHA256'];\n};\n\nexport type StoreSchemaResponseOrError = StoreSchemaError | StoreSchemaResponse;\n\nexport type StoredApprovedChange = {\n  __typename?: 'StoredApprovedChange';\n  argNode?: Maybe<NamedIntrospectionArgNoDescription>;\n  childNode?: Maybe<NamedIntrospectionValueNoDescription>;\n  code: ChangeCode;\n  parentNode?: Maybe<NamedIntrospectionTypeNoDescription>;\n};\n\nexport type StringToString = {\n  __typename?: 'StringToString';\n  key: Scalars['String'];\n  value: Scalars['String'];\n};\n\nexport type StringToStringInput = {\n  key: Scalars['String'];\n  value: Scalars['String'];\n};\n\nexport type Subgraph = {\n  __typename?: 'Subgraph';\n  hash: Scalars['String'];\n  name: Scalars['String'];\n  routingURL: Scalars['String'];\n};\n\nexport type SubgraphChange = {\n  __typename?: 'SubgraphChange';\n  name: Scalars['ID'];\n  type: SubgraphChangeType;\n};\n\nexport enum SubgraphChangeType {\n  Addition = 'ADDITION',\n  Deletion = 'DELETION',\n  Modification = 'MODIFICATION'\n}\n\nexport type SubgraphConfig = {\n  __typename?: 'SubgraphConfig';\n  id: Scalars['ID'];\n  name: Scalars['String'];\n  schemaHash: Scalars['String'];\n  sdl: Scalars['String'];\n  url: Scalars['String'];\n};\n\nexport type SubscriptionOptions = {\n  __typename?: 'SubscriptionOptions';\n  /** Enables notifications for schema updates */\n  schemaUpdates: Scalars['Boolean'];\n};\n\nexport type SubscriptionOptionsInput = {\n  /** Enables notifications for schema updates */\n  schemaUpdates: Scalars['Boolean'];\n};\n\nexport enum SubscriptionState {\n  Active = 'ACTIVE',\n  Canceled = 'CANCELED',\n  Expired = 'EXPIRED',\n  Future = 'FUTURE',\n  PastDue = 'PAST_DUE',\n  Paused = 'PAUSED',\n  Pending = 'PENDING',\n  Unknown = 'UNKNOWN'\n}\n\nexport type TemporaryUrl = {\n  __typename?: 'TemporaryURL';\n  url: Scalars['String'];\n};\n\nexport enum ThemeName {\n  Dark = 'DARK',\n  Light = 'LIGHT'\n}\n\nexport enum TicketPriority {\n  P0 = 'P0',\n  P1 = 'P1',\n  P2 = 'P2',\n  P3 = 'P3'\n}\n\nexport enum TicketStatus {\n  Closed = 'CLOSED',\n  Hold = 'HOLD',\n  New = 'NEW',\n  Open = 'OPEN',\n  Pending = 'PENDING',\n  Solved = 'SOLVED'\n}\n\nexport type TimezoneOffset = {\n  __typename?: 'TimezoneOffset';\n  minutesOffsetFromUTC: Scalars['Int'];\n  zoneID: Scalars['String'];\n};\n\nexport type TotalChangeSummaryCounts = {\n  __typename?: 'TotalChangeSummaryCounts';\n  /**\n   * Number of changes that are additions. This includes adding types, adding fields to object, input\n   * object, and interface types, adding values to enums, adding members to interfaces and unions, and\n   * adding arguments.\n   */\n  additions: Scalars['Int'];\n  /** Number of changes that are new usages of the @deprecated directive. */\n  deprecations: Scalars['Int'];\n  /**\n   * Number of changes that are edits. This includes types changing kind, fields and arguments\n   * changing type, arguments changing default value, and any description changes. This also includes\n   * edits to @deprecated reason strings.\n   */\n  edits: Scalars['Int'];\n  /**\n   * Number of changes that are removals. This includes removing types, removing fields from object,\n   * input object, and interface types, removing values from enums, removing members from interfaces\n   * and unions, and removing arguments. This also includes removing @deprecated usages.\n   */\n  removals: Scalars['Int'];\n};\n\nexport type Trace = {\n  __typename?: 'Trace';\n  cacheMaxAgeMs?: Maybe<Scalars['Float']>;\n  cacheScope?: Maybe<CacheScope>;\n  clientName?: Maybe<Scalars['String']>;\n  clientVersion?: Maybe<Scalars['String']>;\n  durationMs: Scalars['Float'];\n  endTime: Scalars['Timestamp'];\n  http?: Maybe<TraceHttp>;\n  id: Scalars['ID'];\n  operationName?: Maybe<Scalars['String']>;\n  protobuf: Protobuf;\n  root: TraceNode;\n  signature: Scalars['String'];\n  startTime: Scalars['Timestamp'];\n  variablesJSON: Array<StringToString>;\n};\n\nexport type TraceError = {\n  __typename?: 'TraceError';\n  json: Scalars['String'];\n  locations: Array<TraceSourceLocation>;\n  message: Scalars['String'];\n  timestamp?: Maybe<Scalars['Timestamp']>;\n};\n\nexport type TraceHttp = {\n  __typename?: 'TraceHTTP';\n  host?: Maybe<Scalars['String']>;\n  method: HttpMethod;\n  path?: Maybe<Scalars['String']>;\n  protocol?: Maybe<Scalars['String']>;\n  requestHeaders: Array<StringToString>;\n  responseHeaders: Array<StringToString>;\n  secure: Scalars['Boolean'];\n  statusCode: Scalars['Int'];\n};\n\nexport type TraceNode = {\n  __typename?: 'TraceNode';\n  cacheMaxAgeMs?: Maybe<Scalars['Float']>;\n  cacheScope?: Maybe<CacheScope>;\n  children: Array<TraceNode>;\n  childrenIds: Array<Scalars['ID']>;\n  descendants: Array<TraceNode>;\n  descendantsIds: Array<Scalars['ID']>;\n  endTime: Scalars['Timestamp'];\n  errors: Array<TraceError>;\n  id: Scalars['ID'];\n  key?: Maybe<Scalars['StringOrInt']>;\n  originalFieldName?: Maybe<Scalars['String']>;\n  parent: Scalars['ID'];\n  parentId?: Maybe<Scalars['ID']>;\n  path: Array<Scalars['String']>;\n  startTime: Scalars['Timestamp'];\n  type?: Maybe<Scalars['String']>;\n};\n\n/** Columns of TracePathErrorsRefs. */\nexport enum TracePathErrorsRefsColumn {\n  ClientName = 'CLIENT_NAME',\n  ClientVersion = 'CLIENT_VERSION',\n  DurationBucket = 'DURATION_BUCKET',\n  ErrorsCountInPath = 'ERRORS_COUNT_IN_PATH',\n  ErrorsCountInTrace = 'ERRORS_COUNT_IN_TRACE',\n  ErrorMessage = 'ERROR_MESSAGE',\n  Path = 'PATH',\n  QueryId = 'QUERY_ID',\n  QueryName = 'QUERY_NAME',\n  SchemaHash = 'SCHEMA_HASH',\n  SchemaTag = 'SCHEMA_TAG',\n  ServiceId = 'SERVICE_ID',\n  Timestamp = 'TIMESTAMP',\n  TraceHttpStatusCode = 'TRACE_HTTP_STATUS_CODE',\n  TraceId = 'TRACE_ID',\n  TraceSizeBytes = 'TRACE_SIZE_BYTES',\n  TraceStartsAt = 'TRACE_STARTS_AT'\n}\n\nexport type TracePathErrorsRefsDimensions = {\n  __typename?: 'TracePathErrorsRefsDimensions';\n  clientName?: Maybe<Scalars['String']>;\n  clientVersion?: Maybe<Scalars['String']>;\n  durationBucket?: Maybe<Scalars['Int']>;\n  errorMessage?: Maybe<Scalars['String']>;\n  /** If metrics were collected from a federated service, this field will be prefixed with `service:<SERVICE_NAME>.` */\n  path?: Maybe<Scalars['String']>;\n  queryId?: Maybe<Scalars['ID']>;\n  queryName?: Maybe<Scalars['String']>;\n  schemaHash?: Maybe<Scalars['String']>;\n  schemaTag?: Maybe<Scalars['String']>;\n  serviceId?: Maybe<Scalars['ID']>;\n  traceHttpStatusCode?: Maybe<Scalars['Int']>;\n  traceId?: Maybe<Scalars['ID']>;\n  traceStartsAt?: Maybe<Scalars['Timestamp']>;\n};\n\n/** Filter for data in TracePathErrorsRefs. Fields with dimension names represent equality checks. All fields are implicitly ANDed together. */\nexport type TracePathErrorsRefsFilter = {\n  and?: InputMaybe<Array<TracePathErrorsRefsFilter>>;\n  /** Selects rows whose clientName dimension equals the given value if not null. To query for the null value, use {in: {clientName: [null]}} instead. */\n  clientName?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose clientVersion dimension equals the given value if not null. To query for the null value, use {in: {clientVersion: [null]}} instead. */\n  clientVersion?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose durationBucket dimension equals the given value if not null. To query for the null value, use {in: {durationBucket: [null]}} instead. */\n  durationBucket?: InputMaybe<Scalars['Int']>;\n  /** Selects rows whose errorMessage dimension equals the given value if not null. To query for the null value, use {in: {errorMessage: [null]}} instead. */\n  errorMessage?: InputMaybe<Scalars['String']>;\n  in?: InputMaybe<TracePathErrorsRefsFilterIn>;\n  not?: InputMaybe<TracePathErrorsRefsFilter>;\n  or?: InputMaybe<Array<TracePathErrorsRefsFilter>>;\n  /** Selects rows whose path dimension equals the given value if not null. To query for the null value, use {in: {path: [null]}} instead. */\n  path?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose queryId dimension equals the given value if not null. To query for the null value, use {in: {queryId: [null]}} instead. */\n  queryId?: InputMaybe<Scalars['ID']>;\n  /** Selects rows whose queryName dimension equals the given value if not null. To query for the null value, use {in: {queryName: [null]}} instead. */\n  queryName?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose schemaHash dimension equals the given value if not null. To query for the null value, use {in: {schemaHash: [null]}} instead. */\n  schemaHash?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose schemaTag dimension equals the given value if not null. To query for the null value, use {in: {schemaTag: [null]}} instead. */\n  schemaTag?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose serviceId dimension equals the given value if not null. To query for the null value, use {in: {serviceId: [null]}} instead. */\n  serviceId?: InputMaybe<Scalars['ID']>;\n  /** Selects rows whose traceHttpStatusCode dimension equals the given value if not null. To query for the null value, use {in: {traceHttpStatusCode: [null]}} instead. */\n  traceHttpStatusCode?: InputMaybe<Scalars['Int']>;\n  /** Selects rows whose traceId dimension equals the given value if not null. To query for the null value, use {in: {traceId: [null]}} instead. */\n  traceId?: InputMaybe<Scalars['ID']>;\n};\n\n/** Filter for data in TracePathErrorsRefs. Fields match if the corresponding dimension's value is in the given list. All fields are implicitly ANDed together. */\nexport type TracePathErrorsRefsFilterIn = {\n  /** Selects rows whose clientName dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  clientName?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose clientVersion dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  clientVersion?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose durationBucket dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  durationBucket?: InputMaybe<Array<InputMaybe<Scalars['Int']>>>;\n  /** Selects rows whose errorMessage dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  errorMessage?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose path dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  path?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose queryId dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  queryId?: InputMaybe<Array<InputMaybe<Scalars['ID']>>>;\n  /** Selects rows whose queryName dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  queryName?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose schemaHash dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  schemaHash?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose schemaTag dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  schemaTag?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose serviceId dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  serviceId?: InputMaybe<Array<InputMaybe<Scalars['ID']>>>;\n  /** Selects rows whose traceHttpStatusCode dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  traceHttpStatusCode?: InputMaybe<Array<InputMaybe<Scalars['Int']>>>;\n  /** Selects rows whose traceId dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  traceId?: InputMaybe<Array<InputMaybe<Scalars['ID']>>>;\n};\n\nexport type TracePathErrorsRefsMetrics = {\n  __typename?: 'TracePathErrorsRefsMetrics';\n  errorsCountInPath: Scalars['Long'];\n  errorsCountInTrace: Scalars['Long'];\n  traceSizeBytes: Scalars['Long'];\n};\n\nexport type TracePathErrorsRefsOrderBySpec = {\n  column: TracePathErrorsRefsColumn;\n  direction: Ordering;\n};\n\nexport type TracePathErrorsRefsRecord = {\n  __typename?: 'TracePathErrorsRefsRecord';\n  /** Dimensions of TracePathErrorsRefs that can be grouped by. */\n  groupBy: TracePathErrorsRefsDimensions;\n  /** Metrics of TracePathErrorsRefs that can be aggregated over. */\n  metrics: TracePathErrorsRefsMetrics;\n  /** Starting segment timestamp. */\n  timestamp: Scalars['Timestamp'];\n};\n\n/** Columns of TraceRefs. */\nexport enum TraceRefsColumn {\n  ClientName = 'CLIENT_NAME',\n  ClientVersion = 'CLIENT_VERSION',\n  DurationBucket = 'DURATION_BUCKET',\n  DurationNs = 'DURATION_NS',\n  QueryId = 'QUERY_ID',\n  QueryName = 'QUERY_NAME',\n  SchemaHash = 'SCHEMA_HASH',\n  SchemaTag = 'SCHEMA_TAG',\n  ServiceId = 'SERVICE_ID',\n  Timestamp = 'TIMESTAMP',\n  TraceId = 'TRACE_ID',\n  TraceSizeBytes = 'TRACE_SIZE_BYTES'\n}\n\nexport type TraceRefsDimensions = {\n  __typename?: 'TraceRefsDimensions';\n  clientName?: Maybe<Scalars['String']>;\n  clientVersion?: Maybe<Scalars['String']>;\n  durationBucket?: Maybe<Scalars['Int']>;\n  queryId?: Maybe<Scalars['ID']>;\n  queryName?: Maybe<Scalars['String']>;\n  querySignature?: Maybe<Scalars['String']>;\n  schemaHash?: Maybe<Scalars['String']>;\n  schemaTag?: Maybe<Scalars['String']>;\n  serviceId?: Maybe<Scalars['ID']>;\n  traceId?: Maybe<Scalars['ID']>;\n};\n\n/** Filter for data in TraceRefs. Fields with dimension names represent equality checks. All fields are implicitly ANDed together. */\nexport type TraceRefsFilter = {\n  and?: InputMaybe<Array<TraceRefsFilter>>;\n  /** Selects rows whose clientName dimension equals the given value if not null. To query for the null value, use {in: {clientName: [null]}} instead. */\n  clientName?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose clientVersion dimension equals the given value if not null. To query for the null value, use {in: {clientVersion: [null]}} instead. */\n  clientVersion?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose durationBucket dimension equals the given value if not null. To query for the null value, use {in: {durationBucket: [null]}} instead. */\n  durationBucket?: InputMaybe<Scalars['Int']>;\n  in?: InputMaybe<TraceRefsFilterIn>;\n  not?: InputMaybe<TraceRefsFilter>;\n  or?: InputMaybe<Array<TraceRefsFilter>>;\n  /** Selects rows whose queryId dimension equals the given value if not null. To query for the null value, use {in: {queryId: [null]}} instead. */\n  queryId?: InputMaybe<Scalars['ID']>;\n  /** Selects rows whose queryName dimension equals the given value if not null. To query for the null value, use {in: {queryName: [null]}} instead. */\n  queryName?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose schemaHash dimension equals the given value if not null. To query for the null value, use {in: {schemaHash: [null]}} instead. */\n  schemaHash?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose schemaTag dimension equals the given value if not null. To query for the null value, use {in: {schemaTag: [null]}} instead. */\n  schemaTag?: InputMaybe<Scalars['String']>;\n  /** Selects rows whose serviceId dimension equals the given value if not null. To query for the null value, use {in: {serviceId: [null]}} instead. */\n  serviceId?: InputMaybe<Scalars['ID']>;\n  /** Selects rows whose traceId dimension equals the given value if not null. To query for the null value, use {in: {traceId: [null]}} instead. */\n  traceId?: InputMaybe<Scalars['ID']>;\n};\n\n/** Filter for data in TraceRefs. Fields match if the corresponding dimension's value is in the given list. All fields are implicitly ANDed together. */\nexport type TraceRefsFilterIn = {\n  /** Selects rows whose clientName dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  clientName?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose clientVersion dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  clientVersion?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose durationBucket dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  durationBucket?: InputMaybe<Array<InputMaybe<Scalars['Int']>>>;\n  /** Selects rows whose queryId dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  queryId?: InputMaybe<Array<InputMaybe<Scalars['ID']>>>;\n  /** Selects rows whose queryName dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  queryName?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose schemaHash dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  schemaHash?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose schemaTag dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  schemaTag?: InputMaybe<Array<InputMaybe<Scalars['String']>>>;\n  /** Selects rows whose serviceId dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  serviceId?: InputMaybe<Array<InputMaybe<Scalars['ID']>>>;\n  /** Selects rows whose traceId dimension is in the given list. A null value in the list means a row with null for that dimension. */\n  traceId?: InputMaybe<Array<InputMaybe<Scalars['ID']>>>;\n};\n\nexport type TraceRefsMetrics = {\n  __typename?: 'TraceRefsMetrics';\n  durationNs: Scalars['Long'];\n  traceSizeBytes: Scalars['Long'];\n};\n\nexport type TraceRefsOrderBySpec = {\n  column: TraceRefsColumn;\n  direction: Ordering;\n};\n\nexport type TraceRefsRecord = {\n  __typename?: 'TraceRefsRecord';\n  /** Dimensions of TraceRefs that can be grouped by. */\n  groupBy: TraceRefsDimensions;\n  /** Metrics of TraceRefs that can be aggregated over. */\n  metrics: TraceRefsMetrics;\n  /** Starting segment timestamp. */\n  timestamp: Scalars['Timestamp'];\n};\n\nexport type TraceSourceLocation = {\n  __typename?: 'TraceSourceLocation';\n  column: Scalars['Int'];\n  line: Scalars['Int'];\n};\n\nexport type TypeChangeSummaryCounts = {\n  __typename?: 'TypeChangeSummaryCounts';\n  /** Number of changes that are additions of types. */\n  additions: Scalars['Int'];\n  /**\n   * Number of changes that are edits. This includes types changing kind and any type description\n   * changes, but also includes adding/removing values from enums, adding/removing members from\n   * interfaces and unions, and any enum value deprecation and description changes.\n   */\n  edits: Scalars['Int'];\n  /** Number of changes that are removals of types. */\n  removals: Scalars['Int'];\n};\n\n/**\n * the TypeFilterConfig is used to isolate\n * types, and subsequent fields, through\n * various configuration settings.\n *\n * It defaults to filter towards user defined\n * types only\n */\nexport type TypeFilterConfig = {\n  /** include abstract types (interfaces and unions) */\n  includeAbstractTypes?: InputMaybe<Scalars['Boolean']>;\n  /** include built in scalars (i.e. Boolean, Int, etc) */\n  includeBuiltInTypes?: InputMaybe<Scalars['Boolean']>;\n  /** include reserved introspection types (i.e. __Type) */\n  includeIntrospectionTypes?: InputMaybe<Scalars['Boolean']>;\n};\n\nexport type Uri = {\n  __typename?: 'URI';\n  /** A GCS URI */\n  gcs: Scalars['String'];\n};\n\nexport type UnignoreOperationsInChecksResult = {\n  __typename?: 'UnignoreOperationsInChecksResult';\n  graph: Service;\n};\n\nexport type UpdateOperationCollectionEntryResult = OperationCollectionEntry | ValidationError;\n\nexport type UpdateOperationCollectionResult = OperationCollection | ValidationError;\n\nexport type UploadSchemaMutationResponse = {\n  __typename?: 'UploadSchemaMutationResponse';\n  code: Scalars['String'];\n  message: Scalars['String'];\n  success: Scalars['Boolean'];\n  tag?: Maybe<SchemaTag>;\n};\n\nexport type User = Identity & {\n  __typename?: 'User';\n  acceptedPrivacyPolicyAt?: Maybe<Scalars['Timestamp']>;\n  /** @deprecated Replaced with User.memberships.account */\n  accounts: Array<Account>;\n  apiKeys: Array<UserApiKey>;\n  asActor: Actor;\n  /**\n   * Get an URL to which an avatar image can be uploaded. Client uploads by sending a PUT request\n   * with the image data to MediaUploadInfo.url. Client SHOULD set the \"Content-Type\" header to the\n   * browser-inferred MIME type, and SHOULD set the \"x-apollo-content-filename\" header to the\n   * filename, if such information is available. Client MUST set the \"x-apollo-csrf-token\" header to\n   * MediaUploadInfo.csrfToken.\n   */\n  avatarUpload?: Maybe<AvatarUploadResult>;\n  /**\n   * Get an image URL for the user's avatar. Note that CORS is not enabled for these URLs. The size\n   * argument is used for bandwidth reduction, and should be the size of the image as displayed in the\n   * application. Apollo's media server will downscale larger images to at least the requested size,\n   * but this will not happen for third-party media servers.\n   */\n  avatarUrl?: Maybe<Scalars['String']>;\n  betaFeaturesOn: Scalars['Boolean'];\n  canUpdateAvatar: Scalars['Boolean'];\n  canUpdateEmail: Scalars['Boolean'];\n  canUpdateFullName: Scalars['Boolean'];\n  createdAt: Scalars['Timestamp'];\n  email?: Maybe<Scalars['String']>;\n  emailModifiedAt?: Maybe<Scalars['Timestamp']>;\n  emailVerified: Scalars['Boolean'];\n  experimentalFeatures: UserExperimentalFeatures;\n  featureIntros?: Maybe<FeatureIntros>;\n  fullName: Scalars['String'];\n  /** The user's GitHub username, if they log in via GitHub. May be null even for GitHub users in some edge cases. */\n  githubUsername?: Maybe<Scalars['String']>;\n  id: Scalars['ID'];\n  /**\n   * This role is reserved exclusively for internal MDG employees, and it controls what access they may have to other\n   * organizations. Only admins are allowed to see this field.\n   */\n  internalAdminRole?: Maybe<InternalMdgAdminRole>;\n  /** Last time any API token from this user was used against AGM services */\n  lastAuthenticatedAt?: Maybe<Scalars['Timestamp']>;\n  logoutAfterIdleMs?: Maybe<Scalars['Int']>;\n  memberships: Array<UserMembership>;\n  name: Scalars['String'];\n  odysseyCertifications?: Maybe<Array<OdysseyCertification>>;\n  odysseyCourses?: Maybe<Array<OdysseyCourse>>;\n  odysseyTasks?: Maybe<Array<OdysseyTask>>;\n  synchronized: Scalars['Boolean'];\n  /** List of Zendesk tickets this user has submitted */\n  tickets?: Maybe<Array<ZendeskTicket>>;\n  type: UserType;\n};\n\n\nexport type UserApiKeysArgs = {\n  includeCookies?: InputMaybe<Scalars['Boolean']>;\n};\n\n\nexport type UserAvatarUrlArgs = {\n  size?: Scalars['Int'];\n};\n\nexport type UserApiKey = ApiKey & {\n  __typename?: 'UserApiKey';\n  id: Scalars['ID'];\n  keyName?: Maybe<Scalars['String']>;\n  token: Scalars['String'];\n};\n\nexport type UserExperimentalFeatures = {\n  __typename?: 'UserExperimentalFeatures';\n  exampleFeature: Scalars['Boolean'];\n};\n\nexport type UserMembership = {\n  __typename?: 'UserMembership';\n  account: Account;\n  createdAt: Scalars['Timestamp'];\n  permission: UserPermission;\n  user: User;\n};\n\nexport type UserMutation = {\n  __typename?: 'UserMutation';\n  acceptPrivacyPolicy?: Maybe<Scalars['Void']>;\n  /** Change the user's password */\n  changePassword?: Maybe<Scalars['Void']>;\n  createOdysseyCertification?: Maybe<OdysseyCertification>;\n  createOdysseyCourses?: Maybe<Array<OdysseyCourse>>;\n  createOdysseyTasks?: Maybe<Array<OdysseyTask>>;\n  /** Delete the user's avatar. Requires User.canUpdateAvatar to be true. */\n  deleteAvatar?: Maybe<AvatarDeleteError>;\n  /** Hard deletes the associated user. Throws an error otherwise with reason included. */\n  hardDelete?: Maybe<Scalars['Void']>;\n  /** Create a new API key for this user. Must take in a name for this key. */\n  newKey: UserApiKey;\n  /**\n   * Create a new API key for this user if there are no current API keys.\n   * If an API key already exists, this will return one at random and not create a new one.\n   */\n  provisionKey?: Maybe<ApiKeyProvision>;\n  /** Refresh information about the user from its upstream service (eg list of organizations from GitHub) */\n  refresh?: Maybe<User>;\n  /** Removes the given key from this user. Can be used to remove either a web cookie or a user API key. */\n  removeKey?: Maybe<Scalars['Void']>;\n  /** Renames the given key to the new key name. */\n  renameKey?: Maybe<UserApiKey>;\n  resendVerificationEmail?: Maybe<Scalars['Void']>;\n  setOdysseyCourse?: Maybe<OdysseyCourse>;\n  setOdysseyTask?: Maybe<OdysseyTask>;\n  /** Submit a zendesk ticket for this user */\n  submitZendeskTicket?: Maybe<ZendeskTicket>;\n  /** Update information about a user; all arguments are optional */\n  update?: Maybe<User>;\n  /** Updates this users' preference concerning opting into beta features. */\n  updateBetaFeaturesOn?: Maybe<User>;\n  /** Update the status of a feature for this. For example, if you want to hide an introductory popup. */\n  updateFeatureIntros?: Maybe<User>;\n  /**\n   * Update user to have the given internal mdg admin role.\n   * It is necessary to be an MDG_INTERNAL_SUPER_ADMIN to perform update.\n   * Additionally, upserting a null value explicitly revokes this user's\n   * admin status.\n   */\n  updateRole?: Maybe<User>;\n  user: User;\n  verifyEmail?: Maybe<User>;\n};\n\n\nexport type UserMutationChangePasswordArgs = {\n  newPassword: Scalars['String'];\n  previousPassword: Scalars['String'];\n};\n\n\nexport type UserMutationCreateOdysseyCertificationArgs = {\n  certificationId: Scalars['String'];\n};\n\n\nexport type UserMutationCreateOdysseyCoursesArgs = {\n  courses: Array<OdysseyCourseInput>;\n};\n\n\nexport type UserMutationCreateOdysseyTasksArgs = {\n  tasks: Array<OdysseyTaskInput>;\n};\n\n\nexport type UserMutationNewKeyArgs = {\n  keyName: Scalars['String'];\n};\n\n\nexport type UserMutationProvisionKeyArgs = {\n  keyName?: Scalars['String'];\n};\n\n\nexport type UserMutationRemoveKeyArgs = {\n  id: Scalars['ID'];\n};\n\n\nexport type UserMutationRenameKeyArgs = {\n  id: Scalars['ID'];\n  newKeyName?: InputMaybe<Scalars['String']>;\n};\n\n\nexport type UserMutationSetOdysseyCourseArgs = {\n  course: OdysseyCourseInput;\n};\n\n\nexport type UserMutationSetOdysseyTaskArgs = {\n  task: OdysseyTaskInput;\n};\n\n\nexport type UserMutationSubmitZendeskTicketArgs = {\n  collaborators?: InputMaybe<Array<Scalars['String']>>;\n  email: Scalars['String'];\n  ticket: ZendeskTicketInput;\n};\n\n\nexport type UserMutationUpdateArgs = {\n  email?: InputMaybe<Scalars['String']>;\n  fullName?: InputMaybe<Scalars['String']>;\n  referrer?: InputMaybe<Scalars['String']>;\n  trackingGoogleClientId?: InputMaybe<Scalars['String']>;\n  trackingMarketoClientId?: InputMaybe<Scalars['String']>;\n  userSegment?: InputMaybe<UserSegment>;\n  utmCampaign?: InputMaybe<Scalars['String']>;\n  utmMedium?: InputMaybe<Scalars['String']>;\n  utmSource?: InputMaybe<Scalars['String']>;\n};\n\n\nexport type UserMutationUpdateBetaFeaturesOnArgs = {\n  betaFeaturesOn: Scalars['Boolean'];\n};\n\n\nexport type UserMutationUpdateFeatureIntrosArgs = {\n  newFeatureIntros?: InputMaybe<FeatureIntrosInput>;\n};\n\n\nexport type UserMutationUpdateRoleArgs = {\n  newRole?: InputMaybe<InternalMdgAdminRole>;\n};\n\n\nexport type UserMutationVerifyEmailArgs = {\n  token: Scalars['String'];\n};\n\nexport enum UserPermission {\n  BillingManager = 'BILLING_MANAGER',\n  Consumer = 'CONSUMER',\n  Contributor = 'CONTRIBUTOR',\n  GraphAdmin = 'GRAPH_ADMIN',\n  LegacyGraphKey = 'LEGACY_GRAPH_KEY',\n  Observer = 'OBSERVER',\n  OrgAdmin = 'ORG_ADMIN'\n}\n\nexport enum UserSegment {\n  JoinMyTeam = 'JOIN_MY_TEAM',\n  LocalDevelopment = 'LOCAL_DEVELOPMENT',\n  NotSpecified = 'NOT_SPECIFIED',\n  ProductionGraphs = 'PRODUCTION_GRAPHS',\n  Sandbox = 'SANDBOX',\n  TryTeam = 'TRY_TEAM'\n}\n\nexport type UserSettings = {\n  __typename?: 'UserSettings';\n  appNavCollapsed: Scalars['Boolean'];\n  autoManageVariables: Scalars['Boolean'];\n  id: Scalars['String'];\n  mockingResponses: Scalars['Boolean'];\n  preflightScriptEnabled: Scalars['Boolean'];\n  responseHints: ResponseHints;\n  tableMode: Scalars['Boolean'];\n  themeName: ThemeName;\n};\n\n/** Explorer user settings input */\nexport type UserSettingsInput = {\n  appNavCollapsed?: InputMaybe<Scalars['Boolean']>;\n  autoManageVariables?: InputMaybe<Scalars['Boolean']>;\n  mockingResponses?: InputMaybe<Scalars['Boolean']>;\n  preflightScriptEnabled?: InputMaybe<Scalars['Boolean']>;\n  responseHints?: InputMaybe<ResponseHints>;\n  tableMode?: InputMaybe<Scalars['Boolean']>;\n  themeName?: InputMaybe<ThemeName>;\n};\n\nexport enum UserType {\n  Apollo = 'APOLLO',\n  Github = 'GITHUB',\n  Sso = 'SSO'\n}\n\nexport type ValidateOperationsResult = {\n  __typename?: 'ValidateOperationsResult';\n  validationResults: Array<ValidationResult>;\n};\n\nexport type ValidationError = Error & {\n  __typename?: 'ValidationError';\n  message: Scalars['String'];\n};\n\nexport enum ValidationErrorCode {\n  DeprecatedField = 'DEPRECATED_FIELD',\n  InvalidOperation = 'INVALID_OPERATION',\n  NonParseableDocument = 'NON_PARSEABLE_DOCUMENT'\n}\n\nexport enum ValidationErrorType {\n  Failure = 'FAILURE',\n  Invalid = 'INVALID',\n  Warning = 'WARNING'\n}\n\n/**\n * Represents a single validation error, with information relating to the error\n * and its respective operation\n */\nexport type ValidationResult = {\n  __typename?: 'ValidationResult';\n  /** The validation result's error code */\n  code: ValidationErrorCode;\n  /** Description of the validation error */\n  description: Scalars['String'];\n  /** The operation related to this validation result */\n  operation: OperationDocument;\n  /** The type of validation error thrown - warning, failure, or invalid. */\n  type: ValidationErrorType;\n};\n\n/** Webhook notification channel */\nexport type WebhookChannel = Channel & {\n  __typename?: 'WebhookChannel';\n  id: Scalars['ID'];\n  name: Scalars['String'];\n  secretToken?: Maybe<Scalars['String']>;\n  subscriptions: Array<ChannelSubscription>;\n  url: Scalars['String'];\n};\n\n/** PagerDuty notification channel parameters */\nexport type WebhookChannelInput = {\n  name?: InputMaybe<Scalars['String']>;\n  secretToken?: InputMaybe<Scalars['String']>;\n  url: Scalars['String'];\n};\n\nexport type ZendeskTicket = {\n  __typename?: 'ZendeskTicket';\n  createdAt: Scalars['Timestamp'];\n  description: Scalars['String'];\n  graph?: Maybe<Service>;\n  id: Scalars['Int'];\n  organization?: Maybe<Account>;\n  priority: TicketPriority;\n  status?: Maybe<TicketStatus>;\n  subject: Scalars['String'];\n  user?: Maybe<User>;\n};\n\n/** Zendesk ticket input */\nexport type ZendeskTicketInput = {\n  description: Scalars['String'];\n  graphId?: InputMaybe<Scalars['String']>;\n  organizationId?: InputMaybe<Scalars['String']>;\n  priority: TicketPriority;\n  subject: Scalars['String'];\n};\n\nexport type SchemaReportMutationVariables = Exact<{\n  report: SchemaReport;\n  coreSchema?: InputMaybe<Scalars['String']>;\n}>;\n\n\nexport type SchemaReportMutation = { __typename?: 'Mutation', reportSchema?: { __typename: 'ReportSchemaError', message: string, code: ReportSchemaErrorCode } | { __typename: 'ReportSchemaResponse', inSeconds: number, withCoreSchema: boolean } | null | undefined };\n,/dist/esm/incrementalDeliveryPolyfill.js.map\u0002{\"version\":3,\"file\":\"incrementalDeliveryPolyfill.js\",\"sourceRoot\":\"\",\"sources\":[\"../../src/incrementalDeliveryPolyfill.ts\"],\"names\":[],\"mappings\":\"AAAA,OAAO,EAAE,OAAO,EAAgD,MAAM,SAAS,CAAC;AA+EhF,IAAI,uCAAuC,GAO3B,SAAS,CAAC;AAE1B,KAAK,UAAU,kBAAkB;IAC/B,IAAI,uCAAuC,KAAK,SAAS,EAAE;QACzD,OAAO;KACR;IACD,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;IACxC,IAAI,kCAAkC,IAAI,OAAO,EAAE;QACjD,uCAAuC,GAAI,OAAe;aACvD,gCAAgC,CAAC;KACrC;SAAM;QACL,uCAAuC,GAAG,IAAI,CAAC;KAChD;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,IAAmB;IAEnB,MAAM,kBAAkB,EAAE,CAAC;IAC3B,IAAI,uCAAuC,EAAE;QAC3C,OAAO,uCAAuC,CAAC,IAAI,CAAC,CAAC;KACtD;IACD,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC;AACvB,CAAC\"}:/dist/esm/externalTypes/incrementalDeliveryPolyfill.js.mapĦ{\"version\":3,\"file\":\"incrementalDeliveryPolyfill.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/externalTypes/incrementalDeliveryPolyfill.ts\"],\"names\":[],\"mappings\":\"\"}@/dist/esm/plugin/usageReporting/operationDerivedDataCache.js.map\u0003{\"version\":3,\"file\":\"operationDerivedDataCache.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../../src/plugin/usageReporting/operationDerivedDataCache.ts\"],\"names\":[],\"mappings\":\"AAEA,OAAO,QAAQ,MAAM,WAAW,CAAC;AAOjC,MAAM,UAAU,+BAA+B,CAAC,EAC9C,MAAM,GAGP;IACC,IAAI,QAAc,CAAC;IACnB,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,OAAO,IAAI,QAAQ,CAA+B;QAEhD,eAAe,CAAC,GAAG;YACjB,OAAO,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;QACxD,CAAC;QASD,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE;QAC7B,OAAO;YAEL,aAAa,EAAE,CAAC;YAGhB,IAAI,CAAC,QAAQ,IAAI,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,QAAQ,CAAC,OAAO,EAAE,GAAG,KAAK,EAAE;gBAElE,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC;gBACtB,MAAM,CAAC,IAAI,CACT;oBACE,iEAAiE;oBACjE,cAAc,aAAa,qBAAqB;oBAChD,gFAAgF;oBAChF,gEAAgE;oBAChE,wCAAwC;iBACzC,CAAC,IAAI,CAAC,EAAE,CAAC,CACX,CAAC;gBAGF,aAAa,GAAG,CAAC,CAAC;aACnB;QACH,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,4BAA4B,CAC1C,SAAiB,EACjB,aAAqB;IAErB,OAAO,GAAG,SAAS,GAAG,aAAa,IAAI,GAAG,GAAG,aAAa,EAAE,CAAC;AAC/D,CAAC\"}/dist/esm/index.jsįexport { ApolloServer } from './ApolloServer.js';\nexport { HeaderMap } from './utils/HeaderMap.js';\nexport * from './externalTypes/index.js';\n//# sourceMappingURL=index.js.map(/dist/esm/utils/computeCoreSchemaHash.jsimport { createHash } from '@apollo/utils.createhash';\nexport function computeCoreSchemaHash(schema) {\n    return createHash('sha256').update(schema).digest('hex');\n}\n//# sourceMappingURL=computeCoreSchemaHash.js.map/dist/esm/express4/index.d.ts\u0003eimport type { WithRequired } from '@apollo/utils.withrequired';\nimport type express from 'express';\nimport type { ApolloServer } from '../index.js';\nimport type { BaseContext, ContextFunction } from '../externalTypes/index.js';\nexport interface ExpressContextFunctionArgument {\n    req: express.Request;\n    res: express.Response;\n}\nexport interface ExpressMiddlewareOptions<TContext extends BaseContext> {\n    context?: ContextFunction<[ExpressContextFunctionArgument], TContext>;\n}\nexport declare function expressMiddleware(server: ApolloServer<BaseContext>, options?: ExpressMiddlewareOptions<BaseContext>): express.RequestHandler;\nexport declare function expressMiddleware<TContext extends BaseContext>(server: ApolloServer<TContext>, options: WithRequired<ExpressMiddlewareOptions<TContext>, 'context'>): express.RequestHandler;\n//# sourceMappingURL=index.d.ts.map/src/preventCsrf.ts\u0012import MIMEType from 'whatwg-mimetype';\nimport { BadRequestError } from './internalErrorClasses.js';\nimport type { HeaderMap } from './utils/HeaderMap.js';\n\n// Our recommended set of CSRF prevention headers. Operations that do not\n// provide a content-type such as `application/json` (in practice, this\n// means GET operations) must include at least one of these headers.\n// Apollo Client Web's default behavior is to always sends a\n// `content-type` even for `GET`, and Apollo iOS and Apollo Kotlin always\n// send `x-apollo-operation-name`. So if you set\n// `csrfPreventionRequestHeaders: true` then any `GET` operation from these\n// three client projects and any `POST` operation at all should work\n// successfully; if you need `GET`s from another kind of client to work,\n// just add `apollo-require-preflight: true` to their requests.\nexport const recommendedCsrfPreventionRequestHeaders = [\n  'x-apollo-operation-name',\n  'apollo-require-preflight',\n];\n\n// See https://fetch.spec.whatwg.org/#cors-safelisted-request-header\nconst NON_PREFLIGHTED_CONTENT_TYPES = [\n  'application/x-www-form-urlencoded',\n  'multipart/form-data',\n  'text/plain',\n];\n\n// We don't want random websites to be able to execute actual GraphQL operations\n// from a user's browser unless our CORS policy supports it. It's not good\n// enough just to ensure that the browser can't read the response from the\n// operation; we also want to prevent CSRF, where the attacker can cause side\n// effects with an operation or can measure the timing of a read operation. Our\n// goal is to ensure that we don't run the context function or execute the\n// GraphQL operation until the browser has evaluated the CORS policy, which\n// means we want all operations to be pre-flighted. We can do that by only\n// processing operations that have at least one header set that appears to be\n// manually set by the JS code rather than by the browser automatically.\n//\n// POST requests generally have a content-type `application/json`, which is\n// sufficient to trigger preflighting. So we take extra care with requests that\n// specify no content-type or that specify one of the three non-preflighted\n// content types. For those operations, we require (if this feature is enabled)\n// one of a set of specific headers to be set. By ensuring that every operation\n// either has a custom content-type or sets one of these headers, we know we\n// won't execute operations at the request of origins who our CORS policy will\n// block.\nexport function preventCsrf(\n  headers: HeaderMap,\n  csrfPreventionRequestHeaders: string[],\n) {\n  const contentType = headers.get('content-type');\n\n  // We have to worry about CSRF if it looks like this may have been a\n  // non-preflighted request. If we see a content-type header that is not one of\n  // the three CORS-safelisted MIME types (see\n  // https://fetch.spec.whatwg.org/#cors-safelisted-request-header) then we know\n  // it was preflighted and we don't have to worry.\n  if (contentType !== undefined) {\n    const contentTypeParsed = MIMEType.parse(contentType);\n    if (contentTypeParsed === null) {\n      // If we got null, then parsing the content-type failed... which is\n      // actually *ok* because that would lead to a preflight. (For example, the\n      // header is empty, or doesn't have a slash, or has bad characters.) The\n      // scary CSRF case is only if there's *not* an error. So it is actually\n      // fine for us to just `return` here. (That said, it would also be\n      // reasonable to reject such requests with provided yet unparsable\n      // Content-Type here.)\n      return;\n    }\n    if (!NON_PREFLIGHTED_CONTENT_TYPES.includes(contentTypeParsed.essence)) {\n      // We managed to parse a MIME type that was not one of the\n      // CORS-safelisted ones. (Probably application/json!) That means that if\n      // the client is a browser, the browser must have applied CORS\n      // preflighting and we don't have to worry about CSRF.\n      return;\n    }\n  }\n\n  // Either there was no content-type, or the content-type parsed properly as\n  // one of the three CORS-safelisted values. Let's look for another header that\n  // (if this was a browser) must have been set by the user's code and would\n  // have caused a preflight.\n  if (\n    csrfPreventionRequestHeaders.some((header) => {\n      const value = headers.get(header);\n      return value !== undefined && value.length > 0;\n    })\n  ) {\n    return;\n  }\n\n  throw new BadRequestError(\n    `This operation has been blocked as a potential Cross-Site Request Forgery ` +\n      `(CSRF). Please either specify a 'content-type' header (with a type that ` +\n      `is not one of ${NON_PREFLIGHTED_CONTENT_TYPES.join(', ')}) or provide ` +\n      `a non-empty value for one of the following headers: ${csrfPreventionRequestHeaders.join(\n        ', ',\n      )}\\n`,\n  );\n}\nE/dist/esm/plugin/usageReporting/defaultSendOperationsAsTrace.d.ts.map\u0001 {\"version\":3,\"file\":\"defaultSendOperationsAsTrace.d.ts\",\"sourceRoot\":\"\",\"sources\":[\"../../../../src/plugin/usageReporting/defaultSendOperationsAsTrace.ts\"],\"names\":[],\"mappings\":\"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kCAAkC,CAAC;AAI9D,wBAAgB,4BAA4B,YA2B3B,KAAK,kBAAkB,MAAM,KAAG,OAAO,CAyBvD\"}!/src/plugin/cacheControl/index.tsEimport type { ApolloServerPlugin } from '../../externalTypes/index.js';\nimport {\n  DirectiveNode,\n  getNamedType,\n  GraphQLCompositeType,\n  GraphQLField,\n  isCompositeType,\n  isInterfaceType,\n  isObjectType,\n  responsePathAsArray,\n} from 'graphql';\nimport { newCachePolicy } from '../../cachePolicy.js';\nimport { internalPlugin } from '../../internalPlugin.js';\nimport LRUCache from 'lru-cache';\nimport type {\n  CacheHint,\n  CacheScope,\n  GraphQLResolveInfoWithCacheControl,\n} from '@apollo/cache-control-types';\n\n/**\n * CacheAnnotation represents the contents of a `@cacheControl` directive.\n * (`inheritMaxAge` is part of this interface and not CacheHint, because\n * `inheritMaxAge` isn't a contributing piece of a cache policy: it just means\n * to not apply default values in some contexts.)\n */\ninterface CacheAnnotation extends CacheHint {\n  inheritMaxAge?: true;\n}\n\nexport interface ApolloServerPluginCacheControlOptions {\n  /**\n   * All root fields and fields returning objects or interfaces have this value\n   * for `maxAge` unless they set a cache hint with a non-undefined `maxAge`\n   * using `@cacheControl` or `setCacheHint`. The default is 0, which means \"not\n   * cacheable\". (That is: if you don't set `defaultMaxAge`, then every root\n   * field in your operation and every field with sub-fields must have a cache\n   * hint or the overall operation will not be cacheable.)\n   */\n  defaultMaxAge?: number;\n  /**\n   * Determines whether to set the `Cache-Control` HTTP header. If true (the\n   * default), the header is written on all responses (with a value of\n   * `no-store` for non-cacheable responses). If `'if-cacheable'`, the header is\n   * only written for cacheable responses. If false, the header is never\n   * written. A response is cacheable if its overall cache policy has a non-zero\n   * `maxAge`, and the body is a single result rather than an incremental\n   * delivery response, and the body contains no errors.\n   */\n  calculateHttpHeaders?: boolean | 'if-cacheable';\n  // For testing only.\n  __testing__cacheHints?: Map<string, CacheHint>;\n}\n\nexport function ApolloServerPluginCacheControl(\n  options: ApolloServerPluginCacheControlOptions = Object.create(null),\n): ApolloServerPlugin {\n  let typeAnnotationCache: LRUCache<GraphQLCompositeType, CacheAnnotation>;\n\n  let fieldAnnotationCache: LRUCache<\n    GraphQLField<unknown, unknown>,\n    CacheAnnotation\n  >;\n\n  return internalPlugin({\n    __internal_plugin_id__: 'CacheControl',\n    __is_disabled_plugin__: false,\n\n    async serverWillStart({ schema }) {\n      // Set the size of the caches to be equal to the number of composite types\n      // and fields in the schema respectively. This generally means that the\n      // cache will always have room for all the cache hints in the active\n      // schema but we won't have a memory leak as schemas are replaced in a\n      // gateway. (Once we're comfortable breaking compatibility with\n      // versions of Gateway older than 0.35.0, we should also run this code\n      // from a schemaDidLoadOrUpdate instead of serverWillStart. Using\n      // schemaDidLoadOrUpdate throws when combined with old gateways.)\n      typeAnnotationCache = new LRUCache<GraphQLCompositeType, CacheAnnotation>(\n        {\n          max: Object.values(schema.getTypeMap()).filter(isCompositeType)\n            .length,\n        },\n      );\n\n      fieldAnnotationCache = new LRUCache<\n        GraphQLField<unknown, unknown>,\n        CacheAnnotation\n      >({\n        max:\n          Object.values(schema.getTypeMap())\n            .filter(isObjectType)\n            .flatMap((t) => Object.values(t.getFields())).length +\n          Object.values(schema.getTypeMap())\n            .filter(isInterfaceType)\n            .flatMap((t) => Object.values(t.getFields())).length,\n      });\n\n      return undefined;\n    },\n\n    async requestDidStart(requestContext) {\n      function memoizedCacheAnnotationFromType(\n        t: GraphQLCompositeType,\n      ): CacheAnnotation {\n        const existing = typeAnnotationCache.get(t);\n        if (existing) {\n          return existing;\n        }\n        const annotation = cacheAnnotationFromType(t);\n        typeAnnotationCache.set(t, annotation);\n        return annotation;\n      }\n\n      function memoizedCacheAnnotationFromField(\n        field: GraphQLField<unknown, unknown>,\n      ): CacheAnnotation {\n        const existing = fieldAnnotationCache.get(field);\n        if (existing) {\n          return existing;\n        }\n        const annotation = cacheAnnotationFromField(field);\n        fieldAnnotationCache.set(field, annotation);\n        return annotation;\n      }\n\n      const defaultMaxAge: number = options.defaultMaxAge ?? 0;\n      const calculateHttpHeaders = options.calculateHttpHeaders ?? true;\n      const { __testing__cacheHints } = options;\n\n      return {\n        async executionDidStart() {\n          // Did something set the overall cache policy before we've even\n          // started? If so, consider that as an override and don't touch it.\n          // Just put set up fake `info.cacheControl` objects and otherwise\n          // don't track cache policy.\n          //\n          // (This doesn't happen in practice using the core plugins: the main\n          // use case for restricting overallCachePolicy outside of this plugin\n          // is apollo-server-plugin-response-cache, but when it sets the policy\n          // we never get to execution at all.)\n          if (isRestricted(requestContext.overallCachePolicy)) {\n            // This is \"fake\" in the sense that it never actually affects\n            // requestContext.overallCachePolicy.\n            const fakeFieldPolicy = newCachePolicy();\n            return {\n              willResolveField({ info }) {\n                // This `as` is \"safe\" in the sense that this is the statement\n                // that makes a GraphQLResolveInfo into a\n                // GraphQLResolveInfoWithCacheControl.\n                (info as GraphQLResolveInfoWithCacheControl).cacheControl = {\n                  setCacheHint: (dynamicHint: CacheHint) => {\n                    fakeFieldPolicy.replace(dynamicHint);\n                  },\n                  cacheHint: fakeFieldPolicy,\n                  cacheHintFromType: memoizedCacheAnnotationFromType,\n                };\n              },\n            };\n          }\n\n          return {\n            willResolveField({ info }) {\n              const fieldPolicy = newCachePolicy();\n\n              let inheritMaxAge = false;\n\n              // If this field's resolver returns an object/interface/union\n              // (maybe wrapped in list/non-null), look for hints on that return\n              // type.\n              const targetType = getNamedType(info.returnType);\n              if (isCompositeType(targetType)) {\n                const typeAnnotation =\n                  memoizedCacheAnnotationFromType(targetType);\n                fieldPolicy.replace(typeAnnotation);\n                inheritMaxAge = !!typeAnnotation.inheritMaxAge;\n              }\n\n              // Look for hints on the field itself (on its parent type), taking\n              // precedence over previously calculated hints.\n              const fieldAnnotation = memoizedCacheAnnotationFromField(\n                info.parentType.getFields()[info.fieldName],\n              );\n\n              // Note that specifying `@cacheControl(inheritMaxAge: true)` on a\n              // field whose return type defines a `maxAge` gives precedence to\n              // the type's `maxAge`. (Perhaps this should be some sort of\n              // error.)\n              if (\n                fieldAnnotation.inheritMaxAge &&\n                fieldPolicy.maxAge === undefined\n              ) {\n                inheritMaxAge = true;\n                // Handle `@cacheControl(inheritMaxAge: true, scope: PRIVATE)`.\n                // (We ignore any specified `maxAge`; perhaps it should be some\n                // sort of error.)\n                if (fieldAnnotation.scope) {\n                  fieldPolicy.replace({ scope: fieldAnnotation.scope });\n                }\n              } else {\n                fieldPolicy.replace(fieldAnnotation);\n              }\n\n              // This `as` is \"safe\" in the sense that this is the statement\n              // that makes a GraphQLResolveInfo into a\n              // GraphQLResolveInfoWithCacheControl.\n              (info as GraphQLResolveInfoWithCacheControl).cacheControl = {\n                setCacheHint: (dynamicHint: CacheHint) => {\n                  fieldPolicy.replace(dynamicHint);\n                },\n                cacheHint: fieldPolicy,\n                cacheHintFromType: memoizedCacheAnnotationFromType,\n              };\n\n              // When the resolver is done, call restrict once. By calling\n              // restrict after the resolver instead of before, we don't need to\n              // \"undo\" the effect on overallCachePolicy of a static hint that\n              // gets refined by a dynamic hint.\n              return () => {\n                // If this field returns a composite type or is a root field and\n                // we haven't seen an explicit maxAge hint, set the maxAge to 0\n                // (uncached) or the default if specified in the constructor.\n                // (Non-object fields by default are assumed to inherit their\n                // cacheability from their parents. But on the other hand, while\n                // root non-object fields can get explicit hints from their\n                // definition on the Query/Mutation object, if that doesn't\n                // exist then there's no parent field that would assign the\n                // default maxAge, so we do it here.)\n                //\n                // You can disable this on a non-root field by writing\n                // `@cacheControl(inheritMaxAge: true)` on it. If you do this,\n                // then its children will be treated like root paths, since\n                // there is no parent maxAge to inherit.\n                //\n                // We do this in the end hook so that dynamic cache control\n                // prevents it from happening (eg,\n                // `info.cacheControl.cacheHint.restrict({maxAge: 60})` should\n                // work rather than doing nothing because we've already set the\n                // max age to the default of 0). This also lets resolvers assume\n                // any hint in `info.cacheControl.cacheHint` was explicitly set.\n                if (\n                  fieldPolicy.maxAge === undefined &&\n                  ((isCompositeType(targetType) && !inheritMaxAge) ||\n                    !info.path.prev)\n                ) {\n                  fieldPolicy.restrict({ maxAge: defaultMaxAge });\n                }\n\n                if (__testing__cacheHints && isRestricted(fieldPolicy)) {\n                  const path = responsePathAsArray(info.path).join('.');\n                  if (__testing__cacheHints.has(path)) {\n                    throw Error(\n                      \"shouldn't happen: addHint should only be called once per path\",\n                    );\n                  }\n                  __testing__cacheHints.set(path, {\n                    maxAge: fieldPolicy.maxAge,\n                    scope: fieldPolicy.scope,\n                  });\n                }\n                requestContext.overallCachePolicy.restrict(fieldPolicy);\n              };\n            },\n          };\n        },\n\n        async willSendResponse(requestContext) {\n          // This hook is just for setting response headers, so make sure that\n          // hasn't been disabled.\n          if (!calculateHttpHeaders) {\n            return;\n          }\n\n          const { response, overallCachePolicy } = requestContext;\n\n          // Look to see if something has already set the cache-control header.\n          // This could be a different plugin... or it could be this very plugin\n          // operating on a different operation in the same batched HTTP\n          // request.\n          const existingCacheControlHeader = parseExistingCacheControlHeader(\n            response.http.headers.get('cache-control'),\n          );\n\n          // If the header contains something other than a value that this\n          // plugin sets, then we leave it alone. We don't want to mangle\n          // something important that you set! That said, it's probably best to\n          // have only one piece of code that writes to a given header, so you\n          // should probably set `calculateHttpHeaders: false` on this plugin.\n          if (existingCacheControlHeader.kind === 'unparsable') {\n            return;\n          }\n\n          const cachePolicy = newCachePolicy();\n          cachePolicy.replace(overallCachePolicy);\n          if (existingCacheControlHeader.kind === 'parsable-and-cacheable') {\n            cachePolicy.restrict(existingCacheControlHeader.hint);\n          }\n          const policyIfCacheable = cachePolicy.policyIfCacheable();\n\n          if (\n            // This code path is only for if we believe it is cacheable.\n            policyIfCacheable &&\n            // Either there wasn't a cache-control header already, or we've\n            // already incorporated it into policyIfCacheable. (If we couldn't\n            // parse it, that means some other plugin or mechanism set the\n            // header. This is confusing, so we just don't make any more\n            // changes. You should probably set `calculateHttpHeaders` to false\n            // in that case and only set the header from one place.)\n            existingCacheControlHeader.kind !== 'uncacheable' &&\n            // At least for now, we don't set cache-control headers for\n            // incremental delivery responses, since we don't know if a later\n            // part of the execution will affect the cache policy (perhaps\n            // dynamically). (Note that willSendResponse is called when the\n            // initial payload is sent, not the final payload.)\n            response.body.kind === 'single' &&\n            !response.body.singleResult.errors\n          ) {\n            response.http.headers.set(\n              'cache-control',\n              `max-age=${\n                policyIfCacheable.maxAge\n              }, ${policyIfCacheable.scope.toLowerCase()}`,\n            );\n          } else if (calculateHttpHeaders !== 'if-cacheable') {\n            // The response is not cacheable, so make sure it doesn't get\n            // cached. This is especially important for GET requests, because\n            // browsers and other agents cache many GET requests by default.\n            // (But if some other plugin set the header to a value that this\n            // plugin does not produce, we don't do anything.)\n            response.http.headers.set(\n              'cache-control',\n              CACHE_CONTROL_HEADER_UNCACHEABLE,\n            );\n          }\n        },\n      };\n    },\n  });\n}\n\nconst CACHE_CONTROL_HEADER_CACHEABLE_REGEXP =\n  /^max-age=(\\d+), (public|private)$/;\nconst CACHE_CONTROL_HEADER_UNCACHEABLE = 'no-store';\n\ntype ExistingCacheControlHeader =\n  | { kind: 'no-header' }\n  | { kind: 'uncacheable' }\n  | { kind: 'parsable-and-cacheable'; hint: CacheHint }\n  | { kind: 'unparsable' };\n\nfunction parseExistingCacheControlHeader(\n  header: string | undefined,\n): ExistingCacheControlHeader {\n  if (!header) {\n    return { kind: 'no-header' };\n  }\n  if (header === CACHE_CONTROL_HEADER_UNCACHEABLE) {\n    return { kind: 'uncacheable' };\n  }\n  const match = CACHE_CONTROL_HEADER_CACHEABLE_REGEXP.exec(header);\n  if (!match) {\n    return { kind: 'unparsable' };\n  }\n  return {\n    kind: 'parsable-and-cacheable',\n    hint: {\n      maxAge: +match[1],\n      scope: match[2] === 'public' ? 'PUBLIC' : 'PRIVATE',\n    },\n  };\n}\n\nfunction cacheAnnotationFromDirectives(\n  directives: ReadonlyArray<DirectiveNode> | undefined,\n): CacheAnnotation | undefined {\n  if (!directives) return undefined;\n\n  const cacheControlDirective = directives.find(\n    (directive) => directive.name.value === 'cacheControl',\n  );\n  if (!cacheControlDirective) return undefined;\n\n  if (!cacheControlDirective.arguments) return undefined;\n\n  const maxAgeArgument = cacheControlDirective.arguments.find(\n    (argument) => argument.name.value === 'maxAge',\n  );\n  const scopeArgument = cacheControlDirective.arguments.find(\n    (argument) => argument.name.value === 'scope',\n  );\n  const inheritMaxAgeArgument = cacheControlDirective.arguments.find(\n    (argument) => argument.name.value === 'inheritMaxAge',\n  );\n\n  const scopeString =\n    scopeArgument?.value?.kind === 'EnumValue'\n      ? scopeArgument.value.value\n      : undefined;\n\n  const scope: CacheScope | undefined =\n    scopeString === 'PUBLIC' || scopeString === 'PRIVATE'\n      ? scopeString\n      : undefined;\n\n  if (\n    inheritMaxAgeArgument?.value?.kind === 'BooleanValue' &&\n    inheritMaxAgeArgument.value.value\n  ) {\n    // We ignore maxAge if it is also specified.\n    return { inheritMaxAge: true, scope };\n  }\n\n  return {\n    maxAge:\n      maxAgeArgument?.value?.kind === 'IntValue'\n        ? parseInt(maxAgeArgument.value.value)\n        : undefined,\n    scope,\n  };\n}\n\nfunction cacheAnnotationFromType(t: GraphQLCompositeType): CacheAnnotation {\n  if (t.astNode) {\n    const hint = cacheAnnotationFromDirectives(t.astNode.directives);\n    if (hint) {\n      return hint;\n    }\n  }\n  if (t.extensionASTNodes) {\n    for (const node of t.extensionASTNodes) {\n      const hint = cacheAnnotationFromDirectives(node.directives);\n      if (hint) {\n        return hint;\n      }\n    }\n  }\n  return {};\n}\n\nfunction cacheAnnotationFromField(\n  field: GraphQLField<unknown, unknown>,\n): CacheAnnotation {\n  if (field.astNode) {\n    const hint = cacheAnnotationFromDirectives(field.astNode.directives);\n    if (hint) {\n      return hint;\n    }\n  }\n  return {};\n}\n\nfunction isRestricted(hint: CacheHint) {\n  return hint.maxAge !== undefined || hint.scope !== undefined;\n}\n/dist/esm/index.d.ts.map{\"version\":3,\"file\":\"index.d.ts\",\"sourceRoot\":\"\",\"sources\":[\"../../src/index.ts\"],\"names\":[],\"mappings\":\"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,cAAc,0BAA0B,CAAC\"}/dist/cjs/internalPlugin.js.map\u0001\u0019{\"version\":3,\"file\":\"internalPlugin.js\",\"sourceRoot\":\"\",\"sources\":[\"../../src/internalPlugin.ts\"],\"names\":[],\"mappings\":\";;;AAqBA,SAAgB,cAAc,CAC5B,CAAuC;IAEvC,OAAO,CAAC,CAAC;AACX,CAAC;AAJD,wCAIC;AASD,SAAgB,gBAAgB,CAC9B,MAAoC;IAIpC,OAAO,wBAAwB,IAAI,MAAM,CAAC;AAC5C,CAAC;AAND,4CAMC\"}-/dist/esm/plugin/usageReporting/plugin.js.map<{\"version\":3,\"file\":\"plugin.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../../src/plugin/usageReporting/plugin.ts\"],\"names\":[],\"mappings\":\"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\"}'/dist/esm/internalErrorClasses.d.ts.map\u0002{\"version\":3,\"file\":\"internalErrorClasses.d.ts\",\"sourceRoot\":\"\",\"sources\":[\"../../src/internalErrorClasses.ts\"],\"names\":[],\"mappings\":\"AAAA,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAO1D,cAAM,oBAAqB,SAAQ,YAAY;gBAE3C,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,qBAAqB,EAC3B,OAAO,CAAC,EAAE,mBAAmB;CAQhC;AAED,qBAAa,WAAY,SAAQ,oBAAoB;gBACvC,YAAY,EAAE,YAAY;CAQvC;AAED,qBAAa,eAAgB,SAAQ,oBAAoB;gBAC3C,YAAY,EAAE,YAAY;CAcvC;AAcD,qBAAa,2BAA4B,SAAQ,oBAAoB;;CAQpE;AAED,qBAAa,+BAAgC,SAAQ,oBAAoB;;CAYxE;AAED,qBAAa,cAAe,SAAQ,oBAAoB;gBAC1C,YAAY,EAAE,YAAY;CAOvC;AAED,qBAAa,wBAAyB,SAAQ,oBAAoB;gBACpD,YAAY,EAAE,YAAY;CAcvC;AAED,qBAAa,eAAgB,SAAQ,oBAAoB;gBAC3C,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB;CAQ3D\"}/src/externalTypes/context.ts\u0003// The default `contextValue` is an empty object. Generics related to the\n// context type of `ApolloServer` should `extends BasedContext` as we do\n// throughout this repository.\nexport type BaseContext = {};\n\n// Integration authors should use this type for typing their own user-provided\n// context function. See the express middleware for a usage example.\nexport type ContextFunction<\n  TIntegrationSpecificArgs extends any[],\n  TContext extends BaseContext = BaseContext,\n> = (...integrationContext: TIntegrationSpecificArgs) => Promise<TContext>;\n\n// This is used in `executeHTTPGraphQLRequest` so that that function can apply\n// consistent error handling if it throws. Web framework integrations typically\n// pass a function which passes integration-specific parameters to a\n// user-provided `ContextFunction`.\nexport type ContextThunk<TContext extends BaseContext = BaseContext> =\n  () => Promise<TContext>;\n./src/plugin/usageReporting/iterateOverTrace.ts\u0011Wimport type { Trace } from '@apollo/usage-reporting-protobuf';\n\n/**\n * Iterates over the entire trace, calling `f` on each Trace.Node found. It\n * looks under the \"root\" node as well as any inside the query plan. If any `f`\n * returns true, it stops walking the tree.\n *\n * Each call to `f` will receive an object that implements ResponseNamePath. If\n * `includePath` is true, `f` can call `toArray()` on it to convert the\n * linked-list representation to an array of the response name (field name)\n * nodes that you navigate to get to the node (including a \"service:subgraph\"\n * top-level node if this is a federated trace). Note that we don't add anything\n * to the path for index (list element) nodes. This is because the only use case\n * we have (error path statistics) does not care about list indexes (it's not\n * that interesting to know that sometimes an error was at foo.3.bar and\n * sometimes foo.5.bar, vs just generally foo.bar).\n *\n * If `includePath` is false, we don't bother to build up the linked lists, and\n * calling `toArray()` will throw.\n */\nexport function iterateOverTrace(\n  trace: Trace,\n  f: (node: Trace.INode, path: ResponseNamePath) => boolean,\n  includePath: boolean,\n) {\n  const rootPath = includePath\n    ? new RootCollectingPathsResponseNamePath()\n    : notCollectingPathsResponseNamePath;\n  if (trace.root) {\n    if (iterateOverTraceNode(trace.root, rootPath, f)) return;\n  }\n\n  if (trace.queryPlan) {\n    if (iterateOverQueryPlan(trace.queryPlan, rootPath, f)) return;\n  }\n}\n\n// Helper for iterateOverTrace; returns true to stop the overall walk.\nfunction iterateOverQueryPlan(\n  node: Trace.IQueryPlanNode,\n  rootPath: ResponseNamePath,\n  f: (node: Trace.INode, path: ResponseNamePath) => boolean,\n): boolean {\n  if (!node) return false;\n\n  if (node.fetch?.trace?.root && node.fetch.serviceName) {\n    return iterateOverTraceNode(\n      node.fetch.trace.root,\n      rootPath.child(`service:${node.fetch.serviceName}`),\n      f,\n    );\n  }\n  if (node.flatten?.node) {\n    return iterateOverQueryPlan(node.flatten.node, rootPath, f);\n  }\n  if (node.parallel?.nodes) {\n    // We want to stop as soon as some call returns true, which happens to be\n    // exactly what 'some' does.\n    return node.parallel.nodes.some((node) =>\n      iterateOverQueryPlan(node, rootPath, f),\n    );\n  }\n  if (node.sequence?.nodes) {\n    // We want to stop as soon as some call returns true, which happens to be\n    // exactly what 'some' does.\n    return node.sequence.nodes.some((node) =>\n      iterateOverQueryPlan(node, rootPath, f),\n    );\n  }\n\n  return false;\n}\n\n// Helper for iterateOverTrace; returns true to stop the overall walk.\nfunction iterateOverTraceNode(\n  node: Trace.INode,\n  path: ResponseNamePath,\n  f: (node: Trace.INode, path: ResponseNamePath) => boolean,\n): boolean {\n  // Invoke the function; if it returns true, don't descend and tell callers to\n  // stop walking.\n  if (f(node, path)) {\n    return true;\n  }\n\n  return (\n    // We want to stop as soon as some call returns true, which happens to be\n    // exactly what 'some' does.\n    node.child?.some((child) => {\n      const childPath = child.responseName\n        ? path.child(child.responseName)\n        : path;\n      return iterateOverTraceNode(child, childPath, f);\n    }) ?? false\n  );\n}\n\nexport interface ResponseNamePath {\n  toArray(): string[];\n  child(responseName: string): ResponseNamePath;\n}\n\nconst notCollectingPathsResponseNamePath: ResponseNamePath = {\n  toArray() {\n    throw Error('not collecting paths!');\n  },\n  child() {\n    return this;\n  },\n};\n\ntype CollectingPathsResponseNamePath =\n  | RootCollectingPathsResponseNamePath\n  | ChildCollectingPathsResponseNamePath;\nclass RootCollectingPathsResponseNamePath implements ResponseNamePath {\n  toArray() {\n    return [];\n  }\n  child(responseName: string) {\n    return new ChildCollectingPathsResponseNamePath(responseName, this);\n  }\n}\nclass ChildCollectingPathsResponseNamePath implements ResponseNamePath {\n  constructor(\n    readonly responseName: string,\n    readonly prev: CollectingPathsResponseNamePath,\n  ) {}\n  toArray() {\n    const out = [];\n    let curr: CollectingPathsResponseNamePath = this;\n    while (curr instanceof ChildCollectingPathsResponseNamePath) {\n      out.push(curr.responseName);\n      curr = curr.prev;\n    }\n    return out.reverse();\n  }\n  child(responseName: string) {\n    return new ChildCollectingPathsResponseNamePath(responseName, this);\n  }\n}\n/dist/esm/errors/index.d.ts\u0002export declare enum ApolloServerErrorCode {\n    INTERNAL_SERVER_ERROR = \"INTERNAL_SERVER_ERROR\",\n    GRAPHQL_PARSE_FAILED = \"GRAPHQL_PARSE_FAILED\",\n    GRAPHQL_VALIDATION_FAILED = \"GRAPHQL_VALIDATION_FAILED\",\n    PERSISTED_QUERY_NOT_FOUND = \"PERSISTED_QUERY_NOT_FOUND\",\n    PERSISTED_QUERY_NOT_SUPPORTED = \"PERSISTED_QUERY_NOT_SUPPORTED\",\n    BAD_USER_INPUT = \"BAD_USER_INPUT\",\n    OPERATION_RESOLUTION_FAILURE = \"OPERATION_RESOLUTION_FAILURE\",\n    BAD_REQUEST = \"BAD_REQUEST\"\n}\nexport declare enum ApolloServerValidationErrorCode {\n    INTROSPECTION_DISABLED = \"INTROSPECTION_DISABLED\"\n}\nexport declare function unwrapResolverError(error: unknown): unknown;\n//# sourceMappingURL=index.d.ts.map4/dist/esm/plugin/schemaReporting/schemaReporter.d.ts\u0005import type { Logger } from '@apollo/utils.logger';\nimport type { SchemaReport, ReportSchemaResponse } from './generated/operations';\nimport type { Fetcher } from '@apollo/utils.fetcher';\nexport declare const schemaReportGql = \"mutation SchemaReport($report: SchemaReport!, $coreSchema: String) {\\n  reportSchema(report: $report, coreSchema: $coreSchema) {\\n    __typename\\n    ... on ReportSchemaError {\\n      message\\n      code\\n    }\\n    ... on ReportSchemaResponse {\\n      inSeconds\\n      withCoreSchema\\n    }\\n  }\\n}\\n\";\nexport declare class SchemaReporter {\n    private readonly schemaReport;\n    private readonly coreSchema;\n    private readonly endpointUrl;\n    private readonly logger;\n    private readonly initialReportingDelayInMs;\n    private readonly fallbackReportingDelayInMs;\n    private readonly fetcher;\n    private isStopped;\n    private pollTimer?;\n    private readonly headers;\n    constructor(options: {\n        schemaReport: SchemaReport;\n        coreSchema: string;\n        apiKey: string;\n        endpointUrl: string | undefined;\n        logger: Logger;\n        initialReportingDelayInMs: number;\n        fallbackReportingDelayInMs: number;\n        fetcher?: Fetcher;\n    });\n    stopped(): boolean;\n    start(): void;\n    stop(): void;\n    private sendOneReportAndScheduleNext;\n    reportSchema(withCoreSchema: boolean): Promise<ReportSchemaResponse | null>;\n    private apolloQuery;\n}\n//# sourceMappingURL=schemaReporter.d.ts.map\"/dist/esm/requestPipeline.d.ts.map\u0002y{\"version\":3,\"file\":\"requestPipeline.d.ts\",\"sourceRoot\":\"\",\"sources\":[\"../../src/requestPipeline.ts\"],\"names\":[],\"mappings\":\"AA6BA,OAAO,KAAK,EACV,qBAAqB,EAUrB,WAAW,EACX,eAAe,EAEhB,MAAM,0BAA0B,CAAC;AAWlC,OAAO,KAAK,EACV,YAAY,EACZ,qBAAqB,EACrB,iBAAiB,EAClB,MAAM,mBAAmB,CAAC;AAa3B,eAAO,MAAM,gBAAgB,SAAS,CAAC;AAMvC,aAAK,OAAO,CAAC,CAAC,IAAI;IAAE,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,CAAC;AA8BrD,wBAAsB,qBAAqB,CAAC,QAAQ,SAAS,WAAW,EACtE,iBAAiB,EAAE,iBAAiB,EACpC,MAAM,EAAE,YAAY,CAAC,QAAQ,CAAC,EAC9B,SAAS,EAAE,qBAAqB,CAAC,QAAQ,CAAC,EAC1C,cAAc,EAAE,OAAO,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC,GACvD,OAAO,CAAC,eAAe,CAAC,CAuiB1B\"}(/dist/esm/plugin/usageReporting/index.jsaexport { ApolloServerPluginUsageReporting } from './plugin.js';\n//# sourceMappingURL=index.js.map/dist/esm/externalTypes/http.js+export {};\n//# sourceMappingURL=http.js.map /dist/esm/requestPipeline.js.map-{\"version\":3,\"file\":\"requestPipeline.js\",\"sourceRoot\":\"\",\"sources\":[\"../../src/requestPipeline.ts\"],\"names\":[],\"mappings\":\"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\"})/dist/esm/plugin/schemaIsFederated.js.map\u0002c{\"version\":3,\"file\":\"schemaIsFederated.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/plugin/schemaIsFederated.ts\"],\"names\":[],\"mappings\":\"AAAA,OAAO,EAAiB,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAkBpE,MAAM,UAAU,iBAAiB,CAAC,MAAqB;IACrD,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC/C,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE;QAC9B,OAAO,KAAK,CAAC;KACd;IACD,MAAM,QAAQ,GAAG,WAAW,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC;IAC7C,IAAI,CAAC,QAAQ,EAAE;QACb,OAAO,KAAK,CAAC;KACd;IACD,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC;IACnC,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE;QAC/B,OAAO,KAAK,CAAC;KACd;IACD,OAAO,YAAY,CAAC,IAAI,IAAI,QAAQ,CAAC;AACvC,CAAC\"}(/dist/cjs/plugin/traceTreeBuilder.js.map\u0016{\"version\":3,\"file\":\"traceTreeBuilder.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/plugin/traceTreeBuilder.ts\"],\"names\":[],\"mappings\":\"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\"})/dist/cjs/plugin/inlineTrace/index.js.map\bh{\"version\":3,\"file\":\"index.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../../src/plugin/inlineTrace/index.ts\"],\"names\":[],\"mappings\":\"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\"}&/dist/esm/externalTypes/index.d.ts.map\u0003T{\"version\":3,\"file\":\"index.d.ts\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/externalTypes/index.ts\"],\"names\":[],\"mappings\":\"AAMA,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC/E,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpE,YAAY,EACV,kBAAkB,EAClB,mBAAmB,EACnB,eAAe,GAChB,MAAM,WAAW,CAAC;AACnB,YAAY,EACV,kBAAkB,EAClB,0BAA0B,EAC1B,+BAA+B,EAC/B,sBAAsB,EACtB,qCAAqC,EACrC,qCAAqC,EACrC,mCAAmC,EACnC,sCAAsC,EACtC,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,WAAW,GACZ,MAAM,cAAc,CAAC;AACtB,YAAY,EACV,qBAAqB,EACrB,qBAAqB,EACrB,uCAAuC,EACvC,wCAAwC,EACxC,qCAAqC,EACrC,sCAAsC,EACtC,oCAAoC,EACpC,yCAAyC,EACzC,uCAAuC,EACvC,qCAAqC,GACtC,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EACV,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,qBAAqB,EACrB,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAE1B,YAAY,EACV,6DAA6D,EAC7D,gEAAgE,EAChE,6CAA6C,EAC7C,kDAAkD,EAClD,mDAAmD,GACpD,MAAM,kCAAkC,CAAC\"}-/dist/cjs/plugin/drainHttpServer/index.js.map\u0001{\"version\":3,\"file\":\"index.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../../src/plugin/drainHttpServer/index.ts\"],\"names\":[],\"mappings\":\";;;AAEA,iDAAyC;AAuBzC,SAAgB,iCAAiC,CAC/C,OAAiD;IAEjD,MAAM,OAAO,GAAG,IAAI,sBAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAChD,OAAO;QACL,KAAK,CAAC,eAAe;YACnB,OAAO;gBACL,KAAK,CAAC,WAAW;oBACf,MAAM,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,qBAAqB,IAAI,KAAM,CAAC,CAAC;gBAC9D,CAAC;aACF,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC;AAbD,8EAaC\"}#/plugin/usageReporting/package.json\u0001\u0017{\n  \"name\": \"@apollo/server/plugin/usageReporting\",\n  \"type\": \"module\",\n  \"main\": \"../../dist/cjs/plugin/usageReporting/index.js\",\n  \"module\": \"../../dist/esm/plugin/usageReporting/index.js\",\n  \"types\": \"../../dist/esm/plugin/usageReporting/index.d.ts\",\n  \"sideEffects\": false\n}\n-/dist/esm/plugin/landingPage/default/index.js\rimport { getEmbeddedExplorerHTML, getEmbeddedSandboxHTML, } from './getEmbeddedHTML.js';\nexport function ApolloServerPluginLandingPageLocalDefault(options = {}) {\n    const { version, __internal_apolloStudioEnv__, ...rest } = {\n        embed: true,\n        ...options,\n    };\n    return ApolloServerPluginLandingPageDefault(version, {\n        isProd: false,\n        apolloStudioEnv: __internal_apolloStudioEnv__,\n        ...rest,\n    });\n}\nexport function ApolloServerPluginLandingPageProductionDefault(options = {}) {\n    const { version, __internal_apolloStudioEnv__, ...rest } = options;\n    return ApolloServerPluginLandingPageDefault(version, {\n        isProd: true,\n        apolloStudioEnv: __internal_apolloStudioEnv__,\n        ...rest,\n    });\n}\nfunction encodeConfig(config) {\n    return JSON.stringify(encodeURIComponent(JSON.stringify(config)));\n}\nconst getNonEmbeddedLandingPageHTML = (version, config) => {\n    const encodedConfig = encodeConfig(config);\n    return `\n <div class=\"fallback\">\n  <h1>Welcome to Apollo Server</h1>\n  <p>The full landing page cannot be loaded; it appears that you might be offline.</p>\n</div>\n<script>window.landingPage = ${encodedConfig};</script>\n<script src=\"https://apollo-server-landing-page.cdn.apollographql.com/${version}/static/js/main.js\"></script>`;\n};\nfunction ApolloServerPluginLandingPageDefault(maybeVersion, config) {\n    const version = maybeVersion ?? '_latest';\n    return {\n        __internal_installed_implicitly__: false,\n        async serverWillStart() {\n            return {\n                async renderLandingPage() {\n                    const html = `\n<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\" />\n    <link\n      rel=\"icon\"\n      href=\"https://apollo-server-landing-page.cdn.apollographql.com/${version}/assets/favicon.png\"\n    />\n    <meta name=\"viewport\" content=\"width=device-width,initial-scale=1\" />\n    <link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" />\n    <link\n      href=\"https://fonts.googleapis.com/css2?family=Source+Sans+Pro&display=swap\"\n      rel=\"stylesheet\"\n    />\n    <meta name=\"theme-color\" content=\"#000000\" />\n    <meta name=\"description\" content=\"Apollo server landing page\" />\n    <link\n      rel=\"apple-touch-icon\"\n      href=\"https://apollo-server-landing-page.cdn.apollographql.com/${version}/assets/favicon.png\"\n    />\n    <link\n      rel=\"manifest\"\n      href=\"https://apollo-server-landing-page.cdn.apollographql.com/${version}/manifest.json\"\n    />\n    <title>Apollo Server</title>\n  </head>\n  <body style=\"margin: 0; overflow-x: hidden; overflow-y: hidden\">\n    <noscript>You need to enable JavaScript to run this app.</noscript>\n    <div id=\"react-root\">\n      <style>\n        .fallback {\n          opacity: 0;\n          animation: fadeIn 1s 1s;\n          animation-iteration-count: 1;\n          animation-fill-mode: forwards;\n          padding: 1em;\n        }\n        @keyframes fadeIn {\n          0% {opacity:0;}\n          100% {opacity:1; }\n        }\n      </style>\n    ${config.embed\n                        ? 'graphRef' in config && config.graphRef\n                            ? getEmbeddedExplorerHTML(version, config)\n                            : getEmbeddedSandboxHTML(version, config)\n                        : getNonEmbeddedLandingPageHTML(version, config)}\n    </div>\n  </body>\n</html>\n          `;\n                    return { html };\n                },\n            };\n        },\n    };\n}\n//# sourceMappingURL=index.js.map/dist/esm/ApolloServer.jskRimport { isNodeLike } from '@apollo/utils.isnodelike';\nimport { makeExecutableSchema } from '@graphql-tools/schema';\nimport resolvable from '@josephg/resolvable';\nimport { assertValidSchema, GraphQLError, print, } from 'graphql';\nimport { InMemoryLRUCache, PrefixingKeyValueCache, } from '@apollo/utils.keyvaluecache';\nimport loglevel from 'loglevel';\nimport Negotiator from 'negotiator';\nimport * as uuid from 'uuid';\nimport { newCachePolicy } from './cachePolicy.js';\nimport { determineApolloConfig } from './determineApolloConfig.js';\nimport { ensureError, ensureGraphQLError, normalizeAndFormatErrors, } from './errorNormalize.js';\nimport { ApolloServerErrorCode, ApolloServerValidationErrorCode, } from './errors/index.js';\nimport { runPotentiallyBatchedHttpQuery } from './httpBatching.js';\nimport { pluginIsInternal } from './internalPlugin.js';\nimport { preventCsrf, recommendedCsrfPreventionRequestHeaders, } from './preventCsrf.js';\nimport { APQ_CACHE_PREFIX, processGraphQLRequest } from './requestPipeline.js';\nimport { newHTTPGraphQLHead, prettyJSONStringify } from './runHttpQuery.js';\nimport { SchemaManager } from './utils/schemaManager.js';\nimport { isDefined } from './utils/isDefined.js';\nimport { UnreachableCaseError } from './utils/UnreachableCaseError.js';\nimport { HeaderMap } from './utils/HeaderMap.js';\nconst NoIntrospection = (context) => ({\n    Field(node) {\n        if (node.name.value === '__schema' || node.name.value === '__type') {\n            context.reportError(new GraphQLError('GraphQL introspection is not allowed by Apollo Server, but the query contained __schema or __type. To enable introspection, pass introspection: true to ApolloServer in production', {\n                nodes: [node],\n                extensions: {\n                    validationErrorCode: ApolloServerValidationErrorCode.INTROSPECTION_DISABLED,\n                },\n            }));\n        }\n    },\n});\nfunction defaultLogger() {\n    const loglevelLogger = loglevel.getLogger('apollo-server');\n    loglevelLogger.setLevel(loglevel.levels.INFO);\n    return loglevelLogger;\n}\nexport class ApolloServer {\n    constructor(config) {\n        const nodeEnv = config.nodeEnv ?? process.env.NODE_ENV ?? '';\n        this.logger = config.logger ?? defaultLogger();\n        const apolloConfig = determineApolloConfig(config.apollo);\n        const isDev = nodeEnv !== 'production';\n        const state = config.gateway\n            ?\n                {\n                    phase: 'initialized',\n                    schemaManager: new SchemaManager({\n                        gateway: config.gateway,\n                        apolloConfig,\n                        schemaDerivedDataProvider: (schema) => ApolloServer.generateSchemaDerivedData(schema, config.documentStore),\n                        logger: this.logger,\n                    }),\n                }\n            :\n                {\n                    phase: 'initialized',\n                    schemaManager: new SchemaManager({\n                        apiSchema: ApolloServer.constructSchema(config),\n                        schemaDerivedDataProvider: (schema) => ApolloServer.generateSchemaDerivedData(schema, config.documentStore),\n                        logger: this.logger,\n                    }),\n                };\n        const introspectionEnabled = config.introspection ?? isDev;\n        this.cache = config.cache ?? new InMemoryLRUCache();\n        this.internals = {\n            formatError: config.formatError,\n            rootValue: config.rootValue,\n            validationRules: [\n                ...(config.validationRules ?? []),\n                ...(introspectionEnabled ? [] : [NoIntrospection]),\n            ],\n            fieldResolver: config.fieldResolver,\n            includeStacktraceInErrorResponses: config.includeStacktraceInErrorResponses ??\n                (nodeEnv !== 'production' && nodeEnv !== 'test'),\n            persistedQueries: config.persistedQueries === false\n                ? undefined\n                : {\n                    ...config.persistedQueries,\n                    cache: new PrefixingKeyValueCache(config.persistedQueries?.cache ?? this.cache, APQ_CACHE_PREFIX),\n                },\n            nodeEnv,\n            allowBatchedHttpRequests: config.allowBatchedHttpRequests ?? false,\n            apolloConfig,\n            plugins: config.plugins ?? [],\n            parseOptions: config.parseOptions ?? {},\n            state,\n            stopOnTerminationSignals: config.stopOnTerminationSignals,\n            gatewayExecutor: null,\n            csrfPreventionRequestHeaders: config.csrfPrevention === true || config.csrfPrevention === undefined\n                ? recommendedCsrfPreventionRequestHeaders\n                : config.csrfPrevention === false\n                    ? null\n                    : config.csrfPrevention.requestHeaders ??\n                        recommendedCsrfPreventionRequestHeaders,\n            __testing_incrementalExecutionResults: config.__testing_incrementalExecutionResults,\n        };\n    }\n    async start() {\n        return await this._start(false);\n    }\n    startInBackgroundHandlingStartupErrorsByLoggingAndFailingAllRequests() {\n        this._start(true).catch((e) => this.logStartupError(e));\n    }\n    async _start(startedInBackground) {\n        if (this.internals.state.phase !== 'initialized') {\n            throw new Error(`You should only call 'start()' or ` +\n                `'startInBackgroundHandlingStartupErrorsByLoggingAndFailingAllRequests()' ` +\n                `once on your ApolloServer.`);\n        }\n        const schemaManager = this.internals.state.schemaManager;\n        const barrier = resolvable();\n        this.internals.state = {\n            phase: 'starting',\n            barrier,\n            schemaManager,\n            startedInBackground,\n        };\n        try {\n            await this.addDefaultPlugins();\n            const toDispose = [];\n            const executor = await schemaManager.start();\n            if (executor) {\n                this.internals.gatewayExecutor = executor;\n            }\n            toDispose.push(async () => {\n                await schemaManager.stop();\n            });\n            const schemaDerivedData = schemaManager.getSchemaDerivedData();\n            const service = {\n                logger: this.logger,\n                cache: this.cache,\n                schema: schemaDerivedData.schema,\n                apollo: this.internals.apolloConfig,\n                startedInBackground,\n            };\n            const taggedServerListeners = (await Promise.all(this.internals.plugins.map(async (plugin) => ({\n                serverListener: plugin.serverWillStart && (await plugin.serverWillStart(service)),\n                installedImplicitly: isImplicitlyInstallablePlugin(plugin) &&\n                    plugin.__internal_installed_implicitly__,\n            })))).filter((maybeTaggedServerListener) => typeof maybeTaggedServerListener.serverListener === 'object');\n            taggedServerListeners.forEach(({ serverListener: { schemaDidLoadOrUpdate } }) => {\n                if (schemaDidLoadOrUpdate) {\n                    schemaManager.onSchemaLoadOrUpdate(schemaDidLoadOrUpdate);\n                }\n            });\n            const serverWillStops = taggedServerListeners\n                .map((l) => l.serverListener.serverWillStop)\n                .filter(isDefined);\n            if (serverWillStops.length) {\n                toDispose.push(async () => {\n                    await Promise.all(serverWillStops.map((serverWillStop) => serverWillStop()));\n                });\n            }\n            const drainServerCallbacks = taggedServerListeners\n                .map((l) => l.serverListener.drainServer)\n                .filter(isDefined);\n            const drainServers = drainServerCallbacks.length\n                ? async () => {\n                    await Promise.all(drainServerCallbacks.map((drainServer) => drainServer()));\n                }\n                : null;\n            let taggedServerListenersWithRenderLandingPage = taggedServerListeners.filter((l) => l.serverListener.renderLandingPage);\n            if (taggedServerListenersWithRenderLandingPage.length > 1) {\n                taggedServerListenersWithRenderLandingPage =\n                    taggedServerListenersWithRenderLandingPage.filter((l) => !l.installedImplicitly);\n            }\n            let landingPage = null;\n            if (taggedServerListenersWithRenderLandingPage.length > 1) {\n                throw Error('Only one plugin can implement renderLandingPage.');\n            }\n            else if (taggedServerListenersWithRenderLandingPage.length) {\n                landingPage = await taggedServerListenersWithRenderLandingPage[0]\n                    .serverListener.renderLandingPage();\n            }\n            const toDisposeLast = this.maybeRegisterTerminationSignalHandlers(['SIGINT', 'SIGTERM'], startedInBackground);\n            this.internals.state = {\n                phase: 'started',\n                schemaManager,\n                drainServers,\n                landingPage,\n                toDispose,\n                toDisposeLast,\n            };\n        }\n        catch (maybeError) {\n            const error = ensureError(maybeError);\n            try {\n                await Promise.all(this.internals.plugins.map(async (plugin) => plugin.startupDidFail?.({ error })));\n            }\n            catch (pluginError) {\n                this.logger.error(`startupDidFail hook threw: ${pluginError}`);\n            }\n            this.internals.state = {\n                phase: 'failed to start',\n                error,\n            };\n            throw error;\n        }\n        finally {\n            barrier.resolve();\n        }\n    }\n    maybeRegisterTerminationSignalHandlers(signals, startedInBackground) {\n        const toDisposeLast = [];\n        if (this.internals.stopOnTerminationSignals === false ||\n            (this.internals.stopOnTerminationSignals === undefined &&\n                !(isNodeLike &&\n                    this.internals.nodeEnv !== 'test' &&\n                    !startedInBackground))) {\n            return toDisposeLast;\n        }\n        let receivedSignal = false;\n        const signalHandler = async (signal) => {\n            if (receivedSignal) {\n                return;\n            }\n            receivedSignal = true;\n            try {\n                await this.stop();\n            }\n            catch (e) {\n                this.logger.error(`stop() threw during ${signal} shutdown`);\n                this.logger.error(e);\n                process.exit(1);\n            }\n            process.kill(process.pid, signal);\n        };\n        signals.forEach((signal) => {\n            process.on(signal, signalHandler);\n            toDisposeLast.push(async () => {\n                process.removeListener(signal, signalHandler);\n            });\n        });\n        return toDisposeLast;\n    }\n    async _ensureStarted() {\n        while (true) {\n            switch (this.internals.state.phase) {\n                case 'initialized':\n                    throw new Error('You need to call `server.start()` before using your Apollo Server.');\n                case 'starting':\n                    await this.internals.state.barrier;\n                    break;\n                case 'failed to start':\n                    this.logStartupError(this.internals.state.error);\n                    throw new Error('This data graph is missing a valid configuration. More details may be available in the server logs.');\n                case 'started':\n                case 'draining':\n                    return this.internals.state;\n                case 'stopping':\n                case 'stopped':\n                    this.logger.warn('A GraphQL operation was received during server shutdown. The ' +\n                        'operation will fail. Consider draining the HTTP server on shutdown; ' +\n                        'see https://go.apollo.dev/s/drain for details.');\n                    throw new Error(`Cannot execute GraphQL operations ${this.internals.state.phase === 'stopping'\n                        ? 'while the server is stopping'\n                        : 'after the server has stopped'}.'`);\n                default:\n                    throw new UnreachableCaseError(this.internals.state);\n            }\n        }\n    }\n    assertStarted(expressionForError) {\n        if (this.internals.state.phase !== 'started' &&\n            this.internals.state.phase !== 'draining' &&\n            !(this.internals.state.phase === 'starting' &&\n                this.internals.state.startedInBackground)) {\n            throw new Error('You must `await server.start()` before calling `' +\n                expressionForError +\n                '`');\n        }\n    }\n    logStartupError(err) {\n        this.logger.error('An error occurred during Apollo Server startup. All GraphQL requests ' +\n            'will now fail. The startup error was: ' +\n            (err?.message || err));\n    }\n    static constructSchema(config) {\n        if (config.schema) {\n            return config.schema;\n        }\n        const { typeDefs, resolvers } = config;\n        const augmentedTypeDefs = Array.isArray(typeDefs) ? typeDefs : [typeDefs];\n        return makeExecutableSchema({\n            typeDefs: augmentedTypeDefs,\n            resolvers,\n        });\n    }\n    static generateSchemaDerivedData(schema, providedUnprefixedDocumentStore) {\n        assertValidSchema(schema);\n        return {\n            schema,\n            documentStore: providedUnprefixedDocumentStore === undefined\n                ? new InMemoryLRUCache()\n                : providedUnprefixedDocumentStore === null\n                    ? null\n                    : new PrefixingKeyValueCache(providedUnprefixedDocumentStore, `${uuid.v4()}:`),\n        };\n    }\n    async stop() {\n        switch (this.internals.state.phase) {\n            case 'initialized':\n            case 'starting':\n            case 'failed to start':\n                throw Error('apolloServer.stop() should only be called after `await apolloServer.start()` has succeeded');\n            case 'stopped':\n                if (this.internals.state.stopError) {\n                    throw this.internals.state.stopError;\n                }\n                return;\n            case 'stopping':\n            case 'draining': {\n                await this.internals.state.barrier;\n                const state = this.internals.state;\n                if (state.phase !== 'stopped') {\n                    throw Error(`Surprising post-stopping state ${state.phase}`);\n                }\n                if (state.stopError) {\n                    throw state.stopError;\n                }\n                return;\n            }\n            case 'started':\n                break;\n            default:\n                throw new UnreachableCaseError(this.internals.state);\n        }\n        const barrier = resolvable();\n        const { schemaManager, drainServers, landingPage, toDispose, toDisposeLast, } = this.internals.state;\n        this.internals.state = {\n            phase: 'draining',\n            barrier,\n            schemaManager,\n            landingPage,\n        };\n        try {\n            await drainServers?.();\n            this.internals.state = { phase: 'stopping', barrier };\n            await Promise.all([...toDispose].map((dispose) => dispose()));\n            await Promise.all([...toDisposeLast].map((dispose) => dispose()));\n        }\n        catch (stopError) {\n            this.internals.state = {\n                phase: 'stopped',\n                stopError: stopError,\n            };\n            barrier.resolve();\n            throw stopError;\n        }\n        this.internals.state = { phase: 'stopped', stopError: null };\n    }\n    async addDefaultPlugins() {\n        const { plugins, apolloConfig, nodeEnv } = this.internals;\n        const isDev = nodeEnv !== 'production';\n        const alreadyHavePluginWithInternalId = (id) => plugins.some((p) => pluginIsInternal(p) && p.__internal_plugin_id__ === id);\n        const pluginsByInternalID = new Map();\n        for (const p of plugins) {\n            if (pluginIsInternal(p)) {\n                const id = p.__internal_plugin_id__;\n                if (!pluginsByInternalID.has(id)) {\n                    pluginsByInternalID.set(id, {\n                        sawDisabled: false,\n                        sawNonDisabled: false,\n                    });\n                }\n                const seen = pluginsByInternalID.get(id);\n                if (p.__is_disabled_plugin__) {\n                    seen.sawDisabled = true;\n                }\n                else {\n                    seen.sawNonDisabled = true;\n                }\n                if (seen.sawDisabled && seen.sawNonDisabled) {\n                    throw new Error(`You have tried to install both ApolloServerPlugin${id} and ` +\n                        `ApolloServerPlugin${id}Disabled in your server. Please choose ` +\n                        `whether or not you want to disable the feature and install the ` +\n                        `appropriate plugin for your use case.`);\n                }\n            }\n        }\n        {\n            if (!alreadyHavePluginWithInternalId('CacheControl')) {\n                const { ApolloServerPluginCacheControl } = await import('./plugin/cacheControl/index.js');\n                plugins.push(ApolloServerPluginCacheControl());\n            }\n        }\n        {\n            const alreadyHavePlugin = alreadyHavePluginWithInternalId('UsageReporting');\n            if (!alreadyHavePlugin && apolloConfig.key) {\n                if (apolloConfig.graphRef) {\n                    const { ApolloServerPluginUsageReporting } = await import('./plugin/usageReporting/index.js');\n                    plugins.unshift(ApolloServerPluginUsageReporting());\n                }\n                else {\n                    this.logger.warn('You have specified an Apollo key but have not specified a graph ref; usage ' +\n                        'reporting is disabled. To enable usage reporting, set the `APOLLO_GRAPH_REF` ' +\n                        'environment variable to `your-graph-id@your-graph-variant`. To disable this ' +\n                        'warning, install `ApolloServerPluginUsageReportingDisabled`.');\n                }\n            }\n        }\n        {\n            const alreadyHavePlugin = alreadyHavePluginWithInternalId('SchemaReporting');\n            const enabledViaEnvVar = process.env.APOLLO_SCHEMA_REPORTING === 'true';\n            if (!alreadyHavePlugin && enabledViaEnvVar) {\n                if (apolloConfig.key) {\n                    const { ApolloServerPluginSchemaReporting } = await import('./plugin/schemaReporting/index.js');\n                    plugins.push(ApolloServerPluginSchemaReporting());\n                }\n                else {\n                    throw new Error(\"You've enabled schema reporting by setting the APOLLO_SCHEMA_REPORTING \" +\n                        'environment variable to true, but you also need to provide your ' +\n                        'Apollo API key, via the APOLLO_KEY environment ' +\n                        'variable or via `new ApolloServer({apollo: {key})');\n                }\n            }\n        }\n        {\n            const alreadyHavePlugin = alreadyHavePluginWithInternalId('InlineTrace');\n            if (!alreadyHavePlugin) {\n                const { ApolloServerPluginInlineTrace } = await import('./plugin/inlineTrace/index.js');\n                plugins.push(ApolloServerPluginInlineTrace({ __onlyIfSchemaIsFederated: true }));\n            }\n        }\n        const alreadyHavePlugin = alreadyHavePluginWithInternalId('LandingPageDisabled');\n        if (!alreadyHavePlugin) {\n            const { ApolloServerPluginLandingPageLocalDefault, ApolloServerPluginLandingPageProductionDefault, } = await import('./plugin/landingPage/default/index.js');\n            const plugin = isDev\n                ? ApolloServerPluginLandingPageLocalDefault()\n                : ApolloServerPluginLandingPageProductionDefault();\n            if (!isImplicitlyInstallablePlugin(plugin)) {\n                throw Error('default landing page plugin should be implicitly installable?');\n            }\n            plugin.__internal_installed_implicitly__ = true;\n            plugins.push(plugin);\n        }\n    }\n    addPlugin(plugin) {\n        if (this.internals.state.phase !== 'initialized') {\n            throw new Error(\"Can't add plugins after the server has started\");\n        }\n        this.internals.plugins.push(plugin);\n    }\n    async executeHTTPGraphQLRequest({ httpGraphQLRequest, context, }) {\n        try {\n            let runningServerState;\n            try {\n                runningServerState = await this._ensureStarted();\n            }\n            catch (error) {\n                return this.errorResponse(error, httpGraphQLRequest);\n            }\n            if (runningServerState.landingPage &&\n                this.prefersHTML(httpGraphQLRequest)) {\n                return {\n                    headers: new HeaderMap([['content-type', 'text/html']]),\n                    body: {\n                        kind: 'complete',\n                        string: runningServerState.landingPage.html,\n                    },\n                };\n            }\n            if (this.internals.csrfPreventionRequestHeaders) {\n                preventCsrf(httpGraphQLRequest.headers, this.internals.csrfPreventionRequestHeaders);\n            }\n            let contextValue;\n            try {\n                contextValue = await context();\n            }\n            catch (maybeError) {\n                const error = ensureError(maybeError);\n                try {\n                    await Promise.all(this.internals.plugins.map(async (plugin) => plugin.contextCreationDidFail?.({\n                        error,\n                    })));\n                }\n                catch (pluginError) {\n                    this.logger.error(`contextCreationDidFail hook threw: ${pluginError}`);\n                }\n                return this.errorResponse(ensureGraphQLError(error, 'Context creation failed: '), httpGraphQLRequest);\n            }\n            return await runPotentiallyBatchedHttpQuery(this, httpGraphQLRequest, contextValue, runningServerState.schemaManager.getSchemaDerivedData(), this.internals);\n        }\n        catch (maybeError_) {\n            const maybeError = maybeError_;\n            if (maybeError instanceof GraphQLError &&\n                maybeError.extensions.code === ApolloServerErrorCode.BAD_REQUEST) {\n                try {\n                    await Promise.all(this.internals.plugins.map(async (plugin) => plugin.invalidRequestWasReceived?.({ error: maybeError })));\n                }\n                catch (pluginError) {\n                    this.logger.error(`invalidRequestWasReceived hook threw: ${pluginError}`);\n                }\n            }\n            return this.errorResponse(maybeError, httpGraphQLRequest);\n        }\n    }\n    errorResponse(error, requestHead) {\n        const { formattedErrors, httpFromErrors } = normalizeAndFormatErrors([error], {\n            includeStacktraceInErrorResponses: this.internals.includeStacktraceInErrorResponses,\n            formatError: this.internals.formatError,\n        });\n        return {\n            status: httpFromErrors.status ?? 500,\n            headers: new HeaderMap([\n                ...httpFromErrors.headers,\n                [\n                    'content-type',\n                    chooseContentTypeForSingleResultResponse(requestHead) ??\n                        MEDIA_TYPES.APPLICATION_JSON,\n                ],\n            ]),\n            body: {\n                kind: 'complete',\n                string: prettyJSONStringify({\n                    errors: formattedErrors,\n                }),\n            },\n        };\n    }\n    prefersHTML(request) {\n        const acceptHeader = request.headers.get('accept');\n        return (request.method === 'GET' &&\n            !!acceptHeader &&\n            new Negotiator({\n                headers: { accept: acceptHeader },\n            }).mediaType([\n                MEDIA_TYPES.APPLICATION_JSON,\n                MEDIA_TYPES.APPLICATION_GRAPHQL_RESPONSE_JSON,\n                MEDIA_TYPES.MULTIPART_MIXED_EXPERIMENTAL,\n                MEDIA_TYPES.MULTIPART_MIXED_NO_DEFER_SPEC,\n                MEDIA_TYPES.TEXT_HTML,\n            ]) === MEDIA_TYPES.TEXT_HTML);\n    }\n    async executeOperation(request, options = {}) {\n        if (this.internals.state.phase === 'initialized') {\n            await this.start();\n        }\n        const schemaDerivedData = (await this._ensureStarted()).schemaManager.getSchemaDerivedData();\n        const graphQLRequest = {\n            ...request,\n            query: request.query && typeof request.query !== 'string'\n                ? print(request.query)\n                : request.query,\n        };\n        const response = await internalExecuteOperation({\n            server: this,\n            graphQLRequest,\n            internals: this.internals,\n            schemaDerivedData,\n            sharedResponseHTTPGraphQLHead: null,\n        }, options);\n        return response;\n    }\n}\nexport async function internalExecuteOperation({ server, graphQLRequest, internals, schemaDerivedData, sharedResponseHTTPGraphQLHead, }, options) {\n    const requestContext = {\n        logger: server.logger,\n        cache: server.cache,\n        schema: schemaDerivedData.schema,\n        request: graphQLRequest,\n        response: {\n            http: sharedResponseHTTPGraphQLHead ?? newHTTPGraphQLHead(),\n        },\n        contextValue: cloneObject(options?.contextValue ?? {}),\n        metrics: {},\n        overallCachePolicy: newCachePolicy(),\n        requestIsBatched: sharedResponseHTTPGraphQLHead !== null,\n    };\n    try {\n        return await processGraphQLRequest(schemaDerivedData, server, internals, requestContext);\n    }\n    catch (maybeError) {\n        const error = ensureError(maybeError);\n        await Promise.all(internals.plugins.map(async (plugin) => plugin.unexpectedErrorProcessingRequest?.({\n            requestContext,\n            error,\n        })));\n        server.logger.error(`Unexpected error processing request: ${error}`);\n        throw new Error('Internal server error');\n    }\n}\nexport function isImplicitlyInstallablePlugin(p) {\n    return '__internal_installed_implicitly__' in p;\n}\nexport const MEDIA_TYPES = {\n    APPLICATION_JSON: 'application/json; charset=utf-8',\n    APPLICATION_GRAPHQL_RESPONSE_JSON: 'application/graphql-response+json; charset=utf-8',\n    MULTIPART_MIXED_NO_DEFER_SPEC: 'multipart/mixed',\n    MULTIPART_MIXED_EXPERIMENTAL: 'multipart/mixed; deferSpec=20220824',\n    TEXT_HTML: 'text/html',\n};\nexport function chooseContentTypeForSingleResultResponse(head) {\n    const acceptHeader = head.headers.get('accept');\n    if (!acceptHeader) {\n        return MEDIA_TYPES.APPLICATION_JSON;\n    }\n    else {\n        const preferred = new Negotiator({\n            headers: { accept: head.headers.get('accept') },\n        }).mediaType([\n            MEDIA_TYPES.APPLICATION_JSON,\n            MEDIA_TYPES.APPLICATION_GRAPHQL_RESPONSE_JSON,\n        ]);\n        if (preferred) {\n            return preferred;\n        }\n        else {\n            return null;\n        }\n    }\n}\nfunction cloneObject(object) {\n    return Object.assign(Object.create(Object.getPrototypeOf(object)), object);\n}\n//# sourceMappingURL=ApolloServer.js.map5/dist/esm/plugin/usageReporting/traceDetails.d.ts.map\u0001{\"version\":3,\"file\":\"traceDetails.d.ts\",\"sourceRoot\":\"\",\"sources\":[\"../../../../src/plugin/usageReporting/traceDetails.ts\"],\"names\":[],\"mappings\":\"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kCAAkC,CAAC;AACzD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AASzD,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC9B,kBAAkB,CAAC,EAAE,oBAAoB,EACzC,eAAe,CAAC,EAAE,MAAM,GACvB,KAAK,CAAC,OAAO,CA0Df\"}%/dist/esm/externalTypes/http.d.ts.map\u0002h{\"version\":3,\"file\":\"http.d.ts\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/externalTypes/http.ts\"],\"names\":[],\"mappings\":\"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAEvD,MAAM,WAAW,kBAAkB;IAEjC,MAAM,EAAE,MAAM,CAAC;IAGf,OAAO,EAAE,SAAS,CAAC;IAQnB,MAAM,EAAE,MAAM,CAAC;IAGf,IAAI,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,SAAS,CAAC;CACpB;AAQD,oBAAY,uBAAuB,GAC/B;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACpC;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,aAAa,EAAE,qBAAqB,CAAC,MAAM,CAAC,CAAA;CAAE,CAAC;AAEtE,oBAAY,mBAAmB,GAAG,eAAe,GAAG;IAClD,IAAI,EAAE,uBAAuB,CAAC;CAC/B,CAAC\"}*/dist/esm/externalTypes/requestPipeline.js6export {};\n//# sourceMappingURL=requestPipeline.js.map,/dist/cjs/plugin/usageReporting/stats.js.map {\"version\":3,\"file\":\"stats.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../../src/plugin/usageReporting/stats.ts\"],\"names\":[],\"mappings\":\"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\"}1/dist/esm/plugin/usageReporting/traceDetails.d.ts\u0001<import { Trace } from '@apollo/usage-reporting-protobuf';\nimport type { VariableValueOptions } from './options.js';\nexport declare function makeTraceDetails(variables: Record<string, any>, sendVariableValues?: VariableValueOptions, operationString?: string): Trace.Details;\n//# sourceMappingURL=traceDetails.d.ts.map/dist/cjs/index.js\u0004\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.HeaderMap = exports.ApolloServer = void 0;\nvar ApolloServer_js_1 = require(\"./ApolloServer.js\");\nObject.defineProperty(exports, \"ApolloServer\", { enumerable: true, get: function () { return ApolloServer_js_1.ApolloServer; } });\nvar HeaderMap_js_1 = require(\"./utils/HeaderMap.js\");\nObject.defineProperty(exports, \"HeaderMap\", { enumerable: true, get: function () { return HeaderMap_js_1.HeaderMap; } });\n__exportStar(require(\"./externalTypes/index.js\"), exports);\n//# sourceMappingURL=index.js.map!/dist/cjs/internalErrorClasses.js\u000fN\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.BadRequestError = exports.OperationResolutionError = exports.UserInputError = exports.PersistedQueryNotSupportedError = exports.PersistedQueryNotFoundError = exports.ValidationError = exports.SyntaxError = void 0;\nconst graphql_1 = require(\"graphql\");\nconst index_js_1 = require(\"./errors/index.js\");\nconst runHttpQuery_js_1 = require(\"./runHttpQuery.js\");\nconst HeaderMap_js_1 = require(\"./utils/HeaderMap.js\");\nclass GraphQLErrorWithCode extends graphql_1.GraphQLError {\n    constructor(message, code, options) {\n        super(message, {\n            ...options,\n            extensions: { ...options?.extensions, code },\n        });\n        this.name = this.constructor.name;\n    }\n}\nclass SyntaxError extends GraphQLErrorWithCode {\n    constructor(graphqlError) {\n        super(graphqlError.message, index_js_1.ApolloServerErrorCode.GRAPHQL_PARSE_FAILED, {\n            source: graphqlError.source,\n            positions: graphqlError.positions,\n            extensions: { http: (0, runHttpQuery_js_1.newHTTPGraphQLHead)(400), ...graphqlError.extensions },\n            originalError: graphqlError,\n        });\n    }\n}\nexports.SyntaxError = SyntaxError;\nclass ValidationError extends GraphQLErrorWithCode {\n    constructor(graphqlError) {\n        super(graphqlError.message, index_js_1.ApolloServerErrorCode.GRAPHQL_VALIDATION_FAILED, {\n            nodes: graphqlError.nodes,\n            extensions: {\n                http: (0, runHttpQuery_js_1.newHTTPGraphQLHead)(400),\n                ...graphqlError.extensions,\n            },\n            originalError: graphqlError.originalError ?? graphqlError,\n        });\n    }\n}\nexports.ValidationError = ValidationError;\nconst getPersistedQueryErrorHttp = () => ({\n    status: 200,\n    headers: new HeaderMap_js_1.HeaderMap([\n        ['cache-control', 'private, no-cache, must-revalidate'],\n    ]),\n});\nclass PersistedQueryNotFoundError extends GraphQLErrorWithCode {\n    constructor() {\n        super('PersistedQueryNotFound', index_js_1.ApolloServerErrorCode.PERSISTED_QUERY_NOT_FOUND, { extensions: { http: getPersistedQueryErrorHttp() } });\n    }\n}\nexports.PersistedQueryNotFoundError = PersistedQueryNotFoundError;\nclass PersistedQueryNotSupportedError extends GraphQLErrorWithCode {\n    constructor() {\n        super('PersistedQueryNotSupported', index_js_1.ApolloServerErrorCode.PERSISTED_QUERY_NOT_SUPPORTED, { extensions: { http: getPersistedQueryErrorHttp() } });\n    }\n}\nexports.PersistedQueryNotSupportedError = PersistedQueryNotSupportedError;\nclass UserInputError extends GraphQLErrorWithCode {\n    constructor(graphqlError) {\n        super(graphqlError.message, index_js_1.ApolloServerErrorCode.BAD_USER_INPUT, {\n            nodes: graphqlError.nodes,\n            originalError: graphqlError.originalError ?? graphqlError,\n            extensions: graphqlError.extensions,\n        });\n    }\n}\nexports.UserInputError = UserInputError;\nclass OperationResolutionError extends GraphQLErrorWithCode {\n    constructor(graphqlError) {\n        super(graphqlError.message, index_js_1.ApolloServerErrorCode.OPERATION_RESOLUTION_FAILURE, {\n            nodes: graphqlError.nodes,\n            originalError: graphqlError.originalError ?? graphqlError,\n            extensions: {\n                http: (0, runHttpQuery_js_1.newHTTPGraphQLHead)(400),\n                ...graphqlError.extensions,\n            },\n        });\n    }\n}\nexports.OperationResolutionError = OperationResolutionError;\nclass BadRequestError extends GraphQLErrorWithCode {\n    constructor(message, options) {\n        super(message, index_js_1.ApolloServerErrorCode.BAD_REQUEST, {\n            ...options,\n            extensions: { http: (0, runHttpQuery_js_1.newHTTPGraphQLHead)(400), ...options?.extensions },\n        });\n    }\n}\nexports.BadRequestError = BadRequestError;\n//# sourceMappingURL=internalErrorClasses.js.map/src/requestPipeline.ts]import { createHash } from '@apollo/utils.createhash';\nimport {\n  specifiedRules,\n  getOperationAST,\n  GraphQLError,\n  validate,\n  parse,\n  Kind,\n  ExecutionResult,\n} from 'graphql';\nimport {\n  symbolExecutionDispatcherWillResolveField,\n  enablePluginsForSchemaResolvers,\n  symbolUserFieldResolver,\n} from './utils/schemaInstrumentation.js';\nimport {\n  PersistedQueryNotSupportedError,\n  PersistedQueryNotFoundError,\n  UserInputError,\n  BadRequestError,\n  ValidationError,\n  SyntaxError,\n  OperationResolutionError,\n} from './internalErrorClasses.js';\nimport {\n  ensureError,\n  normalizeAndFormatErrors,\n  ensureGraphQLError,\n} from './errorNormalize.js';\nimport type {\n  GraphQLRequestContext,\n  GraphQLRequestContextDidResolveSource,\n  GraphQLRequestContextExecutionDidStart,\n  GraphQLRequestContextResponseForOperation,\n  GraphQLRequestContextDidResolveOperation,\n  GraphQLRequestContextParsingDidStart,\n  GraphQLRequestContextValidationDidStart,\n  GraphQLRequestContextWillSendResponse,\n  GraphQLRequestContextDidEncounterErrors,\n  GraphQLRequestExecutionListener,\n  BaseContext,\n  GraphQLResponse,\n  GraphQLExperimentalFormattedSubsequentIncrementalExecutionResult,\n} from './externalTypes/index.js';\n\nimport {\n  invokeDidStartHook,\n  invokeHooksUntilDefinedAndNonNull,\n  invokeSyncDidStartHook,\n} from './utils/invokeHooks.js';\n\nimport { makeGatewayGraphQLRequestContext } from './utils/makeGatewayGraphQLRequestContext.js';\n\nimport { mergeHTTPGraphQLHead, newHTTPGraphQLHead } from './runHttpQuery.js';\nimport type {\n  ApolloServer,\n  ApolloServerInternals,\n  SchemaDerivedData,\n} from './ApolloServer.js';\nimport { isDefined } from './utils/isDefined.js';\nimport type {\n  GraphQLRequestContextDidEncounterSubsequentErrors,\n  GraphQLRequestContextWillSendSubsequentPayload,\n} from './externalTypes/requestPipeline.js';\nimport {\n  executeIncrementally,\n  GraphQLExperimentalInitialIncrementalExecutionResult,\n  GraphQLExperimentalSubsequentIncrementalExecutionResult,\n} from './incrementalDeliveryPolyfill.js';\nimport { HeaderMap } from './utils/HeaderMap.js';\n\nexport const APQ_CACHE_PREFIX = 'apq:';\n\nfunction computeQueryHash(query: string) {\n  return createHash('sha256').update(query).digest('hex');\n}\n\ntype Mutable<T> = { -readonly [P in keyof T]: T[P] };\n\nfunction isBadUserInputGraphQLError(error: GraphQLError): boolean {\n  return (\n    error.nodes?.length === 1 &&\n    error.nodes[0].kind === Kind.VARIABLE_DEFINITION &&\n    (error.message.startsWith(\n      `Variable \"$${error.nodes[0].variable.name.value}\" got invalid value `,\n    ) ||\n      error.message.startsWith(\n        `Variable \"$${error.nodes[0].variable.name.value}\" of required type `,\n      ) ||\n      error.message.startsWith(\n        `Variable \"$${error.nodes[0].variable.name.value}\" of non-null type `,\n      ))\n  );\n}\n\n// This is \"semi-formatted\" because the initial result has not yet been\n// formatted but the subsequent results \"have been\" --- in the sense that they\n// are an async iterable that will format them as they come in.\ntype SemiFormattedExecuteIncrementallyResults =\n  | {\n      singleResult: ExecutionResult;\n    }\n  | {\n      initialResult: GraphQLExperimentalInitialIncrementalExecutionResult;\n      subsequentResults: AsyncIterable<GraphQLExperimentalFormattedSubsequentIncrementalExecutionResult>;\n    };\n\nexport async function processGraphQLRequest<TContext extends BaseContext>(\n  schemaDerivedData: SchemaDerivedData,\n  server: ApolloServer<TContext>,\n  internals: ApolloServerInternals<TContext>,\n  requestContext: Mutable<GraphQLRequestContext<TContext>>,\n): Promise<GraphQLResponse> {\n  const requestListeners = (\n    await Promise.all(\n      internals.plugins.map((p) => p.requestDidStart?.(requestContext)),\n    )\n  ).filter(isDefined);\n\n  const request = requestContext.request;\n\n  let { query, extensions } = request;\n\n  let queryHash: string;\n\n  requestContext.metrics.persistedQueryHit = false;\n  requestContext.metrics.persistedQueryRegister = false;\n\n  if (extensions?.persistedQuery) {\n    // It looks like we've received a persisted query. Check if we\n    // support them.\n    if (!internals.persistedQueries) {\n      return await sendErrorResponse([new PersistedQueryNotSupportedError()]);\n    } else if (extensions.persistedQuery.version !== 1) {\n      return await sendErrorResponse([\n        new GraphQLError('Unsupported persisted query version', {\n          extensions: { http: newHTTPGraphQLHead(400) },\n        }),\n      ]);\n    }\n\n    queryHash = extensions.persistedQuery.sha256Hash;\n\n    if (query === undefined) {\n      query = await internals.persistedQueries.cache.get(queryHash);\n      if (query) {\n        requestContext.metrics.persistedQueryHit = true;\n      } else {\n        return await sendErrorResponse([new PersistedQueryNotFoundError()]);\n      }\n    } else {\n      const computedQueryHash = computeQueryHash(query);\n\n      // The provided hash must exactly match the SHA-256 hash of\n      // the query string. This prevents hash hijacking, where a\n      // new and potentially malicious query is associated with\n      // an existing hash.\n      if (queryHash !== computedQueryHash) {\n        return await sendErrorResponse([\n          new GraphQLError('provided sha does not match query', {\n            extensions: { http: newHTTPGraphQLHead(400) },\n          }),\n        ]);\n      }\n\n      // We won't write to the persisted query cache until later.\n      // Deferring the writing gives plugins the ability to \"win\" from use of\n      // the cache, but also have their say in whether or not the cache is\n      // written to (by interrupting the request with an error).\n      requestContext.metrics.persistedQueryRegister = true;\n    }\n  } else if (query) {\n    queryHash = computeQueryHash(query);\n  } else {\n    return await sendErrorResponse([\n      new BadRequestError(\n        'GraphQL operations must contain a non-empty `query` or a `persistedQuery` extension.',\n      ),\n    ]);\n  }\n\n  requestContext.queryHash = queryHash;\n  requestContext.source = query;\n\n  // Let the plugins know that we now have a STRING of what we hope will\n  // parse and validate into a document we can execute on.  Unless we have\n  // retrieved this from our APQ cache, there's no guarantee that it is\n  // syntactically correct, so this string should not be trusted as a valid\n  // document until after it's parsed and validated.\n  await Promise.all(\n    requestListeners.map((l) =>\n      l.didResolveSource?.(\n        requestContext as GraphQLRequestContextDidResolveSource<TContext>,\n      ),\n    ),\n  );\n\n  // If we're configured with a document store (by default, we are), we'll\n  // utilize the operation's hash to lookup the AST from the previously\n  // parsed-and-validated operation.  Failure to retrieve anything from the\n  // cache just means we're committed to doing the parsing and validation.\n  if (schemaDerivedData.documentStore) {\n    try {\n      requestContext.document = await schemaDerivedData.documentStore.get(\n        queryHash,\n      );\n    } catch (err: unknown) {\n      server.logger.warn(\n        'An error occurred while attempting to read from the documentStore. ' +\n          ensureError(err).message,\n      );\n    }\n  }\n\n  // If we still don't have a document, we'll need to parse and validate it.\n  // With success, we'll attempt to save it into the store for future use.\n  if (!requestContext.document) {\n    const parsingDidEnd = await invokeDidStartHook(\n      requestListeners,\n      async (l) =>\n        l.parsingDidStart?.(\n          requestContext as GraphQLRequestContextParsingDidStart<TContext>,\n        ),\n    );\n\n    try {\n      requestContext.document = parse(query, internals.parseOptions);\n    } catch (syntaxMaybeError: unknown) {\n      const error = ensureError(syntaxMaybeError);\n      await parsingDidEnd(error);\n      return await sendErrorResponse([\n        new SyntaxError(ensureGraphQLError(error)),\n      ]);\n    }\n    await parsingDidEnd();\n\n    const validationDidEnd = await invokeDidStartHook(\n      requestListeners,\n      async (l) =>\n        l.validationDidStart?.(\n          requestContext as GraphQLRequestContextValidationDidStart<TContext>,\n        ),\n    );\n\n    const validationErrors = validate(\n      schemaDerivedData.schema,\n      requestContext.document,\n      [...specifiedRules, ...internals.validationRules],\n    );\n\n    if (validationErrors.length === 0) {\n      await validationDidEnd();\n    } else {\n      await validationDidEnd(validationErrors);\n      return await sendErrorResponse(\n        validationErrors.map((error) => new ValidationError(error)),\n      );\n    }\n\n    if (schemaDerivedData.documentStore) {\n      // The underlying cache store behind the `documentStore` returns a\n      // `Promise` which is resolved (or rejected), eventually, based on the\n      // success or failure (respectively) of the cache save attempt.  While\n      // it's certainly possible to `await` this `Promise`, we don't care about\n      // whether or not it's successful at this point.  We'll instead proceed\n      // to serve the rest of the request and just hope that this works out.\n      // If it doesn't work, the next request will have another opportunity to\n      // try again.  Errors will surface as warnings, as appropriate.\n      //\n      // While it shouldn't normally be necessary to wrap this `Promise` in a\n      // `Promise.resolve` invocation, it seems that the underlying cache store\n      // is returning a non-native `Promise` (e.g. Bluebird, etc.).\n      Promise.resolve(\n        schemaDerivedData.documentStore.set(queryHash, requestContext.document),\n      ).catch((err) =>\n        server.logger.warn(\n          'Could not store validated document. ' + err?.message || err,\n        ),\n      );\n    }\n  }\n\n  // TODO: If we want to guarantee an operation has been set when invoking\n  // `willExecuteOperation` and executionDidStart`, we need to throw an\n  // error here and not leave this to `buildExecutionContext` in\n  // `graphql-js`.\n  const operation = getOperationAST(\n    requestContext.document,\n    request.operationName,\n  );\n\n  requestContext.operation = operation || undefined;\n  // We'll set `operationName` to `null` for anonymous operations.\n  requestContext.operationName = operation?.name?.value || null;\n\n  // Special case: GET operations should only be queries (not mutations). We\n  // want to throw a particular HTTP error in that case. (This matters because\n  // it's generally how HTTP requests should work, and additionally it makes us\n  // less vulnerable to mutations running over CSRF, if you turn off our CSRF\n  // prevention feature.)\n  if (\n    request.http?.method === 'GET' &&\n    operation?.operation &&\n    operation.operation !== 'query'\n  ) {\n    return await sendErrorResponse([\n      new BadRequestError(\n        `GET requests only support query operations, not ${operation.operation} operations`,\n        {\n          extensions: {\n            http: { status: 405, headers: new HeaderMap([['allow', 'POST']]) },\n          },\n        },\n      ),\n    ]);\n  }\n\n  try {\n    await Promise.all(\n      requestListeners.map((l) =>\n        l.didResolveOperation?.(\n          requestContext as GraphQLRequestContextDidResolveOperation<TContext>,\n        ),\n      ),\n    );\n  } catch (err: unknown) {\n    // Note that we explicitly document throwing `GraphQLError`s from\n    // `didResolveOperation` as a good way to do validation that depends on the\n    // validated operation and the request context. (It will have status 500 by\n    // default.)\n    return await sendErrorResponse([ensureGraphQLError(err)]);\n  }\n\n  // Now that we've gone through the pre-execution phases of the request\n  // pipeline, and given plugins appropriate ability to object (by throwing\n  // an error) and not actually write, we'll write to the cache if it was\n  // determined earlier in the request pipeline that we should do so.\n  if (\n    requestContext.metrics.persistedQueryRegister &&\n    internals.persistedQueries\n  ) {\n    // While it shouldn't normally be necessary to wrap this `Promise` in a\n    // `Promise.resolve` invocation, it seems that the underlying cache store\n    // is returning a non-native `Promise` (e.g. Bluebird, etc.).\n    const ttl = internals.persistedQueries?.ttl;\n    Promise.resolve(\n      internals.persistedQueries.cache.set(\n        queryHash,\n        query,\n        // Explicitly checking for `undefined` which means \"not set\" vs 0 or\n        // null which means \"no TTL\".\n        ttl !== undefined\n          ? { ttl: internals.persistedQueries?.ttl }\n          : undefined,\n      ),\n    ).catch(server.logger.warn);\n  }\n\n  const responseFromPlugin = await invokeHooksUntilDefinedAndNonNull(\n    requestListeners,\n    async (l) =>\n      await l.responseForOperation?.(\n        requestContext as GraphQLRequestContextResponseForOperation<TContext>,\n      ),\n  );\n  if (responseFromPlugin !== null) {\n    requestContext.response.body = responseFromPlugin.body;\n    mergeHTTPGraphQLHead(requestContext.response.http, responseFromPlugin.http);\n  } else {\n    const executionListeners = (\n      await Promise.all(\n        requestListeners.map((l) =>\n          l.executionDidStart?.(\n            requestContext as GraphQLRequestContextExecutionDidStart<TContext>,\n          ),\n        ),\n      )\n    ).filter(isDefined);\n    executionListeners.reverse();\n\n    if (executionListeners.some((l) => l.willResolveField)) {\n      // Create a callback that will trigger the execution dispatcher's\n      // `willResolveField` hook.  We will attach this to the context on a\n      // symbol so it can be invoked by our `wrapField` method during execution.\n      const invokeWillResolveField: GraphQLRequestExecutionListener<TContext>['willResolveField'] =\n        (...args) =>\n          invokeSyncDidStartHook(executionListeners, (l) =>\n            l.willResolveField?.(...args),\n          );\n\n      Object.defineProperty(\n        requestContext.contextValue,\n        symbolExecutionDispatcherWillResolveField,\n        { value: invokeWillResolveField },\n      );\n\n      // If the user has provided a custom field resolver, we will attach\n      // it to the context so we can still invoke it after we've wrapped the\n      // fields with `wrapField` within `enablePluginsForSchemaResolvers` of\n      // the `schemaInstrumentation` module.\n      if (internals.fieldResolver) {\n        Object.defineProperty(\n          requestContext.contextValue,\n          symbolUserFieldResolver,\n          {\n            value: internals.fieldResolver,\n          },\n        );\n      }\n\n      // If the schema is already enabled, this is a no-op.  Otherwise, the\n      // schema will be augmented so it is able to invoke willResolveField. Note\n      // that if we never see a plugin with willResolveField then we will never\n      // need to instrument the schema, which might be a small performance gain.\n      // (For example, this can happen if you pass `fieldLevelInstrumentation:\n      // () => false` to the usage reporting plugin and disable the cache\n      // control plugin. We can consider changing the cache control plugin to\n      // have a \"static cache control only\" mode that doesn't use\n      // willResolveField too if this proves to be helpful in practice.)\n      enablePluginsForSchemaResolvers(schemaDerivedData.schema);\n    }\n\n    try {\n      const fullResult = await execute(\n        requestContext as GraphQLRequestContextExecutionDidStart<TContext>,\n      );\n      const result =\n        'singleResult' in fullResult\n          ? fullResult.singleResult\n          : fullResult.initialResult;\n\n      // If we don't have an operation, there's no reason to go further. We know\n      // `result` will consist of one error (returned by `graphql-js`'s\n      // `buildExecutionContext`).\n      if (!requestContext.operation) {\n        if (!result.errors?.length) {\n          throw new Error(\n            'Unexpected error: Apollo Server did not resolve an operation but execute did not return errors',\n          );\n        }\n        throw new OperationResolutionError(result.errors[0]);\n      }\n\n      // The first thing that execution does is coerce the request's variables\n      // to the types declared in the operation, which can lead to errors if\n      // they are of the wrong type. It also makes sure that all non-null\n      // variables are required and get non-null values. If any of these things\n      // lead to errors, we change them into UserInputError so that their code\n      // doesn't end up being INTERNAL_SERVER_ERROR, since these are client\n      // errors.\n      //\n      // This is hacky! Hopefully graphql-js will give us a way to separate\n      // variable resolution from execution later; see\n      // https://github.com/graphql/graphql-js/issues/3169\n      const resultErrors = result.errors?.map((e) => {\n        if (isBadUserInputGraphQLError(e)) {\n          return new UserInputError(e);\n        }\n        return e;\n      });\n\n      if (resultErrors) {\n        await didEncounterErrors(resultErrors);\n      }\n\n      const { formattedErrors, httpFromErrors } = resultErrors\n        ? formatErrors(resultErrors)\n        : { formattedErrors: undefined, httpFromErrors: newHTTPGraphQLHead() };\n      mergeHTTPGraphQLHead(requestContext.response.http, httpFromErrors);\n\n      if ('singleResult' in fullResult) {\n        requestContext.response.body = {\n          kind: 'single',\n          singleResult: {\n            ...result,\n            errors: formattedErrors,\n          },\n        };\n      } else {\n        requestContext.response.body = {\n          kind: 'incremental',\n          initialResult: {\n            ...fullResult.initialResult,\n            errors: formattedErrors,\n          },\n          subsequentResults: fullResult.subsequentResults,\n        };\n      }\n    } catch (executionMaybeError: unknown) {\n      const executionError = ensureError(executionMaybeError);\n      await Promise.all(\n        executionListeners.map((l) => l.executionDidEnd?.(executionError)),\n      );\n\n      return await sendErrorResponse([ensureGraphQLError(executionError)]);\n    }\n\n    await Promise.all(executionListeners.map((l) => l.executionDidEnd?.()));\n  }\n\n  await invokeWillSendResponse();\n  if (!requestContext.response.body) {\n    throw Error('got to end of processGraphQLRequest without setting body?');\n  }\n  return requestContext.response as GraphQLResponse; // cast checked on previous line\n\n  async function execute(\n    requestContext: GraphQLRequestContextExecutionDidStart<TContext>,\n  ): Promise<SemiFormattedExecuteIncrementallyResults> {\n    const { request, document } = requestContext;\n\n    if (internals.__testing_incrementalExecutionResults) {\n      return internals.__testing_incrementalExecutionResults;\n    } else if (internals.gatewayExecutor) {\n      const result = await internals.gatewayExecutor(\n        makeGatewayGraphQLRequestContext(requestContext, server, internals),\n      );\n      return { singleResult: result };\n    } else {\n      const resultOrResults = await executeIncrementally({\n        schema: schemaDerivedData.schema,\n        document,\n        rootValue:\n          typeof internals.rootValue === 'function'\n            ? internals.rootValue(document)\n            : internals.rootValue,\n        contextValue: requestContext.contextValue,\n        variableValues: request.variables,\n        operationName: request.operationName,\n        fieldResolver: internals.fieldResolver,\n      });\n      if ('initialResult' in resultOrResults) {\n        return {\n          initialResult: resultOrResults.initialResult,\n          subsequentResults: formatErrorsInSubsequentResults(\n            resultOrResults.subsequentResults,\n          ),\n        };\n      } else {\n        return { singleResult: resultOrResults };\n      }\n    }\n  }\n\n  async function* formatErrorsInSubsequentResults(\n    results: AsyncIterable<GraphQLExperimentalSubsequentIncrementalExecutionResult>,\n  ): AsyncIterable<GraphQLExperimentalFormattedSubsequentIncrementalExecutionResult> {\n    for await (const result of results) {\n      const payload: GraphQLExperimentalFormattedSubsequentIncrementalExecutionResult =\n        result.incremental\n          ? {\n              ...result,\n              incremental: await seriesAsyncMap(\n                result.incremental,\n                async (incrementalResult) => {\n                  const { errors } = incrementalResult;\n                  if (errors) {\n                    await Promise.all(\n                      requestListeners.map((l) =>\n                        l.didEncounterSubsequentErrors?.(\n                          requestContext as GraphQLRequestContextDidEncounterSubsequentErrors<TContext>,\n                          errors,\n                        ),\n                      ),\n                    );\n\n                    return {\n                      ...incrementalResult,\n                      // Note that any `http` extensions in errors have no\n                      // effect, because we've already sent the status code\n                      // and response headers.\n                      errors: formatErrors(errors).formattedErrors,\n                    };\n                  }\n                  return incrementalResult;\n                },\n              ),\n            }\n          : result;\n\n      // Invoke hook, which is allowed to mutate payload if it really wants to.\n      await Promise.all(\n        requestListeners.map((l) =>\n          l.willSendSubsequentPayload?.(\n            requestContext as GraphQLRequestContextWillSendSubsequentPayload<TContext>,\n            payload,\n          ),\n        ),\n      );\n\n      yield payload;\n    }\n  }\n\n  async function invokeWillSendResponse() {\n    await Promise.all(\n      requestListeners.map((l) =>\n        l.willSendResponse?.(\n          requestContext as GraphQLRequestContextWillSendResponse<TContext>,\n        ),\n      ),\n    );\n  }\n\n  // Note that we ensure that all calls to didEncounterErrors are followed by\n  // calls to willSendResponse. (The usage reporting plugin depends on this.)\n  async function didEncounterErrors(errors: ReadonlyArray<GraphQLError>) {\n    requestContext.errors = errors;\n\n    return await Promise.all(\n      requestListeners.map((l) =>\n        l.didEncounterErrors?.(\n          requestContext as GraphQLRequestContextDidEncounterErrors<TContext>,\n        ),\n      ),\n    );\n  }\n\n  // This function \"sends\" a response that contains errors and no data (not even\n  // `data: null`) because the pipeline does not make it to a successful\n  // `execute` call. (It is *not* called for execution that happens to return\n  // some errors.) In this case \"send\" means \"update requestContext.response and\n  // invoke willSendResponse hooks\".\n  //\n  // If any errors have `extensions.http` set, it sets the response's status code\n  // and errors from them.\n  //\n  // Then, if the HTTP status code is not yet set, it sets it to 500.\n  async function sendErrorResponse(\n    errors: ReadonlyArray<GraphQLError>,\n  ): Promise<GraphQLResponse> {\n    await didEncounterErrors(errors);\n\n    const { formattedErrors, httpFromErrors } = formatErrors(errors);\n\n    requestContext.response.body = {\n      kind: 'single',\n      singleResult: {\n        errors: formattedErrors,\n      },\n    };\n\n    mergeHTTPGraphQLHead(requestContext.response.http, httpFromErrors);\n\n    if (!requestContext.response.http.status) {\n      requestContext.response.http.status = 500;\n    }\n\n    await invokeWillSendResponse();\n\n    // cast safe because we assigned to `body` above\n    return requestContext.response as GraphQLResponse;\n  }\n\n  function formatErrors(\n    errors: ReadonlyArray<GraphQLError>,\n  ): ReturnType<typeof normalizeAndFormatErrors> {\n    return normalizeAndFormatErrors(errors, {\n      formatError: internals.formatError,\n      includeStacktraceInErrorResponses:\n        internals.includeStacktraceInErrorResponses,\n    });\n  }\n}\n\nasync function seriesAsyncMap<T, U>(\n  ts: readonly T[],\n  fn: (value: T) => Promise<U>,\n): Promise<U[]> {\n  const us: U[] = [];\n  for (const t of ts) {\n    const u = await fn(t);\n    us.push(u);\n  }\n  return us;\n}\n3/dist/cjs/plugin/usageReporting/iterateOverTrace.js\t\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.iterateOverTrace = void 0;\nfunction iterateOverTrace(trace, f, includePath) {\n    const rootPath = includePath\n        ? new RootCollectingPathsResponseNamePath()\n        : notCollectingPathsResponseNamePath;\n    if (trace.root) {\n        if (iterateOverTraceNode(trace.root, rootPath, f))\n            return;\n    }\n    if (trace.queryPlan) {\n        if (iterateOverQueryPlan(trace.queryPlan, rootPath, f))\n            return;\n    }\n}\nexports.iterateOverTrace = iterateOverTrace;\nfunction iterateOverQueryPlan(node, rootPath, f) {\n    if (!node)\n        return false;\n    if (node.fetch?.trace?.root && node.fetch.serviceName) {\n        return iterateOverTraceNode(node.fetch.trace.root, rootPath.child(`service:${node.fetch.serviceName}`), f);\n    }\n    if (node.flatten?.node) {\n        return iterateOverQueryPlan(node.flatten.node, rootPath, f);\n    }\n    if (node.parallel?.nodes) {\n        return node.parallel.nodes.some((node) => iterateOverQueryPlan(node, rootPath, f));\n    }\n    if (node.sequence?.nodes) {\n        return node.sequence.nodes.some((node) => iterateOverQueryPlan(node, rootPath, f));\n    }\n    return false;\n}\nfunction iterateOverTraceNode(node, path, f) {\n    if (f(node, path)) {\n        return true;\n    }\n    return (node.child?.some((child) => {\n        const childPath = child.responseName\n            ? path.child(child.responseName)\n            : path;\n        return iterateOverTraceNode(child, childPath, f);\n    }) ?? false);\n}\nconst notCollectingPathsResponseNamePath = {\n    toArray() {\n        throw Error('not collecting paths!');\n    },\n    child() {\n        return this;\n    },\n};\nclass RootCollectingPathsResponseNamePath {\n    toArray() {\n        return [];\n    }\n    child(responseName) {\n        return new ChildCollectingPathsResponseNamePath(responseName, this);\n    }\n}\nclass ChildCollectingPathsResponseNamePath {\n    constructor(responseName, prev) {\n        this.responseName = responseName;\n        this.prev = prev;\n    }\n    toArray() {\n        const out = [];\n        let curr = this;\n        while (curr instanceof ChildCollectingPathsResponseNamePath) {\n            out.push(curr.responseName);\n            curr = curr.prev;\n        }\n        return out.reverse();\n    }\n    child(responseName) {\n        return new ChildCollectingPathsResponseNamePath(responseName, this);\n    }\n}\n//# sourceMappingURL=iterateOverTrace.js.map/src/standalone/index.ts\nimport type { WithRequired } from '@apollo/utils.withrequired';\nimport bodyParser from 'body-parser'; // note that importing 'json' directly doesn't work in ESM\nimport cors from 'cors';\nimport express from 'express';\nimport http, { IncomingMessage, ServerResponse } from 'http';\nimport type { ListenOptions } from 'net';\nimport type { ApolloServer } from '../ApolloServer.js';\nimport { expressMiddleware } from '../express4/index.js';\nimport type { BaseContext, ContextFunction } from '../externalTypes/index.js';\nimport { ApolloServerPluginDrainHttpServer } from '../plugin/drainHttpServer/index.js';\nimport { urlForHttpServer } from '../utils/urlForHttpServer.js';\n\n// Note that while we do use express and expressMiddleware to implement the\n// standalone server, this is an internal implementation detail. We could\n// rewrite this to have no dependencies other than the core http package.\n// Because of this, our TypeScript types encourage users to only use\n// functionality of `req` and `res` that are part of the core http\n// implementations rather than the Express-specific subclasses; if you need\n// typesafe access to Express-specific properties, just use expressMiddleware\n// directly.\nexport interface StandaloneServerContextFunctionArgument {\n  req: IncomingMessage;\n  res: ServerResponse;\n}\n\nexport interface StartStandaloneServerOptions<TContext extends BaseContext> {\n  context?: ContextFunction<\n    [StandaloneServerContextFunctionArgument],\n    TContext\n  >;\n}\n\nexport async function startStandaloneServer(\n  server: ApolloServer<BaseContext>,\n  options?: StartStandaloneServerOptions<BaseContext> & {\n    listen?: ListenOptions;\n  },\n): Promise<{ url: string }>;\nexport async function startStandaloneServer<TContext extends BaseContext>(\n  server: ApolloServer<TContext>,\n  options: WithRequired<StartStandaloneServerOptions<TContext>, 'context'> & {\n    listen?: ListenOptions;\n  },\n): Promise<{ url: string }>;\nexport async function startStandaloneServer<TContext extends BaseContext>(\n  server: ApolloServer<TContext>,\n  options?: StartStandaloneServerOptions<TContext> & { listen?: ListenOptions },\n): Promise<{ url: string }> {\n  const app: express.Express = express();\n  const httpServer: http.Server = http.createServer(app);\n\n  server.addPlugin(\n    ApolloServerPluginDrainHttpServer({ httpServer: httpServer }),\n  );\n\n  await server.start();\n\n  const context = options?.context ?? (async () => ({} as TContext));\n  app.use(cors(), bodyParser.json(), expressMiddleware(server, { context }));\n\n  const listenOptions = options?.listen ?? { port: 4000 };\n  // Wait for server to start listening\n  await new Promise<void>((resolve) => {\n    httpServer.listen(listenOptions, resolve);\n  });\n\n  return { url: urlForHttpServer(httpServer) };\n}\n8/dist/cjs/plugin/usageReporting/durationHistogram.js.map\t\u001e{\"version\":3,\"file\":\"durationHistogram.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../../src/plugin/usageReporting/durationHistogram.ts\"],\"names\":[],\"mappings\":\"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\"}(/plugin/landingPage/default/package.json\u00014{\n  \"name\": \"@apollo/server/plugin/landingPage/default\",\n  \"type\": \"module\",\n  \"main\": \"../../../dist/cjs/plugin/landingPage/default/index.js\",\n  \"module\": \"../../../dist/esm/plugin/landingPage/default/index.js\",\n  \"types\": \"../../../dist/esm/plugin/landingPage/default/index.d.ts\",\n  \"sideEffects\": false\n}\n5/dist/esm/plugin/usageReporting/iterateOverTrace.d.ts\u0001nimport type { Trace } from '@apollo/usage-reporting-protobuf';\nexport declare function iterateOverTrace(trace: Trace, f: (node: Trace.INode, path: ResponseNamePath) => boolean, includePath: boolean): void;\nexport interface ResponseNamePath {\n    toArray(): string[];\n    child(responseName: string): ResponseNamePath;\n}\n//# sourceMappingURL=iterateOverTrace.d.ts.map/dist/cjs/runHttpQuery.js.map\u0019{\"version\":3,\"file\":\"runHttpQuery.js\",\"sourceRoot\":\"\",\"sources\":[\"../../src/runHttpQuery.ts\"],\"names\":[],\"mappings\":\"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\"}'/dist/esm/generated/packageVersion.d.ts[export declare const packageVersion = \"4.1.1\";\n//# sourceMappingURL=packageVersion.d.ts.map*/dist/esm/plugin/usageReporting/options.js.export {};\n//# sourceMappingURL=options.js.map!/dist/cjs/standalone/index.js.map\u0003{\"version\":3,\"file\":\"index.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/standalone/index.ts\"],\"names\":[],\"mappings\":\";;;;;;AACA,8DAAqC;AACrC,gDAAwB;AACxB,sDAA8B;AAC9B,gDAA6D;AAG7D,mDAAyD;AAEzD,iEAAuF;AACvF,sEAAgE;AAkCzD,KAAK,UAAU,qBAAqB,CACzC,MAA8B,EAC9B,OAA6E;IAE7E,MAAM,GAAG,GAAoB,IAAA,iBAAO,GAAE,CAAC;IACvC,MAAM,UAAU,GAAgB,cAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;IAEvD,MAAM,CAAC,SAAS,CACd,IAAA,4CAAiC,EAAC,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,CAC9D,CAAC;IAEF,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IAErB,MAAM,OAAO,GAAG,OAAO,EAAE,OAAO,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,EAAe,CAAA,CAAC,CAAC;IACnE,GAAG,CAAC,GAAG,CAAC,IAAA,cAAI,GAAE,EAAE,qBAAU,CAAC,IAAI,EAAE,EAAE,IAAA,4BAAiB,EAAC,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;IAE3E,MAAM,aAAa,GAAG,OAAO,EAAE,MAAM,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAExD,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;QAClC,UAAU,CAAC,MAAM,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,OAAO,EAAE,GAAG,EAAE,IAAA,sCAAgB,EAAC,UAAU,CAAC,EAAE,CAAC;AAC/C,CAAC;AAvBD,sDAuBC\"}#/dist/cjs/externalTypes/http.js.mapx{\"version\":3,\"file\":\"http.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/externalTypes/http.ts\"],\"names\":[],\"mappings\":\"\"}/package.json\u000f{\n  \"name\": \"@apollo/server\",\n  \"version\": \"4.1.1\",\n  \"description\": \"Core engine for Apollo GraphQL server\",\n  \"type\": \"module\",\n  \"main\": \"dist/cjs/index.js\",\n  \"module\": \"dist/esm/index.js\",\n  \"types\": \"dist/esm/index.d.ts\",\n  \"exports\": {\n    \".\": {\n      \"types\": \"./dist/esm/index.d.ts\",\n      \"import\": \"./dist/esm/index.js\",\n      \"require\": \"./dist/cjs/index.js\"\n    },\n    \"./errors\": {\n      \"types\": \"./dist/esm/errors/index.d.ts\",\n      \"import\": \"./dist/esm/errors/index.js\",\n      \"require\": \"./dist/cjs/errors/index.js\"\n    },\n    \"./express4\": {\n      \"types\": \"./dist/esm/express4/index.d.ts\",\n      \"import\": \"./dist/esm/express4/index.js\",\n      \"require\": \"./dist/cjs/express4/index.js\"\n    },\n    \"./standalone\": {\n      \"types\": \"./dist/esm/standalone/index.d.ts\",\n      \"import\": \"./dist/esm/standalone/index.js\",\n      \"require\": \"./dist/cjs/standalone/index.js\"\n    },\n    \"./plugin/cacheControl\": {\n      \"types\": \"./dist/esm/plugin/cacheControl/index.d.ts\",\n      \"import\": \"./dist/esm/plugin/cacheControl/index.js\",\n      \"require\": \"./dist/cjs/plugin/cacheControl/index.js\"\n    },\n    \"./plugin/disabled\": {\n      \"types\": \"./dist/esm/plugin/disabled/index.d.ts\",\n      \"import\": \"./dist/esm/plugin/disabled/index.js\",\n      \"require\": \"./dist/cjs/plugin/disabled/index.js\"\n    },\n    \"./plugin/drainHttpServer\": {\n      \"types\": \"./dist/esm/plugin/drainHttpServer/index.d.ts\",\n      \"import\": \"./dist/esm/plugin/drainHttpServer/index.js\",\n      \"require\": \"./dist/cjs/plugin/drainHttpServer/index.js\"\n    },\n    \"./plugin/inlineTrace\": {\n      \"types\": \"./dist/esm/plugin/inlineTrace/index.d.ts\",\n      \"import\": \"./dist/esm/plugin/inlineTrace/index.js\",\n      \"require\": \"./dist/cjs/plugin/inlineTrace/index.js\"\n    },\n    \"./plugin/landingPage/default\": {\n      \"types\": \"./dist/esm/plugin/landingPage/default/index.d.ts\",\n      \"import\": \"./dist/esm/plugin/landingPage/default/index.js\",\n      \"require\": \"./dist/cjs/plugin/landingPage/default/index.js\"\n    },\n    \"./plugin/schemaReporting\": {\n      \"types\": \"./dist/esm/plugin/schemaReporting/index.d.ts\",\n      \"import\": \"./dist/esm/plugin/schemaReporting/index.js\",\n      \"require\": \"./dist/cjs/plugin/schemaReporting/index.js\"\n    },\n    \"./plugin/usageReporting\": {\n      \"types\": \"./dist/esm/plugin/usageReporting/index.d.ts\",\n      \"import\": \"./dist/esm/plugin/usageReporting/index.js\",\n      \"require\": \"./dist/cjs/plugin/usageReporting/index.js\"\n    }\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/apollographql/apollo-server\",\n    \"directory\": \"packages/server\"\n  },\n  \"keywords\": [\n    \"GraphQL\",\n    \"Apollo\",\n    \"Server\",\n    \"Javascript\"\n  ],\n  \"author\": \"Apollo <packages@apollographql.com>\",\n  \"license\": \"MIT\",\n  \"bugs\": {\n    \"url\": \"https://github.com/apollographql/apollo-server/issues\"\n  },\n  \"homepage\": \"https://github.com/apollographql/apollo-server#readme\",\n  \"engines\": {\n    \"node\": \">=14.16.0\"\n  },\n  \"dependencies\": {\n    \"@apollo/cache-control-types\": \"^1.0.2\",\n    \"@apollo/server-gateway-interface\": \"^1.0.5\",\n    \"@apollo/usage-reporting-protobuf\": \"^4.0.0\",\n    \"@apollo/utils.createhash\": \"^1.1.0\",\n    \"@apollo/utils.fetcher\": \"^1.0.0\",\n    \"@apollo/utils.isnodelike\": \"^1.1.0\",\n    \"@apollo/utils.keyvaluecache\": \"^1.0.1\",\n    \"@apollo/utils.logger\": \"^1.0.0\",\n    \"@apollo/utils.usagereporting\": \"^1.0.0\",\n    \"@apollo/utils.withrequired\": \"^1.0.0\",\n    \"@graphql-tools/schema\": \"^9.0.0\",\n    \"@josephg/resolvable\": \"^1.0.0\",\n    \"@types/express-serve-static-core\": \"^4.17.30\",\n    \"@types/express\": \"^4.17.13\",\n    \"@types/node-fetch\": \"^2.6.1\",\n    \"async-retry\": \"^1.2.1\",\n    \"body-parser\": \"^1.20.0\",\n    \"cors\": \"^2.8.5\",\n    \"express\": \"^4.17.1\",\n    \"loglevel\": \"^1.6.8\",\n    \"lru-cache\": \"^7.10.1\",\n    \"negotiator\": \"^0.6.3\",\n    \"node-abort-controller\": \"^3.0.1\",\n    \"node-fetch\": \"^2.6.7\",\n    \"uuid\": \"^9.0.0\",\n    \"whatwg-mimetype\": \"^3.0.0\"\n  },\n  \"peerDependencies\": {\n    \"graphql\": \"^16.6.0\"\n  },\n  \"volta\": {\n    \"extends\": \"../../package.json\"\n  }\n}\n'/dist/esm/utils/urlForHttpServer.js.map\u0001{\"version\":3,\"file\":\"urlForHttpServer.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/utils/urlForHttpServer.ts\"],\"names\":[],\"mappings\":\"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAE7B,MAAM,UAAU,gBAAgB,CAAC,UAAkB;IACjD,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,UAAU,CAAC,OAAO,EAAiB,CAAC;IAO9D,MAAM,QAAQ,GAAG,OAAO,KAAK,EAAE,IAAI,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC;IAE5E,OAAO,MAAM,CAAC;QACZ,QAAQ,EAAE,MAAM;QAChB,QAAQ;QACR,IAAI;QACJ,QAAQ,EAAE,GAAG;KACd,CAAC,CAAC;AACL,CAAC\"}./dist/esm/plugin/usageReporting/stats.d.ts.map\n{\"version\":3,\"file\":\"stats.d.ts\",\"sourceRoot\":\"\",\"sources\":[\"../../../../src/plugin/usageReporting/stats.ts\"],\"names\":[],\"mappings\":\"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\"}&/dist/cjs/plugin/cacheControl/index.js)\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ApolloServerPluginCacheControl = void 0;\nconst graphql_1 = require(\"graphql\");\nconst cachePolicy_js_1 = require(\"../../cachePolicy.js\");\nconst internalPlugin_js_1 = require(\"../../internalPlugin.js\");\nconst lru_cache_1 = __importDefault(require(\"lru-cache\"));\nfunction ApolloServerPluginCacheControl(options = Object.create(null)) {\n    let typeAnnotationCache;\n    let fieldAnnotationCache;\n    return (0, internalPlugin_js_1.internalPlugin)({\n        __internal_plugin_id__: 'CacheControl',\n        __is_disabled_plugin__: false,\n        async serverWillStart({ schema }) {\n            typeAnnotationCache = new lru_cache_1.default({\n                max: Object.values(schema.getTypeMap()).filter(graphql_1.isCompositeType)\n                    .length,\n            });\n            fieldAnnotationCache = new lru_cache_1.default({\n                max: Object.values(schema.getTypeMap())\n                    .filter(graphql_1.isObjectType)\n                    .flatMap((t) => Object.values(t.getFields())).length +\n                    Object.values(schema.getTypeMap())\n                        .filter(graphql_1.isInterfaceType)\n                        .flatMap((t) => Object.values(t.getFields())).length,\n            });\n            return undefined;\n        },\n        async requestDidStart(requestContext) {\n            function memoizedCacheAnnotationFromType(t) {\n                const existing = typeAnnotationCache.get(t);\n                if (existing) {\n                    return existing;\n                }\n                const annotation = cacheAnnotationFromType(t);\n                typeAnnotationCache.set(t, annotation);\n                return annotation;\n            }\n            function memoizedCacheAnnotationFromField(field) {\n                const existing = fieldAnnotationCache.get(field);\n                if (existing) {\n                    return existing;\n                }\n                const annotation = cacheAnnotationFromField(field);\n                fieldAnnotationCache.set(field, annotation);\n                return annotation;\n            }\n            const defaultMaxAge = options.defaultMaxAge ?? 0;\n            const calculateHttpHeaders = options.calculateHttpHeaders ?? true;\n            const { __testing__cacheHints } = options;\n            return {\n                async executionDidStart() {\n                    if (isRestricted(requestContext.overallCachePolicy)) {\n                        const fakeFieldPolicy = (0, cachePolicy_js_1.newCachePolicy)();\n                        return {\n                            willResolveField({ info }) {\n                                info.cacheControl = {\n                                    setCacheHint: (dynamicHint) => {\n                                        fakeFieldPolicy.replace(dynamicHint);\n                                    },\n                                    cacheHint: fakeFieldPolicy,\n                                    cacheHintFromType: memoizedCacheAnnotationFromType,\n                                };\n                            },\n                        };\n                    }\n                    return {\n                        willResolveField({ info }) {\n                            const fieldPolicy = (0, cachePolicy_js_1.newCachePolicy)();\n                            let inheritMaxAge = false;\n                            const targetType = (0, graphql_1.getNamedType)(info.returnType);\n                            if ((0, graphql_1.isCompositeType)(targetType)) {\n                                const typeAnnotation = memoizedCacheAnnotationFromType(targetType);\n                                fieldPolicy.replace(typeAnnotation);\n                                inheritMaxAge = !!typeAnnotation.inheritMaxAge;\n                            }\n                            const fieldAnnotation = memoizedCacheAnnotationFromField(info.parentType.getFields()[info.fieldName]);\n                            if (fieldAnnotation.inheritMaxAge &&\n                                fieldPolicy.maxAge === undefined) {\n                                inheritMaxAge = true;\n                                if (fieldAnnotation.scope) {\n                                    fieldPolicy.replace({ scope: fieldAnnotation.scope });\n                                }\n                            }\n                            else {\n                                fieldPolicy.replace(fieldAnnotation);\n                            }\n                            info.cacheControl = {\n                                setCacheHint: (dynamicHint) => {\n                                    fieldPolicy.replace(dynamicHint);\n                                },\n                                cacheHint: fieldPolicy,\n                                cacheHintFromType: memoizedCacheAnnotationFromType,\n                            };\n                            return () => {\n                                if (fieldPolicy.maxAge === undefined &&\n                                    (((0, graphql_1.isCompositeType)(targetType) && !inheritMaxAge) ||\n                                        !info.path.prev)) {\n                                    fieldPolicy.restrict({ maxAge: defaultMaxAge });\n                                }\n                                if (__testing__cacheHints && isRestricted(fieldPolicy)) {\n                                    const path = (0, graphql_1.responsePathAsArray)(info.path).join('.');\n                                    if (__testing__cacheHints.has(path)) {\n                                        throw Error(\"shouldn't happen: addHint should only be called once per path\");\n                                    }\n                                    __testing__cacheHints.set(path, {\n                                        maxAge: fieldPolicy.maxAge,\n                                        scope: fieldPolicy.scope,\n                                    });\n                                }\n                                requestContext.overallCachePolicy.restrict(fieldPolicy);\n                            };\n                        },\n                    };\n                },\n                async willSendResponse(requestContext) {\n                    if (!calculateHttpHeaders) {\n                        return;\n                    }\n                    const { response, overallCachePolicy } = requestContext;\n                    const existingCacheControlHeader = parseExistingCacheControlHeader(response.http.headers.get('cache-control'));\n                    if (existingCacheControlHeader.kind === 'unparsable') {\n                        return;\n                    }\n                    const cachePolicy = (0, cachePolicy_js_1.newCachePolicy)();\n                    cachePolicy.replace(overallCachePolicy);\n                    if (existingCacheControlHeader.kind === 'parsable-and-cacheable') {\n                        cachePolicy.restrict(existingCacheControlHeader.hint);\n                    }\n                    const policyIfCacheable = cachePolicy.policyIfCacheable();\n                    if (policyIfCacheable &&\n                        existingCacheControlHeader.kind !== 'uncacheable' &&\n                        response.body.kind === 'single' &&\n                        !response.body.singleResult.errors) {\n                        response.http.headers.set('cache-control', `max-age=${policyIfCacheable.maxAge}, ${policyIfCacheable.scope.toLowerCase()}`);\n                    }\n                    else if (calculateHttpHeaders !== 'if-cacheable') {\n                        response.http.headers.set('cache-control', CACHE_CONTROL_HEADER_UNCACHEABLE);\n                    }\n                },\n            };\n        },\n    });\n}\nexports.ApolloServerPluginCacheControl = ApolloServerPluginCacheControl;\nconst CACHE_CONTROL_HEADER_CACHEABLE_REGEXP = /^max-age=(\\d+), (public|private)$/;\nconst CACHE_CONTROL_HEADER_UNCACHEABLE = 'no-store';\nfunction parseExistingCacheControlHeader(header) {\n    if (!header) {\n        return { kind: 'no-header' };\n    }\n    if (header === CACHE_CONTROL_HEADER_UNCACHEABLE) {\n        return { kind: 'uncacheable' };\n    }\n    const match = CACHE_CONTROL_HEADER_CACHEABLE_REGEXP.exec(header);\n    if (!match) {\n        return { kind: 'unparsable' };\n    }\n    return {\n        kind: 'parsable-and-cacheable',\n        hint: {\n            maxAge: +match[1],\n            scope: match[2] === 'public' ? 'PUBLIC' : 'PRIVATE',\n        },\n    };\n}\nfunction cacheAnnotationFromDirectives(directives) {\n    if (!directives)\n        return undefined;\n    const cacheControlDirective = directives.find((directive) => directive.name.value === 'cacheControl');\n    if (!cacheControlDirective)\n        return undefined;\n    if (!cacheControlDirective.arguments)\n        return undefined;\n    const maxAgeArgument = cacheControlDirective.arguments.find((argument) => argument.name.value === 'maxAge');\n    const scopeArgument = cacheControlDirective.arguments.find((argument) => argument.name.value === 'scope');\n    const inheritMaxAgeArgument = cacheControlDirective.arguments.find((argument) => argument.name.value === 'inheritMaxAge');\n    const scopeString = scopeArgument?.value?.kind === 'EnumValue'\n        ? scopeArgument.value.value\n        : undefined;\n    const scope = scopeString === 'PUBLIC' || scopeString === 'PRIVATE'\n        ? scopeString\n        : undefined;\n    if (inheritMaxAgeArgument?.value?.kind === 'BooleanValue' &&\n        inheritMaxAgeArgument.value.value) {\n        return { inheritMaxAge: true, scope };\n    }\n    return {\n        maxAge: maxAgeArgument?.value?.kind === 'IntValue'\n            ? parseInt(maxAgeArgument.value.value)\n            : undefined,\n        scope,\n    };\n}\nfunction cacheAnnotationFromType(t) {\n    if (t.astNode) {\n        const hint = cacheAnnotationFromDirectives(t.astNode.directives);\n        if (hint) {\n            return hint;\n        }\n    }\n    if (t.extensionASTNodes) {\n        for (const node of t.extensionASTNodes) {\n            const hint = cacheAnnotationFromDirectives(node.directives);\n            if (hint) {\n                return hint;\n            }\n        }\n    }\n    return {};\n}\nfunction cacheAnnotationFromField(field) {\n    if (field.astNode) {\n        const hint = cacheAnnotationFromDirectives(field.astNode.directives);\n        if (hint) {\n            return hint;\n        }\n    }\n    return {};\n}\nfunction isRestricted(hint) {\n    return hint.maxAge !== undefined || hint.scope !== undefined;\n}\n//# sourceMappingURL=index.js.map#/dist/esm/externalTypes/http.js.mapx{\"version\":3,\"file\":\"http.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/externalTypes/http.ts\"],\"names\":[],\"mappings\":\"\"}%/dist/cjs/internalErrorClasses.js.map\tM{\"version\":3,\"file\":\"internalErrorClasses.js\",\"sourceRoot\":\"\",\"sources\":[\"../../src/internalErrorClasses.ts\"],\"names\":[],\"mappings\":\"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\"})/dist/esm/plugin/drainHttpServer/index.js\u0001import { Stopper } from './stoppable.js';\nexport function ApolloServerPluginDrainHttpServer(options) {\n    const stopper = new Stopper(options.httpServer);\n    return {\n        async serverWillStart() {\n            return {\n                async drainServer() {\n                    await stopper.stop(options.stopGracePeriodMillis ?? 10000);\n                },\n            };\n        },\n    };\n}\n//# sourceMappingURL=index.js.map0/dist/esm/externalTypes/requestPipeline.d.ts.map\nH{\"version\":3,\"file\":\"requestPipeline.d.ts\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/externalTypes/requestPipeline.ts\"],\"names\":[],\"mappings\":\"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\"},/dist/esm/utils/schemaInstrumentation.js.map\n\f{\"version\":3,\"file\":\"schemaInstrumentation.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/utils/schemaInstrumentation.ts\"],\"names\":[],\"mappings\":\"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\"}3/dist/esm/plugin/landingPage/default/index.d.ts.map\u0001{\"version\":3,\"file\":\"index.d.ts\",\"sourceRoot\":\"\",\"sources\":[\"../../../../../src/plugin/landingPage/default/index.ts\"],\"names\":[],\"mappings\":\"AAAA,OAAO,KAAK,EACV,kBAAkB,EAEnB,MAAM,iCAAiC,CAAC;AAEzC,OAAO,KAAK,EACV,gDAAgD,EAChD,qDAAqD,EAEtD,MAAM,YAAY,CAAC;AAMpB,YAAY,EACV,gDAAgD,EAChD,qDAAqD,GACtD,CAAC;AAEF,wBAAgB,yCAAyC,CACvD,OAAO,GAAE,gDAAqD,GAC7D,kBAAkB,CAWpB;AAED,wBAAgB,8CAA8C,CAC5D,OAAO,GAAE,qDAA0D,GAClE,kBAAkB,CAOpB\"}9/dist/esm/utils/makeGatewayGraphQLRequestContext.d.ts.map\u0002\u0003{\"version\":3,\"file\":\"makeGatewayGraphQLRequestContext.d.ts\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/utils/makeGatewayGraphQLRequestContext.ts\"],\"names\":[],\"mappings\":\"AAAA,OAAO,KAAK,EAEV,4BAA4B,EAG7B,MAAM,kCAAkC,CAAC;AAE1C,OAAO,KAAK,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAC3E,OAAO,KAAK,EACV,WAAW,EACX,sCAAsC,EACvC,MAAM,kBAAkB,CAAC;AAyE1B,wBAAgB,gCAAgC,CAAC,QAAQ,SAAS,WAAW,EAC3E,iBAAiB,EAAE,sCAAsC,CAAC,QAAQ,CAAC,EACnE,MAAM,EAAE,YAAY,CAAC,QAAQ,CAAC,EAC9B,SAAS,EAAE,qBAAqB,CAAC,QAAQ,CAAC,GACzC,4BAA4B,CAqE9B\"}/dist/esm/runHttpQuery.d.ts\u0004\u0001import type { BaseContext, HTTPGraphQLHead, HTTPGraphQLRequest, HTTPGraphQLResponse } from './externalTypes/index.js';\nimport { ApolloServer, ApolloServerInternals, SchemaDerivedData } from './ApolloServer.js';\nimport { FormattedExecutionResult } from 'graphql';\nexport declare function runHttpQuery<TContext extends BaseContext>({ server, httpRequest, contextValue, schemaDerivedData, internals, sharedResponseHTTPGraphQLHead, }: {\n    server: ApolloServer<TContext>;\n    httpRequest: HTTPGraphQLRequest;\n    contextValue: TContext;\n    schemaDerivedData: SchemaDerivedData;\n    internals: ApolloServerInternals<TContext>;\n    sharedResponseHTTPGraphQLHead: HTTPGraphQLHead | null;\n}): Promise<HTTPGraphQLResponse>;\nexport declare function prettyJSONStringify(value: FormattedExecutionResult): string;\nexport declare function newHTTPGraphQLHead(status?: number): HTTPGraphQLHead;\nexport declare function mergeHTTPGraphQLHead(target: HTTPGraphQLHead, source: HTTPGraphQLHead): void;\n//# sourceMappingURL=runHttpQuery.d.ts.map /dist/esm/utils/invokeHooks.d.ts\u0003\u0002declare type AsyncDidEndHook<TArgs extends any[]> = (...args: TArgs) => Promise<void>;\ndeclare type SyncDidEndHook<TArgs extends any[]> = (...args: TArgs) => void;\nexport declare function invokeDidStartHook<T, TEndHookArgs extends unknown[]>(targets: T[], hook: (t: T) => Promise<AsyncDidEndHook<TEndHookArgs> | undefined | void>): Promise<AsyncDidEndHook<TEndHookArgs>>;\nexport declare function invokeSyncDidStartHook<T, TEndHookArgs extends unknown[]>(targets: T[], hook: (t: T) => SyncDidEndHook<TEndHookArgs> | undefined | void): SyncDidEndHook<TEndHookArgs>;\nexport declare function invokeHooksUntilDefinedAndNonNull<T, TOut>(targets: T[], hook: (t: T) => Promise<TOut | null | undefined>): Promise<TOut | null>;\nexport {};\n//# sourceMappingURL=invokeHooks.d.ts.map)/dist/cjs/plugin/schemaIsFederated.js.map\u0002R{\"version\":3,\"file\":\"schemaIsFederated.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/plugin/schemaIsFederated.ts\"],\"names\":[],\"mappings\":\";;;AAAA,qCAAoE;AAkBpE,SAAgB,iBAAiB,CAAC,MAAqB;IACrD,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC/C,IAAI,CAAC,IAAA,sBAAY,EAAC,WAAW,CAAC,EAAE;QAC9B,OAAO,KAAK,CAAC;KACd;IACD,MAAM,QAAQ,GAAG,WAAW,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC;IAC7C,IAAI,CAAC,QAAQ,EAAE;QACb,OAAO,KAAK,CAAC;KACd;IACD,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC;IACnC,IAAI,CAAC,IAAA,sBAAY,EAAC,YAAY,CAAC,EAAE;QAC/B,OAAO,KAAK,CAAC;KACd;IACD,OAAO,YAAY,CAAC,IAAI,IAAI,QAAQ,CAAC;AACvC,CAAC;AAdD,8CAcC\"})/dist/cjs/plugin/usageReporting/plugin.jsfU\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.makeHTTPRequestHeaders = exports.ApolloServerPluginUsageReporting = void 0;\nconst usage_reporting_protobuf_1 = require(\"@apollo/usage-reporting-protobuf\");\nconst utils_usagereporting_1 = require(\"@apollo/utils.usagereporting\");\nconst async_retry_1 = __importDefault(require(\"async-retry\"));\nconst graphql_1 = require(\"graphql\");\nconst node_abort_controller_1 = require(\"node-abort-controller\");\nconst node_fetch_1 = __importDefault(require(\"node-fetch\"));\nconst os_1 = __importDefault(require(\"os\"));\nconst util_1 = require(\"util\");\nconst zlib_1 = require(\"zlib\");\nconst internalPlugin_js_1 = require(\"../../internalPlugin.js\");\nconst traceTreeBuilder_js_1 = require(\"../traceTreeBuilder.js\");\nconst defaultSendOperationsAsTrace_js_1 = require(\"./defaultSendOperationsAsTrace.js\");\nconst operationDerivedDataCache_js_1 = require(\"./operationDerivedDataCache.js\");\nconst stats_js_1 = require(\"./stats.js\");\nconst traceDetails_js_1 = require(\"./traceDetails.js\");\nconst packageVersion_js_1 = require(\"../../generated/packageVersion.js\");\nconst computeCoreSchemaHash_js_1 = require(\"../../utils/computeCoreSchemaHash.js\");\nconst gzipPromise = (0, util_1.promisify)(zlib_1.gzip);\nconst reportHeaderDefaults = {\n    hostname: os_1.default.hostname(),\n    agentVersion: `@apollo/server@${packageVersion_js_1.packageVersion}`,\n    runtimeVersion: `node ${process.version}`,\n    uname: `${os_1.default.platform()}, ${os_1.default.type()}, ${os_1.default.release()}, ${os_1.default.arch()})`,\n};\nfunction ApolloServerPluginUsageReporting(options = Object.create(null)) {\n    const fieldLevelInstrumentationOption = options.fieldLevelInstrumentation;\n    const fieldLevelInstrumentation = typeof fieldLevelInstrumentationOption === 'number'\n        ? async () => Math.random() < fieldLevelInstrumentationOption\n            ? 1 / fieldLevelInstrumentationOption\n            : 0\n        : fieldLevelInstrumentationOption\n            ? fieldLevelInstrumentationOption\n            : async () => true;\n    let requestDidStartHandler;\n    return (0, internalPlugin_js_1.internalPlugin)({\n        __internal_plugin_id__: 'UsageReporting',\n        __is_disabled_plugin__: false,\n        async requestDidStart(requestContext) {\n            if (!requestDidStartHandler) {\n                throw Error('The usage reporting plugin has been asked to handle a request before the ' +\n                    'server has started. See https://github.com/apollographql/apollo-server/issues/4588 ' +\n                    'for more details.');\n            }\n            return requestDidStartHandler(requestContext);\n        },\n        async serverWillStart({ logger: serverLogger, apollo, startedInBackground, }) {\n            const logger = options.logger ?? serverLogger;\n            const { key, graphRef } = apollo;\n            if (!(key && graphRef)) {\n                throw new Error(\"You've enabled usage reporting via ApolloServerPluginUsageReporting, \" +\n                    'but you also need to provide your Apollo API key and graph ref, via ' +\n                    'the APOLLO_KEY/APOLLO_GRAPH_REF environment ' +\n                    'variables or via `new ApolloServer({apollo: {key, graphRef})`.');\n            }\n            logger.info('Apollo usage reporting starting! See your graph at ' +\n                `https://studio.apollographql.com/graph/${encodeURI(graphRef)}/`);\n            const sendReportsImmediately = options.sendReportsImmediately ?? startedInBackground;\n            let operationDerivedDataCache = null;\n            const reportByExecutableSchemaId = new Map();\n            const getReportWhichMustBeUsedImmediately = (executableSchemaId) => {\n                const existing = reportByExecutableSchemaId.get(executableSchemaId);\n                if (existing) {\n                    return existing;\n                }\n                const report = new stats_js_1.OurReport(new usage_reporting_protobuf_1.ReportHeader({\n                    ...reportHeaderDefaults,\n                    executableSchemaId,\n                    graphRef,\n                }));\n                reportByExecutableSchemaId.set(executableSchemaId, report);\n                return report;\n            };\n            const getAndDeleteReport = (executableSchemaId) => {\n                const report = reportByExecutableSchemaId.get(executableSchemaId);\n                if (report) {\n                    reportByExecutableSchemaId.delete(executableSchemaId);\n                    return report;\n                }\n                return null;\n            };\n            const overriddenExecutableSchemaId = options.overrideReportedSchema\n                ? (0, computeCoreSchemaHash_js_1.computeCoreSchemaHash)(options.overrideReportedSchema)\n                : undefined;\n            let lastSeenExecutableSchemaToId;\n            let reportTimer;\n            if (!sendReportsImmediately) {\n                reportTimer = setInterval(() => sendAllReportsAndReportErrors(), options.reportIntervalMs || 10 * 1000);\n            }\n            let sendTraces = options.sendTraces ?? true;\n            const sendOperationAsTrace = options.experimental_sendOperationAsTrace ??\n                (0, defaultSendOperationsAsTrace_js_1.defaultSendOperationsAsTrace)();\n            let stopped = false;\n            function executableSchemaIdForSchema(schema) {\n                if (lastSeenExecutableSchemaToId?.executableSchema === schema) {\n                    return lastSeenExecutableSchemaToId.executableSchemaId;\n                }\n                const id = (0, computeCoreSchemaHash_js_1.computeCoreSchemaHash)((0, graphql_1.printSchema)(schema));\n                lastSeenExecutableSchemaToId = {\n                    executableSchema: schema,\n                    executableSchemaId: id,\n                };\n                return id;\n            }\n            async function sendAllReportsAndReportErrors() {\n                await Promise.all([...reportByExecutableSchemaId.keys()].map((executableSchemaId) => sendReportAndReportErrors(executableSchemaId)));\n            }\n            async function sendReportAndReportErrors(executableSchemaId) {\n                return sendReport(executableSchemaId).catch((err) => {\n                    if (options.reportErrorFunction) {\n                        options.reportErrorFunction(err);\n                    }\n                    else {\n                        logger.error(err.message);\n                    }\n                });\n            }\n            const sendReport = async (executableSchemaId) => {\n                let report = getAndDeleteReport(executableSchemaId);\n                if (!report ||\n                    (Object.keys(report.tracesPerQuery).length === 0 &&\n                        report.operationCount === 0)) {\n                    return;\n                }\n                report.endTime = (0, traceTreeBuilder_js_1.dateToProtoTimestamp)(new Date());\n                report.ensureCountsAreIntegers();\n                const protobufError = usage_reporting_protobuf_1.Report.verify(report);\n                if (protobufError) {\n                    throw new Error(`Error verifying report: ${protobufError}`);\n                }\n                let message = usage_reporting_protobuf_1.Report.encode(report).finish();\n                report = null;\n                if (options.debugPrintReports) {\n                    const decodedReport = usage_reporting_protobuf_1.Report.decode(message);\n                    logger.info(`Apollo usage report: ${JSON.stringify(decodedReport.toJSON())}`);\n                }\n                const compressed = await gzipPromise(message);\n                message = null;\n                const fetcher = options.fetcher ?? node_fetch_1.default;\n                const response = await (0, async_retry_1.default)(async () => {\n                    const controller = new node_abort_controller_1.AbortController();\n                    const abortTimeout = setTimeout(() => {\n                        controller.abort();\n                    }, options.requestTimeoutMs ?? 30000);\n                    let curResponse;\n                    try {\n                        curResponse = await fetcher((options.endpointUrl ||\n                            'https://usage-reporting.api.apollographql.com') +\n                            '/api/ingress/traces', {\n                            method: 'POST',\n                            headers: {\n                                'user-agent': 'ApolloServerPluginUsageReporting',\n                                'x-api-key': key,\n                                'content-encoding': 'gzip',\n                                accept: 'application/json',\n                            },\n                            body: compressed,\n                            signal: controller.signal,\n                        });\n                    }\n                    finally {\n                        clearTimeout(abortTimeout);\n                    }\n                    if (curResponse.status >= 500 && curResponse.status < 600) {\n                        throw new Error(`HTTP status ${curResponse.status}, ${(await curResponse.text()) || '(no body)'}`);\n                    }\n                    else {\n                        return curResponse;\n                    }\n                }, {\n                    retries: (options.maxAttempts || 5) - 1,\n                    minTimeout: options.minimumRetryDelayMs || 100,\n                    factor: 2,\n                }).catch((err) => {\n                    throw new Error(`Error sending report to Apollo servers: ${err.message}`);\n                });\n                if (response.status < 200 || response.status >= 300) {\n                    throw new Error(`Error sending report to Apollo servers: HTTP status ${response.status}, ${(await response.text()) || '(no body)'}`);\n                }\n                if (sendTraces &&\n                    response.status === 200 &&\n                    response.headers\n                        .get('content-type')\n                        ?.match(/^\\s*application\\/json\\s*(?:;|$)/i)) {\n                    const body = await response.text();\n                    let parsedBody;\n                    try {\n                        parsedBody = JSON.parse(body);\n                    }\n                    catch (e) {\n                        throw new Error(`Error parsing response from Apollo servers: ${e}`);\n                    }\n                    if (parsedBody.tracesIgnored === true) {\n                        logger.debug(\"This graph's organization does not have access to traces; sending all \" +\n                            'subsequent operations as stats.');\n                        sendTraces = false;\n                    }\n                }\n                if (options.debugPrintReports) {\n                    logger.info(`Apollo usage report: status ${response.status}`);\n                }\n            };\n            requestDidStartHandler = ({ metrics, schema, request: { http, variables }, }) => {\n                const treeBuilder = new traceTreeBuilder_js_1.TraceTreeBuilder({\n                    maskedBy: 'ApolloServerPluginUsageReporting',\n                    sendErrors: options.sendErrors,\n                    logger,\n                });\n                treeBuilder.startTiming();\n                metrics.startHrTime = treeBuilder.startHrTime;\n                let graphqlValidationFailure = false;\n                let graphqlUnknownOperationName = false;\n                let includeOperationInUsageReporting = null;\n                if (http) {\n                    treeBuilder.trace.http = new usage_reporting_protobuf_1.Trace.HTTP({\n                        method: usage_reporting_protobuf_1.Trace.HTTP.Method[http.method] || usage_reporting_protobuf_1.Trace.HTTP.Method.UNKNOWN,\n                        host: null,\n                        path: null,\n                    });\n                    if (options.sendHeaders) {\n                        makeHTTPRequestHeaders(treeBuilder.trace.http, http.headers, options.sendHeaders);\n                    }\n                }\n                async function maybeCallIncludeRequestHook(requestContext) {\n                    if (includeOperationInUsageReporting !== null)\n                        return;\n                    if (typeof options.includeRequest !== 'function') {\n                        includeOperationInUsageReporting = true;\n                        return;\n                    }\n                    includeOperationInUsageReporting = await options.includeRequest(requestContext);\n                    if (typeof includeOperationInUsageReporting !== 'boolean') {\n                        logger.warn(\"The 'includeRequest' async predicate function must return a boolean value.\");\n                        includeOperationInUsageReporting = true;\n                    }\n                }\n                let didResolveSource = false;\n                return {\n                    async didResolveSource(requestContext) {\n                        didResolveSource = true;\n                        if (metrics.persistedQueryHit) {\n                            treeBuilder.trace.persistedQueryHit = true;\n                        }\n                        if (metrics.persistedQueryRegister) {\n                            treeBuilder.trace.persistedQueryRegister = true;\n                        }\n                        if (variables) {\n                            treeBuilder.trace.details = (0, traceDetails_js_1.makeTraceDetails)(variables, options.sendVariableValues, requestContext.source);\n                        }\n                        const clientInfo = (options.generateClientInfo || defaultGenerateClientInfo)(requestContext);\n                        if (clientInfo) {\n                            const { clientName, clientVersion } = clientInfo;\n                            treeBuilder.trace.clientVersion = clientVersion || '';\n                            treeBuilder.trace.clientName = clientName || '';\n                        }\n                    },\n                    async validationDidStart() {\n                        return async (validationErrors) => {\n                            graphqlValidationFailure = validationErrors\n                                ? validationErrors.length !== 0\n                                : false;\n                        };\n                    },\n                    async didResolveOperation(requestContext) {\n                        graphqlUnknownOperationName =\n                            requestContext.operation === undefined;\n                        await maybeCallIncludeRequestHook(requestContext);\n                        if (includeOperationInUsageReporting &&\n                            !graphqlUnknownOperationName) {\n                            if (metrics.captureTraces === undefined) {\n                                const rawWeight = await fieldLevelInstrumentation(requestContext);\n                                treeBuilder.trace.fieldExecutionWeight =\n                                    typeof rawWeight === 'number' ? rawWeight : rawWeight ? 1 : 0;\n                                metrics.captureTraces =\n                                    !!treeBuilder.trace.fieldExecutionWeight;\n                            }\n                        }\n                    },\n                    async executionDidStart() {\n                        if (!metrics.captureTraces)\n                            return;\n                        return {\n                            willResolveField({ info }) {\n                                return treeBuilder.willResolveField(info);\n                            },\n                        };\n                    },\n                    async didEncounterSubsequentErrors(_requestContext, errors) {\n                        treeBuilder.didEncounterErrors(errors);\n                    },\n                    async willSendSubsequentPayload(requestContext, payload) {\n                        if (!payload.hasNext) {\n                            await operationFinished(requestContext);\n                        }\n                    },\n                    async willSendResponse(requestContext) {\n                        if (!didResolveSource)\n                            return;\n                        if (requestContext.errors) {\n                            treeBuilder.didEncounterErrors(requestContext.errors);\n                        }\n                        if (requestContext.response.body.kind === 'single') {\n                            await operationFinished(requestContext);\n                        }\n                    },\n                };\n                async function operationFinished(requestContext) {\n                    const resolvedOperation = !!requestContext.operation;\n                    await maybeCallIncludeRequestHook(requestContext);\n                    treeBuilder.stopTiming();\n                    const executableSchemaId = overriddenExecutableSchemaId ?? executableSchemaIdForSchema(schema);\n                    if (includeOperationInUsageReporting === false) {\n                        if (resolvedOperation) {\n                            getReportWhichMustBeUsedImmediately(executableSchemaId)\n                                .operationCount++;\n                        }\n                        return;\n                    }\n                    treeBuilder.trace.fullQueryCacheHit = !!metrics.responseCacheHit;\n                    treeBuilder.trace.forbiddenOperation = !!metrics.forbiddenOperation;\n                    treeBuilder.trace.registeredOperation = !!metrics.registeredOperation;\n                    const policyIfCacheable = requestContext.overallCachePolicy.policyIfCacheable();\n                    if (policyIfCacheable) {\n                        treeBuilder.trace.cachePolicy = new usage_reporting_protobuf_1.Trace.CachePolicy({\n                            scope: policyIfCacheable.scope === 'PRIVATE'\n                                ? usage_reporting_protobuf_1.Trace.CachePolicy.Scope.PRIVATE\n                                : policyIfCacheable.scope === 'PUBLIC'\n                                    ? usage_reporting_protobuf_1.Trace.CachePolicy.Scope.PUBLIC\n                                    : usage_reporting_protobuf_1.Trace.CachePolicy.Scope.UNKNOWN,\n                            maxAgeNs: policyIfCacheable.maxAge * 1e9,\n                        });\n                    }\n                    if (metrics.queryPlanTrace) {\n                        treeBuilder.trace.queryPlan = metrics.queryPlanTrace;\n                    }\n                    addTrace().catch(logger.error);\n                    async function addTrace() {\n                        if (stopped) {\n                            return;\n                        }\n                        await new Promise((res) => setImmediate(res));\n                        const executableSchemaId = overriddenExecutableSchemaId ??\n                            executableSchemaIdForSchema(schema);\n                        const { trace } = treeBuilder;\n                        let statsReportKey = undefined;\n                        let referencedFieldsByType;\n                        if (!requestContext.document) {\n                            statsReportKey = `## GraphQLParseFailure\\n`;\n                        }\n                        else if (graphqlValidationFailure) {\n                            statsReportKey = `## GraphQLValidationFailure\\n`;\n                        }\n                        else if (graphqlUnknownOperationName) {\n                            statsReportKey = `## GraphQLUnknownOperationName\\n`;\n                        }\n                        const isExecutable = statsReportKey === undefined;\n                        if (statsReportKey) {\n                            if (options.sendUnexecutableOperationDocuments) {\n                                trace.unexecutedOperationBody = requestContext.source;\n                                trace.unexecutedOperationName =\n                                    requestContext.request.operationName || '';\n                            }\n                            referencedFieldsByType = Object.create(null);\n                        }\n                        else {\n                            const operationDerivedData = getOperationDerivedData();\n                            statsReportKey = `# ${requestContext.operationName || '-'}\\n${operationDerivedData.signature}`;\n                            referencedFieldsByType =\n                                operationDerivedData.referencedFieldsByType;\n                        }\n                        const protobufError = usage_reporting_protobuf_1.Trace.verify(trace);\n                        if (protobufError) {\n                            throw new Error(`Error encoding trace: ${protobufError}`);\n                        }\n                        if (resolvedOperation) {\n                            getReportWhichMustBeUsedImmediately(executableSchemaId)\n                                .operationCount++;\n                        }\n                        getReportWhichMustBeUsedImmediately(executableSchemaId).addTrace({\n                            statsReportKey,\n                            trace,\n                            asTrace: sendTraces &&\n                                (!isExecutable || !!metrics.captureTraces) &&\n                                sendOperationAsTrace(trace, statsReportKey),\n                            referencedFieldsByType,\n                        });\n                        if (sendReportsImmediately ||\n                            getReportWhichMustBeUsedImmediately(executableSchemaId)\n                                .sizeEstimator.bytes >=\n                                (options.maxUncompressedReportSize || 4 * 1024 * 1024)) {\n                            await sendReportAndReportErrors(executableSchemaId);\n                        }\n                    }\n                    function getOperationDerivedData() {\n                        if (!requestContext.document) {\n                            throw new Error('No document?');\n                        }\n                        const cacheKey = (0, operationDerivedDataCache_js_1.operationDerivedDataCacheKey)(requestContext.queryHash, requestContext.operationName || '');\n                        if (!operationDerivedDataCache ||\n                            operationDerivedDataCache.forSchema !== schema) {\n                            operationDerivedDataCache = {\n                                forSchema: schema,\n                                cache: (0, operationDerivedDataCache_js_1.createOperationDerivedDataCache)({ logger }),\n                            };\n                        }\n                        const cachedOperationDerivedData = operationDerivedDataCache.cache.get(cacheKey);\n                        if (cachedOperationDerivedData) {\n                            return cachedOperationDerivedData;\n                        }\n                        const generatedSignature = (options.calculateSignature || utils_usagereporting_1.usageReportingSignature)(requestContext.document, requestContext.operationName || '');\n                        const generatedOperationDerivedData = {\n                            signature: generatedSignature,\n                            referencedFieldsByType: (0, utils_usagereporting_1.calculateReferencedFieldsByType)({\n                                document: requestContext.document,\n                                schema,\n                                resolvedOperationName: requestContext.operationName ?? null,\n                            }),\n                        };\n                        operationDerivedDataCache.cache.set(cacheKey, generatedOperationDerivedData);\n                        return generatedOperationDerivedData;\n                    }\n                }\n            };\n            return {\n                async serverWillStop() {\n                    if (reportTimer) {\n                        clearInterval(reportTimer);\n                        reportTimer = undefined;\n                    }\n                    stopped = true;\n                    await sendAllReportsAndReportErrors();\n                },\n            };\n        },\n    });\n}\nexports.ApolloServerPluginUsageReporting = ApolloServerPluginUsageReporting;\nfunction makeHTTPRequestHeaders(http, headers, sendHeaders) {\n    if (!sendHeaders ||\n        ('none' in sendHeaders && sendHeaders.none) ||\n        ('all' in sendHeaders && !sendHeaders.all)) {\n        return;\n    }\n    for (const [key, value] of headers) {\n        if (('exceptNames' in sendHeaders &&\n            sendHeaders.exceptNames.some((exceptHeader) => {\n                return exceptHeader.toLowerCase() === key;\n            })) ||\n            ('onlyNames' in sendHeaders &&\n                !sendHeaders.onlyNames.some((header) => {\n                    return header.toLowerCase() === key;\n                }))) {\n            continue;\n        }\n        switch (key) {\n            case 'authorization':\n            case 'cookie':\n            case 'set-cookie':\n                break;\n            default:\n                http.requestHeaders[key] = new usage_reporting_protobuf_1.Trace.HTTP.Values({\n                    value: [value],\n                });\n        }\n    }\n}\nexports.makeHTTPRequestHeaders = makeHTTPRequestHeaders;\nfunction defaultGenerateClientInfo({ request, }) {\n    const clientNameHeaderKey = 'apollographql-client-name';\n    const clientVersionHeaderKey = 'apollographql-client-version';\n    if (request.http?.headers?.get(clientNameHeaderKey) ||\n        request.http?.headers?.get(clientVersionHeaderKey)) {\n        return {\n            clientName: request.http?.headers?.get(clientNameHeaderKey),\n            clientVersion: request.http?.headers?.get(clientVersionHeaderKey),\n        };\n    }\n    else if (request.extensions?.clientInfo) {\n        return request.extensions.clientInfo;\n    }\n    else {\n        return {};\n    }\n}\n//# sourceMappingURL=plugin.js.map3/dist/esm/plugin/usageReporting/traceDetails.js.map\u0007{\"version\":3,\"file\":\"traceDetails.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../../src/plugin/usageReporting/traceDetails.ts\"],\"names\":[],\"mappings\":\"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kCAAkC,CAAC;AAUzD,MAAM,UAAU,gBAAgB,CAC9B,SAA8B,EAC9B,kBAAyC,EACzC,eAAwB;IAExB,MAAM,OAAO,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;IACpC,MAAM,iBAAiB,GAAG,CAAC,GAAG,EAAE;QAC9B,IAAI,kBAAkB,IAAI,WAAW,IAAI,kBAAkB,EAAE;YAC3D,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC5C,IAAI;gBAEF,MAAM,iBAAiB,GAAG,kBAAkB,CAAC,SAAS,CAAC;oBACrD,SAAS,EAAE,SAAS;oBACpB,eAAe,EAAE,eAAe;iBACjC,CAAC,CAAC;gBACH,OAAO,sBAAsB,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC;aAChE;YAAC,OAAO,CAAC,EAAE;gBAGV,OAAO,iCAAiC,CAAC,YAAY,CAAC,CAAC;aACxD;SACF;aAAM;YACL,OAAO,SAAS,CAAC;SAClB;IACH,CAAC,CAAC,EAAE,CAAC;IAOL,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QAC9C,IACE,CAAC,kBAAkB;YACnB,CAAC,MAAM,IAAI,kBAAkB,IAAI,kBAAkB,CAAC,IAAI,CAAC;YACzD,CAAC,KAAK,IAAI,kBAAkB,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC;YACxD,CAAC,aAAa,IAAI,kBAAkB;gBAIlC,kBAAkB,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAChD,CAAC,WAAW,IAAI,kBAAkB;gBAChC,CAAC,kBAAkB,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAC/C;YAIA,OAAO,CAAC,aAAc,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;SACnC;aAAM;YACL,IAAI;gBACF,OAAO,CAAC,aAAc,CAAC,IAAI,CAAC;oBAC1B,OAAO,iBAAiB,CAAC,IAAI,CAAC,KAAK,WAAW;wBAC5C,CAAC,CAAC,EAAE;wBACJ,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;aAC/C;YAAC,OAAO,CAAC,EAAE;gBACV,OAAO,CAAC,aAAc,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAC3C,mCAAmC,CACpC,CAAC;aACH;SACF;IACH,CAAC,CAAC,CAAC;IACH,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,iCAAiC,CACxC,aAAuB;IAEvB,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC9C,aAAa,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QAC7B,iBAAiB,CAAC,IAAI,CAAC,GAAG,4BAA4B,CAAC;IACzD,CAAC,CAAC,CAAC;IACH,OAAO,iBAAiB,CAAC;AAC3B,CAAC;AAID,SAAS,sBAAsB,CAC7B,YAA2B,EAC3B,iBAAsC;IAEtC,MAAM,gBAAgB,GAAwB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAClE,YAAY,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QAC5B,gBAAgB,CAAC,IAAI,CAAC,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IACH,OAAO,gBAAgB,CAAC;AAC1B,CAAC\"}/src/internalErrorClasses.ts\u000fimport { GraphQLError, GraphQLErrorOptions } from 'graphql';\nimport { ApolloServerErrorCode } from './errors/index.js';\nimport { newHTTPGraphQLHead } from './runHttpQuery.js';\nimport { HeaderMap } from './utils/HeaderMap.js';\n\n// These error classes are not part of Apollo Server's external API; the\n// ApolloServerErrorCode enum is (exported from `@apollo/server/errors`).\n\nclass GraphQLErrorWithCode extends GraphQLError {\n  constructor(\n    message: string,\n    code: ApolloServerErrorCode,\n    options?: GraphQLErrorOptions,\n  ) {\n    super(message, {\n      ...options,\n      extensions: { ...options?.extensions, code },\n    });\n    this.name = this.constructor.name;\n  }\n}\n\nexport class SyntaxError extends GraphQLErrorWithCode {\n  constructor(graphqlError: GraphQLError) {\n    super(graphqlError.message, ApolloServerErrorCode.GRAPHQL_PARSE_FAILED, {\n      source: graphqlError.source,\n      positions: graphqlError.positions,\n      extensions: { http: newHTTPGraphQLHead(400), ...graphqlError.extensions },\n      originalError: graphqlError,\n    });\n  }\n}\n\nexport class ValidationError extends GraphQLErrorWithCode {\n  constructor(graphqlError: GraphQLError) {\n    super(\n      graphqlError.message,\n      ApolloServerErrorCode.GRAPHQL_VALIDATION_FAILED,\n      {\n        nodes: graphqlError.nodes,\n        extensions: {\n          http: newHTTPGraphQLHead(400),\n          ...graphqlError.extensions,\n        },\n        originalError: graphqlError.originalError ?? graphqlError,\n      },\n    );\n  }\n}\n\n// Persisted query errors (especially \"not found\") need to be uncached, because\n// hopefully we're about to fill in the APQ cache and the same request will\n// succeed next time. We also want a 200 response to avoid any error handling\n// that may mask the contents of an error response. (Otherwise, the default\n// status code for a response with `errors` but no `data` (even null) is 400.)\nconst getPersistedQueryErrorHttp = () => ({\n  status: 200,\n  headers: new HeaderMap([\n    ['cache-control', 'private, no-cache, must-revalidate'],\n  ]),\n});\n\nexport class PersistedQueryNotFoundError extends GraphQLErrorWithCode {\n  constructor() {\n    super(\n      'PersistedQueryNotFound',\n      ApolloServerErrorCode.PERSISTED_QUERY_NOT_FOUND,\n      { extensions: { http: getPersistedQueryErrorHttp() } },\n    );\n  }\n}\n\nexport class PersistedQueryNotSupportedError extends GraphQLErrorWithCode {\n  constructor() {\n    super(\n      'PersistedQueryNotSupported',\n      ApolloServerErrorCode.PERSISTED_QUERY_NOT_SUPPORTED,\n      // Not super clear why we need this to be uncached (makes sense for\n      // PersistedQueryNotFoundError, because there we're about to fill the\n      // cache and make the next copy of the same request succeed) but we've\n      // been doing it for years so :shrug:\n      { extensions: { http: getPersistedQueryErrorHttp() } },\n    );\n  }\n}\n\nexport class UserInputError extends GraphQLErrorWithCode {\n  constructor(graphqlError: GraphQLError) {\n    super(graphqlError.message, ApolloServerErrorCode.BAD_USER_INPUT, {\n      nodes: graphqlError.nodes,\n      originalError: graphqlError.originalError ?? graphqlError,\n      extensions: graphqlError.extensions,\n    });\n  }\n}\n\nexport class OperationResolutionError extends GraphQLErrorWithCode {\n  constructor(graphqlError: GraphQLError) {\n    super(\n      graphqlError.message,\n      ApolloServerErrorCode.OPERATION_RESOLUTION_FAILURE,\n      {\n        nodes: graphqlError.nodes,\n        originalError: graphqlError.originalError ?? graphqlError,\n        extensions: {\n          http: newHTTPGraphQLHead(400),\n          ...graphqlError.extensions,\n        },\n      },\n    );\n  }\n}\n\nexport class BadRequestError extends GraphQLErrorWithCode {\n  constructor(message: string, options?: GraphQLErrorOptions) {\n    super(message, ApolloServerErrorCode.BAD_REQUEST, {\n      ...options,\n      // Default to 400 status code, but caller can override. (If caller just\n      // wants to override headers... well, they can't, sorry.)\n      extensions: { http: newHTTPGraphQLHead(400), ...options?.extensions },\n    });\n  }\n}\n+/dist/esm/plugin/inlineTrace/index.d.ts.map\u0001{\"version\":3,\"file\":\"index.d.ts\",\"sourceRoot\":\"\",\"sources\":[\"../../../../src/plugin/inlineTrace/index.ts\"],\"names\":[],\"mappings\":\"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAGpE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAEvE,MAAM,WAAW,oCAAoC;IAoBnD,aAAa,CAAC,EAAE,iBAAiB,CAAC;IAWlC,yBAAyB,CAAC,EAAE,OAAO,CAAC;CACrC;AAOD,wBAAgB,6BAA6B,CAC3C,OAAO,GAAE,oCAA0D,GAClE,kBAAkB,CA4GpB\"}/dist/cjs/externalTypes/http.jsm\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=http.js.map,/dist/cjs/utils/schemaInstrumentation.js.map\t{\"version\":3,\"file\":\"schemaInstrumentation.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/utils/schemaInstrumentation.ts\"],\"names\":[],\"mappings\":\"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\"}</dist/esm/externalTypes/incrementalDeliveryPolyfill.d.ts.map\u0005{\"version\":3,\"file\":\"incrementalDeliveryPolyfill.d.ts\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/externalTypes/incrementalDeliveryPolyfill.ts\"],\"names\":[],\"mappings\":\"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAS/E,UAAU,MAAM,CAAC,CAAC;IAChB,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,CAAC;CAClB;AAED,MAAM,WAAW,6DAA6D,CAC5E,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,EACvB,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,CAC7B,SAAQ,wBAAwB,CAAC,KAAK,EAAE,WAAW,CAAC;IACpD,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,aAAa,CACzB,6CAA6C,CAAC,KAAK,EAAE,WAAW,CAAC,CAClE,CAAC;IACF,UAAU,CAAC,EAAE,WAAW,CAAC;CAC1B;AAED,MAAM,WAAW,gEAAgE,CAC/E,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,EACvB,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC;IAE7B,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,aAAa,CACzB,6CAA6C,CAAC,KAAK,EAAE,WAAW,CAAC,CAClE,CAAC;IACF,UAAU,CAAC,EAAE,WAAW,CAAC;CAC1B;AAED,oBAAY,6CAA6C,CACvD,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,EACvB,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,IAE3B,kDAAkD,CAAC,KAAK,EAAE,WAAW,CAAC,GACtE,mDAAmD,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;AAE5E,MAAM,WAAW,kDAAkD,CACjE,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,EACvB,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,CAC7B,SAAQ,wBAAwB,CAAC,KAAK,EAAE,WAAW,CAAC;IACpD,IAAI,CAAC,EAAE,aAAa,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,mDAAmD,CAClE,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,EACtB,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC;IAE7B,MAAM,CAAC,EAAE,aAAa,CAAC,qBAAqB,CAAC,CAAC;IAC9C,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;IACrB,IAAI,CAAC,EAAE,aAAa,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,WAAW,CAAC;CAC1B\"}(/dist/cjs/utils/schemaInstrumentation.js\f\f\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.whenResultIsFinished = exports.pluginsEnabledForSchemaResolvers = exports.enablePluginsForSchemaResolvers = exports.symbolUserFieldResolver = exports.symbolExecutionDispatcherWillResolveField = void 0;\nconst graphql_1 = require(\"graphql\");\nexports.symbolExecutionDispatcherWillResolveField = Symbol('apolloServerExecutionDispatcherWillResolveField');\nexports.symbolUserFieldResolver = Symbol('apolloServerUserFieldResolver');\nconst symbolPluginsEnabled = Symbol('apolloServerPluginsEnabled');\nfunction enablePluginsForSchemaResolvers(schema) {\n    if (pluginsEnabledForSchemaResolvers(schema)) {\n        return schema;\n    }\n    Object.defineProperty(schema, symbolPluginsEnabled, {\n        value: true,\n    });\n    const typeMap = schema.getTypeMap();\n    Object.values(typeMap).forEach((type) => {\n        if (!(0, graphql_1.getNamedType)(type).name.startsWith('__') &&\n            type instanceof graphql_1.GraphQLObjectType) {\n            const fields = type.getFields();\n            Object.values(fields).forEach((field) => {\n                wrapField(field);\n            });\n        }\n    });\n    return schema;\n}\nexports.enablePluginsForSchemaResolvers = enablePluginsForSchemaResolvers;\nfunction pluginsEnabledForSchemaResolvers(schema) {\n    return !!schema[symbolPluginsEnabled];\n}\nexports.pluginsEnabledForSchemaResolvers = pluginsEnabledForSchemaResolvers;\nfunction wrapField(field) {\n    const originalFieldResolve = field.resolve;\n    field.resolve = (source, args, contextValue, info) => {\n        const willResolveField = contextValue?.[exports.symbolExecutionDispatcherWillResolveField];\n        const userFieldResolver = contextValue?.[exports.symbolUserFieldResolver];\n        const didResolveField = typeof willResolveField === 'function' &&\n            willResolveField({ source, args, contextValue, info });\n        const fieldResolver = originalFieldResolve || userFieldResolver || graphql_1.defaultFieldResolver;\n        try {\n            const result = fieldResolver(source, args, contextValue, info);\n            if (typeof didResolveField === 'function') {\n                whenResultIsFinished(result, didResolveField);\n            }\n            return result;\n        }\n        catch (error) {\n            if (typeof didResolveField === 'function') {\n                didResolveField(error);\n            }\n            throw error;\n        }\n    };\n}\nfunction isPromise(x) {\n    return x && typeof x.then === 'function';\n}\nfunction whenResultIsFinished(result, callback) {\n    if (isPromise(result)) {\n        result.then((r) => callback(null, r), (err) => callback(err));\n    }\n    else if (Array.isArray(result)) {\n        if (result.some(isPromise)) {\n            Promise.all(result).then((r) => callback(null, r), (err) => callback(err));\n        }\n        else {\n            callback(null, result);\n        }\n    }\n    else {\n        callback(null, result);\n    }\n}\nexports.whenResultIsFinished = whenResultIsFinished;\n//# sourceMappingURL=schemaInstrumentation.js.map%/dist/esm/plugin/inlineTrace/index.js\u000bimport { Trace } from '@apollo/usage-reporting-protobuf';\nimport { TraceTreeBuilder } from '../traceTreeBuilder.js';\nimport { internalPlugin } from '../../internalPlugin.js';\nimport { schemaIsFederated } from '../schemaIsFederated.js';\nexport function ApolloServerPluginInlineTrace(options = Object.create(null)) {\n    let enabled = options.__onlyIfSchemaIsFederated ? null : true;\n    return internalPlugin({\n        __internal_plugin_id__: 'InlineTrace',\n        __is_disabled_plugin__: false,\n        async serverWillStart({ schema, logger }) {\n            if (enabled === null) {\n                enabled = schemaIsFederated(schema);\n                if (enabled) {\n                    logger.info('Enabling inline tracing for this federated service. To disable, use ' +\n                        'ApolloServerPluginInlineTraceDisabled.');\n                }\n            }\n        },\n        async requestDidStart({ request: { http }, metrics, logger }) {\n            if (!enabled) {\n                return;\n            }\n            const treeBuilder = new TraceTreeBuilder({\n                maskedBy: 'ApolloServerPluginInlineTrace',\n                sendErrors: options.includeErrors,\n                logger,\n            });\n            if (http?.headers.get('apollo-federation-include-trace') !== 'ftv1') {\n                return;\n            }\n            if (metrics.captureTraces === false) {\n                return;\n            }\n            metrics.captureTraces = true;\n            treeBuilder.startTiming();\n            return {\n                async executionDidStart() {\n                    return {\n                        willResolveField({ info }) {\n                            return treeBuilder.willResolveField(info);\n                        },\n                    };\n                },\n                async didEncounterErrors({ errors }) {\n                    treeBuilder.didEncounterErrors(errors);\n                },\n                async willSendResponse({ response }) {\n                    treeBuilder.stopTiming();\n                    if (response.body.kind === 'incremental') {\n                        return;\n                    }\n                    if (metrics.queryPlanTrace) {\n                        treeBuilder.trace.queryPlan = metrics.queryPlanTrace;\n                    }\n                    const encodedUint8Array = Trace.encode(treeBuilder.trace).finish();\n                    const encodedBuffer = Buffer.from(encodedUint8Array, encodedUint8Array.byteOffset, encodedUint8Array.byteLength);\n                    const extensions = response.body.singleResult.extensions ||\n                        (response.body.singleResult.extensions = Object.create(null));\n                    if (typeof extensions.ftv1 !== 'undefined') {\n                        throw new Error('The `ftv1` extension was already present.');\n                    }\n                    extensions.ftv1 = encodedBuffer.toString('base64');\n                },\n            };\n        },\n    });\n}\n//# sourceMappingURL=index.js.map)/dist/esm/utils/urlForHttpServer.d.ts.map{\"version\":3,\"file\":\"urlForHttpServer.d.ts\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/utils/urlForHttpServer.ts\"],\"names\":[],\"mappings\":\";AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAInC,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAgB3D\"}!/dist/esm/errorNormalize.d.ts.map\u0002y{\"version\":3,\"file\":\"errorNormalize.d.ts\",\"sourceRoot\":\"\",\"sources\":[\"../../src/errorNormalize.ts\"],\"names\":[],\"mappings\":\"AAEA,OAAO,EACL,YAAY,EAEZ,qBAAqB,EACtB,MAAM,SAAS,CAAC;AAEjB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAY/D,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,aAAa,CAAC,OAAO,CAAC,EAC9B,OAAO,GAAE;IACP,WAAW,CAAC,EAAE,CACZ,cAAc,EAAE,qBAAqB,EACrC,KAAK,EAAE,OAAO,KACX,qBAAqB,CAAC;IAC3B,iCAAiC,CAAC,EAAE,OAAO,CAAC;CACxC,GACL;IACD,eAAe,EAAE,KAAK,CAAC,qBAAqB,CAAC,CAAC;IAC9C,cAAc,EAAE,eAAe,CAAC;CACjC,CAqDA;AAED,wBAAgB,WAAW,CAAC,UAAU,EAAE,OAAO,GAAG,KAAK,CAItD;AAED,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,OAAO,EACnB,8BAA8B,GAAE,MAAW,GAC1C,YAAY,CAQd\"}7/dist/esm/plugin/landingPage/default/getEmbeddedHTML.js\tfunction getConfigStringForHtml(config) {\n    return JSON.stringify(config)\n        .replace('<', '\\\\u003c')\n        .replace('>', '\\\\u003e')\n        .replace('&', '\\\\u0026')\n        .replace(\"'\", '\\\\u0027');\n}\nexport const getEmbeddedExplorerHTML = (version, config) => {\n    const productionLandingPageConfigOrDefault = {\n        displayOptions: {},\n        persistExplorerState: false,\n        ...(typeof config.embed === 'boolean' ? {} : config.embed),\n    };\n    const embeddedExplorerParams = {\n        ...config,\n        target: '#embeddableExplorer',\n        initialState: {\n            ...config,\n            displayOptions: {\n                ...productionLandingPageConfigOrDefault.displayOptions,\n            },\n        },\n        persistExplorerState: productionLandingPageConfigOrDefault.persistExplorerState,\n    };\n    return `\n<div class=\"fallback\">\n  <h1>Welcome to Apollo Server</h1>\n  <p>Apollo Explorer cannot be loaded; it appears that you might be offline.</p>\n</div>\n<style>\n  iframe {\n    background-color: white;\n  }\n</style>\n<div\nstyle=\"width: 100vw; height: 100vh; position: absolute; top: 0;\"\nid=\"embeddableExplorer\"\n></div>\n<script src=\"https://embeddable-explorer.cdn.apollographql.com/${version}/embeddable-explorer.umd.production.min.js\"></script>\n<script>\n  var endpointUrl = window.location.href;\n  var embeddedExplorerConfig = ${getConfigStringForHtml(embeddedExplorerParams)};\n  new window.EmbeddedExplorer({\n    ...embeddedExplorerConfig,\n    endpointUrl,\n  });\n</script>\n`;\n};\nexport const getEmbeddedSandboxHTML = (version, config) => {\n    return `\n<div class=\"fallback\">\n  <h1>Welcome to Apollo Server</h1>\n  <p>Apollo Sandbox cannot be loaded; it appears that you might be offline.</p>\n</div>\n<style>\n  iframe {\n    background-color: white;\n  }\n</style>\n<div\nstyle=\"width: 100vw; height: 100vh; position: absolute; top: 0;\"\nid=\"embeddableSandbox\"\n></div>\n<script src=\"https://embeddable-sandbox.cdn.apollographql.com/${version}/embeddable-sandbox.umd.production.min.js\"></script>\n<script>\n  var initialEndpoint = window.location.href;\n  new window.EmbeddedSandbox({\n    target: '#embeddableSandbox',\n    initialEndpoint,\n    includeCookies: ${config.includeCookies ?? 'false'},\n    initialState: ${getConfigStringForHtml({\n        document: config.document ?? undefined,\n        variables: config.variables ?? undefined,\n        headers: config.headers ?? undefined,\n    })},\n  });\n</script>\n`;\n};\n//# sourceMappingURL=getEmbeddedHTML.js.map/src/determineApolloConfig.ts\bUimport { createHash } from '@apollo/utils.createhash';\nimport type { ApolloConfig, ApolloConfigInput } from './externalTypes/index.js';\n\n// This function combines the `apollo` constructor argument and some environment\n// variables to come up with a full ApolloConfig.\nexport function determineApolloConfig(\n  input: ApolloConfigInput | undefined,\n): ApolloConfig {\n  const apolloConfig: ApolloConfig = {};\n\n  const {\n    APOLLO_KEY,\n    APOLLO_GRAPH_REF,\n    APOLLO_GRAPH_ID,\n    APOLLO_GRAPH_VARIANT,\n  } = process.env;\n\n  // Determine key.\n  if (input?.key) {\n    apolloConfig.key = input.key;\n  } else if (APOLLO_KEY) {\n    apolloConfig.key = APOLLO_KEY;\n  }\n\n  // Determine key hash.\n  if (apolloConfig.key) {\n    apolloConfig.keyHash = createHash('sha512')\n      .update(apolloConfig.key)\n      .digest('hex');\n  }\n\n  // Determine graph ref, if provided together.\n  if (input?.graphRef) {\n    apolloConfig.graphRef = input.graphRef;\n  } else if (APOLLO_GRAPH_REF) {\n    apolloConfig.graphRef = APOLLO_GRAPH_REF;\n  }\n\n  // See if graph ID and variant were provided separately.\n  const graphId = input?.graphId ?? APOLLO_GRAPH_ID;\n  const graphVariant = input?.graphVariant ?? APOLLO_GRAPH_VARIANT;\n\n  if (apolloConfig.graphRef) {\n    if (graphId) {\n      throw new Error(\n        'Cannot specify both graph ref and graph ID. Please use ' +\n          '`apollo.graphRef` or `APOLLO_GRAPH_REF` without also setting the graph ID.',\n      );\n    }\n    if (graphVariant) {\n      throw new Error(\n        'Cannot specify both graph ref and graph variant. Please use ' +\n          '`apollo.graphRef` or `APOLLO_GRAPH_REF` without also setting the graph variant.',\n      );\n    }\n  } else if (graphId) {\n    // Graph ref is not specified, but the ID is. We can construct the ref\n    // from the ID and variant. Note that after this, we stop tracking the ID\n    // and variant, because Apollo Server 3 does not assume that all graph refs\n    // can be decomposed into ID and variant (except in the op reg plugin).\n    apolloConfig.graphRef = graphVariant\n      ? `${graphId}@${graphVariant}`\n      : graphId;\n  }\n\n  return apolloConfig;\n}\n+/dist/esm/plugin/drainHttpServer/index.d.ts\u0001/// <reference types=\"node\" />\nimport type http from 'http';\nimport type { ApolloServerPlugin } from '../../externalTypes/index.js';\nexport interface ApolloServerPluginDrainHttpServerOptions {\n    httpServer: http.Server;\n    stopGracePeriodMillis?: number;\n}\nexport declare function ApolloServerPluginDrainHttpServer(options: ApolloServerPluginDrainHttpServerOptions): ApolloServerPlugin;\n//# sourceMappingURL=index.d.ts.map1/dist/esm/plugin/drainHttpServer/stoppable.js.map\b{\"version\":3,\"file\":\"stoppable.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../../src/plugin/drainHttpServer/stoppable.ts\"],\"names\":[],\"mappings\":\"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\"}/dist/esm/utils/isDefined.js\\export function isDefined(t) {\n    return t != null;\n}\n//# sourceMappingURL=isDefined.js.map/src/utils/isDefined.ts]export function isDefined<T>(t: T | undefined | null | void): t is T {\n  return t != null;\n}\n$/src/plugin/schemaReporting/index.ts\u001dimport os from 'os';\nimport { internalPlugin } from '../../internalPlugin.js';\nimport { v4 as uuidv4 } from 'uuid';\nimport { printSchema, validateSchema, buildSchema } from 'graphql';\nimport { SchemaReporter } from './schemaReporter.js';\nimport { schemaIsFederated } from '../schemaIsFederated.js';\nimport type { SchemaReport } from './generated/operations.js';\nimport type { ApolloServerPlugin } from '../../externalTypes/index.js';\nimport type { Fetcher } from '@apollo/utils.fetcher';\nimport { packageVersion } from '../../generated/packageVersion.js';\nimport { computeCoreSchemaHash } from '../../utils/computeCoreSchemaHash.js';\n\nexport interface ApolloServerPluginSchemaReportingOptions {\n  /**\n   * The schema reporter waits before starting reporting.\n   * By default, the report waits some random amount of time between 0 and 10 seconds.\n   * A longer interval leads to more staggered starts which means it is less likely\n   * multiple servers will get asked to upload the same schema.\n   *\n   * If this server runs in lambda or in other constrained environments it would be useful\n   * to decrease the schema reporting max wait time to be less than default.\n   *\n   * This number will be the max for the range in ms that the schema reporter will\n   * wait before starting to report.\n   */\n  initialDelayMaxMs?: number;\n  /**\n   * Override the reported schema that is reported to the Apollo registry. This\n   * schema does not go through any normalizations and the string is directly\n   * sent to the Apollo registry. This can be useful for comments or other\n   * ordering and whitespace changes that get stripped when generating a\n   * `GraphQLSchema`.\n   *\n   * **If you pass this option to this plugin, you should explicitly configure\n   * `ApolloServerPluginUsageReporting` and pass the same value to its\n   * `overrideReportedSchema` option.** This ensures that the schema ID\n   * associated with requests reported by the usage reporting plugin matches the\n   * schema ID that this plugin reports. For example:\n   *\n   * ```js\n   * new ApolloServer({\n   *   plugins: [\n   *     ApolloServerPluginSchemaReporting({overrideReportedSchema: schema}),\n   *     ApolloServerPluginUsageReporting({overrideReportedSchema: schema}),\n   *   ],\n   * })\n   * ```\n   */\n  overrideReportedSchema?: string;\n  /**\n   * The URL to use for reporting schemas. Primarily for testing and internal\n   * Apollo use.\n   */\n  endpointUrl?: string;\n  /**\n   * Specifies which Fetch API implementation to use when reporting schemas.\n   */\n  fetcher?: Fetcher;\n}\n\nexport function ApolloServerPluginSchemaReporting(\n  {\n    initialDelayMaxMs,\n    overrideReportedSchema,\n    endpointUrl,\n    fetcher,\n  }: ApolloServerPluginSchemaReportingOptions = Object.create(null),\n): ApolloServerPlugin {\n  const bootId = uuidv4();\n\n  return internalPlugin({\n    __internal_plugin_id__: 'SchemaReporting',\n    __is_disabled_plugin__: false,\n    async serverWillStart({ apollo, schema, logger }) {\n      const { key, graphRef } = apollo;\n      if (!key) {\n        throw Error(\n          'To use ApolloServerPluginSchemaReporting, you must provide an Apollo API ' +\n            'key, via the APOLLO_KEY environment variable or via `new ApolloServer({apollo: {key})`',\n        );\n      }\n      if (!graphRef) {\n        // This error is a bit imprecise as you can also specify ID and variant separately,\n        // or rely on API-key parsing (before AS3), but this is \"best practices\".\n        throw Error(\n          'To use ApolloServerPluginSchemaReporting, you must provide your graph ref (eg, ' +\n            \"'my-graph-id@my-graph-variant'). Try setting the APOLLO_GRAPH_REF environment \" +\n            'variable or passing `new ApolloServer({apollo: {graphRef}})`.',\n        );\n      }\n\n      // Ensure a provided override schema can be parsed and validated\n      if (overrideReportedSchema) {\n        try {\n          const validationErrors = validateSchema(\n            buildSchema(overrideReportedSchema, { noLocation: true }),\n          );\n          if (validationErrors.length) {\n            throw new Error(\n              validationErrors.map((error) => error.message).join('\\n'),\n            );\n          }\n        } catch (err) {\n          throw new Error(\n            'The schema provided to overrideReportedSchema failed to parse or ' +\n              `validate: ${(err as Error).message}`,\n          );\n        }\n      }\n\n      if (schemaIsFederated(schema)) {\n        throw Error(\n          [\n            'Schema reporting is not yet compatible with federated services.',\n            \"If you're interested in using schema reporting with federated\",\n            'services, please contact Apollo support. To set up managed federation, see',\n            'https://go.apollo.dev/s/managed-federation',\n          ].join(' '),\n        );\n      }\n\n      if (endpointUrl !== undefined) {\n        logger.info(\n          `Apollo schema reporting: schema reporting URL override: ${endpointUrl}`,\n        );\n      }\n\n      const baseSchemaReport: Omit<SchemaReport, 'coreSchemaHash'> = {\n        bootId,\n        graphRef,\n        // The infra environment in which this edge server is running, e.g. localhost, Kubernetes\n        // Length must be <= 256 characters.\n        platform: process.env.APOLLO_SERVER_PLATFORM || 'local',\n        runtimeVersion: `node ${process.version}`,\n        // An identifier used to distinguish the version of the server code such as git or docker sha.\n        // Length must be <= 256 characters\n        userVersion: process.env.APOLLO_SERVER_USER_VERSION,\n        // \"An identifier for the server instance. Length must be <= 256 characters.\n        serverId:\n          process.env.APOLLO_SERVER_ID || process.env.HOSTNAME || os.hostname(),\n        libraryVersion: `@apollo/server@${packageVersion}`,\n      };\n      let currentSchemaReporter: SchemaReporter | undefined;\n\n      return {\n        schemaDidLoadOrUpdate({ apiSchema, coreSupergraphSdl }): void {\n          if (overrideReportedSchema !== undefined) {\n            if (currentSchemaReporter) {\n              // When the schema to report has been overridden, there is no need\n              // to create a new schema reporter.\n              return;\n            } else {\n              logger.info(\n                'Apollo schema reporting: schema to report has been overridden',\n              );\n            }\n          }\n\n          const coreSchema =\n            overrideReportedSchema ??\n            coreSupergraphSdl ??\n            printSchema(apiSchema);\n          const coreSchemaHash = computeCoreSchemaHash(coreSchema);\n          const schemaReport: SchemaReport = {\n            ...baseSchemaReport,\n            coreSchemaHash,\n          };\n\n          currentSchemaReporter?.stop();\n          currentSchemaReporter = new SchemaReporter({\n            schemaReport,\n            coreSchema,\n            apiKey: key,\n            endpointUrl,\n            logger,\n            // Jitter the startup between 0 and 10 seconds\n            initialReportingDelayInMs: Math.floor(\n              Math.random() * (initialDelayMaxMs ?? 10_000),\n            ),\n            fallbackReportingDelayInMs: 20_000,\n            fetcher,\n          });\n          currentSchemaReporter.start();\n\n          logger.info(\n            'Apollo schema reporting: reporting a new schema to Studio! See your graph at ' +\n              `https://studio.apollographql.com/graph/${encodeURI(\n                graphRef,\n              )}/ with server info ${JSON.stringify(schemaReport)}`,\n          );\n        },\n        async serverWillStop() {\n          currentSchemaReporter?.stop();\n        },\n      };\n    },\n  });\n}\n /dist/cjs/utils/schemaManager.js\u000e,\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SchemaManager = void 0;\nclass SchemaManager {\n    constructor(options) {\n        this.onSchemaLoadOrUpdateListeners = new Set();\n        this.isStopped = false;\n        this.logger = options.logger;\n        this.schemaDerivedDataProvider = options.schemaDerivedDataProvider;\n        if ('gateway' in options) {\n            this.modeSpecificState = {\n                mode: 'gateway',\n                gateway: options.gateway,\n                apolloConfig: options.apolloConfig,\n            };\n        }\n        else {\n            this.modeSpecificState = {\n                mode: 'schema',\n                apiSchema: options.apiSchema,\n                schemaDerivedData: options.schemaDerivedDataProvider(options.apiSchema),\n            };\n        }\n    }\n    async start() {\n        if (this.modeSpecificState.mode === 'gateway') {\n            const gateway = this.modeSpecificState.gateway;\n            if (gateway.onSchemaLoadOrUpdate) {\n                this.modeSpecificState.unsubscribeFromGateway =\n                    gateway.onSchemaLoadOrUpdate((schemaContext) => {\n                        this.processSchemaLoadOrUpdateEvent(schemaContext);\n                    });\n            }\n            else {\n                throw new Error(\"Unexpectedly couldn't find onSchemaLoadOrUpdate on gateway\");\n            }\n            const config = await this.modeSpecificState.gateway.load({\n                apollo: this.modeSpecificState.apolloConfig,\n            });\n            return config.executor;\n        }\n        else {\n            this.processSchemaLoadOrUpdateEvent({\n                apiSchema: this.modeSpecificState.apiSchema,\n            }, this.modeSpecificState.schemaDerivedData);\n            return null;\n        }\n    }\n    onSchemaLoadOrUpdate(callback) {\n        if (!this.schemaContext) {\n            throw new Error('You must call start() before onSchemaLoadOrUpdate()');\n        }\n        if (!this.isStopped) {\n            try {\n                callback(this.schemaContext);\n            }\n            catch (e) {\n                throw new Error(`An error was thrown from an 'onSchemaLoadOrUpdate' listener: ${e.message}`);\n            }\n        }\n        this.onSchemaLoadOrUpdateListeners.add(callback);\n        return () => {\n            this.onSchemaLoadOrUpdateListeners.delete(callback);\n        };\n    }\n    getSchemaDerivedData() {\n        if (!this.schemaDerivedData) {\n            throw new Error('You must call start() before getSchemaDerivedData()');\n        }\n        return this.schemaDerivedData;\n    }\n    async stop() {\n        this.isStopped = true;\n        if (this.modeSpecificState.mode === 'gateway') {\n            this.modeSpecificState.unsubscribeFromGateway?.();\n            await this.modeSpecificState.gateway.stop?.();\n        }\n    }\n    processSchemaLoadOrUpdateEvent(schemaContext, schemaDerivedData) {\n        if (!this.isStopped) {\n            this.schemaDerivedData =\n                schemaDerivedData ??\n                    this.schemaDerivedDataProvider(schemaContext.apiSchema);\n            this.schemaContext = schemaContext;\n            this.onSchemaLoadOrUpdateListeners.forEach((listener) => {\n                try {\n                    listener(schemaContext);\n                }\n                catch (e) {\n                    this.logger.error(\"An error was thrown from an 'onSchemaLoadOrUpdate' listener\");\n                    this.logger.error(e);\n                }\n            });\n        }\n    }\n}\nexports.SchemaManager = SchemaManager;\n//# sourceMappingURL=schemaManager.js.map\"/dist/esm/externalTypes/index.d.ts\u0006\u0019export type { BaseContext, ContextFunction, ContextThunk } from './context.js';\nexport type { GraphQLRequest, GraphQLResponse } from './graphql.js';\nexport type { HTTPGraphQLRequest, HTTPGraphQLResponse, HTTPGraphQLHead, } from './http.js';\nexport type { ApolloServerPlugin, GraphQLFieldResolverParams, GraphQLRequestExecutionListener, GraphQLRequestListener, GraphQLRequestListenerDidResolveField, GraphQLRequestListenerExecutionDidEnd, GraphQLRequestListenerParsingDidEnd, GraphQLRequestListenerValidationDidEnd, GraphQLSchemaContext, GraphQLServerListener, GraphQLServerContext, LandingPage, } from './plugins.js';\nexport type { GraphQLRequestContext, GraphQLRequestMetrics, GraphQLRequestContextDidEncounterErrors, GraphQLRequestContextDidResolveOperation, GraphQLRequestContextDidResolveSource, GraphQLRequestContextExecutionDidStart, GraphQLRequestContextParsingDidStart, GraphQLRequestContextResponseForOperation, GraphQLRequestContextValidationDidStart, GraphQLRequestContextWillSendResponse, } from './requestPipeline.js';\nexport type { DocumentStore, ApolloConfigInput, ApolloConfig, PersistedQueryOptions, CSRFPreventionOptions, ApolloServerOptions, } from './constructor.js';\nexport type { GraphQLExperimentalFormattedInitialIncrementalExecutionResult, GraphQLExperimentalFormattedSubsequentIncrementalExecutionResult, GraphQLExperimentalFormattedIncrementalResult, GraphQLExperimentalFormattedIncrementalDeferResult, GraphQLExperimentalFormattedIncrementalStreamResult, } from './incrementalDeliveryPolyfill.js';\n//# sourceMappingURL=index.d.ts.map/dist/esm/utils/invokeHooks.js\u0003import { isDefined } from './isDefined.js';\nexport async function invokeDidStartHook(targets, hook) {\n    const didEndHooks = (await Promise.all(targets.map((target) => hook(target)))).filter(isDefined);\n    didEndHooks.reverse();\n    return async (...args) => {\n        for (const didEndHook of didEndHooks) {\n            didEndHook(...args);\n        }\n    };\n}\nexport function invokeSyncDidStartHook(targets, hook) {\n    const didEndHooks = targets\n        .map((target) => hook(target))\n        .filter(isDefined);\n    didEndHooks.reverse();\n    return (...args) => {\n        for (const didEndHook of didEndHooks) {\n            didEndHook(...args);\n        }\n    };\n}\nexport async function invokeHooksUntilDefinedAndNonNull(targets, hook) {\n    for (const target of targets) {\n        const value = await hook(target);\n        if (value != null) {\n            return value;\n        }\n    }\n    return null;\n}\n//# sourceMappingURL=invokeHooks.js.map,/dist/esm/externalTypes/requestPipeline.d.ts\r+import type { WithRequired } from '@apollo/utils.withrequired';\nimport type { Trace } from '@apollo/usage-reporting-protobuf';\nimport type { BaseContext } from './context.js';\nimport type { GraphQLInProgressResponse, GraphQLRequest, GraphQLResponse } from './graphql.js';\nimport type { Logger } from '@apollo/utils.logger';\nimport type { KeyValueCache } from '@apollo/utils.keyvaluecache';\nimport type { DocumentNode, GraphQLError, GraphQLSchema, OperationDefinitionNode } from 'graphql';\nimport type { CachePolicy } from '@apollo/cache-control-types';\nexport interface GraphQLRequestMetrics {\n    captureTraces?: boolean;\n    persistedQueryHit?: boolean;\n    persistedQueryRegister?: boolean;\n    responseCacheHit?: boolean;\n    forbiddenOperation?: boolean;\n    registeredOperation?: boolean;\n    startHrTime?: [number, number];\n    queryPlanTrace?: Trace.QueryPlanNode;\n}\nexport interface GraphQLRequestContext<TContext extends BaseContext> {\n    readonly logger: Logger;\n    readonly cache: KeyValueCache<string>;\n    readonly request: GraphQLRequest;\n    readonly response: GraphQLInProgressResponse;\n    readonly schema: GraphQLSchema;\n    readonly contextValue: TContext;\n    readonly queryHash?: string;\n    readonly document?: DocumentNode;\n    readonly source?: string;\n    readonly operationName?: string | null;\n    readonly operation?: OperationDefinitionNode;\n    readonly errors?: ReadonlyArray<GraphQLError>;\n    readonly metrics: GraphQLRequestMetrics;\n    readonly overallCachePolicy: CachePolicy;\n    readonly requestIsBatched: boolean;\n}\nexport declare type GraphQLRequestContextDidResolveSource<TContext extends BaseContext> = WithRequired<GraphQLRequestContext<TContext>, 'source' | 'queryHash'>;\nexport declare type GraphQLRequestContextParsingDidStart<TContext extends BaseContext> = GraphQLRequestContextDidResolveSource<TContext>;\nexport declare type GraphQLRequestContextValidationDidStart<TContext extends BaseContext> = GraphQLRequestContextParsingDidStart<TContext> & WithRequired<GraphQLRequestContext<TContext>, 'document'>;\nexport declare type GraphQLRequestContextDidResolveOperation<TContext extends BaseContext> = GraphQLRequestContextValidationDidStart<TContext> & WithRequired<GraphQLRequestContext<TContext>, 'operationName'>;\nexport declare type GraphQLRequestContextDidEncounterErrors<TContext extends BaseContext> = WithRequired<GraphQLRequestContext<TContext>, 'errors'>;\nexport declare type GraphQLRequestContextResponseForOperation<TContext extends BaseContext> = WithRequired<GraphQLRequestContext<TContext>, 'source' | 'document' | 'operation' | 'operationName'>;\nexport declare type GraphQLRequestContextExecutionDidStart<TContext extends BaseContext> = GraphQLRequestContextParsingDidStart<TContext> & WithRequired<GraphQLRequestContext<TContext>, 'document' | 'operation' | 'operationName'>;\nexport declare type GraphQLRequestContextWillSendResponse<TContext extends BaseContext> = GraphQLRequestContextDidResolveSource<TContext> & {\n    readonly response: GraphQLResponse;\n};\nexport declare type GraphQLRequestContextDidEncounterSubsequentErrors<TContext extends BaseContext> = GraphQLRequestContextWillSendResponse<TContext>;\nexport declare type GraphQLRequestContextWillSendSubsequentPayload<TContext extends BaseContext> = GraphQLRequestContextWillSendResponse<TContext>;\n//# sourceMappingURL=requestPipeline.d.ts.map)/dist/cjs/generated/packageVersion.js.mapĨ{\"version\":3,\"file\":\"packageVersion.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/generated/packageVersion.ts\"],\"names\":[],\"mappings\":\";;;AAAa,QAAA,cAAc,GAAG,OAAO,CAAC\"},/dist/cjs/utils/computeCoreSchemaHash.js.map\u0001/{\"version\":3,\"file\":\"computeCoreSchemaHash.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/utils/computeCoreSchemaHash.ts\"],\"names\":[],\"mappings\":\";;;AAAA,+DAAsD;AAMtD,SAAgB,qBAAqB,CAAC,MAAc;IAClD,OAAO,IAAA,6BAAU,EAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC3D,CAAC;AAFD,sDAEC\"}(/dist/cjs/plugin/usageReporting/index.js\u0001p\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ApolloServerPluginUsageReporting = void 0;\nvar plugin_js_1 = require(\"./plugin.js\");\nObject.defineProperty(exports, \"ApolloServerPluginUsageReporting\", { enumerable: true, get: function () { return plugin_js_1.ApolloServerPluginUsageReporting; } });\n//# sourceMappingURL=index.js.map*/dist/esm/incrementalDeliveryPolyfill.d.ts\u0007import { ExecutionArgs, ExecutionResult, GraphQLError } from 'graphql';\ninterface ObjMap<T> {\n    [key: string]: T;\n}\nexport interface GraphQLExperimentalInitialIncrementalExecutionResult<TData = ObjMap<unknown>, TExtensions = ObjMap<unknown>> extends ExecutionResult<TData, TExtensions> {\n    hasNext: boolean;\n    incremental?: ReadonlyArray<GraphQLExperimentalIncrementalResult<TData, TExtensions>>;\n    extensions?: TExtensions;\n}\nexport interface GraphQLExperimentalSubsequentIncrementalExecutionResult<TData = ObjMap<unknown>, TExtensions = ObjMap<unknown>> {\n    hasNext: boolean;\n    incremental?: ReadonlyArray<GraphQLExperimentalIncrementalResult<TData, TExtensions>>;\n    extensions?: TExtensions;\n}\ndeclare type GraphQLExperimentalIncrementalResult<TData = ObjMap<unknown>, TExtensions = ObjMap<unknown>> = GraphQLExperimentalIncrementalDeferResult<TData, TExtensions> | GraphQLExperimentalIncrementalStreamResult<TData, TExtensions>;\ninterface GraphQLExperimentalIncrementalDeferResult<TData = ObjMap<unknown>, TExtensions = ObjMap<unknown>> extends ExecutionResult<TData, TExtensions> {\n    path?: ReadonlyArray<string | number>;\n    label?: string;\n}\ninterface GraphQLExperimentalIncrementalStreamResult<TData = Array<unknown>, TExtensions = ObjMap<unknown>> {\n    errors?: ReadonlyArray<GraphQLError>;\n    items?: TData | null;\n    path?: ReadonlyArray<string | number>;\n    label?: string;\n    extensions?: TExtensions;\n}\nexport interface GraphQLExperimentalIncrementalExecutionResults<TData = ObjMap<unknown>, TExtensions = ObjMap<unknown>> {\n    initialResult: GraphQLExperimentalInitialIncrementalExecutionResult<TData, TExtensions>;\n    subsequentResults: AsyncGenerator<GraphQLExperimentalSubsequentIncrementalExecutionResult<TData, TExtensions>, void, void>;\n}\nexport declare function executeIncrementally(args: ExecutionArgs): Promise<ExecutionResult | GraphQLExperimentalIncrementalExecutionResults>;\nexport {};\n//# sourceMappingURL=incrementalDeliveryPolyfill.d.ts.map#/dist/cjs/utils/urlForHttpServer.js\u0002\u000e\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.urlForHttpServer = void 0;\nconst url_1 = require(\"url\");\nfunction urlForHttpServer(httpServer) {\n    const { address, port } = httpServer.address();\n    const hostname = address === '' || address === '::' ? 'localhost' : address;\n    return (0, url_1.format)({\n        protocol: 'http',\n        hostname,\n        port,\n        pathname: '/',\n    });\n}\nexports.urlForHttpServer = urlForHttpServer;\n//# sourceMappingURL=urlForHttpServer.js.map8/dist/esm/plugin/usageReporting/durationHistogram.js.map\t\u0012{\"version\":3,\"file\":\"durationHistogram.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../../src/plugin/usageReporting/durationHistogram.ts\"],\"names\":[],\"mappings\":\"AAIA,MAAM,OAAO,iBAAiB;IAsE5B,YAAY,OAAkC;QAC5C,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,IAAI,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,OAAO,EAAE,OAAO,CAAC;QAEjC,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,EAAE,QAAQ,CAAC,CAAC;QAE/D,IAAI,CAAC,OAAO,GAAG,KAAK,CAAS,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAEpD,IAAI,OAAO,EAAE;YACX,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;SAC9D;IACH,CAAC;IAtED,OAAO;QACL,IAAI,cAAc,GAAG,CAAC,CAAC;QACvB,MAAM,WAAW,GAAa,EAAE,CAAC;QAEjC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE;YAChC,IAAI,KAAK,KAAK,CAAC,EAAE;gBACf,cAAc,EAAE,CAAC;aAClB;iBAAM;gBACL,IAAI,cAAc,KAAK,CAAC,EAAE;oBACxB,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;iBACrB;qBAAM,IAAI,cAAc,KAAK,CAAC,EAAE;oBAC/B,WAAW,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,CAAC;iBACnC;gBACD,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;gBACpC,cAAc,GAAG,CAAC,CAAC;aACpB;SACF;QACD,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,MAAM,CAAC,gBAAgB,CAAC,UAAkB;QACxC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,MAAM,CAAC,CAAC;QAC1C,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,iBAAiB,CAAC,YAAY,CAAC,CAAC;QAGxE,OAAO,eAAe,IAAI,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC;YAC1D,CAAC,CAAC,CAAC;YACH,CAAC,CAAC,eAAe,IAAI,iBAAiB,CAAC,YAAY;gBACnD,CAAC,CAAC,iBAAiB,CAAC,YAAY,GAAG,CAAC;gBACpC,CAAC,CAAC,eAAe,CAAC;IACtB,CAAC;IAED,iBAAiB,CAAC,UAAkB,EAAE,KAAK,GAAG,CAAC;QAC7C,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC,CAAC;QAC5E,OAAO,IAAI,CAAC;IACd,CAAC;IAED,eAAe,CAAC,MAAc,EAAE,KAAK,GAAG,CAAC;QACvC,IAAI,MAAM,IAAI,iBAAiB,CAAC,YAAY,EAAE;YAE5C,MAAM,KAAK,CAAC,8CAA8C,CAAC,CAAC;SAC7D;QAGD,IAAI,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;YACjC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;YACtC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,MAAM,GAAG,CAAC,CAAC;YACjC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;SACjC;QAED,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC;IAChC,CAAC;IAED,OAAO,CAAC,cAAiC;QACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACtD,IAAI,CAAC,eAAe,CAAC,CAAC,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;SACpD;IACH,CAAC;;AA5De,8BAAY,GAAG,GAAG,CAAC;AACnB,8BAAY,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC\"}3/dist/esm/plugin/usageReporting/iterateOverTrace.js\t\u0010export function iterateOverTrace(trace, f, includePath) {\n    const rootPath = includePath\n        ? new RootCollectingPathsResponseNamePath()\n        : notCollectingPathsResponseNamePath;\n    if (trace.root) {\n        if (iterateOverTraceNode(trace.root, rootPath, f))\n            return;\n    }\n    if (trace.queryPlan) {\n        if (iterateOverQueryPlan(trace.queryPlan, rootPath, f))\n            return;\n    }\n}\nfunction iterateOverQueryPlan(node, rootPath, f) {\n    if (!node)\n        return false;\n    if (node.fetch?.trace?.root && node.fetch.serviceName) {\n        return iterateOverTraceNode(node.fetch.trace.root, rootPath.child(`service:${node.fetch.serviceName}`), f);\n    }\n    if (node.flatten?.node) {\n        return iterateOverQueryPlan(node.flatten.node, rootPath, f);\n    }\n    if (node.parallel?.nodes) {\n        return node.parallel.nodes.some((node) => iterateOverQueryPlan(node, rootPath, f));\n    }\n    if (node.sequence?.nodes) {\n        return node.sequence.nodes.some((node) => iterateOverQueryPlan(node, rootPath, f));\n    }\n    return false;\n}\nfunction iterateOverTraceNode(node, path, f) {\n    if (f(node, path)) {\n        return true;\n    }\n    return (node.child?.some((child) => {\n        const childPath = child.responseName\n            ? path.child(child.responseName)\n            : path;\n        return iterateOverTraceNode(child, childPath, f);\n    }) ?? false);\n}\nconst notCollectingPathsResponseNamePath = {\n    toArray() {\n        throw Error('not collecting paths!');\n    },\n    child() {\n        return this;\n    },\n};\nclass RootCollectingPathsResponseNamePath {\n    toArray() {\n        return [];\n    }\n    child(responseName) {\n        return new ChildCollectingPathsResponseNamePath(responseName, this);\n    }\n}\nclass ChildCollectingPathsResponseNamePath {\n    constructor(responseName, prev) {\n        this.responseName = responseName;\n        this.prev = prev;\n    }\n    toArray() {\n        const out = [];\n        let curr = this;\n        while (curr instanceof ChildCollectingPathsResponseNamePath) {\n            out.push(curr.responseName);\n            curr = curr.prev;\n        }\n        return out.reverse();\n    }\n    child(responseName) {\n        return new ChildCollectingPathsResponseNamePath(responseName, this);\n    }\n}\n//# sourceMappingURL=iterateOverTrace.js.map/src/utils/invokeHooks.ts\u0006\u000eimport { isDefined } from './isDefined.js';\n\ntype AsyncDidEndHook<TArgs extends any[]> = (...args: TArgs) => Promise<void>;\ntype SyncDidEndHook<TArgs extends any[]> = (...args: TArgs) => void;\n\nexport async function invokeDidStartHook<T, TEndHookArgs extends unknown[]>(\n  targets: T[],\n  hook: (t: T) => Promise<AsyncDidEndHook<TEndHookArgs> | undefined | void>,\n): Promise<AsyncDidEndHook<TEndHookArgs>> {\n  const didEndHooks = (\n    await Promise.all(targets.map((target) => hook(target)))\n  ).filter(isDefined);\n\n  didEndHooks.reverse();\n\n  return async (...args: TEndHookArgs) => {\n    for (const didEndHook of didEndHooks) {\n      didEndHook(...args);\n    }\n  };\n}\n\n// Almost all hooks are async, but as a special case, willResolveField is sync\n// due to performance concerns.\nexport function invokeSyncDidStartHook<T, TEndHookArgs extends unknown[]>(\n  targets: T[],\n  hook: (t: T) => SyncDidEndHook<TEndHookArgs> | undefined | void,\n): SyncDidEndHook<TEndHookArgs> {\n  const didEndHooks: SyncDidEndHook<TEndHookArgs>[] = targets\n    .map((target) => hook(target))\n    .filter(isDefined);\n\n  didEndHooks.reverse();\n\n  return (...args: TEndHookArgs) => {\n    for (const didEndHook of didEndHooks) {\n      didEndHook(...args);\n    }\n  };\n}\n\nexport async function invokeHooksUntilDefinedAndNonNull<T, TOut>(\n  targets: T[],\n  hook: (t: T) => Promise<TOut | null | undefined>,\n): Promise<TOut | null> {\n  for (const target of targets) {\n    const value = await hook(target);\n    if (value != null) {\n      return value;\n    }\n  }\n  return null;\n}\n&/dist/esm/plugin/traceTreeBuilder.d.ts\u0003import { GraphQLError, GraphQLResolveInfo } from 'graphql';\nimport { Trace, google } from '@apollo/usage-reporting-protobuf';\nimport type { Logger } from '@apollo/utils.logger';\nimport type { SendErrorsOptions } from './usageReporting';\nexport declare class TraceTreeBuilder {\n    private rootNode;\n    private logger;\n    trace: Trace;\n    startHrTime?: [number, number];\n    private stopped;\n    private nodes;\n    private readonly transformError;\n    constructor(options: {\n        maskedBy: string;\n        logger: Logger;\n        sendErrors?: SendErrorsOptions;\n    });\n    startTiming(): void;\n    stopTiming(): void;\n    willResolveField(info: GraphQLResolveInfo): () => void;\n    didEncounterErrors(errors: readonly GraphQLError[]): void;\n    private addProtobufError;\n    private newNode;\n    private ensureParentNode;\n    private transformAndNormalizeError;\n}\nexport declare function dateToProtoTimestamp(date: Date): google.protobuf.Timestamp;\n//# sourceMappingURL=traceTreeBuilder.d.ts.map*/dist/esm/plugin/cacheControl/index.js.map\u001c}{\"version\":3,\"file\":\"index.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../../src/plugin/cacheControl/index.ts\"],\"names\":[],\"mappings\":\"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\"}/dist/esm/errors/index.d.ts.map\u0001{\"version\":3,\"file\":\"index.d.ts\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/errors/index.ts\"],\"names\":[],\"mappings\":\"AAEA,oBAAY,qBAAqB;IAC/B,qBAAqB,0BAA0B;IAC/C,oBAAoB,yBAAyB;IAC7C,yBAAyB,8BAA8B;IACvD,yBAAyB,8BAA8B;IACvD,6BAA6B,kCAAkC;IAC/D,cAAc,mBAAmB;IACjC,4BAA4B,iCAAiC;IAC7D,WAAW,gBAAgB;CAC5B;AAED,oBAAY,+BAA+B;IACzC,sBAAsB,2BAA2B;CAClD;AAWD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAK3D\"}C/dist/esm/plugin/usageReporting/defaultSendOperationsAsTrace.js.map\u0005{\"version\":3,\"file\":\"defaultSendOperationsAsTrace.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../../src/plugin/usageReporting/defaultSendOperationsAsTrace.ts\"],\"names\":[],\"mappings\":\"AAAA,OAAO,QAAQ,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,MAAM,UAAU,4BAA4B;IAU1C,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAe;QAWvC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC;QACxB,eAAe,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;YAC7B,OAAO,CAAC,GAAG,IAAI,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;QAC9C,CAAC;KACF,CAAC,CAAC;IAEH,OAAO,CAAC,KAAY,EAAE,cAAsB,EAAW,EAAE;QACvD,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC;QAC9C,IAAI,cAAc,IAAI,IAAI,EAAE;YAC1B,MAAM,KAAK,CAAC,6CAA6C,CAAC,CAAC;SAC5D;QAED,MAAM,SAAS,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC;YAC9B,cAAc;YACd,iBAAiB,CAAC,gBAAgB,CAAC,KAAK,CAAC,UAAU,CAAC;YAEpD,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,EAAE,CAAC;YAG/B,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;SAChD,CAAC,CAAC;QAGH,IAAI,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;YACvB,OAAO,KAAK,CAAC;SACd;QAED,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;AACJ,CAAC;AAID,SAAS,cAAc,CAAC,KAAY;IAClC,IAAI,SAAS,GAAG,KAAK,CAAC;IAEtB,SAAS,cAAc,CAAC,IAAiB;QACvC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE;YACjC,SAAS,GAAG,IAAI,CAAC;SAClB;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,gBAAgB,CAAC,KAAK,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC;IAC/C,OAAO,SAAS,CAAC;AACnB,CAAC\"}(/dist/esm/externalTypes/context.d.ts.map\u0001~{\"version\":3,\"file\":\"context.d.ts\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/externalTypes/context.ts\"],\"names\":[],\"mappings\":\"AAGA,oBAAY,WAAW,GAAG,EAAE,CAAC;AAI7B,oBAAY,eAAe,CACzB,wBAAwB,SAAS,GAAG,EAAE,EACtC,QAAQ,SAAS,WAAW,GAAG,WAAW,IACxC,CAAC,GAAG,kBAAkB,EAAE,wBAAwB,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;AAM3E,oBAAY,YAAY,CAAC,QAAQ,SAAS,WAAW,GAAG,WAAW,IACjE,MAAM,OAAO,CAAC,QAAQ,CAAC,CAAC\"}>/dist/esm/plugin/usageReporting/operationDerivedDataCache.d.ts\u0002=import type { Logger } from '@apollo/utils.logger';\nimport type { ReferencedFieldsByType } from '@apollo/utils.usagereporting';\nimport LRUCache from 'lru-cache';\nexport interface OperationDerivedData {\n    signature: string;\n    referencedFieldsByType: ReferencedFieldsByType;\n}\nexport declare function createOperationDerivedDataCache({ logger, }: {\n    logger: Logger;\n}): LRUCache<string, OperationDerivedData>;\nexport declare function operationDerivedDataCacheKey(queryHash: string, operationName: string): string;\n//# sourceMappingURL=operationDerivedDataCache.d.ts.map/dist/cjs/cachePolicy.js.map\u0003{\"version\":3,\"file\":\"cachePolicy.js\",\"sourceRoot\":\"\",\"sources\":[\"../../src/cachePolicy.ts\"],\"names\":[],\"mappings\":\";;;AAEA,SAAgB,cAAc;IAC5B,OAAO;QACL,MAAM,EAAE,SAAS;QACjB,KAAK,EAAE,SAAS;QAChB,QAAQ,CAAC,IAAe;YACtB,IACE,IAAI,CAAC,MAAM,KAAK,SAAS;gBACzB,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,EACxD;gBACA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;aAC3B;YACD,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE;gBACxD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;aACzB;QACH,CAAC;QACD,OAAO,CAAC,IAAe;YACrB,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE;gBAC7B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;aAC3B;YACD,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE;gBAC5B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;aACzB;QACH,CAAC;QACD,iBAAiB;YACf,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;gBAClD,OAAO,IAAI,CAAC;aACb;YACD,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,QAAQ,EAAE,CAAC;QAChE,CAAC;KACF,CAAC;AACJ,CAAC;AA9BD,wCA8BC\"}(/dist/esm/plugin/usageReporting/stats.js(timport { Trace, } from '@apollo/usage-reporting-protobuf';\nimport { DurationHistogram } from './durationHistogram.js';\nimport { iterateOverTrace } from './iterateOverTrace.js';\nexport class SizeEstimator {\n    constructor() {\n        this.bytes = 0;\n    }\n}\nexport class OurReport {\n    constructor(header) {\n        this.header = header;\n        this.tracesPerQuery = Object.create(null);\n        this.endTime = null;\n        this.operationCount = 0;\n        this.sizeEstimator = new SizeEstimator();\n    }\n    ensureCountsAreIntegers() {\n        for (const tracesAndStats of Object.values(this.tracesPerQuery)) {\n            tracesAndStats.ensureCountsAreIntegers();\n        }\n    }\n    addTrace({ statsReportKey, trace, asTrace, referencedFieldsByType, maxTraceBytes = 10 * 1024 * 1024, }) {\n        const tracesAndStats = this.getTracesAndStats({\n            statsReportKey,\n            referencedFieldsByType,\n        });\n        if (asTrace) {\n            const encodedTrace = Trace.encode(trace).finish();\n            if (!isNaN(maxTraceBytes) && encodedTrace.length > maxTraceBytes) {\n                tracesAndStats.statsWithContext.addTrace(trace, this.sizeEstimator);\n            }\n            else {\n                tracesAndStats.trace.push(encodedTrace);\n                this.sizeEstimator.bytes += 2 + encodedTrace.length;\n            }\n        }\n        else {\n            tracesAndStats.statsWithContext.addTrace(trace, this.sizeEstimator);\n        }\n    }\n    getTracesAndStats({ statsReportKey, referencedFieldsByType, }) {\n        const existing = this.tracesPerQuery[statsReportKey];\n        if (existing) {\n            return existing;\n        }\n        this.sizeEstimator.bytes += estimatedBytesForString(statsReportKey);\n        for (const [typeName, referencedFieldsForType] of Object.entries(referencedFieldsByType)) {\n            this.sizeEstimator.bytes += 2 + 2;\n            if (referencedFieldsForType.isInterface) {\n                this.sizeEstimator.bytes += 2;\n            }\n            this.sizeEstimator.bytes += estimatedBytesForString(typeName);\n            for (const fieldName of referencedFieldsForType.fieldNames) {\n                this.sizeEstimator.bytes += estimatedBytesForString(fieldName);\n            }\n        }\n        return (this.tracesPerQuery[statsReportKey] = new OurTracesAndStats(referencedFieldsByType));\n    }\n}\nclass OurTracesAndStats {\n    constructor(referencedFieldsByType) {\n        this.referencedFieldsByType = referencedFieldsByType;\n        this.trace = [];\n        this.statsWithContext = new StatsByContext();\n        this.internalTracesContributingToStats = [];\n    }\n    ensureCountsAreIntegers() {\n        this.statsWithContext.ensureCountsAreIntegers();\n    }\n}\nclass StatsByContext {\n    constructor() {\n        this.map = Object.create(null);\n    }\n    toArray() {\n        return Object.values(this.map);\n    }\n    ensureCountsAreIntegers() {\n        for (const contextualizedStats of Object.values(this.map)) {\n            contextualizedStats.ensureCountsAreIntegers();\n        }\n    }\n    addTrace(trace, sizeEstimator) {\n        this.getContextualizedStats(trace, sizeEstimator).addTrace(trace, sizeEstimator);\n    }\n    getContextualizedStats(trace, sizeEstimator) {\n        const statsContext = {\n            clientName: trace.clientName,\n            clientVersion: trace.clientVersion,\n        };\n        const statsContextKey = JSON.stringify(statsContext);\n        const existing = this.map[statsContextKey];\n        if (existing) {\n            return existing;\n        }\n        sizeEstimator.bytes +=\n            20 +\n                estimatedBytesForString(trace.clientName) +\n                estimatedBytesForString(trace.clientVersion);\n        const contextualizedStats = new OurContextualizedStats(statsContext);\n        this.map[statsContextKey] = contextualizedStats;\n        return contextualizedStats;\n    }\n}\nexport class OurContextualizedStats {\n    constructor(context) {\n        this.context = context;\n        this.queryLatencyStats = new OurQueryLatencyStats();\n        this.perTypeStat = Object.create(null);\n    }\n    ensureCountsAreIntegers() {\n        for (const typeStat of Object.values(this.perTypeStat)) {\n            typeStat.ensureCountsAreIntegers();\n        }\n    }\n    addTrace(trace, sizeEstimator) {\n        const { fieldExecutionWeight } = trace;\n        if (!fieldExecutionWeight) {\n            this.queryLatencyStats.requestsWithoutFieldInstrumentation++;\n        }\n        this.queryLatencyStats.requestCount++;\n        if (trace.fullQueryCacheHit) {\n            this.queryLatencyStats.cacheLatencyCount.incrementDuration(trace.durationNs);\n            this.queryLatencyStats.cacheHits++;\n        }\n        else {\n            this.queryLatencyStats.latencyCount.incrementDuration(trace.durationNs);\n        }\n        if (!trace.fullQueryCacheHit && trace.cachePolicy?.maxAgeNs != null) {\n            switch (trace.cachePolicy.scope) {\n                case Trace.CachePolicy.Scope.PRIVATE:\n                    this.queryLatencyStats.privateCacheTtlCount.incrementDuration(trace.cachePolicy.maxAgeNs);\n                    break;\n                case Trace.CachePolicy.Scope.PUBLIC:\n                    this.queryLatencyStats.publicCacheTtlCount.incrementDuration(trace.cachePolicy.maxAgeNs);\n                    break;\n            }\n        }\n        if (trace.persistedQueryHit) {\n            this.queryLatencyStats.persistedQueryHits++;\n        }\n        if (trace.persistedQueryRegister) {\n            this.queryLatencyStats.persistedQueryMisses++;\n        }\n        if (trace.forbiddenOperation) {\n            this.queryLatencyStats.forbiddenOperationCount++;\n        }\n        if (trace.registeredOperation) {\n            this.queryLatencyStats.registeredOperationCount++;\n        }\n        let hasError = false;\n        const traceNodeStats = (node, path) => {\n            if (node.error?.length) {\n                hasError = true;\n                let currPathErrorStats = this.queryLatencyStats.rootErrorStats;\n                path.toArray().forEach((subPath) => {\n                    currPathErrorStats = currPathErrorStats.getChild(subPath, sizeEstimator);\n                });\n                currPathErrorStats.requestsWithErrorsCount += 1;\n                currPathErrorStats.errorsCount += node.error.length;\n            }\n            if (fieldExecutionWeight) {\n                const fieldName = node.originalFieldName || node.responseName;\n                if (node.parentType &&\n                    fieldName &&\n                    node.type &&\n                    node.endTime != null &&\n                    node.startTime != null &&\n                    node.endTime >= node.startTime) {\n                    const typeStat = this.getTypeStat(node.parentType, sizeEstimator);\n                    const fieldStat = typeStat.getFieldStat(fieldName, node.type, sizeEstimator);\n                    fieldStat.errorsCount += node.error?.length ?? 0;\n                    fieldStat.observedExecutionCount++;\n                    fieldStat.estimatedExecutionCount += fieldExecutionWeight;\n                    fieldStat.requestsWithErrorsCount +=\n                        (node.error?.length ?? 0) > 0 ? 1 : 0;\n                    fieldStat.latencyCount.incrementDuration(node.endTime - node.startTime, fieldExecutionWeight);\n                }\n            }\n            return false;\n        };\n        iterateOverTrace(trace, traceNodeStats, true);\n        if (hasError) {\n            this.queryLatencyStats.requestsWithErrorsCount++;\n        }\n    }\n    getTypeStat(parentType, sizeEstimator) {\n        const existing = this.perTypeStat[parentType];\n        if (existing) {\n            return existing;\n        }\n        sizeEstimator.bytes += estimatedBytesForString(parentType);\n        const typeStat = new OurTypeStat();\n        this.perTypeStat[parentType] = typeStat;\n        return typeStat;\n    }\n}\nclass OurQueryLatencyStats {\n    constructor() {\n        this.latencyCount = new DurationHistogram();\n        this.requestCount = 0;\n        this.requestsWithoutFieldInstrumentation = 0;\n        this.cacheHits = 0;\n        this.persistedQueryHits = 0;\n        this.persistedQueryMisses = 0;\n        this.cacheLatencyCount = new DurationHistogram();\n        this.rootErrorStats = new OurPathErrorStats();\n        this.requestsWithErrorsCount = 0;\n        this.publicCacheTtlCount = new DurationHistogram();\n        this.privateCacheTtlCount = new DurationHistogram();\n        this.registeredOperationCount = 0;\n        this.forbiddenOperationCount = 0;\n    }\n}\nclass OurPathErrorStats {\n    constructor() {\n        this.children = Object.create(null);\n        this.errorsCount = 0;\n        this.requestsWithErrorsCount = 0;\n    }\n    getChild(subPath, sizeEstimator) {\n        const existing = this.children[subPath];\n        if (existing) {\n            return existing;\n        }\n        const child = new OurPathErrorStats();\n        this.children[subPath] = child;\n        sizeEstimator.bytes += estimatedBytesForString(subPath) + 4;\n        return child;\n    }\n}\nclass OurTypeStat {\n    constructor() {\n        this.perFieldStat = Object.create(null);\n    }\n    getFieldStat(fieldName, returnType, sizeEstimator) {\n        const existing = this.perFieldStat[fieldName];\n        if (existing) {\n            return existing;\n        }\n        sizeEstimator.bytes +=\n            estimatedBytesForString(fieldName) +\n                estimatedBytesForString(returnType) +\n                10;\n        const fieldStat = new OurFieldStat(returnType);\n        this.perFieldStat[fieldName] = fieldStat;\n        return fieldStat;\n    }\n    ensureCountsAreIntegers() {\n        for (const fieldStat of Object.values(this.perFieldStat)) {\n            fieldStat.ensureCountsAreIntegers();\n        }\n    }\n}\nclass OurFieldStat {\n    constructor(returnType) {\n        this.returnType = returnType;\n        this.errorsCount = 0;\n        this.observedExecutionCount = 0;\n        this.estimatedExecutionCount = 0;\n        this.requestsWithErrorsCount = 0;\n        this.latencyCount = new DurationHistogram();\n    }\n    ensureCountsAreIntegers() {\n        this.estimatedExecutionCount = Math.floor(this.estimatedExecutionCount);\n    }\n}\nfunction estimatedBytesForString(s) {\n    return 2 + Buffer.byteLength(s);\n}\n//# sourceMappingURL=stats.js.map/dist/esm/ApolloServer.d.ts\u0015import type { Logger } from '@apollo/utils.logger';\nimport { Resolvable } from '@josephg/resolvable';\nimport { DocumentNode, GraphQLFieldResolver, GraphQLFormattedError, GraphQLSchema, ParseOptions, TypedQueryDocumentNode, ValidationRule } from 'graphql';\nimport { type KeyValueCache } from '@apollo/utils.keyvaluecache';\nimport type { ApolloServerPlugin, BaseContext, GraphQLRequest, GraphQLResponse, HTTPGraphQLRequest, HTTPGraphQLResponse, LandingPage, ApolloConfig, ApolloServerOptions, DocumentStore, PersistedQueryOptions, ContextThunk, HTTPGraphQLHead } from './externalTypes/index.js';\nimport { SchemaManager } from './utils/schemaManager.js';\nimport type { WithRequired } from '@apollo/utils.withrequired';\nimport type { GatewayExecutor } from '@apollo/server-gateway-interface';\nimport type { GraphQLExperimentalIncrementalExecutionResults } from './incrementalDeliveryPolyfill.js';\nimport type { ExecuteOperationOptions, VariableValues } from './externalTypes/graphql.js';\nexport declare type SchemaDerivedData = {\n    schema: GraphQLSchema;\n    documentStore: DocumentStore | null;\n};\ndeclare type RunningServerState = {\n    schemaManager: SchemaManager;\n    landingPage: LandingPage | null;\n};\ndeclare type ServerState = {\n    phase: 'initialized';\n    schemaManager: SchemaManager;\n} | {\n    phase: 'starting';\n    barrier: Resolvable<void>;\n    schemaManager: SchemaManager;\n    startedInBackground: boolean;\n} | {\n    phase: 'failed to start';\n    error: Error;\n} | ({\n    phase: 'started';\n    drainServers: (() => Promise<void>) | null;\n    toDispose: (() => Promise<void>)[];\n    toDisposeLast: (() => Promise<void>)[];\n} & RunningServerState) | ({\n    phase: 'draining';\n    barrier: Resolvable<void>;\n} & RunningServerState) | {\n    phase: 'stopping';\n    barrier: Resolvable<void>;\n} | {\n    phase: 'stopped';\n    stopError: Error | null;\n};\nexport interface ApolloServerInternals<TContext extends BaseContext> {\n    state: ServerState;\n    gatewayExecutor: GatewayExecutor | null;\n    formatError?: (formattedError: GraphQLFormattedError, error: unknown) => GraphQLFormattedError;\n    includeStacktraceInErrorResponses: boolean;\n    persistedQueries?: WithRequired<PersistedQueryOptions, 'cache'>;\n    nodeEnv: string;\n    allowBatchedHttpRequests: boolean;\n    apolloConfig: ApolloConfig;\n    plugins: ApolloServerPlugin<TContext>[];\n    parseOptions: ParseOptions;\n    stopOnTerminationSignals: boolean | undefined;\n    csrfPreventionRequestHeaders: string[] | null;\n    rootValue?: ((parsedQuery: DocumentNode) => unknown) | unknown;\n    validationRules: Array<ValidationRule>;\n    fieldResolver?: GraphQLFieldResolver<any, TContext>;\n    __testing_incrementalExecutionResults?: GraphQLExperimentalIncrementalExecutionResults;\n}\nexport declare class ApolloServer<in out TContext extends BaseContext = BaseContext> {\n    private internals;\n    readonly cache: KeyValueCache<string>;\n    readonly logger: Logger;\n    constructor(config: ApolloServerOptions<TContext>);\n    start(): Promise<void>;\n    startInBackgroundHandlingStartupErrorsByLoggingAndFailingAllRequests(): void;\n    private _start;\n    private maybeRegisterTerminationSignalHandlers;\n    private _ensureStarted;\n    assertStarted(expressionForError: string): void;\n    private logStartupError;\n    private static constructSchema;\n    private static generateSchemaDerivedData;\n    stop(): Promise<void>;\n    private addDefaultPlugins;\n    addPlugin(plugin: ApolloServerPlugin<TContext>): void;\n    executeHTTPGraphQLRequest({ httpGraphQLRequest, context, }: {\n        httpGraphQLRequest: HTTPGraphQLRequest;\n        context: ContextThunk<TContext>;\n    }): Promise<HTTPGraphQLResponse>;\n    private errorResponse;\n    private prefersHTML;\n    executeOperation<TData = Record<string, unknown>, TVariables extends VariableValues = VariableValues>(this: ApolloServer<BaseContext>, request: Omit<GraphQLRequest<TVariables>, 'query'> & {\n        query?: string | DocumentNode | TypedQueryDocumentNode<TData, TVariables>;\n    }): Promise<GraphQLResponse<TData>>;\n    executeOperation<TData = Record<string, unknown>, TVariables extends VariableValues = VariableValues>(request: Omit<GraphQLRequest<TVariables>, 'query'> & {\n        query?: string | DocumentNode | TypedQueryDocumentNode<TData, TVariables>;\n    }, options?: ExecuteOperationOptions<TContext>): Promise<GraphQLResponse<TData>>;\n}\nexport declare function internalExecuteOperation<TContext extends BaseContext>({ server, graphQLRequest, internals, schemaDerivedData, sharedResponseHTTPGraphQLHead, }: {\n    server: ApolloServer<TContext>;\n    graphQLRequest: GraphQLRequest;\n    internals: ApolloServerInternals<TContext>;\n    schemaDerivedData: SchemaDerivedData;\n    sharedResponseHTTPGraphQLHead: HTTPGraphQLHead | null;\n}, options: ExecuteOperationOptions<TContext>): Promise<GraphQLResponse>;\nexport declare type ImplicitlyInstallablePlugin<TContext extends BaseContext> = ApolloServerPlugin<TContext> & {\n    __internal_installed_implicitly__: boolean;\n};\nexport declare function isImplicitlyInstallablePlugin<TContext extends BaseContext>(p: ApolloServerPlugin<TContext>): p is ImplicitlyInstallablePlugin<TContext>;\nexport declare const MEDIA_TYPES: {\n    APPLICATION_JSON: string;\n    APPLICATION_GRAPHQL_RESPONSE_JSON: string;\n    MULTIPART_MIXED_NO_DEFER_SPEC: string;\n    MULTIPART_MIXED_EXPERIMENTAL: string;\n    TEXT_HTML: string;\n};\nexport declare function chooseContentTypeForSingleResultResponse(head: HTTPGraphQLHead): string | null;\nexport {};\n//# sourceMappingURL=ApolloServer.d.ts.map*/dist/esm/utils/computeCoreSchemaHash.d.tszexport declare function computeCoreSchemaHash(schema: string): string;\n//# sourceMappingURL=computeCoreSchemaHash.d.ts.map*/dist/esm/plugin/usageReporting/stats.d.ts\u000eimport { type google, type IContextualizedStats, type IFieldStat, type IPathErrorStats, type IQueryLatencyStats, type IReport, type IStatsContext, type ITracesAndStats, type ITypeStat, type ReportHeader, Trace } from '@apollo/usage-reporting-protobuf';\nimport type { ReferencedFieldsByType } from '@apollo/utils.usagereporting';\nimport { DurationHistogram } from './durationHistogram.js';\nexport declare class SizeEstimator {\n    bytes: number;\n}\nexport declare class OurReport implements Required<IReport> {\n    readonly header: ReportHeader;\n    constructor(header: ReportHeader);\n    readonly tracesPerQuery: Record<string, OurTracesAndStats>;\n    endTime: google.protobuf.ITimestamp | null;\n    operationCount: number;\n    readonly sizeEstimator: SizeEstimator;\n    ensureCountsAreIntegers(): void;\n    addTrace({ statsReportKey, trace, asTrace, referencedFieldsByType, maxTraceBytes, }: {\n        statsReportKey: string;\n        trace: Trace;\n        asTrace: boolean;\n        referencedFieldsByType: ReferencedFieldsByType;\n        maxTraceBytes?: number;\n    }): void;\n    private getTracesAndStats;\n}\ndeclare class OurTracesAndStats implements Required<ITracesAndStats> {\n    readonly referencedFieldsByType: ReferencedFieldsByType;\n    constructor(referencedFieldsByType: ReferencedFieldsByType);\n    readonly trace: Uint8Array[];\n    readonly statsWithContext: StatsByContext;\n    readonly internalTracesContributingToStats: Uint8Array[];\n    ensureCountsAreIntegers(): void;\n}\ndeclare class StatsByContext {\n    readonly map: {\n        [k: string]: OurContextualizedStats;\n    };\n    toArray(): IContextualizedStats[];\n    ensureCountsAreIntegers(): void;\n    addTrace(trace: Trace, sizeEstimator: SizeEstimator): void;\n    private getContextualizedStats;\n}\nexport declare class OurContextualizedStats implements Required<IContextualizedStats> {\n    readonly context: IStatsContext;\n    queryLatencyStats: OurQueryLatencyStats;\n    perTypeStat: {\n        [k: string]: OurTypeStat;\n    };\n    constructor(context: IStatsContext);\n    ensureCountsAreIntegers(): void;\n    addTrace(trace: Trace, sizeEstimator: SizeEstimator): void;\n    getTypeStat(parentType: string, sizeEstimator: SizeEstimator): OurTypeStat;\n}\ndeclare class OurQueryLatencyStats implements Required<IQueryLatencyStats> {\n    latencyCount: DurationHistogram;\n    requestCount: number;\n    requestsWithoutFieldInstrumentation: number;\n    cacheHits: number;\n    persistedQueryHits: number;\n    persistedQueryMisses: number;\n    cacheLatencyCount: DurationHistogram;\n    rootErrorStats: OurPathErrorStats;\n    requestsWithErrorsCount: number;\n    publicCacheTtlCount: DurationHistogram;\n    privateCacheTtlCount: DurationHistogram;\n    registeredOperationCount: number;\n    forbiddenOperationCount: number;\n}\ndeclare class OurPathErrorStats implements Required<IPathErrorStats> {\n    children: {\n        [k: string]: OurPathErrorStats;\n    };\n    errorsCount: number;\n    requestsWithErrorsCount: number;\n    getChild(subPath: string, sizeEstimator: SizeEstimator): OurPathErrorStats;\n}\ndeclare class OurTypeStat implements Required<ITypeStat> {\n    perFieldStat: {\n        [k: string]: OurFieldStat;\n    };\n    getFieldStat(fieldName: string, returnType: string, sizeEstimator: SizeEstimator): OurFieldStat;\n    ensureCountsAreIntegers(): void;\n}\ndeclare class OurFieldStat implements Required<IFieldStat> {\n    readonly returnType: string;\n    errorsCount: number;\n    observedExecutionCount: number;\n    estimatedExecutionCount: number;\n    requestsWithErrorsCount: number;\n    latencyCount: DurationHistogram;\n    constructor(returnType: string);\n    ensureCountsAreIntegers(): void;\n}\nexport {};\n//# sourceMappingURL=stats.d.ts.map\"/dist/esm/determineApolloConfig.js\u0005import { createHash } from '@apollo/utils.createhash';\nexport function determineApolloConfig(input) {\n    const apolloConfig = {};\n    const { APOLLO_KEY, APOLLO_GRAPH_REF, APOLLO_GRAPH_ID, APOLLO_GRAPH_VARIANT, } = process.env;\n    if (input?.key) {\n        apolloConfig.key = input.key;\n    }\n    else if (APOLLO_KEY) {\n        apolloConfig.key = APOLLO_KEY;\n    }\n    if (apolloConfig.key) {\n        apolloConfig.keyHash = createHash('sha512')\n            .update(apolloConfig.key)\n            .digest('hex');\n    }\n    if (input?.graphRef) {\n        apolloConfig.graphRef = input.graphRef;\n    }\n    else if (APOLLO_GRAPH_REF) {\n        apolloConfig.graphRef = APOLLO_GRAPH_REF;\n    }\n    const graphId = input?.graphId ?? APOLLO_GRAPH_ID;\n    const graphVariant = input?.graphVariant ?? APOLLO_GRAPH_VARIANT;\n    if (apolloConfig.graphRef) {\n        if (graphId) {\n            throw new Error('Cannot specify both graph ref and graph ID. Please use ' +\n                '`apollo.graphRef` or `APOLLO_GRAPH_REF` without also setting the graph ID.');\n        }\n        if (graphVariant) {\n            throw new Error('Cannot specify both graph ref and graph variant. Please use ' +\n                '`apollo.graphRef` or `APOLLO_GRAPH_REF` without also setting the graph variant.');\n        }\n    }\n    else if (graphId) {\n        apolloConfig.graphRef = graphVariant\n            ? `${graphId}@${graphVariant}`\n            : graphId;\n    }\n    return apolloConfig;\n}\n//# sourceMappingURL=determineApolloConfig.js.map3/dist/cjs/plugin/usageReporting/traceDetails.js.map\u0007{\"version\":3,\"file\":\"traceDetails.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../../src/plugin/usageReporting/traceDetails.ts\"],\"names\":[],\"mappings\":\";;;AAAA,+EAAyD;AAUzD,SAAgB,gBAAgB,CAC9B,SAA8B,EAC9B,kBAAyC,EACzC,eAAwB;IAExB,MAAM,OAAO,GAAG,IAAI,gCAAK,CAAC,OAAO,EAAE,CAAC;IACpC,MAAM,iBAAiB,GAAG,CAAC,GAAG,EAAE;QAC9B,IAAI,kBAAkB,IAAI,WAAW,IAAI,kBAAkB,EAAE;YAC3D,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC5C,IAAI;gBAEF,MAAM,iBAAiB,GAAG,kBAAkB,CAAC,SAAS,CAAC;oBACrD,SAAS,EAAE,SAAS;oBACpB,eAAe,EAAE,eAAe;iBACjC,CAAC,CAAC;gBACH,OAAO,sBAAsB,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC;aAChE;YAAC,OAAO,CAAC,EAAE;gBAGV,OAAO,iCAAiC,CAAC,YAAY,CAAC,CAAC;aACxD;SACF;aAAM;YACL,OAAO,SAAS,CAAC;SAClB;IACH,CAAC,CAAC,EAAE,CAAC;IAOL,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QAC9C,IACE,CAAC,kBAAkB;YACnB,CAAC,MAAM,IAAI,kBAAkB,IAAI,kBAAkB,CAAC,IAAI,CAAC;YACzD,CAAC,KAAK,IAAI,kBAAkB,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC;YACxD,CAAC,aAAa,IAAI,kBAAkB;gBAIlC,kBAAkB,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAChD,CAAC,WAAW,IAAI,kBAAkB;gBAChC,CAAC,kBAAkB,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAC/C;YAIA,OAAO,CAAC,aAAc,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;SACnC;aAAM;YACL,IAAI;gBACF,OAAO,CAAC,aAAc,CAAC,IAAI,CAAC;oBAC1B,OAAO,iBAAiB,CAAC,IAAI,CAAC,KAAK,WAAW;wBAC5C,CAAC,CAAC,EAAE;wBACJ,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;aAC/C;YAAC,OAAO,CAAC,EAAE;gBACV,OAAO,CAAC,aAAc,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAC3C,mCAAmC,CACpC,CAAC;aACH;SACF;IACH,CAAC,CAAC,CAAC;IACH,OAAO,OAAO,CAAC;AACjB,CAAC;AA9DD,4CA8DC;AAED,SAAS,iCAAiC,CACxC,aAAuB;IAEvB,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC9C,aAAa,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QAC7B,iBAAiB,CAAC,IAAI,CAAC,GAAG,4BAA4B,CAAC;IACzD,CAAC,CAAC,CAAC;IACH,OAAO,iBAAiB,CAAC;AAC3B,CAAC;AAID,SAAS,sBAAsB,CAC7B,YAA2B,EAC3B,iBAAsC;IAEtC,MAAM,gBAAgB,GAAwB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAClE,YAAY,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QAC5B,gBAAgB,CAAC,IAAI,CAAC,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IACH,OAAO,gBAAgB,CAAC;AAC1B,CAAC\"}/src/externalTypes/http.ts\u0006+/**\n * This file exports types related to GraphQL execution with respect to HTTP.\n * These types define the inputs and outputs for `executeHTTPGraphQLRequest` and\n * are most interesting for integration authors.\n */\nimport type { HeaderMap } from '../utils/HeaderMap.js';\n\nexport interface HTTPGraphQLRequest {\n  // capitalized (GET, POST, etc)\n  method: string;\n  // lowercase header name, multiple headers joined with ', ' like Headers.get\n  // does\n  headers: HeaderMap;\n  /**\n   * The part of the URL after the question mark (not including the #fragment),\n   * or the empty string if there is no question mark. Including the question\n   * mark in this string is allowed but not required. Do not %-decode this\n   * string. You can get this from a standard Node request with\n   * `url.parse(request.url).search ?? ''`.\n   */\n  search: string;\n  // read by your body-parser or whatever. we poke at it to make it into\n  // the right real type.\n  body: unknown;\n}\n\nexport interface HTTPGraphQLHead {\n  status?: number;\n  headers: HeaderMap;\n}\n\n/**\n * Here we use `string`s for the response body since the response can be either\n * HTML (for the landing page - see `executeHTTPGraphQLRequest`) or JSON (for a\n * GraphQL response). Based on `headers` and `method` on the request, we know\n * how to correctly interpret the response body.\n */\nexport type HTTPGraphQLResponseBody =\n  | { kind: 'complete'; string: string }\n  | { kind: 'chunked'; asyncIterator: AsyncIterableIterator<string> };\n\nexport type HTTPGraphQLResponse = HTTPGraphQLHead & {\n  body: HTTPGraphQLResponseBody;\n};\n/src/externalTypes/plugins.ts#/**\n * The types defined in this file are useful to plugin authors. In particular,\n * defining a plugin as an `ApolloServerPlugin` will provide typings for all of\n * the hooks that are available to a plugin.\n */\nimport type { KeyValueCache } from '@apollo/utils.keyvaluecache';\nimport type { Logger } from '@apollo/utils.logger';\nimport type { GraphQLError, GraphQLResolveInfo, GraphQLSchema } from 'graphql';\nimport type { ApolloConfig } from './constructor.js';\nimport type { BaseContext } from './context.js';\nimport type { GraphQLResponse } from './graphql.js';\nimport type { GraphQLExperimentalFormattedSubsequentIncrementalExecutionResult } from './incrementalDeliveryPolyfill.js';\nimport type {\n  GraphQLRequestContext,\n  GraphQLRequestContextDidEncounterErrors,\n  GraphQLRequestContextDidEncounterSubsequentErrors,\n  GraphQLRequestContextDidResolveOperation,\n  GraphQLRequestContextDidResolveSource,\n  GraphQLRequestContextExecutionDidStart,\n  GraphQLRequestContextParsingDidStart,\n  GraphQLRequestContextResponseForOperation,\n  GraphQLRequestContextValidationDidStart,\n  GraphQLRequestContextWillSendResponse,\n  GraphQLRequestContextWillSendSubsequentPayload,\n} from './requestPipeline.js';\n\nexport interface GraphQLServerContext {\n  readonly logger: Logger;\n  readonly cache: KeyValueCache<string>;\n\n  schema: GraphQLSchema;\n  apollo: ApolloConfig;\n  startedInBackground: boolean;\n}\n\nexport interface GraphQLSchemaContext {\n  apiSchema: GraphQLSchema;\n  coreSupergraphSdl?: string;\n}\n\nexport interface ApolloServerPlugin<\n  in TContext extends BaseContext = BaseContext,\n> {\n  // Called once on server startup, after the schema has been loaded.\n  serverWillStart?(\n    service: GraphQLServerContext,\n  ): Promise<GraphQLServerListener | void>;\n\n  // Called once per request, before parsing or validation of the request has\n  // occurred. This hook can return an object of more fine-grained hooks (see\n  // `GraphQLRequestListener`) which pertain to the lifecycle of the request.\n  requestDidStart?(\n    requestContext: GraphQLRequestContext<TContext>,\n  ): Promise<GraphQLRequestListener<TContext> | void>;\n\n  /**\n   * \"Unexpected\" errors do not include more common errors like validation,\n   * parsing, or graphql execution errors. Rather, an unexpected error might\n   * occur when a plugin hook throws unexpectedly or a bug in Apollo Server is\n   * encountered. Notably, when errors like this occur, the error is masked to\n   * the client.\n   */\n  unexpectedErrorProcessingRequest?({\n    requestContext,\n    error,\n  }: {\n    requestContext: GraphQLRequestContext<TContext>;\n    error: Error;\n  }): Promise<void>;\n  // Called specifically when the user-provided `context` function throws an\n  // error.\n  contextCreationDidFail?({ error }: { error: Error }): Promise<void>;\n  /**\n   * This hook is called any time a \"Bad Request\" error is thrown during request\n   * execution. This includes CSRF prevention and malformed requests (e.g.\n   * incorrect headers, invalid JSON body, or invalid search params for GET),\n   * but does not include malformed GraphQL.\n   */\n  invalidRequestWasReceived?({ error }: { error: Error }): Promise<void>;\n  // Called on startup fail. This can occur if the schema fails to load or if a\n  // `serverWillStart` or `renderLandingPage` hook throws.\n  startupDidFail?({ error }: { error: Error }): Promise<void>;\n}\n\nexport interface GraphQLServerListener {\n  // Called on server startup after a successful schema load and on successful\n  // schema updates when running in `gateway` mode.\n  schemaDidLoadOrUpdate?(schemaContext: GraphQLSchemaContext): void;\n\n  // When your server is stopped (by calling `stop()` or via the\n  // `SIGINT`/`SIGTERM` handlers), Apollo Server first awaits all `drainServer`\n  // hooks in parallel. GraphQL operations can still execute while `drainServer`\n  // is in progress. A typical use is to stop listening for new connections and\n  // wait until all current connections are idle. The built-in\n  // ApolloServerPluginDrainHttpServer implements this method.\n  drainServer?(): Promise<void>;\n\n  // When your server is stopped (by calling `stop()` or via the\n  // `SIGINT`/`SIGTERM` handlers) then (after the `drainServer` phase finishes)\n  // Apollo Server transitions into a state where no new operations will run and\n  // then awaits all `drainServer` hooks in parallel. A typical use is to flush\n  // outstanding observability data.\n  serverWillStop?(): Promise<void>;\n\n  // At most one plugin's serverWillStart may return a GraphQLServerListener\n  // with this method. If one does, it is called once on server startup and the\n  // page it returns is served to clients with `accept: text/html` headers. This\n  // is an intentionally simple API; if you want to do something fancy to serve\n  // a landing page, you probably should just define a handler in your web\n  // framework.\n  renderLandingPage?(): Promise<LandingPage>;\n}\n\n// The page served to clients with `accept: text/html` headers.\nexport interface LandingPage {\n  html: string;\n}\n\nexport type GraphQLRequestListenerParsingDidEnd = (\n  err?: Error,\n) => Promise<void>;\nexport type GraphQLRequestListenerValidationDidEnd = (\n  err?: ReadonlyArray<Error>,\n) => Promise<void>;\nexport type GraphQLRequestListenerExecutionDidEnd = (\n  err?: Error,\n) => Promise<void>;\nexport type GraphQLRequestListenerDidResolveField = (\n  error: Error | null,\n  result?: any,\n) => void;\n\nexport interface GraphQLRequestListener<TContext extends BaseContext> {\n  didResolveSource?(\n    requestContext: GraphQLRequestContextDidResolveSource<TContext>,\n  ): Promise<void>;\n\n  parsingDidStart?(\n    requestContext: GraphQLRequestContextParsingDidStart<TContext>,\n  ): Promise<GraphQLRequestListenerParsingDidEnd | void>;\n\n  validationDidStart?(\n    requestContext: GraphQLRequestContextValidationDidStart<TContext>,\n  ): Promise<GraphQLRequestListenerValidationDidEnd | void>;\n\n  didResolveOperation?(\n    requestContext: GraphQLRequestContextDidResolveOperation<TContext>,\n  ): Promise<void>;\n\n  didEncounterErrors?(\n    requestContext: GraphQLRequestContextDidEncounterErrors<TContext>,\n  ): Promise<void>;\n\n  // If this hook is defined, it is invoked immediately before GraphQL execution\n  // would take place. If its return value resolves to a non-null\n  // GraphQLResponse, that result is used instead of executing the query.\n  // Hooks from different plugins are invoked in series and the first non-null\n  // response is used.\n  responseForOperation?(\n    requestContext: GraphQLRequestContextResponseForOperation<TContext>,\n  ): Promise<GraphQLResponse | null>;\n\n  // Note that in the case of incremental delivery, the end hook gets called\n  // when the initial response is ready to go: further execution can still occur.\n  executionDidStart?(\n    requestContext: GraphQLRequestContextExecutionDidStart<TContext>,\n  ): Promise<GraphQLRequestExecutionListener<TContext> | void>;\n\n  // Note that in the case of incremental delivery, this is called when the\n  // initial response is ready to go.\n  willSendResponse?(\n    requestContext: GraphQLRequestContextWillSendResponse<TContext>,\n  ): Promise<void>;\n\n  didEncounterSubsequentErrors?(\n    requestContext: GraphQLRequestContextDidEncounterSubsequentErrors<TContext>,\n    errors: ReadonlyArray<GraphQLError>,\n  ): Promise<void>;\n\n  // You can use hasNext to tell if this is the end or not.\n  willSendSubsequentPayload?(\n    requestContext: GraphQLRequestContextWillSendSubsequentPayload<TContext>,\n    payload: GraphQLExperimentalFormattedSubsequentIncrementalExecutionResult,\n  ): Promise<void>;\n}\n\n/**\n * This is an object form of the parameters received by typical\n * `graphql-js` resolvers.  The function type is `GraphQLFieldResolver`\n * and normally uses positional parameters.  In order to facilitate better\n * ergonomics in the Apollo Server plugin API, these have been converted to\n * named properties on the object using their names from the upstream\n * `GraphQLFieldResolver` type signature.  Ergonomic wins, in this case,\n * include not needing to have three unused variables in scope just because\n * there was a need to access the `info` property in a wrapped plugin.\n */\nexport type GraphQLFieldResolverParams<\n  TSource,\n  TContext,\n  TArgs = { [argName: string]: any },\n> = {\n  source: TSource;\n  args: TArgs;\n  contextValue: TContext;\n  info: GraphQLResolveInfo;\n};\n\nexport interface GraphQLRequestExecutionListener<TContext extends BaseContext> {\n  executionDidEnd?: GraphQLRequestListenerExecutionDidEnd;\n  // willResolveField is not async because we've observed that it already has\n  // quite a performance impact on execution even without involving the Promise\n  // queue. If we can come up with ways to alleviate the burden (eg having an\n  // uninstrumented schema and an instrumented schema and only using the\n  // instrumented schema for a subset of operations that need detailed\n  // performance traces) we could be happier supporting async willResolveField.\n  willResolveField?(\n    fieldResolverParams: GraphQLFieldResolverParams<any, TContext>,\n  ): GraphQLRequestListenerDidResolveField | void;\n}\n-/dist/esm/plugin/drainHttpServer/index.js.map\u0001{\"version\":3,\"file\":\"index.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../../src/plugin/drainHttpServer/index.ts\"],\"names\":[],\"mappings\":\"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAuBzC,MAAM,UAAU,iCAAiC,CAC/C,OAAiD;IAEjD,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAChD,OAAO;QACL,KAAK,CAAC,eAAe;YACnB,OAAO;gBACL,KAAK,CAAC,WAAW;oBACf,MAAM,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,qBAAqB,IAAI,KAAM,CAAC,CAAC;gBAC9D,CAAC;aACF,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC\"}9/dist/esm/plugin/landingPage/default/getEmbeddedHTML.d.ts\u0001import type { ApolloServerPluginEmbeddedLandingPageProductionDefaultOptions, LandingPageConfig } from './types';\nexport declare const getEmbeddedExplorerHTML: (version: string, config: ApolloServerPluginEmbeddedLandingPageProductionDefaultOptions) => string;\nexport declare const getEmbeddedSandboxHTML: (version: string, config: LandingPageConfig) => string;\n//# sourceMappingURL=getEmbeddedHTML.d.ts.map-/dist/esm/plugin/schemaReporting/index.js.map\u000b{\"version\":3,\"file\":\"index.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../../src/plugin/schemaReporting/index.ts\"],\"names\":[],\"mappings\":\"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\"}/dist/cjs/utils/invokeHooks.js\u0005>\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.invokeHooksUntilDefinedAndNonNull = exports.invokeSyncDidStartHook = exports.invokeDidStartHook = void 0;\nconst isDefined_js_1 = require(\"./isDefined.js\");\nasync function invokeDidStartHook(targets, hook) {\n    const didEndHooks = (await Promise.all(targets.map((target) => hook(target)))).filter(isDefined_js_1.isDefined);\n    didEndHooks.reverse();\n    return async (...args) => {\n        for (const didEndHook of didEndHooks) {\n            didEndHook(...args);\n        }\n    };\n}\nexports.invokeDidStartHook = invokeDidStartHook;\nfunction invokeSyncDidStartHook(targets, hook) {\n    const didEndHooks = targets\n        .map((target) => hook(target))\n        .filter(isDefined_js_1.isDefined);\n    didEndHooks.reverse();\n    return (...args) => {\n        for (const didEndHook of didEndHooks) {\n            didEndHook(...args);\n        }\n    };\n}\nexports.invokeSyncDidStartHook = invokeSyncDidStartHook;\nasync function invokeHooksUntilDefinedAndNonNull(targets, hook) {\n    for (const target of targets) {\n        const value = await hook(target);\n        if (value != null) {\n            return value;\n        }\n    }\n    return null;\n}\nexports.invokeHooksUntilDefinedAndNonNull = invokeHooksUntilDefinedAndNonNull;\n//# sourceMappingURL=invokeHooks.js.map"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QGJhYmVsL2NvZGUtZnJhbWVANy4xOC42",
    "content": "/README.md\u0001Q# @babel/code-frame\n\n> Generate errors that contain a code frame that point to source locations.\n\nSee our website [@babel/code-frame](https://babeljs.io/docs/en/babel-code-frame) for more information.\n\n## Install\n\nUsing npm:\n\n```sh\nnpm install --save-dev @babel/code-frame\n```\n\nor using yarn:\n\n```sh\nyarn add @babel/code-frame --dev\n```\n/LICENSE\u0004RMIT License\n\nCopyright (c) 2014-present Sebastian McKenzie and other contributors\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n/package.json\u00037{\n  \"name\": \"@babel/code-frame\",\n  \"version\": \"7.18.6\",\n  \"description\": \"Generate errors that contain a code frame that point to source locations.\",\n  \"author\": \"The Babel Team (https://babel.dev/team)\",\n  \"homepage\": \"https://babel.dev/docs/en/next/babel-code-frame\",\n  \"bugs\": \"https://github.com/babel/babel/issues?utf8=%E2%9C%93&q=is%3Aissue+is%3Aopen\",\n  \"license\": \"MIT\",\n  \"publishConfig\": {\n    \"access\": \"public\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/babel/babel.git\",\n    \"directory\": \"packages/babel-code-frame\"\n  },\n  \"main\": \"./lib/index.js\",\n  \"dependencies\": {\n    \"@babel/highlight\": \"^7.18.6\"\n  },\n  \"devDependencies\": {\n    \"@types/chalk\": \"^2.0.0\",\n    \"chalk\": \"^2.0.0\",\n    \"strip-ansi\": \"^4.0.0\"\n  },\n  \"engines\": {\n    \"node\": \">=6.9.0\"\n  },\n  \"type\": \"commonjs\"\n}/lib/index.js\u0012i\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.codeFrameColumns = codeFrameColumns;\nexports.default = _default;\n\nvar _highlight = require(\"@babel/highlight\");\n\nlet deprecationWarningShown = false;\n\nfunction getDefs(chalk) {\n  return {\n    gutter: chalk.grey,\n    marker: chalk.red.bold,\n    message: chalk.red.bold\n  };\n}\n\nconst NEWLINE = /\\r\\n|[\\n\\r\\u2028\\u2029]/;\n\nfunction getMarkerLines(loc, source, opts) {\n  const startLoc = Object.assign({\n    column: 0,\n    line: -1\n  }, loc.start);\n  const endLoc = Object.assign({}, startLoc, loc.end);\n  const {\n    linesAbove = 2,\n    linesBelow = 3\n  } = opts || {};\n  const startLine = startLoc.line;\n  const startColumn = startLoc.column;\n  const endLine = endLoc.line;\n  const endColumn = endLoc.column;\n  let start = Math.max(startLine - (linesAbove + 1), 0);\n  let end = Math.min(source.length, endLine + linesBelow);\n\n  if (startLine === -1) {\n    start = 0;\n  }\n\n  if (endLine === -1) {\n    end = source.length;\n  }\n\n  const lineDiff = endLine - startLine;\n  const markerLines = {};\n\n  if (lineDiff) {\n    for (let i = 0; i <= lineDiff; i++) {\n      const lineNumber = i + startLine;\n\n      if (!startColumn) {\n        markerLines[lineNumber] = true;\n      } else if (i === 0) {\n        const sourceLength = source[lineNumber - 1].length;\n        markerLines[lineNumber] = [startColumn, sourceLength - startColumn + 1];\n      } else if (i === lineDiff) {\n        markerLines[lineNumber] = [0, endColumn];\n      } else {\n        const sourceLength = source[lineNumber - i].length;\n        markerLines[lineNumber] = [0, sourceLength];\n      }\n    }\n  } else {\n    if (startColumn === endColumn) {\n      if (startColumn) {\n        markerLines[startLine] = [startColumn, 0];\n      } else {\n        markerLines[startLine] = true;\n      }\n    } else {\n      markerLines[startLine] = [startColumn, endColumn - startColumn];\n    }\n  }\n\n  return {\n    start,\n    end,\n    markerLines\n  };\n}\n\nfunction codeFrameColumns(rawLines, loc, opts = {}) {\n  const highlighted = (opts.highlightCode || opts.forceColor) && (0, _highlight.shouldHighlight)(opts);\n  const chalk = (0, _highlight.getChalk)(opts);\n  const defs = getDefs(chalk);\n\n  const maybeHighlight = (chalkFn, string) => {\n    return highlighted ? chalkFn(string) : string;\n  };\n\n  const lines = rawLines.split(NEWLINE);\n  const {\n    start,\n    end,\n    markerLines\n  } = getMarkerLines(loc, lines, opts);\n  const hasColumns = loc.start && typeof loc.start.column === \"number\";\n  const numberMaxWidth = String(end).length;\n  const highlightedLines = highlighted ? (0, _highlight.default)(rawLines, opts) : rawLines;\n  let frame = highlightedLines.split(NEWLINE, end).slice(start, end).map((line, index) => {\n    const number = start + 1 + index;\n    const paddedNumber = ` ${number}`.slice(-numberMaxWidth);\n    const gutter = ` ${paddedNumber} |`;\n    const hasMarker = markerLines[number];\n    const lastMarkerLine = !markerLines[number + 1];\n\n    if (hasMarker) {\n      let markerLine = \"\";\n\n      if (Array.isArray(hasMarker)) {\n        const markerSpacing = line.slice(0, Math.max(hasMarker[0] - 1, 0)).replace(/[^\\t]/g, \" \");\n        const numberOfMarkers = hasMarker[1] || 1;\n        markerLine = [\"\\n \", maybeHighlight(defs.gutter, gutter.replace(/\\d/g, \" \")), \" \", markerSpacing, maybeHighlight(defs.marker, \"^\").repeat(numberOfMarkers)].join(\"\");\n\n        if (lastMarkerLine && opts.message) {\n          markerLine += \" \" + maybeHighlight(defs.message, opts.message);\n        }\n      }\n\n      return [maybeHighlight(defs.marker, \">\"), maybeHighlight(defs.gutter, gutter), line.length > 0 ? ` ${line}` : \"\", markerLine].join(\"\");\n    } else {\n      return ` ${maybeHighlight(defs.gutter, gutter)}${line.length > 0 ? ` ${line}` : \"\"}`;\n    }\n  }).join(\"\\n\");\n\n  if (opts.message && !hasColumns) {\n    frame = `${\" \".repeat(numberMaxWidth + 1)}${opts.message}\\n${frame}`;\n  }\n\n  if (highlighted) {\n    return chalk.reset(frame);\n  } else {\n    return frame;\n  }\n}\n\nfunction _default(rawLines, lineNumber, colNumber, opts = {}) {\n  if (!deprecationWarningShown) {\n    deprecationWarningShown = true;\n    const message = \"Passing lineNumber and colNumber is deprecated to @babel/code-frame. Please use `codeFrameColumns`.\";\n\n    if (process.emitWarning) {\n      process.emitWarning(message, \"DeprecationWarning\");\n    } else {\n      const deprecationError = new Error(message);\n      deprecationError.name = \"DeprecationWarning\";\n      console.warn(new Error(message));\n    }\n  }\n\n  colNumber = Math.max(colNumber, 0);\n  const location = {\n    start: {\n      column: colNumber,\n      line: lineNumber\n    }\n  };\n  return codeFrameColumns(rawLines, location, opts);\n}"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QGJhYmVsL2NvbXBhdC1kYXRhQDcuMjEuMA==",
    "content": "/data/corejs2-built-ins.jsonŏ+{\n  \"es6.array.copy-within\": {\n    \"chrome\": \"45\",\n    \"opera\": \"32\",\n    \"edge\": \"12\",\n    \"firefox\": \"32\",\n    \"safari\": \"9\",\n    \"node\": \"4\",\n    \"deno\": \"1\",\n    \"ios\": \"9\",\n    \"samsung\": \"5\",\n    \"rhino\": \"1.7.13\",\n    \"electron\": \"0.31\"\n  },\n  \"es6.array.every\": {\n    \"chrome\": \"5\",\n    \"opera\": \"10.10\",\n    \"edge\": \"12\",\n    \"firefox\": \"2\",\n    \"safari\": \"3.1\",\n    \"node\": \"0.4\",\n    \"deno\": \"1\",\n    \"ie\": \"9\",\n    \"android\": \"4\",\n    \"ios\": \"6\",\n    \"phantom\": \"1.9\",\n    \"samsung\": \"1\",\n    \"rhino\": \"1.7.13\",\n    \"electron\": \"0.20\"\n  },\n  \"es6.array.fill\": {\n    \"chrome\": \"45\",\n    \"opera\": \"32\",\n    \"edge\": \"12\",\n    \"firefox\": \"31\",\n    \"safari\": \"7.1\",\n    \"node\": \"4\",\n    \"deno\": \"1\",\n    \"ios\": \"8\",\n    \"samsung\": \"5\",\n    \"rhino\": \"1.7.13\",\n    \"electron\": \"0.31\"\n  },\n  \"es6.array.filter\": {\n    \"chrome\": \"51\",\n    \"opera\": \"38\",\n    \"edge\": \"13\",\n    \"firefox\": \"48\",\n    \"safari\": \"10\",\n    \"node\": \"6.5\",\n    \"deno\": \"1\",\n    \"ios\": \"10\",\n    \"samsung\": \"5\",\n    \"electron\": \"1.2\"\n  },\n  \"es6.array.find\": {\n    \"chrome\": \"45\",\n    \"opera\": \"32\",\n    \"edge\": \"12\",\n    \"firefox\": \"25\",\n    \"safari\": \"7.1\",\n    \"node\": \"4\",\n    \"deno\": \"1\",\n    \"ios\": \"8\",\n    \"samsung\": \"5\",\n    \"rhino\": \"1.7.13\",\n    \"electron\": \"0.31\"\n  },\n  \"es6.array.find-index\": {\n    \"chrome\": \"45\",\n    \"opera\": \"32\",\n    \"edge\": \"12\",\n    \"firefox\": \"25\",\n    \"safari\": \"7.1\",\n    \"node\": \"4\",\n    \"deno\": \"1\",\n    \"ios\": \"8\",\n    \"samsung\": \"5\",\n    \"rhino\": \"1.7.13\",\n    \"electron\": \"0.31\"\n  },\n  \"es7.array.flat-map\": {\n    \"chrome\": \"69\",\n    \"opera\": \"56\",\n    \"edge\": \"79\",\n    \"firefox\": \"62\",\n    \"safari\": \"12\",\n    \"node\": \"11\",\n    \"deno\": \"1\",\n    \"ios\": \"12\",\n    \"samsung\": \"10\",\n    \"electron\": \"4.0\"\n  },\n  \"es6.array.for-each\": {\n    \"chrome\": \"5\",\n    \"opera\": \"10.10\",\n    \"edge\": \"12\",\n    \"firefox\": \"2\",\n    \"safari\": \"3.1\",\n    \"node\": \"0.4\",\n    \"deno\": \"1\",\n    \"ie\": \"9\",\n    \"android\": \"4\",\n    \"ios\": \"6\",\n    \"phantom\": \"1.9\",\n    \"samsung\": \"1\",\n    \"rhino\": \"1.7.13\",\n    \"electron\": \"0.20\"\n  },\n  \"es6.array.from\": {\n    \"chrome\": \"51\",\n    \"opera\": \"38\",\n    \"edge\": \"15\",\n    \"firefox\": \"36\",\n    \"safari\": \"10\",\n    \"node\": \"6.5\",\n    \"deno\": \"1\",\n    \"ios\": \"10\",\n    \"samsung\": \"5\",\n    \"electron\": \"1.2\"\n  },\n  \"es7.array.includes\": {\n    \"chrome\": \"47\",\n    \"opera\": \"34\",\n    \"edge\": \"14\",\n    \"firefox\": \"102\",\n    \"safari\": \"10\",\n    \"node\": \"6\",\n    \"deno\": \"1\",\n    \"ios\": \"10\",\n    \"samsung\": \"5\",\n    \"electron\": \"0.36\"\n  },\n  \"es6.array.index-of\": {\n    \"chrome\": \"5\",\n    \"opera\": \"10.10\",\n    \"edge\": \"12\",\n    \"firefox\": \"2\",\n    \"safari\": \"3.1\",\n    \"node\": \"0.4\",\n    \"deno\": \"1\",\n    \"ie\": \"9\",\n    \"android\": \"4\",\n    \"ios\": \"6\",\n    \"phantom\": \"1.9\",\n    \"samsung\": \"1\",\n    \"rhino\": \"1.7.13\",\n    \"electron\": \"0.20\"\n  },\n  \"es6.array.is-array\": {\n    \"chrome\": \"5\",\n    \"opera\": \"10.50\",\n    \"edge\": \"12\",\n    \"firefox\": \"4\",\n    \"safari\": \"4\",\n    \"node\": \"0.4\",\n    \"deno\": \"1\",\n    \"ie\": \"9\",\n    \"android\": \"4\",\n    \"ios\": \"6\",\n    \"phantom\": \"1.9\",\n    \"samsung\": \"1\",\n    \"rhino\": \"1.7.13\",\n    \"electron\": \"0.20\"\n  },\n  \"es6.array.iterator\": {\n    \"chrome\": \"66\",\n    \"opera\": \"53\",\n    \"edge\": \"12\",\n    \"firefox\": \"60\",\n    \"safari\": \"9\",\n    \"node\": \"10\",\n    \"deno\": \"1\",\n    \"ios\": \"9\",\n    \"samsung\": \"9\",\n    \"rhino\": \"1.7.13\",\n    \"electron\": \"3.0\"\n  },\n  \"es6.array.last-index-of\": {\n    \"chrome\": \"5\",\n    \"opera\": \"10.10\",\n    \"edge\": \"12\",\n    \"firefox\": \"2\",\n    \"safari\": \"3.1\",\n    \"node\": \"0.4\",\n    \"deno\": \"1\",\n    \"ie\": \"9\",\n    \"android\": \"4\",\n    \"ios\": \"6\",\n    \"phantom\": \"1.9\",\n    \"samsung\": \"1\",\n    \"rhino\": \"1.7.13\",\n    \"electron\": \"0.20\"\n  },\n  \"es6.array.map\": {\n    \"chrome\": \"51\",\n    \"opera\": \"38\",\n    \"edge\": \"13\",\n    \"firefox\": \"48\",\n    \"safari\": \"10\",\n    \"node\": \"6.5\",\n    \"deno\": \"1\",\n    \"ios\": \"10\",\n    \"samsung\": \"5\",\n    \"electron\": \"1.2\"\n  },\n  \"es6.array.of\": {\n    \"chrome\": \"45\",\n    \"opera\": \"32\",\n    \"edge\": \"12\",\n    \"firefox\": \"25\",\n    \"safari\": \"9\",\n    \"node\": \"4\",\n    \"deno\": \"1\",\n    \"ios\": \"9\",\n    \"samsung\": \"5\",\n    \"rhino\": \"1.7.13\",\n    \"electron\": \"0.31\"\n  },\n  \"es6.array.reduce\": {\n    \"chrome\": \"5\",\n    \"opera\": \"10.50\",\n    \"edge\": \"12\",\n    \"firefox\": \"3\",\n    \"safari\": \"4\",\n    \"node\": \"0.4\",\n    \"deno\": \"1\",\n    \"ie\": \"9\",\n    \"android\": \"4\",\n    \"ios\": \"6\",\n    \"phantom\": \"1.9\",\n    \"samsung\": \"1\",\n    \"rhino\": \"1.7.13\",\n    \"electron\": \"0.20\"\n  },\n  \"es6.array.reduce-right\": {\n    \"chrome\": \"5\",\n    \"opera\": \"10.50\",\n    \"edge\": \"12\",\n    \"firefox\": \"3\",\n    \"safari\": \"4\",\n    \"node\": \"0.4\",\n    \"deno\": \"1\",\n    \"ie\": \"9\",\n    \"android\": \"4\",\n    \"ios\": \"6\",\n    \"phantom\": \"1.9\",\n    \"samsung\": \"1\",\n    \"rhino\": \"1.7.13\",\n    \"electron\": \"0.20\"\n  },\n  \"es6.array.slice\": {\n    \"chrome\": \"51\",\n    \"opera\": \"38\",\n    \"edge\": \"13\",\n    \"firefox\": \"48\",\n    \"safari\": \"10\",\n    \"node\": \"6.5\",\n    \"deno\": \"1\",\n    \"ios\": \"10\",\n    \"samsung\": \"5\",\n    \"electron\": \"1.2\"\n  },\n  \"es6.array.some\": {\n    \"chrome\": \"5\",\n    \"opera\": \"10.10\",\n    \"edge\": \"12\",\n    \"firefox\": \"2\",\n    \"safari\": \"3.1\",\n    \"node\": \"0.4\",\n    \"deno\": \"1\",\n    \"ie\": \"9\",\n    \"android\": \"4\",\n    \"ios\": \"6\",\n    \"phantom\": \"1.9\",\n    \"samsung\": \"1\",\n    \"rhino\": \"1.7.13\",\n    \"electron\": \"0.20\"\n  },\n  \"es6.array.sort\": {\n    \"chrome\": \"63\",\n    \"opera\": \"50\",\n    \"edge\": \"12\",\n    \"firefox\": \"5\",\n    \"safari\": \"12\",\n    \"node\": \"10\",\n    \"deno\": \"1\",\n    \"ie\": \"9\",\n    \"ios\": \"12\",\n    \"samsung\": \"8\",\n    \"rhino\": \"1.7.13\",\n    \"electron\": \"3.0\"\n  },\n  \"es6.array.species\": {\n    \"chrome\": \"51\",\n    \"opera\": \"38\",\n    \"edge\": \"13\",\n    \"firefox\": \"48\",\n    \"safari\": \"10\",\n    \"node\": \"6.5\",\n    \"deno\": \"1\",\n    \"ios\": \"10\",\n    \"samsung\": \"5\",\n    \"electron\": \"1.2\"\n  },\n  \"es6.date.now\": {\n    \"chrome\": \"5\",\n    \"opera\": \"10.50\",\n    \"edge\": \"12\",\n    \"firefox\": \"2\",\n    \"safari\": \"4\",\n    \"node\": \"0.4\",\n    \"deno\": \"1\",\n    \"ie\": \"9\",\n    \"android\": \"4\",\n    \"ios\": \"6\",\n    \"phantom\": \"1.9\",\n    \"samsung\": \"1\",\n    \"rhino\": \"1.7.13\",\n    \"electron\": \"0.20\"\n  },\n  \"es6.date.to-iso-string\": {\n    \"chrome\": \"5\",\n    \"opera\": \"10.50\",\n    \"edge\": \"12\",\n    \"firefox\": \"3.5\",\n    \"safari\": \"4\",\n    \"node\": \"0.4\",\n    \"deno\": \"1\",\n    \"ie\": \"9\",\n    \"android\": \"4\",\n    \"ios\": \"6\",\n    \"phantom\": \"1.9\",\n    \"samsung\": \"1\",\n    \"rhino\": \"1.7.13\",\n    \"electron\": \"0.20\"\n  },\n  \"es6.date.to-json\": {\n    \"chrome\": \"5\",\n    \"opera\": \"12.10\",\n    \"edge\": \"12\",\n    \"firefox\": \"4\",\n    \"safari\": \"10\",\n    \"node\": \"0.4\",\n    \"deno\": \"1\",\n    \"ie\": \"9\",\n    \"android\": \"4\",\n    \"ios\": \"10\",\n    \"samsung\": \"1\",\n    \"rhino\": \"1.7.13\",\n    \"electron\": \"0.20\"\n  },\n  \"es6.date.to-primitive\": {\n    \"chrome\": \"47\",\n    \"opera\": \"34\",\n    \"edge\": \"15\",\n    \"firefox\": \"44\",\n    \"safari\": \"10\",\n    \"node\": \"6\",\n    \"deno\": \"1\",\n    \"ios\": \"10\",\n    \"samsung\": \"5\",\n    \"electron\": \"0.36\"\n  },\n  \"es6.date.to-string\": {\n    \"chrome\": \"5\",\n    \"opera\": \"10.50\",\n    \"edge\": \"12\",\n    \"firefox\": \"2\",\n    \"safari\": \"3.1\",\n    \"node\": \"0.4\",\n    \"deno\": \"1\",\n    \"ie\": \"10\",\n    \"android\": \"4\",\n    \"ios\": \"6\",\n    \"phantom\": \"1.9\",\n    \"samsung\": \"1\",\n    \"rhino\": \"1.7.13\",\n    \"electron\": \"0.20\"\n  },\n  \"es6.function.bind\": {\n    \"chrome\": \"7\",\n    \"opera\": \"12\",\n    \"edge\": \"12\",\n    \"firefox\": \"4\",\n    \"safari\": \"5.1\",\n    \"node\": \"0.4\",\n    \"deno\": \"1\",\n    \"ie\": \"9\",\n    \"android\": \"4\",\n    \"ios\": \"6\",\n    \"phantom\": \"1.9\",\n    \"samsung\": \"1\",\n    \"rhino\": \"1.7.13\",\n    \"electron\": \"0.20\"\n  },\n  \"es6.function.has-instance\": {\n    \"chrome\": \"51\",\n    \"opera\": \"38\",\n    \"edge\": \"15\",\n    \"firefox\": \"50\",\n    \"safari\": \"10\",\n    \"node\": \"6.5\",\n    \"deno\": \"1\",\n    \"ios\": \"10\",\n    \"samsung\": \"5\",\n    \"electron\": \"1.2\"\n  },\n  \"es6.function.name\": {\n    \"chrome\": \"5\",\n    \"opera\": \"10.50\",\n    \"edge\": \"14\",\n    \"firefox\": \"2\",\n    \"safari\": \"4\",\n    \"node\": \"0.4\",\n    \"deno\": \"1\",\n    \"android\": \"4\",\n    \"ios\": \"6\",\n    \"phantom\": \"1.9\",\n    \"samsung\": \"1\",\n    \"rhino\": \"1.7.13\",\n    \"electron\": \"0.20\"\n  },\n  \"es6.map\": {\n    \"chrome\": \"51\",\n    \"opera\": \"38\",\n    \"edge\": \"15\",\n    \"firefox\": \"53\",\n    \"safari\": \"10\",\n    \"node\": \"6.5\",\n    \"deno\": \"1\",\n    \"ios\": \"10\",\n    \"samsung\": \"5\",\n    \"electron\": \"1.2\"\n  },\n  \"es6.math.acosh\": {\n    \"chrome\": \"38\",\n    \"opera\": \"25\",\n    \"edge\": \"12\",\n    \"firefox\": \"25\",\n    \"safari\": \"7.1\",\n    \"node\": \"0.12\",\n    \"deno\": \"1\",\n    \"ios\": \"8\",\n    \"samsung\": \"3\",\n    \"rhino\": \"1.7.13\",\n    \"electron\": \"0.20\"\n  },\n  \"es6.math.asinh\": {\n    \"chrome\": \"38\",\n    \"opera\": \"25\",\n    \"edge\": \"12\",\n    \"firefox\": \"25\",\n    \"safari\": \"7.1\",\n    \"node\": \"0.12\",\n    \"deno\": \"1\",\n    \"ios\": \"8\",\n    \"samsung\": \"3\",\n    \"rhino\": \"1.7.13\",\n    \"electron\": \"0.20\"\n  },\n  \"es6.math.atanh\": {\n    \"chrome\": \"38\",\n    \"opera\": \"25\",\n    \"edge\": \"12\",\n    \"firefox\": \"25\",\n    \"safari\": \"7.1\",\n    \"node\": \"0.12\",\n    \"deno\": \"1\",\n    \"ios\": \"8\",\n    \"samsung\": \"3\",\n    \"rhino\": \"1.7.13\",\n    \"electron\": \"0.20\"\n  },\n  \"es6.math.cbrt\": {\n    \"chrome\": \"38\",\n    \"opera\": \"25\",\n    \"edge\": \"12\",\n    \"firefox\": \"25\",\n    \"safari\": \"7.1\",\n    \"node\": \"0.12\",\n    \"deno\": \"1\",\n    \"ios\": \"8\",\n    \"samsung\": \"3\",\n    \"rhino\": \"1.7.13\",\n    \"electron\": \"0.20\"\n  },\n  \"es6.math.clz32\": {\n    \"chrome\": \"38\",\n    \"opera\": \"25\",\n    \"edge\": \"12\",\n    \"firefox\": \"31\",\n    \"safari\": \"9\",\n    \"node\": \"0.12\",\n    \"deno\": \"1\",\n    \"ios\": \"9\",\n    \"samsung\": \"3\",\n    \"rhino\": \"1.7.13\",\n    \"electron\": \"0.20\"\n  },\n  \"es6.math.cosh\": {\n    \"chrome\": \"38\",\n    \"opera\": \"25\",\n    \"edge\": \"12\",\n    \"firefox\": \"25\",\n    \"safari\": \"7.1\",\n    \"node\": \"0.12\",\n    \"deno\": \"1\",\n    \"ios\": \"8\",\n    \"samsung\": \"3\",\n    \"rhino\": \"1.7.13\",\n    \"electron\": \"0.20\"\n  },\n  \"es6.math.expm1\": {\n    \"chrome\": \"38\",\n    \"opera\": \"25\",\n    \"edge\": \"12\",\n    \"firefox\": \"25\",\n    \"safari\": \"7.1\",\n    \"node\": \"0.12\",\n    \"deno\": \"1\",\n    \"ios\": \"8\",\n    \"samsung\": \"3\",\n    \"rhino\": \"1.7.13\",\n    \"electron\": \"0.20\"\n  },\n  \"es6.math.fround\": {\n    \"chrome\": \"38\",\n    \"opera\": \"25\",\n    \"edge\": \"12\",\n    \"firefox\": \"26\",\n    \"safari\": \"7.1\",\n    \"node\": \"0.12\",\n    \"deno\": \"1\",\n    \"ios\": \"8\",\n    \"samsung\": \"3\",\n    \"rhino\": \"1.7.13\",\n    \"electron\": \"0.20\"\n  },\n  \"es6.math.hypot\": {\n    \"chrome\": \"38\",\n    \"opera\": \"25\",\n    \"edge\": \"12\",\n    \"firefox\": \"27\",\n    \"safari\": \"7.1\",\n    \"node\": \"0.12\",\n    \"deno\": \"1\",\n    \"ios\": \"8\",\n    \"samsung\": \"3\",\n    \"rhino\": \"1.7.13\",\n    \"electron\": \"0.20\"\n  },\n  \"es6.math.imul\": {\n    \"chrome\": \"30\",\n    \"opera\": \"17\",\n    \"edge\": \"12\",\n    \"firefox\": \"23\",\n    \"safari\": \"7\",\n    \"node\": \"0.12\",\n    \"deno\": \"1\",\n    \"android\": \"4.4\",\n    \"ios\": \"7\",\n    \"samsung\": \"2\",\n    \"rhino\": \"1.7.13\",\n    \"electron\": \"0.20\"\n  },\n  \"es6.math.log1p\": {\n    \"chrome\": \"38\",\n    \"opera\": \"25\",\n    \"edge\": \"12\",\n    \"firefox\": \"25\",\n    \"safari\": \"7.1\",\n    \"node\": \"0.12\",\n    \"deno\": \"1\",\n    \"ios\": \"8\",\n    \"samsung\": \"3\",\n    \"rhino\": \"1.7.13\",\n    \"electron\": \"0.20\"\n  },\n  \"es6.math.log10\": {\n    \"chrome\": \"38\",\n    \"opera\": \"25\",\n    \"edge\": \"12\",\n    \"firefox\": \"25\",\n    \"safari\": \"7.1\",\n    \"node\": \"0.12\",\n    \"deno\": \"1\",\n    \"ios\": \"8\",\n    \"samsung\": \"3\",\n    \"rhino\": \"1.7.13\",\n    \"electron\": \"0.20\"\n  },\n  \"es6.math.log2\": {\n    \"chrome\": \"38\",\n    \"opera\": \"25\",\n    \"edge\": \"12\",\n    \"firefox\": \"25\",\n    \"safari\": \"7.1\",\n    \"node\": \"0.12\",\n    \"deno\": \"1\",\n    \"ios\": \"8\",\n    \"samsung\": \"3\",\n    \"rhino\": \"1.7.13\",\n    \"electron\": \"0.20\"\n  },\n  \"es6.math.sign\": {\n    \"chrome\": \"38\",\n    \"opera\": \"25\",\n    \"edge\": \"12\",\n    \"firefox\": \"25\",\n    \"safari\": \"9\",\n    \"node\": \"0.12\",\n    \"deno\": \"1\",\n    \"ios\": \"9\",\n    \"samsung\": \"3\",\n    \"rhino\": \"1.7.13\",\n    \"electron\": \"0.20\"\n  },\n  \"es6.math.sinh\": {\n    \"chrome\": \"38\",\n    \"opera\": \"25\",\n    \"edge\": \"12\",\n    \"firefox\": \"25\",\n    \"safari\": \"7.1\",\n    \"node\": \"0.12\",\n    \"deno\": \"1\",\n    \"ios\": \"8\",\n    \"samsung\": \"3\",\n    \"rhino\": \"1.7.13\",\n    \"electron\": \"0.20\"\n  },\n  \"es6.math.tanh\": {\n    \"chrome\": \"38\",\n    \"opera\": \"25\",\n    \"edge\": \"12\",\n    \"firefox\": \"25\",\n    \"safari\": \"7.1\",\n    \"node\": \"0.12\",\n    \"deno\": \"1\",\n    \"ios\": \"8\",\n    \"samsung\": \"3\",\n    \"rhino\": \"1.7.13\",\n    \"electron\": \"0.20\"\n  },\n  \"es6.math.trunc\": {\n    \"chrome\": \"38\",\n    \"opera\": \"25\",\n    \"edge\": \"12\",\n    \"firefox\": \"25\",\n    \"safari\": \"7.1\",\n    \"node\": \"0.12\",\n    \"deno\": \"1\",\n    \"ios\": \"8\",\n    \"samsung\": \"3\",\n    \"rhino\": \"1.7.13\",\n    \"electron\": \"0.20\"\n  },\n  \"es6.number.constructor\": {\n    \"chrome\": \"41\",\n    \"opera\": \"28\",\n    \"edge\": \"12\",\n    \"firefox\": \"36\",\n    \"safari\": \"9\",\n    \"node\": \"4\",\n    \"deno\": \"1\",\n    \"ios\": \"9\",\n    \"samsung\": \"3.4\",\n    \"rhino\": \"1.7.13\",\n    \"electron\": \"0.21\"\n  },\n  \"es6.number.epsilon\": {\n    \"chrome\": \"34\",\n    \"opera\": \"21\",\n    \"edge\": \"12\",\n    \"firefox\": \"25\",\n    \"safari\": \"9\",\n    \"node\": \"0.12\",\n    \"deno\": \"1\",\n    \"ios\": \"9\",\n    \"samsung\": \"2\",\n    \"rhino\": \"1.7.14\",\n    \"electron\": \"0.20\"\n  },\n  \"es6.number.is-finite\": {\n    \"chrome\": \"19\",\n    \"opera\": \"15\",\n    \"edge\": \"12\",\n    \"firefox\": \"16\",\n    \"safari\": \"9\",\n    \"node\": \"0.8\",\n    \"deno\": \"1\",\n    \"android\": \"4.1\",\n    \"ios\": \"9\",\n    \"samsung\": \"1.5\",\n    \"rhino\": \"1.7.13\",\n    \"electron\": \"0.20\"\n  },\n  \"es6.number.is-integer\": {\n    \"chrome\": \"34\",\n    \"opera\": \"21\",\n    \"edge\": \"12\",\n    \"firefox\": \"16\",\n    \"safari\": \"9\",\n    \"node\": \"0.12\",\n    \"deno\": \"1\",\n    \"ios\": \"9\",\n    \"samsung\": \"2\",\n    \"rhino\": \"1.7.13\",\n    \"electron\": \"0.20\"\n  },\n  \"es6.number.is-nan\": {\n    \"chrome\": \"19\",\n    \"opera\": \"15\",\n    \"edge\": \"12\",\n    \"firefox\": \"15\",\n    \"safari\": \"9\",\n    \"node\": \"0.8\",\n    \"deno\": \"1\",\n    \"android\": \"4.1\",\n    \"ios\": \"9\",\n    \"samsung\": \"1.5\",\n    \"rhino\": \"1.7.13\",\n    \"electron\": \"0.20\"\n  },\n  \"es6.number.is-safe-integer\": {\n    \"chrome\": \"34\",\n    \"opera\": \"21\",\n    \"edge\": \"12\",\n    \"firefox\": \"32\",\n    \"safari\": \"9\",\n    \"node\": \"0.12\",\n    \"deno\": \"1\",\n    \"ios\": \"9\",\n    \"samsung\": \"2\",\n    \"rhino\": \"1.7.13\",\n    \"electron\": \"0.20\"\n  },\n  \"es6.number.max-safe-integer\": {\n    \"chrome\": \"34\",\n    \"opera\": \"21\",\n    \"edge\": \"12\",\n    \"firefox\": \"31\",\n    \"safari\": \"9\",\n    \"node\": \"0.12\",\n    \"deno\": \"1\",\n    \"ios\": \"9\",\n    \"samsung\": \"2\",\n    \"rhino\": \"1.7.13\",\n    \"electron\": \"0.20\"\n  },\n  \"es6.number.min-safe-integer\": {\n    \"chrome\": \"34\",\n    \"opera\": \"21\",\n    \"edge\": \"12\",\n    \"firefox\": \"31\",\n    \"safari\": \"9\",\n    \"node\": \"0.12\",\n    \"deno\": \"1\",\n    \"ios\": \"9\",\n    \"samsung\": \"2\",\n    \"rhino\": \"1.7.13\",\n    \"electron\": \"0.20\"\n  },\n  \"es6.number.parse-float\": {\n    \"chrome\": \"34\",\n    \"opera\": \"21\",\n    \"edge\": \"12\",\n    \"firefox\": \"25\",\n    \"safari\": \"9\",\n    \"node\": \"0.12\",\n    \"deno\": \"1\",\n    \"ios\": \"9\",\n    \"samsung\": \"2\",\n    \"rhino\": \"1.7.14\",\n    \"electron\": \"0.20\"\n  },\n  \"es6.number.parse-int\": {\n    \"chrome\": \"34\",\n    \"opera\": \"21\",\n    \"edge\": \"12\",\n    \"firefox\": \"25\",\n    \"safari\": \"9\",\n    \"node\": \"0.12\",\n    \"deno\": \"1\",\n    \"ios\": \"9\",\n    \"samsung\": \"2\",\n    \"rhino\": \"1.7.14\",\n    \"electron\": \"0.20\"\n  },\n  \"es6.object.assign\": {\n    \"chrome\": \"49\",\n    \"opera\": \"36\",\n    \"edge\": \"13\",\n    \"firefox\": \"36\",\n    \"safari\": \"10\",\n    \"node\": \"6\",\n    \"deno\": \"1\",\n    \"ios\": \"10\",\n    \"samsung\": \"5\",\n    \"electron\": \"0.37\"\n  },\n  \"es6.object.create\": {\n    \"chrome\": \"5\",\n    \"opera\": \"12\",\n    \"edge\": \"12\",\n    \"firefox\": \"4\",\n    \"safari\": \"4\",\n    \"node\": \"0.4\",\n    \"deno\": \"1\",\n    \"ie\": \"9\",\n    \"android\": \"4\",\n    \"ios\": \"6\",\n    \"phantom\": \"1.9\",\n    \"samsung\": \"1\",\n    \"rhino\": \"1.7.13\",\n    \"electron\": \"0.20\"\n  },\n  \"es7.object.define-getter\": {\n    \"chrome\": \"62\",\n    \"opera\": \"49\",\n    \"edge\": \"16\",\n    \"firefox\": \"48\",\n    \"safari\": \"9\",\n    \"node\": \"8.10\",\n    \"deno\": \"1\",\n    \"ios\": \"9\",\n    \"samsung\": \"8\",\n    \"electron\": \"3.0\"\n  },\n  \"es7.object.define-setter\": {\n    \"chrome\": \"62\",\n    \"opera\": \"49\",\n    \"edge\": \"16\",\n    \"firefox\": \"48\",\n    \"safari\": \"9\",\n    \"node\": \"8.10\",\n    \"deno\": \"1\",\n    \"ios\": \"9\",\n    \"samsung\": \"8\",\n    \"electron\": \"3.0\"\n  },\n  \"es6.object.define-property\": {\n    \"chrome\": \"5\",\n    \"opera\": \"12\",\n    \"edge\": \"12\",\n    \"firefox\": \"4\",\n    \"safari\": \"5.1\",\n    \"node\": \"0.4\",\n    \"deno\": \"1\",\n    \"ie\": \"9\",\n    \"android\": \"4\",\n    \"ios\": \"6\",\n    \"phantom\": \"1.9\",\n    \"samsung\": \"1\",\n    \"rhino\": \"1.7.13\",\n    \"electron\": \"0.20\"\n  },\n  \"es6.object.define-properties\": {\n    \"chrome\": \"5\",\n    \"opera\": \"12\",\n    \"edge\": \"12\",\n    \"firefox\": \"4\",\n    \"safari\": \"4\",\n    \"node\": \"0.4\",\n    \"deno\": \"1\",\n    \"ie\": \"9\",\n    \"android\": \"4\",\n    \"ios\": \"6\",\n    \"phantom\": \"1.9\",\n    \"samsung\": \"1\",\n    \"rhino\": \"1.7.13\",\n    \"electron\": \"0.20\"\n  },\n  \"es7.object.entries\": {\n    \"chrome\": \"54\",\n    \"opera\": \"41\",\n    \"edge\": \"14\",\n    \"firefox\": \"47\",\n    \"safari\": \"10.1\",\n    \"node\": \"7\",\n    \"deno\": \"1\",\n    \"ios\": \"10.3\",\n    \"samsung\": \"6\",\n    \"rhino\": \"1.7.14\",\n    \"electron\": \"1.4\"\n  },\n  \"es6.object.freeze\": {\n    \"chrome\": \"44\",\n    \"opera\": \"31\",\n    \"edge\": \"12\",\n    \"firefox\": \"35\",\n    \"safari\": \"9\",\n    \"node\": \"4\",\n    \"deno\": \"1\",\n    \"ios\": \"9\",\n    \"samsung\": \"4\",\n    \"rhino\": \"1.7.13\",\n    \"electron\": \"0.30\"\n  },\n  \"es6.object.get-own-property-descriptor\": {\n    \"chrome\": \"44\",\n    \"opera\": \"31\",\n    \"edge\": \"12\",\n    \"firefox\": \"35\",\n    \"safari\": \"9\",\n    \"node\": \"4\",\n    \"deno\": \"1\",\n    \"ios\": \"9\",\n    \"samsung\": \"4\",\n    \"rhino\": \"1.7.13\",\n    \"electron\": \"0.30\"\n  },\n  \"es7.object.get-own-property-descriptors\": {\n    \"chrome\": \"54\",\n    \"opera\": \"41\",\n    \"edge\": \"15\",\n    \"firefox\": \"50\",\n    \"safari\": \"10.1\",\n    \"node\": \"7\",\n    \"deno\": \"1\",\n    \"ios\": \"10.3\",\n    \"samsung\": \"6\",\n    \"electron\": \"1.4\"\n  },\n  \"es6.object.get-own-property-names\": {\n    \"chrome\": \"40\",\n    \"opera\": \"27\",\n    \"edge\": \"12\",\n    \"firefox\": \"33\",\n    \"safari\": \"9\",\n    \"node\": \"4\",\n    \"deno\": \"1\",\n    \"ios\": \"9\",\n    \"samsung\": \"3.4\",\n    \"rhino\": \"1.7.13\",\n    \"electron\": \"0.21\"\n  },\n  \"es6.object.get-prototype-of\": {\n    \"chrome\": \"44\",\n    \"opera\": \"31\",\n    \"edge\": \"12\",\n    \"firefox\": \"35\",\n    \"safari\": \"9\",\n    \"node\": \"4\",\n    \"deno\": \"1\",\n    \"ios\": \"9\",\n    \"samsung\": \"4\",\n    \"rhino\": \"1.7.13\",\n    \"electron\": \"0.30\"\n  },\n  \"es7.object.lookup-getter\": {\n    \"chrome\": \"62\",\n    \"opera\": \"49\",\n    \"edge\": \"79\",\n    \"firefox\": \"36\",\n    \"safari\": \"9\",\n    \"node\": \"8.10\",\n    \"deno\": \"1\",\n    \"ios\": \"9\",\n    \"samsung\": \"8\",\n    \"electron\": \"3.0\"\n  },\n  \"es7.object.lookup-setter\": {\n    \"chrome\": \"62\",\n    \"opera\": \"49\",\n    \"edge\": \"79\",\n    \"firefox\": \"36\",\n    \"safari\": \"9\",\n    \"node\": \"8.10\",\n    \"deno\": \"1\",\n    \"ios\": \"9\",\n    \"samsung\": \"8\",\n    \"electron\": \"3.0\"\n  },\n  \"es6.object.prevent-extensions\": {\n    \"chrome\": \"44\",\n    \"opera\": \"31\",\n    \"edge\": \"12\",\n    \"firefox\": \"35\",\n    \"safari\": \"9\",\n    \"node\": \"4\",\n    \"deno\": \"1\",\n    \"ios\": \"9\",\n    \"samsung\": \"4\",\n    \"rhino\": \"1.7.13\",\n    \"electron\": \"0.30\"\n  },\n  \"es6.object.to-string\": {\n    \"chrome\": \"57\",\n    \"opera\": \"44\",\n    \"edge\": \"15\",\n    \"firefox\": \"51\",\n    \"safari\": \"10\",\n    \"node\": \"8\",\n    \"deno\": \"1\",\n    \"ios\": \"10\",\n    \"samsung\": \"7\",\n    \"electron\": \"1.7\"\n  },\n  \"es6.object.is\": {\n    \"chrome\": \"19\",\n    \"opera\": \"15\",\n    \"edge\": \"12\",\n    \"firefox\": \"22\",\n    \"safari\": \"9\",\n    \"node\": \"0.8\",\n    \"deno\": \"1\",\n    \"android\": \"4.1\",\n    \"ios\": \"9\",\n    \"samsung\": \"1.5\",\n    \"rhino\": \"1.7.13\",\n    \"electron\": \"0.20\"\n  },\n  \"es6.object.is-frozen\": {\n    \"chrome\": \"44\",\n    \"opera\": \"31\",\n    \"edge\": \"12\",\n    \"firefox\": \"35\",\n    \"safari\": \"9\",\n    \"node\": \"4\",\n    \"deno\": \"1\",\n    \"ios\": \"9\",\n    \"samsung\": \"4\",\n    \"rhino\": \"1.7.13\",\n    \"electron\": \"0.30\"\n  },\n  \"es6.object.is-sealed\": {\n    \"chrome\": \"44\",\n    \"opera\": \"31\",\n    \"edge\": \"12\",\n    \"firefox\": \"35\",\n    \"safari\": \"9\",\n    \"node\": \"4\",\n    \"deno\": \"1\",\n    \"ios\": \"9\",\n    \"samsung\": \"4\",\n    \"rhino\": \"1.7.13\",\n    \"electron\": \"0.30\"\n  },\n  \"es6.object.is-extensible\": {\n    \"chrome\": \"44\",\n    \"opera\": \"31\",\n    \"edge\": \"12\",\n    \"firefox\": \"35\",\n    \"safari\": \"9\",\n    \"node\": \"4\",\n    \"deno\": \"1\",\n    \"ios\": \"9\",\n    \"samsung\": \"4\",\n    \"rhino\": \"1.7.13\",\n    \"electron\": \"0.30\"\n  },\n  \"es6.object.keys\": {\n    \"chrome\": \"40\",\n    \"opera\": \"27\",\n    \"edge\": \"12\",\n    \"firefox\": \"35\",\n    \"safari\": \"9\",\n    \"node\": \"4\",\n    \"deno\": \"1\",\n    \"ios\": \"9\",\n    \"samsung\": \"3.4\",\n    \"rhino\": \"1.7.13\",\n    \"electron\": \"0.21\"\n  },\n  \"es6.object.seal\": {\n    \"chrome\": \"44\",\n    \"opera\": \"31\",\n    \"edge\": \"12\",\n    \"firefox\": \"35\",\n    \"safari\": \"9\",\n    \"node\": \"4\",\n    \"deno\": \"1\",\n    \"ios\": \"9\",\n    \"samsung\": \"4\",\n    \"rhino\": \"1.7.13\",\n    \"electron\": \"0.30\"\n  },\n  \"es6.object.set-prototype-of\": {\n    \"chrome\": \"34\",\n    \"opera\": \"21\",\n    \"edge\": \"12\",\n    \"firefox\": \"31\",\n    \"safari\": \"9\",\n    \"node\": \"0.12\",\n    \"deno\": \"1\",\n    \"ie\": \"11\",\n    \"ios\": \"9\",\n    \"samsung\": \"2\",\n    \"rhino\": \"1.7.13\",\n    \"electron\": \"0.20\"\n  },\n  \"es7.object.values\": {\n    \"chrome\": \"54\",\n    \"opera\": \"41\",\n    \"edge\": \"14\",\n    \"firefox\": \"47\",\n    \"safari\": \"10.1\",\n    \"node\": \"7\",\n    \"deno\": \"1\",\n    \"ios\": \"10.3\",\n    \"samsung\": \"6\",\n    \"rhino\": \"1.7.14\",\n    \"electron\": \"1.4\"\n  },\n  \"es6.promise\": {\n    \"chrome\": \"51\",\n    \"opera\": \"38\",\n    \"edge\": \"14\",\n    \"firefox\": \"45\",\n    \"safari\": \"10\",\n    \"node\": \"6.5\",\n    \"deno\": \"1\",\n    \"ios\": \"10\",\n    \"samsung\": \"5\",\n    \"electron\": \"1.2\"\n  },\n  \"es7.promise.finally\": {\n    \"chrome\": \"63\",\n    \"opera\": \"50\",\n    \"edge\": \"18\",\n    \"firefox\": \"58\",\n    \"safari\": \"11.1\",\n    \"node\": \"10\",\n    \"deno\": \"1\",\n    \"ios\": \"11.3\",\n    \"samsung\": \"8\",\n    \"electron\": \"3.0\"\n  },\n  \"es6.reflect.apply\": {\n    \"chrome\": \"49\",\n    \"opera\": \"36\",\n    \"edge\": \"12\",\n    \"firefox\": \"42\",\n    \"safari\": \"10\",\n    \"node\": \"6\",\n    \"deno\": \"1\",\n    \"ios\": \"10\",\n    \"samsung\": \"5\",\n    \"electron\": \"0.37\"\n  },\n  \"es6.reflect.construct\": {\n    \"chrome\": \"49\",\n    \"opera\": \"36\",\n    \"edge\": \"13\",\n    \"firefox\": \"49\",\n    \"safari\": \"10\",\n    \"node\": \"6\",\n    \"deno\": \"1\",\n    \"ios\": \"10\",\n    \"samsung\": \"5\",\n    \"electron\": \"0.37\"\n  },\n  \"es6.reflect.define-property\": {\n    \"chrome\": \"49\",\n    \"opera\": \"36\",\n    \"edge\": \"13\",\n    \"firefox\": \"42\",\n    \"safari\": \"10\",\n    \"node\": \"6\",\n    \"deno\": \"1\",\n    \"ios\": \"10\",\n    \"samsung\": \"5\",\n    \"electron\": \"0.37\"\n  },\n  \"es6.reflect.delete-property\": {\n    \"chrome\": \"49\",\n    \"opera\": \"36\",\n    \"edge\": \"12\",\n    \"firefox\": \"42\",\n    \"safari\": \"10\",\n    \"node\": \"6\",\n    \"deno\": \"1\",\n    \"ios\": \"10\",\n    \"samsung\": \"5\",\n    \"electron\": \"0.37\"\n  },\n  \"es6.reflect.get\": {\n    \"chrome\": \"49\",\n    \"opera\": \"36\",\n    \"edge\": \"12\",\n    \"firefox\": \"42\",\n    \"safari\": \"10\",\n    \"node\": \"6\",\n    \"deno\": \"1\",\n    \"ios\": \"10\",\n    \"samsung\": \"5\",\n    \"electron\": \"0.37\"\n  },\n  \"es6.reflect.get-own-property-descriptor\": {\n    \"chrome\": \"49\",\n    \"opera\": \"36\",\n    \"edge\": \"12\",\n    \"firefox\": \"42\",\n    \"safari\": \"10\",\n    \"node\": \"6\",\n    \"deno\": \"1\",\n    \"ios\": \"10\",\n    \"samsung\": \"5\",\n    \"electron\": \"0.37\"\n  },\n  \"es6.reflect.get-prototype-of\": {\n    \"chrome\": \"49\",\n    \"opera\": \"36\",\n    \"edge\": \"12\",\n    \"firefox\": \"42\",\n    \"safari\": \"10\",\n    \"node\": \"6\",\n    \"deno\": \"1\",\n    \"ios\": \"10\",\n    \"samsung\": \"5\",\n    \"electron\": \"0.37\"\n  },\n  \"es6.reflect.has\": {\n    \"chrome\": \"49\",\n    \"opera\": \"36\",\n    \"edge\": \"12\",\n    \"firefox\": \"42\",\n    \"safari\": \"10\",\n    \"node\": \"6\",\n    \"deno\": \"1\",\n    \"ios\": \"10\",\n    \"samsung\": \"5\",\n    \"electron\": \"0.37\"\n  },\n  \"es6.reflect.is-extensible\": {\n    \"chrome\": \"49\",\n    \"opera\": \"36\",\n    \"edge\": \"12\",\n    \"firefox\": \"42\",\n    \"safari\": \"10\",\n    \"node\": \"6\",\n    \"deno\": \"1\",\n    \"ios\": \"10\",\n    \"samsung\": \"5\",\n    \"electron\": \"0.37\"\n  },\n  \"es6.reflect.own-keys\": {\n    \"chrome\": \"49\",\n    \"opera\": \"36\",\n    \"edge\": \"12\",\n    \"firefox\": \"42\",\n    \"safari\": \"10\",\n    \"node\": \"6\",\n    \"deno\": \"1\",\n    \"ios\": \"10\",\n    \"samsung\": \"5\",\n    \"electron\": \"0.37\"\n  },\n  \"es6.reflect.prevent-extensions\": {\n    \"chrome\": \"49\",\n    \"opera\": \"36\",\n    \"edge\": \"12\",\n    \"firefox\": \"42\",\n    \"safari\": \"10\",\n    \"node\": \"6\",\n    \"deno\": \"1\",\n    \"ios\": \"10\",\n    \"samsung\": \"5\",\n    \"electron\": \"0.37\"\n  },\n  \"es6.reflect.set\": {\n    \"chrome\": \"49\",\n    \"opera\": \"36\",\n    \"edge\": \"12\",\n    \"firefox\": \"42\",\n    \"safari\": \"10\",\n    \"node\": \"6\",\n    \"deno\": \"1\",\n    \"ios\": \"10\",\n    \"samsung\": \"5\",\n    \"electron\": \"0.37\"\n  },\n  \"es6.reflect.set-prototype-of\": {\n    \"chrome\": \"49\",\n    \"opera\": \"36\",\n    \"edge\": \"12\",\n    \"firefox\": \"42\",\n    \"safari\": \"10\",\n    \"node\": \"6\",\n    \"deno\": \"1\",\n    \"ios\": \"10\",\n    \"samsung\": \"5\",\n    \"electron\": \"0.37\"\n  },\n  \"es6.regexp.constructor\": {\n    \"chrome\": \"50\",\n    \"opera\": \"37\",\n    \"edge\": \"79\",\n    \"firefox\": \"40\",\n    \"safari\": \"10\",\n    \"node\": \"6\",\n    \"deno\": \"1\",\n    \"ios\": \"10\",\n    \"samsung\": \"5\",\n    \"electron\": \"1.1\"\n  },\n  \"es6.regexp.flags\": {\n    \"chrome\": \"49\",\n    \"opera\": \"36\",\n    \"edge\": \"79\",\n    \"firefox\": \"37\",\n    \"safari\": \"9\",\n    \"node\": \"6\",\n    \"deno\": \"1\",\n    \"ios\": \"9\",\n    \"samsung\": \"5\",\n    \"electron\": \"0.37\"\n  },\n  \"es6.regexp.match\": {\n    \"chrome\": \"50\",\n    \"opera\": \"37\",\n    \"edge\": \"79\",\n    \"firefox\": \"49\",\n    \"safari\": \"10\",\n    \"node\": \"6\",\n    \"deno\": \"1\",\n    \"ios\": \"10\",\n    \"samsung\": \"5\",\n    \"rhino\": \"1.7.13\",\n    \"electron\": \"1.1\"\n  },\n  \"es6.regexp.replace\": {\n    \"chrome\": \"50\",\n    \"opera\": \"37\",\n    \"edge\": \"79\",\n    \"firefox\": \"49\",\n    \"safari\": \"10\",\n    \"node\": \"6\",\n    \"deno\": \"1\",\n    \"ios\": \"10\",\n    \"samsung\": \"5\",\n    \"electron\": \"1.1\"\n  },\n  \"es6.regexp.split\": {\n    \"chrome\": \"50\",\n    \"opera\": \"37\",\n    \"edge\": \"79\",\n    \"firefox\": \"49\",\n    \"safari\": \"10\",\n    \"node\": \"6\",\n    \"deno\": \"1\",\n    \"ios\": \"10\",\n    \"samsung\": \"5\",\n    \"electron\": \"1.1\"\n  },\n  \"es6.regexp.search\": {\n    \"chrome\": \"50\",\n    \"opera\": \"37\",\n    \"edge\": \"79\",\n    \"firefox\": \"49\",\n    \"safari\": \"10\",\n    \"node\": \"6\",\n    \"deno\": \"1\",\n    \"ios\": \"10\",\n    \"samsung\": \"5\",\n    \"rhino\": \"1.7.13\",\n    \"electron\": \"1.1\"\n  },\n  \"es6.regexp.to-string\": {\n    \"chrome\": \"50\",\n    \"opera\": \"37\",\n    \"edge\": \"79\",\n    \"firefox\": \"39\",\n    \"safari\": \"10\",\n    \"node\": \"6\",\n    \"deno\": \"1\",\n    \"ios\": \"10\",\n    \"samsung\": \"5\",\n    \"electron\": \"1.1\"\n  },\n  \"es6.set\": {\n    \"chrome\": \"51\",\n    \"opera\": \"38\",\n    \"edge\": \"15\",\n    \"firefox\": \"53\",\n    \"safari\": \"10\",\n    \"node\": \"6.5\",\n    \"deno\": \"1\",\n    \"ios\": \"10\",\n    \"samsung\": \"5\",\n    \"electron\": \"1.2\"\n  },\n  \"es6.symbol\": {\n    \"chrome\": \"51\",\n    \"opera\": \"38\",\n    \"edge\": \"79\",\n    \"firefox\": \"51\",\n    \"safari\": \"10\",\n    \"node\": \"6.5\",\n    \"deno\": \"1\",\n    \"ios\": \"10\",\n    \"samsung\": \"5\",\n    \"electron\": \"1.2\"\n  },\n  \"es7.symbol.async-iterator\": {\n    \"chrome\": \"63\",\n    \"opera\": \"50\",\n    \"edge\": \"79\",\n    \"firefox\": \"57\",\n    \"safari\": \"12\",\n    \"node\": \"10\",\n    \"deno\": \"1\",\n    \"ios\": \"12\",\n    \"samsung\": \"8\",\n    \"electron\": \"3.0\"\n  },\n  \"es6.string.anchor\": {\n    \"chrome\": \"5\",\n    \"opera\": \"15\",\n    \"edge\": \"12\",\n    \"firefox\": \"17\",\n    \"safari\": \"6\",\n    \"node\": \"0.4\",\n    \"deno\": \"1\",\n    \"android\": \"4\",\n    \"ios\": \"7\",\n    \"phantom\": \"1.9\",\n    \"samsung\": \"1\",\n    \"rhino\": \"1.7.14\",\n    \"electron\": \"0.20\"\n  },\n  \"es6.string.big\": {\n    \"chrome\": \"5\",\n    \"opera\": \"15\",\n    \"edge\": \"12\",\n    \"firefox\": \"17\",\n    \"safari\": \"6\",\n    \"node\": \"0.4\",\n    \"deno\": \"1\",\n    \"android\": \"4\",\n    \"ios\": \"7\",\n    \"phantom\": \"1.9\",\n    \"samsung\": \"1\",\n    \"rhino\": \"1.7.14\",\n    \"electron\": \"0.20\"\n  },\n  \"es6.string.blink\": {\n    \"chrome\": \"5\",\n    \"opera\": \"15\",\n    \"edge\": \"12\",\n    \"firefox\": \"17\",\n    \"safari\": \"6\",\n    \"node\": \"0.4\",\n    \"deno\": \"1\",\n    \"android\": \"4\",\n    \"ios\": \"7\",\n    \"phantom\": \"1.9\",\n    \"samsung\": \"1\",\n    \"rhino\": \"1.7.14\",\n    \"electron\": \"0.20\"\n  },\n  \"es6.string.bold\": {\n    \"chrome\": \"5\",\n    \"opera\": \"15\",\n    \"edge\": \"12\",\n    \"firefox\": \"17\",\n    \"safari\": \"6\",\n    \"node\": \"0.4\",\n    \"deno\": \"1\",\n    \"android\": \"4\",\n    \"ios\": \"7\",\n    \"phantom\": \"1.9\",\n    \"samsung\": \"1\",\n    \"rhino\": \"1.7.14\",\n    \"electron\": \"0.20\"\n  },\n  \"es6.string.code-point-at\": {\n    \"chrome\": \"41\",\n    \"opera\": \"28\",\n    \"edge\": \"12\",\n    \"firefox\": \"29\",\n    \"safari\": \"9\",\n    \"node\": \"4\",\n    \"deno\": \"1\",\n    \"ios\": \"9\",\n    \"samsung\": \"3.4\",\n    \"rhino\": \"1.7.13\",\n    \"electron\": \"0.21\"\n  },\n  \"es6.string.ends-with\": {\n    \"chrome\": \"41\",\n    \"opera\": \"28\",\n    \"edge\": \"12\",\n    \"firefox\": \"29\",\n    \"safari\": \"9\",\n    \"node\": \"4\",\n    \"deno\": \"1\",\n    \"ios\": \"9\",\n    \"samsung\": \"3.4\",\n    \"rhino\": \"1.7.13\",\n    \"electron\": \"0.21\"\n  },\n  \"es6.string.fixed\": {\n    \"chrome\": \"5\",\n    \"opera\": \"15\",\n    \"edge\": \"12\",\n    \"firefox\": \"17\",\n    \"safari\": \"6\",\n    \"node\": \"0.4\",\n    \"deno\": \"1\",\n    \"android\": \"4\",\n    \"ios\": \"7\",\n    \"phantom\": \"1.9\",\n    \"samsung\": \"1\",\n    \"rhino\": \"1.7.14\",\n    \"electron\": \"0.20\"\n  },\n  \"es6.string.fontcolor\": {\n    \"chrome\": \"5\",\n    \"opera\": \"15\",\n    \"edge\": \"12\",\n    \"firefox\": \"17\",\n    \"safari\": \"6\",\n    \"node\": \"0.4\",\n    \"deno\": \"1\",\n    \"android\": \"4\",\n    \"ios\": \"7\",\n    \"phantom\": \"1.9\",\n    \"samsung\": \"1\",\n    \"rhino\": \"1.7.14\",\n    \"electron\": \"0.20\"\n  },\n  \"es6.string.fontsize\": {\n    \"chrome\": \"5\",\n    \"opera\": \"15\",\n    \"edge\": \"12\",\n    \"firefox\": \"17\",\n    \"safari\": \"6\",\n    \"node\": \"0.4\",\n    \"deno\": \"1\",\n    \"android\": \"4\",\n    \"ios\": \"7\",\n    \"phantom\": \"1.9\",\n    \"samsung\": \"1\",\n    \"rhino\": \"1.7.14\",\n    \"electron\": \"0.20\"\n  },\n  \"es6.string.from-code-point\": {\n    \"chrome\": \"41\",\n    \"opera\": \"28\",\n    \"edge\": \"12\",\n    \"firefox\": \"29\",\n    \"safari\": \"9\",\n    \"node\": \"4\",\n    \"deno\": \"1\",\n    \"ios\": \"9\",\n    \"samsung\": \"3.4\",\n    \"rhino\": \"1.7.13\",\n    \"electron\": \"0.21\"\n  },\n  \"es6.string.includes\": {\n    \"chrome\": \"41\",\n    \"opera\": \"28\",\n    \"edge\": \"12\",\n    \"firefox\": \"40\",\n    \"safari\": \"9\",\n    \"node\": \"4\",\n    \"deno\": \"1\",\n    \"ios\": \"9\",\n    \"samsung\": \"3.4\",\n    \"rhino\": \"1.7.13\",\n    \"electron\": \"0.21\"\n  },\n  \"es6.string.italics\": {\n    \"chrome\": \"5\",\n    \"opera\": \"15\",\n    \"edge\": \"12\",\n    \"firefox\": \"17\",\n    \"safari\": \"6\",\n    \"node\": \"0.4\",\n    \"deno\": \"1\",\n    \"android\": \"4\",\n    \"ios\": \"7\",\n    \"phantom\": \"1.9\",\n    \"samsung\": \"1\",\n    \"rhino\": \"1.7.14\",\n    \"electron\": \"0.20\"\n  },\n  \"es6.string.iterator\": {\n    \"chrome\": \"38\",\n    \"opera\": \"25\",\n    \"edge\": \"12\",\n    \"firefox\": \"36\",\n    \"safari\": \"9\",\n    \"node\": \"0.12\",\n    \"deno\": \"1\",\n    \"ios\": \"9\",\n    \"samsung\": \"3\",\n    \"rhino\": \"1.7.13\",\n    \"electron\": \"0.20\"\n  },\n  \"es6.string.link\": {\n    \"chrome\": \"5\",\n    \"opera\": \"15\",\n    \"edge\": \"12\",\n    \"firefox\": \"17\",\n    \"safari\": \"6\",\n    \"node\": \"0.4\",\n    \"deno\": \"1\",\n    \"android\": \"4\",\n    \"ios\": \"7\",\n    \"phantom\": \"1.9\",\n    \"samsung\": \"1\",\n    \"rhino\": \"1.7.14\",\n    \"electron\": \"0.20\"\n  },\n  \"es7.string.pad-start\": {\n    \"chrome\": \"57\",\n    \"opera\": \"44\",\n    \"edge\": \"15\",\n    \"firefox\": \"48\",\n    \"safari\": \"10\",\n    \"node\": \"8\",\n    \"deno\": \"1\",\n    \"ios\": \"10\",\n    \"samsung\": \"7\",\n    \"rhino\": \"1.7.13\",\n    \"electron\": \"1.7\"\n  },\n  \"es7.string.pad-end\": {\n    \"chrome\": \"57\",\n    \"opera\": \"44\",\n    \"edge\": \"15\",\n    \"firefox\": \"48\",\n    \"safari\": \"10\",\n    \"node\": \"8\",\n    \"deno\": \"1\",\n    \"ios\": \"10\",\n    \"samsung\": \"7\",\n    \"rhino\": \"1.7.13\",\n    \"electron\": \"1.7\"\n  },\n  \"es6.string.raw\": {\n    \"chrome\": \"41\",\n    \"opera\": \"28\",\n    \"edge\": \"12\",\n    \"firefox\": \"34\",\n    \"safari\": \"9\",\n    \"node\": \"4\",\n    \"deno\": \"1\",\n    \"ios\": \"9\",\n    \"samsung\": \"3.4\",\n    \"rhino\": \"1.7.14\",\n    \"electron\": \"0.21\"\n  },\n  \"es6.string.repeat\": {\n    \"chrome\": \"41\",\n    \"opera\": \"28\",\n    \"edge\": \"12\",\n    \"firefox\": \"24\",\n    \"safari\": \"9\",\n    \"node\": \"4\",\n    \"deno\": \"1\",\n    \"ios\": \"9\",\n    \"samsung\": \"3.4\",\n    \"rhino\": \"1.7.13\",\n    \"electron\": \"0.21\"\n  },\n  \"es6.string.small\": {\n    \"chrome\": \"5\",\n    \"opera\": \"15\",\n    \"edge\": \"12\",\n    \"firefox\": \"17\",\n    \"safari\": \"6\",\n    \"node\": \"0.4\",\n    \"deno\": \"1\",\n    \"android\": \"4\",\n    \"ios\": \"7\",\n    \"phantom\": \"1.9\",\n    \"samsung\": \"1\",\n    \"rhino\": \"1.7.14\",\n    \"electron\": \"0.20\"\n  },\n  \"es6.string.starts-with\": {\n    \"chrome\": \"41\",\n    \"opera\": \"28\",\n    \"edge\": \"12\",\n    \"firefox\": \"29\",\n    \"safari\": \"9\",\n    \"node\": \"4\",\n    \"deno\": \"1\",\n    \"ios\": \"9\",\n    \"samsung\": \"3.4\",\n    \"rhino\": \"1.7.13\",\n    \"electron\": \"0.21\"\n  },\n  \"es6.string.strike\": {\n    \"chrome\": \"5\",\n    \"opera\": \"15\",\n    \"edge\": \"12\",\n    \"firefox\": \"17\",\n    \"safari\": \"6\",\n    \"node\": \"0.4\",\n    \"deno\": \"1\",\n    \"android\": \"4\",\n    \"ios\": \"7\",\n    \"phantom\": \"1.9\",\n    \"samsung\": \"1\",\n    \"rhino\": \"1.7.14\",\n    \"electron\": \"0.20\"\n  },\n  \"es6.string.sub\": {\n    \"chrome\": \"5\",\n    \"opera\": \"15\",\n    \"edge\": \"12\",\n    \"firefox\": \"17\",\n    \"safari\": \"6\",\n    \"node\": \"0.4\",\n    \"deno\": \"1\",\n    \"android\": \"4\",\n    \"ios\": \"7\",\n    \"phantom\": \"1.9\",\n    \"samsung\": \"1\",\n    \"rhino\": \"1.7.14\",\n    \"electron\": \"0.20\"\n  },\n  \"es6.string.sup\": {\n    \"chrome\": \"5\",\n    \"opera\": \"15\",\n    \"edge\": \"12\",\n    \"firefox\": \"17\",\n    \"safari\": \"6\",\n    \"node\": \"0.4\",\n    \"deno\": \"1\",\n    \"android\": \"4\",\n    \"ios\": \"7\",\n    \"phantom\": \"1.9\",\n    \"samsung\": \"1\",\n    \"rhino\": \"1.7.14\",\n    \"electron\": \"0.20\"\n  },\n  \"es6.string.trim\": {\n    \"chrome\": \"5\",\n    \"opera\": \"10.50\",\n    \"edge\": \"12\",\n    \"firefox\": \"3.5\",\n    \"safari\": \"4\",\n    \"node\": \"0.4\",\n    \"deno\": \"1\",\n    \"ie\": \"9\",\n    \"android\": \"4\",\n    \"ios\": \"6\",\n    \"phantom\": \"1.9\",\n    \"samsung\": \"1\",\n    \"rhino\": \"1.7.13\",\n    \"electron\": \"0.20\"\n  },\n  \"es7.string.trim-left\": {\n    \"chrome\": \"66\",\n    \"opera\": \"53\",\n    \"edge\": \"79\",\n    \"firefox\": \"61\",\n    \"safari\": \"12\",\n    \"node\": \"10\",\n    \"deno\": \"1\",\n    \"ios\": \"12\",\n    \"samsung\": \"9\",\n    \"rhino\": \"1.7.13\",\n    \"electron\": \"3.0\"\n  },\n  \"es7.string.trim-right\": {\n    \"chrome\": \"66\",\n    \"opera\": \"53\",\n    \"edge\": \"79\",\n    \"firefox\": \"61\",\n    \"safari\": \"12\",\n    \"node\": \"10\",\n    \"deno\": \"1\",\n    \"ios\": \"12\",\n    \"samsung\": \"9\",\n    \"rhino\": \"1.7.13\",\n    \"electron\": \"3.0\"\n  },\n  \"es6.typed.array-buffer\": {\n    \"chrome\": \"51\",\n    \"opera\": \"38\",\n    \"edge\": \"13\",\n    \"firefox\": \"48\",\n    \"safari\": \"10\",\n    \"node\": \"6.5\",\n    \"deno\": \"1\",\n    \"ios\": \"10\",\n    \"samsung\": \"5\",\n    \"electron\": \"1.2\"\n  },\n  \"es6.typed.data-view\": {\n    \"chrome\": \"5\",\n    \"opera\": \"12\",\n    \"edge\": \"12\",\n    \"firefox\": \"15\",\n    \"safari\": \"5.1\",\n    \"node\": \"0.4\",\n    \"deno\": \"1\",\n    \"ie\": \"10\",\n    \"android\": \"4\",\n    \"ios\": \"6\",\n    \"phantom\": \"1.9\",\n    \"samsung\": \"1\",\n    \"rhino\": \"1.7.13\",\n    \"electron\": \"0.20\"\n  },\n  \"es6.typed.int8-array\": {\n    \"chrome\": \"51\",\n    \"opera\": \"38\",\n    \"edge\": \"13\",\n    \"firefox\": \"48\",\n    \"safari\": \"10\",\n    \"node\": \"6.5\",\n    \"deno\": \"1\",\n    \"ios\": \"10\",\n    \"samsung\": \"5\",\n    \"electron\": \"1.2\"\n  },\n  \"es6.typed.uint8-array\": {\n    \"chrome\": \"51\",\n    \"opera\": \"38\",\n    \"edge\": \"13\",\n    \"firefox\": \"48\",\n    \"safari\": \"10\",\n    \"node\": \"6.5\",\n    \"deno\": \"1\",\n    \"ios\": \"10\",\n    \"samsung\": \"5\",\n    \"electron\": \"1.2\"\n  },\n  \"es6.typed.uint8-clamped-array\": {\n    \"chrome\": \"51\",\n    \"opera\": \"38\",\n    \"edge\": \"13\",\n    \"firefox\": \"48\",\n    \"safari\": \"10\",\n    \"node\": \"6.5\",\n    \"deno\": \"1\",\n    \"ios\": \"10\",\n    \"samsung\": \"5\",\n    \"electron\": \"1.2\"\n  },\n  \"es6.typed.int16-array\": {\n    \"chrome\": \"51\",\n    \"opera\": \"38\",\n    \"edge\": \"13\",\n    \"firefox\": \"48\",\n    \"safari\": \"10\",\n    \"node\": \"6.5\",\n    \"deno\": \"1\",\n    \"ios\": \"10\",\n    \"samsung\": \"5\",\n    \"electron\": \"1.2\"\n  },\n  \"es6.typed.uint16-array\": {\n    \"chrome\": \"51\",\n    \"opera\": \"38\",\n    \"edge\": \"13\",\n    \"firefox\": \"48\",\n    \"safari\": \"10\",\n    \"node\": \"6.5\",\n    \"deno\": \"1\",\n    \"ios\": \"10\",\n    \"samsung\": \"5\",\n    \"electron\": \"1.2\"\n  },\n  \"es6.typed.int32-array\": {\n    \"chrome\": \"51\",\n    \"opera\": \"38\",\n    \"edge\": \"13\",\n    \"firefox\": \"48\",\n    \"safari\": \"10\",\n    \"node\": \"6.5\",\n    \"deno\": \"1\",\n    \"ios\": \"10\",\n    \"samsung\": \"5\",\n    \"electron\": \"1.2\"\n  },\n  \"es6.typed.uint32-array\": {\n    \"chrome\": \"51\",\n    \"opera\": \"38\",\n    \"edge\": \"13\",\n    \"firefox\": \"48\",\n    \"safari\": \"10\",\n    \"node\": \"6.5\",\n    \"deno\": \"1\",\n    \"ios\": \"10\",\n    \"samsung\": \"5\",\n    \"electron\": \"1.2\"\n  },\n  \"es6.typed.float32-array\": {\n    \"chrome\": \"51\",\n    \"opera\": \"38\",\n    \"edge\": \"13\",\n    \"firefox\": \"48\",\n    \"safari\": \"10\",\n    \"node\": \"6.5\",\n    \"deno\": \"1\",\n    \"ios\": \"10\",\n    \"samsung\": \"5\",\n    \"electron\": \"1.2\"\n  },\n  \"es6.typed.float64-array\": {\n    \"chrome\": \"51\",\n    \"opera\": \"38\",\n    \"edge\": \"13\",\n    \"firefox\": \"48\",\n    \"safari\": \"10\",\n    \"node\": \"6.5\",\n    \"deno\": \"1\",\n    \"ios\": \"10\",\n    \"samsung\": \"5\",\n    \"electron\": \"1.2\"\n  },\n  \"es6.weak-map\": {\n    \"chrome\": \"51\",\n    \"opera\": \"38\",\n    \"edge\": \"15\",\n    \"firefox\": \"53\",\n    \"safari\": \"9\",\n    \"node\": \"6.5\",\n    \"deno\": \"1\",\n    \"ios\": \"9\",\n    \"samsung\": \"5\",\n    \"electron\": \"1.2\"\n  },\n  \"es6.weak-set\": {\n    \"chrome\": \"51\",\n    \"opera\": \"38\",\n    \"edge\": \"15\",\n    \"firefox\": \"53\",\n    \"safari\": \"9\",\n    \"node\": \"6.5\",\n    \"deno\": \"1\",\n    \"ios\": \"9\",\n    \"samsung\": \"5\",\n    \"electron\": \"1.2\"\n  }\n}\n/native-modules.js8module.exports = require(\"./data/native-modules.json\");\n/package.json\u0004s{\n  \"name\": \"@babel/compat-data\",\n  \"version\": \"7.21.0\",\n  \"author\": \"The Babel Team (https://babel.dev/team)\",\n  \"license\": \"MIT\",\n  \"description\": \"\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/babel/babel.git\",\n    \"directory\": \"packages/babel-compat-data\"\n  },\n  \"publishConfig\": {\n    \"access\": \"public\"\n  },\n  \"exports\": {\n    \"./plugins\": \"./plugins.js\",\n    \"./native-modules\": \"./native-modules.js\",\n    \"./corejs2-built-ins\": \"./corejs2-built-ins.js\",\n    \"./corejs3-shipped-proposals\": \"./corejs3-shipped-proposals.js\",\n    \"./overlapping-plugins\": \"./overlapping-plugins.js\",\n    \"./plugin-bugfixes\": \"./plugin-bugfixes.js\"\n  },\n  \"scripts\": {\n    \"build-data\": \"./scripts/download-compat-table.sh && node ./scripts/build-data.js && node ./scripts/build-modules-support.js && node ./scripts/build-bugfixes-targets.js\"\n  },\n  \"keywords\": [\n    \"babel\",\n    \"compat-table\",\n    \"compat-data\"\n  ],\n  \"devDependencies\": {\n    \"@mdn/browser-compat-data\": \"^4.0.10\",\n    \"core-js-compat\": \"^3.25.1\",\n    \"electron-to-chromium\": \"^1.4.248\"\n  },\n  \"engines\": {\n    \"node\": \">=6.9.0\"\n  },\n  \"type\": \"commonjs\"\n}/corejs3-shipped-proposals.jsCmodule.exports = require(\"./data/corejs3-shipped-proposals.json\");\n$/data/corejs3-shipped-proposals.jsonX[\n  \"esnext.global-this\",\n  \"esnext.promise.all-settled\",\n  \"esnext.string.match-all\"\n]\n/data/plugins.json4{\n  \"transform-class-static-block\": {\n    \"chrome\": \"94\",\n    \"opera\": \"80\",\n    \"edge\": \"94\",\n    \"firefox\": \"93\",\n    \"node\": \"16.11\",\n    \"deno\": \"1.14\",\n    \"samsung\": \"17\",\n    \"electron\": \"15.0\"\n  },\n  \"proposal-class-static-block\": {\n    \"chrome\": \"94\",\n    \"opera\": \"80\",\n    \"edge\": \"94\",\n    \"firefox\": \"93\",\n    \"node\": \"16.11\",\n    \"deno\": \"1.14\",\n    \"samsung\": \"17\",\n    \"electron\": \"15.0\"\n  },\n  \"transform-private-property-in-object\": {\n    \"chrome\": \"91\",\n    \"opera\": \"77\",\n    \"edge\": \"91\",\n    \"firefox\": \"90\",\n    \"safari\": \"15\",\n    \"node\": \"16.9\",\n    \"deno\": \"1.9\",\n    \"ios\": \"15\",\n    \"samsung\": \"16\",\n    \"electron\": \"13.0\"\n  },\n  \"proposal-private-property-in-object\": {\n    \"chrome\": \"91\",\n    \"opera\": \"77\",\n    \"edge\": \"91\",\n    \"firefox\": \"90\",\n    \"safari\": \"15\",\n    \"node\": \"16.9\",\n    \"deno\": \"1.9\",\n    \"ios\": \"15\",\n    \"samsung\": \"16\",\n    \"electron\": \"13.0\"\n  },\n  \"transform-class-properties\": {\n    \"chrome\": \"74\",\n    \"opera\": \"62\",\n    \"edge\": \"79\",\n    \"firefox\": \"90\",\n    \"safari\": \"14.1\",\n    \"node\": \"12\",\n    \"deno\": \"1\",\n    \"ios\": \"15\",\n    \"samsung\": \"11\",\n    \"electron\": \"6.0\"\n  },\n  \"proposal-class-properties\": {\n    \"chrome\": \"74\",\n    \"opera\": \"62\",\n    \"edge\": \"79\",\n    \"firefox\": \"90\",\n    \"safari\": \"14.1\",\n    \"node\": \"12\",\n    \"deno\": \"1\",\n    \"ios\": \"15\",\n    \"samsung\": \"11\",\n    \"electron\": \"6.0\"\n  },\n  \"transform-private-methods\": {\n    \"chrome\": \"84\",\n    \"opera\": \"70\",\n    \"edge\": \"84\",\n    \"firefox\": \"90\",\n    \"safari\": \"15\",\n    \"node\": \"14.6\",\n    \"deno\": \"1\",\n    \"ios\": \"15\",\n    \"samsung\": \"14\",\n    \"electron\": \"10.0\"\n  },\n  \"proposal-private-methods\": {\n    \"chrome\": \"84\",\n    \"opera\": \"70\",\n    \"edge\": \"84\",\n    \"firefox\": \"90\",\n    \"safari\": \"15\",\n    \"node\": \"14.6\",\n    \"deno\": \"1\",\n    \"ios\": \"15\",\n    \"samsung\": \"14\",\n    \"electron\": \"10.0\"\n  },\n  \"transform-numeric-separator\": {\n    \"chrome\": \"75\",\n    \"opera\": \"62\",\n    \"edge\": \"79\",\n    \"firefox\": \"70\",\n    \"safari\": \"13\",\n    \"node\": \"12.5\",\n    \"deno\": \"1\",\n    \"ios\": \"13\",\n    \"samsung\": \"11\",\n    \"rhino\": \"1.7.14\",\n    \"electron\": \"6.0\"\n  },\n  \"proposal-numeric-separator\": {\n    \"chrome\": \"75\",\n    \"opera\": \"62\",\n    \"edge\": \"79\",\n    \"firefox\": \"70\",\n    \"safari\": \"13\",\n    \"node\": \"12.5\",\n    \"deno\": \"1\",\n    \"ios\": \"13\",\n    \"samsung\": \"11\",\n    \"rhino\": \"1.7.14\",\n    \"electron\": \"6.0\"\n  },\n  \"transform-logical-assignment-operators\": {\n    \"chrome\": \"85\",\n    \"opera\": \"71\",\n    \"edge\": \"85\",\n    \"firefox\": \"79\",\n    \"safari\": \"14\",\n    \"node\": \"15\",\n    \"deno\": \"1.2\",\n    \"ios\": \"14\",\n    \"samsung\": \"14\",\n    \"electron\": \"10.0\"\n  },\n  \"proposal-logical-assignment-operators\": {\n    \"chrome\": \"85\",\n    \"opera\": \"71\",\n    \"edge\": \"85\",\n    \"firefox\": \"79\",\n    \"safari\": \"14\",\n    \"node\": \"15\",\n    \"deno\": \"1.2\",\n    \"ios\": \"14\",\n    \"samsung\": \"14\",\n    \"electron\": \"10.0\"\n  },\n  \"transform-nullish-coalescing-operator\": {\n    \"chrome\": \"80\",\n    \"opera\": \"67\",\n    \"edge\": \"80\",\n    \"firefox\": \"72\",\n    \"safari\": \"13.1\",\n    \"node\": \"14\",\n    \"deno\": \"1\",\n    \"ios\": \"13.4\",\n    \"samsung\": \"13\",\n    \"electron\": \"8.0\"\n  },\n  \"proposal-nullish-coalescing-operator\": {\n    \"chrome\": \"80\",\n    \"opera\": \"67\",\n    \"edge\": \"80\",\n    \"firefox\": \"72\",\n    \"safari\": \"13.1\",\n    \"node\": \"14\",\n    \"deno\": \"1\",\n    \"ios\": \"13.4\",\n    \"samsung\": \"13\",\n    \"electron\": \"8.0\"\n  },\n  \"transform-optional-chaining\": {\n    \"chrome\": \"91\",\n    \"opera\": \"77\",\n    \"edge\": \"91\",\n    \"firefox\": \"74\",\n    \"safari\": \"13.1\",\n    \"node\": \"16.9\",\n    \"deno\": \"1.9\",\n    \"ios\": \"13.4\",\n    \"samsung\": \"16\",\n    \"electron\": \"13.0\"\n  },\n  \"proposal-optional-chaining\": {\n    \"chrome\": \"91\",\n    \"opera\": \"77\",\n    \"edge\": \"91\",\n    \"firefox\": \"74\",\n    \"safari\": \"13.1\",\n    \"node\": \"16.9\",\n    \"deno\": \"1.9\",\n    \"ios\": \"13.4\",\n    \"samsung\": \"16\",\n    \"electron\": \"13.0\"\n  },\n  \"transform-json-strings\": {\n    \"chrome\": \"66\",\n    \"opera\": \"53\",\n    \"edge\": \"79\",\n    \"firefox\": \"62\",\n    \"safari\": \"12\",\n    \"node\": \"10\",\n    \"deno\": \"1\",\n    \"ios\": \"12\",\n    \"samsung\": \"9\",\n    \"rhino\": \"1.7.14\",\n    \"electron\": \"3.0\"\n  },\n  \"proposal-json-strings\": {\n    \"chrome\": \"66\",\n    \"opera\": \"53\",\n    \"edge\": \"79\",\n    \"firefox\": \"62\",\n    \"safari\": \"12\",\n    \"node\": \"10\",\n    \"deno\": \"1\",\n    \"ios\": \"12\",\n    \"samsung\": \"9\",\n    \"rhino\": \"1.7.14\",\n    \"electron\": \"3.0\"\n  },\n  \"transform-optional-catch-binding\": {\n    \"chrome\": \"66\",\n    \"opera\": \"53\",\n    \"edge\": \"79\",\n    \"firefox\": \"58\",\n    \"safari\": \"11.1\",\n    \"node\": \"10\",\n    \"deno\": \"1\",\n    \"ios\": \"11.3\",\n    \"samsung\": \"9\",\n    \"electron\": \"3.0\"\n  },\n  \"proposal-optional-catch-binding\": {\n    \"chrome\": \"66\",\n    \"opera\": \"53\",\n    \"edge\": \"79\",\n    \"firefox\": \"58\",\n    \"safari\": \"11.1\",\n    \"node\": \"10\",\n    \"deno\": \"1\",\n    \"ios\": \"11.3\",\n    \"samsung\": \"9\",\n    \"electron\": \"3.0\"\n  },\n  \"transform-parameters\": {\n    \"chrome\": \"49\",\n    \"opera\": \"36\",\n    \"edge\": \"18\",\n    \"firefox\": \"53\",\n    \"node\": \"6\",\n    \"deno\": \"1\",\n    \"samsung\": \"5\",\n    \"electron\": \"0.37\"\n  },\n  \"transform-async-generator-functions\": {\n    \"chrome\": \"63\",\n    \"opera\": \"50\",\n    \"edge\": \"79\",\n    \"firefox\": \"57\",\n    \"safari\": \"12\",\n    \"node\": \"10\",\n    \"deno\": \"1\",\n    \"ios\": \"12\",\n    \"samsung\": \"8\",\n    \"electron\": \"3.0\"\n  },\n  \"proposal-async-generator-functions\": {\n    \"chrome\": \"63\",\n    \"opera\": \"50\",\n    \"edge\": \"79\",\n    \"firefox\": \"57\",\n    \"safari\": \"12\",\n    \"node\": \"10\",\n    \"deno\": \"1\",\n    \"ios\": \"12\",\n    \"samsung\": \"8\",\n    \"electron\": \"3.0\"\n  },\n  \"transform-object-rest-spread\": {\n    \"chrome\": \"60\",\n    \"opera\": \"47\",\n    \"edge\": \"79\",\n    \"firefox\": \"55\",\n    \"safari\": \"11.1\",\n    \"node\": \"8.3\",\n    \"deno\": \"1\",\n    \"ios\": \"11.3\",\n    \"samsung\": \"8\",\n    \"electron\": \"2.0\"\n  },\n  \"proposal-object-rest-spread\": {\n    \"chrome\": \"60\",\n    \"opera\": \"47\",\n    \"edge\": \"79\",\n    \"firefox\": \"55\",\n    \"safari\": \"11.1\",\n    \"node\": \"8.3\",\n    \"deno\": \"1\",\n    \"ios\": \"11.3\",\n    \"samsung\": \"8\",\n    \"electron\": \"2.0\"\n  },\n  \"transform-dotall-regex\": {\n    \"chrome\": \"62\",\n    \"opera\": \"49\",\n    \"edge\": \"79\",\n    \"firefox\": \"78\",\n    \"safari\": \"11.1\",\n    \"node\": \"8.10\",\n    \"deno\": \"1\",\n    \"ios\": \"11.3\",\n    \"samsung\": \"8\",\n    \"electron\": \"3.0\"\n  },\n  \"transform-unicode-property-regex\": {\n    \"chrome\": \"64\",\n    \"opera\": \"51\",\n    \"edge\": \"79\",\n    \"firefox\": \"78\",\n    \"safari\": \"11.1\",\n    \"node\": \"10\",\n    \"deno\": \"1\",\n    \"ios\": \"11.3\",\n    \"samsung\": \"9\",\n    \"electron\": \"3.0\"\n  },\n  \"proposal-unicode-property-regex\": {\n    \"chrome\": \"64\",\n    \"opera\": \"51\",\n    \"edge\": \"79\",\n    \"firefox\": \"78\",\n    \"safari\": \"11.1\",\n    \"node\": \"10\",\n    \"deno\": \"1\",\n    \"ios\": \"11.3\",\n    \"samsung\": \"9\",\n    \"electron\": \"3.0\"\n  },\n  \"transform-named-capturing-groups-regex\": {\n    \"chrome\": \"64\",\n    \"opera\": \"51\",\n    \"edge\": \"79\",\n    \"firefox\": \"78\",\n    \"safari\": \"11.1\",\n    \"node\": \"10\",\n    \"deno\": \"1\",\n    \"ios\": \"11.3\",\n    \"samsung\": \"9\",\n    \"electron\": \"3.0\"\n  },\n  \"transform-async-to-generator\": {\n    \"chrome\": \"55\",\n    \"opera\": \"42\",\n    \"edge\": \"15\",\n    \"firefox\": \"52\",\n    \"safari\": \"11\",\n    \"node\": \"7.6\",\n    \"deno\": \"1\",\n    \"ios\": \"11\",\n    \"samsung\": \"6\",\n    \"electron\": \"1.6\"\n  },\n  \"transform-exponentiation-operator\": {\n    \"chrome\": \"52\",\n    \"opera\": \"39\",\n    \"edge\": \"14\",\n    \"firefox\": \"52\",\n    \"safari\": \"10.1\",\n    \"node\": \"7\",\n    \"deno\": \"1\",\n    \"ios\": \"10.3\",\n    \"samsung\": \"6\",\n    \"rhino\": \"1.7.14\",\n    \"electron\": \"1.3\"\n  },\n  \"transform-template-literals\": {\n    \"chrome\": \"41\",\n    \"opera\": \"28\",\n    \"edge\": \"13\",\n    \"firefox\": \"34\",\n    \"safari\": \"13\",\n    \"node\": \"4\",\n    \"deno\": \"1\",\n    \"ios\": \"13\",\n    \"samsung\": \"3.4\",\n    \"electron\": \"0.21\"\n  },\n  \"transform-literals\": {\n    \"chrome\": \"44\",\n    \"opera\": \"31\",\n    \"edge\": \"12\",\n    \"firefox\": \"53\",\n    \"safari\": \"9\",\n    \"node\": \"4\",\n    \"deno\": \"1\",\n    \"ios\": \"9\",\n    \"samsung\": \"4\",\n    \"electron\": \"0.30\"\n  },\n  \"transform-function-name\": {\n    \"chrome\": \"51\",\n    \"opera\": \"38\",\n    \"edge\": \"79\",\n    \"firefox\": \"53\",\n    \"safari\": \"10\",\n    \"node\": \"6.5\",\n    \"deno\": \"1\",\n    \"ios\": \"10\",\n    \"samsung\": \"5\",\n    \"electron\": \"1.2\"\n  },\n  \"transform-arrow-functions\": {\n    \"chrome\": \"47\",\n    \"opera\": \"34\",\n    \"edge\": \"13\",\n    \"firefox\": \"43\",\n    \"safari\": \"10\",\n    \"node\": \"6\",\n    \"deno\": \"1\",\n    \"ios\": \"10\",\n    \"samsung\": \"5\",\n    \"rhino\": \"1.7.13\",\n    \"electron\": \"0.36\"\n  },\n  \"transform-block-scoped-functions\": {\n    \"chrome\": \"41\",\n    \"opera\": \"28\",\n    \"edge\": \"12\",\n    \"firefox\": \"46\",\n    \"safari\": \"10\",\n    \"node\": \"4\",\n    \"deno\": \"1\",\n    \"ie\": \"11\",\n    \"ios\": \"10\",\n    \"samsung\": \"3.4\",\n    \"electron\": \"0.21\"\n  },\n  \"transform-classes\": {\n    \"chrome\": \"46\",\n    \"opera\": \"33\",\n    \"edge\": \"13\",\n    \"firefox\": \"45\",\n    \"safari\": \"10\",\n    \"node\": \"5\",\n    \"deno\": \"1\",\n    \"ios\": \"10\",\n    \"samsung\": \"5\",\n    \"electron\": \"0.36\"\n  },\n  \"transform-object-super\": {\n    \"chrome\": \"46\",\n    \"opera\": \"33\",\n    \"edge\": \"13\",\n    \"firefox\": \"45\",\n    \"safari\": \"10\",\n    \"node\": \"5\",\n    \"deno\": \"1\",\n    \"ios\": \"10\",\n    \"samsung\": \"5\",\n    \"electron\": \"0.36\"\n  },\n  \"transform-shorthand-properties\": {\n    \"chrome\": \"43\",\n    \"opera\": \"30\",\n    \"edge\": \"12\",\n    \"firefox\": \"33\",\n    \"safari\": \"9\",\n    \"node\": \"4\",\n    \"deno\": \"1\",\n    \"ios\": \"9\",\n    \"samsung\": \"4\",\n    \"rhino\": \"1.7.14\",\n    \"electron\": \"0.27\"\n  },\n  \"transform-duplicate-keys\": {\n    \"chrome\": \"42\",\n    \"opera\": \"29\",\n    \"edge\": \"12\",\n    \"firefox\": \"34\",\n    \"safari\": \"9\",\n    \"node\": \"4\",\n    \"deno\": \"1\",\n    \"ios\": \"9\",\n    \"samsung\": \"3.4\",\n    \"electron\": \"0.25\"\n  },\n  \"transform-computed-properties\": {\n    \"chrome\": \"44\",\n    \"opera\": \"31\",\n    \"edge\": \"12\",\n    \"firefox\": \"34\",\n    \"safari\": \"7.1\",\n    \"node\": \"4\",\n    \"deno\": \"1\",\n    \"ios\": \"8\",\n    \"samsung\": \"4\",\n    \"electron\": \"0.30\"\n  },\n  \"transform-for-of\": {\n    \"chrome\": \"51\",\n    \"opera\": \"38\",\n    \"edge\": \"15\",\n    \"firefox\": \"53\",\n    \"safari\": \"10\",\n    \"node\": \"6.5\",\n    \"deno\": \"1\",\n    \"ios\": \"10\",\n    \"samsung\": \"5\",\n    \"electron\": \"1.2\"\n  },\n  \"transform-sticky-regex\": {\n    \"chrome\": \"49\",\n    \"opera\": \"36\",\n    \"edge\": \"13\",\n    \"firefox\": \"3\",\n    \"safari\": \"10\",\n    \"node\": \"6\",\n    \"deno\": \"1\",\n    \"ios\": \"10\",\n    \"samsung\": \"5\",\n    \"electron\": \"0.37\"\n  },\n  \"transform-unicode-escapes\": {\n    \"chrome\": \"44\",\n    \"opera\": \"31\",\n    \"edge\": \"12\",\n    \"firefox\": \"53\",\n    \"safari\": \"9\",\n    \"node\": \"4\",\n    \"deno\": \"1\",\n    \"ios\": \"9\",\n    \"samsung\": \"4\",\n    \"electron\": \"0.30\"\n  },\n  \"transform-unicode-regex\": {\n    \"chrome\": \"50\",\n    \"opera\": \"37\",\n    \"edge\": \"13\",\n    \"firefox\": \"46\",\n    \"safari\": \"12\",\n    \"node\": \"6\",\n    \"deno\": \"1\",\n    \"ios\": \"12\",\n    \"samsung\": \"5\",\n    \"electron\": \"1.1\"\n  },\n  \"transform-spread\": {\n    \"chrome\": \"46\",\n    \"opera\": \"33\",\n    \"edge\": \"13\",\n    \"firefox\": \"45\",\n    \"safari\": \"10\",\n    \"node\": \"5\",\n    \"deno\": \"1\",\n    \"ios\": \"10\",\n    \"samsung\": \"5\",\n    \"electron\": \"0.36\"\n  },\n  \"transform-destructuring\": {\n    \"chrome\": \"51\",\n    \"opera\": \"38\",\n    \"edge\": \"15\",\n    \"firefox\": \"53\",\n    \"safari\": \"10\",\n    \"node\": \"6.5\",\n    \"deno\": \"1\",\n    \"ios\": \"10\",\n    \"samsung\": \"5\",\n    \"electron\": \"1.2\"\n  },\n  \"transform-block-scoping\": {\n    \"chrome\": \"49\",\n    \"opera\": \"36\",\n    \"edge\": \"14\",\n    \"firefox\": \"51\",\n    \"safari\": \"11\",\n    \"node\": \"6\",\n    \"deno\": \"1\",\n    \"ios\": \"11\",\n    \"samsung\": \"5\",\n    \"electron\": \"0.37\"\n  },\n  \"transform-typeof-symbol\": {\n    \"chrome\": \"38\",\n    \"opera\": \"25\",\n    \"edge\": \"12\",\n    \"firefox\": \"36\",\n    \"safari\": \"9\",\n    \"node\": \"0.12\",\n    \"deno\": \"1\",\n    \"ios\": \"9\",\n    \"samsung\": \"3\",\n    \"rhino\": \"1.7.13\",\n    \"electron\": \"0.20\"\n  },\n  \"transform-new-target\": {\n    \"chrome\": \"46\",\n    \"opera\": \"33\",\n    \"edge\": \"14\",\n    \"firefox\": \"41\",\n    \"safari\": \"10\",\n    \"node\": \"5\",\n    \"deno\": \"1\",\n    \"ios\": \"10\",\n    \"samsung\": \"5\",\n    \"electron\": \"0.36\"\n  },\n  \"transform-regenerator\": {\n    \"chrome\": \"50\",\n    \"opera\": \"37\",\n    \"edge\": \"13\",\n    \"firefox\": \"53\",\n    \"safari\": \"10\",\n    \"node\": \"6\",\n    \"deno\": \"1\",\n    \"ios\": \"10\",\n    \"samsung\": \"5\",\n    \"electron\": \"1.1\"\n  },\n  \"transform-member-expression-literals\": {\n    \"chrome\": \"7\",\n    \"opera\": \"12\",\n    \"edge\": \"12\",\n    \"firefox\": \"2\",\n    \"safari\": \"5.1\",\n    \"node\": \"0.4\",\n    \"deno\": \"1\",\n    \"ie\": \"9\",\n    \"android\": \"4\",\n    \"ios\": \"6\",\n    \"phantom\": \"1.9\",\n    \"samsung\": \"1\",\n    \"rhino\": \"1.7.13\",\n    \"electron\": \"0.20\"\n  },\n  \"transform-property-literals\": {\n    \"chrome\": \"7\",\n    \"opera\": \"12\",\n    \"edge\": \"12\",\n    \"firefox\": \"2\",\n    \"safari\": \"5.1\",\n    \"node\": \"0.4\",\n    \"deno\": \"1\",\n    \"ie\": \"9\",\n    \"android\": \"4\",\n    \"ios\": \"6\",\n    \"phantom\": \"1.9\",\n    \"samsung\": \"1\",\n    \"rhino\": \"1.7.13\",\n    \"electron\": \"0.20\"\n  },\n  \"transform-reserved-words\": {\n    \"chrome\": \"13\",\n    \"opera\": \"10.50\",\n    \"edge\": \"12\",\n    \"firefox\": \"2\",\n    \"safari\": \"3.1\",\n    \"node\": \"0.6\",\n    \"deno\": \"1\",\n    \"ie\": \"9\",\n    \"android\": \"4.4\",\n    \"ios\": \"6\",\n    \"phantom\": \"1.9\",\n    \"samsung\": \"1\",\n    \"rhino\": \"1.7.13\",\n    \"electron\": \"0.20\"\n  },\n  \"transform-export-namespace-from\": {\n    \"chrome\": \"72\",\n    \"and_chr\": \"72\",\n    \"edge\": \"79\",\n    \"firefox\": \"80\",\n    \"and_ff\": \"80\",\n    \"node\": \"13.2\",\n    \"opera\": \"60\",\n    \"op_mob\": \"51\",\n    \"samsung\": \"11.0\",\n    \"android\": \"72\",\n    \"electron\": \"5.0\"\n  },\n  \"proposal-export-namespace-from\": {\n    \"chrome\": \"72\",\n    \"and_chr\": \"72\",\n    \"edge\": \"79\",\n    \"firefox\": \"80\",\n    \"and_ff\": \"80\",\n    \"node\": \"13.2\",\n    \"opera\": \"60\",\n    \"op_mob\": \"51\",\n    \"samsung\": \"11.0\",\n    \"android\": \"72\",\n    \"electron\": \"5.0\"\n  }\n}\n/data/plugin-bugfixes.json\u000ea{\n  \"bugfix/transform-async-arrows-in-class\": {\n    \"chrome\": \"55\",\n    \"opera\": \"42\",\n    \"edge\": \"15\",\n    \"firefox\": \"52\",\n    \"safari\": \"11\",\n    \"node\": \"7.6\",\n    \"deno\": \"1\",\n    \"ios\": \"11\",\n    \"samsung\": \"6\",\n    \"electron\": \"1.6\"\n  },\n  \"bugfix/transform-edge-default-parameters\": {\n    \"chrome\": \"49\",\n    \"opera\": \"36\",\n    \"edge\": \"18\",\n    \"firefox\": \"52\",\n    \"safari\": \"10\",\n    \"node\": \"6\",\n    \"deno\": \"1\",\n    \"ios\": \"10\",\n    \"samsung\": \"5\",\n    \"electron\": \"0.37\"\n  },\n  \"bugfix/transform-edge-function-name\": {\n    \"chrome\": \"51\",\n    \"opera\": \"38\",\n    \"edge\": \"79\",\n    \"firefox\": \"53\",\n    \"safari\": \"10\",\n    \"node\": \"6.5\",\n    \"deno\": \"1\",\n    \"ios\": \"10\",\n    \"samsung\": \"5\",\n    \"electron\": \"1.2\"\n  },\n  \"bugfix/transform-safari-block-shadowing\": {\n    \"chrome\": \"49\",\n    \"opera\": \"36\",\n    \"edge\": \"12\",\n    \"firefox\": \"44\",\n    \"safari\": \"11\",\n    \"node\": \"6\",\n    \"deno\": \"1\",\n    \"ie\": \"11\",\n    \"ios\": \"11\",\n    \"samsung\": \"5\",\n    \"electron\": \"0.37\"\n  },\n  \"bugfix/transform-safari-for-shadowing\": {\n    \"chrome\": \"49\",\n    \"opera\": \"36\",\n    \"edge\": \"12\",\n    \"firefox\": \"4\",\n    \"safari\": \"11\",\n    \"node\": \"6\",\n    \"deno\": \"1\",\n    \"ie\": \"11\",\n    \"ios\": \"11\",\n    \"samsung\": \"5\",\n    \"rhino\": \"1.7.13\",\n    \"electron\": \"0.37\"\n  },\n  \"bugfix/transform-safari-id-destructuring-collision-in-function-expression\": {\n    \"chrome\": \"49\",\n    \"opera\": \"36\",\n    \"edge\": \"14\",\n    \"firefox\": \"2\",\n    \"node\": \"6\",\n    \"deno\": \"1\",\n    \"samsung\": \"5\",\n    \"electron\": \"0.37\"\n  },\n  \"bugfix/transform-tagged-template-caching\": {\n    \"chrome\": \"41\",\n    \"opera\": \"28\",\n    \"edge\": \"12\",\n    \"firefox\": \"34\",\n    \"safari\": \"13\",\n    \"node\": \"4\",\n    \"deno\": \"1\",\n    \"ios\": \"13\",\n    \"samsung\": \"3.4\",\n    \"rhino\": \"1.7.14\",\n    \"electron\": \"0.21\"\n  },\n  \"bugfix/transform-v8-spread-parameters-in-optional-chaining\": {\n    \"chrome\": \"91\",\n    \"opera\": \"77\",\n    \"edge\": \"91\",\n    \"firefox\": \"74\",\n    \"safari\": \"13.1\",\n    \"node\": \"16.9\",\n    \"deno\": \"1.9\",\n    \"ios\": \"13.4\",\n    \"samsung\": \"16\",\n    \"electron\": \"13.0\"\n  },\n  \"transform-optional-chaining\": {\n    \"chrome\": \"80\",\n    \"opera\": \"67\",\n    \"edge\": \"80\",\n    \"firefox\": \"74\",\n    \"safari\": \"13.1\",\n    \"node\": \"14\",\n    \"deno\": \"1\",\n    \"ios\": \"13.4\",\n    \"samsung\": \"13\",\n    \"electron\": \"8.0\"\n  },\n  \"proposal-optional-chaining\": {\n    \"chrome\": \"80\",\n    \"opera\": \"67\",\n    \"edge\": \"80\",\n    \"firefox\": \"74\",\n    \"safari\": \"13.1\",\n    \"node\": \"14\",\n    \"deno\": \"1\",\n    \"ios\": \"13.4\",\n    \"samsung\": \"13\",\n    \"electron\": \"8.0\"\n  },\n  \"transform-parameters\": {\n    \"chrome\": \"49\",\n    \"opera\": \"36\",\n    \"edge\": \"15\",\n    \"firefox\": \"53\",\n    \"safari\": \"10\",\n    \"node\": \"6\",\n    \"deno\": \"1\",\n    \"ios\": \"10\",\n    \"samsung\": \"5\",\n    \"electron\": \"0.37\"\n  },\n  \"transform-async-to-generator\": {\n    \"chrome\": \"55\",\n    \"opera\": \"42\",\n    \"edge\": \"15\",\n    \"firefox\": \"52\",\n    \"safari\": \"10.1\",\n    \"node\": \"7.6\",\n    \"deno\": \"1\",\n    \"ios\": \"10.3\",\n    \"samsung\": \"6\",\n    \"electron\": \"1.6\"\n  },\n  \"transform-template-literals\": {\n    \"chrome\": \"41\",\n    \"opera\": \"28\",\n    \"edge\": \"13\",\n    \"firefox\": \"34\",\n    \"safari\": \"9\",\n    \"node\": \"4\",\n    \"deno\": \"1\",\n    \"ios\": \"9\",\n    \"samsung\": \"3.4\",\n    \"electron\": \"0.21\"\n  },\n  \"transform-function-name\": {\n    \"chrome\": \"51\",\n    \"opera\": \"38\",\n    \"edge\": \"14\",\n    \"firefox\": \"53\",\n    \"safari\": \"10\",\n    \"node\": \"6.5\",\n    \"deno\": \"1\",\n    \"ios\": \"10\",\n    \"samsung\": \"5\",\n    \"electron\": \"1.2\"\n  },\n  \"transform-block-scoping\": {\n    \"chrome\": \"49\",\n    \"opera\": \"36\",\n    \"edge\": \"14\",\n    \"firefox\": \"51\",\n    \"safari\": \"10\",\n    \"node\": \"6\",\n    \"deno\": \"1\",\n    \"ios\": \"10\",\n    \"samsung\": \"5\",\n    \"electron\": \"0.37\"\n  }\n}\n/plugin-bugfixes.js9module.exports = require(\"./data/plugin-bugfixes.json\");\n/LICENSE\u0004RMIT License\n\nCopyright (c) 2014-present Sebastian McKenzie and other contributors\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n/corejs2-built-ins.js;module.exports = require(\"./data/corejs2-built-ins.json\");\n/data/overlapping-plugins.json\u0002{\n  \"transform-async-to-generator\": [\n    \"bugfix/transform-async-arrows-in-class\"\n  ],\n  \"transform-parameters\": [\n    \"bugfix/transform-edge-default-parameters\",\n    \"bugfix/transform-safari-id-destructuring-collision-in-function-expression\"\n  ],\n  \"transform-function-name\": [\n    \"bugfix/transform-edge-function-name\"\n  ],\n  \"transform-block-scoping\": [\n    \"bugfix/transform-safari-block-shadowing\",\n    \"bugfix/transform-safari-for-shadowing\"\n  ],\n  \"transform-template-literals\": [\n    \"bugfix/transform-tagged-template-caching\"\n  ],\n  \"transform-optional-chaining\": [\n    \"bugfix/transform-v8-spread-parameters-in-optional-chaining\"\n  ],\n  \"proposal-optional-chaining\": [\n    \"bugfix/transform-v8-spread-parameters-in-optional-chaining\"\n  ]\n}\n/data/native-modules.json\u0001<{\n  \"es6.module\": {\n    \"chrome\": \"61\",\n    \"and_chr\": \"61\",\n    \"edge\": \"16\",\n    \"firefox\": \"60\",\n    \"and_ff\": \"60\",\n    \"node\": \"13.2.0\",\n    \"opera\": \"48\",\n    \"op_mob\": \"48\",\n    \"safari\": \"10.1\",\n    \"ios\": \"10.3\",\n    \"samsung\": \"8.2\",\n    \"android\": \"61\",\n    \"electron\": \"2.0\",\n    \"ios_saf\": \"10.3\"\n  }\n}\n/overlapping-plugins.js=module.exports = require(\"./data/overlapping-plugins.json\");\n/plugins.js1module.exports = require(\"./data/plugins.json\");\n/README.md\u0001\u0003# @babel/compat-data\n\n> \n\nSee our website [@babel/compat-data](https://babeljs.io/docs/en/babel-compat-data) for more information.\n\n## Install\n\nUsing npm:\n\n```sh\nnpm install --save @babel/compat-data\n```\n\nor using yarn:\n\n```sh\nyarn add @babel/compat-data\n```\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QGJhYmVsL2hlbHBlci12YWxpZGF0b3ItaWRlbnRpZmllckA3LjE5LjE=",
    "content": "/lib/identifier.js.mapmf{\"version\":3,\"names\":[\"nonASCIIidentifierStartChars\",\"nonASCIIidentifierChars\",\"nonASCIIidentifierStart\",\"RegExp\",\"nonASCIIidentifier\",\"astralIdentifierStartCodes\",\"astralIdentifierCodes\",\"isInAstralSet\",\"code\",\"set\",\"pos\",\"i\",\"length\",\"isIdentifierStart\",\"test\",\"String\",\"fromCharCode\",\"isIdentifierChar\",\"isIdentifierName\",\"name\",\"isFirst\",\"cp\",\"charCodeAt\",\"trail\"],\"sources\":[\"../src/identifier.ts\"],\"sourcesContent\":[\"import * as charCodes from \\\"charcodes\\\";\\n\\n// ## Character categories\\n\\n// Big ugly regular expressions that match characters in the\\n// whitespace, identifier, and identifier-start categories. These\\n// are only applied when a character is found to actually have a\\n// code point between 0x80 and 0xffff.\\n// Generated by `scripts/generate-identifier-regex.js`.\\n\\n/* prettier-ignore */\\nlet nonASCIIidentifierStartChars = \\\"\\\\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\\\\u0560-\\\\u0588\\\\u05d0-\\\\u05ea\\\\u05ef-\\\\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\\\\u0860-\\\\u086a\\\\u0870-\\\\u0887\\\\u0889-\\\\u088e\\\\u08a0-\\\\u08c9\\\\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\\\\u09fc\\\\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\\\\u0c5d\\\\u0c60\\\\u0c61\\\\u0c80\\\\u0c85-\\\\u0c8c\\\\u0c8e-\\\\u0c90\\\\u0c92-\\\\u0ca8\\\\u0caa-\\\\u0cb3\\\\u0cb5-\\\\u0cb9\\\\u0cbd\\\\u0cdd\\\\u0cde\\\\u0ce0\\\\u0ce1\\\\u0cf1\\\\u0cf2\\\\u0d04-\\\\u0d0c\\\\u0d0e-\\\\u0d10\\\\u0d12-\\\\u0d3a\\\\u0d3d\\\\u0d4e\\\\u0d54-\\\\u0d56\\\\u0d5f-\\\\u0d61\\\\u0d7a-\\\\u0d7f\\\\u0d85-\\\\u0d96\\\\u0d9a-\\\\u0db1\\\\u0db3-\\\\u0dbb\\\\u0dbd\\\\u0dc0-\\\\u0dc6\\\\u0e01-\\\\u0e30\\\\u0e32\\\\u0e33\\\\u0e40-\\\\u0e46\\\\u0e81\\\\u0e82\\\\u0e84\\\\u0e86-\\\\u0e8a\\\\u0e8c-\\\\u0ea3\\\\u0ea5\\\\u0ea7-\\\\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-\\\\u1711\\\\u171f-\\\\u1731\\\\u1740-\\\\u1751\\\\u1760-\\\\u176c\\\\u176e-\\\\u1770\\\\u1780-\\\\u17b3\\\\u17d7\\\\u17dc\\\\u1820-\\\\u1878\\\\u1880-\\\\u18a8\\\\u18aa\\\\u18b0-\\\\u18f5\\\\u1900-\\\\u191e\\\\u1950-\\\\u196d\\\\u1970-\\\\u1974\\\\u1980-\\\\u19ab\\\\u19b0-\\\\u19c9\\\\u1a00-\\\\u1a16\\\\u1a20-\\\\u1a54\\\\u1aa7\\\\u1b05-\\\\u1b33\\\\u1b45-\\\\u1b4c\\\\u1b83-\\\\u1ba0\\\\u1bae\\\\u1baf\\\\u1bba-\\\\u1be5\\\\u1c00-\\\\u1c23\\\\u1c4d-\\\\u1c4f\\\\u1c5a-\\\\u1c7d\\\\u1c80-\\\\u1c88\\\\u1c90-\\\\u1cba\\\\u1cbd-\\\\u1cbf\\\\u1ce9-\\\\u1cec\\\\u1cee-\\\\u1cf3\\\\u1cf5\\\\u1cf6\\\\u1cfa\\\\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-\\\\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-\\\\u312f\\\\u3131-\\\\u318e\\\\u31a0-\\\\u31bf\\\\u31f0-\\\\u31ff\\\\u3400-\\\\u4dbf\\\\u4e00-\\\\ua48c\\\\ua4d0-\\\\ua4fd\\\\ua500-\\\\ua60c\\\\ua610-\\\\ua61f\\\\ua62a\\\\ua62b\\\\ua640-\\\\ua66e\\\\ua67f-\\\\ua69d\\\\ua6a0-\\\\ua6ef\\\\ua717-\\\\ua71f\\\\ua722-\\\\ua788\\\\ua78b-\\\\ua7ca\\\\ua7d0\\\\ua7d1\\\\ua7d3\\\\ua7d5-\\\\ua7d9\\\\ua7f2-\\\\ua801\\\\ua803-\\\\ua805\\\\ua807-\\\\ua80a\\\\ua80c-\\\\ua822\\\\ua840-\\\\ua873\\\\ua882-\\\\ua8b3\\\\ua8f2-\\\\ua8f7\\\\ua8fb\\\\ua8fd\\\\ua8fe\\\\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-\\\\uab69\\\\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\\\";\\n/* prettier-ignore */\\nlet nonASCIIidentifierChars = \\\"\\\\u200c\\\\u200d\\\\xb7\\\\u0300-\\\\u036f\\\\u0387\\\\u0483-\\\\u0487\\\\u0591-\\\\u05bd\\\\u05bf\\\\u05c1\\\\u05c2\\\\u05c4\\\\u05c5\\\\u05c7\\\\u0610-\\\\u061a\\\\u064b-\\\\u0669\\\\u0670\\\\u06d6-\\\\u06dc\\\\u06df-\\\\u06e4\\\\u06e7\\\\u06e8\\\\u06ea-\\\\u06ed\\\\u06f0-\\\\u06f9\\\\u0711\\\\u0730-\\\\u074a\\\\u07a6-\\\\u07b0\\\\u07c0-\\\\u07c9\\\\u07eb-\\\\u07f3\\\\u07fd\\\\u0816-\\\\u0819\\\\u081b-\\\\u0823\\\\u0825-\\\\u0827\\\\u0829-\\\\u082d\\\\u0859-\\\\u085b\\\\u0898-\\\\u089f\\\\u08ca-\\\\u08e1\\\\u08e3-\\\\u0903\\\\u093a-\\\\u093c\\\\u093e-\\\\u094f\\\\u0951-\\\\u0957\\\\u0962\\\\u0963\\\\u0966-\\\\u096f\\\\u0981-\\\\u0983\\\\u09bc\\\\u09be-\\\\u09c4\\\\u09c7\\\\u09c8\\\\u09cb-\\\\u09cd\\\\u09d7\\\\u09e2\\\\u09e3\\\\u09e6-\\\\u09ef\\\\u09fe\\\\u0a01-\\\\u0a03\\\\u0a3c\\\\u0a3e-\\\\u0a42\\\\u0a47\\\\u0a48\\\\u0a4b-\\\\u0a4d\\\\u0a51\\\\u0a66-\\\\u0a71\\\\u0a75\\\\u0a81-\\\\u0a83\\\\u0abc\\\\u0abe-\\\\u0ac5\\\\u0ac7-\\\\u0ac9\\\\u0acb-\\\\u0acd\\\\u0ae2\\\\u0ae3\\\\u0ae6-\\\\u0aef\\\\u0afa-\\\\u0aff\\\\u0b01-\\\\u0b03\\\\u0b3c\\\\u0b3e-\\\\u0b44\\\\u0b47\\\\u0b48\\\\u0b4b-\\\\u0b4d\\\\u0b55-\\\\u0b57\\\\u0b62\\\\u0b63\\\\u0b66-\\\\u0b6f\\\\u0b82\\\\u0bbe-\\\\u0bc2\\\\u0bc6-\\\\u0bc8\\\\u0bca-\\\\u0bcd\\\\u0bd7\\\\u0be6-\\\\u0bef\\\\u0c00-\\\\u0c04\\\\u0c3c\\\\u0c3e-\\\\u0c44\\\\u0c46-\\\\u0c48\\\\u0c4a-\\\\u0c4d\\\\u0c55\\\\u0c56\\\\u0c62\\\\u0c63\\\\u0c66-\\\\u0c6f\\\\u0c81-\\\\u0c83\\\\u0cbc\\\\u0cbe-\\\\u0cc4\\\\u0cc6-\\\\u0cc8\\\\u0cca-\\\\u0ccd\\\\u0cd5\\\\u0cd6\\\\u0ce2\\\\u0ce3\\\\u0ce6-\\\\u0cef\\\\u0cf3\\\\u0d00-\\\\u0d03\\\\u0d3b\\\\u0d3c\\\\u0d3e-\\\\u0d44\\\\u0d46-\\\\u0d48\\\\u0d4a-\\\\u0d4d\\\\u0d57\\\\u0d62\\\\u0d63\\\\u0d66-\\\\u0d6f\\\\u0d81-\\\\u0d83\\\\u0dca\\\\u0dcf-\\\\u0dd4\\\\u0dd6\\\\u0dd8-\\\\u0ddf\\\\u0de6-\\\\u0def\\\\u0df2\\\\u0df3\\\\u0e31\\\\u0e34-\\\\u0e3a\\\\u0e47-\\\\u0e4e\\\\u0e50-\\\\u0e59\\\\u0eb1\\\\u0eb4-\\\\u0ebc\\\\u0ec8-\\\\u0ece\\\\u0ed0-\\\\u0ed9\\\\u0f18\\\\u0f19\\\\u0f20-\\\\u0f29\\\\u0f35\\\\u0f37\\\\u0f39\\\\u0f3e\\\\u0f3f\\\\u0f71-\\\\u0f84\\\\u0f86\\\\u0f87\\\\u0f8d-\\\\u0f97\\\\u0f99-\\\\u0fbc\\\\u0fc6\\\\u102b-\\\\u103e\\\\u1040-\\\\u1049\\\\u1056-\\\\u1059\\\\u105e-\\\\u1060\\\\u1062-\\\\u1064\\\\u1067-\\\\u106d\\\\u1071-\\\\u1074\\\\u1082-\\\\u108d\\\\u108f-\\\\u109d\\\\u135d-\\\\u135f\\\\u1369-\\\\u1371\\\\u1712-\\\\u1715\\\\u1732-\\\\u1734\\\\u1752\\\\u1753\\\\u1772\\\\u1773\\\\u17b4-\\\\u17d3\\\\u17dd\\\\u17e0-\\\\u17e9\\\\u180b-\\\\u180d\\\\u180f-\\\\u1819\\\\u18a9\\\\u1920-\\\\u192b\\\\u1930-\\\\u193b\\\\u1946-\\\\u194f\\\\u19d0-\\\\u19da\\\\u1a17-\\\\u1a1b\\\\u1a55-\\\\u1a5e\\\\u1a60-\\\\u1a7c\\\\u1a7f-\\\\u1a89\\\\u1a90-\\\\u1a99\\\\u1ab0-\\\\u1abd\\\\u1abf-\\\\u1ace\\\\u1b00-\\\\u1b04\\\\u1b34-\\\\u1b44\\\\u1b50-\\\\u1b59\\\\u1b6b-\\\\u1b73\\\\u1b80-\\\\u1b82\\\\u1ba1-\\\\u1bad\\\\u1bb0-\\\\u1bb9\\\\u1be6-\\\\u1bf3\\\\u1c24-\\\\u1c37\\\\u1c40-\\\\u1c49\\\\u1c50-\\\\u1c59\\\\u1cd0-\\\\u1cd2\\\\u1cd4-\\\\u1ce8\\\\u1ced\\\\u1cf4\\\\u1cf7-\\\\u1cf9\\\\u1dc0-\\\\u1dff\\\\u203f\\\\u2040\\\\u2054\\\\u20d0-\\\\u20dc\\\\u20e1\\\\u20e5-\\\\u20f0\\\\u2cef-\\\\u2cf1\\\\u2d7f\\\\u2de0-\\\\u2dff\\\\u302a-\\\\u302f\\\\u3099\\\\u309a\\\\ua620-\\\\ua629\\\\ua66f\\\\ua674-\\\\ua67d\\\\ua69e\\\\ua69f\\\\ua6f0\\\\ua6f1\\\\ua802\\\\ua806\\\\ua80b\\\\ua823-\\\\ua827\\\\ua82c\\\\ua880\\\\ua881\\\\ua8b4-\\\\ua8c5\\\\ua8d0-\\\\ua8d9\\\\ua8e0-\\\\ua8f1\\\\ua8ff-\\\\ua909\\\\ua926-\\\\ua92d\\\\ua947-\\\\ua953\\\\ua980-\\\\ua983\\\\ua9b3-\\\\ua9c0\\\\ua9d0-\\\\ua9d9\\\\ua9e5\\\\ua9f0-\\\\ua9f9\\\\uaa29-\\\\uaa36\\\\uaa43\\\\uaa4c\\\\uaa4d\\\\uaa50-\\\\uaa59\\\\uaa7b-\\\\uaa7d\\\\uaab0\\\\uaab2-\\\\uaab4\\\\uaab7\\\\uaab8\\\\uaabe\\\\uaabf\\\\uaac1\\\\uaaeb-\\\\uaaef\\\\uaaf5\\\\uaaf6\\\\uabe3-\\\\uabea\\\\uabec\\\\uabed\\\\uabf0-\\\\uabf9\\\\ufb1e\\\\ufe00-\\\\ufe0f\\\\ufe20-\\\\ufe2f\\\\ufe33\\\\ufe34\\\\ufe4d-\\\\ufe4f\\\\uff10-\\\\uff19\\\\uff3f\\\";\\n\\nconst nonASCIIidentifierStart = new RegExp(\\n  \\\"[\\\" + nonASCIIidentifierStartChars + \\\"]\\\",\\n);\\nconst nonASCIIidentifier = new RegExp(\\n  \\\"[\\\" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + \\\"]\\\",\\n);\\n\\nnonASCIIidentifierStartChars = nonASCIIidentifierChars = null;\\n\\n// These are a run-length and offset-encoded representation of the\\n// >0xffff code points that are a valid part of identifiers. The\\n// offset starts at 0x10000, and each pair of numbers represents an\\n// offset to the next range, and then a size of the range. They were\\n// generated by `scripts/generate-identifier-regex.js`.\\n/* prettier-ignore */\\nconst astralIdentifierStartCodes = [0,11,2,25,2,18,2,1,2,14,3,13,35,122,70,52,268,28,4,48,48,31,14,29,6,37,11,29,3,35,5,7,2,4,43,157,19,35,5,35,5,39,9,51,13,10,2,14,2,6,2,1,2,10,2,14,2,6,2,1,68,310,10,21,11,7,25,5,2,41,2,8,70,5,3,0,2,43,2,1,4,0,3,22,11,22,10,30,66,18,2,1,11,21,11,25,71,55,7,1,65,0,16,3,2,2,2,28,43,28,4,28,36,7,2,27,28,53,11,21,11,18,14,17,111,72,56,50,14,50,14,35,349,41,7,1,79,28,11,0,9,21,43,17,47,20,28,22,13,52,58,1,3,0,14,44,33,24,27,35,30,0,3,0,9,34,4,0,13,47,15,3,22,0,2,0,36,17,2,24,20,1,64,6,2,0,2,3,2,14,2,9,8,46,39,7,3,1,3,21,2,6,2,1,2,4,4,0,19,0,13,4,159,52,19,3,21,2,31,47,21,1,2,0,185,46,42,3,37,47,21,0,60,42,14,0,72,26,38,6,186,43,117,63,32,7,3,0,3,7,2,1,2,23,16,0,2,0,95,7,3,38,17,0,2,0,29,0,11,39,8,0,22,0,12,45,20,0,19,72,264,8,2,36,18,0,50,29,113,6,2,1,2,37,22,0,26,5,2,1,2,31,15,0,328,18,16,0,2,12,2,33,125,0,80,921,103,110,18,195,2637,96,16,1071,18,5,4026,582,8634,568,8,30,18,78,18,29,19,47,17,3,32,20,6,18,689,63,129,74,6,0,67,12,65,1,2,0,29,6135,9,1237,43,8,8936,3,2,6,2,1,2,290,16,0,30,2,3,0,15,3,9,395,2309,106,6,12,4,8,8,9,5991,84,2,70,2,1,3,0,3,1,3,3,2,11,2,0,2,6,2,64,2,3,3,7,2,6,2,27,2,3,2,4,2,0,4,6,2,339,3,24,2,24,2,30,2,24,2,30,2,24,2,30,2,24,2,30,2,24,2,7,1845,30,7,5,262,61,147,44,11,6,17,0,322,29,19,43,485,27,757,6,2,3,2,1,2,14,2,196,60,67,8,0,1205,3,2,26,2,1,2,0,3,0,2,9,2,3,2,0,2,0,7,0,5,0,2,0,2,0,2,2,2,1,2,0,3,0,2,0,2,0,2,0,2,0,2,1,2,0,3,3,2,6,2,3,2,3,2,0,2,9,2,16,6,2,2,4,2,16,4421,42719,33,4153,7,221,3,5761,15,7472,3104,541,1507,4938,6,4191];\\n/* prettier-ignore */\\nconst astralIdentifierCodes = [509,0,227,0,150,4,294,9,1368,2,2,1,6,3,41,2,5,0,166,1,574,3,9,9,370,1,81,2,71,10,50,3,123,2,54,14,32,10,3,1,11,3,46,10,8,0,46,9,7,2,37,13,2,9,6,1,45,0,13,2,49,13,9,3,2,11,83,11,7,0,3,0,158,11,6,9,7,3,56,1,2,6,3,1,3,2,10,0,11,1,3,6,4,4,193,17,10,9,5,0,82,19,13,9,214,6,3,8,28,1,83,16,16,9,82,12,9,9,84,14,5,9,243,14,166,9,71,5,2,1,3,3,2,0,2,1,13,9,120,6,3,6,4,0,29,9,41,6,2,3,9,0,10,10,47,15,406,7,2,7,17,9,57,21,2,13,123,5,4,0,2,1,2,6,2,0,9,9,49,4,2,1,2,4,9,9,330,3,10,1,2,0,49,6,4,4,14,9,5351,0,7,14,13835,9,87,9,39,4,60,6,26,9,1014,0,2,54,8,3,82,0,12,1,19628,1,4706,45,3,22,543,4,4,5,9,7,3,6,31,3,149,2,1418,49,513,54,5,49,9,0,15,0,23,4,2,14,1361,6,2,16,3,6,2,1,2,4,101,0,161,6,10,9,357,0,62,13,499,13,983,6,110,6,6,9,4759,9,787719,239];\\n\\n// This has a complexity linear to the value of the code. The\\n// assumption is that looking up astral identifier characters is\\n// rare.\\nfunction isInAstralSet(code: number, set: readonly number[]): boolean {\\n  let pos = 0x10000;\\n  for (let i = 0, length = set.length; i < length; i += 2) {\\n    pos += set[i];\\n    if (pos > code) return false;\\n\\n    pos += set[i + 1];\\n    if (pos >= code) return true;\\n  }\\n  return false;\\n}\\n\\n// Test whether a given character code starts an identifier.\\n\\nexport function isIdentifierStart(code: number): boolean {\\n  if (code < charCodes.uppercaseA) return code === charCodes.dollarSign;\\n  if (code <= charCodes.uppercaseZ) return true;\\n  if (code < charCodes.lowercaseA) return code === charCodes.underscore;\\n  if (code <= charCodes.lowercaseZ) return true;\\n  if (code <= 0xffff) {\\n    return (\\n      code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code))\\n    );\\n  }\\n  return isInAstralSet(code, astralIdentifierStartCodes);\\n}\\n\\n// Test whether a given character is part of an identifier.\\n\\nexport function isIdentifierChar(code: number): boolean {\\n  if (code < charCodes.digit0) return code === charCodes.dollarSign;\\n  if (code < charCodes.colon) return true;\\n  if (code < charCodes.uppercaseA) return false;\\n  if (code <= charCodes.uppercaseZ) return true;\\n  if (code < charCodes.lowercaseA) return code === charCodes.underscore;\\n  if (code <= charCodes.lowercaseZ) return true;\\n  if (code <= 0xffff) {\\n    return code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code));\\n  }\\n  return (\\n    isInAstralSet(code, astralIdentifierStartCodes) ||\\n    isInAstralSet(code, astralIdentifierCodes)\\n  );\\n}\\n\\n// Test whether a given string is a valid identifier name\\n\\nexport function isIdentifierName(name: string): boolean {\\n  let isFirst = true;\\n  for (let i = 0; i < name.length; i++) {\\n    // The implementation is based on\\n    // https://source.chromium.org/chromium/chromium/src/+/master:v8/src/builtins/builtins-string-gen.cc;l=1455;drc=221e331b49dfefadbc6fa40b0c68e6f97606d0b3;bpv=0;bpt=1\\n    // We reimplement `codePointAt` because `codePointAt` is a V8 builtin which is not inlined by TurboFan (as of M91)\\n    // since `name` is mostly ASCII, an inlined `charCodeAt` wins here\\n    let cp = name.charCodeAt(i);\\n    if ((cp & 0xfc00) === 0xd800 && i + 1 < name.length) {\\n      const trail = name.charCodeAt(++i);\\n      if ((trail & 0xfc00) === 0xdc00) {\\n        cp = 0x10000 + ((cp & 0x3ff) << 10) + (trail & 0x3ff);\\n      }\\n    }\\n    if (isFirst) {\\n      isFirst = false;\\n      if (!isIdentifierStart(cp)) {\\n        return false;\\n      }\\n    } else if (!isIdentifierChar(cp)) {\\n      return false;\\n    }\\n  }\\n  return !isFirst;\\n}\\n\"],\"mappings\":\";;;;;;;;AAWA,IAAIA,4BAA4B,GAAG,8qIAAnC;AAEA,IAAIC,uBAAuB,GAAG,mkFAA9B;AAEA,MAAMC,uBAAuB,GAAG,IAAIC,MAAJ,CAC9B,MAAMH,4BAAN,GAAqC,GADP,CAAhC;AAGA,MAAMI,kBAAkB,GAAG,IAAID,MAAJ,CACzB,MAAMH,4BAAN,GAAqCC,uBAArC,GAA+D,GADtC,CAA3B;AAIAD,4BAA4B,GAAGC,uBAAuB,GAAG,IAAzD;AAQA,MAAMI,0BAA0B,GAAG,CAAC,CAAD,EAAG,EAAH,EAAM,CAAN,EAAQ,EAAR,EAAW,CAAX,EAAa,EAAb,EAAgB,CAAhB,EAAkB,CAAlB,EAAoB,CAApB,EAAsB,EAAtB,EAAyB,CAAzB,EAA2B,EAA3B,EAA8B,EAA9B,EAAiC,GAAjC,EAAqC,EAArC,EAAwC,EAAxC,EAA2C,GAA3C,EAA+C,EAA/C,EAAkD,CAAlD,EAAoD,EAApD,EAAuD,EAAvD,EAA0D,EAA1D,EAA6D,EAA7D,EAAgE,EAAhE,EAAmE,CAAnE,EAAqE,EAArE,EAAwE,EAAxE,EAA2E,EAA3E,EAA8E,CAA9E,EAAgF,EAAhF,EAAmF,CAAnF,EAAqF,CAArF,EAAuF,CAAvF,EAAyF,CAAzF,EAA2F,EAA3F,EAA8F,GAA9F,EAAkG,EAAlG,EAAqG,EAArG,EAAwG,CAAxG,EAA0G,EAA1G,EAA6G,CAA7G,EAA+G,EAA/G,EAAkH,CAAlH,EAAoH,EAApH,EAAuH,EAAvH,EAA0H,EAA1H,EAA6H,CAA7H,EAA+H,EAA/H,EAAkI,CAAlI,EAAoI,CAApI,EAAsI,CAAtI,EAAwI,CAAxI,EAA0I,CAA1I,EAA4I,EAA5I,EAA+I,CAA/I,EAAiJ,EAAjJ,EAAoJ,CAApJ,EAAsJ,CAAtJ,EAAwJ,CAAxJ,EAA0J,CAA1J,EAA4J,EAA5J,EAA+J,GAA/J,EAAmK,EAAnK,EAAsK,EAAtK,EAAyK,EAAzK,EAA4K,CAA5K,EAA8K,EAA9K,EAAiL,CAAjL,EAAmL,CAAnL,EAAqL,EAArL,EAAwL,CAAxL,EAA0L,CAA1L,EAA4L,EAA5L,EAA+L,CAA/L,EAAiM,CAAjM,EAAmM,CAAnM,EAAqM,CAArM,EAAuM,EAAvM,EAA0M,CAA1M,EAA4M,CAA5M,EAA8M,CAA9M,EAAgN,CAAhN,EAAkN,CAAlN,EAAoN,EAApN,EAAuN,EAAvN,EAA0N,EAA1N,EAA6N,EAA7N,EAAgO,EAAhO,EAAmO,EAAnO,EAAsO,EAAtO,EAAyO,CAAzO,EAA2O,CAA3O,EAA6O,EAA7O,EAAgP,EAAhP,EAAmP,EAAnP,EAAsP,EAAtP,EAAyP,EAAzP,EAA4P,EAA5P,EAA+P,CAA/P,EAAiQ,CAAjQ,EAAmQ,EAAnQ,EAAsQ,CAAtQ,EAAwQ,EAAxQ,EAA2Q,CAA3Q,EAA6Q,CAA7Q,EAA+Q,CAA/Q,EAAiR,CAAjR,EAAmR,EAAnR,EAAsR,EAAtR,EAAyR,EAAzR,EAA4R,CAA5R,EAA8R,EAA9R,EAAiS,EAAjS,EAAoS,CAApS,EAAsS,CAAtS,EAAwS,EAAxS,EAA2S,EAA3S,EAA8S,EAA9S,EAAiT,EAAjT,EAAoT,EAApT,EAAuT,EAAvT,EAA0T,EAA1T,EAA6T,EAA7T,EAAgU,EAAhU,EAAmU,GAAnU,EAAuU,EAAvU,EAA0U,EAA1U,EAA6U,EAA7U,EAAgV,EAAhV,EAAmV,EAAnV,EAAsV,EAAtV,EAAyV,EAAzV,EAA4V,GAA5V,EAAgW,EAAhW,EAAmW,CAAnW,EAAqW,CAArW,EAAuW,EAAvW,EAA0W,EAA1W,EAA6W,EAA7W,EAAgX,CAAhX,EAAkX,CAAlX,EAAoX,EAApX,EAAuX,EAAvX,EAA0X,EAA1X,EAA6X,EAA7X,EAAgY,EAAhY,EAAmY,EAAnY,EAAsY,EAAtY,EAAyY,EAAzY,EAA4Y,EAA5Y,EAA+Y,EAA/Y,EAAkZ,CAAlZ,EAAoZ,CAApZ,EAAsZ,CAAtZ,EAAwZ,EAAxZ,EAA2Z,EAA3Z,EAA8Z,EAA9Z,EAAia,EAAja,EAAoa,EAApa,EAAua,EAAva,EAA0a,EAA1a,EAA6a,CAA7a,EAA+a,CAA/a,EAAib,CAAjb,EAAmb,CAAnb,EAAqb,EAArb,EAAwb,CAAxb,EAA0b,CAA1b,EAA4b,EAA5b,EAA+b,EAA/b,EAAkc,EAAlc,EAAqc,CAArc,EAAuc,EAAvc,EAA0c,CAA1c,EAA4c,CAA5c,EAA8c,CAA9c,EAAgd,EAAhd,EAAmd,EAAnd,EAAsd,CAAtd,EAAwd,EAAxd,EAA2d,EAA3d,EAA8d,CAA9d,EAAge,EAAhe,EAAme,CAAne,EAAqe,CAAre,EAAue,CAAve,EAAye,CAAze,EAA2e,CAA3e,EAA6e,CAA7e,EAA+e,EAA/e,EAAkf,CAAlf,EAAof,CAApf,EAAsf,CAAtf,EAAwf,EAAxf,EAA2f,EAA3f,EAA8f,CAA9f,EAAggB,CAAhgB,EAAkgB,CAAlgB,EAAogB,CAApgB,EAAsgB,EAAtgB,EAAygB,CAAzgB,EAA2gB,CAA3gB,EAA6gB,CAA7gB,EAA+gB,CAA/gB,EAAihB,CAAjhB,EAAmhB,CAAnhB,EAAqhB,CAArhB,EAAuhB,CAAvhB,EAAyhB,EAAzhB,EAA4hB,CAA5hB,EAA8hB,EAA9hB,EAAiiB,CAAjiB,EAAmiB,GAAniB,EAAuiB,EAAviB,EAA0iB,EAA1iB,EAA6iB,CAA7iB,EAA+iB,EAA/iB,EAAkjB,CAAljB,EAAojB,EAApjB,EAAujB,EAAvjB,EAA0jB,EAA1jB,EAA6jB,CAA7jB,EAA+jB,CAA/jB,EAAikB,CAAjkB,EAAmkB,GAAnkB,EAAukB,EAAvkB,EAA0kB,EAA1kB,EAA6kB,CAA7kB,EAA+kB,EAA/kB,EAAklB,EAAllB,EAAqlB,EAArlB,EAAwlB,CAAxlB,EAA0lB,EAA1lB,EAA6lB,EAA7lB,EAAgmB,EAAhmB,EAAmmB,CAAnmB,EAAqmB,EAArmB,EAAwmB,EAAxmB,EAA2mB,EAA3mB,EAA8mB,CAA9mB,EAAgnB,GAAhnB,EAAonB,EAApnB,EAAunB,GAAvnB,EAA2nB,EAA3nB,EAA8nB,EAA9nB,EAAioB,CAAjoB,EAAmoB,CAAnoB,EAAqoB,CAAroB,EAAuoB,CAAvoB,EAAyoB,CAAzoB,EAA2oB,CAA3oB,EAA6oB,CAA7oB,EAA+oB,CAA/oB,EAAipB,EAAjpB,EAAopB,EAAppB,EAAupB,CAAvpB,EAAypB,CAAzpB,EAA2pB,CAA3pB,EAA6pB,EAA7pB,EAAgqB,CAAhqB,EAAkqB,CAAlqB,EAAoqB,EAApqB,EAAuqB,EAAvqB,EAA0qB,CAA1qB,EAA4qB,CAA5qB,EAA8qB,CAA9qB,EAAgrB,EAAhrB,EAAmrB,CAAnrB,EAAqrB,EAArrB,EAAwrB,EAAxrB,EAA2rB,CAA3rB,EAA6rB,CAA7rB,EAA+rB,EAA/rB,EAAksB,CAAlsB,EAAosB,EAApsB,EAAusB,EAAvsB,EAA0sB,EAA1sB,EAA6sB,CAA7sB,EAA+sB,EAA/sB,EAAktB,EAAltB,EAAqtB,GAArtB,EAAytB,CAAztB,EAA2tB,CAA3tB,EAA6tB,EAA7tB,EAAguB,EAAhuB,EAAmuB,CAAnuB,EAAquB,EAAruB,EAAwuB,EAAxuB,EAA2uB,GAA3uB,EAA+uB,CAA/uB,EAAivB,CAAjvB,EAAmvB,CAAnvB,EAAqvB,CAArvB,EAAuvB,EAAvvB,EAA0vB,EAA1vB,EAA6vB,CAA7vB,EAA+vB,EAA/vB,EAAkwB,CAAlwB,EAAowB,CAApwB,EAAswB,CAAtwB,EAAwwB,CAAxwB,EAA0wB,EAA1wB,EAA6wB,EAA7wB,EAAgxB,CAAhxB,EAAkxB,GAAlxB,EAAsxB,EAAtxB,EAAyxB,EAAzxB,EAA4xB,CAA5xB,EAA8xB,CAA9xB,EAAgyB,EAAhyB,EAAmyB,CAAnyB,EAAqyB,EAAryB,EAAwyB,GAAxyB,EAA4yB,CAA5yB,EAA8yB,EAA9yB,EAAizB,GAAjzB,EAAqzB,GAArzB,EAAyzB,GAAzzB,EAA6zB,EAA7zB,EAAg0B,GAAh0B,EAAo0B,IAAp0B,EAAy0B,EAAz0B,EAA40B,EAA50B,EAA+0B,IAA/0B,EAAo1B,EAAp1B,EAAu1B,CAAv1B,EAAy1B,IAAz1B,EAA81B,GAA91B,EAAk2B,IAAl2B,EAAu2B,GAAv2B,EAA22B,CAA32B,EAA62B,EAA72B,EAAg3B,EAAh3B,EAAm3B,EAAn3B,EAAs3B,EAAt3B,EAAy3B,EAAz3B,EAA43B,EAA53B,EAA+3B,EAA/3B,EAAk4B,EAAl4B,EAAq4B,CAAr4B,EAAu4B,EAAv4B,EAA04B,EAA14B,EAA64B,CAA74B,EAA+4B,EAA/4B,EAAk5B,GAAl5B,EAAs5B,EAAt5B,EAAy5B,GAAz5B,EAA65B,EAA75B,EAAg6B,CAAh6B,EAAk6B,CAAl6B,EAAo6B,EAAp6B,EAAu6B,EAAv6B,EAA06B,EAA16B,EAA66B,CAA76B,EAA+6B,CAA/6B,EAAi7B,CAAj7B,EAAm7B,EAAn7B,EAAs7B,IAAt7B,EAA27B,CAA37B,EAA67B,IAA77B,EAAk8B,EAAl8B,EAAq8B,CAAr8B,EAAu8B,IAAv8B,EAA48B,CAA58B,EAA88B,CAA98B,EAAg9B,CAAh9B,EAAk9B,CAAl9B,EAAo9B,CAAp9B,EAAs9B,CAAt9B,EAAw9B,GAAx9B,EAA49B,EAA59B,EAA+9B,CAA/9B,EAAi+B,EAAj+B,EAAo+B,CAAp+B,EAAs+B,CAAt+B,EAAw+B,CAAx+B,EAA0+B,EAA1+B,EAA6+B,CAA7+B,EAA++B,CAA/+B,EAAi/B,GAAj/B,EAAq/B,IAAr/B,EAA0/B,GAA1/B,EAA8/B,CAA9/B,EAAggC,EAAhgC,EAAmgC,CAAngC,EAAqgC,CAArgC,EAAugC,CAAvgC,EAAygC,CAAzgC,EAA2gC,IAA3gC,EAAghC,EAAhhC,EAAmhC,CAAnhC,EAAqhC,EAArhC,EAAwhC,CAAxhC,EAA0hC,CAA1hC,EAA4hC,CAA5hC,EAA8hC,CAA9hC,EAAgiC,CAAhiC,EAAkiC,CAAliC,EAAoiC,CAApiC,EAAsiC,CAAtiC,EAAwiC,CAAxiC,EAA0iC,EAA1iC,EAA6iC,CAA7iC,EAA+iC,CAA/iC,EAAijC,CAAjjC,EAAmjC,CAAnjC,EAAqjC,CAArjC,EAAujC,EAAvjC,EAA0jC,CAA1jC,EAA4jC,CAA5jC,EAA8jC,CAA9jC,EAAgkC,CAAhkC,EAAkkC,CAAlkC,EAAokC,CAApkC,EAAskC,CAAtkC,EAAwkC,EAAxkC,EAA2kC,CAA3kC,EAA6kC,CAA7kC,EAA+kC,CAA/kC,EAAilC,CAAjlC,EAAmlC,CAAnlC,EAAqlC,CAArlC,EAAulC,CAAvlC,EAAylC,CAAzlC,EAA2lC,CAA3lC,EAA6lC,GAA7lC,EAAimC,CAAjmC,EAAmmC,EAAnmC,EAAsmC,CAAtmC,EAAwmC,EAAxmC,EAA2mC,CAA3mC,EAA6mC,EAA7mC,EAAgnC,CAAhnC,EAAknC,EAAlnC,EAAqnC,CAArnC,EAAunC,EAAvnC,EAA0nC,CAA1nC,EAA4nC,EAA5nC,EAA+nC,CAA/nC,EAAioC,EAAjoC,EAAooC,CAApoC,EAAsoC,EAAtoC,EAAyoC,CAAzoC,EAA2oC,EAA3oC,EAA8oC,CAA9oC,EAAgpC,EAAhpC,EAAmpC,CAAnpC,EAAqpC,CAArpC,EAAupC,IAAvpC,EAA4pC,EAA5pC,EAA+pC,CAA/pC,EAAiqC,CAAjqC,EAAmqC,GAAnqC,EAAuqC,EAAvqC,EAA0qC,GAA1qC,EAA8qC,EAA9qC,EAAirC,EAAjrC,EAAorC,CAAprC,EAAsrC,EAAtrC,EAAyrC,CAAzrC,EAA2rC,GAA3rC,EAA+rC,EAA/rC,EAAksC,EAAlsC,EAAqsC,EAArsC,EAAwsC,GAAxsC,EAA4sC,EAA5sC,EAA+sC,GAA/sC,EAAmtC,CAAntC,EAAqtC,CAArtC,EAAutC,CAAvtC,EAAytC,CAAztC,EAA2tC,CAA3tC,EAA6tC,CAA7tC,EAA+tC,EAA/tC,EAAkuC,CAAluC,EAAouC,GAApuC,EAAwuC,EAAxuC,EAA2uC,EAA3uC,EAA8uC,CAA9uC,EAAgvC,CAAhvC,EAAkvC,IAAlvC,EAAuvC,CAAvvC,EAAyvC,CAAzvC,EAA2vC,EAA3vC,EAA8vC,CAA9vC,EAAgwC,CAAhwC,EAAkwC,CAAlwC,EAAowC,CAApwC,EAAswC,CAAtwC,EAAwwC,CAAxwC,EAA0wC,CAA1wC,EAA4wC,CAA5wC,EAA8wC,CAA9wC,EAAgxC,CAAhxC,EAAkxC,CAAlxC,EAAoxC,CAApxC,EAAsxC,CAAtxC,EAAwxC,CAAxxC,EAA0xC,CAA1xC,EAA4xC,CAA5xC,EAA8xC,CAA9xC,EAAgyC,CAAhyC,EAAkyC,CAAlyC,EAAoyC,CAApyC,EAAsyC,CAAtyC,EAAwyC,CAAxyC,EAA0yC,CAA1yC,EAA4yC,CAA5yC,EAA8yC,CAA9yC,EAAgzC,CAAhzC,EAAkzC,CAAlzC,EAAozC,CAApzC,EAAszC,CAAtzC,EAAwzC,CAAxzC,EAA0zC,CAA1zC,EAA4zC,CAA5zC,EAA8zC,CAA9zC,EAAg0C,CAAh0C,EAAk0C,CAAl0C,EAAo0C,CAAp0C,EAAs0C,CAAt0C,EAAw0C,CAAx0C,EAA00C,CAA10C,EAA40C,CAA50C,EAA80C,CAA90C,EAAg1C,CAAh1C,EAAk1C,CAAl1C,EAAo1C,CAAp1C,EAAs1C,CAAt1C,EAAw1C,CAAx1C,EAA01C,CAA11C,EAA41C,CAA51C,EAA81C,CAA91C,EAAg2C,CAAh2C,EAAk2C,CAAl2C,EAAo2C,CAAp2C,EAAs2C,CAAt2C,EAAw2C,CAAx2C,EAA02C,CAA12C,EAA42C,EAA52C,EAA+2C,CAA/2C,EAAi3C,CAAj3C,EAAm3C,CAAn3C,EAAq3C,CAAr3C,EAAu3C,CAAv3C,EAAy3C,EAAz3C,EAA43C,IAA53C,EAAi4C,KAAj4C,EAAu4C,EAAv4C,EAA04C,IAA14C,EAA+4C,CAA/4C,EAAi5C,GAAj5C,EAAq5C,CAAr5C,EAAu5C,IAAv5C,EAA45C,EAA55C,EAA+5C,IAA/5C,EAAo6C,IAAp6C,EAAy6C,GAAz6C,EAA66C,IAA76C,EAAk7C,IAAl7C,EAAu7C,CAAv7C,EAAy7C,IAAz7C,CAAnC;AAEA,MAAMC,qBAAqB,GAAG,CAAC,GAAD,EAAK,CAAL,EAAO,GAAP,EAAW,CAAX,EAAa,GAAb,EAAiB,CAAjB,EAAmB,GAAnB,EAAuB,CAAvB,EAAyB,IAAzB,EAA8B,CAA9B,EAAgC,CAAhC,EAAkC,CAAlC,EAAoC,CAApC,EAAsC,CAAtC,EAAwC,EAAxC,EAA2C,CAA3C,EAA6C,CAA7C,EAA+C,CAA/C,EAAiD,GAAjD,EAAqD,CAArD,EAAuD,GAAvD,EAA2D,CAA3D,EAA6D,CAA7D,EAA+D,CAA/D,EAAiE,GAAjE,EAAqE,CAArE,EAAuE,EAAvE,EAA0E,CAA1E,EAA4E,EAA5E,EAA+E,EAA/E,EAAkF,EAAlF,EAAqF,CAArF,EAAuF,GAAvF,EAA2F,CAA3F,EAA6F,EAA7F,EAAgG,EAAhG,EAAmG,EAAnG,EAAsG,EAAtG,EAAyG,CAAzG,EAA2G,CAA3G,EAA6G,EAA7G,EAAgH,CAAhH,EAAkH,EAAlH,EAAqH,EAArH,EAAwH,CAAxH,EAA0H,CAA1H,EAA4H,EAA5H,EAA+H,CAA/H,EAAiI,CAAjI,EAAmI,CAAnI,EAAqI,EAArI,EAAwI,EAAxI,EAA2I,CAA3I,EAA6I,CAA7I,EAA+I,CAA/I,EAAiJ,CAAjJ,EAAmJ,EAAnJ,EAAsJ,CAAtJ,EAAwJ,EAAxJ,EAA2J,CAA3J,EAA6J,EAA7J,EAAgK,EAAhK,EAAmK,CAAnK,EAAqK,CAArK,EAAuK,CAAvK,EAAyK,EAAzK,EAA4K,EAA5K,EAA+K,EAA/K,EAAkL,CAAlL,EAAoL,CAApL,EAAsL,CAAtL,EAAwL,CAAxL,EAA0L,GAA1L,EAA8L,EAA9L,EAAiM,CAAjM,EAAmM,CAAnM,EAAqM,CAArM,EAAuM,CAAvM,EAAyM,EAAzM,EAA4M,CAA5M,EAA8M,CAA9M,EAAgN,CAAhN,EAAkN,CAAlN,EAAoN,CAApN,EAAsN,CAAtN,EAAwN,CAAxN,EAA0N,EAA1N,EAA6N,CAA7N,EAA+N,EAA/N,EAAkO,CAAlO,EAAoO,CAApO,EAAsO,CAAtO,EAAwO,CAAxO,EAA0O,CAA1O,EAA4O,GAA5O,EAAgP,EAAhP,EAAmP,EAAnP,EAAsP,CAAtP,EAAwP,CAAxP,EAA0P,CAA1P,EAA4P,EAA5P,EAA+P,EAA/P,EAAkQ,EAAlQ,EAAqQ,CAArQ,EAAuQ,GAAvQ,EAA2Q,CAA3Q,EAA6Q,CAA7Q,EAA+Q,CAA/Q,EAAiR,EAAjR,EAAoR,CAApR,EAAsR,EAAtR,EAAyR,EAAzR,EAA4R,EAA5R,EAA+R,CAA/R,EAAiS,EAAjS,EAAoS,EAApS,EAAuS,CAAvS,EAAyS,CAAzS,EAA2S,EAA3S,EAA8S,EAA9S,EAAiT,CAAjT,EAAmT,CAAnT,EAAqT,GAArT,EAAyT,EAAzT,EAA4T,GAA5T,EAAgU,CAAhU,EAAkU,EAAlU,EAAqU,CAArU,EAAuU,CAAvU,EAAyU,CAAzU,EAA2U,CAA3U,EAA6U,CAA7U,EAA+U,CAA/U,EAAiV,CAAjV,EAAmV,CAAnV,EAAqV,CAArV,EAAuV,EAAvV,EAA0V,CAA1V,EAA4V,GAA5V,EAAgW,CAAhW,EAAkW,CAAlW,EAAoW,CAApW,EAAsW,CAAtW,EAAwW,CAAxW,EAA0W,EAA1W,EAA6W,CAA7W,EAA+W,EAA/W,EAAkX,CAAlX,EAAoX,CAApX,EAAsX,CAAtX,EAAwX,CAAxX,EAA0X,CAA1X,EAA4X,EAA5X,EAA+X,EAA/X,EAAkY,EAAlY,EAAqY,EAArY,EAAwY,GAAxY,EAA4Y,CAA5Y,EAA8Y,CAA9Y,EAAgZ,CAAhZ,EAAkZ,EAAlZ,EAAqZ,CAArZ,EAAuZ,EAAvZ,EAA0Z,EAA1Z,EAA6Z,CAA7Z,EAA+Z,EAA/Z,EAAka,GAAla,EAAsa,CAAta,EAAwa,CAAxa,EAA0a,CAA1a,EAA4a,CAA5a,EAA8a,CAA9a,EAAgb,CAAhb,EAAkb,CAAlb,EAAob,CAApb,EAAsb,CAAtb,EAAwb,CAAxb,EAA0b,CAA1b,EAA4b,EAA5b,EAA+b,CAA/b,EAAic,CAAjc,EAAmc,CAAnc,EAAqc,CAArc,EAAuc,CAAvc,EAAyc,CAAzc,EAA2c,CAA3c,EAA6c,GAA7c,EAAid,CAAjd,EAAmd,EAAnd,EAAsd,CAAtd,EAAwd,CAAxd,EAA0d,CAA1d,EAA4d,EAA5d,EAA+d,CAA/d,EAAie,CAAje,EAAme,CAAne,EAAqe,EAAre,EAAwe,CAAxe,EAA0e,IAA1e,EAA+e,CAA/e,EAAif,CAAjf,EAAmf,EAAnf,EAAsf,KAAtf,EAA4f,CAA5f,EAA8f,EAA9f,EAAigB,CAAjgB,EAAmgB,EAAngB,EAAsgB,CAAtgB,EAAwgB,EAAxgB,EAA2gB,CAA3gB,EAA6gB,EAA7gB,EAAghB,CAAhhB,EAAkhB,IAAlhB,EAAuhB,CAAvhB,EAAyhB,CAAzhB,EAA2hB,EAA3hB,EAA8hB,CAA9hB,EAAgiB,CAAhiB,EAAkiB,EAAliB,EAAqiB,CAAriB,EAAuiB,EAAviB,EAA0iB,CAA1iB,EAA4iB,KAA5iB,EAAkjB,CAAljB,EAAojB,IAApjB,EAAyjB,EAAzjB,EAA4jB,CAA5jB,EAA8jB,EAA9jB,EAAikB,GAAjkB,EAAqkB,CAArkB,EAAukB,CAAvkB,EAAykB,CAAzkB,EAA2kB,CAA3kB,EAA6kB,CAA7kB,EAA+kB,CAA/kB,EAAilB,CAAjlB,EAAmlB,EAAnlB,EAAslB,CAAtlB,EAAwlB,GAAxlB,EAA4lB,CAA5lB,EAA8lB,IAA9lB,EAAmmB,EAAnmB,EAAsmB,GAAtmB,EAA0mB,EAA1mB,EAA6mB,CAA7mB,EAA+mB,EAA/mB,EAAknB,CAAlnB,EAAonB,CAApnB,EAAsnB,EAAtnB,EAAynB,CAAznB,EAA2nB,EAA3nB,EAA8nB,CAA9nB,EAAgoB,CAAhoB,EAAkoB,EAAloB,EAAqoB,IAAroB,EAA0oB,CAA1oB,EAA4oB,CAA5oB,EAA8oB,EAA9oB,EAAipB,CAAjpB,EAAmpB,CAAnpB,EAAqpB,CAArpB,EAAupB,CAAvpB,EAAypB,CAAzpB,EAA2pB,CAA3pB,EAA6pB,GAA7pB,EAAiqB,CAAjqB,EAAmqB,GAAnqB,EAAuqB,CAAvqB,EAAyqB,EAAzqB,EAA4qB,CAA5qB,EAA8qB,GAA9qB,EAAkrB,CAAlrB,EAAorB,EAAprB,EAAurB,EAAvrB,EAA0rB,GAA1rB,EAA8rB,EAA9rB,EAAisB,GAAjsB,EAAqsB,CAArsB,EAAusB,GAAvsB,EAA2sB,CAA3sB,EAA6sB,CAA7sB,EAA+sB,CAA/sB,EAAitB,IAAjtB,EAAstB,CAAttB,EAAwtB,MAAxtB,EAA+tB,GAA/tB,CAA9B;;AAKA,SAASC,aAAT,CAAuBC,IAAvB,EAAqCC,GAArC,EAAsE;EACpE,IAAIC,GAAG,GAAG,OAAV;;EACA,KAAK,IAAIC,CAAC,GAAG,CAAR,EAAWC,MAAM,GAAGH,GAAG,CAACG,MAA7B,EAAqCD,CAAC,GAAGC,MAAzC,EAAiDD,CAAC,IAAI,CAAtD,EAAyD;IACvDD,GAAG,IAAID,GAAG,CAACE,CAAD,CAAV;IACA,IAAID,GAAG,GAAGF,IAAV,EAAgB,OAAO,KAAP;IAEhBE,GAAG,IAAID,GAAG,CAACE,CAAC,GAAG,CAAL,CAAV;IACA,IAAID,GAAG,IAAIF,IAAX,EAAiB,OAAO,IAAP;EAClB;;EACD,OAAO,KAAP;AACD;;AAIM,SAASK,iBAAT,CAA2BL,IAA3B,EAAkD;EACvD,IAAIA,IAAI,KAAR,EAAiC,OAAOA,IAAI,OAAX;EACjC,IAAIA,IAAI,MAAR,EAAkC,OAAO,IAAP;EAClC,IAAIA,IAAI,KAAR,EAAiC,OAAOA,IAAI,OAAX;EACjC,IAAIA,IAAI,OAAR,EAAkC,OAAO,IAAP;;EAClC,IAAIA,IAAI,IAAI,MAAZ,EAAoB;IAClB,OACEA,IAAI,IAAI,IAAR,IAAgBN,uBAAuB,CAACY,IAAxB,CAA6BC,MAAM,CAACC,YAAP,CAAoBR,IAApB,CAA7B,CADlB;EAGD;;EACD,OAAOD,aAAa,CAACC,IAAD,EAAOH,0BAAP,CAApB;AACD;;AAIM,SAASY,gBAAT,CAA0BT,IAA1B,EAAiD;EACtD,IAAIA,IAAI,KAAR,EAA6B,OAAOA,IAAI,OAAX;EAC7B,IAAIA,IAAI,KAAR,EAA4B,OAAO,IAAP;EAC5B,IAAIA,IAAI,KAAR,EAAiC,OAAO,KAAP;EACjC,IAAIA,IAAI,MAAR,EAAkC,OAAO,IAAP;EAClC,IAAIA,IAAI,KAAR,EAAiC,OAAOA,IAAI,OAAX;EACjC,IAAIA,IAAI,OAAR,EAAkC,OAAO,IAAP;;EAClC,IAAIA,IAAI,IAAI,MAAZ,EAAoB;IAClB,OAAOA,IAAI,IAAI,IAAR,IAAgBJ,kBAAkB,CAACU,IAAnB,CAAwBC,MAAM,CAACC,YAAP,CAAoBR,IAApB,CAAxB,CAAvB;EACD;;EACD,OACED,aAAa,CAACC,IAAD,EAAOH,0BAAP,CAAb,IACAE,aAAa,CAACC,IAAD,EAAOF,qBAAP,CAFf;AAID;;AAIM,SAASY,gBAAT,CAA0BC,IAA1B,EAAiD;EACtD,IAAIC,OAAO,GAAG,IAAd;;EACA,KAAK,IAAIT,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGQ,IAAI,CAACP,MAAzB,EAAiCD,CAAC,EAAlC,EAAsC;IAKpC,IAAIU,EAAE,GAAGF,IAAI,CAACG,UAAL,CAAgBX,CAAhB,CAAT;;IACA,IAAI,CAACU,EAAE,GAAG,MAAN,MAAkB,MAAlB,IAA4BV,CAAC,GAAG,CAAJ,GAAQQ,IAAI,CAACP,MAA7C,EAAqD;MACnD,MAAMW,KAAK,GAAGJ,IAAI,CAACG,UAAL,CAAgB,EAAEX,CAAlB,CAAd;;MACA,IAAI,CAACY,KAAK,GAAG,MAAT,MAAqB,MAAzB,EAAiC;QAC/BF,EAAE,GAAG,WAAW,CAACA,EAAE,GAAG,KAAN,KAAgB,EAA3B,KAAkCE,KAAK,GAAG,KAA1C,CAAL;MACD;IACF;;IACD,IAAIH,OAAJ,EAAa;MACXA,OAAO,GAAG,KAAV;;MACA,IAAI,CAACP,iBAAiB,CAACQ,EAAD,CAAtB,EAA4B;QAC1B,OAAO,KAAP;MACD;IACF,CALD,MAKO,IAAI,CAACJ,gBAAgB,CAACI,EAAD,CAArB,EAA2B;MAChC,OAAO,KAAP;IACD;EACF;;EACD,OAAO,CAACD,OAAR;AACD\"}/lib/keyword.js\u0006.\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.isKeyword = isKeyword;\nexports.isReservedWord = isReservedWord;\nexports.isStrictBindOnlyReservedWord = isStrictBindOnlyReservedWord;\nexports.isStrictBindReservedWord = isStrictBindReservedWord;\nexports.isStrictReservedWord = isStrictReservedWord;\nconst reservedWords = {\n  keyword: [\"break\", \"case\", \"catch\", \"continue\", \"debugger\", \"default\", \"do\", \"else\", \"finally\", \"for\", \"function\", \"if\", \"return\", \"switch\", \"throw\", \"try\", \"var\", \"const\", \"while\", \"with\", \"new\", \"this\", \"super\", \"class\", \"extends\", \"export\", \"import\", \"null\", \"true\", \"false\", \"in\", \"instanceof\", \"typeof\", \"void\", \"delete\"],\n  strict: [\"implements\", \"interface\", \"let\", \"package\", \"private\", \"protected\", \"public\", \"static\", \"yield\"],\n  strictBind: [\"eval\", \"arguments\"]\n};\nconst keywords = new Set(reservedWords.keyword);\nconst reservedWordsStrictSet = new Set(reservedWords.strict);\nconst reservedWordsStrictBindSet = new Set(reservedWords.strictBind);\n\nfunction isReservedWord(word, inModule) {\n  return inModule && word === \"await\" || word === \"enum\";\n}\n\nfunction isStrictReservedWord(word, inModule) {\n  return isReservedWord(word, inModule) || reservedWordsStrictSet.has(word);\n}\n\nfunction isStrictBindOnlyReservedWord(word) {\n  return reservedWordsStrictBindSet.has(word);\n}\n\nfunction isStrictBindReservedWord(word, inModule) {\n  return isStrictReservedWord(word, inModule) || isStrictBindOnlyReservedWord(word);\n}\n\nfunction isKeyword(word) {\n  return keywords.has(word);\n}\n\n//# sourceMappingURL=keyword.js.map\n/lib/keyword.js.map\u000f6{\"version\":3,\"names\":[\"reservedWords\",\"keyword\",\"strict\",\"strictBind\",\"keywords\",\"Set\",\"reservedWordsStrictSet\",\"reservedWordsStrictBindSet\",\"isReservedWord\",\"word\",\"inModule\",\"isStrictReservedWord\",\"has\",\"isStrictBindOnlyReservedWord\",\"isStrictBindReservedWord\",\"isKeyword\"],\"sources\":[\"../src/keyword.ts\"],\"sourcesContent\":[\"const reservedWords = {\\n  keyword: [\\n    \\\"break\\\",\\n    \\\"case\\\",\\n    \\\"catch\\\",\\n    \\\"continue\\\",\\n    \\\"debugger\\\",\\n    \\\"default\\\",\\n    \\\"do\\\",\\n    \\\"else\\\",\\n    \\\"finally\\\",\\n    \\\"for\\\",\\n    \\\"function\\\",\\n    \\\"if\\\",\\n    \\\"return\\\",\\n    \\\"switch\\\",\\n    \\\"throw\\\",\\n    \\\"try\\\",\\n    \\\"var\\\",\\n    \\\"const\\\",\\n    \\\"while\\\",\\n    \\\"with\\\",\\n    \\\"new\\\",\\n    \\\"this\\\",\\n    \\\"super\\\",\\n    \\\"class\\\",\\n    \\\"extends\\\",\\n    \\\"export\\\",\\n    \\\"import\\\",\\n    \\\"null\\\",\\n    \\\"true\\\",\\n    \\\"false\\\",\\n    \\\"in\\\",\\n    \\\"instanceof\\\",\\n    \\\"typeof\\\",\\n    \\\"void\\\",\\n    \\\"delete\\\",\\n  ],\\n  strict: [\\n    \\\"implements\\\",\\n    \\\"interface\\\",\\n    \\\"let\\\",\\n    \\\"package\\\",\\n    \\\"private\\\",\\n    \\\"protected\\\",\\n    \\\"public\\\",\\n    \\\"static\\\",\\n    \\\"yield\\\",\\n  ],\\n  strictBind: [\\\"eval\\\", \\\"arguments\\\"],\\n};\\nconst keywords = new Set(reservedWords.keyword);\\nconst reservedWordsStrictSet = new Set(reservedWords.strict);\\nconst reservedWordsStrictBindSet = new Set(reservedWords.strictBind);\\n\\n/**\\n * Checks if word is a reserved word in non-strict mode\\n */\\nexport function isReservedWord(word: string, inModule: boolean): boolean {\\n  return (inModule && word === \\\"await\\\") || word === \\\"enum\\\";\\n}\\n\\n/**\\n * Checks if word is a reserved word in non-binding strict mode\\n *\\n * Includes non-strict reserved words\\n */\\nexport function isStrictReservedWord(word: string, inModule: boolean): boolean {\\n  return isReservedWord(word, inModule) || reservedWordsStrictSet.has(word);\\n}\\n\\n/**\\n * Checks if word is a reserved word in binding strict mode, but it is allowed as\\n * a normal identifier.\\n */\\nexport function isStrictBindOnlyReservedWord(word: string): boolean {\\n  return reservedWordsStrictBindSet.has(word);\\n}\\n\\n/**\\n * Checks if word is a reserved word in binding strict mode\\n *\\n * Includes non-strict reserved words and non-binding strict reserved words\\n */\\nexport function isStrictBindReservedWord(\\n  word: string,\\n  inModule: boolean,\\n): boolean {\\n  return (\\n    isStrictReservedWord(word, inModule) || isStrictBindOnlyReservedWord(word)\\n  );\\n}\\n\\nexport function isKeyword(word: string): boolean {\\n  return keywords.has(word);\\n}\\n\"],\"mappings\":\";;;;;;;;;;AAAA,MAAMA,aAAa,GAAG;EACpBC,OAAO,EAAE,CACP,OADO,EAEP,MAFO,EAGP,OAHO,EAIP,UAJO,EAKP,UALO,EAMP,SANO,EAOP,IAPO,EAQP,MARO,EASP,SATO,EAUP,KAVO,EAWP,UAXO,EAYP,IAZO,EAaP,QAbO,EAcP,QAdO,EAeP,OAfO,EAgBP,KAhBO,EAiBP,KAjBO,EAkBP,OAlBO,EAmBP,OAnBO,EAoBP,MApBO,EAqBP,KArBO,EAsBP,MAtBO,EAuBP,OAvBO,EAwBP,OAxBO,EAyBP,SAzBO,EA0BP,QA1BO,EA2BP,QA3BO,EA4BP,MA5BO,EA6BP,MA7BO,EA8BP,OA9BO,EA+BP,IA/BO,EAgCP,YAhCO,EAiCP,QAjCO,EAkCP,MAlCO,EAmCP,QAnCO,CADW;EAsCpBC,MAAM,EAAE,CACN,YADM,EAEN,WAFM,EAGN,KAHM,EAIN,SAJM,EAKN,SALM,EAMN,WANM,EAON,QAPM,EAQN,QARM,EASN,OATM,CAtCY;EAiDpBC,UAAU,EAAE,CAAC,MAAD,EAAS,WAAT;AAjDQ,CAAtB;AAmDA,MAAMC,QAAQ,GAAG,IAAIC,GAAJ,CAAQL,aAAa,CAACC,OAAtB,CAAjB;AACA,MAAMK,sBAAsB,GAAG,IAAID,GAAJ,CAAQL,aAAa,CAACE,MAAtB,CAA/B;AACA,MAAMK,0BAA0B,GAAG,IAAIF,GAAJ,CAAQL,aAAa,CAACG,UAAtB,CAAnC;;AAKO,SAASK,cAAT,CAAwBC,IAAxB,EAAsCC,QAAtC,EAAkE;EACvE,OAAQA,QAAQ,IAAID,IAAI,KAAK,OAAtB,IAAkCA,IAAI,KAAK,MAAlD;AACD;;AAOM,SAASE,oBAAT,CAA8BF,IAA9B,EAA4CC,QAA5C,EAAwE;EAC7E,OAAOF,cAAc,CAACC,IAAD,EAAOC,QAAP,CAAd,IAAkCJ,sBAAsB,CAACM,GAAvB,CAA2BH,IAA3B,CAAzC;AACD;;AAMM,SAASI,4BAAT,CAAsCJ,IAAtC,EAA6D;EAClE,OAAOF,0BAA0B,CAACK,GAA3B,CAA+BH,IAA/B,CAAP;AACD;;AAOM,SAASK,wBAAT,CACLL,IADK,EAELC,QAFK,EAGI;EACT,OACEC,oBAAoB,CAACF,IAAD,EAAOC,QAAP,CAApB,IAAwCG,4BAA4B,CAACJ,IAAD,CADtE;AAGD;;AAEM,SAASM,SAAT,CAAmBN,IAAnB,EAA0C;EAC/C,OAAOL,QAAQ,CAACQ,GAAT,CAAaH,IAAb,CAAP;AACD\"}/package.json\u0002{\n  \"name\": \"@babel/helper-validator-identifier\",\n  \"version\": \"7.19.1\",\n  \"description\": \"Validate identifier/keywords name\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/babel/babel.git\",\n    \"directory\": \"packages/babel-helper-validator-identifier\"\n  },\n  \"license\": \"MIT\",\n  \"publishConfig\": {\n    \"access\": \"public\"\n  },\n  \"main\": \"./lib/index.js\",\n  \"exports\": {\n    \".\": \"./lib/index.js\",\n    \"./package.json\": \"./package.json\"\n  },\n  \"devDependencies\": {\n    \"@unicode/unicode-15.0.0\": \"^1.3.1\",\n    \"charcodes\": \"^0.2.0\"\n  },\n  \"engines\": {\n    \"node\": \">=6.9.0\"\n  },\n  \"author\": \"The Babel Team (https://babel.dev/team)\",\n  \"type\": \"commonjs\"\n}/lib/index.js.map\u0001{\"version\":3,\"names\":[],\"sources\":[\"../src/index.ts\"],\"sourcesContent\":[\"export {\\n  isIdentifierName,\\n  isIdentifierChar,\\n  isIdentifierStart,\\n} from \\\"./identifier\\\";\\nexport {\\n  isReservedWord,\\n  isStrictBindOnlyReservedWord,\\n  isStrictBindReservedWord,\\n  isStrictReservedWord,\\n  isKeyword,\\n} from \\\"./keyword\\\";\\n\"],\"mappings\":\";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AAKA\"}/README.md\u0001t# @babel/helper-validator-identifier\n\n> Validate identifier/keywords name\n\nSee our website [@babel/helper-validator-identifier](https://babeljs.io/docs/en/babel-helper-validator-identifier) for more information.\n\n## Install\n\nUsing npm:\n\n```sh\nnpm install --save @babel/helper-validator-identifier\n```\n\nor using yarn:\n\n```sh\nyarn add @babel/helper-validator-identifier\n```\n/LICENSE\u0004RMIT License\n\nCopyright (c) 2014-present Sebastian McKenzie and other contributors\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n%/scripts/generate-identifier-regex.js\u0007\"use strict\";\n\n// Always use the latest available version of Unicode!\n// https://tc39.github.io/ecma262/#sec-conformance\nconst version = \"15.0.0\";\n\nconst start = require(\"@unicode/unicode-\" +\n  version +\n  \"/Binary_Property/ID_Start/code-points.js\").filter(function (ch) {\n  return ch > 0x7f;\n});\nlet last = -1;\nconst cont = [0x200c, 0x200d].concat(\n  require(\"@unicode/unicode-\" +\n    version +\n    \"/Binary_Property/ID_Continue/code-points.js\").filter(function (ch) {\n    return ch > 0x7f && search(start, ch, last + 1) == -1;\n  })\n);\n\nfunction search(arr, ch, starting) {\n  for (let i = starting; arr[i] <= ch && i < arr.length; last = i++) {\n    if (arr[i] === ch) return i;\n  }\n  return -1;\n}\n\nfunction pad(str, width) {\n  while (str.length < width) str = \"0\" + str;\n  return str;\n}\n\nfunction esc(code) {\n  const hex = code.toString(16);\n  if (hex.length <= 2) return \"\\\\x\" + pad(hex, 2);\n  else return \"\\\\u\" + pad(hex, 4);\n}\n\nfunction generate(chars) {\n  const astral = [];\n  let re = \"\";\n  for (let i = 0, at = 0x10000; i < chars.length; i++) {\n    const from = chars[i];\n    let to = from;\n    while (i < chars.length - 1 && chars[i + 1] == to + 1) {\n      i++;\n      to++;\n    }\n    if (to <= 0xffff) {\n      if (from == to) re += esc(from);\n      else if (from + 1 == to) re += esc(from) + esc(to);\n      else re += esc(from) + \"-\" + esc(to);\n    } else {\n      astral.push(from - at, to - from);\n      at = to;\n    }\n  }\n  return { nonASCII: re, astral: astral };\n}\n\nconst startData = generate(start);\nconst contData = generate(cont);\n\nconsole.log(\"/* prettier-ignore */\");\nconsole.log('let nonASCIIidentifierStartChars = \"' + startData.nonASCII + '\";');\nconsole.log(\"/* prettier-ignore */\");\nconsole.log('let nonASCIIidentifierChars = \"' + contData.nonASCII + '\";');\nconsole.log(\"/* prettier-ignore */\");\nconsole.log(\n  \"const astralIdentifierStartCodes = \" + JSON.stringify(startData.astral) + \";\"\n);\nconsole.log(\"/* prettier-ignore */\");\nconsole.log(\n  \"const astralIdentifierCodes = \" + JSON.stringify(contData.astral) + \";\"\n);\n/lib/index.js\u0005N\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nObject.defineProperty(exports, \"isIdentifierChar\", {\n  enumerable: true,\n  get: function () {\n    return _identifier.isIdentifierChar;\n  }\n});\nObject.defineProperty(exports, \"isIdentifierName\", {\n  enumerable: true,\n  get: function () {\n    return _identifier.isIdentifierName;\n  }\n});\nObject.defineProperty(exports, \"isIdentifierStart\", {\n  enumerable: true,\n  get: function () {\n    return _identifier.isIdentifierStart;\n  }\n});\nObject.defineProperty(exports, \"isKeyword\", {\n  enumerable: true,\n  get: function () {\n    return _keyword.isKeyword;\n  }\n});\nObject.defineProperty(exports, \"isReservedWord\", {\n  enumerable: true,\n  get: function () {\n    return _keyword.isReservedWord;\n  }\n});\nObject.defineProperty(exports, \"isStrictBindOnlyReservedWord\", {\n  enumerable: true,\n  get: function () {\n    return _keyword.isStrictBindOnlyReservedWord;\n  }\n});\nObject.defineProperty(exports, \"isStrictBindReservedWord\", {\n  enumerable: true,\n  get: function () {\n    return _keyword.isStrictBindReservedWord;\n  }\n});\nObject.defineProperty(exports, \"isStrictReservedWord\", {\n  enumerable: true,\n  get: function () {\n    return _keyword.isStrictReservedWord;\n  }\n});\n\nvar _identifier = require(\"./identifier\");\n\nvar _keyword = require(\"./keyword\");\n\n//# sourceMappingURL=index.js.map\n/lib/identifier.js/\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.isIdentifierChar = isIdentifierChar;\nexports.isIdentifierName = isIdentifierName;\nexports.isIdentifierStart = isIdentifierStart;\nlet nonASCIIidentifierStartChars = \"\\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\\u0560-\\u0588\\u05d0-\\u05ea\\u05ef-\\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\\u0860-\\u086a\\u0870-\\u0887\\u0889-\\u088e\\u08a0-\\u08c9\\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\\u09fc\\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\\u0c5d\\u0c60\\u0c61\\u0c80\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd\\u0cdd\\u0cde\\u0ce0\\u0ce1\\u0cf1\\u0cf2\\u0d04-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d\\u0d4e\\u0d54-\\u0d56\\u0d5f-\\u0d61\\u0d7a-\\u0d7f\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0e01-\\u0e30\\u0e32\\u0e33\\u0e40-\\u0e46\\u0e81\\u0e82\\u0e84\\u0e86-\\u0e8a\\u0e8c-\\u0ea3\\u0ea5\\u0ea7-\\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-\\u1711\\u171f-\\u1731\\u1740-\\u1751\\u1760-\\u176c\\u176e-\\u1770\\u1780-\\u17b3\\u17d7\\u17dc\\u1820-\\u1878\\u1880-\\u18a8\\u18aa\\u18b0-\\u18f5\\u1900-\\u191e\\u1950-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19b0-\\u19c9\\u1a00-\\u1a16\\u1a20-\\u1a54\\u1aa7\\u1b05-\\u1b33\\u1b45-\\u1b4c\\u1b83-\\u1ba0\\u1bae\\u1baf\\u1bba-\\u1be5\\u1c00-\\u1c23\\u1c4d-\\u1c4f\\u1c5a-\\u1c7d\\u1c80-\\u1c88\\u1c90-\\u1cba\\u1cbd-\\u1cbf\\u1ce9-\\u1cec\\u1cee-\\u1cf3\\u1cf5\\u1cf6\\u1cfa\\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-\\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-\\u312f\\u3131-\\u318e\\u31a0-\\u31bf\\u31f0-\\u31ff\\u3400-\\u4dbf\\u4e00-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a\\ua62b\\ua640-\\ua66e\\ua67f-\\ua69d\\ua6a0-\\ua6ef\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua7ca\\ua7d0\\ua7d1\\ua7d3\\ua7d5-\\ua7d9\\ua7f2-\\ua801\\ua803-\\ua805\\ua807-\\ua80a\\ua80c-\\ua822\\ua840-\\ua873\\ua882-\\ua8b3\\ua8f2-\\ua8f7\\ua8fb\\ua8fd\\ua8fe\\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-\\uab69\\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\";\nlet nonASCIIidentifierChars = \"\\u200c\\u200d\\xb7\\u0300-\\u036f\\u0387\\u0483-\\u0487\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u064b-\\u0669\\u0670\\u06d6-\\u06dc\\u06df-\\u06e4\\u06e7\\u06e8\\u06ea-\\u06ed\\u06f0-\\u06f9\\u0711\\u0730-\\u074a\\u07a6-\\u07b0\\u07c0-\\u07c9\\u07eb-\\u07f3\\u07fd\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0859-\\u085b\\u0898-\\u089f\\u08ca-\\u08e1\\u08e3-\\u0903\\u093a-\\u093c\\u093e-\\u094f\\u0951-\\u0957\\u0962\\u0963\\u0966-\\u096f\\u0981-\\u0983\\u09bc\\u09be-\\u09c4\\u09c7\\u09c8\\u09cb-\\u09cd\\u09d7\\u09e2\\u09e3\\u09e6-\\u09ef\\u09fe\\u0a01-\\u0a03\\u0a3c\\u0a3e-\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a66-\\u0a71\\u0a75\\u0a81-\\u0a83\\u0abc\\u0abe-\\u0ac5\\u0ac7-\\u0ac9\\u0acb-\\u0acd\\u0ae2\\u0ae3\\u0ae6-\\u0aef\\u0afa-\\u0aff\\u0b01-\\u0b03\\u0b3c\\u0b3e-\\u0b44\\u0b47\\u0b48\\u0b4b-\\u0b4d\\u0b55-\\u0b57\\u0b62\\u0b63\\u0b66-\\u0b6f\\u0b82\\u0bbe-\\u0bc2\\u0bc6-\\u0bc8\\u0bca-\\u0bcd\\u0bd7\\u0be6-\\u0bef\\u0c00-\\u0c04\\u0c3c\\u0c3e-\\u0c44\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62\\u0c63\\u0c66-\\u0c6f\\u0c81-\\u0c83\\u0cbc\\u0cbe-\\u0cc4\\u0cc6-\\u0cc8\\u0cca-\\u0ccd\\u0cd5\\u0cd6\\u0ce2\\u0ce3\\u0ce6-\\u0cef\\u0cf3\\u0d00-\\u0d03\\u0d3b\\u0d3c\\u0d3e-\\u0d44\\u0d46-\\u0d48\\u0d4a-\\u0d4d\\u0d57\\u0d62\\u0d63\\u0d66-\\u0d6f\\u0d81-\\u0d83\\u0dca\\u0dcf-\\u0dd4\\u0dd6\\u0dd8-\\u0ddf\\u0de6-\\u0def\\u0df2\\u0df3\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0e50-\\u0e59\\u0eb1\\u0eb4-\\u0ebc\\u0ec8-\\u0ece\\u0ed0-\\u0ed9\\u0f18\\u0f19\\u0f20-\\u0f29\\u0f35\\u0f37\\u0f39\\u0f3e\\u0f3f\\u0f71-\\u0f84\\u0f86\\u0f87\\u0f8d-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u102b-\\u103e\\u1040-\\u1049\\u1056-\\u1059\\u105e-\\u1060\\u1062-\\u1064\\u1067-\\u106d\\u1071-\\u1074\\u1082-\\u108d\\u108f-\\u109d\\u135d-\\u135f\\u1369-\\u1371\\u1712-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b4-\\u17d3\\u17dd\\u17e0-\\u17e9\\u180b-\\u180d\\u180f-\\u1819\\u18a9\\u1920-\\u192b\\u1930-\\u193b\\u1946-\\u194f\\u19d0-\\u19da\\u1a17-\\u1a1b\\u1a55-\\u1a5e\\u1a60-\\u1a7c\\u1a7f-\\u1a89\\u1a90-\\u1a99\\u1ab0-\\u1abd\\u1abf-\\u1ace\\u1b00-\\u1b04\\u1b34-\\u1b44\\u1b50-\\u1b59\\u1b6b-\\u1b73\\u1b80-\\u1b82\\u1ba1-\\u1bad\\u1bb0-\\u1bb9\\u1be6-\\u1bf3\\u1c24-\\u1c37\\u1c40-\\u1c49\\u1c50-\\u1c59\\u1cd0-\\u1cd2\\u1cd4-\\u1ce8\\u1ced\\u1cf4\\u1cf7-\\u1cf9\\u1dc0-\\u1dff\\u203f\\u2040\\u2054\\u20d0-\\u20dc\\u20e1\\u20e5-\\u20f0\\u2cef-\\u2cf1\\u2d7f\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\ua620-\\ua629\\ua66f\\ua674-\\ua67d\\ua69e\\ua69f\\ua6f0\\ua6f1\\ua802\\ua806\\ua80b\\ua823-\\ua827\\ua82c\\ua880\\ua881\\ua8b4-\\ua8c5\\ua8d0-\\ua8d9\\ua8e0-\\ua8f1\\ua8ff-\\ua909\\ua926-\\ua92d\\ua947-\\ua953\\ua980-\\ua983\\ua9b3-\\ua9c0\\ua9d0-\\ua9d9\\ua9e5\\ua9f0-\\ua9f9\\uaa29-\\uaa36\\uaa43\\uaa4c\\uaa4d\\uaa50-\\uaa59\\uaa7b-\\uaa7d\\uaab0\\uaab2-\\uaab4\\uaab7\\uaab8\\uaabe\\uaabf\\uaac1\\uaaeb-\\uaaef\\uaaf5\\uaaf6\\uabe3-\\uabea\\uabec\\uabed\\uabf0-\\uabf9\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe2f\\ufe33\\ufe34\\ufe4d-\\ufe4f\\uff10-\\uff19\\uff3f\";\nconst nonASCIIidentifierStart = new RegExp(\"[\" + nonASCIIidentifierStartChars + \"]\");\nconst nonASCIIidentifier = new RegExp(\"[\" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + \"]\");\nnonASCIIidentifierStartChars = nonASCIIidentifierChars = null;\nconst astralIdentifierStartCodes = [0, 11, 2, 25, 2, 18, 2, 1, 2, 14, 3, 13, 35, 122, 70, 52, 268, 28, 4, 48, 48, 31, 14, 29, 6, 37, 11, 29, 3, 35, 5, 7, 2, 4, 43, 157, 19, 35, 5, 35, 5, 39, 9, 51, 13, 10, 2, 14, 2, 6, 2, 1, 2, 10, 2, 14, 2, 6, 2, 1, 68, 310, 10, 21, 11, 7, 25, 5, 2, 41, 2, 8, 70, 5, 3, 0, 2, 43, 2, 1, 4, 0, 3, 22, 11, 22, 10, 30, 66, 18, 2, 1, 11, 21, 11, 25, 71, 55, 7, 1, 65, 0, 16, 3, 2, 2, 2, 28, 43, 28, 4, 28, 36, 7, 2, 27, 28, 53, 11, 21, 11, 18, 14, 17, 111, 72, 56, 50, 14, 50, 14, 35, 349, 41, 7, 1, 79, 28, 11, 0, 9, 21, 43, 17, 47, 20, 28, 22, 13, 52, 58, 1, 3, 0, 14, 44, 33, 24, 27, 35, 30, 0, 3, 0, 9, 34, 4, 0, 13, 47, 15, 3, 22, 0, 2, 0, 36, 17, 2, 24, 20, 1, 64, 6, 2, 0, 2, 3, 2, 14, 2, 9, 8, 46, 39, 7, 3, 1, 3, 21, 2, 6, 2, 1, 2, 4, 4, 0, 19, 0, 13, 4, 159, 52, 19, 3, 21, 2, 31, 47, 21, 1, 2, 0, 185, 46, 42, 3, 37, 47, 21, 0, 60, 42, 14, 0, 72, 26, 38, 6, 186, 43, 117, 63, 32, 7, 3, 0, 3, 7, 2, 1, 2, 23, 16, 0, 2, 0, 95, 7, 3, 38, 17, 0, 2, 0, 29, 0, 11, 39, 8, 0, 22, 0, 12, 45, 20, 0, 19, 72, 264, 8, 2, 36, 18, 0, 50, 29, 113, 6, 2, 1, 2, 37, 22, 0, 26, 5, 2, 1, 2, 31, 15, 0, 328, 18, 16, 0, 2, 12, 2, 33, 125, 0, 80, 921, 103, 110, 18, 195, 2637, 96, 16, 1071, 18, 5, 4026, 582, 8634, 568, 8, 30, 18, 78, 18, 29, 19, 47, 17, 3, 32, 20, 6, 18, 689, 63, 129, 74, 6, 0, 67, 12, 65, 1, 2, 0, 29, 6135, 9, 1237, 43, 8, 8936, 3, 2, 6, 2, 1, 2, 290, 16, 0, 30, 2, 3, 0, 15, 3, 9, 395, 2309, 106, 6, 12, 4, 8, 8, 9, 5991, 84, 2, 70, 2, 1, 3, 0, 3, 1, 3, 3, 2, 11, 2, 0, 2, 6, 2, 64, 2, 3, 3, 7, 2, 6, 2, 27, 2, 3, 2, 4, 2, 0, 4, 6, 2, 339, 3, 24, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 7, 1845, 30, 7, 5, 262, 61, 147, 44, 11, 6, 17, 0, 322, 29, 19, 43, 485, 27, 757, 6, 2, 3, 2, 1, 2, 14, 2, 196, 60, 67, 8, 0, 1205, 3, 2, 26, 2, 1, 2, 0, 3, 0, 2, 9, 2, 3, 2, 0, 2, 0, 7, 0, 5, 0, 2, 0, 2, 0, 2, 2, 2, 1, 2, 0, 3, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 1, 2, 0, 3, 3, 2, 6, 2, 3, 2, 3, 2, 0, 2, 9, 2, 16, 6, 2, 2, 4, 2, 16, 4421, 42719, 33, 4153, 7, 221, 3, 5761, 15, 7472, 3104, 541, 1507, 4938, 6, 4191];\nconst astralIdentifierCodes = [509, 0, 227, 0, 150, 4, 294, 9, 1368, 2, 2, 1, 6, 3, 41, 2, 5, 0, 166, 1, 574, 3, 9, 9, 370, 1, 81, 2, 71, 10, 50, 3, 123, 2, 54, 14, 32, 10, 3, 1, 11, 3, 46, 10, 8, 0, 46, 9, 7, 2, 37, 13, 2, 9, 6, 1, 45, 0, 13, 2, 49, 13, 9, 3, 2, 11, 83, 11, 7, 0, 3, 0, 158, 11, 6, 9, 7, 3, 56, 1, 2, 6, 3, 1, 3, 2, 10, 0, 11, 1, 3, 6, 4, 4, 193, 17, 10, 9, 5, 0, 82, 19, 13, 9, 214, 6, 3, 8, 28, 1, 83, 16, 16, 9, 82, 12, 9, 9, 84, 14, 5, 9, 243, 14, 166, 9, 71, 5, 2, 1, 3, 3, 2, 0, 2, 1, 13, 9, 120, 6, 3, 6, 4, 0, 29, 9, 41, 6, 2, 3, 9, 0, 10, 10, 47, 15, 406, 7, 2, 7, 17, 9, 57, 21, 2, 13, 123, 5, 4, 0, 2, 1, 2, 6, 2, 0, 9, 9, 49, 4, 2, 1, 2, 4, 9, 9, 330, 3, 10, 1, 2, 0, 49, 6, 4, 4, 14, 9, 5351, 0, 7, 14, 13835, 9, 87, 9, 39, 4, 60, 6, 26, 9, 1014, 0, 2, 54, 8, 3, 82, 0, 12, 1, 19628, 1, 4706, 45, 3, 22, 543, 4, 4, 5, 9, 7, 3, 6, 31, 3, 149, 2, 1418, 49, 513, 54, 5, 49, 9, 0, 15, 0, 23, 4, 2, 14, 1361, 6, 2, 16, 3, 6, 2, 1, 2, 4, 101, 0, 161, 6, 10, 9, 357, 0, 62, 13, 499, 13, 983, 6, 110, 6, 6, 9, 4759, 9, 787719, 239];\n\nfunction isInAstralSet(code, set) {\n  let pos = 0x10000;\n\n  for (let i = 0, length = set.length; i < length; i += 2) {\n    pos += set[i];\n    if (pos > code) return false;\n    pos += set[i + 1];\n    if (pos >= code) return true;\n  }\n\n  return false;\n}\n\nfunction isIdentifierStart(code) {\n  if (code < 65) return code === 36;\n  if (code <= 90) return true;\n  if (code < 97) return code === 95;\n  if (code <= 122) return true;\n\n  if (code <= 0xffff) {\n    return code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code));\n  }\n\n  return isInAstralSet(code, astralIdentifierStartCodes);\n}\n\nfunction isIdentifierChar(code) {\n  if (code < 48) return code === 36;\n  if (code < 58) return true;\n  if (code < 65) return false;\n  if (code <= 90) return true;\n  if (code < 97) return code === 95;\n  if (code <= 122) return true;\n\n  if (code <= 0xffff) {\n    return code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code));\n  }\n\n  return isInAstralSet(code, astralIdentifierStartCodes) || isInAstralSet(code, astralIdentifierCodes);\n}\n\nfunction isIdentifierName(name) {\n  let isFirst = true;\n\n  for (let i = 0; i < name.length; i++) {\n    let cp = name.charCodeAt(i);\n\n    if ((cp & 0xfc00) === 0xd800 && i + 1 < name.length) {\n      const trail = name.charCodeAt(++i);\n\n      if ((trail & 0xfc00) === 0xdc00) {\n        cp = 0x10000 + ((cp & 0x3ff) << 10) + (trail & 0x3ff);\n      }\n    }\n\n    if (isFirst) {\n      isFirst = false;\n\n      if (!isIdentifierStart(cp)) {\n        return false;\n      }\n    } else if (!isIdentifierChar(cp)) {\n      return false;\n    }\n  }\n\n  return !isFirst;\n}\n\n//# sourceMappingURL=identifier.js.map\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QGJhYmVsL2hlbHBlci12YWxpZGF0b3Itb3B0aW9uQDcuMjEuMA==",
    "content": "/lib/index.js.map{\"version\":3,\"names\":[],\"sources\":[\"../src/index.ts\"],\"sourcesContent\":[\"export { OptionValidator } from \\\"./validator\\\";\\nexport { findSuggestion } from \\\"./find-suggestion\\\";\\n\"],\"mappings\":\";;;;;;;;;;;;;;;;;AAAA;AACA\"}/LICENSE\u0004RMIT License\n\nCopyright (c) 2014-present Sebastian McKenzie and other contributors\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n/lib/index.js\u0001\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nObject.defineProperty(exports, \"OptionValidator\", {\n  enumerable: true,\n  get: function () {\n    return _validator.OptionValidator;\n  }\n});\nObject.defineProperty(exports, \"findSuggestion\", {\n  enumerable: true,\n  get: function () {\n    return _findSuggestion.findSuggestion;\n  }\n});\nvar _validator = require(\"./validator\");\nvar _findSuggestion = require(\"./find-suggestion\");\n\n//# sourceMappingURL=index.js.map\n/lib/find-suggestion.js.map\nq{\"version\":3,\"names\":[\"min\",\"Math\",\"levenshtein\",\"a\",\"b\",\"t\",\"u\",\"i\",\"j\",\"m\",\"length\",\"n\",\"findSuggestion\",\"str\",\"arr\",\"distances\",\"map\",\"el\",\"indexOf\"],\"sources\":[\"../src/find-suggestion.ts\"],\"sourcesContent\":[\"const { min } = Math;\\n\\n// a minimal leven distance implementation\\n// balanced maintainability with code size\\n// It is not blazingly fast but should be okay for Babel user case\\n// where it will be run for at most tens of time on strings\\n// that have less than 20 ASCII characters\\n\\n// https://rosettacode.org/wiki/Levenshtein_distance#ES5\\nfunction levenshtein(a: string, b: string): number {\\n  let t = [],\\n    u: number[] = [],\\n    i,\\n    j;\\n  const m = a.length,\\n    n = b.length;\\n  if (!m) {\\n    return n;\\n  }\\n  if (!n) {\\n    return m;\\n  }\\n  for (j = 0; j <= n; j++) {\\n    t[j] = j;\\n  }\\n  for (i = 1; i <= m; i++) {\\n    for (u = [i], j = 1; j <= n; j++) {\\n      u[j] =\\n        a[i - 1] === b[j - 1] ? t[j - 1] : min(t[j - 1], t[j], u[j - 1]) + 1;\\n    }\\n    t = u;\\n  }\\n  return u[n];\\n}\\n\\n/**\\n * Given a string `str` and an array of candidates `arr`,\\n * return the first of elements in candidates that has minimal\\n * Levenshtein distance with `str`.\\n * @export\\n * @param {string} str\\n * @param {string[]} arr\\n * @returns {string}\\n */\\nexport function findSuggestion(str: string, arr: readonly string[]): string {\\n  const distances = arr.map<number>(el => levenshtein(el, str));\\n  return arr[distances.indexOf(min(...distances))];\\n}\\n\"],\"mappings\":\";;;;;;AAAA,MAAM;EAAEA;AAAI,CAAC,GAAGC,IAAI;AASpB,SAASC,WAAW,CAACC,CAAS,EAAEC,CAAS,EAAU;EACjD,IAAIC,CAAC,GAAG,EAAE;IACRC,CAAW,GAAG,EAAE;IAChBC,CAAC;IACDC,CAAC;EACH,MAAMC,CAAC,GAAGN,CAAC,CAACO,MAAM;IAChBC,CAAC,GAAGP,CAAC,CAACM,MAAM;EACd,IAAI,CAACD,CAAC,EAAE;IACN,OAAOE,CAAC;EACV;EACA,IAAI,CAACA,CAAC,EAAE;IACN,OAAOF,CAAC;EACV;EACA,KAAKD,CAAC,GAAG,CAAC,EAAEA,CAAC,IAAIG,CAAC,EAAEH,CAAC,EAAE,EAAE;IACvBH,CAAC,CAACG,CAAC,CAAC,GAAGA,CAAC;EACV;EACA,KAAKD,CAAC,GAAG,CAAC,EAAEA,CAAC,IAAIE,CAAC,EAAEF,CAAC,EAAE,EAAE;IACvB,KAAKD,CAAC,GAAG,CAACC,CAAC,CAAC,EAAEC,CAAC,GAAG,CAAC,EAAEA,CAAC,IAAIG,CAAC,EAAEH,CAAC,EAAE,EAAE;MAChCF,CAAC,CAACE,CAAC,CAAC,GACFL,CAAC,CAACI,CAAC,GAAG,CAAC,CAAC,KAAKH,CAAC,CAACI,CAAC,GAAG,CAAC,CAAC,GAAGH,CAAC,CAACG,CAAC,GAAG,CAAC,CAAC,GAAGR,GAAG,CAACK,CAAC,CAACG,CAAC,GAAG,CAAC,CAAC,EAAEH,CAAC,CAACG,CAAC,CAAC,EAAEF,CAAC,CAACE,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IACxE;IACAH,CAAC,GAAGC,CAAC;EACP;EACA,OAAOA,CAAC,CAACK,CAAC,CAAC;AACb;AAWO,SAASC,cAAc,CAACC,GAAW,EAAEC,GAAsB,EAAU;EAC1E,MAAMC,SAAS,GAAGD,GAAG,CAACE,GAAG,CAASC,EAAE,IAAIf,WAAW,CAACe,EAAE,EAAEJ,GAAG,CAAC,CAAC;EAC7D,OAAOC,GAAG,CAACC,SAAS,CAACG,OAAO,CAAClB,GAAG,CAAC,GAAGe,SAAS,CAAC,CAAC,CAAC;AAClD\"}/lib/validator.js.map\u000f\u0019{\"version\":3,\"names\":[\"OptionValidator\",\"constructor\",\"descriptor\",\"validateTopLevelOptions\",\"options\",\"TopLevelOptionShape\",\"validOptionNames\",\"Object\",\"keys\",\"option\",\"includes\",\"Error\",\"formatMessage\",\"findSuggestion\",\"validateBooleanOption\",\"name\",\"value\",\"defaultValue\",\"undefined\",\"invariant\",\"validateStringOption\",\"condition\",\"message\"],\"sources\":[\"../src/validator.ts\"],\"sourcesContent\":[\"import { findSuggestion } from \\\"./find-suggestion\\\";\\n\\nexport class OptionValidator {\\n  declare descriptor: string;\\n  constructor(descriptor: string) {\\n    this.descriptor = descriptor;\\n  }\\n\\n  /**\\n   * Validate if the given `options` follow the name of keys defined in the `TopLevelOptionShape`\\n   *\\n   * @param {Object} options\\n   * @param {Object} TopLevelOptionShape\\n   *   An object with all the valid key names that `options` should be allowed to have\\n   *   The property values of `TopLevelOptionShape` can be arbitrary\\n   * @memberof OptionValidator\\n   */\\n  validateTopLevelOptions(options: Object, TopLevelOptionShape: Object): void {\\n    const validOptionNames = Object.keys(TopLevelOptionShape);\\n    for (const option of Object.keys(options)) {\\n      if (!validOptionNames.includes(option)) {\\n        throw new Error(\\n          this.formatMessage(`'${option}' is not a valid top-level option.\\n- Did you mean '${findSuggestion(option, validOptionNames)}'?`),\\n        );\\n      }\\n    }\\n  }\\n\\n  // note: we do not consider rewrite them to high order functions\\n  // until we have to support `validateNumberOption`.\\n  validateBooleanOption<T>(\\n    name: string,\\n    value?: boolean,\\n    defaultValue?: T,\\n  ): boolean | T {\\n    if (value === undefined) {\\n      return defaultValue;\\n    } else {\\n      this.invariant(\\n        typeof value === \\\"boolean\\\",\\n        `'${name}' option must be a boolean.`,\\n      );\\n    }\\n    return value;\\n  }\\n\\n  validateStringOption<T>(\\n    name: string,\\n    value?: string,\\n    defaultValue?: T,\\n  ): string | T {\\n    if (value === undefined) {\\n      return defaultValue;\\n    } else {\\n      this.invariant(\\n        typeof value === \\\"string\\\",\\n        `'${name}' option must be a string.`,\\n      );\\n    }\\n    return value;\\n  }\\n  /**\\n   * A helper interface copied from the `invariant` npm package.\\n   * It throws given `message` when `condition` is not met\\n   *\\n   * @param {boolean} condition\\n   * @param {string} message\\n   * @memberof OptionValidator\\n   */\\n  invariant(condition: boolean, message: string): void {\\n    if (!condition) {\\n      throw new Error(this.formatMessage(message));\\n    }\\n  }\\n\\n  formatMessage(message: string): string {\\n    return `${this.descriptor}: ${message}`;\\n  }\\n}\\n\"],\"mappings\":\";;;;;;AAAA;AAEO,MAAMA,eAAe,CAAC;EAE3BC,WAAW,CAACC,UAAkB,EAAE;IAC9B,IAAI,CAACA,UAAU,GAAGA,UAAU;EAC9B;EAWAC,uBAAuB,CAACC,OAAe,EAAEC,mBAA2B,EAAQ;IAC1E,MAAMC,gBAAgB,GAAGC,MAAM,CAACC,IAAI,CAACH,mBAAmB,CAAC;IACzD,KAAK,MAAMI,MAAM,IAAIF,MAAM,CAACC,IAAI,CAACJ,OAAO,CAAC,EAAE;MACzC,IAAI,CAACE,gBAAgB,CAACI,QAAQ,CAACD,MAAM,CAAC,EAAE;QACtC,MAAM,IAAIE,KAAK,CACb,IAAI,CAACC,aAAa,CAAE,IAAGH,MAAO;AACxC,kBAAkB,IAAAI,8BAAc,EAACJ,MAAM,EAAEH,gBAAgB,CAAE,IAAG,CAAC,CACtD;MACH;IACF;EACF;EAIAQ,qBAAqB,CACnBC,IAAY,EACZC,KAAe,EACfC,YAAgB,EACH;IACb,IAAID,KAAK,KAAKE,SAAS,EAAE;MACvB,OAAOD,YAAY;IACrB,CAAC,MAAM;MACL,IAAI,CAACE,SAAS,CACZ,OAAOH,KAAK,KAAK,SAAS,EACzB,IAAGD,IAAK,6BAA4B,CACtC;IACH;IACA,OAAOC,KAAK;EACd;EAEAI,oBAAoB,CAClBL,IAAY,EACZC,KAAc,EACdC,YAAgB,EACJ;IACZ,IAAID,KAAK,KAAKE,SAAS,EAAE;MACvB,OAAOD,YAAY;IACrB,CAAC,MAAM;MACL,IAAI,CAACE,SAAS,CACZ,OAAOH,KAAK,KAAK,QAAQ,EACxB,IAAGD,IAAK,4BAA2B,CACrC;IACH;IACA,OAAOC,KAAK;EACd;EASAG,SAAS,CAACE,SAAkB,EAAEC,OAAe,EAAQ;IACnD,IAAI,CAACD,SAAS,EAAE;MACd,MAAM,IAAIV,KAAK,CAAC,IAAI,CAACC,aAAa,CAACU,OAAO,CAAC,CAAC;IAC9C;EACF;EAEAV,aAAa,CAACU,OAAe,EAAU;IACrC,OAAQ,GAAE,IAAI,CAACpB,UAAW,KAAIoB,OAAQ,EAAC;EACzC;AACF;AAAC\"}/lib/validator.js\u0005\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.OptionValidator = void 0;\nvar _findSuggestion = require(\"./find-suggestion\");\nclass OptionValidator {\n  constructor(descriptor) {\n    this.descriptor = descriptor;\n  }\n  validateTopLevelOptions(options, TopLevelOptionShape) {\n    const validOptionNames = Object.keys(TopLevelOptionShape);\n    for (const option of Object.keys(options)) {\n      if (!validOptionNames.includes(option)) {\n        throw new Error(this.formatMessage(`'${option}' is not a valid top-level option.\n- Did you mean '${(0, _findSuggestion.findSuggestion)(option, validOptionNames)}'?`));\n      }\n    }\n  }\n  validateBooleanOption(name, value, defaultValue) {\n    if (value === undefined) {\n      return defaultValue;\n    } else {\n      this.invariant(typeof value === \"boolean\", `'${name}' option must be a boolean.`);\n    }\n    return value;\n  }\n  validateStringOption(name, value, defaultValue) {\n    if (value === undefined) {\n      return defaultValue;\n    } else {\n      this.invariant(typeof value === \"string\", `'${name}' option must be a string.`);\n    }\n    return value;\n  }\n  invariant(condition, message) {\n    if (!condition) {\n      throw new Error(this.formatMessage(message));\n    }\n  }\n  formatMessage(message) {\n    return `${this.descriptor}: ${message}`;\n  }\n}\nexports.OptionValidator = OptionValidator;\n\n//# sourceMappingURL=validator.js.map\n/README.md\u0001]# @babel/helper-validator-option\n\n> Validate plugin/preset options\n\nSee our website [@babel/helper-validator-option](https://babeljs.io/docs/en/babel-helper-validator-option) for more information.\n\n## Install\n\nUsing npm:\n\n```sh\nnpm install --save @babel/helper-validator-option\n```\n\nor using yarn:\n\n```sh\nyarn add @babel/helper-validator-option\n```\n/package.json\u0002;{\n  \"name\": \"@babel/helper-validator-option\",\n  \"version\": \"7.21.0\",\n  \"description\": \"Validate plugin/preset options\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/babel/babel.git\",\n    \"directory\": \"packages/babel-helper-validator-option\"\n  },\n  \"license\": \"MIT\",\n  \"publishConfig\": {\n    \"access\": \"public\"\n  },\n  \"main\": \"./lib/index.js\",\n  \"exports\": {\n    \".\": \"./lib/index.js\",\n    \"./package.json\": \"./package.json\"\n  },\n  \"engines\": {\n    \"node\": \">=6.9.0\"\n  },\n  \"author\": \"The Babel Team (https://babel.dev/team)\",\n  \"type\": \"commonjs\"\n}/lib/find-suggestion.js\u0002\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.findSuggestion = findSuggestion;\nconst {\n  min\n} = Math;\nfunction levenshtein(a, b) {\n  let t = [],\n    u = [],\n    i,\n    j;\n  const m = a.length,\n    n = b.length;\n  if (!m) {\n    return n;\n  }\n  if (!n) {\n    return m;\n  }\n  for (j = 0; j <= n; j++) {\n    t[j] = j;\n  }\n  for (i = 1; i <= m; i++) {\n    for (u = [i], j = 1; j <= n; j++) {\n      u[j] = a[i - 1] === b[j - 1] ? t[j - 1] : min(t[j - 1], t[j], u[j - 1]) + 1;\n    }\n    t = u;\n  }\n  return u[n];\n}\nfunction findSuggestion(str, arr) {\n  const distances = arr.map(el => levenshtein(el, str));\n  return arr[distances.indexOf(min(...distances))];\n}\n\n//# sourceMappingURL=find-suggestion.js.map\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QGJhYmVsL2hlbHBlci1lbnZpcm9ubWVudC12aXNpdG9yQDcuMTguOQ==",
    "content": "/LICENSE\u0004RMIT License\n\nCopyright (c) 2014-present Sebastian McKenzie and other contributors\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n/package.json\u0003\u0010{\n  \"name\": \"@babel/helper-environment-visitor\",\n  \"version\": \"7.18.9\",\n  \"description\": \"Helper visitor to only visit nodes in the current 'this' context\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/babel/babel.git\",\n    \"directory\": \"packages/babel-helper-environment-visitor\"\n  },\n  \"homepage\": \"https://babel.dev/docs/en/next/babel-helper-environment-visitor\",\n  \"license\": \"MIT\",\n  \"publishConfig\": {\n    \"access\": \"public\"\n  },\n  \"main\": \"./lib/index.js\",\n  \"exports\": {\n    \".\": \"./lib/index.js\",\n    \"./package.json\": \"./package.json\"\n  },\n  \"devDependencies\": {\n    \"@babel/traverse\": \"^7.18.9\",\n    \"@babel/types\": \"^7.18.9\"\n  },\n  \"engines\": {\n    \"node\": \">=6.9.0\"\n  },\n  \"author\": \"The Babel Team (https://babel.dev/team)\",\n  \"type\": \"commonjs\"\n}/README.md\u0001# @babel/helper-environment-visitor\n\n> Helper visitor to only visit nodes in the current 'this' context\n\nSee our website [@babel/helper-environment-visitor](https://babeljs.io/docs/en/babel-helper-environment-visitor) for more information.\n\n## Install\n\nUsing npm:\n\n```sh\nnpm install --save-dev @babel/helper-environment-visitor\n```\n\nor using yarn:\n\n```sh\nyarn add @babel/helper-environment-visitor --dev\n```\n/lib/index.js\u0004A\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\nexports.requeueComputedKeyAndDecorators = requeueComputedKeyAndDecorators;\nexports.skipAllButComputedKey = skipAllButComputedKey;\n\nfunction skipAllButComputedKey(path) {\n  path.skip();\n\n  if (path.node.computed) {\n    path.context.maybeQueue(path.get(\"key\"));\n  }\n}\n\nfunction requeueComputedKeyAndDecorators(path) {\n  const {\n    context,\n    node\n  } = path;\n\n  if (node.computed) {\n    context.maybeQueue(path.get(\"key\"));\n  }\n\n  if (node.decorators) {\n    for (const decorator of path.get(\"decorators\")) {\n      context.maybeQueue(decorator);\n    }\n  }\n}\n\nconst visitor = {\n  FunctionParent(path) {\n    if (path.isArrowFunctionExpression()) {\n      return;\n    } else {\n      path.skip();\n\n      if (path.isMethod()) {\n        requeueComputedKeyAndDecorators(path);\n      }\n    }\n  },\n\n  Property(path) {\n    if (path.isObjectProperty()) {\n      return;\n    }\n\n    path.skip();\n    requeueComputedKeyAndDecorators(path);\n  }\n\n};\nvar _default = visitor;\nexports.default = _default;"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QGJhYmVsL2hlbHBlci1mdW5jdGlvbi1uYW1lQDcuMjEuMA==",
    "content": "/LICENSE\u0004RMIT License\n\nCopyright (c) 2014-present Sebastian McKenzie and other contributors\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n/package.json\u0002{\n  \"name\": \"@babel/helper-function-name\",\n  \"version\": \"7.21.0\",\n  \"description\": \"Helper function to change the property 'name' of every function\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/babel/babel.git\",\n    \"directory\": \"packages/babel-helper-function-name\"\n  },\n  \"homepage\": \"https://babel.dev/docs/en/next/babel-helper-function-name\",\n  \"license\": \"MIT\",\n  \"publishConfig\": {\n    \"access\": \"public\"\n  },\n  \"main\": \"./lib/index.js\",\n  \"dependencies\": {\n    \"@babel/template\": \"^7.20.7\",\n    \"@babel/types\": \"^7.21.0\"\n  },\n  \"engines\": {\n    \"node\": \">=6.9.0\"\n  },\n  \"author\": \"The Babel Team (https://babel.dev/team)\",\n  \"type\": \"commonjs\"\n}/README.md\u0001o# @babel/helper-function-name\n\n> Helper function to change the property 'name' of every function\n\nSee our website [@babel/helper-function-name](https://babeljs.io/docs/en/babel-helper-function-name) for more information.\n\n## Install\n\nUsing npm:\n\n```sh\nnpm install --save @babel/helper-function-name\n```\n\nor using yarn:\n\n```sh\nyarn add @babel/helper-function-name\n```\n/lib/index.js.map9G{\"version\":3,\"names\":[\"NOT_LOCAL_BINDING\",\"cloneNode\",\"identifier\",\"isAssignmentExpression\",\"isAssignmentPattern\",\"isFunction\",\"isIdentifier\",\"isLiteral\",\"isNullLiteral\",\"isObjectMethod\",\"isObjectProperty\",\"isRegExpLiteral\",\"isRestElement\",\"isTemplateLiteral\",\"isVariableDeclarator\",\"toBindingIdentifierName\",\"getFunctionArity\",\"node\",\"count\",\"params\",\"findIndex\",\"param\",\"length\",\"buildPropertyMethodAssignmentWrapper\",\"template\",\"statement\",\"buildGeneratorPropertyMethodAssignmentWrapper\",\"visitor\",\"path\",\"state\",\"name\",\"localDeclar\",\"scope\",\"getBindingIdentifier\",\"outerDeclar\",\"selfReference\",\"stop\",\"getNameFromLiteralId\",\"id\",\"pattern\",\"flags\",\"quasis\",\"map\",\"quasi\",\"value\",\"raw\",\"join\",\"undefined\",\"wrap\",\"method\",\"hasBinding\",\"hasGlobal\",\"rename\",\"build\",\"generator\",\"FUNCTION\",\"FUNCTION_ID\",\"FUNCTION_KEY\",\"generateUidIdentifier\",\"expression\",\"callee\",\"body\",\"i\",\"len\",\"push\",\"getProgramParent\",\"references\",\"visit\",\"selfAssignment\",\"binding\",\"getOwnBinding\",\"kind\",\"traverse\",\"parent\",\"localBinding\",\"supportUnicodeId\",\"computed\",\"key\",\"getBinding\",\"constant\",\"operator\",\"left\",\"test\",\"newId\"],\"sources\":[\"../src/index.ts\"],\"sourcesContent\":[\"import template from \\\"@babel/template\\\";\\nimport {\\n  NOT_LOCAL_BINDING,\\n  cloneNode,\\n  identifier,\\n  isAssignmentExpression,\\n  isAssignmentPattern,\\n  isFunction,\\n  isIdentifier,\\n  isLiteral,\\n  isNullLiteral,\\n  isObjectMethod,\\n  isObjectProperty,\\n  isRegExpLiteral,\\n  isRestElement,\\n  isTemplateLiteral,\\n  isVariableDeclarator,\\n  toBindingIdentifierName,\\n} from \\\"@babel/types\\\";\\nimport type * as t from \\\"@babel/types\\\";\\nimport type { NodePath, Scope, Visitor } from \\\"@babel/traverse\\\";\\n\\nfunction getFunctionArity(node: t.Function): number {\\n  const count = node.params.findIndex(\\n    param => isAssignmentPattern(param) || isRestElement(param),\\n  );\\n  return count === -1 ? node.params.length : count;\\n}\\n\\nconst buildPropertyMethodAssignmentWrapper = template.statement(`\\n  (function (FUNCTION_KEY) {\\n    function FUNCTION_ID() {\\n      return FUNCTION_KEY.apply(this, arguments);\\n    }\\n\\n    FUNCTION_ID.toString = function () {\\n      return FUNCTION_KEY.toString();\\n    }\\n\\n    return FUNCTION_ID;\\n  })(FUNCTION)\\n`);\\n\\nconst buildGeneratorPropertyMethodAssignmentWrapper = template.statement(`\\n  (function (FUNCTION_KEY) {\\n    function* FUNCTION_ID() {\\n      return yield* FUNCTION_KEY.apply(this, arguments);\\n    }\\n\\n    FUNCTION_ID.toString = function () {\\n      return FUNCTION_KEY.toString();\\n    };\\n\\n    return FUNCTION_ID;\\n  })(FUNCTION)\\n`);\\n\\ntype State = {\\n  name: string;\\n  outerDeclar: t.Identifier;\\n  selfAssignment: boolean;\\n  selfReference: boolean;\\n};\\n\\nconst visitor: Visitor<State> = {\\n  \\\"ReferencedIdentifier|BindingIdentifier\\\"(\\n    path: NodePath<t.Identifier>,\\n    state,\\n  ) {\\n    // check if this node matches our function id\\n    if (path.node.name !== state.name) return;\\n\\n    // check that we don't have a local variable declared as that removes the need\\n    // for the wrapper\\n    const localDeclar = path.scope.getBindingIdentifier(state.name);\\n    if (localDeclar !== state.outerDeclar) return;\\n\\n    state.selfReference = true;\\n    path.stop();\\n  },\\n};\\n\\nfunction getNameFromLiteralId(id: t.Literal) {\\n  if (isNullLiteral(id)) {\\n    return \\\"null\\\";\\n  }\\n\\n  if (isRegExpLiteral(id)) {\\n    return `_${id.pattern}_${id.flags}`;\\n  }\\n\\n  if (isTemplateLiteral(id)) {\\n    return id.quasis.map(quasi => quasi.value.raw).join(\\\"\\\");\\n  }\\n\\n  if (id.value !== undefined) {\\n    return id.value + \\\"\\\";\\n  }\\n\\n  return \\\"\\\";\\n}\\n\\nfunction wrap(\\n  state: State,\\n  method: t.FunctionExpression | t.Class,\\n  id: t.Identifier,\\n  scope: Scope,\\n) {\\n  if (state.selfReference) {\\n    if (scope.hasBinding(id.name) && !scope.hasGlobal(id.name)) {\\n      // we can just munge the local binding\\n      scope.rename(id.name);\\n    } else {\\n      // we don't currently support wrapping class expressions\\n      if (!isFunction(method)) return;\\n\\n      // need to add a wrapper since we can't change the references\\n      let build = buildPropertyMethodAssignmentWrapper;\\n      if (method.generator) {\\n        build = buildGeneratorPropertyMethodAssignmentWrapper;\\n      }\\n\\n      const template = (\\n        build({\\n          FUNCTION: method,\\n          FUNCTION_ID: id,\\n          FUNCTION_KEY: scope.generateUidIdentifier(id.name),\\n        }) as t.ExpressionStatement\\n      ).expression as t.CallExpression;\\n\\n      // shim in dummy params to retain function arity, if you try to read the\\n      // source then you'll get the original since it's proxied so it's all good\\n      const params = (\\n        (template.callee as t.FunctionExpression).body\\n          .body[0] as any as t.FunctionExpression\\n      ).params;\\n\\n      for (let i = 0, len = getFunctionArity(method); i < len; i++) {\\n        params.push(scope.generateUidIdentifier(\\\"x\\\"));\\n      }\\n\\n      return template;\\n    }\\n  }\\n\\n  method.id = id;\\n  scope.getProgramParent().references[id.name] = true;\\n}\\n\\nfunction visit(\\n  node: t.FunctionExpression | t.Class,\\n  name: string,\\n  scope: Scope,\\n) {\\n  const state: State = {\\n    selfAssignment: false,\\n    selfReference: false,\\n    outerDeclar: scope.getBindingIdentifier(name),\\n    name: name,\\n  };\\n\\n  // check to see if we have a local binding of the id we're setting inside of\\n  // the function, this is important as there are caveats associated\\n\\n  const binding = scope.getOwnBinding(name);\\n\\n  if (binding) {\\n    if (binding.kind === \\\"param\\\") {\\n      // safari will blow up in strict mode with code like:\\n      //\\n      //   let t = function t(t) {};\\n      //\\n      // with the error:\\n      //\\n      //   Cannot declare a parameter named 't' as it shadows the name of a\\n      //   strict mode function.\\n      //\\n      // this isn't to the spec and they've invented this behaviour which is\\n      // **extremely** annoying so we avoid setting the name if it has a param\\n      // with the same id\\n      state.selfReference = true;\\n    } else {\\n      // otherwise it's defined somewhere in scope like:\\n      //\\n      //   let t = function () {\\n      //     let t = 2;\\n      //   };\\n      //\\n      // so we can safely just set the id and move along as it shadows the\\n      // bound function id\\n    }\\n  } else if (state.outerDeclar || scope.hasGlobal(name)) {\\n    scope.traverse(node, visitor, state);\\n  }\\n\\n  return state;\\n}\\n\\n/**\\n * Add id to function/class expression inferred from the AST\\n *\\n * @export\\n * @template N The unnamed expression type\\n * @param {Object} nodePathLike The NodePath-like input\\n * @param {N} nodePathLike.node an AST node\\n * @param {NodePath<N>[\\\"parent\\\"]} [nodePathLike.parent] The parent of the AST node\\n * @param {Scope} nodePathLike.scope The scope associated to the AST node\\n * @param {t.LVal | t.StringLiteral | t.NumericLiteral | t.BigIntLiteral} [nodePathLike.id] the fallback naming source when the helper\\n * can not infer the function name from the AST\\n * @param {boolean} [localBinding=false] whether a name could shadow a self-reference (e.g. converting arrow function)\\n * @param {boolean} [supportUnicodeId=false] whether the compilation target supports unicodeId (non-BMP characters) or not\\n * @returns {(N | t.CallExpression | void)}\\n * - modified node when name can be inferred,\\n * - an IIFE when `node` contains a binding shadowing the inferred function name (e.g. `let f = function (f) {}`),\\n * - `void` when `node` has `id` property or the helper can not inferred the name or the inferred name contains non-BMP characters that is not supported by current target\\n */\\nexport default function <N extends t.FunctionExpression | t.Class>(\\n  {\\n    node,\\n    parent,\\n    scope,\\n    id,\\n  }: {\\n    node: N;\\n    parent?: NodePath<N>[\\\"parent\\\"];\\n    scope: Scope;\\n    id?: t.LVal | t.StringLiteral | t.NumericLiteral | t.BigIntLiteral;\\n  },\\n  localBinding = false,\\n  supportUnicodeId = false,\\n): N | t.CallExpression | void {\\n  // has an `id` so we don't need to infer one\\n  if (node.id) return;\\n\\n  if (\\n    (isObjectProperty(parent) || isObjectMethod(parent, { kind: \\\"method\\\" })) &&\\n    (!parent.computed || isLiteral(parent.key))\\n  ) {\\n    // { foo() {} };\\n    id = parent.key as\\n      | t.Identifier\\n      | t.StringLiteral\\n      | t.NumericLiteral\\n      | t.BigIntLiteral;\\n  } else if (isVariableDeclarator(parent)) {\\n    // let foo = function () {};\\n    id = parent.id;\\n\\n    // but not \\\"let foo = () => {};\\\" being converted to function expression\\n    if (isIdentifier(id) && !localBinding) {\\n      const binding = scope.parent.getBinding(id.name);\\n      if (\\n        binding &&\\n        binding.constant &&\\n        scope.getBinding(id.name) === binding\\n      ) {\\n        // always going to reference this method\\n        node.id = cloneNode(id);\\n        // @ts-expect-error Fixme: avoid mutating AST nodes\\n        node.id[NOT_LOCAL_BINDING] = true;\\n        return;\\n      }\\n    }\\n  } else if (isAssignmentExpression(parent, { operator: \\\"=\\\" })) {\\n    // foo = function () {};\\n    id = parent.left;\\n  } else if (!id) {\\n    return;\\n  }\\n\\n  let name;\\n  if (id && isLiteral(id)) {\\n    name = getNameFromLiteralId(id);\\n  } else if (id && isIdentifier(id)) {\\n    name = id.name;\\n  }\\n\\n  if (name === undefined) {\\n    return;\\n  }\\n\\n  if (!supportUnicodeId && isFunction(node) && /[\\\\uD800-\\\\uDFFF]/.test(name)) {\\n    return;\\n  }\\n\\n  name = toBindingIdentifierName(name);\\n  const newId = identifier(name);\\n\\n  // The id shouldn't be considered a local binding to the function because\\n  // we are simply trying to set the function name and not actually create\\n  // a local binding.\\n  // @ts-expect-error Fixme: avoid mutating AST nodes\\n  newId[NOT_LOCAL_BINDING] = true;\\n\\n  const state = visit(node, name, scope);\\n  return wrap(state, node, newId, scope) || node;\\n}\\n\"],\"mappings\":\"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\"}/lib/index.js\u0011\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = _default;\nvar _template = require(\"@babel/template\");\nvar _t = require(\"@babel/types\");\nconst {\n  NOT_LOCAL_BINDING,\n  cloneNode,\n  identifier,\n  isAssignmentExpression,\n  isAssignmentPattern,\n  isFunction,\n  isIdentifier,\n  isLiteral,\n  isNullLiteral,\n  isObjectMethod,\n  isObjectProperty,\n  isRegExpLiteral,\n  isRestElement,\n  isTemplateLiteral,\n  isVariableDeclarator,\n  toBindingIdentifierName\n} = _t;\nfunction getFunctionArity(node) {\n  const count = node.params.findIndex(param => isAssignmentPattern(param) || isRestElement(param));\n  return count === -1 ? node.params.length : count;\n}\nconst buildPropertyMethodAssignmentWrapper = _template.default.statement(`\n  (function (FUNCTION_KEY) {\n    function FUNCTION_ID() {\n      return FUNCTION_KEY.apply(this, arguments);\n    }\n\n    FUNCTION_ID.toString = function () {\n      return FUNCTION_KEY.toString();\n    }\n\n    return FUNCTION_ID;\n  })(FUNCTION)\n`);\nconst buildGeneratorPropertyMethodAssignmentWrapper = _template.default.statement(`\n  (function (FUNCTION_KEY) {\n    function* FUNCTION_ID() {\n      return yield* FUNCTION_KEY.apply(this, arguments);\n    }\n\n    FUNCTION_ID.toString = function () {\n      return FUNCTION_KEY.toString();\n    };\n\n    return FUNCTION_ID;\n  })(FUNCTION)\n`);\nconst visitor = {\n  \"ReferencedIdentifier|BindingIdentifier\"(path, state) {\n    if (path.node.name !== state.name) return;\n    const localDeclar = path.scope.getBindingIdentifier(state.name);\n    if (localDeclar !== state.outerDeclar) return;\n    state.selfReference = true;\n    path.stop();\n  }\n};\nfunction getNameFromLiteralId(id) {\n  if (isNullLiteral(id)) {\n    return \"null\";\n  }\n  if (isRegExpLiteral(id)) {\n    return `_${id.pattern}_${id.flags}`;\n  }\n  if (isTemplateLiteral(id)) {\n    return id.quasis.map(quasi => quasi.value.raw).join(\"\");\n  }\n  if (id.value !== undefined) {\n    return id.value + \"\";\n  }\n  return \"\";\n}\nfunction wrap(state, method, id, scope) {\n  if (state.selfReference) {\n    if (scope.hasBinding(id.name) && !scope.hasGlobal(id.name)) {\n      scope.rename(id.name);\n    } else {\n      if (!isFunction(method)) return;\n      let build = buildPropertyMethodAssignmentWrapper;\n      if (method.generator) {\n        build = buildGeneratorPropertyMethodAssignmentWrapper;\n      }\n      const template = build({\n        FUNCTION: method,\n        FUNCTION_ID: id,\n        FUNCTION_KEY: scope.generateUidIdentifier(id.name)\n      }).expression;\n      const params = template.callee.body.body[0].params;\n      for (let i = 0, len = getFunctionArity(method); i < len; i++) {\n        params.push(scope.generateUidIdentifier(\"x\"));\n      }\n      return template;\n    }\n  }\n  method.id = id;\n  scope.getProgramParent().references[id.name] = true;\n}\nfunction visit(node, name, scope) {\n  const state = {\n    selfAssignment: false,\n    selfReference: false,\n    outerDeclar: scope.getBindingIdentifier(name),\n    name: name\n  };\n  const binding = scope.getOwnBinding(name);\n  if (binding) {\n    if (binding.kind === \"param\") {\n      state.selfReference = true;\n    } else {}\n  } else if (state.outerDeclar || scope.hasGlobal(name)) {\n    scope.traverse(node, visitor, state);\n  }\n  return state;\n}\nfunction _default({\n  node,\n  parent,\n  scope,\n  id\n}, localBinding = false, supportUnicodeId = false) {\n  if (node.id) return;\n  if ((isObjectProperty(parent) || isObjectMethod(parent, {\n    kind: \"method\"\n  })) && (!parent.computed || isLiteral(parent.key))) {\n    id = parent.key;\n  } else if (isVariableDeclarator(parent)) {\n    id = parent.id;\n    if (isIdentifier(id) && !localBinding) {\n      const binding = scope.parent.getBinding(id.name);\n      if (binding && binding.constant && scope.getBinding(id.name) === binding) {\n        node.id = cloneNode(id);\n        node.id[NOT_LOCAL_BINDING] = true;\n        return;\n      }\n    }\n  } else if (isAssignmentExpression(parent, {\n    operator: \"=\"\n  })) {\n    id = parent.left;\n  } else if (!id) {\n    return;\n  }\n  let name;\n  if (id && isLiteral(id)) {\n    name = getNameFromLiteralId(id);\n  } else if (id && isIdentifier(id)) {\n    name = id.name;\n  }\n  if (name === undefined) {\n    return;\n  }\n  if (!supportUnicodeId && isFunction(node) && /[\\uD800-\\uDFFF]/.test(name)) {\n    return;\n  }\n  name = toBindingIdentifierName(name);\n  const newId = identifier(name);\n  newId[NOT_LOCAL_BINDING] = true;\n  const state = visit(node, name, scope);\n  return wrap(state, node, newId, scope) || node;\n}\n\n//# sourceMappingURL=index.js.map\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QGJhYmVsL2hlbHBlci1ob2lzdC12YXJpYWJsZXNANy4xOC42",
    "content": "/LICENSE\u0004RMIT License\n\nCopyright (c) 2014-present Sebastian McKenzie and other contributors\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n/README.md\u0001\\# @babel/helper-hoist-variables\n\n> Helper function to hoist variables\n\nSee our website [@babel/helper-hoist-variables](https://babeljs.io/docs/en/babel-helper-hoist-variables) for more information.\n\n## Install\n\nUsing npm:\n\n```sh\nnpm install --save @babel/helper-hoist-variables\n```\n\nor using yarn:\n\n```sh\nyarn add @babel/helper-hoist-variables\n```\n/lib/index.js\u0004\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = hoistVariables;\n\nvar _t = require(\"@babel/types\");\n\nconst {\n  assignmentExpression,\n  expressionStatement,\n  identifier\n} = _t;\nconst visitor = {\n  Scope(path, state) {\n    if (state.kind === \"let\") path.skip();\n  },\n\n  FunctionParent(path) {\n    path.skip();\n  },\n\n  VariableDeclaration(path, state) {\n    if (state.kind && path.node.kind !== state.kind) return;\n    const nodes = [];\n    const declarations = path.get(\"declarations\");\n    let firstId;\n\n    for (const declar of declarations) {\n      firstId = declar.node.id;\n\n      if (declar.node.init) {\n        nodes.push(expressionStatement(assignmentExpression(\"=\", declar.node.id, declar.node.init)));\n      }\n\n      for (const name of Object.keys(declar.getBindingIdentifiers())) {\n        state.emit(identifier(name), name, declar.node.init !== null);\n      }\n    }\n\n    if (path.parentPath.isFor({\n      left: path.node\n    })) {\n      path.replaceWith(firstId);\n    } else {\n      path.replaceWithMultiple(nodes);\n    }\n  }\n\n};\n\nfunction hoistVariables(path, emit, kind = \"var\") {\n  path.traverse(visitor, {\n    kind,\n    emit\n  });\n}/package.json\u0003,{\n  \"name\": \"@babel/helper-hoist-variables\",\n  \"version\": \"7.18.6\",\n  \"description\": \"Helper function to hoist variables\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/babel/babel.git\",\n    \"directory\": \"packages/babel-helper-hoist-variables\"\n  },\n  \"homepage\": \"https://babel.dev/docs/en/next/babel-helper-hoist-variables\",\n  \"license\": \"MIT\",\n  \"publishConfig\": {\n    \"access\": \"public\"\n  },\n  \"main\": \"./lib/index.js\",\n  \"dependencies\": {\n    \"@babel/types\": \"^7.18.6\"\n  },\n  \"TODO\": \"The @babel/traverse dependency is only needed for the NodePath TS type. We can consider exporting it from @babel/core.\",\n  \"devDependencies\": {\n    \"@babel/traverse\": \"^7.18.6\"\n  },\n  \"engines\": {\n    \"node\": \">=6.9.0\"\n  },\n  \"author\": \"The Babel Team (https://babel.dev/team)\",\n  \"type\": \"commonjs\"\n}"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QGJhYmVsL2hlbHBlci1tb2R1bGUtaW1wb3J0c0A3LjE4LjY=",
    "content": "/LICENSE\u0004RMIT License\n\nCopyright (c) 2014-present Sebastian McKenzie and other contributors\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n/lib/index.js\u0004U\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nObject.defineProperty(exports, \"ImportInjector\", {\n  enumerable: true,\n  get: function () {\n    return _importInjector.default;\n  }\n});\nexports.addDefault = addDefault;\nexports.addNamed = addNamed;\nexports.addNamespace = addNamespace;\nexports.addSideEffect = addSideEffect;\nObject.defineProperty(exports, \"isModule\", {\n  enumerable: true,\n  get: function () {\n    return _isModule.default;\n  }\n});\n\nvar _importInjector = require(\"./import-injector\");\n\nvar _isModule = require(\"./is-module\");\n\nfunction addDefault(path, importedSource, opts) {\n  return new _importInjector.default(path).addDefault(importedSource, opts);\n}\n\nfunction addNamed(path, name, importedSource, opts) {\n  return new _importInjector.default(path).addNamed(name, importedSource, opts);\n}\n\nfunction addNamespace(path, importedSource, opts) {\n  return new _importInjector.default(path).addNamespace(importedSource, opts);\n}\n\nfunction addSideEffect(path, importedSource, opts) {\n  return new _importInjector.default(path).addSideEffect(importedSource, opts);\n}/lib/is-module.js\u0001}\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isModule;\n\nfunction isModule(path) {\n  const {\n    sourceType\n  } = path.node;\n\n  if (sourceType !== \"module\" && sourceType !== \"script\") {\n    throw path.buildCodeFrameError(`Unknown sourceType \"${sourceType}\", cannot transform.`);\n  }\n\n  return path.node.sourceType === \"module\";\n}/lib/import-injector.js \b\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _assert = require(\"assert\");\n\nvar _t = require(\"@babel/types\");\n\nvar _importBuilder = require(\"./import-builder\");\n\nvar _isModule = require(\"./is-module\");\n\nconst {\n  numericLiteral,\n  sequenceExpression\n} = _t;\n\nclass ImportInjector {\n  constructor(path, importedSource, opts) {\n    this._defaultOpts = {\n      importedSource: null,\n      importedType: \"commonjs\",\n      importedInterop: \"babel\",\n      importingInterop: \"babel\",\n      ensureLiveReference: false,\n      ensureNoContext: false,\n      importPosition: \"before\"\n    };\n    const programPath = path.find(p => p.isProgram());\n    this._programPath = programPath;\n    this._programScope = programPath.scope;\n    this._hub = programPath.hub;\n    this._defaultOpts = this._applyDefaults(importedSource, opts, true);\n  }\n\n  addDefault(importedSourceIn, opts) {\n    return this.addNamed(\"default\", importedSourceIn, opts);\n  }\n\n  addNamed(importName, importedSourceIn, opts) {\n    _assert(typeof importName === \"string\");\n\n    return this._generateImport(this._applyDefaults(importedSourceIn, opts), importName);\n  }\n\n  addNamespace(importedSourceIn, opts) {\n    return this._generateImport(this._applyDefaults(importedSourceIn, opts), null);\n  }\n\n  addSideEffect(importedSourceIn, opts) {\n    return this._generateImport(this._applyDefaults(importedSourceIn, opts), void 0);\n  }\n\n  _applyDefaults(importedSource, opts, isInit = false) {\n    let newOpts;\n\n    if (typeof importedSource === \"string\") {\n      newOpts = Object.assign({}, this._defaultOpts, {\n        importedSource\n      }, opts);\n    } else {\n      _assert(!opts, \"Unexpected secondary arguments.\");\n\n      newOpts = Object.assign({}, this._defaultOpts, importedSource);\n    }\n\n    if (!isInit && opts) {\n      if (opts.nameHint !== undefined) newOpts.nameHint = opts.nameHint;\n      if (opts.blockHoist !== undefined) newOpts.blockHoist = opts.blockHoist;\n    }\n\n    return newOpts;\n  }\n\n  _generateImport(opts, importName) {\n    const isDefault = importName === \"default\";\n    const isNamed = !!importName && !isDefault;\n    const isNamespace = importName === null;\n    const {\n      importedSource,\n      importedType,\n      importedInterop,\n      importingInterop,\n      ensureLiveReference,\n      ensureNoContext,\n      nameHint,\n      importPosition,\n      blockHoist\n    } = opts;\n    let name = nameHint || importName;\n    const isMod = (0, _isModule.default)(this._programPath);\n    const isModuleForNode = isMod && importingInterop === \"node\";\n    const isModuleForBabel = isMod && importingInterop === \"babel\";\n\n    if (importPosition === \"after\" && !isMod) {\n      throw new Error(`\"importPosition\": \"after\" is only supported in modules`);\n    }\n\n    const builder = new _importBuilder.default(importedSource, this._programScope, this._hub);\n\n    if (importedType === \"es6\") {\n      if (!isModuleForNode && !isModuleForBabel) {\n        throw new Error(\"Cannot import an ES6 module from CommonJS\");\n      }\n\n      builder.import();\n\n      if (isNamespace) {\n        builder.namespace(nameHint || importedSource);\n      } else if (isDefault || isNamed) {\n        builder.named(name, importName);\n      }\n    } else if (importedType !== \"commonjs\") {\n      throw new Error(`Unexpected interopType \"${importedType}\"`);\n    } else if (importedInterop === \"babel\") {\n      if (isModuleForNode) {\n        name = name !== \"default\" ? name : importedSource;\n        const es6Default = `${importedSource}$es6Default`;\n        builder.import();\n\n        if (isNamespace) {\n          builder.default(es6Default).var(name || importedSource).wildcardInterop();\n        } else if (isDefault) {\n          if (ensureLiveReference) {\n            builder.default(es6Default).var(name || importedSource).defaultInterop().read(\"default\");\n          } else {\n            builder.default(es6Default).var(name).defaultInterop().prop(importName);\n          }\n        } else if (isNamed) {\n          builder.default(es6Default).read(importName);\n        }\n      } else if (isModuleForBabel) {\n        builder.import();\n\n        if (isNamespace) {\n          builder.namespace(name || importedSource);\n        } else if (isDefault || isNamed) {\n          builder.named(name, importName);\n        }\n      } else {\n        builder.require();\n\n        if (isNamespace) {\n          builder.var(name || importedSource).wildcardInterop();\n        } else if ((isDefault || isNamed) && ensureLiveReference) {\n          if (isDefault) {\n            name = name !== \"default\" ? name : importedSource;\n            builder.var(name).read(importName);\n            builder.defaultInterop();\n          } else {\n            builder.var(importedSource).read(importName);\n          }\n        } else if (isDefault) {\n          builder.var(name).defaultInterop().prop(importName);\n        } else if (isNamed) {\n          builder.var(name).prop(importName);\n        }\n      }\n    } else if (importedInterop === \"compiled\") {\n      if (isModuleForNode) {\n        builder.import();\n\n        if (isNamespace) {\n          builder.default(name || importedSource);\n        } else if (isDefault || isNamed) {\n          builder.default(importedSource).read(name);\n        }\n      } else if (isModuleForBabel) {\n        builder.import();\n\n        if (isNamespace) {\n          builder.namespace(name || importedSource);\n        } else if (isDefault || isNamed) {\n          builder.named(name, importName);\n        }\n      } else {\n        builder.require();\n\n        if (isNamespace) {\n          builder.var(name || importedSource);\n        } else if (isDefault || isNamed) {\n          if (ensureLiveReference) {\n            builder.var(importedSource).read(name);\n          } else {\n            builder.prop(importName).var(name);\n          }\n        }\n      }\n    } else if (importedInterop === \"uncompiled\") {\n      if (isDefault && ensureLiveReference) {\n        throw new Error(\"No live reference for commonjs default\");\n      }\n\n      if (isModuleForNode) {\n        builder.import();\n\n        if (isNamespace) {\n          builder.default(name || importedSource);\n        } else if (isDefault) {\n          builder.default(name);\n        } else if (isNamed) {\n          builder.default(importedSource).read(name);\n        }\n      } else if (isModuleForBabel) {\n        builder.import();\n\n        if (isNamespace) {\n          builder.default(name || importedSource);\n        } else if (isDefault) {\n          builder.default(name);\n        } else if (isNamed) {\n          builder.named(name, importName);\n        }\n      } else {\n        builder.require();\n\n        if (isNamespace) {\n          builder.var(name || importedSource);\n        } else if (isDefault) {\n          builder.var(name);\n        } else if (isNamed) {\n          if (ensureLiveReference) {\n            builder.var(importedSource).read(name);\n          } else {\n            builder.var(name).prop(importName);\n          }\n        }\n      }\n    } else {\n      throw new Error(`Unknown importedInterop \"${importedInterop}\".`);\n    }\n\n    const {\n      statements,\n      resultName\n    } = builder.done();\n\n    this._insertStatements(statements, importPosition, blockHoist);\n\n    if ((isDefault || isNamed) && ensureNoContext && resultName.type !== \"Identifier\") {\n      return sequenceExpression([numericLiteral(0), resultName]);\n    }\n\n    return resultName;\n  }\n\n  _insertStatements(statements, importPosition = \"before\", blockHoist = 3) {\n    const body = this._programPath.get(\"body\");\n\n    if (importPosition === \"after\") {\n      for (let i = body.length - 1; i >= 0; i--) {\n        if (body[i].isImportDeclaration()) {\n          body[i].insertAfter(statements);\n          return;\n        }\n      }\n    } else {\n      statements.forEach(node => {\n        node._blockHoist = blockHoist;\n      });\n      const targetPath = body.find(p => {\n        const val = p.node._blockHoist;\n        return Number.isFinite(val) && val < 4;\n      });\n\n      if (targetPath) {\n        targetPath.insertBefore(statements);\n        return;\n      }\n    }\n\n    this._programPath.unshiftContainer(\"body\", statements);\n  }\n\n}\n\nexports.default = ImportInjector;/package.json\u0002{\n  \"name\": \"@babel/helper-module-imports\",\n  \"version\": \"7.18.6\",\n  \"description\": \"Babel helper functions for inserting module loads\",\n  \"author\": \"The Babel Team (https://babel.dev/team)\",\n  \"homepage\": \"https://babel.dev/docs/en/next/babel-helper-module-imports\",\n  \"license\": \"MIT\",\n  \"publishConfig\": {\n    \"access\": \"public\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/babel/babel.git\",\n    \"directory\": \"packages/babel-helper-module-imports\"\n  },\n  \"main\": \"./lib/index.js\",\n  \"dependencies\": {\n    \"@babel/types\": \"^7.18.6\"\n  },\n  \"devDependencies\": {\n    \"@babel/core\": \"^7.18.6\",\n    \"@babel/traverse\": \"^7.18.6\"\n  },\n  \"engines\": {\n    \"node\": \">=6.9.0\"\n  },\n  \"type\": \"commonjs\"\n}/README.md\u0001f# @babel/helper-module-imports\n\n> Babel helper functions for inserting module loads\n\nSee our website [@babel/helper-module-imports](https://babeljs.io/docs/en/babel-helper-module-imports) for more information.\n\n## Install\n\nUsing npm:\n\n```sh\nnpm install --save @babel/helper-module-imports\n```\n\nor using yarn:\n\n```sh\nyarn add @babel/helper-module-imports\n```\n/lib/import-builder.js\u0010`\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _assert = require(\"assert\");\n\nvar _t = require(\"@babel/types\");\n\nconst {\n  callExpression,\n  cloneNode,\n  expressionStatement,\n  identifier,\n  importDeclaration,\n  importDefaultSpecifier,\n  importNamespaceSpecifier,\n  importSpecifier,\n  memberExpression,\n  stringLiteral,\n  variableDeclaration,\n  variableDeclarator\n} = _t;\n\nclass ImportBuilder {\n  constructor(importedSource, scope, hub) {\n    this._statements = [];\n    this._resultName = null;\n    this._importedSource = void 0;\n    this._scope = scope;\n    this._hub = hub;\n    this._importedSource = importedSource;\n  }\n\n  done() {\n    return {\n      statements: this._statements,\n      resultName: this._resultName\n    };\n  }\n\n  import() {\n    this._statements.push(importDeclaration([], stringLiteral(this._importedSource)));\n\n    return this;\n  }\n\n  require() {\n    this._statements.push(expressionStatement(callExpression(identifier(\"require\"), [stringLiteral(this._importedSource)])));\n\n    return this;\n  }\n\n  namespace(name = \"namespace\") {\n    const local = this._scope.generateUidIdentifier(name);\n\n    const statement = this._statements[this._statements.length - 1];\n\n    _assert(statement.type === \"ImportDeclaration\");\n\n    _assert(statement.specifiers.length === 0);\n\n    statement.specifiers = [importNamespaceSpecifier(local)];\n    this._resultName = cloneNode(local);\n    return this;\n  }\n\n  default(name) {\n    const id = this._scope.generateUidIdentifier(name);\n\n    const statement = this._statements[this._statements.length - 1];\n\n    _assert(statement.type === \"ImportDeclaration\");\n\n    _assert(statement.specifiers.length === 0);\n\n    statement.specifiers = [importDefaultSpecifier(id)];\n    this._resultName = cloneNode(id);\n    return this;\n  }\n\n  named(name, importName) {\n    if (importName === \"default\") return this.default(name);\n\n    const id = this._scope.generateUidIdentifier(name);\n\n    const statement = this._statements[this._statements.length - 1];\n\n    _assert(statement.type === \"ImportDeclaration\");\n\n    _assert(statement.specifiers.length === 0);\n\n    statement.specifiers = [importSpecifier(id, identifier(importName))];\n    this._resultName = cloneNode(id);\n    return this;\n  }\n\n  var(name) {\n    const id = this._scope.generateUidIdentifier(name);\n\n    let statement = this._statements[this._statements.length - 1];\n\n    if (statement.type !== \"ExpressionStatement\") {\n      _assert(this._resultName);\n\n      statement = expressionStatement(this._resultName);\n\n      this._statements.push(statement);\n    }\n\n    this._statements[this._statements.length - 1] = variableDeclaration(\"var\", [variableDeclarator(id, statement.expression)]);\n    this._resultName = cloneNode(id);\n    return this;\n  }\n\n  defaultInterop() {\n    return this._interop(this._hub.addHelper(\"interopRequireDefault\"));\n  }\n\n  wildcardInterop() {\n    return this._interop(this._hub.addHelper(\"interopRequireWildcard\"));\n  }\n\n  _interop(callee) {\n    const statement = this._statements[this._statements.length - 1];\n\n    if (statement.type === \"ExpressionStatement\") {\n      statement.expression = callExpression(callee, [statement.expression]);\n    } else if (statement.type === \"VariableDeclaration\") {\n      _assert(statement.declarations.length === 1);\n\n      statement.declarations[0].init = callExpression(callee, [statement.declarations[0].init]);\n    } else {\n      _assert.fail(\"Unexpected type.\");\n    }\n\n    return this;\n  }\n\n  prop(name) {\n    const statement = this._statements[this._statements.length - 1];\n\n    if (statement.type === \"ExpressionStatement\") {\n      statement.expression = memberExpression(statement.expression, identifier(name));\n    } else if (statement.type === \"VariableDeclaration\") {\n      _assert(statement.declarations.length === 1);\n\n      statement.declarations[0].init = memberExpression(statement.declarations[0].init, identifier(name));\n    } else {\n      _assert.fail(\"Unexpected type:\" + statement.type);\n    }\n\n    return this;\n  }\n\n  read(name) {\n    this._resultName = memberExpression(this._resultName, identifier(name));\n  }\n\n}\n\nexports.default = ImportBuilder;"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QGJhYmVsL2hlbHBlci1tb2R1bGUtdHJhbnNmb3Jtc0A3LjIxLjI=",
    "content": "'/lib/normalize-and-load-metadata.js.mapł{\"version\":3,\"names\":[\"hasExports\",\"metadata\",\"isSideEffectImport\",\"source\",\"imports\",\"size\",\"importsNamespace\",\"reexports\",\"reexportNamespace\",\"reexportAll\",\"validateImportInteropOption\",\"importInterop\",\"Error\",\"resolveImportInterop\",\"filename\",\"normalizeModuleAndLoadMetadata\",\"programPath\",\"exportName\",\"initializeReexports\",\"lazy\",\"esNamespaceOnly\",\"scope\",\"generateUidIdentifier\",\"name\",\"stringSpecifiers\",\"Set\",\"nameAnonymousExports\",\"local\",\"sources\",\"getModuleMetadata\",\"removeImportExportDeclarations\",\"values\",\"next\",\"value\",\"resolvedInterop\",\"interop\",\"exportNameListName\",\"getExportSpecifierName\",\"path\",\"isIdentifier\",\"node\",\"isStringLiteral\",\"stringValue\",\"isIdentifierName\",\"add\",\"type\",\"assertExportSpecifier\",\"isExportSpecifier\",\"isExportNamespaceSpecifier\",\"buildCodeFrameError\",\"localData\",\"getLocalExportMetadata\",\"sourceData\",\"Map\",\"getData\",\"sourceNode\",\"data\",\"get\",\"basename\",\"extname\",\"loc\",\"referenced\",\"set\",\"forEach\",\"child\",\"isImportDeclaration\",\"spec\",\"isImportDefaultSpecifier\",\"localName\",\"reexport\",\"delete\",\"names\",\"isImportNamespaceSpecifier\",\"isImportSpecifier\",\"importName\",\"isExportAllDeclaration\",\"isExportNamedDeclaration\",\"isExportDefaultDeclaration\",\"needsDefault\",\"needsNamed\",\"test\",\"Array\",\"isArray\",\"indexOf\",\"bindingKindLookup\",\"kind\",\"declaration\",\"isFunctionDeclaration\",\"isClassDeclaration\",\"isVariableDeclaration\",\"Object\",\"keys\",\"getOuterBindingIdentifiers\",\"localMetadata\",\"getLocalMetadata\",\"idPath\",\"undefined\",\"ids\",\"getOuterBindingIdentifierPaths\",\"push\",\"exported\",\"splitExportDeclaration\",\"remove\",\"_blockHoist\",\"replaceWith\"],\"sources\":[\"../src/normalize-and-load-metadata.ts\"],\"sourcesContent\":[\"import { basename, extname } from \\\"path\\\";\\nimport type * as t from \\\"@babel/types\\\";\\n\\nimport { isIdentifierName } from \\\"@babel/helper-validator-identifier\\\";\\nimport splitExportDeclaration from \\\"@babel/helper-split-export-declaration\\\";\\nimport type { NodePath } from \\\"@babel/traverse\\\";\\n\\nexport interface ModuleMetadata {\\n  exportName: string;\\n  // The name of the variable that will reference an object containing export names.\\n  exportNameListName: null | string;\\n  hasExports: boolean;\\n  // Lookup from local binding to export information.\\n  local: Map<string, LocalExportMetadata>;\\n  // Lookup of source file to source file metadata.\\n  source: Map<string, SourceModuleMetadata>;\\n  // List of names that should only be printed as string literals.\\n  // i.e. `import { \\\"any unicode\\\" as foo } from \\\"some-module\\\"`\\n  // `stringSpecifiers` is Set(1) [\\\"any unicode\\\"]\\n  // In most cases `stringSpecifiers` is an empty Set\\n  stringSpecifiers: Set<string>;\\n}\\n\\nexport type InteropType =\\n  | \\\"default\\\" // Babel interop for default-only imports\\n  | \\\"namespace\\\" // Babel interop for namespace or default+named imports\\n  | \\\"node-default\\\" // Node.js interop for default-only imports\\n  | \\\"node-namespace\\\" // Node.js interop for namespace or default+named imports\\n  | \\\"none\\\"; // No interop, or named-only imports\\n\\nexport type ImportInterop =\\n  | \\\"none\\\"\\n  | \\\"babel\\\"\\n  | \\\"node\\\"\\n  | ((source: string, filename?: string) => \\\"none\\\" | \\\"babel\\\" | \\\"node\\\");\\n\\nexport type Lazy = boolean | string[] | ((source: string) => boolean);\\n\\nexport interface SourceModuleMetadata {\\n  // A unique variable name to use for this namespace object. Centralized for simplicity.\\n  name: string;\\n  loc: t.SourceLocation | undefined | null;\\n  interop: InteropType;\\n  // Local binding to reference from this source namespace. Key: Local name, value: Import name\\n  imports: Map<string, string>;\\n  // Local names that reference namespace object.\\n  importsNamespace: Set<string>;\\n  // Reexports to create for namespace. Key: Export name, value: Import name\\n  reexports: Map<string, string>;\\n  // List of names to re-export namespace as.\\n  reexportNamespace: Set<string>;\\n  // Tracks if the source should be re-exported.\\n  reexportAll: null | {\\n    loc: t.SourceLocation | undefined | null;\\n  };\\n  lazy?: Lazy;\\n  referenced: boolean;\\n}\\n\\nexport interface LocalExportMetadata {\\n  names: Array<string>; // names of exports,\\n  kind: \\\"import\\\" | \\\"hoisted\\\" | \\\"block\\\" | \\\"var\\\";\\n}\\n\\n/**\\n * Check if the module has any exports that need handling.\\n */\\nexport function hasExports(metadata: ModuleMetadata) {\\n  return metadata.hasExports;\\n}\\n\\n/**\\n * Check if a given source is an anonymous import, e.g. \\\"import 'foo';\\\"\\n */\\nexport function isSideEffectImport(source: SourceModuleMetadata) {\\n  return (\\n    source.imports.size === 0 &&\\n    source.importsNamespace.size === 0 &&\\n    source.reexports.size === 0 &&\\n    source.reexportNamespace.size === 0 &&\\n    !source.reexportAll\\n  );\\n}\\n\\nexport function validateImportInteropOption(\\n  importInterop: any,\\n): importInterop is ImportInterop {\\n  if (\\n    typeof importInterop !== \\\"function\\\" &&\\n    importInterop !== \\\"none\\\" &&\\n    importInterop !== \\\"babel\\\" &&\\n    importInterop !== \\\"node\\\"\\n  ) {\\n    throw new Error(\\n      `.importInterop must be one of \\\"none\\\", \\\"babel\\\", \\\"node\\\", or a function returning one of those values (received ${importInterop}).`,\\n    );\\n  }\\n  return importInterop;\\n}\\n\\nfunction resolveImportInterop(\\n  importInterop: ImportInterop,\\n  source: string,\\n  filename: string | undefined,\\n) {\\n  if (typeof importInterop === \\\"function\\\") {\\n    return validateImportInteropOption(importInterop(source, filename));\\n  }\\n  return importInterop;\\n}\\n\\n/**\\n * Remove all imports and exports from the file, and return all metadata\\n * needed to reconstruct the module's behavior.\\n */\\nexport default function normalizeModuleAndLoadMetadata(\\n  programPath: NodePath<t.Program>,\\n  exportName: string,\\n  {\\n    importInterop,\\n    initializeReexports = false,\\n    lazy = false,\\n    esNamespaceOnly = false,\\n    filename,\\n  }: {\\n    importInterop: ImportInterop;\\n    initializeReexports: boolean | void;\\n    lazy: Lazy;\\n    esNamespaceOnly: boolean;\\n    filename: string;\\n  },\\n): ModuleMetadata {\\n  if (!exportName) {\\n    exportName = programPath.scope.generateUidIdentifier(\\\"exports\\\").name;\\n  }\\n  const stringSpecifiers = new Set<string>();\\n\\n  nameAnonymousExports(programPath);\\n\\n  const { local, sources, hasExports } = getModuleMetadata(\\n    programPath,\\n    { initializeReexports, lazy },\\n    stringSpecifiers,\\n  );\\n\\n  removeImportExportDeclarations(programPath);\\n\\n  // Reuse the imported namespace name if there is one.\\n  for (const [source, metadata] of sources) {\\n    if (metadata.importsNamespace.size > 0) {\\n      // This is kind of gross. If we stop using `loose: true` we should\\n      // just make this destructuring assignment.\\n      metadata.name = metadata.importsNamespace.values().next().value;\\n    }\\n\\n    const resolvedInterop = resolveImportInterop(\\n      importInterop,\\n      source,\\n      filename,\\n    );\\n\\n    if (resolvedInterop === \\\"none\\\") {\\n      metadata.interop = \\\"none\\\";\\n    } else if (resolvedInterop === \\\"node\\\" && metadata.interop === \\\"namespace\\\") {\\n      metadata.interop = \\\"node-namespace\\\";\\n    } else if (resolvedInterop === \\\"node\\\" && metadata.interop === \\\"default\\\") {\\n      metadata.interop = \\\"node-default\\\";\\n    } else if (esNamespaceOnly && metadata.interop === \\\"namespace\\\") {\\n      // Both the default and namespace interops pass through __esModule\\n      // objects, but the namespace interop is used to enable Babel's\\n      // destructuring-like interop behavior for normal CommonJS.\\n      // Since some tooling has started to remove that behavior, we expose\\n      // it as the `esNamespace` option.\\n      metadata.interop = \\\"default\\\";\\n    }\\n  }\\n\\n  return {\\n    exportName,\\n    exportNameListName: null,\\n    hasExports,\\n    local,\\n    source: sources,\\n    stringSpecifiers,\\n  };\\n}\\n\\nfunction getExportSpecifierName(\\n  path: NodePath,\\n  stringSpecifiers: Set<string>,\\n): string {\\n  if (path.isIdentifier()) {\\n    return path.node.name;\\n  } else if (path.isStringLiteral()) {\\n    const stringValue = path.node.value;\\n    // add specifier value to `stringSpecifiers` only when it can not be converted to an identifier name\\n    // i.e In `import { \\\"foo\\\" as bar }`\\n    // we do not consider `\\\"foo\\\"` to be a `stringSpecifier` because we can treat it as\\n    // `import { foo as bar }`\\n    // This helps minimize the size of `stringSpecifiers` and reduce overhead of checking valid identifier names\\n    // when building transpiled code from metadata\\n    if (!isIdentifierName(stringValue)) {\\n      stringSpecifiers.add(stringValue);\\n    }\\n    return stringValue;\\n  } else {\\n    throw new Error(\\n      `Expected export specifier to be either Identifier or StringLiteral, got ${path.node.type}`,\\n    );\\n  }\\n}\\n\\nfunction assertExportSpecifier(\\n  path: NodePath,\\n): asserts path is NodePath<t.ExportSpecifier> {\\n  if (path.isExportSpecifier()) {\\n    return;\\n  } else if (path.isExportNamespaceSpecifier()) {\\n    throw path.buildCodeFrameError(\\n      \\\"Export namespace should be first transformed by `@babel/plugin-proposal-export-namespace-from`.\\\",\\n    );\\n  } else {\\n    throw path.buildCodeFrameError(\\\"Unexpected export specifier type\\\");\\n  }\\n}\\n\\n/**\\n * Get metadata about the imports and exports present in this module.\\n */\\nfunction getModuleMetadata(\\n  programPath: NodePath<t.Program>,\\n  {\\n    lazy,\\n    initializeReexports,\\n  }: {\\n    // todo(flow-ts) changed from boolean, to match expected usage inside the function\\n    lazy: boolean | string[] | ((source: string) => boolean);\\n    initializeReexports: boolean | void;\\n  },\\n  stringSpecifiers: Set<string>,\\n) {\\n  const localData = getLocalExportMetadata(\\n    programPath,\\n    initializeReexports,\\n    stringSpecifiers,\\n  );\\n\\n  const sourceData = new Map<string, SourceModuleMetadata>();\\n  const getData = (sourceNode: t.StringLiteral) => {\\n    const source = sourceNode.value;\\n\\n    let data = sourceData.get(source);\\n    if (!data) {\\n      data = {\\n        name: programPath.scope.generateUidIdentifier(\\n          basename(source, extname(source)),\\n        ).name,\\n\\n        interop: \\\"none\\\",\\n\\n        loc: null,\\n\\n        // Data about the requested sources and names.\\n        imports: new Map(),\\n        importsNamespace: new Set(),\\n\\n        // Metadata about data that is passed directly from source to export.\\n        reexports: new Map(),\\n        reexportNamespace: new Set(),\\n        reexportAll: null,\\n\\n        lazy: false,\\n\\n        referenced: false,\\n      };\\n      sourceData.set(source, data);\\n    }\\n    return data;\\n  };\\n  let hasExports = false;\\n  programPath.get(\\\"body\\\").forEach(child => {\\n    if (child.isImportDeclaration()) {\\n      const data = getData(child.node.source);\\n      if (!data.loc) data.loc = child.node.loc;\\n\\n      child.get(\\\"specifiers\\\").forEach(spec => {\\n        if (spec.isImportDefaultSpecifier()) {\\n          const localName = spec.get(\\\"local\\\").node.name;\\n\\n          data.imports.set(localName, \\\"default\\\");\\n\\n          const reexport = localData.get(localName);\\n          if (reexport) {\\n            localData.delete(localName);\\n\\n            reexport.names.forEach(name => {\\n              data.reexports.set(name, \\\"default\\\");\\n            });\\n            data.referenced = true;\\n          }\\n        } else if (spec.isImportNamespaceSpecifier()) {\\n          const localName = spec.get(\\\"local\\\").node.name;\\n\\n          data.importsNamespace.add(localName);\\n          const reexport = localData.get(localName);\\n          if (reexport) {\\n            localData.delete(localName);\\n\\n            reexport.names.forEach(name => {\\n              data.reexportNamespace.add(name);\\n            });\\n            data.referenced = true;\\n          }\\n        } else if (spec.isImportSpecifier()) {\\n          const importName = getExportSpecifierName(\\n            spec.get(\\\"imported\\\"),\\n            stringSpecifiers,\\n          );\\n          const localName = spec.get(\\\"local\\\").node.name;\\n\\n          data.imports.set(localName, importName);\\n\\n          const reexport = localData.get(localName);\\n          if (reexport) {\\n            localData.delete(localName);\\n\\n            reexport.names.forEach(name => {\\n              data.reexports.set(name, importName);\\n            });\\n            data.referenced = true;\\n          }\\n        }\\n      });\\n    } else if (child.isExportAllDeclaration()) {\\n      hasExports = true;\\n      const data = getData(child.node.source);\\n      if (!data.loc) data.loc = child.node.loc;\\n\\n      data.reexportAll = {\\n        loc: child.node.loc,\\n      };\\n      data.referenced = true;\\n    } else if (child.isExportNamedDeclaration() && child.node.source) {\\n      hasExports = true;\\n      const data = getData(child.node.source);\\n      if (!data.loc) data.loc = child.node.loc;\\n\\n      child.get(\\\"specifiers\\\").forEach(spec => {\\n        assertExportSpecifier(spec);\\n        const importName = getExportSpecifierName(\\n          spec.get(\\\"local\\\"),\\n          stringSpecifiers,\\n        );\\n        const exportName = getExportSpecifierName(\\n          spec.get(\\\"exported\\\"),\\n          stringSpecifiers,\\n        );\\n\\n        data.reexports.set(exportName, importName);\\n        data.referenced = true;\\n\\n        if (exportName === \\\"__esModule\\\") {\\n          throw spec\\n            .get(\\\"exported\\\")\\n            .buildCodeFrameError('Illegal export \\\"__esModule\\\".');\\n        }\\n      });\\n    } else if (\\n      child.isExportNamedDeclaration() ||\\n      child.isExportDefaultDeclaration()\\n    ) {\\n      hasExports = true;\\n    }\\n  });\\n\\n  for (const metadata of sourceData.values()) {\\n    let needsDefault = false;\\n    let needsNamed = false;\\n\\n    if (metadata.importsNamespace.size > 0) {\\n      needsDefault = true;\\n      needsNamed = true;\\n    }\\n\\n    if (metadata.reexportAll) {\\n      needsNamed = true;\\n    }\\n\\n    for (const importName of metadata.imports.values()) {\\n      if (importName === \\\"default\\\") needsDefault = true;\\n      else needsNamed = true;\\n    }\\n    for (const importName of metadata.reexports.values()) {\\n      if (importName === \\\"default\\\") needsDefault = true;\\n      else needsNamed = true;\\n    }\\n\\n    if (needsDefault && needsNamed) {\\n      // TODO(logan): Using the namespace interop here is unfortunate. Revisit.\\n      metadata.interop = \\\"namespace\\\";\\n    } else if (needsDefault) {\\n      metadata.interop = \\\"default\\\";\\n    }\\n  }\\n\\n  for (const [source, metadata] of sourceData) {\\n    if (\\n      lazy !== false &&\\n      !(isSideEffectImport(metadata) || metadata.reexportAll)\\n    ) {\\n      if (lazy === true) {\\n        // 'true' means that local relative files are eagerly loaded and\\n        // dependency modules are loaded lazily.\\n        metadata.lazy = !/\\\\./.test(source);\\n      } else if (Array.isArray(lazy)) {\\n        metadata.lazy = lazy.indexOf(source) !== -1;\\n      } else if (typeof lazy === \\\"function\\\") {\\n        metadata.lazy = lazy(source);\\n      } else {\\n        throw new Error(`.lazy must be a boolean, string array, or function`);\\n      }\\n    }\\n  }\\n\\n  return {\\n    hasExports,\\n    local: localData,\\n    sources: sourceData,\\n  };\\n}\\n\\ntype ModuleBindingKind = \\\"import\\\" | \\\"hoisted\\\" | \\\"block\\\" | \\\"var\\\";\\n/**\\n * Get metadata about local variables that are exported.\\n */\\nfunction getLocalExportMetadata(\\n  programPath: NodePath<t.Program>,\\n  initializeReexports: boolean | void,\\n  stringSpecifiers: Set<string>,\\n): Map<string, LocalExportMetadata> {\\n  const bindingKindLookup = new Map();\\n\\n  programPath.get(\\\"body\\\").forEach((child: NodePath) => {\\n    let kind: ModuleBindingKind;\\n    if (child.isImportDeclaration()) {\\n      kind = \\\"import\\\";\\n    } else {\\n      if (child.isExportDefaultDeclaration()) {\\n        child = child.get(\\\"declaration\\\");\\n      }\\n      if (child.isExportNamedDeclaration()) {\\n        if (child.node.declaration) {\\n          child = child.get(\\\"declaration\\\");\\n        } else if (\\n          initializeReexports &&\\n          child.node.source &&\\n          child.get(\\\"source\\\").isStringLiteral()\\n        ) {\\n          child.get(\\\"specifiers\\\").forEach(spec => {\\n            assertExportSpecifier(spec);\\n            bindingKindLookup.set(spec.get(\\\"local\\\").node.name, \\\"block\\\");\\n          });\\n          return;\\n        }\\n      }\\n\\n      if (child.isFunctionDeclaration()) {\\n        kind = \\\"hoisted\\\";\\n      } else if (child.isClassDeclaration()) {\\n        kind = \\\"block\\\";\\n      } else if (child.isVariableDeclaration({ kind: \\\"var\\\" })) {\\n        kind = \\\"var\\\";\\n      } else if (child.isVariableDeclaration()) {\\n        kind = \\\"block\\\";\\n      } else {\\n        return;\\n      }\\n    }\\n\\n    Object.keys(child.getOuterBindingIdentifiers()).forEach(name => {\\n      bindingKindLookup.set(name, kind);\\n    });\\n  });\\n\\n  const localMetadata = new Map();\\n  const getLocalMetadata = (idPath: NodePath<t.Identifier>) => {\\n    const localName = idPath.node.name;\\n    let metadata = localMetadata.get(localName);\\n\\n    if (!metadata) {\\n      const kind = bindingKindLookup.get(localName);\\n\\n      if (kind === undefined) {\\n        throw idPath.buildCodeFrameError(\\n          `Exporting local \\\"${localName}\\\", which is not declared.`,\\n        );\\n      }\\n\\n      metadata = {\\n        names: [],\\n        kind,\\n      };\\n      localMetadata.set(localName, metadata);\\n    }\\n    return metadata;\\n  };\\n\\n  programPath.get(\\\"body\\\").forEach(child => {\\n    if (\\n      child.isExportNamedDeclaration() &&\\n      (initializeReexports || !child.node.source)\\n    ) {\\n      if (child.node.declaration) {\\n        const declaration = child.get(\\\"declaration\\\");\\n        const ids = declaration.getOuterBindingIdentifierPaths();\\n        Object.keys(ids).forEach(name => {\\n          if (name === \\\"__esModule\\\") {\\n            throw declaration.buildCodeFrameError(\\n              'Illegal export \\\"__esModule\\\".',\\n            );\\n          }\\n          getLocalMetadata(ids[name]).names.push(name);\\n        });\\n      } else {\\n        child.get(\\\"specifiers\\\").forEach(spec => {\\n          const local = spec.get(\\\"local\\\");\\n          const exported = spec.get(\\\"exported\\\");\\n          const localMetadata = getLocalMetadata(local);\\n          const exportName = getExportSpecifierName(exported, stringSpecifiers);\\n\\n          if (exportName === \\\"__esModule\\\") {\\n            throw exported.buildCodeFrameError('Illegal export \\\"__esModule\\\".');\\n          }\\n          localMetadata.names.push(exportName);\\n        });\\n      }\\n    } else if (child.isExportDefaultDeclaration()) {\\n      const declaration = child.get(\\\"declaration\\\");\\n      if (\\n        declaration.isFunctionDeclaration() ||\\n        declaration.isClassDeclaration()\\n      ) {\\n        // @ts-expect-error todo(flow->ts): improve babel-types\\n        getLocalMetadata(declaration.get(\\\"id\\\")).names.push(\\\"default\\\");\\n      } else {\\n        // These should have been removed by the nameAnonymousExports() call.\\n        throw declaration.buildCodeFrameError(\\n          \\\"Unexpected default expression export.\\\",\\n        );\\n      }\\n    }\\n  });\\n  return localMetadata;\\n}\\n\\n/**\\n * Ensure that all exported values have local binding names.\\n */\\nfunction nameAnonymousExports(programPath: NodePath<t.Program>) {\\n  // Name anonymous exported locals.\\n  programPath.get(\\\"body\\\").forEach(child => {\\n    if (!child.isExportDefaultDeclaration()) return;\\n    splitExportDeclaration(child);\\n  });\\n}\\n\\nfunction removeImportExportDeclarations(programPath: NodePath<t.Program>) {\\n  programPath.get(\\\"body\\\").forEach(child => {\\n    if (child.isImportDeclaration()) {\\n      child.remove();\\n    } else if (child.isExportNamedDeclaration()) {\\n      if (child.node.declaration) {\\n        // @ts-expect-error todo(flow->ts): avoid mutations\\n        child.node.declaration._blockHoist = child.node._blockHoist;\\n        child.replaceWith(child.node.declaration);\\n      } else {\\n        child.remove();\\n      }\\n    } else if (child.isExportDefaultDeclaration()) {\\n      // export default foo;\\n      const declaration = child.get(\\\"declaration\\\");\\n      if (\\n        declaration.isFunctionDeclaration() ||\\n        declaration.isClassDeclaration()\\n      ) {\\n        // @ts-expect-error todo(flow->ts): avoid mutations\\n        declaration._blockHoist = child.node._blockHoist;\\n        child.replaceWith(\\n          declaration as NodePath<t.FunctionDeclaration | t.ClassDeclaration>,\\n        );\\n      } else {\\n        // These should have been removed by the nameAnonymousExports() call.\\n        throw declaration.buildCodeFrameError(\\n          \\\"Unexpected default expression export.\\\",\\n        );\\n      }\\n    } else if (child.isExportAllDeclaration()) {\\n      child.remove();\\n    }\\n  });\\n}\\n\"],\"mappings\":\"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\"}/package.json\u0003{\n  \"name\": \"@babel/helper-module-transforms\",\n  \"version\": \"7.21.2\",\n  \"description\": \"Babel helper functions for implementing ES6 module transformations\",\n  \"author\": \"The Babel Team (https://babel.dev/team)\",\n  \"homepage\": \"https://babel.dev/docs/en/next/babel-helper-module-transforms\",\n  \"license\": \"MIT\",\n  \"publishConfig\": {\n    \"access\": \"public\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/babel/babel.git\",\n    \"directory\": \"packages/babel-helper-module-transforms\"\n  },\n  \"main\": \"./lib/index.js\",\n  \"dependencies\": {\n    \"@babel/helper-environment-visitor\": \"^7.18.9\",\n    \"@babel/helper-module-imports\": \"^7.18.6\",\n    \"@babel/helper-simple-access\": \"^7.20.2\",\n    \"@babel/helper-split-export-declaration\": \"^7.18.6\",\n    \"@babel/helper-validator-identifier\": \"^7.19.1\",\n    \"@babel/template\": \"^7.20.7\",\n    \"@babel/traverse\": \"^7.21.2\",\n    \"@babel/types\": \"^7.21.2\"\n  },\n  \"engines\": {\n    \"node\": \">=6.9.0\"\n  },\n  \"type\": \"commonjs\"\n}/lib/rewrite-this.js.map\u0005{\"version\":3,\"names\":[\"numericLiteral\",\"unaryExpression\",\"rewriteThisVisitor\",\"traverse\",\"visitors\",\"merge\",\"environmentVisitor\",\"ThisExpression\",\"path\",\"replaceWith\",\"rewriteThis\",\"programPath\",\"node\",\"noScope\"],\"sources\":[\"../src/rewrite-this.ts\"],\"sourcesContent\":[\"import environmentVisitor from \\\"@babel/helper-environment-visitor\\\";\\nimport traverse from \\\"@babel/traverse\\\";\\nimport { numericLiteral, unaryExpression } from \\\"@babel/types\\\";\\n\\nimport type { NodePath, Visitor } from \\\"@babel/traverse\\\";\\n\\n/**\\n * A visitor to walk the tree, rewriting all `this` references in the top-level scope to be\\n * `void 0` (undefined).\\n */\\nconst rewriteThisVisitor: Visitor = traverse.visitors.merge([\\n  environmentVisitor,\\n  {\\n    ThisExpression(path) {\\n      path.replaceWith(unaryExpression(\\\"void\\\", numericLiteral(0), true));\\n    },\\n  },\\n]);\\n\\nexport default function rewriteThis(programPath: NodePath) {\\n  // Rewrite \\\"this\\\" to be \\\"undefined\\\".\\n  traverse(programPath.node, { ...rewriteThisVisitor, noScope: true });\\n}\\n\"],\"mappings\":\";;;;;;AAAA;AACA;AACA;AAA+D;EAAtDA,cAAc;EAAEC;AAAe;AAQxC,MAAMC,kBAA2B,GAAGC,iBAAQ,CAACC,QAAQ,CAACC,KAAK,CAAC,CAC1DC,iCAAkB,EAClB;EACEC,cAAc,CAACC,IAAI,EAAE;IACnBA,IAAI,CAACC,WAAW,CAACR,eAAe,CAAC,MAAM,EAAED,cAAc,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;EACpE;AACF,CAAC,CACF,CAAC;AAEa,SAASU,WAAW,CAACC,WAAqB,EAAE;EAEzD,IAAAR,iBAAQ,EAACQ,WAAW,CAACC,IAAI,oBAAOV,kBAAkB;IAAEW,OAAO,EAAE;EAAI,GAAG;AACtE\"}/lib/rewrite-live-references.js/\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = rewriteLiveReferences;\nvar _assert = require(\"assert\");\nvar _t = require(\"@babel/types\");\nvar _template = require(\"@babel/template\");\nvar _helperSimpleAccess = require(\"@babel/helper-simple-access\");\nconst {\n  assignmentExpression,\n  callExpression,\n  cloneNode,\n  expressionStatement,\n  getOuterBindingIdentifiers,\n  identifier,\n  isMemberExpression,\n  isVariableDeclaration,\n  jsxIdentifier,\n  jsxMemberExpression,\n  memberExpression,\n  numericLiteral,\n  sequenceExpression,\n  stringLiteral,\n  variableDeclaration,\n  variableDeclarator\n} = _t;\nfunction isInType(path) {\n  do {\n    switch (path.parent.type) {\n      case \"TSTypeAnnotation\":\n      case \"TSTypeAliasDeclaration\":\n      case \"TSTypeReference\":\n      case \"TypeAnnotation\":\n      case \"TypeAlias\":\n        return true;\n      case \"ExportSpecifier\":\n        return path.parentPath.parent.exportKind === \"type\";\n      default:\n        if (path.parentPath.isStatement() || path.parentPath.isExpression()) {\n          return false;\n        }\n    }\n  } while (path = path.parentPath);\n}\nfunction rewriteLiveReferences(programPath, metadata) {\n  const imported = new Map();\n  const exported = new Map();\n  const requeueInParent = path => {\n    programPath.requeue(path);\n  };\n  for (const [source, data] of metadata.source) {\n    for (const [localName, importName] of data.imports) {\n      imported.set(localName, [source, importName, null]);\n    }\n    for (const localName of data.importsNamespace) {\n      imported.set(localName, [source, null, localName]);\n    }\n  }\n  for (const [local, data] of metadata.local) {\n    let exportMeta = exported.get(local);\n    if (!exportMeta) {\n      exportMeta = [];\n      exported.set(local, exportMeta);\n    }\n    exportMeta.push(...data.names);\n  }\n  const rewriteBindingInitVisitorState = {\n    metadata,\n    requeueInParent,\n    scope: programPath.scope,\n    exported\n  };\n  programPath.traverse(rewriteBindingInitVisitor, rewriteBindingInitVisitorState);\n  (0, _helperSimpleAccess.default)(programPath, new Set([...Array.from(imported.keys()), ...Array.from(exported.keys())]), false);\n  const rewriteReferencesVisitorState = {\n    seen: new WeakSet(),\n    metadata,\n    requeueInParent,\n    scope: programPath.scope,\n    imported,\n    exported,\n    buildImportReference: ([source, importName, localName], identNode) => {\n      const meta = metadata.source.get(source);\n      meta.referenced = true;\n      if (localName) {\n        if (meta.lazy) {\n          identNode = callExpression(identNode, []);\n        }\n        return identNode;\n      }\n      let namespace = identifier(meta.name);\n      if (meta.lazy) namespace = callExpression(namespace, []);\n      if (importName === \"default\" && meta.interop === \"node-default\") {\n        return namespace;\n      }\n      const computed = metadata.stringSpecifiers.has(importName);\n      return memberExpression(namespace, computed ? stringLiteral(importName) : identifier(importName), computed);\n    }\n  };\n  programPath.traverse(rewriteReferencesVisitor, rewriteReferencesVisitorState);\n}\nconst rewriteBindingInitVisitor = {\n  Scope(path) {\n    path.skip();\n  },\n  ClassDeclaration(path) {\n    const {\n      requeueInParent,\n      exported,\n      metadata\n    } = this;\n    const {\n      id\n    } = path.node;\n    if (!id) throw new Error(\"Expected class to have a name\");\n    const localName = id.name;\n    const exportNames = exported.get(localName) || [];\n    if (exportNames.length > 0) {\n      const statement = expressionStatement(buildBindingExportAssignmentExpression(metadata, exportNames, identifier(localName), path.scope));\n      statement._blockHoist = path.node._blockHoist;\n      requeueInParent(path.insertAfter(statement)[0]);\n    }\n  },\n  VariableDeclaration(path) {\n    const {\n      requeueInParent,\n      exported,\n      metadata\n    } = this;\n    Object.keys(path.getOuterBindingIdentifiers()).forEach(localName => {\n      const exportNames = exported.get(localName) || [];\n      if (exportNames.length > 0) {\n        const statement = expressionStatement(buildBindingExportAssignmentExpression(metadata, exportNames, identifier(localName), path.scope));\n        statement._blockHoist = path.node._blockHoist;\n        requeueInParent(path.insertAfter(statement)[0]);\n      }\n    });\n  }\n};\nconst buildBindingExportAssignmentExpression = (metadata, exportNames, localExpr, scope) => {\n  const exportsObjectName = metadata.exportName;\n  for (let currentScope = scope; currentScope != null; currentScope = currentScope.parent) {\n    if (currentScope.hasOwnBinding(exportsObjectName)) {\n      currentScope.rename(exportsObjectName);\n    }\n  }\n  return (exportNames || []).reduce((expr, exportName) => {\n    const {\n      stringSpecifiers\n    } = metadata;\n    const computed = stringSpecifiers.has(exportName);\n    return assignmentExpression(\"=\", memberExpression(identifier(exportsObjectName), computed ? stringLiteral(exportName) : identifier(exportName), computed), expr);\n  }, localExpr);\n};\nconst buildImportThrow = localName => {\n  return _template.default.expression.ast`\n    (function() {\n      throw new Error('\"' + '${localName}' + '\" is read-only.');\n    })()\n  `;\n};\nconst rewriteReferencesVisitor = {\n  ReferencedIdentifier(path) {\n    const {\n      seen,\n      buildImportReference,\n      scope,\n      imported,\n      requeueInParent\n    } = this;\n    if (seen.has(path.node)) return;\n    seen.add(path.node);\n    const localName = path.node.name;\n    const importData = imported.get(localName);\n    if (importData) {\n      if (isInType(path)) {\n        throw path.buildCodeFrameError(`Cannot transform the imported binding \"${localName}\" since it's also used in a type annotation. ` + `Please strip type annotations using @babel/preset-typescript or @babel/preset-flow.`);\n      }\n      const localBinding = path.scope.getBinding(localName);\n      const rootBinding = scope.getBinding(localName);\n      if (rootBinding !== localBinding) return;\n      const ref = buildImportReference(importData, path.node);\n      ref.loc = path.node.loc;\n      if ((path.parentPath.isCallExpression({\n        callee: path.node\n      }) || path.parentPath.isOptionalCallExpression({\n        callee: path.node\n      }) || path.parentPath.isTaggedTemplateExpression({\n        tag: path.node\n      })) && isMemberExpression(ref)) {\n        path.replaceWith(sequenceExpression([numericLiteral(0), ref]));\n      } else if (path.isJSXIdentifier() && isMemberExpression(ref)) {\n        const {\n          object,\n          property\n        } = ref;\n        path.replaceWith(jsxMemberExpression(jsxIdentifier(object.name), jsxIdentifier(property.name)));\n      } else {\n        path.replaceWith(ref);\n      }\n      requeueInParent(path);\n      path.skip();\n    }\n  },\n  UpdateExpression(path) {\n    const {\n      scope,\n      seen,\n      imported,\n      exported,\n      requeueInParent,\n      buildImportReference\n    } = this;\n    if (seen.has(path.node)) return;\n    seen.add(path.node);\n    const arg = path.get(\"argument\");\n    if (arg.isMemberExpression()) return;\n    const update = path.node;\n    if (arg.isIdentifier()) {\n      const localName = arg.node.name;\n      if (scope.getBinding(localName) !== path.scope.getBinding(localName)) {\n        return;\n      }\n      const exportedNames = exported.get(localName);\n      const importData = imported.get(localName);\n      if ((exportedNames == null ? void 0 : exportedNames.length) > 0 || importData) {\n        if (importData) {\n          path.replaceWith(assignmentExpression(update.operator[0] + \"=\", buildImportReference(importData, arg.node), buildImportThrow(localName)));\n        } else if (update.prefix) {\n          path.replaceWith(buildBindingExportAssignmentExpression(this.metadata, exportedNames, cloneNode(update), path.scope));\n        } else {\n          const ref = scope.generateDeclaredUidIdentifier(localName);\n          path.replaceWith(sequenceExpression([assignmentExpression(\"=\", cloneNode(ref), cloneNode(update)), buildBindingExportAssignmentExpression(this.metadata, exportedNames, identifier(localName), path.scope), cloneNode(ref)]));\n        }\n      }\n    }\n    requeueInParent(path);\n    path.skip();\n  },\n  AssignmentExpression: {\n    exit(path) {\n      const {\n        scope,\n        seen,\n        imported,\n        exported,\n        requeueInParent,\n        buildImportReference\n      } = this;\n      if (seen.has(path.node)) return;\n      seen.add(path.node);\n      const left = path.get(\"left\");\n      if (left.isMemberExpression()) return;\n      if (left.isIdentifier()) {\n        const localName = left.node.name;\n        if (scope.getBinding(localName) !== path.scope.getBinding(localName)) {\n          return;\n        }\n        const exportedNames = exported.get(localName);\n        const importData = imported.get(localName);\n        if ((exportedNames == null ? void 0 : exportedNames.length) > 0 || importData) {\n          _assert(path.node.operator === \"=\", \"Path was not simplified\");\n          const assignment = path.node;\n          if (importData) {\n            assignment.left = buildImportReference(importData, left.node);\n            assignment.right = sequenceExpression([assignment.right, buildImportThrow(localName)]);\n          }\n          path.replaceWith(buildBindingExportAssignmentExpression(this.metadata, exportedNames, assignment, path.scope));\n          requeueInParent(path);\n        }\n      } else {\n        const ids = left.getOuterBindingIdentifiers();\n        const programScopeIds = Object.keys(ids).filter(localName => scope.getBinding(localName) === path.scope.getBinding(localName));\n        const id = programScopeIds.find(localName => imported.has(localName));\n        if (id) {\n          path.node.right = sequenceExpression([path.node.right, buildImportThrow(id)]);\n        }\n        const items = [];\n        programScopeIds.forEach(localName => {\n          const exportedNames = exported.get(localName) || [];\n          if (exportedNames.length > 0) {\n            items.push(buildBindingExportAssignmentExpression(this.metadata, exportedNames, identifier(localName), path.scope));\n          }\n        });\n        if (items.length > 0) {\n          let node = sequenceExpression(items);\n          if (path.parentPath.isExpressionStatement()) {\n            node = expressionStatement(node);\n            node._blockHoist = path.parentPath.node._blockHoist;\n          }\n          const statement = path.insertAfter(node)[0];\n          requeueInParent(statement);\n        }\n      }\n    }\n  },\n  \"ForOfStatement|ForInStatement\"(path) {\n    const {\n      scope,\n      node\n    } = path;\n    const {\n      left\n    } = node;\n    const {\n      exported,\n      imported,\n      scope: programScope\n    } = this;\n    if (!isVariableDeclaration(left)) {\n      let didTransformExport = false,\n        importConstViolationName;\n      const loopBodyScope = path.get(\"body\").scope;\n      for (const name of Object.keys(getOuterBindingIdentifiers(left))) {\n        if (programScope.getBinding(name) === scope.getBinding(name)) {\n          if (exported.has(name)) {\n            didTransformExport = true;\n            if (loopBodyScope.hasOwnBinding(name)) {\n              loopBodyScope.rename(name);\n            }\n          }\n          if (imported.has(name) && !importConstViolationName) {\n            importConstViolationName = name;\n          }\n        }\n      }\n      if (!didTransformExport && !importConstViolationName) {\n        return;\n      }\n      path.ensureBlock();\n      const bodyPath = path.get(\"body\");\n      const newLoopId = scope.generateUidIdentifierBasedOnNode(left);\n      path.get(\"left\").replaceWith(variableDeclaration(\"let\", [variableDeclarator(cloneNode(newLoopId))]));\n      scope.registerDeclaration(path.get(\"left\"));\n      if (didTransformExport) {\n        bodyPath.unshiftContainer(\"body\", expressionStatement(assignmentExpression(\"=\", left, newLoopId)));\n      }\n      if (importConstViolationName) {\n        bodyPath.unshiftContainer(\"body\", expressionStatement(buildImportThrow(importConstViolationName)));\n      }\n    }\n  }\n};\n\n//# sourceMappingURL=rewrite-live-references.js.map\n#/lib/rewrite-live-references.js.mapz{\"version\":3,\"names\":[\"assignmentExpression\",\"callExpression\",\"cloneNode\",\"expressionStatement\",\"getOuterBindingIdentifiers\",\"identifier\",\"isMemberExpression\",\"isVariableDeclaration\",\"jsxIdentifier\",\"jsxMemberExpression\",\"memberExpression\",\"numericLiteral\",\"sequenceExpression\",\"stringLiteral\",\"variableDeclaration\",\"variableDeclarator\",\"isInType\",\"path\",\"parent\",\"type\",\"parentPath\",\"exportKind\",\"isStatement\",\"isExpression\",\"rewriteLiveReferences\",\"programPath\",\"metadata\",\"imported\",\"Map\",\"exported\",\"requeueInParent\",\"requeue\",\"source\",\"data\",\"localName\",\"importName\",\"imports\",\"set\",\"importsNamespace\",\"local\",\"exportMeta\",\"get\",\"push\",\"names\",\"rewriteBindingInitVisitorState\",\"scope\",\"traverse\",\"rewriteBindingInitVisitor\",\"simplifyAccess\",\"Set\",\"Array\",\"from\",\"keys\",\"rewriteReferencesVisitorState\",\"seen\",\"WeakSet\",\"buildImportReference\",\"identNode\",\"meta\",\"referenced\",\"lazy\",\"namespace\",\"name\",\"interop\",\"computed\",\"stringSpecifiers\",\"has\",\"rewriteReferencesVisitor\",\"Scope\",\"skip\",\"ClassDeclaration\",\"id\",\"node\",\"Error\",\"exportNames\",\"length\",\"statement\",\"buildBindingExportAssignmentExpression\",\"_blockHoist\",\"insertAfter\",\"VariableDeclaration\",\"Object\",\"forEach\",\"localExpr\",\"exportsObjectName\",\"exportName\",\"currentScope\",\"hasOwnBinding\",\"rename\",\"reduce\",\"expr\",\"buildImportThrow\",\"template\",\"expression\",\"ast\",\"ReferencedIdentifier\",\"add\",\"importData\",\"buildCodeFrameError\",\"localBinding\",\"getBinding\",\"rootBinding\",\"ref\",\"loc\",\"isCallExpression\",\"callee\",\"isOptionalCallExpression\",\"isTaggedTemplateExpression\",\"tag\",\"replaceWith\",\"isJSXIdentifier\",\"object\",\"property\",\"UpdateExpression\",\"arg\",\"update\",\"isIdentifier\",\"exportedNames\",\"operator\",\"prefix\",\"generateDeclaredUidIdentifier\",\"AssignmentExpression\",\"exit\",\"left\",\"assert\",\"assignment\",\"right\",\"ids\",\"programScopeIds\",\"filter\",\"find\",\"items\",\"isExpressionStatement\",\"programScope\",\"didTransformExport\",\"importConstViolationName\",\"loopBodyScope\",\"ensureBlock\",\"bodyPath\",\"newLoopId\",\"generateUidIdentifierBasedOnNode\",\"registerDeclaration\",\"unshiftContainer\"],\"sources\":[\"../src/rewrite-live-references.ts\"],\"sourcesContent\":[\"import assert from \\\"assert\\\";\\nimport {\\n  assignmentExpression,\\n  callExpression,\\n  cloneNode,\\n  expressionStatement,\\n  getOuterBindingIdentifiers,\\n  identifier,\\n  isMemberExpression,\\n  isVariableDeclaration,\\n  jsxIdentifier,\\n  jsxMemberExpression,\\n  memberExpression,\\n  numericLiteral,\\n  sequenceExpression,\\n  stringLiteral,\\n  variableDeclaration,\\n  variableDeclarator,\\n} from \\\"@babel/types\\\";\\nimport type * as t from \\\"@babel/types\\\";\\nimport template from \\\"@babel/template\\\";\\nimport type { NodePath, Visitor, Scope } from \\\"@babel/traverse\\\";\\nimport simplifyAccess from \\\"@babel/helper-simple-access\\\";\\n\\nimport type { ModuleMetadata } from \\\"./normalize-and-load-metadata\\\";\\n\\ninterface RewriteReferencesVisitorState {\\n  exported: Map<any, any>;\\n  metadata: ModuleMetadata;\\n  requeueInParent: (path: NodePath) => void;\\n  scope: Scope;\\n  imported: Map<any, any>;\\n  buildImportReference: (\\n    [source, importName, localName]: readonly [string, string, string],\\n    identNode: t.Identifier | t.CallExpression | t.JSXIdentifier,\\n  ) => any;\\n  seen: WeakSet<object>;\\n}\\n\\ninterface RewriteBindingInitVisitorState {\\n  exported: Map<any, any>;\\n  metadata: ModuleMetadata;\\n  requeueInParent: (path: NodePath) => void;\\n  scope: Scope;\\n}\\n\\nfunction isInType(path: NodePath) {\\n  do {\\n    switch (path.parent.type) {\\n      case \\\"TSTypeAnnotation\\\":\\n      case \\\"TSTypeAliasDeclaration\\\":\\n      case \\\"TSTypeReference\\\":\\n      case \\\"TypeAnnotation\\\":\\n      case \\\"TypeAlias\\\":\\n        return true;\\n      case \\\"ExportSpecifier\\\":\\n        return (\\n          (\\n            path.parentPath.parent as\\n              | t.ExportDefaultDeclaration\\n              | t.ExportNamedDeclaration\\n          ).exportKind === \\\"type\\\"\\n        );\\n      default:\\n        if (path.parentPath.isStatement() || path.parentPath.isExpression()) {\\n          return false;\\n        }\\n    }\\n  } while ((path = path.parentPath));\\n}\\n\\nexport default function rewriteLiveReferences(\\n  programPath: NodePath<t.Program>,\\n  metadata: ModuleMetadata,\\n) {\\n  const imported = new Map();\\n  const exported = new Map();\\n  const requeueInParent = (path: NodePath) => {\\n    // Manually re-queue `exports.default =` expressions so that the ES3\\n    // transform has an opportunity to convert them. Ideally this would\\n    // happen automatically from the replaceWith above. See #4140 for\\n    // more info.\\n    programPath.requeue(path);\\n  };\\n\\n  for (const [source, data] of metadata.source) {\\n    for (const [localName, importName] of data.imports) {\\n      imported.set(localName, [source, importName, null]);\\n    }\\n    for (const localName of data.importsNamespace) {\\n      imported.set(localName, [source, null, localName]);\\n    }\\n  }\\n\\n  for (const [local, data] of metadata.local) {\\n    let exportMeta = exported.get(local);\\n    if (!exportMeta) {\\n      exportMeta = [];\\n      exported.set(local, exportMeta);\\n    }\\n\\n    exportMeta.push(...data.names);\\n  }\\n\\n  // Rewrite initialization of bindings to update exports.\\n  const rewriteBindingInitVisitorState: RewriteBindingInitVisitorState = {\\n    metadata,\\n    requeueInParent,\\n    scope: programPath.scope,\\n    exported, // local name => exported name list\\n  };\\n  programPath.traverse(\\n    // eslint-disable-next-line @typescript-eslint/no-use-before-define\\n    rewriteBindingInitVisitor,\\n    rewriteBindingInitVisitorState,\\n  );\\n\\n  simplifyAccess(\\n    programPath,\\n    // NOTE(logan): The 'Array.from' calls are to make this code with in loose mode.\\n    new Set([...Array.from(imported.keys()), ...Array.from(exported.keys())]),\\n    false,\\n  );\\n\\n  // Rewrite reads/writes from imports and exports to have the correct behavior.\\n  const rewriteReferencesVisitorState: RewriteReferencesVisitorState = {\\n    seen: new WeakSet(),\\n    metadata,\\n    requeueInParent,\\n    scope: programPath.scope,\\n    imported, // local / import\\n    exported, // local name => exported name list\\n    buildImportReference: ([source, importName, localName], identNode) => {\\n      const meta = metadata.source.get(source);\\n      meta.referenced = true;\\n\\n      if (localName) {\\n        if (meta.lazy) {\\n          identNode = callExpression(\\n            // @ts-expect-error Fixme: we should handle the case when identNode is a JSXIdentifier\\n            identNode,\\n            [],\\n          );\\n        }\\n        return identNode;\\n      }\\n\\n      let namespace: t.Expression = identifier(meta.name);\\n      if (meta.lazy) namespace = callExpression(namespace, []);\\n\\n      if (importName === \\\"default\\\" && meta.interop === \\\"node-default\\\") {\\n        return namespace;\\n      }\\n\\n      const computed = metadata.stringSpecifiers.has(importName);\\n\\n      return memberExpression(\\n        namespace,\\n        computed ? stringLiteral(importName) : identifier(importName),\\n        computed,\\n      );\\n    },\\n  };\\n  // eslint-disable-next-line @typescript-eslint/no-use-before-define\\n  programPath.traverse(rewriteReferencesVisitor, rewriteReferencesVisitorState);\\n}\\n\\n/**\\n * A visitor to inject export update statements during binding initialization.\\n */\\nconst rewriteBindingInitVisitor: Visitor<RewriteBindingInitVisitorState> = {\\n  Scope(path) {\\n    path.skip();\\n  },\\n  ClassDeclaration(path) {\\n    const { requeueInParent, exported, metadata } = this;\\n\\n    const { id } = path.node;\\n    if (!id) throw new Error(\\\"Expected class to have a name\\\");\\n    const localName = id.name;\\n\\n    const exportNames = exported.get(localName) || [];\\n    if (exportNames.length > 0) {\\n      const statement = expressionStatement(\\n        // eslint-disable-next-line @typescript-eslint/no-use-before-define\\n        buildBindingExportAssignmentExpression(\\n          metadata,\\n          exportNames,\\n          identifier(localName),\\n          path.scope,\\n        ),\\n      );\\n      // @ts-expect-error todo(flow->ts): avoid mutations\\n      statement._blockHoist = path.node._blockHoist;\\n\\n      requeueInParent(path.insertAfter(statement)[0]);\\n    }\\n  },\\n  VariableDeclaration(path) {\\n    const { requeueInParent, exported, metadata } = this;\\n\\n    Object.keys(path.getOuterBindingIdentifiers()).forEach(localName => {\\n      const exportNames = exported.get(localName) || [];\\n\\n      if (exportNames.length > 0) {\\n        const statement = expressionStatement(\\n          // eslint-disable-next-line @typescript-eslint/no-use-before-define\\n          buildBindingExportAssignmentExpression(\\n            metadata,\\n            exportNames,\\n            identifier(localName),\\n            path.scope,\\n          ),\\n        );\\n        // @ts-expect-error todo(flow->ts): avoid mutations\\n        statement._blockHoist = path.node._blockHoist;\\n\\n        requeueInParent(path.insertAfter(statement)[0]);\\n      }\\n    });\\n  },\\n};\\n\\nconst buildBindingExportAssignmentExpression = (\\n  metadata: ModuleMetadata,\\n  exportNames: string[],\\n  localExpr: t.Expression,\\n  scope: Scope,\\n) => {\\n  const exportsObjectName = metadata.exportName;\\n  for (\\n    let currentScope = scope;\\n    currentScope != null;\\n    currentScope = currentScope.parent\\n  ) {\\n    if (currentScope.hasOwnBinding(exportsObjectName)) {\\n      currentScope.rename(exportsObjectName);\\n    }\\n  }\\n  return (exportNames || []).reduce((expr, exportName) => {\\n    // class Foo {} export { Foo, Foo as Bar };\\n    // as\\n    // class Foo {} exports.Foo = exports.Bar = Foo;\\n    const { stringSpecifiers } = metadata;\\n    const computed = stringSpecifiers.has(exportName);\\n    return assignmentExpression(\\n      \\\"=\\\",\\n      memberExpression(\\n        identifier(exportsObjectName),\\n        computed ? stringLiteral(exportName) : identifier(exportName),\\n        /* computed */ computed,\\n      ),\\n      expr,\\n    );\\n  }, localExpr);\\n};\\n\\nconst buildImportThrow = (localName: string) => {\\n  return template.expression.ast`\\n    (function() {\\n      throw new Error('\\\"' + '${localName}' + '\\\" is read-only.');\\n    })()\\n  `;\\n};\\n\\nconst rewriteReferencesVisitor: Visitor<RewriteReferencesVisitorState> = {\\n  ReferencedIdentifier(path) {\\n    const { seen, buildImportReference, scope, imported, requeueInParent } =\\n      this;\\n    if (seen.has(path.node)) return;\\n    seen.add(path.node);\\n\\n    const localName = path.node.name;\\n\\n    const importData = imported.get(localName);\\n    if (importData) {\\n      if (isInType(path)) {\\n        throw path.buildCodeFrameError(\\n          `Cannot transform the imported binding \\\"${localName}\\\" since it's also used in a type annotation. ` +\\n            `Please strip type annotations using @babel/preset-typescript or @babel/preset-flow.`,\\n        );\\n      }\\n\\n      const localBinding = path.scope.getBinding(localName);\\n      const rootBinding = scope.getBinding(localName);\\n\\n      // redeclared in this scope\\n      if (rootBinding !== localBinding) return;\\n\\n      const ref = buildImportReference(importData, path.node);\\n\\n      // Preserve the binding location so that sourcemaps are nicer.\\n      ref.loc = path.node.loc;\\n\\n      if (\\n        (path.parentPath.isCallExpression({ callee: path.node }) ||\\n          path.parentPath.isOptionalCallExpression({ callee: path.node }) ||\\n          path.parentPath.isTaggedTemplateExpression({ tag: path.node })) &&\\n        isMemberExpression(ref)\\n      ) {\\n        path.replaceWith(sequenceExpression([numericLiteral(0), ref]));\\n      } else if (path.isJSXIdentifier() && isMemberExpression(ref)) {\\n        const { object, property } = ref;\\n        path.replaceWith(\\n          jsxMemberExpression(\\n            // @ts-expect-error todo(flow->ts): possible bug `object` might not have a name\\n            jsxIdentifier(object.name),\\n            // @ts-expect-error todo(flow->ts): possible bug `property` might not have a name\\n            jsxIdentifier(property.name),\\n          ),\\n        );\\n      } else {\\n        path.replaceWith(ref);\\n      }\\n\\n      requeueInParent(path);\\n\\n      // The path could have been replaced with an identifier that would\\n      // otherwise be re-visited, so we skip processing its children.\\n      path.skip();\\n    }\\n  },\\n\\n  UpdateExpression(path) {\\n    const {\\n      scope,\\n      seen,\\n      imported,\\n      exported,\\n      requeueInParent,\\n      buildImportReference,\\n    } = this;\\n\\n    if (seen.has(path.node)) return;\\n\\n    seen.add(path.node);\\n\\n    const arg = path.get(\\\"argument\\\");\\n\\n    // No change needed\\n    if (arg.isMemberExpression()) return;\\n\\n    const update = path.node;\\n\\n    if (arg.isIdentifier()) {\\n      const localName = arg.node.name;\\n\\n      // redeclared in this scope\\n      if (scope.getBinding(localName) !== path.scope.getBinding(localName)) {\\n        return;\\n      }\\n\\n      const exportedNames = exported.get(localName);\\n      const importData = imported.get(localName);\\n\\n      if (exportedNames?.length > 0 || importData) {\\n        if (importData) {\\n          path.replaceWith(\\n            assignmentExpression(\\n              update.operator[0] + \\\"=\\\",\\n              buildImportReference(importData, arg.node),\\n              buildImportThrow(localName),\\n            ),\\n          );\\n        } else if (update.prefix) {\\n          // ++foo\\n          // =>   exports.foo = ++foo\\n          path.replaceWith(\\n            buildBindingExportAssignmentExpression(\\n              this.metadata,\\n              exportedNames,\\n              cloneNode(update),\\n              path.scope,\\n            ),\\n          );\\n        } else {\\n          // foo++\\n          // =>   (ref = i++, exports.i = i, ref)\\n          const ref = scope.generateDeclaredUidIdentifier(localName);\\n\\n          path.replaceWith(\\n            sequenceExpression([\\n              assignmentExpression(\\\"=\\\", cloneNode(ref), cloneNode(update)),\\n              buildBindingExportAssignmentExpression(\\n                this.metadata,\\n                exportedNames,\\n                identifier(localName),\\n                path.scope,\\n              ),\\n              cloneNode(ref),\\n            ]),\\n          );\\n        }\\n      }\\n    }\\n\\n    requeueInParent(path);\\n    path.skip();\\n  },\\n\\n  AssignmentExpression: {\\n    exit(path) {\\n      const {\\n        scope,\\n        seen,\\n        imported,\\n        exported,\\n        requeueInParent,\\n        buildImportReference,\\n      } = this;\\n\\n      if (seen.has(path.node)) return;\\n      seen.add(path.node);\\n\\n      const left = path.get(\\\"left\\\");\\n\\n      // No change needed\\n      if (left.isMemberExpression()) return;\\n\\n      if (left.isIdentifier()) {\\n        // Simple update-assign foo += 1; export { foo };\\n        // =>   exports.foo =  (foo += 1);\\n        const localName = left.node.name;\\n\\n        // redeclared in this scope\\n        if (scope.getBinding(localName) !== path.scope.getBinding(localName)) {\\n          return;\\n        }\\n\\n        const exportedNames = exported.get(localName);\\n        const importData = imported.get(localName);\\n        if (exportedNames?.length > 0 || importData) {\\n          assert(path.node.operator === \\\"=\\\", \\\"Path was not simplified\\\");\\n\\n          const assignment = path.node;\\n\\n          if (importData) {\\n            assignment.left = buildImportReference(importData, left.node);\\n\\n            assignment.right = sequenceExpression([\\n              assignment.right,\\n              buildImportThrow(localName),\\n            ]);\\n          }\\n\\n          path.replaceWith(\\n            buildBindingExportAssignmentExpression(\\n              this.metadata,\\n              exportedNames,\\n              assignment,\\n              path.scope,\\n            ),\\n          );\\n          requeueInParent(path);\\n        }\\n      } else {\\n        const ids = left.getOuterBindingIdentifiers();\\n        const programScopeIds = Object.keys(ids).filter(\\n          localName =>\\n            scope.getBinding(localName) === path.scope.getBinding(localName),\\n        );\\n        const id = programScopeIds.find(localName => imported.has(localName));\\n\\n        if (id) {\\n          path.node.right = sequenceExpression([\\n            path.node.right,\\n            buildImportThrow(id),\\n          ]);\\n        }\\n\\n        // Complex ({a, b, c} = {}); export { a, c };\\n        // =>   ({a, b, c} = {}), (exports.a = a, exports.c = c);\\n        const items: t.Expression[] = [];\\n        programScopeIds.forEach(localName => {\\n          const exportedNames = exported.get(localName) || [];\\n          if (exportedNames.length > 0) {\\n            items.push(\\n              buildBindingExportAssignmentExpression(\\n                this.metadata,\\n                exportedNames,\\n                identifier(localName),\\n                path.scope,\\n              ),\\n            );\\n          }\\n        });\\n\\n        if (items.length > 0) {\\n          let node: t.Node = sequenceExpression(items);\\n          if (path.parentPath.isExpressionStatement()) {\\n            node = expressionStatement(node);\\n            // @ts-expect-error todo(flow->ts): avoid mutations\\n            node._blockHoist = path.parentPath.node._blockHoist;\\n          }\\n\\n          const statement = path.insertAfter(node)[0];\\n          requeueInParent(statement);\\n        }\\n      }\\n    },\\n  },\\n  \\\"ForOfStatement|ForInStatement\\\"(\\n    path: NodePath<t.ForOfStatement | t.ForInStatement>,\\n  ) {\\n    const { scope, node } = path;\\n    const { left } = node;\\n    const { exported, imported, scope: programScope } = this;\\n\\n    if (!isVariableDeclaration(left)) {\\n      let didTransformExport = false,\\n        importConstViolationName;\\n      const loopBodyScope = path.get(\\\"body\\\").scope;\\n      for (const name of Object.keys(getOuterBindingIdentifiers(left))) {\\n        if (programScope.getBinding(name) === scope.getBinding(name)) {\\n          if (exported.has(name)) {\\n            didTransformExport = true;\\n            if (loopBodyScope.hasOwnBinding(name)) {\\n              loopBodyScope.rename(name);\\n            }\\n          }\\n          if (imported.has(name) && !importConstViolationName) {\\n            importConstViolationName = name;\\n          }\\n        }\\n      }\\n      if (!didTransformExport && !importConstViolationName) {\\n        return;\\n      }\\n\\n      path.ensureBlock();\\n      const bodyPath = path.get(\\\"body\\\");\\n\\n      const newLoopId = scope.generateUidIdentifierBasedOnNode(left);\\n      path\\n        .get(\\\"left\\\")\\n        .replaceWith(\\n          variableDeclaration(\\\"let\\\", [\\n            variableDeclarator(cloneNode(newLoopId)),\\n          ]),\\n        );\\n      scope.registerDeclaration(path.get(\\\"left\\\"));\\n\\n      if (didTransformExport) {\\n        bodyPath.unshiftContainer(\\n          \\\"body\\\",\\n          expressionStatement(assignmentExpression(\\\"=\\\", left, newLoopId)),\\n        );\\n      }\\n      if (importConstViolationName) {\\n        bodyPath.unshiftContainer(\\n          \\\"body\\\",\\n          expressionStatement(buildImportThrow(importConstViolationName)),\\n        );\\n      }\\n    }\\n  },\\n};\\n\"],\"mappings\":\"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\"}/lib/dynamic-import.js.map\u000eH{\"version\":3,\"names\":[\"getDynamicImportSource\",\"node\",\"source\",\"arguments\",\"t\",\"isStringLiteral\",\"isTemplateLiteral\",\"template\",\"expression\",\"ast\",\"buildDynamicImport\",\"deferToThen\",\"wrapWithPromise\",\"builder\",\"specifier\",\"quasis\",\"length\",\"specifierToString\",\"identifier\",\"templateLiteral\",\"templateElement\",\"raw\"],\"sources\":[\"../src/dynamic-import.ts\"],\"sourcesContent\":[\"// Heavily inspired by\\n// https://github.com/airbnb/babel-plugin-dynamic-import-node/blob/master/src/utils.js\\n\\nimport * as t from \\\"@babel/types\\\";\\nimport template from \\\"@babel/template\\\";\\n\\n// TODO(Babel 8): Remove this\\nexport function getDynamicImportSource(\\n  node: t.CallExpression,\\n): t.StringLiteral | t.TemplateLiteral {\\n  const [source] = node.arguments;\\n\\n  return t.isStringLiteral(source) || t.isTemplateLiteral(source)\\n    ? source\\n    : (template.expression.ast`\\\\`\\\\${${source}}\\\\`` as t.TemplateLiteral);\\n}\\n\\nexport function buildDynamicImport(\\n  node: t.CallExpression,\\n  deferToThen: boolean,\\n  wrapWithPromise: boolean,\\n  builder: (specifier: t.Expression) => t.Expression,\\n): t.Expression {\\n  const [specifier] = node.arguments;\\n\\n  if (\\n    t.isStringLiteral(specifier) ||\\n    (t.isTemplateLiteral(specifier) && specifier.quasis.length === 0)\\n  ) {\\n    if (deferToThen) {\\n      return template.expression.ast`\\n        Promise.resolve().then(() => ${builder(specifier)})\\n      `;\\n    } else return builder(specifier);\\n  }\\n\\n  const specifierToString = t.isTemplateLiteral(specifier)\\n    ? t.identifier(\\\"specifier\\\")\\n    : t.templateLiteral(\\n        [t.templateElement({ raw: \\\"\\\" }), t.templateElement({ raw: \\\"\\\" })],\\n        [t.identifier(\\\"specifier\\\")],\\n      );\\n\\n  if (deferToThen) {\\n    return template.expression.ast`\\n      (specifier =>\\n        new Promise(r => r(${specifierToString}))\\n          .then(s => ${builder(t.identifier(\\\"s\\\"))})\\n      )(${specifier})\\n    `;\\n  } else if (wrapWithPromise) {\\n    return template.expression.ast`\\n      (specifier =>\\n        new Promise(r => r(${builder(specifierToString)}))\\n      )(${specifier})\\n    `;\\n  } else {\\n    return template.expression.ast`\\n      (specifier => ${builder(specifierToString)})(${specifier})\\n    `;\\n  }\\n}\\n\"],\"mappings\":\";;;;;;;AAGA;AACA;AAGO,SAASA,sBAAsB,CACpCC,IAAsB,EACe;EACrC,MAAM,CAACC,MAAM,CAAC,GAAGD,IAAI,CAACE,SAAS;EAE/B,OAAOC,CAAC,CAACC,eAAe,CAACH,MAAM,CAAC,IAAIE,CAAC,CAACE,iBAAiB,CAACJ,MAAM,CAAC,GAC3DA,MAAM,GACLK,iBAAQ,CAACC,UAAU,CAACC,GAAI,QAAOP,MAAO,KAA0B;AACvE;AAEO,SAASQ,kBAAkB,CAChCT,IAAsB,EACtBU,WAAoB,EACpBC,eAAwB,EACxBC,OAAkD,EACpC;EACd,MAAM,CAACC,SAAS,CAAC,GAAGb,IAAI,CAACE,SAAS;EAElC,IACEC,CAAC,CAACC,eAAe,CAACS,SAAS,CAAC,IAC3BV,CAAC,CAACE,iBAAiB,CAACQ,SAAS,CAAC,IAAIA,SAAS,CAACC,MAAM,CAACC,MAAM,KAAK,CAAE,EACjE;IACA,IAAIL,WAAW,EAAE;MACf,OAAOJ,iBAAQ,CAACC,UAAU,CAACC,GAAI;AACrC,uCAAuCI,OAAO,CAACC,SAAS,CAAE;AAC1D,OAAO;IACH,CAAC,MAAM,OAAOD,OAAO,CAACC,SAAS,CAAC;EAClC;EAEA,MAAMG,iBAAiB,GAAGb,CAAC,CAACE,iBAAiB,CAACQ,SAAS,CAAC,GACpDV,CAAC,CAACc,UAAU,CAAC,WAAW,CAAC,GACzBd,CAAC,CAACe,eAAe,CACf,CAACf,CAAC,CAACgB,eAAe,CAAC;IAAEC,GAAG,EAAE;EAAG,CAAC,CAAC,EAAEjB,CAAC,CAACgB,eAAe,CAAC;IAAEC,GAAG,EAAE;EAAG,CAAC,CAAC,CAAC,EAChE,CAACjB,CAAC,CAACc,UAAU,CAAC,WAAW,CAAC,CAAC,CAC5B;EAEL,IAAIP,WAAW,EAAE;IACf,OAAOJ,iBAAQ,CAACC,UAAU,CAACC,GAAI;AACnC;AACA,6BAA6BQ,iBAAkB;AAC/C,uBAAuBJ,OAAO,CAACT,CAAC,CAACc,UAAU,CAAC,GAAG,CAAC,CAAE;AAClD,UAAUJ,SAAU;AACpB,KAAK;EACH,CAAC,MAAM,IAAIF,eAAe,EAAE;IAC1B,OAAOL,iBAAQ,CAACC,UAAU,CAACC,GAAI;AACnC;AACA,6BAA6BI,OAAO,CAACI,iBAAiB,CAAE;AACxD,UAAUH,SAAU;AACpB,KAAK;EACH,CAAC,MAAM;IACL,OAAOP,iBAAQ,CAACC,UAAU,CAACC,GAAI;AACnC,sBAAsBI,OAAO,CAACI,iBAAiB,CAAE,KAAIH,SAAU;AAC/D,KAAK;EACH;AACF\"}#/lib/normalize-and-load-metadata.js1\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = normalizeModuleAndLoadMetadata;\nexports.hasExports = hasExports;\nexports.isSideEffectImport = isSideEffectImport;\nexports.validateImportInteropOption = validateImportInteropOption;\nvar _path = require(\"path\");\nvar _helperValidatorIdentifier = require(\"@babel/helper-validator-identifier\");\nvar _helperSplitExportDeclaration = require(\"@babel/helper-split-export-declaration\");\nfunction hasExports(metadata) {\n  return metadata.hasExports;\n}\nfunction isSideEffectImport(source) {\n  return source.imports.size === 0 && source.importsNamespace.size === 0 && source.reexports.size === 0 && source.reexportNamespace.size === 0 && !source.reexportAll;\n}\nfunction validateImportInteropOption(importInterop) {\n  if (typeof importInterop !== \"function\" && importInterop !== \"none\" && importInterop !== \"babel\" && importInterop !== \"node\") {\n    throw new Error(`.importInterop must be one of \"none\", \"babel\", \"node\", or a function returning one of those values (received ${importInterop}).`);\n  }\n  return importInterop;\n}\nfunction resolveImportInterop(importInterop, source, filename) {\n  if (typeof importInterop === \"function\") {\n    return validateImportInteropOption(importInterop(source, filename));\n  }\n  return importInterop;\n}\nfunction normalizeModuleAndLoadMetadata(programPath, exportName, {\n  importInterop,\n  initializeReexports = false,\n  lazy = false,\n  esNamespaceOnly = false,\n  filename\n}) {\n  if (!exportName) {\n    exportName = programPath.scope.generateUidIdentifier(\"exports\").name;\n  }\n  const stringSpecifiers = new Set();\n  nameAnonymousExports(programPath);\n  const {\n    local,\n    sources,\n    hasExports\n  } = getModuleMetadata(programPath, {\n    initializeReexports,\n    lazy\n  }, stringSpecifiers);\n  removeImportExportDeclarations(programPath);\n  for (const [source, metadata] of sources) {\n    if (metadata.importsNamespace.size > 0) {\n      metadata.name = metadata.importsNamespace.values().next().value;\n    }\n    const resolvedInterop = resolveImportInterop(importInterop, source, filename);\n    if (resolvedInterop === \"none\") {\n      metadata.interop = \"none\";\n    } else if (resolvedInterop === \"node\" && metadata.interop === \"namespace\") {\n      metadata.interop = \"node-namespace\";\n    } else if (resolvedInterop === \"node\" && metadata.interop === \"default\") {\n      metadata.interop = \"node-default\";\n    } else if (esNamespaceOnly && metadata.interop === \"namespace\") {\n      metadata.interop = \"default\";\n    }\n  }\n  return {\n    exportName,\n    exportNameListName: null,\n    hasExports,\n    local,\n    source: sources,\n    stringSpecifiers\n  };\n}\nfunction getExportSpecifierName(path, stringSpecifiers) {\n  if (path.isIdentifier()) {\n    return path.node.name;\n  } else if (path.isStringLiteral()) {\n    const stringValue = path.node.value;\n    if (!(0, _helperValidatorIdentifier.isIdentifierName)(stringValue)) {\n      stringSpecifiers.add(stringValue);\n    }\n    return stringValue;\n  } else {\n    throw new Error(`Expected export specifier to be either Identifier or StringLiteral, got ${path.node.type}`);\n  }\n}\nfunction assertExportSpecifier(path) {\n  if (path.isExportSpecifier()) {\n    return;\n  } else if (path.isExportNamespaceSpecifier()) {\n    throw path.buildCodeFrameError(\"Export namespace should be first transformed by `@babel/plugin-proposal-export-namespace-from`.\");\n  } else {\n    throw path.buildCodeFrameError(\"Unexpected export specifier type\");\n  }\n}\nfunction getModuleMetadata(programPath, {\n  lazy,\n  initializeReexports\n}, stringSpecifiers) {\n  const localData = getLocalExportMetadata(programPath, initializeReexports, stringSpecifiers);\n  const sourceData = new Map();\n  const getData = sourceNode => {\n    const source = sourceNode.value;\n    let data = sourceData.get(source);\n    if (!data) {\n      data = {\n        name: programPath.scope.generateUidIdentifier((0, _path.basename)(source, (0, _path.extname)(source))).name,\n        interop: \"none\",\n        loc: null,\n        imports: new Map(),\n        importsNamespace: new Set(),\n        reexports: new Map(),\n        reexportNamespace: new Set(),\n        reexportAll: null,\n        lazy: false,\n        referenced: false\n      };\n      sourceData.set(source, data);\n    }\n    return data;\n  };\n  let hasExports = false;\n  programPath.get(\"body\").forEach(child => {\n    if (child.isImportDeclaration()) {\n      const data = getData(child.node.source);\n      if (!data.loc) data.loc = child.node.loc;\n      child.get(\"specifiers\").forEach(spec => {\n        if (spec.isImportDefaultSpecifier()) {\n          const localName = spec.get(\"local\").node.name;\n          data.imports.set(localName, \"default\");\n          const reexport = localData.get(localName);\n          if (reexport) {\n            localData.delete(localName);\n            reexport.names.forEach(name => {\n              data.reexports.set(name, \"default\");\n            });\n            data.referenced = true;\n          }\n        } else if (spec.isImportNamespaceSpecifier()) {\n          const localName = spec.get(\"local\").node.name;\n          data.importsNamespace.add(localName);\n          const reexport = localData.get(localName);\n          if (reexport) {\n            localData.delete(localName);\n            reexport.names.forEach(name => {\n              data.reexportNamespace.add(name);\n            });\n            data.referenced = true;\n          }\n        } else if (spec.isImportSpecifier()) {\n          const importName = getExportSpecifierName(spec.get(\"imported\"), stringSpecifiers);\n          const localName = spec.get(\"local\").node.name;\n          data.imports.set(localName, importName);\n          const reexport = localData.get(localName);\n          if (reexport) {\n            localData.delete(localName);\n            reexport.names.forEach(name => {\n              data.reexports.set(name, importName);\n            });\n            data.referenced = true;\n          }\n        }\n      });\n    } else if (child.isExportAllDeclaration()) {\n      hasExports = true;\n      const data = getData(child.node.source);\n      if (!data.loc) data.loc = child.node.loc;\n      data.reexportAll = {\n        loc: child.node.loc\n      };\n      data.referenced = true;\n    } else if (child.isExportNamedDeclaration() && child.node.source) {\n      hasExports = true;\n      const data = getData(child.node.source);\n      if (!data.loc) data.loc = child.node.loc;\n      child.get(\"specifiers\").forEach(spec => {\n        assertExportSpecifier(spec);\n        const importName = getExportSpecifierName(spec.get(\"local\"), stringSpecifiers);\n        const exportName = getExportSpecifierName(spec.get(\"exported\"), stringSpecifiers);\n        data.reexports.set(exportName, importName);\n        data.referenced = true;\n        if (exportName === \"__esModule\") {\n          throw spec.get(\"exported\").buildCodeFrameError('Illegal export \"__esModule\".');\n        }\n      });\n    } else if (child.isExportNamedDeclaration() || child.isExportDefaultDeclaration()) {\n      hasExports = true;\n    }\n  });\n  for (const metadata of sourceData.values()) {\n    let needsDefault = false;\n    let needsNamed = false;\n    if (metadata.importsNamespace.size > 0) {\n      needsDefault = true;\n      needsNamed = true;\n    }\n    if (metadata.reexportAll) {\n      needsNamed = true;\n    }\n    for (const importName of metadata.imports.values()) {\n      if (importName === \"default\") needsDefault = true;else needsNamed = true;\n    }\n    for (const importName of metadata.reexports.values()) {\n      if (importName === \"default\") needsDefault = true;else needsNamed = true;\n    }\n    if (needsDefault && needsNamed) {\n      metadata.interop = \"namespace\";\n    } else if (needsDefault) {\n      metadata.interop = \"default\";\n    }\n  }\n  for (const [source, metadata] of sourceData) {\n    if (lazy !== false && !(isSideEffectImport(metadata) || metadata.reexportAll)) {\n      if (lazy === true) {\n        metadata.lazy = !/\\./.test(source);\n      } else if (Array.isArray(lazy)) {\n        metadata.lazy = lazy.indexOf(source) !== -1;\n      } else if (typeof lazy === \"function\") {\n        metadata.lazy = lazy(source);\n      } else {\n        throw new Error(`.lazy must be a boolean, string array, or function`);\n      }\n    }\n  }\n  return {\n    hasExports,\n    local: localData,\n    sources: sourceData\n  };\n}\nfunction getLocalExportMetadata(programPath, initializeReexports, stringSpecifiers) {\n  const bindingKindLookup = new Map();\n  programPath.get(\"body\").forEach(child => {\n    let kind;\n    if (child.isImportDeclaration()) {\n      kind = \"import\";\n    } else {\n      if (child.isExportDefaultDeclaration()) {\n        child = child.get(\"declaration\");\n      }\n      if (child.isExportNamedDeclaration()) {\n        if (child.node.declaration) {\n          child = child.get(\"declaration\");\n        } else if (initializeReexports && child.node.source && child.get(\"source\").isStringLiteral()) {\n          child.get(\"specifiers\").forEach(spec => {\n            assertExportSpecifier(spec);\n            bindingKindLookup.set(spec.get(\"local\").node.name, \"block\");\n          });\n          return;\n        }\n      }\n      if (child.isFunctionDeclaration()) {\n        kind = \"hoisted\";\n      } else if (child.isClassDeclaration()) {\n        kind = \"block\";\n      } else if (child.isVariableDeclaration({\n        kind: \"var\"\n      })) {\n        kind = \"var\";\n      } else if (child.isVariableDeclaration()) {\n        kind = \"block\";\n      } else {\n        return;\n      }\n    }\n    Object.keys(child.getOuterBindingIdentifiers()).forEach(name => {\n      bindingKindLookup.set(name, kind);\n    });\n  });\n  const localMetadata = new Map();\n  const getLocalMetadata = idPath => {\n    const localName = idPath.node.name;\n    let metadata = localMetadata.get(localName);\n    if (!metadata) {\n      const kind = bindingKindLookup.get(localName);\n      if (kind === undefined) {\n        throw idPath.buildCodeFrameError(`Exporting local \"${localName}\", which is not declared.`);\n      }\n      metadata = {\n        names: [],\n        kind\n      };\n      localMetadata.set(localName, metadata);\n    }\n    return metadata;\n  };\n  programPath.get(\"body\").forEach(child => {\n    if (child.isExportNamedDeclaration() && (initializeReexports || !child.node.source)) {\n      if (child.node.declaration) {\n        const declaration = child.get(\"declaration\");\n        const ids = declaration.getOuterBindingIdentifierPaths();\n        Object.keys(ids).forEach(name => {\n          if (name === \"__esModule\") {\n            throw declaration.buildCodeFrameError('Illegal export \"__esModule\".');\n          }\n          getLocalMetadata(ids[name]).names.push(name);\n        });\n      } else {\n        child.get(\"specifiers\").forEach(spec => {\n          const local = spec.get(\"local\");\n          const exported = spec.get(\"exported\");\n          const localMetadata = getLocalMetadata(local);\n          const exportName = getExportSpecifierName(exported, stringSpecifiers);\n          if (exportName === \"__esModule\") {\n            throw exported.buildCodeFrameError('Illegal export \"__esModule\".');\n          }\n          localMetadata.names.push(exportName);\n        });\n      }\n    } else if (child.isExportDefaultDeclaration()) {\n      const declaration = child.get(\"declaration\");\n      if (declaration.isFunctionDeclaration() || declaration.isClassDeclaration()) {\n        getLocalMetadata(declaration.get(\"id\")).names.push(\"default\");\n      } else {\n        throw declaration.buildCodeFrameError(\"Unexpected default expression export.\");\n      }\n    }\n  });\n  return localMetadata;\n}\nfunction nameAnonymousExports(programPath) {\n  programPath.get(\"body\").forEach(child => {\n    if (!child.isExportDefaultDeclaration()) return;\n    (0, _helperSplitExportDeclaration.default)(child);\n  });\n}\nfunction removeImportExportDeclarations(programPath) {\n  programPath.get(\"body\").forEach(child => {\n    if (child.isImportDeclaration()) {\n      child.remove();\n    } else if (child.isExportNamedDeclaration()) {\n      if (child.node.declaration) {\n        child.node.declaration._blockHoist = child.node._blockHoist;\n        child.replaceWith(child.node.declaration);\n      } else {\n        child.remove();\n      }\n    } else if (child.isExportDefaultDeclaration()) {\n      const declaration = child.get(\"declaration\");\n      if (declaration.isFunctionDeclaration() || declaration.isClassDeclaration()) {\n        declaration._blockHoist = child.node._blockHoist;\n        child.replaceWith(declaration);\n      } else {\n        throw declaration.buildCodeFrameError(\"Unexpected default expression export.\");\n      }\n    } else if (child.isExportAllDeclaration()) {\n      child.remove();\n    }\n  });\n}\n\n//# sourceMappingURL=normalize-and-load-metadata.js.map\n/lib/get-module-name.js\u0006\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = getModuleName;\n{\n  const originalGetModuleName = getModuleName;\n  exports.default = getModuleName = function getModuleName(rootOpts, pluginOpts) {\n    var _pluginOpts$moduleId, _pluginOpts$moduleIds, _pluginOpts$getModule, _pluginOpts$moduleRoo;\n    return originalGetModuleName(rootOpts, {\n      moduleId: (_pluginOpts$moduleId = pluginOpts.moduleId) != null ? _pluginOpts$moduleId : rootOpts.moduleId,\n      moduleIds: (_pluginOpts$moduleIds = pluginOpts.moduleIds) != null ? _pluginOpts$moduleIds : rootOpts.moduleIds,\n      getModuleId: (_pluginOpts$getModule = pluginOpts.getModuleId) != null ? _pluginOpts$getModule : rootOpts.getModuleId,\n      moduleRoot: (_pluginOpts$moduleRoo = pluginOpts.moduleRoot) != null ? _pluginOpts$moduleRoo : rootOpts.moduleRoot\n    });\n  };\n}\nfunction getModuleName(rootOpts, pluginOpts) {\n  const {\n    filename,\n    filenameRelative = filename,\n    sourceRoot = pluginOpts.moduleRoot\n  } = rootOpts;\n  const {\n    moduleId,\n    moduleIds = !!moduleId,\n    getModuleId,\n    moduleRoot = sourceRoot\n  } = pluginOpts;\n  if (!moduleIds) return null;\n  if (moduleId != null && !getModuleId) {\n    return moduleId;\n  }\n  let moduleName = moduleRoot != null ? moduleRoot + \"/\" : \"\";\n  if (filenameRelative) {\n    const sourceRootReplacer = sourceRoot != null ? new RegExp(\"^\" + sourceRoot + \"/?\") : \"\";\n    moduleName += filenameRelative.replace(sourceRootReplacer, \"\").replace(/\\.(\\w*?)$/, \"\");\n  }\n  moduleName = moduleName.replace(/\\\\/g, \"/\");\n  if (getModuleId) {\n    return getModuleId(moduleName) || moduleName;\n  } else {\n    return moduleName;\n  }\n}\n\n//# sourceMappingURL=get-module-name.js.map\n/lib/dynamic-import.js\u0006\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.buildDynamicImport = buildDynamicImport;\nexports.getDynamicImportSource = getDynamicImportSource;\nvar t = require(\"@babel/types\");\nvar _template = require(\"@babel/template\");\nfunction getDynamicImportSource(node) {\n  const [source] = node.arguments;\n  return t.isStringLiteral(source) || t.isTemplateLiteral(source) ? source : _template.default.expression.ast`\\`\\${${source}}\\``;\n}\nfunction buildDynamicImport(node, deferToThen, wrapWithPromise, builder) {\n  const [specifier] = node.arguments;\n  if (t.isStringLiteral(specifier) || t.isTemplateLiteral(specifier) && specifier.quasis.length === 0) {\n    if (deferToThen) {\n      return _template.default.expression.ast`\n        Promise.resolve().then(() => ${builder(specifier)})\n      `;\n    } else return builder(specifier);\n  }\n  const specifierToString = t.isTemplateLiteral(specifier) ? t.identifier(\"specifier\") : t.templateLiteral([t.templateElement({\n    raw: \"\"\n  }), t.templateElement({\n    raw: \"\"\n  })], [t.identifier(\"specifier\")]);\n  if (deferToThen) {\n    return _template.default.expression.ast`\n      (specifier =>\n        new Promise(r => r(${specifierToString}))\n          .then(s => ${builder(t.identifier(\"s\"))})\n      )(${specifier})\n    `;\n  } else if (wrapWithPromise) {\n    return _template.default.expression.ast`\n      (specifier =>\n        new Promise(r => r(${builder(specifierToString)}))\n      )(${specifier})\n    `;\n  } else {\n    return _template.default.expression.ast`\n      (specifier => ${builder(specifierToString)})(${specifier})\n    `;\n  }\n}\n\n//# sourceMappingURL=dynamic-import.js.map\n/LICENSE\u0004RMIT License\n\nCopyright (c) 2014-present Sebastian McKenzie and other contributors\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n/lib/index.js.mapn{\"version\":3,\"names\":[\"booleanLiteral\",\"callExpression\",\"cloneNode\",\"directive\",\"directiveLiteral\",\"expressionStatement\",\"identifier\",\"isIdentifier\",\"memberExpression\",\"stringLiteral\",\"valueToNode\",\"variableDeclaration\",\"variableDeclarator\",\"rewriteModuleStatementsAndPrepareHeader\",\"path\",\"loose\",\"exportName\",\"strict\",\"allowTopLevelThis\",\"strictMode\",\"noInterop\",\"importInterop\",\"lazy\",\"esNamespaceOnly\",\"filename\",\"constantReexports\",\"enumerableModuleMeta\",\"noIncompleteNsImportDetection\",\"validateImportInteropOption\",\"assert\",\"isModule\",\"node\",\"sourceType\",\"meta\",\"normalizeModuleAndLoadMetadata\",\"initializeReexports\",\"rewriteThis\",\"rewriteLiveReferences\",\"hasStrict\",\"directives\",\"some\",\"value\",\"unshiftContainer\",\"headers\",\"hasExports\",\"push\",\"buildESModuleHeader\",\"nameList\",\"buildExportNameListDeclaration\",\"exportNameListName\",\"name\",\"statement\",\"buildExportInitializationStatements\",\"ensureStatementsHoisted\",\"statements\",\"forEach\",\"header\",\"_blockHoist\",\"wrapInterop\",\"programPath\",\"expr\",\"type\",\"hub\",\"addHelper\",\"helper\",\"Error\",\"buildNamespaceInitStatements\",\"metadata\",\"sourceMetadata\",\"srcNamespace\",\"localName\",\"importsNamespace\",\"template\",\"NAME\",\"SOURCE\",\"buildReexportsFromMeta\",\"reexportNamespace\",\"EXPORTS\",\"NAMESPACE\",\"reexportAll\",\"buildNamespaceReexport\",\"loc\",\"ReexportTemplate\",\"constant\",\"constantComputed\",\"spec\",\"namespace\",\"stringSpecifiers\",\"Array\",\"from\",\"reexports\",\"importName\",\"NAMESPACE_IMPORT\",\"interop\",\"has\",\"astNodes\",\"EXPORT_NAME\",\"VERIFY_NAME_LIST\",\"EXPORTS_LIST\",\"exportedVars\",\"Object\",\"create\",\"data\",\"local\",\"values\",\"names\",\"hasReexport\",\"source\",\"keys\",\"length\",\"scope\",\"generateUidIdentifier\",\"default\",\"initStatements\",\"kind\",\"buildInitStatement\",\"reexportsStatements\",\"i\",\"sort\",\"a\",\"b\",\"results\",\"initStatement\",\"chunkSize\",\"uninitializedExportNames\",\"j\",\"buildUndefinedNode\",\"InitTemplate\",\"computed\",\"expression\",\"exportNames\",\"initExpr\",\"reduce\",\"acc\",\"params\",\"VALUE\"],\"sources\":[\"../src/index.ts\"],\"sourcesContent\":[\"import assert from \\\"assert\\\";\\nimport {\\n  booleanLiteral,\\n  callExpression,\\n  cloneNode,\\n  directive,\\n  directiveLiteral,\\n  expressionStatement,\\n  identifier,\\n  isIdentifier,\\n  memberExpression,\\n  stringLiteral,\\n  valueToNode,\\n  variableDeclaration,\\n  variableDeclarator,\\n} from \\\"@babel/types\\\";\\nimport type * as t from \\\"@babel/types\\\";\\nimport template from \\\"@babel/template\\\";\\n\\nimport { isModule } from \\\"@babel/helper-module-imports\\\";\\n\\nimport rewriteThis from \\\"./rewrite-this\\\";\\nimport rewriteLiveReferences from \\\"./rewrite-live-references\\\";\\nimport normalizeModuleAndLoadMetadata, {\\n  hasExports,\\n  isSideEffectImport,\\n  validateImportInteropOption,\\n} from \\\"./normalize-and-load-metadata\\\";\\nimport type {\\n  ImportInterop,\\n  InteropType,\\n  Lazy,\\n  ModuleMetadata,\\n  SourceModuleMetadata,\\n} from \\\"./normalize-and-load-metadata\\\";\\nimport type { NodePath } from \\\"@babel/traverse\\\";\\n\\nexport { buildDynamicImport, getDynamicImportSource } from \\\"./dynamic-import\\\";\\n\\nexport { default as getModuleName } from \\\"./get-module-name\\\";\\nexport type { PluginOptions } from \\\"./get-module-name\\\";\\n\\nexport { hasExports, isSideEffectImport, isModule, rewriteThis };\\n\\nexport interface RewriteModuleStatementsAndPrepareHeaderOptions {\\n  exportName?: string;\\n  strict: boolean;\\n  allowTopLevelThis?: boolean;\\n  strictMode: boolean;\\n  loose?: boolean;\\n  importInterop?: ImportInterop;\\n  noInterop?: boolean;\\n  lazy?: Lazy;\\n  esNamespaceOnly?: boolean;\\n  filename: string | undefined;\\n  constantReexports?: boolean | void;\\n  enumerableModuleMeta?: boolean | void;\\n  noIncompleteNsImportDetection?: boolean | void;\\n}\\n\\n/**\\n * Perform all of the generic ES6 module rewriting needed to handle initial\\n * module processing. This function will rewrite the majority of the given\\n * program to reference the modules described by the returned metadata,\\n * and returns a list of statements for use when initializing the module.\\n */\\nexport function rewriteModuleStatementsAndPrepareHeader(\\n  path: NodePath<t.Program>,\\n  {\\n    // TODO(Babel 8): Remove this\\n    loose,\\n\\n    exportName,\\n    strict,\\n    allowTopLevelThis,\\n    strictMode,\\n    noInterop,\\n    importInterop = noInterop ? \\\"none\\\" : \\\"babel\\\",\\n    lazy,\\n    esNamespaceOnly,\\n    filename,\\n\\n    constantReexports = loose,\\n    enumerableModuleMeta = loose,\\n    noIncompleteNsImportDetection,\\n  }: RewriteModuleStatementsAndPrepareHeaderOptions,\\n) {\\n  validateImportInteropOption(importInterop);\\n  assert(isModule(path), \\\"Cannot process module statements in a script\\\");\\n  path.node.sourceType = \\\"script\\\";\\n\\n  const meta = normalizeModuleAndLoadMetadata(path, exportName, {\\n    importInterop,\\n    initializeReexports: constantReexports,\\n    lazy,\\n    esNamespaceOnly,\\n    filename,\\n  });\\n\\n  if (!allowTopLevelThis) {\\n    rewriteThis(path);\\n  }\\n\\n  rewriteLiveReferences(path, meta);\\n\\n  if (strictMode !== false) {\\n    const hasStrict = path.node.directives.some(directive => {\\n      return directive.value.value === \\\"use strict\\\";\\n    });\\n    if (!hasStrict) {\\n      path.unshiftContainer(\\n        \\\"directives\\\",\\n        directive(directiveLiteral(\\\"use strict\\\")),\\n      );\\n    }\\n  }\\n\\n  const headers = [];\\n  if (hasExports(meta) && !strict) {\\n    headers.push(buildESModuleHeader(meta, enumerableModuleMeta));\\n  }\\n\\n  const nameList = buildExportNameListDeclaration(path, meta);\\n\\n  if (nameList) {\\n    meta.exportNameListName = nameList.name;\\n    headers.push(nameList.statement);\\n  }\\n\\n  // Create all of the statically known named exports.\\n  headers.push(\\n    ...buildExportInitializationStatements(\\n      path,\\n      meta,\\n      constantReexports,\\n      noIncompleteNsImportDetection,\\n    ),\\n  );\\n\\n  return { meta, headers };\\n}\\n\\n/**\\n * Flag a set of statements as hoisted above all else so that module init\\n * statements all run before user code.\\n */\\nexport function ensureStatementsHoisted(statements: t.Statement[]) {\\n  // Force all of the header fields to be at the top of the file.\\n  statements.forEach(header => {\\n    // @ts-expect-error Fixme: handle _blockHoist property\\n    header._blockHoist = 3;\\n  });\\n}\\n\\n/**\\n * Given an expression for a standard import object, like \\\"require('foo')\\\",\\n * wrap it in a call to the interop helpers based on the type.\\n */\\nexport function wrapInterop(\\n  programPath: NodePath,\\n  expr: t.Expression,\\n  type: InteropType,\\n): t.CallExpression {\\n  if (type === \\\"none\\\") {\\n    return null;\\n  }\\n\\n  if (type === \\\"node-namespace\\\") {\\n    return callExpression(programPath.hub.addHelper(\\\"interopRequireWildcard\\\"), [\\n      expr,\\n      booleanLiteral(true),\\n    ]);\\n  } else if (type === \\\"node-default\\\") {\\n    return null;\\n  }\\n\\n  let helper;\\n  if (type === \\\"default\\\") {\\n    helper = \\\"interopRequireDefault\\\";\\n  } else if (type === \\\"namespace\\\") {\\n    helper = \\\"interopRequireWildcard\\\";\\n  } else {\\n    throw new Error(`Unknown interop: ${type}`);\\n  }\\n\\n  return callExpression(programPath.hub.addHelper(helper), [expr]);\\n}\\n\\n/**\\n * Create the runtime initialization statements for a given requested source.\\n * These will initialize all of the runtime import/export logic that\\n * can't be handled statically by the statements created by\\n * buildExportInitializationStatements().\\n */\\nexport function buildNamespaceInitStatements(\\n  metadata: ModuleMetadata,\\n  sourceMetadata: SourceModuleMetadata,\\n  constantReexports: boolean | void = false,\\n) {\\n  const statements = [];\\n\\n  let srcNamespace: t.Node = identifier(sourceMetadata.name);\\n  if (sourceMetadata.lazy) srcNamespace = callExpression(srcNamespace, []);\\n\\n  for (const localName of sourceMetadata.importsNamespace) {\\n    if (localName === sourceMetadata.name) continue;\\n\\n    // Create and assign binding to namespace object\\n    statements.push(\\n      template.statement`var NAME = SOURCE;`({\\n        NAME: localName,\\n        SOURCE: cloneNode(srcNamespace),\\n      }),\\n    );\\n  }\\n  if (constantReexports) {\\n    statements.push(...buildReexportsFromMeta(metadata, sourceMetadata, true));\\n  }\\n  for (const exportName of sourceMetadata.reexportNamespace) {\\n    // Assign export to namespace object.\\n    statements.push(\\n      (sourceMetadata.lazy\\n        ? template.statement`\\n            Object.defineProperty(EXPORTS, \\\"NAME\\\", {\\n              enumerable: true,\\n              get: function() {\\n                return NAMESPACE;\\n              }\\n            });\\n          `\\n        : template.statement`EXPORTS.NAME = NAMESPACE;`)({\\n        EXPORTS: metadata.exportName,\\n        NAME: exportName,\\n        NAMESPACE: cloneNode(srcNamespace),\\n      }),\\n    );\\n  }\\n  if (sourceMetadata.reexportAll) {\\n    const statement = buildNamespaceReexport(\\n      metadata,\\n      cloneNode(srcNamespace),\\n      constantReexports,\\n    );\\n    statement.loc = sourceMetadata.reexportAll.loc;\\n\\n    // Iterate props creating getter for each prop.\\n    statements.push(statement);\\n  }\\n  return statements;\\n}\\n\\nconst ReexportTemplate = {\\n  constant: template.statement`EXPORTS.EXPORT_NAME = NAMESPACE_IMPORT;`,\\n  constantComputed: template.statement`EXPORTS[\\\"EXPORT_NAME\\\"] = NAMESPACE_IMPORT;`,\\n  spec: template.statement`\\n    Object.defineProperty(EXPORTS, \\\"EXPORT_NAME\\\", {\\n      enumerable: true,\\n      get: function() {\\n        return NAMESPACE_IMPORT;\\n      },\\n    });\\n    `,\\n};\\n\\nfunction buildReexportsFromMeta(\\n  meta: ModuleMetadata,\\n  metadata: SourceModuleMetadata,\\n  constantReexports: boolean,\\n) {\\n  const namespace = metadata.lazy\\n    ? callExpression(identifier(metadata.name), [])\\n    : identifier(metadata.name);\\n\\n  const { stringSpecifiers } = meta;\\n  return Array.from(metadata.reexports, ([exportName, importName]) => {\\n    let NAMESPACE_IMPORT: t.Expression = cloneNode(namespace);\\n    if (importName === \\\"default\\\" && metadata.interop === \\\"node-default\\\") {\\n      // Nothing, it's ok as-is\\n    } else if (stringSpecifiers.has(importName)) {\\n      NAMESPACE_IMPORT = memberExpression(\\n        NAMESPACE_IMPORT,\\n        stringLiteral(importName),\\n        true,\\n      );\\n    } else {\\n      NAMESPACE_IMPORT = memberExpression(\\n        NAMESPACE_IMPORT,\\n        identifier(importName),\\n      );\\n    }\\n    const astNodes = {\\n      EXPORTS: meta.exportName,\\n      EXPORT_NAME: exportName,\\n      NAMESPACE_IMPORT,\\n    };\\n    if (constantReexports || isIdentifier(NAMESPACE_IMPORT)) {\\n      if (stringSpecifiers.has(exportName)) {\\n        return ReexportTemplate.constantComputed(astNodes);\\n      } else {\\n        return ReexportTemplate.constant(astNodes);\\n      }\\n    } else {\\n      return ReexportTemplate.spec(astNodes);\\n    }\\n  });\\n}\\n\\n/**\\n * Build an \\\"__esModule\\\" header statement setting the property on a given object.\\n */\\nfunction buildESModuleHeader(\\n  metadata: ModuleMetadata,\\n  enumerableModuleMeta: boolean | void = false,\\n) {\\n  return (\\n    enumerableModuleMeta\\n      ? template.statement`\\n        EXPORTS.__esModule = true;\\n      `\\n      : template.statement`\\n        Object.defineProperty(EXPORTS, \\\"__esModule\\\", {\\n          value: true,\\n        });\\n      `\\n  )({ EXPORTS: metadata.exportName });\\n}\\n\\n/**\\n * Create a re-export initialization loop for a specific imported namespace.\\n */\\nfunction buildNamespaceReexport(\\n  metadata: ModuleMetadata,\\n  namespace: t.Identifier | t.CallExpression,\\n  constantReexports: boolean | void,\\n) {\\n  return (\\n    constantReexports\\n      ? template.statement`\\n        Object.keys(NAMESPACE).forEach(function(key) {\\n          if (key === \\\"default\\\" || key === \\\"__esModule\\\") return;\\n          VERIFY_NAME_LIST;\\n          if (key in EXPORTS && EXPORTS[key] === NAMESPACE[key]) return;\\n\\n          EXPORTS[key] = NAMESPACE[key];\\n        });\\n      `\\n      : // Also skip already assigned bindings if they are strictly equal\\n        // to be somewhat more spec-compliant when a file has multiple\\n        // namespace re-exports that would cause a binding to be exported\\n        // multiple times. However, multiple bindings of the same name that\\n        // export the same primitive value are silently skipped\\n        // (the spec requires an \\\"ambiguous bindings\\\" early error here).\\n        template.statement`\\n        Object.keys(NAMESPACE).forEach(function(key) {\\n          if (key === \\\"default\\\" || key === \\\"__esModule\\\") return;\\n          VERIFY_NAME_LIST;\\n          if (key in EXPORTS && EXPORTS[key] === NAMESPACE[key]) return;\\n\\n          Object.defineProperty(EXPORTS, key, {\\n            enumerable: true,\\n            get: function() {\\n              return NAMESPACE[key];\\n            },\\n          });\\n        });\\n    `\\n  )({\\n    NAMESPACE: namespace,\\n    EXPORTS: metadata.exportName,\\n    VERIFY_NAME_LIST: metadata.exportNameListName\\n      ? template`\\n            if (Object.prototype.hasOwnProperty.call(EXPORTS_LIST, key)) return;\\n          `({ EXPORTS_LIST: metadata.exportNameListName })\\n      : null,\\n  });\\n}\\n\\n/**\\n * Build a statement declaring a variable that contains all of the exported\\n * variable names in an object so they can easily be referenced from an\\n * export * from statement to check for conflicts.\\n */\\nfunction buildExportNameListDeclaration(\\n  programPath: NodePath,\\n  metadata: ModuleMetadata,\\n) {\\n  const exportedVars = Object.create(null);\\n  for (const data of metadata.local.values()) {\\n    for (const name of data.names) {\\n      exportedVars[name] = true;\\n    }\\n  }\\n\\n  let hasReexport = false;\\n  for (const data of metadata.source.values()) {\\n    for (const exportName of data.reexports.keys()) {\\n      exportedVars[exportName] = true;\\n    }\\n    for (const exportName of data.reexportNamespace) {\\n      exportedVars[exportName] = true;\\n    }\\n\\n    hasReexport = hasReexport || !!data.reexportAll;\\n  }\\n\\n  if (!hasReexport || Object.keys(exportedVars).length === 0) return null;\\n\\n  const name = programPath.scope.generateUidIdentifier(\\\"exportNames\\\");\\n\\n  delete exportedVars.default;\\n\\n  return {\\n    name: name.name,\\n    statement: variableDeclaration(\\\"var\\\", [\\n      variableDeclarator(name, valueToNode(exportedVars)),\\n    ]),\\n  };\\n}\\n\\n/**\\n * Create a set of statements that will initialize all of the statically-known\\n * export names with their expected values.\\n */\\nfunction buildExportInitializationStatements(\\n  programPath: NodePath,\\n  metadata: ModuleMetadata,\\n  constantReexports: boolean | void = false,\\n  noIncompleteNsImportDetection: boolean | void = false,\\n) {\\n  const initStatements: Array<[string, t.Statement | null]> = [];\\n\\n  for (const [localName, data] of metadata.local) {\\n    if (data.kind === \\\"import\\\") {\\n      // No-open since these are explicitly set with the \\\"reexports\\\" block.\\n    } else if (data.kind === \\\"hoisted\\\") {\\n      initStatements.push([\\n        // data.names is always of length 1 because a hoisted export\\n        // name must be id of a function declaration\\n        data.names[0],\\n        buildInitStatement(metadata, data.names, identifier(localName)),\\n      ]);\\n    } else if (!noIncompleteNsImportDetection) {\\n      for (const exportName of data.names) {\\n        initStatements.push([exportName, null]);\\n      }\\n    }\\n  }\\n\\n  for (const data of metadata.source.values()) {\\n    if (!constantReexports) {\\n      const reexportsStatements = buildReexportsFromMeta(metadata, data, false);\\n      const reexports = [...data.reexports.keys()];\\n      for (let i = 0; i < reexportsStatements.length; i++) {\\n        initStatements.push([reexports[i], reexportsStatements[i]]);\\n      }\\n    }\\n    if (!noIncompleteNsImportDetection) {\\n      for (const exportName of data.reexportNamespace) {\\n        initStatements.push([exportName, null]);\\n      }\\n    }\\n  }\\n\\n  // https://tc39.es/ecma262/#sec-module-namespace-exotic-objects\\n  // The [Exports] list is ordered as if an Array of those String values\\n  // had been sorted using %Array.prototype.sort% using undefined as comparefn\\n  initStatements.sort(([a], [b]) => {\\n    if (a < b) return -1;\\n    if (b < a) return 1;\\n    return 0;\\n  });\\n\\n  const results = [];\\n  if (noIncompleteNsImportDetection) {\\n    for (const [, initStatement] of initStatements) {\\n      results.push(initStatement);\\n    }\\n  } else {\\n    // We generate init statements (`exports.a = exports.b = ... = void 0`)\\n    // for every 100 exported names to avoid deeply-nested AST structures.\\n    const chunkSize = 100;\\n    for (let i = 0; i < initStatements.length; i += chunkSize) {\\n      let uninitializedExportNames = [];\\n      for (let j = 0; j < chunkSize && i + j < initStatements.length; j++) {\\n        const [exportName, initStatement] = initStatements[i + j];\\n        if (initStatement !== null) {\\n          if (uninitializedExportNames.length > 0) {\\n            results.push(\\n              buildInitStatement(\\n                metadata,\\n                uninitializedExportNames,\\n                programPath.scope.buildUndefinedNode(),\\n              ),\\n            );\\n            // reset after uninitializedExportNames has been transformed\\n            // to init statements\\n            uninitializedExportNames = [];\\n          }\\n          results.push(initStatement);\\n        } else {\\n          uninitializedExportNames.push(exportName);\\n        }\\n      }\\n      if (uninitializedExportNames.length > 0) {\\n        results.push(\\n          buildInitStatement(\\n            metadata,\\n            uninitializedExportNames,\\n            programPath.scope.buildUndefinedNode(),\\n          ),\\n        );\\n      }\\n    }\\n  }\\n\\n  return results;\\n}\\n\\n/**\\n * Given a set of export names, create a set of nested assignments to\\n * initialize them all to a given expression.\\n */\\nconst InitTemplate = {\\n  computed: template.expression`EXPORTS[\\\"NAME\\\"] = VALUE`,\\n  default: template.expression`EXPORTS.NAME = VALUE`,\\n};\\n\\nfunction buildInitStatement(\\n  metadata: ModuleMetadata,\\n  exportNames: string[],\\n  initExpr: t.Expression,\\n) {\\n  const { stringSpecifiers, exportName: EXPORTS } = metadata;\\n  return expressionStatement(\\n    exportNames.reduce((acc, exportName) => {\\n      const params = {\\n        EXPORTS,\\n        NAME: exportName,\\n        VALUE: acc,\\n      };\\n      if (stringSpecifiers.has(exportName)) {\\n        return InitTemplate.computed(params);\\n      } else {\\n        return InitTemplate.default(params);\\n      }\\n    }, initExpr),\\n  );\\n}\\n\"],\"mappings\":\"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\"}/README.md\u0001# @babel/helper-module-transforms\n\n> Babel helper functions for implementing ES6 module transformations\n\nSee our website [@babel/helper-module-transforms](https://babeljs.io/docs/en/babel-helper-module-transforms) for more information.\n\n## Install\n\nUsing npm:\n\n```sh\nnpm install --save @babel/helper-module-transforms\n```\n\nor using yarn:\n\n```sh\nyarn add @babel/helper-module-transforms\n```\n/lib/rewrite-this.js\u0002\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = rewriteThis;\nvar _helperEnvironmentVisitor = require(\"@babel/helper-environment-visitor\");\nvar _traverse = require(\"@babel/traverse\");\nvar _t = require(\"@babel/types\");\nconst {\n  numericLiteral,\n  unaryExpression\n} = _t;\nconst rewriteThisVisitor = _traverse.default.visitors.merge([_helperEnvironmentVisitor.default, {\n  ThisExpression(path) {\n    path.replaceWith(unaryExpression(\"void\", numericLiteral(0), true));\n  }\n}]);\nfunction rewriteThis(programPath) {\n  (0, _traverse.default)(programPath.node, Object.assign({}, rewriteThisVisitor, {\n    noScope: true\n  }));\n}\n\n//# sourceMappingURL=rewrite-this.js.map\n/lib/index.js0\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nObject.defineProperty(exports, \"buildDynamicImport\", {\n  enumerable: true,\n  get: function () {\n    return _dynamicImport.buildDynamicImport;\n  }\n});\nexports.buildNamespaceInitStatements = buildNamespaceInitStatements;\nexports.ensureStatementsHoisted = ensureStatementsHoisted;\nObject.defineProperty(exports, \"getDynamicImportSource\", {\n  enumerable: true,\n  get: function () {\n    return _dynamicImport.getDynamicImportSource;\n  }\n});\nObject.defineProperty(exports, \"getModuleName\", {\n  enumerable: true,\n  get: function () {\n    return _getModuleName.default;\n  }\n});\nObject.defineProperty(exports, \"hasExports\", {\n  enumerable: true,\n  get: function () {\n    return _normalizeAndLoadMetadata.hasExports;\n  }\n});\nObject.defineProperty(exports, \"isModule\", {\n  enumerable: true,\n  get: function () {\n    return _helperModuleImports.isModule;\n  }\n});\nObject.defineProperty(exports, \"isSideEffectImport\", {\n  enumerable: true,\n  get: function () {\n    return _normalizeAndLoadMetadata.isSideEffectImport;\n  }\n});\nexports.rewriteModuleStatementsAndPrepareHeader = rewriteModuleStatementsAndPrepareHeader;\nObject.defineProperty(exports, \"rewriteThis\", {\n  enumerable: true,\n  get: function () {\n    return _rewriteThis.default;\n  }\n});\nexports.wrapInterop = wrapInterop;\nvar _assert = require(\"assert\");\nvar _t = require(\"@babel/types\");\nvar _template = require(\"@babel/template\");\nvar _helperModuleImports = require(\"@babel/helper-module-imports\");\nvar _rewriteThis = require(\"./rewrite-this\");\nvar _rewriteLiveReferences = require(\"./rewrite-live-references\");\nvar _normalizeAndLoadMetadata = require(\"./normalize-and-load-metadata\");\nvar _dynamicImport = require(\"./dynamic-import\");\nvar _getModuleName = require(\"./get-module-name\");\nconst {\n  booleanLiteral,\n  callExpression,\n  cloneNode,\n  directive,\n  directiveLiteral,\n  expressionStatement,\n  identifier,\n  isIdentifier,\n  memberExpression,\n  stringLiteral,\n  valueToNode,\n  variableDeclaration,\n  variableDeclarator\n} = _t;\nfunction rewriteModuleStatementsAndPrepareHeader(path, {\n  loose,\n  exportName,\n  strict,\n  allowTopLevelThis,\n  strictMode,\n  noInterop,\n  importInterop = noInterop ? \"none\" : \"babel\",\n  lazy,\n  esNamespaceOnly,\n  filename,\n  constantReexports = loose,\n  enumerableModuleMeta = loose,\n  noIncompleteNsImportDetection\n}) {\n  (0, _normalizeAndLoadMetadata.validateImportInteropOption)(importInterop);\n  _assert((0, _helperModuleImports.isModule)(path), \"Cannot process module statements in a script\");\n  path.node.sourceType = \"script\";\n  const meta = (0, _normalizeAndLoadMetadata.default)(path, exportName, {\n    importInterop,\n    initializeReexports: constantReexports,\n    lazy,\n    esNamespaceOnly,\n    filename\n  });\n  if (!allowTopLevelThis) {\n    (0, _rewriteThis.default)(path);\n  }\n  (0, _rewriteLiveReferences.default)(path, meta);\n  if (strictMode !== false) {\n    const hasStrict = path.node.directives.some(directive => {\n      return directive.value.value === \"use strict\";\n    });\n    if (!hasStrict) {\n      path.unshiftContainer(\"directives\", directive(directiveLiteral(\"use strict\")));\n    }\n  }\n  const headers = [];\n  if ((0, _normalizeAndLoadMetadata.hasExports)(meta) && !strict) {\n    headers.push(buildESModuleHeader(meta, enumerableModuleMeta));\n  }\n  const nameList = buildExportNameListDeclaration(path, meta);\n  if (nameList) {\n    meta.exportNameListName = nameList.name;\n    headers.push(nameList.statement);\n  }\n  headers.push(...buildExportInitializationStatements(path, meta, constantReexports, noIncompleteNsImportDetection));\n  return {\n    meta,\n    headers\n  };\n}\nfunction ensureStatementsHoisted(statements) {\n  statements.forEach(header => {\n    header._blockHoist = 3;\n  });\n}\nfunction wrapInterop(programPath, expr, type) {\n  if (type === \"none\") {\n    return null;\n  }\n  if (type === \"node-namespace\") {\n    return callExpression(programPath.hub.addHelper(\"interopRequireWildcard\"), [expr, booleanLiteral(true)]);\n  } else if (type === \"node-default\") {\n    return null;\n  }\n  let helper;\n  if (type === \"default\") {\n    helper = \"interopRequireDefault\";\n  } else if (type === \"namespace\") {\n    helper = \"interopRequireWildcard\";\n  } else {\n    throw new Error(`Unknown interop: ${type}`);\n  }\n  return callExpression(programPath.hub.addHelper(helper), [expr]);\n}\nfunction buildNamespaceInitStatements(metadata, sourceMetadata, constantReexports = false) {\n  const statements = [];\n  let srcNamespace = identifier(sourceMetadata.name);\n  if (sourceMetadata.lazy) srcNamespace = callExpression(srcNamespace, []);\n  for (const localName of sourceMetadata.importsNamespace) {\n    if (localName === sourceMetadata.name) continue;\n    statements.push(_template.default.statement`var NAME = SOURCE;`({\n      NAME: localName,\n      SOURCE: cloneNode(srcNamespace)\n    }));\n  }\n  if (constantReexports) {\n    statements.push(...buildReexportsFromMeta(metadata, sourceMetadata, true));\n  }\n  for (const exportName of sourceMetadata.reexportNamespace) {\n    statements.push((sourceMetadata.lazy ? _template.default.statement`\n            Object.defineProperty(EXPORTS, \"NAME\", {\n              enumerable: true,\n              get: function() {\n                return NAMESPACE;\n              }\n            });\n          ` : _template.default.statement`EXPORTS.NAME = NAMESPACE;`)({\n      EXPORTS: metadata.exportName,\n      NAME: exportName,\n      NAMESPACE: cloneNode(srcNamespace)\n    }));\n  }\n  if (sourceMetadata.reexportAll) {\n    const statement = buildNamespaceReexport(metadata, cloneNode(srcNamespace), constantReexports);\n    statement.loc = sourceMetadata.reexportAll.loc;\n    statements.push(statement);\n  }\n  return statements;\n}\nconst ReexportTemplate = {\n  constant: _template.default.statement`EXPORTS.EXPORT_NAME = NAMESPACE_IMPORT;`,\n  constantComputed: _template.default.statement`EXPORTS[\"EXPORT_NAME\"] = NAMESPACE_IMPORT;`,\n  spec: _template.default.statement`\n    Object.defineProperty(EXPORTS, \"EXPORT_NAME\", {\n      enumerable: true,\n      get: function() {\n        return NAMESPACE_IMPORT;\n      },\n    });\n    `\n};\nfunction buildReexportsFromMeta(meta, metadata, constantReexports) {\n  const namespace = metadata.lazy ? callExpression(identifier(metadata.name), []) : identifier(metadata.name);\n  const {\n    stringSpecifiers\n  } = meta;\n  return Array.from(metadata.reexports, ([exportName, importName]) => {\n    let NAMESPACE_IMPORT = cloneNode(namespace);\n    if (importName === \"default\" && metadata.interop === \"node-default\") {} else if (stringSpecifiers.has(importName)) {\n      NAMESPACE_IMPORT = memberExpression(NAMESPACE_IMPORT, stringLiteral(importName), true);\n    } else {\n      NAMESPACE_IMPORT = memberExpression(NAMESPACE_IMPORT, identifier(importName));\n    }\n    const astNodes = {\n      EXPORTS: meta.exportName,\n      EXPORT_NAME: exportName,\n      NAMESPACE_IMPORT\n    };\n    if (constantReexports || isIdentifier(NAMESPACE_IMPORT)) {\n      if (stringSpecifiers.has(exportName)) {\n        return ReexportTemplate.constantComputed(astNodes);\n      } else {\n        return ReexportTemplate.constant(astNodes);\n      }\n    } else {\n      return ReexportTemplate.spec(astNodes);\n    }\n  });\n}\nfunction buildESModuleHeader(metadata, enumerableModuleMeta = false) {\n  return (enumerableModuleMeta ? _template.default.statement`\n        EXPORTS.__esModule = true;\n      ` : _template.default.statement`\n        Object.defineProperty(EXPORTS, \"__esModule\", {\n          value: true,\n        });\n      `)({\n    EXPORTS: metadata.exportName\n  });\n}\nfunction buildNamespaceReexport(metadata, namespace, constantReexports) {\n  return (constantReexports ? _template.default.statement`\n        Object.keys(NAMESPACE).forEach(function(key) {\n          if (key === \"default\" || key === \"__esModule\") return;\n          VERIFY_NAME_LIST;\n          if (key in EXPORTS && EXPORTS[key] === NAMESPACE[key]) return;\n\n          EXPORTS[key] = NAMESPACE[key];\n        });\n      ` : _template.default.statement`\n        Object.keys(NAMESPACE).forEach(function(key) {\n          if (key === \"default\" || key === \"__esModule\") return;\n          VERIFY_NAME_LIST;\n          if (key in EXPORTS && EXPORTS[key] === NAMESPACE[key]) return;\n\n          Object.defineProperty(EXPORTS, key, {\n            enumerable: true,\n            get: function() {\n              return NAMESPACE[key];\n            },\n          });\n        });\n    `)({\n    NAMESPACE: namespace,\n    EXPORTS: metadata.exportName,\n    VERIFY_NAME_LIST: metadata.exportNameListName ? (0, _template.default)`\n            if (Object.prototype.hasOwnProperty.call(EXPORTS_LIST, key)) return;\n          `({\n      EXPORTS_LIST: metadata.exportNameListName\n    }) : null\n  });\n}\nfunction buildExportNameListDeclaration(programPath, metadata) {\n  const exportedVars = Object.create(null);\n  for (const data of metadata.local.values()) {\n    for (const name of data.names) {\n      exportedVars[name] = true;\n    }\n  }\n  let hasReexport = false;\n  for (const data of metadata.source.values()) {\n    for (const exportName of data.reexports.keys()) {\n      exportedVars[exportName] = true;\n    }\n    for (const exportName of data.reexportNamespace) {\n      exportedVars[exportName] = true;\n    }\n    hasReexport = hasReexport || !!data.reexportAll;\n  }\n  if (!hasReexport || Object.keys(exportedVars).length === 0) return null;\n  const name = programPath.scope.generateUidIdentifier(\"exportNames\");\n  delete exportedVars.default;\n  return {\n    name: name.name,\n    statement: variableDeclaration(\"var\", [variableDeclarator(name, valueToNode(exportedVars))])\n  };\n}\nfunction buildExportInitializationStatements(programPath, metadata, constantReexports = false, noIncompleteNsImportDetection = false) {\n  const initStatements = [];\n  for (const [localName, data] of metadata.local) {\n    if (data.kind === \"import\") {} else if (data.kind === \"hoisted\") {\n      initStatements.push([data.names[0], buildInitStatement(metadata, data.names, identifier(localName))]);\n    } else if (!noIncompleteNsImportDetection) {\n      for (const exportName of data.names) {\n        initStatements.push([exportName, null]);\n      }\n    }\n  }\n  for (const data of metadata.source.values()) {\n    if (!constantReexports) {\n      const reexportsStatements = buildReexportsFromMeta(metadata, data, false);\n      const reexports = [...data.reexports.keys()];\n      for (let i = 0; i < reexportsStatements.length; i++) {\n        initStatements.push([reexports[i], reexportsStatements[i]]);\n      }\n    }\n    if (!noIncompleteNsImportDetection) {\n      for (const exportName of data.reexportNamespace) {\n        initStatements.push([exportName, null]);\n      }\n    }\n  }\n  initStatements.sort(([a], [b]) => {\n    if (a < b) return -1;\n    if (b < a) return 1;\n    return 0;\n  });\n  const results = [];\n  if (noIncompleteNsImportDetection) {\n    for (const [, initStatement] of initStatements) {\n      results.push(initStatement);\n    }\n  } else {\n    const chunkSize = 100;\n    for (let i = 0; i < initStatements.length; i += chunkSize) {\n      let uninitializedExportNames = [];\n      for (let j = 0; j < chunkSize && i + j < initStatements.length; j++) {\n        const [exportName, initStatement] = initStatements[i + j];\n        if (initStatement !== null) {\n          if (uninitializedExportNames.length > 0) {\n            results.push(buildInitStatement(metadata, uninitializedExportNames, programPath.scope.buildUndefinedNode()));\n            uninitializedExportNames = [];\n          }\n          results.push(initStatement);\n        } else {\n          uninitializedExportNames.push(exportName);\n        }\n      }\n      if (uninitializedExportNames.length > 0) {\n        results.push(buildInitStatement(metadata, uninitializedExportNames, programPath.scope.buildUndefinedNode()));\n      }\n    }\n  }\n  return results;\n}\nconst InitTemplate = {\n  computed: _template.default.expression`EXPORTS[\"NAME\"] = VALUE`,\n  default: _template.default.expression`EXPORTS.NAME = VALUE`\n};\nfunction buildInitStatement(metadata, exportNames, initExpr) {\n  const {\n    stringSpecifiers,\n    exportName: EXPORTS\n  } = metadata;\n  return expressionStatement(exportNames.reduce((acc, exportName) => {\n    const params = {\n      EXPORTS,\n      NAME: exportName,\n      VALUE: acc\n    };\n    if (stringSpecifiers.has(exportName)) {\n      return InitTemplate.computed(params);\n    } else {\n      return InitTemplate.default(params);\n    }\n  }, initExpr));\n}\n\n//# sourceMappingURL=index.js.map\n/lib/get-module-name.js.map\u000e`{\"version\":3,\"names\":[\"originalGetModuleName\",\"getModuleName\",\"rootOpts\",\"pluginOpts\",\"moduleId\",\"moduleIds\",\"getModuleId\",\"moduleRoot\",\"filename\",\"filenameRelative\",\"sourceRoot\",\"moduleName\",\"sourceRootReplacer\",\"RegExp\",\"replace\"],\"sources\":[\"../src/get-module-name.ts\"],\"sourcesContent\":[\"type RootOptions = {\\n  filename?: string;\\n  filenameRelative?: string;\\n  sourceRoot?: string;\\n};\\n\\nexport type PluginOptions = {\\n  moduleId?: string;\\n  moduleIds?: boolean;\\n  getModuleId?: (moduleName: string) => string | null | undefined;\\n  moduleRoot?: string;\\n};\\n\\nif (!process.env.BABEL_8_BREAKING) {\\n  const originalGetModuleName = getModuleName;\\n\\n  // @ts-expect-error TS doesn't like reassigning a function.\\n  // eslint-disable-next-line no-func-assign\\n  getModuleName = function getModuleName(\\n    rootOpts: RootOptions & PluginOptions,\\n    pluginOpts: PluginOptions,\\n  ): string | null {\\n    return originalGetModuleName(rootOpts, {\\n      moduleId: pluginOpts.moduleId ?? rootOpts.moduleId,\\n      moduleIds: pluginOpts.moduleIds ?? rootOpts.moduleIds,\\n      getModuleId: pluginOpts.getModuleId ?? rootOpts.getModuleId,\\n      moduleRoot: pluginOpts.moduleRoot ?? rootOpts.moduleRoot,\\n    });\\n  };\\n}\\n\\nexport default function getModuleName(\\n  rootOpts: RootOptions,\\n  pluginOpts: PluginOptions,\\n): string | null {\\n  const {\\n    filename,\\n    filenameRelative = filename,\\n    sourceRoot = pluginOpts.moduleRoot,\\n  } = rootOpts;\\n\\n  const {\\n    moduleId,\\n    moduleIds = !!moduleId,\\n\\n    getModuleId,\\n\\n    moduleRoot = sourceRoot,\\n  } = pluginOpts;\\n\\n  if (!moduleIds) return null;\\n\\n  // moduleId is n/a if a `getModuleId()` is provided\\n  if (moduleId != null && !getModuleId) {\\n    return moduleId;\\n  }\\n\\n  let moduleName = moduleRoot != null ? moduleRoot + \\\"/\\\" : \\\"\\\";\\n\\n  if (filenameRelative) {\\n    const sourceRootReplacer =\\n      sourceRoot != null ? new RegExp(\\\"^\\\" + sourceRoot + \\\"/?\\\") : \\\"\\\";\\n\\n    moduleName += filenameRelative\\n      // remove sourceRoot from filename\\n      .replace(sourceRootReplacer, \\\"\\\")\\n      // remove extension\\n      .replace(/\\\\.(\\\\w*?)$/, \\\"\\\");\\n  }\\n\\n  // normalize path separators\\n  moduleName = moduleName.replace(/\\\\\\\\/g, \\\"/\\\");\\n\\n  if (getModuleId) {\\n    // If return is falsy, assume they want us to use our generated default name\\n    return getModuleId(moduleName) || moduleName;\\n  } else {\\n    return moduleName;\\n  }\\n}\\n\"],\"mappings\":\";;;;;;AAamC;EACjC,MAAMA,qBAAqB,GAAGC,aAAa;EAI3C,kBAAAA,aAAa,GAAG,SAASA,aAAa,CACpCC,QAAqC,EACrCC,UAAyB,EACV;IAAA;IACf,OAAOH,qBAAqB,CAACE,QAAQ,EAAE;MACrCE,QAAQ,0BAAED,UAAU,CAACC,QAAQ,mCAAIF,QAAQ,CAACE,QAAQ;MAClDC,SAAS,2BAAEF,UAAU,CAACE,SAAS,oCAAIH,QAAQ,CAACG,SAAS;MACrDC,WAAW,2BAAEH,UAAU,CAACG,WAAW,oCAAIJ,QAAQ,CAACI,WAAW;MAC3DC,UAAU,2BAAEJ,UAAU,CAACI,UAAU,oCAAIL,QAAQ,CAACK;IAChD,CAAC,CAAC;EACJ,CAAC;AACH;AAEe,SAASN,aAAa,CACnCC,QAAqB,EACrBC,UAAyB,EACV;EACf,MAAM;IACJK,QAAQ;IACRC,gBAAgB,GAAGD,QAAQ;IAC3BE,UAAU,GAAGP,UAAU,CAACI;EAC1B,CAAC,GAAGL,QAAQ;EAEZ,MAAM;IACJE,QAAQ;IACRC,SAAS,GAAG,CAAC,CAACD,QAAQ;IAEtBE,WAAW;IAEXC,UAAU,GAAGG;EACf,CAAC,GAAGP,UAAU;EAEd,IAAI,CAACE,SAAS,EAAE,OAAO,IAAI;EAG3B,IAAID,QAAQ,IAAI,IAAI,IAAI,CAACE,WAAW,EAAE;IACpC,OAAOF,QAAQ;EACjB;EAEA,IAAIO,UAAU,GAAGJ,UAAU,IAAI,IAAI,GAAGA,UAAU,GAAG,GAAG,GAAG,EAAE;EAE3D,IAAIE,gBAAgB,EAAE;IACpB,MAAMG,kBAAkB,GACtBF,UAAU,IAAI,IAAI,GAAG,IAAIG,MAAM,CAAC,GAAG,GAAGH,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE;IAE/DC,UAAU,IAAIF,gBAAgB,CAE3BK,OAAO,CAACF,kBAAkB,EAAE,EAAE,CAAC,CAE/BE,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;EAC7B;EAGAH,UAAU,GAAGA,UAAU,CAACG,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;EAE3C,IAAIR,WAAW,EAAE;IAEf,OAAOA,WAAW,CAACK,UAAU,CAAC,IAAIA,UAAU;EAC9C,CAAC,MAAM;IACL,OAAOA,UAAU;EACnB;AACF\"}"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHNANy4yMC4y",
    "content": "/README.md\u0001O# @babel/helper-plugin-utils\n\n> General utilities for plugins to use\n\nSee our website [@babel/helper-plugin-utils](https://babeljs.io/docs/en/babel-helper-plugin-utils) for more information.\n\n## Install\n\nUsing npm:\n\n```sh\nnpm install --save @babel/helper-plugin-utils\n```\n\nor using yarn:\n\n```sh\nyarn add @babel/helper-plugin-utils\n```\n/lib/index.js\n\u000f\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.declare = declare;\nexports.declarePreset = void 0;\nconst apiPolyfills = {\n  assertVersion: api => range => {\n    throwVersionError(range, api.version);\n  },\n  targets: () => () => {\n    return {};\n  },\n  assumption: () => () => {\n    return undefined;\n  }\n};\nfunction declare(builder) {\n  return (api, options, dirname) => {\n    var _clonedApi2;\n    let clonedApi;\n    for (const name of Object.keys(apiPolyfills)) {\n      var _clonedApi;\n      if (api[name]) continue;\n\n      clonedApi = (_clonedApi = clonedApi) != null ? _clonedApi : copyApiObject(api);\n      clonedApi[name] = apiPolyfills[name](clonedApi);\n    }\n\n    return builder((_clonedApi2 = clonedApi) != null ? _clonedApi2 : api, options || {}, dirname);\n  };\n}\nconst declarePreset = declare;\nexports.declarePreset = declarePreset;\nfunction copyApiObject(api) {\n  let proto = null;\n  if (typeof api.version === \"string\" && /^7\\./.test(api.version)) {\n    proto = Object.getPrototypeOf(api);\n    if (proto && (!has(proto, \"version\") || !has(proto, \"transform\") || !has(proto, \"template\") || !has(proto, \"types\"))) {\n      proto = null;\n    }\n  }\n  return Object.assign({}, proto, api);\n}\nfunction has(obj, key) {\n  return Object.prototype.hasOwnProperty.call(obj, key);\n}\nfunction throwVersionError(range, version) {\n  if (typeof range === \"number\") {\n    if (!Number.isInteger(range)) {\n      throw new Error(\"Expected string or integer value.\");\n    }\n    range = `^${range}.0.0-0`;\n  }\n  if (typeof range !== \"string\") {\n    throw new Error(\"Expected string or integer value.\");\n  }\n  const limit = Error.stackTraceLimit;\n  if (typeof limit === \"number\" && limit < 25) {\n    Error.stackTraceLimit = 25;\n  }\n  let err;\n  if (version.slice(0, 2) === \"7.\") {\n    err = new Error(`Requires Babel \"^7.0.0-beta.41\", but was loaded with \"${version}\". ` + `You'll need to update your @babel/core version.`);\n  } else {\n    err = new Error(`Requires Babel \"${range}\", but was loaded with \"${version}\". ` + `If you are sure you have a compatible version of @babel/core, ` + `it is likely that something in your build process is loading the ` + `wrong version. Inspect the stack trace of this error to look for ` + `the first entry that doesn't mention \"@babel/core\" or \"babel-core\" ` + `to see what is calling Babel.`);\n  }\n  if (typeof limit === \"number\") {\n    Error.stackTraceLimit = limit;\n  }\n  throw Object.assign(err, {\n    code: \"BABEL_VERSION_UNSUPPORTED\",\n    version,\n    range\n  });\n}\n\n//# sourceMappingURL=index.js.map\n/package.json\u0002-{\n  \"name\": \"@babel/helper-plugin-utils\",\n  \"version\": \"7.20.2\",\n  \"description\": \"General utilities for plugins to use\",\n  \"author\": \"The Babel Team (https://babel.dev/team)\",\n  \"homepage\": \"https://babel.dev/docs/en/next/babel-helper-plugin-utils\",\n  \"license\": \"MIT\",\n  \"publishConfig\": {\n    \"access\": \"public\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/babel/babel.git\",\n    \"directory\": \"packages/babel-helper-plugin-utils\"\n  },\n  \"main\": \"./lib/index.js\",\n  \"engines\": {\n    \"node\": \">=6.9.0\"\n  },\n  \"type\": \"commonjs\"\n}/lib/index.js.map\u001cq{\"version\":3,\"names\":[\"apiPolyfills\",\"assertVersion\",\"api\",\"range\",\"throwVersionError\",\"version\",\"targets\",\"assumption\",\"undefined\",\"declare\",\"builder\",\"options\",\"dirname\",\"clonedApi\",\"name\",\"Object\",\"keys\",\"copyApiObject\",\"declarePreset\",\"proto\",\"test\",\"getPrototypeOf\",\"has\",\"obj\",\"key\",\"prototype\",\"hasOwnProperty\",\"call\",\"Number\",\"isInteger\",\"Error\",\"limit\",\"stackTraceLimit\",\"err\",\"slice\",\"assign\",\"code\"],\"sources\":[\"../src/index.ts\"],\"sourcesContent\":[\"import type {\\n  PluginAPI,\\n  PluginObject,\\n  PluginPass,\\n  PresetAPI,\\n  PresetObject,\\n} from \\\"@babel/core\\\";\\n\\ntype APIPolyfillFactory<T extends keyof PluginAPI> = (\\n  api: PluginAPI,\\n) => PluginAPI[T];\\n\\ntype APIPolyfills = {\\n  assertVersion: APIPolyfillFactory<\\\"assertVersion\\\">;\\n  targets: APIPolyfillFactory<\\\"targets\\\">;\\n  assumption: APIPolyfillFactory<\\\"assumption\\\">;\\n};\\n\\nconst apiPolyfills: APIPolyfills = {\\n  // Not supported by Babel 7 and early versions of Babel 7 beta.\\n  // It's important that this is polyfilled for older Babel versions\\n  // since it's needed to report the version mismatch.\\n  assertVersion: (api: PluginAPI) => (range: number | string) => {\\n    throwVersionError(range, api.version);\\n  },\\n  // This is supported starting from Babel 7.13\\n  // TODO(Babel 8): Remove this polyfill\\n  targets: () => () => {\\n    return {};\\n  },\\n  // This is supported starting from Babel 7.13\\n  // TODO(Babel 8): Remove this polyfill\\n  assumption: () => () => {\\n    return undefined;\\n  },\\n};\\n\\nexport function declare<State = {}, Option = {}>(\\n  builder: (\\n    api: PluginAPI,\\n    options: Option,\\n    dirname: string,\\n  ) => PluginObject<State & PluginPass>,\\n): (\\n  api: PluginAPI,\\n  options: Option,\\n  dirname: string,\\n) => PluginObject<State & PluginPass> {\\n  return (api, options: Option, dirname: string) => {\\n    let clonedApi: PluginAPI;\\n\\n    for (const name of Object.keys(\\n      apiPolyfills,\\n    ) as (keyof typeof apiPolyfills)[]) {\\n      if (api[name]) continue;\\n\\n      // TODO: Use ??= when flow lets us to do so\\n      clonedApi = clonedApi ?? copyApiObject(api);\\n      // @ts-expect-error The shape of API polyfill is guaranteed by APIPolyfillFactory\\n      clonedApi[name] = apiPolyfills[name](clonedApi);\\n    }\\n\\n    // @ts-expect-error options || {} may not be assigned to Options\\n    return builder(clonedApi ?? api, options || {}, dirname);\\n  };\\n}\\n\\nexport const declarePreset = declare as <Option = {}>(\\n  builder: (api: PresetAPI, options: Option, dirname: string) => PresetObject,\\n) => (api: PresetAPI, options: Option, dirname: string) => PresetObject;\\n\\nfunction copyApiObject(api: PluginAPI): PluginAPI {\\n  // Babel >= 7 <= beta.41 passed the API as a new object that had\\n  // babel/core as the prototype. While slightly faster, it also\\n  // means that the Object.assign copy below fails. Rather than\\n  // keep complexity, the Babel 6 behavior has been reverted and this\\n  // normalizes all that for Babel 7.\\n  let proto = null;\\n  if (typeof api.version === \\\"string\\\" && /^7\\\\./.test(api.version)) {\\n    proto = Object.getPrototypeOf(api);\\n    if (\\n      proto &&\\n      (!has(proto, \\\"version\\\") ||\\n        !has(proto, \\\"transform\\\") ||\\n        !has(proto, \\\"template\\\") ||\\n        !has(proto, \\\"types\\\"))\\n    ) {\\n      proto = null;\\n    }\\n  }\\n\\n  return {\\n    ...proto,\\n    ...api,\\n  };\\n}\\n\\nfunction has(obj: {}, key: string) {\\n  return Object.prototype.hasOwnProperty.call(obj, key);\\n}\\n\\nfunction throwVersionError(range: string | number, version: string) {\\n  if (typeof range === \\\"number\\\") {\\n    if (!Number.isInteger(range)) {\\n      throw new Error(\\\"Expected string or integer value.\\\");\\n    }\\n    range = `^${range}.0.0-0`;\\n  }\\n  if (typeof range !== \\\"string\\\") {\\n    throw new Error(\\\"Expected string or integer value.\\\");\\n  }\\n\\n  const limit = Error.stackTraceLimit;\\n\\n  if (typeof limit === \\\"number\\\" && limit < 25) {\\n    // Bump up the limit if needed so that users are more likely\\n    // to be able to see what is calling Babel.\\n    Error.stackTraceLimit = 25;\\n  }\\n\\n  let err;\\n  if (version.slice(0, 2) === \\\"7.\\\") {\\n    err = new Error(\\n      `Requires Babel \\\"^7.0.0-beta.41\\\", but was loaded with \\\"${version}\\\". ` +\\n        `You'll need to update your @babel/core version.`,\\n    );\\n  } else {\\n    err = new Error(\\n      `Requires Babel \\\"${range}\\\", but was loaded with \\\"${version}\\\". ` +\\n        `If you are sure you have a compatible version of @babel/core, ` +\\n        `it is likely that something in your build process is loading the ` +\\n        `wrong version. Inspect the stack trace of this error to look for ` +\\n        `the first entry that doesn't mention \\\"@babel/core\\\" or \\\"babel-core\\\" ` +\\n        `to see what is calling Babel.`,\\n    );\\n  }\\n\\n  if (typeof limit === \\\"number\\\") {\\n    Error.stackTraceLimit = limit;\\n  }\\n\\n  throw Object.assign(err, {\\n    code: \\\"BABEL_VERSION_UNSUPPORTED\\\",\\n    version,\\n    range,\\n  } as any);\\n}\\n\"],\"mappings\":\"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\"}/LICENSE\u0004RMIT License\n\nCopyright (c) 2014-present Sebastian McKenzie and other contributors\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QGJhYmVsL2hlbHBlci1zaW1wbGUtYWNjZXNzQDcuMjAuMg==",
    "content": "/lib/index.js\u000b\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = simplifyAccess;\nvar _t = require(\"@babel/types\");\nconst {\n  LOGICAL_OPERATORS,\n  assignmentExpression,\n  binaryExpression,\n  cloneNode,\n  identifier,\n  logicalExpression,\n  numericLiteral,\n  sequenceExpression,\n  unaryExpression\n} = _t;\nconst simpleAssignmentVisitor = {\n  UpdateExpression: {\n    exit(path) {\n      const {\n        scope,\n        bindingNames,\n        includeUpdateExpression\n      } = this;\n      if (!includeUpdateExpression) {\n        return;\n      }\n      const arg = path.get(\"argument\");\n      if (!arg.isIdentifier()) return;\n      const localName = arg.node.name;\n      if (!bindingNames.has(localName)) return;\n\n      if (scope.getBinding(localName) !== path.scope.getBinding(localName)) {\n        return;\n      }\n      if (path.parentPath.isExpressionStatement() && !path.isCompletionRecord()) {\n        const operator = path.node.operator == \"++\" ? \"+=\" : \"-=\";\n        path.replaceWith(assignmentExpression(operator, arg.node, numericLiteral(1)));\n      } else if (path.node.prefix) {\n        path.replaceWith(assignmentExpression(\"=\", identifier(localName), binaryExpression(path.node.operator[0], unaryExpression(\"+\", arg.node), numericLiteral(1))));\n      } else {\n        const old = path.scope.generateUidIdentifierBasedOnNode(arg.node, \"old\");\n        const varName = old.name;\n        path.scope.push({\n          id: old\n        });\n        const binary = binaryExpression(path.node.operator[0], identifier(varName),\n        numericLiteral(1));\n\n        path.replaceWith(sequenceExpression([assignmentExpression(\"=\", identifier(varName), unaryExpression(\"+\", arg.node)), assignmentExpression(\"=\", cloneNode(arg.node), binary), identifier(varName)]));\n      }\n    }\n  },\n  AssignmentExpression: {\n    exit(path) {\n      const {\n        scope,\n        seen,\n        bindingNames\n      } = this;\n      if (path.node.operator === \"=\") return;\n      if (seen.has(path.node)) return;\n      seen.add(path.node);\n      const left = path.get(\"left\");\n      if (!left.isIdentifier()) return;\n\n      const localName = left.node.name;\n      if (!bindingNames.has(localName)) return;\n\n      if (scope.getBinding(localName) !== path.scope.getBinding(localName)) {\n        return;\n      }\n      const operator = path.node.operator.slice(0, -1);\n      if (LOGICAL_OPERATORS.includes(operator)) {\n        path.replaceWith(logicalExpression(\n        operator, path.node.left, assignmentExpression(\"=\", cloneNode(path.node.left), path.node.right)));\n      } else {\n        path.node.right = binaryExpression(\n        operator, cloneNode(path.node.left), path.node.right);\n        path.node.operator = \"=\";\n      }\n    }\n  }\n};\nfunction simplifyAccess(path, bindingNames,\nincludeUpdateExpression = true) {\n  path.traverse(simpleAssignmentVisitor, {\n    scope: path.scope,\n    bindingNames,\n    seen: new WeakSet(),\n    includeUpdateExpression\n  });\n}\n\n//# sourceMappingURL=index.js.map\n/LICENSE\u0004RMIT License\n\nCopyright (c) 2014-present Sebastian McKenzie and other contributors\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n/README.md\u0001# @babel/helper-simple-access\n\n> Babel helper for ensuring that access to a given value is performed through simple accesses\n\nSee our website [@babel/helper-simple-access](https://babeljs.io/docs/en/babel-helper-simple-access) for more information.\n\n## Install\n\nUsing npm:\n\n```sh\nnpm install --save @babel/helper-simple-access\n```\n\nor using yarn:\n\n```sh\nyarn add @babel/helper-simple-access\n```\n/package.json\u0002{\n  \"name\": \"@babel/helper-simple-access\",\n  \"version\": \"7.20.2\",\n  \"description\": \"Babel helper for ensuring that access to a given value is performed through simple accesses\",\n  \"author\": \"The Babel Team (https://babel.dev/team)\",\n  \"homepage\": \"https://babel.dev/docs/en/next/babel-helper-simple-access\",\n  \"license\": \"MIT\",\n  \"publishConfig\": {\n    \"access\": \"public\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/babel/babel.git\",\n    \"directory\": \"packages/babel-helper-simple-access\"\n  },\n  \"main\": \"./lib/index.js\",\n  \"dependencies\": {\n    \"@babel/types\": \"^7.20.2\"\n  },\n  \"devDependencies\": {\n    \"@babel/core\": \"^7.20.2\",\n    \"@babel/traverse\": \"^7.20.1\"\n  },\n  \"engines\": {\n    \"node\": \">=6.9.0\"\n  },\n  \"type\": \"commonjs\"\n}/lib/index.js.map {\"version\":3,\"names\":[\"LOGICAL_OPERATORS\",\"assignmentExpression\",\"binaryExpression\",\"cloneNode\",\"identifier\",\"logicalExpression\",\"numericLiteral\",\"sequenceExpression\",\"unaryExpression\",\"simpleAssignmentVisitor\",\"UpdateExpression\",\"exit\",\"path\",\"scope\",\"bindingNames\",\"includeUpdateExpression\",\"arg\",\"get\",\"isIdentifier\",\"localName\",\"node\",\"name\",\"has\",\"getBinding\",\"parentPath\",\"isExpressionStatement\",\"isCompletionRecord\",\"operator\",\"replaceWith\",\"prefix\",\"old\",\"generateUidIdentifierBasedOnNode\",\"varName\",\"push\",\"id\",\"binary\",\"AssignmentExpression\",\"seen\",\"add\",\"left\",\"slice\",\"includes\",\"right\",\"simplifyAccess\",\"traverse\",\"WeakSet\"],\"sources\":[\"../src/index.ts\"],\"sourcesContent\":[\"import {\\n  LOGICAL_OPERATORS,\\n  assignmentExpression,\\n  binaryExpression,\\n  cloneNode,\\n  identifier,\\n  logicalExpression,\\n  numericLiteral,\\n  sequenceExpression,\\n  unaryExpression,\\n} from \\\"@babel/types\\\";\\nimport type * as t from \\\"@babel/types\\\";\\nimport type { NodePath, Scope, Visitor } from \\\"@babel/traverse\\\";\\n\\ntype State = {\\n  scope: Scope;\\n  bindingNames: Set<string>;\\n  seen: WeakSet<t.Node>;\\n  includeUpdateExpression: boolean;\\n};\\n\\nconst simpleAssignmentVisitor: Visitor<State> = {\\n  // TODO(Babel 8): Remove UpdateExpression\\n  UpdateExpression: {\\n    exit(path) {\\n      const { scope, bindingNames, includeUpdateExpression } = this;\\n      if (!includeUpdateExpression) {\\n        return;\\n      }\\n\\n      const arg = path.get(\\\"argument\\\");\\n      if (!arg.isIdentifier()) return;\\n      const localName = arg.node.name;\\n\\n      if (!bindingNames.has(localName)) return;\\n\\n      // redeclared in this scope\\n      if (scope.getBinding(localName) !== path.scope.getBinding(localName)) {\\n        return;\\n      }\\n\\n      if (\\n        path.parentPath.isExpressionStatement() &&\\n        !path.isCompletionRecord()\\n      ) {\\n        // ++i => (i += 1);\\n        const operator = path.node.operator == \\\"++\\\" ? \\\"+=\\\" : \\\"-=\\\";\\n        path.replaceWith(\\n          assignmentExpression(operator, arg.node, numericLiteral(1)),\\n        );\\n      } else if (path.node.prefix) {\\n        // ++i => (i = (+i) + 1);\\n        path.replaceWith(\\n          assignmentExpression(\\n            \\\"=\\\",\\n            identifier(localName),\\n            binaryExpression(\\n              path.node.operator[0] as \\\"+\\\" | \\\"-\\\",\\n              unaryExpression(\\\"+\\\", arg.node),\\n              numericLiteral(1),\\n            ),\\n          ),\\n        );\\n      } else {\\n        const old = path.scope.generateUidIdentifierBasedOnNode(\\n          arg.node,\\n          \\\"old\\\",\\n        );\\n        const varName = old.name;\\n        path.scope.push({ id: old });\\n\\n        const binary = binaryExpression(\\n          path.node.operator[0] as \\\"+\\\" | \\\"-\\\",\\n          identifier(varName),\\n          // todo: support bigint\\n          numericLiteral(1),\\n        );\\n\\n        // i++ => (_old = (+i), i = _old + 1, _old)\\n        path.replaceWith(\\n          sequenceExpression([\\n            assignmentExpression(\\n              \\\"=\\\",\\n              identifier(varName),\\n              unaryExpression(\\\"+\\\", arg.node),\\n            ),\\n            assignmentExpression(\\\"=\\\", cloneNode(arg.node), binary),\\n            identifier(varName),\\n          ]),\\n        );\\n      }\\n    },\\n  },\\n\\n  AssignmentExpression: {\\n    exit(path) {\\n      const { scope, seen, bindingNames } = this;\\n\\n      if (path.node.operator === \\\"=\\\") return;\\n\\n      if (seen.has(path.node)) return;\\n      seen.add(path.node);\\n\\n      const left = path.get(\\\"left\\\");\\n      if (!left.isIdentifier()) return;\\n\\n      // Simple update-assign foo += 1;\\n      // =>   exports.foo =  (foo += 1);\\n      const localName = left.node.name;\\n\\n      if (!bindingNames.has(localName)) return;\\n\\n      // redeclared in this scope\\n      if (scope.getBinding(localName) !== path.scope.getBinding(localName)) {\\n        return;\\n      }\\n\\n      const operator = path.node.operator.slice(0, -1);\\n      if (LOGICAL_OPERATORS.includes(operator)) {\\n        // &&, ||, ??\\n        // (foo &&= bar) => (foo && foo = bar)\\n        path.replaceWith(\\n          logicalExpression(\\n            // @ts-expect-error Guarded by LOGICAL_OPERATORS.includes\\n            operator,\\n            path.node.left,\\n            assignmentExpression(\\n              \\\"=\\\",\\n              cloneNode(path.node.left),\\n              path.node.right,\\n            ),\\n          ),\\n        );\\n      } else {\\n        // (foo += bar) => (foo = foo + bar)\\n        path.node.right = binaryExpression(\\n          // @ts-expect-error An assignment expression operator removing \\\"=\\\" must\\n          // be a valid binary operator\\n          operator,\\n          cloneNode(path.node.left),\\n          path.node.right,\\n        );\\n        path.node.operator = \\\"=\\\";\\n      }\\n    },\\n  },\\n};\\n\\nexport default function simplifyAccess(\\n  path: NodePath,\\n  bindingNames: Set<string>,\\n  // TODO(Babel 8): Remove this\\n  includeUpdateExpression: boolean = true,\\n) {\\n  path.traverse(simpleAssignmentVisitor, {\\n    scope: path.scope,\\n    bindingNames,\\n    seen: new WeakSet(),\\n    includeUpdateExpression,\\n  });\\n}\\n\"],\"mappings\":\"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\"}"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QGJhYmVsL2hlbHBlci1zcGxpdC1leHBvcnQtZGVjbGFyYXRpb25ANy4xOC42",
    "content": "/LICENSE\u0004RMIT License\n\nCopyright (c) 2014-present Sebastian McKenzie and other contributors\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n/README.md\u0001g# @babel/helper-split-export-declaration\n\n> \n\nSee our website [@babel/helper-split-export-declaration](https://babeljs.io/docs/en/babel-helper-split-export-declaration) for more information.\n\n## Install\n\nUsing npm:\n\n```sh\nnpm install --save @babel/helper-split-export-declaration\n```\n\nor using yarn:\n\n```sh\nyarn add @babel/helper-split-export-declaration\n```\n/lib/index.js\t\b\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = splitExportDeclaration;\n\nvar _t = require(\"@babel/types\");\n\nconst {\n  cloneNode,\n  exportNamedDeclaration,\n  exportSpecifier,\n  identifier,\n  variableDeclaration,\n  variableDeclarator\n} = _t;\n\nfunction splitExportDeclaration(exportDeclaration) {\n  if (!exportDeclaration.isExportDeclaration() || exportDeclaration.isExportAllDeclaration()) {\n    throw new Error(\"Only default and named export declarations can be split.\");\n  }\n\n  if (exportDeclaration.isExportDefaultDeclaration()) {\n    const declaration = exportDeclaration.get(\"declaration\");\n    const standaloneDeclaration = declaration.isFunctionDeclaration() || declaration.isClassDeclaration();\n    const scope = declaration.isScope() ? declaration.scope.parent : declaration.scope;\n    let id = declaration.node.id;\n    let needBindingRegistration = false;\n\n    if (!id) {\n      needBindingRegistration = true;\n      id = scope.generateUidIdentifier(\"default\");\n\n      if (standaloneDeclaration || declaration.isFunctionExpression() || declaration.isClassExpression()) {\n        declaration.node.id = cloneNode(id);\n      }\n    }\n\n    const updatedDeclaration = standaloneDeclaration ? declaration.node : variableDeclaration(\"var\", [variableDeclarator(cloneNode(id), declaration.node)]);\n    const updatedExportDeclaration = exportNamedDeclaration(null, [exportSpecifier(cloneNode(id), identifier(\"default\"))]);\n    exportDeclaration.insertAfter(updatedExportDeclaration);\n    exportDeclaration.replaceWith(updatedDeclaration);\n\n    if (needBindingRegistration) {\n      scope.registerDeclaration(exportDeclaration);\n    }\n\n    return exportDeclaration;\n  } else if (exportDeclaration.get(\"specifiers\").length > 0) {\n    throw new Error(\"It doesn't make sense to split exported specifiers.\");\n  }\n\n  const declaration = exportDeclaration.get(\"declaration\");\n  const bindingIdentifiers = declaration.getOuterBindingIdentifiers();\n  const specifiers = Object.keys(bindingIdentifiers).map(name => {\n    return exportSpecifier(identifier(name), identifier(name));\n  });\n  const aliasDeclar = exportNamedDeclaration(null, specifiers);\n  exportDeclaration.insertAfter(aliasDeclar);\n  exportDeclaration.replaceWith(declaration.node);\n  return exportDeclaration;\n}/package.json\u0002d{\n  \"name\": \"@babel/helper-split-export-declaration\",\n  \"version\": \"7.18.6\",\n  \"description\": \"\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/babel/babel.git\",\n    \"directory\": \"packages/babel-helper-split-export-declaration\"\n  },\n  \"homepage\": \"https://babel.dev/docs/en/next/babel-helper-split-export-declaration\",\n  \"license\": \"MIT\",\n  \"publishConfig\": {\n    \"access\": \"public\"\n  },\n  \"main\": \"./lib/index.js\",\n  \"dependencies\": {\n    \"@babel/types\": \"^7.18.6\"\n  },\n  \"engines\": {\n    \"node\": \">=6.9.0\"\n  },\n  \"author\": \"The Babel Team (https://babel.dev/team)\",\n  \"type\": \"commonjs\"\n}"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QGJhYmVsL2hlbHBlci1zdHJpbmctcGFyc2VyQDcuMTkuNA==",
    "content": "/lib/index.js.mapT{\"version\":3,\"names\":[\"isDigit\",\"code\",\"forbiddenNumericSeparatorSiblings\",\"decBinOct\",\"Set\",\"hex\",\"isAllowedNumericSeparatorSibling\",\"bin\",\"ch\",\"oct\",\"dec\",\"readStringContents\",\"type\",\"input\",\"pos\",\"lineStart\",\"curLine\",\"errors\",\"initialPos\",\"initialLineStart\",\"initialCurLine\",\"out\",\"firstInvalidLoc\",\"chunkStart\",\"length\",\"unterminated\",\"slice\",\"charCodeAt\",\"isStringEnd\",\"res\",\"readEscapedChar\",\"str\",\"containsInvalid\",\"inTemplate\",\"throwOnInvalid\",\"readHexChar\",\"String\",\"fromCharCode\",\"readCodePoint\",\"fromCodePoint\",\"strictNumericEscape\",\"startPos\",\"match\",\"octalStr\",\"octal\",\"parseInt\",\"next\",\"len\",\"forceLen\",\"n\",\"readInt\",\"invalidEscapeSequence\",\"radix\",\"allowNumSeparator\",\"bailOnError\",\"start\",\"forbiddenSiblings\",\"isAllowedSibling\",\"invalid\",\"total\",\"i\",\"e\",\"Infinity\",\"val\",\"prev\",\"numericSeparatorInEscapeSequence\",\"Number\",\"isNaN\",\"has\",\"unexpectedNumericSeparator\",\"invalidDigit\",\"indexOf\",\"invalidCodePoint\"],\"sources\":[\"../src/index.ts\"],\"sourcesContent\":[\"import * as charCodes from \\\"charcodes\\\";\\n\\n// The following character codes are forbidden from being\\n// an immediate sibling of NumericLiteralSeparator _\\nconst forbiddenNumericSeparatorSiblings = {\\n  decBinOct: new Set<number>([\\n    charCodes.dot,\\n    charCodes.uppercaseB,\\n    charCodes.uppercaseE,\\n    charCodes.uppercaseO,\\n    charCodes.underscore, // multiple separators are not allowed\\n    charCodes.lowercaseB,\\n    charCodes.lowercaseE,\\n    charCodes.lowercaseO,\\n  ]),\\n  hex: new Set<number>([\\n    charCodes.dot,\\n    charCodes.uppercaseX,\\n    charCodes.underscore, // multiple separators are not allowed\\n    charCodes.lowercaseX,\\n  ]),\\n};\\n\\nconst isAllowedNumericSeparatorSibling = {\\n  // 0 - 1\\n  bin: (ch: number) => ch === charCodes.digit0 || ch === charCodes.digit1,\\n\\n  // 0 - 7\\n  oct: (ch: number) => ch >= charCodes.digit0 && ch <= charCodes.digit7,\\n\\n  // 0 - 9\\n  dec: (ch: number) => ch >= charCodes.digit0 && ch <= charCodes.digit9,\\n\\n  // 0 - 9, A - F, a - f,\\n  hex: (ch: number) =>\\n    (ch >= charCodes.digit0 && ch <= charCodes.digit9) ||\\n    (ch >= charCodes.uppercaseA && ch <= charCodes.uppercaseF) ||\\n    (ch >= charCodes.lowercaseA && ch <= charCodes.lowercaseF),\\n};\\n\\nexport type StringContentsErrorHandlers = EscapedCharErrorHandlers & {\\n  unterminated(\\n    initialPos: number,\\n    initialLineStart: number,\\n    initialCurLine: number,\\n  ): void;\\n};\\n\\nexport function readStringContents(\\n  type: \\\"single\\\" | \\\"double\\\" | \\\"template\\\",\\n  input: string,\\n  pos: number,\\n  lineStart: number,\\n  curLine: number,\\n  errors: StringContentsErrorHandlers,\\n) {\\n  const initialPos = pos;\\n  const initialLineStart = lineStart;\\n  const initialCurLine = curLine;\\n\\n  let out = \\\"\\\";\\n  let firstInvalidLoc = null;\\n  let chunkStart = pos;\\n  const { length } = input;\\n  for (;;) {\\n    if (pos >= length) {\\n      errors.unterminated(initialPos, initialLineStart, initialCurLine);\\n      out += input.slice(chunkStart, pos);\\n      break;\\n    }\\n    const ch = input.charCodeAt(pos);\\n    if (isStringEnd(type, ch, input, pos)) {\\n      out += input.slice(chunkStart, pos);\\n      break;\\n    }\\n    if (ch === charCodes.backslash) {\\n      out += input.slice(chunkStart, pos);\\n      const res = readEscapedChar(\\n        input,\\n        pos,\\n        lineStart,\\n        curLine,\\n        type === \\\"template\\\",\\n        errors,\\n      );\\n      if (res.ch === null && !firstInvalidLoc) {\\n        firstInvalidLoc = { pos, lineStart, curLine };\\n      } else {\\n        out += res.ch;\\n      }\\n      ({ pos, lineStart, curLine } = res);\\n      chunkStart = pos;\\n    } else if (\\n      ch === charCodes.lineSeparator ||\\n      ch === charCodes.paragraphSeparator\\n    ) {\\n      ++pos;\\n      ++curLine;\\n      lineStart = pos;\\n    } else if (ch === charCodes.lineFeed || ch === charCodes.carriageReturn) {\\n      if (type === \\\"template\\\") {\\n        out += input.slice(chunkStart, pos) + \\\"\\\\n\\\";\\n        ++pos;\\n        if (\\n          ch === charCodes.carriageReturn &&\\n          input.charCodeAt(pos) === charCodes.lineFeed\\n        ) {\\n          ++pos;\\n        }\\n        ++curLine;\\n        chunkStart = lineStart = pos;\\n      } else {\\n        errors.unterminated(initialPos, initialLineStart, initialCurLine);\\n      }\\n    } else {\\n      ++pos;\\n    }\\n  }\\n  return {\\n    pos,\\n    str: out,\\n    firstInvalidLoc,\\n    lineStart,\\n    curLine,\\n\\n    // TODO(Babel 8): This is only needed for backwards compatibility,\\n    // we can remove it.\\n    containsInvalid: !!firstInvalidLoc,\\n  };\\n}\\n\\nfunction isStringEnd(\\n  type: \\\"single\\\" | \\\"double\\\" | \\\"template\\\",\\n  ch: number,\\n  input: string,\\n  pos: number,\\n) {\\n  if (type === \\\"template\\\") {\\n    return (\\n      ch === charCodes.graveAccent ||\\n      (ch === charCodes.dollarSign &&\\n        input.charCodeAt(pos + 1) === charCodes.leftCurlyBrace)\\n    );\\n  }\\n  return (\\n    ch === (type === \\\"double\\\" ? charCodes.quotationMark : charCodes.apostrophe)\\n  );\\n}\\n\\ntype EscapedCharErrorHandlers = HexCharErrorHandlers &\\n  CodePointErrorHandlers & {\\n    strictNumericEscape(pos: number, lineStart: number, curLine: number): void;\\n  };\\n\\nfunction readEscapedChar(\\n  input: string,\\n  pos: number,\\n  lineStart: number,\\n  curLine: number,\\n  inTemplate: boolean,\\n  errors: EscapedCharErrorHandlers,\\n) {\\n  const throwOnInvalid = !inTemplate;\\n  pos++; // skip '\\\\'\\n\\n  const res = (ch: string | null) => ({ pos, ch, lineStart, curLine });\\n\\n  const ch = input.charCodeAt(pos++);\\n  switch (ch) {\\n    case charCodes.lowercaseN:\\n      return res(\\\"\\\\n\\\");\\n    case charCodes.lowercaseR:\\n      return res(\\\"\\\\r\\\");\\n    case charCodes.lowercaseX: {\\n      let code;\\n      ({ code, pos } = readHexChar(\\n        input,\\n        pos,\\n        lineStart,\\n        curLine,\\n        2,\\n        false,\\n        throwOnInvalid,\\n        errors,\\n      ));\\n      return res(code === null ? null : String.fromCharCode(code));\\n    }\\n    case charCodes.lowercaseU: {\\n      let code;\\n      ({ code, pos } = readCodePoint(\\n        input,\\n        pos,\\n        lineStart,\\n        curLine,\\n        throwOnInvalid,\\n        errors,\\n      ));\\n      return res(code === null ? null : String.fromCodePoint(code));\\n    }\\n    case charCodes.lowercaseT:\\n      return res(\\\"\\\\t\\\");\\n    case charCodes.lowercaseB:\\n      return res(\\\"\\\\b\\\");\\n    case charCodes.lowercaseV:\\n      return res(\\\"\\\\u000b\\\");\\n    case charCodes.lowercaseF:\\n      return res(\\\"\\\\f\\\");\\n    case charCodes.carriageReturn:\\n      if (input.charCodeAt(pos) === charCodes.lineFeed) {\\n        ++pos;\\n      }\\n    // fall through\\n    case charCodes.lineFeed:\\n      lineStart = pos;\\n      ++curLine;\\n    // fall through\\n    case charCodes.lineSeparator:\\n    case charCodes.paragraphSeparator:\\n      return res(\\\"\\\");\\n    case charCodes.digit8:\\n    case charCodes.digit9:\\n      if (inTemplate) {\\n        return res(null);\\n      } else {\\n        errors.strictNumericEscape(pos - 1, lineStart, curLine);\\n      }\\n    // fall through\\n    default:\\n      if (ch >= charCodes.digit0 && ch <= charCodes.digit7) {\\n        const startPos = pos - 1;\\n        const match = input.slice(startPos, pos + 2).match(/^[0-7]+/)!;\\n\\n        let octalStr = match[0];\\n\\n        let octal = parseInt(octalStr, 8);\\n        if (octal > 255) {\\n          octalStr = octalStr.slice(0, -1);\\n          octal = parseInt(octalStr, 8);\\n        }\\n        pos += octalStr.length - 1;\\n        const next = input.charCodeAt(pos);\\n        if (\\n          octalStr !== \\\"0\\\" ||\\n          next === charCodes.digit8 ||\\n          next === charCodes.digit9\\n        ) {\\n          if (inTemplate) {\\n            return res(null);\\n          } else {\\n            errors.strictNumericEscape(startPos, lineStart, curLine);\\n          }\\n        }\\n\\n        return res(String.fromCharCode(octal));\\n      }\\n\\n      return res(String.fromCharCode(ch));\\n  }\\n}\\n\\ntype HexCharErrorHandlers = IntErrorHandlers & {\\n  invalidEscapeSequence(pos: number, lineStart: number, curLine: number): void;\\n};\\n\\n// Used to read character escape sequences ('\\\\x', '\\\\u').\\nfunction readHexChar(\\n  input: string,\\n  pos: number,\\n  lineStart: number,\\n  curLine: number,\\n  len: number,\\n  forceLen: boolean,\\n  throwOnInvalid: boolean,\\n  errors: HexCharErrorHandlers,\\n) {\\n  const initialPos = pos;\\n  let n;\\n  ({ n, pos } = readInt(\\n    input,\\n    pos,\\n    lineStart,\\n    curLine,\\n    16,\\n    len,\\n    forceLen,\\n    false,\\n    errors,\\n    /* bailOnError */ !throwOnInvalid,\\n  ));\\n  if (n === null) {\\n    if (throwOnInvalid) {\\n      errors.invalidEscapeSequence(initialPos, lineStart, curLine);\\n    } else {\\n      pos = initialPos - 1;\\n    }\\n  }\\n  return { code: n, pos };\\n}\\n\\nexport type IntErrorHandlers = {\\n  numericSeparatorInEscapeSequence(\\n    pos: number,\\n    lineStart: number,\\n    curLine: number,\\n  ): void;\\n  unexpectedNumericSeparator(\\n    pos: number,\\n    lineStart: number,\\n    curLine: number,\\n  ): void;\\n  // It can return \\\"true\\\" to indicate that the error was handled\\n  // and the int parsing should continue.\\n  invalidDigit(\\n    pos: number,\\n    lineStart: number,\\n    curLine: number,\\n    radix: number,\\n  ): boolean;\\n};\\n\\nexport function readInt(\\n  input: string,\\n  pos: number,\\n  lineStart: number,\\n  curLine: number,\\n  radix: number,\\n  len: number | undefined,\\n  forceLen: boolean,\\n  allowNumSeparator: boolean | \\\"bail\\\",\\n  errors: IntErrorHandlers,\\n  bailOnError: boolean,\\n) {\\n  const start = pos;\\n  const forbiddenSiblings =\\n    radix === 16\\n      ? forbiddenNumericSeparatorSiblings.hex\\n      : forbiddenNumericSeparatorSiblings.decBinOct;\\n  const isAllowedSibling =\\n    radix === 16\\n      ? isAllowedNumericSeparatorSibling.hex\\n      : radix === 10\\n      ? isAllowedNumericSeparatorSibling.dec\\n      : radix === 8\\n      ? isAllowedNumericSeparatorSibling.oct\\n      : isAllowedNumericSeparatorSibling.bin;\\n\\n  let invalid = false;\\n  let total = 0;\\n\\n  for (let i = 0, e = len == null ? Infinity : len; i < e; ++i) {\\n    const code = input.charCodeAt(pos);\\n    let val;\\n\\n    if (code === charCodes.underscore && allowNumSeparator !== \\\"bail\\\") {\\n      const prev = input.charCodeAt(pos - 1);\\n      const next = input.charCodeAt(pos + 1);\\n\\n      if (!allowNumSeparator) {\\n        if (bailOnError) return { n: null, pos };\\n        errors.numericSeparatorInEscapeSequence(pos, lineStart, curLine);\\n      } else if (\\n        Number.isNaN(next) ||\\n        !isAllowedSibling(next) ||\\n        forbiddenSiblings.has(prev) ||\\n        forbiddenSiblings.has(next)\\n      ) {\\n        if (bailOnError) return { n: null, pos };\\n        errors.unexpectedNumericSeparator(pos, lineStart, curLine);\\n      }\\n\\n      // Ignore this _ character\\n      ++pos;\\n      continue;\\n    }\\n\\n    if (code >= charCodes.lowercaseA) {\\n      val = code - charCodes.lowercaseA + charCodes.lineFeed;\\n    } else if (code >= charCodes.uppercaseA) {\\n      val = code - charCodes.uppercaseA + charCodes.lineFeed;\\n    } else if (charCodes.isDigit(code)) {\\n      val = code - charCodes.digit0; // 0-9\\n    } else {\\n      val = Infinity;\\n    }\\n    if (val >= radix) {\\n      // If we found a digit which is too big, errors.invalidDigit can return true to avoid\\n      // breaking the loop (this is used for error recovery).\\n      if (val <= 9 && bailOnError) {\\n        return { n: null, pos };\\n      } else if (\\n        val <= 9 &&\\n        errors.invalidDigit(pos, lineStart, curLine, radix)\\n      ) {\\n        val = 0;\\n      } else if (forceLen) {\\n        val = 0;\\n        invalid = true;\\n      } else {\\n        break;\\n      }\\n    }\\n    ++pos;\\n    total = total * radix + val;\\n  }\\n  if (pos === start || (len != null && pos - start !== len) || invalid) {\\n    return { n: null, pos };\\n  }\\n\\n  return { n: total, pos };\\n}\\n\\nexport type CodePointErrorHandlers = HexCharErrorHandlers & {\\n  invalidCodePoint(pos: number, lineStart: number, curLine: number): void;\\n};\\n\\nexport function readCodePoint(\\n  input: string,\\n  pos: number,\\n  lineStart: number,\\n  curLine: number,\\n  throwOnInvalid: boolean,\\n  errors: CodePointErrorHandlers,\\n) {\\n  const ch = input.charCodeAt(pos);\\n  let code;\\n\\n  if (ch === charCodes.leftCurlyBrace) {\\n    ++pos;\\n    ({ code, pos } = readHexChar(\\n      input,\\n      pos,\\n      lineStart,\\n      curLine,\\n      input.indexOf(\\\"}\\\", pos) - pos,\\n      true,\\n      throwOnInvalid,\\n      errors,\\n    ));\\n    ++pos;\\n    if (code !== null && code > 0x10ffff) {\\n      if (throwOnInvalid) {\\n        errors.invalidCodePoint(pos, lineStart, curLine);\\n      } else {\\n        return { code: null, pos };\\n      }\\n    }\\n  } else {\\n    ({ code, pos } = readHexChar(\\n      input,\\n      pos,\\n      lineStart,\\n      curLine,\\n      4,\\n      false,\\n      throwOnInvalid,\\n      errors,\\n    ));\\n  }\\n  return { code, pos };\\n}\\n\"],\"mappings\":\"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\"}/README.md\u0001R# @babel/helper-string-parser\n\n> A utility package to parse strings\n\nSee our website [@babel/helper-string-parser](https://babeljs.io/docs/en/babel-helper-string-parser) for more information.\n\n## Install\n\nUsing npm:\n\n```sh\nnpm install --save @babel/helper-string-parser\n```\n\nor using yarn:\n\n```sh\nyarn add @babel/helper-string-parser\n```\n/package.json\u0002{\n  \"name\": \"@babel/helper-string-parser\",\n  \"version\": \"7.19.4\",\n  \"description\": \"A utility package to parse strings\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/babel/babel.git\",\n    \"directory\": \"packages/babel-helper-string-parser\"\n  },\n  \"homepage\": \"https://babel.dev/docs/en/next/babel-helper-string-parser\",\n  \"license\": \"MIT\",\n  \"publishConfig\": {\n    \"access\": \"public\"\n  },\n  \"main\": \"./lib/index.js\",\n  \"devDependencies\": {\n    \"charcodes\": \"^0.2.0\"\n  },\n  \"engines\": {\n    \"node\": \">=6.9.0\"\n  },\n  \"author\": \"The Babel Team (https://babel.dev/team)\",\n  \"exports\": {\n    \".\": \"./lib/index.js\",\n    \"./package.json\": \"./package.json\"\n  },\n  \"type\": \"commonjs\"\n}/LICENSE\u0004RMIT License\n\nCopyright (c) 2014-present Sebastian McKenzie and other contributors\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n/lib/index.js\u001e\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.readCodePoint = readCodePoint;\nexports.readInt = readInt;\nexports.readStringContents = readStringContents;\n\nvar _isDigit = function isDigit(code) {\n  return code >= 48 && code <= 57;\n};\n\nconst forbiddenNumericSeparatorSiblings = {\n  decBinOct: new Set([46, 66, 69, 79, 95, 98, 101, 111]),\n  hex: new Set([46, 88, 95, 120])\n};\nconst isAllowedNumericSeparatorSibling = {\n  bin: ch => ch === 48 || ch === 49,\n  oct: ch => ch >= 48 && ch <= 55,\n  dec: ch => ch >= 48 && ch <= 57,\n  hex: ch => ch >= 48 && ch <= 57 || ch >= 65 && ch <= 70 || ch >= 97 && ch <= 102\n};\n\nfunction readStringContents(type, input, pos, lineStart, curLine, errors) {\n  const initialPos = pos;\n  const initialLineStart = lineStart;\n  const initialCurLine = curLine;\n  let out = \"\";\n  let firstInvalidLoc = null;\n  let chunkStart = pos;\n  const {\n    length\n  } = input;\n\n  for (;;) {\n    if (pos >= length) {\n      errors.unterminated(initialPos, initialLineStart, initialCurLine);\n      out += input.slice(chunkStart, pos);\n      break;\n    }\n\n    const ch = input.charCodeAt(pos);\n\n    if (isStringEnd(type, ch, input, pos)) {\n      out += input.slice(chunkStart, pos);\n      break;\n    }\n\n    if (ch === 92) {\n      out += input.slice(chunkStart, pos);\n      const res = readEscapedChar(input, pos, lineStart, curLine, type === \"template\", errors);\n\n      if (res.ch === null && !firstInvalidLoc) {\n        firstInvalidLoc = {\n          pos,\n          lineStart,\n          curLine\n        };\n      } else {\n        out += res.ch;\n      }\n\n      ({\n        pos,\n        lineStart,\n        curLine\n      } = res);\n      chunkStart = pos;\n    } else if (ch === 8232 || ch === 8233) {\n      ++pos;\n      ++curLine;\n      lineStart = pos;\n    } else if (ch === 10 || ch === 13) {\n      if (type === \"template\") {\n        out += input.slice(chunkStart, pos) + \"\\n\";\n        ++pos;\n\n        if (ch === 13 && input.charCodeAt(pos) === 10) {\n          ++pos;\n        }\n\n        ++curLine;\n        chunkStart = lineStart = pos;\n      } else {\n        errors.unterminated(initialPos, initialLineStart, initialCurLine);\n      }\n    } else {\n      ++pos;\n    }\n  }\n\n  return {\n    pos,\n    str: out,\n    firstInvalidLoc,\n    lineStart,\n    curLine,\n    containsInvalid: !!firstInvalidLoc\n  };\n}\n\nfunction isStringEnd(type, ch, input, pos) {\n  if (type === \"template\") {\n    return ch === 96 || ch === 36 && input.charCodeAt(pos + 1) === 123;\n  }\n\n  return ch === (type === \"double\" ? 34 : 39);\n}\n\nfunction readEscapedChar(input, pos, lineStart, curLine, inTemplate, errors) {\n  const throwOnInvalid = !inTemplate;\n  pos++;\n\n  const res = ch => ({\n    pos,\n    ch,\n    lineStart,\n    curLine\n  });\n\n  const ch = input.charCodeAt(pos++);\n\n  switch (ch) {\n    case 110:\n      return res(\"\\n\");\n\n    case 114:\n      return res(\"\\r\");\n\n    case 120:\n      {\n        let code;\n        ({\n          code,\n          pos\n        } = readHexChar(input, pos, lineStart, curLine, 2, false, throwOnInvalid, errors));\n        return res(code === null ? null : String.fromCharCode(code));\n      }\n\n    case 117:\n      {\n        let code;\n        ({\n          code,\n          pos\n        } = readCodePoint(input, pos, lineStart, curLine, throwOnInvalid, errors));\n        return res(code === null ? null : String.fromCodePoint(code));\n      }\n\n    case 116:\n      return res(\"\\t\");\n\n    case 98:\n      return res(\"\\b\");\n\n    case 118:\n      return res(\"\\u000b\");\n\n    case 102:\n      return res(\"\\f\");\n\n    case 13:\n      if (input.charCodeAt(pos) === 10) {\n        ++pos;\n      }\n\n    case 10:\n      lineStart = pos;\n      ++curLine;\n\n    case 8232:\n    case 8233:\n      return res(\"\");\n\n    case 56:\n    case 57:\n      if (inTemplate) {\n        return res(null);\n      } else {\n        errors.strictNumericEscape(pos - 1, lineStart, curLine);\n      }\n\n    default:\n      if (ch >= 48 && ch <= 55) {\n        const startPos = pos - 1;\n        const match = input.slice(startPos, pos + 2).match(/^[0-7]+/);\n        let octalStr = match[0];\n        let octal = parseInt(octalStr, 8);\n\n        if (octal > 255) {\n          octalStr = octalStr.slice(0, -1);\n          octal = parseInt(octalStr, 8);\n        }\n\n        pos += octalStr.length - 1;\n        const next = input.charCodeAt(pos);\n\n        if (octalStr !== \"0\" || next === 56 || next === 57) {\n          if (inTemplate) {\n            return res(null);\n          } else {\n            errors.strictNumericEscape(startPos, lineStart, curLine);\n          }\n        }\n\n        return res(String.fromCharCode(octal));\n      }\n\n      return res(String.fromCharCode(ch));\n  }\n}\n\nfunction readHexChar(input, pos, lineStart, curLine, len, forceLen, throwOnInvalid, errors) {\n  const initialPos = pos;\n  let n;\n  ({\n    n,\n    pos\n  } = readInt(input, pos, lineStart, curLine, 16, len, forceLen, false, errors, !throwOnInvalid));\n\n  if (n === null) {\n    if (throwOnInvalid) {\n      errors.invalidEscapeSequence(initialPos, lineStart, curLine);\n    } else {\n      pos = initialPos - 1;\n    }\n  }\n\n  return {\n    code: n,\n    pos\n  };\n}\n\nfunction readInt(input, pos, lineStart, curLine, radix, len, forceLen, allowNumSeparator, errors, bailOnError) {\n  const start = pos;\n  const forbiddenSiblings = radix === 16 ? forbiddenNumericSeparatorSiblings.hex : forbiddenNumericSeparatorSiblings.decBinOct;\n  const isAllowedSibling = radix === 16 ? isAllowedNumericSeparatorSibling.hex : radix === 10 ? isAllowedNumericSeparatorSibling.dec : radix === 8 ? isAllowedNumericSeparatorSibling.oct : isAllowedNumericSeparatorSibling.bin;\n  let invalid = false;\n  let total = 0;\n\n  for (let i = 0, e = len == null ? Infinity : len; i < e; ++i) {\n    const code = input.charCodeAt(pos);\n    let val;\n\n    if (code === 95 && allowNumSeparator !== \"bail\") {\n      const prev = input.charCodeAt(pos - 1);\n      const next = input.charCodeAt(pos + 1);\n\n      if (!allowNumSeparator) {\n        if (bailOnError) return {\n          n: null,\n          pos\n        };\n        errors.numericSeparatorInEscapeSequence(pos, lineStart, curLine);\n      } else if (Number.isNaN(next) || !isAllowedSibling(next) || forbiddenSiblings.has(prev) || forbiddenSiblings.has(next)) {\n        if (bailOnError) return {\n          n: null,\n          pos\n        };\n        errors.unexpectedNumericSeparator(pos, lineStart, curLine);\n      }\n\n      ++pos;\n      continue;\n    }\n\n    if (code >= 97) {\n      val = code - 97 + 10;\n    } else if (code >= 65) {\n      val = code - 65 + 10;\n    } else if (_isDigit(code)) {\n      val = code - 48;\n    } else {\n      val = Infinity;\n    }\n\n    if (val >= radix) {\n      if (val <= 9 && bailOnError) {\n        return {\n          n: null,\n          pos\n        };\n      } else if (val <= 9 && errors.invalidDigit(pos, lineStart, curLine, radix)) {\n        val = 0;\n      } else if (forceLen) {\n        val = 0;\n        invalid = true;\n      } else {\n        break;\n      }\n    }\n\n    ++pos;\n    total = total * radix + val;\n  }\n\n  if (pos === start || len != null && pos - start !== len || invalid) {\n    return {\n      n: null,\n      pos\n    };\n  }\n\n  return {\n    n: total,\n    pos\n  };\n}\n\nfunction readCodePoint(input, pos, lineStart, curLine, throwOnInvalid, errors) {\n  const ch = input.charCodeAt(pos);\n  let code;\n\n  if (ch === 123) {\n    ++pos;\n    ({\n      code,\n      pos\n    } = readHexChar(input, pos, lineStart, curLine, input.indexOf(\"}\", pos) - pos, true, throwOnInvalid, errors));\n    ++pos;\n\n    if (code !== null && code > 0x10ffff) {\n      if (throwOnInvalid) {\n        errors.invalidCodePoint(pos, lineStart, curLine);\n      } else {\n        return {\n          code: null,\n          pos\n        };\n      }\n    }\n  } else {\n    ({\n      code,\n      pos\n    } = readHexChar(input, pos, lineStart, curLine, 4, false, throwOnInvalid, errors));\n  }\n\n  return {\n    code,\n    pos\n  };\n}\n\n//# sourceMappingURL=index.js.map\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QGJhYmVsL2hpZ2hsaWdodEA3LjE4LjY=",
    "content": "/LICENSE\u0004RMIT License\n\nCopyright (c) 2014-present Sebastian McKenzie and other contributors\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n/README.md\u0001?# @babel/highlight\n\n> Syntax highlight JavaScript strings for output in terminals.\n\nSee our website [@babel/highlight](https://babeljs.io/docs/en/babel-highlight) for more information.\n\n## Install\n\nUsing npm:\n\n```sh\nnpm install --save-dev @babel/highlight\n```\n\nor using yarn:\n\n```sh\nyarn add @babel/highlight --dev\n```\n/lib/index.js\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = highlight;\nexports.getChalk = getChalk;\nexports.shouldHighlight = shouldHighlight;\n\nvar _jsTokens = require(\"js-tokens\");\n\nvar _helperValidatorIdentifier = require(\"@babel/helper-validator-identifier\");\n\nvar _chalk = require(\"chalk\");\n\nconst sometimesKeywords = new Set([\"as\", \"async\", \"from\", \"get\", \"of\", \"set\"]);\n\nfunction getDefs(chalk) {\n  return {\n    keyword: chalk.cyan,\n    capitalized: chalk.yellow,\n    jsxIdentifier: chalk.yellow,\n    punctuator: chalk.yellow,\n    number: chalk.magenta,\n    string: chalk.green,\n    regex: chalk.magenta,\n    comment: chalk.grey,\n    invalid: chalk.white.bgRed.bold\n  };\n}\n\nconst NEWLINE = /\\r\\n|[\\n\\r\\u2028\\u2029]/;\nconst BRACKET = /^[()[\\]{}]$/;\nlet tokenize;\n{\n  const JSX_TAG = /^[a-z][\\w-]*$/i;\n\n  const getTokenType = function (token, offset, text) {\n    if (token.type === \"name\") {\n      if ((0, _helperValidatorIdentifier.isKeyword)(token.value) || (0, _helperValidatorIdentifier.isStrictReservedWord)(token.value, true) || sometimesKeywords.has(token.value)) {\n        return \"keyword\";\n      }\n\n      if (JSX_TAG.test(token.value) && (text[offset - 1] === \"<\" || text.slice(offset - 2, offset) == \"</\")) {\n        return \"jsxIdentifier\";\n      }\n\n      if (token.value[0] !== token.value[0].toLowerCase()) {\n        return \"capitalized\";\n      }\n    }\n\n    if (token.type === \"punctuator\" && BRACKET.test(token.value)) {\n      return \"bracket\";\n    }\n\n    if (token.type === \"invalid\" && (token.value === \"@\" || token.value === \"#\")) {\n      return \"punctuator\";\n    }\n\n    return token.type;\n  };\n\n  tokenize = function* (text) {\n    let match;\n\n    while (match = _jsTokens.default.exec(text)) {\n      const token = _jsTokens.matchToToken(match);\n\n      yield {\n        type: getTokenType(token, match.index, text),\n        value: token.value\n      };\n    }\n  };\n}\n\nfunction highlightTokens(defs, text) {\n  let highlighted = \"\";\n\n  for (const {\n    type,\n    value\n  } of tokenize(text)) {\n    const colorize = defs[type];\n\n    if (colorize) {\n      highlighted += value.split(NEWLINE).map(str => colorize(str)).join(\"\\n\");\n    } else {\n      highlighted += value;\n    }\n  }\n\n  return highlighted;\n}\n\nfunction shouldHighlight(options) {\n  return !!_chalk.supportsColor || options.forceColor;\n}\n\nfunction getChalk(options) {\n  return options.forceColor ? new _chalk.constructor({\n    enabled: true,\n    level: 1\n  }) : _chalk;\n}\n\nfunction highlight(code, options = {}) {\n  if (code !== \"\" && shouldHighlight(options)) {\n    const chalk = getChalk(options);\n    const defs = getDefs(chalk);\n    return highlightTokens(defs, code);\n  } else {\n    return code;\n  }\n}/package.json\u0002{\n  \"name\": \"@babel/highlight\",\n  \"version\": \"7.18.6\",\n  \"description\": \"Syntax highlight JavaScript strings for output in terminals.\",\n  \"author\": \"The Babel Team (https://babel.dev/team)\",\n  \"homepage\": \"https://babel.dev/docs/en/next/babel-highlight\",\n  \"license\": \"MIT\",\n  \"publishConfig\": {\n    \"access\": \"public\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/babel/babel.git\",\n    \"directory\": \"packages/babel-highlight\"\n  },\n  \"main\": \"./lib/index.js\",\n  \"dependencies\": {\n    \"@babel/helper-validator-identifier\": \"^7.18.6\",\n    \"chalk\": \"^2.0.0\",\n    \"js-tokens\": \"^4.0.0\"\n  },\n  \"devDependencies\": {\n    \"@types/chalk\": \"^2.0.0\",\n    \"strip-ansi\": \"^4.0.0\"\n  },\n  \"engines\": {\n    \"node\": \">=6.9.0\"\n  },\n  \"type\": \"commonjs\"\n}"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QGJhYmVsL3BhcnNlckA3LjIxLjM=",
    "content": "/README.md\u0001# @babel/parser\n\n> A JavaScript parser\n\nSee our website [@babel/parser](https://babeljs.io/docs/en/babel-parser) for more information or the [issues](https://github.com/babel/babel/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3A%22pkg%3A%20parser%20(babylon)%22+is%3Aopen) associated with this package.\n\n## Install\n\nUsing npm:\n\n```sh\nnpm install --save-dev @babel/parser\n```\n\nor using yarn:\n\n```sh\nyarn add @babel/parser --dev\n```\n/index.cjsotry {\n  module.exports = require(\"./lib/index.cjs\");\n} catch {\n  module.exports = require(\"./lib/index.js\");\n}\n/package.json\u0004{\n  \"name\": \"@babel/parser\",\n  \"version\": \"7.21.3\",\n  \"description\": \"A JavaScript parser\",\n  \"author\": \"The Babel Team (https://babel.dev/team)\",\n  \"homepage\": \"https://babel.dev/docs/en/next/babel-parser\",\n  \"bugs\": \"https://github.com/babel/babel/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3A%22pkg%3A+parser+%28babylon%29%22+is%3Aopen\",\n  \"license\": \"MIT\",\n  \"publishConfig\": {\n    \"access\": \"public\"\n  },\n  \"keywords\": [\n    \"babel\",\n    \"javascript\",\n    \"parser\",\n    \"tc39\",\n    \"ecmascript\",\n    \"@babel/parser\"\n  ],\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/babel/babel.git\",\n    \"directory\": \"packages/babel-parser\"\n  },\n  \"main\": \"./lib/index.js\",\n  \"types\": \"./typings/babel-parser.d.ts\",\n  \"files\": [\n    \"bin\",\n    \"lib\",\n    \"typings/babel-parser.d.ts\",\n    \"index.cjs\"\n  ],\n  \"engines\": {\n    \"node\": \">=6.0.0\"\n  },\n  \"devDependencies\": {\n    \"@babel/code-frame\": \"^7.18.6\",\n    \"@babel/helper-check-duplicate-nodes\": \"^7.18.6\",\n    \"@babel/helper-fixtures\": \"^7.21.0\",\n    \"@babel/helper-string-parser\": \"^7.19.4\",\n    \"@babel/helper-validator-identifier\": \"^7.19.1\",\n    \"charcodes\": \"^0.2.0\"\n  },\n  \"bin\": \"./bin/babel-parser.js\",\n  \"type\": \"commonjs\"\n}/LICENSE\u0004>Copyright (C) 2012-2014 by various contributors (see AUTHORS)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n/CHANGELOG.mdŕ^# Changelog\n\n> **Tags:**\n> - :boom:       [Breaking Change]\n> - :eyeglasses: [Spec Compliance]\n> - :rocket:     [New Feature]\n> - :bug:        [Bug Fix]\n> - :memo:       [Documentation]\n> - :house:      [Internal]\n> - :nail_care:  [Polish]\n\n> Semver Policy: https://github.com/babel/babel/tree/main/packages/babel-parser#semver\n\n_Note: Gaps between patch versions are faulty, broken or test releases._\n\nSee the [Babel Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) for the pre-6.8.0 version Changelog.\n\n## 6.17.1 (2017-05-10)\n\n### :bug: Bug Fix\n * Fix typo in flow spread operator error (Brian Ng)\n * Fixed invalid number literal parsing ([#473](https://github.com/babel/babylon/pull/473)) (Alex Kuzmenko)\n * Fix number parser ([#433](https://github.com/babel/babylon/pull/433)) (Alex Kuzmenko)\n * Ensure non pattern shorthand props are checked for reserved words ([#479](https://github.com/babel/babylon/pull/479)) (Brian Ng)\n * Remove jsx context when parsing arrow functions ([#475](https://github.com/babel/babylon/pull/475)) (Brian Ng)\n * Allow super in class properties ([#499](https://github.com/babel/babylon/pull/499)) (Brian Ng)\n * Allow flow class field to be named constructor ([#510](https://github.com/babel/babylon/pull/510)) (Brian Ng)\n\n## 6.17.0 (2017-04-20)\n\n### :bug: Bug Fix\n * Cherry-pick #418 to 6.x ([#476](https://github.com/babel/babylon/pull/476)) (Sebastian McKenzie)\n * Add support for invalid escapes in tagged templates ([#274](https://github.com/babel/babylon/pull/274)) (Kevin Gibbons)\n * Throw error if new.target is used outside of a function ([#402](https://github.com/babel/babylon/pull/402)) (Brian Ng)\n * Fix parsing of class properties ([#351](https://github.com/babel/babylon/pull/351)) (Kevin Gibbons)\n * Fix parsing yield with dynamicImport ([#383](https://github.com/babel/babylon/pull/383)) (Brian Ng)\n * Ensure consistent start args for parseParenItem ([#386](https://github.com/babel/babylon/pull/386)) (Brian Ng)\n\n## 7.0.0-beta.8 (2017-04-04)\n\n### New Feature\n* Add support for flow type spread (#418) (Conrad Buck)\n* Allow statics in flow interfaces (#427) (Brian Ng)\n\n### Bug Fix\n* Fix predicate attachment to match flow parser (#428) (Brian Ng)\n* Add extra.raw back to JSXText and JSXAttribute (#344) (Alex Rattray)\n* Fix rest parameters with array and objects (#424) (Brian Ng)\n* Fix number parser (#433) (Alex Kuzmenko)\n\n### Docs\n* Fix CONTRIBUTING.md [skip ci] (#432) (Alex Kuzmenko)\n\n### Internal\n* Use babel-register script when running babel smoke tests (#442) (Brian Ng)\n\n## 7.0.0-beta.7 (2017-03-22)\n\n### Spec Compliance\n* Remove babylon plugin for template revision since it's stage-4 (#426) (Henry Zhu)\n\n### Bug Fix\n\n* Fix push-pop logic in flow (#405) (Daniel Tschinder)\n\n## 7.0.0-beta.6 (2017-03-21)\n\n### New Feature\n* Add support for invalid escapes in tagged templates (#274) (Kevin Gibbons)\n\n### Polish\n* Improves error message when super is called outside of constructor (#408) (Arshabh Kumar Agarwal)\n\n### Docs\n\n* [7.0] Moved value field in spec from ObjectMember to ObjectProperty as ObjectMethod's don't have it (#415) [skip ci] (James Browning)\n\n## 7.0.0-beta.5 (2017-03-21)\n\n### Bug Fix\n* Throw error if new.target is used outside of a function (#402) (Brian Ng)\n* Fix parsing of class properties (#351) (Kevin Gibbons)\n\n### Other\n * Test runner: Detect extra property in 'actual' but not in 'expected'. (#407) (Andy)\n * Optimize travis builds (#419) (Daniel Tschinder)\n * Update codecov to 2.0 (#412) (Daniel Tschinder)\n * Fix spec for ClassMethod: It doesn't have a function, it *is* a function. (#406) [skip ci] (Andy)\n * Changed Non-existent RestPattern to RestElement which is what is actually parsed (#409) [skip ci] (James Browning)\n * Upgrade flow to 0.41 (Daniel Tschinder)\n * Fix watch command (#403) (Brian Ng)\n * Update yarn lock (Daniel Tschinder)\n * Fix watch command (#403) (Brian Ng)\n * chore(package): update flow-bin to version 0.41.0 (#395) (greenkeeper[bot])\n * Add estree test for correct order of directives (Daniel Tschinder)\n * Add DoExpression to spec (#364) (Alex Kuzmenko)\n * Mention cloning of repository in CONTRIBUTING.md (#391) [skip ci] (Sumedh Nimkarde)\n * Explain how to run only one test (#389) [skip ci] (Aaron Ang)\n\n ## 7.0.0-beta.4 (2017-03-01)\n\n* Don't consume async when checking for async func decl (#377) (Brian Ng)\n* add `ranges` option [skip ci] (Henry Zhu)\n* Don't parse class properties without initializers when classProperties is disabled and Flow is enabled (#300) (Andrew Levine)\n\n## 7.0.0-beta.3 (2017-02-28)\n\n- [7.0] Change RestProperty/SpreadProperty to RestElement/SpreadElement (#384)\n- Merge changes from 6.x\n\n## 7.0.0-beta.2 (2017-02-20)\n\n- estree: correctly change literals in all cases (#368) (Daniel Tschinder)\n\n## 7.0.0-beta.1 (2017-02-20)\n\n- Fix negative number literal typeannotations (#366) (Daniel Tschinder)\n- Update contributing with more test info [skip ci] (#355) (Brian Ng)\n\n## 7.0.0-beta.0 (2017-02-15)\n\n- Reintroduce Variance node (#333) (Daniel Tschinder)\n- Rename NumericLiteralTypeAnnotation to NumberLiteralTypeAnnotation (#332) (Charles Pick)\n- [7.0] Remove ForAwaitStatement, add await flag to ForOfStatement (#349) (Brandon Dail)\n- chore(package): update ava to version 0.18.0 (#345) (greenkeeper[bot])\n- chore(package): update babel-plugin-istanbul to version 4.0.0 (#350) (greenkeeper[bot])\n- Change location of ObjectTypeIndexer to match flow (#228) (Daniel Tschinder)\n- Rename flow AST Type ExistentialTypeParam to ExistsTypeAnnotation (#322) (Toru Kobayashi)\n- Revert \"Temporary rollback for erroring on trailing comma with spread (#154)\" (#290) (Daniel Tschinder)\n- Remove classConstructorCall plugin (#291) (Brian Ng)\n- Update yarn.lock (Daniel Tschinder)\n- Update cross-env to 3.x (Daniel Tschinder)\n- [7.0] Remove node 0.10, 0.12 and 5 from Travis (#284) (Sergey Rubanov)\n- Remove `String.fromCodePoint` shim (#279) (Mathias Bynens)\n\n## 6.16.1 (2017-02-23)\n\n### :bug: Regression\n\n- Revert \"Fix export default async function to be FunctionDeclaration\" ([#375](https://github.com/babel/babylon/pull/375))\n\nNeed to modify Babel for this AST node change, so moving to 7.0.\n\n- Revert \"Don't parse class properties without initializers when classProperties plugin is disabled, and Flow is enabled\" ([#376](https://github.com/babel/babylon/pull/376))\n\n[react-native](https://github.com/facebook/react-native/issues/12542) broke with this so we reverted.\n\n## 6.16.0 (2017-02-23)\n\n### :rocket: New Feature\n\n***ESTree*** compatibility as plugin ([#277](https://github.com/babel/babylon/pull/277)) (Daniel Tschinder)\n\nWe finally introduce a new compatibility layer for ESTree. To put babylon into ESTree-compatible mode the new plugin `estree` can be enabled. In this mode the parser will output an AST that is compliant to the specs of [ESTree](https://github.com/estree/estree/)\n\nWe highly recommend everyone who uses babylon outside of babel to use this plugin. This will make it much easier for users to switch between different ESTree-compatible parsers. We so far tested several projects with different parsers and exchanged their parser to babylon and in nearly all cases it worked out of the box. Some other estree-compatible parsers include `acorn`, `esprima`, `espree`, `flow-parser`, etc.\n\nTo enable `estree` mode simply add the plugin in the config:\n```json\n{\n  \"plugins\": [ \"estree\" ]\n}\n```\n\nIf you want to migrate your project from non-ESTree mode to ESTree, have a look at our [Readme](https://github.com/babel/babylon/#output), where all deviations are mentioned.\n\nAdd a parseExpression public method ([#213](https://github.com/babel/babylon/pull/213)) (jeromew)\n\nBabylon exports a new function to parse a single expression\n\n```js\nimport { parseExpression } from 'babylon';\n\nconst ast = parseExpression('x || y && z', options);\n```\n\nThe returned AST will only consist of the expression. The options are the same as for `parse()`\n\nAdd startLine option ([#346](https://github.com/babel/babylon/pull/346)) (Raphael Mu)\n\nA new option was added to babylon allowing to change the initial linenumber for the first line which is usually `1`.\nChanging this for example to `100` will make line `1` of the input source to be marked as line `100`, line `2` as `101`, line `3` as `102`, ...\n\nFunction predicate declaration ([#103](https://github.com/babel/babylon/pull/103)) (Panagiotis Vekris)\n\nAdded support for function predicates which flow introduced in version 0.33.0\n\n```js\ndeclare function is_number(x: mixed): boolean %checks(typeof x === \"number\");\n```\n\nAllow imports in declare module ([#315](https://github.com/babel/babylon/pull/315)) (Daniel Tschinder)\n\nAdded support for imports within module declarations which flow introduced in version 0.37.0\n\n```js\ndeclare module \"C\" {\n  import type { DT } from \"D\";\n  declare export type CT = { D: DT };\n}\n```\n\n### :eyeglasses: Spec Compliance\n\nForbid semicolons after decorators in classes ([#352](https://github.com/babel/babylon/pull/352)) (Kevin Gibbons)\n\nThis example now correctly throws an error when there is a semicolon after the decorator:\n\n```js\nclass A {\n@a;\nfoo(){}\n}\n```\n\nKeywords are not allowed as local specifier ([#307](https://github.com/babel/babylon/pull/307)) (Daniel Tschinder)\n\nUsing keywords in imports is not allowed anymore:\n\n```js\nimport { default } from \"foo\";\nimport { a as debugger } from \"foo\";\n```\n\nDo not allow overwritting of primitive types ([#314](https://github.com/babel/babylon/pull/314)) (Daniel Tschinder)\n\nIn flow it is now forbidden to overwrite the primitive types `\"any\"`, `\"mixed\"`, `\"empty\"`, `\"bool\"`, `\"boolean\"`, `\"number\"`, `\"string\"`, `\"void\"` and `\"null\"` with your own type declaration.\n\nDisallow import type { type a } from … ([#305](https://github.com/babel/babylon/pull/305)) (Daniel Tschinder)\n\nThe following code now correctly throws an error\n\n```js\nimport type { type a } from \"foo\";\n```\n\nDon't parse class properties without initializers when classProperties is disabled and Flow is enabled ([#300](https://github.com/babel/babylon/pull/300)) (Andrew Levine)\n\nEnsure that you enable the `classProperties` plugin in order to enable correct parsing of class properties. Prior to this version it was possible to parse them by enabling the `flow` plugin but this was not intended the behaviour.\n\nIf you enable the flow plugin you can only define the type of the class properties, but not initialize them.\n\nFix export default async function to be FunctionDeclaration ([#324](https://github.com/babel/babylon/pull/324)) (Daniel Tschinder)\n\nParsing the following code now returns a `FunctionDeclaration` AST node instead of `FunctionExpression`.\n\n```js\nexport default async function bar() {};\n```\n\n### :nail_care: Polish\n\nImprove error message on attempt to destructure named import ([#288](https://github.com/babel/babylon/pull/288)) (Brian Ng)\n\n### :bug: Bug Fix\n\nFix negative number literal typeannotations ([#366](https://github.com/babel/babylon/pull/366)) (Daniel Tschinder)\n\nEnsure takeDecorators is called on exported class ([#358](https://github.com/babel/babylon/pull/358)) (Brian Ng)\n\nESTree: correctly change literals in all cases ([#368](https://github.com/babel/babylon/pull/368)) (Daniel Tschinder)\n\nCorrectly convert RestProperty to Assignable ([#339](https://github.com/babel/babylon/pull/339)) (Daniel Tschinder)\n\nFix #321 by allowing question marks in type params ([#338](https://github.com/babel/babylon/pull/338)) (Daniel Tschinder)\n\nFix #336 by correctly setting arrow-param ([#337](https://github.com/babel/babylon/pull/337)) (Daniel Tschinder)\n\nFix parse error when destructuring `set` with default value ([#317](https://github.com/babel/babylon/pull/317)) (Brian Ng)\n\nFix ObjectTypeCallProperty static ([#298](https://github.com/babel/babylon/pull/298)) (Dan Harper)\n\n\n### :house: Internal\n\nFix generator-method-with-computed-name spec ([#360](https://github.com/babel/babylon/pull/360)) (Alex Rattray)\n\nFix flow type-parameter-declaration test with unintended semantic ([#361](https://github.com/babel/babylon/pull/361)) (Alex Rattray)\n\nCleanup and splitup parser functions ([#295](https://github.com/babel/babylon/pull/295)) (Daniel Tschinder)\n\nchore(package): update flow-bin to version 0.38.0 ([#313](https://github.com/babel/babylon/pull/313)) (greenkeeper[bot])\n\nCall inner function instead of 1:1 copy to plugin ([#294](https://github.com/babel/babylon/pull/294)) (Daniel Tschinder)\n\nUpdate eslint-config-babel to the latest version 🚀 ([#299](https://github.com/babel/babylon/pull/299)) (greenkeeper[bot])\n\nUpdate eslint-config-babel to the latest version 🚀 ([#293](https://github.com/babel/babylon/pull/293)) (greenkeeper[bot])\n\ndevDeps: remove eslint-plugin-babel ([#292](https://github.com/babel/babylon/pull/292)) (Kai Cataldo)\n\nCorrect indent eslint rule config ([#276](https://github.com/babel/babylon/pull/276)) (Daniel Tschinder)\n\nFail tests that have expected.json and throws-option ([#285](https://github.com/babel/babylon/pull/285)) (Daniel Tschinder)\n\n### :memo: Documentation\n\nUpdate contributing with more test info [skip ci] ([#355](https://github.com/babel/babylon/pull/355)) (Brian Ng)\n\nUpdate API documentation ([#330](https://github.com/babel/babylon/pull/330)) (Timothy Gu)\n\nAdded keywords to package.json ([#323](https://github.com/babel/babylon/pull/323)) (Dmytro)\n\nAST spec: fix casing of `RegExpLiteral` ([#318](https://github.com/babel/babylon/pull/318)) (Mathias Bynens)\n\n## 6.15.0 (2017-01-10)\n\n### :eyeglasses: Spec Compliance\n\nAdd support for Flow shorthand import type ([#267](https://github.com/babel/babylon/pull/267)) (Jeff Morrison)\n\nThis change implements flows new shorthand import syntax\nand where previously you had to write this code:\n\n```js\nimport {someValue} from \"blah\";\nimport type {someType} from \"blah\";\nimport typeof {someOtherValue} from \"blah\";\n```\n\nyou can now write it like this:\n\n```js\nimport {\n  someValue,\n  type someType,\n  typeof someOtherValue,\n} from \"blah\";\n```\n\nFor more information look at [this](https://github.com/facebook/flow/pull/2890) pull request.\n\nflow: allow leading pipes in all positions ([#256](https://github.com/babel/babylon/pull/256)) (Vladimir Kurchatkin)\n\nThis change now allows a leading pipe everywhere types can be used:\n```js\nvar f = (x): | 1 | 2 => 1;\n```\n\nThrow error when exporting non-declaration ([#241](https://github.com/babel/babylon/pull/241)) (Kai Cataldo)\n\nPreviously babylon parsed the following exports, although they are not valid:\n```js\nexport typeof foo;\nexport new Foo();\nexport function() {};\nexport for (;;);\nexport while(foo);\n```\n\n### :bug: Bug Fix\n\nDon't set inType flag when parsing property names ([#266](https://github.com/babel/babylon/pull/266)) (Vladimir Kurchatkin)\n\nThis fixes parsing of this case:\n\n```js\nconst map = {\n  [age <= 17] : 'Too young'\n};\n```\n\nFix source location for JSXEmptyExpression nodes (fixes #248) ([#249](https://github.com/babel/babylon/pull/249)) (James Long)\n\nThe following case produced an invalid AST\n```js\n<div>{/* foo */}</div>\n```\n\nUse fromCodePoint to convert high value unicode entities ([#243](https://github.com/babel/babylon/pull/243)) (Ryan Duffy)\n\nWhen high value unicode entities (e.g. 💩) were used in the input source code they are now correctly encoded in the resulting AST.\n\nRename folder to avoid Windows-illegal characters ([#281](https://github.com/babel/babylon/pull/281)) (Ryan Plant)\n\nAllow this.state.clone() when parsing decorators ([#262](https://github.com/babel/babylon/pull/262)) (Alex Rattray)\n\n### :house: Internal\n\nUser external-helpers ([#254](https://github.com/babel/babylon/pull/254)) (Daniel Tschinder)\n\nAdd watch script for dev ([#234](https://github.com/babel/babylon/pull/234)) (Kai Cataldo)\n\nFreeze current plugins list for \"*\" option, and remove from README.md ([#245](https://github.com/babel/babylon/pull/245)) (Andrew Levine)\n\nPrepare tests for multiple fixture runners. ([#240](https://github.com/babel/babylon/pull/240)) (Daniel Tschinder)\n\nAdd some test coverage for decorators stage-0 plugin ([#250](https://github.com/babel/babylon/pull/250)) (Andrew Levine)\n\nRefactor tokenizer types file ([#263](https://github.com/babel/babylon/pull/263)) (Sven SAULEAU)\n\nUpdate eslint-config-babel to the latest version 🚀 ([#273](https://github.com/babel/babylon/pull/273)) (greenkeeper[bot])\n\nchore(package): update rollup to version 0.41.0 ([#272](https://github.com/babel/babylon/pull/272)) (greenkeeper[bot])\n\nchore(package): update flow-bin to version 0.37.0 ([#255](https://github.com/babel/babylon/pull/255)) (greenkeeper[bot])\n\n## 6.14.1 (2016-11-17)\n\n### :bug: Bug Fix\n\nAllow `\"plugins\": [\"*\"]` ([#229](https://github.com/babel/babylon/pull/229)) (Daniel Tschinder)\n\n```js\n{\n  \"plugins\": [\"*\"]\n}\n```\n\nWill include all parser plugins instead of specifying each one individually. Useful for tools like babel-eslint, jscodeshift, and ast-explorer.\n\n## 6.14.0 (2016-11-16)\n\n### :eyeglasses: Spec Compliance\n\nThrow error for reserved words `enum` and `await` ([#195](https://github.com/babel/babylon/pull/195)) (Kai Cataldo)\n\n[11.6.2.2 Future Reserved Words](http://www.ecma-international.org/ecma-262/6.0/#sec-future-reserved-words)\n\nBabylon will throw for more reserved words such as `enum` or `await` (in strict mode).\n\n```\nclass enum {} // throws\nclass await {} // throws in strict mode (module)\n```\n\nOptional names for function types and object type indexers ([#197](https://github.com/babel/babylon/pull/197)) (Gabe Levi)\n\nSo where you used to have to write\n\n```js\ntype A = (x: string, y: boolean) => number;\ntype B = (z: string) => number;\ntype C = { [key: string]: number };\n```\n\nyou can now write (with flow 0.34.0)\n\n```js\ntype A = (string, boolean) => number;\ntype B = string => number;\ntype C = { [string]: number };\n```\n\nParse flow nested array type annotations like `number[][]` ([#219](https://github.com/babel/babylon/pull/219)) (Bernhard Häussner)\n\nSupports these form now of specifying array types:\n\n```js\nvar a: number[][][][];\nvar b: string[][];\n```\n\n### :bug: Bug Fix\n\nCorrectly eat semicolon at the end of `DelcareModuleExports` ([#223](https://github.com/babel/babylon/pull/223))  (Daniel Tschinder)\n\n```\ndeclare module \"foo\" { declare module.exports: number }\ndeclare module \"foo\" { declare module.exports: number; }  // also allowed now\n```\n\n### :house: Internal\n\n * Count Babel tests towards Babylon code coverage ([#182](https://github.com/babel/babylon/pull/182)) (Moti Zilberman)\n * Fix strange line endings ([#214](https://github.com/babel/babylon/pull/214)) (Thomas Grainger)\n * Add node 7 (Daniel Tschinder)\n * chore(package): update flow-bin to version 0.34.0 ([#204](https://github.com/babel/babylon/pull/204)) (Greenkeeper)\n\n## v6.13.1 (2016-10-26)\n\n### :nail_care: Polish\n\n- Use rollup for bundling to speed up startup time ([#190](https://github.com/babel/babylon/pull/190)) ([@drewml](https://github.com/DrewML))\n\n```js\nconst babylon = require('babylon');\nconst ast = babylon.parse('var foo = \"lol\";');\n```\n\nWith that test case, there was a ~95ms savings by removing the need for node to build/traverse the dependency graph.\n\n**Without bundling**\n![image](https://cloud.githubusercontent.com/assets/5233399/19420264/3133497e-93ad-11e6-9a6a-2da59c4f5c13.png)\n\n**With bundling**\n![image](https://cloud.githubusercontent.com/assets/5233399/19420267/388f556e-93ad-11e6-813e-7c5c396be322.png)\n\n- add clean command [skip ci] ([#201](https://github.com/babel/babylon/pull/201)) (Henry Zhu)\n- add ForAwaitStatement (async generator already added) [skip ci] ([#196](https://github.com/babel/babylon/pull/196)) (Henry Zhu)\n\n## v6.13.0 (2016-10-21)\n\n### :eyeglasses: Spec Compliance\n\nProperty variance type annotations for Flow plugin ([#161](https://github.com/babel/babylon/pull/161)) (Sam Goldman)\n\n> See https://flowtype.org/docs/variance.html for more information\n\n```js\ntype T = { +p: T };\ninterface T { -p: T };\ndeclare class T { +[k:K]: V };\nclass T { -[k:K]: V };\nclass C2 { +p: T = e };\n```\n\nRaise error on duplicate definition of __proto__ ([#183](https://github.com/babel/babylon/pull/183)) (Moti Zilberman)\n\n```js\n({ __proto__: 1, __proto__: 2 }) // Throws an error now\n```\n\n### :bug: Bug Fix\n\nFlow: Allow class properties to be named `static` ([#184](https://github.com/babel/babylon/pull/184)) (Moti Zilberman)\n\n```js\ndeclare class A {\n  static: T;\n}\n```\n\nAllow \"async\" as identifier for object literal property shorthand ([#187](https://github.com/babel/babylon/pull/187)) (Andrew Levine)\n\n```js\nvar foo = { async, bar };\n```\n\n### :nail_care: Polish\n\nFix flowtype and add inType to state ([#189](https://github.com/babel/babylon/pull/189)) (Daniel Tschinder)\n\n> This improves the performance slightly (because of hidden classes)\n\n### :house: Internal\n\nFix .gitattributes line ending setting ([#191](https://github.com/babel/babylon/pull/191)) (Moti Zilberman)\n\nIncrease test coverage ([#175](https://github.com/babel/babylon/pull/175) (Moti Zilberman)\n\nReadd missin .eslinignore for IDEs (Daniel Tschinder)\n\nError on missing expected.json fixture in CI ([#188](https://github.com/babel/babylon/pull/188)) (Moti Zilberman)\n\nAdd .gitattributes and .editorconfig for LF line endings ([#179](https://github.com/babel/babylon/pull/179)) (Moti Zilberman)\n\nFixes two tests that are failing after the merge of #172 ([#177](https://github.com/babel/babylon/pull/177)) (Moti Zilberman)\n\n## v6.12.0 (2016-10-14)\n\n### :eyeglasses: Spec Compliance\n\nImplement import() syntax ([#163](https://github.com/babel/babylon/pull/163)) (Jordan Gensler)\n\n#### Dynamic Import\n\n- Proposal Repo: https://github.com/domenic/proposal-dynamic-import\n- Championed by [@domenic](https://github.com/domenic)\n- stage-2\n- [sept-28 tc39 notes](https://github.com/rwaldron/tc39-notes/blob/master/es7/2016-09/sept-28.md#113a-import)\n\n> This repository contains a proposal for adding a \"function-like\" import() module loading syntactic form to JavaScript\n\n```js\nimport(`./section-modules/${link.dataset.entryModule}.js`)\n.then(module => {\n  module.loadPageInto(main);\n})\n```\n\nAdd EmptyTypeAnnotation ([#171](https://github.com/babel/babylon/pull/171)) (Sam Goldman)\n\n#### EmptyTypeAnnotation\n\nJust wasn't covered before.\n\n```js\ntype T = empty;\n```\n\n### :bug: Bug Fix\n\nFix crash when exporting with destructuring and sparse array ([#170](https://github.com/babel/babylon/pull/170)) (Jeroen Engels)\n\n```js\n// was failing due to sparse array\nexport const { foo: [ ,, qux7 ] } = bar;\n```\n\nAllow keyword in Flow object declaration property names with type parameters ([#146](https://github.com/babel/babylon/pull/146)) (Dan Harper)\n\n```js\ndeclare class X {\n  foobar<T>(): void;\n  static foobar<T>(): void;\n}\n```\n\nAllow keyword in object/class property names with Flow type parameters ([#145](https://github.com/babel/babylon/pull/145)) (Dan Harper)\n\n```js\nclass Foo {\n  delete<T>(item: T): T {\n    return item;\n  }\n}\n```\n\nAllow typeAnnotations for yield expressions ([#174](https://github.com/babel/babylon/pull/174))) (Daniel Tschinder)\n\n```js\nfunction *foo() {\n  const x = (yield 5: any);\n}\n```\n\n### :nail_care: Polish\n\nAnnotate more errors with expected token ([#172](https://github.com/babel/babylon/pull/172))) (Moti Zilberman)\n\n```js\n// Unexpected token, expected ; (1:6)\n{ set 1 }\n```\n\n### :house: Internal\n\nRemove kcheck ([#173](https://github.com/babel/babylon/pull/173)))  (Daniel Tschinder)\n\nAlso run flow, linting, babel tests on separate instances (add back node 0.10)\n\n## v6.11.6 (2016-10-12)\n\n### :bug: Bug Fix/Regression\n\nFix crash when exporting with destructuring and sparse array ([#170](https://github.com/babel/babylon/pull/170)) (Jeroen Engels)\n\n```js\n// was failing with `Cannot read property 'type' of null` because of null identifiers\nexport const { foo: [ ,, qux7 ] } = bar;\n```\n\n## v6.11.5 (2016-10-12)\n\n### :eyeglasses: Spec Compliance\n\nFix: Check for duplicate named exports in exported destructuring assignments ([#144](https://github.com/babel/babylon/pull/144)) (Kai Cataldo)\n\n```js\n// `foo` has already been exported. Exported identifiers must be unique. (2:20)\nexport function foo() {};\nexport const { a: [{foo}] } = bar;\n```\n\nFix: Check for duplicate named exports in exported rest elements/properties ([#164](https://github.com/babel/babylon/pull/164)) (Kai Cataldo)\n\n```js\n// `foo` has already been exported. Exported identifiers must be unique. (2:22)\nexport const foo = 1;\nexport const [bar, ...foo] = baz;\n```\n\n### :bug: Bug Fix\n\nFix: Allow identifier `async` for default param in arrow expression ([#165](https://github.com/babel/babylon/pull/165)) (Kai Cataldo)\n\n```js\n// this is ok now\nconst test = ({async = true}) => {};\n```\n\n### :nail_care: Polish\n\nBabylon will now print out the token it's expecting if there's a `SyntaxError` ([#150](https://github.com/babel/babylon/pull/150)) (Daniel Tschinder)\n\n```bash\n# So in the case of a missing ending curly (`}`)\nModule build failed: SyntaxError: Unexpected token, expected } (30:0)\n  28 |   }\n  29 |\n> 30 |\n     | ^\n```\n\n## v6.11.4 (2016-10-03)\n\nTemporary rollback for erroring on trailing comma with spread (#154) (Henry Zhu)\n\n## v6.11.3 (2016-10-01)\n\n### :eyeglasses: Spec Compliance\n\nAdd static errors for object rest (#149) ([@danez](https://github.com/danez))\n\n> https://github.com/sebmarkbage/ecmascript-rest-spread\n\nObject rest copies the *rest* of properties from the right hand side `obj` starting from the left to right.\n\n```js\nlet { x, y, ...z } =  { x: 1, y: 2, z: 3 };\n// x = 1\n// y = 2\n// z = { z: 3 }\n```\n\n#### New Syntax Errors:\n\n**SyntaxError**: The rest element has to be the last element when destructuring (1:10)\n```bash\n> 1 | let { ...x, y, z } = { x: 1, y: 2, z: 3};\n    |           ^\n# Previous behavior:\n# x = { x: 1, y: 2, z: 3 }\n# y = 2\n# z = 3\n```\n\nBefore, this was just a more verbose way of shallow copying `obj` since it doesn't actually do what you think.\n\n**SyntaxError**: Cannot have multiple rest elements when destructuring (1:13)\n\n```bash\n> 1 | let { x, ...y, ...z } = { x: 1, y: 2, z: 3};\n    |              ^\n# Previous behavior:\n# x = 1\n# y = { y: 2, z: 3 }\n# z = { y: 2, z: 3 }\n```\n\nBefore y and z would just be the same value anyway so there is no reason to need to have both.\n\n**SyntaxError**: A trailing comma is not permitted after the rest element (1:16)\n\n```js\nlet { x, y, ...z, } = obj;\n```\n\nThe rationale for this is that the use case for trailing comma is that you can add something at the end without affecting the line above. Since a RestProperty always has to be the last property it doesn't make sense.\n\n---\n\nget / set are valid property names in default assignment (#142) ([@jezell](https://github.com/jezell))\n\n```js\n// valid\nfunction something({ set = null, get = null }) {}\n```\n\n## v6.11.2 (2016-09-23)\n\n### Bug Fix\n\n- [#139](https://github.com/babel/babylon/issues/139) Don't do the duplicate check if not an identifier (#140) @hzoo\n\n```js\n// regression with duplicate export check\nSyntaxError: ./typography.js: `undefined` has already been exported. Exported identifiers must be unique. (22:13)\n  20 |\n  21 | export const { rhythm } = typography;\n> 22 | export const { TypographyStyle } = typography\n```\n\nBail out for now, and make a change to account for destructuring in the next release.\n\n## 6.11.1 (2016-09-22)\n\n### Bug Fix\n- [#137](https://github.com/babel/babylon/pull/137) - Fix a regression with duplicate exports - it was erroring on all keys in `Object.prototype`. @danez\n\n```javascript\nexport toString from './toString';\n```\n\n```bash\n`toString` has already been exported. Exported identifiers must be unique. (1:7)\n> 1 | export toString from './toString';\n    |        ^\n  2 |\n```\n\n## 6.11.0 (2016-09-22)\n\n### Spec Compliance (will break CI)\n\n- Disallow duplicate named exports ([#107](https://github.com/babel/babylon/pull/107)) @kaicataldo\n\n```js\n// Only one default export allowed per module. (2:9)\nexport default function() {};\nexport { foo as default };\n\n// Only one default export allowed per module. (2:0)\nexport default {};\nexport default function() {};\n\n// `Foo` has already been exported. Exported identifiers must be unique. (2:0)\nexport { Foo };\nexport class Foo {};\n```\n\n### New Feature (Syntax)\n\n- Add support for computed class property names ([#121](https://github.com/babel/babylon/pull/121)) @motiz88\n\n```js\n// AST\ninterface ClassProperty <: Node {\n  type: \"ClassProperty\";\n  key: Identifier;\n  value: Expression;\n  computed: boolean; // added\n}\n```\n\n```js\n// with \"plugins\": [\"classProperties\"]\nclass Foo {\n  [x]\n  ['y']\n}\n\nclass Bar {\n  [p]\n  [m] () {}\n}\n ```\n\n### Bug Fix\n\n- Fix `static` property falling through in the declare class Flow AST ([#135](https://github.com/babel/babylon/pull/135)) @danharper\n\n```js\ndeclare class X {\n    a: number;\n    static b: number; // static\n    c: number; // this was being marked as static in the AST as well\n}\n```\n\n### Polish\n\n- Rephrase \"assigning/binding to rvalue\" errors to include context ([#119](https://github.com/babel/babylon/pull/119)) @motiz88\n\n```js\n// Used to error with:\n// SyntaxError: Assigning to rvalue (1:0)\n\n// Now:\n// Invalid left-hand side in assignment expression (1:0)\n3 = 4\n\n// Invalid left-hand side in for-in statement (1:5)\nfor (+i in {});\n```\n\n### Internal\n\n- Fix call to `this.parseMaybeAssign` with correct arguments ([#133](https://github.com/babel/babylon/pull/133)) @danez\n- Add semver note to changelog ([#131](https://github.com/babel/babylon/pull/131)) @hzoo\n\n## 6.10.0 (2016-09-19)\n\n> We plan to include some spec compliance bugs in patch versions. An example was the multiple default exports issue.\n\n### Spec Compliance\n\n* Implement ES2016 check for simple parameter list in strict mode ([#106](https://github.com/babel/babylon/pull/106)) (Timothy Gu)\n\n> It is a Syntax Error if ContainsUseStrict of FunctionBody is true and IsSimpleParameterList of FormalParameters is false. https://tc39.github.io/ecma262/2016/#sec-function-definitions-static-semantics-early-errors\n\nMore Context: [tc39-notes](https://github.com/rwaldron/tc39-notes/blob/master/es7/2015-07/july-29.md#611-the-scope-of-use-strict-with-respect-to-destructuring-in-parameter-lists)\n\nFor example:\n\n```js\n// this errors because it uses destructuring and default parameters\n// in a function with a \"use strict\" directive\nfunction a([ option1, option2 ] = []) {\n  \"use strict\";\n}\n ```\n\nThe solution would be to use a top level \"use strict\" or to remove the destructuring or default parameters when using a function + \"use strict\" or to.\n\n### New Feature\n\n* Exact object type annotations for Flow plugin ([#104](https://github.com/babel/babylon/pull/104)) (Basil Hosmer)\n\nAdded to flow in https://github.com/facebook/flow/commit/c710c40aa2a115435098d6c0dfeaadb023cd39b8\n\nLooks like:\n\n```js\nvar a : {| x: number, y: string |} = { x: 0, y: 'foo' };\n```\n\n### Bug Fixes\n\n* Include `typeParameter` location in `ArrowFunctionExpression` ([#126](https://github.com/babel/babylon/pull/126)) (Daniel Tschinder)\n* Error on invalid flow type annotation with default assignment ([#122](https://github.com/babel/babylon/pull/122)) (Dan Harper)\n* Fix Flow return types on arrow functions ([#124](https://github.com/babel/babylon/pull/124)) (Dan Harper)\n\n### Misc\n\n* Add tests for export extensions ([#127](https://github.com/babel/babylon/pull/127)) (Daniel Tschinder)\n* Fix Contributing guidelines [skip ci] (Daniel Tschinder)\n\n## 6.9.2 (2016-09-09)\n\nThe only change is to remove the `babel-runtime` dependency by compiling with Babel's ES2015 loose mode. So using babylon standalone should be smaller.\n\n## 6.9.1 (2016-08-23)\n\nThis release contains mainly small bugfixes but also updates babylons default mode to es2017. The features for `exponentiationOperator`, `asyncFunctions` and `trailingFunctionCommas` which previously needed to be activated via plugin are now enabled by default and the plugins are now no-ops.\n\n### Bug Fixes\n\n- Fix issues with default object params in async functions ([#96](https://github.com/babel/babylon/pull/96)) @danez\n- Fix issues with flow-types and async function ([#95](https://github.com/babel/babylon/pull/95)) @danez\n- Fix arrow functions with destructuring, types & default value ([#94](https://github.com/babel/babylon/pull/94)) @danharper\n- Fix declare class with qualified type identifier ([#97](https://github.com/babel/babylon/pull/97)) @danez\n- Remove exponentiationOperator, asyncFunctions, trailingFunctionCommas plugins and enable them by default ([#98](https://github.com/babel/babylon/pull/98)) @danez\n\n## 6.9.0 (2016-08-16)\n\n### New syntax support\n\n- Add JSX spread children ([#42](https://github.com/babel/babylon/pull/42)) @calebmer\n\n(Be aware that React is not going to support this syntax)\n\n```js\n<div>\n  {...todos.map(todo => <Todo key={todo.id} todo={todo}/>)}\n</div>\n```\n\n- Add support for declare module.exports ([#72](https://github.com/babel/babylon/pull/72)) @danez\n\n```js\ndeclare module \"foo\" {\n  declare module.exports: {}\n}\n```\n\n### New Features\n\n- If supplied, attach filename property to comment node loc. ([#80](https://github.com/babel/babylon/pull/80)) @divmain\n- Add identifier name to node loc field ([#90](https://github.com/babel/babylon/pull/90)) @kittens\n\n### Bug Fixes\n\n- Fix exponential operator to behave according to spec ([#75](https://github.com/babel/babylon/pull/75)) @danez\n- Fix lookahead to not add comments to arrays which are not cloned ([#76](https://github.com/babel/babylon/pull/76)) @danez\n- Fix accidental fall-through in Flow type parsing. ([#82](https://github.com/babel/babylon/pull/82)) @xiemaisi\n- Only allow declares inside declare module ([#73](https://github.com/babel/babylon/pull/73)) @danez\n- Small fix for parsing type parameter declarations ([#83](https://github.com/babel/babylon/pull/83)) @gabelevi\n- Fix arrow param locations with flow types ([#57](https://github.com/babel/babylon/pull/57)) @danez\n- Fixes SyntaxError position with flow optional type ([#65](https://github.com/babel/babylon/pull/65)) @danez\n\n### Internal\n\n- Add codecoverage to tests @danez\n- Fix tests to not save expected output if we expect the test to fail @danez\n- Make a shallow clone of babel for testing @danez\n- chore(package): update cross-env to version 2.0.0 ([#77](https://github.com/babel/babylon/pull/77)) @greenkeeperio-bot\n- chore(package): update ava to version 0.16.0 ([#86](https://github.com/babel/babylon/pull/86)) @greenkeeperio-bot\n- chore(package): update babel-plugin-istanbul to version 2.0.0 ([#89](https://github.com/babel/babylon/pull/89)) @greenkeeperio-bot\n- chore(package): update nyc to version 8.0.0 ([#88](https://github.com/babel/babylon/pull/88)) @greenkeeperio-bot\n\n## 6.8.4 (2016-07-06)\n\n### Bug Fixes\n\n- Fix the location of params, when flow and default value used ([#68](https://github.com/babel/babylon/pull/68)) @danez\n\n## 6.8.3 (2016-07-02)\n\n### Bug Fixes\n\n- Fix performance regression introduced in 6.8.2 with conditionals ([#63](https://github.com/babel/babylon/pull/63)) @danez\n\n## 6.8.2 (2016-06-24)\n\n### Bug Fixes\n\n- Fix parse error with yielding jsx elements in generators `function* it() { yield <a></a>; }` ([#31](https://github.com/babel/babylon/pull/31)) @eldereal\n- When cloning nodes do not clone its comments ([#24](https://github.com/babel/babylon/pull/24)) @danez\n- Fix parse errors when using arrow functions with an spread element and return type `(...props): void => {}` ([#10](https://github.com/babel/babylon/pull/10)) @danez\n- Fix leading comments added from previous node ([#23](https://github.com/babel/babylon/pull/23)) @danez\n- Fix parse errors with flow's optional arguments `(arg?) => {}` ([#19](https://github.com/babel/babylon/pull/19)) @danez\n- Support negative numeric type literals @kittens\n- Remove line terminator restriction after await keyword @kittens\n- Remove grouped type arrow restriction as it seems flow no longer has it @kittens\n- Fix parse error with generic methods that have the name `get` or `set` `class foo { get() {} }` ([#55](https://github.com/babel/babylon/pull/55)) @vkurchatkin\n- Fix parse error with arrow functions that have flow type parameter declarations `<T>(x: T): T => x;` ([#54](https://github.com/babel/babylon/pull/54)) @gabelevi\n\n### Documentation\n\n- Document AST differences from ESTree ([#41](https://github.com/babel/babylon/pull/41)) @nene\n- Move ast spec from babel/babel ([#46](https://github.com/babel/babylon/pull/46)) @hzoo\n\n### Internal\n\n- Enable skipped tests ([#16](https://github.com/babel/babylon/pull/16)) @danez\n- Add script to test latest version of babylon with babel ([#21](https://github.com/babel/babylon/pull/21)) @danez\n- Upgrade test runner ava @kittens\n- Add missing generate-identifier-regex script @kittens\n- Rename parser context types @kittens\n- Add node v6 to travis testing @hzoo\n- Update to Unicode v9 ([#45](https://github.com/babel/babylon/pull/45)) @mathiasbynens\n\n## 6.8.1 (2016-06-06)\n\n### New Feature\n\n- Parse type parameter declarations with defaults like `type Foo<T = string> = T`\n\n### Bug Fixes\n- Type parameter declarations need 1 or more type parameters.\n- The existential type `*` is not a valid type parameter.\n- The existential type `*` is a primary type\n\n### Spec Compliance\n- The param list for type parameter declarations now consists of `TypeParameter` nodes\n- New `TypeParameter` AST Node (replaces using the `Identifier` node before)\n\n```\ninterface TypeParameter <: Node {\n  bound: TypeAnnotation;\n  default: TypeAnnotation;\n  name: string;\n  variance: \"plus\" | \"minus\";\n}\n```\n\n## 6.8.0 (2016-05-02)\n\n#### New Feature\n\n##### Parse Method Parameter Decorators ([#12](https://github.com/babel/babylon/pull/12))\n\n> [Method Parameter Decorators](https://goo.gl/8MmCMG) is now a TC39 [stage 0 proposal](https://github.com/tc39/ecma262/blob/master/stage0.md).\n\nExamples:\n\n```js\nclass Foo {\n  constructor(@foo() x, @bar({ a: 123 }) @baz() y) {}\n}\n\nexport default function func(@foo() x, @bar({ a: 123 }) @baz() y) {}\n\nvar obj = {\n  method(@foo() x, @bar({ a: 123 }) @baz() y) {}\n};\n```\n\n##### Parse for-await statements (w/ `asyncGenerators` plugin) ([#17](https://github.com/babel/babylon/pull/17))\n\nThere is also a new node type, `ForAwaitStatement`.\n\n> [Async generators and for-await](https://github.com/tc39/proposal-async-iteration) are now a [stage 2 proposal](https://github.com/tc39/ecma262#current-proposals).\n\nExample:\n\n```js\nasync function f() {\n  for await (let x of y);\n}\n```\n/lib/index.js\u0000\u0007o\u0019'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true\n});\nconst defaultOptions = {\n  sourceType: \"script\",\n  sourceFilename: undefined,\n  startColumn: 0,\n  startLine: 1,\n  allowAwaitOutsideFunction: false,\n  allowReturnOutsideFunction: false,\n  allowNewTargetOutsideFunction: false,\n  allowImportExportEverywhere: false,\n  allowSuperOutsideMethod: false,\n  allowUndeclaredExports: false,\n  plugins: [],\n  strictMode: null,\n  ranges: false,\n  tokens: false,\n  createParenthesizedExpressions: false,\n  errorRecovery: false,\n  attachComment: true,\n  annexB: true\n};\nfunction getOptions(opts) {\n  if (opts && opts.annexB != null && opts.annexB !== false) {\n    throw new Error(\"The `annexB` option can only be set to `false`.\");\n  }\n  const options = {};\n  for (const key of Object.keys(defaultOptions)) {\n    options[key] = opts && opts[key] != null ? opts[key] : defaultOptions[key];\n  }\n  return options;\n}\nclass TokContext {\n  constructor(token, preserveSpace) {\n    this.token = void 0;\n    this.preserveSpace = void 0;\n    this.token = token;\n    this.preserveSpace = !!preserveSpace;\n  }\n}\nconst types = {\n  brace: new TokContext(\"{\"),\n  j_oTag: new TokContext(\"<tag\"),\n  j_cTag: new TokContext(\"</tag\"),\n  j_expr: new TokContext(\"<tag>...</tag>\", true)\n};\n{\n  types.template = new TokContext(\"`\", true);\n}\nconst beforeExpr = true;\nconst startsExpr = true;\nconst isLoop = true;\nconst isAssign = true;\nconst prefix = true;\nconst postfix = true;\nclass ExportedTokenType {\n  constructor(label, conf = {}) {\n    this.label = void 0;\n    this.keyword = void 0;\n    this.beforeExpr = void 0;\n    this.startsExpr = void 0;\n    this.rightAssociative = void 0;\n    this.isLoop = void 0;\n    this.isAssign = void 0;\n    this.prefix = void 0;\n    this.postfix = void 0;\n    this.binop = void 0;\n    this.label = label;\n    this.keyword = conf.keyword;\n    this.beforeExpr = !!conf.beforeExpr;\n    this.startsExpr = !!conf.startsExpr;\n    this.rightAssociative = !!conf.rightAssociative;\n    this.isLoop = !!conf.isLoop;\n    this.isAssign = !!conf.isAssign;\n    this.prefix = !!conf.prefix;\n    this.postfix = !!conf.postfix;\n    this.binop = conf.binop != null ? conf.binop : null;\n    {\n      this.updateContext = null;\n    }\n  }\n}\nconst keywords$1 = new Map();\nfunction createKeyword(name, options = {}) {\n  options.keyword = name;\n  const token = createToken(name, options);\n  keywords$1.set(name, token);\n  return token;\n}\nfunction createBinop(name, binop) {\n  return createToken(name, {\n    beforeExpr,\n    binop\n  });\n}\nlet tokenTypeCounter = -1;\nconst tokenTypes = [];\nconst tokenLabels = [];\nconst tokenBinops = [];\nconst tokenBeforeExprs = [];\nconst tokenStartsExprs = [];\nconst tokenPrefixes = [];\nfunction createToken(name, options = {}) {\n  var _options$binop, _options$beforeExpr, _options$startsExpr, _options$prefix;\n  ++tokenTypeCounter;\n  tokenLabels.push(name);\n  tokenBinops.push((_options$binop = options.binop) != null ? _options$binop : -1);\n  tokenBeforeExprs.push((_options$beforeExpr = options.beforeExpr) != null ? _options$beforeExpr : false);\n  tokenStartsExprs.push((_options$startsExpr = options.startsExpr) != null ? _options$startsExpr : false);\n  tokenPrefixes.push((_options$prefix = options.prefix) != null ? _options$prefix : false);\n  tokenTypes.push(new ExportedTokenType(name, options));\n  return tokenTypeCounter;\n}\nfunction createKeywordLike(name, options = {}) {\n  var _options$binop2, _options$beforeExpr2, _options$startsExpr2, _options$prefix2;\n  ++tokenTypeCounter;\n  keywords$1.set(name, tokenTypeCounter);\n  tokenLabels.push(name);\n  tokenBinops.push((_options$binop2 = options.binop) != null ? _options$binop2 : -1);\n  tokenBeforeExprs.push((_options$beforeExpr2 = options.beforeExpr) != null ? _options$beforeExpr2 : false);\n  tokenStartsExprs.push((_options$startsExpr2 = options.startsExpr) != null ? _options$startsExpr2 : false);\n  tokenPrefixes.push((_options$prefix2 = options.prefix) != null ? _options$prefix2 : false);\n  tokenTypes.push(new ExportedTokenType(\"name\", options));\n  return tokenTypeCounter;\n}\nconst tt = {\n  bracketL: createToken(\"[\", {\n    beforeExpr,\n    startsExpr\n  }),\n  bracketHashL: createToken(\"#[\", {\n    beforeExpr,\n    startsExpr\n  }),\n  bracketBarL: createToken(\"[|\", {\n    beforeExpr,\n    startsExpr\n  }),\n  bracketR: createToken(\"]\"),\n  bracketBarR: createToken(\"|]\"),\n  braceL: createToken(\"{\", {\n    beforeExpr,\n    startsExpr\n  }),\n  braceBarL: createToken(\"{|\", {\n    beforeExpr,\n    startsExpr\n  }),\n  braceHashL: createToken(\"#{\", {\n    beforeExpr,\n    startsExpr\n  }),\n  braceR: createToken(\"}\"),\n  braceBarR: createToken(\"|}\"),\n  parenL: createToken(\"(\", {\n    beforeExpr,\n    startsExpr\n  }),\n  parenR: createToken(\")\"),\n  comma: createToken(\",\", {\n    beforeExpr\n  }),\n  semi: createToken(\";\", {\n    beforeExpr\n  }),\n  colon: createToken(\":\", {\n    beforeExpr\n  }),\n  doubleColon: createToken(\"::\", {\n    beforeExpr\n  }),\n  dot: createToken(\".\"),\n  question: createToken(\"?\", {\n    beforeExpr\n  }),\n  questionDot: createToken(\"?.\"),\n  arrow: createToken(\"=>\", {\n    beforeExpr\n  }),\n  template: createToken(\"template\"),\n  ellipsis: createToken(\"...\", {\n    beforeExpr\n  }),\n  backQuote: createToken(\"`\", {\n    startsExpr\n  }),\n  dollarBraceL: createToken(\"${\", {\n    beforeExpr,\n    startsExpr\n  }),\n  templateTail: createToken(\"...`\", {\n    startsExpr\n  }),\n  templateNonTail: createToken(\"...${\", {\n    beforeExpr,\n    startsExpr\n  }),\n  at: createToken(\"@\"),\n  hash: createToken(\"#\", {\n    startsExpr\n  }),\n  interpreterDirective: createToken(\"#!...\"),\n  eq: createToken(\"=\", {\n    beforeExpr,\n    isAssign\n  }),\n  assign: createToken(\"_=\", {\n    beforeExpr,\n    isAssign\n  }),\n  slashAssign: createToken(\"_=\", {\n    beforeExpr,\n    isAssign\n  }),\n  xorAssign: createToken(\"_=\", {\n    beforeExpr,\n    isAssign\n  }),\n  moduloAssign: createToken(\"_=\", {\n    beforeExpr,\n    isAssign\n  }),\n  incDec: createToken(\"++/--\", {\n    prefix,\n    postfix,\n    startsExpr\n  }),\n  bang: createToken(\"!\", {\n    beforeExpr,\n    prefix,\n    startsExpr\n  }),\n  tilde: createToken(\"~\", {\n    beforeExpr,\n    prefix,\n    startsExpr\n  }),\n  doubleCaret: createToken(\"^^\", {\n    startsExpr\n  }),\n  doubleAt: createToken(\"@@\", {\n    startsExpr\n  }),\n  pipeline: createBinop(\"|>\", 0),\n  nullishCoalescing: createBinop(\"??\", 1),\n  logicalOR: createBinop(\"||\", 1),\n  logicalAND: createBinop(\"&&\", 2),\n  bitwiseOR: createBinop(\"|\", 3),\n  bitwiseXOR: createBinop(\"^\", 4),\n  bitwiseAND: createBinop(\"&\", 5),\n  equality: createBinop(\"==/!=/===/!==\", 6),\n  lt: createBinop(\"</>/<=/>=\", 7),\n  gt: createBinop(\"</>/<=/>=\", 7),\n  relational: createBinop(\"</>/<=/>=\", 7),\n  bitShift: createBinop(\"<</>>/>>>\", 8),\n  bitShiftL: createBinop(\"<</>>/>>>\", 8),\n  bitShiftR: createBinop(\"<</>>/>>>\", 8),\n  plusMin: createToken(\"+/-\", {\n    beforeExpr,\n    binop: 9,\n    prefix,\n    startsExpr\n  }),\n  modulo: createToken(\"%\", {\n    binop: 10,\n    startsExpr\n  }),\n  star: createToken(\"*\", {\n    binop: 10\n  }),\n  slash: createBinop(\"/\", 10),\n  exponent: createToken(\"**\", {\n    beforeExpr,\n    binop: 11,\n    rightAssociative: true\n  }),\n  _in: createKeyword(\"in\", {\n    beforeExpr,\n    binop: 7\n  }),\n  _instanceof: createKeyword(\"instanceof\", {\n    beforeExpr,\n    binop: 7\n  }),\n  _break: createKeyword(\"break\"),\n  _case: createKeyword(\"case\", {\n    beforeExpr\n  }),\n  _catch: createKeyword(\"catch\"),\n  _continue: createKeyword(\"continue\"),\n  _debugger: createKeyword(\"debugger\"),\n  _default: createKeyword(\"default\", {\n    beforeExpr\n  }),\n  _else: createKeyword(\"else\", {\n    beforeExpr\n  }),\n  _finally: createKeyword(\"finally\"),\n  _function: createKeyword(\"function\", {\n    startsExpr\n  }),\n  _if: createKeyword(\"if\"),\n  _return: createKeyword(\"return\", {\n    beforeExpr\n  }),\n  _switch: createKeyword(\"switch\"),\n  _throw: createKeyword(\"throw\", {\n    beforeExpr,\n    prefix,\n    startsExpr\n  }),\n  _try: createKeyword(\"try\"),\n  _var: createKeyword(\"var\"),\n  _const: createKeyword(\"const\"),\n  _with: createKeyword(\"with\"),\n  _new: createKeyword(\"new\", {\n    beforeExpr,\n    startsExpr\n  }),\n  _this: createKeyword(\"this\", {\n    startsExpr\n  }),\n  _super: createKeyword(\"super\", {\n    startsExpr\n  }),\n  _class: createKeyword(\"class\", {\n    startsExpr\n  }),\n  _extends: createKeyword(\"extends\", {\n    beforeExpr\n  }),\n  _export: createKeyword(\"export\"),\n  _import: createKeyword(\"import\", {\n    startsExpr\n  }),\n  _null: createKeyword(\"null\", {\n    startsExpr\n  }),\n  _true: createKeyword(\"true\", {\n    startsExpr\n  }),\n  _false: createKeyword(\"false\", {\n    startsExpr\n  }),\n  _typeof: createKeyword(\"typeof\", {\n    beforeExpr,\n    prefix,\n    startsExpr\n  }),\n  _void: createKeyword(\"void\", {\n    beforeExpr,\n    prefix,\n    startsExpr\n  }),\n  _delete: createKeyword(\"delete\", {\n    beforeExpr,\n    prefix,\n    startsExpr\n  }),\n  _do: createKeyword(\"do\", {\n    isLoop,\n    beforeExpr\n  }),\n  _for: createKeyword(\"for\", {\n    isLoop\n  }),\n  _while: createKeyword(\"while\", {\n    isLoop\n  }),\n  _as: createKeywordLike(\"as\", {\n    startsExpr\n  }),\n  _assert: createKeywordLike(\"assert\", {\n    startsExpr\n  }),\n  _async: createKeywordLike(\"async\", {\n    startsExpr\n  }),\n  _await: createKeywordLike(\"await\", {\n    startsExpr\n  }),\n  _from: createKeywordLike(\"from\", {\n    startsExpr\n  }),\n  _get: createKeywordLike(\"get\", {\n    startsExpr\n  }),\n  _let: createKeywordLike(\"let\", {\n    startsExpr\n  }),\n  _meta: createKeywordLike(\"meta\", {\n    startsExpr\n  }),\n  _of: createKeywordLike(\"of\", {\n    startsExpr\n  }),\n  _sent: createKeywordLike(\"sent\", {\n    startsExpr\n  }),\n  _set: createKeywordLike(\"set\", {\n    startsExpr\n  }),\n  _static: createKeywordLike(\"static\", {\n    startsExpr\n  }),\n  _using: createKeywordLike(\"using\", {\n    startsExpr\n  }),\n  _yield: createKeywordLike(\"yield\", {\n    startsExpr\n  }),\n  _asserts: createKeywordLike(\"asserts\", {\n    startsExpr\n  }),\n  _checks: createKeywordLike(\"checks\", {\n    startsExpr\n  }),\n  _exports: createKeywordLike(\"exports\", {\n    startsExpr\n  }),\n  _global: createKeywordLike(\"global\", {\n    startsExpr\n  }),\n  _implements: createKeywordLike(\"implements\", {\n    startsExpr\n  }),\n  _intrinsic: createKeywordLike(\"intrinsic\", {\n    startsExpr\n  }),\n  _infer: createKeywordLike(\"infer\", {\n    startsExpr\n  }),\n  _is: createKeywordLike(\"is\", {\n    startsExpr\n  }),\n  _mixins: createKeywordLike(\"mixins\", {\n    startsExpr\n  }),\n  _proto: createKeywordLike(\"proto\", {\n    startsExpr\n  }),\n  _require: createKeywordLike(\"require\", {\n    startsExpr\n  }),\n  _satisfies: createKeywordLike(\"satisfies\", {\n    startsExpr\n  }),\n  _keyof: createKeywordLike(\"keyof\", {\n    startsExpr\n  }),\n  _readonly: createKeywordLike(\"readonly\", {\n    startsExpr\n  }),\n  _unique: createKeywordLike(\"unique\", {\n    startsExpr\n  }),\n  _abstract: createKeywordLike(\"abstract\", {\n    startsExpr\n  }),\n  _declare: createKeywordLike(\"declare\", {\n    startsExpr\n  }),\n  _enum: createKeywordLike(\"enum\", {\n    startsExpr\n  }),\n  _module: createKeywordLike(\"module\", {\n    startsExpr\n  }),\n  _namespace: createKeywordLike(\"namespace\", {\n    startsExpr\n  }),\n  _interface: createKeywordLike(\"interface\", {\n    startsExpr\n  }),\n  _type: createKeywordLike(\"type\", {\n    startsExpr\n  }),\n  _opaque: createKeywordLike(\"opaque\", {\n    startsExpr\n  }),\n  name: createToken(\"name\", {\n    startsExpr\n  }),\n  string: createToken(\"string\", {\n    startsExpr\n  }),\n  num: createToken(\"num\", {\n    startsExpr\n  }),\n  bigint: createToken(\"bigint\", {\n    startsExpr\n  }),\n  decimal: createToken(\"decimal\", {\n    startsExpr\n  }),\n  regexp: createToken(\"regexp\", {\n    startsExpr\n  }),\n  privateName: createToken(\"#name\", {\n    startsExpr\n  }),\n  eof: createToken(\"eof\"),\n  jsxName: createToken(\"jsxName\"),\n  jsxText: createToken(\"jsxText\", {\n    beforeExpr: true\n  }),\n  jsxTagStart: createToken(\"jsxTagStart\", {\n    startsExpr: true\n  }),\n  jsxTagEnd: createToken(\"jsxTagEnd\"),\n  placeholder: createToken(\"%%\", {\n    startsExpr: true\n  })\n};\nfunction tokenIsIdentifier(token) {\n  return token >= 93 && token <= 130;\n}\nfunction tokenKeywordOrIdentifierIsKeyword(token) {\n  return token <= 92;\n}\nfunction tokenIsKeywordOrIdentifier(token) {\n  return token >= 58 && token <= 130;\n}\nfunction tokenIsLiteralPropertyName(token) {\n  return token >= 58 && token <= 134;\n}\nfunction tokenComesBeforeExpression(token) {\n  return tokenBeforeExprs[token];\n}\nfunction tokenCanStartExpression(token) {\n  return tokenStartsExprs[token];\n}\nfunction tokenIsAssignment(token) {\n  return token >= 29 && token <= 33;\n}\nfunction tokenIsFlowInterfaceOrTypeOrOpaque(token) {\n  return token >= 127 && token <= 129;\n}\nfunction tokenIsLoop(token) {\n  return token >= 90 && token <= 92;\n}\nfunction tokenIsKeyword(token) {\n  return token >= 58 && token <= 92;\n}\nfunction tokenIsOperator(token) {\n  return token >= 39 && token <= 59;\n}\nfunction tokenIsPostfix(token) {\n  return token === 34;\n}\nfunction tokenIsPrefix(token) {\n  return tokenPrefixes[token];\n}\nfunction tokenIsTSTypeOperator(token) {\n  return token >= 119 && token <= 121;\n}\nfunction tokenIsTSDeclarationStart(token) {\n  return token >= 122 && token <= 128;\n}\nfunction tokenLabelName(token) {\n  return tokenLabels[token];\n}\nfunction tokenOperatorPrecedence(token) {\n  return tokenBinops[token];\n}\nfunction tokenIsRightAssociative(token) {\n  return token === 57;\n}\nfunction tokenIsTemplate(token) {\n  return token >= 24 && token <= 25;\n}\nfunction getExportedToken(token) {\n  return tokenTypes[token];\n}\n{\n  tokenTypes[8].updateContext = context => {\n    context.pop();\n  };\n  tokenTypes[5].updateContext = tokenTypes[7].updateContext = tokenTypes[23].updateContext = context => {\n    context.push(types.brace);\n  };\n  tokenTypes[22].updateContext = context => {\n    if (context[context.length - 1] === types.template) {\n      context.pop();\n    } else {\n      context.push(types.template);\n    }\n  };\n  tokenTypes[140].updateContext = context => {\n    context.push(types.j_expr, types.j_oTag);\n  };\n}\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n  if (source == null) return {};\n  var target = {};\n  var sourceKeys = Object.keys(source);\n  var key, i;\n  for (i = 0; i < sourceKeys.length; i++) {\n    key = sourceKeys[i];\n    if (excluded.indexOf(key) >= 0) continue;\n    target[key] = source[key];\n  }\n  return target;\n}\nclass Position {\n  constructor(line, col, index) {\n    this.line = void 0;\n    this.column = void 0;\n    this.index = void 0;\n    this.line = line;\n    this.column = col;\n    this.index = index;\n  }\n}\nclass SourceLocation {\n  constructor(start, end) {\n    this.start = void 0;\n    this.end = void 0;\n    this.filename = void 0;\n    this.identifierName = void 0;\n    this.start = start;\n    this.end = end;\n  }\n}\nfunction createPositionWithColumnOffset(position, columnOffset) {\n  const {\n    line,\n    column,\n    index\n  } = position;\n  return new Position(line, column + columnOffset, index + columnOffset);\n}\nvar ParseErrorCode = {\n  SyntaxError: \"BABEL_PARSER_SYNTAX_ERROR\",\n  SourceTypeModuleError: \"BABEL_PARSER_SOURCETYPE_MODULE_REQUIRED\"\n};\nconst reflect = (keys, last = keys.length - 1) => ({\n  get() {\n    return keys.reduce((object, key) => object[key], this);\n  },\n  set(value) {\n    keys.reduce((item, key, i) => i === last ? item[key] = value : item[key], this);\n  }\n});\nconst instantiate = (constructor, properties, descriptors) => Object.keys(descriptors).map(key => [key, descriptors[key]]).filter(([, descriptor]) => !!descriptor).map(([key, descriptor]) => [key, typeof descriptor === \"function\" ? {\n  value: descriptor,\n  enumerable: false\n} : typeof descriptor.reflect === \"string\" ? Object.assign({}, descriptor, reflect(descriptor.reflect.split(\".\"))) : descriptor]).reduce((instance, [key, descriptor]) => Object.defineProperty(instance, key, Object.assign({\n  configurable: true\n}, descriptor)), Object.assign(new constructor(), properties));\nvar ModuleErrors = {\n  ImportMetaOutsideModule: {\n    message: `import.meta may appear only with 'sourceType: \"module\"'`,\n    code: ParseErrorCode.SourceTypeModuleError\n  },\n  ImportOutsideModule: {\n    message: `'import' and 'export' may appear only with 'sourceType: \"module\"'`,\n    code: ParseErrorCode.SourceTypeModuleError\n  }\n};\nconst NodeDescriptions = {\n  ArrayPattern: \"array destructuring pattern\",\n  AssignmentExpression: \"assignment expression\",\n  AssignmentPattern: \"assignment expression\",\n  ArrowFunctionExpression: \"arrow function expression\",\n  ConditionalExpression: \"conditional expression\",\n  CatchClause: \"catch clause\",\n  ForOfStatement: \"for-of statement\",\n  ForInStatement: \"for-in statement\",\n  ForStatement: \"for-loop\",\n  FormalParameters: \"function parameter list\",\n  Identifier: \"identifier\",\n  ImportSpecifier: \"import specifier\",\n  ImportDefaultSpecifier: \"import default specifier\",\n  ImportNamespaceSpecifier: \"import namespace specifier\",\n  ObjectPattern: \"object destructuring pattern\",\n  ParenthesizedExpression: \"parenthesized expression\",\n  RestElement: \"rest element\",\n  UpdateExpression: {\n    true: \"prefix operation\",\n    false: \"postfix operation\"\n  },\n  VariableDeclarator: \"variable declaration\",\n  YieldExpression: \"yield expression\"\n};\nconst toNodeDescription = ({\n  type,\n  prefix\n}) => type === \"UpdateExpression\" ? NodeDescriptions.UpdateExpression[String(prefix)] : NodeDescriptions[type];\nvar StandardErrors = {\n  AccessorIsGenerator: ({\n    kind\n  }) => `A ${kind}ter cannot be a generator.`,\n  ArgumentsInClass: \"'arguments' is only allowed in functions and class methods.\",\n  AsyncFunctionInSingleStatementContext: \"Async functions can only be declared at the top level or inside a block.\",\n  AwaitBindingIdentifier: \"Can not use 'await' as identifier inside an async function.\",\n  AwaitBindingIdentifierInStaticBlock: \"Can not use 'await' as identifier inside a static block.\",\n  AwaitExpressionFormalParameter: \"'await' is not allowed in async function parameters.\",\n  AwaitInUsingBinding: \"'await' is not allowed to be used as a name in 'using' declarations.\",\n  AwaitNotInAsyncContext: \"'await' is only allowed within async functions and at the top levels of modules.\",\n  AwaitNotInAsyncFunction: \"'await' is only allowed within async functions.\",\n  BadGetterArity: \"A 'get' accessor must not have any formal parameters.\",\n  BadSetterArity: \"A 'set' accessor must have exactly one formal parameter.\",\n  BadSetterRestParameter: \"A 'set' accessor function argument must not be a rest parameter.\",\n  ConstructorClassField: \"Classes may not have a field named 'constructor'.\",\n  ConstructorClassPrivateField: \"Classes may not have a private field named '#constructor'.\",\n  ConstructorIsAccessor: \"Class constructor may not be an accessor.\",\n  ConstructorIsAsync: \"Constructor can't be an async function.\",\n  ConstructorIsGenerator: \"Constructor can't be a generator.\",\n  DeclarationMissingInitializer: ({\n    kind\n  }) => `Missing initializer in ${kind} declaration.`,\n  DecoratorArgumentsOutsideParentheses: \"Decorator arguments must be moved inside parentheses: use '@(decorator(args))' instead of '@(decorator)(args)'.\",\n  DecoratorBeforeExport: \"Decorators must be placed *before* the 'export' keyword. Remove the 'decoratorsBeforeExport: true' option to use the 'export @decorator class {}' syntax.\",\n  DecoratorsBeforeAfterExport: \"Decorators can be placed *either* before or after the 'export' keyword, but not in both locations at the same time.\",\n  DecoratorConstructor: \"Decorators can't be used with a constructor. Did you mean '@dec class { ... }'?\",\n  DecoratorExportClass: \"Decorators must be placed *after* the 'export' keyword. Remove the 'decoratorsBeforeExport: false' option to use the '@decorator export class {}' syntax.\",\n  DecoratorSemicolon: \"Decorators must not be followed by a semicolon.\",\n  DecoratorStaticBlock: \"Decorators can't be used with a static block.\",\n  DeletePrivateField: \"Deleting a private field is not allowed.\",\n  DestructureNamedImport: \"ES2015 named imports do not destructure. Use another statement for destructuring after the import.\",\n  DuplicateConstructor: \"Duplicate constructor in the same class.\",\n  DuplicateDefaultExport: \"Only one default export allowed per module.\",\n  DuplicateExport: ({\n    exportName\n  }) => `\\`${exportName}\\` has already been exported. Exported identifiers must be unique.`,\n  DuplicateProto: \"Redefinition of __proto__ property.\",\n  DuplicateRegExpFlags: \"Duplicate regular expression flag.\",\n  ElementAfterRest: \"Rest element must be last element.\",\n  EscapedCharNotAnIdentifier: \"Invalid Unicode escape.\",\n  ExportBindingIsString: ({\n    localName,\n    exportName\n  }) => `A string literal cannot be used as an exported binding without \\`from\\`.\\n- Did you mean \\`export { '${localName}' as '${exportName}' } from 'some-module'\\`?`,\n  ExportDefaultFromAsIdentifier: \"'from' is not allowed as an identifier after 'export default'.\",\n  ForInOfLoopInitializer: ({\n    type\n  }) => `'${type === \"ForInStatement\" ? \"for-in\" : \"for-of\"}' loop variable declaration may not have an initializer.`,\n  ForInUsing: \"For-in loop may not start with 'using' declaration.\",\n  ForOfAsync: \"The left-hand side of a for-of loop may not be 'async'.\",\n  ForOfLet: \"The left-hand side of a for-of loop may not start with 'let'.\",\n  GeneratorInSingleStatementContext: \"Generators can only be declared at the top level or inside a block.\",\n  IllegalBreakContinue: ({\n    type\n  }) => `Unsyntactic ${type === \"BreakStatement\" ? \"break\" : \"continue\"}.`,\n  IllegalLanguageModeDirective: \"Illegal 'use strict' directive in function with non-simple parameter list.\",\n  IllegalReturn: \"'return' outside of function.\",\n  ImportBindingIsString: ({\n    importName\n  }) => `A string literal cannot be used as an imported binding.\\n- Did you mean \\`import { \"${importName}\" as foo }\\`?`,\n  ImportCallArgumentTrailingComma: \"Trailing comma is disallowed inside import(...) arguments.\",\n  ImportCallArity: ({\n    maxArgumentCount\n  }) => `\\`import()\\` requires exactly ${maxArgumentCount === 1 ? \"one argument\" : \"one or two arguments\"}.`,\n  ImportCallNotNewExpression: \"Cannot use new with import(...).\",\n  ImportCallSpreadArgument: \"`...` is not allowed in `import()`.\",\n  ImportJSONBindingNotDefault: \"A JSON module can only be imported with `default`.\",\n  ImportReflectionHasAssertion: \"`import module x` cannot have assertions.\",\n  ImportReflectionNotBinding: 'Only `import module x from \"./module\"` is valid.',\n  IncompatibleRegExpUVFlags: \"The 'u' and 'v' regular expression flags cannot be enabled at the same time.\",\n  InvalidBigIntLiteral: \"Invalid BigIntLiteral.\",\n  InvalidCodePoint: \"Code point out of bounds.\",\n  InvalidCoverInitializedName: \"Invalid shorthand property initializer.\",\n  InvalidDecimal: \"Invalid decimal.\",\n  InvalidDigit: ({\n    radix\n  }) => `Expected number in radix ${radix}.`,\n  InvalidEscapeSequence: \"Bad character escape sequence.\",\n  InvalidEscapeSequenceTemplate: \"Invalid escape sequence in template.\",\n  InvalidEscapedReservedWord: ({\n    reservedWord\n  }) => `Escape sequence in keyword ${reservedWord}.`,\n  InvalidIdentifier: ({\n    identifierName\n  }) => `Invalid identifier ${identifierName}.`,\n  InvalidLhs: ({\n    ancestor\n  }) => `Invalid left-hand side in ${toNodeDescription(ancestor)}.`,\n  InvalidLhsBinding: ({\n    ancestor\n  }) => `Binding invalid left-hand side in ${toNodeDescription(ancestor)}.`,\n  InvalidNumber: \"Invalid number.\",\n  InvalidOrMissingExponent: \"Floating-point numbers require a valid exponent after the 'e'.\",\n  InvalidOrUnexpectedToken: ({\n    unexpected\n  }) => `Unexpected character '${unexpected}'.`,\n  InvalidParenthesizedAssignment: \"Invalid parenthesized assignment pattern.\",\n  InvalidPrivateFieldResolution: ({\n    identifierName\n  }) => `Private name #${identifierName} is not defined.`,\n  InvalidPropertyBindingPattern: \"Binding member expression.\",\n  InvalidRecordProperty: \"Only properties and spread elements are allowed in record definitions.\",\n  InvalidRestAssignmentPattern: \"Invalid rest operator's argument.\",\n  LabelRedeclaration: ({\n    labelName\n  }) => `Label '${labelName}' is already declared.`,\n  LetInLexicalBinding: \"'let' is not allowed to be used as a name in 'let' or 'const' declarations.\",\n  LineTerminatorBeforeArrow: \"No line break is allowed before '=>'.\",\n  MalformedRegExpFlags: \"Invalid regular expression flag.\",\n  MissingClassName: \"A class name is required.\",\n  MissingEqInAssignment: \"Only '=' operator can be used for specifying default value.\",\n  MissingSemicolon: \"Missing semicolon.\",\n  MissingPlugin: ({\n    missingPlugin\n  }) => `This experimental syntax requires enabling the parser plugin: ${missingPlugin.map(name => JSON.stringify(name)).join(\", \")}.`,\n  MissingOneOfPlugins: ({\n    missingPlugin\n  }) => `This experimental syntax requires enabling one of the following parser plugin(s): ${missingPlugin.map(name => JSON.stringify(name)).join(\", \")}.`,\n  MissingUnicodeEscape: \"Expecting Unicode escape sequence \\\\uXXXX.\",\n  MixingCoalesceWithLogical: \"Nullish coalescing operator(??) requires parens when mixing with logical operators.\",\n  ModuleAttributeDifferentFromType: \"The only accepted module attribute is `type`.\",\n  ModuleAttributeInvalidValue: \"Only string literals are allowed as module attribute values.\",\n  ModuleAttributesWithDuplicateKeys: ({\n    key\n  }) => `Duplicate key \"${key}\" is not allowed in module attributes.`,\n  ModuleExportNameHasLoneSurrogate: ({\n    surrogateCharCode\n  }) => `An export name cannot include a lone surrogate, found '\\\\u${surrogateCharCode.toString(16)}'.`,\n  ModuleExportUndefined: ({\n    localName\n  }) => `Export '${localName}' is not defined.`,\n  MultipleDefaultsInSwitch: \"Multiple default clauses.\",\n  NewlineAfterThrow: \"Illegal newline after throw.\",\n  NoCatchOrFinally: \"Missing catch or finally clause.\",\n  NumberIdentifier: \"Identifier directly after number.\",\n  NumericSeparatorInEscapeSequence: \"Numeric separators are not allowed inside unicode escape sequences or hex escape sequences.\",\n  ObsoleteAwaitStar: \"'await*' has been removed from the async functions proposal. Use Promise.all() instead.\",\n  OptionalChainingNoNew: \"Constructors in/after an Optional Chain are not allowed.\",\n  OptionalChainingNoTemplate: \"Tagged Template Literals are not allowed in optionalChain.\",\n  OverrideOnConstructor: \"'override' modifier cannot appear on a constructor declaration.\",\n  ParamDupe: \"Argument name clash.\",\n  PatternHasAccessor: \"Object pattern can't contain getter or setter.\",\n  PatternHasMethod: \"Object pattern can't contain methods.\",\n  PrivateInExpectedIn: ({\n    identifierName\n  }) => `Private names are only allowed in property accesses (\\`obj.#${identifierName}\\`) or in \\`in\\` expressions (\\`#${identifierName} in obj\\`).`,\n  PrivateNameRedeclaration: ({\n    identifierName\n  }) => `Duplicate private name #${identifierName}.`,\n  RecordExpressionBarIncorrectEndSyntaxType: \"Record expressions ending with '|}' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'.\",\n  RecordExpressionBarIncorrectStartSyntaxType: \"Record expressions starting with '{|' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'.\",\n  RecordExpressionHashIncorrectStartSyntaxType: \"Record expressions starting with '#{' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'hash'.\",\n  RecordNoProto: \"'__proto__' is not allowed in Record expressions.\",\n  RestTrailingComma: \"Unexpected trailing comma after rest element.\",\n  SloppyFunction: \"In non-strict mode code, functions can only be declared at top level or inside a block.\",\n  SloppyFunctionAnnexB: \"In non-strict mode code, functions can only be declared at top level, inside a block, or as the body of an if statement.\",\n  StaticPrototype: \"Classes may not have static property named prototype.\",\n  SuperNotAllowed: \"`super()` is only valid inside a class constructor of a subclass. Maybe a typo in the method name ('constructor') or not extending another class?\",\n  SuperPrivateField: \"Private fields can't be accessed on super.\",\n  TrailingDecorator: \"Decorators must be attached to a class element.\",\n  TupleExpressionBarIncorrectEndSyntaxType: \"Tuple expressions ending with '|]' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'.\",\n  TupleExpressionBarIncorrectStartSyntaxType: \"Tuple expressions starting with '[|' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'.\",\n  TupleExpressionHashIncorrectStartSyntaxType: \"Tuple expressions starting with '#[' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'hash'.\",\n  UnexpectedArgumentPlaceholder: \"Unexpected argument placeholder.\",\n  UnexpectedAwaitAfterPipelineBody: 'Unexpected \"await\" after pipeline body; await must have parentheses in minimal proposal.',\n  UnexpectedDigitAfterHash: \"Unexpected digit after hash token.\",\n  UnexpectedImportExport: \"'import' and 'export' may only appear at the top level.\",\n  UnexpectedKeyword: ({\n    keyword\n  }) => `Unexpected keyword '${keyword}'.`,\n  UnexpectedLeadingDecorator: \"Leading decorators must be attached to a class declaration.\",\n  UnexpectedLexicalDeclaration: \"Lexical declaration cannot appear in a single-statement context.\",\n  UnexpectedNewTarget: \"`new.target` can only be used in functions or class properties.\",\n  UnexpectedNumericSeparator: \"A numeric separator is only allowed between two digits.\",\n  UnexpectedPrivateField: \"Unexpected private name.\",\n  UnexpectedReservedWord: ({\n    reservedWord\n  }) => `Unexpected reserved word '${reservedWord}'.`,\n  UnexpectedSuper: \"'super' is only allowed in object methods and classes.\",\n  UnexpectedToken: ({\n    expected,\n    unexpected\n  }) => `Unexpected token${unexpected ? ` '${unexpected}'.` : \"\"}${expected ? `, expected \"${expected}\"` : \"\"}`,\n  UnexpectedTokenUnaryExponentiation: \"Illegal expression. Wrap left hand side or entire exponentiation in parentheses.\",\n  UnexpectedUsingDeclaration: \"Using declaration cannot appear in the top level when source type is `script`.\",\n  UnsupportedBind: \"Binding should be performed on object property.\",\n  UnsupportedDecoratorExport: \"A decorated export must export a class declaration.\",\n  UnsupportedDefaultExport: \"Only expressions, functions or classes are allowed as the `default` export.\",\n  UnsupportedImport: \"`import` can only be used in `import()` or `import.meta`.\",\n  UnsupportedMetaProperty: ({\n    target,\n    onlyValidPropertyName\n  }) => `The only valid meta property for ${target} is ${target}.${onlyValidPropertyName}.`,\n  UnsupportedParameterDecorator: \"Decorators cannot be used to decorate parameters.\",\n  UnsupportedPropertyDecorator: \"Decorators cannot be used to decorate object literal properties.\",\n  UnsupportedSuper: \"'super' can only be used with function calls (i.e. super()) or in property accesses (i.e. super.prop or super[prop]).\",\n  UnterminatedComment: \"Unterminated comment.\",\n  UnterminatedRegExp: \"Unterminated regular expression.\",\n  UnterminatedString: \"Unterminated string constant.\",\n  UnterminatedTemplate: \"Unterminated template.\",\n  UsingDeclarationHasBindingPattern: \"Using declaration cannot have destructuring patterns.\",\n  VarRedeclaration: ({\n    identifierName\n  }) => `Identifier '${identifierName}' has already been declared.`,\n  YieldBindingIdentifier: \"Can not use 'yield' as identifier inside a generator.\",\n  YieldInParameter: \"Yield expression is not allowed in formal parameters.\",\n  ZeroDigitNumericSeparator: \"Numeric separator can not be used after leading 0.\"\n};\nvar StrictModeErrors = {\n  StrictDelete: \"Deleting local variable in strict mode.\",\n  StrictEvalArguments: ({\n    referenceName\n  }) => `Assigning to '${referenceName}' in strict mode.`,\n  StrictEvalArgumentsBinding: ({\n    bindingName\n  }) => `Binding '${bindingName}' in strict mode.`,\n  StrictFunction: \"In strict mode code, functions can only be declared at top level or inside a block.\",\n  StrictNumericEscape: \"The only valid numeric escape in strict mode is '\\\\0'.\",\n  StrictOctalLiteral: \"Legacy octal literals are not allowed in strict mode.\",\n  StrictWith: \"'with' in strict mode.\"\n};\nconst UnparenthesizedPipeBodyDescriptions = new Set([\"ArrowFunctionExpression\", \"AssignmentExpression\", \"ConditionalExpression\", \"YieldExpression\"]);\nvar PipelineOperatorErrors = {\n  PipeBodyIsTighter: \"Unexpected yield after pipeline body; any yield expression acting as Hack-style pipe body must be parenthesized due to its loose operator precedence.\",\n  PipeTopicRequiresHackPipes: 'Topic reference is used, but the pipelineOperator plugin was not passed a \"proposal\": \"hack\" or \"smart\" option.',\n  PipeTopicUnbound: \"Topic reference is unbound; it must be inside a pipe body.\",\n  PipeTopicUnconfiguredToken: ({\n    token\n  }) => `Invalid topic token ${token}. In order to use ${token} as a topic reference, the pipelineOperator plugin must be configured with { \"proposal\": \"hack\", \"topicToken\": \"${token}\" }.`,\n  PipeTopicUnused: \"Hack-style pipe body does not contain a topic reference; Hack-style pipes must use topic at least once.\",\n  PipeUnparenthesizedBody: ({\n    type\n  }) => `Hack-style pipe body cannot be an unparenthesized ${toNodeDescription({\n    type\n  })}; please wrap it in parentheses.`,\n  PipelineBodyNoArrow: 'Unexpected arrow \"=>\" after pipeline body; arrow function in pipeline body must be parenthesized.',\n  PipelineBodySequenceExpression: \"Pipeline body may not be a comma-separated sequence expression.\",\n  PipelineHeadSequenceExpression: \"Pipeline head should not be a comma-separated sequence expression.\",\n  PipelineTopicUnused: \"Pipeline is in topic style but does not use topic reference.\",\n  PrimaryTopicNotAllowed: \"Topic reference was used in a lexical context without topic binding.\",\n  PrimaryTopicRequiresSmartPipeline: 'Topic reference is used, but the pipelineOperator plugin was not passed a \"proposal\": \"hack\" or \"smart\" option.'\n};\nconst _excluded$1 = [\"toMessage\"],\n  _excluded2$1 = [\"message\"];\nfunction toParseErrorConstructor(_ref) {\n  let {\n      toMessage\n    } = _ref,\n    properties = _objectWithoutPropertiesLoose(_ref, _excluded$1);\n  return function constructor({\n    loc,\n    details\n  }) {\n    return instantiate(SyntaxError, Object.assign({}, properties, {\n      loc\n    }), {\n      clone(overrides = {}) {\n        const loc = overrides.loc || {};\n        return constructor({\n          loc: new Position(\"line\" in loc ? loc.line : this.loc.line, \"column\" in loc ? loc.column : this.loc.column, \"index\" in loc ? loc.index : this.loc.index),\n          details: Object.assign({}, this.details, overrides.details)\n        });\n      },\n      details: {\n        value: details,\n        enumerable: false\n      },\n      message: {\n        get() {\n          return `${toMessage(this.details)} (${this.loc.line}:${this.loc.column})`;\n        },\n        set(value) {\n          Object.defineProperty(this, \"message\", {\n            value\n          });\n        }\n      },\n      pos: {\n        reflect: \"loc.index\",\n        enumerable: true\n      },\n      missingPlugin: \"missingPlugin\" in details && {\n        reflect: \"details.missingPlugin\",\n        enumerable: true\n      }\n    });\n  };\n}\nfunction ParseErrorEnum(argument, syntaxPlugin) {\n  if (Array.isArray(argument)) {\n    return parseErrorTemplates => ParseErrorEnum(parseErrorTemplates, argument[0]);\n  }\n  const ParseErrorConstructors = {};\n  for (const reasonCode of Object.keys(argument)) {\n    const template = argument[reasonCode];\n    const _ref2 = typeof template === \"string\" ? {\n        message: () => template\n      } : typeof template === \"function\" ? {\n        message: template\n      } : template,\n      {\n        message\n      } = _ref2,\n      rest = _objectWithoutPropertiesLoose(_ref2, _excluded2$1);\n    const toMessage = typeof message === \"string\" ? () => message : message;\n    ParseErrorConstructors[reasonCode] = toParseErrorConstructor(Object.assign({\n      code: ParseErrorCode.SyntaxError,\n      reasonCode,\n      toMessage\n    }, syntaxPlugin ? {\n      syntaxPlugin\n    } : {}, rest));\n  }\n  return ParseErrorConstructors;\n}\nconst Errors = Object.assign({}, ParseErrorEnum(ModuleErrors), ParseErrorEnum(StandardErrors), ParseErrorEnum(StrictModeErrors), ParseErrorEnum`pipelineOperator`(PipelineOperatorErrors));\nconst {\n  defineProperty\n} = Object;\nconst toUnenumerable = (object, key) => defineProperty(object, key, {\n  enumerable: false,\n  value: object[key]\n});\nfunction toESTreeLocation(node) {\n  node.loc.start && toUnenumerable(node.loc.start, \"index\");\n  node.loc.end && toUnenumerable(node.loc.end, \"index\");\n  return node;\n}\nvar estree = superClass => class ESTreeParserMixin extends superClass {\n  parse() {\n    const file = toESTreeLocation(super.parse());\n    if (this.options.tokens) {\n      file.tokens = file.tokens.map(toESTreeLocation);\n    }\n    return file;\n  }\n  parseRegExpLiteral({\n    pattern,\n    flags\n  }) {\n    let regex = null;\n    try {\n      regex = new RegExp(pattern, flags);\n    } catch (e) {}\n    const node = this.estreeParseLiteral(regex);\n    node.regex = {\n      pattern,\n      flags\n    };\n    return node;\n  }\n  parseBigIntLiteral(value) {\n    let bigInt;\n    try {\n      bigInt = BigInt(value);\n    } catch (_unused) {\n      bigInt = null;\n    }\n    const node = this.estreeParseLiteral(bigInt);\n    node.bigint = String(node.value || value);\n    return node;\n  }\n  parseDecimalLiteral(value) {\n    const decimal = null;\n    const node = this.estreeParseLiteral(decimal);\n    node.decimal = String(node.value || value);\n    return node;\n  }\n  estreeParseLiteral(value) {\n    return this.parseLiteral(value, \"Literal\");\n  }\n  parseStringLiteral(value) {\n    return this.estreeParseLiteral(value);\n  }\n  parseNumericLiteral(value) {\n    return this.estreeParseLiteral(value);\n  }\n  parseNullLiteral() {\n    return this.estreeParseLiteral(null);\n  }\n  parseBooleanLiteral(value) {\n    return this.estreeParseLiteral(value);\n  }\n  directiveToStmt(directive) {\n    const expression = directive.value;\n    delete directive.value;\n    expression.type = \"Literal\";\n    expression.raw = expression.extra.raw;\n    expression.value = expression.extra.expressionValue;\n    const stmt = directive;\n    stmt.type = \"ExpressionStatement\";\n    stmt.expression = expression;\n    stmt.directive = expression.extra.rawValue;\n    delete expression.extra;\n    return stmt;\n  }\n  initFunction(node, isAsync) {\n    super.initFunction(node, isAsync);\n    node.expression = false;\n  }\n  checkDeclaration(node) {\n    if (node != null && this.isObjectProperty(node)) {\n      this.checkDeclaration(node.value);\n    } else {\n      super.checkDeclaration(node);\n    }\n  }\n  getObjectOrClassMethodParams(method) {\n    return method.value.params;\n  }\n  isValidDirective(stmt) {\n    var _stmt$expression$extr;\n    return stmt.type === \"ExpressionStatement\" && stmt.expression.type === \"Literal\" && typeof stmt.expression.value === \"string\" && !((_stmt$expression$extr = stmt.expression.extra) != null && _stmt$expression$extr.parenthesized);\n  }\n  parseBlockBody(node, allowDirectives, topLevel, end, afterBlockParse) {\n    super.parseBlockBody(node, allowDirectives, topLevel, end, afterBlockParse);\n    const directiveStatements = node.directives.map(d => this.directiveToStmt(d));\n    node.body = directiveStatements.concat(node.body);\n    delete node.directives;\n  }\n  pushClassMethod(classBody, method, isGenerator, isAsync, isConstructor, allowsDirectSuper) {\n    this.parseMethod(method, isGenerator, isAsync, isConstructor, allowsDirectSuper, \"ClassMethod\", true);\n    if (method.typeParameters) {\n      method.value.typeParameters = method.typeParameters;\n      delete method.typeParameters;\n    }\n    classBody.body.push(method);\n  }\n  parsePrivateName() {\n    const node = super.parsePrivateName();\n    {\n      if (!this.getPluginOption(\"estree\", \"classFeatures\")) {\n        return node;\n      }\n    }\n    return this.convertPrivateNameToPrivateIdentifier(node);\n  }\n  convertPrivateNameToPrivateIdentifier(node) {\n    const name = super.getPrivateNameSV(node);\n    node = node;\n    delete node.id;\n    node.name = name;\n    node.type = \"PrivateIdentifier\";\n    return node;\n  }\n  isPrivateName(node) {\n    {\n      if (!this.getPluginOption(\"estree\", \"classFeatures\")) {\n        return super.isPrivateName(node);\n      }\n    }\n    return node.type === \"PrivateIdentifier\";\n  }\n  getPrivateNameSV(node) {\n    {\n      if (!this.getPluginOption(\"estree\", \"classFeatures\")) {\n        return super.getPrivateNameSV(node);\n      }\n    }\n    return node.name;\n  }\n  parseLiteral(value, type) {\n    const node = super.parseLiteral(value, type);\n    node.raw = node.extra.raw;\n    delete node.extra;\n    return node;\n  }\n  parseFunctionBody(node, allowExpression, isMethod = false) {\n    super.parseFunctionBody(node, allowExpression, isMethod);\n    node.expression = node.body.type !== \"BlockStatement\";\n  }\n  parseMethod(node, isGenerator, isAsync, isConstructor, allowDirectSuper, type, inClassScope = false) {\n    let funcNode = this.startNode();\n    funcNode.kind = node.kind;\n    funcNode = super.parseMethod(funcNode, isGenerator, isAsync, isConstructor, allowDirectSuper, type, inClassScope);\n    funcNode.type = \"FunctionExpression\";\n    delete funcNode.kind;\n    node.value = funcNode;\n    if (type === \"ClassPrivateMethod\") {\n      node.computed = false;\n    }\n    return this.finishNode(node, \"MethodDefinition\");\n  }\n  parseClassProperty(...args) {\n    const propertyNode = super.parseClassProperty(...args);\n    {\n      if (!this.getPluginOption(\"estree\", \"classFeatures\")) {\n        return propertyNode;\n      }\n    }\n    propertyNode.type = \"PropertyDefinition\";\n    return propertyNode;\n  }\n  parseClassPrivateProperty(...args) {\n    const propertyNode = super.parseClassPrivateProperty(...args);\n    {\n      if (!this.getPluginOption(\"estree\", \"classFeatures\")) {\n        return propertyNode;\n      }\n    }\n    propertyNode.type = \"PropertyDefinition\";\n    propertyNode.computed = false;\n    return propertyNode;\n  }\n  parseObjectMethod(prop, isGenerator, isAsync, isPattern, isAccessor) {\n    const node = super.parseObjectMethod(prop, isGenerator, isAsync, isPattern, isAccessor);\n    if (node) {\n      node.type = \"Property\";\n      if (node.kind === \"method\") {\n        node.kind = \"init\";\n      }\n      node.shorthand = false;\n    }\n    return node;\n  }\n  parseObjectProperty(prop, startLoc, isPattern, refExpressionErrors) {\n    const node = super.parseObjectProperty(prop, startLoc, isPattern, refExpressionErrors);\n    if (node) {\n      node.kind = \"init\";\n      node.type = \"Property\";\n    }\n    return node;\n  }\n  isValidLVal(type, isUnparenthesizedInAssign, binding) {\n    return type === \"Property\" ? \"value\" : super.isValidLVal(type, isUnparenthesizedInAssign, binding);\n  }\n  isAssignable(node, isBinding) {\n    if (node != null && this.isObjectProperty(node)) {\n      return this.isAssignable(node.value, isBinding);\n    }\n    return super.isAssignable(node, isBinding);\n  }\n  toAssignable(node, isLHS = false) {\n    if (node != null && this.isObjectProperty(node)) {\n      const {\n        key,\n        value\n      } = node;\n      if (this.isPrivateName(key)) {\n        this.classScope.usePrivateName(this.getPrivateNameSV(key), key.loc.start);\n      }\n      this.toAssignable(value, isLHS);\n    } else {\n      super.toAssignable(node, isLHS);\n    }\n  }\n  toAssignableObjectExpressionProp(prop, isLast, isLHS) {\n    if (prop.kind === \"get\" || prop.kind === \"set\") {\n      this.raise(Errors.PatternHasAccessor, {\n        at: prop.key\n      });\n    } else if (prop.method) {\n      this.raise(Errors.PatternHasMethod, {\n        at: prop.key\n      });\n    } else {\n      super.toAssignableObjectExpressionProp(prop, isLast, isLHS);\n    }\n  }\n  finishCallExpression(unfinished, optional) {\n    const node = super.finishCallExpression(unfinished, optional);\n    if (node.callee.type === \"Import\") {\n      node.type = \"ImportExpression\";\n      node.source = node.arguments[0];\n      if (this.hasPlugin(\"importAssertions\")) {\n        var _node$arguments$;\n        node.attributes = (_node$arguments$ = node.arguments[1]) != null ? _node$arguments$ : null;\n      }\n      delete node.arguments;\n      delete node.callee;\n    }\n    return node;\n  }\n  toReferencedArguments(node) {\n    if (node.type === \"ImportExpression\") {\n      return;\n    }\n    super.toReferencedArguments(node);\n  }\n  parseExport(unfinished, decorators) {\n    const exportStartLoc = this.state.lastTokStartLoc;\n    const node = super.parseExport(unfinished, decorators);\n    switch (node.type) {\n      case \"ExportAllDeclaration\":\n        node.exported = null;\n        break;\n      case \"ExportNamedDeclaration\":\n        if (node.specifiers.length === 1 && node.specifiers[0].type === \"ExportNamespaceSpecifier\") {\n          node.type = \"ExportAllDeclaration\";\n          node.exported = node.specifiers[0].exported;\n          delete node.specifiers;\n        }\n      case \"ExportDefaultDeclaration\":\n        {\n          var _declaration$decorato;\n          const {\n            declaration\n          } = node;\n          if ((declaration == null ? void 0 : declaration.type) === \"ClassDeclaration\" && ((_declaration$decorato = declaration.decorators) == null ? void 0 : _declaration$decorato.length) > 0 && declaration.start === node.start) {\n            this.resetStartLocation(node, exportStartLoc);\n          }\n        }\n        break;\n    }\n    return node;\n  }\n  parseSubscript(base, startLoc, noCalls, state) {\n    const node = super.parseSubscript(base, startLoc, noCalls, state);\n    if (state.optionalChainMember) {\n      if (node.type === \"OptionalMemberExpression\" || node.type === \"OptionalCallExpression\") {\n        node.type = node.type.substring(8);\n      }\n      if (state.stop) {\n        const chain = this.startNodeAtNode(node);\n        chain.expression = node;\n        return this.finishNode(chain, \"ChainExpression\");\n      }\n    } else if (node.type === \"MemberExpression\" || node.type === \"CallExpression\") {\n      node.optional = false;\n    }\n    return node;\n  }\n  hasPropertyAsPrivateName(node) {\n    if (node.type === \"ChainExpression\") {\n      node = node.expression;\n    }\n    return super.hasPropertyAsPrivateName(node);\n  }\n  isObjectProperty(node) {\n    return node.type === \"Property\" && node.kind === \"init\" && !node.method;\n  }\n  isObjectMethod(node) {\n    return node.method || node.kind === \"get\" || node.kind === \"set\";\n  }\n  finishNodeAt(node, type, endLoc) {\n    return toESTreeLocation(super.finishNodeAt(node, type, endLoc));\n  }\n  resetStartLocation(node, startLoc) {\n    super.resetStartLocation(node, startLoc);\n    toESTreeLocation(node);\n  }\n  resetEndLocation(node, endLoc = this.state.lastTokEndLoc) {\n    super.resetEndLocation(node, endLoc);\n    toESTreeLocation(node);\n  }\n};\nlet nonASCIIidentifierStartChars = \"\\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\\u0560-\\u0588\\u05d0-\\u05ea\\u05ef-\\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\\u0860-\\u086a\\u0870-\\u0887\\u0889-\\u088e\\u08a0-\\u08c9\\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\\u09fc\\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\\u0c5d\\u0c60\\u0c61\\u0c80\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd\\u0cdd\\u0cde\\u0ce0\\u0ce1\\u0cf1\\u0cf2\\u0d04-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d\\u0d4e\\u0d54-\\u0d56\\u0d5f-\\u0d61\\u0d7a-\\u0d7f\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0e01-\\u0e30\\u0e32\\u0e33\\u0e40-\\u0e46\\u0e81\\u0e82\\u0e84\\u0e86-\\u0e8a\\u0e8c-\\u0ea3\\u0ea5\\u0ea7-\\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-\\u1711\\u171f-\\u1731\\u1740-\\u1751\\u1760-\\u176c\\u176e-\\u1770\\u1780-\\u17b3\\u17d7\\u17dc\\u1820-\\u1878\\u1880-\\u18a8\\u18aa\\u18b0-\\u18f5\\u1900-\\u191e\\u1950-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19b0-\\u19c9\\u1a00-\\u1a16\\u1a20-\\u1a54\\u1aa7\\u1b05-\\u1b33\\u1b45-\\u1b4c\\u1b83-\\u1ba0\\u1bae\\u1baf\\u1bba-\\u1be5\\u1c00-\\u1c23\\u1c4d-\\u1c4f\\u1c5a-\\u1c7d\\u1c80-\\u1c88\\u1c90-\\u1cba\\u1cbd-\\u1cbf\\u1ce9-\\u1cec\\u1cee-\\u1cf3\\u1cf5\\u1cf6\\u1cfa\\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-\\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-\\u312f\\u3131-\\u318e\\u31a0-\\u31bf\\u31f0-\\u31ff\\u3400-\\u4dbf\\u4e00-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a\\ua62b\\ua640-\\ua66e\\ua67f-\\ua69d\\ua6a0-\\ua6ef\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua7ca\\ua7d0\\ua7d1\\ua7d3\\ua7d5-\\ua7d9\\ua7f2-\\ua801\\ua803-\\ua805\\ua807-\\ua80a\\ua80c-\\ua822\\ua840-\\ua873\\ua882-\\ua8b3\\ua8f2-\\ua8f7\\ua8fb\\ua8fd\\ua8fe\\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-\\uab69\\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\";\nlet nonASCIIidentifierChars = \"\\u200c\\u200d\\xb7\\u0300-\\u036f\\u0387\\u0483-\\u0487\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u064b-\\u0669\\u0670\\u06d6-\\u06dc\\u06df-\\u06e4\\u06e7\\u06e8\\u06ea-\\u06ed\\u06f0-\\u06f9\\u0711\\u0730-\\u074a\\u07a6-\\u07b0\\u07c0-\\u07c9\\u07eb-\\u07f3\\u07fd\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0859-\\u085b\\u0898-\\u089f\\u08ca-\\u08e1\\u08e3-\\u0903\\u093a-\\u093c\\u093e-\\u094f\\u0951-\\u0957\\u0962\\u0963\\u0966-\\u096f\\u0981-\\u0983\\u09bc\\u09be-\\u09c4\\u09c7\\u09c8\\u09cb-\\u09cd\\u09d7\\u09e2\\u09e3\\u09e6-\\u09ef\\u09fe\\u0a01-\\u0a03\\u0a3c\\u0a3e-\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a66-\\u0a71\\u0a75\\u0a81-\\u0a83\\u0abc\\u0abe-\\u0ac5\\u0ac7-\\u0ac9\\u0acb-\\u0acd\\u0ae2\\u0ae3\\u0ae6-\\u0aef\\u0afa-\\u0aff\\u0b01-\\u0b03\\u0b3c\\u0b3e-\\u0b44\\u0b47\\u0b48\\u0b4b-\\u0b4d\\u0b55-\\u0b57\\u0b62\\u0b63\\u0b66-\\u0b6f\\u0b82\\u0bbe-\\u0bc2\\u0bc6-\\u0bc8\\u0bca-\\u0bcd\\u0bd7\\u0be6-\\u0bef\\u0c00-\\u0c04\\u0c3c\\u0c3e-\\u0c44\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62\\u0c63\\u0c66-\\u0c6f\\u0c81-\\u0c83\\u0cbc\\u0cbe-\\u0cc4\\u0cc6-\\u0cc8\\u0cca-\\u0ccd\\u0cd5\\u0cd6\\u0ce2\\u0ce3\\u0ce6-\\u0cef\\u0cf3\\u0d00-\\u0d03\\u0d3b\\u0d3c\\u0d3e-\\u0d44\\u0d46-\\u0d48\\u0d4a-\\u0d4d\\u0d57\\u0d62\\u0d63\\u0d66-\\u0d6f\\u0d81-\\u0d83\\u0dca\\u0dcf-\\u0dd4\\u0dd6\\u0dd8-\\u0ddf\\u0de6-\\u0def\\u0df2\\u0df3\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0e50-\\u0e59\\u0eb1\\u0eb4-\\u0ebc\\u0ec8-\\u0ece\\u0ed0-\\u0ed9\\u0f18\\u0f19\\u0f20-\\u0f29\\u0f35\\u0f37\\u0f39\\u0f3e\\u0f3f\\u0f71-\\u0f84\\u0f86\\u0f87\\u0f8d-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u102b-\\u103e\\u1040-\\u1049\\u1056-\\u1059\\u105e-\\u1060\\u1062-\\u1064\\u1067-\\u106d\\u1071-\\u1074\\u1082-\\u108d\\u108f-\\u109d\\u135d-\\u135f\\u1369-\\u1371\\u1712-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b4-\\u17d3\\u17dd\\u17e0-\\u17e9\\u180b-\\u180d\\u180f-\\u1819\\u18a9\\u1920-\\u192b\\u1930-\\u193b\\u1946-\\u194f\\u19d0-\\u19da\\u1a17-\\u1a1b\\u1a55-\\u1a5e\\u1a60-\\u1a7c\\u1a7f-\\u1a89\\u1a90-\\u1a99\\u1ab0-\\u1abd\\u1abf-\\u1ace\\u1b00-\\u1b04\\u1b34-\\u1b44\\u1b50-\\u1b59\\u1b6b-\\u1b73\\u1b80-\\u1b82\\u1ba1-\\u1bad\\u1bb0-\\u1bb9\\u1be6-\\u1bf3\\u1c24-\\u1c37\\u1c40-\\u1c49\\u1c50-\\u1c59\\u1cd0-\\u1cd2\\u1cd4-\\u1ce8\\u1ced\\u1cf4\\u1cf7-\\u1cf9\\u1dc0-\\u1dff\\u203f\\u2040\\u2054\\u20d0-\\u20dc\\u20e1\\u20e5-\\u20f0\\u2cef-\\u2cf1\\u2d7f\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\ua620-\\ua629\\ua66f\\ua674-\\ua67d\\ua69e\\ua69f\\ua6f0\\ua6f1\\ua802\\ua806\\ua80b\\ua823-\\ua827\\ua82c\\ua880\\ua881\\ua8b4-\\ua8c5\\ua8d0-\\ua8d9\\ua8e0-\\ua8f1\\ua8ff-\\ua909\\ua926-\\ua92d\\ua947-\\ua953\\ua980-\\ua983\\ua9b3-\\ua9c0\\ua9d0-\\ua9d9\\ua9e5\\ua9f0-\\ua9f9\\uaa29-\\uaa36\\uaa43\\uaa4c\\uaa4d\\uaa50-\\uaa59\\uaa7b-\\uaa7d\\uaab0\\uaab2-\\uaab4\\uaab7\\uaab8\\uaabe\\uaabf\\uaac1\\uaaeb-\\uaaef\\uaaf5\\uaaf6\\uabe3-\\uabea\\uabec\\uabed\\uabf0-\\uabf9\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe2f\\ufe33\\ufe34\\ufe4d-\\ufe4f\\uff10-\\uff19\\uff3f\";\nconst nonASCIIidentifierStart = new RegExp(\"[\" + nonASCIIidentifierStartChars + \"]\");\nconst nonASCIIidentifier = new RegExp(\"[\" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + \"]\");\nnonASCIIidentifierStartChars = nonASCIIidentifierChars = null;\nconst astralIdentifierStartCodes = [0, 11, 2, 25, 2, 18, 2, 1, 2, 14, 3, 13, 35, 122, 70, 52, 268, 28, 4, 48, 48, 31, 14, 29, 6, 37, 11, 29, 3, 35, 5, 7, 2, 4, 43, 157, 19, 35, 5, 35, 5, 39, 9, 51, 13, 10, 2, 14, 2, 6, 2, 1, 2, 10, 2, 14, 2, 6, 2, 1, 68, 310, 10, 21, 11, 7, 25, 5, 2, 41, 2, 8, 70, 5, 3, 0, 2, 43, 2, 1, 4, 0, 3, 22, 11, 22, 10, 30, 66, 18, 2, 1, 11, 21, 11, 25, 71, 55, 7, 1, 65, 0, 16, 3, 2, 2, 2, 28, 43, 28, 4, 28, 36, 7, 2, 27, 28, 53, 11, 21, 11, 18, 14, 17, 111, 72, 56, 50, 14, 50, 14, 35, 349, 41, 7, 1, 79, 28, 11, 0, 9, 21, 43, 17, 47, 20, 28, 22, 13, 52, 58, 1, 3, 0, 14, 44, 33, 24, 27, 35, 30, 0, 3, 0, 9, 34, 4, 0, 13, 47, 15, 3, 22, 0, 2, 0, 36, 17, 2, 24, 20, 1, 64, 6, 2, 0, 2, 3, 2, 14, 2, 9, 8, 46, 39, 7, 3, 1, 3, 21, 2, 6, 2, 1, 2, 4, 4, 0, 19, 0, 13, 4, 159, 52, 19, 3, 21, 2, 31, 47, 21, 1, 2, 0, 185, 46, 42, 3, 37, 47, 21, 0, 60, 42, 14, 0, 72, 26, 38, 6, 186, 43, 117, 63, 32, 7, 3, 0, 3, 7, 2, 1, 2, 23, 16, 0, 2, 0, 95, 7, 3, 38, 17, 0, 2, 0, 29, 0, 11, 39, 8, 0, 22, 0, 12, 45, 20, 0, 19, 72, 264, 8, 2, 36, 18, 0, 50, 29, 113, 6, 2, 1, 2, 37, 22, 0, 26, 5, 2, 1, 2, 31, 15, 0, 328, 18, 16, 0, 2, 12, 2, 33, 125, 0, 80, 921, 103, 110, 18, 195, 2637, 96, 16, 1071, 18, 5, 4026, 582, 8634, 568, 8, 30, 18, 78, 18, 29, 19, 47, 17, 3, 32, 20, 6, 18, 689, 63, 129, 74, 6, 0, 67, 12, 65, 1, 2, 0, 29, 6135, 9, 1237, 43, 8, 8936, 3, 2, 6, 2, 1, 2, 290, 16, 0, 30, 2, 3, 0, 15, 3, 9, 395, 2309, 106, 6, 12, 4, 8, 8, 9, 5991, 84, 2, 70, 2, 1, 3, 0, 3, 1, 3, 3, 2, 11, 2, 0, 2, 6, 2, 64, 2, 3, 3, 7, 2, 6, 2, 27, 2, 3, 2, 4, 2, 0, 4, 6, 2, 339, 3, 24, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 7, 1845, 30, 7, 5, 262, 61, 147, 44, 11, 6, 17, 0, 322, 29, 19, 43, 485, 27, 757, 6, 2, 3, 2, 1, 2, 14, 2, 196, 60, 67, 8, 0, 1205, 3, 2, 26, 2, 1, 2, 0, 3, 0, 2, 9, 2, 3, 2, 0, 2, 0, 7, 0, 5, 0, 2, 0, 2, 0, 2, 2, 2, 1, 2, 0, 3, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 1, 2, 0, 3, 3, 2, 6, 2, 3, 2, 3, 2, 0, 2, 9, 2, 16, 6, 2, 2, 4, 2, 16, 4421, 42719, 33, 4153, 7, 221, 3, 5761, 15, 7472, 3104, 541, 1507, 4938, 6, 4191];\nconst astralIdentifierCodes = [509, 0, 227, 0, 150, 4, 294, 9, 1368, 2, 2, 1, 6, 3, 41, 2, 5, 0, 166, 1, 574, 3, 9, 9, 370, 1, 81, 2, 71, 10, 50, 3, 123, 2, 54, 14, 32, 10, 3, 1, 11, 3, 46, 10, 8, 0, 46, 9, 7, 2, 37, 13, 2, 9, 6, 1, 45, 0, 13, 2, 49, 13, 9, 3, 2, 11, 83, 11, 7, 0, 3, 0, 158, 11, 6, 9, 7, 3, 56, 1, 2, 6, 3, 1, 3, 2, 10, 0, 11, 1, 3, 6, 4, 4, 193, 17, 10, 9, 5, 0, 82, 19, 13, 9, 214, 6, 3, 8, 28, 1, 83, 16, 16, 9, 82, 12, 9, 9, 84, 14, 5, 9, 243, 14, 166, 9, 71, 5, 2, 1, 3, 3, 2, 0, 2, 1, 13, 9, 120, 6, 3, 6, 4, 0, 29, 9, 41, 6, 2, 3, 9, 0, 10, 10, 47, 15, 406, 7, 2, 7, 17, 9, 57, 21, 2, 13, 123, 5, 4, 0, 2, 1, 2, 6, 2, 0, 9, 9, 49, 4, 2, 1, 2, 4, 9, 9, 330, 3, 10, 1, 2, 0, 49, 6, 4, 4, 14, 9, 5351, 0, 7, 14, 13835, 9, 87, 9, 39, 4, 60, 6, 26, 9, 1014, 0, 2, 54, 8, 3, 82, 0, 12, 1, 19628, 1, 4706, 45, 3, 22, 543, 4, 4, 5, 9, 7, 3, 6, 31, 3, 149, 2, 1418, 49, 513, 54, 5, 49, 9, 0, 15, 0, 23, 4, 2, 14, 1361, 6, 2, 16, 3, 6, 2, 1, 2, 4, 101, 0, 161, 6, 10, 9, 357, 0, 62, 13, 499, 13, 983, 6, 110, 6, 6, 9, 4759, 9, 787719, 239];\nfunction isInAstralSet(code, set) {\n  let pos = 0x10000;\n  for (let i = 0, length = set.length; i < length; i += 2) {\n    pos += set[i];\n    if (pos > code) return false;\n    pos += set[i + 1];\n    if (pos >= code) return true;\n  }\n  return false;\n}\nfunction isIdentifierStart(code) {\n  if (code < 65) return code === 36;\n  if (code <= 90) return true;\n  if (code < 97) return code === 95;\n  if (code <= 122) return true;\n  if (code <= 0xffff) {\n    return code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code));\n  }\n  return isInAstralSet(code, astralIdentifierStartCodes);\n}\nfunction isIdentifierChar(code) {\n  if (code < 48) return code === 36;\n  if (code < 58) return true;\n  if (code < 65) return false;\n  if (code <= 90) return true;\n  if (code < 97) return code === 95;\n  if (code <= 122) return true;\n  if (code <= 0xffff) {\n    return code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code));\n  }\n  return isInAstralSet(code, astralIdentifierStartCodes) || isInAstralSet(code, astralIdentifierCodes);\n}\nconst reservedWords = {\n  keyword: [\"break\", \"case\", \"catch\", \"continue\", \"debugger\", \"default\", \"do\", \"else\", \"finally\", \"for\", \"function\", \"if\", \"return\", \"switch\", \"throw\", \"try\", \"var\", \"const\", \"while\", \"with\", \"new\", \"this\", \"super\", \"class\", \"extends\", \"export\", \"import\", \"null\", \"true\", \"false\", \"in\", \"instanceof\", \"typeof\", \"void\", \"delete\"],\n  strict: [\"implements\", \"interface\", \"let\", \"package\", \"private\", \"protected\", \"public\", \"static\", \"yield\"],\n  strictBind: [\"eval\", \"arguments\"]\n};\nconst keywords = new Set(reservedWords.keyword);\nconst reservedWordsStrictSet = new Set(reservedWords.strict);\nconst reservedWordsStrictBindSet = new Set(reservedWords.strictBind);\nfunction isReservedWord(word, inModule) {\n  return inModule && word === \"await\" || word === \"enum\";\n}\nfunction isStrictReservedWord(word, inModule) {\n  return isReservedWord(word, inModule) || reservedWordsStrictSet.has(word);\n}\nfunction isStrictBindOnlyReservedWord(word) {\n  return reservedWordsStrictBindSet.has(word);\n}\nfunction isStrictBindReservedWord(word, inModule) {\n  return isStrictReservedWord(word, inModule) || isStrictBindOnlyReservedWord(word);\n}\nfunction isKeyword(word) {\n  return keywords.has(word);\n}\nfunction isIteratorStart(current, next, next2) {\n  return current === 64 && next === 64 && isIdentifierStart(next2);\n}\nconst reservedWordLikeSet = new Set([\"break\", \"case\", \"catch\", \"continue\", \"debugger\", \"default\", \"do\", \"else\", \"finally\", \"for\", \"function\", \"if\", \"return\", \"switch\", \"throw\", \"try\", \"var\", \"const\", \"while\", \"with\", \"new\", \"this\", \"super\", \"class\", \"extends\", \"export\", \"import\", \"null\", \"true\", \"false\", \"in\", \"instanceof\", \"typeof\", \"void\", \"delete\", \"implements\", \"interface\", \"let\", \"package\", \"private\", \"protected\", \"public\", \"static\", \"yield\", \"eval\", \"arguments\", \"enum\", \"await\"]);\nfunction canBeReservedWord(word) {\n  return reservedWordLikeSet.has(word);\n}\nconst SCOPE_OTHER = 0b000000000,\n  SCOPE_PROGRAM = 0b000000001,\n  SCOPE_FUNCTION = 0b000000010,\n  SCOPE_ARROW = 0b000000100,\n  SCOPE_SIMPLE_CATCH = 0b000001000,\n  SCOPE_SUPER = 0b000010000,\n  SCOPE_DIRECT_SUPER = 0b000100000,\n  SCOPE_CLASS = 0b001000000,\n  SCOPE_STATIC_BLOCK = 0b010000000,\n  SCOPE_TS_MODULE = 0b100000000,\n  SCOPE_VAR = SCOPE_PROGRAM | SCOPE_FUNCTION | SCOPE_STATIC_BLOCK | SCOPE_TS_MODULE;\nconst BIND_KIND_VALUE = 0b0000000000001,\n  BIND_KIND_TYPE = 0b0000000000010,\n  BIND_SCOPE_VAR = 0b0000000000100,\n  BIND_SCOPE_LEXICAL = 0b0000000001000,\n  BIND_SCOPE_FUNCTION = 0b0000000010000,\n  BIND_FLAGS_NONE = 0b00000001000000,\n  BIND_FLAGS_CLASS = 0b00000010000000,\n  BIND_FLAGS_TS_ENUM = 0b00000100000000,\n  BIND_FLAGS_TS_CONST_ENUM = 0b00001000000000,\n  BIND_FLAGS_TS_EXPORT_ONLY = 0b00010000000000,\n  BIND_FLAGS_FLOW_DECLARE_FN = 0b00100000000000,\n  BIND_FLAGS_TS_IMPORT = 0b01000000000000,\n  BIND_FLAGS_NO_LET_IN_LEXICAL = 0b10000000000000;\nconst BIND_CLASS = BIND_KIND_VALUE | BIND_KIND_TYPE | BIND_SCOPE_LEXICAL | BIND_FLAGS_CLASS | BIND_FLAGS_NO_LET_IN_LEXICAL,\n  BIND_LEXICAL = BIND_KIND_VALUE | 0 | BIND_SCOPE_LEXICAL | BIND_FLAGS_NO_LET_IN_LEXICAL,\n  BIND_CATCH_PARAM = BIND_KIND_VALUE | 0 | BIND_SCOPE_LEXICAL | 0,\n  BIND_VAR = BIND_KIND_VALUE | 0 | BIND_SCOPE_VAR | 0,\n  BIND_FUNCTION = BIND_KIND_VALUE | 0 | BIND_SCOPE_FUNCTION | 0,\n  BIND_TS_INTERFACE = 0 | BIND_KIND_TYPE | 0 | BIND_FLAGS_CLASS,\n  BIND_TS_TYPE = 0 | BIND_KIND_TYPE | 0 | 0,\n  BIND_TS_ENUM = BIND_KIND_VALUE | BIND_KIND_TYPE | BIND_SCOPE_LEXICAL | BIND_FLAGS_TS_ENUM | BIND_FLAGS_NO_LET_IN_LEXICAL,\n  BIND_TS_AMBIENT = 0 | 0 | 0 | BIND_FLAGS_TS_EXPORT_ONLY,\n  BIND_NONE = 0 | 0 | 0 | BIND_FLAGS_NONE,\n  BIND_OUTSIDE = BIND_KIND_VALUE | 0 | 0 | BIND_FLAGS_NONE,\n  BIND_TS_CONST_ENUM = BIND_TS_ENUM | BIND_FLAGS_TS_CONST_ENUM,\n  BIND_TS_NAMESPACE = 0 | 0 | 0 | BIND_FLAGS_TS_EXPORT_ONLY,\n  BIND_TS_TYPE_IMPORT = 0 | BIND_KIND_TYPE | 0 | BIND_FLAGS_TS_IMPORT,\n  BIND_FLOW_DECLARE_FN = BIND_FLAGS_FLOW_DECLARE_FN;\nconst CLASS_ELEMENT_FLAG_STATIC = 0b100,\n  CLASS_ELEMENT_KIND_GETTER = 0b010,\n  CLASS_ELEMENT_KIND_SETTER = 0b001,\n  CLASS_ELEMENT_KIND_ACCESSOR = CLASS_ELEMENT_KIND_GETTER | CLASS_ELEMENT_KIND_SETTER;\nconst CLASS_ELEMENT_STATIC_GETTER = CLASS_ELEMENT_KIND_GETTER | CLASS_ELEMENT_FLAG_STATIC,\n  CLASS_ELEMENT_STATIC_SETTER = CLASS_ELEMENT_KIND_SETTER | CLASS_ELEMENT_FLAG_STATIC,\n  CLASS_ELEMENT_INSTANCE_GETTER = CLASS_ELEMENT_KIND_GETTER,\n  CLASS_ELEMENT_INSTANCE_SETTER = CLASS_ELEMENT_KIND_SETTER,\n  CLASS_ELEMENT_OTHER = 0;\nclass Scope {\n  constructor(flags) {\n    this.var = new Set();\n    this.lexical = new Set();\n    this.functions = new Set();\n    this.flags = flags;\n  }\n}\nclass ScopeHandler {\n  constructor(parser, inModule) {\n    this.parser = void 0;\n    this.scopeStack = [];\n    this.inModule = void 0;\n    this.undefinedExports = new Map();\n    this.parser = parser;\n    this.inModule = inModule;\n  }\n  get inTopLevel() {\n    return (this.currentScope().flags & SCOPE_PROGRAM) > 0;\n  }\n  get inFunction() {\n    return (this.currentVarScopeFlags() & SCOPE_FUNCTION) > 0;\n  }\n  get allowSuper() {\n    return (this.currentThisScopeFlags() & SCOPE_SUPER) > 0;\n  }\n  get allowDirectSuper() {\n    return (this.currentThisScopeFlags() & SCOPE_DIRECT_SUPER) > 0;\n  }\n  get inClass() {\n    return (this.currentThisScopeFlags() & SCOPE_CLASS) > 0;\n  }\n  get inClassAndNotInNonArrowFunction() {\n    const flags = this.currentThisScopeFlags();\n    return (flags & SCOPE_CLASS) > 0 && (flags & SCOPE_FUNCTION) === 0;\n  }\n  get inStaticBlock() {\n    for (let i = this.scopeStack.length - 1;; i--) {\n      const {\n        flags\n      } = this.scopeStack[i];\n      if (flags & SCOPE_STATIC_BLOCK) {\n        return true;\n      }\n      if (flags & (SCOPE_VAR | SCOPE_CLASS)) {\n        return false;\n      }\n    }\n  }\n  get inNonArrowFunction() {\n    return (this.currentThisScopeFlags() & SCOPE_FUNCTION) > 0;\n  }\n  get treatFunctionsAsVar() {\n    return this.treatFunctionsAsVarInScope(this.currentScope());\n  }\n  createScope(flags) {\n    return new Scope(flags);\n  }\n  enter(flags) {\n    this.scopeStack.push(this.createScope(flags));\n  }\n  exit() {\n    const scope = this.scopeStack.pop();\n    return scope.flags;\n  }\n  treatFunctionsAsVarInScope(scope) {\n    return !!(scope.flags & (SCOPE_FUNCTION | SCOPE_STATIC_BLOCK) || !this.parser.inModule && scope.flags & SCOPE_PROGRAM);\n  }\n  declareName(name, bindingType, loc) {\n    let scope = this.currentScope();\n    if (bindingType & BIND_SCOPE_LEXICAL || bindingType & BIND_SCOPE_FUNCTION) {\n      this.checkRedeclarationInScope(scope, name, bindingType, loc);\n      if (bindingType & BIND_SCOPE_FUNCTION) {\n        scope.functions.add(name);\n      } else {\n        scope.lexical.add(name);\n      }\n      if (bindingType & BIND_SCOPE_LEXICAL) {\n        this.maybeExportDefined(scope, name);\n      }\n    } else if (bindingType & BIND_SCOPE_VAR) {\n      for (let i = this.scopeStack.length - 1; i >= 0; --i) {\n        scope = this.scopeStack[i];\n        this.checkRedeclarationInScope(scope, name, bindingType, loc);\n        scope.var.add(name);\n        this.maybeExportDefined(scope, name);\n        if (scope.flags & SCOPE_VAR) break;\n      }\n    }\n    if (this.parser.inModule && scope.flags & SCOPE_PROGRAM) {\n      this.undefinedExports.delete(name);\n    }\n  }\n  maybeExportDefined(scope, name) {\n    if (this.parser.inModule && scope.flags & SCOPE_PROGRAM) {\n      this.undefinedExports.delete(name);\n    }\n  }\n  checkRedeclarationInScope(scope, name, bindingType, loc) {\n    if (this.isRedeclaredInScope(scope, name, bindingType)) {\n      this.parser.raise(Errors.VarRedeclaration, {\n        at: loc,\n        identifierName: name\n      });\n    }\n  }\n  isRedeclaredInScope(scope, name, bindingType) {\n    if (!(bindingType & BIND_KIND_VALUE)) return false;\n    if (bindingType & BIND_SCOPE_LEXICAL) {\n      return scope.lexical.has(name) || scope.functions.has(name) || scope.var.has(name);\n    }\n    if (bindingType & BIND_SCOPE_FUNCTION) {\n      return scope.lexical.has(name) || !this.treatFunctionsAsVarInScope(scope) && scope.var.has(name);\n    }\n    return scope.lexical.has(name) && !(scope.flags & SCOPE_SIMPLE_CATCH && scope.lexical.values().next().value === name) || !this.treatFunctionsAsVarInScope(scope) && scope.functions.has(name);\n  }\n  checkLocalExport(id) {\n    const {\n      name\n    } = id;\n    const topLevelScope = this.scopeStack[0];\n    if (!topLevelScope.lexical.has(name) && !topLevelScope.var.has(name) && !topLevelScope.functions.has(name)) {\n      this.undefinedExports.set(name, id.loc.start);\n    }\n  }\n  currentScope() {\n    return this.scopeStack[this.scopeStack.length - 1];\n  }\n  currentVarScopeFlags() {\n    for (let i = this.scopeStack.length - 1;; i--) {\n      const {\n        flags\n      } = this.scopeStack[i];\n      if (flags & SCOPE_VAR) {\n        return flags;\n      }\n    }\n  }\n  currentThisScopeFlags() {\n    for (let i = this.scopeStack.length - 1;; i--) {\n      const {\n        flags\n      } = this.scopeStack[i];\n      if (flags & (SCOPE_VAR | SCOPE_CLASS) && !(flags & SCOPE_ARROW)) {\n        return flags;\n      }\n    }\n  }\n}\nclass FlowScope extends Scope {\n  constructor(...args) {\n    super(...args);\n    this.declareFunctions = new Set();\n  }\n}\nclass FlowScopeHandler extends ScopeHandler {\n  createScope(flags) {\n    return new FlowScope(flags);\n  }\n  declareName(name, bindingType, loc) {\n    const scope = this.currentScope();\n    if (bindingType & BIND_FLAGS_FLOW_DECLARE_FN) {\n      this.checkRedeclarationInScope(scope, name, bindingType, loc);\n      this.maybeExportDefined(scope, name);\n      scope.declareFunctions.add(name);\n      return;\n    }\n    super.declareName(name, bindingType, loc);\n  }\n  isRedeclaredInScope(scope, name, bindingType) {\n    if (super.isRedeclaredInScope(scope, name, bindingType)) return true;\n    if (bindingType & BIND_FLAGS_FLOW_DECLARE_FN) {\n      return !scope.declareFunctions.has(name) && (scope.lexical.has(name) || scope.functions.has(name));\n    }\n    return false;\n  }\n  checkLocalExport(id) {\n    if (!this.scopeStack[0].declareFunctions.has(id.name)) {\n      super.checkLocalExport(id);\n    }\n  }\n}\nclass BaseParser {\n  constructor() {\n    this.sawUnambiguousESM = false;\n    this.ambiguousScriptDifferentAst = false;\n  }\n  hasPlugin(pluginConfig) {\n    if (typeof pluginConfig === \"string\") {\n      return this.plugins.has(pluginConfig);\n    } else {\n      const [pluginName, pluginOptions] = pluginConfig;\n      if (!this.hasPlugin(pluginName)) {\n        return false;\n      }\n      const actualOptions = this.plugins.get(pluginName);\n      for (const key of Object.keys(pluginOptions)) {\n        if ((actualOptions == null ? void 0 : actualOptions[key]) !== pluginOptions[key]) {\n          return false;\n        }\n      }\n      return true;\n    }\n  }\n  getPluginOption(plugin, name) {\n    var _this$plugins$get;\n    return (_this$plugins$get = this.plugins.get(plugin)) == null ? void 0 : _this$plugins$get[name];\n  }\n}\nfunction setTrailingComments(node, comments) {\n  if (node.trailingComments === undefined) {\n    node.trailingComments = comments;\n  } else {\n    node.trailingComments.unshift(...comments);\n  }\n}\nfunction setLeadingComments(node, comments) {\n  if (node.leadingComments === undefined) {\n    node.leadingComments = comments;\n  } else {\n    node.leadingComments.unshift(...comments);\n  }\n}\nfunction setInnerComments(node, comments) {\n  if (node.innerComments === undefined) {\n    node.innerComments = comments;\n  } else {\n    node.innerComments.unshift(...comments);\n  }\n}\nfunction adjustInnerComments(node, elements, commentWS) {\n  let lastElement = null;\n  let i = elements.length;\n  while (lastElement === null && i > 0) {\n    lastElement = elements[--i];\n  }\n  if (lastElement === null || lastElement.start > commentWS.start) {\n    setInnerComments(node, commentWS.comments);\n  } else {\n    setTrailingComments(lastElement, commentWS.comments);\n  }\n}\nclass CommentsParser extends BaseParser {\n  addComment(comment) {\n    if (this.filename) comment.loc.filename = this.filename;\n    this.state.comments.push(comment);\n  }\n  processComment(node) {\n    const {\n      commentStack\n    } = this.state;\n    const commentStackLength = commentStack.length;\n    if (commentStackLength === 0) return;\n    let i = commentStackLength - 1;\n    const lastCommentWS = commentStack[i];\n    if (lastCommentWS.start === node.end) {\n      lastCommentWS.leadingNode = node;\n      i--;\n    }\n    const {\n      start: nodeStart\n    } = node;\n    for (; i >= 0; i--) {\n      const commentWS = commentStack[i];\n      const commentEnd = commentWS.end;\n      if (commentEnd > nodeStart) {\n        commentWS.containingNode = node;\n        this.finalizeComment(commentWS);\n        commentStack.splice(i, 1);\n      } else {\n        if (commentEnd === nodeStart) {\n          commentWS.trailingNode = node;\n        }\n        break;\n      }\n    }\n  }\n  finalizeComment(commentWS) {\n    const {\n      comments\n    } = commentWS;\n    if (commentWS.leadingNode !== null || commentWS.trailingNode !== null) {\n      if (commentWS.leadingNode !== null) {\n        setTrailingComments(commentWS.leadingNode, comments);\n      }\n      if (commentWS.trailingNode !== null) {\n        setLeadingComments(commentWS.trailingNode, comments);\n      }\n    } else {\n      const {\n        containingNode: node,\n        start: commentStart\n      } = commentWS;\n      if (this.input.charCodeAt(commentStart - 1) === 44) {\n        switch (node.type) {\n          case \"ObjectExpression\":\n          case \"ObjectPattern\":\n          case \"RecordExpression\":\n            adjustInnerComments(node, node.properties, commentWS);\n            break;\n          case \"CallExpression\":\n          case \"OptionalCallExpression\":\n            adjustInnerComments(node, node.arguments, commentWS);\n            break;\n          case \"FunctionDeclaration\":\n          case \"FunctionExpression\":\n          case \"ArrowFunctionExpression\":\n          case \"ObjectMethod\":\n          case \"ClassMethod\":\n          case \"ClassPrivateMethod\":\n            adjustInnerComments(node, node.params, commentWS);\n            break;\n          case \"ArrayExpression\":\n          case \"ArrayPattern\":\n          case \"TupleExpression\":\n            adjustInnerComments(node, node.elements, commentWS);\n            break;\n          case \"ExportNamedDeclaration\":\n          case \"ImportDeclaration\":\n            adjustInnerComments(node, node.specifiers, commentWS);\n            break;\n          default:\n            {\n              setInnerComments(node, comments);\n            }\n        }\n      } else {\n        setInnerComments(node, comments);\n      }\n    }\n  }\n  finalizeRemainingComments() {\n    const {\n      commentStack\n    } = this.state;\n    for (let i = commentStack.length - 1; i >= 0; i--) {\n      this.finalizeComment(commentStack[i]);\n    }\n    this.state.commentStack = [];\n  }\n  resetPreviousNodeTrailingComments(node) {\n    const {\n      commentStack\n    } = this.state;\n    const {\n      length\n    } = commentStack;\n    if (length === 0) return;\n    const commentWS = commentStack[length - 1];\n    if (commentWS.leadingNode === node) {\n      commentWS.leadingNode = null;\n    }\n  }\n  takeSurroundingComments(node, start, end) {\n    const {\n      commentStack\n    } = this.state;\n    const commentStackLength = commentStack.length;\n    if (commentStackLength === 0) return;\n    let i = commentStackLength - 1;\n    for (; i >= 0; i--) {\n      const commentWS = commentStack[i];\n      const commentEnd = commentWS.end;\n      const commentStart = commentWS.start;\n      if (commentStart === end) {\n        commentWS.leadingNode = node;\n      } else if (commentEnd === start) {\n        commentWS.trailingNode = node;\n      } else if (commentEnd < start) {\n        break;\n      }\n    }\n  }\n}\nconst lineBreak = /\\r\\n?|[\\n\\u2028\\u2029]/;\nconst lineBreakG = new RegExp(lineBreak.source, \"g\");\nfunction isNewLine(code) {\n  switch (code) {\n    case 10:\n    case 13:\n    case 8232:\n    case 8233:\n      return true;\n    default:\n      return false;\n  }\n}\nconst skipWhiteSpace = /(?:\\s|\\/\\/.*|\\/\\*[^]*?\\*\\/)*/g;\nconst skipWhiteSpaceInLine = /(?:[^\\S\\n\\r\\u2028\\u2029]|\\/\\/.*|\\/\\*.*?\\*\\/)*/y;\nconst skipWhiteSpaceToLineBreak = new RegExp(\"(?=(\" + skipWhiteSpaceInLine.source + \"))\\\\1\" + /(?=[\\n\\r\\u2028\\u2029]|\\/\\*(?!.*?\\*\\/)|$)/.source, \"y\");\nfunction isWhitespace(code) {\n  switch (code) {\n    case 0x0009:\n    case 0x000b:\n    case 0x000c:\n    case 32:\n    case 160:\n    case 5760:\n    case 0x2000:\n    case 0x2001:\n    case 0x2002:\n    case 0x2003:\n    case 0x2004:\n    case 0x2005:\n    case 0x2006:\n    case 0x2007:\n    case 0x2008:\n    case 0x2009:\n    case 0x200a:\n    case 0x202f:\n    case 0x205f:\n    case 0x3000:\n    case 0xfeff:\n      return true;\n    default:\n      return false;\n  }\n}\nclass State {\n  constructor() {\n    this.strict = void 0;\n    this.curLine = void 0;\n    this.lineStart = void 0;\n    this.startLoc = void 0;\n    this.endLoc = void 0;\n    this.errors = [];\n    this.potentialArrowAt = -1;\n    this.noArrowAt = [];\n    this.noArrowParamsConversionAt = [];\n    this.maybeInArrowParameters = false;\n    this.inType = false;\n    this.noAnonFunctionType = false;\n    this.hasFlowComment = false;\n    this.isAmbientContext = false;\n    this.inAbstractClass = false;\n    this.inDisallowConditionalTypesContext = false;\n    this.topicContext = {\n      maxNumOfResolvableTopics: 0,\n      maxTopicIndex: null\n    };\n    this.soloAwait = false;\n    this.inFSharpPipelineDirectBody = false;\n    this.labels = [];\n    this.comments = [];\n    this.commentStack = [];\n    this.pos = 0;\n    this.type = 137;\n    this.value = null;\n    this.start = 0;\n    this.end = 0;\n    this.lastTokEndLoc = null;\n    this.lastTokStartLoc = null;\n    this.lastTokStart = 0;\n    this.context = [types.brace];\n    this.canStartJSXElement = true;\n    this.containsEsc = false;\n    this.firstInvalidTemplateEscapePos = null;\n    this.strictErrors = new Map();\n    this.tokensLength = 0;\n  }\n  init({\n    strictMode,\n    sourceType,\n    startLine,\n    startColumn\n  }) {\n    this.strict = strictMode === false ? false : strictMode === true ? true : sourceType === \"module\";\n    this.curLine = startLine;\n    this.lineStart = -startColumn;\n    this.startLoc = this.endLoc = new Position(startLine, startColumn, 0);\n  }\n  curPosition() {\n    return new Position(this.curLine, this.pos - this.lineStart, this.pos);\n  }\n  clone(skipArrays) {\n    const state = new State();\n    const keys = Object.keys(this);\n    for (let i = 0, length = keys.length; i < length; i++) {\n      const key = keys[i];\n      let val = this[key];\n      if (!skipArrays && Array.isArray(val)) {\n        val = val.slice();\n      }\n      state[key] = val;\n    }\n    return state;\n  }\n}\nvar _isDigit = function isDigit(code) {\n  return code >= 48 && code <= 57;\n};\nconst forbiddenNumericSeparatorSiblings = {\n  decBinOct: new Set([46, 66, 69, 79, 95, 98, 101, 111]),\n  hex: new Set([46, 88, 95, 120])\n};\nconst isAllowedNumericSeparatorSibling = {\n  bin: ch => ch === 48 || ch === 49,\n  oct: ch => ch >= 48 && ch <= 55,\n  dec: ch => ch >= 48 && ch <= 57,\n  hex: ch => ch >= 48 && ch <= 57 || ch >= 65 && ch <= 70 || ch >= 97 && ch <= 102\n};\nfunction readStringContents(type, input, pos, lineStart, curLine, errors) {\n  const initialPos = pos;\n  const initialLineStart = lineStart;\n  const initialCurLine = curLine;\n  let out = \"\";\n  let firstInvalidLoc = null;\n  let chunkStart = pos;\n  const {\n    length\n  } = input;\n  for (;;) {\n    if (pos >= length) {\n      errors.unterminated(initialPos, initialLineStart, initialCurLine);\n      out += input.slice(chunkStart, pos);\n      break;\n    }\n    const ch = input.charCodeAt(pos);\n    if (isStringEnd(type, ch, input, pos)) {\n      out += input.slice(chunkStart, pos);\n      break;\n    }\n    if (ch === 92) {\n      out += input.slice(chunkStart, pos);\n      const res = readEscapedChar(input, pos, lineStart, curLine, type === \"template\", errors);\n      if (res.ch === null && !firstInvalidLoc) {\n        firstInvalidLoc = {\n          pos,\n          lineStart,\n          curLine\n        };\n      } else {\n        out += res.ch;\n      }\n      ({\n        pos,\n        lineStart,\n        curLine\n      } = res);\n      chunkStart = pos;\n    } else if (ch === 8232 || ch === 8233) {\n      ++pos;\n      ++curLine;\n      lineStart = pos;\n    } else if (ch === 10 || ch === 13) {\n      if (type === \"template\") {\n        out += input.slice(chunkStart, pos) + \"\\n\";\n        ++pos;\n        if (ch === 13 && input.charCodeAt(pos) === 10) {\n          ++pos;\n        }\n        ++curLine;\n        chunkStart = lineStart = pos;\n      } else {\n        errors.unterminated(initialPos, initialLineStart, initialCurLine);\n      }\n    } else {\n      ++pos;\n    }\n  }\n  return {\n    pos,\n    str: out,\n    firstInvalidLoc,\n    lineStart,\n    curLine,\n    containsInvalid: !!firstInvalidLoc\n  };\n}\nfunction isStringEnd(type, ch, input, pos) {\n  if (type === \"template\") {\n    return ch === 96 || ch === 36 && input.charCodeAt(pos + 1) === 123;\n  }\n  return ch === (type === \"double\" ? 34 : 39);\n}\nfunction readEscapedChar(input, pos, lineStart, curLine, inTemplate, errors) {\n  const throwOnInvalid = !inTemplate;\n  pos++;\n  const res = ch => ({\n    pos,\n    ch,\n    lineStart,\n    curLine\n  });\n  const ch = input.charCodeAt(pos++);\n  switch (ch) {\n    case 110:\n      return res(\"\\n\");\n    case 114:\n      return res(\"\\r\");\n    case 120:\n      {\n        let code;\n        ({\n          code,\n          pos\n        } = readHexChar(input, pos, lineStart, curLine, 2, false, throwOnInvalid, errors));\n        return res(code === null ? null : String.fromCharCode(code));\n      }\n    case 117:\n      {\n        let code;\n        ({\n          code,\n          pos\n        } = readCodePoint(input, pos, lineStart, curLine, throwOnInvalid, errors));\n        return res(code === null ? null : String.fromCodePoint(code));\n      }\n    case 116:\n      return res(\"\\t\");\n    case 98:\n      return res(\"\\b\");\n    case 118:\n      return res(\"\\u000b\");\n    case 102:\n      return res(\"\\f\");\n    case 13:\n      if (input.charCodeAt(pos) === 10) {\n        ++pos;\n      }\n    case 10:\n      lineStart = pos;\n      ++curLine;\n    case 8232:\n    case 8233:\n      return res(\"\");\n    case 56:\n    case 57:\n      if (inTemplate) {\n        return res(null);\n      } else {\n        errors.strictNumericEscape(pos - 1, lineStart, curLine);\n      }\n    default:\n      if (ch >= 48 && ch <= 55) {\n        const startPos = pos - 1;\n        const match = input.slice(startPos, pos + 2).match(/^[0-7]+/);\n        let octalStr = match[0];\n        let octal = parseInt(octalStr, 8);\n        if (octal > 255) {\n          octalStr = octalStr.slice(0, -1);\n          octal = parseInt(octalStr, 8);\n        }\n        pos += octalStr.length - 1;\n        const next = input.charCodeAt(pos);\n        if (octalStr !== \"0\" || next === 56 || next === 57) {\n          if (inTemplate) {\n            return res(null);\n          } else {\n            errors.strictNumericEscape(startPos, lineStart, curLine);\n          }\n        }\n        return res(String.fromCharCode(octal));\n      }\n      return res(String.fromCharCode(ch));\n  }\n}\nfunction readHexChar(input, pos, lineStart, curLine, len, forceLen, throwOnInvalid, errors) {\n  const initialPos = pos;\n  let n;\n  ({\n    n,\n    pos\n  } = readInt(input, pos, lineStart, curLine, 16, len, forceLen, false, errors, !throwOnInvalid));\n  if (n === null) {\n    if (throwOnInvalid) {\n      errors.invalidEscapeSequence(initialPos, lineStart, curLine);\n    } else {\n      pos = initialPos - 1;\n    }\n  }\n  return {\n    code: n,\n    pos\n  };\n}\nfunction readInt(input, pos, lineStart, curLine, radix, len, forceLen, allowNumSeparator, errors, bailOnError) {\n  const start = pos;\n  const forbiddenSiblings = radix === 16 ? forbiddenNumericSeparatorSiblings.hex : forbiddenNumericSeparatorSiblings.decBinOct;\n  const isAllowedSibling = radix === 16 ? isAllowedNumericSeparatorSibling.hex : radix === 10 ? isAllowedNumericSeparatorSibling.dec : radix === 8 ? isAllowedNumericSeparatorSibling.oct : isAllowedNumericSeparatorSibling.bin;\n  let invalid = false;\n  let total = 0;\n  for (let i = 0, e = len == null ? Infinity : len; i < e; ++i) {\n    const code = input.charCodeAt(pos);\n    let val;\n    if (code === 95 && allowNumSeparator !== \"bail\") {\n      const prev = input.charCodeAt(pos - 1);\n      const next = input.charCodeAt(pos + 1);\n      if (!allowNumSeparator) {\n        if (bailOnError) return {\n          n: null,\n          pos\n        };\n        errors.numericSeparatorInEscapeSequence(pos, lineStart, curLine);\n      } else if (Number.isNaN(next) || !isAllowedSibling(next) || forbiddenSiblings.has(prev) || forbiddenSiblings.has(next)) {\n        if (bailOnError) return {\n          n: null,\n          pos\n        };\n        errors.unexpectedNumericSeparator(pos, lineStart, curLine);\n      }\n      ++pos;\n      continue;\n    }\n    if (code >= 97) {\n      val = code - 97 + 10;\n    } else if (code >= 65) {\n      val = code - 65 + 10;\n    } else if (_isDigit(code)) {\n      val = code - 48;\n    } else {\n      val = Infinity;\n    }\n    if (val >= radix) {\n      if (val <= 9 && bailOnError) {\n        return {\n          n: null,\n          pos\n        };\n      } else if (val <= 9 && errors.invalidDigit(pos, lineStart, curLine, radix)) {\n        val = 0;\n      } else if (forceLen) {\n        val = 0;\n        invalid = true;\n      } else {\n        break;\n      }\n    }\n    ++pos;\n    total = total * radix + val;\n  }\n  if (pos === start || len != null && pos - start !== len || invalid) {\n    return {\n      n: null,\n      pos\n    };\n  }\n  return {\n    n: total,\n    pos\n  };\n}\nfunction readCodePoint(input, pos, lineStart, curLine, throwOnInvalid, errors) {\n  const ch = input.charCodeAt(pos);\n  let code;\n  if (ch === 123) {\n    ++pos;\n    ({\n      code,\n      pos\n    } = readHexChar(input, pos, lineStart, curLine, input.indexOf(\"}\", pos) - pos, true, throwOnInvalid, errors));\n    ++pos;\n    if (code !== null && code > 0x10ffff) {\n      if (throwOnInvalid) {\n        errors.invalidCodePoint(pos, lineStart, curLine);\n      } else {\n        return {\n          code: null,\n          pos\n        };\n      }\n    }\n  } else {\n    ({\n      code,\n      pos\n    } = readHexChar(input, pos, lineStart, curLine, 4, false, throwOnInvalid, errors));\n  }\n  return {\n    code,\n    pos\n  };\n}\nconst _excluded = [\"at\"],\n  _excluded2 = [\"at\"];\nfunction buildPosition(pos, lineStart, curLine) {\n  return new Position(curLine, pos - lineStart, pos);\n}\nconst VALID_REGEX_FLAGS = new Set([103, 109, 115, 105, 121, 117, 100, 118]);\nclass Token {\n  constructor(state) {\n    this.type = state.type;\n    this.value = state.value;\n    this.start = state.start;\n    this.end = state.end;\n    this.loc = new SourceLocation(state.startLoc, state.endLoc);\n  }\n}\nclass Tokenizer extends CommentsParser {\n  constructor(options, input) {\n    super();\n    this.isLookahead = void 0;\n    this.tokens = [];\n    this.errorHandlers_readInt = {\n      invalidDigit: (pos, lineStart, curLine, radix) => {\n        if (!this.options.errorRecovery) return false;\n        this.raise(Errors.InvalidDigit, {\n          at: buildPosition(pos, lineStart, curLine),\n          radix\n        });\n        return true;\n      },\n      numericSeparatorInEscapeSequence: this.errorBuilder(Errors.NumericSeparatorInEscapeSequence),\n      unexpectedNumericSeparator: this.errorBuilder(Errors.UnexpectedNumericSeparator)\n    };\n    this.errorHandlers_readCodePoint = Object.assign({}, this.errorHandlers_readInt, {\n      invalidEscapeSequence: this.errorBuilder(Errors.InvalidEscapeSequence),\n      invalidCodePoint: this.errorBuilder(Errors.InvalidCodePoint)\n    });\n    this.errorHandlers_readStringContents_string = Object.assign({}, this.errorHandlers_readCodePoint, {\n      strictNumericEscape: (pos, lineStart, curLine) => {\n        this.recordStrictModeErrors(Errors.StrictNumericEscape, {\n          at: buildPosition(pos, lineStart, curLine)\n        });\n      },\n      unterminated: (pos, lineStart, curLine) => {\n        throw this.raise(Errors.UnterminatedString, {\n          at: buildPosition(pos - 1, lineStart, curLine)\n        });\n      }\n    });\n    this.errorHandlers_readStringContents_template = Object.assign({}, this.errorHandlers_readCodePoint, {\n      strictNumericEscape: this.errorBuilder(Errors.StrictNumericEscape),\n      unterminated: (pos, lineStart, curLine) => {\n        throw this.raise(Errors.UnterminatedTemplate, {\n          at: buildPosition(pos, lineStart, curLine)\n        });\n      }\n    });\n    this.state = new State();\n    this.state.init(options);\n    this.input = input;\n    this.length = input.length;\n    this.isLookahead = false;\n  }\n  pushToken(token) {\n    this.tokens.length = this.state.tokensLength;\n    this.tokens.push(token);\n    ++this.state.tokensLength;\n  }\n  next() {\n    this.checkKeywordEscapes();\n    if (this.options.tokens) {\n      this.pushToken(new Token(this.state));\n    }\n    this.state.lastTokStart = this.state.start;\n    this.state.lastTokEndLoc = this.state.endLoc;\n    this.state.lastTokStartLoc = this.state.startLoc;\n    this.nextToken();\n  }\n  eat(type) {\n    if (this.match(type)) {\n      this.next();\n      return true;\n    } else {\n      return false;\n    }\n  }\n  match(type) {\n    return this.state.type === type;\n  }\n  createLookaheadState(state) {\n    return {\n      pos: state.pos,\n      value: null,\n      type: state.type,\n      start: state.start,\n      end: state.end,\n      context: [this.curContext()],\n      inType: state.inType,\n      startLoc: state.startLoc,\n      lastTokEndLoc: state.lastTokEndLoc,\n      curLine: state.curLine,\n      lineStart: state.lineStart,\n      curPosition: state.curPosition\n    };\n  }\n  lookahead() {\n    const old = this.state;\n    this.state = this.createLookaheadState(old);\n    this.isLookahead = true;\n    this.nextToken();\n    this.isLookahead = false;\n    const curr = this.state;\n    this.state = old;\n    return curr;\n  }\n  nextTokenStart() {\n    return this.nextTokenStartSince(this.state.pos);\n  }\n  nextTokenStartSince(pos) {\n    skipWhiteSpace.lastIndex = pos;\n    return skipWhiteSpace.test(this.input) ? skipWhiteSpace.lastIndex : pos;\n  }\n  lookaheadCharCode() {\n    return this.input.charCodeAt(this.nextTokenStart());\n  }\n  codePointAtPos(pos) {\n    let cp = this.input.charCodeAt(pos);\n    if ((cp & 0xfc00) === 0xd800 && ++pos < this.input.length) {\n      const trail = this.input.charCodeAt(pos);\n      if ((trail & 0xfc00) === 0xdc00) {\n        cp = 0x10000 + ((cp & 0x3ff) << 10) + (trail & 0x3ff);\n      }\n    }\n    return cp;\n  }\n  setStrict(strict) {\n    this.state.strict = strict;\n    if (strict) {\n      this.state.strictErrors.forEach(([toParseError, at]) => this.raise(toParseError, {\n        at\n      }));\n      this.state.strictErrors.clear();\n    }\n  }\n  curContext() {\n    return this.state.context[this.state.context.length - 1];\n  }\n  nextToken() {\n    this.skipSpace();\n    this.state.start = this.state.pos;\n    if (!this.isLookahead) this.state.startLoc = this.state.curPosition();\n    if (this.state.pos >= this.length) {\n      this.finishToken(137);\n      return;\n    }\n    this.getTokenFromCode(this.codePointAtPos(this.state.pos));\n  }\n  skipBlockComment(commentEnd) {\n    let startLoc;\n    if (!this.isLookahead) startLoc = this.state.curPosition();\n    const start = this.state.pos;\n    const end = this.input.indexOf(commentEnd, start + 2);\n    if (end === -1) {\n      throw this.raise(Errors.UnterminatedComment, {\n        at: this.state.curPosition()\n      });\n    }\n    this.state.pos = end + commentEnd.length;\n    lineBreakG.lastIndex = start + 2;\n    while (lineBreakG.test(this.input) && lineBreakG.lastIndex <= end) {\n      ++this.state.curLine;\n      this.state.lineStart = lineBreakG.lastIndex;\n    }\n    if (this.isLookahead) return;\n    const comment = {\n      type: \"CommentBlock\",\n      value: this.input.slice(start + 2, end),\n      start,\n      end: end + commentEnd.length,\n      loc: new SourceLocation(startLoc, this.state.curPosition())\n    };\n    if (this.options.tokens) this.pushToken(comment);\n    return comment;\n  }\n  skipLineComment(startSkip) {\n    const start = this.state.pos;\n    let startLoc;\n    if (!this.isLookahead) startLoc = this.state.curPosition();\n    let ch = this.input.charCodeAt(this.state.pos += startSkip);\n    if (this.state.pos < this.length) {\n      while (!isNewLine(ch) && ++this.state.pos < this.length) {\n        ch = this.input.charCodeAt(this.state.pos);\n      }\n    }\n    if (this.isLookahead) return;\n    const end = this.state.pos;\n    const value = this.input.slice(start + startSkip, end);\n    const comment = {\n      type: \"CommentLine\",\n      value,\n      start,\n      end,\n      loc: new SourceLocation(startLoc, this.state.curPosition())\n    };\n    if (this.options.tokens) this.pushToken(comment);\n    return comment;\n  }\n  skipSpace() {\n    const spaceStart = this.state.pos;\n    const comments = [];\n    loop: while (this.state.pos < this.length) {\n      const ch = this.input.charCodeAt(this.state.pos);\n      switch (ch) {\n        case 32:\n        case 160:\n        case 9:\n          ++this.state.pos;\n          break;\n        case 13:\n          if (this.input.charCodeAt(this.state.pos + 1) === 10) {\n            ++this.state.pos;\n          }\n        case 10:\n        case 8232:\n        case 8233:\n          ++this.state.pos;\n          ++this.state.curLine;\n          this.state.lineStart = this.state.pos;\n          break;\n        case 47:\n          switch (this.input.charCodeAt(this.state.pos + 1)) {\n            case 42:\n              {\n                const comment = this.skipBlockComment(\"*/\");\n                if (comment !== undefined) {\n                  this.addComment(comment);\n                  if (this.options.attachComment) comments.push(comment);\n                }\n                break;\n              }\n            case 47:\n              {\n                const comment = this.skipLineComment(2);\n                if (comment !== undefined) {\n                  this.addComment(comment);\n                  if (this.options.attachComment) comments.push(comment);\n                }\n                break;\n              }\n            default:\n              break loop;\n          }\n          break;\n        default:\n          if (isWhitespace(ch)) {\n            ++this.state.pos;\n          } else if (ch === 45 && !this.inModule && this.options.annexB) {\n            const pos = this.state.pos;\n            if (this.input.charCodeAt(pos + 1) === 45 && this.input.charCodeAt(pos + 2) === 62 && (spaceStart === 0 || this.state.lineStart > spaceStart)) {\n              const comment = this.skipLineComment(3);\n              if (comment !== undefined) {\n                this.addComment(comment);\n                if (this.options.attachComment) comments.push(comment);\n              }\n            } else {\n              break loop;\n            }\n          } else if (ch === 60 && !this.inModule && this.options.annexB) {\n            const pos = this.state.pos;\n            if (this.input.charCodeAt(pos + 1) === 33 && this.input.charCodeAt(pos + 2) === 45 && this.input.charCodeAt(pos + 3) === 45) {\n              const comment = this.skipLineComment(4);\n              if (comment !== undefined) {\n                this.addComment(comment);\n                if (this.options.attachComment) comments.push(comment);\n              }\n            } else {\n              break loop;\n            }\n          } else {\n            break loop;\n          }\n      }\n    }\n    if (comments.length > 0) {\n      const end = this.state.pos;\n      const commentWhitespace = {\n        start: spaceStart,\n        end,\n        comments,\n        leadingNode: null,\n        trailingNode: null,\n        containingNode: null\n      };\n      this.state.commentStack.push(commentWhitespace);\n    }\n  }\n  finishToken(type, val) {\n    this.state.end = this.state.pos;\n    this.state.endLoc = this.state.curPosition();\n    const prevType = this.state.type;\n    this.state.type = type;\n    this.state.value = val;\n    if (!this.isLookahead) {\n      this.updateContext(prevType);\n    }\n  }\n  replaceToken(type) {\n    this.state.type = type;\n    this.updateContext();\n  }\n  readToken_numberSign() {\n    if (this.state.pos === 0 && this.readToken_interpreter()) {\n      return;\n    }\n    const nextPos = this.state.pos + 1;\n    const next = this.codePointAtPos(nextPos);\n    if (next >= 48 && next <= 57) {\n      throw this.raise(Errors.UnexpectedDigitAfterHash, {\n        at: this.state.curPosition()\n      });\n    }\n    if (next === 123 || next === 91 && this.hasPlugin(\"recordAndTuple\")) {\n      this.expectPlugin(\"recordAndTuple\");\n      if (this.getPluginOption(\"recordAndTuple\", \"syntaxType\") === \"bar\") {\n        throw this.raise(next === 123 ? Errors.RecordExpressionHashIncorrectStartSyntaxType : Errors.TupleExpressionHashIncorrectStartSyntaxType, {\n          at: this.state.curPosition()\n        });\n      }\n      this.state.pos += 2;\n      if (next === 123) {\n        this.finishToken(7);\n      } else {\n        this.finishToken(1);\n      }\n    } else if (isIdentifierStart(next)) {\n      ++this.state.pos;\n      this.finishToken(136, this.readWord1(next));\n    } else if (next === 92) {\n      ++this.state.pos;\n      this.finishToken(136, this.readWord1());\n    } else {\n      this.finishOp(27, 1);\n    }\n  }\n  readToken_dot() {\n    const next = this.input.charCodeAt(this.state.pos + 1);\n    if (next >= 48 && next <= 57) {\n      this.readNumber(true);\n      return;\n    }\n    if (next === 46 && this.input.charCodeAt(this.state.pos + 2) === 46) {\n      this.state.pos += 3;\n      this.finishToken(21);\n    } else {\n      ++this.state.pos;\n      this.finishToken(16);\n    }\n  }\n  readToken_slash() {\n    const next = this.input.charCodeAt(this.state.pos + 1);\n    if (next === 61) {\n      this.finishOp(31, 2);\n    } else {\n      this.finishOp(56, 1);\n    }\n  }\n  readToken_interpreter() {\n    if (this.state.pos !== 0 || this.length < 2) return false;\n    let ch = this.input.charCodeAt(this.state.pos + 1);\n    if (ch !== 33) return false;\n    const start = this.state.pos;\n    this.state.pos += 1;\n    while (!isNewLine(ch) && ++this.state.pos < this.length) {\n      ch = this.input.charCodeAt(this.state.pos);\n    }\n    const value = this.input.slice(start + 2, this.state.pos);\n    this.finishToken(28, value);\n    return true;\n  }\n  readToken_mult_modulo(code) {\n    let type = code === 42 ? 55 : 54;\n    let width = 1;\n    let next = this.input.charCodeAt(this.state.pos + 1);\n    if (code === 42 && next === 42) {\n      width++;\n      next = this.input.charCodeAt(this.state.pos + 2);\n      type = 57;\n    }\n    if (next === 61 && !this.state.inType) {\n      width++;\n      type = code === 37 ? 33 : 30;\n    }\n    this.finishOp(type, width);\n  }\n  readToken_pipe_amp(code) {\n    const next = this.input.charCodeAt(this.state.pos + 1);\n    if (next === code) {\n      if (this.input.charCodeAt(this.state.pos + 2) === 61) {\n        this.finishOp(30, 3);\n      } else {\n        this.finishOp(code === 124 ? 41 : 42, 2);\n      }\n      return;\n    }\n    if (code === 124) {\n      if (next === 62) {\n        this.finishOp(39, 2);\n        return;\n      }\n      if (this.hasPlugin(\"recordAndTuple\") && next === 125) {\n        if (this.getPluginOption(\"recordAndTuple\", \"syntaxType\") !== \"bar\") {\n          throw this.raise(Errors.RecordExpressionBarIncorrectEndSyntaxType, {\n            at: this.state.curPosition()\n          });\n        }\n        this.state.pos += 2;\n        this.finishToken(9);\n        return;\n      }\n      if (this.hasPlugin(\"recordAndTuple\") && next === 93) {\n        if (this.getPluginOption(\"recordAndTuple\", \"syntaxType\") !== \"bar\") {\n          throw this.raise(Errors.TupleExpressionBarIncorrectEndSyntaxType, {\n            at: this.state.curPosition()\n          });\n        }\n        this.state.pos += 2;\n        this.finishToken(4);\n        return;\n      }\n    }\n    if (next === 61) {\n      this.finishOp(30, 2);\n      return;\n    }\n    this.finishOp(code === 124 ? 43 : 45, 1);\n  }\n  readToken_caret() {\n    const next = this.input.charCodeAt(this.state.pos + 1);\n    if (next === 61 && !this.state.inType) {\n      this.finishOp(32, 2);\n    } else if (next === 94 && this.hasPlugin([\"pipelineOperator\", {\n      proposal: \"hack\",\n      topicToken: \"^^\"\n    }])) {\n      this.finishOp(37, 2);\n      const lookaheadCh = this.input.codePointAt(this.state.pos);\n      if (lookaheadCh === 94) {\n        this.unexpected();\n      }\n    } else {\n      this.finishOp(44, 1);\n    }\n  }\n  readToken_atSign() {\n    const next = this.input.charCodeAt(this.state.pos + 1);\n    if (next === 64 && this.hasPlugin([\"pipelineOperator\", {\n      proposal: \"hack\",\n      topicToken: \"@@\"\n    }])) {\n      this.finishOp(38, 2);\n    } else {\n      this.finishOp(26, 1);\n    }\n  }\n  readToken_plus_min(code) {\n    const next = this.input.charCodeAt(this.state.pos + 1);\n    if (next === code) {\n      this.finishOp(34, 2);\n      return;\n    }\n    if (next === 61) {\n      this.finishOp(30, 2);\n    } else {\n      this.finishOp(53, 1);\n    }\n  }\n  readToken_lt() {\n    const {\n      pos\n    } = this.state;\n    const next = this.input.charCodeAt(pos + 1);\n    if (next === 60) {\n      if (this.input.charCodeAt(pos + 2) === 61) {\n        this.finishOp(30, 3);\n        return;\n      }\n      this.finishOp(51, 2);\n      return;\n    }\n    if (next === 61) {\n      this.finishOp(49, 2);\n      return;\n    }\n    this.finishOp(47, 1);\n  }\n  readToken_gt() {\n    const {\n      pos\n    } = this.state;\n    const next = this.input.charCodeAt(pos + 1);\n    if (next === 62) {\n      const size = this.input.charCodeAt(pos + 2) === 62 ? 3 : 2;\n      if (this.input.charCodeAt(pos + size) === 61) {\n        this.finishOp(30, size + 1);\n        return;\n      }\n      this.finishOp(52, size);\n      return;\n    }\n    if (next === 61) {\n      this.finishOp(49, 2);\n      return;\n    }\n    this.finishOp(48, 1);\n  }\n  readToken_eq_excl(code) {\n    const next = this.input.charCodeAt(this.state.pos + 1);\n    if (next === 61) {\n      this.finishOp(46, this.input.charCodeAt(this.state.pos + 2) === 61 ? 3 : 2);\n      return;\n    }\n    if (code === 61 && next === 62) {\n      this.state.pos += 2;\n      this.finishToken(19);\n      return;\n    }\n    this.finishOp(code === 61 ? 29 : 35, 1);\n  }\n  readToken_question() {\n    const next = this.input.charCodeAt(this.state.pos + 1);\n    const next2 = this.input.charCodeAt(this.state.pos + 2);\n    if (next === 63) {\n      if (next2 === 61) {\n        this.finishOp(30, 3);\n      } else {\n        this.finishOp(40, 2);\n      }\n    } else if (next === 46 && !(next2 >= 48 && next2 <= 57)) {\n      this.state.pos += 2;\n      this.finishToken(18);\n    } else {\n      ++this.state.pos;\n      this.finishToken(17);\n    }\n  }\n  getTokenFromCode(code) {\n    switch (code) {\n      case 46:\n        this.readToken_dot();\n        return;\n      case 40:\n        ++this.state.pos;\n        this.finishToken(10);\n        return;\n      case 41:\n        ++this.state.pos;\n        this.finishToken(11);\n        return;\n      case 59:\n        ++this.state.pos;\n        this.finishToken(13);\n        return;\n      case 44:\n        ++this.state.pos;\n        this.finishToken(12);\n        return;\n      case 91:\n        if (this.hasPlugin(\"recordAndTuple\") && this.input.charCodeAt(this.state.pos + 1) === 124) {\n          if (this.getPluginOption(\"recordAndTuple\", \"syntaxType\") !== \"bar\") {\n            throw this.raise(Errors.TupleExpressionBarIncorrectStartSyntaxType, {\n              at: this.state.curPosition()\n            });\n          }\n          this.state.pos += 2;\n          this.finishToken(2);\n        } else {\n          ++this.state.pos;\n          this.finishToken(0);\n        }\n        return;\n      case 93:\n        ++this.state.pos;\n        this.finishToken(3);\n        return;\n      case 123:\n        if (this.hasPlugin(\"recordAndTuple\") && this.input.charCodeAt(this.state.pos + 1) === 124) {\n          if (this.getPluginOption(\"recordAndTuple\", \"syntaxType\") !== \"bar\") {\n            throw this.raise(Errors.RecordExpressionBarIncorrectStartSyntaxType, {\n              at: this.state.curPosition()\n            });\n          }\n          this.state.pos += 2;\n          this.finishToken(6);\n        } else {\n          ++this.state.pos;\n          this.finishToken(5);\n        }\n        return;\n      case 125:\n        ++this.state.pos;\n        this.finishToken(8);\n        return;\n      case 58:\n        if (this.hasPlugin(\"functionBind\") && this.input.charCodeAt(this.state.pos + 1) === 58) {\n          this.finishOp(15, 2);\n        } else {\n          ++this.state.pos;\n          this.finishToken(14);\n        }\n        return;\n      case 63:\n        this.readToken_question();\n        return;\n      case 96:\n        this.readTemplateToken();\n        return;\n      case 48:\n        {\n          const next = this.input.charCodeAt(this.state.pos + 1);\n          if (next === 120 || next === 88) {\n            this.readRadixNumber(16);\n            return;\n          }\n          if (next === 111 || next === 79) {\n            this.readRadixNumber(8);\n            return;\n          }\n          if (next === 98 || next === 66) {\n            this.readRadixNumber(2);\n            return;\n          }\n        }\n      case 49:\n      case 50:\n      case 51:\n      case 52:\n      case 53:\n      case 54:\n      case 55:\n      case 56:\n      case 57:\n        this.readNumber(false);\n        return;\n      case 34:\n      case 39:\n        this.readString(code);\n        return;\n      case 47:\n        this.readToken_slash();\n        return;\n      case 37:\n      case 42:\n        this.readToken_mult_modulo(code);\n        return;\n      case 124:\n      case 38:\n        this.readToken_pipe_amp(code);\n        return;\n      case 94:\n        this.readToken_caret();\n        return;\n      case 43:\n      case 45:\n        this.readToken_plus_min(code);\n        return;\n      case 60:\n        this.readToken_lt();\n        return;\n      case 62:\n        this.readToken_gt();\n        return;\n      case 61:\n      case 33:\n        this.readToken_eq_excl(code);\n        return;\n      case 126:\n        this.finishOp(36, 1);\n        return;\n      case 64:\n        this.readToken_atSign();\n        return;\n      case 35:\n        this.readToken_numberSign();\n        return;\n      case 92:\n        this.readWord();\n        return;\n      default:\n        if (isIdentifierStart(code)) {\n          this.readWord(code);\n          return;\n        }\n    }\n    throw this.raise(Errors.InvalidOrUnexpectedToken, {\n      at: this.state.curPosition(),\n      unexpected: String.fromCodePoint(code)\n    });\n  }\n  finishOp(type, size) {\n    const str = this.input.slice(this.state.pos, this.state.pos + size);\n    this.state.pos += size;\n    this.finishToken(type, str);\n  }\n  readRegexp() {\n    const startLoc = this.state.startLoc;\n    const start = this.state.start + 1;\n    let escaped, inClass;\n    let {\n      pos\n    } = this.state;\n    for (;; ++pos) {\n      if (pos >= this.length) {\n        throw this.raise(Errors.UnterminatedRegExp, {\n          at: createPositionWithColumnOffset(startLoc, 1)\n        });\n      }\n      const ch = this.input.charCodeAt(pos);\n      if (isNewLine(ch)) {\n        throw this.raise(Errors.UnterminatedRegExp, {\n          at: createPositionWithColumnOffset(startLoc, 1)\n        });\n      }\n      if (escaped) {\n        escaped = false;\n      } else {\n        if (ch === 91) {\n          inClass = true;\n        } else if (ch === 93 && inClass) {\n          inClass = false;\n        } else if (ch === 47 && !inClass) {\n          break;\n        }\n        escaped = ch === 92;\n      }\n    }\n    const content = this.input.slice(start, pos);\n    ++pos;\n    let mods = \"\";\n    const nextPos = () => createPositionWithColumnOffset(startLoc, pos + 2 - start);\n    while (pos < this.length) {\n      const cp = this.codePointAtPos(pos);\n      const char = String.fromCharCode(cp);\n      if (VALID_REGEX_FLAGS.has(cp)) {\n        if (cp === 118) {\n          this.expectPlugin(\"regexpUnicodeSets\", nextPos());\n          if (mods.includes(\"u\")) {\n            this.raise(Errors.IncompatibleRegExpUVFlags, {\n              at: nextPos()\n            });\n          }\n        } else if (cp === 117) {\n          if (mods.includes(\"v\")) {\n            this.raise(Errors.IncompatibleRegExpUVFlags, {\n              at: nextPos()\n            });\n          }\n        }\n        if (mods.includes(char)) {\n          this.raise(Errors.DuplicateRegExpFlags, {\n            at: nextPos()\n          });\n        }\n      } else if (isIdentifierChar(cp) || cp === 92) {\n        this.raise(Errors.MalformedRegExpFlags, {\n          at: nextPos()\n        });\n      } else {\n        break;\n      }\n      ++pos;\n      mods += char;\n    }\n    this.state.pos = pos;\n    this.finishToken(135, {\n      pattern: content,\n      flags: mods\n    });\n  }\n  readInt(radix, len, forceLen = false, allowNumSeparator = true) {\n    const {\n      n,\n      pos\n    } = readInt(this.input, this.state.pos, this.state.lineStart, this.state.curLine, radix, len, forceLen, allowNumSeparator, this.errorHandlers_readInt, false);\n    this.state.pos = pos;\n    return n;\n  }\n  readRadixNumber(radix) {\n    const startLoc = this.state.curPosition();\n    let isBigInt = false;\n    this.state.pos += 2;\n    const val = this.readInt(radix);\n    if (val == null) {\n      this.raise(Errors.InvalidDigit, {\n        at: createPositionWithColumnOffset(startLoc, 2),\n        radix\n      });\n    }\n    const next = this.input.charCodeAt(this.state.pos);\n    if (next === 110) {\n      ++this.state.pos;\n      isBigInt = true;\n    } else if (next === 109) {\n      throw this.raise(Errors.InvalidDecimal, {\n        at: startLoc\n      });\n    }\n    if (isIdentifierStart(this.codePointAtPos(this.state.pos))) {\n      throw this.raise(Errors.NumberIdentifier, {\n        at: this.state.curPosition()\n      });\n    }\n    if (isBigInt) {\n      const str = this.input.slice(startLoc.index, this.state.pos).replace(/[_n]/g, \"\");\n      this.finishToken(133, str);\n      return;\n    }\n    this.finishToken(132, val);\n  }\n  readNumber(startsWithDot) {\n    const start = this.state.pos;\n    const startLoc = this.state.curPosition();\n    let isFloat = false;\n    let isBigInt = false;\n    let isDecimal = false;\n    let hasExponent = false;\n    let isOctal = false;\n    if (!startsWithDot && this.readInt(10) === null) {\n      this.raise(Errors.InvalidNumber, {\n        at: this.state.curPosition()\n      });\n    }\n    const hasLeadingZero = this.state.pos - start >= 2 && this.input.charCodeAt(start) === 48;\n    if (hasLeadingZero) {\n      const integer = this.input.slice(start, this.state.pos);\n      this.recordStrictModeErrors(Errors.StrictOctalLiteral, {\n        at: startLoc\n      });\n      if (!this.state.strict) {\n        const underscorePos = integer.indexOf(\"_\");\n        if (underscorePos > 0) {\n          this.raise(Errors.ZeroDigitNumericSeparator, {\n            at: createPositionWithColumnOffset(startLoc, underscorePos)\n          });\n        }\n      }\n      isOctal = hasLeadingZero && !/[89]/.test(integer);\n    }\n    let next = this.input.charCodeAt(this.state.pos);\n    if (next === 46 && !isOctal) {\n      ++this.state.pos;\n      this.readInt(10);\n      isFloat = true;\n      next = this.input.charCodeAt(this.state.pos);\n    }\n    if ((next === 69 || next === 101) && !isOctal) {\n      next = this.input.charCodeAt(++this.state.pos);\n      if (next === 43 || next === 45) {\n        ++this.state.pos;\n      }\n      if (this.readInt(10) === null) {\n        this.raise(Errors.InvalidOrMissingExponent, {\n          at: startLoc\n        });\n      }\n      isFloat = true;\n      hasExponent = true;\n      next = this.input.charCodeAt(this.state.pos);\n    }\n    if (next === 110) {\n      if (isFloat || hasLeadingZero) {\n        this.raise(Errors.InvalidBigIntLiteral, {\n          at: startLoc\n        });\n      }\n      ++this.state.pos;\n      isBigInt = true;\n    }\n    if (next === 109) {\n      this.expectPlugin(\"decimal\", this.state.curPosition());\n      if (hasExponent || hasLeadingZero) {\n        this.raise(Errors.InvalidDecimal, {\n          at: startLoc\n        });\n      }\n      ++this.state.pos;\n      isDecimal = true;\n    }\n    if (isIdentifierStart(this.codePointAtPos(this.state.pos))) {\n      throw this.raise(Errors.NumberIdentifier, {\n        at: this.state.curPosition()\n      });\n    }\n    const str = this.input.slice(start, this.state.pos).replace(/[_mn]/g, \"\");\n    if (isBigInt) {\n      this.finishToken(133, str);\n      return;\n    }\n    if (isDecimal) {\n      this.finishToken(134, str);\n      return;\n    }\n    const val = isOctal ? parseInt(str, 8) : parseFloat(str);\n    this.finishToken(132, val);\n  }\n  readCodePoint(throwOnInvalid) {\n    const {\n      code,\n      pos\n    } = readCodePoint(this.input, this.state.pos, this.state.lineStart, this.state.curLine, throwOnInvalid, this.errorHandlers_readCodePoint);\n    this.state.pos = pos;\n    return code;\n  }\n  readString(quote) {\n    const {\n      str,\n      pos,\n      curLine,\n      lineStart\n    } = readStringContents(quote === 34 ? \"double\" : \"single\", this.input, this.state.pos + 1, this.state.lineStart, this.state.curLine, this.errorHandlers_readStringContents_string);\n    this.state.pos = pos + 1;\n    this.state.lineStart = lineStart;\n    this.state.curLine = curLine;\n    this.finishToken(131, str);\n  }\n  readTemplateContinuation() {\n    if (!this.match(8)) {\n      this.unexpected(null, 8);\n    }\n    this.state.pos--;\n    this.readTemplateToken();\n  }\n  readTemplateToken() {\n    const opening = this.input[this.state.pos];\n    const {\n      str,\n      firstInvalidLoc,\n      pos,\n      curLine,\n      lineStart\n    } = readStringContents(\"template\", this.input, this.state.pos + 1, this.state.lineStart, this.state.curLine, this.errorHandlers_readStringContents_template);\n    this.state.pos = pos + 1;\n    this.state.lineStart = lineStart;\n    this.state.curLine = curLine;\n    if (firstInvalidLoc) {\n      this.state.firstInvalidTemplateEscapePos = new Position(firstInvalidLoc.curLine, firstInvalidLoc.pos - firstInvalidLoc.lineStart, firstInvalidLoc.pos);\n    }\n    if (this.input.codePointAt(pos) === 96) {\n      this.finishToken(24, firstInvalidLoc ? null : opening + str + \"`\");\n    } else {\n      this.state.pos++;\n      this.finishToken(25, firstInvalidLoc ? null : opening + str + \"${\");\n    }\n  }\n  recordStrictModeErrors(toParseError, {\n    at\n  }) {\n    const index = at.index;\n    if (this.state.strict && !this.state.strictErrors.has(index)) {\n      this.raise(toParseError, {\n        at\n      });\n    } else {\n      this.state.strictErrors.set(index, [toParseError, at]);\n    }\n  }\n  readWord1(firstCode) {\n    this.state.containsEsc = false;\n    let word = \"\";\n    const start = this.state.pos;\n    let chunkStart = this.state.pos;\n    if (firstCode !== undefined) {\n      this.state.pos += firstCode <= 0xffff ? 1 : 2;\n    }\n    while (this.state.pos < this.length) {\n      const ch = this.codePointAtPos(this.state.pos);\n      if (isIdentifierChar(ch)) {\n        this.state.pos += ch <= 0xffff ? 1 : 2;\n      } else if (ch === 92) {\n        this.state.containsEsc = true;\n        word += this.input.slice(chunkStart, this.state.pos);\n        const escStart = this.state.curPosition();\n        const identifierCheck = this.state.pos === start ? isIdentifierStart : isIdentifierChar;\n        if (this.input.charCodeAt(++this.state.pos) !== 117) {\n          this.raise(Errors.MissingUnicodeEscape, {\n            at: this.state.curPosition()\n          });\n          chunkStart = this.state.pos - 1;\n          continue;\n        }\n        ++this.state.pos;\n        const esc = this.readCodePoint(true);\n        if (esc !== null) {\n          if (!identifierCheck(esc)) {\n            this.raise(Errors.EscapedCharNotAnIdentifier, {\n              at: escStart\n            });\n          }\n          word += String.fromCodePoint(esc);\n        }\n        chunkStart = this.state.pos;\n      } else {\n        break;\n      }\n    }\n    return word + this.input.slice(chunkStart, this.state.pos);\n  }\n  readWord(firstCode) {\n    const word = this.readWord1(firstCode);\n    const type = keywords$1.get(word);\n    if (type !== undefined) {\n      this.finishToken(type, tokenLabelName(type));\n    } else {\n      this.finishToken(130, word);\n    }\n  }\n  checkKeywordEscapes() {\n    const {\n      type\n    } = this.state;\n    if (tokenIsKeyword(type) && this.state.containsEsc) {\n      this.raise(Errors.InvalidEscapedReservedWord, {\n        at: this.state.startLoc,\n        reservedWord: tokenLabelName(type)\n      });\n    }\n  }\n  raise(toParseError, raiseProperties) {\n    const {\n        at\n      } = raiseProperties,\n      details = _objectWithoutPropertiesLoose(raiseProperties, _excluded);\n    const loc = at instanceof Position ? at : at.loc.start;\n    const error = toParseError({\n      loc,\n      details\n    });\n    if (!this.options.errorRecovery) throw error;\n    if (!this.isLookahead) this.state.errors.push(error);\n    return error;\n  }\n  raiseOverwrite(toParseError, raiseProperties) {\n    const {\n        at\n      } = raiseProperties,\n      details = _objectWithoutPropertiesLoose(raiseProperties, _excluded2);\n    const loc = at instanceof Position ? at : at.loc.start;\n    const pos = loc.index;\n    const errors = this.state.errors;\n    for (let i = errors.length - 1; i >= 0; i--) {\n      const error = errors[i];\n      if (error.loc.index === pos) {\n        return errors[i] = toParseError({\n          loc,\n          details\n        });\n      }\n      if (error.loc.index < pos) break;\n    }\n    return this.raise(toParseError, raiseProperties);\n  }\n  updateContext(prevType) {}\n  unexpected(loc, type) {\n    throw this.raise(Errors.UnexpectedToken, {\n      expected: type ? tokenLabelName(type) : null,\n      at: loc != null ? loc : this.state.startLoc\n    });\n  }\n  expectPlugin(pluginName, loc) {\n    if (this.hasPlugin(pluginName)) {\n      return true;\n    }\n    throw this.raise(Errors.MissingPlugin, {\n      at: loc != null ? loc : this.state.startLoc,\n      missingPlugin: [pluginName]\n    });\n  }\n  expectOnePlugin(pluginNames) {\n    if (!pluginNames.some(name => this.hasPlugin(name))) {\n      throw this.raise(Errors.MissingOneOfPlugins, {\n        at: this.state.startLoc,\n        missingPlugin: pluginNames\n      });\n    }\n  }\n  errorBuilder(error) {\n    return (pos, lineStart, curLine) => {\n      this.raise(error, {\n        at: buildPosition(pos, lineStart, curLine)\n      });\n    };\n  }\n}\nclass ClassScope {\n  constructor() {\n    this.privateNames = new Set();\n    this.loneAccessors = new Map();\n    this.undefinedPrivateNames = new Map();\n  }\n}\nclass ClassScopeHandler {\n  constructor(parser) {\n    this.parser = void 0;\n    this.stack = [];\n    this.undefinedPrivateNames = new Map();\n    this.parser = parser;\n  }\n  current() {\n    return this.stack[this.stack.length - 1];\n  }\n  enter() {\n    this.stack.push(new ClassScope());\n  }\n  exit() {\n    const oldClassScope = this.stack.pop();\n    const current = this.current();\n    for (const [name, loc] of Array.from(oldClassScope.undefinedPrivateNames)) {\n      if (current) {\n        if (!current.undefinedPrivateNames.has(name)) {\n          current.undefinedPrivateNames.set(name, loc);\n        }\n      } else {\n        this.parser.raise(Errors.InvalidPrivateFieldResolution, {\n          at: loc,\n          identifierName: name\n        });\n      }\n    }\n  }\n  declarePrivateName(name, elementType, loc) {\n    const {\n      privateNames,\n      loneAccessors,\n      undefinedPrivateNames\n    } = this.current();\n    let redefined = privateNames.has(name);\n    if (elementType & CLASS_ELEMENT_KIND_ACCESSOR) {\n      const accessor = redefined && loneAccessors.get(name);\n      if (accessor) {\n        const oldStatic = accessor & CLASS_ELEMENT_FLAG_STATIC;\n        const newStatic = elementType & CLASS_ELEMENT_FLAG_STATIC;\n        const oldKind = accessor & CLASS_ELEMENT_KIND_ACCESSOR;\n        const newKind = elementType & CLASS_ELEMENT_KIND_ACCESSOR;\n        redefined = oldKind === newKind || oldStatic !== newStatic;\n        if (!redefined) loneAccessors.delete(name);\n      } else if (!redefined) {\n        loneAccessors.set(name, elementType);\n      }\n    }\n    if (redefined) {\n      this.parser.raise(Errors.PrivateNameRedeclaration, {\n        at: loc,\n        identifierName: name\n      });\n    }\n    privateNames.add(name);\n    undefinedPrivateNames.delete(name);\n  }\n  usePrivateName(name, loc) {\n    let classScope;\n    for (classScope of this.stack) {\n      if (classScope.privateNames.has(name)) return;\n    }\n    if (classScope) {\n      classScope.undefinedPrivateNames.set(name, loc);\n    } else {\n      this.parser.raise(Errors.InvalidPrivateFieldResolution, {\n        at: loc,\n        identifierName: name\n      });\n    }\n  }\n}\nconst kExpression = 0,\n  kMaybeArrowParameterDeclaration = 1,\n  kMaybeAsyncArrowParameterDeclaration = 2,\n  kParameterDeclaration = 3;\nclass ExpressionScope {\n  constructor(type = kExpression) {\n    this.type = void 0;\n    this.type = type;\n  }\n  canBeArrowParameterDeclaration() {\n    return this.type === kMaybeAsyncArrowParameterDeclaration || this.type === kMaybeArrowParameterDeclaration;\n  }\n  isCertainlyParameterDeclaration() {\n    return this.type === kParameterDeclaration;\n  }\n}\nclass ArrowHeadParsingScope extends ExpressionScope {\n  constructor(type) {\n    super(type);\n    this.declarationErrors = new Map();\n  }\n  recordDeclarationError(ParsingErrorClass, {\n    at\n  }) {\n    const index = at.index;\n    this.declarationErrors.set(index, [ParsingErrorClass, at]);\n  }\n  clearDeclarationError(index) {\n    this.declarationErrors.delete(index);\n  }\n  iterateErrors(iterator) {\n    this.declarationErrors.forEach(iterator);\n  }\n}\nclass ExpressionScopeHandler {\n  constructor(parser) {\n    this.parser = void 0;\n    this.stack = [new ExpressionScope()];\n    this.parser = parser;\n  }\n  enter(scope) {\n    this.stack.push(scope);\n  }\n  exit() {\n    this.stack.pop();\n  }\n  recordParameterInitializerError(toParseError, {\n    at: node\n  }) {\n    const origin = {\n      at: node.loc.start\n    };\n    const {\n      stack\n    } = this;\n    let i = stack.length - 1;\n    let scope = stack[i];\n    while (!scope.isCertainlyParameterDeclaration()) {\n      if (scope.canBeArrowParameterDeclaration()) {\n        scope.recordDeclarationError(toParseError, origin);\n      } else {\n        return;\n      }\n      scope = stack[--i];\n    }\n    this.parser.raise(toParseError, origin);\n  }\n  recordArrowParameterBindingError(error, {\n    at: node\n  }) {\n    const {\n      stack\n    } = this;\n    const scope = stack[stack.length - 1];\n    const origin = {\n      at: node.loc.start\n    };\n    if (scope.isCertainlyParameterDeclaration()) {\n      this.parser.raise(error, origin);\n    } else if (scope.canBeArrowParameterDeclaration()) {\n      scope.recordDeclarationError(error, origin);\n    } else {\n      return;\n    }\n  }\n  recordAsyncArrowParametersError({\n    at\n  }) {\n    const {\n      stack\n    } = this;\n    let i = stack.length - 1;\n    let scope = stack[i];\n    while (scope.canBeArrowParameterDeclaration()) {\n      if (scope.type === kMaybeAsyncArrowParameterDeclaration) {\n        scope.recordDeclarationError(Errors.AwaitBindingIdentifier, {\n          at\n        });\n      }\n      scope = stack[--i];\n    }\n  }\n  validateAsPattern() {\n    const {\n      stack\n    } = this;\n    const currentScope = stack[stack.length - 1];\n    if (!currentScope.canBeArrowParameterDeclaration()) return;\n    currentScope.iterateErrors(([toParseError, loc]) => {\n      this.parser.raise(toParseError, {\n        at: loc\n      });\n      let i = stack.length - 2;\n      let scope = stack[i];\n      while (scope.canBeArrowParameterDeclaration()) {\n        scope.clearDeclarationError(loc.index);\n        scope = stack[--i];\n      }\n    });\n  }\n}\nfunction newParameterDeclarationScope() {\n  return new ExpressionScope(kParameterDeclaration);\n}\nfunction newArrowHeadScope() {\n  return new ArrowHeadParsingScope(kMaybeArrowParameterDeclaration);\n}\nfunction newAsyncArrowScope() {\n  return new ArrowHeadParsingScope(kMaybeAsyncArrowParameterDeclaration);\n}\nfunction newExpressionScope() {\n  return new ExpressionScope();\n}\nconst PARAM = 0b0000,\n  PARAM_YIELD = 0b0001,\n  PARAM_AWAIT = 0b0010,\n  PARAM_RETURN = 0b0100,\n  PARAM_IN = 0b1000;\nclass ProductionParameterHandler {\n  constructor() {\n    this.stacks = [];\n  }\n  enter(flags) {\n    this.stacks.push(flags);\n  }\n  exit() {\n    this.stacks.pop();\n  }\n  currentFlags() {\n    return this.stacks[this.stacks.length - 1];\n  }\n  get hasAwait() {\n    return (this.currentFlags() & PARAM_AWAIT) > 0;\n  }\n  get hasYield() {\n    return (this.currentFlags() & PARAM_YIELD) > 0;\n  }\n  get hasReturn() {\n    return (this.currentFlags() & PARAM_RETURN) > 0;\n  }\n  get hasIn() {\n    return (this.currentFlags() & PARAM_IN) > 0;\n  }\n}\nfunction functionFlags(isAsync, isGenerator) {\n  return (isAsync ? PARAM_AWAIT : 0) | (isGenerator ? PARAM_YIELD : 0);\n}\nclass UtilParser extends Tokenizer {\n  addExtra(node, key, value, enumerable = true) {\n    if (!node) return;\n    const extra = node.extra = node.extra || {};\n    if (enumerable) {\n      extra[key] = value;\n    } else {\n      Object.defineProperty(extra, key, {\n        enumerable,\n        value\n      });\n    }\n  }\n  isContextual(token) {\n    return this.state.type === token && !this.state.containsEsc;\n  }\n  isUnparsedContextual(nameStart, name) {\n    const nameEnd = nameStart + name.length;\n    if (this.input.slice(nameStart, nameEnd) === name) {\n      const nextCh = this.input.charCodeAt(nameEnd);\n      return !(isIdentifierChar(nextCh) || (nextCh & 0xfc00) === 0xd800);\n    }\n    return false;\n  }\n  isLookaheadContextual(name) {\n    const next = this.nextTokenStart();\n    return this.isUnparsedContextual(next, name);\n  }\n  eatContextual(token) {\n    if (this.isContextual(token)) {\n      this.next();\n      return true;\n    }\n    return false;\n  }\n  expectContextual(token, toParseError) {\n    if (!this.eatContextual(token)) {\n      if (toParseError != null) {\n        throw this.raise(toParseError, {\n          at: this.state.startLoc\n        });\n      }\n      this.unexpected(null, token);\n    }\n  }\n  canInsertSemicolon() {\n    return this.match(137) || this.match(8) || this.hasPrecedingLineBreak();\n  }\n  hasPrecedingLineBreak() {\n    return lineBreak.test(this.input.slice(this.state.lastTokEndLoc.index, this.state.start));\n  }\n  hasFollowingLineBreak() {\n    skipWhiteSpaceToLineBreak.lastIndex = this.state.end;\n    return skipWhiteSpaceToLineBreak.test(this.input);\n  }\n  isLineTerminator() {\n    return this.eat(13) || this.canInsertSemicolon();\n  }\n  semicolon(allowAsi = true) {\n    if (allowAsi ? this.isLineTerminator() : this.eat(13)) return;\n    this.raise(Errors.MissingSemicolon, {\n      at: this.state.lastTokEndLoc\n    });\n  }\n  expect(type, loc) {\n    this.eat(type) || this.unexpected(loc, type);\n  }\n  tryParse(fn, oldState = this.state.clone()) {\n    const abortSignal = {\n      node: null\n    };\n    try {\n      const node = fn((node = null) => {\n        abortSignal.node = node;\n        throw abortSignal;\n      });\n      if (this.state.errors.length > oldState.errors.length) {\n        const failState = this.state;\n        this.state = oldState;\n        this.state.tokensLength = failState.tokensLength;\n        return {\n          node,\n          error: failState.errors[oldState.errors.length],\n          thrown: false,\n          aborted: false,\n          failState\n        };\n      }\n      return {\n        node,\n        error: null,\n        thrown: false,\n        aborted: false,\n        failState: null\n      };\n    } catch (error) {\n      const failState = this.state;\n      this.state = oldState;\n      if (error instanceof SyntaxError) {\n        return {\n          node: null,\n          error,\n          thrown: true,\n          aborted: false,\n          failState\n        };\n      }\n      if (error === abortSignal) {\n        return {\n          node: abortSignal.node,\n          error: null,\n          thrown: false,\n          aborted: true,\n          failState\n        };\n      }\n      throw error;\n    }\n  }\n  checkExpressionErrors(refExpressionErrors, andThrow) {\n    if (!refExpressionErrors) return false;\n    const {\n      shorthandAssignLoc,\n      doubleProtoLoc,\n      privateKeyLoc,\n      optionalParametersLoc\n    } = refExpressionErrors;\n    const hasErrors = !!shorthandAssignLoc || !!doubleProtoLoc || !!optionalParametersLoc || !!privateKeyLoc;\n    if (!andThrow) {\n      return hasErrors;\n    }\n    if (shorthandAssignLoc != null) {\n      this.raise(Errors.InvalidCoverInitializedName, {\n        at: shorthandAssignLoc\n      });\n    }\n    if (doubleProtoLoc != null) {\n      this.raise(Errors.DuplicateProto, {\n        at: doubleProtoLoc\n      });\n    }\n    if (privateKeyLoc != null) {\n      this.raise(Errors.UnexpectedPrivateField, {\n        at: privateKeyLoc\n      });\n    }\n    if (optionalParametersLoc != null) {\n      this.unexpected(optionalParametersLoc);\n    }\n  }\n  isLiteralPropertyName() {\n    return tokenIsLiteralPropertyName(this.state.type);\n  }\n  isPrivateName(node) {\n    return node.type === \"PrivateName\";\n  }\n  getPrivateNameSV(node) {\n    return node.id.name;\n  }\n  hasPropertyAsPrivateName(node) {\n    return (node.type === \"MemberExpression\" || node.type === \"OptionalMemberExpression\") && this.isPrivateName(node.property);\n  }\n  isObjectProperty(node) {\n    return node.type === \"ObjectProperty\";\n  }\n  isObjectMethod(node) {\n    return node.type === \"ObjectMethod\";\n  }\n  initializeScopes(inModule = this.options.sourceType === \"module\") {\n    const oldLabels = this.state.labels;\n    this.state.labels = [];\n    const oldExportedIdentifiers = this.exportedIdentifiers;\n    this.exportedIdentifiers = new Set();\n    const oldInModule = this.inModule;\n    this.inModule = inModule;\n    const oldScope = this.scope;\n    const ScopeHandler = this.getScopeHandler();\n    this.scope = new ScopeHandler(this, inModule);\n    const oldProdParam = this.prodParam;\n    this.prodParam = new ProductionParameterHandler();\n    const oldClassScope = this.classScope;\n    this.classScope = new ClassScopeHandler(this);\n    const oldExpressionScope = this.expressionScope;\n    this.expressionScope = new ExpressionScopeHandler(this);\n    return () => {\n      this.state.labels = oldLabels;\n      this.exportedIdentifiers = oldExportedIdentifiers;\n      this.inModule = oldInModule;\n      this.scope = oldScope;\n      this.prodParam = oldProdParam;\n      this.classScope = oldClassScope;\n      this.expressionScope = oldExpressionScope;\n    };\n  }\n  enterInitialScopes() {\n    let paramFlags = PARAM;\n    if (this.inModule) {\n      paramFlags |= PARAM_AWAIT;\n    }\n    this.scope.enter(SCOPE_PROGRAM);\n    this.prodParam.enter(paramFlags);\n  }\n  checkDestructuringPrivate(refExpressionErrors) {\n    const {\n      privateKeyLoc\n    } = refExpressionErrors;\n    if (privateKeyLoc !== null) {\n      this.expectPlugin(\"destructuringPrivate\", privateKeyLoc);\n    }\n  }\n}\nclass ExpressionErrors {\n  constructor() {\n    this.shorthandAssignLoc = null;\n    this.doubleProtoLoc = null;\n    this.privateKeyLoc = null;\n    this.optionalParametersLoc = null;\n  }\n}\nclass Node {\n  constructor(parser, pos, loc) {\n    this.type = \"\";\n    this.start = pos;\n    this.end = 0;\n    this.loc = new SourceLocation(loc);\n    if (parser != null && parser.options.ranges) this.range = [pos, 0];\n    if (parser != null && parser.filename) this.loc.filename = parser.filename;\n  }\n}\nconst NodePrototype = Node.prototype;\n{\n  NodePrototype.__clone = function () {\n    const newNode = new Node(undefined, this.start, this.loc.start);\n    const keys = Object.keys(this);\n    for (let i = 0, length = keys.length; i < length; i++) {\n      const key = keys[i];\n      if (key !== \"leadingComments\" && key !== \"trailingComments\" && key !== \"innerComments\") {\n        newNode[key] = this[key];\n      }\n    }\n    return newNode;\n  };\n}\nfunction clonePlaceholder(node) {\n  return cloneIdentifier(node);\n}\nfunction cloneIdentifier(node) {\n  const {\n    type,\n    start,\n    end,\n    loc,\n    range,\n    extra,\n    name\n  } = node;\n  const cloned = Object.create(NodePrototype);\n  cloned.type = type;\n  cloned.start = start;\n  cloned.end = end;\n  cloned.loc = loc;\n  cloned.range = range;\n  cloned.extra = extra;\n  cloned.name = name;\n  if (type === \"Placeholder\") {\n    cloned.expectedNode = node.expectedNode;\n  }\n  return cloned;\n}\nfunction cloneStringLiteral(node) {\n  const {\n    type,\n    start,\n    end,\n    loc,\n    range,\n    extra\n  } = node;\n  if (type === \"Placeholder\") {\n    return clonePlaceholder(node);\n  }\n  const cloned = Object.create(NodePrototype);\n  cloned.type = type;\n  cloned.start = start;\n  cloned.end = end;\n  cloned.loc = loc;\n  cloned.range = range;\n  if (node.raw !== undefined) {\n    cloned.raw = node.raw;\n  } else {\n    cloned.extra = extra;\n  }\n  cloned.value = node.value;\n  return cloned;\n}\nclass NodeUtils extends UtilParser {\n  startNode() {\n    return new Node(this, this.state.start, this.state.startLoc);\n  }\n  startNodeAt(loc) {\n    return new Node(this, loc.index, loc);\n  }\n  startNodeAtNode(type) {\n    return this.startNodeAt(type.loc.start);\n  }\n  finishNode(node, type) {\n    return this.finishNodeAt(node, type, this.state.lastTokEndLoc);\n  }\n  finishNodeAt(node, type, endLoc) {\n    node.type = type;\n    node.end = endLoc.index;\n    node.loc.end = endLoc;\n    if (this.options.ranges) node.range[1] = endLoc.index;\n    if (this.options.attachComment) this.processComment(node);\n    return node;\n  }\n  resetStartLocation(node, startLoc) {\n    node.start = startLoc.index;\n    node.loc.start = startLoc;\n    if (this.options.ranges) node.range[0] = startLoc.index;\n  }\n  resetEndLocation(node, endLoc = this.state.lastTokEndLoc) {\n    node.end = endLoc.index;\n    node.loc.end = endLoc;\n    if (this.options.ranges) node.range[1] = endLoc.index;\n  }\n  resetStartLocationFromNode(node, locationNode) {\n    this.resetStartLocation(node, locationNode.loc.start);\n  }\n}\nconst reservedTypes = new Set([\"_\", \"any\", \"bool\", \"boolean\", \"empty\", \"extends\", \"false\", \"interface\", \"mixed\", \"null\", \"number\", \"static\", \"string\", \"true\", \"typeof\", \"void\"]);\nconst FlowErrors = ParseErrorEnum`flow`({\n  AmbiguousConditionalArrow: \"Ambiguous expression: wrap the arrow functions in parentheses to disambiguate.\",\n  AmbiguousDeclareModuleKind: \"Found both `declare module.exports` and `declare export` in the same module. Modules can only have 1 since they are either an ES module or they are a CommonJS module.\",\n  AssignReservedType: ({\n    reservedType\n  }) => `Cannot overwrite reserved type ${reservedType}.`,\n  DeclareClassElement: \"The `declare` modifier can only appear on class fields.\",\n  DeclareClassFieldInitializer: \"Initializers are not allowed in fields with the `declare` modifier.\",\n  DuplicateDeclareModuleExports: \"Duplicate `declare module.exports` statement.\",\n  EnumBooleanMemberNotInitialized: ({\n    memberName,\n    enumName\n  }) => `Boolean enum members need to be initialized. Use either \\`${memberName} = true,\\` or \\`${memberName} = false,\\` in enum \\`${enumName}\\`.`,\n  EnumDuplicateMemberName: ({\n    memberName,\n    enumName\n  }) => `Enum member names need to be unique, but the name \\`${memberName}\\` has already been used before in enum \\`${enumName}\\`.`,\n  EnumInconsistentMemberValues: ({\n    enumName\n  }) => `Enum \\`${enumName}\\` has inconsistent member initializers. Either use no initializers, or consistently use literals (either booleans, numbers, or strings) for all member initializers.`,\n  EnumInvalidExplicitType: ({\n    invalidEnumType,\n    enumName\n  }) => `Enum type \\`${invalidEnumType}\\` is not valid. Use one of \\`boolean\\`, \\`number\\`, \\`string\\`, or \\`symbol\\` in enum \\`${enumName}\\`.`,\n  EnumInvalidExplicitTypeUnknownSupplied: ({\n    enumName\n  }) => `Supplied enum type is not valid. Use one of \\`boolean\\`, \\`number\\`, \\`string\\`, or \\`symbol\\` in enum \\`${enumName}\\`.`,\n  EnumInvalidMemberInitializerPrimaryType: ({\n    enumName,\n    memberName,\n    explicitType\n  }) => `Enum \\`${enumName}\\` has type \\`${explicitType}\\`, so the initializer of \\`${memberName}\\` needs to be a ${explicitType} literal.`,\n  EnumInvalidMemberInitializerSymbolType: ({\n    enumName,\n    memberName\n  }) => `Symbol enum members cannot be initialized. Use \\`${memberName},\\` in enum \\`${enumName}\\`.`,\n  EnumInvalidMemberInitializerUnknownType: ({\n    enumName,\n    memberName\n  }) => `The enum member initializer for \\`${memberName}\\` needs to be a literal (either a boolean, number, or string) in enum \\`${enumName}\\`.`,\n  EnumInvalidMemberName: ({\n    enumName,\n    memberName,\n    suggestion\n  }) => `Enum member names cannot start with lowercase 'a' through 'z'. Instead of using \\`${memberName}\\`, consider using \\`${suggestion}\\`, in enum \\`${enumName}\\`.`,\n  EnumNumberMemberNotInitialized: ({\n    enumName,\n    memberName\n  }) => `Number enum members need to be initialized, e.g. \\`${memberName} = 1\\` in enum \\`${enumName}\\`.`,\n  EnumStringMemberInconsistentlyInitailized: ({\n    enumName\n  }) => `String enum members need to consistently either all use initializers, or use no initializers, in enum \\`${enumName}\\`.`,\n  GetterMayNotHaveThisParam: \"A getter cannot have a `this` parameter.\",\n  ImportReflectionHasImportType: \"An `import module` declaration can not use `type` or `typeof` keyword.\",\n  ImportTypeShorthandOnlyInPureImport: \"The `type` and `typeof` keywords on named imports can only be used on regular `import` statements. It cannot be used with `import type` or `import typeof` statements.\",\n  InexactInsideExact: \"Explicit inexact syntax cannot appear inside an explicit exact object type.\",\n  InexactInsideNonObject: \"Explicit inexact syntax cannot appear in class or interface definitions.\",\n  InexactVariance: \"Explicit inexact syntax cannot have variance.\",\n  InvalidNonTypeImportInDeclareModule: \"Imports within a `declare module` body must always be `import type` or `import typeof`.\",\n  MissingTypeParamDefault: \"Type parameter declaration needs a default, since a preceding type parameter declaration has a default.\",\n  NestedDeclareModule: \"`declare module` cannot be used inside another `declare module`.\",\n  NestedFlowComment: \"Cannot have a flow comment inside another flow comment.\",\n  PatternIsOptional: Object.assign({\n    message: \"A binding pattern parameter cannot be optional in an implementation signature.\"\n  }, {\n    reasonCode: \"OptionalBindingPattern\"\n  }),\n  SetterMayNotHaveThisParam: \"A setter cannot have a `this` parameter.\",\n  SpreadVariance: \"Spread properties cannot have variance.\",\n  ThisParamAnnotationRequired: \"A type annotation is required for the `this` parameter.\",\n  ThisParamBannedInConstructor: \"Constructors cannot have a `this` parameter; constructors don't bind `this` like other functions.\",\n  ThisParamMayNotBeOptional: \"The `this` parameter cannot be optional.\",\n  ThisParamMustBeFirst: \"The `this` parameter must be the first function parameter.\",\n  ThisParamNoDefault: \"The `this` parameter may not have a default value.\",\n  TypeBeforeInitializer: \"Type annotations must come before default assignments, e.g. instead of `age = 25: number` use `age: number = 25`.\",\n  TypeCastInPattern: \"The type cast expression is expected to be wrapped with parenthesis.\",\n  UnexpectedExplicitInexactInObject: \"Explicit inexact syntax must appear at the end of an inexact object.\",\n  UnexpectedReservedType: ({\n    reservedType\n  }) => `Unexpected reserved type ${reservedType}.`,\n  UnexpectedReservedUnderscore: \"`_` is only allowed as a type argument to call or new.\",\n  UnexpectedSpaceBetweenModuloChecks: \"Spaces between `%` and `checks` are not allowed here.\",\n  UnexpectedSpreadType: \"Spread operator cannot appear in class or interface definitions.\",\n  UnexpectedSubtractionOperand: 'Unexpected token, expected \"number\" or \"bigint\".',\n  UnexpectedTokenAfterTypeParameter: \"Expected an arrow function after this type parameter declaration.\",\n  UnexpectedTypeParameterBeforeAsyncArrowFunction: \"Type parameters must come after the async keyword, e.g. instead of `<T> async () => {}`, use `async <T>() => {}`.\",\n  UnsupportedDeclareExportKind: ({\n    unsupportedExportKind,\n    suggestion\n  }) => `\\`declare export ${unsupportedExportKind}\\` is not supported. Use \\`${suggestion}\\` instead.`,\n  UnsupportedStatementInDeclareModule: \"Only declares and type imports are allowed inside declare module.\",\n  UnterminatedFlowComment: \"Unterminated flow-comment.\"\n});\nfunction isEsModuleType(bodyElement) {\n  return bodyElement.type === \"DeclareExportAllDeclaration\" || bodyElement.type === \"DeclareExportDeclaration\" && (!bodyElement.declaration || bodyElement.declaration.type !== \"TypeAlias\" && bodyElement.declaration.type !== \"InterfaceDeclaration\");\n}\nfunction hasTypeImportKind(node) {\n  return node.importKind === \"type\" || node.importKind === \"typeof\";\n}\nfunction isMaybeDefaultImport(type) {\n  return tokenIsKeywordOrIdentifier(type) && type !== 97;\n}\nconst exportSuggestions = {\n  const: \"declare export var\",\n  let: \"declare export var\",\n  type: \"export type\",\n  interface: \"export interface\"\n};\nfunction partition(list, test) {\n  const list1 = [];\n  const list2 = [];\n  for (let i = 0; i < list.length; i++) {\n    (test(list[i], i, list) ? list1 : list2).push(list[i]);\n  }\n  return [list1, list2];\n}\nconst FLOW_PRAGMA_REGEX = /\\*?\\s*@((?:no)?flow)\\b/;\nvar flow = superClass => class FlowParserMixin extends superClass {\n  constructor(...args) {\n    super(...args);\n    this.flowPragma = undefined;\n  }\n  getScopeHandler() {\n    return FlowScopeHandler;\n  }\n  shouldParseTypes() {\n    return this.getPluginOption(\"flow\", \"all\") || this.flowPragma === \"flow\";\n  }\n  shouldParseEnums() {\n    return !!this.getPluginOption(\"flow\", \"enums\");\n  }\n  finishToken(type, val) {\n    if (type !== 131 && type !== 13 && type !== 28) {\n      if (this.flowPragma === undefined) {\n        this.flowPragma = null;\n      }\n    }\n    super.finishToken(type, val);\n  }\n  addComment(comment) {\n    if (this.flowPragma === undefined) {\n      const matches = FLOW_PRAGMA_REGEX.exec(comment.value);\n      if (!matches) ;else if (matches[1] === \"flow\") {\n        this.flowPragma = \"flow\";\n      } else if (matches[1] === \"noflow\") {\n        this.flowPragma = \"noflow\";\n      } else {\n        throw new Error(\"Unexpected flow pragma\");\n      }\n    }\n    super.addComment(comment);\n  }\n  flowParseTypeInitialiser(tok) {\n    const oldInType = this.state.inType;\n    this.state.inType = true;\n    this.expect(tok || 14);\n    const type = this.flowParseType();\n    this.state.inType = oldInType;\n    return type;\n  }\n  flowParsePredicate() {\n    const node = this.startNode();\n    const moduloLoc = this.state.startLoc;\n    this.next();\n    this.expectContextual(108);\n    if (this.state.lastTokStart > moduloLoc.index + 1) {\n      this.raise(FlowErrors.UnexpectedSpaceBetweenModuloChecks, {\n        at: moduloLoc\n      });\n    }\n    if (this.eat(10)) {\n      node.value = super.parseExpression();\n      this.expect(11);\n      return this.finishNode(node, \"DeclaredPredicate\");\n    } else {\n      return this.finishNode(node, \"InferredPredicate\");\n    }\n  }\n  flowParseTypeAndPredicateInitialiser() {\n    const oldInType = this.state.inType;\n    this.state.inType = true;\n    this.expect(14);\n    let type = null;\n    let predicate = null;\n    if (this.match(54)) {\n      this.state.inType = oldInType;\n      predicate = this.flowParsePredicate();\n    } else {\n      type = this.flowParseType();\n      this.state.inType = oldInType;\n      if (this.match(54)) {\n        predicate = this.flowParsePredicate();\n      }\n    }\n    return [type, predicate];\n  }\n  flowParseDeclareClass(node) {\n    this.next();\n    this.flowParseInterfaceish(node, true);\n    return this.finishNode(node, \"DeclareClass\");\n  }\n  flowParseDeclareFunction(node) {\n    this.next();\n    const id = node.id = this.parseIdentifier();\n    const typeNode = this.startNode();\n    const typeContainer = this.startNode();\n    if (this.match(47)) {\n      typeNode.typeParameters = this.flowParseTypeParameterDeclaration();\n    } else {\n      typeNode.typeParameters = null;\n    }\n    this.expect(10);\n    const tmp = this.flowParseFunctionTypeParams();\n    typeNode.params = tmp.params;\n    typeNode.rest = tmp.rest;\n    typeNode.this = tmp._this;\n    this.expect(11);\n    [typeNode.returnType, node.predicate] = this.flowParseTypeAndPredicateInitialiser();\n    typeContainer.typeAnnotation = this.finishNode(typeNode, \"FunctionTypeAnnotation\");\n    id.typeAnnotation = this.finishNode(typeContainer, \"TypeAnnotation\");\n    this.resetEndLocation(id);\n    this.semicolon();\n    this.scope.declareName(node.id.name, BIND_FLOW_DECLARE_FN, node.id.loc.start);\n    return this.finishNode(node, \"DeclareFunction\");\n  }\n  flowParseDeclare(node, insideModule) {\n    if (this.match(80)) {\n      return this.flowParseDeclareClass(node);\n    } else if (this.match(68)) {\n      return this.flowParseDeclareFunction(node);\n    } else if (this.match(74)) {\n      return this.flowParseDeclareVariable(node);\n    } else if (this.eatContextual(125)) {\n      if (this.match(16)) {\n        return this.flowParseDeclareModuleExports(node);\n      } else {\n        if (insideModule) {\n          this.raise(FlowErrors.NestedDeclareModule, {\n            at: this.state.lastTokStartLoc\n          });\n        }\n        return this.flowParseDeclareModule(node);\n      }\n    } else if (this.isContextual(128)) {\n      return this.flowParseDeclareTypeAlias(node);\n    } else if (this.isContextual(129)) {\n      return this.flowParseDeclareOpaqueType(node);\n    } else if (this.isContextual(127)) {\n      return this.flowParseDeclareInterface(node);\n    } else if (this.match(82)) {\n      return this.flowParseDeclareExportDeclaration(node, insideModule);\n    } else {\n      this.unexpected();\n    }\n  }\n  flowParseDeclareVariable(node) {\n    this.next();\n    node.id = this.flowParseTypeAnnotatableIdentifier(true);\n    this.scope.declareName(node.id.name, BIND_VAR, node.id.loc.start);\n    this.semicolon();\n    return this.finishNode(node, \"DeclareVariable\");\n  }\n  flowParseDeclareModule(node) {\n    this.scope.enter(SCOPE_OTHER);\n    if (this.match(131)) {\n      node.id = super.parseExprAtom();\n    } else {\n      node.id = this.parseIdentifier();\n    }\n    const bodyNode = node.body = this.startNode();\n    const body = bodyNode.body = [];\n    this.expect(5);\n    while (!this.match(8)) {\n      let bodyNode = this.startNode();\n      if (this.match(83)) {\n        this.next();\n        if (!this.isContextual(128) && !this.match(87)) {\n          this.raise(FlowErrors.InvalidNonTypeImportInDeclareModule, {\n            at: this.state.lastTokStartLoc\n          });\n        }\n        super.parseImport(bodyNode);\n      } else {\n        this.expectContextual(123, FlowErrors.UnsupportedStatementInDeclareModule);\n        bodyNode = this.flowParseDeclare(bodyNode, true);\n      }\n      body.push(bodyNode);\n    }\n    this.scope.exit();\n    this.expect(8);\n    this.finishNode(bodyNode, \"BlockStatement\");\n    let kind = null;\n    let hasModuleExport = false;\n    body.forEach(bodyElement => {\n      if (isEsModuleType(bodyElement)) {\n        if (kind === \"CommonJS\") {\n          this.raise(FlowErrors.AmbiguousDeclareModuleKind, {\n            at: bodyElement\n          });\n        }\n        kind = \"ES\";\n      } else if (bodyElement.type === \"DeclareModuleExports\") {\n        if (hasModuleExport) {\n          this.raise(FlowErrors.DuplicateDeclareModuleExports, {\n            at: bodyElement\n          });\n        }\n        if (kind === \"ES\") {\n          this.raise(FlowErrors.AmbiguousDeclareModuleKind, {\n            at: bodyElement\n          });\n        }\n        kind = \"CommonJS\";\n        hasModuleExport = true;\n      }\n    });\n    node.kind = kind || \"CommonJS\";\n    return this.finishNode(node, \"DeclareModule\");\n  }\n  flowParseDeclareExportDeclaration(node, insideModule) {\n    this.expect(82);\n    if (this.eat(65)) {\n      if (this.match(68) || this.match(80)) {\n        node.declaration = this.flowParseDeclare(this.startNode());\n      } else {\n        node.declaration = this.flowParseType();\n        this.semicolon();\n      }\n      node.default = true;\n      return this.finishNode(node, \"DeclareExportDeclaration\");\n    } else {\n      if (this.match(75) || this.isLet() || (this.isContextual(128) || this.isContextual(127)) && !insideModule) {\n        const label = this.state.value;\n        throw this.raise(FlowErrors.UnsupportedDeclareExportKind, {\n          at: this.state.startLoc,\n          unsupportedExportKind: label,\n          suggestion: exportSuggestions[label]\n        });\n      }\n      if (this.match(74) || this.match(68) || this.match(80) || this.isContextual(129)) {\n        node.declaration = this.flowParseDeclare(this.startNode());\n        node.default = false;\n        return this.finishNode(node, \"DeclareExportDeclaration\");\n      } else if (this.match(55) || this.match(5) || this.isContextual(127) || this.isContextual(128) || this.isContextual(129)) {\n        node = this.parseExport(node, null);\n        if (node.type === \"ExportNamedDeclaration\") {\n          node.type = \"ExportDeclaration\";\n          node.default = false;\n          delete node.exportKind;\n        }\n        node.type = \"Declare\" + node.type;\n        return node;\n      }\n    }\n    this.unexpected();\n  }\n  flowParseDeclareModuleExports(node) {\n    this.next();\n    this.expectContextual(109);\n    node.typeAnnotation = this.flowParseTypeAnnotation();\n    this.semicolon();\n    return this.finishNode(node, \"DeclareModuleExports\");\n  }\n  flowParseDeclareTypeAlias(node) {\n    this.next();\n    const finished = this.flowParseTypeAlias(node);\n    finished.type = \"DeclareTypeAlias\";\n    return finished;\n  }\n  flowParseDeclareOpaqueType(node) {\n    this.next();\n    const finished = this.flowParseOpaqueType(node, true);\n    finished.type = \"DeclareOpaqueType\";\n    return finished;\n  }\n  flowParseDeclareInterface(node) {\n    this.next();\n    this.flowParseInterfaceish(node, false);\n    return this.finishNode(node, \"DeclareInterface\");\n  }\n  flowParseInterfaceish(node, isClass) {\n    node.id = this.flowParseRestrictedIdentifier(!isClass, true);\n    this.scope.declareName(node.id.name, isClass ? BIND_FUNCTION : BIND_LEXICAL, node.id.loc.start);\n    if (this.match(47)) {\n      node.typeParameters = this.flowParseTypeParameterDeclaration();\n    } else {\n      node.typeParameters = null;\n    }\n    node.extends = [];\n    node.implements = [];\n    node.mixins = [];\n    if (this.eat(81)) {\n      do {\n        node.extends.push(this.flowParseInterfaceExtends());\n      } while (!isClass && this.eat(12));\n    }\n    if (isClass) {\n      if (this.eatContextual(115)) {\n        do {\n          node.mixins.push(this.flowParseInterfaceExtends());\n        } while (this.eat(12));\n      }\n      if (this.eatContextual(111)) {\n        do {\n          node.implements.push(this.flowParseInterfaceExtends());\n        } while (this.eat(12));\n      }\n    }\n    node.body = this.flowParseObjectType({\n      allowStatic: isClass,\n      allowExact: false,\n      allowSpread: false,\n      allowProto: isClass,\n      allowInexact: false\n    });\n  }\n  flowParseInterfaceExtends() {\n    const node = this.startNode();\n    node.id = this.flowParseQualifiedTypeIdentifier();\n    if (this.match(47)) {\n      node.typeParameters = this.flowParseTypeParameterInstantiation();\n    } else {\n      node.typeParameters = null;\n    }\n    return this.finishNode(node, \"InterfaceExtends\");\n  }\n  flowParseInterface(node) {\n    this.flowParseInterfaceish(node, false);\n    return this.finishNode(node, \"InterfaceDeclaration\");\n  }\n  checkNotUnderscore(word) {\n    if (word === \"_\") {\n      this.raise(FlowErrors.UnexpectedReservedUnderscore, {\n        at: this.state.startLoc\n      });\n    }\n  }\n  checkReservedType(word, startLoc, declaration) {\n    if (!reservedTypes.has(word)) return;\n    this.raise(declaration ? FlowErrors.AssignReservedType : FlowErrors.UnexpectedReservedType, {\n      at: startLoc,\n      reservedType: word\n    });\n  }\n  flowParseRestrictedIdentifier(liberal, declaration) {\n    this.checkReservedType(this.state.value, this.state.startLoc, declaration);\n    return this.parseIdentifier(liberal);\n  }\n  flowParseTypeAlias(node) {\n    node.id = this.flowParseRestrictedIdentifier(false, true);\n    this.scope.declareName(node.id.name, BIND_LEXICAL, node.id.loc.start);\n    if (this.match(47)) {\n      node.typeParameters = this.flowParseTypeParameterDeclaration();\n    } else {\n      node.typeParameters = null;\n    }\n    node.right = this.flowParseTypeInitialiser(29);\n    this.semicolon();\n    return this.finishNode(node, \"TypeAlias\");\n  }\n  flowParseOpaqueType(node, declare) {\n    this.expectContextual(128);\n    node.id = this.flowParseRestrictedIdentifier(true, true);\n    this.scope.declareName(node.id.name, BIND_LEXICAL, node.id.loc.start);\n    if (this.match(47)) {\n      node.typeParameters = this.flowParseTypeParameterDeclaration();\n    } else {\n      node.typeParameters = null;\n    }\n    node.supertype = null;\n    if (this.match(14)) {\n      node.supertype = this.flowParseTypeInitialiser(14);\n    }\n    node.impltype = null;\n    if (!declare) {\n      node.impltype = this.flowParseTypeInitialiser(29);\n    }\n    this.semicolon();\n    return this.finishNode(node, \"OpaqueType\");\n  }\n  flowParseTypeParameter(requireDefault = false) {\n    const nodeStartLoc = this.state.startLoc;\n    const node = this.startNode();\n    const variance = this.flowParseVariance();\n    const ident = this.flowParseTypeAnnotatableIdentifier();\n    node.name = ident.name;\n    node.variance = variance;\n    node.bound = ident.typeAnnotation;\n    if (this.match(29)) {\n      this.eat(29);\n      node.default = this.flowParseType();\n    } else {\n      if (requireDefault) {\n        this.raise(FlowErrors.MissingTypeParamDefault, {\n          at: nodeStartLoc\n        });\n      }\n    }\n    return this.finishNode(node, \"TypeParameter\");\n  }\n  flowParseTypeParameterDeclaration() {\n    const oldInType = this.state.inType;\n    const node = this.startNode();\n    node.params = [];\n    this.state.inType = true;\n    if (this.match(47) || this.match(140)) {\n      this.next();\n    } else {\n      this.unexpected();\n    }\n    let defaultRequired = false;\n    do {\n      const typeParameter = this.flowParseTypeParameter(defaultRequired);\n      node.params.push(typeParameter);\n      if (typeParameter.default) {\n        defaultRequired = true;\n      }\n      if (!this.match(48)) {\n        this.expect(12);\n      }\n    } while (!this.match(48));\n    this.expect(48);\n    this.state.inType = oldInType;\n    return this.finishNode(node, \"TypeParameterDeclaration\");\n  }\n  flowParseTypeParameterInstantiation() {\n    const node = this.startNode();\n    const oldInType = this.state.inType;\n    node.params = [];\n    this.state.inType = true;\n    this.expect(47);\n    const oldNoAnonFunctionType = this.state.noAnonFunctionType;\n    this.state.noAnonFunctionType = false;\n    while (!this.match(48)) {\n      node.params.push(this.flowParseType());\n      if (!this.match(48)) {\n        this.expect(12);\n      }\n    }\n    this.state.noAnonFunctionType = oldNoAnonFunctionType;\n    this.expect(48);\n    this.state.inType = oldInType;\n    return this.finishNode(node, \"TypeParameterInstantiation\");\n  }\n  flowParseTypeParameterInstantiationCallOrNew() {\n    const node = this.startNode();\n    const oldInType = this.state.inType;\n    node.params = [];\n    this.state.inType = true;\n    this.expect(47);\n    while (!this.match(48)) {\n      node.params.push(this.flowParseTypeOrImplicitInstantiation());\n      if (!this.match(48)) {\n        this.expect(12);\n      }\n    }\n    this.expect(48);\n    this.state.inType = oldInType;\n    return this.finishNode(node, \"TypeParameterInstantiation\");\n  }\n  flowParseInterfaceType() {\n    const node = this.startNode();\n    this.expectContextual(127);\n    node.extends = [];\n    if (this.eat(81)) {\n      do {\n        node.extends.push(this.flowParseInterfaceExtends());\n      } while (this.eat(12));\n    }\n    node.body = this.flowParseObjectType({\n      allowStatic: false,\n      allowExact: false,\n      allowSpread: false,\n      allowProto: false,\n      allowInexact: false\n    });\n    return this.finishNode(node, \"InterfaceTypeAnnotation\");\n  }\n  flowParseObjectPropertyKey() {\n    return this.match(132) || this.match(131) ? super.parseExprAtom() : this.parseIdentifier(true);\n  }\n  flowParseObjectTypeIndexer(node, isStatic, variance) {\n    node.static = isStatic;\n    if (this.lookahead().type === 14) {\n      node.id = this.flowParseObjectPropertyKey();\n      node.key = this.flowParseTypeInitialiser();\n    } else {\n      node.id = null;\n      node.key = this.flowParseType();\n    }\n    this.expect(3);\n    node.value = this.flowParseTypeInitialiser();\n    node.variance = variance;\n    return this.finishNode(node, \"ObjectTypeIndexer\");\n  }\n  flowParseObjectTypeInternalSlot(node, isStatic) {\n    node.static = isStatic;\n    node.id = this.flowParseObjectPropertyKey();\n    this.expect(3);\n    this.expect(3);\n    if (this.match(47) || this.match(10)) {\n      node.method = true;\n      node.optional = false;\n      node.value = this.flowParseObjectTypeMethodish(this.startNodeAt(node.loc.start));\n    } else {\n      node.method = false;\n      if (this.eat(17)) {\n        node.optional = true;\n      }\n      node.value = this.flowParseTypeInitialiser();\n    }\n    return this.finishNode(node, \"ObjectTypeInternalSlot\");\n  }\n  flowParseObjectTypeMethodish(node) {\n    node.params = [];\n    node.rest = null;\n    node.typeParameters = null;\n    node.this = null;\n    if (this.match(47)) {\n      node.typeParameters = this.flowParseTypeParameterDeclaration();\n    }\n    this.expect(10);\n    if (this.match(78)) {\n      node.this = this.flowParseFunctionTypeParam(true);\n      node.this.name = null;\n      if (!this.match(11)) {\n        this.expect(12);\n      }\n    }\n    while (!this.match(11) && !this.match(21)) {\n      node.params.push(this.flowParseFunctionTypeParam(false));\n      if (!this.match(11)) {\n        this.expect(12);\n      }\n    }\n    if (this.eat(21)) {\n      node.rest = this.flowParseFunctionTypeParam(false);\n    }\n    this.expect(11);\n    node.returnType = this.flowParseTypeInitialiser();\n    return this.finishNode(node, \"FunctionTypeAnnotation\");\n  }\n  flowParseObjectTypeCallProperty(node, isStatic) {\n    const valueNode = this.startNode();\n    node.static = isStatic;\n    node.value = this.flowParseObjectTypeMethodish(valueNode);\n    return this.finishNode(node, \"ObjectTypeCallProperty\");\n  }\n  flowParseObjectType({\n    allowStatic,\n    allowExact,\n    allowSpread,\n    allowProto,\n    allowInexact\n  }) {\n    const oldInType = this.state.inType;\n    this.state.inType = true;\n    const nodeStart = this.startNode();\n    nodeStart.callProperties = [];\n    nodeStart.properties = [];\n    nodeStart.indexers = [];\n    nodeStart.internalSlots = [];\n    let endDelim;\n    let exact;\n    let inexact = false;\n    if (allowExact && this.match(6)) {\n      this.expect(6);\n      endDelim = 9;\n      exact = true;\n    } else {\n      this.expect(5);\n      endDelim = 8;\n      exact = false;\n    }\n    nodeStart.exact = exact;\n    while (!this.match(endDelim)) {\n      let isStatic = false;\n      let protoStartLoc = null;\n      let inexactStartLoc = null;\n      const node = this.startNode();\n      if (allowProto && this.isContextual(116)) {\n        const lookahead = this.lookahead();\n        if (lookahead.type !== 14 && lookahead.type !== 17) {\n          this.next();\n          protoStartLoc = this.state.startLoc;\n          allowStatic = false;\n        }\n      }\n      if (allowStatic && this.isContextual(104)) {\n        const lookahead = this.lookahead();\n        if (lookahead.type !== 14 && lookahead.type !== 17) {\n          this.next();\n          isStatic = true;\n        }\n      }\n      const variance = this.flowParseVariance();\n      if (this.eat(0)) {\n        if (protoStartLoc != null) {\n          this.unexpected(protoStartLoc);\n        }\n        if (this.eat(0)) {\n          if (variance) {\n            this.unexpected(variance.loc.start);\n          }\n          nodeStart.internalSlots.push(this.flowParseObjectTypeInternalSlot(node, isStatic));\n        } else {\n          nodeStart.indexers.push(this.flowParseObjectTypeIndexer(node, isStatic, variance));\n        }\n      } else if (this.match(10) || this.match(47)) {\n        if (protoStartLoc != null) {\n          this.unexpected(protoStartLoc);\n        }\n        if (variance) {\n          this.unexpected(variance.loc.start);\n        }\n        nodeStart.callProperties.push(this.flowParseObjectTypeCallProperty(node, isStatic));\n      } else {\n        let kind = \"init\";\n        if (this.isContextual(98) || this.isContextual(103)) {\n          const lookahead = this.lookahead();\n          if (tokenIsLiteralPropertyName(lookahead.type)) {\n            kind = this.state.value;\n            this.next();\n          }\n        }\n        const propOrInexact = this.flowParseObjectTypeProperty(node, isStatic, protoStartLoc, variance, kind, allowSpread, allowInexact != null ? allowInexact : !exact);\n        if (propOrInexact === null) {\n          inexact = true;\n          inexactStartLoc = this.state.lastTokStartLoc;\n        } else {\n          nodeStart.properties.push(propOrInexact);\n        }\n      }\n      this.flowObjectTypeSemicolon();\n      if (inexactStartLoc && !this.match(8) && !this.match(9)) {\n        this.raise(FlowErrors.UnexpectedExplicitInexactInObject, {\n          at: inexactStartLoc\n        });\n      }\n    }\n    this.expect(endDelim);\n    if (allowSpread) {\n      nodeStart.inexact = inexact;\n    }\n    const out = this.finishNode(nodeStart, \"ObjectTypeAnnotation\");\n    this.state.inType = oldInType;\n    return out;\n  }\n  flowParseObjectTypeProperty(node, isStatic, protoStartLoc, variance, kind, allowSpread, allowInexact) {\n    if (this.eat(21)) {\n      const isInexactToken = this.match(12) || this.match(13) || this.match(8) || this.match(9);\n      if (isInexactToken) {\n        if (!allowSpread) {\n          this.raise(FlowErrors.InexactInsideNonObject, {\n            at: this.state.lastTokStartLoc\n          });\n        } else if (!allowInexact) {\n          this.raise(FlowErrors.InexactInsideExact, {\n            at: this.state.lastTokStartLoc\n          });\n        }\n        if (variance) {\n          this.raise(FlowErrors.InexactVariance, {\n            at: variance\n          });\n        }\n        return null;\n      }\n      if (!allowSpread) {\n        this.raise(FlowErrors.UnexpectedSpreadType, {\n          at: this.state.lastTokStartLoc\n        });\n      }\n      if (protoStartLoc != null) {\n        this.unexpected(protoStartLoc);\n      }\n      if (variance) {\n        this.raise(FlowErrors.SpreadVariance, {\n          at: variance\n        });\n      }\n      node.argument = this.flowParseType();\n      return this.finishNode(node, \"ObjectTypeSpreadProperty\");\n    } else {\n      node.key = this.flowParseObjectPropertyKey();\n      node.static = isStatic;\n      node.proto = protoStartLoc != null;\n      node.kind = kind;\n      let optional = false;\n      if (this.match(47) || this.match(10)) {\n        node.method = true;\n        if (protoStartLoc != null) {\n          this.unexpected(protoStartLoc);\n        }\n        if (variance) {\n          this.unexpected(variance.loc.start);\n        }\n        node.value = this.flowParseObjectTypeMethodish(this.startNodeAt(node.loc.start));\n        if (kind === \"get\" || kind === \"set\") {\n          this.flowCheckGetterSetterParams(node);\n        }\n        if (!allowSpread && node.key.name === \"constructor\" && node.value.this) {\n          this.raise(FlowErrors.ThisParamBannedInConstructor, {\n            at: node.value.this\n          });\n        }\n      } else {\n        if (kind !== \"init\") this.unexpected();\n        node.method = false;\n        if (this.eat(17)) {\n          optional = true;\n        }\n        node.value = this.flowParseTypeInitialiser();\n        node.variance = variance;\n      }\n      node.optional = optional;\n      return this.finishNode(node, \"ObjectTypeProperty\");\n    }\n  }\n  flowCheckGetterSetterParams(property) {\n    const paramCount = property.kind === \"get\" ? 0 : 1;\n    const length = property.value.params.length + (property.value.rest ? 1 : 0);\n    if (property.value.this) {\n      this.raise(property.kind === \"get\" ? FlowErrors.GetterMayNotHaveThisParam : FlowErrors.SetterMayNotHaveThisParam, {\n        at: property.value.this\n      });\n    }\n    if (length !== paramCount) {\n      this.raise(property.kind === \"get\" ? Errors.BadGetterArity : Errors.BadSetterArity, {\n        at: property\n      });\n    }\n    if (property.kind === \"set\" && property.value.rest) {\n      this.raise(Errors.BadSetterRestParameter, {\n        at: property\n      });\n    }\n  }\n  flowObjectTypeSemicolon() {\n    if (!this.eat(13) && !this.eat(12) && !this.match(8) && !this.match(9)) {\n      this.unexpected();\n    }\n  }\n  flowParseQualifiedTypeIdentifier(startLoc, id) {\n    var _startLoc;\n    (_startLoc = startLoc) != null ? _startLoc : startLoc = this.state.startLoc;\n    let node = id || this.flowParseRestrictedIdentifier(true);\n    while (this.eat(16)) {\n      const node2 = this.startNodeAt(startLoc);\n      node2.qualification = node;\n      node2.id = this.flowParseRestrictedIdentifier(true);\n      node = this.finishNode(node2, \"QualifiedTypeIdentifier\");\n    }\n    return node;\n  }\n  flowParseGenericType(startLoc, id) {\n    const node = this.startNodeAt(startLoc);\n    node.typeParameters = null;\n    node.id = this.flowParseQualifiedTypeIdentifier(startLoc, id);\n    if (this.match(47)) {\n      node.typeParameters = this.flowParseTypeParameterInstantiation();\n    }\n    return this.finishNode(node, \"GenericTypeAnnotation\");\n  }\n  flowParseTypeofType() {\n    const node = this.startNode();\n    this.expect(87);\n    node.argument = this.flowParsePrimaryType();\n    return this.finishNode(node, \"TypeofTypeAnnotation\");\n  }\n  flowParseTupleType() {\n    const node = this.startNode();\n    node.types = [];\n    this.expect(0);\n    while (this.state.pos < this.length && !this.match(3)) {\n      node.types.push(this.flowParseType());\n      if (this.match(3)) break;\n      this.expect(12);\n    }\n    this.expect(3);\n    return this.finishNode(node, \"TupleTypeAnnotation\");\n  }\n  flowParseFunctionTypeParam(first) {\n    let name = null;\n    let optional = false;\n    let typeAnnotation = null;\n    const node = this.startNode();\n    const lh = this.lookahead();\n    const isThis = this.state.type === 78;\n    if (lh.type === 14 || lh.type === 17) {\n      if (isThis && !first) {\n        this.raise(FlowErrors.ThisParamMustBeFirst, {\n          at: node\n        });\n      }\n      name = this.parseIdentifier(isThis);\n      if (this.eat(17)) {\n        optional = true;\n        if (isThis) {\n          this.raise(FlowErrors.ThisParamMayNotBeOptional, {\n            at: node\n          });\n        }\n      }\n      typeAnnotation = this.flowParseTypeInitialiser();\n    } else {\n      typeAnnotation = this.flowParseType();\n    }\n    node.name = name;\n    node.optional = optional;\n    node.typeAnnotation = typeAnnotation;\n    return this.finishNode(node, \"FunctionTypeParam\");\n  }\n  reinterpretTypeAsFunctionTypeParam(type) {\n    const node = this.startNodeAt(type.loc.start);\n    node.name = null;\n    node.optional = false;\n    node.typeAnnotation = type;\n    return this.finishNode(node, \"FunctionTypeParam\");\n  }\n  flowParseFunctionTypeParams(params = []) {\n    let rest = null;\n    let _this = null;\n    if (this.match(78)) {\n      _this = this.flowParseFunctionTypeParam(true);\n      _this.name = null;\n      if (!this.match(11)) {\n        this.expect(12);\n      }\n    }\n    while (!this.match(11) && !this.match(21)) {\n      params.push(this.flowParseFunctionTypeParam(false));\n      if (!this.match(11)) {\n        this.expect(12);\n      }\n    }\n    if (this.eat(21)) {\n      rest = this.flowParseFunctionTypeParam(false);\n    }\n    return {\n      params,\n      rest,\n      _this\n    };\n  }\n  flowIdentToTypeAnnotation(startLoc, node, id) {\n    switch (id.name) {\n      case \"any\":\n        return this.finishNode(node, \"AnyTypeAnnotation\");\n      case \"bool\":\n      case \"boolean\":\n        return this.finishNode(node, \"BooleanTypeAnnotation\");\n      case \"mixed\":\n        return this.finishNode(node, \"MixedTypeAnnotation\");\n      case \"empty\":\n        return this.finishNode(node, \"EmptyTypeAnnotation\");\n      case \"number\":\n        return this.finishNode(node, \"NumberTypeAnnotation\");\n      case \"string\":\n        return this.finishNode(node, \"StringTypeAnnotation\");\n      case \"symbol\":\n        return this.finishNode(node, \"SymbolTypeAnnotation\");\n      default:\n        this.checkNotUnderscore(id.name);\n        return this.flowParseGenericType(startLoc, id);\n    }\n  }\n  flowParsePrimaryType() {\n    const startLoc = this.state.startLoc;\n    const node = this.startNode();\n    let tmp;\n    let type;\n    let isGroupedType = false;\n    const oldNoAnonFunctionType = this.state.noAnonFunctionType;\n    switch (this.state.type) {\n      case 5:\n        return this.flowParseObjectType({\n          allowStatic: false,\n          allowExact: false,\n          allowSpread: true,\n          allowProto: false,\n          allowInexact: true\n        });\n      case 6:\n        return this.flowParseObjectType({\n          allowStatic: false,\n          allowExact: true,\n          allowSpread: true,\n          allowProto: false,\n          allowInexact: false\n        });\n      case 0:\n        this.state.noAnonFunctionType = false;\n        type = this.flowParseTupleType();\n        this.state.noAnonFunctionType = oldNoAnonFunctionType;\n        return type;\n      case 47:\n        node.typeParameters = this.flowParseTypeParameterDeclaration();\n        this.expect(10);\n        tmp = this.flowParseFunctionTypeParams();\n        node.params = tmp.params;\n        node.rest = tmp.rest;\n        node.this = tmp._this;\n        this.expect(11);\n        this.expect(19);\n        node.returnType = this.flowParseType();\n        return this.finishNode(node, \"FunctionTypeAnnotation\");\n      case 10:\n        this.next();\n        if (!this.match(11) && !this.match(21)) {\n          if (tokenIsIdentifier(this.state.type) || this.match(78)) {\n            const token = this.lookahead().type;\n            isGroupedType = token !== 17 && token !== 14;\n          } else {\n            isGroupedType = true;\n          }\n        }\n        if (isGroupedType) {\n          this.state.noAnonFunctionType = false;\n          type = this.flowParseType();\n          this.state.noAnonFunctionType = oldNoAnonFunctionType;\n          if (this.state.noAnonFunctionType || !(this.match(12) || this.match(11) && this.lookahead().type === 19)) {\n            this.expect(11);\n            return type;\n          } else {\n            this.eat(12);\n          }\n        }\n        if (type) {\n          tmp = this.flowParseFunctionTypeParams([this.reinterpretTypeAsFunctionTypeParam(type)]);\n        } else {\n          tmp = this.flowParseFunctionTypeParams();\n        }\n        node.params = tmp.params;\n        node.rest = tmp.rest;\n        node.this = tmp._this;\n        this.expect(11);\n        this.expect(19);\n        node.returnType = this.flowParseType();\n        node.typeParameters = null;\n        return this.finishNode(node, \"FunctionTypeAnnotation\");\n      case 131:\n        return this.parseLiteral(this.state.value, \"StringLiteralTypeAnnotation\");\n      case 85:\n      case 86:\n        node.value = this.match(85);\n        this.next();\n        return this.finishNode(node, \"BooleanLiteralTypeAnnotation\");\n      case 53:\n        if (this.state.value === \"-\") {\n          this.next();\n          if (this.match(132)) {\n            return this.parseLiteralAtNode(-this.state.value, \"NumberLiteralTypeAnnotation\", node);\n          }\n          if (this.match(133)) {\n            return this.parseLiteralAtNode(-this.state.value, \"BigIntLiteralTypeAnnotation\", node);\n          }\n          throw this.raise(FlowErrors.UnexpectedSubtractionOperand, {\n            at: this.state.startLoc\n          });\n        }\n        this.unexpected();\n        return;\n      case 132:\n        return this.parseLiteral(this.state.value, \"NumberLiteralTypeAnnotation\");\n      case 133:\n        return this.parseLiteral(this.state.value, \"BigIntLiteralTypeAnnotation\");\n      case 88:\n        this.next();\n        return this.finishNode(node, \"VoidTypeAnnotation\");\n      case 84:\n        this.next();\n        return this.finishNode(node, \"NullLiteralTypeAnnotation\");\n      case 78:\n        this.next();\n        return this.finishNode(node, \"ThisTypeAnnotation\");\n      case 55:\n        this.next();\n        return this.finishNode(node, \"ExistsTypeAnnotation\");\n      case 87:\n        return this.flowParseTypeofType();\n      default:\n        if (tokenIsKeyword(this.state.type)) {\n          const label = tokenLabelName(this.state.type);\n          this.next();\n          return super.createIdentifier(node, label);\n        } else if (tokenIsIdentifier(this.state.type)) {\n          if (this.isContextual(127)) {\n            return this.flowParseInterfaceType();\n          }\n          return this.flowIdentToTypeAnnotation(startLoc, node, this.parseIdentifier());\n        }\n    }\n    this.unexpected();\n  }\n  flowParsePostfixType() {\n    const startLoc = this.state.startLoc;\n    let type = this.flowParsePrimaryType();\n    let seenOptionalIndexedAccess = false;\n    while ((this.match(0) || this.match(18)) && !this.canInsertSemicolon()) {\n      const node = this.startNodeAt(startLoc);\n      const optional = this.eat(18);\n      seenOptionalIndexedAccess = seenOptionalIndexedAccess || optional;\n      this.expect(0);\n      if (!optional && this.match(3)) {\n        node.elementType = type;\n        this.next();\n        type = this.finishNode(node, \"ArrayTypeAnnotation\");\n      } else {\n        node.objectType = type;\n        node.indexType = this.flowParseType();\n        this.expect(3);\n        if (seenOptionalIndexedAccess) {\n          node.optional = optional;\n          type = this.finishNode(node, \"OptionalIndexedAccessType\");\n        } else {\n          type = this.finishNode(node, \"IndexedAccessType\");\n        }\n      }\n    }\n    return type;\n  }\n  flowParsePrefixType() {\n    const node = this.startNode();\n    if (this.eat(17)) {\n      node.typeAnnotation = this.flowParsePrefixType();\n      return this.finishNode(node, \"NullableTypeAnnotation\");\n    } else {\n      return this.flowParsePostfixType();\n    }\n  }\n  flowParseAnonFunctionWithoutParens() {\n    const param = this.flowParsePrefixType();\n    if (!this.state.noAnonFunctionType && this.eat(19)) {\n      const node = this.startNodeAt(param.loc.start);\n      node.params = [this.reinterpretTypeAsFunctionTypeParam(param)];\n      node.rest = null;\n      node.this = null;\n      node.returnType = this.flowParseType();\n      node.typeParameters = null;\n      return this.finishNode(node, \"FunctionTypeAnnotation\");\n    }\n    return param;\n  }\n  flowParseIntersectionType() {\n    const node = this.startNode();\n    this.eat(45);\n    const type = this.flowParseAnonFunctionWithoutParens();\n    node.types = [type];\n    while (this.eat(45)) {\n      node.types.push(this.flowParseAnonFunctionWithoutParens());\n    }\n    return node.types.length === 1 ? type : this.finishNode(node, \"IntersectionTypeAnnotation\");\n  }\n  flowParseUnionType() {\n    const node = this.startNode();\n    this.eat(43);\n    const type = this.flowParseIntersectionType();\n    node.types = [type];\n    while (this.eat(43)) {\n      node.types.push(this.flowParseIntersectionType());\n    }\n    return node.types.length === 1 ? type : this.finishNode(node, \"UnionTypeAnnotation\");\n  }\n  flowParseType() {\n    const oldInType = this.state.inType;\n    this.state.inType = true;\n    const type = this.flowParseUnionType();\n    this.state.inType = oldInType;\n    return type;\n  }\n  flowParseTypeOrImplicitInstantiation() {\n    if (this.state.type === 130 && this.state.value === \"_\") {\n      const startLoc = this.state.startLoc;\n      const node = this.parseIdentifier();\n      return this.flowParseGenericType(startLoc, node);\n    } else {\n      return this.flowParseType();\n    }\n  }\n  flowParseTypeAnnotation() {\n    const node = this.startNode();\n    node.typeAnnotation = this.flowParseTypeInitialiser();\n    return this.finishNode(node, \"TypeAnnotation\");\n  }\n  flowParseTypeAnnotatableIdentifier(allowPrimitiveOverride) {\n    const ident = allowPrimitiveOverride ? this.parseIdentifier() : this.flowParseRestrictedIdentifier();\n    if (this.match(14)) {\n      ident.typeAnnotation = this.flowParseTypeAnnotation();\n      this.resetEndLocation(ident);\n    }\n    return ident;\n  }\n  typeCastToParameter(node) {\n    node.expression.typeAnnotation = node.typeAnnotation;\n    this.resetEndLocation(node.expression, node.typeAnnotation.loc.end);\n    return node.expression;\n  }\n  flowParseVariance() {\n    let variance = null;\n    if (this.match(53)) {\n      variance = this.startNode();\n      if (this.state.value === \"+\") {\n        variance.kind = \"plus\";\n      } else {\n        variance.kind = \"minus\";\n      }\n      this.next();\n      return this.finishNode(variance, \"Variance\");\n    }\n    return variance;\n  }\n  parseFunctionBody(node, allowExpressionBody, isMethod = false) {\n    if (allowExpressionBody) {\n      this.forwardNoArrowParamsConversionAt(node, () => super.parseFunctionBody(node, true, isMethod));\n      return;\n    }\n    super.parseFunctionBody(node, false, isMethod);\n  }\n  parseFunctionBodyAndFinish(node, type, isMethod = false) {\n    if (this.match(14)) {\n      const typeNode = this.startNode();\n      [typeNode.typeAnnotation, node.predicate] = this.flowParseTypeAndPredicateInitialiser();\n      node.returnType = typeNode.typeAnnotation ? this.finishNode(typeNode, \"TypeAnnotation\") : null;\n    }\n    return super.parseFunctionBodyAndFinish(node, type, isMethod);\n  }\n  parseStatementLike(flags) {\n    if (this.state.strict && this.isContextual(127)) {\n      const lookahead = this.lookahead();\n      if (tokenIsKeywordOrIdentifier(lookahead.type)) {\n        const node = this.startNode();\n        this.next();\n        return this.flowParseInterface(node);\n      }\n    } else if (this.shouldParseEnums() && this.isContextual(124)) {\n      const node = this.startNode();\n      this.next();\n      return this.flowParseEnumDeclaration(node);\n    }\n    const stmt = super.parseStatementLike(flags);\n    if (this.flowPragma === undefined && !this.isValidDirective(stmt)) {\n      this.flowPragma = null;\n    }\n    return stmt;\n  }\n  parseExpressionStatement(node, expr, decorators) {\n    if (expr.type === \"Identifier\") {\n      if (expr.name === \"declare\") {\n        if (this.match(80) || tokenIsIdentifier(this.state.type) || this.match(68) || this.match(74) || this.match(82)) {\n          return this.flowParseDeclare(node);\n        }\n      } else if (tokenIsIdentifier(this.state.type)) {\n        if (expr.name === \"interface\") {\n          return this.flowParseInterface(node);\n        } else if (expr.name === \"type\") {\n          return this.flowParseTypeAlias(node);\n        } else if (expr.name === \"opaque\") {\n          return this.flowParseOpaqueType(node, false);\n        }\n      }\n    }\n    return super.parseExpressionStatement(node, expr, decorators);\n  }\n  shouldParseExportDeclaration() {\n    const {\n      type\n    } = this.state;\n    if (tokenIsFlowInterfaceOrTypeOrOpaque(type) || this.shouldParseEnums() && type === 124) {\n      return !this.state.containsEsc;\n    }\n    return super.shouldParseExportDeclaration();\n  }\n  isExportDefaultSpecifier() {\n    const {\n      type\n    } = this.state;\n    if (tokenIsFlowInterfaceOrTypeOrOpaque(type) || this.shouldParseEnums() && type === 124) {\n      return this.state.containsEsc;\n    }\n    return super.isExportDefaultSpecifier();\n  }\n  parseExportDefaultExpression() {\n    if (this.shouldParseEnums() && this.isContextual(124)) {\n      const node = this.startNode();\n      this.next();\n      return this.flowParseEnumDeclaration(node);\n    }\n    return super.parseExportDefaultExpression();\n  }\n  parseConditional(expr, startLoc, refExpressionErrors) {\n    if (!this.match(17)) return expr;\n    if (this.state.maybeInArrowParameters) {\n      const nextCh = this.lookaheadCharCode();\n      if (nextCh === 44 || nextCh === 61 || nextCh === 58 || nextCh === 41) {\n        this.setOptionalParametersError(refExpressionErrors);\n        return expr;\n      }\n    }\n    this.expect(17);\n    const state = this.state.clone();\n    const originalNoArrowAt = this.state.noArrowAt;\n    const node = this.startNodeAt(startLoc);\n    let {\n      consequent,\n      failed\n    } = this.tryParseConditionalConsequent();\n    let [valid, invalid] = this.getArrowLikeExpressions(consequent);\n    if (failed || invalid.length > 0) {\n      const noArrowAt = [...originalNoArrowAt];\n      if (invalid.length > 0) {\n        this.state = state;\n        this.state.noArrowAt = noArrowAt;\n        for (let i = 0; i < invalid.length; i++) {\n          noArrowAt.push(invalid[i].start);\n        }\n        ({\n          consequent,\n          failed\n        } = this.tryParseConditionalConsequent());\n        [valid, invalid] = this.getArrowLikeExpressions(consequent);\n      }\n      if (failed && valid.length > 1) {\n        this.raise(FlowErrors.AmbiguousConditionalArrow, {\n          at: state.startLoc\n        });\n      }\n      if (failed && valid.length === 1) {\n        this.state = state;\n        noArrowAt.push(valid[0].start);\n        this.state.noArrowAt = noArrowAt;\n        ({\n          consequent,\n          failed\n        } = this.tryParseConditionalConsequent());\n      }\n    }\n    this.getArrowLikeExpressions(consequent, true);\n    this.state.noArrowAt = originalNoArrowAt;\n    this.expect(14);\n    node.test = expr;\n    node.consequent = consequent;\n    node.alternate = this.forwardNoArrowParamsConversionAt(node, () => this.parseMaybeAssign(undefined, undefined));\n    return this.finishNode(node, \"ConditionalExpression\");\n  }\n  tryParseConditionalConsequent() {\n    this.state.noArrowParamsConversionAt.push(this.state.start);\n    const consequent = this.parseMaybeAssignAllowIn();\n    const failed = !this.match(14);\n    this.state.noArrowParamsConversionAt.pop();\n    return {\n      consequent,\n      failed\n    };\n  }\n  getArrowLikeExpressions(node, disallowInvalid) {\n    const stack = [node];\n    const arrows = [];\n    while (stack.length !== 0) {\n      const node = stack.pop();\n      if (node.type === \"ArrowFunctionExpression\") {\n        if (node.typeParameters || !node.returnType) {\n          this.finishArrowValidation(node);\n        } else {\n          arrows.push(node);\n        }\n        stack.push(node.body);\n      } else if (node.type === \"ConditionalExpression\") {\n        stack.push(node.consequent);\n        stack.push(node.alternate);\n      }\n    }\n    if (disallowInvalid) {\n      arrows.forEach(node => this.finishArrowValidation(node));\n      return [arrows, []];\n    }\n    return partition(arrows, node => node.params.every(param => this.isAssignable(param, true)));\n  }\n  finishArrowValidation(node) {\n    var _node$extra;\n    this.toAssignableList(node.params, (_node$extra = node.extra) == null ? void 0 : _node$extra.trailingCommaLoc, false);\n    this.scope.enter(SCOPE_FUNCTION | SCOPE_ARROW);\n    super.checkParams(node, false, true);\n    this.scope.exit();\n  }\n  forwardNoArrowParamsConversionAt(node, parse) {\n    let result;\n    if (this.state.noArrowParamsConversionAt.indexOf(node.start) !== -1) {\n      this.state.noArrowParamsConversionAt.push(this.state.start);\n      result = parse();\n      this.state.noArrowParamsConversionAt.pop();\n    } else {\n      result = parse();\n    }\n    return result;\n  }\n  parseParenItem(node, startLoc) {\n    node = super.parseParenItem(node, startLoc);\n    if (this.eat(17)) {\n      node.optional = true;\n      this.resetEndLocation(node);\n    }\n    if (this.match(14)) {\n      const typeCastNode = this.startNodeAt(startLoc);\n      typeCastNode.expression = node;\n      typeCastNode.typeAnnotation = this.flowParseTypeAnnotation();\n      return this.finishNode(typeCastNode, \"TypeCastExpression\");\n    }\n    return node;\n  }\n  assertModuleNodeAllowed(node) {\n    if (node.type === \"ImportDeclaration\" && (node.importKind === \"type\" || node.importKind === \"typeof\") || node.type === \"ExportNamedDeclaration\" && node.exportKind === \"type\" || node.type === \"ExportAllDeclaration\" && node.exportKind === \"type\") {\n      return;\n    }\n    super.assertModuleNodeAllowed(node);\n  }\n  parseExport(node, decorators) {\n    const decl = super.parseExport(node, decorators);\n    if (decl.type === \"ExportNamedDeclaration\" || decl.type === \"ExportAllDeclaration\") {\n      decl.exportKind = decl.exportKind || \"value\";\n    }\n    return decl;\n  }\n  parseExportDeclaration(node) {\n    if (this.isContextual(128)) {\n      node.exportKind = \"type\";\n      const declarationNode = this.startNode();\n      this.next();\n      if (this.match(5)) {\n        node.specifiers = this.parseExportSpecifiers(true);\n        super.parseExportFrom(node);\n        return null;\n      } else {\n        return this.flowParseTypeAlias(declarationNode);\n      }\n    } else if (this.isContextual(129)) {\n      node.exportKind = \"type\";\n      const declarationNode = this.startNode();\n      this.next();\n      return this.flowParseOpaqueType(declarationNode, false);\n    } else if (this.isContextual(127)) {\n      node.exportKind = \"type\";\n      const declarationNode = this.startNode();\n      this.next();\n      return this.flowParseInterface(declarationNode);\n    } else if (this.shouldParseEnums() && this.isContextual(124)) {\n      node.exportKind = \"value\";\n      const declarationNode = this.startNode();\n      this.next();\n      return this.flowParseEnumDeclaration(declarationNode);\n    } else {\n      return super.parseExportDeclaration(node);\n    }\n  }\n  eatExportStar(node) {\n    if (super.eatExportStar(node)) return true;\n    if (this.isContextual(128) && this.lookahead().type === 55) {\n      node.exportKind = \"type\";\n      this.next();\n      this.next();\n      return true;\n    }\n    return false;\n  }\n  maybeParseExportNamespaceSpecifier(node) {\n    const {\n      startLoc\n    } = this.state;\n    const hasNamespace = super.maybeParseExportNamespaceSpecifier(node);\n    if (hasNamespace && node.exportKind === \"type\") {\n      this.unexpected(startLoc);\n    }\n    return hasNamespace;\n  }\n  parseClassId(node, isStatement, optionalId) {\n    super.parseClassId(node, isStatement, optionalId);\n    if (this.match(47)) {\n      node.typeParameters = this.flowParseTypeParameterDeclaration();\n    }\n  }\n  parseClassMember(classBody, member, state) {\n    const {\n      startLoc\n    } = this.state;\n    if (this.isContextual(123)) {\n      if (super.parseClassMemberFromModifier(classBody, member)) {\n        return;\n      }\n      member.declare = true;\n    }\n    super.parseClassMember(classBody, member, state);\n    if (member.declare) {\n      if (member.type !== \"ClassProperty\" && member.type !== \"ClassPrivateProperty\" && member.type !== \"PropertyDefinition\") {\n        this.raise(FlowErrors.DeclareClassElement, {\n          at: startLoc\n        });\n      } else if (member.value) {\n        this.raise(FlowErrors.DeclareClassFieldInitializer, {\n          at: member.value\n        });\n      }\n    }\n  }\n  isIterator(word) {\n    return word === \"iterator\" || word === \"asyncIterator\";\n  }\n  readIterator() {\n    const word = super.readWord1();\n    const fullWord = \"@@\" + word;\n    if (!this.isIterator(word) || !this.state.inType) {\n      this.raise(Errors.InvalidIdentifier, {\n        at: this.state.curPosition(),\n        identifierName: fullWord\n      });\n    }\n    this.finishToken(130, fullWord);\n  }\n  getTokenFromCode(code) {\n    const next = this.input.charCodeAt(this.state.pos + 1);\n    if (code === 123 && next === 124) {\n      this.finishOp(6, 2);\n    } else if (this.state.inType && (code === 62 || code === 60)) {\n      this.finishOp(code === 62 ? 48 : 47, 1);\n    } else if (this.state.inType && code === 63) {\n      if (next === 46) {\n        this.finishOp(18, 2);\n      } else {\n        this.finishOp(17, 1);\n      }\n    } else if (isIteratorStart(code, next, this.input.charCodeAt(this.state.pos + 2))) {\n      this.state.pos += 2;\n      this.readIterator();\n    } else {\n      super.getTokenFromCode(code);\n    }\n  }\n  isAssignable(node, isBinding) {\n    if (node.type === \"TypeCastExpression\") {\n      return this.isAssignable(node.expression, isBinding);\n    } else {\n      return super.isAssignable(node, isBinding);\n    }\n  }\n  toAssignable(node, isLHS = false) {\n    if (!isLHS && node.type === \"AssignmentExpression\" && node.left.type === \"TypeCastExpression\") {\n      node.left = this.typeCastToParameter(node.left);\n    }\n    super.toAssignable(node, isLHS);\n  }\n  toAssignableList(exprList, trailingCommaLoc, isLHS) {\n    for (let i = 0; i < exprList.length; i++) {\n      const expr = exprList[i];\n      if ((expr == null ? void 0 : expr.type) === \"TypeCastExpression\") {\n        exprList[i] = this.typeCastToParameter(expr);\n      }\n    }\n    super.toAssignableList(exprList, trailingCommaLoc, isLHS);\n  }\n  toReferencedList(exprList, isParenthesizedExpr) {\n    for (let i = 0; i < exprList.length; i++) {\n      var _expr$extra;\n      const expr = exprList[i];\n      if (expr && expr.type === \"TypeCastExpression\" && !((_expr$extra = expr.extra) != null && _expr$extra.parenthesized) && (exprList.length > 1 || !isParenthesizedExpr)) {\n        this.raise(FlowErrors.TypeCastInPattern, {\n          at: expr.typeAnnotation\n        });\n      }\n    }\n    return exprList;\n  }\n  parseArrayLike(close, canBePattern, isTuple, refExpressionErrors) {\n    const node = super.parseArrayLike(close, canBePattern, isTuple, refExpressionErrors);\n    if (canBePattern && !this.state.maybeInArrowParameters) {\n      this.toReferencedList(node.elements);\n    }\n    return node;\n  }\n  isValidLVal(type, isParenthesized, binding) {\n    return type === \"TypeCastExpression\" || super.isValidLVal(type, isParenthesized, binding);\n  }\n  parseClassProperty(node) {\n    if (this.match(14)) {\n      node.typeAnnotation = this.flowParseTypeAnnotation();\n    }\n    return super.parseClassProperty(node);\n  }\n  parseClassPrivateProperty(node) {\n    if (this.match(14)) {\n      node.typeAnnotation = this.flowParseTypeAnnotation();\n    }\n    return super.parseClassPrivateProperty(node);\n  }\n  isClassMethod() {\n    return this.match(47) || super.isClassMethod();\n  }\n  isClassProperty() {\n    return this.match(14) || super.isClassProperty();\n  }\n  isNonstaticConstructor(method) {\n    return !this.match(14) && super.isNonstaticConstructor(method);\n  }\n  pushClassMethod(classBody, method, isGenerator, isAsync, isConstructor, allowsDirectSuper) {\n    if (method.variance) {\n      this.unexpected(method.variance.loc.start);\n    }\n    delete method.variance;\n    if (this.match(47)) {\n      method.typeParameters = this.flowParseTypeParameterDeclaration();\n    }\n    super.pushClassMethod(classBody, method, isGenerator, isAsync, isConstructor, allowsDirectSuper);\n    if (method.params && isConstructor) {\n      const params = method.params;\n      if (params.length > 0 && this.isThisParam(params[0])) {\n        this.raise(FlowErrors.ThisParamBannedInConstructor, {\n          at: method\n        });\n      }\n    } else if (method.type === \"MethodDefinition\" && isConstructor && method.value.params) {\n      const params = method.value.params;\n      if (params.length > 0 && this.isThisParam(params[0])) {\n        this.raise(FlowErrors.ThisParamBannedInConstructor, {\n          at: method\n        });\n      }\n    }\n  }\n  pushClassPrivateMethod(classBody, method, isGenerator, isAsync) {\n    if (method.variance) {\n      this.unexpected(method.variance.loc.start);\n    }\n    delete method.variance;\n    if (this.match(47)) {\n      method.typeParameters = this.flowParseTypeParameterDeclaration();\n    }\n    super.pushClassPrivateMethod(classBody, method, isGenerator, isAsync);\n  }\n  parseClassSuper(node) {\n    super.parseClassSuper(node);\n    if (node.superClass && this.match(47)) {\n      node.superTypeParameters = this.flowParseTypeParameterInstantiation();\n    }\n    if (this.isContextual(111)) {\n      this.next();\n      const implemented = node.implements = [];\n      do {\n        const node = this.startNode();\n        node.id = this.flowParseRestrictedIdentifier(true);\n        if (this.match(47)) {\n          node.typeParameters = this.flowParseTypeParameterInstantiation();\n        } else {\n          node.typeParameters = null;\n        }\n        implemented.push(this.finishNode(node, \"ClassImplements\"));\n      } while (this.eat(12));\n    }\n  }\n  checkGetterSetterParams(method) {\n    super.checkGetterSetterParams(method);\n    const params = this.getObjectOrClassMethodParams(method);\n    if (params.length > 0) {\n      const param = params[0];\n      if (this.isThisParam(param) && method.kind === \"get\") {\n        this.raise(FlowErrors.GetterMayNotHaveThisParam, {\n          at: param\n        });\n      } else if (this.isThisParam(param)) {\n        this.raise(FlowErrors.SetterMayNotHaveThisParam, {\n          at: param\n        });\n      }\n    }\n  }\n  parsePropertyNamePrefixOperator(node) {\n    node.variance = this.flowParseVariance();\n  }\n  parseObjPropValue(prop, startLoc, isGenerator, isAsync, isPattern, isAccessor, refExpressionErrors) {\n    if (prop.variance) {\n      this.unexpected(prop.variance.loc.start);\n    }\n    delete prop.variance;\n    let typeParameters;\n    if (this.match(47) && !isAccessor) {\n      typeParameters = this.flowParseTypeParameterDeclaration();\n      if (!this.match(10)) this.unexpected();\n    }\n    const result = super.parseObjPropValue(prop, startLoc, isGenerator, isAsync, isPattern, isAccessor, refExpressionErrors);\n    if (typeParameters) {\n      (result.value || result).typeParameters = typeParameters;\n    }\n    return result;\n  }\n  parseAssignableListItemTypes(param) {\n    if (this.eat(17)) {\n      if (param.type !== \"Identifier\") {\n        this.raise(FlowErrors.PatternIsOptional, {\n          at: param\n        });\n      }\n      if (this.isThisParam(param)) {\n        this.raise(FlowErrors.ThisParamMayNotBeOptional, {\n          at: param\n        });\n      }\n      param.optional = true;\n    }\n    if (this.match(14)) {\n      param.typeAnnotation = this.flowParseTypeAnnotation();\n    } else if (this.isThisParam(param)) {\n      this.raise(FlowErrors.ThisParamAnnotationRequired, {\n        at: param\n      });\n    }\n    if (this.match(29) && this.isThisParam(param)) {\n      this.raise(FlowErrors.ThisParamNoDefault, {\n        at: param\n      });\n    }\n    this.resetEndLocation(param);\n    return param;\n  }\n  parseMaybeDefault(startLoc, left) {\n    const node = super.parseMaybeDefault(startLoc, left);\n    if (node.type === \"AssignmentPattern\" && node.typeAnnotation && node.right.start < node.typeAnnotation.start) {\n      this.raise(FlowErrors.TypeBeforeInitializer, {\n        at: node.typeAnnotation\n      });\n    }\n    return node;\n  }\n  shouldParseDefaultImport(node) {\n    if (!hasTypeImportKind(node)) {\n      return super.shouldParseDefaultImport(node);\n    }\n    return isMaybeDefaultImport(this.state.type);\n  }\n  checkImportReflection(node) {\n    super.checkImportReflection(node);\n    if (node.module && node.importKind !== \"value\") {\n      this.raise(FlowErrors.ImportReflectionHasImportType, {\n        at: node.specifiers[0].loc.start\n      });\n    }\n  }\n  parseImportSpecifierLocal(node, specifier, type) {\n    specifier.local = hasTypeImportKind(node) ? this.flowParseRestrictedIdentifier(true, true) : this.parseIdentifier();\n    node.specifiers.push(this.finishImportSpecifier(specifier, type));\n  }\n  maybeParseDefaultImportSpecifier(node) {\n    node.importKind = \"value\";\n    let kind = null;\n    if (this.match(87)) {\n      kind = \"typeof\";\n    } else if (this.isContextual(128)) {\n      kind = \"type\";\n    }\n    if (kind) {\n      const lh = this.lookahead();\n      const {\n        type\n      } = lh;\n      if (kind === \"type\" && type === 55) {\n        this.unexpected(null, lh.type);\n      }\n      if (isMaybeDefaultImport(type) || type === 5 || type === 55) {\n        this.next();\n        node.importKind = kind;\n      }\n    }\n    return super.maybeParseDefaultImportSpecifier(node);\n  }\n  parseImportSpecifier(specifier, importedIsString, isInTypeOnlyImport, isMaybeTypeOnly, bindingType) {\n    const firstIdent = specifier.imported;\n    let specifierTypeKind = null;\n    if (firstIdent.type === \"Identifier\") {\n      if (firstIdent.name === \"type\") {\n        specifierTypeKind = \"type\";\n      } else if (firstIdent.name === \"typeof\") {\n        specifierTypeKind = \"typeof\";\n      }\n    }\n    let isBinding = false;\n    if (this.isContextual(93) && !this.isLookaheadContextual(\"as\")) {\n      const as_ident = this.parseIdentifier(true);\n      if (specifierTypeKind !== null && !tokenIsKeywordOrIdentifier(this.state.type)) {\n        specifier.imported = as_ident;\n        specifier.importKind = specifierTypeKind;\n        specifier.local = cloneIdentifier(as_ident);\n      } else {\n        specifier.imported = firstIdent;\n        specifier.importKind = null;\n        specifier.local = this.parseIdentifier();\n      }\n    } else {\n      if (specifierTypeKind !== null && tokenIsKeywordOrIdentifier(this.state.type)) {\n        specifier.imported = this.parseIdentifier(true);\n        specifier.importKind = specifierTypeKind;\n      } else {\n        if (importedIsString) {\n          throw this.raise(Errors.ImportBindingIsString, {\n            at: specifier,\n            importName: firstIdent.value\n          });\n        }\n        specifier.imported = firstIdent;\n        specifier.importKind = null;\n      }\n      if (this.eatContextual(93)) {\n        specifier.local = this.parseIdentifier();\n      } else {\n        isBinding = true;\n        specifier.local = cloneIdentifier(specifier.imported);\n      }\n    }\n    const specifierIsTypeImport = hasTypeImportKind(specifier);\n    if (isInTypeOnlyImport && specifierIsTypeImport) {\n      this.raise(FlowErrors.ImportTypeShorthandOnlyInPureImport, {\n        at: specifier\n      });\n    }\n    if (isInTypeOnlyImport || specifierIsTypeImport) {\n      this.checkReservedType(specifier.local.name, specifier.local.loc.start, true);\n    }\n    if (isBinding && !isInTypeOnlyImport && !specifierIsTypeImport) {\n      this.checkReservedWord(specifier.local.name, specifier.loc.start, true, true);\n    }\n    return this.finishImportSpecifier(specifier, \"ImportSpecifier\");\n  }\n  parseBindingAtom() {\n    switch (this.state.type) {\n      case 78:\n        return this.parseIdentifier(true);\n      default:\n        return super.parseBindingAtom();\n    }\n  }\n  parseFunctionParams(node, isConstructor) {\n    const kind = node.kind;\n    if (kind !== \"get\" && kind !== \"set\" && this.match(47)) {\n      node.typeParameters = this.flowParseTypeParameterDeclaration();\n    }\n    super.parseFunctionParams(node, isConstructor);\n  }\n  parseVarId(decl, kind) {\n    super.parseVarId(decl, kind);\n    if (this.match(14)) {\n      decl.id.typeAnnotation = this.flowParseTypeAnnotation();\n      this.resetEndLocation(decl.id);\n    }\n  }\n  parseAsyncArrowFromCallExpression(node, call) {\n    if (this.match(14)) {\n      const oldNoAnonFunctionType = this.state.noAnonFunctionType;\n      this.state.noAnonFunctionType = true;\n      node.returnType = this.flowParseTypeAnnotation();\n      this.state.noAnonFunctionType = oldNoAnonFunctionType;\n    }\n    return super.parseAsyncArrowFromCallExpression(node, call);\n  }\n  shouldParseAsyncArrow() {\n    return this.match(14) || super.shouldParseAsyncArrow();\n  }\n  parseMaybeAssign(refExpressionErrors, afterLeftParse) {\n    var _jsx;\n    let state = null;\n    let jsx;\n    if (this.hasPlugin(\"jsx\") && (this.match(140) || this.match(47))) {\n      state = this.state.clone();\n      jsx = this.tryParse(() => super.parseMaybeAssign(refExpressionErrors, afterLeftParse), state);\n      if (!jsx.error) return jsx.node;\n      const {\n        context\n      } = this.state;\n      const currentContext = context[context.length - 1];\n      if (currentContext === types.j_oTag || currentContext === types.j_expr) {\n        context.pop();\n      }\n    }\n    if ((_jsx = jsx) != null && _jsx.error || this.match(47)) {\n      var _jsx2, _jsx3;\n      state = state || this.state.clone();\n      let typeParameters;\n      const arrow = this.tryParse(abort => {\n        var _arrowExpression$extr;\n        typeParameters = this.flowParseTypeParameterDeclaration();\n        const arrowExpression = this.forwardNoArrowParamsConversionAt(typeParameters, () => {\n          const result = super.parseMaybeAssign(refExpressionErrors, afterLeftParse);\n          this.resetStartLocationFromNode(result, typeParameters);\n          return result;\n        });\n        if ((_arrowExpression$extr = arrowExpression.extra) != null && _arrowExpression$extr.parenthesized) abort();\n        const expr = this.maybeUnwrapTypeCastExpression(arrowExpression);\n        if (expr.type !== \"ArrowFunctionExpression\") abort();\n        expr.typeParameters = typeParameters;\n        this.resetStartLocationFromNode(expr, typeParameters);\n        return arrowExpression;\n      }, state);\n      let arrowExpression = null;\n      if (arrow.node && this.maybeUnwrapTypeCastExpression(arrow.node).type === \"ArrowFunctionExpression\") {\n        if (!arrow.error && !arrow.aborted) {\n          if (arrow.node.async) {\n            this.raise(FlowErrors.UnexpectedTypeParameterBeforeAsyncArrowFunction, {\n              at: typeParameters\n            });\n          }\n          return arrow.node;\n        }\n        arrowExpression = arrow.node;\n      }\n      if ((_jsx2 = jsx) != null && _jsx2.node) {\n        this.state = jsx.failState;\n        return jsx.node;\n      }\n      if (arrowExpression) {\n        this.state = arrow.failState;\n        return arrowExpression;\n      }\n      if ((_jsx3 = jsx) != null && _jsx3.thrown) throw jsx.error;\n      if (arrow.thrown) throw arrow.error;\n      throw this.raise(FlowErrors.UnexpectedTokenAfterTypeParameter, {\n        at: typeParameters\n      });\n    }\n    return super.parseMaybeAssign(refExpressionErrors, afterLeftParse);\n  }\n  parseArrow(node) {\n    if (this.match(14)) {\n      const result = this.tryParse(() => {\n        const oldNoAnonFunctionType = this.state.noAnonFunctionType;\n        this.state.noAnonFunctionType = true;\n        const typeNode = this.startNode();\n        [typeNode.typeAnnotation, node.predicate] = this.flowParseTypeAndPredicateInitialiser();\n        this.state.noAnonFunctionType = oldNoAnonFunctionType;\n        if (this.canInsertSemicolon()) this.unexpected();\n        if (!this.match(19)) this.unexpected();\n        return typeNode;\n      });\n      if (result.thrown) return null;\n      if (result.error) this.state = result.failState;\n      node.returnType = result.node.typeAnnotation ? this.finishNode(result.node, \"TypeAnnotation\") : null;\n    }\n    return super.parseArrow(node);\n  }\n  shouldParseArrow(params) {\n    return this.match(14) || super.shouldParseArrow(params);\n  }\n  setArrowFunctionParameters(node, params) {\n    if (this.state.noArrowParamsConversionAt.indexOf(node.start) !== -1) {\n      node.params = params;\n    } else {\n      super.setArrowFunctionParameters(node, params);\n    }\n  }\n  checkParams(node, allowDuplicates, isArrowFunction, strictModeChanged = true) {\n    if (isArrowFunction && this.state.noArrowParamsConversionAt.indexOf(node.start) !== -1) {\n      return;\n    }\n    for (let i = 0; i < node.params.length; i++) {\n      if (this.isThisParam(node.params[i]) && i > 0) {\n        this.raise(FlowErrors.ThisParamMustBeFirst, {\n          at: node.params[i]\n        });\n      }\n    }\n    super.checkParams(node, allowDuplicates, isArrowFunction, strictModeChanged);\n  }\n  parseParenAndDistinguishExpression(canBeArrow) {\n    return super.parseParenAndDistinguishExpression(canBeArrow && this.state.noArrowAt.indexOf(this.state.start) === -1);\n  }\n  parseSubscripts(base, startLoc, noCalls) {\n    if (base.type === \"Identifier\" && base.name === \"async\" && this.state.noArrowAt.indexOf(startLoc.index) !== -1) {\n      this.next();\n      const node = this.startNodeAt(startLoc);\n      node.callee = base;\n      node.arguments = super.parseCallExpressionArguments(11, false);\n      base = this.finishNode(node, \"CallExpression\");\n    } else if (base.type === \"Identifier\" && base.name === \"async\" && this.match(47)) {\n      const state = this.state.clone();\n      const arrow = this.tryParse(abort => this.parseAsyncArrowWithTypeParameters(startLoc) || abort(), state);\n      if (!arrow.error && !arrow.aborted) return arrow.node;\n      const result = this.tryParse(() => super.parseSubscripts(base, startLoc, noCalls), state);\n      if (result.node && !result.error) return result.node;\n      if (arrow.node) {\n        this.state = arrow.failState;\n        return arrow.node;\n      }\n      if (result.node) {\n        this.state = result.failState;\n        return result.node;\n      }\n      throw arrow.error || result.error;\n    }\n    return super.parseSubscripts(base, startLoc, noCalls);\n  }\n  parseSubscript(base, startLoc, noCalls, subscriptState) {\n    if (this.match(18) && this.isLookaheadToken_lt()) {\n      subscriptState.optionalChainMember = true;\n      if (noCalls) {\n        subscriptState.stop = true;\n        return base;\n      }\n      this.next();\n      const node = this.startNodeAt(startLoc);\n      node.callee = base;\n      node.typeArguments = this.flowParseTypeParameterInstantiation();\n      this.expect(10);\n      node.arguments = this.parseCallExpressionArguments(11, false);\n      node.optional = true;\n      return this.finishCallExpression(node, true);\n    } else if (!noCalls && this.shouldParseTypes() && this.match(47)) {\n      const node = this.startNodeAt(startLoc);\n      node.callee = base;\n      const result = this.tryParse(() => {\n        node.typeArguments = this.flowParseTypeParameterInstantiationCallOrNew();\n        this.expect(10);\n        node.arguments = super.parseCallExpressionArguments(11, false);\n        if (subscriptState.optionalChainMember) {\n          node.optional = false;\n        }\n        return this.finishCallExpression(node, subscriptState.optionalChainMember);\n      });\n      if (result.node) {\n        if (result.error) this.state = result.failState;\n        return result.node;\n      }\n    }\n    return super.parseSubscript(base, startLoc, noCalls, subscriptState);\n  }\n  parseNewCallee(node) {\n    super.parseNewCallee(node);\n    let targs = null;\n    if (this.shouldParseTypes() && this.match(47)) {\n      targs = this.tryParse(() => this.flowParseTypeParameterInstantiationCallOrNew()).node;\n    }\n    node.typeArguments = targs;\n  }\n  parseAsyncArrowWithTypeParameters(startLoc) {\n    const node = this.startNodeAt(startLoc);\n    this.parseFunctionParams(node, false);\n    if (!this.parseArrow(node)) return;\n    return super.parseArrowExpression(node, undefined, true);\n  }\n  readToken_mult_modulo(code) {\n    const next = this.input.charCodeAt(this.state.pos + 1);\n    if (code === 42 && next === 47 && this.state.hasFlowComment) {\n      this.state.hasFlowComment = false;\n      this.state.pos += 2;\n      this.nextToken();\n      return;\n    }\n    super.readToken_mult_modulo(code);\n  }\n  readToken_pipe_amp(code) {\n    const next = this.input.charCodeAt(this.state.pos + 1);\n    if (code === 124 && next === 125) {\n      this.finishOp(9, 2);\n      return;\n    }\n    super.readToken_pipe_amp(code);\n  }\n  parseTopLevel(file, program) {\n    const fileNode = super.parseTopLevel(file, program);\n    if (this.state.hasFlowComment) {\n      this.raise(FlowErrors.UnterminatedFlowComment, {\n        at: this.state.curPosition()\n      });\n    }\n    return fileNode;\n  }\n  skipBlockComment() {\n    if (this.hasPlugin(\"flowComments\") && this.skipFlowComment()) {\n      if (this.state.hasFlowComment) {\n        throw this.raise(FlowErrors.NestedFlowComment, {\n          at: this.state.startLoc\n        });\n      }\n      this.hasFlowCommentCompletion();\n      const commentSkip = this.skipFlowComment();\n      if (commentSkip) {\n        this.state.pos += commentSkip;\n        this.state.hasFlowComment = true;\n      }\n      return;\n    }\n    return super.skipBlockComment(this.state.hasFlowComment ? \"*-/\" : \"*/\");\n  }\n  skipFlowComment() {\n    const {\n      pos\n    } = this.state;\n    let shiftToFirstNonWhiteSpace = 2;\n    while ([32, 9].includes(this.input.charCodeAt(pos + shiftToFirstNonWhiteSpace))) {\n      shiftToFirstNonWhiteSpace++;\n    }\n    const ch2 = this.input.charCodeAt(shiftToFirstNonWhiteSpace + pos);\n    const ch3 = this.input.charCodeAt(shiftToFirstNonWhiteSpace + pos + 1);\n    if (ch2 === 58 && ch3 === 58) {\n      return shiftToFirstNonWhiteSpace + 2;\n    }\n    if (this.input.slice(shiftToFirstNonWhiteSpace + pos, shiftToFirstNonWhiteSpace + pos + 12) === \"flow-include\") {\n      return shiftToFirstNonWhiteSpace + 12;\n    }\n    if (ch2 === 58 && ch3 !== 58) {\n      return shiftToFirstNonWhiteSpace;\n    }\n    return false;\n  }\n  hasFlowCommentCompletion() {\n    const end = this.input.indexOf(\"*/\", this.state.pos);\n    if (end === -1) {\n      throw this.raise(Errors.UnterminatedComment, {\n        at: this.state.curPosition()\n      });\n    }\n  }\n  flowEnumErrorBooleanMemberNotInitialized(loc, {\n    enumName,\n    memberName\n  }) {\n    this.raise(FlowErrors.EnumBooleanMemberNotInitialized, {\n      at: loc,\n      memberName,\n      enumName\n    });\n  }\n  flowEnumErrorInvalidMemberInitializer(loc, enumContext) {\n    return this.raise(!enumContext.explicitType ? FlowErrors.EnumInvalidMemberInitializerUnknownType : enumContext.explicitType === \"symbol\" ? FlowErrors.EnumInvalidMemberInitializerSymbolType : FlowErrors.EnumInvalidMemberInitializerPrimaryType, Object.assign({\n      at: loc\n    }, enumContext));\n  }\n  flowEnumErrorNumberMemberNotInitialized(loc, {\n    enumName,\n    memberName\n  }) {\n    this.raise(FlowErrors.EnumNumberMemberNotInitialized, {\n      at: loc,\n      enumName,\n      memberName\n    });\n  }\n  flowEnumErrorStringMemberInconsistentlyInitailized(node, {\n    enumName\n  }) {\n    this.raise(FlowErrors.EnumStringMemberInconsistentlyInitailized, {\n      at: node,\n      enumName\n    });\n  }\n  flowEnumMemberInit() {\n    const startLoc = this.state.startLoc;\n    const endOfInit = () => this.match(12) || this.match(8);\n    switch (this.state.type) {\n      case 132:\n        {\n          const literal = this.parseNumericLiteral(this.state.value);\n          if (endOfInit()) {\n            return {\n              type: \"number\",\n              loc: literal.loc.start,\n              value: literal\n            };\n          }\n          return {\n            type: \"invalid\",\n            loc: startLoc\n          };\n        }\n      case 131:\n        {\n          const literal = this.parseStringLiteral(this.state.value);\n          if (endOfInit()) {\n            return {\n              type: \"string\",\n              loc: literal.loc.start,\n              value: literal\n            };\n          }\n          return {\n            type: \"invalid\",\n            loc: startLoc\n          };\n        }\n      case 85:\n      case 86:\n        {\n          const literal = this.parseBooleanLiteral(this.match(85));\n          if (endOfInit()) {\n            return {\n              type: \"boolean\",\n              loc: literal.loc.start,\n              value: literal\n            };\n          }\n          return {\n            type: \"invalid\",\n            loc: startLoc\n          };\n        }\n      default:\n        return {\n          type: \"invalid\",\n          loc: startLoc\n        };\n    }\n  }\n  flowEnumMemberRaw() {\n    const loc = this.state.startLoc;\n    const id = this.parseIdentifier(true);\n    const init = this.eat(29) ? this.flowEnumMemberInit() : {\n      type: \"none\",\n      loc\n    };\n    return {\n      id,\n      init\n    };\n  }\n  flowEnumCheckExplicitTypeMismatch(loc, context, expectedType) {\n    const {\n      explicitType\n    } = context;\n    if (explicitType === null) {\n      return;\n    }\n    if (explicitType !== expectedType) {\n      this.flowEnumErrorInvalidMemberInitializer(loc, context);\n    }\n  }\n  flowEnumMembers({\n    enumName,\n    explicitType\n  }) {\n    const seenNames = new Set();\n    const members = {\n      booleanMembers: [],\n      numberMembers: [],\n      stringMembers: [],\n      defaultedMembers: []\n    };\n    let hasUnknownMembers = false;\n    while (!this.match(8)) {\n      if (this.eat(21)) {\n        hasUnknownMembers = true;\n        break;\n      }\n      const memberNode = this.startNode();\n      const {\n        id,\n        init\n      } = this.flowEnumMemberRaw();\n      const memberName = id.name;\n      if (memberName === \"\") {\n        continue;\n      }\n      if (/^[a-z]/.test(memberName)) {\n        this.raise(FlowErrors.EnumInvalidMemberName, {\n          at: id,\n          memberName,\n          suggestion: memberName[0].toUpperCase() + memberName.slice(1),\n          enumName\n        });\n      }\n      if (seenNames.has(memberName)) {\n        this.raise(FlowErrors.EnumDuplicateMemberName, {\n          at: id,\n          memberName,\n          enumName\n        });\n      }\n      seenNames.add(memberName);\n      const context = {\n        enumName,\n        explicitType,\n        memberName\n      };\n      memberNode.id = id;\n      switch (init.type) {\n        case \"boolean\":\n          {\n            this.flowEnumCheckExplicitTypeMismatch(init.loc, context, \"boolean\");\n            memberNode.init = init.value;\n            members.booleanMembers.push(this.finishNode(memberNode, \"EnumBooleanMember\"));\n            break;\n          }\n        case \"number\":\n          {\n            this.flowEnumCheckExplicitTypeMismatch(init.loc, context, \"number\");\n            memberNode.init = init.value;\n            members.numberMembers.push(this.finishNode(memberNode, \"EnumNumberMember\"));\n            break;\n          }\n        case \"string\":\n          {\n            this.flowEnumCheckExplicitTypeMismatch(init.loc, context, \"string\");\n            memberNode.init = init.value;\n            members.stringMembers.push(this.finishNode(memberNode, \"EnumStringMember\"));\n            break;\n          }\n        case \"invalid\":\n          {\n            throw this.flowEnumErrorInvalidMemberInitializer(init.loc, context);\n          }\n        case \"none\":\n          {\n            switch (explicitType) {\n              case \"boolean\":\n                this.flowEnumErrorBooleanMemberNotInitialized(init.loc, context);\n                break;\n              case \"number\":\n                this.flowEnumErrorNumberMemberNotInitialized(init.loc, context);\n                break;\n              default:\n                members.defaultedMembers.push(this.finishNode(memberNode, \"EnumDefaultedMember\"));\n            }\n          }\n      }\n      if (!this.match(8)) {\n        this.expect(12);\n      }\n    }\n    return {\n      members,\n      hasUnknownMembers\n    };\n  }\n  flowEnumStringMembers(initializedMembers, defaultedMembers, {\n    enumName\n  }) {\n    if (initializedMembers.length === 0) {\n      return defaultedMembers;\n    } else if (defaultedMembers.length === 0) {\n      return initializedMembers;\n    } else if (defaultedMembers.length > initializedMembers.length) {\n      for (const member of initializedMembers) {\n        this.flowEnumErrorStringMemberInconsistentlyInitailized(member, {\n          enumName\n        });\n      }\n      return defaultedMembers;\n    } else {\n      for (const member of defaultedMembers) {\n        this.flowEnumErrorStringMemberInconsistentlyInitailized(member, {\n          enumName\n        });\n      }\n      return initializedMembers;\n    }\n  }\n  flowEnumParseExplicitType({\n    enumName\n  }) {\n    if (!this.eatContextual(101)) return null;\n    if (!tokenIsIdentifier(this.state.type)) {\n      throw this.raise(FlowErrors.EnumInvalidExplicitTypeUnknownSupplied, {\n        at: this.state.startLoc,\n        enumName\n      });\n    }\n    const {\n      value\n    } = this.state;\n    this.next();\n    if (value !== \"boolean\" && value !== \"number\" && value !== \"string\" && value !== \"symbol\") {\n      this.raise(FlowErrors.EnumInvalidExplicitType, {\n        at: this.state.startLoc,\n        enumName,\n        invalidEnumType: value\n      });\n    }\n    return value;\n  }\n  flowEnumBody(node, id) {\n    const enumName = id.name;\n    const nameLoc = id.loc.start;\n    const explicitType = this.flowEnumParseExplicitType({\n      enumName\n    });\n    this.expect(5);\n    const {\n      members,\n      hasUnknownMembers\n    } = this.flowEnumMembers({\n      enumName,\n      explicitType\n    });\n    node.hasUnknownMembers = hasUnknownMembers;\n    switch (explicitType) {\n      case \"boolean\":\n        node.explicitType = true;\n        node.members = members.booleanMembers;\n        this.expect(8);\n        return this.finishNode(node, \"EnumBooleanBody\");\n      case \"number\":\n        node.explicitType = true;\n        node.members = members.numberMembers;\n        this.expect(8);\n        return this.finishNode(node, \"EnumNumberBody\");\n      case \"string\":\n        node.explicitType = true;\n        node.members = this.flowEnumStringMembers(members.stringMembers, members.defaultedMembers, {\n          enumName\n        });\n        this.expect(8);\n        return this.finishNode(node, \"EnumStringBody\");\n      case \"symbol\":\n        node.members = members.defaultedMembers;\n        this.expect(8);\n        return this.finishNode(node, \"EnumSymbolBody\");\n      default:\n        {\n          const empty = () => {\n            node.members = [];\n            this.expect(8);\n            return this.finishNode(node, \"EnumStringBody\");\n          };\n          node.explicitType = false;\n          const boolsLen = members.booleanMembers.length;\n          const numsLen = members.numberMembers.length;\n          const strsLen = members.stringMembers.length;\n          const defaultedLen = members.defaultedMembers.length;\n          if (!boolsLen && !numsLen && !strsLen && !defaultedLen) {\n            return empty();\n          } else if (!boolsLen && !numsLen) {\n            node.members = this.flowEnumStringMembers(members.stringMembers, members.defaultedMembers, {\n              enumName\n            });\n            this.expect(8);\n            return this.finishNode(node, \"EnumStringBody\");\n          } else if (!numsLen && !strsLen && boolsLen >= defaultedLen) {\n            for (const member of members.defaultedMembers) {\n              this.flowEnumErrorBooleanMemberNotInitialized(member.loc.start, {\n                enumName,\n                memberName: member.id.name\n              });\n            }\n            node.members = members.booleanMembers;\n            this.expect(8);\n            return this.finishNode(node, \"EnumBooleanBody\");\n          } else if (!boolsLen && !strsLen && numsLen >= defaultedLen) {\n            for (const member of members.defaultedMembers) {\n              this.flowEnumErrorNumberMemberNotInitialized(member.loc.start, {\n                enumName,\n                memberName: member.id.name\n              });\n            }\n            node.members = members.numberMembers;\n            this.expect(8);\n            return this.finishNode(node, \"EnumNumberBody\");\n          } else {\n            this.raise(FlowErrors.EnumInconsistentMemberValues, {\n              at: nameLoc,\n              enumName\n            });\n            return empty();\n          }\n        }\n    }\n  }\n  flowParseEnumDeclaration(node) {\n    const id = this.parseIdentifier();\n    node.id = id;\n    node.body = this.flowEnumBody(this.startNode(), id);\n    return this.finishNode(node, \"EnumDeclaration\");\n  }\n  isLookaheadToken_lt() {\n    const next = this.nextTokenStart();\n    if (this.input.charCodeAt(next) === 60) {\n      const afterNext = this.input.charCodeAt(next + 1);\n      return afterNext !== 60 && afterNext !== 61;\n    }\n    return false;\n  }\n  maybeUnwrapTypeCastExpression(node) {\n    return node.type === \"TypeCastExpression\" ? node.expression : node;\n  }\n};\nconst entities = {\n  __proto__: null,\n  quot: \"\\u0022\",\n  amp: \"&\",\n  apos: \"\\u0027\",\n  lt: \"<\",\n  gt: \">\",\n  nbsp: \"\\u00A0\",\n  iexcl: \"\\u00A1\",\n  cent: \"\\u00A2\",\n  pound: \"\\u00A3\",\n  curren: \"\\u00A4\",\n  yen: \"\\u00A5\",\n  brvbar: \"\\u00A6\",\n  sect: \"\\u00A7\",\n  uml: \"\\u00A8\",\n  copy: \"\\u00A9\",\n  ordf: \"\\u00AA\",\n  laquo: \"\\u00AB\",\n  not: \"\\u00AC\",\n  shy: \"\\u00AD\",\n  reg: \"\\u00AE\",\n  macr: \"\\u00AF\",\n  deg: \"\\u00B0\",\n  plusmn: \"\\u00B1\",\n  sup2: \"\\u00B2\",\n  sup3: \"\\u00B3\",\n  acute: \"\\u00B4\",\n  micro: \"\\u00B5\",\n  para: \"\\u00B6\",\n  middot: \"\\u00B7\",\n  cedil: \"\\u00B8\",\n  sup1: \"\\u00B9\",\n  ordm: \"\\u00BA\",\n  raquo: \"\\u00BB\",\n  frac14: \"\\u00BC\",\n  frac12: \"\\u00BD\",\n  frac34: \"\\u00BE\",\n  iquest: \"\\u00BF\",\n  Agrave: \"\\u00C0\",\n  Aacute: \"\\u00C1\",\n  Acirc: \"\\u00C2\",\n  Atilde: \"\\u00C3\",\n  Auml: \"\\u00C4\",\n  Aring: \"\\u00C5\",\n  AElig: \"\\u00C6\",\n  Ccedil: \"\\u00C7\",\n  Egrave: \"\\u00C8\",\n  Eacute: \"\\u00C9\",\n  Ecirc: \"\\u00CA\",\n  Euml: \"\\u00CB\",\n  Igrave: \"\\u00CC\",\n  Iacute: \"\\u00CD\",\n  Icirc: \"\\u00CE\",\n  Iuml: \"\\u00CF\",\n  ETH: \"\\u00D0\",\n  Ntilde: \"\\u00D1\",\n  Ograve: \"\\u00D2\",\n  Oacute: \"\\u00D3\",\n  Ocirc: \"\\u00D4\",\n  Otilde: \"\\u00D5\",\n  Ouml: \"\\u00D6\",\n  times: \"\\u00D7\",\n  Oslash: \"\\u00D8\",\n  Ugrave: \"\\u00D9\",\n  Uacute: \"\\u00DA\",\n  Ucirc: \"\\u00DB\",\n  Uuml: \"\\u00DC\",\n  Yacute: \"\\u00DD\",\n  THORN: \"\\u00DE\",\n  szlig: \"\\u00DF\",\n  agrave: \"\\u00E0\",\n  aacute: \"\\u00E1\",\n  acirc: \"\\u00E2\",\n  atilde: \"\\u00E3\",\n  auml: \"\\u00E4\",\n  aring: \"\\u00E5\",\n  aelig: \"\\u00E6\",\n  ccedil: \"\\u00E7\",\n  egrave: \"\\u00E8\",\n  eacute: \"\\u00E9\",\n  ecirc: \"\\u00EA\",\n  euml: \"\\u00EB\",\n  igrave: \"\\u00EC\",\n  iacute: \"\\u00ED\",\n  icirc: \"\\u00EE\",\n  iuml: \"\\u00EF\",\n  eth: \"\\u00F0\",\n  ntilde: \"\\u00F1\",\n  ograve: \"\\u00F2\",\n  oacute: \"\\u00F3\",\n  ocirc: \"\\u00F4\",\n  otilde: \"\\u00F5\",\n  ouml: \"\\u00F6\",\n  divide: \"\\u00F7\",\n  oslash: \"\\u00F8\",\n  ugrave: \"\\u00F9\",\n  uacute: \"\\u00FA\",\n  ucirc: \"\\u00FB\",\n  uuml: \"\\u00FC\",\n  yacute: \"\\u00FD\",\n  thorn: \"\\u00FE\",\n  yuml: \"\\u00FF\",\n  OElig: \"\\u0152\",\n  oelig: \"\\u0153\",\n  Scaron: \"\\u0160\",\n  scaron: \"\\u0161\",\n  Yuml: \"\\u0178\",\n  fnof: \"\\u0192\",\n  circ: \"\\u02C6\",\n  tilde: \"\\u02DC\",\n  Alpha: \"\\u0391\",\n  Beta: \"\\u0392\",\n  Gamma: \"\\u0393\",\n  Delta: \"\\u0394\",\n  Epsilon: \"\\u0395\",\n  Zeta: \"\\u0396\",\n  Eta: \"\\u0397\",\n  Theta: \"\\u0398\",\n  Iota: \"\\u0399\",\n  Kappa: \"\\u039A\",\n  Lambda: \"\\u039B\",\n  Mu: \"\\u039C\",\n  Nu: \"\\u039D\",\n  Xi: \"\\u039E\",\n  Omicron: \"\\u039F\",\n  Pi: \"\\u03A0\",\n  Rho: \"\\u03A1\",\n  Sigma: \"\\u03A3\",\n  Tau: \"\\u03A4\",\n  Upsilon: \"\\u03A5\",\n  Phi: \"\\u03A6\",\n  Chi: \"\\u03A7\",\n  Psi: \"\\u03A8\",\n  Omega: \"\\u03A9\",\n  alpha: \"\\u03B1\",\n  beta: \"\\u03B2\",\n  gamma: \"\\u03B3\",\n  delta: \"\\u03B4\",\n  epsilon: \"\\u03B5\",\n  zeta: \"\\u03B6\",\n  eta: \"\\u03B7\",\n  theta: \"\\u03B8\",\n  iota: \"\\u03B9\",\n  kappa: \"\\u03BA\",\n  lambda: \"\\u03BB\",\n  mu: \"\\u03BC\",\n  nu: \"\\u03BD\",\n  xi: \"\\u03BE\",\n  omicron: \"\\u03BF\",\n  pi: \"\\u03C0\",\n  rho: \"\\u03C1\",\n  sigmaf: \"\\u03C2\",\n  sigma: \"\\u03C3\",\n  tau: \"\\u03C4\",\n  upsilon: \"\\u03C5\",\n  phi: \"\\u03C6\",\n  chi: \"\\u03C7\",\n  psi: \"\\u03C8\",\n  omega: \"\\u03C9\",\n  thetasym: \"\\u03D1\",\n  upsih: \"\\u03D2\",\n  piv: \"\\u03D6\",\n  ensp: \"\\u2002\",\n  emsp: \"\\u2003\",\n  thinsp: \"\\u2009\",\n  zwnj: \"\\u200C\",\n  zwj: \"\\u200D\",\n  lrm: \"\\u200E\",\n  rlm: \"\\u200F\",\n  ndash: \"\\u2013\",\n  mdash: \"\\u2014\",\n  lsquo: \"\\u2018\",\n  rsquo: \"\\u2019\",\n  sbquo: \"\\u201A\",\n  ldquo: \"\\u201C\",\n  rdquo: \"\\u201D\",\n  bdquo: \"\\u201E\",\n  dagger: \"\\u2020\",\n  Dagger: \"\\u2021\",\n  bull: \"\\u2022\",\n  hellip: \"\\u2026\",\n  permil: \"\\u2030\",\n  prime: \"\\u2032\",\n  Prime: \"\\u2033\",\n  lsaquo: \"\\u2039\",\n  rsaquo: \"\\u203A\",\n  oline: \"\\u203E\",\n  frasl: \"\\u2044\",\n  euro: \"\\u20AC\",\n  image: \"\\u2111\",\n  weierp: \"\\u2118\",\n  real: \"\\u211C\",\n  trade: \"\\u2122\",\n  alefsym: \"\\u2135\",\n  larr: \"\\u2190\",\n  uarr: \"\\u2191\",\n  rarr: \"\\u2192\",\n  darr: \"\\u2193\",\n  harr: \"\\u2194\",\n  crarr: \"\\u21B5\",\n  lArr: \"\\u21D0\",\n  uArr: \"\\u21D1\",\n  rArr: \"\\u21D2\",\n  dArr: \"\\u21D3\",\n  hArr: \"\\u21D4\",\n  forall: \"\\u2200\",\n  part: \"\\u2202\",\n  exist: \"\\u2203\",\n  empty: \"\\u2205\",\n  nabla: \"\\u2207\",\n  isin: \"\\u2208\",\n  notin: \"\\u2209\",\n  ni: \"\\u220B\",\n  prod: \"\\u220F\",\n  sum: \"\\u2211\",\n  minus: \"\\u2212\",\n  lowast: \"\\u2217\",\n  radic: \"\\u221A\",\n  prop: \"\\u221D\",\n  infin: \"\\u221E\",\n  ang: \"\\u2220\",\n  and: \"\\u2227\",\n  or: \"\\u2228\",\n  cap: \"\\u2229\",\n  cup: \"\\u222A\",\n  int: \"\\u222B\",\n  there4: \"\\u2234\",\n  sim: \"\\u223C\",\n  cong: \"\\u2245\",\n  asymp: \"\\u2248\",\n  ne: \"\\u2260\",\n  equiv: \"\\u2261\",\n  le: \"\\u2264\",\n  ge: \"\\u2265\",\n  sub: \"\\u2282\",\n  sup: \"\\u2283\",\n  nsub: \"\\u2284\",\n  sube: \"\\u2286\",\n  supe: \"\\u2287\",\n  oplus: \"\\u2295\",\n  otimes: \"\\u2297\",\n  perp: \"\\u22A5\",\n  sdot: \"\\u22C5\",\n  lceil: \"\\u2308\",\n  rceil: \"\\u2309\",\n  lfloor: \"\\u230A\",\n  rfloor: \"\\u230B\",\n  lang: \"\\u2329\",\n  rang: \"\\u232A\",\n  loz: \"\\u25CA\",\n  spades: \"\\u2660\",\n  clubs: \"\\u2663\",\n  hearts: \"\\u2665\",\n  diams: \"\\u2666\"\n};\nconst JsxErrors = ParseErrorEnum`jsx`({\n  AttributeIsEmpty: \"JSX attributes must only be assigned a non-empty expression.\",\n  MissingClosingTagElement: ({\n    openingTagName\n  }) => `Expected corresponding JSX closing tag for <${openingTagName}>.`,\n  MissingClosingTagFragment: \"Expected corresponding JSX closing tag for <>.\",\n  UnexpectedSequenceExpression: \"Sequence expressions cannot be directly nested inside JSX. Did you mean to wrap it in parentheses (...)?\",\n  UnexpectedToken: ({\n    unexpected,\n    HTMLEntity\n  }) => `Unexpected token \\`${unexpected}\\`. Did you mean \\`${HTMLEntity}\\` or \\`{'${unexpected}'}\\`?`,\n  UnsupportedJsxValue: \"JSX value should be either an expression or a quoted JSX text.\",\n  UnterminatedJsxContent: \"Unterminated JSX contents.\",\n  UnwrappedAdjacentJSXElements: \"Adjacent JSX elements must be wrapped in an enclosing tag. Did you want a JSX fragment <>...</>?\"\n});\nfunction isFragment(object) {\n  return object ? object.type === \"JSXOpeningFragment\" || object.type === \"JSXClosingFragment\" : false;\n}\nfunction getQualifiedJSXName(object) {\n  if (object.type === \"JSXIdentifier\") {\n    return object.name;\n  }\n  if (object.type === \"JSXNamespacedName\") {\n    return object.namespace.name + \":\" + object.name.name;\n  }\n  if (object.type === \"JSXMemberExpression\") {\n    return getQualifiedJSXName(object.object) + \".\" + getQualifiedJSXName(object.property);\n  }\n  throw new Error(\"Node had unexpected type: \" + object.type);\n}\nvar jsx = superClass => class JSXParserMixin extends superClass {\n  jsxReadToken() {\n    let out = \"\";\n    let chunkStart = this.state.pos;\n    for (;;) {\n      if (this.state.pos >= this.length) {\n        throw this.raise(JsxErrors.UnterminatedJsxContent, {\n          at: this.state.startLoc\n        });\n      }\n      const ch = this.input.charCodeAt(this.state.pos);\n      switch (ch) {\n        case 60:\n        case 123:\n          if (this.state.pos === this.state.start) {\n            if (ch === 60 && this.state.canStartJSXElement) {\n              ++this.state.pos;\n              this.finishToken(140);\n            } else {\n              super.getTokenFromCode(ch);\n            }\n            return;\n          }\n          out += this.input.slice(chunkStart, this.state.pos);\n          this.finishToken(139, out);\n          return;\n        case 38:\n          out += this.input.slice(chunkStart, this.state.pos);\n          out += this.jsxReadEntity();\n          chunkStart = this.state.pos;\n          break;\n        case 62:\n        case 125:\n        default:\n          if (isNewLine(ch)) {\n            out += this.input.slice(chunkStart, this.state.pos);\n            out += this.jsxReadNewLine(true);\n            chunkStart = this.state.pos;\n          } else {\n            ++this.state.pos;\n          }\n      }\n    }\n  }\n  jsxReadNewLine(normalizeCRLF) {\n    const ch = this.input.charCodeAt(this.state.pos);\n    let out;\n    ++this.state.pos;\n    if (ch === 13 && this.input.charCodeAt(this.state.pos) === 10) {\n      ++this.state.pos;\n      out = normalizeCRLF ? \"\\n\" : \"\\r\\n\";\n    } else {\n      out = String.fromCharCode(ch);\n    }\n    ++this.state.curLine;\n    this.state.lineStart = this.state.pos;\n    return out;\n  }\n  jsxReadString(quote) {\n    let out = \"\";\n    let chunkStart = ++this.state.pos;\n    for (;;) {\n      if (this.state.pos >= this.length) {\n        throw this.raise(Errors.UnterminatedString, {\n          at: this.state.startLoc\n        });\n      }\n      const ch = this.input.charCodeAt(this.state.pos);\n      if (ch === quote) break;\n      if (ch === 38) {\n        out += this.input.slice(chunkStart, this.state.pos);\n        out += this.jsxReadEntity();\n        chunkStart = this.state.pos;\n      } else if (isNewLine(ch)) {\n        out += this.input.slice(chunkStart, this.state.pos);\n        out += this.jsxReadNewLine(false);\n        chunkStart = this.state.pos;\n      } else {\n        ++this.state.pos;\n      }\n    }\n    out += this.input.slice(chunkStart, this.state.pos++);\n    this.finishToken(131, out);\n  }\n  jsxReadEntity() {\n    const startPos = ++this.state.pos;\n    if (this.codePointAtPos(this.state.pos) === 35) {\n      ++this.state.pos;\n      let radix = 10;\n      if (this.codePointAtPos(this.state.pos) === 120) {\n        radix = 16;\n        ++this.state.pos;\n      }\n      const codePoint = this.readInt(radix, undefined, false, \"bail\");\n      if (codePoint !== null && this.codePointAtPos(this.state.pos) === 59) {\n        ++this.state.pos;\n        return String.fromCodePoint(codePoint);\n      }\n    } else {\n      let count = 0;\n      let semi = false;\n      while (count++ < 10 && this.state.pos < this.length && !(semi = this.codePointAtPos(this.state.pos) == 59)) {\n        ++this.state.pos;\n      }\n      if (semi) {\n        const desc = this.input.slice(startPos, this.state.pos);\n        const entity = entities[desc];\n        ++this.state.pos;\n        if (entity) {\n          return entity;\n        }\n      }\n    }\n    this.state.pos = startPos;\n    return \"&\";\n  }\n  jsxReadWord() {\n    let ch;\n    const start = this.state.pos;\n    do {\n      ch = this.input.charCodeAt(++this.state.pos);\n    } while (isIdentifierChar(ch) || ch === 45);\n    this.finishToken(138, this.input.slice(start, this.state.pos));\n  }\n  jsxParseIdentifier() {\n    const node = this.startNode();\n    if (this.match(138)) {\n      node.name = this.state.value;\n    } else if (tokenIsKeyword(this.state.type)) {\n      node.name = tokenLabelName(this.state.type);\n    } else {\n      this.unexpected();\n    }\n    this.next();\n    return this.finishNode(node, \"JSXIdentifier\");\n  }\n  jsxParseNamespacedName() {\n    const startLoc = this.state.startLoc;\n    const name = this.jsxParseIdentifier();\n    if (!this.eat(14)) return name;\n    const node = this.startNodeAt(startLoc);\n    node.namespace = name;\n    node.name = this.jsxParseIdentifier();\n    return this.finishNode(node, \"JSXNamespacedName\");\n  }\n  jsxParseElementName() {\n    const startLoc = this.state.startLoc;\n    let node = this.jsxParseNamespacedName();\n    if (node.type === \"JSXNamespacedName\") {\n      return node;\n    }\n    while (this.eat(16)) {\n      const newNode = this.startNodeAt(startLoc);\n      newNode.object = node;\n      newNode.property = this.jsxParseIdentifier();\n      node = this.finishNode(newNode, \"JSXMemberExpression\");\n    }\n    return node;\n  }\n  jsxParseAttributeValue() {\n    let node;\n    switch (this.state.type) {\n      case 5:\n        node = this.startNode();\n        this.setContext(types.brace);\n        this.next();\n        node = this.jsxParseExpressionContainer(node, types.j_oTag);\n        if (node.expression.type === \"JSXEmptyExpression\") {\n          this.raise(JsxErrors.AttributeIsEmpty, {\n            at: node\n          });\n        }\n        return node;\n      case 140:\n      case 131:\n        return this.parseExprAtom();\n      default:\n        throw this.raise(JsxErrors.UnsupportedJsxValue, {\n          at: this.state.startLoc\n        });\n    }\n  }\n  jsxParseEmptyExpression() {\n    const node = this.startNodeAt(this.state.lastTokEndLoc);\n    return this.finishNodeAt(node, \"JSXEmptyExpression\", this.state.startLoc);\n  }\n  jsxParseSpreadChild(node) {\n    this.next();\n    node.expression = this.parseExpression();\n    this.setContext(types.j_expr);\n    this.state.canStartJSXElement = true;\n    this.expect(8);\n    return this.finishNode(node, \"JSXSpreadChild\");\n  }\n  jsxParseExpressionContainer(node, previousContext) {\n    if (this.match(8)) {\n      node.expression = this.jsxParseEmptyExpression();\n    } else {\n      const expression = this.parseExpression();\n      node.expression = expression;\n    }\n    this.setContext(previousContext);\n    this.state.canStartJSXElement = true;\n    this.expect(8);\n    return this.finishNode(node, \"JSXExpressionContainer\");\n  }\n  jsxParseAttribute() {\n    const node = this.startNode();\n    if (this.match(5)) {\n      this.setContext(types.brace);\n      this.next();\n      this.expect(21);\n      node.argument = this.parseMaybeAssignAllowIn();\n      this.setContext(types.j_oTag);\n      this.state.canStartJSXElement = true;\n      this.expect(8);\n      return this.finishNode(node, \"JSXSpreadAttribute\");\n    }\n    node.name = this.jsxParseNamespacedName();\n    node.value = this.eat(29) ? this.jsxParseAttributeValue() : null;\n    return this.finishNode(node, \"JSXAttribute\");\n  }\n  jsxParseOpeningElementAt(startLoc) {\n    const node = this.startNodeAt(startLoc);\n    if (this.eat(141)) {\n      return this.finishNode(node, \"JSXOpeningFragment\");\n    }\n    node.name = this.jsxParseElementName();\n    return this.jsxParseOpeningElementAfterName(node);\n  }\n  jsxParseOpeningElementAfterName(node) {\n    const attributes = [];\n    while (!this.match(56) && !this.match(141)) {\n      attributes.push(this.jsxParseAttribute());\n    }\n    node.attributes = attributes;\n    node.selfClosing = this.eat(56);\n    this.expect(141);\n    return this.finishNode(node, \"JSXOpeningElement\");\n  }\n  jsxParseClosingElementAt(startLoc) {\n    const node = this.startNodeAt(startLoc);\n    if (this.eat(141)) {\n      return this.finishNode(node, \"JSXClosingFragment\");\n    }\n    node.name = this.jsxParseElementName();\n    this.expect(141);\n    return this.finishNode(node, \"JSXClosingElement\");\n  }\n  jsxParseElementAt(startLoc) {\n    const node = this.startNodeAt(startLoc);\n    const children = [];\n    const openingElement = this.jsxParseOpeningElementAt(startLoc);\n    let closingElement = null;\n    if (!openingElement.selfClosing) {\n      contents: for (;;) {\n        switch (this.state.type) {\n          case 140:\n            startLoc = this.state.startLoc;\n            this.next();\n            if (this.eat(56)) {\n              closingElement = this.jsxParseClosingElementAt(startLoc);\n              break contents;\n            }\n            children.push(this.jsxParseElementAt(startLoc));\n            break;\n          case 139:\n            children.push(this.parseExprAtom());\n            break;\n          case 5:\n            {\n              const node = this.startNode();\n              this.setContext(types.brace);\n              this.next();\n              if (this.match(21)) {\n                children.push(this.jsxParseSpreadChild(node));\n              } else {\n                children.push(this.jsxParseExpressionContainer(node, types.j_expr));\n              }\n              break;\n            }\n          default:\n            this.unexpected();\n        }\n      }\n      if (isFragment(openingElement) && !isFragment(closingElement) && closingElement !== null) {\n        this.raise(JsxErrors.MissingClosingTagFragment, {\n          at: closingElement\n        });\n      } else if (!isFragment(openingElement) && isFragment(closingElement)) {\n        this.raise(JsxErrors.MissingClosingTagElement, {\n          at: closingElement,\n          openingTagName: getQualifiedJSXName(openingElement.name)\n        });\n      } else if (!isFragment(openingElement) && !isFragment(closingElement)) {\n        if (getQualifiedJSXName(closingElement.name) !== getQualifiedJSXName(openingElement.name)) {\n          this.raise(JsxErrors.MissingClosingTagElement, {\n            at: closingElement,\n            openingTagName: getQualifiedJSXName(openingElement.name)\n          });\n        }\n      }\n    }\n    if (isFragment(openingElement)) {\n      node.openingFragment = openingElement;\n      node.closingFragment = closingElement;\n    } else {\n      node.openingElement = openingElement;\n      node.closingElement = closingElement;\n    }\n    node.children = children;\n    if (this.match(47)) {\n      throw this.raise(JsxErrors.UnwrappedAdjacentJSXElements, {\n        at: this.state.startLoc\n      });\n    }\n    return isFragment(openingElement) ? this.finishNode(node, \"JSXFragment\") : this.finishNode(node, \"JSXElement\");\n  }\n  jsxParseElement() {\n    const startLoc = this.state.startLoc;\n    this.next();\n    return this.jsxParseElementAt(startLoc);\n  }\n  setContext(newContext) {\n    const {\n      context\n    } = this.state;\n    context[context.length - 1] = newContext;\n  }\n  parseExprAtom(refExpressionErrors) {\n    if (this.match(139)) {\n      return this.parseLiteral(this.state.value, \"JSXText\");\n    } else if (this.match(140)) {\n      return this.jsxParseElement();\n    } else if (this.match(47) && this.input.charCodeAt(this.state.pos) !== 33) {\n      this.replaceToken(140);\n      return this.jsxParseElement();\n    } else {\n      return super.parseExprAtom(refExpressionErrors);\n    }\n  }\n  skipSpace() {\n    const curContext = this.curContext();\n    if (!curContext.preserveSpace) super.skipSpace();\n  }\n  getTokenFromCode(code) {\n    const context = this.curContext();\n    if (context === types.j_expr) {\n      this.jsxReadToken();\n      return;\n    }\n    if (context === types.j_oTag || context === types.j_cTag) {\n      if (isIdentifierStart(code)) {\n        this.jsxReadWord();\n        return;\n      }\n      if (code === 62) {\n        ++this.state.pos;\n        this.finishToken(141);\n        return;\n      }\n      if ((code === 34 || code === 39) && context === types.j_oTag) {\n        this.jsxReadString(code);\n        return;\n      }\n    }\n    if (code === 60 && this.state.canStartJSXElement && this.input.charCodeAt(this.state.pos + 1) !== 33) {\n      ++this.state.pos;\n      this.finishToken(140);\n      return;\n    }\n    super.getTokenFromCode(code);\n  }\n  updateContext(prevType) {\n    const {\n      context,\n      type\n    } = this.state;\n    if (type === 56 && prevType === 140) {\n      context.splice(-2, 2, types.j_cTag);\n      this.state.canStartJSXElement = false;\n    } else if (type === 140) {\n      context.push(types.j_oTag);\n    } else if (type === 141) {\n      const out = context[context.length - 1];\n      if (out === types.j_oTag && prevType === 56 || out === types.j_cTag) {\n        context.pop();\n        this.state.canStartJSXElement = context[context.length - 1] === types.j_expr;\n      } else {\n        this.setContext(types.j_expr);\n        this.state.canStartJSXElement = true;\n      }\n    } else {\n      this.state.canStartJSXElement = tokenComesBeforeExpression(type);\n    }\n  }\n};\nclass TypeScriptScope extends Scope {\n  constructor(...args) {\n    super(...args);\n    this.types = new Set();\n    this.enums = new Set();\n    this.constEnums = new Set();\n    this.classes = new Set();\n    this.exportOnlyBindings = new Set();\n  }\n}\nclass TypeScriptScopeHandler extends ScopeHandler {\n  constructor(...args) {\n    super(...args);\n    this.importsStack = [];\n  }\n  createScope(flags) {\n    this.importsStack.push(new Set());\n    return new TypeScriptScope(flags);\n  }\n  enter(flags) {\n    if (flags == SCOPE_TS_MODULE) {\n      this.importsStack.push(new Set());\n    }\n    super.enter(flags);\n  }\n  exit() {\n    const flags = super.exit();\n    if (flags == SCOPE_TS_MODULE) {\n      this.importsStack.pop();\n    }\n    return flags;\n  }\n  hasImport(name, allowShadow) {\n    const len = this.importsStack.length;\n    if (this.importsStack[len - 1].has(name)) {\n      return true;\n    }\n    if (!allowShadow && len > 1) {\n      for (let i = 0; i < len - 1; i++) {\n        if (this.importsStack[i].has(name)) return true;\n      }\n    }\n    return false;\n  }\n  declareName(name, bindingType, loc) {\n    if (bindingType & BIND_FLAGS_TS_IMPORT) {\n      if (this.hasImport(name, true)) {\n        this.parser.raise(Errors.VarRedeclaration, {\n          at: loc,\n          identifierName: name\n        });\n      }\n      this.importsStack[this.importsStack.length - 1].add(name);\n      return;\n    }\n    const scope = this.currentScope();\n    if (bindingType & BIND_FLAGS_TS_EXPORT_ONLY) {\n      this.maybeExportDefined(scope, name);\n      scope.exportOnlyBindings.add(name);\n      return;\n    }\n    super.declareName(name, bindingType, loc);\n    if (bindingType & BIND_KIND_TYPE) {\n      if (!(bindingType & BIND_KIND_VALUE)) {\n        this.checkRedeclarationInScope(scope, name, bindingType, loc);\n        this.maybeExportDefined(scope, name);\n      }\n      scope.types.add(name);\n    }\n    if (bindingType & BIND_FLAGS_TS_ENUM) scope.enums.add(name);\n    if (bindingType & BIND_FLAGS_TS_CONST_ENUM) scope.constEnums.add(name);\n    if (bindingType & BIND_FLAGS_CLASS) scope.classes.add(name);\n  }\n  isRedeclaredInScope(scope, name, bindingType) {\n    if (scope.enums.has(name)) {\n      if (bindingType & BIND_FLAGS_TS_ENUM) {\n        const isConst = !!(bindingType & BIND_FLAGS_TS_CONST_ENUM);\n        const wasConst = scope.constEnums.has(name);\n        return isConst !== wasConst;\n      }\n      return true;\n    }\n    if (bindingType & BIND_FLAGS_CLASS && scope.classes.has(name)) {\n      if (scope.lexical.has(name)) {\n        return !!(bindingType & BIND_KIND_VALUE);\n      } else {\n        return false;\n      }\n    }\n    if (bindingType & BIND_KIND_TYPE && scope.types.has(name)) {\n      return true;\n    }\n    return super.isRedeclaredInScope(scope, name, bindingType);\n  }\n  checkLocalExport(id) {\n    const {\n      name\n    } = id;\n    if (this.hasImport(name)) return;\n    const len = this.scopeStack.length;\n    for (let i = len - 1; i >= 0; i--) {\n      const scope = this.scopeStack[i];\n      if (scope.types.has(name) || scope.exportOnlyBindings.has(name)) return;\n    }\n    super.checkLocalExport(id);\n  }\n}\nconst getOwn$1 = (object, key) => Object.hasOwnProperty.call(object, key) && object[key];\nconst unwrapParenthesizedExpression = node => {\n  return node.type === \"ParenthesizedExpression\" ? unwrapParenthesizedExpression(node.expression) : node;\n};\nclass LValParser extends NodeUtils {\n  toAssignable(node, isLHS = false) {\n    var _node$extra, _node$extra3;\n    let parenthesized = undefined;\n    if (node.type === \"ParenthesizedExpression\" || (_node$extra = node.extra) != null && _node$extra.parenthesized) {\n      parenthesized = unwrapParenthesizedExpression(node);\n      if (isLHS) {\n        if (parenthesized.type === \"Identifier\") {\n          this.expressionScope.recordArrowParameterBindingError(Errors.InvalidParenthesizedAssignment, {\n            at: node\n          });\n        } else if (parenthesized.type !== \"MemberExpression\") {\n          this.raise(Errors.InvalidParenthesizedAssignment, {\n            at: node\n          });\n        }\n      } else {\n        this.raise(Errors.InvalidParenthesizedAssignment, {\n          at: node\n        });\n      }\n    }\n    switch (node.type) {\n      case \"Identifier\":\n      case \"ObjectPattern\":\n      case \"ArrayPattern\":\n      case \"AssignmentPattern\":\n      case \"RestElement\":\n        break;\n      case \"ObjectExpression\":\n        node.type = \"ObjectPattern\";\n        for (let i = 0, length = node.properties.length, last = length - 1; i < length; i++) {\n          var _node$extra2;\n          const prop = node.properties[i];\n          const isLast = i === last;\n          this.toAssignableObjectExpressionProp(prop, isLast, isLHS);\n          if (isLast && prop.type === \"RestElement\" && (_node$extra2 = node.extra) != null && _node$extra2.trailingCommaLoc) {\n            this.raise(Errors.RestTrailingComma, {\n              at: node.extra.trailingCommaLoc\n            });\n          }\n        }\n        break;\n      case \"ObjectProperty\":\n        {\n          const {\n            key,\n            value\n          } = node;\n          if (this.isPrivateName(key)) {\n            this.classScope.usePrivateName(this.getPrivateNameSV(key), key.loc.start);\n          }\n          this.toAssignable(value, isLHS);\n          break;\n        }\n      case \"SpreadElement\":\n        {\n          throw new Error(\"Internal @babel/parser error (this is a bug, please report it).\" + \" SpreadElement should be converted by .toAssignable's caller.\");\n        }\n      case \"ArrayExpression\":\n        node.type = \"ArrayPattern\";\n        this.toAssignableList(node.elements, (_node$extra3 = node.extra) == null ? void 0 : _node$extra3.trailingCommaLoc, isLHS);\n        break;\n      case \"AssignmentExpression\":\n        if (node.operator !== \"=\") {\n          this.raise(Errors.MissingEqInAssignment, {\n            at: node.left.loc.end\n          });\n        }\n        node.type = \"AssignmentPattern\";\n        delete node.operator;\n        this.toAssignable(node.left, isLHS);\n        break;\n      case \"ParenthesizedExpression\":\n        this.toAssignable(parenthesized, isLHS);\n        break;\n    }\n  }\n  toAssignableObjectExpressionProp(prop, isLast, isLHS) {\n    if (prop.type === \"ObjectMethod\") {\n      this.raise(prop.kind === \"get\" || prop.kind === \"set\" ? Errors.PatternHasAccessor : Errors.PatternHasMethod, {\n        at: prop.key\n      });\n    } else if (prop.type === \"SpreadElement\") {\n      prop.type = \"RestElement\";\n      const arg = prop.argument;\n      this.checkToRestConversion(arg, false);\n      this.toAssignable(arg, isLHS);\n      if (!isLast) {\n        this.raise(Errors.RestTrailingComma, {\n          at: prop\n        });\n      }\n    } else {\n      this.toAssignable(prop, isLHS);\n    }\n  }\n  toAssignableList(exprList, trailingCommaLoc, isLHS) {\n    const end = exprList.length - 1;\n    for (let i = 0; i <= end; i++) {\n      const elt = exprList[i];\n      if (!elt) continue;\n      if (elt.type === \"SpreadElement\") {\n        elt.type = \"RestElement\";\n        const arg = elt.argument;\n        this.checkToRestConversion(arg, true);\n        this.toAssignable(arg, isLHS);\n      } else {\n        this.toAssignable(elt, isLHS);\n      }\n      if (elt.type === \"RestElement\") {\n        if (i < end) {\n          this.raise(Errors.RestTrailingComma, {\n            at: elt\n          });\n        } else if (trailingCommaLoc) {\n          this.raise(Errors.RestTrailingComma, {\n            at: trailingCommaLoc\n          });\n        }\n      }\n    }\n  }\n  isAssignable(node, isBinding) {\n    switch (node.type) {\n      case \"Identifier\":\n      case \"ObjectPattern\":\n      case \"ArrayPattern\":\n      case \"AssignmentPattern\":\n      case \"RestElement\":\n        return true;\n      case \"ObjectExpression\":\n        {\n          const last = node.properties.length - 1;\n          return node.properties.every((prop, i) => {\n            return prop.type !== \"ObjectMethod\" && (i === last || prop.type !== \"SpreadElement\") && this.isAssignable(prop);\n          });\n        }\n      case \"ObjectProperty\":\n        return this.isAssignable(node.value);\n      case \"SpreadElement\":\n        return this.isAssignable(node.argument);\n      case \"ArrayExpression\":\n        return node.elements.every(element => element === null || this.isAssignable(element));\n      case \"AssignmentExpression\":\n        return node.operator === \"=\";\n      case \"ParenthesizedExpression\":\n        return this.isAssignable(node.expression);\n      case \"MemberExpression\":\n      case \"OptionalMemberExpression\":\n        return !isBinding;\n      default:\n        return false;\n    }\n  }\n  toReferencedList(exprList, isParenthesizedExpr) {\n    return exprList;\n  }\n  toReferencedListDeep(exprList, isParenthesizedExpr) {\n    this.toReferencedList(exprList, isParenthesizedExpr);\n    for (const expr of exprList) {\n      if ((expr == null ? void 0 : expr.type) === \"ArrayExpression\") {\n        this.toReferencedListDeep(expr.elements);\n      }\n    }\n  }\n  parseSpread(refExpressionErrors) {\n    const node = this.startNode();\n    this.next();\n    node.argument = this.parseMaybeAssignAllowIn(refExpressionErrors, undefined);\n    return this.finishNode(node, \"SpreadElement\");\n  }\n  parseRestBinding() {\n    const node = this.startNode();\n    this.next();\n    node.argument = this.parseBindingAtom();\n    return this.finishNode(node, \"RestElement\");\n  }\n  parseBindingAtom() {\n    switch (this.state.type) {\n      case 0:\n        {\n          const node = this.startNode();\n          this.next();\n          node.elements = this.parseBindingList(3, 93, 1);\n          return this.finishNode(node, \"ArrayPattern\");\n        }\n      case 5:\n        return this.parseObjectLike(8, true);\n    }\n    return this.parseIdentifier();\n  }\n  parseBindingList(close, closeCharCode, flags) {\n    const allowEmpty = flags & 1;\n    const elts = [];\n    let first = true;\n    while (!this.eat(close)) {\n      if (first) {\n        first = false;\n      } else {\n        this.expect(12);\n      }\n      if (allowEmpty && this.match(12)) {\n        elts.push(null);\n      } else if (this.eat(close)) {\n        break;\n      } else if (this.match(21)) {\n        elts.push(this.parseAssignableListItemTypes(this.parseRestBinding(), flags));\n        if (!this.checkCommaAfterRest(closeCharCode)) {\n          this.expect(close);\n          break;\n        }\n      } else {\n        const decorators = [];\n        if (this.match(26) && this.hasPlugin(\"decorators\")) {\n          this.raise(Errors.UnsupportedParameterDecorator, {\n            at: this.state.startLoc\n          });\n        }\n        while (this.match(26)) {\n          decorators.push(this.parseDecorator());\n        }\n        elts.push(this.parseAssignableListItem(flags, decorators));\n      }\n    }\n    return elts;\n  }\n  parseBindingRestProperty(prop) {\n    this.next();\n    prop.argument = this.parseIdentifier();\n    this.checkCommaAfterRest(125);\n    return this.finishNode(prop, \"RestElement\");\n  }\n  parseBindingProperty() {\n    const prop = this.startNode();\n    const {\n      type,\n      startLoc\n    } = this.state;\n    if (type === 21) {\n      return this.parseBindingRestProperty(prop);\n    } else if (type === 136) {\n      this.expectPlugin(\"destructuringPrivate\", startLoc);\n      this.classScope.usePrivateName(this.state.value, startLoc);\n      prop.key = this.parsePrivateName();\n    } else {\n      this.parsePropertyName(prop);\n    }\n    prop.method = false;\n    return this.parseObjPropValue(prop, startLoc, false, false, true, false);\n  }\n  parseAssignableListItem(flags, decorators) {\n    const left = this.parseMaybeDefault();\n    this.parseAssignableListItemTypes(left, flags);\n    const elt = this.parseMaybeDefault(left.loc.start, left);\n    if (decorators.length) {\n      left.decorators = decorators;\n    }\n    return elt;\n  }\n  parseAssignableListItemTypes(param, flags) {\n    return param;\n  }\n  parseMaybeDefault(startLoc, left) {\n    var _startLoc, _left;\n    (_startLoc = startLoc) != null ? _startLoc : startLoc = this.state.startLoc;\n    left = (_left = left) != null ? _left : this.parseBindingAtom();\n    if (!this.eat(29)) return left;\n    const node = this.startNodeAt(startLoc);\n    node.left = left;\n    node.right = this.parseMaybeAssignAllowIn();\n    return this.finishNode(node, \"AssignmentPattern\");\n  }\n  isValidLVal(type, isUnparenthesizedInAssign, binding) {\n    return getOwn$1({\n      AssignmentPattern: \"left\",\n      RestElement: \"argument\",\n      ObjectProperty: \"value\",\n      ParenthesizedExpression: \"expression\",\n      ArrayPattern: \"elements\",\n      ObjectPattern: \"properties\"\n    }, type);\n  }\n  checkLVal(expression, {\n    in: ancestor,\n    binding = BIND_NONE,\n    checkClashes = false,\n    strictModeChanged = false,\n    hasParenthesizedAncestor = false\n  }) {\n    var _expression$extra;\n    const type = expression.type;\n    if (this.isObjectMethod(expression)) return;\n    if (type === \"MemberExpression\") {\n      if (binding !== BIND_NONE) {\n        this.raise(Errors.InvalidPropertyBindingPattern, {\n          at: expression\n        });\n      }\n      return;\n    }\n    if (type === \"Identifier\") {\n      this.checkIdentifier(expression, binding, strictModeChanged);\n      const {\n        name\n      } = expression;\n      if (checkClashes) {\n        if (checkClashes.has(name)) {\n          this.raise(Errors.ParamDupe, {\n            at: expression\n          });\n        } else {\n          checkClashes.add(name);\n        }\n      }\n      return;\n    }\n    const validity = this.isValidLVal(type, !(hasParenthesizedAncestor || (_expression$extra = expression.extra) != null && _expression$extra.parenthesized) && ancestor.type === \"AssignmentExpression\", binding);\n    if (validity === true) return;\n    if (validity === false) {\n      const ParseErrorClass = binding === BIND_NONE ? Errors.InvalidLhs : Errors.InvalidLhsBinding;\n      this.raise(ParseErrorClass, {\n        at: expression,\n        ancestor\n      });\n      return;\n    }\n    const [key, isParenthesizedExpression] = Array.isArray(validity) ? validity : [validity, type === \"ParenthesizedExpression\"];\n    const nextAncestor = type === \"ArrayPattern\" || type === \"ObjectPattern\" || type === \"ParenthesizedExpression\" ? {\n      type\n    } : ancestor;\n    for (const child of [].concat(expression[key])) {\n      if (child) {\n        this.checkLVal(child, {\n          in: nextAncestor,\n          binding,\n          checkClashes,\n          strictModeChanged,\n          hasParenthesizedAncestor: isParenthesizedExpression\n        });\n      }\n    }\n  }\n  checkIdentifier(at, bindingType, strictModeChanged = false) {\n    if (this.state.strict && (strictModeChanged ? isStrictBindReservedWord(at.name, this.inModule) : isStrictBindOnlyReservedWord(at.name))) {\n      if (bindingType === BIND_NONE) {\n        this.raise(Errors.StrictEvalArguments, {\n          at,\n          referenceName: at.name\n        });\n      } else {\n        this.raise(Errors.StrictEvalArgumentsBinding, {\n          at,\n          bindingName: at.name\n        });\n      }\n    }\n    if (bindingType & BIND_FLAGS_NO_LET_IN_LEXICAL && at.name === \"let\") {\n      this.raise(Errors.LetInLexicalBinding, {\n        at\n      });\n    }\n    if (!(bindingType & BIND_NONE)) {\n      this.declareNameFromIdentifier(at, bindingType);\n    }\n  }\n  declareNameFromIdentifier(identifier, binding) {\n    this.scope.declareName(identifier.name, binding, identifier.loc.start);\n  }\n  checkToRestConversion(node, allowPattern) {\n    switch (node.type) {\n      case \"ParenthesizedExpression\":\n        this.checkToRestConversion(node.expression, allowPattern);\n        break;\n      case \"Identifier\":\n      case \"MemberExpression\":\n        break;\n      case \"ArrayExpression\":\n      case \"ObjectExpression\":\n        if (allowPattern) break;\n      default:\n        this.raise(Errors.InvalidRestAssignmentPattern, {\n          at: node\n        });\n    }\n  }\n  checkCommaAfterRest(close) {\n    if (!this.match(12)) {\n      return false;\n    }\n    this.raise(this.lookaheadCharCode() === close ? Errors.RestTrailingComma : Errors.ElementAfterRest, {\n      at: this.state.startLoc\n    });\n    return true;\n  }\n}\nconst getOwn = (object, key) => Object.hasOwnProperty.call(object, key) && object[key];\nfunction nonNull(x) {\n  if (x == null) {\n    throw new Error(`Unexpected ${x} value.`);\n  }\n  return x;\n}\nfunction assert(x) {\n  if (!x) {\n    throw new Error(\"Assert fail\");\n  }\n}\nconst TSErrors = ParseErrorEnum`typescript`({\n  AbstractMethodHasImplementation: ({\n    methodName\n  }) => `Method '${methodName}' cannot have an implementation because it is marked abstract.`,\n  AbstractPropertyHasInitializer: ({\n    propertyName\n  }) => `Property '${propertyName}' cannot have an initializer because it is marked abstract.`,\n  AccesorCannotDeclareThisParameter: \"'get' and 'set' accessors cannot declare 'this' parameters.\",\n  AccesorCannotHaveTypeParameters: \"An accessor cannot have type parameters.\",\n  AccessorCannotBeOptional: \"An 'accessor' property cannot be declared optional.\",\n  ClassMethodHasDeclare: \"Class methods cannot have the 'declare' modifier.\",\n  ClassMethodHasReadonly: \"Class methods cannot have the 'readonly' modifier.\",\n  ConstInitiailizerMustBeStringOrNumericLiteralOrLiteralEnumReference: \"A 'const' initializer in an ambient context must be a string or numeric literal or literal enum reference.\",\n  ConstructorHasTypeParameters: \"Type parameters cannot appear on a constructor declaration.\",\n  DeclareAccessor: ({\n    kind\n  }) => `'declare' is not allowed in ${kind}ters.`,\n  DeclareClassFieldHasInitializer: \"Initializers are not allowed in ambient contexts.\",\n  DeclareFunctionHasImplementation: \"An implementation cannot be declared in ambient contexts.\",\n  DuplicateAccessibilityModifier: ({\n    modifier\n  }) => `Accessibility modifier already seen.`,\n  DuplicateModifier: ({\n    modifier\n  }) => `Duplicate modifier: '${modifier}'.`,\n  EmptyHeritageClauseType: ({\n    token\n  }) => `'${token}' list cannot be empty.`,\n  EmptyTypeArguments: \"Type argument list cannot be empty.\",\n  EmptyTypeParameters: \"Type parameter list cannot be empty.\",\n  ExpectedAmbientAfterExportDeclare: \"'export declare' must be followed by an ambient declaration.\",\n  ImportAliasHasImportType: \"An import alias can not use 'import type'.\",\n  ImportReflectionHasImportType: \"An `import module` declaration can not use `type` modifier\",\n  IncompatibleModifiers: ({\n    modifiers\n  }) => `'${modifiers[0]}' modifier cannot be used with '${modifiers[1]}' modifier.`,\n  IndexSignatureHasAbstract: \"Index signatures cannot have the 'abstract' modifier.\",\n  IndexSignatureHasAccessibility: ({\n    modifier\n  }) => `Index signatures cannot have an accessibility modifier ('${modifier}').`,\n  IndexSignatureHasDeclare: \"Index signatures cannot have the 'declare' modifier.\",\n  IndexSignatureHasOverride: \"'override' modifier cannot appear on an index signature.\",\n  IndexSignatureHasStatic: \"Index signatures cannot have the 'static' modifier.\",\n  InitializerNotAllowedInAmbientContext: \"Initializers are not allowed in ambient contexts.\",\n  InvalidModifierOnTypeMember: ({\n    modifier\n  }) => `'${modifier}' modifier cannot appear on a type member.`,\n  InvalidModifierOnTypeParameter: ({\n    modifier\n  }) => `'${modifier}' modifier cannot appear on a type parameter.`,\n  InvalidModifierOnTypeParameterPositions: ({\n    modifier\n  }) => `'${modifier}' modifier can only appear on a type parameter of a class, interface or type alias.`,\n  InvalidModifiersOrder: ({\n    orderedModifiers\n  }) => `'${orderedModifiers[0]}' modifier must precede '${orderedModifiers[1]}' modifier.`,\n  InvalidPropertyAccessAfterInstantiationExpression: \"Invalid property access after an instantiation expression. \" + \"You can either wrap the instantiation expression in parentheses, or delete the type arguments.\",\n  InvalidTupleMemberLabel: \"Tuple members must be labeled with a simple identifier.\",\n  MissingInterfaceName: \"'interface' declarations must be followed by an identifier.\",\n  MixedLabeledAndUnlabeledElements: \"Tuple members must all have names or all not have names.\",\n  NonAbstractClassHasAbstractMethod: \"Abstract methods can only appear within an abstract class.\",\n  NonClassMethodPropertyHasAbstractModifer: \"'abstract' modifier can only appear on a class, method, or property declaration.\",\n  OptionalTypeBeforeRequired: \"A required element cannot follow an optional element.\",\n  OverrideNotInSubClass: \"This member cannot have an 'override' modifier because its containing class does not extend another class.\",\n  PatternIsOptional: \"A binding pattern parameter cannot be optional in an implementation signature.\",\n  PrivateElementHasAbstract: \"Private elements cannot have the 'abstract' modifier.\",\n  PrivateElementHasAccessibility: ({\n    modifier\n  }) => `Private elements cannot have an accessibility modifier ('${modifier}').`,\n  ReadonlyForMethodSignature: \"'readonly' modifier can only appear on a property declaration or index signature.\",\n  ReservedArrowTypeParam: \"This syntax is reserved in files with the .mts or .cts extension. Add a trailing comma, as in `<T,>() => ...`.\",\n  ReservedTypeAssertion: \"This syntax is reserved in files with the .mts or .cts extension. Use an `as` expression instead.\",\n  SetAccesorCannotHaveOptionalParameter: \"A 'set' accessor cannot have an optional parameter.\",\n  SetAccesorCannotHaveRestParameter: \"A 'set' accessor cannot have rest parameter.\",\n  SetAccesorCannotHaveReturnType: \"A 'set' accessor cannot have a return type annotation.\",\n  SingleTypeParameterWithoutTrailingComma: ({\n    typeParameterName\n  }) => `Single type parameter ${typeParameterName} should have a trailing comma. Example usage: <${typeParameterName},>.`,\n  StaticBlockCannotHaveModifier: \"Static class blocks cannot have any modifier.\",\n  TupleOptionalAfterType: \"A labeled tuple optional element must be declared using a question mark after the name and before the colon (`name?: type`), rather than after the type (`name: type?`).\",\n  TypeAnnotationAfterAssign: \"Type annotations must come before default assignments, e.g. instead of `age = 25: number` use `age: number = 25`.\",\n  TypeImportCannotSpecifyDefaultAndNamed: \"A type-only import can specify a default import or named bindings, but not both.\",\n  TypeModifierIsUsedInTypeExports: \"The 'type' modifier cannot be used on a named export when 'export type' is used on its export statement.\",\n  TypeModifierIsUsedInTypeImports: \"The 'type' modifier cannot be used on a named import when 'import type' is used on its import statement.\",\n  UnexpectedParameterModifier: \"A parameter property is only allowed in a constructor implementation.\",\n  UnexpectedReadonly: \"'readonly' type modifier is only permitted on array and tuple literal types.\",\n  UnexpectedTypeAnnotation: \"Did not expect a type annotation here.\",\n  UnexpectedTypeCastInParameter: \"Unexpected type cast in parameter position.\",\n  UnsupportedImportTypeArgument: \"Argument in a type import must be a string literal.\",\n  UnsupportedParameterPropertyKind: \"A parameter property may not be declared using a binding pattern.\",\n  UnsupportedSignatureParameterKind: ({\n    type\n  }) => `Name in a signature must be an Identifier, ObjectPattern or ArrayPattern, instead got ${type}.`\n});\nfunction keywordTypeFromName(value) {\n  switch (value) {\n    case \"any\":\n      return \"TSAnyKeyword\";\n    case \"boolean\":\n      return \"TSBooleanKeyword\";\n    case \"bigint\":\n      return \"TSBigIntKeyword\";\n    case \"never\":\n      return \"TSNeverKeyword\";\n    case \"number\":\n      return \"TSNumberKeyword\";\n    case \"object\":\n      return \"TSObjectKeyword\";\n    case \"string\":\n      return \"TSStringKeyword\";\n    case \"symbol\":\n      return \"TSSymbolKeyword\";\n    case \"undefined\":\n      return \"TSUndefinedKeyword\";\n    case \"unknown\":\n      return \"TSUnknownKeyword\";\n    default:\n      return undefined;\n  }\n}\nfunction tsIsAccessModifier(modifier) {\n  return modifier === \"private\" || modifier === \"public\" || modifier === \"protected\";\n}\nfunction tsIsVarianceAnnotations(modifier) {\n  return modifier === \"in\" || modifier === \"out\";\n}\nvar typescript = superClass => class TypeScriptParserMixin extends superClass {\n  constructor(...args) {\n    super(...args);\n    this.tsParseInOutModifiers = this.tsParseModifiers.bind(this, {\n      allowedModifiers: [\"in\", \"out\"],\n      disallowedModifiers: [\"const\", \"public\", \"private\", \"protected\", \"readonly\", \"declare\", \"abstract\", \"override\"],\n      errorTemplate: TSErrors.InvalidModifierOnTypeParameter\n    });\n    this.tsParseConstModifier = this.tsParseModifiers.bind(this, {\n      allowedModifiers: [\"const\"],\n      disallowedModifiers: [\"in\", \"out\"],\n      errorTemplate: TSErrors.InvalidModifierOnTypeParameterPositions\n    });\n    this.tsParseInOutConstModifiers = this.tsParseModifiers.bind(this, {\n      allowedModifiers: [\"in\", \"out\", \"const\"],\n      disallowedModifiers: [\"public\", \"private\", \"protected\", \"readonly\", \"declare\", \"abstract\", \"override\"],\n      errorTemplate: TSErrors.InvalidModifierOnTypeParameter\n    });\n  }\n  getScopeHandler() {\n    return TypeScriptScopeHandler;\n  }\n  tsIsIdentifier() {\n    return tokenIsIdentifier(this.state.type);\n  }\n  tsTokenCanFollowModifier() {\n    return (this.match(0) || this.match(5) || this.match(55) || this.match(21) || this.match(136) || this.isLiteralPropertyName()) && !this.hasPrecedingLineBreak();\n  }\n  tsNextTokenCanFollowModifier() {\n    this.next();\n    return this.tsTokenCanFollowModifier();\n  }\n  tsParseModifier(allowedModifiers, stopOnStartOfClassStaticBlock) {\n    if (!tokenIsIdentifier(this.state.type) && this.state.type !== 58 && this.state.type !== 75) {\n      return undefined;\n    }\n    const modifier = this.state.value;\n    if (allowedModifiers.indexOf(modifier) !== -1) {\n      if (stopOnStartOfClassStaticBlock && this.tsIsStartOfStaticBlocks()) {\n        return undefined;\n      }\n      if (this.tsTryParse(this.tsNextTokenCanFollowModifier.bind(this))) {\n        return modifier;\n      }\n    }\n    return undefined;\n  }\n  tsParseModifiers({\n    allowedModifiers,\n    disallowedModifiers,\n    stopOnStartOfClassStaticBlock,\n    errorTemplate = TSErrors.InvalidModifierOnTypeMember\n  }, modified) {\n    const enforceOrder = (loc, modifier, before, after) => {\n      if (modifier === before && modified[after]) {\n        this.raise(TSErrors.InvalidModifiersOrder, {\n          at: loc,\n          orderedModifiers: [before, after]\n        });\n      }\n    };\n    const incompatible = (loc, modifier, mod1, mod2) => {\n      if (modified[mod1] && modifier === mod2 || modified[mod2] && modifier === mod1) {\n        this.raise(TSErrors.IncompatibleModifiers, {\n          at: loc,\n          modifiers: [mod1, mod2]\n        });\n      }\n    };\n    for (;;) {\n      const {\n        startLoc\n      } = this.state;\n      const modifier = this.tsParseModifier(allowedModifiers.concat(disallowedModifiers != null ? disallowedModifiers : []), stopOnStartOfClassStaticBlock);\n      if (!modifier) break;\n      if (tsIsAccessModifier(modifier)) {\n        if (modified.accessibility) {\n          this.raise(TSErrors.DuplicateAccessibilityModifier, {\n            at: startLoc,\n            modifier\n          });\n        } else {\n          enforceOrder(startLoc, modifier, modifier, \"override\");\n          enforceOrder(startLoc, modifier, modifier, \"static\");\n          enforceOrder(startLoc, modifier, modifier, \"readonly\");\n          modified.accessibility = modifier;\n        }\n      } else if (tsIsVarianceAnnotations(modifier)) {\n        if (modified[modifier]) {\n          this.raise(TSErrors.DuplicateModifier, {\n            at: startLoc,\n            modifier\n          });\n        }\n        modified[modifier] = true;\n        enforceOrder(startLoc, modifier, \"in\", \"out\");\n      } else {\n        if (Object.hasOwnProperty.call(modified, modifier)) {\n          this.raise(TSErrors.DuplicateModifier, {\n            at: startLoc,\n            modifier\n          });\n        } else {\n          enforceOrder(startLoc, modifier, \"static\", \"readonly\");\n          enforceOrder(startLoc, modifier, \"static\", \"override\");\n          enforceOrder(startLoc, modifier, \"override\", \"readonly\");\n          enforceOrder(startLoc, modifier, \"abstract\", \"override\");\n          incompatible(startLoc, modifier, \"declare\", \"override\");\n          incompatible(startLoc, modifier, \"static\", \"abstract\");\n        }\n        modified[modifier] = true;\n      }\n      if (disallowedModifiers != null && disallowedModifiers.includes(modifier)) {\n        this.raise(errorTemplate, {\n          at: startLoc,\n          modifier\n        });\n      }\n    }\n  }\n  tsIsListTerminator(kind) {\n    switch (kind) {\n      case \"EnumMembers\":\n      case \"TypeMembers\":\n        return this.match(8);\n      case \"HeritageClauseElement\":\n        return this.match(5);\n      case \"TupleElementTypes\":\n        return this.match(3);\n      case \"TypeParametersOrArguments\":\n        return this.match(48);\n    }\n  }\n  tsParseList(kind, parseElement) {\n    const result = [];\n    while (!this.tsIsListTerminator(kind)) {\n      result.push(parseElement());\n    }\n    return result;\n  }\n  tsParseDelimitedList(kind, parseElement, refTrailingCommaPos) {\n    return nonNull(this.tsParseDelimitedListWorker(kind, parseElement, true, refTrailingCommaPos));\n  }\n  tsParseDelimitedListWorker(kind, parseElement, expectSuccess, refTrailingCommaPos) {\n    const result = [];\n    let trailingCommaPos = -1;\n    for (;;) {\n      if (this.tsIsListTerminator(kind)) {\n        break;\n      }\n      trailingCommaPos = -1;\n      const element = parseElement();\n      if (element == null) {\n        return undefined;\n      }\n      result.push(element);\n      if (this.eat(12)) {\n        trailingCommaPos = this.state.lastTokStart;\n        continue;\n      }\n      if (this.tsIsListTerminator(kind)) {\n        break;\n      }\n      if (expectSuccess) {\n        this.expect(12);\n      }\n      return undefined;\n    }\n    if (refTrailingCommaPos) {\n      refTrailingCommaPos.value = trailingCommaPos;\n    }\n    return result;\n  }\n  tsParseBracketedList(kind, parseElement, bracket, skipFirstToken, refTrailingCommaPos) {\n    if (!skipFirstToken) {\n      if (bracket) {\n        this.expect(0);\n      } else {\n        this.expect(47);\n      }\n    }\n    const result = this.tsParseDelimitedList(kind, parseElement, refTrailingCommaPos);\n    if (bracket) {\n      this.expect(3);\n    } else {\n      this.expect(48);\n    }\n    return result;\n  }\n  tsParseImportType() {\n    const node = this.startNode();\n    this.expect(83);\n    this.expect(10);\n    if (!this.match(131)) {\n      this.raise(TSErrors.UnsupportedImportTypeArgument, {\n        at: this.state.startLoc\n      });\n    }\n    node.argument = super.parseExprAtom();\n    this.expect(11);\n    if (this.eat(16)) {\n      node.qualifier = this.tsParseEntityName();\n    }\n    if (this.match(47)) {\n      node.typeParameters = this.tsParseTypeArguments();\n    }\n    return this.finishNode(node, \"TSImportType\");\n  }\n  tsParseEntityName(allowReservedWords = true) {\n    let entity = this.parseIdentifier(allowReservedWords);\n    while (this.eat(16)) {\n      const node = this.startNodeAtNode(entity);\n      node.left = entity;\n      node.right = this.parseIdentifier(allowReservedWords);\n      entity = this.finishNode(node, \"TSQualifiedName\");\n    }\n    return entity;\n  }\n  tsParseTypeReference() {\n    const node = this.startNode();\n    node.typeName = this.tsParseEntityName();\n    if (!this.hasPrecedingLineBreak() && this.match(47)) {\n      node.typeParameters = this.tsParseTypeArguments();\n    }\n    return this.finishNode(node, \"TSTypeReference\");\n  }\n  tsParseThisTypePredicate(lhs) {\n    this.next();\n    const node = this.startNodeAtNode(lhs);\n    node.parameterName = lhs;\n    node.typeAnnotation = this.tsParseTypeAnnotation(false);\n    node.asserts = false;\n    return this.finishNode(node, \"TSTypePredicate\");\n  }\n  tsParseThisTypeNode() {\n    const node = this.startNode();\n    this.next();\n    return this.finishNode(node, \"TSThisType\");\n  }\n  tsParseTypeQuery() {\n    const node = this.startNode();\n    this.expect(87);\n    if (this.match(83)) {\n      node.exprName = this.tsParseImportType();\n    } else {\n      node.exprName = this.tsParseEntityName();\n    }\n    if (!this.hasPrecedingLineBreak() && this.match(47)) {\n      node.typeParameters = this.tsParseTypeArguments();\n    }\n    return this.finishNode(node, \"TSTypeQuery\");\n  }\n  tsParseTypeParameter(parseModifiers) {\n    const node = this.startNode();\n    parseModifiers(node);\n    node.name = this.tsParseTypeParameterName();\n    node.constraint = this.tsEatThenParseType(81);\n    node.default = this.tsEatThenParseType(29);\n    return this.finishNode(node, \"TSTypeParameter\");\n  }\n  tsTryParseTypeParameters(parseModifiers) {\n    if (this.match(47)) {\n      return this.tsParseTypeParameters(parseModifiers);\n    }\n  }\n  tsParseTypeParameters(parseModifiers) {\n    const node = this.startNode();\n    if (this.match(47) || this.match(140)) {\n      this.next();\n    } else {\n      this.unexpected();\n    }\n    const refTrailingCommaPos = {\n      value: -1\n    };\n    node.params = this.tsParseBracketedList(\"TypeParametersOrArguments\", this.tsParseTypeParameter.bind(this, parseModifiers), false, true, refTrailingCommaPos);\n    if (node.params.length === 0) {\n      this.raise(TSErrors.EmptyTypeParameters, {\n        at: node\n      });\n    }\n    if (refTrailingCommaPos.value !== -1) {\n      this.addExtra(node, \"trailingComma\", refTrailingCommaPos.value);\n    }\n    return this.finishNode(node, \"TSTypeParameterDeclaration\");\n  }\n  tsFillSignature(returnToken, signature) {\n    const returnTokenRequired = returnToken === 19;\n    const paramsKey = \"parameters\";\n    const returnTypeKey = \"typeAnnotation\";\n    signature.typeParameters = this.tsTryParseTypeParameters(this.tsParseConstModifier);\n    this.expect(10);\n    signature[paramsKey] = this.tsParseBindingListForSignature();\n    if (returnTokenRequired) {\n      signature[returnTypeKey] = this.tsParseTypeOrTypePredicateAnnotation(returnToken);\n    } else if (this.match(returnToken)) {\n      signature[returnTypeKey] = this.tsParseTypeOrTypePredicateAnnotation(returnToken);\n    }\n  }\n  tsParseBindingListForSignature() {\n    return super.parseBindingList(11, 41, 2).map(pattern => {\n      if (pattern.type !== \"Identifier\" && pattern.type !== \"RestElement\" && pattern.type !== \"ObjectPattern\" && pattern.type !== \"ArrayPattern\") {\n        this.raise(TSErrors.UnsupportedSignatureParameterKind, {\n          at: pattern,\n          type: pattern.type\n        });\n      }\n      return pattern;\n    });\n  }\n  tsParseTypeMemberSemicolon() {\n    if (!this.eat(12) && !this.isLineTerminator()) {\n      this.expect(13);\n    }\n  }\n  tsParseSignatureMember(kind, node) {\n    this.tsFillSignature(14, node);\n    this.tsParseTypeMemberSemicolon();\n    return this.finishNode(node, kind);\n  }\n  tsIsUnambiguouslyIndexSignature() {\n    this.next();\n    if (tokenIsIdentifier(this.state.type)) {\n      this.next();\n      return this.match(14);\n    }\n    return false;\n  }\n  tsTryParseIndexSignature(node) {\n    if (!(this.match(0) && this.tsLookAhead(this.tsIsUnambiguouslyIndexSignature.bind(this)))) {\n      return undefined;\n    }\n    this.expect(0);\n    const id = this.parseIdentifier();\n    id.typeAnnotation = this.tsParseTypeAnnotation();\n    this.resetEndLocation(id);\n    this.expect(3);\n    node.parameters = [id];\n    const type = this.tsTryParseTypeAnnotation();\n    if (type) node.typeAnnotation = type;\n    this.tsParseTypeMemberSemicolon();\n    return this.finishNode(node, \"TSIndexSignature\");\n  }\n  tsParsePropertyOrMethodSignature(node, readonly) {\n    if (this.eat(17)) node.optional = true;\n    const nodeAny = node;\n    if (this.match(10) || this.match(47)) {\n      if (readonly) {\n        this.raise(TSErrors.ReadonlyForMethodSignature, {\n          at: node\n        });\n      }\n      const method = nodeAny;\n      if (method.kind && this.match(47)) {\n        this.raise(TSErrors.AccesorCannotHaveTypeParameters, {\n          at: this.state.curPosition()\n        });\n      }\n      this.tsFillSignature(14, method);\n      this.tsParseTypeMemberSemicolon();\n      const paramsKey = \"parameters\";\n      const returnTypeKey = \"typeAnnotation\";\n      if (method.kind === \"get\") {\n        if (method[paramsKey].length > 0) {\n          this.raise(Errors.BadGetterArity, {\n            at: this.state.curPosition()\n          });\n          if (this.isThisParam(method[paramsKey][0])) {\n            this.raise(TSErrors.AccesorCannotDeclareThisParameter, {\n              at: this.state.curPosition()\n            });\n          }\n        }\n      } else if (method.kind === \"set\") {\n        if (method[paramsKey].length !== 1) {\n          this.raise(Errors.BadSetterArity, {\n            at: this.state.curPosition()\n          });\n        } else {\n          const firstParameter = method[paramsKey][0];\n          if (this.isThisParam(firstParameter)) {\n            this.raise(TSErrors.AccesorCannotDeclareThisParameter, {\n              at: this.state.curPosition()\n            });\n          }\n          if (firstParameter.type === \"Identifier\" && firstParameter.optional) {\n            this.raise(TSErrors.SetAccesorCannotHaveOptionalParameter, {\n              at: this.state.curPosition()\n            });\n          }\n          if (firstParameter.type === \"RestElement\") {\n            this.raise(TSErrors.SetAccesorCannotHaveRestParameter, {\n              at: this.state.curPosition()\n            });\n          }\n        }\n        if (method[returnTypeKey]) {\n          this.raise(TSErrors.SetAccesorCannotHaveReturnType, {\n            at: method[returnTypeKey]\n          });\n        }\n      } else {\n        method.kind = \"method\";\n      }\n      return this.finishNode(method, \"TSMethodSignature\");\n    } else {\n      const property = nodeAny;\n      if (readonly) property.readonly = true;\n      const type = this.tsTryParseTypeAnnotation();\n      if (type) property.typeAnnotation = type;\n      this.tsParseTypeMemberSemicolon();\n      return this.finishNode(property, \"TSPropertySignature\");\n    }\n  }\n  tsParseTypeMember() {\n    const node = this.startNode();\n    if (this.match(10) || this.match(47)) {\n      return this.tsParseSignatureMember(\"TSCallSignatureDeclaration\", node);\n    }\n    if (this.match(77)) {\n      const id = this.startNode();\n      this.next();\n      if (this.match(10) || this.match(47)) {\n        return this.tsParseSignatureMember(\"TSConstructSignatureDeclaration\", node);\n      } else {\n        node.key = this.createIdentifier(id, \"new\");\n        return this.tsParsePropertyOrMethodSignature(node, false);\n      }\n    }\n    this.tsParseModifiers({\n      allowedModifiers: [\"readonly\"],\n      disallowedModifiers: [\"declare\", \"abstract\", \"private\", \"protected\", \"public\", \"static\", \"override\"]\n    }, node);\n    const idx = this.tsTryParseIndexSignature(node);\n    if (idx) {\n      return idx;\n    }\n    super.parsePropertyName(node);\n    if (!node.computed && node.key.type === \"Identifier\" && (node.key.name === \"get\" || node.key.name === \"set\") && this.tsTokenCanFollowModifier()) {\n      node.kind = node.key.name;\n      super.parsePropertyName(node);\n    }\n    return this.tsParsePropertyOrMethodSignature(node, !!node.readonly);\n  }\n  tsParseTypeLiteral() {\n    const node = this.startNode();\n    node.members = this.tsParseObjectTypeMembers();\n    return this.finishNode(node, \"TSTypeLiteral\");\n  }\n  tsParseObjectTypeMembers() {\n    this.expect(5);\n    const members = this.tsParseList(\"TypeMembers\", this.tsParseTypeMember.bind(this));\n    this.expect(8);\n    return members;\n  }\n  tsIsStartOfMappedType() {\n    this.next();\n    if (this.eat(53)) {\n      return this.isContextual(120);\n    }\n    if (this.isContextual(120)) {\n      this.next();\n    }\n    if (!this.match(0)) {\n      return false;\n    }\n    this.next();\n    if (!this.tsIsIdentifier()) {\n      return false;\n    }\n    this.next();\n    return this.match(58);\n  }\n  tsParseMappedTypeParameter() {\n    const node = this.startNode();\n    node.name = this.tsParseTypeParameterName();\n    node.constraint = this.tsExpectThenParseType(58);\n    return this.finishNode(node, \"TSTypeParameter\");\n  }\n  tsParseMappedType() {\n    const node = this.startNode();\n    this.expect(5);\n    if (this.match(53)) {\n      node.readonly = this.state.value;\n      this.next();\n      this.expectContextual(120);\n    } else if (this.eatContextual(120)) {\n      node.readonly = true;\n    }\n    this.expect(0);\n    node.typeParameter = this.tsParseMappedTypeParameter();\n    node.nameType = this.eatContextual(93) ? this.tsParseType() : null;\n    this.expect(3);\n    if (this.match(53)) {\n      node.optional = this.state.value;\n      this.next();\n      this.expect(17);\n    } else if (this.eat(17)) {\n      node.optional = true;\n    }\n    node.typeAnnotation = this.tsTryParseType();\n    this.semicolon();\n    this.expect(8);\n    return this.finishNode(node, \"TSMappedType\");\n  }\n  tsParseTupleType() {\n    const node = this.startNode();\n    node.elementTypes = this.tsParseBracketedList(\"TupleElementTypes\", this.tsParseTupleElementType.bind(this), true, false);\n    let seenOptionalElement = false;\n    let labeledElements = null;\n    node.elementTypes.forEach(elementNode => {\n      var _labeledElements;\n      const {\n        type\n      } = elementNode;\n      if (seenOptionalElement && type !== \"TSRestType\" && type !== \"TSOptionalType\" && !(type === \"TSNamedTupleMember\" && elementNode.optional)) {\n        this.raise(TSErrors.OptionalTypeBeforeRequired, {\n          at: elementNode\n        });\n      }\n      seenOptionalElement || (seenOptionalElement = type === \"TSNamedTupleMember\" && elementNode.optional || type === \"TSOptionalType\");\n      let checkType = type;\n      if (type === \"TSRestType\") {\n        elementNode = elementNode.typeAnnotation;\n        checkType = elementNode.type;\n      }\n      const isLabeled = checkType === \"TSNamedTupleMember\";\n      (_labeledElements = labeledElements) != null ? _labeledElements : labeledElements = isLabeled;\n      if (labeledElements !== isLabeled) {\n        this.raise(TSErrors.MixedLabeledAndUnlabeledElements, {\n          at: elementNode\n        });\n      }\n    });\n    return this.finishNode(node, \"TSTupleType\");\n  }\n  tsParseTupleElementType() {\n    const {\n      startLoc\n    } = this.state;\n    const rest = this.eat(21);\n    let labeled;\n    let label;\n    let optional;\n    let type;\n    const isWord = tokenIsKeywordOrIdentifier(this.state.type);\n    const chAfterWord = isWord ? this.lookaheadCharCode() : null;\n    if (chAfterWord === 58) {\n      labeled = true;\n      optional = false;\n      label = this.parseIdentifier(true);\n      this.expect(14);\n      type = this.tsParseType();\n    } else if (chAfterWord === 63) {\n      optional = true;\n      const startLoc = this.state.startLoc;\n      const wordName = this.state.value;\n      const typeOrLabel = this.tsParseNonArrayType();\n      if (this.lookaheadCharCode() === 58) {\n        labeled = true;\n        label = this.createIdentifier(this.startNodeAt(startLoc), wordName);\n        this.expect(17);\n        this.expect(14);\n        type = this.tsParseType();\n      } else {\n        labeled = false;\n        type = typeOrLabel;\n        this.expect(17);\n      }\n    } else {\n      type = this.tsParseType();\n      optional = this.eat(17);\n      labeled = this.eat(14);\n    }\n    if (labeled) {\n      let labeledNode;\n      if (label) {\n        labeledNode = this.startNodeAtNode(label);\n        labeledNode.optional = optional;\n        labeledNode.label = label;\n        labeledNode.elementType = type;\n        if (this.eat(17)) {\n          labeledNode.optional = true;\n          this.raise(TSErrors.TupleOptionalAfterType, {\n            at: this.state.lastTokStartLoc\n          });\n        }\n      } else {\n        labeledNode = this.startNodeAtNode(type);\n        labeledNode.optional = optional;\n        this.raise(TSErrors.InvalidTupleMemberLabel, {\n          at: type\n        });\n        labeledNode.label = type;\n        labeledNode.elementType = this.tsParseType();\n      }\n      type = this.finishNode(labeledNode, \"TSNamedTupleMember\");\n    } else if (optional) {\n      const optionalTypeNode = this.startNodeAtNode(type);\n      optionalTypeNode.typeAnnotation = type;\n      type = this.finishNode(optionalTypeNode, \"TSOptionalType\");\n    }\n    if (rest) {\n      const restNode = this.startNodeAt(startLoc);\n      restNode.typeAnnotation = type;\n      type = this.finishNode(restNode, \"TSRestType\");\n    }\n    return type;\n  }\n  tsParseParenthesizedType() {\n    const node = this.startNode();\n    this.expect(10);\n    node.typeAnnotation = this.tsParseType();\n    this.expect(11);\n    return this.finishNode(node, \"TSParenthesizedType\");\n  }\n  tsParseFunctionOrConstructorType(type, abstract) {\n    const node = this.startNode();\n    if (type === \"TSConstructorType\") {\n      node.abstract = !!abstract;\n      if (abstract) this.next();\n      this.next();\n    }\n    this.tsInAllowConditionalTypesContext(() => this.tsFillSignature(19, node));\n    return this.finishNode(node, type);\n  }\n  tsParseLiteralTypeNode() {\n    const node = this.startNode();\n    node.literal = (() => {\n      switch (this.state.type) {\n        case 132:\n        case 133:\n        case 131:\n        case 85:\n        case 86:\n          return super.parseExprAtom();\n        default:\n          this.unexpected();\n      }\n    })();\n    return this.finishNode(node, \"TSLiteralType\");\n  }\n  tsParseTemplateLiteralType() {\n    const node = this.startNode();\n    node.literal = super.parseTemplate(false);\n    return this.finishNode(node, \"TSLiteralType\");\n  }\n  parseTemplateSubstitution() {\n    if (this.state.inType) return this.tsParseType();\n    return super.parseTemplateSubstitution();\n  }\n  tsParseThisTypeOrThisTypePredicate() {\n    const thisKeyword = this.tsParseThisTypeNode();\n    if (this.isContextual(114) && !this.hasPrecedingLineBreak()) {\n      return this.tsParseThisTypePredicate(thisKeyword);\n    } else {\n      return thisKeyword;\n    }\n  }\n  tsParseNonArrayType() {\n    switch (this.state.type) {\n      case 131:\n      case 132:\n      case 133:\n      case 85:\n      case 86:\n        return this.tsParseLiteralTypeNode();\n      case 53:\n        if (this.state.value === \"-\") {\n          const node = this.startNode();\n          const nextToken = this.lookahead();\n          if (nextToken.type !== 132 && nextToken.type !== 133) {\n            this.unexpected();\n          }\n          node.literal = this.parseMaybeUnary();\n          return this.finishNode(node, \"TSLiteralType\");\n        }\n        break;\n      case 78:\n        return this.tsParseThisTypeOrThisTypePredicate();\n      case 87:\n        return this.tsParseTypeQuery();\n      case 83:\n        return this.tsParseImportType();\n      case 5:\n        return this.tsLookAhead(this.tsIsStartOfMappedType.bind(this)) ? this.tsParseMappedType() : this.tsParseTypeLiteral();\n      case 0:\n        return this.tsParseTupleType();\n      case 10:\n        return this.tsParseParenthesizedType();\n      case 25:\n      case 24:\n        return this.tsParseTemplateLiteralType();\n      default:\n        {\n          const {\n            type\n          } = this.state;\n          if (tokenIsIdentifier(type) || type === 88 || type === 84) {\n            const nodeType = type === 88 ? \"TSVoidKeyword\" : type === 84 ? \"TSNullKeyword\" : keywordTypeFromName(this.state.value);\n            if (nodeType !== undefined && this.lookaheadCharCode() !== 46) {\n              const node = this.startNode();\n              this.next();\n              return this.finishNode(node, nodeType);\n            }\n            return this.tsParseTypeReference();\n          }\n        }\n    }\n    this.unexpected();\n  }\n  tsParseArrayTypeOrHigher() {\n    let type = this.tsParseNonArrayType();\n    while (!this.hasPrecedingLineBreak() && this.eat(0)) {\n      if (this.match(3)) {\n        const node = this.startNodeAtNode(type);\n        node.elementType = type;\n        this.expect(3);\n        type = this.finishNode(node, \"TSArrayType\");\n      } else {\n        const node = this.startNodeAtNode(type);\n        node.objectType = type;\n        node.indexType = this.tsParseType();\n        this.expect(3);\n        type = this.finishNode(node, \"TSIndexedAccessType\");\n      }\n    }\n    return type;\n  }\n  tsParseTypeOperator() {\n    const node = this.startNode();\n    const operator = this.state.value;\n    this.next();\n    node.operator = operator;\n    node.typeAnnotation = this.tsParseTypeOperatorOrHigher();\n    if (operator === \"readonly\") {\n      this.tsCheckTypeAnnotationForReadOnly(node);\n    }\n    return this.finishNode(node, \"TSTypeOperator\");\n  }\n  tsCheckTypeAnnotationForReadOnly(node) {\n    switch (node.typeAnnotation.type) {\n      case \"TSTupleType\":\n      case \"TSArrayType\":\n        return;\n      default:\n        this.raise(TSErrors.UnexpectedReadonly, {\n          at: node\n        });\n    }\n  }\n  tsParseInferType() {\n    const node = this.startNode();\n    this.expectContextual(113);\n    const typeParameter = this.startNode();\n    typeParameter.name = this.tsParseTypeParameterName();\n    typeParameter.constraint = this.tsTryParse(() => this.tsParseConstraintForInferType());\n    node.typeParameter = this.finishNode(typeParameter, \"TSTypeParameter\");\n    return this.finishNode(node, \"TSInferType\");\n  }\n  tsParseConstraintForInferType() {\n    if (this.eat(81)) {\n      const constraint = this.tsInDisallowConditionalTypesContext(() => this.tsParseType());\n      if (this.state.inDisallowConditionalTypesContext || !this.match(17)) {\n        return constraint;\n      }\n    }\n  }\n  tsParseTypeOperatorOrHigher() {\n    const isTypeOperator = tokenIsTSTypeOperator(this.state.type) && !this.state.containsEsc;\n    return isTypeOperator ? this.tsParseTypeOperator() : this.isContextual(113) ? this.tsParseInferType() : this.tsInAllowConditionalTypesContext(() => this.tsParseArrayTypeOrHigher());\n  }\n  tsParseUnionOrIntersectionType(kind, parseConstituentType, operator) {\n    const node = this.startNode();\n    const hasLeadingOperator = this.eat(operator);\n    const types = [];\n    do {\n      types.push(parseConstituentType());\n    } while (this.eat(operator));\n    if (types.length === 1 && !hasLeadingOperator) {\n      return types[0];\n    }\n    node.types = types;\n    return this.finishNode(node, kind);\n  }\n  tsParseIntersectionTypeOrHigher() {\n    return this.tsParseUnionOrIntersectionType(\"TSIntersectionType\", this.tsParseTypeOperatorOrHigher.bind(this), 45);\n  }\n  tsParseUnionTypeOrHigher() {\n    return this.tsParseUnionOrIntersectionType(\"TSUnionType\", this.tsParseIntersectionTypeOrHigher.bind(this), 43);\n  }\n  tsIsStartOfFunctionType() {\n    if (this.match(47)) {\n      return true;\n    }\n    return this.match(10) && this.tsLookAhead(this.tsIsUnambiguouslyStartOfFunctionType.bind(this));\n  }\n  tsSkipParameterStart() {\n    if (tokenIsIdentifier(this.state.type) || this.match(78)) {\n      this.next();\n      return true;\n    }\n    if (this.match(5)) {\n      const {\n        errors\n      } = this.state;\n      const previousErrorCount = errors.length;\n      try {\n        this.parseObjectLike(8, true);\n        return errors.length === previousErrorCount;\n      } catch (_unused) {\n        return false;\n      }\n    }\n    if (this.match(0)) {\n      this.next();\n      const {\n        errors\n      } = this.state;\n      const previousErrorCount = errors.length;\n      try {\n        super.parseBindingList(3, 93, 1);\n        return errors.length === previousErrorCount;\n      } catch (_unused2) {\n        return false;\n      }\n    }\n    return false;\n  }\n  tsIsUnambiguouslyStartOfFunctionType() {\n    this.next();\n    if (this.match(11) || this.match(21)) {\n      return true;\n    }\n    if (this.tsSkipParameterStart()) {\n      if (this.match(14) || this.match(12) || this.match(17) || this.match(29)) {\n        return true;\n      }\n      if (this.match(11)) {\n        this.next();\n        if (this.match(19)) {\n          return true;\n        }\n      }\n    }\n    return false;\n  }\n  tsParseTypeOrTypePredicateAnnotation(returnToken) {\n    return this.tsInType(() => {\n      const t = this.startNode();\n      this.expect(returnToken);\n      const node = this.startNode();\n      const asserts = !!this.tsTryParse(this.tsParseTypePredicateAsserts.bind(this));\n      if (asserts && this.match(78)) {\n        let thisTypePredicate = this.tsParseThisTypeOrThisTypePredicate();\n        if (thisTypePredicate.type === \"TSThisType\") {\n          node.parameterName = thisTypePredicate;\n          node.asserts = true;\n          node.typeAnnotation = null;\n          thisTypePredicate = this.finishNode(node, \"TSTypePredicate\");\n        } else {\n          this.resetStartLocationFromNode(thisTypePredicate, node);\n          thisTypePredicate.asserts = true;\n        }\n        t.typeAnnotation = thisTypePredicate;\n        return this.finishNode(t, \"TSTypeAnnotation\");\n      }\n      const typePredicateVariable = this.tsIsIdentifier() && this.tsTryParse(this.tsParseTypePredicatePrefix.bind(this));\n      if (!typePredicateVariable) {\n        if (!asserts) {\n          return this.tsParseTypeAnnotation(false, t);\n        }\n        node.parameterName = this.parseIdentifier();\n        node.asserts = asserts;\n        node.typeAnnotation = null;\n        t.typeAnnotation = this.finishNode(node, \"TSTypePredicate\");\n        return this.finishNode(t, \"TSTypeAnnotation\");\n      }\n      const type = this.tsParseTypeAnnotation(false);\n      node.parameterName = typePredicateVariable;\n      node.typeAnnotation = type;\n      node.asserts = asserts;\n      t.typeAnnotation = this.finishNode(node, \"TSTypePredicate\");\n      return this.finishNode(t, \"TSTypeAnnotation\");\n    });\n  }\n  tsTryParseTypeOrTypePredicateAnnotation() {\n    return this.match(14) ? this.tsParseTypeOrTypePredicateAnnotation(14) : undefined;\n  }\n  tsTryParseTypeAnnotation() {\n    return this.match(14) ? this.tsParseTypeAnnotation() : undefined;\n  }\n  tsTryParseType() {\n    return this.tsEatThenParseType(14);\n  }\n  tsParseTypePredicatePrefix() {\n    const id = this.parseIdentifier();\n    if (this.isContextual(114) && !this.hasPrecedingLineBreak()) {\n      this.next();\n      return id;\n    }\n  }\n  tsParseTypePredicateAsserts() {\n    if (this.state.type !== 107) {\n      return false;\n    }\n    const containsEsc = this.state.containsEsc;\n    this.next();\n    if (!tokenIsIdentifier(this.state.type) && !this.match(78)) {\n      return false;\n    }\n    if (containsEsc) {\n      this.raise(Errors.InvalidEscapedReservedWord, {\n        at: this.state.lastTokStartLoc,\n        reservedWord: \"asserts\"\n      });\n    }\n    return true;\n  }\n  tsParseTypeAnnotation(eatColon = true, t = this.startNode()) {\n    this.tsInType(() => {\n      if (eatColon) this.expect(14);\n      t.typeAnnotation = this.tsParseType();\n    });\n    return this.finishNode(t, \"TSTypeAnnotation\");\n  }\n  tsParseType() {\n    assert(this.state.inType);\n    const type = this.tsParseNonConditionalType();\n    if (this.state.inDisallowConditionalTypesContext || this.hasPrecedingLineBreak() || !this.eat(81)) {\n      return type;\n    }\n    const node = this.startNodeAtNode(type);\n    node.checkType = type;\n    node.extendsType = this.tsInDisallowConditionalTypesContext(() => this.tsParseNonConditionalType());\n    this.expect(17);\n    node.trueType = this.tsInAllowConditionalTypesContext(() => this.tsParseType());\n    this.expect(14);\n    node.falseType = this.tsInAllowConditionalTypesContext(() => this.tsParseType());\n    return this.finishNode(node, \"TSConditionalType\");\n  }\n  isAbstractConstructorSignature() {\n    return this.isContextual(122) && this.lookahead().type === 77;\n  }\n  tsParseNonConditionalType() {\n    if (this.tsIsStartOfFunctionType()) {\n      return this.tsParseFunctionOrConstructorType(\"TSFunctionType\");\n    }\n    if (this.match(77)) {\n      return this.tsParseFunctionOrConstructorType(\"TSConstructorType\");\n    } else if (this.isAbstractConstructorSignature()) {\n      return this.tsParseFunctionOrConstructorType(\"TSConstructorType\", true);\n    }\n    return this.tsParseUnionTypeOrHigher();\n  }\n  tsParseTypeAssertion() {\n    if (this.getPluginOption(\"typescript\", \"disallowAmbiguousJSXLike\")) {\n      this.raise(TSErrors.ReservedTypeAssertion, {\n        at: this.state.startLoc\n      });\n    }\n    const node = this.startNode();\n    node.typeAnnotation = this.tsInType(() => {\n      this.next();\n      return this.match(75) ? this.tsParseTypeReference() : this.tsParseType();\n    });\n    this.expect(48);\n    node.expression = this.parseMaybeUnary();\n    return this.finishNode(node, \"TSTypeAssertion\");\n  }\n  tsParseHeritageClause(token) {\n    const originalStartLoc = this.state.startLoc;\n    const delimitedList = this.tsParseDelimitedList(\"HeritageClauseElement\", () => {\n      const node = this.startNode();\n      node.expression = this.tsParseEntityName();\n      if (this.match(47)) {\n        node.typeParameters = this.tsParseTypeArguments();\n      }\n      return this.finishNode(node, \"TSExpressionWithTypeArguments\");\n    });\n    if (!delimitedList.length) {\n      this.raise(TSErrors.EmptyHeritageClauseType, {\n        at: originalStartLoc,\n        token\n      });\n    }\n    return delimitedList;\n  }\n  tsParseInterfaceDeclaration(node, properties = {}) {\n    if (this.hasFollowingLineBreak()) return null;\n    this.expectContextual(127);\n    if (properties.declare) node.declare = true;\n    if (tokenIsIdentifier(this.state.type)) {\n      node.id = this.parseIdentifier();\n      this.checkIdentifier(node.id, BIND_TS_INTERFACE);\n    } else {\n      node.id = null;\n      this.raise(TSErrors.MissingInterfaceName, {\n        at: this.state.startLoc\n      });\n    }\n    node.typeParameters = this.tsTryParseTypeParameters(this.tsParseInOutConstModifiers);\n    if (this.eat(81)) {\n      node.extends = this.tsParseHeritageClause(\"extends\");\n    }\n    const body = this.startNode();\n    body.body = this.tsInType(this.tsParseObjectTypeMembers.bind(this));\n    node.body = this.finishNode(body, \"TSInterfaceBody\");\n    return this.finishNode(node, \"TSInterfaceDeclaration\");\n  }\n  tsParseTypeAliasDeclaration(node) {\n    node.id = this.parseIdentifier();\n    this.checkIdentifier(node.id, BIND_TS_TYPE);\n    node.typeAnnotation = this.tsInType(() => {\n      node.typeParameters = this.tsTryParseTypeParameters(this.tsParseInOutModifiers);\n      this.expect(29);\n      if (this.isContextual(112) && this.lookahead().type !== 16) {\n        const node = this.startNode();\n        this.next();\n        return this.finishNode(node, \"TSIntrinsicKeyword\");\n      }\n      return this.tsParseType();\n    });\n    this.semicolon();\n    return this.finishNode(node, \"TSTypeAliasDeclaration\");\n  }\n  tsInNoContext(cb) {\n    const oldContext = this.state.context;\n    this.state.context = [oldContext[0]];\n    try {\n      return cb();\n    } finally {\n      this.state.context = oldContext;\n    }\n  }\n  tsInType(cb) {\n    const oldInType = this.state.inType;\n    this.state.inType = true;\n    try {\n      return cb();\n    } finally {\n      this.state.inType = oldInType;\n    }\n  }\n  tsInDisallowConditionalTypesContext(cb) {\n    const oldInDisallowConditionalTypesContext = this.state.inDisallowConditionalTypesContext;\n    this.state.inDisallowConditionalTypesContext = true;\n    try {\n      return cb();\n    } finally {\n      this.state.inDisallowConditionalTypesContext = oldInDisallowConditionalTypesContext;\n    }\n  }\n  tsInAllowConditionalTypesContext(cb) {\n    const oldInDisallowConditionalTypesContext = this.state.inDisallowConditionalTypesContext;\n    this.state.inDisallowConditionalTypesContext = false;\n    try {\n      return cb();\n    } finally {\n      this.state.inDisallowConditionalTypesContext = oldInDisallowConditionalTypesContext;\n    }\n  }\n  tsEatThenParseType(token) {\n    return !this.match(token) ? undefined : this.tsNextThenParseType();\n  }\n  tsExpectThenParseType(token) {\n    return this.tsDoThenParseType(() => this.expect(token));\n  }\n  tsNextThenParseType() {\n    return this.tsDoThenParseType(() => this.next());\n  }\n  tsDoThenParseType(cb) {\n    return this.tsInType(() => {\n      cb();\n      return this.tsParseType();\n    });\n  }\n  tsParseEnumMember() {\n    const node = this.startNode();\n    node.id = this.match(131) ? super.parseStringLiteral(this.state.value) : this.parseIdentifier(true);\n    if (this.eat(29)) {\n      node.initializer = super.parseMaybeAssignAllowIn();\n    }\n    return this.finishNode(node, \"TSEnumMember\");\n  }\n  tsParseEnumDeclaration(node, properties = {}) {\n    if (properties.const) node.const = true;\n    if (properties.declare) node.declare = true;\n    this.expectContextual(124);\n    node.id = this.parseIdentifier();\n    this.checkIdentifier(node.id, node.const ? BIND_TS_CONST_ENUM : BIND_TS_ENUM);\n    this.expect(5);\n    node.members = this.tsParseDelimitedList(\"EnumMembers\", this.tsParseEnumMember.bind(this));\n    this.expect(8);\n    return this.finishNode(node, \"TSEnumDeclaration\");\n  }\n  tsParseModuleBlock() {\n    const node = this.startNode();\n    this.scope.enter(SCOPE_OTHER);\n    this.expect(5);\n    super.parseBlockOrModuleBlockBody(node.body = [], undefined, true, 8);\n    this.scope.exit();\n    return this.finishNode(node, \"TSModuleBlock\");\n  }\n  tsParseModuleOrNamespaceDeclaration(node, nested = false) {\n    node.id = this.parseIdentifier();\n    if (!nested) {\n      this.checkIdentifier(node.id, BIND_TS_NAMESPACE);\n    }\n    if (this.eat(16)) {\n      const inner = this.startNode();\n      this.tsParseModuleOrNamespaceDeclaration(inner, true);\n      node.body = inner;\n    } else {\n      this.scope.enter(SCOPE_TS_MODULE);\n      this.prodParam.enter(PARAM);\n      node.body = this.tsParseModuleBlock();\n      this.prodParam.exit();\n      this.scope.exit();\n    }\n    return this.finishNode(node, \"TSModuleDeclaration\");\n  }\n  tsParseAmbientExternalModuleDeclaration(node) {\n    if (this.isContextual(110)) {\n      node.global = true;\n      node.id = this.parseIdentifier();\n    } else if (this.match(131)) {\n      node.id = super.parseStringLiteral(this.state.value);\n    } else {\n      this.unexpected();\n    }\n    if (this.match(5)) {\n      this.scope.enter(SCOPE_TS_MODULE);\n      this.prodParam.enter(PARAM);\n      node.body = this.tsParseModuleBlock();\n      this.prodParam.exit();\n      this.scope.exit();\n    } else {\n      this.semicolon();\n    }\n    return this.finishNode(node, \"TSModuleDeclaration\");\n  }\n  tsParseImportEqualsDeclaration(node, isExport) {\n    node.isExport = isExport || false;\n    node.id = this.parseIdentifier();\n    this.checkIdentifier(node.id, BIND_FLAGS_TS_IMPORT);\n    this.expect(29);\n    const moduleReference = this.tsParseModuleReference();\n    if (node.importKind === \"type\" && moduleReference.type !== \"TSExternalModuleReference\") {\n      this.raise(TSErrors.ImportAliasHasImportType, {\n        at: moduleReference\n      });\n    }\n    node.moduleReference = moduleReference;\n    this.semicolon();\n    return this.finishNode(node, \"TSImportEqualsDeclaration\");\n  }\n  tsIsExternalModuleReference() {\n    return this.isContextual(117) && this.lookaheadCharCode() === 40;\n  }\n  tsParseModuleReference() {\n    return this.tsIsExternalModuleReference() ? this.tsParseExternalModuleReference() : this.tsParseEntityName(false);\n  }\n  tsParseExternalModuleReference() {\n    const node = this.startNode();\n    this.expectContextual(117);\n    this.expect(10);\n    if (!this.match(131)) {\n      this.unexpected();\n    }\n    node.expression = super.parseExprAtom();\n    this.expect(11);\n    return this.finishNode(node, \"TSExternalModuleReference\");\n  }\n  tsLookAhead(f) {\n    const state = this.state.clone();\n    const res = f();\n    this.state = state;\n    return res;\n  }\n  tsTryParseAndCatch(f) {\n    const result = this.tryParse(abort => f() || abort());\n    if (result.aborted || !result.node) return undefined;\n    if (result.error) this.state = result.failState;\n    return result.node;\n  }\n  tsTryParse(f) {\n    const state = this.state.clone();\n    const result = f();\n    if (result !== undefined && result !== false) {\n      return result;\n    } else {\n      this.state = state;\n      return undefined;\n    }\n  }\n  tsTryParseDeclare(nany) {\n    if (this.isLineTerminator()) {\n      return;\n    }\n    let starttype = this.state.type;\n    let kind;\n    if (this.isContextual(99)) {\n      starttype = 74;\n      kind = \"let\";\n    }\n    return this.tsInAmbientContext(() => {\n      if (starttype === 68) {\n        nany.declare = true;\n        return super.parseFunctionStatement(nany, false, false);\n      }\n      if (starttype === 80) {\n        nany.declare = true;\n        return this.parseClass(nany, true, false);\n      }\n      if (starttype === 124) {\n        return this.tsParseEnumDeclaration(nany, {\n          declare: true\n        });\n      }\n      if (starttype === 110) {\n        return this.tsParseAmbientExternalModuleDeclaration(nany);\n      }\n      if (starttype === 75 || starttype === 74) {\n        if (!this.match(75) || !this.isLookaheadContextual(\"enum\")) {\n          nany.declare = true;\n          return this.parseVarStatement(nany, kind || this.state.value, true);\n        }\n        this.expect(75);\n        return this.tsParseEnumDeclaration(nany, {\n          const: true,\n          declare: true\n        });\n      }\n      if (starttype === 127) {\n        const result = this.tsParseInterfaceDeclaration(nany, {\n          declare: true\n        });\n        if (result) return result;\n      }\n      if (tokenIsIdentifier(starttype)) {\n        return this.tsParseDeclaration(nany, this.state.value, true, null);\n      }\n    });\n  }\n  tsTryParseExportDeclaration() {\n    return this.tsParseDeclaration(this.startNode(), this.state.value, true, null);\n  }\n  tsParseExpressionStatement(node, expr, decorators) {\n    switch (expr.name) {\n      case \"declare\":\n        {\n          const declaration = this.tsTryParseDeclare(node);\n          if (declaration) {\n            declaration.declare = true;\n            return declaration;\n          }\n          break;\n        }\n      case \"global\":\n        if (this.match(5)) {\n          this.scope.enter(SCOPE_TS_MODULE);\n          this.prodParam.enter(PARAM);\n          const mod = node;\n          mod.global = true;\n          mod.id = expr;\n          mod.body = this.tsParseModuleBlock();\n          this.scope.exit();\n          this.prodParam.exit();\n          return this.finishNode(mod, \"TSModuleDeclaration\");\n        }\n        break;\n      default:\n        return this.tsParseDeclaration(node, expr.name, false, decorators);\n    }\n  }\n  tsParseDeclaration(node, value, next, decorators) {\n    switch (value) {\n      case \"abstract\":\n        if (this.tsCheckLineTerminator(next) && (this.match(80) || tokenIsIdentifier(this.state.type))) {\n          return this.tsParseAbstractDeclaration(node, decorators);\n        }\n        break;\n      case \"module\":\n        if (this.tsCheckLineTerminator(next)) {\n          if (this.match(131)) {\n            return this.tsParseAmbientExternalModuleDeclaration(node);\n          } else if (tokenIsIdentifier(this.state.type)) {\n            return this.tsParseModuleOrNamespaceDeclaration(node);\n          }\n        }\n        break;\n      case \"namespace\":\n        if (this.tsCheckLineTerminator(next) && tokenIsIdentifier(this.state.type)) {\n          return this.tsParseModuleOrNamespaceDeclaration(node);\n        }\n        break;\n      case \"type\":\n        if (this.tsCheckLineTerminator(next) && tokenIsIdentifier(this.state.type)) {\n          return this.tsParseTypeAliasDeclaration(node);\n        }\n        break;\n    }\n  }\n  tsCheckLineTerminator(next) {\n    if (next) {\n      if (this.hasFollowingLineBreak()) return false;\n      this.next();\n      return true;\n    }\n    return !this.isLineTerminator();\n  }\n  tsTryParseGenericAsyncArrowFunction(startLoc) {\n    if (!this.match(47)) {\n      return undefined;\n    }\n    const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;\n    this.state.maybeInArrowParameters = true;\n    const res = this.tsTryParseAndCatch(() => {\n      const node = this.startNodeAt(startLoc);\n      node.typeParameters = this.tsParseTypeParameters(this.tsParseConstModifier);\n      super.parseFunctionParams(node);\n      node.returnType = this.tsTryParseTypeOrTypePredicateAnnotation();\n      this.expect(19);\n      return node;\n    });\n    this.state.maybeInArrowParameters = oldMaybeInArrowParameters;\n    if (!res) {\n      return undefined;\n    }\n    return super.parseArrowExpression(res, null, true);\n  }\n  tsParseTypeArgumentsInExpression() {\n    if (this.reScan_lt() !== 47) {\n      return undefined;\n    }\n    return this.tsParseTypeArguments();\n  }\n  tsParseTypeArguments() {\n    const node = this.startNode();\n    node.params = this.tsInType(() => this.tsInNoContext(() => {\n      this.expect(47);\n      return this.tsParseDelimitedList(\"TypeParametersOrArguments\", this.tsParseType.bind(this));\n    }));\n    if (node.params.length === 0) {\n      this.raise(TSErrors.EmptyTypeArguments, {\n        at: node\n      });\n    }\n    this.expect(48);\n    return this.finishNode(node, \"TSTypeParameterInstantiation\");\n  }\n  tsIsDeclarationStart() {\n    return tokenIsTSDeclarationStart(this.state.type);\n  }\n  isExportDefaultSpecifier() {\n    if (this.tsIsDeclarationStart()) return false;\n    return super.isExportDefaultSpecifier();\n  }\n  parseAssignableListItem(flags, decorators) {\n    const startLoc = this.state.startLoc;\n    const modified = {};\n    this.tsParseModifiers({\n      allowedModifiers: [\"public\", \"private\", \"protected\", \"override\", \"readonly\"]\n    }, modified);\n    const accessibility = modified.accessibility;\n    const override = modified.override;\n    const readonly = modified.readonly;\n    if (!(flags & 4) && (accessibility || readonly || override)) {\n      this.raise(TSErrors.UnexpectedParameterModifier, {\n        at: startLoc\n      });\n    }\n    const left = this.parseMaybeDefault();\n    this.parseAssignableListItemTypes(left, flags);\n    const elt = this.parseMaybeDefault(left.loc.start, left);\n    if (accessibility || readonly || override) {\n      const pp = this.startNodeAt(startLoc);\n      if (decorators.length) {\n        pp.decorators = decorators;\n      }\n      if (accessibility) pp.accessibility = accessibility;\n      if (readonly) pp.readonly = readonly;\n      if (override) pp.override = override;\n      if (elt.type !== \"Identifier\" && elt.type !== \"AssignmentPattern\") {\n        this.raise(TSErrors.UnsupportedParameterPropertyKind, {\n          at: pp\n        });\n      }\n      pp.parameter = elt;\n      return this.finishNode(pp, \"TSParameterProperty\");\n    }\n    if (decorators.length) {\n      left.decorators = decorators;\n    }\n    return elt;\n  }\n  isSimpleParameter(node) {\n    return node.type === \"TSParameterProperty\" && super.isSimpleParameter(node.parameter) || super.isSimpleParameter(node);\n  }\n  tsDisallowOptionalPattern(node) {\n    for (const param of node.params) {\n      if (param.type !== \"Identifier\" && param.optional && !this.state.isAmbientContext) {\n        this.raise(TSErrors.PatternIsOptional, {\n          at: param\n        });\n      }\n    }\n  }\n  setArrowFunctionParameters(node, params, trailingCommaLoc) {\n    super.setArrowFunctionParameters(node, params, trailingCommaLoc);\n    this.tsDisallowOptionalPattern(node);\n  }\n  parseFunctionBodyAndFinish(node, type, isMethod = false) {\n    if (this.match(14)) {\n      node.returnType = this.tsParseTypeOrTypePredicateAnnotation(14);\n    }\n    const bodilessType = type === \"FunctionDeclaration\" ? \"TSDeclareFunction\" : type === \"ClassMethod\" || type === \"ClassPrivateMethod\" ? \"TSDeclareMethod\" : undefined;\n    if (bodilessType && !this.match(5) && this.isLineTerminator()) {\n      return this.finishNode(node, bodilessType);\n    }\n    if (bodilessType === \"TSDeclareFunction\" && this.state.isAmbientContext) {\n      this.raise(TSErrors.DeclareFunctionHasImplementation, {\n        at: node\n      });\n      if (node.declare) {\n        return super.parseFunctionBodyAndFinish(node, bodilessType, isMethod);\n      }\n    }\n    this.tsDisallowOptionalPattern(node);\n    return super.parseFunctionBodyAndFinish(node, type, isMethod);\n  }\n  registerFunctionStatementId(node) {\n    if (!node.body && node.id) {\n      this.checkIdentifier(node.id, BIND_TS_AMBIENT);\n    } else {\n      super.registerFunctionStatementId(node);\n    }\n  }\n  tsCheckForInvalidTypeCasts(items) {\n    items.forEach(node => {\n      if ((node == null ? void 0 : node.type) === \"TSTypeCastExpression\") {\n        this.raise(TSErrors.UnexpectedTypeAnnotation, {\n          at: node.typeAnnotation\n        });\n      }\n    });\n  }\n  toReferencedList(exprList, isInParens) {\n    this.tsCheckForInvalidTypeCasts(exprList);\n    return exprList;\n  }\n  parseArrayLike(close, canBePattern, isTuple, refExpressionErrors) {\n    const node = super.parseArrayLike(close, canBePattern, isTuple, refExpressionErrors);\n    if (node.type === \"ArrayExpression\") {\n      this.tsCheckForInvalidTypeCasts(node.elements);\n    }\n    return node;\n  }\n  parseSubscript(base, startLoc, noCalls, state) {\n    if (!this.hasPrecedingLineBreak() && this.match(35)) {\n      this.state.canStartJSXElement = false;\n      this.next();\n      const nonNullExpression = this.startNodeAt(startLoc);\n      nonNullExpression.expression = base;\n      return this.finishNode(nonNullExpression, \"TSNonNullExpression\");\n    }\n    let isOptionalCall = false;\n    if (this.match(18) && this.lookaheadCharCode() === 60) {\n      if (noCalls) {\n        state.stop = true;\n        return base;\n      }\n      state.optionalChainMember = isOptionalCall = true;\n      this.next();\n    }\n    if (this.match(47) || this.match(51)) {\n      let missingParenErrorLoc;\n      const result = this.tsTryParseAndCatch(() => {\n        if (!noCalls && this.atPossibleAsyncArrow(base)) {\n          const asyncArrowFn = this.tsTryParseGenericAsyncArrowFunction(startLoc);\n          if (asyncArrowFn) {\n            return asyncArrowFn;\n          }\n        }\n        const typeArguments = this.tsParseTypeArgumentsInExpression();\n        if (!typeArguments) return;\n        if (isOptionalCall && !this.match(10)) {\n          missingParenErrorLoc = this.state.curPosition();\n          return;\n        }\n        if (tokenIsTemplate(this.state.type)) {\n          const result = super.parseTaggedTemplateExpression(base, startLoc, state);\n          result.typeParameters = typeArguments;\n          return result;\n        }\n        if (!noCalls && this.eat(10)) {\n          const node = this.startNodeAt(startLoc);\n          node.callee = base;\n          node.arguments = this.parseCallExpressionArguments(11, false);\n          this.tsCheckForInvalidTypeCasts(node.arguments);\n          node.typeParameters = typeArguments;\n          if (state.optionalChainMember) {\n            node.optional = isOptionalCall;\n          }\n          return this.finishCallExpression(node, state.optionalChainMember);\n        }\n        const tokenType = this.state.type;\n        if (tokenType === 48 || tokenType === 52 || tokenType !== 10 && tokenCanStartExpression(tokenType) && !this.hasPrecedingLineBreak()) {\n          return;\n        }\n        const node = this.startNodeAt(startLoc);\n        node.expression = base;\n        node.typeParameters = typeArguments;\n        return this.finishNode(node, \"TSInstantiationExpression\");\n      });\n      if (missingParenErrorLoc) {\n        this.unexpected(missingParenErrorLoc, 10);\n      }\n      if (result) {\n        if (result.type === \"TSInstantiationExpression\" && (this.match(16) || this.match(18) && this.lookaheadCharCode() !== 40)) {\n          this.raise(TSErrors.InvalidPropertyAccessAfterInstantiationExpression, {\n            at: this.state.startLoc\n          });\n        }\n        return result;\n      }\n    }\n    return super.parseSubscript(base, startLoc, noCalls, state);\n  }\n  parseNewCallee(node) {\n    var _callee$extra;\n    super.parseNewCallee(node);\n    const {\n      callee\n    } = node;\n    if (callee.type === \"TSInstantiationExpression\" && !((_callee$extra = callee.extra) != null && _callee$extra.parenthesized)) {\n      node.typeParameters = callee.typeParameters;\n      node.callee = callee.expression;\n    }\n  }\n  parseExprOp(left, leftStartLoc, minPrec) {\n    let isSatisfies;\n    if (tokenOperatorPrecedence(58) > minPrec && !this.hasPrecedingLineBreak() && (this.isContextual(93) || (isSatisfies = this.isContextual(118)))) {\n      const node = this.startNodeAt(leftStartLoc);\n      node.expression = left;\n      node.typeAnnotation = this.tsInType(() => {\n        this.next();\n        if (this.match(75)) {\n          if (isSatisfies) {\n            this.raise(Errors.UnexpectedKeyword, {\n              at: this.state.startLoc,\n              keyword: \"const\"\n            });\n          }\n          return this.tsParseTypeReference();\n        }\n        return this.tsParseType();\n      });\n      this.finishNode(node, isSatisfies ? \"TSSatisfiesExpression\" : \"TSAsExpression\");\n      this.reScan_lt_gt();\n      return this.parseExprOp(node, leftStartLoc, minPrec);\n    }\n    return super.parseExprOp(left, leftStartLoc, minPrec);\n  }\n  checkReservedWord(word, startLoc, checkKeywords, isBinding) {\n    if (!this.state.isAmbientContext) {\n      super.checkReservedWord(word, startLoc, checkKeywords, isBinding);\n    }\n  }\n  checkImportReflection(node) {\n    super.checkImportReflection(node);\n    if (node.module && node.importKind !== \"value\") {\n      this.raise(TSErrors.ImportReflectionHasImportType, {\n        at: node.specifiers[0].loc.start\n      });\n    }\n  }\n  checkDuplicateExports() {}\n  parseImport(node) {\n    node.importKind = \"value\";\n    if (tokenIsIdentifier(this.state.type) || this.match(55) || this.match(5)) {\n      let ahead = this.lookahead();\n      if (this.isContextual(128) && ahead.type !== 12 && ahead.type !== 97 && ahead.type !== 29) {\n        node.importKind = \"type\";\n        this.next();\n        ahead = this.lookahead();\n      }\n      if (tokenIsIdentifier(this.state.type) && ahead.type === 29) {\n        return this.tsParseImportEqualsDeclaration(node);\n      }\n    }\n    const importNode = super.parseImport(node);\n    if (importNode.importKind === \"type\" && importNode.specifiers.length > 1 && importNode.specifiers[0].type === \"ImportDefaultSpecifier\") {\n      this.raise(TSErrors.TypeImportCannotSpecifyDefaultAndNamed, {\n        at: importNode\n      });\n    }\n    return importNode;\n  }\n  parseExport(node, decorators) {\n    if (this.match(83)) {\n      this.next();\n      if (this.isContextual(128) && this.lookaheadCharCode() !== 61) {\n        node.importKind = \"type\";\n        this.next();\n      } else {\n        node.importKind = \"value\";\n      }\n      return this.tsParseImportEqualsDeclaration(node, true);\n    } else if (this.eat(29)) {\n      const assign = node;\n      assign.expression = super.parseExpression();\n      this.semicolon();\n      return this.finishNode(assign, \"TSExportAssignment\");\n    } else if (this.eatContextual(93)) {\n      const decl = node;\n      this.expectContextual(126);\n      decl.id = this.parseIdentifier();\n      this.semicolon();\n      return this.finishNode(decl, \"TSNamespaceExportDeclaration\");\n    } else {\n      node.exportKind = \"value\";\n      if (this.isContextual(128)) {\n        const ch = this.lookaheadCharCode();\n        if (ch === 123 || ch === 42) {\n          this.next();\n          node.exportKind = \"type\";\n        }\n      }\n      return super.parseExport(node, decorators);\n    }\n  }\n  isAbstractClass() {\n    return this.isContextual(122) && this.lookahead().type === 80;\n  }\n  parseExportDefaultExpression() {\n    if (this.isAbstractClass()) {\n      const cls = this.startNode();\n      this.next();\n      cls.abstract = true;\n      return this.parseClass(cls, true, true);\n    }\n    if (this.match(127)) {\n      const result = this.tsParseInterfaceDeclaration(this.startNode());\n      if (result) return result;\n    }\n    return super.parseExportDefaultExpression();\n  }\n  parseVarStatement(node, kind, allowMissingInitializer = false) {\n    const {\n      isAmbientContext\n    } = this.state;\n    const declaration = super.parseVarStatement(node, kind, allowMissingInitializer || isAmbientContext);\n    if (!isAmbientContext) return declaration;\n    for (const {\n      id,\n      init\n    } of declaration.declarations) {\n      if (!init) continue;\n      if (kind !== \"const\" || !!id.typeAnnotation) {\n        this.raise(TSErrors.InitializerNotAllowedInAmbientContext, {\n          at: init\n        });\n      } else if (!isValidAmbientConstInitializer(init, this.hasPlugin(\"estree\"))) {\n        this.raise(TSErrors.ConstInitiailizerMustBeStringOrNumericLiteralOrLiteralEnumReference, {\n          at: init\n        });\n      }\n    }\n    return declaration;\n  }\n  parseStatementContent(flags, decorators) {\n    if (this.match(75) && this.isLookaheadContextual(\"enum\")) {\n      const node = this.startNode();\n      this.expect(75);\n      return this.tsParseEnumDeclaration(node, {\n        const: true\n      });\n    }\n    if (this.isContextual(124)) {\n      return this.tsParseEnumDeclaration(this.startNode());\n    }\n    if (this.isContextual(127)) {\n      const result = this.tsParseInterfaceDeclaration(this.startNode());\n      if (result) return result;\n    }\n    return super.parseStatementContent(flags, decorators);\n  }\n  parseAccessModifier() {\n    return this.tsParseModifier([\"public\", \"protected\", \"private\"]);\n  }\n  tsHasSomeModifiers(member, modifiers) {\n    return modifiers.some(modifier => {\n      if (tsIsAccessModifier(modifier)) {\n        return member.accessibility === modifier;\n      }\n      return !!member[modifier];\n    });\n  }\n  tsIsStartOfStaticBlocks() {\n    return this.isContextual(104) && this.lookaheadCharCode() === 123;\n  }\n  parseClassMember(classBody, member, state) {\n    const modifiers = [\"declare\", \"private\", \"public\", \"protected\", \"override\", \"abstract\", \"readonly\", \"static\"];\n    this.tsParseModifiers({\n      allowedModifiers: modifiers,\n      disallowedModifiers: [\"in\", \"out\"],\n      stopOnStartOfClassStaticBlock: true,\n      errorTemplate: TSErrors.InvalidModifierOnTypeParameterPositions\n    }, member);\n    const callParseClassMemberWithIsStatic = () => {\n      if (this.tsIsStartOfStaticBlocks()) {\n        this.next();\n        this.next();\n        if (this.tsHasSomeModifiers(member, modifiers)) {\n          this.raise(TSErrors.StaticBlockCannotHaveModifier, {\n            at: this.state.curPosition()\n          });\n        }\n        super.parseClassStaticBlock(classBody, member);\n      } else {\n        this.parseClassMemberWithIsStatic(classBody, member, state, !!member.static);\n      }\n    };\n    if (member.declare) {\n      this.tsInAmbientContext(callParseClassMemberWithIsStatic);\n    } else {\n      callParseClassMemberWithIsStatic();\n    }\n  }\n  parseClassMemberWithIsStatic(classBody, member, state, isStatic) {\n    const idx = this.tsTryParseIndexSignature(member);\n    if (idx) {\n      classBody.body.push(idx);\n      if (member.abstract) {\n        this.raise(TSErrors.IndexSignatureHasAbstract, {\n          at: member\n        });\n      }\n      if (member.accessibility) {\n        this.raise(TSErrors.IndexSignatureHasAccessibility, {\n          at: member,\n          modifier: member.accessibility\n        });\n      }\n      if (member.declare) {\n        this.raise(TSErrors.IndexSignatureHasDeclare, {\n          at: member\n        });\n      }\n      if (member.override) {\n        this.raise(TSErrors.IndexSignatureHasOverride, {\n          at: member\n        });\n      }\n      return;\n    }\n    if (!this.state.inAbstractClass && member.abstract) {\n      this.raise(TSErrors.NonAbstractClassHasAbstractMethod, {\n        at: member\n      });\n    }\n    if (member.override) {\n      if (!state.hadSuperClass) {\n        this.raise(TSErrors.OverrideNotInSubClass, {\n          at: member\n        });\n      }\n    }\n    super.parseClassMemberWithIsStatic(classBody, member, state, isStatic);\n  }\n  parsePostMemberNameModifiers(methodOrProp) {\n    const optional = this.eat(17);\n    if (optional) methodOrProp.optional = true;\n    if (methodOrProp.readonly && this.match(10)) {\n      this.raise(TSErrors.ClassMethodHasReadonly, {\n        at: methodOrProp\n      });\n    }\n    if (methodOrProp.declare && this.match(10)) {\n      this.raise(TSErrors.ClassMethodHasDeclare, {\n        at: methodOrProp\n      });\n    }\n  }\n  parseExpressionStatement(node, expr, decorators) {\n    const decl = expr.type === \"Identifier\" ? this.tsParseExpressionStatement(node, expr, decorators) : undefined;\n    return decl || super.parseExpressionStatement(node, expr, decorators);\n  }\n  shouldParseExportDeclaration() {\n    if (this.tsIsDeclarationStart()) return true;\n    return super.shouldParseExportDeclaration();\n  }\n  parseConditional(expr, startLoc, refExpressionErrors) {\n    if (!this.state.maybeInArrowParameters || !this.match(17)) {\n      return super.parseConditional(expr, startLoc, refExpressionErrors);\n    }\n    const result = this.tryParse(() => super.parseConditional(expr, startLoc));\n    if (!result.node) {\n      if (result.error) {\n        super.setOptionalParametersError(refExpressionErrors, result.error);\n      }\n      return expr;\n    }\n    if (result.error) this.state = result.failState;\n    return result.node;\n  }\n  parseParenItem(node, startLoc) {\n    node = super.parseParenItem(node, startLoc);\n    if (this.eat(17)) {\n      node.optional = true;\n      this.resetEndLocation(node);\n    }\n    if (this.match(14)) {\n      const typeCastNode = this.startNodeAt(startLoc);\n      typeCastNode.expression = node;\n      typeCastNode.typeAnnotation = this.tsParseTypeAnnotation();\n      return this.finishNode(typeCastNode, \"TSTypeCastExpression\");\n    }\n    return node;\n  }\n  parseExportDeclaration(node) {\n    if (!this.state.isAmbientContext && this.isContextual(123)) {\n      return this.tsInAmbientContext(() => this.parseExportDeclaration(node));\n    }\n    const startLoc = this.state.startLoc;\n    const isDeclare = this.eatContextual(123);\n    if (isDeclare && (this.isContextual(123) || !this.shouldParseExportDeclaration())) {\n      throw this.raise(TSErrors.ExpectedAmbientAfterExportDeclare, {\n        at: this.state.startLoc\n      });\n    }\n    const isIdentifier = tokenIsIdentifier(this.state.type);\n    const declaration = isIdentifier && this.tsTryParseExportDeclaration() || super.parseExportDeclaration(node);\n    if (!declaration) return null;\n    if (declaration.type === \"TSInterfaceDeclaration\" || declaration.type === \"TSTypeAliasDeclaration\" || isDeclare) {\n      node.exportKind = \"type\";\n    }\n    if (isDeclare) {\n      this.resetStartLocation(declaration, startLoc);\n      declaration.declare = true;\n    }\n    return declaration;\n  }\n  parseClassId(node, isStatement, optionalId, bindingType) {\n    if ((!isStatement || optionalId) && this.isContextual(111)) {\n      return;\n    }\n    super.parseClassId(node, isStatement, optionalId, node.declare ? BIND_TS_AMBIENT : BIND_CLASS);\n    const typeParameters = this.tsTryParseTypeParameters(this.tsParseInOutConstModifiers);\n    if (typeParameters) node.typeParameters = typeParameters;\n  }\n  parseClassPropertyAnnotation(node) {\n    if (!node.optional) {\n      if (this.eat(35)) {\n        node.definite = true;\n      } else if (this.eat(17)) {\n        node.optional = true;\n      }\n    }\n    const type = this.tsTryParseTypeAnnotation();\n    if (type) node.typeAnnotation = type;\n  }\n  parseClassProperty(node) {\n    this.parseClassPropertyAnnotation(node);\n    if (this.state.isAmbientContext && !(node.readonly && !node.typeAnnotation) && this.match(29)) {\n      this.raise(TSErrors.DeclareClassFieldHasInitializer, {\n        at: this.state.startLoc\n      });\n    }\n    if (node.abstract && this.match(29)) {\n      const {\n        key\n      } = node;\n      this.raise(TSErrors.AbstractPropertyHasInitializer, {\n        at: this.state.startLoc,\n        propertyName: key.type === \"Identifier\" && !node.computed ? key.name : `[${this.input.slice(key.start, key.end)}]`\n      });\n    }\n    return super.parseClassProperty(node);\n  }\n  parseClassPrivateProperty(node) {\n    if (node.abstract) {\n      this.raise(TSErrors.PrivateElementHasAbstract, {\n        at: node\n      });\n    }\n    if (node.accessibility) {\n      this.raise(TSErrors.PrivateElementHasAccessibility, {\n        at: node,\n        modifier: node.accessibility\n      });\n    }\n    this.parseClassPropertyAnnotation(node);\n    return super.parseClassPrivateProperty(node);\n  }\n  parseClassAccessorProperty(node) {\n    this.parseClassPropertyAnnotation(node);\n    if (node.optional) {\n      this.raise(TSErrors.AccessorCannotBeOptional, {\n        at: node\n      });\n    }\n    return super.parseClassAccessorProperty(node);\n  }\n  pushClassMethod(classBody, method, isGenerator, isAsync, isConstructor, allowsDirectSuper) {\n    const typeParameters = this.tsTryParseTypeParameters(this.tsParseConstModifier);\n    if (typeParameters && isConstructor) {\n      this.raise(TSErrors.ConstructorHasTypeParameters, {\n        at: typeParameters\n      });\n    }\n    const {\n      declare = false,\n      kind\n    } = method;\n    if (declare && (kind === \"get\" || kind === \"set\")) {\n      this.raise(TSErrors.DeclareAccessor, {\n        at: method,\n        kind\n      });\n    }\n    if (typeParameters) method.typeParameters = typeParameters;\n    super.pushClassMethod(classBody, method, isGenerator, isAsync, isConstructor, allowsDirectSuper);\n  }\n  pushClassPrivateMethod(classBody, method, isGenerator, isAsync) {\n    const typeParameters = this.tsTryParseTypeParameters(this.tsParseConstModifier);\n    if (typeParameters) method.typeParameters = typeParameters;\n    super.pushClassPrivateMethod(classBody, method, isGenerator, isAsync);\n  }\n  declareClassPrivateMethodInScope(node, kind) {\n    if (node.type === \"TSDeclareMethod\") return;\n    if (node.type === \"MethodDefinition\" && !node.value.body) return;\n    super.declareClassPrivateMethodInScope(node, kind);\n  }\n  parseClassSuper(node) {\n    super.parseClassSuper(node);\n    if (node.superClass && (this.match(47) || this.match(51))) {\n      node.superTypeParameters = this.tsParseTypeArgumentsInExpression();\n    }\n    if (this.eatContextual(111)) {\n      node.implements = this.tsParseHeritageClause(\"implements\");\n    }\n  }\n  parseObjPropValue(prop, startLoc, isGenerator, isAsync, isPattern, isAccessor, refExpressionErrors) {\n    const typeParameters = this.tsTryParseTypeParameters(this.tsParseConstModifier);\n    if (typeParameters) prop.typeParameters = typeParameters;\n    return super.parseObjPropValue(prop, startLoc, isGenerator, isAsync, isPattern, isAccessor, refExpressionErrors);\n  }\n  parseFunctionParams(node, isConstructor) {\n    const typeParameters = this.tsTryParseTypeParameters(this.tsParseConstModifier);\n    if (typeParameters) node.typeParameters = typeParameters;\n    super.parseFunctionParams(node, isConstructor);\n  }\n  parseVarId(decl, kind) {\n    super.parseVarId(decl, kind);\n    if (decl.id.type === \"Identifier\" && !this.hasPrecedingLineBreak() && this.eat(35)) {\n      decl.definite = true;\n    }\n    const type = this.tsTryParseTypeAnnotation();\n    if (type) {\n      decl.id.typeAnnotation = type;\n      this.resetEndLocation(decl.id);\n    }\n  }\n  parseAsyncArrowFromCallExpression(node, call) {\n    if (this.match(14)) {\n      node.returnType = this.tsParseTypeAnnotation();\n    }\n    return super.parseAsyncArrowFromCallExpression(node, call);\n  }\n  parseMaybeAssign(refExpressionErrors, afterLeftParse) {\n    var _jsx, _jsx2, _typeCast, _jsx3, _typeCast2, _jsx4, _typeCast3;\n    let state;\n    let jsx;\n    let typeCast;\n    if (this.hasPlugin(\"jsx\") && (this.match(140) || this.match(47))) {\n      state = this.state.clone();\n      jsx = this.tryParse(() => super.parseMaybeAssign(refExpressionErrors, afterLeftParse), state);\n      if (!jsx.error) return jsx.node;\n      const {\n        context\n      } = this.state;\n      const currentContext = context[context.length - 1];\n      if (currentContext === types.j_oTag || currentContext === types.j_expr) {\n        context.pop();\n      }\n    }\n    if (!((_jsx = jsx) != null && _jsx.error) && !this.match(47)) {\n      return super.parseMaybeAssign(refExpressionErrors, afterLeftParse);\n    }\n    if (!state || state === this.state) state = this.state.clone();\n    let typeParameters;\n    const arrow = this.tryParse(abort => {\n      var _expr$extra, _typeParameters;\n      typeParameters = this.tsParseTypeParameters(this.tsParseConstModifier);\n      const expr = super.parseMaybeAssign(refExpressionErrors, afterLeftParse);\n      if (expr.type !== \"ArrowFunctionExpression\" || (_expr$extra = expr.extra) != null && _expr$extra.parenthesized) {\n        abort();\n      }\n      if (((_typeParameters = typeParameters) == null ? void 0 : _typeParameters.params.length) !== 0) {\n        this.resetStartLocationFromNode(expr, typeParameters);\n      }\n      expr.typeParameters = typeParameters;\n      return expr;\n    }, state);\n    if (!arrow.error && !arrow.aborted) {\n      if (typeParameters) this.reportReservedArrowTypeParam(typeParameters);\n      return arrow.node;\n    }\n    if (!jsx) {\n      assert(!this.hasPlugin(\"jsx\"));\n      typeCast = this.tryParse(() => super.parseMaybeAssign(refExpressionErrors, afterLeftParse), state);\n      if (!typeCast.error) return typeCast.node;\n    }\n    if ((_jsx2 = jsx) != null && _jsx2.node) {\n      this.state = jsx.failState;\n      return jsx.node;\n    }\n    if (arrow.node) {\n      this.state = arrow.failState;\n      if (typeParameters) this.reportReservedArrowTypeParam(typeParameters);\n      return arrow.node;\n    }\n    if ((_typeCast = typeCast) != null && _typeCast.node) {\n      this.state = typeCast.failState;\n      return typeCast.node;\n    }\n    if ((_jsx3 = jsx) != null && _jsx3.thrown) throw jsx.error;\n    if (arrow.thrown) throw arrow.error;\n    if ((_typeCast2 = typeCast) != null && _typeCast2.thrown) throw typeCast.error;\n    throw ((_jsx4 = jsx) == null ? void 0 : _jsx4.error) || arrow.error || ((_typeCast3 = typeCast) == null ? void 0 : _typeCast3.error);\n  }\n  reportReservedArrowTypeParam(node) {\n    var _node$extra;\n    if (node.params.length === 1 && !node.params[0].constraint && !((_node$extra = node.extra) != null && _node$extra.trailingComma) && this.getPluginOption(\"typescript\", \"disallowAmbiguousJSXLike\")) {\n      this.raise(TSErrors.ReservedArrowTypeParam, {\n        at: node\n      });\n    }\n  }\n  parseMaybeUnary(refExpressionErrors, sawUnary) {\n    if (!this.hasPlugin(\"jsx\") && this.match(47)) {\n      return this.tsParseTypeAssertion();\n    } else {\n      return super.parseMaybeUnary(refExpressionErrors, sawUnary);\n    }\n  }\n  parseArrow(node) {\n    if (this.match(14)) {\n      const result = this.tryParse(abort => {\n        const returnType = this.tsParseTypeOrTypePredicateAnnotation(14);\n        if (this.canInsertSemicolon() || !this.match(19)) abort();\n        return returnType;\n      });\n      if (result.aborted) return;\n      if (!result.thrown) {\n        if (result.error) this.state = result.failState;\n        node.returnType = result.node;\n      }\n    }\n    return super.parseArrow(node);\n  }\n  parseAssignableListItemTypes(param, flags) {\n    if (!(flags & 2)) return param;\n    if (this.eat(17)) {\n      param.optional = true;\n    }\n    const type = this.tsTryParseTypeAnnotation();\n    if (type) param.typeAnnotation = type;\n    this.resetEndLocation(param);\n    return param;\n  }\n  isAssignable(node, isBinding) {\n    switch (node.type) {\n      case \"TSTypeCastExpression\":\n        return this.isAssignable(node.expression, isBinding);\n      case \"TSParameterProperty\":\n        return true;\n      default:\n        return super.isAssignable(node, isBinding);\n    }\n  }\n  toAssignable(node, isLHS = false) {\n    switch (node.type) {\n      case \"ParenthesizedExpression\":\n        this.toAssignableParenthesizedExpression(node, isLHS);\n        break;\n      case \"TSAsExpression\":\n      case \"TSSatisfiesExpression\":\n      case \"TSNonNullExpression\":\n      case \"TSTypeAssertion\":\n        if (isLHS) {\n          this.expressionScope.recordArrowParameterBindingError(TSErrors.UnexpectedTypeCastInParameter, {\n            at: node\n          });\n        } else {\n          this.raise(TSErrors.UnexpectedTypeCastInParameter, {\n            at: node\n          });\n        }\n        this.toAssignable(node.expression, isLHS);\n        break;\n      case \"AssignmentExpression\":\n        if (!isLHS && node.left.type === \"TSTypeCastExpression\") {\n          node.left = this.typeCastToParameter(node.left);\n        }\n      default:\n        super.toAssignable(node, isLHS);\n    }\n  }\n  toAssignableParenthesizedExpression(node, isLHS) {\n    switch (node.expression.type) {\n      case \"TSAsExpression\":\n      case \"TSSatisfiesExpression\":\n      case \"TSNonNullExpression\":\n      case \"TSTypeAssertion\":\n      case \"ParenthesizedExpression\":\n        this.toAssignable(node.expression, isLHS);\n        break;\n      default:\n        super.toAssignable(node, isLHS);\n    }\n  }\n  checkToRestConversion(node, allowPattern) {\n    switch (node.type) {\n      case \"TSAsExpression\":\n      case \"TSSatisfiesExpression\":\n      case \"TSTypeAssertion\":\n      case \"TSNonNullExpression\":\n        this.checkToRestConversion(node.expression, false);\n        break;\n      default:\n        super.checkToRestConversion(node, allowPattern);\n    }\n  }\n  isValidLVal(type, isUnparenthesizedInAssign, binding) {\n    return getOwn({\n      TSTypeCastExpression: true,\n      TSParameterProperty: \"parameter\",\n      TSNonNullExpression: \"expression\",\n      TSAsExpression: (binding !== BIND_NONE || !isUnparenthesizedInAssign) && [\"expression\", true],\n      TSSatisfiesExpression: (binding !== BIND_NONE || !isUnparenthesizedInAssign) && [\"expression\", true],\n      TSTypeAssertion: (binding !== BIND_NONE || !isUnparenthesizedInAssign) && [\"expression\", true]\n    }, type) || super.isValidLVal(type, isUnparenthesizedInAssign, binding);\n  }\n  parseBindingAtom() {\n    switch (this.state.type) {\n      case 78:\n        return this.parseIdentifier(true);\n      default:\n        return super.parseBindingAtom();\n    }\n  }\n  parseMaybeDecoratorArguments(expr) {\n    if (this.match(47) || this.match(51)) {\n      const typeArguments = this.tsParseTypeArgumentsInExpression();\n      if (this.match(10)) {\n        const call = super.parseMaybeDecoratorArguments(expr);\n        call.typeParameters = typeArguments;\n        return call;\n      }\n      this.unexpected(null, 10);\n    }\n    return super.parseMaybeDecoratorArguments(expr);\n  }\n  checkCommaAfterRest(close) {\n    if (this.state.isAmbientContext && this.match(12) && this.lookaheadCharCode() === close) {\n      this.next();\n      return false;\n    } else {\n      return super.checkCommaAfterRest(close);\n    }\n  }\n  isClassMethod() {\n    return this.match(47) || super.isClassMethod();\n  }\n  isClassProperty() {\n    return this.match(35) || this.match(14) || super.isClassProperty();\n  }\n  parseMaybeDefault(startLoc, left) {\n    const node = super.parseMaybeDefault(startLoc, left);\n    if (node.type === \"AssignmentPattern\" && node.typeAnnotation && node.right.start < node.typeAnnotation.start) {\n      this.raise(TSErrors.TypeAnnotationAfterAssign, {\n        at: node.typeAnnotation\n      });\n    }\n    return node;\n  }\n  getTokenFromCode(code) {\n    if (this.state.inType) {\n      if (code === 62) {\n        this.finishOp(48, 1);\n        return;\n      }\n      if (code === 60) {\n        this.finishOp(47, 1);\n        return;\n      }\n    }\n    super.getTokenFromCode(code);\n  }\n  reScan_lt_gt() {\n    const {\n      type\n    } = this.state;\n    if (type === 47) {\n      this.state.pos -= 1;\n      this.readToken_lt();\n    } else if (type === 48) {\n      this.state.pos -= 1;\n      this.readToken_gt();\n    }\n  }\n  reScan_lt() {\n    const {\n      type\n    } = this.state;\n    if (type === 51) {\n      this.state.pos -= 2;\n      this.finishOp(47, 1);\n      return 47;\n    }\n    return type;\n  }\n  toAssignableList(exprList, trailingCommaLoc, isLHS) {\n    for (let i = 0; i < exprList.length; i++) {\n      const expr = exprList[i];\n      if ((expr == null ? void 0 : expr.type) === \"TSTypeCastExpression\") {\n        exprList[i] = this.typeCastToParameter(expr);\n      }\n    }\n    super.toAssignableList(exprList, trailingCommaLoc, isLHS);\n  }\n  typeCastToParameter(node) {\n    node.expression.typeAnnotation = node.typeAnnotation;\n    this.resetEndLocation(node.expression, node.typeAnnotation.loc.end);\n    return node.expression;\n  }\n  shouldParseArrow(params) {\n    if (this.match(14)) {\n      return params.every(expr => this.isAssignable(expr, true));\n    }\n    return super.shouldParseArrow(params);\n  }\n  shouldParseAsyncArrow() {\n    return this.match(14) || super.shouldParseAsyncArrow();\n  }\n  canHaveLeadingDecorator() {\n    return super.canHaveLeadingDecorator() || this.isAbstractClass();\n  }\n  jsxParseOpeningElementAfterName(node) {\n    if (this.match(47) || this.match(51)) {\n      const typeArguments = this.tsTryParseAndCatch(() => this.tsParseTypeArgumentsInExpression());\n      if (typeArguments) node.typeParameters = typeArguments;\n    }\n    return super.jsxParseOpeningElementAfterName(node);\n  }\n  getGetterSetterExpectedParamCount(method) {\n    const baseCount = super.getGetterSetterExpectedParamCount(method);\n    const params = this.getObjectOrClassMethodParams(method);\n    const firstParam = params[0];\n    const hasContextParam = firstParam && this.isThisParam(firstParam);\n    return hasContextParam ? baseCount + 1 : baseCount;\n  }\n  parseCatchClauseParam() {\n    const param = super.parseCatchClauseParam();\n    const type = this.tsTryParseTypeAnnotation();\n    if (type) {\n      param.typeAnnotation = type;\n      this.resetEndLocation(param);\n    }\n    return param;\n  }\n  tsInAmbientContext(cb) {\n    const oldIsAmbientContext = this.state.isAmbientContext;\n    this.state.isAmbientContext = true;\n    try {\n      return cb();\n    } finally {\n      this.state.isAmbientContext = oldIsAmbientContext;\n    }\n  }\n  parseClass(node, isStatement, optionalId) {\n    const oldInAbstractClass = this.state.inAbstractClass;\n    this.state.inAbstractClass = !!node.abstract;\n    try {\n      return super.parseClass(node, isStatement, optionalId);\n    } finally {\n      this.state.inAbstractClass = oldInAbstractClass;\n    }\n  }\n  tsParseAbstractDeclaration(node, decorators) {\n    if (this.match(80)) {\n      node.abstract = true;\n      return this.maybeTakeDecorators(decorators, this.parseClass(node, true, false));\n    } else if (this.isContextual(127)) {\n      if (!this.hasFollowingLineBreak()) {\n        node.abstract = true;\n        this.raise(TSErrors.NonClassMethodPropertyHasAbstractModifer, {\n          at: node\n        });\n        return this.tsParseInterfaceDeclaration(node);\n      }\n    } else {\n      this.unexpected(null, 80);\n    }\n  }\n  parseMethod(node, isGenerator, isAsync, isConstructor, allowDirectSuper, type, inClassScope) {\n    const method = super.parseMethod(node, isGenerator, isAsync, isConstructor, allowDirectSuper, type, inClassScope);\n    if (method.abstract) {\n      const hasBody = this.hasPlugin(\"estree\") ? !!method.value.body : !!method.body;\n      if (hasBody) {\n        const {\n          key\n        } = method;\n        this.raise(TSErrors.AbstractMethodHasImplementation, {\n          at: method,\n          methodName: key.type === \"Identifier\" && !method.computed ? key.name : `[${this.input.slice(key.start, key.end)}]`\n        });\n      }\n    }\n    return method;\n  }\n  tsParseTypeParameterName() {\n    const typeName = this.parseIdentifier();\n    return typeName.name;\n  }\n  shouldParseAsAmbientContext() {\n    return !!this.getPluginOption(\"typescript\", \"dts\");\n  }\n  parse() {\n    if (this.shouldParseAsAmbientContext()) {\n      this.state.isAmbientContext = true;\n    }\n    return super.parse();\n  }\n  getExpression() {\n    if (this.shouldParseAsAmbientContext()) {\n      this.state.isAmbientContext = true;\n    }\n    return super.getExpression();\n  }\n  parseExportSpecifier(node, isString, isInTypeExport, isMaybeTypeOnly) {\n    if (!isString && isMaybeTypeOnly) {\n      this.parseTypeOnlyImportExportSpecifier(node, false, isInTypeExport);\n      return this.finishNode(node, \"ExportSpecifier\");\n    }\n    node.exportKind = \"value\";\n    return super.parseExportSpecifier(node, isString, isInTypeExport, isMaybeTypeOnly);\n  }\n  parseImportSpecifier(specifier, importedIsString, isInTypeOnlyImport, isMaybeTypeOnly, bindingType) {\n    if (!importedIsString && isMaybeTypeOnly) {\n      this.parseTypeOnlyImportExportSpecifier(specifier, true, isInTypeOnlyImport);\n      return this.finishNode(specifier, \"ImportSpecifier\");\n    }\n    specifier.importKind = \"value\";\n    return super.parseImportSpecifier(specifier, importedIsString, isInTypeOnlyImport, isMaybeTypeOnly, isInTypeOnlyImport ? BIND_TS_TYPE_IMPORT : BIND_FLAGS_TS_IMPORT);\n  }\n  parseTypeOnlyImportExportSpecifier(node, isImport, isInTypeOnlyImportExport) {\n    const leftOfAsKey = isImport ? \"imported\" : \"local\";\n    const rightOfAsKey = isImport ? \"local\" : \"exported\";\n    let leftOfAs = node[leftOfAsKey];\n    let rightOfAs;\n    let hasTypeSpecifier = false;\n    let canParseAsKeyword = true;\n    const loc = leftOfAs.loc.start;\n    if (this.isContextual(93)) {\n      const firstAs = this.parseIdentifier();\n      if (this.isContextual(93)) {\n        const secondAs = this.parseIdentifier();\n        if (tokenIsKeywordOrIdentifier(this.state.type)) {\n          hasTypeSpecifier = true;\n          leftOfAs = firstAs;\n          rightOfAs = isImport ? this.parseIdentifier() : this.parseModuleExportName();\n          canParseAsKeyword = false;\n        } else {\n          rightOfAs = secondAs;\n          canParseAsKeyword = false;\n        }\n      } else if (tokenIsKeywordOrIdentifier(this.state.type)) {\n        canParseAsKeyword = false;\n        rightOfAs = isImport ? this.parseIdentifier() : this.parseModuleExportName();\n      } else {\n        hasTypeSpecifier = true;\n        leftOfAs = firstAs;\n      }\n    } else if (tokenIsKeywordOrIdentifier(this.state.type)) {\n      hasTypeSpecifier = true;\n      if (isImport) {\n        leftOfAs = this.parseIdentifier(true);\n        if (!this.isContextual(93)) {\n          this.checkReservedWord(leftOfAs.name, leftOfAs.loc.start, true, true);\n        }\n      } else {\n        leftOfAs = this.parseModuleExportName();\n      }\n    }\n    if (hasTypeSpecifier && isInTypeOnlyImportExport) {\n      this.raise(isImport ? TSErrors.TypeModifierIsUsedInTypeImports : TSErrors.TypeModifierIsUsedInTypeExports, {\n        at: loc\n      });\n    }\n    node[leftOfAsKey] = leftOfAs;\n    node[rightOfAsKey] = rightOfAs;\n    const kindKey = isImport ? \"importKind\" : \"exportKind\";\n    node[kindKey] = hasTypeSpecifier ? \"type\" : \"value\";\n    if (canParseAsKeyword && this.eatContextual(93)) {\n      node[rightOfAsKey] = isImport ? this.parseIdentifier() : this.parseModuleExportName();\n    }\n    if (!node[rightOfAsKey]) {\n      node[rightOfAsKey] = cloneIdentifier(node[leftOfAsKey]);\n    }\n    if (isImport) {\n      this.checkIdentifier(node[rightOfAsKey], hasTypeSpecifier ? BIND_TS_TYPE_IMPORT : BIND_FLAGS_TS_IMPORT);\n    }\n  }\n};\nfunction isPossiblyLiteralEnum(expression) {\n  if (expression.type !== \"MemberExpression\") return false;\n  const {\n    computed,\n    property\n  } = expression;\n  if (computed && property.type !== \"StringLiteral\" && (property.type !== \"TemplateLiteral\" || property.expressions.length > 0)) {\n    return false;\n  }\n  return isUncomputedMemberExpressionChain(expression.object);\n}\nfunction isValidAmbientConstInitializer(expression, estree) {\n  var _expression$extra;\n  const {\n    type\n  } = expression;\n  if ((_expression$extra = expression.extra) != null && _expression$extra.parenthesized) {\n    return false;\n  }\n  if (estree) {\n    if (type === \"Literal\") {\n      const {\n        value\n      } = expression;\n      if (typeof value === \"string\" || typeof value === \"boolean\") {\n        return true;\n      }\n    }\n  } else {\n    if (type === \"StringLiteral\" || type === \"BooleanLiteral\") {\n      return true;\n    }\n  }\n  if (isNumber(expression, estree) || isNegativeNumber(expression, estree)) {\n    return true;\n  }\n  if (type === \"TemplateLiteral\" && expression.expressions.length === 0) {\n    return true;\n  }\n  if (isPossiblyLiteralEnum(expression)) {\n    return true;\n  }\n  return false;\n}\nfunction isNumber(expression, estree) {\n  if (estree) {\n    return expression.type === \"Literal\" && (typeof expression.value === \"number\" || \"bigint\" in expression);\n  } else {\n    return expression.type === \"NumericLiteral\" || expression.type === \"BigIntLiteral\";\n  }\n}\nfunction isNegativeNumber(expression, estree) {\n  if (expression.type === \"UnaryExpression\") {\n    const {\n      operator,\n      argument\n    } = expression;\n    if (operator === \"-\" && isNumber(argument, estree)) {\n      return true;\n    }\n  }\n  return false;\n}\nfunction isUncomputedMemberExpressionChain(expression) {\n  if (expression.type === \"Identifier\") return true;\n  if (expression.type !== \"MemberExpression\") return false;\n  if (expression.computed) return false;\n  return isUncomputedMemberExpressionChain(expression.object);\n}\nconst PlaceholderErrors = ParseErrorEnum`placeholders`({\n  ClassNameIsRequired: \"A class name is required.\",\n  UnexpectedSpace: \"Unexpected space in placeholder.\"\n});\nvar placeholders = superClass => class PlaceholdersParserMixin extends superClass {\n  parsePlaceholder(expectedNode) {\n    if (this.match(142)) {\n      const node = this.startNode();\n      this.next();\n      this.assertNoSpace();\n      node.name = super.parseIdentifier(true);\n      this.assertNoSpace();\n      this.expect(142);\n      return this.finishPlaceholder(node, expectedNode);\n    }\n  }\n  finishPlaceholder(node, expectedNode) {\n    const isFinished = !!(node.expectedNode && node.type === \"Placeholder\");\n    node.expectedNode = expectedNode;\n    return isFinished ? node : this.finishNode(node, \"Placeholder\");\n  }\n  getTokenFromCode(code) {\n    if (code === 37 && this.input.charCodeAt(this.state.pos + 1) === 37) {\n      this.finishOp(142, 2);\n    } else {\n      super.getTokenFromCode(code);\n    }\n  }\n  parseExprAtom(refExpressionErrors) {\n    return this.parsePlaceholder(\"Expression\") || super.parseExprAtom(refExpressionErrors);\n  }\n  parseIdentifier(liberal) {\n    return this.parsePlaceholder(\"Identifier\") || super.parseIdentifier(liberal);\n  }\n  checkReservedWord(word, startLoc, checkKeywords, isBinding) {\n    if (word !== undefined) {\n      super.checkReservedWord(word, startLoc, checkKeywords, isBinding);\n    }\n  }\n  parseBindingAtom() {\n    return this.parsePlaceholder(\"Pattern\") || super.parseBindingAtom();\n  }\n  isValidLVal(type, isParenthesized, binding) {\n    return type === \"Placeholder\" || super.isValidLVal(type, isParenthesized, binding);\n  }\n  toAssignable(node, isLHS) {\n    if (node && node.type === \"Placeholder\" && node.expectedNode === \"Expression\") {\n      node.expectedNode = \"Pattern\";\n    } else {\n      super.toAssignable(node, isLHS);\n    }\n  }\n  chStartsBindingIdentifier(ch, pos) {\n    if (super.chStartsBindingIdentifier(ch, pos)) {\n      return true;\n    }\n    const nextToken = this.lookahead();\n    if (nextToken.type === 142) {\n      return true;\n    }\n    return false;\n  }\n  verifyBreakContinue(node, isBreak) {\n    if (node.label && node.label.type === \"Placeholder\") return;\n    super.verifyBreakContinue(node, isBreak);\n  }\n  parseExpressionStatement(node, expr) {\n    if (expr.type !== \"Placeholder\" || expr.extra && expr.extra.parenthesized) {\n      return super.parseExpressionStatement(node, expr);\n    }\n    if (this.match(14)) {\n      const stmt = node;\n      stmt.label = this.finishPlaceholder(expr, \"Identifier\");\n      this.next();\n      stmt.body = super.parseStatementOrSloppyAnnexBFunctionDeclaration();\n      return this.finishNode(stmt, \"LabeledStatement\");\n    }\n    this.semicolon();\n    node.name = expr.name;\n    return this.finishPlaceholder(node, \"Statement\");\n  }\n  parseBlock(allowDirectives, createNewLexicalScope, afterBlockParse) {\n    return this.parsePlaceholder(\"BlockStatement\") || super.parseBlock(allowDirectives, createNewLexicalScope, afterBlockParse);\n  }\n  parseFunctionId(requireId) {\n    return this.parsePlaceholder(\"Identifier\") || super.parseFunctionId(requireId);\n  }\n  parseClass(node, isStatement, optionalId) {\n    const type = isStatement ? \"ClassDeclaration\" : \"ClassExpression\";\n    this.next();\n    const oldStrict = this.state.strict;\n    const placeholder = this.parsePlaceholder(\"Identifier\");\n    if (placeholder) {\n      if (this.match(81) || this.match(142) || this.match(5)) {\n        node.id = placeholder;\n      } else if (optionalId || !isStatement) {\n        node.id = null;\n        node.body = this.finishPlaceholder(placeholder, \"ClassBody\");\n        return this.finishNode(node, type);\n      } else {\n        throw this.raise(PlaceholderErrors.ClassNameIsRequired, {\n          at: this.state.startLoc\n        });\n      }\n    } else {\n      this.parseClassId(node, isStatement, optionalId);\n    }\n    super.parseClassSuper(node);\n    node.body = this.parsePlaceholder(\"ClassBody\") || super.parseClassBody(!!node.superClass, oldStrict);\n    return this.finishNode(node, type);\n  }\n  parseExport(node, decorators) {\n    const placeholder = this.parsePlaceholder(\"Identifier\");\n    if (!placeholder) return super.parseExport(node, decorators);\n    if (!this.isContextual(97) && !this.match(12)) {\n      node.specifiers = [];\n      node.source = null;\n      node.declaration = this.finishPlaceholder(placeholder, \"Declaration\");\n      return this.finishNode(node, \"ExportNamedDeclaration\");\n    }\n    this.expectPlugin(\"exportDefaultFrom\");\n    const specifier = this.startNode();\n    specifier.exported = placeholder;\n    node.specifiers = [this.finishNode(specifier, \"ExportDefaultSpecifier\")];\n    return super.parseExport(node, decorators);\n  }\n  isExportDefaultSpecifier() {\n    if (this.match(65)) {\n      const next = this.nextTokenStart();\n      if (this.isUnparsedContextual(next, \"from\")) {\n        if (this.input.startsWith(tokenLabelName(142), this.nextTokenStartSince(next + 4))) {\n          return true;\n        }\n      }\n    }\n    return super.isExportDefaultSpecifier();\n  }\n  maybeParseExportDefaultSpecifier(node) {\n    if (node.specifiers && node.specifiers.length > 0) {\n      return true;\n    }\n    return super.maybeParseExportDefaultSpecifier(node);\n  }\n  checkExport(node) {\n    const {\n      specifiers\n    } = node;\n    if (specifiers != null && specifiers.length) {\n      node.specifiers = specifiers.filter(node => node.exported.type === \"Placeholder\");\n    }\n    super.checkExport(node);\n    node.specifiers = specifiers;\n  }\n  parseImport(node) {\n    const placeholder = this.parsePlaceholder(\"Identifier\");\n    if (!placeholder) return super.parseImport(node);\n    node.specifiers = [];\n    if (!this.isContextual(97) && !this.match(12)) {\n      node.source = this.finishPlaceholder(placeholder, \"StringLiteral\");\n      this.semicolon();\n      return this.finishNode(node, \"ImportDeclaration\");\n    }\n    const specifier = this.startNodeAtNode(placeholder);\n    specifier.local = placeholder;\n    node.specifiers.push(this.finishNode(specifier, \"ImportDefaultSpecifier\"));\n    if (this.eat(12)) {\n      const hasStarImport = this.maybeParseStarImportSpecifier(node);\n      if (!hasStarImport) this.parseNamedImportSpecifiers(node);\n    }\n    this.expectContextual(97);\n    node.source = this.parseImportSource();\n    this.semicolon();\n    return this.finishNode(node, \"ImportDeclaration\");\n  }\n  parseImportSource() {\n    return this.parsePlaceholder(\"StringLiteral\") || super.parseImportSource();\n  }\n  assertNoSpace() {\n    if (this.state.start > this.state.lastTokEndLoc.index) {\n      this.raise(PlaceholderErrors.UnexpectedSpace, {\n        at: this.state.lastTokEndLoc\n      });\n    }\n  }\n};\nvar v8intrinsic = superClass => class V8IntrinsicMixin extends superClass {\n  parseV8Intrinsic() {\n    if (this.match(54)) {\n      const v8IntrinsicStartLoc = this.state.startLoc;\n      const node = this.startNode();\n      this.next();\n      if (tokenIsIdentifier(this.state.type)) {\n        const name = this.parseIdentifierName();\n        const identifier = this.createIdentifier(node, name);\n        identifier.type = \"V8IntrinsicIdentifier\";\n        if (this.match(10)) {\n          return identifier;\n        }\n      }\n      this.unexpected(v8IntrinsicStartLoc);\n    }\n  }\n  parseExprAtom(refExpressionErrors) {\n    return this.parseV8Intrinsic() || super.parseExprAtom(refExpressionErrors);\n  }\n};\nfunction hasPlugin(plugins, expectedConfig) {\n  const [expectedName, expectedOptions] = typeof expectedConfig === \"string\" ? [expectedConfig, {}] : expectedConfig;\n  const expectedKeys = Object.keys(expectedOptions);\n  const expectedOptionsIsEmpty = expectedKeys.length === 0;\n  return plugins.some(p => {\n    if (typeof p === \"string\") {\n      return expectedOptionsIsEmpty && p === expectedName;\n    } else {\n      const [pluginName, pluginOptions] = p;\n      if (pluginName !== expectedName) {\n        return false;\n      }\n      for (const key of expectedKeys) {\n        if (pluginOptions[key] !== expectedOptions[key]) {\n          return false;\n        }\n      }\n      return true;\n    }\n  });\n}\nfunction getPluginOption(plugins, name, option) {\n  const plugin = plugins.find(plugin => {\n    if (Array.isArray(plugin)) {\n      return plugin[0] === name;\n    } else {\n      return plugin === name;\n    }\n  });\n  if (plugin && Array.isArray(plugin) && plugin.length > 1) {\n    return plugin[1][option];\n  }\n  return null;\n}\nconst PIPELINE_PROPOSALS = [\"minimal\", \"fsharp\", \"hack\", \"smart\"];\nconst TOPIC_TOKENS = [\"^^\", \"@@\", \"^\", \"%\", \"#\"];\nconst RECORD_AND_TUPLE_SYNTAX_TYPES = [\"hash\", \"bar\"];\nfunction validatePlugins(plugins) {\n  if (hasPlugin(plugins, \"decorators\")) {\n    if (hasPlugin(plugins, \"decorators-legacy\")) {\n      throw new Error(\"Cannot use the decorators and decorators-legacy plugin together\");\n    }\n    const decoratorsBeforeExport = getPluginOption(plugins, \"decorators\", \"decoratorsBeforeExport\");\n    if (decoratorsBeforeExport != null && typeof decoratorsBeforeExport !== \"boolean\") {\n      throw new Error(\"'decoratorsBeforeExport' must be a boolean, if specified.\");\n    }\n    const allowCallParenthesized = getPluginOption(plugins, \"decorators\", \"allowCallParenthesized\");\n    if (allowCallParenthesized != null && typeof allowCallParenthesized !== \"boolean\") {\n      throw new Error(\"'allowCallParenthesized' must be a boolean.\");\n    }\n  }\n  if (hasPlugin(plugins, \"flow\") && hasPlugin(plugins, \"typescript\")) {\n    throw new Error(\"Cannot combine flow and typescript plugins.\");\n  }\n  if (hasPlugin(plugins, \"placeholders\") && hasPlugin(plugins, \"v8intrinsic\")) {\n    throw new Error(\"Cannot combine placeholders and v8intrinsic plugins.\");\n  }\n  if (hasPlugin(plugins, \"pipelineOperator\")) {\n    const proposal = getPluginOption(plugins, \"pipelineOperator\", \"proposal\");\n    if (!PIPELINE_PROPOSALS.includes(proposal)) {\n      const proposalList = PIPELINE_PROPOSALS.map(p => `\"${p}\"`).join(\", \");\n      throw new Error(`\"pipelineOperator\" requires \"proposal\" option whose value must be one of: ${proposalList}.`);\n    }\n    const tupleSyntaxIsHash = hasPlugin(plugins, [\"recordAndTuple\", {\n      syntaxType: \"hash\"\n    }]);\n    if (proposal === \"hack\") {\n      if (hasPlugin(plugins, \"placeholders\")) {\n        throw new Error(\"Cannot combine placeholders plugin and Hack-style pipes.\");\n      }\n      if (hasPlugin(plugins, \"v8intrinsic\")) {\n        throw new Error(\"Cannot combine v8intrinsic plugin and Hack-style pipes.\");\n      }\n      const topicToken = getPluginOption(plugins, \"pipelineOperator\", \"topicToken\");\n      if (!TOPIC_TOKENS.includes(topicToken)) {\n        const tokenList = TOPIC_TOKENS.map(t => `\"${t}\"`).join(\", \");\n        throw new Error(`\"pipelineOperator\" in \"proposal\": \"hack\" mode also requires a \"topicToken\" option whose value must be one of: ${tokenList}.`);\n      }\n      if (topicToken === \"#\" && tupleSyntaxIsHash) {\n        throw new Error('Plugin conflict between `[\"pipelineOperator\", { proposal: \"hack\", topicToken: \"#\" }]` and `[\"recordAndtuple\", { syntaxType: \"hash\"}]`.');\n      }\n    } else if (proposal === \"smart\" && tupleSyntaxIsHash) {\n      throw new Error('Plugin conflict between `[\"pipelineOperator\", { proposal: \"smart\" }]` and `[\"recordAndtuple\", { syntaxType: \"hash\"}]`.');\n    }\n  }\n  if (hasPlugin(plugins, \"moduleAttributes\")) {\n    {\n      if (hasPlugin(plugins, \"importAssertions\")) {\n        throw new Error(\"Cannot combine importAssertions and moduleAttributes plugins.\");\n      }\n      const moduleAttributesVersionPluginOption = getPluginOption(plugins, \"moduleAttributes\", \"version\");\n      if (moduleAttributesVersionPluginOption !== \"may-2020\") {\n        throw new Error(\"The 'moduleAttributes' plugin requires a 'version' option,\" + \" representing the last proposal update. Currently, the\" + \" only supported value is 'may-2020'.\");\n      }\n    }\n  }\n  if (hasPlugin(plugins, \"recordAndTuple\") && getPluginOption(plugins, \"recordAndTuple\", \"syntaxType\") != null && !RECORD_AND_TUPLE_SYNTAX_TYPES.includes(getPluginOption(plugins, \"recordAndTuple\", \"syntaxType\"))) {\n    throw new Error(\"The 'syntaxType' option of the 'recordAndTuple' plugin must be one of: \" + RECORD_AND_TUPLE_SYNTAX_TYPES.map(p => `'${p}'`).join(\", \"));\n  }\n  if (hasPlugin(plugins, \"asyncDoExpressions\") && !hasPlugin(plugins, \"doExpressions\")) {\n    const error = new Error(\"'asyncDoExpressions' requires 'doExpressions', please add 'doExpressions' to parser plugins.\");\n    error.missingPlugins = \"doExpressions\";\n    throw error;\n  }\n}\nconst mixinPlugins = {\n  estree,\n  jsx,\n  flow,\n  typescript,\n  v8intrinsic,\n  placeholders\n};\nconst mixinPluginNames = Object.keys(mixinPlugins);\nclass ExpressionParser extends LValParser {\n  checkProto(prop, isRecord, protoRef, refExpressionErrors) {\n    if (prop.type === \"SpreadElement\" || this.isObjectMethod(prop) || prop.computed || prop.shorthand) {\n      return;\n    }\n    const key = prop.key;\n    const name = key.type === \"Identifier\" ? key.name : key.value;\n    if (name === \"__proto__\") {\n      if (isRecord) {\n        this.raise(Errors.RecordNoProto, {\n          at: key\n        });\n        return;\n      }\n      if (protoRef.used) {\n        if (refExpressionErrors) {\n          if (refExpressionErrors.doubleProtoLoc === null) {\n            refExpressionErrors.doubleProtoLoc = key.loc.start;\n          }\n        } else {\n          this.raise(Errors.DuplicateProto, {\n            at: key\n          });\n        }\n      }\n      protoRef.used = true;\n    }\n  }\n  shouldExitDescending(expr, potentialArrowAt) {\n    return expr.type === \"ArrowFunctionExpression\" && expr.start === potentialArrowAt;\n  }\n  getExpression() {\n    this.enterInitialScopes();\n    this.nextToken();\n    const expr = this.parseExpression();\n    if (!this.match(137)) {\n      this.unexpected();\n    }\n    this.finalizeRemainingComments();\n    expr.comments = this.state.comments;\n    expr.errors = this.state.errors;\n    if (this.options.tokens) {\n      expr.tokens = this.tokens;\n    }\n    return expr;\n  }\n  parseExpression(disallowIn, refExpressionErrors) {\n    if (disallowIn) {\n      return this.disallowInAnd(() => this.parseExpressionBase(refExpressionErrors));\n    }\n    return this.allowInAnd(() => this.parseExpressionBase(refExpressionErrors));\n  }\n  parseExpressionBase(refExpressionErrors) {\n    const startLoc = this.state.startLoc;\n    const expr = this.parseMaybeAssign(refExpressionErrors);\n    if (this.match(12)) {\n      const node = this.startNodeAt(startLoc);\n      node.expressions = [expr];\n      while (this.eat(12)) {\n        node.expressions.push(this.parseMaybeAssign(refExpressionErrors));\n      }\n      this.toReferencedList(node.expressions);\n      return this.finishNode(node, \"SequenceExpression\");\n    }\n    return expr;\n  }\n  parseMaybeAssignDisallowIn(refExpressionErrors, afterLeftParse) {\n    return this.disallowInAnd(() => this.parseMaybeAssign(refExpressionErrors, afterLeftParse));\n  }\n  parseMaybeAssignAllowIn(refExpressionErrors, afterLeftParse) {\n    return this.allowInAnd(() => this.parseMaybeAssign(refExpressionErrors, afterLeftParse));\n  }\n  setOptionalParametersError(refExpressionErrors, resultError) {\n    var _resultError$loc;\n    refExpressionErrors.optionalParametersLoc = (_resultError$loc = resultError == null ? void 0 : resultError.loc) != null ? _resultError$loc : this.state.startLoc;\n  }\n  parseMaybeAssign(refExpressionErrors, afterLeftParse) {\n    const startLoc = this.state.startLoc;\n    if (this.isContextual(106)) {\n      if (this.prodParam.hasYield) {\n        let left = this.parseYield();\n        if (afterLeftParse) {\n          left = afterLeftParse.call(this, left, startLoc);\n        }\n        return left;\n      }\n    }\n    let ownExpressionErrors;\n    if (refExpressionErrors) {\n      ownExpressionErrors = false;\n    } else {\n      refExpressionErrors = new ExpressionErrors();\n      ownExpressionErrors = true;\n    }\n    const {\n      type\n    } = this.state;\n    if (type === 10 || tokenIsIdentifier(type)) {\n      this.state.potentialArrowAt = this.state.start;\n    }\n    let left = this.parseMaybeConditional(refExpressionErrors);\n    if (afterLeftParse) {\n      left = afterLeftParse.call(this, left, startLoc);\n    }\n    if (tokenIsAssignment(this.state.type)) {\n      const node = this.startNodeAt(startLoc);\n      const operator = this.state.value;\n      node.operator = operator;\n      if (this.match(29)) {\n        this.toAssignable(left, true);\n        node.left = left;\n        const startIndex = startLoc.index;\n        if (refExpressionErrors.doubleProtoLoc != null && refExpressionErrors.doubleProtoLoc.index >= startIndex) {\n          refExpressionErrors.doubleProtoLoc = null;\n        }\n        if (refExpressionErrors.shorthandAssignLoc != null && refExpressionErrors.shorthandAssignLoc.index >= startIndex) {\n          refExpressionErrors.shorthandAssignLoc = null;\n        }\n        if (refExpressionErrors.privateKeyLoc != null && refExpressionErrors.privateKeyLoc.index >= startIndex) {\n          this.checkDestructuringPrivate(refExpressionErrors);\n          refExpressionErrors.privateKeyLoc = null;\n        }\n      } else {\n        node.left = left;\n      }\n      this.next();\n      node.right = this.parseMaybeAssign();\n      this.checkLVal(left, {\n        in: this.finishNode(node, \"AssignmentExpression\")\n      });\n      return node;\n    } else if (ownExpressionErrors) {\n      this.checkExpressionErrors(refExpressionErrors, true);\n    }\n    return left;\n  }\n  parseMaybeConditional(refExpressionErrors) {\n    const startLoc = this.state.startLoc;\n    const potentialArrowAt = this.state.potentialArrowAt;\n    const expr = this.parseExprOps(refExpressionErrors);\n    if (this.shouldExitDescending(expr, potentialArrowAt)) {\n      return expr;\n    }\n    return this.parseConditional(expr, startLoc, refExpressionErrors);\n  }\n  parseConditional(expr, startLoc, refExpressionErrors) {\n    if (this.eat(17)) {\n      const node = this.startNodeAt(startLoc);\n      node.test = expr;\n      node.consequent = this.parseMaybeAssignAllowIn();\n      this.expect(14);\n      node.alternate = this.parseMaybeAssign();\n      return this.finishNode(node, \"ConditionalExpression\");\n    }\n    return expr;\n  }\n  parseMaybeUnaryOrPrivate(refExpressionErrors) {\n    return this.match(136) ? this.parsePrivateName() : this.parseMaybeUnary(refExpressionErrors);\n  }\n  parseExprOps(refExpressionErrors) {\n    const startLoc = this.state.startLoc;\n    const potentialArrowAt = this.state.potentialArrowAt;\n    const expr = this.parseMaybeUnaryOrPrivate(refExpressionErrors);\n    if (this.shouldExitDescending(expr, potentialArrowAt)) {\n      return expr;\n    }\n    return this.parseExprOp(expr, startLoc, -1);\n  }\n  parseExprOp(left, leftStartLoc, minPrec) {\n    if (this.isPrivateName(left)) {\n      const value = this.getPrivateNameSV(left);\n      if (minPrec >= tokenOperatorPrecedence(58) || !this.prodParam.hasIn || !this.match(58)) {\n        this.raise(Errors.PrivateInExpectedIn, {\n          at: left,\n          identifierName: value\n        });\n      }\n      this.classScope.usePrivateName(value, left.loc.start);\n    }\n    const op = this.state.type;\n    if (tokenIsOperator(op) && (this.prodParam.hasIn || !this.match(58))) {\n      let prec = tokenOperatorPrecedence(op);\n      if (prec > minPrec) {\n        if (op === 39) {\n          this.expectPlugin(\"pipelineOperator\");\n          if (this.state.inFSharpPipelineDirectBody) {\n            return left;\n          }\n          this.checkPipelineAtInfixOperator(left, leftStartLoc);\n        }\n        const node = this.startNodeAt(leftStartLoc);\n        node.left = left;\n        node.operator = this.state.value;\n        const logical = op === 41 || op === 42;\n        const coalesce = op === 40;\n        if (coalesce) {\n          prec = tokenOperatorPrecedence(42);\n        }\n        this.next();\n        if (op === 39 && this.hasPlugin([\"pipelineOperator\", {\n          proposal: \"minimal\"\n        }])) {\n          if (this.state.type === 96 && this.prodParam.hasAwait) {\n            throw this.raise(Errors.UnexpectedAwaitAfterPipelineBody, {\n              at: this.state.startLoc\n            });\n          }\n        }\n        node.right = this.parseExprOpRightExpr(op, prec);\n        const finishedNode = this.finishNode(node, logical || coalesce ? \"LogicalExpression\" : \"BinaryExpression\");\n        const nextOp = this.state.type;\n        if (coalesce && (nextOp === 41 || nextOp === 42) || logical && nextOp === 40) {\n          throw this.raise(Errors.MixingCoalesceWithLogical, {\n            at: this.state.startLoc\n          });\n        }\n        return this.parseExprOp(finishedNode, leftStartLoc, minPrec);\n      }\n    }\n    return left;\n  }\n  parseExprOpRightExpr(op, prec) {\n    const startLoc = this.state.startLoc;\n    switch (op) {\n      case 39:\n        switch (this.getPluginOption(\"pipelineOperator\", \"proposal\")) {\n          case \"hack\":\n            return this.withTopicBindingContext(() => {\n              return this.parseHackPipeBody();\n            });\n          case \"smart\":\n            return this.withTopicBindingContext(() => {\n              if (this.prodParam.hasYield && this.isContextual(106)) {\n                throw this.raise(Errors.PipeBodyIsTighter, {\n                  at: this.state.startLoc\n                });\n              }\n              return this.parseSmartPipelineBodyInStyle(this.parseExprOpBaseRightExpr(op, prec), startLoc);\n            });\n          case \"fsharp\":\n            return this.withSoloAwaitPermittingContext(() => {\n              return this.parseFSharpPipelineBody(prec);\n            });\n        }\n      default:\n        return this.parseExprOpBaseRightExpr(op, prec);\n    }\n  }\n  parseExprOpBaseRightExpr(op, prec) {\n    const startLoc = this.state.startLoc;\n    return this.parseExprOp(this.parseMaybeUnaryOrPrivate(), startLoc, tokenIsRightAssociative(op) ? prec - 1 : prec);\n  }\n  parseHackPipeBody() {\n    var _body$extra;\n    const {\n      startLoc\n    } = this.state;\n    const body = this.parseMaybeAssign();\n    const requiredParentheses = UnparenthesizedPipeBodyDescriptions.has(body.type);\n    if (requiredParentheses && !((_body$extra = body.extra) != null && _body$extra.parenthesized)) {\n      this.raise(Errors.PipeUnparenthesizedBody, {\n        at: startLoc,\n        type: body.type\n      });\n    }\n    if (!this.topicReferenceWasUsedInCurrentContext()) {\n      this.raise(Errors.PipeTopicUnused, {\n        at: startLoc\n      });\n    }\n    return body;\n  }\n  checkExponentialAfterUnary(node) {\n    if (this.match(57)) {\n      this.raise(Errors.UnexpectedTokenUnaryExponentiation, {\n        at: node.argument\n      });\n    }\n  }\n  parseMaybeUnary(refExpressionErrors, sawUnary) {\n    const startLoc = this.state.startLoc;\n    const isAwait = this.isContextual(96);\n    if (isAwait && this.isAwaitAllowed()) {\n      this.next();\n      const expr = this.parseAwait(startLoc);\n      if (!sawUnary) this.checkExponentialAfterUnary(expr);\n      return expr;\n    }\n    const update = this.match(34);\n    const node = this.startNode();\n    if (tokenIsPrefix(this.state.type)) {\n      node.operator = this.state.value;\n      node.prefix = true;\n      if (this.match(72)) {\n        this.expectPlugin(\"throwExpressions\");\n      }\n      const isDelete = this.match(89);\n      this.next();\n      node.argument = this.parseMaybeUnary(null, true);\n      this.checkExpressionErrors(refExpressionErrors, true);\n      if (this.state.strict && isDelete) {\n        const arg = node.argument;\n        if (arg.type === \"Identifier\") {\n          this.raise(Errors.StrictDelete, {\n            at: node\n          });\n        } else if (this.hasPropertyAsPrivateName(arg)) {\n          this.raise(Errors.DeletePrivateField, {\n            at: node\n          });\n        }\n      }\n      if (!update) {\n        if (!sawUnary) {\n          this.checkExponentialAfterUnary(node);\n        }\n        return this.finishNode(node, \"UnaryExpression\");\n      }\n    }\n    const expr = this.parseUpdate(node, update, refExpressionErrors);\n    if (isAwait) {\n      const {\n        type\n      } = this.state;\n      const startsExpr = this.hasPlugin(\"v8intrinsic\") ? tokenCanStartExpression(type) : tokenCanStartExpression(type) && !this.match(54);\n      if (startsExpr && !this.isAmbiguousAwait()) {\n        this.raiseOverwrite(Errors.AwaitNotInAsyncContext, {\n          at: startLoc\n        });\n        return this.parseAwait(startLoc);\n      }\n    }\n    return expr;\n  }\n  parseUpdate(node, update, refExpressionErrors) {\n    if (update) {\n      const updateExpressionNode = node;\n      this.checkLVal(updateExpressionNode.argument, {\n        in: this.finishNode(updateExpressionNode, \"UpdateExpression\")\n      });\n      return node;\n    }\n    const startLoc = this.state.startLoc;\n    let expr = this.parseExprSubscripts(refExpressionErrors);\n    if (this.checkExpressionErrors(refExpressionErrors, false)) return expr;\n    while (tokenIsPostfix(this.state.type) && !this.canInsertSemicolon()) {\n      const node = this.startNodeAt(startLoc);\n      node.operator = this.state.value;\n      node.prefix = false;\n      node.argument = expr;\n      this.next();\n      this.checkLVal(expr, {\n        in: expr = this.finishNode(node, \"UpdateExpression\")\n      });\n    }\n    return expr;\n  }\n  parseExprSubscripts(refExpressionErrors) {\n    const startLoc = this.state.startLoc;\n    const potentialArrowAt = this.state.potentialArrowAt;\n    const expr = this.parseExprAtom(refExpressionErrors);\n    if (this.shouldExitDescending(expr, potentialArrowAt)) {\n      return expr;\n    }\n    return this.parseSubscripts(expr, startLoc);\n  }\n  parseSubscripts(base, startLoc, noCalls) {\n    const state = {\n      optionalChainMember: false,\n      maybeAsyncArrow: this.atPossibleAsyncArrow(base),\n      stop: false\n    };\n    do {\n      base = this.parseSubscript(base, startLoc, noCalls, state);\n      state.maybeAsyncArrow = false;\n    } while (!state.stop);\n    return base;\n  }\n  parseSubscript(base, startLoc, noCalls, state) {\n    const {\n      type\n    } = this.state;\n    if (!noCalls && type === 15) {\n      return this.parseBind(base, startLoc, noCalls, state);\n    } else if (tokenIsTemplate(type)) {\n      return this.parseTaggedTemplateExpression(base, startLoc, state);\n    }\n    let optional = false;\n    if (type === 18) {\n      if (noCalls) {\n        this.raise(Errors.OptionalChainingNoNew, {\n          at: this.state.startLoc\n        });\n        if (this.lookaheadCharCode() === 40) {\n          state.stop = true;\n          return base;\n        }\n      }\n      state.optionalChainMember = optional = true;\n      this.next();\n    }\n    if (!noCalls && this.match(10)) {\n      return this.parseCoverCallAndAsyncArrowHead(base, startLoc, state, optional);\n    } else {\n      const computed = this.eat(0);\n      if (computed || optional || this.eat(16)) {\n        return this.parseMember(base, startLoc, state, computed, optional);\n      } else {\n        state.stop = true;\n        return base;\n      }\n    }\n  }\n  parseMember(base, startLoc, state, computed, optional) {\n    const node = this.startNodeAt(startLoc);\n    node.object = base;\n    node.computed = computed;\n    if (computed) {\n      node.property = this.parseExpression();\n      this.expect(3);\n    } else if (this.match(136)) {\n      if (base.type === \"Super\") {\n        this.raise(Errors.SuperPrivateField, {\n          at: startLoc\n        });\n      }\n      this.classScope.usePrivateName(this.state.value, this.state.startLoc);\n      node.property = this.parsePrivateName();\n    } else {\n      node.property = this.parseIdentifier(true);\n    }\n    if (state.optionalChainMember) {\n      node.optional = optional;\n      return this.finishNode(node, \"OptionalMemberExpression\");\n    } else {\n      return this.finishNode(node, \"MemberExpression\");\n    }\n  }\n  parseBind(base, startLoc, noCalls, state) {\n    const node = this.startNodeAt(startLoc);\n    node.object = base;\n    this.next();\n    node.callee = this.parseNoCallExpr();\n    state.stop = true;\n    return this.parseSubscripts(this.finishNode(node, \"BindExpression\"), startLoc, noCalls);\n  }\n  parseCoverCallAndAsyncArrowHead(base, startLoc, state, optional) {\n    const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;\n    let refExpressionErrors = null;\n    this.state.maybeInArrowParameters = true;\n    this.next();\n    const node = this.startNodeAt(startLoc);\n    node.callee = base;\n    const {\n      maybeAsyncArrow,\n      optionalChainMember\n    } = state;\n    if (maybeAsyncArrow) {\n      this.expressionScope.enter(newAsyncArrowScope());\n      refExpressionErrors = new ExpressionErrors();\n    }\n    if (optionalChainMember) {\n      node.optional = optional;\n    }\n    if (optional) {\n      node.arguments = this.parseCallExpressionArguments(11);\n    } else {\n      node.arguments = this.parseCallExpressionArguments(11, base.type === \"Import\", base.type !== \"Super\", node, refExpressionErrors);\n    }\n    let finishedNode = this.finishCallExpression(node, optionalChainMember);\n    if (maybeAsyncArrow && this.shouldParseAsyncArrow() && !optional) {\n      state.stop = true;\n      this.checkDestructuringPrivate(refExpressionErrors);\n      this.expressionScope.validateAsPattern();\n      this.expressionScope.exit();\n      finishedNode = this.parseAsyncArrowFromCallExpression(this.startNodeAt(startLoc), finishedNode);\n    } else {\n      if (maybeAsyncArrow) {\n        this.checkExpressionErrors(refExpressionErrors, true);\n        this.expressionScope.exit();\n      }\n      this.toReferencedArguments(finishedNode);\n    }\n    this.state.maybeInArrowParameters = oldMaybeInArrowParameters;\n    return finishedNode;\n  }\n  toReferencedArguments(node, isParenthesizedExpr) {\n    this.toReferencedListDeep(node.arguments, isParenthesizedExpr);\n  }\n  parseTaggedTemplateExpression(base, startLoc, state) {\n    const node = this.startNodeAt(startLoc);\n    node.tag = base;\n    node.quasi = this.parseTemplate(true);\n    if (state.optionalChainMember) {\n      this.raise(Errors.OptionalChainingNoTemplate, {\n        at: startLoc\n      });\n    }\n    return this.finishNode(node, \"TaggedTemplateExpression\");\n  }\n  atPossibleAsyncArrow(base) {\n    return base.type === \"Identifier\" && base.name === \"async\" && this.state.lastTokEndLoc.index === base.end && !this.canInsertSemicolon() && base.end - base.start === 5 && base.start === this.state.potentialArrowAt;\n  }\n  finishCallExpression(node, optional) {\n    if (node.callee.type === \"Import\") {\n      if (node.arguments.length === 2) {\n        {\n          if (!this.hasPlugin(\"moduleAttributes\")) {\n            this.expectPlugin(\"importAssertions\");\n          }\n        }\n      }\n      if (node.arguments.length === 0 || node.arguments.length > 2) {\n        this.raise(Errors.ImportCallArity, {\n          at: node,\n          maxArgumentCount: this.hasPlugin(\"importAssertions\") || this.hasPlugin(\"moduleAttributes\") ? 2 : 1\n        });\n      } else {\n        for (const arg of node.arguments) {\n          if (arg.type === \"SpreadElement\") {\n            this.raise(Errors.ImportCallSpreadArgument, {\n              at: arg\n            });\n          }\n        }\n      }\n    }\n    return this.finishNode(node, optional ? \"OptionalCallExpression\" : \"CallExpression\");\n  }\n  parseCallExpressionArguments(close, dynamicImport, allowPlaceholder, nodeForExtra, refExpressionErrors) {\n    const elts = [];\n    let first = true;\n    const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;\n    this.state.inFSharpPipelineDirectBody = false;\n    while (!this.eat(close)) {\n      if (first) {\n        first = false;\n      } else {\n        this.expect(12);\n        if (this.match(close)) {\n          if (dynamicImport && !this.hasPlugin(\"importAssertions\") && !this.hasPlugin(\"moduleAttributes\")) {\n            this.raise(Errors.ImportCallArgumentTrailingComma, {\n              at: this.state.lastTokStartLoc\n            });\n          }\n          if (nodeForExtra) {\n            this.addTrailingCommaExtraToNode(nodeForExtra);\n          }\n          this.next();\n          break;\n        }\n      }\n      elts.push(this.parseExprListItem(false, refExpressionErrors, allowPlaceholder));\n    }\n    this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;\n    return elts;\n  }\n  shouldParseAsyncArrow() {\n    return this.match(19) && !this.canInsertSemicolon();\n  }\n  parseAsyncArrowFromCallExpression(node, call) {\n    var _call$extra;\n    this.resetPreviousNodeTrailingComments(call);\n    this.expect(19);\n    this.parseArrowExpression(node, call.arguments, true, (_call$extra = call.extra) == null ? void 0 : _call$extra.trailingCommaLoc);\n    if (call.innerComments) {\n      setInnerComments(node, call.innerComments);\n    }\n    if (call.callee.trailingComments) {\n      setInnerComments(node, call.callee.trailingComments);\n    }\n    return node;\n  }\n  parseNoCallExpr() {\n    const startLoc = this.state.startLoc;\n    return this.parseSubscripts(this.parseExprAtom(), startLoc, true);\n  }\n  parseExprAtom(refExpressionErrors) {\n    let node;\n    let decorators = null;\n    const {\n      type\n    } = this.state;\n    switch (type) {\n      case 79:\n        return this.parseSuper();\n      case 83:\n        node = this.startNode();\n        this.next();\n        if (this.match(16)) {\n          return this.parseImportMetaProperty(node);\n        }\n        if (!this.match(10)) {\n          this.raise(Errors.UnsupportedImport, {\n            at: this.state.lastTokStartLoc\n          });\n        }\n        return this.finishNode(node, \"Import\");\n      case 78:\n        node = this.startNode();\n        this.next();\n        return this.finishNode(node, \"ThisExpression\");\n      case 90:\n        {\n          return this.parseDo(this.startNode(), false);\n        }\n      case 56:\n      case 31:\n        {\n          this.readRegexp();\n          return this.parseRegExpLiteral(this.state.value);\n        }\n      case 132:\n        return this.parseNumericLiteral(this.state.value);\n      case 133:\n        return this.parseBigIntLiteral(this.state.value);\n      case 134:\n        return this.parseDecimalLiteral(this.state.value);\n      case 131:\n        return this.parseStringLiteral(this.state.value);\n      case 84:\n        return this.parseNullLiteral();\n      case 85:\n        return this.parseBooleanLiteral(true);\n      case 86:\n        return this.parseBooleanLiteral(false);\n      case 10:\n        {\n          const canBeArrow = this.state.potentialArrowAt === this.state.start;\n          return this.parseParenAndDistinguishExpression(canBeArrow);\n        }\n      case 2:\n      case 1:\n        {\n          return this.parseArrayLike(this.state.type === 2 ? 4 : 3, false, true);\n        }\n      case 0:\n        {\n          return this.parseArrayLike(3, true, false, refExpressionErrors);\n        }\n      case 6:\n      case 7:\n        {\n          return this.parseObjectLike(this.state.type === 6 ? 9 : 8, false, true);\n        }\n      case 5:\n        {\n          return this.parseObjectLike(8, false, false, refExpressionErrors);\n        }\n      case 68:\n        return this.parseFunctionOrFunctionSent();\n      case 26:\n        decorators = this.parseDecorators();\n      case 80:\n        return this.parseClass(this.maybeTakeDecorators(decorators, this.startNode()), false);\n      case 77:\n        return this.parseNewOrNewTarget();\n      case 25:\n      case 24:\n        return this.parseTemplate(false);\n      case 15:\n        {\n          node = this.startNode();\n          this.next();\n          node.object = null;\n          const callee = node.callee = this.parseNoCallExpr();\n          if (callee.type === \"MemberExpression\") {\n            return this.finishNode(node, \"BindExpression\");\n          } else {\n            throw this.raise(Errors.UnsupportedBind, {\n              at: callee\n            });\n          }\n        }\n      case 136:\n        {\n          this.raise(Errors.PrivateInExpectedIn, {\n            at: this.state.startLoc,\n            identifierName: this.state.value\n          });\n          return this.parsePrivateName();\n        }\n      case 33:\n        {\n          return this.parseTopicReferenceThenEqualsSign(54, \"%\");\n        }\n      case 32:\n        {\n          return this.parseTopicReferenceThenEqualsSign(44, \"^\");\n        }\n      case 37:\n      case 38:\n        {\n          return this.parseTopicReference(\"hack\");\n        }\n      case 44:\n      case 54:\n      case 27:\n        {\n          const pipeProposal = this.getPluginOption(\"pipelineOperator\", \"proposal\");\n          if (pipeProposal) {\n            return this.parseTopicReference(pipeProposal);\n          }\n          this.unexpected();\n          break;\n        }\n      case 47:\n        {\n          const lookaheadCh = this.input.codePointAt(this.nextTokenStart());\n          if (isIdentifierStart(lookaheadCh) || lookaheadCh === 62) {\n            this.expectOnePlugin([\"jsx\", \"flow\", \"typescript\"]);\n          } else {\n            this.unexpected();\n          }\n          break;\n        }\n      default:\n        if (tokenIsIdentifier(type)) {\n          if (this.isContextual(125) && this.lookaheadCharCode() === 123 && !this.hasFollowingLineBreak()) {\n            return this.parseModuleExpression();\n          }\n          const canBeArrow = this.state.potentialArrowAt === this.state.start;\n          const containsEsc = this.state.containsEsc;\n          const id = this.parseIdentifier();\n          if (!containsEsc && id.name === \"async\" && !this.canInsertSemicolon()) {\n            const {\n              type\n            } = this.state;\n            if (type === 68) {\n              this.resetPreviousNodeTrailingComments(id);\n              this.next();\n              return this.parseAsyncFunctionExpression(this.startNodeAtNode(id));\n            } else if (tokenIsIdentifier(type)) {\n              if (this.lookaheadCharCode() === 61) {\n                return this.parseAsyncArrowUnaryFunction(this.startNodeAtNode(id));\n              } else {\n                return id;\n              }\n            } else if (type === 90) {\n              this.resetPreviousNodeTrailingComments(id);\n              return this.parseDo(this.startNodeAtNode(id), true);\n            }\n          }\n          if (canBeArrow && this.match(19) && !this.canInsertSemicolon()) {\n            this.next();\n            return this.parseArrowExpression(this.startNodeAtNode(id), [id], false);\n          }\n          return id;\n        } else {\n          this.unexpected();\n        }\n    }\n  }\n  parseTopicReferenceThenEqualsSign(topicTokenType, topicTokenValue) {\n    const pipeProposal = this.getPluginOption(\"pipelineOperator\", \"proposal\");\n    if (pipeProposal) {\n      this.state.type = topicTokenType;\n      this.state.value = topicTokenValue;\n      this.state.pos--;\n      this.state.end--;\n      this.state.endLoc = createPositionWithColumnOffset(this.state.endLoc, -1);\n      return this.parseTopicReference(pipeProposal);\n    } else {\n      this.unexpected();\n    }\n  }\n  parseTopicReference(pipeProposal) {\n    const node = this.startNode();\n    const startLoc = this.state.startLoc;\n    const tokenType = this.state.type;\n    this.next();\n    return this.finishTopicReference(node, startLoc, pipeProposal, tokenType);\n  }\n  finishTopicReference(node, startLoc, pipeProposal, tokenType) {\n    if (this.testTopicReferenceConfiguration(pipeProposal, startLoc, tokenType)) {\n      const nodeType = pipeProposal === \"smart\" ? \"PipelinePrimaryTopicReference\" : \"TopicReference\";\n      if (!this.topicReferenceIsAllowedInCurrentContext()) {\n        this.raise(pipeProposal === \"smart\" ? Errors.PrimaryTopicNotAllowed : Errors.PipeTopicUnbound, {\n          at: startLoc\n        });\n      }\n      this.registerTopicReference();\n      return this.finishNode(node, nodeType);\n    } else {\n      throw this.raise(Errors.PipeTopicUnconfiguredToken, {\n        at: startLoc,\n        token: tokenLabelName(tokenType)\n      });\n    }\n  }\n  testTopicReferenceConfiguration(pipeProposal, startLoc, tokenType) {\n    switch (pipeProposal) {\n      case \"hack\":\n        {\n          return this.hasPlugin([\"pipelineOperator\", {\n            topicToken: tokenLabelName(tokenType)\n          }]);\n        }\n      case \"smart\":\n        return tokenType === 27;\n      default:\n        throw this.raise(Errors.PipeTopicRequiresHackPipes, {\n          at: startLoc\n        });\n    }\n  }\n  parseAsyncArrowUnaryFunction(node) {\n    this.prodParam.enter(functionFlags(true, this.prodParam.hasYield));\n    const params = [this.parseIdentifier()];\n    this.prodParam.exit();\n    if (this.hasPrecedingLineBreak()) {\n      this.raise(Errors.LineTerminatorBeforeArrow, {\n        at: this.state.curPosition()\n      });\n    }\n    this.expect(19);\n    return this.parseArrowExpression(node, params, true);\n  }\n  parseDo(node, isAsync) {\n    this.expectPlugin(\"doExpressions\");\n    if (isAsync) {\n      this.expectPlugin(\"asyncDoExpressions\");\n    }\n    node.async = isAsync;\n    this.next();\n    const oldLabels = this.state.labels;\n    this.state.labels = [];\n    if (isAsync) {\n      this.prodParam.enter(PARAM_AWAIT);\n      node.body = this.parseBlock();\n      this.prodParam.exit();\n    } else {\n      node.body = this.parseBlock();\n    }\n    this.state.labels = oldLabels;\n    return this.finishNode(node, \"DoExpression\");\n  }\n  parseSuper() {\n    const node = this.startNode();\n    this.next();\n    if (this.match(10) && !this.scope.allowDirectSuper && !this.options.allowSuperOutsideMethod) {\n      this.raise(Errors.SuperNotAllowed, {\n        at: node\n      });\n    } else if (!this.scope.allowSuper && !this.options.allowSuperOutsideMethod) {\n      this.raise(Errors.UnexpectedSuper, {\n        at: node\n      });\n    }\n    if (!this.match(10) && !this.match(0) && !this.match(16)) {\n      this.raise(Errors.UnsupportedSuper, {\n        at: node\n      });\n    }\n    return this.finishNode(node, \"Super\");\n  }\n  parsePrivateName() {\n    const node = this.startNode();\n    const id = this.startNodeAt(createPositionWithColumnOffset(this.state.startLoc, 1));\n    const name = this.state.value;\n    this.next();\n    node.id = this.createIdentifier(id, name);\n    return this.finishNode(node, \"PrivateName\");\n  }\n  parseFunctionOrFunctionSent() {\n    const node = this.startNode();\n    this.next();\n    if (this.prodParam.hasYield && this.match(16)) {\n      const meta = this.createIdentifier(this.startNodeAtNode(node), \"function\");\n      this.next();\n      if (this.match(102)) {\n        this.expectPlugin(\"functionSent\");\n      } else if (!this.hasPlugin(\"functionSent\")) {\n        this.unexpected();\n      }\n      return this.parseMetaProperty(node, meta, \"sent\");\n    }\n    return this.parseFunction(node);\n  }\n  parseMetaProperty(node, meta, propertyName) {\n    node.meta = meta;\n    const containsEsc = this.state.containsEsc;\n    node.property = this.parseIdentifier(true);\n    if (node.property.name !== propertyName || containsEsc) {\n      this.raise(Errors.UnsupportedMetaProperty, {\n        at: node.property,\n        target: meta.name,\n        onlyValidPropertyName: propertyName\n      });\n    }\n    return this.finishNode(node, \"MetaProperty\");\n  }\n  parseImportMetaProperty(node) {\n    const id = this.createIdentifier(this.startNodeAtNode(node), \"import\");\n    this.next();\n    if (this.isContextual(100)) {\n      if (!this.inModule) {\n        this.raise(Errors.ImportMetaOutsideModule, {\n          at: id\n        });\n      }\n      this.sawUnambiguousESM = true;\n    }\n    return this.parseMetaProperty(node, id, \"meta\");\n  }\n  parseLiteralAtNode(value, type, node) {\n    this.addExtra(node, \"rawValue\", value);\n    this.addExtra(node, \"raw\", this.input.slice(node.start, this.state.end));\n    node.value = value;\n    this.next();\n    return this.finishNode(node, type);\n  }\n  parseLiteral(value, type) {\n    const node = this.startNode();\n    return this.parseLiteralAtNode(value, type, node);\n  }\n  parseStringLiteral(value) {\n    return this.parseLiteral(value, \"StringLiteral\");\n  }\n  parseNumericLiteral(value) {\n    return this.parseLiteral(value, \"NumericLiteral\");\n  }\n  parseBigIntLiteral(value) {\n    return this.parseLiteral(value, \"BigIntLiteral\");\n  }\n  parseDecimalLiteral(value) {\n    return this.parseLiteral(value, \"DecimalLiteral\");\n  }\n  parseRegExpLiteral(value) {\n    const node = this.parseLiteral(value.value, \"RegExpLiteral\");\n    node.pattern = value.pattern;\n    node.flags = value.flags;\n    return node;\n  }\n  parseBooleanLiteral(value) {\n    const node = this.startNode();\n    node.value = value;\n    this.next();\n    return this.finishNode(node, \"BooleanLiteral\");\n  }\n  parseNullLiteral() {\n    const node = this.startNode();\n    this.next();\n    return this.finishNode(node, \"NullLiteral\");\n  }\n  parseParenAndDistinguishExpression(canBeArrow) {\n    const startLoc = this.state.startLoc;\n    let val;\n    this.next();\n    this.expressionScope.enter(newArrowHeadScope());\n    const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;\n    const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;\n    this.state.maybeInArrowParameters = true;\n    this.state.inFSharpPipelineDirectBody = false;\n    const innerStartLoc = this.state.startLoc;\n    const exprList = [];\n    const refExpressionErrors = new ExpressionErrors();\n    let first = true;\n    let spreadStartLoc;\n    let optionalCommaStartLoc;\n    while (!this.match(11)) {\n      if (first) {\n        first = false;\n      } else {\n        this.expect(12, refExpressionErrors.optionalParametersLoc === null ? null : refExpressionErrors.optionalParametersLoc);\n        if (this.match(11)) {\n          optionalCommaStartLoc = this.state.startLoc;\n          break;\n        }\n      }\n      if (this.match(21)) {\n        const spreadNodeStartLoc = this.state.startLoc;\n        spreadStartLoc = this.state.startLoc;\n        exprList.push(this.parseParenItem(this.parseRestBinding(), spreadNodeStartLoc));\n        if (!this.checkCommaAfterRest(41)) {\n          break;\n        }\n      } else {\n        exprList.push(this.parseMaybeAssignAllowIn(refExpressionErrors, this.parseParenItem));\n      }\n    }\n    const innerEndLoc = this.state.lastTokEndLoc;\n    this.expect(11);\n    this.state.maybeInArrowParameters = oldMaybeInArrowParameters;\n    this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;\n    let arrowNode = this.startNodeAt(startLoc);\n    if (canBeArrow && this.shouldParseArrow(exprList) && (arrowNode = this.parseArrow(arrowNode))) {\n      this.checkDestructuringPrivate(refExpressionErrors);\n      this.expressionScope.validateAsPattern();\n      this.expressionScope.exit();\n      this.parseArrowExpression(arrowNode, exprList, false);\n      return arrowNode;\n    }\n    this.expressionScope.exit();\n    if (!exprList.length) {\n      this.unexpected(this.state.lastTokStartLoc);\n    }\n    if (optionalCommaStartLoc) this.unexpected(optionalCommaStartLoc);\n    if (spreadStartLoc) this.unexpected(spreadStartLoc);\n    this.checkExpressionErrors(refExpressionErrors, true);\n    this.toReferencedListDeep(exprList, true);\n    if (exprList.length > 1) {\n      val = this.startNodeAt(innerStartLoc);\n      val.expressions = exprList;\n      this.finishNode(val, \"SequenceExpression\");\n      this.resetEndLocation(val, innerEndLoc);\n    } else {\n      val = exprList[0];\n    }\n    return this.wrapParenthesis(startLoc, val);\n  }\n  wrapParenthesis(startLoc, expression) {\n    if (!this.options.createParenthesizedExpressions) {\n      this.addExtra(expression, \"parenthesized\", true);\n      this.addExtra(expression, \"parenStart\", startLoc.index);\n      this.takeSurroundingComments(expression, startLoc.index, this.state.lastTokEndLoc.index);\n      return expression;\n    }\n    const parenExpression = this.startNodeAt(startLoc);\n    parenExpression.expression = expression;\n    return this.finishNode(parenExpression, \"ParenthesizedExpression\");\n  }\n  shouldParseArrow(params) {\n    return !this.canInsertSemicolon();\n  }\n  parseArrow(node) {\n    if (this.eat(19)) {\n      return node;\n    }\n  }\n  parseParenItem(node, startLoc) {\n    return node;\n  }\n  parseNewOrNewTarget() {\n    const node = this.startNode();\n    this.next();\n    if (this.match(16)) {\n      const meta = this.createIdentifier(this.startNodeAtNode(node), \"new\");\n      this.next();\n      const metaProp = this.parseMetaProperty(node, meta, \"target\");\n      if (!this.scope.inNonArrowFunction && !this.scope.inClass && !this.options.allowNewTargetOutsideFunction) {\n        this.raise(Errors.UnexpectedNewTarget, {\n          at: metaProp\n        });\n      }\n      return metaProp;\n    }\n    return this.parseNew(node);\n  }\n  parseNew(node) {\n    this.parseNewCallee(node);\n    if (this.eat(10)) {\n      const args = this.parseExprList(11);\n      this.toReferencedList(args);\n      node.arguments = args;\n    } else {\n      node.arguments = [];\n    }\n    return this.finishNode(node, \"NewExpression\");\n  }\n  parseNewCallee(node) {\n    node.callee = this.parseNoCallExpr();\n    if (node.callee.type === \"Import\") {\n      this.raise(Errors.ImportCallNotNewExpression, {\n        at: node.callee\n      });\n    }\n  }\n  parseTemplateElement(isTagged) {\n    const {\n      start,\n      startLoc,\n      end,\n      value\n    } = this.state;\n    const elemStart = start + 1;\n    const elem = this.startNodeAt(createPositionWithColumnOffset(startLoc, 1));\n    if (value === null) {\n      if (!isTagged) {\n        this.raise(Errors.InvalidEscapeSequenceTemplate, {\n          at: createPositionWithColumnOffset(this.state.firstInvalidTemplateEscapePos, 1)\n        });\n      }\n    }\n    const isTail = this.match(24);\n    const endOffset = isTail ? -1 : -2;\n    const elemEnd = end + endOffset;\n    elem.value = {\n      raw: this.input.slice(elemStart, elemEnd).replace(/\\r\\n?/g, \"\\n\"),\n      cooked: value === null ? null : value.slice(1, endOffset)\n    };\n    elem.tail = isTail;\n    this.next();\n    const finishedNode = this.finishNode(elem, \"TemplateElement\");\n    this.resetEndLocation(finishedNode, createPositionWithColumnOffset(this.state.lastTokEndLoc, endOffset));\n    return finishedNode;\n  }\n  parseTemplate(isTagged) {\n    const node = this.startNode();\n    node.expressions = [];\n    let curElt = this.parseTemplateElement(isTagged);\n    node.quasis = [curElt];\n    while (!curElt.tail) {\n      node.expressions.push(this.parseTemplateSubstitution());\n      this.readTemplateContinuation();\n      node.quasis.push(curElt = this.parseTemplateElement(isTagged));\n    }\n    return this.finishNode(node, \"TemplateLiteral\");\n  }\n  parseTemplateSubstitution() {\n    return this.parseExpression();\n  }\n  parseObjectLike(close, isPattern, isRecord, refExpressionErrors) {\n    if (isRecord) {\n      this.expectPlugin(\"recordAndTuple\");\n    }\n    const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;\n    this.state.inFSharpPipelineDirectBody = false;\n    const propHash = Object.create(null);\n    let first = true;\n    const node = this.startNode();\n    node.properties = [];\n    this.next();\n    while (!this.match(close)) {\n      if (first) {\n        first = false;\n      } else {\n        this.expect(12);\n        if (this.match(close)) {\n          this.addTrailingCommaExtraToNode(node);\n          break;\n        }\n      }\n      let prop;\n      if (isPattern) {\n        prop = this.parseBindingProperty();\n      } else {\n        prop = this.parsePropertyDefinition(refExpressionErrors);\n        this.checkProto(prop, isRecord, propHash, refExpressionErrors);\n      }\n      if (isRecord && !this.isObjectProperty(prop) && prop.type !== \"SpreadElement\") {\n        this.raise(Errors.InvalidRecordProperty, {\n          at: prop\n        });\n      }\n      if (prop.shorthand) {\n        this.addExtra(prop, \"shorthand\", true);\n      }\n      node.properties.push(prop);\n    }\n    this.next();\n    this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;\n    let type = \"ObjectExpression\";\n    if (isPattern) {\n      type = \"ObjectPattern\";\n    } else if (isRecord) {\n      type = \"RecordExpression\";\n    }\n    return this.finishNode(node, type);\n  }\n  addTrailingCommaExtraToNode(node) {\n    this.addExtra(node, \"trailingComma\", this.state.lastTokStart);\n    this.addExtra(node, \"trailingCommaLoc\", this.state.lastTokStartLoc, false);\n  }\n  maybeAsyncOrAccessorProp(prop) {\n    return !prop.computed && prop.key.type === \"Identifier\" && (this.isLiteralPropertyName() || this.match(0) || this.match(55));\n  }\n  parsePropertyDefinition(refExpressionErrors) {\n    let decorators = [];\n    if (this.match(26)) {\n      if (this.hasPlugin(\"decorators\")) {\n        this.raise(Errors.UnsupportedPropertyDecorator, {\n          at: this.state.startLoc\n        });\n      }\n      while (this.match(26)) {\n        decorators.push(this.parseDecorator());\n      }\n    }\n    const prop = this.startNode();\n    let isAsync = false;\n    let isAccessor = false;\n    let startLoc;\n    if (this.match(21)) {\n      if (decorators.length) this.unexpected();\n      return this.parseSpread();\n    }\n    if (decorators.length) {\n      prop.decorators = decorators;\n      decorators = [];\n    }\n    prop.method = false;\n    if (refExpressionErrors) {\n      startLoc = this.state.startLoc;\n    }\n    let isGenerator = this.eat(55);\n    this.parsePropertyNamePrefixOperator(prop);\n    const containsEsc = this.state.containsEsc;\n    const key = this.parsePropertyName(prop, refExpressionErrors);\n    if (!isGenerator && !containsEsc && this.maybeAsyncOrAccessorProp(prop)) {\n      const keyName = key.name;\n      if (keyName === \"async\" && !this.hasPrecedingLineBreak()) {\n        isAsync = true;\n        this.resetPreviousNodeTrailingComments(key);\n        isGenerator = this.eat(55);\n        this.parsePropertyName(prop);\n      }\n      if (keyName === \"get\" || keyName === \"set\") {\n        isAccessor = true;\n        this.resetPreviousNodeTrailingComments(key);\n        prop.kind = keyName;\n        if (this.match(55)) {\n          isGenerator = true;\n          this.raise(Errors.AccessorIsGenerator, {\n            at: this.state.curPosition(),\n            kind: keyName\n          });\n          this.next();\n        }\n        this.parsePropertyName(prop);\n      }\n    }\n    return this.parseObjPropValue(prop, startLoc, isGenerator, isAsync, false, isAccessor, refExpressionErrors);\n  }\n  getGetterSetterExpectedParamCount(method) {\n    return method.kind === \"get\" ? 0 : 1;\n  }\n  getObjectOrClassMethodParams(method) {\n    return method.params;\n  }\n  checkGetterSetterParams(method) {\n    var _params;\n    const paramCount = this.getGetterSetterExpectedParamCount(method);\n    const params = this.getObjectOrClassMethodParams(method);\n    if (params.length !== paramCount) {\n      this.raise(method.kind === \"get\" ? Errors.BadGetterArity : Errors.BadSetterArity, {\n        at: method\n      });\n    }\n    if (method.kind === \"set\" && ((_params = params[params.length - 1]) == null ? void 0 : _params.type) === \"RestElement\") {\n      this.raise(Errors.BadSetterRestParameter, {\n        at: method\n      });\n    }\n  }\n  parseObjectMethod(prop, isGenerator, isAsync, isPattern, isAccessor) {\n    if (isAccessor) {\n      const finishedProp = this.parseMethod(prop, isGenerator, false, false, false, \"ObjectMethod\");\n      this.checkGetterSetterParams(finishedProp);\n      return finishedProp;\n    }\n    if (isAsync || isGenerator || this.match(10)) {\n      if (isPattern) this.unexpected();\n      prop.kind = \"method\";\n      prop.method = true;\n      return this.parseMethod(prop, isGenerator, isAsync, false, false, \"ObjectMethod\");\n    }\n  }\n  parseObjectProperty(prop, startLoc, isPattern, refExpressionErrors) {\n    prop.shorthand = false;\n    if (this.eat(14)) {\n      prop.value = isPattern ? this.parseMaybeDefault(this.state.startLoc) : this.parseMaybeAssignAllowIn(refExpressionErrors);\n      return this.finishNode(prop, \"ObjectProperty\");\n    }\n    if (!prop.computed && prop.key.type === \"Identifier\") {\n      this.checkReservedWord(prop.key.name, prop.key.loc.start, true, false);\n      if (isPattern) {\n        prop.value = this.parseMaybeDefault(startLoc, cloneIdentifier(prop.key));\n      } else if (this.match(29)) {\n        const shorthandAssignLoc = this.state.startLoc;\n        if (refExpressionErrors != null) {\n          if (refExpressionErrors.shorthandAssignLoc === null) {\n            refExpressionErrors.shorthandAssignLoc = shorthandAssignLoc;\n          }\n        } else {\n          this.raise(Errors.InvalidCoverInitializedName, {\n            at: shorthandAssignLoc\n          });\n        }\n        prop.value = this.parseMaybeDefault(startLoc, cloneIdentifier(prop.key));\n      } else {\n        prop.value = cloneIdentifier(prop.key);\n      }\n      prop.shorthand = true;\n      return this.finishNode(prop, \"ObjectProperty\");\n    }\n  }\n  parseObjPropValue(prop, startLoc, isGenerator, isAsync, isPattern, isAccessor, refExpressionErrors) {\n    const node = this.parseObjectMethod(prop, isGenerator, isAsync, isPattern, isAccessor) || this.parseObjectProperty(prop, startLoc, isPattern, refExpressionErrors);\n    if (!node) this.unexpected();\n    return node;\n  }\n  parsePropertyName(prop, refExpressionErrors) {\n    if (this.eat(0)) {\n      prop.computed = true;\n      prop.key = this.parseMaybeAssignAllowIn();\n      this.expect(3);\n    } else {\n      const {\n        type,\n        value\n      } = this.state;\n      let key;\n      if (tokenIsKeywordOrIdentifier(type)) {\n        key = this.parseIdentifier(true);\n      } else {\n        switch (type) {\n          case 132:\n            key = this.parseNumericLiteral(value);\n            break;\n          case 131:\n            key = this.parseStringLiteral(value);\n            break;\n          case 133:\n            key = this.parseBigIntLiteral(value);\n            break;\n          case 134:\n            key = this.parseDecimalLiteral(value);\n            break;\n          case 136:\n            {\n              const privateKeyLoc = this.state.startLoc;\n              if (refExpressionErrors != null) {\n                if (refExpressionErrors.privateKeyLoc === null) {\n                  refExpressionErrors.privateKeyLoc = privateKeyLoc;\n                }\n              } else {\n                this.raise(Errors.UnexpectedPrivateField, {\n                  at: privateKeyLoc\n                });\n              }\n              key = this.parsePrivateName();\n              break;\n            }\n          default:\n            this.unexpected();\n        }\n      }\n      prop.key = key;\n      if (type !== 136) {\n        prop.computed = false;\n      }\n    }\n    return prop.key;\n  }\n  initFunction(node, isAsync) {\n    node.id = null;\n    node.generator = false;\n    node.async = isAsync;\n  }\n  parseMethod(node, isGenerator, isAsync, isConstructor, allowDirectSuper, type, inClassScope = false) {\n    this.initFunction(node, isAsync);\n    node.generator = isGenerator;\n    this.scope.enter(SCOPE_FUNCTION | SCOPE_SUPER | (inClassScope ? SCOPE_CLASS : 0) | (allowDirectSuper ? SCOPE_DIRECT_SUPER : 0));\n    this.prodParam.enter(functionFlags(isAsync, node.generator));\n    this.parseFunctionParams(node, isConstructor);\n    const finishedNode = this.parseFunctionBodyAndFinish(node, type, true);\n    this.prodParam.exit();\n    this.scope.exit();\n    return finishedNode;\n  }\n  parseArrayLike(close, canBePattern, isTuple, refExpressionErrors) {\n    if (isTuple) {\n      this.expectPlugin(\"recordAndTuple\");\n    }\n    const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;\n    this.state.inFSharpPipelineDirectBody = false;\n    const node = this.startNode();\n    this.next();\n    node.elements = this.parseExprList(close, !isTuple, refExpressionErrors, node);\n    this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;\n    return this.finishNode(node, isTuple ? \"TupleExpression\" : \"ArrayExpression\");\n  }\n  parseArrowExpression(node, params, isAsync, trailingCommaLoc) {\n    this.scope.enter(SCOPE_FUNCTION | SCOPE_ARROW);\n    let flags = functionFlags(isAsync, false);\n    if (!this.match(5) && this.prodParam.hasIn) {\n      flags |= PARAM_IN;\n    }\n    this.prodParam.enter(flags);\n    this.initFunction(node, isAsync);\n    const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;\n    if (params) {\n      this.state.maybeInArrowParameters = true;\n      this.setArrowFunctionParameters(node, params, trailingCommaLoc);\n    }\n    this.state.maybeInArrowParameters = false;\n    this.parseFunctionBody(node, true);\n    this.prodParam.exit();\n    this.scope.exit();\n    this.state.maybeInArrowParameters = oldMaybeInArrowParameters;\n    return this.finishNode(node, \"ArrowFunctionExpression\");\n  }\n  setArrowFunctionParameters(node, params, trailingCommaLoc) {\n    this.toAssignableList(params, trailingCommaLoc, false);\n    node.params = params;\n  }\n  parseFunctionBodyAndFinish(node, type, isMethod = false) {\n    this.parseFunctionBody(node, false, isMethod);\n    return this.finishNode(node, type);\n  }\n  parseFunctionBody(node, allowExpression, isMethod = false) {\n    const isExpression = allowExpression && !this.match(5);\n    this.expressionScope.enter(newExpressionScope());\n    if (isExpression) {\n      node.body = this.parseMaybeAssign();\n      this.checkParams(node, false, allowExpression, false);\n    } else {\n      const oldStrict = this.state.strict;\n      const oldLabels = this.state.labels;\n      this.state.labels = [];\n      this.prodParam.enter(this.prodParam.currentFlags() | PARAM_RETURN);\n      node.body = this.parseBlock(true, false, hasStrictModeDirective => {\n        const nonSimple = !this.isSimpleParamList(node.params);\n        if (hasStrictModeDirective && nonSimple) {\n          this.raise(Errors.IllegalLanguageModeDirective, {\n            at: (node.kind === \"method\" || node.kind === \"constructor\") && !!node.key ? node.key.loc.end : node\n          });\n        }\n        const strictModeChanged = !oldStrict && this.state.strict;\n        this.checkParams(node, !this.state.strict && !allowExpression && !isMethod && !nonSimple, allowExpression, strictModeChanged);\n        if (this.state.strict && node.id) {\n          this.checkIdentifier(node.id, BIND_OUTSIDE, strictModeChanged);\n        }\n      });\n      this.prodParam.exit();\n      this.state.labels = oldLabels;\n    }\n    this.expressionScope.exit();\n  }\n  isSimpleParameter(node) {\n    return node.type === \"Identifier\";\n  }\n  isSimpleParamList(params) {\n    for (let i = 0, len = params.length; i < len; i++) {\n      if (!this.isSimpleParameter(params[i])) return false;\n    }\n    return true;\n  }\n  checkParams(node, allowDuplicates, isArrowFunction, strictModeChanged = true) {\n    const checkClashes = !allowDuplicates && new Set();\n    const formalParameters = {\n      type: \"FormalParameters\"\n    };\n    for (const param of node.params) {\n      this.checkLVal(param, {\n        in: formalParameters,\n        binding: BIND_VAR,\n        checkClashes,\n        strictModeChanged\n      });\n    }\n  }\n  parseExprList(close, allowEmpty, refExpressionErrors, nodeForExtra) {\n    const elts = [];\n    let first = true;\n    while (!this.eat(close)) {\n      if (first) {\n        first = false;\n      } else {\n        this.expect(12);\n        if (this.match(close)) {\n          if (nodeForExtra) {\n            this.addTrailingCommaExtraToNode(nodeForExtra);\n          }\n          this.next();\n          break;\n        }\n      }\n      elts.push(this.parseExprListItem(allowEmpty, refExpressionErrors));\n    }\n    return elts;\n  }\n  parseExprListItem(allowEmpty, refExpressionErrors, allowPlaceholder) {\n    let elt;\n    if (this.match(12)) {\n      if (!allowEmpty) {\n        this.raise(Errors.UnexpectedToken, {\n          at: this.state.curPosition(),\n          unexpected: \",\"\n        });\n      }\n      elt = null;\n    } else if (this.match(21)) {\n      const spreadNodeStartLoc = this.state.startLoc;\n      elt = this.parseParenItem(this.parseSpread(refExpressionErrors), spreadNodeStartLoc);\n    } else if (this.match(17)) {\n      this.expectPlugin(\"partialApplication\");\n      if (!allowPlaceholder) {\n        this.raise(Errors.UnexpectedArgumentPlaceholder, {\n          at: this.state.startLoc\n        });\n      }\n      const node = this.startNode();\n      this.next();\n      elt = this.finishNode(node, \"ArgumentPlaceholder\");\n    } else {\n      elt = this.parseMaybeAssignAllowIn(refExpressionErrors, this.parseParenItem);\n    }\n    return elt;\n  }\n  parseIdentifier(liberal) {\n    const node = this.startNode();\n    const name = this.parseIdentifierName(liberal);\n    return this.createIdentifier(node, name);\n  }\n  createIdentifier(node, name) {\n    node.name = name;\n    node.loc.identifierName = name;\n    return this.finishNode(node, \"Identifier\");\n  }\n  parseIdentifierName(liberal) {\n    let name;\n    const {\n      startLoc,\n      type\n    } = this.state;\n    if (tokenIsKeywordOrIdentifier(type)) {\n      name = this.state.value;\n    } else {\n      this.unexpected();\n    }\n    const tokenIsKeyword = tokenKeywordOrIdentifierIsKeyword(type);\n    if (liberal) {\n      if (tokenIsKeyword) {\n        this.replaceToken(130);\n      }\n    } else {\n      this.checkReservedWord(name, startLoc, tokenIsKeyword, false);\n    }\n    this.next();\n    return name;\n  }\n  checkReservedWord(word, startLoc, checkKeywords, isBinding) {\n    if (word.length > 10) {\n      return;\n    }\n    if (!canBeReservedWord(word)) {\n      return;\n    }\n    if (checkKeywords && isKeyword(word)) {\n      this.raise(Errors.UnexpectedKeyword, {\n        at: startLoc,\n        keyword: word\n      });\n      return;\n    }\n    const reservedTest = !this.state.strict ? isReservedWord : isBinding ? isStrictBindReservedWord : isStrictReservedWord;\n    if (reservedTest(word, this.inModule)) {\n      this.raise(Errors.UnexpectedReservedWord, {\n        at: startLoc,\n        reservedWord: word\n      });\n      return;\n    } else if (word === \"yield\") {\n      if (this.prodParam.hasYield) {\n        this.raise(Errors.YieldBindingIdentifier, {\n          at: startLoc\n        });\n        return;\n      }\n    } else if (word === \"await\") {\n      if (this.prodParam.hasAwait) {\n        this.raise(Errors.AwaitBindingIdentifier, {\n          at: startLoc\n        });\n        return;\n      }\n      if (this.scope.inStaticBlock) {\n        this.raise(Errors.AwaitBindingIdentifierInStaticBlock, {\n          at: startLoc\n        });\n        return;\n      }\n      this.expressionScope.recordAsyncArrowParametersError({\n        at: startLoc\n      });\n    } else if (word === \"arguments\") {\n      if (this.scope.inClassAndNotInNonArrowFunction) {\n        this.raise(Errors.ArgumentsInClass, {\n          at: startLoc\n        });\n        return;\n      }\n    }\n  }\n  isAwaitAllowed() {\n    if (this.prodParam.hasAwait) return true;\n    if (this.options.allowAwaitOutsideFunction && !this.scope.inFunction) {\n      return true;\n    }\n    return false;\n  }\n  parseAwait(startLoc) {\n    const node = this.startNodeAt(startLoc);\n    this.expressionScope.recordParameterInitializerError(Errors.AwaitExpressionFormalParameter, {\n      at: node\n    });\n    if (this.eat(55)) {\n      this.raise(Errors.ObsoleteAwaitStar, {\n        at: node\n      });\n    }\n    if (!this.scope.inFunction && !this.options.allowAwaitOutsideFunction) {\n      if (this.isAmbiguousAwait()) {\n        this.ambiguousScriptDifferentAst = true;\n      } else {\n        this.sawUnambiguousESM = true;\n      }\n    }\n    if (!this.state.soloAwait) {\n      node.argument = this.parseMaybeUnary(null, true);\n    }\n    return this.finishNode(node, \"AwaitExpression\");\n  }\n  isAmbiguousAwait() {\n    if (this.hasPrecedingLineBreak()) return true;\n    const {\n      type\n    } = this.state;\n    return type === 53 || type === 10 || type === 0 || tokenIsTemplate(type) || type === 101 && !this.state.containsEsc || type === 135 || type === 56 || this.hasPlugin(\"v8intrinsic\") && type === 54;\n  }\n  parseYield() {\n    const node = this.startNode();\n    this.expressionScope.recordParameterInitializerError(Errors.YieldInParameter, {\n      at: node\n    });\n    this.next();\n    let delegating = false;\n    let argument = null;\n    if (!this.hasPrecedingLineBreak()) {\n      delegating = this.eat(55);\n      switch (this.state.type) {\n        case 13:\n        case 137:\n        case 8:\n        case 11:\n        case 3:\n        case 9:\n        case 14:\n        case 12:\n          if (!delegating) break;\n        default:\n          argument = this.parseMaybeAssign();\n      }\n    }\n    node.delegate = delegating;\n    node.argument = argument;\n    return this.finishNode(node, \"YieldExpression\");\n  }\n  checkPipelineAtInfixOperator(left, leftStartLoc) {\n    if (this.hasPlugin([\"pipelineOperator\", {\n      proposal: \"smart\"\n    }])) {\n      if (left.type === \"SequenceExpression\") {\n        this.raise(Errors.PipelineHeadSequenceExpression, {\n          at: leftStartLoc\n        });\n      }\n    }\n  }\n  parseSmartPipelineBodyInStyle(childExpr, startLoc) {\n    if (this.isSimpleReference(childExpr)) {\n      const bodyNode = this.startNodeAt(startLoc);\n      bodyNode.callee = childExpr;\n      return this.finishNode(bodyNode, \"PipelineBareFunction\");\n    } else {\n      const bodyNode = this.startNodeAt(startLoc);\n      this.checkSmartPipeTopicBodyEarlyErrors(startLoc);\n      bodyNode.expression = childExpr;\n      return this.finishNode(bodyNode, \"PipelineTopicExpression\");\n    }\n  }\n  isSimpleReference(expression) {\n    switch (expression.type) {\n      case \"MemberExpression\":\n        return !expression.computed && this.isSimpleReference(expression.object);\n      case \"Identifier\":\n        return true;\n      default:\n        return false;\n    }\n  }\n  checkSmartPipeTopicBodyEarlyErrors(startLoc) {\n    if (this.match(19)) {\n      throw this.raise(Errors.PipelineBodyNoArrow, {\n        at: this.state.startLoc\n      });\n    }\n    if (!this.topicReferenceWasUsedInCurrentContext()) {\n      this.raise(Errors.PipelineTopicUnused, {\n        at: startLoc\n      });\n    }\n  }\n  withTopicBindingContext(callback) {\n    const outerContextTopicState = this.state.topicContext;\n    this.state.topicContext = {\n      maxNumOfResolvableTopics: 1,\n      maxTopicIndex: null\n    };\n    try {\n      return callback();\n    } finally {\n      this.state.topicContext = outerContextTopicState;\n    }\n  }\n  withSmartMixTopicForbiddingContext(callback) {\n    if (this.hasPlugin([\"pipelineOperator\", {\n      proposal: \"smart\"\n    }])) {\n      const outerContextTopicState = this.state.topicContext;\n      this.state.topicContext = {\n        maxNumOfResolvableTopics: 0,\n        maxTopicIndex: null\n      };\n      try {\n        return callback();\n      } finally {\n        this.state.topicContext = outerContextTopicState;\n      }\n    } else {\n      return callback();\n    }\n  }\n  withSoloAwaitPermittingContext(callback) {\n    const outerContextSoloAwaitState = this.state.soloAwait;\n    this.state.soloAwait = true;\n    try {\n      return callback();\n    } finally {\n      this.state.soloAwait = outerContextSoloAwaitState;\n    }\n  }\n  allowInAnd(callback) {\n    const flags = this.prodParam.currentFlags();\n    const prodParamToSet = PARAM_IN & ~flags;\n    if (prodParamToSet) {\n      this.prodParam.enter(flags | PARAM_IN);\n      try {\n        return callback();\n      } finally {\n        this.prodParam.exit();\n      }\n    }\n    return callback();\n  }\n  disallowInAnd(callback) {\n    const flags = this.prodParam.currentFlags();\n    const prodParamToClear = PARAM_IN & flags;\n    if (prodParamToClear) {\n      this.prodParam.enter(flags & ~PARAM_IN);\n      try {\n        return callback();\n      } finally {\n        this.prodParam.exit();\n      }\n    }\n    return callback();\n  }\n  registerTopicReference() {\n    this.state.topicContext.maxTopicIndex = 0;\n  }\n  topicReferenceIsAllowedInCurrentContext() {\n    return this.state.topicContext.maxNumOfResolvableTopics >= 1;\n  }\n  topicReferenceWasUsedInCurrentContext() {\n    return this.state.topicContext.maxTopicIndex != null && this.state.topicContext.maxTopicIndex >= 0;\n  }\n  parseFSharpPipelineBody(prec) {\n    const startLoc = this.state.startLoc;\n    this.state.potentialArrowAt = this.state.start;\n    const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;\n    this.state.inFSharpPipelineDirectBody = true;\n    const ret = this.parseExprOp(this.parseMaybeUnaryOrPrivate(), startLoc, prec);\n    this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;\n    return ret;\n  }\n  parseModuleExpression() {\n    this.expectPlugin(\"moduleBlocks\");\n    const node = this.startNode();\n    this.next();\n    if (!this.match(5)) {\n      this.unexpected(null, 5);\n    }\n    const program = this.startNodeAt(this.state.endLoc);\n    this.next();\n    const revertScopes = this.initializeScopes(true);\n    this.enterInitialScopes();\n    try {\n      node.body = this.parseProgram(program, 8, \"module\");\n    } finally {\n      revertScopes();\n    }\n    return this.finishNode(node, \"ModuleExpression\");\n  }\n  parsePropertyNamePrefixOperator(prop) {}\n}\nconst loopLabel = {\n    kind: \"loop\"\n  },\n  switchLabel = {\n    kind: \"switch\"\n  };\nconst loneSurrogate = /[\\uD800-\\uDFFF]/u;\nconst keywordRelationalOperator = /in(?:stanceof)?/y;\nfunction babel7CompatTokens(tokens, input) {\n  for (let i = 0; i < tokens.length; i++) {\n    const token = tokens[i];\n    const {\n      type\n    } = token;\n    if (typeof type === \"number\") {\n      {\n        if (type === 136) {\n          const {\n            loc,\n            start,\n            value,\n            end\n          } = token;\n          const hashEndPos = start + 1;\n          const hashEndLoc = createPositionWithColumnOffset(loc.start, 1);\n          tokens.splice(i, 1, new Token({\n            type: getExportedToken(27),\n            value: \"#\",\n            start: start,\n            end: hashEndPos,\n            startLoc: loc.start,\n            endLoc: hashEndLoc\n          }), new Token({\n            type: getExportedToken(130),\n            value: value,\n            start: hashEndPos,\n            end: end,\n            startLoc: hashEndLoc,\n            endLoc: loc.end\n          }));\n          i++;\n          continue;\n        }\n        if (tokenIsTemplate(type)) {\n          const {\n            loc,\n            start,\n            value,\n            end\n          } = token;\n          const backquoteEnd = start + 1;\n          const backquoteEndLoc = createPositionWithColumnOffset(loc.start, 1);\n          let startToken;\n          if (input.charCodeAt(start) === 96) {\n            startToken = new Token({\n              type: getExportedToken(22),\n              value: \"`\",\n              start: start,\n              end: backquoteEnd,\n              startLoc: loc.start,\n              endLoc: backquoteEndLoc\n            });\n          } else {\n            startToken = new Token({\n              type: getExportedToken(8),\n              value: \"}\",\n              start: start,\n              end: backquoteEnd,\n              startLoc: loc.start,\n              endLoc: backquoteEndLoc\n            });\n          }\n          let templateValue, templateElementEnd, templateElementEndLoc, endToken;\n          if (type === 24) {\n            templateElementEnd = end - 1;\n            templateElementEndLoc = createPositionWithColumnOffset(loc.end, -1);\n            templateValue = value === null ? null : value.slice(1, -1);\n            endToken = new Token({\n              type: getExportedToken(22),\n              value: \"`\",\n              start: templateElementEnd,\n              end: end,\n              startLoc: templateElementEndLoc,\n              endLoc: loc.end\n            });\n          } else {\n            templateElementEnd = end - 2;\n            templateElementEndLoc = createPositionWithColumnOffset(loc.end, -2);\n            templateValue = value === null ? null : value.slice(1, -2);\n            endToken = new Token({\n              type: getExportedToken(23),\n              value: \"${\",\n              start: templateElementEnd,\n              end: end,\n              startLoc: templateElementEndLoc,\n              endLoc: loc.end\n            });\n          }\n          tokens.splice(i, 1, startToken, new Token({\n            type: getExportedToken(20),\n            value: templateValue,\n            start: backquoteEnd,\n            end: templateElementEnd,\n            startLoc: backquoteEndLoc,\n            endLoc: templateElementEndLoc\n          }), endToken);\n          i += 2;\n          continue;\n        }\n      }\n      token.type = getExportedToken(type);\n    }\n  }\n  return tokens;\n}\nclass StatementParser extends ExpressionParser {\n  parseTopLevel(file, program) {\n    file.program = this.parseProgram(program);\n    file.comments = this.state.comments;\n    if (this.options.tokens) {\n      file.tokens = babel7CompatTokens(this.tokens, this.input);\n    }\n    return this.finishNode(file, \"File\");\n  }\n  parseProgram(program, end = 137, sourceType = this.options.sourceType) {\n    program.sourceType = sourceType;\n    program.interpreter = this.parseInterpreterDirective();\n    this.parseBlockBody(program, true, true, end);\n    if (this.inModule && !this.options.allowUndeclaredExports && this.scope.undefinedExports.size > 0) {\n      for (const [localName, at] of Array.from(this.scope.undefinedExports)) {\n        this.raise(Errors.ModuleExportUndefined, {\n          at,\n          localName\n        });\n      }\n    }\n    let finishedProgram;\n    if (end === 137) {\n      finishedProgram = this.finishNode(program, \"Program\");\n    } else {\n      finishedProgram = this.finishNodeAt(program, \"Program\", createPositionWithColumnOffset(this.state.startLoc, -1));\n    }\n    return finishedProgram;\n  }\n  stmtToDirective(stmt) {\n    const directive = stmt;\n    directive.type = \"Directive\";\n    directive.value = directive.expression;\n    delete directive.expression;\n    const directiveLiteral = directive.value;\n    const expressionValue = directiveLiteral.value;\n    const raw = this.input.slice(directiveLiteral.start, directiveLiteral.end);\n    const val = directiveLiteral.value = raw.slice(1, -1);\n    this.addExtra(directiveLiteral, \"raw\", raw);\n    this.addExtra(directiveLiteral, \"rawValue\", val);\n    this.addExtra(directiveLiteral, \"expressionValue\", expressionValue);\n    directiveLiteral.type = \"DirectiveLiteral\";\n    return directive;\n  }\n  parseInterpreterDirective() {\n    if (!this.match(28)) {\n      return null;\n    }\n    const node = this.startNode();\n    node.value = this.state.value;\n    this.next();\n    return this.finishNode(node, \"InterpreterDirective\");\n  }\n  isLet() {\n    if (!this.isContextual(99)) {\n      return false;\n    }\n    return this.hasFollowingBindingAtom();\n  }\n  chStartsBindingIdentifier(ch, pos) {\n    if (isIdentifierStart(ch)) {\n      keywordRelationalOperator.lastIndex = pos;\n      if (keywordRelationalOperator.test(this.input)) {\n        const endCh = this.codePointAtPos(keywordRelationalOperator.lastIndex);\n        if (!isIdentifierChar(endCh) && endCh !== 92) {\n          return false;\n        }\n      }\n      return true;\n    } else if (ch === 92) {\n      return true;\n    } else {\n      return false;\n    }\n  }\n  chStartsBindingPattern(ch) {\n    return ch === 91 || ch === 123;\n  }\n  hasFollowingBindingAtom() {\n    const next = this.nextTokenStart();\n    const nextCh = this.codePointAtPos(next);\n    return this.chStartsBindingPattern(nextCh) || this.chStartsBindingIdentifier(nextCh, next);\n  }\n  hasFollowingBindingIdentifier() {\n    const next = this.nextTokenStart();\n    const nextCh = this.codePointAtPos(next);\n    return this.chStartsBindingIdentifier(nextCh, next);\n  }\n  startsUsingForOf() {\n    const lookahead = this.lookahead();\n    if (lookahead.type === 101 && !lookahead.containsEsc) {\n      return false;\n    } else {\n      this.expectPlugin(\"explicitResourceManagement\");\n      return true;\n    }\n  }\n  parseModuleItem() {\n    return this.parseStatementLike(1 | 2 | 4 | 8);\n  }\n  parseStatementListItem() {\n    return this.parseStatementLike(2 | 4 | (!this.options.annexB || this.state.strict ? 0 : 8));\n  }\n  parseStatementOrSloppyAnnexBFunctionDeclaration(allowLabeledFunction = false) {\n    let flags = 0;\n    if (this.options.annexB && !this.state.strict) {\n      flags |= 4;\n      if (allowLabeledFunction) {\n        flags |= 8;\n      }\n    }\n    return this.parseStatementLike(flags);\n  }\n  parseStatement() {\n    return this.parseStatementLike(0);\n  }\n  parseStatementLike(flags) {\n    let decorators = null;\n    if (this.match(26)) {\n      decorators = this.parseDecorators(true);\n    }\n    return this.parseStatementContent(flags, decorators);\n  }\n  parseStatementContent(flags, decorators) {\n    const starttype = this.state.type;\n    const node = this.startNode();\n    const allowDeclaration = !!(flags & 2);\n    const allowFunctionDeclaration = !!(flags & 4);\n    const topLevel = flags & 1;\n    switch (starttype) {\n      case 60:\n        return this.parseBreakContinueStatement(node, true);\n      case 63:\n        return this.parseBreakContinueStatement(node, false);\n      case 64:\n        return this.parseDebuggerStatement(node);\n      case 90:\n        return this.parseDoWhileStatement(node);\n      case 91:\n        return this.parseForStatement(node);\n      case 68:\n        if (this.lookaheadCharCode() === 46) break;\n        if (!allowFunctionDeclaration) {\n          this.raise(this.state.strict ? Errors.StrictFunction : this.options.annexB ? Errors.SloppyFunctionAnnexB : Errors.SloppyFunction, {\n            at: this.state.startLoc\n          });\n        }\n        return this.parseFunctionStatement(node, false, !allowDeclaration && allowFunctionDeclaration);\n      case 80:\n        if (!allowDeclaration) this.unexpected();\n        return this.parseClass(this.maybeTakeDecorators(decorators, node), true);\n      case 69:\n        return this.parseIfStatement(node);\n      case 70:\n        return this.parseReturnStatement(node);\n      case 71:\n        return this.parseSwitchStatement(node);\n      case 72:\n        return this.parseThrowStatement(node);\n      case 73:\n        return this.parseTryStatement(node);\n      case 105:\n        if (this.hasFollowingLineBreak() || this.state.containsEsc || !this.hasFollowingBindingIdentifier()) {\n          break;\n        }\n        this.expectPlugin(\"explicitResourceManagement\");\n        if (!this.scope.inModule && this.scope.inTopLevel) {\n          this.raise(Errors.UnexpectedUsingDeclaration, {\n            at: this.state.startLoc\n          });\n        } else if (!allowDeclaration) {\n          this.raise(Errors.UnexpectedLexicalDeclaration, {\n            at: this.state.startLoc\n          });\n        }\n        return this.parseVarStatement(node, \"using\");\n      case 99:\n        {\n          if (this.state.containsEsc) {\n            break;\n          }\n          const next = this.nextTokenStart();\n          const nextCh = this.codePointAtPos(next);\n          if (nextCh !== 91) {\n            if (!allowDeclaration && this.hasFollowingLineBreak()) break;\n            if (!this.chStartsBindingIdentifier(nextCh, next) && nextCh !== 123) {\n              break;\n            }\n          }\n        }\n      case 75:\n        {\n          if (!allowDeclaration) {\n            this.raise(Errors.UnexpectedLexicalDeclaration, {\n              at: this.state.startLoc\n            });\n          }\n        }\n      case 74:\n        {\n          const kind = this.state.value;\n          return this.parseVarStatement(node, kind);\n        }\n      case 92:\n        return this.parseWhileStatement(node);\n      case 76:\n        return this.parseWithStatement(node);\n      case 5:\n        return this.parseBlock();\n      case 13:\n        return this.parseEmptyStatement(node);\n      case 83:\n        {\n          const nextTokenCharCode = this.lookaheadCharCode();\n          if (nextTokenCharCode === 40 || nextTokenCharCode === 46) {\n            break;\n          }\n        }\n      case 82:\n        {\n          if (!this.options.allowImportExportEverywhere && !topLevel) {\n            this.raise(Errors.UnexpectedImportExport, {\n              at: this.state.startLoc\n            });\n          }\n          this.next();\n          let result;\n          if (starttype === 83) {\n            result = this.parseImport(node);\n            if (result.type === \"ImportDeclaration\" && (!result.importKind || result.importKind === \"value\")) {\n              this.sawUnambiguousESM = true;\n            }\n          } else {\n            result = this.parseExport(node, decorators);\n            if (result.type === \"ExportNamedDeclaration\" && (!result.exportKind || result.exportKind === \"value\") || result.type === \"ExportAllDeclaration\" && (!result.exportKind || result.exportKind === \"value\") || result.type === \"ExportDefaultDeclaration\") {\n              this.sawUnambiguousESM = true;\n            }\n          }\n          this.assertModuleNodeAllowed(result);\n          return result;\n        }\n      default:\n        {\n          if (this.isAsyncFunction()) {\n            if (!allowDeclaration) {\n              this.raise(Errors.AsyncFunctionInSingleStatementContext, {\n                at: this.state.startLoc\n              });\n            }\n            this.next();\n            return this.parseFunctionStatement(node, true, !allowDeclaration && allowFunctionDeclaration);\n          }\n        }\n    }\n    const maybeName = this.state.value;\n    const expr = this.parseExpression();\n    if (tokenIsIdentifier(starttype) && expr.type === \"Identifier\" && this.eat(14)) {\n      return this.parseLabeledStatement(node, maybeName, expr, flags);\n    } else {\n      return this.parseExpressionStatement(node, expr, decorators);\n    }\n  }\n  assertModuleNodeAllowed(node) {\n    if (!this.options.allowImportExportEverywhere && !this.inModule) {\n      this.raise(Errors.ImportOutsideModule, {\n        at: node\n      });\n    }\n  }\n  decoratorsEnabledBeforeExport() {\n    if (this.hasPlugin(\"decorators-legacy\")) return true;\n    return this.hasPlugin(\"decorators\") && this.getPluginOption(\"decorators\", \"decoratorsBeforeExport\") !== false;\n  }\n  maybeTakeDecorators(maybeDecorators, classNode, exportNode) {\n    if (maybeDecorators) {\n      if (classNode.decorators && classNode.decorators.length > 0) {\n        if (typeof this.getPluginOption(\"decorators\", \"decoratorsBeforeExport\") !== \"boolean\") {\n          this.raise(Errors.DecoratorsBeforeAfterExport, {\n            at: classNode.decorators[0]\n          });\n        }\n        classNode.decorators.unshift(...maybeDecorators);\n      } else {\n        classNode.decorators = maybeDecorators;\n      }\n      this.resetStartLocationFromNode(classNode, maybeDecorators[0]);\n      if (exportNode) this.resetStartLocationFromNode(exportNode, classNode);\n    }\n    return classNode;\n  }\n  canHaveLeadingDecorator() {\n    return this.match(80);\n  }\n  parseDecorators(allowExport) {\n    const decorators = [];\n    do {\n      decorators.push(this.parseDecorator());\n    } while (this.match(26));\n    if (this.match(82)) {\n      if (!allowExport) {\n        this.unexpected();\n      }\n      if (!this.decoratorsEnabledBeforeExport()) {\n        this.raise(Errors.DecoratorExportClass, {\n          at: this.state.startLoc\n        });\n      }\n    } else if (!this.canHaveLeadingDecorator()) {\n      throw this.raise(Errors.UnexpectedLeadingDecorator, {\n        at: this.state.startLoc\n      });\n    }\n    return decorators;\n  }\n  parseDecorator() {\n    this.expectOnePlugin([\"decorators\", \"decorators-legacy\"]);\n    const node = this.startNode();\n    this.next();\n    if (this.hasPlugin(\"decorators\")) {\n      const startLoc = this.state.startLoc;\n      let expr;\n      if (this.match(10)) {\n        const startLoc = this.state.startLoc;\n        this.next();\n        expr = this.parseExpression();\n        this.expect(11);\n        expr = this.wrapParenthesis(startLoc, expr);\n        const paramsStartLoc = this.state.startLoc;\n        node.expression = this.parseMaybeDecoratorArguments(expr);\n        if (this.getPluginOption(\"decorators\", \"allowCallParenthesized\") === false && node.expression !== expr) {\n          this.raise(Errors.DecoratorArgumentsOutsideParentheses, {\n            at: paramsStartLoc\n          });\n        }\n      } else {\n        expr = this.parseIdentifier(false);\n        while (this.eat(16)) {\n          const node = this.startNodeAt(startLoc);\n          node.object = expr;\n          if (this.match(136)) {\n            this.classScope.usePrivateName(this.state.value, this.state.startLoc);\n            node.property = this.parsePrivateName();\n          } else {\n            node.property = this.parseIdentifier(true);\n          }\n          node.computed = false;\n          expr = this.finishNode(node, \"MemberExpression\");\n        }\n        node.expression = this.parseMaybeDecoratorArguments(expr);\n      }\n    } else {\n      node.expression = this.parseExprSubscripts();\n    }\n    return this.finishNode(node, \"Decorator\");\n  }\n  parseMaybeDecoratorArguments(expr) {\n    if (this.eat(10)) {\n      const node = this.startNodeAtNode(expr);\n      node.callee = expr;\n      node.arguments = this.parseCallExpressionArguments(11, false);\n      this.toReferencedList(node.arguments);\n      return this.finishNode(node, \"CallExpression\");\n    }\n    return expr;\n  }\n  parseBreakContinueStatement(node, isBreak) {\n    this.next();\n    if (this.isLineTerminator()) {\n      node.label = null;\n    } else {\n      node.label = this.parseIdentifier();\n      this.semicolon();\n    }\n    this.verifyBreakContinue(node, isBreak);\n    return this.finishNode(node, isBreak ? \"BreakStatement\" : \"ContinueStatement\");\n  }\n  verifyBreakContinue(node, isBreak) {\n    let i;\n    for (i = 0; i < this.state.labels.length; ++i) {\n      const lab = this.state.labels[i];\n      if (node.label == null || lab.name === node.label.name) {\n        if (lab.kind != null && (isBreak || lab.kind === \"loop\")) break;\n        if (node.label && isBreak) break;\n      }\n    }\n    if (i === this.state.labels.length) {\n      const type = isBreak ? \"BreakStatement\" : \"ContinueStatement\";\n      this.raise(Errors.IllegalBreakContinue, {\n        at: node,\n        type\n      });\n    }\n  }\n  parseDebuggerStatement(node) {\n    this.next();\n    this.semicolon();\n    return this.finishNode(node, \"DebuggerStatement\");\n  }\n  parseHeaderExpression() {\n    this.expect(10);\n    const val = this.parseExpression();\n    this.expect(11);\n    return val;\n  }\n  parseDoWhileStatement(node) {\n    this.next();\n    this.state.labels.push(loopLabel);\n    node.body = this.withSmartMixTopicForbiddingContext(() => this.parseStatement());\n    this.state.labels.pop();\n    this.expect(92);\n    node.test = this.parseHeaderExpression();\n    this.eat(13);\n    return this.finishNode(node, \"DoWhileStatement\");\n  }\n  parseForStatement(node) {\n    this.next();\n    this.state.labels.push(loopLabel);\n    let awaitAt = null;\n    if (this.isAwaitAllowed() && this.eatContextual(96)) {\n      awaitAt = this.state.lastTokStartLoc;\n    }\n    this.scope.enter(SCOPE_OTHER);\n    this.expect(10);\n    if (this.match(13)) {\n      if (awaitAt !== null) {\n        this.unexpected(awaitAt);\n      }\n      return this.parseFor(node, null);\n    }\n    const startsWithLet = this.isContextual(99);\n    const startsWithUsing = this.isContextual(105) && !this.hasFollowingLineBreak();\n    const isLetOrUsing = startsWithLet && this.hasFollowingBindingAtom() || startsWithUsing && this.hasFollowingBindingIdentifier() && this.startsUsingForOf();\n    if (this.match(74) || this.match(75) || isLetOrUsing) {\n      const initNode = this.startNode();\n      const kind = this.state.value;\n      this.next();\n      this.parseVar(initNode, true, kind);\n      const init = this.finishNode(initNode, \"VariableDeclaration\");\n      const isForIn = this.match(58);\n      if (isForIn && startsWithUsing) {\n        this.raise(Errors.ForInUsing, {\n          at: init\n        });\n      }\n      if ((isForIn || this.isContextual(101)) && init.declarations.length === 1) {\n        return this.parseForIn(node, init, awaitAt);\n      }\n      if (awaitAt !== null) {\n        this.unexpected(awaitAt);\n      }\n      return this.parseFor(node, init);\n    }\n    const startsWithAsync = this.isContextual(95);\n    const refExpressionErrors = new ExpressionErrors();\n    const init = this.parseExpression(true, refExpressionErrors);\n    const isForOf = this.isContextual(101);\n    if (isForOf) {\n      if (startsWithLet) {\n        this.raise(Errors.ForOfLet, {\n          at: init\n        });\n      }\n      if (awaitAt === null && startsWithAsync && init.type === \"Identifier\") {\n        this.raise(Errors.ForOfAsync, {\n          at: init\n        });\n      }\n    }\n    if (isForOf || this.match(58)) {\n      this.checkDestructuringPrivate(refExpressionErrors);\n      this.toAssignable(init, true);\n      const type = isForOf ? \"ForOfStatement\" : \"ForInStatement\";\n      this.checkLVal(init, {\n        in: {\n          type\n        }\n      });\n      return this.parseForIn(node, init, awaitAt);\n    } else {\n      this.checkExpressionErrors(refExpressionErrors, true);\n    }\n    if (awaitAt !== null) {\n      this.unexpected(awaitAt);\n    }\n    return this.parseFor(node, init);\n  }\n  parseFunctionStatement(node, isAsync, isHangingDeclaration) {\n    this.next();\n    return this.parseFunction(node, 1 | (isHangingDeclaration ? 2 : 0) | (isAsync ? 8 : 0));\n  }\n  parseIfStatement(node) {\n    this.next();\n    node.test = this.parseHeaderExpression();\n    node.consequent = this.parseStatementOrSloppyAnnexBFunctionDeclaration();\n    node.alternate = this.eat(66) ? this.parseStatementOrSloppyAnnexBFunctionDeclaration() : null;\n    return this.finishNode(node, \"IfStatement\");\n  }\n  parseReturnStatement(node) {\n    if (!this.prodParam.hasReturn && !this.options.allowReturnOutsideFunction) {\n      this.raise(Errors.IllegalReturn, {\n        at: this.state.startLoc\n      });\n    }\n    this.next();\n    if (this.isLineTerminator()) {\n      node.argument = null;\n    } else {\n      node.argument = this.parseExpression();\n      this.semicolon();\n    }\n    return this.finishNode(node, \"ReturnStatement\");\n  }\n  parseSwitchStatement(node) {\n    this.next();\n    node.discriminant = this.parseHeaderExpression();\n    const cases = node.cases = [];\n    this.expect(5);\n    this.state.labels.push(switchLabel);\n    this.scope.enter(SCOPE_OTHER);\n    let cur;\n    for (let sawDefault; !this.match(8);) {\n      if (this.match(61) || this.match(65)) {\n        const isCase = this.match(61);\n        if (cur) this.finishNode(cur, \"SwitchCase\");\n        cases.push(cur = this.startNode());\n        cur.consequent = [];\n        this.next();\n        if (isCase) {\n          cur.test = this.parseExpression();\n        } else {\n          if (sawDefault) {\n            this.raise(Errors.MultipleDefaultsInSwitch, {\n              at: this.state.lastTokStartLoc\n            });\n          }\n          sawDefault = true;\n          cur.test = null;\n        }\n        this.expect(14);\n      } else {\n        if (cur) {\n          cur.consequent.push(this.parseStatementListItem());\n        } else {\n          this.unexpected();\n        }\n      }\n    }\n    this.scope.exit();\n    if (cur) this.finishNode(cur, \"SwitchCase\");\n    this.next();\n    this.state.labels.pop();\n    return this.finishNode(node, \"SwitchStatement\");\n  }\n  parseThrowStatement(node) {\n    this.next();\n    if (this.hasPrecedingLineBreak()) {\n      this.raise(Errors.NewlineAfterThrow, {\n        at: this.state.lastTokEndLoc\n      });\n    }\n    node.argument = this.parseExpression();\n    this.semicolon();\n    return this.finishNode(node, \"ThrowStatement\");\n  }\n  parseCatchClauseParam() {\n    const param = this.parseBindingAtom();\n    this.scope.enter(this.options.annexB && param.type === \"Identifier\" ? SCOPE_SIMPLE_CATCH : 0);\n    this.checkLVal(param, {\n      in: {\n        type: \"CatchClause\"\n      },\n      binding: BIND_CATCH_PARAM\n    });\n    return param;\n  }\n  parseTryStatement(node) {\n    this.next();\n    node.block = this.parseBlock();\n    node.handler = null;\n    if (this.match(62)) {\n      const clause = this.startNode();\n      this.next();\n      if (this.match(10)) {\n        this.expect(10);\n        clause.param = this.parseCatchClauseParam();\n        this.expect(11);\n      } else {\n        clause.param = null;\n        this.scope.enter(SCOPE_OTHER);\n      }\n      clause.body = this.withSmartMixTopicForbiddingContext(() => this.parseBlock(false, false));\n      this.scope.exit();\n      node.handler = this.finishNode(clause, \"CatchClause\");\n    }\n    node.finalizer = this.eat(67) ? this.parseBlock() : null;\n    if (!node.handler && !node.finalizer) {\n      this.raise(Errors.NoCatchOrFinally, {\n        at: node\n      });\n    }\n    return this.finishNode(node, \"TryStatement\");\n  }\n  parseVarStatement(node, kind, allowMissingInitializer = false) {\n    this.next();\n    this.parseVar(node, false, kind, allowMissingInitializer);\n    this.semicolon();\n    return this.finishNode(node, \"VariableDeclaration\");\n  }\n  parseWhileStatement(node) {\n    this.next();\n    node.test = this.parseHeaderExpression();\n    this.state.labels.push(loopLabel);\n    node.body = this.withSmartMixTopicForbiddingContext(() => this.parseStatement());\n    this.state.labels.pop();\n    return this.finishNode(node, \"WhileStatement\");\n  }\n  parseWithStatement(node) {\n    if (this.state.strict) {\n      this.raise(Errors.StrictWith, {\n        at: this.state.startLoc\n      });\n    }\n    this.next();\n    node.object = this.parseHeaderExpression();\n    node.body = this.withSmartMixTopicForbiddingContext(() => this.parseStatement());\n    return this.finishNode(node, \"WithStatement\");\n  }\n  parseEmptyStatement(node) {\n    this.next();\n    return this.finishNode(node, \"EmptyStatement\");\n  }\n  parseLabeledStatement(node, maybeName, expr, flags) {\n    for (const label of this.state.labels) {\n      if (label.name === maybeName) {\n        this.raise(Errors.LabelRedeclaration, {\n          at: expr,\n          labelName: maybeName\n        });\n      }\n    }\n    const kind = tokenIsLoop(this.state.type) ? \"loop\" : this.match(71) ? \"switch\" : null;\n    for (let i = this.state.labels.length - 1; i >= 0; i--) {\n      const label = this.state.labels[i];\n      if (label.statementStart === node.start) {\n        label.statementStart = this.state.start;\n        label.kind = kind;\n      } else {\n        break;\n      }\n    }\n    this.state.labels.push({\n      name: maybeName,\n      kind: kind,\n      statementStart: this.state.start\n    });\n    node.body = flags & 8 ? this.parseStatementOrSloppyAnnexBFunctionDeclaration(true) : this.parseStatement();\n    this.state.labels.pop();\n    node.label = expr;\n    return this.finishNode(node, \"LabeledStatement\");\n  }\n  parseExpressionStatement(node, expr, decorators) {\n    node.expression = expr;\n    this.semicolon();\n    return this.finishNode(node, \"ExpressionStatement\");\n  }\n  parseBlock(allowDirectives = false, createNewLexicalScope = true, afterBlockParse) {\n    const node = this.startNode();\n    if (allowDirectives) {\n      this.state.strictErrors.clear();\n    }\n    this.expect(5);\n    if (createNewLexicalScope) {\n      this.scope.enter(SCOPE_OTHER);\n    }\n    this.parseBlockBody(node, allowDirectives, false, 8, afterBlockParse);\n    if (createNewLexicalScope) {\n      this.scope.exit();\n    }\n    return this.finishNode(node, \"BlockStatement\");\n  }\n  isValidDirective(stmt) {\n    return stmt.type === \"ExpressionStatement\" && stmt.expression.type === \"StringLiteral\" && !stmt.expression.extra.parenthesized;\n  }\n  parseBlockBody(node, allowDirectives, topLevel, end, afterBlockParse) {\n    const body = node.body = [];\n    const directives = node.directives = [];\n    this.parseBlockOrModuleBlockBody(body, allowDirectives ? directives : undefined, topLevel, end, afterBlockParse);\n  }\n  parseBlockOrModuleBlockBody(body, directives, topLevel, end, afterBlockParse) {\n    const oldStrict = this.state.strict;\n    let hasStrictModeDirective = false;\n    let parsedNonDirective = false;\n    while (!this.match(end)) {\n      const stmt = topLevel ? this.parseModuleItem() : this.parseStatementListItem();\n      if (directives && !parsedNonDirective) {\n        if (this.isValidDirective(stmt)) {\n          const directive = this.stmtToDirective(stmt);\n          directives.push(directive);\n          if (!hasStrictModeDirective && directive.value.value === \"use strict\") {\n            hasStrictModeDirective = true;\n            this.setStrict(true);\n          }\n          continue;\n        }\n        parsedNonDirective = true;\n        this.state.strictErrors.clear();\n      }\n      body.push(stmt);\n    }\n    if (afterBlockParse) {\n      afterBlockParse.call(this, hasStrictModeDirective);\n    }\n    if (!oldStrict) {\n      this.setStrict(false);\n    }\n    this.next();\n  }\n  parseFor(node, init) {\n    node.init = init;\n    this.semicolon(false);\n    node.test = this.match(13) ? null : this.parseExpression();\n    this.semicolon(false);\n    node.update = this.match(11) ? null : this.parseExpression();\n    this.expect(11);\n    node.body = this.withSmartMixTopicForbiddingContext(() => this.parseStatement());\n    this.scope.exit();\n    this.state.labels.pop();\n    return this.finishNode(node, \"ForStatement\");\n  }\n  parseForIn(node, init, awaitAt) {\n    const isForIn = this.match(58);\n    this.next();\n    if (isForIn) {\n      if (awaitAt !== null) this.unexpected(awaitAt);\n    } else {\n      node.await = awaitAt !== null;\n    }\n    if (init.type === \"VariableDeclaration\" && init.declarations[0].init != null && (!isForIn || !this.options.annexB || this.state.strict || init.kind !== \"var\" || init.declarations[0].id.type !== \"Identifier\")) {\n      this.raise(Errors.ForInOfLoopInitializer, {\n        at: init,\n        type: isForIn ? \"ForInStatement\" : \"ForOfStatement\"\n      });\n    }\n    if (init.type === \"AssignmentPattern\") {\n      this.raise(Errors.InvalidLhs, {\n        at: init,\n        ancestor: {\n          type: \"ForStatement\"\n        }\n      });\n    }\n    node.left = init;\n    node.right = isForIn ? this.parseExpression() : this.parseMaybeAssignAllowIn();\n    this.expect(11);\n    node.body = this.withSmartMixTopicForbiddingContext(() => this.parseStatement());\n    this.scope.exit();\n    this.state.labels.pop();\n    return this.finishNode(node, isForIn ? \"ForInStatement\" : \"ForOfStatement\");\n  }\n  parseVar(node, isFor, kind, allowMissingInitializer = false) {\n    const declarations = node.declarations = [];\n    node.kind = kind;\n    for (;;) {\n      const decl = this.startNode();\n      this.parseVarId(decl, kind);\n      decl.init = !this.eat(29) ? null : isFor ? this.parseMaybeAssignDisallowIn() : this.parseMaybeAssignAllowIn();\n      if (decl.init === null && !allowMissingInitializer) {\n        if (decl.id.type !== \"Identifier\" && !(isFor && (this.match(58) || this.isContextual(101)))) {\n          this.raise(Errors.DeclarationMissingInitializer, {\n            at: this.state.lastTokEndLoc,\n            kind: \"destructuring\"\n          });\n        } else if (kind === \"const\" && !(this.match(58) || this.isContextual(101))) {\n          this.raise(Errors.DeclarationMissingInitializer, {\n            at: this.state.lastTokEndLoc,\n            kind: \"const\"\n          });\n        }\n      }\n      declarations.push(this.finishNode(decl, \"VariableDeclarator\"));\n      if (!this.eat(12)) break;\n    }\n    return node;\n  }\n  parseVarId(decl, kind) {\n    if (kind === \"using\" && !this.inModule && this.match(96)) {\n      this.raise(Errors.AwaitInUsingBinding, {\n        at: this.state.startLoc\n      });\n    }\n    const id = this.parseBindingAtom();\n    this.checkLVal(id, {\n      in: {\n        type: \"VariableDeclarator\"\n      },\n      binding: kind === \"var\" ? BIND_VAR : BIND_LEXICAL\n    });\n    decl.id = id;\n  }\n  parseAsyncFunctionExpression(node) {\n    return this.parseFunction(node, 8);\n  }\n  parseFunction(node, flags = 0) {\n    const hangingDeclaration = flags & 2;\n    const isDeclaration = !!(flags & 1);\n    const requireId = isDeclaration && !(flags & 4);\n    const isAsync = !!(flags & 8);\n    this.initFunction(node, isAsync);\n    if (this.match(55)) {\n      if (hangingDeclaration) {\n        this.raise(Errors.GeneratorInSingleStatementContext, {\n          at: this.state.startLoc\n        });\n      }\n      this.next();\n      node.generator = true;\n    }\n    if (isDeclaration) {\n      node.id = this.parseFunctionId(requireId);\n    }\n    const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;\n    this.state.maybeInArrowParameters = false;\n    this.scope.enter(SCOPE_FUNCTION);\n    this.prodParam.enter(functionFlags(isAsync, node.generator));\n    if (!isDeclaration) {\n      node.id = this.parseFunctionId();\n    }\n    this.parseFunctionParams(node, false);\n    this.withSmartMixTopicForbiddingContext(() => {\n      this.parseFunctionBodyAndFinish(node, isDeclaration ? \"FunctionDeclaration\" : \"FunctionExpression\");\n    });\n    this.prodParam.exit();\n    this.scope.exit();\n    if (isDeclaration && !hangingDeclaration) {\n      this.registerFunctionStatementId(node);\n    }\n    this.state.maybeInArrowParameters = oldMaybeInArrowParameters;\n    return node;\n  }\n  parseFunctionId(requireId) {\n    return requireId || tokenIsIdentifier(this.state.type) ? this.parseIdentifier() : null;\n  }\n  parseFunctionParams(node, isConstructor) {\n    this.expect(10);\n    this.expressionScope.enter(newParameterDeclarationScope());\n    node.params = this.parseBindingList(11, 41, 2 | (isConstructor ? 4 : 0));\n    this.expressionScope.exit();\n  }\n  registerFunctionStatementId(node) {\n    if (!node.id) return;\n    this.scope.declareName(node.id.name, !this.options.annexB || this.state.strict || node.generator || node.async ? this.scope.treatFunctionsAsVar ? BIND_VAR : BIND_LEXICAL : BIND_FUNCTION, node.id.loc.start);\n  }\n  parseClass(node, isStatement, optionalId) {\n    this.next();\n    const oldStrict = this.state.strict;\n    this.state.strict = true;\n    this.parseClassId(node, isStatement, optionalId);\n    this.parseClassSuper(node);\n    node.body = this.parseClassBody(!!node.superClass, oldStrict);\n    return this.finishNode(node, isStatement ? \"ClassDeclaration\" : \"ClassExpression\");\n  }\n  isClassProperty() {\n    return this.match(29) || this.match(13) || this.match(8);\n  }\n  isClassMethod() {\n    return this.match(10);\n  }\n  isNonstaticConstructor(method) {\n    return !method.computed && !method.static && (method.key.name === \"constructor\" || method.key.value === \"constructor\");\n  }\n  parseClassBody(hadSuperClass, oldStrict) {\n    this.classScope.enter();\n    const state = {\n      hadConstructor: false,\n      hadSuperClass\n    };\n    let decorators = [];\n    const classBody = this.startNode();\n    classBody.body = [];\n    this.expect(5);\n    this.withSmartMixTopicForbiddingContext(() => {\n      while (!this.match(8)) {\n        if (this.eat(13)) {\n          if (decorators.length > 0) {\n            throw this.raise(Errors.DecoratorSemicolon, {\n              at: this.state.lastTokEndLoc\n            });\n          }\n          continue;\n        }\n        if (this.match(26)) {\n          decorators.push(this.parseDecorator());\n          continue;\n        }\n        const member = this.startNode();\n        if (decorators.length) {\n          member.decorators = decorators;\n          this.resetStartLocationFromNode(member, decorators[0]);\n          decorators = [];\n        }\n        this.parseClassMember(classBody, member, state);\n        if (member.kind === \"constructor\" && member.decorators && member.decorators.length > 0) {\n          this.raise(Errors.DecoratorConstructor, {\n            at: member\n          });\n        }\n      }\n    });\n    this.state.strict = oldStrict;\n    this.next();\n    if (decorators.length) {\n      throw this.raise(Errors.TrailingDecorator, {\n        at: this.state.startLoc\n      });\n    }\n    this.classScope.exit();\n    return this.finishNode(classBody, \"ClassBody\");\n  }\n  parseClassMemberFromModifier(classBody, member) {\n    const key = this.parseIdentifier(true);\n    if (this.isClassMethod()) {\n      const method = member;\n      method.kind = \"method\";\n      method.computed = false;\n      method.key = key;\n      method.static = false;\n      this.pushClassMethod(classBody, method, false, false, false, false);\n      return true;\n    } else if (this.isClassProperty()) {\n      const prop = member;\n      prop.computed = false;\n      prop.key = key;\n      prop.static = false;\n      classBody.body.push(this.parseClassProperty(prop));\n      return true;\n    }\n    this.resetPreviousNodeTrailingComments(key);\n    return false;\n  }\n  parseClassMember(classBody, member, state) {\n    const isStatic = this.isContextual(104);\n    if (isStatic) {\n      if (this.parseClassMemberFromModifier(classBody, member)) {\n        return;\n      }\n      if (this.eat(5)) {\n        this.parseClassStaticBlock(classBody, member);\n        return;\n      }\n    }\n    this.parseClassMemberWithIsStatic(classBody, member, state, isStatic);\n  }\n  parseClassMemberWithIsStatic(classBody, member, state, isStatic) {\n    const publicMethod = member;\n    const privateMethod = member;\n    const publicProp = member;\n    const privateProp = member;\n    const accessorProp = member;\n    const method = publicMethod;\n    const publicMember = publicMethod;\n    member.static = isStatic;\n    this.parsePropertyNamePrefixOperator(member);\n    if (this.eat(55)) {\n      method.kind = \"method\";\n      const isPrivateName = this.match(136);\n      this.parseClassElementName(method);\n      if (isPrivateName) {\n        this.pushClassPrivateMethod(classBody, privateMethod, true, false);\n        return;\n      }\n      if (this.isNonstaticConstructor(publicMethod)) {\n        this.raise(Errors.ConstructorIsGenerator, {\n          at: publicMethod.key\n        });\n      }\n      this.pushClassMethod(classBody, publicMethod, true, false, false, false);\n      return;\n    }\n    const isContextual = tokenIsIdentifier(this.state.type) && !this.state.containsEsc;\n    const isPrivate = this.match(136);\n    const key = this.parseClassElementName(member);\n    const maybeQuestionTokenStartLoc = this.state.startLoc;\n    this.parsePostMemberNameModifiers(publicMember);\n    if (this.isClassMethod()) {\n      method.kind = \"method\";\n      if (isPrivate) {\n        this.pushClassPrivateMethod(classBody, privateMethod, false, false);\n        return;\n      }\n      const isConstructor = this.isNonstaticConstructor(publicMethod);\n      let allowsDirectSuper = false;\n      if (isConstructor) {\n        publicMethod.kind = \"constructor\";\n        if (state.hadConstructor && !this.hasPlugin(\"typescript\")) {\n          this.raise(Errors.DuplicateConstructor, {\n            at: key\n          });\n        }\n        if (isConstructor && this.hasPlugin(\"typescript\") && member.override) {\n          this.raise(Errors.OverrideOnConstructor, {\n            at: key\n          });\n        }\n        state.hadConstructor = true;\n        allowsDirectSuper = state.hadSuperClass;\n      }\n      this.pushClassMethod(classBody, publicMethod, false, false, isConstructor, allowsDirectSuper);\n    } else if (this.isClassProperty()) {\n      if (isPrivate) {\n        this.pushClassPrivateProperty(classBody, privateProp);\n      } else {\n        this.pushClassProperty(classBody, publicProp);\n      }\n    } else if (isContextual && key.name === \"async\" && !this.isLineTerminator()) {\n      this.resetPreviousNodeTrailingComments(key);\n      const isGenerator = this.eat(55);\n      if (publicMember.optional) {\n        this.unexpected(maybeQuestionTokenStartLoc);\n      }\n      method.kind = \"method\";\n      const isPrivate = this.match(136);\n      this.parseClassElementName(method);\n      this.parsePostMemberNameModifiers(publicMember);\n      if (isPrivate) {\n        this.pushClassPrivateMethod(classBody, privateMethod, isGenerator, true);\n      } else {\n        if (this.isNonstaticConstructor(publicMethod)) {\n          this.raise(Errors.ConstructorIsAsync, {\n            at: publicMethod.key\n          });\n        }\n        this.pushClassMethod(classBody, publicMethod, isGenerator, true, false, false);\n      }\n    } else if (isContextual && (key.name === \"get\" || key.name === \"set\") && !(this.match(55) && this.isLineTerminator())) {\n      this.resetPreviousNodeTrailingComments(key);\n      method.kind = key.name;\n      const isPrivate = this.match(136);\n      this.parseClassElementName(publicMethod);\n      if (isPrivate) {\n        this.pushClassPrivateMethod(classBody, privateMethod, false, false);\n      } else {\n        if (this.isNonstaticConstructor(publicMethod)) {\n          this.raise(Errors.ConstructorIsAccessor, {\n            at: publicMethod.key\n          });\n        }\n        this.pushClassMethod(classBody, publicMethod, false, false, false, false);\n      }\n      this.checkGetterSetterParams(publicMethod);\n    } else if (isContextual && key.name === \"accessor\" && !this.isLineTerminator()) {\n      this.expectPlugin(\"decoratorAutoAccessors\");\n      this.resetPreviousNodeTrailingComments(key);\n      const isPrivate = this.match(136);\n      this.parseClassElementName(publicProp);\n      this.pushClassAccessorProperty(classBody, accessorProp, isPrivate);\n    } else if (this.isLineTerminator()) {\n      if (isPrivate) {\n        this.pushClassPrivateProperty(classBody, privateProp);\n      } else {\n        this.pushClassProperty(classBody, publicProp);\n      }\n    } else {\n      this.unexpected();\n    }\n  }\n  parseClassElementName(member) {\n    const {\n      type,\n      value\n    } = this.state;\n    if ((type === 130 || type === 131) && member.static && value === \"prototype\") {\n      this.raise(Errors.StaticPrototype, {\n        at: this.state.startLoc\n      });\n    }\n    if (type === 136) {\n      if (value === \"constructor\") {\n        this.raise(Errors.ConstructorClassPrivateField, {\n          at: this.state.startLoc\n        });\n      }\n      const key = this.parsePrivateName();\n      member.key = key;\n      return key;\n    }\n    return this.parsePropertyName(member);\n  }\n  parseClassStaticBlock(classBody, member) {\n    var _member$decorators;\n    this.scope.enter(SCOPE_CLASS | SCOPE_STATIC_BLOCK | SCOPE_SUPER);\n    const oldLabels = this.state.labels;\n    this.state.labels = [];\n    this.prodParam.enter(PARAM);\n    const body = member.body = [];\n    this.parseBlockOrModuleBlockBody(body, undefined, false, 8);\n    this.prodParam.exit();\n    this.scope.exit();\n    this.state.labels = oldLabels;\n    classBody.body.push(this.finishNode(member, \"StaticBlock\"));\n    if ((_member$decorators = member.decorators) != null && _member$decorators.length) {\n      this.raise(Errors.DecoratorStaticBlock, {\n        at: member\n      });\n    }\n  }\n  pushClassProperty(classBody, prop) {\n    if (!prop.computed && (prop.key.name === \"constructor\" || prop.key.value === \"constructor\")) {\n      this.raise(Errors.ConstructorClassField, {\n        at: prop.key\n      });\n    }\n    classBody.body.push(this.parseClassProperty(prop));\n  }\n  pushClassPrivateProperty(classBody, prop) {\n    const node = this.parseClassPrivateProperty(prop);\n    classBody.body.push(node);\n    this.classScope.declarePrivateName(this.getPrivateNameSV(node.key), CLASS_ELEMENT_OTHER, node.key.loc.start);\n  }\n  pushClassAccessorProperty(classBody, prop, isPrivate) {\n    if (!isPrivate && !prop.computed) {\n      const key = prop.key;\n      if (key.name === \"constructor\" || key.value === \"constructor\") {\n        this.raise(Errors.ConstructorClassField, {\n          at: key\n        });\n      }\n    }\n    const node = this.parseClassAccessorProperty(prop);\n    classBody.body.push(node);\n    if (isPrivate) {\n      this.classScope.declarePrivateName(this.getPrivateNameSV(node.key), CLASS_ELEMENT_OTHER, node.key.loc.start);\n    }\n  }\n  pushClassMethod(classBody, method, isGenerator, isAsync, isConstructor, allowsDirectSuper) {\n    classBody.body.push(this.parseMethod(method, isGenerator, isAsync, isConstructor, allowsDirectSuper, \"ClassMethod\", true));\n  }\n  pushClassPrivateMethod(classBody, method, isGenerator, isAsync) {\n    const node = this.parseMethod(method, isGenerator, isAsync, false, false, \"ClassPrivateMethod\", true);\n    classBody.body.push(node);\n    const kind = node.kind === \"get\" ? node.static ? CLASS_ELEMENT_STATIC_GETTER : CLASS_ELEMENT_INSTANCE_GETTER : node.kind === \"set\" ? node.static ? CLASS_ELEMENT_STATIC_SETTER : CLASS_ELEMENT_INSTANCE_SETTER : CLASS_ELEMENT_OTHER;\n    this.declareClassPrivateMethodInScope(node, kind);\n  }\n  declareClassPrivateMethodInScope(node, kind) {\n    this.classScope.declarePrivateName(this.getPrivateNameSV(node.key), kind, node.key.loc.start);\n  }\n  parsePostMemberNameModifiers(methodOrProp) {}\n  parseClassPrivateProperty(node) {\n    this.parseInitializer(node);\n    this.semicolon();\n    return this.finishNode(node, \"ClassPrivateProperty\");\n  }\n  parseClassProperty(node) {\n    this.parseInitializer(node);\n    this.semicolon();\n    return this.finishNode(node, \"ClassProperty\");\n  }\n  parseClassAccessorProperty(node) {\n    this.parseInitializer(node);\n    this.semicolon();\n    return this.finishNode(node, \"ClassAccessorProperty\");\n  }\n  parseInitializer(node) {\n    this.scope.enter(SCOPE_CLASS | SCOPE_SUPER);\n    this.expressionScope.enter(newExpressionScope());\n    this.prodParam.enter(PARAM);\n    node.value = this.eat(29) ? this.parseMaybeAssignAllowIn() : null;\n    this.expressionScope.exit();\n    this.prodParam.exit();\n    this.scope.exit();\n  }\n  parseClassId(node, isStatement, optionalId, bindingType = BIND_CLASS) {\n    if (tokenIsIdentifier(this.state.type)) {\n      node.id = this.parseIdentifier();\n      if (isStatement) {\n        this.declareNameFromIdentifier(node.id, bindingType);\n      }\n    } else {\n      if (optionalId || !isStatement) {\n        node.id = null;\n      } else {\n        throw this.raise(Errors.MissingClassName, {\n          at: this.state.startLoc\n        });\n      }\n    }\n  }\n  parseClassSuper(node) {\n    node.superClass = this.eat(81) ? this.parseExprSubscripts() : null;\n  }\n  parseExport(node, decorators) {\n    const hasDefault = this.maybeParseExportDefaultSpecifier(node);\n    const parseAfterDefault = !hasDefault || this.eat(12);\n    const hasStar = parseAfterDefault && this.eatExportStar(node);\n    const hasNamespace = hasStar && this.maybeParseExportNamespaceSpecifier(node);\n    const parseAfterNamespace = parseAfterDefault && (!hasNamespace || this.eat(12));\n    const isFromRequired = hasDefault || hasStar;\n    if (hasStar && !hasNamespace) {\n      if (hasDefault) this.unexpected();\n      if (decorators) {\n        throw this.raise(Errors.UnsupportedDecoratorExport, {\n          at: node\n        });\n      }\n      this.parseExportFrom(node, true);\n      return this.finishNode(node, \"ExportAllDeclaration\");\n    }\n    const hasSpecifiers = this.maybeParseExportNamedSpecifiers(node);\n    if (hasDefault && parseAfterDefault && !hasStar && !hasSpecifiers) {\n      this.unexpected(null, 5);\n    }\n    if (hasNamespace && parseAfterNamespace) {\n      this.unexpected(null, 97);\n    }\n    let hasDeclaration;\n    if (isFromRequired || hasSpecifiers) {\n      hasDeclaration = false;\n      if (decorators) {\n        throw this.raise(Errors.UnsupportedDecoratorExport, {\n          at: node\n        });\n      }\n      this.parseExportFrom(node, isFromRequired);\n    } else {\n      hasDeclaration = this.maybeParseExportDeclaration(node);\n    }\n    if (isFromRequired || hasSpecifiers || hasDeclaration) {\n      var _node2$declaration;\n      const node2 = node;\n      this.checkExport(node2, true, false, !!node2.source);\n      if (((_node2$declaration = node2.declaration) == null ? void 0 : _node2$declaration.type) === \"ClassDeclaration\") {\n        this.maybeTakeDecorators(decorators, node2.declaration, node2);\n      } else if (decorators) {\n        throw this.raise(Errors.UnsupportedDecoratorExport, {\n          at: node\n        });\n      }\n      return this.finishNode(node2, \"ExportNamedDeclaration\");\n    }\n    if (this.eat(65)) {\n      const node2 = node;\n      const decl = this.parseExportDefaultExpression();\n      node2.declaration = decl;\n      if (decl.type === \"ClassDeclaration\") {\n        this.maybeTakeDecorators(decorators, decl, node2);\n      } else if (decorators) {\n        throw this.raise(Errors.UnsupportedDecoratorExport, {\n          at: node\n        });\n      }\n      this.checkExport(node2, true, true);\n      return this.finishNode(node2, \"ExportDefaultDeclaration\");\n    }\n    this.unexpected(null, 5);\n  }\n  eatExportStar(node) {\n    return this.eat(55);\n  }\n  maybeParseExportDefaultSpecifier(node) {\n    if (this.isExportDefaultSpecifier()) {\n      this.expectPlugin(\"exportDefaultFrom\");\n      const specifier = this.startNode();\n      specifier.exported = this.parseIdentifier(true);\n      node.specifiers = [this.finishNode(specifier, \"ExportDefaultSpecifier\")];\n      return true;\n    }\n    return false;\n  }\n  maybeParseExportNamespaceSpecifier(node) {\n    if (this.isContextual(93)) {\n      if (!node.specifiers) node.specifiers = [];\n      const specifier = this.startNodeAt(this.state.lastTokStartLoc);\n      this.next();\n      specifier.exported = this.parseModuleExportName();\n      node.specifiers.push(this.finishNode(specifier, \"ExportNamespaceSpecifier\"));\n      return true;\n    }\n    return false;\n  }\n  maybeParseExportNamedSpecifiers(node) {\n    if (this.match(5)) {\n      if (!node.specifiers) node.specifiers = [];\n      const isTypeExport = node.exportKind === \"type\";\n      node.specifiers.push(...this.parseExportSpecifiers(isTypeExport));\n      node.source = null;\n      node.declaration = null;\n      if (this.hasPlugin(\"importAssertions\")) {\n        node.assertions = [];\n      }\n      return true;\n    }\n    return false;\n  }\n  maybeParseExportDeclaration(node) {\n    if (this.shouldParseExportDeclaration()) {\n      node.specifiers = [];\n      node.source = null;\n      if (this.hasPlugin(\"importAssertions\")) {\n        node.assertions = [];\n      }\n      node.declaration = this.parseExportDeclaration(node);\n      return true;\n    }\n    return false;\n  }\n  isAsyncFunction() {\n    if (!this.isContextual(95)) return false;\n    const next = this.nextTokenStart();\n    return !lineBreak.test(this.input.slice(this.state.pos, next)) && this.isUnparsedContextual(next, \"function\");\n  }\n  parseExportDefaultExpression() {\n    const expr = this.startNode();\n    if (this.match(68)) {\n      this.next();\n      return this.parseFunction(expr, 1 | 4);\n    } else if (this.isAsyncFunction()) {\n      this.next();\n      this.next();\n      return this.parseFunction(expr, 1 | 4 | 8);\n    }\n    if (this.match(80)) {\n      return this.parseClass(expr, true, true);\n    }\n    if (this.match(26)) {\n      if (this.hasPlugin(\"decorators\") && this.getPluginOption(\"decorators\", \"decoratorsBeforeExport\") === true) {\n        this.raise(Errors.DecoratorBeforeExport, {\n          at: this.state.startLoc\n        });\n      }\n      return this.parseClass(this.maybeTakeDecorators(this.parseDecorators(false), this.startNode()), true, true);\n    }\n    if (this.match(75) || this.match(74) || this.isLet()) {\n      throw this.raise(Errors.UnsupportedDefaultExport, {\n        at: this.state.startLoc\n      });\n    }\n    const res = this.parseMaybeAssignAllowIn();\n    this.semicolon();\n    return res;\n  }\n  parseExportDeclaration(node) {\n    if (this.match(80)) {\n      const node = this.parseClass(this.startNode(), true, false);\n      return node;\n    }\n    return this.parseStatementListItem();\n  }\n  isExportDefaultSpecifier() {\n    const {\n      type\n    } = this.state;\n    if (tokenIsIdentifier(type)) {\n      if (type === 95 && !this.state.containsEsc || type === 99) {\n        return false;\n      }\n      if ((type === 128 || type === 127) && !this.state.containsEsc) {\n        const {\n          type: nextType\n        } = this.lookahead();\n        if (tokenIsIdentifier(nextType) && nextType !== 97 || nextType === 5) {\n          this.expectOnePlugin([\"flow\", \"typescript\"]);\n          return false;\n        }\n      }\n    } else if (!this.match(65)) {\n      return false;\n    }\n    const next = this.nextTokenStart();\n    const hasFrom = this.isUnparsedContextual(next, \"from\");\n    if (this.input.charCodeAt(next) === 44 || tokenIsIdentifier(this.state.type) && hasFrom) {\n      return true;\n    }\n    if (this.match(65) && hasFrom) {\n      const nextAfterFrom = this.input.charCodeAt(this.nextTokenStartSince(next + 4));\n      return nextAfterFrom === 34 || nextAfterFrom === 39;\n    }\n    return false;\n  }\n  parseExportFrom(node, expect) {\n    if (this.eatContextual(97)) {\n      node.source = this.parseImportSource();\n      this.checkExport(node);\n      const assertions = this.maybeParseImportAssertions();\n      if (assertions) {\n        node.assertions = assertions;\n        this.checkJSONModuleImport(node);\n      }\n    } else if (expect) {\n      this.unexpected();\n    }\n    this.semicolon();\n  }\n  shouldParseExportDeclaration() {\n    const {\n      type\n    } = this.state;\n    if (type === 26) {\n      this.expectOnePlugin([\"decorators\", \"decorators-legacy\"]);\n      if (this.hasPlugin(\"decorators\")) {\n        if (this.getPluginOption(\"decorators\", \"decoratorsBeforeExport\") === true) {\n          this.raise(Errors.DecoratorBeforeExport, {\n            at: this.state.startLoc\n          });\n        }\n        return true;\n      }\n    }\n    return type === 74 || type === 75 || type === 68 || type === 80 || this.isLet() || this.isAsyncFunction();\n  }\n  checkExport(node, checkNames, isDefault, isFrom) {\n    if (checkNames) {\n      if (isDefault) {\n        this.checkDuplicateExports(node, \"default\");\n        if (this.hasPlugin(\"exportDefaultFrom\")) {\n          var _declaration$extra;\n          const declaration = node.declaration;\n          if (declaration.type === \"Identifier\" && declaration.name === \"from\" && declaration.end - declaration.start === 4 && !((_declaration$extra = declaration.extra) != null && _declaration$extra.parenthesized)) {\n            this.raise(Errors.ExportDefaultFromAsIdentifier, {\n              at: declaration\n            });\n          }\n        }\n      } else if (node.specifiers && node.specifiers.length) {\n        for (const specifier of node.specifiers) {\n          const {\n            exported\n          } = specifier;\n          const exportName = exported.type === \"Identifier\" ? exported.name : exported.value;\n          this.checkDuplicateExports(specifier, exportName);\n          if (!isFrom && specifier.local) {\n            const {\n              local\n            } = specifier;\n            if (local.type !== \"Identifier\") {\n              this.raise(Errors.ExportBindingIsString, {\n                at: specifier,\n                localName: local.value,\n                exportName\n              });\n            } else {\n              this.checkReservedWord(local.name, local.loc.start, true, false);\n              this.scope.checkLocalExport(local);\n            }\n          }\n        }\n      } else if (node.declaration) {\n        if (node.declaration.type === \"FunctionDeclaration\" || node.declaration.type === \"ClassDeclaration\") {\n          const id = node.declaration.id;\n          if (!id) throw new Error(\"Assertion failure\");\n          this.checkDuplicateExports(node, id.name);\n        } else if (node.declaration.type === \"VariableDeclaration\") {\n          for (const declaration of node.declaration.declarations) {\n            this.checkDeclaration(declaration.id);\n          }\n        }\n      }\n    }\n  }\n  checkDeclaration(node) {\n    if (node.type === \"Identifier\") {\n      this.checkDuplicateExports(node, node.name);\n    } else if (node.type === \"ObjectPattern\") {\n      for (const prop of node.properties) {\n        this.checkDeclaration(prop);\n      }\n    } else if (node.type === \"ArrayPattern\") {\n      for (const elem of node.elements) {\n        if (elem) {\n          this.checkDeclaration(elem);\n        }\n      }\n    } else if (node.type === \"ObjectProperty\") {\n      this.checkDeclaration(node.value);\n    } else if (node.type === \"RestElement\") {\n      this.checkDeclaration(node.argument);\n    } else if (node.type === \"AssignmentPattern\") {\n      this.checkDeclaration(node.left);\n    }\n  }\n  checkDuplicateExports(node, exportName) {\n    if (this.exportedIdentifiers.has(exportName)) {\n      if (exportName === \"default\") {\n        this.raise(Errors.DuplicateDefaultExport, {\n          at: node\n        });\n      } else {\n        this.raise(Errors.DuplicateExport, {\n          at: node,\n          exportName\n        });\n      }\n    }\n    this.exportedIdentifiers.add(exportName);\n  }\n  parseExportSpecifiers(isInTypeExport) {\n    const nodes = [];\n    let first = true;\n    this.expect(5);\n    while (!this.eat(8)) {\n      if (first) {\n        first = false;\n      } else {\n        this.expect(12);\n        if (this.eat(8)) break;\n      }\n      const isMaybeTypeOnly = this.isContextual(128);\n      const isString = this.match(131);\n      const node = this.startNode();\n      node.local = this.parseModuleExportName();\n      nodes.push(this.parseExportSpecifier(node, isString, isInTypeExport, isMaybeTypeOnly));\n    }\n    return nodes;\n  }\n  parseExportSpecifier(node, isString, isInTypeExport, isMaybeTypeOnly) {\n    if (this.eatContextual(93)) {\n      node.exported = this.parseModuleExportName();\n    } else if (isString) {\n      node.exported = cloneStringLiteral(node.local);\n    } else if (!node.exported) {\n      node.exported = cloneIdentifier(node.local);\n    }\n    return this.finishNode(node, \"ExportSpecifier\");\n  }\n  parseModuleExportName() {\n    if (this.match(131)) {\n      const result = this.parseStringLiteral(this.state.value);\n      const surrogate = result.value.match(loneSurrogate);\n      if (surrogate) {\n        this.raise(Errors.ModuleExportNameHasLoneSurrogate, {\n          at: result,\n          surrogateCharCode: surrogate[0].charCodeAt(0)\n        });\n      }\n      return result;\n    }\n    return this.parseIdentifier(true);\n  }\n  isJSONModuleImport(node) {\n    if (node.assertions != null) {\n      return node.assertions.some(({\n        key,\n        value\n      }) => {\n        return value.value === \"json\" && (key.type === \"Identifier\" ? key.name === \"type\" : key.value === \"type\");\n      });\n    }\n    return false;\n  }\n  checkImportReflection(node) {\n    if (node.module) {\n      var _node$assertions;\n      if (node.specifiers.length !== 1 || node.specifiers[0].type !== \"ImportDefaultSpecifier\") {\n        this.raise(Errors.ImportReflectionNotBinding, {\n          at: node.specifiers[0].loc.start\n        });\n      }\n      if (((_node$assertions = node.assertions) == null ? void 0 : _node$assertions.length) > 0) {\n        this.raise(Errors.ImportReflectionHasAssertion, {\n          at: node.specifiers[0].loc.start\n        });\n      }\n    }\n  }\n  checkJSONModuleImport(node) {\n    if (this.isJSONModuleImport(node) && node.type !== \"ExportAllDeclaration\") {\n      const {\n        specifiers\n      } = node;\n      if (specifiers != null) {\n        const nonDefaultNamedSpecifier = specifiers.find(specifier => {\n          let imported;\n          if (specifier.type === \"ExportSpecifier\") {\n            imported = specifier.local;\n          } else if (specifier.type === \"ImportSpecifier\") {\n            imported = specifier.imported;\n          }\n          if (imported !== undefined) {\n            return imported.type === \"Identifier\" ? imported.name !== \"default\" : imported.value !== \"default\";\n          }\n        });\n        if (nonDefaultNamedSpecifier !== undefined) {\n          this.raise(Errors.ImportJSONBindingNotDefault, {\n            at: nonDefaultNamedSpecifier.loc.start\n          });\n        }\n      }\n    }\n  }\n  parseMaybeImportReflection(node) {\n    let isImportReflection = false;\n    if (this.isContextual(125)) {\n      const lookahead = this.lookahead();\n      const nextType = lookahead.type;\n      if (tokenIsIdentifier(nextType)) {\n        if (nextType !== 97) {\n          isImportReflection = true;\n        } else {\n          const nextNextTokenFirstChar = this.input.charCodeAt(this.nextTokenStartSince(lookahead.end));\n          if (nextNextTokenFirstChar === 102) {\n            isImportReflection = true;\n          }\n        }\n      } else if (nextType !== 12) {\n        isImportReflection = true;\n      }\n    }\n    if (isImportReflection) {\n      this.expectPlugin(\"importReflection\");\n      this.next();\n      node.module = true;\n    } else if (this.hasPlugin(\"importReflection\")) {\n      node.module = false;\n    }\n  }\n  parseImport(node) {\n    node.specifiers = [];\n    if (!this.match(131)) {\n      this.parseMaybeImportReflection(node);\n      const hasDefault = this.maybeParseDefaultImportSpecifier(node);\n      const parseNext = !hasDefault || this.eat(12);\n      const hasStar = parseNext && this.maybeParseStarImportSpecifier(node);\n      if (parseNext && !hasStar) this.parseNamedImportSpecifiers(node);\n      this.expectContextual(97);\n    }\n    node.source = this.parseImportSource();\n    const assertions = this.maybeParseImportAssertions();\n    if (assertions) {\n      node.assertions = assertions;\n    } else {\n      const attributes = this.maybeParseModuleAttributes();\n      if (attributes) {\n        node.attributes = attributes;\n      }\n    }\n    this.checkImportReflection(node);\n    this.checkJSONModuleImport(node);\n    this.semicolon();\n    return this.finishNode(node, \"ImportDeclaration\");\n  }\n  parseImportSource() {\n    if (!this.match(131)) this.unexpected();\n    return this.parseExprAtom();\n  }\n  shouldParseDefaultImport(node) {\n    return tokenIsIdentifier(this.state.type);\n  }\n  parseImportSpecifierLocal(node, specifier, type) {\n    specifier.local = this.parseIdentifier();\n    node.specifiers.push(this.finishImportSpecifier(specifier, type));\n  }\n  finishImportSpecifier(specifier, type, bindingType = BIND_LEXICAL) {\n    this.checkLVal(specifier.local, {\n      in: {\n        type\n      },\n      binding: bindingType\n    });\n    return this.finishNode(specifier, type);\n  }\n  parseAssertEntries() {\n    const attrs = [];\n    const attrNames = new Set();\n    do {\n      if (this.match(8)) {\n        break;\n      }\n      const node = this.startNode();\n      const keyName = this.state.value;\n      if (attrNames.has(keyName)) {\n        this.raise(Errors.ModuleAttributesWithDuplicateKeys, {\n          at: this.state.startLoc,\n          key: keyName\n        });\n      }\n      attrNames.add(keyName);\n      if (this.match(131)) {\n        node.key = this.parseStringLiteral(keyName);\n      } else {\n        node.key = this.parseIdentifier(true);\n      }\n      this.expect(14);\n      if (!this.match(131)) {\n        throw this.raise(Errors.ModuleAttributeInvalidValue, {\n          at: this.state.startLoc\n        });\n      }\n      node.value = this.parseStringLiteral(this.state.value);\n      attrs.push(this.finishNode(node, \"ImportAttribute\"));\n    } while (this.eat(12));\n    return attrs;\n  }\n  maybeParseModuleAttributes() {\n    if (this.match(76) && !this.hasPrecedingLineBreak()) {\n      this.expectPlugin(\"moduleAttributes\");\n      this.next();\n    } else {\n      if (this.hasPlugin(\"moduleAttributes\")) return [];\n      return null;\n    }\n    const attrs = [];\n    const attributes = new Set();\n    do {\n      const node = this.startNode();\n      node.key = this.parseIdentifier(true);\n      if (node.key.name !== \"type\") {\n        this.raise(Errors.ModuleAttributeDifferentFromType, {\n          at: node.key\n        });\n      }\n      if (attributes.has(node.key.name)) {\n        this.raise(Errors.ModuleAttributesWithDuplicateKeys, {\n          at: node.key,\n          key: node.key.name\n        });\n      }\n      attributes.add(node.key.name);\n      this.expect(14);\n      if (!this.match(131)) {\n        throw this.raise(Errors.ModuleAttributeInvalidValue, {\n          at: this.state.startLoc\n        });\n      }\n      node.value = this.parseStringLiteral(this.state.value);\n      this.finishNode(node, \"ImportAttribute\");\n      attrs.push(node);\n    } while (this.eat(12));\n    return attrs;\n  }\n  maybeParseImportAssertions() {\n    if (this.isContextual(94) && !this.hasPrecedingLineBreak()) {\n      this.expectPlugin(\"importAssertions\");\n      this.next();\n    } else {\n      if (this.hasPlugin(\"importAssertions\")) return [];\n      return null;\n    }\n    this.eat(5);\n    const attrs = this.parseAssertEntries();\n    this.eat(8);\n    return attrs;\n  }\n  maybeParseDefaultImportSpecifier(node) {\n    if (this.shouldParseDefaultImport(node)) {\n      this.parseImportSpecifierLocal(node, this.startNode(), \"ImportDefaultSpecifier\");\n      return true;\n    }\n    return false;\n  }\n  maybeParseStarImportSpecifier(node) {\n    if (this.match(55)) {\n      const specifier = this.startNode();\n      this.next();\n      this.expectContextual(93);\n      this.parseImportSpecifierLocal(node, specifier, \"ImportNamespaceSpecifier\");\n      return true;\n    }\n    return false;\n  }\n  parseNamedImportSpecifiers(node) {\n    let first = true;\n    this.expect(5);\n    while (!this.eat(8)) {\n      if (first) {\n        first = false;\n      } else {\n        if (this.eat(14)) {\n          throw this.raise(Errors.DestructureNamedImport, {\n            at: this.state.startLoc\n          });\n        }\n        this.expect(12);\n        if (this.eat(8)) break;\n      }\n      const specifier = this.startNode();\n      const importedIsString = this.match(131);\n      const isMaybeTypeOnly = this.isContextual(128);\n      specifier.imported = this.parseModuleExportName();\n      const importSpecifier = this.parseImportSpecifier(specifier, importedIsString, node.importKind === \"type\" || node.importKind === \"typeof\", isMaybeTypeOnly, undefined);\n      node.specifiers.push(importSpecifier);\n    }\n  }\n  parseImportSpecifier(specifier, importedIsString, isInTypeOnlyImport, isMaybeTypeOnly, bindingType) {\n    if (this.eatContextual(93)) {\n      specifier.local = this.parseIdentifier();\n    } else {\n      const {\n        imported\n      } = specifier;\n      if (importedIsString) {\n        throw this.raise(Errors.ImportBindingIsString, {\n          at: specifier,\n          importName: imported.value\n        });\n      }\n      this.checkReservedWord(imported.name, specifier.loc.start, true, true);\n      if (!specifier.local) {\n        specifier.local = cloneIdentifier(imported);\n      }\n    }\n    return this.finishImportSpecifier(specifier, \"ImportSpecifier\", bindingType);\n  }\n  isThisParam(param) {\n    return param.type === \"Identifier\" && param.name === \"this\";\n  }\n}\nclass Parser extends StatementParser {\n  constructor(options, input) {\n    options = getOptions(options);\n    super(options, input);\n    this.options = options;\n    this.initializeScopes();\n    this.plugins = pluginsMap(this.options.plugins);\n    this.filename = options.sourceFilename;\n  }\n  getScopeHandler() {\n    return ScopeHandler;\n  }\n  parse() {\n    this.enterInitialScopes();\n    const file = this.startNode();\n    const program = this.startNode();\n    this.nextToken();\n    file.errors = null;\n    this.parseTopLevel(file, program);\n    file.errors = this.state.errors;\n    return file;\n  }\n}\nfunction pluginsMap(plugins) {\n  const pluginMap = new Map();\n  for (const plugin of plugins) {\n    const [name, options] = Array.isArray(plugin) ? plugin : [plugin, {}];\n    if (!pluginMap.has(name)) pluginMap.set(name, options || {});\n  }\n  return pluginMap;\n}\nfunction parse(input, options) {\n  var _options;\n  if (((_options = options) == null ? void 0 : _options.sourceType) === \"unambiguous\") {\n    options = Object.assign({}, options);\n    try {\n      options.sourceType = \"module\";\n      const parser = getParser(options, input);\n      const ast = parser.parse();\n      if (parser.sawUnambiguousESM) {\n        return ast;\n      }\n      if (parser.ambiguousScriptDifferentAst) {\n        try {\n          options.sourceType = \"script\";\n          return getParser(options, input).parse();\n        } catch (_unused) {}\n      } else {\n        ast.program.sourceType = \"script\";\n      }\n      return ast;\n    } catch (moduleError) {\n      try {\n        options.sourceType = \"script\";\n        return getParser(options, input).parse();\n      } catch (_unused2) {}\n      throw moduleError;\n    }\n  } else {\n    return getParser(options, input).parse();\n  }\n}\nfunction parseExpression(input, options) {\n  const parser = getParser(options, input);\n  if (parser.options.strictMode) {\n    parser.state.strict = true;\n  }\n  return parser.getExpression();\n}\nfunction generateExportedTokenTypes(internalTokenTypes) {\n  const tokenTypes = {};\n  for (const typeName of Object.keys(internalTokenTypes)) {\n    tokenTypes[typeName] = getExportedToken(internalTokenTypes[typeName]);\n  }\n  return tokenTypes;\n}\nconst tokTypes = generateExportedTokenTypes(tt);\nfunction getParser(options, input) {\n  let cls = Parser;\n  if (options != null && options.plugins) {\n    validatePlugins(options.plugins);\n    cls = getParserClass(options.plugins);\n  }\n  return new cls(options, input);\n}\nconst parserClassCache = {};\nfunction getParserClass(pluginsFromOptions) {\n  const pluginList = mixinPluginNames.filter(name => hasPlugin(pluginsFromOptions, name));\n  const key = pluginList.join(\"/\");\n  let cls = parserClassCache[key];\n  if (!cls) {\n    cls = Parser;\n    for (const plugin of pluginList) {\n      cls = mixinPlugins[plugin](cls);\n    }\n    parserClassCache[key] = cls;\n  }\n  return cls;\n}\nexports.parse = parse;\nexports.parseExpression = parseExpression;\nexports.tokTypes = tokTypes;\n//# sourceMappingURL=index.js.map\n/typings/babel-parser.d.ts\u001b// This file is auto-generated! Do not modify it directly.\n/* eslint-disable import/no-extraneous-dependencies, @typescript-eslint/consistent-type-imports, prettier/prettier */\nimport * as _babel_types from '@babel/types';\n\ntype Plugin =\n  | \"asyncDoExpressions\"\n  | \"asyncGenerators\"\n  | \"bigInt\"\n  | \"classPrivateMethods\"\n  | \"classPrivateProperties\"\n  | \"classProperties\"\n  | \"classStaticBlock\" // Enabled by default\n  | \"decimal\"\n  | \"decorators-legacy\"\n  | \"decoratorAutoAccessors\"\n  | \"destructuringPrivate\"\n  | \"doExpressions\"\n  | \"dynamicImport\"\n  | \"explicitResourceManagement\"\n  | \"exportDefaultFrom\"\n  | \"exportNamespaceFrom\" // deprecated\n  | \"flow\"\n  | \"flowComments\"\n  | \"functionBind\"\n  | \"functionSent\"\n  | \"importMeta\"\n  | \"jsx\"\n  | \"logicalAssignment\"\n  | \"importAssertions\"\n  | \"importReflection\"\n  | \"moduleBlocks\"\n  | \"moduleStringNames\"\n  | \"nullishCoalescingOperator\"\n  | \"numericSeparator\"\n  | \"objectRestSpread\"\n  | \"optionalCatchBinding\"\n  | \"optionalChaining\"\n  | \"partialApplication\"\n  | \"placeholders\"\n  | \"privateIn\" // Enabled by default\n  | \"regexpUnicodeSets\"\n  | \"throwExpressions\"\n  | \"topLevelAwait\"\n  | \"v8intrinsic\"\n  | ParserPluginWithOptions[0];\n\ntype ParserPluginWithOptions =\n  | [\"decorators\", DecoratorsPluginOptions]\n  | [\"estree\", { classFeatures?: boolean }]\n  // @deprecated\n  | [\"moduleAttributes\", { version: \"may-2020\" }]\n  | [\"pipelineOperator\", PipelineOperatorPluginOptions]\n  | [\"recordAndTuple\", RecordAndTuplePluginOptions]\n  | [\"flow\", FlowPluginOptions]\n  | [\"typescript\", TypeScriptPluginOptions];\n\ntype PluginConfig = Plugin | ParserPluginWithOptions;\n\ninterface DecoratorsPluginOptions {\n  decoratorsBeforeExport?: boolean;\n  allowCallParenthesized?: boolean;\n}\n\ninterface PipelineOperatorPluginOptions {\n  proposal: \"minimal\" | \"fsharp\" | \"hack\" | \"smart\";\n  topicToken?: \"%\" | \"#\" | \"@@\" | \"^^\" | \"^\";\n}\n\ninterface RecordAndTuplePluginOptions {\n  syntaxType: \"bar\" | \"hash\";\n}\n\ninterface FlowPluginOptions {\n  all?: boolean;\n  enums?: boolean;\n}\n\ninterface TypeScriptPluginOptions {\n  dts?: boolean;\n  disallowAmbiguousJSXLike?: boolean;\n}\n\n// Type definitions for @babel/parser\n// Project: https://github.com/babel/babel/tree/main/packages/babel-parser\n// Definitions by: Troy Gerwien <https://github.com/yortus>\n//                 Marvin Hagemeister <https://github.com/marvinhagemeister>\n//                 Avi Vahl <https://github.com/AviVahl>\n// TypeScript Version: 2.9\n\n/**\n * Parse the provided code as an entire ECMAScript program.\n */\ndeclare function parse(\n  input: string,\n  options?: ParserOptions\n): ParseResult<_babel_types.File>;\n\n/**\n * Parse the provided code as a single expression.\n */\ndeclare function parseExpression(\n  input: string,\n  options?: ParserOptions\n): ParseResult<_babel_types.Expression>;\n\ninterface ParserOptions {\n  /**\n   * By default, import and export declarations can only appear at a program's top level.\n   * Setting this option to true allows them anywhere where a statement is allowed.\n   */\n  allowImportExportEverywhere?: boolean;\n\n  /**\n   * By default, await use is not allowed outside of an async function.\n   * Set this to true to accept such code.\n   */\n  allowAwaitOutsideFunction?: boolean;\n\n  /**\n   * By default, a return statement at the top level raises an error.\n   * Set this to true to accept such code.\n   */\n  allowReturnOutsideFunction?: boolean;\n\n  /**\n   * By default, new.target use is not allowed outside of a function or class.\n   * Set this to true to accept such code.\n   */\n  allowNewTargetOutsideFunction?: boolean;\n\n  allowSuperOutsideMethod?: boolean;\n\n  /**\n   * By default, exported identifiers must refer to a declared variable.\n   * Set this to true to allow export statements to reference undeclared variables.\n   */\n  allowUndeclaredExports?: boolean;\n\n  /**\n   * By default, Babel parser JavaScript code according to Annex B syntax.\n   * Set this to `false` to disable such behavior.\n   */\n  annexB?: boolean;\n\n  /**\n   * By default, Babel attaches comments to adjacent AST nodes.\n   * When this option is set to false, comments are not attached.\n   * It can provide up to 30% performance improvement when the input code has many comments.\n   * @babel/eslint-parser will set it for you.\n   * It is not recommended to use attachComment: false with Babel transform,\n   * as doing so removes all the comments in output code, and renders annotations such as\n   * /* istanbul ignore next *\\/ nonfunctional.\n   */\n  attachComment?: boolean;\n\n  /**\n   * By default, Babel always throws an error when it finds some invalid code.\n   * When this option is set to true, it will store the parsing error and\n   * try to continue parsing the invalid input file.\n   */\n  errorRecovery?: boolean;\n\n  /**\n   * Indicate the mode the code should be parsed in.\n   * Can be one of \"script\", \"module\", or \"unambiguous\". Defaults to \"script\".\n   * \"unambiguous\" will make @babel/parser attempt to guess, based on the presence\n   * of ES6 import or export statements.\n   * Files with ES6 imports and exports are considered \"module\" and are otherwise \"script\".\n   */\n  sourceType?: \"script\" | \"module\" | \"unambiguous\";\n\n  /**\n   * Correlate output AST nodes with their source filename.\n   * Useful when generating code and source maps from the ASTs of multiple input files.\n   */\n  sourceFilename?: string;\n\n  /**\n   * By default, the first line of code parsed is treated as line 1.\n   * You can provide a line number to alternatively start with.\n   * Useful for integration with other source tools.\n   */\n  startLine?: number;\n\n  /**\n   * By default, the parsed code is treated as if it starts from line 1, column 0.\n   * You can provide a column number to alternatively start with.\n   * Useful for integration with other source tools.\n   */\n  startColumn?: number;\n\n  /**\n   * Array containing the plugins that you want to enable.\n   */\n  plugins?: ParserPlugin[];\n\n  /**\n   * Should the parser work in strict mode.\n   * Defaults to true if sourceType === 'module'. Otherwise, false.\n   */\n  strictMode?: boolean;\n\n  /**\n   * Adds a ranges property to each node: [node.start, node.end]\n   */\n  ranges?: boolean;\n\n  /**\n   * Adds all parsed tokens to a tokens property on the File node.\n   */\n  tokens?: boolean;\n\n  /**\n   * By default, the parser adds information about parentheses by setting\n   * `extra.parenthesized` to `true` as needed.\n   * When this option is `true` the parser creates `ParenthesizedExpression`\n   * AST nodes instead of using the `extra` property.\n   */\n  createParenthesizedExpressions?: boolean;\n}\n\ntype ParserPlugin = PluginConfig;\n\n\ndeclare const tokTypes: {\n  // todo(flow->ts) real token type\n  [name: string]: any;\n};\n\ninterface ParseError {\n  code: string;\n  reasonCode: string;\n}\n\ntype ParseResult<Result> = Result & {\n  errors: ParseError[];\n};\n\nexport { DecoratorsPluginOptions, FlowPluginOptions, ParseError, ParseResult, ParserOptions, ParserPlugin, ParserPluginWithOptions, PipelineOperatorPluginOptions, RecordAndTuplePluginOptions, TypeScriptPluginOptions, parse, parseExpression, tokTypes };\n/lib/index.js.map\u0000\u0014c{\"version\":3,\"file\":\"index.js\",\"sources\":[\"../src/options.ts\",\"../src/tokenizer/context.ts\",\"../src/tokenizer/types.ts\",\"../src/util/location.ts\",\"../src/parse-error/credentials.ts\",\"../src/parse-error/module-errors.ts\",\"../src/parse-error/to-node-description.ts\",\"../src/parse-error/standard-errors.ts\",\"../src/parse-error/strict-mode-errors.ts\",\"../src/parse-error/pipeline-operator-errors.ts\",\"../src/parse-error.ts\",\"../src/plugins/estree.ts\",\"../../babel-helper-validator-identifier/src/identifier.ts\",\"../../babel-helper-validator-identifier/src/keyword.ts\",\"../src/util/identifier.ts\",\"../src/util/scopeflags.ts\",\"../src/util/scope.ts\",\"../src/plugins/flow/scope.ts\",\"../src/parser/base.ts\",\"../src/parser/comments.ts\",\"../src/util/whitespace.ts\",\"../src/tokenizer/state.ts\",\"../../babel-helper-string-parser/src/index.ts\",\"../src/tokenizer/index.ts\",\"../src/util/class-scope.ts\",\"../src/util/expression-scope.ts\",\"../src/util/production-parameter.ts\",\"../src/parser/util.ts\",\"../src/parser/node.ts\",\"../src/plugins/flow/index.ts\",\"../src/plugins/jsx/xhtml.ts\",\"../src/plugins/jsx/index.ts\",\"../src/plugins/typescript/scope.ts\",\"../src/parser/lval.ts\",\"../src/plugins/typescript/index.ts\",\"../src/plugins/placeholders.ts\",\"../src/plugins/v8intrinsic.ts\",\"../src/plugin-utils.ts\",\"../src/parser/expression.ts\",\"../src/parser/statement.ts\",\"../src/parser/index.ts\",\"../src/index.ts\"],\"sourcesContent\":[\"import type { PluginList } from \\\"./plugin-utils\\\";\\n\\n// A second optional argument can be given to further configure\\n// the parser process. These options are recognized:\\n\\nexport type SourceType = \\\"script\\\" | \\\"module\\\" | \\\"unambiguous\\\";\\n\\nexport type Options = {\\n  sourceType: SourceType;\\n  sourceFilename?: string;\\n  startColumn: number;\\n  startLine: number;\\n  allowAwaitOutsideFunction: boolean;\\n  allowReturnOutsideFunction: boolean;\\n  allowNewTargetOutsideFunction: boolean;\\n  allowImportExportEverywhere: boolean;\\n  allowSuperOutsideMethod: boolean;\\n  allowUndeclaredExports: boolean;\\n  plugins: PluginList;\\n  strictMode: boolean | undefined | null;\\n  ranges: boolean;\\n  tokens: boolean;\\n  createParenthesizedExpressions: boolean;\\n  errorRecovery: boolean;\\n  attachComment: boolean;\\n  annexB: boolean;\\n};\\n\\nexport const defaultOptions: Options = {\\n  // Source type (\\\"script\\\" or \\\"module\\\") for different semantics\\n  sourceType: \\\"script\\\",\\n  // Source filename.\\n  sourceFilename: undefined,\\n  // Column (0-based) from which to start counting source. Useful for\\n  // integration with other tools.\\n  startColumn: 0,\\n  // Line (1-based) from which to start counting source. Useful for\\n  // integration with other tools.\\n  startLine: 1,\\n  // When enabled, await at the top level is not considered an\\n  // error.\\n  allowAwaitOutsideFunction: false,\\n  // When enabled, a return at the top level is not considered an\\n  // error.\\n  allowReturnOutsideFunction: false,\\n  // When enabled, new.target outside a function or class is not\\n  // considered an error.\\n  allowNewTargetOutsideFunction: false,\\n  // When enabled, import/export statements are not constrained to\\n  // appearing at the top of the program.\\n  allowImportExportEverywhere: false,\\n  // TODO\\n  allowSuperOutsideMethod: false,\\n  // When enabled, export statements can reference undeclared variables.\\n  allowUndeclaredExports: false,\\n  // An array of plugins to enable\\n  plugins: [],\\n  // TODO\\n  strictMode: null,\\n  // Nodes have their start and end characters offsets recorded in\\n  // `start` and `end` properties (directly on the node, rather than\\n  // the `loc` object, which holds line/column data. To also add a\\n  // [semi-standardized][range] `range` property holding a `[start,\\n  // end]` array with the same numbers, set the `ranges` option to\\n  // `true`.\\n  //\\n  // [range]: https://bugzilla.mozilla.org/show_bug.cgi?id=745678\\n  ranges: false,\\n  // Adds all parsed tokens to a `tokens` property on the `File` node\\n  tokens: false,\\n  // Whether to create ParenthesizedExpression AST nodes (if false\\n  // the parser sets extra.parenthesized on the expression nodes instead).\\n  createParenthesizedExpressions: false,\\n  // When enabled, errors are attached to the AST instead of being directly thrown.\\n  // Some errors will still throw, because @babel/parser can't always recover.\\n  errorRecovery: false,\\n  // When enabled, comments will be attached to adjacent AST nodes as one of\\n  // `leadingComments`, `trailingComments` and `innerComments`. The comment attachment\\n  // is vital to preserve comments after transform. If you don't print AST back,\\n  // consider set this option to `false` for performance\\n  attachComment: true,\\n  // When enabled, the parser will support Annex B syntax.\\n  // https://tc39.es/ecma262/#sec-additional-ecmascript-features-for-web-browsers\\n  annexB: true,\\n};\\n\\n// Interpret and default an options object\\n\\nexport function getOptions(opts?: Options | null): Options {\\n  if (opts && opts.annexB != null && opts.annexB !== false) {\\n    throw new Error(\\\"The `annexB` option can only be set to `false`.\\\");\\n  }\\n\\n  const options: any = {};\\n  for (const key of Object.keys(defaultOptions)) {\\n    // @ts-expect-error key may not exist in opts\\n    options[key] = opts && opts[key] != null ? opts[key] : defaultOptions[key];\\n  }\\n  return options;\\n}\\n\",\"// The token context is used in JSX plugin to track\\n// jsx tag / jsx text / normal JavaScript expression\\n\\nexport class TokContext {\\n  constructor(token: string, preserveSpace?: boolean) {\\n    this.token = token;\\n    this.preserveSpace = !!preserveSpace;\\n  }\\n\\n  token: string;\\n  preserveSpace: boolean;\\n}\\n\\nconst types: {\\n  [key: string]: TokContext;\\n} = {\\n  brace: new TokContext(\\\"{\\\"), // normal JavaScript expression\\n  j_oTag: new TokContext(\\\"<tag\\\"), // JSX opening tag\\n  j_cTag: new TokContext(\\\"</tag\\\"), // JSX closing tag\\n  j_expr: new TokContext(\\\"<tag>...</tag>\\\", true), // JSX expressions\\n};\\n\\nif (!process.env.BABEL_8_BREAKING) {\\n  types.template = new TokContext(\\\"`\\\", true);\\n}\\n\\nexport { types };\\n\",\"import { types as tc, type TokContext } from \\\"./context\\\";\\n// ## Token types\\n\\n// The assignment of fine-grained, information-carrying type objects\\n// allows the tokenizer to store the information it has about a\\n// token in a way that is very cheap for the parser to look up.\\n\\n// All token type variables start with an underscore, to make them\\n// easy to recognize.\\n\\n// The `beforeExpr` property is used to disambiguate between 1) binary\\n// expression (<) and JSX Tag start (<name>); 2) object literal and JSX\\n// texts. It is set on the `updateContext` function in the JSX plugin.\\n\\n// The `startsExpr` property is used to determine whether an expression\\n// may be the “argument” subexpression of a `yield` expression or\\n// `yield` statement. It is set on all token types that may be at the\\n// start of a subexpression.\\n\\n// `isLoop` marks a keyword as starting a loop, which is important\\n// to know when parsing a label, in order to allow or disallow\\n// continue jumps to that label.\\n\\nconst beforeExpr = true;\\nconst startsExpr = true;\\nconst isLoop = true;\\nconst isAssign = true;\\nconst prefix = true;\\nconst postfix = true;\\n\\ntype TokenOptions = {\\n  keyword?: string;\\n  beforeExpr?: boolean;\\n  startsExpr?: boolean;\\n  rightAssociative?: boolean;\\n  isLoop?: boolean;\\n  isAssign?: boolean;\\n  prefix?: boolean;\\n  postfix?: boolean;\\n  binop?: number | null;\\n};\\n\\n// Internally the tokenizer stores token as a number\\nexport type TokenType = number;\\n\\n// The `ExportedTokenType` is exported via `tokTypes` and accessible\\n// when `tokens: true` is enabled. Unlike internal token type, it provides\\n// metadata of the tokens.\\nexport class ExportedTokenType {\\n  label: string;\\n  keyword: string | undefined | null;\\n  beforeExpr: boolean;\\n  startsExpr: boolean;\\n  rightAssociative: boolean;\\n  isLoop: boolean;\\n  isAssign: boolean;\\n  prefix: boolean;\\n  postfix: boolean;\\n  binop: number | undefined | null;\\n  // todo(Babel 8): remove updateContext from exposed token layout\\n  declare updateContext:\\n    | ((context: Array<TokContext>) => void)\\n    | undefined\\n    | null;\\n\\n  constructor(label: string, conf: TokenOptions = {}) {\\n    this.label = label;\\n    this.keyword = conf.keyword;\\n    this.beforeExpr = !!conf.beforeExpr;\\n    this.startsExpr = !!conf.startsExpr;\\n    this.rightAssociative = !!conf.rightAssociative;\\n    this.isLoop = !!conf.isLoop;\\n    this.isAssign = !!conf.isAssign;\\n    this.prefix = !!conf.prefix;\\n    this.postfix = !!conf.postfix;\\n    this.binop = conf.binop != null ? conf.binop : null;\\n    if (!process.env.BABEL_8_BREAKING) {\\n      this.updateContext = null;\\n    }\\n  }\\n}\\n\\n// A map from keyword/keyword-like string value to the token type\\nexport const keywords = new Map<string, TokenType>();\\n\\nfunction createKeyword(name: string, options: TokenOptions = {}): TokenType {\\n  options.keyword = name;\\n  const token = createToken(name, options);\\n  keywords.set(name, token);\\n  return token;\\n}\\n\\nfunction createBinop(name: string, binop: number) {\\n  return createToken(name, { beforeExpr, binop });\\n}\\n\\nlet tokenTypeCounter = -1;\\nexport const tokenTypes: ExportedTokenType[] = [];\\nconst tokenLabels: string[] = [];\\nconst tokenBinops: number[] = [];\\nconst tokenBeforeExprs: boolean[] = [];\\nconst tokenStartsExprs: boolean[] = [];\\nconst tokenPrefixes: boolean[] = [];\\n\\nfunction createToken(name: string, options: TokenOptions = {}): TokenType {\\n  ++tokenTypeCounter;\\n  tokenLabels.push(name);\\n  tokenBinops.push(options.binop ?? -1);\\n  tokenBeforeExprs.push(options.beforeExpr ?? false);\\n  tokenStartsExprs.push(options.startsExpr ?? false);\\n  tokenPrefixes.push(options.prefix ?? false);\\n  tokenTypes.push(new ExportedTokenType(name, options));\\n\\n  return tokenTypeCounter;\\n}\\n\\nfunction createKeywordLike(\\n  name: string,\\n  options: TokenOptions = {},\\n): TokenType {\\n  ++tokenTypeCounter;\\n  keywords.set(name, tokenTypeCounter);\\n  tokenLabels.push(name);\\n  tokenBinops.push(options.binop ?? -1);\\n  tokenBeforeExprs.push(options.beforeExpr ?? false);\\n  tokenStartsExprs.push(options.startsExpr ?? false);\\n  tokenPrefixes.push(options.prefix ?? false);\\n  // In the exported token type, we set the label as \\\"name\\\" for backward compatibility with Babel 7\\n  tokenTypes.push(new ExportedTokenType(\\\"name\\\", options));\\n\\n  return tokenTypeCounter;\\n}\\n\\n// For performance the token type helpers depend on the following declarations order.\\n// When adding new token types, please also check if the token helpers need update.\\n\\nexport type InternalTokenTypes = typeof tt;\\n\\nexport const tt = {\\n  // Punctuation token types.\\n  bracketL: createToken(\\\"[\\\", { beforeExpr, startsExpr }),\\n  bracketHashL: createToken(\\\"#[\\\", { beforeExpr, startsExpr }),\\n  bracketBarL: createToken(\\\"[|\\\", { beforeExpr, startsExpr }),\\n  bracketR: createToken(\\\"]\\\"),\\n  bracketBarR: createToken(\\\"|]\\\"),\\n  braceL: createToken(\\\"{\\\", { beforeExpr, startsExpr }),\\n  braceBarL: createToken(\\\"{|\\\", { beforeExpr, startsExpr }),\\n  braceHashL: createToken(\\\"#{\\\", { beforeExpr, startsExpr }),\\n  braceR: createToken(\\\"}\\\"),\\n  braceBarR: createToken(\\\"|}\\\"),\\n  parenL: createToken(\\\"(\\\", { beforeExpr, startsExpr }),\\n  parenR: createToken(\\\")\\\"),\\n  comma: createToken(\\\",\\\", { beforeExpr }),\\n  semi: createToken(\\\";\\\", { beforeExpr }),\\n  colon: createToken(\\\":\\\", { beforeExpr }),\\n  doubleColon: createToken(\\\"::\\\", { beforeExpr }),\\n  dot: createToken(\\\".\\\"),\\n  question: createToken(\\\"?\\\", { beforeExpr }),\\n  questionDot: createToken(\\\"?.\\\"),\\n  arrow: createToken(\\\"=>\\\", { beforeExpr }),\\n  template: createToken(\\\"template\\\"),\\n  ellipsis: createToken(\\\"...\\\", { beforeExpr }),\\n  backQuote: createToken(\\\"`\\\", { startsExpr }),\\n  dollarBraceL: createToken(\\\"${\\\", { beforeExpr, startsExpr }),\\n  // start: isTemplate\\n  templateTail: createToken(\\\"...`\\\", { startsExpr }),\\n  templateNonTail: createToken(\\\"...${\\\", { beforeExpr, startsExpr }),\\n  // end: isTemplate\\n  at: createToken(\\\"@\\\"),\\n  hash: createToken(\\\"#\\\", { startsExpr }),\\n\\n  // Special hashbang token.\\n  interpreterDirective: createToken(\\\"#!...\\\"),\\n\\n  // Operators. These carry several kinds of properties to help the\\n  // parser use them properly (the presence of these properties is\\n  // what categorizes them as operators).\\n  //\\n  // `binop`, when present, specifies that this operator is a binary\\n  // operator, and will refer to its precedence.\\n  //\\n  // `prefix` and `postfix` mark the operator as a prefix or postfix\\n  // unary operator.\\n  //\\n  // `isAssign` marks all of `=`, `+=`, `-=` etcetera, which act as\\n  // binary operators with a very low precedence, that should result\\n  // in AssignmentExpression nodes.\\n\\n  // start: isAssign\\n  eq: createToken(\\\"=\\\", { beforeExpr, isAssign }),\\n  assign: createToken(\\\"_=\\\", { beforeExpr, isAssign }),\\n  slashAssign: createToken(\\\"_=\\\", { beforeExpr, isAssign }),\\n  // These are only needed to support % and ^ as a Hack-pipe topic token.\\n  // When the proposal settles on a token, the others can be merged with\\n  // tt.assign.\\n  xorAssign: createToken(\\\"_=\\\", { beforeExpr, isAssign }),\\n  moduloAssign: createToken(\\\"_=\\\", { beforeExpr, isAssign }),\\n  // end: isAssign\\n\\n  incDec: createToken(\\\"++/--\\\", { prefix, postfix, startsExpr }),\\n  bang: createToken(\\\"!\\\", { beforeExpr, prefix, startsExpr }),\\n  tilde: createToken(\\\"~\\\", { beforeExpr, prefix, startsExpr }),\\n\\n  // More possible topic tokens.\\n  // When the proposal settles on a token, at least one of these may be removed.\\n  doubleCaret: createToken(\\\"^^\\\", { startsExpr }),\\n  doubleAt: createToken(\\\"@@\\\", { startsExpr }),\\n\\n  // start: isBinop\\n  pipeline: createBinop(\\\"|>\\\", 0),\\n  nullishCoalescing: createBinop(\\\"??\\\", 1),\\n  logicalOR: createBinop(\\\"||\\\", 1),\\n  logicalAND: createBinop(\\\"&&\\\", 2),\\n  bitwiseOR: createBinop(\\\"|\\\", 3),\\n  bitwiseXOR: createBinop(\\\"^\\\", 4),\\n  bitwiseAND: createBinop(\\\"&\\\", 5),\\n  equality: createBinop(\\\"==/!=/===/!==\\\", 6),\\n  lt: createBinop(\\\"</>/<=/>=\\\", 7),\\n  gt: createBinop(\\\"</>/<=/>=\\\", 7),\\n  relational: createBinop(\\\"</>/<=/>=\\\", 7),\\n  bitShift: createBinop(\\\"<</>>/>>>\\\", 8),\\n  bitShiftL: createBinop(\\\"<</>>/>>>\\\", 8),\\n  bitShiftR: createBinop(\\\"<</>>/>>>\\\", 8),\\n  plusMin: createToken(\\\"+/-\\\", { beforeExpr, binop: 9, prefix, startsExpr }),\\n  // startsExpr: required by v8intrinsic plugin\\n  modulo: createToken(\\\"%\\\", { binop: 10, startsExpr }),\\n  // unset `beforeExpr` as it can be `function *`\\n  star: createToken(\\\"*\\\", { binop: 10 }),\\n  slash: createBinop(\\\"/\\\", 10),\\n  exponent: createToken(\\\"**\\\", {\\n    beforeExpr,\\n    binop: 11,\\n    rightAssociative: true,\\n  }),\\n\\n  // Keywords\\n  // Don't forget to update packages/babel-helper-validator-identifier/src/keyword.js\\n  // when new keywords are added\\n  // start: isLiteralPropertyName\\n  // start: isKeyword\\n  _in: createKeyword(\\\"in\\\", { beforeExpr, binop: 7 }),\\n  _instanceof: createKeyword(\\\"instanceof\\\", { beforeExpr, binop: 7 }),\\n  // end: isBinop\\n  _break: createKeyword(\\\"break\\\"),\\n  _case: createKeyword(\\\"case\\\", { beforeExpr }),\\n  _catch: createKeyword(\\\"catch\\\"),\\n  _continue: createKeyword(\\\"continue\\\"),\\n  _debugger: createKeyword(\\\"debugger\\\"),\\n  _default: createKeyword(\\\"default\\\", { beforeExpr }),\\n  _else: createKeyword(\\\"else\\\", { beforeExpr }),\\n  _finally: createKeyword(\\\"finally\\\"),\\n  _function: createKeyword(\\\"function\\\", { startsExpr }),\\n  _if: createKeyword(\\\"if\\\"),\\n  _return: createKeyword(\\\"return\\\", { beforeExpr }),\\n  _switch: createKeyword(\\\"switch\\\"),\\n  _throw: createKeyword(\\\"throw\\\", { beforeExpr, prefix, startsExpr }),\\n  _try: createKeyword(\\\"try\\\"),\\n  _var: createKeyword(\\\"var\\\"),\\n  _const: createKeyword(\\\"const\\\"),\\n  _with: createKeyword(\\\"with\\\"),\\n  _new: createKeyword(\\\"new\\\", { beforeExpr, startsExpr }),\\n  _this: createKeyword(\\\"this\\\", { startsExpr }),\\n  _super: createKeyword(\\\"super\\\", { startsExpr }),\\n  _class: createKeyword(\\\"class\\\", { startsExpr }),\\n  _extends: createKeyword(\\\"extends\\\", { beforeExpr }),\\n  _export: createKeyword(\\\"export\\\"),\\n  _import: createKeyword(\\\"import\\\", { startsExpr }),\\n  _null: createKeyword(\\\"null\\\", { startsExpr }),\\n  _true: createKeyword(\\\"true\\\", { startsExpr }),\\n  _false: createKeyword(\\\"false\\\", { startsExpr }),\\n  _typeof: createKeyword(\\\"typeof\\\", { beforeExpr, prefix, startsExpr }),\\n  _void: createKeyword(\\\"void\\\", { beforeExpr, prefix, startsExpr }),\\n  _delete: createKeyword(\\\"delete\\\", { beforeExpr, prefix, startsExpr }),\\n  // start: isLoop\\n  _do: createKeyword(\\\"do\\\", { isLoop, beforeExpr }),\\n  _for: createKeyword(\\\"for\\\", { isLoop }),\\n  _while: createKeyword(\\\"while\\\", { isLoop }),\\n  // end: isLoop\\n  // end: isKeyword\\n\\n  // Primary literals\\n  // start: isIdentifier\\n  _as: createKeywordLike(\\\"as\\\", { startsExpr }),\\n  _assert: createKeywordLike(\\\"assert\\\", { startsExpr }),\\n  _async: createKeywordLike(\\\"async\\\", { startsExpr }),\\n  _await: createKeywordLike(\\\"await\\\", { startsExpr }),\\n  _from: createKeywordLike(\\\"from\\\", { startsExpr }),\\n  _get: createKeywordLike(\\\"get\\\", { startsExpr }),\\n  _let: createKeywordLike(\\\"let\\\", { startsExpr }),\\n  _meta: createKeywordLike(\\\"meta\\\", { startsExpr }),\\n  _of: createKeywordLike(\\\"of\\\", { startsExpr }),\\n  _sent: createKeywordLike(\\\"sent\\\", { startsExpr }),\\n  _set: createKeywordLike(\\\"set\\\", { startsExpr }),\\n  _static: createKeywordLike(\\\"static\\\", { startsExpr }),\\n  _using: createKeywordLike(\\\"using\\\", { startsExpr }),\\n  _yield: createKeywordLike(\\\"yield\\\", { startsExpr }),\\n\\n  // Flow and TypeScript Keywordlike\\n  _asserts: createKeywordLike(\\\"asserts\\\", { startsExpr }),\\n  _checks: createKeywordLike(\\\"checks\\\", { startsExpr }),\\n  _exports: createKeywordLike(\\\"exports\\\", { startsExpr }),\\n  _global: createKeywordLike(\\\"global\\\", { startsExpr }),\\n  _implements: createKeywordLike(\\\"implements\\\", { startsExpr }),\\n  _intrinsic: createKeywordLike(\\\"intrinsic\\\", { startsExpr }),\\n  _infer: createKeywordLike(\\\"infer\\\", { startsExpr }),\\n  _is: createKeywordLike(\\\"is\\\", { startsExpr }),\\n  _mixins: createKeywordLike(\\\"mixins\\\", { startsExpr }),\\n  _proto: createKeywordLike(\\\"proto\\\", { startsExpr }),\\n  _require: createKeywordLike(\\\"require\\\", { startsExpr }),\\n  _satisfies: createKeywordLike(\\\"satisfies\\\", { startsExpr }),\\n  // start: isTSTypeOperator\\n  _keyof: createKeywordLike(\\\"keyof\\\", { startsExpr }),\\n  _readonly: createKeywordLike(\\\"readonly\\\", { startsExpr }),\\n  _unique: createKeywordLike(\\\"unique\\\", { startsExpr }),\\n  // end: isTSTypeOperator\\n  // start: isTSDeclarationStart\\n  _abstract: createKeywordLike(\\\"abstract\\\", { startsExpr }),\\n  _declare: createKeywordLike(\\\"declare\\\", { startsExpr }),\\n  _enum: createKeywordLike(\\\"enum\\\", { startsExpr }),\\n  _module: createKeywordLike(\\\"module\\\", { startsExpr }),\\n  _namespace: createKeywordLike(\\\"namespace\\\", { startsExpr }),\\n  // start: isFlowInterfaceOrTypeOrOpaque\\n  _interface: createKeywordLike(\\\"interface\\\", { startsExpr }),\\n  _type: createKeywordLike(\\\"type\\\", { startsExpr }),\\n  // end: isTSDeclarationStart\\n  _opaque: createKeywordLike(\\\"opaque\\\", { startsExpr }),\\n  // end: isFlowInterfaceOrTypeOrOpaque\\n  name: createToken(\\\"name\\\", { startsExpr }),\\n  // end: isIdentifier\\n\\n  string: createToken(\\\"string\\\", { startsExpr }),\\n  num: createToken(\\\"num\\\", { startsExpr }),\\n  bigint: createToken(\\\"bigint\\\", { startsExpr }),\\n  decimal: createToken(\\\"decimal\\\", { startsExpr }),\\n  // end: isLiteralPropertyName\\n  regexp: createToken(\\\"regexp\\\", { startsExpr }),\\n  privateName: createToken(\\\"#name\\\", { startsExpr }),\\n  eof: createToken(\\\"eof\\\"),\\n\\n  // jsx plugin\\n  jsxName: createToken(\\\"jsxName\\\"),\\n  jsxText: createToken(\\\"jsxText\\\", { beforeExpr: true }),\\n  jsxTagStart: createToken(\\\"jsxTagStart\\\", { startsExpr: true }),\\n  jsxTagEnd: createToken(\\\"jsxTagEnd\\\"),\\n\\n  // placeholder plugin\\n  placeholder: createToken(\\\"%%\\\", { startsExpr: true }),\\n} as const;\\n\\nexport function tokenIsIdentifier(token: TokenType): boolean {\\n  return token >= tt._as && token <= tt.name;\\n}\\n\\nexport function tokenKeywordOrIdentifierIsKeyword(token: TokenType): boolean {\\n  // we can remove the token >= tt._in check when we\\n  // know a token is either keyword or identifier\\n  return token <= tt._while;\\n}\\n\\nexport function tokenIsKeywordOrIdentifier(token: TokenType): boolean {\\n  return token >= tt._in && token <= tt.name;\\n}\\n\\nexport function tokenIsLiteralPropertyName(token: TokenType): boolean {\\n  return token >= tt._in && token <= tt.decimal;\\n}\\n\\nexport function tokenComesBeforeExpression(token: TokenType): boolean {\\n  return tokenBeforeExprs[token];\\n}\\n\\nexport function tokenCanStartExpression(token: TokenType): boolean {\\n  return tokenStartsExprs[token];\\n}\\n\\nexport function tokenIsAssignment(token: TokenType): boolean {\\n  return token >= tt.eq && token <= tt.moduloAssign;\\n}\\n\\nexport function tokenIsFlowInterfaceOrTypeOrOpaque(token: TokenType): boolean {\\n  return token >= tt._interface && token <= tt._opaque;\\n}\\n\\nexport function tokenIsLoop(token: TokenType): boolean {\\n  return token >= tt._do && token <= tt._while;\\n}\\n\\nexport function tokenIsKeyword(token: TokenType): boolean {\\n  return token >= tt._in && token <= tt._while;\\n}\\n\\nexport function tokenIsOperator(token: TokenType): boolean {\\n  return token >= tt.pipeline && token <= tt._instanceof;\\n}\\n\\nexport function tokenIsPostfix(token: TokenType): boolean {\\n  return token === tt.incDec;\\n}\\n\\nexport function tokenIsPrefix(token: TokenType): boolean {\\n  return tokenPrefixes[token];\\n}\\n\\nexport function tokenIsTSTypeOperator(token: TokenType): boolean {\\n  return token >= tt._keyof && token <= tt._unique;\\n}\\n\\nexport function tokenIsTSDeclarationStart(token: TokenType): boolean {\\n  return token >= tt._abstract && token <= tt._type;\\n}\\n\\nexport function tokenLabelName(token: TokenType): string {\\n  return tokenLabels[token];\\n}\\n\\nexport function tokenOperatorPrecedence(token: TokenType): number {\\n  return tokenBinops[token];\\n}\\n\\nexport function tokenIsBinaryOperator(token: TokenType): boolean {\\n  return tokenBinops[token] !== -1;\\n}\\n\\nexport function tokenIsRightAssociative(token: TokenType): boolean {\\n  return token === tt.exponent;\\n}\\n\\nexport function tokenIsTemplate(token: TokenType): boolean {\\n  return token >= tt.templateTail && token <= tt.templateNonTail;\\n}\\n\\nexport function getExportedToken(token: TokenType): ExportedTokenType {\\n  return tokenTypes[token];\\n}\\n\\nexport function isTokenType(obj: any): boolean {\\n  return typeof obj === \\\"number\\\";\\n}\\n\\nif (!process.env.BABEL_8_BREAKING) {\\n  tokenTypes[tt.braceR].updateContext = context => {\\n    context.pop();\\n  };\\n\\n  tokenTypes[tt.braceL].updateContext =\\n    tokenTypes[tt.braceHashL].updateContext =\\n    tokenTypes[tt.dollarBraceL].updateContext =\\n      context => {\\n        context.push(tc.brace);\\n      };\\n\\n  tokenTypes[tt.backQuote].updateContext = context => {\\n    if (context[context.length - 1] === tc.template) {\\n      context.pop();\\n    } else {\\n      context.push(tc.template);\\n    }\\n  };\\n\\n  tokenTypes[tt.jsxTagStart].updateContext = context => {\\n    context.push(tc.j_expr, tc.j_oTag);\\n  };\\n}\\n\",\"export type Pos = {\\n  start: number;\\n};\\n\\n// These are used when `options.locations` is on, for the\\n// `startLoc` and `endLoc` properties.\\n\\nexport class Position {\\n  line: number;\\n  column: number;\\n  index: number;\\n\\n  constructor(line: number, col: number, index: number) {\\n    this.line = line;\\n    this.column = col;\\n    this.index = index;\\n  }\\n}\\n\\nexport class SourceLocation {\\n  start: Position;\\n  end: Position;\\n  filename: string;\\n  identifierName: string | undefined | null;\\n\\n  constructor(start: Position, end?: Position) {\\n    this.start = start;\\n    // (may start as null, but initialized later)\\n    this.end = end;\\n  }\\n}\\n\\n/**\\n * creates a new position with a non-zero column offset from the given position.\\n * This function should be only be used when we create AST node out of the token\\n * boundaries, such as TemplateElement ends before tt.templateNonTail. This\\n * function does not skip whitespaces.\\n */\\nexport function createPositionWithColumnOffset(\\n  position: Position,\\n  columnOffset: number,\\n) {\\n  const { line, column, index } = position;\\n  return new Position(line, column + columnOffset, index + columnOffset);\\n}\\n\",\"export const enum ParseErrorCode {\\n  SyntaxError = \\\"BABEL_PARSER_SYNTAX_ERROR\\\",\\n  SourceTypeModuleError = \\\"BABEL_PARSER_SOURCETYPE_MODULE_REQUIRED\\\",\\n}\\n\\nexport type SyntaxPlugin =\\n  | \\\"flow\\\"\\n  | \\\"typescript\\\"\\n  | \\\"jsx\\\"\\n  | \\\"pipelineOperator\\\"\\n  | \\\"placeholders\\\";\\n\\nexport type ToMessage<ErrorDetails> = (self: ErrorDetails) => string;\\n\\nexport type ParseErrorCredentials<ErrorDetails> = {\\n  code: ParseErrorCode;\\n  reasonCode: string;\\n  syntaxPlugin?: SyntaxPlugin;\\n  toMessage: ToMessage<ErrorDetails>;\\n};\\n\\nconst reflect = (keys: string[], last = keys.length - 1) => ({\\n  get(this: unknown): unknown {\\n    return keys.reduce(\\n      (object, key) =>\\n        // @ts-expect-error key should index object\\n        object[key],\\n      this,\\n    );\\n  },\\n  set(this: unknown, value: unknown) {\\n    keys.reduce(\\n      // @ts-expect-error key should index item\\n      (item, key, i) => (i === last ? (item[key] = value) : item[key]),\\n      this,\\n    );\\n  },\\n});\\n\\nconst instantiate = <T>(\\n  constructor: new () => T,\\n  properties: any,\\n  descriptors: any,\\n) =>\\n  Object.keys(descriptors)\\n    .map(key => [key, descriptors[key]])\\n    .filter(([, descriptor]) => !!descriptor)\\n    .map(([key, descriptor]) => [\\n      key,\\n      typeof descriptor === \\\"function\\\"\\n        ? { value: descriptor, enumerable: false }\\n        : typeof descriptor.reflect === \\\"string\\\"\\n        ? { ...descriptor, ...reflect(descriptor.reflect.split(\\\".\\\")) }\\n        : descriptor,\\n    ])\\n    .reduce(\\n      (instance, [key, descriptor]) =>\\n        Object.defineProperty(instance, key, {\\n          configurable: true,\\n          ...descriptor,\\n        }),\\n      Object.assign(new constructor(), properties),\\n    );\\n\\nexport { instantiate };\\n\",\"import { ParseErrorCode } from \\\"../parse-error\\\";\\n\\nexport default {\\n  ImportMetaOutsideModule: {\\n    message: `import.meta may appear only with 'sourceType: \\\"module\\\"'`,\\n    code: ParseErrorCode.SourceTypeModuleError,\\n  },\\n  ImportOutsideModule: {\\n    message: `'import' and 'export' may appear only with 'sourceType: \\\"module\\\"'`,\\n    code: ParseErrorCode.SourceTypeModuleError,\\n  },\\n};\\n\",\"const NodeDescriptions = {\\n  ArrayPattern: \\\"array destructuring pattern\\\",\\n  AssignmentExpression: \\\"assignment expression\\\",\\n  AssignmentPattern: \\\"assignment expression\\\",\\n  ArrowFunctionExpression: \\\"arrow function expression\\\",\\n  ConditionalExpression: \\\"conditional expression\\\",\\n  CatchClause: \\\"catch clause\\\",\\n  ForOfStatement: \\\"for-of statement\\\",\\n  ForInStatement: \\\"for-in statement\\\",\\n  ForStatement: \\\"for-loop\\\",\\n  FormalParameters: \\\"function parameter list\\\",\\n  Identifier: \\\"identifier\\\",\\n  ImportSpecifier: \\\"import specifier\\\",\\n  ImportDefaultSpecifier: \\\"import default specifier\\\",\\n  ImportNamespaceSpecifier: \\\"import namespace specifier\\\",\\n  ObjectPattern: \\\"object destructuring pattern\\\",\\n  ParenthesizedExpression: \\\"parenthesized expression\\\",\\n  RestElement: \\\"rest element\\\",\\n  UpdateExpression: {\\n    true: \\\"prefix operation\\\",\\n    false: \\\"postfix operation\\\",\\n  },\\n  VariableDeclarator: \\\"variable declaration\\\",\\n  YieldExpression: \\\"yield expression\\\",\\n};\\n\\ntype NodeTypesWithDescriptions = keyof Omit<\\n  typeof NodeDescriptions,\\n  \\\"UpdateExpression\\\"\\n>;\\n\\ntype NodeWithDescription =\\n  | {\\n      type: \\\"UpdateExpression\\\";\\n      prefix: boolean;\\n    }\\n  | {\\n      type: NodeTypesWithDescriptions;\\n    };\\n\\n// @ts-expect-error prefix is specified only when type is UpdateExpression\\n// eslint-disable-next-line no-confusing-arrow\\nconst toNodeDescription = ({ type, prefix }: NodeWithDescription) =>\\n  type === \\\"UpdateExpression\\\"\\n    ? NodeDescriptions.UpdateExpression[String(prefix) as \\\"true\\\" | \\\"false\\\"]\\n    : NodeDescriptions[type];\\n\\nexport default toNodeDescription;\\n\",\"import toNodeDescription from \\\"./to-node-description\\\";\\n\\nexport type LValAncestor =\\n  | { type: \\\"UpdateExpression\\\"; prefix: boolean }\\n  | {\\n      type:\\n        | \\\"ArrayPattern\\\"\\n        | \\\"AssignmentExpression\\\"\\n        | \\\"CatchClause\\\"\\n        | \\\"ForOfStatement\\\"\\n        | \\\"FormalParameters\\\"\\n        | \\\"ForInStatement\\\"\\n        | \\\"ForStatement\\\"\\n        | \\\"ImportSpecifier\\\"\\n        | \\\"ImportNamespaceSpecifier\\\"\\n        | \\\"ImportDefaultSpecifier\\\"\\n        | \\\"ParenthesizedExpression\\\"\\n        | \\\"ObjectPattern\\\"\\n        | \\\"RestElement\\\"\\n        | \\\"VariableDeclarator\\\";\\n    };\\n\\nexport default {\\n  AccessorIsGenerator: ({ kind }: { kind: \\\"get\\\" | \\\"set\\\" }) =>\\n    `A ${kind}ter cannot be a generator.`,\\n  ArgumentsInClass:\\n    \\\"'arguments' is only allowed in functions and class methods.\\\",\\n  AsyncFunctionInSingleStatementContext:\\n    \\\"Async functions can only be declared at the top level or inside a block.\\\",\\n  AwaitBindingIdentifier:\\n    \\\"Can not use 'await' as identifier inside an async function.\\\",\\n  AwaitBindingIdentifierInStaticBlock:\\n    \\\"Can not use 'await' as identifier inside a static block.\\\",\\n  AwaitExpressionFormalParameter:\\n    \\\"'await' is not allowed in async function parameters.\\\",\\n  AwaitInUsingBinding:\\n    \\\"'await' is not allowed to be used as a name in 'using' declarations.\\\",\\n  AwaitNotInAsyncContext:\\n    \\\"'await' is only allowed within async functions and at the top levels of modules.\\\",\\n  AwaitNotInAsyncFunction: \\\"'await' is only allowed within async functions.\\\",\\n  BadGetterArity: \\\"A 'get' accessor must not have any formal parameters.\\\",\\n  BadSetterArity: \\\"A 'set' accessor must have exactly one formal parameter.\\\",\\n  BadSetterRestParameter:\\n    \\\"A 'set' accessor function argument must not be a rest parameter.\\\",\\n  ConstructorClassField: \\\"Classes may not have a field named 'constructor'.\\\",\\n  ConstructorClassPrivateField:\\n    \\\"Classes may not have a private field named '#constructor'.\\\",\\n  ConstructorIsAccessor: \\\"Class constructor may not be an accessor.\\\",\\n  ConstructorIsAsync: \\\"Constructor can't be an async function.\\\",\\n  ConstructorIsGenerator: \\\"Constructor can't be a generator.\\\",\\n  DeclarationMissingInitializer: ({\\n    kind,\\n  }: {\\n    kind: \\\"const\\\" | \\\"destructuring\\\";\\n  }) => `Missing initializer in ${kind} declaration.`,\\n  DecoratorArgumentsOutsideParentheses:\\n    \\\"Decorator arguments must be moved inside parentheses: use '@(decorator(args))' instead of '@(decorator)(args)'.\\\",\\n  DecoratorBeforeExport:\\n    \\\"Decorators must be placed *before* the 'export' keyword. Remove the 'decoratorsBeforeExport: true' option to use the 'export @decorator class {}' syntax.\\\",\\n  DecoratorsBeforeAfterExport:\\n    \\\"Decorators can be placed *either* before or after the 'export' keyword, but not in both locations at the same time.\\\",\\n  DecoratorConstructor:\\n    \\\"Decorators can't be used with a constructor. Did you mean '@dec class { ... }'?\\\",\\n  DecoratorExportClass:\\n    \\\"Decorators must be placed *after* the 'export' keyword. Remove the 'decoratorsBeforeExport: false' option to use the '@decorator export class {}' syntax.\\\",\\n  DecoratorSemicolon: \\\"Decorators must not be followed by a semicolon.\\\",\\n  DecoratorStaticBlock: \\\"Decorators can't be used with a static block.\\\",\\n  DeletePrivateField: \\\"Deleting a private field is not allowed.\\\",\\n  DestructureNamedImport:\\n    \\\"ES2015 named imports do not destructure. Use another statement for destructuring after the import.\\\",\\n  DuplicateConstructor: \\\"Duplicate constructor in the same class.\\\",\\n  DuplicateDefaultExport: \\\"Only one default export allowed per module.\\\",\\n  DuplicateExport: ({ exportName }: { exportName: string }) =>\\n    `\\\\`${exportName}\\\\` has already been exported. Exported identifiers must be unique.`,\\n  DuplicateProto: \\\"Redefinition of __proto__ property.\\\",\\n  DuplicateRegExpFlags: \\\"Duplicate regular expression flag.\\\",\\n  ElementAfterRest: \\\"Rest element must be last element.\\\",\\n  EscapedCharNotAnIdentifier: \\\"Invalid Unicode escape.\\\",\\n  ExportBindingIsString: ({\\n    localName,\\n    exportName,\\n  }: {\\n    localName: string;\\n    exportName: string;\\n  }) =>\\n    `A string literal cannot be used as an exported binding without \\\\`from\\\\`.\\\\n- Did you mean \\\\`export { '${localName}' as '${exportName}' } from 'some-module'\\\\`?`,\\n  ExportDefaultFromAsIdentifier:\\n    \\\"'from' is not allowed as an identifier after 'export default'.\\\",\\n\\n  ForInOfLoopInitializer: ({\\n    type,\\n  }: {\\n    type: \\\"ForInStatement\\\" | \\\"ForOfStatement\\\";\\n  }) =>\\n    `'${\\n      type === \\\"ForInStatement\\\" ? \\\"for-in\\\" : \\\"for-of\\\"\\n    }' loop variable declaration may not have an initializer.`,\\n  ForInUsing: \\\"For-in loop may not start with 'using' declaration.\\\",\\n\\n  ForOfAsync: \\\"The left-hand side of a for-of loop may not be 'async'.\\\",\\n  ForOfLet: \\\"The left-hand side of a for-of loop may not start with 'let'.\\\",\\n  GeneratorInSingleStatementContext:\\n    \\\"Generators can only be declared at the top level or inside a block.\\\",\\n\\n  IllegalBreakContinue: ({\\n    type,\\n  }: {\\n    type: \\\"BreakStatement\\\" | \\\"ContinueStatement\\\";\\n  }) => `Unsyntactic ${type === \\\"BreakStatement\\\" ? \\\"break\\\" : \\\"continue\\\"}.`,\\n\\n  IllegalLanguageModeDirective:\\n    \\\"Illegal 'use strict' directive in function with non-simple parameter list.\\\",\\n  IllegalReturn: \\\"'return' outside of function.\\\",\\n  ImportBindingIsString: ({ importName }: { importName: string }) =>\\n    `A string literal cannot be used as an imported binding.\\\\n- Did you mean \\\\`import { \\\"${importName}\\\" as foo }\\\\`?`,\\n  ImportCallArgumentTrailingComma:\\n    \\\"Trailing comma is disallowed inside import(...) arguments.\\\",\\n  ImportCallArity: ({ maxArgumentCount }: { maxArgumentCount: 1 | 2 }) =>\\n    `\\\\`import()\\\\` requires exactly ${\\n      maxArgumentCount === 1 ? \\\"one argument\\\" : \\\"one or two arguments\\\"\\n    }.`,\\n  ImportCallNotNewExpression: \\\"Cannot use new with import(...).\\\",\\n  ImportCallSpreadArgument: \\\"`...` is not allowed in `import()`.\\\",\\n  ImportJSONBindingNotDefault:\\n    \\\"A JSON module can only be imported with `default`.\\\",\\n  ImportReflectionHasAssertion: \\\"`import module x` cannot have assertions.\\\",\\n  ImportReflectionNotBinding:\\n    'Only `import module x from \\\"./module\\\"` is valid.',\\n  IncompatibleRegExpUVFlags:\\n    \\\"The 'u' and 'v' regular expression flags cannot be enabled at the same time.\\\",\\n  InvalidBigIntLiteral: \\\"Invalid BigIntLiteral.\\\",\\n  InvalidCodePoint: \\\"Code point out of bounds.\\\",\\n  InvalidCoverInitializedName: \\\"Invalid shorthand property initializer.\\\",\\n  InvalidDecimal: \\\"Invalid decimal.\\\",\\n  InvalidDigit: ({ radix }: { radix: number }) =>\\n    `Expected number in radix ${radix}.`,\\n  InvalidEscapeSequence: \\\"Bad character escape sequence.\\\",\\n  InvalidEscapeSequenceTemplate: \\\"Invalid escape sequence in template.\\\",\\n  InvalidEscapedReservedWord: ({ reservedWord }: { reservedWord: string }) =>\\n    `Escape sequence in keyword ${reservedWord}.`,\\n  InvalidIdentifier: ({ identifierName }: { identifierName: string }) =>\\n    `Invalid identifier ${identifierName}.`,\\n  InvalidLhs: ({ ancestor }: { ancestor: LValAncestor }) =>\\n    `Invalid left-hand side in ${toNodeDescription(ancestor)}.`,\\n  InvalidLhsBinding: ({ ancestor }: { ancestor: LValAncestor }) =>\\n    `Binding invalid left-hand side in ${toNodeDescription(ancestor)}.`,\\n  InvalidNumber: \\\"Invalid number.\\\",\\n  InvalidOrMissingExponent:\\n    \\\"Floating-point numbers require a valid exponent after the 'e'.\\\",\\n  InvalidOrUnexpectedToken: ({ unexpected }: { unexpected: string }) =>\\n    `Unexpected character '${unexpected}'.`,\\n  InvalidParenthesizedAssignment: \\\"Invalid parenthesized assignment pattern.\\\",\\n  InvalidPrivateFieldResolution: ({\\n    identifierName,\\n  }: {\\n    identifierName: string;\\n  }) => `Private name #${identifierName} is not defined.`,\\n  InvalidPropertyBindingPattern: \\\"Binding member expression.\\\",\\n  InvalidRecordProperty:\\n    \\\"Only properties and spread elements are allowed in record definitions.\\\",\\n  InvalidRestAssignmentPattern: \\\"Invalid rest operator's argument.\\\",\\n  LabelRedeclaration: ({ labelName }: { labelName: string }) =>\\n    `Label '${labelName}' is already declared.`,\\n  LetInLexicalBinding:\\n    \\\"'let' is not allowed to be used as a name in 'let' or 'const' declarations.\\\",\\n  LineTerminatorBeforeArrow: \\\"No line break is allowed before '=>'.\\\",\\n  MalformedRegExpFlags: \\\"Invalid regular expression flag.\\\",\\n  MissingClassName: \\\"A class name is required.\\\",\\n  MissingEqInAssignment:\\n    \\\"Only '=' operator can be used for specifying default value.\\\",\\n  MissingSemicolon: \\\"Missing semicolon.\\\",\\n  MissingPlugin: ({ missingPlugin }: { missingPlugin: [string] }) =>\\n    `This experimental syntax requires enabling the parser plugin: ${missingPlugin\\n      .map(name => JSON.stringify(name))\\n      .join(\\\", \\\")}.`,\\n  // FIXME: Would be nice to make this \\\"missingPlugins\\\" instead.\\n  // Also, seems like we can drop the \\\"(s)\\\" from the message and just make it \\\"s\\\".\\n  MissingOneOfPlugins: ({ missingPlugin }: { missingPlugin: string[] }) =>\\n    `This experimental syntax requires enabling one of the following parser plugin(s): ${missingPlugin\\n      .map(name => JSON.stringify(name))\\n      .join(\\\", \\\")}.`,\\n  MissingUnicodeEscape: \\\"Expecting Unicode escape sequence \\\\\\\\uXXXX.\\\",\\n  MixingCoalesceWithLogical:\\n    \\\"Nullish coalescing operator(??) requires parens when mixing with logical operators.\\\",\\n  ModuleAttributeDifferentFromType:\\n    \\\"The only accepted module attribute is `type`.\\\",\\n  ModuleAttributeInvalidValue:\\n    \\\"Only string literals are allowed as module attribute values.\\\",\\n  ModuleAttributesWithDuplicateKeys: ({ key }: { key: string }) =>\\n    `Duplicate key \\\"${key}\\\" is not allowed in module attributes.`,\\n  ModuleExportNameHasLoneSurrogate: ({\\n    surrogateCharCode,\\n  }: {\\n    surrogateCharCode: number;\\n  }) =>\\n    `An export name cannot include a lone surrogate, found '\\\\\\\\u${surrogateCharCode.toString(\\n      16,\\n    )}'.`,\\n  ModuleExportUndefined: ({ localName }: { localName: string }) =>\\n    `Export '${localName}' is not defined.`,\\n  MultipleDefaultsInSwitch: \\\"Multiple default clauses.\\\",\\n  NewlineAfterThrow: \\\"Illegal newline after throw.\\\",\\n  NoCatchOrFinally: \\\"Missing catch or finally clause.\\\",\\n  NumberIdentifier: \\\"Identifier directly after number.\\\",\\n  NumericSeparatorInEscapeSequence:\\n    \\\"Numeric separators are not allowed inside unicode escape sequences or hex escape sequences.\\\",\\n  ObsoleteAwaitStar:\\n    \\\"'await*' has been removed from the async functions proposal. Use Promise.all() instead.\\\",\\n  OptionalChainingNoNew:\\n    \\\"Constructors in/after an Optional Chain are not allowed.\\\",\\n  OptionalChainingNoTemplate:\\n    \\\"Tagged Template Literals are not allowed in optionalChain.\\\",\\n  OverrideOnConstructor:\\n    \\\"'override' modifier cannot appear on a constructor declaration.\\\",\\n  ParamDupe: \\\"Argument name clash.\\\",\\n  PatternHasAccessor: \\\"Object pattern can't contain getter or setter.\\\",\\n  PatternHasMethod: \\\"Object pattern can't contain methods.\\\",\\n  PrivateInExpectedIn: ({ identifierName }: { identifierName: string }) =>\\n    `Private names are only allowed in property accesses (\\\\`obj.#${identifierName}\\\\`) or in \\\\`in\\\\` expressions (\\\\`#${identifierName} in obj\\\\`).`,\\n  PrivateNameRedeclaration: ({ identifierName }: { identifierName: string }) =>\\n    `Duplicate private name #${identifierName}.`,\\n  RecordExpressionBarIncorrectEndSyntaxType:\\n    \\\"Record expressions ending with '|}' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'.\\\",\\n  RecordExpressionBarIncorrectStartSyntaxType:\\n    \\\"Record expressions starting with '{|' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'.\\\",\\n  RecordExpressionHashIncorrectStartSyntaxType:\\n    \\\"Record expressions starting with '#{' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'hash'.\\\",\\n  RecordNoProto: \\\"'__proto__' is not allowed in Record expressions.\\\",\\n  RestTrailingComma: \\\"Unexpected trailing comma after rest element.\\\",\\n  SloppyFunction:\\n    \\\"In non-strict mode code, functions can only be declared at top level or inside a block.\\\",\\n  SloppyFunctionAnnexB:\\n    \\\"In non-strict mode code, functions can only be declared at top level, inside a block, or as the body of an if statement.\\\",\\n  StaticPrototype: \\\"Classes may not have static property named prototype.\\\",\\n  SuperNotAllowed:\\n    \\\"`super()` is only valid inside a class constructor of a subclass. Maybe a typo in the method name ('constructor') or not extending another class?\\\",\\n  SuperPrivateField: \\\"Private fields can't be accessed on super.\\\",\\n  TrailingDecorator: \\\"Decorators must be attached to a class element.\\\",\\n  TupleExpressionBarIncorrectEndSyntaxType:\\n    \\\"Tuple expressions ending with '|]' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'.\\\",\\n  TupleExpressionBarIncorrectStartSyntaxType:\\n    \\\"Tuple expressions starting with '[|' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'.\\\",\\n  TupleExpressionHashIncorrectStartSyntaxType:\\n    \\\"Tuple expressions starting with '#[' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'hash'.\\\",\\n  UnexpectedArgumentPlaceholder: \\\"Unexpected argument placeholder.\\\",\\n  UnexpectedAwaitAfterPipelineBody:\\n    'Unexpected \\\"await\\\" after pipeline body; await must have parentheses in minimal proposal.',\\n  UnexpectedDigitAfterHash: \\\"Unexpected digit after hash token.\\\",\\n  UnexpectedImportExport:\\n    \\\"'import' and 'export' may only appear at the top level.\\\",\\n  UnexpectedKeyword: ({ keyword }: { keyword: string }) =>\\n    `Unexpected keyword '${keyword}'.`,\\n  UnexpectedLeadingDecorator:\\n    \\\"Leading decorators must be attached to a class declaration.\\\",\\n  UnexpectedLexicalDeclaration:\\n    \\\"Lexical declaration cannot appear in a single-statement context.\\\",\\n  UnexpectedNewTarget:\\n    \\\"`new.target` can only be used in functions or class properties.\\\",\\n  UnexpectedNumericSeparator:\\n    \\\"A numeric separator is only allowed between two digits.\\\",\\n  UnexpectedPrivateField: \\\"Unexpected private name.\\\",\\n  UnexpectedReservedWord: ({ reservedWord }: { reservedWord: string }) =>\\n    `Unexpected reserved word '${reservedWord}'.`,\\n  UnexpectedSuper: \\\"'super' is only allowed in object methods and classes.\\\",\\n  UnexpectedToken: ({\\n    expected,\\n    unexpected,\\n  }: {\\n    expected?: string | null;\\n    unexpected?: string | null;\\n  }) =>\\n    `Unexpected token${unexpected ? ` '${unexpected}'.` : \\\"\\\"}${\\n      expected ? `, expected \\\"${expected}\\\"` : \\\"\\\"\\n    }`,\\n  UnexpectedTokenUnaryExponentiation:\\n    \\\"Illegal expression. Wrap left hand side or entire exponentiation in parentheses.\\\",\\n  UnexpectedUsingDeclaration:\\n    \\\"Using declaration cannot appear in the top level when source type is `script`.\\\",\\n  UnsupportedBind: \\\"Binding should be performed on object property.\\\",\\n  UnsupportedDecoratorExport:\\n    \\\"A decorated export must export a class declaration.\\\",\\n  UnsupportedDefaultExport:\\n    \\\"Only expressions, functions or classes are allowed as the `default` export.\\\",\\n  UnsupportedImport:\\n    \\\"`import` can only be used in `import()` or `import.meta`.\\\",\\n  UnsupportedMetaProperty: ({\\n    target,\\n    onlyValidPropertyName,\\n  }: {\\n    target: string;\\n    onlyValidPropertyName: string;\\n  }) =>\\n    `The only valid meta property for ${target} is ${target}.${onlyValidPropertyName}.`,\\n  UnsupportedParameterDecorator:\\n    \\\"Decorators cannot be used to decorate parameters.\\\",\\n  UnsupportedPropertyDecorator:\\n    \\\"Decorators cannot be used to decorate object literal properties.\\\",\\n  UnsupportedSuper:\\n    \\\"'super' can only be used with function calls (i.e. super()) or in property accesses (i.e. super.prop or super[prop]).\\\",\\n  UnterminatedComment: \\\"Unterminated comment.\\\",\\n  UnterminatedRegExp: \\\"Unterminated regular expression.\\\",\\n  UnterminatedString: \\\"Unterminated string constant.\\\",\\n  UnterminatedTemplate: \\\"Unterminated template.\\\",\\n  UsingDeclarationHasBindingPattern:\\n    \\\"Using declaration cannot have destructuring patterns.\\\",\\n  VarRedeclaration: ({ identifierName }: { identifierName: string }) =>\\n    `Identifier '${identifierName}' has already been declared.`,\\n  YieldBindingIdentifier:\\n    \\\"Can not use 'yield' as identifier inside a generator.\\\",\\n  YieldInParameter: \\\"Yield expression is not allowed in formal parameters.\\\",\\n  ZeroDigitNumericSeparator:\\n    \\\"Numeric separator can not be used after leading 0.\\\",\\n};\\n\",\"export default {\\n  StrictDelete: \\\"Deleting local variable in strict mode.\\\",\\n\\n  // `referenceName` is the StringValue[1] of an IdentifierReference[2], which\\n  // is represented as just an `Identifier`[3] in the Babel AST.\\n  // 1. https://tc39.es/ecma262/#sec-static-semantics-stringvalue\\n  // 2. https://tc39.es/ecma262/#prod-IdentifierReference\\n  // 3. https://github.com/babel/babel/blob/main/packages/babel-parser/ast/spec.md#identifier\\n  StrictEvalArguments: ({ referenceName }: { referenceName: string }) =>\\n    `Assigning to '${referenceName}' in strict mode.`,\\n\\n  // `bindingName` is the StringValue[1] of a BindingIdentifier[2], which is\\n  // represented as just an `Identifier`[3] in the Babel AST.\\n  // 1. https://tc39.es/ecma262/#sec-static-semantics-stringvalue\\n  // 2. https://tc39.es/ecma262/#prod-BindingIdentifier\\n  // 3. https://github.com/babel/babel/blob/main/packages/babel-parser/ast/spec.md#identifier\\n  StrictEvalArgumentsBinding: ({ bindingName }: { bindingName: string }) =>\\n    `Binding '${bindingName}' in strict mode.`,\\n\\n  StrictFunction:\\n    \\\"In strict mode code, functions can only be declared at top level or inside a block.\\\",\\n\\n  StrictNumericEscape: \\\"The only valid numeric escape in strict mode is '\\\\\\\\0'.\\\",\\n\\n  StrictOctalLiteral: \\\"Legacy octal literals are not allowed in strict mode.\\\",\\n\\n  StrictWith: \\\"'with' in strict mode.\\\",\\n};\\n\",\"import toNodeDescription from \\\"./to-node-description\\\";\\n\\nexport const UnparenthesizedPipeBodyDescriptions = new Set([\\n  \\\"ArrowFunctionExpression\\\",\\n  \\\"AssignmentExpression\\\",\\n  \\\"ConditionalExpression\\\",\\n  \\\"YieldExpression\\\",\\n] as const);\\n\\ntype GetSetMemberType<T extends Set<any>> = T extends Set<infer M>\\n  ? M\\n  : unknown;\\n\\ntype UnparenthesizedPipeBodyTypes = GetSetMemberType<\\n  typeof UnparenthesizedPipeBodyDescriptions\\n>;\\n\\nexport default {\\n  // This error is only used by the smart-mix proposal\\n  PipeBodyIsTighter:\\n    \\\"Unexpected yield after pipeline body; any yield expression acting as Hack-style pipe body must be parenthesized due to its loose operator precedence.\\\",\\n  PipeTopicRequiresHackPipes:\\n    'Topic reference is used, but the pipelineOperator plugin was not passed a \\\"proposal\\\": \\\"hack\\\" or \\\"smart\\\" option.',\\n  PipeTopicUnbound:\\n    \\\"Topic reference is unbound; it must be inside a pipe body.\\\",\\n  PipeTopicUnconfiguredToken: ({ token }: { token: string }) =>\\n    `Invalid topic token ${token}. In order to use ${token} as a topic reference, the pipelineOperator plugin must be configured with { \\\"proposal\\\": \\\"hack\\\", \\\"topicToken\\\": \\\"${token}\\\" }.`,\\n  PipeTopicUnused:\\n    \\\"Hack-style pipe body does not contain a topic reference; Hack-style pipes must use topic at least once.\\\",\\n  PipeUnparenthesizedBody: ({ type }: { type: UnparenthesizedPipeBodyTypes }) =>\\n    `Hack-style pipe body cannot be an unparenthesized ${toNodeDescription({\\n      type,\\n    })}; please wrap it in parentheses.`,\\n\\n  // Messages whose codes start with “Pipeline” or “PrimaryTopic”\\n  // are retained for backwards compatibility\\n  // with the deprecated smart-mix pipe operator proposal plugin.\\n  // They are subject to removal in a future major version.\\n  PipelineBodyNoArrow:\\n    'Unexpected arrow \\\"=>\\\" after pipeline body; arrow function in pipeline body must be parenthesized.',\\n  PipelineBodySequenceExpression:\\n    \\\"Pipeline body may not be a comma-separated sequence expression.\\\",\\n  PipelineHeadSequenceExpression:\\n    \\\"Pipeline head should not be a comma-separated sequence expression.\\\",\\n  PipelineTopicUnused:\\n    \\\"Pipeline is in topic style but does not use topic reference.\\\",\\n  PrimaryTopicNotAllowed:\\n    \\\"Topic reference was used in a lexical context without topic binding.\\\",\\n  PrimaryTopicRequiresSmartPipeline:\\n    'Topic reference is used, but the pipelineOperator plugin was not passed a \\\"proposal\\\": \\\"hack\\\" or \\\"smart\\\" option.',\\n};\\n\",\"import { Position } from \\\"./util/location\\\";\\nimport {\\n  instantiate,\\n  ParseErrorCode,\\n  type ParseErrorCredentials,\\n  type ToMessage,\\n  type SyntaxPlugin,\\n} from \\\"./parse-error/credentials\\\";\\nimport type { Undone } from \\\"./parser/node\\\";\\nimport type { Node } from \\\"./types\\\";\\n\\n// Babel uses \\\"normal\\\" SyntaxErrors for it's errors, but adds some extra\\n// functionality. This functionality is defined in the\\n// `ParseErrorSpecification` interface below. We may choose to change to someday\\n// give our errors their own full-blown class, but until then this allow us to\\n// keep all the desirable properties of SyntaxErrors (like their name in stack\\n// traces, etc.), and also allows us to punt on any publicly facing\\n// class-hierarchy decisions until Babel 8.\\ninterface ParseErrorSpecification<ErrorDetails> {\\n  // Look, these *could* be readonly, but then Flow complains when we initially\\n  // set them. We could do a whole dance and make a special interface that's not\\n  // readonly for when we create the error, then cast it to the readonly\\n  // interface for public use, but the previous implementation didn't have them\\n  // as readonly, so let's just not worry about it for now.\\n  code: ParseErrorCode;\\n  reasonCode: string;\\n  syntaxPlugin?: SyntaxPlugin;\\n  missingPlugin?: string | string[];\\n  loc: Position;\\n  details: ErrorDetails;\\n\\n  // We should consider removing this as it now just contains the same\\n  // information as `loc.index`.\\n  // pos: number;\\n}\\n\\nexport type ParseError<ErrorDetails> = SyntaxError &\\n  ParseErrorSpecification<ErrorDetails>;\\n\\n// By `ParseErrorConstructor`, we mean something like the new-less style\\n// `ErrorConstructor`[1], since `ParseError`'s are not themselves actually\\n// separate classes from `SyntaxError`'s.\\n//\\n// 1. https://github.com/microsoft/TypeScript/blob/v4.5.5/lib/lib.es5.d.ts#L1027\\nexport type ParseErrorConstructor<ErrorDetails> = (a: {\\n  loc: Position;\\n  details: ErrorDetails;\\n}) => ParseError<ErrorDetails>;\\n\\nfunction toParseErrorConstructor<ErrorDetails extends object>({\\n  toMessage,\\n  ...properties\\n}: ParseErrorCredentials<ErrorDetails>): ParseErrorConstructor<ErrorDetails> {\\n  type ConstructorArgument = {\\n    loc: Position;\\n    details: ErrorDetails;\\n  };\\n\\n  return function constructor({ loc, details }: ConstructorArgument) {\\n    return instantiate(\\n      SyntaxError,\\n      { ...properties, loc },\\n      {\\n        clone(\\n          overrides: {\\n            loc?: Position;\\n            details?: ErrorDetails;\\n          } = {},\\n        ) {\\n          const loc = (overrides.loc || {}) as Partial<Position>;\\n          return constructor({\\n            loc: new Position(\\n              \\\"line\\\" in loc ? loc.line : this.loc.line,\\n              \\\"column\\\" in loc ? loc.column : this.loc.column,\\n              \\\"index\\\" in loc ? loc.index : this.loc.index,\\n            ),\\n            details: { ...this.details, ...overrides.details },\\n          });\\n        },\\n        details: { value: details, enumerable: false },\\n        message: {\\n          get(this: ConstructorArgument): string {\\n            return `${toMessage(this.details)} (${this.loc.line}:${\\n              this.loc.column\\n            })`;\\n          },\\n          set(value: string) {\\n            Object.defineProperty(this, \\\"message\\\", { value });\\n          },\\n        },\\n        pos: { reflect: \\\"loc.index\\\", enumerable: true },\\n        missingPlugin: \\\"missingPlugin\\\" in details && {\\n          reflect: \\\"details.missingPlugin\\\",\\n          enumerable: true,\\n        },\\n      },\\n    ) as ParseError<ErrorDetails>;\\n  };\\n}\\n\\ntype ParseErrorTemplate =\\n  | string\\n  | ToMessage<any>\\n  | { message: string | ToMessage<any> };\\n\\ntype ParseErrorTemplates = { [reasonCode: string]: ParseErrorTemplate };\\n\\n// This is the templated form of `ParseErrorEnum`.\\n//\\n// Note: We could factor out the return type calculation into something like\\n// `ParseErrorConstructor<T extends ParseErrorTemplates>`, and then we could\\n// reuse it in the non-templated form of `ParseErrorEnum`, but TypeScript\\n// doesn't seem to drill down that far when showing you the computed type of\\n// an object in an editor, so we'll leave it inlined for now.\\nexport function ParseErrorEnum(a: TemplateStringsArray): <\\n  T extends ParseErrorTemplates,\\n>(\\n  parseErrorTemplates: T,\\n) => {\\n  [K in keyof T]: ParseErrorConstructor<\\n    T[K] extends { message: string | ToMessage<any> }\\n      ? T[K][\\\"message\\\"] extends ToMessage<any>\\n        ? Parameters<T[K][\\\"message\\\"]>[0]\\n        : {}\\n      : T[K] extends ToMessage<any>\\n      ? Parameters<T[K]>[0]\\n      : {}\\n  >;\\n};\\n\\nexport function ParseErrorEnum<T extends ParseErrorTemplates>(\\n  parseErrorTemplates: T,\\n  syntaxPlugin?: SyntaxPlugin,\\n): {\\n  [K in keyof T]: ParseErrorConstructor<\\n    T[K] extends { message: string | ToMessage<any> }\\n      ? T[K][\\\"message\\\"] extends ToMessage<any>\\n        ? Parameters<T[K][\\\"message\\\"]>[0]\\n        : {}\\n      : T[K] extends ToMessage<any>\\n      ? Parameters<T[K]>[0]\\n      : {}\\n  >;\\n};\\n\\n// You call `ParseErrorEnum` with a mapping from `ReasonCode`'s to either:\\n//\\n// 1. a static error message,\\n// 2. `toMessage` functions that define additional necessary `details` needed by\\n//    the `ParseError`, or\\n// 3. Objects that contain a `message` of one of the above and overridden `code`\\n//    and/or `reasonCode`:\\n//\\n// ParseErrorEnum `optionalSyntaxPlugin` ({\\n//   ErrorWithStaticMessage: \\\"message\\\",\\n//   ErrorWithDynamicMessage: ({ type } : { type: string }) => `${type}`),\\n//   ErrorWithOverriddenCodeAndOrReasonCode: {\\n//     message: ({ type }: { type: string }) => `${type}`),\\n//     code: ParseErrorCode.SourceTypeModuleError,\\n//     ...(BABEL_8_BREAKING ? { } : { reasonCode: \\\"CustomErrorReasonCode\\\" })\\n//   }\\n// });\\n//\\nexport function ParseErrorEnum(\\n  argument: TemplateStringsArray | ParseErrorTemplates,\\n  syntaxPlugin?: SyntaxPlugin,\\n) {\\n  // If the first parameter is an array, that means we were called with a tagged\\n  // template literal. Extract the syntaxPlugin from this, and call again in\\n  // the \\\"normalized\\\" form.\\n  if (Array.isArray(argument)) {\\n    return (parseErrorTemplates: ParseErrorTemplates) =>\\n      ParseErrorEnum(parseErrorTemplates, argument[0]);\\n  }\\n\\n  const ParseErrorConstructors = {} as Record<\\n    string,\\n    ParseErrorConstructor<unknown>\\n  >;\\n\\n  for (const reasonCode of Object.keys(argument)) {\\n    const template = (argument as ParseErrorTemplates)[reasonCode];\\n    const { message, ...rest } =\\n      typeof template === \\\"string\\\"\\n        ? { message: () => template }\\n        : typeof template === \\\"function\\\"\\n        ? { message: template }\\n        : template;\\n    const toMessage = typeof message === \\\"string\\\" ? () => message : message;\\n\\n    ParseErrorConstructors[reasonCode] = toParseErrorConstructor({\\n      code: ParseErrorCode.SyntaxError,\\n      reasonCode,\\n      toMessage,\\n      ...(syntaxPlugin ? { syntaxPlugin } : {}),\\n      ...rest,\\n    });\\n  }\\n\\n  return ParseErrorConstructors;\\n}\\n\\nexport type RaiseProperties<ErrorDetails> = {\\n  at: Position | Undone<Node>;\\n} & ErrorDetails;\\n\\nimport ModuleErrors from \\\"./parse-error/module-errors\\\";\\nimport StandardErrors from \\\"./parse-error/standard-errors\\\";\\nimport StrictModeErrors from \\\"./parse-error/strict-mode-errors\\\";\\nimport PipelineOperatorErrors from \\\"./parse-error/pipeline-operator-errors\\\";\\n\\nexport const Errors = {\\n  ...ParseErrorEnum(ModuleErrors),\\n  ...ParseErrorEnum(StandardErrors),\\n  ...ParseErrorEnum(StrictModeErrors),\\n  ...ParseErrorEnum`pipelineOperator`(PipelineOperatorErrors),\\n};\\n\\nexport type { LValAncestor } from \\\"./parse-error/standard-errors\\\";\\n\\nexport * from \\\"./parse-error/credentials\\\";\\n\",\"import { type TokenType } from \\\"../tokenizer/types\\\";\\nimport type Parser from \\\"../parser\\\";\\nimport type { ExpressionErrors } from \\\"../parser/util\\\";\\nimport type * as N from \\\"../types\\\";\\nimport type { Node as NodeType, NodeBase, File } from \\\"../types\\\";\\nimport type { Position } from \\\"../util/location\\\";\\nimport { Errors } from \\\"../parse-error\\\";\\nimport type { Undone } from \\\"../parser/node\\\";\\nimport type { BindingTypes } from \\\"../util/scopeflags\\\";\\n\\nconst { defineProperty } = Object;\\nconst toUnenumerable = (object: any, key: string) =>\\n  defineProperty(object, key, { enumerable: false, value: object[key] });\\n\\nfunction toESTreeLocation(node: any) {\\n  node.loc.start && toUnenumerable(node.loc.start, \\\"index\\\");\\n  node.loc.end && toUnenumerable(node.loc.end, \\\"index\\\");\\n\\n  return node;\\n}\\n\\nexport default (superClass: typeof Parser) =>\\n  class ESTreeParserMixin extends superClass implements Parser {\\n    parse(): File {\\n      const file = toESTreeLocation(super.parse());\\n\\n      if (this.options.tokens) {\\n        file.tokens = file.tokens.map(toESTreeLocation);\\n      }\\n\\n      return file;\\n    }\\n\\n    // @ts-expect-error ESTree plugin changes node types\\n    parseRegExpLiteral({ pattern, flags }): N.EstreeRegExpLiteral {\\n      let regex: RegExp | null = null;\\n      try {\\n        regex = new RegExp(pattern, flags);\\n      } catch (e) {\\n        // In environments that don't support these flags value will\\n        // be null as the regex can't be represented natively.\\n      }\\n      const node = this.estreeParseLiteral<N.EstreeRegExpLiteral>(regex);\\n      node.regex = { pattern, flags };\\n\\n      return node;\\n    }\\n\\n    // @ts-expect-error ESTree plugin changes node types\\n    parseBigIntLiteral(value: any): N.Node {\\n      // https://github.com/estree/estree/blob/master/es2020.md#bigintliteral\\n      let bigInt: BigInt | null;\\n      try {\\n        bigInt = BigInt(value);\\n      } catch {\\n        bigInt = null;\\n      }\\n      const node = this.estreeParseLiteral<N.EstreeBigIntLiteral>(bigInt);\\n      node.bigint = String(node.value || value);\\n\\n      return node;\\n    }\\n\\n    // @ts-expect-error ESTree plugin changes node types\\n    parseDecimalLiteral(value: any): N.Node {\\n      // https://github.com/estree/estree/blob/master/experimental/decimal.md\\n      // todo: use BigDecimal when node supports it.\\n      const decimal: null = null;\\n      const node = this.estreeParseLiteral(decimal);\\n      node.decimal = String(node.value || value);\\n\\n      return node;\\n    }\\n\\n    estreeParseLiteral<T extends N.Node>(value: any) {\\n      // @ts-expect-error ESTree plugin changes node types\\n      return this.parseLiteral<T>(value, \\\"Literal\\\");\\n    }\\n\\n    // @ts-expect-error ESTree plugin changes node types\\n    parseStringLiteral(value: any): N.Node {\\n      return this.estreeParseLiteral(value);\\n    }\\n\\n    parseNumericLiteral(value: any): any {\\n      return this.estreeParseLiteral(value);\\n    }\\n\\n    // @ts-expect-error ESTree plugin changes node types\\n    parseNullLiteral(): N.Node {\\n      return this.estreeParseLiteral(null);\\n    }\\n\\n    parseBooleanLiteral(value: boolean): N.BooleanLiteral {\\n      return this.estreeParseLiteral(value);\\n    }\\n\\n    // Cast a Directive to an ExpressionStatement. Mutates the input Directive.\\n    directiveToStmt(directive: N.Directive): N.ExpressionStatement {\\n      const expression = directive.value as any as N.EstreeLiteral;\\n      delete directive.value;\\n\\n      expression.type = \\\"Literal\\\";\\n      // @ts-expect-error N.EstreeLiteral.raw is not defined.\\n      expression.raw = expression.extra.raw;\\n      expression.value = expression.extra.expressionValue;\\n\\n      const stmt = directive as any as N.ExpressionStatement;\\n      stmt.type = \\\"ExpressionStatement\\\";\\n      stmt.expression = expression;\\n      // @ts-expect-error N.ExpressionStatement.directive is not defined\\n      stmt.directive = expression.extra.rawValue;\\n\\n      delete expression.extra;\\n\\n      return stmt;\\n    }\\n\\n    // ==================================\\n    // Overrides\\n    // ==================================\\n\\n    initFunction(node: N.BodilessFunctionOrMethodBase, isAsync: boolean): void {\\n      super.initFunction(node, isAsync);\\n      node.expression = false;\\n    }\\n\\n    checkDeclaration(node: N.Pattern | N.ObjectProperty): void {\\n      if (node != null && this.isObjectProperty(node)) {\\n        // @ts-expect-error plugin typings\\n        this.checkDeclaration((node as unknown as N.EstreeProperty).value);\\n      } else {\\n        super.checkDeclaration(node);\\n      }\\n    }\\n\\n    getObjectOrClassMethodParams(method: N.ObjectMethod | N.ClassMethod) {\\n      return (method as any as N.EstreeProperty | N.EstreeMethodDefinition)\\n        .value.params;\\n    }\\n\\n    isValidDirective(stmt: N.Statement): boolean {\\n      return (\\n        stmt.type === \\\"ExpressionStatement\\\" &&\\n        stmt.expression.type === \\\"Literal\\\" &&\\n        typeof stmt.expression.value === \\\"string\\\" &&\\n        !stmt.expression.extra?.parenthesized\\n      );\\n    }\\n\\n    parseBlockBody(\\n      node: N.BlockStatementLike,\\n      allowDirectives: boolean | undefined | null,\\n      topLevel: boolean,\\n      end: TokenType,\\n      afterBlockParse?: (hasStrictModeDirective: boolean) => void,\\n    ): void {\\n      super.parseBlockBody(\\n        node,\\n        allowDirectives,\\n        topLevel,\\n        end,\\n        afterBlockParse,\\n      );\\n\\n      const directiveStatements = node.directives.map(d =>\\n        this.directiveToStmt(d),\\n      );\\n      // @ts-expect-error estree plugin typings\\n      node.body = directiveStatements.concat(node.body);\\n      delete node.directives;\\n    }\\n\\n    pushClassMethod(\\n      classBody: N.ClassBody,\\n      method: N.ClassMethod,\\n      isGenerator: boolean,\\n      isAsync: boolean,\\n      isConstructor: boolean,\\n      allowsDirectSuper: boolean,\\n    ): void {\\n      this.parseMethod(\\n        method,\\n        isGenerator,\\n        isAsync,\\n        isConstructor,\\n        allowsDirectSuper,\\n        \\\"ClassMethod\\\",\\n        true,\\n      );\\n      if (method.typeParameters) {\\n        // @ts-expect-error mutate AST types\\n        method.value.typeParameters = method.typeParameters;\\n        delete method.typeParameters;\\n      }\\n      classBody.body.push(method);\\n    }\\n\\n    parsePrivateName(): any {\\n      const node = super.parsePrivateName();\\n      if (!process.env.BABEL_8_BREAKING) {\\n        if (!this.getPluginOption(\\\"estree\\\", \\\"classFeatures\\\")) {\\n          return node;\\n        }\\n      }\\n      return this.convertPrivateNameToPrivateIdentifier(node);\\n    }\\n\\n    convertPrivateNameToPrivateIdentifier(\\n      node: N.PrivateName,\\n    ): N.EstreePrivateIdentifier {\\n      const name = super.getPrivateNameSV(node);\\n      node = node as any;\\n      delete node.id;\\n      // @ts-expect-error mutate AST types\\n      node.name = name;\\n      // @ts-expect-error mutate AST types\\n      node.type = \\\"PrivateIdentifier\\\";\\n      return node as unknown as N.EstreePrivateIdentifier;\\n    }\\n\\n    isPrivateName(node: N.Node): boolean {\\n      if (!process.env.BABEL_8_BREAKING) {\\n        if (!this.getPluginOption(\\\"estree\\\", \\\"classFeatures\\\")) {\\n          return super.isPrivateName(node);\\n        }\\n      }\\n      return node.type === \\\"PrivateIdentifier\\\";\\n    }\\n\\n    getPrivateNameSV(node: N.Node): string {\\n      if (!process.env.BABEL_8_BREAKING) {\\n        if (!this.getPluginOption(\\\"estree\\\", \\\"classFeatures\\\")) {\\n          return super.getPrivateNameSV(node);\\n        }\\n      }\\n      return node.name;\\n    }\\n\\n    // @ts-expect-error plugin may override interfaces\\n    parseLiteral<T extends N.Literal>(value: any, type: T[\\\"type\\\"]): T {\\n      const node = super.parseLiteral<T>(value, type);\\n      // @ts-expect-error mutating AST types\\n      node.raw = node.extra.raw;\\n      delete node.extra;\\n\\n      return node;\\n    }\\n\\n    parseFunctionBody(\\n      node: N.Function,\\n      allowExpression?: boolean | null,\\n      isMethod: boolean = false,\\n    ): void {\\n      super.parseFunctionBody(node, allowExpression, isMethod);\\n      node.expression = node.body.type !== \\\"BlockStatement\\\";\\n    }\\n\\n    // @ts-expect-error plugin may override interfaces\\n    parseMethod<\\n      T extends N.ClassPrivateMethod | N.ObjectMethod | N.ClassMethod,\\n    >(\\n      node: Undone<T>,\\n      isGenerator: boolean,\\n      isAsync: boolean,\\n      isConstructor: boolean,\\n      allowDirectSuper: boolean,\\n      type: T[\\\"type\\\"],\\n      inClassScope: boolean = false,\\n    ): N.EstreeMethodDefinition {\\n      let funcNode = this.startNode<N.MethodLike>();\\n      funcNode.kind = node.kind; // provide kind, so super method correctly sets state\\n      funcNode = super.parseMethod(\\n        // @ts-expect-error todo(flow->ts)\\n        funcNode,\\n        isGenerator,\\n        isAsync,\\n        isConstructor,\\n        allowDirectSuper,\\n        type,\\n        inClassScope,\\n      );\\n      // @ts-expect-error mutate AST types\\n      funcNode.type = \\\"FunctionExpression\\\";\\n      delete funcNode.kind;\\n      // @ts-expect-error mutate AST types\\n      node.value = funcNode;\\n      if (type === \\\"ClassPrivateMethod\\\") {\\n        node.computed = false;\\n      }\\n      return this.finishNode(\\n        // @ts-expect-error cast methods to estree types\\n        node as Undone<N.EstreeMethodDefinition>,\\n        \\\"MethodDefinition\\\",\\n      );\\n    }\\n\\n    parseClassProperty(...args: [N.ClassProperty]): any {\\n      const propertyNode = super.parseClassProperty(...args) as any;\\n      if (!process.env.BABEL_8_BREAKING) {\\n        if (!this.getPluginOption(\\\"estree\\\", \\\"classFeatures\\\")) {\\n          return propertyNode as N.EstreePropertyDefinition;\\n        }\\n      }\\n      propertyNode.type = \\\"PropertyDefinition\\\";\\n      return propertyNode as N.EstreePropertyDefinition;\\n    }\\n\\n    parseClassPrivateProperty(...args: [N.ClassPrivateProperty]): any {\\n      const propertyNode = super.parseClassPrivateProperty(...args) as any;\\n      if (!process.env.BABEL_8_BREAKING) {\\n        if (!this.getPluginOption(\\\"estree\\\", \\\"classFeatures\\\")) {\\n          return propertyNode as N.EstreePropertyDefinition;\\n        }\\n      }\\n      propertyNode.type = \\\"PropertyDefinition\\\";\\n      propertyNode.computed = false;\\n      return propertyNode as N.EstreePropertyDefinition;\\n    }\\n\\n    parseObjectMethod(\\n      prop: N.ObjectMethod,\\n      isGenerator: boolean,\\n      isAsync: boolean,\\n      isPattern: boolean,\\n      isAccessor: boolean,\\n    ): N.ObjectMethod | undefined | null {\\n      const node: N.EstreeProperty = super.parseObjectMethod(\\n        prop,\\n        isGenerator,\\n        isAsync,\\n        isPattern,\\n        isAccessor,\\n      ) as any;\\n\\n      if (node) {\\n        node.type = \\\"Property\\\";\\n        if ((node as any as N.ClassMethod).kind === \\\"method\\\") {\\n          node.kind = \\\"init\\\";\\n        }\\n        node.shorthand = false;\\n      }\\n\\n      return node as any;\\n    }\\n\\n    parseObjectProperty(\\n      prop: N.ObjectProperty,\\n      startLoc: Position | undefined | null,\\n      isPattern: boolean,\\n      refExpressionErrors?: ExpressionErrors | null,\\n    ): N.ObjectProperty | undefined | null {\\n      const node: N.EstreeProperty = super.parseObjectProperty(\\n        prop,\\n        startLoc,\\n        isPattern,\\n        refExpressionErrors,\\n      ) as any;\\n\\n      if (node) {\\n        node.kind = \\\"init\\\";\\n        node.type = \\\"Property\\\";\\n      }\\n\\n      return node as any;\\n    }\\n\\n    isValidLVal(\\n      type: string,\\n      isUnparenthesizedInAssign: boolean,\\n      binding: BindingTypes,\\n    ) {\\n      return type === \\\"Property\\\"\\n        ? \\\"value\\\"\\n        : super.isValidLVal(type, isUnparenthesizedInAssign, binding);\\n    }\\n\\n    isAssignable(node: N.Node, isBinding?: boolean): boolean {\\n      if (node != null && this.isObjectProperty(node)) {\\n        return this.isAssignable(node.value, isBinding);\\n      }\\n      return super.isAssignable(node, isBinding);\\n    }\\n\\n    toAssignable(node: N.Node, isLHS: boolean = false): void {\\n      if (node != null && this.isObjectProperty(node)) {\\n        const { key, value } = node;\\n        if (this.isPrivateName(key)) {\\n          this.classScope.usePrivateName(\\n            this.getPrivateNameSV(key),\\n            key.loc.start,\\n          );\\n        }\\n        this.toAssignable(value, isLHS);\\n      } else {\\n        super.toAssignable(node, isLHS);\\n      }\\n    }\\n\\n    toAssignableObjectExpressionProp(\\n      prop: N.Node,\\n      isLast: boolean,\\n      isLHS: boolean,\\n    ) {\\n      if (prop.kind === \\\"get\\\" || prop.kind === \\\"set\\\") {\\n        this.raise(Errors.PatternHasAccessor, { at: prop.key });\\n      } else if (prop.method) {\\n        this.raise(Errors.PatternHasMethod, { at: prop.key });\\n      } else {\\n        super.toAssignableObjectExpressionProp(prop, isLast, isLHS);\\n      }\\n    }\\n\\n    finishCallExpression<T extends N.CallExpression | N.OptionalCallExpression>(\\n      unfinished: Undone<T>,\\n      optional: boolean,\\n    ): T {\\n      const node = super.finishCallExpression(unfinished, optional);\\n\\n      if (node.callee.type === \\\"Import\\\") {\\n        (node as N.Node as N.EstreeImportExpression).type = \\\"ImportExpression\\\";\\n        (node as N.Node as N.EstreeImportExpression).source = node.arguments[0];\\n        if (this.hasPlugin(\\\"importAssertions\\\")) {\\n          (node as N.Node as N.EstreeImportExpression).attributes =\\n            node.arguments[1] ?? null;\\n        }\\n        // arguments isn't optional in the type definition\\n        delete node.arguments;\\n        // callee isn't optional in the type definition\\n        delete node.callee;\\n      }\\n\\n      return node;\\n    }\\n\\n    toReferencedArguments(\\n      node:\\n        | N.CallExpression\\n        | N.OptionalCallExpression\\n        | N.EstreeImportExpression,\\n      /* isParenthesizedExpr?: boolean, */\\n    ) {\\n      // ImportExpressions do not have an arguments array.\\n      if (node.type === \\\"ImportExpression\\\") {\\n        return;\\n      }\\n\\n      super.toReferencedArguments(node);\\n    }\\n\\n    parseExport(\\n      unfinished: Undone<N.AnyExport>,\\n      decorators: N.Decorator[] | null,\\n    ) {\\n      const exportStartLoc = this.state.lastTokStartLoc;\\n      const node = super.parseExport(unfinished, decorators);\\n\\n      switch (node.type) {\\n        case \\\"ExportAllDeclaration\\\":\\n          // @ts-expect-error mutating AST types\\n          node.exported = null;\\n          break;\\n\\n        case \\\"ExportNamedDeclaration\\\":\\n          if (\\n            node.specifiers.length === 1 &&\\n            // @ts-expect-error mutating AST types\\n            node.specifiers[0].type === \\\"ExportNamespaceSpecifier\\\"\\n          ) {\\n            // @ts-expect-error mutating AST types\\n            node.type = \\\"ExportAllDeclaration\\\";\\n            // @ts-expect-error mutating AST types\\n            node.exported = node.specifiers[0].exported;\\n            delete node.specifiers;\\n          }\\n\\n        // fallthrough\\n        case \\\"ExportDefaultDeclaration\\\":\\n          {\\n            const { declaration } = node;\\n            if (\\n              declaration?.type === \\\"ClassDeclaration\\\" &&\\n              declaration.decorators?.length > 0 &&\\n              // decorator comes before export\\n              declaration.start === node.start\\n            ) {\\n              this.resetStartLocation(\\n                node,\\n                // For compatibility with ESLint's keyword-spacing rule, which assumes that an\\n                // export declaration must start with export.\\n                // https://github.com/babel/babel/issues/15085\\n                // Here we reset export declaration's start to be the start of the export token\\n                exportStartLoc,\\n              );\\n            }\\n          }\\n\\n          break;\\n      }\\n\\n      return node;\\n    }\\n\\n    parseSubscript(\\n      base: N.Expression,\\n      startLoc: Position,\\n      noCalls: boolean | undefined | null,\\n      state: N.ParseSubscriptState,\\n    ) {\\n      const node = super.parseSubscript(base, startLoc, noCalls, state);\\n\\n      if (state.optionalChainMember) {\\n        // https://github.com/estree/estree/blob/master/es2020.md#chainexpression\\n        if (\\n          node.type === \\\"OptionalMemberExpression\\\" ||\\n          node.type === \\\"OptionalCallExpression\\\"\\n        ) {\\n          node.type = node.type.substring(8); // strip Optional prefix\\n        }\\n        if (state.stop) {\\n          const chain = this.startNodeAtNode(node);\\n          chain.expression = node;\\n          return this.finishNode(chain, \\\"ChainExpression\\\");\\n        }\\n      } else if (\\n        node.type === \\\"MemberExpression\\\" ||\\n        node.type === \\\"CallExpression\\\"\\n      ) {\\n        node.optional = false;\\n      }\\n\\n      return node;\\n    }\\n\\n    hasPropertyAsPrivateName(node: N.Node): boolean {\\n      if (node.type === \\\"ChainExpression\\\") {\\n        node = node.expression;\\n      }\\n      return super.hasPropertyAsPrivateName(node);\\n    }\\n\\n    // @ts-expect-error override interfaces\\n    isObjectProperty(node: N.Node): boolean {\\n      return node.type === \\\"Property\\\" && node.kind === \\\"init\\\" && !node.method;\\n    }\\n\\n    isObjectMethod(node: N.Node): boolean {\\n      return node.method || node.kind === \\\"get\\\" || node.kind === \\\"set\\\";\\n    }\\n\\n    finishNodeAt<T extends NodeType>(\\n      node: Undone<T>,\\n      type: T[\\\"type\\\"],\\n      endLoc: Position,\\n    ): T {\\n      return toESTreeLocation(super.finishNodeAt(node, type, endLoc));\\n    }\\n\\n    resetStartLocation(node: N.Node, startLoc: Position) {\\n      super.resetStartLocation(node, startLoc);\\n      toESTreeLocation(node);\\n    }\\n\\n    resetEndLocation(\\n      node: NodeBase,\\n      endLoc: Position = this.state.lastTokEndLoc,\\n    ): void {\\n      super.resetEndLocation(node, endLoc);\\n      toESTreeLocation(node);\\n    }\\n  };\\n\",\"import * as charCodes from \\\"charcodes\\\";\\n\\n// ## Character categories\\n\\n// Big ugly regular expressions that match characters in the\\n// whitespace, identifier, and identifier-start categories. These\\n// are only applied when a character is found to actually have a\\n// code point between 0x80 and 0xffff.\\n// Generated by `scripts/generate-identifier-regex.js`.\\n\\n/* prettier-ignore */\\nlet nonASCIIidentifierStartChars = \\\"\\\\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\\\\u0560-\\\\u0588\\\\u05d0-\\\\u05ea\\\\u05ef-\\\\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\\\\u0860-\\\\u086a\\\\u0870-\\\\u0887\\\\u0889-\\\\u088e\\\\u08a0-\\\\u08c9\\\\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\\\\u09fc\\\\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\\\\u0c5d\\\\u0c60\\\\u0c61\\\\u0c80\\\\u0c85-\\\\u0c8c\\\\u0c8e-\\\\u0c90\\\\u0c92-\\\\u0ca8\\\\u0caa-\\\\u0cb3\\\\u0cb5-\\\\u0cb9\\\\u0cbd\\\\u0cdd\\\\u0cde\\\\u0ce0\\\\u0ce1\\\\u0cf1\\\\u0cf2\\\\u0d04-\\\\u0d0c\\\\u0d0e-\\\\u0d10\\\\u0d12-\\\\u0d3a\\\\u0d3d\\\\u0d4e\\\\u0d54-\\\\u0d56\\\\u0d5f-\\\\u0d61\\\\u0d7a-\\\\u0d7f\\\\u0d85-\\\\u0d96\\\\u0d9a-\\\\u0db1\\\\u0db3-\\\\u0dbb\\\\u0dbd\\\\u0dc0-\\\\u0dc6\\\\u0e01-\\\\u0e30\\\\u0e32\\\\u0e33\\\\u0e40-\\\\u0e46\\\\u0e81\\\\u0e82\\\\u0e84\\\\u0e86-\\\\u0e8a\\\\u0e8c-\\\\u0ea3\\\\u0ea5\\\\u0ea7-\\\\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-\\\\u1711\\\\u171f-\\\\u1731\\\\u1740-\\\\u1751\\\\u1760-\\\\u176c\\\\u176e-\\\\u1770\\\\u1780-\\\\u17b3\\\\u17d7\\\\u17dc\\\\u1820-\\\\u1878\\\\u1880-\\\\u18a8\\\\u18aa\\\\u18b0-\\\\u18f5\\\\u1900-\\\\u191e\\\\u1950-\\\\u196d\\\\u1970-\\\\u1974\\\\u1980-\\\\u19ab\\\\u19b0-\\\\u19c9\\\\u1a00-\\\\u1a16\\\\u1a20-\\\\u1a54\\\\u1aa7\\\\u1b05-\\\\u1b33\\\\u1b45-\\\\u1b4c\\\\u1b83-\\\\u1ba0\\\\u1bae\\\\u1baf\\\\u1bba-\\\\u1be5\\\\u1c00-\\\\u1c23\\\\u1c4d-\\\\u1c4f\\\\u1c5a-\\\\u1c7d\\\\u1c80-\\\\u1c88\\\\u1c90-\\\\u1cba\\\\u1cbd-\\\\u1cbf\\\\u1ce9-\\\\u1cec\\\\u1cee-\\\\u1cf3\\\\u1cf5\\\\u1cf6\\\\u1cfa\\\\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-\\\\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-\\\\u312f\\\\u3131-\\\\u318e\\\\u31a0-\\\\u31bf\\\\u31f0-\\\\u31ff\\\\u3400-\\\\u4dbf\\\\u4e00-\\\\ua48c\\\\ua4d0-\\\\ua4fd\\\\ua500-\\\\ua60c\\\\ua610-\\\\ua61f\\\\ua62a\\\\ua62b\\\\ua640-\\\\ua66e\\\\ua67f-\\\\ua69d\\\\ua6a0-\\\\ua6ef\\\\ua717-\\\\ua71f\\\\ua722-\\\\ua788\\\\ua78b-\\\\ua7ca\\\\ua7d0\\\\ua7d1\\\\ua7d3\\\\ua7d5-\\\\ua7d9\\\\ua7f2-\\\\ua801\\\\ua803-\\\\ua805\\\\ua807-\\\\ua80a\\\\ua80c-\\\\ua822\\\\ua840-\\\\ua873\\\\ua882-\\\\ua8b3\\\\ua8f2-\\\\ua8f7\\\\ua8fb\\\\ua8fd\\\\ua8fe\\\\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-\\\\uab69\\\\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\\\";\\n/* prettier-ignore */\\nlet nonASCIIidentifierChars = \\\"\\\\u200c\\\\u200d\\\\xb7\\\\u0300-\\\\u036f\\\\u0387\\\\u0483-\\\\u0487\\\\u0591-\\\\u05bd\\\\u05bf\\\\u05c1\\\\u05c2\\\\u05c4\\\\u05c5\\\\u05c7\\\\u0610-\\\\u061a\\\\u064b-\\\\u0669\\\\u0670\\\\u06d6-\\\\u06dc\\\\u06df-\\\\u06e4\\\\u06e7\\\\u06e8\\\\u06ea-\\\\u06ed\\\\u06f0-\\\\u06f9\\\\u0711\\\\u0730-\\\\u074a\\\\u07a6-\\\\u07b0\\\\u07c0-\\\\u07c9\\\\u07eb-\\\\u07f3\\\\u07fd\\\\u0816-\\\\u0819\\\\u081b-\\\\u0823\\\\u0825-\\\\u0827\\\\u0829-\\\\u082d\\\\u0859-\\\\u085b\\\\u0898-\\\\u089f\\\\u08ca-\\\\u08e1\\\\u08e3-\\\\u0903\\\\u093a-\\\\u093c\\\\u093e-\\\\u094f\\\\u0951-\\\\u0957\\\\u0962\\\\u0963\\\\u0966-\\\\u096f\\\\u0981-\\\\u0983\\\\u09bc\\\\u09be-\\\\u09c4\\\\u09c7\\\\u09c8\\\\u09cb-\\\\u09cd\\\\u09d7\\\\u09e2\\\\u09e3\\\\u09e6-\\\\u09ef\\\\u09fe\\\\u0a01-\\\\u0a03\\\\u0a3c\\\\u0a3e-\\\\u0a42\\\\u0a47\\\\u0a48\\\\u0a4b-\\\\u0a4d\\\\u0a51\\\\u0a66-\\\\u0a71\\\\u0a75\\\\u0a81-\\\\u0a83\\\\u0abc\\\\u0abe-\\\\u0ac5\\\\u0ac7-\\\\u0ac9\\\\u0acb-\\\\u0acd\\\\u0ae2\\\\u0ae3\\\\u0ae6-\\\\u0aef\\\\u0afa-\\\\u0aff\\\\u0b01-\\\\u0b03\\\\u0b3c\\\\u0b3e-\\\\u0b44\\\\u0b47\\\\u0b48\\\\u0b4b-\\\\u0b4d\\\\u0b55-\\\\u0b57\\\\u0b62\\\\u0b63\\\\u0b66-\\\\u0b6f\\\\u0b82\\\\u0bbe-\\\\u0bc2\\\\u0bc6-\\\\u0bc8\\\\u0bca-\\\\u0bcd\\\\u0bd7\\\\u0be6-\\\\u0bef\\\\u0c00-\\\\u0c04\\\\u0c3c\\\\u0c3e-\\\\u0c44\\\\u0c46-\\\\u0c48\\\\u0c4a-\\\\u0c4d\\\\u0c55\\\\u0c56\\\\u0c62\\\\u0c63\\\\u0c66-\\\\u0c6f\\\\u0c81-\\\\u0c83\\\\u0cbc\\\\u0cbe-\\\\u0cc4\\\\u0cc6-\\\\u0cc8\\\\u0cca-\\\\u0ccd\\\\u0cd5\\\\u0cd6\\\\u0ce2\\\\u0ce3\\\\u0ce6-\\\\u0cef\\\\u0cf3\\\\u0d00-\\\\u0d03\\\\u0d3b\\\\u0d3c\\\\u0d3e-\\\\u0d44\\\\u0d46-\\\\u0d48\\\\u0d4a-\\\\u0d4d\\\\u0d57\\\\u0d62\\\\u0d63\\\\u0d66-\\\\u0d6f\\\\u0d81-\\\\u0d83\\\\u0dca\\\\u0dcf-\\\\u0dd4\\\\u0dd6\\\\u0dd8-\\\\u0ddf\\\\u0de6-\\\\u0def\\\\u0df2\\\\u0df3\\\\u0e31\\\\u0e34-\\\\u0e3a\\\\u0e47-\\\\u0e4e\\\\u0e50-\\\\u0e59\\\\u0eb1\\\\u0eb4-\\\\u0ebc\\\\u0ec8-\\\\u0ece\\\\u0ed0-\\\\u0ed9\\\\u0f18\\\\u0f19\\\\u0f20-\\\\u0f29\\\\u0f35\\\\u0f37\\\\u0f39\\\\u0f3e\\\\u0f3f\\\\u0f71-\\\\u0f84\\\\u0f86\\\\u0f87\\\\u0f8d-\\\\u0f97\\\\u0f99-\\\\u0fbc\\\\u0fc6\\\\u102b-\\\\u103e\\\\u1040-\\\\u1049\\\\u1056-\\\\u1059\\\\u105e-\\\\u1060\\\\u1062-\\\\u1064\\\\u1067-\\\\u106d\\\\u1071-\\\\u1074\\\\u1082-\\\\u108d\\\\u108f-\\\\u109d\\\\u135d-\\\\u135f\\\\u1369-\\\\u1371\\\\u1712-\\\\u1715\\\\u1732-\\\\u1734\\\\u1752\\\\u1753\\\\u1772\\\\u1773\\\\u17b4-\\\\u17d3\\\\u17dd\\\\u17e0-\\\\u17e9\\\\u180b-\\\\u180d\\\\u180f-\\\\u1819\\\\u18a9\\\\u1920-\\\\u192b\\\\u1930-\\\\u193b\\\\u1946-\\\\u194f\\\\u19d0-\\\\u19da\\\\u1a17-\\\\u1a1b\\\\u1a55-\\\\u1a5e\\\\u1a60-\\\\u1a7c\\\\u1a7f-\\\\u1a89\\\\u1a90-\\\\u1a99\\\\u1ab0-\\\\u1abd\\\\u1abf-\\\\u1ace\\\\u1b00-\\\\u1b04\\\\u1b34-\\\\u1b44\\\\u1b50-\\\\u1b59\\\\u1b6b-\\\\u1b73\\\\u1b80-\\\\u1b82\\\\u1ba1-\\\\u1bad\\\\u1bb0-\\\\u1bb9\\\\u1be6-\\\\u1bf3\\\\u1c24-\\\\u1c37\\\\u1c40-\\\\u1c49\\\\u1c50-\\\\u1c59\\\\u1cd0-\\\\u1cd2\\\\u1cd4-\\\\u1ce8\\\\u1ced\\\\u1cf4\\\\u1cf7-\\\\u1cf9\\\\u1dc0-\\\\u1dff\\\\u203f\\\\u2040\\\\u2054\\\\u20d0-\\\\u20dc\\\\u20e1\\\\u20e5-\\\\u20f0\\\\u2cef-\\\\u2cf1\\\\u2d7f\\\\u2de0-\\\\u2dff\\\\u302a-\\\\u302f\\\\u3099\\\\u309a\\\\ua620-\\\\ua629\\\\ua66f\\\\ua674-\\\\ua67d\\\\ua69e\\\\ua69f\\\\ua6f0\\\\ua6f1\\\\ua802\\\\ua806\\\\ua80b\\\\ua823-\\\\ua827\\\\ua82c\\\\ua880\\\\ua881\\\\ua8b4-\\\\ua8c5\\\\ua8d0-\\\\ua8d9\\\\ua8e0-\\\\ua8f1\\\\ua8ff-\\\\ua909\\\\ua926-\\\\ua92d\\\\ua947-\\\\ua953\\\\ua980-\\\\ua983\\\\ua9b3-\\\\ua9c0\\\\ua9d0-\\\\ua9d9\\\\ua9e5\\\\ua9f0-\\\\ua9f9\\\\uaa29-\\\\uaa36\\\\uaa43\\\\uaa4c\\\\uaa4d\\\\uaa50-\\\\uaa59\\\\uaa7b-\\\\uaa7d\\\\uaab0\\\\uaab2-\\\\uaab4\\\\uaab7\\\\uaab8\\\\uaabe\\\\uaabf\\\\uaac1\\\\uaaeb-\\\\uaaef\\\\uaaf5\\\\uaaf6\\\\uabe3-\\\\uabea\\\\uabec\\\\uabed\\\\uabf0-\\\\uabf9\\\\ufb1e\\\\ufe00-\\\\ufe0f\\\\ufe20-\\\\ufe2f\\\\ufe33\\\\ufe34\\\\ufe4d-\\\\ufe4f\\\\uff10-\\\\uff19\\\\uff3f\\\";\\n\\nconst nonASCIIidentifierStart = new RegExp(\\n  \\\"[\\\" + nonASCIIidentifierStartChars + \\\"]\\\",\\n);\\nconst nonASCIIidentifier = new RegExp(\\n  \\\"[\\\" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + \\\"]\\\",\\n);\\n\\nnonASCIIidentifierStartChars = nonASCIIidentifierChars = null;\\n\\n// These are a run-length and offset-encoded representation of the\\n// >0xffff code points that are a valid part of identifiers. The\\n// offset starts at 0x10000, and each pair of numbers represents an\\n// offset to the next range, and then a size of the range. They were\\n// generated by `scripts/generate-identifier-regex.js`.\\n/* prettier-ignore */\\nconst astralIdentifierStartCodes = [0,11,2,25,2,18,2,1,2,14,3,13,35,122,70,52,268,28,4,48,48,31,14,29,6,37,11,29,3,35,5,7,2,4,43,157,19,35,5,35,5,39,9,51,13,10,2,14,2,6,2,1,2,10,2,14,2,6,2,1,68,310,10,21,11,7,25,5,2,41,2,8,70,5,3,0,2,43,2,1,4,0,3,22,11,22,10,30,66,18,2,1,11,21,11,25,71,55,7,1,65,0,16,3,2,2,2,28,43,28,4,28,36,7,2,27,28,53,11,21,11,18,14,17,111,72,56,50,14,50,14,35,349,41,7,1,79,28,11,0,9,21,43,17,47,20,28,22,13,52,58,1,3,0,14,44,33,24,27,35,30,0,3,0,9,34,4,0,13,47,15,3,22,0,2,0,36,17,2,24,20,1,64,6,2,0,2,3,2,14,2,9,8,46,39,7,3,1,3,21,2,6,2,1,2,4,4,0,19,0,13,4,159,52,19,3,21,2,31,47,21,1,2,0,185,46,42,3,37,47,21,0,60,42,14,0,72,26,38,6,186,43,117,63,32,7,3,0,3,7,2,1,2,23,16,0,2,0,95,7,3,38,17,0,2,0,29,0,11,39,8,0,22,0,12,45,20,0,19,72,264,8,2,36,18,0,50,29,113,6,2,1,2,37,22,0,26,5,2,1,2,31,15,0,328,18,16,0,2,12,2,33,125,0,80,921,103,110,18,195,2637,96,16,1071,18,5,4026,582,8634,568,8,30,18,78,18,29,19,47,17,3,32,20,6,18,689,63,129,74,6,0,67,12,65,1,2,0,29,6135,9,1237,43,8,8936,3,2,6,2,1,2,290,16,0,30,2,3,0,15,3,9,395,2309,106,6,12,4,8,8,9,5991,84,2,70,2,1,3,0,3,1,3,3,2,11,2,0,2,6,2,64,2,3,3,7,2,6,2,27,2,3,2,4,2,0,4,6,2,339,3,24,2,24,2,30,2,24,2,30,2,24,2,30,2,24,2,30,2,24,2,7,1845,30,7,5,262,61,147,44,11,6,17,0,322,29,19,43,485,27,757,6,2,3,2,1,2,14,2,196,60,67,8,0,1205,3,2,26,2,1,2,0,3,0,2,9,2,3,2,0,2,0,7,0,5,0,2,0,2,0,2,2,2,1,2,0,3,0,2,0,2,0,2,0,2,0,2,1,2,0,3,3,2,6,2,3,2,3,2,0,2,9,2,16,6,2,2,4,2,16,4421,42719,33,4153,7,221,3,5761,15,7472,3104,541,1507,4938,6,4191];\\n/* prettier-ignore */\\nconst astralIdentifierCodes = [509,0,227,0,150,4,294,9,1368,2,2,1,6,3,41,2,5,0,166,1,574,3,9,9,370,1,81,2,71,10,50,3,123,2,54,14,32,10,3,1,11,3,46,10,8,0,46,9,7,2,37,13,2,9,6,1,45,0,13,2,49,13,9,3,2,11,83,11,7,0,3,0,158,11,6,9,7,3,56,1,2,6,3,1,3,2,10,0,11,1,3,6,4,4,193,17,10,9,5,0,82,19,13,9,214,6,3,8,28,1,83,16,16,9,82,12,9,9,84,14,5,9,243,14,166,9,71,5,2,1,3,3,2,0,2,1,13,9,120,6,3,6,4,0,29,9,41,6,2,3,9,0,10,10,47,15,406,7,2,7,17,9,57,21,2,13,123,5,4,0,2,1,2,6,2,0,9,9,49,4,2,1,2,4,9,9,330,3,10,1,2,0,49,6,4,4,14,9,5351,0,7,14,13835,9,87,9,39,4,60,6,26,9,1014,0,2,54,8,3,82,0,12,1,19628,1,4706,45,3,22,543,4,4,5,9,7,3,6,31,3,149,2,1418,49,513,54,5,49,9,0,15,0,23,4,2,14,1361,6,2,16,3,6,2,1,2,4,101,0,161,6,10,9,357,0,62,13,499,13,983,6,110,6,6,9,4759,9,787719,239];\\n\\n// This has a complexity linear to the value of the code. The\\n// assumption is that looking up astral identifier characters is\\n// rare.\\nfunction isInAstralSet(code: number, set: readonly number[]): boolean {\\n  let pos = 0x10000;\\n  for (let i = 0, length = set.length; i < length; i += 2) {\\n    pos += set[i];\\n    if (pos > code) return false;\\n\\n    pos += set[i + 1];\\n    if (pos >= code) return true;\\n  }\\n  return false;\\n}\\n\\n// Test whether a given character code starts an identifier.\\n\\nexport function isIdentifierStart(code: number): boolean {\\n  if (code < charCodes.uppercaseA) return code === charCodes.dollarSign;\\n  if (code <= charCodes.uppercaseZ) return true;\\n  if (code < charCodes.lowercaseA) return code === charCodes.underscore;\\n  if (code <= charCodes.lowercaseZ) return true;\\n  if (code <= 0xffff) {\\n    return (\\n      code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code))\\n    );\\n  }\\n  return isInAstralSet(code, astralIdentifierStartCodes);\\n}\\n\\n// Test whether a given character is part of an identifier.\\n\\nexport function isIdentifierChar(code: number): boolean {\\n  if (code < charCodes.digit0) return code === charCodes.dollarSign;\\n  if (code < charCodes.colon) return true;\\n  if (code < charCodes.uppercaseA) return false;\\n  if (code <= charCodes.uppercaseZ) return true;\\n  if (code < charCodes.lowercaseA) return code === charCodes.underscore;\\n  if (code <= charCodes.lowercaseZ) return true;\\n  if (code <= 0xffff) {\\n    return code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code));\\n  }\\n  return (\\n    isInAstralSet(code, astralIdentifierStartCodes) ||\\n    isInAstralSet(code, astralIdentifierCodes)\\n  );\\n}\\n\\n// Test whether a given string is a valid identifier name\\n\\nexport function isIdentifierName(name: string): boolean {\\n  let isFirst = true;\\n  for (let i = 0; i < name.length; i++) {\\n    // The implementation is based on\\n    // https://source.chromium.org/chromium/chromium/src/+/master:v8/src/builtins/builtins-string-gen.cc;l=1455;drc=221e331b49dfefadbc6fa40b0c68e6f97606d0b3;bpv=0;bpt=1\\n    // We reimplement `codePointAt` because `codePointAt` is a V8 builtin which is not inlined by TurboFan (as of M91)\\n    // since `name` is mostly ASCII, an inlined `charCodeAt` wins here\\n    let cp = name.charCodeAt(i);\\n    if ((cp & 0xfc00) === 0xd800 && i + 1 < name.length) {\\n      const trail = name.charCodeAt(++i);\\n      if ((trail & 0xfc00) === 0xdc00) {\\n        cp = 0x10000 + ((cp & 0x3ff) << 10) + (trail & 0x3ff);\\n      }\\n    }\\n    if (isFirst) {\\n      isFirst = false;\\n      if (!isIdentifierStart(cp)) {\\n        return false;\\n      }\\n    } else if (!isIdentifierChar(cp)) {\\n      return false;\\n    }\\n  }\\n  return !isFirst;\\n}\\n\",\"const reservedWords = {\\n  keyword: [\\n    \\\"break\\\",\\n    \\\"case\\\",\\n    \\\"catch\\\",\\n    \\\"continue\\\",\\n    \\\"debugger\\\",\\n    \\\"default\\\",\\n    \\\"do\\\",\\n    \\\"else\\\",\\n    \\\"finally\\\",\\n    \\\"for\\\",\\n    \\\"function\\\",\\n    \\\"if\\\",\\n    \\\"return\\\",\\n    \\\"switch\\\",\\n    \\\"throw\\\",\\n    \\\"try\\\",\\n    \\\"var\\\",\\n    \\\"const\\\",\\n    \\\"while\\\",\\n    \\\"with\\\",\\n    \\\"new\\\",\\n    \\\"this\\\",\\n    \\\"super\\\",\\n    \\\"class\\\",\\n    \\\"extends\\\",\\n    \\\"export\\\",\\n    \\\"import\\\",\\n    \\\"null\\\",\\n    \\\"true\\\",\\n    \\\"false\\\",\\n    \\\"in\\\",\\n    \\\"instanceof\\\",\\n    \\\"typeof\\\",\\n    \\\"void\\\",\\n    \\\"delete\\\",\\n  ],\\n  strict: [\\n    \\\"implements\\\",\\n    \\\"interface\\\",\\n    \\\"let\\\",\\n    \\\"package\\\",\\n    \\\"private\\\",\\n    \\\"protected\\\",\\n    \\\"public\\\",\\n    \\\"static\\\",\\n    \\\"yield\\\",\\n  ],\\n  strictBind: [\\\"eval\\\", \\\"arguments\\\"],\\n};\\nconst keywords = new Set(reservedWords.keyword);\\nconst reservedWordsStrictSet = new Set(reservedWords.strict);\\nconst reservedWordsStrictBindSet = new Set(reservedWords.strictBind);\\n\\n/**\\n * Checks if word is a reserved word in non-strict mode\\n */\\nexport function isReservedWord(word: string, inModule: boolean): boolean {\\n  return (inModule && word === \\\"await\\\") || word === \\\"enum\\\";\\n}\\n\\n/**\\n * Checks if word is a reserved word in non-binding strict mode\\n *\\n * Includes non-strict reserved words\\n */\\nexport function isStrictReservedWord(word: string, inModule: boolean): boolean {\\n  return isReservedWord(word, inModule) || reservedWordsStrictSet.has(word);\\n}\\n\\n/**\\n * Checks if word is a reserved word in binding strict mode, but it is allowed as\\n * a normal identifier.\\n */\\nexport function isStrictBindOnlyReservedWord(word: string): boolean {\\n  return reservedWordsStrictBindSet.has(word);\\n}\\n\\n/**\\n * Checks if word is a reserved word in binding strict mode\\n *\\n * Includes non-strict reserved words and non-binding strict reserved words\\n */\\nexport function isStrictBindReservedWord(\\n  word: string,\\n  inModule: boolean,\\n): boolean {\\n  return (\\n    isStrictReservedWord(word, inModule) || isStrictBindOnlyReservedWord(word)\\n  );\\n}\\n\\nexport function isKeyword(word: string): boolean {\\n  return keywords.has(word);\\n}\\n\",\"/* eslint max-len: 0 */\\n\\nimport * as charCodes from \\\"charcodes\\\";\\nimport { isIdentifierStart } from \\\"@babel/helper-validator-identifier\\\";\\n\\nexport {\\n  isIdentifierStart,\\n  isIdentifierChar,\\n  isReservedWord,\\n  isStrictBindOnlyReservedWord,\\n  isStrictBindReservedWord,\\n  isStrictReservedWord,\\n  isKeyword,\\n} from \\\"@babel/helper-validator-identifier\\\";\\n\\nexport const keywordRelationalOperator = /^in(stanceof)?$/;\\n\\n// Test whether a current state character code and next character code is @\\n\\nexport function isIteratorStart(\\n  current: number,\\n  next: number,\\n  next2: number,\\n): boolean {\\n  return (\\n    current === charCodes.atSign &&\\n    next === charCodes.atSign &&\\n    isIdentifierStart(next2)\\n  );\\n}\\n\\n// This is the comprehensive set of JavaScript reserved words\\n// If a word is in this set, it could be a reserved word,\\n// depending on sourceType/strictMode/binding info. In other words\\n// if a word is not in this set, it is not a reserved word under\\n// any circumstance.\\nconst reservedWordLikeSet = new Set([\\n  \\\"break\\\",\\n  \\\"case\\\",\\n  \\\"catch\\\",\\n  \\\"continue\\\",\\n  \\\"debugger\\\",\\n  \\\"default\\\",\\n  \\\"do\\\",\\n  \\\"else\\\",\\n  \\\"finally\\\",\\n  \\\"for\\\",\\n  \\\"function\\\",\\n  \\\"if\\\",\\n  \\\"return\\\",\\n  \\\"switch\\\",\\n  \\\"throw\\\",\\n  \\\"try\\\",\\n  \\\"var\\\",\\n  \\\"const\\\",\\n  \\\"while\\\",\\n  \\\"with\\\",\\n  \\\"new\\\",\\n  \\\"this\\\",\\n  \\\"super\\\",\\n  \\\"class\\\",\\n  \\\"extends\\\",\\n  \\\"export\\\",\\n  \\\"import\\\",\\n  \\\"null\\\",\\n  \\\"true\\\",\\n  \\\"false\\\",\\n  \\\"in\\\",\\n  \\\"instanceof\\\",\\n  \\\"typeof\\\",\\n  \\\"void\\\",\\n  \\\"delete\\\",\\n  // strict\\n  \\\"implements\\\",\\n  \\\"interface\\\",\\n  \\\"let\\\",\\n  \\\"package\\\",\\n  \\\"private\\\",\\n  \\\"protected\\\",\\n  \\\"public\\\",\\n  \\\"static\\\",\\n  \\\"yield\\\",\\n  // strictBind\\n  \\\"eval\\\",\\n  \\\"arguments\\\",\\n  // reservedWorkLike\\n  \\\"enum\\\",\\n  \\\"await\\\",\\n]);\\n\\nexport function canBeReservedWord(word: string): boolean {\\n  return reservedWordLikeSet.has(word);\\n}\\n\",\"// Each scope gets a bitset that may contain these flags\\n// prettier-ignore\\nexport const SCOPE_OTHER        = 0b000000000,\\n             SCOPE_PROGRAM      = 0b000000001,\\n             SCOPE_FUNCTION     = 0b000000010,\\n             SCOPE_ARROW        = 0b000000100,\\n             SCOPE_SIMPLE_CATCH = 0b000001000,\\n             SCOPE_SUPER        = 0b000010000,\\n             SCOPE_DIRECT_SUPER = 0b000100000,\\n             SCOPE_CLASS        = 0b001000000,\\n             SCOPE_STATIC_BLOCK = 0b010000000,\\n             SCOPE_TS_MODULE    = 0b100000000,\\n             SCOPE_VAR = SCOPE_PROGRAM | SCOPE_FUNCTION | SCOPE_STATIC_BLOCK | SCOPE_TS_MODULE;\\n\\nexport type ScopeFlags =\\n  | typeof SCOPE_OTHER\\n  | typeof SCOPE_PROGRAM\\n  | typeof SCOPE_FUNCTION\\n  | typeof SCOPE_VAR\\n  | typeof SCOPE_ARROW\\n  | typeof SCOPE_SIMPLE_CATCH\\n  | typeof SCOPE_SUPER\\n  | typeof SCOPE_DIRECT_SUPER\\n  | typeof SCOPE_CLASS\\n  | typeof SCOPE_STATIC_BLOCK;\\n\\n// These flags are meant to be _only_ used inside the Scope class (or subclasses).\\n// prettier-ignore\\nexport const BIND_KIND_VALUE            = 0b0000000_0000_01,\\n             BIND_KIND_TYPE             = 0b0000000_0000_10,\\n             // Used in checkLVal and declareName to determine the type of a binding\\n             BIND_SCOPE_VAR             = 0b0000000_0001_00, // Var-style binding\\n             BIND_SCOPE_LEXICAL         = 0b0000000_0010_00, // Let- or const-style binding\\n             BIND_SCOPE_FUNCTION        = 0b0000000_0100_00, // Function declaration\\n             BIND_SCOPE_OUTSIDE         = 0b0000000_1000_00, // Special case for function names as\\n                                                   // bound inside the function\\n             // Misc flags\\n             BIND_FLAGS_NONE            = 0b00000001_0000_00,\\n             BIND_FLAGS_CLASS           = 0b00000010_0000_00,\\n             BIND_FLAGS_TS_ENUM         = 0b00000100_0000_00,\\n             BIND_FLAGS_TS_CONST_ENUM   = 0b00001000_0000_00,\\n             BIND_FLAGS_TS_EXPORT_ONLY  = 0b00010000_0000_00,\\n             BIND_FLAGS_FLOW_DECLARE_FN = 0b00100000_0000_00,\\n             BIND_FLAGS_TS_IMPORT       = 0b01000000_0000_00,\\n             // Whether \\\"let\\\" should be allowed in bound names in sloppy mode\\n             BIND_FLAGS_NO_LET_IN_LEXICAL = 0b10000000_0000_00;\\n\\n// These flags are meant to be _only_ used by Scope consumers\\n// prettier-ignore\\n/*                              =    is value?    |    is type?    |      scope          |    misc flags    */\\nexport const BIND_CLASS         = BIND_KIND_VALUE | BIND_KIND_TYPE | BIND_SCOPE_LEXICAL  | BIND_FLAGS_CLASS|BIND_FLAGS_NO_LET_IN_LEXICAL,\\n             BIND_LEXICAL       = BIND_KIND_VALUE | 0              | BIND_SCOPE_LEXICAL  | BIND_FLAGS_NO_LET_IN_LEXICAL,\\n             BIND_CATCH_PARAM   = BIND_KIND_VALUE | 0              | BIND_SCOPE_LEXICAL  | 0                 ,\\n             BIND_VAR           = BIND_KIND_VALUE | 0              | BIND_SCOPE_VAR      | 0                 ,\\n             BIND_FUNCTION      = BIND_KIND_VALUE | 0              | BIND_SCOPE_FUNCTION | 0                 ,\\n             BIND_TS_INTERFACE  = 0               | BIND_KIND_TYPE | 0                   | BIND_FLAGS_CLASS  ,\\n             BIND_TS_TYPE       = 0               | BIND_KIND_TYPE | 0                   | 0                 ,\\n             BIND_TS_ENUM       = BIND_KIND_VALUE | BIND_KIND_TYPE | BIND_SCOPE_LEXICAL  | BIND_FLAGS_TS_ENUM|BIND_FLAGS_NO_LET_IN_LEXICAL,\\n             BIND_TS_AMBIENT    = 0               | 0              | 0            | BIND_FLAGS_TS_EXPORT_ONLY,\\n             // These bindings don't introduce anything in the scope. They are used for assignments and\\n             // function expressions IDs.\\n             BIND_NONE          = 0               | 0              | 0                   | BIND_FLAGS_NONE          ,\\n             BIND_OUTSIDE       = BIND_KIND_VALUE | 0              | 0                   | BIND_FLAGS_NONE          ,\\n\\n             BIND_TS_CONST_ENUM = BIND_TS_ENUM    | BIND_FLAGS_TS_CONST_ENUM                                        ,\\n             BIND_TS_NAMESPACE  = 0               | 0              | 0                   | BIND_FLAGS_TS_EXPORT_ONLY,\\n             BIND_TS_TYPE_IMPORT= 0               | BIND_KIND_TYPE | 0                   | BIND_FLAGS_TS_IMPORT     ,\\n\\n             BIND_FLOW_DECLARE_FN = BIND_FLAGS_FLOW_DECLARE_FN;\\n\\nexport type BindingTypes =\\n  | typeof BIND_NONE\\n  | typeof BIND_OUTSIDE\\n  | typeof BIND_VAR\\n  | typeof BIND_LEXICAL\\n  | typeof BIND_CLASS\\n  | typeof BIND_FUNCTION\\n  | typeof BIND_TS_INTERFACE\\n  | typeof BIND_TS_TYPE\\n  | typeof BIND_TS_ENUM\\n  | typeof BIND_TS_AMBIENT\\n  | typeof BIND_TS_NAMESPACE;\\n\\n// prettier-ignore\\nexport const CLASS_ELEMENT_FLAG_STATIC = 0b1_00,\\n             CLASS_ELEMENT_KIND_GETTER = 0b0_10,\\n             CLASS_ELEMENT_KIND_SETTER = 0b0_01,\\n             CLASS_ELEMENT_KIND_ACCESSOR = CLASS_ELEMENT_KIND_GETTER | CLASS_ELEMENT_KIND_SETTER;\\n\\n// prettier-ignore\\nexport const CLASS_ELEMENT_STATIC_GETTER   = CLASS_ELEMENT_KIND_GETTER | CLASS_ELEMENT_FLAG_STATIC,\\n             CLASS_ELEMENT_STATIC_SETTER   = CLASS_ELEMENT_KIND_SETTER | CLASS_ELEMENT_FLAG_STATIC,\\n             CLASS_ELEMENT_INSTANCE_GETTER = CLASS_ELEMENT_KIND_GETTER,\\n             CLASS_ELEMENT_INSTANCE_SETTER = CLASS_ELEMENT_KIND_SETTER,\\n             CLASS_ELEMENT_OTHER           = 0;\\n\\nexport type ClassElementTypes =\\n  | typeof CLASS_ELEMENT_STATIC_GETTER\\n  | typeof CLASS_ELEMENT_STATIC_SETTER\\n  | typeof CLASS_ELEMENT_INSTANCE_GETTER\\n  | typeof CLASS_ELEMENT_INSTANCE_SETTER\\n  | typeof CLASS_ELEMENT_OTHER;\\n\",\"import {\\n  SCOPE_ARROW,\\n  SCOPE_DIRECT_SUPER,\\n  SCOPE_FUNCTION,\\n  SCOPE_SIMPLE_CATCH,\\n  SCOPE_SUPER,\\n  SCOPE_PROGRAM,\\n  SCOPE_VAR,\\n  SCOPE_CLASS,\\n  SCOPE_STATIC_BLOCK,\\n  BIND_SCOPE_FUNCTION,\\n  BIND_SCOPE_VAR,\\n  BIND_SCOPE_LEXICAL,\\n  BIND_KIND_VALUE,\\n  type ScopeFlags,\\n  type BindingTypes,\\n} from \\\"./scopeflags\\\";\\nimport type { Position } from \\\"./location\\\";\\nimport type * as N from \\\"../types\\\";\\nimport { Errors } from \\\"../parse-error\\\";\\nimport type Tokenizer from \\\"../tokenizer\\\";\\n\\n// Start an AST node, attaching a start offset.\\nexport class Scope {\\n  declare flags: ScopeFlags;\\n  // A set of var-declared names in the current lexical scope\\n  var: Set<string> = new Set();\\n  // A set of lexically-declared names in the current lexical scope\\n  lexical: Set<string> = new Set();\\n  // A set of lexically-declared FunctionDeclaration names in the current lexical scope\\n  functions: Set<string> = new Set();\\n\\n  constructor(flags: ScopeFlags) {\\n    this.flags = flags;\\n  }\\n}\\n\\n// The functions in this module keep track of declared variables in the\\n// current scope in order to detect duplicate variable names.\\nexport default class ScopeHandler<IScope extends Scope = Scope> {\\n  parser: Tokenizer;\\n  scopeStack: Array<IScope> = [];\\n  inModule: boolean;\\n  undefinedExports: Map<string, Position> = new Map();\\n\\n  constructor(parser: Tokenizer, inModule: boolean) {\\n    this.parser = parser;\\n    this.inModule = inModule;\\n  }\\n\\n  get inTopLevel() {\\n    return (this.currentScope().flags & SCOPE_PROGRAM) > 0;\\n  }\\n  get inFunction() {\\n    return (this.currentVarScopeFlags() & SCOPE_FUNCTION) > 0;\\n  }\\n  get allowSuper() {\\n    return (this.currentThisScopeFlags() & SCOPE_SUPER) > 0;\\n  }\\n  get allowDirectSuper() {\\n    return (this.currentThisScopeFlags() & SCOPE_DIRECT_SUPER) > 0;\\n  }\\n  get inClass() {\\n    return (this.currentThisScopeFlags() & SCOPE_CLASS) > 0;\\n  }\\n  get inClassAndNotInNonArrowFunction() {\\n    const flags = this.currentThisScopeFlags();\\n    return (flags & SCOPE_CLASS) > 0 && (flags & SCOPE_FUNCTION) === 0;\\n  }\\n  get inStaticBlock() {\\n    for (let i = this.scopeStack.length - 1; ; i--) {\\n      const { flags } = this.scopeStack[i];\\n      if (flags & SCOPE_STATIC_BLOCK) {\\n        return true;\\n      }\\n      if (flags & (SCOPE_VAR | SCOPE_CLASS)) {\\n        // function body, module body, class property initializers\\n        return false;\\n      }\\n    }\\n  }\\n  get inNonArrowFunction() {\\n    return (this.currentThisScopeFlags() & SCOPE_FUNCTION) > 0;\\n  }\\n  get treatFunctionsAsVar() {\\n    return this.treatFunctionsAsVarInScope(this.currentScope());\\n  }\\n\\n  createScope(flags: ScopeFlags): Scope {\\n    return new Scope(flags);\\n  }\\n\\n  enter(flags: ScopeFlags) {\\n    /*:: +createScope: (flags: ScopeFlags) => IScope; */\\n    // @ts-expect-error This method will be overwritten by subclasses\\n    this.scopeStack.push(this.createScope(flags));\\n  }\\n\\n  exit(): ScopeFlags {\\n    const scope = this.scopeStack.pop();\\n    return scope.flags;\\n  }\\n\\n  // The spec says:\\n  // > At the top level of a function, or script, function declarations are\\n  // > treated like var declarations rather than like lexical declarations.\\n  treatFunctionsAsVarInScope(scope: IScope): boolean {\\n    return !!(\\n      scope.flags & (SCOPE_FUNCTION | SCOPE_STATIC_BLOCK) ||\\n      (!this.parser.inModule && scope.flags & SCOPE_PROGRAM)\\n    );\\n  }\\n\\n  declareName(name: string, bindingType: BindingTypes, loc: Position) {\\n    let scope = this.currentScope();\\n    if (bindingType & BIND_SCOPE_LEXICAL || bindingType & BIND_SCOPE_FUNCTION) {\\n      this.checkRedeclarationInScope(scope, name, bindingType, loc);\\n\\n      if (bindingType & BIND_SCOPE_FUNCTION) {\\n        scope.functions.add(name);\\n      } else {\\n        scope.lexical.add(name);\\n      }\\n\\n      if (bindingType & BIND_SCOPE_LEXICAL) {\\n        this.maybeExportDefined(scope, name);\\n      }\\n    } else if (bindingType & BIND_SCOPE_VAR) {\\n      for (let i = this.scopeStack.length - 1; i >= 0; --i) {\\n        scope = this.scopeStack[i];\\n        this.checkRedeclarationInScope(scope, name, bindingType, loc);\\n        scope.var.add(name);\\n        this.maybeExportDefined(scope, name);\\n\\n        if (scope.flags & SCOPE_VAR) break;\\n      }\\n    }\\n    if (this.parser.inModule && scope.flags & SCOPE_PROGRAM) {\\n      this.undefinedExports.delete(name);\\n    }\\n  }\\n\\n  maybeExportDefined(scope: IScope, name: string) {\\n    if (this.parser.inModule && scope.flags & SCOPE_PROGRAM) {\\n      this.undefinedExports.delete(name);\\n    }\\n  }\\n\\n  checkRedeclarationInScope(\\n    scope: IScope,\\n    name: string,\\n    bindingType: BindingTypes,\\n    loc: Position,\\n  ) {\\n    if (this.isRedeclaredInScope(scope, name, bindingType)) {\\n      this.parser.raise(Errors.VarRedeclaration, {\\n        at: loc,\\n        identifierName: name,\\n      });\\n    }\\n  }\\n\\n  isRedeclaredInScope(\\n    scope: IScope,\\n    name: string,\\n    bindingType: BindingTypes,\\n  ): boolean {\\n    if (!(bindingType & BIND_KIND_VALUE)) return false;\\n\\n    if (bindingType & BIND_SCOPE_LEXICAL) {\\n      return (\\n        scope.lexical.has(name) ||\\n        scope.functions.has(name) ||\\n        scope.var.has(name)\\n      );\\n    }\\n\\n    if (bindingType & BIND_SCOPE_FUNCTION) {\\n      return (\\n        scope.lexical.has(name) ||\\n        (!this.treatFunctionsAsVarInScope(scope) && scope.var.has(name))\\n      );\\n    }\\n\\n    return (\\n      (scope.lexical.has(name) &&\\n        // Annex B.3.4\\n        // https://tc39.es/ecma262/#sec-variablestatements-in-catch-blocks\\n        !(\\n          scope.flags & SCOPE_SIMPLE_CATCH &&\\n          scope.lexical.values().next().value === name\\n        )) ||\\n      (!this.treatFunctionsAsVarInScope(scope) && scope.functions.has(name))\\n    );\\n  }\\n\\n  checkLocalExport(id: N.Identifier) {\\n    const { name } = id;\\n    const topLevelScope = this.scopeStack[0];\\n    if (\\n      !topLevelScope.lexical.has(name) &&\\n      !topLevelScope.var.has(name) &&\\n      // In strict mode, scope.functions will always be empty.\\n      // Modules are strict by default, but the `scriptMode` option\\n      // can overwrite this behavior.\\n      !topLevelScope.functions.has(name)\\n    ) {\\n      this.undefinedExports.set(name, id.loc.start);\\n    }\\n  }\\n\\n  currentScope(): IScope {\\n    return this.scopeStack[this.scopeStack.length - 1];\\n  }\\n\\n  currentVarScopeFlags(): ScopeFlags {\\n    for (let i = this.scopeStack.length - 1; ; i--) {\\n      const { flags } = this.scopeStack[i];\\n      if (flags & SCOPE_VAR) {\\n        return flags;\\n      }\\n    }\\n  }\\n\\n  // Could be useful for `arguments`, `this`, `new.target`, `super()`, `super.property`, and `super[property]`.\\n  currentThisScopeFlags(): ScopeFlags {\\n    for (let i = this.scopeStack.length - 1; ; i--) {\\n      const { flags } = this.scopeStack[i];\\n      if (flags & (SCOPE_VAR | SCOPE_CLASS) && !(flags & SCOPE_ARROW)) {\\n        return flags;\\n      }\\n    }\\n  }\\n}\\n\",\"import type { Position } from \\\"../../util/location\\\";\\nimport ScopeHandler, { Scope } from \\\"../../util/scope\\\";\\nimport {\\n  BIND_FLAGS_FLOW_DECLARE_FN,\\n  type ScopeFlags,\\n  type BindingTypes,\\n} from \\\"../../util/scopeflags\\\";\\nimport type * as N from \\\"../../types\\\";\\n\\n// Reference implementation: https://github.com/facebook/flow/blob/23aeb2a2ef6eb4241ce178fde5d8f17c5f747fb5/src/typing/env.ml#L536-L584\\nclass FlowScope extends Scope {\\n  // declare function foo(): type;\\n  declareFunctions: Set<string> = new Set();\\n}\\n\\nexport default class FlowScopeHandler extends ScopeHandler<FlowScope> {\\n  createScope(flags: ScopeFlags): FlowScope {\\n    return new FlowScope(flags);\\n  }\\n\\n  declareName(name: string, bindingType: BindingTypes, loc: Position) {\\n    const scope = this.currentScope();\\n    if (bindingType & BIND_FLAGS_FLOW_DECLARE_FN) {\\n      this.checkRedeclarationInScope(scope, name, bindingType, loc);\\n      this.maybeExportDefined(scope, name);\\n      scope.declareFunctions.add(name);\\n      return;\\n    }\\n\\n    super.declareName(name, bindingType, loc);\\n  }\\n\\n  isRedeclaredInScope(\\n    scope: FlowScope,\\n    name: string,\\n    bindingType: BindingTypes,\\n  ): boolean {\\n    if (super.isRedeclaredInScope(scope, name, bindingType)) return true;\\n\\n    if (bindingType & BIND_FLAGS_FLOW_DECLARE_FN) {\\n      return (\\n        !scope.declareFunctions.has(name) &&\\n        (scope.lexical.has(name) || scope.functions.has(name))\\n      );\\n    }\\n\\n    return false;\\n  }\\n\\n  checkLocalExport(id: N.Identifier) {\\n    if (!this.scopeStack[0].declareFunctions.has(id.name)) {\\n      super.checkLocalExport(id);\\n    }\\n  }\\n}\\n\",\"import type { Options } from \\\"../options\\\";\\nimport type State from \\\"../tokenizer/state\\\";\\nimport type { PluginsMap } from \\\"./index\\\";\\nimport type ScopeHandler from \\\"../util/scope\\\";\\nimport type ExpressionScopeHandler from \\\"../util/expression-scope\\\";\\nimport type ClassScopeHandler from \\\"../util/class-scope\\\";\\nimport type ProductionParameterHandler from \\\"../util/production-parameter\\\";\\nimport type {\\n  ParserPluginWithOptions,\\n  PluginConfig,\\n  PluginOptions,\\n} from \\\"../typings\\\";\\n\\nexport default class BaseParser {\\n  // Properties set by constructor in index.js\\n  declare options: Options;\\n  declare inModule: boolean;\\n  declare scope: ScopeHandler<any>;\\n  declare classScope: ClassScopeHandler;\\n  declare prodParam: ProductionParameterHandler;\\n  declare expressionScope: ExpressionScopeHandler;\\n  declare plugins: PluginsMap;\\n  declare filename: string | undefined | null;\\n  // Names of exports store. `default` is stored as a name for both\\n  // `export default foo;` and `export { foo as default };`.\\n  declare exportedIdentifiers: Set<string>;\\n  sawUnambiguousESM: boolean = false;\\n  ambiguousScriptDifferentAst: boolean = false;\\n\\n  // Initialized by Tokenizer\\n  declare state: State;\\n  // input and length are not in state as they are constant and we do\\n  // not want to ever copy them, which happens if state gets cloned\\n  declare input: string;\\n  declare length: number;\\n\\n  // This method accepts either a string (plugin name) or an array pair\\n  // (plugin name and options object). If an options object is given,\\n  // then each value is non-recursively checked for identity with that\\n  // plugin’s actual option value.\\n  hasPlugin(pluginConfig: PluginConfig): boolean {\\n    if (typeof pluginConfig === \\\"string\\\") {\\n      return this.plugins.has(pluginConfig);\\n    } else {\\n      const [pluginName, pluginOptions] = pluginConfig;\\n      if (!this.hasPlugin(pluginName)) {\\n        return false;\\n      }\\n      const actualOptions = this.plugins.get(pluginName);\\n      for (const key of Object.keys(\\n        pluginOptions,\\n      ) as (keyof typeof pluginOptions)[]) {\\n        if (actualOptions?.[key] !== pluginOptions[key]) {\\n          return false;\\n        }\\n      }\\n      return true;\\n    }\\n  }\\n\\n  getPluginOption<\\n    PluginName extends ParserPluginWithOptions[0],\\n    OptionName extends keyof PluginOptions<PluginName>,\\n  >(plugin: PluginName, name: OptionName) {\\n    return (this.plugins.get(plugin) as null | PluginOptions<PluginName>)?.[\\n      name\\n    ];\\n  }\\n}\\n\",\"/*:: declare var invariant; */\\n\\nimport BaseParser from \\\"./base\\\";\\nimport type { Comment, Node } from \\\"../types\\\";\\nimport * as charCodes from \\\"charcodes\\\";\\nimport type { Undone } from \\\"./node\\\";\\n\\n/**\\n * A whitespace token containing comments\\n */\\nexport type CommentWhitespace = {\\n  /**\\n   * the start of the whitespace token.\\n   */\\n  start: number;\\n  /**\\n   * the end of the whitespace token.\\n   */\\n  end: number;\\n  /**\\n   * the containing comments\\n   */\\n  comments: Array<Comment>;\\n  /**\\n   * the immediately preceding AST node of the whitespace token\\n   */\\n  leadingNode: Node | null;\\n  /**\\n   * the immediately following AST node of the whitespace token\\n   */\\n  trailingNode: Node | null;\\n  /**\\n   * the innermost AST node containing the whitespace with minimal size (|end - start|)\\n   */\\n  containingNode: Node | null;\\n};\\n\\n/**\\n * Merge comments with node's trailingComments or assign comments to be\\n * trailingComments. New comments will be placed before old comments\\n * because the commentStack is enumerated reversely.\\n */\\nfunction setTrailingComments(node: Undone<Node>, comments: Array<Comment>) {\\n  if (node.trailingComments === undefined) {\\n    node.trailingComments = comments;\\n  } else {\\n    node.trailingComments.unshift(...comments);\\n  }\\n}\\n\\n/**\\n * Merge comments with node's leadingComments or assign comments to be\\n * leadingComments. New comments will be placed before old comments\\n * because the commentStack is enumerated reversely.\\n */\\nfunction setLeadingComments(node: Undone<Node>, comments: Array<Comment>) {\\n  if (node.leadingComments === undefined) {\\n    node.leadingComments = comments;\\n  } else {\\n    node.leadingComments.unshift(...comments);\\n  }\\n}\\n\\n/**\\n * Merge comments with node's innerComments or assign comments to be\\n * innerComments. New comments will be placed before old comments\\n * because the commentStack is enumerated reversely.\\n */\\nexport function setInnerComments(\\n  node: Undone<Node>,\\n  comments?: Array<Comment>,\\n) {\\n  if (node.innerComments === undefined) {\\n    node.innerComments = comments;\\n  } else {\\n    node.innerComments.unshift(...comments);\\n  }\\n}\\n\\n/**\\n * Given node and elements array, if elements has non-null element,\\n * merge comments to its trailingComments, otherwise merge comments\\n * to node's innerComments\\n */\\nfunction adjustInnerComments(\\n  node: Undone<Node>,\\n  elements: Array<Node>,\\n  commentWS: CommentWhitespace,\\n) {\\n  let lastElement = null;\\n  let i = elements.length;\\n  while (lastElement === null && i > 0) {\\n    lastElement = elements[--i];\\n  }\\n  if (lastElement === null || lastElement.start > commentWS.start) {\\n    setInnerComments(node, commentWS.comments);\\n  } else {\\n    setTrailingComments(lastElement, commentWS.comments);\\n  }\\n}\\n\\nexport default class CommentsParser extends BaseParser {\\n  addComment(comment: Comment): void {\\n    if (this.filename) comment.loc.filename = this.filename;\\n    this.state.comments.push(comment);\\n  }\\n\\n  /**\\n   * Given a newly created AST node _n_, attach _n_ to a comment whitespace _w_ if applicable\\n   * {@see {@link CommentWhitespace}}\\n   */\\n  processComment(node: Node): void {\\n    const { commentStack } = this.state;\\n    const commentStackLength = commentStack.length;\\n    if (commentStackLength === 0) return;\\n    let i = commentStackLength - 1;\\n    const lastCommentWS = commentStack[i];\\n\\n    if (lastCommentWS.start === node.end) {\\n      lastCommentWS.leadingNode = node;\\n      i--;\\n    }\\n\\n    const { start: nodeStart } = node;\\n    // invariant: for all 0 <= j <= i, let c = commentStack[j], c must satisfy c.end < node.end\\n    for (; i >= 0; i--) {\\n      const commentWS = commentStack[i];\\n      const commentEnd = commentWS.end;\\n      if (commentEnd > nodeStart) {\\n        // by definition of commentWhiteSpace, this implies commentWS.start > nodeStart\\n        // so node can be a containingNode candidate. At this time we can finalize the comment\\n        // whitespace, because\\n        // 1) its leadingNode or trailingNode, if exists, will not change\\n        // 2) its containingNode have been assigned and will not change because it is the\\n        //    innermost minimal-sized AST node\\n        commentWS.containingNode = node;\\n        this.finalizeComment(commentWS);\\n        commentStack.splice(i, 1);\\n      } else {\\n        if (commentEnd === nodeStart) {\\n          commentWS.trailingNode = node;\\n        }\\n        // stop the loop when commentEnd <= nodeStart\\n        break;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * Assign the comments of comment whitespaces to related AST nodes.\\n   * Also adjust innerComments following trailing comma.\\n   */\\n  finalizeComment(commentWS: CommentWhitespace) {\\n    const { comments } = commentWS;\\n    if (commentWS.leadingNode !== null || commentWS.trailingNode !== null) {\\n      if (commentWS.leadingNode !== null) {\\n        setTrailingComments(commentWS.leadingNode, comments);\\n      }\\n      if (commentWS.trailingNode !== null) {\\n        setLeadingComments(commentWS.trailingNode, comments);\\n      }\\n    } else {\\n      /*:: invariant(commentWS.containingNode !== null) */\\n      const { containingNode: node, start: commentStart } = commentWS;\\n      if (this.input.charCodeAt(commentStart - 1) === charCodes.comma) {\\n        // If a commentWhitespace follows a comma and the containingNode allows\\n        // list structures with trailing comma, merge it to the trailingComment\\n        // of the last non-null list element\\n        switch (node.type) {\\n          case \\\"ObjectExpression\\\":\\n          case \\\"ObjectPattern\\\":\\n          case \\\"RecordExpression\\\":\\n            adjustInnerComments(node, node.properties, commentWS);\\n            break;\\n          case \\\"CallExpression\\\":\\n          case \\\"OptionalCallExpression\\\":\\n            adjustInnerComments(node, node.arguments, commentWS);\\n            break;\\n          case \\\"FunctionDeclaration\\\":\\n          case \\\"FunctionExpression\\\":\\n          case \\\"ArrowFunctionExpression\\\":\\n          case \\\"ObjectMethod\\\":\\n          case \\\"ClassMethod\\\":\\n          case \\\"ClassPrivateMethod\\\":\\n            adjustInnerComments(node, node.params, commentWS);\\n            break;\\n          case \\\"ArrayExpression\\\":\\n          case \\\"ArrayPattern\\\":\\n          case \\\"TupleExpression\\\":\\n            adjustInnerComments(node, node.elements, commentWS);\\n            break;\\n          case \\\"ExportNamedDeclaration\\\":\\n          case \\\"ImportDeclaration\\\":\\n            adjustInnerComments(node, node.specifiers, commentWS);\\n            break;\\n          default: {\\n            setInnerComments(node, comments);\\n          }\\n        }\\n      } else {\\n        setInnerComments(node, comments);\\n      }\\n    }\\n  }\\n\\n  /**\\n   * Drains remaining commentStack and applies finalizeComment\\n   * to each comment whitespace. Used only in parseExpression\\n   * where the top level AST node is _not_ Program\\n   * {@see {@link CommentsParser#finalizeComment}}\\n   */\\n  finalizeRemainingComments() {\\n    const { commentStack } = this.state;\\n    for (let i = commentStack.length - 1; i >= 0; i--) {\\n      this.finalizeComment(commentStack[i]);\\n    }\\n    this.state.commentStack = [];\\n  }\\n\\n  /* eslint-disable no-irregular-whitespace */\\n  /**\\n   * Reset previous node trailing comments. Used in object / class\\n   * property parsing. We parse `async`, `static`, `set` and `get`\\n   * as an identifier but may reinterpret it into an async/static/accessor\\n   * method later. In this case the identifier is not part of the AST and we\\n   * should sync the knowledge to commentStacks\\n   *\\n   * For example, when parsing\\n   * ```\\n   * async /* 1 *​/ function f() {}\\n   * ```\\n   * the comment whitespace `/* 1 *​/` has leading node Identifier(async). When\\n   * we see the function token, we create a Function node and mark `/* 1 *​/` as\\n   * inner comments. So `/* 1 *​/` should be detached from the Identifier node.\\n   *\\n   * @param node the last finished AST node _before_ current token\\n   */\\n  /* eslint-enable no-irregular-whitespace */\\n  resetPreviousNodeTrailingComments(node: Node) {\\n    const { commentStack } = this.state;\\n    const { length } = commentStack;\\n    if (length === 0) return;\\n    const commentWS = commentStack[length - 1];\\n    if (commentWS.leadingNode === node) {\\n      commentWS.leadingNode = null;\\n    }\\n  }\\n\\n  /**\\n   * Attach a node to the comment whitespaces right before/after\\n   * the given range.\\n   *\\n   * This is used to properly attach comments around parenthesized\\n   * expressions as leading/trailing comments of the inner expression.\\n   */\\n  takeSurroundingComments(node: Node, start: number, end: number) {\\n    const { commentStack } = this.state;\\n    const commentStackLength = commentStack.length;\\n    if (commentStackLength === 0) return;\\n    let i = commentStackLength - 1;\\n\\n    for (; i >= 0; i--) {\\n      const commentWS = commentStack[i];\\n      const commentEnd = commentWS.end;\\n      const commentStart = commentWS.start;\\n\\n      if (commentStart === end) {\\n        commentWS.leadingNode = node;\\n      } else if (commentEnd === start) {\\n        commentWS.trailingNode = node;\\n      } else if (commentEnd < start) {\\n        break;\\n      }\\n    }\\n  }\\n}\\n\",\"import * as charCodes from \\\"charcodes\\\";\\n\\n// Matches a whole line break (where CRLF is considered a single\\n// line break). Used to count lines.\\nexport const lineBreak = /\\\\r\\\\n?|[\\\\n\\\\u2028\\\\u2029]/;\\nexport const lineBreakG = new RegExp(lineBreak.source, \\\"g\\\");\\n\\n// https://tc39.github.io/ecma262/#sec-line-terminators\\nexport function isNewLine(code: number): boolean {\\n  switch (code) {\\n    case charCodes.lineFeed:\\n    case charCodes.carriageReturn:\\n    case charCodes.lineSeparator:\\n    case charCodes.paragraphSeparator:\\n      return true;\\n\\n    default:\\n      return false;\\n  }\\n}\\n\\nexport const skipWhiteSpace = /(?:\\\\s|\\\\/\\\\/.*|\\\\/\\\\*[^]*?\\\\*\\\\/)*/g;\\n\\nexport const skipWhiteSpaceInLine =\\n  /(?:[^\\\\S\\\\n\\\\r\\\\u2028\\\\u2029]|\\\\/\\\\/.*|\\\\/\\\\*.*?\\\\*\\\\/)*/y;\\n\\n// Skip whitespace and single-line comments, including /* no newline here */.\\n// After this RegExp matches, its lastIndex points to a line terminator, or\\n// the start of multi-line comment (which is effectively a line terminator),\\n// or the end of string.\\nexport const skipWhiteSpaceToLineBreak = new RegExp(\\n  // Unfortunately JS doesn't support Perl's atomic /(?>pattern)/ or\\n  // possessive quantifiers, so we use a trick to prevent backtracking\\n  // when the look-ahead for line terminator fails.\\n  \\\"(?=(\\\" +\\n    // Capture the whitespace and comments that should be skipped inside\\n    // a look-ahead assertion, and then re-match the group as a unit.\\n    skipWhiteSpaceInLine.source +\\n    \\\"))\\\\\\\\1\\\" +\\n    // Look-ahead for either line terminator, start of multi-line comment,\\n    // or end of string.\\n    /(?=[\\\\n\\\\r\\\\u2028\\\\u2029]|\\\\/\\\\*(?!.*?\\\\*\\\\/)|$)/.source,\\n  \\\"y\\\", // sticky\\n);\\n\\n// https://tc39.github.io/ecma262/#sec-white-space\\nexport function isWhitespace(code: number): boolean {\\n  switch (code) {\\n    case 0x0009: // CHARACTER TABULATION\\n    case 0x000b: // LINE TABULATION\\n    case 0x000c: // FORM FEED\\n    case charCodes.space:\\n    case charCodes.nonBreakingSpace:\\n    case charCodes.oghamSpaceMark:\\n    case 0x2000: // EN QUAD\\n    case 0x2001: // EM QUAD\\n    case 0x2002: // EN SPACE\\n    case 0x2003: // EM SPACE\\n    case 0x2004: // THREE-PER-EM SPACE\\n    case 0x2005: // FOUR-PER-EM SPACE\\n    case 0x2006: // SIX-PER-EM SPACE\\n    case 0x2007: // FIGURE SPACE\\n    case 0x2008: // PUNCTUATION SPACE\\n    case 0x2009: // THIN SPACE\\n    case 0x200a: // HAIR SPACE\\n    case 0x202f: // NARROW NO-BREAK SPACE\\n    case 0x205f: // MEDIUM MATHEMATICAL SPACE\\n    case 0x3000: // IDEOGRAPHIC SPACE\\n    case 0xfeff: // ZERO WIDTH NO-BREAK SPACE\\n      return true;\\n\\n    default:\\n      return false;\\n  }\\n}\\n\",\"import type { Options } from \\\"../options\\\";\\nimport type * as N from \\\"../types\\\";\\nimport type { CommentWhitespace } from \\\"../parser/comments\\\";\\nimport { Position } from \\\"../util/location\\\";\\n\\nimport { types as ct, type TokContext } from \\\"./context\\\";\\nimport { tt, type TokenType } from \\\"./types\\\";\\nimport type { Errors } from \\\"../parse-error\\\";\\nimport { type ParseError } from \\\"../parse-error\\\";\\n\\nexport type DeferredStrictError =\\n  | typeof Errors.StrictNumericEscape\\n  | typeof Errors.StrictOctalLiteral;\\n\\ntype TopicContextState = {\\n  // When a topic binding has been currently established,\\n  // then this is 1. Otherwise, it is 0. This is forwards compatible\\n  // with a future plugin for multiple lexical topics.\\n  maxNumOfResolvableTopics: number;\\n  // When a topic binding has been currently established, and if that binding\\n  // has been used as a topic reference `#`, then this is 0. Otherwise, it is\\n  // `null`. This is forwards compatible with a future plugin for multiple\\n  // lexical topics.\\n  maxTopicIndex: null | 0;\\n};\\n\\nexport default class State {\\n  strict: boolean;\\n  curLine: number;\\n  lineStart: number;\\n\\n  // And, if locations are used, the {line, column} object\\n  // corresponding to those offsets\\n  startLoc: Position;\\n  endLoc: Position;\\n\\n  init({ strictMode, sourceType, startLine, startColumn }: Options): void {\\n    this.strict =\\n      strictMode === false\\n        ? false\\n        : strictMode === true\\n        ? true\\n        : sourceType === \\\"module\\\";\\n\\n    this.curLine = startLine;\\n    this.lineStart = -startColumn;\\n    this.startLoc = this.endLoc = new Position(startLine, startColumn, 0);\\n  }\\n\\n  errors: ParseError<any>[] = [];\\n\\n  // Used to signify the start of a potential arrow function\\n  potentialArrowAt: number = -1;\\n\\n  // Used to signify the start of an expression which looks like a\\n  // typed arrow function, but it isn't\\n  // e.g. a ? (b) : c => d\\n  //          ^\\n  noArrowAt: number[] = [];\\n\\n  // Used to signify the start of an expression whose params, if it looks like\\n  // an arrow function, shouldn't be converted to assignable nodes.\\n  // This is used to defer the validation of typed arrow functions inside\\n  // conditional expressions.\\n  // e.g. a ? (b) : c => d\\n  //          ^\\n  noArrowParamsConversionAt: number[] = [];\\n\\n  // Flags to track\\n  maybeInArrowParameters: boolean = false;\\n  inType: boolean = false;\\n  noAnonFunctionType: boolean = false;\\n  hasFlowComment: boolean = false;\\n  isAmbientContext: boolean = false;\\n  inAbstractClass: boolean = false;\\n  inDisallowConditionalTypesContext: boolean = false;\\n\\n  // For the Hack-style pipelines plugin\\n  topicContext: TopicContextState = {\\n    maxNumOfResolvableTopics: 0,\\n    maxTopicIndex: null,\\n  };\\n\\n  // For the F#-style pipelines plugin\\n  soloAwait: boolean = false;\\n  inFSharpPipelineDirectBody: boolean = false;\\n\\n  // Labels in scope.\\n  labels: Array<{\\n    kind: \\\"loop\\\" | \\\"switch\\\" | undefined | null;\\n    name?: string | null;\\n    statementStart?: number;\\n  }> = [];\\n\\n  // Comment store for Program.comments\\n  comments: Array<N.Comment> = [];\\n\\n  // Comment attachment store\\n  commentStack: Array<CommentWhitespace> = [];\\n\\n  // The current position of the tokenizer in the input.\\n  pos: number = 0;\\n\\n  // Properties of the current token:\\n  // Its type\\n  type: TokenType = tt.eof;\\n\\n  // For tokens that include more information than their type, the value\\n  value: any = null;\\n\\n  // Its start and end offset\\n  start: number = 0;\\n  end: number = 0;\\n\\n  // Position information for the previous token\\n  // this is initialized when generating the second token.\\n  lastTokEndLoc: Position = null;\\n  // this is initialized when generating the second token.\\n  lastTokStartLoc: Position = null;\\n  lastTokStart: number = 0;\\n\\n  // The context stack is used to track whether the apostrophe \\\"`\\\" starts\\n  // or ends a string template\\n  context: Array<TokContext> = [ct.brace];\\n  // Used to track whether a JSX element is allowed to form\\n  canStartJSXElement: boolean = true;\\n\\n  // Used to signal to callers of `readWord1` whether the word\\n  // contained any escape sequences. This is needed because words with\\n  // escape sequences must not be interpreted as keywords.\\n  containsEsc: boolean = false;\\n\\n  // Used to track invalid escape sequences in template literals,\\n  // that must be reported if the template is not tagged.\\n  firstInvalidTemplateEscapePos: null | Position = null;\\n\\n  // This property is used to track the following errors\\n  // - StrictNumericEscape\\n  // - StrictOctalLiteral\\n  //\\n  // in a literal that occurs prior to/immediately after a \\\"use strict\\\" directive.\\n\\n  // todo(JLHwung): set strictErrors to null and avoid recording string errors\\n  // after a non-directive is parsed\\n  strictErrors: Map<number, [DeferredStrictError, Position]> = new Map();\\n\\n  // Tokens length in token store\\n  tokensLength: number = 0;\\n\\n  curPosition(): Position {\\n    return new Position(this.curLine, this.pos - this.lineStart, this.pos);\\n  }\\n\\n  clone(skipArrays?: boolean): State {\\n    const state = new State();\\n    const keys = Object.keys(this) as (keyof State)[];\\n    for (let i = 0, length = keys.length; i < length; i++) {\\n      const key = keys[i];\\n      let val = this[key];\\n\\n      if (!skipArrays && Array.isArray(val)) {\\n        val = val.slice();\\n      }\\n\\n      // @ts-expect-error val must conform to S[key]\\n      state[key] = val;\\n    }\\n\\n    return state;\\n  }\\n}\\n\\nexport type LookaheadState = {\\n  pos: number;\\n  value: any;\\n  type: TokenType;\\n  start: number;\\n  end: number;\\n  context: TokContext[];\\n  startLoc: Position;\\n  lastTokEndLoc: Position;\\n  curLine: number;\\n  lineStart: number;\\n  curPosition: () => Position;\\n  /* Used only in readToken_mult_modulo */\\n  inType: boolean;\\n  // These boolean properties are not initialized in createLookaheadState()\\n  // instead they will only be set by the tokenizer\\n  containsEsc?: boolean;\\n};\\n\",\"import * as charCodes from \\\"charcodes\\\";\\n\\n// The following character codes are forbidden from being\\n// an immediate sibling of NumericLiteralSeparator _\\nconst forbiddenNumericSeparatorSiblings = {\\n  decBinOct: new Set<number>([\\n    charCodes.dot,\\n    charCodes.uppercaseB,\\n    charCodes.uppercaseE,\\n    charCodes.uppercaseO,\\n    charCodes.underscore, // multiple separators are not allowed\\n    charCodes.lowercaseB,\\n    charCodes.lowercaseE,\\n    charCodes.lowercaseO,\\n  ]),\\n  hex: new Set<number>([\\n    charCodes.dot,\\n    charCodes.uppercaseX,\\n    charCodes.underscore, // multiple separators are not allowed\\n    charCodes.lowercaseX,\\n  ]),\\n};\\n\\nconst isAllowedNumericSeparatorSibling = {\\n  // 0 - 1\\n  bin: (ch: number) => ch === charCodes.digit0 || ch === charCodes.digit1,\\n\\n  // 0 - 7\\n  oct: (ch: number) => ch >= charCodes.digit0 && ch <= charCodes.digit7,\\n\\n  // 0 - 9\\n  dec: (ch: number) => ch >= charCodes.digit0 && ch <= charCodes.digit9,\\n\\n  // 0 - 9, A - F, a - f,\\n  hex: (ch: number) =>\\n    (ch >= charCodes.digit0 && ch <= charCodes.digit9) ||\\n    (ch >= charCodes.uppercaseA && ch <= charCodes.uppercaseF) ||\\n    (ch >= charCodes.lowercaseA && ch <= charCodes.lowercaseF),\\n};\\n\\nexport type StringContentsErrorHandlers = EscapedCharErrorHandlers & {\\n  unterminated(\\n    initialPos: number,\\n    initialLineStart: number,\\n    initialCurLine: number,\\n  ): void;\\n};\\n\\nexport function readStringContents(\\n  type: \\\"single\\\" | \\\"double\\\" | \\\"template\\\",\\n  input: string,\\n  pos: number,\\n  lineStart: number,\\n  curLine: number,\\n  errors: StringContentsErrorHandlers,\\n) {\\n  const initialPos = pos;\\n  const initialLineStart = lineStart;\\n  const initialCurLine = curLine;\\n\\n  let out = \\\"\\\";\\n  let firstInvalidLoc = null;\\n  let chunkStart = pos;\\n  const { length } = input;\\n  for (;;) {\\n    if (pos >= length) {\\n      errors.unterminated(initialPos, initialLineStart, initialCurLine);\\n      out += input.slice(chunkStart, pos);\\n      break;\\n    }\\n    const ch = input.charCodeAt(pos);\\n    if (isStringEnd(type, ch, input, pos)) {\\n      out += input.slice(chunkStart, pos);\\n      break;\\n    }\\n    if (ch === charCodes.backslash) {\\n      out += input.slice(chunkStart, pos);\\n      const res = readEscapedChar(\\n        input,\\n        pos,\\n        lineStart,\\n        curLine,\\n        type === \\\"template\\\",\\n        errors,\\n      );\\n      if (res.ch === null && !firstInvalidLoc) {\\n        firstInvalidLoc = { pos, lineStart, curLine };\\n      } else {\\n        out += res.ch;\\n      }\\n      ({ pos, lineStart, curLine } = res);\\n      chunkStart = pos;\\n    } else if (\\n      ch === charCodes.lineSeparator ||\\n      ch === charCodes.paragraphSeparator\\n    ) {\\n      ++pos;\\n      ++curLine;\\n      lineStart = pos;\\n    } else if (ch === charCodes.lineFeed || ch === charCodes.carriageReturn) {\\n      if (type === \\\"template\\\") {\\n        out += input.slice(chunkStart, pos) + \\\"\\\\n\\\";\\n        ++pos;\\n        if (\\n          ch === charCodes.carriageReturn &&\\n          input.charCodeAt(pos) === charCodes.lineFeed\\n        ) {\\n          ++pos;\\n        }\\n        ++curLine;\\n        chunkStart = lineStart = pos;\\n      } else {\\n        errors.unterminated(initialPos, initialLineStart, initialCurLine);\\n      }\\n    } else {\\n      ++pos;\\n    }\\n  }\\n  return {\\n    pos,\\n    str: out,\\n    firstInvalidLoc,\\n    lineStart,\\n    curLine,\\n\\n    // TODO(Babel 8): This is only needed for backwards compatibility,\\n    // we can remove it.\\n    containsInvalid: !!firstInvalidLoc,\\n  };\\n}\\n\\nfunction isStringEnd(\\n  type: \\\"single\\\" | \\\"double\\\" | \\\"template\\\",\\n  ch: number,\\n  input: string,\\n  pos: number,\\n) {\\n  if (type === \\\"template\\\") {\\n    return (\\n      ch === charCodes.graveAccent ||\\n      (ch === charCodes.dollarSign &&\\n        input.charCodeAt(pos + 1) === charCodes.leftCurlyBrace)\\n    );\\n  }\\n  return (\\n    ch === (type === \\\"double\\\" ? charCodes.quotationMark : charCodes.apostrophe)\\n  );\\n}\\n\\ntype EscapedCharErrorHandlers = HexCharErrorHandlers &\\n  CodePointErrorHandlers & {\\n    strictNumericEscape(pos: number, lineStart: number, curLine: number): void;\\n  };\\n\\nfunction readEscapedChar(\\n  input: string,\\n  pos: number,\\n  lineStart: number,\\n  curLine: number,\\n  inTemplate: boolean,\\n  errors: EscapedCharErrorHandlers,\\n) {\\n  const throwOnInvalid = !inTemplate;\\n  pos++; // skip '\\\\'\\n\\n  const res = (ch: string | null) => ({ pos, ch, lineStart, curLine });\\n\\n  const ch = input.charCodeAt(pos++);\\n  switch (ch) {\\n    case charCodes.lowercaseN:\\n      return res(\\\"\\\\n\\\");\\n    case charCodes.lowercaseR:\\n      return res(\\\"\\\\r\\\");\\n    case charCodes.lowercaseX: {\\n      let code;\\n      ({ code, pos } = readHexChar(\\n        input,\\n        pos,\\n        lineStart,\\n        curLine,\\n        2,\\n        false,\\n        throwOnInvalid,\\n        errors,\\n      ));\\n      return res(code === null ? null : String.fromCharCode(code));\\n    }\\n    case charCodes.lowercaseU: {\\n      let code;\\n      ({ code, pos } = readCodePoint(\\n        input,\\n        pos,\\n        lineStart,\\n        curLine,\\n        throwOnInvalid,\\n        errors,\\n      ));\\n      return res(code === null ? null : String.fromCodePoint(code));\\n    }\\n    case charCodes.lowercaseT:\\n      return res(\\\"\\\\t\\\");\\n    case charCodes.lowercaseB:\\n      return res(\\\"\\\\b\\\");\\n    case charCodes.lowercaseV:\\n      return res(\\\"\\\\u000b\\\");\\n    case charCodes.lowercaseF:\\n      return res(\\\"\\\\f\\\");\\n    case charCodes.carriageReturn:\\n      if (input.charCodeAt(pos) === charCodes.lineFeed) {\\n        ++pos;\\n      }\\n    // fall through\\n    case charCodes.lineFeed:\\n      lineStart = pos;\\n      ++curLine;\\n    // fall through\\n    case charCodes.lineSeparator:\\n    case charCodes.paragraphSeparator:\\n      return res(\\\"\\\");\\n    case charCodes.digit8:\\n    case charCodes.digit9:\\n      if (inTemplate) {\\n        return res(null);\\n      } else {\\n        errors.strictNumericEscape(pos - 1, lineStart, curLine);\\n      }\\n    // fall through\\n    default:\\n      if (ch >= charCodes.digit0 && ch <= charCodes.digit7) {\\n        const startPos = pos - 1;\\n        const match = input.slice(startPos, pos + 2).match(/^[0-7]+/)!;\\n\\n        let octalStr = match[0];\\n\\n        let octal = parseInt(octalStr, 8);\\n        if (octal > 255) {\\n          octalStr = octalStr.slice(0, -1);\\n          octal = parseInt(octalStr, 8);\\n        }\\n        pos += octalStr.length - 1;\\n        const next = input.charCodeAt(pos);\\n        if (\\n          octalStr !== \\\"0\\\" ||\\n          next === charCodes.digit8 ||\\n          next === charCodes.digit9\\n        ) {\\n          if (inTemplate) {\\n            return res(null);\\n          } else {\\n            errors.strictNumericEscape(startPos, lineStart, curLine);\\n          }\\n        }\\n\\n        return res(String.fromCharCode(octal));\\n      }\\n\\n      return res(String.fromCharCode(ch));\\n  }\\n}\\n\\ntype HexCharErrorHandlers = IntErrorHandlers & {\\n  invalidEscapeSequence(pos: number, lineStart: number, curLine: number): void;\\n};\\n\\n// Used to read character escape sequences ('\\\\x', '\\\\u').\\nfunction readHexChar(\\n  input: string,\\n  pos: number,\\n  lineStart: number,\\n  curLine: number,\\n  len: number,\\n  forceLen: boolean,\\n  throwOnInvalid: boolean,\\n  errors: HexCharErrorHandlers,\\n) {\\n  const initialPos = pos;\\n  let n;\\n  ({ n, pos } = readInt(\\n    input,\\n    pos,\\n    lineStart,\\n    curLine,\\n    16,\\n    len,\\n    forceLen,\\n    false,\\n    errors,\\n    /* bailOnError */ !throwOnInvalid,\\n  ));\\n  if (n === null) {\\n    if (throwOnInvalid) {\\n      errors.invalidEscapeSequence(initialPos, lineStart, curLine);\\n    } else {\\n      pos = initialPos - 1;\\n    }\\n  }\\n  return { code: n, pos };\\n}\\n\\nexport type IntErrorHandlers = {\\n  numericSeparatorInEscapeSequence(\\n    pos: number,\\n    lineStart: number,\\n    curLine: number,\\n  ): void;\\n  unexpectedNumericSeparator(\\n    pos: number,\\n    lineStart: number,\\n    curLine: number,\\n  ): void;\\n  // It can return \\\"true\\\" to indicate that the error was handled\\n  // and the int parsing should continue.\\n  invalidDigit(\\n    pos: number,\\n    lineStart: number,\\n    curLine: number,\\n    radix: number,\\n  ): boolean;\\n};\\n\\nexport function readInt(\\n  input: string,\\n  pos: number,\\n  lineStart: number,\\n  curLine: number,\\n  radix: number,\\n  len: number | undefined,\\n  forceLen: boolean,\\n  allowNumSeparator: boolean | \\\"bail\\\",\\n  errors: IntErrorHandlers,\\n  bailOnError: boolean,\\n) {\\n  const start = pos;\\n  const forbiddenSiblings =\\n    radix === 16\\n      ? forbiddenNumericSeparatorSiblings.hex\\n      : forbiddenNumericSeparatorSiblings.decBinOct;\\n  const isAllowedSibling =\\n    radix === 16\\n      ? isAllowedNumericSeparatorSibling.hex\\n      : radix === 10\\n      ? isAllowedNumericSeparatorSibling.dec\\n      : radix === 8\\n      ? isAllowedNumericSeparatorSibling.oct\\n      : isAllowedNumericSeparatorSibling.bin;\\n\\n  let invalid = false;\\n  let total = 0;\\n\\n  for (let i = 0, e = len == null ? Infinity : len; i < e; ++i) {\\n    const code = input.charCodeAt(pos);\\n    let val;\\n\\n    if (code === charCodes.underscore && allowNumSeparator !== \\\"bail\\\") {\\n      const prev = input.charCodeAt(pos - 1);\\n      const next = input.charCodeAt(pos + 1);\\n\\n      if (!allowNumSeparator) {\\n        if (bailOnError) return { n: null, pos };\\n        errors.numericSeparatorInEscapeSequence(pos, lineStart, curLine);\\n      } else if (\\n        Number.isNaN(next) ||\\n        !isAllowedSibling(next) ||\\n        forbiddenSiblings.has(prev) ||\\n        forbiddenSiblings.has(next)\\n      ) {\\n        if (bailOnError) return { n: null, pos };\\n        errors.unexpectedNumericSeparator(pos, lineStart, curLine);\\n      }\\n\\n      // Ignore this _ character\\n      ++pos;\\n      continue;\\n    }\\n\\n    if (code >= charCodes.lowercaseA) {\\n      val = code - charCodes.lowercaseA + charCodes.lineFeed;\\n    } else if (code >= charCodes.uppercaseA) {\\n      val = code - charCodes.uppercaseA + charCodes.lineFeed;\\n    } else if (charCodes.isDigit(code)) {\\n      val = code - charCodes.digit0; // 0-9\\n    } else {\\n      val = Infinity;\\n    }\\n    if (val >= radix) {\\n      // If we found a digit which is too big, errors.invalidDigit can return true to avoid\\n      // breaking the loop (this is used for error recovery).\\n      if (val <= 9 && bailOnError) {\\n        return { n: null, pos };\\n      } else if (\\n        val <= 9 &&\\n        errors.invalidDigit(pos, lineStart, curLine, radix)\\n      ) {\\n        val = 0;\\n      } else if (forceLen) {\\n        val = 0;\\n        invalid = true;\\n      } else {\\n        break;\\n      }\\n    }\\n    ++pos;\\n    total = total * radix + val;\\n  }\\n  if (pos === start || (len != null && pos - start !== len) || invalid) {\\n    return { n: null, pos };\\n  }\\n\\n  return { n: total, pos };\\n}\\n\\nexport type CodePointErrorHandlers = HexCharErrorHandlers & {\\n  invalidCodePoint(pos: number, lineStart: number, curLine: number): void;\\n};\\n\\nexport function readCodePoint(\\n  input: string,\\n  pos: number,\\n  lineStart: number,\\n  curLine: number,\\n  throwOnInvalid: boolean,\\n  errors: CodePointErrorHandlers,\\n) {\\n  const ch = input.charCodeAt(pos);\\n  let code;\\n\\n  if (ch === charCodes.leftCurlyBrace) {\\n    ++pos;\\n    ({ code, pos } = readHexChar(\\n      input,\\n      pos,\\n      lineStart,\\n      curLine,\\n      input.indexOf(\\\"}\\\", pos) - pos,\\n      true,\\n      throwOnInvalid,\\n      errors,\\n    ));\\n    ++pos;\\n    if (code !== null && code > 0x10ffff) {\\n      if (throwOnInvalid) {\\n        errors.invalidCodePoint(pos, lineStart, curLine);\\n      } else {\\n        return { code: null, pos };\\n      }\\n    }\\n  } else {\\n    ({ code, pos } = readHexChar(\\n      input,\\n      pos,\\n      lineStart,\\n      curLine,\\n      4,\\n      false,\\n      throwOnInvalid,\\n      errors,\\n    ));\\n  }\\n  return { code, pos };\\n}\\n\",\"/*:: declare var invariant; */\\n\\nimport type { Options } from \\\"../options\\\";\\nimport {\\n  Position,\\n  SourceLocation,\\n  createPositionWithColumnOffset,\\n} from \\\"../util/location\\\";\\nimport CommentsParser, { type CommentWhitespace } from \\\"../parser/comments\\\";\\nimport type * as N from \\\"../types\\\";\\nimport * as charCodes from \\\"charcodes\\\";\\nimport { isIdentifierStart, isIdentifierChar } from \\\"../util/identifier\\\";\\nimport {\\n  tokenIsKeyword,\\n  tokenLabelName,\\n  tt,\\n  keywords as keywordTypes,\\n  type TokenType,\\n} from \\\"./types\\\";\\nimport { type TokContext } from \\\"./context\\\";\\nimport {\\n  Errors,\\n  type ParseError,\\n  type ParseErrorConstructor,\\n  type RaiseProperties,\\n} from \\\"../parse-error\\\";\\nimport {\\n  lineBreakG,\\n  isNewLine,\\n  isWhitespace,\\n  skipWhiteSpace,\\n} from \\\"../util/whitespace\\\";\\nimport State from \\\"./state\\\";\\nimport type { LookaheadState, DeferredStrictError } from \\\"./state\\\";\\n\\nimport {\\n  readInt,\\n  readCodePoint,\\n  readStringContents,\\n  type IntErrorHandlers,\\n  type CodePointErrorHandlers,\\n  type StringContentsErrorHandlers,\\n} from \\\"@babel/helper-string-parser\\\";\\n\\nimport type { Plugin } from \\\"../typings\\\";\\n\\nfunction buildPosition(pos: number, lineStart: number, curLine: number) {\\n  return new Position(curLine, pos - lineStart, pos);\\n}\\n\\nconst VALID_REGEX_FLAGS = new Set([\\n  charCodes.lowercaseG,\\n  charCodes.lowercaseM,\\n  charCodes.lowercaseS,\\n  charCodes.lowercaseI,\\n  charCodes.lowercaseY,\\n  charCodes.lowercaseU,\\n  charCodes.lowercaseD,\\n  // This is only valid when using the regexpUnicodeSets plugin\\n  charCodes.lowercaseV,\\n]);\\n\\n// Object type used to represent tokens. Note that normally, tokens\\n// simply exist as properties on the parser object. This is only\\n// used for the onToken callback and the external tokenizer.\\n\\nexport class Token {\\n  constructor(state: State) {\\n    this.type = state.type;\\n    this.value = state.value;\\n    this.start = state.start;\\n    this.end = state.end;\\n    this.loc = new SourceLocation(state.startLoc, state.endLoc);\\n  }\\n\\n  declare type: TokenType;\\n  declare value: any;\\n  declare start: number;\\n  declare end: number;\\n  declare loc: SourceLocation;\\n}\\n\\n// ## Tokenizer\\n\\nexport default abstract class Tokenizer extends CommentsParser {\\n  isLookahead: boolean;\\n\\n  // Token store.\\n  tokens: Array<Token | N.Comment> = [];\\n\\n  constructor(options: Options, input: string) {\\n    super();\\n    this.state = new State();\\n    this.state.init(options);\\n    this.input = input;\\n    this.length = input.length;\\n    this.isLookahead = false;\\n  }\\n\\n  pushToken(token: Token | N.Comment) {\\n    // Pop out invalid tokens trapped by try-catch parsing.\\n    // Those parsing branches are mainly created by typescript and flow plugins.\\n    this.tokens.length = this.state.tokensLength;\\n    this.tokens.push(token);\\n    ++this.state.tokensLength;\\n  }\\n\\n  // Move to the next token\\n\\n  next(): void {\\n    this.checkKeywordEscapes();\\n    if (this.options.tokens) {\\n      this.pushToken(new Token(this.state));\\n    }\\n\\n    this.state.lastTokStart = this.state.start;\\n    this.state.lastTokEndLoc = this.state.endLoc;\\n    this.state.lastTokStartLoc = this.state.startLoc;\\n    this.nextToken();\\n  }\\n\\n  eat(type: TokenType): boolean {\\n    if (this.match(type)) {\\n      this.next();\\n      return true;\\n    } else {\\n      return false;\\n    }\\n  }\\n\\n  /**\\n   * Whether current token matches given type\\n   */\\n  match(type: TokenType): boolean {\\n    return this.state.type === type;\\n  }\\n\\n  /**\\n   * Create a LookaheadState from current parser state\\n   */\\n  createLookaheadState(state: State): LookaheadState {\\n    return {\\n      pos: state.pos,\\n      value: null,\\n      type: state.type,\\n      start: state.start,\\n      end: state.end,\\n      context: [this.curContext()],\\n      inType: state.inType,\\n      startLoc: state.startLoc,\\n      lastTokEndLoc: state.lastTokEndLoc,\\n      curLine: state.curLine,\\n      lineStart: state.lineStart,\\n      curPosition: state.curPosition,\\n    };\\n  }\\n\\n  /**\\n   * lookahead peeks the next token, skipping changes to token context and\\n   * comment stack. For performance it returns a limited LookaheadState\\n   * instead of full parser state.\\n   *\\n   * The { column, line } Loc info is not included in lookahead since such usage\\n   * is rare. Although it may return other location properties e.g. `curLine` and\\n   * `lineStart`, these properties are not listed in the LookaheadState interface\\n   * and thus the returned value is _NOT_ reliable.\\n   *\\n   * The tokenizer should make best efforts to avoid using any parser state\\n   * other than those defined in LookaheadState\\n   */\\n  lookahead(): LookaheadState {\\n    const old = this.state;\\n    // @ts-expect-error For performance we use a simplified tokenizer state structure\\n    this.state = this.createLookaheadState(old);\\n\\n    this.isLookahead = true;\\n    this.nextToken();\\n    this.isLookahead = false;\\n\\n    const curr = this.state;\\n    this.state = old;\\n    return curr;\\n  }\\n\\n  nextTokenStart(): number {\\n    return this.nextTokenStartSince(this.state.pos);\\n  }\\n\\n  nextTokenStartSince(pos: number): number {\\n    skipWhiteSpace.lastIndex = pos;\\n    return skipWhiteSpace.test(this.input) ? skipWhiteSpace.lastIndex : pos;\\n  }\\n\\n  lookaheadCharCode(): number {\\n    return this.input.charCodeAt(this.nextTokenStart());\\n  }\\n\\n  codePointAtPos(pos: number): number {\\n    // The implementation is based on\\n    // https://source.chromium.org/chromium/chromium/src/+/master:v8/src/builtins/builtins-string-gen.cc;l=1455;drc=221e331b49dfefadbc6fa40b0c68e6f97606d0b3;bpv=0;bpt=1\\n    // We reimplement `codePointAt` because `codePointAt` is a V8 builtin which is not inlined by TurboFan (as of M91)\\n    // since `input` is mostly ASCII, an inlined `charCodeAt` wins here\\n    let cp = this.input.charCodeAt(pos);\\n    if ((cp & 0xfc00) === 0xd800 && ++pos < this.input.length) {\\n      const trail = this.input.charCodeAt(pos);\\n      if ((trail & 0xfc00) === 0xdc00) {\\n        cp = 0x10000 + ((cp & 0x3ff) << 10) + (trail & 0x3ff);\\n      }\\n    }\\n    return cp;\\n  }\\n\\n  // Toggle strict mode. Re-reads the next number or string to please\\n  // pedantic tests (`\\\"use strict\\\"; 010;` should fail).\\n\\n  setStrict(strict: boolean): void {\\n    this.state.strict = strict;\\n    if (strict) {\\n      // Throw an error for any string decimal escape found before/immediately\\n      // after a \\\"use strict\\\" directive. Strict mode will be set at parse\\n      // time for any literals that occur after the next node of the strict\\n      // directive.\\n      this.state.strictErrors.forEach(([toParseError, at]) =>\\n        this.raise(toParseError, { at }),\\n      );\\n      this.state.strictErrors.clear();\\n    }\\n  }\\n\\n  curContext(): TokContext {\\n    return this.state.context[this.state.context.length - 1];\\n  }\\n\\n  // Read a single token, updating the parser object's token-related properties.\\n  nextToken(): void {\\n    this.skipSpace();\\n    this.state.start = this.state.pos;\\n    if (!this.isLookahead) this.state.startLoc = this.state.curPosition();\\n    if (this.state.pos >= this.length) {\\n      this.finishToken(tt.eof);\\n      return;\\n    }\\n\\n    this.getTokenFromCode(this.codePointAtPos(this.state.pos));\\n  }\\n\\n  // Skips a block comment, whose end is marked by commentEnd.\\n  // *-/ is used by the Flow plugin, when parsing block comments nested\\n  // inside Flow comments.\\n  skipBlockComment(commentEnd: \\\"*/\\\" | \\\"*-/\\\"): N.CommentBlock | undefined {\\n    let startLoc;\\n    if (!this.isLookahead) startLoc = this.state.curPosition();\\n    const start = this.state.pos;\\n    const end = this.input.indexOf(commentEnd, start + 2);\\n    if (end === -1) {\\n      // We have to call this again here because startLoc may not be set...\\n      // This seems to be for performance reasons:\\n      // https://github.com/babel/babel/commit/acf2a10899f696a8aaf34df78bf9725b5ea7f2da\\n      throw this.raise(Errors.UnterminatedComment, {\\n        at: this.state.curPosition(),\\n      });\\n    }\\n\\n    this.state.pos = end + commentEnd.length;\\n    lineBreakG.lastIndex = start + 2;\\n    while (lineBreakG.test(this.input) && lineBreakG.lastIndex <= end) {\\n      ++this.state.curLine;\\n      this.state.lineStart = lineBreakG.lastIndex;\\n    }\\n\\n    // If we are doing a lookahead right now we need to advance the position (above code)\\n    // but we do not want to push the comment to the state.\\n    if (this.isLookahead) return;\\n    /*:: invariant(startLoc) */\\n\\n    const comment: N.CommentBlock = {\\n      type: \\\"CommentBlock\\\",\\n      value: this.input.slice(start + 2, end),\\n      start,\\n      end: end + commentEnd.length,\\n      loc: new SourceLocation(startLoc, this.state.curPosition()),\\n    };\\n    if (this.options.tokens) this.pushToken(comment);\\n    return comment;\\n  }\\n\\n  skipLineComment(startSkip: number): N.CommentLine | undefined {\\n    const start = this.state.pos;\\n    let startLoc;\\n    if (!this.isLookahead) startLoc = this.state.curPosition();\\n    let ch = this.input.charCodeAt((this.state.pos += startSkip));\\n    if (this.state.pos < this.length) {\\n      while (!isNewLine(ch) && ++this.state.pos < this.length) {\\n        ch = this.input.charCodeAt(this.state.pos);\\n      }\\n    }\\n\\n    // If we are doing a lookahead right now we need to advance the position (above code)\\n    // but we do not want to push the comment to the state.\\n    if (this.isLookahead) return;\\n    /*:: invariant(startLoc) */\\n\\n    const end = this.state.pos;\\n    const value = this.input.slice(start + startSkip, end);\\n\\n    const comment: N.CommentLine = {\\n      type: \\\"CommentLine\\\",\\n      value,\\n      start,\\n      end,\\n      loc: new SourceLocation(startLoc, this.state.curPosition()),\\n    };\\n    if (this.options.tokens) this.pushToken(comment);\\n    return comment;\\n  }\\n\\n  // Called at the start of the parse and after every token. Skips\\n  // whitespace and comments, and.\\n\\n  skipSpace(): void {\\n    const spaceStart = this.state.pos;\\n    const comments = [];\\n    loop: while (this.state.pos < this.length) {\\n      const ch = this.input.charCodeAt(this.state.pos);\\n      switch (ch) {\\n        case charCodes.space:\\n        case charCodes.nonBreakingSpace:\\n        case charCodes.tab:\\n          ++this.state.pos;\\n          break;\\n        case charCodes.carriageReturn:\\n          if (\\n            this.input.charCodeAt(this.state.pos + 1) === charCodes.lineFeed\\n          ) {\\n            ++this.state.pos;\\n          }\\n        // fall through\\n        case charCodes.lineFeed:\\n        case charCodes.lineSeparator:\\n        case charCodes.paragraphSeparator:\\n          ++this.state.pos;\\n          ++this.state.curLine;\\n          this.state.lineStart = this.state.pos;\\n          break;\\n\\n        case charCodes.slash:\\n          switch (this.input.charCodeAt(this.state.pos + 1)) {\\n            case charCodes.asterisk: {\\n              const comment = this.skipBlockComment(\\\"*/\\\");\\n              if (comment !== undefined) {\\n                this.addComment(comment);\\n                if (this.options.attachComment) comments.push(comment);\\n              }\\n              break;\\n            }\\n\\n            case charCodes.slash: {\\n              const comment = this.skipLineComment(2);\\n              if (comment !== undefined) {\\n                this.addComment(comment);\\n                if (this.options.attachComment) comments.push(comment);\\n              }\\n              break;\\n            }\\n\\n            default:\\n              break loop;\\n          }\\n          break;\\n\\n        default:\\n          if (isWhitespace(ch)) {\\n            ++this.state.pos;\\n          } else if (\\n            ch === charCodes.dash &&\\n            !this.inModule &&\\n            this.options.annexB\\n          ) {\\n            const pos = this.state.pos;\\n            if (\\n              this.input.charCodeAt(pos + 1) === charCodes.dash &&\\n              this.input.charCodeAt(pos + 2) === charCodes.greaterThan &&\\n              (spaceStart === 0 || this.state.lineStart > spaceStart)\\n            ) {\\n              // A `-->` line comment\\n              const comment = this.skipLineComment(3);\\n              if (comment !== undefined) {\\n                this.addComment(comment);\\n                if (this.options.attachComment) comments.push(comment);\\n              }\\n            } else {\\n              break loop;\\n            }\\n          } else if (\\n            ch === charCodes.lessThan &&\\n            !this.inModule &&\\n            this.options.annexB\\n          ) {\\n            const pos = this.state.pos;\\n            if (\\n              this.input.charCodeAt(pos + 1) === charCodes.exclamationMark &&\\n              this.input.charCodeAt(pos + 2) === charCodes.dash &&\\n              this.input.charCodeAt(pos + 3) === charCodes.dash\\n            ) {\\n              // `<!--`, an XML-style comment that should be interpreted as a line comment\\n              const comment = this.skipLineComment(4);\\n              if (comment !== undefined) {\\n                this.addComment(comment);\\n                if (this.options.attachComment) comments.push(comment);\\n              }\\n            } else {\\n              break loop;\\n            }\\n          } else {\\n            break loop;\\n          }\\n      }\\n    }\\n\\n    if (comments.length > 0) {\\n      const end = this.state.pos;\\n      const commentWhitespace: CommentWhitespace = {\\n        start: spaceStart,\\n        end,\\n        comments,\\n        leadingNode: null,\\n        trailingNode: null,\\n        containingNode: null,\\n      };\\n      this.state.commentStack.push(commentWhitespace);\\n    }\\n  }\\n\\n  // Called at the end of every token. Sets `end`, `val`, and\\n  // maintains `context` and `canStartJSXElement`, and skips the space after\\n  // the token, so that the next one's `start` will point at the\\n  // right position.\\n\\n  finishToken(type: TokenType, val?: any): void {\\n    this.state.end = this.state.pos;\\n    this.state.endLoc = this.state.curPosition();\\n    const prevType = this.state.type;\\n    this.state.type = type;\\n    this.state.value = val;\\n\\n    if (!this.isLookahead) {\\n      this.updateContext(prevType);\\n    }\\n  }\\n\\n  replaceToken(type: TokenType): void {\\n    this.state.type = type;\\n    // @ts-expect-error the prevType of updateContext is required\\n    // only when the new type is tt.slash/tt.jsxTagEnd\\n    this.updateContext();\\n  }\\n\\n  // ### Token reading\\n\\n  // This is the function that is called to fetch the next token. It\\n  // is somewhat obscure, because it works in character codes rather\\n  // than characters, and because operator parsing has been inlined\\n  // into it.\\n  //\\n  // All in the name of speed.\\n\\n  // number sign is \\\"#\\\"\\n  readToken_numberSign(): void {\\n    if (this.state.pos === 0 && this.readToken_interpreter()) {\\n      return;\\n    }\\n\\n    const nextPos = this.state.pos + 1;\\n    const next = this.codePointAtPos(nextPos);\\n    if (next >= charCodes.digit0 && next <= charCodes.digit9) {\\n      throw this.raise(Errors.UnexpectedDigitAfterHash, {\\n        at: this.state.curPosition(),\\n      });\\n    }\\n\\n    if (\\n      next === charCodes.leftCurlyBrace ||\\n      (next === charCodes.leftSquareBracket && this.hasPlugin(\\\"recordAndTuple\\\"))\\n    ) {\\n      // When we see `#{`, it is likely to be a hash record.\\n      // However we don't yell at `#[` since users may intend to use \\\"computed private fields\\\",\\n      // which is not allowed in the spec. Throwing expecting recordAndTuple is\\n      // misleading\\n      this.expectPlugin(\\\"recordAndTuple\\\");\\n      if (this.getPluginOption(\\\"recordAndTuple\\\", \\\"syntaxType\\\") === \\\"bar\\\") {\\n        throw this.raise(\\n          next === charCodes.leftCurlyBrace\\n            ? Errors.RecordExpressionHashIncorrectStartSyntaxType\\n            : Errors.TupleExpressionHashIncorrectStartSyntaxType,\\n          { at: this.state.curPosition() },\\n        );\\n      }\\n\\n      this.state.pos += 2;\\n      if (next === charCodes.leftCurlyBrace) {\\n        // #{\\n        this.finishToken(tt.braceHashL);\\n      } else {\\n        // #[\\n        this.finishToken(tt.bracketHashL);\\n      }\\n    } else if (isIdentifierStart(next)) {\\n      ++this.state.pos;\\n      this.finishToken(tt.privateName, this.readWord1(next));\\n    } else if (next === charCodes.backslash) {\\n      ++this.state.pos;\\n      this.finishToken(tt.privateName, this.readWord1());\\n    } else {\\n      this.finishOp(tt.hash, 1);\\n    }\\n  }\\n\\n  readToken_dot(): void {\\n    const next = this.input.charCodeAt(this.state.pos + 1);\\n    if (next >= charCodes.digit0 && next <= charCodes.digit9) {\\n      this.readNumber(true);\\n      return;\\n    }\\n\\n    if (\\n      next === charCodes.dot &&\\n      this.input.charCodeAt(this.state.pos + 2) === charCodes.dot\\n    ) {\\n      this.state.pos += 3;\\n      this.finishToken(tt.ellipsis);\\n    } else {\\n      ++this.state.pos;\\n      this.finishToken(tt.dot);\\n    }\\n  }\\n\\n  readToken_slash(): void {\\n    const next = this.input.charCodeAt(this.state.pos + 1);\\n    if (next === charCodes.equalsTo) {\\n      this.finishOp(tt.slashAssign, 2);\\n    } else {\\n      this.finishOp(tt.slash, 1);\\n    }\\n  }\\n\\n  readToken_interpreter(): boolean {\\n    if (this.state.pos !== 0 || this.length < 2) return false;\\n\\n    let ch = this.input.charCodeAt(this.state.pos + 1);\\n    if (ch !== charCodes.exclamationMark) return false;\\n\\n    const start = this.state.pos;\\n    this.state.pos += 1;\\n\\n    while (!isNewLine(ch) && ++this.state.pos < this.length) {\\n      ch = this.input.charCodeAt(this.state.pos);\\n    }\\n\\n    const value = this.input.slice(start + 2, this.state.pos);\\n\\n    this.finishToken(tt.interpreterDirective, value);\\n\\n    return true;\\n  }\\n\\n  readToken_mult_modulo(code: number): void {\\n    // '%' or '*'\\n    let type = code === charCodes.asterisk ? tt.star : tt.modulo;\\n    let width = 1;\\n    let next = this.input.charCodeAt(this.state.pos + 1);\\n\\n    // Exponentiation operator '**'\\n    if (code === charCodes.asterisk && next === charCodes.asterisk) {\\n      width++;\\n      next = this.input.charCodeAt(this.state.pos + 2);\\n      type = tt.exponent;\\n    }\\n\\n    // '%=' or '*='\\n    if (next === charCodes.equalsTo && !this.state.inType) {\\n      width++;\\n      // `tt.moduloAssign` is only needed to support % as a Hack-pipe topic token.\\n      // If the proposal ends up choosing a different token,\\n      // it can be merged with tt.assign.\\n      type = code === charCodes.percentSign ? tt.moduloAssign : tt.assign;\\n    }\\n\\n    this.finishOp(type, width);\\n  }\\n\\n  readToken_pipe_amp(code: number): void {\\n    // '||' '&&' '||=' '&&='\\n    const next = this.input.charCodeAt(this.state.pos + 1);\\n\\n    if (next === code) {\\n      if (this.input.charCodeAt(this.state.pos + 2) === charCodes.equalsTo) {\\n        this.finishOp(tt.assign, 3);\\n      } else {\\n        this.finishOp(\\n          code === charCodes.verticalBar ? tt.logicalOR : tt.logicalAND,\\n          2,\\n        );\\n      }\\n      return;\\n    }\\n\\n    if (code === charCodes.verticalBar) {\\n      // '|>'\\n      if (next === charCodes.greaterThan) {\\n        this.finishOp(tt.pipeline, 2);\\n        return;\\n      }\\n      // '|}'\\n      if (\\n        this.hasPlugin(\\\"recordAndTuple\\\") &&\\n        next === charCodes.rightCurlyBrace\\n      ) {\\n        if (this.getPluginOption(\\\"recordAndTuple\\\", \\\"syntaxType\\\") !== \\\"bar\\\") {\\n          throw this.raise(Errors.RecordExpressionBarIncorrectEndSyntaxType, {\\n            at: this.state.curPosition(),\\n          });\\n        }\\n        this.state.pos += 2;\\n        this.finishToken(tt.braceBarR);\\n        return;\\n      }\\n\\n      // '|]'\\n      if (\\n        this.hasPlugin(\\\"recordAndTuple\\\") &&\\n        next === charCodes.rightSquareBracket\\n      ) {\\n        if (this.getPluginOption(\\\"recordAndTuple\\\", \\\"syntaxType\\\") !== \\\"bar\\\") {\\n          throw this.raise(Errors.TupleExpressionBarIncorrectEndSyntaxType, {\\n            at: this.state.curPosition(),\\n          });\\n        }\\n        this.state.pos += 2;\\n        this.finishToken(tt.bracketBarR);\\n        return;\\n      }\\n    }\\n\\n    if (next === charCodes.equalsTo) {\\n      this.finishOp(tt.assign, 2);\\n      return;\\n    }\\n\\n    this.finishOp(\\n      code === charCodes.verticalBar ? tt.bitwiseOR : tt.bitwiseAND,\\n      1,\\n    );\\n  }\\n\\n  readToken_caret(): void {\\n    const next = this.input.charCodeAt(this.state.pos + 1);\\n\\n    // '^='\\n    if (next === charCodes.equalsTo && !this.state.inType) {\\n      // `tt.xorAssign` is only needed to support ^ as a Hack-pipe topic token.\\n      // If the proposal ends up choosing a different token,\\n      // it can be merged with tt.assign.\\n      this.finishOp(tt.xorAssign, 2);\\n    }\\n    // '^^'\\n    else if (\\n      next === charCodes.caret &&\\n      // If the ^^ token is not enabled, we don't throw but parse two single ^s\\n      // because it could be a ^ hack token followed by a ^ binary operator.\\n      this.hasPlugin([\\n        \\\"pipelineOperator\\\",\\n        { proposal: \\\"hack\\\", topicToken: \\\"^^\\\" },\\n      ])\\n    ) {\\n      this.finishOp(tt.doubleCaret, 2);\\n\\n      // `^^^` is forbidden and must be separated by a space.\\n      const lookaheadCh = this.input.codePointAt(this.state.pos);\\n      if (lookaheadCh === charCodes.caret) {\\n        this.unexpected();\\n      }\\n    }\\n    // '^'\\n    else {\\n      this.finishOp(tt.bitwiseXOR, 1);\\n    }\\n  }\\n\\n  readToken_atSign(): void {\\n    const next = this.input.charCodeAt(this.state.pos + 1);\\n\\n    // '@@'\\n    if (\\n      next === charCodes.atSign &&\\n      this.hasPlugin([\\n        \\\"pipelineOperator\\\",\\n        { proposal: \\\"hack\\\", topicToken: \\\"@@\\\" },\\n      ])\\n    ) {\\n      this.finishOp(tt.doubleAt, 2);\\n    }\\n    // '@'\\n    else {\\n      this.finishOp(tt.at, 1);\\n    }\\n  }\\n\\n  readToken_plus_min(code: number): void {\\n    // '+-'\\n    const next = this.input.charCodeAt(this.state.pos + 1);\\n\\n    if (next === code) {\\n      this.finishOp(tt.incDec, 2);\\n      return;\\n    }\\n\\n    if (next === charCodes.equalsTo) {\\n      this.finishOp(tt.assign, 2);\\n    } else {\\n      this.finishOp(tt.plusMin, 1);\\n    }\\n  }\\n\\n  readToken_lt(): void {\\n    // '<'\\n    const { pos } = this.state;\\n    const next = this.input.charCodeAt(pos + 1);\\n\\n    if (next === charCodes.lessThan) {\\n      if (this.input.charCodeAt(pos + 2) === charCodes.equalsTo) {\\n        this.finishOp(tt.assign, 3);\\n        return;\\n      }\\n      this.finishOp(tt.bitShiftL, 2);\\n      return;\\n    }\\n\\n    if (next === charCodes.equalsTo) {\\n      // <=\\n      this.finishOp(tt.relational, 2);\\n      return;\\n    }\\n\\n    this.finishOp(tt.lt, 1);\\n  }\\n\\n  readToken_gt(): void {\\n    // '>'\\n    const { pos } = this.state;\\n    const next = this.input.charCodeAt(pos + 1);\\n\\n    if (next === charCodes.greaterThan) {\\n      const size =\\n        this.input.charCodeAt(pos + 2) === charCodes.greaterThan ? 3 : 2;\\n      if (this.input.charCodeAt(pos + size) === charCodes.equalsTo) {\\n        this.finishOp(tt.assign, size + 1);\\n        return;\\n      }\\n      this.finishOp(tt.bitShiftR, size);\\n      return;\\n    }\\n\\n    if (next === charCodes.equalsTo) {\\n      // <= | >=\\n      this.finishOp(tt.relational, 2);\\n      return;\\n    }\\n\\n    this.finishOp(tt.gt, 1);\\n  }\\n\\n  readToken_eq_excl(code: number): void {\\n    // '=!'\\n    const next = this.input.charCodeAt(this.state.pos + 1);\\n    if (next === charCodes.equalsTo) {\\n      this.finishOp(\\n        tt.equality,\\n        this.input.charCodeAt(this.state.pos + 2) === charCodes.equalsTo\\n          ? 3\\n          : 2,\\n      );\\n      return;\\n    }\\n    if (code === charCodes.equalsTo && next === charCodes.greaterThan) {\\n      // '=>'\\n      this.state.pos += 2;\\n      this.finishToken(tt.arrow);\\n      return;\\n    }\\n    this.finishOp(code === charCodes.equalsTo ? tt.eq : tt.bang, 1);\\n  }\\n\\n  readToken_question(): void {\\n    // '?'\\n    const next = this.input.charCodeAt(this.state.pos + 1);\\n    const next2 = this.input.charCodeAt(this.state.pos + 2);\\n    if (next === charCodes.questionMark) {\\n      if (next2 === charCodes.equalsTo) {\\n        // '??='\\n        this.finishOp(tt.assign, 3);\\n      } else {\\n        // '??'\\n        this.finishOp(tt.nullishCoalescing, 2);\\n      }\\n    } else if (\\n      next === charCodes.dot &&\\n      !(next2 >= charCodes.digit0 && next2 <= charCodes.digit9)\\n    ) {\\n      // '.' not followed by a number\\n      this.state.pos += 2;\\n      this.finishToken(tt.questionDot);\\n    } else {\\n      ++this.state.pos;\\n      this.finishToken(tt.question);\\n    }\\n  }\\n\\n  getTokenFromCode(code: number): void {\\n    switch (code) {\\n      // The interpretation of a dot depends on whether it is followed\\n      // by a digit or another two dots.\\n\\n      case charCodes.dot:\\n        this.readToken_dot();\\n        return;\\n      // Punctuation tokens.\\n      case charCodes.leftParenthesis:\\n        ++this.state.pos;\\n        this.finishToken(tt.parenL);\\n        return;\\n      case charCodes.rightParenthesis:\\n        ++this.state.pos;\\n        this.finishToken(tt.parenR);\\n        return;\\n      case charCodes.semicolon:\\n        ++this.state.pos;\\n        this.finishToken(tt.semi);\\n        return;\\n      case charCodes.comma:\\n        ++this.state.pos;\\n        this.finishToken(tt.comma);\\n        return;\\n      case charCodes.leftSquareBracket:\\n        if (\\n          this.hasPlugin(\\\"recordAndTuple\\\") &&\\n          this.input.charCodeAt(this.state.pos + 1) === charCodes.verticalBar\\n        ) {\\n          if (this.getPluginOption(\\\"recordAndTuple\\\", \\\"syntaxType\\\") !== \\\"bar\\\") {\\n            throw this.raise(\\n              Errors.TupleExpressionBarIncorrectStartSyntaxType,\\n              { at: this.state.curPosition() },\\n            );\\n          }\\n\\n          // [|\\n          this.state.pos += 2;\\n          this.finishToken(tt.bracketBarL);\\n        } else {\\n          ++this.state.pos;\\n          this.finishToken(tt.bracketL);\\n        }\\n        return;\\n      case charCodes.rightSquareBracket:\\n        ++this.state.pos;\\n        this.finishToken(tt.bracketR);\\n        return;\\n      case charCodes.leftCurlyBrace:\\n        if (\\n          this.hasPlugin(\\\"recordAndTuple\\\") &&\\n          this.input.charCodeAt(this.state.pos + 1) === charCodes.verticalBar\\n        ) {\\n          if (this.getPluginOption(\\\"recordAndTuple\\\", \\\"syntaxType\\\") !== \\\"bar\\\") {\\n            throw this.raise(\\n              Errors.RecordExpressionBarIncorrectStartSyntaxType,\\n              { at: this.state.curPosition() },\\n            );\\n          }\\n\\n          // {|\\n          this.state.pos += 2;\\n          this.finishToken(tt.braceBarL);\\n        } else {\\n          ++this.state.pos;\\n          this.finishToken(tt.braceL);\\n        }\\n        return;\\n      case charCodes.rightCurlyBrace:\\n        ++this.state.pos;\\n        this.finishToken(tt.braceR);\\n        return;\\n\\n      case charCodes.colon:\\n        if (\\n          this.hasPlugin(\\\"functionBind\\\") &&\\n          this.input.charCodeAt(this.state.pos + 1) === charCodes.colon\\n        ) {\\n          this.finishOp(tt.doubleColon, 2);\\n        } else {\\n          ++this.state.pos;\\n          this.finishToken(tt.colon);\\n        }\\n        return;\\n\\n      case charCodes.questionMark:\\n        this.readToken_question();\\n        return;\\n\\n      case charCodes.graveAccent:\\n        this.readTemplateToken();\\n        return;\\n\\n      case charCodes.digit0: {\\n        const next = this.input.charCodeAt(this.state.pos + 1);\\n        // '0x', '0X' - hex number\\n        if (next === charCodes.lowercaseX || next === charCodes.uppercaseX) {\\n          this.readRadixNumber(16);\\n          return;\\n        }\\n        // '0o', '0O' - octal number\\n        if (next === charCodes.lowercaseO || next === charCodes.uppercaseO) {\\n          this.readRadixNumber(8);\\n          return;\\n        }\\n        // '0b', '0B' - binary number\\n        if (next === charCodes.lowercaseB || next === charCodes.uppercaseB) {\\n          this.readRadixNumber(2);\\n          return;\\n        }\\n      }\\n      // Anything else beginning with a digit is an integer, octal\\n      // number, or float. (fall through)\\n      case charCodes.digit1:\\n      case charCodes.digit2:\\n      case charCodes.digit3:\\n      case charCodes.digit4:\\n      case charCodes.digit5:\\n      case charCodes.digit6:\\n      case charCodes.digit7:\\n      case charCodes.digit8:\\n      case charCodes.digit9:\\n        this.readNumber(false);\\n        return;\\n\\n      // Quotes produce strings.\\n      case charCodes.quotationMark:\\n      case charCodes.apostrophe:\\n        this.readString(code);\\n        return;\\n\\n      // Operators are parsed inline in tiny state machines. '=' (charCodes.equalsTo) is\\n      // often referred to. `finishOp` simply skips the amount of\\n      // characters it is given as second argument, and returns a token\\n      // of the type given by its first argument.\\n\\n      case charCodes.slash:\\n        this.readToken_slash();\\n        return;\\n\\n      case charCodes.percentSign:\\n      case charCodes.asterisk:\\n        this.readToken_mult_modulo(code);\\n        return;\\n\\n      case charCodes.verticalBar:\\n      case charCodes.ampersand:\\n        this.readToken_pipe_amp(code);\\n        return;\\n\\n      case charCodes.caret:\\n        this.readToken_caret();\\n        return;\\n\\n      case charCodes.plusSign:\\n      case charCodes.dash:\\n        this.readToken_plus_min(code);\\n        return;\\n\\n      case charCodes.lessThan:\\n        this.readToken_lt();\\n        return;\\n\\n      case charCodes.greaterThan:\\n        this.readToken_gt();\\n        return;\\n\\n      case charCodes.equalsTo:\\n      case charCodes.exclamationMark:\\n        this.readToken_eq_excl(code);\\n        return;\\n\\n      case charCodes.tilde:\\n        this.finishOp(tt.tilde, 1);\\n        return;\\n\\n      case charCodes.atSign:\\n        this.readToken_atSign();\\n        return;\\n\\n      case charCodes.numberSign:\\n        this.readToken_numberSign();\\n        return;\\n\\n      case charCodes.backslash:\\n        this.readWord();\\n        return;\\n\\n      default:\\n        if (isIdentifierStart(code)) {\\n          this.readWord(code);\\n          return;\\n        }\\n    }\\n\\n    throw this.raise(Errors.InvalidOrUnexpectedToken, {\\n      at: this.state.curPosition(),\\n      unexpected: String.fromCodePoint(code),\\n    });\\n  }\\n\\n  finishOp(type: TokenType, size: number): void {\\n    const str = this.input.slice(this.state.pos, this.state.pos + size);\\n    this.state.pos += size;\\n    this.finishToken(type, str);\\n  }\\n\\n  readRegexp(): void {\\n    const startLoc = this.state.startLoc;\\n    const start = this.state.start + 1;\\n    let escaped, inClass;\\n    let { pos } = this.state;\\n    for (; ; ++pos) {\\n      if (pos >= this.length) {\\n        // FIXME: explain\\n        throw this.raise(Errors.UnterminatedRegExp, {\\n          at: createPositionWithColumnOffset(startLoc, 1),\\n        });\\n      }\\n      const ch = this.input.charCodeAt(pos);\\n      if (isNewLine(ch)) {\\n        throw this.raise(Errors.UnterminatedRegExp, {\\n          at: createPositionWithColumnOffset(startLoc, 1),\\n        });\\n      }\\n      if (escaped) {\\n        escaped = false;\\n      } else {\\n        if (ch === charCodes.leftSquareBracket) {\\n          inClass = true;\\n        } else if (ch === charCodes.rightSquareBracket && inClass) {\\n          inClass = false;\\n        } else if (ch === charCodes.slash && !inClass) {\\n          break;\\n        }\\n        escaped = ch === charCodes.backslash;\\n      }\\n    }\\n    const content = this.input.slice(start, pos);\\n    ++pos;\\n\\n    let mods = \\\"\\\";\\n\\n    const nextPos = () =>\\n      // (pos + 1) + 1 - start\\n      createPositionWithColumnOffset(startLoc, pos + 2 - start);\\n\\n    while (pos < this.length) {\\n      const cp = this.codePointAtPos(pos);\\n      // It doesn't matter if cp > 0xffff, the loop will either throw or break because we check on cp\\n      const char = String.fromCharCode(cp);\\n\\n      // @ts-expect-error VALID_REGEX_FLAGS.has should accept expanded type: number\\n      if (VALID_REGEX_FLAGS.has(cp)) {\\n        if (cp === charCodes.lowercaseV) {\\n          this.expectPlugin(\\\"regexpUnicodeSets\\\", nextPos());\\n\\n          if (mods.includes(\\\"u\\\")) {\\n            this.raise(Errors.IncompatibleRegExpUVFlags, { at: nextPos() });\\n          }\\n        } else if (cp === charCodes.lowercaseU) {\\n          if (mods.includes(\\\"v\\\")) {\\n            this.raise(Errors.IncompatibleRegExpUVFlags, { at: nextPos() });\\n          }\\n        }\\n        if (mods.includes(char)) {\\n          this.raise(Errors.DuplicateRegExpFlags, { at: nextPos() });\\n        }\\n      } else if (isIdentifierChar(cp) || cp === charCodes.backslash) {\\n        this.raise(Errors.MalformedRegExpFlags, { at: nextPos() });\\n      } else {\\n        break;\\n      }\\n\\n      ++pos;\\n      mods += char;\\n    }\\n    this.state.pos = pos;\\n\\n    this.finishToken(tt.regexp, {\\n      pattern: content,\\n      flags: mods,\\n    });\\n  }\\n\\n  // Read an integer in the given radix. Return null if zero digits\\n  // were read, the integer value otherwise. When `len` is given, this\\n  // will return `null` unless the integer has exactly `len` digits.\\n  // When `forceLen` is `true`, it means that we already know that in case\\n  // of a malformed number we have to skip `len` characters anyway, instead\\n  // of bailing out early. For example, in \\\"\\\\u{123Z}\\\" we want to read up to }\\n  // anyway, while in \\\"\\\\u00Z\\\" we will stop at Z instead of consuming four\\n  // characters (and thus the closing quote).\\n\\n  readInt(\\n    radix: number,\\n    len?: number,\\n    forceLen: boolean = false,\\n    allowNumSeparator: boolean | \\\"bail\\\" = true,\\n  ): number | null {\\n    const { n, pos } = readInt(\\n      this.input,\\n      this.state.pos,\\n      this.state.lineStart,\\n      this.state.curLine,\\n      radix,\\n      len,\\n      forceLen,\\n      allowNumSeparator,\\n      this.errorHandlers_readInt,\\n      /* bailOnError */ false,\\n    );\\n    this.state.pos = pos;\\n    return n;\\n  }\\n\\n  readRadixNumber(radix: number): void {\\n    const startLoc = this.state.curPosition();\\n    let isBigInt = false;\\n\\n    this.state.pos += 2; // 0x\\n    const val = this.readInt(radix);\\n    if (val == null) {\\n      this.raise(Errors.InvalidDigit, {\\n        // Numeric literals can't have newlines, so this is safe to do.\\n        at: createPositionWithColumnOffset(startLoc, 2),\\n        radix,\\n      });\\n    }\\n    const next = this.input.charCodeAt(this.state.pos);\\n\\n    if (next === charCodes.lowercaseN) {\\n      ++this.state.pos;\\n      isBigInt = true;\\n    } else if (next === charCodes.lowercaseM) {\\n      throw this.raise(Errors.InvalidDecimal, { at: startLoc });\\n    }\\n\\n    if (isIdentifierStart(this.codePointAtPos(this.state.pos))) {\\n      throw this.raise(Errors.NumberIdentifier, {\\n        at: this.state.curPosition(),\\n      });\\n    }\\n\\n    if (isBigInt) {\\n      const str = this.input\\n        .slice(startLoc.index, this.state.pos)\\n        .replace(/[_n]/g, \\\"\\\");\\n      this.finishToken(tt.bigint, str);\\n      return;\\n    }\\n\\n    this.finishToken(tt.num, val);\\n  }\\n\\n  // Read an integer, octal integer, or floating-point number.\\n\\n  readNumber(startsWithDot: boolean): void {\\n    const start = this.state.pos;\\n    const startLoc = this.state.curPosition();\\n    let isFloat = false;\\n    let isBigInt = false;\\n    let isDecimal = false;\\n    let hasExponent = false;\\n    let isOctal = false;\\n\\n    if (!startsWithDot && this.readInt(10) === null) {\\n      this.raise(Errors.InvalidNumber, { at: this.state.curPosition() });\\n    }\\n    const hasLeadingZero =\\n      this.state.pos - start >= 2 &&\\n      this.input.charCodeAt(start) === charCodes.digit0;\\n\\n    if (hasLeadingZero) {\\n      const integer = this.input.slice(start, this.state.pos);\\n      this.recordStrictModeErrors(Errors.StrictOctalLiteral, { at: startLoc });\\n      if (!this.state.strict) {\\n        // disallow numeric separators in non octal decimals and legacy octal likes\\n        const underscorePos = integer.indexOf(\\\"_\\\");\\n        if (underscorePos > 0) {\\n          // Numeric literals can't have newlines, so this is safe to do.\\n          this.raise(Errors.ZeroDigitNumericSeparator, {\\n            at: createPositionWithColumnOffset(startLoc, underscorePos),\\n          });\\n        }\\n      }\\n      isOctal = hasLeadingZero && !/[89]/.test(integer);\\n    }\\n\\n    let next = this.input.charCodeAt(this.state.pos);\\n    if (next === charCodes.dot && !isOctal) {\\n      ++this.state.pos;\\n      this.readInt(10);\\n      isFloat = true;\\n      next = this.input.charCodeAt(this.state.pos);\\n    }\\n\\n    if (\\n      (next === charCodes.uppercaseE || next === charCodes.lowercaseE) &&\\n      !isOctal\\n    ) {\\n      next = this.input.charCodeAt(++this.state.pos);\\n      if (next === charCodes.plusSign || next === charCodes.dash) {\\n        ++this.state.pos;\\n      }\\n      if (this.readInt(10) === null) {\\n        this.raise(Errors.InvalidOrMissingExponent, { at: startLoc });\\n      }\\n      isFloat = true;\\n      hasExponent = true;\\n      next = this.input.charCodeAt(this.state.pos);\\n    }\\n\\n    if (next === charCodes.lowercaseN) {\\n      // disallow floats, legacy octal syntax and non octal decimals\\n      // new style octal (\\\"0o\\\") is handled in this.readRadixNumber\\n      if (isFloat || hasLeadingZero) {\\n        this.raise(Errors.InvalidBigIntLiteral, { at: startLoc });\\n      }\\n      ++this.state.pos;\\n      isBigInt = true;\\n    }\\n\\n    if (next === charCodes.lowercaseM) {\\n      this.expectPlugin(\\\"decimal\\\", this.state.curPosition());\\n      if (hasExponent || hasLeadingZero) {\\n        this.raise(Errors.InvalidDecimal, { at: startLoc });\\n      }\\n      ++this.state.pos;\\n      isDecimal = true;\\n    }\\n\\n    if (isIdentifierStart(this.codePointAtPos(this.state.pos))) {\\n      throw this.raise(Errors.NumberIdentifier, {\\n        at: this.state.curPosition(),\\n      });\\n    }\\n\\n    // remove \\\"_\\\" for numeric literal separator, and trailing `m` or `n`\\n    const str = this.input.slice(start, this.state.pos).replace(/[_mn]/g, \\\"\\\");\\n\\n    if (isBigInt) {\\n      this.finishToken(tt.bigint, str);\\n      return;\\n    }\\n\\n    if (isDecimal) {\\n      this.finishToken(tt.decimal, str);\\n      return;\\n    }\\n\\n    const val = isOctal ? parseInt(str, 8) : parseFloat(str);\\n    this.finishToken(tt.num, val);\\n  }\\n\\n  // Read a string value, interpreting backslash-escapes.\\n\\n  readCodePoint(throwOnInvalid: boolean): number | null {\\n    const { code, pos } = readCodePoint(\\n      this.input,\\n      this.state.pos,\\n      this.state.lineStart,\\n      this.state.curLine,\\n      throwOnInvalid,\\n      this.errorHandlers_readCodePoint,\\n    );\\n    this.state.pos = pos;\\n    return code;\\n  }\\n\\n  readString(quote: number): void {\\n    const { str, pos, curLine, lineStart } = readStringContents(\\n      quote === charCodes.quotationMark ? \\\"double\\\" : \\\"single\\\",\\n      this.input,\\n      this.state.pos + 1, // skip the quote\\n      this.state.lineStart,\\n      this.state.curLine,\\n      this.errorHandlers_readStringContents_string,\\n    );\\n    this.state.pos = pos + 1; // skip the quote\\n    this.state.lineStart = lineStart;\\n    this.state.curLine = curLine;\\n    this.finishToken(tt.string, str);\\n  }\\n\\n  // Reads template continuation `}...`\\n  readTemplateContinuation(): void {\\n    if (!this.match(tt.braceR)) {\\n      this.unexpected(null, tt.braceR);\\n    }\\n    // rewind pos to `}`\\n    this.state.pos--;\\n    this.readTemplateToken();\\n  }\\n\\n  // Reads template string tokens.\\n  readTemplateToken(): void {\\n    const opening = this.input[this.state.pos];\\n    const { str, firstInvalidLoc, pos, curLine, lineStart } =\\n      readStringContents(\\n        \\\"template\\\",\\n        this.input,\\n        this.state.pos + 1, // skip '`' or `}`\\n        this.state.lineStart,\\n        this.state.curLine,\\n        this.errorHandlers_readStringContents_template,\\n      );\\n    this.state.pos = pos + 1; // skip '`' or `$`\\n    this.state.lineStart = lineStart;\\n    this.state.curLine = curLine;\\n\\n    if (firstInvalidLoc) {\\n      this.state.firstInvalidTemplateEscapePos = new Position(\\n        firstInvalidLoc.curLine,\\n        firstInvalidLoc.pos - firstInvalidLoc.lineStart,\\n        firstInvalidLoc.pos,\\n      );\\n    }\\n\\n    if (this.input.codePointAt(pos) === charCodes.graveAccent) {\\n      this.finishToken(\\n        tt.templateTail,\\n        firstInvalidLoc ? null : opening + str + \\\"`\\\",\\n      );\\n    } else {\\n      this.state.pos++; // skip '{'\\n      this.finishToken(\\n        tt.templateNonTail,\\n        firstInvalidLoc ? null : opening + str + \\\"${\\\",\\n      );\\n    }\\n  }\\n\\n  recordStrictModeErrors(\\n    toParseError: DeferredStrictError,\\n    { at }: { at: Position },\\n  ) {\\n    const index = at.index;\\n\\n    if (this.state.strict && !this.state.strictErrors.has(index)) {\\n      this.raise(toParseError, { at });\\n    } else {\\n      this.state.strictErrors.set(index, [toParseError, at]);\\n    }\\n  }\\n\\n  // Read an identifier, and return it as a string. Sets `this.state.containsEsc`\\n  // to whether the word contained a '\\\\u' escape.\\n  //\\n  // Incrementally adds only escaped chars, adding other chunks as-is\\n  // as a micro-optimization.\\n  //\\n  // When `firstCode` is given, it assumes it is always an identifier start and\\n  // will skip reading start position again\\n\\n  readWord1(firstCode?: number): string {\\n    this.state.containsEsc = false;\\n    let word = \\\"\\\";\\n    const start = this.state.pos;\\n    let chunkStart = this.state.pos;\\n    if (firstCode !== undefined) {\\n      this.state.pos += firstCode <= 0xffff ? 1 : 2;\\n    }\\n\\n    while (this.state.pos < this.length) {\\n      const ch = this.codePointAtPos(this.state.pos);\\n      if (isIdentifierChar(ch)) {\\n        this.state.pos += ch <= 0xffff ? 1 : 2;\\n      } else if (ch === charCodes.backslash) {\\n        this.state.containsEsc = true;\\n\\n        word += this.input.slice(chunkStart, this.state.pos);\\n        const escStart = this.state.curPosition();\\n        const identifierCheck =\\n          this.state.pos === start ? isIdentifierStart : isIdentifierChar;\\n\\n        if (this.input.charCodeAt(++this.state.pos) !== charCodes.lowercaseU) {\\n          this.raise(Errors.MissingUnicodeEscape, {\\n            at: this.state.curPosition(),\\n          });\\n          chunkStart = this.state.pos - 1;\\n          continue;\\n        }\\n\\n        ++this.state.pos;\\n        const esc = this.readCodePoint(true);\\n        if (esc !== null) {\\n          if (!identifierCheck(esc)) {\\n            this.raise(Errors.EscapedCharNotAnIdentifier, { at: escStart });\\n          }\\n\\n          word += String.fromCodePoint(esc);\\n        }\\n        chunkStart = this.state.pos;\\n      } else {\\n        break;\\n      }\\n    }\\n    return word + this.input.slice(chunkStart, this.state.pos);\\n  }\\n\\n  // Read an identifier or keyword token. Will check for reserved\\n  // words when necessary.\\n\\n  readWord(firstCode?: number): void {\\n    const word = this.readWord1(firstCode);\\n    const type = keywordTypes.get(word);\\n    if (type !== undefined) {\\n      // We don't use word as state.value here because word is a dynamic string\\n      // while token label is a shared constant string\\n      this.finishToken(type, tokenLabelName(type));\\n    } else {\\n      this.finishToken(tt.name, word);\\n    }\\n  }\\n\\n  checkKeywordEscapes(): void {\\n    const { type } = this.state;\\n    if (tokenIsKeyword(type) && this.state.containsEsc) {\\n      this.raise(Errors.InvalidEscapedReservedWord, {\\n        at: this.state.startLoc,\\n        reservedWord: tokenLabelName(type),\\n      });\\n    }\\n  }\\n\\n  /**\\n   * Raise a `ParseError` given the appropriate properties. If passed a\\n   * `Position` for the `at` property, raises the `ParseError` at that location.\\n   * Otherwise, if passed a `Node`, raises the `ParseError` at the start\\n   * location of that `Node`.\\n   *\\n   * If `errorRecovery` is `true`, the error is pushed to the errors array and\\n   * returned. If `errorRecovery` is `false`, the error is instead thrown.\\n   */\\n  raise<ErrorDetails>(\\n    toParseError: ParseErrorConstructor<ErrorDetails>,\\n    raiseProperties: RaiseProperties<ErrorDetails>,\\n  ): ParseError<ErrorDetails> {\\n    const { at, ...details } = raiseProperties;\\n    const loc = at instanceof Position ? at : at.loc.start;\\n    // @ts-expect-error: refine details typing\\n    const error = toParseError({ loc, details });\\n\\n    if (!this.options.errorRecovery) throw error;\\n    if (!this.isLookahead) this.state.errors.push(error);\\n\\n    return error;\\n  }\\n\\n  /**\\n   * If `errorRecovery` is `false`, this method behaves identically to `raise`.\\n   * If `errorRecovery` is `true`, this method will first see if there is\\n   * already an error stored at the same `Position`, and replaces it with the\\n   * one generated here.\\n   */\\n  raiseOverwrite<ErrorDetails>(\\n    toParseError: ParseErrorConstructor<ErrorDetails>,\\n    raiseProperties: RaiseProperties<ErrorDetails>,\\n  ): ParseError<ErrorDetails> | never {\\n    const { at, ...details } = raiseProperties;\\n    const loc = at instanceof Position ? at : at.loc.start;\\n    const pos = loc.index;\\n    const errors = this.state.errors;\\n\\n    for (let i = errors.length - 1; i >= 0; i--) {\\n      const error = errors[i];\\n      if (error.loc.index === pos) {\\n        // @ts-expect-error: refine details typing\\n        return (errors[i] = toParseError({ loc, details }));\\n      }\\n      if (error.loc.index < pos) break;\\n    }\\n\\n    return this.raise(toParseError, raiseProperties);\\n  }\\n\\n  // updateContext is used by the jsx plugin\\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\\n  updateContext(prevType: TokenType): void {}\\n\\n  // Raise an unexpected token error. Can take the expected token type.\\n  unexpected(loc?: Position | null, type?: TokenType): void {\\n    throw this.raise(Errors.UnexpectedToken, {\\n      expected: type ? tokenLabelName(type) : null,\\n      at: loc != null ? loc : this.state.startLoc,\\n    });\\n  }\\n\\n  expectPlugin(pluginName: Plugin, loc?: Position): true {\\n    if (this.hasPlugin(pluginName)) {\\n      return true;\\n    }\\n\\n    throw this.raise(Errors.MissingPlugin, {\\n      at: loc != null ? loc : this.state.startLoc,\\n      missingPlugin: [pluginName],\\n    });\\n  }\\n\\n  expectOnePlugin(pluginNames: Plugin[]): void {\\n    if (!pluginNames.some(name => this.hasPlugin(name))) {\\n      throw this.raise(Errors.MissingOneOfPlugins, {\\n        at: this.state.startLoc,\\n        missingPlugin: pluginNames,\\n      });\\n    }\\n  }\\n\\n  errorBuilder(error: ParseErrorConstructor<{}>) {\\n    return (pos: number, lineStart: number, curLine: number) => {\\n      this.raise(error, {\\n        at: buildPosition(pos, lineStart, curLine),\\n      });\\n    };\\n  }\\n\\n  errorHandlers_readInt: IntErrorHandlers = {\\n    invalidDigit: (pos, lineStart, curLine, radix) => {\\n      if (!this.options.errorRecovery) return false;\\n\\n      this.raise(Errors.InvalidDigit, {\\n        at: buildPosition(pos, lineStart, curLine),\\n        radix,\\n      });\\n      // Continue parsing the number as if there was no invalid digit.\\n      return true;\\n    },\\n    numericSeparatorInEscapeSequence: this.errorBuilder(\\n      Errors.NumericSeparatorInEscapeSequence,\\n    ),\\n    unexpectedNumericSeparator: this.errorBuilder(\\n      Errors.UnexpectedNumericSeparator,\\n    ),\\n  };\\n\\n  errorHandlers_readCodePoint: CodePointErrorHandlers = {\\n    ...this.errorHandlers_readInt,\\n    invalidEscapeSequence: this.errorBuilder(Errors.InvalidEscapeSequence),\\n    invalidCodePoint: this.errorBuilder(Errors.InvalidCodePoint),\\n  };\\n\\n  errorHandlers_readStringContents_string: StringContentsErrorHandlers = {\\n    ...this.errorHandlers_readCodePoint,\\n    strictNumericEscape: (pos, lineStart, curLine) => {\\n      this.recordStrictModeErrors(Errors.StrictNumericEscape, {\\n        at: buildPosition(pos, lineStart, curLine),\\n      });\\n    },\\n    unterminated: (pos, lineStart, curLine) => {\\n      throw this.raise(Errors.UnterminatedString, {\\n        // Report the error at the string quote\\n        at: buildPosition(pos - 1, lineStart, curLine),\\n      });\\n    },\\n  };\\n\\n  errorHandlers_readStringContents_template: StringContentsErrorHandlers = {\\n    ...this.errorHandlers_readCodePoint,\\n    strictNumericEscape: this.errorBuilder(Errors.StrictNumericEscape),\\n    unterminated: (pos, lineStart, curLine) => {\\n      throw this.raise(Errors.UnterminatedTemplate, {\\n        at: buildPosition(pos, lineStart, curLine),\\n      });\\n    },\\n  };\\n}\\n\",\"import {\\n  CLASS_ELEMENT_KIND_ACCESSOR,\\n  CLASS_ELEMENT_FLAG_STATIC,\\n  type ClassElementTypes,\\n} from \\\"./scopeflags\\\";\\nimport type { Position } from \\\"./location\\\";\\nimport { Errors } from \\\"../parse-error\\\";\\nimport type Tokenizer from \\\"../tokenizer\\\";\\n\\nexport class ClassScope {\\n  // A list of private named declared in the current class\\n  privateNames: Set<string> = new Set();\\n\\n  // A list of private getters of setters without their counterpart\\n  loneAccessors: Map<string, ClassElementTypes> = new Map();\\n\\n  // A list of private names used before being defined, mapping to\\n  // their position.\\n  undefinedPrivateNames: Map<string, Position> = new Map();\\n}\\n\\nexport default class ClassScopeHandler {\\n  parser: Tokenizer;\\n  stack: Array<ClassScope> = [];\\n  undefinedPrivateNames: Map<string, Position> = new Map();\\n\\n  constructor(parser: Tokenizer) {\\n    this.parser = parser;\\n  }\\n\\n  current(): ClassScope {\\n    return this.stack[this.stack.length - 1];\\n  }\\n\\n  enter() {\\n    this.stack.push(new ClassScope());\\n  }\\n\\n  exit() {\\n    const oldClassScope = this.stack.pop();\\n\\n    // Migrate the usage of not yet defined private names to the outer\\n    // class scope, or raise an error if we reached the top-level scope.\\n\\n    const current = this.current();\\n\\n    // Array.from is needed because this is compiled to an array-like for loop\\n    for (const [name, loc] of Array.from(oldClassScope.undefinedPrivateNames)) {\\n      if (current) {\\n        if (!current.undefinedPrivateNames.has(name)) {\\n          current.undefinedPrivateNames.set(name, loc);\\n        }\\n      } else {\\n        this.parser.raise(Errors.InvalidPrivateFieldResolution, {\\n          at: loc,\\n          identifierName: name,\\n        });\\n      }\\n    }\\n  }\\n\\n  declarePrivateName(\\n    name: string,\\n    elementType: ClassElementTypes,\\n    loc: Position,\\n  ) {\\n    const { privateNames, loneAccessors, undefinedPrivateNames } =\\n      this.current();\\n    let redefined = privateNames.has(name);\\n\\n    if (elementType & CLASS_ELEMENT_KIND_ACCESSOR) {\\n      const accessor = redefined && loneAccessors.get(name);\\n      if (accessor) {\\n        const oldStatic = accessor & CLASS_ELEMENT_FLAG_STATIC;\\n        const newStatic = elementType & CLASS_ELEMENT_FLAG_STATIC;\\n\\n        const oldKind = accessor & CLASS_ELEMENT_KIND_ACCESSOR;\\n        const newKind = elementType & CLASS_ELEMENT_KIND_ACCESSOR;\\n\\n        // The private name can be duplicated only if it is used by\\n        // two accessors with different kind (get and set), and if\\n        // they have the same placement (static or not).\\n        redefined = oldKind === newKind || oldStatic !== newStatic;\\n\\n        if (!redefined) loneAccessors.delete(name);\\n      } else if (!redefined) {\\n        loneAccessors.set(name, elementType);\\n      }\\n    }\\n\\n    if (redefined) {\\n      this.parser.raise(Errors.PrivateNameRedeclaration, {\\n        at: loc,\\n        identifierName: name,\\n      });\\n    }\\n\\n    privateNames.add(name);\\n    undefinedPrivateNames.delete(name);\\n  }\\n\\n  usePrivateName(name: string, loc: Position) {\\n    let classScope;\\n    for (classScope of this.stack) {\\n      if (classScope.privateNames.has(name)) return;\\n    }\\n\\n    if (classScope) {\\n      classScope.undefinedPrivateNames.set(name, loc);\\n    } else {\\n      // top-level\\n      this.parser.raise(Errors.InvalidPrivateFieldResolution, {\\n        at: loc,\\n        identifierName: name,\\n      });\\n    }\\n  }\\n}\\n\",\"import { Errors, type ParseErrorConstructor } from \\\"../parse-error\\\";\\nimport type { Position } from \\\"./location\\\";\\nimport type { Node } from \\\"../types\\\";\\nimport type Tokenizer from \\\"../tokenizer\\\";\\n\\n/**\\n * @module util/expression-scope\\n\\nExpressionScope is used to track declaration errors in these ambiguous patterns:\\n\\n- CoverParenthesizedExpressionAndArrowParameterList\\n  e.g. we don't know if `({ x })` is an parenthesized expression or an\\n  arrow function parameters until we see an `=>` after `)`.\\n\\n- CoverCallExpressionAndAsyncArrowHead\\n  e.g. we don't know if `async({ x })` is a call expression or an async arrow\\n  function parameters until we see an `=>` after `)`\\n\\nThe following declaration errors (@see parser-errors/standard) will be recorded in\\nsome expression scopes and thrown later when we know what the ambiguous pattern is\\n\\n- AwaitBindingIdentifier\\n- AwaitExpressionFormalParameter\\n- YieldInParameter\\n- InvalidParenthesizedAssignment when parenthesized is an identifier\\n\\nThere are four different expression scope\\n- Expression\\n  A general scope that represents program / function body / static block. No errors\\n  will be recorded nor thrown in this scope.\\n\\n- MaybeArrowParameterDeclaration\\n  A scope that represents ambiguous arrow head e.g. `(x)`. Errors will be recorded\\n  alongside parent scopes and thrown when `ExpressionScopeHandler#validateAsPattern`\\n  is called.\\n\\n- MaybeAsyncArrowParameterDeclaration\\n  A scope that represents ambiguous async arrow head e.g. `async(x)`. Errors will\\n  be recorded alongside parent scopes and thrown when\\n  `ExpressionScopeHandler#validateAsPattern` is called.\\n\\n- ParameterDeclaration\\n  A scope that represents unambiguous function parameters `function(x)`. Errors\\n  recorded in this scope will be thrown immediately. No errors will be recorded in\\n  this scope.\\n\\n// @see {@link https://docs.google.com/document/d/1FAvEp9EUK-G8kHfDIEo_385Hs2SUBCYbJ5H-NnLvq8M|V8 Expression Scope design docs}\\n */\\n\\nconst kExpression = 0,\\n  kMaybeArrowParameterDeclaration = 1,\\n  kMaybeAsyncArrowParameterDeclaration = 2,\\n  kParameterDeclaration = 3;\\n\\ntype ExpressionScopeType = 0 | 1 | 2 | 3;\\n\\nclass ExpressionScope {\\n  type: ExpressionScopeType;\\n\\n  constructor(type: ExpressionScopeType = kExpression) {\\n    this.type = type;\\n  }\\n\\n  canBeArrowParameterDeclaration(): this is ArrowHeadParsingScope {\\n    return (\\n      this.type === kMaybeAsyncArrowParameterDeclaration ||\\n      this.type === kMaybeArrowParameterDeclaration\\n    );\\n  }\\n\\n  isCertainlyParameterDeclaration() {\\n    return this.type === kParameterDeclaration;\\n  }\\n}\\n\\ntype ArrowHeadParsingParameterInitializerError =\\n  | typeof Errors.AwaitExpressionFormalParameter\\n  | typeof Errors.YieldInParameter;\\ntype ArrowHeadParsingDeclarationError =\\n  | ArrowHeadParsingParameterInitializerError\\n  | typeof Errors.InvalidParenthesizedAssignment\\n  | typeof Errors.AwaitBindingIdentifier;\\n\\nclass ArrowHeadParsingScope extends ExpressionScope {\\n  declarationErrors: Map<number, [ParseErrorConstructor<{}>, Position]> =\\n    new Map();\\n  constructor(type: 1 | 2) {\\n    super(type);\\n  }\\n  recordDeclarationError(\\n    ParsingErrorClass: ParseErrorConstructor<{}>,\\n    {\\n      at,\\n    }: {\\n      at: Position;\\n    },\\n  ) {\\n    const index = at.index;\\n\\n    this.declarationErrors.set(index, [ParsingErrorClass, at]);\\n  }\\n  clearDeclarationError(index: number) {\\n    this.declarationErrors.delete(index);\\n  }\\n  iterateErrors(\\n    iterator: (a: [ArrowHeadParsingDeclarationError, Position]) => void,\\n  ) {\\n    this.declarationErrors.forEach(iterator);\\n  }\\n}\\n\\nexport default class ExpressionScopeHandler {\\n  parser: Tokenizer;\\n  stack: Array<ExpressionScope> = [new ExpressionScope()];\\n\\n  constructor(parser: Tokenizer) {\\n    this.parser = parser;\\n  }\\n  enter(scope: ExpressionScope) {\\n    this.stack.push(scope);\\n  }\\n\\n  exit() {\\n    this.stack.pop();\\n  }\\n\\n  /**\\n   * Record likely parameter initializer errors\\n   *\\n   * When current scope is a ParameterDeclaration, the error will be thrown immediately,\\n   * otherwise it will be recorded to any ancestry MaybeArrowParameterDeclaration and\\n   * MaybeAsyncArrowParameterDeclaration scope until an Expression scope is seen.\\n   */\\n  recordParameterInitializerError(\\n    toParseError: ArrowHeadParsingParameterInitializerError,\\n    {\\n      at: node,\\n    }: {\\n      at: Node;\\n    },\\n  ): void {\\n    const origin = { at: node.loc.start };\\n    const { stack } = this;\\n    let i = stack.length - 1;\\n    let scope: ExpressionScope = stack[i];\\n    while (!scope.isCertainlyParameterDeclaration()) {\\n      if (scope.canBeArrowParameterDeclaration()) {\\n        scope.recordDeclarationError(toParseError, origin);\\n      } else {\\n        /*:: invariant(scope.type == kExpression) */\\n        // Type-Expression is the boundary where initializer error can populate to\\n        return;\\n      }\\n      scope = stack[--i];\\n    }\\n    this.parser.raise(toParseError, origin);\\n  }\\n\\n  /**\\n   * Record errors that must be thrown if the current pattern ends up being an arrow\\n   * function parameter. This is used to record parenthesized identifiers, and to record\\n   * \\\"a as T\\\" and \\\"<T> a\\\" type assertions when parsing typescript.\\n   *\\n   * A parenthesized identifier (or type assertion) in LHS can be ambiguous because the assignment\\n   * can be transformed to an assignable later, but not vice versa:\\n   * For example, in `([(a) = []] = []) => {}`, we think `(a) = []` is an LHS in `[(a) = []]`,\\n   * an LHS within `[(a) = []] = []`. However the LHS chain is then transformed by toAssignable,\\n   * and we should throw assignment `(a)`, which is only valid in LHS. Hence we record the\\n   * location of parenthesized `(a)` to current scope if it is one of MaybeArrowParameterDeclaration\\n   * and MaybeAsyncArrowParameterDeclaration\\n   *\\n   * Unlike `recordParameterInitializerError`, we don't record to ancestry scope because we\\n   * validate arrow head parsing scope before exit, and then the LHS will be unambiguous:\\n   * For example, in `( x = ( [(a) = []] = [] ) ) => {}`, we should not record `(a)` in `( x = ... ) =>`\\n   * arrow scope because when we finish parsing `( [(a) = []] = [] )`, it is an unambiguous assignment\\n   * expression and can not be cast to pattern\\n   */\\n  recordArrowParameterBindingError(\\n    error: ParseErrorConstructor<{}>,\\n    {\\n      at: node,\\n    }: {\\n      at: Node;\\n    },\\n  ): void {\\n    const { stack } = this;\\n    const scope: ExpressionScope = stack[stack.length - 1];\\n    const origin = { at: node.loc.start };\\n    if (scope.isCertainlyParameterDeclaration()) {\\n      this.parser.raise(error, origin);\\n    } else if (scope.canBeArrowParameterDeclaration()) {\\n      scope.recordDeclarationError(error, origin);\\n    } else {\\n      return;\\n    }\\n  }\\n\\n  /**\\n   * Record likely async arrow parameter errors\\n   *\\n   * Errors will be recorded to any ancestry MaybeAsyncArrowParameterDeclaration\\n   * scope until an Expression scope is seen.\\n   */\\n  recordAsyncArrowParametersError({ at }: { at: Position }): void {\\n    const { stack } = this;\\n    let i = stack.length - 1;\\n    let scope: ExpressionScope = stack[i];\\n    while (scope.canBeArrowParameterDeclaration()) {\\n      if (scope.type === kMaybeAsyncArrowParameterDeclaration) {\\n        scope.recordDeclarationError(Errors.AwaitBindingIdentifier, { at });\\n      }\\n      scope = stack[--i];\\n    }\\n  }\\n\\n  validateAsPattern(): void {\\n    const { stack } = this;\\n    const currentScope = stack[stack.length - 1];\\n    if (!currentScope.canBeArrowParameterDeclaration()) return;\\n    currentScope.iterateErrors(([toParseError, loc]) => {\\n      this.parser.raise(toParseError, { at: loc });\\n      // iterate from parent scope\\n      let i = stack.length - 2;\\n      let scope = stack[i];\\n      while (scope.canBeArrowParameterDeclaration()) {\\n        scope.clearDeclarationError(loc.index);\\n        scope = stack[--i];\\n      }\\n    });\\n  }\\n}\\n\\nexport function newParameterDeclarationScope() {\\n  return new ExpressionScope(kParameterDeclaration);\\n}\\n\\nexport function newArrowHeadScope() {\\n  return new ArrowHeadParsingScope(kMaybeArrowParameterDeclaration);\\n}\\n\\nexport function newAsyncArrowScope() {\\n  return new ArrowHeadParsingScope(kMaybeAsyncArrowParameterDeclaration);\\n}\\n\\nexport function newExpressionScope() {\\n  return new ExpressionScope();\\n}\\n\",\"export const // Initial Parameter flags\\n  PARAM = 0b0000,\\n  // track [Yield] production parameter\\n  PARAM_YIELD = 0b0001,\\n  // track [Await] production parameter\\n  PARAM_AWAIT = 0b0010,\\n  // track [Return] production parameter\\n  PARAM_RETURN = 0b0100,\\n  PARAM_IN = 0b1000; // track [In] production parameter\\n\\n// ProductionParameterHandler is a stack fashioned production parameter tracker\\n// https://tc39.es/ecma262/#sec-grammar-notation\\n// The tracked parameters are defined above.\\n//\\n// Whenever [+Await]/[+Yield] appears in the right-hand sides of a production,\\n// we must enter a new tracking stack. For example when parsing\\n//\\n// AsyncFunctionDeclaration [Yield, Await]:\\n//   async [no LineTerminator here] function BindingIdentifier[?Yield, ?Await]\\n//     ( FormalParameters[~Yield, +Await] ) { AsyncFunctionBody }\\n//\\n// we must follow such process:\\n//\\n// 1. parse async keyword\\n// 2. parse function keyword\\n// 3. parse bindingIdentifier <= inherit current parameters: [?Await]\\n// 4. enter new stack with (PARAM_AWAIT)\\n// 5. parse formal parameters <= must have [Await] parameter [+Await]\\n// 6. parse function body\\n// 7. exit current stack\\n\\nexport type ParamKind = number;\\n\\n// todo(flow->ts) - check if more granular type can be used,\\n//  type below is not good because things like PARAM_AWAIT|PARAM_YIELD are not included\\n// export type ParamKind =\\n//   | typeof PARAM\\n//   | typeof PARAM_AWAIT\\n//   | typeof PARAM_IN\\n//   | typeof PARAM_RETURN\\n//   | typeof PARAM_YIELD;\\n\\nexport default class ProductionParameterHandler {\\n  stacks: Array<number> = [];\\n  enter(flags: number) {\\n    this.stacks.push(flags);\\n  }\\n\\n  exit() {\\n    this.stacks.pop();\\n  }\\n\\n  currentFlags(): number {\\n    return this.stacks[this.stacks.length - 1];\\n  }\\n\\n  get hasAwait(): boolean {\\n    return (this.currentFlags() & PARAM_AWAIT) > 0;\\n  }\\n\\n  get hasYield(): boolean {\\n    return (this.currentFlags() & PARAM_YIELD) > 0;\\n  }\\n\\n  get hasReturn(): boolean {\\n    return (this.currentFlags() & PARAM_RETURN) > 0;\\n  }\\n\\n  get hasIn(): boolean {\\n    return (this.currentFlags() & PARAM_IN) > 0;\\n  }\\n}\\n\\nexport function functionFlags(\\n  isAsync: boolean,\\n  isGenerator: boolean,\\n): ParamKind {\\n  return (isAsync ? PARAM_AWAIT : 0) | (isGenerator ? PARAM_YIELD : 0);\\n}\\n\",\"import { type Position } from \\\"../util/location\\\";\\nimport {\\n  tokenIsLiteralPropertyName,\\n  tt,\\n  type TokenType,\\n} from \\\"../tokenizer/types\\\";\\nimport Tokenizer from \\\"../tokenizer\\\";\\nimport type State from \\\"../tokenizer/state\\\";\\nimport type { EstreePropertyDefinition, Node, ObjectProperty } from \\\"../types\\\";\\nimport { lineBreak, skipWhiteSpaceToLineBreak } from \\\"../util/whitespace\\\";\\nimport { isIdentifierChar } from \\\"../util/identifier\\\";\\nimport ClassScopeHandler from \\\"../util/class-scope\\\";\\nimport ExpressionScopeHandler from \\\"../util/expression-scope\\\";\\nimport { SCOPE_PROGRAM } from \\\"../util/scopeflags\\\";\\nimport ProductionParameterHandler, {\\n  PARAM_AWAIT,\\n  PARAM,\\n} from \\\"../util/production-parameter\\\";\\nimport {\\n  Errors,\\n  type ParseError,\\n  type ParseErrorConstructor,\\n} from \\\"../parse-error\\\";\\nimport type Parser from \\\".\\\";\\n\\nimport type ScopeHandler from \\\"../util/scope\\\";\\n\\ntype TryParse<Node, Error, Thrown, Aborted, FailState> = {\\n  node: Node;\\n  error: Error;\\n  thrown: Thrown;\\n  aborted: Aborted;\\n  failState: FailState;\\n};\\n\\n// ## Parser utilities\\n\\nexport default abstract class UtilParser extends Tokenizer {\\n  // Forward-declaration: defined in parser/index.js\\n  abstract getScopeHandler(): { new (...args: any): ScopeHandler };\\n\\n  addExtra(\\n    node: Partial<Node>,\\n    key: string,\\n    value: any,\\n    enumerable: boolean = true,\\n  ): void {\\n    if (!node) return;\\n\\n    const extra = (node.extra = node.extra || {});\\n    if (enumerable) {\\n      extra[key] = value;\\n    } else {\\n      Object.defineProperty(extra, key, { enumerable, value });\\n    }\\n  }\\n\\n  // Tests whether parsed token is a contextual keyword.\\n\\n  isContextual(token: TokenType): boolean {\\n    return this.state.type === token && !this.state.containsEsc;\\n  }\\n\\n  isUnparsedContextual(nameStart: number, name: string): boolean {\\n    const nameEnd = nameStart + name.length;\\n    if (this.input.slice(nameStart, nameEnd) === name) {\\n      const nextCh = this.input.charCodeAt(nameEnd);\\n      return !(\\n        isIdentifierChar(nextCh) ||\\n        // check if `nextCh is between 0xd800 - 0xdbff,\\n        // if `nextCh` is NaN, `NaN & 0xfc00` is 0, the function\\n        // returns true\\n        (nextCh & 0xfc00) === 0xd800\\n      );\\n    }\\n    return false;\\n  }\\n\\n  isLookaheadContextual(name: string): boolean {\\n    const next = this.nextTokenStart();\\n    return this.isUnparsedContextual(next, name);\\n  }\\n\\n  // Consumes contextual keyword if possible.\\n\\n  eatContextual(token: TokenType): boolean {\\n    if (this.isContextual(token)) {\\n      this.next();\\n      return true;\\n    }\\n    return false;\\n  }\\n\\n  // Asserts that following token is given contextual keyword.\\n\\n  expectContextual(\\n    token: TokenType,\\n    toParseError?: ParseErrorConstructor<any>,\\n  ): void {\\n    if (!this.eatContextual(token)) {\\n      if (toParseError != null) {\\n        throw this.raise(toParseError, { at: this.state.startLoc });\\n      }\\n      this.unexpected(null, token);\\n    }\\n  }\\n\\n  // Test whether a semicolon can be inserted at the current position.\\n\\n  canInsertSemicolon(): boolean {\\n    return (\\n      this.match(tt.eof) ||\\n      this.match(tt.braceR) ||\\n      this.hasPrecedingLineBreak()\\n    );\\n  }\\n\\n  hasPrecedingLineBreak(): boolean {\\n    return lineBreak.test(\\n      this.input.slice(this.state.lastTokEndLoc.index, this.state.start),\\n    );\\n  }\\n\\n  hasFollowingLineBreak(): boolean {\\n    skipWhiteSpaceToLineBreak.lastIndex = this.state.end;\\n    return skipWhiteSpaceToLineBreak.test(this.input);\\n  }\\n\\n  isLineTerminator(): boolean {\\n    return this.eat(tt.semi) || this.canInsertSemicolon();\\n  }\\n\\n  // Consume a semicolon, or, failing that, see if we are allowed to\\n  // pretend that there is a semicolon at this position.\\n\\n  semicolon(allowAsi: boolean = true): void {\\n    if (allowAsi ? this.isLineTerminator() : this.eat(tt.semi)) return;\\n    this.raise(Errors.MissingSemicolon, { at: this.state.lastTokEndLoc });\\n  }\\n\\n  // Expect a token of a given type. If found, consume it, otherwise,\\n  // raise an unexpected token error at given pos.\\n\\n  expect(type: TokenType, loc?: Position | null): void {\\n    this.eat(type) || this.unexpected(loc, type);\\n  }\\n\\n  // tryParse will clone parser state.\\n  // It is expensive and should be used with cautions\\n  tryParse<T extends Node | ReadonlyArray<Node>>(\\n    fn: (abort: (node?: T) => never) => T,\\n    oldState: State = this.state.clone(),\\n  ):\\n    | TryParse<T, null, false, false, null>\\n    | TryParse<T | null, ParseError<any>, boolean, false, State>\\n    | TryParse<T | null, null, false, true, State> {\\n    const abortSignal: {\\n      node: T | null;\\n    } = { node: null };\\n    try {\\n      const node = fn((node = null) => {\\n        abortSignal.node = node;\\n        throw abortSignal;\\n      });\\n      if (this.state.errors.length > oldState.errors.length) {\\n        const failState = this.state;\\n        this.state = oldState;\\n        // tokensLength should be preserved during error recovery mode\\n        // since the parser does not halt and will instead parse the\\n        // remaining tokens\\n        this.state.tokensLength = failState.tokensLength;\\n        return {\\n          node,\\n          error: failState.errors[oldState.errors.length],\\n          thrown: false,\\n          aborted: false,\\n          failState,\\n        };\\n      }\\n\\n      return {\\n        node,\\n        error: null,\\n        thrown: false,\\n        aborted: false,\\n        failState: null,\\n      };\\n    } catch (error) {\\n      const failState = this.state;\\n      this.state = oldState;\\n      if (error instanceof SyntaxError) {\\n        // @ts-expect-error casting general syntax error to parse error\\n        return { node: null, error, thrown: true, aborted: false, failState };\\n      }\\n      if (error === abortSignal) {\\n        return {\\n          node: abortSignal.node,\\n          error: null,\\n          thrown: false,\\n          aborted: true,\\n          failState,\\n        };\\n      }\\n\\n      throw error;\\n    }\\n  }\\n\\n  checkExpressionErrors(\\n    refExpressionErrors: ExpressionErrors | undefined | null,\\n    andThrow: boolean,\\n  ) {\\n    if (!refExpressionErrors) return false;\\n    const {\\n      shorthandAssignLoc,\\n      doubleProtoLoc,\\n      privateKeyLoc,\\n      optionalParametersLoc,\\n    } = refExpressionErrors;\\n\\n    const hasErrors =\\n      !!shorthandAssignLoc ||\\n      !!doubleProtoLoc ||\\n      !!optionalParametersLoc ||\\n      !!privateKeyLoc;\\n\\n    if (!andThrow) {\\n      return hasErrors;\\n    }\\n\\n    if (shorthandAssignLoc != null) {\\n      this.raise(Errors.InvalidCoverInitializedName, {\\n        at: shorthandAssignLoc,\\n      });\\n    }\\n\\n    if (doubleProtoLoc != null) {\\n      this.raise(Errors.DuplicateProto, { at: doubleProtoLoc });\\n    }\\n\\n    if (privateKeyLoc != null) {\\n      this.raise(Errors.UnexpectedPrivateField, { at: privateKeyLoc });\\n    }\\n\\n    if (optionalParametersLoc != null) {\\n      this.unexpected(optionalParametersLoc);\\n    }\\n  }\\n\\n  /**\\n   * Test if current token is a literal property name\\n   * https://tc39.es/ecma262/#prod-LiteralPropertyName\\n   * LiteralPropertyName:\\n   *   IdentifierName\\n   *   StringLiteral\\n   *   NumericLiteral\\n   *   BigIntLiteral\\n   */\\n  isLiteralPropertyName(): boolean {\\n    return tokenIsLiteralPropertyName(this.state.type);\\n  }\\n\\n  /**\\n   * Test if given node is a PrivateName\\n   * will be overridden in ESTree plugin\\n   */\\n  isPrivateName(node: Node): boolean {\\n    return node.type === \\\"PrivateName\\\";\\n  }\\n\\n  /**\\n   * Return the string value of a given private name\\n   * WITHOUT `#`\\n   * @see {@link https://tc39.es/ecma262/#sec-static-semantics-stringvalue}\\n   */\\n  getPrivateNameSV(node: Node): string {\\n    return node.id.name;\\n  }\\n\\n  /**\\n   * Return whether the given node is a member/optional chain that\\n   * contains a private name as its property\\n   * It is overridden in ESTree plugin\\n   */\\n  hasPropertyAsPrivateName(node: Node): boolean {\\n    return (\\n      (node.type === \\\"MemberExpression\\\" ||\\n        node.type === \\\"OptionalMemberExpression\\\") &&\\n      this.isPrivateName(node.property)\\n    );\\n  }\\n\\n  isObjectProperty(\\n    node: Node,\\n  ): node is ObjectProperty | EstreePropertyDefinition {\\n    return node.type === \\\"ObjectProperty\\\";\\n  }\\n\\n  isObjectMethod(node: Node): boolean {\\n    return node.type === \\\"ObjectMethod\\\";\\n  }\\n\\n  initializeScopes(\\n    this: Parser,\\n    inModule: boolean = this.options.sourceType === \\\"module\\\",\\n  ): () => void {\\n    // Initialize state\\n    const oldLabels = this.state.labels;\\n    this.state.labels = [];\\n\\n    const oldExportedIdentifiers = this.exportedIdentifiers;\\n    this.exportedIdentifiers = new Set();\\n\\n    // initialize scopes\\n    const oldInModule = this.inModule;\\n    this.inModule = inModule;\\n\\n    const oldScope = this.scope;\\n    const ScopeHandler = this.getScopeHandler();\\n    this.scope = new ScopeHandler(this, inModule);\\n\\n    const oldProdParam = this.prodParam;\\n    this.prodParam = new ProductionParameterHandler();\\n\\n    const oldClassScope = this.classScope;\\n    this.classScope = new ClassScopeHandler(this);\\n\\n    const oldExpressionScope = this.expressionScope;\\n    this.expressionScope = new ExpressionScopeHandler(this);\\n\\n    return () => {\\n      // Revert state\\n      this.state.labels = oldLabels;\\n      this.exportedIdentifiers = oldExportedIdentifiers;\\n\\n      // Revert scopes\\n      this.inModule = oldInModule;\\n      this.scope = oldScope;\\n      this.prodParam = oldProdParam;\\n      this.classScope = oldClassScope;\\n      this.expressionScope = oldExpressionScope;\\n    };\\n  }\\n\\n  enterInitialScopes() {\\n    let paramFlags = PARAM;\\n    if (this.inModule) {\\n      paramFlags |= PARAM_AWAIT;\\n    }\\n    this.scope.enter(SCOPE_PROGRAM);\\n    this.prodParam.enter(paramFlags);\\n  }\\n\\n  checkDestructuringPrivate(refExpressionErrors: ExpressionErrors) {\\n    const { privateKeyLoc } = refExpressionErrors;\\n    if (privateKeyLoc !== null) {\\n      this.expectPlugin(\\\"destructuringPrivate\\\", privateKeyLoc);\\n    }\\n  }\\n}\\n\\n/**\\n * The ExpressionErrors is a context struct used to track ambiguous patterns\\n * When we are sure the parsed pattern is a RHS, which means it is not a pattern,\\n * we will throw on this position on invalid assign syntax, otherwise it will be reset to -1\\n *\\n * Types of ExpressionErrors:\\n *\\n * - **shorthandAssignLoc**: track initializer `=` position\\n * - **doubleProtoLoc**: track the duplicate `__proto__` key position\\n * - **privateKey**: track private key `#p` position\\n * - **optionalParametersLoc**: track the optional parameter (`?`).\\n * It's only used by typescript and flow plugins\\n */\\nexport class ExpressionErrors {\\n  shorthandAssignLoc: Position | undefined | null = null;\\n  doubleProtoLoc: Position | undefined | null = null;\\n  privateKeyLoc: Position | undefined | null = null;\\n  optionalParametersLoc: Position | undefined | null = null;\\n}\\n\",\"import type Parser from \\\"./index\\\";\\nimport UtilParser from \\\"./util\\\";\\nimport { SourceLocation, type Position } from \\\"../util/location\\\";\\nimport type { Comment, Node as NodeType, NodeBase } from \\\"../types\\\";\\n\\n// Start an AST node, attaching a start offset.\\n\\nclass Node implements NodeBase {\\n  constructor(parser: Parser, pos: number, loc: Position) {\\n    this.start = pos;\\n    this.end = 0;\\n    this.loc = new SourceLocation(loc);\\n    if (parser?.options.ranges) this.range = [pos, 0];\\n    if (parser?.filename) this.loc.filename = parser.filename;\\n  }\\n\\n  type: string = \\\"\\\";\\n  declare start: number;\\n  declare end: number;\\n  declare loc: SourceLocation;\\n  declare range: [number, number];\\n  declare leadingComments: Array<Comment>;\\n  declare trailingComments: Array<Comment>;\\n  declare innerComments: Array<Comment>;\\n  declare extra: {\\n    [key: string]: any;\\n  };\\n}\\nconst NodePrototype = Node.prototype;\\n\\nif (!process.env.BABEL_8_BREAKING) {\\n  // @ts-expect-error __clone is not defined in Node prototype\\n  NodePrototype.__clone = function (): Node {\\n    const newNode = new Node(undefined, this.start, this.loc.start);\\n    const keys = Object.keys(this) as (keyof Node)[];\\n    for (let i = 0, length = keys.length; i < length; i++) {\\n      const key = keys[i];\\n      // Do not clone comments that are already attached to the node\\n      if (\\n        key !== \\\"leadingComments\\\" &&\\n        key !== \\\"trailingComments\\\" &&\\n        key !== \\\"innerComments\\\"\\n      ) {\\n        // @ts-expect-error cloning this to newNode\\n        newNode[key] = this[key];\\n      }\\n    }\\n\\n    return newNode;\\n  };\\n}\\n\\nfunction clonePlaceholder(node: any): any {\\n  return cloneIdentifier(node);\\n}\\n\\nexport function cloneIdentifier(node: any): any {\\n  // We don't need to clone `typeAnnotations` and `optional`: because\\n  // cloneIdentifier is only used in object shorthand and named import/export.\\n  // Neither of them allow type annotations after the identifier or optional identifier\\n  const { type, start, end, loc, range, extra, name } = node;\\n  const cloned = Object.create(NodePrototype);\\n  cloned.type = type;\\n  cloned.start = start;\\n  cloned.end = end;\\n  cloned.loc = loc;\\n  cloned.range = range;\\n  cloned.extra = extra;\\n  cloned.name = name;\\n  if (type === \\\"Placeholder\\\") {\\n    cloned.expectedNode = node.expectedNode;\\n  }\\n  return cloned;\\n}\\n\\nexport function cloneStringLiteral(node: any): any {\\n  const { type, start, end, loc, range, extra } = node;\\n  if (type === \\\"Placeholder\\\") {\\n    return clonePlaceholder(node);\\n  }\\n  const cloned = Object.create(NodePrototype);\\n  cloned.type = type;\\n  cloned.start = start;\\n  cloned.end = end;\\n  cloned.loc = loc;\\n  cloned.range = range;\\n  if (node.raw !== undefined) {\\n    // estree set node.raw instead of node.extra\\n    cloned.raw = node.raw;\\n  } else {\\n    cloned.extra = extra;\\n  }\\n  cloned.value = node.value;\\n  return cloned;\\n}\\n\\nexport type Undone<T extends NodeType> = Omit<T, \\\"type\\\">;\\n\\nexport abstract class NodeUtils extends UtilParser {\\n  startNode<T extends NodeType>(): Undone<T> {\\n    // @ts-expect-error cast Node as Undone<T>\\n    return new Node(this, this.state.start, this.state.startLoc);\\n  }\\n\\n  startNodeAt<T extends NodeType>(loc: Position): Undone<T> {\\n    // @ts-expect-error cast Node as Undone<T>\\n    return new Node(this, loc.index, loc);\\n  }\\n\\n  /** Start a new node with a previous node's location. */\\n  startNodeAtNode<T extends NodeType>(type: Undone<NodeType>): Undone<T> {\\n    return this.startNodeAt(type.loc.start);\\n  }\\n\\n  // Finish an AST node, adding `type` and `end` properties.\\n\\n  finishNode<T extends NodeType>(node: Undone<T>, type: T[\\\"type\\\"]): T {\\n    return this.finishNodeAt(node, type, this.state.lastTokEndLoc);\\n  }\\n\\n  // Finish node at given position\\n\\n  finishNodeAt<T extends NodeType>(\\n    node: Omit<T, \\\"type\\\">,\\n    type: T[\\\"type\\\"],\\n    endLoc: Position,\\n  ): T {\\n    if (process.env.NODE_ENV !== \\\"production\\\" && node.end > 0) {\\n      throw new Error(\\n        \\\"Do not call finishNode*() twice on the same node.\\\" +\\n          \\\" Instead use resetEndLocation() or change type directly.\\\",\\n      );\\n    }\\n    // @ts-expect-error migrate to Babel types AST typings\\n    node.type = type;\\n    // @ts-expect-error migrate to Babel types AST typings\\n    node.end = endLoc.index;\\n    node.loc.end = endLoc;\\n    if (this.options.ranges) node.range[1] = endLoc.index;\\n    if (this.options.attachComment) this.processComment(node as T);\\n    return node as T;\\n  }\\n\\n  resetStartLocation(node: NodeBase, startLoc: Position): void {\\n    node.start = startLoc.index;\\n    node.loc.start = startLoc;\\n    if (this.options.ranges) node.range[0] = startLoc.index;\\n  }\\n\\n  resetEndLocation(\\n    node: NodeBase,\\n    endLoc: Position = this.state.lastTokEndLoc,\\n  ): void {\\n    node.end = endLoc.index;\\n    node.loc.end = endLoc;\\n    if (this.options.ranges) node.range[1] = endLoc.index;\\n  }\\n\\n  /**\\n   * Reset the start location of node to the start location of locationNode\\n   */\\n  resetStartLocationFromNode(node: NodeBase, locationNode: NodeBase): void {\\n    this.resetStartLocation(node, locationNode.loc.start);\\n  }\\n}\\n\",\"/*:: declare var invariant; */\\n\\nimport type Parser from \\\"../../parser\\\";\\nimport {\\n  tokenIsIdentifier,\\n  tokenIsKeyword,\\n  tokenIsKeywordOrIdentifier,\\n  tokenIsLiteralPropertyName,\\n  tokenLabelName,\\n  tt,\\n  type TokenType,\\n  tokenIsFlowInterfaceOrTypeOrOpaque,\\n} from \\\"../../tokenizer/types\\\";\\nimport type * as N from \\\"../../types\\\";\\nimport type { Position } from \\\"../../util/location\\\";\\nimport { types as tc } from \\\"../../tokenizer/context\\\";\\nimport * as charCodes from \\\"charcodes\\\";\\nimport { isIteratorStart } from \\\"../../util/identifier\\\";\\nimport FlowScopeHandler from \\\"./scope\\\";\\nimport {\\n  BIND_LEXICAL,\\n  BIND_VAR,\\n  BIND_FUNCTION,\\n  BIND_FLOW_DECLARE_FN,\\n  SCOPE_ARROW,\\n  SCOPE_FUNCTION,\\n  SCOPE_OTHER,\\n  type BindingTypes,\\n} from \\\"../../util/scopeflags\\\";\\nimport type { ExpressionErrors } from \\\"../../parser/util\\\";\\nimport type { ParseStatementFlag } from \\\"../../parser/statement\\\";\\nimport { Errors, ParseErrorEnum } from \\\"../../parse-error\\\";\\nimport { cloneIdentifier, type Undone } from \\\"../../parser/node\\\";\\n\\nconst reservedTypes = new Set([\\n  \\\"_\\\",\\n  \\\"any\\\",\\n  \\\"bool\\\",\\n  \\\"boolean\\\",\\n  \\\"empty\\\",\\n  \\\"extends\\\",\\n  \\\"false\\\",\\n  \\\"interface\\\",\\n  \\\"mixed\\\",\\n  \\\"null\\\",\\n  \\\"number\\\",\\n  \\\"static\\\",\\n  \\\"string\\\",\\n  \\\"true\\\",\\n  \\\"typeof\\\",\\n  \\\"void\\\",\\n]);\\n\\n/* eslint sort-keys: \\\"error\\\" */\\n// The Errors key follows https://github.com/facebook/flow/blob/master/src/parser/parse_error.ml unless it does not exist\\nconst FlowErrors = ParseErrorEnum`flow`({\\n  AmbiguousConditionalArrow:\\n    \\\"Ambiguous expression: wrap the arrow functions in parentheses to disambiguate.\\\",\\n  AmbiguousDeclareModuleKind:\\n    \\\"Found both `declare module.exports` and `declare export` in the same module. Modules can only have 1 since they are either an ES module or they are a CommonJS module.\\\",\\n  // TODO: When we get proper string enums in typescript make this ReservedType.\\n  // Not really worth it to do the whole $Values dance with reservedTypes set.\\n  AssignReservedType: ({ reservedType }: { reservedType: string }) =>\\n    `Cannot overwrite reserved type ${reservedType}.`,\\n  DeclareClassElement:\\n    \\\"The `declare` modifier can only appear on class fields.\\\",\\n  DeclareClassFieldInitializer:\\n    \\\"Initializers are not allowed in fields with the `declare` modifier.\\\",\\n  DuplicateDeclareModuleExports:\\n    \\\"Duplicate `declare module.exports` statement.\\\",\\n  EnumBooleanMemberNotInitialized: ({\\n    memberName,\\n    enumName,\\n  }: {\\n    memberName: string;\\n    enumName: string;\\n  }) =>\\n    `Boolean enum members need to be initialized. Use either \\\\`${memberName} = true,\\\\` or \\\\`${memberName} = false,\\\\` in enum \\\\`${enumName}\\\\`.`,\\n  EnumDuplicateMemberName: ({\\n    memberName,\\n    enumName,\\n  }: {\\n    memberName: string;\\n    enumName: string;\\n  }) =>\\n    `Enum member names need to be unique, but the name \\\\`${memberName}\\\\` has already been used before in enum \\\\`${enumName}\\\\`.`,\\n  EnumInconsistentMemberValues: ({ enumName }: { enumName: string }) =>\\n    `Enum \\\\`${enumName}\\\\` has inconsistent member initializers. Either use no initializers, or consistently use literals (either booleans, numbers, or strings) for all member initializers.`,\\n  EnumInvalidExplicitType: ({\\n    invalidEnumType,\\n    enumName,\\n  }: {\\n    invalidEnumType: string;\\n    enumName: string;\\n  }) =>\\n    `Enum type \\\\`${invalidEnumType}\\\\` is not valid. Use one of \\\\`boolean\\\\`, \\\\`number\\\\`, \\\\`string\\\\`, or \\\\`symbol\\\\` in enum \\\\`${enumName}\\\\`.`,\\n  EnumInvalidExplicitTypeUnknownSupplied: ({\\n    enumName,\\n  }: {\\n    enumName: string;\\n  }) =>\\n    `Supplied enum type is not valid. Use one of \\\\`boolean\\\\`, \\\\`number\\\\`, \\\\`string\\\\`, or \\\\`symbol\\\\` in enum \\\\`${enumName}\\\\`.`,\\n\\n  // TODO: When moving to typescript, we should either have each of the\\n  // following errors only accept the specific strings they want:\\n  //\\n  // ...PrimaryType: explicitType: \\\"string\\\" | \\\"number\\\" | \\\"boolean\\\"\\n  // ...SymbolType: explicitType: \\\"symbol\\\"\\n  // ...UnknownType: explicitType: null\\n  //\\n  // Or, alternatively, merge these three errors together into one\\n  // `EnumInvalidMemberInitializer` error that can accept `EnumExplicitType`\\n  // without alteration, and then just have its message change based on the\\n  // explicitType.\\n  EnumInvalidMemberInitializerPrimaryType: ({\\n    enumName,\\n    memberName,\\n    explicitType,\\n  }: {\\n    enumName: string;\\n    memberName: string;\\n    explicitType: EnumExplicitType;\\n  }) =>\\n    `Enum \\\\`${enumName}\\\\` has type \\\\`${explicitType}\\\\`, so the initializer of \\\\`${memberName}\\\\` needs to be a ${explicitType} literal.`,\\n  EnumInvalidMemberInitializerSymbolType: ({\\n    enumName,\\n    memberName,\\n  }: {\\n    enumName: string;\\n    memberName: string;\\n    explicitType: EnumExplicitType;\\n  }) =>\\n    `Symbol enum members cannot be initialized. Use \\\\`${memberName},\\\\` in enum \\\\`${enumName}\\\\`.`,\\n  EnumInvalidMemberInitializerUnknownType: ({\\n    enumName,\\n    memberName,\\n  }: {\\n    enumName: string;\\n    memberName: string;\\n    explicitType: EnumExplicitType;\\n  }) =>\\n    `The enum member initializer for \\\\`${memberName}\\\\` needs to be a literal (either a boolean, number, or string) in enum \\\\`${enumName}\\\\`.`,\\n  EnumInvalidMemberName: ({\\n    enumName,\\n    memberName,\\n    suggestion,\\n  }: {\\n    enumName: string;\\n    memberName: string;\\n    suggestion: string;\\n  }) =>\\n    `Enum member names cannot start with lowercase 'a' through 'z'. Instead of using \\\\`${memberName}\\\\`, consider using \\\\`${suggestion}\\\\`, in enum \\\\`${enumName}\\\\`.`,\\n  EnumNumberMemberNotInitialized: ({\\n    enumName,\\n    memberName,\\n  }: {\\n    enumName: string;\\n    memberName: string;\\n  }) =>\\n    `Number enum members need to be initialized, e.g. \\\\`${memberName} = 1\\\\` in enum \\\\`${enumName}\\\\`.`,\\n  EnumStringMemberInconsistentlyInitailized: ({\\n    enumName,\\n  }: {\\n    enumName: string;\\n  }) =>\\n    `String enum members need to consistently either all use initializers, or use no initializers, in enum \\\\`${enumName}\\\\`.`,\\n  GetterMayNotHaveThisParam: \\\"A getter cannot have a `this` parameter.\\\",\\n  ImportReflectionHasImportType:\\n    \\\"An `import module` declaration can not use `type` or `typeof` keyword.\\\",\\n  ImportTypeShorthandOnlyInPureImport:\\n    \\\"The `type` and `typeof` keywords on named imports can only be used on regular `import` statements. It cannot be used with `import type` or `import typeof` statements.\\\",\\n  InexactInsideExact:\\n    \\\"Explicit inexact syntax cannot appear inside an explicit exact object type.\\\",\\n  InexactInsideNonObject:\\n    \\\"Explicit inexact syntax cannot appear in class or interface definitions.\\\",\\n  InexactVariance: \\\"Explicit inexact syntax cannot have variance.\\\",\\n  InvalidNonTypeImportInDeclareModule:\\n    \\\"Imports within a `declare module` body must always be `import type` or `import typeof`.\\\",\\n  MissingTypeParamDefault:\\n    \\\"Type parameter declaration needs a default, since a preceding type parameter declaration has a default.\\\",\\n  NestedDeclareModule:\\n    \\\"`declare module` cannot be used inside another `declare module`.\\\",\\n  NestedFlowComment: \\\"Cannot have a flow comment inside another flow comment.\\\",\\n  PatternIsOptional: {\\n    message:\\n      \\\"A binding pattern parameter cannot be optional in an implementation signature.\\\",\\n    // For consistency in TypeScript and Flow error codes\\n    ...(!process.env.BABEL_8_BREAKING\\n      ? { reasonCode: \\\"OptionalBindingPattern\\\" }\\n      : {}),\\n  },\\n  SetterMayNotHaveThisParam: \\\"A setter cannot have a `this` parameter.\\\",\\n  SpreadVariance: \\\"Spread properties cannot have variance.\\\",\\n  ThisParamAnnotationRequired:\\n    \\\"A type annotation is required for the `this` parameter.\\\",\\n  ThisParamBannedInConstructor:\\n    \\\"Constructors cannot have a `this` parameter; constructors don't bind `this` like other functions.\\\",\\n  ThisParamMayNotBeOptional: \\\"The `this` parameter cannot be optional.\\\",\\n  ThisParamMustBeFirst:\\n    \\\"The `this` parameter must be the first function parameter.\\\",\\n  ThisParamNoDefault: \\\"The `this` parameter may not have a default value.\\\",\\n  TypeBeforeInitializer:\\n    \\\"Type annotations must come before default assignments, e.g. instead of `age = 25: number` use `age: number = 25`.\\\",\\n  TypeCastInPattern:\\n    \\\"The type cast expression is expected to be wrapped with parenthesis.\\\",\\n  UnexpectedExplicitInexactInObject:\\n    \\\"Explicit inexact syntax must appear at the end of an inexact object.\\\",\\n  UnexpectedReservedType: ({ reservedType }: { reservedType: string }) =>\\n    `Unexpected reserved type ${reservedType}.`,\\n  UnexpectedReservedUnderscore:\\n    \\\"`_` is only allowed as a type argument to call or new.\\\",\\n  UnexpectedSpaceBetweenModuloChecks:\\n    \\\"Spaces between `%` and `checks` are not allowed here.\\\",\\n  UnexpectedSpreadType:\\n    \\\"Spread operator cannot appear in class or interface definitions.\\\",\\n  UnexpectedSubtractionOperand:\\n    'Unexpected token, expected \\\"number\\\" or \\\"bigint\\\".',\\n  UnexpectedTokenAfterTypeParameter:\\n    \\\"Expected an arrow function after this type parameter declaration.\\\",\\n  UnexpectedTypeParameterBeforeAsyncArrowFunction:\\n    \\\"Type parameters must come after the async keyword, e.g. instead of `<T> async () => {}`, use `async <T>() => {}`.\\\",\\n  UnsupportedDeclareExportKind: ({\\n    unsupportedExportKind,\\n    suggestion,\\n  }: {\\n    unsupportedExportKind: string;\\n    suggestion: string;\\n  }) =>\\n    `\\\\`declare export ${unsupportedExportKind}\\\\` is not supported. Use \\\\`${suggestion}\\\\` instead.`,\\n  UnsupportedStatementInDeclareModule:\\n    \\\"Only declares and type imports are allowed inside declare module.\\\",\\n  UnterminatedFlowComment: \\\"Unterminated flow-comment.\\\",\\n});\\n/* eslint-disable sort-keys */\\n\\nfunction isEsModuleType(bodyElement: N.Node): boolean {\\n  return (\\n    bodyElement.type === \\\"DeclareExportAllDeclaration\\\" ||\\n    (bodyElement.type === \\\"DeclareExportDeclaration\\\" &&\\n      (!bodyElement.declaration ||\\n        (bodyElement.declaration.type !== \\\"TypeAlias\\\" &&\\n          bodyElement.declaration.type !== \\\"InterfaceDeclaration\\\")))\\n  );\\n}\\n\\nfunction hasTypeImportKind(node: N.Node): boolean {\\n  return node.importKind === \\\"type\\\" || node.importKind === \\\"typeof\\\";\\n}\\n\\nfunction isMaybeDefaultImport(type: TokenType): boolean {\\n  return tokenIsKeywordOrIdentifier(type) && type !== tt._from;\\n}\\n\\nconst exportSuggestions = {\\n  const: \\\"declare export var\\\",\\n  let: \\\"declare export var\\\",\\n  type: \\\"export type\\\",\\n  interface: \\\"export interface\\\",\\n};\\n\\n// Like Array#filter, but returns a tuple [ acceptedElements, discardedElements ]\\nfunction partition<T>(\\n  list: T[],\\n  test: (c: T, b: number, a: T[]) => boolean | undefined | null,\\n): [T[], T[]] {\\n  const list1: T[] = [];\\n  const list2: T[] = [];\\n  for (let i = 0; i < list.length; i++) {\\n    (test(list[i], i, list) ? list1 : list2).push(list[i]);\\n  }\\n  return [list1, list2];\\n}\\n\\nconst FLOW_PRAGMA_REGEX = /\\\\*?\\\\s*@((?:no)?flow)\\\\b/;\\n\\n// Flow enums types\\ntype EnumExplicitType = null | \\\"boolean\\\" | \\\"number\\\" | \\\"string\\\" | \\\"symbol\\\";\\n\\ntype EnumContext = {\\n  enumName: string;\\n  explicitType: EnumExplicitType;\\n  memberName: string;\\n};\\n\\ntype EnumMemberInit =\\n  | {\\n      type: \\\"number\\\";\\n      loc: Position;\\n      value: N.Node;\\n    }\\n  | {\\n      type: \\\"string\\\";\\n      loc: Position;\\n      value: N.Node;\\n    }\\n  | {\\n      type: \\\"boolean\\\";\\n      loc: Position;\\n      value: N.Node;\\n    }\\n  | {\\n      type: \\\"invalid\\\";\\n      loc: Position;\\n    }\\n  | {\\n      type: \\\"none\\\";\\n      loc: Position;\\n    };\\n\\nexport default (superClass: typeof Parser) =>\\n  class FlowParserMixin extends superClass implements Parser {\\n    // The value of the @flow/@noflow pragma. Initially undefined, transitions\\n    // to \\\"@flow\\\" or \\\"@noflow\\\" if we see a pragma. Transitions to null if we are\\n    // past the initial comment.\\n    flowPragma: void | null | \\\"flow\\\" | \\\"noflow\\\" = undefined;\\n\\n    getScopeHandler(): {\\n      new (...args: any): FlowScopeHandler;\\n    } {\\n      return FlowScopeHandler;\\n    }\\n\\n    shouldParseTypes(): boolean {\\n      return this.getPluginOption(\\\"flow\\\", \\\"all\\\") || this.flowPragma === \\\"flow\\\";\\n    }\\n\\n    shouldParseEnums(): boolean {\\n      return !!this.getPluginOption(\\\"flow\\\", \\\"enums\\\");\\n    }\\n\\n    finishToken(type: TokenType, val: any): void {\\n      if (\\n        type !== tt.string &&\\n        type !== tt.semi &&\\n        type !== tt.interpreterDirective\\n      ) {\\n        if (this.flowPragma === undefined) {\\n          this.flowPragma = null;\\n        }\\n      }\\n      super.finishToken(type, val);\\n    }\\n\\n    addComment(comment: N.Comment): void {\\n      if (this.flowPragma === undefined) {\\n        // Try to parse a flow pragma.\\n        const matches = FLOW_PRAGMA_REGEX.exec(comment.value);\\n        if (!matches) {\\n          // do nothing\\n        } else if (matches[1] === \\\"flow\\\") {\\n          this.flowPragma = \\\"flow\\\";\\n        } else if (matches[1] === \\\"noflow\\\") {\\n          this.flowPragma = \\\"noflow\\\";\\n        } else {\\n          throw new Error(\\\"Unexpected flow pragma\\\");\\n        }\\n      }\\n      super.addComment(comment);\\n    }\\n\\n    flowParseTypeInitialiser(tok?: TokenType): N.FlowType {\\n      const oldInType = this.state.inType;\\n      this.state.inType = true;\\n      this.expect(tok || tt.colon);\\n\\n      const type = this.flowParseType();\\n      this.state.inType = oldInType;\\n      return type;\\n    }\\n\\n    flowParsePredicate(): N.FlowPredicate {\\n      const node = this.startNode();\\n      const moduloLoc = this.state.startLoc;\\n      this.next(); // eat `%`\\n      this.expectContextual(tt._checks);\\n      // Force '%' and 'checks' to be adjacent\\n      if (this.state.lastTokStart > moduloLoc.index + 1) {\\n        this.raise(FlowErrors.UnexpectedSpaceBetweenModuloChecks, {\\n          at: moduloLoc,\\n        });\\n      }\\n      if (this.eat(tt.parenL)) {\\n        node.value = super.parseExpression();\\n        this.expect(tt.parenR);\\n        return this.finishNode(node, \\\"DeclaredPredicate\\\");\\n      } else {\\n        return this.finishNode(node, \\\"InferredPredicate\\\");\\n      }\\n    }\\n\\n    flowParseTypeAndPredicateInitialiser(): [\\n      N.FlowType | undefined | null,\\n      N.FlowPredicate | undefined | null,\\n    ] {\\n      const oldInType = this.state.inType;\\n      this.state.inType = true;\\n      this.expect(tt.colon);\\n      let type = null;\\n      let predicate = null;\\n      if (this.match(tt.modulo)) {\\n        this.state.inType = oldInType;\\n        predicate = this.flowParsePredicate();\\n      } else {\\n        type = this.flowParseType();\\n        this.state.inType = oldInType;\\n        if (this.match(tt.modulo)) {\\n          predicate = this.flowParsePredicate();\\n        }\\n      }\\n      return [type, predicate];\\n    }\\n\\n    flowParseDeclareClass(\\n      node: Undone<N.FlowDeclareClass>,\\n    ): N.FlowDeclareClass {\\n      this.next();\\n      this.flowParseInterfaceish(node, /*isClass*/ true);\\n      return this.finishNode(node, \\\"DeclareClass\\\");\\n    }\\n\\n    flowParseDeclareFunction(\\n      node: Undone<N.FlowDeclareFunction>,\\n    ): N.FlowDeclareFunction {\\n      this.next();\\n\\n      const id = (node.id = this.parseIdentifier());\\n\\n      const typeNode = this.startNode();\\n      const typeContainer = this.startNode<N.TypeAnnotation>();\\n\\n      if (this.match(tt.lt)) {\\n        typeNode.typeParameters = this.flowParseTypeParameterDeclaration();\\n      } else {\\n        typeNode.typeParameters = null;\\n      }\\n\\n      this.expect(tt.parenL);\\n      const tmp = this.flowParseFunctionTypeParams();\\n      typeNode.params = tmp.params;\\n      typeNode.rest = tmp.rest;\\n      typeNode.this = tmp._this;\\n      this.expect(tt.parenR);\\n\\n      [typeNode.returnType, node.predicate] =\\n        this.flowParseTypeAndPredicateInitialiser();\\n\\n      typeContainer.typeAnnotation = this.finishNode(\\n        typeNode,\\n        \\\"FunctionTypeAnnotation\\\",\\n      );\\n\\n      id.typeAnnotation = this.finishNode(typeContainer, \\\"TypeAnnotation\\\");\\n\\n      this.resetEndLocation(id);\\n      this.semicolon();\\n\\n      this.scope.declareName(\\n        node.id.name,\\n        BIND_FLOW_DECLARE_FN,\\n        node.id.loc.start,\\n      );\\n\\n      return this.finishNode(node, \\\"DeclareFunction\\\");\\n    }\\n\\n    flowParseDeclare(\\n      node: Undone<N.FlowDeclare>,\\n      insideModule?: boolean,\\n    ): N.FlowDeclare {\\n      if (this.match(tt._class)) {\\n        return this.flowParseDeclareClass(node);\\n      } else if (this.match(tt._function)) {\\n        return this.flowParseDeclareFunction(node);\\n      } else if (this.match(tt._var)) {\\n        return this.flowParseDeclareVariable(node);\\n      } else if (this.eatContextual(tt._module)) {\\n        if (this.match(tt.dot)) {\\n          return this.flowParseDeclareModuleExports(node);\\n        } else {\\n          if (insideModule) {\\n            this.raise(FlowErrors.NestedDeclareModule, {\\n              at: this.state.lastTokStartLoc,\\n            });\\n          }\\n          return this.flowParseDeclareModule(node);\\n        }\\n      } else if (this.isContextual(tt._type)) {\\n        return this.flowParseDeclareTypeAlias(node);\\n      } else if (this.isContextual(tt._opaque)) {\\n        return this.flowParseDeclareOpaqueType(node);\\n      } else if (this.isContextual(tt._interface)) {\\n        return this.flowParseDeclareInterface(node);\\n      } else if (this.match(tt._export)) {\\n        return this.flowParseDeclareExportDeclaration(node, insideModule);\\n      } else {\\n        this.unexpected();\\n      }\\n    }\\n\\n    flowParseDeclareVariable(\\n      node: Undone<N.FlowDeclareVariable>,\\n    ): N.FlowDeclareVariable {\\n      this.next();\\n      node.id = this.flowParseTypeAnnotatableIdentifier(\\n        /*allowPrimitiveOverride*/ true,\\n      );\\n      this.scope.declareName(node.id.name, BIND_VAR, node.id.loc.start);\\n      this.semicolon();\\n      return this.finishNode(node, \\\"DeclareVariable\\\");\\n    }\\n\\n    flowParseDeclareModule(\\n      node: Undone<N.FlowDeclareModule>,\\n    ): N.FlowDeclareModule {\\n      this.scope.enter(SCOPE_OTHER);\\n\\n      if (this.match(tt.string)) {\\n        node.id = super.parseExprAtom();\\n      } else {\\n        node.id = this.parseIdentifier();\\n      }\\n\\n      const bodyNode = (node.body = this.startNode());\\n      // @ts-expect-error refine typings\\n      const body = (bodyNode.body = []);\\n      this.expect(tt.braceL);\\n      while (!this.match(tt.braceR)) {\\n        let bodyNode = this.startNode<N.ImportDeclaration>();\\n\\n        if (this.match(tt._import)) {\\n          this.next();\\n          if (!this.isContextual(tt._type) && !this.match(tt._typeof)) {\\n            this.raise(FlowErrors.InvalidNonTypeImportInDeclareModule, {\\n              at: this.state.lastTokStartLoc,\\n            });\\n          }\\n          super.parseImport(bodyNode);\\n        } else {\\n          this.expectContextual(\\n            tt._declare,\\n            FlowErrors.UnsupportedStatementInDeclareModule,\\n          );\\n          // @ts-expect-error refine typings\\n          bodyNode = this.flowParseDeclare(bodyNode, true);\\n        }\\n\\n        body.push(bodyNode);\\n      }\\n\\n      this.scope.exit();\\n\\n      this.expect(tt.braceR);\\n\\n      this.finishNode(bodyNode, \\\"BlockStatement\\\");\\n\\n      let kind: \\\"CommonJS\\\" | \\\"ES\\\" | null = null;\\n      let hasModuleExport = false;\\n      body.forEach(bodyElement => {\\n        if (isEsModuleType(bodyElement)) {\\n          if (kind === \\\"CommonJS\\\") {\\n            this.raise(FlowErrors.AmbiguousDeclareModuleKind, {\\n              at: bodyElement,\\n            });\\n          }\\n          kind = \\\"ES\\\";\\n        } else if (bodyElement.type === \\\"DeclareModuleExports\\\") {\\n          if (hasModuleExport) {\\n            this.raise(FlowErrors.DuplicateDeclareModuleExports, {\\n              at: bodyElement,\\n            });\\n          }\\n          if (kind === \\\"ES\\\") {\\n            this.raise(FlowErrors.AmbiguousDeclareModuleKind, {\\n              at: bodyElement,\\n            });\\n          }\\n          kind = \\\"CommonJS\\\";\\n          hasModuleExport = true;\\n        }\\n      });\\n\\n      node.kind = kind || \\\"CommonJS\\\";\\n      return this.finishNode(node, \\\"DeclareModule\\\");\\n    }\\n\\n    flowParseDeclareExportDeclaration(\\n      node: Undone<N.FlowDeclareExportDeclaration>,\\n      insideModule?: boolean | null,\\n    ): N.FlowDeclareExportDeclaration {\\n      this.expect(tt._export);\\n\\n      if (this.eat(tt._default)) {\\n        if (this.match(tt._function) || this.match(tt._class)) {\\n          // declare export default class ...\\n          // declare export default function ...\\n          node.declaration = this.flowParseDeclare(this.startNode());\\n        } else {\\n          // declare export default [type];\\n          node.declaration = this.flowParseType();\\n          this.semicolon();\\n        }\\n        node.default = true;\\n\\n        return this.finishNode(node, \\\"DeclareExportDeclaration\\\");\\n      } else {\\n        if (\\n          this.match(tt._const) ||\\n          this.isLet() ||\\n          ((this.isContextual(tt._type) || this.isContextual(tt._interface)) &&\\n            !insideModule)\\n        ) {\\n          const label = this.state.value as\\n            | \\\"const\\\"\\n            | \\\"let\\\"\\n            | \\\"type\\\"\\n            | \\\"interface\\\";\\n          throw this.raise(FlowErrors.UnsupportedDeclareExportKind, {\\n            at: this.state.startLoc,\\n            unsupportedExportKind: label,\\n            suggestion: exportSuggestions[label],\\n          });\\n        }\\n\\n        if (\\n          this.match(tt._var) || // declare export var ...\\n          this.match(tt._function) || // declare export function ...\\n          this.match(tt._class) || // declare export class ...\\n          this.isContextual(tt._opaque) // declare export opaque ..\\n        ) {\\n          node.declaration = this.flowParseDeclare(this.startNode());\\n          node.default = false;\\n\\n          return this.finishNode(node, \\\"DeclareExportDeclaration\\\");\\n        } else if (\\n          this.match(tt.star) || // declare export * from ''\\n          this.match(tt.braceL) || // declare export {} ...\\n          this.isContextual(tt._interface) || // declare export interface ...\\n          this.isContextual(tt._type) || // declare export type ...\\n          this.isContextual(tt._opaque) // declare export opaque type ...\\n        ) {\\n          node = this.parseExport(\\n            node as Undone<N.ExportNamedDeclaration | N.ExportAllDeclaration>,\\n            /* decorators */ null,\\n          );\\n          if (node.type === \\\"ExportNamedDeclaration\\\") {\\n            node.type = \\\"ExportDeclaration\\\";\\n            node.default = false;\\n            delete node.exportKind;\\n          }\\n\\n          node.type = \\\"Declare\\\" + node.type;\\n\\n          return node as N.Node;\\n        }\\n      }\\n\\n      this.unexpected();\\n    }\\n\\n    flowParseDeclareModuleExports(\\n      node: Undone<N.FlowDeclareModuleExports>,\\n    ): N.FlowDeclareModuleExports {\\n      this.next();\\n      this.expectContextual(tt._exports);\\n      node.typeAnnotation = this.flowParseTypeAnnotation();\\n      this.semicolon();\\n\\n      return this.finishNode(node, \\\"DeclareModuleExports\\\");\\n    }\\n\\n    flowParseDeclareTypeAlias(\\n      node: Undone<N.FlowDeclareTypeAlias>,\\n    ): N.FlowDeclareTypeAlias {\\n      this.next();\\n      const finished = this.flowParseTypeAlias(node);\\n      // Don't do finishNode as we don't want to process comments twice\\n      finished.type = \\\"DeclareTypeAlias\\\";\\n      return finished;\\n    }\\n\\n    flowParseDeclareOpaqueType(\\n      node: Undone<N.FlowDeclareOpaqueType>,\\n    ): N.FlowDeclareOpaqueType {\\n      this.next();\\n      const finished = this.flowParseOpaqueType(node, true);\\n      // Don't do finishNode as we don't want to process comments twice\\n      finished.type = \\\"DeclareOpaqueType\\\";\\n      return finished;\\n    }\\n\\n    flowParseDeclareInterface(\\n      node: Undone<N.FlowDeclareInterface>,\\n    ): N.FlowDeclareInterface {\\n      this.next();\\n      this.flowParseInterfaceish(node, /* isClass */ false);\\n      return this.finishNode(node, \\\"DeclareInterface\\\");\\n    }\\n\\n    // Interfaces\\n\\n    flowParseInterfaceish(node: Undone<N.FlowDeclare>, isClass: boolean): void {\\n      node.id = this.flowParseRestrictedIdentifier(\\n        /* liberal */ !isClass,\\n        /* declaration */ true,\\n      );\\n\\n      this.scope.declareName(\\n        node.id.name,\\n        isClass ? BIND_FUNCTION : BIND_LEXICAL,\\n        node.id.loc.start,\\n      );\\n\\n      if (this.match(tt.lt)) {\\n        node.typeParameters = this.flowParseTypeParameterDeclaration();\\n      } else {\\n        node.typeParameters = null;\\n      }\\n\\n      node.extends = [];\\n      node.implements = [];\\n      node.mixins = [];\\n\\n      if (this.eat(tt._extends)) {\\n        do {\\n          node.extends.push(this.flowParseInterfaceExtends());\\n        } while (!isClass && this.eat(tt.comma));\\n      }\\n\\n      if (isClass) {\\n        if (this.eatContextual(tt._mixins)) {\\n          do {\\n            node.mixins.push(this.flowParseInterfaceExtends());\\n          } while (this.eat(tt.comma));\\n        }\\n\\n        if (this.eatContextual(tt._implements)) {\\n          do {\\n            node.implements.push(this.flowParseInterfaceExtends());\\n          } while (this.eat(tt.comma));\\n        }\\n      }\\n\\n      node.body = this.flowParseObjectType({\\n        allowStatic: isClass,\\n        allowExact: false,\\n        allowSpread: false,\\n        allowProto: isClass,\\n        allowInexact: false,\\n      });\\n    }\\n\\n    flowParseInterfaceExtends(): N.FlowInterfaceExtends {\\n      const node = this.startNode();\\n\\n      node.id = this.flowParseQualifiedTypeIdentifier();\\n      if (this.match(tt.lt)) {\\n        node.typeParameters = this.flowParseTypeParameterInstantiation();\\n      } else {\\n        node.typeParameters = null;\\n      }\\n\\n      return this.finishNode(node, \\\"InterfaceExtends\\\");\\n    }\\n\\n    flowParseInterface(node: Undone<N.FlowInterface>): N.FlowInterface {\\n      this.flowParseInterfaceish(node, /* isClass */ false);\\n      return this.finishNode(node, \\\"InterfaceDeclaration\\\");\\n    }\\n\\n    checkNotUnderscore(word: string) {\\n      if (word === \\\"_\\\") {\\n        this.raise(FlowErrors.UnexpectedReservedUnderscore, {\\n          at: this.state.startLoc,\\n        });\\n      }\\n    }\\n\\n    checkReservedType(word: string, startLoc: Position, declaration?: boolean) {\\n      if (!reservedTypes.has(word)) return;\\n\\n      this.raise(\\n        declaration\\n          ? FlowErrors.AssignReservedType\\n          : FlowErrors.UnexpectedReservedType,\\n        {\\n          at: startLoc,\\n          reservedType: word,\\n        },\\n      );\\n    }\\n\\n    flowParseRestrictedIdentifier(\\n      liberal?: boolean,\\n      declaration?: boolean,\\n    ): N.Identifier {\\n      this.checkReservedType(\\n        this.state.value,\\n        this.state.startLoc,\\n        declaration,\\n      );\\n      return this.parseIdentifier(liberal);\\n    }\\n\\n    // Type aliases\\n\\n    flowParseTypeAlias(node: Undone<N.FlowTypeAlias>): N.FlowTypeAlias {\\n      node.id = this.flowParseRestrictedIdentifier(\\n        /* liberal */ false,\\n        /* declaration */ true,\\n      );\\n      this.scope.declareName(node.id.name, BIND_LEXICAL, node.id.loc.start);\\n\\n      if (this.match(tt.lt)) {\\n        node.typeParameters = this.flowParseTypeParameterDeclaration();\\n      } else {\\n        node.typeParameters = null;\\n      }\\n\\n      node.right = this.flowParseTypeInitialiser(tt.eq);\\n      this.semicolon();\\n\\n      return this.finishNode(node, \\\"TypeAlias\\\");\\n    }\\n\\n    flowParseOpaqueType(\\n      node: Undone<N.FlowOpaqueType>,\\n      declare: boolean,\\n    ): N.FlowOpaqueType {\\n      this.expectContextual(tt._type);\\n      node.id = this.flowParseRestrictedIdentifier(\\n        /* liberal */ true,\\n        /* declaration */ true,\\n      );\\n      this.scope.declareName(node.id.name, BIND_LEXICAL, node.id.loc.start);\\n\\n      if (this.match(tt.lt)) {\\n        node.typeParameters = this.flowParseTypeParameterDeclaration();\\n      } else {\\n        node.typeParameters = null;\\n      }\\n\\n      // Parse the supertype\\n      node.supertype = null;\\n      if (this.match(tt.colon)) {\\n        node.supertype = this.flowParseTypeInitialiser(tt.colon);\\n      }\\n\\n      node.impltype = null;\\n      if (!declare) {\\n        node.impltype = this.flowParseTypeInitialiser(tt.eq);\\n      }\\n      this.semicolon();\\n\\n      return this.finishNode(node, \\\"OpaqueType\\\");\\n    }\\n\\n    // Type annotations\\n\\n    flowParseTypeParameter(requireDefault: boolean = false): N.TypeParameter {\\n      const nodeStartLoc = this.state.startLoc;\\n\\n      const node = this.startNode<N.TypeParameter>();\\n\\n      const variance = this.flowParseVariance();\\n\\n      const ident = this.flowParseTypeAnnotatableIdentifier();\\n      node.name = ident.name;\\n      // @ts-expect-error migrate to Babel types\\n      node.variance = variance;\\n      // @ts-expect-error migrate to Babel types\\n      node.bound = ident.typeAnnotation;\\n\\n      if (this.match(tt.eq)) {\\n        this.eat(tt.eq);\\n        // @ts-expect-error migrate to Babel types\\n        node.default = this.flowParseType();\\n      } else {\\n        if (requireDefault) {\\n          this.raise(FlowErrors.MissingTypeParamDefault, { at: nodeStartLoc });\\n        }\\n      }\\n\\n      return this.finishNode(node, \\\"TypeParameter\\\");\\n    }\\n\\n    flowParseTypeParameterDeclaration(): N.TypeParameterDeclaration {\\n      const oldInType = this.state.inType;\\n      const node = this.startNode<N.TypeParameterDeclaration>();\\n      node.params = [];\\n\\n      this.state.inType = true;\\n\\n      // istanbul ignore else: this condition is already checked at all call sites\\n      if (this.match(tt.lt) || this.match(tt.jsxTagStart)) {\\n        this.next();\\n      } else {\\n        this.unexpected();\\n      }\\n\\n      let defaultRequired = false;\\n\\n      do {\\n        const typeParameter = this.flowParseTypeParameter(defaultRequired);\\n\\n        node.params.push(typeParameter);\\n\\n        if (typeParameter.default) {\\n          defaultRequired = true;\\n        }\\n\\n        if (!this.match(tt.gt)) {\\n          this.expect(tt.comma);\\n        }\\n      } while (!this.match(tt.gt));\\n      this.expect(tt.gt);\\n\\n      this.state.inType = oldInType;\\n\\n      return this.finishNode(node, \\\"TypeParameterDeclaration\\\");\\n    }\\n\\n    flowParseTypeParameterInstantiation(): N.TypeParameterInstantiation {\\n      const node = this.startNode<N.TypeParameterInstantiation>();\\n      const oldInType = this.state.inType;\\n      node.params = [];\\n\\n      this.state.inType = true;\\n\\n      this.expect(tt.lt);\\n      const oldNoAnonFunctionType = this.state.noAnonFunctionType;\\n      this.state.noAnonFunctionType = false;\\n      while (!this.match(tt.gt)) {\\n        node.params.push(this.flowParseType());\\n        if (!this.match(tt.gt)) {\\n          this.expect(tt.comma);\\n        }\\n      }\\n      this.state.noAnonFunctionType = oldNoAnonFunctionType;\\n      this.expect(tt.gt);\\n\\n      this.state.inType = oldInType;\\n\\n      return this.finishNode(node, \\\"TypeParameterInstantiation\\\");\\n    }\\n\\n    flowParseTypeParameterInstantiationCallOrNew(): N.TypeParameterInstantiation {\\n      const node = this.startNode<N.TypeParameterInstantiation>();\\n      const oldInType = this.state.inType;\\n      node.params = [];\\n\\n      this.state.inType = true;\\n\\n      this.expect(tt.lt);\\n      while (!this.match(tt.gt)) {\\n        node.params.push(this.flowParseTypeOrImplicitInstantiation());\\n        if (!this.match(tt.gt)) {\\n          this.expect(tt.comma);\\n        }\\n      }\\n      this.expect(tt.gt);\\n\\n      this.state.inType = oldInType;\\n\\n      return this.finishNode(node, \\\"TypeParameterInstantiation\\\");\\n    }\\n\\n    flowParseInterfaceType(): N.FlowInterfaceType {\\n      const node = this.startNode<N.FlowInterfaceType>();\\n      this.expectContextual(tt._interface);\\n\\n      node.extends = [];\\n      if (this.eat(tt._extends)) {\\n        do {\\n          node.extends.push(this.flowParseInterfaceExtends());\\n        } while (this.eat(tt.comma));\\n      }\\n\\n      node.body = this.flowParseObjectType({\\n        allowStatic: false,\\n        allowExact: false,\\n        allowSpread: false,\\n        allowProto: false,\\n        allowInexact: false,\\n      });\\n\\n      return this.finishNode(node, \\\"InterfaceTypeAnnotation\\\");\\n    }\\n\\n    flowParseObjectPropertyKey(): N.Expression {\\n      return this.match(tt.num) || this.match(tt.string)\\n        ? super.parseExprAtom()\\n        : this.parseIdentifier(true);\\n    }\\n\\n    flowParseObjectTypeIndexer(\\n      node: Undone<N.FlowObjectTypeIndexer>,\\n      isStatic: boolean,\\n      variance?: N.FlowVariance | null,\\n    ): N.FlowObjectTypeIndexer {\\n      node.static = isStatic;\\n\\n      // Note: bracketL has already been consumed\\n      if (this.lookahead().type === tt.colon) {\\n        node.id = this.flowParseObjectPropertyKey();\\n        node.key = this.flowParseTypeInitialiser();\\n      } else {\\n        node.id = null;\\n        node.key = this.flowParseType();\\n      }\\n      this.expect(tt.bracketR);\\n      node.value = this.flowParseTypeInitialiser();\\n      node.variance = variance;\\n\\n      return this.finishNode(node, \\\"ObjectTypeIndexer\\\");\\n    }\\n\\n    flowParseObjectTypeInternalSlot(\\n      node: Undone<N.FlowObjectTypeInternalSlot>,\\n      isStatic: boolean,\\n    ): N.FlowObjectTypeInternalSlot {\\n      node.static = isStatic;\\n      // Note: both bracketL have already been consumed\\n      node.id = this.flowParseObjectPropertyKey();\\n      this.expect(tt.bracketR);\\n      this.expect(tt.bracketR);\\n      if (this.match(tt.lt) || this.match(tt.parenL)) {\\n        node.method = true;\\n        node.optional = false;\\n        node.value = this.flowParseObjectTypeMethodish(\\n          this.startNodeAt(node.loc.start),\\n        );\\n      } else {\\n        node.method = false;\\n        if (this.eat(tt.question)) {\\n          node.optional = true;\\n        }\\n        node.value = this.flowParseTypeInitialiser();\\n      }\\n      return this.finishNode(node, \\\"ObjectTypeInternalSlot\\\");\\n    }\\n\\n    flowParseObjectTypeMethodish(\\n      node: Undone<N.FlowFunctionTypeAnnotation>,\\n    ): N.FlowFunctionTypeAnnotation {\\n      node.params = [];\\n      node.rest = null;\\n      node.typeParameters = null;\\n      node.this = null;\\n\\n      if (this.match(tt.lt)) {\\n        node.typeParameters = this.flowParseTypeParameterDeclaration();\\n      }\\n\\n      this.expect(tt.parenL);\\n      if (this.match(tt._this)) {\\n        node.this = this.flowParseFunctionTypeParam(/* first */ true);\\n        // match Flow parser behavior\\n        node.this.name = null;\\n        if (!this.match(tt.parenR)) {\\n          this.expect(tt.comma);\\n        }\\n      }\\n      while (!this.match(tt.parenR) && !this.match(tt.ellipsis)) {\\n        node.params.push(this.flowParseFunctionTypeParam(false));\\n        if (!this.match(tt.parenR)) {\\n          this.expect(tt.comma);\\n        }\\n      }\\n\\n      if (this.eat(tt.ellipsis)) {\\n        node.rest = this.flowParseFunctionTypeParam(false);\\n      }\\n      this.expect(tt.parenR);\\n      node.returnType = this.flowParseTypeInitialiser();\\n\\n      return this.finishNode(node, \\\"FunctionTypeAnnotation\\\");\\n    }\\n\\n    flowParseObjectTypeCallProperty(\\n      node: Undone<N.FlowObjectTypeCallProperty>,\\n      isStatic: boolean,\\n    ): N.FlowObjectTypeCallProperty {\\n      const valueNode = this.startNode();\\n      node.static = isStatic;\\n      node.value = this.flowParseObjectTypeMethodish(valueNode);\\n      return this.finishNode(node, \\\"ObjectTypeCallProperty\\\");\\n    }\\n\\n    flowParseObjectType({\\n      allowStatic,\\n      allowExact,\\n      allowSpread,\\n      allowProto,\\n      allowInexact,\\n    }: {\\n      allowStatic: boolean;\\n      allowExact: boolean;\\n      allowSpread: boolean;\\n      allowProto: boolean;\\n      allowInexact: boolean;\\n    }): N.FlowObjectTypeAnnotation {\\n      const oldInType = this.state.inType;\\n      this.state.inType = true;\\n\\n      const nodeStart = this.startNode();\\n\\n      nodeStart.callProperties = [];\\n      nodeStart.properties = [];\\n      nodeStart.indexers = [];\\n      nodeStart.internalSlots = [];\\n\\n      let endDelim;\\n      let exact;\\n      let inexact = false;\\n      if (allowExact && this.match(tt.braceBarL)) {\\n        this.expect(tt.braceBarL);\\n        endDelim = tt.braceBarR;\\n        exact = true;\\n      } else {\\n        this.expect(tt.braceL);\\n        endDelim = tt.braceR;\\n        exact = false;\\n      }\\n\\n      nodeStart.exact = exact;\\n\\n      while (!this.match(endDelim)) {\\n        let isStatic = false;\\n        let protoStartLoc: Position | undefined | null = null;\\n        let inexactStartLoc: Position | undefined | null = null;\\n        const node = this.startNode();\\n\\n        if (allowProto && this.isContextual(tt._proto)) {\\n          const lookahead = this.lookahead();\\n\\n          if (lookahead.type !== tt.colon && lookahead.type !== tt.question) {\\n            this.next();\\n            protoStartLoc = this.state.startLoc;\\n            allowStatic = false;\\n          }\\n        }\\n\\n        if (allowStatic && this.isContextual(tt._static)) {\\n          const lookahead = this.lookahead();\\n\\n          // static is a valid identifier name\\n          if (lookahead.type !== tt.colon && lookahead.type !== tt.question) {\\n            this.next();\\n            isStatic = true;\\n          }\\n        }\\n\\n        const variance = this.flowParseVariance();\\n\\n        if (this.eat(tt.bracketL)) {\\n          if (protoStartLoc != null) {\\n            this.unexpected(protoStartLoc);\\n          }\\n          if (this.eat(tt.bracketL)) {\\n            if (variance) {\\n              this.unexpected(variance.loc.start);\\n            }\\n            nodeStart.internalSlots.push(\\n              this.flowParseObjectTypeInternalSlot(node, isStatic),\\n            );\\n          } else {\\n            nodeStart.indexers.push(\\n              this.flowParseObjectTypeIndexer(node, isStatic, variance),\\n            );\\n          }\\n        } else if (this.match(tt.parenL) || this.match(tt.lt)) {\\n          if (protoStartLoc != null) {\\n            this.unexpected(protoStartLoc);\\n          }\\n          if (variance) {\\n            this.unexpected(variance.loc.start);\\n          }\\n          nodeStart.callProperties.push(\\n            this.flowParseObjectTypeCallProperty(node, isStatic),\\n          );\\n        } else {\\n          let kind = \\\"init\\\";\\n\\n          if (this.isContextual(tt._get) || this.isContextual(tt._set)) {\\n            const lookahead = this.lookahead();\\n            if (tokenIsLiteralPropertyName(lookahead.type)) {\\n              kind = this.state.value;\\n              this.next();\\n            }\\n          }\\n\\n          const propOrInexact = this.flowParseObjectTypeProperty(\\n            node,\\n            isStatic,\\n            protoStartLoc,\\n            variance,\\n            kind,\\n            allowSpread,\\n            allowInexact ?? !exact,\\n          );\\n\\n          if (propOrInexact === null) {\\n            inexact = true;\\n            inexactStartLoc = this.state.lastTokStartLoc;\\n          } else {\\n            nodeStart.properties.push(propOrInexact);\\n          }\\n        }\\n\\n        this.flowObjectTypeSemicolon();\\n\\n        if (\\n          inexactStartLoc &&\\n          !this.match(tt.braceR) &&\\n          !this.match(tt.braceBarR)\\n        ) {\\n          this.raise(FlowErrors.UnexpectedExplicitInexactInObject, {\\n            at: inexactStartLoc,\\n          });\\n        }\\n      }\\n\\n      this.expect(endDelim);\\n\\n      /* The inexact flag should only be added on ObjectTypeAnnotations that\\n       * are not the body of an interface, declare interface, or declare class.\\n       * Since spreads are only allowed in object types, checking that is\\n       * sufficient here.\\n       */\\n      if (allowSpread) {\\n        nodeStart.inexact = inexact;\\n      }\\n\\n      const out = this.finishNode(nodeStart, \\\"ObjectTypeAnnotation\\\");\\n\\n      this.state.inType = oldInType;\\n\\n      return out;\\n    }\\n\\n    flowParseObjectTypeProperty(\\n      node: Undone<N.FlowObjectTypeProperty | N.FlowObjectTypeSpreadProperty>,\\n      isStatic: boolean,\\n      protoStartLoc: Position | undefined | null,\\n      variance: N.FlowVariance | undefined | null,\\n      kind: string,\\n      allowSpread: boolean,\\n      allowInexact: boolean,\\n    ): N.FlowObjectTypeProperty | N.FlowObjectTypeSpreadProperty | null {\\n      if (this.eat(tt.ellipsis)) {\\n        const isInexactToken =\\n          this.match(tt.comma) ||\\n          this.match(tt.semi) ||\\n          this.match(tt.braceR) ||\\n          this.match(tt.braceBarR);\\n\\n        if (isInexactToken) {\\n          if (!allowSpread) {\\n            this.raise(FlowErrors.InexactInsideNonObject, {\\n              at: this.state.lastTokStartLoc,\\n            });\\n          } else if (!allowInexact) {\\n            this.raise(FlowErrors.InexactInsideExact, {\\n              at: this.state.lastTokStartLoc,\\n            });\\n          }\\n          if (variance) {\\n            this.raise(FlowErrors.InexactVariance, { at: variance });\\n          }\\n\\n          return null;\\n        }\\n\\n        if (!allowSpread) {\\n          this.raise(FlowErrors.UnexpectedSpreadType, {\\n            at: this.state.lastTokStartLoc,\\n          });\\n        }\\n        if (protoStartLoc != null) {\\n          this.unexpected(protoStartLoc);\\n        }\\n        if (variance) {\\n          this.raise(FlowErrors.SpreadVariance, { at: variance });\\n        }\\n\\n        node.argument = this.flowParseType();\\n        return this.finishNode(node, \\\"ObjectTypeSpreadProperty\\\");\\n      } else {\\n        node.key = this.flowParseObjectPropertyKey();\\n        node.static = isStatic;\\n        node.proto = protoStartLoc != null;\\n        node.kind = kind;\\n\\n        let optional = false;\\n        if (this.match(tt.lt) || this.match(tt.parenL)) {\\n          // This is a method property\\n          node.method = true;\\n\\n          if (protoStartLoc != null) {\\n            this.unexpected(protoStartLoc);\\n          }\\n          if (variance) {\\n            this.unexpected(variance.loc.start);\\n          }\\n\\n          node.value = this.flowParseObjectTypeMethodish(\\n            this.startNodeAt(node.loc.start),\\n          );\\n          if (kind === \\\"get\\\" || kind === \\\"set\\\") {\\n            this.flowCheckGetterSetterParams(node);\\n          }\\n          /** Declared classes/interfaces do not allow spread */\\n          if (\\n            !allowSpread &&\\n            node.key.name === \\\"constructor\\\" &&\\n            node.value.this\\n          ) {\\n            this.raise(FlowErrors.ThisParamBannedInConstructor, {\\n              at: node.value.this,\\n            });\\n          }\\n        } else {\\n          if (kind !== \\\"init\\\") this.unexpected();\\n\\n          node.method = false;\\n\\n          if (this.eat(tt.question)) {\\n            optional = true;\\n          }\\n          node.value = this.flowParseTypeInitialiser();\\n          node.variance = variance;\\n        }\\n\\n        node.optional = optional;\\n\\n        return this.finishNode(node, \\\"ObjectTypeProperty\\\");\\n      }\\n    }\\n\\n    // This is similar to checkGetterSetterParams, but as\\n    // @babel/parser uses non estree properties we cannot reuse it here\\n    flowCheckGetterSetterParams(\\n      property: Undone<\\n        N.FlowObjectTypeProperty | N.FlowObjectTypeSpreadProperty\\n      >,\\n    ): void {\\n      const paramCount = property.kind === \\\"get\\\" ? 0 : 1;\\n      const length =\\n        property.value.params.length + (property.value.rest ? 1 : 0);\\n\\n      if (property.value.this) {\\n        this.raise(\\n          property.kind === \\\"get\\\"\\n            ? FlowErrors.GetterMayNotHaveThisParam\\n            : FlowErrors.SetterMayNotHaveThisParam,\\n          { at: property.value.this },\\n        );\\n      }\\n\\n      if (length !== paramCount) {\\n        this.raise(\\n          property.kind === \\\"get\\\"\\n            ? Errors.BadGetterArity\\n            : Errors.BadSetterArity,\\n          { at: property },\\n        );\\n      }\\n\\n      if (property.kind === \\\"set\\\" && property.value.rest) {\\n        this.raise(Errors.BadSetterRestParameter, { at: property });\\n      }\\n    }\\n\\n    flowObjectTypeSemicolon(): void {\\n      if (\\n        !this.eat(tt.semi) &&\\n        !this.eat(tt.comma) &&\\n        !this.match(tt.braceR) &&\\n        !this.match(tt.braceBarR)\\n      ) {\\n        this.unexpected();\\n      }\\n    }\\n\\n    flowParseQualifiedTypeIdentifier(\\n      startLoc?: Position,\\n      id?: N.Identifier,\\n    ): N.FlowQualifiedTypeIdentifier {\\n      startLoc ??= this.state.startLoc;\\n      let node: N.Identifier | N.FlowQualifiedTypeIdentifier =\\n        id || this.flowParseRestrictedIdentifier(true);\\n\\n      while (this.eat(tt.dot)) {\\n        const node2 = this.startNodeAt<N.FlowQualifiedTypeIdentifier>(startLoc);\\n        node2.qualification = node;\\n        node2.id = this.flowParseRestrictedIdentifier(true);\\n        node = this.finishNode(node2, \\\"QualifiedTypeIdentifier\\\");\\n      }\\n\\n      return node;\\n    }\\n\\n    flowParseGenericType(\\n      startLoc: Position,\\n      id: N.Identifier,\\n    ): N.FlowGenericTypeAnnotation {\\n      const node = this.startNodeAt(startLoc);\\n\\n      node.typeParameters = null;\\n      node.id = this.flowParseQualifiedTypeIdentifier(startLoc, id);\\n\\n      if (this.match(tt.lt)) {\\n        node.typeParameters = this.flowParseTypeParameterInstantiation();\\n      }\\n\\n      return this.finishNode(node, \\\"GenericTypeAnnotation\\\");\\n    }\\n\\n    flowParseTypeofType(): N.FlowTypeofTypeAnnotation {\\n      const node = this.startNode();\\n      this.expect(tt._typeof);\\n      node.argument = this.flowParsePrimaryType();\\n      return this.finishNode(node, \\\"TypeofTypeAnnotation\\\");\\n    }\\n\\n    flowParseTupleType(): N.FlowTupleTypeAnnotation {\\n      const node = this.startNode();\\n      node.types = [];\\n      this.expect(tt.bracketL);\\n      // We allow trailing commas\\n      while (this.state.pos < this.length && !this.match(tt.bracketR)) {\\n        node.types.push(this.flowParseType());\\n        if (this.match(tt.bracketR)) break;\\n        this.expect(tt.comma);\\n      }\\n      this.expect(tt.bracketR);\\n      return this.finishNode(node, \\\"TupleTypeAnnotation\\\");\\n    }\\n\\n    flowParseFunctionTypeParam(first: boolean): N.FlowFunctionTypeParam {\\n      let name = null;\\n      let optional = false;\\n      let typeAnnotation = null;\\n      const node = this.startNode<N.FlowFunctionTypeParam>();\\n      const lh = this.lookahead();\\n      const isThis = this.state.type === tt._this;\\n\\n      if (lh.type === tt.colon || lh.type === tt.question) {\\n        if (isThis && !first) {\\n          this.raise(FlowErrors.ThisParamMustBeFirst, { at: node });\\n        }\\n        name = this.parseIdentifier(isThis);\\n        if (this.eat(tt.question)) {\\n          optional = true;\\n          if (isThis) {\\n            this.raise(FlowErrors.ThisParamMayNotBeOptional, { at: node });\\n          }\\n        }\\n        typeAnnotation = this.flowParseTypeInitialiser();\\n      } else {\\n        typeAnnotation = this.flowParseType();\\n      }\\n      node.name = name;\\n      node.optional = optional;\\n      node.typeAnnotation = typeAnnotation;\\n      return this.finishNode(node, \\\"FunctionTypeParam\\\");\\n    }\\n\\n    reinterpretTypeAsFunctionTypeParam(\\n      type: N.FlowType,\\n    ): N.FlowFunctionTypeParam {\\n      const node = this.startNodeAt(type.loc.start);\\n      node.name = null;\\n      node.optional = false;\\n      node.typeAnnotation = type;\\n      return this.finishNode(node, \\\"FunctionTypeParam\\\");\\n    }\\n\\n    flowParseFunctionTypeParams(params: N.FlowFunctionTypeParam[] = []): {\\n      params: N.FlowFunctionTypeParam[];\\n      rest: N.FlowFunctionTypeParam | undefined | null;\\n      _this: N.FlowFunctionTypeParam | undefined | null;\\n    } {\\n      let rest: N.FlowFunctionTypeParam | undefined | null = null;\\n      let _this: N.FlowFunctionTypeParam | undefined | null = null;\\n      if (this.match(tt._this)) {\\n        _this = this.flowParseFunctionTypeParam(/* first */ true);\\n        // match Flow parser behavior\\n        _this.name = null;\\n        if (!this.match(tt.parenR)) {\\n          this.expect(tt.comma);\\n        }\\n      }\\n      while (!this.match(tt.parenR) && !this.match(tt.ellipsis)) {\\n        params.push(this.flowParseFunctionTypeParam(false));\\n        if (!this.match(tt.parenR)) {\\n          this.expect(tt.comma);\\n        }\\n      }\\n      if (this.eat(tt.ellipsis)) {\\n        rest = this.flowParseFunctionTypeParam(false);\\n      }\\n      return { params, rest, _this };\\n    }\\n\\n    flowIdentToTypeAnnotation(\\n      startLoc: Position,\\n      node: Undone<N.FlowTypeAnnotation>,\\n      id: N.Identifier,\\n    ): N.FlowTypeAnnotation {\\n      switch (id.name) {\\n        case \\\"any\\\":\\n          return this.finishNode(node, \\\"AnyTypeAnnotation\\\");\\n\\n        case \\\"bool\\\":\\n        case \\\"boolean\\\":\\n          return this.finishNode(node, \\\"BooleanTypeAnnotation\\\");\\n\\n        case \\\"mixed\\\":\\n          return this.finishNode(node, \\\"MixedTypeAnnotation\\\");\\n\\n        case \\\"empty\\\":\\n          return this.finishNode(node, \\\"EmptyTypeAnnotation\\\");\\n\\n        case \\\"number\\\":\\n          return this.finishNode(node, \\\"NumberTypeAnnotation\\\");\\n\\n        case \\\"string\\\":\\n          return this.finishNode(node, \\\"StringTypeAnnotation\\\");\\n\\n        case \\\"symbol\\\":\\n          return this.finishNode(node, \\\"SymbolTypeAnnotation\\\");\\n\\n        default:\\n          this.checkNotUnderscore(id.name);\\n          return this.flowParseGenericType(startLoc, id);\\n      }\\n    }\\n\\n    // The parsing of types roughly parallels the parsing of expressions, and\\n    // primary types are kind of like primary expressions...they're the\\n    // primitives with which other types are constructed.\\n    flowParsePrimaryType(): N.FlowTypeAnnotation {\\n      const startLoc = this.state.startLoc;\\n      const node = this.startNode();\\n      let tmp;\\n      let type;\\n      let isGroupedType = false;\\n      const oldNoAnonFunctionType = this.state.noAnonFunctionType;\\n\\n      switch (this.state.type) {\\n        case tt.braceL:\\n          return this.flowParseObjectType({\\n            allowStatic: false,\\n            allowExact: false,\\n            allowSpread: true,\\n            allowProto: false,\\n            allowInexact: true,\\n          });\\n\\n        case tt.braceBarL:\\n          return this.flowParseObjectType({\\n            allowStatic: false,\\n            allowExact: true,\\n            allowSpread: true,\\n            allowProto: false,\\n            allowInexact: false,\\n          });\\n\\n        case tt.bracketL:\\n          this.state.noAnonFunctionType = false;\\n          type = this.flowParseTupleType();\\n          this.state.noAnonFunctionType = oldNoAnonFunctionType;\\n          return type;\\n\\n        case tt.lt:\\n          node.typeParameters = this.flowParseTypeParameterDeclaration();\\n          this.expect(tt.parenL);\\n          tmp = this.flowParseFunctionTypeParams();\\n          node.params = tmp.params;\\n          node.rest = tmp.rest;\\n          node.this = tmp._this;\\n          this.expect(tt.parenR);\\n\\n          this.expect(tt.arrow);\\n\\n          node.returnType = this.flowParseType();\\n\\n          return this.finishNode(node, \\\"FunctionTypeAnnotation\\\");\\n\\n        case tt.parenL:\\n          this.next();\\n\\n          // Check to see if this is actually a grouped type\\n          if (!this.match(tt.parenR) && !this.match(tt.ellipsis)) {\\n            if (tokenIsIdentifier(this.state.type) || this.match(tt._this)) {\\n              const token = this.lookahead().type;\\n              isGroupedType = token !== tt.question && token !== tt.colon;\\n            } else {\\n              isGroupedType = true;\\n            }\\n          }\\n\\n          if (isGroupedType) {\\n            this.state.noAnonFunctionType = false;\\n            type = this.flowParseType();\\n            this.state.noAnonFunctionType = oldNoAnonFunctionType;\\n\\n            // A `,` or a `) =>` means this is an anonymous function type\\n            if (\\n              this.state.noAnonFunctionType ||\\n              !(\\n                this.match(tt.comma) ||\\n                (this.match(tt.parenR) && this.lookahead().type === tt.arrow)\\n              )\\n            ) {\\n              this.expect(tt.parenR);\\n              return type;\\n            } else {\\n              // Eat a comma if there is one\\n              this.eat(tt.comma);\\n            }\\n          }\\n\\n          if (type) {\\n            tmp = this.flowParseFunctionTypeParams([\\n              this.reinterpretTypeAsFunctionTypeParam(type),\\n            ]);\\n          } else {\\n            tmp = this.flowParseFunctionTypeParams();\\n          }\\n\\n          node.params = tmp.params;\\n          node.rest = tmp.rest;\\n          node.this = tmp._this;\\n\\n          this.expect(tt.parenR);\\n\\n          this.expect(tt.arrow);\\n\\n          node.returnType = this.flowParseType();\\n\\n          node.typeParameters = null;\\n\\n          return this.finishNode(node, \\\"FunctionTypeAnnotation\\\");\\n\\n        case tt.string:\\n          return this.parseLiteral<N.StringLiteralTypeAnnotation>(\\n            this.state.value,\\n            \\\"StringLiteralTypeAnnotation\\\",\\n          );\\n\\n        case tt._true:\\n        case tt._false:\\n          node.value = this.match(tt._true);\\n          this.next();\\n          return this.finishNode(\\n            node as Undone<N.BooleanLiteralTypeAnnotation>,\\n            \\\"BooleanLiteralTypeAnnotation\\\",\\n          );\\n\\n        case tt.plusMin:\\n          if (this.state.value === \\\"-\\\") {\\n            this.next();\\n            if (this.match(tt.num)) {\\n              return this.parseLiteralAtNode<N.NumberLiteralTypeAnnotation>(\\n                -this.state.value,\\n                \\\"NumberLiteralTypeAnnotation\\\",\\n                node,\\n              );\\n            }\\n\\n            if (this.match(tt.bigint)) {\\n              return this.parseLiteralAtNode<N.BigIntLiteralTypeAnnotation>(\\n                -this.state.value,\\n                \\\"BigIntLiteralTypeAnnotation\\\",\\n                node,\\n              );\\n            }\\n\\n            throw this.raise(FlowErrors.UnexpectedSubtractionOperand, {\\n              at: this.state.startLoc,\\n            });\\n          }\\n          this.unexpected();\\n          return;\\n        case tt.num:\\n          return this.parseLiteral(\\n            this.state.value,\\n            \\\"NumberLiteralTypeAnnotation\\\",\\n          );\\n\\n        case tt.bigint:\\n          return this.parseLiteral(\\n            this.state.value,\\n            \\\"BigIntLiteralTypeAnnotation\\\",\\n          );\\n\\n        case tt._void:\\n          this.next();\\n          return this.finishNode(node, \\\"VoidTypeAnnotation\\\");\\n\\n        case tt._null:\\n          this.next();\\n          return this.finishNode(node, \\\"NullLiteralTypeAnnotation\\\");\\n\\n        case tt._this:\\n          this.next();\\n          return this.finishNode(node, \\\"ThisTypeAnnotation\\\");\\n\\n        case tt.star:\\n          this.next();\\n          return this.finishNode(node, \\\"ExistsTypeAnnotation\\\");\\n\\n        case tt._typeof:\\n          return this.flowParseTypeofType();\\n\\n        default:\\n          if (tokenIsKeyword(this.state.type)) {\\n            const label = tokenLabelName(this.state.type);\\n            this.next();\\n            return super.createIdentifier(node as Undone<N.Identifier>, label);\\n          } else if (tokenIsIdentifier(this.state.type)) {\\n            if (this.isContextual(tt._interface)) {\\n              return this.flowParseInterfaceType();\\n            }\\n\\n            return this.flowIdentToTypeAnnotation(\\n              startLoc,\\n              node,\\n              this.parseIdentifier(),\\n            );\\n          }\\n      }\\n\\n      this.unexpected();\\n    }\\n\\n    flowParsePostfixType(): N.FlowTypeAnnotation {\\n      const startLoc = this.state.startLoc;\\n      let type = this.flowParsePrimaryType();\\n      let seenOptionalIndexedAccess = false;\\n      while (\\n        (this.match(tt.bracketL) || this.match(tt.questionDot)) &&\\n        !this.canInsertSemicolon()\\n      ) {\\n        const node = this.startNodeAt(startLoc);\\n        const optional = this.eat(tt.questionDot);\\n        seenOptionalIndexedAccess = seenOptionalIndexedAccess || optional;\\n        this.expect(tt.bracketL);\\n        if (!optional && this.match(tt.bracketR)) {\\n          node.elementType = type;\\n          this.next(); // eat `]`\\n          type = this.finishNode(node, \\\"ArrayTypeAnnotation\\\");\\n        } else {\\n          node.objectType = type;\\n          node.indexType = this.flowParseType();\\n          this.expect(tt.bracketR);\\n          if (seenOptionalIndexedAccess) {\\n            node.optional = optional;\\n            type = this.finishNode<N.FlowOptionalIndexedAccessType>(\\n              // @ts-expect-error todo(flow->ts)\\n              node,\\n              \\\"OptionalIndexedAccessType\\\",\\n            );\\n          } else {\\n            type = this.finishNode<N.FlowIndexedAccessType>(\\n              // @ts-expect-error todo(flow->ts)\\n              node,\\n              \\\"IndexedAccessType\\\",\\n            );\\n          }\\n        }\\n      }\\n      return type;\\n    }\\n\\n    flowParsePrefixType(): N.FlowTypeAnnotation {\\n      const node = this.startNode();\\n      if (this.eat(tt.question)) {\\n        node.typeAnnotation = this.flowParsePrefixType();\\n        return this.finishNode(node, \\\"NullableTypeAnnotation\\\");\\n      } else {\\n        return this.flowParsePostfixType();\\n      }\\n    }\\n\\n    flowParseAnonFunctionWithoutParens(): N.FlowTypeAnnotation {\\n      const param = this.flowParsePrefixType();\\n      if (!this.state.noAnonFunctionType && this.eat(tt.arrow)) {\\n        // TODO: This should be a type error. Passing in a SourceLocation, and it expects a Position.\\n        const node = this.startNodeAt(param.loc.start);\\n        node.params = [this.reinterpretTypeAsFunctionTypeParam(param)];\\n        node.rest = null;\\n        node.this = null;\\n        node.returnType = this.flowParseType();\\n        node.typeParameters = null;\\n        return this.finishNode(node, \\\"FunctionTypeAnnotation\\\");\\n      }\\n      return param;\\n    }\\n\\n    flowParseIntersectionType(): N.FlowTypeAnnotation {\\n      const node = this.startNode();\\n      this.eat(tt.bitwiseAND);\\n      const type = this.flowParseAnonFunctionWithoutParens();\\n      node.types = [type];\\n      while (this.eat(tt.bitwiseAND)) {\\n        node.types.push(this.flowParseAnonFunctionWithoutParens());\\n      }\\n      return node.types.length === 1\\n        ? type\\n        : this.finishNode(node, \\\"IntersectionTypeAnnotation\\\");\\n    }\\n\\n    flowParseUnionType(): N.FlowTypeAnnotation {\\n      const node = this.startNode();\\n      this.eat(tt.bitwiseOR);\\n      const type = this.flowParseIntersectionType();\\n      node.types = [type];\\n      while (this.eat(tt.bitwiseOR)) {\\n        node.types.push(this.flowParseIntersectionType());\\n      }\\n      return node.types.length === 1\\n        ? type\\n        : this.finishNode(node, \\\"UnionTypeAnnotation\\\");\\n    }\\n\\n    flowParseType(): N.FlowTypeAnnotation {\\n      const oldInType = this.state.inType;\\n      this.state.inType = true;\\n      const type = this.flowParseUnionType();\\n      this.state.inType = oldInType;\\n      return type;\\n    }\\n\\n    flowParseTypeOrImplicitInstantiation(): N.FlowTypeAnnotation {\\n      if (this.state.type === tt.name && this.state.value === \\\"_\\\") {\\n        const startLoc = this.state.startLoc;\\n        const node = this.parseIdentifier();\\n        return this.flowParseGenericType(startLoc, node);\\n      } else {\\n        return this.flowParseType();\\n      }\\n    }\\n\\n    flowParseTypeAnnotation(): N.FlowTypeAnnotation {\\n      const node = this.startNode<N.FlowTypeAnnotation>();\\n      node.typeAnnotation = this.flowParseTypeInitialiser();\\n      return this.finishNode(node, \\\"TypeAnnotation\\\");\\n    }\\n\\n    flowParseTypeAnnotatableIdentifier(\\n      allowPrimitiveOverride?: boolean,\\n    ): N.Identifier {\\n      const ident = allowPrimitiveOverride\\n        ? this.parseIdentifier()\\n        : this.flowParseRestrictedIdentifier();\\n      if (this.match(tt.colon)) {\\n        // @ts-expect-error: refine typings\\n        ident.typeAnnotation = this.flowParseTypeAnnotation();\\n        this.resetEndLocation(ident);\\n      }\\n      return ident;\\n    }\\n\\n    typeCastToParameter(node: N.Node): N.Node {\\n      node.expression.typeAnnotation = node.typeAnnotation;\\n\\n      this.resetEndLocation(node.expression, node.typeAnnotation.loc.end);\\n\\n      return node.expression;\\n    }\\n\\n    flowParseVariance(): N.FlowVariance | undefined | null {\\n      let variance = null;\\n      if (this.match(tt.plusMin)) {\\n        variance = this.startNode<N.FlowVariance>();\\n        if (this.state.value === \\\"+\\\") {\\n          variance.kind = \\\"plus\\\";\\n        } else {\\n          variance.kind = \\\"minus\\\";\\n        }\\n        this.next();\\n        return this.finishNode(variance, \\\"Variance\\\");\\n      }\\n      return variance;\\n    }\\n\\n    // ==================================\\n    // Overrides\\n    // ==================================\\n\\n    parseFunctionBody(\\n      node: N.Function,\\n      allowExpressionBody?: boolean | null,\\n      isMethod: boolean = false,\\n    ): void {\\n      if (allowExpressionBody) {\\n        this.forwardNoArrowParamsConversionAt(node, () =>\\n          super.parseFunctionBody(node, true, isMethod),\\n        );\\n        return;\\n      }\\n\\n      super.parseFunctionBody(node, false, isMethod);\\n    }\\n\\n    parseFunctionBodyAndFinish<\\n      T extends\\n        | N.Function\\n        | N.TSDeclareMethod\\n        | N.TSDeclareFunction\\n        | N.ClassPrivateMethod,\\n    >(node: Undone<T>, type: T[\\\"type\\\"], isMethod: boolean = false): T {\\n      if (this.match(tt.colon)) {\\n        const typeNode = this.startNode<N.TypeAnnotation>();\\n\\n        [\\n          typeNode.typeAnnotation,\\n          // @ts-expect-error predicate may not exist\\n          node.predicate,\\n        ] = this.flowParseTypeAndPredicateInitialiser();\\n\\n        node.returnType = typeNode.typeAnnotation\\n          ? this.finishNode(typeNode, \\\"TypeAnnotation\\\")\\n          : null;\\n      }\\n\\n      return super.parseFunctionBodyAndFinish(node, type, isMethod);\\n    }\\n\\n    // interfaces and enums\\n    parseStatementLike(flags: ParseStatementFlag): N.Statement {\\n      // strict mode handling of `interface` since it's a reserved word\\n      if (this.state.strict && this.isContextual(tt._interface)) {\\n        const lookahead = this.lookahead();\\n        if (tokenIsKeywordOrIdentifier(lookahead.type)) {\\n          const node = this.startNode<N.FlowInterface>();\\n          this.next();\\n          return this.flowParseInterface(node);\\n        }\\n      } else if (this.shouldParseEnums() && this.isContextual(tt._enum)) {\\n        const node = this.startNode();\\n        this.next();\\n        return this.flowParseEnumDeclaration(node);\\n      }\\n      const stmt = super.parseStatementLike(flags);\\n      // We will parse a flow pragma in any comment before the first statement.\\n      if (this.flowPragma === undefined && !this.isValidDirective(stmt)) {\\n        this.flowPragma = null;\\n      }\\n      return stmt;\\n    }\\n\\n    // declares, interfaces and type aliases\\n    parseExpressionStatement(\\n      node: N.ExpressionStatement,\\n      expr: N.Expression,\\n      decorators: N.Decorator[] | null,\\n    ): N.ExpressionStatement {\\n      if (expr.type === \\\"Identifier\\\") {\\n        if (expr.name === \\\"declare\\\") {\\n          if (\\n            this.match(tt._class) ||\\n            tokenIsIdentifier(this.state.type) ||\\n            this.match(tt._function) ||\\n            this.match(tt._var) ||\\n            this.match(tt._export)\\n          ) {\\n            // @ts-expect-error: refine typings\\n            return this.flowParseDeclare(node);\\n          }\\n        } else if (tokenIsIdentifier(this.state.type)) {\\n          if (expr.name === \\\"interface\\\") {\\n            // @ts-expect-error: refine typings\\n            return this.flowParseInterface(node);\\n          } else if (expr.name === \\\"type\\\") {\\n            // @ts-expect-error: refine typings\\n            return this.flowParseTypeAlias(node);\\n          } else if (expr.name === \\\"opaque\\\") {\\n            // @ts-expect-error: refine typings\\n            return this.flowParseOpaqueType(node, false);\\n          }\\n        }\\n      }\\n\\n      return super.parseExpressionStatement(node, expr, decorators);\\n    }\\n\\n    // export type\\n    shouldParseExportDeclaration(): boolean {\\n      const { type } = this.state;\\n      if (\\n        tokenIsFlowInterfaceOrTypeOrOpaque(type) ||\\n        (this.shouldParseEnums() && type === tt._enum)\\n      ) {\\n        return !this.state.containsEsc;\\n      }\\n      return super.shouldParseExportDeclaration();\\n    }\\n\\n    isExportDefaultSpecifier(): boolean {\\n      const { type } = this.state;\\n      if (\\n        tokenIsFlowInterfaceOrTypeOrOpaque(type) ||\\n        (this.shouldParseEnums() && type === tt._enum)\\n      ) {\\n        return this.state.containsEsc;\\n      }\\n\\n      return super.isExportDefaultSpecifier();\\n    }\\n\\n    parseExportDefaultExpression(): N.Expression | N.Declaration {\\n      if (this.shouldParseEnums() && this.isContextual(tt._enum)) {\\n        const node = this.startNode();\\n        this.next();\\n        return this.flowParseEnumDeclaration(node);\\n      }\\n      return super.parseExportDefaultExpression();\\n    }\\n\\n    parseConditional(\\n      expr: N.Expression,\\n\\n      startLoc: Position,\\n      refExpressionErrors?: ExpressionErrors | null,\\n    ): N.Expression {\\n      if (!this.match(tt.question)) return expr;\\n\\n      if (this.state.maybeInArrowParameters) {\\n        const nextCh = this.lookaheadCharCode();\\n        // These tokens cannot start an expression, so if one of them follows\\n        // ? then we are probably in an arrow function parameters list and we\\n        // don't parse the conditional expression.\\n        if (\\n          nextCh === charCodes.comma || // (a?, b) => c\\n          nextCh === charCodes.equalsTo || // (a? = b) => c\\n          nextCh === charCodes.colon || // (a?: b) => c\\n          nextCh === charCodes.rightParenthesis // (a?) => c\\n        ) {\\n          /*:: invariant(refExpressionErrors != null) */\\n          this.setOptionalParametersError(refExpressionErrors);\\n          return expr;\\n        }\\n      }\\n\\n      this.expect(tt.question);\\n      const state = this.state.clone();\\n      const originalNoArrowAt = this.state.noArrowAt;\\n      const node = this.startNodeAt(startLoc);\\n      let { consequent, failed } = this.tryParseConditionalConsequent();\\n      let [valid, invalid] = this.getArrowLikeExpressions(consequent);\\n\\n      if (failed || invalid.length > 0) {\\n        const noArrowAt = [...originalNoArrowAt];\\n\\n        if (invalid.length > 0) {\\n          this.state = state;\\n          this.state.noArrowAt = noArrowAt;\\n\\n          for (let i = 0; i < invalid.length; i++) {\\n            noArrowAt.push(invalid[i].start);\\n          }\\n\\n          ({ consequent, failed } = this.tryParseConditionalConsequent());\\n          [valid, invalid] = this.getArrowLikeExpressions(consequent);\\n        }\\n\\n        if (failed && valid.length > 1) {\\n          // if there are two or more possible correct ways of parsing, throw an\\n          // error.\\n          // e.g.   Source: a ? (b): c => (d): e => f\\n          //      Result 1: a ? b : (c => ((d): e => f))\\n          //      Result 2: a ? ((b): c => d) : (e => f)\\n          this.raise(FlowErrors.AmbiguousConditionalArrow, {\\n            at: state.startLoc,\\n          });\\n        }\\n\\n        if (failed && valid.length === 1) {\\n          this.state = state;\\n          noArrowAt.push(valid[0].start);\\n          this.state.noArrowAt = noArrowAt;\\n          ({ consequent, failed } = this.tryParseConditionalConsequent());\\n        }\\n      }\\n\\n      this.getArrowLikeExpressions(consequent, true);\\n\\n      this.state.noArrowAt = originalNoArrowAt;\\n      this.expect(tt.colon);\\n\\n      node.test = expr;\\n      node.consequent = consequent;\\n      node.alternate = this.forwardNoArrowParamsConversionAt(node, () =>\\n        this.parseMaybeAssign(undefined, undefined),\\n      );\\n\\n      return this.finishNode(node, \\\"ConditionalExpression\\\");\\n    }\\n\\n    tryParseConditionalConsequent(): {\\n      consequent: N.Expression;\\n      failed: boolean;\\n    } {\\n      this.state.noArrowParamsConversionAt.push(this.state.start);\\n\\n      const consequent = this.parseMaybeAssignAllowIn();\\n      const failed = !this.match(tt.colon);\\n\\n      this.state.noArrowParamsConversionAt.pop();\\n\\n      return { consequent, failed };\\n    }\\n\\n    // Given an expression, walks through out its arrow functions whose body is\\n    // an expression and through out conditional expressions. It returns every\\n    // function which has been parsed with a return type but could have been\\n    // parenthesized expressions.\\n    // These functions are separated into two arrays: one containing the ones\\n    // whose parameters can be converted to assignable lists, one containing the\\n    // others.\\n    getArrowLikeExpressions(\\n      node: N.Expression,\\n      disallowInvalid?: boolean,\\n    ): [N.ArrowFunctionExpression[], N.ArrowFunctionExpression[]] {\\n      const stack = [node];\\n      const arrows: N.ArrowFunctionExpression[] = [];\\n\\n      while (stack.length !== 0) {\\n        const node = stack.pop();\\n        if (node.type === \\\"ArrowFunctionExpression\\\") {\\n          if (node.typeParameters || !node.returnType) {\\n            // This is an arrow expression without ambiguity, so check its parameters\\n            // @ts-expect-error: refine typings\\n            this.finishArrowValidation(node);\\n          } else {\\n            // @ts-expect-error: refine typings\\n            arrows.push(node);\\n          }\\n          stack.push(node.body);\\n        } else if (node.type === \\\"ConditionalExpression\\\") {\\n          stack.push(node.consequent);\\n          stack.push(node.alternate);\\n        }\\n      }\\n\\n      if (disallowInvalid) {\\n        arrows.forEach(node => this.finishArrowValidation(node));\\n        return [arrows, []];\\n      }\\n\\n      return partition(arrows, node =>\\n        node.params.every(param => this.isAssignable(param, true)),\\n      );\\n    }\\n\\n    finishArrowValidation(node: N.ArrowFunctionExpression) {\\n      this.toAssignableList(\\n        // node.params is Expression[] instead of $ReadOnlyArray<Pattern> because it\\n        // has not been converted yet.\\n        node.params as any as N.Expression[],\\n        node.extra?.trailingCommaLoc,\\n        /* isLHS */ false,\\n      );\\n      // Enter scope, as checkParams defines bindings\\n      this.scope.enter(SCOPE_FUNCTION | SCOPE_ARROW);\\n      // Use super's method to force the parameters to be checked\\n      super.checkParams(node, false, true);\\n      this.scope.exit();\\n    }\\n\\n    forwardNoArrowParamsConversionAt<T>(\\n      node: Undone<N.Node>,\\n      parse: () => T,\\n    ): T {\\n      let result: T;\\n      if (this.state.noArrowParamsConversionAt.indexOf(node.start) !== -1) {\\n        this.state.noArrowParamsConversionAt.push(this.state.start);\\n        result = parse();\\n        this.state.noArrowParamsConversionAt.pop();\\n      } else {\\n        result = parse();\\n      }\\n\\n      return result;\\n    }\\n\\n    parseParenItem(\\n      node: N.Expression,\\n\\n      startLoc: Position,\\n    ): N.Expression {\\n      node = super.parseParenItem(node, startLoc);\\n      if (this.eat(tt.question)) {\\n        node.optional = true;\\n        // Include questionmark in location of node\\n        // Don't use this.finishNode() as otherwise we might process comments twice and\\n        // include already consumed parens\\n        this.resetEndLocation(node);\\n      }\\n\\n      if (this.match(tt.colon)) {\\n        const typeCastNode = this.startNodeAt(startLoc);\\n        typeCastNode.expression = node;\\n        typeCastNode.typeAnnotation = this.flowParseTypeAnnotation();\\n\\n        return this.finishNode(typeCastNode, \\\"TypeCastExpression\\\");\\n      }\\n\\n      return node;\\n    }\\n\\n    assertModuleNodeAllowed(node: N.Node) {\\n      if (\\n        (node.type === \\\"ImportDeclaration\\\" &&\\n          (node.importKind === \\\"type\\\" || node.importKind === \\\"typeof\\\")) ||\\n        (node.type === \\\"ExportNamedDeclaration\\\" &&\\n          node.exportKind === \\\"type\\\") ||\\n        (node.type === \\\"ExportAllDeclaration\\\" && node.exportKind === \\\"type\\\")\\n      ) {\\n        // Allow Flowtype imports and exports in all conditions because\\n        // Flow itself does not care about 'sourceType'.\\n        return;\\n      }\\n\\n      super.assertModuleNodeAllowed(node);\\n    }\\n\\n    parseExport(\\n      node: Undone<N.ExportNamedDeclaration | N.ExportAllDeclaration>,\\n      decorators: N.Decorator[] | null,\\n    ): N.AnyExport {\\n      const decl = super.parseExport(node, decorators);\\n      if (\\n        decl.type === \\\"ExportNamedDeclaration\\\" ||\\n        decl.type === \\\"ExportAllDeclaration\\\"\\n      ) {\\n        decl.exportKind = decl.exportKind || \\\"value\\\";\\n      }\\n      return decl;\\n    }\\n\\n    parseExportDeclaration(\\n      node: N.ExportNamedDeclaration,\\n    ): N.Declaration | undefined | null {\\n      if (this.isContextual(tt._type)) {\\n        node.exportKind = \\\"type\\\";\\n\\n        const declarationNode = this.startNode();\\n        this.next();\\n\\n        if (this.match(tt.braceL)) {\\n          // export type { foo, bar };\\n          node.specifiers = this.parseExportSpecifiers(\\n            /* isInTypeExport */ true,\\n          );\\n          super.parseExportFrom(node);\\n          return null;\\n        } else {\\n          // export type Foo = Bar;\\n          // @ts-expect-error: refine typings\\n          return this.flowParseTypeAlias(declarationNode);\\n        }\\n      } else if (this.isContextual(tt._opaque)) {\\n        node.exportKind = \\\"type\\\";\\n\\n        const declarationNode = this.startNode();\\n        this.next();\\n        // export opaque type Foo = Bar;\\n        // @ts-expect-error: refine typings\\n        return this.flowParseOpaqueType(declarationNode, false);\\n      } else if (this.isContextual(tt._interface)) {\\n        node.exportKind = \\\"type\\\";\\n        const declarationNode = this.startNode();\\n        this.next();\\n        // @ts-expect-error: refine typings\\n        return this.flowParseInterface(declarationNode);\\n      } else if (this.shouldParseEnums() && this.isContextual(tt._enum)) {\\n        node.exportKind = \\\"value\\\";\\n        const declarationNode = this.startNode();\\n        this.next();\\n        // @ts-expect-error: refine typings\\n        return this.flowParseEnumDeclaration(declarationNode);\\n      } else {\\n        return super.parseExportDeclaration(node);\\n      }\\n    }\\n\\n    eatExportStar(node: N.Node): boolean {\\n      if (super.eatExportStar(node)) return true;\\n\\n      if (this.isContextual(tt._type) && this.lookahead().type === tt.star) {\\n        node.exportKind = \\\"type\\\";\\n        this.next();\\n        this.next();\\n        return true;\\n      }\\n\\n      return false;\\n    }\\n\\n    maybeParseExportNamespaceSpecifier(node: N.Node): boolean {\\n      const { startLoc } = this.state;\\n      const hasNamespace = super.maybeParseExportNamespaceSpecifier(node);\\n      if (hasNamespace && node.exportKind === \\\"type\\\") {\\n        this.unexpected(startLoc);\\n      }\\n      return hasNamespace;\\n    }\\n\\n    parseClassId(\\n      node: N.Class,\\n      isStatement: boolean,\\n      optionalId?: boolean | null,\\n    ) {\\n      super.parseClassId(node, isStatement, optionalId);\\n      if (this.match(tt.lt)) {\\n        node.typeParameters = this.flowParseTypeParameterDeclaration();\\n      }\\n    }\\n\\n    parseClassMember(\\n      classBody: N.ClassBody,\\n      member: any,\\n      state: N.ParseClassMemberState,\\n    ): void {\\n      const { startLoc } = this.state;\\n      if (this.isContextual(tt._declare)) {\\n        if (super.parseClassMemberFromModifier(classBody, member)) {\\n          // 'declare' is a class element name\\n          return;\\n        }\\n\\n        member.declare = true;\\n      }\\n\\n      super.parseClassMember(classBody, member, state);\\n\\n      if (member.declare) {\\n        if (\\n          member.type !== \\\"ClassProperty\\\" &&\\n          member.type !== \\\"ClassPrivateProperty\\\" &&\\n          member.type !== \\\"PropertyDefinition\\\" // Used by estree plugin\\n        ) {\\n          this.raise(FlowErrors.DeclareClassElement, { at: startLoc });\\n        } else if (member.value) {\\n          this.raise(FlowErrors.DeclareClassFieldInitializer, {\\n            at: member.value,\\n          });\\n        }\\n      }\\n    }\\n\\n    isIterator(word: string): boolean {\\n      return word === \\\"iterator\\\" || word === \\\"asyncIterator\\\";\\n    }\\n\\n    readIterator(): void {\\n      const word = super.readWord1();\\n      const fullWord = \\\"@@\\\" + word;\\n\\n      // Allow @@iterator and @@asyncIterator as a identifier only inside type\\n      if (!this.isIterator(word) || !this.state.inType) {\\n        this.raise(Errors.InvalidIdentifier, {\\n          at: this.state.curPosition(),\\n          identifierName: fullWord,\\n        });\\n      }\\n\\n      this.finishToken(tt.name, fullWord);\\n    }\\n\\n    // ensure that inside flow types, we bypass the jsx parser plugin\\n    getTokenFromCode(code: number): void {\\n      const next = this.input.charCodeAt(this.state.pos + 1);\\n      if (code === charCodes.leftCurlyBrace && next === charCodes.verticalBar) {\\n        this.finishOp(tt.braceBarL, 2);\\n      } else if (\\n        this.state.inType &&\\n        (code === charCodes.greaterThan || code === charCodes.lessThan)\\n      ) {\\n        this.finishOp(code === charCodes.greaterThan ? tt.gt : tt.lt, 1);\\n      } else if (this.state.inType && code === charCodes.questionMark) {\\n        if (next === charCodes.dot) {\\n          this.finishOp(tt.questionDot, 2);\\n        } else {\\n          // allow double nullable types in Flow: ??string\\n          this.finishOp(tt.question, 1);\\n        }\\n      } else if (\\n        isIteratorStart(code, next, this.input.charCodeAt(this.state.pos + 2))\\n      ) {\\n        this.state.pos += 2; // eat \\\"@@\\\"\\n        this.readIterator();\\n      } else {\\n        super.getTokenFromCode(code);\\n      }\\n    }\\n\\n    isAssignable(node: N.Node, isBinding?: boolean): boolean {\\n      if (node.type === \\\"TypeCastExpression\\\") {\\n        return this.isAssignable(node.expression, isBinding);\\n      } else {\\n        return super.isAssignable(node, isBinding);\\n      }\\n    }\\n\\n    toAssignable(node: N.Node, isLHS: boolean = false): void {\\n      if (\\n        !isLHS &&\\n        node.type === \\\"AssignmentExpression\\\" &&\\n        node.left.type === \\\"TypeCastExpression\\\"\\n      ) {\\n        node.left = this.typeCastToParameter(node.left);\\n      }\\n      super.toAssignable(node, isLHS);\\n    }\\n\\n    // turn type casts that we found in function parameter head into type annotated params\\n    toAssignableList(\\n      exprList: N.Expression[],\\n      trailingCommaLoc: Position | undefined | null,\\n      isLHS: boolean,\\n    ): void {\\n      for (let i = 0; i < exprList.length; i++) {\\n        const expr = exprList[i];\\n        if (expr?.type === \\\"TypeCastExpression\\\") {\\n          exprList[i] = this.typeCastToParameter(expr);\\n        }\\n      }\\n      super.toAssignableList(exprList, trailingCommaLoc, isLHS);\\n    }\\n\\n    // this is a list of nodes, from something like a call expression, we need to filter the\\n    // type casts that we've found that are illegal in this context\\n    toReferencedList(\\n      exprList: ReadonlyArray<N.Expression | undefined | null>,\\n      isParenthesizedExpr?: boolean,\\n    ): ReadonlyArray<N.Expression | undefined | null> {\\n      for (let i = 0; i < exprList.length; i++) {\\n        const expr = exprList[i];\\n        if (\\n          expr &&\\n          expr.type === \\\"TypeCastExpression\\\" &&\\n          !expr.extra?.parenthesized &&\\n          (exprList.length > 1 || !isParenthesizedExpr)\\n        ) {\\n          this.raise(FlowErrors.TypeCastInPattern, {\\n            at: expr.typeAnnotation,\\n          });\\n        }\\n      }\\n\\n      return exprList;\\n    }\\n\\n    parseArrayLike(\\n      close: TokenType,\\n      canBePattern: boolean,\\n      isTuple: boolean,\\n      refExpressionErrors?: ExpressionErrors | null,\\n    ): N.ArrayExpression | N.TupleExpression {\\n      const node = super.parseArrayLike(\\n        close,\\n        canBePattern,\\n        isTuple,\\n        refExpressionErrors,\\n      );\\n\\n      // This could be an array pattern:\\n      //   ([a: string, b: string]) => {}\\n      // In this case, we don't have to call toReferencedList. We will\\n      // call it, if needed, when we are sure that it is a parenthesized\\n      // expression by calling toReferencedListDeep.\\n      if (canBePattern && !this.state.maybeInArrowParameters) {\\n        this.toReferencedList(node.elements);\\n      }\\n\\n      return node;\\n    }\\n\\n    isValidLVal(type: string, isParenthesized: boolean, binding: BindingTypes) {\\n      return (\\n        type === \\\"TypeCastExpression\\\" ||\\n        super.isValidLVal(type, isParenthesized, binding)\\n      );\\n    }\\n\\n    // parse class property type annotations\\n    parseClassProperty(node: N.ClassProperty): N.ClassProperty {\\n      if (this.match(tt.colon)) {\\n        // @ts-expect-error refine typings\\n        node.typeAnnotation = this.flowParseTypeAnnotation();\\n      }\\n      return super.parseClassProperty(node);\\n    }\\n\\n    parseClassPrivateProperty(\\n      node: N.ClassPrivateProperty,\\n    ): N.ClassPrivateProperty {\\n      if (this.match(tt.colon)) {\\n        // @ts-expect-error refine typings\\n        node.typeAnnotation = this.flowParseTypeAnnotation();\\n      }\\n      return super.parseClassPrivateProperty(node);\\n    }\\n\\n    // determine whether or not we're currently in the position where a class method would appear\\n    isClassMethod(): boolean {\\n      return this.match(tt.lt) || super.isClassMethod();\\n    }\\n\\n    // determine whether or not we're currently in the position where a class property would appear\\n    isClassProperty(): boolean {\\n      return this.match(tt.colon) || super.isClassProperty();\\n    }\\n\\n    isNonstaticConstructor(method: N.ClassMethod | N.ClassProperty): boolean {\\n      return !this.match(tt.colon) && super.isNonstaticConstructor(method);\\n    }\\n\\n    // parse type parameters for class methods\\n    pushClassMethod(\\n      classBody: N.ClassBody,\\n      method: N.ClassMethod,\\n      isGenerator: boolean,\\n      isAsync: boolean,\\n      isConstructor: boolean,\\n      allowsDirectSuper: boolean,\\n    ): void {\\n      if ((method as any).variance) {\\n        this.unexpected((method as any).variance.loc.start);\\n      }\\n      delete (method as any).variance;\\n      if (this.match(tt.lt)) {\\n        method.typeParameters = this.flowParseTypeParameterDeclaration();\\n      }\\n\\n      super.pushClassMethod(\\n        classBody,\\n        method,\\n        isGenerator,\\n        isAsync,\\n        isConstructor,\\n        allowsDirectSuper,\\n      );\\n\\n      if (method.params && isConstructor) {\\n        const params = method.params;\\n        if (params.length > 0 && this.isThisParam(params[0])) {\\n          this.raise(FlowErrors.ThisParamBannedInConstructor, { at: method });\\n        }\\n        // estree support\\n      } else if (\\n        // @ts-expect-error TS does not know about the face that estree can replace ClassMethod with MethodDefinition\\n        method.type === \\\"MethodDefinition\\\" &&\\n        isConstructor &&\\n        // @ts-expect-error estree\\n        method.value.params\\n      ) {\\n        // @ts-expect-error estree\\n        const params = method.value.params;\\n        if (params.length > 0 && this.isThisParam(params[0])) {\\n          this.raise(FlowErrors.ThisParamBannedInConstructor, { at: method });\\n        }\\n      }\\n    }\\n\\n    pushClassPrivateMethod(\\n      classBody: N.ClassBody,\\n      method: N.ClassPrivateMethod,\\n      isGenerator: boolean,\\n      isAsync: boolean,\\n    ): void {\\n      if ((method as any).variance) {\\n        this.unexpected((method as any).variance.loc.start);\\n      }\\n      delete (method as any).variance;\\n      if (this.match(tt.lt)) {\\n        method.typeParameters = this.flowParseTypeParameterDeclaration();\\n      }\\n\\n      super.pushClassPrivateMethod(classBody, method, isGenerator, isAsync);\\n    }\\n\\n    // parse a the super class type parameters and implements\\n    parseClassSuper(node: N.Class): void {\\n      super.parseClassSuper(node);\\n      if (node.superClass && this.match(tt.lt)) {\\n        node.superTypeParameters = this.flowParseTypeParameterInstantiation();\\n      }\\n      if (this.isContextual(tt._implements)) {\\n        this.next();\\n        const implemented: N.FlowClassImplements[] = (node.implements = []);\\n        do {\\n          const node = this.startNode();\\n          node.id = this.flowParseRestrictedIdentifier(/*liberal*/ true);\\n          if (this.match(tt.lt)) {\\n            node.typeParameters = this.flowParseTypeParameterInstantiation();\\n          } else {\\n            node.typeParameters = null;\\n          }\\n          implemented.push(this.finishNode(node, \\\"ClassImplements\\\"));\\n        } while (this.eat(tt.comma));\\n      }\\n    }\\n\\n    checkGetterSetterParams(method: N.ObjectMethod | N.ClassMethod): void {\\n      super.checkGetterSetterParams(method);\\n      const params = this.getObjectOrClassMethodParams(method);\\n      if (params.length > 0) {\\n        const param = params[0];\\n        if (this.isThisParam(param) && method.kind === \\\"get\\\") {\\n          this.raise(FlowErrors.GetterMayNotHaveThisParam, { at: param });\\n        } else if (this.isThisParam(param)) {\\n          this.raise(FlowErrors.SetterMayNotHaveThisParam, { at: param });\\n        }\\n      }\\n    }\\n\\n    parsePropertyNamePrefixOperator(\\n      node: N.ObjectOrClassMember | N.ClassMember,\\n    ): void {\\n      node.variance = this.flowParseVariance();\\n    }\\n\\n    // parse type parameters for object method shorthand\\n    parseObjPropValue(\\n      prop: Undone<N.ObjectMethod | N.ObjectProperty>,\\n      startLoc: Position | undefined | null,\\n      isGenerator: boolean,\\n      isAsync: boolean,\\n      isPattern: boolean,\\n      isAccessor: boolean,\\n      refExpressionErrors?: ExpressionErrors | null,\\n    ): N.ObjectMethod | N.ObjectProperty {\\n      if ((prop as any).variance) {\\n        this.unexpected((prop as any).variance.loc.start);\\n      }\\n      delete (prop as any).variance;\\n\\n      let typeParameters;\\n\\n      // method shorthand\\n      if (this.match(tt.lt) && !isAccessor) {\\n        typeParameters = this.flowParseTypeParameterDeclaration();\\n        if (!this.match(tt.parenL)) this.unexpected();\\n      }\\n\\n      const result = super.parseObjPropValue(\\n        prop,\\n        startLoc,\\n        isGenerator,\\n        isAsync,\\n        isPattern,\\n        isAccessor,\\n        refExpressionErrors,\\n      );\\n\\n      // add typeParameters if we found them\\n      if (typeParameters) {\\n        (result.value || result).typeParameters = typeParameters;\\n      }\\n      return result;\\n    }\\n\\n    parseAssignableListItemTypes(param: N.Pattern): N.Pattern {\\n      if (this.eat(tt.question)) {\\n        if (param.type !== \\\"Identifier\\\") {\\n          this.raise(FlowErrors.PatternIsOptional, { at: param });\\n        }\\n        if (this.isThisParam(param)) {\\n          this.raise(FlowErrors.ThisParamMayNotBeOptional, { at: param });\\n        }\\n\\n        (param as any as N.Identifier).optional = true;\\n      }\\n      if (this.match(tt.colon)) {\\n        // @ts-expect-error: refine typings\\n        param.typeAnnotation = this.flowParseTypeAnnotation();\\n      } else if (this.isThisParam(param)) {\\n        this.raise(FlowErrors.ThisParamAnnotationRequired, { at: param });\\n      }\\n\\n      if (this.match(tt.eq) && this.isThisParam(param)) {\\n        this.raise(FlowErrors.ThisParamNoDefault, { at: param });\\n      }\\n\\n      this.resetEndLocation(param);\\n      return param;\\n    }\\n\\n    parseMaybeDefault(\\n      startLoc?: Position | null,\\n      left?: N.Pattern | null,\\n    ): N.Pattern {\\n      const node = super.parseMaybeDefault(startLoc, left);\\n\\n      if (\\n        node.type === \\\"AssignmentPattern\\\" &&\\n        node.typeAnnotation &&\\n        node.right.start < node.typeAnnotation.start\\n      ) {\\n        this.raise(FlowErrors.TypeBeforeInitializer, {\\n          at: node.typeAnnotation,\\n        });\\n      }\\n\\n      return node;\\n    }\\n\\n    shouldParseDefaultImport(node: N.ImportDeclaration): boolean {\\n      if (!hasTypeImportKind(node)) {\\n        return super.shouldParseDefaultImport(node);\\n      }\\n\\n      return isMaybeDefaultImport(this.state.type);\\n    }\\n\\n    checkImportReflection(node: Undone<N.ImportDeclaration>) {\\n      super.checkImportReflection(node);\\n      if (node.module && node.importKind !== \\\"value\\\") {\\n        this.raise(FlowErrors.ImportReflectionHasImportType, {\\n          at: node.specifiers[0].loc.start,\\n        });\\n      }\\n    }\\n\\n    parseImportSpecifierLocal<\\n      T extends\\n        | N.ImportSpecifier\\n        | N.ImportDefaultSpecifier\\n        | N.ImportNamespaceSpecifier,\\n    >(node: N.ImportDeclaration, specifier: Undone<T>, type: T[\\\"type\\\"]): void {\\n      specifier.local = hasTypeImportKind(node)\\n        ? this.flowParseRestrictedIdentifier(\\n            /* liberal */ true,\\n            /* declaration */ true,\\n          )\\n        : this.parseIdentifier();\\n\\n      node.specifiers.push(this.finishImportSpecifier(specifier, type));\\n    }\\n\\n    // parse typeof and type imports\\n    maybeParseDefaultImportSpecifier(node: N.ImportDeclaration): boolean {\\n      node.importKind = \\\"value\\\";\\n\\n      let kind = null;\\n      if (this.match(tt._typeof)) {\\n        kind = \\\"typeof\\\" as const;\\n      } else if (this.isContextual(tt._type)) {\\n        kind = \\\"type\\\" as const;\\n      }\\n      if (kind) {\\n        const lh = this.lookahead();\\n        const { type } = lh;\\n\\n        // import type * is not allowed\\n        if (kind === \\\"type\\\" && type === tt.star) {\\n          // FIXME: lh.start?\\n          this.unexpected(null, lh.type);\\n        }\\n\\n        if (\\n          isMaybeDefaultImport(type) ||\\n          type === tt.braceL ||\\n          type === tt.star\\n        ) {\\n          this.next();\\n          node.importKind = kind;\\n        }\\n      }\\n\\n      return super.maybeParseDefaultImportSpecifier(node);\\n    }\\n\\n    // parse import-type/typeof shorthand\\n    parseImportSpecifier(\\n      specifier: any,\\n      importedIsString: boolean,\\n      isInTypeOnlyImport: boolean,\\n      // eslint-disable-next-line @typescript-eslint/no-unused-vars\\n      isMaybeTypeOnly: boolean,\\n      // eslint-disable-next-line @typescript-eslint/no-unused-vars\\n      bindingType: BindingTypes | undefined,\\n    ): N.ImportSpecifier {\\n      const firstIdent = specifier.imported;\\n\\n      let specifierTypeKind = null;\\n      if (firstIdent.type === \\\"Identifier\\\") {\\n        if (firstIdent.name === \\\"type\\\") {\\n          specifierTypeKind = \\\"type\\\";\\n        } else if (firstIdent.name === \\\"typeof\\\") {\\n          specifierTypeKind = \\\"typeof\\\";\\n        }\\n      }\\n\\n      let isBinding = false;\\n      if (this.isContextual(tt._as) && !this.isLookaheadContextual(\\\"as\\\")) {\\n        const as_ident = this.parseIdentifier(true);\\n        if (\\n          specifierTypeKind !== null &&\\n          !tokenIsKeywordOrIdentifier(this.state.type)\\n        ) {\\n          // `import {type as ,` or `import {type as }`\\n          specifier.imported = as_ident;\\n          specifier.importKind = specifierTypeKind;\\n          specifier.local = cloneIdentifier(as_ident);\\n        } else {\\n          // `import {type as foo`\\n          specifier.imported = firstIdent;\\n          specifier.importKind = null;\\n          specifier.local = this.parseIdentifier();\\n        }\\n      } else {\\n        if (\\n          specifierTypeKind !== null &&\\n          tokenIsKeywordOrIdentifier(this.state.type)\\n        ) {\\n          // `import {type foo`\\n          specifier.imported = this.parseIdentifier(true);\\n          specifier.importKind = specifierTypeKind;\\n        } else {\\n          if (importedIsString) {\\n            /*:: invariant(firstIdent instanceof N.StringLiteral) */\\n            throw this.raise(Errors.ImportBindingIsString, {\\n              at: specifier,\\n              importName: firstIdent.value,\\n            });\\n          }\\n          /*:: invariant(firstIdent instanceof N.Node) */\\n          specifier.imported = firstIdent;\\n          specifier.importKind = null;\\n        }\\n\\n        if (this.eatContextual(tt._as)) {\\n          specifier.local = this.parseIdentifier();\\n        } else {\\n          isBinding = true;\\n          specifier.local = cloneIdentifier(specifier.imported);\\n        }\\n      }\\n\\n      const specifierIsTypeImport = hasTypeImportKind(specifier);\\n\\n      if (isInTypeOnlyImport && specifierIsTypeImport) {\\n        this.raise(FlowErrors.ImportTypeShorthandOnlyInPureImport, {\\n          at: specifier,\\n        });\\n      }\\n\\n      if (isInTypeOnlyImport || specifierIsTypeImport) {\\n        this.checkReservedType(\\n          specifier.local.name,\\n          specifier.local.loc.start,\\n          /* declaration */ true,\\n        );\\n      }\\n\\n      if (isBinding && !isInTypeOnlyImport && !specifierIsTypeImport) {\\n        this.checkReservedWord(\\n          specifier.local.name,\\n          specifier.loc.start,\\n          true,\\n          true,\\n        );\\n      }\\n\\n      return this.finishImportSpecifier(specifier, \\\"ImportSpecifier\\\");\\n    }\\n\\n    parseBindingAtom(): N.Pattern {\\n      switch (this.state.type) {\\n        case tt._this:\\n          // \\\"this\\\" may be the name of a parameter, so allow it.\\n          return this.parseIdentifier(/* liberal */ true);\\n        default:\\n          return super.parseBindingAtom();\\n      }\\n    }\\n\\n    // parse function type parameters - function foo<T>() {}\\n    parseFunctionParams(\\n      node: Undone<N.Function>,\\n      isConstructor: boolean,\\n    ): void {\\n      // @ts-expect-error kind may not index node\\n      const kind = node.kind;\\n      if (kind !== \\\"get\\\" && kind !== \\\"set\\\" && this.match(tt.lt)) {\\n        node.typeParameters = this.flowParseTypeParameterDeclaration();\\n      }\\n      super.parseFunctionParams(node, isConstructor);\\n    }\\n\\n    // parse flow type annotations on variable declarator heads - let foo: string = bar\\n    parseVarId(\\n      decl: N.VariableDeclarator,\\n      kind: \\\"var\\\" | \\\"let\\\" | \\\"const\\\",\\n    ): void {\\n      super.parseVarId(decl, kind);\\n      if (this.match(tt.colon)) {\\n        // @ts-expect-error: refine typings\\n        decl.id.typeAnnotation = this.flowParseTypeAnnotation();\\n        this.resetEndLocation(decl.id); // set end position to end of type\\n      }\\n    }\\n\\n    // parse the return type of an async arrow function - let foo = (async (): number => {});\\n    parseAsyncArrowFromCallExpression(\\n      node: N.ArrowFunctionExpression,\\n      call: N.CallExpression,\\n    ): N.ArrowFunctionExpression {\\n      if (this.match(tt.colon)) {\\n        const oldNoAnonFunctionType = this.state.noAnonFunctionType;\\n        this.state.noAnonFunctionType = true;\\n        // @ts-expect-error refine typings\\n        node.returnType = this.flowParseTypeAnnotation();\\n        this.state.noAnonFunctionType = oldNoAnonFunctionType;\\n      }\\n\\n      return super.parseAsyncArrowFromCallExpression(node, call);\\n    }\\n\\n    // todo description\\n    shouldParseAsyncArrow(): boolean {\\n      return this.match(tt.colon) || super.shouldParseAsyncArrow();\\n    }\\n\\n    // We need to support type parameter declarations for arrow functions. This\\n    // is tricky. There are three situations we need to handle\\n    //\\n    // 1. This is either JSX or an arrow function. We'll try JSX first. If that\\n    //    fails, we'll try an arrow function. If that fails, we'll throw the JSX\\n    //    error.\\n    // 2. This is an arrow function. We'll parse the type parameter declaration,\\n    //    parse the rest, make sure the rest is an arrow function, and go from\\n    //    there\\n    // 3. This is neither. Just call the super method\\n    parseMaybeAssign(\\n      refExpressionErrors?: ExpressionErrors | null,\\n      afterLeftParse?: Function,\\n    ): N.Expression {\\n      let state = null;\\n\\n      let jsx;\\n\\n      if (\\n        this.hasPlugin(\\\"jsx\\\") &&\\n        (this.match(tt.jsxTagStart) || this.match(tt.lt))\\n      ) {\\n        state = this.state.clone();\\n\\n        jsx = this.tryParse(\\n          () => super.parseMaybeAssign(refExpressionErrors, afterLeftParse),\\n          state,\\n        );\\n\\n        /*:: invariant(!jsx.aborted) */\\n        /*:: invariant(jsx.node != null) */\\n        if (!jsx.error) return jsx.node;\\n\\n        // Remove `tc.j_expr` and `tc.j_oTag` from context added\\n        // by parsing `jsxTagStart` to stop the JSX plugin from\\n        // messing with the tokens\\n        const { context } = this.state;\\n        const currentContext = context[context.length - 1];\\n        if (currentContext === tc.j_oTag || currentContext === tc.j_expr) {\\n          context.pop();\\n        }\\n      }\\n\\n      if (jsx?.error || this.match(tt.lt)) {\\n        state = state || this.state.clone();\\n\\n        let typeParameters: N.TypeParameterDeclaration;\\n\\n        const arrow = this.tryParse(abort => {\\n          typeParameters = this.flowParseTypeParameterDeclaration();\\n\\n          const arrowExpression = this.forwardNoArrowParamsConversionAt(\\n            typeParameters,\\n            () => {\\n              const result = super.parseMaybeAssign(\\n                refExpressionErrors,\\n                afterLeftParse,\\n              );\\n\\n              this.resetStartLocationFromNode(result, typeParameters);\\n\\n              return result;\\n            },\\n          );\\n\\n          // <T>(() => {});\\n          // <T>(() => {}: any);\\n          if (arrowExpression.extra?.parenthesized) abort();\\n\\n          // The above can return a TypeCastExpression when the arrow\\n          // expression is not wrapped in parens. See also `this.parseParenItem`.\\n          // (<T>() => {}: any);\\n          const expr = this.maybeUnwrapTypeCastExpression(arrowExpression);\\n\\n          if (expr.type !== \\\"ArrowFunctionExpression\\\") abort();\\n\\n          expr.typeParameters = typeParameters;\\n          this.resetStartLocationFromNode(expr, typeParameters);\\n\\n          return arrowExpression;\\n        }, state);\\n\\n        let arrowExpression:\\n          | N.ArrowFunctionExpression\\n          | N.TypeCastExpression\\n          | undefined\\n          | null = null;\\n\\n        if (\\n          arrow.node &&\\n          // @ts-expect-error: refine tryParse typings\\n          this.maybeUnwrapTypeCastExpression(arrow.node).type ===\\n            \\\"ArrowFunctionExpression\\\"\\n        ) {\\n          if (!arrow.error && !arrow.aborted) {\\n            // <T> async () => {}\\n            // @ts-expect-error: refine tryParse typings\\n            if (arrow.node.async) {\\n              /*:: invariant(typeParameters) */\\n              this.raise(\\n                FlowErrors.UnexpectedTypeParameterBeforeAsyncArrowFunction,\\n                { at: typeParameters },\\n              );\\n            }\\n            // @ts-expect-error: refine tryParse typings\\n            return arrow.node;\\n          }\\n\\n          // @ts-expect-error: refine typings\\n          arrowExpression = arrow.node;\\n        }\\n\\n        // If we are here, both JSX and Flow parsing attempts failed.\\n        // Give the precedence to the JSX error, except if JSX had an\\n        // unrecoverable error while Flow didn't.\\n        // If the error is recoverable, we can only re-report it if there is\\n        // a node we can return.\\n\\n        if (jsx?.node) {\\n          /*:: invariant(jsx.failState) */\\n          this.state = jsx.failState;\\n          return jsx.node;\\n        }\\n\\n        if (arrowExpression) {\\n          /*:: invariant(arrow.failState) */\\n          this.state = arrow.failState;\\n          return arrowExpression;\\n        }\\n\\n        if (jsx?.thrown) throw jsx.error;\\n        if (arrow.thrown) throw arrow.error;\\n\\n        /*:: invariant(typeParameters) */\\n        throw this.raise(FlowErrors.UnexpectedTokenAfterTypeParameter, {\\n          at: typeParameters,\\n        });\\n      }\\n\\n      return super.parseMaybeAssign(refExpressionErrors, afterLeftParse);\\n    }\\n\\n    // handle return types for arrow functions\\n    parseArrow(\\n      node: Undone<N.ArrowFunctionExpression>,\\n    ): Undone<N.ArrowFunctionExpression> | undefined | null {\\n      if (this.match(tt.colon)) {\\n        // @ts-expect-error todo(flow->ts)\\n        const result = this.tryParse(() => {\\n          const oldNoAnonFunctionType = this.state.noAnonFunctionType;\\n          this.state.noAnonFunctionType = true;\\n\\n          const typeNode = this.startNode<N.TypeAnnotation>();\\n\\n          [\\n            typeNode.typeAnnotation,\\n            // @ts-expect-error (destructuring not supported yet)\\n            node.predicate,\\n          ] = this.flowParseTypeAndPredicateInitialiser();\\n\\n          this.state.noAnonFunctionType = oldNoAnonFunctionType;\\n\\n          if (this.canInsertSemicolon()) this.unexpected();\\n          if (!this.match(tt.arrow)) this.unexpected();\\n\\n          return typeNode;\\n        });\\n\\n        if (result.thrown) return null;\\n        /*:: invariant(result.node) */\\n\\n        if (result.error) this.state = result.failState;\\n\\n        // assign after it is clear it is an arrow\\n        // @ts-expect-error todo(flow->ts)\\n        node.returnType = result.node.typeAnnotation\\n          ? this.finishNode(result.node, \\\"TypeAnnotation\\\")\\n          : null;\\n      }\\n\\n      return super.parseArrow(node);\\n    }\\n\\n    shouldParseArrow(params: Array<N.Node>): boolean {\\n      return this.match(tt.colon) || super.shouldParseArrow(params);\\n    }\\n\\n    setArrowFunctionParameters(\\n      node: N.ArrowFunctionExpression,\\n      params: N.Pattern[],\\n    ): void {\\n      if (this.state.noArrowParamsConversionAt.indexOf(node.start) !== -1) {\\n        node.params = params;\\n      } else {\\n        super.setArrowFunctionParameters(node, params);\\n      }\\n    }\\n\\n    checkParams(\\n      node: N.Function,\\n      allowDuplicates: boolean,\\n      isArrowFunction?: boolean | null,\\n      strictModeChanged: boolean = true,\\n    ): void {\\n      if (\\n        isArrowFunction &&\\n        this.state.noArrowParamsConversionAt.indexOf(node.start) !== -1\\n      ) {\\n        return;\\n      }\\n\\n      // ensure the `this` param is first, if it exists\\n      for (let i = 0; i < node.params.length; i++) {\\n        if (this.isThisParam(node.params[i]) && i > 0) {\\n          this.raise(FlowErrors.ThisParamMustBeFirst, { at: node.params[i] });\\n        }\\n      }\\n\\n      super.checkParams(\\n        node,\\n        allowDuplicates,\\n        isArrowFunction,\\n        strictModeChanged,\\n      );\\n    }\\n\\n    parseParenAndDistinguishExpression(canBeArrow: boolean): N.Expression {\\n      return super.parseParenAndDistinguishExpression(\\n        canBeArrow && this.state.noArrowAt.indexOf(this.state.start) === -1,\\n      );\\n    }\\n\\n    parseSubscripts(\\n      base: N.Expression,\\n\\n      startLoc: Position,\\n      noCalls?: boolean | null,\\n    ): N.Expression {\\n      if (\\n        base.type === \\\"Identifier\\\" &&\\n        base.name === \\\"async\\\" &&\\n        this.state.noArrowAt.indexOf(startLoc.index) !== -1\\n      ) {\\n        this.next();\\n\\n        const node = this.startNodeAt(startLoc);\\n        node.callee = base;\\n        node.arguments = super.parseCallExpressionArguments(tt.parenR, false);\\n        base = this.finishNode(node, \\\"CallExpression\\\");\\n      } else if (\\n        base.type === \\\"Identifier\\\" &&\\n        base.name === \\\"async\\\" &&\\n        this.match(tt.lt)\\n      ) {\\n        const state = this.state.clone();\\n        const arrow = this.tryParse(\\n          abort => this.parseAsyncArrowWithTypeParameters(startLoc) || abort(),\\n          state,\\n        );\\n\\n        /*:: invariant(arrow.node != null) */\\n        // @ts-expect-error: refine tryParse typings\\n        if (!arrow.error && !arrow.aborted) return arrow.node;\\n\\n        const result = this.tryParse(\\n          () => super.parseSubscripts(base, startLoc, noCalls),\\n          state,\\n        );\\n\\n        if (result.node && !result.error) return result.node;\\n\\n        if (arrow.node) {\\n          this.state = arrow.failState;\\n          // @ts-expect-error: refine tryParse typings\\n          return arrow.node;\\n        }\\n\\n        if (result.node) {\\n          this.state = result.failState;\\n          return result.node;\\n        }\\n\\n        throw arrow.error || result.error;\\n      }\\n\\n      return super.parseSubscripts(base, startLoc, noCalls);\\n    }\\n\\n    parseSubscript(\\n      base: N.Expression,\\n\\n      startLoc: Position,\\n      noCalls: boolean | undefined | null,\\n      subscriptState: N.ParseSubscriptState,\\n    ): N.Expression {\\n      if (this.match(tt.questionDot) && this.isLookaheadToken_lt()) {\\n        subscriptState.optionalChainMember = true;\\n        if (noCalls) {\\n          subscriptState.stop = true;\\n          return base;\\n        }\\n        this.next();\\n        const node = this.startNodeAt<N.OptionalCallExpression>(startLoc);\\n        node.callee = base;\\n        node.typeArguments = this.flowParseTypeParameterInstantiation();\\n        this.expect(tt.parenL);\\n        node.arguments = this.parseCallExpressionArguments(tt.parenR, false);\\n        node.optional = true;\\n        return this.finishCallExpression(node, /* optional */ true);\\n      } else if (!noCalls && this.shouldParseTypes() && this.match(tt.lt)) {\\n        const node = this.startNodeAt<\\n          N.OptionalCallExpression | N.CallExpression\\n        >(startLoc);\\n        node.callee = base;\\n\\n        const result = this.tryParse(() => {\\n          node.typeArguments =\\n            this.flowParseTypeParameterInstantiationCallOrNew();\\n          this.expect(tt.parenL);\\n          node.arguments = super.parseCallExpressionArguments(tt.parenR, false);\\n          if (subscriptState.optionalChainMember) {\\n            (node as Undone<N.OptionalCallExpression>).optional = false;\\n          }\\n          return this.finishCallExpression(\\n            node,\\n            subscriptState.optionalChainMember,\\n          );\\n        });\\n\\n        if (result.node) {\\n          if (result.error) this.state = result.failState;\\n          return result.node;\\n        }\\n      }\\n\\n      return super.parseSubscript(\\n        base,\\n\\n        startLoc,\\n        noCalls,\\n        subscriptState,\\n      );\\n    }\\n\\n    parseNewCallee(node: N.NewExpression): void {\\n      super.parseNewCallee(node);\\n\\n      let targs = null;\\n      if (this.shouldParseTypes() && this.match(tt.lt)) {\\n        targs = this.tryParse(() =>\\n          this.flowParseTypeParameterInstantiationCallOrNew(),\\n        ).node;\\n      }\\n      node.typeArguments = targs;\\n    }\\n\\n    parseAsyncArrowWithTypeParameters(\\n      startLoc: Position,\\n    ): N.ArrowFunctionExpression | undefined | null {\\n      const node = this.startNodeAt<N.ArrowFunctionExpression>(startLoc);\\n      this.parseFunctionParams(node, false);\\n      if (!this.parseArrow(node)) return;\\n      return super.parseArrowExpression(\\n        node,\\n        /* params */ undefined,\\n        /* isAsync */ true,\\n      );\\n    }\\n\\n    readToken_mult_modulo(code: number): void {\\n      const next = this.input.charCodeAt(this.state.pos + 1);\\n      if (\\n        code === charCodes.asterisk &&\\n        next === charCodes.slash &&\\n        this.state.hasFlowComment\\n      ) {\\n        this.state.hasFlowComment = false;\\n        this.state.pos += 2;\\n        this.nextToken();\\n        return;\\n      }\\n\\n      super.readToken_mult_modulo(code);\\n    }\\n\\n    readToken_pipe_amp(code: number): void {\\n      const next = this.input.charCodeAt(this.state.pos + 1);\\n      if (\\n        code === charCodes.verticalBar &&\\n        next === charCodes.rightCurlyBrace\\n      ) {\\n        // '|}'\\n        this.finishOp(tt.braceBarR, 2);\\n        return;\\n      }\\n\\n      super.readToken_pipe_amp(code);\\n    }\\n\\n    parseTopLevel(file: N.File, program: N.Program): N.File {\\n      const fileNode = super.parseTopLevel(file, program);\\n      if (this.state.hasFlowComment) {\\n        this.raise(FlowErrors.UnterminatedFlowComment, {\\n          at: this.state.curPosition(),\\n        });\\n      }\\n      return fileNode;\\n    }\\n\\n    skipBlockComment(): N.CommentBlock | undefined {\\n      if (this.hasPlugin(\\\"flowComments\\\") && this.skipFlowComment()) {\\n        if (this.state.hasFlowComment) {\\n          throw this.raise(FlowErrors.NestedFlowComment, {\\n            at: this.state.startLoc,\\n          });\\n        }\\n        this.hasFlowCommentCompletion();\\n        const commentSkip = this.skipFlowComment();\\n        if (commentSkip) {\\n          this.state.pos += commentSkip;\\n          this.state.hasFlowComment = true;\\n        }\\n        return;\\n      }\\n\\n      return super.skipBlockComment(this.state.hasFlowComment ? \\\"*-/\\\" : \\\"*/\\\");\\n    }\\n\\n    skipFlowComment(): number | false {\\n      const { pos } = this.state;\\n      let shiftToFirstNonWhiteSpace = 2;\\n      while (\\n        [charCodes.space, charCodes.tab].includes(\\n          // @ts-expect-error testing whether a number is included\\n          this.input.charCodeAt(pos + shiftToFirstNonWhiteSpace),\\n        )\\n      ) {\\n        shiftToFirstNonWhiteSpace++;\\n      }\\n\\n      const ch2 = this.input.charCodeAt(shiftToFirstNonWhiteSpace + pos);\\n      const ch3 = this.input.charCodeAt(shiftToFirstNonWhiteSpace + pos + 1);\\n\\n      if (ch2 === charCodes.colon && ch3 === charCodes.colon) {\\n        return shiftToFirstNonWhiteSpace + 2; // check for /*::\\n      }\\n      if (\\n        this.input.slice(\\n          shiftToFirstNonWhiteSpace + pos,\\n          shiftToFirstNonWhiteSpace + pos + 12,\\n        ) === \\\"flow-include\\\"\\n      ) {\\n        return shiftToFirstNonWhiteSpace + 12; // check for /*flow-include\\n      }\\n      if (ch2 === charCodes.colon && ch3 !== charCodes.colon) {\\n        return shiftToFirstNonWhiteSpace; // check for /*:, advance up to :\\n      }\\n      return false;\\n    }\\n\\n    hasFlowCommentCompletion(): void {\\n      const end = this.input.indexOf(\\\"*/\\\", this.state.pos);\\n      if (end === -1) {\\n        throw this.raise(Errors.UnterminatedComment, {\\n          at: this.state.curPosition(),\\n        });\\n      }\\n    }\\n\\n    // Flow enum parsing\\n\\n    flowEnumErrorBooleanMemberNotInitialized(\\n      loc: Position,\\n      {\\n        enumName,\\n        memberName,\\n      }: {\\n        enumName: string;\\n        memberName: string;\\n      },\\n    ): void {\\n      this.raise(FlowErrors.EnumBooleanMemberNotInitialized, {\\n        at: loc,\\n        memberName,\\n        enumName,\\n      });\\n    }\\n\\n    flowEnumErrorInvalidMemberInitializer(\\n      loc: Position,\\n      enumContext: EnumContext,\\n    ) {\\n      return this.raise(\\n        !enumContext.explicitType\\n          ? FlowErrors.EnumInvalidMemberInitializerUnknownType\\n          : enumContext.explicitType === \\\"symbol\\\"\\n          ? FlowErrors.EnumInvalidMemberInitializerSymbolType\\n          : FlowErrors.EnumInvalidMemberInitializerPrimaryType,\\n        {\\n          at: loc,\\n          ...enumContext,\\n        },\\n      );\\n    }\\n\\n    flowEnumErrorNumberMemberNotInitialized(\\n      loc: Position,\\n      {\\n        enumName,\\n        memberName,\\n      }: {\\n        enumName: string;\\n        memberName: string;\\n      },\\n    ): void {\\n      this.raise(FlowErrors.EnumNumberMemberNotInitialized, {\\n        at: loc,\\n        enumName,\\n        memberName,\\n      });\\n    }\\n\\n    flowEnumErrorStringMemberInconsistentlyInitailized(\\n      node: N.Node,\\n      {\\n        enumName,\\n      }: {\\n        enumName: string;\\n      },\\n    ): void {\\n      this.raise(FlowErrors.EnumStringMemberInconsistentlyInitailized, {\\n        at: node,\\n        enumName,\\n      });\\n    }\\n\\n    flowEnumMemberInit(): EnumMemberInit {\\n      const startLoc = this.state.startLoc;\\n      const endOfInit = () => this.match(tt.comma) || this.match(tt.braceR);\\n      switch (this.state.type) {\\n        case tt.num: {\\n          const literal = this.parseNumericLiteral(this.state.value);\\n          if (endOfInit()) {\\n            return { type: \\\"number\\\", loc: literal.loc.start, value: literal };\\n          }\\n          return { type: \\\"invalid\\\", loc: startLoc };\\n        }\\n        case tt.string: {\\n          const literal = this.parseStringLiteral(this.state.value);\\n          if (endOfInit()) {\\n            return { type: \\\"string\\\", loc: literal.loc.start, value: literal };\\n          }\\n          return { type: \\\"invalid\\\", loc: startLoc };\\n        }\\n        case tt._true:\\n        case tt._false: {\\n          const literal = this.parseBooleanLiteral(this.match(tt._true));\\n          if (endOfInit()) {\\n            return {\\n              type: \\\"boolean\\\",\\n              loc: literal.loc.start,\\n              value: literal,\\n            };\\n          }\\n          return { type: \\\"invalid\\\", loc: startLoc };\\n        }\\n        default:\\n          return { type: \\\"invalid\\\", loc: startLoc };\\n      }\\n    }\\n\\n    flowEnumMemberRaw(): {\\n      id: N.Node;\\n      init: EnumMemberInit;\\n    } {\\n      const loc = this.state.startLoc;\\n      const id = this.parseIdentifier(true);\\n      const init = this.eat(tt.eq)\\n        ? this.flowEnumMemberInit()\\n        : { type: \\\"none\\\" as const, loc };\\n      return { id, init };\\n    }\\n\\n    flowEnumCheckExplicitTypeMismatch(\\n      loc: Position,\\n      context: EnumContext,\\n      expectedType: EnumExplicitType,\\n    ): void {\\n      const { explicitType } = context;\\n      if (explicitType === null) {\\n        return;\\n      }\\n      if (explicitType !== expectedType) {\\n        this.flowEnumErrorInvalidMemberInitializer(loc, context);\\n      }\\n    }\\n\\n    flowEnumMembers({\\n      enumName,\\n      explicitType,\\n    }: {\\n      enumName: string;\\n      explicitType: EnumExplicitType;\\n    }): {\\n      members: {\\n        booleanMembers: Array<N.Node>;\\n        numberMembers: Array<N.Node>;\\n        stringMembers: Array<N.Node>;\\n        defaultedMembers: Array<N.Node>;\\n      };\\n      hasUnknownMembers: boolean;\\n    } {\\n      const seenNames = new Set();\\n      const members = {\\n        // @ts-expect-error: migrate to Babel types\\n        booleanMembers: [],\\n        // @ts-expect-error: migrate to Babel types\\n        numberMembers: [],\\n        // @ts-expect-error: migrate to Babel types\\n        stringMembers: [],\\n        // @ts-expect-error: migrate to Babel types\\n        defaultedMembers: [],\\n      };\\n      let hasUnknownMembers = false;\\n      while (!this.match(tt.braceR)) {\\n        if (this.eat(tt.ellipsis)) {\\n          hasUnknownMembers = true;\\n          break;\\n        }\\n        const memberNode = this.startNode();\\n        const { id, init } = this.flowEnumMemberRaw();\\n        const memberName = id.name;\\n        if (memberName === \\\"\\\") {\\n          continue;\\n        }\\n        if (/^[a-z]/.test(memberName)) {\\n          this.raise(FlowErrors.EnumInvalidMemberName, {\\n            at: id,\\n            memberName,\\n            suggestion: memberName[0].toUpperCase() + memberName.slice(1),\\n            enumName,\\n          });\\n        }\\n        if (seenNames.has(memberName)) {\\n          this.raise(FlowErrors.EnumDuplicateMemberName, {\\n            at: id,\\n            memberName,\\n            enumName,\\n          });\\n        }\\n        seenNames.add(memberName);\\n        const context = { enumName, explicitType, memberName };\\n        memberNode.id = id;\\n        switch (init.type) {\\n          case \\\"boolean\\\": {\\n            this.flowEnumCheckExplicitTypeMismatch(\\n              init.loc,\\n              context,\\n              \\\"boolean\\\",\\n            );\\n            memberNode.init = init.value;\\n            members.booleanMembers.push(\\n              this.finishNode(memberNode, \\\"EnumBooleanMember\\\"),\\n            );\\n            break;\\n          }\\n          case \\\"number\\\": {\\n            this.flowEnumCheckExplicitTypeMismatch(init.loc, context, \\\"number\\\");\\n            memberNode.init = init.value;\\n            members.numberMembers.push(\\n              this.finishNode(memberNode, \\\"EnumNumberMember\\\"),\\n            );\\n            break;\\n          }\\n          case \\\"string\\\": {\\n            this.flowEnumCheckExplicitTypeMismatch(init.loc, context, \\\"string\\\");\\n            memberNode.init = init.value;\\n            members.stringMembers.push(\\n              this.finishNode(memberNode, \\\"EnumStringMember\\\"),\\n            );\\n            break;\\n          }\\n          case \\\"invalid\\\": {\\n            throw this.flowEnumErrorInvalidMemberInitializer(init.loc, context);\\n          }\\n          case \\\"none\\\": {\\n            switch (explicitType) {\\n              case \\\"boolean\\\":\\n                this.flowEnumErrorBooleanMemberNotInitialized(\\n                  init.loc,\\n                  context,\\n                );\\n                break;\\n              case \\\"number\\\":\\n                this.flowEnumErrorNumberMemberNotInitialized(init.loc, context);\\n                break;\\n              default:\\n                members.defaultedMembers.push(\\n                  this.finishNode(memberNode, \\\"EnumDefaultedMember\\\"),\\n                );\\n            }\\n          }\\n        }\\n\\n        if (!this.match(tt.braceR)) {\\n          this.expect(tt.comma);\\n        }\\n      }\\n      return { members, hasUnknownMembers };\\n    }\\n\\n    flowEnumStringMembers(\\n      initializedMembers: Array<N.Node>,\\n      defaultedMembers: Array<N.Node>,\\n      {\\n        enumName,\\n      }: {\\n        enumName: string;\\n      },\\n    ): Array<N.Node> {\\n      if (initializedMembers.length === 0) {\\n        return defaultedMembers;\\n      } else if (defaultedMembers.length === 0) {\\n        return initializedMembers;\\n      } else if (defaultedMembers.length > initializedMembers.length) {\\n        for (const member of initializedMembers) {\\n          this.flowEnumErrorStringMemberInconsistentlyInitailized(member, {\\n            enumName,\\n          });\\n        }\\n        return defaultedMembers;\\n      } else {\\n        for (const member of defaultedMembers) {\\n          this.flowEnumErrorStringMemberInconsistentlyInitailized(member, {\\n            enumName,\\n          });\\n        }\\n        return initializedMembers;\\n      }\\n    }\\n\\n    flowEnumParseExplicitType({\\n      enumName,\\n    }: {\\n      enumName: string;\\n    }): EnumExplicitType {\\n      if (!this.eatContextual(tt._of)) return null;\\n\\n      if (!tokenIsIdentifier(this.state.type)) {\\n        throw this.raise(FlowErrors.EnumInvalidExplicitTypeUnknownSupplied, {\\n          at: this.state.startLoc,\\n          enumName,\\n        });\\n      }\\n\\n      const { value } = this.state;\\n      this.next();\\n\\n      if (\\n        value !== \\\"boolean\\\" &&\\n        value !== \\\"number\\\" &&\\n        value !== \\\"string\\\" &&\\n        value !== \\\"symbol\\\"\\n      ) {\\n        this.raise(FlowErrors.EnumInvalidExplicitType, {\\n          at: this.state.startLoc,\\n          enumName,\\n          invalidEnumType: value,\\n        });\\n      }\\n\\n      return value;\\n    }\\n\\n    flowEnumBody(node: Undone<N.Node>, id: N.Node): N.Node {\\n      const enumName = id.name;\\n      const nameLoc = id.loc.start;\\n      const explicitType = this.flowEnumParseExplicitType({ enumName });\\n      this.expect(tt.braceL);\\n      const { members, hasUnknownMembers } = this.flowEnumMembers({\\n        enumName,\\n        explicitType,\\n      });\\n      node.hasUnknownMembers = hasUnknownMembers;\\n\\n      switch (explicitType) {\\n        case \\\"boolean\\\":\\n          node.explicitType = true;\\n          node.members = members.booleanMembers;\\n          this.expect(tt.braceR);\\n          return this.finishNode(node, \\\"EnumBooleanBody\\\");\\n        case \\\"number\\\":\\n          node.explicitType = true;\\n          node.members = members.numberMembers;\\n          this.expect(tt.braceR);\\n          return this.finishNode(node, \\\"EnumNumberBody\\\");\\n        case \\\"string\\\":\\n          node.explicitType = true;\\n          node.members = this.flowEnumStringMembers(\\n            members.stringMembers,\\n            members.defaultedMembers,\\n            { enumName },\\n          );\\n          this.expect(tt.braceR);\\n          return this.finishNode(node, \\\"EnumStringBody\\\");\\n        case \\\"symbol\\\":\\n          node.members = members.defaultedMembers;\\n          this.expect(tt.braceR);\\n          return this.finishNode(node, \\\"EnumSymbolBody\\\");\\n        default: {\\n          // `explicitType` is `null`\\n          const empty = () => {\\n            node.members = [];\\n            this.expect(tt.braceR);\\n            return this.finishNode(node, \\\"EnumStringBody\\\");\\n          };\\n          node.explicitType = false;\\n\\n          const boolsLen = members.booleanMembers.length;\\n          const numsLen = members.numberMembers.length;\\n          const strsLen = members.stringMembers.length;\\n          const defaultedLen = members.defaultedMembers.length;\\n\\n          if (!boolsLen && !numsLen && !strsLen && !defaultedLen) {\\n            return empty();\\n          } else if (!boolsLen && !numsLen) {\\n            node.members = this.flowEnumStringMembers(\\n              members.stringMembers,\\n              members.defaultedMembers,\\n              { enumName },\\n            );\\n            this.expect(tt.braceR);\\n            return this.finishNode(node, \\\"EnumStringBody\\\");\\n          } else if (!numsLen && !strsLen && boolsLen >= defaultedLen) {\\n            for (const member of members.defaultedMembers) {\\n              this.flowEnumErrorBooleanMemberNotInitialized(member.loc.start, {\\n                enumName,\\n                memberName: member.id.name,\\n              });\\n            }\\n            node.members = members.booleanMembers;\\n            this.expect(tt.braceR);\\n            return this.finishNode(node, \\\"EnumBooleanBody\\\");\\n          } else if (!boolsLen && !strsLen && numsLen >= defaultedLen) {\\n            for (const member of members.defaultedMembers) {\\n              this.flowEnumErrorNumberMemberNotInitialized(member.loc.start, {\\n                enumName,\\n                memberName: member.id.name,\\n              });\\n            }\\n            node.members = members.numberMembers;\\n            this.expect(tt.braceR);\\n            return this.finishNode(node, \\\"EnumNumberBody\\\");\\n          } else {\\n            this.raise(FlowErrors.EnumInconsistentMemberValues, {\\n              at: nameLoc,\\n              enumName,\\n            });\\n            return empty();\\n          }\\n        }\\n      }\\n    }\\n\\n    flowParseEnumDeclaration(node: Undone<N.Node>): N.Node {\\n      const id = this.parseIdentifier();\\n      node.id = id;\\n      node.body = this.flowEnumBody(this.startNode(), id);\\n      return this.finishNode(node, \\\"EnumDeclaration\\\");\\n    }\\n\\n    // check if the next token is a tt.lt\\n    isLookaheadToken_lt(): boolean {\\n      const next = this.nextTokenStart();\\n      if (this.input.charCodeAt(next) === charCodes.lessThan) {\\n        const afterNext = this.input.charCodeAt(next + 1);\\n        return (\\n          afterNext !== charCodes.lessThan && afterNext !== charCodes.equalsTo\\n        );\\n      }\\n      return false;\\n    }\\n\\n    maybeUnwrapTypeCastExpression(node: N.Node) {\\n      return node.type === \\\"TypeCastExpression\\\" ? node.expression : node;\\n    }\\n  };\\n\",\"const entities: {\\n  __proto__: null;\\n  [name: string]: string;\\n} = {\\n  __proto__: null,\\n  quot: \\\"\\\\u0022\\\",\\n  amp: \\\"&\\\",\\n  apos: \\\"\\\\u0027\\\",\\n  lt: \\\"<\\\",\\n  gt: \\\">\\\",\\n  nbsp: \\\"\\\\u00A0\\\",\\n  iexcl: \\\"\\\\u00A1\\\",\\n  cent: \\\"\\\\u00A2\\\",\\n  pound: \\\"\\\\u00A3\\\",\\n  curren: \\\"\\\\u00A4\\\",\\n  yen: \\\"\\\\u00A5\\\",\\n  brvbar: \\\"\\\\u00A6\\\",\\n  sect: \\\"\\\\u00A7\\\",\\n  uml: \\\"\\\\u00A8\\\",\\n  copy: \\\"\\\\u00A9\\\",\\n  ordf: \\\"\\\\u00AA\\\",\\n  laquo: \\\"\\\\u00AB\\\",\\n  not: \\\"\\\\u00AC\\\",\\n  shy: \\\"\\\\u00AD\\\",\\n  reg: \\\"\\\\u00AE\\\",\\n  macr: \\\"\\\\u00AF\\\",\\n  deg: \\\"\\\\u00B0\\\",\\n  plusmn: \\\"\\\\u00B1\\\",\\n  sup2: \\\"\\\\u00B2\\\",\\n  sup3: \\\"\\\\u00B3\\\",\\n  acute: \\\"\\\\u00B4\\\",\\n  micro: \\\"\\\\u00B5\\\",\\n  para: \\\"\\\\u00B6\\\",\\n  middot: \\\"\\\\u00B7\\\",\\n  cedil: \\\"\\\\u00B8\\\",\\n  sup1: \\\"\\\\u00B9\\\",\\n  ordm: \\\"\\\\u00BA\\\",\\n  raquo: \\\"\\\\u00BB\\\",\\n  frac14: \\\"\\\\u00BC\\\",\\n  frac12: \\\"\\\\u00BD\\\",\\n  frac34: \\\"\\\\u00BE\\\",\\n  iquest: \\\"\\\\u00BF\\\",\\n  Agrave: \\\"\\\\u00C0\\\",\\n  Aacute: \\\"\\\\u00C1\\\",\\n  Acirc: \\\"\\\\u00C2\\\",\\n  Atilde: \\\"\\\\u00C3\\\",\\n  Auml: \\\"\\\\u00C4\\\",\\n  Aring: \\\"\\\\u00C5\\\",\\n  AElig: \\\"\\\\u00C6\\\",\\n  Ccedil: \\\"\\\\u00C7\\\",\\n  Egrave: \\\"\\\\u00C8\\\",\\n  Eacute: \\\"\\\\u00C9\\\",\\n  Ecirc: \\\"\\\\u00CA\\\",\\n  Euml: \\\"\\\\u00CB\\\",\\n  Igrave: \\\"\\\\u00CC\\\",\\n  Iacute: \\\"\\\\u00CD\\\",\\n  Icirc: \\\"\\\\u00CE\\\",\\n  Iuml: \\\"\\\\u00CF\\\",\\n  ETH: \\\"\\\\u00D0\\\",\\n  Ntilde: \\\"\\\\u00D1\\\",\\n  Ograve: \\\"\\\\u00D2\\\",\\n  Oacute: \\\"\\\\u00D3\\\",\\n  Ocirc: \\\"\\\\u00D4\\\",\\n  Otilde: \\\"\\\\u00D5\\\",\\n  Ouml: \\\"\\\\u00D6\\\",\\n  times: \\\"\\\\u00D7\\\",\\n  Oslash: \\\"\\\\u00D8\\\",\\n  Ugrave: \\\"\\\\u00D9\\\",\\n  Uacute: \\\"\\\\u00DA\\\",\\n  Ucirc: \\\"\\\\u00DB\\\",\\n  Uuml: \\\"\\\\u00DC\\\",\\n  Yacute: \\\"\\\\u00DD\\\",\\n  THORN: \\\"\\\\u00DE\\\",\\n  szlig: \\\"\\\\u00DF\\\",\\n  agrave: \\\"\\\\u00E0\\\",\\n  aacute: \\\"\\\\u00E1\\\",\\n  acirc: \\\"\\\\u00E2\\\",\\n  atilde: \\\"\\\\u00E3\\\",\\n  auml: \\\"\\\\u00E4\\\",\\n  aring: \\\"\\\\u00E5\\\",\\n  aelig: \\\"\\\\u00E6\\\",\\n  ccedil: \\\"\\\\u00E7\\\",\\n  egrave: \\\"\\\\u00E8\\\",\\n  eacute: \\\"\\\\u00E9\\\",\\n  ecirc: \\\"\\\\u00EA\\\",\\n  euml: \\\"\\\\u00EB\\\",\\n  igrave: \\\"\\\\u00EC\\\",\\n  iacute: \\\"\\\\u00ED\\\",\\n  icirc: \\\"\\\\u00EE\\\",\\n  iuml: \\\"\\\\u00EF\\\",\\n  eth: \\\"\\\\u00F0\\\",\\n  ntilde: \\\"\\\\u00F1\\\",\\n  ograve: \\\"\\\\u00F2\\\",\\n  oacute: \\\"\\\\u00F3\\\",\\n  ocirc: \\\"\\\\u00F4\\\",\\n  otilde: \\\"\\\\u00F5\\\",\\n  ouml: \\\"\\\\u00F6\\\",\\n  divide: \\\"\\\\u00F7\\\",\\n  oslash: \\\"\\\\u00F8\\\",\\n  ugrave: \\\"\\\\u00F9\\\",\\n  uacute: \\\"\\\\u00FA\\\",\\n  ucirc: \\\"\\\\u00FB\\\",\\n  uuml: \\\"\\\\u00FC\\\",\\n  yacute: \\\"\\\\u00FD\\\",\\n  thorn: \\\"\\\\u00FE\\\",\\n  yuml: \\\"\\\\u00FF\\\",\\n  OElig: \\\"\\\\u0152\\\",\\n  oelig: \\\"\\\\u0153\\\",\\n  Scaron: \\\"\\\\u0160\\\",\\n  scaron: \\\"\\\\u0161\\\",\\n  Yuml: \\\"\\\\u0178\\\",\\n  fnof: \\\"\\\\u0192\\\",\\n  circ: \\\"\\\\u02C6\\\",\\n  tilde: \\\"\\\\u02DC\\\",\\n  Alpha: \\\"\\\\u0391\\\",\\n  Beta: \\\"\\\\u0392\\\",\\n  Gamma: \\\"\\\\u0393\\\",\\n  Delta: \\\"\\\\u0394\\\",\\n  Epsilon: \\\"\\\\u0395\\\",\\n  Zeta: \\\"\\\\u0396\\\",\\n  Eta: \\\"\\\\u0397\\\",\\n  Theta: \\\"\\\\u0398\\\",\\n  Iota: \\\"\\\\u0399\\\",\\n  Kappa: \\\"\\\\u039A\\\",\\n  Lambda: \\\"\\\\u039B\\\",\\n  Mu: \\\"\\\\u039C\\\",\\n  Nu: \\\"\\\\u039D\\\",\\n  Xi: \\\"\\\\u039E\\\",\\n  Omicron: \\\"\\\\u039F\\\",\\n  Pi: \\\"\\\\u03A0\\\",\\n  Rho: \\\"\\\\u03A1\\\",\\n  Sigma: \\\"\\\\u03A3\\\",\\n  Tau: \\\"\\\\u03A4\\\",\\n  Upsilon: \\\"\\\\u03A5\\\",\\n  Phi: \\\"\\\\u03A6\\\",\\n  Chi: \\\"\\\\u03A7\\\",\\n  Psi: \\\"\\\\u03A8\\\",\\n  Omega: \\\"\\\\u03A9\\\",\\n  alpha: \\\"\\\\u03B1\\\",\\n  beta: \\\"\\\\u03B2\\\",\\n  gamma: \\\"\\\\u03B3\\\",\\n  delta: \\\"\\\\u03B4\\\",\\n  epsilon: \\\"\\\\u03B5\\\",\\n  zeta: \\\"\\\\u03B6\\\",\\n  eta: \\\"\\\\u03B7\\\",\\n  theta: \\\"\\\\u03B8\\\",\\n  iota: \\\"\\\\u03B9\\\",\\n  kappa: \\\"\\\\u03BA\\\",\\n  lambda: \\\"\\\\u03BB\\\",\\n  mu: \\\"\\\\u03BC\\\",\\n  nu: \\\"\\\\u03BD\\\",\\n  xi: \\\"\\\\u03BE\\\",\\n  omicron: \\\"\\\\u03BF\\\",\\n  pi: \\\"\\\\u03C0\\\",\\n  rho: \\\"\\\\u03C1\\\",\\n  sigmaf: \\\"\\\\u03C2\\\",\\n  sigma: \\\"\\\\u03C3\\\",\\n  tau: \\\"\\\\u03C4\\\",\\n  upsilon: \\\"\\\\u03C5\\\",\\n  phi: \\\"\\\\u03C6\\\",\\n  chi: \\\"\\\\u03C7\\\",\\n  psi: \\\"\\\\u03C8\\\",\\n  omega: \\\"\\\\u03C9\\\",\\n  thetasym: \\\"\\\\u03D1\\\",\\n  upsih: \\\"\\\\u03D2\\\",\\n  piv: \\\"\\\\u03D6\\\",\\n  ensp: \\\"\\\\u2002\\\",\\n  emsp: \\\"\\\\u2003\\\",\\n  thinsp: \\\"\\\\u2009\\\",\\n  zwnj: \\\"\\\\u200C\\\",\\n  zwj: \\\"\\\\u200D\\\",\\n  lrm: \\\"\\\\u200E\\\",\\n  rlm: \\\"\\\\u200F\\\",\\n  ndash: \\\"\\\\u2013\\\",\\n  mdash: \\\"\\\\u2014\\\",\\n  lsquo: \\\"\\\\u2018\\\",\\n  rsquo: \\\"\\\\u2019\\\",\\n  sbquo: \\\"\\\\u201A\\\",\\n  ldquo: \\\"\\\\u201C\\\",\\n  rdquo: \\\"\\\\u201D\\\",\\n  bdquo: \\\"\\\\u201E\\\",\\n  dagger: \\\"\\\\u2020\\\",\\n  Dagger: \\\"\\\\u2021\\\",\\n  bull: \\\"\\\\u2022\\\",\\n  hellip: \\\"\\\\u2026\\\",\\n  permil: \\\"\\\\u2030\\\",\\n  prime: \\\"\\\\u2032\\\",\\n  Prime: \\\"\\\\u2033\\\",\\n  lsaquo: \\\"\\\\u2039\\\",\\n  rsaquo: \\\"\\\\u203A\\\",\\n  oline: \\\"\\\\u203E\\\",\\n  frasl: \\\"\\\\u2044\\\",\\n  euro: \\\"\\\\u20AC\\\",\\n  image: \\\"\\\\u2111\\\",\\n  weierp: \\\"\\\\u2118\\\",\\n  real: \\\"\\\\u211C\\\",\\n  trade: \\\"\\\\u2122\\\",\\n  alefsym: \\\"\\\\u2135\\\",\\n  larr: \\\"\\\\u2190\\\",\\n  uarr: \\\"\\\\u2191\\\",\\n  rarr: \\\"\\\\u2192\\\",\\n  darr: \\\"\\\\u2193\\\",\\n  harr: \\\"\\\\u2194\\\",\\n  crarr: \\\"\\\\u21B5\\\",\\n  lArr: \\\"\\\\u21D0\\\",\\n  uArr: \\\"\\\\u21D1\\\",\\n  rArr: \\\"\\\\u21D2\\\",\\n  dArr: \\\"\\\\u21D3\\\",\\n  hArr: \\\"\\\\u21D4\\\",\\n  forall: \\\"\\\\u2200\\\",\\n  part: \\\"\\\\u2202\\\",\\n  exist: \\\"\\\\u2203\\\",\\n  empty: \\\"\\\\u2205\\\",\\n  nabla: \\\"\\\\u2207\\\",\\n  isin: \\\"\\\\u2208\\\",\\n  notin: \\\"\\\\u2209\\\",\\n  ni: \\\"\\\\u220B\\\",\\n  prod: \\\"\\\\u220F\\\",\\n  sum: \\\"\\\\u2211\\\",\\n  minus: \\\"\\\\u2212\\\",\\n  lowast: \\\"\\\\u2217\\\",\\n  radic: \\\"\\\\u221A\\\",\\n  prop: \\\"\\\\u221D\\\",\\n  infin: \\\"\\\\u221E\\\",\\n  ang: \\\"\\\\u2220\\\",\\n  and: \\\"\\\\u2227\\\",\\n  or: \\\"\\\\u2228\\\",\\n  cap: \\\"\\\\u2229\\\",\\n  cup: \\\"\\\\u222A\\\",\\n  int: \\\"\\\\u222B\\\",\\n  there4: \\\"\\\\u2234\\\",\\n  sim: \\\"\\\\u223C\\\",\\n  cong: \\\"\\\\u2245\\\",\\n  asymp: \\\"\\\\u2248\\\",\\n  ne: \\\"\\\\u2260\\\",\\n  equiv: \\\"\\\\u2261\\\",\\n  le: \\\"\\\\u2264\\\",\\n  ge: \\\"\\\\u2265\\\",\\n  sub: \\\"\\\\u2282\\\",\\n  sup: \\\"\\\\u2283\\\",\\n  nsub: \\\"\\\\u2284\\\",\\n  sube: \\\"\\\\u2286\\\",\\n  supe: \\\"\\\\u2287\\\",\\n  oplus: \\\"\\\\u2295\\\",\\n  otimes: \\\"\\\\u2297\\\",\\n  perp: \\\"\\\\u22A5\\\",\\n  sdot: \\\"\\\\u22C5\\\",\\n  lceil: \\\"\\\\u2308\\\",\\n  rceil: \\\"\\\\u2309\\\",\\n  lfloor: \\\"\\\\u230A\\\",\\n  rfloor: \\\"\\\\u230B\\\",\\n  lang: \\\"\\\\u2329\\\",\\n  rang: \\\"\\\\u232A\\\",\\n  loz: \\\"\\\\u25CA\\\",\\n  spades: \\\"\\\\u2660\\\",\\n  clubs: \\\"\\\\u2663\\\",\\n  hearts: \\\"\\\\u2665\\\",\\n  diams: \\\"\\\\u2666\\\",\\n} as const;\\nexport default entities;\\n\",\"import * as charCodes from \\\"charcodes\\\";\\n\\nimport XHTMLEntities from \\\"./xhtml\\\";\\nimport type Parser from \\\"../../parser\\\";\\nimport type { ExpressionErrors } from \\\"../../parser/util\\\";\\nimport {\\n  tokenComesBeforeExpression,\\n  tokenIsKeyword,\\n  tokenLabelName,\\n  type TokenType,\\n  tt,\\n} from \\\"../../tokenizer/types\\\";\\nimport type { TokContext } from \\\"../../tokenizer/context\\\";\\nimport { types as tc } from \\\"../../tokenizer/context\\\";\\nimport type * as N from \\\"../../types\\\";\\nimport { isIdentifierChar, isIdentifierStart } from \\\"../../util/identifier\\\";\\nimport type { Position } from \\\"../../util/location\\\";\\nimport { isNewLine } from \\\"../../util/whitespace\\\";\\nimport { Errors, ParseErrorEnum } from \\\"../../parse-error\\\";\\nimport { type Undone } from \\\"../../parser/node\\\";\\n\\n/* eslint sort-keys: \\\"error\\\" */\\nconst JsxErrors = ParseErrorEnum`jsx`({\\n  AttributeIsEmpty:\\n    \\\"JSX attributes must only be assigned a non-empty expression.\\\",\\n  MissingClosingTagElement: ({ openingTagName }: { openingTagName: string }) =>\\n    `Expected corresponding JSX closing tag for <${openingTagName}>.`,\\n  MissingClosingTagFragment: \\\"Expected corresponding JSX closing tag for <>.\\\",\\n  UnexpectedSequenceExpression:\\n    \\\"Sequence expressions cannot be directly nested inside JSX. Did you mean to wrap it in parentheses (...)?\\\",\\n  // FIXME: Unify with Errors.UnexpectedToken\\n  UnexpectedToken: ({\\n    unexpected,\\n    HTMLEntity,\\n  }: {\\n    unexpected: string;\\n    HTMLEntity: string;\\n  }) =>\\n    `Unexpected token \\\\`${unexpected}\\\\`. Did you mean \\\\`${HTMLEntity}\\\\` or \\\\`{'${unexpected}'}\\\\`?`,\\n  UnsupportedJsxValue:\\n    \\\"JSX value should be either an expression or a quoted JSX text.\\\",\\n  UnterminatedJsxContent: \\\"Unterminated JSX contents.\\\",\\n  UnwrappedAdjacentJSXElements:\\n    \\\"Adjacent JSX elements must be wrapped in an enclosing tag. Did you want a JSX fragment <>...</>?\\\",\\n});\\n\\n/* eslint-disable sort-keys */\\n\\nfunction isFragment(object?: N.JSXElement | null): boolean {\\n  return object\\n    ? object.type === \\\"JSXOpeningFragment\\\" ||\\n        object.type === \\\"JSXClosingFragment\\\"\\n    : false;\\n}\\n\\n// Transforms JSX element name to string.\\n\\nfunction getQualifiedJSXName(\\n  object: N.JSXIdentifier | N.JSXNamespacedName | N.JSXMemberExpression,\\n): string {\\n  if (object.type === \\\"JSXIdentifier\\\") {\\n    return object.name;\\n  }\\n\\n  if (object.type === \\\"JSXNamespacedName\\\") {\\n    return object.namespace.name + \\\":\\\" + object.name.name;\\n  }\\n\\n  if (object.type === \\\"JSXMemberExpression\\\") {\\n    return (\\n      getQualifiedJSXName(object.object) +\\n      \\\".\\\" +\\n      getQualifiedJSXName(object.property)\\n    );\\n  }\\n\\n  // istanbul ignore next\\n  throw new Error(\\\"Node had unexpected type: \\\" + object.type);\\n}\\n\\nexport interface IJSXParserMixin {\\n  jsxParseOpeningElementAfterName(\\n    node: N.JSXOpeningElement,\\n  ): N.JSXOpeningElement;\\n}\\n\\nexport default (superClass: typeof Parser) =>\\n  class JSXParserMixin extends superClass implements Parser, IJSXParserMixin {\\n    // Reads inline JSX contents token.\\n\\n    jsxReadToken(): void {\\n      let out = \\\"\\\";\\n      let chunkStart = this.state.pos;\\n      for (;;) {\\n        if (this.state.pos >= this.length) {\\n          throw this.raise(JsxErrors.UnterminatedJsxContent, {\\n            at: this.state.startLoc,\\n          });\\n        }\\n\\n        const ch = this.input.charCodeAt(this.state.pos);\\n\\n        switch (ch) {\\n          case charCodes.lessThan:\\n          case charCodes.leftCurlyBrace:\\n            if (this.state.pos === this.state.start) {\\n              if (ch === charCodes.lessThan && this.state.canStartJSXElement) {\\n                ++this.state.pos;\\n                this.finishToken(tt.jsxTagStart);\\n              } else {\\n                super.getTokenFromCode(ch);\\n              }\\n              return;\\n            }\\n            out += this.input.slice(chunkStart, this.state.pos);\\n            this.finishToken(tt.jsxText, out);\\n            return;\\n\\n          case charCodes.ampersand:\\n            out += this.input.slice(chunkStart, this.state.pos);\\n            out += this.jsxReadEntity();\\n            chunkStart = this.state.pos;\\n            break;\\n\\n          case charCodes.greaterThan:\\n          case charCodes.rightCurlyBrace:\\n            if (process.env.BABEL_8_BREAKING) {\\n              this.raise(JsxErrors.UnexpectedToken, {\\n                at: this.state.curPosition(),\\n                unexpected: this.input[this.state.pos],\\n                HTMLEntity:\\n                  ch === charCodes.rightCurlyBrace ? \\\"&rbrace;\\\" : \\\"&gt;\\\",\\n              });\\n            }\\n          /* falls through */\\n\\n          default:\\n            if (isNewLine(ch)) {\\n              out += this.input.slice(chunkStart, this.state.pos);\\n              out += this.jsxReadNewLine(true);\\n              chunkStart = this.state.pos;\\n            } else {\\n              ++this.state.pos;\\n            }\\n        }\\n      }\\n    }\\n\\n    jsxReadNewLine(normalizeCRLF: boolean): string {\\n      const ch = this.input.charCodeAt(this.state.pos);\\n      let out;\\n      ++this.state.pos;\\n      if (\\n        ch === charCodes.carriageReturn &&\\n        this.input.charCodeAt(this.state.pos) === charCodes.lineFeed\\n      ) {\\n        ++this.state.pos;\\n        out = normalizeCRLF ? \\\"\\\\n\\\" : \\\"\\\\r\\\\n\\\";\\n      } else {\\n        out = String.fromCharCode(ch);\\n      }\\n      ++this.state.curLine;\\n      this.state.lineStart = this.state.pos;\\n\\n      return out;\\n    }\\n\\n    jsxReadString(quote: number): void {\\n      let out = \\\"\\\";\\n      let chunkStart = ++this.state.pos;\\n      for (;;) {\\n        if (this.state.pos >= this.length) {\\n          throw this.raise(Errors.UnterminatedString, {\\n            at: this.state.startLoc,\\n          });\\n        }\\n\\n        const ch = this.input.charCodeAt(this.state.pos);\\n        if (ch === quote) break;\\n        if (ch === charCodes.ampersand) {\\n          out += this.input.slice(chunkStart, this.state.pos);\\n          out += this.jsxReadEntity();\\n          chunkStart = this.state.pos;\\n        } else if (isNewLine(ch)) {\\n          out += this.input.slice(chunkStart, this.state.pos);\\n          out += this.jsxReadNewLine(false);\\n          chunkStart = this.state.pos;\\n        } else {\\n          ++this.state.pos;\\n        }\\n      }\\n      out += this.input.slice(chunkStart, this.state.pos++);\\n      this.finishToken(tt.string, out);\\n    }\\n\\n    jsxReadEntity(): string {\\n      const startPos = ++this.state.pos;\\n      if (this.codePointAtPos(this.state.pos) === charCodes.numberSign) {\\n        ++this.state.pos;\\n\\n        let radix = 10;\\n        if (this.codePointAtPos(this.state.pos) === charCodes.lowercaseX) {\\n          radix = 16;\\n          ++this.state.pos;\\n        }\\n\\n        const codePoint = this.readInt(\\n          radix,\\n          /* len */ undefined,\\n          /* forceLen */ false,\\n          /* allowNumSeparator */ \\\"bail\\\",\\n        );\\n        if (\\n          codePoint !== null &&\\n          this.codePointAtPos(this.state.pos) === charCodes.semicolon\\n        ) {\\n          ++this.state.pos;\\n          return String.fromCodePoint(codePoint);\\n        }\\n      } else {\\n        let count = 0;\\n        let semi = false;\\n        while (\\n          count++ < 10 &&\\n          this.state.pos < this.length &&\\n          !(semi = this.codePointAtPos(this.state.pos) == charCodes.semicolon)\\n        ) {\\n          ++this.state.pos;\\n        }\\n\\n        if (semi) {\\n          const desc = this.input.slice(startPos, this.state.pos);\\n          const entity = XHTMLEntities[desc];\\n          ++this.state.pos;\\n\\n          if (entity) {\\n            return entity;\\n          }\\n        }\\n      }\\n\\n      // Not a valid entity\\n      this.state.pos = startPos;\\n      return \\\"&\\\";\\n    }\\n\\n    // Read a JSX identifier (valid tag or attribute name).\\n    //\\n    // Optimized version since JSX identifiers can\\\"t contain\\n    // escape characters and so can be read as single slice.\\n    // Also assumes that first character was already checked\\n    // by isIdentifierStart in readToken.\\n\\n    jsxReadWord(): void {\\n      let ch;\\n      const start = this.state.pos;\\n      do {\\n        ch = this.input.charCodeAt(++this.state.pos);\\n      } while (isIdentifierChar(ch) || ch === charCodes.dash);\\n      this.finishToken(tt.jsxName, this.input.slice(start, this.state.pos));\\n    }\\n\\n    // Parse next token as JSX identifier\\n\\n    jsxParseIdentifier(): N.JSXIdentifier {\\n      const node = this.startNode();\\n      if (this.match(tt.jsxName)) {\\n        node.name = this.state.value;\\n      } else if (tokenIsKeyword(this.state.type)) {\\n        node.name = tokenLabelName(this.state.type);\\n      } else {\\n        this.unexpected();\\n      }\\n      this.next();\\n      return this.finishNode(node, \\\"JSXIdentifier\\\");\\n    }\\n\\n    // Parse namespaced identifier.\\n\\n    jsxParseNamespacedName(): N.JSXNamespacedName {\\n      const startLoc = this.state.startLoc;\\n      const name = this.jsxParseIdentifier();\\n      if (!this.eat(tt.colon)) return name;\\n\\n      const node = this.startNodeAt(startLoc);\\n      node.namespace = name;\\n      node.name = this.jsxParseIdentifier();\\n      return this.finishNode(node, \\\"JSXNamespacedName\\\");\\n    }\\n\\n    // Parses element name in any form - namespaced, member\\n    // or single identifier.\\n\\n    jsxParseElementName():\\n      | N.JSXIdentifier\\n      | N.JSXNamespacedName\\n      | N.JSXMemberExpression {\\n      const startLoc = this.state.startLoc;\\n      let node = this.jsxParseNamespacedName();\\n      if (node.type === \\\"JSXNamespacedName\\\") {\\n        return node;\\n      }\\n      while (this.eat(tt.dot)) {\\n        const newNode = this.startNodeAt(startLoc);\\n        newNode.object = node;\\n        newNode.property = this.jsxParseIdentifier();\\n        node = this.finishNode(newNode, \\\"JSXMemberExpression\\\");\\n      }\\n      return node;\\n    }\\n\\n    // Parses any type of JSX attribute value.\\n\\n    jsxParseAttributeValue(): N.Expression {\\n      let node;\\n      switch (this.state.type) {\\n        case tt.braceL:\\n          node = this.startNode();\\n          this.setContext(tc.brace);\\n          this.next();\\n          node = this.jsxParseExpressionContainer(node, tc.j_oTag);\\n          if (node.expression.type === \\\"JSXEmptyExpression\\\") {\\n            this.raise(JsxErrors.AttributeIsEmpty, { at: node });\\n          }\\n          return node;\\n\\n        case tt.jsxTagStart:\\n        case tt.string:\\n          return this.parseExprAtom();\\n\\n        default:\\n          throw this.raise(JsxErrors.UnsupportedJsxValue, {\\n            at: this.state.startLoc,\\n          });\\n      }\\n    }\\n\\n    // JSXEmptyExpression is unique type since it doesn't actually parse anything,\\n    // and so it should start at the end of last read token (left brace) and finish\\n    // at the beginning of the next one (right brace).\\n\\n    jsxParseEmptyExpression(): N.JSXEmptyExpression {\\n      const node = this.startNodeAt(this.state.lastTokEndLoc);\\n      return this.finishNodeAt(node, \\\"JSXEmptyExpression\\\", this.state.startLoc);\\n    }\\n\\n    // Parse JSX spread child\\n\\n    jsxParseSpreadChild(node: Undone<N.JSXSpreadChild>): N.JSXSpreadChild {\\n      this.next(); // ellipsis\\n      node.expression = this.parseExpression();\\n      this.setContext(tc.j_expr);\\n      this.state.canStartJSXElement = true;\\n      this.expect(tt.braceR);\\n\\n      return this.finishNode(node, \\\"JSXSpreadChild\\\");\\n    }\\n\\n    // Parses JSX expression enclosed into curly brackets.\\n\\n    jsxParseExpressionContainer(\\n      node: Undone<N.JSXExpressionContainer>,\\n      previousContext: TokContext,\\n    ): N.JSXExpressionContainer {\\n      if (this.match(tt.braceR)) {\\n        node.expression = this.jsxParseEmptyExpression();\\n      } else {\\n        const expression = this.parseExpression();\\n\\n        if (process.env.BABEL_8_BREAKING) {\\n          if (\\n            expression.type === \\\"SequenceExpression\\\" &&\\n            !expression.extra?.parenthesized\\n          ) {\\n            this.raise(JsxErrors.UnexpectedSequenceExpression, {\\n              at: expression.expressions[1],\\n            });\\n          }\\n        }\\n\\n        node.expression = expression;\\n      }\\n      this.setContext(previousContext);\\n      this.state.canStartJSXElement = true;\\n      this.expect(tt.braceR);\\n\\n      return this.finishNode(node, \\\"JSXExpressionContainer\\\");\\n    }\\n\\n    // Parses following JSX attribute name-value pair.\\n\\n    jsxParseAttribute(): N.JSXAttribute {\\n      const node = this.startNode();\\n      if (this.match(tt.braceL)) {\\n        this.setContext(tc.brace);\\n        this.next();\\n        this.expect(tt.ellipsis);\\n        node.argument = this.parseMaybeAssignAllowIn();\\n        this.setContext(tc.j_oTag);\\n        this.state.canStartJSXElement = true;\\n        this.expect(tt.braceR);\\n        return this.finishNode(node, \\\"JSXSpreadAttribute\\\");\\n      }\\n      node.name = this.jsxParseNamespacedName();\\n      node.value = this.eat(tt.eq) ? this.jsxParseAttributeValue() : null;\\n      return this.finishNode(node, \\\"JSXAttribute\\\");\\n    }\\n\\n    // Parses JSX opening tag starting after \\\"<\\\".\\n\\n    jsxParseOpeningElementAt(startLoc: Position): N.JSXOpeningElement {\\n      const node = this.startNodeAt<N.JSXOpeningElement | N.JSXOpeningFragment>(\\n        startLoc,\\n      );\\n      if (this.eat(tt.jsxTagEnd)) {\\n        // @ts-expect-error migrate to Babel types\\n        return this.finishNode(node, \\\"JSXOpeningFragment\\\");\\n      }\\n      node.name = this.jsxParseElementName();\\n      return this.jsxParseOpeningElementAfterName(\\n        node as Undone<N.JSXOpeningElement>,\\n      );\\n    }\\n\\n    jsxParseOpeningElementAfterName(\\n      node: Undone<N.JSXOpeningElement>,\\n    ): N.JSXOpeningElement {\\n      const attributes: N.JSXAttribute[] = [];\\n      while (!this.match(tt.slash) && !this.match(tt.jsxTagEnd)) {\\n        attributes.push(this.jsxParseAttribute());\\n      }\\n      node.attributes = attributes;\\n      node.selfClosing = this.eat(tt.slash);\\n      this.expect(tt.jsxTagEnd);\\n      return this.finishNode(node, \\\"JSXOpeningElement\\\");\\n    }\\n\\n    // Parses JSX closing tag starting after \\\"</\\\".\\n\\n    jsxParseClosingElementAt(startLoc: Position): N.JSXClosingElement {\\n      const node = this.startNodeAt(startLoc);\\n      if (this.eat(tt.jsxTagEnd)) {\\n        return this.finishNode(node, \\\"JSXClosingFragment\\\");\\n      }\\n      node.name = this.jsxParseElementName();\\n      this.expect(tt.jsxTagEnd);\\n      return this.finishNode(node, \\\"JSXClosingElement\\\");\\n    }\\n\\n    // Parses entire JSX element, including it\\\"s opening tag\\n    // (starting after \\\"<\\\"), attributes, contents and closing tag.\\n\\n    jsxParseElementAt(startLoc: Position): N.JSXElement {\\n      const node = this.startNodeAt(startLoc);\\n      const children = [];\\n      const openingElement = this.jsxParseOpeningElementAt(startLoc);\\n      let closingElement = null;\\n\\n      if (!openingElement.selfClosing) {\\n        contents: for (;;) {\\n          switch (this.state.type) {\\n            case tt.jsxTagStart:\\n              startLoc = this.state.startLoc;\\n              this.next();\\n              if (this.eat(tt.slash)) {\\n                closingElement = this.jsxParseClosingElementAt(startLoc);\\n                break contents;\\n              }\\n              children.push(this.jsxParseElementAt(startLoc));\\n              break;\\n\\n            case tt.jsxText:\\n              children.push(this.parseExprAtom());\\n              break;\\n\\n            case tt.braceL: {\\n              const node = this.startNode<\\n                N.JSXSpreadChild | N.JSXExpressionContainer\\n              >();\\n              this.setContext(tc.brace);\\n              this.next();\\n              if (this.match(tt.ellipsis)) {\\n                children.push(this.jsxParseSpreadChild(node));\\n              } else {\\n                children.push(\\n                  this.jsxParseExpressionContainer(node, tc.j_expr),\\n                );\\n              }\\n\\n              break;\\n            }\\n            // istanbul ignore next - should never happen\\n            default:\\n              this.unexpected();\\n          }\\n        }\\n\\n        if (\\n          isFragment(openingElement) &&\\n          !isFragment(closingElement) &&\\n          closingElement !== null\\n        ) {\\n          this.raise(JsxErrors.MissingClosingTagFragment, {\\n            at: closingElement,\\n          });\\n        } else if (!isFragment(openingElement) && isFragment(closingElement)) {\\n          this.raise(JsxErrors.MissingClosingTagElement, {\\n            at: closingElement,\\n            openingTagName: getQualifiedJSXName(openingElement.name),\\n          });\\n        } else if (!isFragment(openingElement) && !isFragment(closingElement)) {\\n          if (\\n            getQualifiedJSXName(closingElement.name) !==\\n            getQualifiedJSXName(openingElement.name)\\n          ) {\\n            this.raise(JsxErrors.MissingClosingTagElement, {\\n              at: closingElement,\\n              openingTagName: getQualifiedJSXName(openingElement.name),\\n            });\\n          }\\n        }\\n      }\\n\\n      if (isFragment(openingElement)) {\\n        node.openingFragment = openingElement;\\n        node.closingFragment = closingElement;\\n      } else {\\n        node.openingElement = openingElement;\\n        node.closingElement = closingElement;\\n      }\\n      node.children = children;\\n      if (this.match(tt.lt)) {\\n        throw this.raise(JsxErrors.UnwrappedAdjacentJSXElements, {\\n          at: this.state.startLoc,\\n        });\\n      }\\n\\n      return isFragment(openingElement)\\n        ? this.finishNode(node, \\\"JSXFragment\\\")\\n        : this.finishNode(node, \\\"JSXElement\\\");\\n    }\\n\\n    // Parses entire JSX element from current position.\\n\\n    jsxParseElement(): N.JSXElement {\\n      const startLoc = this.state.startLoc;\\n      this.next();\\n      return this.jsxParseElementAt(startLoc);\\n    }\\n\\n    setContext(newContext: TokContext) {\\n      const { context } = this.state;\\n      context[context.length - 1] = newContext;\\n    }\\n\\n    // ==================================\\n    // Overrides\\n    // ==================================\\n\\n    parseExprAtom(refExpressionErrors?: ExpressionErrors | null): N.Expression {\\n      if (this.match(tt.jsxText)) {\\n        return this.parseLiteral(this.state.value, \\\"JSXText\\\");\\n      } else if (this.match(tt.jsxTagStart)) {\\n        return this.jsxParseElement();\\n      } else if (\\n        this.match(tt.lt) &&\\n        this.input.charCodeAt(this.state.pos) !== charCodes.exclamationMark\\n      ) {\\n        // In case we encounter an lt token here it will always be the start of\\n        // jsx as the lt sign is not allowed in places that expect an expression\\n        this.replaceToken(tt.jsxTagStart);\\n        return this.jsxParseElement();\\n      } else {\\n        return super.parseExprAtom(refExpressionErrors);\\n      }\\n    }\\n\\n    skipSpace() {\\n      const curContext = this.curContext();\\n      if (!curContext.preserveSpace) super.skipSpace();\\n    }\\n\\n    getTokenFromCode(code: number): void {\\n      const context = this.curContext();\\n\\n      if (context === tc.j_expr) {\\n        this.jsxReadToken();\\n        return;\\n      }\\n\\n      if (context === tc.j_oTag || context === tc.j_cTag) {\\n        if (isIdentifierStart(code)) {\\n          this.jsxReadWord();\\n          return;\\n        }\\n\\n        if (code === charCodes.greaterThan) {\\n          ++this.state.pos;\\n          this.finishToken(tt.jsxTagEnd);\\n          return;\\n        }\\n\\n        if (\\n          (code === charCodes.quotationMark || code === charCodes.apostrophe) &&\\n          context === tc.j_oTag\\n        ) {\\n          this.jsxReadString(code);\\n          return;\\n        }\\n      }\\n\\n      if (\\n        code === charCodes.lessThan &&\\n        this.state.canStartJSXElement &&\\n        this.input.charCodeAt(this.state.pos + 1) !== charCodes.exclamationMark\\n      ) {\\n        ++this.state.pos;\\n        this.finishToken(tt.jsxTagStart);\\n        return;\\n      }\\n\\n      super.getTokenFromCode(code);\\n    }\\n\\n    updateContext(prevType: TokenType): void {\\n      const { context, type } = this.state;\\n      if (type === tt.slash && prevType === tt.jsxTagStart) {\\n        // do not consider JSX expr -> JSX open tag -> ... anymore\\n        // reconsider as closing tag context\\n        context.splice(-2, 2, tc.j_cTag);\\n        this.state.canStartJSXElement = false;\\n      } else if (type === tt.jsxTagStart) {\\n        // start opening tag context\\n        context.push(tc.j_oTag);\\n      } else if (type === tt.jsxTagEnd) {\\n        const out = context[context.length - 1];\\n        if ((out === tc.j_oTag && prevType === tt.slash) || out === tc.j_cTag) {\\n          context.pop();\\n          this.state.canStartJSXElement =\\n            context[context.length - 1] === tc.j_expr;\\n        } else {\\n          this.setContext(tc.j_expr);\\n          this.state.canStartJSXElement = true;\\n        }\\n      } else {\\n        this.state.canStartJSXElement = tokenComesBeforeExpression(type);\\n      }\\n    }\\n  };\\n\",\"import type { Position } from \\\"../../util/location\\\";\\nimport ScopeHandler, { Scope } from \\\"../../util/scope\\\";\\nimport {\\n  BIND_KIND_TYPE,\\n  BIND_FLAGS_TS_ENUM,\\n  BIND_FLAGS_TS_CONST_ENUM,\\n  BIND_FLAGS_TS_EXPORT_ONLY,\\n  BIND_KIND_VALUE,\\n  BIND_FLAGS_CLASS,\\n  type ScopeFlags,\\n  type BindingTypes,\\n  BIND_FLAGS_TS_IMPORT,\\n  SCOPE_TS_MODULE,\\n} from \\\"../../util/scopeflags\\\";\\nimport type * as N from \\\"../../types\\\";\\nimport { Errors } from \\\"../../parse-error\\\";\\n\\nclass TypeScriptScope extends Scope {\\n  types: Set<string> = new Set();\\n\\n  // enums (which are also in .types)\\n  enums: Set<string> = new Set();\\n\\n  // const enums (which are also in .enums and .types)\\n  constEnums: Set<string> = new Set();\\n\\n  // classes (which are also in .lexical) and interface (which are also in .types)\\n  classes: Set<string> = new Set();\\n\\n  // namespaces and ambient functions (or classes) are too difficult to track,\\n  // especially without type analysis.\\n  // We need to track them anyway, to avoid \\\"X is not defined\\\" errors\\n  // when exporting them.\\n  exportOnlyBindings: Set<string> = new Set();\\n}\\n\\n// See https://github.com/babel/babel/pull/9766#discussion_r268920730 for an\\n// explanation of how typescript handles scope.\\n\\nexport default class TypeScriptScopeHandler extends ScopeHandler<TypeScriptScope> {\\n  importsStack: Set<string>[] = [];\\n\\n  createScope(flags: ScopeFlags): TypeScriptScope {\\n    this.importsStack.push(new Set()); // Always keep the top-level scope for export checks.\\n\\n    return new TypeScriptScope(flags);\\n  }\\n\\n  enter(flags: number): void {\\n    if (flags == SCOPE_TS_MODULE) {\\n      this.importsStack.push(new Set());\\n    }\\n\\n    super.enter(flags);\\n  }\\n\\n  exit() {\\n    const flags = super.exit();\\n\\n    if (flags == SCOPE_TS_MODULE) {\\n      this.importsStack.pop();\\n    }\\n\\n    return flags;\\n  }\\n\\n  hasImport(name: string, allowShadow?: boolean) {\\n    const len = this.importsStack.length;\\n    if (this.importsStack[len - 1].has(name)) {\\n      return true;\\n    }\\n    if (!allowShadow && len > 1) {\\n      for (let i = 0; i < len - 1; i++) {\\n        if (this.importsStack[i].has(name)) return true;\\n      }\\n    }\\n    return false;\\n  }\\n\\n  declareName(name: string, bindingType: BindingTypes, loc: Position) {\\n    if (bindingType & BIND_FLAGS_TS_IMPORT) {\\n      if (this.hasImport(name, true)) {\\n        this.parser.raise(Errors.VarRedeclaration, {\\n          at: loc,\\n          identifierName: name,\\n        });\\n      }\\n      this.importsStack[this.importsStack.length - 1].add(name);\\n      return;\\n    }\\n\\n    const scope = this.currentScope();\\n    if (bindingType & BIND_FLAGS_TS_EXPORT_ONLY) {\\n      this.maybeExportDefined(scope, name);\\n      scope.exportOnlyBindings.add(name);\\n      return;\\n    }\\n\\n    super.declareName(name, bindingType, loc);\\n\\n    if (bindingType & BIND_KIND_TYPE) {\\n      if (!(bindingType & BIND_KIND_VALUE)) {\\n        // \\\"Value\\\" bindings have already been registered by the superclass.\\n        this.checkRedeclarationInScope(scope, name, bindingType, loc);\\n        this.maybeExportDefined(scope, name);\\n      }\\n      scope.types.add(name);\\n    }\\n    if (bindingType & BIND_FLAGS_TS_ENUM) scope.enums.add(name);\\n    if (bindingType & BIND_FLAGS_TS_CONST_ENUM) scope.constEnums.add(name);\\n    if (bindingType & BIND_FLAGS_CLASS) scope.classes.add(name);\\n  }\\n\\n  isRedeclaredInScope(\\n    scope: TypeScriptScope,\\n    name: string,\\n    bindingType: BindingTypes,\\n  ): boolean {\\n    if (scope.enums.has(name)) {\\n      if (bindingType & BIND_FLAGS_TS_ENUM) {\\n        // Enums can be merged with other enums if they are both\\n        //  const or both non-const.\\n        const isConst = !!(bindingType & BIND_FLAGS_TS_CONST_ENUM);\\n        const wasConst = scope.constEnums.has(name);\\n        return isConst !== wasConst;\\n      }\\n      return true;\\n    }\\n    if (bindingType & BIND_FLAGS_CLASS && scope.classes.has(name)) {\\n      if (scope.lexical.has(name)) {\\n        // Classes can be merged with interfaces\\n        return !!(bindingType & BIND_KIND_VALUE);\\n      } else {\\n        // Interface can be merged with other classes or interfaces\\n        return false;\\n      }\\n    }\\n    if (bindingType & BIND_KIND_TYPE && scope.types.has(name)) {\\n      return true;\\n    }\\n\\n    return super.isRedeclaredInScope(scope, name, bindingType);\\n  }\\n\\n  checkLocalExport(id: N.Identifier) {\\n    const { name } = id;\\n\\n    if (this.hasImport(name)) return;\\n\\n    const len = this.scopeStack.length;\\n    for (let i = len - 1; i >= 0; i--) {\\n      const scope = this.scopeStack[i];\\n      if (scope.types.has(name) || scope.exportOnlyBindings.has(name)) return;\\n    }\\n\\n    super.checkLocalExport(id);\\n  }\\n}\\n\",\"import * as charCodes from \\\"charcodes\\\";\\nimport { tt, type TokenType } from \\\"../tokenizer/types\\\";\\nimport type {\\n  AssignmentPattern,\\n  TSParameterProperty,\\n  Decorator,\\n  Expression,\\n  Identifier,\\n  Node,\\n  Pattern,\\n  RestElement,\\n  SpreadElement,\\n  ObjectOrClassMember,\\n  ClassMember,\\n  ObjectMember,\\n  TsNamedTypeElementBase,\\n  PrivateName,\\n  ObjectExpression,\\n  ObjectPattern,\\n  ArrayExpression,\\n  ArrayPattern,\\n} from \\\"../types\\\";\\nimport type { Pos, Position } from \\\"../util/location\\\";\\nimport {\\n  isStrictBindOnlyReservedWord,\\n  isStrictBindReservedWord,\\n} from \\\"../util/identifier\\\";\\nimport { NodeUtils, type Undone } from \\\"./node\\\";\\nimport {\\n  type BindingTypes,\\n  BIND_NONE,\\n  BIND_FLAGS_NO_LET_IN_LEXICAL,\\n} from \\\"../util/scopeflags\\\";\\nimport type { ExpressionErrors } from \\\"./util\\\";\\nimport { Errors, type LValAncestor } from \\\"../parse-error\\\";\\nimport type Parser from \\\"./index\\\";\\n\\nconst getOwn = <T extends {}>(object: T, key: keyof T) =>\\n  Object.hasOwnProperty.call(object, key) && object[key];\\n\\nconst unwrapParenthesizedExpression = (node: Node): Node => {\\n  return node.type === \\\"ParenthesizedExpression\\\"\\n    ? unwrapParenthesizedExpression(node.expression)\\n    : node;\\n};\\n\\nexport const enum ParseBindingListFlags {\\n  ALLOW_EMPTY = 1 << 0,\\n  IS_FUNCTION_PARAMS = 1 << 1,\\n  IS_CONSTRUCTOR_PARAMS = 1 << 2,\\n}\\n\\nexport default abstract class LValParser extends NodeUtils {\\n  // Forward-declaration: defined in expression.js\\n  abstract parseIdentifier(liberal?: boolean): Identifier;\\n  abstract parseMaybeAssign(\\n    refExpressionErrors?: ExpressionErrors | null,\\n    afterLeftParse?: Function,\\n    refNeedsArrowPos?: Pos | null,\\n  ): Expression;\\n\\n  abstract parseMaybeAssignAllowIn(\\n    refExpressionErrors?: ExpressionErrors | null,\\n    afterLeftParse?: Function,\\n    refNeedsArrowPos?: Pos | null,\\n  ): Expression;\\n\\n  abstract parseObjectLike<T extends ObjectPattern | ObjectExpression>(\\n    close: TokenType,\\n    isPattern: boolean,\\n    isRecord?: boolean,\\n    refExpressionErrors?: ExpressionErrors,\\n  ): T;\\n  abstract parseObjPropValue(\\n    prop: any,\\n    startLoc: Position | null,\\n    isGenerator: boolean,\\n    isAsync: boolean,\\n    isPattern: boolean,\\n    isAccessor: boolean,\\n    refExpressionErrors?: ExpressionErrors | null,\\n  ): void;\\n  abstract parsePropertyName(\\n    prop: ObjectOrClassMember | ClassMember | TsNamedTypeElementBase,\\n  ): Expression | Identifier;\\n  abstract parsePrivateName(): PrivateName;\\n  // Forward-declaration: defined in statement.js\\n  abstract parseDecorator(): Decorator;\\n\\n  /**\\n   * Convert existing expression atom to assignable pattern\\n   * if possible. Also checks invalid destructuring targets:\\n   *\\n   * - Parenthesized Destructuring patterns\\n   * - RestElement is not the last element\\n   * - Missing `=` in assignment pattern\\n   *\\n   * NOTE: There is a corresponding \\\"isAssignable\\\" method.\\n   * When this one is updated, please check if also that one needs to be updated.\\n   *\\n   * @param node The expression atom\\n   * @param isLHS Whether we are parsing a LeftHandSideExpression.\\n   *              If isLHS is `true`, the following cases are allowed: `[(a)] = [0]`, `[(a.b)] = [0]`\\n   *              If isLHS is `false`, we are in an arrow function parameters list.\\n   */\\n  toAssignable(node: Node, isLHS: boolean = false): void {\\n    let parenthesized = undefined;\\n    if (node.type === \\\"ParenthesizedExpression\\\" || node.extra?.parenthesized) {\\n      parenthesized = unwrapParenthesizedExpression(node);\\n      if (isLHS) {\\n        // an LHS can be reinterpreted to a binding pattern but not vice versa.\\n        // therefore a parenthesized identifier is ambiguous until we are sure it is an assignment expression\\n        // i.e. `([(a) = []] = []) => {}`\\n        // see also `recordArrowParameterBindingError` signature in packages/babel-parser/src/util/expression-scope.js\\n        if (parenthesized.type === \\\"Identifier\\\") {\\n          this.expressionScope.recordArrowParameterBindingError(\\n            Errors.InvalidParenthesizedAssignment,\\n            { at: node },\\n          );\\n        } else if (parenthesized.type !== \\\"MemberExpression\\\") {\\n          // A parenthesized member expression can be in LHS but not in pattern.\\n          // If the LHS is later interpreted as a pattern, `checkLVal` will throw for member expression binding\\n          // i.e. `([(a.b) = []] = []) => {}`\\n          this.raise(Errors.InvalidParenthesizedAssignment, { at: node });\\n        }\\n      } else {\\n        this.raise(Errors.InvalidParenthesizedAssignment, { at: node });\\n      }\\n    }\\n\\n    switch (node.type) {\\n      case \\\"Identifier\\\":\\n      case \\\"ObjectPattern\\\":\\n      case \\\"ArrayPattern\\\":\\n      case \\\"AssignmentPattern\\\":\\n      case \\\"RestElement\\\":\\n        break;\\n\\n      case \\\"ObjectExpression\\\":\\n        node.type = \\\"ObjectPattern\\\";\\n        for (\\n          let i = 0, length = node.properties.length, last = length - 1;\\n          i < length;\\n          i++\\n        ) {\\n          const prop = node.properties[i];\\n          const isLast = i === last;\\n          this.toAssignableObjectExpressionProp(prop, isLast, isLHS);\\n\\n          if (\\n            isLast &&\\n            prop.type === \\\"RestElement\\\" &&\\n            node.extra?.trailingCommaLoc\\n          ) {\\n            this.raise(Errors.RestTrailingComma, {\\n              at: node.extra.trailingCommaLoc,\\n            });\\n          }\\n        }\\n        break;\\n\\n      case \\\"ObjectProperty\\\": {\\n        const { key, value } = node;\\n        if (this.isPrivateName(key)) {\\n          this.classScope.usePrivateName(\\n            this.getPrivateNameSV(key),\\n            key.loc.start,\\n          );\\n        }\\n        this.toAssignable(value, isLHS);\\n        break;\\n      }\\n\\n      case \\\"SpreadElement\\\": {\\n        throw new Error(\\n          \\\"Internal @babel/parser error (this is a bug, please report it).\\\" +\\n            \\\" SpreadElement should be converted by .toAssignable's caller.\\\",\\n        );\\n      }\\n\\n      case \\\"ArrayExpression\\\":\\n        node.type = \\\"ArrayPattern\\\";\\n        this.toAssignableList(\\n          node.elements,\\n          node.extra?.trailingCommaLoc,\\n          isLHS,\\n        );\\n        break;\\n\\n      case \\\"AssignmentExpression\\\":\\n        if (node.operator !== \\\"=\\\") {\\n          this.raise(Errors.MissingEqInAssignment, { at: node.left.loc.end });\\n        }\\n\\n        node.type = \\\"AssignmentPattern\\\";\\n        delete node.operator;\\n        this.toAssignable(node.left, isLHS);\\n        break;\\n\\n      case \\\"ParenthesizedExpression\\\":\\n        /*::invariant (parenthesized !== undefined) */\\n        this.toAssignable(parenthesized, isLHS);\\n        break;\\n\\n      default:\\n      // We don't know how to deal with this node. It will\\n      // be reported by a later call to checkLVal\\n    }\\n  }\\n\\n  toAssignableObjectExpressionProp(\\n    prop: Node,\\n    isLast: boolean,\\n    isLHS: boolean,\\n  ) {\\n    if (prop.type === \\\"ObjectMethod\\\") {\\n      this.raise(\\n        prop.kind === \\\"get\\\" || prop.kind === \\\"set\\\"\\n          ? Errors.PatternHasAccessor\\n          : Errors.PatternHasMethod,\\n        { at: prop.key },\\n      );\\n    } else if (prop.type === \\\"SpreadElement\\\") {\\n      prop.type = \\\"RestElement\\\";\\n      const arg = prop.argument;\\n      this.checkToRestConversion(arg, /* allowPattern */ false);\\n      this.toAssignable(arg, isLHS);\\n\\n      if (!isLast) {\\n        this.raise(Errors.RestTrailingComma, { at: prop });\\n      }\\n    } else {\\n      this.toAssignable(prop, isLHS);\\n    }\\n  }\\n\\n  // Convert list of expression atoms to binding list.\\n\\n  toAssignableList(\\n    exprList: Expression[],\\n    trailingCommaLoc: Position | undefined | null,\\n    isLHS: boolean,\\n  ): void {\\n    const end = exprList.length - 1;\\n\\n    for (let i = 0; i <= end; i++) {\\n      const elt = exprList[i];\\n      if (!elt) continue;\\n\\n      if (elt.type === \\\"SpreadElement\\\") {\\n        elt.type = \\\"RestElement\\\";\\n        const arg = elt.argument;\\n        this.checkToRestConversion(arg, /* allowPattern */ true);\\n        this.toAssignable(arg, isLHS);\\n      } else {\\n        this.toAssignable(elt, isLHS);\\n      }\\n\\n      if (elt.type === \\\"RestElement\\\") {\\n        if (i < end) {\\n          this.raise(Errors.RestTrailingComma, { at: elt });\\n        } else if (trailingCommaLoc) {\\n          this.raise(Errors.RestTrailingComma, { at: trailingCommaLoc });\\n        }\\n      }\\n    }\\n  }\\n\\n  isAssignable(node: Node, isBinding?: boolean): boolean {\\n    switch (node.type) {\\n      case \\\"Identifier\\\":\\n      case \\\"ObjectPattern\\\":\\n      case \\\"ArrayPattern\\\":\\n      case \\\"AssignmentPattern\\\":\\n      case \\\"RestElement\\\":\\n        return true;\\n\\n      case \\\"ObjectExpression\\\": {\\n        const last = node.properties.length - 1;\\n        return (node.properties as ObjectExpression[\\\"properties\\\"]).every(\\n          (prop, i) => {\\n            return (\\n              prop.type !== \\\"ObjectMethod\\\" &&\\n              (i === last || prop.type !== \\\"SpreadElement\\\") &&\\n              this.isAssignable(prop)\\n            );\\n          },\\n        );\\n      }\\n\\n      case \\\"ObjectProperty\\\":\\n        return this.isAssignable(node.value);\\n\\n      case \\\"SpreadElement\\\":\\n        return this.isAssignable(node.argument);\\n\\n      case \\\"ArrayExpression\\\":\\n        return (node as ArrayExpression).elements.every(\\n          element => element === null || this.isAssignable(element),\\n        );\\n\\n      case \\\"AssignmentExpression\\\":\\n        return node.operator === \\\"=\\\";\\n\\n      case \\\"ParenthesizedExpression\\\":\\n        return this.isAssignable(node.expression);\\n\\n      case \\\"MemberExpression\\\":\\n      case \\\"OptionalMemberExpression\\\":\\n        return !isBinding;\\n\\n      default:\\n        return false;\\n    }\\n  }\\n\\n  // Convert list of expression atoms to a list of\\n\\n  toReferencedList(\\n    exprList: ReadonlyArray<Expression | undefined | null>,\\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\\n    isParenthesizedExpr?: boolean,\\n  ): ReadonlyArray<Expression | undefined | null> {\\n    return exprList;\\n  }\\n\\n  toReferencedListDeep(\\n    exprList: ReadonlyArray<Expression | undefined | null>,\\n    isParenthesizedExpr?: boolean,\\n  ): void {\\n    this.toReferencedList(exprList, isParenthesizedExpr);\\n\\n    for (const expr of exprList) {\\n      if (expr?.type === \\\"ArrayExpression\\\") {\\n        this.toReferencedListDeep(expr.elements);\\n      }\\n    }\\n  }\\n\\n  // Parses spread element.\\n\\n  parseSpread(\\n    this: Parser,\\n    refExpressionErrors?: ExpressionErrors | null,\\n  ): SpreadElement {\\n    const node = this.startNode<SpreadElement>();\\n    this.next();\\n    node.argument = this.parseMaybeAssignAllowIn(\\n      refExpressionErrors,\\n      undefined,\\n    );\\n    return this.finishNode(node, \\\"SpreadElement\\\");\\n  }\\n\\n  // https://tc39.es/ecma262/#prod-BindingRestProperty\\n  // https://tc39.es/ecma262/#prod-BindingRestElement\\n  parseRestBinding(this: Parser): RestElement {\\n    const node = this.startNode<RestElement>();\\n    this.next(); // eat `...`\\n    node.argument = this.parseBindingAtom();\\n    return this.finishNode(node, \\\"RestElement\\\");\\n  }\\n\\n  // Parses lvalue (assignable) atom.\\n  parseBindingAtom(this: Parser): Pattern {\\n    // https://tc39.es/ecma262/#prod-BindingPattern\\n    switch (this.state.type) {\\n      case tt.bracketL: {\\n        const node = this.startNode<ArrayPattern>();\\n        this.next();\\n        // @ts-expect-error: Fixme: TSParameterProperty can not be assigned to node.elements\\n        node.elements = this.parseBindingList(\\n          tt.bracketR,\\n          charCodes.rightSquareBracket,\\n          ParseBindingListFlags.ALLOW_EMPTY,\\n        );\\n        return this.finishNode(node, \\\"ArrayPattern\\\");\\n      }\\n\\n      case tt.braceL:\\n        return this.parseObjectLike(tt.braceR, true);\\n    }\\n\\n    // https://tc39.es/ecma262/#prod-BindingIdentifier\\n    return this.parseIdentifier();\\n  }\\n\\n  // https://tc39.es/ecma262/#prod-BindingElementList\\n  parseBindingList(\\n    this: Parser,\\n    close: TokenType,\\n    closeCharCode: typeof charCodes[keyof typeof charCodes],\\n    flags: ParseBindingListFlags,\\n  ): Array<Pattern | TSParameterProperty> {\\n    const allowEmpty = flags & ParseBindingListFlags.ALLOW_EMPTY;\\n\\n    const elts: Array<Pattern | TSParameterProperty> = [];\\n    let first = true;\\n    while (!this.eat(close)) {\\n      if (first) {\\n        first = false;\\n      } else {\\n        this.expect(tt.comma);\\n      }\\n      if (allowEmpty && this.match(tt.comma)) {\\n        elts.push(null);\\n      } else if (this.eat(close)) {\\n        break;\\n      } else if (this.match(tt.ellipsis)) {\\n        elts.push(\\n          this.parseAssignableListItemTypes(this.parseRestBinding(), flags),\\n        );\\n        if (!this.checkCommaAfterRest(closeCharCode)) {\\n          this.expect(close);\\n          break;\\n        }\\n      } else {\\n        const decorators = [];\\n        if (this.match(tt.at) && this.hasPlugin(\\\"decorators\\\")) {\\n          this.raise(Errors.UnsupportedParameterDecorator, {\\n            at: this.state.startLoc,\\n          });\\n        }\\n        // invariant: hasPlugin(\\\"decorators-legacy\\\")\\n        while (this.match(tt.at)) {\\n          decorators.push(this.parseDecorator());\\n        }\\n        elts.push(this.parseAssignableListItem(flags, decorators));\\n      }\\n    }\\n    return elts;\\n  }\\n\\n  // https://tc39.es/ecma262/#prod-BindingRestProperty\\n  parseBindingRestProperty(\\n    this: Parser,\\n    prop: Undone<RestElement>,\\n  ): RestElement {\\n    this.next(); // eat '...'\\n    // Don't use parseRestBinding() as we only allow Identifier here.\\n    prop.argument = this.parseIdentifier();\\n    this.checkCommaAfterRest(charCodes.rightCurlyBrace);\\n    return this.finishNode(prop, \\\"RestElement\\\");\\n  }\\n\\n  // https://tc39.es/ecma262/#prod-BindingProperty\\n  parseBindingProperty(this: Parser): ObjectMember | RestElement {\\n    const prop = this.startNode<ObjectMember | RestElement>();\\n    const { type, startLoc } = this.state;\\n    if (type === tt.ellipsis) {\\n      return this.parseBindingRestProperty(prop as Undone<RestElement>);\\n    } else if (type === tt.privateName) {\\n      this.expectPlugin(\\\"destructuringPrivate\\\", startLoc);\\n      this.classScope.usePrivateName(this.state.value, startLoc);\\n      (prop as Undone<ObjectMember>).key = this.parsePrivateName();\\n    } else {\\n      this.parsePropertyName(prop as Undone<ObjectMember>);\\n    }\\n    (prop as Undone<ObjectMember>).method = false;\\n    return this.parseObjPropValue(\\n      prop as Undone<ObjectMember>,\\n      startLoc,\\n      false /* isGenerator */,\\n      false /* isAsync */,\\n      true /* isPattern */,\\n      false /* isAccessor */,\\n    );\\n  }\\n\\n  parseAssignableListItem(\\n    this: Parser,\\n    flags: ParseBindingListFlags,\\n    decorators: Decorator[],\\n  ): Pattern | TSParameterProperty {\\n    const left = this.parseMaybeDefault();\\n    this.parseAssignableListItemTypes(left, flags);\\n    const elt = this.parseMaybeDefault(left.loc.start, left);\\n    if (decorators.length) {\\n      left.decorators = decorators;\\n    }\\n    return elt;\\n  }\\n\\n  // Used by flow/typescript plugin to add type annotations to binding elements\\n  parseAssignableListItemTypes(\\n    param: Pattern,\\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\\n    flags: ParseBindingListFlags,\\n  ): Pattern {\\n    return param;\\n  }\\n\\n  // Parses assignment pattern around given atom if possible.\\n  // https://tc39.es/ecma262/#prod-BindingElement\\n  parseMaybeDefault(\\n    this: Parser,\\n    startLoc?: Position | null,\\n    left?: Pattern | null,\\n  ): Pattern {\\n    startLoc ??= this.state.startLoc;\\n    left = left ?? this.parseBindingAtom();\\n    if (!this.eat(tt.eq)) return left;\\n\\n    const node = this.startNodeAt<AssignmentPattern>(startLoc);\\n    node.left = left;\\n    node.right = this.parseMaybeAssignAllowIn();\\n    return this.finishNode(node, \\\"AssignmentPattern\\\");\\n  }\\n  /**\\n   * Return information use in determining whether a Node of a given type is an LVal,\\n   * possibly given certain additional context information.\\n   *\\n   * Subclasser notes: This method has kind of a lot of mixed, but related,\\n   * responsibilities. If we can definitively determine with the information\\n   * provided that this either *is* or *isn't* a valid `LVal`, then the return\\n   * value is easy: just return `true` or `false`. However, if it is a valid\\n   * LVal *ancestor*, and thus its descendants must be subsequently visited to\\n   * continue the \\\"investigation\\\", then this method should return the relevant\\n   * child key as a `string`. In some special cases, you additionally want to\\n   * convey that this node should be treated as if it were parenthesized. In\\n   * that case, a tuple of [key: string, parenthesized: boolean] is returned.\\n   * The `string`-only return option is actually just a shorthand for:\\n   * `[key: string, parenthesized: false]`.\\n   *\\n   * @param type A Node `type` string\\n   * @param isUnparenthesizedInAssign\\n   *        Whether the node in question is unparenthesized and its parent\\n   *        is either an assignment pattern or an assignment expression.\\n   * @param binding\\n   *        The binding operation that is being considered for this potential\\n   *        LVal.\\n   * @returns `true` or `false` if we can immediately determine whether the node\\n   *          type in question can be treated as an `LVal`.\\n   *          A `string` key to traverse if we must check this child.\\n   *          A `[string, boolean]` tuple if we need to check this child and\\n   *          treat is as parenthesized.\\n   */\\n  isValidLVal(\\n    type: string,\\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\\n    isUnparenthesizedInAssign: boolean,\\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\\n    binding: BindingTypes,\\n  ): string | boolean {\\n    return getOwn(\\n      {\\n        AssignmentPattern: \\\"left\\\",\\n        RestElement: \\\"argument\\\",\\n        ObjectProperty: \\\"value\\\",\\n        ParenthesizedExpression: \\\"expression\\\",\\n        ArrayPattern: \\\"elements\\\",\\n        ObjectPattern: \\\"properties\\\",\\n      },\\n      // @ts-expect-error refine string to enum\\n      type,\\n    );\\n  }\\n\\n  /**\\n   * Verify that a target expression is an lval (something that can be assigned to).\\n   *\\n   * @param expression The expression in question to check.\\n   * @param options A set of options described below.\\n   * @param options.in\\n   *        The relevant ancestor to provide context information for the error\\n   *        if the check fails.\\n   * @param options.binding\\n   *        The desired binding type. If the given expression is an identifier\\n   *        and `binding` is not `BIND_NONE`, `checkLVal` will register binding\\n   *        to the parser scope See also `src/util/scopeflags.js`\\n   * @param options.checkClashes\\n   *        An optional string set to check if an identifier name is included.\\n   *        `checkLVal` will add checked identifier name to `checkClashes` It is\\n   *        used in tracking duplicates in function parameter lists. If it is\\n   *        false, `checkLVal` will skip duplicate checks\\n   * @param options.strictModeChanged\\n   *        Whether an identifier has been parsed in a sloppy context but should\\n   *        be reinterpreted as strict-mode. e.g. `(arguments) => { \\\"use strict \\\"}`\\n   * @param options.hasParenthesizedAncestor\\n   *        This is only used internally during recursive calls, and you should\\n   *        not have to set it yourself.\\n   */\\n\\n  checkLVal(\\n    expression: Expression | ObjectMember | RestElement,\\n    {\\n      in: ancestor,\\n      binding = BIND_NONE,\\n      checkClashes = false,\\n      strictModeChanged = false,\\n      hasParenthesizedAncestor = false,\\n    }: {\\n      in: LValAncestor;\\n      binding?: BindingTypes;\\n      checkClashes?: Set<string> | false;\\n      strictModeChanged?: boolean;\\n      hasParenthesizedAncestor?: boolean;\\n    },\\n  ): void {\\n    const type = expression.type;\\n\\n    // If we find here an ObjectMethod, it's because this was originally\\n    // an ObjectExpression which has then been converted.\\n    // toAssignable already reported this error with a nicer message.\\n    if (this.isObjectMethod(expression)) return;\\n\\n    if (type === \\\"MemberExpression\\\") {\\n      if (binding !== BIND_NONE) {\\n        this.raise(Errors.InvalidPropertyBindingPattern, { at: expression });\\n      }\\n      return;\\n    }\\n\\n    if (type === \\\"Identifier\\\") {\\n      this.checkIdentifier(\\n        expression as Identifier,\\n        binding,\\n        strictModeChanged,\\n      );\\n\\n      const { name } = expression as Identifier;\\n\\n      if (checkClashes) {\\n        if (checkClashes.has(name)) {\\n          this.raise(Errors.ParamDupe, { at: expression });\\n        } else {\\n          checkClashes.add(name);\\n        }\\n      }\\n\\n      return;\\n    }\\n\\n    const validity = this.isValidLVal(\\n      type,\\n      !(hasParenthesizedAncestor || expression.extra?.parenthesized) &&\\n        ancestor.type === \\\"AssignmentExpression\\\",\\n      binding,\\n    );\\n\\n    if (validity === true) return;\\n    if (validity === false) {\\n      const ParseErrorClass =\\n        binding === BIND_NONE ? Errors.InvalidLhs : Errors.InvalidLhsBinding;\\n\\n      this.raise(ParseErrorClass, { at: expression, ancestor });\\n      return;\\n    }\\n\\n    const [key, isParenthesizedExpression] = Array.isArray(validity)\\n      ? validity\\n      : [validity, type === \\\"ParenthesizedExpression\\\"];\\n    const nextAncestor =\\n      type === \\\"ArrayPattern\\\" ||\\n      type === \\\"ObjectPattern\\\" ||\\n      type === \\\"ParenthesizedExpression\\\"\\n        ? ({ type } as const)\\n        : ancestor;\\n\\n    // @ts-expect-error key may not index expression.\\n    for (const child of [].concat(expression[key])) {\\n      if (child) {\\n        this.checkLVal(child, {\\n          in: nextAncestor,\\n          binding,\\n          checkClashes,\\n          strictModeChanged,\\n          hasParenthesizedAncestor: isParenthesizedExpression,\\n        });\\n      }\\n    }\\n  }\\n\\n  checkIdentifier(\\n    at: Identifier,\\n    bindingType: BindingTypes,\\n    strictModeChanged: boolean = false,\\n  ) {\\n    if (\\n      this.state.strict &&\\n      (strictModeChanged\\n        ? isStrictBindReservedWord(at.name, this.inModule)\\n        : isStrictBindOnlyReservedWord(at.name))\\n    ) {\\n      if (bindingType === BIND_NONE) {\\n        this.raise(Errors.StrictEvalArguments, { at, referenceName: at.name });\\n      } else {\\n        this.raise(Errors.StrictEvalArgumentsBinding, {\\n          at,\\n          bindingName: at.name,\\n        });\\n      }\\n    }\\n\\n    if (bindingType & BIND_FLAGS_NO_LET_IN_LEXICAL && at.name === \\\"let\\\") {\\n      this.raise(Errors.LetInLexicalBinding, { at });\\n    }\\n\\n    if (!(bindingType & BIND_NONE)) {\\n      this.declareNameFromIdentifier(at, bindingType);\\n    }\\n  }\\n\\n  declareNameFromIdentifier(identifier: Identifier, binding: BindingTypes) {\\n    this.scope.declareName(identifier.name, binding, identifier.loc.start);\\n  }\\n\\n  checkToRestConversion(node: Node, allowPattern: boolean): void {\\n    switch (node.type) {\\n      case \\\"ParenthesizedExpression\\\":\\n        this.checkToRestConversion(node.expression, allowPattern);\\n        break;\\n      case \\\"Identifier\\\":\\n      case \\\"MemberExpression\\\":\\n        break;\\n      case \\\"ArrayExpression\\\":\\n      case \\\"ObjectExpression\\\":\\n        if (allowPattern) break;\\n      /* falls through */\\n      default:\\n        this.raise(Errors.InvalidRestAssignmentPattern, { at: node });\\n    }\\n  }\\n\\n  checkCommaAfterRest(\\n    close: typeof charCodes[keyof typeof charCodes],\\n  ): boolean {\\n    if (!this.match(tt.comma)) {\\n      return false;\\n    }\\n\\n    this.raise(\\n      this.lookaheadCharCode() === close\\n        ? Errors.RestTrailingComma\\n        : Errors.ElementAfterRest,\\n      { at: this.state.startLoc },\\n    );\\n\\n    return true;\\n  }\\n}\\n\",\"/*:: declare var invariant; */\\n\\nimport type State from \\\"../../tokenizer/state\\\";\\nimport {\\n  tokenIsIdentifier,\\n  tokenIsTSDeclarationStart,\\n  tokenIsTSTypeOperator,\\n  tokenOperatorPrecedence,\\n  tokenIsKeywordOrIdentifier,\\n  tt,\\n  type TokenType,\\n  tokenIsTemplate,\\n  tokenCanStartExpression,\\n} from \\\"../../tokenizer/types\\\";\\nimport { types as tc } from \\\"../../tokenizer/context\\\";\\nimport type * as N from \\\"../../types\\\";\\nimport type { Position } from \\\"../../util/location\\\";\\nimport { createPositionWithColumnOffset } from \\\"../../util/location\\\";\\nimport type Parser from \\\"../../parser\\\";\\nimport {\\n  type BindingTypes,\\n  SCOPE_TS_MODULE,\\n  SCOPE_OTHER,\\n  BIND_TS_ENUM,\\n  BIND_TS_CONST_ENUM,\\n  BIND_TS_TYPE,\\n  BIND_TS_INTERFACE,\\n  BIND_TS_AMBIENT,\\n  BIND_TS_NAMESPACE,\\n  BIND_TS_TYPE_IMPORT,\\n  BIND_CLASS,\\n  BIND_NONE,\\n  BIND_FLAGS_TS_IMPORT,\\n} from \\\"../../util/scopeflags\\\";\\nimport TypeScriptScopeHandler from \\\"./scope\\\";\\nimport * as charCodes from \\\"charcodes\\\";\\nimport type { ExpressionErrors } from \\\"../../parser/util\\\";\\nimport type { ParseStatementFlag } from \\\"../../parser/statement\\\";\\nimport { PARAM } from \\\"../../util/production-parameter\\\";\\nimport { Errors, ParseErrorEnum } from \\\"../../parse-error\\\";\\nimport { cloneIdentifier, type Undone } from \\\"../../parser/node\\\";\\nimport type { Pattern } from \\\"../../types\\\";\\nimport type { Expression } from \\\"../../types\\\";\\nimport type { IJSXParserMixin } from \\\"../jsx\\\";\\nimport { ParseBindingListFlags } from \\\"../../parser/lval\\\";\\n\\nconst getOwn = <T extends {}>(object: T, key: keyof T) =>\\n  Object.hasOwnProperty.call(object, key) && object[key];\\n\\ntype TsModifier =\\n  | \\\"readonly\\\"\\n  | \\\"abstract\\\"\\n  | \\\"declare\\\"\\n  | \\\"static\\\"\\n  | \\\"override\\\"\\n  | \\\"const\\\"\\n  | N.Accessibility\\n  | N.VarianceAnnotations;\\n\\nfunction nonNull<T>(x?: T | null): T {\\n  if (x == null) {\\n    throw new Error(`Unexpected ${x} value.`);\\n  }\\n  return x;\\n}\\n\\nfunction assert(x: boolean): void {\\n  if (!x) {\\n    throw new Error(\\\"Assert fail\\\");\\n  }\\n}\\n\\ntype ParsingContext =\\n  | \\\"EnumMembers\\\"\\n  | \\\"HeritageClauseElement\\\"\\n  | \\\"TupleElementTypes\\\"\\n  | \\\"TypeMembers\\\"\\n  | \\\"TypeParametersOrArguments\\\";\\n\\ntype ModifierBase = {\\n  accessibility?: N.Accessibility;\\n} & {\\n  [key in TsModifier]?: boolean | undefined | null;\\n};\\n\\n/* eslint sort-keys: \\\"error\\\" */\\nconst TSErrors = ParseErrorEnum`typescript`({\\n  AbstractMethodHasImplementation: ({ methodName }: { methodName: string }) =>\\n    `Method '${methodName}' cannot have an implementation because it is marked abstract.`,\\n  AbstractPropertyHasInitializer: ({\\n    propertyName,\\n  }: {\\n    propertyName: string;\\n  }) =>\\n    `Property '${propertyName}' cannot have an initializer because it is marked abstract.`,\\n  AccesorCannotDeclareThisParameter:\\n    \\\"'get' and 'set' accessors cannot declare 'this' parameters.\\\",\\n  AccesorCannotHaveTypeParameters: \\\"An accessor cannot have type parameters.\\\",\\n  AccessorCannotBeOptional:\\n    \\\"An 'accessor' property cannot be declared optional.\\\",\\n  ClassMethodHasDeclare: \\\"Class methods cannot have the 'declare' modifier.\\\",\\n  ClassMethodHasReadonly: \\\"Class methods cannot have the 'readonly' modifier.\\\",\\n  ConstInitiailizerMustBeStringOrNumericLiteralOrLiteralEnumReference:\\n    \\\"A 'const' initializer in an ambient context must be a string or numeric literal or literal enum reference.\\\",\\n  ConstructorHasTypeParameters:\\n    \\\"Type parameters cannot appear on a constructor declaration.\\\",\\n  DeclareAccessor: ({ kind }: { kind: \\\"get\\\" | \\\"set\\\" }) =>\\n    `'declare' is not allowed in ${kind}ters.`,\\n  DeclareClassFieldHasInitializer:\\n    \\\"Initializers are not allowed in ambient contexts.\\\",\\n  DeclareFunctionHasImplementation:\\n    \\\"An implementation cannot be declared in ambient contexts.\\\",\\n  DuplicateAccessibilityModifier:\\n    // `Accessibility modifier already seen: ${modifier}` would be more helpful.\\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\\n    ({ modifier }: { modifier: N.Accessibility }) =>\\n      `Accessibility modifier already seen.`,\\n  DuplicateModifier: ({ modifier }: { modifier: TsModifier }) =>\\n    `Duplicate modifier: '${modifier}'.`,\\n  // `token` matches the terminology used by typescript:\\n  // https://github.com/microsoft/TypeScript/blob/main/src/compiler/types.ts#L2915\\n  EmptyHeritageClauseType: ({ token }: { token: \\\"extends\\\" | \\\"implements\\\" }) =>\\n    `'${token}' list cannot be empty.`,\\n  EmptyTypeArguments: \\\"Type argument list cannot be empty.\\\",\\n  EmptyTypeParameters: \\\"Type parameter list cannot be empty.\\\",\\n  ExpectedAmbientAfterExportDeclare:\\n    \\\"'export declare' must be followed by an ambient declaration.\\\",\\n  ImportAliasHasImportType: \\\"An import alias can not use 'import type'.\\\",\\n  ImportReflectionHasImportType:\\n    \\\"An `import module` declaration can not use `type` modifier\\\",\\n  IncompatibleModifiers: ({\\n    modifiers,\\n  }: {\\n    modifiers: [TsModifier, TsModifier];\\n  }) =>\\n    `'${modifiers[0]}' modifier cannot be used with '${modifiers[1]}' modifier.`,\\n  IndexSignatureHasAbstract:\\n    \\\"Index signatures cannot have the 'abstract' modifier.\\\",\\n  IndexSignatureHasAccessibility: ({\\n    modifier,\\n  }: {\\n    modifier: N.Accessibility;\\n  }) =>\\n    `Index signatures cannot have an accessibility modifier ('${modifier}').`,\\n  IndexSignatureHasDeclare:\\n    \\\"Index signatures cannot have the 'declare' modifier.\\\",\\n  IndexSignatureHasOverride:\\n    \\\"'override' modifier cannot appear on an index signature.\\\",\\n  IndexSignatureHasStatic:\\n    \\\"Index signatures cannot have the 'static' modifier.\\\",\\n  InitializerNotAllowedInAmbientContext:\\n    \\\"Initializers are not allowed in ambient contexts.\\\",\\n  InvalidModifierOnTypeMember: ({ modifier }: { modifier: TsModifier }) =>\\n    `'${modifier}' modifier cannot appear on a type member.`,\\n  InvalidModifierOnTypeParameter: ({ modifier }: { modifier: TsModifier }) =>\\n    `'${modifier}' modifier cannot appear on a type parameter.`,\\n  InvalidModifierOnTypeParameterPositions: ({\\n    modifier,\\n  }: {\\n    modifier: TsModifier;\\n  }) =>\\n    `'${modifier}' modifier can only appear on a type parameter of a class, interface or type alias.`,\\n  InvalidModifiersOrder: ({\\n    orderedModifiers,\\n  }: {\\n    orderedModifiers: [TsModifier, TsModifier];\\n  }) =>\\n    `'${orderedModifiers[0]}' modifier must precede '${orderedModifiers[1]}' modifier.`,\\n  InvalidPropertyAccessAfterInstantiationExpression:\\n    \\\"Invalid property access after an instantiation expression. \\\" +\\n    \\\"You can either wrap the instantiation expression in parentheses, or delete the type arguments.\\\",\\n  InvalidTupleMemberLabel:\\n    \\\"Tuple members must be labeled with a simple identifier.\\\",\\n  MissingInterfaceName:\\n    \\\"'interface' declarations must be followed by an identifier.\\\",\\n  MixedLabeledAndUnlabeledElements:\\n    \\\"Tuple members must all have names or all not have names.\\\",\\n  NonAbstractClassHasAbstractMethod:\\n    \\\"Abstract methods can only appear within an abstract class.\\\",\\n  NonClassMethodPropertyHasAbstractModifer:\\n    \\\"'abstract' modifier can only appear on a class, method, or property declaration.\\\",\\n  OptionalTypeBeforeRequired:\\n    \\\"A required element cannot follow an optional element.\\\",\\n  OverrideNotInSubClass:\\n    \\\"This member cannot have an 'override' modifier because its containing class does not extend another class.\\\",\\n  PatternIsOptional:\\n    \\\"A binding pattern parameter cannot be optional in an implementation signature.\\\",\\n  PrivateElementHasAbstract:\\n    \\\"Private elements cannot have the 'abstract' modifier.\\\",\\n  PrivateElementHasAccessibility: ({\\n    modifier,\\n  }: {\\n    modifier: N.Accessibility;\\n  }) =>\\n    `Private elements cannot have an accessibility modifier ('${modifier}').`,\\n  ReadonlyForMethodSignature:\\n    \\\"'readonly' modifier can only appear on a property declaration or index signature.\\\",\\n  ReservedArrowTypeParam:\\n    \\\"This syntax is reserved in files with the .mts or .cts extension. Add a trailing comma, as in `<T,>() => ...`.\\\",\\n  ReservedTypeAssertion:\\n    \\\"This syntax is reserved in files with the .mts or .cts extension. Use an `as` expression instead.\\\",\\n  // TODO: Accesor -> Accessor\\n  SetAccesorCannotHaveOptionalParameter:\\n    \\\"A 'set' accessor cannot have an optional parameter.\\\",\\n  SetAccesorCannotHaveRestParameter:\\n    \\\"A 'set' accessor cannot have rest parameter.\\\",\\n  SetAccesorCannotHaveReturnType:\\n    \\\"A 'set' accessor cannot have a return type annotation.\\\",\\n  SingleTypeParameterWithoutTrailingComma: ({\\n    typeParameterName,\\n  }: {\\n    typeParameterName: string;\\n  }) =>\\n    `Single type parameter ${typeParameterName} should have a trailing comma. Example usage: <${typeParameterName},>.`,\\n  StaticBlockCannotHaveModifier:\\n    \\\"Static class blocks cannot have any modifier.\\\",\\n  TupleOptionalAfterType:\\n    \\\"A labeled tuple optional element must be declared using a question mark after the name and before the colon (`name?: type`), rather than after the type (`name: type?`).\\\",\\n  TypeAnnotationAfterAssign:\\n    \\\"Type annotations must come before default assignments, e.g. instead of `age = 25: number` use `age: number = 25`.\\\",\\n  TypeImportCannotSpecifyDefaultAndNamed:\\n    \\\"A type-only import can specify a default import or named bindings, but not both.\\\",\\n  TypeModifierIsUsedInTypeExports:\\n    \\\"The 'type' modifier cannot be used on a named export when 'export type' is used on its export statement.\\\",\\n  TypeModifierIsUsedInTypeImports:\\n    \\\"The 'type' modifier cannot be used on a named import when 'import type' is used on its import statement.\\\",\\n  UnexpectedParameterModifier:\\n    \\\"A parameter property is only allowed in a constructor implementation.\\\",\\n  UnexpectedReadonly:\\n    \\\"'readonly' type modifier is only permitted on array and tuple literal types.\\\",\\n  UnexpectedTypeAnnotation: \\\"Did not expect a type annotation here.\\\",\\n  UnexpectedTypeCastInParameter: \\\"Unexpected type cast in parameter position.\\\",\\n  UnsupportedImportTypeArgument:\\n    \\\"Argument in a type import must be a string literal.\\\",\\n  UnsupportedParameterPropertyKind:\\n    \\\"A parameter property may not be declared using a binding pattern.\\\",\\n  UnsupportedSignatureParameterKind: ({ type }: { type: string }) =>\\n    `Name in a signature must be an Identifier, ObjectPattern or ArrayPattern, instead got ${type}.`,\\n});\\n\\n/* eslint-disable sort-keys */\\n\\n// Doesn't handle \\\"void\\\" or \\\"null\\\" because those are keywords, not identifiers.\\n// It also doesn't handle \\\"intrinsic\\\", since usually it's not a keyword.\\nfunction keywordTypeFromName(value: string): N.TsKeywordTypeType | undefined {\\n  switch (value) {\\n    case \\\"any\\\":\\n      return \\\"TSAnyKeyword\\\";\\n    case \\\"boolean\\\":\\n      return \\\"TSBooleanKeyword\\\";\\n    case \\\"bigint\\\":\\n      return \\\"TSBigIntKeyword\\\";\\n    case \\\"never\\\":\\n      return \\\"TSNeverKeyword\\\";\\n    case \\\"number\\\":\\n      return \\\"TSNumberKeyword\\\";\\n    case \\\"object\\\":\\n      return \\\"TSObjectKeyword\\\";\\n    case \\\"string\\\":\\n      return \\\"TSStringKeyword\\\";\\n    case \\\"symbol\\\":\\n      return \\\"TSSymbolKeyword\\\";\\n    case \\\"undefined\\\":\\n      return \\\"TSUndefinedKeyword\\\";\\n    case \\\"unknown\\\":\\n      return \\\"TSUnknownKeyword\\\";\\n    default:\\n      return undefined;\\n  }\\n}\\n\\nfunction tsIsAccessModifier(modifier: string): modifier is N.Accessibility {\\n  return (\\n    modifier === \\\"private\\\" || modifier === \\\"public\\\" || modifier === \\\"protected\\\"\\n  );\\n}\\n\\nfunction tsIsVarianceAnnotations(\\n  modifier: string,\\n): modifier is N.VarianceAnnotations {\\n  return modifier === \\\"in\\\" || modifier === \\\"out\\\";\\n}\\n\\ntype ClassWithMixin<\\n  T extends new (...args: any) => any,\\n  M extends object,\\n> = T extends new (...args: infer P) => infer I\\n  ? new (...args: P) => I & M\\n  : never;\\n\\nexport default (superClass: ClassWithMixin<typeof Parser, IJSXParserMixin>) =>\\n  class TypeScriptParserMixin extends superClass implements Parser {\\n    getScopeHandler(): {\\n      new (...args: any): TypeScriptScopeHandler;\\n    } {\\n      return TypeScriptScopeHandler;\\n    }\\n\\n    tsIsIdentifier(): boolean {\\n      // TODO: actually a bit more complex in TypeScript, but shouldn't matter.\\n      // See https://github.com/Microsoft/TypeScript/issues/15008\\n      return tokenIsIdentifier(this.state.type);\\n    }\\n\\n    tsTokenCanFollowModifier() {\\n      return (\\n        (this.match(tt.bracketL) ||\\n          this.match(tt.braceL) ||\\n          this.match(tt.star) ||\\n          this.match(tt.ellipsis) ||\\n          this.match(tt.privateName) ||\\n          this.isLiteralPropertyName()) &&\\n        !this.hasPrecedingLineBreak()\\n      );\\n    }\\n\\n    tsNextTokenCanFollowModifier() {\\n      // Note: TypeScript's implementation is much more complicated because\\n      // more things are considered modifiers there.\\n      // This implementation only handles modifiers not handled by @babel/parser itself. And \\\"static\\\".\\n      // TODO: Would be nice to avoid lookahead. Want a hasLineBreakUpNext() method...\\n      this.next();\\n      return this.tsTokenCanFollowModifier();\\n    }\\n\\n    /** Parses a modifier matching one the given modifier names. */\\n    tsParseModifier<T extends TsModifier>(\\n      allowedModifiers: T[],\\n      stopOnStartOfClassStaticBlock?: boolean,\\n    ): T | undefined | null {\\n      if (\\n        !tokenIsIdentifier(this.state.type) &&\\n        this.state.type !== tt._in &&\\n        this.state.type !== tt._const\\n      ) {\\n        return undefined;\\n      }\\n\\n      const modifier = this.state.value;\\n      if (allowedModifiers.indexOf(modifier) !== -1) {\\n        if (stopOnStartOfClassStaticBlock && this.tsIsStartOfStaticBlocks()) {\\n          return undefined;\\n        }\\n        if (this.tsTryParse(this.tsNextTokenCanFollowModifier.bind(this))) {\\n          return modifier;\\n        }\\n      }\\n      return undefined;\\n    }\\n\\n    /** Parses a list of modifiers, in any order.\\n     *  If you need a specific order, you must call this function multiple times:\\n     *    this.tsParseModifiers({ modified: node, allowedModifiers: [\\\"public\\\"] });\\n     *    this.tsParseModifiers({ modified: node, allowedModifiers: [\\\"abstract\\\", \\\"readonly\\\"] });\\n     */\\n    tsParseModifiers<N extends ModifierBase>(\\n      {\\n        allowedModifiers,\\n        disallowedModifiers,\\n        stopOnStartOfClassStaticBlock,\\n        errorTemplate = TSErrors.InvalidModifierOnTypeMember,\\n      }: {\\n        allowedModifiers: readonly TsModifier[];\\n        disallowedModifiers?: TsModifier[];\\n        stopOnStartOfClassStaticBlock?: boolean;\\n        errorTemplate?: typeof TSErrors.InvalidModifierOnTypeMember;\\n      },\\n      modified: N,\\n    ): void {\\n      const enforceOrder = (\\n        loc: Position,\\n        modifier: TsModifier,\\n        before: TsModifier,\\n        after: TsModifier,\\n      ) => {\\n        if (modifier === before && modified[after]) {\\n          this.raise(TSErrors.InvalidModifiersOrder, {\\n            at: loc,\\n            orderedModifiers: [before, after],\\n          });\\n        }\\n      };\\n      const incompatible = (\\n        loc: Position,\\n        modifier: TsModifier,\\n        mod1: TsModifier,\\n        mod2: TsModifier,\\n      ) => {\\n        if (\\n          (modified[mod1] && modifier === mod2) ||\\n          (modified[mod2] && modifier === mod1)\\n        ) {\\n          this.raise(TSErrors.IncompatibleModifiers, {\\n            at: loc,\\n            modifiers: [mod1, mod2],\\n          });\\n        }\\n      };\\n\\n      for (;;) {\\n        const { startLoc } = this.state;\\n        const modifier: TsModifier | undefined | null = this.tsParseModifier(\\n          allowedModifiers.concat(disallowedModifiers ?? []),\\n          stopOnStartOfClassStaticBlock,\\n        );\\n\\n        if (!modifier) break;\\n\\n        if (tsIsAccessModifier(modifier)) {\\n          if (modified.accessibility) {\\n            this.raise(TSErrors.DuplicateAccessibilityModifier, {\\n              at: startLoc,\\n              modifier,\\n            });\\n          } else {\\n            enforceOrder(startLoc, modifier, modifier, \\\"override\\\");\\n            enforceOrder(startLoc, modifier, modifier, \\\"static\\\");\\n            enforceOrder(startLoc, modifier, modifier, \\\"readonly\\\");\\n\\n            modified.accessibility = modifier;\\n          }\\n        } else if (tsIsVarianceAnnotations(modifier)) {\\n          if (modified[modifier]) {\\n            this.raise(TSErrors.DuplicateModifier, { at: startLoc, modifier });\\n          }\\n          modified[modifier] = true;\\n\\n          enforceOrder(startLoc, modifier, \\\"in\\\", \\\"out\\\");\\n        } else {\\n          if (Object.hasOwnProperty.call(modified, modifier)) {\\n            this.raise(TSErrors.DuplicateModifier, { at: startLoc, modifier });\\n          } else {\\n            enforceOrder(startLoc, modifier, \\\"static\\\", \\\"readonly\\\");\\n            enforceOrder(startLoc, modifier, \\\"static\\\", \\\"override\\\");\\n            enforceOrder(startLoc, modifier, \\\"override\\\", \\\"readonly\\\");\\n            enforceOrder(startLoc, modifier, \\\"abstract\\\", \\\"override\\\");\\n\\n            incompatible(startLoc, modifier, \\\"declare\\\", \\\"override\\\");\\n            incompatible(startLoc, modifier, \\\"static\\\", \\\"abstract\\\");\\n          }\\n          modified[modifier] = true;\\n        }\\n\\n        if (disallowedModifiers?.includes(modifier)) {\\n          this.raise(errorTemplate, {\\n            at: startLoc,\\n            modifier,\\n          });\\n        }\\n      }\\n    }\\n\\n    tsIsListTerminator(kind: ParsingContext): boolean {\\n      switch (kind) {\\n        case \\\"EnumMembers\\\":\\n        case \\\"TypeMembers\\\":\\n          return this.match(tt.braceR);\\n        case \\\"HeritageClauseElement\\\":\\n          return this.match(tt.braceL);\\n        case \\\"TupleElementTypes\\\":\\n          return this.match(tt.bracketR);\\n        case \\\"TypeParametersOrArguments\\\":\\n          return this.match(tt.gt);\\n      }\\n    }\\n\\n    tsParseList<T extends N.Node>(\\n      kind: ParsingContext,\\n      parseElement: () => T,\\n    ): T[] {\\n      const result: T[] = [];\\n      while (!this.tsIsListTerminator(kind)) {\\n        // Skipping \\\"parseListElement\\\" from the TS source since that's just for error handling.\\n        result.push(parseElement());\\n      }\\n      return result;\\n    }\\n\\n    tsParseDelimitedList<T extends N.Node>(\\n      kind: ParsingContext,\\n      parseElement: () => T,\\n      refTrailingCommaPos?: {\\n        value: number;\\n      },\\n    ): T[] {\\n      return nonNull(\\n        this.tsParseDelimitedListWorker(\\n          kind,\\n          parseElement,\\n          /* expectSuccess */ true,\\n          refTrailingCommaPos,\\n        ),\\n      );\\n    }\\n\\n    /**\\n     * If !expectSuccess, returns undefined instead of failing to parse.\\n     * If expectSuccess, parseElement should always return a defined value.\\n     */\\n    tsParseDelimitedListWorker<T extends N.Node>(\\n      kind: ParsingContext,\\n      parseElement: () => T | undefined | null,\\n      expectSuccess: boolean,\\n      refTrailingCommaPos?: {\\n        value: number;\\n      },\\n    ): T[] | undefined | null {\\n      const result = [];\\n      let trailingCommaPos = -1;\\n\\n      for (;;) {\\n        if (this.tsIsListTerminator(kind)) {\\n          break;\\n        }\\n        trailingCommaPos = -1;\\n\\n        const element = parseElement();\\n        if (element == null) {\\n          return undefined;\\n        }\\n        result.push(element);\\n\\n        if (this.eat(tt.comma)) {\\n          trailingCommaPos = this.state.lastTokStart;\\n          continue;\\n        }\\n\\n        if (this.tsIsListTerminator(kind)) {\\n          break;\\n        }\\n\\n        if (expectSuccess) {\\n          // This will fail with an error about a missing comma\\n          this.expect(tt.comma);\\n        }\\n        return undefined;\\n      }\\n\\n      if (refTrailingCommaPos) {\\n        refTrailingCommaPos.value = trailingCommaPos;\\n      }\\n\\n      return result;\\n    }\\n\\n    tsParseBracketedList<T extends N.Node>(\\n      kind: ParsingContext,\\n      parseElement: () => T,\\n      bracket: boolean,\\n      skipFirstToken: boolean,\\n      refTrailingCommaPos?: {\\n        value: number;\\n      },\\n    ): T[] {\\n      if (!skipFirstToken) {\\n        if (bracket) {\\n          this.expect(tt.bracketL);\\n        } else {\\n          this.expect(tt.lt);\\n        }\\n      }\\n\\n      const result = this.tsParseDelimitedList(\\n        kind,\\n        parseElement,\\n        refTrailingCommaPos,\\n      );\\n\\n      if (bracket) {\\n        this.expect(tt.bracketR);\\n      } else {\\n        this.expect(tt.gt);\\n      }\\n\\n      return result;\\n    }\\n\\n    tsParseImportType(): N.TsImportType {\\n      const node = this.startNode<N.TsImportType>();\\n      this.expect(tt._import);\\n      this.expect(tt.parenL);\\n      if (!this.match(tt.string)) {\\n        this.raise(TSErrors.UnsupportedImportTypeArgument, {\\n          at: this.state.startLoc,\\n        });\\n      }\\n\\n      // For compatibility to estree we cannot call parseLiteral directly here\\n      node.argument = super.parseExprAtom() as N.StringLiteral;\\n      this.expect(tt.parenR);\\n\\n      if (this.eat(tt.dot)) {\\n        // In this instance, the entity name will actually itself be a\\n        // qualifier, so allow it to be a reserved word as well.\\n        node.qualifier = this.tsParseEntityName();\\n      }\\n      if (this.match(tt.lt)) {\\n        node.typeParameters = this.tsParseTypeArguments();\\n      }\\n      return this.finishNode(node, \\\"TSImportType\\\");\\n    }\\n\\n    tsParseEntityName(allowReservedWords: boolean = true): N.TsEntityName {\\n      let entity: N.TsEntityName = this.parseIdentifier(allowReservedWords);\\n      while (this.eat(tt.dot)) {\\n        const node: Undone<N.TsQualifiedName> =\\n          this.startNodeAtNode<N.TsQualifiedName>(entity);\\n        node.left = entity;\\n        node.right = this.parseIdentifier(allowReservedWords);\\n        entity = this.finishNode(node, \\\"TSQualifiedName\\\");\\n      }\\n      return entity;\\n    }\\n\\n    tsParseTypeReference(): N.TsTypeReference {\\n      const node = this.startNode<N.TsTypeReference>();\\n      node.typeName = this.tsParseEntityName();\\n      if (!this.hasPrecedingLineBreak() && this.match(tt.lt)) {\\n        node.typeParameters = this.tsParseTypeArguments();\\n      }\\n      return this.finishNode(node, \\\"TSTypeReference\\\");\\n    }\\n\\n    tsParseThisTypePredicate(lhs: N.TsThisType): N.TsTypePredicate {\\n      this.next();\\n      const node = this.startNodeAtNode<N.TsTypePredicate>(lhs);\\n      node.parameterName = lhs;\\n      node.typeAnnotation = this.tsParseTypeAnnotation(/* eatColon */ false);\\n      node.asserts = false;\\n      return this.finishNode(node, \\\"TSTypePredicate\\\");\\n    }\\n\\n    tsParseThisTypeNode(): N.TsThisType {\\n      const node = this.startNode<N.TsThisType>();\\n      this.next();\\n      return this.finishNode(node, \\\"TSThisType\\\");\\n    }\\n\\n    tsParseTypeQuery(): N.TsTypeQuery {\\n      const node = this.startNode<N.TsTypeQuery>();\\n      this.expect(tt._typeof);\\n      if (this.match(tt._import)) {\\n        node.exprName = this.tsParseImportType();\\n      } else {\\n        node.exprName = this.tsParseEntityName();\\n      }\\n      if (!this.hasPrecedingLineBreak() && this.match(tt.lt)) {\\n        node.typeParameters = this.tsParseTypeArguments();\\n      }\\n      return this.finishNode(node, \\\"TSTypeQuery\\\");\\n    }\\n\\n    tsParseInOutModifiers = this.tsParseModifiers.bind(this, {\\n      allowedModifiers: [\\\"in\\\", \\\"out\\\"],\\n      disallowedModifiers: [\\n        \\\"const\\\",\\n        \\\"public\\\",\\n        \\\"private\\\",\\n        \\\"protected\\\",\\n        \\\"readonly\\\",\\n        \\\"declare\\\",\\n        \\\"abstract\\\",\\n        \\\"override\\\",\\n      ],\\n      errorTemplate: TSErrors.InvalidModifierOnTypeParameter,\\n    });\\n\\n    tsParseConstModifier = this.tsParseModifiers.bind(this, {\\n      allowedModifiers: [\\\"const\\\"],\\n      // for better error recovery\\n      disallowedModifiers: [\\\"in\\\", \\\"out\\\"],\\n      errorTemplate: TSErrors.InvalidModifierOnTypeParameterPositions,\\n    });\\n\\n    tsParseInOutConstModifiers = this.tsParseModifiers.bind(this, {\\n      allowedModifiers: [\\\"in\\\", \\\"out\\\", \\\"const\\\"],\\n      disallowedModifiers: [\\n        \\\"public\\\",\\n        \\\"private\\\",\\n        \\\"protected\\\",\\n        \\\"readonly\\\",\\n        \\\"declare\\\",\\n        \\\"abstract\\\",\\n        \\\"override\\\",\\n      ],\\n      errorTemplate: TSErrors.InvalidModifierOnTypeParameter,\\n    });\\n\\n    tsParseTypeParameter(\\n      parseModifiers: (node: Undone<N.TsTypeParameter>) => void,\\n    ): N.TsTypeParameter {\\n      const node = this.startNode<N.TsTypeParameter>();\\n\\n      parseModifiers(node);\\n\\n      node.name = this.tsParseTypeParameterName();\\n      node.constraint = this.tsEatThenParseType(tt._extends);\\n      node.default = this.tsEatThenParseType(tt.eq);\\n      return this.finishNode(node, \\\"TSTypeParameter\\\");\\n    }\\n\\n    tsTryParseTypeParameters(\\n      parseModifiers: (node: N.TsTypeParameter) => void,\\n    ): N.TsTypeParameterDeclaration | undefined | null {\\n      if (this.match(tt.lt)) {\\n        return this.tsParseTypeParameters(parseModifiers);\\n      }\\n    }\\n\\n    tsParseTypeParameters(parseModifiers: (node: N.TsTypeParameter) => void) {\\n      const node = this.startNode<N.TsTypeParameterDeclaration>();\\n\\n      if (this.match(tt.lt) || this.match(tt.jsxTagStart)) {\\n        this.next();\\n      } else {\\n        this.unexpected();\\n      }\\n\\n      const refTrailingCommaPos = { value: -1 };\\n\\n      node.params = this.tsParseBracketedList(\\n        \\\"TypeParametersOrArguments\\\",\\n        // @ts-expect-error refine typings\\n        this.tsParseTypeParameter.bind(this, parseModifiers),\\n        /* bracket */ false,\\n        /* skipFirstToken */ true,\\n        refTrailingCommaPos,\\n      );\\n      if (node.params.length === 0) {\\n        this.raise(TSErrors.EmptyTypeParameters, { at: node });\\n      }\\n      if (refTrailingCommaPos.value !== -1) {\\n        this.addExtra(node, \\\"trailingComma\\\", refTrailingCommaPos.value);\\n      }\\n      return this.finishNode(node, \\\"TSTypeParameterDeclaration\\\");\\n    }\\n\\n    // Note: In TypeScript implementation we must provide `yieldContext` and `awaitContext`,\\n    // but here it's always false, because this is only used for types.\\n    tsFillSignature(\\n      returnToken: TokenType,\\n      signature: Undone<N.TsSignatureDeclaration>,\\n    ): void {\\n      // Arrow fns *must* have return token (`=>`). Normal functions can omit it.\\n      const returnTokenRequired = returnToken === tt.arrow;\\n\\n      // https://github.com/babel/babel/issues/9231\\n      const paramsKey = process.env.BABEL_8_BREAKING ? \\\"params\\\" : \\\"parameters\\\";\\n      const returnTypeKey = process.env.BABEL_8_BREAKING\\n        ? \\\"returnType\\\"\\n        : \\\"typeAnnotation\\\";\\n\\n      signature.typeParameters = this.tsTryParseTypeParameters(\\n        this.tsParseConstModifier,\\n      );\\n      this.expect(tt.parenL);\\n      signature[paramsKey] = this.tsParseBindingListForSignature();\\n      if (returnTokenRequired) {\\n        signature[returnTypeKey] =\\n          this.tsParseTypeOrTypePredicateAnnotation(returnToken);\\n      } else if (this.match(returnToken)) {\\n        signature[returnTypeKey] =\\n          this.tsParseTypeOrTypePredicateAnnotation(returnToken);\\n      }\\n    }\\n\\n    tsParseBindingListForSignature(): Array<\\n      N.Identifier | N.RestElement | N.ObjectPattern | N.ArrayPattern\\n    > {\\n      return super\\n        .parseBindingList(\\n          tt.parenR,\\n          charCodes.rightParenthesis,\\n          ParseBindingListFlags.IS_FUNCTION_PARAMS,\\n        )\\n        .map(pattern => {\\n          if (\\n            pattern.type !== \\\"Identifier\\\" &&\\n            pattern.type !== \\\"RestElement\\\" &&\\n            pattern.type !== \\\"ObjectPattern\\\" &&\\n            pattern.type !== \\\"ArrayPattern\\\"\\n          ) {\\n            this.raise(TSErrors.UnsupportedSignatureParameterKind, {\\n              at: pattern,\\n              type: pattern.type,\\n            });\\n          }\\n          return pattern as any;\\n        });\\n    }\\n\\n    tsParseTypeMemberSemicolon(): void {\\n      if (!this.eat(tt.comma) && !this.isLineTerminator()) {\\n        this.expect(tt.semi);\\n      }\\n    }\\n\\n    tsParseSignatureMember(\\n      kind: \\\"TSCallSignatureDeclaration\\\" | \\\"TSConstructSignatureDeclaration\\\",\\n      node: Undone<\\n        N.TsCallSignatureDeclaration | N.TsConstructSignatureDeclaration\\n      >,\\n    ): N.TsCallSignatureDeclaration | N.TsConstructSignatureDeclaration {\\n      this.tsFillSignature(tt.colon, node);\\n      this.tsParseTypeMemberSemicolon();\\n      return this.finishNode(node, kind);\\n    }\\n\\n    tsIsUnambiguouslyIndexSignature() {\\n      this.next(); // Skip '{'\\n      if (tokenIsIdentifier(this.state.type)) {\\n        this.next();\\n        return this.match(tt.colon);\\n      }\\n      return false;\\n    }\\n\\n    tsTryParseIndexSignature(\\n      node: Undone<N.TsIndexSignature>,\\n    ): N.TsIndexSignature | undefined | null {\\n      if (\\n        !(\\n          this.match(tt.bracketL) &&\\n          this.tsLookAhead(this.tsIsUnambiguouslyIndexSignature.bind(this))\\n        )\\n      ) {\\n        return undefined;\\n      }\\n\\n      this.expect(tt.bracketL);\\n      const id = this.parseIdentifier();\\n      id.typeAnnotation = this.tsParseTypeAnnotation();\\n      this.resetEndLocation(id); // set end position to end of type\\n\\n      this.expect(tt.bracketR);\\n      node.parameters = [id];\\n\\n      const type = this.tsTryParseTypeAnnotation();\\n      if (type) node.typeAnnotation = type;\\n      this.tsParseTypeMemberSemicolon();\\n      return this.finishNode(node, \\\"TSIndexSignature\\\");\\n    }\\n\\n    tsParsePropertyOrMethodSignature(\\n      node: N.TsPropertySignature | N.TsMethodSignature,\\n      readonly: boolean,\\n    ): N.TsPropertySignature | N.TsMethodSignature {\\n      if (this.eat(tt.question)) node.optional = true;\\n      const nodeAny: any = node;\\n\\n      if (this.match(tt.parenL) || this.match(tt.lt)) {\\n        if (readonly) {\\n          this.raise(TSErrors.ReadonlyForMethodSignature, { at: node });\\n        }\\n        const method: N.TsMethodSignature = nodeAny;\\n        if (method.kind && this.match(tt.lt)) {\\n          this.raise(TSErrors.AccesorCannotHaveTypeParameters, {\\n            at: this.state.curPosition(),\\n          });\\n        }\\n        this.tsFillSignature(tt.colon, method);\\n        this.tsParseTypeMemberSemicolon();\\n        const paramsKey = process.env.BABEL_8_BREAKING\\n          ? \\\"params\\\"\\n          : \\\"parameters\\\";\\n        const returnTypeKey = process.env.BABEL_8_BREAKING\\n          ? \\\"returnType\\\"\\n          : \\\"typeAnnotation\\\";\\n        if (method.kind === \\\"get\\\") {\\n          if (method[paramsKey].length > 0) {\\n            this.raise(Errors.BadGetterArity, { at: this.state.curPosition() });\\n            if (this.isThisParam(method[paramsKey][0])) {\\n              this.raise(TSErrors.AccesorCannotDeclareThisParameter, {\\n                at: this.state.curPosition(),\\n              });\\n            }\\n          }\\n        } else if (method.kind === \\\"set\\\") {\\n          if (method[paramsKey].length !== 1) {\\n            this.raise(Errors.BadSetterArity, { at: this.state.curPosition() });\\n          } else {\\n            const firstParameter = method[paramsKey][0];\\n            if (this.isThisParam(firstParameter)) {\\n              this.raise(TSErrors.AccesorCannotDeclareThisParameter, {\\n                at: this.state.curPosition(),\\n              });\\n            }\\n            if (\\n              firstParameter.type === \\\"Identifier\\\" &&\\n              firstParameter.optional\\n            ) {\\n              this.raise(TSErrors.SetAccesorCannotHaveOptionalParameter, {\\n                at: this.state.curPosition(),\\n              });\\n            }\\n            if (firstParameter.type === \\\"RestElement\\\") {\\n              this.raise(TSErrors.SetAccesorCannotHaveRestParameter, {\\n                at: this.state.curPosition(),\\n              });\\n            }\\n          }\\n          if (method[returnTypeKey]) {\\n            this.raise(TSErrors.SetAccesorCannotHaveReturnType, {\\n              at: method[returnTypeKey],\\n            });\\n          }\\n        } else {\\n          method.kind = \\\"method\\\";\\n        }\\n        return this.finishNode(method, \\\"TSMethodSignature\\\");\\n      } else {\\n        const property: N.TsPropertySignature = nodeAny;\\n        if (readonly) property.readonly = true;\\n        const type = this.tsTryParseTypeAnnotation();\\n        if (type) property.typeAnnotation = type;\\n        this.tsParseTypeMemberSemicolon();\\n        return this.finishNode(property, \\\"TSPropertySignature\\\");\\n      }\\n    }\\n\\n    tsParseTypeMember(): N.TsTypeElement {\\n      const node: any = this.startNode();\\n\\n      if (this.match(tt.parenL) || this.match(tt.lt)) {\\n        return this.tsParseSignatureMember(\\\"TSCallSignatureDeclaration\\\", node);\\n      }\\n\\n      if (this.match(tt._new)) {\\n        const id = this.startNode<N.Identifier>();\\n        this.next();\\n        if (this.match(tt.parenL) || this.match(tt.lt)) {\\n          return this.tsParseSignatureMember(\\n            \\\"TSConstructSignatureDeclaration\\\",\\n            node,\\n          );\\n        } else {\\n          node.key = this.createIdentifier(id, \\\"new\\\");\\n          return this.tsParsePropertyOrMethodSignature(node, false);\\n        }\\n      }\\n\\n      this.tsParseModifiers(\\n        {\\n          allowedModifiers: [\\\"readonly\\\"],\\n          disallowedModifiers: [\\n            \\\"declare\\\",\\n            \\\"abstract\\\",\\n            \\\"private\\\",\\n            \\\"protected\\\",\\n            \\\"public\\\",\\n            \\\"static\\\",\\n            \\\"override\\\",\\n          ],\\n        },\\n        node,\\n      );\\n\\n      const idx = this.tsTryParseIndexSignature(node);\\n      if (idx) {\\n        return idx;\\n      }\\n\\n      super.parsePropertyName(node);\\n      if (\\n        !node.computed &&\\n        node.key.type === \\\"Identifier\\\" &&\\n        (node.key.name === \\\"get\\\" || node.key.name === \\\"set\\\") &&\\n        this.tsTokenCanFollowModifier()\\n      ) {\\n        node.kind = node.key.name;\\n        super.parsePropertyName(node);\\n      }\\n      return this.tsParsePropertyOrMethodSignature(node, !!node.readonly);\\n    }\\n\\n    tsParseTypeLiteral(): N.TsTypeLiteral {\\n      const node = this.startNode<N.TsTypeLiteral>();\\n      node.members = this.tsParseObjectTypeMembers();\\n      return this.finishNode(node, \\\"TSTypeLiteral\\\");\\n    }\\n\\n    tsParseObjectTypeMembers(): Array<N.TsTypeElement> {\\n      this.expect(tt.braceL);\\n      const members = this.tsParseList(\\n        \\\"TypeMembers\\\",\\n        this.tsParseTypeMember.bind(this),\\n      );\\n      this.expect(tt.braceR);\\n      return members;\\n    }\\n\\n    tsIsStartOfMappedType(): boolean {\\n      this.next();\\n      if (this.eat(tt.plusMin)) {\\n        return this.isContextual(tt._readonly);\\n      }\\n      if (this.isContextual(tt._readonly)) {\\n        this.next();\\n      }\\n      if (!this.match(tt.bracketL)) {\\n        return false;\\n      }\\n      this.next();\\n      if (!this.tsIsIdentifier()) {\\n        return false;\\n      }\\n      this.next();\\n      return this.match(tt._in);\\n    }\\n\\n    tsParseMappedTypeParameter(): N.TsTypeParameter {\\n      const node = this.startNode<N.TsTypeParameter>();\\n      node.name = this.tsParseTypeParameterName();\\n      node.constraint = this.tsExpectThenParseType(tt._in);\\n      return this.finishNode(node, \\\"TSTypeParameter\\\");\\n    }\\n\\n    tsParseMappedType(): N.TsMappedType {\\n      const node = this.startNode<N.TsMappedType>();\\n\\n      this.expect(tt.braceL);\\n\\n      if (this.match(tt.plusMin)) {\\n        node.readonly = this.state.value;\\n        this.next();\\n        this.expectContextual(tt._readonly);\\n      } else if (this.eatContextual(tt._readonly)) {\\n        node.readonly = true;\\n      }\\n\\n      this.expect(tt.bracketL);\\n      node.typeParameter = this.tsParseMappedTypeParameter();\\n      node.nameType = this.eatContextual(tt._as) ? this.tsParseType() : null;\\n\\n      this.expect(tt.bracketR);\\n\\n      if (this.match(tt.plusMin)) {\\n        node.optional = this.state.value;\\n        this.next();\\n        this.expect(tt.question);\\n      } else if (this.eat(tt.question)) {\\n        node.optional = true;\\n      }\\n\\n      node.typeAnnotation = this.tsTryParseType();\\n      this.semicolon();\\n      this.expect(tt.braceR);\\n\\n      return this.finishNode(node, \\\"TSMappedType\\\");\\n    }\\n\\n    tsParseTupleType(): N.TsTupleType {\\n      const node = this.startNode<N.TsTupleType>();\\n      node.elementTypes = this.tsParseBracketedList(\\n        \\\"TupleElementTypes\\\",\\n        this.tsParseTupleElementType.bind(this),\\n        /* bracket */ true,\\n        /* skipFirstToken */ false,\\n      );\\n\\n      // Validate the elementTypes to ensure that no mandatory elements\\n      // follow optional elements\\n      let seenOptionalElement = false;\\n      let labeledElements: boolean | null = null;\\n      node.elementTypes.forEach(elementNode => {\\n        const { type } = elementNode;\\n\\n        if (\\n          seenOptionalElement &&\\n          type !== \\\"TSRestType\\\" &&\\n          type !== \\\"TSOptionalType\\\" &&\\n          !(type === \\\"TSNamedTupleMember\\\" && elementNode.optional)\\n        ) {\\n          this.raise(TSErrors.OptionalTypeBeforeRequired, {\\n            at: elementNode,\\n          });\\n        }\\n\\n        seenOptionalElement ||=\\n          (type === \\\"TSNamedTupleMember\\\" && elementNode.optional) ||\\n          type === \\\"TSOptionalType\\\";\\n\\n        // When checking labels, check the argument of the spread operator\\n        let checkType = type;\\n        if (type === \\\"TSRestType\\\") {\\n          elementNode = elementNode.typeAnnotation;\\n          checkType = elementNode.type;\\n        }\\n\\n        const isLabeled = checkType === \\\"TSNamedTupleMember\\\";\\n        labeledElements ??= isLabeled;\\n        if (labeledElements !== isLabeled) {\\n          this.raise(TSErrors.MixedLabeledAndUnlabeledElements, {\\n            at: elementNode,\\n          });\\n        }\\n      });\\n\\n      return this.finishNode(node, \\\"TSTupleType\\\");\\n    }\\n\\n    tsParseTupleElementType(): N.TsNamedTupleMember | N.TsType {\\n      // parses `...TsType[]`\\n\\n      const { startLoc } = this.state;\\n\\n      const rest = this.eat(tt.ellipsis);\\n\\n      let labeled: boolean;\\n      let label: N.Identifier;\\n      let optional: boolean;\\n      let type: N.TsNamedTupleMember | N.TsType;\\n\\n      const isWord = tokenIsKeywordOrIdentifier(this.state.type);\\n      const chAfterWord = isWord ? this.lookaheadCharCode() : null;\\n      if (chAfterWord === charCodes.colon) {\\n        labeled = true;\\n        optional = false;\\n        label = this.parseIdentifier(true);\\n        this.expect(tt.colon);\\n        type = this.tsParseType();\\n      } else if (chAfterWord === charCodes.questionMark) {\\n        optional = true;\\n        const startLoc = this.state.startLoc;\\n        const wordName = this.state.value;\\n        const typeOrLabel = this.tsParseNonArrayType();\\n\\n        if (this.lookaheadCharCode() === charCodes.colon) {\\n          labeled = true;\\n          label = this.createIdentifier(\\n            this.startNodeAt<N.Identifier>(startLoc),\\n            wordName,\\n          );\\n          this.expect(tt.question);\\n          this.expect(tt.colon);\\n          type = this.tsParseType();\\n        } else {\\n          labeled = false;\\n          type = typeOrLabel;\\n          this.expect(tt.question);\\n        }\\n      } else {\\n        type = this.tsParseType();\\n        optional = this.eat(tt.question);\\n        // In this case (labeled === true) could be only in invalid label.\\n        // E.g. [x.y:type]\\n        // An error is raised while processing node.\\n        labeled = this.eat(tt.colon);\\n      }\\n\\n      if (labeled) {\\n        let labeledNode: Undone<N.TsNamedTupleMember>;\\n        if (label) {\\n          labeledNode = this.startNodeAtNode<N.TsNamedTupleMember>(label);\\n          labeledNode.optional = optional;\\n          labeledNode.label = label;\\n          labeledNode.elementType = type;\\n\\n          if (this.eat(tt.question)) {\\n            labeledNode.optional = true;\\n            this.raise(TSErrors.TupleOptionalAfterType, {\\n              at: this.state.lastTokStartLoc,\\n            });\\n          }\\n        } else {\\n          labeledNode = this.startNodeAtNode<N.TsNamedTupleMember>(type);\\n          labeledNode.optional = optional;\\n          this.raise(TSErrors.InvalidTupleMemberLabel, { at: type });\\n          // @ts-expect-error This produces an invalid AST, but at least we don't drop\\n          // nodes representing the invalid source.\\n          labeledNode.label = type;\\n          labeledNode.elementType = this.tsParseType();\\n        }\\n        type = this.finishNode(labeledNode, \\\"TSNamedTupleMember\\\");\\n      } else if (optional) {\\n        const optionalTypeNode = this.startNodeAtNode<N.TsOptionalType>(type);\\n        optionalTypeNode.typeAnnotation = type;\\n        type = this.finishNode(optionalTypeNode, \\\"TSOptionalType\\\");\\n      }\\n\\n      if (rest) {\\n        const restNode = this.startNodeAt<N.TsRestType>(startLoc);\\n        restNode.typeAnnotation = type;\\n        type = this.finishNode(restNode, \\\"TSRestType\\\");\\n      }\\n\\n      return type;\\n    }\\n\\n    tsParseParenthesizedType(): N.TsParenthesizedType {\\n      const node = this.startNode<N.TsParenthesizedType>();\\n      this.expect(tt.parenL);\\n      node.typeAnnotation = this.tsParseType();\\n      this.expect(tt.parenR);\\n      return this.finishNode(node, \\\"TSParenthesizedType\\\");\\n    }\\n\\n    tsParseFunctionOrConstructorType(\\n      type: \\\"TSFunctionType\\\" | \\\"TSConstructorType\\\",\\n      abstract?: boolean,\\n    ): N.TsFunctionOrConstructorType {\\n      const node = this.startNode<\\n        N.TsFunctionOrConstructorType | N.TsConstructorType\\n      >();\\n      if (type === \\\"TSConstructorType\\\") {\\n        (node as Undone<N.TsConstructorType>).abstract = !!abstract;\\n        if (abstract) this.next();\\n        this.next(); // eat `new`\\n      }\\n      this.tsInAllowConditionalTypesContext(() =>\\n        this.tsFillSignature(tt.arrow, node),\\n      );\\n      return this.finishNode(node, type);\\n    }\\n\\n    tsParseLiteralTypeNode(): N.TsLiteralType {\\n      const node = this.startNode<N.TsLiteralType>();\\n      // @ts-expect-error refine typings\\n      node.literal = (() => {\\n        switch (this.state.type) {\\n          case tt.num:\\n          case tt.bigint:\\n          case tt.string:\\n          case tt._true:\\n          case tt._false:\\n            // For compatibility to estree we cannot call parseLiteral directly here\\n            return super.parseExprAtom();\\n          default:\\n            this.unexpected();\\n        }\\n      })();\\n      return this.finishNode(node, \\\"TSLiteralType\\\");\\n    }\\n\\n    tsParseTemplateLiteralType(): N.TsType {\\n      const node = this.startNode<N.TsLiteralType>();\\n      node.literal = super.parseTemplate(false);\\n      return this.finishNode(node, \\\"TSLiteralType\\\");\\n    }\\n\\n    parseTemplateSubstitution(): N.TsType | N.Node {\\n      if (this.state.inType) return this.tsParseType();\\n      return super.parseTemplateSubstitution();\\n    }\\n\\n    tsParseThisTypeOrThisTypePredicate(): N.TsThisType | N.TsTypePredicate {\\n      const thisKeyword = this.tsParseThisTypeNode();\\n      if (this.isContextual(tt._is) && !this.hasPrecedingLineBreak()) {\\n        return this.tsParseThisTypePredicate(thisKeyword);\\n      } else {\\n        return thisKeyword;\\n      }\\n    }\\n\\n    tsParseNonArrayType(): N.TsType {\\n      switch (this.state.type) {\\n        case tt.string:\\n        case tt.num:\\n        case tt.bigint:\\n        case tt._true:\\n        case tt._false:\\n          return this.tsParseLiteralTypeNode();\\n        case tt.plusMin:\\n          if (this.state.value === \\\"-\\\") {\\n            const node = this.startNode<N.TsLiteralType>();\\n            const nextToken = this.lookahead();\\n            if (nextToken.type !== tt.num && nextToken.type !== tt.bigint) {\\n              this.unexpected();\\n            }\\n            // @ts-expect-error: parseMaybeUnary must returns unary expression\\n            node.literal = this.parseMaybeUnary();\\n            return this.finishNode(node, \\\"TSLiteralType\\\");\\n          }\\n          break;\\n        case tt._this:\\n          return this.tsParseThisTypeOrThisTypePredicate();\\n        case tt._typeof:\\n          return this.tsParseTypeQuery();\\n        case tt._import:\\n          return this.tsParseImportType();\\n        case tt.braceL:\\n          return this.tsLookAhead(this.tsIsStartOfMappedType.bind(this))\\n            ? this.tsParseMappedType()\\n            : this.tsParseTypeLiteral();\\n        case tt.bracketL:\\n          return this.tsParseTupleType();\\n        case tt.parenL:\\n          if (process.env.BABEL_8_BREAKING) {\\n            if (!this.options.createParenthesizedExpressions) {\\n              const startLoc = this.state.startLoc;\\n              this.next();\\n              const type = this.tsParseType();\\n              this.expect(tt.parenR);\\n              this.addExtra(type, \\\"parenthesized\\\", true);\\n              this.addExtra(type, \\\"parenStart\\\", startLoc.index);\\n              return type;\\n            }\\n          }\\n\\n          return this.tsParseParenthesizedType();\\n        case tt.templateNonTail:\\n        case tt.templateTail:\\n          return this.tsParseTemplateLiteralType();\\n        default: {\\n          const { type } = this.state;\\n          if (\\n            tokenIsIdentifier(type) ||\\n            type === tt._void ||\\n            type === tt._null\\n          ) {\\n            const nodeType =\\n              type === tt._void\\n                ? \\\"TSVoidKeyword\\\"\\n                : type === tt._null\\n                ? \\\"TSNullKeyword\\\"\\n                : keywordTypeFromName(this.state.value);\\n            if (\\n              nodeType !== undefined &&\\n              this.lookaheadCharCode() !== charCodes.dot\\n            ) {\\n              const node = this.startNode<N.TsKeywordType>();\\n              this.next();\\n              return this.finishNode(node, nodeType);\\n            }\\n            return this.tsParseTypeReference();\\n          }\\n        }\\n      }\\n\\n      this.unexpected();\\n    }\\n\\n    tsParseArrayTypeOrHigher(): N.TsType {\\n      let type = this.tsParseNonArrayType();\\n      while (!this.hasPrecedingLineBreak() && this.eat(tt.bracketL)) {\\n        if (this.match(tt.bracketR)) {\\n          const node = this.startNodeAtNode<N.TsArrayType>(type);\\n          node.elementType = type;\\n          this.expect(tt.bracketR);\\n          type = this.finishNode(node, \\\"TSArrayType\\\");\\n        } else {\\n          const node = this.startNodeAtNode<N.TsIndexedAccessType>(type);\\n          node.objectType = type;\\n          node.indexType = this.tsParseType();\\n          this.expect(tt.bracketR);\\n          type = this.finishNode(node, \\\"TSIndexedAccessType\\\");\\n        }\\n      }\\n      return type;\\n    }\\n\\n    tsParseTypeOperator(): N.TsTypeOperator {\\n      const node = this.startNode<N.TsTypeOperator>();\\n      const operator = this.state.value;\\n      this.next(); // eat operator\\n      node.operator = operator;\\n      node.typeAnnotation = this.tsParseTypeOperatorOrHigher();\\n\\n      if (operator === \\\"readonly\\\") {\\n        this.tsCheckTypeAnnotationForReadOnly(\\n          // @ts-expect-error todo(flow->ts)\\n          node,\\n        );\\n      }\\n\\n      return this.finishNode(node, \\\"TSTypeOperator\\\");\\n    }\\n\\n    tsCheckTypeAnnotationForReadOnly(node: N.Node) {\\n      switch (node.typeAnnotation.type) {\\n        case \\\"TSTupleType\\\":\\n        case \\\"TSArrayType\\\":\\n          return;\\n        default:\\n          this.raise(TSErrors.UnexpectedReadonly, { at: node });\\n      }\\n    }\\n\\n    tsParseInferType(): N.TsInferType {\\n      const node = this.startNode<N.TsInferType>();\\n      this.expectContextual(tt._infer);\\n      const typeParameter = this.startNode<N.TsTypeParameter>();\\n      typeParameter.name = this.tsParseTypeParameterName();\\n      typeParameter.constraint = this.tsTryParse(() =>\\n        this.tsParseConstraintForInferType(),\\n      );\\n      node.typeParameter = this.finishNode(typeParameter, \\\"TSTypeParameter\\\");\\n      return this.finishNode(node, \\\"TSInferType\\\");\\n    }\\n\\n    tsParseConstraintForInferType() {\\n      if (this.eat(tt._extends)) {\\n        const constraint = this.tsInDisallowConditionalTypesContext(() =>\\n          this.tsParseType(),\\n        );\\n        if (\\n          this.state.inDisallowConditionalTypesContext ||\\n          !this.match(tt.question)\\n        ) {\\n          return constraint;\\n        }\\n      }\\n    }\\n\\n    tsParseTypeOperatorOrHigher(): N.TsType {\\n      const isTypeOperator =\\n        tokenIsTSTypeOperator(this.state.type) && !this.state.containsEsc;\\n      return isTypeOperator\\n        ? this.tsParseTypeOperator()\\n        : this.isContextual(tt._infer)\\n        ? this.tsParseInferType()\\n        : this.tsInAllowConditionalTypesContext(() =>\\n            this.tsParseArrayTypeOrHigher(),\\n          );\\n    }\\n\\n    tsParseUnionOrIntersectionType(\\n      kind: \\\"TSUnionType\\\" | \\\"TSIntersectionType\\\",\\n      parseConstituentType: () => N.TsType,\\n      operator: TokenType,\\n    ): N.TsType {\\n      const node = this.startNode<N.TsUnionType | N.TsIntersectionType>();\\n      const hasLeadingOperator = this.eat(operator);\\n      const types = [];\\n      do {\\n        types.push(parseConstituentType());\\n      } while (this.eat(operator));\\n      if (types.length === 1 && !hasLeadingOperator) {\\n        return types[0];\\n      }\\n      node.types = types;\\n      return this.finishNode(node, kind);\\n    }\\n\\n    tsParseIntersectionTypeOrHigher(): N.TsType {\\n      return this.tsParseUnionOrIntersectionType(\\n        \\\"TSIntersectionType\\\",\\n        this.tsParseTypeOperatorOrHigher.bind(this),\\n        tt.bitwiseAND,\\n      );\\n    }\\n\\n    tsParseUnionTypeOrHigher() {\\n      return this.tsParseUnionOrIntersectionType(\\n        \\\"TSUnionType\\\",\\n        this.tsParseIntersectionTypeOrHigher.bind(this),\\n        tt.bitwiseOR,\\n      );\\n    }\\n\\n    tsIsStartOfFunctionType() {\\n      if (this.match(tt.lt)) {\\n        return true;\\n      }\\n      return (\\n        this.match(tt.parenL) &&\\n        this.tsLookAhead(this.tsIsUnambiguouslyStartOfFunctionType.bind(this))\\n      );\\n    }\\n\\n    tsSkipParameterStart(): boolean {\\n      if (tokenIsIdentifier(this.state.type) || this.match(tt._this)) {\\n        this.next();\\n        return true;\\n      }\\n\\n      if (this.match(tt.braceL)) {\\n        // Return true if we can parse an object pattern without errors\\n        const { errors } = this.state;\\n        const previousErrorCount = errors.length;\\n        try {\\n          this.parseObjectLike(tt.braceR, true);\\n          return errors.length === previousErrorCount;\\n        } catch {\\n          return false;\\n        }\\n      }\\n\\n      if (this.match(tt.bracketL)) {\\n        this.next();\\n        // Return true if we can parse an array pattern without errors\\n        const { errors } = this.state;\\n        const previousErrorCount = errors.length;\\n        try {\\n          super.parseBindingList(\\n            tt.bracketR,\\n            charCodes.rightSquareBracket,\\n            ParseBindingListFlags.ALLOW_EMPTY,\\n          );\\n          return errors.length === previousErrorCount;\\n        } catch {\\n          return false;\\n        }\\n      }\\n\\n      return false;\\n    }\\n\\n    tsIsUnambiguouslyStartOfFunctionType(): boolean {\\n      this.next();\\n      if (this.match(tt.parenR) || this.match(tt.ellipsis)) {\\n        // ( )\\n        // ( ...\\n        return true;\\n      }\\n      if (this.tsSkipParameterStart()) {\\n        if (\\n          this.match(tt.colon) ||\\n          this.match(tt.comma) ||\\n          this.match(tt.question) ||\\n          this.match(tt.eq)\\n        ) {\\n          // ( xxx :\\n          // ( xxx ,\\n          // ( xxx ?\\n          // ( xxx =\\n          return true;\\n        }\\n        if (this.match(tt.parenR)) {\\n          this.next();\\n          if (this.match(tt.arrow)) {\\n            // ( xxx ) =>\\n            return true;\\n          }\\n        }\\n      }\\n      return false;\\n    }\\n\\n    tsParseTypeOrTypePredicateAnnotation(\\n      returnToken: TokenType,\\n    ): N.TsTypeAnnotation {\\n      return this.tsInType(() => {\\n        const t = this.startNode<N.TsTypeAnnotation>();\\n        this.expect(returnToken);\\n\\n        const node = this.startNode<N.TsTypePredicate>();\\n\\n        const asserts = !!this.tsTryParse(\\n          this.tsParseTypePredicateAsserts.bind(this),\\n        );\\n\\n        if (asserts && this.match(tt._this)) {\\n          // When asserts is false, thisKeyword is handled by tsParseNonArrayType\\n          // : asserts this is type\\n          let thisTypePredicate = this.tsParseThisTypeOrThisTypePredicate();\\n          // if it turns out to be a `TSThisType`, wrap it with `TSTypePredicate`\\n          // : asserts this\\n          if (thisTypePredicate.type === \\\"TSThisType\\\") {\\n            node.parameterName = thisTypePredicate;\\n            node.asserts = true;\\n            (node as N.TsTypePredicate).typeAnnotation = null;\\n            thisTypePredicate = this.finishNode(node, \\\"TSTypePredicate\\\");\\n          } else {\\n            this.resetStartLocationFromNode(thisTypePredicate, node);\\n            thisTypePredicate.asserts = true;\\n          }\\n          t.typeAnnotation = thisTypePredicate;\\n          return this.finishNode(t, \\\"TSTypeAnnotation\\\");\\n        }\\n\\n        const typePredicateVariable =\\n          this.tsIsIdentifier() &&\\n          this.tsTryParse(this.tsParseTypePredicatePrefix.bind(this));\\n\\n        if (!typePredicateVariable) {\\n          if (!asserts) {\\n            // : type\\n            return this.tsParseTypeAnnotation(/* eatColon */ false, t);\\n          }\\n\\n          // : asserts foo\\n          node.parameterName = this.parseIdentifier();\\n          node.asserts = asserts;\\n          (node as N.TsTypePredicate).typeAnnotation = null;\\n          t.typeAnnotation = this.finishNode(node, \\\"TSTypePredicate\\\");\\n          return this.finishNode(t, \\\"TSTypeAnnotation\\\");\\n        }\\n\\n        // : asserts foo is type\\n        const type = this.tsParseTypeAnnotation(/* eatColon */ false);\\n        node.parameterName = typePredicateVariable;\\n        node.typeAnnotation = type;\\n        node.asserts = asserts;\\n        t.typeAnnotation = this.finishNode(node, \\\"TSTypePredicate\\\");\\n        return this.finishNode(t, \\\"TSTypeAnnotation\\\");\\n      });\\n    }\\n\\n    tsTryParseTypeOrTypePredicateAnnotation():\\n      | N.TsTypeAnnotation\\n      | undefined\\n      | null {\\n      return this.match(tt.colon)\\n        ? this.tsParseTypeOrTypePredicateAnnotation(tt.colon)\\n        : undefined;\\n    }\\n\\n    tsTryParseTypeAnnotation(): N.TsTypeAnnotation | undefined | null {\\n      return this.match(tt.colon) ? this.tsParseTypeAnnotation() : undefined;\\n    }\\n\\n    tsTryParseType(): N.TsType | undefined | null {\\n      return this.tsEatThenParseType(tt.colon);\\n    }\\n\\n    tsParseTypePredicatePrefix(): N.Identifier | undefined | null {\\n      const id = this.parseIdentifier();\\n      if (this.isContextual(tt._is) && !this.hasPrecedingLineBreak()) {\\n        this.next();\\n        return id;\\n      }\\n    }\\n\\n    tsParseTypePredicateAsserts(): boolean {\\n      if (this.state.type !== tt._asserts) {\\n        return false;\\n      }\\n      const containsEsc = this.state.containsEsc;\\n      this.next();\\n      if (!tokenIsIdentifier(this.state.type) && !this.match(tt._this)) {\\n        return false;\\n      }\\n\\n      if (containsEsc) {\\n        this.raise(Errors.InvalidEscapedReservedWord, {\\n          at: this.state.lastTokStartLoc,\\n          reservedWord: \\\"asserts\\\",\\n        });\\n      }\\n\\n      return true;\\n    }\\n\\n    tsParseTypeAnnotation(\\n      eatColon = true,\\n      t: Undone<N.TsTypeAnnotation> = this.startNode<N.TsTypeAnnotation>(),\\n    ): N.TsTypeAnnotation {\\n      this.tsInType(() => {\\n        if (eatColon) this.expect(tt.colon);\\n        t.typeAnnotation = this.tsParseType();\\n      });\\n      return this.finishNode(t, \\\"TSTypeAnnotation\\\");\\n    }\\n\\n    /** Be sure to be in a type context before calling this, using `tsInType`. */\\n    tsParseType(): N.TsType {\\n      // Need to set `state.inType` so that we don't parse JSX in a type context.\\n      assert(this.state.inType);\\n      const type = this.tsParseNonConditionalType();\\n\\n      if (\\n        this.state.inDisallowConditionalTypesContext ||\\n        this.hasPrecedingLineBreak() ||\\n        !this.eat(tt._extends)\\n      ) {\\n        return type;\\n      }\\n      const node = this.startNodeAtNode<N.TsConditionalType>(type);\\n      node.checkType = type;\\n\\n      node.extendsType = this.tsInDisallowConditionalTypesContext(() =>\\n        this.tsParseNonConditionalType(),\\n      );\\n\\n      this.expect(tt.question);\\n      node.trueType = this.tsInAllowConditionalTypesContext(() =>\\n        this.tsParseType(),\\n      );\\n\\n      this.expect(tt.colon);\\n      node.falseType = this.tsInAllowConditionalTypesContext(() =>\\n        this.tsParseType(),\\n      );\\n\\n      return this.finishNode(node, \\\"TSConditionalType\\\");\\n    }\\n\\n    isAbstractConstructorSignature(): boolean {\\n      return (\\n        this.isContextual(tt._abstract) && this.lookahead().type === tt._new\\n      );\\n    }\\n\\n    tsParseNonConditionalType(): N.TsType {\\n      if (this.tsIsStartOfFunctionType()) {\\n        return this.tsParseFunctionOrConstructorType(\\\"TSFunctionType\\\");\\n      }\\n      if (this.match(tt._new)) {\\n        // As in `new () => Date`\\n        return this.tsParseFunctionOrConstructorType(\\\"TSConstructorType\\\");\\n      } else if (this.isAbstractConstructorSignature()) {\\n        // As in `abstract new () => Date`\\n        return this.tsParseFunctionOrConstructorType(\\n          \\\"TSConstructorType\\\",\\n          /* abstract */ true,\\n        );\\n      }\\n      return this.tsParseUnionTypeOrHigher();\\n    }\\n\\n    tsParseTypeAssertion(): N.TsTypeAssertion {\\n      if (this.getPluginOption(\\\"typescript\\\", \\\"disallowAmbiguousJSXLike\\\")) {\\n        this.raise(TSErrors.ReservedTypeAssertion, { at: this.state.startLoc });\\n      }\\n\\n      const node = this.startNode<N.TsTypeAssertion>();\\n      node.typeAnnotation = this.tsInType(() => {\\n        this.next(); // \\\"<\\\"\\n        return this.match(tt._const)\\n          ? this.tsParseTypeReference()\\n          : this.tsParseType();\\n      });\\n      this.expect(tt.gt);\\n      node.expression = this.parseMaybeUnary();\\n      return this.finishNode(node, \\\"TSTypeAssertion\\\");\\n    }\\n\\n    tsParseHeritageClause(\\n      token: \\\"extends\\\" | \\\"implements\\\",\\n    ): Array<N.TsExpressionWithTypeArguments> {\\n      const originalStartLoc = this.state.startLoc;\\n\\n      const delimitedList = this.tsParseDelimitedList(\\n        \\\"HeritageClauseElement\\\",\\n        () => {\\n          const node = this.startNode<N.TsExpressionWithTypeArguments>();\\n          node.expression = this.tsParseEntityName();\\n          if (this.match(tt.lt)) {\\n            node.typeParameters = this.tsParseTypeArguments();\\n          }\\n\\n          return this.finishNode(node, \\\"TSExpressionWithTypeArguments\\\");\\n        },\\n      );\\n\\n      if (!delimitedList.length) {\\n        this.raise(TSErrors.EmptyHeritageClauseType, {\\n          at: originalStartLoc,\\n          token,\\n        });\\n      }\\n\\n      return delimitedList;\\n    }\\n\\n    tsParseInterfaceDeclaration(\\n      node: Undone<N.TsInterfaceDeclaration>,\\n      properties: {\\n        declare?: true;\\n      } = {},\\n    ): N.TsInterfaceDeclaration | undefined | null {\\n      if (this.hasFollowingLineBreak()) return null;\\n      this.expectContextual(tt._interface);\\n      if (properties.declare) node.declare = true;\\n      if (tokenIsIdentifier(this.state.type)) {\\n        node.id = this.parseIdentifier();\\n        this.checkIdentifier(node.id, BIND_TS_INTERFACE);\\n      } else {\\n        node.id = null;\\n        this.raise(TSErrors.MissingInterfaceName, { at: this.state.startLoc });\\n      }\\n\\n      node.typeParameters = this.tsTryParseTypeParameters(\\n        this.tsParseInOutConstModifiers,\\n      );\\n      if (this.eat(tt._extends)) {\\n        node.extends = this.tsParseHeritageClause(\\\"extends\\\");\\n      }\\n      const body = this.startNode<N.TSInterfaceBody>();\\n      body.body = this.tsInType(this.tsParseObjectTypeMembers.bind(this));\\n      node.body = this.finishNode(body, \\\"TSInterfaceBody\\\");\\n      return this.finishNode(node, \\\"TSInterfaceDeclaration\\\");\\n    }\\n\\n    tsParseTypeAliasDeclaration(\\n      node: N.TsTypeAliasDeclaration,\\n    ): N.TsTypeAliasDeclaration {\\n      node.id = this.parseIdentifier();\\n      this.checkIdentifier(node.id, BIND_TS_TYPE);\\n\\n      node.typeAnnotation = this.tsInType(() => {\\n        node.typeParameters = this.tsTryParseTypeParameters(\\n          this.tsParseInOutModifiers,\\n        );\\n\\n        this.expect(tt.eq);\\n\\n        if (\\n          this.isContextual(tt._intrinsic) &&\\n          this.lookahead().type !== tt.dot\\n        ) {\\n          const node = this.startNode<N.TsKeywordType>();\\n          this.next();\\n          return this.finishNode(node, \\\"TSIntrinsicKeyword\\\");\\n        }\\n\\n        return this.tsParseType();\\n      });\\n\\n      this.semicolon();\\n      return this.finishNode(node, \\\"TSTypeAliasDeclaration\\\");\\n    }\\n\\n    tsInNoContext<T>(cb: () => T): T {\\n      const oldContext = this.state.context;\\n      this.state.context = [oldContext[0]];\\n      try {\\n        return cb();\\n      } finally {\\n        this.state.context = oldContext;\\n      }\\n    }\\n\\n    /**\\n     * Runs `cb` in a type context.\\n     * This should be called one token *before* the first type token,\\n     * so that the call to `next()` is run in type context.\\n     */\\n    tsInType<T>(cb: () => T): T {\\n      const oldInType = this.state.inType;\\n      this.state.inType = true;\\n      try {\\n        return cb();\\n      } finally {\\n        this.state.inType = oldInType;\\n      }\\n    }\\n\\n    tsInDisallowConditionalTypesContext<T>(cb: () => T): T {\\n      const oldInDisallowConditionalTypesContext =\\n        this.state.inDisallowConditionalTypesContext;\\n      this.state.inDisallowConditionalTypesContext = true;\\n      try {\\n        return cb();\\n      } finally {\\n        this.state.inDisallowConditionalTypesContext =\\n          oldInDisallowConditionalTypesContext;\\n      }\\n    }\\n\\n    tsInAllowConditionalTypesContext<T>(cb: () => T): T {\\n      const oldInDisallowConditionalTypesContext =\\n        this.state.inDisallowConditionalTypesContext;\\n      this.state.inDisallowConditionalTypesContext = false;\\n      try {\\n        return cb();\\n      } finally {\\n        this.state.inDisallowConditionalTypesContext =\\n          oldInDisallowConditionalTypesContext;\\n      }\\n    }\\n\\n    tsEatThenParseType(token: TokenType): N.TsType | undefined {\\n      return !this.match(token) ? undefined : this.tsNextThenParseType();\\n    }\\n\\n    tsExpectThenParseType(token: TokenType): N.TsType {\\n      return this.tsDoThenParseType(() => this.expect(token));\\n    }\\n\\n    tsNextThenParseType(): N.TsType {\\n      return this.tsDoThenParseType(() => this.next());\\n    }\\n\\n    tsDoThenParseType(cb: () => void): N.TsType {\\n      return this.tsInType(() => {\\n        cb();\\n        return this.tsParseType();\\n      });\\n    }\\n\\n    tsParseEnumMember(): N.TsEnumMember {\\n      const node = this.startNode<N.TsEnumMember>();\\n      // Computed property names are grammar errors in an enum, so accept just string literal or identifier.\\n      node.id = this.match(tt.string)\\n        ? super.parseStringLiteral(this.state.value)\\n        : this.parseIdentifier(/* liberal */ true);\\n      if (this.eat(tt.eq)) {\\n        node.initializer = super.parseMaybeAssignAllowIn();\\n      }\\n      return this.finishNode(node, \\\"TSEnumMember\\\");\\n    }\\n\\n    tsParseEnumDeclaration(\\n      node: Undone<N.TsEnumDeclaration>,\\n      properties: {\\n        const?: true;\\n        declare?: true;\\n      } = {},\\n    ): N.TsEnumDeclaration {\\n      if (properties.const) node.const = true;\\n      if (properties.declare) node.declare = true;\\n      this.expectContextual(tt._enum);\\n      node.id = this.parseIdentifier();\\n      this.checkIdentifier(\\n        node.id,\\n        node.const ? BIND_TS_CONST_ENUM : BIND_TS_ENUM,\\n      );\\n\\n      this.expect(tt.braceL);\\n      node.members = this.tsParseDelimitedList(\\n        \\\"EnumMembers\\\",\\n        this.tsParseEnumMember.bind(this),\\n      );\\n      this.expect(tt.braceR);\\n      return this.finishNode(node, \\\"TSEnumDeclaration\\\");\\n    }\\n\\n    tsParseModuleBlock(): N.TsModuleBlock {\\n      const node = this.startNode<N.TsModuleBlock>();\\n      this.scope.enter(SCOPE_OTHER);\\n\\n      this.expect(tt.braceL);\\n      // Inside of a module block is considered \\\"top-level\\\", meaning it can have imports and exports.\\n      super.parseBlockOrModuleBlockBody(\\n        (node.body = []),\\n        /* directives */ undefined,\\n        /* topLevel */ true,\\n        /* end */ tt.braceR,\\n      );\\n      this.scope.exit();\\n      return this.finishNode(node, \\\"TSModuleBlock\\\");\\n    }\\n\\n    tsParseModuleOrNamespaceDeclaration(\\n      node: Undone<N.TsModuleDeclaration>,\\n      nested: boolean = false,\\n    ): N.TsModuleDeclaration {\\n      node.id = this.parseIdentifier();\\n\\n      if (!nested) {\\n        this.checkIdentifier(node.id, BIND_TS_NAMESPACE);\\n      }\\n\\n      if (this.eat(tt.dot)) {\\n        const inner = this.startNode<N.TsModuleDeclaration>();\\n        this.tsParseModuleOrNamespaceDeclaration(inner, true);\\n        // @ts-expect-error Fixme: refine typings\\n        node.body = inner;\\n      } else {\\n        this.scope.enter(SCOPE_TS_MODULE);\\n        this.prodParam.enter(PARAM);\\n        node.body = this.tsParseModuleBlock();\\n        this.prodParam.exit();\\n        this.scope.exit();\\n      }\\n      return this.finishNode(node, \\\"TSModuleDeclaration\\\");\\n    }\\n\\n    tsParseAmbientExternalModuleDeclaration(\\n      node: N.TsModuleDeclaration,\\n    ): N.TsModuleDeclaration {\\n      if (this.isContextual(tt._global)) {\\n        node.global = true;\\n        node.id = this.parseIdentifier();\\n      } else if (this.match(tt.string)) {\\n        node.id = super.parseStringLiteral(this.state.value);\\n      } else {\\n        this.unexpected();\\n      }\\n      if (this.match(tt.braceL)) {\\n        this.scope.enter(SCOPE_TS_MODULE);\\n        this.prodParam.enter(PARAM);\\n        node.body = this.tsParseModuleBlock();\\n        this.prodParam.exit();\\n        this.scope.exit();\\n      } else {\\n        this.semicolon();\\n      }\\n\\n      return this.finishNode(node, \\\"TSModuleDeclaration\\\");\\n    }\\n\\n    tsParseImportEqualsDeclaration(\\n      node: Undone<N.TsImportEqualsDeclaration>,\\n      isExport?: boolean,\\n    ): N.TsImportEqualsDeclaration {\\n      node.isExport = isExport || false;\\n      node.id = this.parseIdentifier();\\n      this.checkIdentifier(node.id, BIND_FLAGS_TS_IMPORT);\\n      this.expect(tt.eq);\\n      const moduleReference = this.tsParseModuleReference();\\n      if (\\n        node.importKind === \\\"type\\\" &&\\n        moduleReference.type !== \\\"TSExternalModuleReference\\\"\\n      ) {\\n        this.raise(TSErrors.ImportAliasHasImportType, {\\n          at: moduleReference,\\n        });\\n      }\\n      node.moduleReference = moduleReference;\\n      this.semicolon();\\n      return this.finishNode(node, \\\"TSImportEqualsDeclaration\\\");\\n    }\\n\\n    tsIsExternalModuleReference(): boolean {\\n      return (\\n        this.isContextual(tt._require) &&\\n        this.lookaheadCharCode() === charCodes.leftParenthesis\\n      );\\n    }\\n\\n    tsParseModuleReference(): N.TsModuleReference {\\n      return this.tsIsExternalModuleReference()\\n        ? this.tsParseExternalModuleReference()\\n        : this.tsParseEntityName(/* allowReservedWords */ false);\\n    }\\n\\n    tsParseExternalModuleReference(): N.TsExternalModuleReference {\\n      const node = this.startNode<N.TsExternalModuleReference>();\\n      this.expectContextual(tt._require);\\n      this.expect(tt.parenL);\\n      if (!this.match(tt.string)) {\\n        this.unexpected();\\n      }\\n      // For compatibility to estree we cannot call parseLiteral directly here\\n      node.expression = super.parseExprAtom() as N.StringLiteral;\\n      this.expect(tt.parenR);\\n      return this.finishNode(node, \\\"TSExternalModuleReference\\\");\\n    }\\n\\n    // Utilities\\n\\n    tsLookAhead<T>(f: () => T): T {\\n      const state = this.state.clone();\\n      const res = f();\\n      this.state = state;\\n      return res;\\n    }\\n\\n    tsTryParseAndCatch<T extends N.NodeBase | undefined | null>(\\n      f: () => T,\\n    ): T | undefined | null {\\n      const result = this.tryParse(\\n        abort =>\\n          // @ts-expect-error todo(flow->ts)\\n          f() || abort(),\\n      );\\n\\n      if (result.aborted || !result.node) return undefined;\\n      if (result.error) this.state = result.failState;\\n      // @ts-expect-error refine typings\\n      return result.node;\\n    }\\n\\n    tsTryParse<T>(f: () => T | undefined | false): T | undefined {\\n      const state = this.state.clone();\\n      const result = f();\\n      if (result !== undefined && result !== false) {\\n        return result;\\n      } else {\\n        this.state = state;\\n        return undefined;\\n      }\\n    }\\n\\n    tsTryParseDeclare(nany: any): N.Declaration | undefined | null {\\n      if (this.isLineTerminator()) {\\n        return;\\n      }\\n      let starttype = this.state.type;\\n      let kind: \\\"let\\\" | null;\\n\\n      if (this.isContextual(tt._let)) {\\n        starttype = tt._var;\\n        kind = \\\"let\\\" as const;\\n      }\\n\\n      // @ts-expect-error refine typings\\n      return this.tsInAmbientContext(() => {\\n        if (starttype === tt._function) {\\n          nany.declare = true;\\n          return super.parseFunctionStatement(\\n            nany,\\n            /* async */ false,\\n            /* isHangingDeclaration */ false,\\n          );\\n        }\\n\\n        if (starttype === tt._class) {\\n          // While this is also set by tsParseExpressionStatement, we need to set it\\n          // before parsing the class declaration to know how to register it in the scope.\\n          nany.declare = true;\\n          return this.parseClass(\\n            nany,\\n            /* isStatement */ true,\\n            /* optionalId */ false,\\n          );\\n        }\\n\\n        if (starttype === tt._enum) {\\n          return this.tsParseEnumDeclaration(nany, { declare: true });\\n        }\\n\\n        if (starttype === tt._global) {\\n          return this.tsParseAmbientExternalModuleDeclaration(nany);\\n        }\\n\\n        if (starttype === tt._const || starttype === tt._var) {\\n          if (!this.match(tt._const) || !this.isLookaheadContextual(\\\"enum\\\")) {\\n            nany.declare = true;\\n            return this.parseVarStatement(nany, kind || this.state.value, true);\\n          }\\n\\n          // `const enum = 0;` not allowed because \\\"enum\\\" is a strict mode reserved word.\\n          this.expect(tt._const);\\n          return this.tsParseEnumDeclaration(nany, {\\n            const: true,\\n            declare: true,\\n          });\\n        }\\n\\n        if (starttype === tt._interface) {\\n          const result = this.tsParseInterfaceDeclaration(nany, {\\n            declare: true,\\n          });\\n          if (result) return result;\\n        }\\n\\n        if (tokenIsIdentifier(starttype)) {\\n          return this.tsParseDeclaration(\\n            nany,\\n            this.state.value,\\n            /* next */ true,\\n            /* decorators */ null,\\n          );\\n        }\\n      });\\n    }\\n\\n    // Note: this won't be called unless the keyword is allowed in `shouldParseExportDeclaration`.\\n    tsTryParseExportDeclaration(): N.Declaration | undefined | null {\\n      return this.tsParseDeclaration(\\n        this.startNode(),\\n        this.state.value,\\n        /* next */ true,\\n        /* decorators */ null,\\n      );\\n    }\\n\\n    tsParseExpressionStatement(\\n      node: Undone<N.TsModuleDeclaration>,\\n      expr: N.Identifier,\\n      decorators: N.Decorator[] | null,\\n    ): N.Declaration | undefined | null {\\n      switch (expr.name) {\\n        case \\\"declare\\\": {\\n          const declaration = this.tsTryParseDeclare(node);\\n          if (declaration) {\\n            declaration.declare = true;\\n            return declaration;\\n          }\\n          break;\\n        }\\n        case \\\"global\\\":\\n          // `global { }` (with no `declare`) may appear inside an ambient module declaration.\\n          // Would like to use tsParseAmbientExternalModuleDeclaration here, but already ran past \\\"global\\\".\\n          if (this.match(tt.braceL)) {\\n            this.scope.enter(SCOPE_TS_MODULE);\\n            this.prodParam.enter(PARAM);\\n            const mod = node;\\n            mod.global = true;\\n            mod.id = expr;\\n            mod.body = this.tsParseModuleBlock();\\n            this.scope.exit();\\n            this.prodParam.exit();\\n            return this.finishNode(mod, \\\"TSModuleDeclaration\\\");\\n          }\\n          break;\\n\\n        default:\\n          return this.tsParseDeclaration(\\n            node,\\n            expr.name,\\n            /* next */ false,\\n            decorators,\\n          );\\n      }\\n    }\\n\\n    // Common to tsTryParseDeclare, tsTryParseExportDeclaration, and tsParseExpressionStatement.\\n    tsParseDeclaration(\\n      node: any,\\n      value: string,\\n      next: boolean,\\n      decorators: N.Decorator[] | null,\\n    ): N.Declaration | undefined | null {\\n      // no declaration apart from enum can be followed by a line break.\\n      switch (value) {\\n        case \\\"abstract\\\":\\n          if (\\n            this.tsCheckLineTerminator(next) &&\\n            (this.match(tt._class) || tokenIsIdentifier(this.state.type))\\n          ) {\\n            return this.tsParseAbstractDeclaration(node, decorators);\\n          }\\n          break;\\n\\n        case \\\"module\\\":\\n          if (this.tsCheckLineTerminator(next)) {\\n            if (this.match(tt.string)) {\\n              return this.tsParseAmbientExternalModuleDeclaration(node);\\n            } else if (tokenIsIdentifier(this.state.type)) {\\n              return this.tsParseModuleOrNamespaceDeclaration(node);\\n            }\\n          }\\n          break;\\n\\n        case \\\"namespace\\\":\\n          if (\\n            this.tsCheckLineTerminator(next) &&\\n            tokenIsIdentifier(this.state.type)\\n          ) {\\n            return this.tsParseModuleOrNamespaceDeclaration(node);\\n          }\\n          break;\\n\\n        case \\\"type\\\":\\n          if (\\n            this.tsCheckLineTerminator(next) &&\\n            tokenIsIdentifier(this.state.type)\\n          ) {\\n            return this.tsParseTypeAliasDeclaration(node);\\n          }\\n          break;\\n      }\\n    }\\n\\n    tsCheckLineTerminator(next: boolean) {\\n      if (next) {\\n        if (this.hasFollowingLineBreak()) return false;\\n        this.next();\\n        return true;\\n      }\\n      return !this.isLineTerminator();\\n    }\\n\\n    tsTryParseGenericAsyncArrowFunction(\\n      startLoc: Position,\\n    ): N.ArrowFunctionExpression | undefined | null {\\n      if (!this.match(tt.lt)) {\\n        return undefined;\\n      }\\n\\n      const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;\\n      this.state.maybeInArrowParameters = true;\\n\\n      const res: Undone<N.ArrowFunctionExpression> | undefined | null =\\n        this.tsTryParseAndCatch(() => {\\n          const node = this.startNodeAt<N.ArrowFunctionExpression>(startLoc);\\n          node.typeParameters = this.tsParseTypeParameters(\\n            this.tsParseConstModifier,\\n          );\\n          // Don't use overloaded parseFunctionParams which would look for \\\"<\\\" again.\\n          super.parseFunctionParams(node);\\n          node.returnType = this.tsTryParseTypeOrTypePredicateAnnotation();\\n          this.expect(tt.arrow);\\n          return node;\\n        });\\n\\n      this.state.maybeInArrowParameters = oldMaybeInArrowParameters;\\n\\n      if (!res) {\\n        return undefined;\\n      }\\n\\n      return super.parseArrowExpression(\\n        res,\\n        /* params are already set */ null,\\n        /* async */ true,\\n      );\\n    }\\n\\n    // Used when parsing type arguments from ES productions, where the first token\\n    // has been created without state.inType. Thus we need to rescan the lt token.\\n    tsParseTypeArgumentsInExpression(): N.TsTypeParameterInstantiation | void {\\n      if (this.reScan_lt() !== tt.lt) {\\n        return undefined;\\n      }\\n      return this.tsParseTypeArguments();\\n    }\\n\\n    tsParseTypeArguments(): N.TsTypeParameterInstantiation {\\n      const node = this.startNode<N.TsTypeParameterInstantiation>();\\n      node.params = this.tsInType(() =>\\n        // Temporarily remove a JSX parsing context, which makes us scan different tokens.\\n        this.tsInNoContext(() => {\\n          this.expect(tt.lt);\\n          return this.tsParseDelimitedList(\\n            \\\"TypeParametersOrArguments\\\",\\n            this.tsParseType.bind(this),\\n          );\\n        }),\\n      );\\n      if (node.params.length === 0) {\\n        this.raise(TSErrors.EmptyTypeArguments, { at: node });\\n      }\\n      this.expect(tt.gt);\\n      return this.finishNode(node, \\\"TSTypeParameterInstantiation\\\");\\n    }\\n\\n    tsIsDeclarationStart(): boolean {\\n      return tokenIsTSDeclarationStart(this.state.type);\\n    }\\n\\n    // ======================================================\\n    // OVERRIDES\\n    // ======================================================\\n\\n    isExportDefaultSpecifier(): boolean {\\n      if (this.tsIsDeclarationStart()) return false;\\n      return super.isExportDefaultSpecifier();\\n    }\\n\\n    parseAssignableListItem(\\n      flags: ParseBindingListFlags,\\n      decorators: N.Decorator[],\\n    ): N.Pattern | N.TSParameterProperty {\\n      // Store original location to include modifiers in range\\n      const startLoc = this.state.startLoc;\\n\\n      const modified: ModifierBase = {};\\n      this.tsParseModifiers(\\n        {\\n          allowedModifiers: [\\n            \\\"public\\\",\\n            \\\"private\\\",\\n            \\\"protected\\\",\\n            \\\"override\\\",\\n            \\\"readonly\\\",\\n          ],\\n        },\\n        modified,\\n      );\\n      const accessibility = modified.accessibility;\\n      const override = modified.override;\\n      const readonly = modified.readonly;\\n      if (\\n        !(flags & ParseBindingListFlags.IS_CONSTRUCTOR_PARAMS) &&\\n        (accessibility || readonly || override)\\n      ) {\\n        this.raise(TSErrors.UnexpectedParameterModifier, { at: startLoc });\\n      }\\n\\n      const left = this.parseMaybeDefault();\\n      this.parseAssignableListItemTypes(left, flags);\\n      const elt = this.parseMaybeDefault(left.loc.start, left);\\n      if (accessibility || readonly || override) {\\n        const pp = this.startNodeAt<N.TSParameterProperty>(startLoc);\\n        if (decorators.length) {\\n          pp.decorators = decorators;\\n        }\\n        if (accessibility) pp.accessibility = accessibility;\\n        if (readonly) pp.readonly = readonly;\\n        if (override) pp.override = override;\\n        if (elt.type !== \\\"Identifier\\\" && elt.type !== \\\"AssignmentPattern\\\") {\\n          this.raise(TSErrors.UnsupportedParameterPropertyKind, { at: pp });\\n        }\\n        pp.parameter = elt as any as N.Identifier | N.AssignmentPattern;\\n        return this.finishNode(pp, \\\"TSParameterProperty\\\");\\n      }\\n\\n      if (decorators.length) {\\n        left.decorators = decorators;\\n      }\\n\\n      return elt;\\n    }\\n\\n    isSimpleParameter(node: N.Pattern | N.TSParameterProperty) {\\n      return (\\n        (node.type === \\\"TSParameterProperty\\\" &&\\n          super.isSimpleParameter(node.parameter)) ||\\n        super.isSimpleParameter(node)\\n      );\\n    }\\n\\n    tsDisallowOptionalPattern(node: Undone<N.Function>) {\\n      for (const param of node.params) {\\n        if (\\n          param.type !== \\\"Identifier\\\" &&\\n          (param as any).optional &&\\n          !this.state.isAmbientContext\\n        ) {\\n          this.raise(TSErrors.PatternIsOptional, { at: param });\\n        }\\n      }\\n    }\\n\\n    setArrowFunctionParameters(\\n      node: Undone<N.ArrowFunctionExpression>,\\n      params: N.Expression[],\\n      trailingCommaLoc?: Position | null,\\n    ): void {\\n      super.setArrowFunctionParameters(node, params, trailingCommaLoc);\\n      this.tsDisallowOptionalPattern(node);\\n    }\\n\\n    parseFunctionBodyAndFinish<\\n      T extends\\n        | N.Function\\n        | N.TSDeclareMethod\\n        | N.TSDeclareFunction\\n        | N.ClassPrivateMethod,\\n    >(node: Undone<T>, type: T[\\\"type\\\"], isMethod: boolean = false): T {\\n      if (this.match(tt.colon)) {\\n        node.returnType = this.tsParseTypeOrTypePredicateAnnotation(tt.colon);\\n      }\\n\\n      const bodilessType =\\n        type === \\\"FunctionDeclaration\\\"\\n          ? \\\"TSDeclareFunction\\\"\\n          : type === \\\"ClassMethod\\\" || type === \\\"ClassPrivateMethod\\\"\\n          ? \\\"TSDeclareMethod\\\"\\n          : undefined;\\n      if (bodilessType && !this.match(tt.braceL) && this.isLineTerminator()) {\\n        return this.finishNode(node, bodilessType);\\n      }\\n      if (bodilessType === \\\"TSDeclareFunction\\\" && this.state.isAmbientContext) {\\n        this.raise(TSErrors.DeclareFunctionHasImplementation, { at: node });\\n        if ((node as Undone<N.FunctionDeclaration>).declare) {\\n          return super.parseFunctionBodyAndFinish(node, bodilessType, isMethod);\\n        }\\n      }\\n      this.tsDisallowOptionalPattern(node);\\n\\n      return super.parseFunctionBodyAndFinish(node, type, isMethod);\\n    }\\n\\n    registerFunctionStatementId(node: N.Function): void {\\n      if (!node.body && node.id) {\\n        // Function ids are validated after parsing their body.\\n        // For bodiless function, we need to do it here.\\n        this.checkIdentifier(node.id, BIND_TS_AMBIENT);\\n      } else {\\n        super.registerFunctionStatementId(node);\\n      }\\n    }\\n\\n    tsCheckForInvalidTypeCasts(items: Array<N.Expression | undefined | null>) {\\n      items.forEach(node => {\\n        if (node?.type === \\\"TSTypeCastExpression\\\") {\\n          this.raise(TSErrors.UnexpectedTypeAnnotation, {\\n            at: node.typeAnnotation,\\n          });\\n        }\\n      });\\n    }\\n\\n    toReferencedList(\\n      exprList: Array<N.Expression | undefined | null>,\\n      // eslint-disable-next-line @typescript-eslint/no-unused-vars\\n      isInParens?: boolean,\\n    ): Array<N.Expression | undefined | null> {\\n      // Handles invalid scenarios like: `f(a:b)`, `(a:b);`, and `(a:b,c:d)`.\\n      //\\n      // Note that `f<T>(a:b)` goes through a different path and is handled\\n      // in `parseSubscript` directly.\\n      this.tsCheckForInvalidTypeCasts(exprList);\\n      return exprList;\\n    }\\n\\n    parseArrayLike(\\n      close: TokenType,\\n      canBePattern: boolean,\\n      isTuple: boolean,\\n      refExpressionErrors?: ExpressionErrors | null,\\n    ): N.ArrayExpression | N.TupleExpression {\\n      const node = super.parseArrayLike(\\n        close,\\n        canBePattern,\\n        isTuple,\\n        refExpressionErrors,\\n      );\\n\\n      if (node.type === \\\"ArrayExpression\\\") {\\n        this.tsCheckForInvalidTypeCasts(node.elements);\\n      }\\n\\n      return node;\\n    }\\n\\n    parseSubscript(\\n      base: N.Expression,\\n\\n      startLoc: Position,\\n      noCalls: boolean | undefined | null,\\n      state: N.ParseSubscriptState,\\n    ): N.Expression {\\n      if (!this.hasPrecedingLineBreak() && this.match(tt.bang)) {\\n        // When ! is consumed as a postfix operator (non-null assertion),\\n        // disallow JSX tag forming after. e.g. When parsing `p! < n.p!`\\n        // `<n.p` can not be a start of JSX tag\\n        this.state.canStartJSXElement = false;\\n        this.next();\\n\\n        const nonNullExpression =\\n          this.startNodeAt<N.TsNonNullExpression>(startLoc);\\n        nonNullExpression.expression = base;\\n        return this.finishNode(nonNullExpression, \\\"TSNonNullExpression\\\");\\n      }\\n\\n      let isOptionalCall = false;\\n      if (\\n        this.match(tt.questionDot) &&\\n        this.lookaheadCharCode() === charCodes.lessThan\\n      ) {\\n        if (noCalls) {\\n          state.stop = true;\\n          return base;\\n        }\\n        state.optionalChainMember = isOptionalCall = true;\\n        this.next();\\n      }\\n\\n      // handles 'f<<T>'\\n      if (this.match(tt.lt) || this.match(tt.bitShiftL)) {\\n        let missingParenErrorLoc;\\n        // tsTryParseAndCatch is expensive, so avoid if not necessary.\\n        // There are number of things we are going to \\\"maybe\\\" parse, like type arguments on\\n        // tagged template expressions. If any of them fail, walk it back and continue.\\n        const result = this.tsTryParseAndCatch(() => {\\n          if (!noCalls && this.atPossibleAsyncArrow(base)) {\\n            // Almost certainly this is a generic async function `async <T>() => ...\\n            // But it might be a call with a type argument `async<T>();`\\n            const asyncArrowFn =\\n              this.tsTryParseGenericAsyncArrowFunction(startLoc);\\n            if (asyncArrowFn) {\\n              return asyncArrowFn;\\n            }\\n          }\\n\\n          const typeArguments = this.tsParseTypeArgumentsInExpression();\\n          if (!typeArguments) return;\\n\\n          if (isOptionalCall && !this.match(tt.parenL)) {\\n            missingParenErrorLoc = this.state.curPosition();\\n            return;\\n          }\\n\\n          if (tokenIsTemplate(this.state.type)) {\\n            const result = super.parseTaggedTemplateExpression(\\n              base,\\n\\n              startLoc,\\n              state,\\n            );\\n            result.typeParameters = typeArguments;\\n            return result;\\n          }\\n\\n          if (!noCalls && this.eat(tt.parenL)) {\\n            const node = this.startNodeAt<\\n              N.CallExpression | N.OptionalCallExpression\\n            >(startLoc);\\n            node.callee = base;\\n            // possibleAsync always false here, because we would have handled it above.\\n            // @ts-expect-error (won't be any undefined arguments)\\n            node.arguments = this.parseCallExpressionArguments(\\n              tt.parenR,\\n              /* possibleAsync */ false,\\n            );\\n\\n            // Handles invalid case: `f<T>(a:b)`\\n            this.tsCheckForInvalidTypeCasts(node.arguments);\\n\\n            node.typeParameters = typeArguments;\\n            if (state.optionalChainMember) {\\n              (node as Undone<N.OptionalCallExpression>).optional =\\n                isOptionalCall;\\n            }\\n\\n            return this.finishCallExpression(node, state.optionalChainMember);\\n          }\\n\\n          const tokenType = this.state.type;\\n          if (\\n            // a<b>>c is not (a<b>)>c, but a<(b>>c)\\n            tokenType === tt.gt ||\\n            // a<b>>>c is not (a<b>)>>c, but a<(b>>>c)\\n            tokenType === tt.bitShiftR ||\\n            // a<b>c is (a<b)>c\\n            (tokenType !== tt.parenL &&\\n              tokenCanStartExpression(tokenType) &&\\n              !this.hasPrecedingLineBreak())\\n          ) {\\n            // Bail out.\\n            return;\\n          }\\n\\n          const node = this.startNodeAt<N.TsInstantiationExpression>(startLoc);\\n          node.expression = base;\\n          node.typeParameters = typeArguments;\\n          return this.finishNode(node, \\\"TSInstantiationExpression\\\");\\n        });\\n\\n        if (missingParenErrorLoc) {\\n          this.unexpected(missingParenErrorLoc, tt.parenL);\\n        }\\n\\n        if (result) {\\n          if (\\n            result.type === \\\"TSInstantiationExpression\\\" &&\\n            (this.match(tt.dot) ||\\n              (this.match(tt.questionDot) &&\\n                this.lookaheadCharCode() !== charCodes.leftParenthesis))\\n          ) {\\n            this.raise(\\n              TSErrors.InvalidPropertyAccessAfterInstantiationExpression,\\n              { at: this.state.startLoc },\\n            );\\n          }\\n          return result;\\n        }\\n      }\\n\\n      return super.parseSubscript(base, startLoc, noCalls, state);\\n    }\\n\\n    parseNewCallee(node: N.NewExpression): void {\\n      super.parseNewCallee(node);\\n\\n      const { callee } = node;\\n      if (\\n        callee.type === \\\"TSInstantiationExpression\\\" &&\\n        !callee.extra?.parenthesized\\n      ) {\\n        node.typeParameters = callee.typeParameters;\\n        node.callee = callee.expression;\\n      }\\n    }\\n\\n    parseExprOp(\\n      left: N.Expression,\\n      leftStartLoc: Position,\\n      minPrec: number,\\n    ): N.Expression {\\n      let isSatisfies: boolean;\\n      if (\\n        tokenOperatorPrecedence(tt._in) > minPrec &&\\n        !this.hasPrecedingLineBreak() &&\\n        (this.isContextual(tt._as) ||\\n          (isSatisfies = this.isContextual(tt._satisfies)))\\n      ) {\\n        const node = this.startNodeAt<\\n          N.TsAsExpression | N.TsSatisfiesExpression\\n        >(leftStartLoc);\\n        node.expression = left;\\n        node.typeAnnotation = this.tsInType(() => {\\n          this.next(); // \\\"as\\\" or \\\"satisfies\\\"\\n          if (this.match(tt._const)) {\\n            if (isSatisfies) {\\n              this.raise(Errors.UnexpectedKeyword, {\\n                at: this.state.startLoc,\\n                keyword: \\\"const\\\",\\n              });\\n            }\\n            return this.tsParseTypeReference();\\n          }\\n\\n          return this.tsParseType();\\n        });\\n        this.finishNode(\\n          node,\\n          isSatisfies ? \\\"TSSatisfiesExpression\\\" : \\\"TSAsExpression\\\",\\n        );\\n        // rescan `<`, `>` because they were scanned when this.state.inType was true\\n        this.reScan_lt_gt();\\n        return this.parseExprOp(\\n          // @ts-expect-error todo(flow->ts)\\n          node,\\n          leftStartLoc,\\n          minPrec,\\n        );\\n      }\\n\\n      return super.parseExprOp(left, leftStartLoc, minPrec);\\n    }\\n\\n    checkReservedWord(\\n      word: string,\\n      startLoc: Position,\\n      checkKeywords: boolean,\\n      isBinding: boolean,\\n    ): void {\\n      // Strict mode words may be allowed as in `declare namespace N { const static: number; }`.\\n      // And we have a type checker anyway, so don't bother having the parser do it.\\n      if (!this.state.isAmbientContext) {\\n        super.checkReservedWord(word, startLoc, checkKeywords, isBinding);\\n      }\\n    }\\n\\n    checkImportReflection(node: Undone<N.ImportDeclaration>) {\\n      super.checkImportReflection(node);\\n      if (node.module && node.importKind !== \\\"value\\\") {\\n        this.raise(TSErrors.ImportReflectionHasImportType, {\\n          at: node.specifiers[0].loc.start,\\n        });\\n      }\\n    }\\n\\n    /*\\n    Don't bother doing this check in TypeScript code because:\\n    1. We may have a nested export statement with the same name:\\n      export const x = 0;\\n      export namespace N {\\n        export const x = 1;\\n      }\\n    2. We have a type checker to warn us about this sort of thing.\\n    */\\n    checkDuplicateExports() {}\\n\\n    parseImport(\\n      node: Undone<N.ImportDeclaration | N.TsImportEqualsDeclaration>,\\n    ): N.AnyImport {\\n      node.importKind = \\\"value\\\";\\n      if (\\n        tokenIsIdentifier(this.state.type) ||\\n        this.match(tt.star) ||\\n        this.match(tt.braceL)\\n      ) {\\n        let ahead = this.lookahead();\\n\\n        if (\\n          this.isContextual(tt._type) &&\\n          // import type, { a } from \\\"b\\\";\\n          ahead.type !== tt.comma &&\\n          // import type from \\\"a\\\";\\n          ahead.type !== tt._from &&\\n          // import type = require(\\\"a\\\");\\n          ahead.type !== tt.eq\\n        ) {\\n          node.importKind = \\\"type\\\";\\n          this.next();\\n          ahead = this.lookahead();\\n        }\\n\\n        if (tokenIsIdentifier(this.state.type) && ahead.type === tt.eq) {\\n          return this.tsParseImportEqualsDeclaration(\\n            node as Undone<N.TsImportEqualsDeclaration>,\\n          );\\n        }\\n      }\\n\\n      const importNode = super.parseImport(node as Undone<N.ImportDeclaration>);\\n      /*:: invariant(importNode.type !== \\\"TSImportEqualsDeclaration\\\") */\\n\\n      // `import type` can only be used on imports with named imports or with a\\n      // default import - but not both\\n      if (\\n        importNode.importKind === \\\"type\\\" &&\\n        // @ts-expect-error refine typings\\n        importNode.specifiers.length > 1 &&\\n        // @ts-expect-error refine typings\\n        importNode.specifiers[0].type === \\\"ImportDefaultSpecifier\\\"\\n      ) {\\n        this.raise(TSErrors.TypeImportCannotSpecifyDefaultAndNamed, {\\n          at: importNode,\\n        });\\n      }\\n\\n      return importNode;\\n    }\\n\\n    parseExport(\\n      node: Undone<N.Node>,\\n      decorators: N.Decorator[] | null,\\n    ): N.AnyExport {\\n      if (this.match(tt._import)) {\\n        // `export import A = B;`\\n        this.next(); // eat `tt._import`\\n        if (\\n          this.isContextual(tt._type) &&\\n          this.lookaheadCharCode() !== charCodes.equalsTo\\n        ) {\\n          node.importKind = \\\"type\\\";\\n          this.next(); // eat \\\"type\\\"\\n        } else {\\n          node.importKind = \\\"value\\\";\\n        }\\n        return this.tsParseImportEqualsDeclaration(\\n          node as Undone<N.TsImportEqualsDeclaration>,\\n          /* isExport */ true,\\n        );\\n      } else if (this.eat(tt.eq)) {\\n        // `export = x;`\\n        const assign = node as Undone<N.TsExportAssignment>;\\n        assign.expression = super.parseExpression();\\n        this.semicolon();\\n        return this.finishNode(assign, \\\"TSExportAssignment\\\");\\n      } else if (this.eatContextual(tt._as)) {\\n        // `export as namespace A;`\\n        const decl = node as Undone<N.TsNamespaceExportDeclaration>;\\n        // See `parseNamespaceExportDeclaration` in TypeScript's own parser\\n        this.expectContextual(tt._namespace);\\n        decl.id = this.parseIdentifier();\\n        this.semicolon();\\n        return this.finishNode(decl, \\\"TSNamespaceExportDeclaration\\\");\\n      } else {\\n        node.exportKind = \\\"value\\\";\\n\\n        if (this.isContextual(tt._type)) {\\n          const ch = this.lookaheadCharCode();\\n          if (ch === charCodes.leftCurlyBrace || ch === charCodes.asterisk) {\\n            this.next();\\n            node.exportKind = \\\"type\\\";\\n          }\\n        }\\n\\n        return super.parseExport(\\n          node as Undone<N.ExportAllDeclaration | N.ExportDefaultDeclaration>,\\n          decorators,\\n        );\\n      }\\n    }\\n\\n    isAbstractClass(): boolean {\\n      return (\\n        this.isContextual(tt._abstract) && this.lookahead().type === tt._class\\n      );\\n    }\\n\\n    parseExportDefaultExpression(): N.Expression | N.Declaration {\\n      if (this.isAbstractClass()) {\\n        const cls = this.startNode<N.Class>();\\n        this.next(); // Skip \\\"abstract\\\"\\n        cls.abstract = true;\\n        return this.parseClass(cls, true, true);\\n      }\\n\\n      // export default interface allowed in:\\n      // https://github.com/Microsoft/TypeScript/pull/16040\\n      if (this.match(tt._interface)) {\\n        const result = this.tsParseInterfaceDeclaration(\\n          this.startNode<N.TsInterfaceDeclaration>(),\\n        );\\n        if (result) return result;\\n      }\\n\\n      return super.parseExportDefaultExpression();\\n    }\\n\\n    parseVarStatement(\\n      node: N.VariableDeclaration,\\n      kind: \\\"var\\\" | \\\"let\\\" | \\\"const\\\" | \\\"using\\\",\\n      allowMissingInitializer: boolean = false,\\n    ) {\\n      const { isAmbientContext } = this.state;\\n      const declaration = super.parseVarStatement(\\n        node,\\n        kind,\\n        allowMissingInitializer || isAmbientContext,\\n      );\\n\\n      if (!isAmbientContext) return declaration;\\n\\n      for (const { id, init } of declaration.declarations) {\\n        // Empty initializer is the easy case that we want.\\n        if (!init) continue;\\n\\n        // var and let aren't ever allowed initializers.\\n        if (kind !== \\\"const\\\" || !!id.typeAnnotation) {\\n          this.raise(TSErrors.InitializerNotAllowedInAmbientContext, {\\n            at: init,\\n          });\\n        } else if (\\n          !isValidAmbientConstInitializer(init, this.hasPlugin(\\\"estree\\\"))\\n        ) {\\n          this.raise(\\n            TSErrors.ConstInitiailizerMustBeStringOrNumericLiteralOrLiteralEnumReference,\\n            { at: init },\\n          );\\n        }\\n      }\\n\\n      return declaration;\\n    }\\n\\n    parseStatementContent(\\n      flags: ParseStatementFlag,\\n      decorators?: N.Decorator[] | null,\\n    ): N.Statement {\\n      if (this.match(tt._const) && this.isLookaheadContextual(\\\"enum\\\")) {\\n        const node = this.startNode<N.TsEnumDeclaration>();\\n        this.expect(tt._const); // eat 'const'\\n        return this.tsParseEnumDeclaration(node, { const: true });\\n      }\\n\\n      if (this.isContextual(tt._enum)) {\\n        return this.tsParseEnumDeclaration(\\n          this.startNode<N.TsEnumDeclaration>(),\\n        );\\n      }\\n\\n      if (this.isContextual(tt._interface)) {\\n        const result = this.tsParseInterfaceDeclaration(this.startNode());\\n        if (result) return result;\\n      }\\n\\n      return super.parseStatementContent(flags, decorators);\\n    }\\n\\n    parseAccessModifier(): N.Accessibility | undefined | null {\\n      return this.tsParseModifier([\\\"public\\\", \\\"protected\\\", \\\"private\\\"]);\\n    }\\n\\n    tsHasSomeModifiers(member: any, modifiers: readonly TsModifier[]): boolean {\\n      return modifiers.some(modifier => {\\n        if (tsIsAccessModifier(modifier)) {\\n          return member.accessibility === modifier;\\n        }\\n        return !!member[modifier];\\n      });\\n    }\\n\\n    tsIsStartOfStaticBlocks() {\\n      return (\\n        this.isContextual(tt._static) &&\\n        this.lookaheadCharCode() === charCodes.leftCurlyBrace\\n      );\\n    }\\n\\n    parseClassMember(\\n      classBody: N.ClassBody,\\n      member: any,\\n      state: N.ParseClassMemberState,\\n    ): void {\\n      const modifiers = [\\n        \\\"declare\\\",\\n        \\\"private\\\",\\n        \\\"public\\\",\\n        \\\"protected\\\",\\n        \\\"override\\\",\\n        \\\"abstract\\\",\\n        \\\"readonly\\\",\\n        \\\"static\\\",\\n      ] as const;\\n      this.tsParseModifiers(\\n        {\\n          allowedModifiers: modifiers,\\n          disallowedModifiers: [\\\"in\\\", \\\"out\\\"],\\n          stopOnStartOfClassStaticBlock: true,\\n          errorTemplate: TSErrors.InvalidModifierOnTypeParameterPositions,\\n        },\\n        member,\\n      );\\n\\n      const callParseClassMemberWithIsStatic = () => {\\n        if (this.tsIsStartOfStaticBlocks()) {\\n          this.next(); // eat \\\"static\\\"\\n          this.next(); // eat \\\"{\\\"\\n          if (this.tsHasSomeModifiers(member, modifiers)) {\\n            this.raise(TSErrors.StaticBlockCannotHaveModifier, {\\n              at: this.state.curPosition(),\\n            });\\n          }\\n          super.parseClassStaticBlock(classBody, member as N.StaticBlock);\\n        } else {\\n          this.parseClassMemberWithIsStatic(\\n            classBody,\\n            member,\\n            state,\\n            !!member.static,\\n          );\\n        }\\n      };\\n      if (member.declare) {\\n        this.tsInAmbientContext(callParseClassMemberWithIsStatic);\\n      } else {\\n        callParseClassMemberWithIsStatic();\\n      }\\n    }\\n\\n    parseClassMemberWithIsStatic(\\n      classBody: N.ClassBody,\\n      member: Undone<N.ClassMember | N.TsIndexSignature>,\\n      state: N.ParseClassMemberState,\\n      isStatic: boolean,\\n    ): void {\\n      const idx = this.tsTryParseIndexSignature(\\n        member as Undone<N.TsIndexSignature>,\\n      );\\n      if (idx) {\\n        classBody.body.push(idx);\\n\\n        if ((member as any).abstract) {\\n          this.raise(TSErrors.IndexSignatureHasAbstract, { at: member });\\n        }\\n        if ((member as any).accessibility) {\\n          this.raise(TSErrors.IndexSignatureHasAccessibility, {\\n            at: member,\\n            modifier: (member as any).accessibility,\\n          });\\n        }\\n        if ((member as any).declare) {\\n          this.raise(TSErrors.IndexSignatureHasDeclare, { at: member });\\n        }\\n        if ((member as any).override) {\\n          this.raise(TSErrors.IndexSignatureHasOverride, { at: member });\\n        }\\n\\n        return;\\n      }\\n\\n      if (!this.state.inAbstractClass && (member as any).abstract) {\\n        this.raise(TSErrors.NonAbstractClassHasAbstractMethod, {\\n          at: member,\\n        });\\n      }\\n\\n      if ((member as any).override) {\\n        if (!state.hadSuperClass) {\\n          this.raise(TSErrors.OverrideNotInSubClass, { at: member });\\n        }\\n      }\\n\\n      /*:: invariant(member.type !== \\\"TSIndexSignature\\\") */\\n\\n      super.parseClassMemberWithIsStatic(\\n        classBody,\\n        member as Undone<N.ClassMember>,\\n        state,\\n        isStatic,\\n      );\\n    }\\n\\n    parsePostMemberNameModifiers(\\n      methodOrProp: N.ClassMethod | N.ClassProperty | N.ClassPrivateProperty,\\n    ): void {\\n      const optional = this.eat(tt.question);\\n      if (optional) methodOrProp.optional = true;\\n\\n      if ((methodOrProp as any).readonly && this.match(tt.parenL)) {\\n        this.raise(TSErrors.ClassMethodHasReadonly, { at: methodOrProp });\\n      }\\n\\n      if ((methodOrProp as any).declare && this.match(tt.parenL)) {\\n        this.raise(TSErrors.ClassMethodHasDeclare, { at: methodOrProp });\\n      }\\n    }\\n\\n    // Note: The reason we do this in `parseExpressionStatement` and not `parseStatement`\\n    // is that e.g. `type()` is valid JS, so we must try parsing that first.\\n    // If it's really a type, we will parse `type` as the statement, and can correct it here\\n    // by parsing the rest.\\n    // @ts-expect-error plugin overrides interfaces\\n    parseExpressionStatement(\\n      node: Undone<N.ExpressionStatement>,\\n      expr: N.Expression,\\n      decorators: N.Decorator[] | null,\\n    ): N.Statement {\\n      const decl =\\n        expr.type === \\\"Identifier\\\"\\n          ? // @ts-expect-error refine typings\\n            this.tsParseExpressionStatement(node, expr, decorators)\\n          : undefined;\\n      return decl || super.parseExpressionStatement(node, expr, decorators);\\n    }\\n\\n    // export type\\n    // Should be true for anything parsed by `tsTryParseExportDeclaration`.\\n    shouldParseExportDeclaration(): boolean {\\n      if (this.tsIsDeclarationStart()) return true;\\n      return super.shouldParseExportDeclaration();\\n    }\\n\\n    // An apparent conditional expression could actually be an optional parameter in an arrow function.\\n    parseConditional(\\n      expr: N.Expression,\\n\\n      startLoc: Position,\\n      refExpressionErrors?: ExpressionErrors | null,\\n    ): N.Expression {\\n      // only do the expensive clone if there is a question mark\\n      // and if we come from inside parens\\n      if (!this.state.maybeInArrowParameters || !this.match(tt.question)) {\\n        return super.parseConditional(\\n          expr,\\n\\n          startLoc,\\n          refExpressionErrors,\\n        );\\n      }\\n\\n      const result = this.tryParse(() =>\\n        super.parseConditional(expr, startLoc),\\n      );\\n\\n      if (!result.node) {\\n        if (result.error) {\\n          /*:: invariant(refExpressionErrors != null) */\\n          super.setOptionalParametersError(refExpressionErrors, result.error);\\n        }\\n\\n        return expr;\\n      }\\n      if (result.error) this.state = result.failState;\\n      return result.node;\\n    }\\n\\n    // Note: These \\\"type casts\\\" are *not* valid TS expressions.\\n    // But we parse them here and change them when completing the arrow function.\\n    parseParenItem(\\n      node: N.Expression,\\n\\n      startLoc: Position,\\n    ): N.Expression {\\n      node = super.parseParenItem(node, startLoc);\\n      if (this.eat(tt.question)) {\\n        node.optional = true;\\n        // Include questionmark in location of node\\n        // Don't use this.finishNode() as otherwise we might process comments twice and\\n        // include already consumed parens\\n        this.resetEndLocation(node);\\n      }\\n\\n      if (this.match(tt.colon)) {\\n        const typeCastNode = this.startNodeAt<N.TsTypeCastExpression>(startLoc);\\n        typeCastNode.expression = node;\\n        typeCastNode.typeAnnotation = this.tsParseTypeAnnotation();\\n\\n        return this.finishNode(typeCastNode, \\\"TSTypeCastExpression\\\");\\n      }\\n\\n      return node;\\n    }\\n\\n    parseExportDeclaration(\\n      node: N.ExportNamedDeclaration,\\n    ): N.Declaration | undefined | null {\\n      if (!this.state.isAmbientContext && this.isContextual(tt._declare)) {\\n        return this.tsInAmbientContext(() => this.parseExportDeclaration(node));\\n      }\\n\\n      // Store original location\\n      const startLoc = this.state.startLoc;\\n\\n      const isDeclare = this.eatContextual(tt._declare);\\n\\n      if (\\n        isDeclare &&\\n        (this.isContextual(tt._declare) || !this.shouldParseExportDeclaration())\\n      ) {\\n        throw this.raise(TSErrors.ExpectedAmbientAfterExportDeclare, {\\n          at: this.state.startLoc,\\n        });\\n      }\\n\\n      const isIdentifier = tokenIsIdentifier(this.state.type);\\n      const declaration: N.Declaration | undefined | null =\\n        (isIdentifier && this.tsTryParseExportDeclaration()) ||\\n        super.parseExportDeclaration(node);\\n\\n      if (!declaration) return null;\\n\\n      if (\\n        declaration.type === \\\"TSInterfaceDeclaration\\\" ||\\n        declaration.type === \\\"TSTypeAliasDeclaration\\\" ||\\n        isDeclare\\n      ) {\\n        node.exportKind = \\\"type\\\";\\n      }\\n\\n      if (isDeclare) {\\n        // Reset location to include `declare` in range\\n        this.resetStartLocation(declaration, startLoc);\\n\\n        declaration.declare = true;\\n      }\\n\\n      return declaration;\\n    }\\n\\n    parseClassId(\\n      node: N.Class,\\n      isStatement: boolean,\\n      optionalId?: boolean | null,\\n      // eslint-disable-next-line @typescript-eslint/no-unused-vars\\n      bindingType?: BindingTypes,\\n    ): void {\\n      if ((!isStatement || optionalId) && this.isContextual(tt._implements)) {\\n        return;\\n      }\\n\\n      super.parseClassId(\\n        node,\\n        isStatement,\\n        optionalId,\\n        (node as any).declare ? BIND_TS_AMBIENT : BIND_CLASS,\\n      );\\n      const typeParameters = this.tsTryParseTypeParameters(\\n        this.tsParseInOutConstModifiers,\\n      );\\n      if (typeParameters) node.typeParameters = typeParameters;\\n    }\\n\\n    parseClassPropertyAnnotation(\\n      node: N.ClassProperty | N.ClassPrivateProperty | N.ClassAccessorProperty,\\n    ): void {\\n      if (!node.optional) {\\n        if (this.eat(tt.bang)) {\\n          node.definite = true;\\n        } else if (this.eat(tt.question)) {\\n          node.optional = true;\\n        }\\n      }\\n\\n      const type = this.tsTryParseTypeAnnotation();\\n      if (type) node.typeAnnotation = type;\\n    }\\n\\n    parseClassProperty(node: N.ClassProperty): N.ClassProperty {\\n      this.parseClassPropertyAnnotation(node);\\n\\n      if (\\n        this.state.isAmbientContext &&\\n        !(node.readonly && !node.typeAnnotation) &&\\n        this.match(tt.eq)\\n      ) {\\n        this.raise(TSErrors.DeclareClassFieldHasInitializer, {\\n          at: this.state.startLoc,\\n        });\\n      }\\n      if (node.abstract && this.match(tt.eq)) {\\n        const { key } = node;\\n        this.raise(TSErrors.AbstractPropertyHasInitializer, {\\n          at: this.state.startLoc,\\n          propertyName:\\n            key.type === \\\"Identifier\\\" && !node.computed\\n              ? key.name\\n              : `[${this.input.slice(key.start, key.end)}]`,\\n        });\\n      }\\n\\n      return super.parseClassProperty(node);\\n    }\\n\\n    parseClassPrivateProperty(\\n      node: N.ClassPrivateProperty,\\n    ): N.ClassPrivateProperty {\\n      // @ts-expect-error abstract may not index node\\n      if (node.abstract) {\\n        this.raise(TSErrors.PrivateElementHasAbstract, { at: node });\\n      }\\n\\n      // @ts-expect-error accessibility may not index node\\n      if (node.accessibility) {\\n        this.raise(TSErrors.PrivateElementHasAccessibility, {\\n          at: node,\\n          // @ts-expect-error refine typings\\n          modifier: node.accessibility,\\n        });\\n      }\\n\\n      this.parseClassPropertyAnnotation(node);\\n      return super.parseClassPrivateProperty(node);\\n    }\\n\\n    parseClassAccessorProperty(\\n      node: N.ClassAccessorProperty,\\n    ): N.ClassAccessorProperty {\\n      this.parseClassPropertyAnnotation(node);\\n      if (node.optional) {\\n        this.raise(TSErrors.AccessorCannotBeOptional, { at: node });\\n      }\\n      return super.parseClassAccessorProperty(node);\\n    }\\n\\n    pushClassMethod(\\n      classBody: N.ClassBody,\\n      method: N.ClassMethod,\\n      isGenerator: boolean,\\n      isAsync: boolean,\\n      isConstructor: boolean,\\n      allowsDirectSuper: boolean,\\n    ): void {\\n      const typeParameters = this.tsTryParseTypeParameters(\\n        this.tsParseConstModifier,\\n      );\\n      if (typeParameters && isConstructor) {\\n        this.raise(TSErrors.ConstructorHasTypeParameters, {\\n          at: typeParameters,\\n        });\\n      }\\n\\n      // @ts-expect-error declare does not exist in ClassMethod\\n      const { declare = false, kind } = method;\\n\\n      if (declare && (kind === \\\"get\\\" || kind === \\\"set\\\")) {\\n        this.raise(TSErrors.DeclareAccessor, { at: method, kind });\\n      }\\n      if (typeParameters) method.typeParameters = typeParameters;\\n      super.pushClassMethod(\\n        classBody,\\n        method,\\n        isGenerator,\\n        isAsync,\\n        isConstructor,\\n        allowsDirectSuper,\\n      );\\n    }\\n\\n    pushClassPrivateMethod(\\n      classBody: N.ClassBody,\\n      method: N.ClassPrivateMethod,\\n      isGenerator: boolean,\\n      isAsync: boolean,\\n    ): void {\\n      const typeParameters = this.tsTryParseTypeParameters(\\n        this.tsParseConstModifier,\\n      );\\n      if (typeParameters) method.typeParameters = typeParameters;\\n      super.pushClassPrivateMethod(classBody, method, isGenerator, isAsync);\\n    }\\n\\n    declareClassPrivateMethodInScope(\\n      node: N.ClassPrivateMethod | N.EstreeMethodDefinition | N.TSDeclareMethod,\\n      kind: number,\\n    ) {\\n      if (node.type === \\\"TSDeclareMethod\\\") return;\\n      // This happens when using the \\\"estree\\\" plugin.\\n      if (node.type === \\\"MethodDefinition\\\" && !node.value.body) return;\\n\\n      super.declareClassPrivateMethodInScope(node, kind);\\n    }\\n\\n    parseClassSuper(node: N.Class): void {\\n      super.parseClassSuper(node);\\n      // handle `extends f<<T>\\n      if (node.superClass && (this.match(tt.lt) || this.match(tt.bitShiftL))) {\\n        // @ts-expect-error refine typings\\n        node.superTypeParameters = this.tsParseTypeArgumentsInExpression();\\n      }\\n      if (this.eatContextual(tt._implements)) {\\n        node.implements = this.tsParseHeritageClause(\\\"implements\\\");\\n      }\\n    }\\n\\n    parseObjPropValue(\\n      prop: Undone<N.ObjectMethod | N.ObjectProperty>,\\n      startLoc: Position | undefined | null,\\n      isGenerator: boolean,\\n      isAsync: boolean,\\n      isPattern: boolean,\\n      isAccessor: boolean,\\n      refExpressionErrors?: ExpressionErrors | null,\\n    ) {\\n      const typeParameters = this.tsTryParseTypeParameters(\\n        this.tsParseConstModifier,\\n      );\\n      if (typeParameters) prop.typeParameters = typeParameters;\\n\\n      return super.parseObjPropValue(\\n        prop,\\n\\n        startLoc,\\n        isGenerator,\\n        isAsync,\\n        isPattern,\\n        isAccessor,\\n        refExpressionErrors,\\n      );\\n    }\\n\\n    parseFunctionParams(node: N.Function, isConstructor: boolean): void {\\n      const typeParameters = this.tsTryParseTypeParameters(\\n        this.tsParseConstModifier,\\n      );\\n      if (typeParameters) node.typeParameters = typeParameters;\\n      super.parseFunctionParams(node, isConstructor);\\n    }\\n\\n    // `let x: number;`\\n    parseVarId(\\n      decl: N.VariableDeclarator,\\n      kind: \\\"var\\\" | \\\"let\\\" | \\\"const\\\" | \\\"using\\\",\\n    ): void {\\n      super.parseVarId(decl, kind);\\n      if (\\n        decl.id.type === \\\"Identifier\\\" &&\\n        !this.hasPrecedingLineBreak() &&\\n        this.eat(tt.bang)\\n      ) {\\n        decl.definite = true;\\n      }\\n\\n      const type = this.tsTryParseTypeAnnotation();\\n      if (type) {\\n        decl.id.typeAnnotation = type;\\n        this.resetEndLocation(decl.id); // set end position to end of type\\n      }\\n    }\\n\\n    // parse the return type of an async arrow function - let foo = (async (): number => {});\\n    parseAsyncArrowFromCallExpression(\\n      node: N.ArrowFunctionExpression,\\n      call: N.CallExpression,\\n    ): N.ArrowFunctionExpression {\\n      if (this.match(tt.colon)) {\\n        node.returnType = this.tsParseTypeAnnotation();\\n      }\\n      return super.parseAsyncArrowFromCallExpression(node, call);\\n    }\\n\\n    parseMaybeAssign(\\n      refExpressionErrors?: ExpressionErrors | null,\\n      afterLeftParse?: Function,\\n    ): N.Expression {\\n      // Note: When the JSX plugin is on, type assertions (`<T> x`) aren't valid syntax.\\n\\n      let state: State | undefined | null;\\n      let jsx;\\n      let typeCast;\\n\\n      if (\\n        this.hasPlugin(\\\"jsx\\\") &&\\n        (this.match(tt.jsxTagStart) || this.match(tt.lt))\\n      ) {\\n        // Prefer to parse JSX if possible. But may be an arrow fn.\\n        state = this.state.clone();\\n\\n        jsx = this.tryParse(\\n          () => super.parseMaybeAssign(refExpressionErrors, afterLeftParse),\\n          state,\\n        );\\n\\n        /*:: invariant(!jsx.aborted) */\\n        /*:: invariant(jsx.node != null) */\\n        if (!jsx.error) return jsx.node;\\n\\n        // Remove `tc.j_expr` or `tc.j_oTag` from context added\\n        // by parsing `jsxTagStart` to stop the JSX plugin from\\n        // messing with the tokens\\n        const { context } = this.state;\\n        const currentContext = context[context.length - 1];\\n        if (currentContext === tc.j_oTag || currentContext === tc.j_expr) {\\n          context.pop();\\n        }\\n      }\\n\\n      if (!jsx?.error && !this.match(tt.lt)) {\\n        return super.parseMaybeAssign(refExpressionErrors, afterLeftParse);\\n      }\\n\\n      // Either way, we're looking at a '<': tt.jsxTagStart or relational.\\n\\n      // If the state was cloned in the JSX parsing branch above but there\\n      // have been any error in the tryParse call, this.state is set to state\\n      // so we still need to clone it.\\n      if (!state || state === this.state) state = this.state.clone();\\n\\n      let typeParameters: N.TsTypeParameterDeclaration | undefined | null;\\n      const arrow = this.tryParse(abort => {\\n        // This is similar to TypeScript's `tryParseParenthesizedArrowFunctionExpression`.\\n        typeParameters = this.tsParseTypeParameters(this.tsParseConstModifier);\\n        const expr = super.parseMaybeAssign(\\n          refExpressionErrors,\\n          afterLeftParse,\\n        );\\n\\n        if (\\n          expr.type !== \\\"ArrowFunctionExpression\\\" ||\\n          expr.extra?.parenthesized\\n        ) {\\n          abort();\\n        }\\n\\n        // Correct TypeScript code should have at least 1 type parameter, but don't crash on bad code.\\n        if (typeParameters?.params.length !== 0) {\\n          this.resetStartLocationFromNode(expr, typeParameters);\\n        }\\n        expr.typeParameters = typeParameters;\\n\\n        if (process.env.BABEL_8_BREAKING) {\\n          if (\\n            this.hasPlugin(\\\"jsx\\\") &&\\n            expr.typeParameters.params.length === 1 &&\\n            !expr.typeParameters.extra?.trailingComma\\n          ) {\\n            // report error if single type parameter used without trailing comma.\\n            const parameter = expr.typeParameters.params[0];\\n            if (!parameter.constraint) {\\n              // A single type parameter must either have constraints\\n              // or a trailing comma, otherwise it's ambiguous with JSX.\\n              this.raise(TSErrors.SingleTypeParameterWithoutTrailingComma, {\\n                at: createPositionWithColumnOffset(parameter.loc.end, 1),\\n                typeParameterName: parameter.name.name,\\n              });\\n            }\\n          }\\n        }\\n\\n        return expr;\\n      }, state);\\n\\n      /*:: invariant(arrow.node != null) */\\n      if (!arrow.error && !arrow.aborted) {\\n        // This error is reported outside of the this.tryParse call so that\\n        // in case of <T>(x) => 2, we don't consider <T>(x) as a type assertion\\n        // because of this error.\\n        if (typeParameters) this.reportReservedArrowTypeParam(typeParameters);\\n        // @ts-expect-error refine typings\\n        return arrow.node;\\n      }\\n\\n      if (!jsx) {\\n        // Try parsing a type cast instead of an arrow function.\\n        // This will never happen outside of JSX.\\n        // (Because in JSX the '<' should be a jsxTagStart and not a relational.\\n        assert(!this.hasPlugin(\\\"jsx\\\"));\\n\\n        // This will start with a type assertion (via parseMaybeUnary).\\n        // But don't directly call `this.tsParseTypeAssertion` because we want to handle any binary after it.\\n        typeCast = this.tryParse(\\n          () => super.parseMaybeAssign(refExpressionErrors, afterLeftParse),\\n          state,\\n        );\\n        /*:: invariant(!typeCast.aborted) */\\n        /*:: invariant(typeCast.node != null) */\\n        if (!typeCast.error) return typeCast.node;\\n      }\\n\\n      if (jsx?.node) {\\n        /*:: invariant(jsx.failState) */\\n        this.state = jsx.failState;\\n        return jsx.node;\\n      }\\n\\n      if (arrow.node) {\\n        /*:: invariant(arrow.failState) */\\n        this.state = arrow.failState;\\n        if (typeParameters) this.reportReservedArrowTypeParam(typeParameters);\\n        // @ts-expect-error refine typings\\n        return arrow.node;\\n      }\\n\\n      if (typeCast?.node) {\\n        /*:: invariant(typeCast.failState) */\\n        this.state = typeCast.failState;\\n        return typeCast.node;\\n      }\\n\\n      if (jsx?.thrown) throw jsx.error;\\n      if (arrow.thrown) throw arrow.error;\\n      if (typeCast?.thrown) throw typeCast.error;\\n\\n      throw jsx?.error || arrow.error || typeCast?.error;\\n    }\\n\\n    reportReservedArrowTypeParam(node: any) {\\n      if (\\n        node.params.length === 1 &&\\n        !node.params[0].constraint &&\\n        !node.extra?.trailingComma &&\\n        this.getPluginOption(\\\"typescript\\\", \\\"disallowAmbiguousJSXLike\\\")\\n      ) {\\n        this.raise(TSErrors.ReservedArrowTypeParam, { at: node });\\n      }\\n    }\\n\\n    // Handle type assertions\\n    parseMaybeUnary(\\n      refExpressionErrors?: ExpressionErrors | null,\\n      sawUnary?: boolean,\\n    ): N.Expression {\\n      if (!this.hasPlugin(\\\"jsx\\\") && this.match(tt.lt)) {\\n        return this.tsParseTypeAssertion();\\n      } else {\\n        return super.parseMaybeUnary(refExpressionErrors, sawUnary);\\n      }\\n    }\\n\\n    parseArrow(\\n      node: Undone<N.ArrowFunctionExpression>,\\n    ): Undone<N.ArrowFunctionExpression> | undefined | null {\\n      if (this.match(tt.colon)) {\\n        // This is different from how the TS parser does it.\\n        // TS uses lookahead. The Babel Parser parses it as a parenthesized expression and converts.\\n\\n        const result = this.tryParse(abort => {\\n          const returnType = this.tsParseTypeOrTypePredicateAnnotation(\\n            tt.colon,\\n          );\\n          if (this.canInsertSemicolon() || !this.match(tt.arrow)) abort();\\n          return returnType;\\n        });\\n\\n        if (result.aborted) return;\\n\\n        if (!result.thrown) {\\n          if (result.error) this.state = result.failState;\\n          // @ts-expect-error refine typings\\n          node.returnType = result.node;\\n        }\\n      }\\n\\n      return super.parseArrow(node);\\n    }\\n\\n    // Allow type annotations inside of a parameter list.\\n    parseAssignableListItemTypes(\\n      param: N.Pattern,\\n      flags: ParseBindingListFlags,\\n    ) {\\n      if (!(flags & ParseBindingListFlags.IS_FUNCTION_PARAMS)) return param;\\n\\n      if (this.eat(tt.question)) {\\n        (param as any as N.Identifier).optional = true;\\n      }\\n      const type = this.tsTryParseTypeAnnotation();\\n      if (type) param.typeAnnotation = type;\\n      this.resetEndLocation(param);\\n\\n      return param;\\n    }\\n\\n    isAssignable(node: N.Node, isBinding?: boolean): boolean {\\n      switch (node.type) {\\n        case \\\"TSTypeCastExpression\\\":\\n          return this.isAssignable(node.expression, isBinding);\\n        case \\\"TSParameterProperty\\\":\\n          return true;\\n        default:\\n          return super.isAssignable(node, isBinding);\\n      }\\n    }\\n\\n    toAssignable(node: N.Node, isLHS: boolean = false): void {\\n      switch (node.type) {\\n        case \\\"ParenthesizedExpression\\\":\\n          this.toAssignableParenthesizedExpression(node, isLHS);\\n          break;\\n        case \\\"TSAsExpression\\\":\\n        case \\\"TSSatisfiesExpression\\\":\\n        case \\\"TSNonNullExpression\\\":\\n        case \\\"TSTypeAssertion\\\":\\n          if (isLHS) {\\n            this.expressionScope.recordArrowParameterBindingError(\\n              TSErrors.UnexpectedTypeCastInParameter,\\n              { at: node },\\n            );\\n          } else {\\n            this.raise(TSErrors.UnexpectedTypeCastInParameter, { at: node });\\n          }\\n          this.toAssignable(node.expression, isLHS);\\n          break;\\n        case \\\"AssignmentExpression\\\":\\n          if (!isLHS && node.left.type === \\\"TSTypeCastExpression\\\") {\\n            node.left = this.typeCastToParameter(node.left);\\n          }\\n        /* fall through */\\n        default:\\n          super.toAssignable(node, isLHS);\\n      }\\n    }\\n\\n    toAssignableParenthesizedExpression(node: N.Node, isLHS: boolean): void {\\n      switch (node.expression.type) {\\n        case \\\"TSAsExpression\\\":\\n        case \\\"TSSatisfiesExpression\\\":\\n        case \\\"TSNonNullExpression\\\":\\n        case \\\"TSTypeAssertion\\\":\\n        case \\\"ParenthesizedExpression\\\":\\n          this.toAssignable(node.expression, isLHS);\\n          break;\\n        default:\\n          super.toAssignable(node, isLHS);\\n      }\\n    }\\n\\n    checkToRestConversion(node: N.Node, allowPattern: boolean): void {\\n      switch (node.type) {\\n        case \\\"TSAsExpression\\\":\\n        case \\\"TSSatisfiesExpression\\\":\\n        case \\\"TSTypeAssertion\\\":\\n        case \\\"TSNonNullExpression\\\":\\n          this.checkToRestConversion(node.expression, false);\\n          break;\\n        default:\\n          super.checkToRestConversion(node, allowPattern);\\n      }\\n    }\\n\\n    // @ts-expect-error plugin overrides interfaces\\n    isValidLVal(\\n      type:\\n        | \\\"TSTypeCastExpression\\\"\\n        | \\\"TSParameterProperty\\\"\\n        | \\\"TSNonNullExpression\\\"\\n        | \\\"TSAsExpression\\\"\\n        | \\\"TSSatisfiesExpression\\\"\\n        | \\\"TSTypeAssertion\\\",\\n      isUnparenthesizedInAssign: boolean,\\n      binding: BindingTypes,\\n    ) {\\n      return (\\n        getOwn(\\n          {\\n            // Allow \\\"typecasts\\\" to appear on the left of assignment expressions,\\n            // because it may be in an arrow function.\\n            // e.g. `const f = (foo: number = 0) => foo;`\\n            TSTypeCastExpression: true,\\n            TSParameterProperty: \\\"parameter\\\",\\n            TSNonNullExpression: \\\"expression\\\",\\n            TSAsExpression: (binding !== BIND_NONE ||\\n              !isUnparenthesizedInAssign) && [\\\"expression\\\", true],\\n            TSSatisfiesExpression: (binding !== BIND_NONE ||\\n              !isUnparenthesizedInAssign) && [\\\"expression\\\", true],\\n            TSTypeAssertion: (binding !== BIND_NONE ||\\n              !isUnparenthesizedInAssign) && [\\\"expression\\\", true],\\n          },\\n          type,\\n        ) || super.isValidLVal(type, isUnparenthesizedInAssign, binding)\\n      );\\n    }\\n\\n    parseBindingAtom(): N.Pattern {\\n      switch (this.state.type) {\\n        case tt._this:\\n          // \\\"this\\\" may be the name of a parameter, so allow it.\\n          return this.parseIdentifier(/* liberal */ true);\\n        default:\\n          return super.parseBindingAtom();\\n      }\\n    }\\n\\n    parseMaybeDecoratorArguments(expr: N.Expression): N.Expression {\\n      // handles `@f<<T>`\\n      if (this.match(tt.lt) || this.match(tt.bitShiftL)) {\\n        const typeArguments = this.tsParseTypeArgumentsInExpression();\\n\\n        if (this.match(tt.parenL)) {\\n          const call = super.parseMaybeDecoratorArguments(expr);\\n          call.typeParameters = typeArguments;\\n          return call;\\n        }\\n\\n        this.unexpected(null, tt.parenL);\\n      }\\n\\n      return super.parseMaybeDecoratorArguments(expr);\\n    }\\n\\n    checkCommaAfterRest(\\n      close: typeof charCodes[keyof typeof charCodes],\\n    ): boolean {\\n      if (\\n        this.state.isAmbientContext &&\\n        this.match(tt.comma) &&\\n        this.lookaheadCharCode() === close\\n      ) {\\n        this.next();\\n        return false;\\n      } else {\\n        return super.checkCommaAfterRest(close);\\n      }\\n    }\\n\\n    // === === === === === === === === === === === === === === === ===\\n    // Note: All below methods are duplicates of something in flow.js.\\n    // Not sure what the best way to combine these is.\\n    // === === === === === === === === === === === === === === === ===\\n\\n    isClassMethod(): boolean {\\n      return this.match(tt.lt) || super.isClassMethod();\\n    }\\n\\n    isClassProperty(): boolean {\\n      return (\\n        this.match(tt.bang) || this.match(tt.colon) || super.isClassProperty()\\n      );\\n    }\\n\\n    parseMaybeDefault(\\n      startLoc?: Position | null,\\n      left?: Pattern | null,\\n    ): N.Pattern {\\n      const node = super.parseMaybeDefault(startLoc, left);\\n\\n      if (\\n        node.type === \\\"AssignmentPattern\\\" &&\\n        node.typeAnnotation &&\\n        node.right.start < node.typeAnnotation.start\\n      ) {\\n        this.raise(TSErrors.TypeAnnotationAfterAssign, {\\n          at: node.typeAnnotation,\\n        });\\n      }\\n\\n      return node;\\n    }\\n\\n    // ensure that inside types, we bypass the jsx parser plugin\\n    getTokenFromCode(code: number): void {\\n      if (this.state.inType) {\\n        if (code === charCodes.greaterThan) {\\n          this.finishOp(tt.gt, 1);\\n          return;\\n        }\\n        if (code === charCodes.lessThan) {\\n          this.finishOp(tt.lt, 1);\\n          return;\\n        }\\n      }\\n      super.getTokenFromCode(code);\\n    }\\n\\n    // used after we have finished parsing types\\n    reScan_lt_gt() {\\n      const { type } = this.state;\\n      if (type === tt.lt) {\\n        this.state.pos -= 1;\\n        this.readToken_lt();\\n      } else if (type === tt.gt) {\\n        this.state.pos -= 1;\\n        this.readToken_gt();\\n      }\\n    }\\n\\n    reScan_lt() {\\n      const { type } = this.state;\\n      if (type === tt.bitShiftL) {\\n        this.state.pos -= 2;\\n        this.finishOp(tt.lt, 1);\\n        return tt.lt;\\n      }\\n      return type;\\n    }\\n\\n    toAssignableList(\\n      exprList: Expression[],\\n      trailingCommaLoc: Position | undefined | null,\\n      isLHS: boolean,\\n    ): void {\\n      for (let i = 0; i < exprList.length; i++) {\\n        const expr = exprList[i];\\n        if (expr?.type === \\\"TSTypeCastExpression\\\") {\\n          exprList[i] = this.typeCastToParameter(\\n            expr as N.TsTypeCastExpression,\\n          );\\n        }\\n      }\\n      super.toAssignableList(exprList, trailingCommaLoc, isLHS);\\n    }\\n\\n    typeCastToParameter(node: N.TsTypeCastExpression): N.Node {\\n      node.expression.typeAnnotation = node.typeAnnotation;\\n\\n      this.resetEndLocation(node.expression, node.typeAnnotation.loc.end);\\n\\n      return node.expression;\\n    }\\n\\n    shouldParseArrow(params: Array<N.Node>) {\\n      if (this.match(tt.colon)) {\\n        return params.every(expr => this.isAssignable(expr, true));\\n      }\\n      return super.shouldParseArrow(params);\\n    }\\n\\n    shouldParseAsyncArrow(): boolean {\\n      return this.match(tt.colon) || super.shouldParseAsyncArrow();\\n    }\\n\\n    canHaveLeadingDecorator() {\\n      // Avoid unnecessary lookahead in checking for abstract class unless needed!\\n      return super.canHaveLeadingDecorator() || this.isAbstractClass();\\n    }\\n\\n    jsxParseOpeningElementAfterName(\\n      node: N.JSXOpeningElement,\\n    ): N.JSXOpeningElement {\\n      // handles `<Component<<T>`\\n      if (this.match(tt.lt) || this.match(tt.bitShiftL)) {\\n        const typeArguments = this.tsTryParseAndCatch(() =>\\n          // @ts-expect-error: refine typings\\n          this.tsParseTypeArgumentsInExpression(),\\n        );\\n        // @ts-expect-error: refine typings\\n        if (typeArguments) node.typeParameters = typeArguments;\\n      }\\n      return super.jsxParseOpeningElementAfterName(node);\\n    }\\n\\n    getGetterSetterExpectedParamCount(\\n      method: N.ObjectMethod | N.ClassMethod,\\n    ): number {\\n      const baseCount = super.getGetterSetterExpectedParamCount(method);\\n      const params = this.getObjectOrClassMethodParams(method);\\n      const firstParam = params[0];\\n      const hasContextParam = firstParam && this.isThisParam(firstParam);\\n\\n      return hasContextParam ? baseCount + 1 : baseCount;\\n    }\\n\\n    parseCatchClauseParam(): N.Pattern {\\n      const param = super.parseCatchClauseParam();\\n      const type = this.tsTryParseTypeAnnotation();\\n\\n      if (type) {\\n        param.typeAnnotation = type;\\n        this.resetEndLocation(param);\\n      }\\n\\n      return param;\\n    }\\n\\n    tsInAmbientContext<T>(cb: () => T): T {\\n      const oldIsAmbientContext = this.state.isAmbientContext;\\n      this.state.isAmbientContext = true;\\n      try {\\n        return cb();\\n      } finally {\\n        this.state.isAmbientContext = oldIsAmbientContext;\\n      }\\n    }\\n\\n    parseClass<T extends N.Class>(\\n      node: Undone<T>,\\n      isStatement: boolean,\\n      optionalId?: boolean,\\n    ): T {\\n      const oldInAbstractClass = this.state.inAbstractClass;\\n      this.state.inAbstractClass = !!(node as any).abstract;\\n      try {\\n        return super.parseClass(node, isStatement, optionalId);\\n      } finally {\\n        this.state.inAbstractClass = oldInAbstractClass;\\n      }\\n    }\\n\\n    tsParseAbstractDeclaration(\\n      node: any,\\n      decorators: N.Decorator[] | null,\\n    ): N.ClassDeclaration | N.TsInterfaceDeclaration | undefined | null {\\n      if (this.match(tt._class)) {\\n        node.abstract = true;\\n        return this.maybeTakeDecorators(\\n          decorators,\\n          this.parseClass<N.ClassDeclaration>(\\n            node as N.ClassDeclaration,\\n            /* isStatement */ true,\\n            /* optionalId */ false,\\n          ),\\n        );\\n      } else if (this.isContextual(tt._interface)) {\\n        // for invalid abstract interface\\n\\n        // To avoid\\n        //   abstract interface\\n        //   Foo {}\\n        if (!this.hasFollowingLineBreak()) {\\n          node.abstract = true;\\n          this.raise(TSErrors.NonClassMethodPropertyHasAbstractModifer, {\\n            at: node,\\n          });\\n          return this.tsParseInterfaceDeclaration(\\n            node as N.TsInterfaceDeclaration,\\n          );\\n        }\\n      } else {\\n        this.unexpected(null, tt._class);\\n      }\\n    }\\n\\n    parseMethod<\\n      T extends N.ObjectMethod | N.ClassMethod | N.ClassPrivateMethod,\\n    >(\\n      node: Undone<T>,\\n      isGenerator: boolean,\\n      isAsync: boolean,\\n      isConstructor: boolean,\\n      allowDirectSuper: boolean,\\n      type: T[\\\"type\\\"],\\n      inClassScope?: boolean,\\n    ) {\\n      const method = super.parseMethod<T>(\\n        node,\\n        isGenerator,\\n        isAsync,\\n        isConstructor,\\n        allowDirectSuper,\\n        type,\\n        inClassScope,\\n      );\\n      // @ts-expect-error todo(flow->ts) property not defined for all types in union\\n      if (method.abstract) {\\n        const hasBody = this.hasPlugin(\\\"estree\\\")\\n          ? // @ts-expect-error estree typings\\n            !!method.value.body\\n          : !!method.body;\\n        if (hasBody) {\\n          const { key } = method;\\n          this.raise(TSErrors.AbstractMethodHasImplementation, {\\n            at: method,\\n            methodName:\\n              key.type === \\\"Identifier\\\" && !method.computed\\n                ? key.name\\n                : `[${this.input.slice(key.start, key.end)}]`,\\n          });\\n        }\\n      }\\n      return method;\\n    }\\n\\n    tsParseTypeParameterName(): N.Identifier | string {\\n      const typeName: N.Identifier = this.parseIdentifier();\\n      return process.env.BABEL_8_BREAKING ? typeName : typeName.name;\\n    }\\n\\n    shouldParseAsAmbientContext(): boolean {\\n      return !!this.getPluginOption(\\\"typescript\\\", \\\"dts\\\");\\n    }\\n\\n    parse() {\\n      if (this.shouldParseAsAmbientContext()) {\\n        this.state.isAmbientContext = true;\\n      }\\n      return super.parse();\\n    }\\n\\n    getExpression() {\\n      if (this.shouldParseAsAmbientContext()) {\\n        this.state.isAmbientContext = true;\\n      }\\n      return super.getExpression();\\n    }\\n\\n    parseExportSpecifier(\\n      node: Undone<N.ExportSpecifier>,\\n      isString: boolean,\\n      isInTypeExport: boolean,\\n      isMaybeTypeOnly: boolean,\\n    ) {\\n      if (!isString && isMaybeTypeOnly) {\\n        this.parseTypeOnlyImportExportSpecifier(\\n          node,\\n          /* isImport */ false,\\n          isInTypeExport,\\n        );\\n        return this.finishNode<N.ExportSpecifier>(node, \\\"ExportSpecifier\\\");\\n      }\\n      node.exportKind = \\\"value\\\";\\n      return super.parseExportSpecifier(\\n        node,\\n        isString,\\n        isInTypeExport,\\n        isMaybeTypeOnly,\\n      );\\n    }\\n\\n    parseImportSpecifier(\\n      specifier: Undone<N.ImportSpecifier>,\\n      importedIsString: boolean,\\n      isInTypeOnlyImport: boolean,\\n      isMaybeTypeOnly: boolean,\\n      // eslint-disable-next-line @typescript-eslint/no-unused-vars\\n      bindingType: BindingTypes | undefined,\\n    ): N.ImportSpecifier {\\n      if (!importedIsString && isMaybeTypeOnly) {\\n        this.parseTypeOnlyImportExportSpecifier(\\n          specifier,\\n          /* isImport */ true,\\n          isInTypeOnlyImport,\\n        );\\n        return this.finishNode<N.ImportSpecifier>(specifier, \\\"ImportSpecifier\\\");\\n      }\\n      specifier.importKind = \\\"value\\\";\\n      return super.parseImportSpecifier(\\n        specifier,\\n        importedIsString,\\n        isInTypeOnlyImport,\\n        isMaybeTypeOnly,\\n        isInTypeOnlyImport ? BIND_TS_TYPE_IMPORT : BIND_FLAGS_TS_IMPORT,\\n      );\\n    }\\n\\n    parseTypeOnlyImportExportSpecifier(\\n      node: any,\\n      isImport: boolean,\\n      isInTypeOnlyImportExport: boolean,\\n    ): void {\\n      const leftOfAsKey = isImport ? \\\"imported\\\" : \\\"local\\\";\\n      const rightOfAsKey = isImport ? \\\"local\\\" : \\\"exported\\\";\\n\\n      let leftOfAs = node[leftOfAsKey];\\n      let rightOfAs;\\n\\n      let hasTypeSpecifier = false;\\n      let canParseAsKeyword = true;\\n\\n      const loc = leftOfAs.loc.start;\\n\\n      // https://github.com/microsoft/TypeScript/blob/fc4f9d83d5939047aa6bb2a43965c6e9bbfbc35b/src/compiler/parser.ts#L7411-L7456\\n      // import { type } from \\\"mod\\\";          - hasTypeSpecifier: false, leftOfAs: type\\n      // import { type as } from \\\"mod\\\";       - hasTypeSpecifier: true,  leftOfAs: as\\n      // import { type as as } from \\\"mod\\\";    - hasTypeSpecifier: false, leftOfAs: type, rightOfAs: as\\n      // import { type as as as } from \\\"mod\\\"; - hasTypeSpecifier: true,  leftOfAs: as,   rightOfAs: as\\n      if (this.isContextual(tt._as)) {\\n        // { type as ...? }\\n        const firstAs = this.parseIdentifier();\\n        if (this.isContextual(tt._as)) {\\n          // { type as as ...? }\\n          const secondAs = this.parseIdentifier();\\n          if (tokenIsKeywordOrIdentifier(this.state.type)) {\\n            // { type as as something }\\n            hasTypeSpecifier = true;\\n            leftOfAs = firstAs;\\n            rightOfAs = isImport\\n              ? this.parseIdentifier()\\n              : this.parseModuleExportName();\\n            canParseAsKeyword = false;\\n          } else {\\n            // { type as as }\\n            rightOfAs = secondAs;\\n            canParseAsKeyword = false;\\n          }\\n        } else if (tokenIsKeywordOrIdentifier(this.state.type)) {\\n          // { type as something }\\n          canParseAsKeyword = false;\\n          rightOfAs = isImport\\n            ? this.parseIdentifier()\\n            : this.parseModuleExportName();\\n        } else {\\n          // { type as }\\n          hasTypeSpecifier = true;\\n          leftOfAs = firstAs;\\n        }\\n      } else if (tokenIsKeywordOrIdentifier(this.state.type)) {\\n        // { type something ...? }\\n        hasTypeSpecifier = true;\\n        if (isImport) {\\n          leftOfAs = this.parseIdentifier(true);\\n          if (!this.isContextual(tt._as)) {\\n            this.checkReservedWord(\\n              leftOfAs.name,\\n              leftOfAs.loc.start,\\n              true,\\n              true,\\n            );\\n          }\\n        } else {\\n          leftOfAs = this.parseModuleExportName();\\n        }\\n      }\\n      if (hasTypeSpecifier && isInTypeOnlyImportExport) {\\n        this.raise(\\n          isImport\\n            ? TSErrors.TypeModifierIsUsedInTypeImports\\n            : TSErrors.TypeModifierIsUsedInTypeExports,\\n          { at: loc },\\n        );\\n      }\\n\\n      node[leftOfAsKey] = leftOfAs;\\n      node[rightOfAsKey] = rightOfAs;\\n\\n      const kindKey = isImport ? \\\"importKind\\\" : \\\"exportKind\\\";\\n      node[kindKey] = hasTypeSpecifier ? \\\"type\\\" : \\\"value\\\";\\n\\n      if (canParseAsKeyword && this.eatContextual(tt._as)) {\\n        node[rightOfAsKey] = isImport\\n          ? this.parseIdentifier()\\n          : this.parseModuleExportName();\\n      }\\n      if (!node[rightOfAsKey]) {\\n        node[rightOfAsKey] = cloneIdentifier(node[leftOfAsKey]);\\n      }\\n      if (isImport) {\\n        this.checkIdentifier(\\n          node[rightOfAsKey],\\n          hasTypeSpecifier ? BIND_TS_TYPE_IMPORT : BIND_FLAGS_TS_IMPORT,\\n        );\\n      }\\n    }\\n  };\\n\\nfunction isPossiblyLiteralEnum(expression: N.Expression): boolean {\\n  if (expression.type !== \\\"MemberExpression\\\") return false;\\n\\n  const { computed, property } = expression;\\n\\n  if (\\n    computed &&\\n    property.type !== \\\"StringLiteral\\\" &&\\n    (property.type !== \\\"TemplateLiteral\\\" || property.expressions.length > 0)\\n  ) {\\n    return false;\\n  }\\n\\n  return isUncomputedMemberExpressionChain(expression.object);\\n}\\n\\n// If a const declaration has no type annotation and is initialized to\\n// a string literal, numeric literal, or enum reference, then it is\\n// allowed. In an ideal world, we'd check whether init was *actually* an\\n// enum reference, but we allow anything that \\\"could be\\\" a literal enum\\n// in `isPossiblyLiteralEnum` since we don't have all the information\\n// that the typescript compiler has.\\nfunction isValidAmbientConstInitializer(\\n  expression: N.Expression,\\n  estree: boolean,\\n): boolean {\\n  const { type } = expression;\\n  if (expression.extra?.parenthesized) {\\n    return false;\\n  }\\n  if (estree) {\\n    if (type === \\\"Literal\\\") {\\n      const { value } = expression;\\n      if (typeof value === \\\"string\\\" || typeof value === \\\"boolean\\\") {\\n        return true;\\n      }\\n    }\\n  } else {\\n    if (type === \\\"StringLiteral\\\" || type === \\\"BooleanLiteral\\\") {\\n      return true;\\n    }\\n  }\\n  if (isNumber(expression, estree) || isNegativeNumber(expression, estree)) {\\n    return true;\\n  }\\n  if (type === \\\"TemplateLiteral\\\" && expression.expressions.length === 0) {\\n    return true;\\n  }\\n  if (isPossiblyLiteralEnum(expression)) {\\n    return true;\\n  }\\n  return false;\\n}\\n\\nfunction isNumber(expression: N.Expression, estree: boolean): boolean {\\n  if (estree) {\\n    return (\\n      expression.type === \\\"Literal\\\" &&\\n      (typeof expression.value === \\\"number\\\" || \\\"bigint\\\" in expression)\\n    );\\n  } else {\\n    return (\\n      expression.type === \\\"NumericLiteral\\\" ||\\n      expression.type === \\\"BigIntLiteral\\\"\\n    );\\n  }\\n}\\n\\nfunction isNegativeNumber(expression: N.Expression, estree: boolean): boolean {\\n  if (expression.type === \\\"UnaryExpression\\\") {\\n    const { operator, argument } = expression as N.UnaryExpression;\\n    if (operator === \\\"-\\\" && isNumber(argument, estree)) {\\n      return true;\\n    }\\n  }\\n  return false;\\n}\\n\\nfunction isUncomputedMemberExpressionChain(expression: N.Expression): boolean {\\n  if (expression.type === \\\"Identifier\\\") return true;\\n  if (expression.type !== \\\"MemberExpression\\\") return false;\\n  if (expression.computed) return false;\\n\\n  return isUncomputedMemberExpressionChain(expression.object);\\n}\\n\",\"import * as charCodes from \\\"charcodes\\\";\\n\\nimport { tokenLabelName, tt } from \\\"../tokenizer/types\\\";\\nimport type Parser from \\\"../parser\\\";\\nimport type * as N from \\\"../types\\\";\\nimport { ParseErrorEnum } from \\\"../parse-error\\\";\\nimport type { Undone } from \\\"../parser/node\\\";\\nimport type { ExpressionErrors } from \\\"../parser/util\\\";\\nimport type { BindingTypes } from \\\"../util/scopeflags\\\";\\nimport type { Position } from \\\"../util/location\\\";\\n\\ntype PossiblePlaceholders = {\\n  Identifier: N.Identifier;\\n  StringLiteral: N.StringLiteral;\\n  Expression: N.Expression;\\n  Statement: N.Statement;\\n  Declaration: N.Declaration;\\n  BlockStatement: N.BlockStatement;\\n  ClassBody: N.ClassBody;\\n  Pattern: N.Pattern;\\n};\\nexport type PlaceholderTypes = keyof PossiblePlaceholders;\\n\\ntype NodeOf<T extends keyof PossiblePlaceholders> = PossiblePlaceholders[T];\\n// todo: when there  is proper union type for Node\\n// type NodeOf<T extends PlaceholderTypes> = Extract<N.Node, { type: T }>;\\n\\n// todo: Placeholder<T> breaks everything, because its type is incompatible with\\n// the substituted nodes.\\ntype MaybePlaceholder<T extends PlaceholderTypes> = NodeOf<T>; // | Placeholder<T>\\n\\n/* eslint sort-keys: \\\"error\\\" */\\nconst PlaceholderErrors = ParseErrorEnum`placeholders`({\\n  ClassNameIsRequired: \\\"A class name is required.\\\",\\n  UnexpectedSpace: \\\"Unexpected space in placeholder.\\\",\\n});\\n\\n/* eslint-disable sort-keys */\\n\\nexport default (superClass: typeof Parser) =>\\n  class PlaceholdersParserMixin extends superClass implements Parser {\\n    parsePlaceholder<T extends PlaceholderTypes>(\\n      expectedNode: T,\\n    ): /*?N.Placeholder<T>*/ MaybePlaceholder<T> | undefined | null {\\n      if (this.match(tt.placeholder)) {\\n        const node = this.startNode();\\n        this.next();\\n        this.assertNoSpace();\\n\\n        // We can't use this.parseIdentifier because\\n        // we don't want nested placeholders.\\n        node.name = super.parseIdentifier(/* liberal */ true);\\n\\n        this.assertNoSpace();\\n        this.expect(tt.placeholder);\\n        // @ts-expect-error placeholder typings\\n        return this.finishPlaceholder(node, expectedNode);\\n      }\\n    }\\n\\n    finishPlaceholder<T extends PlaceholderTypes>(\\n      node: N.Node,\\n      expectedNode: T,\\n    ): /*N.Placeholder<T>*/ MaybePlaceholder<T> {\\n      const isFinished = !!(node.expectedNode && node.type === \\\"Placeholder\\\");\\n      node.expectedNode = expectedNode;\\n\\n      // @ts-expect-error todo(flow->ts)\\n      return isFinished ? node : this.finishNode(node, \\\"Placeholder\\\");\\n    }\\n\\n    /* ============================================================ *\\n     * tokenizer/index.js                                           *\\n     * ============================================================ */\\n\\n    getTokenFromCode(code: number) {\\n      if (\\n        code === charCodes.percentSign &&\\n        this.input.charCodeAt(this.state.pos + 1) === charCodes.percentSign\\n      ) {\\n        this.finishOp(tt.placeholder, 2);\\n      } else {\\n        super.getTokenFromCode(code);\\n      }\\n    }\\n\\n    /* ============================================================ *\\n     * parser/expression.js                                         *\\n     * ============================================================ */\\n\\n    parseExprAtom(\\n      refExpressionErrors?: ExpressionErrors | null,\\n    ): MaybePlaceholder<\\\"Expression\\\"> {\\n      return (\\n        this.parsePlaceholder(\\\"Expression\\\") ||\\n        super.parseExprAtom(refExpressionErrors)\\n      );\\n    }\\n\\n    parseIdentifier(liberal?: boolean): MaybePlaceholder<\\\"Identifier\\\"> {\\n      // NOTE: This function only handles identifiers outside of\\n      // expressions and binding patterns, since they are already\\n      // handled by the parseExprAtom and parseBindingAtom functions.\\n      // This is needed, for example, to parse \\\"class %%NAME%% {}\\\".\\n      return (\\n        this.parsePlaceholder(\\\"Identifier\\\") || super.parseIdentifier(liberal)\\n      );\\n    }\\n\\n    checkReservedWord(\\n      word: string,\\n      startLoc: Position,\\n      checkKeywords: boolean,\\n      isBinding: boolean,\\n    ) {\\n      // Sometimes we call #checkReservedWord(node.name), expecting\\n      // that node is an Identifier. If it is a Placeholder, name\\n      // will be undefined.\\n      if (word !== undefined) {\\n        super.checkReservedWord(word, startLoc, checkKeywords, isBinding);\\n      }\\n    }\\n\\n    /* ============================================================ *\\n     * parser/lval.js                                               *\\n     * ============================================================ */\\n\\n    parseBindingAtom(): MaybePlaceholder<\\\"Pattern\\\"> {\\n      return this.parsePlaceholder(\\\"Pattern\\\") || super.parseBindingAtom();\\n    }\\n\\n    isValidLVal(type: string, isParenthesized: boolean, binding: BindingTypes) {\\n      return (\\n        type === \\\"Placeholder\\\" ||\\n        super.isValidLVal(type, isParenthesized, binding)\\n      );\\n    }\\n\\n    toAssignable(node: N.Node, isLHS: boolean): void {\\n      if (\\n        node &&\\n        node.type === \\\"Placeholder\\\" &&\\n        node.expectedNode === \\\"Expression\\\"\\n      ) {\\n        node.expectedNode = \\\"Pattern\\\";\\n      } else {\\n        super.toAssignable(node, isLHS);\\n      }\\n    }\\n\\n    /* ============================================================ *\\n     * parser/statement.js                                          *\\n     * ============================================================ */\\n\\n    chStartsBindingIdentifier(ch: number, pos: number): boolean {\\n      if (super.chStartsBindingIdentifier(ch, pos)) {\\n        return true;\\n      }\\n\\n      // Accept \\\"let %%\\\" as the start of \\\"let %%placeholder%%\\\", as though the\\n      // placeholder were an identifier.\\n      const nextToken = this.lookahead();\\n      if (nextToken.type === tt.placeholder) {\\n        return true;\\n      }\\n\\n      return false;\\n    }\\n\\n    verifyBreakContinue(\\n      node: N.BreakStatement | N.ContinueStatement,\\n      isBreak: boolean,\\n    ) {\\n      // @ts-expect-error: node.label could be Placeholder\\n      if (node.label && node.label.type === \\\"Placeholder\\\") return;\\n      super.verifyBreakContinue(node, isBreak);\\n    }\\n\\n    // @ts-expect-error Plugin will override parser interface\\n    parseExpressionStatement(\\n      node: MaybePlaceholder<\\\"Statement\\\">,\\n      expr: N.Expression,\\n    ): MaybePlaceholder<\\\"Statement\\\"> {\\n      if (\\n        expr.type !== \\\"Placeholder\\\" ||\\n        (expr.extra && expr.extra.parenthesized)\\n      ) {\\n        // @ts-expect-error placeholder typings\\n        return super.parseExpressionStatement(node, expr);\\n      }\\n\\n      if (this.match(tt.colon)) {\\n        // @ts-expect-error placeholder typings\\n        const stmt: N.LabeledStatement = node;\\n        stmt.label = this.finishPlaceholder(expr, \\\"Identifier\\\");\\n        this.next();\\n        stmt.body = super.parseStatementOrSloppyAnnexBFunctionDeclaration();\\n        return this.finishNode(stmt, \\\"LabeledStatement\\\");\\n      }\\n\\n      this.semicolon();\\n      node.name = expr.name;\\n      return this.finishPlaceholder(node, \\\"Statement\\\");\\n    }\\n\\n    parseBlock(\\n      allowDirectives?: boolean,\\n      createNewLexicalScope?: boolean,\\n      afterBlockParse?: (hasStrictModeDirective: boolean) => void,\\n    ): MaybePlaceholder<\\\"BlockStatement\\\"> {\\n      return (\\n        this.parsePlaceholder(\\\"BlockStatement\\\") ||\\n        super.parseBlock(\\n          allowDirectives,\\n          createNewLexicalScope,\\n          afterBlockParse,\\n        )\\n      );\\n    }\\n\\n    parseFunctionId(\\n      requireId?: boolean,\\n    ): MaybePlaceholder<\\\"Identifier\\\"> | undefined | null {\\n      return (\\n        this.parsePlaceholder(\\\"Identifier\\\") || super.parseFunctionId(requireId)\\n      );\\n    }\\n    // @ts-expect-error Plugin will override parser interface\\n    parseClass<T extends N.Class>(\\n      node: T,\\n      isStatement: /* T === ClassDeclaration */ boolean,\\n      optionalId?: boolean,\\n    ): T {\\n      const type = isStatement ? \\\"ClassDeclaration\\\" : \\\"ClassExpression\\\";\\n\\n      this.next();\\n      const oldStrict = this.state.strict;\\n\\n      const placeholder = this.parsePlaceholder(\\\"Identifier\\\");\\n      if (placeholder) {\\n        if (\\n          this.match(tt._extends) ||\\n          this.match(tt.placeholder) ||\\n          this.match(tt.braceL)\\n        ) {\\n          node.id = placeholder;\\n        } else if (optionalId || !isStatement) {\\n          node.id = null;\\n          node.body = this.finishPlaceholder(placeholder, \\\"ClassBody\\\");\\n          return this.finishNode(node, type);\\n        } else {\\n          throw this.raise(PlaceholderErrors.ClassNameIsRequired, {\\n            at: this.state.startLoc,\\n          });\\n        }\\n      } else {\\n        this.parseClassId(node, isStatement, optionalId);\\n      }\\n\\n      super.parseClassSuper(node);\\n      node.body =\\n        this.parsePlaceholder(\\\"ClassBody\\\") ||\\n        super.parseClassBody(!!node.superClass, oldStrict);\\n      return this.finishNode(node, type);\\n    }\\n\\n    parseExport(node: N.Node, decorators: N.Decorator[] | null): N.AnyExport {\\n      const placeholder = this.parsePlaceholder(\\\"Identifier\\\");\\n      if (!placeholder) return super.parseExport(node, decorators);\\n\\n      if (!this.isContextual(tt._from) && !this.match(tt.comma)) {\\n        // export %%DECL%%;\\n        node.specifiers = [];\\n        node.source = null;\\n        node.declaration = this.finishPlaceholder(placeholder, \\\"Declaration\\\");\\n        return this.finishNode(node, \\\"ExportNamedDeclaration\\\");\\n      }\\n\\n      // export %%NAME%% from \\\"foo\\\";\\n      this.expectPlugin(\\\"exportDefaultFrom\\\");\\n      const specifier = this.startNode();\\n      specifier.exported = placeholder;\\n      node.specifiers = [this.finishNode(specifier, \\\"ExportDefaultSpecifier\\\")];\\n\\n      return super.parseExport(node, decorators);\\n    }\\n\\n    isExportDefaultSpecifier(): boolean {\\n      if (this.match(tt._default)) {\\n        const next = this.nextTokenStart();\\n        if (this.isUnparsedContextual(next, \\\"from\\\")) {\\n          if (\\n            this.input.startsWith(\\n              tokenLabelName(tt.placeholder),\\n              this.nextTokenStartSince(next + 4),\\n            )\\n          ) {\\n            return true;\\n          }\\n        }\\n      }\\n      return super.isExportDefaultSpecifier();\\n    }\\n\\n    maybeParseExportDefaultSpecifier(node: N.Node): boolean {\\n      if (node.specifiers && node.specifiers.length > 0) {\\n        // \\\"export %%NAME%%\\\" has already been parsed by #parseExport.\\n        return true;\\n      }\\n      return super.maybeParseExportDefaultSpecifier(node);\\n    }\\n\\n    checkExport(node: N.ExportNamedDeclaration): void {\\n      const { specifiers } = node;\\n      if (specifiers?.length) {\\n        node.specifiers = specifiers.filter(\\n          // @ts-expect-error placeholder typings\\n          node => node.exported.type === \\\"Placeholder\\\",\\n        );\\n      }\\n      super.checkExport(node);\\n      node.specifiers = specifiers;\\n    }\\n\\n    parseImport(\\n      node: Undone<N.ImportDeclaration>,\\n    ): N.ImportDeclaration | N.TsImportEqualsDeclaration {\\n      const placeholder = this.parsePlaceholder(\\\"Identifier\\\");\\n      if (!placeholder) return super.parseImport(node);\\n\\n      node.specifiers = [];\\n\\n      if (!this.isContextual(tt._from) && !this.match(tt.comma)) {\\n        // import %%STRING%%;\\n        node.source = this.finishPlaceholder(placeholder, \\\"StringLiteral\\\");\\n        this.semicolon();\\n        return this.finishNode(node, \\\"ImportDeclaration\\\");\\n      }\\n\\n      // import %%DEFAULT%% ...\\n      const specifier =\\n        this.startNodeAtNode<N.ImportDefaultSpecifier>(placeholder);\\n      specifier.local = placeholder;\\n      node.specifiers.push(\\n        this.finishNode(specifier, \\\"ImportDefaultSpecifier\\\"),\\n      );\\n\\n      if (this.eat(tt.comma)) {\\n        // import %%DEFAULT%%, * as ...\\n        const hasStarImport = this.maybeParseStarImportSpecifier(node);\\n\\n        // import %%DEFAULT%%, { ...\\n        if (!hasStarImport) this.parseNamedImportSpecifiers(node);\\n      }\\n\\n      this.expectContextual(tt._from);\\n      node.source = this.parseImportSource();\\n      this.semicolon();\\n      return this.finishNode(node, \\\"ImportDeclaration\\\");\\n    }\\n\\n    parseImportSource(): MaybePlaceholder<\\\"StringLiteral\\\"> {\\n      // import ... from %%STRING%%;\\n\\n      return (\\n        this.parsePlaceholder(\\\"StringLiteral\\\") || super.parseImportSource()\\n      );\\n    }\\n\\n    // Throws if the current token and the prev one are separated by a space.\\n    assertNoSpace(): void {\\n      if (this.state.start > this.state.lastTokEndLoc.index) {\\n        this.raise(PlaceholderErrors.UnexpectedSpace, {\\n          at: this.state.lastTokEndLoc,\\n        });\\n      }\\n    }\\n  };\\n\",\"import type Parser from \\\"../parser\\\";\\nimport { tokenIsIdentifier, tt } from \\\"../tokenizer/types\\\";\\nimport type * as N from \\\"../types\\\";\\nimport type { ExpressionErrors } from \\\"../parser/util\\\";\\n\\nexport default (superClass: typeof Parser) =>\\n  class V8IntrinsicMixin extends superClass implements Parser {\\n    parseV8Intrinsic(): N.Expression {\\n      if (this.match(tt.modulo)) {\\n        const v8IntrinsicStartLoc = this.state.startLoc;\\n        // let the `loc` of Identifier starts from `%`\\n        const node = this.startNode<N.Identifier>();\\n        this.next(); // eat '%'\\n        if (tokenIsIdentifier(this.state.type)) {\\n          const name = this.parseIdentifierName();\\n          const identifier = this.createIdentifier(node, name);\\n          // @ts-expect-error: avoid mutating AST types\\n          identifier.type = \\\"V8IntrinsicIdentifier\\\";\\n          if (this.match(tt.parenL)) {\\n            return identifier;\\n          }\\n        }\\n        this.unexpected(v8IntrinsicStartLoc);\\n      }\\n    }\\n\\n    /* ============================================================ *\\n     * parser/expression.js                                         *\\n     * ============================================================ */\\n\\n    parseExprAtom(refExpressionErrors?: ExpressionErrors | null): N.Expression {\\n      return (\\n        this.parseV8Intrinsic() || super.parseExprAtom(refExpressionErrors)\\n      );\\n    }\\n  };\\n\",\"import type Parser from \\\"./parser\\\";\\nimport type {\\n  ParserPluginWithOptions,\\n  PluginConfig,\\n  PluginOptions,\\n} from \\\"./typings\\\";\\n\\nexport type Plugin = PluginConfig;\\n\\nexport type PluginList = PluginConfig[];\\n\\nexport type MixinPlugin = (superClass: { new (...args: any): Parser }) => {\\n  new (...args: any): Parser;\\n};\\n\\n// This function’s second parameter accepts either a string (plugin name) or an\\n// array pair (plugin name and options object). If an options object is given,\\n// then each value is non-recursively checked for identity with the actual\\n// option value of each plugin in the first argument (which is an array of\\n// plugin names or array pairs).\\nexport function hasPlugin(\\n  plugins: PluginList,\\n  expectedConfig: PluginConfig,\\n): boolean {\\n  // The expectedOptions object is by default an empty object if the given\\n  // expectedConfig argument does not give an options object (i.e., if it is a\\n  // string).\\n  const [expectedName, expectedOptions] =\\n    typeof expectedConfig === \\\"string\\\" ? [expectedConfig, {}] : expectedConfig;\\n\\n  const expectedKeys = Object.keys(expectedOptions);\\n\\n  const expectedOptionsIsEmpty = expectedKeys.length === 0;\\n\\n  return plugins.some(p => {\\n    if (typeof p === \\\"string\\\") {\\n      return expectedOptionsIsEmpty && p === expectedName;\\n    } else {\\n      const [pluginName, pluginOptions] = p;\\n      if (pluginName !== expectedName) {\\n        return false;\\n      }\\n      for (const key of expectedKeys) {\\n        // @ts-expect-error key may not exist in plugin options\\n        if (pluginOptions[key] !== expectedOptions[key]) {\\n          return false;\\n        }\\n      }\\n      return true;\\n    }\\n  });\\n}\\n\\nexport function getPluginOption<\\n  PluginName extends ParserPluginWithOptions[0],\\n  OptionName extends keyof PluginOptions<PluginName>,\\n>(plugins: PluginList, name: PluginName, option: OptionName) {\\n  const plugin = plugins.find(plugin => {\\n    if (Array.isArray(plugin)) {\\n      return plugin[0] === name;\\n    } else {\\n      return plugin === name;\\n    }\\n  });\\n\\n  if (plugin && Array.isArray(plugin) && plugin.length > 1) {\\n    return (plugin[1] as PluginOptions<PluginName>)[option];\\n  }\\n\\n  return null;\\n}\\n\\nconst PIPELINE_PROPOSALS = [\\\"minimal\\\", \\\"fsharp\\\", \\\"hack\\\", \\\"smart\\\"];\\nconst TOPIC_TOKENS = [\\\"^^\\\", \\\"@@\\\", \\\"^\\\", \\\"%\\\", \\\"#\\\"];\\nconst RECORD_AND_TUPLE_SYNTAX_TYPES = [\\\"hash\\\", \\\"bar\\\"];\\n\\nexport function validatePlugins(plugins: PluginList) {\\n  if (hasPlugin(plugins, \\\"decorators\\\")) {\\n    if (hasPlugin(plugins, \\\"decorators-legacy\\\")) {\\n      throw new Error(\\n        \\\"Cannot use the decorators and decorators-legacy plugin together\\\",\\n      );\\n    }\\n\\n    const decoratorsBeforeExport = getPluginOption(\\n      plugins,\\n      \\\"decorators\\\",\\n      \\\"decoratorsBeforeExport\\\",\\n    );\\n    if (\\n      decoratorsBeforeExport != null &&\\n      typeof decoratorsBeforeExport !== \\\"boolean\\\"\\n    ) {\\n      throw new Error(\\n        \\\"'decoratorsBeforeExport' must be a boolean, if specified.\\\",\\n      );\\n    }\\n\\n    const allowCallParenthesized = getPluginOption(\\n      plugins,\\n      \\\"decorators\\\",\\n      \\\"allowCallParenthesized\\\",\\n    );\\n    if (\\n      allowCallParenthesized != null &&\\n      typeof allowCallParenthesized !== \\\"boolean\\\"\\n    ) {\\n      throw new Error(\\\"'allowCallParenthesized' must be a boolean.\\\");\\n    }\\n  }\\n\\n  if (hasPlugin(plugins, \\\"flow\\\") && hasPlugin(plugins, \\\"typescript\\\")) {\\n    throw new Error(\\\"Cannot combine flow and typescript plugins.\\\");\\n  }\\n\\n  if (hasPlugin(plugins, \\\"placeholders\\\") && hasPlugin(plugins, \\\"v8intrinsic\\\")) {\\n    throw new Error(\\\"Cannot combine placeholders and v8intrinsic plugins.\\\");\\n  }\\n\\n  if (hasPlugin(plugins, \\\"pipelineOperator\\\")) {\\n    const proposal = getPluginOption(plugins, \\\"pipelineOperator\\\", \\\"proposal\\\");\\n\\n    if (!PIPELINE_PROPOSALS.includes(proposal)) {\\n      const proposalList = PIPELINE_PROPOSALS.map(p => `\\\"${p}\\\"`).join(\\\", \\\");\\n      throw new Error(\\n        `\\\"pipelineOperator\\\" requires \\\"proposal\\\" option whose value must be one of: ${proposalList}.`,\\n      );\\n    }\\n\\n    const tupleSyntaxIsHash = hasPlugin(plugins, [\\n      \\\"recordAndTuple\\\",\\n      { syntaxType: \\\"hash\\\" },\\n    ]);\\n\\n    if (proposal === \\\"hack\\\") {\\n      if (hasPlugin(plugins, \\\"placeholders\\\")) {\\n        throw new Error(\\n          \\\"Cannot combine placeholders plugin and Hack-style pipes.\\\",\\n        );\\n      }\\n\\n      if (hasPlugin(plugins, \\\"v8intrinsic\\\")) {\\n        throw new Error(\\n          \\\"Cannot combine v8intrinsic plugin and Hack-style pipes.\\\",\\n        );\\n      }\\n\\n      const topicToken = getPluginOption(\\n        plugins,\\n        \\\"pipelineOperator\\\",\\n        \\\"topicToken\\\",\\n      );\\n\\n      if (!TOPIC_TOKENS.includes(topicToken)) {\\n        const tokenList = TOPIC_TOKENS.map(t => `\\\"${t}\\\"`).join(\\\", \\\");\\n\\n        throw new Error(\\n          `\\\"pipelineOperator\\\" in \\\"proposal\\\": \\\"hack\\\" mode also requires a \\\"topicToken\\\" option whose value must be one of: ${tokenList}.`,\\n        );\\n      }\\n\\n      if (topicToken === \\\"#\\\" && tupleSyntaxIsHash) {\\n        throw new Error(\\n          'Plugin conflict between `[\\\"pipelineOperator\\\", { proposal: \\\"hack\\\", topicToken: \\\"#\\\" }]` and `[\\\"recordAndtuple\\\", { syntaxType: \\\"hash\\\"}]`.',\\n        );\\n      }\\n    } else if (proposal === \\\"smart\\\" && tupleSyntaxIsHash) {\\n      throw new Error(\\n        'Plugin conflict between `[\\\"pipelineOperator\\\", { proposal: \\\"smart\\\" }]` and `[\\\"recordAndtuple\\\", { syntaxType: \\\"hash\\\"}]`.',\\n      );\\n    }\\n  }\\n\\n  if (hasPlugin(plugins, \\\"moduleAttributes\\\")) {\\n    if (process.env.BABEL_8_BREAKING) {\\n      throw new Error(\\n        \\\"`moduleAttributes` has been removed in Babel 8, please use `importAssertions` parser plugin, or `@babel/plugin-syntax-import-assertions`.\\\",\\n      );\\n    } else {\\n      if (hasPlugin(plugins, \\\"importAssertions\\\")) {\\n        throw new Error(\\n          \\\"Cannot combine importAssertions and moduleAttributes plugins.\\\",\\n        );\\n      }\\n      const moduleAttributesVersionPluginOption = getPluginOption(\\n        plugins,\\n        \\\"moduleAttributes\\\",\\n        \\\"version\\\",\\n      );\\n      if (moduleAttributesVersionPluginOption !== \\\"may-2020\\\") {\\n        throw new Error(\\n          \\\"The 'moduleAttributes' plugin requires a 'version' option,\\\" +\\n            \\\" representing the last proposal update. Currently, the\\\" +\\n            \\\" only supported value is 'may-2020'.\\\",\\n        );\\n      }\\n    }\\n  }\\n\\n  if (\\n    hasPlugin(plugins, \\\"recordAndTuple\\\") &&\\n    getPluginOption(plugins, \\\"recordAndTuple\\\", \\\"syntaxType\\\") != null &&\\n    !RECORD_AND_TUPLE_SYNTAX_TYPES.includes(\\n      getPluginOption(plugins, \\\"recordAndTuple\\\", \\\"syntaxType\\\"),\\n    )\\n  ) {\\n    throw new Error(\\n      \\\"The 'syntaxType' option of the 'recordAndTuple' plugin must be one of: \\\" +\\n        RECORD_AND_TUPLE_SYNTAX_TYPES.map(p => `'${p}'`).join(\\\", \\\"),\\n    );\\n  }\\n\\n  if (\\n    hasPlugin(plugins, \\\"asyncDoExpressions\\\") &&\\n    !hasPlugin(plugins, \\\"doExpressions\\\")\\n  ) {\\n    const error = new Error(\\n      \\\"'asyncDoExpressions' requires 'doExpressions', please add 'doExpressions' to parser plugins.\\\",\\n    );\\n    // @ts-expect-error so @babel/core can provide better error message\\n    error.missingPlugins = \\\"doExpressions\\\";\\n    throw error;\\n  }\\n}\\n\\n// These plugins are defined using a mixin which extends the parser class.\\n\\nimport estree from \\\"./plugins/estree\\\";\\nimport flow from \\\"./plugins/flow\\\";\\nimport jsx from \\\"./plugins/jsx\\\";\\nimport typescript from \\\"./plugins/typescript\\\";\\nimport placeholders from \\\"./plugins/placeholders\\\";\\nimport v8intrinsic from \\\"./plugins/v8intrinsic\\\";\\n\\n// NOTE: order is important. estree must come first; placeholders must come last.\\nexport const mixinPlugins = {\\n  estree,\\n  jsx,\\n  flow,\\n  typescript,\\n  v8intrinsic,\\n  placeholders,\\n};\\n\\nexport const mixinPluginNames = Object.keys(mixinPlugins) as ReadonlyArray<\\n  \\\"estree\\\" | \\\"jsx\\\" | \\\"flow\\\" | \\\"typescript\\\" | \\\"v8intrinsic\\\" | \\\"placeholders\\\"\\n>;\\n\",\"// A recursive descent parser operates by defining functions for all\\n// syntactic elements, and recursively calling those, each function\\n// advancing the input stream and returning an AST node. Precedence\\n// of constructs (for example, the fact that `!x[1]` means `!(x[1])`\\n// instead of `(!x)[1]` is handled by the fact that the parser\\n// function that parses unary prefix operators is called first, and\\n// in turn calls the function that parses `[]` subscripts — that\\n// way, it'll receive the node for `x[1]` already parsed, and wraps\\n// *that* in the unary operator node.\\n//\\n// Acorn uses an [operator precedence parser][opp] to handle binary\\n// operator precedence, because it is much more compact than using\\n// the technique outlined above, which uses different, nesting\\n// functions to specify precedence, for all of the ten binary\\n// precedence levels that JavaScript defines.\\n//\\n// [opp]: http://en.wikipedia.org/wiki/Operator-precedence_parser\\n\\nimport {\\n  tokenCanStartExpression,\\n  tokenIsAssignment,\\n  tokenIsIdentifier,\\n  tokenIsKeywordOrIdentifier,\\n  tokenIsOperator,\\n  tokenIsPostfix,\\n  tokenIsPrefix,\\n  tokenIsRightAssociative,\\n  tokenIsTemplate,\\n  tokenKeywordOrIdentifierIsKeyword,\\n  tokenLabelName,\\n  tokenOperatorPrecedence,\\n  tt,\\n  type TokenType,\\n} from \\\"../tokenizer/types\\\";\\nimport type * as N from \\\"../types\\\";\\nimport LValParser from \\\"./lval\\\";\\nimport {\\n  isKeyword,\\n  isReservedWord,\\n  isStrictReservedWord,\\n  isStrictBindReservedWord,\\n  isIdentifierStart,\\n  canBeReservedWord,\\n} from \\\"../util/identifier\\\";\\nimport {\\n  type Position,\\n  createPositionWithColumnOffset,\\n} from \\\"../util/location\\\";\\nimport * as charCodes from \\\"charcodes\\\";\\nimport {\\n  BIND_OUTSIDE,\\n  BIND_VAR,\\n  SCOPE_ARROW,\\n  SCOPE_CLASS,\\n  SCOPE_DIRECT_SUPER,\\n  SCOPE_FUNCTION,\\n  SCOPE_SUPER,\\n} from \\\"../util/scopeflags\\\";\\nimport { ExpressionErrors } from \\\"./util\\\";\\nimport {\\n  PARAM_AWAIT,\\n  PARAM_IN,\\n  PARAM_RETURN,\\n  functionFlags,\\n} from \\\"../util/production-parameter\\\";\\nimport {\\n  newArrowHeadScope,\\n  newAsyncArrowScope,\\n  newExpressionScope,\\n} from \\\"../util/expression-scope\\\";\\nimport { Errors, type ParseError } from \\\"../parse-error\\\";\\nimport { UnparenthesizedPipeBodyDescriptions } from \\\"../parse-error/pipeline-operator-errors\\\";\\nimport { setInnerComments } from \\\"./comments\\\";\\nimport { cloneIdentifier, type Undone } from \\\"./node\\\";\\nimport type Parser from \\\".\\\";\\n\\nimport type { SourceType } from \\\"../options\\\";\\n\\nexport default abstract class ExpressionParser extends LValParser {\\n  // Forward-declaration: defined in statement.js\\n  abstract parseBlock(\\n    allowDirectives?: boolean,\\n    createNewLexicalScope?: boolean,\\n    afterBlockParse?: (hasStrictModeDirective: boolean) => void,\\n  ): N.BlockStatement;\\n  abstract parseClass(\\n    node: N.Class,\\n    isStatement: boolean,\\n    optionalId?: boolean,\\n  ): N.Class;\\n  abstract parseDecorators(allowExport?: boolean): void;\\n  abstract parseFunction<T extends N.NormalFunction>(\\n    node: T,\\n    statement?: number,\\n    allowExpressionBody?: boolean,\\n    isAsync?: boolean,\\n  ): T;\\n  abstract parseFunctionParams(node: N.Function, isConstructor?: boolean): void;\\n  abstract parseBlockOrModuleBlockBody(\\n    body: N.Statement[],\\n    directives: N.Directive[] | null | undefined,\\n    topLevel: boolean,\\n    end: TokenType,\\n    afterBlockParse?: (hasStrictModeDirective: boolean) => void,\\n  ): void;\\n  abstract parseProgram(\\n    program: N.Program,\\n    end: TokenType,\\n    sourceType?: SourceType,\\n  ): N.Program;\\n\\n  // For object literal, check if property __proto__ has been used more than once.\\n  // If the expression is a destructuring assignment, then __proto__ may appear\\n  // multiple times. Otherwise, __proto__ is a duplicated key.\\n\\n  // For record expression, check if property __proto__ exists\\n\\n  checkProto(\\n    prop: N.ObjectMember | N.SpreadElement,\\n    isRecord: boolean | undefined | null,\\n    protoRef: {\\n      used: boolean;\\n    },\\n    refExpressionErrors?: ExpressionErrors | null,\\n  ): void {\\n    if (\\n      prop.type === \\\"SpreadElement\\\" ||\\n      this.isObjectMethod(prop) ||\\n      prop.computed ||\\n      // @ts-expect-error prop must be an ObjectProperty\\n      prop.shorthand\\n    ) {\\n      return;\\n    }\\n\\n    const key = prop.key;\\n    // It is either an Identifier or a String/NumericLiteral\\n    const name = key.type === \\\"Identifier\\\" ? key.name : key.value;\\n\\n    if (name === \\\"__proto__\\\") {\\n      if (isRecord) {\\n        this.raise(Errors.RecordNoProto, { at: key });\\n        return;\\n      }\\n      if (protoRef.used) {\\n        if (refExpressionErrors) {\\n          // Store the first redefinition's position, otherwise ignore because\\n          // we are parsing ambiguous pattern\\n          if (refExpressionErrors.doubleProtoLoc === null) {\\n            refExpressionErrors.doubleProtoLoc = key.loc.start;\\n          }\\n        } else {\\n          this.raise(Errors.DuplicateProto, { at: key });\\n        }\\n      }\\n\\n      protoRef.used = true;\\n    }\\n  }\\n\\n  shouldExitDescending(expr: N.Expression, potentialArrowAt: number): boolean {\\n    return (\\n      expr.type === \\\"ArrowFunctionExpression\\\" && expr.start === potentialArrowAt\\n    );\\n  }\\n\\n  // Convenience method to parse an Expression only\\n  getExpression(this: Parser): N.Expression & N.ParserOutput {\\n    this.enterInitialScopes();\\n    this.nextToken();\\n    const expr = this.parseExpression();\\n    if (!this.match(tt.eof)) {\\n      this.unexpected();\\n    }\\n    // Unlike parseTopLevel, we need to drain remaining commentStacks\\n    // because the top level node is _not_ Program.\\n    this.finalizeRemainingComments();\\n    expr.comments = this.state.comments;\\n    expr.errors = this.state.errors;\\n    if (this.options.tokens) {\\n      expr.tokens = this.tokens;\\n    }\\n    // @ts-expect-error fixme: refine types\\n    return expr;\\n  }\\n\\n  // ### Expression parsing\\n\\n  // These nest, from the most general expression type at the top to\\n  // 'atomic', nondivisible expression types at the bottom. Most of\\n  // the functions will simply let the function (s) below them parse,\\n  // and, *if* the syntactic construct they handle is present, wrap\\n  // the AST node that the inner parser gave them in another node.\\n\\n  // Parse a full expression.\\n  // - `disallowIn`\\n  //   is used to forbid the `in` operator (in for loops initialization expressions)\\n  //   When `disallowIn` is true, the production parameter [In] is not present.\\n\\n  // - `refExpressionErrors `\\n  //   provides reference for storing '=' operator inside shorthand\\n  //   property assignment in contexts where both object expression\\n  //   and object pattern might appear (so it's possible to raise\\n  //   delayed syntax error at correct position).\\n\\n  parseExpression(\\n    this: Parser,\\n    disallowIn?: boolean,\\n    refExpressionErrors?: ExpressionErrors,\\n  ): N.Expression {\\n    if (disallowIn) {\\n      return this.disallowInAnd(() =>\\n        this.parseExpressionBase(refExpressionErrors),\\n      );\\n    }\\n    return this.allowInAnd(() => this.parseExpressionBase(refExpressionErrors));\\n  }\\n\\n  // https://tc39.es/ecma262/#prod-Expression\\n  parseExpressionBase(\\n    this: Parser,\\n    refExpressionErrors?: ExpressionErrors,\\n  ): N.Expression {\\n    const startLoc = this.state.startLoc;\\n    const expr = this.parseMaybeAssign(refExpressionErrors);\\n    if (this.match(tt.comma)) {\\n      const node = this.startNodeAt(startLoc);\\n      node.expressions = [expr];\\n      while (this.eat(tt.comma)) {\\n        node.expressions.push(this.parseMaybeAssign(refExpressionErrors));\\n      }\\n      this.toReferencedList(node.expressions);\\n      return this.finishNode(node, \\\"SequenceExpression\\\");\\n    }\\n    return expr;\\n  }\\n\\n  // Set [~In] parameter for assignment expression\\n  parseMaybeAssignDisallowIn(\\n    this: Parser,\\n    refExpressionErrors?: ExpressionErrors | null,\\n    afterLeftParse?: Function,\\n  ) {\\n    return this.disallowInAnd(() =>\\n      this.parseMaybeAssign(refExpressionErrors, afterLeftParse),\\n    );\\n  }\\n\\n  // Set [+In] parameter for assignment expression\\n  parseMaybeAssignAllowIn(\\n    this: Parser,\\n    refExpressionErrors?: ExpressionErrors | null,\\n    afterLeftParse?: Function,\\n  ) {\\n    return this.allowInAnd(() =>\\n      this.parseMaybeAssign(refExpressionErrors, afterLeftParse),\\n    );\\n  }\\n\\n  // This method is only used by\\n  // the typescript and flow plugins.\\n  setOptionalParametersError(\\n    refExpressionErrors: ExpressionErrors,\\n    resultError?: ParseError<any>,\\n  ) {\\n    refExpressionErrors.optionalParametersLoc =\\n      resultError?.loc ?? this.state.startLoc;\\n  }\\n\\n  // Parse an assignment expression. This includes applications of\\n  // operators like `+=`.\\n  // https://tc39.es/ecma262/#prod-AssignmentExpression\\n  parseMaybeAssign(\\n    this: Parser,\\n    refExpressionErrors?: ExpressionErrors | null,\\n    afterLeftParse?: Function,\\n  ): N.Expression {\\n    const startLoc = this.state.startLoc;\\n    if (this.isContextual(tt._yield)) {\\n      if (this.prodParam.hasYield) {\\n        let left = this.parseYield();\\n        if (afterLeftParse) {\\n          left = afterLeftParse.call(this, left, startLoc);\\n        }\\n        return left;\\n      }\\n    }\\n\\n    let ownExpressionErrors;\\n    if (refExpressionErrors) {\\n      ownExpressionErrors = false;\\n    } else {\\n      refExpressionErrors = new ExpressionErrors();\\n      ownExpressionErrors = true;\\n    }\\n    const { type } = this.state;\\n\\n    if (type === tt.parenL || tokenIsIdentifier(type)) {\\n      this.state.potentialArrowAt = this.state.start;\\n    }\\n\\n    let left = this.parseMaybeConditional(refExpressionErrors);\\n    if (afterLeftParse) {\\n      left = afterLeftParse.call(this, left, startLoc);\\n    }\\n    if (tokenIsAssignment(this.state.type)) {\\n      const node = this.startNodeAt<N.AssignmentExpression>(startLoc);\\n      const operator = this.state.value;\\n      node.operator = operator;\\n\\n      if (this.match(tt.eq)) {\\n        this.toAssignable(left, /* isLHS */ true);\\n        node.left = left;\\n\\n        const startIndex = startLoc.index;\\n        if (\\n          refExpressionErrors.doubleProtoLoc != null &&\\n          refExpressionErrors.doubleProtoLoc.index >= startIndex\\n        ) {\\n          refExpressionErrors.doubleProtoLoc = null; // reset because double __proto__ is valid in assignment expression\\n        }\\n        if (\\n          refExpressionErrors.shorthandAssignLoc != null &&\\n          refExpressionErrors.shorthandAssignLoc.index >= startIndex\\n        ) {\\n          refExpressionErrors.shorthandAssignLoc = null; // reset because shorthand default was used correctly\\n        }\\n        if (\\n          refExpressionErrors.privateKeyLoc != null &&\\n          refExpressionErrors.privateKeyLoc.index >= startIndex\\n        ) {\\n          this.checkDestructuringPrivate(refExpressionErrors);\\n          refExpressionErrors.privateKeyLoc = null; // reset because `({ #x: x })` is an assignable pattern\\n        }\\n      } else {\\n        node.left = left;\\n      }\\n\\n      this.next();\\n      node.right = this.parseMaybeAssign();\\n      this.checkLVal(left, {\\n        in: this.finishNode(node, \\\"AssignmentExpression\\\"),\\n      });\\n      // @ts-expect-error todo(flow->ts) improve node types\\n      return node;\\n    } else if (ownExpressionErrors) {\\n      this.checkExpressionErrors(refExpressionErrors, true);\\n    }\\n\\n    return left;\\n  }\\n\\n  // Parse a ternary conditional (`?:`) operator.\\n  // https://tc39.es/ecma262/#prod-ConditionalExpression\\n\\n  parseMaybeConditional(\\n    this: Parser,\\n    refExpressionErrors: ExpressionErrors,\\n  ): N.Expression {\\n    const startLoc = this.state.startLoc;\\n    const potentialArrowAt = this.state.potentialArrowAt;\\n    const expr = this.parseExprOps(refExpressionErrors);\\n\\n    if (this.shouldExitDescending(expr, potentialArrowAt)) {\\n      return expr;\\n    }\\n\\n    return this.parseConditional(expr, startLoc, refExpressionErrors);\\n  }\\n\\n  parseConditional(\\n    this: Parser,\\n    expr: N.Expression,\\n    startLoc: Position,\\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\\n    refExpressionErrors?: ExpressionErrors | null,\\n  ): N.Expression {\\n    if (this.eat(tt.question)) {\\n      const node = this.startNodeAt(startLoc);\\n      node.test = expr;\\n      node.consequent = this.parseMaybeAssignAllowIn();\\n      this.expect(tt.colon);\\n      node.alternate = this.parseMaybeAssign();\\n      return this.finishNode(node, \\\"ConditionalExpression\\\");\\n    }\\n    return expr;\\n  }\\n\\n  parseMaybeUnaryOrPrivate(\\n    this: Parser,\\n    refExpressionErrors?: ExpressionErrors,\\n  ): N.Expression | N.PrivateName {\\n    return this.match(tt.privateName)\\n      ? this.parsePrivateName()\\n      : this.parseMaybeUnary(refExpressionErrors);\\n  }\\n\\n  // Start the precedence parser.\\n  // https://tc39.es/ecma262/#prod-ShortCircuitExpression\\n\\n  parseExprOps(\\n    this: Parser,\\n    refExpressionErrors: ExpressionErrors,\\n  ): N.Expression {\\n    const startLoc = this.state.startLoc;\\n    const potentialArrowAt = this.state.potentialArrowAt;\\n    const expr = this.parseMaybeUnaryOrPrivate(refExpressionErrors);\\n\\n    if (this.shouldExitDescending(expr, potentialArrowAt)) {\\n      return expr;\\n    }\\n\\n    return this.parseExprOp(expr, startLoc, -1);\\n  }\\n\\n  // Parse binary operators with the operator precedence parsing\\n  // algorithm. `left` is the left-hand side of the operator.\\n  // `minPrec` provides context that allows the function to stop and\\n  // defer further parser to one of its callers when it encounters an\\n  // operator that has a lower precedence than the set it is parsing.\\n\\n  parseExprOp(\\n    this: Parser,\\n    left: N.Expression | N.PrivateName,\\n    leftStartLoc: Position,\\n    minPrec: number,\\n  ): N.Expression {\\n    if (this.isPrivateName(left)) {\\n      // https://tc39.es/ecma262/#prod-RelationalExpression\\n      // RelationalExpression [In, Yield, Await]\\n      //   [+In] PrivateIdentifier in ShiftExpression[?Yield, ?Await]\\n\\n      const value = this.getPrivateNameSV(left);\\n\\n      if (\\n        minPrec >= tokenOperatorPrecedence(tt._in) ||\\n        !this.prodParam.hasIn ||\\n        !this.match(tt._in)\\n      ) {\\n        this.raise(Errors.PrivateInExpectedIn, {\\n          at: left,\\n          identifierName: value,\\n        });\\n      }\\n\\n      this.classScope.usePrivateName(value, left.loc.start);\\n    }\\n\\n    const op = this.state.type;\\n    if (tokenIsOperator(op) && (this.prodParam.hasIn || !this.match(tt._in))) {\\n      let prec = tokenOperatorPrecedence(op);\\n      if (prec > minPrec) {\\n        if (op === tt.pipeline) {\\n          this.expectPlugin(\\\"pipelineOperator\\\");\\n          if (this.state.inFSharpPipelineDirectBody) {\\n            return left;\\n          }\\n          this.checkPipelineAtInfixOperator(left, leftStartLoc);\\n        }\\n        const node = this.startNodeAt<N.LogicalExpression | N.BinaryExpression>(\\n          leftStartLoc,\\n        );\\n        node.left = left;\\n        node.operator = this.state.value;\\n\\n        const logical = op === tt.logicalOR || op === tt.logicalAND;\\n        const coalesce = op === tt.nullishCoalescing;\\n\\n        if (coalesce) {\\n          // Handle the precedence of `tt.coalesce` as equal to the range of logical expressions.\\n          // In other words, `node.right` shouldn't contain logical expressions in order to check the mixed error.\\n          prec = tokenOperatorPrecedence(tt.logicalAND);\\n        }\\n\\n        this.next();\\n\\n        if (\\n          op === tt.pipeline &&\\n          this.hasPlugin([\\\"pipelineOperator\\\", { proposal: \\\"minimal\\\" }])\\n        ) {\\n          if (this.state.type === tt._await && this.prodParam.hasAwait) {\\n            throw this.raise(Errors.UnexpectedAwaitAfterPipelineBody, {\\n              at: this.state.startLoc,\\n            });\\n          }\\n        }\\n\\n        node.right = this.parseExprOpRightExpr(op, prec);\\n        const finishedNode = this.finishNode(\\n          node,\\n          logical || coalesce ? \\\"LogicalExpression\\\" : \\\"BinaryExpression\\\",\\n        );\\n        /* this check is for all ?? operators\\n         * a ?? b && c for this example\\n         * when op is coalesce and nextOp is logical (&&), throw at the pos of nextOp that it can not be mixed.\\n         * Symmetrically it also throws when op is logical and nextOp is coalesce\\n         */\\n        const nextOp = this.state.type;\\n        if (\\n          (coalesce && (nextOp === tt.logicalOR || nextOp === tt.logicalAND)) ||\\n          (logical && nextOp === tt.nullishCoalescing)\\n        ) {\\n          throw this.raise(Errors.MixingCoalesceWithLogical, {\\n            at: this.state.startLoc,\\n          });\\n        }\\n\\n        return this.parseExprOp(finishedNode, leftStartLoc, minPrec);\\n      }\\n    }\\n    return left;\\n  }\\n\\n  // Helper function for `parseExprOp`. Parse the right-hand side of binary-\\n  // operator expressions, then apply any operator-specific functions.\\n\\n  parseExprOpRightExpr(\\n    this: Parser,\\n    op: TokenType,\\n    prec: number,\\n  ): N.Expression {\\n    const startLoc = this.state.startLoc;\\n    switch (op) {\\n      case tt.pipeline:\\n        switch (this.getPluginOption(\\\"pipelineOperator\\\", \\\"proposal\\\")) {\\n          case \\\"hack\\\":\\n            return this.withTopicBindingContext(() => {\\n              return this.parseHackPipeBody();\\n            });\\n\\n          case \\\"smart\\\":\\n            return this.withTopicBindingContext(() => {\\n              if (this.prodParam.hasYield && this.isContextual(tt._yield)) {\\n                throw this.raise(Errors.PipeBodyIsTighter, {\\n                  at: this.state.startLoc,\\n                });\\n              }\\n              return this.parseSmartPipelineBodyInStyle(\\n                this.parseExprOpBaseRightExpr(op, prec),\\n                startLoc,\\n              );\\n            });\\n\\n          case \\\"fsharp\\\":\\n            return this.withSoloAwaitPermittingContext(() => {\\n              return this.parseFSharpPipelineBody(prec);\\n            });\\n        }\\n\\n      // Falls through.\\n      default:\\n        return this.parseExprOpBaseRightExpr(op, prec);\\n    }\\n  }\\n\\n  // Helper function for `parseExprOpRightExpr`. Parse the right-hand side of\\n  // binary-operator expressions without applying any operator-specific functions.\\n\\n  parseExprOpBaseRightExpr(\\n    this: Parser,\\n    op: TokenType,\\n    prec: number,\\n  ): N.Expression {\\n    const startLoc = this.state.startLoc;\\n\\n    return this.parseExprOp(\\n      this.parseMaybeUnaryOrPrivate(),\\n      startLoc,\\n      tokenIsRightAssociative(op) ? prec - 1 : prec,\\n    );\\n  }\\n\\n  parseHackPipeBody(this: Parser): N.Expression {\\n    const { startLoc } = this.state;\\n    const body = this.parseMaybeAssign();\\n    const requiredParentheses = UnparenthesizedPipeBodyDescriptions.has(\\n      // @ts-expect-error TS2345: Argument of type 'string' is not assignable to parameter of type '\\\"ArrowFunctionExpression\\\" | \\\"YieldExpression\\\" | \\\"AssignmentExpression\\\" | \\\"ConditionalExpression\\\"'.\\n      body.type,\\n    );\\n\\n    // TODO: Check how to handle type casts in Flow and TS once they are supported\\n    if (requiredParentheses && !body.extra?.parenthesized) {\\n      this.raise(Errors.PipeUnparenthesizedBody, {\\n        at: startLoc,\\n        // @ts-expect-error TS2322: Type 'string' is not assignable to type '\\\"AssignmentExpression\\\" | \\\"ArrowFunctionExpression\\\" | \\\"ConditionalExpression\\\" | \\\"YieldExpression\\\"'.\\n        type: body.type,\\n      });\\n    }\\n    if (!this.topicReferenceWasUsedInCurrentContext()) {\\n      // A Hack pipe body must use the topic reference at least once.\\n      this.raise(Errors.PipeTopicUnused, { at: startLoc });\\n    }\\n\\n    return body;\\n  }\\n\\n  checkExponentialAfterUnary(\\n    node: N.AwaitExpression | Undone<N.UnaryExpression>,\\n  ) {\\n    if (this.match(tt.exponent)) {\\n      this.raise(Errors.UnexpectedTokenUnaryExponentiation, {\\n        at: node.argument,\\n      });\\n    }\\n  }\\n\\n  // Parse unary operators, both prefix and postfix.\\n  // https://tc39.es/ecma262/#prod-UnaryExpression\\n  parseMaybeUnary(\\n    this: Parser,\\n    refExpressionErrors?: ExpressionErrors | null,\\n    sawUnary?: boolean,\\n  ): N.Expression {\\n    const startLoc = this.state.startLoc;\\n    const isAwait = this.isContextual(tt._await);\\n\\n    if (isAwait && this.isAwaitAllowed()) {\\n      this.next();\\n      const expr = this.parseAwait(startLoc);\\n      if (!sawUnary) this.checkExponentialAfterUnary(expr);\\n      return expr;\\n    }\\n    const update = this.match(tt.incDec);\\n    const node = this.startNode<N.UnaryExpression | N.UpdateExpression>();\\n    if (tokenIsPrefix(this.state.type)) {\\n      node.operator = this.state.value;\\n      node.prefix = true;\\n\\n      if (this.match(tt._throw)) {\\n        this.expectPlugin(\\\"throwExpressions\\\");\\n      }\\n      const isDelete = this.match(tt._delete);\\n      this.next();\\n\\n      node.argument = this.parseMaybeUnary(null, true);\\n\\n      this.checkExpressionErrors(refExpressionErrors, true);\\n\\n      if (this.state.strict && isDelete) {\\n        const arg = node.argument;\\n\\n        if (arg.type === \\\"Identifier\\\") {\\n          this.raise(Errors.StrictDelete, { at: node });\\n        } else if (this.hasPropertyAsPrivateName(arg)) {\\n          this.raise(Errors.DeletePrivateField, { at: node });\\n        }\\n      }\\n\\n      if (!update) {\\n        if (!sawUnary) {\\n          this.checkExponentialAfterUnary(node as Undone<N.UnaryExpression>);\\n        }\\n        return this.finishNode(node, \\\"UnaryExpression\\\");\\n      }\\n    }\\n\\n    const expr = this.parseUpdate(\\n      // @ts-expect-error using \\\"Undone\\\" node as \\\"done\\\"\\n      node,\\n      update,\\n      refExpressionErrors,\\n    );\\n\\n    if (isAwait) {\\n      const { type } = this.state;\\n      const startsExpr = this.hasPlugin(\\\"v8intrinsic\\\")\\n        ? tokenCanStartExpression(type)\\n        : tokenCanStartExpression(type) && !this.match(tt.modulo);\\n      if (startsExpr && !this.isAmbiguousAwait()) {\\n        this.raiseOverwrite(Errors.AwaitNotInAsyncContext, { at: startLoc });\\n        return this.parseAwait(startLoc);\\n      }\\n    }\\n\\n    return expr;\\n  }\\n\\n  // https://tc39.es/ecma262/#prod-UpdateExpression\\n  parseUpdate(\\n    this: Parser,\\n    node: N.Expression,\\n    update: boolean,\\n    refExpressionErrors?: ExpressionErrors | null,\\n  ): N.Expression {\\n    if (update) {\\n      // @ts-expect-error Type 'Node' is missing the following properties from type 'Undone<UpdateExpression>': prefix, operator, argument\\n      const updateExpressionNode = node as Undone<N.UpdateExpression>;\\n      this.checkLVal(updateExpressionNode.argument, {\\n        in: this.finishNode(updateExpressionNode, \\\"UpdateExpression\\\"),\\n      });\\n      return node;\\n    }\\n\\n    const startLoc = this.state.startLoc;\\n    let expr = this.parseExprSubscripts(refExpressionErrors);\\n    if (this.checkExpressionErrors(refExpressionErrors, false)) return expr;\\n    while (tokenIsPostfix(this.state.type) && !this.canInsertSemicolon()) {\\n      const node = this.startNodeAt<N.UpdateExpression>(startLoc);\\n      node.operator = this.state.value;\\n      node.prefix = false;\\n      node.argument = expr;\\n      this.next();\\n      this.checkLVal(expr, {\\n        in: (expr = this.finishNode(node, \\\"UpdateExpression\\\")),\\n      });\\n    }\\n    return expr;\\n  }\\n\\n  // Parse call, dot, and `[]`-subscript expressions.\\n  // https://tc39.es/ecma262/#prod-LeftHandSideExpression\\n  parseExprSubscripts(\\n    this: Parser,\\n    refExpressionErrors?: ExpressionErrors | null,\\n  ): N.Expression {\\n    const startLoc = this.state.startLoc;\\n    const potentialArrowAt = this.state.potentialArrowAt;\\n    const expr = this.parseExprAtom(refExpressionErrors);\\n\\n    if (this.shouldExitDescending(expr, potentialArrowAt)) {\\n      return expr;\\n    }\\n\\n    return this.parseSubscripts(expr, startLoc);\\n  }\\n\\n  parseSubscripts(\\n    this: Parser,\\n    base: N.Expression,\\n    startLoc: Position,\\n    noCalls?: boolean | null,\\n  ): N.Expression {\\n    const state = {\\n      optionalChainMember: false,\\n      maybeAsyncArrow: this.atPossibleAsyncArrow(base),\\n      stop: false,\\n    };\\n    do {\\n      base = this.parseSubscript(base, startLoc, noCalls, state);\\n\\n      // After parsing a subscript, this isn't \\\"async\\\" for sure.\\n      state.maybeAsyncArrow = false;\\n    } while (!state.stop);\\n    return base;\\n  }\\n\\n  /**\\n   * @param state Set 'state.stop = true' to indicate that we should stop parsing subscripts.\\n   *   state.optionalChainMember to indicate that the member is currently in OptionalChain\\n   */\\n  parseSubscript(\\n    this: Parser,\\n    base: N.Expression,\\n    startLoc: Position,\\n    noCalls: boolean | undefined | null,\\n    state: N.ParseSubscriptState,\\n  ): N.Expression {\\n    const { type } = this.state;\\n    if (!noCalls && type === tt.doubleColon) {\\n      return this.parseBind(base, startLoc, noCalls, state);\\n    } else if (tokenIsTemplate(type)) {\\n      return this.parseTaggedTemplateExpression(base, startLoc, state);\\n    }\\n\\n    let optional = false;\\n\\n    if (type === tt.questionDot) {\\n      if (noCalls) {\\n        this.raise(Errors.OptionalChainingNoNew, {\\n          at: this.state.startLoc,\\n        });\\n        if (this.lookaheadCharCode() === charCodes.leftParenthesis) {\\n          // stop at `?.` when parsing `new a?.()`\\n          state.stop = true;\\n          return base;\\n        }\\n      }\\n      state.optionalChainMember = optional = true;\\n      this.next();\\n    }\\n\\n    if (!noCalls && this.match(tt.parenL)) {\\n      return this.parseCoverCallAndAsyncArrowHead(\\n        base,\\n        startLoc,\\n        state,\\n        optional,\\n      );\\n    } else {\\n      const computed = this.eat(tt.bracketL);\\n      if (computed || optional || this.eat(tt.dot)) {\\n        return this.parseMember(base, startLoc, state, computed, optional);\\n      } else {\\n        state.stop = true;\\n        return base;\\n      }\\n    }\\n  }\\n\\n  // base[?Yield, ?Await] [ Expression[+In, ?Yield, ?Await] ]\\n  // base[?Yield, ?Await] . IdentifierName\\n  // base[?Yield, ?Await] . PrivateIdentifier\\n  //   where `base` is one of CallExpression, MemberExpression and OptionalChain\\n  parseMember(\\n    this: Parser,\\n    base: N.Expression,\\n    startLoc: Position,\\n    state: N.ParseSubscriptState,\\n    computed: boolean,\\n    optional: boolean,\\n  ): N.OptionalMemberExpression | N.MemberExpression {\\n    const node = this.startNodeAt<\\n      N.OptionalMemberExpression | N.MemberExpression\\n    >(startLoc);\\n    node.object = base;\\n    node.computed = computed;\\n    if (computed) {\\n      node.property = this.parseExpression();\\n      this.expect(tt.bracketR);\\n    } else if (this.match(tt.privateName)) {\\n      if (base.type === \\\"Super\\\") {\\n        this.raise(Errors.SuperPrivateField, { at: startLoc });\\n      }\\n      this.classScope.usePrivateName(this.state.value, this.state.startLoc);\\n      node.property = this.parsePrivateName();\\n    } else {\\n      node.property = this.parseIdentifier(true);\\n    }\\n\\n    if (state.optionalChainMember) {\\n      (node as N.OptionalMemberExpression).optional = optional;\\n      return this.finishNode(node, \\\"OptionalMemberExpression\\\");\\n    } else {\\n      return this.finishNode(node, \\\"MemberExpression\\\");\\n    }\\n  }\\n\\n  // https://github.com/tc39/proposal-bind-operator#syntax\\n  parseBind(\\n    this: Parser,\\n    base: N.Expression,\\n    startLoc: Position,\\n    noCalls: boolean | undefined | null,\\n    state: N.ParseSubscriptState,\\n  ): N.Expression {\\n    const node = this.startNodeAt(startLoc);\\n    node.object = base;\\n    this.next(); // eat '::'\\n    node.callee = this.parseNoCallExpr();\\n    state.stop = true;\\n    return this.parseSubscripts(\\n      this.finishNode(node, \\\"BindExpression\\\"),\\n      startLoc,\\n      noCalls,\\n    );\\n  }\\n\\n  // https://tc39.es/ecma262/#prod-CoverCallExpressionAndAsyncArrowHead\\n  // CoverCallExpressionAndAsyncArrowHead\\n  // CallExpression[?Yield, ?Await] Arguments[?Yield, ?Await]\\n  // OptionalChain[?Yield, ?Await] Arguments[?Yield, ?Await]\\n  parseCoverCallAndAsyncArrowHead(\\n    this: Parser,\\n    base: N.Expression,\\n    startLoc: Position,\\n    state: N.ParseSubscriptState,\\n    optional: boolean,\\n  ): N.Expression {\\n    const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;\\n    let refExpressionErrors: ExpressionErrors | null = null;\\n\\n    this.state.maybeInArrowParameters = true;\\n    this.next(); // eat `(`\\n\\n    const node = this.startNodeAt<N.CallExpression | N.OptionalCallExpression>(\\n      startLoc,\\n    );\\n    node.callee = base;\\n    const { maybeAsyncArrow, optionalChainMember } = state;\\n\\n    if (maybeAsyncArrow) {\\n      this.expressionScope.enter(newAsyncArrowScope());\\n      refExpressionErrors = new ExpressionErrors();\\n    }\\n\\n    if (optionalChainMember) {\\n      // @ts-expect-error when optionalChainMember is true, node must be an optional call\\n      node.optional = optional;\\n    }\\n\\n    if (optional) {\\n      node.arguments = this.parseCallExpressionArguments(tt.parenR);\\n    } else {\\n      node.arguments = this.parseCallExpressionArguments(\\n        tt.parenR,\\n        base.type === \\\"Import\\\",\\n        base.type !== \\\"Super\\\",\\n        // @ts-expect-error todo(flow->ts)\\n        node,\\n        refExpressionErrors,\\n      );\\n    }\\n    let finishedNode:\\n      | N.CallExpression\\n      | N.OptionalCallExpression\\n      | N.ArrowFunctionExpression = this.finishCallExpression(\\n      node,\\n      optionalChainMember,\\n    );\\n\\n    if (maybeAsyncArrow && this.shouldParseAsyncArrow() && !optional) {\\n      /*:: invariant(refExpressionErrors != null) */\\n      state.stop = true;\\n      this.checkDestructuringPrivate(refExpressionErrors);\\n      this.expressionScope.validateAsPattern();\\n      this.expressionScope.exit();\\n      finishedNode = this.parseAsyncArrowFromCallExpression(\\n        this.startNodeAt<N.ArrowFunctionExpression>(startLoc),\\n        finishedNode as N.CallExpression,\\n      );\\n    } else {\\n      if (maybeAsyncArrow) {\\n        this.checkExpressionErrors(refExpressionErrors, true);\\n        this.expressionScope.exit();\\n      }\\n      this.toReferencedArguments(finishedNode);\\n    }\\n\\n    this.state.maybeInArrowParameters = oldMaybeInArrowParameters;\\n\\n    return finishedNode;\\n  }\\n\\n  toReferencedArguments(\\n    node: N.CallExpression | N.OptionalCallExpression,\\n    isParenthesizedExpr?: boolean,\\n  ) {\\n    this.toReferencedListDeep(node.arguments, isParenthesizedExpr);\\n  }\\n\\n  // MemberExpression [?Yield, ?Await] TemplateLiteral[?Yield, ?Await, +Tagged]\\n  // CallExpression [?Yield, ?Await] TemplateLiteral[?Yield, ?Await, +Tagged]\\n  parseTaggedTemplateExpression(\\n    this: Parser,\\n    base: N.Expression,\\n    startLoc: Position,\\n    state: N.ParseSubscriptState,\\n  ): N.TaggedTemplateExpression {\\n    const node = this.startNodeAt<N.TaggedTemplateExpression>(startLoc);\\n    node.tag = base;\\n    node.quasi = this.parseTemplate(true);\\n    if (state.optionalChainMember) {\\n      this.raise(Errors.OptionalChainingNoTemplate, { at: startLoc });\\n    }\\n    return this.finishNode(node, \\\"TaggedTemplateExpression\\\");\\n  }\\n\\n  atPossibleAsyncArrow(base: N.Expression): boolean {\\n    return (\\n      base.type === \\\"Identifier\\\" &&\\n      base.name === \\\"async\\\" &&\\n      this.state.lastTokEndLoc.index === base.end &&\\n      !this.canInsertSemicolon() &&\\n      // check there are no escape sequences, such as \\\\u{61}sync\\n      base.end - base.start === 5 &&\\n      base.start === this.state.potentialArrowAt\\n    );\\n  }\\n\\n  finishCallExpression<T extends N.CallExpression | N.OptionalCallExpression>(\\n    node: Undone<T>,\\n    optional: boolean,\\n  ): T {\\n    if (node.callee.type === \\\"Import\\\") {\\n      if (node.arguments.length === 2) {\\n        if (process.env.BABEL_8_BREAKING) {\\n          this.expectPlugin(\\\"importAssertions\\\");\\n        } else {\\n          if (!this.hasPlugin(\\\"moduleAttributes\\\")) {\\n            this.expectPlugin(\\\"importAssertions\\\");\\n          }\\n        }\\n      }\\n      if (node.arguments.length === 0 || node.arguments.length > 2) {\\n        this.raise(Errors.ImportCallArity, {\\n          at: node,\\n          maxArgumentCount:\\n            this.hasPlugin(\\\"importAssertions\\\") ||\\n            this.hasPlugin(\\\"moduleAttributes\\\")\\n              ? 2\\n              : 1,\\n        });\\n      } else {\\n        for (const arg of node.arguments) {\\n          if (arg.type === \\\"SpreadElement\\\") {\\n            this.raise(Errors.ImportCallSpreadArgument, { at: arg });\\n          }\\n        }\\n      }\\n    }\\n    return this.finishNode(\\n      node,\\n      optional ? \\\"OptionalCallExpression\\\" : \\\"CallExpression\\\",\\n    );\\n  }\\n\\n  parseCallExpressionArguments(\\n    this: Parser,\\n    close: TokenType,\\n    dynamicImport?: boolean,\\n    allowPlaceholder?: boolean,\\n    nodeForExtra?: N.Node | null,\\n    refExpressionErrors?: ExpressionErrors | null,\\n  ): Array<N.Expression | undefined | null> {\\n    const elts: N.Expression[] = [];\\n    let first = true;\\n    const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;\\n    this.state.inFSharpPipelineDirectBody = false;\\n\\n    while (!this.eat(close)) {\\n      if (first) {\\n        first = false;\\n      } else {\\n        this.expect(tt.comma);\\n        if (this.match(close)) {\\n          if (\\n            dynamicImport &&\\n            !this.hasPlugin(\\\"importAssertions\\\") &&\\n            !this.hasPlugin(\\\"moduleAttributes\\\")\\n          ) {\\n            this.raise(Errors.ImportCallArgumentTrailingComma, {\\n              at: this.state.lastTokStartLoc,\\n            });\\n          }\\n          if (nodeForExtra) {\\n            this.addTrailingCommaExtraToNode(nodeForExtra);\\n          }\\n          this.next();\\n          break;\\n        }\\n      }\\n\\n      elts.push(\\n        this.parseExprListItem(false, refExpressionErrors, allowPlaceholder),\\n      );\\n    }\\n\\n    this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;\\n\\n    return elts;\\n  }\\n\\n  shouldParseAsyncArrow(): boolean {\\n    return this.match(tt.arrow) && !this.canInsertSemicolon();\\n  }\\n\\n  parseAsyncArrowFromCallExpression(\\n    this: Parser,\\n    node: Undone<N.ArrowFunctionExpression>,\\n    call: N.CallExpression,\\n  ): N.ArrowFunctionExpression {\\n    this.resetPreviousNodeTrailingComments(call);\\n    this.expect(tt.arrow);\\n    this.parseArrowExpression(\\n      node,\\n      call.arguments,\\n      true,\\n      call.extra?.trailingCommaLoc,\\n    );\\n    // mark inner comments of `async()` as inner comments of `async () =>`\\n    if (call.innerComments) {\\n      setInnerComments(node, call.innerComments);\\n    }\\n    // mark trailing comments of `async` to be inner comments\\n    if (call.callee.trailingComments) {\\n      setInnerComments(node, call.callee.trailingComments);\\n    }\\n    return node as N.ArrowFunctionExpression;\\n  }\\n\\n  // Parse a no-call expression (like argument of `new` or `::` operators).\\n  // https://tc39.es/ecma262/#prod-MemberExpression\\n  parseNoCallExpr(this: Parser): N.Expression {\\n    const startLoc = this.state.startLoc;\\n    return this.parseSubscripts(this.parseExprAtom(), startLoc, true);\\n  }\\n\\n  // Parse an atomic expression — either a single token that is an\\n  // expression, an expression started by a keyword like `function` or\\n  // `new`, or an expression wrapped in punctuation like `()`, `[]`,\\n  // or `{}`.\\n\\n  // https://tc39.es/ecma262/#prod-PrimaryExpression\\n  // https://tc39.es/ecma262/#prod-AsyncArrowFunction\\n  // PrimaryExpression\\n  // Super\\n  // Import\\n  // AsyncArrowFunction\\n\\n  parseExprAtom(\\n    this: Parser,\\n    refExpressionErrors?: ExpressionErrors | null,\\n  ): N.Expression {\\n    let node;\\n    let decorators: N.Decorator[] | null = null;\\n\\n    const { type } = this.state;\\n    switch (type) {\\n      case tt._super:\\n        return this.parseSuper();\\n\\n      case tt._import:\\n        node = this.startNode<N.MetaProperty | N.Import>();\\n        this.next();\\n\\n        if (this.match(tt.dot)) {\\n          return this.parseImportMetaProperty(node as Undone<N.MetaProperty>);\\n        }\\n\\n        if (!this.match(tt.parenL)) {\\n          this.raise(Errors.UnsupportedImport, {\\n            at: this.state.lastTokStartLoc,\\n          });\\n        }\\n        return this.finishNode(node, \\\"Import\\\");\\n      case tt._this:\\n        node = this.startNode();\\n        this.next();\\n        return this.finishNode(node, \\\"ThisExpression\\\");\\n\\n      case tt._do: {\\n        return this.parseDo(this.startNode(), false);\\n      }\\n\\n      case tt.slash:\\n      case tt.slashAssign: {\\n        this.readRegexp();\\n        return this.parseRegExpLiteral(this.state.value);\\n      }\\n\\n      case tt.num:\\n        return this.parseNumericLiteral(this.state.value);\\n\\n      case tt.bigint:\\n        return this.parseBigIntLiteral(this.state.value);\\n\\n      case tt.decimal:\\n        return this.parseDecimalLiteral(this.state.value);\\n\\n      case tt.string:\\n        return this.parseStringLiteral(this.state.value);\\n\\n      case tt._null:\\n        return this.parseNullLiteral();\\n\\n      case tt._true:\\n        return this.parseBooleanLiteral(true);\\n      case tt._false:\\n        return this.parseBooleanLiteral(false);\\n\\n      case tt.parenL: {\\n        const canBeArrow = this.state.potentialArrowAt === this.state.start;\\n        return this.parseParenAndDistinguishExpression(canBeArrow);\\n      }\\n\\n      case tt.bracketBarL:\\n      case tt.bracketHashL: {\\n        return this.parseArrayLike(\\n          this.state.type === tt.bracketBarL ? tt.bracketBarR : tt.bracketR,\\n          /* canBePattern */ false,\\n          /* isTuple */ true,\\n        );\\n      }\\n      case tt.bracketL: {\\n        return this.parseArrayLike(\\n          tt.bracketR,\\n          /* canBePattern */ true,\\n          /* isTuple */ false,\\n          refExpressionErrors,\\n        );\\n      }\\n      case tt.braceBarL:\\n      case tt.braceHashL: {\\n        return this.parseObjectLike(\\n          this.state.type === tt.braceBarL ? tt.braceBarR : tt.braceR,\\n          /* isPattern */ false,\\n          /* isRecord */ true,\\n        );\\n      }\\n      case tt.braceL: {\\n        return this.parseObjectLike(\\n          tt.braceR,\\n          /* isPattern */ false,\\n          /* isRecord */ false,\\n          refExpressionErrors,\\n        );\\n      }\\n      case tt._function:\\n        return this.parseFunctionOrFunctionSent();\\n\\n      case tt.at:\\n        decorators = this.parseDecorators();\\n      // fall through\\n      case tt._class:\\n        return this.parseClass(\\n          this.maybeTakeDecorators(decorators, this.startNode()),\\n          false,\\n        );\\n\\n      case tt._new:\\n        return this.parseNewOrNewTarget();\\n\\n      case tt.templateNonTail:\\n      case tt.templateTail:\\n        return this.parseTemplate(false);\\n\\n      // BindExpression[Yield]\\n      //   :: MemberExpression[?Yield]\\n      case tt.doubleColon: {\\n        node = this.startNode();\\n        this.next();\\n        node.object = null;\\n        const callee = (node.callee = this.parseNoCallExpr());\\n        if (callee.type === \\\"MemberExpression\\\") {\\n          return this.finishNode(node, \\\"BindExpression\\\");\\n        } else {\\n          throw this.raise(Errors.UnsupportedBind, { at: callee });\\n        }\\n      }\\n\\n      case tt.privateName: {\\n        // Standalone private names are only allowed in \\\"#x in obj\\\"\\n        // expressions, and they are directly handled by callers of\\n        // parseExprOp. If we reach this, the input is always invalid.\\n        // We can throw a better error message and recover, rather than\\n        // just throwing \\\"Unexpected token\\\" (which is the default\\n        // behavior of this big switch statement).\\n        this.raise(Errors.PrivateInExpectedIn, {\\n          at: this.state.startLoc,\\n          identifierName: this.state.value,\\n        });\\n        return this.parsePrivateName();\\n      }\\n\\n      case tt.moduloAssign: {\\n        return this.parseTopicReferenceThenEqualsSign(tt.modulo, \\\"%\\\");\\n      }\\n\\n      case tt.xorAssign: {\\n        return this.parseTopicReferenceThenEqualsSign(tt.bitwiseXOR, \\\"^\\\");\\n      }\\n\\n      case tt.doubleCaret:\\n      case tt.doubleAt: {\\n        return this.parseTopicReference(\\\"hack\\\");\\n      }\\n\\n      case tt.bitwiseXOR:\\n      case tt.modulo:\\n      case tt.hash: {\\n        const pipeProposal = this.getPluginOption(\\n          \\\"pipelineOperator\\\",\\n          \\\"proposal\\\",\\n        );\\n\\n        if (pipeProposal) {\\n          return this.parseTopicReference(pipeProposal);\\n        }\\n        this.unexpected();\\n        break;\\n      }\\n\\n      case tt.lt: {\\n        const lookaheadCh = this.input.codePointAt(this.nextTokenStart());\\n        if (\\n          isIdentifierStart(lookaheadCh) || // Element/Type Parameter <foo>\\n          lookaheadCh === charCodes.greaterThan // Fragment <>\\n        ) {\\n          this.expectOnePlugin([\\\"jsx\\\", \\\"flow\\\", \\\"typescript\\\"]);\\n        } else {\\n          this.unexpected();\\n        }\\n        break;\\n      }\\n\\n      default:\\n        if (tokenIsIdentifier(type)) {\\n          if (\\n            this.isContextual(tt._module) &&\\n            this.lookaheadCharCode() === charCodes.leftCurlyBrace &&\\n            !this.hasFollowingLineBreak()\\n          ) {\\n            return this.parseModuleExpression();\\n          }\\n          const canBeArrow = this.state.potentialArrowAt === this.state.start;\\n          const containsEsc = this.state.containsEsc;\\n          const id = this.parseIdentifier();\\n\\n          if (\\n            !containsEsc &&\\n            id.name === \\\"async\\\" &&\\n            !this.canInsertSemicolon()\\n          ) {\\n            const { type } = this.state;\\n            if (type === tt._function) {\\n              this.resetPreviousNodeTrailingComments(id);\\n              this.next();\\n              return this.parseAsyncFunctionExpression(\\n                this.startNodeAtNode(id),\\n              );\\n            } else if (tokenIsIdentifier(type)) {\\n              // If the next token begins with \\\"=\\\", commit to parsing an async\\n              // arrow function. (Peeking ahead for \\\"=\\\" lets us avoid a more\\n              // expensive full-token lookahead on this common path.)\\n              if (this.lookaheadCharCode() === charCodes.equalsTo) {\\n                // although `id` is not used in async arrow unary function,\\n                // we don't need to reset `async`'s trailing comments because\\n                // it will be attached to the upcoming async arrow binding identifier\\n                return this.parseAsyncArrowUnaryFunction(\\n                  this.startNodeAtNode(id),\\n                );\\n              } else {\\n                // Otherwise, treat \\\"async\\\" as an identifier and let calling code\\n                // deal with the current tt.name token.\\n                return id;\\n              }\\n            } else if (type === tt._do) {\\n              this.resetPreviousNodeTrailingComments(id);\\n              return this.parseDo(this.startNodeAtNode(id), true);\\n            }\\n          }\\n\\n          if (\\n            canBeArrow &&\\n            this.match(tt.arrow) &&\\n            !this.canInsertSemicolon()\\n          ) {\\n            this.next();\\n            return this.parseArrowExpression(\\n              this.startNodeAtNode(id),\\n              [id],\\n              false,\\n            );\\n          }\\n\\n          return id;\\n        } else {\\n          this.unexpected();\\n        }\\n    }\\n  }\\n\\n  // This helper method should only be called\\n  // when the parser has reached a potential Hack pipe topic token\\n  // that is followed by an equals sign.\\n  // See <https://github.com/js-choi/proposal-hack-pipes>.\\n  // If we find ^= or %= in an expression position\\n  // (i.e., the tt.moduloAssign or tt.xorAssign token types), and if the\\n  // Hack-pipes proposal is active with ^ or % as its topicToken, then the ^ or\\n  // % could be the topic token (e.g., in x |> ^==y or x |> ^===y), and so we\\n  // reparse the current token as ^ or %.\\n  // Otherwise, this throws an unexpected-token error.\\n  parseTopicReferenceThenEqualsSign(\\n    topicTokenType: TokenType,\\n    topicTokenValue: string,\\n  ): N.Expression {\\n    const pipeProposal = this.getPluginOption(\\\"pipelineOperator\\\", \\\"proposal\\\");\\n\\n    if (pipeProposal) {\\n      // Set the most-recent token to be a topic token\\n      // given by the tokenType and tokenValue.\\n      // Now the next readToken() call (in parseTopicReference)\\n      // will consume that “topic token”.\\n      this.state.type = topicTokenType;\\n      this.state.value = topicTokenValue;\\n      // Rewind the tokenizer to the end of the “topic token”, so that the\\n      // following token starts at the equals sign after that topic token.\\n      this.state.pos--;\\n      this.state.end--;\\n      // This is safe to do since the preceding character was either ^ or %, and\\n      // thus not a newline.\\n      this.state.endLoc = createPositionWithColumnOffset(this.state.endLoc, -1);\\n      // Now actually consume the topic token.\\n      return this.parseTopicReference(pipeProposal);\\n    } else {\\n      this.unexpected();\\n    }\\n  }\\n\\n  // This helper method should only be called\\n  // when the proposal-pipeline-operator plugin is active,\\n  // and when the parser has reached a potential Hack pipe topic token.\\n  // Although a pipe-operator proposal is assumed to be active,\\n  // its configuration might not match the current token’s type.\\n  // See <https://github.com/js-choi/proposal-hack-pipes>.\\n  parseTopicReference(pipeProposal: string): N.Expression {\\n    const node = this.startNode<N.TopicReference>();\\n    const startLoc = this.state.startLoc;\\n    const tokenType = this.state.type;\\n\\n    // Consume the current token.\\n    this.next();\\n\\n    // If the pipe-operator plugin’s configuration matches the current token’s type,\\n    // then this will return `node`, will have been finished as a topic reference.\\n    // Otherwise, this will throw a `PipeTopicUnconfiguredToken` error.\\n    return this.finishTopicReference(node, startLoc, pipeProposal, tokenType);\\n  }\\n\\n  // This helper method attempts to finish the given `node`\\n  // into a topic-reference node for the given `pipeProposal`.\\n  // See <https://github.com/js-choi/proposal-hack-pipes>.\\n  //\\n  // The method assumes that any topic token was consumed before it was called.\\n  //\\n  // If the `pipelineOperator` plugin is active,\\n  // and if the given `tokenType` matches the plugin’s configuration,\\n  // then this method will return the finished `node`.\\n  //\\n  // If the `pipelineOperator` plugin is active,\\n  // but if the given `tokenType` does not match the plugin’s configuration,\\n  // then this method will throw a `PipeTopicUnconfiguredToken` error.\\n  finishTopicReference(\\n    node: Undone<N.Node>,\\n    startLoc: Position,\\n    pipeProposal: string,\\n    tokenType: TokenType,\\n  ): N.Expression {\\n    if (\\n      this.testTopicReferenceConfiguration(pipeProposal, startLoc, tokenType)\\n    ) {\\n      // The token matches the plugin’s configuration.\\n      // The token is therefore a topic reference.\\n\\n      // Determine the node type for the topic reference\\n      // that is appropriate for the active pipe-operator proposal.\\n      const nodeType =\\n        pipeProposal === \\\"smart\\\"\\n          ? \\\"PipelinePrimaryTopicReference\\\"\\n          : // The proposal must otherwise be \\\"hack\\\",\\n            // as enforced by testTopicReferenceConfiguration.\\n            \\\"TopicReference\\\";\\n\\n      if (!this.topicReferenceIsAllowedInCurrentContext()) {\\n        this.raise(\\n          // The topic reference is not allowed in the current context:\\n          // it is outside of a pipe body.\\n          // Raise recoverable errors.\\n          pipeProposal === \\\"smart\\\"\\n            ? Errors.PrimaryTopicNotAllowed\\n            : // In this case, `pipeProposal === \\\"hack\\\"` is true.\\n              Errors.PipeTopicUnbound,\\n          { at: startLoc },\\n        );\\n      }\\n\\n      // Register the topic reference so that its pipe body knows\\n      // that its topic was used at least once.\\n      this.registerTopicReference();\\n\\n      return this.finishNode(node, nodeType);\\n    } else {\\n      // The token does not match the plugin’s configuration.\\n      throw this.raise(Errors.PipeTopicUnconfiguredToken, {\\n        at: startLoc,\\n        token: tokenLabelName(tokenType),\\n      });\\n    }\\n  }\\n\\n  // This helper method tests whether the given token type\\n  // matches the pipelineOperator parser plugin’s configuration.\\n  // If the active pipe proposal is Hack style,\\n  // and if the given token is the same as the plugin configuration’s `topicToken`,\\n  // then this is a valid topic reference.\\n  // If the active pipe proposal is smart mix,\\n  // then the topic token must always be `#`.\\n  // If the active pipe proposal is neither (e.g., \\\"minimal\\\" or \\\"fsharp\\\"),\\n  // then an error is thrown.\\n  testTopicReferenceConfiguration(\\n    pipeProposal: string,\\n    startLoc: Position,\\n    tokenType: TokenType,\\n  ): boolean {\\n    switch (pipeProposal) {\\n      case \\\"hack\\\": {\\n        return this.hasPlugin([\\n          \\\"pipelineOperator\\\",\\n          {\\n            // @ts-expect-error token must have a label\\n            topicToken: tokenLabelName(tokenType),\\n          },\\n        ]);\\n      }\\n      case \\\"smart\\\":\\n        return tokenType === tt.hash;\\n      default:\\n        throw this.raise(Errors.PipeTopicRequiresHackPipes, { at: startLoc });\\n    }\\n  }\\n\\n  // async [no LineTerminator here] AsyncArrowBindingIdentifier[?Yield] [no LineTerminator here] => AsyncConciseBody[?In]\\n  parseAsyncArrowUnaryFunction(\\n    this: Parser,\\n    node: Undone<N.ArrowFunctionExpression>,\\n  ): N.ArrowFunctionExpression {\\n    // We don't need to push a new ParameterDeclarationScope here since we are sure\\n    // 1) it is an async arrow, 2) no biding pattern is allowed in params\\n    this.prodParam.enter(functionFlags(true, this.prodParam.hasYield));\\n    const params = [this.parseIdentifier()];\\n    this.prodParam.exit();\\n    if (this.hasPrecedingLineBreak()) {\\n      this.raise(Errors.LineTerminatorBeforeArrow, {\\n        at: this.state.curPosition(),\\n      });\\n    }\\n    this.expect(tt.arrow);\\n    // let foo = async bar => {};\\n    return this.parseArrowExpression(node, params, true);\\n  }\\n\\n  // https://github.com/tc39/proposal-do-expressions\\n  // https://github.com/tc39/proposal-async-do-expressions\\n  parseDo(\\n    this: Parser,\\n    node: Undone<N.DoExpression>,\\n    isAsync: boolean,\\n  ): N.DoExpression {\\n    this.expectPlugin(\\\"doExpressions\\\");\\n    if (isAsync) {\\n      this.expectPlugin(\\\"asyncDoExpressions\\\");\\n    }\\n    node.async = isAsync;\\n    this.next(); // eat `do`\\n    const oldLabels = this.state.labels;\\n    this.state.labels = [];\\n    if (isAsync) {\\n      // AsyncDoExpression :\\n      // async [no LineTerminator here] do Block[~Yield, +Await, ~Return]\\n      this.prodParam.enter(PARAM_AWAIT);\\n      node.body = this.parseBlock();\\n      this.prodParam.exit();\\n    } else {\\n      node.body = this.parseBlock();\\n    }\\n\\n    this.state.labels = oldLabels;\\n    return this.finishNode(node, \\\"DoExpression\\\");\\n  }\\n\\n  // Parse the `super` keyword\\n  parseSuper(): N.Super {\\n    const node = this.startNode<N.Super>();\\n    this.next(); // eat `super`\\n    if (\\n      this.match(tt.parenL) &&\\n      !this.scope.allowDirectSuper &&\\n      !this.options.allowSuperOutsideMethod\\n    ) {\\n      this.raise(Errors.SuperNotAllowed, { at: node });\\n    } else if (\\n      !this.scope.allowSuper &&\\n      !this.options.allowSuperOutsideMethod\\n    ) {\\n      this.raise(Errors.UnexpectedSuper, { at: node });\\n    }\\n\\n    if (\\n      !this.match(tt.parenL) &&\\n      !this.match(tt.bracketL) &&\\n      !this.match(tt.dot)\\n    ) {\\n      this.raise(Errors.UnsupportedSuper, { at: node });\\n    }\\n\\n    return this.finishNode(node, \\\"Super\\\");\\n  }\\n\\n  parsePrivateName(): N.PrivateName {\\n    const node = this.startNode<N.PrivateName>();\\n    const id = this.startNodeAt<N.Identifier>(\\n      // The position is hardcoded because we merge `#` and name into a single\\n      // tt.privateName token\\n      createPositionWithColumnOffset(this.state.startLoc, 1),\\n    );\\n    const name = this.state.value;\\n    this.next(); // eat #name;\\n    node.id = this.createIdentifier(id, name);\\n    return this.finishNode(node, \\\"PrivateName\\\");\\n  }\\n\\n  parseFunctionOrFunctionSent(\\n    this: Parser,\\n  ): N.FunctionExpression | N.MetaProperty {\\n    const node = this.startNode<N.FunctionExpression | N.MetaProperty>();\\n\\n    // We do not do parseIdentifier here because when parseFunctionOrFunctionSent\\n    // is called we already know that the current token is a \\\"name\\\" with the value \\\"function\\\"\\n    // This will improve perf a tiny little bit as we do not do validation but more importantly\\n    // here is that parseIdentifier will remove an item from the expression stack\\n    // if \\\"function\\\" or \\\"class\\\" is parsed as identifier (in objects e.g.), which should not happen here.\\n    this.next(); // eat `function`\\n\\n    if (this.prodParam.hasYield && this.match(tt.dot)) {\\n      const meta = this.createIdentifier(\\n        this.startNodeAtNode<N.Identifier>(node),\\n        \\\"function\\\",\\n      );\\n      this.next(); // eat `.`\\n      // https://github.com/tc39/proposal-function.sent#syntax-1\\n      if (this.match(tt._sent)) {\\n        this.expectPlugin(\\\"functionSent\\\");\\n      } else if (!this.hasPlugin(\\\"functionSent\\\")) {\\n        // The code wasn't `function.sent` but just `function.`, so a simple error is less confusing.\\n        this.unexpected();\\n      }\\n      return this.parseMetaProperty(\\n        node as Undone<N.MetaProperty>,\\n        meta,\\n        \\\"sent\\\",\\n      );\\n    }\\n    return this.parseFunction(node as Undone<N.FunctionExpression>);\\n  }\\n\\n  parseMetaProperty(\\n    node: Undone<N.MetaProperty>,\\n    meta: N.Identifier,\\n    propertyName: string,\\n  ): N.MetaProperty {\\n    node.meta = meta;\\n\\n    const containsEsc = this.state.containsEsc;\\n\\n    node.property = this.parseIdentifier(true);\\n\\n    if (node.property.name !== propertyName || containsEsc) {\\n      this.raise(Errors.UnsupportedMetaProperty, {\\n        at: node.property,\\n        target: meta.name,\\n        onlyValidPropertyName: propertyName,\\n      });\\n    }\\n\\n    return this.finishNode(node, \\\"MetaProperty\\\");\\n  }\\n\\n  // https://tc39.es/ecma262/#prod-ImportMeta\\n  parseImportMetaProperty(node: Undone<N.MetaProperty>): N.MetaProperty {\\n    const id = this.createIdentifier(\\n      this.startNodeAtNode<N.Identifier>(node),\\n      \\\"import\\\",\\n    );\\n    this.next(); // eat `.`\\n\\n    if (this.isContextual(tt._meta)) {\\n      if (!this.inModule) {\\n        this.raise(Errors.ImportMetaOutsideModule, { at: id });\\n      }\\n      this.sawUnambiguousESM = true;\\n    }\\n\\n    return this.parseMetaProperty(node, id, \\\"meta\\\");\\n  }\\n\\n  parseLiteralAtNode<T extends N.Node>(\\n    value: any,\\n    type: T[\\\"type\\\"],\\n    node: any,\\n  ): T {\\n    this.addExtra(node, \\\"rawValue\\\", value);\\n    this.addExtra(node, \\\"raw\\\", this.input.slice(node.start, this.state.end));\\n    node.value = value;\\n    this.next();\\n    return this.finishNode<T>(node, type);\\n  }\\n\\n  parseLiteral<T extends N.Node>(value: any, type: T[\\\"type\\\"]): T {\\n    const node = this.startNode();\\n    return this.parseLiteralAtNode(value, type, node);\\n  }\\n\\n  parseStringLiteral(value: any) {\\n    return this.parseLiteral<N.StringLiteral>(value, \\\"StringLiteral\\\");\\n  }\\n\\n  parseNumericLiteral(value: any) {\\n    return this.parseLiteral<N.NumericLiteral>(value, \\\"NumericLiteral\\\");\\n  }\\n\\n  parseBigIntLiteral(value: any) {\\n    return this.parseLiteral<N.BigIntLiteral>(value, \\\"BigIntLiteral\\\");\\n  }\\n\\n  parseDecimalLiteral(value: any) {\\n    return this.parseLiteral<N.DecimalLiteral>(value, \\\"DecimalLiteral\\\");\\n  }\\n\\n  parseRegExpLiteral(value: {\\n    value: any;\\n    pattern: string;\\n    flags: N.RegExpLiteral[\\\"flags\\\"];\\n  }) {\\n    const node = this.parseLiteral<N.RegExpLiteral>(\\n      value.value,\\n      \\\"RegExpLiteral\\\",\\n    );\\n    node.pattern = value.pattern;\\n    node.flags = value.flags;\\n    return node;\\n  }\\n\\n  parseBooleanLiteral(value: boolean) {\\n    const node = this.startNode<N.BooleanLiteral>();\\n    node.value = value;\\n    this.next();\\n    return this.finishNode(node, \\\"BooleanLiteral\\\");\\n  }\\n\\n  parseNullLiteral() {\\n    const node = this.startNode<N.NullLiteral>();\\n    this.next();\\n    return this.finishNode(node, \\\"NullLiteral\\\");\\n  }\\n\\n  // https://tc39.es/ecma262/#prod-CoverParenthesizedExpressionAndArrowParameterList\\n  parseParenAndDistinguishExpression(\\n    this: Parser,\\n    canBeArrow: boolean,\\n  ): N.Expression {\\n    const startLoc = this.state.startLoc;\\n\\n    let val;\\n    this.next(); // eat `(`\\n    this.expressionScope.enter(newArrowHeadScope());\\n\\n    const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;\\n    const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;\\n    this.state.maybeInArrowParameters = true;\\n    this.state.inFSharpPipelineDirectBody = false;\\n\\n    const innerStartLoc = this.state.startLoc;\\n    const exprList: N.Expression[] = [];\\n    const refExpressionErrors = new ExpressionErrors();\\n    let first = true;\\n    let spreadStartLoc;\\n    let optionalCommaStartLoc;\\n\\n    while (!this.match(tt.parenR)) {\\n      if (first) {\\n        first = false;\\n      } else {\\n        this.expect(\\n          tt.comma,\\n          refExpressionErrors.optionalParametersLoc === null\\n            ? null\\n            : refExpressionErrors.optionalParametersLoc,\\n        );\\n        if (this.match(tt.parenR)) {\\n          optionalCommaStartLoc = this.state.startLoc;\\n          break;\\n        }\\n      }\\n\\n      if (this.match(tt.ellipsis)) {\\n        const spreadNodeStartLoc = this.state.startLoc;\\n        spreadStartLoc = this.state.startLoc;\\n        exprList.push(\\n          this.parseParenItem(this.parseRestBinding(), spreadNodeStartLoc),\\n        );\\n\\n        if (!this.checkCommaAfterRest(charCodes.rightParenthesis)) {\\n          break;\\n        }\\n      } else {\\n        exprList.push(\\n          this.parseMaybeAssignAllowIn(\\n            refExpressionErrors,\\n            this.parseParenItem,\\n          ),\\n        );\\n      }\\n    }\\n\\n    const innerEndLoc = this.state.lastTokEndLoc;\\n    this.expect(tt.parenR);\\n\\n    this.state.maybeInArrowParameters = oldMaybeInArrowParameters;\\n    this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;\\n\\n    let arrowNode = this.startNodeAt<N.ArrowFunctionExpression>(startLoc);\\n    if (\\n      canBeArrow &&\\n      this.shouldParseArrow(exprList) &&\\n      (arrowNode = this.parseArrow(arrowNode))\\n    ) {\\n      this.checkDestructuringPrivate(refExpressionErrors);\\n      this.expressionScope.validateAsPattern();\\n      this.expressionScope.exit();\\n      this.parseArrowExpression(arrowNode, exprList, false);\\n      // @ts-expect-error todo(flow->ts) improve node types\\n      return arrowNode;\\n    }\\n    this.expressionScope.exit();\\n\\n    if (!exprList.length) {\\n      this.unexpected(this.state.lastTokStartLoc);\\n    }\\n    if (optionalCommaStartLoc) this.unexpected(optionalCommaStartLoc);\\n    if (spreadStartLoc) this.unexpected(spreadStartLoc);\\n    this.checkExpressionErrors(refExpressionErrors, true);\\n\\n    this.toReferencedListDeep(exprList, /* isParenthesizedExpr */ true);\\n    if (exprList.length > 1) {\\n      val = this.startNodeAt<N.SequenceExpression>(innerStartLoc);\\n      val.expressions = exprList;\\n      // finish node at current location so it can pick up comments after `)`\\n      this.finishNode(val, \\\"SequenceExpression\\\");\\n      this.resetEndLocation(val, innerEndLoc);\\n    } else {\\n      val = exprList[0];\\n    }\\n\\n    return this.wrapParenthesis(\\n      startLoc,\\n      // @ts-expect-error todo(flow->ts)\\n      val,\\n    );\\n  }\\n\\n  wrapParenthesis(startLoc: Position, expression: N.Expression): N.Expression {\\n    if (!this.options.createParenthesizedExpressions) {\\n      this.addExtra(expression, \\\"parenthesized\\\", true);\\n      this.addExtra(expression, \\\"parenStart\\\", startLoc.index);\\n\\n      this.takeSurroundingComments(\\n        expression,\\n        startLoc.index,\\n        this.state.lastTokEndLoc.index,\\n      );\\n\\n      return expression;\\n    }\\n\\n    const parenExpression =\\n      this.startNodeAt<N.ParenthesizedExpression>(startLoc);\\n    parenExpression.expression = expression;\\n    return this.finishNode(parenExpression, \\\"ParenthesizedExpression\\\");\\n  }\\n\\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars -- `params` is used in typescript plugin\\n  shouldParseArrow(params: Array<N.Node>): boolean {\\n    return !this.canInsertSemicolon();\\n  }\\n\\n  parseArrow(\\n    node: Undone<N.ArrowFunctionExpression>,\\n  ): Undone<N.ArrowFunctionExpression> | undefined {\\n    if (this.eat(tt.arrow)) {\\n      return node;\\n    }\\n  }\\n\\n  parseParenItem(\\n    node: N.Expression,\\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\\n    startLoc: Position,\\n  ): N.Expression {\\n    return node;\\n  }\\n\\n  parseNewOrNewTarget(this: Parser): N.NewExpression | N.MetaProperty {\\n    const node = this.startNode<N.NewExpression | N.MetaProperty>();\\n    this.next();\\n    if (this.match(tt.dot)) {\\n      // https://tc39.es/ecma262/#prod-NewTarget\\n      const meta = this.createIdentifier(\\n        this.startNodeAtNode<N.Identifier>(node),\\n        \\\"new\\\",\\n      );\\n      this.next();\\n      const metaProp = this.parseMetaProperty(\\n        node as Undone<N.MetaProperty>,\\n        meta,\\n        \\\"target\\\",\\n      );\\n\\n      if (\\n        !this.scope.inNonArrowFunction &&\\n        !this.scope.inClass &&\\n        !this.options.allowNewTargetOutsideFunction\\n      ) {\\n        this.raise(Errors.UnexpectedNewTarget, { at: metaProp });\\n      }\\n\\n      return metaProp;\\n    }\\n\\n    return this.parseNew(node as Undone<N.NewExpression>);\\n  }\\n\\n  // New's precedence is slightly tricky. It must allow its argument to\\n  // be a `[]` or dot subscript expression, but not a call — at least,\\n  // not without wrapping it in parentheses. Thus, it uses the noCalls\\n  // argument to parseSubscripts to prevent it from consuming the\\n  // argument list.\\n  // https://tc39.es/ecma262/#prod-NewExpression\\n  parseNew(this: Parser, node: Undone<N.NewExpression>): N.NewExpression {\\n    this.parseNewCallee(node);\\n\\n    if (this.eat(tt.parenL)) {\\n      const args = this.parseExprList(tt.parenR);\\n      this.toReferencedList(args);\\n      // (parseExprList should be all non-null in this case)\\n      node.arguments = args;\\n    } else {\\n      node.arguments = [];\\n    }\\n\\n    return this.finishNode(node, \\\"NewExpression\\\");\\n  }\\n\\n  parseNewCallee(this: Parser, node: Undone<N.NewExpression>): void {\\n    node.callee = this.parseNoCallExpr();\\n    if (node.callee.type === \\\"Import\\\") {\\n      this.raise(Errors.ImportCallNotNewExpression, { at: node.callee });\\n    }\\n  }\\n\\n  // Parse template expression.\\n\\n  parseTemplateElement(isTagged: boolean): N.TemplateElement {\\n    const { start, startLoc, end, value } = this.state;\\n    const elemStart = start + 1;\\n    const elem = this.startNodeAt<N.TemplateElement>(\\n      createPositionWithColumnOffset(startLoc, 1),\\n    );\\n    if (value === null) {\\n      if (!isTagged) {\\n        this.raise(Errors.InvalidEscapeSequenceTemplate, {\\n          // FIXME: Adding 1 is probably wrong.\\n          at: createPositionWithColumnOffset(\\n            this.state.firstInvalidTemplateEscapePos,\\n            1,\\n          ),\\n        });\\n      }\\n    }\\n\\n    const isTail = this.match(tt.templateTail);\\n    const endOffset = isTail ? -1 : -2;\\n    const elemEnd = end + endOffset;\\n    elem.value = {\\n      raw: this.input.slice(elemStart, elemEnd).replace(/\\\\r\\\\n?/g, \\\"\\\\n\\\"),\\n      cooked: value === null ? null : value.slice(1, endOffset),\\n    };\\n    elem.tail = isTail;\\n    this.next();\\n    const finishedNode = this.finishNode(elem, \\\"TemplateElement\\\");\\n    this.resetEndLocation(\\n      finishedNode,\\n      createPositionWithColumnOffset(this.state.lastTokEndLoc, endOffset),\\n    );\\n    return finishedNode;\\n  }\\n\\n  // https://tc39.es/ecma262/#prod-TemplateLiteral\\n  parseTemplate(this: Parser, isTagged: boolean): N.TemplateLiteral {\\n    const node = this.startNode<N.TemplateLiteral>();\\n    node.expressions = [];\\n    let curElt = this.parseTemplateElement(isTagged);\\n    node.quasis = [curElt];\\n    while (!curElt.tail) {\\n      node.expressions.push(this.parseTemplateSubstitution());\\n      this.readTemplateContinuation();\\n      node.quasis.push((curElt = this.parseTemplateElement(isTagged)));\\n    }\\n    return this.finishNode(node, \\\"TemplateLiteral\\\");\\n  }\\n\\n  // This is overwritten by the TypeScript plugin to parse template types\\n  parseTemplateSubstitution(this: Parser): N.Expression {\\n    return this.parseExpression();\\n  }\\n\\n  // Parse an object literal, binding pattern, or record.\\n\\n  parseObjectLike(\\n    close: TokenType,\\n    isPattern: true,\\n    isRecord?: boolean | null,\\n    refExpressionErrors?: ExpressionErrors | null,\\n  ): N.ObjectPattern;\\n  parseObjectLike(\\n    close: TokenType,\\n    isPattern: false,\\n    isRecord?: false | null,\\n    refExpressionErrors?: ExpressionErrors | null,\\n  ): N.ObjectExpression;\\n  parseObjectLike(\\n    close: TokenType,\\n    isPattern: false,\\n    isRecord?: true,\\n    refExpressionErrors?: ExpressionErrors | null,\\n  ): N.RecordExpression;\\n  parseObjectLike<T extends N.ObjectPattern | N.ObjectExpression>(\\n    this: Parser,\\n    close: TokenType,\\n    isPattern: boolean,\\n    isRecord?: boolean | null,\\n    refExpressionErrors?: ExpressionErrors | null,\\n  ): T {\\n    if (isRecord) {\\n      this.expectPlugin(\\\"recordAndTuple\\\");\\n    }\\n    const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;\\n    this.state.inFSharpPipelineDirectBody = false;\\n    const propHash: any = Object.create(null);\\n    let first = true;\\n    const node = this.startNode<\\n      N.ObjectExpression | N.ObjectPattern | N.RecordExpression\\n    >();\\n\\n    node.properties = [];\\n    this.next();\\n\\n    while (!this.match(close)) {\\n      if (first) {\\n        first = false;\\n      } else {\\n        this.expect(tt.comma);\\n        if (this.match(close)) {\\n          this.addTrailingCommaExtraToNode(\\n            // @ts-expect-error todo(flow->ts) improve node types\\n            node,\\n          );\\n          break;\\n        }\\n      }\\n\\n      let prop;\\n      if (isPattern) {\\n        prop = this.parseBindingProperty();\\n      } else {\\n        prop = this.parsePropertyDefinition(refExpressionErrors);\\n        this.checkProto(prop, isRecord, propHash, refExpressionErrors);\\n      }\\n\\n      if (\\n        isRecord &&\\n        !this.isObjectProperty(prop) &&\\n        prop.type !== \\\"SpreadElement\\\"\\n      ) {\\n        this.raise(Errors.InvalidRecordProperty, { at: prop });\\n      }\\n\\n      // @ts-expect-error shorthand may not index prop\\n      if (prop.shorthand) {\\n        this.addExtra(prop, \\\"shorthand\\\", true);\\n      }\\n\\n      // @ts-expect-error Fixme: refine typings\\n      node.properties.push(prop);\\n    }\\n\\n    this.next();\\n\\n    this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;\\n    let type = \\\"ObjectExpression\\\";\\n    if (isPattern) {\\n      type = \\\"ObjectPattern\\\";\\n    } else if (isRecord) {\\n      type = \\\"RecordExpression\\\";\\n    }\\n    // @ts-expect-error type is well defined\\n    return this.finishNode(node, type);\\n  }\\n\\n  addTrailingCommaExtraToNode(node: N.Node): void {\\n    this.addExtra(node, \\\"trailingComma\\\", this.state.lastTokStart);\\n    this.addExtra(node, \\\"trailingCommaLoc\\\", this.state.lastTokStartLoc, false);\\n  }\\n\\n  // Check grammar production:\\n  //   IdentifierName *_opt PropertyName\\n  // It is used in `parsePropertyDefinition` to detect AsyncMethod and Accessors\\n  maybeAsyncOrAccessorProp(prop: Undone<N.ObjectProperty>): boolean {\\n    return (\\n      !prop.computed &&\\n      prop.key.type === \\\"Identifier\\\" &&\\n      (this.isLiteralPropertyName() ||\\n        this.match(tt.bracketL) ||\\n        this.match(tt.star))\\n    );\\n  }\\n\\n  // https://tc39.es/ecma262/#prod-PropertyDefinition\\n  parsePropertyDefinition(\\n    this: Parser,\\n    refExpressionErrors?: ExpressionErrors | null,\\n  ): N.ObjectMember | N.SpreadElement {\\n    let decorators = [];\\n    if (this.match(tt.at)) {\\n      if (this.hasPlugin(\\\"decorators\\\")) {\\n        this.raise(Errors.UnsupportedPropertyDecorator, {\\n          at: this.state.startLoc,\\n        });\\n      }\\n\\n      // we needn't check if decorators (stage 0) plugin is enabled since it's checked by\\n      // the call to this.parseDecorator\\n      while (this.match(tt.at)) {\\n        decorators.push(this.parseDecorator());\\n      }\\n    }\\n\\n    const prop = this.startNode<N.ObjectProperty>();\\n    let isAsync = false;\\n    let isAccessor = false;\\n    let startLoc;\\n\\n    if (this.match(tt.ellipsis)) {\\n      if (decorators.length) this.unexpected();\\n      return this.parseSpread();\\n    }\\n\\n    if (decorators.length) {\\n      prop.decorators = decorators;\\n      decorators = [];\\n    }\\n\\n    prop.method = false;\\n\\n    if (refExpressionErrors) {\\n      startLoc = this.state.startLoc;\\n    }\\n\\n    let isGenerator = this.eat(tt.star);\\n    this.parsePropertyNamePrefixOperator(prop);\\n    const containsEsc = this.state.containsEsc;\\n    const key = this.parsePropertyName(prop, refExpressionErrors);\\n\\n    if (!isGenerator && !containsEsc && this.maybeAsyncOrAccessorProp(prop)) {\\n      const keyName = key.name;\\n      // https://tc39.es/ecma262/#prod-AsyncMethod\\n      // https://tc39.es/ecma262/#prod-AsyncGeneratorMethod\\n      if (keyName === \\\"async\\\" && !this.hasPrecedingLineBreak()) {\\n        isAsync = true;\\n        this.resetPreviousNodeTrailingComments(key);\\n        isGenerator = this.eat(tt.star);\\n        this.parsePropertyName(prop);\\n      }\\n      // get PropertyName[?Yield, ?Await] () { FunctionBody[~Yield, ~Await] }\\n      // set PropertyName[?Yield, ?Await] ( PropertySetParameterList ) { FunctionBody[~Yield, ~Await] }\\n      if (keyName === \\\"get\\\" || keyName === \\\"set\\\") {\\n        isAccessor = true;\\n        this.resetPreviousNodeTrailingComments(key);\\n        prop.kind = keyName;\\n        if (this.match(tt.star)) {\\n          isGenerator = true;\\n          this.raise(Errors.AccessorIsGenerator, {\\n            at: this.state.curPosition(),\\n            kind: keyName,\\n          });\\n          this.next();\\n        }\\n        this.parsePropertyName(prop);\\n      }\\n    }\\n\\n    return this.parseObjPropValue(\\n      prop,\\n      startLoc,\\n      isGenerator,\\n      isAsync,\\n      false /* isPattern */,\\n      isAccessor,\\n      refExpressionErrors,\\n    );\\n  }\\n\\n  getGetterSetterExpectedParamCount(\\n    method: N.ObjectMethod | N.ClassMethod,\\n  ): number {\\n    return method.kind === \\\"get\\\" ? 0 : 1;\\n  }\\n\\n  // This exists so we can override within the ESTree plugin\\n  getObjectOrClassMethodParams(method: N.ObjectMethod | N.ClassMethod) {\\n    return method.params;\\n  }\\n\\n  // get methods aren't allowed to have any parameters\\n  // set methods must have exactly 1 parameter which is not a rest parameter\\n  checkGetterSetterParams(method: N.ObjectMethod | N.ClassMethod): void {\\n    const paramCount = this.getGetterSetterExpectedParamCount(method);\\n    const params = this.getObjectOrClassMethodParams(method);\\n\\n    if (params.length !== paramCount) {\\n      this.raise(\\n        method.kind === \\\"get\\\" ? Errors.BadGetterArity : Errors.BadSetterArity,\\n        { at: method },\\n      );\\n    }\\n\\n    if (\\n      method.kind === \\\"set\\\" &&\\n      params[params.length - 1]?.type === \\\"RestElement\\\"\\n    ) {\\n      this.raise(Errors.BadSetterRestParameter, { at: method });\\n    }\\n  }\\n\\n  // https://tc39.es/ecma262/#prod-MethodDefinition\\n  parseObjectMethod(\\n    this: Parser,\\n    prop: Undone<N.ObjectMethod>,\\n    isGenerator: boolean,\\n    isAsync: boolean,\\n    isPattern: boolean,\\n    isAccessor: boolean,\\n  ): N.ObjectMethod | undefined | null {\\n    if (isAccessor) {\\n      // isAccessor implies isAsync: false, isPattern: false, isGenerator: false\\n      const finishedProp = this.parseMethod(\\n        prop,\\n        // This _should_ be false, but with error recovery, we allow it to be\\n        // set for informational purposes\\n        isGenerator,\\n        /* isAsync */ false,\\n        /* isConstructor */ false,\\n        false,\\n        \\\"ObjectMethod\\\",\\n      );\\n      this.checkGetterSetterParams(finishedProp);\\n      return finishedProp;\\n    }\\n\\n    if (isAsync || isGenerator || this.match(tt.parenL)) {\\n      if (isPattern) this.unexpected();\\n      prop.kind = \\\"method\\\";\\n      prop.method = true;\\n      return this.parseMethod(\\n        prop,\\n        isGenerator,\\n        isAsync,\\n        /* isConstructor */ false,\\n        false,\\n        \\\"ObjectMethod\\\",\\n      );\\n    }\\n  }\\n\\n  // if `isPattern` is true, parse https://tc39.es/ecma262/#prod-BindingProperty\\n  // else https://tc39.es/ecma262/#prod-PropertyDefinition\\n  parseObjectProperty(\\n    this: Parser,\\n    prop: Undone<N.ObjectProperty>,\\n    startLoc: Position | undefined | null,\\n    isPattern: boolean,\\n    refExpressionErrors?: ExpressionErrors | null,\\n  ): N.ObjectProperty | undefined | null {\\n    prop.shorthand = false;\\n\\n    if (this.eat(tt.colon)) {\\n      prop.value = isPattern\\n        ? this.parseMaybeDefault(this.state.startLoc)\\n        : this.parseMaybeAssignAllowIn(refExpressionErrors);\\n\\n      return this.finishNode(prop, \\\"ObjectProperty\\\");\\n    }\\n\\n    if (!prop.computed && prop.key.type === \\\"Identifier\\\") {\\n      // PropertyDefinition:\\n      //   IdentifierReference\\n      //   CoverInitializedName\\n      // Note: `{ eval } = {}` will be checked in `checkLVal` later.\\n      this.checkReservedWord(prop.key.name, prop.key.loc.start, true, false);\\n\\n      if (isPattern) {\\n        prop.value = this.parseMaybeDefault(\\n          startLoc,\\n          cloneIdentifier(prop.key),\\n        );\\n      } else if (this.match(tt.eq)) {\\n        const shorthandAssignLoc = this.state.startLoc;\\n        if (refExpressionErrors != null) {\\n          if (refExpressionErrors.shorthandAssignLoc === null) {\\n            refExpressionErrors.shorthandAssignLoc = shorthandAssignLoc;\\n          }\\n        } else {\\n          this.raise(Errors.InvalidCoverInitializedName, {\\n            at: shorthandAssignLoc,\\n          });\\n        }\\n        prop.value = this.parseMaybeDefault(\\n          startLoc,\\n          cloneIdentifier(prop.key),\\n        );\\n      } else {\\n        prop.value = cloneIdentifier(prop.key);\\n      }\\n      prop.shorthand = true;\\n\\n      return this.finishNode(prop, \\\"ObjectProperty\\\");\\n    }\\n  }\\n\\n  parseObjPropValue(\\n    this: Parser,\\n    prop: Undone<N.ObjectMethod | N.ObjectProperty>,\\n    startLoc: Position | undefined | null,\\n    isGenerator: boolean,\\n    isAsync: boolean,\\n    isPattern: boolean,\\n    isAccessor: boolean,\\n    refExpressionErrors?: ExpressionErrors | null,\\n  ): N.ObjectMethod | N.ObjectProperty {\\n    const node =\\n      this.parseObjectMethod(\\n        prop as Undone<N.ObjectMethod>,\\n        isGenerator,\\n        isAsync,\\n        isPattern,\\n        isAccessor,\\n      ) ||\\n      this.parseObjectProperty(\\n        prop as Undone<N.ObjectProperty>,\\n        startLoc,\\n        isPattern,\\n        refExpressionErrors,\\n      );\\n\\n    if (!node) this.unexpected();\\n\\n    return node;\\n  }\\n\\n  // https://tc39.es/ecma262/#prod-PropertyName\\n  // when refExpressionErrors presents, it will parse private name\\n  // and record the position of the first private name\\n  parsePropertyName(\\n    this: Parser,\\n    prop:\\n      | Undone<N.ObjectOrClassMember | N.ClassMember>\\n      | N.TsNamedTypeElementBase,\\n    refExpressionErrors?: ExpressionErrors | null,\\n  ): N.Expression | N.Identifier {\\n    if (this.eat(tt.bracketL)) {\\n      (prop as Undone<N.ObjectOrClassMember>).computed = true;\\n      prop.key = this.parseMaybeAssignAllowIn();\\n      this.expect(tt.bracketR);\\n    } else {\\n      // We check if it's valid for it to be a private name when we push it.\\n      const { type, value } = this.state;\\n      let key;\\n      // most un-computed property names are identifiers\\n      if (tokenIsKeywordOrIdentifier(type)) {\\n        key = this.parseIdentifier(true);\\n      } else {\\n        switch (type) {\\n          case tt.num:\\n            key = this.parseNumericLiteral(value);\\n            break;\\n          case tt.string:\\n            key = this.parseStringLiteral(value);\\n            break;\\n          case tt.bigint:\\n            key = this.parseBigIntLiteral(value);\\n            break;\\n          case tt.decimal:\\n            key = this.parseDecimalLiteral(value);\\n            break;\\n          case tt.privateName: {\\n            // the class private key has been handled in parseClassElementName\\n            const privateKeyLoc = this.state.startLoc;\\n            if (refExpressionErrors != null) {\\n              if (refExpressionErrors.privateKeyLoc === null) {\\n                refExpressionErrors.privateKeyLoc = privateKeyLoc;\\n              }\\n            } else {\\n              this.raise(Errors.UnexpectedPrivateField, {\\n                at: privateKeyLoc,\\n              });\\n            }\\n            key = this.parsePrivateName();\\n            break;\\n          }\\n          default:\\n            this.unexpected();\\n        }\\n      }\\n      (prop as any).key = key;\\n      if (type !== tt.privateName) {\\n        // ClassPrivateProperty is never computed, so we don't assign in that case.\\n        prop.computed = false;\\n      }\\n    }\\n\\n    return prop.key;\\n  }\\n\\n  // Initialize empty function node.\\n\\n  initFunction(node: N.BodilessFunctionOrMethodBase, isAsync: boolean): void {\\n    node.id = null;\\n    node.generator = false;\\n    node.async = isAsync;\\n  }\\n\\n  // Parse object or class method.\\n\\n  parseMethod<T extends N.ObjectMethod | N.ClassMethod | N.ClassPrivateMethod>(\\n    this: Parser,\\n    node: Undone<T>,\\n    isGenerator: boolean,\\n    isAsync: boolean,\\n    isConstructor: boolean,\\n    allowDirectSuper: boolean,\\n    type: T[\\\"type\\\"],\\n    inClassScope: boolean = false,\\n  ): T {\\n    this.initFunction(node, isAsync);\\n    node.generator = isGenerator;\\n    this.scope.enter(\\n      SCOPE_FUNCTION |\\n        SCOPE_SUPER |\\n        (inClassScope ? SCOPE_CLASS : 0) |\\n        (allowDirectSuper ? SCOPE_DIRECT_SUPER : 0),\\n    );\\n    this.prodParam.enter(functionFlags(isAsync, node.generator));\\n    this.parseFunctionParams(node, isConstructor);\\n    const finishedNode = this.parseFunctionBodyAndFinish(node, type, true);\\n    this.prodParam.exit();\\n    this.scope.exit();\\n\\n    return finishedNode;\\n  }\\n\\n  // parse an array literal or tuple literal\\n  // https://tc39.es/ecma262/#prod-ArrayLiteral\\n  // https://tc39.es/proposal-record-tuple/#prod-TupleLiteral\\n  parseArrayLike(\\n    this: Parser,\\n    close: TokenType,\\n    canBePattern: boolean,\\n    isTuple: boolean,\\n    refExpressionErrors?: ExpressionErrors | null,\\n  ): N.ArrayExpression | N.TupleExpression {\\n    if (isTuple) {\\n      this.expectPlugin(\\\"recordAndTuple\\\");\\n    }\\n    const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;\\n    this.state.inFSharpPipelineDirectBody = false;\\n    const node = this.startNode<N.ArrayExpression | N.TupleExpression>();\\n    this.next();\\n    node.elements = this.parseExprList(\\n      close,\\n      /* allowEmpty */ !isTuple,\\n      refExpressionErrors,\\n      // @ts-expect-error todo(flow->ts)\\n      node,\\n    );\\n    this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;\\n    return this.finishNode(\\n      node,\\n      isTuple ? \\\"TupleExpression\\\" : \\\"ArrayExpression\\\",\\n    );\\n  }\\n\\n  // Parse arrow function expression.\\n  // If the parameters are provided, they will be converted to an\\n  // assignable list.\\n  parseArrowExpression(\\n    this: Parser,\\n    node: Undone<N.ArrowFunctionExpression>,\\n    params: N.Expression[] | undefined | null,\\n    isAsync: boolean,\\n    trailingCommaLoc?: Position | null,\\n  ): N.ArrowFunctionExpression {\\n    this.scope.enter(SCOPE_FUNCTION | SCOPE_ARROW);\\n    let flags = functionFlags(isAsync, false);\\n    // ConciseBody[In] :\\n    //   [lookahead ≠ {] ExpressionBody[?In, ~Await]\\n    //   { FunctionBody[~Yield, ~Await] }\\n    if (!this.match(tt.braceL) && this.prodParam.hasIn) {\\n      flags |= PARAM_IN;\\n    }\\n    this.prodParam.enter(flags);\\n    this.initFunction(node, isAsync);\\n    const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;\\n\\n    if (params) {\\n      this.state.maybeInArrowParameters = true;\\n      this.setArrowFunctionParameters(node, params, trailingCommaLoc);\\n    }\\n    this.state.maybeInArrowParameters = false;\\n    this.parseFunctionBody(node, true);\\n\\n    this.prodParam.exit();\\n    this.scope.exit();\\n    this.state.maybeInArrowParameters = oldMaybeInArrowParameters;\\n\\n    return this.finishNode(node, \\\"ArrowFunctionExpression\\\");\\n  }\\n\\n  setArrowFunctionParameters(\\n    node: Undone<N.ArrowFunctionExpression>,\\n    params: N.Expression[],\\n    trailingCommaLoc?: Position | null,\\n  ): void {\\n    this.toAssignableList(params, trailingCommaLoc, false);\\n    node.params = params as (N.Pattern | N.TSParameterProperty)[];\\n  }\\n\\n  parseFunctionBodyAndFinish<\\n    T extends\\n      | N.Function\\n      | N.TSDeclareMethod\\n      | N.TSDeclareFunction\\n      | N.ClassPrivateMethod,\\n  >(node: Undone<T>, type: T[\\\"type\\\"], isMethod: boolean = false): T {\\n    // @ts-expect-error (node is not bodiless if we get here)\\n    this.parseFunctionBody(node, false, isMethod);\\n    return this.finishNode(node, type);\\n  }\\n\\n  // Parse function body and check parameters.\\n  parseFunctionBody(\\n    this: Parser,\\n    node: Undone<N.Function>,\\n    allowExpression?: boolean | null,\\n    isMethod: boolean = false,\\n  ): void {\\n    const isExpression = allowExpression && !this.match(tt.braceL);\\n    this.expressionScope.enter(newExpressionScope());\\n\\n    if (isExpression) {\\n      // https://tc39.es/ecma262/#prod-ExpressionBody\\n      (node as Undone<N.ArrowFunctionExpression>).body =\\n        this.parseMaybeAssign();\\n      this.checkParams(node, false, allowExpression, false);\\n    } else {\\n      const oldStrict = this.state.strict;\\n      // Start a new scope with regard to labels\\n      // flag (restore them to their old value afterwards).\\n      const oldLabels = this.state.labels;\\n      this.state.labels = [];\\n\\n      // FunctionBody[Yield, Await]:\\n      //   StatementList[?Yield, ?Await, +Return] opt\\n      this.prodParam.enter(this.prodParam.currentFlags() | PARAM_RETURN);\\n      node.body = this.parseBlock(\\n        true,\\n        false,\\n        // Strict mode function checks after we parse the statements in the function body.\\n        (hasStrictModeDirective: boolean) => {\\n          const nonSimple = !this.isSimpleParamList(node.params);\\n\\n          if (hasStrictModeDirective && nonSimple) {\\n            // This logic is here to align the error location with the ESTree plugin.\\n            this.raise(Errors.IllegalLanguageModeDirective, {\\n              at:\\n                // @ts-expect-error kind may not index node\\n                (node.kind === \\\"method\\\" || node.kind === \\\"constructor\\\") &&\\n                // @ts-expect-error key may not index node\\n                !!node.key\\n                  ? // @ts-expect-error node.key has been guarded\\n                    node.key.loc.end\\n                  : node,\\n            });\\n          }\\n\\n          const strictModeChanged = !oldStrict && this.state.strict;\\n\\n          // Add the params to varDeclaredNames to ensure that an error is thrown\\n          // if a let/const declaration in the function clashes with one of the params.\\n          this.checkParams(\\n            node,\\n            !this.state.strict && !allowExpression && !isMethod && !nonSimple,\\n            allowExpression,\\n            strictModeChanged,\\n          );\\n\\n          // Ensure the function name isn't a forbidden identifier in strict mode, e.g. 'eval'\\n          if (this.state.strict && node.id) {\\n            this.checkIdentifier(node.id, BIND_OUTSIDE, strictModeChanged);\\n          }\\n        },\\n      );\\n      this.prodParam.exit();\\n      this.state.labels = oldLabels;\\n    }\\n    this.expressionScope.exit();\\n  }\\n\\n  isSimpleParameter(node: N.Pattern | N.TSParameterProperty) {\\n    return node.type === \\\"Identifier\\\";\\n  }\\n\\n  isSimpleParamList(\\n    params: ReadonlyArray<N.Pattern | N.TSParameterProperty>,\\n  ): boolean {\\n    for (let i = 0, len = params.length; i < len; i++) {\\n      if (!this.isSimpleParameter(params[i])) return false;\\n    }\\n    return true;\\n  }\\n\\n  checkParams(\\n    node: Undone<N.Function>,\\n    allowDuplicates: boolean,\\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\\n    isArrowFunction?: boolean | null,\\n    strictModeChanged: boolean = true,\\n  ): void {\\n    const checkClashes = !allowDuplicates && new Set<string>();\\n    // We create a fake node with the \\\"ephemeral\\\" type `FormalParameters`[1]\\n    // since we just store an array of parameters. Perhaps someday we can have\\n    // something like class FormalParameters extends Array { ... }, which would\\n    // also be helpful when traversing this node.\\n    //\\n    // 1. https://tc39.es/ecma262/#prod-FormalParameters\\n    const formalParameters = { type: \\\"FormalParameters\\\" } as const;\\n    for (const param of node.params) {\\n      this.checkLVal(param, {\\n        in: formalParameters,\\n        binding: BIND_VAR,\\n        checkClashes,\\n        strictModeChanged,\\n      });\\n    }\\n  }\\n\\n  // Parses a comma-separated list of expressions, and returns them as\\n  // an array. `close` is the token type that ends the list, and\\n  // `allowEmpty` can be turned on to allow subsequent commas with\\n  // nothing in between them to be parsed as `null` (which is needed\\n  // for array literals).\\n\\n  parseExprList(\\n    this: Parser,\\n    close: TokenType,\\n    allowEmpty?: boolean,\\n    refExpressionErrors?: ExpressionErrors | null,\\n    nodeForExtra?: N.Node | null,\\n  ): (N.Expression | null)[] {\\n    const elts: (N.Expression | null)[] = [];\\n    let first = true;\\n\\n    while (!this.eat(close)) {\\n      if (first) {\\n        first = false;\\n      } else {\\n        this.expect(tt.comma);\\n        if (this.match(close)) {\\n          if (nodeForExtra) {\\n            this.addTrailingCommaExtraToNode(nodeForExtra);\\n          }\\n          this.next();\\n          break;\\n        }\\n      }\\n\\n      elts.push(this.parseExprListItem(allowEmpty, refExpressionErrors));\\n    }\\n    return elts;\\n  }\\n\\n  parseExprListItem(\\n    this: Parser,\\n    allowEmpty?: boolean,\\n    refExpressionErrors?: ExpressionErrors | null,\\n    allowPlaceholder?: boolean | null,\\n  ): N.Expression | null;\\n  parseExprListItem(\\n    this: Parser,\\n    allowEmpty?: false,\\n    refExpressionErrors?: ExpressionErrors | null,\\n    allowPlaceholder?: boolean | null,\\n  ): N.Expression;\\n  parseExprListItem(\\n    this: Parser,\\n    allowEmpty?: boolean | null,\\n    refExpressionErrors?: ExpressionErrors | null,\\n    allowPlaceholder?: boolean | null,\\n  ): N.Expression | null {\\n    let elt;\\n    if (this.match(tt.comma)) {\\n      if (!allowEmpty) {\\n        this.raise(Errors.UnexpectedToken, {\\n          at: this.state.curPosition(),\\n          unexpected: \\\",\\\",\\n        });\\n      }\\n      elt = null;\\n    } else if (this.match(tt.ellipsis)) {\\n      const spreadNodeStartLoc = this.state.startLoc;\\n\\n      elt = this.parseParenItem(\\n        this.parseSpread(refExpressionErrors),\\n        spreadNodeStartLoc,\\n      );\\n    } else if (this.match(tt.question)) {\\n      this.expectPlugin(\\\"partialApplication\\\");\\n      if (!allowPlaceholder) {\\n        this.raise(Errors.UnexpectedArgumentPlaceholder, {\\n          at: this.state.startLoc,\\n        });\\n      }\\n      const node = this.startNode();\\n      this.next();\\n      elt = this.finishNode(node, \\\"ArgumentPlaceholder\\\");\\n    } else {\\n      elt = this.parseMaybeAssignAllowIn(\\n        refExpressionErrors,\\n        this.parseParenItem,\\n      );\\n    }\\n    return elt;\\n  }\\n\\n  // Parse the next token as an identifier. If `liberal` is true (used\\n  // when parsing properties), it will also convert keywords into\\n  // identifiers.\\n  // This shouldn't be used to parse the keywords of meta properties, since they\\n  // are not identifiers and cannot contain escape sequences.\\n\\n  parseIdentifier(liberal?: boolean): N.Identifier {\\n    const node = this.startNode<N.Identifier>();\\n    const name = this.parseIdentifierName(liberal);\\n\\n    return this.createIdentifier(node, name);\\n  }\\n\\n  createIdentifier(\\n    node: Omit<N.Identifier, \\\"type\\\">,\\n    name: string,\\n  ): N.Identifier {\\n    node.name = name;\\n    node.loc.identifierName = name;\\n\\n    return this.finishNode(node, \\\"Identifier\\\");\\n  }\\n\\n  parseIdentifierName(liberal?: boolean): string {\\n    let name: string;\\n\\n    const { startLoc, type } = this.state;\\n\\n    if (tokenIsKeywordOrIdentifier(type)) {\\n      name = this.state.value;\\n    } else {\\n      this.unexpected();\\n    }\\n\\n    const tokenIsKeyword = tokenKeywordOrIdentifierIsKeyword(type);\\n\\n    if (liberal) {\\n      // If the current token is not used as a keyword, set its type to \\\"tt.name\\\".\\n      // This will prevent this.next() from throwing about unexpected escapes.\\n      if (tokenIsKeyword) {\\n        this.replaceToken(tt.name);\\n      }\\n    } else {\\n      this.checkReservedWord(name, startLoc, tokenIsKeyword, false);\\n    }\\n\\n    this.next();\\n\\n    return name;\\n  }\\n\\n  checkReservedWord(\\n    word: string,\\n    startLoc: Position,\\n    checkKeywords: boolean,\\n    isBinding: boolean,\\n  ): void {\\n    // Every JavaScript reserved word is 10 characters or less.\\n    if (word.length > 10) {\\n      return;\\n    }\\n    // Most identifiers are not reservedWord-like, they don't need special\\n    // treatments afterward, which very likely ends up throwing errors\\n    if (!canBeReservedWord(word)) {\\n      return;\\n    }\\n\\n    if (checkKeywords && isKeyword(word)) {\\n      this.raise(Errors.UnexpectedKeyword, {\\n        at: startLoc,\\n        keyword: word,\\n      });\\n      return;\\n    }\\n\\n    const reservedTest = !this.state.strict\\n      ? isReservedWord\\n      : isBinding\\n      ? isStrictBindReservedWord\\n      : isStrictReservedWord;\\n\\n    if (reservedTest(word, this.inModule)) {\\n      this.raise(Errors.UnexpectedReservedWord, {\\n        at: startLoc,\\n        reservedWord: word,\\n      });\\n      return;\\n    } else if (word === \\\"yield\\\") {\\n      if (this.prodParam.hasYield) {\\n        this.raise(Errors.YieldBindingIdentifier, { at: startLoc });\\n        return;\\n      }\\n    } else if (word === \\\"await\\\") {\\n      if (this.prodParam.hasAwait) {\\n        this.raise(Errors.AwaitBindingIdentifier, { at: startLoc });\\n        return;\\n      }\\n\\n      if (this.scope.inStaticBlock) {\\n        this.raise(Errors.AwaitBindingIdentifierInStaticBlock, {\\n          at: startLoc,\\n        });\\n        return;\\n      }\\n\\n      this.expressionScope.recordAsyncArrowParametersError({ at: startLoc });\\n    } else if (word === \\\"arguments\\\") {\\n      if (this.scope.inClassAndNotInNonArrowFunction) {\\n        this.raise(Errors.ArgumentsInClass, { at: startLoc });\\n        return;\\n      }\\n    }\\n  }\\n\\n  isAwaitAllowed(): boolean {\\n    if (this.prodParam.hasAwait) return true;\\n    if (this.options.allowAwaitOutsideFunction && !this.scope.inFunction) {\\n      return true;\\n    }\\n    return false;\\n  }\\n\\n  // Parses await expression inside async function.\\n\\n  parseAwait(this: Parser, startLoc: Position): N.AwaitExpression {\\n    const node = this.startNodeAt<N.AwaitExpression>(startLoc);\\n\\n    this.expressionScope.recordParameterInitializerError(\\n      Errors.AwaitExpressionFormalParameter,\\n      {\\n        // @ts-expect-error todo(flow->ts)\\n        at: node,\\n      },\\n    );\\n\\n    if (this.eat(tt.star)) {\\n      this.raise(Errors.ObsoleteAwaitStar, { at: node });\\n    }\\n\\n    if (!this.scope.inFunction && !this.options.allowAwaitOutsideFunction) {\\n      if (this.isAmbiguousAwait()) {\\n        this.ambiguousScriptDifferentAst = true;\\n      } else {\\n        this.sawUnambiguousESM = true;\\n      }\\n    }\\n\\n    if (!this.state.soloAwait) {\\n      node.argument = this.parseMaybeUnary(null, true);\\n    }\\n\\n    return this.finishNode(node, \\\"AwaitExpression\\\");\\n  }\\n\\n  isAmbiguousAwait(): boolean {\\n    if (this.hasPrecedingLineBreak()) return true;\\n    const { type } = this.state;\\n    return (\\n      // All the following expressions are ambiguous:\\n      //   await + 0, await - 0, await ( 0 ), await [ 0 ], await / 0 /u, await ``, await of []\\n      type === tt.plusMin ||\\n      type === tt.parenL ||\\n      type === tt.bracketL ||\\n      tokenIsTemplate(type) ||\\n      (type === tt._of && !this.state.containsEsc) ||\\n      // Sometimes the tokenizer generates tt.slash for regexps, and this is\\n      // handler by parseExprAtom\\n      type === tt.regexp ||\\n      type === tt.slash ||\\n      // This code could be parsed both as a modulo operator or as an intrinsic:\\n      //   await %x(0)\\n      (this.hasPlugin(\\\"v8intrinsic\\\") && type === tt.modulo)\\n    );\\n  }\\n\\n  // Parses yield expression inside generator.\\n\\n  parseYield(this: Parser): N.YieldExpression {\\n    const node = this.startNode<N.YieldExpression>();\\n\\n    this.expressionScope.recordParameterInitializerError(\\n      Errors.YieldInParameter,\\n      {\\n        // @ts-expect-error todo(flow->ts)\\n        at: node,\\n      },\\n    );\\n\\n    this.next();\\n    let delegating = false;\\n    let argument: N.Expression | null = null;\\n    if (!this.hasPrecedingLineBreak()) {\\n      delegating = this.eat(tt.star);\\n      switch (this.state.type) {\\n        case tt.semi:\\n        case tt.eof:\\n        case tt.braceR:\\n        case tt.parenR:\\n        case tt.bracketR:\\n        case tt.braceBarR:\\n        case tt.colon:\\n        case tt.comma:\\n          // The above is the complete set of tokens that can\\n          // follow an AssignmentExpression, and none of them\\n          // can start an AssignmentExpression\\n          if (!delegating) break;\\n        /* fallthrough */\\n        default:\\n          argument = this.parseMaybeAssign();\\n      }\\n    }\\n    node.delegate = delegating;\\n    node.argument = argument;\\n    return this.finishNode(node, \\\"YieldExpression\\\");\\n  }\\n\\n  // Validates a pipeline (for any of the pipeline Babylon plugins) at the point\\n  // of the infix operator `|>`.\\n\\n  checkPipelineAtInfixOperator(left: N.Expression, leftStartLoc: Position) {\\n    if (this.hasPlugin([\\\"pipelineOperator\\\", { proposal: \\\"smart\\\" }])) {\\n      if (left.type === \\\"SequenceExpression\\\") {\\n        // Ensure that the pipeline head is not a comma-delimited\\n        // sequence expression.\\n        this.raise(Errors.PipelineHeadSequenceExpression, {\\n          at: leftStartLoc,\\n        });\\n      }\\n    }\\n  }\\n\\n  parseSmartPipelineBodyInStyle(childExpr: N.Expression, startLoc: Position) {\\n    if (this.isSimpleReference(childExpr)) {\\n      const bodyNode = this.startNodeAt<N.PipelineBareFunction>(startLoc);\\n      bodyNode.callee = childExpr;\\n      return this.finishNode(bodyNode, \\\"PipelineBareFunction\\\");\\n    } else {\\n      const bodyNode = this.startNodeAt<N.PipelineTopicExpression>(startLoc);\\n      this.checkSmartPipeTopicBodyEarlyErrors(startLoc);\\n      bodyNode.expression = childExpr;\\n      return this.finishNode(bodyNode, \\\"PipelineTopicExpression\\\");\\n    }\\n  }\\n\\n  isSimpleReference(expression: N.Expression): boolean {\\n    switch (expression.type) {\\n      case \\\"MemberExpression\\\":\\n        return (\\n          !expression.computed && this.isSimpleReference(expression.object)\\n        );\\n      case \\\"Identifier\\\":\\n        return true;\\n      default:\\n        return false;\\n    }\\n  }\\n\\n  // This helper method is to be called immediately\\n  // after a topic-style smart-mix pipe body is parsed.\\n  // The `startLoc` is the starting position of the pipe body.\\n\\n  checkSmartPipeTopicBodyEarlyErrors(startLoc: Position): void {\\n    // If the following token is invalidly `=>`, then throw a human-friendly error\\n    // instead of something like 'Unexpected token, expected \\\";\\\"'.\\n    // For example, `x => x |> y => #` (assuming `#` is the topic reference)\\n    // groups into `x => (x |> y) => #`,\\n    // and `(x |> y) => #` is an invalid arrow function.\\n    // This is because smart-mix `|>` has tighter precedence than `=>`.\\n    if (this.match(tt.arrow)) {\\n      throw this.raise(Errors.PipelineBodyNoArrow, { at: this.state.startLoc });\\n    }\\n\\n    // A topic-style smart-mix pipe body must use the topic reference at least once.\\n    if (!this.topicReferenceWasUsedInCurrentContext()) {\\n      this.raise(Errors.PipelineTopicUnused, { at: startLoc });\\n    }\\n  }\\n\\n  // Enable topic references from outer contexts within Hack-style pipe bodies.\\n  // The function modifies the parser's topic-context state to enable or disable\\n  // the use of topic references.\\n  // The function then calls a callback, then resets the parser\\n  // to the old topic-context state that it had before the function was called.\\n\\n  withTopicBindingContext<T>(callback: () => T): T {\\n    const outerContextTopicState = this.state.topicContext;\\n    this.state.topicContext = {\\n      // Enable the use of the primary topic reference.\\n      maxNumOfResolvableTopics: 1,\\n      // Hide the use of any topic references from outer contexts.\\n      maxTopicIndex: null,\\n    };\\n\\n    try {\\n      return callback();\\n    } finally {\\n      this.state.topicContext = outerContextTopicState;\\n    }\\n  }\\n\\n  // This helper method is used only with the deprecated smart-mix pipe proposal.\\n  // Disables topic references from outer contexts within syntax constructs\\n  // such as the bodies of iteration statements.\\n  // The function modifies the parser's topic-context state to enable or disable\\n  // the use of topic references with the smartPipelines plugin. They then run a\\n  // callback, then they reset the parser to the old topic-context state that it\\n  // had before the function was called.\\n\\n  withSmartMixTopicForbiddingContext<T>(callback: () => T): T {\\n    if (this.hasPlugin([\\\"pipelineOperator\\\", { proposal: \\\"smart\\\" }])) {\\n      // Reset the parser’s topic context only if the smart-mix pipe proposal is active.\\n      const outerContextTopicState = this.state.topicContext;\\n      this.state.topicContext = {\\n        // Disable the use of the primary topic reference.\\n        maxNumOfResolvableTopics: 0,\\n        // Hide the use of any topic references from outer contexts.\\n        maxTopicIndex: null,\\n      };\\n\\n      try {\\n        return callback();\\n      } finally {\\n        this.state.topicContext = outerContextTopicState;\\n      }\\n    } else {\\n      // If the pipe proposal is \\\"minimal\\\", \\\"fsharp\\\", or \\\"hack\\\",\\n      // or if no pipe proposal is active,\\n      // then the callback result is returned\\n      // without touching any extra parser state.\\n      return callback();\\n    }\\n  }\\n\\n  withSoloAwaitPermittingContext<T>(callback: () => T): T {\\n    const outerContextSoloAwaitState = this.state.soloAwait;\\n    this.state.soloAwait = true;\\n\\n    try {\\n      return callback();\\n    } finally {\\n      this.state.soloAwait = outerContextSoloAwaitState;\\n    }\\n  }\\n\\n  allowInAnd<T>(callback: () => T): T {\\n    const flags = this.prodParam.currentFlags();\\n    const prodParamToSet = PARAM_IN & ~flags;\\n    if (prodParamToSet) {\\n      this.prodParam.enter(flags | PARAM_IN);\\n      try {\\n        return callback();\\n      } finally {\\n        this.prodParam.exit();\\n      }\\n    }\\n    return callback();\\n  }\\n\\n  disallowInAnd<T>(callback: () => T): T {\\n    const flags = this.prodParam.currentFlags();\\n    const prodParamToClear = PARAM_IN & flags;\\n    if (prodParamToClear) {\\n      this.prodParam.enter(flags & ~PARAM_IN);\\n      try {\\n        return callback();\\n      } finally {\\n        this.prodParam.exit();\\n      }\\n    }\\n    return callback();\\n  }\\n\\n  // Register the use of a topic reference within the current\\n  // topic-binding context.\\n  registerTopicReference(): void {\\n    this.state.topicContext.maxTopicIndex = 0;\\n  }\\n\\n  topicReferenceIsAllowedInCurrentContext(): boolean {\\n    return this.state.topicContext.maxNumOfResolvableTopics >= 1;\\n  }\\n\\n  topicReferenceWasUsedInCurrentContext(): boolean {\\n    return (\\n      this.state.topicContext.maxTopicIndex != null &&\\n      this.state.topicContext.maxTopicIndex >= 0\\n    );\\n  }\\n\\n  parseFSharpPipelineBody(this: Parser, prec: number): N.Expression {\\n    const startLoc = this.state.startLoc;\\n\\n    this.state.potentialArrowAt = this.state.start;\\n    const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;\\n    this.state.inFSharpPipelineDirectBody = true;\\n\\n    const ret = this.parseExprOp(\\n      this.parseMaybeUnaryOrPrivate(),\\n      startLoc,\\n      prec,\\n    );\\n\\n    this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;\\n\\n    return ret;\\n  }\\n\\n  // https://github.com/tc39/proposal-js-module-blocks\\n  parseModuleExpression(this: Parser): N.ModuleExpression {\\n    this.expectPlugin(\\\"moduleBlocks\\\");\\n    const node = this.startNode<N.ModuleExpression>();\\n    this.next(); // eat \\\"module\\\"\\n    if (!this.match(tt.braceL)) {\\n      this.unexpected(null, tt.braceL);\\n    }\\n    // start program node immediately after `{`\\n    const program = this.startNodeAt<N.Program>(this.state.endLoc);\\n    this.next(); // eat `{`\\n\\n    const revertScopes = this.initializeScopes(/** inModule */ true);\\n    this.enterInitialScopes();\\n\\n    try {\\n      node.body = this.parseProgram(program, tt.braceR, \\\"module\\\");\\n    } finally {\\n      revertScopes();\\n    }\\n    return this.finishNode<N.ModuleExpression>(node, \\\"ModuleExpression\\\");\\n  }\\n\\n  // Used in Flow plugin\\n  parsePropertyNamePrefixOperator(\\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\\n    prop: Undone<N.ObjectOrClassMember | N.ClassMember>,\\n  ): void {}\\n}\\n\",\"import type * as N from \\\"../types\\\";\\nimport {\\n  tokenIsIdentifier,\\n  tokenIsLoop,\\n  tokenIsTemplate,\\n  tt,\\n  type TokenType,\\n  getExportedToken,\\n} from \\\"../tokenizer/types\\\";\\nimport ExpressionParser from \\\"./expression\\\";\\nimport { Errors } from \\\"../parse-error\\\";\\nimport { isIdentifierChar, isIdentifierStart } from \\\"../util/identifier\\\";\\nimport { lineBreak } from \\\"../util/whitespace\\\";\\nimport * as charCodes from \\\"charcodes\\\";\\nimport {\\n  BIND_CLASS,\\n  BIND_LEXICAL,\\n  BIND_VAR,\\n  BIND_FUNCTION,\\n  SCOPE_CLASS,\\n  SCOPE_FUNCTION,\\n  SCOPE_OTHER,\\n  SCOPE_SIMPLE_CATCH,\\n  SCOPE_STATIC_BLOCK,\\n  SCOPE_SUPER,\\n  CLASS_ELEMENT_OTHER,\\n  CLASS_ELEMENT_INSTANCE_GETTER,\\n  CLASS_ELEMENT_INSTANCE_SETTER,\\n  CLASS_ELEMENT_STATIC_GETTER,\\n  CLASS_ELEMENT_STATIC_SETTER,\\n  type BindingTypes,\\n  BIND_CATCH_PARAM,\\n} from \\\"../util/scopeflags\\\";\\nimport { ExpressionErrors } from \\\"./util\\\";\\nimport { PARAM, functionFlags } from \\\"../util/production-parameter\\\";\\nimport {\\n  newExpressionScope,\\n  newParameterDeclarationScope,\\n} from \\\"../util/expression-scope\\\";\\nimport type { SourceType } from \\\"../options\\\";\\nimport { Token } from \\\"../tokenizer\\\";\\nimport type { Position } from \\\"../util/location\\\";\\nimport { createPositionWithColumnOffset } from \\\"../util/location\\\";\\nimport { cloneStringLiteral, cloneIdentifier, type Undone } from \\\"./node\\\";\\nimport type Parser from \\\"./index\\\";\\nimport { ParseBindingListFlags } from \\\"./lval\\\";\\n\\nconst loopLabel = { kind: \\\"loop\\\" } as const,\\n  switchLabel = { kind: \\\"switch\\\" } as const;\\n\\nexport const enum ParseFunctionFlag {\\n  Expression = 0b0000,\\n  Declaration = 0b0001,\\n  HangingDeclaration = 0b0010,\\n  NullableId = 0b0100,\\n  Async = 0b1000,\\n}\\n\\nexport const enum ParseStatementFlag {\\n  StatementOnly = 0b0000,\\n  AllowImportExport = 0b0001,\\n  AllowDeclaration = 0b0010,\\n  AllowFunctionDeclaration = 0b0100,\\n  AllowLabeledFunction = 0b1000,\\n}\\n\\nconst loneSurrogate = /[\\\\uD800-\\\\uDFFF]/u;\\n\\nconst keywordRelationalOperator = /in(?:stanceof)?/y;\\n\\n/**\\n * Convert tokens for backward Babel 7 compat.\\n * tt.privateName => tt.hash + tt.name\\n * tt.templateTail => tt.backquote/tt.braceR + tt.template + tt.backquote\\n * tt.templateNonTail => tt.backquote/tt.braceR + tt.template + tt.dollarBraceL\\n * For performance reasons this routine mutates `tokens`, it is okay\\n * here since we execute `parseTopLevel` once for every file.\\n */\\nfunction babel7CompatTokens(tokens: (Token | N.Comment)[], input: string) {\\n  for (let i = 0; i < tokens.length; i++) {\\n    const token = tokens[i];\\n    const { type } = token;\\n    if (typeof type === \\\"number\\\") {\\n      if (!process.env.BABEL_8_BREAKING) {\\n        if (type === tt.privateName) {\\n          const { loc, start, value, end } = token;\\n          const hashEndPos = start + 1;\\n          const hashEndLoc = createPositionWithColumnOffset(loc.start, 1);\\n          tokens.splice(\\n            i,\\n            1,\\n            new Token({\\n              // @ts-expect-error: hacky way to create token\\n              type: getExportedToken(tt.hash),\\n              value: \\\"#\\\",\\n              start: start,\\n              end: hashEndPos,\\n              startLoc: loc.start,\\n              endLoc: hashEndLoc,\\n            }),\\n            new Token({\\n              // @ts-expect-error: hacky way to create token\\n              type: getExportedToken(tt.name),\\n              value: value,\\n              start: hashEndPos,\\n              end: end,\\n              startLoc: hashEndLoc,\\n              endLoc: loc.end,\\n            }),\\n          );\\n          i++;\\n          continue;\\n        }\\n\\n        if (tokenIsTemplate(type)) {\\n          const { loc, start, value, end } = token;\\n          const backquoteEnd = start + 1;\\n          const backquoteEndLoc = createPositionWithColumnOffset(loc.start, 1);\\n          let startToken;\\n          if (input.charCodeAt(start) === charCodes.graveAccent) {\\n            startToken = new Token({\\n              // @ts-expect-error: hacky way to create token\\n              type: getExportedToken(tt.backQuote),\\n              value: \\\"`\\\",\\n              start: start,\\n              end: backquoteEnd,\\n              startLoc: loc.start,\\n              endLoc: backquoteEndLoc,\\n            });\\n          } else {\\n            startToken = new Token({\\n              // @ts-expect-error: hacky way to create token\\n              type: getExportedToken(tt.braceR),\\n              value: \\\"}\\\",\\n              start: start,\\n              end: backquoteEnd,\\n              startLoc: loc.start,\\n              endLoc: backquoteEndLoc,\\n            });\\n          }\\n          let templateValue,\\n            templateElementEnd,\\n            templateElementEndLoc,\\n            endToken;\\n          if (type === tt.templateTail) {\\n            // ends with '`'\\n            templateElementEnd = end - 1;\\n            templateElementEndLoc = createPositionWithColumnOffset(loc.end, -1);\\n            templateValue = value === null ? null : value.slice(1, -1);\\n            endToken = new Token({\\n              // @ts-expect-error: hacky way to create token\\n              type: getExportedToken(tt.backQuote),\\n              value: \\\"`\\\",\\n              start: templateElementEnd,\\n              end: end,\\n              startLoc: templateElementEndLoc,\\n              endLoc: loc.end,\\n            });\\n          } else {\\n            // ends with `${`\\n            templateElementEnd = end - 2;\\n            templateElementEndLoc = createPositionWithColumnOffset(loc.end, -2);\\n            templateValue = value === null ? null : value.slice(1, -2);\\n            endToken = new Token({\\n              // @ts-expect-error: hacky way to create token\\n              type: getExportedToken(tt.dollarBraceL),\\n              value: \\\"${\\\",\\n              start: templateElementEnd,\\n              end: end,\\n              startLoc: templateElementEndLoc,\\n              endLoc: loc.end,\\n            });\\n          }\\n          tokens.splice(\\n            i,\\n            1,\\n            startToken,\\n            new Token({\\n              // @ts-expect-error: hacky way to create token\\n              type: getExportedToken(tt.template),\\n              value: templateValue,\\n              start: backquoteEnd,\\n              end: templateElementEnd,\\n              startLoc: backquoteEndLoc,\\n              endLoc: templateElementEndLoc,\\n            }),\\n            endToken,\\n          );\\n          i += 2;\\n          continue;\\n        }\\n      }\\n      // @ts-expect-error: we manipulate `token` for performance reasons\\n      token.type = getExportedToken(type);\\n    }\\n  }\\n  return tokens;\\n}\\nexport default abstract class StatementParser extends ExpressionParser {\\n  // ### Statement parsing\\n\\n  // Parse a program. Initializes the parser, reads any number of\\n  // statements, and wraps them in a Program node.  Optionally takes a\\n  // `program` argument.  If present, the statements will be appended\\n  // to its body instead of creating a new node.\\n\\n  parseTopLevel(this: Parser, file: N.File, program: N.Program): N.File {\\n    file.program = this.parseProgram(program);\\n    file.comments = this.state.comments;\\n\\n    if (this.options.tokens) {\\n      file.tokens = babel7CompatTokens(this.tokens, this.input);\\n    }\\n\\n    return this.finishNode(file, \\\"File\\\");\\n  }\\n\\n  parseProgram(\\n    this: Parser,\\n    program: Undone<N.Program>,\\n    end: TokenType = tt.eof,\\n    sourceType: SourceType = this.options.sourceType,\\n  ): N.Program {\\n    program.sourceType = sourceType;\\n    program.interpreter = this.parseInterpreterDirective();\\n    this.parseBlockBody(program, true, true, end);\\n    if (\\n      this.inModule &&\\n      !this.options.allowUndeclaredExports &&\\n      this.scope.undefinedExports.size > 0\\n    ) {\\n      for (const [localName, at] of Array.from(this.scope.undefinedExports)) {\\n        this.raise(Errors.ModuleExportUndefined, { at, localName });\\n      }\\n    }\\n    let finishedProgram: N.Program;\\n    if (end === tt.eof) {\\n      // finish at eof for top level program\\n      finishedProgram = this.finishNode(program, \\\"Program\\\");\\n    } else {\\n      // finish immediately before the end token\\n      finishedProgram = this.finishNodeAt(\\n        program,\\n        \\\"Program\\\",\\n        createPositionWithColumnOffset(this.state.startLoc, -1),\\n      );\\n    }\\n    return finishedProgram;\\n  }\\n\\n  /**\\n   * cast a Statement to a Directive. This method mutates input statement.\\n   */\\n  stmtToDirective(stmt: N.Statement): N.Directive {\\n    const directive = stmt as any;\\n    directive.type = \\\"Directive\\\";\\n    directive.value = directive.expression;\\n    delete directive.expression;\\n\\n    const directiveLiteral = directive.value;\\n    const expressionValue = directiveLiteral.value;\\n    const raw = this.input.slice(directiveLiteral.start, directiveLiteral.end);\\n    const val = (directiveLiteral.value = raw.slice(1, -1)); // remove quotes\\n\\n    this.addExtra(directiveLiteral, \\\"raw\\\", raw);\\n    this.addExtra(directiveLiteral, \\\"rawValue\\\", val);\\n    this.addExtra(directiveLiteral, \\\"expressionValue\\\", expressionValue);\\n\\n    directiveLiteral.type = \\\"DirectiveLiteral\\\";\\n\\n    return directive;\\n  }\\n\\n  parseInterpreterDirective(): N.InterpreterDirective | null {\\n    if (!this.match(tt.interpreterDirective)) {\\n      return null;\\n    }\\n\\n    const node = this.startNode<N.InterpreterDirective>();\\n    node.value = this.state.value;\\n    this.next();\\n    return this.finishNode(node, \\\"InterpreterDirective\\\");\\n  }\\n\\n  isLet(): boolean {\\n    if (!this.isContextual(tt._let)) {\\n      return false;\\n    }\\n    return this.hasFollowingBindingAtom();\\n  }\\n\\n  chStartsBindingIdentifier(ch: number, pos: number) {\\n    if (isIdentifierStart(ch)) {\\n      keywordRelationalOperator.lastIndex = pos;\\n      if (keywordRelationalOperator.test(this.input)) {\\n        // We have seen `in` or `instanceof` so far, now check if the identifier\\n        // ends here\\n        const endCh = this.codePointAtPos(keywordRelationalOperator.lastIndex);\\n        if (!isIdentifierChar(endCh) && endCh !== charCodes.backslash) {\\n          return false;\\n        }\\n      }\\n      return true;\\n    } else if (ch === charCodes.backslash) {\\n      return true;\\n    } else {\\n      return false;\\n    }\\n  }\\n\\n  chStartsBindingPattern(ch: number) {\\n    return (\\n      ch === charCodes.leftSquareBracket || ch === charCodes.leftCurlyBrace\\n    );\\n  }\\n\\n  /**\\n   * Assuming we have seen a contextual `let` and declaration is allowed, check if it\\n   * starts a variable declaration so that it should be interpreted as a keyword.\\n   */\\n  hasFollowingBindingAtom(): boolean {\\n    const next = this.nextTokenStart();\\n    const nextCh = this.codePointAtPos(next);\\n    return (\\n      this.chStartsBindingPattern(nextCh) ||\\n      this.chStartsBindingIdentifier(nextCh, next)\\n    );\\n  }\\n\\n  /**\\n   * Assuming we have seen a contextual `using` and declaration is allowed, check if it\\n   * starts a variable declaration so that it should be interpreted as a keyword.\\n   */\\n  hasFollowingBindingIdentifier(): boolean {\\n    const next = this.nextTokenStart();\\n    const nextCh = this.codePointAtPos(next);\\n    return this.chStartsBindingIdentifier(nextCh, next);\\n  }\\n\\n  startsUsingForOf(): boolean {\\n    const lookahead = this.lookahead();\\n    if (lookahead.type === tt._of && !lookahead.containsEsc) {\\n      // `using of` must start a for-lhs-of statement\\n      return false;\\n    } else {\\n      this.expectPlugin(\\\"explicitResourceManagement\\\");\\n      return true;\\n    }\\n  }\\n\\n  // https://tc39.es/ecma262/#prod-ModuleItem\\n  parseModuleItem(this: Parser) {\\n    return this.parseStatementLike(\\n      ParseStatementFlag.AllowImportExport |\\n        ParseStatementFlag.AllowDeclaration |\\n        ParseStatementFlag.AllowFunctionDeclaration |\\n        // This function is actually also used to parse StatementItems,\\n        // which with Annex B enabled allows labeled functions.\\n        ParseStatementFlag.AllowLabeledFunction,\\n    );\\n  }\\n\\n  // https://tc39.es/ecma262/#prod-StatementListItem\\n  parseStatementListItem(this: Parser) {\\n    return this.parseStatementLike(\\n      ParseStatementFlag.AllowDeclaration |\\n        ParseStatementFlag.AllowFunctionDeclaration |\\n        (!this.options.annexB || this.state.strict\\n          ? 0\\n          : ParseStatementFlag.AllowLabeledFunction),\\n    );\\n  }\\n\\n  parseStatementOrSloppyAnnexBFunctionDeclaration(\\n    this: Parser,\\n    allowLabeledFunction: boolean = false,\\n  ) {\\n    let flags: ParseStatementFlag = ParseStatementFlag.StatementOnly;\\n    if (this.options.annexB && !this.state.strict) {\\n      flags |= ParseStatementFlag.AllowFunctionDeclaration;\\n      if (allowLabeledFunction) {\\n        flags |= ParseStatementFlag.AllowLabeledFunction;\\n      }\\n    }\\n    return this.parseStatementLike(flags);\\n  }\\n\\n  // Parse a single statement.\\n  //\\n  // If expecting a statement and finding a slash operator, parse a\\n  // regular expression literal. This is to handle cases like\\n  // `if (foo) /blah/.exec(foo)`, where looking at the previous token\\n  // does not help.\\n  // https://tc39.es/ecma262/#prod-Statement\\n  parseStatement(this: Parser) {\\n    return this.parseStatementLike(ParseStatementFlag.StatementOnly);\\n  }\\n\\n  // ImportDeclaration and ExportDeclaration are also handled here so we can throw recoverable errors\\n  // when they are not at the top level\\n  parseStatementLike(\\n    this: Parser,\\n    flags: ParseStatementFlag,\\n  ):\\n    | N.Statement\\n    | N.Declaration\\n    | N.ImportDeclaration\\n    | N.ExportDefaultDeclaration\\n    | N.ExportNamedDeclaration\\n    | N.ExportAllDeclaration {\\n    let decorators: N.Decorator[] | null = null;\\n\\n    if (this.match(tt.at)) {\\n      decorators = this.parseDecorators(true);\\n    }\\n    return this.parseStatementContent(flags, decorators);\\n  }\\n\\n  parseStatementContent(\\n    this: Parser,\\n    flags: ParseStatementFlag,\\n    decorators?: N.Decorator[] | null,\\n  ): N.Statement {\\n    const starttype = this.state.type;\\n    const node = this.startNode();\\n    const allowDeclaration = !!(flags & ParseStatementFlag.AllowDeclaration);\\n    const allowFunctionDeclaration = !!(\\n      flags & ParseStatementFlag.AllowFunctionDeclaration\\n    );\\n    const topLevel = flags & ParseStatementFlag.AllowImportExport;\\n\\n    // Most types of statements are recognized by the keyword they\\n    // start with. Many are trivial to parse, some require a bit of\\n    // complexity.\\n\\n    switch (starttype) {\\n      case tt._break:\\n        return this.parseBreakContinueStatement(node, /* isBreak */ true);\\n      case tt._continue:\\n        return this.parseBreakContinueStatement(node, /* isBreak */ false);\\n      case tt._debugger:\\n        return this.parseDebuggerStatement(node as Undone<N.DebuggerStatement>);\\n      case tt._do:\\n        return this.parseDoWhileStatement(node as Undone<N.DoWhileStatement>);\\n      case tt._for:\\n        return this.parseForStatement(node as Undone<N.ForStatement>);\\n      case tt._function:\\n        if (this.lookaheadCharCode() === charCodes.dot) break;\\n        if (!allowFunctionDeclaration) {\\n          this.raise(\\n            this.state.strict\\n              ? Errors.StrictFunction\\n              : this.options.annexB\\n              ? Errors.SloppyFunctionAnnexB\\n              : Errors.SloppyFunction,\\n            { at: this.state.startLoc },\\n          );\\n        }\\n        return this.parseFunctionStatement(\\n          node as Undone<N.FunctionDeclaration>,\\n          false,\\n          !allowDeclaration && allowFunctionDeclaration,\\n        );\\n      case tt._class:\\n        if (!allowDeclaration) this.unexpected();\\n        return this.parseClass(\\n          this.maybeTakeDecorators(\\n            decorators,\\n            node as Undone<N.ClassDeclaration>,\\n          ),\\n          true,\\n        );\\n\\n      case tt._if:\\n        return this.parseIfStatement(node as Undone<N.IfStatement>);\\n      case tt._return:\\n        return this.parseReturnStatement(node as Undone<N.ReturnStatement>);\\n      case tt._switch:\\n        return this.parseSwitchStatement(node as Undone<N.SwitchStatement>);\\n      case tt._throw:\\n        return this.parseThrowStatement(node as Undone<N.ThrowStatement>);\\n      case tt._try:\\n        return this.parseTryStatement(node as Undone<N.TryStatement>);\\n\\n      case tt._using:\\n        // using [no LineTerminator here][lookahead != `await`] BindingList[+Using]\\n        if (\\n          this.hasFollowingLineBreak() ||\\n          this.state.containsEsc ||\\n          !this.hasFollowingBindingIdentifier()\\n        ) {\\n          break;\\n        }\\n        this.expectPlugin(\\\"explicitResourceManagement\\\");\\n        if (!this.scope.inModule && this.scope.inTopLevel) {\\n          this.raise(Errors.UnexpectedUsingDeclaration, {\\n            at: this.state.startLoc,\\n          });\\n        } else if (!allowDeclaration) {\\n          this.raise(Errors.UnexpectedLexicalDeclaration, {\\n            at: this.state.startLoc,\\n          });\\n        }\\n        return this.parseVarStatement(\\n          node as Undone<N.VariableDeclaration>,\\n          \\\"using\\\",\\n        );\\n      case tt._let: {\\n        if (this.state.containsEsc) {\\n          break;\\n        }\\n        // `let [` is an explicit negative lookahead for\\n        // ExpressionStatement, so special-case it first.\\n        const next = this.nextTokenStart();\\n        const nextCh = this.codePointAtPos(next);\\n        if (nextCh !== charCodes.leftSquareBracket) {\\n          if (!allowDeclaration && this.hasFollowingLineBreak()) break;\\n          if (\\n            !this.chStartsBindingIdentifier(nextCh, next) &&\\n            nextCh !== charCodes.leftCurlyBrace\\n          ) {\\n            break;\\n          }\\n        }\\n      }\\n      // fall through\\n      case tt._const: {\\n        if (!allowDeclaration) {\\n          this.raise(Errors.UnexpectedLexicalDeclaration, {\\n            at: this.state.startLoc,\\n          });\\n        }\\n      }\\n      // fall through\\n      case tt._var: {\\n        const kind = this.state.value;\\n        return this.parseVarStatement(\\n          node as Undone<N.VariableDeclaration>,\\n          kind,\\n        );\\n      }\\n      case tt._while:\\n        return this.parseWhileStatement(node as Undone<N.WhileStatement>);\\n      case tt._with:\\n        return this.parseWithStatement(node as Undone<N.WithStatement>);\\n      case tt.braceL:\\n        return this.parseBlock();\\n      case tt.semi:\\n        return this.parseEmptyStatement(node as Undone<N.EmptyStatement>);\\n      case tt._import: {\\n        const nextTokenCharCode = this.lookaheadCharCode();\\n        if (\\n          nextTokenCharCode === charCodes.leftParenthesis || // import()\\n          nextTokenCharCode === charCodes.dot // import.meta\\n        ) {\\n          break;\\n        }\\n      }\\n      // fall through\\n      case tt._export: {\\n        if (!this.options.allowImportExportEverywhere && !topLevel) {\\n          this.raise(Errors.UnexpectedImportExport, {\\n            at: this.state.startLoc,\\n          });\\n        }\\n\\n        this.next(); // eat `import`/`export`\\n\\n        let result;\\n        if (starttype === tt._import) {\\n          result = this.parseImport(node as Undone<N.ImportDeclaration>);\\n\\n          if (\\n            result.type === \\\"ImportDeclaration\\\" &&\\n            (!result.importKind || result.importKind === \\\"value\\\")\\n          ) {\\n            this.sawUnambiguousESM = true;\\n          }\\n        } else {\\n          result = this.parseExport(\\n            node as Undone<\\n              | N.ExportAllDeclaration\\n              | N.ExportDefaultDeclaration\\n              | N.ExportDefaultDeclaration\\n            >,\\n            decorators,\\n          );\\n\\n          if (\\n            (result.type === \\\"ExportNamedDeclaration\\\" &&\\n              (!result.exportKind || result.exportKind === \\\"value\\\")) ||\\n            (result.type === \\\"ExportAllDeclaration\\\" &&\\n              (!result.exportKind || result.exportKind === \\\"value\\\")) ||\\n            result.type === \\\"ExportDefaultDeclaration\\\"\\n          ) {\\n            this.sawUnambiguousESM = true;\\n          }\\n        }\\n\\n        this.assertModuleNodeAllowed(result);\\n\\n        return result;\\n      }\\n\\n      default: {\\n        if (this.isAsyncFunction()) {\\n          if (!allowDeclaration) {\\n            this.raise(Errors.AsyncFunctionInSingleStatementContext, {\\n              at: this.state.startLoc,\\n            });\\n          }\\n          this.next(); // eat 'async'\\n          return this.parseFunctionStatement(\\n            node as Undone<N.FunctionDeclaration>,\\n            true,\\n            !allowDeclaration && allowFunctionDeclaration,\\n          );\\n        }\\n      }\\n    }\\n\\n    // If the statement does not start with a statement keyword or a\\n    // brace, it's an ExpressionStatement or LabeledStatement. We\\n    // simply start parsing an expression, and afterwards, if the\\n    // next token is a colon and the expression was a simple\\n    // Identifier node, we switch to interpreting it as a label.\\n    const maybeName = this.state.value;\\n    const expr = this.parseExpression();\\n\\n    if (\\n      tokenIsIdentifier(starttype) &&\\n      expr.type === \\\"Identifier\\\" &&\\n      this.eat(tt.colon)\\n    ) {\\n      return this.parseLabeledStatement(\\n        node as Undone<N.LabeledStatement>,\\n        maybeName,\\n        // @ts-expect-error migrate to Babel types\\n        expr,\\n        flags,\\n      );\\n    } else {\\n      return this.parseExpressionStatement(\\n        node as Undone<N.ExpressionStatement>,\\n        expr,\\n        decorators,\\n      );\\n    }\\n  }\\n\\n  assertModuleNodeAllowed(node: N.Node): void {\\n    if (!this.options.allowImportExportEverywhere && !this.inModule) {\\n      this.raise(Errors.ImportOutsideModule, { at: node });\\n    }\\n  }\\n\\n  decoratorsEnabledBeforeExport(): boolean {\\n    if (this.hasPlugin(\\\"decorators-legacy\\\")) return true;\\n    return (\\n      this.hasPlugin(\\\"decorators\\\") &&\\n      this.getPluginOption(\\\"decorators\\\", \\\"decoratorsBeforeExport\\\") !== false\\n    );\\n  }\\n\\n  // Attach the decorators to the given class.\\n  // NOTE: This method changes the .start location of the class, and thus\\n  // can affect comment attachment. Calling it before or after finalizing\\n  // the class node (and thus finalizing its comments) changes how comments\\n  // before the `class` keyword or before the final .start location of the\\n  // class are attached.\\n  maybeTakeDecorators<T extends Undone<N.Class>>(\\n    maybeDecorators: N.Decorator[] | null,\\n    classNode: T,\\n    exportNode?: Undone<N.ExportDefaultDeclaration | N.ExportNamedDeclaration>,\\n  ): T {\\n    if (maybeDecorators) {\\n      if (classNode.decorators && classNode.decorators.length > 0) {\\n        // Note: decorators attachment is only attempred multiple times\\n        // when the class is part of an export declaration.\\n        if (\\n          typeof this.getPluginOption(\\n            \\\"decorators\\\",\\n            \\\"decoratorsBeforeExport\\\",\\n          ) !== \\\"boolean\\\"\\n        ) {\\n          // If `decoratorsBeforeExport` was set to `true` or `false`, we\\n          // already threw an error about decorators not being in a valid\\n          // position.\\n          this.raise(Errors.DecoratorsBeforeAfterExport, {\\n            at: classNode.decorators[0],\\n          });\\n        }\\n        classNode.decorators.unshift(...maybeDecorators);\\n      } else {\\n        classNode.decorators = maybeDecorators;\\n      }\\n      this.resetStartLocationFromNode(classNode, maybeDecorators[0]);\\n      if (exportNode) this.resetStartLocationFromNode(exportNode, classNode);\\n    }\\n    return classNode;\\n  }\\n\\n  canHaveLeadingDecorator(): boolean {\\n    return this.match(tt._class);\\n  }\\n\\n  parseDecorators(this: Parser, allowExport?: boolean): N.Decorator[] {\\n    const decorators = [];\\n    do {\\n      decorators.push(this.parseDecorator());\\n    } while (this.match(tt.at));\\n\\n    if (this.match(tt._export)) {\\n      if (!allowExport) {\\n        this.unexpected();\\n      }\\n\\n      if (!this.decoratorsEnabledBeforeExport()) {\\n        this.raise(Errors.DecoratorExportClass, { at: this.state.startLoc });\\n      }\\n    } else if (!this.canHaveLeadingDecorator()) {\\n      throw this.raise(Errors.UnexpectedLeadingDecorator, {\\n        at: this.state.startLoc,\\n      });\\n    }\\n\\n    return decorators;\\n  }\\n\\n  parseDecorator(this: Parser): N.Decorator {\\n    this.expectOnePlugin([\\\"decorators\\\", \\\"decorators-legacy\\\"]);\\n\\n    const node = this.startNode<N.Decorator>();\\n    this.next();\\n\\n    if (this.hasPlugin(\\\"decorators\\\")) {\\n      const startLoc = this.state.startLoc;\\n      let expr: N.Expression;\\n\\n      if (this.match(tt.parenL)) {\\n        const startLoc = this.state.startLoc;\\n        this.next(); // eat '('\\n        expr = this.parseExpression();\\n        this.expect(tt.parenR);\\n        expr = this.wrapParenthesis(startLoc, expr);\\n\\n        const paramsStartLoc = this.state.startLoc;\\n        node.expression = this.parseMaybeDecoratorArguments(expr);\\n        if (\\n          this.getPluginOption(\\\"decorators\\\", \\\"allowCallParenthesized\\\") ===\\n            false &&\\n          node.expression !== expr\\n        ) {\\n          this.raise(Errors.DecoratorArgumentsOutsideParentheses, {\\n            at: paramsStartLoc,\\n          });\\n        }\\n      } else {\\n        expr = this.parseIdentifier(false);\\n\\n        while (this.eat(tt.dot)) {\\n          const node = this.startNodeAt(startLoc);\\n          node.object = expr;\\n          if (this.match(tt.privateName)) {\\n            this.classScope.usePrivateName(\\n              this.state.value,\\n              this.state.startLoc,\\n            );\\n            node.property = this.parsePrivateName();\\n          } else {\\n            node.property = this.parseIdentifier(true);\\n          }\\n          node.computed = false;\\n          expr = this.finishNode(node, \\\"MemberExpression\\\");\\n        }\\n\\n        node.expression = this.parseMaybeDecoratorArguments(expr);\\n      }\\n    } else {\\n      node.expression = this.parseExprSubscripts();\\n    }\\n    return this.finishNode(node, \\\"Decorator\\\");\\n  }\\n\\n  parseMaybeDecoratorArguments(this: Parser, expr: N.Expression): N.Expression {\\n    if (this.eat(tt.parenL)) {\\n      const node = this.startNodeAtNode(expr);\\n      node.callee = expr;\\n      node.arguments = this.parseCallExpressionArguments(tt.parenR, false);\\n      this.toReferencedList(node.arguments);\\n      return this.finishNode(node, \\\"CallExpression\\\");\\n    }\\n\\n    return expr;\\n  }\\n\\n  parseBreakContinueStatement(\\n    node: Undone<N.Node>,\\n    isBreak: true,\\n  ): N.BreakStatement;\\n  parseBreakContinueStatement(\\n    node: Undone<N.Node>,\\n    isBreak: false,\\n  ): N.ContinueStatement;\\n  parseBreakContinueStatement(\\n    node: Undone<N.BreakStatement | N.ContinueStatement>,\\n    isBreak: boolean,\\n  ): N.BreakStatement | N.ContinueStatement {\\n    this.next();\\n\\n    if (this.isLineTerminator()) {\\n      node.label = null;\\n    } else {\\n      node.label = this.parseIdentifier();\\n      this.semicolon();\\n    }\\n\\n    this.verifyBreakContinue(node, isBreak);\\n\\n    return this.finishNode(\\n      node,\\n      isBreak ? \\\"BreakStatement\\\" : \\\"ContinueStatement\\\",\\n    );\\n  }\\n\\n  verifyBreakContinue(\\n    node: Undone<N.BreakStatement | N.ContinueStatement>,\\n    isBreak: boolean,\\n  ) {\\n    let i;\\n    for (i = 0; i < this.state.labels.length; ++i) {\\n      const lab = this.state.labels[i];\\n      if (node.label == null || lab.name === node.label.name) {\\n        if (lab.kind != null && (isBreak || lab.kind === \\\"loop\\\")) break;\\n        if (node.label && isBreak) break;\\n      }\\n    }\\n    if (i === this.state.labels.length) {\\n      const type = isBreak ? \\\"BreakStatement\\\" : \\\"ContinueStatement\\\";\\n      this.raise(Errors.IllegalBreakContinue, { at: node, type });\\n    }\\n  }\\n\\n  parseDebuggerStatement(\\n    node: Undone<N.DebuggerStatement>,\\n  ): N.DebuggerStatement {\\n    this.next();\\n    this.semicolon();\\n    return this.finishNode(node, \\\"DebuggerStatement\\\");\\n  }\\n\\n  parseHeaderExpression(this: Parser): N.Expression {\\n    this.expect(tt.parenL);\\n    const val = this.parseExpression();\\n    this.expect(tt.parenR);\\n    return val;\\n  }\\n\\n  // https://tc39.es/ecma262/#prod-DoWhileStatement\\n  parseDoWhileStatement(\\n    this: Parser,\\n    node: Undone<N.DoWhileStatement>,\\n  ): N.DoWhileStatement {\\n    this.next();\\n    this.state.labels.push(loopLabel);\\n\\n    // Parse the loop body's body.\\n    node.body =\\n      // For the smartPipelines plugin: Disable topic references from outer\\n      // contexts within the loop body. They are permitted in test expressions,\\n      // outside of the loop body.\\n      this.withSmartMixTopicForbiddingContext(() =>\\n        // Parse the loop body's body.\\n        this.parseStatement(),\\n      );\\n\\n    this.state.labels.pop();\\n\\n    this.expect(tt._while);\\n    node.test = this.parseHeaderExpression();\\n    this.eat(tt.semi);\\n    return this.finishNode(node, \\\"DoWhileStatement\\\");\\n  }\\n\\n  // Disambiguating between a `for` and a `for`/`in` or `for`/`of`\\n  // loop is non-trivial. Basically, we have to parse the init `var`\\n  // statement or expression, disallowing the `in` operator (see\\n  // the second parameter to `parseExpression`), and then check\\n  // whether the next token is `in` or `of`. When there is no init\\n  // part (semicolon immediately after the opening parenthesis), it\\n  // is a regular `for` loop.\\n\\n  parseForStatement(\\n    this: Parser,\\n    node: Undone<N.ForStatement | N.ForInOf>,\\n  ): N.ForLike {\\n    this.next();\\n    this.state.labels.push(loopLabel);\\n\\n    let awaitAt = null;\\n\\n    if (this.isAwaitAllowed() && this.eatContextual(tt._await)) {\\n      awaitAt = this.state.lastTokStartLoc;\\n    }\\n    this.scope.enter(SCOPE_OTHER);\\n    this.expect(tt.parenL);\\n\\n    if (this.match(tt.semi)) {\\n      if (awaitAt !== null) {\\n        this.unexpected(awaitAt);\\n      }\\n      return this.parseFor(node as Undone<N.ForStatement>, null);\\n    }\\n\\n    const startsWithLet = this.isContextual(tt._let);\\n    const startsWithUsing =\\n      this.isContextual(tt._using) && !this.hasFollowingLineBreak();\\n    const isLetOrUsing =\\n      (startsWithLet && this.hasFollowingBindingAtom()) ||\\n      (startsWithUsing &&\\n        this.hasFollowingBindingIdentifier() &&\\n        this.startsUsingForOf());\\n    if (this.match(tt._var) || this.match(tt._const) || isLetOrUsing) {\\n      const initNode = this.startNode<N.VariableDeclaration>();\\n      const kind = this.state.value;\\n      this.next();\\n      this.parseVar(initNode, true, kind);\\n      const init = this.finishNode(initNode, \\\"VariableDeclaration\\\");\\n\\n      const isForIn = this.match(tt._in);\\n      if (isForIn && startsWithUsing) {\\n        this.raise(Errors.ForInUsing, { at: init });\\n      }\\n      if (\\n        (isForIn || this.isContextual(tt._of)) &&\\n        init.declarations.length === 1\\n      ) {\\n        return this.parseForIn(node as Undone<N.ForInOf>, init, awaitAt);\\n      }\\n      if (awaitAt !== null) {\\n        this.unexpected(awaitAt);\\n      }\\n      return this.parseFor(node as Undone<N.ForStatement>, init);\\n    }\\n\\n    // Check whether the first token is possibly a contextual keyword, so that\\n    // we can forbid `for (async of` if this turns out to be a for-of loop.\\n    const startsWithAsync = this.isContextual(tt._async);\\n\\n    const refExpressionErrors = new ExpressionErrors();\\n    const init = this.parseExpression(true, refExpressionErrors);\\n    const isForOf = this.isContextual(tt._of);\\n    if (isForOf) {\\n      // Check for leading tokens that are forbidden in for-of loops:\\n      if (startsWithLet) {\\n        this.raise(Errors.ForOfLet, { at: init });\\n      }\\n\\n      if (\\n        // `for await (async of []);` is allowed.\\n        awaitAt === null &&\\n        startsWithAsync &&\\n        init.type === \\\"Identifier\\\"\\n      ) {\\n        // This catches the case where the `async` in `for (async of` was\\n        // parsed as an identifier. If it was parsed as the start of an async\\n        // arrow function (e.g. `for (async of => {} of []);`), the LVal check\\n        // further down will raise a more appropriate error.\\n        this.raise(Errors.ForOfAsync, { at: init });\\n      }\\n    }\\n    if (isForOf || this.match(tt._in)) {\\n      this.checkDestructuringPrivate(refExpressionErrors);\\n      this.toAssignable(init, /* isLHS */ true);\\n      const type = isForOf ? \\\"ForOfStatement\\\" : \\\"ForInStatement\\\";\\n      this.checkLVal(init, { in: { type } });\\n      return this.parseForIn(\\n        node as Undone<N.ForInStatement | N.ForOfStatement>,\\n        // @ts-expect-error init has been transformed to an assignable\\n        init,\\n        awaitAt,\\n      );\\n    } else {\\n      this.checkExpressionErrors(refExpressionErrors, true);\\n    }\\n    if (awaitAt !== null) {\\n      this.unexpected(awaitAt);\\n    }\\n    return this.parseFor(node as Undone<N.ForStatement>, init);\\n  }\\n\\n  // https://tc39.es/ecma262/#prod-HoistableDeclaration\\n  parseFunctionStatement(\\n    this: Parser,\\n    node: Undone<N.FunctionDeclaration>,\\n    isAsync: boolean,\\n    isHangingDeclaration: boolean,\\n  ): N.FunctionDeclaration {\\n    this.next(); // eat 'function'\\n    return this.parseFunction(\\n      node,\\n      ParseFunctionFlag.Declaration |\\n        (isHangingDeclaration ? ParseFunctionFlag.HangingDeclaration : 0) |\\n        (isAsync ? ParseFunctionFlag.Async : 0),\\n    );\\n  }\\n\\n  // https://tc39.es/ecma262/#prod-IfStatement\\n  parseIfStatement(this: Parser, node: Undone<N.IfStatement>) {\\n    this.next();\\n    node.test = this.parseHeaderExpression();\\n    // Annex B.3.3\\n    // https://tc39.es/ecma262/#sec-functiondeclarations-in-ifstatement-statement-clauses\\n    node.consequent = this.parseStatementOrSloppyAnnexBFunctionDeclaration();\\n    node.alternate = this.eat(tt._else)\\n      ? this.parseStatementOrSloppyAnnexBFunctionDeclaration()\\n      : null;\\n    return this.finishNode(node, \\\"IfStatement\\\");\\n  }\\n\\n  parseReturnStatement(this: Parser, node: Undone<N.ReturnStatement>) {\\n    if (!this.prodParam.hasReturn && !this.options.allowReturnOutsideFunction) {\\n      this.raise(Errors.IllegalReturn, { at: this.state.startLoc });\\n    }\\n\\n    this.next();\\n\\n    // In `return` (and `break`/`continue`), the keywords with\\n    // optional arguments, we eagerly look for a semicolon or the\\n    // possibility to insert one.\\n\\n    if (this.isLineTerminator()) {\\n      node.argument = null;\\n    } else {\\n      node.argument = this.parseExpression();\\n      this.semicolon();\\n    }\\n\\n    return this.finishNode(node, \\\"ReturnStatement\\\");\\n  }\\n\\n  // https://tc39.es/ecma262/#prod-SwitchStatement\\n  parseSwitchStatement(this: Parser, node: Undone<N.SwitchStatement>) {\\n    this.next();\\n    node.discriminant = this.parseHeaderExpression();\\n    const cases: N.SwitchStatement[\\\"cases\\\"] = (node.cases = []);\\n    this.expect(tt.braceL);\\n    this.state.labels.push(switchLabel);\\n    this.scope.enter(SCOPE_OTHER);\\n\\n    // Statements under must be grouped (by label) in SwitchCase\\n    // nodes. `cur` is used to keep the node that we are currently\\n    // adding statements to.\\n\\n    let cur;\\n    for (let sawDefault; !this.match(tt.braceR); ) {\\n      if (this.match(tt._case) || this.match(tt._default)) {\\n        const isCase = this.match(tt._case);\\n        if (cur) this.finishNode(cur, \\\"SwitchCase\\\");\\n        // @ts-expect-error Fixme\\n        cases.push((cur = this.startNode()));\\n        cur.consequent = [];\\n        this.next();\\n        if (isCase) {\\n          cur.test = this.parseExpression();\\n        } else {\\n          if (sawDefault) {\\n            this.raise(Errors.MultipleDefaultsInSwitch, {\\n              at: this.state.lastTokStartLoc,\\n            });\\n          }\\n          sawDefault = true;\\n          cur.test = null;\\n        }\\n        this.expect(tt.colon);\\n      } else {\\n        if (cur) {\\n          cur.consequent.push(this.parseStatementListItem());\\n        } else {\\n          this.unexpected();\\n        }\\n      }\\n    }\\n    this.scope.exit();\\n    if (cur) this.finishNode(cur, \\\"SwitchCase\\\");\\n    this.next(); // Closing brace\\n    this.state.labels.pop();\\n    return this.finishNode(node, \\\"SwitchStatement\\\");\\n  }\\n\\n  parseThrowStatement(this: Parser, node: Undone<N.ThrowStatement>) {\\n    this.next();\\n    if (this.hasPrecedingLineBreak()) {\\n      this.raise(Errors.NewlineAfterThrow, { at: this.state.lastTokEndLoc });\\n    }\\n    node.argument = this.parseExpression();\\n    this.semicolon();\\n    return this.finishNode(node, \\\"ThrowStatement\\\");\\n  }\\n\\n  parseCatchClauseParam(this: Parser): N.Pattern {\\n    const param = this.parseBindingAtom();\\n\\n    this.scope.enter(\\n      this.options.annexB && param.type === \\\"Identifier\\\"\\n        ? SCOPE_SIMPLE_CATCH\\n        : 0,\\n    );\\n    this.checkLVal(param, {\\n      in: { type: \\\"CatchClause\\\" },\\n      binding: BIND_CATCH_PARAM,\\n    });\\n\\n    return param;\\n  }\\n\\n  parseTryStatement(\\n    this: Parser,\\n    node: Undone<N.TryStatement>,\\n  ): N.TryStatement {\\n    this.next();\\n\\n    node.block = this.parseBlock();\\n    node.handler = null;\\n\\n    if (this.match(tt._catch)) {\\n      const clause = this.startNode<N.CatchClause>();\\n      this.next();\\n      if (this.match(tt.parenL)) {\\n        this.expect(tt.parenL);\\n        clause.param = this.parseCatchClauseParam();\\n        this.expect(tt.parenR);\\n      } else {\\n        clause.param = null;\\n        this.scope.enter(SCOPE_OTHER);\\n      }\\n\\n      // Parse the catch clause's body.\\n      clause.body =\\n        // For the smartPipelines plugin: Disable topic references from outer\\n        // contexts within the catch clause's body.\\n        this.withSmartMixTopicForbiddingContext(() =>\\n          // Parse the catch clause's body.\\n          this.parseBlock(false, false),\\n        );\\n\\n      this.scope.exit();\\n      node.handler = this.finishNode(clause, \\\"CatchClause\\\");\\n    }\\n\\n    node.finalizer = this.eat(tt._finally) ? this.parseBlock() : null;\\n\\n    if (!node.handler && !node.finalizer) {\\n      this.raise(Errors.NoCatchOrFinally, { at: node });\\n    }\\n\\n    return this.finishNode(node, \\\"TryStatement\\\");\\n  }\\n\\n  // https://tc39.es/ecma262/#prod-VariableStatement\\n  // https://tc39.es/ecma262/#prod-LexicalDeclaration\\n  parseVarStatement(\\n    this: Parser,\\n    node: Undone<N.VariableDeclaration>,\\n    kind: \\\"var\\\" | \\\"let\\\" | \\\"const\\\" | \\\"using\\\",\\n    allowMissingInitializer: boolean = false,\\n  ): N.VariableDeclaration {\\n    this.next();\\n    this.parseVar(node, false, kind, allowMissingInitializer);\\n    this.semicolon();\\n    return this.finishNode(node, \\\"VariableDeclaration\\\");\\n  }\\n\\n  // https://tc39.es/ecma262/#prod-WhileStatement\\n  parseWhileStatement(\\n    this: Parser,\\n    node: Undone<N.WhileStatement>,\\n  ): N.WhileStatement {\\n    this.next();\\n    node.test = this.parseHeaderExpression();\\n    this.state.labels.push(loopLabel);\\n\\n    // Parse the loop body.\\n    node.body =\\n      // For the smartPipelines plugin:\\n      // Disable topic references from outer contexts within the loop body.\\n      // They are permitted in test expressions, outside of the loop body.\\n      this.withSmartMixTopicForbiddingContext(() =>\\n        // Parse loop body.\\n        this.parseStatement(),\\n      );\\n\\n    this.state.labels.pop();\\n\\n    return this.finishNode(node, \\\"WhileStatement\\\");\\n  }\\n\\n  parseWithStatement(\\n    this: Parser,\\n    node: Undone<N.WithStatement>,\\n  ): N.WithStatement {\\n    if (this.state.strict) {\\n      this.raise(Errors.StrictWith, { at: this.state.startLoc });\\n    }\\n    this.next();\\n    node.object = this.parseHeaderExpression();\\n\\n    // Parse the statement body.\\n    node.body =\\n      // For the smartPipelines plugin:\\n      // Disable topic references from outer contexts within the with statement's body.\\n      // They are permitted in function default-parameter expressions, which are\\n      // part of the outer context, outside of the with statement's body.\\n      this.withSmartMixTopicForbiddingContext(() =>\\n        // Parse the statement body.\\n        this.parseStatement(),\\n      );\\n\\n    return this.finishNode(node, \\\"WithStatement\\\");\\n  }\\n\\n  parseEmptyStatement(node: Undone<N.EmptyStatement>): N.EmptyStatement {\\n    this.next();\\n    return this.finishNode(node, \\\"EmptyStatement\\\");\\n  }\\n\\n  // https://tc39.es/ecma262/#prod-LabelledStatement\\n  parseLabeledStatement(\\n    this: Parser,\\n    node: Undone<N.LabeledStatement>,\\n    maybeName: string,\\n    expr: N.Identifier,\\n    flags: ParseStatementFlag,\\n  ): N.LabeledStatement {\\n    for (const label of this.state.labels) {\\n      if (label.name === maybeName) {\\n        this.raise(Errors.LabelRedeclaration, {\\n          at: expr,\\n          labelName: maybeName,\\n        });\\n      }\\n    }\\n\\n    const kind = tokenIsLoop(this.state.type)\\n      ? \\\"loop\\\"\\n      : this.match(tt._switch)\\n      ? \\\"switch\\\"\\n      : null;\\n    for (let i = this.state.labels.length - 1; i >= 0; i--) {\\n      const label = this.state.labels[i];\\n      if (label.statementStart === node.start) {\\n        label.statementStart = this.state.start;\\n        label.kind = kind;\\n      } else {\\n        break;\\n      }\\n    }\\n\\n    this.state.labels.push({\\n      name: maybeName,\\n      kind: kind,\\n      statementStart: this.state.start,\\n    });\\n    // https://tc39.es/ecma262/#prod-LabelledItem\\n    node.body =\\n      flags & ParseStatementFlag.AllowLabeledFunction\\n        ? this.parseStatementOrSloppyAnnexBFunctionDeclaration(true)\\n        : this.parseStatement();\\n\\n    this.state.labels.pop();\\n    node.label = expr;\\n    return this.finishNode(node, \\\"LabeledStatement\\\");\\n  }\\n\\n  parseExpressionStatement(\\n    node: Undone<N.ExpressionStatement>,\\n    expr: N.Expression,\\n    /* eslint-disable-next-line @typescript-eslint/no-unused-vars -- used in TypeScript parser */\\n    decorators: N.Decorator[] | null,\\n  ) {\\n    node.expression = expr;\\n    this.semicolon();\\n    return this.finishNode(node, \\\"ExpressionStatement\\\");\\n  }\\n\\n  // Parse a semicolon-enclosed block of statements, handling `\\\"use\\n  // strict\\\"` declarations when `allowDirectives` is true (used for\\n  // function bodies).\\n\\n  parseBlock(\\n    this: Parser,\\n    allowDirectives: boolean = false,\\n    createNewLexicalScope: boolean = true,\\n    afterBlockParse?: (hasStrictModeDirective: boolean) => void,\\n  ): N.BlockStatement {\\n    const node = this.startNode<N.BlockStatement>();\\n    if (allowDirectives) {\\n      this.state.strictErrors.clear();\\n    }\\n    this.expect(tt.braceL);\\n    if (createNewLexicalScope) {\\n      this.scope.enter(SCOPE_OTHER);\\n    }\\n    this.parseBlockBody(\\n      node,\\n      allowDirectives,\\n      false,\\n      tt.braceR,\\n      afterBlockParse,\\n    );\\n    if (createNewLexicalScope) {\\n      this.scope.exit();\\n    }\\n    return this.finishNode(node, \\\"BlockStatement\\\");\\n  }\\n\\n  isValidDirective(stmt: N.Statement): boolean {\\n    return (\\n      stmt.type === \\\"ExpressionStatement\\\" &&\\n      stmt.expression.type === \\\"StringLiteral\\\" &&\\n      !stmt.expression.extra.parenthesized\\n    );\\n  }\\n\\n  parseBlockBody(\\n    this: Parser,\\n    node: Undone<N.BlockStatementLike>,\\n    allowDirectives: boolean | undefined | null,\\n    topLevel: boolean,\\n    end: TokenType,\\n    afterBlockParse?: (hasStrictModeDirective: boolean) => void,\\n  ): void {\\n    const body: N.BlockStatementLike[\\\"body\\\"] = (node.body = []);\\n    const directives: N.BlockStatementLike[\\\"directives\\\"] = (node.directives =\\n      []);\\n    this.parseBlockOrModuleBlockBody(\\n      body,\\n      allowDirectives ? directives : undefined,\\n      topLevel,\\n      end,\\n      afterBlockParse,\\n    );\\n  }\\n\\n  // Undefined directives means that directives are not allowed.\\n  // https://tc39.es/ecma262/#prod-Block\\n  // https://tc39.es/ecma262/#prod-ModuleBody\\n  parseBlockOrModuleBlockBody(\\n    this: Parser,\\n    body: N.Statement[],\\n    directives: N.Directive[] | undefined | null,\\n    topLevel: boolean,\\n    end: TokenType,\\n    afterBlockParse?: (hasStrictModeDirective: boolean) => void,\\n  ): void {\\n    const oldStrict = this.state.strict;\\n    let hasStrictModeDirective = false;\\n    let parsedNonDirective = false;\\n\\n    while (!this.match(end)) {\\n      const stmt = topLevel\\n        ? this.parseModuleItem()\\n        : this.parseStatementListItem();\\n\\n      if (directives && !parsedNonDirective) {\\n        if (this.isValidDirective(stmt)) {\\n          const directive = this.stmtToDirective(stmt);\\n          directives.push(directive);\\n\\n          if (\\n            !hasStrictModeDirective &&\\n            directive.value.value === \\\"use strict\\\"\\n          ) {\\n            hasStrictModeDirective = true;\\n            this.setStrict(true);\\n          }\\n\\n          continue;\\n        }\\n        parsedNonDirective = true;\\n        // clear strict errors since the strict mode will not change within the block\\n        this.state.strictErrors.clear();\\n      }\\n      body.push(stmt);\\n    }\\n\\n    if (afterBlockParse) {\\n      afterBlockParse.call(this, hasStrictModeDirective);\\n    }\\n\\n    if (!oldStrict) {\\n      this.setStrict(false);\\n    }\\n\\n    this.next();\\n  }\\n\\n  // Parse a regular `for` loop. The disambiguation code in\\n  // `parseStatement` will already have parsed the init statement or\\n  // expression.\\n\\n  parseFor(\\n    this: Parser,\\n    node: Undone<N.ForStatement>,\\n    init?: N.VariableDeclaration | N.Expression | null,\\n  ): N.ForStatement {\\n    node.init = init;\\n    this.semicolon(/* allowAsi */ false);\\n    node.test = this.match(tt.semi) ? null : this.parseExpression();\\n    this.semicolon(/* allowAsi */ false);\\n    node.update = this.match(tt.parenR) ? null : this.parseExpression();\\n    this.expect(tt.parenR);\\n\\n    // Parse the loop body.\\n    node.body =\\n      // For the smartPipelines plugin: Disable topic references from outer\\n      // contexts within the loop body. They are permitted in test expressions,\\n      // outside of the loop body.\\n      this.withSmartMixTopicForbiddingContext(() =>\\n        // Parse the loop body.\\n        this.parseStatement(),\\n      );\\n\\n    this.scope.exit();\\n    this.state.labels.pop();\\n\\n    return this.finishNode(node, \\\"ForStatement\\\");\\n  }\\n\\n  // Parse a `for`/`in` and `for`/`of` loop, which are almost\\n  // same from parser's perspective.\\n\\n  parseForIn(\\n    this: Parser,\\n    node: Undone<N.ForInOf>,\\n    init: N.VariableDeclaration | N.AssignmentPattern,\\n    awaitAt?: Position | null,\\n  ): N.ForInOf {\\n    const isForIn = this.match(tt._in);\\n    this.next();\\n\\n    if (isForIn) {\\n      if (awaitAt !== null) this.unexpected(awaitAt);\\n    } else {\\n      node.await = awaitAt !== null;\\n    }\\n\\n    if (\\n      init.type === \\\"VariableDeclaration\\\" &&\\n      init.declarations[0].init != null &&\\n      (!isForIn ||\\n        !this.options.annexB ||\\n        this.state.strict ||\\n        init.kind !== \\\"var\\\" ||\\n        init.declarations[0].id.type !== \\\"Identifier\\\")\\n    ) {\\n      this.raise(Errors.ForInOfLoopInitializer, {\\n        at: init,\\n        type: isForIn ? \\\"ForInStatement\\\" : \\\"ForOfStatement\\\",\\n      });\\n    }\\n\\n    if (init.type === \\\"AssignmentPattern\\\") {\\n      this.raise(Errors.InvalidLhs, {\\n        at: init,\\n        ancestor: { type: \\\"ForStatement\\\" },\\n      });\\n    }\\n\\n    node.left = init;\\n    node.right = isForIn\\n      ? this.parseExpression()\\n      : this.parseMaybeAssignAllowIn();\\n    this.expect(tt.parenR);\\n\\n    // Parse the loop body.\\n    node.body =\\n      // For the smartPipelines plugin:\\n      // Disable topic references from outer contexts within the loop body.\\n      // They are permitted in test expressions, outside of the loop body.\\n      this.withSmartMixTopicForbiddingContext(() =>\\n        // Parse loop body.\\n        this.parseStatement(),\\n      );\\n\\n    this.scope.exit();\\n    this.state.labels.pop();\\n\\n    return this.finishNode(node, isForIn ? \\\"ForInStatement\\\" : \\\"ForOfStatement\\\");\\n  }\\n\\n  // Parse a list of variable declarations.\\n\\n  parseVar(\\n    this: Parser,\\n    node: Undone<N.VariableDeclaration>,\\n    isFor: boolean,\\n    kind: \\\"var\\\" | \\\"let\\\" | \\\"const\\\" | \\\"using\\\",\\n    allowMissingInitializer: boolean = false,\\n  ): Undone<N.VariableDeclaration> {\\n    const declarations: N.VariableDeclarator[] = (node.declarations = []);\\n    node.kind = kind;\\n    for (;;) {\\n      const decl = this.startNode<N.VariableDeclarator>();\\n      this.parseVarId(decl, kind);\\n      decl.init = !this.eat(tt.eq)\\n        ? null\\n        : isFor\\n        ? this.parseMaybeAssignDisallowIn()\\n        : this.parseMaybeAssignAllowIn();\\n\\n      if (decl.init === null && !allowMissingInitializer) {\\n        if (\\n          decl.id.type !== \\\"Identifier\\\" &&\\n          !(isFor && (this.match(tt._in) || this.isContextual(tt._of)))\\n        ) {\\n          this.raise(Errors.DeclarationMissingInitializer, {\\n            at: this.state.lastTokEndLoc,\\n            kind: \\\"destructuring\\\",\\n          });\\n        } else if (\\n          kind === \\\"const\\\" &&\\n          !(this.match(tt._in) || this.isContextual(tt._of))\\n        ) {\\n          this.raise(Errors.DeclarationMissingInitializer, {\\n            at: this.state.lastTokEndLoc,\\n            kind: \\\"const\\\",\\n          });\\n        }\\n      }\\n      declarations.push(this.finishNode(decl, \\\"VariableDeclarator\\\"));\\n      if (!this.eat(tt.comma)) break;\\n    }\\n    return node;\\n  }\\n\\n  parseVarId(\\n    this: Parser,\\n    decl: Undone<N.VariableDeclarator>,\\n    kind: \\\"var\\\" | \\\"let\\\" | \\\"const\\\" | \\\"using\\\",\\n  ): void {\\n    // Unlike \\\"let\\\" which must be handled in checkLVal, it suffices to check\\n    // await here because `using` must not precede binding patterns.\\n    if (kind === \\\"using\\\" && !this.inModule && this.match(tt._await)) {\\n      this.raise(Errors.AwaitInUsingBinding, { at: this.state.startLoc });\\n    }\\n    const id = this.parseBindingAtom();\\n    this.checkLVal(id, {\\n      in: { type: \\\"VariableDeclarator\\\" },\\n      binding: kind === \\\"var\\\" ? BIND_VAR : BIND_LEXICAL,\\n    });\\n    decl.id = id;\\n  }\\n\\n  // https://tc39.es/ecma262/#prod-AsyncFunctionExpression\\n  parseAsyncFunctionExpression(\\n    this: Parser,\\n    node: Undone<N.FunctionExpression>,\\n  ): N.FunctionExpression {\\n    return this.parseFunction(node, ParseFunctionFlag.Async);\\n  }\\n\\n  // Parse a function declaration or expression (depending on the\\n  // ParseFunctionFlag.Declaration flag).\\n\\n  parseFunction<T extends N.NormalFunction>(\\n    this: Parser,\\n    node: Undone<T>,\\n    flags: ParseFunctionFlag = ParseFunctionFlag.Expression,\\n  ): T {\\n    const hangingDeclaration = flags & ParseFunctionFlag.HangingDeclaration;\\n    const isDeclaration = !!(flags & ParseFunctionFlag.Declaration);\\n    const requireId = isDeclaration && !(flags & ParseFunctionFlag.NullableId);\\n    const isAsync = !!(flags & ParseFunctionFlag.Async);\\n\\n    this.initFunction(node, isAsync);\\n\\n    if (this.match(tt.star)) {\\n      if (hangingDeclaration) {\\n        this.raise(Errors.GeneratorInSingleStatementContext, {\\n          at: this.state.startLoc,\\n        });\\n      }\\n      this.next(); // eat *\\n      node.generator = true;\\n    }\\n\\n    if (isDeclaration) {\\n      node.id = this.parseFunctionId(requireId);\\n    }\\n\\n    const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;\\n    this.state.maybeInArrowParameters = false;\\n    this.scope.enter(SCOPE_FUNCTION);\\n    this.prodParam.enter(functionFlags(isAsync, node.generator));\\n\\n    if (!isDeclaration) {\\n      node.id = this.parseFunctionId();\\n    }\\n\\n    this.parseFunctionParams(node, /* isConstructor */ false);\\n\\n    // For the smartPipelines plugin: Disable topic references from outer\\n    // contexts within the function body. They are permitted in function\\n    // default-parameter expressions, outside of the function body.\\n    this.withSmartMixTopicForbiddingContext(() => {\\n      // Parse the function body.\\n      this.parseFunctionBodyAndFinish(\\n        node,\\n        isDeclaration ? \\\"FunctionDeclaration\\\" : \\\"FunctionExpression\\\",\\n      );\\n    });\\n\\n    this.prodParam.exit();\\n    this.scope.exit();\\n\\n    if (isDeclaration && !hangingDeclaration) {\\n      // We need to register this _after_ parsing the function body\\n      // because of TypeScript body-less function declarations,\\n      // which shouldn't be added to the scope.\\n      this.registerFunctionStatementId(node as T);\\n    }\\n\\n    this.state.maybeInArrowParameters = oldMaybeInArrowParameters;\\n    return node as T;\\n  }\\n\\n  parseFunctionId(requireId?: boolean): N.Identifier | undefined | null {\\n    return requireId || tokenIsIdentifier(this.state.type)\\n      ? this.parseIdentifier()\\n      : null;\\n  }\\n\\n  parseFunctionParams(\\n    this: Parser,\\n    node: Undone<N.Function>,\\n    isConstructor?: boolean,\\n  ): void {\\n    this.expect(tt.parenL);\\n    this.expressionScope.enter(newParameterDeclarationScope());\\n    node.params = this.parseBindingList(\\n      tt.parenR,\\n      charCodes.rightParenthesis,\\n      ParseBindingListFlags.IS_FUNCTION_PARAMS |\\n        (isConstructor ? ParseBindingListFlags.IS_CONSTRUCTOR_PARAMS : 0),\\n    );\\n\\n    this.expressionScope.exit();\\n  }\\n\\n  registerFunctionStatementId(node: N.Function): void {\\n    if (!node.id) return;\\n\\n    // If it is a regular function declaration in sloppy mode, then it is\\n    // subject to Annex B semantics (BIND_FUNCTION). Otherwise, the binding\\n    // mode depends on properties of the current scope (see\\n    // treatFunctionsAsVar).\\n    this.scope.declareName(\\n      node.id.name,\\n      !this.options.annexB || this.state.strict || node.generator || node.async\\n        ? this.scope.treatFunctionsAsVar\\n          ? BIND_VAR\\n          : BIND_LEXICAL\\n        : BIND_FUNCTION,\\n      node.id.loc.start,\\n    );\\n  }\\n\\n  // Parse a class declaration or literal (depending on the\\n  // `isStatement` parameter).\\n\\n  parseClass<T extends N.Class>(\\n    this: Parser,\\n    node: Undone<T>,\\n    isStatement: /* T === ClassDeclaration */ boolean,\\n    optionalId?: boolean,\\n  ): T {\\n    this.next(); // 'class'\\n\\n    // A class definition is always strict mode code.\\n    const oldStrict = this.state.strict;\\n    this.state.strict = true;\\n\\n    this.parseClassId(node, isStatement, optionalId);\\n    this.parseClassSuper(node);\\n    // this.state.strict is restored in parseClassBody\\n    node.body = this.parseClassBody(!!node.superClass, oldStrict);\\n\\n    return this.finishNode(\\n      node,\\n      isStatement ? \\\"ClassDeclaration\\\" : \\\"ClassExpression\\\",\\n    );\\n  }\\n\\n  isClassProperty(): boolean {\\n    return this.match(tt.eq) || this.match(tt.semi) || this.match(tt.braceR);\\n  }\\n\\n  isClassMethod(): boolean {\\n    return this.match(tt.parenL);\\n  }\\n\\n  isNonstaticConstructor(method: N.ClassMethod | N.ClassProperty): boolean {\\n    return (\\n      !method.computed &&\\n      !method.static &&\\n      (method.key.name === \\\"constructor\\\" || // Identifier\\n        method.key.value === \\\"constructor\\\") // String literal\\n    );\\n  }\\n\\n  // https://tc39.es/ecma262/#prod-ClassBody\\n  parseClassBody(\\n    this: Parser,\\n    hadSuperClass: boolean,\\n    oldStrict: boolean,\\n  ): N.ClassBody {\\n    this.classScope.enter();\\n\\n    const state: N.ParseClassMemberState = {\\n      hadConstructor: false,\\n      hadSuperClass,\\n    };\\n    let decorators: N.Decorator[] = [];\\n    const classBody = this.startNode<N.ClassBody>();\\n    classBody.body = [];\\n\\n    this.expect(tt.braceL);\\n\\n    // For the smartPipelines plugin: Disable topic references from outer\\n    // contexts within the class body.\\n    this.withSmartMixTopicForbiddingContext(() => {\\n      // Parse the contents within the braces.\\n      while (!this.match(tt.braceR)) {\\n        if (this.eat(tt.semi)) {\\n          if (decorators.length > 0) {\\n            throw this.raise(Errors.DecoratorSemicolon, {\\n              at: this.state.lastTokEndLoc,\\n            });\\n          }\\n          continue;\\n        }\\n\\n        if (this.match(tt.at)) {\\n          decorators.push(this.parseDecorator());\\n          continue;\\n        }\\n\\n        const member = this.startNode<N.ClassMember>();\\n\\n        // steal the decorators if there are any\\n        if (decorators.length) {\\n          // @ts-expect-error Fixme\\n          member.decorators = decorators;\\n          this.resetStartLocationFromNode(member, decorators[0]);\\n          decorators = [];\\n        }\\n\\n        this.parseClassMember(classBody, member, state);\\n\\n        if (\\n          // @ts-expect-error Fixme\\n          member.kind === \\\"constructor\\\" &&\\n          // @ts-expect-error Fixme\\n          member.decorators &&\\n          // @ts-expect-error Fixme\\n          member.decorators.length > 0\\n        ) {\\n          this.raise(Errors.DecoratorConstructor, { at: member });\\n        }\\n      }\\n    });\\n\\n    this.state.strict = oldStrict;\\n\\n    this.next(); // eat `}`\\n\\n    if (decorators.length) {\\n      throw this.raise(Errors.TrailingDecorator, { at: this.state.startLoc });\\n    }\\n\\n    this.classScope.exit();\\n\\n    return this.finishNode(classBody, \\\"ClassBody\\\");\\n  }\\n\\n  // returns true if the current identifier is a method/field name,\\n  // false if it is a modifier\\n  parseClassMemberFromModifier(\\n    this: Parser,\\n    classBody: Undone<N.ClassBody>,\\n    member: Undone<N.ClassMember>,\\n  ): boolean {\\n    const key = this.parseIdentifier(true); // eats the modifier\\n\\n    if (this.isClassMethod()) {\\n      const method: N.ClassMethod = member as any;\\n\\n      // a method named like the modifier\\n      method.kind = \\\"method\\\";\\n      method.computed = false;\\n      method.key = key;\\n      method.static = false;\\n      this.pushClassMethod(\\n        classBody,\\n        method,\\n        false,\\n        false,\\n        /* isConstructor */ false,\\n        false,\\n      );\\n      return true;\\n    } else if (this.isClassProperty()) {\\n      const prop: N.ClassProperty = member as any;\\n\\n      // a property named like the modifier\\n      prop.computed = false;\\n      prop.key = key;\\n      prop.static = false;\\n      classBody.body.push(this.parseClassProperty(prop));\\n      return true;\\n    }\\n    this.resetPreviousNodeTrailingComments(key);\\n    return false;\\n  }\\n\\n  parseClassMember(\\n    this: Parser,\\n    classBody: Undone<N.ClassBody>,\\n    member: Undone<N.ClassMember>,\\n    state: N.ParseClassMemberState,\\n  ): void {\\n    const isStatic = this.isContextual(tt._static);\\n\\n    if (isStatic) {\\n      if (this.parseClassMemberFromModifier(classBody, member)) {\\n        // a class element named 'static'\\n        return;\\n      }\\n      if (this.eat(tt.braceL)) {\\n        this.parseClassStaticBlock(classBody, member as any as N.StaticBlock);\\n        return;\\n      }\\n    }\\n\\n    this.parseClassMemberWithIsStatic(classBody, member, state, isStatic);\\n  }\\n\\n  parseClassMemberWithIsStatic(\\n    this: Parser,\\n    classBody: Undone<N.ClassBody>,\\n    member: Undone<N.ClassMember>,\\n    state: N.ParseClassMemberState,\\n    isStatic: boolean,\\n  ) {\\n    const publicMethod = member as N.ClassMethod;\\n    const privateMethod = member as N.ClassPrivateMethod;\\n    const publicProp = member as N.ClassProperty;\\n    const privateProp = member as N.ClassPrivateProperty;\\n    const accessorProp = member as N.ClassAccessorProperty;\\n\\n    const method: typeof publicMethod | typeof privateMethod = publicMethod;\\n    const publicMember: typeof publicMethod | typeof publicProp = publicMethod;\\n\\n    member.static = isStatic;\\n    this.parsePropertyNamePrefixOperator(member);\\n\\n    if (this.eat(tt.star)) {\\n      // a generator\\n      method.kind = \\\"method\\\";\\n      const isPrivateName = this.match(tt.privateName);\\n      this.parseClassElementName(method);\\n\\n      if (isPrivateName) {\\n        // Private generator method\\n        this.pushClassPrivateMethod(classBody, privateMethod, true, false);\\n        return;\\n      }\\n\\n      if (this.isNonstaticConstructor(publicMethod)) {\\n        this.raise(Errors.ConstructorIsGenerator, {\\n          at: publicMethod.key,\\n        });\\n      }\\n\\n      this.pushClassMethod(\\n        classBody,\\n        publicMethod,\\n        true,\\n        false,\\n        /* isConstructor */ false,\\n        false,\\n      );\\n\\n      return;\\n    }\\n\\n    const isContextual =\\n      tokenIsIdentifier(this.state.type) && !this.state.containsEsc;\\n    const isPrivate = this.match(tt.privateName);\\n    const key = this.parseClassElementName(member);\\n    const maybeQuestionTokenStartLoc = this.state.startLoc;\\n\\n    this.parsePostMemberNameModifiers(publicMember);\\n\\n    if (this.isClassMethod()) {\\n      method.kind = \\\"method\\\";\\n\\n      if (isPrivate) {\\n        this.pushClassPrivateMethod(classBody, privateMethod, false, false);\\n        return;\\n      }\\n\\n      // a normal method\\n      const isConstructor = this.isNonstaticConstructor(publicMethod);\\n      let allowsDirectSuper = false;\\n      if (isConstructor) {\\n        publicMethod.kind = \\\"constructor\\\";\\n\\n        // TypeScript allows multiple overloaded constructor declarations.\\n        if (state.hadConstructor && !this.hasPlugin(\\\"typescript\\\")) {\\n          this.raise(Errors.DuplicateConstructor, { at: key });\\n        }\\n        if (isConstructor && this.hasPlugin(\\\"typescript\\\") && member.override) {\\n          this.raise(Errors.OverrideOnConstructor, { at: key });\\n        }\\n        state.hadConstructor = true;\\n        allowsDirectSuper = state.hadSuperClass;\\n      }\\n\\n      this.pushClassMethod(\\n        classBody,\\n        publicMethod,\\n        false,\\n        false,\\n        isConstructor,\\n        allowsDirectSuper,\\n      );\\n    } else if (this.isClassProperty()) {\\n      if (isPrivate) {\\n        this.pushClassPrivateProperty(classBody, privateProp);\\n      } else {\\n        this.pushClassProperty(classBody, publicProp);\\n      }\\n    } else if (\\n      isContextual &&\\n      key.name === \\\"async\\\" &&\\n      !this.isLineTerminator()\\n    ) {\\n      // an async method\\n      this.resetPreviousNodeTrailingComments(key);\\n      const isGenerator = this.eat(tt.star);\\n\\n      if (publicMember.optional) {\\n        this.unexpected(maybeQuestionTokenStartLoc);\\n      }\\n\\n      method.kind = \\\"method\\\";\\n      // The so-called parsed name would have been \\\"async\\\": get the real name.\\n      const isPrivate = this.match(tt.privateName);\\n      this.parseClassElementName(method);\\n      this.parsePostMemberNameModifiers(publicMember);\\n\\n      if (isPrivate) {\\n        // private async method\\n        this.pushClassPrivateMethod(\\n          classBody,\\n          privateMethod,\\n          isGenerator,\\n          true,\\n        );\\n      } else {\\n        if (this.isNonstaticConstructor(publicMethod)) {\\n          this.raise(Errors.ConstructorIsAsync, { at: publicMethod.key });\\n        }\\n\\n        this.pushClassMethod(\\n          classBody,\\n          publicMethod,\\n          isGenerator,\\n          true,\\n          /* isConstructor */ false,\\n          false,\\n        );\\n      }\\n    } else if (\\n      isContextual &&\\n      (key.name === \\\"get\\\" || key.name === \\\"set\\\") &&\\n      !(this.match(tt.star) && this.isLineTerminator())\\n    ) {\\n      // `get\\\\n*` is an uninitialized property named 'get' followed by a generator.\\n      // a getter or setter\\n      this.resetPreviousNodeTrailingComments(key);\\n      method.kind = key.name;\\n      // The so-called parsed name would have been \\\"get/set\\\": get the real name.\\n      const isPrivate = this.match(tt.privateName);\\n      this.parseClassElementName(publicMethod);\\n\\n      if (isPrivate) {\\n        // private getter/setter\\n        this.pushClassPrivateMethod(classBody, privateMethod, false, false);\\n      } else {\\n        if (this.isNonstaticConstructor(publicMethod)) {\\n          this.raise(Errors.ConstructorIsAccessor, { at: publicMethod.key });\\n        }\\n        this.pushClassMethod(\\n          classBody,\\n          publicMethod,\\n          false,\\n          false,\\n          /* isConstructor */ false,\\n          false,\\n        );\\n      }\\n\\n      this.checkGetterSetterParams(publicMethod);\\n    } else if (\\n      isContextual &&\\n      key.name === \\\"accessor\\\" &&\\n      !this.isLineTerminator()\\n    ) {\\n      this.expectPlugin(\\\"decoratorAutoAccessors\\\");\\n      this.resetPreviousNodeTrailingComments(key);\\n\\n      // The so-called parsed name would have been \\\"accessor\\\": get the real name.\\n      const isPrivate = this.match(tt.privateName);\\n      this.parseClassElementName(publicProp);\\n      this.pushClassAccessorProperty(classBody, accessorProp, isPrivate);\\n    } else if (this.isLineTerminator()) {\\n      // an uninitialized class property (due to ASI, since we don't otherwise recognize the next token)\\n      if (isPrivate) {\\n        this.pushClassPrivateProperty(classBody, privateProp);\\n      } else {\\n        this.pushClassProperty(classBody, publicProp);\\n      }\\n    } else {\\n      this.unexpected();\\n    }\\n  }\\n\\n  // https://tc39.es/ecma262/#prod-ClassElementName\\n  parseClassElementName(\\n    this: Parser,\\n    member: Undone<N.ClassMember>,\\n  ): N.Expression | N.Identifier {\\n    const { type, value } = this.state;\\n    if (\\n      (type === tt.name || type === tt.string) &&\\n      member.static &&\\n      value === \\\"prototype\\\"\\n    ) {\\n      this.raise(Errors.StaticPrototype, { at: this.state.startLoc });\\n    }\\n\\n    if (type === tt.privateName) {\\n      if (value === \\\"constructor\\\") {\\n        this.raise(Errors.ConstructorClassPrivateField, {\\n          at: this.state.startLoc,\\n        });\\n      }\\n      const key = this.parsePrivateName();\\n      member.key = key;\\n      return key;\\n    }\\n\\n    return this.parsePropertyName(member);\\n  }\\n\\n  parseClassStaticBlock(\\n    this: Parser,\\n    classBody: Undone<N.ClassBody>,\\n    member: Undone<\\n      N.StaticBlock & {\\n        decorators?: Array<N.Decorator>;\\n      }\\n    >,\\n  ) {\\n    // Start a new lexical scope\\n    this.scope.enter(SCOPE_CLASS | SCOPE_STATIC_BLOCK | SCOPE_SUPER);\\n    // Start a new scope with regard to loop labels\\n    const oldLabels = this.state.labels;\\n    this.state.labels = [];\\n    // ClassStaticBlockStatementList:\\n    //   StatementList[~Yield, ~Await, ~Return] opt\\n    this.prodParam.enter(PARAM);\\n    const body: N.Node[] = (member.body = []);\\n    this.parseBlockOrModuleBlockBody(body, undefined, false, tt.braceR);\\n    this.prodParam.exit();\\n    this.scope.exit();\\n    this.state.labels = oldLabels;\\n    classBody.body.push(this.finishNode<N.StaticBlock>(member, \\\"StaticBlock\\\"));\\n    if (member.decorators?.length) {\\n      this.raise(Errors.DecoratorStaticBlock, { at: member });\\n    }\\n  }\\n\\n  pushClassProperty(\\n    this: Parser,\\n    classBody: Undone<N.ClassBody>,\\n    prop: N.ClassProperty,\\n  ) {\\n    if (\\n      !prop.computed &&\\n      (prop.key.name === \\\"constructor\\\" || prop.key.value === \\\"constructor\\\")\\n    ) {\\n      // Non-computed field, which is either an identifier named \\\"constructor\\\"\\n      // or a string literal named \\\"constructor\\\"\\n      this.raise(Errors.ConstructorClassField, { at: prop.key });\\n    }\\n\\n    classBody.body.push(this.parseClassProperty(prop));\\n  }\\n\\n  pushClassPrivateProperty(\\n    this: Parser,\\n    classBody: Undone<N.ClassBody>,\\n    prop: Undone<N.ClassPrivateProperty>,\\n  ) {\\n    const node = this.parseClassPrivateProperty(prop);\\n    classBody.body.push(node);\\n\\n    this.classScope.declarePrivateName(\\n      this.getPrivateNameSV(node.key),\\n      CLASS_ELEMENT_OTHER,\\n      node.key.loc.start,\\n    );\\n  }\\n\\n  pushClassAccessorProperty(\\n    this: Parser,\\n    classBody: Undone<N.ClassBody>,\\n    prop: N.ClassAccessorProperty,\\n    isPrivate: boolean,\\n  ) {\\n    if (!isPrivate && !prop.computed) {\\n      // Not private, so not node is not a PrivateName and we can safely cast\\n      const key = prop.key as N.Expression;\\n\\n      if (key.name === \\\"constructor\\\" || key.value === \\\"constructor\\\") {\\n        // Non-computed field, which is either an identifier named \\\"constructor\\\"\\n        // or a string literal named \\\"constructor\\\"\\n        this.raise(Errors.ConstructorClassField, { at: key });\\n      }\\n    }\\n\\n    const node = this.parseClassAccessorProperty(prop);\\n    classBody.body.push(node);\\n\\n    if (isPrivate) {\\n      this.classScope.declarePrivateName(\\n        this.getPrivateNameSV(node.key),\\n        CLASS_ELEMENT_OTHER,\\n        node.key.loc.start,\\n      );\\n    }\\n  }\\n\\n  pushClassMethod(\\n    this: Parser,\\n    classBody: Undone<N.ClassBody>,\\n    method: Undone<N.ClassMethod>,\\n    isGenerator: boolean,\\n    isAsync: boolean,\\n    isConstructor: boolean,\\n    allowsDirectSuper: boolean,\\n  ): void {\\n    classBody.body.push(\\n      this.parseMethod(\\n        method,\\n        isGenerator,\\n        isAsync,\\n        isConstructor,\\n        allowsDirectSuper,\\n        \\\"ClassMethod\\\",\\n        true,\\n      ),\\n    );\\n  }\\n\\n  pushClassPrivateMethod(\\n    this: Parser,\\n    classBody: Undone<N.ClassBody>,\\n    method: Undone<N.ClassPrivateMethod>,\\n    isGenerator: boolean,\\n    isAsync: boolean,\\n  ): void {\\n    const node = this.parseMethod(\\n      method,\\n      isGenerator,\\n      isAsync,\\n      /* isConstructor */ false,\\n      false,\\n      \\\"ClassPrivateMethod\\\",\\n      true,\\n    );\\n    classBody.body.push(node);\\n\\n    const kind =\\n      node.kind === \\\"get\\\"\\n        ? node.static\\n          ? CLASS_ELEMENT_STATIC_GETTER\\n          : CLASS_ELEMENT_INSTANCE_GETTER\\n        : node.kind === \\\"set\\\"\\n        ? node.static\\n          ? CLASS_ELEMENT_STATIC_SETTER\\n          : CLASS_ELEMENT_INSTANCE_SETTER\\n        : CLASS_ELEMENT_OTHER;\\n    this.declareClassPrivateMethodInScope(node, kind);\\n  }\\n\\n  declareClassPrivateMethodInScope(\\n    node: Undone<\\n      N.ClassPrivateMethod | N.EstreeMethodDefinition | N.TSDeclareMethod\\n    >,\\n    kind: number,\\n  ) {\\n    this.classScope.declarePrivateName(\\n      this.getPrivateNameSV(node.key),\\n      kind,\\n      node.key.loc.start,\\n    );\\n  }\\n\\n  // Overridden in typescript.js\\n  parsePostMemberNameModifiers(\\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\\n    methodOrProp: Undone<N.ClassMethod | N.ClassProperty>,\\n  ): void {}\\n\\n  // https://tc39.es/ecma262/#prod-FieldDefinition\\n  parseClassPrivateProperty(\\n    this: Parser,\\n    node: Undone<N.ClassPrivateProperty>,\\n  ): N.ClassPrivateProperty {\\n    this.parseInitializer(node);\\n    this.semicolon();\\n    return this.finishNode(node, \\\"ClassPrivateProperty\\\");\\n  }\\n\\n  // https://tc39.es/ecma262/#prod-FieldDefinition\\n  parseClassProperty(this: Parser, node: N.ClassProperty): N.ClassProperty {\\n    this.parseInitializer(node);\\n    this.semicolon();\\n    return this.finishNode(node, \\\"ClassProperty\\\");\\n  }\\n\\n  parseClassAccessorProperty(\\n    this: Parser,\\n    node: N.ClassAccessorProperty,\\n  ): N.ClassAccessorProperty {\\n    this.parseInitializer(node);\\n    this.semicolon();\\n    return this.finishNode(node, \\\"ClassAccessorProperty\\\");\\n  }\\n\\n  // https://tc39.es/ecma262/#prod-Initializer\\n  parseInitializer(\\n    this: Parser,\\n    node: Undone<\\n      N.ClassProperty | N.ClassPrivateProperty | N.ClassAccessorProperty\\n    >,\\n  ): void {\\n    this.scope.enter(SCOPE_CLASS | SCOPE_SUPER);\\n    this.expressionScope.enter(newExpressionScope());\\n    this.prodParam.enter(PARAM);\\n    node.value = this.eat(tt.eq) ? this.parseMaybeAssignAllowIn() : null;\\n    this.expressionScope.exit();\\n    this.prodParam.exit();\\n    this.scope.exit();\\n  }\\n\\n  parseClassId(\\n    node: Undone<N.Class>,\\n    isStatement: boolean,\\n    optionalId?: boolean | null,\\n    bindingType: BindingTypes = BIND_CLASS,\\n  ): void {\\n    if (tokenIsIdentifier(this.state.type)) {\\n      node.id = this.parseIdentifier();\\n      if (isStatement) {\\n        this.declareNameFromIdentifier(node.id, bindingType);\\n      }\\n    } else {\\n      if (optionalId || !isStatement) {\\n        node.id = null;\\n      } else {\\n        throw this.raise(Errors.MissingClassName, { at: this.state.startLoc });\\n      }\\n    }\\n  }\\n\\n  // https://tc39.es/ecma262/#prod-ClassHeritage\\n  parseClassSuper(this: Parser, node: Undone<N.Class>): void {\\n    node.superClass = this.eat(tt._extends) ? this.parseExprSubscripts() : null;\\n  }\\n\\n  // Parses module export declaration.\\n  // https://tc39.es/ecma262/#prod-ExportDeclaration\\n\\n  parseExport(\\n    this: Parser,\\n    node: Undone<\\n      | N.ExportDefaultDeclaration\\n      | N.ExportAllDeclaration\\n      | N.ExportNamedDeclaration\\n    >,\\n    decorators: N.Decorator[] | null,\\n  ): N.AnyExport {\\n    const hasDefault = this.maybeParseExportDefaultSpecifier(\\n      // @ts-expect-error todo(flow->ts)\\n      node,\\n    );\\n    const parseAfterDefault = !hasDefault || this.eat(tt.comma);\\n    const hasStar =\\n      parseAfterDefault &&\\n      this.eatExportStar(\\n        // @ts-expect-error todo(flow->ts)\\n        node,\\n      );\\n    const hasNamespace =\\n      hasStar &&\\n      this.maybeParseExportNamespaceSpecifier(\\n        // @ts-expect-error todo(flow->ts)\\n        node,\\n      );\\n    const parseAfterNamespace =\\n      parseAfterDefault && (!hasNamespace || this.eat(tt.comma));\\n    const isFromRequired = hasDefault || hasStar;\\n\\n    if (hasStar && !hasNamespace) {\\n      if (hasDefault) this.unexpected();\\n      if (decorators) {\\n        throw this.raise(Errors.UnsupportedDecoratorExport, { at: node });\\n      }\\n      this.parseExportFrom(node as Undone<N.ExportNamedDeclaration>, true);\\n\\n      return this.finishNode(node, \\\"ExportAllDeclaration\\\");\\n    }\\n\\n    const hasSpecifiers = this.maybeParseExportNamedSpecifiers(\\n      // @ts-expect-error todo(flow->ts)\\n      node,\\n    );\\n\\n    if (hasDefault && parseAfterDefault && !hasStar && !hasSpecifiers) {\\n      this.unexpected(null, tt.braceL);\\n    }\\n\\n    if (hasNamespace && parseAfterNamespace) {\\n      this.unexpected(null, tt._from);\\n    }\\n\\n    let hasDeclaration;\\n    if (isFromRequired || hasSpecifiers) {\\n      hasDeclaration = false;\\n      if (decorators) {\\n        throw this.raise(Errors.UnsupportedDecoratorExport, { at: node });\\n      }\\n      this.parseExportFrom(\\n        node as Undone<N.ExportNamedDeclaration>,\\n        isFromRequired,\\n      );\\n    } else {\\n      hasDeclaration = this.maybeParseExportDeclaration(\\n        node as Undone<N.ExportNamedDeclaration>,\\n      );\\n    }\\n\\n    if (isFromRequired || hasSpecifiers || hasDeclaration) {\\n      const node2 = node as Undone<N.ExportNamedDeclaration>;\\n      this.checkExport(node2, true, false, !!node2.source);\\n      if (node2.declaration?.type === \\\"ClassDeclaration\\\") {\\n        this.maybeTakeDecorators(decorators, node2.declaration, node2);\\n      } else if (decorators) {\\n        throw this.raise(Errors.UnsupportedDecoratorExport, { at: node });\\n      }\\n      return this.finishNode(node2, \\\"ExportNamedDeclaration\\\");\\n    }\\n\\n    if (this.eat(tt._default)) {\\n      const node2 = node as Undone<N.ExportDefaultDeclaration>;\\n      // export default ...\\n      const decl = this.parseExportDefaultExpression();\\n      node2.declaration = decl;\\n\\n      if (decl.type === \\\"ClassDeclaration\\\") {\\n        this.maybeTakeDecorators(decorators, decl as N.ClassDeclaration, node2);\\n      } else if (decorators) {\\n        throw this.raise(Errors.UnsupportedDecoratorExport, { at: node });\\n      }\\n\\n      this.checkExport(node2, true, true);\\n\\n      return this.finishNode(node2, \\\"ExportDefaultDeclaration\\\");\\n    }\\n\\n    this.unexpected(null, tt.braceL);\\n  }\\n\\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\\n  eatExportStar(node: N.Node): boolean {\\n    return this.eat(tt.star);\\n  }\\n\\n  maybeParseExportDefaultSpecifier(node: N.Node): boolean {\\n    if (this.isExportDefaultSpecifier()) {\\n      // export defaultObj ...\\n      this.expectPlugin(\\\"exportDefaultFrom\\\");\\n      const specifier = this.startNode();\\n      specifier.exported = this.parseIdentifier(true);\\n      node.specifiers = [this.finishNode(specifier, \\\"ExportDefaultSpecifier\\\")];\\n      return true;\\n    }\\n    return false;\\n  }\\n\\n  maybeParseExportNamespaceSpecifier(node: N.Node): boolean {\\n    if (this.isContextual(tt._as)) {\\n      if (!node.specifiers) node.specifiers = [];\\n\\n      const specifier = this.startNodeAt(this.state.lastTokStartLoc);\\n\\n      this.next();\\n\\n      specifier.exported = this.parseModuleExportName();\\n      node.specifiers.push(\\n        this.finishNode(specifier, \\\"ExportNamespaceSpecifier\\\"),\\n      );\\n      return true;\\n    }\\n    return false;\\n  }\\n\\n  maybeParseExportNamedSpecifiers(node: N.Node): boolean {\\n    if (this.match(tt.braceL)) {\\n      if (!node.specifiers) node.specifiers = [];\\n      const isTypeExport = node.exportKind === \\\"type\\\";\\n      node.specifiers.push(...this.parseExportSpecifiers(isTypeExport));\\n\\n      node.source = null;\\n      node.declaration = null;\\n      if (this.hasPlugin(\\\"importAssertions\\\")) {\\n        node.assertions = [];\\n      }\\n\\n      return true;\\n    }\\n    return false;\\n  }\\n\\n  maybeParseExportDeclaration(\\n    this: Parser,\\n    node: Undone<N.ExportNamedDeclaration>,\\n  ): boolean {\\n    if (this.shouldParseExportDeclaration()) {\\n      node.specifiers = [];\\n      node.source = null;\\n      if (this.hasPlugin(\\\"importAssertions\\\")) {\\n        node.assertions = [];\\n      }\\n      node.declaration = this.parseExportDeclaration(node);\\n      return true;\\n    }\\n    return false;\\n  }\\n\\n  isAsyncFunction(): boolean {\\n    if (!this.isContextual(tt._async)) return false;\\n    const next = this.nextTokenStart();\\n    return (\\n      !lineBreak.test(this.input.slice(this.state.pos, next)) &&\\n      this.isUnparsedContextual(next, \\\"function\\\")\\n    );\\n  }\\n\\n  parseExportDefaultExpression(this: Parser): N.Expression | N.Declaration {\\n    const expr = this.startNode();\\n\\n    if (this.match(tt._function)) {\\n      this.next();\\n      return this.parseFunction(\\n        expr as Undone<N.FunctionDeclaration>,\\n        ParseFunctionFlag.Declaration | ParseFunctionFlag.NullableId,\\n      );\\n    } else if (this.isAsyncFunction()) {\\n      this.next(); // eat 'async'\\n      this.next(); // eat 'function'\\n      return this.parseFunction(\\n        expr as Undone<N.FunctionDeclaration>,\\n        ParseFunctionFlag.Declaration |\\n          ParseFunctionFlag.NullableId |\\n          ParseFunctionFlag.Async,\\n      );\\n    }\\n\\n    if (this.match(tt._class)) {\\n      return this.parseClass(expr as Undone<N.ClassExpression>, true, true);\\n    }\\n\\n    if (this.match(tt.at)) {\\n      if (\\n        this.hasPlugin(\\\"decorators\\\") &&\\n        this.getPluginOption(\\\"decorators\\\", \\\"decoratorsBeforeExport\\\") === true\\n      ) {\\n        this.raise(Errors.DecoratorBeforeExport, { at: this.state.startLoc });\\n      }\\n      return this.parseClass(\\n        this.maybeTakeDecorators(\\n          this.parseDecorators(false),\\n          this.startNode<N.ClassDeclaration>(),\\n        ),\\n        true,\\n        true,\\n      );\\n    }\\n\\n    if (this.match(tt._const) || this.match(tt._var) || this.isLet()) {\\n      throw this.raise(Errors.UnsupportedDefaultExport, {\\n        at: this.state.startLoc,\\n      });\\n    }\\n\\n    const res = this.parseMaybeAssignAllowIn();\\n    this.semicolon();\\n    return res;\\n  }\\n\\n  // https://tc39.es/ecma262/#prod-ExportDeclaration\\n  parseExportDeclaration(\\n    this: Parser,\\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\\n    node: Undone<N.ExportNamedDeclaration>,\\n  ): N.Declaration | undefined | null {\\n    if (this.match(tt._class)) {\\n      const node = this.parseClass(\\n        this.startNode<N.ClassDeclaration>(),\\n        true,\\n        false,\\n      );\\n      return node;\\n    }\\n    return this.parseStatementListItem() as N.Declaration;\\n  }\\n\\n  isExportDefaultSpecifier(): boolean {\\n    const { type } = this.state;\\n    if (tokenIsIdentifier(type)) {\\n      if ((type === tt._async && !this.state.containsEsc) || type === tt._let) {\\n        return false;\\n      }\\n      if (\\n        (type === tt._type || type === tt._interface) &&\\n        !this.state.containsEsc\\n      ) {\\n        const { type: nextType } = this.lookahead();\\n        // If we see any variable name other than `from` after `type` keyword,\\n        // we consider it as flow/typescript type exports\\n        // note that this approach may fail on some pedantic cases\\n        // export type from = number\\n        if (\\n          (tokenIsIdentifier(nextType) && nextType !== tt._from) ||\\n          nextType === tt.braceL\\n        ) {\\n          this.expectOnePlugin([\\\"flow\\\", \\\"typescript\\\"]);\\n          return false;\\n        }\\n      }\\n    } else if (!this.match(tt._default)) {\\n      return false;\\n    }\\n\\n    const next = this.nextTokenStart();\\n    const hasFrom = this.isUnparsedContextual(next, \\\"from\\\");\\n    if (\\n      this.input.charCodeAt(next) === charCodes.comma ||\\n      (tokenIsIdentifier(this.state.type) && hasFrom)\\n    ) {\\n      return true;\\n    }\\n    // lookahead again when `export default from` is seen\\n    if (this.match(tt._default) && hasFrom) {\\n      const nextAfterFrom = this.input.charCodeAt(\\n        this.nextTokenStartSince(next + 4),\\n      );\\n      return (\\n        nextAfterFrom === charCodes.quotationMark ||\\n        nextAfterFrom === charCodes.apostrophe\\n      );\\n    }\\n    return false;\\n  }\\n\\n  parseExportFrom(\\n    this: Parser,\\n    node: Undone<N.ExportNamedDeclaration>,\\n    expect?: boolean,\\n  ): void {\\n    if (this.eatContextual(tt._from)) {\\n      node.source = this.parseImportSource();\\n      this.checkExport(node);\\n      const assertions = this.maybeParseImportAssertions();\\n      if (assertions) {\\n        node.assertions = assertions;\\n        this.checkJSONModuleImport(node);\\n      }\\n    } else if (expect) {\\n      this.unexpected();\\n    }\\n\\n    this.semicolon();\\n  }\\n\\n  shouldParseExportDeclaration(): boolean {\\n    const { type } = this.state;\\n    if (type === tt.at) {\\n      this.expectOnePlugin([\\\"decorators\\\", \\\"decorators-legacy\\\"]);\\n      if (this.hasPlugin(\\\"decorators\\\")) {\\n        if (\\n          this.getPluginOption(\\\"decorators\\\", \\\"decoratorsBeforeExport\\\") === true\\n        ) {\\n          this.raise(Errors.DecoratorBeforeExport, {\\n            at: this.state.startLoc,\\n          });\\n        }\\n\\n        return true;\\n      }\\n    }\\n\\n    return (\\n      type === tt._var ||\\n      type === tt._const ||\\n      type === tt._function ||\\n      type === tt._class ||\\n      this.isLet() ||\\n      this.isAsyncFunction()\\n    );\\n  }\\n\\n  checkExport(\\n    node: Undone<N.ExportNamedDeclaration | N.ExportDefaultDeclaration>,\\n    checkNames?: boolean,\\n    isDefault?: boolean,\\n    isFrom?: boolean,\\n  ): void {\\n    if (checkNames) {\\n      // Check for duplicate exports\\n      if (isDefault) {\\n        // Default exports\\n        this.checkDuplicateExports(node, \\\"default\\\");\\n        if (this.hasPlugin(\\\"exportDefaultFrom\\\")) {\\n          const declaration = (node as any as N.ExportDefaultDeclaration)\\n            .declaration;\\n          if (\\n            declaration.type === \\\"Identifier\\\" &&\\n            declaration.name === \\\"from\\\" &&\\n            declaration.end - declaration.start === 4 && // does not contain escape\\n            !declaration.extra?.parenthesized\\n          ) {\\n            this.raise(Errors.ExportDefaultFromAsIdentifier, {\\n              at: declaration,\\n            });\\n          }\\n        }\\n        // @ts-expect-error node.specifiers may not exist\\n      } else if (node.specifiers && node.specifiers.length) {\\n        // Named exports\\n        // @ts-expect-error node.specifiers may not exist\\n        for (const specifier of node.specifiers) {\\n          const { exported } = specifier;\\n          const exportName =\\n            exported.type === \\\"Identifier\\\" ? exported.name : exported.value;\\n          this.checkDuplicateExports(specifier, exportName);\\n          if (!isFrom && specifier.local) {\\n            const { local } = specifier;\\n            if (local.type !== \\\"Identifier\\\") {\\n              this.raise(Errors.ExportBindingIsString, {\\n                at: specifier,\\n                localName: local.value,\\n                exportName,\\n              });\\n            } else {\\n              // check for keywords used as local names\\n              this.checkReservedWord(local.name, local.loc.start, true, false);\\n              // check if export is defined\\n              this.scope.checkLocalExport(local);\\n            }\\n          }\\n        }\\n      } else if (node.declaration) {\\n        // Exported declarations\\n        if (\\n          node.declaration.type === \\\"FunctionDeclaration\\\" ||\\n          node.declaration.type === \\\"ClassDeclaration\\\"\\n        ) {\\n          const id = node.declaration.id;\\n          if (!id) throw new Error(\\\"Assertion failure\\\");\\n\\n          this.checkDuplicateExports(node, id.name);\\n        } else if (node.declaration.type === \\\"VariableDeclaration\\\") {\\n          for (const declaration of node.declaration.declarations) {\\n            this.checkDeclaration(declaration.id);\\n          }\\n        }\\n      }\\n    }\\n  }\\n\\n  checkDeclaration(node: N.Pattern | N.ObjectProperty): void {\\n    if (node.type === \\\"Identifier\\\") {\\n      this.checkDuplicateExports(node, node.name);\\n    } else if (node.type === \\\"ObjectPattern\\\") {\\n      for (const prop of node.properties) {\\n        this.checkDeclaration(prop);\\n      }\\n    } else if (node.type === \\\"ArrayPattern\\\") {\\n      for (const elem of node.elements) {\\n        if (elem) {\\n          this.checkDeclaration(elem);\\n        }\\n      }\\n    } else if (node.type === \\\"ObjectProperty\\\") {\\n      // @ts-expect-error migrate to Babel types\\n      this.checkDeclaration(node.value);\\n    } else if (node.type === \\\"RestElement\\\") {\\n      this.checkDeclaration(node.argument);\\n    } else if (node.type === \\\"AssignmentPattern\\\") {\\n      this.checkDeclaration(node.left);\\n    }\\n  }\\n\\n  checkDuplicateExports(\\n    node: Undone<\\n      | N.Identifier\\n      | N.StringLiteral\\n      | N.ExportNamedDeclaration\\n      | N.ExportSpecifier\\n      | N.ExportDefaultSpecifier\\n    >,\\n    exportName: string,\\n  ): void {\\n    if (this.exportedIdentifiers.has(exportName)) {\\n      if (exportName === \\\"default\\\") {\\n        this.raise(Errors.DuplicateDefaultExport, { at: node });\\n      } else {\\n        this.raise(Errors.DuplicateExport, { at: node, exportName });\\n      }\\n    }\\n    this.exportedIdentifiers.add(exportName);\\n  }\\n\\n  // Parses a comma-separated list of module exports.\\n\\n  parseExportSpecifiers(isInTypeExport: boolean): Array<N.ExportSpecifier> {\\n    const nodes = [];\\n    let first = true;\\n\\n    // export { x, y as z } [from '...']\\n    this.expect(tt.braceL);\\n\\n    while (!this.eat(tt.braceR)) {\\n      if (first) {\\n        first = false;\\n      } else {\\n        this.expect(tt.comma);\\n        if (this.eat(tt.braceR)) break;\\n      }\\n      const isMaybeTypeOnly = this.isContextual(tt._type);\\n      const isString = this.match(tt.string);\\n      const node = this.startNode();\\n      node.local = this.parseModuleExportName();\\n      nodes.push(\\n        this.parseExportSpecifier(\\n          node,\\n          isString,\\n          isInTypeExport,\\n          isMaybeTypeOnly,\\n        ),\\n      );\\n    }\\n\\n    return nodes;\\n  }\\n\\n  parseExportSpecifier(\\n    node: any,\\n    isString: boolean,\\n    /* eslint-disable @typescript-eslint/no-unused-vars -- used in TypeScript parser */\\n    isInTypeExport: boolean,\\n    isMaybeTypeOnly: boolean,\\n    /* eslint-enable @typescript-eslint/no-unused-vars */\\n  ): N.ExportSpecifier {\\n    if (this.eatContextual(tt._as)) {\\n      node.exported = this.parseModuleExportName();\\n    } else if (isString) {\\n      node.exported = cloneStringLiteral(node.local);\\n    } else if (!node.exported) {\\n      node.exported = cloneIdentifier(node.local);\\n    }\\n    return this.finishNode<N.ExportSpecifier>(node, \\\"ExportSpecifier\\\");\\n  }\\n\\n  // https://tc39.es/ecma262/#prod-ModuleExportName\\n  parseModuleExportName(): N.StringLiteral | N.Identifier {\\n    if (this.match(tt.string)) {\\n      const result = this.parseStringLiteral(this.state.value);\\n      const surrogate = result.value.match(loneSurrogate);\\n      if (surrogate) {\\n        this.raise(Errors.ModuleExportNameHasLoneSurrogate, {\\n          at: result,\\n          surrogateCharCode: surrogate[0].charCodeAt(0),\\n        });\\n      }\\n      return result;\\n    }\\n    return this.parseIdentifier(true);\\n  }\\n\\n  isJSONModuleImport(\\n    node: Undone<\\n      N.ExportAllDeclaration | N.ExportNamedDeclaration | N.ImportDeclaration\\n    >,\\n  ): boolean {\\n    if (node.assertions != null) {\\n      return node.assertions.some(({ key, value }) => {\\n        return (\\n          value.value === \\\"json\\\" &&\\n          (key.type === \\\"Identifier\\\"\\n            ? key.name === \\\"type\\\"\\n            : key.value === \\\"type\\\")\\n        );\\n      });\\n    }\\n    return false;\\n  }\\n\\n  checkImportReflection(node: Undone<N.ImportDeclaration>) {\\n    if (node.module) {\\n      if (\\n        node.specifiers.length !== 1 ||\\n        node.specifiers[0].type !== \\\"ImportDefaultSpecifier\\\"\\n      ) {\\n        this.raise(Errors.ImportReflectionNotBinding, {\\n          at: node.specifiers[0].loc.start,\\n        });\\n      }\\n      if (node.assertions?.length > 0) {\\n        this.raise(Errors.ImportReflectionHasAssertion, {\\n          at: node.specifiers[0].loc.start,\\n        });\\n      }\\n    }\\n  }\\n\\n  checkJSONModuleImport(\\n    node: Undone<\\n      N.ExportAllDeclaration | N.ExportNamedDeclaration | N.ImportDeclaration\\n    >,\\n  ) {\\n    // @ts-expect-error Fixme: node.type must be undefined because they are undone\\n    if (this.isJSONModuleImport(node) && node.type !== \\\"ExportAllDeclaration\\\") {\\n      // @ts-expect-error specifiers may not index node\\n      const { specifiers } = node;\\n      if (specifiers != null) {\\n        // @ts-expect-error refine specifier types\\n        const nonDefaultNamedSpecifier = specifiers.find(specifier => {\\n          let imported;\\n          if (specifier.type === \\\"ExportSpecifier\\\") {\\n            imported = specifier.local;\\n          } else if (specifier.type === \\\"ImportSpecifier\\\") {\\n            imported = specifier.imported;\\n          }\\n          if (imported !== undefined) {\\n            return imported.type === \\\"Identifier\\\"\\n              ? imported.name !== \\\"default\\\"\\n              : imported.value !== \\\"default\\\";\\n          }\\n        });\\n        if (nonDefaultNamedSpecifier !== undefined) {\\n          this.raise(Errors.ImportJSONBindingNotDefault, {\\n            at: nonDefaultNamedSpecifier.loc.start,\\n          });\\n        }\\n      }\\n    }\\n  }\\n\\n  parseMaybeImportReflection(node: Undone<N.ImportDeclaration>) {\\n    let isImportReflection = false;\\n    if (this.isContextual(tt._module)) {\\n      const lookahead = this.lookahead();\\n      const nextType = lookahead.type;\\n      if (tokenIsIdentifier(nextType)) {\\n        if (nextType !== tt._from) {\\n          // import module x\\n          isImportReflection = true;\\n        } else {\\n          const nextNextTokenFirstChar = this.input.charCodeAt(\\n            this.nextTokenStartSince(lookahead.end),\\n          );\\n          if (nextNextTokenFirstChar === charCodes.lowercaseF) {\\n            // import module from from ...\\n            isImportReflection = true;\\n          }\\n        }\\n      } else if (nextType !== tt.comma) {\\n        // import module { x } ...\\n        // import module \\\"foo\\\"\\n        // They are invalid, we will continue parsing and throw\\n        // a recoverable error later\\n        isImportReflection = true;\\n      }\\n    }\\n    if (isImportReflection) {\\n      this.expectPlugin(\\\"importReflection\\\");\\n      this.next(); // eat tt._module;\\n      node.module = true;\\n    } else if (this.hasPlugin(\\\"importReflection\\\")) {\\n      node.module = false;\\n    }\\n  }\\n\\n  // Parses import declaration.\\n  // https://tc39.es/ecma262/#prod-ImportDeclaration\\n\\n  parseImport(this: Parser, node: Undone<N.ImportDeclaration>): N.AnyImport {\\n    // import '...'\\n    node.specifiers = [];\\n    if (!this.match(tt.string)) {\\n      this.parseMaybeImportReflection(node);\\n      // check if we have a default import like\\n      // import React from \\\"react\\\";\\n      const hasDefault = this.maybeParseDefaultImportSpecifier(node);\\n      /* we are checking if we do not have a default import, then it is obvious that we need named imports\\n       * import { get } from \\\"axios\\\";\\n       * but if we do have a default import\\n       * we need to check if we have a comma after that and\\n       * that is where this `|| this.eat` condition comes into play\\n       */\\n      const parseNext = !hasDefault || this.eat(tt.comma);\\n      // if we do have to parse the next set of specifiers, we first check for star imports\\n      // import React, * from \\\"react\\\";\\n      const hasStar = parseNext && this.maybeParseStarImportSpecifier(node);\\n      // now we check if we need to parse the next imports\\n      // but only if they are not importing * (everything)\\n      if (parseNext && !hasStar) this.parseNamedImportSpecifiers(node);\\n      this.expectContextual(tt._from);\\n    }\\n    node.source = this.parseImportSource();\\n    // https://github.com/tc39/proposal-import-assertions\\n    // parse module import assertions if the next token is `assert` or ignore\\n    // and finish the ImportDeclaration node.\\n    const assertions = this.maybeParseImportAssertions();\\n    if (assertions) {\\n      node.assertions = assertions;\\n    } else if (!process.env.BABEL_8_BREAKING) {\\n      const attributes = this.maybeParseModuleAttributes();\\n      if (attributes) {\\n        // @ts-expect-error attributes have been deprecated\\n        node.attributes = attributes;\\n      }\\n    }\\n    this.checkImportReflection(node);\\n    this.checkJSONModuleImport(node);\\n\\n    this.semicolon();\\n    return this.finishNode(node, \\\"ImportDeclaration\\\");\\n  }\\n\\n  parseImportSource(this: Parser): N.StringLiteral {\\n    if (!this.match(tt.string)) this.unexpected();\\n    return this.parseExprAtom() as N.StringLiteral;\\n  }\\n\\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\\n  shouldParseDefaultImport(node: Undone<N.ImportDeclaration>): boolean {\\n    return tokenIsIdentifier(this.state.type);\\n  }\\n\\n  parseImportSpecifierLocal<\\n    T extends\\n      | N.ImportSpecifier\\n      | N.ImportDefaultSpecifier\\n      | N.ImportNamespaceSpecifier,\\n  >(\\n    node: Undone<N.ImportDeclaration>,\\n    specifier: Undone<T>,\\n    type: T[\\\"type\\\"],\\n  ): void {\\n    specifier.local = this.parseIdentifier();\\n    node.specifiers.push(this.finishImportSpecifier(specifier, type));\\n  }\\n\\n  finishImportSpecifier<\\n    T extends\\n      | N.ImportSpecifier\\n      | N.ImportDefaultSpecifier\\n      | N.ImportNamespaceSpecifier,\\n  >(specifier: Undone<T>, type: T[\\\"type\\\"], bindingType = BIND_LEXICAL) {\\n    this.checkLVal(specifier.local, {\\n      in: { type },\\n      binding: bindingType,\\n    });\\n    return this.finishNode(specifier, type);\\n  }\\n\\n  /**\\n   * parse assert entries\\n   *\\n   * @see {@link https://tc39.es/proposal-import-assertions/#prod-AssertEntries AssertEntries}\\n   */\\n  parseAssertEntries(): N.ImportAttribute[] {\\n    const attrs = [];\\n    const attrNames = new Set();\\n\\n    do {\\n      if (this.match(tt.braceR)) {\\n        break;\\n      }\\n\\n      const node = this.startNode<N.ImportAttribute>();\\n\\n      // parse AssertionKey : IdentifierName, StringLiteral\\n      const keyName = this.state.value;\\n      // check if we already have an entry for an attribute\\n      // if a duplicate entry is found, throw an error\\n      // for now this logic will come into play only when someone declares `type` twice\\n      if (attrNames.has(keyName)) {\\n        this.raise(Errors.ModuleAttributesWithDuplicateKeys, {\\n          at: this.state.startLoc,\\n          key: keyName,\\n        });\\n      }\\n      attrNames.add(keyName);\\n      if (this.match(tt.string)) {\\n        node.key = this.parseStringLiteral(keyName);\\n      } else {\\n        node.key = this.parseIdentifier(true);\\n      }\\n      this.expect(tt.colon);\\n\\n      if (!this.match(tt.string)) {\\n        throw this.raise(Errors.ModuleAttributeInvalidValue, {\\n          at: this.state.startLoc,\\n        });\\n      }\\n      node.value = this.parseStringLiteral(this.state.value);\\n      attrs.push(this.finishNode(node, \\\"ImportAttribute\\\"));\\n    } while (this.eat(tt.comma));\\n\\n    return attrs;\\n  }\\n\\n  /**\\n   * parse module attributes\\n   * @deprecated It will be removed in Babel 8\\n   */\\n  maybeParseModuleAttributes() {\\n    if (this.match(tt._with) && !this.hasPrecedingLineBreak()) {\\n      this.expectPlugin(\\\"moduleAttributes\\\");\\n      this.next();\\n    } else {\\n      if (this.hasPlugin(\\\"moduleAttributes\\\")) return [];\\n      return null;\\n    }\\n    const attrs = [];\\n    const attributes = new Set();\\n    do {\\n      const node = this.startNode();\\n      node.key = this.parseIdentifier(true);\\n\\n      if (node.key.name !== \\\"type\\\") {\\n        this.raise(Errors.ModuleAttributeDifferentFromType, {\\n          at: node.key,\\n        });\\n      }\\n\\n      if (attributes.has(node.key.name)) {\\n        this.raise(Errors.ModuleAttributesWithDuplicateKeys, {\\n          at: node.key,\\n          key: node.key.name,\\n        });\\n      }\\n      attributes.add(node.key.name);\\n      this.expect(tt.colon);\\n      if (!this.match(tt.string)) {\\n        throw this.raise(Errors.ModuleAttributeInvalidValue, {\\n          at: this.state.startLoc,\\n        });\\n      }\\n      node.value = this.parseStringLiteral(this.state.value);\\n      this.finishNode(node, \\\"ImportAttribute\\\");\\n      attrs.push(node);\\n    } while (this.eat(tt.comma));\\n\\n    return attrs;\\n  }\\n\\n  maybeParseImportAssertions() {\\n    // [no LineTerminator here] AssertClause\\n    if (this.isContextual(tt._assert) && !this.hasPrecedingLineBreak()) {\\n      this.expectPlugin(\\\"importAssertions\\\");\\n      this.next(); // eat `assert`\\n    } else {\\n      if (this.hasPlugin(\\\"importAssertions\\\")) return [];\\n      return null;\\n    }\\n    // https://tc39.es/proposal-import-assertions/#prod-AssertClause\\n    this.eat(tt.braceL);\\n    const attrs = this.parseAssertEntries();\\n    this.eat(tt.braceR);\\n\\n    return attrs;\\n  }\\n\\n  maybeParseDefaultImportSpecifier(node: Undone<N.ImportDeclaration>): boolean {\\n    if (this.shouldParseDefaultImport(node)) {\\n      // import defaultObj, { x, y as z } from '...'\\n      this.parseImportSpecifierLocal(\\n        node,\\n        this.startNode<N.ImportDefaultSpecifier>(),\\n        \\\"ImportDefaultSpecifier\\\",\\n      );\\n      return true;\\n    }\\n    return false;\\n  }\\n\\n  maybeParseStarImportSpecifier(node: Undone<N.ImportDeclaration>): boolean {\\n    if (this.match(tt.star)) {\\n      const specifier = this.startNode<N.ImportNamespaceSpecifier>();\\n      this.next();\\n      this.expectContextual(tt._as);\\n\\n      this.parseImportSpecifierLocal(\\n        node,\\n        specifier,\\n        \\\"ImportNamespaceSpecifier\\\",\\n      );\\n      return true;\\n    }\\n    return false;\\n  }\\n\\n  parseNamedImportSpecifiers(node: Undone<N.ImportDeclaration>) {\\n    let first = true;\\n    this.expect(tt.braceL);\\n    while (!this.eat(tt.braceR)) {\\n      if (first) {\\n        first = false;\\n      } else {\\n        // Detect an attempt to deep destructure\\n        if (this.eat(tt.colon)) {\\n          throw this.raise(Errors.DestructureNamedImport, {\\n            at: this.state.startLoc,\\n          });\\n        }\\n\\n        this.expect(tt.comma);\\n        if (this.eat(tt.braceR)) break;\\n      }\\n\\n      const specifier = this.startNode<N.ImportSpecifier>();\\n      const importedIsString = this.match(tt.string);\\n      const isMaybeTypeOnly = this.isContextual(tt._type);\\n      specifier.imported = this.parseModuleExportName();\\n      const importSpecifier = this.parseImportSpecifier(\\n        specifier,\\n        importedIsString,\\n        node.importKind === \\\"type\\\" || node.importKind === \\\"typeof\\\",\\n        isMaybeTypeOnly,\\n        undefined,\\n      );\\n      node.specifiers.push(importSpecifier);\\n    }\\n  }\\n\\n  // https://tc39.es/ecma262/#prod-ImportSpecifier\\n  parseImportSpecifier(\\n    specifier: Undone<N.ImportSpecifier>,\\n    importedIsString: boolean,\\n    /* eslint-disable @typescript-eslint/no-unused-vars -- used in TypeScript and Flow parser */\\n    isInTypeOnlyImport: boolean,\\n    isMaybeTypeOnly: boolean,\\n    bindingType: BindingTypes | undefined,\\n    /* eslint-enable @typescript-eslint/no-unused-vars */\\n  ): N.ImportSpecifier {\\n    if (this.eatContextual(tt._as)) {\\n      specifier.local = this.parseIdentifier();\\n    } else {\\n      const { imported } = specifier;\\n      if (importedIsString) {\\n        throw this.raise(Errors.ImportBindingIsString, {\\n          at: specifier,\\n          importName: (imported as N.StringLiteral).value,\\n        });\\n      }\\n      this.checkReservedWord(\\n        (imported as N.Identifier).name,\\n        specifier.loc.start,\\n        true,\\n        true,\\n      );\\n      if (!specifier.local) {\\n        specifier.local = cloneIdentifier(imported);\\n      }\\n    }\\n    return this.finishImportSpecifier(\\n      specifier,\\n      \\\"ImportSpecifier\\\",\\n      bindingType,\\n    );\\n  }\\n\\n  // This is used in flow and typescript plugin\\n  // Determine whether a parameter is a this param\\n  isThisParam(\\n    param: N.Pattern | N.Identifier | N.TSParameterProperty,\\n  ): boolean {\\n    return param.type === \\\"Identifier\\\" && param.name === \\\"this\\\";\\n  }\\n}\\n\",\"import type { Options } from \\\"../options\\\";\\nimport type * as N from \\\"../types\\\";\\nimport type { PluginList } from \\\"../plugin-utils\\\";\\nimport { getOptions } from \\\"../options\\\";\\nimport StatementParser from \\\"./statement\\\";\\nimport ScopeHandler from \\\"../util/scope\\\";\\n\\nexport type PluginsMap = Map<\\n  string,\\n  {\\n    [x: string]: any;\\n  }\\n>;\\n\\nexport default class Parser extends StatementParser {\\n  // Forward-declaration so typescript plugin can override jsx plugin\\n  // todo(flow->ts) - this probably can be removed\\n  // abstract jsxParseOpeningElementAfterName(\\n  //   node: N.JSXOpeningElement,\\n  // ): N.JSXOpeningElement;\\n\\n  constructor(options: Options | undefined | null, input: string) {\\n    options = getOptions(options);\\n    super(options, input);\\n\\n    this.options = options;\\n    this.initializeScopes();\\n    this.plugins = pluginsMap(this.options.plugins);\\n    this.filename = options.sourceFilename;\\n  }\\n\\n  // This can be overwritten, for example, by the TypeScript plugin.\\n  getScopeHandler(): {\\n    new (...args: any): ScopeHandler;\\n  } {\\n    return ScopeHandler;\\n  }\\n\\n  parse(): N.File {\\n    this.enterInitialScopes();\\n    const file = this.startNode() as N.File;\\n    const program = this.startNode() as N.Program;\\n    this.nextToken();\\n    file.errors = null;\\n    this.parseTopLevel(file, program);\\n    file.errors = this.state.errors;\\n    return file;\\n  }\\n}\\n\\nfunction pluginsMap(plugins: PluginList): PluginsMap {\\n  const pluginMap: PluginsMap = new Map();\\n  for (const plugin of plugins) {\\n    const [name, options] = Array.isArray(plugin) ? plugin : [plugin, {}];\\n    if (!pluginMap.has(name)) pluginMap.set(name, options || {});\\n  }\\n  return pluginMap;\\n}\\n\",\"import { type Options } from \\\"./options\\\";\\nimport {\\n  hasPlugin,\\n  validatePlugins,\\n  mixinPluginNames,\\n  mixinPlugins,\\n  type PluginList,\\n} from \\\"./plugin-utils\\\";\\nimport type {\\n  PluginConfig as ParserPlugin,\\n  FlowPluginOptions,\\n  RecordAndTuplePluginOptions,\\n  PipelineOperatorPluginOptions,\\n} from \\\"./typings\\\";\\nimport Parser from \\\"./parser\\\";\\n\\nimport type { ExportedTokenType } from \\\"./tokenizer/types\\\";\\nimport {\\n  getExportedToken,\\n  tt as internalTokenTypes,\\n  type InternalTokenTypes,\\n} from \\\"./tokenizer/types\\\";\\nimport \\\"./tokenizer/context\\\";\\n\\nimport type { Expression, File } from \\\"./types\\\";\\n\\nexport function parse(input: string, options?: Options): File {\\n  if (options?.sourceType === \\\"unambiguous\\\") {\\n    options = {\\n      ...options,\\n    };\\n    try {\\n      options.sourceType = \\\"module\\\";\\n      const parser = getParser(options, input);\\n      const ast = parser.parse();\\n\\n      if (parser.sawUnambiguousESM) {\\n        return ast;\\n      }\\n\\n      if (parser.ambiguousScriptDifferentAst) {\\n        // Top level await introduces code which can be both a valid script and\\n        // a valid module, but which produces different ASTs:\\n        //    await\\n        //    0\\n        // can be parsed either as an AwaitExpression, or as two ExpressionStatements.\\n        try {\\n          options.sourceType = \\\"script\\\";\\n          return getParser(options, input).parse();\\n        } catch {}\\n      } else {\\n        // This is both a valid module and a valid script, but\\n        // we parse it as a script by default\\n        ast.program.sourceType = \\\"script\\\";\\n      }\\n\\n      return ast;\\n    } catch (moduleError) {\\n      try {\\n        options.sourceType = \\\"script\\\";\\n        return getParser(options, input).parse();\\n      } catch {}\\n\\n      throw moduleError;\\n    }\\n  } else {\\n    return getParser(options, input).parse();\\n  }\\n}\\n\\nexport function parseExpression(input: string, options?: Options): Expression {\\n  const parser = getParser(options, input);\\n  if (parser.options.strictMode) {\\n    parser.state.strict = true;\\n  }\\n  return parser.getExpression();\\n}\\n\\nfunction generateExportedTokenTypes(\\n  internalTokenTypes: InternalTokenTypes,\\n): Record<string, ExportedTokenType> {\\n  const tokenTypes: Record<string, ExportedTokenType> = {};\\n  for (const typeName of Object.keys(\\n    internalTokenTypes,\\n  ) as (keyof InternalTokenTypes)[]) {\\n    tokenTypes[typeName] = getExportedToken(internalTokenTypes[typeName]);\\n  }\\n  return tokenTypes;\\n}\\n\\nexport const tokTypes = generateExportedTokenTypes(internalTokenTypes);\\n\\nfunction getParser(options: Options | undefined | null, input: string): Parser {\\n  let cls = Parser;\\n  if (options?.plugins) {\\n    validatePlugins(options.plugins);\\n    cls = getParserClass(options.plugins);\\n  }\\n\\n  return new cls(options, input);\\n}\\n\\nconst parserClassCache: { [key: string]: { new (...args: any): Parser } } = {};\\n\\n/** Get a Parser class with plugins applied. */\\nfunction getParserClass(pluginsFromOptions: PluginList): {\\n  new (...args: any): Parser;\\n} {\\n  const pluginList = mixinPluginNames.filter(name =>\\n    hasPlugin(pluginsFromOptions, name),\\n  );\\n\\n  const key = pluginList.join(\\\"/\\\");\\n  let cls = parserClassCache[key];\\n  if (!cls) {\\n    cls = Parser;\\n    for (const plugin of pluginList) {\\n      // @ts-expect-error todo(flow->ts)\\n      cls = mixinPlugins[plugin](cls);\\n    }\\n    parserClassCache[key] = cls;\\n  }\\n  return cls;\\n}\\n\\nexport type {\\n  FlowPluginOptions,\\n  ParserPlugin,\\n  PipelineOperatorPluginOptions,\\n  RecordAndTuplePluginOptions,\\n};\\nexport type ParserOptions = Partial<Options>;\\n\"],\"names\":[\"defaultOptions\",\"sourceType\",\"sourceFilename\",\"undefined\",\"startColumn\",\"startLine\",\"allowAwaitOutsideFunction\",\"allowReturnOutsideFunction\",\"allowNewTargetOutsideFunction\",\"allowImportExportEverywhere\",\"allowSuperOutsideMethod\",\"allowUndeclaredExports\",\"plugins\",\"strictMode\",\"ranges\",\"tokens\",\"createParenthesizedExpressions\",\"errorRecovery\",\"attachComment\",\"annexB\",\"getOptions\",\"opts\",\"Error\",\"options\",\"key\",\"Object\",\"keys\",\"TokContext\",\"constructor\",\"token\",\"preserveSpace\",\"types\",\"brace\",\"j_oTag\",\"j_cTag\",\"j_expr\",\"template\",\"beforeExpr\",\"startsExpr\",\"isLoop\",\"isAssign\",\"prefix\",\"postfix\",\"ExportedTokenType\",\"label\",\"conf\",\"keyword\",\"rightAssociative\",\"binop\",\"updateContext\",\"keywords\",\"Map\",\"createKeyword\",\"name\",\"createToken\",\"set\",\"createBinop\",\"tokenTypeCounter\",\"tokenTypes\",\"tokenLabels\",\"tokenBinops\",\"tokenBeforeExprs\",\"tokenStartsExprs\",\"tokenPrefixes\",\"_options$binop\",\"_options$beforeExpr\",\"_options$startsExpr\",\"_options$prefix\",\"push\",\"createKeywordLike\",\"_options$binop2\",\"_options$beforeExpr2\",\"_options$startsExpr2\",\"_options$prefix2\",\"tt\",\"bracketL\",\"bracketHashL\",\"bracketBarL\",\"bracketR\",\"bracketBarR\",\"braceL\",\"braceBarL\",\"braceHashL\",\"braceR\",\"braceBarR\",\"parenL\",\"parenR\",\"comma\",\"semi\",\"colon\",\"doubleColon\",\"dot\",\"question\",\"questionDot\",\"arrow\",\"ellipsis\",\"backQuote\",\"dollarBraceL\",\"templateTail\",\"templateNonTail\",\"at\",\"hash\",\"interpreterDirective\",\"eq\",\"assign\",\"slashAssign\",\"xorAssign\",\"moduloAssign\",\"incDec\",\"bang\",\"tilde\",\"doubleCaret\",\"doubleAt\",\"pipeline\",\"nullishCoalescing\",\"logicalOR\",\"logicalAND\",\"bitwiseOR\",\"bitwiseXOR\",\"bitwiseAND\",\"equality\",\"lt\",\"gt\",\"relational\",\"bitShift\",\"bitShiftL\",\"bitShiftR\",\"plusMin\",\"modulo\",\"star\",\"slash\",\"exponent\",\"_in\",\"_instanceof\",\"_break\",\"_case\",\"_catch\",\"_continue\",\"_debugger\",\"_default\",\"_else\",\"_finally\",\"_function\",\"_if\",\"_return\",\"_switch\",\"_throw\",\"_try\",\"_var\",\"_const\",\"_with\",\"_new\",\"_this\",\"_super\",\"_class\",\"_extends\",\"_export\",\"_import\",\"_null\",\"_true\",\"_false\",\"_typeof\",\"_void\",\"_delete\",\"_do\",\"_for\",\"_while\",\"_as\",\"_assert\",\"_async\",\"_await\",\"_from\",\"_get\",\"_let\",\"_meta\",\"_of\",\"_sent\",\"_set\",\"_static\",\"_using\",\"_yield\",\"_asserts\",\"_checks\",\"_exports\",\"_global\",\"_implements\",\"_intrinsic\",\"_infer\",\"_is\",\"_mixins\",\"_proto\",\"_require\",\"_satisfies\",\"_keyof\",\"_readonly\",\"_unique\",\"_abstract\",\"_declare\",\"_enum\",\"_module\",\"_namespace\",\"_interface\",\"_type\",\"_opaque\",\"string\",\"num\",\"bigint\",\"decimal\",\"regexp\",\"privateName\",\"eof\",\"jsxName\",\"jsxText\",\"jsxTagStart\",\"jsxTagEnd\",\"placeholder\",\"tokenIsIdentifier\",\"tokenKeywordOrIdentifierIsKeyword\",\"tokenIsKeywordOrIdentifier\",\"tokenIsLiteralPropertyName\",\"tokenComesBeforeExpression\",\"tokenCanStartExpression\",\"tokenIsAssignment\",\"tokenIsFlowInterfaceOrTypeOrOpaque\",\"tokenIsLoop\",\"tokenIsKeyword\",\"tokenIsOperator\",\"tokenIsPostfix\",\"tokenIsPrefix\",\"tokenIsTSTypeOperator\",\"tokenIsTSDeclarationStart\",\"tokenLabelName\",\"tokenOperatorPrecedence\",\"tokenIsRightAssociative\",\"tokenIsTemplate\",\"getExportedToken\",\"context\",\"pop\",\"tc\",\"length\",\"Position\",\"line\",\"col\",\"index\",\"column\",\"SourceLocation\",\"start\",\"end\",\"filename\",\"identifierName\",\"createPositionWithColumnOffset\",\"position\",\"columnOffset\",\"ParseErrorCode\",\"SyntaxError\",\"SourceTypeModuleError\",\"reflect\",\"last\",\"get\",\"reduce\",\"object\",\"value\",\"item\",\"i\",\"instantiate\",\"properties\",\"descriptors\",\"map\",\"filter\",\"descriptor\",\"enumerable\",\"split\",\"instance\",\"defineProperty\",\"configurable\",\"ModuleErrors\",\"ImportMetaOutsideModule\",\"message\",\"code\",\"ImportOutsideModule\",\"NodeDescriptions\",\"ArrayPattern\",\"AssignmentExpression\",\"AssignmentPattern\",\"ArrowFunctionExpression\",\"ConditionalExpression\",\"CatchClause\",\"ForOfStatement\",\"ForInStatement\",\"ForStatement\",\"FormalParameters\",\"Identifier\",\"ImportSpecifier\",\"ImportDefaultSpecifier\",\"ImportNamespaceSpecifier\",\"ObjectPattern\",\"ParenthesizedExpression\",\"RestElement\",\"UpdateExpression\",\"true\",\"false\",\"VariableDeclarator\",\"YieldExpression\",\"toNodeDescription\",\"type\",\"String\",\"StandardErrors\",\"AccessorIsGenerator\",\"kind\",\"ArgumentsInClass\",\"AsyncFunctionInSingleStatementContext\",\"AwaitBindingIdentifier\",\"AwaitBindingIdentifierInStaticBlock\",\"AwaitExpressionFormalParameter\",\"AwaitInUsingBinding\",\"AwaitNotInAsyncContext\",\"AwaitNotInAsyncFunction\",\"BadGetterArity\",\"BadSetterArity\",\"BadSetterRestParameter\",\"ConstructorClassField\",\"ConstructorClassPrivateField\",\"ConstructorIsAccessor\",\"ConstructorIsAsync\",\"ConstructorIsGenerator\",\"DeclarationMissingInitializer\",\"DecoratorArgumentsOutsideParentheses\",\"DecoratorBeforeExport\",\"DecoratorsBeforeAfterExport\",\"DecoratorConstructor\",\"DecoratorExportClass\",\"DecoratorSemicolon\",\"DecoratorStaticBlock\",\"DeletePrivateField\",\"DestructureNamedImport\",\"DuplicateConstructor\",\"DuplicateDefaultExport\",\"DuplicateExport\",\"exportName\",\"DuplicateProto\",\"DuplicateRegExpFlags\",\"ElementAfterRest\",\"EscapedCharNotAnIdentifier\",\"ExportBindingIsString\",\"localName\",\"ExportDefaultFromAsIdentifier\",\"ForInOfLoopInitializer\",\"ForInUsing\",\"ForOfAsync\",\"ForOfLet\",\"GeneratorInSingleStatementContext\",\"IllegalBreakContinue\",\"IllegalLanguageModeDirective\",\"IllegalReturn\",\"ImportBindingIsString\",\"importName\",\"ImportCallArgumentTrailingComma\",\"ImportCallArity\",\"maxArgumentCount\",\"ImportCallNotNewExpression\",\"ImportCallSpreadArgument\",\"ImportJSONBindingNotDefault\",\"ImportReflectionHasAssertion\",\"ImportReflectionNotBinding\",\"IncompatibleRegExpUVFlags\",\"InvalidBigIntLiteral\",\"InvalidCodePoint\",\"InvalidCoverInitializedName\",\"InvalidDecimal\",\"InvalidDigit\",\"radix\",\"InvalidEscapeSequence\",\"InvalidEscapeSequenceTemplate\",\"InvalidEscapedReservedWord\",\"reservedWord\",\"InvalidIdentifier\",\"InvalidLhs\",\"ancestor\",\"InvalidLhsBinding\",\"InvalidNumber\",\"InvalidOrMissingExponent\",\"InvalidOrUnexpectedToken\",\"unexpected\",\"InvalidParenthesizedAssignment\",\"InvalidPrivateFieldResolution\",\"InvalidPropertyBindingPattern\",\"InvalidRecordProperty\",\"InvalidRestAssignmentPattern\",\"LabelRedeclaration\",\"labelName\",\"LetInLexicalBinding\",\"LineTerminatorBeforeArrow\",\"MalformedRegExpFlags\",\"MissingClassName\",\"MissingEqInAssignment\",\"MissingSemicolon\",\"MissingPlugin\",\"missingPlugin\",\"JSON\",\"stringify\",\"join\",\"MissingOneOfPlugins\",\"MissingUnicodeEscape\",\"MixingCoalesceWithLogical\",\"ModuleAttributeDifferentFromType\",\"ModuleAttributeInvalidValue\",\"ModuleAttributesWithDuplicateKeys\",\"ModuleExportNameHasLoneSurrogate\",\"surrogateCharCode\",\"toString\",\"ModuleExportUndefined\",\"MultipleDefaultsInSwitch\",\"NewlineAfterThrow\",\"NoCatchOrFinally\",\"NumberIdentifier\",\"NumericSeparatorInEscapeSequence\",\"ObsoleteAwaitStar\",\"OptionalChainingNoNew\",\"OptionalChainingNoTemplate\",\"OverrideOnConstructor\",\"ParamDupe\",\"PatternHasAccessor\",\"PatternHasMethod\",\"PrivateInExpectedIn\",\"PrivateNameRedeclaration\",\"RecordExpressionBarIncorrectEndSyntaxType\",\"RecordExpressionBarIncorrectStartSyntaxType\",\"RecordExpressionHashIncorrectStartSyntaxType\",\"RecordNoProto\",\"RestTrailingComma\",\"SloppyFunction\",\"SloppyFunctionAnnexB\",\"StaticPrototype\",\"SuperNotAllowed\",\"SuperPrivateField\",\"TrailingDecorator\",\"TupleExpressionBarIncorrectEndSyntaxType\",\"TupleExpressionBarIncorrectStartSyntaxType\",\"TupleExpressionHashIncorrectStartSyntaxType\",\"UnexpectedArgumentPlaceholder\",\"UnexpectedAwaitAfterPipelineBody\",\"UnexpectedDigitAfterHash\",\"UnexpectedImportExport\",\"UnexpectedKeyword\",\"UnexpectedLeadingDecorator\",\"UnexpectedLexicalDeclaration\",\"UnexpectedNewTarget\",\"UnexpectedNumericSeparator\",\"UnexpectedPrivateField\",\"UnexpectedReservedWord\",\"UnexpectedSuper\",\"UnexpectedToken\",\"expected\",\"UnexpectedTokenUnaryExponentiation\",\"UnexpectedUsingDeclaration\",\"UnsupportedBind\",\"UnsupportedDecoratorExport\",\"UnsupportedDefaultExport\",\"UnsupportedImport\",\"UnsupportedMetaProperty\",\"target\",\"onlyValidPropertyName\",\"UnsupportedParameterDecorator\",\"UnsupportedPropertyDecorator\",\"UnsupportedSuper\",\"UnterminatedComment\",\"UnterminatedRegExp\",\"UnterminatedString\",\"UnterminatedTemplate\",\"UsingDeclarationHasBindingPattern\",\"VarRedeclaration\",\"YieldBindingIdentifier\",\"YieldInParameter\",\"ZeroDigitNumericSeparator\",\"StrictModeErrors\",\"StrictDelete\",\"StrictEvalArguments\",\"referenceName\",\"StrictEvalArgumentsBinding\",\"bindingName\",\"StrictFunction\",\"StrictNumericEscape\",\"StrictOctalLiteral\",\"StrictWith\",\"UnparenthesizedPipeBodyDescriptions\",\"Set\",\"PipelineOperatorErrors\",\"PipeBodyIsTighter\",\"PipeTopicRequiresHackPipes\",\"PipeTopicUnbound\",\"PipeTopicUnconfiguredToken\",\"PipeTopicUnused\",\"PipeUnparenthesizedBody\",\"PipelineBodyNoArrow\",\"PipelineBodySequenceExpression\",\"PipelineHeadSequenceExpression\",\"PipelineTopicUnused\",\"PrimaryTopicNotAllowed\",\"PrimaryTopicRequiresSmartPipeline\",\"toParseErrorConstructor\",\"_ref\",\"toMessage\",\"_objectWithoutPropertiesLoose\",\"_excluded\",\"loc\",\"details\",\"clone\",\"overrides\",\"pos\",\"ParseErrorEnum\",\"argument\",\"syntaxPlugin\",\"Array\",\"isArray\",\"parseErrorTemplates\",\"ParseErrorConstructors\",\"reasonCode\",\"_ref2\",\"rest\",\"_excluded2\",\"Errors\",\"toUnenumerable\",\"toESTreeLocation\",\"node\",\"estree\",\"superClass\",\"ESTreeParserMixin\",\"parse\",\"file\",\"parseRegExpLiteral\",\"pattern\",\"flags\",\"regex\",\"RegExp\",\"e\",\"estreeParseLiteral\",\"parseBigIntLiteral\",\"bigInt\",\"BigInt\",\"_unused\",\"parseDecimalLiteral\",\"parseLiteral\",\"parseStringLiteral\",\"parseNumericLiteral\",\"parseNullLiteral\",\"parseBooleanLiteral\",\"directiveToStmt\",\"directive\",\"expression\",\"raw\",\"extra\",\"expressionValue\",\"stmt\",\"rawValue\",\"initFunction\",\"isAsync\",\"checkDeclaration\",\"isObjectProperty\",\"getObjectOrClassMethodParams\",\"method\",\"params\",\"isValidDirective\",\"_stmt$expression$extr\",\"parenthesized\",\"parseBlockBody\",\"allowDirectives\",\"topLevel\",\"afterBlockParse\",\"directiveStatements\",\"directives\",\"d\",\"body\",\"concat\",\"pushClassMethod\",\"classBody\",\"isGenerator\",\"isConstructor\",\"allowsDirectSuper\",\"parseMethod\",\"typeParameters\",\"parsePrivateName\",\"getPluginOption\",\"convertPrivateNameToPrivateIdentifier\",\"getPrivateNameSV\",\"id\",\"isPrivateName\",\"parseFunctionBody\",\"allowExpression\",\"isMethod\",\"allowDirectSuper\",\"inClassScope\",\"funcNode\",\"startNode\",\"computed\",\"finishNode\",\"parseClassProperty\",\"args\",\"propertyNode\",\"parseClassPrivateProperty\",\"parseObjectMethod\",\"prop\",\"isPattern\",\"isAccessor\",\"shorthand\",\"parseObjectProperty\",\"startLoc\",\"refExpressionErrors\",\"isValidLVal\",\"isUnparenthesizedInAssign\",\"binding\",\"isAssignable\",\"isBinding\",\"toAssignable\",\"isLHS\",\"classScope\",\"usePrivateName\",\"toAssignableObjectExpressionProp\",\"isLast\",\"raise\",\"finishCallExpression\",\"unfinished\",\"optional\",\"callee\",\"source\",\"arguments\",\"hasPlugin\",\"_node$arguments$\",\"attributes\",\"toReferencedArguments\",\"parseExport\",\"decorators\",\"exportStartLoc\",\"state\",\"lastTokStartLoc\",\"exported\",\"specifiers\",\"_declaration$decorato\",\"declaration\",\"resetStartLocation\",\"parseSubscript\",\"base\",\"noCalls\",\"optionalChainMember\",\"substring\",\"stop\",\"chain\",\"startNodeAtNode\",\"hasPropertyAsPrivateName\",\"isObjectMethod\",\"finishNodeAt\",\"endLoc\",\"resetEndLocation\",\"lastTokEndLoc\",\"nonASCIIidentifierStartChars\",\"nonASCIIidentifierChars\",\"nonASCIIidentifierStart\",\"nonASCIIidentifier\",\"astralIdentifierStartCodes\",\"astralIdentifierCodes\",\"isInAstralSet\",\"isIdentifierStart\",\"test\",\"fromCharCode\",\"isIdentifierChar\",\"reservedWords\",\"strict\",\"strictBind\",\"reservedWordsStrictSet\",\"reservedWordsStrictBindSet\",\"isReservedWord\",\"word\",\"inModule\",\"isStrictReservedWord\",\"has\",\"isStrictBindOnlyReservedWord\",\"isStrictBindReservedWord\",\"isKeyword\",\"isIteratorStart\",\"current\",\"next\",\"next2\",\"reservedWordLikeSet\",\"canBeReservedWord\",\"SCOPE_OTHER\",\"SCOPE_PROGRAM\",\"SCOPE_FUNCTION\",\"SCOPE_ARROW\",\"SCOPE_SIMPLE_CATCH\",\"SCOPE_SUPER\",\"SCOPE_DIRECT_SUPER\",\"SCOPE_CLASS\",\"SCOPE_STATIC_BLOCK\",\"SCOPE_TS_MODULE\",\"SCOPE_VAR\",\"BIND_KIND_VALUE\",\"BIND_KIND_TYPE\",\"BIND_SCOPE_VAR\",\"BIND_SCOPE_LEXICAL\",\"BIND_SCOPE_FUNCTION\",\"BIND_FLAGS_NONE\",\"BIND_FLAGS_CLASS\",\"BIND_FLAGS_TS_ENUM\",\"BIND_FLAGS_TS_CONST_ENUM\",\"BIND_FLAGS_TS_EXPORT_ONLY\",\"BIND_FLAGS_FLOW_DECLARE_FN\",\"BIND_FLAGS_TS_IMPORT\",\"BIND_FLAGS_NO_LET_IN_LEXICAL\",\"BIND_CLASS\",\"BIND_LEXICAL\",\"BIND_CATCH_PARAM\",\"BIND_VAR\",\"BIND_FUNCTION\",\"BIND_TS_INTERFACE\",\"BIND_TS_TYPE\",\"BIND_TS_ENUM\",\"BIND_TS_AMBIENT\",\"BIND_NONE\",\"BIND_OUTSIDE\",\"BIND_TS_CONST_ENUM\",\"BIND_TS_NAMESPACE\",\"BIND_TS_TYPE_IMPORT\",\"BIND_FLOW_DECLARE_FN\",\"CLASS_ELEMENT_FLAG_STATIC\",\"CLASS_ELEMENT_KIND_GETTER\",\"CLASS_ELEMENT_KIND_SETTER\",\"CLASS_ELEMENT_KIND_ACCESSOR\",\"CLASS_ELEMENT_STATIC_GETTER\",\"CLASS_ELEMENT_STATIC_SETTER\",\"CLASS_ELEMENT_INSTANCE_GETTER\",\"CLASS_ELEMENT_INSTANCE_SETTER\",\"CLASS_ELEMENT_OTHER\",\"Scope\",\"var\",\"lexical\",\"functions\",\"ScopeHandler\",\"parser\",\"scopeStack\",\"undefinedExports\",\"inTopLevel\",\"currentScope\",\"inFunction\",\"currentVarScopeFlags\",\"allowSuper\",\"currentThisScopeFlags\",\"inClass\",\"inClassAndNotInNonArrowFunction\",\"inStaticBlock\",\"inNonArrowFunction\",\"treatFunctionsAsVar\",\"treatFunctionsAsVarInScope\",\"createScope\",\"enter\",\"exit\",\"scope\",\"declareName\",\"bindingType\",\"checkRedeclarationInScope\",\"add\",\"maybeExportDefined\",\"delete\",\"isRedeclaredInScope\",\"values\",\"checkLocalExport\",\"topLevelScope\",\"FlowScope\",\"declareFunctions\",\"FlowScopeHandler\",\"BaseParser\",\"sawUnambiguousESM\",\"ambiguousScriptDifferentAst\",\"pluginConfig\",\"pluginName\",\"pluginOptions\",\"actualOptions\",\"plugin\",\"_this$plugins$get\",\"setTrailingComments\",\"comments\",\"trailingComments\",\"unshift\",\"setLeadingComments\",\"leadingComments\",\"setInnerComments\",\"innerComments\",\"adjustInnerComments\",\"elements\",\"commentWS\",\"lastElement\",\"CommentsParser\",\"addComment\",\"comment\",\"processComment\",\"commentStack\",\"commentStackLength\",\"lastCommentWS\",\"leadingNode\",\"nodeStart\",\"commentEnd\",\"containingNode\",\"finalizeComment\",\"splice\",\"trailingNode\",\"commentStart\",\"input\",\"charCodeAt\",\"finalizeRemainingComments\",\"resetPreviousNodeTrailingComments\",\"takeSurroundingComments\",\"lineBreak\",\"lineBreakG\",\"isNewLine\",\"skipWhiteSpace\",\"skipWhiteSpaceInLine\",\"skipWhiteSpaceToLineBreak\",\"isWhitespace\",\"State\",\"curLine\",\"lineStart\",\"errors\",\"potentialArrowAt\",\"noArrowAt\",\"noArrowParamsConversionAt\",\"maybeInArrowParameters\",\"inType\",\"noAnonFunctionType\",\"hasFlowComment\",\"isAmbientContext\",\"inAbstractClass\",\"inDisallowConditionalTypesContext\",\"topicContext\",\"maxNumOfResolvableTopics\",\"maxTopicIndex\",\"soloAwait\",\"inFSharpPipelineDirectBody\",\"labels\",\"lastTokStart\",\"ct\",\"canStartJSXElement\",\"containsEsc\",\"firstInvalidTemplateEscapePos\",\"strictErrors\",\"tokensLength\",\"init\",\"curPosition\",\"skipArrays\",\"val\",\"slice\",\"isDigit\",\"forbiddenNumericSeparatorSiblings\",\"decBinOct\",\"hex\",\"isAllowedNumericSeparatorSibling\",\"bin\",\"ch\",\"oct\",\"dec\",\"readStringContents\",\"initialPos\",\"initialLineStart\",\"initialCurLine\",\"out\",\"firstInvalidLoc\",\"chunkStart\",\"unterminated\",\"isStringEnd\",\"res\",\"readEscapedChar\",\"str\",\"containsInvalid\",\"inTemplate\",\"throwOnInvalid\",\"readHexChar\",\"readCodePoint\",\"fromCodePoint\",\"strictNumericEscape\",\"startPos\",\"match\",\"octalStr\",\"octal\",\"parseInt\",\"len\",\"forceLen\",\"n\",\"readInt\",\"invalidEscapeSequence\",\"allowNumSeparator\",\"bailOnError\",\"forbiddenSiblings\",\"isAllowedSibling\",\"invalid\",\"total\",\"Infinity\",\"prev\",\"numericSeparatorInEscapeSequence\",\"Number\",\"isNaN\",\"unexpectedNumericSeparator\",\"_isDigit\",\"invalidDigit\",\"indexOf\",\"invalidCodePoint\",\"buildPosition\",\"VALID_REGEX_FLAGS\",\"Token\",\"Tokenizer\",\"isLookahead\",\"errorHandlers_readInt\",\"errorBuilder\",\"errorHandlers_readCodePoint\",\"errorHandlers_readStringContents_string\",\"recordStrictModeErrors\",\"errorHandlers_readStringContents_template\",\"pushToken\",\"checkKeywordEscapes\",\"nextToken\",\"eat\",\"createLookaheadState\",\"curContext\",\"lookahead\",\"old\",\"curr\",\"nextTokenStart\",\"nextTokenStartSince\",\"lastIndex\",\"lookaheadCharCode\",\"codePointAtPos\",\"cp\",\"trail\",\"setStrict\",\"forEach\",\"toParseError\",\"clear\",\"skipSpace\",\"finishToken\",\"getTokenFromCode\",\"skipBlockComment\",\"skipLineComment\",\"startSkip\",\"spaceStart\",\"loop\",\"commentWhitespace\",\"prevType\",\"replaceToken\",\"readToken_numberSign\",\"readToken_interpreter\",\"nextPos\",\"expectPlugin\",\"readWord1\",\"finishOp\",\"readToken_dot\",\"readNumber\",\"readToken_slash\",\"readToken_mult_modulo\",\"width\",\"readToken_pipe_amp\",\"readToken_caret\",\"proposal\",\"topicToken\",\"lookaheadCh\",\"codePointAt\",\"readToken_atSign\",\"readToken_plus_min\",\"readToken_lt\",\"readToken_gt\",\"size\",\"readToken_eq_excl\",\"readToken_question\",\"readTemplateToken\",\"readRadixNumber\",\"readString\",\"readWord\",\"readRegexp\",\"escaped\",\"content\",\"mods\",\"char\",\"includes\",\"isBigInt\",\"replace\",\"startsWithDot\",\"isFloat\",\"isDecimal\",\"hasExponent\",\"isOctal\",\"hasLeadingZero\",\"integer\",\"underscorePos\",\"parseFloat\",\"quote\",\"readTemplateContinuation\",\"opening\",\"firstCode\",\"escStart\",\"identifierCheck\",\"esc\",\"keywordTypes\",\"raiseProperties\",\"error\",\"raiseOverwrite\",\"expectOnePlugin\",\"pluginNames\",\"some\",\"ClassScope\",\"privateNames\",\"loneAccessors\",\"undefinedPrivateNames\",\"ClassScopeHandler\",\"stack\",\"oldClassScope\",\"from\",\"declarePrivateName\",\"elementType\",\"redefined\",\"accessor\",\"oldStatic\",\"newStatic\",\"oldKind\",\"newKind\",\"kExpression\",\"kMaybeArrowParameterDeclaration\",\"kMaybeAsyncArrowParameterDeclaration\",\"kParameterDeclaration\",\"ExpressionScope\",\"canBeArrowParameterDeclaration\",\"isCertainlyParameterDeclaration\",\"ArrowHeadParsingScope\",\"declarationErrors\",\"recordDeclarationError\",\"ParsingErrorClass\",\"clearDeclarationError\",\"iterateErrors\",\"iterator\",\"ExpressionScopeHandler\",\"recordParameterInitializerError\",\"origin\",\"recordArrowParameterBindingError\",\"recordAsyncArrowParametersError\",\"validateAsPattern\",\"newParameterDeclarationScope\",\"newArrowHeadScope\",\"newAsyncArrowScope\",\"newExpressionScope\",\"PARAM\",\"PARAM_YIELD\",\"PARAM_AWAIT\",\"PARAM_RETURN\",\"PARAM_IN\",\"ProductionParameterHandler\",\"stacks\",\"currentFlags\",\"hasAwait\",\"hasYield\",\"hasReturn\",\"hasIn\",\"functionFlags\",\"UtilParser\",\"addExtra\",\"isContextual\",\"isUnparsedContextual\",\"nameStart\",\"nameEnd\",\"nextCh\",\"isLookaheadContextual\",\"eatContextual\",\"expectContextual\",\"canInsertSemicolon\",\"hasPrecedingLineBreak\",\"hasFollowingLineBreak\",\"isLineTerminator\",\"semicolon\",\"allowAsi\",\"expect\",\"tryParse\",\"fn\",\"oldState\",\"abortSignal\",\"failState\",\"thrown\",\"aborted\",\"checkExpressionErrors\",\"andThrow\",\"shorthandAssignLoc\",\"doubleProtoLoc\",\"privateKeyLoc\",\"optionalParametersLoc\",\"hasErrors\",\"isLiteralPropertyName\",\"property\",\"initializeScopes\",\"oldLabels\",\"oldExportedIdentifiers\",\"exportedIdentifiers\",\"oldInModule\",\"oldScope\",\"getScopeHandler\",\"oldProdParam\",\"prodParam\",\"oldExpressionScope\",\"expressionScope\",\"enterInitialScopes\",\"paramFlags\",\"checkDestructuringPrivate\",\"ExpressionErrors\",\"Node\",\"range\",\"NodePrototype\",\"prototype\",\"__clone\",\"newNode\",\"clonePlaceholder\",\"cloneIdentifier\",\"cloned\",\"create\",\"expectedNode\",\"cloneStringLiteral\",\"NodeUtils\",\"startNodeAt\",\"resetStartLocationFromNode\",\"locationNode\",\"reservedTypes\",\"FlowErrors\",\"AmbiguousConditionalArrow\",\"AmbiguousDeclareModuleKind\",\"AssignReservedType\",\"reservedType\",\"DeclareClassElement\",\"DeclareClassFieldInitializer\",\"DuplicateDeclareModuleExports\",\"EnumBooleanMemberNotInitialized\",\"memberName\",\"enumName\",\"EnumDuplicateMemberName\",\"EnumInconsistentMemberValues\",\"EnumInvalidExplicitType\",\"invalidEnumType\",\"EnumInvalidExplicitTypeUnknownSupplied\",\"EnumInvalidMemberInitializerPrimaryType\",\"explicitType\",\"EnumInvalidMemberInitializerSymbolType\",\"EnumInvalidMemberInitializerUnknownType\",\"EnumInvalidMemberName\",\"suggestion\",\"EnumNumberMemberNotInitialized\",\"EnumStringMemberInconsistentlyInitailized\",\"GetterMayNotHaveThisParam\",\"ImportReflectionHasImportType\",\"ImportTypeShorthandOnlyInPureImport\",\"InexactInsideExact\",\"InexactInsideNonObject\",\"InexactVariance\",\"InvalidNonTypeImportInDeclareModule\",\"MissingTypeParamDefault\",\"NestedDeclareModule\",\"NestedFlowComment\",\"PatternIsOptional\",\"SetterMayNotHaveThisParam\",\"SpreadVariance\",\"ThisParamAnnotationRequired\",\"ThisParamBannedInConstructor\",\"ThisParamMayNotBeOptional\",\"ThisParamMustBeFirst\",\"ThisParamNoDefault\",\"TypeBeforeInitializer\",\"TypeCastInPattern\",\"UnexpectedExplicitInexactInObject\",\"UnexpectedReservedType\",\"UnexpectedReservedUnderscore\",\"UnexpectedSpaceBetweenModuloChecks\",\"UnexpectedSpreadType\",\"UnexpectedSubtractionOperand\",\"UnexpectedTokenAfterTypeParameter\",\"UnexpectedTypeParameterBeforeAsyncArrowFunction\",\"UnsupportedDeclareExportKind\",\"unsupportedExportKind\",\"UnsupportedStatementInDeclareModule\",\"UnterminatedFlowComment\",\"isEsModuleType\",\"bodyElement\",\"hasTypeImportKind\",\"importKind\",\"isMaybeDefaultImport\",\"exportSuggestions\",\"const\",\"let\",\"interface\",\"partition\",\"list\",\"list1\",\"list2\",\"FLOW_PRAGMA_REGEX\",\"flow\",\"FlowParserMixin\",\"flowPragma\",\"shouldParseTypes\",\"shouldParseEnums\",\"matches\",\"exec\",\"flowParseTypeInitialiser\",\"tok\",\"oldInType\",\"flowParseType\",\"flowParsePredicate\",\"moduloLoc\",\"parseExpression\",\"flowParseTypeAndPredicateInitialiser\",\"predicate\",\"flowParseDeclareClass\",\"flowParseInterfaceish\",\"flowParseDeclareFunction\",\"parseIdentifier\",\"typeNode\",\"typeContainer\",\"flowParseTypeParameterDeclaration\",\"tmp\",\"flowParseFunctionTypeParams\",\"this\",\"returnType\",\"typeAnnotation\",\"flowParseDeclare\",\"insideModule\",\"flowParseDeclareVariable\",\"flowParseDeclareModuleExports\",\"flowParseDeclareModule\",\"flowParseDeclareTypeAlias\",\"flowParseDeclareOpaqueType\",\"flowParseDeclareInterface\",\"flowParseDeclareExportDeclaration\",\"flowParseTypeAnnotatableIdentifier\",\"parseExprAtom\",\"bodyNode\",\"parseImport\",\"hasModuleExport\",\"default\",\"isLet\",\"exportKind\",\"flowParseTypeAnnotation\",\"finished\",\"flowParseTypeAlias\",\"flowParseOpaqueType\",\"isClass\",\"flowParseRestrictedIdentifier\",\"extends\",\"implements\",\"mixins\",\"flowParseInterfaceExtends\",\"flowParseObjectType\",\"allowStatic\",\"allowExact\",\"allowSpread\",\"allowProto\",\"allowInexact\",\"flowParseQualifiedTypeIdentifier\",\"flowParseTypeParameterInstantiation\",\"flowParseInterface\",\"checkNotUnderscore\",\"checkReservedType\",\"liberal\",\"right\",\"declare\",\"supertype\",\"impltype\",\"flowParseTypeParameter\",\"requireDefault\",\"nodeStartLoc\",\"variance\",\"flowParseVariance\",\"ident\",\"bound\",\"defaultRequired\",\"typeParameter\",\"oldNoAnonFunctionType\",\"flowParseTypeParameterInstantiationCallOrNew\",\"flowParseTypeOrImplicitInstantiation\",\"flowParseInterfaceType\",\"flowParseObjectPropertyKey\",\"flowParseObjectTypeIndexer\",\"isStatic\",\"static\",\"flowParseObjectTypeInternalSlot\",\"flowParseObjectTypeMethodish\",\"flowParseFunctionTypeParam\",\"flowParseObjectTypeCallProperty\",\"valueNode\",\"callProperties\",\"indexers\",\"internalSlots\",\"endDelim\",\"exact\",\"inexact\",\"protoStartLoc\",\"inexactStartLoc\",\"propOrInexact\",\"flowParseObjectTypeProperty\",\"flowObjectTypeSemicolon\",\"isInexactToken\",\"proto\",\"flowCheckGetterSetterParams\",\"paramCount\",\"_startLoc\",\"node2\",\"qualification\",\"flowParseGenericType\",\"flowParseTypeofType\",\"flowParsePrimaryType\",\"flowParseTupleType\",\"first\",\"lh\",\"isThis\",\"reinterpretTypeAsFunctionTypeParam\",\"flowIdentToTypeAnnotation\",\"isGroupedType\",\"parseLiteralAtNode\",\"createIdentifier\",\"flowParsePostfixType\",\"seenOptionalIndexedAccess\",\"objectType\",\"indexType\",\"flowParsePrefixType\",\"flowParseAnonFunctionWithoutParens\",\"param\",\"flowParseIntersectionType\",\"flowParseUnionType\",\"allowPrimitiveOverride\",\"typeCastToParameter\",\"allowExpressionBody\",\"forwardNoArrowParamsConversionAt\",\"parseFunctionBodyAndFinish\",\"parseStatementLike\",\"flowParseEnumDeclaration\",\"parseExpressionStatement\",\"expr\",\"shouldParseExportDeclaration\",\"isExportDefaultSpecifier\",\"parseExportDefaultExpression\",\"parseConditional\",\"setOptionalParametersError\",\"originalNoArrowAt\",\"consequent\",\"failed\",\"tryParseConditionalConsequent\",\"valid\",\"getArrowLikeExpressions\",\"alternate\",\"parseMaybeAssign\",\"parseMaybeAssignAllowIn\",\"disallowInvalid\",\"arrows\",\"finishArrowValidation\",\"every\",\"_node$extra\",\"toAssignableList\",\"trailingCommaLoc\",\"checkParams\",\"result\",\"parseParenItem\",\"typeCastNode\",\"assertModuleNodeAllowed\",\"decl\",\"parseExportDeclaration\",\"declarationNode\",\"parseExportSpecifiers\",\"parseExportFrom\",\"eatExportStar\",\"maybeParseExportNamespaceSpecifier\",\"hasNamespace\",\"parseClassId\",\"isStatement\",\"optionalId\",\"parseClassMember\",\"member\",\"parseClassMemberFromModifier\",\"isIterator\",\"readIterator\",\"fullWord\",\"left\",\"exprList\",\"toReferencedList\",\"isParenthesizedExpr\",\"_expr$extra\",\"parseArrayLike\",\"close\",\"canBePattern\",\"isTuple\",\"isParenthesized\",\"isClassMethod\",\"isClassProperty\",\"isNonstaticConstructor\",\"isThisParam\",\"pushClassPrivateMethod\",\"parseClassSuper\",\"superTypeParameters\",\"implemented\",\"checkGetterSetterParams\",\"parsePropertyNamePrefixOperator\",\"parseObjPropValue\",\"parseAssignableListItemTypes\",\"parseMaybeDefault\",\"shouldParseDefaultImport\",\"checkImportReflection\",\"module\",\"parseImportSpecifierLocal\",\"specifier\",\"local\",\"finishImportSpecifier\",\"maybeParseDefaultImportSpecifier\",\"parseImportSpecifier\",\"importedIsString\",\"isInTypeOnlyImport\",\"isMaybeTypeOnly\",\"firstIdent\",\"imported\",\"specifierTypeKind\",\"as_ident\",\"specifierIsTypeImport\",\"checkReservedWord\",\"parseBindingAtom\",\"parseFunctionParams\",\"parseVarId\",\"parseAsyncArrowFromCallExpression\",\"call\",\"shouldParseAsyncArrow\",\"afterLeftParse\",\"_jsx\",\"jsx\",\"currentContext\",\"_jsx2\",\"_jsx3\",\"abort\",\"_arrowExpression$extr\",\"arrowExpression\",\"maybeUnwrapTypeCastExpression\",\"async\",\"parseArrow\",\"shouldParseArrow\",\"setArrowFunctionParameters\",\"allowDuplicates\",\"isArrowFunction\",\"strictModeChanged\",\"parseParenAndDistinguishExpression\",\"canBeArrow\",\"parseSubscripts\",\"parseCallExpressionArguments\",\"parseAsyncArrowWithTypeParameters\",\"subscriptState\",\"isLookaheadToken_lt\",\"typeArguments\",\"parseNewCallee\",\"targs\",\"parseArrowExpression\",\"parseTopLevel\",\"program\",\"fileNode\",\"skipFlowComment\",\"hasFlowCommentCompletion\",\"commentSkip\",\"shiftToFirstNonWhiteSpace\",\"ch2\",\"ch3\",\"flowEnumErrorBooleanMemberNotInitialized\",\"flowEnumErrorInvalidMemberInitializer\",\"enumContext\",\"flowEnumErrorNumberMemberNotInitialized\",\"flowEnumErrorStringMemberInconsistentlyInitailized\",\"flowEnumMemberInit\",\"endOfInit\",\"literal\",\"flowEnumMemberRaw\",\"flowEnumCheckExplicitTypeMismatch\",\"expectedType\",\"flowEnumMembers\",\"seenNames\",\"members\",\"booleanMembers\",\"numberMembers\",\"stringMembers\",\"defaultedMembers\",\"hasUnknownMembers\",\"memberNode\",\"toUpperCase\",\"flowEnumStringMembers\",\"initializedMembers\",\"flowEnumParseExplicitType\",\"flowEnumBody\",\"nameLoc\",\"empty\",\"boolsLen\",\"numsLen\",\"strsLen\",\"defaultedLen\",\"afterNext\",\"entities\",\"__proto__\",\"quot\",\"amp\",\"apos\",\"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\",\"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\",\"nabla\",\"isin\",\"notin\",\"ni\",\"prod\",\"sum\",\"minus\",\"lowast\",\"radic\",\"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\",\"lang\",\"rang\",\"loz\",\"spades\",\"clubs\",\"hearts\",\"diams\",\"JsxErrors\",\"AttributeIsEmpty\",\"MissingClosingTagElement\",\"openingTagName\",\"MissingClosingTagFragment\",\"UnexpectedSequenceExpression\",\"HTMLEntity\",\"UnsupportedJsxValue\",\"UnterminatedJsxContent\",\"UnwrappedAdjacentJSXElements\",\"isFragment\",\"getQualifiedJSXName\",\"namespace\",\"JSXParserMixin\",\"jsxReadToken\",\"jsxReadEntity\",\"jsxReadNewLine\",\"normalizeCRLF\",\"jsxReadString\",\"codePoint\",\"count\",\"desc\",\"entity\",\"XHTMLEntities\",\"jsxReadWord\",\"jsxParseIdentifier\",\"jsxParseNamespacedName\",\"jsxParseElementName\",\"jsxParseAttributeValue\",\"setContext\",\"jsxParseExpressionContainer\",\"jsxParseEmptyExpression\",\"jsxParseSpreadChild\",\"previousContext\",\"jsxParseAttribute\",\"jsxParseOpeningElementAt\",\"jsxParseOpeningElementAfterName\",\"selfClosing\",\"jsxParseClosingElementAt\",\"jsxParseElementAt\",\"children\",\"openingElement\",\"closingElement\",\"contents\",\"openingFragment\",\"closingFragment\",\"jsxParseElement\",\"newContext\",\"TypeScriptScope\",\"enums\",\"constEnums\",\"classes\",\"exportOnlyBindings\",\"TypeScriptScopeHandler\",\"importsStack\",\"hasImport\",\"allowShadow\",\"isConst\",\"wasConst\",\"getOwn\",\"hasOwnProperty\",\"unwrapParenthesizedExpression\",\"LValParser\",\"_node$extra3\",\"_node$extra2\",\"operator\",\"arg\",\"checkToRestConversion\",\"elt\",\"element\",\"toReferencedListDeep\",\"parseSpread\",\"parseRestBinding\",\"parseBindingList\",\"ParseBindingListFlags\",\"parseObjectLike\",\"closeCharCode\",\"allowEmpty\",\"elts\",\"checkCommaAfterRest\",\"parseDecorator\",\"parseAssignableListItem\",\"parseBindingRestProperty\",\"parseBindingProperty\",\"parsePropertyName\",\"_left\",\"ObjectProperty\",\"checkLVal\",\"in\",\"checkClashes\",\"hasParenthesizedAncestor\",\"_expression$extra\",\"checkIdentifier\",\"validity\",\"ParseErrorClass\",\"isParenthesizedExpression\",\"nextAncestor\",\"child\",\"declareNameFromIdentifier\",\"identifier\",\"allowPattern\",\"nonNull\",\"x\",\"assert\",\"TSErrors\",\"AbstractMethodHasImplementation\",\"methodName\",\"AbstractPropertyHasInitializer\",\"propertyName\",\"AccesorCannotDeclareThisParameter\",\"AccesorCannotHaveTypeParameters\",\"AccessorCannotBeOptional\",\"ClassMethodHasDeclare\",\"ClassMethodHasReadonly\",\"ConstInitiailizerMustBeStringOrNumericLiteralOrLiteralEnumReference\",\"ConstructorHasTypeParameters\",\"DeclareAccessor\",\"DeclareClassFieldHasInitializer\",\"DeclareFunctionHasImplementation\",\"DuplicateAccessibilityModifier\",\"modifier\",\"DuplicateModifier\",\"EmptyHeritageClauseType\",\"EmptyTypeArguments\",\"EmptyTypeParameters\",\"ExpectedAmbientAfterExportDeclare\",\"ImportAliasHasImportType\",\"IncompatibleModifiers\",\"modifiers\",\"IndexSignatureHasAbstract\",\"IndexSignatureHasAccessibility\",\"IndexSignatureHasDeclare\",\"IndexSignatureHasOverride\",\"IndexSignatureHasStatic\",\"InitializerNotAllowedInAmbientContext\",\"InvalidModifierOnTypeMember\",\"InvalidModifierOnTypeParameter\",\"InvalidModifierOnTypeParameterPositions\",\"InvalidModifiersOrder\",\"orderedModifiers\",\"InvalidPropertyAccessAfterInstantiationExpression\",\"InvalidTupleMemberLabel\",\"MissingInterfaceName\",\"MixedLabeledAndUnlabeledElements\",\"NonAbstractClassHasAbstractMethod\",\"NonClassMethodPropertyHasAbstractModifer\",\"OptionalTypeBeforeRequired\",\"OverrideNotInSubClass\",\"PrivateElementHasAbstract\",\"PrivateElementHasAccessibility\",\"ReadonlyForMethodSignature\",\"ReservedArrowTypeParam\",\"ReservedTypeAssertion\",\"SetAccesorCannotHaveOptionalParameter\",\"SetAccesorCannotHaveRestParameter\",\"SetAccesorCannotHaveReturnType\",\"SingleTypeParameterWithoutTrailingComma\",\"typeParameterName\",\"StaticBlockCannotHaveModifier\",\"TupleOptionalAfterType\",\"TypeAnnotationAfterAssign\",\"TypeImportCannotSpecifyDefaultAndNamed\",\"TypeModifierIsUsedInTypeExports\",\"TypeModifierIsUsedInTypeImports\",\"UnexpectedParameterModifier\",\"UnexpectedReadonly\",\"UnexpectedTypeAnnotation\",\"UnexpectedTypeCastInParameter\",\"UnsupportedImportTypeArgument\",\"UnsupportedParameterPropertyKind\",\"UnsupportedSignatureParameterKind\",\"keywordTypeFromName\",\"tsIsAccessModifier\",\"tsIsVarianceAnnotations\",\"typescript\",\"TypeScriptParserMixin\",\"tsParseInOutModifiers\",\"tsParseModifiers\",\"bind\",\"allowedModifiers\",\"disallowedModifiers\",\"errorTemplate\",\"tsParseConstModifier\",\"tsParseInOutConstModifiers\",\"tsIsIdentifier\",\"tsTokenCanFollowModifier\",\"tsNextTokenCanFollowModifier\",\"tsParseModifier\",\"stopOnStartOfClassStaticBlock\",\"tsIsStartOfStaticBlocks\",\"tsTryParse\",\"modified\",\"enforceOrder\",\"before\",\"after\",\"incompatible\",\"mod1\",\"mod2\",\"accessibility\",\"tsIsListTerminator\",\"tsParseList\",\"parseElement\",\"tsParseDelimitedList\",\"refTrailingCommaPos\",\"tsParseDelimitedListWorker\",\"expectSuccess\",\"trailingCommaPos\",\"tsParseBracketedList\",\"bracket\",\"skipFirstToken\",\"tsParseImportType\",\"qualifier\",\"tsParseEntityName\",\"tsParseTypeArguments\",\"allowReservedWords\",\"tsParseTypeReference\",\"typeName\",\"tsParseThisTypePredicate\",\"lhs\",\"parameterName\",\"tsParseTypeAnnotation\",\"asserts\",\"tsParseThisTypeNode\",\"tsParseTypeQuery\",\"exprName\",\"tsParseTypeParameter\",\"parseModifiers\",\"tsParseTypeParameterName\",\"constraint\",\"tsEatThenParseType\",\"tsTryParseTypeParameters\",\"tsParseTypeParameters\",\"tsFillSignature\",\"returnToken\",\"signature\",\"returnTokenRequired\",\"paramsKey\",\"returnTypeKey\",\"tsParseBindingListForSignature\",\"tsParseTypeOrTypePredicateAnnotation\",\"tsParseTypeMemberSemicolon\",\"tsParseSignatureMember\",\"tsIsUnambiguouslyIndexSignature\",\"tsTryParseIndexSignature\",\"tsLookAhead\",\"parameters\",\"tsTryParseTypeAnnotation\",\"tsParsePropertyOrMethodSignature\",\"readonly\",\"nodeAny\",\"firstParameter\",\"tsParseTypeMember\",\"idx\",\"tsParseTypeLiteral\",\"tsParseObjectTypeMembers\",\"tsIsStartOfMappedType\",\"tsParseMappedTypeParameter\",\"tsExpectThenParseType\",\"tsParseMappedType\",\"nameType\",\"tsParseType\",\"tsTryParseType\",\"tsParseTupleType\",\"elementTypes\",\"tsParseTupleElementType\",\"seenOptionalElement\",\"labeledElements\",\"elementNode\",\"_labeledElements\",\"checkType\",\"isLabeled\",\"labeled\",\"isWord\",\"chAfterWord\",\"wordName\",\"typeOrLabel\",\"tsParseNonArrayType\",\"labeledNode\",\"optionalTypeNode\",\"restNode\",\"tsParseParenthesizedType\",\"tsParseFunctionOrConstructorType\",\"abstract\",\"tsInAllowConditionalTypesContext\",\"tsParseLiteralTypeNode\",\"tsParseTemplateLiteralType\",\"parseTemplate\",\"parseTemplateSubstitution\",\"tsParseThisTypeOrThisTypePredicate\",\"thisKeyword\",\"parseMaybeUnary\",\"nodeType\",\"tsParseArrayTypeOrHigher\",\"tsParseTypeOperator\",\"tsParseTypeOperatorOrHigher\",\"tsCheckTypeAnnotationForReadOnly\",\"tsParseInferType\",\"tsParseConstraintForInferType\",\"tsInDisallowConditionalTypesContext\",\"isTypeOperator\",\"tsParseUnionOrIntersectionType\",\"parseConstituentType\",\"hasLeadingOperator\",\"tsParseIntersectionTypeOrHigher\",\"tsParseUnionTypeOrHigher\",\"tsIsStartOfFunctionType\",\"tsIsUnambiguouslyStartOfFunctionType\",\"tsSkipParameterStart\",\"previousErrorCount\",\"_unused2\",\"tsInType\",\"t\",\"tsParseTypePredicateAsserts\",\"thisTypePredicate\",\"typePredicateVariable\",\"tsParseTypePredicatePrefix\",\"tsTryParseTypeOrTypePredicateAnnotation\",\"eatColon\",\"tsParseNonConditionalType\",\"extendsType\",\"trueType\",\"falseType\",\"isAbstractConstructorSignature\",\"tsParseTypeAssertion\",\"tsParseHeritageClause\",\"originalStartLoc\",\"delimitedList\",\"tsParseInterfaceDeclaration\",\"tsParseTypeAliasDeclaration\",\"tsInNoContext\",\"cb\",\"oldContext\",\"oldInDisallowConditionalTypesContext\",\"tsNextThenParseType\",\"tsDoThenParseType\",\"tsParseEnumMember\",\"initializer\",\"tsParseEnumDeclaration\",\"tsParseModuleBlock\",\"parseBlockOrModuleBlockBody\",\"tsParseModuleOrNamespaceDeclaration\",\"nested\",\"inner\",\"tsParseAmbientExternalModuleDeclaration\",\"global\",\"tsParseImportEqualsDeclaration\",\"isExport\",\"moduleReference\",\"tsParseModuleReference\",\"tsIsExternalModuleReference\",\"tsParseExternalModuleReference\",\"f\",\"tsTryParseAndCatch\",\"tsTryParseDeclare\",\"nany\",\"starttype\",\"tsInAmbientContext\",\"parseFunctionStatement\",\"parseClass\",\"parseVarStatement\",\"tsParseDeclaration\",\"tsTryParseExportDeclaration\",\"tsParseExpressionStatement\",\"mod\",\"tsCheckLineTerminator\",\"tsParseAbstractDeclaration\",\"tsTryParseGenericAsyncArrowFunction\",\"oldMaybeInArrowParameters\",\"tsParseTypeArgumentsInExpression\",\"reScan_lt\",\"tsIsDeclarationStart\",\"override\",\"pp\",\"parameter\",\"isSimpleParameter\",\"tsDisallowOptionalPattern\",\"bodilessType\",\"registerFunctionStatementId\",\"tsCheckForInvalidTypeCasts\",\"items\",\"isInParens\",\"nonNullExpression\",\"isOptionalCall\",\"missingParenErrorLoc\",\"atPossibleAsyncArrow\",\"asyncArrowFn\",\"parseTaggedTemplateExpression\",\"tokenType\",\"_callee$extra\",\"parseExprOp\",\"leftStartLoc\",\"minPrec\",\"isSatisfies\",\"reScan_lt_gt\",\"checkKeywords\",\"checkDuplicateExports\",\"ahead\",\"importNode\",\"isAbstractClass\",\"cls\",\"allowMissingInitializer\",\"declarations\",\"isValidAmbientConstInitializer\",\"parseStatementContent\",\"parseAccessModifier\",\"tsHasSomeModifiers\",\"callParseClassMemberWithIsStatic\",\"parseClassStaticBlock\",\"parseClassMemberWithIsStatic\",\"hadSuperClass\",\"parsePostMemberNameModifiers\",\"methodOrProp\",\"isDeclare\",\"isIdentifier\",\"parseClassPropertyAnnotation\",\"definite\",\"parseClassAccessorProperty\",\"declareClassPrivateMethodInScope\",\"_typeCast\",\"_typeCast2\",\"_jsx4\",\"_typeCast3\",\"typeCast\",\"_typeParameters\",\"reportReservedArrowTypeParam\",\"trailingComma\",\"sawUnary\",\"toAssignableParenthesizedExpression\",\"TSTypeCastExpression\",\"TSParameterProperty\",\"TSNonNullExpression\",\"TSAsExpression\",\"TSSatisfiesExpression\",\"TSTypeAssertion\",\"parseMaybeDecoratorArguments\",\"canHaveLeadingDecorator\",\"getGetterSetterExpectedParamCount\",\"baseCount\",\"firstParam\",\"hasContextParam\",\"parseCatchClauseParam\",\"oldIsAmbientContext\",\"oldInAbstractClass\",\"maybeTakeDecorators\",\"hasBody\",\"shouldParseAsAmbientContext\",\"getExpression\",\"parseExportSpecifier\",\"isString\",\"isInTypeExport\",\"parseTypeOnlyImportExportSpecifier\",\"isImport\",\"isInTypeOnlyImportExport\",\"leftOfAsKey\",\"rightOfAsKey\",\"leftOfAs\",\"rightOfAs\",\"hasTypeSpecifier\",\"canParseAsKeyword\",\"firstAs\",\"secondAs\",\"parseModuleExportName\",\"kindKey\",\"isPossiblyLiteralEnum\",\"expressions\",\"isUncomputedMemberExpressionChain\",\"isNumber\",\"isNegativeNumber\",\"PlaceholderErrors\",\"ClassNameIsRequired\",\"UnexpectedSpace\",\"placeholders\",\"PlaceholdersParserMixin\",\"parsePlaceholder\",\"assertNoSpace\",\"finishPlaceholder\",\"isFinished\",\"chStartsBindingIdentifier\",\"verifyBreakContinue\",\"isBreak\",\"parseStatementOrSloppyAnnexBFunctionDeclaration\",\"parseBlock\",\"createNewLexicalScope\",\"parseFunctionId\",\"requireId\",\"oldStrict\",\"parseClassBody\",\"startsWith\",\"maybeParseExportDefaultSpecifier\",\"checkExport\",\"hasStarImport\",\"maybeParseStarImportSpecifier\",\"parseNamedImportSpecifiers\",\"parseImportSource\",\"v8intrinsic\",\"V8IntrinsicMixin\",\"parseV8Intrinsic\",\"v8IntrinsicStartLoc\",\"parseIdentifierName\",\"expectedConfig\",\"expectedName\",\"expectedOptions\",\"expectedKeys\",\"expectedOptionsIsEmpty\",\"p\",\"option\",\"find\",\"PIPELINE_PROPOSALS\",\"TOPIC_TOKENS\",\"RECORD_AND_TUPLE_SYNTAX_TYPES\",\"validatePlugins\",\"decoratorsBeforeExport\",\"allowCallParenthesized\",\"proposalList\",\"tupleSyntaxIsHash\",\"syntaxType\",\"tokenList\",\"moduleAttributesVersionPluginOption\",\"missingPlugins\",\"mixinPlugins\",\"mixinPluginNames\",\"ExpressionParser\",\"checkProto\",\"isRecord\",\"protoRef\",\"used\",\"shouldExitDescending\",\"disallowIn\",\"disallowInAnd\",\"parseExpressionBase\",\"allowInAnd\",\"parseMaybeAssignDisallowIn\",\"resultError\",\"_resultError$loc\",\"parseYield\",\"ownExpressionErrors\",\"parseMaybeConditional\",\"startIndex\",\"parseExprOps\",\"parseMaybeUnaryOrPrivate\",\"op\",\"prec\",\"checkPipelineAtInfixOperator\",\"logical\",\"coalesce\",\"parseExprOpRightExpr\",\"finishedNode\",\"nextOp\",\"withTopicBindingContext\",\"parseHackPipeBody\",\"parseSmartPipelineBodyInStyle\",\"parseExprOpBaseRightExpr\",\"withSoloAwaitPermittingContext\",\"parseFSharpPipelineBody\",\"_body$extra\",\"requiredParentheses\",\"topicReferenceWasUsedInCurrentContext\",\"checkExponentialAfterUnary\",\"isAwait\",\"isAwaitAllowed\",\"parseAwait\",\"update\",\"isDelete\",\"parseUpdate\",\"isAmbiguousAwait\",\"updateExpressionNode\",\"parseExprSubscripts\",\"maybeAsyncArrow\",\"parseBind\",\"parseCoverCallAndAsyncArrowHead\",\"parseMember\",\"parseNoCallExpr\",\"tag\",\"quasi\",\"dynamicImport\",\"allowPlaceholder\",\"nodeForExtra\",\"oldInFSharpPipelineDirectBody\",\"addTrailingCommaExtraToNode\",\"parseExprListItem\",\"_call$extra\",\"parseSuper\",\"parseImportMetaProperty\",\"parseDo\",\"parseFunctionOrFunctionSent\",\"parseDecorators\",\"parseNewOrNewTarget\",\"parseTopicReferenceThenEqualsSign\",\"parseTopicReference\",\"pipeProposal\",\"parseModuleExpression\",\"parseAsyncFunctionExpression\",\"parseAsyncArrowUnaryFunction\",\"topicTokenType\",\"topicTokenValue\",\"finishTopicReference\",\"testTopicReferenceConfiguration\",\"topicReferenceIsAllowedInCurrentContext\",\"registerTopicReference\",\"meta\",\"parseMetaProperty\",\"parseFunction\",\"innerStartLoc\",\"spreadStartLoc\",\"optionalCommaStartLoc\",\"spreadNodeStartLoc\",\"innerEndLoc\",\"arrowNode\",\"wrapParenthesis\",\"parenExpression\",\"metaProp\",\"parseNew\",\"parseExprList\",\"parseTemplateElement\",\"isTagged\",\"elemStart\",\"elem\",\"isTail\",\"endOffset\",\"elemEnd\",\"cooked\",\"tail\",\"curElt\",\"quasis\",\"propHash\",\"parsePropertyDefinition\",\"maybeAsyncOrAccessorProp\",\"keyName\",\"_params\",\"finishedProp\",\"generator\",\"isExpression\",\"hasStrictModeDirective\",\"nonSimple\",\"isSimpleParamList\",\"formalParameters\",\"reservedTest\",\"delegating\",\"delegate\",\"childExpr\",\"isSimpleReference\",\"checkSmartPipeTopicBodyEarlyErrors\",\"callback\",\"outerContextTopicState\",\"withSmartMixTopicForbiddingContext\",\"outerContextSoloAwaitState\",\"prodParamToSet\",\"prodParamToClear\",\"ret\",\"revertScopes\",\"parseProgram\",\"loopLabel\",\"switchLabel\",\"loneSurrogate\",\"keywordRelationalOperator\",\"babel7CompatTokens\",\"hashEndPos\",\"hashEndLoc\",\"backquoteEnd\",\"backquoteEndLoc\",\"startToken\",\"templateValue\",\"templateElementEnd\",\"templateElementEndLoc\",\"endToken\",\"StatementParser\",\"interpreter\",\"parseInterpreterDirective\",\"finishedProgram\",\"stmtToDirective\",\"directiveLiteral\",\"hasFollowingBindingAtom\",\"endCh\",\"chStartsBindingPattern\",\"hasFollowingBindingIdentifier\",\"startsUsingForOf\",\"parseModuleItem\",\"ParseStatementFlag\",\"parseStatementListItem\",\"allowLabeledFunction\",\"parseStatement\",\"allowDeclaration\",\"allowFunctionDeclaration\",\"parseBreakContinueStatement\",\"parseDebuggerStatement\",\"parseDoWhileStatement\",\"parseForStatement\",\"parseIfStatement\",\"parseReturnStatement\",\"parseSwitchStatement\",\"parseThrowStatement\",\"parseTryStatement\",\"parseWhileStatement\",\"parseWithStatement\",\"parseEmptyStatement\",\"nextTokenCharCode\",\"isAsyncFunction\",\"maybeName\",\"parseLabeledStatement\",\"decoratorsEnabledBeforeExport\",\"maybeDecorators\",\"classNode\",\"exportNode\",\"allowExport\",\"paramsStartLoc\",\"lab\",\"parseHeaderExpression\",\"awaitAt\",\"parseFor\",\"startsWithLet\",\"startsWithUsing\",\"isLetOrUsing\",\"initNode\",\"parseVar\",\"isForIn\",\"parseForIn\",\"startsWithAsync\",\"isForOf\",\"isHangingDeclaration\",\"ParseFunctionFlag\",\"discriminant\",\"cases\",\"cur\",\"sawDefault\",\"isCase\",\"block\",\"handler\",\"clause\",\"finalizer\",\"statementStart\",\"parsedNonDirective\",\"await\",\"isFor\",\"hangingDeclaration\",\"isDeclaration\",\"hadConstructor\",\"publicMethod\",\"privateMethod\",\"publicProp\",\"privateProp\",\"accessorProp\",\"publicMember\",\"parseClassElementName\",\"isPrivate\",\"maybeQuestionTokenStartLoc\",\"pushClassPrivateProperty\",\"pushClassProperty\",\"pushClassAccessorProperty\",\"_member$decorators\",\"parseInitializer\",\"hasDefault\",\"parseAfterDefault\",\"hasStar\",\"parseAfterNamespace\",\"isFromRequired\",\"hasSpecifiers\",\"maybeParseExportNamedSpecifiers\",\"hasDeclaration\",\"maybeParseExportDeclaration\",\"_node2$declaration\",\"isTypeExport\",\"assertions\",\"nextType\",\"hasFrom\",\"nextAfterFrom\",\"maybeParseImportAssertions\",\"checkJSONModuleImport\",\"checkNames\",\"isDefault\",\"isFrom\",\"_declaration$extra\",\"nodes\",\"surrogate\",\"isJSONModuleImport\",\"_node$assertions\",\"nonDefaultNamedSpecifier\",\"parseMaybeImportReflection\",\"isImportReflection\",\"nextNextTokenFirstChar\",\"parseNext\",\"maybeParseModuleAttributes\",\"parseAssertEntries\",\"attrs\",\"attrNames\",\"importSpecifier\",\"Parser\",\"pluginsMap\",\"pluginMap\",\"_options\",\"getParser\",\"ast\",\"moduleError\",\"generateExportedTokenTypes\",\"internalTokenTypes\",\"tokTypes\",\"getParserClass\",\"parserClassCache\",\"pluginsFromOptions\",\"pluginList\"],\"mappings\":\"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AAG,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,GAAG,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,GAAG,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,GAAG,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,GAAG,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,GAAG,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,GAAG,EAAC,CAAC,EAAC,EAAE,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAC,IAAI,EAAC,EAAE,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,CAAC,EAAC,IAAI,EAAC,GAAG,EAAC,IAAI,EAAC,GAAG,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,EAAE,EAAC,CAAC,EAAC,IAAI,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,GAAG,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,GAAG,EAAC,IAAI,EAAC,GAAG,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,IAAI,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,IAAI,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,GAAG,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,GAAG,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,IAAI,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,IAAI,EAAC,KAAK,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,IAAI,EAAC,GAAG,EAAC,IAAI,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,CAAC;AAEj+C,MAAMC,qBAAqB,GAAG,CAAC,GAAG,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,IAAI,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,GAAG,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,GAAG,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,GAAG,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,GAAG,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,C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\"}/bin/babel-parser.js\u0001H#!/usr/bin/env node\n/* eslint no-var: 0 */\n\nvar parser = require(\"..\");\nvar fs = require(\"fs\");\n\nvar filename = process.argv[2];\nif (!filename) {\n  console.error(\"no filename specified\");\n} else {\n  var file = fs.readFileSync(filename, \"utf8\");\n  var ast = parser.parse(file);\n\n  console.log(JSON.stringify(ast, null, \"  \"));\n}\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tcmVhY3QtanN4LXNlbGZANy4yMS4w",
    "content": "/package.json\u0003{\n  \"name\": \"@babel/plugin-transform-react-jsx-self\",\n  \"version\": \"7.21.0\",\n  \"description\": \"Add a __self prop to all JSX Elements\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/babel/babel.git\",\n    \"directory\": \"packages/babel-plugin-transform-react-jsx-self\"\n  },\n  \"homepage\": \"https://babel.dev/docs/en/next/babel-plugin-transform-react-jsx-self\",\n  \"license\": \"MIT\",\n  \"publishConfig\": {\n    \"access\": \"public\"\n  },\n  \"main\": \"./lib/index.js\",\n  \"keywords\": [\n    \"babel-plugin\"\n  ],\n  \"dependencies\": {\n    \"@babel/helper-plugin-utils\": \"^7.20.2\"\n  },\n  \"peerDependencies\": {\n    \"@babel/core\": \"^7.0.0-0\"\n  },\n  \"devDependencies\": {\n    \"@babel/core\": \"^7.21.0\",\n    \"@babel/helper-plugin-test-runner\": \"^7.18.6\",\n    \"@babel/plugin-syntax-jsx\": \"^7.18.6\"\n  },\n  \"engines\": {\n    \"node\": \">=6.9.0\"\n  },\n  \"author\": \"The Babel Team (https://babel.dev/team)\",\n  \"type\": \"commonjs\"\n}/lib/index.js.map\u00132{\"version\":3,\"names\":[\"TRACE_ID\",\"getThisFunctionParent\",\"path\",\"scope\",\"isFunctionParent\",\"isArrowFunctionExpression\",\"parent\",\"isDerivedClass\",\"classPath\",\"node\",\"superClass\",\"isThisAllowed\",\"parentMethodOrFunction\",\"isMethod\",\"kind\",\"parentPath\",\"declare\",\"api\",\"assertVersion\",\"visitor\",\"JSXOpeningElement\",\"id\",\"t\",\"jsxIdentifier\",\"trace\",\"thisExpression\",\"attributes\",\"push\",\"jsxAttribute\",\"jsxExpressionContainer\",\"name\",\"Program\",\"traverse\"],\"sources\":[\"../src/index.ts\"],\"sourcesContent\":[\"/**\\n * This adds a __self={this} JSX attribute to all JSX elements, which React will use\\n * to generate some runtime warnings. However, if the JSX element appears within a\\n * constructor of a derived class, `__self={this}` will not be inserted in order to\\n * prevent runtime errors.\\n *\\n * == JSX Literals ==\\n *\\n * <sometag />\\n *\\n * becomes:\\n *\\n * <sometag __self={this} />\\n */\\nimport { declare } from \\\"@babel/helper-plugin-utils\\\";\\nimport { types as t } from \\\"@babel/core\\\";\\nimport type { Visitor, NodePath } from \\\"@babel/traverse\\\";\\n\\nconst TRACE_ID = \\\"__self\\\";\\n\\n/**\\n * Finds the closest parent function that provides `this`. Specifically, this looks for\\n * the first parent function that isn't an arrow function.\\n *\\n * Derived from `Scope#getFunctionParent`\\n */\\nfunction getThisFunctionParent(\\n  path: NodePath<t.JSXOpeningElement>,\\n): NodePath<Exclude<t.FunctionParent, t.ArrowFunctionExpression>> | null {\\n  let scope = path.scope;\\n  do {\\n    const { path } = scope;\\n    if (path.isFunctionParent() && !path.isArrowFunctionExpression()) {\\n      // @ts-expect-error TS does not exclude ArrowFunctionExpression from FunctionParent\\n      return path;\\n    }\\n  } while ((scope = scope.parent));\\n  return null;\\n}\\n\\n/**\\n * Returns whether the class has specified a superclass.\\n */\\nfunction isDerivedClass(classPath: NodePath<t.Class>) {\\n  return classPath.node.superClass !== null;\\n}\\n\\n/**\\n * Returns whether `this` is allowed at given path.\\n */\\nfunction isThisAllowed(path: NodePath<t.JSXOpeningElement>) {\\n  // This specifically skips arrow functions as they do not rewrite `this`.\\n  const parentMethodOrFunction = getThisFunctionParent(path);\\n  if (parentMethodOrFunction === null) {\\n    // We are not in a method or function. It is fine to use `this`.\\n    return true;\\n  }\\n  if (!parentMethodOrFunction.isMethod()) {\\n    // If the closest parent is a regular function, `this` will be rebound, therefore it is fine to use `this`.\\n    return true;\\n  }\\n  // Current node is within a method, so we need to check if the method is a constructor.\\n  if (parentMethodOrFunction.node.kind !== \\\"constructor\\\") {\\n    // We are not in a constructor, therefore it is always fine to use `this`.\\n    return true;\\n  }\\n  // Now we are in a constructor. If it is a derived class, we do not reference `this`.\\n  return !isDerivedClass(\\n    parentMethodOrFunction.parentPath.parentPath as NodePath<t.Class>,\\n  );\\n}\\n\\nexport default declare(api => {\\n  api.assertVersion(7);\\n\\n  const visitor: Visitor = {\\n    JSXOpeningElement(path) {\\n      if (!isThisAllowed(path)) {\\n        return;\\n      }\\n      const node = path.node;\\n      const id = t.jsxIdentifier(TRACE_ID);\\n      const trace = t.thisExpression();\\n\\n      node.attributes.push(t.jsxAttribute(id, t.jsxExpressionContainer(trace)));\\n    },\\n  };\\n\\n  return {\\n    name: \\\"transform-react-jsx-self\\\",\\n    visitor: {\\n      Program(path) {\\n        path.traverse(visitor);\\n      },\\n    },\\n  };\\n});\\n\"],\"mappings\":\";;;;;;AAcA;AACA;AAGA,MAAMA,QAAQ,GAAG,QAAQ;AAQzB,SAASC,qBAAqB,CAC5BC,IAAmC,EACoC;EACvE,IAAIC,KAAK,GAAGD,IAAI,CAACC,KAAK;EACtB,GAAG;IACD,MAAM;MAAED;IAAK,CAAC,GAAGC,KAAK;IACtB,IAAID,IAAI,CAACE,gBAAgB,EAAE,IAAI,CAACF,IAAI,CAACG,yBAAyB,EAAE,EAAE;MAEhE,OAAOH,IAAI;IACb;EACF,CAAC,QAASC,KAAK,GAAGA,KAAK,CAACG,MAAM;EAC9B,OAAO,IAAI;AACb;AAKA,SAASC,cAAc,CAACC,SAA4B,EAAE;EACpD,OAAOA,SAAS,CAACC,IAAI,CAACC,UAAU,KAAK,IAAI;AAC3C;AAKA,SAASC,aAAa,CAACT,IAAmC,EAAE;EAE1D,MAAMU,sBAAsB,GAAGX,qBAAqB,CAACC,IAAI,CAAC;EAC1D,IAAIU,sBAAsB,KAAK,IAAI,EAAE;IAEnC,OAAO,IAAI;EACb;EACA,IAAI,CAACA,sBAAsB,CAACC,QAAQ,EAAE,EAAE;IAEtC,OAAO,IAAI;EACb;EAEA,IAAID,sBAAsB,CAACH,IAAI,CAACK,IAAI,KAAK,aAAa,EAAE;IAEtD,OAAO,IAAI;EACb;EAEA,OAAO,CAACP,cAAc,CACpBK,sBAAsB,CAACG,UAAU,CAACA,UAAU,CAC7C;AACH;AAAC,eAEc,IAAAC,0BAAO,EAACC,GAAG,IAAI;EAC5BA,GAAG,CAACC,aAAa,CAAC,CAAC,CAAC;EAEpB,MAAMC,OAAgB,GAAG;IACvBC,iBAAiB,CAAClB,IAAI,EAAE;MACtB,IAAI,CAACS,aAAa,CAACT,IAAI,CAAC,EAAE;QACxB;MACF;MACA,MAAMO,IAAI,GAAGP,IAAI,CAACO,IAAI;MACtB,MAAMY,EAAE,GAAGC,WAAC,CAACC,aAAa,CAACvB,QAAQ,CAAC;MACpC,MAAMwB,KAAK,GAAGF,WAAC,CAACG,cAAc,EAAE;MAEhChB,IAAI,CAACiB,UAAU,CAACC,IAAI,CAACL,WAAC,CAACM,YAAY,CAACP,EAAE,EAAEC,WAAC,CAACO,sBAAsB,CAACL,KAAK,CAAC,CAAC,CAAC;IAC3E;EACF,CAAC;EAED,OAAO;IACLM,IAAI,EAAE,0BAA0B;IAChCX,OAAO,EAAE;MACPY,OAAO,CAAC7B,IAAI,EAAE;QACZA,IAAI,CAAC8B,QAAQ,CAACb,OAAO,CAAC;MACxB;IACF;EACF,CAAC;AACH,CAAC,CAAC;AAAA\"}/LICENSE\u0004RMIT License\n\nCopyright (c) 2014-present Sebastian McKenzie and other contributors\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n/README.md\u0001# @babel/plugin-transform-react-jsx-self\n\n> Add a __self prop to all JSX Elements\n\nSee our website [@babel/plugin-transform-react-jsx-self](https://babeljs.io/docs/en/babel-plugin-transform-react-jsx-self) for more information.\n\n## Install\n\nUsing npm:\n\n```sh\nnpm install --save-dev @babel/plugin-transform-react-jsx-self\n```\n\nor using yarn:\n\n```sh\nyarn add @babel/plugin-transform-react-jsx-self --dev\n```\n/lib/index.js\u00064\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\nvar _helperPluginUtils = require(\"@babel/helper-plugin-utils\");\nvar _core = require(\"@babel/core\");\nconst TRACE_ID = \"__self\";\nfunction getThisFunctionParent(path) {\n  let scope = path.scope;\n  do {\n    const {\n      path\n    } = scope;\n    if (path.isFunctionParent() && !path.isArrowFunctionExpression()) {\n      return path;\n    }\n  } while (scope = scope.parent);\n  return null;\n}\nfunction isDerivedClass(classPath) {\n  return classPath.node.superClass !== null;\n}\nfunction isThisAllowed(path) {\n  const parentMethodOrFunction = getThisFunctionParent(path);\n  if (parentMethodOrFunction === null) {\n    return true;\n  }\n  if (!parentMethodOrFunction.isMethod()) {\n    return true;\n  }\n  if (parentMethodOrFunction.node.kind !== \"constructor\") {\n    return true;\n  }\n  return !isDerivedClass(parentMethodOrFunction.parentPath.parentPath);\n}\nvar _default = (0, _helperPluginUtils.declare)(api => {\n  api.assertVersion(7);\n  const visitor = {\n    JSXOpeningElement(path) {\n      if (!isThisAllowed(path)) {\n        return;\n      }\n      const node = path.node;\n      const id = _core.types.jsxIdentifier(TRACE_ID);\n      const trace = _core.types.thisExpression();\n      node.attributes.push(_core.types.jsxAttribute(id, _core.types.jsxExpressionContainer(trace)));\n    }\n  };\n  return {\n    name: \"transform-react-jsx-self\",\n    visitor: {\n      Program(path) {\n        path.traverse(visitor);\n      }\n    }\n  };\n});\nexports.default = _default;\n\n//# sourceMappingURL=index.js.map\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tcmVhY3QtanN4LXNvdXJjZUA3LjE5LjY=",
    "content": "/LICENSE\u0004RMIT License\n\nCopyright (c) 2014-present Sebastian McKenzie and other contributors\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n/package.json\u0003{\n  \"name\": \"@babel/plugin-transform-react-jsx-source\",\n  \"version\": \"7.19.6\",\n  \"description\": \"Add a __source prop to all JSX Elements\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/babel/babel.git\",\n    \"directory\": \"packages/babel-plugin-transform-react-jsx-source\"\n  },\n  \"homepage\": \"https://babel.dev/docs/en/next/babel-plugin-transform-react-jsx-source\",\n  \"license\": \"MIT\",\n  \"publishConfig\": {\n    \"access\": \"public\"\n  },\n  \"main\": \"./lib/index.js\",\n  \"keywords\": [\n    \"babel-plugin\"\n  ],\n  \"dependencies\": {\n    \"@babel/helper-plugin-utils\": \"^7.19.0\"\n  },\n  \"peerDependencies\": {\n    \"@babel/core\": \"^7.0.0-0\"\n  },\n  \"devDependencies\": {\n    \"@babel/core\": \"^7.19.6\",\n    \"@babel/helper-plugin-test-runner\": \"^7.18.6\",\n    \"@babel/plugin-syntax-jsx\": \"^7.18.6\"\n  },\n  \"engines\": {\n    \"node\": \">=6.9.0\"\n  },\n  \"author\": \"The Babel Team (https://babel.dev/team)\",\n  \"type\": \"commonjs\"\n}/README.md\u0001# @babel/plugin-transform-react-jsx-source\n\n> Add a __source prop to all JSX Elements\n\nSee our website [@babel/plugin-transform-react-jsx-source](https://babeljs.io/docs/en/babel-plugin-transform-react-jsx-source) for more information.\n\n## Install\n\nUsing npm:\n\n```sh\nnpm install --save-dev @babel/plugin-transform-react-jsx-source\n```\n\nor using yarn:\n\n```sh\nyarn add @babel/plugin-transform-react-jsx-source --dev\n```\n/lib/index.js.map\u0012a{\"version\":3,\"names\":[\"TRACE_ID\",\"FILE_NAME_VAR\",\"createNodeFromNullish\",\"val\",\"fn\",\"t\",\"nullLiteral\",\"declare\",\"api\",\"assertVersion\",\"makeTrace\",\"fileNameIdentifier\",\"line\",\"column\",\"fileLineLiteral\",\"numericLiteral\",\"fileColumnLiteral\",\"c\",\"template\",\"expression\",\"ast\",\"isSourceAttr\",\"attr\",\"isJSXAttribute\",\"name\",\"visitor\",\"JSXOpeningElement\",\"path\",\"state\",\"node\",\"loc\",\"attributes\",\"some\",\"fileNameId\",\"scope\",\"generateUidIdentifier\",\"getProgramParent\",\"push\",\"id\",\"init\",\"stringLiteral\",\"filename\",\"jsxAttribute\",\"jsxIdentifier\",\"jsxExpressionContainer\",\"cloneNode\",\"start\"],\"sources\":[\"../src/index.ts\"],\"sourcesContent\":[\"/**\\n * This adds {fileName, lineNumber, columnNumber} annotations to JSX tags.\\n *\\n * NOTE: lineNumber and columnNumber are both 1-based.\\n *\\n * == JSX Literals ==\\n *\\n * <sometag />\\n *\\n * becomes:\\n *\\n * var __jsxFileName = 'this/file.js';\\n * <sometag __source={{fileName: __jsxFileName, lineNumber: 10, columnNumber: 1}}/>\\n */\\nimport { declare } from \\\"@babel/helper-plugin-utils\\\";\\nimport { types as t, template } from \\\"@babel/core\\\";\\n\\nconst TRACE_ID = \\\"__source\\\";\\nconst FILE_NAME_VAR = \\\"_jsxFileName\\\";\\n\\nconst createNodeFromNullish = <T, N extends t.Node>(\\n  val: T | null,\\n  fn: (val: T) => N,\\n): N | t.NullLiteral => (val == null ? t.nullLiteral() : fn(val));\\n\\ntype State = {\\n  fileNameIdentifier: t.Identifier;\\n};\\nexport default declare<State>(api => {\\n  api.assertVersion(7);\\n\\n  function makeTrace(\\n    fileNameIdentifier: t.Identifier,\\n    { line, column }: { line: number; column: number },\\n  ) {\\n    const fileLineLiteral = createNodeFromNullish(line, t.numericLiteral);\\n    const fileColumnLiteral = createNodeFromNullish(column, c =>\\n      // c + 1 to make it 1-based instead of 0-based.\\n      t.numericLiteral(c + 1),\\n    );\\n\\n    return template.expression.ast`{\\n      fileName: ${fileNameIdentifier},\\n      lineNumber: ${fileLineLiteral},\\n      columnNumber: ${fileColumnLiteral},\\n    }`;\\n  }\\n\\n  const isSourceAttr = (attr: t.Node) =>\\n    t.isJSXAttribute(attr) && attr.name.name === TRACE_ID;\\n\\n  return {\\n    name: \\\"transform-react-jsx-source\\\",\\n    visitor: {\\n      JSXOpeningElement(path, state) {\\n        const { node } = path;\\n        if (\\n          // the element was generated and doesn't have location information\\n          !node.loc ||\\n          // Already has __source\\n          path.node.attributes.some(isSourceAttr)\\n        ) {\\n          return;\\n        }\\n\\n        if (!state.fileNameIdentifier) {\\n          const fileNameId = path.scope.generateUidIdentifier(FILE_NAME_VAR);\\n          state.fileNameIdentifier = fileNameId;\\n\\n          path.scope.getProgramParent().push({\\n            id: fileNameId,\\n            init: t.stringLiteral(state.filename || \\\"\\\"),\\n          });\\n        }\\n\\n        node.attributes.push(\\n          t.jsxAttribute(\\n            t.jsxIdentifier(TRACE_ID),\\n            t.jsxExpressionContainer(\\n              makeTrace(t.cloneNode(state.fileNameIdentifier), node.loc.start),\\n            ),\\n          ),\\n        );\\n      },\\n    },\\n  };\\n});\\n\"],\"mappings\":\";;;;;;;AAcA;;AACA;;AAEA,MAAMA,QAAQ,GAAG,UAAjB;AACA,MAAMC,aAAa,GAAG,cAAtB;;AAEA,MAAMC,qBAAqB,GAAG,CAC5BC,GAD4B,EAE5BC,EAF4B,KAGLD,GAAG,IAAI,IAAP,GAAcE,WAAA,CAAEC,WAAF,EAAd,GAAgCF,EAAE,CAACD,GAAD,CAH3D;;eAQe,IAAAI,0BAAA,EAAeC,GAAG,IAAI;EACnCA,GAAG,CAACC,aAAJ,CAAkB,CAAlB;;EAEA,SAASC,SAAT,CACEC,kBADF,EAEE;IAAEC,IAAF;IAAQC;EAAR,CAFF,EAGE;IACA,MAAMC,eAAe,GAAGZ,qBAAqB,CAACU,IAAD,EAAOP,WAAA,CAAEU,cAAT,CAA7C;IACA,MAAMC,iBAAiB,GAAGd,qBAAqB,CAACW,MAAD,EAASI,CAAC,IAEvDZ,WAAA,CAAEU,cAAF,CAAiBE,CAAC,GAAG,CAArB,CAF6C,CAA/C;IAKA,OAAOC,cAAA,CAASC,UAAT,CAAoBC,GAAI;AACnC,kBAAkBT,kBAAmB;AACrC,oBAAoBG,eAAgB;AACpC,sBAAsBE,iBAAkB;AACxC,MAJI;EAKD;;EAED,MAAMK,YAAY,GAAIC,IAAD,IACnBjB,WAAA,CAAEkB,cAAF,CAAiBD,IAAjB,KAA0BA,IAAI,CAACE,IAAL,CAAUA,IAAV,KAAmBxB,QAD/C;;EAGA,OAAO;IACLwB,IAAI,EAAE,4BADD;IAELC,OAAO,EAAE;MACPC,iBAAiB,CAACC,IAAD,EAAOC,KAAP,EAAc;QAC7B,MAAM;UAAEC;QAAF,IAAWF,IAAjB;;QACA,IAEE,CAACE,IAAI,CAACC,GAAN,IAEAH,IAAI,CAACE,IAAL,CAAUE,UAAV,CAAqBC,IAArB,CAA0BX,YAA1B,CAJF,EAKE;UACA;QACD;;QAED,IAAI,CAACO,KAAK,CAACjB,kBAAX,EAA+B;UAC7B,MAAMsB,UAAU,GAAGN,IAAI,CAACO,KAAL,CAAWC,qBAAX,CAAiClC,aAAjC,CAAnB;UACA2B,KAAK,CAACjB,kBAAN,GAA2BsB,UAA3B;UAEAN,IAAI,CAACO,KAAL,CAAWE,gBAAX,GAA8BC,IAA9B,CAAmC;YACjCC,EAAE,EAAEL,UAD6B;YAEjCM,IAAI,EAAElC,WAAA,CAAEmC,aAAF,CAAgBZ,KAAK,CAACa,QAAN,IAAkB,EAAlC;UAF2B,CAAnC;QAID;;QAEDZ,IAAI,CAACE,UAAL,CAAgBM,IAAhB,CACEhC,WAAA,CAAEqC,YAAF,CACErC,WAAA,CAAEsC,aAAF,CAAgB3C,QAAhB,CADF,EAEEK,WAAA,CAAEuC,sBAAF,CACElC,SAAS,CAACL,WAAA,CAAEwC,SAAF,CAAYjB,KAAK,CAACjB,kBAAlB,CAAD,EAAwCkB,IAAI,CAACC,GAAL,CAASgB,KAAjD,CADX,CAFF,CADF;MAQD;;IA9BM;EAFJ,CAAP;AAmCD,CA1Dc,C\"}/lib/index.js\u0007E\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _helperPluginUtils = require(\"@babel/helper-plugin-utils\");\n\nvar _core = require(\"@babel/core\");\n\nconst TRACE_ID = \"__source\";\nconst FILE_NAME_VAR = \"_jsxFileName\";\n\nconst createNodeFromNullish = (val, fn) => val == null ? _core.types.nullLiteral() : fn(val);\n\nvar _default = (0, _helperPluginUtils.declare)(api => {\n  api.assertVersion(7);\n\n  function makeTrace(fileNameIdentifier, {\n    line,\n    column\n  }) {\n    const fileLineLiteral = createNodeFromNullish(line, _core.types.numericLiteral);\n    const fileColumnLiteral = createNodeFromNullish(column, c => _core.types.numericLiteral(c + 1));\n    return _core.template.expression.ast`{\n      fileName: ${fileNameIdentifier},\n      lineNumber: ${fileLineLiteral},\n      columnNumber: ${fileColumnLiteral},\n    }`;\n  }\n\n  const isSourceAttr = attr => _core.types.isJSXAttribute(attr) && attr.name.name === TRACE_ID;\n\n  return {\n    name: \"transform-react-jsx-source\",\n    visitor: {\n      JSXOpeningElement(path, state) {\n        const {\n          node\n        } = path;\n\n        if (!node.loc || path.node.attributes.some(isSourceAttr)) {\n          return;\n        }\n\n        if (!state.fileNameIdentifier) {\n          const fileNameId = path.scope.generateUidIdentifier(FILE_NAME_VAR);\n          state.fileNameIdentifier = fileNameId;\n          path.scope.getProgramParent().push({\n            id: fileNameId,\n            init: _core.types.stringLiteral(state.filename || \"\")\n          });\n        }\n\n        node.attributes.push(_core.types.jsxAttribute(_core.types.jsxIdentifier(TRACE_ID), _core.types.jsxExpressionContainer(makeTrace(_core.types.cloneNode(state.fileNameIdentifier), node.loc.start))));\n      }\n\n    }\n  };\n});\n\nexports.default = _default;\n\n//# sourceMappingURL=index.js.map\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QGZhc3RpZnkvZGVlcG1lcmdlQDEuMy4w",
    "content": "/types/index.d.ts\u0007type DeepMergeFn = <T1, T2>(target: T1, source: T2) => DeepMerge<T1, T2>;\ntype DeepMergeAllFn = <T extends Array<any>>(...targets: T) => DeepMergeAll<{}, T>;\n\ntype Primitive =\n  | null\n  | undefined\n  | string\n  | number\n  | boolean\n  | symbol\n  | bigint;\n\ntype BuiltIns = Primitive | Date | RegExp;\n\ntype MergeTypes<T, U> = T extends Array<infer A1>\n  ? U extends Array<infer A2>\n  ? Array<A1 | A2>\n  : T\n  : U\n\ntype DifferenceKeys<\n  T,\n  U,\n  T0 = Omit<T, keyof U> & Omit<U, keyof T>,\n  T1 = { [K in keyof T0]: T0[K] }\n  > = T1\n\ntype IntersectionKeys<T, U> = Omit<T | U, keyof DifferenceKeys<T, U>>\n\ntype DeepMergeHelper<\n  T,\n  U,\n  T0 = DifferenceKeys<T, U>\n  & { [K in keyof IntersectionKeys<T, U>]: DeepMerge<T[K], U[K]> },\n  T1 = { [K in keyof T0]: T0[K] }\n  > = T1\n\ntype DeepMerge<T, U> =\n  U extends BuiltIns\n  ? U\n  : [T, U] extends [any[], any[]]\n  ? MergeTypes<T, U>\n  : [T, U] extends [{ [key: string]: unknown }, { [key: string]: unknown }]\n  ? DeepMergeHelper<T, U>\n  : U\n\ntype First<T> = T extends [infer _I, ...infer _Rest] ? _I : never;\ntype Rest<T> = T extends [infer _I, ...infer _Rest] ? _Rest : never\n\ntype DeepMergeAll<R, T> = First<T> extends never\n  ? R\n  : DeepMergeAll<DeepMerge<R, First<T>>, Rest<T>>;\n\ntype MergeArrayFnOptions = {\n  clone: (value: any) => any;\n  isMergeableObject: (value: any) => boolean;\n  deepmerge: DeepMergeFn;\n  getKeys: (value: object) => string[];\n}\n\ntype MergeArrayFn = (options: MergeArrayFnOptions) => (target: any[], source: any[]) => any[]\n\ninterface Options {\n  mergeArray?: MergeArrayFn;\n  symbols?: boolean;\n  all?: boolean;\n}\n\ntype DeepmergeConstructor = typeof deepmerge\n\ndeclare namespace deepmerge {\n  export { Options }\n  export const deepmerge: DeepmergeConstructor\n  export { deepmerge as default }\n}\n\ndeclare function deepmerge(options: Options & { all: true }): DeepMergeAllFn;\ndeclare function deepmerge(options?: Options): DeepMergeFn;\n\nexport = deepmerge\n/package.json\u0003{\n  \"name\": \"@fastify/deepmerge\",\n  \"version\": \"1.3.0\",\n  \"description\": \"Merges the enumerable properties of two or more objects deeply.\",\n  \"main\": \"index.js\",\n  \"types\": \"types/index.d.ts\",\n  \"scripts\": {\n    \"lint\": \"standard\",\n    \"lint:fix\": \"standard --fix\",\n    \"test\": \"npm run test:unit && npm run test:typescript\",\n    \"test:unit\": \"tap\",\n    \"test:typescript\": \"tsd\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/fastify/deepmerge.git\"\n  },\n  \"author\": \"\",\n  \"license\": \"MIT\",\n  \"bugs\": {\n    \"url\": \"https://github.com/fastify/deepmerge/issues\"\n  },\n  \"homepage\": \"https://github.com/fastify/deepmerge#readme\",\n  \"devDependencies\": {\n    \"standard\": \"^17.0.0\",\n    \"tap\": \"^16.3.0\",\n    \"tape\": \"^5.6.1\",\n    \"tsd\": \"^0.24.1\"\n  },\n  \"files\": [\n    \"LICENSE\",\n    \"README.md\",\n    \"index.js\",\n    \"types/index.d.ts\"\n  ],\n  \"keywords\": [\n    \"merge\",\n    \"deep\",\n    \"recursive\",\n    \"object\"\n  ]\n}\n/README.md\u0015# @fastify/deepmerge\n\n![CI](https://github.com/fastify/deepmerge/workflows/CI/badge.svg)\n[![NPM version](https://img.shields.io/npm/v/@fastify/deepmerge.svg?style=flat)](https://www.npmjs.com/package/@fastify/deepmerge)\n[![js-standard-style](https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat)](https://standardjs.com/)\n\nMerges the enumerable properties of two or more objects deeply. Fastest implementation of deepmerge, see section 'Benchmarks'.\n\n### Install\n```\nnpm i @fastify/deepmerge\n```\n\n### Usage\n\nThe module exports a function, which provides a function to deepmerge Objects. \n\n```\ndeepmerge(options)\n```\n\n`options` is optional and can contain following values\n\n- `symbols` (`boolean`, optional) - should also merge object-keys which are symbols, default is false\n- `all` (`boolean`, optional) - merges all parameters, default is false\n- `mergeArray` (`function`, optional) - provide a function, which returns a function to add custom array merging function\n- `cloneProtoObject` (`function`, optional) - provide a function, which must return a clone of the object with the prototype of the object\n\n```js\nconst deepmerge = require('@fastify/deepmerge')()\nconst result = deepmerge({a: 'value'}, { b: 404 })\nconsole.log(result) // {a: 'value',  b: 404 }\n```\n\n```js\nconst deepmerge = require('@fastify/deepmerge')({ all: true })\nconst result = deepmerge({a: 'value'}, { b: 404 }, { a: 404 })\nconsole.log(result) // {a: 404,  b: 404 }\n```\n\n#### mergeArray\n\nThe default mode to merge Arrays is to concat the source-Array to the target-Array.\n\n```js\nconst target = [1, 2, 3]\nconst source = [4, 5, 6]\nconst deepmerge = require('@fastify/deepmerge')()\nconst result = deepmerge(target, source)\nconsole.log(result) // [1, 2, 3, 4, 5, 6]\n```\n\nTo overwrite the default behaviour regarding merging Arrays, you can provide a function to the\n`mergeArray` option of the deepmerge-function. The function provided to `mergeArray`\ngets an options-parameter passed, which is an Object containing the following keys and values.\n\n```typescript\nclone: (value: any) => any;\nisMergeableObject: (value: any) => any;\ndeepmerge: DeepMergeFn;\ngetKeys: (value: object) => string[];\n```\n\nThe `mergeAray`-Function needs to return the actual Array merging function, which accepts two parameters of type \nArray, and returns a value.\n\nExample 1: Replace the target-Array with a clone of the source-Array.\n\n```js\nfunction replaceByClonedSource(options) {\n  const clone = options.clone\n  return function (target, source) {\n    return clone(source)\n  }\n}\n\nconst deepmerge = require('@fastify/deepmerge')({ mergeArray: replaceByClonedSource })\nconst result = deepmerge([1, 2, 3], [4, 5, 6])\nconsole.log(result) // [4, 5, 6]\n```\n\nExample 2: Merge each element of the source-Array with the element at the same index-position of the target-Array.\n\n```js\nfunction deepmergeArray(options) {\n  const deepmerge = options.deepmerge\n  const clone = options.clone\n  return function (target, source) {\n    let i = 0\n    const tl = target.length\n    const sl = source.length\n    const il = Math.max(target.length, source.length)\n    const result = new Array(il)\n    for (i = 0; i < il; ++i) {\n      if (i < sl) {\n        result[i] = deepmerge(target[i], source[i])\n      } else {\n        result[i] = clone(target[i])\n      }\n    }\n    return result\n  }\n}\n\n// default behaviour\nconst deepmergeConcatArray = require('@fastify/deepmerge')()\nconst resultConcatArray = deepmergeConcatArray([{ a: [1, 2, 3 ]}], [{b: [4, 5, 6]}])\nconsole.log(resultConcatArray) // [ { a: [ 1, 2, 3 ]}, { b: [ 4, 5, 6 ] } ]\n\n// modified behaviour\nconst deepmergeDeepmergeArray = require('@fastify/deepmerge')({ mergeArray: deepmergeArray })\nconst resultDeepmergedArray = deepmergeDeepmergeArray([{ a: [1, 2, 3 ]}], [{b: [4, 5, 6]}])\nconsole.log(resultDeepmergedArray) // [ { a: [ 1, 2, 3 ], b: [ 4, 5, 6 ] } ]\n```\n\n#### cloneProtoObject\n\nMerging objects with prototypes, such as Streams or Buffers, are not supported by default.\nYou can provide a custom function to let this module deal with the object that has a `prototype` _(JSON object excluded)_.\n\n```js\nfunction cloneByReference (source) {\n  return source\n}\n\nconst deepmergeByReference = require('@fastify/deepmerge')({\n  cloneProtoObject: cloneByReference\n})\n\nconst result = deepmergeByReference({}, { stream: process.stdout })\nconsole.log(result) // { stream: <ref *1> WriteStream }\n```\n\n## Benchmarks\n\nThe benchmarks are available in the benchmark-folder. \n\n`npm run bench` - benchmark various use cases of deepmerge:\n```\n@@fastify/deepmerge: merge regex with date x 1,256,523,040 ops/sec ±0.16% (92 runs sampled)\n@fastify/deepmerge: merge object with a primitive x 1,256,082,915 ops/sec ±0.25% (97 runs sampled)\n@fastify/deepmerge: merge two arrays containing strings x 25,392,605 ops/sec ±0.22% (97 runs sampled)\n@fastify/deepmerge: two merge arrays containing objects x 1,655,426 ops/sec ±0.65% (96 runs sampled)\n@fastify/deepmerge: merge two flat objects x 15,571,029 ops/sec ±0.45% (96 runs sampled)\n@fastify/deepmerge: merge nested objects x 7,601,328 ops/sec ±0.31% (96 runs sampled)\n```\n\n`npm run bench:compare` - comparison of @fastify/deepmerge with other popular deepmerge implementation:\n```\n@fastify/deepmerge x 605,343 ops/sec ±0.87% (96 runs sampled)\ndeepmerge x 20,312 ops/sec ±1.06% (92 runs sampled)\nmerge-deep x 83,167 ops/sec ±1.30% (94 runs sampled)\nts-deepmerge x 175,977 ops/sec ±0.57% (96 runs sampled)\ndeepmerge-ts x 174,973 ops/sec ±0.44% (93 runs sampled)\nlodash.merge x 89,213 ops/sec ±0.70% (98 runs sampled)\n```\n\n## License\n\nLicensed under [MIT](./LICENSE)./index.js\u0011'use strict'\n\n// based on https://github.com/TehShrike/deepmerge\n// MIT License\n// Copyright (c) 2012 - 2022 James Halliday, Josh Duff, and other contributors of deepmerge\n\nconst JSON_PROTO = Object.getPrototypeOf({})\n\nfunction deepmergeConstructor (options) {\n  function isNotPrototypeKey (value) {\n    return (\n      value !== 'constructor' &&\n      value !== 'prototype' &&\n      value !== '__proto__'\n    )\n  }\n\n  function cloneArray (value) {\n    let i = 0\n    const il = value.length\n    const result = new Array(il)\n    for (i = 0; i < il; ++i) {\n      result[i] = clone(value[i])\n    }\n    return result\n  }\n\n  function cloneObject (target) {\n    const result = {}\n\n    if (cloneProtoObject && Object.getPrototypeOf(target) !== JSON_PROTO) {\n      return cloneProtoObject(target)\n    }\n\n    const targetKeys = getKeys(target)\n    let i, il, key\n    for (i = 0, il = targetKeys.length; i < il; ++i) {\n      isNotPrototypeKey(key = targetKeys[i]) &&\n        (result[key] = clone(target[key]))\n    }\n    return result\n  }\n\n  function concatArrays (target, source) {\n    const tl = target.length\n    const sl = source.length\n    let i = 0\n    const result = new Array(tl + sl)\n    for (i = 0; i < tl; ++i) {\n      result[i] = clone(target[i])\n    }\n    for (i = 0; i < sl; ++i) {\n      result[i + tl] = clone(source[i])\n    }\n    return result\n  }\n\n  const propertyIsEnumerable = Object.prototype.propertyIsEnumerable\n  function getSymbolsAndKeys (value) {\n    const result = Object.keys(value)\n    const keys = Object.getOwnPropertySymbols(value)\n    for (let i = 0, il = keys.length; i < il; ++i) {\n      propertyIsEnumerable.call(value, keys[i]) && result.push(keys[i])\n    }\n    return result\n  }\n\n  const getKeys = options && options.symbols\n    ? getSymbolsAndKeys\n    : Object.keys\n\n  const cloneProtoObject = typeof options?.cloneProtoObject === 'function'\n    ? options.cloneProtoObject\n    : undefined\n\n  function isMergeableObject (value) {\n    return typeof value === 'object' && value !== null && !(value instanceof RegExp) && !(value instanceof Date)\n  }\n\n  function isPrimitive (value) {\n    return typeof value !== 'object' || value === null\n  }\n\n  const isPrimitiveOrBuiltIn = typeof Buffer !== 'undefined'\n    ? (value) => typeof value !== 'object' || value === null || value instanceof RegExp || value instanceof Date || value instanceof Buffer\n    : (value) => typeof value !== 'object' || value === null || value instanceof RegExp || value instanceof Date\n\n  const mergeArray = options && typeof options.mergeArray === 'function'\n    ? options.mergeArray({ clone, deepmerge: _deepmerge, getKeys, isMergeableObject })\n    : concatArrays\n\n  function clone (entry) {\n    return isMergeableObject(entry)\n      ? Array.isArray(entry)\n        ? cloneArray(entry)\n        : cloneObject(entry)\n      : entry\n  }\n\n  function mergeObject (target, source) {\n    const result = {}\n    const targetKeys = getKeys(target)\n    const sourceKeys = getKeys(source)\n    let i, il, key\n    for (i = 0, il = targetKeys.length; i < il; ++i) {\n      isNotPrototypeKey(key = targetKeys[i]) &&\n      (sourceKeys.indexOf(key) === -1) &&\n      (result[key] = clone(target[key]))\n    }\n\n    for (i = 0, il = sourceKeys.length; i < il; ++i) {\n      isNotPrototypeKey(key = sourceKeys[i]) &&\n      (\n        key in target && (targetKeys.indexOf(key) !== -1 && (result[key] = _deepmerge(target[key], source[key])), true) || // eslint-disable-line no-mixed-operators\n        (result[key] = clone(source[key]))\n      )\n    }\n    return result\n  }\n\n  function _deepmerge (target, source) {\n    const sourceIsArray = Array.isArray(source)\n    const targetIsArray = Array.isArray(target)\n\n    if (isPrimitive(source)) {\n      return source\n    } else if (isPrimitiveOrBuiltIn(target)) {\n      return clone(source)\n    } else if (sourceIsArray && targetIsArray) {\n      return mergeArray(target, source)\n    } else if (sourceIsArray !== targetIsArray) {\n      return clone(source)\n    } else {\n      return mergeObject(target, source)\n    }\n  }\n\n  function _deepmergeAll () {\n    switch (arguments.length) {\n      case 0:\n        return {}\n      case 1:\n        return clone(arguments[0])\n      case 2:\n        return _deepmerge(arguments[0], arguments[1])\n    }\n    let result\n    for (let i = 0, il = arguments.length; i < il; ++i) {\n      result = _deepmerge(result, arguments[i])\n    }\n    return result\n  }\n\n  return options && options.all\n    ? _deepmergeAll\n    : _deepmerge\n}\n\nmodule.exports = deepmergeConstructor\nmodule.exports.default = deepmergeConstructor\nmodule.exports.deepmerge = deepmergeConstructor\n/LICENSE\u0004MIT License\n\nCopyright (c) The Fastify Team\n\nThe Fastify team members are listed at https://github.com/fastify/fastify#team\nand in the README file.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE."
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QGZhc3RpZnkvZXJyb3JAMy4yLjA=",
    "content": "/package.json\u0003{\n  \"name\": \"@fastify/error\",\n  \"version\": \"3.2.0\",\n  \"description\": \"A small utility, used by Fastify itself, for generating consistent error objects across your codebase and plugins.\",\n  \"main\": \"index.js\",\n  \"types\": \"types/index.d.ts\",\n  \"scripts\": {\n    \"lint\": \"standard\",\n    \"test\": \"npm run test:unit && npm run test:typescript\",\n    \"test:unit\": \"tap\",\n    \"test:typescript\": \"tsd\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/fastify/fastify-error.git\"\n  },\n  \"keywords\": [\n    \"fastify\",\n    \"error\",\n    \"utility\",\n    \"plugin\"\n  ],\n  \"author\": \"Tomas Della Vedova\",\n  \"license\": \"MIT\",\n  \"bugs\": {\n    \"url\": \"https://github.com/fastify/fastify-error/issues\"\n  },\n  \"homepage\": \"https://github.com/fastify/fastify-error#readme\",\n  \"devDependencies\": {\n    \"standard\": \"^17.0.0\",\n    \"tap\": \"^16.0.0\",\n    \"tsd\": \"^0.25.0\"\n  },\n  \"tsd\": {\n    \"compilerOptions\": {\n      \"esModuleInterop\": true\n    }\n  },\n  \"publishConfig\": {\n    \"access\": \"public\"\n  }\n}\n/test/index.test.js\u0010'use strict'\n\n/* eslint no-prototype-builtins: 0 */\n\nconst test = require('tap').test\nconst createError = require('..')\n\ntest('Create error with zero parameter', t => {\n  t.plan(6)\n\n  const NewError = createError('CODE', 'Not available')\n  const err = new NewError()\n  t.ok(err instanceof Error)\n  t.equal(err.name, 'FastifyError')\n  t.equal(err.message, 'Not available')\n  t.equal(err.code, 'CODE')\n  t.equal(err.statusCode, 500)\n  t.ok(err.stack)\n})\n\ntest('Create error with 1 parameter', t => {\n  t.plan(6)\n\n  const NewError = createError('CODE', 'hey %s')\n  const err = new NewError('alice')\n  t.ok(err instanceof Error)\n  t.equal(err.name, 'FastifyError')\n  t.equal(err.message, 'hey alice')\n  t.equal(err.code, 'CODE')\n  t.equal(err.statusCode, 500)\n  t.ok(err.stack)\n})\n\ntest('Create error with 1 parameter set to undefined', t => {\n  t.plan(1)\n\n  const NewError = createError('CODE', 'hey %s')\n  const err = new NewError(undefined)\n  t.equal(err.message, 'hey undefined')\n})\n\ntest('Create error with 2 parameters', (t) => {\n  t.plan(6)\n\n  const NewError = createError('CODE', 'hey %s, I like your %s')\n  const err = new NewError('alice', 'attitude')\n  t.ok(err instanceof Error)\n  t.equal(err.name, 'FastifyError')\n  t.equal(err.message, 'hey alice, I like your attitude')\n  t.equal(err.code, 'CODE')\n  t.equal(err.statusCode, 500)\n  t.ok(err.stack)\n})\n\ntest('Create error with 2 parameters set to undefined', t => {\n  t.plan(1)\n\n  const NewError = createError('CODE', 'hey %s, I like your %s')\n  const err = new NewError(undefined, undefined)\n  t.equal(err.message, 'hey undefined, I like your undefined')\n})\n\ntest('Create error with 3 parameters', t => {\n  t.plan(6)\n\n  const NewError = createError('CODE', 'hey %s, I like your %s %s')\n  const err = new NewError('alice', 'attitude', 'see you')\n  t.ok(err instanceof Error)\n  t.equal(err.name, 'FastifyError')\n  t.equal(err.message, 'hey alice, I like your attitude see you')\n  t.equal(err.code, 'CODE')\n  t.equal(err.statusCode, 500)\n  t.ok(err.stack)\n})\n\ntest('Create error with 3 parameters set to undefined', t => {\n  t.plan(4)\n\n  const NewError = createError('CODE', 'hey %s, I like your %s %s')\n  const err = new NewError(undefined, undefined, undefined)\n  t.equal(err.message, 'hey undefined, I like your undefined undefined')\n  t.equal(err.code, 'CODE')\n  t.equal(err.statusCode, 500)\n  t.ok(err.stack)\n})\n\ntest('Create error with 4 parameters set to undefined', t => {\n  t.plan(4)\n\n  const NewError = createError('CODE', 'hey %s, I like your %s %s and %s')\n  const err = new NewError(undefined, undefined, undefined, undefined)\n  t.equal(err.message, 'hey undefined, I like your undefined undefined and undefined')\n  t.equal(err.code, 'CODE')\n  t.equal(err.statusCode, 500)\n  t.ok(err.stack)\n})\n\ntest('Create error with no statusCode property', t => {\n  t.plan(6)\n\n  const NewError = createError('CODE', 'hey %s', 0)\n  const err = new NewError('dude')\n  t.ok(err instanceof Error)\n  t.equal(err.name, 'FastifyError')\n  t.equal(err.message, 'hey dude')\n  t.equal(err.code, 'CODE')\n  t.equal(err.statusCode, undefined)\n  t.ok(err.stack)\n})\n\ntest('Should throw when error code has no fastify code', t => {\n  t.plan(1)\n\n  t.throws(() => createError(), new Error('Fastify error code must not be empty'))\n})\n\ntest('Should throw when error code has no message', t => {\n  t.plan(1)\n\n  t.throws(() => createError('code'), new Error('Fastify error message must not be empty'))\n})\n\ntest('Create error with different base', t => {\n  t.plan(7)\n\n  const NewError = createError('CODE', 'hey %s', 500, TypeError)\n  const err = new NewError('dude')\n  t.ok(err instanceof Error)\n  t.ok(err instanceof TypeError)\n  t.equal(err.name, 'FastifyError')\n  t.equal(err.message, 'hey dude')\n  t.equal(err.code, 'CODE')\n  t.equal(err.statusCode, 500)\n  t.ok(err.stack)\n})\n\ntest('FastifyError.toString returns code', t => {\n  t.plan(1)\n\n  const NewError = createError('CODE', 'foo')\n  const err = new NewError()\n  t.equal(err.toString(), 'FastifyError [CODE]: foo')\n})\n\ntest('Create the error without the new keyword', t => {\n  t.plan(6)\n\n  const NewError = createError('CODE', 'Not available')\n  const err = NewError()\n  t.ok(err instanceof Error)\n  t.equal(err.name, 'FastifyError')\n  t.equal(err.message, 'Not available')\n  t.equal(err.code, 'CODE')\n  t.equal(err.statusCode, 500)\n  t.ok(err.stack)\n})\n/index.js\u00055'use strict'\n\nconst { inherits, format } = require('util')\n\nfunction createError (code, message, statusCode = 500, Base = Error) {\n  if (!code) throw new Error('Fastify error code must not be empty')\n  if (!message) throw new Error('Fastify error message must not be empty')\n\n  code = code.toUpperCase()\n\n  function FastifyError (a, b, c) {\n    if (!new.target) {\n      return new FastifyError(...arguments)\n    }\n    Error.captureStackTrace(this, FastifyError)\n    this.name = 'FastifyError'\n    this.code = code\n\n    // more performant than spread (...) operator\n    switch (arguments.length) {\n      case 3:\n        this.message = format(message, a, b, c)\n        break\n      case 2:\n        this.message = format(message, a, b)\n        break\n      case 1:\n        this.message = format(message, a)\n        break\n      case 0:\n        this.message = message\n        break\n      default:\n        this.message = format(message, ...arguments)\n    }\n\n    this.statusCode = statusCode || undefined\n  }\n  FastifyError.prototype[Symbol.toStringTag] = 'Error'\n\n  FastifyError.prototype.toString = function () {\n    return `${this.name} [${this.code}]: ${this.message}`\n  }\n\n  inherits(FastifyError, Base)\n\n  return FastifyError\n}\n\nmodule.exports = createError\nmodule.exports.default = createError\nmodule.exports.createError = createError\n/LICENSE\u0004(MIT License\n\nCopyright (c) 2020 Fastify\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n/.github/dependabot.yml\u0001\u0011version: 2\nupdates:\n  - package-ecosystem: \"github-actions\"\n    directory: \"/\"\n    schedule:\n      interval: \"monthly\"\n    open-pull-requests-limit: 10\n\n  - package-ecosystem: \"npm\"\n    directory: \"/\"\n    schedule:\n      interval: \"weekly\"\n    open-pull-requests-limit: 10\n/types/index.d.ts\u0003declare function createError<C extends string, SC extends number>(code: C, message: string, statusCode: SC, Base?: Error): createError.FastifyErrorConstructor<{ code: C; statusCode: SC }>;\ndeclare function createError<C extends string>(code: C, message: string, statusCode?: number, Base?: Error): createError.FastifyErrorConstructor<{ code: C; }>;\n\ntype CreateError = typeof createError;\n\ndeclare namespace createError {\n  export interface FastifyError extends Error {\n    code: string;\n    name: string;\n    statusCode?: number;\n  }\n\n  export interface FastifyErrorConstructor<E extends { code: string; statusCode?: number } = { code: string; statusCode?: number }> {\n    new (a?: any, b?: any, c?: any): FastifyError & E;\n    (a?: any, b?: any, c?: any): FastifyError & E;\n    readonly prototype: FastifyError & E;\n  }\n\n  export const createError: CreateError\n  export { createError as default }\n}\n\nexport = createError\n/types/index.test-d.ts\u0003#import createError, { FastifyError, FastifyErrorConstructor } from '..'\nimport { expectType } from 'tsd'\n\nconst CustomError = createError('ERROR_CODE', 'message')\nexpectType<FastifyErrorConstructor<{ code: 'ERROR_CODE' }>>(CustomError)\nconst err = new CustomError()\nexpectType<FastifyError & { code: 'ERROR_CODE' }>(err)\nexpectType<'ERROR_CODE'>(err.code)\nexpectType<string>(err.message)\nexpectType<number>(err.statusCode!)\n\nconst CustomTypedError = createError('OTHER_CODE', 'message', 400)\nexpectType<FastifyErrorConstructor<{ code: 'OTHER_CODE'; statusCode: 400 }>>(CustomTypedError)\nconst typed = new CustomTypedError()\nexpectType<FastifyError & { code: 'OTHER_CODE'; statusCode: 400 }>(typed)\nexpectType<'OTHER_CODE'>(typed.code)\nexpectType<string>(typed.message)\nexpectType<400>(typed.statusCode)\n/.taprc\u001cfiles:\n  - test/**/*.test.js/.github/workflows/ci.yml\u0001\u0010name: CI\n\non:\n  push:\n    paths-ignore:\n      - 'docs/**'\n      - '*.md'\n  pull_request:\n    paths-ignore:\n      - 'docs/**'\n      - '*.md'\n\njobs:\n  test:\n    uses: fastify/workflows/.github/workflows/plugins-ci.yml@v3\n    with:\n      license-check: true\n      lint: true\n/README.md\u0006'# @fastify/error\n\n![CI](https://github.com/fastify/fastify-error/workflows/CI/badge.svg)\n[![NPM version](https://img.shields.io/npm/v/@fastify/error.svg?style=flat)](https://www.npmjs.com/package/@fastify/error)\n[![js-standard-style](https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat)](https://standardjs.com/)\n\nA small utility, used by Fastify itself, for generating consistent error objects across your codebase and plugins.\n\n### Install\n```\nnpm i @fastify/error\n```\n\n### Usage\n\nThe module exports a function that you can use for consistent error objects, it takes 4 parameters:\n\n```\ncreateError(code, message [, statusCode [, Base]])\n```\n\n- `code` (`string`, required) - The error code, you can access it later with `error.code`. For consistency, we recommend prefixing plugin error codes with `FST_`\n- `message` (`string`, required) - The error message. You can also use interpolated strings for formatting the message.\n- `statusCode` (`number`, optional) - The status code that Fastify will use if the error is sent via HTTP.\n- `Base` (`Error`, optional) - The base error object that will be used. (eg `TypeError`, `RangeError`)\n\n```js\nconst createError = require('@fastify/error')\nconst CustomError = createError('ERROR_CODE', 'message')\nconsole.log(new CustomError())\n```\n\nHow to use an interpolated string:\n```js\nconst createError = require('@fastify/error')\nconst CustomError = createError('ERROR_CODE', 'Hello %s')\nconsole.log(new CustomError('world')) // error.message => 'Hello world'\n```\n\n## License\n\nLicensed under [MIT](./LICENSE).\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QGZhc3RpZnkvZmFzdC1qc29uLXN0cmluZ2lmeS1jb21waWxlckA0LjIuMA==",
    "content": "/package.json\u0004o{\n  \"name\": \"@fastify/fast-json-stringify-compiler\",\n  \"description\": \"Build and manage the fast-json-stringify instances for the fastify framework\",\n  \"version\": \"4.2.0\",\n  \"main\": \"index.js\",\n  \"types\": \"types/index.d.ts\",\n  \"scripts\": {\n    \"lint\": \"standard\",\n    \"lint:fix\": \"standard --fix\",\n    \"unit\": \"tap test/**/*.test.js\",\n    \"test\": \"npm run unit && npm run test:typescript\",\n    \"posttest\": \"rimraf test/fjs-generated*.js\",\n    \"test:typescript\": \"tsd\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/fastify/fast-json-stringify-compiler.git\"\n  },\n  \"keywords\": [],\n  \"author\": \"Manuel Spigolon <manuel.spigolon@nearform.com> (https://github.com/Eomm)\",\n  \"license\": \"MIT\",\n  \"bugs\": {\n    \"url\": \"https://github.com/fastify/fast-json-stringify-compiler/issues\"\n  },\n  \"homepage\": \"https://github.com/fastify/fast-json-stringify-compiler#readme\",\n  \"devDependencies\": {\n    \"fastify\": \"^4.0.0\",\n    \"rimraf\": \"^3.0.2\",\n    \"sanitize-filename\": \"^1.6.3\",\n    \"standard\": \"^17.0.0\",\n    \"tap\": \"^16.0.0\",\n    \"tsd\": \"^0.25.0\"\n  },\n  \"dependencies\": {\n    \"fast-json-stringify\": \"^5.0.0\"\n  }\n}\n/test/duplicate-schema.test.js\u0002\u0003'use strict'\n\nconst t = require('tap')\nconst FjsCompiler = require('../index')\n\nt.test('Use input schema duplicate in the externalSchemas', async t => {\n  t.plan(1)\n  const externalSchemas = {\n    schema1: {\n      $id: 'schema1',\n      type: 'number'\n    },\n    schema2: {\n      $id: 'schema2',\n      type: 'string'\n    }\n  }\n\n  const factory = FjsCompiler()\n  const compiler = factory(externalSchemas)\n\n  compiler({ schema: externalSchemas.schema1 })\n  compiler({ schema: externalSchemas.schema2 })\n\n  t.pass()\n})\n/test/plugin.test.js\u0005'use strict'\n\nconst t = require('tap')\nconst fastify = require('fastify')\nconst FjsCompiler = require('../index')\n\nconst echo = async (req, reply) => { return req.body }\n\nconst sampleSchema = Object.freeze({\n  $id: 'example1',\n  type: 'object',\n  properties: {\n    name: { type: 'string' }\n  }\n})\n\nconst externalSchemas1 = Object.freeze({})\nconst externalSchemas2 = Object.freeze({\n  foo: {\n    $id: 'foo',\n    type: 'object',\n    properties: {\n      name: { type: 'string' }\n    }\n  }\n})\n\nconst fastifyFjsOptionsDefault = Object.freeze({})\n\nt.test('basic usage', t => {\n  t.plan(1)\n  const factory = FjsCompiler()\n  const compiler = factory(externalSchemas1, fastifyFjsOptionsDefault)\n  const serializeFunc = compiler({ schema: sampleSchema })\n  const result = serializeFunc({ name: 'hello' })\n  t.equal(result, '{\"name\":\"hello\"}')\n})\n\nt.test('fastify integration', async t => {\n  const factory = FjsCompiler()\n\n  const app = fastify({\n    serializerOpts: {\n      rounding: 'ceil'\n    },\n    schemaController: {\n      compilersFactory: {\n        buildSerializer: factory\n      }\n    }\n  })\n\n  app.addSchema(externalSchemas2.foo)\n\n  app.post('/', {\n    handler: echo,\n    schema: {\n      response: {\n        200: {\n          $ref: 'foo#'\n        }\n      }\n    }\n  })\n\n  const res = await app.inject({\n    url: '/',\n    method: 'POST',\n    payload: {\n      version: '1',\n      foo: 'this is not a number',\n      name: 'serialize me'\n    }\n  })\n\n  t.equal(res.statusCode, 200)\n  t.same(res.json(), { name: 'serialize me' })\n})\n/LICENSE\u0004(MIT License\n\nCopyright (c) 2022 Fastify\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n/types/index.test-d.ts\f*import { expectAssignable, expectError, expectType } from \"tsd\";\nimport SerializerSelector, {\n  RouteDefinition,\n  Serializer,\n  SerializerCompiler,\n  SerializerFactory,\n  SerializerSelector as SerializerSelectorNamed,\n  StandaloneSerializer,\n} from \"..\";\n\n/**\n * SerializerSelector\n */\n\n{\n  const compiler = SerializerSelector();\n  expectType<SerializerFactory>(compiler);\n}\n\n{\n  const compiler = SerializerSelectorNamed();\n  expectType<SerializerFactory>(compiler);\n}\n\n{\n  {\n    const sampleSchema = {\n      $id: 'example1',\n      type: 'object',\n      properties: {\n        name: { type: 'string' }\n      }\n    }\n\n    const externalSchemas1 = {}\n\n    const factory = SerializerSelector()\n    expectType<SerializerFactory>(factory);\n    const compiler = factory(externalSchemas1, {})\n    expectType<SerializerCompiler>(compiler);\n    const serializeFunc = compiler({ schema: sampleSchema })\n    expectType<Serializer>(serializeFunc);\n\n    expectType<string>(serializeFunc({ name: 'hello' }))\n  }\n}\n\n/**\n * StandaloneSerializer\n */\n\nconst reader = StandaloneSerializer({\n  readMode: true,\n  restoreFunction: (route: RouteDefinition) => {\n    expectAssignable<RouteDefinition>(route)\n    return {} as Serializer\n  },\n});\nexpectType<SerializerFactory>(reader);\n\nconst writer = StandaloneSerializer({\n  readMode: false,\n  storeFunction: (route: RouteDefinition, code: string) => {\n    expectAssignable<RouteDefinition>(route)\n    expectAssignable<string>(code)\n  },\n});\nexpectType<SerializerFactory>(writer);\n\n{\n  const base = {\n    $id: 'urn:schema:base',\n    definitions: {\n      hello: { type: 'string' }\n    },\n    type: 'object',\n    properties: {\n      hello: { $ref: '#/definitions/hello' }\n    }\n  }\n\n  const refSchema = {\n    $id: 'urn:schema:ref',\n    type: 'object',\n    properties: {\n      hello: { $ref: 'urn:schema:base#/definitions/hello' }\n    }\n  }\n\n  const endpointSchema = {\n    schema: {\n      $id: 'urn:schema:endpoint',\n      $ref: 'urn:schema:ref'\n    }\n  }\n\n  const schemaMap = {\n    [base.$id]: base,\n    [refSchema.$id]: refSchema\n  }\n\n  expectError(StandaloneSerializer({\n    readMode: true,\n    storeFunction () { }\n  }))\n  expectError(StandaloneSerializer({\n    readMode: false,\n    restoreFunction () {}\n  }))\n  expectError(StandaloneSerializer({\n    restoreFunction () {}\n  }))\n\n  expectType<SerializerFactory>(StandaloneSerializer({\n    storeFunction (routeOpts, schemaSerializerCode) {\n      expectType<RouteDefinition>(routeOpts)\n      expectType<string>(schemaSerializerCode)\n    }\n  }))\n\n  expectType<SerializerFactory>(StandaloneSerializer({\n    readMode: true,\n    restoreFunction (routeOpts) {\n      expectType<RouteDefinition>(routeOpts)\n      return {} as Serializer\n    }\n  }))\n\n  const factory = StandaloneSerializer({\n    readMode: false,\n    storeFunction (routeOpts, schemaSerializerCode) {\n      expectType<RouteDefinition>(routeOpts)\n      expectType<string>(schemaSerializerCode)\n    }\n  })\n  expectType<SerializerFactory>(factory)\n\n  const compiler = factory(schemaMap)\n  expectType<SerializerCompiler>(compiler)\n  expectType<Serializer>(compiler(endpointSchema))\n}\n/.github/dependabot.yml\u0001\u0011version: 2\nupdates:\n  - package-ecosystem: \"github-actions\"\n    directory: \"/\"\n    schedule:\n      interval: \"monthly\"\n    open-pull-requests-limit: 10\n\n  - package-ecosystem: \"npm\"\n    directory: \"/\"\n    schedule:\n      interval: \"weekly\"\n    open-pull-requests-limit: 10\n/index.js\u0003)'use strict'\n\nconst fastJsonStringify = require('fast-json-stringify')\n\nfunction SerializerSelector () {\n  return function buildSerializerFactory (externalSchemas, serializerOpts) {\n    const fjsOpts = Object.assign({}, serializerOpts, { schema: externalSchemas })\n    return responseSchemaCompiler.bind(null, fjsOpts)\n  }\n}\n\nfunction responseSchemaCompiler (fjsOpts, { schema /* method, url, httpStatus */ }) {\n  if (fjsOpts.schema && schema.$id && fjsOpts.schema[schema.$id]) {\n    fjsOpts.schema = { ...fjsOpts.schema }\n    delete fjsOpts.schema[schema.$id]\n  }\n  return fastJsonStringify(schema, fjsOpts)\n}\n\nmodule.exports = SerializerSelector\nmodule.exports.default = SerializerSelector\nmodule.exports.SerializerSelector = SerializerSelector\nmodule.exports.StandaloneSerializer = require('./standalone')\n/README.md\u0015d# @fastify/fast-json-stringify-compiler\nBuild and manage the [`fast-json-stringify`](https://www.npmjs.com/package/fast-json-stringify) instances for the fastify framework.\nThis package is responsible for compiling the application's `response` JSON schemas into optimized functions to speed up the response time.\n\n[![js-standard-style](https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat)](http://standardjs.com/)\n[![Continuous Integration](https://github.com/fastify/fast-json-stringify-compiler/workflows/Continuous%20Integration/badge.svg)](https://github.com/fastify/fast-json-stringify-compiler/actions/workflows/ci.yml)\n\n\n## Versions\n\n| `@fastify/fast-json-stringify-compiler` | `fast-json-stringify` | Supported `fastify` |\n|----------------------------------------:|----------------------:|--------------------:|\n|                                    v1.x |                  v3.x |                ^3.x |\n|                                    v2.x |                  v3.x |                ^4.x |\n|                                    v3.x |                  v4.x |                ^4.x |\n|                                    v4.x |                  v5.x |                ^4.x |\n\n### fast-json-stringify Configuration\n\nThe `fast-json-stringify` configuration is the default one. You can check it the default settings in the [`fast-json-stringify` option](https://github.com/fastify/fast-json-stringify/#options) documentation.\n\nYou can also override the default configuration by passing the [`serializerOpts`](https://www.fastify.io/docs/latest/Reference/Server/#serializeropts) configuration to the Fastify instance.\n\n## Usage\n\nThis module is already used as default by Fastify.\nIf you need to provide to your server instance a different version, refer to [the official doc](https://www.fastify.io/docs/latest/Reference/Server/#schemacontroller).\n\n### fast-json-stringify Standalone\n\n`fast-json-stringify@v4.1.0` introduces the [standalone feature](https://github.com/fastify/fast-json-stringify#standalone) that let you to pre-compile your schemas and use them in your application for a faster startup.\n\nTo use this feature, you must be aware of the following:\n\n1. You must generate and save the application's compiled schemas.\n2. Read the compiled schemas from the file and provide them back to your Fastify application.\n\n\n#### Generate and save the compiled schemas\n\nFastify helps you to generate the serialization schemas functions and it is your choice to save them where you want.\nTo accomplish this, you must use a new compiler: `@fastify/fast-json-stringify-compiler/standalone`.\n\nYou must provide 2 parameters to this compiler:\n\n- `readMode: false`: a boolean to indicate that you want generate the schemas functions string.\n- `storeFunction`\" a sync function that must store the source code of the schemas functions. You may provide an async function too, but you must manage errors.\n\nWhen `readMode: false`, **the compiler is meant to be used in development ONLY**.\n\n\n```js\nconst { StandaloneSerializer } = require('@fastify/fast-json-stringify-compiler')\n\nconst factory = StandaloneSerializer({\n  readMode: false,\n  storeFunction (routeOpts, schemaSerializationCode) {\n    // routeOpts is like: { schema, method, url, httpStatus }\n    // schemaSerializationCode is a string source code that is the compiled schema function\n    const fileName = generateFileName(routeOpts)\n    fs.writeFileSync(path.join(__dirname, fileName), schemaSerializationCode)\n  }\n})\n\nconst app = fastify({\n  jsonShorthand: false,\n  schemaController: {\n    compilersFactory: {\n      buildSerializer: factory\n    }\n  }\n})\n\n// ... add all your routes with schemas ...\n\napp.ready().then(() => {\n  // at this stage all your schemas are compiled and stored in the file system\n  // now it is important to turn off the readMode\n})\n```\n\n#### Read the compiled schemas functions\n\nAt this stage, you should have a file for every route's schema.\nTo use them, you must use the `@fastify/fast-json-stringify-compiler/standalone` with the parameters:\n\n- `readMode: true`: a boolean to indicate that you want read and use the schemas functions string.\n- `restoreFunction`\" a sync function that must return a function to serialize the route's payload.\n\nImportant keep away before you continue reading the documentation:\n\n- when you use the `readMode: true`, the application schemas are not compiled (they are ignored). So, if you change your schemas, you must recompile them!\n- as you can see, you must relate the route's schema to the file name using the `routeOpts` object. You may use the `routeOpts.schema.$id` field to do so, it is up to you to define a unique schema identifier.\n\n```js\nconst { StandaloneSerializer } = require('@fastify/fast-json-stringify-compiler')\n\nconst factory = StandaloneSerializer({\n  readMode: true,\n  restoreFunction (routeOpts) {\n    // routeOpts is like: { schema, method, url, httpStatus }\n    const fileName = generateFileName(routeOpts)\n    return require(path.join(__dirname, fileName))\n  }\n})\n\nconst app = fastify({\n  jsonShorthand: false,\n  schemaController: {\n    compilersFactory: {\n      buildSerializer: factory\n    }\n  }\n})\n\n// ... add all your routes with schemas as before...\n\napp.listen({ port: 3000 })\n```\n\n### How it works\n\nThis module provide a factory function to produce [Serializer Compilers](https://www.fastify.io/docs/latest/Reference/Server/#serializercompiler) functions.\n\n## License\n\nLicensed under [MIT](./LICENSE).\n/.eslintrc\u0018{\"extends\": \"standard\"}\n/test/standalone.test.js\u0013x'use strict'\n\nconst fs = require('fs')\nconst path = require('path')\nconst t = require('tap')\nconst fastify = require('fastify')\nconst sanitize = require('sanitize-filename')\n\nconst { StandaloneSerializer: FjsStandaloneCompiler } = require('../')\n\nfunction generateFileName (routeOpts) {\n  return `/fjs-generated-${sanitize(routeOpts.schema.$id)}-${routeOpts.method}-${routeOpts.httpPart}-${sanitize(routeOpts.url)}.js`\n}\n\nt.test('errors', t => {\n  t.plan(2)\n  t.throws(() => {\n    FjsStandaloneCompiler()\n  }, 'missing restoreFunction')\n  t.throws(() => {\n    FjsStandaloneCompiler({ readMode: false })\n  }, 'missing storeFunction')\n})\n\nt.test('generate standalone code', t => {\n  t.plan(5)\n\n  const base = {\n    $id: 'urn:schema:base',\n    definitions: {\n      hello: { type: 'string' }\n    },\n    type: 'object',\n    properties: {\n      hello: { $ref: '#/definitions/hello' }\n    }\n  }\n\n  const refSchema = {\n    $id: 'urn:schema:ref',\n    type: 'object',\n    properties: {\n      hello: { $ref: 'urn:schema:base#/definitions/hello' }\n    }\n  }\n\n  const endpointSchema = {\n    schema: {\n      $id: 'urn:schema:endpoint',\n      $ref: 'urn:schema:ref'\n    }\n  }\n\n  const schemaMap = {\n    [base.$id]: base,\n    [refSchema.$id]: refSchema\n  }\n\n  const factory = FjsStandaloneCompiler({\n    readMode: false,\n    storeFunction (routeOpts, schemaSerializerCode) {\n      t.same(routeOpts, endpointSchema)\n      t.type(schemaSerializerCode, 'string')\n      fs.writeFileSync(path.join(__dirname, '/fjs-generated.js'), schemaSerializerCode)\n      t.pass('stored the serializer function')\n    }\n  })\n\n  const compiler = factory(schemaMap)\n  compiler(endpointSchema)\n  t.pass('compiled the endpoint schema')\n\n  t.test('usage standalone code', t => {\n    t.plan(3)\n    const standaloneSerializer = require('./fjs-generated')\n    t.ok(standaloneSerializer)\n\n    const valid = standaloneSerializer({ hello: 'world' })\n    t.same(valid, JSON.stringify({ hello: 'world' }))\n\n    const invalid = standaloneSerializer({ hello: [] })\n    t.same(invalid, '{\"hello\":\"\"}')\n  })\n})\n\nt.test('fastify integration - writeMode', async t => {\n  t.plan(4)\n\n  const factory = FjsStandaloneCompiler({\n    readMode: false,\n    storeFunction (routeOpts, schemaSerializationCode) {\n      const fileName = generateFileName(routeOpts)\n      t.ok(routeOpts)\n      fs.writeFileSync(path.join(__dirname, fileName), schemaSerializationCode)\n      t.pass(`stored the serializer function ${fileName}`)\n    },\n    restoreFunction () {\n      t.fail('write mode ON')\n    }\n  })\n\n  const app = buildApp(factory)\n  await app.ready()\n})\n\nt.test('fastify integration - writeMode forces standalone', async t => {\n  t.plan(4)\n\n  const factory = FjsStandaloneCompiler({\n    readMode: false,\n    storeFunction (routeOpts, schemaSerializationCode) {\n      const fileName = generateFileName(routeOpts)\n      t.ok(routeOpts)\n      fs.writeFileSync(path.join(__dirname, fileName), schemaSerializationCode)\n      t.pass(`stored the serializer function ${fileName}`)\n    },\n    restoreFunction () {\n      t.fail('write mode ON')\n    }\n  })\n\n  const app = buildApp(factory, {\n    mode: 'not-standalone',\n    rounding: 'ceil'\n  })\n\n  await app.ready()\n})\n\nt.test('fastify integration - readMode', async t => {\n  t.plan(6)\n\n  const factory = FjsStandaloneCompiler({\n    readMode: true,\n    storeFunction () {\n      t.fail('read mode ON')\n    },\n    restoreFunction (routeOpts) {\n      const fileName = generateFileName(routeOpts)\n      t.pass(`restore the serializer function ${fileName}}`)\n      return require(path.join(__dirname, fileName))\n    }\n  })\n\n  const app = buildApp(factory)\n  await app.ready()\n\n  let res = await app.inject({\n    url: '/foo',\n    method: 'POST'\n  })\n  t.equal(res.statusCode, 200)\n  t.equal(res.payload, JSON.stringify({ hello: 'world' }))\n\n  res = await app.inject({\n    url: '/bar?lang=it',\n    method: 'GET'\n  })\n  t.equal(res.statusCode, 200)\n  t.equal(res.payload, JSON.stringify({ lang: 'en' }))\n})\n\nfunction buildApp (factory, serializerOpts) {\n  const app = fastify({\n    exposeHeadRoutes: false,\n    jsonShorthand: false,\n    schemaController: {\n      compilersFactory: {\n        buildSerializer: factory\n      }\n    },\n    serializerOpts\n  })\n\n  app.addSchema({\n    $id: 'urn:schema:foo',\n    type: 'object',\n    properties: {\n      name: { type: 'string' },\n      id: { type: 'integer' }\n    }\n  })\n\n  app.post('/foo', {\n    schema: {\n      response: {\n        200: {\n          $id: 'urn:schema:response',\n          type: 'object',\n          properties: {\n            hello: { $ref: 'urn:schema:foo#/properties/name' }\n          }\n        }\n      }\n    }\n  }, () => { return { hello: 'world' } })\n\n  app.get('/bar', {\n    schema: {\n      response: {\n        200: {\n          $id: 'urn:schema:response:bar',\n          type: 'object',\n          properties: {\n            lang: { type: 'string', enum: ['it', 'en'] }\n          }\n        }\n      }\n    }\n  }, () => { return { lang: 'en' } })\n\n  return app\n}\n/types/index.d.ts\u0005*import { Options } from 'fast-json-stringify'\n\ntype FastJsonStringifyFactory = () => SerializerSelector.SerializerFactory\n\ndeclare namespace SerializerSelector {\n  export type SerializerFactory = (\n    externalSchemas?: unknown,\n    options?: Options\n  ) => SerializerCompiler;\n\n  export type SerializerCompiler = (\n    externalSchemas?: unknown,\n    options?: Options\n  ) => Serializer;\n\n  export type Serializer = (doc: any) => string\n\n  export type RouteDefinition = {\n    method: string;\n    url: string;\n    httpStatus: string;\n    schema?: unknown;\n  }\n\n  export type StandaloneOptions = StandaloneOptionsReadModeOn | StandaloneOptionsReadModeOff\n\n  export type StandaloneOptionsReadModeOn = {\n    readMode: true;\n    restoreFunction?(opts: RouteDefinition): Serializer;\n  }\n\n  export type StandaloneOptionsReadModeOff = {\n    readMode?: false | undefined;\n    storeFunction?(opts: RouteDefinition, schemaSerializationCode: string): void;\n  }\n\n  export type { Options }\n  export const SerializerSelector: FastJsonStringifyFactory;\n  export function StandaloneSerializer(options: StandaloneOptions): SerializerFactory;\n\n  export { SerializerSelector as default }\n}\n\ndeclare function SerializerSelector(...params: Parameters<FastJsonStringifyFactory>): ReturnType<FastJsonStringifyFactory>\nexport = SerializerSelector\n/.github/workflows/ci.yml\u0001\u0010name: CI\n\non:\n  push:\n    paths-ignore:\n      - 'docs/**'\n      - '*.md'\n  pull_request:\n    paths-ignore:\n      - 'docs/**'\n      - '*.md'\n\njobs:\n  test:\n    uses: fastify/workflows/.github/workflows/plugins-ci.yml@v3\n    with:\n      license-check: true\n      lint: true\n/standalone.js\u0005'use strict'\n\nconst SerializerSelector = require('./index')\n\nfunction StandaloneSerializer (options = { readMode: true }) {\n  if (options.readMode === true && typeof options.restoreFunction !== 'function') {\n    throw new Error('You must provide a function for the restoreFunction-option when readMode ON')\n  }\n\n  if (options.readMode !== true && typeof options.storeFunction !== 'function') {\n    throw new Error('You must provide a function for the storeFunction-option when readMode OFF')\n  }\n\n  if (options.readMode === true) {\n    // READ MODE: it behalf only in the restore function provided by the user\n    return function wrapper () {\n      return function (opts) {\n        return options.restoreFunction(opts)\n      }\n    }\n  }\n\n  // WRITE MODE: it behalf on the default SerializerSelector, wrapping the API to run the Ajv Standalone code generation\n  const factory = SerializerSelector()\n  return function wrapper (externalSchemas, serializerOpts = {}) {\n    // to generate the serialization source code, this option is mandatory\n    serializerOpts.mode = 'standalone'\n\n    const compiler = factory(externalSchemas, serializerOpts)\n    return function (opts) { // { schema/*, method, url, httpPart */ }\n      const serializeFuncCode = compiler(opts)\n\n      options.storeFunction(opts, serializeFuncCode)\n\n      // eslint-disable-next-line no-new-func\n      return new Function(serializeFuncCode)\n    }\n  }\n}\n\nmodule.exports = StandaloneSerializer\nmodule.exports.default = StandaloneSerializer\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QGh1bWFud2hvY29kZXMvY29uZmlnLWFycmF5QDAuOS41",
    "content": "/LICENSE,]                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n/package.json\u0005{\n  \"name\": \"@humanwhocodes/config-array\",\n  \"version\": \"0.9.5\",\n  \"description\": \"Glob-based configuration matching.\",\n  \"author\": \"Nicholas C. Zakas\",\n  \"main\": \"api.js\",\n  \"files\": [\n    \"api.js\"\n  ],\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/humanwhocodes/config-array.git\"\n  },\n  \"bugs\": {\n    \"url\": \"https://github.com/humanwhocodes/config-array/issues\"\n  },\n  \"homepage\": \"https://github.com/humanwhocodes/config-array#readme\",\n  \"scripts\": {\n    \"build\": \"rollup -c\",\n    \"format\": \"nitpik\",\n    \"lint\": \"eslint *.config.js src/*.js tests/*.js\",\n    \"prepublish\": \"npm run build\",\n    \"test:coverage\": \"nyc --include src/*.js npm run test\",\n    \"test\": \"mocha -r esm tests/ --recursive\"\n  },\n  \"gitHooks\": {\n    \"pre-commit\": \"lint-staged\"\n  },\n  \"lint-staged\": {\n    \"*.js\": [\n      \"nitpik\",\n      \"eslint --fix --ignore-pattern '!.eslintrc.js'\"\n    ]\n  },\n  \"keywords\": [\n    \"configuration\",\n    \"configarray\",\n    \"config file\"\n  ],\n  \"license\": \"Apache-2.0\",\n  \"engines\": {\n    \"node\": \">=10.10.0\"\n  },\n  \"dependencies\": {\n    \"@humanwhocodes/object-schema\": \"^1.2.1\",\n    \"debug\": \"^4.1.1\",\n    \"minimatch\": \"^3.0.4\"\n  },\n  \"devDependencies\": {\n    \"@nitpik/javascript\": \"^0.3.3\",\n    \"@nitpik/node\": \"0.0.5\",\n    \"chai\": \"^4.2.0\",\n    \"eslint\": \"^6.7.1\",\n    \"esm\": \"^3.2.25\",\n    \"lint-staged\": \"^10.2.8\",\n    \"mocha\": \"^6.2.3\",\n    \"nyc\": \"^14.1.1\",\n    \"rollup\": \"^1.12.3\",\n    \"yorkie\": \"^2.0.0\"\n  }\n}\n/README.md*|# Config Array\n\nby [Nicholas C. Zakas](https://humanwhocodes.com)\n\nIf you find this useful, please consider supporting my work with a [donation](https://humanwhocodes.com/donate).\n\n## Description\n\nA config array is a way of managing configurations that are based on glob pattern matching of filenames. Each config array contains the information needed to determine the correct configuration for any file based on the filename. \n\n## Background\n\nIn 2019, I submitted an [ESLint RFC](https://github.com/eslint/rfcs/pull/9) proposing a new way of configuring ESLint. The goal was to streamline what had become an increasingly complicated configuration process. Over several iterations, this proposal was eventually born.\n\nThe basic idea is that all configuration, including overrides, can be represented by a single array where each item in the array is a config object. Config objects appearing later in the array override config objects appearing earlier in the array. You can calculate a config for a given file by traversing all config objects in the array to find the ones that match the filename. Matching is done by specifying glob patterns in `files` and `ignores` properties on each config object. Here's an example:\n\n```js\nexport default [\n\n    // match all JSON files\n    {\n        name: \"JSON Handler\",\n        files: [\"**/*.json\"],\n        handler: jsonHandler\n    },\n\n    // match only package.json\n    {\n        name: \"package.json Handler\",\n        files: [\"package.json\"],\n        handler: packageJsonHandler\n    }\n];\n```\n\nIn this example, there are two config objects: the first matches all JSON files in all directories and the second matches just `package.json` in the base path directory (all the globs are evaluated as relative to a base path that can be specified). When you retrieve a configuration for `foo.json`, only the first config object matches so `handler` is equal to `jsonHandler`; when you retrieve a configuration for `package.json`, `handler` is equal to `packageJsonHandler` (because both config objects match, the second one wins).\n\n## Installation\n\nYou can install the package using npm or Yarn:\n\n```bash\nnpm install @humanwhocodes/config-array --save\n\n# or\n\nyarn add @humanwhocodes/config-array\n```\n\n## Usage\n\nFirst, import the `ConfigArray` constructor:\n\n```js\nimport { ConfigArray } from \"@humanwhocodes/config-array\";\n\n// or using CommonJS\n\nconst { ConfigArray } = require(\"@humanwhocodes/config-array\");\n```\n\nWhen you create a new instance of `ConfigArray`, you must pass in two arguments: an array of configs and an options object. The array of configs is most likely read in from a configuration file, so here's a typical example:\n\n```js\nconst configFilename = path.resolve(process.cwd(), \"my.config.js\");\nconst { default: rawConfigs } = await import(configFilename);\nconst configs = new ConfigArray(rawConfigs, {\n    \n    // the path to match filenames from\n    basePath: process.cwd(),\n\n    // additional items in each config\n    schema: mySchema\n});\n```\n\nThis example reads in an object or array from `my.config.js` and passes it into the `ConfigArray` constructor as the first argument. The second argument is an object specifying the `basePath` (the directoy in which `my.config.js` is found) and a `schema` to define the additional properties of a config object beyond `files`, `ignores`, and `name`.\n\n### Specifying a Schema\n\nThe `schema` option is required for you to use additional properties in config objects. The schema is object that follows the format of an [`ObjectSchema`](https://npmjs.com/package/@humanwhocodes/object-schema). The schema specifies both validation and merge rules that the `ConfigArray` instance needs to combine configs when there are multiple matches. Here's an example:\n\n```js\nconst configFilename = path.resolve(process.cwd(), \"my.config.js\");\nconst { default: rawConfigs } = await import(configFilename);\n\nconst mySchema = {\n\n    // define the handler key in configs\n    handler: {\n        required: true,\n        merge(a, b) {\n            if (!b) return a;\n            if (!a) return b;\n        },\n        validate(value) {\n            if (typeof value !== \"function\") {\n                throw new TypeError(\"Function expected.\");\n            }\n        }\n    }\n};\n\nconst configs = new ConfigArray(rawConfigs, {\n    \n    // the path to match filenames from\n    basePath: process.cwd(),\n\n    // additional item schemas in each config\n    schema: mySchema,\n\n    // additional config types supported (default: [])\n    extraConfigTypes: [\"array\", \"function\"];\n});\n```\n\n### Config Arrays\n\nConfig arrays can be multidimensional, so it's possible for a config array to contain another config array when `extraConfigTypes` contains `\"array\"`, such as:\n\n```js\nexport default [\n    \n    // JS config\n    {\n        files: [\"**/*.js\"],\n        handler: jsHandler\n    },\n\n    // JSON configs\n    [\n\n        // match all JSON files\n        {\n            name: \"JSON Handler\",\n            files: [\"**/*.json\"],\n            handler: jsonHandler\n        },\n\n        // match only package.json\n        {\n            name: \"package.json Handler\",\n            files: [\"package.json\"],\n            handler: packageJsonHandler\n        }\n    ],\n\n    // filename must match function\n    {\n        files: [ filePath => filePath.endsWith(\".md\") ],\n        handler: markdownHandler\n    },\n\n    // filename must match all patterns in subarray\n    {\n        files: [ [\"*.test.*\", \"*.js\"] ],\n        handler: jsTestHandler\n    },\n\n    // filename must not match patterns beginning with !\n    {\n        name: \"Non-JS files\",\n        files: [\"!*.js\"],\n        settings: {\n            js: false\n        }\n    }\n];\n```\n\nIn this example, the array contains both config objects and a config array. When a config array is normalized (see details below), it is flattened so only config objects remain. However, the order of evaluation remains the same.\n\nIf the `files` array contains a function, then that function is called with the absolute path of the file and is expected to return `true` if there is a match and `false` if not. (The `ignores` array can also contain functions.)\n\nIf the `files` array contains an item that is an array of strings and functions, then all patterns must match in order for the config to match. In the preceding examples, both `*.test.*` and `*.js` must match in order for the config object to be used.\n\nIf a pattern in the files array begins with `!` then it excludes that pattern. In the preceding example, any filename that doesn't end with `.js` will automatically getting a `settings.js` property set to `false`.\n\nYou can also specify an `ignores` key that will force files matching those patterns to not be included. If the `ignores` key is in a config object without a `files` key, then those ignores will always be applied; if the `ignores` key is in a config object with a `files` key, then those ignores are only applied when `files` matches. Here's an example:\n\n```js\nexport default [\n    \n    // Always ignored\n    {\n        ignores: [\"**/.git/**\", \"**/node_modules/**\"]\n    },\n\n    // .eslintrc.js file is ignored only when .js file matches\n    {\n        files: [\"**/*.js\"],\n        ignores: [\".eslintrc.js\"]\n        handler: jsHandler\n    }\n];\n```\n\nYou can use negated patterns in `ignores` to exclude a file that was already ignored, such as:\n\n```js\nexport default [\n    \n    // Ignore all JSON files except tsconfig.json\n    {\n        ignores: [\"**/*.json\", \"!tsconfig.json\"]\n    },\n\n];\n```\n\n### Config Functions\n\nConfig arrays can also include config functions when `extraConfigTypes` contains `\"function\"`. A config function accepts a single parameter, `context` (defined by you), and must return either a config object or a config array (it cannot return another function). Config functions allow end users to execute code in the creation of appropriate config objects. Here's an example:\n\n```js\nexport default [\n    \n    // JS config\n    {\n        files: [\"**/*.js\"],\n        handler: jsHandler\n    },\n\n    // JSON configs\n    function (context) {\n        return [\n\n            // match all JSON files\n            {\n                name: context.name + \" JSON Handler\",\n                files: [\"**/*.json\"],\n                handler: jsonHandler\n            },\n\n            // match only package.json\n            {\n                name: context.name + \" package.json Handler\",\n                files: [\"package.json\"],\n                handler: packageJsonHandler\n            }\n        ];\n    }\n];\n```\n\nWhen a config array is normalized, each function is executed and replaced in the config array with the return value.\n\n**Note:** Config functions can also be async.\n\n### Normalizing Config Arrays\n\nOnce a config array has been created and loaded with all of the raw config data, it must be normalized before it can be used. The normalization process goes through and flattens the config array as well as executing all config functions to get their final values.\n\nTo normalize a config array, call the `normalize()` method and pass in a context object:\n\n```js\nawait configs.normalize({\n    name: \"MyApp\"\n});\n```\n\nThe `normalize()` method returns a promise, so be sure to use the `await` operator. The config array instance is normalized in-place, so you don't need to create a new variable.\n\nIf you want to disallow async config functions, you can call `normalizeSync()` instead. This method is completely synchronous and does not require using the `await` operator as it does not return a promise:\n\n```js\nawait configs.normalizeSync({\n    name: \"MyApp\"\n});\n```\n\n**Important:** Once a `ConfigArray` is normalized, it cannot be changed further. You can, however, create a new `ConfigArray` and pass in the normalized instance to create an unnormalized copy.\n\n### Getting Config for a File\n\nTo get the config for a file, use the `getConfig()` method on a normalized config array and pass in the filename to get a config for:\n\n```js\n// pass in absolute filename\nconst fileConfig = configs.getConfig(path.resolve(process.cwd(), \"package.json\"));\n```\n\nThe config array always returns an object, even if there are no configs matching the given filename. You can then inspect the returned config object to determine how to proceed.\n\nA few things to keep in mind:\n\n* You must pass in the absolute filename to get a config for.\n* The returned config object never has `files`, `ignores`, or `name` properties; the only properties on the object will be the other configuration options specified.\n* The config array caches configs, so subsequent calls to `getConfig()` with the same filename will return in a fast lookup rather than another calculation.\n\n## Acknowledgements\n\nThe design of this project was influenced by feedback on the ESLint RFC, and incorporates ideas from:\n\n* Teddy Katz (@not-an-aardvark)\n* Toru Nagashima (@mysticatea)\n* Kai Cataldo (@kaicataldo)\n\n## License\n\nApache 2.0\n/api.jsI'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nfunction _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }\n\nvar path = _interopDefault(require('path'));\nvar minimatch = _interopDefault(require('minimatch'));\nvar createDebug = _interopDefault(require('debug'));\nvar objectSchema = require('@humanwhocodes/object-schema');\n\n/**\n * @fileoverview ConfigSchema\n * @author Nicholas C. Zakas\n */\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\n/**\n * Assets that a given value is an array.\n * @param {*} value The value to check.\n * @returns {void}\n * @throws {TypeError} When the value is not an array. \n */\nfunction assertIsArray(value) {\n\tif (!Array.isArray(value)) {\n\t\tthrow new TypeError('Expected value to be an array.');\n\t}\n}\n\n/**\n * Assets that a given value is an array containing only strings and functions.\n * @param {*} value The value to check.\n * @returns {void}\n * @throws {TypeError} When the value is not an array of strings and functions.\n */\nfunction assertIsArrayOfStringsAndFunctions(value, name) {\n\tassertIsArray(value);\n\n\tif (value.some(item => typeof item !== 'string' && typeof item !== 'function')) {\n\t\tthrow new TypeError('Expected array to only contain strings.');\n\t}\n}\n\n//------------------------------------------------------------------------------\n// Exports\n//------------------------------------------------------------------------------\n\n/**\n * The base schema that every ConfigArray uses.\n * @type Object\n */\nconst baseSchema = Object.freeze({\n\tname: {\n\t\trequired: false,\n\t\tmerge() {\n\t\t\treturn undefined;\n\t\t},\n\t\tvalidate(value) {\n\t\t\tif (typeof value !== 'string') {\n\t\t\t\tthrow new TypeError('Property must be a string.');\n\t\t\t}\n\t\t}\n\t},\n\tfiles: {\n\t\trequired: false,\n\t\tmerge() {\n\t\t\treturn undefined;\n\t\t},\n\t\tvalidate(value) {\n\n\t\t\t// first check if it's an array\n\t\t\tassertIsArray(value);\n\n\t\t\t// then check each member\n\t\t\tvalue.forEach(item => {\n\t\t\t\tif (Array.isArray(item)) {\n\t\t\t\t\tassertIsArrayOfStringsAndFunctions(item);\n\t\t\t\t} else if (typeof item !== 'string' && typeof item !== 'function') {\n\t\t\t\t\tthrow new TypeError('Items must be a string, a function, or an array of strings and functions.');\n\t\t\t\t}\n\t\t\t});\n\n\t\t}\n\t},\n\tignores: {\n\t\trequired: false,\n\t\tmerge() {\n\t\t\treturn undefined;\n\t\t},\n\t\tvalidate: assertIsArrayOfStringsAndFunctions\n\t}\n});\n\n/**\n * @fileoverview ConfigArray\n * @author Nicholas C. Zakas\n */\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\nconst debug = createDebug('@hwc/config-array');\n\nconst MINIMATCH_OPTIONS = {\n\tmatchBase: true,\n\tdot: true\n};\n\nconst CONFIG_TYPES = new Set(['array', 'function']);\n\n/**\n * Shorthand for checking if a value is a string.\n * @param {any} value The value to check.\n * @returns {boolean} True if a string, false if not. \n */\nfunction isString(value) {\n\treturn typeof value === 'string';\n}\n\n/**\n * Normalizes a `ConfigArray` by flattening it and executing any functions\n * that are found inside.\n * @param {Array} items The items in a `ConfigArray`.\n * @param {Object} context The context object to pass into any function\n *      found.\n * @param {Array<string>} extraConfigTypes The config types to check.\n * @returns {Promise<Array>} A flattened array containing only config objects.\n * @throws {TypeError} When a config function returns a function.\n */\nasync function normalize(items, context, extraConfigTypes) {\n\n\tconst allowFunctions = extraConfigTypes.includes('function');\n\tconst allowArrays = extraConfigTypes.includes('array');\n\n\tasync function *flatTraverse(array) {\n\t\tfor (let item of array) {\n\t\t\tif (typeof item === 'function') {\n\t\t\t\tif (!allowFunctions) {\n\t\t\t\t\tthrow new TypeError('Unexpected function.');\n\t\t\t\t}\n\n\t\t\t\titem = item(context);\n\t\t\t\tif (item.then) {\n\t\t\t\t\titem = await item;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (Array.isArray(item)) {\n\t\t\t\tif (!allowArrays) {\n\t\t\t\t\tthrow new TypeError('Unexpected array.');\n\t\t\t\t}\n\t\t\t\tyield * flatTraverse(item);\n\t\t\t} else if (typeof item === 'function') {\n\t\t\t\tthrow new TypeError('A config function can only return an object or array.');\n\t\t\t} else {\n\t\t\t\tyield item;\n\t\t\t}\n\t\t}\n\t}\n\n\t/*\n\t * Async iterables cannot be used with the spread operator, so we need to manually\n\t * create the array to return.\n\t */\n\tconst asyncIterable = await flatTraverse(items);\n\tconst configs = [];\n\n\tfor await (const config of asyncIterable) {\n\t\tconfigs.push(config);\n\t}\n\n\treturn configs;\n}\n\n/**\n * Normalizes a `ConfigArray` by flattening it and executing any functions\n * that are found inside.\n * @param {Array} items The items in a `ConfigArray`.\n * @param {Object} context The context object to pass into any function\n *      found.\n * @param {Array<string>} extraConfigTypes The config types to check.\n * @returns {Array} A flattened array containing only config objects.\n * @throws {TypeError} When a config function returns a function.\n */\nfunction normalizeSync(items, context, extraConfigTypes) {\n\n\tconst allowFunctions = extraConfigTypes.includes('function');\n\tconst allowArrays = extraConfigTypes.includes('array');\n\n\tfunction *flatTraverse(array) {\n\t\tfor (let item of array) {\n\t\t\tif (typeof item === 'function') {\n\n\t\t\t\tif (!allowFunctions) {\n\t\t\t\t\tthrow new TypeError('Unexpected function.');\n\t\t\t\t}\n\n\t\t\t\titem = item(context);\n\t\t\t\tif (item.then) {\n\t\t\t\t\tthrow new TypeError('Async config functions are not supported.');\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (Array.isArray(item)) {\n\n\t\t\t\tif (!allowArrays) {\n\t\t\t\t\tthrow new TypeError('Unexpected array.');\n\t\t\t\t}\n\n\t\t\t\tyield * flatTraverse(item);\n\t\t\t} else if (typeof item === 'function') {\n\t\t\t\tthrow new TypeError('A config function can only return an object or array.');\n\t\t\t} else {\n\t\t\t\tyield item;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn [...flatTraverse(items)];\n}\n\n/**\n * Determines if a given file path should be ignored based on the given\n * matcher.\n * @param {Array<string|() => boolean>} ignores The ignore patterns to check. \n * @param {string} filePath The absolute path of the file to check.\n * @param {string} relativeFilePath The relative path of the file to check.\n * @returns {boolean} True if the path should be ignored and false if not.\n */\nfunction shouldIgnoreFilePath(ignores, filePath, relativeFilePath) {\n\n\tlet shouldIgnore = false;\n\n\tfor (const matcher of ignores) {\n\n\t\tif (typeof matcher === 'function') {\n\t\t\tshouldIgnore = shouldIgnore || matcher(filePath);\n\t\t\tcontinue;\n\t\t}\n\n\t\t/*\n\t\t * If there's a negated pattern, that means anything matching\n\t\t * must NOT be ignored. To do that, we need to use the `flipNegate`\n\t\t * option for minimatch to check if the filepath matches the\n\t\t * pattern specified after the !, and if that result is true,\n\t\t * then we return false immediately because this file should\n\t\t * never be ignored.\n\t\t */\n\t\tif (matcher.startsWith('!')) {\n\n\t\t\t/*\n\t\t\t * The file must already be ignored in order to apply a negated\n\t\t\t * pattern, because negated patterns simply remove files that\n\t\t\t * would already be ignored.\n\t\t\t */\n\t\t\tif (shouldIgnore &&\n\t\t\t\tminimatch(relativeFilePath, matcher, {\n\t\t\t\t\t...MINIMATCH_OPTIONS,\n\t\t\t\t\tflipNegate: true\n\t\t\t\t})) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} else {\n\t\t\tshouldIgnore = shouldIgnore || minimatch(relativeFilePath, matcher, MINIMATCH_OPTIONS);\n\t\t}\n\n\t}\n\n\treturn shouldIgnore;\n}\n\n/**\n * Determines if a given file path is matched by a config. If the config\n * has no `files` field, then it matches; otherwise, if a `files` field\n * is present then we match the globs in `files` and exclude any globs in\n * `ignores`.\n * @param {string} filePath The absolute file path to check.\n * @param {Object} config The config object to check.\n * @returns {boolean} True if the file path is matched by the config,\n *      false if not.\n */\nfunction pathMatches(filePath, basePath, config) {\n\n\t// a config without `files` field always match\n\tif (!config.files) {\n\t\treturn true;\n\t}\n\n\t/*\n\t * For both files and ignores, functions are passed the absolute\n\t * file path while strings are compared against the relative\n\t * file path.\n\t */\n\tconst relativeFilePath = path.relative(basePath, filePath);\n\n\t// if files isn't an array, throw an error\n\tif (!Array.isArray(config.files) || config.files.length === 0) {\n\t\tthrow new TypeError('The files key must be a non-empty array.');\n\t}\n\n\t// match both strings and functions\n\tconst match = pattern => {\n\n\t\tif (isString(pattern)) {\n\t\t\treturn minimatch(relativeFilePath, pattern, MINIMATCH_OPTIONS);\n\t\t}\n\n\t\tif (typeof pattern === 'function') {\n\t\t\treturn pattern(filePath);\n\t\t}\n\n\t\tthrow new TypeError(`Unexpected matcher type ${pattern}.`);\n\t};\n\n\t// check for all matches to config.files\n\tlet filePathMatchesPattern = config.files.some(pattern => {\n\t\tif (Array.isArray(pattern)) {\n\t\t\treturn pattern.every(match);\n\t\t}\n\n\t\treturn match(pattern);\n\t});\n\n\t/*\n\t * If the file path matches the config.files patterns, then check to see\n\t * if there are any files to ignore.\n\t */\n\tif (filePathMatchesPattern && config.ignores) {\n\t\tfilePathMatchesPattern = !shouldIgnoreFilePath(config.ignores, filePath, relativeFilePath);\n\t}\n\n\treturn filePathMatchesPattern;\n}\n\n/**\n * Ensures that a ConfigArray has been normalized.\n * @param {ConfigArray} configArray The ConfigArray to check. \n * @returns {void}\n * @throws {Error} When the `ConfigArray` is not normalized.\n */\nfunction assertNormalized(configArray) {\n\t// TODO: Throw more verbose error\n\tif (!configArray.isNormalized()) {\n\t\tthrow new Error('ConfigArray must be normalized to perform this operation.');\n\t}\n}\n\n/**\n * Ensures that config types are valid.\n * @param {Array<string>} extraConfigTypes The config types to check.\n * @returns {void}\n * @throws {Error} When the config types array is invalid.\n */\nfunction assertExtraConfigTypes(extraConfigTypes) {\n\tif (extraConfigTypes.length > 2) {\n\t\tthrow new TypeError('configTypes must be an array with at most two items.');\n\t}\n\n\tfor (const configType of extraConfigTypes) {\n\t\tif (!CONFIG_TYPES.has(configType)) {\n\t\t\tthrow new TypeError(`Unexpected config type \"${configType}\" found. Expected one of: \"object\", \"array\", \"function\".`);\n\t\t}\n\t}\n}\n\n//------------------------------------------------------------------------------\n// Public Interface\n//------------------------------------------------------------------------------\n\nconst ConfigArraySymbol = {\n\tisNormalized: Symbol('isNormalized'),\n\tconfigCache: Symbol('configCache'),\n\tschema: Symbol('schema'),\n\tfinalizeConfig: Symbol('finalizeConfig'),\n\tpreprocessConfig: Symbol('preprocessConfig')\n};\n\n// used to store calculate data for faster lookup\nconst dataCache = new WeakMap();\n\n/**\n * Represents an array of config objects and provides method for working with\n * those config objects.\n */\nclass ConfigArray extends Array {\n\n\t/**\n\t * Creates a new instance of ConfigArray.\n\t * @param {Iterable|Function|Object} configs An iterable yielding config\n\t *      objects, or a config function, or a config object.\n\t * @param {string} [options.basePath=\"\"] The path of the config file\n\t * @param {boolean} [options.normalized=false] Flag indicating if the\n\t *      configs have already been normalized.\n\t * @param {Object} [options.schema] The additional schema \n\t *      definitions to use for the ConfigArray schema.\n\t * @param {Array<string>} [options.configTypes] List of config types supported.\n\t */\n\tconstructor(configs,\n\t{\n\t\tbasePath = '',\n\t\tnormalized = false,\n\t\tschema: customSchema,\n\t\textraConfigTypes = []\n\t} = {}\n) {\n\t\tsuper();\n\n\t\t/**\n\t * Tracks if the array has been normalized.\n\t * @property isNormalized\n\t * @type boolean\n\t * @private\n\t */\n\t\tthis[ConfigArraySymbol.isNormalized] = normalized;\n\n\t\t/**\n\t * The schema used for validating and merging configs.\n\t * @property schema\n\t * @type ObjectSchema\n\t * @private\n\t */\n\t\tthis[ConfigArraySymbol.schema] = new objectSchema.ObjectSchema({\n\t\t\t...customSchema,\n\t\t\t...baseSchema\n\t\t});\n\n\t\t/**\n\t * The path of the config file that this array was loaded from.\n\t * This is used to calculate filename matches.\n\t * @property basePath\n\t * @type string\n\t */\n\t\tthis.basePath = basePath;\n\n\t\tassertExtraConfigTypes(extraConfigTypes);\n\n\t\t/**\n\t * The supported config types.\n\t * @property configTypes\n\t * @type Array<string>\n\t */\n\t\tthis.extraConfigTypes = Object.freeze([...extraConfigTypes]);\n\n\t\t/**\n\t * A cache to store calculated configs for faster repeat lookup.\n\t * @property configCache\n\t * @type Map\n\t * @private\n\t */\n\t\tthis[ConfigArraySymbol.configCache] = new Map();\n\n\t\t// init cache\n\t\tdataCache.set(this, {});\n\n\t\t// load the configs into this array\n\t\tif (Array.isArray(configs)) {\n\t\tthis.push(...configs);\n\t\t} else {\n\t\tthis.push(configs);\n\t\t}\n\n\t}\n\n/**\n\t * Prevent normal array methods from creating a new `ConfigArray` instance.\n\t * This is to ensure that methods such as `slice()` won't try to create a \n\t * new instance of `ConfigArray` behind the scenes as doing so may throw\n\t * an error due to the different constructor signature.\n\t * @returns {Function} The `Array` constructor.\n\t */\nstatic get [Symbol.species]() {\n\treturn Array;\n}\n\n/**\n\t * Returns the `files` globs from every config object in the array.\n\t * This can be used to determine which files will be matched by a\n\t * config array or to use as a glob pattern when no patterns are provided\n\t * for a command line interface.\n\t * @returns {Array<string|Function>} An array of matchers.\n\t */\nget files() {\n\n\tassertNormalized(this);\n\n\t// if this data has been cached, retrieve it\n\tconst cache = dataCache.get(this);\n\n\tif (cache.files) {\n\t\treturn cache.files;\n\t}\n\n\t// otherwise calculate it\n\n\tconst result = [];\n\n\tfor (const config of this) {\n\t\tif (config.files) {\n\t\t\tconfig.files.forEach(filePattern => {\n\t\t\t\tresult.push(filePattern);\n\t\t\t});\n\t\t}\n\t}\n\n\t// store result\n\tcache.files = result;\n\tdataCache.set(this, cache);\n\n\treturn result;\n}\n\n/**\n\t * Returns ignore matchers that should always be ignored regardless of\n\t * the matching `files` fields in any configs. This is necessary to mimic\n\t * the behavior of things like .gitignore and .eslintignore, allowing a\n\t * globbing operation to be faster.\n\t * @returns {string[]} An array of string patterns and functions to be ignored.\n\t */\nget ignores() {\n\n\tassertNormalized(this);\n\n\t// if this data has been cached, retrieve it\n\tconst cache = dataCache.get(this);\n\n\tif (cache.ignores) {\n\t\treturn cache.ignores;\n\t}\n\n\t// otherwise calculate it\n\n\tconst result = [];\n\n\tfor (const config of this) {\n\t\tif (config.ignores && !config.files) {\n\t\t\tresult.push(...config.ignores);\n\t\t}\n\t}\n\n\t// store result\n\tcache.ignores = result;\n\tdataCache.set(this, cache);\n\n\treturn result;\n}\n\n/**\n\t * Indicates if the config array has been normalized.\n\t * @returns {boolean} True if the config array is normalized, false if not.\n\t */\nisNormalized() {\n\treturn this[ConfigArraySymbol.isNormalized];\n}\n\n/**\n\t * Normalizes a config array by flattening embedded arrays and executing\n\t * config functions.\n\t * @param {ConfigContext} context The context object for config functions.\n\t * @returns {Promise<ConfigArray>} The current ConfigArray instance.\n\t */\nasync normalize(context = {}) {\n\n\tif (!this.isNormalized()) {\n\t\tconst normalizedConfigs = await normalize(this, context, this.extraConfigTypes);\n\t\tthis.length = 0;\n\t\tthis.push(...normalizedConfigs.map(this[ConfigArraySymbol.preprocessConfig].bind(this)));\n\t\tthis[ConfigArraySymbol.isNormalized] = true;\n\n\t\t// prevent further changes\n\t\tObject.freeze(this);\n\t}\n\n\treturn this;\n}\n\n/**\n\t * Normalizes a config array by flattening embedded arrays and executing\n\t * config functions.\n\t * @param {ConfigContext} context The context object for config functions.\n\t * @returns {ConfigArray} The current ConfigArray instance.\n\t */\nnormalizeSync(context = {}) {\n\n\tif (!this.isNormalized()) {\n\t\tconst normalizedConfigs = normalizeSync(this, context, this.extraConfigTypes);\n\t\tthis.length = 0;\n\t\tthis.push(...normalizedConfigs.map(this[ConfigArraySymbol.preprocessConfig]));\n\t\tthis[ConfigArraySymbol.isNormalized] = true;\n\n\t\t// prevent further changes\n\t\tObject.freeze(this);\n\t}\n\n\treturn this;\n}\n\n/**\n\t * Finalizes the state of a config before being cached and returned by\n\t * `getConfig()`. Does nothing by default but is provided to be\n\t * overridden by subclasses as necessary.\n\t * @param {Object} config The config to finalize.\n\t * @returns {Object} The finalized config.\n\t */\n[ConfigArraySymbol.finalizeConfig](config) {\n\treturn config;\n}\n\n/**\n\t * Preprocesses a config during the normalization process. This is the\n\t * method to override if you want to convert an array item before it is\n\t * validated for the first time. For example, if you want to replace a\n\t * string with an object, this is the method to override.\n\t * @param {Object} config The config to preprocess.\n\t * @returns {Object} The config to use in place of the argument.\n\t */\n[ConfigArraySymbol.preprocessConfig](config) {\n\treturn config;\n}\n\n/**\n\t * Returns the config object for a given file path.\n\t * @param {string} filePath The complete path of a file to get a config for.\n\t * @returns {Object} The config object for this file.\n\t */\ngetConfig(filePath) {\n\n\tassertNormalized(this);\n\n\t// first check the cache to avoid duplicate work\n\tlet finalConfig = this[ConfigArraySymbol.configCache].get(filePath);\n\n\tif (finalConfig) {\n\t\treturn finalConfig;\n\t}\n\n\t// TODO: Maybe move elsewhere?\n\tconst relativeFilePath = path.relative(this.basePath, filePath);\n\n\tif (shouldIgnoreFilePath(this.ignores, filePath, relativeFilePath)) {\n\n\t\t// cache and return result - finalConfig is undefined at this point\n\t\tthis[ConfigArraySymbol.configCache].set(filePath, finalConfig);\n\t\treturn finalConfig;\n\t}\n\n\t// filePath isn't automatically ignored, so try to construct config\n\n\tconst matchingConfigs = [];\n\n\tfor (const config of this) {\n\t\tif (pathMatches(filePath, this.basePath, config)) {\n\t\t\tdebug(`Matching config found for ${filePath}`);\n\t\t\tmatchingConfigs.push(config);\n\t\t} else {\n\t\t\tdebug(`No matching config found for ${filePath}`);\n\t\t}\n\t}\n\n\t// if matching both files and ignores, there will be no config to create\n\tif (matchingConfigs.length === 0) {\n\t\t// cache and return result - finalConfig is undefined at this point\n\t\tthis[ConfigArraySymbol.configCache].set(filePath, finalConfig);\n\t\treturn finalConfig;\n\t}\n\n\t// otherwise construct the config\n\n\tfinalConfig = matchingConfigs.reduce((result, config) => {\n\t\treturn this[ConfigArraySymbol.schema].merge(result, config);\n\t}, {}, this);\n\n\tfinalConfig = this[ConfigArraySymbol.finalizeConfig](finalConfig);\n\n\tthis[ConfigArraySymbol.configCache].set(filePath, finalConfig);\n\n\treturn finalConfig;\n}\n\n/**\n\t * Determines if the given filepath is ignored based on the configs.\n\t * @param {string} filePath The complete path of a file to check.\n\t * @returns {boolean} True if the path is ignored, false if not.\n\t */\nisIgnored(filePath) {\n\treturn this.getConfig(filePath) === undefined;\n}\n\n}\n\nexports.ConfigArray = ConfigArray;\nexports.ConfigArraySymbol = ConfigArraySymbol;\n/CHANGELOG.md\u000ba# Changelog\n\n### [0.9.5](https://www.github.com/humanwhocodes/config-array/compare/v0.9.4...v0.9.5) (2022-02-23)\n\n\n### Bug Fixes\n\n* Ensure dot directories are matched correctly ([6e8d180](https://www.github.com/humanwhocodes/config-array/commit/6e8d180f43cedf3c2072d8a1229470e9fafabf5b))\n* preprocessConfig should have correct 'this' value ([9641540](https://www.github.com/humanwhocodes/config-array/commit/96415402cf0012ccf8e4af6c7b934dfc1a058986))\n\n### [0.9.4](https://www.github.com/humanwhocodes/config-array/compare/v0.9.3...v0.9.4) (2022-01-27)\n\n\n### Bug Fixes\n\n* Negated patterns to work when files match ([398c811](https://www.github.com/humanwhocodes/config-array/commit/398c8119d359493dc7b82b40df4d92ea6528375f))\n\n### [0.9.3](https://www.github.com/humanwhocodes/config-array/compare/v0.9.2...v0.9.3) (2022-01-26)\n\n\n### Bug Fixes\n\n* Make negated ignore patterns work like gitignore ([4ee8e99](https://www.github.com/humanwhocodes/config-array/commit/4ee8e998436e2c4538b06476e0bead8a44fe5a1b))\n\n### [0.9.2](https://www.github.com/humanwhocodes/config-array/compare/v0.9.1...v0.9.2) (2021-11-02)\n\n\n### Bug Fixes\n\n* Object merging error by upgrading object-schema ([377d06d](https://www.github.com/humanwhocodes/config-array/commit/377d06d2a44d781b0bec70b3389c48b3d5a63f94))\n\n### [0.9.1](https://www.github.com/humanwhocodes/config-array/compare/v0.9.0...v0.9.1) (2021-10-05)\n\n\n### Bug Fixes\n\n* Properly build package for release ([168155f](https://www.github.com/humanwhocodes/config-array/commit/168155f3fed91ab35566c452efd28debf8ec2b85))\n\n## [0.9.0](https://www.github.com/humanwhocodes/config-array/compare/v0.8.0...v0.9.0) (2021-10-04)\n\n\n### Features\n\n* getConfig() now returns undefined when no configs match. ([a563b82](https://www.github.com/humanwhocodes/config-array/commit/a563b8255d4eb2bb7745314e3f00ef53792b343f))\n\n## [0.8.0](https://www.github.com/humanwhocodes/config-array/compare/v0.7.0...v0.8.0) (2021-10-01)\n\n\n### Features\n\n* Add isIgnored() method ([343e5a0](https://www.github.com/humanwhocodes/config-array/commit/343e5a0a9e32028bfc6c0bf1ec0c6badf74f47f9))\n\n\n### Bug Fixes\n\n* Ensure global ignores are honored ([343e5a0](https://www.github.com/humanwhocodes/config-array/commit/343e5a0a9e32028bfc6c0bf1ec0c6badf74f47f9))\n\n## [0.7.0](https://www.github.com/humanwhocodes/config-array/compare/v0.6.0...v0.7.0) (2021-09-24)\n\n\n### Features\n\n* Only object configs by default ([5645f24](https://www.github.com/humanwhocodes/config-array/commit/5645f241b2412a3263a02ef9e3a9bd19cc86035d))\n\n## [0.6.0](https://www.github.com/humanwhocodes/config-array/compare/v0.5.0...v0.6.0) (2021-04-20)\n\n\n### Features\n\n* Add the normalizeSync() method ([3e347f9](https://www.github.com/humanwhocodes/config-array/commit/3e347f9d77c5ca2b15995e75ff7bc4fb96b7d66e))\n* Allow async config functions ([a9def0f](https://www.github.com/humanwhocodes/config-array/commit/a9def0faf579c223349dfe08d2486756840538c3))\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QGh1bWFud2hvY29kZXMvb2JqZWN0LXNjaGVtYUAxLjIuMQ==",
    "content": "/package.json\u0002{\n  \"name\": \"@humanwhocodes/object-schema\",\n  \"version\": \"1.2.1\",\n  \"description\": \"An object schema merger/validator\",\n  \"main\": \"src/index.js\",\n  \"directories\": {\n    \"test\": \"tests\"\n  },\n  \"scripts\": {\n    \"test\": \"mocha tests/\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/humanwhocodes/object-schema.git\"\n  },\n  \"keywords\": [\n    \"object\",\n    \"validation\",\n    \"schema\",\n    \"merge\"\n  ],\n  \"author\": \"Nicholas C. Zakas\",\n  \"license\": \"BSD-3-Clause\",\n  \"bugs\": {\n    \"url\": \"https://github.com/humanwhocodes/object-schema/issues\"\n  },\n  \"homepage\": \"https://github.com/humanwhocodes/object-schema#readme\",\n  \"devDependencies\": {\n    \"chai\": \"^4.2.0\",\n    \"eslint\": \"^5.13.0\",\n    \"mocha\": \"^5.2.0\"\n  }\n}\n\"/.github/workflows/nodejs-test.yml\u0002,name: Node CI\n\non: [push, pull_request]\n\njobs:\n  build:\n\n    runs-on: ${{ matrix.os }}\n\n    strategy:\n      matrix:\n        os: [windows-latest, macOS-latest, ubuntu-latest]\n        node: [8.x, 10.x, 12.x, 14.x]\n\n    steps:\n    - uses: actions/checkout@v1\n    - name: Use Node.js ${{ matrix.node-version }}\n      uses: actions/setup-node@v1\n      with:\n        node-version: ${{ matrix.node-version }}\n    - name: npm install, build, and test\n      run: |\n        npm install\n        npm run build --if-present\n        npm test\n      env:\n        CI: true\n/tests/merge-strategy.js\u0007/**\n * @filedescription Merge Strategy Tests\n */\n/* global it, describe, beforeEach */\n\n\"use strict\";\n\n//-----------------------------------------------------------------------------\n// Requirements\n//-----------------------------------------------------------------------------\n\nconst assert = require(\"chai\").assert;\nconst { MergeStrategy } = require(\"../src/\");\n\n//-----------------------------------------------------------------------------\n// Class\n//-----------------------------------------------------------------------------\n\ndescribe(\"MergeStrategy\", () => {\n\n\n    describe(\"overwrite()\", () => {\n\n        it(\"should overwrite the first value with the second when the second is defined\", () => {\n            const result = MergeStrategy.overwrite(1, 2);\n            assert.strictEqual(result, 2);\n        });\n\n        it(\"should overwrite the first value with the second when the second is undefined\", () => {\n            const result = MergeStrategy.overwrite(1, undefined);\n            assert.strictEqual(result, undefined);\n        });\n\n    });\n\n    describe(\"replace()\", () => {\n\n        it(\"should overwrite the first value with the second when the second is defined\", () => {\n            const result = MergeStrategy.replace(1, 2);\n            assert.strictEqual(result, 2);\n        });\n\n        it(\"should return the first value when the second is undefined\", () => {\n            const result = MergeStrategy.replace(1, undefined);\n            assert.strictEqual(result, 1);\n        });\n\n    });\n\n    describe(\"assign()\", () => {\n\n        it(\"should merge properties from two objects when called\", () => {\n\n            const object1 = { foo: 1, bar: 3 };\n            const object2 = { foo: 2 };            \n            \n            const result = MergeStrategy.assign(object1, object2);\n            assert.deepStrictEqual(result, {\n                foo: 2,\n                bar: 3\n            });\n        });\n\n    });\n\n});\n/src/object-schema.js\u001f@/**\n * @filedescription Object Schema\n */\n\n\"use strict\";\n\n//-----------------------------------------------------------------------------\n// Requirements\n//-----------------------------------------------------------------------------\n\nconst { MergeStrategy } = require(\"./merge-strategy\");\nconst { ValidationStrategy } = require(\"./validation-strategy\");\n\n//-----------------------------------------------------------------------------\n// Private\n//-----------------------------------------------------------------------------\n\nconst strategies = Symbol(\"strategies\");\nconst requiredKeys = Symbol(\"requiredKeys\");\n\n/**\n * Validates a schema strategy.\n * @param {string} name The name of the key this strategy is for.\n * @param {Object} strategy The strategy for the object key.\n * @param {boolean} [strategy.required=true] Whether the key is required.\n * @param {string[]} [strategy.requires] Other keys that are required when\n *      this key is present.\n * @param {Function} strategy.merge A method to call when merging two objects\n *      with the same key.\n * @param {Function} strategy.validate A method to call when validating an\n *      object with the key.\n * @returns {void}\n * @throws {Error} When the strategy is missing a name.\n * @throws {Error} When the strategy is missing a merge() method.\n * @throws {Error} When the strategy is missing a validate() method.\n */\nfunction validateDefinition(name, strategy) {\n\n    let hasSchema = false;\n    if (strategy.schema) {\n        if (typeof strategy.schema === \"object\") {\n            hasSchema = true;\n        } else {\n            throw new TypeError(\"Schema must be an object.\");\n        }\n    }\n\n    if (typeof strategy.merge === \"string\") {\n        if (!(strategy.merge in MergeStrategy)) {\n            throw new TypeError(`Definition for key \"${name}\" missing valid merge strategy.`);\n        }\n    } else if (!hasSchema && typeof strategy.merge !== \"function\") {\n        throw new TypeError(`Definition for key \"${name}\" must have a merge property.`);\n    }\n\n    if (typeof strategy.validate === \"string\") {\n        if (!(strategy.validate in ValidationStrategy)) {\n            throw new TypeError(`Definition for key \"${name}\" missing valid validation strategy.`);\n        }\n    } else if (!hasSchema && typeof strategy.validate !== \"function\") {\n        throw new TypeError(`Definition for key \"${name}\" must have a validate() method.`);\n    }\n}\n\n\n//-----------------------------------------------------------------------------\n// Class\n//-----------------------------------------------------------------------------\n\n/**\n * Represents an object validation/merging schema.\n */\nclass ObjectSchema {\n\n    /**\n     * Creates a new instance.\n     */\n    constructor(definitions) {\n\n        if (!definitions) {\n            throw new Error(\"Schema definitions missing.\");\n        }\n\n        /**\n         * Track all strategies in the schema by key.\n         * @type {Map}\n         * @property strategies\n         */\n        this[strategies] = new Map();\n\n        /**\n         * Separately track any keys that are required for faster validation.\n         * @type {Map}\n         * @property requiredKeys\n         */\n        this[requiredKeys] = new Map();\n\n        // add in all strategies\n        for (const key of Object.keys(definitions)) {\n            validateDefinition(key, definitions[key]);\n\n            // normalize merge and validate methods if subschema is present\n            if (typeof definitions[key].schema === \"object\") {\n                const schema = new ObjectSchema(definitions[key].schema);\n                definitions[key] = {\n                    ...definitions[key],\n                    merge(first = {}, second = {}) {\n                        return schema.merge(first, second);\n                    },\n                    validate(value) {\n                        ValidationStrategy.object(value);\n                        schema.validate(value);\n                    }\n                };\n            }\n\n            // normalize the merge method in case there's a string\n            if (typeof definitions[key].merge === \"string\") {\n                definitions[key] = {\n                    ...definitions[key],\n                    merge: MergeStrategy[definitions[key].merge]\n                };\n            };\n\n            // normalize the validate method in case there's a string\n            if (typeof definitions[key].validate === \"string\") {\n                definitions[key] = {\n                    ...definitions[key],\n                    validate: ValidationStrategy[definitions[key].validate]\n                };\n            };\n\n            this[strategies].set(key, definitions[key]);\n\n            if (definitions[key].required) {\n                this[requiredKeys].set(key, definitions[key]);\n            }\n        }\n    }\n\n    /**\n     * Determines if a strategy has been registered for the given object key.\n     * @param {string} key The object key to find a strategy for.\n     * @returns {boolean} True if the key has a strategy registered, false if not. \n     */\n    hasKey(key) {\n        return this[strategies].has(key);\n    }\n\n    /**\n     * Merges objects together to create a new object comprised of the keys\n     * of the all objects. Keys are merged based on the each key's merge\n     * strategy.\n     * @param {...Object} objects The objects to merge.\n     * @returns {Object} A new object with a mix of all objects' keys.\n     * @throws {Error} If any object is invalid.\n     */\n    merge(...objects) {\n\n        // double check arguments\n        if (objects.length < 2) {\n            throw new Error(\"merge() requires at least two arguments.\");\n        }\n\n        if (objects.some(object => (object == null || typeof object !== \"object\"))) {\n            throw new Error(\"All arguments must be objects.\");\n        }\n\n        return objects.reduce((result, object) => {\n            \n            this.validate(object);\n            \n            for (const [key, strategy] of this[strategies]) {\n                try {\n                    if (key in result || key in object) {\n                        const value = strategy.merge.call(this, result[key], object[key]);\n                        if (value !== undefined) {\n                            result[key] = value;\n                        }\n                    }\n                } catch (ex) {\n                    ex.message = `Key \"${key}\": ` + ex.message;\n                    throw ex;\n                }\n            }\n            return result;\n        }, {});\n    }\n\n    /**\n     * Validates an object's keys based on the validate strategy for each key.\n     * @param {Object} object The object to validate.\n     * @returns {void}\n     * @throws {Error} When the object is invalid. \n     */\n    validate(object) {\n\n        // check existing keys first\n        for (const key of Object.keys(object)) {\n\n            // check to see if the key is defined\n            if (!this.hasKey(key)) {\n                throw new Error(`Unexpected key \"${key}\" found.`);\n            }\n\n            // validate existing keys\n            const strategy = this[strategies].get(key);\n\n            // first check to see if any other keys are required\n            if (Array.isArray(strategy.requires)) {\n                if (!strategy.requires.every(otherKey => otherKey in object)) {\n                    throw new Error(`Key \"${key}\" requires keys \"${strategy.requires.join(\"\\\", \\\"\")}\".`);\n                }\n            }\n\n            // now apply remaining validation strategy\n            try {\n                strategy.validate.call(strategy, object[key]);\n            } catch (ex) {\n                ex.message = `Key \"${key}\": ` + ex.message;\n                throw ex;\n            }\n        }\n\n        // ensure required keys aren't missing\n        for (const [key] of this[requiredKeys]) {\n            if (!(key in object)) {\n                throw new Error(`Missing required key \"${key}\".`);\n            }\n        }\n\n    }\n}\n\nexports.ObjectSchema = ObjectSchema;\n/README.md\u0014# JavaScript ObjectSchema Package\n\nby [Nicholas C. Zakas](https://humanwhocodes.com)\n\nIf you find this useful, please consider supporting my work with a [donation](https://humanwhocodes.com/donate).\n\n## Overview\n\nA JavaScript object merge/validation utility where you can define a different merge and validation strategy for each key. This is helpful when you need to validate complex data structures and then merge them in a way that is more complex than `Object.assign()`.\n\n## Installation\n\nYou can install using either npm:\n\n```\nnpm install @humanwhocodes/object-schema\n```\n\nOr Yarn:\n\n```\nyarn add @humanwhocodes/object-schema\n```\n\n## Usage\n\nUse CommonJS to get access to the `ObjectSchema` constructor:\n\n```js\nconst { ObjectSchema } = require(\"@humanwhocodes/object-schema\");\n\nconst schema = new ObjectSchema({\n\n    // define a definition for the \"downloads\" key\n    downloads: {\n        required: true,\n        merge(value1, value2) {\n            return value1 + value2;\n        },\n        validate(value) {\n            if (typeof value !== \"number\") {\n                throw new Error(\"Expected downloads to be a number.\");\n            }\n        }\n    },\n\n    // define a strategy for the \"versions\" key\n    version: {\n        required: true,\n        merge(value1, value2) {\n            return value1.concat(value2);\n        },\n        validate(value) {\n            if (!Array.isArray(value)) {\n                throw new Error(\"Expected versions to be an array.\");\n            }\n        }\n    }\n});\n\nconst record1 = {\n    downloads: 25,\n    versions: [\n        \"v1.0.0\",\n        \"v1.1.0\",\n        \"v1.2.0\"\n    ]\n};\n\nconst record2 = {\n    downloads: 125,\n    versions: [\n        \"v2.0.0\",\n        \"v2.1.0\",\n        \"v3.0.0\"\n    ]\n};\n\n// make sure the records are valid\nschema.validate(record1);\nschema.validate(record2);\n\n// merge together (schema.merge() accepts any number of objects)\nconst result = schema.merge(record1, record2);\n\n// result looks like this:\n\nconst result = {\n    downloads: 75,\n    versions: [\n        \"v1.0.0\",\n        \"v1.1.0\",\n        \"v1.2.0\",\n        \"v2.0.0\",\n        \"v2.1.0\",\n        \"v3.0.0\"\n    ]\n};\n```\n\n## Tips and Tricks\n\n### Named merge strategies\n\nInstead of specifying a `merge()` method, you can specify one of the following strings to use a default merge strategy:\n\n* `\"assign\"` - use `Object.assign()` to merge the two values into one object.\n* `\"overwrite\"` - the second value always replaces the first.\n* `\"replace\"` - the second value replaces the first if the second is not `undefined`.\n\nFor example:\n\n```js\nconst schema = new ObjectSchema({\n    name: {\n        merge: \"replace\",\n        validate() {}\n    }\n});\n```\n\n### Named validation strategies\n\nInstead of specifying a `validate()` method, you can specify one of the following strings to use a default validation strategy:\n\n* `\"array\"` - value must be an array.\n* `\"boolean\"` - value must be a boolean.\n* `\"number\"` - value must be a number.\n* `\"object\"` - value must be an object.\n* `\"object?\"` - value must be an object or null.\n* `\"string\"` - value must be a string.\n* `\"string!\"` - value must be a non-empty string.\n\nFor example:\n\n```js\nconst schema = new ObjectSchema({\n    name: {\n        merge: \"replace\",\n        validate: \"string\"\n    }\n});\n```\n\n### Subschemas\n\nIf you are defining a key that is, itself, an object, you can simplify the process by using a subschema. Instead of defining `merge()` and `validate()`, assign a `schema` key that contains a schema definition, like this:\n\n```js\nconst schema = new ObjectSchema({\n    name: {\n        schema: {\n            first: {\n                merge: \"replace\",\n                validate: \"string\"\n            },\n            last: {\n                merge: \"replace\",\n                validate: \"string\"\n            }\n        }\n    }\n});\n\nschema.validate({\n    name: {\n        first: \"n\",\n        last: \"z\"\n    }\n});\n```\n\n### Remove Keys During Merge\n\nIf the merge strategy for a key returns `undefined`, then the key will not appear in the final object. For example:\n\n```js\nconst schema = new ObjectSchema({\n    date: {\n        merge() {\n            return undefined;\n        },\n        validate(value) {\n            Date.parse(value);  // throws an error when invalid\n        }\n    }\n});\n\nconst object1 = { date: \"5/5/2005\" };\nconst object2 = { date: \"6/6/2006\" };\n\nconst result = schema.merge(object1, object2);\n\nconsole.log(\"date\" in result);  // false\n```\n\n### Requiring Another Key Be Present\n\nIf you'd like the presence of one key to require the presence of another key, you can use the `requires` property to specify an array of other properties that any key requires. For example:\n\n```js\nconst schema = new ObjectSchema();\n\nconst schema = new ObjectSchema({\n    date: {\n        merge() {\n            return undefined;\n        },\n        validate(value) {\n            Date.parse(value);  // throws an error when invalid\n        }\n    },\n    time: {\n        requires: [\"date\"],\n        merge(first, second) {\n            return second;\n        },\n        validate(value) {\n            // ...\n        }\n    }\n});\n\n// throws error: Key \"time\" requires keys \"date\"\nschema.validate({\n    time: \"13:45\"\n});\n```\n\nIn this example, even though `date` is an optional key, it is required to be present whenever `time` is present.\n\n## License\n\nBSD 3-Clause\n/LICENSE\u0005BSD 3-Clause License\n\nCopyright (c) 2019, Human Who Codes\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n* Redistributions of source code must retain the above copyright notice, this\n  list of conditions and the following disclaimer.\n\n* Redistributions in binary form must reproduce the above copyright notice,\n  this list of conditions and the following disclaimer in the documentation\n  and/or other materials provided with the distribution.\n\n* Neither the name of the copyright holder nor the names of its\n  contributors may be used to endorse or promote products derived from\n  this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\nSERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\nOR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n/tests/object-schema.jsH\u001a/**\n * @filedescription Object Schema Tests\n */\n/* global it, describe, beforeEach */\n\n\"use strict\";\n\n//-----------------------------------------------------------------------------\n// Requirements\n//-----------------------------------------------------------------------------\n\nconst assert = require(\"chai\").assert;\nconst { ObjectSchema } = require(\"../src/\");\n\n//-----------------------------------------------------------------------------\n// Class\n//-----------------------------------------------------------------------------\n\ndescribe(\"ObjectSchema\", () => {\n\n    let schema;\n\n    describe(\"new ObjectSchema()\", () => {\n\n        it(\"should add a new key when a strategy is passed\", () => {\n            schema = new ObjectSchema({\n                foo: {\n                    merge() {},\n                    validate() {}\n                }\n            });\n\n            assert.isTrue(schema.hasKey(\"foo\"));\n        });\n\n        it(\"should throw an error when a strategy is missing a merge() method\", () => {\n            assert.throws(() => {\n                schema = new ObjectSchema({\n                    foo: {\n                        validate() { }\n                    }\n                });\n            }, /Definition for key \"foo\" must have a merge property/);\n        });\n\n        it(\"should throw an error when a strategy is missing a merge() method\", () => {\n            assert.throws(() => {\n                schema = new ObjectSchema();\n            }, /Schema definitions missing/);\n        });\n\n        it(\"should throw an error when a strategy is missing a validate() method\", () => {\n            assert.throws(() => {\n                schema = new ObjectSchema({\n                    foo: {\n                        merge() { },\n                    }\n                });\n            }, /Definition for key \"foo\" must have a validate\\(\\) method/);\n        });\n\n        it(\"should throw an error when merge is an invalid string\", () => {\n            assert.throws(() => {\n                new ObjectSchema({\n                    foo: {\n                        merge: \"bar\",\n                        validate() { }\n                    }\n                });\n            }, /key \"foo\" missing valid merge strategy/);\n        });\n\n        it(\"should throw an error when validate is an invalid string\", () => {\n            assert.throws(() => {\n                new ObjectSchema({\n                    foo: {\n                        merge: \"assign\",\n                        validate: \"s\"\n                    }\n                });\n            }, /key \"foo\" missing valid validation strategy/);\n        });\n\n    });\n\n\n    describe(\"merge()\", () => {\n\n        it(\"should throw an error when an unexpected key is found\", () => {\n            let schema = new ObjectSchema({});\n\n            assert.throws(() => {\n                schema.merge({ foo: true }, { foo: true });\n            }, /Unexpected key \"foo\"/);\n        });\n\n        it(\"should throw an error when merge() throws an error\", () => {\n            let schema = new ObjectSchema({\n                foo: {\n                    merge() {\n                        throw new Error(\"Boom!\");\n                    },\n                    validate() {}\n                }\n            });\n\n            assert.throws(() => {\n                schema.merge({ foo: true }, { foo: true });\n            }, /Key \"foo\": Boom!/);\n        \n        });\n\n        it(\"should call the merge() strategy for one key when called\", () => {\n            \n            schema = new ObjectSchema({\n                foo: {\n                    merge() {\n                        return \"bar\";\n                    },\n                    validate() {}\n                }\n            });\n\n            const result = schema.merge({ foo: true }, { foo: false });\n            assert.propertyVal(result, \"foo\", \"bar\");\n        });\n\n        it(\"should not call the merge() strategy when both objects don't contain the key\", () => {\n            \n            let called = false;\n\n            schema = new ObjectSchema({\n                foo: {\n                    merge() {\n                        called = true;\n                    },\n                    validate() {}\n                }\n            });\n\n            schema.merge({}, {});\n            assert.isFalse(called, \"The merge() strategy should not have been called.\");\n        });\n\n        it(\"should omit returning the key when the merge() strategy returns undefined\", () => {\n            schema = new ObjectSchema({\n                foo: {\n                    merge() {\n                        return undefined;\n                    },\n                    validate() { }\n                }\n            });\n            \n            const result = schema.merge({ foo: true }, { foo: false });\n            assert.notProperty(result, \"foo\");\n        });\n\n        it(\"should call the merge() strategy for two keys when called\", () => {\n            schema = new ObjectSchema({\n                foo: {\n                    merge() {\n                        return \"bar\";\n                    },\n                    validate() { }\n                },\n                bar: {\n                    merge() {\n                        return \"baz\";\n                    },\n                    validate() {}\n                }\n            });\n            \n            const result = schema.merge({ foo: true, bar: 1 }, { foo: true, bar: 2 });\n            assert.propertyVal(result, \"foo\", \"bar\");\n            assert.propertyVal(result, \"bar\", \"baz\");\n        });\n\n        it(\"should call the merge() strategy for two keys when called on three objects\", () => {\n            schema = new ObjectSchema({\n                foo: {\n                    merge() {\n                        return \"bar\";\n                    },\n                    validate() { }\n                },\n                bar: {\n                    merge() {\n                        return \"baz\";\n                    },\n                    validate() { }\n                }\n            });\n            \n            const result = schema.merge(\n                { foo: true, bar: 1 },\n                { foo: true, bar: 3 },\n                { foo: false, bar: 2 }\n            );\n            assert.propertyVal(result, \"foo\", \"bar\");\n            assert.propertyVal(result, \"bar\", \"baz\");\n        });\n\n        it(\"should call the merge() strategy when defined as 'overwrite'\", () => {\n            schema = new ObjectSchema({\n                foo: {\n                    merge: \"overwrite\",\n                    validate() { }\n                }\n            });\n            \n            const result = schema.merge(\n                { foo: true },\n                { foo: false }\n            );\n            assert.propertyVal(result, \"foo\", false);\n        });\n\n        it(\"should call the merge() strategy when defined as 'assign'\", () => {\n            schema = new ObjectSchema({\n                foo: {\n                    merge: \"assign\",\n                    validate() { }\n                }\n            });\n            \n            const result = schema.merge(\n                { foo: { bar: true } },\n                { foo: { baz: false } }\n            );\n\n            assert.strictEqual(result.foo.bar, true);\n            assert.strictEqual(result.foo.baz, false);\n        });\n\n        it(\"should call the merge strategy when there's a subschema\", () => {\n\n            schema = new ObjectSchema({\n                name: {\n                    schema: {\n                        first: {\n                            merge: \"replace\",\n                            validate: \"string\"\n                        },\n                        last: {\n                            merge: \"replace\",\n                            validate: \"string\"\n                        }\n                    }\n                }\n            });\n\n            const result = schema.merge({\n                name: {\n                    first: \"n\",\n                    last: \"z\"\n                }\n            }, {\n                name: {\n                    first: \"g\"\n                }\n            });\n\n            assert.strictEqual(result.name.first, \"g\");\n            assert.strictEqual(result.name.last, \"z\");\n        });\n\n        it(\"should return separate objects when using subschema\", () => {\n\n            schema = new ObjectSchema({\n                age: {\n                    merge: \"replace\",\n                    validate: \"number\"\n                },\n                address: {\n                    schema: {\n                        street: {\n                            schema: {\n                                number: {\n                                    merge: \"replace\",\n                                    validate: \"number\"\n                                },\n                                streetName: {\n                                    merge: \"replace\",\n                                    validate: \"string\"\n                                }\n                            }\n                        },\n                        state: {\n                            merge: \"replace\",\n                            validate: \"string\"\n                        }\n                    }\n                }\n            });\n\n            const baseObject = {\n                address: {\n                    street: {\n                        number: 100,\n                        streetName: \"Foo St\"\n                    },\n                    state: \"HA\"\n                }\n            };\n\n            const result = schema.merge(baseObject, {\n                age: 29\n            });\n\n            assert.notStrictEqual(result.address.street, baseObject.address.street);\n            assert.deepStrictEqual(result.address, baseObject.address);\n        });\n\n        it(\"should not error when calling the merge strategy when there's a subschema and no matching key in second object\", () => {\n\n            schema = new ObjectSchema({\n                name: {\n                    schema: {\n                        first: {\n                            merge: \"replace\",\n                            validate: \"string\"\n                        },\n                        last: {\n                            merge: \"replace\",\n                            validate: \"string\"\n                        }\n                    }\n                }\n            });\n\n            const result = schema.merge({\n                name: {\n                    first: \"n\",\n                    last: \"z\"\n                }\n            }, {\n            });\n\n            assert.strictEqual(result.name.first, \"n\");\n            assert.strictEqual(result.name.last, \"z\");\n        });\n\n        it(\"should not error when calling the merge strategy when there's multiple subschemas and no matching key in second object\", () => {\n\n            schema = new ObjectSchema({\n                user: {\n                    schema: {\n                        name: {\n                            schema: {\n                                first: {\n                                    merge: \"replace\",\n                                    validate: \"string\"\n                                },\n                                last: {\n                                    merge: \"replace\",\n                                    validate: \"string\"\n                                }\n                            }\n                        }\n\n                    }\n                }\n            });\n\n            const result = schema.merge({\n                user: {\n                    name: {\n                        first: \"n\",\n                        last: \"z\"\n                    }\n                }\n            }, {\n            });\n\n            assert.strictEqual(result.user.name.first, \"n\");\n            assert.strictEqual(result.user.name.last, \"z\");\n        });\n\n\n    });\n\n    describe(\"validate()\", () => {\n\n        it(\"should throw an error when an unexpected key is found\", () => {\n            let schema = new ObjectSchema({});\n            assert.throws(() => {\n                schema.validate({ foo: true });\n            }, /Unexpected key \"foo\"/);\n        });\n\n        it(\"should not throw an error when an expected key is found\", () => {\n            schema = new ObjectSchema({\n                foo: {\n                    merge() {\n                        return \"bar\";\n                    },\n                    validate() {}\n                }\n            });\n            \n            schema.validate({ foo: true });\n        });\n\n        it(\"should pass the property value into validate() when key is found\", () => {\n            schema = new ObjectSchema({\n                foo: {\n                    merge() {\n                        return \"bar\";\n                    },\n                    validate(value) {\n                        assert.isTrue(value);\n                    }\n                }\n            });\n            \n            schema.validate({ foo: true });\n        });\n\n        it(\"should not throw an error when expected keys are found\", () => {\n            schema = new ObjectSchema({\n                foo: {\n                    merge() {\n                        return \"bar\";\n                    },\n                    validate() {}\n                },\n                bar: {\n                    merge() {\n                        return \"baz\";\n                    },\n                    validate() {}\n                }\n            });\n            \n            schema.validate({ foo: true, bar: true });\n        });\n\n        it(\"should not throw an error when expected keys are found with required keys\", () => {\n            schema = new ObjectSchema({\n                foo: {\n                    merge() {\n                        return \"bar\";\n                    },\n                    validate() { }\n                },\n                bar: {\n                    requires: [\"foo\"],\n                    merge() {\n                        return \"baz\";\n                    },\n                    validate() { }\n                }\n            });\n            \n            schema.validate({ foo: true, bar: true });\n        });\n\n        it(\"should throw an error when expected keys are found without required keys\", () => {\n            schema = new ObjectSchema({\n                foo: {\n                    merge() {\n                        return \"bar\";\n                    },\n                    validate() { }\n                },\n                baz: {\n                    merge() {\n                        return \"baz\";\n                    },\n                    validate() { }\n                },\n                bar: {\n                    name: \"bar\",\n                    requires: [\"foo\", \"baz\"],\n                    merge() { },\n                    validate() { }\n                }\n            });\n\n            assert.throws(() => {\n                schema.validate({ bar: true });\n            }, /Key \"bar\" requires keys \"foo\", \"baz\"./);\n        });\n\n\n        it(\"should throw an error when an expected key is found but is invalid\", () => {\n\n            schema = new ObjectSchema({\n                foo: {\n                    merge() {\n                        return \"bar\";\n                    },\n                    validate() {\n                        throw new Error(\"Invalid key.\");\n                    }\n                }\n            });\n\n            assert.throws(() => {\n                schema.validate({ foo: true });\n            }, /Key \"foo\": Invalid key/);\n        });\n\n        it(\"should throw an error when an expected key is found but is invalid with a string validator\", () => {\n\n            schema = new ObjectSchema({\n                foo: {\n                    merge() {\n                        return \"bar\";\n                    },\n                    validate: \"string\"\n                }\n            });\n\n            assert.throws(() => {\n                schema.validate({ foo: true });\n            }, /Key \"foo\": Expected a string/);\n        });\n\n        it(\"should throw an error when an expected key is found but is invalid with a number validator\", () => {\n\n            schema = new ObjectSchema({\n                foo: {\n                    merge() {\n                        return \"bar\";\n                    },\n                    validate: \"number\"\n                }\n            });\n\n            assert.throws(() => {\n                schema.validate({ foo: true });\n            }, /Key \"foo\": Expected a number/);\n        });\n\n        it(\"should throw an error when a required key is missing\", () => {\n\n            schema = new ObjectSchema({\n                foo: {\n                    required: true,\n                    merge() {\n                        return \"bar\";\n                    },\n                    validate() {}\n                }\n            });\n\n            assert.throws(() => {\n                schema.validate({});\n            }, /Missing required key \"foo\"/);\n        });\n\n        it(\"should throw an error when a subschema is provided and the value doesn't validate\", () => {\n\n            schema = new ObjectSchema({\n                name: {\n                    schema: {\n                        first: {\n                            merge: \"replace\",\n                            validate: \"string\"\n                        },\n                        last: {\n                            merge: \"replace\",\n                            validate: \"string\"\n                        }\n                    }\n                }\n            });\n\n            assert.throws(() => {\n                schema.validate({\n                    name: {\n                        first: 123,\n                        last: \"z\"\n                    }\n                });\n                        \n            }, /Key \"name\": Key \"first\": Expected a string/);\n        });\n\n        it(\"should not throw an error when a subschema is provided and the value validates\", () => {\n\n            schema = new ObjectSchema({\n                name: {\n                    schema: {\n                        first: {\n                            merge: \"replace\",\n                            validate: \"string\"\n                        },\n                        last: {\n                            merge: \"replace\",\n                            validate: \"string\"\n                        }\n                    }\n                }\n            });\n\n            schema.validate({\n                name: {\n                    first: \"n\",\n                    last: \"z\"\n                }\n            });\n                    \n        });\n\n    });\n\n});\n%/.github/workflows/release-please.yml\u0006.on:\n  push:\n    branches:\n      - main\nname: release-please\njobs:\n  release-please:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: GoogleCloudPlatform/release-please-action@v2\n        id: release\n        with:\n          release-type: node\n          package-name: test-release-please\n      # The logic below handles the npm publication:\n      - uses: actions/checkout@v2\n        # these if statements ensure that a publication only occurs when\n        # a new release is created:\n        if: ${{ steps.release.outputs.release_created }}\n      - uses: actions/setup-node@v1\n        with:\n          node-version: 12\n          registry-url: 'https://registry.npmjs.org'\n        if: ${{ steps.release.outputs.release_created }}\n      - run: npm ci\n        if: ${{ steps.release.outputs.release_created }}\n      - run: npm publish\n        env:\n          NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}}\n        if: ${{ steps.release.outputs.release_created }}\n\n      # Tweets out release announcement\n      - run: 'npx @humanwhocodes/tweet \"Object Schema v${{ steps.release.outputs.major }}.${{ steps.release.outputs.minor }}.${{ steps.release.outputs.patch }} has been released!\\n\\n${{ github.event.release.html_url }}\"'\n        if: ${{ steps.release.outputs.release_created }}\n        env:\n          TWITTER_CONSUMER_KEY: ${{ secrets.TWITTER_CONSUMER_KEY }}\n          TWITTER_CONSUMER_SECRET: ${{ secrets.TWITTER_CONSUMER_SECRET }}\n          TWITTER_ACCESS_TOKEN_KEY: ${{ secrets.TWITTER_ACCESS_TOKEN_KEY }}\n          TWITTER_ACCESS_TOKEN_SECRET: ${{ secrets.TWITTER_ACCESS_TOKEN_SECRET }}\n/.eslintrc.js\u0002\u0002module.exports = {\n    \"env\": {\n        \"commonjs\": true,\n        \"es6\": true,\n        \"node\": true\n    },\n    \"extends\": \"eslint:recommended\",\n    \"parserOptions\": {\n        \"ecmaVersion\": 2018\n    },\n    \"rules\": {\n        \"indent\": [\n            \"error\",\n            4\n        ],\n        \"linebreak-style\": [\n            \"error\",\n            \"unix\"\n        ],\n        \"quotes\": [\n            \"error\",\n            \"double\"\n        ],\n        \"semi\": [\n            \"error\",\n            \"always\"\n        ]\n    }\n};/src/index.js\u0001\b/**\n * @filedescription Object Schema Package\n */\n\nexports.ObjectSchema = require(\"./object-schema\").ObjectSchema;\nexports.MergeStrategy = require(\"./merge-strategy\").MergeStrategy;\nexports.ValidationStrategy = require(\"./validation-strategy\").ValidationStrategy;\n/src/validation-strategy.js\n/**\n * @filedescription Validation Strategy\n */\n\n\"use strict\";\n\n//-----------------------------------------------------------------------------\n// Class\n//-----------------------------------------------------------------------------\n\n/**\n * Container class for several different validation strategies.\n */\nclass ValidationStrategy {\n\n    /**\n     * Validates that a value is an array.\n     * @param {*} value The value to validate.\n     * @returns {void}\n     * @throws {TypeError} If the value is invalid. \n     */\n    static array(value) {\n        if (!Array.isArray(value)) {\n            throw new TypeError(\"Expected an array.\");\n        }\n    }\n\n    /**\n     * Validates that a value is a boolean.\n     * @param {*} value The value to validate.\n     * @returns {void}\n     * @throws {TypeError} If the value is invalid. \n     */\n    static boolean(value) {\n        if (typeof value !== \"boolean\") {\n            throw new TypeError(\"Expected a Boolean.\");\n        }\n    }\n\n    /**\n     * Validates that a value is a number.\n     * @param {*} value The value to validate.\n     * @returns {void}\n     * @throws {TypeError} If the value is invalid. \n     */\n    static number(value) {\n        if (typeof value !== \"number\") {\n            throw new TypeError(\"Expected a number.\");\n        }\n    }\n\n    /**\n     * Validates that a value is a object.\n     * @param {*} value The value to validate.\n     * @returns {void}\n     * @throws {TypeError} If the value is invalid. \n     */\n    static object(value) {\n        if (!value || typeof value !== \"object\") {\n            throw new TypeError(\"Expected an object.\");\n        }\n    }\n\n    /**\n     * Validates that a value is a object or null.\n     * @param {*} value The value to validate.\n     * @returns {void}\n     * @throws {TypeError} If the value is invalid. \n     */\n    static \"object?\"(value) {\n        if (typeof value !== \"object\") {\n            throw new TypeError(\"Expected an object or null.\");\n        }\n    }\n\n    /**\n     * Validates that a value is a string.\n     * @param {*} value The value to validate.\n     * @returns {void}\n     * @throws {TypeError} If the value is invalid. \n     */\n    static string(value) {\n        if (typeof value !== \"string\") {\n            throw new TypeError(\"Expected a string.\");\n        }\n    }\n\n    /**\n     * Validates that a value is a non-empty string.\n     * @param {*} value The value to validate.\n     * @returns {void}\n     * @throws {TypeError} If the value is invalid. \n     */\n    static \"string!\"(value) {\n        if (typeof value !== \"string\" || value.length === 0) {\n            throw new TypeError(\"Expected a non-empty string.\");\n        }\n    }\n\n}\n\nexports.ValidationStrategy = ValidationStrategy;\n/CHANGELOG.md\u0001)# Changelog\n\n### [1.2.1](https://www.github.com/humanwhocodes/object-schema/compare/v1.2.0...v1.2.1) (2021-11-02)\n\n\n### Bug Fixes\n\n* Never return original object from individual config ([5463c5c](https://www.github.com/humanwhocodes/object-schema/commit/5463c5c6d2cb35a7b7948dffc37c899a41d1775f))\n/src/merge-strategy.js\u0005/**\n * @filedescription Merge Strategy\n */\n\n\"use strict\";\n\n//-----------------------------------------------------------------------------\n// Class\n//-----------------------------------------------------------------------------\n\n/**\n * Container class for several different merge strategies.\n */\nclass MergeStrategy {\n\n    /**\n     * Merges two keys by overwriting the first with the second.\n     * @param {*} value1 The value from the first object key. \n     * @param {*} value2 The value from the second object key.\n     * @returns {*} The second value.\n     */\n    static overwrite(value1, value2) {\n        return value2;\n    }\n\n    /**\n     * Merges two keys by replacing the first with the second only if the\n     * second is defined.\n     * @param {*} value1 The value from the first object key. \n     * @param {*} value2 The value from the second object key.\n     * @returns {*} The second value if it is defined.\n     */\n    static replace(value1, value2) {\n        if (typeof value2 !== \"undefined\") {\n            return value2;\n        }\n\n        return value1;\n    }\n\n    /**\n     * Merges two properties by assigning properties from the second to the first.\n     * @param {*} value1 The value from the first object key.\n     * @param {*} value2 The value from the second object key.\n     * @returns {*} A new object containing properties from both value1 and\n     *      value2.\n     */\n    static assign(value1, value2) {\n        return Object.assign({}, value1, value2);\n    }\n}\n\nexports.MergeStrategy = MergeStrategy;\n/tests/validation-strategy.js\u0017S/**\n * @filedescription Merge Strategy Tests\n */\n/* global it, describe, beforeEach */\n\n\"use strict\";\n\n//-----------------------------------------------------------------------------\n// Requirements\n//-----------------------------------------------------------------------------\n\nconst assert = require(\"chai\").assert;\nconst { ValidationStrategy } = require(\"../src/\");\n\n//-----------------------------------------------------------------------------\n// Class\n//-----------------------------------------------------------------------------\n\ndescribe(\"ValidationStrategy\", () => {\n\n    describe(\"boolean\", () => {\n        it(\"should not throw an error when the value is a boolean\", () => {\n            ValidationStrategy.boolean(true);\n        });\n\n        it(\"should throw an error when the value is null\", () => {\n            assert.throws(() => {\n                ValidationStrategy.boolean(null);\n            }, /Expected a Boolean/);\n        });\n\n        it(\"should throw an error when the value is a string\", () => {\n            assert.throws(() => {\n                ValidationStrategy.boolean(\"foo\");\n            }, /Expected a Boolean/);\n        });\n\n        it(\"should throw an error when the value is a number\", () => {\n            assert.throws(() => {\n                ValidationStrategy.boolean(123);\n            }, /Expected a Boolean/);\n        });\n\n        it(\"should throw an error when the value is an object\", () => {\n            assert.throws(() => {\n                ValidationStrategy.boolean({});\n            }, /Expected a Boolean/);\n        });\n    });\n\n    describe(\"number\", () => {\n        it(\"should not throw an error when the value is a number\", () => {\n            ValidationStrategy.number(25);\n        });\n\n        it(\"should throw an error when the value is null\", () => {\n            assert.throws(() => {\n                ValidationStrategy.number(null);\n            }, /Expected a number/);\n        });\n\n        it(\"should throw an error when the value is a string\", () => {\n            assert.throws(() => {\n                ValidationStrategy.number(\"foo\");\n            }, /Expected a number/);\n        });\n\n        it(\"should throw an error when the value is a boolean\", () => {\n            assert.throws(() => {\n                ValidationStrategy.number(true);\n            }, /Expected a number/);\n        });\n\n        it(\"should throw an error when the value is an object\", () => {\n            assert.throws(() => {\n                ValidationStrategy.number({});\n            }, /Expected a number/);\n        });\n    });\n\n    describe(\"object\", () => {\n        it(\"should not throw an error when the value is an object\", () => {\n            ValidationStrategy.object({});\n        });\n\n        it(\"should throw an error when the value is null\", () => {\n            assert.throws(() => {\n                ValidationStrategy.object(null);\n            }, /Expected an object/);\n        });\n\n        it(\"should throw an error when the value is a string\", () => {\n            assert.throws(() => {\n                ValidationStrategy.object(\"\");\n            }, /Expected an object/);\n        });\n    });\n\n    describe(\"array\", () => {\n        it(\"should not throw an error when the value is an array\", () => {\n            ValidationStrategy.array([]);\n        });\n\n        it(\"should throw an error when the value is null\", () => {\n            assert.throws(() => {\n                ValidationStrategy.array(null);\n            }, /Expected an array/);\n        });\n\n        it(\"should throw an error when the value is a string\", () => {\n            assert.throws(() => {\n                ValidationStrategy.array(\"\");\n            }, /Expected an array/);\n        });\n\n        it(\"should throw an error when the value is an object\", () => {\n            assert.throws(() => {\n                ValidationStrategy.array({});\n            }, /Expected an array/);\n        });\n    });\n\n    describe(\"object?\", () => {\n        it(\"should not throw an error when the value is an object\", () => {\n            ValidationStrategy[\"object?\"]({});\n        });\n\n        it(\"should not throw an error when the value is null\", () => {\n            ValidationStrategy[\"object?\"](null);\n        });\n\n        it(\"should throw an error when the value is a string\", () => {\n            assert.throws(() => {\n                ValidationStrategy[\"object?\"](\"\");\n            }, /Expected an object/);\n        });\n    });\n\n    describe(\"string\", () => {\n        it(\"should not throw an error when the value is a string\", () => {\n            ValidationStrategy.string(\"foo\");\n        });\n\n        it(\"should not throw an error when the value is an empty string\", () => {\n            ValidationStrategy.string(\"\");\n        });\n\n        it(\"should throw an error when the value is null\", () => {\n            assert.throws(() => {\n                ValidationStrategy.string(null);\n            }, /Expected a string/);\n        });\n\n        it(\"should throw an error when the value is an object\", () => {\n            assert.throws(() => {\n                ValidationStrategy.string({});\n            }, /Expected a string/);\n        });\n    });\n\n    describe(\"string!\", () => {\n        it(\"should not throw an error when the value is an string\", () => {\n            ValidationStrategy[\"string!\"](\"foo\");\n        });\n\n        it(\"should throw an error when the value is an empty string\", () => {\n            assert.throws(() => {\n                ValidationStrategy[\"string!\"](\"\");\n            }, /Expected a non-empty string/);\n        });\n\n        it(\"should throw an error when the value is null\", () => {\n            assert.throws(() => {\n                ValidationStrategy[\"string!\"](null);\n            }, /Expected a non-empty string/);\n        });\n\n        it(\"should throw an error when the value is an object\", () => {\n            assert.throws(() => {\n                ValidationStrategy[\"string!\"]({});\n            }, /Expected a non-empty string/);\n        });\n    });\n\n\n});\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QGpvc2VwaGcvcmVzb2x2YWJsZUAxLjAuMQ==",
    "content": "/index.js\u0001\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst resolvablePromise = () => {\n    let resolve;\n    let reject;\n    const promise = new Promise((_resolve, _reject) => {\n        resolve = _resolve;\n        reject = _reject;\n    });\n    promise.resolve = resolve;\n    promise.reject = reject;\n    return promise;\n};\nexports.default = resolvablePromise;\nmodule.exports = resolvablePromise;\n//# sourceMappingURL=index.js.map/package.json\u0001{\n  \"name\": \"@josephg/resolvable\",\n  \"version\": \"1.0.1\",\n  \"description\": \"Promise with .resolve() and .reject() methods\",\n  \"main\": \"index.js\",\n  \"types\": \"index.d.ts\",\n  \"scripts\": {\n    \"prepare\": \"npm run build\",\n    \"build\": \"tsc\"\n  },\n  \"files\": [\n    \"index.*\"\n  ],\n  \"repository\": \"git@github.com:josephg/resolvable.git\",\n  \"author\": \"Joseph Gentle <me@josephg.com>\",\n  \"license\": \"ISC\",\n  \"devDependencies\": {\n    \"@types/node\": \"^15.0.1\",\n    \"typescript\": \"^4.2.4\"\n  }\n}\n/index.d.tsexport declare type Resolvable<T> = Promise<T> & {\n    resolve: (t: T) => void;\n    reject: (e: any) => void;\n};\ndeclare const resolvablePromise: <T = void>() => Resolvable<T>;\nexport default resolvablePromise;\n/README.md\u0001l# Resolvable promise wrapper\n\nThis is a tiny promise wrapper which gives you promises which have explicit `promise.resolve()` / `promise.reject()` methods.\n\nEg:\n\n```javascript\nconst resolvable = require('resolvable')\n\nconst myPromise = resolvable()\n\n;(async () => {\n  doThingA()\n  await myPromise\n  doThingB()\n})()\n\nsetTimeout(() => myPromise.resolve(), 1000)\n```\n/LICENSE\u0002Copyright 2019 Joseph Gentle\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted, provided that the above\ncopyright notice and this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n/index.js.map\u0001{\"version\":3,\"file\":\"index.js\",\"sourceRoot\":\"\",\"sources\":[\"index.ts\"],\"names\":[],\"mappings\":\";;AAIA,MAAM,iBAAiB,GAAG,GAA4B,EAAE;IACtD,IAAI,OAAyB,CAAA;IAC7B,IAAI,MAA0B,CAAA;IAC9B,MAAM,OAAO,GAAG,IAAI,OAAO,CAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE;QACnD,OAAO,GAAG,QAAQ,CAAA;QAClB,MAAM,GAAG,OAAO,CAAA;IAClB,CAAC,CAAkB,CAAA;IACnB,OAAO,CAAC,OAAO,GAAG,OAAQ,CAAA;IAC1B,OAAO,CAAC,MAAM,GAAG,MAAO,CAAA;IACxB,OAAO,OAAO,CAAA;AAChB,CAAC,CAAA;AACD,kBAAe,iBAAiB,CAAA;AAChC,MAAM,CAAC,OAAO,GAAG,iBAAiB,CAAA\"}/index.ts\u0001export type Resolvable<T> = Promise<T> & {\n  resolve: (t: T) => void,\n  reject: (e: any) => void,\n}\nconst resolvablePromise = <T = void>(): Resolvable<T> => {\n  let resolve: (val: T) => void\n  let reject: (err: any) => void\n  const promise = new Promise<T>((_resolve, _reject) => {\n    resolve = _resolve\n    reject = _reject\n  }) as Resolvable<T>\n  promise.resolve = resolve!\n  promise.reject = reject!\n  return promise\n}\nexport default resolvablePromise\nmodule.exports = resolvablePromise\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QGpyaWRnZXdlbGwvZ2VuLW1hcHBpbmdAMC4zLjI=",
    "content": "/LICENSE\u00048Copyright 2022 Justin Ridgewell <jridgewell@google.com>\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n/dist/gen-mapping.umd.js*H(function (global, factory) {\n    typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@jridgewell/set-array'), require('@jridgewell/sourcemap-codec'), require('@jridgewell/trace-mapping')) :\n    typeof define === 'function' && define.amd ? define(['exports', '@jridgewell/set-array', '@jridgewell/sourcemap-codec', '@jridgewell/trace-mapping'], factory) :\n    (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.genMapping = {}, global.setArray, global.sourcemapCodec, global.traceMapping));\n})(this, (function (exports, setArray, sourcemapCodec, traceMapping) { 'use strict';\n\n    const COLUMN = 0;\n    const SOURCES_INDEX = 1;\n    const SOURCE_LINE = 2;\n    const SOURCE_COLUMN = 3;\n    const NAMES_INDEX = 4;\n\n    const NO_NAME = -1;\n    /**\n     * A low-level API to associate a generated position with an original source position. Line and\n     * column here are 0-based, unlike `addMapping`.\n     */\n    exports.addSegment = void 0;\n    /**\n     * A high-level API to associate a generated position with an original source position. Line is\n     * 1-based, but column is 0-based, due to legacy behavior in `source-map` library.\n     */\n    exports.addMapping = void 0;\n    /**\n     * Same as `addSegment`, but will only add the segment if it generates useful information in the\n     * resulting map. This only works correctly if segments are added **in order**, meaning you should\n     * not add a segment with a lower generated line/column than one that came before.\n     */\n    exports.maybeAddSegment = void 0;\n    /**\n     * Same as `addMapping`, but will only add the mapping if it generates useful information in the\n     * resulting map. This only works correctly if mappings are added **in order**, meaning you should\n     * not add a mapping with a lower generated line/column than one that came before.\n     */\n    exports.maybeAddMapping = void 0;\n    /**\n     * Adds/removes the content of the source file to the source map.\n     */\n    exports.setSourceContent = void 0;\n    /**\n     * Returns a sourcemap object (with decoded mappings) suitable for passing to a library that expects\n     * a sourcemap, or to JSON.stringify.\n     */\n    exports.toDecodedMap = void 0;\n    /**\n     * Returns a sourcemap object (with encoded mappings) suitable for passing to a library that expects\n     * a sourcemap, or to JSON.stringify.\n     */\n    exports.toEncodedMap = void 0;\n    /**\n     * Constructs a new GenMapping, using the already present mappings of the input.\n     */\n    exports.fromMap = void 0;\n    /**\n     * Returns an array of high-level mapping objects for every recorded segment, which could then be\n     * passed to the `source-map` library.\n     */\n    exports.allMappings = void 0;\n    // This split declaration is only so that terser can elminiate the static initialization block.\n    let addSegmentInternal;\n    /**\n     * Provides the state to generate a sourcemap.\n     */\n    class GenMapping {\n        constructor({ file, sourceRoot } = {}) {\n            this._names = new setArray.SetArray();\n            this._sources = new setArray.SetArray();\n            this._sourcesContent = [];\n            this._mappings = [];\n            this.file = file;\n            this.sourceRoot = sourceRoot;\n        }\n    }\n    (() => {\n        exports.addSegment = (map, genLine, genColumn, source, sourceLine, sourceColumn, name, content) => {\n            return addSegmentInternal(false, map, genLine, genColumn, source, sourceLine, sourceColumn, name, content);\n        };\n        exports.maybeAddSegment = (map, genLine, genColumn, source, sourceLine, sourceColumn, name, content) => {\n            return addSegmentInternal(true, map, genLine, genColumn, source, sourceLine, sourceColumn, name, content);\n        };\n        exports.addMapping = (map, mapping) => {\n            return addMappingInternal(false, map, mapping);\n        };\n        exports.maybeAddMapping = (map, mapping) => {\n            return addMappingInternal(true, map, mapping);\n        };\n        exports.setSourceContent = (map, source, content) => {\n            const { _sources: sources, _sourcesContent: sourcesContent } = map;\n            sourcesContent[setArray.put(sources, source)] = content;\n        };\n        exports.toDecodedMap = (map) => {\n            const { file, sourceRoot, _mappings: mappings, _sources: sources, _sourcesContent: sourcesContent, _names: names, } = map;\n            removeEmptyFinalLines(mappings);\n            return {\n                version: 3,\n                file: file || undefined,\n                names: names.array,\n                sourceRoot: sourceRoot || undefined,\n                sources: sources.array,\n                sourcesContent,\n                mappings,\n            };\n        };\n        exports.toEncodedMap = (map) => {\n            const decoded = exports.toDecodedMap(map);\n            return Object.assign(Object.assign({}, decoded), { mappings: sourcemapCodec.encode(decoded.mappings) });\n        };\n        exports.allMappings = (map) => {\n            const out = [];\n            const { _mappings: mappings, _sources: sources, _names: names } = map;\n            for (let i = 0; i < mappings.length; i++) {\n                const line = mappings[i];\n                for (let j = 0; j < line.length; j++) {\n                    const seg = line[j];\n                    const generated = { line: i + 1, column: seg[COLUMN] };\n                    let source = undefined;\n                    let original = undefined;\n                    let name = undefined;\n                    if (seg.length !== 1) {\n                        source = sources.array[seg[SOURCES_INDEX]];\n                        original = { line: seg[SOURCE_LINE] + 1, column: seg[SOURCE_COLUMN] };\n                        if (seg.length === 5)\n                            name = names.array[seg[NAMES_INDEX]];\n                    }\n                    out.push({ generated, source, original, name });\n                }\n            }\n            return out;\n        };\n        exports.fromMap = (input) => {\n            const map = new traceMapping.TraceMap(input);\n            const gen = new GenMapping({ file: map.file, sourceRoot: map.sourceRoot });\n            putAll(gen._names, map.names);\n            putAll(gen._sources, map.sources);\n            gen._sourcesContent = map.sourcesContent || map.sources.map(() => null);\n            gen._mappings = traceMapping.decodedMappings(map);\n            return gen;\n        };\n        // Internal helpers\n        addSegmentInternal = (skipable, map, genLine, genColumn, source, sourceLine, sourceColumn, name, content) => {\n            const { _mappings: mappings, _sources: sources, _sourcesContent: sourcesContent, _names: names, } = map;\n            const line = getLine(mappings, genLine);\n            const index = getColumnIndex(line, genColumn);\n            if (!source) {\n                if (skipable && skipSourceless(line, index))\n                    return;\n                return insert(line, index, [genColumn]);\n            }\n            const sourcesIndex = setArray.put(sources, source);\n            const namesIndex = name ? setArray.put(names, name) : NO_NAME;\n            if (sourcesIndex === sourcesContent.length)\n                sourcesContent[sourcesIndex] = content !== null && content !== void 0 ? content : null;\n            if (skipable && skipSource(line, index, sourcesIndex, sourceLine, sourceColumn, namesIndex)) {\n                return;\n            }\n            return insert(line, index, name\n                ? [genColumn, sourcesIndex, sourceLine, sourceColumn, namesIndex]\n                : [genColumn, sourcesIndex, sourceLine, sourceColumn]);\n        };\n    })();\n    function getLine(mappings, index) {\n        for (let i = mappings.length; i <= index; i++) {\n            mappings[i] = [];\n        }\n        return mappings[index];\n    }\n    function getColumnIndex(line, genColumn) {\n        let index = line.length;\n        for (let i = index - 1; i >= 0; index = i--) {\n            const current = line[i];\n            if (genColumn >= current[COLUMN])\n                break;\n        }\n        return index;\n    }\n    function insert(array, index, value) {\n        for (let i = array.length; i > index; i--) {\n            array[i] = array[i - 1];\n        }\n        array[index] = value;\n    }\n    function removeEmptyFinalLines(mappings) {\n        const { length } = mappings;\n        let len = length;\n        for (let i = len - 1; i >= 0; len = i, i--) {\n            if (mappings[i].length > 0)\n                break;\n        }\n        if (len < length)\n            mappings.length = len;\n    }\n    function putAll(strarr, array) {\n        for (let i = 0; i < array.length; i++)\n            setArray.put(strarr, array[i]);\n    }\n    function skipSourceless(line, index) {\n        // The start of a line is already sourceless, so adding a sourceless segment to the beginning\n        // doesn't generate any useful information.\n        if (index === 0)\n            return true;\n        const prev = line[index - 1];\n        // If the previous segment is also sourceless, then adding another sourceless segment doesn't\n        // genrate any new information. Else, this segment will end the source/named segment and point to\n        // a sourceless position, which is useful.\n        return prev.length === 1;\n    }\n    function skipSource(line, index, sourcesIndex, sourceLine, sourceColumn, namesIndex) {\n        // A source/named segment at the start of a line gives position at that genColumn\n        if (index === 0)\n            return false;\n        const prev = line[index - 1];\n        // If the previous segment is sourceless, then we're transitioning to a source.\n        if (prev.length === 1)\n            return false;\n        // If the previous segment maps to the exact same source position, then this segment doesn't\n        // provide any new position information.\n        return (sourcesIndex === prev[SOURCES_INDEX] &&\n            sourceLine === prev[SOURCE_LINE] &&\n            sourceColumn === prev[SOURCE_COLUMN] &&\n            namesIndex === (prev.length === 5 ? prev[NAMES_INDEX] : NO_NAME));\n    }\n    function addMappingInternal(skipable, map, mapping) {\n        const { generated, source, original, name, content } = mapping;\n        if (!source) {\n            return addSegmentInternal(skipable, map, generated.line - 1, generated.column, null, null, null, null, null);\n        }\n        const s = source;\n        return addSegmentInternal(skipable, map, generated.line - 1, generated.column, s, original.line - 1, original.column, name, content);\n    }\n\n    exports.GenMapping = GenMapping;\n\n    Object.defineProperty(exports, '__esModule', { value: true });\n\n}));\n//# sourceMappingURL=gen-mapping.umd.js.map\n/dist/gen-mapping.umd.js.mapT{\"version\":3,\"file\":\"gen-mapping.umd.js\",\"sources\":[\"../src/sourcemap-segment.ts\",\"../src/gen-mapping.ts\"],\"sourcesContent\":[\"type GeneratedColumn = number;\\ntype SourcesIndex = number;\\ntype SourceLine = number;\\ntype SourceColumn = number;\\ntype NamesIndex = number;\\n\\nexport type SourceMapSegment =\\n  | [GeneratedColumn]\\n  | [GeneratedColumn, SourcesIndex, SourceLine, SourceColumn]\\n  | [GeneratedColumn, SourcesIndex, SourceLine, SourceColumn, NamesIndex];\\n\\nexport const COLUMN = 0;\\nexport const SOURCES_INDEX = 1;\\nexport const SOURCE_LINE = 2;\\nexport const SOURCE_COLUMN = 3;\\nexport const NAMES_INDEX = 4;\\n\",\"import { SetArray, put } from '@jridgewell/set-array';\\nimport { encode } from '@jridgewell/sourcemap-codec';\\nimport { TraceMap, decodedMappings } from '@jridgewell/trace-mapping';\\n\\nimport {\\n  COLUMN,\\n  SOURCES_INDEX,\\n  SOURCE_LINE,\\n  SOURCE_COLUMN,\\n  NAMES_INDEX,\\n} from './sourcemap-segment';\\n\\nimport type { SourceMapInput } from '@jridgewell/trace-mapping';\\nimport type { SourceMapSegment } from './sourcemap-segment';\\nimport type { DecodedSourceMap, EncodedSourceMap, Pos, Mapping } from './types';\\n\\nexport type { DecodedSourceMap, EncodedSourceMap, Mapping };\\n\\nexport type Options = {\\n  file?: string | null;\\n  sourceRoot?: string | null;\\n};\\n\\nconst NO_NAME = -1;\\n\\n/**\\n * A low-level API to associate a generated position with an original source position. Line and\\n * column here are 0-based, unlike `addMapping`.\\n */\\nexport let addSegment: {\\n  (\\n    map: GenMapping,\\n    genLine: number,\\n    genColumn: number,\\n    source?: null,\\n    sourceLine?: null,\\n    sourceColumn?: null,\\n    name?: null,\\n    content?: null,\\n  ): void;\\n  (\\n    map: GenMapping,\\n    genLine: number,\\n    genColumn: number,\\n    source: string,\\n    sourceLine: number,\\n    sourceColumn: number,\\n    name?: null,\\n    content?: string | null,\\n  ): void;\\n  (\\n    map: GenMapping,\\n    genLine: number,\\n    genColumn: number,\\n    source: string,\\n    sourceLine: number,\\n    sourceColumn: number,\\n    name: string,\\n    content?: string | null,\\n  ): void;\\n};\\n\\n/**\\n * A high-level API to associate a generated position with an original source position. Line is\\n * 1-based, but column is 0-based, due to legacy behavior in `source-map` library.\\n */\\nexport let addMapping: {\\n  (\\n    map: GenMapping,\\n    mapping: {\\n      generated: Pos;\\n      source?: null;\\n      original?: null;\\n      name?: null;\\n      content?: null;\\n    },\\n  ): void;\\n  (\\n    map: GenMapping,\\n    mapping: {\\n      generated: Pos;\\n      source: string;\\n      original: Pos;\\n      name?: null;\\n      content?: string | null;\\n    },\\n  ): void;\\n  (\\n    map: GenMapping,\\n    mapping: {\\n      generated: Pos;\\n      source: string;\\n      original: Pos;\\n      name: string;\\n      content?: string | null;\\n    },\\n  ): void;\\n};\\n\\n/**\\n * Same as `addSegment`, but will only add the segment if it generates useful information in the\\n * resulting map. This only works correctly if segments are added **in order**, meaning you should\\n * not add a segment with a lower generated line/column than one that came before.\\n */\\nexport let maybeAddSegment: typeof addSegment;\\n\\n/**\\n * Same as `addMapping`, but will only add the mapping if it generates useful information in the\\n * resulting map. This only works correctly if mappings are added **in order**, meaning you should\\n * not add a mapping with a lower generated line/column than one that came before.\\n */\\nexport let maybeAddMapping: typeof addMapping;\\n\\n/**\\n * Adds/removes the content of the source file to the source map.\\n */\\nexport let setSourceContent: (map: GenMapping, source: string, content: string | null) => void;\\n\\n/**\\n * Returns a sourcemap object (with decoded mappings) suitable for passing to a library that expects\\n * a sourcemap, or to JSON.stringify.\\n */\\nexport let toDecodedMap: (map: GenMapping) => DecodedSourceMap;\\n\\n/**\\n * Returns a sourcemap object (with encoded mappings) suitable for passing to a library that expects\\n * a sourcemap, or to JSON.stringify.\\n */\\nexport let toEncodedMap: (map: GenMapping) => EncodedSourceMap;\\n\\n/**\\n * Constructs a new GenMapping, using the already present mappings of the input.\\n */\\nexport let fromMap: (input: SourceMapInput) => GenMapping;\\n\\n/**\\n * Returns an array of high-level mapping objects for every recorded segment, which could then be\\n * passed to the `source-map` library.\\n */\\nexport let allMappings: (map: GenMapping) => Mapping[];\\n\\n// This split declaration is only so that terser can elminiate the static initialization block.\\nlet addSegmentInternal: <S extends string | null | undefined>(\\n  skipable: boolean,\\n  map: GenMapping,\\n  genLine: number,\\n  genColumn: number,\\n  source: S,\\n  sourceLine: S extends string ? number : null | undefined,\\n  sourceColumn: S extends string ? number : null | undefined,\\n  name: S extends string ? string | null | undefined : null | undefined,\\n  content: S extends string ? string | null | undefined : null | undefined,\\n) => void;\\n\\n/**\\n * Provides the state to generate a sourcemap.\\n */\\nexport class GenMapping {\\n  private _names = new SetArray();\\n  private _sources = new SetArray();\\n  private _sourcesContent: (string | null)[] = [];\\n  private _mappings: SourceMapSegment[][] = [];\\n  declare file: string | null | undefined;\\n  declare sourceRoot: string | null | undefined;\\n\\n  constructor({ file, sourceRoot }: Options = {}) {\\n    this.file = file;\\n    this.sourceRoot = sourceRoot;\\n  }\\n\\n  static {\\n    addSegment = (map, genLine, genColumn, source, sourceLine, sourceColumn, name, content) => {\\n      return addSegmentInternal(\\n        false,\\n        map,\\n        genLine,\\n        genColumn,\\n        source,\\n        sourceLine,\\n        sourceColumn,\\n        name,\\n        content,\\n      );\\n    };\\n\\n    maybeAddSegment = (\\n      map,\\n      genLine,\\n      genColumn,\\n      source,\\n      sourceLine,\\n      sourceColumn,\\n      name,\\n      content,\\n    ) => {\\n      return addSegmentInternal(\\n        true,\\n        map,\\n        genLine,\\n        genColumn,\\n        source,\\n        sourceLine,\\n        sourceColumn,\\n        name,\\n        content,\\n      );\\n    };\\n\\n    addMapping = (map, mapping) => {\\n      return addMappingInternal(false, map, mapping as Parameters<typeof addMappingInternal>[2]);\\n    };\\n\\n    maybeAddMapping = (map, mapping) => {\\n      return addMappingInternal(true, map, mapping as Parameters<typeof addMappingInternal>[2]);\\n    };\\n\\n    setSourceContent = (map, source, content) => {\\n      const { _sources: sources, _sourcesContent: sourcesContent } = map;\\n      sourcesContent[put(sources, source)] = content;\\n    };\\n\\n    toDecodedMap = (map) => {\\n      const {\\n        file,\\n        sourceRoot,\\n        _mappings: mappings,\\n        _sources: sources,\\n        _sourcesContent: sourcesContent,\\n        _names: names,\\n      } = map;\\n      removeEmptyFinalLines(mappings);\\n\\n      return {\\n        version: 3,\\n        file: file || undefined,\\n        names: names.array,\\n        sourceRoot: sourceRoot || undefined,\\n        sources: sources.array,\\n        sourcesContent,\\n        mappings,\\n      };\\n    };\\n\\n    toEncodedMap = (map) => {\\n      const decoded = toDecodedMap(map);\\n      return {\\n        ...decoded,\\n        mappings: encode(decoded.mappings as SourceMapSegment[][]),\\n      };\\n    };\\n\\n    allMappings = (map) => {\\n      const out: Mapping[] = [];\\n      const { _mappings: mappings, _sources: sources, _names: names } = map;\\n\\n      for (let i = 0; i < mappings.length; i++) {\\n        const line = mappings[i];\\n        for (let j = 0; j < line.length; j++) {\\n          const seg = line[j];\\n\\n          const generated = { line: i + 1, column: seg[COLUMN] };\\n          let source: string | undefined = undefined;\\n          let original: Pos | undefined = undefined;\\n          let name: string | undefined = undefined;\\n\\n          if (seg.length !== 1) {\\n            source = sources.array[seg[SOURCES_INDEX]];\\n            original = { line: seg[SOURCE_LINE] + 1, column: seg[SOURCE_COLUMN] };\\n\\n            if (seg.length === 5) name = names.array[seg[NAMES_INDEX]];\\n          }\\n\\n          out.push({ generated, source, original, name } as Mapping);\\n        }\\n      }\\n\\n      return out;\\n    };\\n\\n    fromMap = (input) => {\\n      const map = new TraceMap(input);\\n      const gen = new GenMapping({ file: map.file, sourceRoot: map.sourceRoot });\\n\\n      putAll(gen._names, map.names);\\n      putAll(gen._sources, map.sources as string[]);\\n      gen._sourcesContent = map.sourcesContent || map.sources.map(() => null);\\n      gen._mappings = decodedMappings(map) as GenMapping['_mappings'];\\n\\n      return gen;\\n    };\\n\\n    // Internal helpers\\n    addSegmentInternal = (\\n      skipable,\\n      map,\\n      genLine,\\n      genColumn,\\n      source,\\n      sourceLine,\\n      sourceColumn,\\n      name,\\n      content,\\n    ) => {\\n      const {\\n        _mappings: mappings,\\n        _sources: sources,\\n        _sourcesContent: sourcesContent,\\n        _names: names,\\n      } = map;\\n      const line = getLine(mappings, genLine);\\n      const index = getColumnIndex(line, genColumn);\\n\\n      if (!source) {\\n        if (skipable && skipSourceless(line, index)) return;\\n        return insert(line, index, [genColumn]);\\n      }\\n\\n      // Sigh, TypeScript can't figure out sourceLine and sourceColumn aren't nullish if source\\n      // isn't nullish.\\n      assert<number>(sourceLine);\\n      assert<number>(sourceColumn);\\n\\n      const sourcesIndex = put(sources, source);\\n      const namesIndex = name ? put(names, name) : NO_NAME;\\n      if (sourcesIndex === sourcesContent.length) sourcesContent[sourcesIndex] = content ?? null;\\n\\n      if (skipable && skipSource(line, index, sourcesIndex, sourceLine, sourceColumn, namesIndex)) {\\n        return;\\n      }\\n\\n      return insert(\\n        line,\\n        index,\\n        name\\n          ? [genColumn, sourcesIndex, sourceLine, sourceColumn, namesIndex]\\n          : [genColumn, sourcesIndex, sourceLine, sourceColumn],\\n      );\\n    };\\n  }\\n}\\n\\nfunction assert<T>(_val: unknown): asserts _val is T {\\n  // noop.\\n}\\n\\nfunction getLine(mappings: SourceMapSegment[][], index: number): SourceMapSegment[] {\\n  for (let i = mappings.length; i <= index; i++) {\\n    mappings[i] = [];\\n  }\\n  return mappings[index];\\n}\\n\\nfunction getColumnIndex(line: SourceMapSegment[], genColumn: number): number {\\n  let index = line.length;\\n  for (let i = index - 1; i >= 0; index = i--) {\\n    const current = line[i];\\n    if (genColumn >= current[COLUMN]) break;\\n  }\\n  return index;\\n}\\n\\nfunction insert<T>(array: T[], index: number, value: T) {\\n  for (let i = array.length; i > index; i--) {\\n    array[i] = array[i - 1];\\n  }\\n  array[index] = value;\\n}\\n\\nfunction removeEmptyFinalLines(mappings: SourceMapSegment[][]) {\\n  const { length } = mappings;\\n  let len = length;\\n  for (let i = len - 1; i >= 0; len = i, i--) {\\n    if (mappings[i].length > 0) break;\\n  }\\n  if (len < length) mappings.length = len;\\n}\\n\\nfunction putAll(strarr: SetArray, array: string[]) {\\n  for (let i = 0; i < array.length; i++) put(strarr, array[i]);\\n}\\n\\nfunction skipSourceless(line: SourceMapSegment[], index: number): boolean {\\n  // The start of a line is already sourceless, so adding a sourceless segment to the beginning\\n  // doesn't generate any useful information.\\n  if (index === 0) return true;\\n\\n  const prev = line[index - 1];\\n  // If the previous segment is also sourceless, then adding another sourceless segment doesn't\\n  // genrate any new information. Else, this segment will end the source/named segment and point to\\n  // a sourceless position, which is useful.\\n  return prev.length === 1;\\n}\\n\\nfunction skipSource(\\n  line: SourceMapSegment[],\\n  index: number,\\n  sourcesIndex: number,\\n  sourceLine: number,\\n  sourceColumn: number,\\n  namesIndex: number,\\n): boolean {\\n  // A source/named segment at the start of a line gives position at that genColumn\\n  if (index === 0) return false;\\n\\n  const prev = line[index - 1];\\n\\n  // If the previous segment is sourceless, then we're transitioning to a source.\\n  if (prev.length === 1) return false;\\n\\n  // If the previous segment maps to the exact same source position, then this segment doesn't\\n  // provide any new position information.\\n  return (\\n    sourcesIndex === prev[SOURCES_INDEX] &&\\n    sourceLine === prev[SOURCE_LINE] &&\\n    sourceColumn === prev[SOURCE_COLUMN] &&\\n    namesIndex === (prev.length === 5 ? prev[NAMES_INDEX] : NO_NAME)\\n  );\\n}\\n\\nfunction addMappingInternal<S extends string | null | undefined>(\\n  skipable: boolean,\\n  map: GenMapping,\\n  mapping: {\\n    generated: Pos;\\n    source: S;\\n    original: S extends string ? Pos : null | undefined;\\n    name: S extends string ? string | null | undefined : null | undefined;\\n    content: S extends string ? string | null | undefined : null | undefined;\\n  },\\n) {\\n  const { generated, source, original, name, content } = mapping;\\n  if (!source) {\\n    return addSegmentInternal(\\n      skipable,\\n      map,\\n      generated.line - 1,\\n      generated.column,\\n      null,\\n      null,\\n      null,\\n      null,\\n      null,\\n    );\\n  }\\n  const s: string = source;\\n  assert<Pos>(original);\\n  return addSegmentInternal(\\n    skipable,\\n    map,\\n    generated.line - 1,\\n    generated.column,\\n    s,\\n    original.line - 1,\\n    original.column,\\n    name,\\n    content,\\n  );\\n}\\n\"],\"names\":[\"addSegment\",\"addMapping\",\"maybeAddSegment\",\"maybeAddMapping\",\"setSourceContent\",\"toDecodedMap\",\"toEncodedMap\",\"fromMap\",\"allMappings\",\"SetArray\",\"put\",\"encode\",\"TraceMap\",\"decodedMappings\"],\"mappings\":\"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\"}/src/types.ts\u0003Iimport type { SourceMapSegment } from './sourcemap-segment';\n\nexport interface SourceMapV3 {\n  file?: string | null;\n  names: readonly string[];\n  sourceRoot?: string;\n  sources: readonly (string | null)[];\n  sourcesContent?: readonly (string | null)[];\n  version: 3;\n}\n\nexport interface EncodedSourceMap extends SourceMapV3 {\n  mappings: string;\n}\n\nexport interface DecodedSourceMap extends SourceMapV3 {\n  mappings: readonly SourceMapSegment[][];\n}\n\nexport interface Pos {\n  line: number;\n  column: number;\n}\n\nexport type Mapping =\n  | {\n      generated: Pos;\n      source: undefined;\n      original: undefined;\n      name: undefined;\n    }\n  | {\n      generated: Pos;\n      source: string;\n      original: Pos;\n      name: string;\n    }\n  | {\n      generated: Pos;\n      source: string;\n      original: Pos;\n      name: undefined;\n    };\n/dist/types/types.d.ts\u00034import type { SourceMapSegment } from './sourcemap-segment';\nexport interface SourceMapV3 {\n    file?: string | null;\n    names: readonly string[];\n    sourceRoot?: string;\n    sources: readonly (string | null)[];\n    sourcesContent?: readonly (string | null)[];\n    version: 3;\n}\nexport interface EncodedSourceMap extends SourceMapV3 {\n    mappings: string;\n}\nexport interface DecodedSourceMap extends SourceMapV3 {\n    mappings: readonly SourceMapSegment[][];\n}\nexport interface Pos {\n    line: number;\n    column: number;\n}\nexport declare type Mapping = {\n    generated: Pos;\n    source: undefined;\n    original: undefined;\n    name: undefined;\n} | {\n    generated: Pos;\n    source: string;\n    original: Pos;\n    name: string;\n} | {\n    generated: Pos;\n    source: string;\n    original: Pos;\n    name: undefined;\n};\n/dist/types/gen-mapping.d.ts\u000eXimport type { SourceMapInput } from '@jridgewell/trace-mapping';\nimport type { DecodedSourceMap, EncodedSourceMap, Pos, Mapping } from './types';\nexport type { DecodedSourceMap, EncodedSourceMap, Mapping };\nexport declare type Options = {\n    file?: string | null;\n    sourceRoot?: string | null;\n};\n/**\n * A low-level API to associate a generated position with an original source position. Line and\n * column here are 0-based, unlike `addMapping`.\n */\nexport declare let addSegment: {\n    (map: GenMapping, genLine: number, genColumn: number, source?: null, sourceLine?: null, sourceColumn?: null, name?: null, content?: null): void;\n    (map: GenMapping, genLine: number, genColumn: number, source: string, sourceLine: number, sourceColumn: number, name?: null, content?: string | null): void;\n    (map: GenMapping, genLine: number, genColumn: number, source: string, sourceLine: number, sourceColumn: number, name: string, content?: string | null): void;\n};\n/**\n * A high-level API to associate a generated position with an original source position. Line is\n * 1-based, but column is 0-based, due to legacy behavior in `source-map` library.\n */\nexport declare let addMapping: {\n    (map: GenMapping, mapping: {\n        generated: Pos;\n        source?: null;\n        original?: null;\n        name?: null;\n        content?: null;\n    }): void;\n    (map: GenMapping, mapping: {\n        generated: Pos;\n        source: string;\n        original: Pos;\n        name?: null;\n        content?: string | null;\n    }): void;\n    (map: GenMapping, mapping: {\n        generated: Pos;\n        source: string;\n        original: Pos;\n        name: string;\n        content?: string | null;\n    }): void;\n};\n/**\n * Same as `addSegment`, but will only add the segment if it generates useful information in the\n * resulting map. This only works correctly if segments are added **in order**, meaning you should\n * not add a segment with a lower generated line/column than one that came before.\n */\nexport declare let maybeAddSegment: typeof addSegment;\n/**\n * Same as `addMapping`, but will only add the mapping if it generates useful information in the\n * resulting map. This only works correctly if mappings are added **in order**, meaning you should\n * not add a mapping with a lower generated line/column than one that came before.\n */\nexport declare let maybeAddMapping: typeof addMapping;\n/**\n * Adds/removes the content of the source file to the source map.\n */\nexport declare let setSourceContent: (map: GenMapping, source: string, content: string | null) => void;\n/**\n * Returns a sourcemap object (with decoded mappings) suitable for passing to a library that expects\n * a sourcemap, or to JSON.stringify.\n */\nexport declare let toDecodedMap: (map: GenMapping) => DecodedSourceMap;\n/**\n * Returns a sourcemap object (with encoded mappings) suitable for passing to a library that expects\n * a sourcemap, or to JSON.stringify.\n */\nexport declare let toEncodedMap: (map: GenMapping) => EncodedSourceMap;\n/**\n * Constructs a new GenMapping, using the already present mappings of the input.\n */\nexport declare let fromMap: (input: SourceMapInput) => GenMapping;\n/**\n * Returns an array of high-level mapping objects for every recorded segment, which could then be\n * passed to the `source-map` library.\n */\nexport declare let allMappings: (map: GenMapping) => Mapping[];\n/**\n * Provides the state to generate a sourcemap.\n */\nexport declare class GenMapping {\n    private _names;\n    private _sources;\n    private _sourcesContent;\n    private _mappings;\n    file: string | null | undefined;\n    sourceRoot: string | null | undefined;\n    constructor({ file, sourceRoot }?: Options);\n}\n/src/sourcemap-segment.ts\u0001type GeneratedColumn = number;\ntype SourcesIndex = number;\ntype SourceLine = number;\ntype SourceColumn = number;\ntype NamesIndex = number;\n\nexport type SourceMapSegment =\n  | [GeneratedColumn]\n  | [GeneratedColumn, SourcesIndex, SourceLine, SourceColumn]\n  | [GeneratedColumn, SourcesIndex, SourceLine, SourceColumn, NamesIndex];\n\nexport const COLUMN = 0;\nexport const SOURCES_INDEX = 1;\nexport const SOURCE_LINE = 2;\nexport const SOURCE_COLUMN = 3;\nexport const NAMES_INDEX = 4;\n/src/gen-mapping.ts0import { SetArray, put } from '@jridgewell/set-array';\nimport { encode } from '@jridgewell/sourcemap-codec';\nimport { TraceMap, decodedMappings } from '@jridgewell/trace-mapping';\n\nimport {\n  COLUMN,\n  SOURCES_INDEX,\n  SOURCE_LINE,\n  SOURCE_COLUMN,\n  NAMES_INDEX,\n} from './sourcemap-segment';\n\nimport type { SourceMapInput } from '@jridgewell/trace-mapping';\nimport type { SourceMapSegment } from './sourcemap-segment';\nimport type { DecodedSourceMap, EncodedSourceMap, Pos, Mapping } from './types';\n\nexport type { DecodedSourceMap, EncodedSourceMap, Mapping };\n\nexport type Options = {\n  file?: string | null;\n  sourceRoot?: string | null;\n};\n\nconst NO_NAME = -1;\n\n/**\n * A low-level API to associate a generated position with an original source position. Line and\n * column here are 0-based, unlike `addMapping`.\n */\nexport let addSegment: {\n  (\n    map: GenMapping,\n    genLine: number,\n    genColumn: number,\n    source?: null,\n    sourceLine?: null,\n    sourceColumn?: null,\n    name?: null,\n    content?: null,\n  ): void;\n  (\n    map: GenMapping,\n    genLine: number,\n    genColumn: number,\n    source: string,\n    sourceLine: number,\n    sourceColumn: number,\n    name?: null,\n    content?: string | null,\n  ): void;\n  (\n    map: GenMapping,\n    genLine: number,\n    genColumn: number,\n    source: string,\n    sourceLine: number,\n    sourceColumn: number,\n    name: string,\n    content?: string | null,\n  ): void;\n};\n\n/**\n * A high-level API to associate a generated position with an original source position. Line is\n * 1-based, but column is 0-based, due to legacy behavior in `source-map` library.\n */\nexport let addMapping: {\n  (\n    map: GenMapping,\n    mapping: {\n      generated: Pos;\n      source?: null;\n      original?: null;\n      name?: null;\n      content?: null;\n    },\n  ): void;\n  (\n    map: GenMapping,\n    mapping: {\n      generated: Pos;\n      source: string;\n      original: Pos;\n      name?: null;\n      content?: string | null;\n    },\n  ): void;\n  (\n    map: GenMapping,\n    mapping: {\n      generated: Pos;\n      source: string;\n      original: Pos;\n      name: string;\n      content?: string | null;\n    },\n  ): void;\n};\n\n/**\n * Same as `addSegment`, but will only add the segment if it generates useful information in the\n * resulting map. This only works correctly if segments are added **in order**, meaning you should\n * not add a segment with a lower generated line/column than one that came before.\n */\nexport let maybeAddSegment: typeof addSegment;\n\n/**\n * Same as `addMapping`, but will only add the mapping if it generates useful information in the\n * resulting map. This only works correctly if mappings are added **in order**, meaning you should\n * not add a mapping with a lower generated line/column than one that came before.\n */\nexport let maybeAddMapping: typeof addMapping;\n\n/**\n * Adds/removes the content of the source file to the source map.\n */\nexport let setSourceContent: (map: GenMapping, source: string, content: string | null) => void;\n\n/**\n * Returns a sourcemap object (with decoded mappings) suitable for passing to a library that expects\n * a sourcemap, or to JSON.stringify.\n */\nexport let toDecodedMap: (map: GenMapping) => DecodedSourceMap;\n\n/**\n * Returns a sourcemap object (with encoded mappings) suitable for passing to a library that expects\n * a sourcemap, or to JSON.stringify.\n */\nexport let toEncodedMap: (map: GenMapping) => EncodedSourceMap;\n\n/**\n * Constructs a new GenMapping, using the already present mappings of the input.\n */\nexport let fromMap: (input: SourceMapInput) => GenMapping;\n\n/**\n * Returns an array of high-level mapping objects for every recorded segment, which could then be\n * passed to the `source-map` library.\n */\nexport let allMappings: (map: GenMapping) => Mapping[];\n\n// This split declaration is only so that terser can elminiate the static initialization block.\nlet addSegmentInternal: <S extends string | null | undefined>(\n  skipable: boolean,\n  map: GenMapping,\n  genLine: number,\n  genColumn: number,\n  source: S,\n  sourceLine: S extends string ? number : null | undefined,\n  sourceColumn: S extends string ? number : null | undefined,\n  name: S extends string ? string | null | undefined : null | undefined,\n  content: S extends string ? string | null | undefined : null | undefined,\n) => void;\n\n/**\n * Provides the state to generate a sourcemap.\n */\nexport class GenMapping {\n  private _names = new SetArray();\n  private _sources = new SetArray();\n  private _sourcesContent: (string | null)[] = [];\n  private _mappings: SourceMapSegment[][] = [];\n  declare file: string | null | undefined;\n  declare sourceRoot: string | null | undefined;\n\n  constructor({ file, sourceRoot }: Options = {}) {\n    this.file = file;\n    this.sourceRoot = sourceRoot;\n  }\n\n  static {\n    addSegment = (map, genLine, genColumn, source, sourceLine, sourceColumn, name, content) => {\n      return addSegmentInternal(\n        false,\n        map,\n        genLine,\n        genColumn,\n        source,\n        sourceLine,\n        sourceColumn,\n        name,\n        content,\n      );\n    };\n\n    maybeAddSegment = (\n      map,\n      genLine,\n      genColumn,\n      source,\n      sourceLine,\n      sourceColumn,\n      name,\n      content,\n    ) => {\n      return addSegmentInternal(\n        true,\n        map,\n        genLine,\n        genColumn,\n        source,\n        sourceLine,\n        sourceColumn,\n        name,\n        content,\n      );\n    };\n\n    addMapping = (map, mapping) => {\n      return addMappingInternal(false, map, mapping as Parameters<typeof addMappingInternal>[2]);\n    };\n\n    maybeAddMapping = (map, mapping) => {\n      return addMappingInternal(true, map, mapping as Parameters<typeof addMappingInternal>[2]);\n    };\n\n    setSourceContent = (map, source, content) => {\n      const { _sources: sources, _sourcesContent: sourcesContent } = map;\n      sourcesContent[put(sources, source)] = content;\n    };\n\n    toDecodedMap = (map) => {\n      const {\n        file,\n        sourceRoot,\n        _mappings: mappings,\n        _sources: sources,\n        _sourcesContent: sourcesContent,\n        _names: names,\n      } = map;\n      removeEmptyFinalLines(mappings);\n\n      return {\n        version: 3,\n        file: file || undefined,\n        names: names.array,\n        sourceRoot: sourceRoot || undefined,\n        sources: sources.array,\n        sourcesContent,\n        mappings,\n      };\n    };\n\n    toEncodedMap = (map) => {\n      const decoded = toDecodedMap(map);\n      return {\n        ...decoded,\n        mappings: encode(decoded.mappings as SourceMapSegment[][]),\n      };\n    };\n\n    allMappings = (map) => {\n      const out: Mapping[] = [];\n      const { _mappings: mappings, _sources: sources, _names: names } = map;\n\n      for (let i = 0; i < mappings.length; i++) {\n        const line = mappings[i];\n        for (let j = 0; j < line.length; j++) {\n          const seg = line[j];\n\n          const generated = { line: i + 1, column: seg[COLUMN] };\n          let source: string | undefined = undefined;\n          let original: Pos | undefined = undefined;\n          let name: string | undefined = undefined;\n\n          if (seg.length !== 1) {\n            source = sources.array[seg[SOURCES_INDEX]];\n            original = { line: seg[SOURCE_LINE] + 1, column: seg[SOURCE_COLUMN] };\n\n            if (seg.length === 5) name = names.array[seg[NAMES_INDEX]];\n          }\n\n          out.push({ generated, source, original, name } as Mapping);\n        }\n      }\n\n      return out;\n    };\n\n    fromMap = (input) => {\n      const map = new TraceMap(input);\n      const gen = new GenMapping({ file: map.file, sourceRoot: map.sourceRoot });\n\n      putAll(gen._names, map.names);\n      putAll(gen._sources, map.sources as string[]);\n      gen._sourcesContent = map.sourcesContent || map.sources.map(() => null);\n      gen._mappings = decodedMappings(map) as GenMapping['_mappings'];\n\n      return gen;\n    };\n\n    // Internal helpers\n    addSegmentInternal = (\n      skipable,\n      map,\n      genLine,\n      genColumn,\n      source,\n      sourceLine,\n      sourceColumn,\n      name,\n      content,\n    ) => {\n      const {\n        _mappings: mappings,\n        _sources: sources,\n        _sourcesContent: sourcesContent,\n        _names: names,\n      } = map;\n      const line = getLine(mappings, genLine);\n      const index = getColumnIndex(line, genColumn);\n\n      if (!source) {\n        if (skipable && skipSourceless(line, index)) return;\n        return insert(line, index, [genColumn]);\n      }\n\n      // Sigh, TypeScript can't figure out sourceLine and sourceColumn aren't nullish if source\n      // isn't nullish.\n      assert<number>(sourceLine);\n      assert<number>(sourceColumn);\n\n      const sourcesIndex = put(sources, source);\n      const namesIndex = name ? put(names, name) : NO_NAME;\n      if (sourcesIndex === sourcesContent.length) sourcesContent[sourcesIndex] = content ?? null;\n\n      if (skipable && skipSource(line, index, sourcesIndex, sourceLine, sourceColumn, namesIndex)) {\n        return;\n      }\n\n      return insert(\n        line,\n        index,\n        name\n          ? [genColumn, sourcesIndex, sourceLine, sourceColumn, namesIndex]\n          : [genColumn, sourcesIndex, sourceLine, sourceColumn],\n      );\n    };\n  }\n}\n\nfunction assert<T>(_val: unknown): asserts _val is T {\n  // noop.\n}\n\nfunction getLine(mappings: SourceMapSegment[][], index: number): SourceMapSegment[] {\n  for (let i = mappings.length; i <= index; i++) {\n    mappings[i] = [];\n  }\n  return mappings[index];\n}\n\nfunction getColumnIndex(line: SourceMapSegment[], genColumn: number): number {\n  let index = line.length;\n  for (let i = index - 1; i >= 0; index = i--) {\n    const current = line[i];\n    if (genColumn >= current[COLUMN]) break;\n  }\n  return index;\n}\n\nfunction insert<T>(array: T[], index: number, value: T) {\n  for (let i = array.length; i > index; i--) {\n    array[i] = array[i - 1];\n  }\n  array[index] = value;\n}\n\nfunction removeEmptyFinalLines(mappings: SourceMapSegment[][]) {\n  const { length } = mappings;\n  let len = length;\n  for (let i = len - 1; i >= 0; len = i, i--) {\n    if (mappings[i].length > 0) break;\n  }\n  if (len < length) mappings.length = len;\n}\n\nfunction putAll(strarr: SetArray, array: string[]) {\n  for (let i = 0; i < array.length; i++) put(strarr, array[i]);\n}\n\nfunction skipSourceless(line: SourceMapSegment[], index: number): boolean {\n  // The start of a line is already sourceless, so adding a sourceless segment to the beginning\n  // doesn't generate any useful information.\n  if (index === 0) return true;\n\n  const prev = line[index - 1];\n  // If the previous segment is also sourceless, then adding another sourceless segment doesn't\n  // genrate any new information. Else, this segment will end the source/named segment and point to\n  // a sourceless position, which is useful.\n  return prev.length === 1;\n}\n\nfunction skipSource(\n  line: SourceMapSegment[],\n  index: number,\n  sourcesIndex: number,\n  sourceLine: number,\n  sourceColumn: number,\n  namesIndex: number,\n): boolean {\n  // A source/named segment at the start of a line gives position at that genColumn\n  if (index === 0) return false;\n\n  const prev = line[index - 1];\n\n  // If the previous segment is sourceless, then we're transitioning to a source.\n  if (prev.length === 1) return false;\n\n  // If the previous segment maps to the exact same source position, then this segment doesn't\n  // provide any new position information.\n  return (\n    sourcesIndex === prev[SOURCES_INDEX] &&\n    sourceLine === prev[SOURCE_LINE] &&\n    sourceColumn === prev[SOURCE_COLUMN] &&\n    namesIndex === (prev.length === 5 ? prev[NAMES_INDEX] : NO_NAME)\n  );\n}\n\nfunction addMappingInternal<S extends string | null | undefined>(\n  skipable: boolean,\n  map: GenMapping,\n  mapping: {\n    generated: Pos;\n    source: S;\n    original: S extends string ? Pos : null | undefined;\n    name: S extends string ? string | null | undefined : null | undefined;\n    content: S extends string ? string | null | undefined : null | undefined;\n  },\n) {\n  const { generated, source, original, name, content } = mapping;\n  if (!source) {\n    return addSegmentInternal(\n      skipable,\n      map,\n      generated.line - 1,\n      generated.column,\n      null,\n      null,\n      null,\n      null,\n      null,\n    );\n  }\n  const s: string = source;\n  assert<Pos>(original);\n  return addSegmentInternal(\n    skipable,\n    map,\n    generated.line - 1,\n    generated.column,\n    s,\n    original.line - 1,\n    original.column,\n    name,\n    content,\n  );\n}\n/README.md\u001d4# @jridgewell/gen-mapping\n\n> Generate source maps\n\n`gen-mapping` allows you to generate a source map during transpilation or minification.\nWith a source map, you're able to trace the original location in the source file, either in Chrome's\nDevTools or using a library like [`@jridgewell/trace-mapping`][trace-mapping].\n\nYou may already be familiar with the [`source-map`][source-map] package's `SourceMapGenerator`. This\nprovides the same `addMapping` and `setSourceContent` API.\n\n## Installation\n\n```sh\nnpm install @jridgewell/gen-mapping\n```\n\n## Usage\n\n```typescript\nimport { GenMapping, addMapping, setSourceContent, toEncodedMap, toDecodedMap } from '@jridgewell/gen-mapping';\n\nconst map = new GenMapping({\n  file: 'output.js',\n  sourceRoot: 'https://example.com/',\n});\n\nsetSourceContent(map, 'input.js', `function foo() {}`);\n\naddMapping(map, {\n  // Lines start at line 1, columns at column 0.\n  generated: { line: 1, column: 0 },\n  source: 'input.js',\n  original: { line: 1, column: 0 },\n});\n\naddMapping(map, {\n  generated: { line: 1, column: 9 },\n  source: 'input.js',\n  original: { line: 1, column: 9 },\n  name: 'foo',\n});\n\nassert.deepEqual(toDecodedMap(map), {\n  version: 3,\n  file: 'output.js',\n  names: ['foo'],\n  sourceRoot: 'https://example.com/',\n  sources: ['input.js'],\n  sourcesContent: ['function foo() {}'],\n  mappings: [\n    [ [0, 0, 0, 0], [9, 0, 0, 9, 0] ]\n  ],\n});\n\nassert.deepEqual(toEncodedMap(map), {\n  version: 3,\n  file: 'output.js',\n  names: ['foo'],\n  sourceRoot: 'https://example.com/',\n  sources: ['input.js'],\n  sourcesContent: ['function foo() {}'],\n  mappings: 'AAAA,SAASA',\n});\n```\n\n### Smaller Sourcemaps\n\nNot everything needs to be added to a sourcemap, and needless markings can cause signficantly\nlarger file sizes. `gen-mapping` exposes `maybeAddSegment`/`maybeAddMapping` APIs that will\nintelligently determine if this marking adds useful information. If not, the marking will be\nskipped.\n\n```typescript\nimport { maybeAddMapping } from '@jridgewell/gen-mapping';\n\nconst map = new GenMapping();\n\n// Adding a sourceless marking at the beginning of a line isn't useful.\nmaybeAddMapping(map, {\n  generated: { line: 1, column: 0 },\n});\n\n// Adding a new source marking is useful.\nmaybeAddMapping(map, {\n  generated: { line: 1, column: 0 },\n  source: 'input.js',\n  original: { line: 1, column: 0 },\n});\n\n// But adding another marking pointing to the exact same original location isn't, even if the\n// generated column changed.\nmaybeAddMapping(map, {\n  generated: { line: 1, column: 9 },\n  source: 'input.js',\n  original: { line: 1, column: 0 },\n});\n\nassert.deepEqual(toEncodedMap(map), {\n  version: 3,\n  names: [],\n  sources: ['input.js'],\n  sourcesContent: [null],\n  mappings: 'AAAA',\n});\n```\n\n## Benchmarks\n\n```\nnode v18.0.0\n\namp.js.map\nMemory Usage:\ngen-mapping: addSegment      5852872 bytes\ngen-mapping: addMapping      7716042 bytes\nsource-map-js                6143250 bytes\nsource-map-0.6.1             6124102 bytes\nsource-map-0.8.0             6121173 bytes\nSmallest memory usage is gen-mapping: addSegment\n\nAdding speed:\ngen-mapping:      addSegment x 441 ops/sec ±2.07% (90 runs sampled)\ngen-mapping:      addMapping x 350 ops/sec ±2.40% (86 runs sampled)\nsource-map-js:    addMapping x 169 ops/sec ±2.42% (80 runs sampled)\nsource-map-0.6.1: addMapping x 167 ops/sec ±2.56% (80 runs sampled)\nsource-map-0.8.0: addMapping x 168 ops/sec ±2.52% (80 runs sampled)\nFastest is gen-mapping:      addSegment\n\nGenerate speed:\ngen-mapping:      decoded output x 150,824,370 ops/sec ±0.07% (102 runs sampled)\ngen-mapping:      encoded output x 663 ops/sec ±0.22% (98 runs sampled)\nsource-map-js:    encoded output x 197 ops/sec ±0.45% (84 runs sampled)\nsource-map-0.6.1: encoded output x 198 ops/sec ±0.33% (85 runs sampled)\nsource-map-0.8.0: encoded output x 197 ops/sec ±0.06% (93 runs sampled)\nFastest is gen-mapping:      decoded output\n\n\n***\n\n\nbabel.min.js.map\nMemory Usage:\ngen-mapping: addSegment     37578063 bytes\ngen-mapping: addMapping     37212897 bytes\nsource-map-js               47638527 bytes\nsource-map-0.6.1            47690503 bytes\nsource-map-0.8.0            47470188 bytes\nSmallest memory usage is gen-mapping: addMapping\n\nAdding speed:\ngen-mapping:      addSegment x 31.05 ops/sec ±8.31% (43 runs sampled)\ngen-mapping:      addMapping x 29.83 ops/sec ±7.36% (51 runs sampled)\nsource-map-js:    addMapping x 20.73 ops/sec ±6.22% (38 runs sampled)\nsource-map-0.6.1: addMapping x 20.03 ops/sec ±10.51% (38 runs sampled)\nsource-map-0.8.0: addMapping x 19.30 ops/sec ±8.27% (37 runs sampled)\nFastest is gen-mapping:      addSegment\n\nGenerate speed:\ngen-mapping:      decoded output x 381,379,234 ops/sec ±0.29% (96 runs sampled)\ngen-mapping:      encoded output x 95.15 ops/sec ±2.98% (72 runs sampled)\nsource-map-js:    encoded output x 15.20 ops/sec ±7.41% (33 runs sampled)\nsource-map-0.6.1: encoded output x 16.36 ops/sec ±10.46% (31 runs sampled)\nsource-map-0.8.0: encoded output x 16.06 ops/sec ±6.45% (31 runs sampled)\nFastest is gen-mapping:      decoded output\n\n\n***\n\n\npreact.js.map\nMemory Usage:\ngen-mapping: addSegment       416247 bytes\ngen-mapping: addMapping       419824 bytes\nsource-map-js                1024619 bytes\nsource-map-0.6.1             1146004 bytes\nsource-map-0.8.0             1113250 bytes\nSmallest memory usage is gen-mapping: addSegment\n\nAdding speed:\ngen-mapping:      addSegment x 13,755 ops/sec ±0.15% (98 runs sampled)\ngen-mapping:      addMapping x 13,013 ops/sec ±0.11% (101 runs sampled)\nsource-map-js:    addMapping x 4,564 ops/sec ±0.21% (98 runs sampled)\nsource-map-0.6.1: addMapping x 4,562 ops/sec ±0.11% (99 runs sampled)\nsource-map-0.8.0: addMapping x 4,593 ops/sec ±0.11% (100 runs sampled)\nFastest is gen-mapping:      addSegment\n\nGenerate speed:\ngen-mapping:      decoded output x 379,864,020 ops/sec ±0.23% (93 runs sampled)\ngen-mapping:      encoded output x 14,368 ops/sec ±4.07% (82 runs sampled)\nsource-map-js:    encoded output x 5,261 ops/sec ±0.21% (99 runs sampled)\nsource-map-0.6.1: encoded output x 5,124 ops/sec ±0.58% (99 runs sampled)\nsource-map-0.8.0: encoded output x 5,434 ops/sec ±0.33% (96 runs sampled)\nFastest is gen-mapping:      decoded output\n\n\n***\n\n\nreact.js.map\nMemory Usage:\ngen-mapping: addSegment       975096 bytes\ngen-mapping: addMapping      1102981 bytes\nsource-map-js                2918836 bytes\nsource-map-0.6.1             2885435 bytes\nsource-map-0.8.0             2874336 bytes\nSmallest memory usage is gen-mapping: addSegment\n\nAdding speed:\ngen-mapping:      addSegment x 4,772 ops/sec ±0.15% (100 runs sampled)\ngen-mapping:      addMapping x 4,456 ops/sec ±0.13% (97 runs sampled)\nsource-map-js:    addMapping x 1,618 ops/sec ±0.24% (97 runs sampled)\nsource-map-0.6.1: addMapping x 1,622 ops/sec ±0.12% (99 runs sampled)\nsource-map-0.8.0: addMapping x 1,631 ops/sec ±0.12% (100 runs sampled)\nFastest is gen-mapping:      addSegment\n\nGenerate speed:\ngen-mapping:      decoded output x 379,107,695 ops/sec ±0.07% (99 runs sampled)\ngen-mapping:      encoded output x 5,421 ops/sec ±1.60% (89 runs sampled)\nsource-map-js:    encoded output x 2,113 ops/sec ±1.81% (98 runs sampled)\nsource-map-0.6.1: encoded output x 2,126 ops/sec ±0.10% (100 runs sampled)\nsource-map-0.8.0: encoded output x 2,176 ops/sec ±0.39% (98 runs sampled)\nFastest is gen-mapping:      decoded output\n```\n\n[source-map]: https://www.npmjs.com/package/source-map\n[trace-mapping]: https://github.com/jridgewell/trace-mapping\n\"/dist/types/sourcemap-segment.d.ts\u00029declare type GeneratedColumn = number;\ndeclare type SourcesIndex = number;\ndeclare type SourceLine = number;\ndeclare type SourceColumn = number;\ndeclare type NamesIndex = number;\nexport declare type SourceMapSegment = [GeneratedColumn] | [GeneratedColumn, SourcesIndex, SourceLine, SourceColumn] | [GeneratedColumn, SourcesIndex, SourceLine, SourceColumn, NamesIndex];\nexport declare const COLUMN = 0;\nexport declare const SOURCES_INDEX = 1;\nexport declare const SOURCE_LINE = 2;\nexport declare const SOURCE_COLUMN = 3;\nexport declare const NAMES_INDEX = 4;\nexport {};\n/dist/gen-mapping.mjs.mapS{\"version\":3,\"file\":\"gen-mapping.mjs\",\"sources\":[\"../src/sourcemap-segment.ts\",\"../src/gen-mapping.ts\"],\"sourcesContent\":[\"type GeneratedColumn = number;\\ntype SourcesIndex = number;\\ntype SourceLine = number;\\ntype SourceColumn = number;\\ntype NamesIndex = number;\\n\\nexport type SourceMapSegment =\\n  | [GeneratedColumn]\\n  | [GeneratedColumn, SourcesIndex, SourceLine, SourceColumn]\\n  | [GeneratedColumn, SourcesIndex, SourceLine, SourceColumn, NamesIndex];\\n\\nexport const COLUMN = 0;\\nexport const SOURCES_INDEX = 1;\\nexport const SOURCE_LINE = 2;\\nexport const SOURCE_COLUMN = 3;\\nexport const NAMES_INDEX = 4;\\n\",\"import { SetArray, put } from '@jridgewell/set-array';\\nimport { encode } from '@jridgewell/sourcemap-codec';\\nimport { TraceMap, decodedMappings } from '@jridgewell/trace-mapping';\\n\\nimport {\\n  COLUMN,\\n  SOURCES_INDEX,\\n  SOURCE_LINE,\\n  SOURCE_COLUMN,\\n  NAMES_INDEX,\\n} from './sourcemap-segment';\\n\\nimport type { SourceMapInput } from '@jridgewell/trace-mapping';\\nimport type { SourceMapSegment } from './sourcemap-segment';\\nimport type { DecodedSourceMap, EncodedSourceMap, Pos, Mapping } from './types';\\n\\nexport type { DecodedSourceMap, EncodedSourceMap, Mapping };\\n\\nexport type Options = {\\n  file?: string | null;\\n  sourceRoot?: string | null;\\n};\\n\\nconst NO_NAME = -1;\\n\\n/**\\n * A low-level API to associate a generated position with an original source position. Line and\\n * column here are 0-based, unlike `addMapping`.\\n */\\nexport let addSegment: {\\n  (\\n    map: GenMapping,\\n    genLine: number,\\n    genColumn: number,\\n    source?: null,\\n    sourceLine?: null,\\n    sourceColumn?: null,\\n    name?: null,\\n    content?: null,\\n  ): void;\\n  (\\n    map: GenMapping,\\n    genLine: number,\\n    genColumn: number,\\n    source: string,\\n    sourceLine: number,\\n    sourceColumn: number,\\n    name?: null,\\n    content?: string | null,\\n  ): void;\\n  (\\n    map: GenMapping,\\n    genLine: number,\\n    genColumn: number,\\n    source: string,\\n    sourceLine: number,\\n    sourceColumn: number,\\n    name: string,\\n    content?: string | null,\\n  ): void;\\n};\\n\\n/**\\n * A high-level API to associate a generated position with an original source position. Line is\\n * 1-based, but column is 0-based, due to legacy behavior in `source-map` library.\\n */\\nexport let addMapping: {\\n  (\\n    map: GenMapping,\\n    mapping: {\\n      generated: Pos;\\n      source?: null;\\n      original?: null;\\n      name?: null;\\n      content?: null;\\n    },\\n  ): void;\\n  (\\n    map: GenMapping,\\n    mapping: {\\n      generated: Pos;\\n      source: string;\\n      original: Pos;\\n      name?: null;\\n      content?: string | null;\\n    },\\n  ): void;\\n  (\\n    map: GenMapping,\\n    mapping: {\\n      generated: Pos;\\n      source: string;\\n      original: Pos;\\n      name: string;\\n      content?: string | null;\\n    },\\n  ): void;\\n};\\n\\n/**\\n * Same as `addSegment`, but will only add the segment if it generates useful information in the\\n * resulting map. This only works correctly if segments are added **in order**, meaning you should\\n * not add a segment with a lower generated line/column than one that came before.\\n */\\nexport let maybeAddSegment: typeof addSegment;\\n\\n/**\\n * Same as `addMapping`, but will only add the mapping if it generates useful information in the\\n * resulting map. This only works correctly if mappings are added **in order**, meaning you should\\n * not add a mapping with a lower generated line/column than one that came before.\\n */\\nexport let maybeAddMapping: typeof addMapping;\\n\\n/**\\n * Adds/removes the content of the source file to the source map.\\n */\\nexport let setSourceContent: (map: GenMapping, source: string, content: string | null) => void;\\n\\n/**\\n * Returns a sourcemap object (with decoded mappings) suitable for passing to a library that expects\\n * a sourcemap, or to JSON.stringify.\\n */\\nexport let toDecodedMap: (map: GenMapping) => DecodedSourceMap;\\n\\n/**\\n * Returns a sourcemap object (with encoded mappings) suitable for passing to a library that expects\\n * a sourcemap, or to JSON.stringify.\\n */\\nexport let toEncodedMap: (map: GenMapping) => EncodedSourceMap;\\n\\n/**\\n * Constructs a new GenMapping, using the already present mappings of the input.\\n */\\nexport let fromMap: (input: SourceMapInput) => GenMapping;\\n\\n/**\\n * Returns an array of high-level mapping objects for every recorded segment, which could then be\\n * passed to the `source-map` library.\\n */\\nexport let allMappings: (map: GenMapping) => Mapping[];\\n\\n// This split declaration is only so that terser can elminiate the static initialization block.\\nlet addSegmentInternal: <S extends string | null | undefined>(\\n  skipable: boolean,\\n  map: GenMapping,\\n  genLine: number,\\n  genColumn: number,\\n  source: S,\\n  sourceLine: S extends string ? number : null | undefined,\\n  sourceColumn: S extends string ? number : null | undefined,\\n  name: S extends string ? string | null | undefined : null | undefined,\\n  content: S extends string ? string | null | undefined : null | undefined,\\n) => void;\\n\\n/**\\n * Provides the state to generate a sourcemap.\\n */\\nexport class GenMapping {\\n  private _names = new SetArray();\\n  private _sources = new SetArray();\\n  private _sourcesContent: (string | null)[] = [];\\n  private _mappings: SourceMapSegment[][] = [];\\n  declare file: string | null | undefined;\\n  declare sourceRoot: string | null | undefined;\\n\\n  constructor({ file, sourceRoot }: Options = {}) {\\n    this.file = file;\\n    this.sourceRoot = sourceRoot;\\n  }\\n\\n  static {\\n    addSegment = (map, genLine, genColumn, source, sourceLine, sourceColumn, name, content) => {\\n      return addSegmentInternal(\\n        false,\\n        map,\\n        genLine,\\n        genColumn,\\n        source,\\n        sourceLine,\\n        sourceColumn,\\n        name,\\n        content,\\n      );\\n    };\\n\\n    maybeAddSegment = (\\n      map,\\n      genLine,\\n      genColumn,\\n      source,\\n      sourceLine,\\n      sourceColumn,\\n      name,\\n      content,\\n    ) => {\\n      return addSegmentInternal(\\n        true,\\n        map,\\n        genLine,\\n        genColumn,\\n        source,\\n        sourceLine,\\n        sourceColumn,\\n        name,\\n        content,\\n      );\\n    };\\n\\n    addMapping = (map, mapping) => {\\n      return addMappingInternal(false, map, mapping as Parameters<typeof addMappingInternal>[2]);\\n    };\\n\\n    maybeAddMapping = (map, mapping) => {\\n      return addMappingInternal(true, map, mapping as Parameters<typeof addMappingInternal>[2]);\\n    };\\n\\n    setSourceContent = (map, source, content) => {\\n      const { _sources: sources, _sourcesContent: sourcesContent } = map;\\n      sourcesContent[put(sources, source)] = content;\\n    };\\n\\n    toDecodedMap = (map) => {\\n      const {\\n        file,\\n        sourceRoot,\\n        _mappings: mappings,\\n        _sources: sources,\\n        _sourcesContent: sourcesContent,\\n        _names: names,\\n      } = map;\\n      removeEmptyFinalLines(mappings);\\n\\n      return {\\n        version: 3,\\n        file: file || undefined,\\n        names: names.array,\\n        sourceRoot: sourceRoot || undefined,\\n        sources: sources.array,\\n        sourcesContent,\\n        mappings,\\n      };\\n    };\\n\\n    toEncodedMap = (map) => {\\n      const decoded = toDecodedMap(map);\\n      return {\\n        ...decoded,\\n        mappings: encode(decoded.mappings as SourceMapSegment[][]),\\n      };\\n    };\\n\\n    allMappings = (map) => {\\n      const out: Mapping[] = [];\\n      const { _mappings: mappings, _sources: sources, _names: names } = map;\\n\\n      for (let i = 0; i < mappings.length; i++) {\\n        const line = mappings[i];\\n        for (let j = 0; j < line.length; j++) {\\n          const seg = line[j];\\n\\n          const generated = { line: i + 1, column: seg[COLUMN] };\\n          let source: string | undefined = undefined;\\n          let original: Pos | undefined = undefined;\\n          let name: string | undefined = undefined;\\n\\n          if (seg.length !== 1) {\\n            source = sources.array[seg[SOURCES_INDEX]];\\n            original = { line: seg[SOURCE_LINE] + 1, column: seg[SOURCE_COLUMN] };\\n\\n            if (seg.length === 5) name = names.array[seg[NAMES_INDEX]];\\n          }\\n\\n          out.push({ generated, source, original, name } as Mapping);\\n        }\\n      }\\n\\n      return out;\\n    };\\n\\n    fromMap = (input) => {\\n      const map = new TraceMap(input);\\n      const gen = new GenMapping({ file: map.file, sourceRoot: map.sourceRoot });\\n\\n      putAll(gen._names, map.names);\\n      putAll(gen._sources, map.sources as string[]);\\n      gen._sourcesContent = map.sourcesContent || map.sources.map(() => null);\\n      gen._mappings = decodedMappings(map) as GenMapping['_mappings'];\\n\\n      return gen;\\n    };\\n\\n    // Internal helpers\\n    addSegmentInternal = (\\n      skipable,\\n      map,\\n      genLine,\\n      genColumn,\\n      source,\\n      sourceLine,\\n      sourceColumn,\\n      name,\\n      content,\\n    ) => {\\n      const {\\n        _mappings: mappings,\\n        _sources: sources,\\n        _sourcesContent: sourcesContent,\\n        _names: names,\\n      } = map;\\n      const line = getLine(mappings, genLine);\\n      const index = getColumnIndex(line, genColumn);\\n\\n      if (!source) {\\n        if (skipable && skipSourceless(line, index)) return;\\n        return insert(line, index, [genColumn]);\\n      }\\n\\n      // Sigh, TypeScript can't figure out sourceLine and sourceColumn aren't nullish if source\\n      // isn't nullish.\\n      assert<number>(sourceLine);\\n      assert<number>(sourceColumn);\\n\\n      const sourcesIndex = put(sources, source);\\n      const namesIndex = name ? put(names, name) : NO_NAME;\\n      if (sourcesIndex === sourcesContent.length) sourcesContent[sourcesIndex] = content ?? null;\\n\\n      if (skipable && skipSource(line, index, sourcesIndex, sourceLine, sourceColumn, namesIndex)) {\\n        return;\\n      }\\n\\n      return insert(\\n        line,\\n        index,\\n        name\\n          ? [genColumn, sourcesIndex, sourceLine, sourceColumn, namesIndex]\\n          : [genColumn, sourcesIndex, sourceLine, sourceColumn],\\n      );\\n    };\\n  }\\n}\\n\\nfunction assert<T>(_val: unknown): asserts _val is T {\\n  // noop.\\n}\\n\\nfunction getLine(mappings: SourceMapSegment[][], index: number): SourceMapSegment[] {\\n  for (let i = mappings.length; i <= index; i++) {\\n    mappings[i] = [];\\n  }\\n  return mappings[index];\\n}\\n\\nfunction getColumnIndex(line: SourceMapSegment[], genColumn: number): number {\\n  let index = line.length;\\n  for (let i = index - 1; i >= 0; index = i--) {\\n    const current = line[i];\\n    if (genColumn >= current[COLUMN]) break;\\n  }\\n  return index;\\n}\\n\\nfunction insert<T>(array: T[], index: number, value: T) {\\n  for (let i = array.length; i > index; i--) {\\n    array[i] = array[i - 1];\\n  }\\n  array[index] = value;\\n}\\n\\nfunction removeEmptyFinalLines(mappings: SourceMapSegment[][]) {\\n  const { length } = mappings;\\n  let len = length;\\n  for (let i = len - 1; i >= 0; len = i, i--) {\\n    if (mappings[i].length > 0) break;\\n  }\\n  if (len < length) mappings.length = len;\\n}\\n\\nfunction putAll(strarr: SetArray, array: string[]) {\\n  for (let i = 0; i < array.length; i++) put(strarr, array[i]);\\n}\\n\\nfunction skipSourceless(line: SourceMapSegment[], index: number): boolean {\\n  // The start of a line is already sourceless, so adding a sourceless segment to the beginning\\n  // doesn't generate any useful information.\\n  if (index === 0) return true;\\n\\n  const prev = line[index - 1];\\n  // If the previous segment is also sourceless, then adding another sourceless segment doesn't\\n  // genrate any new information. Else, this segment will end the source/named segment and point to\\n  // a sourceless position, which is useful.\\n  return prev.length === 1;\\n}\\n\\nfunction skipSource(\\n  line: SourceMapSegment[],\\n  index: number,\\n  sourcesIndex: number,\\n  sourceLine: number,\\n  sourceColumn: number,\\n  namesIndex: number,\\n): boolean {\\n  // A source/named segment at the start of a line gives position at that genColumn\\n  if (index === 0) return false;\\n\\n  const prev = line[index - 1];\\n\\n  // If the previous segment is sourceless, then we're transitioning to a source.\\n  if (prev.length === 1) return false;\\n\\n  // If the previous segment maps to the exact same source position, then this segment doesn't\\n  // provide any new position information.\\n  return (\\n    sourcesIndex === prev[SOURCES_INDEX] &&\\n    sourceLine === prev[SOURCE_LINE] &&\\n    sourceColumn === prev[SOURCE_COLUMN] &&\\n    namesIndex === (prev.length === 5 ? prev[NAMES_INDEX] : NO_NAME)\\n  );\\n}\\n\\nfunction addMappingInternal<S extends string | null | undefined>(\\n  skipable: boolean,\\n  map: GenMapping,\\n  mapping: {\\n    generated: Pos;\\n    source: S;\\n    original: S extends string ? Pos : null | undefined;\\n    name: S extends string ? string | null | undefined : null | undefined;\\n    content: S extends string ? string | null | undefined : null | undefined;\\n  },\\n) {\\n  const { generated, source, original, name, content } = mapping;\\n  if (!source) {\\n    return addSegmentInternal(\\n      skipable,\\n      map,\\n      generated.line - 1,\\n      generated.column,\\n      null,\\n      null,\\n      null,\\n      null,\\n      null,\\n    );\\n  }\\n  const s: string = source;\\n  assert<Pos>(original);\\n  return addSegmentInternal(\\n    skipable,\\n    map,\\n    generated.line - 1,\\n    generated.column,\\n    s,\\n    original.line - 1,\\n    original.column,\\n    name,\\n    content,\\n  );\\n}\\n\"],\"names\":[],\"mappings\":\"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\"}/package.json\t[{\n  \"name\": \"@jridgewell/gen-mapping\",\n  \"version\": \"0.3.2\",\n  \"description\": \"Generate source maps\",\n  \"keywords\": [\n    \"source\",\n    \"map\"\n  ],\n  \"author\": \"Justin Ridgewell <justin@ridgewell.name>\",\n  \"license\": \"MIT\",\n  \"repository\": \"https://github.com/jridgewell/gen-mapping\",\n  \"main\": \"dist/gen-mapping.umd.js\",\n  \"module\": \"dist/gen-mapping.mjs\",\n  \"typings\": \"dist/types/gen-mapping.d.ts\",\n  \"exports\": {\n    \".\": [\n      {\n        \"types\": \"./dist/types/gen-mapping.d.ts\",\n        \"browser\": \"./dist/gen-mapping.umd.js\",\n        \"require\": \"./dist/gen-mapping.umd.js\",\n        \"import\": \"./dist/gen-mapping.mjs\"\n      },\n      \"./dist/gen-mapping.umd.js\"\n    ],\n    \"./package.json\": \"./package.json\"\n  },\n  \"files\": [\n    \"dist\",\n    \"src\"\n  ],\n  \"engines\": {\n    \"node\": \">=6.0.0\"\n  },\n  \"scripts\": {\n    \"benchmark\": \"run-s build:rollup benchmark:*\",\n    \"benchmark:install\": \"cd benchmark && npm install\",\n    \"benchmark:only\": \"node benchmark/index.mjs\",\n    \"prebuild\": \"rm -rf dist\",\n    \"build\": \"run-s -n build:*\",\n    \"build:rollup\": \"rollup -c rollup.config.js\",\n    \"build:ts\": \"tsc --project tsconfig.build.json\",\n    \"lint\": \"run-s -n lint:*\",\n    \"lint:prettier\": \"npm run test:lint:prettier -- --write\",\n    \"lint:ts\": \"npm run test:lint:ts -- --fix\",\n    \"pretest\": \"run-s build:rollup\",\n    \"test\": \"run-s -n test:lint test:coverage\",\n    \"test:debug\": \"mocha --inspect-brk\",\n    \"test:lint\": \"run-s -n test:lint:*\",\n    \"test:lint:prettier\": \"prettier --check '{src,test}/**/*.ts'\",\n    \"test:lint:ts\": \"eslint '{src,test}/**/*.ts'\",\n    \"test:only\": \"mocha\",\n    \"test:coverage\": \"c8 mocha\",\n    \"test:watch\": \"run-p 'build:rollup -- --watch' 'test:only -- --watch'\",\n    \"prepublishOnly\": \"npm run preversion\",\n    \"preversion\": \"run-s test build\"\n  },\n  \"devDependencies\": {\n    \"@rollup/plugin-typescript\": \"8.3.2\",\n    \"@types/mocha\": \"9.1.1\",\n    \"@types/node\": \"17.0.29\",\n    \"@typescript-eslint/eslint-plugin\": \"5.21.0\",\n    \"@typescript-eslint/parser\": \"5.21.0\",\n    \"benchmark\": \"2.1.4\",\n    \"c8\": \"7.11.2\",\n    \"eslint\": \"8.14.0\",\n    \"eslint-config-prettier\": \"8.5.0\",\n    \"mocha\": \"9.2.2\",\n    \"npm-run-all\": \"4.1.5\",\n    \"prettier\": \"2.6.2\",\n    \"rollup\": \"2.70.2\",\n    \"typescript\": \"4.6.3\"\n  },\n  \"dependencies\": {\n    \"@jridgewell/set-array\": \"^1.0.1\",\n    \"@jridgewell/sourcemap-codec\": \"^1.4.10\",\n    \"@jridgewell/trace-mapping\": \"^0.3.9\"\n  }\n}\n/dist/gen-mapping.mjs#import { SetArray, put } from '@jridgewell/set-array';\nimport { encode } from '@jridgewell/sourcemap-codec';\nimport { TraceMap, decodedMappings } from '@jridgewell/trace-mapping';\n\nconst COLUMN = 0;\nconst SOURCES_INDEX = 1;\nconst SOURCE_LINE = 2;\nconst SOURCE_COLUMN = 3;\nconst NAMES_INDEX = 4;\n\nconst NO_NAME = -1;\n/**\n * A low-level API to associate a generated position with an original source position. Line and\n * column here are 0-based, unlike `addMapping`.\n */\nlet addSegment;\n/**\n * A high-level API to associate a generated position with an original source position. Line is\n * 1-based, but column is 0-based, due to legacy behavior in `source-map` library.\n */\nlet addMapping;\n/**\n * Same as `addSegment`, but will only add the segment if it generates useful information in the\n * resulting map. This only works correctly if segments are added **in order**, meaning you should\n * not add a segment with a lower generated line/column than one that came before.\n */\nlet maybeAddSegment;\n/**\n * Same as `addMapping`, but will only add the mapping if it generates useful information in the\n * resulting map. This only works correctly if mappings are added **in order**, meaning you should\n * not add a mapping with a lower generated line/column than one that came before.\n */\nlet maybeAddMapping;\n/**\n * Adds/removes the content of the source file to the source map.\n */\nlet setSourceContent;\n/**\n * Returns a sourcemap object (with decoded mappings) suitable for passing to a library that expects\n * a sourcemap, or to JSON.stringify.\n */\nlet toDecodedMap;\n/**\n * Returns a sourcemap object (with encoded mappings) suitable for passing to a library that expects\n * a sourcemap, or to JSON.stringify.\n */\nlet toEncodedMap;\n/**\n * Constructs a new GenMapping, using the already present mappings of the input.\n */\nlet fromMap;\n/**\n * Returns an array of high-level mapping objects for every recorded segment, which could then be\n * passed to the `source-map` library.\n */\nlet allMappings;\n// This split declaration is only so that terser can elminiate the static initialization block.\nlet addSegmentInternal;\n/**\n * Provides the state to generate a sourcemap.\n */\nclass GenMapping {\n    constructor({ file, sourceRoot } = {}) {\n        this._names = new SetArray();\n        this._sources = new SetArray();\n        this._sourcesContent = [];\n        this._mappings = [];\n        this.file = file;\n        this.sourceRoot = sourceRoot;\n    }\n}\n(() => {\n    addSegment = (map, genLine, genColumn, source, sourceLine, sourceColumn, name, content) => {\n        return addSegmentInternal(false, map, genLine, genColumn, source, sourceLine, sourceColumn, name, content);\n    };\n    maybeAddSegment = (map, genLine, genColumn, source, sourceLine, sourceColumn, name, content) => {\n        return addSegmentInternal(true, map, genLine, genColumn, source, sourceLine, sourceColumn, name, content);\n    };\n    addMapping = (map, mapping) => {\n        return addMappingInternal(false, map, mapping);\n    };\n    maybeAddMapping = (map, mapping) => {\n        return addMappingInternal(true, map, mapping);\n    };\n    setSourceContent = (map, source, content) => {\n        const { _sources: sources, _sourcesContent: sourcesContent } = map;\n        sourcesContent[put(sources, source)] = content;\n    };\n    toDecodedMap = (map) => {\n        const { file, sourceRoot, _mappings: mappings, _sources: sources, _sourcesContent: sourcesContent, _names: names, } = map;\n        removeEmptyFinalLines(mappings);\n        return {\n            version: 3,\n            file: file || undefined,\n            names: names.array,\n            sourceRoot: sourceRoot || undefined,\n            sources: sources.array,\n            sourcesContent,\n            mappings,\n        };\n    };\n    toEncodedMap = (map) => {\n        const decoded = toDecodedMap(map);\n        return Object.assign(Object.assign({}, decoded), { mappings: encode(decoded.mappings) });\n    };\n    allMappings = (map) => {\n        const out = [];\n        const { _mappings: mappings, _sources: sources, _names: names } = map;\n        for (let i = 0; i < mappings.length; i++) {\n            const line = mappings[i];\n            for (let j = 0; j < line.length; j++) {\n                const seg = line[j];\n                const generated = { line: i + 1, column: seg[COLUMN] };\n                let source = undefined;\n                let original = undefined;\n                let name = undefined;\n                if (seg.length !== 1) {\n                    source = sources.array[seg[SOURCES_INDEX]];\n                    original = { line: seg[SOURCE_LINE] + 1, column: seg[SOURCE_COLUMN] };\n                    if (seg.length === 5)\n                        name = names.array[seg[NAMES_INDEX]];\n                }\n                out.push({ generated, source, original, name });\n            }\n        }\n        return out;\n    };\n    fromMap = (input) => {\n        const map = new TraceMap(input);\n        const gen = new GenMapping({ file: map.file, sourceRoot: map.sourceRoot });\n        putAll(gen._names, map.names);\n        putAll(gen._sources, map.sources);\n        gen._sourcesContent = map.sourcesContent || map.sources.map(() => null);\n        gen._mappings = decodedMappings(map);\n        return gen;\n    };\n    // Internal helpers\n    addSegmentInternal = (skipable, map, genLine, genColumn, source, sourceLine, sourceColumn, name, content) => {\n        const { _mappings: mappings, _sources: sources, _sourcesContent: sourcesContent, _names: names, } = map;\n        const line = getLine(mappings, genLine);\n        const index = getColumnIndex(line, genColumn);\n        if (!source) {\n            if (skipable && skipSourceless(line, index))\n                return;\n            return insert(line, index, [genColumn]);\n        }\n        const sourcesIndex = put(sources, source);\n        const namesIndex = name ? put(names, name) : NO_NAME;\n        if (sourcesIndex === sourcesContent.length)\n            sourcesContent[sourcesIndex] = content !== null && content !== void 0 ? content : null;\n        if (skipable && skipSource(line, index, sourcesIndex, sourceLine, sourceColumn, namesIndex)) {\n            return;\n        }\n        return insert(line, index, name\n            ? [genColumn, sourcesIndex, sourceLine, sourceColumn, namesIndex]\n            : [genColumn, sourcesIndex, sourceLine, sourceColumn]);\n    };\n})();\nfunction getLine(mappings, index) {\n    for (let i = mappings.length; i <= index; i++) {\n        mappings[i] = [];\n    }\n    return mappings[index];\n}\nfunction getColumnIndex(line, genColumn) {\n    let index = line.length;\n    for (let i = index - 1; i >= 0; index = i--) {\n        const current = line[i];\n        if (genColumn >= current[COLUMN])\n            break;\n    }\n    return index;\n}\nfunction insert(array, index, value) {\n    for (let i = array.length; i > index; i--) {\n        array[i] = array[i - 1];\n    }\n    array[index] = value;\n}\nfunction removeEmptyFinalLines(mappings) {\n    const { length } = mappings;\n    let len = length;\n    for (let i = len - 1; i >= 0; len = i, i--) {\n        if (mappings[i].length > 0)\n            break;\n    }\n    if (len < length)\n        mappings.length = len;\n}\nfunction putAll(strarr, array) {\n    for (let i = 0; i < array.length; i++)\n        put(strarr, array[i]);\n}\nfunction skipSourceless(line, index) {\n    // The start of a line is already sourceless, so adding a sourceless segment to the beginning\n    // doesn't generate any useful information.\n    if (index === 0)\n        return true;\n    const prev = line[index - 1];\n    // If the previous segment is also sourceless, then adding another sourceless segment doesn't\n    // genrate any new information. Else, this segment will end the source/named segment and point to\n    // a sourceless position, which is useful.\n    return prev.length === 1;\n}\nfunction skipSource(line, index, sourcesIndex, sourceLine, sourceColumn, namesIndex) {\n    // A source/named segment at the start of a line gives position at that genColumn\n    if (index === 0)\n        return false;\n    const prev = line[index - 1];\n    // If the previous segment is sourceless, then we're transitioning to a source.\n    if (prev.length === 1)\n        return false;\n    // If the previous segment maps to the exact same source position, then this segment doesn't\n    // provide any new position information.\n    return (sourcesIndex === prev[SOURCES_INDEX] &&\n        sourceLine === prev[SOURCE_LINE] &&\n        sourceColumn === prev[SOURCE_COLUMN] &&\n        namesIndex === (prev.length === 5 ? prev[NAMES_INDEX] : NO_NAME));\n}\nfunction addMappingInternal(skipable, map, mapping) {\n    const { generated, source, original, name, content } = mapping;\n    if (!source) {\n        return addSegmentInternal(skipable, map, generated.line - 1, generated.column, null, null, null, null, null);\n    }\n    const s = source;\n    return addSegmentInternal(skipable, map, generated.line - 1, generated.column, s, original.line - 1, original.column, name, content);\n}\n\nexport { GenMapping, addMapping, addSegment, allMappings, fromMap, maybeAddMapping, maybeAddSegment, setSourceContent, toDecodedMap, toEncodedMap };\n//# sourceMappingURL=gen-mapping.mjs.map\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QGpyaWRnZXdlbGwvc291cmNlbWFwLWNvZGVjQDEuNC4xNA==",
    "content": "/dist/sourcemap-codec.umd.js\u0018(function (global, factory) {\n    typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n    typeof define === 'function' && define.amd ? define(['exports'], factory) :\n    (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.sourcemapCodec = {}));\n})(this, (function (exports) { 'use strict';\n\n    const comma = ','.charCodeAt(0);\n    const semicolon = ';'.charCodeAt(0);\n    const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n    const intToChar = new Uint8Array(64); // 64 possible chars.\n    const charToInt = new Uint8Array(128); // z is 122 in ASCII\n    for (let i = 0; i < chars.length; i++) {\n        const c = chars.charCodeAt(i);\n        intToChar[i] = c;\n        charToInt[c] = i;\n    }\n    // Provide a fallback for older environments.\n    const td = typeof TextDecoder !== 'undefined'\n        ? /* #__PURE__ */ new TextDecoder()\n        : typeof Buffer !== 'undefined'\n            ? {\n                decode(buf) {\n                    const out = Buffer.from(buf.buffer, buf.byteOffset, buf.byteLength);\n                    return out.toString();\n                },\n            }\n            : {\n                decode(buf) {\n                    let out = '';\n                    for (let i = 0; i < buf.length; i++) {\n                        out += String.fromCharCode(buf[i]);\n                    }\n                    return out;\n                },\n            };\n    function decode(mappings) {\n        const state = new Int32Array(5);\n        const decoded = [];\n        let index = 0;\n        do {\n            const semi = indexOf(mappings, index);\n            const line = [];\n            let sorted = true;\n            let lastCol = 0;\n            state[0] = 0;\n            for (let i = index; i < semi; i++) {\n                let seg;\n                i = decodeInteger(mappings, i, state, 0); // genColumn\n                const col = state[0];\n                if (col < lastCol)\n                    sorted = false;\n                lastCol = col;\n                if (hasMoreVlq(mappings, i, semi)) {\n                    i = decodeInteger(mappings, i, state, 1); // sourcesIndex\n                    i = decodeInteger(mappings, i, state, 2); // sourceLine\n                    i = decodeInteger(mappings, i, state, 3); // sourceColumn\n                    if (hasMoreVlq(mappings, i, semi)) {\n                        i = decodeInteger(mappings, i, state, 4); // namesIndex\n                        seg = [col, state[1], state[2], state[3], state[4]];\n                    }\n                    else {\n                        seg = [col, state[1], state[2], state[3]];\n                    }\n                }\n                else {\n                    seg = [col];\n                }\n                line.push(seg);\n            }\n            if (!sorted)\n                sort(line);\n            decoded.push(line);\n            index = semi + 1;\n        } while (index <= mappings.length);\n        return decoded;\n    }\n    function indexOf(mappings, index) {\n        const idx = mappings.indexOf(';', index);\n        return idx === -1 ? mappings.length : idx;\n    }\n    function decodeInteger(mappings, pos, state, j) {\n        let value = 0;\n        let shift = 0;\n        let integer = 0;\n        do {\n            const c = mappings.charCodeAt(pos++);\n            integer = charToInt[c];\n            value |= (integer & 31) << shift;\n            shift += 5;\n        } while (integer & 32);\n        const shouldNegate = value & 1;\n        value >>>= 1;\n        if (shouldNegate) {\n            value = -0x80000000 | -value;\n        }\n        state[j] += value;\n        return pos;\n    }\n    function hasMoreVlq(mappings, i, length) {\n        if (i >= length)\n            return false;\n        return mappings.charCodeAt(i) !== comma;\n    }\n    function sort(line) {\n        line.sort(sortComparator);\n    }\n    function sortComparator(a, b) {\n        return a[0] - b[0];\n    }\n    function encode(decoded) {\n        const state = new Int32Array(5);\n        const bufLength = 1024 * 16;\n        const subLength = bufLength - 36;\n        const buf = new Uint8Array(bufLength);\n        const sub = buf.subarray(0, subLength);\n        let pos = 0;\n        let out = '';\n        for (let i = 0; i < decoded.length; i++) {\n            const line = decoded[i];\n            if (i > 0) {\n                if (pos === bufLength) {\n                    out += td.decode(buf);\n                    pos = 0;\n                }\n                buf[pos++] = semicolon;\n            }\n            if (line.length === 0)\n                continue;\n            state[0] = 0;\n            for (let j = 0; j < line.length; j++) {\n                const segment = line[j];\n                // We can push up to 5 ints, each int can take at most 7 chars, and we\n                // may push a comma.\n                if (pos > subLength) {\n                    out += td.decode(sub);\n                    buf.copyWithin(0, subLength, pos);\n                    pos -= subLength;\n                }\n                if (j > 0)\n                    buf[pos++] = comma;\n                pos = encodeInteger(buf, pos, state, segment, 0); // genColumn\n                if (segment.length === 1)\n                    continue;\n                pos = encodeInteger(buf, pos, state, segment, 1); // sourcesIndex\n                pos = encodeInteger(buf, pos, state, segment, 2); // sourceLine\n                pos = encodeInteger(buf, pos, state, segment, 3); // sourceColumn\n                if (segment.length === 4)\n                    continue;\n                pos = encodeInteger(buf, pos, state, segment, 4); // namesIndex\n            }\n        }\n        return out + td.decode(buf.subarray(0, pos));\n    }\n    function encodeInteger(buf, pos, state, segment, j) {\n        const next = segment[j];\n        let num = next - state[j];\n        state[j] = next;\n        num = num < 0 ? (-num << 1) | 1 : num << 1;\n        do {\n            let clamped = num & 0b011111;\n            num >>>= 5;\n            if (num > 0)\n                clamped |= 0b100000;\n            buf[pos++] = intToChar[clamped];\n        } while (num > 0);\n        return pos;\n    }\n\n    exports.decode = decode;\n    exports.encode = encode;\n\n    Object.defineProperty(exports, '__esModule', { value: true });\n\n}));\n//# sourceMappingURL=sourcemap-codec.umd.js.map\n/README.md\u001a# sourcemap-codec\n\nEncode/decode the `mappings` property of a [sourcemap](https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit).\n\n\n## Why?\n\nSourcemaps are difficult to generate and manipulate, because the `mappings` property – the part that actually links the generated code back to the original source – is encoded using an obscure method called [Variable-length quantity](https://en.wikipedia.org/wiki/Variable-length_quantity). On top of that, each segment in the mapping contains offsets rather than absolute indices, which means that you can't look at a segment in isolation – you have to understand the whole sourcemap.\n\nThis package makes the process slightly easier.\n\n\n## Installation\n\n```bash\nnpm install sourcemap-codec\n```\n\n\n## Usage\n\n```js\nimport { encode, decode } from 'sourcemap-codec';\n\nvar decoded = decode( ';EAEEA,EAAE,EAAC,CAAE;ECQY,UACC' );\n\nassert.deepEqual( decoded, [\n\t// the first line (of the generated code) has no mappings,\n\t// as shown by the starting semi-colon (which separates lines)\n\t[],\n\n\t// the second line contains four (comma-separated) segments\n\t[\n\t\t// segments are encoded as you'd expect:\n\t\t// [ generatedCodeColumn, sourceIndex, sourceCodeLine, sourceCodeColumn, nameIndex ]\n\n\t\t// i.e. the first segment begins at column 2, and maps back to the second column\n\t\t// of the second line (both zero-based) of the 0th source, and uses the 0th\n\t\t// name in the `map.names` array\n\t\t[ 2, 0, 2, 2, 0 ],\n\n\t\t// the remaining segments are 4-length rather than 5-length,\n\t\t// because they don't map a name\n\t\t[ 4, 0, 2, 4 ],\n\t\t[ 6, 0, 2, 5 ],\n\t\t[ 7, 0, 2, 7 ]\n\t],\n\n\t// the final line contains two segments\n\t[\n\t\t[ 2, 1, 10, 19 ],\n\t\t[ 12, 1, 11, 20 ]\n\t]\n]);\n\nvar encoded = encode( decoded );\nassert.equal( encoded, ';EAEEA,EAAE,EAAC,CAAE;ECQY,UACC' );\n```\n\n## Benchmarks\n\n```\nnode v18.0.0\n\namp.js.map - 45120 segments\n\nDecode Memory Usage:\n@jridgewell/sourcemap-codec       5479160 bytes\nsourcemap-codec                   5659336 bytes\nsource-map-0.6.1                 17144440 bytes\nsource-map-0.8.0                  6867424 bytes\nSmallest memory usage is @jridgewell/sourcemap-codec\n\nDecode speed:\ndecode: @jridgewell/sourcemap-codec x 502 ops/sec ±1.03% (90 runs sampled)\ndecode: sourcemap-codec x 445 ops/sec ±0.97% (92 runs sampled)\ndecode: source-map-0.6.1 x 36.01 ops/sec ±1.64% (49 runs sampled)\ndecode: source-map-0.8.0 x 367 ops/sec ±0.04% (95 runs sampled)\nFastest is decode: @jridgewell/sourcemap-codec\n\nEncode Memory Usage:\n@jridgewell/sourcemap-codec       1261620 bytes\nsourcemap-codec                   9119248 bytes\nsource-map-0.6.1                  8968560 bytes\nsource-map-0.8.0                  8952952 bytes\nSmallest memory usage is @jridgewell/sourcemap-codec\n\nEncode speed:\nencode: @jridgewell/sourcemap-codec x 738 ops/sec ±0.42% (98 runs sampled)\nencode: sourcemap-codec x 238 ops/sec ±0.73% (88 runs sampled)\nencode: source-map-0.6.1 x 162 ops/sec ±0.43% (84 runs sampled)\nencode: source-map-0.8.0 x 191 ops/sec ±0.34% (90 runs sampled)\nFastest is encode: @jridgewell/sourcemap-codec\n\n\n***\n\n\nbabel.min.js.map - 347793 segments\n\nDecode Memory Usage:\n@jridgewell/sourcemap-codec      35338184 bytes\nsourcemap-codec                  35922736 bytes\nsource-map-0.6.1                 62366360 bytes\nsource-map-0.8.0                 44337416 bytes\nSmallest memory usage is @jridgewell/sourcemap-codec\n\nDecode speed:\ndecode: @jridgewell/sourcemap-codec x 40.35 ops/sec ±4.47% (54 runs sampled)\ndecode: sourcemap-codec x 36.76 ops/sec ±3.67% (51 runs sampled)\ndecode: source-map-0.6.1 x 4.44 ops/sec ±2.15% (16 runs sampled)\ndecode: source-map-0.8.0 x 59.35 ops/sec ±0.05% (78 runs sampled)\nFastest is decode: source-map-0.8.0\n\nEncode Memory Usage:\n@jridgewell/sourcemap-codec       7212604 bytes\nsourcemap-codec                  21421456 bytes\nsource-map-0.6.1                 25286888 bytes\nsource-map-0.8.0                 25498744 bytes\nSmallest memory usage is @jridgewell/sourcemap-codec\n\nEncode speed:\nencode: @jridgewell/sourcemap-codec x 112 ops/sec ±0.13% (84 runs sampled)\nencode: sourcemap-codec x 30.23 ops/sec ±2.76% (53 runs sampled)\nencode: source-map-0.6.1 x 19.43 ops/sec ±3.70% (37 runs sampled)\nencode: source-map-0.8.0 x 19.40 ops/sec ±3.26% (37 runs sampled)\nFastest is encode: @jridgewell/sourcemap-codec\n\n\n***\n\n\npreact.js.map - 1992 segments\n\nDecode Memory Usage:\n@jridgewell/sourcemap-codec        500272 bytes\nsourcemap-codec                    516864 bytes\nsource-map-0.6.1                  1596672 bytes\nsource-map-0.8.0                   517272 bytes\nSmallest memory usage is @jridgewell/sourcemap-codec\n\nDecode speed:\ndecode: @jridgewell/sourcemap-codec x 16,137 ops/sec ±0.17% (99 runs sampled)\ndecode: sourcemap-codec x 12,139 ops/sec ±0.13% (99 runs sampled)\ndecode: source-map-0.6.1 x 1,264 ops/sec ±0.12% (100 runs sampled)\ndecode: source-map-0.8.0 x 9,894 ops/sec ±0.08% (101 runs sampled)\nFastest is decode: @jridgewell/sourcemap-codec\n\nEncode Memory Usage:\n@jridgewell/sourcemap-codec        321026 bytes\nsourcemap-codec                    830832 bytes\nsource-map-0.6.1                   586608 bytes\nsource-map-0.8.0                   586680 bytes\nSmallest memory usage is @jridgewell/sourcemap-codec\n\nEncode speed:\nencode: @jridgewell/sourcemap-codec x 19,876 ops/sec ±0.78% (95 runs sampled)\nencode: sourcemap-codec x 6,983 ops/sec ±0.15% (100 runs sampled)\nencode: source-map-0.6.1 x 5,070 ops/sec ±0.12% (102 runs sampled)\nencode: source-map-0.8.0 x 5,641 ops/sec ±0.17% (100 runs sampled)\nFastest is encode: @jridgewell/sourcemap-codec\n\n\n***\n\n\nreact.js.map - 5726 segments\n\nDecode Memory Usage:\n@jridgewell/sourcemap-codec        734848 bytes\nsourcemap-codec                    954200 bytes\nsource-map-0.6.1                  2276432 bytes\nsource-map-0.8.0                   955488 bytes\nSmallest memory usage is @jridgewell/sourcemap-codec\n\nDecode speed:\ndecode: @jridgewell/sourcemap-codec x 5,723 ops/sec ±0.12% (98 runs sampled)\ndecode: sourcemap-codec x 4,555 ops/sec ±0.09% (101 runs sampled)\ndecode: source-map-0.6.1 x 437 ops/sec ±0.11% (93 runs sampled)\ndecode: source-map-0.8.0 x 3,441 ops/sec ±0.15% (100 runs sampled)\nFastest is decode: @jridgewell/sourcemap-codec\n\nEncode Memory Usage:\n@jridgewell/sourcemap-codec        638672 bytes\nsourcemap-codec                   1109840 bytes\nsource-map-0.6.1                  1321224 bytes\nsource-map-0.8.0                  1324448 bytes\nSmallest memory usage is @jridgewell/sourcemap-codec\n\nEncode speed:\nencode: @jridgewell/sourcemap-codec x 6,801 ops/sec ±0.48% (98 runs sampled)\nencode: sourcemap-codec x 2,533 ops/sec ±0.13% (101 runs sampled)\nencode: source-map-0.6.1 x 2,248 ops/sec ±0.08% (100 runs sampled)\nencode: source-map-0.8.0 x 2,303 ops/sec ±0.15% (100 runs sampled)\nFastest is encode: @jridgewell/sourcemap-codec\n```\n\n# License\n\nMIT\n /dist/sourcemap-codec.umd.js.map\u0018\u0001{\"version\":3,\"file\":\"sourcemap-codec.umd.js\",\"sources\":[\"../src/sourcemap-codec.ts\"],\"sourcesContent\":[null],\"names\":[],\"mappings\":\"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\"}/package.json\b{\n  \"name\": \"@jridgewell/sourcemap-codec\",\n  \"version\": \"1.4.14\",\n  \"description\": \"Encode/decode sourcemap mappings\",\n  \"keywords\": [\n    \"sourcemap\",\n    \"vlq\"\n  ],\n  \"main\": \"dist/sourcemap-codec.umd.js\",\n  \"module\": \"dist/sourcemap-codec.mjs\",\n  \"typings\": \"dist/types/sourcemap-codec.d.ts\",\n  \"files\": [\n    \"dist\",\n    \"src\"\n  ],\n  \"exports\": {\n    \".\": [\n      {\n        \"types\": \"./dist/types/sourcemap-codec.d.ts\",\n        \"browser\": \"./dist/sourcemap-codec.umd.js\",\n        \"import\": \"./dist/sourcemap-codec.mjs\",\n        \"require\": \"./dist/sourcemap-codec.umd.js\"\n      },\n      \"./dist/sourcemap-codec.umd.js\"\n    ],\n    \"./package.json\": \"./package.json\"\n  },\n  \"scripts\": {\n    \"benchmark\": \"run-s build:rollup benchmark:*\",\n    \"benchmark:install\": \"cd benchmark && npm install\",\n    \"benchmark:only\": \"node --expose-gc benchmark/index.js\",\n    \"build\": \"run-s -n build:*\",\n    \"build:rollup\": \"rollup -c rollup.config.js\",\n    \"build:ts\": \"tsc --project tsconfig.build.json\",\n    \"lint\": \"run-s -n lint:*\",\n    \"lint:prettier\": \"npm run test:lint:prettier -- --write\",\n    \"lint:ts\": \"npm run test:lint:ts -- --fix\",\n    \"prebuild\": \"rm -rf dist\",\n    \"prepublishOnly\": \"npm run preversion\",\n    \"preversion\": \"run-s test build\",\n    \"pretest\": \"run-s build:rollup\",\n    \"test\": \"run-s -n test:lint test:only\",\n    \"test:debug\": \"mocha --inspect-brk\",\n    \"test:lint\": \"run-s -n test:lint:*\",\n    \"test:lint:prettier\": \"prettier --check '{src,test}/**/*.ts'\",\n    \"test:lint:ts\": \"eslint '{src,test}/**/*.ts'\",\n    \"test:only\": \"mocha\",\n    \"test:coverage\": \"c8 mocha\",\n    \"test:watch\": \"mocha --watch\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/jridgewell/sourcemap-codec.git\"\n  },\n  \"author\": \"Rich Harris\",\n  \"license\": \"MIT\",\n  \"devDependencies\": {\n    \"@rollup/plugin-typescript\": \"8.3.0\",\n    \"@types/node\": \"17.0.15\",\n    \"@typescript-eslint/eslint-plugin\": \"5.10.0\",\n    \"@typescript-eslint/parser\": \"5.10.0\",\n    \"benchmark\": \"2.1.4\",\n    \"c8\": \"7.11.2\",\n    \"eslint\": \"8.7.0\",\n    \"eslint-config-prettier\": \"8.3.0\",\n    \"mocha\": \"9.2.0\",\n    \"npm-run-all\": \"4.1.5\",\n    \"prettier\": \"2.5.1\",\n    \"rollup\": \"2.64.0\",\n    \"source-map\": \"0.6.1\",\n    \"source-map-js\": \"1.0.2\",\n    \"sourcemap-codec\": \"1.4.8\",\n    \"typescript\": \"4.5.4\"\n  }\n}\n/LICENSE\u00040The MIT License\n\nCopyright (c) 2015 Rich Harris\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n/dist/sourcemap-codec.mjs\u0014const comma = ','.charCodeAt(0);\nconst semicolon = ';'.charCodeAt(0);\nconst chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\nconst intToChar = new Uint8Array(64); // 64 possible chars.\nconst charToInt = new Uint8Array(128); // z is 122 in ASCII\nfor (let i = 0; i < chars.length; i++) {\n    const c = chars.charCodeAt(i);\n    intToChar[i] = c;\n    charToInt[c] = i;\n}\n// Provide a fallback for older environments.\nconst td = typeof TextDecoder !== 'undefined'\n    ? /* #__PURE__ */ new TextDecoder()\n    : typeof Buffer !== 'undefined'\n        ? {\n            decode(buf) {\n                const out = Buffer.from(buf.buffer, buf.byteOffset, buf.byteLength);\n                return out.toString();\n            },\n        }\n        : {\n            decode(buf) {\n                let out = '';\n                for (let i = 0; i < buf.length; i++) {\n                    out += String.fromCharCode(buf[i]);\n                }\n                return out;\n            },\n        };\nfunction decode(mappings) {\n    const state = new Int32Array(5);\n    const decoded = [];\n    let index = 0;\n    do {\n        const semi = indexOf(mappings, index);\n        const line = [];\n        let sorted = true;\n        let lastCol = 0;\n        state[0] = 0;\n        for (let i = index; i < semi; i++) {\n            let seg;\n            i = decodeInteger(mappings, i, state, 0); // genColumn\n            const col = state[0];\n            if (col < lastCol)\n                sorted = false;\n            lastCol = col;\n            if (hasMoreVlq(mappings, i, semi)) {\n                i = decodeInteger(mappings, i, state, 1); // sourcesIndex\n                i = decodeInteger(mappings, i, state, 2); // sourceLine\n                i = decodeInteger(mappings, i, state, 3); // sourceColumn\n                if (hasMoreVlq(mappings, i, semi)) {\n                    i = decodeInteger(mappings, i, state, 4); // namesIndex\n                    seg = [col, state[1], state[2], state[3], state[4]];\n                }\n                else {\n                    seg = [col, state[1], state[2], state[3]];\n                }\n            }\n            else {\n                seg = [col];\n            }\n            line.push(seg);\n        }\n        if (!sorted)\n            sort(line);\n        decoded.push(line);\n        index = semi + 1;\n    } while (index <= mappings.length);\n    return decoded;\n}\nfunction indexOf(mappings, index) {\n    const idx = mappings.indexOf(';', index);\n    return idx === -1 ? mappings.length : idx;\n}\nfunction decodeInteger(mappings, pos, state, j) {\n    let value = 0;\n    let shift = 0;\n    let integer = 0;\n    do {\n        const c = mappings.charCodeAt(pos++);\n        integer = charToInt[c];\n        value |= (integer & 31) << shift;\n        shift += 5;\n    } while (integer & 32);\n    const shouldNegate = value & 1;\n    value >>>= 1;\n    if (shouldNegate) {\n        value = -0x80000000 | -value;\n    }\n    state[j] += value;\n    return pos;\n}\nfunction hasMoreVlq(mappings, i, length) {\n    if (i >= length)\n        return false;\n    return mappings.charCodeAt(i) !== comma;\n}\nfunction sort(line) {\n    line.sort(sortComparator);\n}\nfunction sortComparator(a, b) {\n    return a[0] - b[0];\n}\nfunction encode(decoded) {\n    const state = new Int32Array(5);\n    const bufLength = 1024 * 16;\n    const subLength = bufLength - 36;\n    const buf = new Uint8Array(bufLength);\n    const sub = buf.subarray(0, subLength);\n    let pos = 0;\n    let out = '';\n    for (let i = 0; i < decoded.length; i++) {\n        const line = decoded[i];\n        if (i > 0) {\n            if (pos === bufLength) {\n                out += td.decode(buf);\n                pos = 0;\n            }\n            buf[pos++] = semicolon;\n        }\n        if (line.length === 0)\n            continue;\n        state[0] = 0;\n        for (let j = 0; j < line.length; j++) {\n            const segment = line[j];\n            // We can push up to 5 ints, each int can take at most 7 chars, and we\n            // may push a comma.\n            if (pos > subLength) {\n                out += td.decode(sub);\n                buf.copyWithin(0, subLength, pos);\n                pos -= subLength;\n            }\n            if (j > 0)\n                buf[pos++] = comma;\n            pos = encodeInteger(buf, pos, state, segment, 0); // genColumn\n            if (segment.length === 1)\n                continue;\n            pos = encodeInteger(buf, pos, state, segment, 1); // sourcesIndex\n            pos = encodeInteger(buf, pos, state, segment, 2); // sourceLine\n            pos = encodeInteger(buf, pos, state, segment, 3); // sourceColumn\n            if (segment.length === 4)\n                continue;\n            pos = encodeInteger(buf, pos, state, segment, 4); // namesIndex\n        }\n    }\n    return out + td.decode(buf.subarray(0, pos));\n}\nfunction encodeInteger(buf, pos, state, segment, j) {\n    const next = segment[j];\n    let num = next - state[j];\n    state[j] = next;\n    num = num < 0 ? (-num << 1) | 1 : num << 1;\n    do {\n        let clamped = num & 0b011111;\n        num >>>= 5;\n        if (num > 0)\n            clamped |= 0b100000;\n        buf[pos++] = intToChar[clamped];\n    } while (num > 0);\n    return pos;\n}\n\nexport { decode, encode };\n//# sourceMappingURL=sourcemap-codec.mjs.map\n/dist/sourcemap-codec.mjs.map\u0017{\"version\":3,\"file\":\"sourcemap-codec.mjs\",\"sources\":[\"../src/sourcemap-codec.ts\"],\"sourcesContent\":[null],\"names\":[],\"mappings\":\"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\"}/src/sourcemap-codec.ts\u00154export type SourceMapSegment =\n  | [number]\n  | [number, number, number, number]\n  | [number, number, number, number, number];\nexport type SourceMapLine = SourceMapSegment[];\nexport type SourceMapMappings = SourceMapLine[];\n\nconst comma = ','.charCodeAt(0);\nconst semicolon = ';'.charCodeAt(0);\nconst chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\nconst intToChar = new Uint8Array(64); // 64 possible chars.\nconst charToInt = new Uint8Array(128); // z is 122 in ASCII\n\nfor (let i = 0; i < chars.length; i++) {\n  const c = chars.charCodeAt(i);\n  intToChar[i] = c;\n  charToInt[c] = i;\n}\n\n// Provide a fallback for older environments.\nconst td =\n  typeof TextDecoder !== 'undefined'\n    ? /* #__PURE__ */ new TextDecoder()\n    : typeof Buffer !== 'undefined'\n    ? {\n        decode(buf: Uint8Array) {\n          const out = Buffer.from(buf.buffer, buf.byteOffset, buf.byteLength);\n          return out.toString();\n        },\n      }\n    : {\n        decode(buf: Uint8Array) {\n          let out = '';\n          for (let i = 0; i < buf.length; i++) {\n            out += String.fromCharCode(buf[i]);\n          }\n          return out;\n        },\n      };\n\nexport function decode(mappings: string): SourceMapMappings {\n  const state: [number, number, number, number, number] = new Int32Array(5) as any;\n  const decoded: SourceMapMappings = [];\n\n  let index = 0;\n  do {\n    const semi = indexOf(mappings, index);\n    const line: SourceMapLine = [];\n    let sorted = true;\n    let lastCol = 0;\n    state[0] = 0;\n\n    for (let i = index; i < semi; i++) {\n      let seg: SourceMapSegment;\n\n      i = decodeInteger(mappings, i, state, 0); // genColumn\n      const col = state[0];\n      if (col < lastCol) sorted = false;\n      lastCol = col;\n\n      if (hasMoreVlq(mappings, i, semi)) {\n        i = decodeInteger(mappings, i, state, 1); // sourcesIndex\n        i = decodeInteger(mappings, i, state, 2); // sourceLine\n        i = decodeInteger(mappings, i, state, 3); // sourceColumn\n\n        if (hasMoreVlq(mappings, i, semi)) {\n          i = decodeInteger(mappings, i, state, 4); // namesIndex\n          seg = [col, state[1], state[2], state[3], state[4]];\n        } else {\n          seg = [col, state[1], state[2], state[3]];\n        }\n      } else {\n        seg = [col];\n      }\n\n      line.push(seg);\n    }\n\n    if (!sorted) sort(line);\n    decoded.push(line);\n    index = semi + 1;\n  } while (index <= mappings.length);\n\n  return decoded;\n}\n\nfunction indexOf(mappings: string, index: number): number {\n  const idx = mappings.indexOf(';', index);\n  return idx === -1 ? mappings.length : idx;\n}\n\nfunction decodeInteger(mappings: string, pos: number, state: SourceMapSegment, j: number): number {\n  let value = 0;\n  let shift = 0;\n  let integer = 0;\n\n  do {\n    const c = mappings.charCodeAt(pos++);\n    integer = charToInt[c];\n    value |= (integer & 31) << shift;\n    shift += 5;\n  } while (integer & 32);\n\n  const shouldNegate = value & 1;\n  value >>>= 1;\n\n  if (shouldNegate) {\n    value = -0x80000000 | -value;\n  }\n\n  state[j] += value;\n  return pos;\n}\n\nfunction hasMoreVlq(mappings: string, i: number, length: number): boolean {\n  if (i >= length) return false;\n  return mappings.charCodeAt(i) !== comma;\n}\n\nfunction sort(line: SourceMapSegment[]) {\n  line.sort(sortComparator);\n}\n\nfunction sortComparator(a: SourceMapSegment, b: SourceMapSegment): number {\n  return a[0] - b[0];\n}\n\nexport function encode(decoded: SourceMapMappings): string;\nexport function encode(decoded: Readonly<SourceMapMappings>): string;\nexport function encode(decoded: Readonly<SourceMapMappings>): string {\n  const state: [number, number, number, number, number] = new Int32Array(5) as any;\n  const bufLength = 1024 * 16;\n  const subLength = bufLength - 36;\n  const buf = new Uint8Array(bufLength);\n  const sub = buf.subarray(0, subLength);\n  let pos = 0;\n  let out = '';\n\n  for (let i = 0; i < decoded.length; i++) {\n    const line = decoded[i];\n    if (i > 0) {\n      if (pos === bufLength) {\n        out += td.decode(buf);\n        pos = 0;\n      }\n      buf[pos++] = semicolon;\n    }\n    if (line.length === 0) continue;\n\n    state[0] = 0;\n\n    for (let j = 0; j < line.length; j++) {\n      const segment = line[j];\n      // We can push up to 5 ints, each int can take at most 7 chars, and we\n      // may push a comma.\n      if (pos > subLength) {\n        out += td.decode(sub);\n        buf.copyWithin(0, subLength, pos);\n        pos -= subLength;\n      }\n      if (j > 0) buf[pos++] = comma;\n\n      pos = encodeInteger(buf, pos, state, segment, 0); // genColumn\n\n      if (segment.length === 1) continue;\n      pos = encodeInteger(buf, pos, state, segment, 1); // sourcesIndex\n      pos = encodeInteger(buf, pos, state, segment, 2); // sourceLine\n      pos = encodeInteger(buf, pos, state, segment, 3); // sourceColumn\n\n      if (segment.length === 4) continue;\n      pos = encodeInteger(buf, pos, state, segment, 4); // namesIndex\n    }\n  }\n\n  return out + td.decode(buf.subarray(0, pos));\n}\n\nfunction encodeInteger(\n  buf: Uint8Array,\n  pos: number,\n  state: SourceMapSegment,\n  segment: SourceMapSegment,\n  j: number,\n): number {\n  const next = segment[j];\n  let num = next - state[j];\n  state[j] = next;\n\n  num = num < 0 ? (-num << 1) | 1 : num << 1;\n  do {\n    let clamped = num & 0b011111;\n    num >>>= 5;\n    if (num > 0) clamped |= 0b100000;\n    buf[pos++] = intToChar[clamped];\n  } while (num > 0);\n\n  return pos;\n}\n /dist/types/sourcemap-codec.d.ts\u0001export declare type SourceMapSegment = [number] | [number, number, number, number] | [number, number, number, number, number];\nexport declare type SourceMapLine = SourceMapSegment[];\nexport declare type SourceMapMappings = SourceMapLine[];\nexport declare function decode(mappings: string): SourceMapMappings;\nexport declare function encode(decoded: SourceMapMappings): string;\nexport declare function encode(decoded: Readonly<SourceMapMappings>): string;\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QGpyaWRnZXdlbGwvc2V0LWFycmF5QDEuMS4y",
    "content": "/LICENSE\u00048Copyright 2022 Justin Ridgewell <jridgewell@google.com>\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n/src/set-array.ts\u0006p/**\n * Gets the index associated with `key` in the backing array, if it is already present.\n */\nexport let get: (strarr: SetArray, key: string) => number | undefined;\n\n/**\n * Puts `key` into the backing array, if it is not already present. Returns\n * the index of the `key` in the backing array.\n */\nexport let put: (strarr: SetArray, key: string) => number;\n\n/**\n * Pops the last added item out of the SetArray.\n */\nexport let pop: (strarr: SetArray) => void;\n\n/**\n * SetArray acts like a `Set` (allowing only one occurrence of a string `key`), but provides the\n * index of the `key` in the backing array.\n *\n * This is designed to allow synchronizing a second array with the contents of the backing array,\n * like how in a sourcemap `sourcesContent[i]` is the source content associated with `source[i]`,\n * and there are never duplicates.\n */\nexport class SetArray {\n  private declare _indexes: { [key: string]: number | undefined };\n  declare array: readonly string[];\n\n  constructor() {\n    this._indexes = { __proto__: null } as any;\n    this.array = [];\n  }\n\n  static {\n    get = (strarr, key) => strarr._indexes[key];\n\n    put = (strarr, key) => {\n      // The key may or may not be present. If it is present, it's a number.\n      const index = get(strarr, key);\n      if (index !== undefined) return index;\n\n      const { array, _indexes: indexes } = strarr;\n\n      return (indexes[key] = (array as string[]).push(key) - 1);\n    };\n\n    pop = (strarr) => {\n      const { array, _indexes: indexes } = strarr;\n      if (array.length === 0) return;\n\n      const last = (array as string[]).pop()!;\n      indexes[last] = undefined;\n    };\n  }\n}\n/dist/types/set-array.d.ts\u0003/**\n * Gets the index associated with `key` in the backing array, if it is already present.\n */\nexport declare let get: (strarr: SetArray, key: string) => number | undefined;\n/**\n * Puts `key` into the backing array, if it is not already present. Returns\n * the index of the `key` in the backing array.\n */\nexport declare let put: (strarr: SetArray, key: string) => number;\n/**\n * Pops the last added item out of the SetArray.\n */\nexport declare let pop: (strarr: SetArray) => void;\n/**\n * SetArray acts like a `Set` (allowing only one occurrence of a string `key`), but provides the\n * index of the `key` in the backing array.\n *\n * This is designed to allow synchronizing a second array with the contents of the backing array,\n * like how in a sourcemap `sourcesContent[i]` is the source content associated with `source[i]`,\n * and there are never duplicates.\n */\nexport declare class SetArray {\n    private _indexes;\n    array: readonly string[];\n    constructor();\n}\n/README.md\u0003G# @jridgewell/set-array\n\n> Like a Set, but provides the index of the `key` in the backing array\n\nThis is designed to allow synchronizing a second array with the contents of the backing array, like\nhow in a sourcemap `sourcesContent[i]` is the source content associated with `source[i]`, and there\nare never duplicates.\n\n## Installation\n\n```sh\nnpm install @jridgewell/set-array\n```\n\n## Usage\n\n```js\nimport { SetArray, get, put, pop } from '@jridgewell/set-array';\n\nconst sa = new SetArray();\n\nlet index = put(sa, 'first');\nassert.strictEqual(index, 0);\n\nindex = put(sa, 'second');\nassert.strictEqual(index, 1);\n\nassert.deepEqual(sa.array, [ 'first', 'second' ]);\n\nindex = get(sa, 'first');\nassert.strictEqual(index, 0);\n\npop(sa);\nindex = get(sa, 'second');\nassert.strictEqual(index, undefined);\nassert.deepEqual(sa.array, [ 'first' ]);\n```\n/dist/set-array.umd.js.map\ns{\"version\":3,\"file\":\"set-array.umd.js\",\"sources\":[\"../src/set-array.ts\"],\"sourcesContent\":[\"/**\\n * Gets the index associated with `key` in the backing array, if it is already present.\\n */\\nexport let get: (strarr: SetArray, key: string) => number | undefined;\\n\\n/**\\n * Puts `key` into the backing array, if it is not already present. Returns\\n * the index of the `key` in the backing array.\\n */\\nexport let put: (strarr: SetArray, key: string) => number;\\n\\n/**\\n * Pops the last added item out of the SetArray.\\n */\\nexport let pop: (strarr: SetArray) => void;\\n\\n/**\\n * SetArray acts like a `Set` (allowing only one occurrence of a string `key`), but provides the\\n * index of the `key` in the backing array.\\n *\\n * This is designed to allow synchronizing a second array with the contents of the backing array,\\n * like how in a sourcemap `sourcesContent[i]` is the source content associated with `source[i]`,\\n * and there are never duplicates.\\n */\\nexport class SetArray {\\n  private declare _indexes: { [key: string]: number | undefined };\\n  declare array: readonly string[];\\n\\n  constructor() {\\n    this._indexes = { __proto__: null } as any;\\n    this.array = [];\\n  }\\n\\n  static {\\n    get = (strarr, key) => strarr._indexes[key];\\n\\n    put = (strarr, key) => {\\n      // The key may or may not be present. If it is present, it's a number.\\n      const index = get(strarr, key);\\n      if (index !== undefined) return index;\\n\\n      const { array, _indexes: indexes } = strarr;\\n\\n      return (indexes[key] = (array as string[]).push(key) - 1);\\n    };\\n\\n    pop = (strarr) => {\\n      const { array, _indexes: indexes } = strarr;\\n      if (array.length === 0) return;\\n\\n      const last = (array as string[]).pop()!;\\n      indexes[last] = undefined;\\n    };\\n  }\\n}\\n\"],\"names\":[\"get\",\"put\",\"pop\"],\"mappings\":\";;;;;;IAAA;;;AAGWA,yBAA2D;IAEtE;;;;AAIWC,yBAA+C;IAE1D;;;AAGWC,yBAAgC;IAE3C;;;;;;;;UAQa,QAAQ;QAInB;YACE,IAAI,CAAC,QAAQ,GAAG,EAAE,SAAS,EAAE,IAAI,EAAS,CAAC;YAC3C,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;SACjB;KAuBF;IArBC;QACEF,WAAG,GAAG,CAAC,MAAM,EAAE,GAAG,KAAK,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAE5CC,WAAG,GAAG,CAAC,MAAM,EAAE,GAAG;;YAEhB,MAAM,KAAK,GAAGD,WAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YAC/B,IAAI,KAAK,KAAK,SAAS;gBAAE,OAAO,KAAK,CAAC;YAEtC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;YAE5C,QAAQ,OAAO,CAAC,GAAG,CAAC,GAAI,KAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;SAC3D,CAAC;QAEFE,WAAG,GAAG,CAAC,MAAM;YACX,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;YAC5C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO;YAE/B,MAAM,IAAI,GAAI,KAAkB,CAAC,GAAG,EAAG,CAAC;YACxC,OAAO,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;SAC3B,CAAC;IACJ,CAAC,GAAA;;;;;;;;;;\"}/dist/set-array.umd.js\bi(function (global, factory) {\n    typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n    typeof define === 'function' && define.amd ? define(['exports'], factory) :\n    (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.setArray = {}));\n})(this, (function (exports) { 'use strict';\n\n    /**\n     * Gets the index associated with `key` in the backing array, if it is already present.\n     */\n    exports.get = void 0;\n    /**\n     * Puts `key` into the backing array, if it is not already present. Returns\n     * the index of the `key` in the backing array.\n     */\n    exports.put = void 0;\n    /**\n     * Pops the last added item out of the SetArray.\n     */\n    exports.pop = void 0;\n    /**\n     * SetArray acts like a `Set` (allowing only one occurrence of a string `key`), but provides the\n     * index of the `key` in the backing array.\n     *\n     * This is designed to allow synchronizing a second array with the contents of the backing array,\n     * like how in a sourcemap `sourcesContent[i]` is the source content associated with `source[i]`,\n     * and there are never duplicates.\n     */\n    class SetArray {\n        constructor() {\n            this._indexes = { __proto__: null };\n            this.array = [];\n        }\n    }\n    (() => {\n        exports.get = (strarr, key) => strarr._indexes[key];\n        exports.put = (strarr, key) => {\n            // The key may or may not be present. If it is present, it's a number.\n            const index = exports.get(strarr, key);\n            if (index !== undefined)\n                return index;\n            const { array, _indexes: indexes } = strarr;\n            return (indexes[key] = array.push(key) - 1);\n        };\n        exports.pop = (strarr) => {\n            const { array, _indexes: indexes } = strarr;\n            if (array.length === 0)\n                return;\n            const last = array.pop();\n            indexes[last] = undefined;\n        };\n    })();\n\n    exports.SetArray = SetArray;\n\n    Object.defineProperty(exports, '__esModule', { value: true });\n\n}));\n//# sourceMappingURL=set-array.umd.js.map\n/dist/set-array.mjs.map\nG{\"version\":3,\"file\":\"set-array.mjs\",\"sources\":[\"../src/set-array.ts\"],\"sourcesContent\":[\"/**\\n * Gets the index associated with `key` in the backing array, if it is already present.\\n */\\nexport let get: (strarr: SetArray, key: string) => number | undefined;\\n\\n/**\\n * Puts `key` into the backing array, if it is not already present. Returns\\n * the index of the `key` in the backing array.\\n */\\nexport let put: (strarr: SetArray, key: string) => number;\\n\\n/**\\n * Pops the last added item out of the SetArray.\\n */\\nexport let pop: (strarr: SetArray) => void;\\n\\n/**\\n * SetArray acts like a `Set` (allowing only one occurrence of a string `key`), but provides the\\n * index of the `key` in the backing array.\\n *\\n * This is designed to allow synchronizing a second array with the contents of the backing array,\\n * like how in a sourcemap `sourcesContent[i]` is the source content associated with `source[i]`,\\n * and there are never duplicates.\\n */\\nexport class SetArray {\\n  private declare _indexes: { [key: string]: number | undefined };\\n  declare array: readonly string[];\\n\\n  constructor() {\\n    this._indexes = { __proto__: null } as any;\\n    this.array = [];\\n  }\\n\\n  static {\\n    get = (strarr, key) => strarr._indexes[key];\\n\\n    put = (strarr, key) => {\\n      // The key may or may not be present. If it is present, it's a number.\\n      const index = get(strarr, key);\\n      if (index !== undefined) return index;\\n\\n      const { array, _indexes: indexes } = strarr;\\n\\n      return (indexes[key] = (array as string[]).push(key) - 1);\\n    };\\n\\n    pop = (strarr) => {\\n      const { array, _indexes: indexes } = strarr;\\n      if (array.length === 0) return;\\n\\n      const last = (array as string[]).pop()!;\\n      indexes[last] = undefined;\\n    };\\n  }\\n}\\n\"],\"names\":[],\"mappings\":\"AAAA;;;IAGW,IAA2D;AAEtE;;;;IAIW,IAA+C;AAE1D;;;IAGW,IAAgC;AAE3C;;;;;;;;MAQa,QAAQ;IAInB;QACE,IAAI,CAAC,QAAQ,GAAG,EAAE,SAAS,EAAE,IAAI,EAAS,CAAC;QAC3C,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;KACjB;CAuBF;AArBC;IACE,GAAG,GAAG,CAAC,MAAM,EAAE,GAAG,KAAK,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAE5C,GAAG,GAAG,CAAC,MAAM,EAAE,GAAG;;QAEhB,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC/B,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC;QAEtC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;QAE5C,QAAQ,OAAO,CAAC,GAAG,CAAC,GAAI,KAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;KAC3D,CAAC;IAEF,GAAG,GAAG,CAAC,MAAM;QACX,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;QAC5C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAE/B,MAAM,IAAI,GAAI,KAAkB,CAAC,GAAG,EAAG,CAAC;QACxC,OAAO,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;KAC3B,CAAC;AACJ,CAAC,GAAA;;;;\"}/dist/set-array.mjs\u0005/**\n * Gets the index associated with `key` in the backing array, if it is already present.\n */\nlet get;\n/**\n * Puts `key` into the backing array, if it is not already present. Returns\n * the index of the `key` in the backing array.\n */\nlet put;\n/**\n * Pops the last added item out of the SetArray.\n */\nlet pop;\n/**\n * SetArray acts like a `Set` (allowing only one occurrence of a string `key`), but provides the\n * index of the `key` in the backing array.\n *\n * This is designed to allow synchronizing a second array with the contents of the backing array,\n * like how in a sourcemap `sourcesContent[i]` is the source content associated with `source[i]`,\n * and there are never duplicates.\n */\nclass SetArray {\n    constructor() {\n        this._indexes = { __proto__: null };\n        this.array = [];\n    }\n}\n(() => {\n    get = (strarr, key) => strarr._indexes[key];\n    put = (strarr, key) => {\n        // The key may or may not be present. If it is present, it's a number.\n        const index = get(strarr, key);\n        if (index !== undefined)\n            return index;\n        const { array, _indexes: indexes } = strarr;\n        return (indexes[key] = array.push(key) - 1);\n    };\n    pop = (strarr) => {\n        const { array, _indexes: indexes } = strarr;\n        if (array.length === 0)\n            return;\n        const last = array.pop();\n        indexes[last] = undefined;\n    };\n})();\n\nexport { SetArray, get, pop, put };\n//# sourceMappingURL=set-array.mjs.map\n/package.json\u0007{\n  \"name\": \"@jridgewell/set-array\",\n  \"version\": \"1.1.2\",\n  \"description\": \"Like a Set, but provides the index of the `key` in the backing array\",\n  \"keywords\": [],\n  \"author\": \"Justin Ridgewell <justin@ridgewell.name>\",\n  \"license\": \"MIT\",\n  \"repository\": \"https://github.com/jridgewell/set-array\",\n  \"main\": \"dist/set-array.umd.js\",\n  \"module\": \"dist/set-array.mjs\",\n  \"typings\": \"dist/types/set-array.d.ts\",\n  \"exports\": {\n    \".\": [\n      {\n        \"types\": \"./dist/types/set-array.d.ts\",\n        \"browser\": \"./dist/set-array.umd.js\",\n        \"require\": \"./dist/set-array.umd.js\",\n        \"import\": \"./dist/set-array.mjs\"\n      },\n      \"./dist/set-array.umd.js\"\n    ],\n    \"./package.json\": \"./package.json\"\n  },\n  \"files\": [\n    \"dist\",\n    \"src\"\n  ],\n  \"engines\": {\n    \"node\": \">=6.0.0\"\n  },\n  \"scripts\": {\n    \"prebuild\": \"rm -rf dist\",\n    \"build\": \"run-s -n build:*\",\n    \"build:rollup\": \"rollup -c rollup.config.js\",\n    \"build:ts\": \"tsc --project tsconfig.build.json\",\n    \"lint\": \"run-s -n lint:*\",\n    \"lint:prettier\": \"npm run test:lint:prettier -- --write\",\n    \"lint:ts\": \"npm run test:lint:ts -- --fix\",\n    \"pretest\": \"run-s build:rollup\",\n    \"test\": \"run-s -n test:lint test:only\",\n    \"test:debug\": \"mocha --inspect-brk\",\n    \"test:lint\": \"run-s -n test:lint:*\",\n    \"test:lint:prettier\": \"prettier --check '{src,test}/**/*.ts'\",\n    \"test:lint:ts\": \"eslint '{src,test}/**/*.ts'\",\n    \"test:only\": \"mocha\",\n    \"test:coverage\": \"c8 mocha\",\n    \"test:watch\": \"mocha --watch\",\n    \"prepublishOnly\": \"npm run preversion\",\n    \"preversion\": \"run-s test build\"\n  },\n  \"devDependencies\": {\n    \"@rollup/plugin-typescript\": \"8.3.0\",\n    \"@types/mocha\": \"9.1.1\",\n    \"@types/node\": \"17.0.29\",\n    \"@typescript-eslint/eslint-plugin\": \"5.10.0\",\n    \"@typescript-eslint/parser\": \"5.10.0\",\n    \"c8\": \"7.11.0\",\n    \"eslint\": \"8.7.0\",\n    \"eslint-config-prettier\": \"8.3.0\",\n    \"mocha\": \"9.2.0\",\n    \"npm-run-all\": \"4.1.5\",\n    \"prettier\": \"2.5.1\",\n    \"rollup\": \"2.66.0\",\n    \"typescript\": \"4.5.5\"\n  }\n}\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QGpyaWRnZXdlbGwvcmVzb2x2ZS11cmlAMy4xLjA=",
    "content": "/dist/resolve-uri.umd.js(a(function (global, factory) {\n    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n    typeof define === 'function' && define.amd ? define(factory) :\n    (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.resolveURI = factory());\n})(this, (function () { 'use strict';\n\n    // Matches the scheme of a URL, eg \"http://\"\n    const schemeRegex = /^[\\w+.-]+:\\/\\//;\n    /**\n     * Matches the parts of a URL:\n     * 1. Scheme, including \":\", guaranteed.\n     * 2. User/password, including \"@\", optional.\n     * 3. Host, guaranteed.\n     * 4. Port, including \":\", optional.\n     * 5. Path, including \"/\", optional.\n     * 6. Query, including \"?\", optional.\n     * 7. Hash, including \"#\", optional.\n     */\n    const urlRegex = /^([\\w+.-]+:)\\/\\/([^@/#?]*@)?([^:/#?]*)(:\\d+)?(\\/[^#?]*)?(\\?[^#]*)?(#.*)?/;\n    /**\n     * File URLs are weird. They dont' need the regular `//` in the scheme, they may or may not start\n     * with a leading `/`, they can have a domain (but only if they don't start with a Windows drive).\n     *\n     * 1. Host, optional.\n     * 2. Path, which may include \"/\", guaranteed.\n     * 3. Query, including \"?\", optional.\n     * 4. Hash, including \"#\", optional.\n     */\n    const fileRegex = /^file:(?:\\/\\/((?![a-z]:)[^/#?]*)?)?(\\/?[^#?]*)(\\?[^#]*)?(#.*)?/i;\n    var UrlType;\n    (function (UrlType) {\n        UrlType[UrlType[\"Empty\"] = 1] = \"Empty\";\n        UrlType[UrlType[\"Hash\"] = 2] = \"Hash\";\n        UrlType[UrlType[\"Query\"] = 3] = \"Query\";\n        UrlType[UrlType[\"RelativePath\"] = 4] = \"RelativePath\";\n        UrlType[UrlType[\"AbsolutePath\"] = 5] = \"AbsolutePath\";\n        UrlType[UrlType[\"SchemeRelative\"] = 6] = \"SchemeRelative\";\n        UrlType[UrlType[\"Absolute\"] = 7] = \"Absolute\";\n    })(UrlType || (UrlType = {}));\n    function isAbsoluteUrl(input) {\n        return schemeRegex.test(input);\n    }\n    function isSchemeRelativeUrl(input) {\n        return input.startsWith('//');\n    }\n    function isAbsolutePath(input) {\n        return input.startsWith('/');\n    }\n    function isFileUrl(input) {\n        return input.startsWith('file:');\n    }\n    function isRelative(input) {\n        return /^[.?#]/.test(input);\n    }\n    function parseAbsoluteUrl(input) {\n        const match = urlRegex.exec(input);\n        return makeUrl(match[1], match[2] || '', match[3], match[4] || '', match[5] || '/', match[6] || '', match[7] || '');\n    }\n    function parseFileUrl(input) {\n        const match = fileRegex.exec(input);\n        const path = match[2];\n        return makeUrl('file:', '', match[1] || '', '', isAbsolutePath(path) ? path : '/' + path, match[3] || '', match[4] || '');\n    }\n    function makeUrl(scheme, user, host, port, path, query, hash) {\n        return {\n            scheme,\n            user,\n            host,\n            port,\n            path,\n            query,\n            hash,\n            type: UrlType.Absolute,\n        };\n    }\n    function parseUrl(input) {\n        if (isSchemeRelativeUrl(input)) {\n            const url = parseAbsoluteUrl('http:' + input);\n            url.scheme = '';\n            url.type = UrlType.SchemeRelative;\n            return url;\n        }\n        if (isAbsolutePath(input)) {\n            const url = parseAbsoluteUrl('http://foo.com' + input);\n            url.scheme = '';\n            url.host = '';\n            url.type = UrlType.AbsolutePath;\n            return url;\n        }\n        if (isFileUrl(input))\n            return parseFileUrl(input);\n        if (isAbsoluteUrl(input))\n            return parseAbsoluteUrl(input);\n        const url = parseAbsoluteUrl('http://foo.com/' + input);\n        url.scheme = '';\n        url.host = '';\n        url.type = input\n            ? input.startsWith('?')\n                ? UrlType.Query\n                : input.startsWith('#')\n                    ? UrlType.Hash\n                    : UrlType.RelativePath\n            : UrlType.Empty;\n        return url;\n    }\n    function stripPathFilename(path) {\n        // If a path ends with a parent directory \"..\", then it's a relative path with excess parent\n        // paths. It's not a file, so we can't strip it.\n        if (path.endsWith('/..'))\n            return path;\n        const index = path.lastIndexOf('/');\n        return path.slice(0, index + 1);\n    }\n    function mergePaths(url, base) {\n        normalizePath(base, base.type);\n        // If the path is just a \"/\", then it was an empty path to begin with (remember, we're a relative\n        // path).\n        if (url.path === '/') {\n            url.path = base.path;\n        }\n        else {\n            // Resolution happens relative to the base path's directory, not the file.\n            url.path = stripPathFilename(base.path) + url.path;\n        }\n    }\n    /**\n     * The path can have empty directories \"//\", unneeded parents \"foo/..\", or current directory\n     * \"foo/.\". We need to normalize to a standard representation.\n     */\n    function normalizePath(url, type) {\n        const rel = type <= UrlType.RelativePath;\n        const pieces = url.path.split('/');\n        // We need to preserve the first piece always, so that we output a leading slash. The item at\n        // pieces[0] is an empty string.\n        let pointer = 1;\n        // Positive is the number of real directories we've output, used for popping a parent directory.\n        // Eg, \"foo/bar/..\" will have a positive 2, and we can decrement to be left with just \"foo\".\n        let positive = 0;\n        // We need to keep a trailing slash if we encounter an empty directory (eg, splitting \"foo/\" will\n        // generate `[\"foo\", \"\"]` pieces). And, if we pop a parent directory. But once we encounter a\n        // real directory, we won't need to append, unless the other conditions happen again.\n        let addTrailingSlash = false;\n        for (let i = 1; i < pieces.length; i++) {\n            const piece = pieces[i];\n            // An empty directory, could be a trailing slash, or just a double \"//\" in the path.\n            if (!piece) {\n                addTrailingSlash = true;\n                continue;\n            }\n            // If we encounter a real directory, then we don't need to append anymore.\n            addTrailingSlash = false;\n            // A current directory, which we can always drop.\n            if (piece === '.')\n                continue;\n            // A parent directory, we need to see if there are any real directories we can pop. Else, we\n            // have an excess of parents, and we'll need to keep the \"..\".\n            if (piece === '..') {\n                if (positive) {\n                    addTrailingSlash = true;\n                    positive--;\n                    pointer--;\n                }\n                else if (rel) {\n                    // If we're in a relativePath, then we need to keep the excess parents. Else, in an absolute\n                    // URL, protocol relative URL, or an absolute path, we don't need to keep excess.\n                    pieces[pointer++] = piece;\n                }\n                continue;\n            }\n            // We've encountered a real directory. Move it to the next insertion pointer, which accounts for\n            // any popped or dropped directories.\n            pieces[pointer++] = piece;\n            positive++;\n        }\n        let path = '';\n        for (let i = 1; i < pointer; i++) {\n            path += '/' + pieces[i];\n        }\n        if (!path || (addTrailingSlash && !path.endsWith('/..'))) {\n            path += '/';\n        }\n        url.path = path;\n    }\n    /**\n     * Attempts to resolve `input` URL/path relative to `base`.\n     */\n    function resolve(input, base) {\n        if (!input && !base)\n            return '';\n        const url = parseUrl(input);\n        let inputType = url.type;\n        if (base && inputType !== UrlType.Absolute) {\n            const baseUrl = parseUrl(base);\n            const baseType = baseUrl.type;\n            switch (inputType) {\n                case UrlType.Empty:\n                    url.hash = baseUrl.hash;\n                // fall through\n                case UrlType.Hash:\n                    url.query = baseUrl.query;\n                // fall through\n                case UrlType.Query:\n                case UrlType.RelativePath:\n                    mergePaths(url, baseUrl);\n                // fall through\n                case UrlType.AbsolutePath:\n                    // The host, user, and port are joined, you can't copy one without the others.\n                    url.user = baseUrl.user;\n                    url.host = baseUrl.host;\n                    url.port = baseUrl.port;\n                // fall through\n                case UrlType.SchemeRelative:\n                    // The input doesn't have a schema at least, so we need to copy at least that over.\n                    url.scheme = baseUrl.scheme;\n            }\n            if (baseType > inputType)\n                inputType = baseType;\n        }\n        normalizePath(url, inputType);\n        const queryHash = url.query + url.hash;\n        switch (inputType) {\n            // This is impossible, because of the empty checks at the start of the function.\n            // case UrlType.Empty:\n            case UrlType.Hash:\n            case UrlType.Query:\n                return queryHash;\n            case UrlType.RelativePath: {\n                // The first char is always a \"/\", and we need it to be relative.\n                const path = url.path.slice(1);\n                if (!path)\n                    return queryHash || '.';\n                if (isRelative(base || input) && !isRelative(path)) {\n                    // If base started with a leading \".\", or there is no base and input started with a \".\",\n                    // then we need to ensure that the relative path starts with a \".\". We don't know if\n                    // relative starts with a \"..\", though, so check before prepending.\n                    return './' + path + queryHash;\n                }\n                return path + queryHash;\n            }\n            case UrlType.AbsolutePath:\n                return url.path + queryHash;\n            default:\n                return url.scheme + '//' + url.user + url.host + url.port + url.path + queryHash;\n        }\n    }\n\n    return resolve;\n\n}));\n//# sourceMappingURL=resolve-uri.umd.js.map\n/LICENSE\u00047Copyright 2019 Justin Ridgewell <jridgewell@google.com>\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE./README.md\u000b\n# @jridgewell/resolve-uri\n\n> Resolve a URI relative to an optional base URI\n\nResolve any combination of absolute URIs, protocol-realtive URIs, absolute paths, or relative paths.\n\n## Installation\n\n```sh\nnpm install @jridgewell/resolve-uri\n```\n\n## Usage\n\n```typescript\nfunction resolve(input: string, base?: string): string;\n```\n\n```js\nimport resolve from '@jridgewell/resolve-uri';\n\nresolve('foo', 'https://example.com'); // => 'https://example.com/foo'\n```\n\n| Input                 | Base                    | Resolution                     | Explanation                                                  |\n|-----------------------|-------------------------|--------------------------------|--------------------------------------------------------------|\n| `https://example.com` | _any_                   | `https://example.com/`         | Input is normalized only                                     |\n| `//example.com`       | `https://base.com/`     | `https://example.com/`         | Input inherits the base's protocol                           |\n| `//example.com`       | _rest_                  | `//example.com/`               | Input is normalized only                                     |\n| `/example`            | `https://base.com/`     | `https://base.com/example`     | Input inherits the base's origin                             |\n| `/example`            | `//base.com/`           | `//base.com/example`           | Input inherits the base's host and remains protocol relative |\n| `/example`            | _rest_                  | `/example`                     | Input is normalized only                                     |\n| `example`             | `https://base.com/dir/` | `https://base.com/dir/example` | Input is joined with the base                                |\n| `example`             | `https://base.com/file` | `https://base.com/example`     | Input is joined with the base without its file               |\n| `example`             | `//base.com/dir/`       | `//base.com/dir/example`       | Input is joined with the base's last directory               |\n| `example`             | `//base.com/file`       | `//base.com/example`           | Input is joined with the base without its file               |\n| `example`             | `/base/dir/`            | `/base/dir/example`            | Input is joined with the base's last directory               |\n| `example`             | `/base/file`            | `/base/example`                | Input is joined with the base without its file               |\n| `example`             | `base/dir/`             | `base/dir/example`             | Input is joined with the base's last directory               |\n| `example`             | `base/file`             | `base/example`                 | Input is joined with the base without its file               |\n/dist/resolve-uri.mjs#P// Matches the scheme of a URL, eg \"http://\"\nconst schemeRegex = /^[\\w+.-]+:\\/\\//;\n/**\n * Matches the parts of a URL:\n * 1. Scheme, including \":\", guaranteed.\n * 2. User/password, including \"@\", optional.\n * 3. Host, guaranteed.\n * 4. Port, including \":\", optional.\n * 5. Path, including \"/\", optional.\n * 6. Query, including \"?\", optional.\n * 7. Hash, including \"#\", optional.\n */\nconst urlRegex = /^([\\w+.-]+:)\\/\\/([^@/#?]*@)?([^:/#?]*)(:\\d+)?(\\/[^#?]*)?(\\?[^#]*)?(#.*)?/;\n/**\n * File URLs are weird. They dont' need the regular `//` in the scheme, they may or may not start\n * with a leading `/`, they can have a domain (but only if they don't start with a Windows drive).\n *\n * 1. Host, optional.\n * 2. Path, which may include \"/\", guaranteed.\n * 3. Query, including \"?\", optional.\n * 4. Hash, including \"#\", optional.\n */\nconst fileRegex = /^file:(?:\\/\\/((?![a-z]:)[^/#?]*)?)?(\\/?[^#?]*)(\\?[^#]*)?(#.*)?/i;\nvar UrlType;\n(function (UrlType) {\n    UrlType[UrlType[\"Empty\"] = 1] = \"Empty\";\n    UrlType[UrlType[\"Hash\"] = 2] = \"Hash\";\n    UrlType[UrlType[\"Query\"] = 3] = \"Query\";\n    UrlType[UrlType[\"RelativePath\"] = 4] = \"RelativePath\";\n    UrlType[UrlType[\"AbsolutePath\"] = 5] = \"AbsolutePath\";\n    UrlType[UrlType[\"SchemeRelative\"] = 6] = \"SchemeRelative\";\n    UrlType[UrlType[\"Absolute\"] = 7] = \"Absolute\";\n})(UrlType || (UrlType = {}));\nfunction isAbsoluteUrl(input) {\n    return schemeRegex.test(input);\n}\nfunction isSchemeRelativeUrl(input) {\n    return input.startsWith('//');\n}\nfunction isAbsolutePath(input) {\n    return input.startsWith('/');\n}\nfunction isFileUrl(input) {\n    return input.startsWith('file:');\n}\nfunction isRelative(input) {\n    return /^[.?#]/.test(input);\n}\nfunction parseAbsoluteUrl(input) {\n    const match = urlRegex.exec(input);\n    return makeUrl(match[1], match[2] || '', match[3], match[4] || '', match[5] || '/', match[6] || '', match[7] || '');\n}\nfunction parseFileUrl(input) {\n    const match = fileRegex.exec(input);\n    const path = match[2];\n    return makeUrl('file:', '', match[1] || '', '', isAbsolutePath(path) ? path : '/' + path, match[3] || '', match[4] || '');\n}\nfunction makeUrl(scheme, user, host, port, path, query, hash) {\n    return {\n        scheme,\n        user,\n        host,\n        port,\n        path,\n        query,\n        hash,\n        type: UrlType.Absolute,\n    };\n}\nfunction parseUrl(input) {\n    if (isSchemeRelativeUrl(input)) {\n        const url = parseAbsoluteUrl('http:' + input);\n        url.scheme = '';\n        url.type = UrlType.SchemeRelative;\n        return url;\n    }\n    if (isAbsolutePath(input)) {\n        const url = parseAbsoluteUrl('http://foo.com' + input);\n        url.scheme = '';\n        url.host = '';\n        url.type = UrlType.AbsolutePath;\n        return url;\n    }\n    if (isFileUrl(input))\n        return parseFileUrl(input);\n    if (isAbsoluteUrl(input))\n        return parseAbsoluteUrl(input);\n    const url = parseAbsoluteUrl('http://foo.com/' + input);\n    url.scheme = '';\n    url.host = '';\n    url.type = input\n        ? input.startsWith('?')\n            ? UrlType.Query\n            : input.startsWith('#')\n                ? UrlType.Hash\n                : UrlType.RelativePath\n        : UrlType.Empty;\n    return url;\n}\nfunction stripPathFilename(path) {\n    // If a path ends with a parent directory \"..\", then it's a relative path with excess parent\n    // paths. It's not a file, so we can't strip it.\n    if (path.endsWith('/..'))\n        return path;\n    const index = path.lastIndexOf('/');\n    return path.slice(0, index + 1);\n}\nfunction mergePaths(url, base) {\n    normalizePath(base, base.type);\n    // If the path is just a \"/\", then it was an empty path to begin with (remember, we're a relative\n    // path).\n    if (url.path === '/') {\n        url.path = base.path;\n    }\n    else {\n        // Resolution happens relative to the base path's directory, not the file.\n        url.path = stripPathFilename(base.path) + url.path;\n    }\n}\n/**\n * The path can have empty directories \"//\", unneeded parents \"foo/..\", or current directory\n * \"foo/.\". We need to normalize to a standard representation.\n */\nfunction normalizePath(url, type) {\n    const rel = type <= UrlType.RelativePath;\n    const pieces = url.path.split('/');\n    // We need to preserve the first piece always, so that we output a leading slash. The item at\n    // pieces[0] is an empty string.\n    let pointer = 1;\n    // Positive is the number of real directories we've output, used for popping a parent directory.\n    // Eg, \"foo/bar/..\" will have a positive 2, and we can decrement to be left with just \"foo\".\n    let positive = 0;\n    // We need to keep a trailing slash if we encounter an empty directory (eg, splitting \"foo/\" will\n    // generate `[\"foo\", \"\"]` pieces). And, if we pop a parent directory. But once we encounter a\n    // real directory, we won't need to append, unless the other conditions happen again.\n    let addTrailingSlash = false;\n    for (let i = 1; i < pieces.length; i++) {\n        const piece = pieces[i];\n        // An empty directory, could be a trailing slash, or just a double \"//\" in the path.\n        if (!piece) {\n            addTrailingSlash = true;\n            continue;\n        }\n        // If we encounter a real directory, then we don't need to append anymore.\n        addTrailingSlash = false;\n        // A current directory, which we can always drop.\n        if (piece === '.')\n            continue;\n        // A parent directory, we need to see if there are any real directories we can pop. Else, we\n        // have an excess of parents, and we'll need to keep the \"..\".\n        if (piece === '..') {\n            if (positive) {\n                addTrailingSlash = true;\n                positive--;\n                pointer--;\n            }\n            else if (rel) {\n                // If we're in a relativePath, then we need to keep the excess parents. Else, in an absolute\n                // URL, protocol relative URL, or an absolute path, we don't need to keep excess.\n                pieces[pointer++] = piece;\n            }\n            continue;\n        }\n        // We've encountered a real directory. Move it to the next insertion pointer, which accounts for\n        // any popped or dropped directories.\n        pieces[pointer++] = piece;\n        positive++;\n    }\n    let path = '';\n    for (let i = 1; i < pointer; i++) {\n        path += '/' + pieces[i];\n    }\n    if (!path || (addTrailingSlash && !path.endsWith('/..'))) {\n        path += '/';\n    }\n    url.path = path;\n}\n/**\n * Attempts to resolve `input` URL/path relative to `base`.\n */\nfunction resolve(input, base) {\n    if (!input && !base)\n        return '';\n    const url = parseUrl(input);\n    let inputType = url.type;\n    if (base && inputType !== UrlType.Absolute) {\n        const baseUrl = parseUrl(base);\n        const baseType = baseUrl.type;\n        switch (inputType) {\n            case UrlType.Empty:\n                url.hash = baseUrl.hash;\n            // fall through\n            case UrlType.Hash:\n                url.query = baseUrl.query;\n            // fall through\n            case UrlType.Query:\n            case UrlType.RelativePath:\n                mergePaths(url, baseUrl);\n            // fall through\n            case UrlType.AbsolutePath:\n                // The host, user, and port are joined, you can't copy one without the others.\n                url.user = baseUrl.user;\n                url.host = baseUrl.host;\n                url.port = baseUrl.port;\n            // fall through\n            case UrlType.SchemeRelative:\n                // The input doesn't have a schema at least, so we need to copy at least that over.\n                url.scheme = baseUrl.scheme;\n        }\n        if (baseType > inputType)\n            inputType = baseType;\n    }\n    normalizePath(url, inputType);\n    const queryHash = url.query + url.hash;\n    switch (inputType) {\n        // This is impossible, because of the empty checks at the start of the function.\n        // case UrlType.Empty:\n        case UrlType.Hash:\n        case UrlType.Query:\n            return queryHash;\n        case UrlType.RelativePath: {\n            // The first char is always a \"/\", and we need it to be relative.\n            const path = url.path.slice(1);\n            if (!path)\n                return queryHash || '.';\n            if (isRelative(base || input) && !isRelative(path)) {\n                // If base started with a leading \".\", or there is no base and input started with a \".\",\n                // then we need to ensure that the relative path starts with a \".\". We don't know if\n                // relative starts with a \"..\", though, so check before prepending.\n                return './' + path + queryHash;\n            }\n            return path + queryHash;\n        }\n        case UrlType.AbsolutePath:\n            return url.path + queryHash;\n        default:\n            return url.scheme + '//' + url.user + url.host + url.port + url.path + queryHash;\n    }\n}\n\nexport { resolve as default };\n//# sourceMappingURL=resolve-uri.mjs.map\n/package.json\b\u0011{\n  \"name\": \"@jridgewell/resolve-uri\",\n  \"version\": \"3.1.0\",\n  \"description\": \"Resolve a URI relative to an optional base URI\",\n  \"keywords\": [\n    \"resolve\",\n    \"uri\",\n    \"url\",\n    \"path\"\n  ],\n  \"author\": \"Justin Ridgewell <justin@ridgewell.name>\",\n  \"license\": \"MIT\",\n  \"repository\": \"https://github.com/jridgewell/resolve-uri\",\n  \"main\": \"dist/resolve-uri.umd.js\",\n  \"module\": \"dist/resolve-uri.mjs\",\n  \"typings\": \"dist/types/resolve-uri.d.ts\",\n  \"exports\": {\n    \".\": [\n      {\n        \"types\": \"./dist/types/resolve-uri.d.ts\",\n        \"browser\": \"./dist/resolve-uri.umd.js\",\n        \"require\": \"./dist/resolve-uri.umd.js\",\n        \"import\": \"./dist/resolve-uri.mjs\"\n      },\n      \"./dist/resolve-uri.umd.js\"\n    ],\n    \"./package.json\": \"./package.json\"\n  },\n  \"files\": [\n    \"dist\"\n  ],\n  \"engines\": {\n    \"node\": \">=6.0.0\"\n  },\n  \"scripts\": {\n    \"prebuild\": \"rm -rf dist\",\n    \"build\": \"run-s -n build:*\",\n    \"build:rollup\": \"rollup -c rollup.config.js\",\n    \"build:ts\": \"tsc --project tsconfig.build.json\",\n    \"lint\": \"run-s -n lint:*\",\n    \"lint:prettier\": \"npm run test:lint:prettier -- --write\",\n    \"lint:ts\": \"npm run test:lint:ts -- --fix\",\n    \"pretest\": \"run-s build:rollup\",\n    \"test\": \"run-s -n test:lint test:only\",\n    \"test:debug\": \"mocha --inspect-brk\",\n    \"test:lint\": \"run-s -n test:lint:*\",\n    \"test:lint:prettier\": \"prettier --check '{src,test}/**/*.ts'\",\n    \"test:lint:ts\": \"eslint '{src,test}/**/*.ts'\",\n    \"test:only\": \"mocha\",\n    \"test:coverage\": \"c8 mocha\",\n    \"test:watch\": \"mocha --watch\",\n    \"prepublishOnly\": \"npm run preversion\",\n    \"preversion\": \"run-s test build\"\n  },\n  \"devDependencies\": {\n    \"@jridgewell/resolve-uri-latest\": \"npm:@jridgewell/resolve-uri@*\",\n    \"@rollup/plugin-typescript\": \"8.3.0\",\n    \"@typescript-eslint/eslint-plugin\": \"5.10.0\",\n    \"@typescript-eslint/parser\": \"5.10.0\",\n    \"c8\": \"7.11.0\",\n    \"eslint\": \"8.7.0\",\n    \"eslint-config-prettier\": \"8.3.0\",\n    \"mocha\": \"9.2.0\",\n    \"npm-run-all\": \"4.1.5\",\n    \"prettier\": \"2.5.1\",\n    \"rollup\": \"2.66.0\",\n    \"typescript\": \"4.5.5\"\n  }\n}\n/dist/resolve-uri.umd.js.map:\u0000{\"version\":3,\"file\":\"resolve-uri.umd.js\",\"sources\":[\"../src/resolve-uri.ts\"],\"sourcesContent\":[\"// Matches the scheme of a URL, eg \\\"http://\\\"\\nconst schemeRegex = /^[\\\\w+.-]+:\\\\/\\\\//;\\n\\n/**\\n * Matches the parts of a URL:\\n * 1. Scheme, including \\\":\\\", guaranteed.\\n * 2. User/password, including \\\"@\\\", optional.\\n * 3. Host, guaranteed.\\n * 4. Port, including \\\":\\\", optional.\\n * 5. Path, including \\\"/\\\", optional.\\n * 6. Query, including \\\"?\\\", optional.\\n * 7. Hash, including \\\"#\\\", optional.\\n */\\nconst urlRegex = /^([\\\\w+.-]+:)\\\\/\\\\/([^@/#?]*@)?([^:/#?]*)(:\\\\d+)?(\\\\/[^#?]*)?(\\\\?[^#]*)?(#.*)?/;\\n\\n/**\\n * File URLs are weird. They dont' need the regular `//` in the scheme, they may or may not start\\n * with a leading `/`, they can have a domain (but only if they don't start with a Windows drive).\\n *\\n * 1. Host, optional.\\n * 2. Path, which may include \\\"/\\\", guaranteed.\\n * 3. Query, including \\\"?\\\", optional.\\n * 4. Hash, including \\\"#\\\", optional.\\n */\\nconst fileRegex = /^file:(?:\\\\/\\\\/((?![a-z]:)[^/#?]*)?)?(\\\\/?[^#?]*)(\\\\?[^#]*)?(#.*)?/i;\\n\\ntype Url = {\\n  scheme: string;\\n  user: string;\\n  host: string;\\n  port: string;\\n  path: string;\\n  query: string;\\n  hash: string;\\n  type: UrlType;\\n};\\n\\nenum UrlType {\\n  Empty = 1,\\n  Hash = 2,\\n  Query = 3,\\n  RelativePath = 4,\\n  AbsolutePath = 5,\\n  SchemeRelative = 6,\\n  Absolute = 7,\\n}\\n\\nfunction isAbsoluteUrl(input: string): boolean {\\n  return schemeRegex.test(input);\\n}\\n\\nfunction isSchemeRelativeUrl(input: string): boolean {\\n  return input.startsWith('//');\\n}\\n\\nfunction isAbsolutePath(input: string): boolean {\\n  return input.startsWith('/');\\n}\\n\\nfunction isFileUrl(input: string): boolean {\\n  return input.startsWith('file:');\\n}\\n\\nfunction isRelative(input: string): boolean {\\n  return /^[.?#]/.test(input);\\n}\\n\\nfunction parseAbsoluteUrl(input: string): Url {\\n  const match = urlRegex.exec(input)!;\\n  return makeUrl(\\n    match[1],\\n    match[2] || '',\\n    match[3],\\n    match[4] || '',\\n    match[5] || '/',\\n    match[6] || '',\\n    match[7] || '',\\n  );\\n}\\n\\nfunction parseFileUrl(input: string): Url {\\n  const match = fileRegex.exec(input)!;\\n  const path = match[2];\\n  return makeUrl(\\n    'file:',\\n    '',\\n    match[1] || '',\\n    '',\\n    isAbsolutePath(path) ? path : '/' + path,\\n    match[3] || '',\\n    match[4] || '',\\n  );\\n}\\n\\nfunction makeUrl(\\n  scheme: string,\\n  user: string,\\n  host: string,\\n  port: string,\\n  path: string,\\n  query: string,\\n  hash: string,\\n): Url {\\n  return {\\n    scheme,\\n    user,\\n    host,\\n    port,\\n    path,\\n    query,\\n    hash,\\n    type: UrlType.Absolute,\\n  };\\n}\\n\\nfunction parseUrl(input: string): Url {\\n  if (isSchemeRelativeUrl(input)) {\\n    const url = parseAbsoluteUrl('http:' + input);\\n    url.scheme = '';\\n    url.type = UrlType.SchemeRelative;\\n    return url;\\n  }\\n\\n  if (isAbsolutePath(input)) {\\n    const url = parseAbsoluteUrl('http://foo.com' + input);\\n    url.scheme = '';\\n    url.host = '';\\n    url.type = UrlType.AbsolutePath;\\n    return url;\\n  }\\n\\n  if (isFileUrl(input)) return parseFileUrl(input);\\n\\n  if (isAbsoluteUrl(input)) return parseAbsoluteUrl(input);\\n\\n  const url = parseAbsoluteUrl('http://foo.com/' + input);\\n  url.scheme = '';\\n  url.host = '';\\n  url.type = input\\n    ? input.startsWith('?')\\n      ? UrlType.Query\\n      : input.startsWith('#')\\n      ? UrlType.Hash\\n      : UrlType.RelativePath\\n    : UrlType.Empty;\\n  return url;\\n}\\n\\nfunction stripPathFilename(path: string): string {\\n  // If a path ends with a parent directory \\\"..\\\", then it's a relative path with excess parent\\n  // paths. It's not a file, so we can't strip it.\\n  if (path.endsWith('/..')) return path;\\n  const index = path.lastIndexOf('/');\\n  return path.slice(0, index + 1);\\n}\\n\\nfunction mergePaths(url: Url, base: Url) {\\n  normalizePath(base, base.type);\\n\\n  // If the path is just a \\\"/\\\", then it was an empty path to begin with (remember, we're a relative\\n  // path).\\n  if (url.path === '/') {\\n    url.path = base.path;\\n  } else {\\n    // Resolution happens relative to the base path's directory, not the file.\\n    url.path = stripPathFilename(base.path) + url.path;\\n  }\\n}\\n\\n/**\\n * The path can have empty directories \\\"//\\\", unneeded parents \\\"foo/..\\\", or current directory\\n * \\\"foo/.\\\". We need to normalize to a standard representation.\\n */\\nfunction normalizePath(url: Url, type: UrlType) {\\n  const rel = type <= UrlType.RelativePath;\\n  const pieces = url.path.split('/');\\n\\n  // We need to preserve the first piece always, so that we output a leading slash. The item at\\n  // pieces[0] is an empty string.\\n  let pointer = 1;\\n\\n  // Positive is the number of real directories we've output, used for popping a parent directory.\\n  // Eg, \\\"foo/bar/..\\\" will have a positive 2, and we can decrement to be left with just \\\"foo\\\".\\n  let positive = 0;\\n\\n  // We need to keep a trailing slash if we encounter an empty directory (eg, splitting \\\"foo/\\\" will\\n  // generate `[\\\"foo\\\", \\\"\\\"]` pieces). And, if we pop a parent directory. But once we encounter a\\n  // real directory, we won't need to append, unless the other conditions happen again.\\n  let addTrailingSlash = false;\\n\\n  for (let i = 1; i < pieces.length; i++) {\\n    const piece = pieces[i];\\n\\n    // An empty directory, could be a trailing slash, or just a double \\\"//\\\" in the path.\\n    if (!piece) {\\n      addTrailingSlash = true;\\n      continue;\\n    }\\n\\n    // If we encounter a real directory, then we don't need to append anymore.\\n    addTrailingSlash = false;\\n\\n    // A current directory, which we can always drop.\\n    if (piece === '.') continue;\\n\\n    // A parent directory, we need to see if there are any real directories we can pop. Else, we\\n    // have an excess of parents, and we'll need to keep the \\\"..\\\".\\n    if (piece === '..') {\\n      if (positive) {\\n        addTrailingSlash = true;\\n        positive--;\\n        pointer--;\\n      } else if (rel) {\\n        // If we're in a relativePath, then we need to keep the excess parents. Else, in an absolute\\n        // URL, protocol relative URL, or an absolute path, we don't need to keep excess.\\n        pieces[pointer++] = piece;\\n      }\\n      continue;\\n    }\\n\\n    // We've encountered a real directory. Move it to the next insertion pointer, which accounts for\\n    // any popped or dropped directories.\\n    pieces[pointer++] = piece;\\n    positive++;\\n  }\\n\\n  let path = '';\\n  for (let i = 1; i < pointer; i++) {\\n    path += '/' + pieces[i];\\n  }\\n  if (!path || (addTrailingSlash && !path.endsWith('/..'))) {\\n    path += '/';\\n  }\\n  url.path = path;\\n}\\n\\n/**\\n * Attempts to resolve `input` URL/path relative to `base`.\\n */\\nexport default function resolve(input: string, base: string | undefined): string {\\n  if (!input && !base) return '';\\n\\n  const url = parseUrl(input);\\n  let inputType = url.type;\\n\\n  if (base && inputType !== UrlType.Absolute) {\\n    const baseUrl = parseUrl(base);\\n    const baseType = baseUrl.type;\\n\\n    switch (inputType) {\\n      case UrlType.Empty:\\n        url.hash = baseUrl.hash;\\n      // fall through\\n\\n      case UrlType.Hash:\\n        url.query = baseUrl.query;\\n      // fall through\\n\\n      case UrlType.Query:\\n      case UrlType.RelativePath:\\n        mergePaths(url, baseUrl);\\n      // fall through\\n\\n      case UrlType.AbsolutePath:\\n        // The host, user, and port are joined, you can't copy one without the others.\\n        url.user = baseUrl.user;\\n        url.host = baseUrl.host;\\n        url.port = baseUrl.port;\\n      // fall through\\n\\n      case UrlType.SchemeRelative:\\n        // The input doesn't have a schema at least, so we need to copy at least that over.\\n        url.scheme = baseUrl.scheme;\\n    }\\n    if (baseType > inputType) inputType = baseType;\\n  }\\n\\n  normalizePath(url, inputType);\\n\\n  const queryHash = url.query + url.hash;\\n  switch (inputType) {\\n    // This is impossible, because of the empty checks at the start of the function.\\n    // case UrlType.Empty:\\n\\n    case UrlType.Hash:\\n    case UrlType.Query:\\n      return queryHash;\\n\\n    case UrlType.RelativePath: {\\n      // The first char is always a \\\"/\\\", and we need it to be relative.\\n      const path = url.path.slice(1);\\n\\n      if (!path) return queryHash || '.';\\n\\n      if (isRelative(base || input) && !isRelative(path)) {\\n        // If base started with a leading \\\".\\\", or there is no base and input started with a \\\".\\\",\\n        // then we need to ensure that the relative path starts with a \\\".\\\". We don't know if\\n        // relative starts with a \\\"..\\\", though, so check before prepending.\\n        return './' + path + queryHash;\\n      }\\n\\n      return path + queryHash;\\n    }\\n\\n    case UrlType.AbsolutePath:\\n      return url.path + queryHash;\\n\\n    default:\\n      return url.scheme + '//' + url.user + url.host + url.port + url.path + queryHash;\\n  }\\n}\\n\"],\"names\":[],\"mappings\":\"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\"}/dist/resolve-uri.mjs.map9{\"version\":3,\"file\":\"resolve-uri.mjs\",\"sources\":[\"../src/resolve-uri.ts\"],\"sourcesContent\":[\"// Matches the scheme of a URL, eg \\\"http://\\\"\\nconst schemeRegex = /^[\\\\w+.-]+:\\\\/\\\\//;\\n\\n/**\\n * Matches the parts of a URL:\\n * 1. Scheme, including \\\":\\\", guaranteed.\\n * 2. User/password, including \\\"@\\\", optional.\\n * 3. Host, guaranteed.\\n * 4. Port, including \\\":\\\", optional.\\n * 5. Path, including \\\"/\\\", optional.\\n * 6. Query, including \\\"?\\\", optional.\\n * 7. Hash, including \\\"#\\\", optional.\\n */\\nconst urlRegex = /^([\\\\w+.-]+:)\\\\/\\\\/([^@/#?]*@)?([^:/#?]*)(:\\\\d+)?(\\\\/[^#?]*)?(\\\\?[^#]*)?(#.*)?/;\\n\\n/**\\n * File URLs are weird. They dont' need the regular `//` in the scheme, they may or may not start\\n * with a leading `/`, they can have a domain (but only if they don't start with a Windows drive).\\n *\\n * 1. Host, optional.\\n * 2. Path, which may include \\\"/\\\", guaranteed.\\n * 3. Query, including \\\"?\\\", optional.\\n * 4. Hash, including \\\"#\\\", optional.\\n */\\nconst fileRegex = /^file:(?:\\\\/\\\\/((?![a-z]:)[^/#?]*)?)?(\\\\/?[^#?]*)(\\\\?[^#]*)?(#.*)?/i;\\n\\ntype Url = {\\n  scheme: string;\\n  user: string;\\n  host: string;\\n  port: string;\\n  path: string;\\n  query: string;\\n  hash: string;\\n  type: UrlType;\\n};\\n\\nenum UrlType {\\n  Empty = 1,\\n  Hash = 2,\\n  Query = 3,\\n  RelativePath = 4,\\n  AbsolutePath = 5,\\n  SchemeRelative = 6,\\n  Absolute = 7,\\n}\\n\\nfunction isAbsoluteUrl(input: string): boolean {\\n  return schemeRegex.test(input);\\n}\\n\\nfunction isSchemeRelativeUrl(input: string): boolean {\\n  return input.startsWith('//');\\n}\\n\\nfunction isAbsolutePath(input: string): boolean {\\n  return input.startsWith('/');\\n}\\n\\nfunction isFileUrl(input: string): boolean {\\n  return input.startsWith('file:');\\n}\\n\\nfunction isRelative(input: string): boolean {\\n  return /^[.?#]/.test(input);\\n}\\n\\nfunction parseAbsoluteUrl(input: string): Url {\\n  const match = urlRegex.exec(input)!;\\n  return makeUrl(\\n    match[1],\\n    match[2] || '',\\n    match[3],\\n    match[4] || '',\\n    match[5] || '/',\\n    match[6] || '',\\n    match[7] || '',\\n  );\\n}\\n\\nfunction parseFileUrl(input: string): Url {\\n  const match = fileRegex.exec(input)!;\\n  const path = match[2];\\n  return makeUrl(\\n    'file:',\\n    '',\\n    match[1] || '',\\n    '',\\n    isAbsolutePath(path) ? path : '/' + path,\\n    match[3] || '',\\n    match[4] || '',\\n  );\\n}\\n\\nfunction makeUrl(\\n  scheme: string,\\n  user: string,\\n  host: string,\\n  port: string,\\n  path: string,\\n  query: string,\\n  hash: string,\\n): Url {\\n  return {\\n    scheme,\\n    user,\\n    host,\\n    port,\\n    path,\\n    query,\\n    hash,\\n    type: UrlType.Absolute,\\n  };\\n}\\n\\nfunction parseUrl(input: string): Url {\\n  if (isSchemeRelativeUrl(input)) {\\n    const url = parseAbsoluteUrl('http:' + input);\\n    url.scheme = '';\\n    url.type = UrlType.SchemeRelative;\\n    return url;\\n  }\\n\\n  if (isAbsolutePath(input)) {\\n    const url = parseAbsoluteUrl('http://foo.com' + input);\\n    url.scheme = '';\\n    url.host = '';\\n    url.type = UrlType.AbsolutePath;\\n    return url;\\n  }\\n\\n  if (isFileUrl(input)) return parseFileUrl(input);\\n\\n  if (isAbsoluteUrl(input)) return parseAbsoluteUrl(input);\\n\\n  const url = parseAbsoluteUrl('http://foo.com/' + input);\\n  url.scheme = '';\\n  url.host = '';\\n  url.type = input\\n    ? input.startsWith('?')\\n      ? UrlType.Query\\n      : input.startsWith('#')\\n      ? UrlType.Hash\\n      : UrlType.RelativePath\\n    : UrlType.Empty;\\n  return url;\\n}\\n\\nfunction stripPathFilename(path: string): string {\\n  // If a path ends with a parent directory \\\"..\\\", then it's a relative path with excess parent\\n  // paths. It's not a file, so we can't strip it.\\n  if (path.endsWith('/..')) return path;\\n  const index = path.lastIndexOf('/');\\n  return path.slice(0, index + 1);\\n}\\n\\nfunction mergePaths(url: Url, base: Url) {\\n  normalizePath(base, base.type);\\n\\n  // If the path is just a \\\"/\\\", then it was an empty path to begin with (remember, we're a relative\\n  // path).\\n  if (url.path === '/') {\\n    url.path = base.path;\\n  } else {\\n    // Resolution happens relative to the base path's directory, not the file.\\n    url.path = stripPathFilename(base.path) + url.path;\\n  }\\n}\\n\\n/**\\n * The path can have empty directories \\\"//\\\", unneeded parents \\\"foo/..\\\", or current directory\\n * \\\"foo/.\\\". We need to normalize to a standard representation.\\n */\\nfunction normalizePath(url: Url, type: UrlType) {\\n  const rel = type <= UrlType.RelativePath;\\n  const pieces = url.path.split('/');\\n\\n  // We need to preserve the first piece always, so that we output a leading slash. The item at\\n  // pieces[0] is an empty string.\\n  let pointer = 1;\\n\\n  // Positive is the number of real directories we've output, used for popping a parent directory.\\n  // Eg, \\\"foo/bar/..\\\" will have a positive 2, and we can decrement to be left with just \\\"foo\\\".\\n  let positive = 0;\\n\\n  // We need to keep a trailing slash if we encounter an empty directory (eg, splitting \\\"foo/\\\" will\\n  // generate `[\\\"foo\\\", \\\"\\\"]` pieces). And, if we pop a parent directory. But once we encounter a\\n  // real directory, we won't need to append, unless the other conditions happen again.\\n  let addTrailingSlash = false;\\n\\n  for (let i = 1; i < pieces.length; i++) {\\n    const piece = pieces[i];\\n\\n    // An empty directory, could be a trailing slash, or just a double \\\"//\\\" in the path.\\n    if (!piece) {\\n      addTrailingSlash = true;\\n      continue;\\n    }\\n\\n    // If we encounter a real directory, then we don't need to append anymore.\\n    addTrailingSlash = false;\\n\\n    // A current directory, which we can always drop.\\n    if (piece === '.') continue;\\n\\n    // A parent directory, we need to see if there are any real directories we can pop. Else, we\\n    // have an excess of parents, and we'll need to keep the \\\"..\\\".\\n    if (piece === '..') {\\n      if (positive) {\\n        addTrailingSlash = true;\\n        positive--;\\n        pointer--;\\n      } else if (rel) {\\n        // If we're in a relativePath, then we need to keep the excess parents. Else, in an absolute\\n        // URL, protocol relative URL, or an absolute path, we don't need to keep excess.\\n        pieces[pointer++] = piece;\\n      }\\n      continue;\\n    }\\n\\n    // We've encountered a real directory. Move it to the next insertion pointer, which accounts for\\n    // any popped or dropped directories.\\n    pieces[pointer++] = piece;\\n    positive++;\\n  }\\n\\n  let path = '';\\n  for (let i = 1; i < pointer; i++) {\\n    path += '/' + pieces[i];\\n  }\\n  if (!path || (addTrailingSlash && !path.endsWith('/..'))) {\\n    path += '/';\\n  }\\n  url.path = path;\\n}\\n\\n/**\\n * Attempts to resolve `input` URL/path relative to `base`.\\n */\\nexport default function resolve(input: string, base: string | undefined): string {\\n  if (!input && !base) return '';\\n\\n  const url = parseUrl(input);\\n  let inputType = url.type;\\n\\n  if (base && inputType !== UrlType.Absolute) {\\n    const baseUrl = parseUrl(base);\\n    const baseType = baseUrl.type;\\n\\n    switch (inputType) {\\n      case UrlType.Empty:\\n        url.hash = baseUrl.hash;\\n      // fall through\\n\\n      case UrlType.Hash:\\n        url.query = baseUrl.query;\\n      // fall through\\n\\n      case UrlType.Query:\\n      case UrlType.RelativePath:\\n        mergePaths(url, baseUrl);\\n      // fall through\\n\\n      case UrlType.AbsolutePath:\\n        // The host, user, and port are joined, you can't copy one without the others.\\n        url.user = baseUrl.user;\\n        url.host = baseUrl.host;\\n        url.port = baseUrl.port;\\n      // fall through\\n\\n      case UrlType.SchemeRelative:\\n        // The input doesn't have a schema at least, so we need to copy at least that over.\\n        url.scheme = baseUrl.scheme;\\n    }\\n    if (baseType > inputType) inputType = baseType;\\n  }\\n\\n  normalizePath(url, inputType);\\n\\n  const queryHash = url.query + url.hash;\\n  switch (inputType) {\\n    // This is impossible, because of the empty checks at the start of the function.\\n    // case UrlType.Empty:\\n\\n    case UrlType.Hash:\\n    case UrlType.Query:\\n      return queryHash;\\n\\n    case UrlType.RelativePath: {\\n      // The first char is always a \\\"/\\\", and we need it to be relative.\\n      const path = url.path.slice(1);\\n\\n      if (!path) return queryHash || '.';\\n\\n      if (isRelative(base || input) && !isRelative(path)) {\\n        // If base started with a leading \\\".\\\", or there is no base and input started with a \\\".\\\",\\n        // then we need to ensure that the relative path starts with a \\\".\\\". We don't know if\\n        // relative starts with a \\\"..\\\", though, so check before prepending.\\n        return './' + path + queryHash;\\n      }\\n\\n      return path + queryHash;\\n    }\\n\\n    case UrlType.AbsolutePath:\\n      return url.path + queryHash;\\n\\n    default:\\n      return url.scheme + '//' + url.user + url.host + url.port + url.path + queryHash;\\n  }\\n}\\n\"],\"names\":[],\"mappings\":\"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\"}/dist/types/resolve-uri.d.tsĖ/**\n * Attempts to resolve `input` URL/path relative to `base`.\n */\nexport default function resolve(input: string, base: string | undefined): string;\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QHByb3RvYnVmanMvY29kZWdlbkAyLjAuNA==",
    "content": "/index.d.ts\u0004export = codegen;\r\n\r\n/**\r\n * Appends code to the function's body.\r\n * @param [formatStringOrScope] Format string or, to finish the function, an object of additional scope variables, if any\r\n * @param [formatParams] Format parameters\r\n * @returns Itself or the generated function if finished\r\n * @throws {Error} If format parameter counts do not match\r\n */\r\ntype Codegen = (formatStringOrScope?: (string|{ [k: string]: any }), ...formatParams: any[]) => (Codegen|Function);\r\n\r\n/**\r\n * Begins generating a function.\r\n * @param functionParams Function parameter names\r\n * @param [functionName] Function name if not anonymous\r\n * @returns Appender that appends code to the function's body\r\n */\r\ndeclare function codegen(functionParams: string[], functionName?: string): Codegen;\r\n\r\n/**\r\n * Begins generating a function.\r\n * @param [functionName] Function name if not anonymous\r\n * @returns Appender that appends code to the function's body\r\n */\r\ndeclare function codegen(functionName?: string): Codegen;\r\n\r\ndeclare namespace codegen {\r\n\r\n    /** When set to `true`, codegen will log generated code to console. Useful for debugging. */\r\n    let verbose: boolean;\r\n}\r\n/LICENSE\u0005Copyright (c) 2016, Daniel Wirtz  All rights reserved.\r\n\r\nRedistribution and use in source and binary forms, with or without\r\nmodification, are permitted provided that the following conditions are\r\nmet:\r\n\r\n* Redistributions of source code must retain the above copyright\r\n  notice, this list of conditions and the following disclaimer.\r\n* Redistributions in binary form must reproduce the above copyright\r\n  notice, this list of conditions and the following disclaimer in the\r\n  documentation and/or other materials provided with the distribution.\r\n* Neither the name of its author, nor the names of its contributors\r\n  may be used to endorse or promote products derived from this software\r\n  without specific prior written permission.\r\n\r\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\r\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\r\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\r\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\r\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\r\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n/tests/index.js\u0001dvar codegen = require(\"..\");\r\n\r\n// new require(\"benchmark\").Suite().add(\"add\", function() {\r\n\r\nvar add = codegen([\"a\", \"b\"], \"add\")\r\n  (\"// awesome comment\")\r\n  (\"return a + b - c + %d\", 1)\r\n  ({ c: 1 });\r\n\r\nif (add(1, 2) !== 3)\r\n  throw Error(\"failed\");\r\n\r\n// }).on(\"cycle\", function(event) { process.stdout.write(String(event.target) + \"\\n\"); }).run();\r\n/README.md\u0007P@protobufjs/codegen\r\n===================\r\n[![npm](https://img.shields.io/npm/v/@protobufjs/codegen.svg)](https://www.npmjs.com/package/@protobufjs/codegen)\r\n\r\nA minimalistic code generation utility.\r\n\r\nAPI\r\n---\r\n\r\n* **codegen([functionParams: `string[]`], [functionName: string]): `Codegen`**<br />\r\n  Begins generating a function.\r\n\r\n* **codegen.verbose = `false`**<br />\r\n  When set to true, codegen will log generated code to console. Useful for debugging.\r\n\r\nInvoking **codegen** returns an appender function that appends code to the function's body and returns itself:\r\n\r\n* **Codegen(formatString: `string`, [...formatParams: `any`]): Codegen**<br />\r\n  Appends code to the function's body. The format string can contain placeholders specifying the types of inserted format parameters:\r\n\r\n  * `%d`: Number (integer or floating point value)\r\n  * `%f`: Floating point value\r\n  * `%i`: Integer value\r\n  * `%j`: JSON.stringify'ed value\r\n  * `%s`: String value\r\n  * `%%`: Percent sign<br />\r\n\r\n* **Codegen([scope: `Object.<string,*>`]): `Function`**<br />\r\n  Finishes the function and returns it.\r\n\r\n* **Codegen.toString([functionNameOverride: `string`]): `string`**<br />\r\n  Returns the function as a string.\r\n\r\nExample\r\n-------\r\n\r\n```js\r\nvar codegen = require(\"@protobufjs/codegen\");\r\n\r\nvar add = codegen([\"a\", \"b\"], \"add\") // A function with parameters \"a\" and \"b\" named \"add\"\r\n  (\"// awesome comment\")             // adds the line to the function's body\r\n  (\"return a + b - c + %d\", 1)       // replaces %d with 1 and adds the line to the body\r\n  ({ c: 1 });                        // adds \"c\" with a value of 1 to the function's scope\r\n\r\nconsole.log(add.toString()); // function add(a, b) { return a + b - c + 1 }\r\nconsole.log(add(1, 2));      // calculates 1 + 2 - 1 + 1 = 3\r\n```\r\n\r\n**License:** [BSD 3-Clause License](https://opensource.org/licenses/BSD-3-Clause)\r\n/package.json\u0001g{\r\n  \"name\": \"@protobufjs/codegen\",\r\n  \"description\": \"A minimalistic code generation utility.\",\r\n  \"version\": \"2.0.4\",\r\n  \"author\": \"Daniel Wirtz <dcode+protobufjs@dcode.io>\",\r\n  \"repository\": {\r\n    \"type\": \"git\",\r\n    \"url\": \"https://github.com/dcodeIO/protobuf.js.git\"\r\n  },\r\n  \"license\": \"BSD-3-Clause\",\r\n  \"main\": \"index.js\",\r\n  \"types\": \"index.d.ts\"\r\n}/index.js\u000f*\"use strict\";\r\nmodule.exports = codegen;\r\n\r\n/**\r\n * Begins generating a function.\r\n * @memberof util\r\n * @param {string[]} functionParams Function parameter names\r\n * @param {string} [functionName] Function name if not anonymous\r\n * @returns {Codegen} Appender that appends code to the function's body\r\n */\r\nfunction codegen(functionParams, functionName) {\r\n\r\n    /* istanbul ignore if */\r\n    if (typeof functionParams === \"string\") {\r\n        functionName = functionParams;\r\n        functionParams = undefined;\r\n    }\r\n\r\n    var body = [];\r\n\r\n    /**\r\n     * Appends code to the function's body or finishes generation.\r\n     * @typedef Codegen\r\n     * @type {function}\r\n     * @param {string|Object.<string,*>} [formatStringOrScope] Format string or, to finish the function, an object of additional scope variables, if any\r\n     * @param {...*} [formatParams] Format parameters\r\n     * @returns {Codegen|Function} Itself or the generated function if finished\r\n     * @throws {Error} If format parameter counts do not match\r\n     */\r\n\r\n    function Codegen(formatStringOrScope) {\r\n        // note that explicit array handling below makes this ~50% faster\r\n\r\n        // finish the function\r\n        if (typeof formatStringOrScope !== \"string\") {\r\n            var source = toString();\r\n            if (codegen.verbose)\r\n                console.log(\"codegen: \" + source); // eslint-disable-line no-console\r\n            source = \"return \" + source;\r\n            if (formatStringOrScope) {\r\n                var scopeKeys   = Object.keys(formatStringOrScope),\r\n                    scopeParams = new Array(scopeKeys.length + 1),\r\n                    scopeValues = new Array(scopeKeys.length),\r\n                    scopeOffset = 0;\r\n                while (scopeOffset < scopeKeys.length) {\r\n                    scopeParams[scopeOffset] = scopeKeys[scopeOffset];\r\n                    scopeValues[scopeOffset] = formatStringOrScope[scopeKeys[scopeOffset++]];\r\n                }\r\n                scopeParams[scopeOffset] = source;\r\n                return Function.apply(null, scopeParams).apply(null, scopeValues); // eslint-disable-line no-new-func\r\n            }\r\n            return Function(source)(); // eslint-disable-line no-new-func\r\n        }\r\n\r\n        // otherwise append to body\r\n        var formatParams = new Array(arguments.length - 1),\r\n            formatOffset = 0;\r\n        while (formatOffset < formatParams.length)\r\n            formatParams[formatOffset] = arguments[++formatOffset];\r\n        formatOffset = 0;\r\n        formatStringOrScope = formatStringOrScope.replace(/%([%dfijs])/g, function replace($0, $1) {\r\n            var value = formatParams[formatOffset++];\r\n            switch ($1) {\r\n                case \"d\": case \"f\": return String(Number(value));\r\n                case \"i\": return String(Math.floor(value));\r\n                case \"j\": return JSON.stringify(value);\r\n                case \"s\": return String(value);\r\n            }\r\n            return \"%\";\r\n        });\r\n        if (formatOffset !== formatParams.length)\r\n            throw Error(\"parameter count mismatch\");\r\n        body.push(formatStringOrScope);\r\n        return Codegen;\r\n    }\r\n\r\n    function toString(functionNameOverride) {\r\n        return \"function \" + (functionNameOverride || functionName || \"\") + \"(\" + (functionParams && functionParams.join(\",\") || \"\") + \"){\\n  \" + body.join(\"\\n  \") + \"\\n}\";\r\n    }\r\n\r\n    Codegen.toString = toString;\r\n    return Codegen;\r\n}\r\n\r\n/**\r\n * Begins generating a function.\r\n * @memberof util\r\n * @function codegen\r\n * @param {string} [functionName] Function name if not anonymous\r\n * @returns {Codegen} Appender that appends code to the function's body\r\n * @variation 2\r\n */\r\n\r\n/**\r\n * When set to `true`, codegen will log generated code to console. Useful for debugging.\r\n * @name util.codegen.verbose\r\n * @type {boolean}\r\n */\r\ncodegen.verbose = false;\r\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QHByb3RvYnVmanMvYXNwcm9taXNlQDEuMS4y",
    "content": "/index.js\u00068\"use strict\";\r\nmodule.exports = asPromise;\r\n\r\n/**\r\n * Callback as used by {@link util.asPromise}.\r\n * @typedef asPromiseCallback\r\n * @type {function}\r\n * @param {Error|null} error Error, if any\r\n * @param {...*} params Additional arguments\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Returns a promise from a node-style callback function.\r\n * @memberof util\r\n * @param {asPromiseCallback} fn Function to call\r\n * @param {*} ctx Function context\r\n * @param {...*} params Function arguments\r\n * @returns {Promise<*>} Promisified function\r\n */\r\nfunction asPromise(fn, ctx/*, varargs */) {\r\n    var params  = new Array(arguments.length - 1),\r\n        offset  = 0,\r\n        index   = 2,\r\n        pending = true;\r\n    while (index < arguments.length)\r\n        params[offset++] = arguments[index++];\r\n    return new Promise(function executor(resolve, reject) {\r\n        params[offset] = function callback(err/*, varargs */) {\r\n            if (pending) {\r\n                pending = false;\r\n                if (err)\r\n                    reject(err);\r\n                else {\r\n                    var params = new Array(arguments.length - 1),\r\n                        offset = 0;\r\n                    while (offset < params.length)\r\n                        params[offset++] = arguments[offset];\r\n                    resolve.apply(null, params);\r\n                }\r\n            }\r\n        };\r\n        try {\r\n            fn.apply(ctx || null, params);\r\n        } catch (err) {\r\n            if (pending) {\r\n                pending = false;\r\n                reject(err);\r\n            }\r\n        }\r\n    });\r\n}\r\n/LICENSE\u0005Copyright (c) 2016, Daniel Wirtz  All rights reserved.\r\n\r\nRedistribution and use in source and binary forms, with or without\r\nmodification, are permitted provided that the following conditions are\r\nmet:\r\n\r\n* Redistributions of source code must retain the above copyright\r\n  notice, this list of conditions and the following disclaimer.\r\n* Redistributions in binary form must reproduce the above copyright\r\n  notice, this list of conditions and the following disclaimer in the\r\n  documentation and/or other materials provided with the distribution.\r\n* Neither the name of its author, nor the names of its contributors\r\n  may be used to endorse or promote products derived from this software\r\n  without specific prior written permission.\r\n\r\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\r\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\r\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\r\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\r\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\r\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n/tests/index.js\u0011gvar tape = require(\"tape\");\r\n\r\nvar asPromise = require(\"..\");\r\n\r\ntape.test(\"aspromise\", function(test) {\r\n\r\n    test.test(this.name + \" - resolve\", function(test) {\r\n\r\n        function fn(arg1, arg2, callback) {\r\n            test.equal(this, ctx, \"function should be called with this = ctx\");\r\n            test.equal(arg1, 1, \"function should be called with arg1 = 1\");\r\n            test.equal(arg2, 2, \"function should be called with arg2 = 2\");\r\n            callback(null, arg2);\r\n        }\r\n\r\n        var ctx = {};\r\n\r\n        var promise = asPromise(fn, ctx, 1, 2);\r\n        promise.then(function(arg2) {\r\n            test.equal(arg2, 2, \"promise should be resolved with arg2 = 2\");\r\n            test.end();\r\n        }).catch(function(err) {\r\n            test.fail(\"promise should not be rejected (\" + err + \")\");\r\n        });\r\n    });\r\n\r\n    test.test(this.name + \" - reject\", function(test) {\r\n\r\n        function fn(arg1, arg2, callback) {\r\n            test.equal(this, ctx, \"function should be called with this = ctx\");\r\n            test.equal(arg1, 1, \"function should be called with arg1 = 1\");\r\n            test.equal(arg2, 2, \"function should be called with arg2 = 2\");\r\n            callback(arg1);\r\n        }\r\n\r\n        var ctx = {};\r\n\r\n        var promise = asPromise(fn, ctx, 1, 2);\r\n        promise.then(function() {\r\n            test.fail(\"promise should not be resolved\");\r\n        }).catch(function(err) {\r\n            test.equal(err, 1, \"promise should be rejected with err = 1\");\r\n            test.end();\r\n        });\r\n    });\r\n\r\n    test.test(this.name + \" - resolve twice\", function(test) {\r\n\r\n        function fn(arg1, arg2, callback) {\r\n            test.equal(this, ctx, \"function should be called with this = ctx\");\r\n            test.equal(arg1, 1, \"function should be called with arg1 = 1\");\r\n            test.equal(arg2, 2, \"function should be called with arg2 = 2\");\r\n            callback(null, arg2);\r\n            callback(null, arg1);\r\n        }\r\n\r\n        var ctx = {};\r\n        var count = 0;\r\n\r\n        var promise = asPromise(fn, ctx, 1, 2);\r\n        promise.then(function(arg2) {\r\n            test.equal(arg2, 2, \"promise should be resolved with arg2 = 2\");\r\n            if (++count > 1)\r\n                test.fail(\"promise should not be resolved twice\");\r\n            test.end();\r\n        }).catch(function(err) {\r\n            test.fail(\"promise should not be rejected (\" + err + \")\");\r\n        });\r\n    });\r\n\r\n    test.test(this.name + \" - reject twice\", function(test) {\r\n\r\n        function fn(arg1, arg2, callback) {\r\n            test.equal(this, ctx, \"function should be called with this = ctx\");\r\n            test.equal(arg1, 1, \"function should be called with arg1 = 1\");\r\n            test.equal(arg2, 2, \"function should be called with arg2 = 2\");\r\n            callback(arg1);\r\n            callback(arg2);\r\n        }\r\n\r\n        var ctx = {};\r\n        var count = 0;\r\n\r\n        var promise = asPromise(fn, ctx, 1, 2);\r\n        promise.then(function() {\r\n            test.fail(\"promise should not be resolved\");\r\n        }).catch(function(err) {\r\n            test.equal(err, 1, \"promise should be rejected with err = 1\");\r\n            if (++count > 1)\r\n                test.fail(\"promise should not be rejected twice\");\r\n            test.end();\r\n        });\r\n    });\r\n\r\n    test.test(this.name + \" - reject error\", function(test) {\r\n\r\n        function fn(callback) {\r\n            test.ok(arguments.length === 1 && typeof callback === \"function\", \"function should be called with just a callback\");\r\n            throw 3;\r\n        }\r\n\r\n        var promise = asPromise(fn, null);\r\n        promise.then(function() {\r\n            test.fail(\"promise should not be resolved\");\r\n        }).catch(function(err) {\r\n            test.equal(err, 3, \"promise should be rejected with err = 3\");\r\n            test.end();\r\n        });\r\n    });\r\n\r\n    test.test(this.name + \" - reject and error\", function(test) {\r\n\r\n        function fn(callback) {\r\n            callback(3);\r\n            throw 4;\r\n        }\r\n\r\n        var count = 0;\r\n\r\n        var promise = asPromise(fn, null);\r\n        promise.then(function() {\r\n            test.fail(\"promise should not be resolved\");\r\n        }).catch(function(err) {\r\n            test.equal(err, 3, \"promise should be rejected with err = 3\");\r\n            if (++count > 1)\r\n                test.fail(\"promise should not be rejected twice\");\r\n            test.end();\r\n        });\r\n    });\r\n});\r\n/package.json\u0002E{\r\n  \"name\": \"@protobufjs/aspromise\",\r\n  \"description\": \"Returns a promise from a node-style callback function.\",\r\n  \"version\": \"1.1.2\",\r\n  \"author\": \"Daniel Wirtz <dcode+protobufjs@dcode.io>\",\r\n  \"repository\": {\r\n    \"type\": \"git\",\r\n    \"url\": \"https://github.com/dcodeIO/protobuf.js.git\"\r\n  },\r\n  \"license\": \"BSD-3-Clause\",\r\n  \"main\": \"index.js\",\r\n  \"types\": \"index.d.ts\",\r\n  \"devDependencies\": {\r\n    \"istanbul\": \"^0.4.5\",\r\n    \"tape\": \"^4.6.3\"\r\n  },\r\n  \"scripts\": {\r\n    \"test\": \"tape tests/*.js\",\r\n    \"coverage\": \"istanbul cover node_modules/tape/bin/tape tests/*.js\"\r\n  }\r\n}/README.md\u0001@protobufjs/aspromise\r\n=====================\r\n[![npm](https://img.shields.io/npm/v/@protobufjs/aspromise.svg)](https://www.npmjs.com/package/@protobufjs/aspromise)\r\n\r\nReturns a promise from a node-style callback function.\r\n\r\nAPI\r\n---\r\n\r\n* **asPromise(fn: `function`, ctx: `Object`, ...params: `*`): `Promise<*>`**<br />\r\n  Returns a promise from a node-style callback function.\r\n\r\n**License:** [BSD 3-Clause License](https://opensource.org/licenses/BSD-3-Clause)\r\n/index.d.ts\u0001export = asPromise;\r\n\r\ntype asPromiseCallback = (error: Error | null, ...params: any[]) => {};\r\n\r\n/**\r\n * Returns a promise from a node-style callback function.\r\n * @memberof util\r\n * @param {asPromiseCallback} fn Function to call\r\n * @param {*} ctx Function context\r\n * @param {...*} params Function arguments\r\n * @returns {Promise<*>} Promisified function\r\n */\r\ndeclare function asPromise(fn: asPromiseCallback, ctx: any, ...params: any[]): Promise<any>;\r\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QHByb3RvYnVmanMvYmFzZTY0QDEuMS4y",
    "content": "/index.js\u000fg\"use strict\";\r\n\r\n/**\r\n * A minimal base64 implementation for number arrays.\r\n * @memberof util\r\n * @namespace\r\n */\r\nvar base64 = exports;\r\n\r\n/**\r\n * Calculates the byte length of a base64 encoded string.\r\n * @param {string} string Base64 encoded string\r\n * @returns {number} Byte length\r\n */\r\nbase64.length = function length(string) {\r\n    var p = string.length;\r\n    if (!p)\r\n        return 0;\r\n    var n = 0;\r\n    while (--p % 4 > 1 && string.charAt(p) === \"=\")\r\n        ++n;\r\n    return Math.ceil(string.length * 3) / 4 - n;\r\n};\r\n\r\n// Base64 encoding table\r\nvar b64 = new Array(64);\r\n\r\n// Base64 decoding table\r\nvar s64 = new Array(123);\r\n\r\n// 65..90, 97..122, 48..57, 43, 47\r\nfor (var i = 0; i < 64;)\r\n    s64[b64[i] = i < 26 ? i + 65 : i < 52 ? i + 71 : i < 62 ? i - 4 : i - 59 | 43] = i++;\r\n\r\n/**\r\n * Encodes a buffer to a base64 encoded string.\r\n * @param {Uint8Array} buffer Source buffer\r\n * @param {number} start Source start\r\n * @param {number} end Source end\r\n * @returns {string} Base64 encoded string\r\n */\r\nbase64.encode = function encode(buffer, start, end) {\r\n    var parts = null,\r\n        chunk = [];\r\n    var i = 0, // output index\r\n        j = 0, // goto index\r\n        t;     // temporary\r\n    while (start < end) {\r\n        var b = buffer[start++];\r\n        switch (j) {\r\n            case 0:\r\n                chunk[i++] = b64[b >> 2];\r\n                t = (b & 3) << 4;\r\n                j = 1;\r\n                break;\r\n            case 1:\r\n                chunk[i++] = b64[t | b >> 4];\r\n                t = (b & 15) << 2;\r\n                j = 2;\r\n                break;\r\n            case 2:\r\n                chunk[i++] = b64[t | b >> 6];\r\n                chunk[i++] = b64[b & 63];\r\n                j = 0;\r\n                break;\r\n        }\r\n        if (i > 8191) {\r\n            (parts || (parts = [])).push(String.fromCharCode.apply(String, chunk));\r\n            i = 0;\r\n        }\r\n    }\r\n    if (j) {\r\n        chunk[i++] = b64[t];\r\n        chunk[i++] = 61;\r\n        if (j === 1)\r\n            chunk[i++] = 61;\r\n    }\r\n    if (parts) {\r\n        if (i)\r\n            parts.push(String.fromCharCode.apply(String, chunk.slice(0, i)));\r\n        return parts.join(\"\");\r\n    }\r\n    return String.fromCharCode.apply(String, chunk.slice(0, i));\r\n};\r\n\r\nvar invalidEncoding = \"invalid encoding\";\r\n\r\n/**\r\n * Decodes a base64 encoded string to a buffer.\r\n * @param {string} string Source string\r\n * @param {Uint8Array} buffer Destination buffer\r\n * @param {number} offset Destination offset\r\n * @returns {number} Number of bytes written\r\n * @throws {Error} If encoding is invalid\r\n */\r\nbase64.decode = function decode(string, buffer, offset) {\r\n    var start = offset;\r\n    var j = 0, // goto index\r\n        t;     // temporary\r\n    for (var i = 0; i < string.length;) {\r\n        var c = string.charCodeAt(i++);\r\n        if (c === 61 && j > 1)\r\n            break;\r\n        if ((c = s64[c]) === undefined)\r\n            throw Error(invalidEncoding);\r\n        switch (j) {\r\n            case 0:\r\n                t = c;\r\n                j = 1;\r\n                break;\r\n            case 1:\r\n                buffer[offset++] = t << 2 | (c & 48) >> 4;\r\n                t = c;\r\n                j = 2;\r\n                break;\r\n            case 2:\r\n                buffer[offset++] = (t & 15) << 4 | (c & 60) >> 2;\r\n                t = c;\r\n                j = 3;\r\n                break;\r\n            case 3:\r\n                buffer[offset++] = (t & 3) << 6 | c;\r\n                j = 0;\r\n                break;\r\n        }\r\n    }\r\n    if (j === 1)\r\n        throw Error(invalidEncoding);\r\n    return offset - start;\r\n};\r\n\r\n/**\r\n * Tests if the specified string appears to be base64 encoded.\r\n * @param {string} string String to test\r\n * @returns {boolean} `true` if probably base64 encoded, otherwise false\r\n */\r\nbase64.test = function test(string) {\r\n    return /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(string);\r\n};\r\n/README.md\u0002@protobufjs/base64\r\n==================\r\n[![npm](https://img.shields.io/npm/v/@protobufjs/base64.svg)](https://www.npmjs.com/package/@protobufjs/base64)\r\n\r\nA minimal base64 implementation for number arrays.\r\n\r\nAPI\r\n---\r\n\r\n* **base64.length(string: `string`): `number`**<br />\r\n  Calculates the byte length of a base64 encoded string.\r\n\r\n* **base64.encode(buffer: `Uint8Array`, start: `number`, end: `number`): `string`**<br />\r\n  Encodes a buffer to a base64 encoded string.\r\n\r\n* **base64.decode(string: `string`, buffer: `Uint8Array`, offset: `number`): `number`**<br />\r\n  Decodes a base64 encoded string to a buffer.\r\n\r\n**License:** [BSD 3-Clause License](https://opensource.org/licenses/BSD-3-Clause)\r\n/LICENSE\u0005Copyright (c) 2016, Daniel Wirtz  All rights reserved.\r\n\r\nRedistribution and use in source and binary forms, with or without\r\nmodification, are permitted provided that the following conditions are\r\nmet:\r\n\r\n* Redistributions of source code must retain the above copyright\r\n  notice, this list of conditions and the following disclaimer.\r\n* Redistributions in binary form must reproduce the above copyright\r\n  notice, this list of conditions and the following disclaimer in the\r\n  documentation and/or other materials provided with the distribution.\r\n* Neither the name of its author, nor the names of its contributors\r\n  may be used to endorse or promote products derived from this software\r\n  without specific prior written permission.\r\n\r\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\r\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\r\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\r\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\r\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\r\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n/index.d.ts\u0004f/**\r\n * Calculates the byte length of a base64 encoded string.\r\n * @param {string} string Base64 encoded string\r\n * @returns {number} Byte length\r\n */\r\nexport function length(string: string): number;\r\n\r\n/**\r\n * Encodes a buffer to a base64 encoded string.\r\n * @param {Uint8Array} buffer Source buffer\r\n * @param {number} start Source start\r\n * @param {number} end Source end\r\n * @returns {string} Base64 encoded string\r\n */\r\nexport function encode(buffer: Uint8Array, start: number, end: number): string;\r\n\r\n/**\r\n * Decodes a base64 encoded string to a buffer.\r\n * @param {string} string Source string\r\n * @param {Uint8Array} buffer Destination buffer\r\n * @param {number} offset Destination offset\r\n * @returns {number} Number of bytes written\r\n * @throws {Error} If encoding is invalid\r\n */\r\nexport function decode(string: string, buffer: Uint8Array, offset: number): number;\r\n\r\n/**\r\n * Tests if the specified string appears to be base64 encoded.\r\n * @param {string} string String to test\r\n * @returns {boolean} `true` if it appears to be base64 encoded, otherwise false\r\n */\r\nexport function test(string: string): boolean;\r\n/package.json\u0002>{\r\n  \"name\": \"@protobufjs/base64\",\r\n  \"description\": \"A minimal base64 implementation for number arrays.\",\r\n  \"version\": \"1.1.2\",\r\n  \"author\": \"Daniel Wirtz <dcode+protobufjs@dcode.io>\",\r\n  \"repository\": {\r\n    \"type\": \"git\",\r\n    \"url\": \"https://github.com/dcodeIO/protobuf.js.git\"\r\n  },\r\n  \"license\": \"BSD-3-Clause\",\r\n  \"main\": \"index.js\",\r\n  \"types\": \"index.d.ts\",\r\n  \"devDependencies\": {\r\n    \"istanbul\": \"^0.4.5\",\r\n    \"tape\": \"^4.6.3\"\r\n  },\r\n  \"scripts\": {\r\n    \"test\": \"tape tests/*.js\",\r\n    \"coverage\": \"istanbul cover node_modules/tape/bin/tape tests/*.js\"\r\n  }\r\n}/tests/index.js\u0005[var tape = require(\"tape\");\r\n\r\nvar base64 = require(\"..\");\r\n\r\nvar strings = {\r\n    \"\": \"\",\r\n    \"a\": \"YQ==\",\r\n    \"ab\": \"YWI=\",\r\n    \"abcdefg\": \"YWJjZGVmZw==\",\r\n    \"abcdefgh\": \"YWJjZGVmZ2g=\",\r\n    \"abcdefghi\": \"YWJjZGVmZ2hp\"\r\n};\r\n\r\ntape.test(\"base64\", function(test) {\r\n\r\n    Object.keys(strings).forEach(function(str) {\r\n        var enc = strings[str];\r\n\r\n        test.equal(base64.test(enc), true, \"should detect '\" + enc + \"' to be base64 encoded\");\r\n\r\n        var len = base64.length(enc);\r\n        test.equal(len, str.length, \"should calculate '\" + enc + \"' as \" + str.length + \" bytes\");\r\n\r\n        var buf = new Array(len);\r\n        var len2 = base64.decode(enc, buf, 0);\r\n        test.equal(len2, len, \"should decode '\" + enc + \"' to \" + len + \" bytes\");\r\n\r\n        test.equal(String.fromCharCode.apply(String, buf), str, \"should decode '\" + enc + \"' to '\" + str + \"'\");\r\n\r\n        var enc2 = base64.encode(buf, 0, buf.length);\r\n        test.equal(enc2, enc, \"should encode '\" + str + \"' to '\" + enc + \"'\");\r\n\r\n    });\r\n\r\n    test.throws(function() {\r\n        var buf = new Array(10);\r\n        base64.decode(\"YQ!\", buf, 0);\r\n    }, Error, \"should throw if encoding is invalid\");\r\n\r\n    test.throws(function() {\r\n        var buf = new Array(10);\r\n        base64.decode(\"Y\", buf, 0);\r\n    }, Error, \"should throw if string is truncated\");\r\n\r\n    test.end();\r\n});\r\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QHByb3RvYnVmanMvZXZlbnRlbWl0dGVyQDEuMS4w",
    "content": "/index.d.ts\u0005\u000fexport = EventEmitter;\r\n\r\n/**\r\n * Constructs a new event emitter instance.\r\n * @classdesc A minimal event emitter.\r\n * @memberof util\r\n * @constructor\r\n */\r\ndeclare class EventEmitter {\r\n\r\n    /**\r\n     * Constructs a new event emitter instance.\r\n     * @classdesc A minimal event emitter.\r\n     * @memberof util\r\n     * @constructor\r\n     */\r\n    constructor();\r\n\r\n    /**\r\n     * Registers an event listener.\r\n     * @param {string} evt Event name\r\n     * @param {function} fn Listener\r\n     * @param {*} [ctx] Listener context\r\n     * @returns {util.EventEmitter} `this`\r\n     */\r\n    on(evt: string, fn: () => any, ctx?: any): EventEmitter;\r\n\r\n    /**\r\n     * Removes an event listener or any matching listeners if arguments are omitted.\r\n     * @param {string} [evt] Event name. Removes all listeners if omitted.\r\n     * @param {function} [fn] Listener to remove. Removes all listeners of `evt` if omitted.\r\n     * @returns {util.EventEmitter} `this`\r\n     */\r\n    off(evt?: string, fn?: () => any): EventEmitter;\r\n\r\n    /**\r\n     * Emits an event by calling its listeners with the specified arguments.\r\n     * @param {string} evt Event name\r\n     * @param {...*} args Arguments\r\n     * @returns {util.EventEmitter} `this`\r\n     */\r\n    emit(evt: string, ...args: any[]): EventEmitter;\r\n}\r\n/README.md\u00036@protobufjs/eventemitter\r\n========================\r\n[![npm](https://img.shields.io/npm/v/@protobufjs/eventemitter.svg)](https://www.npmjs.com/package/@protobufjs/eventemitter)\r\n\r\nA minimal event emitter.\r\n\r\nAPI\r\n---\r\n\r\n* **new EventEmitter()**<br />\r\n  Constructs a new event emitter instance.\r\n\r\n* **EventEmitter#on(evt: `string`, fn: `function`, [ctx: `Object`]): `EventEmitter`**<br />\r\n  Registers an event listener.\r\n\r\n* **EventEmitter#off([evt: `string`], [fn: `function`]): `EventEmitter`**<br />\r\n  Removes an event listener or any matching listeners if arguments are omitted.\r\n\r\n* **EventEmitter#emit(evt: `string`, ...args: `*`): `EventEmitter`**<br />\r\n  Emits an event by calling its listeners with the specified arguments.\r\n\r\n**License:** [BSD 3-Clause License](https://opensource.org/licenses/BSD-3-Clause)\r\n/index.js\b(\"use strict\";\r\nmodule.exports = EventEmitter;\r\n\r\n/**\r\n * Constructs a new event emitter instance.\r\n * @classdesc A minimal event emitter.\r\n * @memberof util\r\n * @constructor\r\n */\r\nfunction EventEmitter() {\r\n\r\n    /**\r\n     * Registered listeners.\r\n     * @type {Object.<string,*>}\r\n     * @private\r\n     */\r\n    this._listeners = {};\r\n}\r\n\r\n/**\r\n * Registers an event listener.\r\n * @param {string} evt Event name\r\n * @param {function} fn Listener\r\n * @param {*} [ctx] Listener context\r\n * @returns {util.EventEmitter} `this`\r\n */\r\nEventEmitter.prototype.on = function on(evt, fn, ctx) {\r\n    (this._listeners[evt] || (this._listeners[evt] = [])).push({\r\n        fn  : fn,\r\n        ctx : ctx || this\r\n    });\r\n    return this;\r\n};\r\n\r\n/**\r\n * Removes an event listener or any matching listeners if arguments are omitted.\r\n * @param {string} [evt] Event name. Removes all listeners if omitted.\r\n * @param {function} [fn] Listener to remove. Removes all listeners of `evt` if omitted.\r\n * @returns {util.EventEmitter} `this`\r\n */\r\nEventEmitter.prototype.off = function off(evt, fn) {\r\n    if (evt === undefined)\r\n        this._listeners = {};\r\n    else {\r\n        if (fn === undefined)\r\n            this._listeners[evt] = [];\r\n        else {\r\n            var listeners = this._listeners[evt];\r\n            for (var i = 0; i < listeners.length;)\r\n                if (listeners[i].fn === fn)\r\n                    listeners.splice(i, 1);\r\n                else\r\n                    ++i;\r\n        }\r\n    }\r\n    return this;\r\n};\r\n\r\n/**\r\n * Emits an event by calling its listeners with the specified arguments.\r\n * @param {string} evt Event name\r\n * @param {...*} args Arguments\r\n * @returns {util.EventEmitter} `this`\r\n */\r\nEventEmitter.prototype.emit = function emit(evt) {\r\n    var listeners = this._listeners[evt];\r\n    if (listeners) {\r\n        var args = [],\r\n            i = 1;\r\n        for (; i < arguments.length;)\r\n            args.push(arguments[i++]);\r\n        for (i = 0; i < listeners.length;)\r\n            listeners[i].fn.apply(listeners[i++].ctx, args);\r\n    }\r\n    return this;\r\n};\r\n/tests/index.js\u0005var tape = require(\"tape\");\r\n\r\nvar EventEmitter = require(\"..\");\r\n\r\ntape.test(\"eventemitter\", function(test) {\r\n\r\n    var ee = new EventEmitter();\r\n    var fn;\r\n    var ctx = {};\r\n\r\n    test.doesNotThrow(function() {\r\n        ee.emit(\"a\", 1);\r\n        ee.off();\r\n        ee.off(\"a\");\r\n        ee.off(\"a\", function() {});\r\n    }, \"should not throw if no listeners are registered\");\r\n    \r\n    test.equal(ee.on(\"a\", function(arg1) {\r\n        test.equal(this, ctx, \"should be called with this = ctx\");\r\n        test.equal(arg1, 1, \"should be called with arg1 = 1\");\r\n    }, ctx), ee, \"should return itself when registering events\");\r\n    ee.emit(\"a\", 1);\r\n\r\n    ee.off(\"a\");\r\n    test.same(ee._listeners, { a: [] }, \"should remove all listeners of the respective event when calling off(evt)\");\r\n\r\n    ee.off();\r\n    test.same(ee._listeners, {}, \"should remove all listeners when just calling off()\");\r\n\r\n    ee.on(\"a\", fn = function(arg1) {\r\n        test.equal(this, ctx, \"should be called with this = ctx\");\r\n        test.equal(arg1, 1, \"should be called with arg1 = 1\");\r\n    }, ctx).emit(\"a\", 1);\r\n\r\n    ee.off(\"a\", fn);\r\n    test.same(ee._listeners, { a: [] }, \"should remove the exact listener when calling off(evt, fn)\");\r\n\r\n    ee.on(\"a\", function() {\r\n        test.equal(this, ee, \"should be called with this = ee\");\r\n    }).emit(\"a\");\r\n\r\n    test.doesNotThrow(function() {\r\n        ee.off(\"a\", fn);\r\n    }, \"should not throw if no such listener is found\");\r\n\r\n    test.end();\r\n});\r\n/package.json\u0002*{\r\n  \"name\": \"@protobufjs/eventemitter\",\r\n  \"description\": \"A minimal event emitter.\",\r\n  \"version\": \"1.1.0\",\r\n  \"author\": \"Daniel Wirtz <dcode+protobufjs@dcode.io>\",\r\n  \"repository\": {\r\n    \"type\": \"git\",\r\n    \"url\": \"https://github.com/dcodeIO/protobuf.js.git\"\r\n  },\r\n  \"license\": \"BSD-3-Clause\",\r\n  \"main\": \"index.js\",\r\n  \"types\": \"index.d.ts\",\r\n  \"devDependencies\": {\r\n    \"istanbul\": \"^0.4.5\",\r\n    \"tape\": \"^4.6.3\"\r\n  },\r\n  \"scripts\": {\r\n    \"test\": \"tape tests/*.js\",\r\n    \"coverage\": \"istanbul cover node_modules/tape/bin/tape tests/*.js\"\r\n  }\r\n}/LICENSE\u0005Copyright (c) 2016, Daniel Wirtz  All rights reserved.\r\n\r\nRedistribution and use in source and binary forms, with or without\r\nmodification, are permitted provided that the following conditions are\r\nmet:\r\n\r\n* Redistributions of source code must retain the above copyright\r\n  notice, this list of conditions and the following disclaimer.\r\n* Redistributions in binary form must reproduce the above copyright\r\n  notice, this list of conditions and the following disclaimer in the\r\n  documentation and/or other materials provided with the distribution.\r\n* Neither the name of its author, nor the names of its contributors\r\n  may be used to endorse or promote products derived from this software\r\n  without specific prior written permission.\r\n\r\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\r\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\r\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\r\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\r\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\r\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QHByb3RvYnVmanMvZmV0Y2hAMS4xLjA=",
    "content": "/tests/index.js\u0001var tape = require(\"tape\");\r\n\r\nvar fetch = require(\"..\");\r\n\r\ntape.test(\"fetch\", function(test) {\r\n\r\n    if (typeof Promise !== \"undefined\") {\r\n        var promise = fetch(\"NOTFOUND\");\r\n        promise.catch(function() {});\r\n        test.ok(promise instanceof Promise, \"should return a promise if callback has been omitted\");\r\n    }\r\n\r\n    // TODO - some way to test this properly?\r\n    \r\n    test.end();\r\n});\r\n/package.json\u0002{\r\n  \"name\": \"@protobufjs/fetch\",\r\n  \"description\": \"Fetches the contents of a file accross node and browsers.\",\r\n  \"version\": \"1.1.0\",\r\n  \"author\": \"Daniel Wirtz <dcode+protobufjs@dcode.io>\",\r\n  \"repository\": {\r\n    \"type\": \"git\",\r\n    \"url\": \"https://github.com/dcodeIO/protobuf.js.git\"\r\n  },\r\n  \"dependencies\": {\r\n    \"@protobufjs/aspromise\": \"^1.1.1\",\r\n    \"@protobufjs/inquire\": \"^1.1.0\"\r\n  },\r\n  \"license\": \"BSD-3-Clause\",\r\n  \"main\": \"index.js\",\r\n  \"types\": \"index.d.ts\",\r\n  \"devDependencies\": {\r\n    \"istanbul\": \"^0.4.5\",\r\n    \"tape\": \"^4.6.3\"\r\n  },\r\n  \"scripts\": {\r\n    \"test\": \"tape tests/*.js\",\r\n    \"coverage\": \"istanbul cover node_modules/tape/bin/tape tests/*.js\"\r\n  }\r\n}/LICENSE\u0005Copyright (c) 2016, Daniel Wirtz  All rights reserved.\r\n\r\nRedistribution and use in source and binary forms, with or without\r\nmodification, are permitted provided that the following conditions are\r\nmet:\r\n\r\n* Redistributions of source code must retain the above copyright\r\n  notice, this list of conditions and the following disclaimer.\r\n* Redistributions in binary form must reproduce the above copyright\r\n  notice, this list of conditions and the following disclaimer in the\r\n  documentation and/or other materials provided with the distribution.\r\n* Neither the name of its author, nor the names of its contributors\r\n  may be used to endorse or promote products derived from this software\r\n  without specific prior written permission.\r\n\r\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\r\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\r\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\r\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\r\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\r\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n/index.js\u000f\"use strict\";\r\nmodule.exports = fetch;\r\n\r\nvar asPromise = require(\"@protobufjs/aspromise\"),\r\n    inquire   = require(\"@protobufjs/inquire\");\r\n\r\nvar fs = inquire(\"fs\");\r\n\r\n/**\r\n * Node-style callback as used by {@link util.fetch}.\r\n * @typedef FetchCallback\r\n * @type {function}\r\n * @param {?Error} error Error, if any, otherwise `null`\r\n * @param {string} [contents] File contents, if there hasn't been an error\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Options as used by {@link util.fetch}.\r\n * @typedef FetchOptions\r\n * @type {Object}\r\n * @property {boolean} [binary=false] Whether expecting a binary response\r\n * @property {boolean} [xhr=false] If `true`, forces the use of XMLHttpRequest\r\n */\r\n\r\n/**\r\n * Fetches the contents of a file.\r\n * @memberof util\r\n * @param {string} filename File path or url\r\n * @param {FetchOptions} options Fetch options\r\n * @param {FetchCallback} callback Callback function\r\n * @returns {undefined}\r\n */\r\nfunction fetch(filename, options, callback) {\r\n    if (typeof options === \"function\") {\r\n        callback = options;\r\n        options = {};\r\n    } else if (!options)\r\n        options = {};\r\n\r\n    if (!callback)\r\n        return asPromise(fetch, this, filename, options); // eslint-disable-line no-invalid-this\r\n\r\n    // if a node-like filesystem is present, try it first but fall back to XHR if nothing is found.\r\n    if (!options.xhr && fs && fs.readFile)\r\n        return fs.readFile(filename, function fetchReadFileCallback(err, contents) {\r\n            return err && typeof XMLHttpRequest !== \"undefined\"\r\n                ? fetch.xhr(filename, options, callback)\r\n                : err\r\n                ? callback(err)\r\n                : callback(null, options.binary ? contents : contents.toString(\"utf8\"));\r\n        });\r\n\r\n    // use the XHR version otherwise.\r\n    return fetch.xhr(filename, options, callback);\r\n}\r\n\r\n/**\r\n * Fetches the contents of a file.\r\n * @name util.fetch\r\n * @function\r\n * @param {string} path File path or url\r\n * @param {FetchCallback} callback Callback function\r\n * @returns {undefined}\r\n * @variation 2\r\n */\r\n\r\n/**\r\n * Fetches the contents of a file.\r\n * @name util.fetch\r\n * @function\r\n * @param {string} path File path or url\r\n * @param {FetchOptions} [options] Fetch options\r\n * @returns {Promise<string|Uint8Array>} Promise\r\n * @variation 3\r\n */\r\n\r\n/**/\r\nfetch.xhr = function fetch_xhr(filename, options, callback) {\r\n    var xhr = new XMLHttpRequest();\r\n    xhr.onreadystatechange /* works everywhere */ = function fetchOnReadyStateChange() {\r\n\r\n        if (xhr.readyState !== 4)\r\n            return undefined;\r\n\r\n        // local cors security errors return status 0 / empty string, too. afaik this cannot be\r\n        // reliably distinguished from an actually empty file for security reasons. feel free\r\n        // to send a pull request if you are aware of a solution.\r\n        if (xhr.status !== 0 && xhr.status !== 200)\r\n            return callback(Error(\"status \" + xhr.status));\r\n\r\n        // if binary data is expected, make sure that some sort of array is returned, even if\r\n        // ArrayBuffers are not supported. the binary string fallback, however, is unsafe.\r\n        if (options.binary) {\r\n            var buffer = xhr.response;\r\n            if (!buffer) {\r\n                buffer = [];\r\n                for (var i = 0; i < xhr.responseText.length; ++i)\r\n                    buffer.push(xhr.responseText.charCodeAt(i) & 255);\r\n            }\r\n            return callback(null, typeof Uint8Array !== \"undefined\" ? new Uint8Array(buffer) : buffer);\r\n        }\r\n        return callback(null, xhr.responseText);\r\n    };\r\n\r\n    if (options.binary) {\r\n        // ref: https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Sending_and_Receiving_Binary_Data#Receiving_binary_data_in_older_browsers\r\n        if (\"overrideMimeType\" in xhr)\r\n            xhr.overrideMimeType(\"text/plain; charset=x-user-defined\");\r\n        xhr.responseType = \"arraybuffer\";\r\n    }\r\n\r\n    xhr.open(\"GET\", filename);\r\n    xhr.send();\r\n};\r\n/README.md\u0001@protobufjs/fetch\r\n=================\r\n[![npm](https://img.shields.io/npm/v/@protobufjs/fetch.svg)](https://www.npmjs.com/package/@protobufjs/fetch)\r\n\r\nFetches the contents of a file accross node and browsers.\r\n\r\nAPI\r\n---\r\n\r\n* **fetch(path: `string`, [options: { binary: boolean } ], [callback: `function(error: ?Error, [contents: string])`]): `Promise<string|Uint8Array>|undefined`**\r\n  Fetches the contents of a file.\r\n\r\n**License:** [BSD 3-Clause License](https://opensource.org/licenses/BSD-3-Clause)\r\n/index.d.ts\u0006oexport = fetch;\r\n\r\n/**\r\n * Node-style callback as used by {@link util.fetch}.\r\n * @typedef FetchCallback\r\n * @type {function}\r\n * @param {?Error} error Error, if any, otherwise `null`\r\n * @param {string} [contents] File contents, if there hasn't been an error\r\n * @returns {undefined}\r\n */\r\ntype FetchCallback = (error: Error, contents?: string) => void;\r\n\r\n/**\r\n * Options as used by {@link util.fetch}.\r\n * @typedef FetchOptions\r\n * @type {Object}\r\n * @property {boolean} [binary=false] Whether expecting a binary response\r\n * @property {boolean} [xhr=false] If `true`, forces the use of XMLHttpRequest\r\n */\r\n\r\ninterface FetchOptions {\r\n    binary?: boolean;\r\n    xhr?: boolean\r\n}\r\n\r\n/**\r\n * Fetches the contents of a file.\r\n * @memberof util\r\n * @param {string} filename File path or url\r\n * @param {FetchOptions} options Fetch options\r\n * @param {FetchCallback} callback Callback function\r\n * @returns {undefined}\r\n */\r\ndeclare function fetch(filename: string, options: FetchOptions, callback: FetchCallback): void;\r\n\r\n/**\r\n * Fetches the contents of a file.\r\n * @name util.fetch\r\n * @function\r\n * @param {string} path File path or url\r\n * @param {FetchCallback} callback Callback function\r\n * @returns {undefined}\r\n * @variation 2\r\n */\r\ndeclare function fetch(path: string, callback: FetchCallback): void;\r\n\r\n/**\r\n * Fetches the contents of a file.\r\n * @name util.fetch\r\n * @function\r\n * @param {string} path File path or url\r\n * @param {FetchOptions} [options] Fetch options\r\n * @returns {Promise<string|Uint8Array>} Promise\r\n * @variation 3\r\n */\r\ndeclare function fetch(path: string, options?: FetchOptions): Promise<(string|Uint8Array)>;\r\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QHByb3RvYnVmanMvZmxvYXRAMS4wLjI=",
    "content": "/package.json\u0002{\r\n  \"name\": \"@protobufjs/float\",\r\n  \"description\": \"Reads / writes floats / doubles from / to buffers in both modern and ancient browsers.\",\r\n  \"version\": \"1.0.2\",\r\n  \"author\": \"Daniel Wirtz <dcode+protobufjs@dcode.io>\",\r\n  \"repository\": {\r\n    \"type\": \"git\",\r\n    \"url\": \"https://github.com/dcodeIO/protobuf.js.git\"\r\n  },\r\n  \"dependencies\": {},\r\n  \"license\": \"BSD-3-Clause\",\r\n  \"main\": \"index.js\",\r\n  \"types\": \"index.d.ts\",\r\n  \"devDependencies\": {\r\n    \"benchmark\": \"^2.1.4\",\r\n    \"chalk\": \"^1.1.3\",\r\n    \"ieee754\": \"^1.1.8\",\r\n    \"istanbul\": \"^0.4.5\",\r\n    \"tape\": \"^4.6.3\"\r\n  },\r\n  \"scripts\": {\r\n    \"test\": \"tape tests/*.js\",\r\n    \"coverage\": \"istanbul cover node_modules/tape/bin/tape tests/*.js\",\r\n    \"bench\": \"node bench\"\r\n  }\r\n}/bench/index.js\u0007\"use strict\";\r\n\r\nvar float = require(\"..\"),\r\n    ieee754 = require(\"ieee754\"),\r\n    newSuite = require(\"./suite\");\r\n\r\nvar F32 = Float32Array;\r\nvar F64 = Float64Array;\r\ndelete global.Float32Array;\r\ndelete global.Float64Array;\r\nvar floatFallback = float({});\r\nglobal.Float32Array = F32;\r\nglobal.Float64Array = F64;\r\n\r\nvar buf = new Buffer(8);\r\n\r\nnewSuite(\"writeFloat\")\r\n.add(\"float\", function() {\r\n    float.writeFloatLE(0.1, buf, 0);\r\n})\r\n.add(\"float (fallback)\", function() {\r\n    floatFallback.writeFloatLE(0.1, buf, 0);\r\n})\r\n.add(\"ieee754\", function() {\r\n    ieee754.write(buf, 0.1, 0, true, 23, 4);\r\n})\r\n.add(\"buffer\", function() {\r\n    buf.writeFloatLE(0.1, 0);\r\n})\r\n.add(\"buffer (noAssert)\", function() {\r\n    buf.writeFloatLE(0.1, 0, true);\r\n})\r\n.run();\r\n\r\nnewSuite(\"readFloat\")\r\n.add(\"float\", function() {\r\n    float.readFloatLE(buf, 0);\r\n})\r\n.add(\"float (fallback)\", function() {\r\n    floatFallback.readFloatLE(buf, 0);\r\n})\r\n.add(\"ieee754\", function() {\r\n    ieee754.read(buf, 0, true, 23, 4);\r\n})\r\n.add(\"buffer\", function() {\r\n    buf.readFloatLE(0);\r\n})\r\n.add(\"buffer (noAssert)\", function() {\r\n    buf.readFloatLE(0, true);\r\n})\r\n.run();\r\n\r\nnewSuite(\"writeDouble\")\r\n.add(\"float\", function() {\r\n    float.writeDoubleLE(0.1, buf, 0);\r\n})\r\n.add(\"float (fallback)\", function() {\r\n    floatFallback.writeDoubleLE(0.1, buf, 0);\r\n})\r\n.add(\"ieee754\", function() {\r\n    ieee754.write(buf, 0.1, 0, true, 52, 8);\r\n})\r\n.add(\"buffer\", function() {\r\n    buf.writeDoubleLE(0.1, 0);\r\n})\r\n.add(\"buffer (noAssert)\", function() {\r\n    buf.writeDoubleLE(0.1, 0, true);\r\n})\r\n.run();\r\n\r\nnewSuite(\"readDouble\")\r\n.add(\"float\", function() {\r\n    float.readDoubleLE(buf, 0);\r\n})\r\n.add(\"float (fallback)\", function() {\r\n    floatFallback.readDoubleLE(buf, 0);\r\n})\r\n.add(\"ieee754\", function() {\r\n    ieee754.read(buf, 0, true, 52, 8);\r\n})\r\n.add(\"buffer\", function() {\r\n    buf.readDoubleLE(0);\r\n})\r\n.add(\"buffer (noAssert)\", function() {\r\n    buf.readDoubleLE(0, true);\r\n})\r\n.run();\r\n/README.md\u00100@protobufjs/float\r\n=================\r\n[![npm](https://img.shields.io/npm/v/@protobufjs/float.svg)](https://www.npmjs.com/package/@protobufjs/float)\r\n\r\nReads / writes floats / doubles from / to buffers in both modern and ancient browsers. Fast.\r\n\r\nAPI\r\n---\r\n\r\n* **writeFloatLE(val: `number`, buf: `Uint8Array`, pos: `number`)**<br />\r\n  Writes a 32 bit float to a buffer using little endian byte order.\r\n\r\n* **writeFloatBE(val: `number`, buf: `Uint8Array`, pos: `number`)**<br />\r\n  Writes a 32 bit float to a buffer using big endian byte order.\r\n\r\n* **readFloatLE(buf: `Uint8Array`, pos: `number`): `number`**<br />\r\n  Reads a 32 bit float from a buffer using little endian byte order.\r\n\r\n* **readFloatBE(buf: `Uint8Array`, pos: `number`): `number`**<br />\r\n  Reads a 32 bit float from a buffer using big endian byte order.\r\n\r\n* **writeDoubleLE(val: `number`, buf: `Uint8Array`, pos: `number`)**<br />\r\n  Writes a 64 bit double to a buffer using little endian byte order.\r\n\r\n* **writeDoubleBE(val: `number`, buf: `Uint8Array`, pos: `number`)**<br />\r\n  Writes a 64 bit double to a buffer using big endian byte order.\r\n\r\n* **readDoubleLE(buf: `Uint8Array`, pos: `number`): `number`**<br />\r\n  Reads a 64 bit double from a buffer using little endian byte order.\r\n\r\n* **readDoubleBE(buf: `Uint8Array`, pos: `number`): `number`**<br />\r\n  Reads a 64 bit double from a buffer using big endian byte order.\r\n\r\nPerformance\r\n-----------\r\nThere is a simple benchmark included comparing raw read/write performance of this library (float), float's fallback for old browsers, the [ieee754](https://www.npmjs.com/package/ieee754) module and node's [buffer](https://nodejs.org/api/buffer.html). On an i7-2600k running node 6.9.1 it yields:\r\n\r\n```\r\nbenchmarking writeFloat performance ...\r\n\r\nfloat x 42,741,625 ops/sec ±1.75% (81 runs sampled)\r\nfloat (fallback) x 11,272,532 ops/sec ±1.12% (85 runs sampled)\r\nieee754 x 8,653,337 ops/sec ±1.18% (84 runs sampled)\r\nbuffer x 12,412,414 ops/sec ±1.41% (83 runs sampled)\r\nbuffer (noAssert) x 13,471,149 ops/sec ±1.09% (84 runs sampled)\r\n\r\n                      float was fastest\r\n           float (fallback) was 73.5% slower\r\n                    ieee754 was 79.6% slower\r\n                     buffer was 70.9% slower\r\n          buffer (noAssert) was 68.3% slower\r\n\r\nbenchmarking readFloat performance ...\r\n\r\nfloat x 44,382,729 ops/sec ±1.70% (84 runs sampled)\r\nfloat (fallback) x 20,925,938 ops/sec ±0.86% (87 runs sampled)\r\nieee754 x 17,189,009 ops/sec ±1.01% (87 runs sampled)\r\nbuffer x 10,518,437 ops/sec ±1.04% (83 runs sampled)\r\nbuffer (noAssert) x 11,031,636 ops/sec ±1.15% (87 runs sampled)\r\n\r\n                      float was fastest\r\n           float (fallback) was 52.5% slower\r\n                    ieee754 was 61.0% slower\r\n                     buffer was 76.1% slower\r\n          buffer (noAssert) was 75.0% slower\r\n\r\nbenchmarking writeDouble performance ...\r\n\r\nfloat x 38,624,906 ops/sec ±0.93% (83 runs sampled)\r\nfloat (fallback) x 10,457,811 ops/sec ±1.54% (85 runs sampled)\r\nieee754 x 7,681,130 ops/sec ±1.11% (83 runs sampled)\r\nbuffer x 12,657,876 ops/sec ±1.03% (83 runs sampled)\r\nbuffer (noAssert) x 13,372,795 ops/sec ±0.84% (85 runs sampled)\r\n\r\n                      float was fastest\r\n           float (fallback) was 73.1% slower\r\n                    ieee754 was 80.1% slower\r\n                     buffer was 67.3% slower\r\n          buffer (noAssert) was 65.3% slower\r\n\r\nbenchmarking readDouble performance ...\r\n\r\nfloat x 40,527,888 ops/sec ±1.05% (84 runs sampled)\r\nfloat (fallback) x 18,696,480 ops/sec ±0.84% (86 runs sampled)\r\nieee754 x 14,074,028 ops/sec ±1.04% (87 runs sampled)\r\nbuffer x 10,092,367 ops/sec ±1.15% (84 runs sampled)\r\nbuffer (noAssert) x 10,623,793 ops/sec ±0.96% (84 runs sampled)\r\n\r\n                      float was fastest\r\n           float (fallback) was 53.8% slower\r\n                    ieee754 was 65.3% slower\r\n                     buffer was 75.1% slower\r\n          buffer (noAssert) was 73.8% slower\r\n```\r\n\r\nTo run it yourself:\r\n\r\n```\r\n$> npm run bench\r\n```\r\n\r\n**License:** [BSD 3-Clause License](https://opensource.org/licenses/BSD-3-Clause)\r\n/index.d.ts\t/**\n * Writes a 32 bit float to a buffer using little endian byte order.\n * @name writeFloatLE\n * @function\n * @param {number} val Value to write\n * @param {Uint8Array} buf Target buffer\n * @param {number} pos Target buffer offset\n * @returns {undefined}\n */\nexport function writeFloatLE(val: number, buf: Uint8Array, pos: number): void;\n\n/**\n * Writes a 32 bit float to a buffer using big endian byte order.\n * @name writeFloatBE\n * @function\n * @param {number} val Value to write\n * @param {Uint8Array} buf Target buffer\n * @param {number} pos Target buffer offset\n * @returns {undefined}\n */\nexport function writeFloatBE(val: number, buf: Uint8Array, pos: number): void;\n\n/**\n * Reads a 32 bit float from a buffer using little endian byte order.\n * @name readFloatLE\n * @function\n * @param {Uint8Array} buf Source buffer\n * @param {number} pos Source buffer offset\n * @returns {number} Value read\n */\nexport function readFloatLE(buf: Uint8Array, pos: number): number;\n\n/**\n * Reads a 32 bit float from a buffer using big endian byte order.\n * @name readFloatBE\n * @function\n * @param {Uint8Array} buf Source buffer\n * @param {number} pos Source buffer offset\n * @returns {number} Value read\n */\nexport function readFloatBE(buf: Uint8Array, pos: number): number;\n\n/**\n * Writes a 64 bit double to a buffer using little endian byte order.\n * @name writeDoubleLE\n * @function\n * @param {number} val Value to write\n * @param {Uint8Array} buf Target buffer\n * @param {number} pos Target buffer offset\n * @returns {undefined}\n */\nexport function writeDoubleLE(val: number, buf: Uint8Array, pos: number): void;\n\n/**\n * Writes a 64 bit double to a buffer using big endian byte order.\n * @name writeDoubleBE\n * @function\n * @param {number} val Value to write\n * @param {Uint8Array} buf Target buffer\n * @param {number} pos Target buffer offset\n * @returns {undefined}\n */\nexport function writeDoubleBE(val: number, buf: Uint8Array, pos: number): void;\n\n/**\n * Reads a 64 bit double from a buffer using little endian byte order.\n * @name readDoubleLE\n * @function\n * @param {Uint8Array} buf Source buffer\n * @param {number} pos Source buffer offset\n * @returns {number} Value read\n */\nexport function readDoubleLE(buf: Uint8Array, pos: number): number;\n\n/**\n * Reads a 64 bit double from a buffer using big endian byte order.\n * @name readDoubleBE\n * @function\n * @param {Uint8Array} buf Source buffer\n * @param {number} pos Source buffer offset\n * @returns {number} Value read\n */\nexport function readDoubleBE(buf: Uint8Array, pos: number): number;\n/LICENSE\u0005Copyright (c) 2016, Daniel Wirtz  All rights reserved.\r\n\r\nRedistribution and use in source and binary forms, with or without\r\nmodification, are permitted provided that the following conditions are\r\nmet:\r\n\r\n* Redistributions of source code must retain the above copyright\r\n  notice, this list of conditions and the following disclaimer.\r\n* Redistributions in binary form must reproduce the above copyright\r\n  notice, this list of conditions and the following disclaimer in the\r\n  documentation and/or other materials provided with the distribution.\r\n* Neither the name of its author, nor the names of its contributors\r\n  may be used to endorse or promote products derived from this software\r\n  without specific prior written permission.\r\n\r\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\r\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\r\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\r\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\r\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\r\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n/tests/index.js\f\u001evar tape = require(\"tape\");\r\n\r\nvar float = require(\"..\");\r\n\r\ntape.test(\"float\", function(test) {\r\n\r\n    // default\r\n    test.test(test.name + \" - typed array\", function(test) {\r\n        runTest(float, test);\r\n    });\r\n\r\n    // ieee754\r\n    test.test(test.name + \" - fallback\", function(test) {\r\n        var F32 = global.Float32Array,\r\n            F64 = global.Float64Array;\r\n        delete global.Float32Array;\r\n        delete global.Float64Array;\r\n        runTest(float({}), test);\r\n        global.Float32Array = F32;\r\n        global.Float64Array = F64;\r\n    });\r\n});\r\n\r\nfunction runTest(float, test) {\r\n\r\n    var common = [\r\n        0,\r\n        -0,\r\n        Infinity,\r\n        -Infinity,\r\n        0.125,\r\n        1024.5,\r\n        -4096.5,\r\n        NaN\r\n    ];\r\n\r\n    test.test(test.name + \" - using 32 bits\", function(test) {\r\n        common.concat([\r\n            3.4028234663852886e+38,\r\n            1.1754943508222875e-38,\r\n            1.1754946310819804e-39\r\n        ])\r\n        .forEach(function(value) {\r\n            var strval = value === 0 && 1 / value < 0 ? \"-0\" : value.toString();\r\n            test.ok(\r\n                checkValue(value, 4, float.readFloatLE, float.writeFloatLE, Buffer.prototype.writeFloatLE),\r\n                \"should write and read back \" + strval + \" (32 bit LE)\"\r\n            );\r\n            test.ok(\r\n                checkValue(value, 4, float.readFloatBE, float.writeFloatBE, Buffer.prototype.writeFloatBE),\r\n                \"should write and read back \" + strval + \" (32 bit BE)\"\r\n            );\r\n        });\r\n        test.end();\r\n    });\r\n\r\n    test.test(test.name + \" - using 64 bits\", function(test) {\r\n        common.concat([\r\n            1.7976931348623157e+308,\r\n            2.2250738585072014e-308,\r\n            2.2250738585072014e-309\r\n        ])\r\n        .forEach(function(value) {\r\n            var strval = value === 0 && 1 / value < 0 ? \"-0\" : value.toString();\r\n            test.ok(\r\n                checkValue(value, 8, float.readDoubleLE, float.writeDoubleLE, Buffer.prototype.writeDoubleLE),\r\n                \"should write and read back \" + strval + \" (64 bit LE)\"\r\n            );\r\n            test.ok(\r\n                checkValue(value, 8, float.readDoubleBE, float.writeDoubleBE, Buffer.prototype.writeDoubleBE),\r\n                \"should write and read back \" + strval + \" (64 bit BE)\"\r\n            );\r\n        });\r\n        test.end();\r\n    });\r\n\r\n    test.end();\r\n}\r\n\r\nfunction checkValue(value, size, read, write, write_comp) {\r\n    var buffer = new Buffer(size);\r\n    write(value, buffer, 0);\r\n    var value_comp = read(buffer, 0);\r\n    var strval = value === 0 && 1 / value < 0 ? \"-0\" : value.toString();\r\n    if (value !== value) {\r\n        if (value_comp === value_comp)\r\n            return false;\r\n    } else if (value_comp !== value)\r\n        return false;\r\n\r\n    var buffer_comp = new Buffer(size);\r\n    write_comp.call(buffer_comp, value, 0);\r\n    for (var i = 0; i < size; ++i)\r\n        if (buffer[i] !== buffer_comp[i]) {\r\n            console.error(\">\", buffer, buffer_comp);\r\n            return false;\r\n        }\r\n\r\n    return true;\r\n}/bench/suite.js\u0005\"use strict\";\r\nmodule.exports = newSuite;\r\n\r\nvar benchmark = require(\"benchmark\"),\r\n    chalk     = require(\"chalk\");\r\n\r\nvar padSize = 27;\r\n\r\nfunction newSuite(name) {\r\n    var benches = [];\r\n    return new benchmark.Suite(name)\r\n    .on(\"add\", function(event) {\r\n        benches.push(event.target);\r\n    })\r\n    .on(\"start\", function() {\r\n        process.stdout.write(\"benchmarking \" + name + \" performance ...\\n\\n\");\r\n    })\r\n    .on(\"cycle\", function(event) {\r\n        process.stdout.write(String(event.target) + \"\\n\");\r\n    })\r\n    .on(\"complete\", function() {\r\n        if (benches.length > 1) {\r\n            var fastest = this.filter(\"fastest\"), // eslint-disable-line no-invalid-this\r\n                fastestHz = getHz(fastest[0]);\r\n            process.stdout.write(\"\\n\" + chalk.white(pad(fastest[0].name, padSize)) + \" was \" + chalk.green(\"fastest\") + \"\\n\");\r\n            benches.forEach(function(bench) {\r\n                if (fastest.indexOf(bench) === 0)\r\n                    return;\r\n                var hz = hz = getHz(bench);\r\n                var percent = (1 - hz / fastestHz) * 100;\r\n                process.stdout.write(chalk.white(pad(bench.name, padSize)) + \" was \" + chalk.red(percent.toFixed(1) + \"% slower\") + \"\\n\");\r\n            });\r\n        }\r\n        process.stdout.write(\"\\n\");\r\n    });\r\n}\r\n\r\nfunction getHz(bench) {\r\n    return 1 / (bench.stats.mean + bench.stats.moe);\r\n}\r\n\r\nfunction pad(str, len, l) {\r\n    while (str.length < len)\r\n        str = l ? str + \" \" : \" \" + str;\r\n    return str;\r\n}\r\n/index.js,\"use strict\";\r\n\r\nmodule.exports = factory(factory);\r\n\r\n/**\r\n * Reads / writes floats / doubles from / to buffers.\r\n * @name util.float\r\n * @namespace\r\n */\r\n\r\n/**\r\n * Writes a 32 bit float to a buffer using little endian byte order.\r\n * @name util.float.writeFloatLE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Writes a 32 bit float to a buffer using big endian byte order.\r\n * @name util.float.writeFloatBE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Reads a 32 bit float from a buffer using little endian byte order.\r\n * @name util.float.readFloatLE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Reads a 32 bit float from a buffer using big endian byte order.\r\n * @name util.float.readFloatBE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Writes a 64 bit double to a buffer using little endian byte order.\r\n * @name util.float.writeDoubleLE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Writes a 64 bit double to a buffer using big endian byte order.\r\n * @name util.float.writeDoubleBE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Reads a 64 bit double from a buffer using little endian byte order.\r\n * @name util.float.readDoubleLE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Reads a 64 bit double from a buffer using big endian byte order.\r\n * @name util.float.readDoubleBE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n// Factory function for the purpose of node-based testing in modified global environments\r\nfunction factory(exports) {\r\n\r\n    // float: typed array\r\n    if (typeof Float32Array !== \"undefined\") (function() {\r\n\r\n        var f32 = new Float32Array([ -0 ]),\r\n            f8b = new Uint8Array(f32.buffer),\r\n            le  = f8b[3] === 128;\r\n\r\n        function writeFloat_f32_cpy(val, buf, pos) {\r\n            f32[0] = val;\r\n            buf[pos    ] = f8b[0];\r\n            buf[pos + 1] = f8b[1];\r\n            buf[pos + 2] = f8b[2];\r\n            buf[pos + 3] = f8b[3];\r\n        }\r\n\r\n        function writeFloat_f32_rev(val, buf, pos) {\r\n            f32[0] = val;\r\n            buf[pos    ] = f8b[3];\r\n            buf[pos + 1] = f8b[2];\r\n            buf[pos + 2] = f8b[1];\r\n            buf[pos + 3] = f8b[0];\r\n        }\r\n\r\n        /* istanbul ignore next */\r\n        exports.writeFloatLE = le ? writeFloat_f32_cpy : writeFloat_f32_rev;\r\n        /* istanbul ignore next */\r\n        exports.writeFloatBE = le ? writeFloat_f32_rev : writeFloat_f32_cpy;\r\n\r\n        function readFloat_f32_cpy(buf, pos) {\r\n            f8b[0] = buf[pos    ];\r\n            f8b[1] = buf[pos + 1];\r\n            f8b[2] = buf[pos + 2];\r\n            f8b[3] = buf[pos + 3];\r\n            return f32[0];\r\n        }\r\n\r\n        function readFloat_f32_rev(buf, pos) {\r\n            f8b[3] = buf[pos    ];\r\n            f8b[2] = buf[pos + 1];\r\n            f8b[1] = buf[pos + 2];\r\n            f8b[0] = buf[pos + 3];\r\n            return f32[0];\r\n        }\r\n\r\n        /* istanbul ignore next */\r\n        exports.readFloatLE = le ? readFloat_f32_cpy : readFloat_f32_rev;\r\n        /* istanbul ignore next */\r\n        exports.readFloatBE = le ? readFloat_f32_rev : readFloat_f32_cpy;\r\n\r\n    // float: ieee754\r\n    })(); else (function() {\r\n\r\n        function writeFloat_ieee754(writeUint, val, buf, pos) {\r\n            var sign = val < 0 ? 1 : 0;\r\n            if (sign)\r\n                val = -val;\r\n            if (val === 0)\r\n                writeUint(1 / val > 0 ? /* positive */ 0 : /* negative 0 */ 2147483648, buf, pos);\r\n            else if (isNaN(val))\r\n                writeUint(2143289344, buf, pos);\r\n            else if (val > 3.4028234663852886e+38) // +-Infinity\r\n                writeUint((sign << 31 | 2139095040) >>> 0, buf, pos);\r\n            else if (val < 1.1754943508222875e-38) // denormal\r\n                writeUint((sign << 31 | Math.round(val / 1.401298464324817e-45)) >>> 0, buf, pos);\r\n            else {\r\n                var exponent = Math.floor(Math.log(val) / Math.LN2),\r\n                    mantissa = Math.round(val * Math.pow(2, -exponent) * 8388608) & 8388607;\r\n                writeUint((sign << 31 | exponent + 127 << 23 | mantissa) >>> 0, buf, pos);\r\n            }\r\n        }\r\n\r\n        exports.writeFloatLE = writeFloat_ieee754.bind(null, writeUintLE);\r\n        exports.writeFloatBE = writeFloat_ieee754.bind(null, writeUintBE);\r\n\r\n        function readFloat_ieee754(readUint, buf, pos) {\r\n            var uint = readUint(buf, pos),\r\n                sign = (uint >> 31) * 2 + 1,\r\n                exponent = uint >>> 23 & 255,\r\n                mantissa = uint & 8388607;\r\n            return exponent === 255\r\n                ? mantissa\r\n                ? NaN\r\n                : sign * Infinity\r\n                : exponent === 0 // denormal\r\n                ? sign * 1.401298464324817e-45 * mantissa\r\n                : sign * Math.pow(2, exponent - 150) * (mantissa + 8388608);\r\n        }\r\n\r\n        exports.readFloatLE = readFloat_ieee754.bind(null, readUintLE);\r\n        exports.readFloatBE = readFloat_ieee754.bind(null, readUintBE);\r\n\r\n    })();\r\n\r\n    // double: typed array\r\n    if (typeof Float64Array !== \"undefined\") (function() {\r\n\r\n        var f64 = new Float64Array([-0]),\r\n            f8b = new Uint8Array(f64.buffer),\r\n            le  = f8b[7] === 128;\r\n\r\n        function writeDouble_f64_cpy(val, buf, pos) {\r\n            f64[0] = val;\r\n            buf[pos    ] = f8b[0];\r\n            buf[pos + 1] = f8b[1];\r\n            buf[pos + 2] = f8b[2];\r\n            buf[pos + 3] = f8b[3];\r\n            buf[pos + 4] = f8b[4];\r\n            buf[pos + 5] = f8b[5];\r\n            buf[pos + 6] = f8b[6];\r\n            buf[pos + 7] = f8b[7];\r\n        }\r\n\r\n        function writeDouble_f64_rev(val, buf, pos) {\r\n            f64[0] = val;\r\n            buf[pos    ] = f8b[7];\r\n            buf[pos + 1] = f8b[6];\r\n            buf[pos + 2] = f8b[5];\r\n            buf[pos + 3] = f8b[4];\r\n            buf[pos + 4] = f8b[3];\r\n            buf[pos + 5] = f8b[2];\r\n            buf[pos + 6] = f8b[1];\r\n            buf[pos + 7] = f8b[0];\r\n        }\r\n\r\n        /* istanbul ignore next */\r\n        exports.writeDoubleLE = le ? writeDouble_f64_cpy : writeDouble_f64_rev;\r\n        /* istanbul ignore next */\r\n        exports.writeDoubleBE = le ? writeDouble_f64_rev : writeDouble_f64_cpy;\r\n\r\n        function readDouble_f64_cpy(buf, pos) {\r\n            f8b[0] = buf[pos    ];\r\n            f8b[1] = buf[pos + 1];\r\n            f8b[2] = buf[pos + 2];\r\n            f8b[3] = buf[pos + 3];\r\n            f8b[4] = buf[pos + 4];\r\n            f8b[5] = buf[pos + 5];\r\n            f8b[6] = buf[pos + 6];\r\n            f8b[7] = buf[pos + 7];\r\n            return f64[0];\r\n        }\r\n\r\n        function readDouble_f64_rev(buf, pos) {\r\n            f8b[7] = buf[pos    ];\r\n            f8b[6] = buf[pos + 1];\r\n            f8b[5] = buf[pos + 2];\r\n            f8b[4] = buf[pos + 3];\r\n            f8b[3] = buf[pos + 4];\r\n            f8b[2] = buf[pos + 5];\r\n            f8b[1] = buf[pos + 6];\r\n            f8b[0] = buf[pos + 7];\r\n            return f64[0];\r\n        }\r\n\r\n        /* istanbul ignore next */\r\n        exports.readDoubleLE = le ? readDouble_f64_cpy : readDouble_f64_rev;\r\n        /* istanbul ignore next */\r\n        exports.readDoubleBE = le ? readDouble_f64_rev : readDouble_f64_cpy;\r\n\r\n    // double: ieee754\r\n    })(); else (function() {\r\n\r\n        function writeDouble_ieee754(writeUint, off0, off1, val, buf, pos) {\r\n            var sign = val < 0 ? 1 : 0;\r\n            if (sign)\r\n                val = -val;\r\n            if (val === 0) {\r\n                writeUint(0, buf, pos + off0);\r\n                writeUint(1 / val > 0 ? /* positive */ 0 : /* negative 0 */ 2147483648, buf, pos + off1);\r\n            } else if (isNaN(val)) {\r\n                writeUint(0, buf, pos + off0);\r\n                writeUint(2146959360, buf, pos + off1);\r\n            } else if (val > 1.7976931348623157e+308) { // +-Infinity\r\n                writeUint(0, buf, pos + off0);\r\n                writeUint((sign << 31 | 2146435072) >>> 0, buf, pos + off1);\r\n            } else {\r\n                var mantissa;\r\n                if (val < 2.2250738585072014e-308) { // denormal\r\n                    mantissa = val / 5e-324;\r\n                    writeUint(mantissa >>> 0, buf, pos + off0);\r\n                    writeUint((sign << 31 | mantissa / 4294967296) >>> 0, buf, pos + off1);\r\n                } else {\r\n                    var exponent = Math.floor(Math.log(val) / Math.LN2);\r\n                    if (exponent === 1024)\r\n                        exponent = 1023;\r\n                    mantissa = val * Math.pow(2, -exponent);\r\n                    writeUint(mantissa * 4503599627370496 >>> 0, buf, pos + off0);\r\n                    writeUint((sign << 31 | exponent + 1023 << 20 | mantissa * 1048576 & 1048575) >>> 0, buf, pos + off1);\r\n                }\r\n            }\r\n        }\r\n\r\n        exports.writeDoubleLE = writeDouble_ieee754.bind(null, writeUintLE, 0, 4);\r\n        exports.writeDoubleBE = writeDouble_ieee754.bind(null, writeUintBE, 4, 0);\r\n\r\n        function readDouble_ieee754(readUint, off0, off1, buf, pos) {\r\n            var lo = readUint(buf, pos + off0),\r\n                hi = readUint(buf, pos + off1);\r\n            var sign = (hi >> 31) * 2 + 1,\r\n                exponent = hi >>> 20 & 2047,\r\n                mantissa = 4294967296 * (hi & 1048575) + lo;\r\n            return exponent === 2047\r\n                ? mantissa\r\n                ? NaN\r\n                : sign * Infinity\r\n                : exponent === 0 // denormal\r\n                ? sign * 5e-324 * mantissa\r\n                : sign * Math.pow(2, exponent - 1075) * (mantissa + 4503599627370496);\r\n        }\r\n\r\n        exports.readDoubleLE = readDouble_ieee754.bind(null, readUintLE, 0, 4);\r\n        exports.readDoubleBE = readDouble_ieee754.bind(null, readUintBE, 4, 0);\r\n\r\n    })();\r\n\r\n    return exports;\r\n}\r\n\r\n// uint helpers\r\n\r\nfunction writeUintLE(val, buf, pos) {\r\n    buf[pos    ] =  val        & 255;\r\n    buf[pos + 1] =  val >>> 8  & 255;\r\n    buf[pos + 2] =  val >>> 16 & 255;\r\n    buf[pos + 3] =  val >>> 24;\r\n}\r\n\r\nfunction writeUintBE(val, buf, pos) {\r\n    buf[pos    ] =  val >>> 24;\r\n    buf[pos + 1] =  val >>> 16 & 255;\r\n    buf[pos + 2] =  val >>> 8  & 255;\r\n    buf[pos + 3] =  val        & 255;\r\n}\r\n\r\nfunction readUintLE(buf, pos) {\r\n    return (buf[pos    ]\r\n          | buf[pos + 1] << 8\r\n          | buf[pos + 2] << 16\r\n          | buf[pos + 3] << 24) >>> 0;\r\n}\r\n\r\nfunction readUintBE(buf, pos) {\r\n    return (buf[pos    ] << 24\r\n          | buf[pos + 1] << 16\r\n          | buf[pos + 2] << 8\r\n          | buf[pos + 3]) >>> 0;\r\n}\r\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QHByb3RvYnVmanMvaW5xdWlyZUAxLjEuMA==",
    "content": "/package.json\u0002Z{\r\n  \"name\": \"@protobufjs/inquire\",\r\n  \"description\": \"Requires a module only if available and hides the require call from bundlers.\",\r\n  \"version\": \"1.1.0\",\r\n  \"author\": \"Daniel Wirtz <dcode+protobufjs@dcode.io>\",\r\n  \"repository\": {\r\n    \"type\": \"git\",\r\n    \"url\": \"https://github.com/dcodeIO/protobuf.js.git\"\r\n  },\r\n  \"license\": \"BSD-3-Clause\",\r\n  \"main\": \"index.js\",\r\n  \"types\": \"index.d.ts\",\r\n  \"devDependencies\": {\r\n    \"istanbul\": \"^0.4.5\",\r\n    \"tape\": \"^4.6.3\"\r\n  },\r\n  \"scripts\": {\r\n    \"test\": \"tape tests/*.js\",\r\n    \"coverage\": \"istanbul cover node_modules/tape/bin/tape tests/*.js\"\r\n  }\r\n}/LICENSE\u0005Copyright (c) 2016, Daniel Wirtz  All rights reserved.\r\n\r\nRedistribution and use in source and binary forms, with or without\r\nmodification, are permitted provided that the following conditions are\r\nmet:\r\n\r\n* Redistributions of source code must retain the above copyright\r\n  notice, this list of conditions and the following disclaimer.\r\n* Redistributions in binary form must reproduce the above copyright\r\n  notice, this list of conditions and the following disclaimer in the\r\n  documentation and/or other materials provided with the distribution.\r\n* Neither the name of its author, nor the names of its contributors\r\n  may be used to endorse or promote products derived from this software\r\n  without specific prior written permission.\r\n\r\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\r\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\r\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\r\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\r\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\r\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n/tests/data/object.js\u001cmodule.exports = { a: 1 };\r\n/README.md\u0001@protobufjs/inquire\r\n===================\r\n[![npm](https://img.shields.io/npm/v/@protobufjs/inquire.svg)](https://www.npmjs.com/package/@protobufjs/inquire)\r\n\r\nRequires a module only if available and hides the require call from bundlers.\r\n\r\nAPI\r\n---\r\n\r\n* **inquire(moduleName: `string`): `?Object`**<br />\r\n  Requires a module only if available.\r\n\r\n**License:** [BSD 3-Clause License](https://opensource.org/licenses/BSD-3-Clause)\r\n/.npmignore'npm-debug.*\r\nnode_modules/\r\ncoverage/\r\n/tests/data/emptyArray.js\u0016module.exports = [];\r\n/index.js\u0002 \"use strict\";\r\nmodule.exports = inquire;\r\n\r\n/**\r\n * Requires a module only if available.\r\n * @memberof util\r\n * @param {string} moduleName Module to require\r\n * @returns {?Object} Required module if available and not empty, otherwise `null`\r\n */\r\nfunction inquire(moduleName) {\r\n    try {\r\n        var mod = eval(\"quire\".replace(/^/,\"re\"))(moduleName); // eslint-disable-line no-eval\r\n        if (mod && (mod.length || Object.keys(mod).length))\r\n            return mod;\r\n    } catch (e) {} // eslint-disable-line no-empty\r\n    return null;\r\n}\r\n/tests/index.js\u0003\u0018var tape = require(\"tape\");\r\n\r\nvar inquire = require(\"..\");\r\n\r\ntape.test(\"inquire\", function(test) {\r\n\r\n    test.equal(inquire(\"buffer\").Buffer, Buffer, \"should be able to require \\\"buffer\\\"\");\r\n\r\n    test.equal(inquire(\"%invalid\"), null, \"should not be able to require \\\"%invalid\\\"\");\r\n\r\n    test.equal(inquire(\"./tests/data/emptyObject\"), null, \"should return null when requiring a module exporting an empty object\");\r\n\r\n    test.equal(inquire(\"./tests/data/emptyArray\"), null, \"should return null when requiring a module exporting an empty array\");\r\n\r\n    test.same(inquire(\"./tests/data/object\"), { a: 1 }, \"should return the object if a non-empty object\");\r\n\r\n    test.same(inquire(\"./tests/data/array\"), [ 1 ], \"should return the module if a non-empty array\");\r\n\r\n    test.end();\r\n});\r\n/tests/data/emptyObject.js\u0016module.exports = {};\r\n/tests/data/array.js\u0017module.exports = [1];\r\n/index.d.ts\u0001\u0017export = inquire;\r\n\r\n/**\r\n * Requires a module only if available.\r\n * @memberof util\r\n * @param {string} moduleName Module to require\r\n * @returns {?Object} Required module if available and not empty, otherwise `null`\r\n */\r\ndeclare function inquire(moduleName: string): Object;\r\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QHByb3RvYnVmanMvcG9vbEAxLjEuMA==",
    "content": "/tests/index.js\u0005var tape = require(\"tape\");\r\n\r\nvar pool = require(\"..\");\r\n\r\nif (typeof Uint8Array !== \"undefined\")\r\ntape.test(\"pool\", function(test) {\r\n\r\n    var alloc = pool(function(size) { return new Uint8Array(size); }, Uint8Array.prototype.subarray);\r\n\r\n    var buf1 = alloc(0);\r\n    test.equal(buf1.length, 0, \"should allocate a buffer of size 0\");\r\n\r\n    var buf2 = alloc(1);\r\n    test.equal(buf2.length, 1, \"should allocate a buffer of size 1 (initializes slab)\");\r\n\r\n    test.notEqual(buf2.buffer, buf1.buffer, \"should not reference the same backing buffer if previous buffer had size 0\");\r\n    test.equal(buf2.byteOffset, 0, \"should allocate at byteOffset 0 when using a new slab\");\r\n\r\n    buf1 = alloc(1);\r\n    test.equal(buf1.buffer, buf2.buffer, \"should reference the same backing buffer when allocating a chunk fitting into the slab\");\r\n    test.equal(buf1.byteOffset, 8, \"should align slices to 32 bit and this allocate at byteOffset 8\");\r\n\r\n    var buf3 = alloc(4097);\r\n    test.notEqual(buf3.buffer, buf2.buffer, \"should not reference the same backing buffer when allocating a buffer larger than half the backing buffer's size\");\r\n\r\n    buf2 = alloc(4096);\r\n    test.equal(buf2.buffer, buf1.buffer, \"should reference the same backing buffer when allocating a buffer smaller or equal than half the backing buffer's size\");\r\n\r\n    buf1 = alloc(4096);\r\n    test.notEqual(buf1.buffer, buf2.buffer, \"should not reference the same backing buffer when the slab is exhausted (initializes new slab)\");\r\n\r\n    test.end();\r\n});/README.md\u0001@protobufjs/pool\r\n================\r\n[![npm](https://img.shields.io/npm/v/@protobufjs/pool.svg)](https://www.npmjs.com/package/@protobufjs/pool)\r\n\r\nA general purpose buffer pool.\r\n\r\nAPI\r\n---\r\n\r\n* **pool(alloc: `function(size: number): Uint8Array`, slice: `function(this: Uint8Array, start: number, end: number): Uint8Array`, [size=8192: `number`]): `function(size: number): Uint8Array`**<br />\r\n  Creates a pooled allocator.\r\n\r\n**License:** [BSD 3-Clause License](https://opensource.org/licenses/BSD-3-Clause)\r\n/.npmignore'npm-debug.*\r\nnode_modules/\r\ncoverage/\r\n/index.js\u0004\"use strict\";\r\nmodule.exports = pool;\r\n\r\n/**\r\n * An allocator as used by {@link util.pool}.\r\n * @typedef PoolAllocator\r\n * @type {function}\r\n * @param {number} size Buffer size\r\n * @returns {Uint8Array} Buffer\r\n */\r\n\r\n/**\r\n * A slicer as used by {@link util.pool}.\r\n * @typedef PoolSlicer\r\n * @type {function}\r\n * @param {number} start Start offset\r\n * @param {number} end End offset\r\n * @returns {Uint8Array} Buffer slice\r\n * @this {Uint8Array}\r\n */\r\n\r\n/**\r\n * A general purpose buffer pool.\r\n * @memberof util\r\n * @function\r\n * @param {PoolAllocator} alloc Allocator\r\n * @param {PoolSlicer} slice Slicer\r\n * @param {number} [size=8192] Slab size\r\n * @returns {PoolAllocator} Pooled allocator\r\n */\r\nfunction pool(alloc, slice, size) {\r\n    var SIZE   = size || 8192;\r\n    var MAX    = SIZE >>> 1;\r\n    var slab   = null;\r\n    var offset = SIZE;\r\n    return function pool_alloc(size) {\r\n        if (size < 1 || size > MAX)\r\n            return alloc(size);\r\n        if (offset + size > SIZE) {\r\n            slab = alloc(SIZE);\r\n            offset = 0;\r\n        }\r\n        var buf = slice.call(slab, offset, offset += size);\r\n        if (offset & 7) // align to 32 bit\r\n            offset = (offset | 7) + 1;\r\n        return buf;\r\n    };\r\n}\r\n/package.json\u0002\u0015{\n  \"name\": \"@protobufjs/pool\",\n  \"description\": \"A general purpose buffer pool.\",\n  \"version\": \"1.1.0\",\n  \"author\": \"Daniel Wirtz <dcode+protobufjs@dcode.io>\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/dcodeIO/protobuf.js.git\"\n  },\n  \"license\": \"BSD-3-Clause\",\n  \"main\": \"index.js\",\n  \"types\": \"index.d.ts\",\n  \"devDependencies\": {\n    \"istanbul\": \"^0.4.5\",\n    \"tape\": \"^4.6.3\"\n  },\n  \"scripts\": {\n    \"test\": \"tape tests/*.js\",\n    \"coverage\": \"istanbul cover node_modules/tape/bin/tape tests/*.js\"\n  }\n}\n/LICENSE\u0005Copyright (c) 2016, Daniel Wirtz  All rights reserved.\r\n\r\nRedistribution and use in source and binary forms, with or without\r\nmodification, are permitted provided that the following conditions are\r\nmet:\r\n\r\n* Redistributions of source code must retain the above copyright\r\n  notice, this list of conditions and the following disclaimer.\r\n* Redistributions in binary form must reproduce the above copyright\r\n  notice, this list of conditions and the following disclaimer in the\r\n  documentation and/or other materials provided with the distribution.\r\n* Neither the name of its author, nor the names of its contributors\r\n  may be used to endorse or promote products derived from this software\r\n  without specific prior written permission.\r\n\r\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\r\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\r\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\r\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\r\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\r\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n/index.d.ts\u0003export = pool;\r\n\r\n/**\r\n * An allocator as used by {@link util.pool}.\r\n * @typedef PoolAllocator\r\n * @type {function}\r\n * @param {number} size Buffer size\r\n * @returns {Uint8Array} Buffer\r\n */\r\ntype PoolAllocator = (size: number) => Uint8Array;\r\n\r\n/**\r\n * A slicer as used by {@link util.pool}.\r\n * @typedef PoolSlicer\r\n * @type {function}\r\n * @param {number} start Start offset\r\n * @param {number} end End offset\r\n * @returns {Uint8Array} Buffer slice\r\n * @this {Uint8Array}\r\n */\r\ntype PoolSlicer = (this: Uint8Array, start: number, end: number) => Uint8Array;\r\n\r\n/**\r\n * A general purpose buffer pool.\r\n * @memberof util\r\n * @function\r\n * @param {PoolAllocator} alloc Allocator\r\n * @param {PoolSlicer} slice Slicer\r\n * @param {number} [size=8192] Slab size\r\n * @returns {PoolAllocator} Pooled allocator\r\n */\r\ndeclare function pool(alloc: PoolAllocator, slice: PoolSlicer, size?: number): PoolAllocator;\r\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QHByb3RvYnVmanMvcGF0aEAxLjEuMg==",
    "content": "/LICENSE\u0005Copyright (c) 2016, Daniel Wirtz  All rights reserved.\r\n\r\nRedistribution and use in source and binary forms, with or without\r\nmodification, are permitted provided that the following conditions are\r\nmet:\r\n\r\n* Redistributions of source code must retain the above copyright\r\n  notice, this list of conditions and the following disclaimer.\r\n* Redistributions in binary form must reproduce the above copyright\r\n  notice, this list of conditions and the following disclaimer in the\r\n  documentation and/or other materials provided with the distribution.\r\n* Neither the name of its author, nor the names of its contributors\r\n  may be used to endorse or promote products derived from this software\r\n  without specific prior written permission.\r\n\r\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\r\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\r\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\r\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\r\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\r\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n/tests/index.js\b)var tape = require(\"tape\");\r\n\r\nvar path = require(\"..\");\r\n\r\ntape.test(\"path\", function(test) {\r\n\r\n    test.ok(path.isAbsolute(\"X:\\\\some\\\\path\\\\file.js\"), \"should identify absolute windows paths\");\r\n    test.ok(path.isAbsolute(\"/some/path/file.js\"), \"should identify absolute unix paths\");\r\n\r\n    test.notOk(path.isAbsolute(\"some\\\\path\\\\file.js\"), \"should identify relative windows paths\");\r\n    test.notOk(path.isAbsolute(\"some/path/file.js\"), \"should identify relative unix paths\");\r\n\r\n    var paths = [\r\n        {\r\n            actual: \"X:\\\\some\\\\..\\\\.\\\\path\\\\\\\\file.js\",\r\n            normal: \"X:/path/file.js\",\r\n            resolve: {\r\n                origin: \"X:/path/origin.js\",\r\n                expected: \"X:/path/file.js\"\r\n            }\r\n        }, {\r\n            actual: \"some\\\\..\\\\.\\\\path\\\\\\\\file.js\",\r\n            normal: \"path/file.js\",\r\n            resolve: {\r\n                origin: \"X:/path/origin.js\",\r\n                expected: \"X:/path/path/file.js\"\r\n            }\r\n        }, {\r\n            actual: \"/some/.././path//file.js\",\r\n            normal: \"/path/file.js\",\r\n            resolve: {\r\n                origin: \"/path/origin.js\",\r\n                expected: \"/path/file.js\"\r\n            }\r\n        }, {\r\n            actual: \"some/.././path//file.js\",\r\n            normal: \"path/file.js\",\r\n            resolve: {\r\n                origin: \"\",\r\n                expected: \"path/file.js\"\r\n            }\r\n        }, {\r\n            actual: \".././path//file.js\",\r\n            normal: \"../path/file.js\"\r\n        }, {\r\n            actual: \"/.././path//file.js\",\r\n            normal: \"/path/file.js\"\r\n        }\r\n    ];\r\n\r\n    paths.forEach(function(p) {\r\n        test.equal(path.normalize(p.actual), p.normal, \"should normalize \" + p.actual);\r\n        if (p.resolve) {\r\n            test.equal(path.resolve(p.resolve.origin, p.actual), p.resolve.expected, \"should resolve \" + p.actual);\r\n            test.equal(path.resolve(p.resolve.origin, p.normal, true), p.resolve.expected, \"should resolve \" + p.normal + \" (already normalized)\");\r\n        }\r\n    });\r\n\r\n    test.end();\r\n});\r\n/README.md\u0002@protobufjs/path\r\n================\r\n[![npm](https://img.shields.io/npm/v/@protobufjs/path.svg)](https://www.npmjs.com/package/@protobufjs/path)\r\n\r\nA minimal path module to resolve Unix, Windows and URL paths alike.\r\n\r\nAPI\r\n---\r\n\r\n* **path.isAbsolute(path: `string`): `boolean`**<br />\r\n  Tests if the specified path is absolute.\r\n\r\n* **path.normalize(path: `string`): `string`**<br />\r\n  Normalizes the specified path.\r\n\r\n* **path.resolve(originPath: `string`, includePath: `string`, [alreadyNormalized=false: `boolean`]): `string`**<br />\r\n  Resolves the specified include path against the specified origin path.\r\n\r\n**License:** [BSD 3-Clause License](https://opensource.org/licenses/BSD-3-Clause)\r\n/index.js\b\u0001\"use strict\";\r\n\r\n/**\r\n * A minimal path module to resolve Unix, Windows and URL paths alike.\r\n * @memberof util\r\n * @namespace\r\n */\r\nvar path = exports;\r\n\r\nvar isAbsolute =\r\n/**\r\n * Tests if the specified path is absolute.\r\n * @param {string} path Path to test\r\n * @returns {boolean} `true` if path is absolute\r\n */\r\npath.isAbsolute = function isAbsolute(path) {\r\n    return /^(?:\\/|\\w+:)/.test(path);\r\n};\r\n\r\nvar normalize =\r\n/**\r\n * Normalizes the specified path.\r\n * @param {string} path Path to normalize\r\n * @returns {string} Normalized path\r\n */\r\npath.normalize = function normalize(path) {\r\n    path = path.replace(/\\\\/g, \"/\")\r\n               .replace(/\\/{2,}/g, \"/\");\r\n    var parts    = path.split(\"/\"),\r\n        absolute = isAbsolute(path),\r\n        prefix   = \"\";\r\n    if (absolute)\r\n        prefix = parts.shift() + \"/\";\r\n    for (var i = 0; i < parts.length;) {\r\n        if (parts[i] === \"..\") {\r\n            if (i > 0 && parts[i - 1] !== \"..\")\r\n                parts.splice(--i, 2);\r\n            else if (absolute)\r\n                parts.splice(i, 1);\r\n            else\r\n                ++i;\r\n        } else if (parts[i] === \".\")\r\n            parts.splice(i, 1);\r\n        else\r\n            ++i;\r\n    }\r\n    return prefix + parts.join(\"/\");\r\n};\r\n\r\n/**\r\n * Resolves the specified include path against the specified origin path.\r\n * @param {string} originPath Path to the origin file\r\n * @param {string} includePath Include path relative to origin path\r\n * @param {boolean} [alreadyNormalized=false] `true` if both paths are already known to be normalized\r\n * @returns {string} Path to the include file\r\n */\r\npath.resolve = function resolve(originPath, includePath, alreadyNormalized) {\r\n    if (!alreadyNormalized)\r\n        includePath = normalize(includePath);\r\n    if (isAbsolute(includePath))\r\n        return includePath;\r\n    if (!alreadyNormalized)\r\n        originPath = normalize(originPath);\r\n    return (originPath = originPath.replace(/(?:\\/|^)[^/]+$/, \"\")).length ? normalize(originPath + \"/\" + includePath) : includePath;\r\n};\r\n/package.json\u0002M{\r\n  \"name\": \"@protobufjs/path\",\r\n  \"description\": \"A minimal path module to resolve Unix, Windows and URL paths alike.\",\r\n  \"version\": \"1.1.2\",\r\n  \"author\": \"Daniel Wirtz <dcode+protobufjs@dcode.io>\",\r\n  \"repository\": {\r\n    \"type\": \"git\",\r\n    \"url\": \"https://github.com/dcodeIO/protobuf.js.git\"\r\n  },\r\n  \"license\": \"BSD-3-Clause\",\r\n  \"main\": \"index.js\",\r\n  \"types\": \"index.d.ts\",\r\n  \"devDependencies\": {\r\n    \"istanbul\": \"^0.4.5\",\r\n    \"tape\": \"^4.6.3\"\r\n  },\r\n  \"scripts\": {\r\n    \"test\": \"tape tests/*.js\",\r\n    \"coverage\": \"istanbul cover node_modules/tape/bin/tape tests/*.js\"\r\n  }\r\n}/index.d.ts\u0003F/**\r\n * Tests if the specified path is absolute.\r\n * @param {string} path Path to test\r\n * @returns {boolean} `true` if path is absolute\r\n */\r\nexport function isAbsolute(path: string): boolean;\r\n\r\n/**\r\n * Normalizes the specified path.\r\n * @param {string} path Path to normalize\r\n * @returns {string} Normalized path\r\n */\r\nexport function normalize(path: string): string;\r\n\r\n/**\r\n * Resolves the specified include path against the specified origin path.\r\n * @param {string} originPath Path to the origin file\r\n * @param {string} includePath Include path relative to origin path\r\n * @param {boolean} [alreadyNormalized=false] `true` if both paths are already known to be normalized\r\n * @returns {string} Path to the include file\r\n */\r\nexport function resolve(originPath: string, includePath: string, alreadyNormalized?: boolean): string;\r\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QHByb3RvYnVmanMvdXRmOEAxLjEuMA==",
    "content": "/package.json\u0002'{\n  \"name\": \"@protobufjs/utf8\",\n  \"description\": \"A minimal UTF8 implementation for number arrays.\",\n  \"version\": \"1.1.0\",\n  \"author\": \"Daniel Wirtz <dcode+protobufjs@dcode.io>\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/dcodeIO/protobuf.js.git\"\n  },\n  \"license\": \"BSD-3-Clause\",\n  \"main\": \"index.js\",\n  \"types\": \"index.d.ts\",\n  \"devDependencies\": {\n    \"istanbul\": \"^0.4.5\",\n    \"tape\": \"^4.6.3\"\n  },\n  \"scripts\": {\n    \"test\": \"tape tests/*.js\",\n    \"coverage\": \"istanbul cover node_modules/tape/bin/tape tests/*.js\"\n  }\n}\n/tests/index.js\bvar tape = require(\"tape\");\r\n\r\nvar utf8 = require(\"..\");\r\n\r\nvar data = require(\"fs\").readFileSync(require.resolve(\"./data/utf8.txt\")),\r\n    dataStr = data.toString(\"utf8\");\r\n\r\ntape.test(\"utf8\", function(test) {\r\n\r\n    test.test(test.name + \" - length\", function(test) {\r\n        test.equal(utf8.length(\"\"), 0, \"should return a byte length of zero for an empty string\");\r\n\r\n        test.equal(utf8.length(dataStr), Buffer.byteLength(dataStr), \"should return the same byte length as node buffers\");\r\n\r\n        test.end();\r\n    });\r\n\r\n    test.test(test.name + \" - read\", function(test) {\r\n        var comp = utf8.read([], 0, 0);\r\n        test.equal(comp, \"\", \"should decode an empty buffer to an empty string\");\r\n\r\n        comp = utf8.read(data, 0, data.length);\r\n        test.equal(comp, data.toString(\"utf8\"), \"should decode to the same byte data as node buffers\");\r\n\r\n        var longData = Buffer.concat([data, data, data, data]);\r\n        comp = utf8.read(longData, 0, longData.length);\r\n        test.equal(comp, longData.toString(\"utf8\"), \"should decode to the same byte data as node buffers (long)\");\r\n\r\n        var chunkData = new Buffer(data.toString(\"utf8\").substring(0, 8192));\r\n        comp = utf8.read(chunkData, 0, chunkData.length);\r\n        test.equal(comp, chunkData.toString(\"utf8\"), \"should decode to the same byte data as node buffers (chunk size)\");\r\n\r\n        test.end();\r\n    });\r\n\r\n    test.test(test.name + \" - write\", function(test) {\r\n        var buf = new Buffer(0);\r\n        test.equal(utf8.write(\"\", buf, 0), 0, \"should encode an empty string to an empty buffer\");\r\n\r\n        var len = utf8.length(dataStr);\r\n        buf = new Buffer(len);\r\n        test.equal(utf8.write(dataStr, buf, 0), len, \"should encode to exactly \" + len + \" bytes\");\r\n\r\n        test.equal(buf.length, data.length, \"should encode to a buffer length equal to that of node buffers\");\r\n\r\n        for (var i = 0; i < buf.length; ++i) {\r\n            if (buf[i] !== data[i]) {\r\n                test.fail(\"should encode to the same buffer data as node buffers (offset \" + i + \")\");\r\n                return;\r\n            }\r\n        }\r\n        test.pass(\"should encode to the same buffer data as node buffers\");\r\n\r\n        test.end();\r\n    });\r\n\r\n});\r\n/README.md\u0002@protobufjs/utf8\r\n================\r\n[![npm](https://img.shields.io/npm/v/@protobufjs/utf8.svg)](https://www.npmjs.com/package/@protobufjs/utf8)\r\n\r\nA minimal UTF8 implementation for number arrays.\r\n\r\nAPI\r\n---\r\n\r\n* **utf8.length(string: `string`): `number`**<br />\r\n  Calculates the UTF8 byte length of a string.\r\n\r\n* **utf8.read(buffer: `Uint8Array`, start: `number`, end: `number`): `string`**<br />\r\n  Reads UTF8 bytes as a string.\r\n\r\n* **utf8.write(string: `string`, buffer: `Uint8Array`, offset: `number`): `number`**<br />\r\n  Writes a string as UTF8 bytes.\r\n\r\n\r\n**License:** [BSD 3-Clause License](https://opensource.org/licenses/BSD-3-Clause)\r\n/tests/data/utf8.txt8-UTF-8 encoded sample plain-text file\n‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾\n\nMarkus Kuhn [ˈmaʳkʊs kuːn] <http://www.cl.cam.ac.uk/~mgk25/> — 2002-07-25 CC BY\n\n\nThe ASCII compatible UTF-8 encoding used in this plain-text file\nis defined in Unicode, ISO 10646-1, and RFC 2279.\n\n\nUsing Unicode/UTF-8, you can write in emails and source code things such as\n\nMathematics and sciences:\n\n  ∮ E⋅da = Q,  n → ∞, ∑ f(i) = ∏ g(i),      ⎧⎡⎛┌─────┐⎞⎤⎫\n                                            ⎪⎢⎜│a²+b³ ⎟⎥⎪\n  ∀x∈ℝ: ⌈x⌉ = −⌊−x⌋, α ∧ ¬β = ¬(¬α ∨ β),    ⎪⎢⎜│───── ⎟⎥⎪\n                                            ⎪⎢⎜⎷ c₈   ⎟⎥⎪\n  ℕ ⊆ ℕ₀ ⊂ ℤ ⊂ ℚ ⊂ ℝ ⊂ ℂ,                   ⎨⎢⎜       ⎟⎥⎬\n                                            ⎪⎢⎜ ∞     ⎟⎥⎪\n  ⊥ < a ≠ b ≡ c ≤ d ≪ ⊤ ⇒ (⟦A⟧ ⇔ ⟪B⟫),      ⎪⎢⎜ ⎲     ⎟⎥⎪\n                                            ⎪⎢⎜ ⎳aⁱ-bⁱ⎟⎥⎪\n  2H₂ + O₂ ⇌ 2H₂O, R = 4.7 kΩ, ⌀ 200 mm     ⎩⎣⎝i=1    ⎠⎦⎭\n\nLinguistics and dictionaries:\n\n  ði ıntəˈnæʃənəl fəˈnɛtık əsoʊsiˈeıʃn\n  Y [ˈʏpsilɔn], Yen [jɛn], Yoga [ˈjoːgɑ]\n\nAPL:\n\n  ((V⍳V)=⍳⍴V)/V←,V    ⌷←⍳→⍴∆∇⊃‾⍎⍕⌈\n\nNicer typography in plain text files:\n\n  ╔══════════════════════════════════════════╗\n  ║                                          ║\n  ║   • ‘single’ and “double” quotes         ║\n  ║                                          ║\n  ║   • Curly apostrophes: “We’ve been here” ║\n  ║                                          ║\n  ║   • Latin-1 apostrophe and accents: '´`  ║\n  ║                                          ║\n  ║   • ‚deutsche‘ „Anführungszeichen“       ║\n  ║                                          ║\n  ║   • †, ‡, ‰, •, 3–4, —, −5/+5, ™, …      ║\n  ║                                          ║\n  ║   • ASCII safety test: 1lI|, 0OD, 8B     ║\n  ║                      ╭─────────╮         ║\n  ║   • the euro symbol: │ 14.95 € │         ║\n  ║                      ╰─────────╯         ║\n  ╚══════════════════════════════════════════╝\n\nCombining characters:\n\n  STARGΛ̊TE SG-1, a = v̇ = r̈, a⃑ ⊥ b⃑\n\nGreek (in Polytonic):\n\n  The Greek anthem:\n\n  Σὲ γνωρίζω ἀπὸ τὴν κόψη\n  τοῦ σπαθιοῦ τὴν τρομερή,\n  σὲ γνωρίζω ἀπὸ τὴν ὄψη\n  ποὺ μὲ βία μετράει τὴ γῆ.\n\n  ᾿Απ᾿ τὰ κόκκαλα βγαλμένη\n  τῶν ῾Ελλήνων τὰ ἱερά\n  καὶ σὰν πρῶτα ἀνδρειωμένη\n  χαῖρε, ὦ χαῖρε, ᾿Ελευθεριά!\n\n  From a speech of Demosthenes in the 4th century BC:\n\n  Οὐχὶ ταὐτὰ παρίσταταί μοι γιγνώσκειν, ὦ ἄνδρες ᾿Αθηναῖοι,\n  ὅταν τ᾿ εἰς τὰ πράγματα ἀποβλέψω καὶ ὅταν πρὸς τοὺς\n  λόγους οὓς ἀκούω· τοὺς μὲν γὰρ λόγους περὶ τοῦ\n  τιμωρήσασθαι Φίλιππον ὁρῶ γιγνομένους, τὰ δὲ πράγματ᾿\n  εἰς τοῦτο προήκοντα,  ὥσθ᾿ ὅπως μὴ πεισόμεθ᾿ αὐτοὶ\n  πρότερον κακῶς σκέψασθαι δέον. οὐδέν οὖν ἄλλο μοι δοκοῦσιν\n  οἱ τὰ τοιαῦτα λέγοντες ἢ τὴν ὑπόθεσιν, περὶ ἧς βουλεύεσθαι,\n  οὐχὶ τὴν οὖσαν παριστάντες ὑμῖν ἁμαρτάνειν. ἐγὼ δέ, ὅτι μέν\n  ποτ᾿ ἐξῆν τῇ πόλει καὶ τὰ αὑτῆς ἔχειν ἀσφαλῶς καὶ Φίλιππον\n  τιμωρήσασθαι, καὶ μάλ᾿ ἀκριβῶς οἶδα· ἐπ᾿ ἐμοῦ γάρ, οὐ πάλαι\n  γέγονεν ταῦτ᾿ ἀμφότερα· νῦν μέντοι πέπεισμαι τοῦθ᾿ ἱκανὸν\n  προλαβεῖν ἡμῖν εἶναι τὴν πρώτην, ὅπως τοὺς συμμάχους\n  σώσομεν. ἐὰν γὰρ τοῦτο βεβαίως ὑπάρξῃ, τότε καὶ περὶ τοῦ\n  τίνα τιμωρήσεταί τις καὶ ὃν τρόπον ἐξέσται σκοπεῖν· πρὶν δὲ\n  τὴν ἀρχὴν ὀρθῶς ὑποθέσθαι, μάταιον ἡγοῦμαι περὶ τῆς\n  τελευτῆς ὁντινοῦν ποιεῖσθαι λόγον.\n\n  Δημοσθένους, Γ´ ᾿Ολυνθιακὸς\n\nGeorgian:\n\n  From a Unicode conference invitation:\n\n  გთხოვთ ახლავე გაიაროთ რეგისტრაცია Unicode-ის მეათე საერთაშორისო\n  კონფერენციაზე დასასწრებად, რომელიც გაიმართება 10-12 მარტს,\n  ქ. მაინცში, გერმანიაში. კონფერენცია შეჰკრებს ერთად მსოფლიოს\n  ექსპერტებს ისეთ დარგებში როგორიცაა ინტერნეტი და Unicode-ი,\n  ინტერნაციონალიზაცია და ლოკალიზაცია, Unicode-ის გამოყენება\n  ოპერაციულ სისტემებსა, და გამოყენებით პროგრამებში, შრიფტებში,\n  ტექსტების დამუშავებასა და მრავალენოვან კომპიუტერულ სისტემებში.\n\nRussian:\n\n  From a Unicode conference invitation:\n\n  Зарегистрируйтесь сейчас на Десятую Международную Конференцию по\n  Unicode, которая состоится 10-12 марта 1997 года в Майнце в Германии.\n  Конференция соберет широкий круг экспертов по  вопросам глобального\n  Интернета и Unicode, локализации и интернационализации, воплощению и\n  применению Unicode в различных операционных системах и программных\n  приложениях, шрифтах, верстке и многоязычных компьютерных системах.\n\nThai (UCS Level 2):\n\n  Excerpt from a poetry on The Romance of The Three Kingdoms (a Chinese\n  classic 'San Gua'):\n\n  [----------------------------|------------------------]\n    ๏ แผ่นดินฮั่นเสื่อมโทรมแสนสังเวช  พระปกเกศกองบู๊กู้ขึ้นใหม่\n  สิบสองกษัตริย์ก่อนหน้าแลถัดไป       สององค์ไซร้โง่เขลาเบาปัญญา\n    ทรงนับถือขันทีเป็นที่พึ่ง           บ้านเมืองจึงวิปริตเป็นนักหนา\n  โฮจิ๋นเรียกทัพทั่วหัวเมืองมา         หมายจะฆ่ามดชั่วตัวสำคัญ\n    เหมือนขับไสไล่เสือจากเคหา      รับหมาป่าเข้ามาเลยอาสัญ\n  ฝ่ายอ้องอุ้นยุแยกให้แตกกัน          ใช้สาวนั้นเป็นชนวนชื่นชวนใจ\n    พลันลิฉุยกุยกีกลับก่อเหตุ          ช่างอาเพศจริงหนาฟ้าร้องไห้\n  ต้องรบราฆ่าฟันจนบรรลัย           ฤๅหาใครค้ำชูกู้บรรลังก์ ฯ\n\n  (The above is a two-column text. If combining characters are handled\n  correctly, the lines of the second column should be aligned with the\n  | character above.)\n\nEthiopian:\n\n  Proverbs in the Amharic language:\n\n  ሰማይ አይታረስ ንጉሥ አይከሰስ።\n  ብላ ካለኝ እንደአባቴ በቆመጠኝ።\n  ጌጥ ያለቤቱ ቁምጥና ነው።\n  ደሀ በሕልሙ ቅቤ ባይጠጣ ንጣት በገደለው።\n  የአፍ ወለምታ በቅቤ አይታሽም።\n  አይጥ በበላ ዳዋ ተመታ።\n  ሲተረጉሙ ይደረግሙ።\n  ቀስ በቀስ፥ ዕንቁላል በእግሩ ይሄዳል።\n  ድር ቢያብር አንበሳ ያስር።\n  ሰው እንደቤቱ እንጅ እንደ ጉረቤቱ አይተዳደርም።\n  እግዜር የከፈተውን ጉሮሮ ሳይዘጋው አይድርም።\n  የጎረቤት ሌባ፥ ቢያዩት ይስቅ ባያዩት ያጠልቅ።\n  ሥራ ከመፍታት ልጄን ላፋታት።\n  ዓባይ ማደሪያ የለው፥ ግንድ ይዞ ይዞራል።\n  የእስላም አገሩ መካ የአሞራ አገሩ ዋርካ።\n  ተንጋሎ ቢተፉ ተመልሶ ባፉ።\n  ወዳጅህ ማር ቢሆን ጨርስህ አትላሰው።\n  እግርህን በፍራሽህ ልክ ዘርጋ።\n\nRunes:\n\n  ᚻᛖ ᚳᚹᚫᚦ ᚦᚫᛏ ᚻᛖ ᛒᚢᛞᛖ ᚩᚾ ᚦᚫᛗ ᛚᚪᚾᛞᛖ ᚾᚩᚱᚦᚹᛖᚪᚱᛞᚢᛗ ᚹᛁᚦ ᚦᚪ ᚹᛖᛥᚫ\n\n  (Old English, which transcribed into Latin reads 'He cwaeth that he\n  bude thaem lande northweardum with tha Westsae.' and means 'He said\n  that he lived in the northern land near the Western Sea.')\n\nBraille:\n\n  ⡌⠁⠧⠑ ⠼⠁⠒  ⡍⠜⠇⠑⠹⠰⠎ ⡣⠕⠌\n\n  ⡍⠜⠇⠑⠹ ⠺⠁⠎ ⠙⠑⠁⠙⠒ ⠞⠕ ⠃⠑⠛⠔ ⠺⠊⠹⠲ ⡹⠻⠑ ⠊⠎ ⠝⠕ ⠙⠳⠃⠞\n  ⠱⠁⠞⠑⠧⠻ ⠁⠃⠳⠞ ⠹⠁⠞⠲ ⡹⠑ ⠗⠑⠛⠊⠌⠻ ⠕⠋ ⠙⠊⠎ ⠃⠥⠗⠊⠁⠇ ⠺⠁⠎\n  ⠎⠊⠛⠝⠫ ⠃⠹ ⠹⠑ ⠊⠇⠻⠛⠹⠍⠁⠝⠂ ⠹⠑ ⠊⠇⠻⠅⠂ ⠹⠑ ⠥⠝⠙⠻⠞⠁⠅⠻⠂\n  ⠁⠝⠙ ⠹⠑ ⠡⠊⠑⠋ ⠍⠳⠗⠝⠻⠲ ⡎⠊⠗⠕⠕⠛⠑ ⠎⠊⠛⠝⠫ ⠊⠞⠲ ⡁⠝⠙\n  ⡎⠊⠗⠕⠕⠛⠑⠰⠎ ⠝⠁⠍⠑ ⠺⠁⠎ ⠛⠕⠕⠙ ⠥⠏⠕⠝ ⠰⡡⠁⠝⠛⠑⠂ ⠋⠕⠗ ⠁⠝⠹⠹⠔⠛ ⠙⠑\n  ⠡⠕⠎⠑ ⠞⠕ ⠏⠥⠞ ⠙⠊⠎ ⠙⠁⠝⠙ ⠞⠕⠲\n\n  ⡕⠇⠙ ⡍⠜⠇⠑⠹ ⠺⠁⠎ ⠁⠎ ⠙⠑⠁⠙ ⠁⠎ ⠁ ⠙⠕⠕⠗⠤⠝⠁⠊⠇⠲\n\n  ⡍⠔⠙⠖ ⡊ ⠙⠕⠝⠰⠞ ⠍⠑⠁⠝ ⠞⠕ ⠎⠁⠹ ⠹⠁⠞ ⡊ ⠅⠝⠪⠂ ⠕⠋ ⠍⠹\n  ⠪⠝ ⠅⠝⠪⠇⠫⠛⠑⠂ ⠱⠁⠞ ⠹⠻⠑ ⠊⠎ ⠏⠜⠞⠊⠊⠥⠇⠜⠇⠹ ⠙⠑⠁⠙ ⠁⠃⠳⠞\n  ⠁ ⠙⠕⠕⠗⠤⠝⠁⠊⠇⠲ ⡊ ⠍⠊⠣⠞ ⠙⠁⠧⠑ ⠃⠑⠲ ⠔⠊⠇⠔⠫⠂ ⠍⠹⠎⠑⠇⠋⠂ ⠞⠕\n  ⠗⠑⠛⠜⠙ ⠁ ⠊⠕⠋⠋⠔⠤⠝⠁⠊⠇ ⠁⠎ ⠹⠑ ⠙⠑⠁⠙⠑⠌ ⠏⠊⠑⠊⠑ ⠕⠋ ⠊⠗⠕⠝⠍⠕⠝⠛⠻⠹\n  ⠔ ⠹⠑ ⠞⠗⠁⠙⠑⠲ ⡃⠥⠞ ⠹⠑ ⠺⠊⠎⠙⠕⠍ ⠕⠋ ⠳⠗ ⠁⠝⠊⠑⠌⠕⠗⠎\n  ⠊⠎ ⠔ ⠹⠑ ⠎⠊⠍⠊⠇⠑⠆ ⠁⠝⠙ ⠍⠹ ⠥⠝⠙⠁⠇⠇⠪⠫ ⠙⠁⠝⠙⠎\n  ⠩⠁⠇⠇ ⠝⠕⠞ ⠙⠊⠌⠥⠗⠃ ⠊⠞⠂ ⠕⠗ ⠹⠑ ⡊⠳⠝⠞⠗⠹⠰⠎ ⠙⠕⠝⠑ ⠋⠕⠗⠲ ⡹⠳\n  ⠺⠊⠇⠇ ⠹⠻⠑⠋⠕⠗⠑ ⠏⠻⠍⠊⠞ ⠍⠑ ⠞⠕ ⠗⠑⠏⠑⠁⠞⠂ ⠑⠍⠏⠙⠁⠞⠊⠊⠁⠇⠇⠹⠂ ⠹⠁⠞\n  ⡍⠜⠇⠑⠹ ⠺⠁⠎ ⠁⠎ ⠙⠑⠁⠙ ⠁⠎ ⠁ ⠙⠕⠕⠗⠤⠝⠁⠊⠇⠲\n\n  (The first couple of paragraphs of \"A Christmas Carol\" by Dickens)\n\nCompact font selection example text:\n\n  ABCDEFGHIJKLMNOPQRSTUVWXYZ /0123456789\n  abcdefghijklmnopqrstuvwxyz £©µÀÆÖÞßéöÿ\n  –—‘“”„†•…‰™œŠŸž€ ΑΒΓΔΩαβγδω АБВГДабвгд\n  ∀∂∈ℝ∧∪≡∞ ↑↗↨↻⇣ ┐┼╔╘░►☺♀ ﬁ�⑀₂ἠḂӥẄɐː⍎אԱა\n\nGreetings in various languages:\n\n  Hello world, Καλημέρα κόσμε, コンニチハ\n\nBox drawing alignment tests:                                          █\n                                                                      ▉\n  ╔══╦══╗  ┌──┬──┐  ╭──┬──╮  ╭──┬──╮  ┏━━┳━━┓  ┎┒┏┑   ╷  ╻ ┏┯┓ ┌┰┐    ▊ ╱╲╱╲╳╳╳\n  ║┌─╨─┐║  │╔═╧═╗│  │╒═╪═╕│  │╓─╁─╖│  ┃┌─╂─┐┃  ┗╃╄┙  ╶┼╴╺╋╸┠┼┨ ┝╋┥    ▋ ╲╱╲╱╳╳╳\n  ║│╲ ╱│║  │║   ║│  ││ │ ││  │║ ┃ ║│  ┃│ ╿ │┃  ┍╅╆┓   ╵  ╹ ┗┷┛ └┸┘    ▌ ╱╲╱╲╳╳╳\n  ╠╡ ╳ ╞╣  ├╢   ╟┤  ├┼─┼─┼┤  ├╫─╂─╫┤  ┣┿╾┼╼┿┫  ┕┛┖┚     ┌┄┄┐ ╎ ┏┅┅┓ ┋ ▍ ╲╱╲╱╳╳╳\n  ║│╱ ╲│║  │║   ║│  ││ │ ││  │║ ┃ ║│  ┃│ ╽ │┃  ░░▒▒▓▓██ ┊  ┆ ╎ ╏  ┇ ┋ ▎\n  ║└─╥─┘║  │╚═╤═╝│  │╘═╪═╛│  │╙─╀─╜│  ┃└─╂─┘┃  ░░▒▒▓▓██ ┊  ┆ ╎ ╏  ┇ ┋ ▏\n  ╚══╩══╝  └──┴──┘  ╰──┴──╯  ╰──┴──╯  ┗━━┻━━┛  ▗▄▖▛▀▜   └╌╌┘ ╎ ┗╍╍┛ ┋  ▁▂▃▄▅▆▇█\n                                               ▝▀▘▙▄▟\n\nSurrogates:\n\n𠜎 𠜱 𠝹 𠱓 𠱸 𠲖 𠳏 𠳕 𠴕 𠵼 𠵿 𠸎 𠸏 𠹷 𠺝 𠺢 𠻗 𠻹 𠻺 𠼭 𠼮 𠽌 𠾴 𠾼 𠿪 𡁜 𡁯 𡁵 𡁶 𡁻 𡃁\n𡃉 𡇙 𢃇 𢞵 𢫕 𢭃 𢯊 𢱑 𢱕 𢳂 𢴈 𢵌 𢵧 𢺳 𣲷 𤓓 𤶸 𤷪 𥄫 𦉘 𦟌 𦧲 𦧺 𧨾 𨅝 𨈇 𨋢 𨳊 𨳍 𨳒 𩶘\n/LICENSE\u0005Copyright (c) 2016, Daniel Wirtz  All rights reserved.\r\n\r\nRedistribution and use in source and binary forms, with or without\r\nmodification, are permitted provided that the following conditions are\r\nmet:\r\n\r\n* Redistributions of source code must retain the above copyright\r\n  notice, this list of conditions and the following disclaimer.\r\n* Redistributions in binary form must reproduce the above copyright\r\n  notice, this list of conditions and the following disclaimer in the\r\n  documentation and/or other materials provided with the distribution.\r\n* Neither the name of its author, nor the names of its contributors\r\n  may be used to endorse or promote products derived from this software\r\n  without specific prior written permission.\r\n\r\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\r\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\r\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\r\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\r\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\r\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n/.npmignore'npm-debug.*\r\nnode_modules/\r\ncoverage/\r\n/index.d.ts\u0002/**\r\n * Calculates the UTF8 byte length of a string.\r\n * @param {string} string String\r\n * @returns {number} Byte length\r\n */\r\nexport function length(string: string): number;\r\n\r\n/**\r\n * Reads UTF8 bytes as a string.\r\n * @param {Uint8Array} buffer Source buffer\r\n * @param {number} start Source start\r\n * @param {number} end Source end\r\n * @returns {string} String read\r\n */\r\nexport function read(buffer: Uint8Array, start: number, end: number): string;\r\n\r\n/**\r\n * Writes a string as UTF8 bytes.\r\n * @param {string} string Source string\r\n * @param {Uint8Array} buffer Destination buffer\r\n * @param {number} offset Destination offset\r\n * @returns {number} Bytes written\r\n */\r\nexport function write(string: string, buffer: Uint8Array, offset: number): number;\r\n/index.js\r-\"use strict\";\r\n\r\n/**\r\n * A minimal UTF8 implementation for number arrays.\r\n * @memberof util\r\n * @namespace\r\n */\r\nvar utf8 = exports;\r\n\r\n/**\r\n * Calculates the UTF8 byte length of a string.\r\n * @param {string} string String\r\n * @returns {number} Byte length\r\n */\r\nutf8.length = function utf8_length(string) {\r\n    var len = 0,\r\n        c = 0;\r\n    for (var i = 0; i < string.length; ++i) {\r\n        c = string.charCodeAt(i);\r\n        if (c < 128)\r\n            len += 1;\r\n        else if (c < 2048)\r\n            len += 2;\r\n        else if ((c & 0xFC00) === 0xD800 && (string.charCodeAt(i + 1) & 0xFC00) === 0xDC00) {\r\n            ++i;\r\n            len += 4;\r\n        } else\r\n            len += 3;\r\n    }\r\n    return len;\r\n};\r\n\r\n/**\r\n * Reads UTF8 bytes as a string.\r\n * @param {Uint8Array} buffer Source buffer\r\n * @param {number} start Source start\r\n * @param {number} end Source end\r\n * @returns {string} String read\r\n */\r\nutf8.read = function utf8_read(buffer, start, end) {\r\n    var len = end - start;\r\n    if (len < 1)\r\n        return \"\";\r\n    var parts = null,\r\n        chunk = [],\r\n        i = 0, // char offset\r\n        t;     // temporary\r\n    while (start < end) {\r\n        t = buffer[start++];\r\n        if (t < 128)\r\n            chunk[i++] = t;\r\n        else if (t > 191 && t < 224)\r\n            chunk[i++] = (t & 31) << 6 | buffer[start++] & 63;\r\n        else if (t > 239 && t < 365) {\r\n            t = ((t & 7) << 18 | (buffer[start++] & 63) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63) - 0x10000;\r\n            chunk[i++] = 0xD800 + (t >> 10);\r\n            chunk[i++] = 0xDC00 + (t & 1023);\r\n        } else\r\n            chunk[i++] = (t & 15) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63;\r\n        if (i > 8191) {\r\n            (parts || (parts = [])).push(String.fromCharCode.apply(String, chunk));\r\n            i = 0;\r\n        }\r\n    }\r\n    if (parts) {\r\n        if (i)\r\n            parts.push(String.fromCharCode.apply(String, chunk.slice(0, i)));\r\n        return parts.join(\"\");\r\n    }\r\n    return String.fromCharCode.apply(String, chunk.slice(0, i));\r\n};\r\n\r\n/**\r\n * Writes a string as UTF8 bytes.\r\n * @param {string} string Source string\r\n * @param {Uint8Array} buffer Destination buffer\r\n * @param {number} offset Destination offset\r\n * @returns {number} Bytes written\r\n */\r\nutf8.write = function utf8_write(string, buffer, offset) {\r\n    var start = offset,\r\n        c1, // character 1\r\n        c2; // character 2\r\n    for (var i = 0; i < string.length; ++i) {\r\n        c1 = string.charCodeAt(i);\r\n        if (c1 < 128) {\r\n            buffer[offset++] = c1;\r\n        } else if (c1 < 2048) {\r\n            buffer[offset++] = c1 >> 6       | 192;\r\n            buffer[offset++] = c1       & 63 | 128;\r\n        } else if ((c1 & 0xFC00) === 0xD800 && ((c2 = string.charCodeAt(i + 1)) & 0xFC00) === 0xDC00) {\r\n            c1 = 0x10000 + ((c1 & 0x03FF) << 10) + (c2 & 0x03FF);\r\n            ++i;\r\n            buffer[offset++] = c1 >> 18      | 240;\r\n            buffer[offset++] = c1 >> 12 & 63 | 128;\r\n            buffer[offset++] = c1 >> 6  & 63 | 128;\r\n            buffer[offset++] = c1       & 63 | 128;\r\n        } else {\r\n            buffer[offset++] = c1 >> 12      | 224;\r\n            buffer[offset++] = c1 >> 6  & 63 | 128;\r\n            buffer[offset++] = c1       & 63 | 128;\r\n        }\r\n    }\r\n    return offset - start;\r\n};\r\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QHR5cGVzL21hcmtkb3duLWl0LWVtb2ppQDIuMC4y",
    "content": "/light.d.tssimport emoji = require(\"./index\");\n\ndeclare namespace light {}\n\ndeclare const light: typeof emoji;\nexport = light;\n/LICENSE\u0004u    MIT License\n\n    Copyright (c) Microsoft Corporation.\n\n    Permission is hereby granted, free of charge, to any person obtaining a copy\n    of this software and associated documentation files (the \"Software\"), to deal\n    in the Software without restriction, including without limitation the rights\n    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n    copies of the Software, and to permit persons to whom the Software is\n    furnished to do so, subject to the following conditions:\n\n    The above copyright notice and this permission notice shall be included in all\n    copies or substantial portions of the Software.\n\n    THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n    SOFTWARE\n/package.json\u0004\u001b{\n    \"name\": \"@types/markdown-it-emoji\",\n    \"version\": \"2.0.2\",\n    \"description\": \"TypeScript definitions for markdown-it-emoji\",\n    \"homepage\": \"https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/markdown-it-emoji\",\n    \"license\": \"MIT\",\n    \"contributors\": [\n        {\n            \"name\": \"Christopher Quadflieg\",\n            \"url\": \"https://github.com/Shinigami92\",\n            \"githubUsername\": \"Shinigami92\"\n        },\n        {\n            \"name\": \"Piotr Błażejewicz\",\n            \"url\": \"https://github.com/peterblazejewicz\",\n            \"githubUsername\": \"peterblazejewicz\"\n        }\n    ],\n    \"main\": \"\",\n    \"types\": \"index.d.ts\",\n    \"repository\": {\n        \"type\": \"git\",\n        \"url\": \"https://github.com/DefinitelyTyped/DefinitelyTyped.git\",\n        \"directory\": \"types/markdown-it-emoji\"\n    },\n    \"scripts\": {},\n    \"dependencies\": {\n        \"@types/markdown-it\": \"*\"\n    },\n    \"typesPublisherContentHash\": \"546f72678cdd096792e60f3ca750c89d170ff5450d4e1ee697e44d7327b377f4\",\n    \"typeScriptVersion\": \"3.6\"\n}/bare.d.tspimport emoji = require(\"./index\");\n\ndeclare namespace bare {}\n\ndeclare const bare: typeof emoji;\nexport = bare;\n/README.md\u0002# Installation\r\n> `npm install --save @types/markdown-it-emoji`\r\n\r\n# Summary\r\nThis package contains type definitions for markdown-it-emoji (https://github.com/markdown-it/markdown-it-emoji).\r\n\r\n# Details\r\nFiles were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/markdown-it-emoji.\r\n\r\n### Additional Details\r\n * Last updated: Thu, 08 Jul 2021 16:23:59 GMT\r\n * Dependencies: [@types/markdown-it](https://npmjs.com/package/@types/markdown-it)\r\n * Global values: `markdownitEmoji`\r\n\r\n# Credits\r\nThese definitions were written by [Christopher Quadflieg](https://github.com/Shinigami92), and [Piotr Błażejewicz](https://github.com/peterblazejewicz).\r\n/index.d.ts\u0005// Type definitions for markdown-it-emoji 2.0\n// Project: https://github.com/markdown-it/markdown-it-emoji\n// Definitions by: Christopher Quadflieg <https://github.com/Shinigami92>\n//                 Piotr Błażejewicz <https://github.com/peterblazejewicz>\n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\nimport { PluginSimple, PluginWithOptions } from \"markdown-it/lib\";\n\nexport as namespace markdownitEmoji;\n\ndeclare namespace markdownitEmoji {\n    interface Options {\n        defs?: Record<string, string> | undefined;\n        enabled?: string[] | undefined;\n        shortcuts?: Shortcuts | undefined;\n    }\n\n    type LiteralUnion<T extends U, U = string> = T | (U & { _?: never | undefined });\n\n    type PartialRecord<K extends keyof any, T> = {\n        [P in K]?: T | T[];\n    };\n\n    type Shortcuts = PartialRecord<Shortcut, string>;\n\n    type Shortcut = LiteralUnion<\n        | \"angry\"\n        | \"blush\"\n        | \"broken_heart\"\n        | \"confused\"\n        | \"cry\"\n        | \"frowning\"\n        | \"heart\"\n        | \"imp\"\n        | \"innocent\"\n        | \"joy\"\n        | \"kissing\"\n        | \"laughing\"\n        | \"neutral_face\"\n        | \"open_mouth\"\n        | \"rage\"\n        | \"smile\"\n        | \"smiley\"\n        | \"smiling_imp\"\n        | \"sob\"\n        | \"stuck_out_tongue\"\n        | \"sunglasses\"\n        | \"sweat_smile\"\n        | \"sweat\"\n        | \"unamused\"\n        | \"wink\"\n    >;\n}\n\ndeclare const markdownitEmoji: PluginSimple | PluginWithOptions<markdownitEmoji.Options>;\nexport = markdownitEmoji;\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QHR5cGVzL21kdXJsQDEuMC4y",
    "content": "/README.md\u0001# Installation\r\n> `npm install --save @types/mdurl`\r\n\r\n# Summary\r\nThis package contains type definitions for mdurl (https://github.com/markdown-it/mdurl#readme).\r\n\r\n# Details\r\nFiles were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/mdurl\r\n\r\nAdditional Details\r\n * Last updated: Wed, 17 Oct 2018 20:11:23 GMT\r\n * Dependencies: none\r\n * Global values: none\r\n\r\n# Credits\r\nThese definitions were written by Junyoung Choi <https://github.com/rokt33r>.\r\n/LICENSE\u0004    MIT License\r\n\r\n    Copyright (c) Microsoft Corporation. All rights reserved.\r\n\r\n    Permission is hereby granted, free of charge, to any person obtaining a copy\r\n    of this software and associated documentation files (the \"Software\"), to deal\r\n    in the Software without restriction, including without limitation the rights\r\n    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n    copies of the Software, and to permit persons to whom the Software is\r\n    furnished to do so, subject to the following conditions:\r\n\r\n    The above copyright notice and this permission notice shall be included in all\r\n    copies or substantial portions of the Software.\r\n\r\n    THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\n    SOFTWARE\r\n/package.json\u0002}{\n    \"name\": \"@types/mdurl\",\n    \"version\": \"1.0.2\",\n    \"description\": \"TypeScript definitions for mdurl\",\n    \"license\": \"MIT\",\n    \"contributors\": [\n        {\n            \"name\": \"Junyoung Choi\",\n            \"url\": \"https://github.com/rokt33r\",\n            \"githubUsername\": \"rokt33r\"\n        }\n    ],\n    \"main\": \"\",\n    \"types\": \"\",\n    \"repository\": {\n        \"type\": \"git\",\n        \"url\": \"https://github.com/DefinitelyTyped/DefinitelyTyped.git\"\n    },\n    \"scripts\": {},\n    \"dependencies\": {},\n    \"typesPublisherContentHash\": \"55901ccf45e8744ad241fd6beb7750d1c1f77d7fe727ac575e234c1431eb5bca\",\n    \"typeScriptVersion\": \"2.0\"\n}/index.d.ts\u0002c// Type definitions for mdurl 1.0\n// Project: https://github.com/markdown-it/mdurl#readme\n// Definitions by: Junyoung Choi <https://github.com/rokt33r>\n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\nimport encode = require('./encode');\nimport decode = require('./decode');\nimport parse = require('./parse');\nimport format = require('./format');\n\nexport interface Url {\n    protocol: string;\n    slashes: string;\n    auth: string;\n    port: string;\n    hostname: string;\n    hash: string;\n    search: string;\n    pathname: string;\n}\n\nexport {\n    encode,\n    decode,\n    parse,\n    format\n};\n/parse.d.tsuimport { Url } from './';\n\ndeclare function parse(input: string, slashesDenoteHost?: boolean): Url;\n\nexport = parse;\n/decode.d.tsĳdeclare namespace decode {\n    const defaultChars: string;\n    const componentChars: string;\n}\ndeclare function decode(input: string, exclude?: string): string;\n\nexport = decode;\n/encode.d.tsdeclare namespace encode {\n    const defaultChars: string;\n    const componentChars: string;\n}\ndeclare function encode(str: string, exclude?: string, keepEscaped?: boolean): string;\n\nexport = encode;\n/format.d.tsXimport { Url } from './';\n\ndeclare function format(url: Url): string;\n\nexport = format;\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QHR5cGVzL21pbWVAMy4wLjE=",
    "content": "/lite.d.tssimport Mime = require('./Mime');\n\ndeclare const mimelite: Mime;\n\nexport as namespace mimelite;\n\nexport = mimelite;\n/LICENSE\u0004u    MIT License\n\n    Copyright (c) Microsoft Corporation.\n\n    Permission is hereby granted, free of charge, to any person obtaining a copy\n    of this software and associated documentation files (the \"Software\"), to deal\n    in the Software without restriction, including without limitation the rights\n    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n    copies of the Software, and to permit persons to whom the Software is\n    furnished to do so, subject to the following conditions:\n\n    The above copyright notice and this permission notice shall be included in all\n    copies or substantial portions of the Software.\n\n    THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n    SOFTWARE\n/package.json\u0003{\n    \"name\": \"@types/mime\",\n    \"version\": \"3.0.1\",\n    \"description\": \"TypeScript definitions for mime\",\n    \"homepage\": \"https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/mime\",\n    \"license\": \"MIT\",\n    \"contributors\": [\n        {\n            \"name\": \"Jeff Goddard\",\n            \"url\": \"https://github.com/jedigo\",\n            \"githubUsername\": \"jedigo\"\n        },\n        {\n            \"name\": \"Daniel Hritzkiv\",\n            \"url\": \"https://github.com/dhritzkiv\",\n            \"githubUsername\": \"dhritzkiv\"\n        }\n    ],\n    \"main\": \"\",\n    \"types\": \"index.d.ts\",\n    \"repository\": {\n        \"type\": \"git\",\n        \"url\": \"https://github.com/DefinitelyTyped/DefinitelyTyped.git\",\n        \"directory\": \"types/mime\"\n    },\n    \"scripts\": {},\n    \"dependencies\": {},\n    \"typesPublisherContentHash\": \"594e1e4777af908b69119d71c37be0a70e63c840095dcdb0881343b51b7286f3\",\n    \"typeScriptVersion\": \"4.0\"\n}/Mime.d.ts\u0001\u0017import type { TypeMap } from './index';\n\ndeclare class Mime {\n    constructor(typeMap: TypeMap, ...mimes: TypeMap[]);\n\n    getType(path: string): string | null;\n    getExtension(mime: string): string | null;\n    define(typeMap: TypeMap, force?: boolean): void;\n}\n\nexport = Mime;\n/README.md\u0002\"# Installation\r\n> `npm install --save @types/mime`\r\n\r\n# Summary\r\nThis package contains type definitions for mime (https://github.com/broofa/node-mime).\r\n\r\n# Details\r\nFiles were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/mime.\r\n\r\n### Additional Details\r\n * Last updated: Thu, 04 Aug 2022 21:02:19 GMT\r\n * Dependencies: none\r\n * Global values: `mime`, `mimelite`\r\n\r\n# Credits\r\nThese definitions were written by [Jeff Goddard](https://github.com/jedigo), and [Daniel Hritzkiv](https://github.com/dhritzkiv).\r\n/index.d.ts\u00023// Type definitions for mime 3.0\n// Project: https://github.com/broofa/node-mime\n// Definitions by: Jeff Goddard <https://github.com/jedigo>\n//                 Daniel Hritzkiv <https://github.com/dhritzkiv>\n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n\n// Originally imported from: https://github.com/soywiz/typescript-node-definitions/mime.d.ts\n\nimport Mime = require('./Mime');\n\nexport as namespace mime;\n\ndeclare namespace mime {\n    interface TypeMap {\n        [key: string]: string[];\n    }\n}\n\ndeclare const mime: Mime;\n\nexport = mime;\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QHR5cGVzL21zQDAuNy4zMQ==",
    "content": "/README.md\u0001# Installation\r\n> `npm install --save @types/ms`\r\n\r\n# Summary\r\nThis package contains type definitions for ms (https://github.com/zeit/ms).\r\n\r\n# Details\r\nFiles were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/ms\r\n\r\nAdditional Details\r\n * Last updated: Wed, 04 Sep 2019 20:48:21 GMT\r\n * Dependencies: none\r\n * Global values: none\r\n\r\n# Credits\r\nThese definitions were written by Zhiyuan Wang <https://github.com/danny8002>.\r\n/LICENSE\u0004    MIT License\r\n\r\n    Copyright (c) Microsoft Corporation. All rights reserved.\r\n\r\n    Permission is hereby granted, free of charge, to any person obtaining a copy\r\n    of this software and associated documentation files (the \"Software\"), to deal\r\n    in the Software without restriction, including without limitation the rights\r\n    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n    copies of the Software, and to permit persons to whom the Software is\r\n    furnished to do so, subject to the following conditions:\r\n\r\n    The above copyright notice and this permission notice shall be included in all\r\n    copies or substantial portions of the Software.\r\n\r\n    THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\n    SOFTWARE\r\n/package.json\u0002{\n    \"name\": \"@types/ms\",\n    \"version\": \"0.7.31\",\n    \"description\": \"TypeScript definitions for ms\",\n    \"license\": \"MIT\",\n    \"contributors\": [\n        {\n            \"name\": \"Zhiyuan Wang\",\n            \"url\": \"https://github.com/danny8002\",\n            \"githubUsername\": \"danny8002\"\n        }\n    ],\n    \"main\": \"\",\n    \"types\": \"index\",\n    \"repository\": {\n        \"type\": \"git\",\n        \"url\": \"https://github.com/DefinitelyTyped/DefinitelyTyped.git\",\n        \"directory\": \"types/ms\"\n    },\n    \"scripts\": {},\n    \"dependencies\": {},\n    \"typesPublisherContentHash\": \"ff2ed90b1d3539f07c5e91fe5cac8d4aa504a3290632a4e76a02d1684dcfabfc\",\n    \"typeScriptVersion\": \"2.0\"\n}/index.d.ts\u00021// Type definitions for ms v0.7.1\n// Project: https://github.com/zeit/ms\n// Definitions by: Zhiyuan Wang <https://github.com/danny8002>\n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n\n\n\n/**\n* Short/Long format for `value`.\n*\n* @param {Number} value\n* @param {{long: boolean}} options\n* @return {String}\n*/\ndeclare function ms(value: number, options?: { long: boolean }): string;\n\n/**\n* Parse the given `value` and return milliseconds.\n*\n* @param {String} value\n* @return {Number}\n*/\ndeclare function ms(value: string): number;\n\nexport = ms;\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QHR5cGVzL2JvZHktcGFyc2VyQDEuMTkuMg==",
    "content": "/LICENSE\u0004u    MIT License\n\n    Copyright (c) Microsoft Corporation.\n\n    Permission is hereby granted, free of charge, to any person obtaining a copy\n    of this software and associated documentation files (the \"Software\"), to deal\n    in the Software without restriction, including without limitation the rights\n    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n    copies of the Software, and to permit persons to whom the Software is\n    furnished to do so, subject to the following conditions:\n\n    The above copyright notice and this permission notice shall be included in all\n    copies or substantial portions of the Software.\n\n    THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n    SOFTWARE\n/index.d.ts\u0011v// Type definitions for body-parser 1.19\n// Project: https://github.com/expressjs/body-parser\n// Definitions by: Santi Albo <https://github.com/santialbo>\n//                 Vilic Vane <https://github.com/vilic>\n//                 Jonathan Häberle <https://github.com/dreampulse>\n//                 Gevik Babakhani <https://github.com/blendsdk>\n//                 Tomasz Łaziuk <https://github.com/tlaziuk>\n//                 Jason Walton <https://github.com/jwalton>\n//                 Piotr Błażejewicz <https://github.com/peterblazejewicz>\n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n\n/// <reference types=\"node\" />\n\nimport { NextHandleFunction } from 'connect';\nimport * as http from 'http';\n\n// for docs go to https://github.com/expressjs/body-parser/tree/1.19.0#body-parser\n\ndeclare namespace bodyParser {\n    interface BodyParser {\n        /**\n         * @deprecated  use individual json/urlencoded middlewares\n         */\n        (options?: OptionsJson & OptionsText & OptionsUrlencoded): NextHandleFunction;\n        /**\n         * Returns middleware that only parses json and only looks at requests\n         * where the Content-Type header matches the type option.\n         */\n        json(options?: OptionsJson): NextHandleFunction;\n        /**\n         * Returns middleware that parses all bodies as a Buffer and only looks at requests\n         * where the Content-Type header matches the type option.\n         */\n        raw(options?: Options): NextHandleFunction;\n\n        /**\n         * Returns middleware that parses all bodies as a string and only looks at requests\n         * where the Content-Type header matches the type option.\n         */\n        text(options?: OptionsText): NextHandleFunction;\n        /**\n         * Returns middleware that only parses urlencoded bodies and only looks at requests\n         * where the Content-Type header matches the type option\n         */\n        urlencoded(options?: OptionsUrlencoded): NextHandleFunction;\n    }\n\n    interface Options {\n        /** When set to true, then deflated (compressed) bodies will be inflated; when false, deflated bodies are rejected. Defaults to true. */\n        inflate?: boolean | undefined;\n        /**\n         * Controls the maximum request body size. If this is a number,\n         * then the value specifies the number of bytes; if it is a string,\n         * the value is passed to the bytes library for parsing. Defaults to '100kb'.\n         */\n        limit?: number | string | undefined;\n        /**\n         * The type option is used to determine what media type the middleware will parse\n         */\n        type?: string | string[] | ((req: http.IncomingMessage) => any) | undefined;\n        /**\n         * The verify option, if supplied, is called as verify(req, res, buf, encoding),\n         * where buf is a Buffer of the raw request body and encoding is the encoding of the request.\n         */\n        verify?(req: http.IncomingMessage, res: http.ServerResponse, buf: Buffer, encoding: string): void;\n    }\n\n    interface OptionsJson extends Options {\n        /**\n         *\n         * The reviver option is passed directly to JSON.parse as the second argument.\n         */\n        reviver?(key: string, value: any): any;\n        /**\n         * When set to `true`, will only accept arrays and objects;\n         * when `false` will accept anything JSON.parse accepts. Defaults to `true`.\n         */\n        strict?: boolean | undefined;\n    }\n\n    interface OptionsText extends Options {\n        /**\n         * Specify the default character set for the text content if the charset\n         * is not specified in the Content-Type header of the request.\n         * Defaults to `utf-8`.\n         */\n        defaultCharset?: string | undefined;\n    }\n\n    interface OptionsUrlencoded extends Options {\n        /**\n         * The extended option allows to choose between parsing the URL-encoded data\n         * with the querystring library (when `false`) or the qs library (when `true`).\n         */\n        extended?: boolean | undefined;\n        /**\n         * The parameterLimit option controls the maximum number of parameters\n         * that are allowed in the URL-encoded data. If a request contains more parameters than this value,\n         * a 413 will be returned to the client. Defaults to 1000.\n         */\n        parameterLimit?: number | undefined;\n    }\n}\n\ndeclare const bodyParser: bodyParser.BodyParser;\n\nexport = bodyParser;\n/README.md\u0003# Installation\r\n> `npm install --save @types/body-parser`\r\n\r\n# Summary\r\nThis package contains type definitions for body-parser (https://github.com/expressjs/body-parser).\r\n\r\n# Details\r\nFiles were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/body-parser.\r\n\r\n### Additional Details\r\n * Last updated: Tue, 16 Nov 2021 18:31:30 GMT\r\n * Dependencies: [@types/connect](https://npmjs.com/package/@types/connect), [@types/node](https://npmjs.com/package/@types/node)\r\n * Global values: none\r\n\r\n# Credits\r\nThese definitions were written by [Santi Albo](https://github.com/santialbo), [Vilic Vane](https://github.com/vilic), [Jonathan Häberle](https://github.com/dreampulse), [Gevik Babakhani](https://github.com/blendsdk), [Tomasz Łaziuk](https://github.com/tlaziuk), [Jason Walton](https://github.com/jwalton), and [Piotr Błażejewicz](https://github.com/peterblazejewicz).\r\n/package.json\u0006{\n    \"name\": \"@types/body-parser\",\n    \"version\": \"1.19.2\",\n    \"description\": \"TypeScript definitions for body-parser\",\n    \"homepage\": \"https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/body-parser\",\n    \"license\": \"MIT\",\n    \"contributors\": [\n        {\n            \"name\": \"Santi Albo\",\n            \"url\": \"https://github.com/santialbo\",\n            \"githubUsername\": \"santialbo\"\n        },\n        {\n            \"name\": \"Vilic Vane\",\n            \"url\": \"https://github.com/vilic\",\n            \"githubUsername\": \"vilic\"\n        },\n        {\n            \"name\": \"Jonathan Häberle\",\n            \"url\": \"https://github.com/dreampulse\",\n            \"githubUsername\": \"dreampulse\"\n        },\n        {\n            \"name\": \"Gevik Babakhani\",\n            \"url\": \"https://github.com/blendsdk\",\n            \"githubUsername\": \"blendsdk\"\n        },\n        {\n            \"name\": \"Tomasz Łaziuk\",\n            \"url\": \"https://github.com/tlaziuk\",\n            \"githubUsername\": \"tlaziuk\"\n        },\n        {\n            \"name\": \"Jason Walton\",\n            \"url\": \"https://github.com/jwalton\",\n            \"githubUsername\": \"jwalton\"\n        },\n        {\n            \"name\": \"Piotr Błażejewicz\",\n            \"url\": \"https://github.com/peterblazejewicz\",\n            \"githubUsername\": \"peterblazejewicz\"\n        }\n    ],\n    \"main\": \"\",\n    \"types\": \"index.d.ts\",\n    \"repository\": {\n        \"type\": \"git\",\n        \"url\": \"https://github.com/DefinitelyTyped/DefinitelyTyped.git\",\n        \"directory\": \"types/body-parser\"\n    },\n    \"scripts\": {},\n    \"dependencies\": {\n        \"@types/connect\": \"*\",\n        \"@types/node\": \"*\"\n    },\n    \"typesPublisherContentHash\": \"ad069aa8b9e8a95f66df025de11975c773540e4071000abdb7db565579b013ee\",\n    \"typeScriptVersion\": \"3.7\"\n}"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QHR5cGVzL2Nvbm5lY3RAMy40LjM1",
    "content": "/index.d.ts\ru// Type definitions for connect v3.4.0\n// Project: https://github.com/senchalabs/connect\n// Definitions by: Maxime LUCE <https://github.com/SomaticIT>\n//                 Evan Hahn <https://github.com/EvanHahn>\n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n\n/// <reference types=\"node\" />\n\n\nimport * as http from \"http\";\n\n/**\n * Create a new connect server.\n */\ndeclare function createServer(): createServer.Server;\n\ndeclare namespace createServer {\n    export type ServerHandle = HandleFunction | http.Server;\n\n    export class IncomingMessage extends http.IncomingMessage {\n        originalUrl?: http.IncomingMessage[\"url\"] | undefined;\n    }\n\n    type NextFunction = (err?: any) => void;\n\n    export type SimpleHandleFunction = (req: IncomingMessage, res: http.ServerResponse) => void;\n    export type NextHandleFunction = (req: IncomingMessage, res: http.ServerResponse, next: NextFunction) => void;\n    export type ErrorHandleFunction = (err: any, req: IncomingMessage, res: http.ServerResponse, next: NextFunction) => void;\n    export type HandleFunction = SimpleHandleFunction | NextHandleFunction | ErrorHandleFunction;\n\n    export interface ServerStackItem {\n        route: string;\n        handle: ServerHandle;\n    }\n\n    export interface Server extends NodeJS.EventEmitter {\n        (req: http.IncomingMessage, res: http.ServerResponse, next?: Function): void;\n\n        route: string;\n        stack: ServerStackItem[];\n\n        /**\n        * Utilize the given middleware `handle` to the given `route`,\n        * defaulting to _/_. This \"route\" is the mount-point for the\n        * middleware, when given a value other than _/_ the middleware\n        * is only effective when that segment is present in the request's\n        * pathname.\n        *\n        * For example if we were to mount a function at _/admin_, it would\n        * be invoked on _/admin_, and _/admin/settings_, however it would\n        * not be invoked for _/_, or _/posts_.\n        */\n        use(fn: NextHandleFunction): Server;\n        use(fn: HandleFunction): Server;\n        use(route: string, fn: NextHandleFunction): Server;\n        use(route: string, fn: HandleFunction): Server;\n\n        /**\n        * Handle server requests, punting them down\n        * the middleware stack.\n        */\n        handle(req: http.IncomingMessage, res: http.ServerResponse, next: Function): void;\n\n        /**\n        * Listen for connections.\n        *\n        * This method takes the same arguments\n        * as node's `http.Server#listen()`.\n        *\n        * HTTP and HTTPS:\n        *\n        * If you run your application both as HTTP\n        * and HTTPS you may wrap them individually,\n        * since your Connect \"server\" is really just\n        * a JavaScript `Function`.\n        *\n        *      var connect = require('connect')\n        *        , http = require('http')\n        *        , https = require('https');\n        *\n        *      var app = connect();\n        *\n        *      http.createServer(app).listen(80);\n        *      https.createServer(options, app).listen(443);\n        */\n        listen(port: number, hostname?: string, backlog?: number, callback?: Function): http.Server;\n        listen(port: number, hostname?: string, callback?: Function): http.Server;\n        listen(path: string, callback?: Function): http.Server;\n        listen(handle: any, listeningListener?: Function): http.Server;\n    }\n}\n\nexport = createServer;\n/package.json\u0003{\n    \"name\": \"@types/connect\",\n    \"version\": \"3.4.35\",\n    \"description\": \"TypeScript definitions for connect\",\n    \"homepage\": \"https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/connect\",\n    \"license\": \"MIT\",\n    \"contributors\": [\n        {\n            \"name\": \"Maxime LUCE\",\n            \"url\": \"https://github.com/SomaticIT\",\n            \"githubUsername\": \"SomaticIT\"\n        },\n        {\n            \"name\": \"Evan Hahn\",\n            \"url\": \"https://github.com/EvanHahn\",\n            \"githubUsername\": \"EvanHahn\"\n        }\n    ],\n    \"main\": \"\",\n    \"types\": \"index.d.ts\",\n    \"repository\": {\n        \"type\": \"git\",\n        \"url\": \"https://github.com/DefinitelyTyped/DefinitelyTyped.git\",\n        \"directory\": \"types/connect\"\n    },\n    \"scripts\": {},\n    \"dependencies\": {\n        \"@types/node\": \"*\"\n    },\n    \"typesPublisherContentHash\": \"09c0dcec5f675cb2bdd7487a85447955f769ef4ab174294478c4f055b528fecc\",\n    \"typeScriptVersion\": \"3.6\"\n}/LICENSE\u0004u    MIT License\n\n    Copyright (c) Microsoft Corporation.\n\n    Permission is hereby granted, free of charge, to any person obtaining a copy\n    of this software and associated documentation files (the \"Software\"), to deal\n    in the Software without restriction, including without limitation the rights\n    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n    copies of the Software, and to permit persons to whom the Software is\n    furnished to do so, subject to the following conditions:\n\n    The above copyright notice and this permission notice shall be included in all\n    copies or substantial portions of the Software.\n\n    THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n    SOFTWARE\n/README.md\u0002J# Installation\r\n> `npm install --save @types/connect`\r\n\r\n# Summary\r\nThis package contains type definitions for connect (https://github.com/senchalabs/connect).\r\n\r\n# Details\r\nFiles were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/connect.\r\n\r\n### Additional Details\r\n * Last updated: Tue, 06 Jul 2021 20:32:28 GMT\r\n * Dependencies: [@types/node](https://npmjs.com/package/@types/node)\r\n * Global values: none\r\n\r\n# Credits\r\nThese definitions were written by [Maxime LUCE](https://github.com/SomaticIT), and [Evan Hahn](https://github.com/EvanHahn).\r\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QHR5cGVzL2RlYnVnQDQuMS43",
    "content": "/README.md\n^# Installation\r\n> `npm install --save @types/debug`\r\n\r\n# Summary\r\nThis package contains type definitions for debug (https://github.com/visionmedia/debug).\r\n\r\n# Details\r\nFiles were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/debug.\r\n## [index.d.ts](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/debug/index.d.ts)\r\n````ts\r\n// Type definitions for debug 4.1\n// Project: https://github.com/visionmedia/debug\n// Definitions by: Seon-Wook Park <https://github.com/swook>\n//                 Gal Talmor <https://github.com/galtalmor>\n//                 John McLaughlin <https://github.com/zamb3zi>\n//                 Brasten Sager <https://github.com/brasten>\n//                 Nicolas Penin <https://github.com/npenin>\n//                 Kristian Brünn <https://github.com/kristianmitk>\n//                 Caleb Gregory <https://github.com/calebgregory>\n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n\ndeclare var debug: debug.Debug & { debug: debug.Debug; default: debug.Debug };\n\nexport = debug;\nexport as namespace debug;\n\ndeclare namespace debug {\n    interface Debug {\n        (namespace: string): Debugger;\n        coerce: (val: any) => any;\n        disable: () => string;\n        enable: (namespaces: string) => void;\n        enabled: (namespaces: string) => boolean;\n        formatArgs: (this: Debugger, args: any[]) => void;\n        log: (...args: any[]) => any;\n        selectColor: (namespace: string) => string | number;\n        humanize: typeof import('ms');\n\n        names: RegExp[];\n        skips: RegExp[];\n\n        formatters: Formatters;\n    }\n\n    type IDebug = Debug;\n\n    interface Formatters {\n        [formatter: string]: (v: any) => string;\n    }\n\n    type IDebugger = Debugger;\n\n    interface Debugger {\n        (formatter: any, ...args: any[]): void;\n\n        color: string;\n        diff: number;\n        enabled: boolean;\n        log: (...args: any[]) => any;\n        namespace: string;\n        destroy: () => boolean;\n        extend: (namespace: string, delimiter?: string) => Debugger;\n    }\n}\n\r\n````\r\n\r\n### Additional Details\r\n * Last updated: Sat, 24 Jul 2021 08:01:14 GMT\r\n * Dependencies: [@types/ms](https://npmjs.com/package/@types/ms)\r\n * Global values: `debug`\r\n\r\n# Credits\r\nThese definitions were written by [Seon-Wook Park](https://github.com/swook), [Gal Talmor](https://github.com/galtalmor), [John McLaughlin](https://github.com/zamb3zi), [Brasten Sager](https://github.com/brasten), [Nicolas Penin](https://github.com/npenin), [Kristian Brünn](https://github.com/kristianmitk), and [Caleb Gregory](https://github.com/calebgregory).\r\n/LICENSE\u0004u    MIT License\n\n    Copyright (c) Microsoft Corporation.\n\n    Permission is hereby granted, free of charge, to any person obtaining a copy\n    of this software and associated documentation files (the \"Software\"), to deal\n    in the Software without restriction, including without limitation the rights\n    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n    copies of the Software, and to permit persons to whom the Software is\n    furnished to do so, subject to the following conditions:\n\n    The above copyright notice and this permission notice shall be included in all\n    copies or substantial portions of the Software.\n\n    THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n    SOFTWARE\n/index.d.ts\u0006// Type definitions for debug 4.1\n// Project: https://github.com/visionmedia/debug\n// Definitions by: Seon-Wook Park <https://github.com/swook>\n//                 Gal Talmor <https://github.com/galtalmor>\n//                 John McLaughlin <https://github.com/zamb3zi>\n//                 Brasten Sager <https://github.com/brasten>\n//                 Nicolas Penin <https://github.com/npenin>\n//                 Kristian Brünn <https://github.com/kristianmitk>\n//                 Caleb Gregory <https://github.com/calebgregory>\n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n\ndeclare var debug: debug.Debug & { debug: debug.Debug; default: debug.Debug };\n\nexport = debug;\nexport as namespace debug;\n\ndeclare namespace debug {\n    interface Debug {\n        (namespace: string): Debugger;\n        coerce: (val: any) => any;\n        disable: () => string;\n        enable: (namespaces: string) => void;\n        enabled: (namespaces: string) => boolean;\n        formatArgs: (this: Debugger, args: any[]) => void;\n        log: (...args: any[]) => any;\n        selectColor: (namespace: string) => string | number;\n        humanize: typeof import('ms');\n\n        names: RegExp[];\n        skips: RegExp[];\n\n        formatters: Formatters;\n    }\n\n    type IDebug = Debug;\n\n    interface Formatters {\n        [formatter: string]: (v: any) => string;\n    }\n\n    type IDebugger = Debugger;\n\n    interface Debugger {\n        (formatter: any, ...args: any[]): void;\n\n        color: string;\n        diff: number;\n        enabled: boolean;\n        log: (...args: any[]) => any;\n        namespace: string;\n        destroy: () => boolean;\n        extend: (namespace: string, delimiter?: string) => Debugger;\n    }\n}\n/package.json\u0006{\n    \"name\": \"@types/debug\",\n    \"version\": \"4.1.7\",\n    \"description\": \"TypeScript definitions for debug\",\n    \"homepage\": \"https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/debug\",\n    \"license\": \"MIT\",\n    \"contributors\": [\n        {\n            \"name\": \"Seon-Wook Park\",\n            \"url\": \"https://github.com/swook\",\n            \"githubUsername\": \"swook\"\n        },\n        {\n            \"name\": \"Gal Talmor\",\n            \"url\": \"https://github.com/galtalmor\",\n            \"githubUsername\": \"galtalmor\"\n        },\n        {\n            \"name\": \"John McLaughlin\",\n            \"url\": \"https://github.com/zamb3zi\",\n            \"githubUsername\": \"zamb3zi\"\n        },\n        {\n            \"name\": \"Brasten Sager\",\n            \"url\": \"https://github.com/brasten\",\n            \"githubUsername\": \"brasten\"\n        },\n        {\n            \"name\": \"Nicolas Penin\",\n            \"url\": \"https://github.com/npenin\",\n            \"githubUsername\": \"npenin\"\n        },\n        {\n            \"name\": \"Kristian Brünn\",\n            \"url\": \"https://github.com/kristianmitk\",\n            \"githubUsername\": \"kristianmitk\"\n        },\n        {\n            \"name\": \"Caleb Gregory\",\n            \"url\": \"https://github.com/calebgregory\",\n            \"githubUsername\": \"calebgregory\"\n        }\n    ],\n    \"main\": \"\",\n    \"types\": \"index.d.ts\",\n    \"repository\": {\n        \"type\": \"git\",\n        \"url\": \"https://github.com/DefinitelyTyped/DefinitelyTyped.git\",\n        \"directory\": \"types/debug\"\n    },\n    \"scripts\": {},\n    \"dependencies\": {\n        \"@types/ms\": \"*\"\n    },\n    \"typesPublisherContentHash\": \"b83b27a0dee1329b5308b30bc0a4193efda8f025b3f5d9301130acb5be89a5b7\",\n    \"typeScriptVersion\": \"3.6\"\n}"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QHR5cGVzL2V4cHJlc3Mtc2VydmUtc3RhdGljLWNvcmVANC4xNy4zMw==",
    "content": "/index.d.tsŠ// Type definitions for Express 4.17\n// Project: http://expressjs.com\n// Definitions by: Boris Yankov <https://github.com/borisyankov>\n//                 Satana Charuwichitratana <https://github.com/micksatana>\n//                 Sami Jaber <https://github.com/samijaber>\n//                 Jose Luis Leon <https://github.com/JoseLion>\n//                 David Stephens <https://github.com/dwrss>\n//                 Shin Ando <https://github.com/andoshin11>\n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.3\n\n// This extracts the core definitions from express to prevent a circular dependency between express and serve-static\n/// <reference types=\"node\" />\n\ndeclare global {\n    namespace Express {\n        // These open interfaces may be extended in an application-specific manner via declaration merging.\n        // See for example method-override.d.ts (https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/method-override/index.d.ts)\n        interface Request {}\n        interface Response {}\n        interface Locals {}\n        interface Application {}\n    }\n}\n\nimport * as http from 'http';\nimport { EventEmitter } from 'events';\nimport { Options as RangeParserOptions, Result as RangeParserResult, Ranges as RangeParserRanges } from 'range-parser';\nimport { ParsedQs } from 'qs';\n\nexport {};\n\nexport type Query = ParsedQs;\n\nexport interface NextFunction {\n    (err?: any): void;\n    /**\n     * \"Break-out\" of a router by calling {next('router')};\n     * @see {https://expressjs.com/en/guide/using-middleware.html#middleware.router}\n     */\n    (deferToNext: 'router'): void;\n    /**\n     * \"Break-out\" of a route by calling {next('route')};\n     * @see {https://expressjs.com/en/guide/using-middleware.html#middleware.application}\n     */\n    (deferToNext: 'route'): void;\n}\n\nexport interface Dictionary<T> {\n    [key: string]: T;\n}\n\nexport interface ParamsDictionary {\n    [key: string]: string;\n}\nexport type ParamsArray = string[];\nexport type Params = ParamsDictionary | ParamsArray;\n\nexport interface Locals extends Express.Locals {}\n\nexport interface RequestHandler<\n    P = ParamsDictionary,\n    ResBody = any,\n    ReqBody = any,\n    ReqQuery = ParsedQs,\n    LocalsObj extends Record<string, any> = Record<string, any>\n> {\n    // tslint:disable-next-line callable-types (This is extended from and can't extend from a type alias in ts<2.2)\n    (\n        req: Request<P, ResBody, ReqBody, ReqQuery, LocalsObj>,\n        res: Response<ResBody, LocalsObj>,\n        next: NextFunction,\n    ): void;\n}\n\nexport type ErrorRequestHandler<\n    P = ParamsDictionary,\n    ResBody = any,\n    ReqBody = any,\n    ReqQuery = ParsedQs,\n    LocalsObj extends Record<string, any> = Record<string, any>\n> = (\n    err: any,\n    req: Request<P, ResBody, ReqBody, ReqQuery, LocalsObj>,\n    res: Response<ResBody, LocalsObj>,\n    next: NextFunction,\n) => void;\n\nexport type PathParams = string | RegExp | Array<string | RegExp>;\n\nexport type RequestHandlerParams<\n    P = ParamsDictionary,\n    ResBody = any,\n    ReqBody = any,\n    ReqQuery = ParsedQs,\n    LocalsObj extends Record<string, any> = Record<string, any>\n> =\n    | RequestHandler<P, ResBody, ReqBody, ReqQuery, LocalsObj>\n    | ErrorRequestHandler<P, ResBody, ReqBody, ReqQuery, LocalsObj>\n    | Array<RequestHandler<P> | ErrorRequestHandler<P>>;\n\ntype RemoveTail<S extends string, Tail extends string> = S extends `${infer P}${Tail}` ? P : S;\ntype GetRouteParameter<S extends string> = RemoveTail<\n    RemoveTail<RemoveTail<S, `/${string}`>, `-${string}`>,\n    `.${string}`\n>;\n\n// prettier-ignore\nexport type RouteParameters<Route extends string> = string extends Route\n    ? ParamsDictionary\n    : Route extends `${string}(${string}`\n        ? ParamsDictionary //TODO: handling for regex parameters\n        : Route extends `${string}:${infer Rest}`\n            ? (\n            GetRouteParameter<Rest> extends never\n                ? ParamsDictionary\n                : GetRouteParameter<Rest> extends `${infer ParamName}?`\n                    ? { [P in ParamName]?: string }\n                    : { [P in GetRouteParameter<Rest>]: string }\n            ) &\n            (Rest extends `${GetRouteParameter<Rest>}${infer Next}`\n                ? RouteParameters<Next> : unknown)\n            : {};\n\nexport interface IRouterMatcher<\n    T,\n    Method extends 'all' | 'get' | 'post' | 'put' | 'delete' | 'patch' | 'options' | 'head' = any\n> {\n    <\n        Route extends string,\n        P = RouteParameters<Route>,\n        ResBody = any,\n        ReqBody = any,\n        ReqQuery = ParsedQs,\n        LocalsObj extends Record<string, any> = Record<string, any>\n    >(\n        // (it's used as the default type parameter for P)\n        // eslint-disable-next-line no-unnecessary-generics\n        path: Route,\n        // (This generic is meant to be passed explicitly.)\n        // eslint-disable-next-line no-unnecessary-generics\n        ...handlers: Array<RequestHandler<P, ResBody, ReqBody, ReqQuery, LocalsObj>>\n    ): T;\n    <\n        Path extends string,\n        P = RouteParameters<Path>,\n        ResBody = any,\n        ReqBody = any,\n        ReqQuery = ParsedQs,\n        LocalsObj extends Record<string, any> = Record<string, any>\n    >(\n        // (it's used as the default type parameter for P)\n        // eslint-disable-next-line no-unnecessary-generics\n        path: Path,\n        // (This generic is meant to be passed explicitly.)\n        // eslint-disable-next-line no-unnecessary-generics\n        ...handlers: Array<RequestHandlerParams<P, ResBody, ReqBody, ReqQuery, LocalsObj>>\n    ): T;\n    <\n        P = ParamsDictionary,\n        ResBody = any,\n        ReqBody = any,\n        ReqQuery = ParsedQs,\n        LocalsObj extends Record<string, any> = Record<string, any>\n    >(\n        path: PathParams,\n        // (This generic is meant to be passed explicitly.)\n        // eslint-disable-next-line no-unnecessary-generics\n        ...handlers: Array<RequestHandler<P, ResBody, ReqBody, ReqQuery, LocalsObj>>\n    ): T;\n    <\n        P = ParamsDictionary,\n        ResBody = any,\n        ReqBody = any,\n        ReqQuery = ParsedQs,\n        LocalsObj extends Record<string, any> = Record<string, any>\n    >(\n        path: PathParams,\n        // (This generic is meant to be passed explicitly.)\n        // eslint-disable-next-line no-unnecessary-generics\n        ...handlers: Array<RequestHandlerParams<P, ResBody, ReqBody, ReqQuery, LocalsObj>>\n    ): T;\n    (path: PathParams, subApplication: Application): T;\n}\n\nexport interface IRouterHandler<T, Route extends string = string> {\n    (...handlers: Array<RequestHandler<RouteParameters<Route>>>): T;\n    (...handlers: Array<RequestHandlerParams<RouteParameters<Route>>>): T;\n    <\n        P = RouteParameters<Route>,\n        ResBody = any,\n        ReqBody = any,\n        ReqQuery = ParsedQs,\n        LocalsObj extends Record<string, any> = Record<string, any>\n        >(\n        // (This generic is meant to be passed explicitly.)\n            // eslint-disable-next-line no-unnecessary-generics\n        ...handlers: Array<RequestHandler<P, ResBody, ReqBody, ReqQuery, LocalsObj>>\n    ): T;\n    <\n        P = RouteParameters<Route>,\n        ResBody = any,\n        ReqBody = any,\n        ReqQuery = ParsedQs,\n        LocalsObj extends Record<string, any> = Record<string, any>\n        >(\n        // (This generic is meant to be passed explicitly.)\n            // eslint-disable-next-line no-unnecessary-generics\n        ...handlers: Array<RequestHandlerParams<P, ResBody, ReqBody, ReqQuery, LocalsObj>>\n    ): T;\n    <\n        P = ParamsDictionary,\n        ResBody = any,\n        ReqBody = any,\n        ReqQuery = ParsedQs,\n        LocalsObj extends Record<string, any> = Record<string, any>\n    >(\n        // (This generic is meant to be passed explicitly.)\n        // eslint-disable-next-line no-unnecessary-generics\n        ...handlers: Array<RequestHandler<P, ResBody, ReqBody, ReqQuery, LocalsObj>>\n    ): T;\n    <\n        P = ParamsDictionary,\n        ResBody = any,\n        ReqBody = any,\n        ReqQuery = ParsedQs,\n        LocalsObj extends Record<string, any> = Record<string, any>\n    >(\n        // (This generic is meant to be passed explicitly.)\n        // eslint-disable-next-line no-unnecessary-generics\n        ...handlers: Array<RequestHandlerParams<P, ResBody, ReqBody, ReqQuery, LocalsObj>>\n    ): T;\n}\n\nexport interface IRouter extends RequestHandler {\n    /**\n     * Map the given param placeholder `name`(s) to the given callback(s).\n     *\n     * Parameter mapping is used to provide pre-conditions to routes\n     * which use normalized placeholders. For example a _:user_id_ parameter\n     * could automatically load a user's information from the database without\n     * any additional code,\n     *\n     * The callback uses the samesignature as middleware, the only differencing\n     * being that the value of the placeholder is passed, in this case the _id_\n     * of the user. Once the `next()` function is invoked, just like middleware\n     * it will continue on to execute the route, or subsequent parameter functions.\n     *\n     *      app.param('user_id', function(req, res, next, id){\n     *        User.find(id, function(err, user){\n     *          if (err) {\n     *            next(err);\n     *          } else if (user) {\n     *            req.user = user;\n     *            next();\n     *          } else {\n     *            next(new Error('failed to load user'));\n     *          }\n     *        });\n     *      });\n     */\n    param(name: string, handler: RequestParamHandler): this;\n\n    /**\n     * Alternatively, you can pass only a callback, in which case you have the opportunity to alter the app.param()\n     *\n     * @deprecated since version 4.11\n     */\n    param(callback: (name: string, matcher: RegExp) => RequestParamHandler): this;\n\n    /**\n     * Special-cased \"all\" method, applying the given route `path`,\n     * middleware, and callback to _every_ HTTP method.\n     */\n    all: IRouterMatcher<this, 'all'>;\n    get: IRouterMatcher<this, 'get'>;\n    post: IRouterMatcher<this, 'post'>;\n    put: IRouterMatcher<this, 'put'>;\n    delete: IRouterMatcher<this, 'delete'>;\n    patch: IRouterMatcher<this, 'patch'>;\n    options: IRouterMatcher<this, 'options'>;\n    head: IRouterMatcher<this, 'head'>;\n\n    checkout: IRouterMatcher<this>;\n    connect: IRouterMatcher<this>;\n    copy: IRouterMatcher<this>;\n    lock: IRouterMatcher<this>;\n    merge: IRouterMatcher<this>;\n    mkactivity: IRouterMatcher<this>;\n    mkcol: IRouterMatcher<this>;\n    move: IRouterMatcher<this>;\n    'm-search': IRouterMatcher<this>;\n    notify: IRouterMatcher<this>;\n    propfind: IRouterMatcher<this>;\n    proppatch: IRouterMatcher<this>;\n    purge: IRouterMatcher<this>;\n    report: IRouterMatcher<this>;\n    search: IRouterMatcher<this>;\n    subscribe: IRouterMatcher<this>;\n    trace: IRouterMatcher<this>;\n    unlock: IRouterMatcher<this>;\n    unsubscribe: IRouterMatcher<this>;\n\n    use: IRouterHandler<this> & IRouterMatcher<this>;\n\n    route<T extends string>(prefix: T): IRoute<T>;\n    route(prefix: PathParams): IRoute;\n    /**\n     * Stack of configured routes\n     */\n    stack: any[];\n}\n\nexport interface IRoute<Route extends string = string> {\n    path: string;\n    stack: any;\n    all: IRouterHandler<this, Route>;\n    get: IRouterHandler<this, Route>;\n    post: IRouterHandler<this, Route>;\n    put: IRouterHandler<this, Route>;\n    delete: IRouterHandler<this, Route>;\n    patch: IRouterHandler<this, Route>;\n    options: IRouterHandler<this, Route>;\n    head: IRouterHandler<this, Route>;\n\n    checkout: IRouterHandler<this, Route>;\n    copy: IRouterHandler<this, Route>;\n    lock: IRouterHandler<this, Route>;\n    merge: IRouterHandler<this, Route>;\n    mkactivity: IRouterHandler<this, Route>;\n    mkcol: IRouterHandler<this, Route>;\n    move: IRouterHandler<this, Route>;\n    'm-search': IRouterHandler<this, Route>;\n    notify: IRouterHandler<this, Route>;\n    purge: IRouterHandler<this, Route>;\n    report: IRouterHandler<this, Route>;\n    search: IRouterHandler<this, Route>;\n    subscribe: IRouterHandler<this, Route>;\n    trace: IRouterHandler<this, Route>;\n    unlock: IRouterHandler<this, Route>;\n    unsubscribe: IRouterHandler<this, Route>;\n}\n\nexport interface Router extends IRouter {}\n\nexport interface CookieOptions {\n    maxAge?: number | undefined;\n    signed?: boolean | undefined;\n    expires?: Date | undefined;\n    httpOnly?: boolean | undefined;\n    path?: string | undefined;\n    domain?: string | undefined;\n    secure?: boolean | undefined;\n    encode?: ((val: string) => string) | undefined;\n    sameSite?: boolean | 'lax' | 'strict' | 'none' | undefined;\n}\n\nexport interface ByteRange {\n    start: number;\n    end: number;\n}\n\nexport interface RequestRanges extends RangeParserRanges {}\n\nexport type Errback = (err: Error) => void;\n\n/**\n * @param P  For most requests, this should be `ParamsDictionary`, but if you're\n * using this in a route handler for a route that uses a `RegExp` or a wildcard\n * `string` path (e.g. `'/user/*'`), then `req.params` will be an array, in\n * which case you should use `ParamsArray` instead.\n *\n * @see https://expressjs.com/en/api.html#req.params\n *\n * @example\n *     app.get('/user/:id', (req, res) => res.send(req.params.id)); // implicitly `ParamsDictionary`\n *     app.get<ParamsArray>(/user\\/(.*)/, (req, res) => res.send(req.params[0]));\n *     app.get<ParamsArray>('/user/*', (req, res) => res.send(req.params[0]));\n */\nexport interface Request<\n    P = ParamsDictionary,\n    ResBody = any,\n    ReqBody = any,\n    ReqQuery = ParsedQs,\n    LocalsObj extends Record<string, any> = Record<string, any>\n> extends http.IncomingMessage,\n        Express.Request {\n    /**\n     * Return request header.\n     *\n     * The `Referrer` header field is special-cased,\n     * both `Referrer` and `Referer` are interchangeable.\n     *\n     * Examples:\n     *\n     *     req.get('Content-Type');\n     *     // => \"text/plain\"\n     *\n     *     req.get('content-type');\n     *     // => \"text/plain\"\n     *\n     *     req.get('Something');\n     *     // => undefined\n     *\n     * Aliased as `req.header()`.\n     */\n    get(name: 'set-cookie'): string[] | undefined;\n    get(name: string): string | undefined;\n\n    header(name: 'set-cookie'): string[] | undefined;\n    header(name: string): string | undefined;\n\n    /**\n     * Check if the given `type(s)` is acceptable, returning\n     * the best match when true, otherwise `undefined`, in which\n     * case you should respond with 406 \"Not Acceptable\".\n     *\n     * The `type` value may be a single mime type string\n     * such as \"application/json\", the extension name\n     * such as \"json\", a comma-delimted list such as \"json, html, text/plain\",\n     * or an array `[\"json\", \"html\", \"text/plain\"]`. When a list\n     * or array is given the _best_ match, if any is returned.\n     *\n     * Examples:\n     *\n     *     // Accept: text/html\n     *     req.accepts('html');\n     *     // => \"html\"\n     *\n     *     // Accept: text/*, application/json\n     *     req.accepts('html');\n     *     // => \"html\"\n     *     req.accepts('text/html');\n     *     // => \"text/html\"\n     *     req.accepts('json, text');\n     *     // => \"json\"\n     *     req.accepts('application/json');\n     *     // => \"application/json\"\n     *\n     *     // Accept: text/*, application/json\n     *     req.accepts('image/png');\n     *     req.accepts('png');\n     *     // => undefined\n     *\n     *     // Accept: text/*;q=.5, application/json\n     *     req.accepts(['html', 'json']);\n     *     req.accepts('html, json');\n     *     // => \"json\"\n     */\n    accepts(): string[];\n    accepts(type: string): string | false;\n    accepts(type: string[]): string | false;\n    accepts(...type: string[]): string | false;\n\n    /**\n     * Returns the first accepted charset of the specified character sets,\n     * based on the request's Accept-Charset HTTP header field.\n     * If none of the specified charsets is accepted, returns false.\n     *\n     * For more information, or if you have issues or concerns, see accepts.\n     */\n    acceptsCharsets(): string[];\n    acceptsCharsets(charset: string): string | false;\n    acceptsCharsets(charset: string[]): string | false;\n    acceptsCharsets(...charset: string[]): string | false;\n\n    /**\n     * Returns the first accepted encoding of the specified encodings,\n     * based on the request's Accept-Encoding HTTP header field.\n     * If none of the specified encodings is accepted, returns false.\n     *\n     * For more information, or if you have issues or concerns, see accepts.\n     */\n    acceptsEncodings(): string[];\n    acceptsEncodings(encoding: string): string | false;\n    acceptsEncodings(encoding: string[]): string | false;\n    acceptsEncodings(...encoding: string[]): string | false;\n\n    /**\n     * Returns the first accepted language of the specified languages,\n     * based on the request's Accept-Language HTTP header field.\n     * If none of the specified languages is accepted, returns false.\n     *\n     * For more information, or if you have issues or concerns, see accepts.\n     */\n    acceptsLanguages(): string[];\n    acceptsLanguages(lang: string): string | false;\n    acceptsLanguages(lang: string[]): string | false;\n    acceptsLanguages(...lang: string[]): string | false;\n\n    /**\n     * Parse Range header field, capping to the given `size`.\n     *\n     * Unspecified ranges such as \"0-\" require knowledge of your resource length. In\n     * the case of a byte range this is of course the total number of bytes.\n     * If the Range header field is not given `undefined` is returned.\n     * If the Range header field is given, return value is a result of range-parser.\n     * See more ./types/range-parser/index.d.ts\n     *\n     * NOTE: remember that ranges are inclusive, so for example \"Range: users=0-3\"\n     * should respond with 4 users when available, not 3.\n     *\n     */\n    range(size: number, options?: RangeParserOptions): RangeParserRanges | RangeParserResult | undefined;\n\n    /**\n     * Return an array of Accepted media types\n     * ordered from highest quality to lowest.\n     */\n    accepted: MediaType[];\n\n    /**\n     * @deprecated since 4.11 Use either req.params, req.body or req.query, as applicable.\n     *\n     * Return the value of param `name` when present or `defaultValue`.\n     *\n     *  - Checks route placeholders, ex: _/user/:id_\n     *  - Checks body params, ex: id=12, {\"id\":12}\n     *  - Checks query string params, ex: ?id=12\n     *\n     * To utilize request bodies, `req.body`\n     * should be an object. This can be done by using\n     * the `connect.bodyParser()` middleware.\n     */\n    param(name: string, defaultValue?: any): string;\n\n    /**\n     * Check if the incoming request contains the \"Content-Type\"\n     * header field, and it contains the give mime `type`.\n     *\n     * Examples:\n     *\n     *      // With Content-Type: text/html; charset=utf-8\n     *      req.is('html');\n     *      req.is('text/html');\n     *      req.is('text/*');\n     *      // => true\n     *\n     *      // When Content-Type is application/json\n     *      req.is('json');\n     *      req.is('application/json');\n     *      req.is('application/*');\n     *      // => true\n     *\n     *      req.is('html');\n     *      // => false\n     */\n    is(type: string | string[]): string | false | null;\n\n    /**\n     * Return the protocol string \"http\" or \"https\"\n     * when requested with TLS. When the \"trust proxy\"\n     * setting is enabled the \"X-Forwarded-Proto\" header\n     * field will be trusted. If you're running behind\n     * a reverse proxy that supplies https for you this\n     * may be enabled.\n     */\n    protocol: string;\n\n    /**\n     * Short-hand for:\n     *\n     *    req.protocol == 'https'\n     */\n    secure: boolean;\n\n    /**\n     * Return the remote address, or when\n     * \"trust proxy\" is `true` return\n     * the upstream addr.\n     */\n    ip: string;\n\n    /**\n     * When \"trust proxy\" is `true`, parse\n     * the \"X-Forwarded-For\" ip address list.\n     *\n     * For example if the value were \"client, proxy1, proxy2\"\n     * you would receive the array `[\"client\", \"proxy1\", \"proxy2\"]`\n     * where \"proxy2\" is the furthest down-stream.\n     */\n    ips: string[];\n\n    /**\n     * Return subdomains as an array.\n     *\n     * Subdomains are the dot-separated parts of the host before the main domain of\n     * the app. By default, the domain of the app is assumed to be the last two\n     * parts of the host. This can be changed by setting \"subdomain offset\".\n     *\n     * For example, if the domain is \"tobi.ferrets.example.com\":\n     * If \"subdomain offset\" is not set, req.subdomains is `[\"ferrets\", \"tobi\"]`.\n     * If \"subdomain offset\" is 3, req.subdomains is `[\"tobi\"]`.\n     */\n    subdomains: string[];\n\n    /**\n     * Short-hand for `url.parse(req.url).pathname`.\n     */\n    path: string;\n\n    /**\n     * Parse the \"Host\" header field hostname.\n     */\n    hostname: string;\n\n    /**\n     * @deprecated Use hostname instead.\n     */\n    host: string;\n\n    /**\n     * Check if the request is fresh, aka\n     * Last-Modified and/or the ETag\n     * still match.\n     */\n    fresh: boolean;\n\n    /**\n     * Check if the request is stale, aka\n     * \"Last-Modified\" and / or the \"ETag\" for the\n     * resource has changed.\n     */\n    stale: boolean;\n\n    /**\n     * Check if the request was an _XMLHttpRequest_.\n     */\n    xhr: boolean;\n\n    //body: { username: string; password: string; remember: boolean; title: string; };\n    body: ReqBody;\n\n    //cookies: { string; remember: boolean; };\n    cookies: any;\n\n    method: string;\n\n    params: P;\n\n    query: ReqQuery;\n\n    route: any;\n\n    signedCookies: any;\n\n    originalUrl: string;\n\n    url: string;\n\n    baseUrl: string;\n\n    app: Application;\n\n    /**\n     * After middleware.init executed, Request will contain res and next properties\n     * See: express/lib/middleware/init.js\n     */\n    res?: Response<ResBody, LocalsObj> | undefined;\n    next?: NextFunction | undefined;\n}\n\nexport interface MediaType {\n    value: string;\n    quality: number;\n    type: string;\n    subtype: string;\n}\n\nexport type Send<ResBody = any, T = Response<ResBody>> = (body?: ResBody) => T;\n\nexport interface Response<\n    ResBody = any,\n    LocalsObj extends Record<string, any> = Record<string, any>,\n    StatusCode extends number = number\n> extends http.ServerResponse,\n        Express.Response {\n    /**\n     * Set status `code`.\n     */\n    status(code: StatusCode): this;\n\n    /**\n     * Set the response HTTP status code to `statusCode` and send its string representation as the response body.\n     * @link http://expressjs.com/4x/api.html#res.sendStatus\n     *\n     * Examples:\n     *\n     *    res.sendStatus(200); // equivalent to res.status(200).send('OK')\n     *    res.sendStatus(403); // equivalent to res.status(403).send('Forbidden')\n     *    res.sendStatus(404); // equivalent to res.status(404).send('Not Found')\n     *    res.sendStatus(500); // equivalent to res.status(500).send('Internal Server Error')\n     */\n    sendStatus(code: StatusCode): this;\n\n    /**\n     * Set Link header field with the given `links`.\n     *\n     * Examples:\n     *\n     *    res.links({\n     *      next: 'http://api.example.com/users?page=2',\n     *      last: 'http://api.example.com/users?page=5'\n     *    });\n     */\n    links(links: any): this;\n\n    /**\n     * Send a response.\n     *\n     * Examples:\n     *\n     *     res.send(new Buffer('wahoo'));\n     *     res.send({ some: 'json' });\n     *     res.send('<p>some html</p>');\n     *     res.status(404).send('Sorry, cant find that');\n     */\n    send: Send<ResBody, this>;\n\n    /**\n     * Send JSON response.\n     *\n     * Examples:\n     *\n     *     res.json(null);\n     *     res.json({ user: 'tj' });\n     *     res.status(500).json('oh noes!');\n     *     res.status(404).json('I dont have that');\n     */\n    json: Send<ResBody, this>;\n\n    /**\n     * Send JSON response with JSONP callback support.\n     *\n     * Examples:\n     *\n     *     res.jsonp(null);\n     *     res.jsonp({ user: 'tj' });\n     *     res.status(500).jsonp('oh noes!');\n     *     res.status(404).jsonp('I dont have that');\n     */\n    jsonp: Send<ResBody, this>;\n\n    /**\n     * Transfer the file at the given `path`.\n     *\n     * Automatically sets the _Content-Type_ response header field.\n     * The callback `fn(err)` is invoked when the transfer is complete\n     * or when an error occurs. Be sure to check `res.headersSent`\n     * if you wish to attempt responding, as the header and some data\n     * may have already been transferred.\n     *\n     * Options:\n     *\n     *   - `maxAge`   defaulting to 0 (can be string converted by `ms`)\n     *   - `root`     root directory for relative filenames\n     *   - `headers`  object of headers to serve with file\n     *   - `dotfiles` serve dotfiles, defaulting to false; can be `\"allow\"` to send them\n     *\n     * Other options are passed along to `send`.\n     *\n     * Examples:\n     *\n     *  The following example illustrates how `res.sendFile()` may\n     *  be used as an alternative for the `static()` middleware for\n     *  dynamic situations. The code backing `res.sendFile()` is actually\n     *  the same code, so HTTP cache support etc is identical.\n     *\n     *     app.get('/user/:uid/photos/:file', function(req, res){\n     *       var uid = req.params.uid\n     *         , file = req.params.file;\n     *\n     *       req.user.mayViewFilesFrom(uid, function(yes){\n     *         if (yes) {\n     *           res.sendFile('/uploads/' + uid + '/' + file);\n     *         } else {\n     *           res.send(403, 'Sorry! you cant see that.');\n     *         }\n     *       });\n     *     });\n     *\n     * @api public\n     */\n    sendFile(path: string, fn?: Errback): void;\n    sendFile(path: string, options: any, fn?: Errback): void;\n\n    /**\n     * @deprecated Use sendFile instead.\n     */\n    sendfile(path: string): void;\n    /**\n     * @deprecated Use sendFile instead.\n     */\n    sendfile(path: string, options: any): void;\n    /**\n     * @deprecated Use sendFile instead.\n     */\n    sendfile(path: string, fn: Errback): void;\n    /**\n     * @deprecated Use sendFile instead.\n     */\n    sendfile(path: string, options: any, fn: Errback): void;\n\n    /**\n     * Transfer the file at the given `path` as an attachment.\n     *\n     * Optionally providing an alternate attachment `filename`,\n     * and optional callback `fn(err)`. The callback is invoked\n     * when the data transfer is complete, or when an error has\n     * ocurred. Be sure to check `res.headersSent` if you plan to respond.\n     *\n     * The optional options argument passes through to the underlying\n     * res.sendFile() call, and takes the exact same parameters.\n     *\n     * This method uses `res.sendfile()`.\n     */\n    download(path: string, fn?: Errback): void;\n    download(path: string, filename: string, fn?: Errback): void;\n    download(path: string, filename: string, options: any, fn?: Errback): void;\n\n    /**\n     * Set _Content-Type_ response header with `type` through `mime.lookup()`\n     * when it does not contain \"/\", or set the Content-Type to `type` otherwise.\n     *\n     * Examples:\n     *\n     *     res.type('.html');\n     *     res.type('html');\n     *     res.type('json');\n     *     res.type('application/json');\n     *     res.type('png');\n     */\n    contentType(type: string): this;\n\n    /**\n     * Set _Content-Type_ response header with `type` through `mime.lookup()`\n     * when it does not contain \"/\", or set the Content-Type to `type` otherwise.\n     *\n     * Examples:\n     *\n     *     res.type('.html');\n     *     res.type('html');\n     *     res.type('json');\n     *     res.type('application/json');\n     *     res.type('png');\n     */\n    type(type: string): this;\n\n    /**\n     * Respond to the Acceptable formats using an `obj`\n     * of mime-type callbacks.\n     *\n     * This method uses `req.accepted`, an array of\n     * acceptable types ordered by their quality values.\n     * When \"Accept\" is not present the _first_ callback\n     * is invoked, otherwise the first match is used. When\n     * no match is performed the server responds with\n     * 406 \"Not Acceptable\".\n     *\n     * Content-Type is set for you, however if you choose\n     * you may alter this within the callback using `res.type()`\n     * or `res.set('Content-Type', ...)`.\n     *\n     *    res.format({\n     *      'text/plain': function(){\n     *        res.send('hey');\n     *      },\n     *\n     *      'text/html': function(){\n     *        res.send('<p>hey</p>');\n     *      },\n     *\n     *      'appliation/json': function(){\n     *        res.send({ message: 'hey' });\n     *      }\n     *    });\n     *\n     * In addition to canonicalized MIME types you may\n     * also use extnames mapped to these types:\n     *\n     *    res.format({\n     *      text: function(){\n     *        res.send('hey');\n     *      },\n     *\n     *      html: function(){\n     *        res.send('<p>hey</p>');\n     *      },\n     *\n     *      json: function(){\n     *        res.send({ message: 'hey' });\n     *      }\n     *    });\n     *\n     * By default Express passes an `Error`\n     * with a `.status` of 406 to `next(err)`\n     * if a match is not made. If you provide\n     * a `.default` callback it will be invoked\n     * instead.\n     */\n    format(obj: any): this;\n\n    /**\n     * Set _Content-Disposition_ header to _attachment_ with optional `filename`.\n     */\n    attachment(filename?: string): this;\n\n    /**\n     * Set header `field` to `val`, or pass\n     * an object of header fields.\n     *\n     * Examples:\n     *\n     *    res.set('Foo', ['bar', 'baz']);\n     *    res.set('Accept', 'application/json');\n     *    res.set({ Accept: 'text/plain', 'X-API-Key': 'tobi' });\n     *\n     * Aliased as `res.header()`.\n     */\n    set(field: any): this;\n    set(field: string, value?: string | string[]): this;\n\n    header(field: any): this;\n    header(field: string, value?: string | string[]): this;\n\n    // Property indicating if HTTP headers has been sent for the response.\n    headersSent: boolean;\n\n    /** Get value for header `field`. */\n    get(field: string): string|undefined;\n\n    /** Clear cookie `name`. */\n    clearCookie(name: string, options?: CookieOptions): this;\n\n    /**\n     * Set cookie `name` to `val`, with the given `options`.\n     *\n     * Options:\n     *\n     *    - `maxAge`   max-age in milliseconds, converted to `expires`\n     *    - `signed`   sign the cookie\n     *    - `path`     defaults to \"/\"\n     *\n     * Examples:\n     *\n     *    // \"Remember Me\" for 15 minutes\n     *    res.cookie('rememberme', '1', { expires: new Date(Date.now() + 900000), httpOnly: true });\n     *\n     *    // save as above\n     *    res.cookie('rememberme', '1', { maxAge: 900000, httpOnly: true })\n     */\n    cookie(name: string, val: string, options: CookieOptions): this;\n    cookie(name: string, val: any, options: CookieOptions): this;\n    cookie(name: string, val: any): this;\n\n    /**\n     * Set the location header to `url`.\n     *\n     * The given `url` can also be the name of a mapped url, for\n     * example by default express supports \"back\" which redirects\n     * to the _Referrer_ or _Referer_ headers or \"/\".\n     *\n     * Examples:\n     *\n     *    res.location('/foo/bar').;\n     *    res.location('http://example.com');\n     *    res.location('../login'); // /blog/post/1 -> /blog/login\n     *\n     * Mounting:\n     *\n     *   When an application is mounted and `res.location()`\n     *   is given a path that does _not_ lead with \"/\" it becomes\n     *   relative to the mount-point. For example if the application\n     *   is mounted at \"/blog\", the following would become \"/blog/login\".\n     *\n     *      res.location('login');\n     *\n     *   While the leading slash would result in a location of \"/login\":\n     *\n     *      res.location('/login');\n     */\n    location(url: string): this;\n\n    /**\n     * Redirect to the given `url` with optional response `status`\n     * defaulting to 302.\n     *\n     * The resulting `url` is determined by `res.location()`, so\n     * it will play nicely with mounted apps, relative paths,\n     * `\"back\"` etc.\n     *\n     * Examples:\n     *\n     *    res.redirect('back');\n     *    res.redirect('/foo/bar');\n     *    res.redirect('http://example.com');\n     *    res.redirect(301, 'http://example.com');\n     *    res.redirect('http://example.com', 301);\n     *    res.redirect('../login'); // /blog/post/1 -> /blog/login\n     */\n    redirect(url: string): void;\n    redirect(status: number, url: string): void;\n    /** @deprecated use res.redirect(status, url) instead */\n    redirect(url: string, status: number): void;\n\n    /**\n     * Render `view` with the given `options` and optional callback `fn`.\n     * When a callback function is given a response will _not_ be made\n     * automatically, otherwise a response of _200_ and _text/html_ is given.\n     *\n     * Options:\n     *\n     *  - `cache`     boolean hinting to the engine it should cache\n     *  - `filename`  filename of the view being rendered\n     */\n    render(view: string, options?: object, callback?: (err: Error, html: string) => void): void;\n    render(view: string, callback?: (err: Error, html: string) => void): void;\n\n    locals: LocalsObj & Locals;\n\n    charset: string;\n\n    /**\n     * Adds the field to the Vary response header, if it is not there already.\n     * Examples:\n     *\n     *     res.vary('User-Agent').render('docs');\n     *\n     */\n    vary(field: string): this;\n\n    app: Application;\n\n    /**\n     * Appends the specified value to the HTTP response header field.\n     * If the header is not already set, it creates the header with the specified value.\n     * The value parameter can be a string or an array.\n     *\n     * Note: calling res.set() after res.append() will reset the previously-set header value.\n     *\n     * @since 4.11.0\n     */\n    append(field: string, value?: string[] | string): this;\n\n    /**\n     * After middleware.init executed, Response will contain req property\n     * See: express/lib/middleware/init.js\n     */\n    req: Request;\n}\n\nexport interface Handler extends RequestHandler {}\n\nexport type RequestParamHandler = (req: Request, res: Response, next: NextFunction, value: any, name: string) => any;\n\nexport type ApplicationRequestHandler<T> = IRouterHandler<T> &\n    IRouterMatcher<T> &\n    ((...handlers: RequestHandlerParams[]) => T);\n\nexport interface Application<\n    LocalsObj extends Record<string, any> = Record<string, any>\n> extends EventEmitter, IRouter, Express.Application {\n    /**\n     * Express instance itself is a request handler, which could be invoked without\n     * third argument.\n     */\n    (req: Request | http.IncomingMessage, res: Response | http.ServerResponse): any;\n\n    /**\n     * Initialize the server.\n     *\n     *   - setup default configuration\n     *   - setup default middleware\n     *   - setup route reflection methods\n     */\n    init(): void;\n\n    /**\n     * Initialize application configuration.\n     */\n    defaultConfiguration(): void;\n\n    /**\n     * Register the given template engine callback `fn`\n     * as `ext`.\n     *\n     * By default will `require()` the engine based on the\n     * file extension. For example if you try to render\n     * a \"foo.jade\" file Express will invoke the following internally:\n     *\n     *     app.engine('jade', require('jade').__express);\n     *\n     * For engines that do not provide `.__express` out of the box,\n     * or if you wish to \"map\" a different extension to the template engine\n     * you may use this method. For example mapping the EJS template engine to\n     * \".html\" files:\n     *\n     *     app.engine('html', require('ejs').renderFile);\n     *\n     * In this case EJS provides a `.renderFile()` method with\n     * the same signature that Express expects: `(path, options, callback)`,\n     * though note that it aliases this method as `ejs.__express` internally\n     * so if you're using \".ejs\" extensions you dont need to do anything.\n     *\n     * Some template engines do not follow this convention, the\n     * [Consolidate.js](https://github.com/visionmedia/consolidate.js)\n     * library was created to map all of node's popular template\n     * engines to follow this convention, thus allowing them to\n     * work seamlessly within Express.\n     */\n    engine(\n        ext: string,\n        fn: (path: string, options: object, callback: (e: any, rendered?: string) => void) => void,\n    ): this;\n\n    /**\n     * Assign `setting` to `val`, or return `setting`'s value.\n     *\n     *    app.set('foo', 'bar');\n     *    app.get('foo');\n     *    // => \"bar\"\n     *    app.set('foo', ['bar', 'baz']);\n     *    app.get('foo');\n     *    // => [\"bar\", \"baz\"]\n     *\n     * Mounted servers inherit their parent server's settings.\n     */\n    set(setting: string, val: any): this;\n    get: ((name: string) => any) & IRouterMatcher<this>;\n\n    param(name: string | string[], handler: RequestParamHandler): this;\n\n    /**\n     * Alternatively, you can pass only a callback, in which case you have the opportunity to alter the app.param()\n     *\n     * @deprecated since version 4.11\n     */\n    param(callback: (name: string, matcher: RegExp) => RequestParamHandler): this;\n\n    /**\n     * Return the app's absolute pathname\n     * based on the parent(s) that have\n     * mounted it.\n     *\n     * For example if the application was\n     * mounted as \"/admin\", which itself\n     * was mounted as \"/blog\" then the\n     * return value would be \"/blog/admin\".\n     */\n    path(): string;\n\n    /**\n     * Check if `setting` is enabled (truthy).\n     *\n     *    app.enabled('foo')\n     *    // => false\n     *\n     *    app.enable('foo')\n     *    app.enabled('foo')\n     *    // => true\n     */\n    enabled(setting: string): boolean;\n\n    /**\n     * Check if `setting` is disabled.\n     *\n     *    app.disabled('foo')\n     *    // => true\n     *\n     *    app.enable('foo')\n     *    app.disabled('foo')\n     *    // => false\n     */\n    disabled(setting: string): boolean;\n\n    /** Enable `setting`. */\n    enable(setting: string): this;\n\n    /** Disable `setting`. */\n    disable(setting: string): this;\n\n    /**\n     * Render the given view `name` name with `options`\n     * and a callback accepting an error and the\n     * rendered template string.\n     *\n     * Example:\n     *\n     *    app.render('email', { name: 'Tobi' }, function(err, html){\n     *      // ...\n     *    })\n     */\n    render(name: string, options?: object, callback?: (err: Error, html: string) => void): void;\n    render(name: string, callback: (err: Error, html: string) => void): void;\n\n    /**\n     * Listen for connections.\n     *\n     * A node `http.Server` is returned, with this\n     * application (which is a `Function`) as its\n     * callback. If you wish to create both an HTTP\n     * and HTTPS server you may do so with the \"http\"\n     * and \"https\" modules as shown here:\n     *\n     *    var http = require('http')\n     *      , https = require('https')\n     *      , express = require('express')\n     *      , app = express();\n     *\n     *    http.createServer(app).listen(80);\n     *    https.createServer({ ... }, app).listen(443);\n     */\n    listen(port: number, hostname: string, backlog: number, callback?: () => void): http.Server;\n    listen(port: number, hostname: string, callback?: () => void): http.Server;\n    listen(port: number, callback?: () => void): http.Server;\n    listen(callback?: () => void): http.Server;\n    listen(path: string, callback?: () => void): http.Server;\n    listen(handle: any, listeningListener?: () => void): http.Server;\n\n    router: string;\n\n    settings: any;\n\n    resource: any;\n\n    map: any;\n\n    locals: LocalsObj & Locals;\n\n    /**\n     * The app.routes object houses all of the routes defined mapped by the\n     * associated HTTP verb. This object may be used for introspection\n     * capabilities, for example Express uses this internally not only for\n     * routing but to provide default OPTIONS behaviour unless app.options()\n     * is used. Your application or framework may also remove routes by\n     * simply by removing them from this object.\n     */\n    routes: any;\n\n    /**\n     * Used to get all registered routes in Express Application\n     */\n    _router: any;\n\n    use: ApplicationRequestHandler<this>;\n\n    /**\n     * The mount event is fired on a sub-app, when it is mounted on a parent app.\n     * The parent app is passed to the callback function.\n     *\n     * NOTE:\n     * Sub-apps will:\n     *  - Not inherit the value of settings that have a default value. You must set the value in the sub-app.\n     *  - Inherit the value of settings with no default value.\n     */\n    on: (event: string, callback: (parent: Application) => void) => this;\n\n    /**\n     * The app.mountpath property contains one or more path patterns on which a sub-app was mounted.\n     */\n    mountpath: string | string[];\n}\n\nexport interface Express extends Application {\n    request: Request;\n    response: Response;\n}\n/LICENSE\u0004u    MIT License\n\n    Copyright (c) Microsoft Corporation.\n\n    Permission is hereby granted, free of charge, to any person obtaining a copy\n    of this software and associated documentation files (the \"Software\"), to deal\n    in the Software without restriction, including without limitation the rights\n    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n    copies of the Software, and to permit persons to whom the Software is\n    furnished to do so, subject to the following conditions:\n\n    The above copyright notice and this permission notice shall be included in all\n    copies or substantial portions of the Software.\n\n    THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n    SOFTWARE\n/package.json\u0006{\n    \"name\": \"@types/express-serve-static-core\",\n    \"version\": \"4.17.33\",\n    \"description\": \"TypeScript definitions for Express\",\n    \"homepage\": \"https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/express-serve-static-core\",\n    \"license\": \"MIT\",\n    \"contributors\": [\n        {\n            \"name\": \"Boris Yankov\",\n            \"url\": \"https://github.com/borisyankov\",\n            \"githubUsername\": \"borisyankov\"\n        },\n        {\n            \"name\": \"Satana Charuwichitratana\",\n            \"url\": \"https://github.com/micksatana\",\n            \"githubUsername\": \"micksatana\"\n        },\n        {\n            \"name\": \"Sami Jaber\",\n            \"url\": \"https://github.com/samijaber\",\n            \"githubUsername\": \"samijaber\"\n        },\n        {\n            \"name\": \"Jose Luis Leon\",\n            \"url\": \"https://github.com/JoseLion\",\n            \"githubUsername\": \"JoseLion\"\n        },\n        {\n            \"name\": \"David Stephens\",\n            \"url\": \"https://github.com/dwrss\",\n            \"githubUsername\": \"dwrss\"\n        },\n        {\n            \"name\": \"Shin Ando\",\n            \"url\": \"https://github.com/andoshin11\",\n            \"githubUsername\": \"andoshin11\"\n        }\n    ],\n    \"main\": \"\",\n    \"types\": \"index.d.ts\",\n    \"repository\": {\n        \"type\": \"git\",\n        \"url\": \"https://github.com/DefinitelyTyped/DefinitelyTyped.git\",\n        \"directory\": \"types/express-serve-static-core\"\n    },\n    \"scripts\": {},\n    \"dependencies\": {\n        \"@types/node\": \"*\",\n        \"@types/qs\": \"*\",\n        \"@types/range-parser\": \"*\"\n    },\n    \"typesPublisherContentHash\": \"0a827d8ef2f7f9ef4c3093ee5f8b4a148b276b25d09a337a636065cf58d32616\",\n    \"typeScriptVersion\": \"4.2\"\n}/README.md\u0003# Installation\r\n> `npm install --save @types/express-serve-static-core`\r\n\r\n# Summary\r\nThis package contains type definitions for Express (http://expressjs.com).\r\n\r\n# Details\r\nFiles were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/express-serve-static-core.\r\n\r\n### Additional Details\r\n * Last updated: Mon, 23 Jan 2023 21:32:41 GMT\r\n * Dependencies: [@types/node](https://npmjs.com/package/@types/node), [@types/qs](https://npmjs.com/package/@types/qs), [@types/range-parser](https://npmjs.com/package/@types/range-parser)\r\n * Global values: none\r\n\r\n# Credits\r\nThese definitions were written by [Boris Yankov](https://github.com/borisyankov), [Satana Charuwichitratana](https://github.com/micksatana), [Sami Jaber](https://github.com/samijaber), [Jose Luis Leon](https://github.com/JoseLion), [David Stephens](https://github.com/dwrss), and [Shin Ando](https://github.com/andoshin11).\r\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QHR5cGVzL2V4cHJlc3NANC4xNy4xNw==",
    "content": "/package.json\u0005{\n    \"name\": \"@types/express\",\n    \"version\": \"4.17.17\",\n    \"description\": \"TypeScript definitions for Express\",\n    \"homepage\": \"https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/express\",\n    \"license\": \"MIT\",\n    \"contributors\": [\n        {\n            \"name\": \"Boris Yankov\",\n            \"url\": \"https://github.com/borisyankov\",\n            \"githubUsername\": \"borisyankov\"\n        },\n        {\n            \"name\": \"China Medical University Hospital\",\n            \"url\": \"https://github.com/CMUH\",\n            \"githubUsername\": \"CMUH\"\n        },\n        {\n            \"name\": \"Puneet Arora\",\n            \"url\": \"https://github.com/puneetar\",\n            \"githubUsername\": \"puneetar\"\n        },\n        {\n            \"name\": \"Dylan Frankland\",\n            \"url\": \"https://github.com/dfrankland\",\n            \"githubUsername\": \"dfrankland\"\n        }\n    ],\n    \"main\": \"\",\n    \"types\": \"index.d.ts\",\n    \"repository\": {\n        \"type\": \"git\",\n        \"url\": \"https://github.com/DefinitelyTyped/DefinitelyTyped.git\",\n        \"directory\": \"types/express\"\n    },\n    \"scripts\": {},\n    \"dependencies\": {\n        \"@types/body-parser\": \"*\",\n        \"@types/express-serve-static-core\": \"^4.17.33\",\n        \"@types/qs\": \"*\",\n        \"@types/serve-static\": \"*\"\n    },\n    \"typesPublisherContentHash\": \"a4c3d98898199c22408b7c0662e85011cacce7899cd22a66275337ec40edac14\",\n    \"typeScriptVersion\": \"4.2\"\n}/LICENSE\u0004u    MIT License\n\n    Copyright (c) Microsoft Corporation.\n\n    Permission is hereby granted, free of charge, to any person obtaining a copy\n    of this software and associated documentation files (the \"Software\"), to deal\n    in the Software without restriction, including without limitation the rights\n    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n    copies of the Software, and to permit persons to whom the Software is\n    furnished to do so, subject to the following conditions:\n\n    The above copyright notice and this permission notice shall be included in all\n    copies or substantial portions of the Software.\n\n    THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n    SOFTWARE\n/README.md\u0003# Installation\r\n> `npm install --save @types/express`\r\n\r\n# Summary\r\nThis package contains type definitions for Express (http://expressjs.com).\r\n\r\n# Details\r\nFiles were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/express.\r\n\r\n### Additional Details\r\n * Last updated: Fri, 03 Feb 2023 21:32:47 GMT\r\n * Dependencies: [@types/body-parser](https://npmjs.com/package/@types/body-parser), [@types/express-serve-static-core](https://npmjs.com/package/@types/express-serve-static-core), [@types/qs](https://npmjs.com/package/@types/qs), [@types/serve-static](https://npmjs.com/package/@types/serve-static)\r\n * Global values: none\r\n\r\n# Credits\r\nThese definitions were written by [Boris Yankov](https://github.com/borisyankov), [China Medical University Hospital](https://github.com/CMUH), [Puneet Arora](https://github.com/puneetar), and [Dylan Frankland](https://github.com/dfrankland).\r\n/index.d.ts\u0012// Type definitions for Express 4.17\n// Project: http://expressjs.com\n// Definitions by: Boris Yankov <https://github.com/borisyankov>\n//                 China Medical University Hospital <https://github.com/CMUH>\n//                 Puneet Arora <https://github.com/puneetar>\n//                 Dylan Frankland <https://github.com/dfrankland>\n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n\n/* =================== USAGE ===================\n\n    import express = require(\"express\");\n    var app = express();\n\n =============================================== */\n\n/// <reference types=\"express-serve-static-core\" />\n/// <reference types=\"serve-static\" />\n\nimport * as bodyParser from 'body-parser';\nimport * as serveStatic from 'serve-static';\nimport * as core from 'express-serve-static-core';\nimport * as qs from 'qs';\n\n/**\n * Creates an Express application. The express() function is a top-level function exported by the express module.\n */\ndeclare function e(): core.Express;\n\ndeclare namespace e {\n    /**\n     * This is a built-in middleware function in Express. It parses incoming requests with JSON payloads and is based on body-parser.\n     * @since 4.16.0\n     */\n    var json: typeof bodyParser.json;\n\n    /**\n     * This is a built-in middleware function in Express. It parses incoming requests with Buffer payloads and is based on body-parser.\n     * @since 4.17.0\n     */\n    var raw: typeof bodyParser.raw;\n\n    /**\n     * This is a built-in middleware function in Express. It parses incoming requests with text payloads and is based on body-parser.\n     * @since 4.17.0\n     */\n    var text: typeof bodyParser.text;\n\n    /**\n     * These are the exposed prototypes.\n     */\n    var application: Application;\n    var request: Request;\n    var response: Response;\n\n    /**\n     * This is a built-in middleware function in Express. It serves static files and is based on serve-static.\n     */\n    var static: serveStatic.RequestHandlerConstructor<Response>;\n\n    /**\n     * This is a built-in middleware function in Express. It parses incoming requests with urlencoded payloads and is based on body-parser.\n     * @since 4.16.0\n     */\n    var urlencoded: typeof bodyParser.urlencoded;\n\n    /**\n     * This is a built-in middleware function in Express. It parses incoming request query parameters.\n     */\n    export function query(options: qs.IParseOptions | typeof qs.parse): Handler;\n\n    export function Router(options?: RouterOptions): core.Router;\n\n    interface RouterOptions {\n        /**\n         * Enable case sensitivity.\n         */\n        caseSensitive?: boolean | undefined;\n\n        /**\n         * Preserve the req.params values from the parent router.\n         * If the parent and the child have conflicting param names, the child’s value take precedence.\n         *\n         * @default false\n         * @since 4.5.0\n         */\n        mergeParams?: boolean | undefined;\n\n        /**\n         * Enable strict routing.\n         */\n        strict?: boolean | undefined;\n    }\n\n    interface Application extends core.Application {}\n    interface CookieOptions extends core.CookieOptions {}\n    interface Errback extends core.Errback {}\n    interface ErrorRequestHandler<\n        P = core.ParamsDictionary,\n        ResBody = any,\n        ReqBody = any,\n        ReqQuery = core.Query,\n        Locals extends Record<string, any> = Record<string, any>\n    > extends core.ErrorRequestHandler<P, ResBody, ReqBody, ReqQuery, Locals> {}\n    interface Express extends core.Express {}\n    interface Handler extends core.Handler {}\n    interface IRoute extends core.IRoute {}\n    interface IRouter extends core.IRouter {}\n    interface IRouterHandler<T> extends core.IRouterHandler<T> {}\n    interface IRouterMatcher<T> extends core.IRouterMatcher<T> {}\n    interface MediaType extends core.MediaType {}\n    interface NextFunction extends core.NextFunction {}\n    interface Locals extends core.Locals {}\n    interface Request<\n        P = core.ParamsDictionary,\n        ResBody = any,\n        ReqBody = any,\n        ReqQuery = core.Query,\n        Locals extends Record<string, any> = Record<string, any>\n    > extends core.Request<P, ResBody, ReqBody, ReqQuery, Locals> {}\n    interface RequestHandler<\n        P = core.ParamsDictionary,\n        ResBody = any,\n        ReqBody = any,\n        ReqQuery = core.Query,\n        Locals extends Record<string, any> = Record<string, any>\n    > extends core.RequestHandler<P, ResBody, ReqBody, ReqQuery, Locals> {}\n    interface RequestParamHandler extends core.RequestParamHandler {}\n    interface Response<\n        ResBody = any,\n        Locals extends Record<string, any> = Record<string, any>\n    > extends core.Response<ResBody, Locals> {}\n    interface Router extends core.Router {}\n    interface Send extends core.Send {}\n}\n\nexport = e;\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QHR5cGVzL2ZzLWV4dHJhQDkuMC4xMw==",
    "content": "/package.json\u0007{\n    \"name\": \"@types/fs-extra\",\n    \"version\": \"9.0.13\",\n    \"description\": \"TypeScript definitions for fs-extra\",\n    \"homepage\": \"https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/fs-extra\",\n    \"license\": \"MIT\",\n    \"contributors\": [\n        {\n            \"name\": \"Alan Agius\",\n            \"url\": \"https://github.com/alan-agius4\",\n            \"githubUsername\": \"alan-agius4\"\n        },\n        {\n            \"name\": \"midknight41\",\n            \"url\": \"https://github.com/midknight41\",\n            \"githubUsername\": \"midknight41\"\n        },\n        {\n            \"name\": \"Brendan Forster\",\n            \"url\": \"https://github.com/shiftkey\",\n            \"githubUsername\": \"shiftkey\"\n        },\n        {\n            \"name\": \"Mees van Dijk\",\n            \"url\": \"https://github.com/mees-\",\n            \"githubUsername\": \"mees-\"\n        },\n        {\n            \"name\": \"Justin Rockwood\",\n            \"url\": \"https://github.com/jrockwood\",\n            \"githubUsername\": \"jrockwood\"\n        },\n        {\n            \"name\": \"Sang Dang\",\n            \"url\": \"https://github.com/sangdth\",\n            \"githubUsername\": \"sangdth\"\n        },\n        {\n            \"name\": \"Florian Keller\",\n            \"url\": \"https://github.com/ffflorian\",\n            \"githubUsername\": \"ffflorian\"\n        },\n        {\n            \"name\": \"Piotr Błażejewicz\",\n            \"url\": \"https://github.com/peterblazejewicz\",\n            \"githubUsername\": \"peterblazejewicz\"\n        },\n        {\n            \"name\": \"Tiger Oakes\",\n            \"url\": \"https://github.com/NotWoods\",\n            \"githubUsername\": \"NotWoods\"\n        }\n    ],\n    \"main\": \"\",\n    \"types\": \"index.d.ts\",\n    \"repository\": {\n        \"type\": \"git\",\n        \"url\": \"https://github.com/DefinitelyTyped/DefinitelyTyped.git\",\n        \"directory\": \"types/fs-extra\"\n    },\n    \"scripts\": {},\n    \"dependencies\": {\n        \"@types/node\": \"*\"\n    },\n    \"typesPublisherContentHash\": \"75e10d16a18d936a50e54414024604aa9484e8345b37c2027921869f254523ee\",\n    \"typeScriptVersion\": \"3.9\"\n}/LICENSE\u0004u    MIT License\n\n    Copyright (c) Microsoft Corporation.\n\n    Permission is hereby granted, free of charge, to any person obtaining a copy\n    of this software and associated documentation files (the \"Software\"), to deal\n    in the Software without restriction, including without limitation the rights\n    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n    copies of the Software, and to permit persons to whom the Software is\n    furnished to do so, subject to the following conditions:\n\n    The above copyright notice and this permission notice shall be included in all\n    copies or substantial portions of the Software.\n\n    THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n    SOFTWARE\n/index.d.ts\\// Type definitions for fs-extra 9.0\n// Project: https://github.com/jprichardson/node-fs-extra\n// Definitions by: Alan Agius <https://github.com/alan-agius4>,\n//                 midknight41 <https://github.com/midknight41>,\n//                 Brendan Forster <https://github.com/shiftkey>,\n//                 Mees van Dijk <https://github.com/mees->,\n//                 Justin Rockwood <https://github.com/jrockwood>,\n//                 Sang Dang <https://github.com/sangdth>,\n//                 Florian Keller <https://github.com/ffflorian>\n//                 Piotr Błażejewicz <https://github.com/peterblazejewicz>\n//                 Tiger Oakes <https://github.com/NotWoods>\n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// Minimum TypeScript Version: 3.9\n\n/// <reference types=\"node\" />\n\nimport * as fs from 'fs';\nimport Stats = fs.Stats;\nimport PathLike = fs.PathLike;\n\nexport * from 'fs';\n\nexport function copy(src: string, dest: string, options?: CopyOptions): Promise<void>;\nexport function copy(src: string, dest: string, callback: (err: Error) => void): void;\nexport function copy(src: string, dest: string, options: CopyOptions, callback: (err: Error) => void): void;\nexport function copySync(src: string, dest: string, options?: CopyOptionsSync): void;\n\nexport function copyFile(src: string, dest: string, flags?: number): Promise<void>;\nexport function copyFile(src: string, dest: string, callback: (err: Error) => void): void;\nexport function copyFile(src: string, dest: string, flags: number, callback: (err: Error) => void): void;\n\nexport function move(src: string, dest: string, options?: MoveOptions): Promise<void>;\nexport function move(src: string, dest: string, callback: (err: Error) => void): void;\nexport function move(src: string, dest: string, options: MoveOptions, callback: (err: Error) => void): void;\nexport function moveSync(src: string, dest: string, options?: MoveOptions): void;\n\nexport function createFile(file: string): Promise<void>;\nexport function createFile(file: string, callback: (err: Error) => void): void;\nexport function createFileSync(file: string): void;\n\nexport function createSymlink(src: string, dest: string, type: SymlinkType): Promise<void>;\nexport function createSymlink(src: string, dest: string, type: SymlinkType, callback?: (err: Error) => void): void;\nexport function createSymlinkSync(src: string, dest: string, type: SymlinkType): void;\n\nexport function ensureDir(path: string, options?: EnsureOptions | number): Promise<void>;\nexport function ensureDir(path: string, callback?: (err: Error) => void): void;\nexport function ensureDir(path: string, options?: EnsureOptions | number, callback?: (err: Error) => void): void;\nexport function ensureDirSync(path: string, options?: EnsureOptions | number): void;\n\nexport function mkdirs(dir: string): Promise<void>;\nexport function mkdirs(dir: string, callback: (err: Error) => void): void;\nexport function mkdirp(dir: string): Promise<void>;\nexport function mkdirp(dir: string, callback: (err: Error) => void): void;\nexport function mkdirsSync(dir: string): void;\nexport function mkdirpSync(dir: string): void;\n\nexport function outputFile(\n    file: string,\n    data: any,\n    options?: WriteFileOptions | BufferEncoding | string,\n): Promise<void>;\nexport function outputFile(file: string, data: any, callback: (err: Error) => void): void;\nexport function outputFile(\n    file: string,\n    data: any,\n    options: WriteFileOptions | string,\n    callback: (err: Error) => void,\n): void;\nexport function outputFileSync(file: string, data: any, options?: WriteFileOptions | BufferEncoding | string): void;\n\nexport function readJson(file: string, options?: ReadOptions | BufferEncoding | string): Promise<any>;\nexport function readJson(file: string, callback: (err: Error, jsonObject: any) => void): void;\nexport function readJson(\n    file: string,\n    options: ReadOptions | BufferEncoding | string,\n    callback: (err: Error, jsonObject: any) => void,\n): void;\nexport function readJSON(file: string, options?: ReadOptions | BufferEncoding | string): Promise<any>;\nexport function readJSON(file: string, callback: (err: Error, jsonObject: any) => void): void;\nexport function readJSON(\n    file: string,\n    options: ReadOptions | BufferEncoding | string,\n    callback: (err: Error, jsonObject: any) => void,\n): void;\n\nexport function readJsonSync(file: string, options?: ReadOptions | BufferEncoding | string): any;\nexport function readJSONSync(file: string, options?: ReadOptions | BufferEncoding | string): any;\n\nexport function remove(dir: string, callback: (err: Error) => void): void;\nexport function remove(dir: string, callback?: (err: Error) => void): Promise<void>;\nexport function removeSync(dir: string): void;\n\nexport function outputJSON(file: string, data: any, options?: WriteOptions | BufferEncoding | string): Promise<void>;\nexport function outputJSON(\n    file: string,\n    data: any,\n    options: WriteOptions | BufferEncoding | string,\n    callback: (err: Error) => void,\n): void;\nexport function outputJSON(file: string, data: any, callback: (err: Error) => void): void;\nexport function outputJson(file: string, data: any, options?: WriteOptions | BufferEncoding | string): Promise<void>;\nexport function outputJson(\n    file: string,\n    data: any,\n    options: WriteOptions | BufferEncoding | string,\n    callback: (err: Error) => void,\n): void;\nexport function outputJson(file: string, data: any, callback: (err: Error) => void): void;\nexport function outputJsonSync(file: string, data: any, options?: WriteOptions | BufferEncoding | string): void;\nexport function outputJSONSync(file: string, data: any, options?: WriteOptions | BufferEncoding | string): void;\n\nexport function writeJSON(file: string, object: any, options?: WriteOptions | BufferEncoding | string): Promise<void>;\nexport function writeJSON(file: string, object: any, callback: (err: Error) => void): void;\nexport function writeJSON(\n    file: string,\n    object: any,\n    options: WriteOptions | BufferEncoding | string,\n    callback: (err: Error) => void,\n): void;\nexport function writeJson(file: string, object: any, options?: WriteOptions | BufferEncoding | string): Promise<void>;\nexport function writeJson(file: string, object: any, callback: (err: Error) => void): void;\nexport function writeJson(\n    file: string,\n    object: any,\n    options: WriteOptions | BufferEncoding | string,\n    callback: (err: Error) => void,\n): void;\n\nexport function writeJsonSync(file: string, object: any, options?: WriteOptions | BufferEncoding | string): void;\nexport function writeJSONSync(file: string, object: any, options?: WriteOptions | BufferEncoding | string): void;\n\nexport function ensureFile(path: string): Promise<void>;\nexport function ensureFile(path: string, callback: (err: Error) => void): void;\nexport function ensureFileSync(path: string): void;\n\nexport function ensureLink(src: string, dest: string): Promise<void>;\nexport function ensureLink(src: string, dest: string, callback: (err: Error) => void): void;\n// alias for ensureLink\nexport const createLink: typeof ensureLink;\nexport function ensureLinkSync(src: string, dest: string): void;\n// aliased as\nexport const createLinkSync: typeof ensureLinkSync;\n\nexport function ensureSymlink(src: string, dest: string, type?: SymlinkType): Promise<void>;\nexport function ensureSymlink(src: string, dest: string, type: SymlinkType, callback: (err: Error) => void): void;\nexport function ensureSymlink(src: string, dest: string, callback: (err: Error) => void): void;\nexport function ensureSymlinkSync(src: string, dest: string, type?: SymlinkType): void;\n\nexport function emptyDir(path: string): Promise<void>;\nexport function emptyDir(path: string, callback: (err: Error) => void): void;\nexport const emptydir: typeof emptyDir;\n\nexport function emptyDirSync(path: string): void;\nexport const emptydirSync: typeof emptyDirSync;\n\nexport function pathExists(path: string): Promise<boolean>;\nexport function pathExists(path: string, callback: (err: Error, exists: boolean) => void): void;\nexport function pathExistsSync(path: string): boolean;\n\n// fs async methods\n// copied from https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/node/v6/index.d.ts\n\nexport function access(path: PathLike, callback: (err: NodeJS.ErrnoException) => void): void;\nexport function access(path: PathLike, mode: number, callback: (err: NodeJS.ErrnoException) => void): void;\nexport function access(path: PathLike, mode?: number): Promise<void>;\n\nexport function appendFile(\n    file: PathLike | number,\n    data: any,\n    options: {\n        encoding?: BufferEncoding | string | undefined;\n        mode?: number | string | undefined;\n        flag?: string | undefined;\n    },\n    callback: (err: NodeJS.ErrnoException) => void,\n): void;\nexport function appendFile(file: PathLike | number, data: any, callback: (err: NodeJS.ErrnoException) => void): void;\nexport function appendFile(\n    file: PathLike | number,\n    data: any,\n    options?:\n        | {\n              encoding?: BufferEncoding | string | undefined;\n              mode?: number | string | undefined;\n              flag?: string | undefined;\n          }\n        | BufferEncoding\n        | string,\n): Promise<void>;\n\nexport function chmod(path: PathLike, mode: Mode, callback: (err: NodeJS.ErrnoException) => void): void;\nexport function chmod(path: PathLike, mode: Mode): Promise<void>;\n\nexport function chown(path: PathLike, uid: number, gid: number): Promise<void>;\nexport function chown(path: PathLike, uid: number, gid: number, callback: (err: NodeJS.ErrnoException) => void): void;\n\nexport function close(fd: number, callback: (err: NodeJS.ErrnoException) => void): void;\nexport function close(fd: number): Promise<void>;\n\nexport function fchmod(fd: number, mode: Mode, callback: (err: NodeJS.ErrnoException) => void): void;\nexport function fchmod(fd: number, mode: Mode): Promise<void>;\n\nexport function fchown(fd: number, uid: number, gid: number, callback: (err: NodeJS.ErrnoException) => void): void;\nexport function fchown(fd: number, uid: number, gid: number): Promise<void>;\n\nexport function fdatasync(fd: number, callback: () => void): void;\nexport function fdatasync(fd: number): Promise<void>;\n\nexport function fstat(fd: number, callback: (err: NodeJS.ErrnoException, stats: Stats) => any): void;\nexport function fstat(fd: number): Promise<Stats>;\n\nexport function fsync(fd: number, callback: (err: NodeJS.ErrnoException) => void): void;\nexport function fsync(fd: number): Promise<void>;\n\nexport function ftruncate(fd: number, callback: (err: NodeJS.ErrnoException) => void): void;\nexport function ftruncate(fd: number, len: number, callback: (err: NodeJS.ErrnoException) => void): void;\nexport function ftruncate(fd: number, len?: number): Promise<void>;\n\nexport function futimes(fd: number, atime: number, mtime: number, callback: (err: NodeJS.ErrnoException) => void): void;\nexport function futimes(fd: number, atime: Date, mtime: Date, callback: (err: NodeJS.ErrnoException) => void): void;\nexport function futimes(fd: number, atime: number, mtime: number): Promise<void>;\nexport function futimes(fd: number, atime: Date, mtime: Date): Promise<void>;\n\nexport function lchown(path: PathLike, uid: number, gid: number, callback: (err: NodeJS.ErrnoException) => void): void;\nexport function lchown(path: PathLike, uid: number, gid: number): Promise<void>;\n\nexport function link(existingPath: PathLike, newPath: PathLike, callback: (err: NodeJS.ErrnoException) => void): void;\nexport function link(existingPath: PathLike, newPath: PathLike): Promise<void>;\n\nexport function lstat(path: PathLike, callback: (err: NodeJS.ErrnoException, stats: Stats) => any): void;\nexport function lstat(path: PathLike): Promise<Stats>;\n\n/**\n * Asynchronous mkdir - creates the directory specified in {path}.  Parameter {mode} defaults to 0777.\n *\n * @param callback No arguments other than a possible exception are given to the completion callback.\n */\nexport function mkdir(path: PathLike, callback: (err: NodeJS.ErrnoException) => void): void;\n/**\n * Asynchronous mkdir - creates the directory specified in {path}.  Parameter {mode} defaults to 0777.\n *\n * @param callback No arguments other than a possible exception are given to the completion callback.\n */\nexport function mkdir(\n    path: PathLike,\n    options: Mode | fs.MakeDirectoryOptions | null,\n    callback: (err: NodeJS.ErrnoException) => void,\n): void;\nexport function mkdir(path: PathLike, options?: Mode | fs.MakeDirectoryOptions | null): Promise<void>;\nexport function mkdirSync(path: PathLike, options?: Mode | fs.MakeDirectoryOptions | null): void;\n\nexport function open(\n    path: PathLike,\n    flags: string | number,\n    callback: (err: NodeJS.ErrnoException, fd: number) => void,\n): void;\nexport function open(\n    path: PathLike,\n    flags: string | number,\n    mode: Mode,\n    callback: (err: NodeJS.ErrnoException, fd: number) => void,\n): void;\nexport function open(path: PathLike, flags: string | number, mode?: Mode | null): Promise<number>;\n\nexport function opendir(path: string, cb: (err: NodeJS.ErrnoException | null, dir: fs.Dir) => void): void;\nexport function opendir(\n    path: string,\n    options: fs.OpenDirOptions,\n    cb: (err: NodeJS.ErrnoException | null, dir: fs.Dir) => void,\n): void;\nexport function opendir(path: string, options?: fs.OpenDirOptions): Promise<fs.Dir>;\n\nexport function read<TBuffer extends ArrayBufferView>(\n    fd: number,\n    buffer: TBuffer,\n    offset: number,\n    length: number,\n    position: number | null,\n    callback: (err: NodeJS.ErrnoException, bytesRead: number, buffer: TBuffer) => void,\n): void;\nexport function read<TBuffer extends ArrayBufferView>(\n    fd: number,\n    buffer: TBuffer,\n    offset: number,\n    length: number,\n    position: number | null,\n): Promise<{ bytesRead: number; buffer: TBuffer }>;\n\nexport function readFile(file: PathLike | number, callback: (err: NodeJS.ErrnoException, data: Buffer) => void): void;\nexport function readFile(\n    file: PathLike | number,\n    encoding: BufferEncoding | string,\n    callback: (err: NodeJS.ErrnoException, data: string) => void,\n): void;\nexport function readFile(\n    file: PathLike | number,\n    options: { flag?: string | undefined } | { encoding: BufferEncoding | string; flag?: string | undefined },\n    callback: (err: NodeJS.ErrnoException, data: Buffer) => void,\n): void;\nexport function readFile(\n    file: PathLike | number,\n    options: { flag?: string | undefined } | { encoding: BufferEncoding | string; flag?: string | undefined },\n): Promise<string>;\n// tslint:disable-next-line:unified-signatures\nexport function readFile(file: PathLike | number, encoding: BufferEncoding | string): Promise<string>;\nexport function readFile(file: PathLike | number): Promise<Buffer>;\n\nexport function readdir(path: PathLike, callback: (err: NodeJS.ErrnoException, files: string[]) => void): void;\nexport function readdir(\n    path: PathLike,\n    options: 'buffer' | { encoding: 'buffer'; withFileTypes?: false | undefined },\n): Promise<Buffer[]>;\nexport function readdir(\n    path: PathLike,\n    options?:\n        | { encoding: BufferEncoding | string | null; withFileTypes?: false | undefined }\n        | BufferEncoding\n        | string\n        | null,\n): Promise<string[]>;\nexport function readdir(\n    path: PathLike,\n    options?: { encoding?: BufferEncoding | string | null | undefined; withFileTypes?: false | undefined },\n): Promise<string[] | Buffer[]>;\nexport function readdir(\n    path: PathLike,\n    options: { encoding?: BufferEncoding | string | null | undefined; withFileTypes: true },\n): Promise<fs.Dirent[]>;\n\nexport function readlink(path: PathLike, callback: (err: NodeJS.ErrnoException, linkString: string) => any): void;\nexport function readlink(path: PathLike): Promise<string>;\n\nexport function realpath(path: PathLike, callback: (err: NodeJS.ErrnoException, resolvedPath: string) => any): void;\nexport function realpath(\n    path: PathLike,\n    cache: { [path: string]: string },\n    callback: (err: NodeJS.ErrnoException, resolvedPath: string) => any,\n): void;\nexport function realpath(path: PathLike, cache?: { [path: string]: string }): Promise<string>;\n\n/* tslint:disable:unified-signatures */\nexport namespace realpath {\n    const native: {\n        (path: PathLike, options: { encoding: 'buffer' } | 'buffer'): Promise<Buffer>;\n        (\n            path: PathLike,\n            options: { encoding: BufferEncoding | string | null } | BufferEncoding | string | undefined | null,\n        ): Promise<string>;\n        (path: PathLike, options: { encoding: BufferEncoding | string | null } | string | undefined | null): Promise<\n            string | Buffer\n        >;\n        (path: PathLike): Promise<string>;\n    } & typeof fs.realpath.native;\n}\n/* tslint:enable:unified-signatures */\n\nexport function rename(oldPath: PathLike, newPath: PathLike, callback: (err: NodeJS.ErrnoException) => void): void;\nexport function rename(oldPath: PathLike, newPath: PathLike): Promise<void>;\n\n/**\n * Asynchronously removes files and directories (modeled on the standard POSIX\n * `rm` utility).\n *\n * Only available in node >= v14.14.0\n */\nexport function rm(\n    path: PathLike,\n    options?: {\n        force?: boolean | undefined;\n        maxRetries?: number | undefined;\n        recursive?: boolean | undefined;\n        retryDelay?: number | undefined;\n    },\n): Promise<void>;\n\n/**\n * Asynchronous rmdir - removes the directory specified in {path}\n *\n * @param callback No arguments other than a possible exception are given to the completion callback.\n */\nexport function rmdir(path: PathLike, callback: (err: NodeJS.ErrnoException) => void): void;\nexport function rmdir(path: PathLike, options?: fs.RmDirOptions): Promise<void>;\n\nexport function stat(path: PathLike, callback: (err: NodeJS.ErrnoException, stats: Stats) => any): void;\nexport function stat(path: PathLike): Promise<Stats>;\n\nexport function symlink(\n    target: PathLike,\n    path: PathLike,\n    type: SymlinkType | undefined,\n    callback: (err: NodeJS.ErrnoException) => void,\n): void;\nexport function symlink(target: PathLike, path: PathLike, callback: (err: NodeJS.ErrnoException) => void): void;\nexport function symlink(target: PathLike, path: PathLike, type?: SymlinkType): Promise<void>;\n\nexport function truncate(path: PathLike, callback: (err: NodeJS.ErrnoException) => void): void;\nexport function truncate(path: PathLike, len: number, callback: (err: NodeJS.ErrnoException) => void): void;\nexport function truncate(path: PathLike, len?: number): Promise<void>;\n\n/**\n * Asynchronous unlink - deletes the file specified in {path}\n *\n * @param callback No arguments other than a possible exception are given to the completion callback.\n */\nexport function unlink(path: PathLike, callback: (err: NodeJS.ErrnoException) => void): void;\nexport function unlink(path: PathLike): Promise<void>;\n\nexport function utimes(\n    path: PathLike,\n    atime: number,\n    mtime: number,\n    callback: (err: NodeJS.ErrnoException) => void,\n): void;\nexport function utimes(path: PathLike, atime: Date, mtime: Date, callback: (err: NodeJS.ErrnoException) => void): void;\nexport function utimes(path: PathLike, atime: number, mtime: number): Promise<void>;\nexport function utimes(path: PathLike, atime: Date, mtime: Date): Promise<void>;\n\nexport function write<TBuffer extends ArrayBufferView>(\n    fd: number,\n    buffer: TBuffer,\n    offset: number,\n    length: number,\n    position: number | null,\n    callback: (err: NodeJS.ErrnoException, written: number, buffer: TBuffer) => void,\n): void;\nexport function write<TBuffer extends ArrayBufferView>(\n    fd: number,\n    buffer: TBuffer,\n    offset: number,\n    length: number,\n    callback: (err: NodeJS.ErrnoException, written: number, buffer: TBuffer) => void,\n): void;\nexport function write(\n    fd: number,\n    data: any,\n    callback: (err: NodeJS.ErrnoException, written: number, str: string) => void,\n): void;\nexport function write(\n    fd: number,\n    data: any,\n    offset: number,\n    callback: (err: NodeJS.ErrnoException, written: number, str: string) => void,\n): void;\nexport function write(\n    fd: number,\n    data: any,\n    offset: number,\n    encoding: BufferEncoding | string,\n    callback: (err: NodeJS.ErrnoException, written: number, str: string) => void,\n): void;\nexport function write<TBuffer extends ArrayBufferView>(\n    fd: number,\n    buffer: TBuffer,\n    offset?: number,\n    length?: number,\n    position?: number | null,\n): Promise<{ bytesWritten: number; buffer: TBuffer }>;\nexport function write(\n    fd: number,\n    data: any,\n    offset?: number,\n    encoding?: BufferEncoding | string,\n): Promise<{ bytesWritten: number; buffer: string }>;\n\nexport function writeFile(file: PathLike | number, data: any, callback: (err: NodeJS.ErrnoException) => void): void;\nexport function writeFile(\n    file: PathLike | number,\n    data: any,\n    options?: WriteFileOptions | BufferEncoding | string,\n): Promise<void>;\nexport function writeFile(\n    file: PathLike | number,\n    data: any,\n    options: WriteFileOptions | BufferEncoding | string,\n    callback: (err: NodeJS.ErrnoException) => void,\n): void;\n\nexport function writev(\n    fd: number,\n    buffers: NodeJS.ArrayBufferView[],\n    position: number,\n    cb: (err: NodeJS.ErrnoException | null, bytesWritten: number, buffers: NodeJS.ArrayBufferView[]) => void,\n): void;\nexport function writev(\n    fd: number,\n    buffers: NodeJS.ArrayBufferView[],\n    cb: (err: NodeJS.ErrnoException | null, bytesWritten: number, buffers: NodeJS.ArrayBufferView[]) => void,\n): void;\nexport function writev(fd: number, buffers: NodeJS.ArrayBufferView[], position?: number): Promise<WritevResult>;\n\n/**\n * Asynchronous mkdtemp - Creates a unique temporary directory. Generates six random characters to be appended behind a required prefix to create a unique temporary directory.\n *\n * @param callback The created folder path is passed as a string to the callback's second parameter.\n */\nexport function mkdtemp(prefix: string): Promise<string>;\nexport function mkdtemp(prefix: string, callback: (err: NodeJS.ErrnoException, folder: string) => void): void;\n\nexport interface PathEntry {\n    path: string;\n    stats: Stats;\n}\n\nexport interface PathEntryStream {\n    read(): PathEntry | null;\n}\n\nexport type CopyFilterSync = (src: string, dest: string) => boolean;\nexport type CopyFilterAsync = (src: string, dest: string) => Promise<boolean>;\n\nexport type SymlinkType = 'dir' | 'file' | 'junction';\n\nexport type Mode = string | number;\n\nexport type ArrayBufferView = NodeJS.TypedArray | DataView;\n\nexport interface CopyOptions {\n    dereference?: boolean | undefined;\n    overwrite?: boolean | undefined;\n    preserveTimestamps?: boolean | undefined;\n    errorOnExist?: boolean | undefined;\n    filter?: CopyFilterSync | CopyFilterAsync | undefined;\n    recursive?: boolean | undefined;\n}\n\nexport interface CopyOptionsSync extends CopyOptions {\n    filter?: CopyFilterSync | undefined;\n}\n\nexport interface EnsureOptions {\n    mode?: number | undefined;\n}\n\nexport interface MoveOptions {\n    overwrite?: boolean | undefined;\n    limit?: number | undefined;\n}\n\nexport interface ReadOptions {\n    throws?: boolean | undefined;\n    fs?: object | undefined;\n    reviver?: any;\n    encoding?: BufferEncoding | string | undefined;\n    flag?: string | undefined;\n}\n\nexport interface WriteFileOptions {\n    encoding?: BufferEncoding | string | null | undefined;\n    flag?: string | undefined;\n    mode?: number | undefined;\n}\n\nexport interface WriteOptions extends WriteFileOptions {\n    fs?: object | undefined;\n    replacer?: any;\n    spaces?: number | string | undefined;\n    EOL?: string | undefined;\n}\n\nexport interface WritevResult {\n    bytesWritten: number;\n    buffers: ArrayBufferView[];\n}\n/README.md\u0003# Installation\r\n> `npm install --save @types/fs-extra`\r\n\r\n# Summary\r\nThis package contains type definitions for fs-extra (https://github.com/jprichardson/node-fs-extra).\r\n\r\n# Details\r\nFiles were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/fs-extra.\r\n\r\n### Additional Details\r\n * Last updated: Tue, 21 Sep 2021 19:02:14 GMT\r\n * Dependencies: [@types/node](https://npmjs.com/package/@types/node)\r\n * Global values: none\r\n\r\n# Credits\r\nThese definitions were written by [Alan Agius](https://github.com/alan-agius4), [midknight41](https://github.com/midknight41), [Brendan Forster](https://github.com/shiftkey), [Mees van Dijk](https://github.com/mees-), [Justin Rockwood](https://github.com/jrockwood), [Sang Dang](https://github.com/sangdth), [Florian Keller](https://github.com/ffflorian), [Piotr Błażejewicz](https://github.com/peterblazejewicz), and [Tiger Oakes](https://github.com/NotWoods).\r\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QHR5cGVzL2hhc2gtc3VtQDEuMC4w",
    "content": "/package.json\u0002{\n    \"name\": \"@types/hash-sum\",\n    \"version\": \"1.0.0\",\n    \"description\": \"TypeScript definitions for hash-sum\",\n    \"license\": \"MIT\",\n    \"contributors\": [\n        {\n            \"name\": \"Daniel Rosenwasser\",\n            \"url\": \"https://github.com/DanielRosenwasser\",\n            \"githubUsername\": \"DanielRosenwasser\"\n        }\n    ],\n    \"main\": \"\",\n    \"repository\": {\n        \"type\": \"git\",\n        \"url\": \"https://github.com/DefinitelyTyped/DefinitelyTyped.git\"\n    },\n    \"scripts\": {},\n    \"dependencies\": {},\n    \"typesPublisherContentHash\": \"a5aa5eccb50be28ba561fdcc78f1f1f774d5ec7d191405e2481f3088a133b94f\",\n    \"typeScriptVersion\": \"2.0\"\n}/LICENSE\u0004    MIT License\n\n    Copyright (c) Microsoft Corporation. All rights reserved.\n\n    Permission is hereby granted, free of charge, to any person obtaining a copy\n    of this software and associated documentation files (the \"Software\"), to deal\n    in the Software without restriction, including without limitation the rights\n    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n    copies of the Software, and to permit persons to whom the Software is\n    furnished to do so, subject to the following conditions:\n\n    The above copyright notice and this permission notice shall be included in all\n    copies or substantial portions of the Software.\n\n    THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n    SOFTWARE\n/README.md\u0001# Installation\r\n> `npm install --save @types/hash-sum`\r\n\r\n# Summary\r\nThis package contains type definitions for hash-sum (https://github.com/bevacqua/hash-sum).\r\n\r\n# Details\r\nFiles were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/hash-sum\r\n\r\nAdditional Details\r\n * Last updated: Sat, 25 Aug 2018 01:04:12 GMT\r\n * Dependencies: none\r\n * Global values: none\r\n\r\n# Credits\r\nThese definitions were written by Daniel Rosenwasser <https://github.com/DanielRosenwasser>.\r\n/index.d.ts\u0001*// Type definitions for hash-sum 1.0\n// Project: https://github.com/bevacqua/hash-sum\n// Definitions by: Daniel Rosenwasser <https://github.com/DanielRosenwasser>\n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n\nexport = hash_sum;\n\ndeclare function hash_sum(value: any): string;\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QHR5cGVzL2xpbmtpZnktaXRAMy4wLjI=",
    "content": "/index.d.ts\b// Type definitions for linkify-it 3.0.2\n// Project: https://github.com/markdown-it/linkify-it\n// Definitions by: Lindsey Smith <https://github.com/praxxis>\n//                 Robert Coie <https://github.com/rapropos/typed-linkify-it>\n//                 Alex Plumb <https://github.com/alexplumb>\n//                 Rafa Gares <https://github.com/ragafus>\n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.2\n\ndeclare const LinkifyIt: {\n    (\n        schemas?: LinkifyIt.SchemaRules | LinkifyIt.Options,\n        options?: LinkifyIt.Options\n    ): LinkifyIt.LinkifyIt;\n    new (\n        schemas?: LinkifyIt.SchemaRules | LinkifyIt.Options,\n        options?: LinkifyIt.Options\n    ): LinkifyIt.LinkifyIt;\n};\n\ndeclare namespace LinkifyIt {\n    type Validate = (text: string, pos: number, self: LinkifyIt) => number | boolean;\n\n    interface FullRule {\n        validate: string | RegExp | Validate;\n        normalize?: ((match: Match) => void) | undefined;\n    }\n\n    type Rule = string | FullRule;\n\n    interface SchemaRules {\n        [schema: string]: Rule;\n    }\n\n    interface Options {\n        fuzzyLink?: boolean | undefined;\n        fuzzyIP?: boolean | undefined;\n        fuzzyEmail?: boolean | undefined;\n    }\n\n    interface Match {\n        index: number;\n        lastIndex: number;\n        raw: string;\n        schema: string;\n        text: string;\n        url: string;\n    }\n\n    interface LinkifyIt {\n        // Use overloads to provide contextual typing to `FullRule.normalize`, which is ambiguous with string.normalize\n        // This appears unneeded to the unified-signatures lint rule.\n        add(schema: string, rule: string): LinkifyIt;\n        // tslint:disable-next-line: unified-signatures\n        add(schema: string, rule: FullRule | null): LinkifyIt;\n        match(text: string): Match[] | null;\n        normalize(raw: string): string;\n        pretest(text: string): boolean;\n        set(options: Options): LinkifyIt;\n        test(text: string): boolean;\n        testSchemaAt(text: string, schemaName: string, pos: number): number;\n        tlds(list: string | string[], keepOld?: boolean): LinkifyIt;\n        re: {\n            [key: string]: RegExp;\n        };\n    }\n}\n\nexport = LinkifyIt;\n/LICENSE\u0004u    MIT License\n\n    Copyright (c) Microsoft Corporation.\n\n    Permission is hereby granted, free of charge, to any person obtaining a copy\n    of this software and associated documentation files (the \"Software\"), to deal\n    in the Software without restriction, including without limitation the rights\n    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n    copies of the Software, and to permit persons to whom the Software is\n    furnished to do so, subject to the following conditions:\n\n    The above copyright notice and this permission notice shall be included in all\n    copies or substantial portions of the Software.\n\n    THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n    SOFTWARE\n/package.json\u0004{\n    \"name\": \"@types/linkify-it\",\n    \"version\": \"3.0.2\",\n    \"description\": \"TypeScript definitions for linkify-it\",\n    \"homepage\": \"https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/linkify-it\",\n    \"license\": \"MIT\",\n    \"contributors\": [\n        {\n            \"name\": \"Lindsey Smith\",\n            \"url\": \"https://github.com/praxxis\",\n            \"githubUsername\": \"praxxis\"\n        },\n        {\n            \"name\": \"Robert Coie\",\n            \"url\": \"https://github.com/rapropos/typed-linkify-it\"\n        },\n        {\n            \"name\": \"Alex Plumb\",\n            \"url\": \"https://github.com/alexplumb\",\n            \"githubUsername\": \"alexplumb\"\n        },\n        {\n            \"name\": \"Rafa Gares\",\n            \"url\": \"https://github.com/ragafus\",\n            \"githubUsername\": \"ragafus\"\n        }\n    ],\n    \"main\": \"\",\n    \"types\": \"index.d.ts\",\n    \"repository\": {\n        \"type\": \"git\",\n        \"url\": \"https://github.com/DefinitelyTyped/DefinitelyTyped.git\",\n        \"directory\": \"types/linkify-it\"\n    },\n    \"scripts\": {},\n    \"dependencies\": {},\n    \"typesPublisherContentHash\": \"001e13e25578e89bdd72aba9710cc97e62dacb4982344e91c4d666aa7cfd642d\",\n    \"typeScriptVersion\": \"3.6\"\n}/README.md\u000b# Installation\r\n> `npm install --save @types/linkify-it`\r\n\r\n# Summary\r\nThis package contains type definitions for linkify-it (https://github.com/markdown-it/linkify-it).\r\n\r\n# Details\r\nFiles were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/linkify-it.\r\n## [index.d.ts](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/linkify-it/index.d.ts)\r\n````ts\r\n// Type definitions for linkify-it 3.0.2\n// Project: https://github.com/markdown-it/linkify-it\n// Definitions by: Lindsey Smith <https://github.com/praxxis>\n//                 Robert Coie <https://github.com/rapropos/typed-linkify-it>\n//                 Alex Plumb <https://github.com/alexplumb>\n//                 Rafa Gares <https://github.com/ragafus>\n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.2\n\ndeclare const LinkifyIt: {\n    (\n        schemas?: LinkifyIt.SchemaRules | LinkifyIt.Options,\n        options?: LinkifyIt.Options\n    ): LinkifyIt.LinkifyIt;\n    new (\n        schemas?: LinkifyIt.SchemaRules | LinkifyIt.Options,\n        options?: LinkifyIt.Options\n    ): LinkifyIt.LinkifyIt;\n};\n\ndeclare namespace LinkifyIt {\n    type Validate = (text: string, pos: number, self: LinkifyIt) => number | boolean;\n\n    interface FullRule {\n        validate: string | RegExp | Validate;\n        normalize?: ((match: Match) => void) | undefined;\n    }\n\n    type Rule = string | FullRule;\n\n    interface SchemaRules {\n        [schema: string]: Rule;\n    }\n\n    interface Options {\n        fuzzyLink?: boolean | undefined;\n        fuzzyIP?: boolean | undefined;\n        fuzzyEmail?: boolean | undefined;\n    }\n\n    interface Match {\n        index: number;\n        lastIndex: number;\n        raw: string;\n        schema: string;\n        text: string;\n        url: string;\n    }\n\n    interface LinkifyIt {\n        // Use overloads to provide contextual typing to `FullRule.normalize`, which is ambiguous with string.normalize\n        // This appears unneeded to the unified-signatures lint rule.\n        add(schema: string, rule: string): LinkifyIt;\n        // tslint:disable-next-line: unified-signatures\n        add(schema: string, rule: FullRule | null): LinkifyIt;\n        match(text: string): Match[] | null;\n        normalize(raw: string): string;\n        pretest(text: string): boolean;\n        set(options: Options): LinkifyIt;\n        test(text: string): boolean;\n        testSchemaAt(text: string, schemaName: string, pos: number): number;\n        tlds(list: string | string[], keepOld?: boolean): LinkifyIt;\n        re: {\n            [key: string]: RegExp;\n        };\n    }\n}\n\nexport = LinkifyIt;\n\r\n````\r\n\r\n### Additional Details\r\n * Last updated: Tue, 06 Jul 2021 22:02:41 GMT\r\n * Dependencies: none\r\n * Global values: none\r\n\r\n# Credits\r\nThese definitions were written by [Lindsey Smith](https://github.com/praxxis), [Robert Coie](https://github.com/rapropos/typed-linkify-it), [Alex Plumb](https://github.com/alexplumb), and [Rafa Gares](https://github.com/ragafus).\r\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QHR5cGVzL2xvbmdANC4wLjI=",
    "content": "/LICENSE\u0004u    MIT License\n\n    Copyright (c) Microsoft Corporation.\n\n    Permission is hereby granted, free of charge, to any person obtaining a copy\n    of this software and associated documentation files (the \"Software\"), to deal\n    in the Software without restriction, including without limitation the rights\n    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n    copies of the Software, and to permit persons to whom the Software is\n    furnished to do so, subject to the following conditions:\n\n    The above copyright notice and this permission notice shall be included in all\n    copies or substantial portions of the Software.\n\n    THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n    SOFTWARE\n/README.md\u0001# Installation\r\n> `npm install --save @types/long`\r\n\r\n# Summary\r\nThis package contains type definitions for long.js (https://github.com/dcodeIO/long.js).\r\n\r\n# Details\r\nFiles were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/long.\r\n\r\n### Additional Details\r\n * Last updated: Tue, 26 Apr 2022 19:31:52 GMT\r\n * Dependencies: none\r\n * Global values: `Long`\r\n\r\n# Credits\r\nThese definitions were written by [Peter Kooijmans](https://github.com/peterkooijmans).\r\n/index.d.ts*R// Type definitions for long.js 4.0.0\n// Project: https://github.com/dcodeIO/long.js\n// Definitions by: Peter Kooijmans <https://github.com/peterkooijmans>\n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// Definitions by: Denis Cappellin <https://github.com/cappellin>\n\nexport = Long;\nexport as namespace Long;\n\ndeclare const Long: Long.LongConstructor;\ntype Long = Long.Long;\ndeclare namespace Long {\n    interface LongConstructor {\n        /**\n         * Constructs a 64 bit two's-complement integer, given its low and high 32 bit values as signed integers. See the from* functions below for more convenient ways of constructing Longs.\n         */\n        new( low: number, high?: number, unsigned?: boolean ): Long;\n        prototype: Long;\n        /**\n         * Maximum unsigned value.\n         */\n        MAX_UNSIGNED_VALUE: Long;\n    \n        /**\n         * Maximum signed value.\n         */\n        MAX_VALUE: Long;\n    \n        /**\n         * Minimum signed value.\n         */\n        MIN_VALUE: Long;\n    \n        /**\n         * Signed negative one.\n         */\n        NEG_ONE: Long;\n    \n        /**\n         * Signed one.\n         */\n        ONE: Long;\n    \n        /**\n         * Unsigned one.\n         */\n        UONE: Long;\n    \n        /**\n         * Unsigned zero.\n         */\n        UZERO: Long;\n    \n        /**\n         * Signed zero\n         */\n        ZERO: Long;\n            \n        /**\n         * Returns a Long representing the 64 bit integer that comes by concatenating the given low and high bits. Each is assumed to use 32 bits.\n         */\n        fromBits( lowBits:number, highBits:number, unsigned?:boolean ): Long;\n    \n        /**\n         * Returns a Long representing the given 32 bit integer value.\n         */\n        fromInt( value: number, unsigned?: boolean ): Long;\n    \n        /**\n         * Returns a Long representing the given value, provided that it is a finite number. Otherwise, zero is returned.\n         */\n        fromNumber( value: number, unsigned?: boolean ): Long;\n    \n        /**\n         * Returns a Long representation of the given string, written using the specified radix.\n         */\n        fromString( str: string, unsigned?: boolean | number, radix?: number ): Long;\n    \n        /**\n         * Creates a Long from its byte representation.\n         */\n        fromBytes( bytes: number[], unsigned?: boolean, le?: boolean ): Long;\n    \n        /**\n         * Creates a Long from its little endian byte representation.\n         */\n        fromBytesLE( bytes: number[], unsigned?: boolean ): Long;\n    \n        /**\n         * Creates a Long from its little endian byte representation.\n         */\n        fromBytesBE( bytes: number[], unsigned?: boolean ): Long;\n    \n        /**\n         * Tests if the specified object is a Long.\n         */\n        isLong( obj: any ): obj is Long;\n    \n        /**\n         * Converts the specified value to a Long.\n         */\n        fromValue( val: Long | number | string | {low: number, high: number, unsigned: boolean}, unsigned?: boolean ): Long;\n    }\n    interface Long\n    {\n        /**\n         * The high 32 bits as a signed value.\n         */\n        high: number;\n    \n        /**\n         * The low 32 bits as a signed value.\n         */\n        low: number;\n    \n        /**\n         * Whether unsigned or not.\n         */\n        unsigned: boolean;\n    \n        /**\n         * Returns the sum of this and the specified Long.\n         */\n        add( addend: number | Long | string ): Long;\n    \n        /**\n         * Returns the bitwise AND of this Long and the specified.\n         */\n        and( other: Long | number | string ): Long;\n    \n        /**\n         * Compares this Long's value with the specified's.\n         */\n        compare( other: Long | number | string ): number;\n    \n        /**\n         * Compares this Long's value with the specified's.\n         */\n        comp( other: Long | number | string ): number;\n    \n        /**\n         * Returns this Long divided by the specified.\n         */\n        divide( divisor: Long | number | string ): Long;\n    \n        /**\n         * Returns this Long divided by the specified.\n         */\n        div( divisor: Long | number | string ): Long;\n    \n        /**\n         * Tests if this Long's value equals the specified's.\n         */\n        equals( other: Long | number | string ): boolean;\n    \n        /**\n         * Tests if this Long's value equals the specified's.\n         */\n        eq( other: Long | number | string ): boolean;\n    \n        /**\n         * Gets the high 32 bits as a signed integer.\n         */\n        getHighBits(): number;\n    \n        /**\n         * Gets the high 32 bits as an unsigned integer.\n         */\n        getHighBitsUnsigned(): number;\n    \n        /**\n         * Gets the low 32 bits as a signed integer.\n         */\n        getLowBits(): number;\n    \n        /**\n         * Gets the low 32 bits as an unsigned integer.\n         */\n        getLowBitsUnsigned(): number;\n    \n        /**\n         * Gets the number of bits needed to represent the absolute value of this Long.\n         */\n        getNumBitsAbs(): number;\n    \n        /**\n         * Tests if this Long's value is greater than the specified's.\n         */\n        greaterThan( other: Long | number | string ): boolean;\n    \n        /**\n         * Tests if this Long's value is greater than the specified's.\n         */\n        gt( other: Long | number | string ): boolean;\n    \n        /**\n         * Tests if this Long's value is greater than or equal the specified's.\n         */\n        greaterThanOrEqual( other: Long | number | string ): boolean;\n    \n        /**\n         * Tests if this Long's value is greater than or equal the specified's.\n         */\n        gte( other: Long | number | string ): boolean;\n    \n        /**\n         * Tests if this Long's value is even.\n         */\n        isEven(): boolean;\n    \n        /**\n         * Tests if this Long's value is negative.\n         */\n        isNegative(): boolean;\n    \n        /**\n         * Tests if this Long's value is odd.\n         */\n        isOdd(): boolean;\n    \n        /**\n         * Tests if this Long's value is positive.\n         */\n        isPositive(): boolean;\n    \n        /**\n         * Tests if this Long's value equals zero.\n         */\n        isZero(): boolean;\n    \n        /**\n         * Tests if this Long's value is less than the specified's.\n         */\n        lessThan( other: Long | number | string ): boolean;\n    \n        /**\n         * Tests if this Long's value is less than the specified's.\n         */\n        lt( other: Long | number | string ): boolean;\n    \n        /**\n         * Tests if this Long's value is less than or equal the specified's.\n         */\n        lessThanOrEqual( other: Long | number | string ): boolean;\n    \n        /**\n         * Tests if this Long's value is less than or equal the specified's.\n         */\n        lte( other: Long | number | string ): boolean;\n    \n        /**\n         * Returns this Long modulo the specified.\n         */\n        modulo( other: Long | number | string ): Long;\n    \n        /**\n         * Returns this Long modulo the specified.\n         */\n        mod( other: Long | number | string ): Long;\n    \n        /**\n         * Returns the product of this and the specified Long.\n         */\n        multiply( multiplier: Long | number | string ): Long;\n    \n        /**\n         * Returns the product of this and the specified Long.\n         */\n        mul( multiplier: Long | number | string ): Long;\n    \n        /**\n         * Negates this Long's value.\n         */\n        negate(): Long;\n    \n        /**\n         * Negates this Long's value.\n         */\n        neg(): Long;\n    \n        /**\n         * Returns the bitwise NOT of this Long.\n         */\n        not(): Long;\n    \n        /**\n         * Tests if this Long's value differs from the specified's.\n         */\n        notEquals( other: Long | number | string ): boolean;\n    \n        /**\n         * Tests if this Long's value differs from the specified's.\n         */\n        neq( other: Long | number | string ): boolean;\n    \n        /**\n         * Returns the bitwise OR of this Long and the specified.\n         */\n        or( other: Long | number | string ): Long;\n    \n        /**\n         * Returns this Long with bits shifted to the left by the given amount.\n         */\n        shiftLeft( numBits: number | Long ): Long;\n    \n        /**\n         * Returns this Long with bits shifted to the left by the given amount.\n         */\n        shl( numBits: number | Long ): Long;\n    \n        /**\n         * Returns this Long with bits arithmetically shifted to the right by the given amount.\n         */\n        shiftRight( numBits: number | Long ): Long;\n    \n        /**\n         * Returns this Long with bits arithmetically shifted to the right by the given amount.\n         */\n        shr( numBits: number | Long ): Long;\n    \n        /**\n         * Returns this Long with bits logically shifted to the right by the given amount.\n         */\n        shiftRightUnsigned( numBits: number | Long ): Long;\n    \n        /**\n         * Returns this Long with bits logically shifted to the right by the given amount.\n         */\n        shru( numBits: number | Long ): Long;\n    \n        /**\n         * Returns the difference of this and the specified Long.\n         */\n        subtract( subtrahend: number | Long | string ): Long;\n    \n        /**\n         * Returns the difference of this and the specified Long.\n         */\n        sub( subtrahend: number | Long |string ): Long;\n    \n        /**\n         * Converts the Long to a 32 bit integer, assuming it is a 32 bit integer.\n         */\n        toInt(): number;\n    \n        /**\n         * Converts the Long to a the nearest floating-point representation of this value (double, 53 bit mantissa).\n         */\n        toNumber(): number;\n    \n        /**\n         * Converts this Long to its byte representation.\n         */\n    \n        toBytes( le?: boolean ): number[];\n    \n        /**\n         * Converts this Long to its little endian byte representation.\n         */\n    \n        toBytesLE(): number[];\n    \n        /**\n         * Converts this Long to its big endian byte representation.\n         */\n    \n        toBytesBE(): number[];\n    \n        /**\n         * Converts this Long to signed.\n         */\n        toSigned(): Long;\n    \n        /**\n         * Converts the Long to a string written in the specified radix.\n         */\n        toString( radix?: number ): string;\n    \n        /**\n         * Converts this Long to unsigned.\n         */\n        toUnsigned(): Long;\n    \n        /**\n         * Returns the bitwise XOR of this Long and the given one.\n         */\n        xor( other: Long | number | string ): Long;\n    }\n}\n/package.json\u0003\u0018{\n    \"name\": \"@types/long\",\n    \"version\": \"4.0.2\",\n    \"description\": \"TypeScript definitions for long.js\",\n    \"homepage\": \"https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/long\",\n    \"license\": \"MIT\",\n    \"contributors\": [\n        {\n            \"name\": \"Peter Kooijmans\",\n            \"url\": \"https://github.com/peterkooijmans\",\n            \"githubUsername\": \"peterkooijmans\"\n        }\n    ],\n    \"main\": \"\",\n    \"types\": \"index.d.ts\",\n    \"repository\": {\n        \"type\": \"git\",\n        \"url\": \"https://github.com/DefinitelyTyped/DefinitelyTyped.git\",\n        \"directory\": \"types/long\"\n    },\n    \"scripts\": {},\n    \"dependencies\": {},\n    \"typesPublisherContentHash\": \"ce51a9fcaeb3f15cee5396e1c4f4b5ca2986a066f9bbe885a51dcdc6dbb22fd5\",\n    \"typeScriptVersion\": \"3.9\"\n}"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QHR5cGVzL3FzQDYuOS43",
    "content": "/index.d.ts\f\u0010// Type definitions for qs 6.9\n// Project: https://github.com/ljharb/qs\n// Definitions by: Roman Korneev <https://github.com/RWander>\n//                 Leon Yu <https://github.com/leonyu>\n//                 Belinda Teh <https://github.com/tehbelinda>\n//                 Melvin Lee <https://github.com/zyml>\n//                 Arturs Vonda <https://github.com/artursvonda>\n//                 Carlos Bonetti <https://github.com/CarlosBonetti>\n//                 Dan Smith <https://github.com/dpsmith3>\n//                 Hunter Perrin <https://github.com/hperrin>\n//                 Jordan Harband <https://github.com/ljharb>\n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\nexport = QueryString;\nexport as namespace qs;\n\ndeclare namespace QueryString {\n    type defaultEncoder = (str: any, defaultEncoder?: any, charset?: string) => string;\n    type defaultDecoder = (str: string, decoder?: any, charset?: string) => string;\n\n    interface IStringifyOptions {\n        delimiter?: string | undefined;\n        strictNullHandling?: boolean | undefined;\n        skipNulls?: boolean | undefined;\n        encode?: boolean | undefined;\n        encoder?: ((str: any, defaultEncoder: defaultEncoder, charset: string, type: 'key' | 'value') => string) | undefined;\n        filter?: Array<string | number> | ((prefix: string, value: any) => any) | undefined;\n        arrayFormat?: 'indices' | 'brackets' | 'repeat' | 'comma' | undefined;\n        indices?: boolean | undefined;\n        sort?: ((a: any, b: any) => number) | undefined;\n        serializeDate?: ((d: Date) => string) | undefined;\n        format?: 'RFC1738' | 'RFC3986' | undefined;\n        encodeValuesOnly?: boolean | undefined;\n        addQueryPrefix?: boolean | undefined;\n        allowDots?: boolean | undefined;\n        charset?: 'utf-8' | 'iso-8859-1' | undefined;\n        charsetSentinel?: boolean | undefined;\n    }\n\n    interface IParseOptions {\n        comma?: boolean | undefined;\n        delimiter?: string | RegExp | undefined;\n        depth?: number | false | undefined;\n        decoder?: ((str: string, defaultDecoder: defaultDecoder, charset: string, type: 'key' | 'value') => any) | undefined;\n        arrayLimit?: number | undefined;\n        parseArrays?: boolean | undefined;\n        allowDots?: boolean | undefined;\n        plainObjects?: boolean | undefined;\n        allowPrototypes?: boolean | undefined;\n        parameterLimit?: number | undefined;\n        strictNullHandling?: boolean | undefined;\n        ignoreQueryPrefix?: boolean | undefined;\n        charset?: 'utf-8' | 'iso-8859-1' | undefined;\n        charsetSentinel?: boolean | undefined;\n        interpretNumericEntities?: boolean | undefined;\n    }\n\n    interface ParsedQs { [key: string]: undefined | string | string[] | ParsedQs | ParsedQs[] }\n\n    function stringify(obj: any, options?: IStringifyOptions): string;\n    function parse(str: string, options?: IParseOptions & { decoder?: never | undefined }): ParsedQs;\n    function parse(str: string | Record<string, string>, options?: IParseOptions): { [key: string]: unknown };\n}\n/LICENSE\u0004u    MIT License\n\n    Copyright (c) Microsoft Corporation.\n\n    Permission is hereby granted, free of charge, to any person obtaining a copy\n    of this software and associated documentation files (the \"Software\"), to deal\n    in the Software without restriction, including without limitation the rights\n    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n    copies of the Software, and to permit persons to whom the Software is\n    furnished to do so, subject to the following conditions:\n\n    The above copyright notice and this permission notice shall be included in all\n    copies or substantial portions of the Software.\n\n    THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n    SOFTWARE\n/README.md\u0003;# Installation\r\n> `npm install --save @types/qs`\r\n\r\n# Summary\r\nThis package contains type definitions for qs (https://github.com/ljharb/qs).\r\n\r\n# Details\r\nFiles were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/qs.\r\n\r\n### Additional Details\r\n * Last updated: Wed, 07 Jul 2021 17:02:42 GMT\r\n * Dependencies: none\r\n * Global values: `qs`\r\n\r\n# Credits\r\nThese definitions were written by [Roman Korneev](https://github.com/RWander), [Leon Yu](https://github.com/leonyu), [Belinda Teh](https://github.com/tehbelinda), [Melvin Lee](https://github.com/zyml), [Arturs Vonda](https://github.com/artursvonda), [Carlos Bonetti](https://github.com/CarlosBonetti), [Dan Smith](https://github.com/dpsmith3), [Hunter Perrin](https://github.com/hperrin), and [Jordan Harband](https://github.com/ljharb).\r\n/package.json\u0007{\n    \"name\": \"@types/qs\",\n    \"version\": \"6.9.7\",\n    \"description\": \"TypeScript definitions for qs\",\n    \"homepage\": \"https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/qs\",\n    \"license\": \"MIT\",\n    \"contributors\": [\n        {\n            \"name\": \"Roman Korneev\",\n            \"url\": \"https://github.com/RWander\",\n            \"githubUsername\": \"RWander\"\n        },\n        {\n            \"name\": \"Leon Yu\",\n            \"url\": \"https://github.com/leonyu\",\n            \"githubUsername\": \"leonyu\"\n        },\n        {\n            \"name\": \"Belinda Teh\",\n            \"url\": \"https://github.com/tehbelinda\",\n            \"githubUsername\": \"tehbelinda\"\n        },\n        {\n            \"name\": \"Melvin Lee\",\n            \"url\": \"https://github.com/zyml\",\n            \"githubUsername\": \"zyml\"\n        },\n        {\n            \"name\": \"Arturs Vonda\",\n            \"url\": \"https://github.com/artursvonda\",\n            \"githubUsername\": \"artursvonda\"\n        },\n        {\n            \"name\": \"Carlos Bonetti\",\n            \"url\": \"https://github.com/CarlosBonetti\",\n            \"githubUsername\": \"CarlosBonetti\"\n        },\n        {\n            \"name\": \"Dan Smith\",\n            \"url\": \"https://github.com/dpsmith3\",\n            \"githubUsername\": \"dpsmith3\"\n        },\n        {\n            \"name\": \"Hunter Perrin\",\n            \"url\": \"https://github.com/hperrin\",\n            \"githubUsername\": \"hperrin\"\n        },\n        {\n            \"name\": \"Jordan Harband\",\n            \"url\": \"https://github.com/ljharb\",\n            \"githubUsername\": \"ljharb\"\n        }\n    ],\n    \"main\": \"\",\n    \"types\": \"index.d.ts\",\n    \"repository\": {\n        \"type\": \"git\",\n        \"url\": \"https://github.com/DefinitelyTyped/DefinitelyTyped.git\",\n        \"directory\": \"types/qs\"\n    },\n    \"scripts\": {},\n    \"dependencies\": {},\n    \"typesPublisherContentHash\": \"b33fed3eed022f94c7db53593571f370eaa77aa17b3e302dc1bd77304f03e56c\",\n    \"typeScriptVersion\": \"3.6\"\n}"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QHR5cGVzL3JhbmdlLXBhcnNlckAxLjIuNA==",
    "content": "/package.json\u0003%{\n    \"name\": \"@types/range-parser\",\n    \"version\": \"1.2.4\",\n    \"description\": \"TypeScript definitions for range-parser\",\n    \"homepage\": \"https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/range-parser\",\n    \"license\": \"MIT\",\n    \"contributors\": [\n        {\n            \"name\": \"Tomek Łaziuk\",\n            \"url\": \"https://github.com/tlaziuk\",\n            \"githubUsername\": \"tlaziuk\"\n        }\n    ],\n    \"main\": \"\",\n    \"types\": \"index.d.ts\",\n    \"repository\": {\n        \"type\": \"git\",\n        \"url\": \"https://github.com/DefinitelyTyped/DefinitelyTyped.git\",\n        \"directory\": \"types/range-parser\"\n    },\n    \"scripts\": {},\n    \"dependencies\": {},\n    \"typesPublisherContentHash\": \"60a027a88ae9d7c5ae30935c98266f5033af3c38944121c975bf5e136b9053f3\",\n    \"typeScriptVersion\": \"3.6\"\n}/README.md\u0007O# Installation\r\n> `npm install --save @types/range-parser`\r\n\r\n# Summary\r\nThis package contains type definitions for range-parser (https://github.com/jshttp/range-parser).\r\n\r\n# Details\r\nFiles were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/range-parser.\r\n## [index.d.ts](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/range-parser/index.d.ts)\r\n````ts\r\n// Type definitions for range-parser 1.2\n// Project: https://github.com/jshttp/range-parser\n// Definitions by: Tomek Łaziuk <https://github.com/tlaziuk>\n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n\n/**\n * When ranges are returned, the array has a \"type\" property which is the type of\n * range that is required (most commonly, \"bytes\"). Each array element is an object\n * with a \"start\" and \"end\" property for the portion of the range.\n *\n * @returns `-1` when unsatisfiable and `-2` when syntactically invalid, ranges otherwise.\n */\ndeclare function RangeParser(size: number, str: string, options?: RangeParser.Options): RangeParser.Result | RangeParser.Ranges;\n\ndeclare namespace RangeParser {\n    interface Ranges extends Array<Range> {\n        type: string;\n    }\n    interface Range {\n        start: number;\n        end: number;\n    }\n    interface Options {\n        /**\n         * The \"combine\" option can be set to `true` and overlapping & adjacent ranges\n         * will be combined into a single range.\n         */\n        combine?: boolean | undefined;\n    }\n    type ResultUnsatisfiable = -1;\n    type ResultInvalid = -2;\n    type Result = ResultUnsatisfiable | ResultInvalid;\n}\n\nexport = RangeParser;\n\r\n````\r\n\r\n### Additional Details\r\n * Last updated: Wed, 07 Jul 2021 17:02:53 GMT\r\n * Dependencies: none\r\n * Global values: none\r\n\r\n# Credits\r\nThese definitions were written by [Tomek Łaziuk](https://github.com/tlaziuk).\r\n/index.d.ts\u0004// Type definitions for range-parser 1.2\n// Project: https://github.com/jshttp/range-parser\n// Definitions by: Tomek Łaziuk <https://github.com/tlaziuk>\n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n\n/**\n * When ranges are returned, the array has a \"type\" property which is the type of\n * range that is required (most commonly, \"bytes\"). Each array element is an object\n * with a \"start\" and \"end\" property for the portion of the range.\n *\n * @returns `-1` when unsatisfiable and `-2` when syntactically invalid, ranges otherwise.\n */\ndeclare function RangeParser(size: number, str: string, options?: RangeParser.Options): RangeParser.Result | RangeParser.Ranges;\n\ndeclare namespace RangeParser {\n    interface Ranges extends Array<Range> {\n        type: string;\n    }\n    interface Range {\n        start: number;\n        end: number;\n    }\n    interface Options {\n        /**\n         * The \"combine\" option can be set to `true` and overlapping & adjacent ranges\n         * will be combined into a single range.\n         */\n        combine?: boolean | undefined;\n    }\n    type ResultUnsatisfiable = -1;\n    type ResultInvalid = -2;\n    type Result = ResultUnsatisfiable | ResultInvalid;\n}\n\nexport = RangeParser;\n/LICENSE\u0004u    MIT License\n\n    Copyright (c) Microsoft Corporation.\n\n    Permission is hereby granted, free of charge, to any person obtaining a copy\n    of this software and associated documentation files (the \"Software\"), to deal\n    in the Software without restriction, including without limitation the rights\n    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n    copies of the Software, and to permit persons to whom the Software is\n    furnished to do so, subject to the following conditions:\n\n    The above copyright notice and this permission notice shall be included in all\n    copies or substantial portions of the Software.\n\n    THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n    SOFTWARE\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QHR5cGVzL3NlcnZlLXN0YXRpY0AxLjcuMzI=",
    "content": "/README.md\u0002\u001b# Installation\r\n> `npm install --save @types/serve-static`\r\n\r\n# Summary\r\nThis package contains type definitions for serve-static (https://github.com/expressjs/serve-static).\r\n\r\n# Details\r\nFiles were exported from https://www.github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/serve-static\r\n\r\nAdditional Details\r\n * Last updated: Mon, 21 Aug 2017 22:03:22 GMT\r\n * Dependencies: express-serve-static-core, mime\r\n * Global values: none\r\n\r\n# Credits\r\nThese definitions were written by Uros Smolnik <https://github.com/urossmolnik>.\r\n/LICENSE\u0004    MIT License\n\n    Copyright (c) Microsoft Corporation. All rights reserved.\n\n    Permission is hereby granted, free of charge, to any person obtaining a copy\n    of this software and associated documentation files (the \"Software\"), to deal\n    in the Software without restriction, including without limitation the rights\n    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n    copies of the Software, and to permit persons to whom the Software is\n    furnished to do so, subject to the following conditions:\n\n    The above copyright notice and this permission notice shall be included in all\n    copies or substantial portions of the Software.\n\n    THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n    SOFTWARE\n/index.d.ts\u000e// Type definitions for serve-static 1.7.1\n// Project: https://github.com/expressjs/serve-static\n// Definitions by: Uros Smolnik <https://github.com/urossmolnik>\n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n\n/* =================== USAGE ===================\n\n    import * as serveStatic from \"serve-static\";\n    app.use(serveStatic(\"public/ftp\", {\"index\": [\"default.html\", \"default.htm\"]}))\n\n =============================================== */\n\n/// <reference types=\"express-serve-static-core\" />\n\nimport * as express from \"express-serve-static-core\";\nimport * as m from \"mime\";\n\n/**\n * Create a new middleware function to serve files from within a given root directory.\n * The file to serve will be determined by combining req.url with the provided root directory.\n * When a file is not found, instead of sending a 404 response, this module will instead call next() to move on to the next middleware, allowing for stacking and fall-backs.\n */\ndeclare function serveStatic(root: string, options?: serveStatic.ServeStaticOptions): express.Handler;\n\ndeclare namespace serveStatic {\n    var mime: typeof m;\n    interface ServeStaticOptions {\n        /**\n         * Set how \"dotfiles\" are treated when encountered. A dotfile is a file or directory that begins with a dot (\".\").\n         * Note this check is done on the path itself without checking if the path actually exists on the disk.\n         * If root is specified, only the dotfiles above the root are checked (i.e. the root itself can be within a dotfile when when set to \"deny\").\n         * The default value is 'ignore'.\n         * 'allow' No special treatment for dotfiles\n         * 'deny' Send a 403 for any request for a dotfile\n         * 'ignore' Pretend like the dotfile does not exist and call next()\n         */\n        dotfiles?: string;\n\n        /**\n         * Enable or disable etag generation, defaults to true.\n         */\n        etag?: boolean;\n\n        /**\n         * Set file extension fallbacks. When set, if a file is not found, the given extensions will be added to the file name and search for.\n         * The first that exists will be served. Example: ['html', 'htm'].\n         * The default value is false.\n         */\n        extensions?: string[];\n\n        /**\n         * Let client errors fall-through as unhandled requests, otherwise forward a client error.\n         * The default value is false.\n         */\n        fallthrough?: boolean;\n\n        /**\n         * By default this module will send \"index.html\" files in response to a request on a directory.\n         * To disable this set false or to supply a new index pass a string or an array in preferred order.\n         */\n        index?: boolean | string | string[];\n\n        /**\n         * Enable or disable Last-Modified header, defaults to true. Uses the file system's last modified value.\n         */\n        lastModified?: boolean;\n\n        /**\n         * Provide a max-age in milliseconds for http caching, defaults to 0. This can also be a string accepted by the ms module.\n         */\n        maxAge?: number | string;\n\n        /**\n         * Redirect to trailing \"/\" when the pathname is a dir. Defaults to true.\n         */\n        redirect?: boolean;\n\n        /**\n         * Function to set custom headers on response. Alterations to the headers need to occur synchronously.\n         * The function is called as fn(res, path, stat), where the arguments are:\n         * res the response object\n         * path the file path that is being sent\n         * stat the stat object of the file that is being sent\n         */\n        setHeaders?: (res: express.Response, path: string, stat: any) => any;\n    }\n    function serveStatic(root: string, options?: ServeStaticOptions): express.Handler;\n}\n\nexport = serveStatic;\n/package.json\u0002{\n    \"name\": \"@types/serve-static\",\n    \"version\": \"1.7.32\",\n    \"description\": \"TypeScript definitions for serve-static\",\n    \"license\": \"MIT\",\n    \"contributors\": [\n        {\n            \"name\": \"Uros Smolnik\",\n            \"url\": \"https://github.com/urossmolnik\"\n        }\n    ],\n    \"main\": \"\",\n    \"repository\": {\n        \"type\": \"git\",\n        \"url\": \"https://www.github.com/DefinitelyTyped/DefinitelyTyped.git\"\n    },\n    \"scripts\": {},\n    \"dependencies\": {\n        \"@types/express-serve-static-core\": \"*\",\n        \"@types/mime\": \"*\"\n    },\n    \"typesPublisherContentHash\": \"c0dac04127ff734150c992cc697e39e0374266604258bd6663a3c651531a9066\",\n    \"typeScriptVersion\": \"2.0\"\n}"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QHR5cGVzL3dlYi1ibHVldG9vdGhAMC4wLjE2",
    "content": "/README.md\u0002# Installation\r\n> `npm install --save @types/web-bluetooth`\r\n\r\n# Summary\r\nThis package contains type definitions for Web Bluetooth (https://webbluetoothcg.github.io/web-bluetooth/).\r\n\r\n# Details\r\nFiles were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/web-bluetooth.\r\n\r\n### Additional Details\r\n * Last updated: Sat, 15 Oct 2022 06:33:03 GMT\r\n * Dependencies: none\r\n * Global values: none\r\n\r\n# Credits\r\nThese definitions were written by [Uri Shaked](https://github.com/urish), [Xavier Lozinguez](https://github.com/xlozinguez), [Rob Moran](https://github.com/thegecko), and [David Bjerremose](https://github.com/DaBs).\r\n/LICENSE\u0004u    MIT License\n\n    Copyright (c) Microsoft Corporation.\n\n    Permission is hereby granted, free of charge, to any person obtaining a copy\n    of this software and associated documentation files (the \"Software\"), to deal\n    in the Software without restriction, including without limitation the rights\n    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n    copies of the Software, and to permit persons to whom the Software is\n    furnished to do so, subject to the following conditions:\n\n    The above copyright notice and this permission notice shall be included in all\n    copies or substantial portions of the Software.\n\n    THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n    SOFTWARE\n/index.d.ts\u001e// Type definitions for Web Bluetooth\n// Project: https://webbluetoothcg.github.io/web-bluetooth/\n// Definitions by: Uri Shaked <https://github.com/urish>\n//                    Xavier Lozinguez <https://github.com/xlozinguez>\n//                    Rob Moran <https://github.com/thegecko>\n//                    David Bjerremose <https://github.com/DaBs>\n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n\ntype BluetoothServiceUUID = number | string;\ntype BluetoothCharacteristicUUID = number | string;\ntype BluetoothDescriptorUUID = number | string;\n\ntype BluetoothManufacturerData = Map<number, DataView>;\ntype BluetoothServiceData = Map<BluetoothServiceUUID, DataView>;\n\ninterface BluetoothDataFilter {\n    readonly dataPrefix?: BufferSource | undefined;\n    readonly mask?: BufferSource | undefined;\n}\n\ninterface BluetoothManufacturerDataFilter extends BluetoothDataFilter {\n    companyIdentifier: number;\n}\n\ninterface BluetoothServiceDataFilter extends BluetoothDataFilter {\n    service: BluetoothServiceUUID;\n}\n\ninterface BluetoothLEScanFilter {\n    readonly name?: string | undefined;\n    readonly namePrefix?: string | undefined;\n    readonly services?: BluetoothServiceUUID[] | undefined;\n    readonly manufacturerData?: BluetoothManufacturerDataFilter[] | undefined;\n    readonly serviceData?: BluetoothServiceDataFilter[] | undefined;\n}\n\ninterface BluetoothLEScanOptions {\n    readonly filters?: BluetoothLEScanFilter[] | undefined;\n    readonly keepRepeatedDevices?: boolean | undefined;\n    readonly acceptAllAdvertisements?: boolean | undefined;\n}\n\ninterface BluetoothLEScan extends BluetoothLEScanOptions {\n    active: boolean;\n    stop: () => void;\n}\n\ntype RequestDeviceOptions = {\n    filters: BluetoothLEScanFilter[];\n    optionalServices?: BluetoothServiceUUID[] | undefined;\n    optionalManufacturerData?: number[] | undefined;\n} | {\n    acceptAllDevices: boolean;\n    optionalServices?: BluetoothServiceUUID[] | undefined;\n    optionalManufacturerData?: number[] | undefined;\n};\n\ninterface BluetoothAdvertisingEvent extends Event {\n    readonly device: BluetoothDevice;\n    readonly uuids: BluetoothServiceUUID[];\n    readonly manufacturerData: BluetoothManufacturerData;\n    readonly serviceData: BluetoothServiceData;\n    readonly name?: string | undefined;\n    readonly appearance?: number | undefined;\n    readonly rssi?: number | undefined;\n    readonly txPower?: number | undefined;\n}\n\ninterface BluetoothRemoteGATTDescriptor {\n    readonly characteristic: BluetoothRemoteGATTCharacteristic;\n    readonly uuid: string;\n    readonly value?: DataView | undefined;\n    readValue(): Promise<DataView>;\n    writeValue(value: BufferSource): Promise<void>;\n}\n\ninterface BluetoothCharacteristicProperties {\n    readonly broadcast: boolean;\n    readonly read: boolean;\n    readonly writeWithoutResponse: boolean;\n    readonly write: boolean;\n    readonly notify: boolean;\n    readonly indicate: boolean;\n    readonly authenticatedSignedWrites: boolean;\n    readonly reliableWrite: boolean;\n    readonly writableAuxiliaries: boolean;\n}\n\ninterface CharacteristicEventHandlers {\n    oncharacteristicvaluechanged: (this: this, ev: Event) => any;\n}\n\ninterface BluetoothRemoteGATTCharacteristic extends EventTarget, CharacteristicEventHandlers {\n    readonly service: BluetoothRemoteGATTService;\n    readonly uuid: string;\n    readonly properties: BluetoothCharacteristicProperties;\n    readonly value?: DataView | undefined;\n    getDescriptor(descriptor: BluetoothDescriptorUUID): Promise<BluetoothRemoteGATTDescriptor>;\n    getDescriptors(descriptor?: BluetoothDescriptorUUID): Promise<BluetoothRemoteGATTDescriptor[]>;\n    readValue(): Promise<DataView>;\n    writeValue(value: BufferSource): Promise<void>;\n    writeValueWithResponse(value: BufferSource): Promise<void>;\n    writeValueWithoutResponse(value: BufferSource): Promise<void>;\n    startNotifications(): Promise<BluetoothRemoteGATTCharacteristic>;\n    stopNotifications(): Promise<BluetoothRemoteGATTCharacteristic>;\n    addEventListener(type: \"characteristicvaluechanged\", listener: (this: this, ev: Event) => any, useCapture?: boolean): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;\n}\n\ninterface ServiceEventHandlers {\n    onserviceadded: (this: this, ev: Event) => any;\n    onservicechanged: (this: this, ev: Event) => any;\n    onserviceremoved: (this: this, ev: Event) => any;\n}\n\ninterface BluetoothRemoteGATTService extends EventTarget, CharacteristicEventHandlers, ServiceEventHandlers {\n    readonly device: BluetoothDevice;\n    readonly uuid: string;\n    readonly isPrimary: boolean;\n    getCharacteristic(characteristic: BluetoothCharacteristicUUID): Promise<BluetoothRemoteGATTCharacteristic>;\n    getCharacteristics(characteristic?: BluetoothCharacteristicUUID): Promise<BluetoothRemoteGATTCharacteristic[]>;\n    getIncludedService(service: BluetoothServiceUUID): Promise<BluetoothRemoteGATTService>;\n    getIncludedServices(service?: BluetoothServiceUUID): Promise<BluetoothRemoteGATTService[]>;\n    addEventListener(type: \"serviceadded\", listener: (this: this, ev: Event) => any, useCapture?: boolean): void;\n    addEventListener(type: \"servicechanged\", listener: (this: this, ev: Event) => any, useCapture?: boolean): void;\n    addEventListener(type: \"serviceremoved\", listener: (this: this, ev: Event) => any, useCapture?: boolean): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;\n}\n\ninterface BluetoothRemoteGATTServer {\n    readonly device: BluetoothDevice;\n    readonly connected: boolean;\n    connect(): Promise<BluetoothRemoteGATTServer>;\n    disconnect(): void;\n    getPrimaryService(service: BluetoothServiceUUID): Promise<BluetoothRemoteGATTService>;\n    getPrimaryServices(service?: BluetoothServiceUUID): Promise<BluetoothRemoteGATTService[]>;\n}\n\ninterface BluetoothDeviceEventHandlers {\n    onadvertisementreceived: (this: this, ev: BluetoothAdvertisingEvent) => any;\n    ongattserverdisconnected: (this: this, ev: Event) => any;\n}\n\ninterface WatchAdvertisementsOptions {\n    signal?: AbortSignal;\n}\n\ninterface BluetoothDevice extends EventTarget, BluetoothDeviceEventHandlers, CharacteristicEventHandlers, ServiceEventHandlers {\n    readonly id: string;\n    readonly name?: string | undefined;\n    readonly gatt?: BluetoothRemoteGATTServer | undefined;\n    forget(): Promise<void>;\n    watchAdvertisements(options?: WatchAdvertisementsOptions): Promise<void>;\n    readonly watchingAdvertisements: boolean;\n    addEventListener(type: \"gattserverdisconnected\", listener: (this: this, ev: Event) => any, useCapture?: boolean): void;\n    addEventListener(type: \"advertisementreceived\", listener: (this: this, ev: BluetoothAdvertisingEvent) => any, useCapture?: boolean): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;\n}\n\ninterface Bluetooth extends EventTarget, BluetoothDeviceEventHandlers, CharacteristicEventHandlers, ServiceEventHandlers {\n    getDevices(): Promise<BluetoothDevice[]>;\n    getAvailability(): Promise<boolean>;\n    onavailabilitychanged: (this: this, ev: Event) => any;\n    readonly referringDevice?: BluetoothDevice | undefined;\n    requestDevice(options?: RequestDeviceOptions): Promise<BluetoothDevice>;\n    requestLEScan(options?: BluetoothLEScanOptions): Promise<BluetoothLEScan>;\n    addEventListener(type: \"availabilitychanged\", listener: (this: this, ev: Event) => any, useCapture?: boolean): void;\n    addEventListener(type: \"advertisementreceived\", listener: (this: this, ev: BluetoothAdvertisingEvent) => any, useCapture?: boolean): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;\n}\n\ninterface Navigator {\n    bluetooth: Bluetooth;\n}\n/package.json\u0004{\n    \"name\": \"@types/web-bluetooth\",\n    \"version\": \"0.0.16\",\n    \"description\": \"TypeScript definitions for Web Bluetooth\",\n    \"homepage\": \"https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/web-bluetooth\",\n    \"license\": \"MIT\",\n    \"contributors\": [\n        {\n            \"name\": \"Uri Shaked\",\n            \"url\": \"https://github.com/urish\",\n            \"githubUsername\": \"urish\"\n        },\n        {\n            \"name\": \"Xavier Lozinguez\",\n            \"url\": \"https://github.com/xlozinguez\",\n            \"githubUsername\": \"xlozinguez\"\n        },\n        {\n            \"name\": \"Rob Moran\",\n            \"url\": \"https://github.com/thegecko\",\n            \"githubUsername\": \"thegecko\"\n        },\n        {\n            \"name\": \"David Bjerremose\",\n            \"url\": \"https://github.com/DaBs\",\n            \"githubUsername\": \"DaBs\"\n        }\n    ],\n    \"main\": \"\",\n    \"types\": \"index.d.ts\",\n    \"repository\": {\n        \"type\": \"git\",\n        \"url\": \"https://github.com/DefinitelyTyped/DefinitelyTyped.git\",\n        \"directory\": \"types/web-bluetooth\"\n    },\n    \"scripts\": {},\n    \"dependencies\": {},\n    \"typesPublisherContentHash\": \"3b2f0055737003b25e0367d4a0418369d6f71f3d68510d72ab983fdf9aaab2a7\",\n    \"typeScriptVersion\": \"4.1\"\n}"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QHZ1ZS9jb21waWxlci1kb21AMy4yLjQ3",
    "content": "&/dist/compiler-dom.esm-browser.prod.js\u0007function e(e,t){const n=Object.create(null),o=e.split(\",\");for(let r=0;r<o.length;r++)n[o[r]]=!0;return t?e=>!!n[e.toLowerCase()]:e=>!!n[e]}function t(e,t=0,n=e.length){let o=e.split(/(\\r?\\n)/);const r=o.filter(((e,t)=>t%2==1));o=o.filter(((e,t)=>t%2==0));let s=0;const i=[];for(let c=0;c<o.length;c++)if(s+=o[c].length+(r[c]&&r[c].length||0),s>=t){for(let e=c-2;e<=c+2||n>s;e++){if(e<0||e>=o.length)continue;const l=e+1;i.push(`${l}${\" \".repeat(Math.max(3-String(l).length,0))}|  ${o[e]}`);const a=o[e].length,p=r[e]&&r[e].length||0;if(e===c){const e=t-(s-(a+p)),o=Math.max(1,n>s?a-e:n-t);i.push(\"   |  \"+\" \".repeat(e)+\"^\".repeat(o))}else if(e>c){if(n>s){const e=Math.max(Math.min(n-s,a),1);i.push(\"   |  \"+\"^\".repeat(e))}s+=a+p}}break}return i.join(\"\\n\")}const n=/;(?![^(]*\\))/g,o=/:([^]+)/,r=/\\/\\*.*?\\*\\//gs;const s=e(\"html,body,base,head,link,meta,style,title,address,article,aside,footer,header,hgroup,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,summary,template,blockquote,iframe,tfoot\"),i=e(\"svg,animate,animateMotion,animateTransform,circle,clipPath,color-profile,defs,desc,discard,ellipse,feBlend,feColorMatrix,feComponentTransfer,feComposite,feConvolveMatrix,feDiffuseLighting,feDisplacementMap,feDistantLight,feDropShadow,feFlood,feFuncA,feFuncB,feFuncG,feFuncR,feGaussianBlur,feImage,feMerge,feMergeNode,feMorphology,feOffset,fePointLight,feSpecularLighting,feSpotLight,feTile,feTurbulence,filter,foreignObject,g,hatch,hatchpath,image,line,linearGradient,marker,mask,mesh,meshgradient,meshpatch,meshrow,metadata,mpath,path,pattern,polygon,polyline,radialGradient,rect,set,solidcolor,stop,switch,symbol,text,textPath,title,tspan,unknown,use,view\"),c=e(\"area,base,br,col,embed,hr,img,input,link,meta,param,source,track,wbr\"),l={},a=()=>{},p=()=>!1,u=/^on[^a-z]/,f=e=>u.test(e),d=Object.assign,h=Array.isArray,m=e=>\"string\"==typeof e,g=e=>\"symbol\"==typeof e,y=e=>null!==e&&\"object\"==typeof e,v=e(\",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted\"),b=e(\"bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo\"),S=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},x=/-(\\w)/g,k=S((e=>e.replace(x,((e,t)=>t?t.toUpperCase():\"\")))),N=/\\B([A-Z])/g,_=S((e=>e.replace(N,\"-$1\").toLowerCase())),T=S((e=>e.charAt(0).toUpperCase()+e.slice(1))),E=S((e=>e?`on${T(e)}`:\"\"));function w(e){throw e}function O(e){}function $(e,t,n,o){const r=new SyntaxError(String(e));return r.code=e,r.loc=t,r}const C=Symbol(\"\"),M=Symbol(\"\"),I=Symbol(\"\"),P=Symbol(\"\"),R=Symbol(\"\"),V=Symbol(\"\"),L=Symbol(\"\"),A=Symbol(\"\"),B=Symbol(\"\"),j=Symbol(\"\"),F=Symbol(\"\"),D=Symbol(\"\"),H=Symbol(\"\"),W=Symbol(\"\"),U=Symbol(\"\"),J=Symbol(\"\"),z=Symbol(\"\"),G=Symbol(\"\"),K=Symbol(\"\"),q=Symbol(\"\"),Z=Symbol(\"\"),Y=Symbol(\"\"),Q=Symbol(\"\"),X=Symbol(\"\"),ee=Symbol(\"\"),te=Symbol(\"\"),ne=Symbol(\"\"),oe=Symbol(\"\"),re=Symbol(\"\"),se=Symbol(\"\"),ie=Symbol(\"\"),ce=Symbol(\"\"),le=Symbol(\"\"),ae=Symbol(\"\"),pe=Symbol(\"\"),ue=Symbol(\"\"),fe=Symbol(\"\"),de=Symbol(\"\"),he=Symbol(\"\"),me={[C]:\"Fragment\",[M]:\"Teleport\",[I]:\"Suspense\",[P]:\"KeepAlive\",[R]:\"BaseTransition\",[V]:\"openBlock\",[L]:\"createBlock\",[A]:\"createElementBlock\",[B]:\"createVNode\",[j]:\"createElementVNode\",[F]:\"createCommentVNode\",[D]:\"createTextVNode\",[H]:\"createStaticVNode\",[W]:\"resolveComponent\",[U]:\"resolveDynamicComponent\",[J]:\"resolveDirective\",[z]:\"resolveFilter\",[G]:\"withDirectives\",[K]:\"renderList\",[q]:\"renderSlot\",[Z]:\"createSlots\",[Y]:\"toDisplayString\",[Q]:\"mergeProps\",[X]:\"normalizeClass\",[ee]:\"normalizeStyle\",[te]:\"normalizeProps\",[ne]:\"guardReactiveProps\",[oe]:\"toHandlers\",[re]:\"camelize\",[se]:\"capitalize\",[ie]:\"toHandlerKey\",[ce]:\"setBlockTracking\",[le]:\"pushScopeId\",[ae]:\"popScopeId\",[pe]:\"withCtx\",[ue]:\"unref\",[fe]:\"isRef\",[de]:\"withMemo\",[he]:\"isMemoSame\"};function ge(e){Object.getOwnPropertySymbols(e).forEach((t=>{me[t]=e[t]}))}const ye={source:\"\",start:{line:1,column:1,offset:0},end:{line:1,column:1,offset:0}};function ve(e,t=ye){return{type:0,children:e,helpers:new Set,components:[],directives:[],hoists:[],imports:[],cached:0,temps:0,codegenNode:void 0,loc:t}}function be(e,t,n,o,r,s,i,c=!1,l=!1,a=!1,p=ye){return e&&(c?(e.helper(V),e.helper(it(e.inSSR,a))):e.helper(st(e.inSSR,a)),i&&e.helper(G)),{type:13,tag:t,props:n,children:o,patchFlag:r,dynamicProps:s,directives:i,isBlock:c,disableTracking:l,isComponent:a,loc:p}}function Se(e,t=ye){return{type:17,loc:t,elements:e}}function xe(e,t=ye){return{type:15,loc:t,properties:e}}function ke(e,t){return{type:16,loc:ye,key:m(e)?Ne(e,!0):e,value:t}}function Ne(e,t=!1,n=ye,o=0){return{type:4,loc:n,content:e,isStatic:t,constType:t?3:o}}function _e(e,t){return{type:5,loc:t,content:m(e)?Ne(e,!1,t):e}}function Te(e,t=ye){return{type:8,loc:t,children:e}}function Ee(e,t=[],n=ye){return{type:14,loc:n,callee:e,arguments:t}}function we(e,t,n=!1,o=!1,r=ye){return{type:18,params:e,returns:t,newline:n,isSlot:o,loc:r}}function Oe(e,t,n,o=!0){return{type:19,test:e,consequent:t,alternate:n,newline:o,loc:ye}}function $e(e,t,n=!1){return{type:20,index:e,value:t,isVNode:n,loc:ye}}function Ce(e){return{type:21,body:e,loc:ye}}function Me(e){return{type:22,elements:e,loc:ye}}function Ie(e,t,n){return{type:23,test:e,consequent:t,alternate:n,loc:ye}}function Pe(e,t){return{type:24,left:e,right:t,loc:ye}}function Re(e){return{type:25,expressions:e,loc:ye}}function Ve(e){return{type:26,returns:e,loc:ye}}const Le=e=>4===e.type&&e.isStatic,Ae=(e,t)=>e===t||e===_(t);function Be(e){return Ae(e,\"Teleport\")?M:Ae(e,\"Suspense\")?I:Ae(e,\"KeepAlive\")?P:Ae(e,\"BaseTransition\")?R:void 0}const je=/^\\d|[^\\$\\w]/,Fe=e=>!je.test(e),De=/[A-Za-z_$\\xA0-\\uFFFF]/,He=/[\\.\\?\\w$\\xA0-\\uFFFF]/,We=/\\s+[.[]\\s*|\\s*[.[]\\s+/g,Ue=e=>{e=e.trim().replace(We,(e=>e.trim()));let t=0,n=[],o=0,r=0,s=null;for(let i=0;i<e.length;i++){const c=e.charAt(i);switch(t){case 0:if(\"[\"===c)n.push(t),t=1,o++;else if(\"(\"===c)n.push(t),t=2,r++;else if(!(0===i?De:He).test(c))return!1;break;case 1:\"'\"===c||'\"'===c||\"`\"===c?(n.push(t),t=3,s=c):\"[\"===c?o++:\"]\"===c&&(--o||(t=n.pop()));break;case 2:if(\"'\"===c||'\"'===c||\"`\"===c)n.push(t),t=3,s=c;else if(\"(\"===c)r++;else if(\")\"===c){if(i===e.length-1)return!1;--r||(t=n.pop())}break;case 3:c===s&&(t=n.pop(),s=null)}}return!o&&!r},Je=a,ze=Ue;function Ge(e,t,n){const o={source:e.source.slice(t,t+n),start:Ke(e.start,e.source,t),end:e.end};return null!=n&&(o.end=Ke(e.start,e.source,t+n)),o}function Ke(e,t,n=t.length){return qe(d({},e),t,n)}function qe(e,t,n=t.length){let o=0,r=-1;for(let s=0;s<n;s++)10===t.charCodeAt(s)&&(o++,r=s);return e.offset+=n,e.line+=o,e.column=-1===r?e.column+n:n-r,e}function Ze(e,t){if(!e)throw new Error(t||\"unexpected compiler condition\")}function Ye(e,t,n=!1){for(let o=0;o<e.props.length;o++){const r=e.props[o];if(7===r.type&&(n||r.exp)&&(m(t)?r.name===t:t.test(r.name)))return r}}function Qe(e,t,n=!1,o=!1){for(let r=0;r<e.props.length;r++){const s=e.props[r];if(6===s.type){if(n)continue;if(s.name===t&&(s.value||o))return s}else if(\"bind\"===s.name&&(s.exp||o)&&Xe(s.arg,t))return s}}function Xe(e,t){return!(!e||!Le(e)||e.content!==t)}function et(e){return e.props.some((e=>!(7!==e.type||\"bind\"!==e.name||e.arg&&4===e.arg.type&&e.arg.isStatic)))}function tt(e){return 5===e.type||2===e.type}function nt(e){return 7===e.type&&\"slot\"===e.name}function ot(e){return 1===e.type&&3===e.tagType}function rt(e){return 1===e.type&&2===e.tagType}function st(e,t){return e||t?B:j}function it(e,t){return e||t?L:A}const ct=new Set([te,ne]);function lt(e,t=[]){if(e&&!m(e)&&14===e.type){const n=e.callee;if(!m(n)&&ct.has(n))return lt(e.arguments[0],t.concat(e))}return[e,t]}function at(e,t,n){let o,r,s=13===e.type?e.props:e.arguments[2],i=[];if(s&&!m(s)&&14===s.type){const e=lt(s);s=e[0],i=e[1],r=i[i.length-1]}if(null==s||m(s))o=xe([t]);else if(14===s.type){const e=s.arguments[0];m(e)||15!==e.type?s.callee===oe?o=Ee(n.helper(Q),[xe([t]),s]):s.arguments.unshift(xe([t])):pt(t,e)||e.properties.unshift(t),!o&&(o=s)}else 15===s.type?(pt(t,s)||s.properties.unshift(t),o=s):(o=Ee(n.helper(Q),[xe([t]),s]),r&&r.callee===ne&&(r=i[i.length-2]));13===e.type?r?r.arguments[0]=o:e.props=o:r?r.arguments[0]=o:e.arguments[2]=o}function pt(e,t){let n=!1;if(4===e.key.type){const o=e.key.content;n=t.properties.some((e=>4===e.key.type&&e.key.content===o))}return n}function ut(e,t){return`_${t}_${e.replace(/[^\\w]/g,((t,n)=>\"-\"===t?\"_\":e.charCodeAt(n).toString()))}`}function ft(e,t){if(!e||0===Object.keys(t).length)return!1;switch(e.type){case 1:for(let n=0;n<e.props.length;n++){const o=e.props[n];if(7===o.type&&(ft(o.arg,t)||ft(o.exp,t)))return!0}return e.children.some((e=>ft(e,t)));case 11:return!!ft(e.source,t)||e.children.some((e=>ft(e,t)));case 9:return e.branches.some((e=>ft(e,t)));case 10:return!!ft(e.condition,t)||e.children.some((e=>ft(e,t)));case 4:return!e.isStatic&&Fe(e.content)&&!!t[e.content];case 8:return e.children.some((e=>y(e)&&ft(e,t)));case 5:case 12:return ft(e.content,t);default:return!1}}function dt(e){return 14===e.type&&e.callee===de?e.arguments[1].returns:e}function ht(e,{helper:t,removeHelper:n,inSSR:o}){e.isBlock||(e.isBlock=!0,n(st(o,e.isComponent)),t(V),t(it(o,e.isComponent)))}const mt={COMPILER_IS_ON_ELEMENT:{message:'Platform-native elements with \"is\" prop will no longer be treated as components in Vue 3 unless the \"is\" value is explicitly prefixed with \"vue:\".',link:\"https://v3-migration.vuejs.org/breaking-changes/custom-elements-interop.html\"},COMPILER_V_BIND_SYNC:{message:e=>`.sync modifier for v-bind has been removed. Use v-model with argument instead. \\`v-bind:${e}.sync\\` should be changed to \\`v-model:${e}\\`.`,link:\"https://v3-migration.vuejs.org/breaking-changes/v-model.html\"},COMPILER_V_BIND_PROP:{message:\".prop modifier for v-bind has been removed and no longer necessary. Vue 3 will automatically set a binding as DOM property when appropriate.\"},COMPILER_V_BIND_OBJECT_ORDER:{message:'v-bind=\"obj\" usage is now order sensitive and behaves like JavaScript object spread: it will now overwrite an existing non-mergeable attribute that appears before v-bind in the case of conflict. To retain 2.x behavior, move v-bind to make it the first attribute. You can also suppress this warning if the usage is intended.',link:\"https://v3-migration.vuejs.org/breaking-changes/v-bind.html\"},COMPILER_V_ON_NATIVE:{message:\".native modifier for v-on has been removed as is no longer necessary.\",link:\"https://v3-migration.vuejs.org/breaking-changes/v-on-native-modifier-removed.html\"},COMPILER_V_IF_V_FOR_PRECEDENCE:{message:\"v-if / v-for precedence when used on the same element has changed in Vue 3: v-if now takes higher precedence and will no longer have access to v-for scope variables. It is best to avoid the ambiguity with <template> tags or use a computed property that filters v-for data source.\",link:\"https://v3-migration.vuejs.org/breaking-changes/v-if-v-for.html\"},COMPILER_NATIVE_TEMPLATE:{message:\"<template> with no special directives will render as a native template element instead of its inner content in Vue 3.\"},COMPILER_INLINE_TEMPLATE:{message:'\"inline-template\" has been removed in Vue 3.',link:\"https://v3-migration.vuejs.org/breaking-changes/inline-template-attribute.html\"},COMPILER_FILTER:{message:'filters have been removed in Vue 3. The \"|\" symbol will be treated as native JavaScript bitwise OR operator. Use method calls or computed properties instead.',link:\"https://v3-migration.vuejs.org/breaking-changes/filters.html\"}};function gt(e,t){const n=t.options?t.options.compatConfig:t.compatConfig,o=n&&n[e];return\"MODE\"===e?o||3:o}function yt(e,t){const n=gt(\"MODE\",t),o=gt(e,t);return 3===n?!0===o:!1!==o}function vt(e,t,n,...o){return yt(e,t)}function bt(e,t,n,...o){if(\"suppress-warning\"===gt(e,t))return;const{message:r,link:s}=mt[e],i=`(deprecation ${e}) ${\"function\"==typeof r?r(...o):r}${s?`\\n  Details: ${s}`:\"\"}`,c=new SyntaxError(i);c.code=e,n&&(c.loc=n),t.onWarn(c)}const St=/&(gt|lt|amp|apos|quot);/g,xt={gt:\">\",lt:\"<\",amp:\"&\",apos:\"'\",quot:'\"'},kt={delimiters:[\"{{\",\"}}\"],getNamespace:()=>0,getTextMode:()=>0,isVoidTag:p,isPreTag:p,isCustomElement:p,decodeEntities:e=>e.replace(St,((e,t)=>xt[t])),onError:w,onWarn:O,comments:!1};function Nt(e,t={}){const n=function(e,t){const n=d({},kt);let o;for(o in t)n[o]=void 0===t[o]?kt[o]:t[o];return{options:n,column:1,line:1,offset:0,originalSource:e,source:e,inPre:!1,inVPre:!1,onWarn:n.onWarn}}(e,t),o=At(n);return ve(_t(n,0,[]),Bt(n,o))}function _t(e,t,n){const o=jt(n),r=o?o.ns:0,s=[];for(;!Ut(e,t,n);){const i=e.source;let c;if(0===t||1===t)if(!e.inVPre&&Ft(i,e.options.delimiters[0]))c=Rt(e,t);else if(0===t&&\"<\"===i[0])if(1===i.length);else if(\"!\"===i[1])c=Ft(i,\"\\x3c!--\")?wt(e):Ft(i,\"<!DOCTYPE\")?Ot(e):Ft(i,\"<![CDATA[\")&&0!==r?Et(e,n):Ot(e);else if(\"/\"===i[1])if(2===i.length);else{if(\">\"===i[2]){Dt(e,3);continue}if(/[a-z]/i.test(i[2])){Mt(e,1,o);continue}c=Ot(e)}else/[a-z]/i.test(i[1])?(c=$t(e,n),yt(\"COMPILER_NATIVE_TEMPLATE\",e)&&c&&\"template\"===c.tag&&!c.props.some((e=>7===e.type&&Ct(e.name)))&&(c=c.children)):\"?\"===i[1]&&(c=Ot(e));if(c||(c=Vt(e,t)),h(c))for(let e=0;e<c.length;e++)Tt(s,c[e]);else Tt(s,c)}let i=!1;if(2!==t&&1!==t){const t=\"preserve\"!==e.options.whitespace;for(let n=0;n<s.length;n++){const o=s[n];if(2===o.type)if(e.inPre)o.content=o.content.replace(/\\r\\n/g,\"\\n\");else if(/[^\\t\\r\\n\\f ]/.test(o.content))t&&(o.content=o.content.replace(/[\\t\\r\\n\\f ]+/g,\" \"));else{const e=s[n-1],r=s[n+1];!e||!r||t&&(3===e.type&&3===r.type||3===e.type&&1===r.type||1===e.type&&3===r.type||1===e.type&&1===r.type&&/[\\r\\n]/.test(o.content))?(i=!0,s[n]=null):o.content=\" \"}else 3!==o.type||e.options.comments||(i=!0,s[n]=null)}if(e.inPre&&o&&e.options.isPreTag(o.tag)){const e=s[0];e&&2===e.type&&(e.content=e.content.replace(/^\\r?\\n/,\"\"))}}return i?s.filter(Boolean):s}function Tt(e,t){if(2===t.type){const n=jt(e);if(n&&2===n.type&&n.loc.end.offset===t.loc.start.offset)return n.content+=t.content,n.loc.end=t.loc.end,void(n.loc.source+=t.loc.source)}e.push(t)}function Et(e,t){Dt(e,9);const n=_t(e,3,t);return 0===e.source.length||Dt(e,3),n}function wt(e){const t=At(e);let n;const o=/--(\\!)?>/.exec(e.source);if(o){n=e.source.slice(4,o.index);const t=e.source.slice(0,o.index);let r=1,s=0;for(;-1!==(s=t.indexOf(\"\\x3c!--\",r));)Dt(e,s-r+1),r=s+1;Dt(e,o.index+o[0].length-r+1)}else n=e.source.slice(4),Dt(e,e.source.length);return{type:3,content:n,loc:Bt(e,t)}}function Ot(e){const t=At(e),n=\"?\"===e.source[1]?1:2;let o;const r=e.source.indexOf(\">\");return-1===r?(o=e.source.slice(n),Dt(e,e.source.length)):(o=e.source.slice(n,r),Dt(e,r+1)),{type:3,content:o,loc:Bt(e,t)}}function $t(e,t){const n=e.inPre,o=e.inVPre,r=jt(t),s=Mt(e,0,r),i=e.inPre&&!n,c=e.inVPre&&!o;if(s.isSelfClosing||e.options.isVoidTag(s.tag))return i&&(e.inPre=!1),c&&(e.inVPre=!1),s;t.push(s);const l=e.options.getTextMode(s,r),a=_t(e,l,t);t.pop();{const t=s.props.find((e=>6===e.type&&\"inline-template\"===e.name));if(t&&vt(\"COMPILER_INLINE_TEMPLATE\",e)){const n=Bt(e,s.loc.end);t.value={type:2,content:n.source,loc:n}}}if(s.children=a,Jt(e.source,s.tag))Mt(e,1,r);else if(0===e.source.length&&\"script\"===s.tag.toLowerCase()){const e=a[0];e&&Ft(e.loc.source,\"\\x3c!--\")}return s.loc=Bt(e,s.loc.start),i&&(e.inPre=!1),c&&(e.inVPre=!1),s}const Ct=e(\"if,else,else-if,for,slot\");function Mt(e,t,n){const o=At(e),r=/^<\\/?([a-z][^\\t\\r\\n\\f />]*)/i.exec(e.source),s=r[1],i=e.options.getNamespace(s,n);Dt(e,r[0].length),Ht(e);const c=At(e),l=e.source;e.options.isPreTag(s)&&(e.inPre=!0);let a=It(e,t);0===t&&!e.inVPre&&a.some((e=>7===e.type&&\"pre\"===e.name))&&(e.inVPre=!0,d(e,c),e.source=l,a=It(e,t).filter((e=>\"v-pre\"!==e.name)));let p=!1;if(0===e.source.length||(p=Ft(e.source,\"/>\"),Dt(e,p?2:1)),1===t)return;let u=0;return e.inVPre||(\"slot\"===s?u=2:\"template\"===s?a.some((e=>7===e.type&&Ct(e.name)))&&(u=3):function(e,t,n){const o=n.options;if(o.isCustomElement(e))return!1;if(\"component\"===e||/^[A-Z]/.test(e)||Be(e)||o.isBuiltInComponent&&o.isBuiltInComponent(e)||o.isNativeTag&&!o.isNativeTag(e))return!0;for(let r=0;r<t.length;r++){const e=t[r];if(6===e.type){if(\"is\"===e.name&&e.value){if(e.value.content.startsWith(\"vue:\"))return!0;if(vt(\"COMPILER_IS_ON_ELEMENT\",n))return!0}}else{if(\"is\"===e.name)return!0;if(\"bind\"===e.name&&Xe(e.arg,\"is\")&&vt(\"COMPILER_IS_ON_ELEMENT\",n))return!0}}}(s,a,e)&&(u=1)),{type:1,ns:i,tag:s,tagType:u,props:a,isSelfClosing:p,children:[],loc:Bt(e,o),codegenNode:void 0}}function It(e,t){const n=[],o=new Set;for(;e.source.length>0&&!Ft(e.source,\">\")&&!Ft(e.source,\"/>\");){if(Ft(e.source,\"/\")){Dt(e,1),Ht(e);continue}const r=Pt(e,o);6===r.type&&r.value&&\"class\"===r.name&&(r.value.content=r.value.content.replace(/\\s+/g,\" \").trim()),0===t&&n.push(r),/^[^\\t\\r\\n\\f />]/.test(e.source),Ht(e)}return n}function Pt(e,t){const n=At(e),o=/^[^\\t\\r\\n\\f />][^\\t\\r\\n\\f />=]*/.exec(e.source)[0];t.has(o),t.add(o);{const e=/[\"'<]/g;let t;for(;t=e.exec(o););}let r;Dt(e,o.length),/^[\\t\\r\\n\\f ]*=/.test(e.source)&&(Ht(e),Dt(e,1),Ht(e),r=function(e){const t=At(e);let n;const o=e.source[0],r='\"'===o||\"'\"===o;if(r){Dt(e,1);const t=e.source.indexOf(o);-1===t?n=Lt(e,e.source.length,4):(n=Lt(e,t,4),Dt(e,1))}else{const t=/^[^\\t\\r\\n\\f >]+/.exec(e.source);if(!t)return;const o=/[\"'<=`]/g;let r;for(;r=o.exec(t[0]););n=Lt(e,t[0].length,4)}return{content:n,isQuoted:r,loc:Bt(e,t)}}(e));const s=Bt(e,n);if(!e.inVPre&&/^(v-[A-Za-z0-9-]|:|\\.|@|#)/.test(o)){const t=/(?:^v-([a-z0-9-]+))?(?:(?::|^\\.|^@|^#)(\\[[^\\]]+\\]|[^\\.]+))?(.+)?$/i.exec(o);let i,c=Ft(o,\".\"),l=t[1]||(c||Ft(o,\":\")?\"bind\":Ft(o,\"@\")?\"on\":\"slot\");if(t[2]){const r=\"slot\"===l,s=o.lastIndexOf(t[2]),c=Bt(e,Wt(e,n,s),Wt(e,n,s+t[2].length+(r&&t[3]||\"\").length));let a=t[2],p=!0;a.startsWith(\"[\")?(p=!1,a=a.endsWith(\"]\")?a.slice(1,a.length-1):a.slice(1)):r&&(a+=t[3]||\"\"),i={type:4,content:a,isStatic:p,constType:p?3:0,loc:c}}if(r&&r.isQuoted){const e=r.loc;e.start.offset++,e.start.column++,e.end=Ke(e.start,r.content),e.source=e.source.slice(1,-1)}const a=t[3]?t[3].slice(1).split(\".\"):[];return c&&a.push(\"prop\"),\"bind\"===l&&i&&a.includes(\"sync\")&&vt(\"COMPILER_V_BIND_SYNC\",e,0)&&(l=\"model\",a.splice(a.indexOf(\"sync\"),1)),{type:7,name:l,exp:r&&{type:4,content:r.content,isStatic:!1,constType:0,loc:r.loc},arg:i,modifiers:a,loc:s}}return!e.inVPre&&Ft(o,\"v-\"),{type:6,name:o,value:r&&{type:2,content:r.content,loc:r.loc},loc:s}}function Rt(e,t){const[n,o]=e.options.delimiters,r=e.source.indexOf(o,n.length);if(-1===r)return;const s=At(e);Dt(e,n.length);const i=At(e),c=At(e),l=r-n.length,a=e.source.slice(0,l),p=Lt(e,l,t),u=p.trim(),f=p.indexOf(u);f>0&&qe(i,a,f);return qe(c,a,l-(p.length-u.length-f)),Dt(e,o.length),{type:5,content:{type:4,isStatic:!1,constType:0,content:u,loc:Bt(e,i,c)},loc:Bt(e,s)}}function Vt(e,t){const n=3===t?[\"]]>\"]:[\"<\",e.options.delimiters[0]];let o=e.source.length;for(let s=0;s<n.length;s++){const t=e.source.indexOf(n[s],1);-1!==t&&o>t&&(o=t)}const r=At(e);return{type:2,content:Lt(e,o,t),loc:Bt(e,r)}}function Lt(e,t,n){const o=e.source.slice(0,t);return Dt(e,t),2!==n&&3!==n&&o.includes(\"&\")?e.options.decodeEntities(o,4===n):o}function At(e){const{column:t,line:n,offset:o}=e;return{column:t,line:n,offset:o}}function Bt(e,t,n){return{start:t,end:n=n||At(e),source:e.originalSource.slice(t.offset,n.offset)}}function jt(e){return e[e.length-1]}function Ft(e,t){return e.startsWith(t)}function Dt(e,t){const{source:n}=e;qe(e,n,t),e.source=n.slice(t)}function Ht(e){const t=/^[\\t\\r\\n\\f ]+/.exec(e.source);t&&Dt(e,t[0].length)}function Wt(e,t,n){return Ke(t,e.originalSource.slice(t.offset,n),n)}function Ut(e,t,n){const o=e.source;switch(t){case 0:if(Ft(o,\"</\"))for(let e=n.length-1;e>=0;--e)if(Jt(o,n[e].tag))return!0;break;case 1:case 2:{const e=jt(n);if(e&&Jt(o,e.tag))return!0;break}case 3:if(Ft(o,\"]]>\"))return!0}return!o}function Jt(e,t){return Ft(e,\"</\")&&e.slice(2,2+t.length).toLowerCase()===t.toLowerCase()&&/[\\t\\r\\n\\f />]/.test(e[2+t.length]||\">\")}function zt(e,t){Kt(e,t,Gt(e,e.children[0]))}function Gt(e,t){const{children:n}=e;return 1===n.length&&1===t.type&&!rt(t)}function Kt(e,t,n=!1){const{children:o}=e,r=o.length;let s=0;for(let i=0;i<o.length;i++){const e=o[i];if(1===e.type&&0===e.tagType){const o=n?0:qt(e,t);if(o>0){if(o>=2){e.codegenNode.patchFlag=\"-1\",e.codegenNode=t.hoist(e.codegenNode),s++;continue}}else{const n=e.codegenNode;if(13===n.type){const o=en(n);if((!o||512===o||1===o)&&Qt(e,t)>=2){const o=Xt(e);o&&(n.props=t.hoist(o))}n.dynamicProps&&(n.dynamicProps=t.hoist(n.dynamicProps))}}}if(1===e.type){const n=1===e.tagType;n&&t.scopes.vSlot++,Kt(e,t),n&&t.scopes.vSlot--}else if(11===e.type)Kt(e,t,1===e.children.length);else if(9===e.type)for(let n=0;n<e.branches.length;n++)Kt(e.branches[n],t,1===e.branches[n].children.length)}s&&t.transformHoist&&t.transformHoist(o,t,e),s&&s===r&&1===e.type&&0===e.tagType&&e.codegenNode&&13===e.codegenNode.type&&h(e.codegenNode.children)&&(e.codegenNode.children=t.hoist(Se(e.codegenNode.children)))}function qt(e,t){const{constantCache:n}=t;switch(e.type){case 1:if(0!==e.tagType)return 0;const o=n.get(e);if(void 0!==o)return o;const r=e.codegenNode;if(13!==r.type)return 0;if(r.isBlock&&\"svg\"!==e.tag&&\"foreignObject\"!==e.tag)return 0;if(en(r))return n.set(e,0),0;{let o=3;const s=Qt(e,t);if(0===s)return n.set(e,0),0;s<o&&(o=s);for(let r=0;r<e.children.length;r++){const s=qt(e.children[r],t);if(0===s)return n.set(e,0),0;s<o&&(o=s)}if(o>1)for(let r=0;r<e.props.length;r++){const s=e.props[r];if(7===s.type&&\"bind\"===s.name&&s.exp){const r=qt(s.exp,t);if(0===r)return n.set(e,0),0;r<o&&(o=r)}}if(r.isBlock){for(let t=0;t<e.props.length;t++){if(7===e.props[t].type)return n.set(e,0),0}t.removeHelper(V),t.removeHelper(it(t.inSSR,r.isComponent)),r.isBlock=!1,t.helper(st(t.inSSR,r.isComponent))}return n.set(e,o),o}case 2:case 3:return 3;case 9:case 11:case 10:default:return 0;case 5:case 12:return qt(e.content,t);case 4:return e.constType;case 8:let s=3;for(let n=0;n<e.children.length;n++){const o=e.children[n];if(m(o)||g(o))continue;const r=qt(o,t);if(0===r)return 0;r<s&&(s=r)}return s}}const Zt=new Set([X,ee,te,ne]);function Yt(e,t){if(14===e.type&&!m(e.callee)&&Zt.has(e.callee)){const n=e.arguments[0];if(4===n.type)return qt(n,t);if(14===n.type)return Yt(n,t)}return 0}function Qt(e,t){let n=3;const o=Xt(e);if(o&&15===o.type){const{properties:e}=o;for(let o=0;o<e.length;o++){const{key:r,value:s}=e[o],i=qt(r,t);if(0===i)return i;let c;if(i<n&&(n=i),c=4===s.type?qt(s,t):14===s.type?Yt(s,t):0,0===c)return c;c<n&&(n=c)}}return n}function Xt(e){const t=e.codegenNode;if(13===t.type)return t.props}function en(e){const t=e.patchFlag;return t?parseInt(t,10):void 0}function tn(e,{filename:t=\"\",prefixIdentifiers:n=!1,hoistStatic:o=!1,cacheHandlers:r=!1,nodeTransforms:s=[],directiveTransforms:i={},transformHoist:c=null,isBuiltInComponent:p=a,isCustomElement:u=a,expressionPlugins:f=[],scopeId:d=null,slotted:h=!0,ssr:g=!1,inSSR:y=!1,ssrCssVars:v=\"\",bindingMetadata:b=l,inline:S=!1,isTS:x=!1,onError:N=w,onWarn:_=O,compatConfig:E}){const $=t.replace(/\\?.*$/,\"\").match(/([^/\\\\]+)\\.\\w+$/),C={selfName:$&&T(k($[1])),prefixIdentifiers:n,hoistStatic:o,cacheHandlers:r,nodeTransforms:s,directiveTransforms:i,transformHoist:c,isBuiltInComponent:p,isCustomElement:u,expressionPlugins:f,scopeId:d,slotted:h,ssr:g,inSSR:y,ssrCssVars:v,bindingMetadata:b,inline:S,isTS:x,onError:N,onWarn:_,compatConfig:E,root:e,helpers:new Map,components:new Set,directives:new Set,hoists:[],imports:[],constantCache:new Map,temps:0,cached:0,identifiers:Object.create(null),scopes:{vFor:0,vSlot:0,vPre:0,vOnce:0},parent:null,currentNode:e,childIndex:0,inVOnce:!1,helper(e){const t=C.helpers.get(e)||0;return C.helpers.set(e,t+1),e},removeHelper(e){const t=C.helpers.get(e);if(t){const n=t-1;n?C.helpers.set(e,n):C.helpers.delete(e)}},helperString:e=>`_${me[C.helper(e)]}`,replaceNode(e){C.parent.children[C.childIndex]=C.currentNode=e},removeNode(e){const t=e?C.parent.children.indexOf(e):C.currentNode?C.childIndex:-1;e&&e!==C.currentNode?C.childIndex>t&&(C.childIndex--,C.onNodeRemoved()):(C.currentNode=null,C.onNodeRemoved()),C.parent.children.splice(t,1)},onNodeRemoved:()=>{},addIdentifiers(e){},removeIdentifiers(e){},hoist(e){m(e)&&(e=Ne(e)),C.hoists.push(e);const t=Ne(`_hoisted_${C.hoists.length}`,!1,e.loc,2);return t.hoisted=e,t},cache:(e,t=!1)=>$e(C.cached++,e,t)};return C.filters=new Set,C}function nn(e,t){const n=tn(e,t);on(e,n),t.hoistStatic&&zt(e,n),t.ssr||function(e,t){const{helper:n}=t,{children:o}=e;if(1===o.length){const n=o[0];if(Gt(e,n)&&n.codegenNode){const o=n.codegenNode;13===o.type&&ht(o,t),e.codegenNode=o}else e.codegenNode=n}else if(o.length>1){let o=64;e.codegenNode=be(t,n(C),void 0,e.children,o+\"\",void 0,void 0,!0,void 0,!1)}}(e,n),e.helpers=new Set([...n.helpers.keys()]),e.components=[...n.components],e.directives=[...n.directives],e.imports=n.imports,e.hoists=n.hoists,e.temps=n.temps,e.cached=n.cached,e.filters=[...n.filters]}function on(e,t){t.currentNode=e;const{nodeTransforms:n}=t,o=[];for(let s=0;s<n.length;s++){const r=n[s](e,t);if(r&&(h(r)?o.push(...r):o.push(r)),!t.currentNode)return;e=t.currentNode}switch(e.type){case 3:t.ssr||t.helper(F);break;case 5:t.ssr||t.helper(Y);break;case 9:for(let n=0;n<e.branches.length;n++)on(e.branches[n],t);break;case 10:case 11:case 1:case 0:!function(e,t){let n=0;const o=()=>{n--};for(;n<e.children.length;n++){const r=e.children[n];m(r)||(t.parent=e,t.childIndex=n,t.onNodeRemoved=o,on(r,t))}}(e,t)}t.currentNode=e;let r=o.length;for(;r--;)o[r]()}function rn(e,t){const n=m(e)?t=>t===e:t=>e.test(t);return(e,o)=>{if(1===e.type){const{props:r}=e;if(3===e.tagType&&r.some(nt))return;const s=[];for(let i=0;i<r.length;i++){const c=r[i];if(7===c.type&&n(c.name)){r.splice(i,1),i--;const n=t(e,c,o);n&&s.push(n)}}return s}}}const sn=e=>`${me[e]}: _${me[e]}`;function cn(e,{mode:t=\"function\",prefixIdentifiers:n=\"module\"===t,sourceMap:o=!1,filename:r=\"template.vue.html\",scopeId:s=null,optimizeImports:i=!1,runtimeGlobalName:c=\"Vue\",runtimeModuleName:l=\"vue\",ssrRuntimeModuleName:a=\"vue/server-renderer\",ssr:p=!1,isTS:u=!1,inSSR:f=!1}){const d={mode:t,prefixIdentifiers:n,sourceMap:o,filename:r,scopeId:s,optimizeImports:i,runtimeGlobalName:c,runtimeModuleName:l,ssrRuntimeModuleName:a,ssr:p,isTS:u,inSSR:f,source:e.loc.source,code:\"\",column:1,line:1,offset:0,indentLevel:0,pure:!1,map:void 0,helper:e=>`_${me[e]}`,push(e,t){d.code+=e},indent(){h(++d.indentLevel)},deindent(e=!1){e?--d.indentLevel:h(--d.indentLevel)},newline(){h(d.indentLevel)}};function h(e){d.push(\"\\n\"+\"  \".repeat(e))}return d}function ln(e,t={}){const n=cn(e,t);t.onContextCreated&&t.onContextCreated(n);const{mode:o,push:r,prefixIdentifiers:s,indent:i,deindent:c,newline:l,ssr:a}=n,p=Array.from(e.helpers),u=p.length>0,f=!s&&\"module\"!==o,d=n;!function(e,t){const{push:n,newline:o,runtimeGlobalName:r}=t,s=r,i=Array.from(e.helpers);if(i.length>0&&(n(`const _Vue = ${s}\\n`),e.hoists.length)){n(`const { ${[B,j,F,D,H].filter((e=>i.includes(e))).map(sn).join(\", \")} } = _Vue\\n`)}(function(e,t){if(!e.length)return;t.pure=!0;const{push:n,newline:o}=t;o();for(let r=0;r<e.length;r++){const s=e[r];s&&(n(`const _hoisted_${r+1} = `),fn(s,t),o())}t.pure=!1})(e.hoists,t),o(),n(\"return \")}(e,d);if(r(`function ${a?\"ssrRender\":\"render\"}(${(a?[\"_ctx\",\"_push\",\"_parent\",\"_attrs\"]:[\"_ctx\",\"_cache\"]).join(\", \")}) {`),i(),f&&(r(\"with (_ctx) {\"),i(),u&&(r(`const { ${p.map(sn).join(\", \")} } = _Vue`),r(\"\\n\"),l())),e.components.length&&(an(e.components,\"component\",n),(e.directives.length||e.temps>0)&&l()),e.directives.length&&(an(e.directives,\"directive\",n),e.temps>0&&l()),e.filters&&e.filters.length&&(l(),an(e.filters,\"filter\",n),l()),e.temps>0){r(\"let \");for(let t=0;t<e.temps;t++)r(`${t>0?\", \":\"\"}_temp${t}`)}return(e.components.length||e.directives.length||e.temps)&&(r(\"\\n\"),l()),a||r(\"return \"),e.codegenNode?fn(e.codegenNode,n):r(\"null\"),f&&(c(),r(\"}\")),c(),r(\"}\"),{ast:e,code:n.code,preamble:\"\",map:n.map?n.map.toJSON():void 0}}function an(e,t,{helper:n,push:o,newline:r,isTS:s}){const i=n(\"filter\"===t?z:\"component\"===t?W:J);for(let c=0;c<e.length;c++){let n=e[c];const l=n.endsWith(\"__self\");l&&(n=n.slice(0,-6)),o(`const ${ut(n,t)} = ${i}(${JSON.stringify(n)}${l?\", true\":\"\"})${s?\"!\":\"\"}`),c<e.length-1&&r()}}function pn(e,t){const n=e.length>3||!1;t.push(\"[\"),n&&t.indent(),un(e,t,n),n&&t.deindent(),t.push(\"]\")}function un(e,t,n=!1,o=!0){const{push:r,newline:s}=t;for(let i=0;i<e.length;i++){const c=e[i];m(c)?r(c):h(c)?pn(c,t):fn(c,t),i<e.length-1&&(n?(o&&r(\",\"),s()):o&&r(\", \"))}}function fn(e,t){if(m(e))t.push(e);else if(g(e))t.push(t.helper(e));else switch(e.type){case 1:case 9:case 11:case 12:fn(e.codegenNode,t);break;case 2:!function(e,t){t.push(JSON.stringify(e.content),e)}(e,t);break;case 4:dn(e,t);break;case 5:!function(e,t){const{push:n,helper:o,pure:r}=t;r&&n(\"/*#__PURE__*/\");n(`${o(Y)}(`),fn(e.content,t),n(\")\")}(e,t);break;case 8:hn(e,t);break;case 3:!function(e,t){const{push:n,helper:o,pure:r}=t;r&&n(\"/*#__PURE__*/\");n(`${o(F)}(${JSON.stringify(e.content)})`,e)}(e,t);break;case 13:!function(e,t){const{push:n,helper:o,pure:r}=t,{tag:s,props:i,children:c,patchFlag:l,dynamicProps:a,directives:p,isBlock:u,disableTracking:f,isComponent:d}=e;p&&n(o(G)+\"(\");u&&n(`(${o(V)}(${f?\"true\":\"\"}), `);r&&n(\"/*#__PURE__*/\");const h=u?it(t.inSSR,d):st(t.inSSR,d);n(o(h)+\"(\",e),un(function(e){let t=e.length;for(;t--&&null==e[t];);return e.slice(0,t+1).map((e=>e||\"null\"))}([s,i,c,l,a]),t),n(\")\"),u&&n(\")\");p&&(n(\", \"),fn(p,t),n(\")\"))}(e,t);break;case 14:!function(e,t){const{push:n,helper:o,pure:r}=t,s=m(e.callee)?e.callee:o(e.callee);r&&n(\"/*#__PURE__*/\");n(s+\"(\",e),un(e.arguments,t),n(\")\")}(e,t);break;case 15:!function(e,t){const{push:n,indent:o,deindent:r,newline:s}=t,{properties:i}=e;if(!i.length)return void n(\"{}\",e);const c=i.length>1||!1;n(c?\"{\":\"{ \"),c&&o();for(let l=0;l<i.length;l++){const{key:e,value:o}=i[l];mn(e,t),n(\": \"),fn(o,t),l<i.length-1&&(n(\",\"),s())}c&&r(),n(c?\"}\":\" }\")}(e,t);break;case 17:!function(e,t){pn(e.elements,t)}(e,t);break;case 18:!function(e,t){const{push:n,indent:o,deindent:r}=t,{params:s,returns:i,body:c,newline:l,isSlot:a}=e;a&&n(`_${me[pe]}(`);n(\"(\",e),h(s)?un(s,t):s&&fn(s,t);n(\") => \"),(l||c)&&(n(\"{\"),o());i?(l&&n(\"return \"),h(i)?pn(i,t):fn(i,t)):c&&fn(c,t);(l||c)&&(r(),n(\"}\"));a&&(e.isNonScopedSlot&&n(\", undefined, true\"),n(\")\"))}(e,t);break;case 19:!function(e,t){const{test:n,consequent:o,alternate:r,newline:s}=e,{push:i,indent:c,deindent:l,newline:a}=t;if(4===n.type){const e=!Fe(n.content);e&&i(\"(\"),dn(n,t),e&&i(\")\")}else i(\"(\"),fn(n,t),i(\")\");s&&c(),t.indentLevel++,s||i(\" \"),i(\"? \"),fn(o,t),t.indentLevel--,s&&a(),s||i(\" \"),i(\": \");const p=19===r.type;p||t.indentLevel++;fn(r,t),p||t.indentLevel--;s&&l(!0)}(e,t);break;case 20:!function(e,t){const{push:n,helper:o,indent:r,deindent:s,newline:i}=t;n(`_cache[${e.index}] || (`),e.isVNode&&(r(),n(`${o(ce)}(-1),`),i());n(`_cache[${e.index}] = `),fn(e.value,t),e.isVNode&&(n(\",\"),i(),n(`${o(ce)}(1),`),i(),n(`_cache[${e.index}]`),s());n(\")\")}(e,t);break;case 21:un(e.body,t,!0,!1)}}function dn(e,t){const{content:n,isStatic:o}=e;t.push(o?JSON.stringify(n):n,e)}function hn(e,t){for(let n=0;n<e.children.length;n++){const o=e.children[n];m(o)?t.push(o):fn(o,t)}}function mn(e,t){const{push:n}=t;if(8===e.type)n(\"[\"),hn(e,t),n(\"]\");else if(e.isStatic){n(Fe(e.content)?e.content:JSON.stringify(e.content),e)}else n(`[${e.content}]`,e)}function gn(e,t,n=!1,o=[],r=Object.create(null)){}function yn(e,t,n){return!1}function vn(e,t){if(e&&(\"ObjectProperty\"===e.type||\"ArrayPattern\"===e.type)){let e=t.length;for(;e--;){const n=t[e];if(\"AssignmentExpression\"===n.type)return!0;if(\"ObjectProperty\"!==n.type&&!n.type.endsWith(\"Pattern\"))break}}return!1}function bn(e,t){for(const n of e.params)for(const e of xn(n))t(e)}function Sn(e,t){for(const n of e.body)if(\"VariableDeclaration\"===n.type){if(n.declare)continue;for(const e of n.declarations)for(const n of xn(e.id))t(n)}else if(\"FunctionDeclaration\"===n.type||\"ClassDeclaration\"===n.type){if(n.declare||!n.id)continue;t(n.id)}}function xn(e,t=[]){switch(e.type){case\"Identifier\":t.push(e);break;case\"MemberExpression\":let n=e;for(;\"MemberExpression\"===n.type;)n=n.object;t.push(n);break;case\"ObjectPattern\":for(const o of e.properties)xn(\"RestElement\"===o.type?o.argument:o.value,t);break;case\"ArrayPattern\":e.elements.forEach((e=>{e&&xn(e,t)}));break;case\"RestElement\":xn(e.argument,t);break;case\"AssignmentPattern\":xn(e.left,t)}return t}const kn=e=>/Function(?:Expression|Declaration)$|Method$/.test(e.type),Nn=e=>e&&(\"ObjectProperty\"===e.type||\"ObjectMethod\"===e.type)&&!e.computed,_n=(e,t)=>Nn(t)&&t.key===e,Tn=(e,t)=>{if(5===e.type)e.content=En(e.content,t);else if(1===e.type)for(let n=0;n<e.props.length;n++){const o=e.props[n];if(7===o.type&&\"for\"!==o.name){const e=o.exp,n=o.arg;!e||4!==e.type||\"on\"===o.name&&n||(o.exp=En(e,t,\"slot\"===o.name)),n&&4===n.type&&!n.isStatic&&(o.arg=En(n,t))}}};function En(e,t,n=!1,o=!1,r=Object.create(t.identifiers)){return e}function wn(e){return m(e)?e:4===e.type?e.content:e.children.map(wn).join(\"\")}const On=rn(/^(if|else|else-if)$/,((e,t,n)=>$n(e,t,n,((e,t,o)=>{const r=n.parent.children;let s=r.indexOf(e),i=0;for(;s-- >=0;){const e=r[s];e&&9===e.type&&(i+=e.branches.length)}return()=>{if(o)e.codegenNode=Mn(t,i,n);else{const o=function(e){for(;;)if(19===e.type){if(19!==e.alternate.type)return e;e=e.alternate}else 20===e.type&&(e=e.value)}(e.codegenNode);o.alternate=Mn(t,i+e.branches.length-1,n)}}}))));function $n(e,t,n,o){if(!(\"else\"===t.name||t.exp&&t.exp.content.trim())){t.exp=Ne(\"true\",!1,t.exp?t.exp.loc:e.loc)}if(\"if\"===t.name){const r=Cn(e,t),s={type:9,loc:e.loc,branches:[r]};if(n.replaceNode(s),o)return o(s,r,!0)}else{const r=n.parent.children;let s=r.indexOf(e);for(;s-- >=-1;){const i=r[s];if(i&&3===i.type)n.removeNode(i);else{if(!i||2!==i.type||i.content.trim().length){if(i&&9===i.type){n.removeNode();const r=Cn(e,t);i.branches.push(r);const s=o&&o(i,r,!1);on(r,n),s&&s(),n.currentNode=null}break}n.removeNode(i)}}}}function Cn(e,t){const n=3===e.tagType;return{type:10,loc:e.loc,condition:\"else\"===t.name?void 0:t.exp,children:n&&!Ye(e,\"for\")?e.children:[e],userKey:Qe(e,\"key\"),isTemplateIf:n}}function Mn(e,t,n){return e.condition?Oe(e.condition,In(e,t,n),Ee(n.helper(F),['\"\"',\"true\"])):In(e,t,n)}function In(e,t,n){const{helper:o}=n,r=ke(\"key\",Ne(`${t}`,!1,ye,2)),{children:s}=e,i=s[0];if(1!==s.length||1!==i.type){if(1===s.length&&11===i.type){const e=i.codegenNode;return at(e,r,n),e}{let t=64;return be(n,o(C),xe([r]),s,t+\"\",void 0,void 0,!0,!1,!1,e.loc)}}{const e=i.codegenNode,t=dt(e);return 13===t.type&&ht(t,n),at(t,r,n),e}}const Pn=rn(\"for\",((e,t,n)=>{const{helper:o,removeHelper:r}=n;return Rn(e,t,n,(t=>{const s=Ee(o(K),[t.source]),i=ot(e),c=Ye(e,\"memo\"),l=Qe(e,\"key\"),a=l&&(6===l.type?Ne(l.value.content,!0):l.exp),p=l?ke(\"key\",a):null,u=4===t.source.type&&t.source.constType>0,f=u?64:l?128:256;return t.codegenNode=be(n,o(C),void 0,s,f+\"\",void 0,void 0,!0,!u,!1,e.loc),()=>{let l;const{children:f}=t,d=1!==f.length||1!==f[0].type,h=rt(e)?e:i&&1===e.children.length&&rt(e.children[0])?e.children[0]:null;if(h?(l=h.codegenNode,i&&p&&at(l,p,n)):d?l=be(n,o(C),p?xe([p]):void 0,e.children,\"64\",void 0,void 0,!0,void 0,!1):(l=f[0].codegenNode,i&&p&&at(l,p,n),l.isBlock!==!u&&(l.isBlock?(r(V),r(it(n.inSSR,l.isComponent))):r(st(n.inSSR,l.isComponent))),l.isBlock=!u,l.isBlock?(o(V),o(it(n.inSSR,l.isComponent))):o(st(n.inSSR,l.isComponent))),c){const e=we(Fn(t.parseResult,[Ne(\"_cached\")]));e.body=Ce([Te([\"const _memo = (\",c.exp,\")\"]),Te([\"if (_cached\",...a?[\" && _cached.key === \",a]:[],` && ${n.helperString(he)}(_cached, _memo)) return _cached`]),Te([\"const _item = \",l]),Ne(\"_item.memo = _memo\"),Ne(\"return _item\")]),s.arguments.push(e,Ne(\"_cache\"),Ne(String(n.cached++)))}else s.arguments.push(we(Fn(t.parseResult),l,!0))}}))}));function Rn(e,t,n,o){if(!t.exp)return;const r=Bn(t.exp);if(!r)return;const{scopes:s}=n,{source:i,value:c,key:l,index:a}=r,p={type:11,loc:t.loc,source:i,valueAlias:c,keyAlias:l,objectIndexAlias:a,parseResult:r,children:ot(e)?e.children:[e]};n.replaceNode(p),s.vFor++;const u=o&&o(p);return()=>{s.vFor--,u&&u()}}const Vn=/([\\s\\S]*?)\\s+(?:in|of)\\s+([\\s\\S]*)/,Ln=/,([^,\\}\\]]*)(?:,([^,\\}\\]]*))?$/,An=/^\\(|\\)$/g;function Bn(e,t){const n=e.loc,o=e.content,r=o.match(Vn);if(!r)return;const[,s,i]=r,c={source:jn(n,i.trim(),o.indexOf(i,s.length)),value:void 0,key:void 0,index:void 0};let l=s.trim().replace(An,\"\").trim();const a=s.indexOf(l),p=l.match(Ln);if(p){l=l.replace(Ln,\"\").trim();const e=p[1].trim();let t;if(e&&(t=o.indexOf(e,a+l.length),c.key=jn(n,e,t)),p[2]){const r=p[2].trim();r&&(c.index=jn(n,r,o.indexOf(r,c.key?t+e.length:a+l.length)))}}return l&&(c.value=jn(n,l,a)),c}function jn(e,t,n){return Ne(t,!1,Ge(e,n,t.length))}function Fn({value:e,key:t,index:n},o=[]){return function(e){let t=e.length;for(;t--&&!e[t];);return e.slice(0,t+1).map(((e,t)=>e||Ne(\"_\".repeat(t+1),!1)))}([e,t,n,...o])}const Dn=Ne(\"undefined\",!1),Hn=(e,t)=>{if(1===e.type&&(1===e.tagType||3===e.tagType)){const n=Ye(e,\"slot\");if(n)return t.scopes.vSlot++,()=>{t.scopes.vSlot--}}},Wn=(e,t)=>{let n;if(ot(e)&&e.props.some(nt)&&(n=Ye(e,\"for\"))){const e=n.parseResult=Bn(n.exp);if(e){const{value:n,key:o,index:r}=e,{addIdentifiers:s,removeIdentifiers:i}=t;return n&&s(n),o&&s(o),r&&s(r),()=>{n&&i(n),o&&i(o),r&&i(r)}}}},Un=(e,t,n)=>we(e,t,!1,!0,t.length?t[0].loc:n);function Jn(e,t,n=Un){t.helper(pe);const{children:o,loc:r}=e,s=[],i=[];let c=t.scopes.vSlot>0||t.scopes.vFor>0;const l=Ye(e,\"slot\",!0);if(l){const{arg:e,exp:t}=l;e&&!Le(e)&&(c=!0),s.push(ke(e||Ne(\"default\",!0),n(t,o,r)))}let a=!1,p=!1;const u=[],f=new Set;let d=0;for(let g=0;g<o.length;g++){const e=o[g];let r;if(!ot(e)||!(r=Ye(e,\"slot\",!0))){3!==e.type&&u.push(e);continue}if(l)break;a=!0;const{children:h,loc:m}=e,{arg:y=Ne(\"default\",!0),exp:v}=r;let b;Le(y)?b=y?y.content:\"default\":c=!0;const S=n(v,h,m);let x,k,N;if(x=Ye(e,\"if\"))c=!0,i.push(Oe(x.exp,zn(y,S,d++),Dn));else if(k=Ye(e,/^else(-if)?$/,!0)){let e,t=g;for(;t--&&(e=o[t],3===e.type););if(e&&ot(e)&&Ye(e,\"if\")){o.splice(g,1),g--;let e=i[i.length-1];for(;19===e.alternate.type;)e=e.alternate;e.alternate=k.exp?Oe(k.exp,zn(y,S,d++),Dn):zn(y,S,d++)}}else if(N=Ye(e,\"for\")){c=!0;const e=N.parseResult||Bn(N.exp);e&&i.push(Ee(t.helper(K),[e.source,we(Fn(e),zn(y,S),!0)]))}else{if(b){if(f.has(b))continue;f.add(b),\"default\"===b&&(p=!0)}s.push(ke(y,S))}}if(!l){const e=(e,o)=>{const s=n(e,o,r);return t.compatConfig&&(s.isNonScopedSlot=!0),ke(\"default\",s)};a?u.length&&u.some((e=>Kn(e)))&&(p||s.push(e(void 0,u))):s.push(e(void 0,o))}const h=c?2:Gn(e.children)?3:1;let m=xe(s.concat(ke(\"_\",Ne(h+\"\",!1))),r);return i.length&&(m=Ee(t.helper(Z),[m,Se(i)])),{slots:m,hasDynamicSlots:c}}function zn(e,t,n){const o=[ke(\"name\",e),ke(\"fn\",t)];return null!=n&&o.push(ke(\"key\",Ne(String(n),!0))),xe(o)}function Gn(e){for(let t=0;t<e.length;t++){const n=e[t];switch(n.type){case 1:if(2===n.tagType||Gn(n.children))return!0;break;case 9:if(Gn(n.branches))return!0;break;case 10:case 11:if(Gn(n.children))return!0}}return!1}function Kn(e){return 2!==e.type&&12!==e.type||(2===e.type?!!e.content.trim():Kn(e.content))}const qn=new WeakMap,Zn=(e,t)=>function(){if(1!==(e=t.currentNode).type||0!==e.tagType&&1!==e.tagType)return;const{tag:n,props:o}=e,r=1===e.tagType;let s=r?Yn(e,t):`\"${n}\"`;const i=y(s)&&s.callee===U;let c,l,a,p,u,f,d=0,h=i||s===M||s===I||!r&&(\"svg\"===n||\"foreignObject\"===n);if(o.length>0){const n=Qn(e,t,void 0,r,i);c=n.props,d=n.patchFlag,u=n.dynamicPropNames;const o=n.directives;f=o&&o.length?Se(o.map((e=>to(e,t)))):void 0,n.shouldUseBlock&&(h=!0)}if(e.children.length>0){s===P&&(h=!0,d|=1024);if(r&&s!==M&&s!==P){const{slots:n,hasDynamicSlots:o}=Jn(e,t);l=n,o&&(d|=1024)}else if(1===e.children.length&&s!==M){const n=e.children[0],o=n.type,r=5===o||8===o;r&&0===qt(n,t)&&(d|=1),l=r||2===o?n:e.children}else l=e.children}0!==d&&(a=String(d),u&&u.length&&(p=function(e){let t=\"[\";for(let n=0,o=e.length;n<o;n++)t+=JSON.stringify(e[n]),n<o-1&&(t+=\", \");return t+\"]\"}(u))),e.codegenNode=be(t,s,c,l,a,p,f,!!h,!1,r,e.loc)};function Yn(e,t,n=!1){let{tag:o}=e;const r=no(o),s=Qe(e,\"is\");if(s)if(r||yt(\"COMPILER_IS_ON_ELEMENT\",t)){const e=6===s.type?s.value&&Ne(s.value.content,!0):s.exp;if(e)return Ee(t.helper(U),[e])}else 6===s.type&&s.value.content.startsWith(\"vue:\")&&(o=s.value.content.slice(4));const i=!r&&Ye(e,\"is\");if(i&&i.exp)return Ee(t.helper(U),[i.exp]);const c=Be(o)||t.isBuiltInComponent(o);return c?(n||t.helper(c),c):(t.helper(W),t.components.add(o),ut(o,\"component\"))}function Qn(e,t,n=e.props,o,r,s=!1){const{tag:i,loc:c,children:l}=e;let a=[];const p=[],u=[],d=l.length>0;let h=!1,m=0,y=!1,S=!1,x=!1,k=!1,N=!1,_=!1;const T=[],E=e=>{a.length&&(p.push(xe(Xn(a),c)),a=[]),e&&p.push(e)},w=({key:e,value:n})=>{if(Le(e)){const s=e.content,i=f(s);if(!i||o&&!r||\"onclick\"===s.toLowerCase()||\"onUpdate:modelValue\"===s||v(s)||(k=!0),i&&v(s)&&(_=!0),20===n.type||(4===n.type||8===n.type)&&qt(n,t)>0)return;\"ref\"===s?y=!0:\"class\"===s?S=!0:\"style\"===s?x=!0:\"key\"===s||T.includes(s)||T.push(s),!o||\"class\"!==s&&\"style\"!==s||T.includes(s)||T.push(s)}else N=!0};for(let f=0;f<n.length;f++){const r=n[f];if(6===r.type){const{loc:e,name:n,value:o}=r;let s=!0;if(\"ref\"===n&&(y=!0,t.scopes.vFor>0&&a.push(ke(Ne(\"ref_for\",!0),Ne(\"true\")))),\"is\"===n&&(no(i)||o&&o.content.startsWith(\"vue:\")||yt(\"COMPILER_IS_ON_ELEMENT\",t)))continue;a.push(ke(Ne(n,!0,Ge(e,0,n.length)),Ne(o?o.content:\"\",s,o?o.loc:e)))}else{const{name:n,arg:l,exp:f,loc:m}=r,y=\"bind\"===n,v=\"on\"===n;if(\"slot\"===n)continue;if(\"once\"===n||\"memo\"===n)continue;if(\"is\"===n||y&&Xe(l,\"is\")&&(no(i)||yt(\"COMPILER_IS_ON_ELEMENT\",t)))continue;if(v&&s)continue;if((y&&Xe(l,\"key\")||v&&d&&Xe(l,\"vue:before-update\"))&&(h=!0),y&&Xe(l,\"ref\")&&t.scopes.vFor>0&&a.push(ke(Ne(\"ref_for\",!0),Ne(\"true\"))),!l&&(y||v)){if(N=!0,f)if(y){if(E(),yt(\"COMPILER_V_BIND_OBJECT_ORDER\",t)){p.unshift(f);continue}p.push(f)}else E({type:14,loc:m,callee:t.helper(oe),arguments:o?[f]:[f,\"true\"]});continue}const S=t.directiveTransforms[n];if(S){const{props:n,needRuntime:o}=S(r,e,t);!s&&n.forEach(w),v&&l&&!Le(l)?E(xe(n,c)):a.push(...n),o&&(u.push(r),g(o)&&qn.set(r,o))}else b(n)||(u.push(r),d&&(h=!0))}}let O;if(p.length?(E(),O=p.length>1?Ee(t.helper(Q),p,c):p[0]):a.length&&(O=xe(Xn(a),c)),N?m|=16:(S&&!o&&(m|=2),x&&!o&&(m|=4),T.length&&(m|=8),k&&(m|=32)),h||0!==m&&32!==m||!(y||_||u.length>0)||(m|=512),!t.inSSR&&O)switch(O.type){case 15:let e=-1,n=-1,o=!1;for(let t=0;t<O.properties.length;t++){const r=O.properties[t].key;Le(r)?\"class\"===r.content?e=t:\"style\"===r.content&&(n=t):r.isHandlerKey||(o=!0)}const r=O.properties[e],s=O.properties[n];o?O=Ee(t.helper(te),[O]):(r&&!Le(r.value)&&(r.value=Ee(t.helper(X),[r.value])),s&&(x||4===s.value.type&&\"[\"===s.value.content.trim()[0]||17===s.value.type)&&(s.value=Ee(t.helper(ee),[s.value])));break;case 14:break;default:O=Ee(t.helper(te),[Ee(t.helper(ne),[O])])}return{props:O,directives:u,patchFlag:m,dynamicPropNames:T,shouldUseBlock:h}}function Xn(e){const t=new Map,n=[];for(let o=0;o<e.length;o++){const r=e[o];if(8===r.key.type||!r.key.isStatic){n.push(r);continue}const s=r.key.content,i=t.get(s);i?(\"style\"===s||\"class\"===s||f(s))&&eo(i,r):(t.set(s,r),n.push(r))}return n}function eo(e,t){17===e.value.type?e.value.elements.push(t.value):e.value=Se([e.value,t.value],e.loc)}function to(e,t){const n=[],o=qn.get(e);o?n.push(t.helperString(o)):(t.helper(J),t.directives.add(e.name),n.push(ut(e.name,\"directive\")));const{loc:r}=e;if(e.exp&&n.push(e.exp),e.arg&&(e.exp||n.push(\"void 0\"),n.push(e.arg)),Object.keys(e.modifiers).length){e.arg||(e.exp||n.push(\"void 0\"),n.push(\"void 0\"));const t=Ne(\"true\",!1,r);n.push(xe(e.modifiers.map((e=>ke(e,t))),r))}return Se(n,e.loc)}function no(e){return\"component\"===e||\"Component\"===e}const oo=(e,t)=>{if(rt(e)){const{children:n,loc:o}=e,{slotName:r,slotProps:s}=ro(e,t),i=[t.prefixIdentifiers?\"_ctx.$slots\":\"$slots\",r,\"{}\",\"undefined\",\"true\"];let c=2;s&&(i[2]=s,c=3),n.length&&(i[3]=we([],n,!1,!1,o),c=4),t.scopeId&&!t.slotted&&(c=5),i.splice(c),e.codegenNode=Ee(t.helper(q),i,o)}};function ro(e,t){let n,o='\"default\"';const r=[];for(let s=0;s<e.props.length;s++){const t=e.props[s];6===t.type?t.value&&(\"name\"===t.name?o=JSON.stringify(t.value.content):(t.name=k(t.name),r.push(t))):\"bind\"===t.name&&Xe(t.arg,\"name\")?t.exp&&(o=t.exp):(\"bind\"===t.name&&t.arg&&Le(t.arg)&&(t.arg.content=k(t.arg.content)),r.push(t))}if(r.length>0){const{props:o,directives:s}=Qn(e,t,r,!1,!1);n=o}return{slotName:o,slotProps:n}}const so=/^\\s*([\\w$_]+|(async\\s*)?\\([^)]*?\\))\\s*(:[^=]+)?=>|^\\s*(async\\s+)?function(?:\\s+[\\w$]+)?\\s*\\(/,io=(e,t,n,o)=>{const{loc:r,modifiers:s,arg:i}=e;let c;if(4===i.type)if(i.isStatic){let e=i.content;e.startsWith(\"vue:\")&&(e=`vnode-${e.slice(4)}`);c=Ne(0!==t.tagType||e.startsWith(\"vnode\")||!/[A-Z]/.test(e)?E(k(e)):`on:${e}`,!0,i.loc)}else c=Te([`${n.helperString(ie)}(`,i,\")\"]);else c=i,c.children.unshift(`${n.helperString(ie)}(`),c.children.push(\")\");let l=e.exp;l&&!l.content.trim()&&(l=void 0);let a=n.cacheHandlers&&!l&&!n.inVOnce;if(l){const e=ze(l.content),t=!(e||so.test(l.content)),n=l.content.includes(\";\");(t||a&&e)&&(l=Te([`${t?\"$event\":\"(...args)\"} => ${n?\"{\":\"(\"}`,l,n?\"}\":\")\"]))}let p={props:[ke(c,l||Ne(\"() => {}\",!1,r))]};return o&&(p=o(p)),a&&(p.props[0].value=n.cache(p.props[0].value)),p.props.forEach((e=>e.key.isHandlerKey=!0)),p},co=(e,t,n)=>{const{exp:o,modifiers:r,loc:s}=e,i=e.arg;return 4!==i.type?(i.children.unshift(\"(\"),i.children.push(') || \"\"')):i.isStatic||(i.content=`${i.content} || \"\"`),r.includes(\"camel\")&&(4===i.type?i.content=i.isStatic?k(i.content):`${n.helperString(re)}(${i.content})`:(i.children.unshift(`${n.helperString(re)}(`),i.children.push(\")\"))),n.inSSR||(r.includes(\"prop\")&&lo(i,\".\"),r.includes(\"attr\")&&lo(i,\"^\")),!o||4===o.type&&!o.content.trim()?{props:[ke(i,Ne(\"\",!0,s))]}:{props:[ke(i,o)]}},lo=(e,t)=>{4===e.type?e.content=e.isStatic?t+e.content:`\\`${t}\\${${e.content}}\\``:(e.children.unshift(`'${t}' + (`),e.children.push(\")\"))},ao=(e,t)=>{if(0===e.type||1===e.type||11===e.type||10===e.type)return()=>{const n=e.children;let o,r=!1;for(let e=0;e<n.length;e++){const t=n[e];if(tt(t)){r=!0;for(let r=e+1;r<n.length;r++){const s=n[r];if(!tt(s)){o=void 0;break}o||(o=n[e]=Te([t],t.loc)),o.children.push(\" + \",s),n.splice(r,1),r--}}}if(r&&(1!==n.length||0!==e.type&&(1!==e.type||0!==e.tagType||e.props.find((e=>7===e.type&&!t.directiveTransforms[e.name]))||\"template\"===e.tag)))for(let e=0;e<n.length;e++){const o=n[e];if(tt(o)||8===o.type){const r=[];2===o.type&&\" \"===o.content||r.push(o),t.ssr||0!==qt(o,t)||r.push(\"1\"),n[e]={type:12,content:o,loc:o.loc,codegenNode:Ee(t.helper(D),r)}}}}},po=new WeakSet,uo=(e,t)=>{if(1===e.type&&Ye(e,\"once\",!0)){if(po.has(e)||t.inVOnce)return;return po.add(e),t.inVOnce=!0,t.helper(ce),()=>{t.inVOnce=!1;const e=t.currentNode;e.codegenNode&&(e.codegenNode=t.cache(e.codegenNode,!0))}}},fo=(e,t,n)=>{const{exp:o,arg:r}=e;if(!o)return ho();const s=o.loc.source,i=4===o.type?o.content:s,c=n.bindingMetadata[s];if(\"props\"===c||\"props-aliased\"===c)return ho();if(!i.trim()||!ze(i))return ho();const l=r||Ne(\"modelValue\",!0),a=r?Le(r)?`onUpdate:${k(r.content)}`:Te(['\"onUpdate:\" + ',r]):\"onUpdate:modelValue\";let p;p=Te([`${n.isTS?\"($event: any)\":\"$event\"} => ((`,o,\") = $event)\"]);const u=[ke(l,e.exp),ke(a,p)];if(e.modifiers.length&&1===t.tagType){const t=e.modifiers.map((e=>(Fe(e)?e:JSON.stringify(e))+\": true\")).join(\", \"),n=r?Le(r)?`${r.content}Modifiers`:Te([r,' + \"Modifiers\"']):\"modelModifiers\";u.push(ke(n,Ne(`{ ${t} }`,!1,e.loc,2)))}return ho(u)};function ho(e=[]){return{props:e}}const mo=/[\\w).+\\-_$\\]]/,go=(e,t)=>{yt(\"COMPILER_FILTER\",t)&&(5===e.type&&yo(e.content,t),1===e.type&&e.props.forEach((e=>{7===e.type&&\"for\"!==e.name&&e.exp&&yo(e.exp,t)})))};function yo(e,t){if(4===e.type)vo(e,t);else for(let n=0;n<e.children.length;n++){const o=e.children[n];\"object\"==typeof o&&(4===o.type?vo(o,t):8===o.type?yo(e,t):5===o.type&&yo(o.content,t))}}function vo(e,t){const n=e.content;let o,r,s,i,c=!1,l=!1,a=!1,p=!1,u=0,f=0,d=0,h=0,m=[];for(s=0;s<n.length;s++)if(r=o,o=n.charCodeAt(s),c)39===o&&92!==r&&(c=!1);else if(l)34===o&&92!==r&&(l=!1);else if(a)96===o&&92!==r&&(a=!1);else if(p)47===o&&92!==r&&(p=!1);else if(124!==o||124===n.charCodeAt(s+1)||124===n.charCodeAt(s-1)||u||f||d){switch(o){case 34:l=!0;break;case 39:c=!0;break;case 96:a=!0;break;case 40:d++;break;case 41:d--;break;case 91:f++;break;case 93:f--;break;case 123:u++;break;case 125:u--}if(47===o){let e,t=s-1;for(;t>=0&&(e=n.charAt(t),\" \"===e);t--);e&&mo.test(e)||(p=!0)}}else void 0===i?(h=s+1,i=n.slice(0,s).trim()):g();function g(){m.push(n.slice(h,s).trim()),h=s+1}if(void 0===i?i=n.slice(0,s).trim():0!==h&&g(),m.length){for(s=0;s<m.length;s++)i=bo(i,m[s],t);e.content=i}}function bo(e,t,n){n.helper(z);const o=t.indexOf(\"(\");if(o<0)return n.filters.add(t),`${ut(t,\"filter\")}(${e})`;{const r=t.slice(0,o),s=t.slice(o+1);return n.filters.add(r),`${ut(r,\"filter\")}(${e}${\")\"!==s?\",\"+s:s}`}}const So=new WeakSet,xo=(e,t)=>{if(1===e.type){const n=Ye(e,\"memo\");if(!n||So.has(e))return;return So.add(e),()=>{const o=e.codegenNode||t.currentNode.codegenNode;o&&13===o.type&&(1!==e.tagType&&ht(o,t),e.codegenNode=Ee(t.helper(de),[n.exp,we(void 0,o),\"_cache\",String(t.cached++)]))}}};function ko(e){return[[uo,On,xo,Pn,go,oo,Zn,Hn,ao],{on:io,bind:co,model:fo}]}function No(e,t={}){const n=t.onError||w,o=\"module\"===t.mode;!0===t.prefixIdentifiers?n($(47)):o&&n($(48));t.cacheHandlers&&n($(49)),t.scopeId&&!o&&n($(50));const r=m(e)?Nt(e,t):e,[s,i]=ko();return nn(r,d({},t,{prefixIdentifiers:false,nodeTransforms:[...s,...t.nodeTransforms||[]],directiveTransforms:d({},i,t.directiveTransforms||{})})),ln(r,d({},t,{prefixIdentifiers:false}))}const _o=()=>({props:[]}),To=Symbol(\"\"),Eo=Symbol(\"\"),wo=Symbol(\"\"),Oo=Symbol(\"\"),$o=Symbol(\"\"),Co=Symbol(\"\"),Mo=Symbol(\"\"),Io=Symbol(\"\"),Po=Symbol(\"\"),Ro=Symbol(\"\");let Vo;ge({[To]:\"vModelRadio\",[Eo]:\"vModelCheckbox\",[wo]:\"vModelText\",[Oo]:\"vModelSelect\",[$o]:\"vModelDynamic\",[Co]:\"withModifiers\",[Mo]:\"withKeys\",[Io]:\"vShow\",[Po]:\"Transition\",[Ro]:\"TransitionGroup\"});const Lo=e(\"style,iframe,script,noscript\",!0),Ao={isVoidTag:c,isNativeTag:e=>s(e)||i(e),isPreTag:e=>\"pre\"===e,decodeEntities:function(e,t=!1){return Vo||(Vo=document.createElement(\"div\")),t?(Vo.innerHTML=`<div foo=\"${e.replace(/\"/g,\"&quot;\")}\">`,Vo.children[0].getAttribute(\"foo\")):(Vo.innerHTML=e,Vo.textContent)},isBuiltInComponent:e=>Ae(e,\"Transition\")?Po:Ae(e,\"TransitionGroup\")?Ro:void 0,getNamespace(e,t){let n=t?t.ns:0;if(t&&2===n)if(\"annotation-xml\"===t.tag){if(\"svg\"===e)return 1;t.props.some((e=>6===e.type&&\"encoding\"===e.name&&null!=e.value&&(\"text/html\"===e.value.content||\"application/xhtml+xml\"===e.value.content)))&&(n=0)}else/^m(?:[ions]|text)$/.test(t.tag)&&\"mglyph\"!==e&&\"malignmark\"!==e&&(n=0);else t&&1===n&&(\"foreignObject\"!==t.tag&&\"desc\"!==t.tag&&\"title\"!==t.tag||(n=0));if(0===n){if(\"svg\"===e)return 1;if(\"math\"===e)return 2}return n},getTextMode({tag:e,ns:t}){if(0===t){if(\"textarea\"===e||\"title\"===e)return 1;if(Lo(e))return 2}return 0}},Bo=e=>{1===e.type&&e.props.forEach(((t,n)=>{6===t.type&&\"style\"===t.name&&t.value&&(e.props[n]={type:7,name:\"bind\",arg:Ne(\"style\",!0,t.loc),exp:jo(t.value.content,t.loc),modifiers:[],loc:t.loc})}))},jo=(e,t)=>{const s=function(e){const t={};return e.replace(r,\"\").split(n).forEach((e=>{if(e){const n=e.split(o);n.length>1&&(t[n[0].trim()]=n[1].trim())}})),t}(e);return Ne(JSON.stringify(s),!1,t,3)};function Fo(e,t){return $(e,t)}const Do=e(\"passive,once,capture\"),Ho=e(\"stop,prevent,self,ctrl,shift,alt,meta,exact,middle\"),Wo=e(\"left,right\"),Uo=e(\"onkeyup,onkeydown,onkeypress\",!0),Jo=(e,t)=>Le(e)&&\"onclick\"===e.content.toLowerCase()?Ne(t,!0):4!==e.type?Te([\"(\",e,`) === \"onClick\" ? \"${t}\" : (`,e,\")\"]):e,zo=(e,t)=>{1!==e.type||0!==e.tagType||\"script\"!==e.tag&&\"style\"!==e.tag||t.removeNode()},Go=[Bo],Ko={cloak:_o,html:(e,t,n)=>{const{exp:o,loc:r}=e;return t.children.length&&(t.children.length=0),{props:[ke(Ne(\"innerHTML\",!0,r),o||Ne(\"\",!0))]}},text:(e,t,n)=>{const{exp:o,loc:r}=e;return t.children.length&&(t.children.length=0),{props:[ke(Ne(\"textContent\",!0),o?qt(o,n)>0?o:Ee(n.helperString(Y),[o],r):Ne(\"\",!0))]}},model:(e,t,n)=>{const o=fo(e,t,n);if(!o.props.length||1===t.tagType)return o;const{tag:r}=t,s=n.isCustomElement(r);if(\"input\"===r||\"textarea\"===r||\"select\"===r||s){let e=wo,i=!1;if(\"input\"===r||s){const n=Qe(t,\"type\");if(n){if(7===n.type)e=$o;else if(n.value)switch(n.value.content){case\"radio\":e=To;break;case\"checkbox\":e=Eo;break;case\"file\":i=!0}}else et(t)&&(e=$o)}else\"select\"===r&&(e=Oo);i||(o.needRuntime=n.helper(e))}return o.props=o.props.filter((e=>!(4===e.key.type&&\"modelValue\"===e.key.content))),o},on:(e,t,n)=>io(e,t,n,(t=>{const{modifiers:o}=e;if(!o.length)return t;let{key:r,value:s}=t.props[0];const{keyModifiers:i,nonKeyModifiers:c,eventOptionModifiers:l}=((e,t,n,o)=>{const r=[],s=[],i=[];for(let c=0;c<t.length;c++){const o=t[c];\"native\"===o&&vt(\"COMPILER_V_ON_NATIVE\",n)||Do(o)?i.push(o):Wo(o)?Le(e)?Uo(e.content)?r.push(o):s.push(o):(r.push(o),s.push(o)):Ho(o)?s.push(o):r.push(o)}return{keyModifiers:r,nonKeyModifiers:s,eventOptionModifiers:i}})(r,o,n);if(c.includes(\"right\")&&(r=Jo(r,\"onContextmenu\")),c.includes(\"middle\")&&(r=Jo(r,\"onMouseup\")),c.length&&(s=Ee(n.helper(Co),[s,JSON.stringify(c)])),!i.length||Le(r)&&!Uo(r.content)||(s=Ee(n.helper(Mo),[s,JSON.stringify(i)])),l.length){const e=l.map(T).join(\"\");r=Le(r)?Ne(`${r.content}${e}`,!0):Te([\"(\",r,`) + \"${e}\"`])}return{props:[ke(r,s)]}})),show:(e,t,n)=>({props:[],needRuntime:n.helper(Io)})};function qo(e,t={}){return No(e,d({},Ao,t,{nodeTransforms:[zo,...Go,...t.nodeTransforms||[]],directiveTransforms:d({},Ko,t.directiveTransforms||{}),transformHoist:null}))}function Zo(e,t={}){return Nt(e,d({},Ao,t))}export{R as BASE_TRANSITION,re as CAMELIZE,se as CAPITALIZE,L as CREATE_BLOCK,F as CREATE_COMMENT,A as CREATE_ELEMENT_BLOCK,j as CREATE_ELEMENT_VNODE,Z as CREATE_SLOTS,H as CREATE_STATIC,D as CREATE_TEXT,B as CREATE_VNODE,Ko as DOMDirectiveTransforms,Go as DOMNodeTransforms,C as FRAGMENT,ne as GUARD_REACTIVE_PROPS,he as IS_MEMO_SAME,fe as IS_REF,P as KEEP_ALIVE,Q as MERGE_PROPS,X as NORMALIZE_CLASS,te as NORMALIZE_PROPS,ee as NORMALIZE_STYLE,V as OPEN_BLOCK,ae as POP_SCOPE_ID,le as PUSH_SCOPE_ID,K as RENDER_LIST,q as RENDER_SLOT,W as RESOLVE_COMPONENT,J as RESOLVE_DIRECTIVE,U as RESOLVE_DYNAMIC_COMPONENT,z as RESOLVE_FILTER,ce as SET_BLOCK_TRACKING,I as SUSPENSE,M as TELEPORT,Y as TO_DISPLAY_STRING,oe as TO_HANDLERS,ie as TO_HANDLER_KEY,Po as TRANSITION,Ro as TRANSITION_GROUP,ue as UNREF,Eo as V_MODEL_CHECKBOX,$o as V_MODEL_DYNAMIC,To as V_MODEL_RADIO,Oo as V_MODEL_SELECT,wo as V_MODEL_TEXT,Mo as V_ON_WITH_KEYS,Co as V_ON_WITH_MODIFIERS,Io as V_SHOW,pe as WITH_CTX,G as WITH_DIRECTIVES,de as WITH_MEMO,Ke as advancePositionWithClone,qe as advancePositionWithMutation,Ze as assert,No as baseCompile,Nt as baseParse,to as buildDirectiveArgs,Qn as buildProps,Jn as buildSlots,vt as checkCompatEnabled,qo as compile,Se as createArrayExpression,Pe as createAssignmentExpression,Ce as createBlockStatement,$e as createCacheExpression,Ee as createCallExpression,$ as createCompilerError,Te as createCompoundExpression,Oe as createConditionalExpression,Fo as createDOMCompilerError,Fn as createForLoopParams,we as createFunctionExpression,Ie as createIfStatement,_e as createInterpolation,xe as createObjectExpression,ke as createObjectProperty,Ve as createReturnStatement,ve as createRoot,Re as createSequenceExpression,Ne as createSimpleExpression,rn as createStructuralDirectiveTransform,Me as createTemplateLiteral,tn as createTransformContext,be as createVNodeCall,xn as extractIdentifiers,Ye as findDir,Qe as findProp,ln as generate,t as generateCodeFrame,ko as getBaseTransformPreset,qt as getConstantType,Ge as getInnerRange,dt as getMemoedVNodeCall,it as getVNodeBlockHelper,st as getVNodeHelper,et as hasDynamicKeyVBind,ft as hasScopeRef,me as helperNameMap,at as injectProp,Ae as isBuiltInType,Be as isCoreComponent,kn as isFunctionType,vn as isInDestructureAssignment,ze as isMemberExpression,Ue as isMemberExpressionBrowser,Je as isMemberExpressionNode,yn as isReferencedIdentifier,Fe as isSimpleIdentifier,rt as isSlotOutlet,Xe as isStaticArgOf,Le as isStaticExp,Nn as isStaticProperty,_n as isStaticPropertyKey,ot as isTemplateNode,tt as isText,nt as isVSlot,ye as locStub,ht as makeBlock,_o as noopDirectiveTransform,Zo as parse,Ao as parserOptions,En as processExpression,Rn as processFor,$n as processIf,ro as processSlotOutlet,ge as registerRuntimeHelpers,Yn as resolveComponentType,wn as stringifyExpression,ut as toValidAssetId,Hn as trackSlotScopes,Wn as trackVForSlotScopes,nn as transform,co as transformBind,Zn as transformElement,Tn as transformExpression,fo as transformModel,io as transformOn,Bo as transformStyle,on as traverseNode,Sn as walkBlockDeclarations,bn as walkFunctionParams,gn as walkIdentifiers,bt as warnDeprecation};\n/dist/compiler-dom.cjs.js\u0000\u00013'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar compilerCore = require('@vue/compiler-core');\nvar shared = require('@vue/shared');\n\nconst V_MODEL_RADIO = Symbol(`vModelRadio` );\nconst V_MODEL_CHECKBOX = Symbol(`vModelCheckbox` );\nconst V_MODEL_TEXT = Symbol(`vModelText` );\nconst V_MODEL_SELECT = Symbol(`vModelSelect` );\nconst V_MODEL_DYNAMIC = Symbol(`vModelDynamic` );\nconst V_ON_WITH_MODIFIERS = Symbol(`vOnModifiersGuard` );\nconst V_ON_WITH_KEYS = Symbol(`vOnKeysGuard` );\nconst V_SHOW = Symbol(`vShow` );\nconst TRANSITION = Symbol(`Transition` );\nconst TRANSITION_GROUP = Symbol(`TransitionGroup` );\ncompilerCore.registerRuntimeHelpers({\n    [V_MODEL_RADIO]: `vModelRadio`,\n    [V_MODEL_CHECKBOX]: `vModelCheckbox`,\n    [V_MODEL_TEXT]: `vModelText`,\n    [V_MODEL_SELECT]: `vModelSelect`,\n    [V_MODEL_DYNAMIC]: `vModelDynamic`,\n    [V_ON_WITH_MODIFIERS]: `withModifiers`,\n    [V_ON_WITH_KEYS]: `withKeys`,\n    [V_SHOW]: `vShow`,\n    [TRANSITION]: `Transition`,\n    [TRANSITION_GROUP]: `TransitionGroup`\n});\n\nvar namedCharacterReferences = {\n\tGT: \">\",\n\tgt: \">\",\n\tLT: \"<\",\n\tlt: \"<\",\n\t\"ac;\": \"∾\",\n\t\"af;\": \"⁡\",\n\tAMP: \"&\",\n\tamp: \"&\",\n\t\"ap;\": \"≈\",\n\t\"DD;\": \"ⅅ\",\n\t\"dd;\": \"ⅆ\",\n\tdeg: \"°\",\n\t\"ee;\": \"ⅇ\",\n\t\"eg;\": \"⪚\",\n\t\"el;\": \"⪙\",\n\tETH: \"Ð\",\n\teth: \"ð\",\n\t\"gE;\": \"≧\",\n\t\"ge;\": \"≥\",\n\t\"Gg;\": \"⋙\",\n\t\"gg;\": \"≫\",\n\t\"gl;\": \"≷\",\n\t\"GT;\": \">\",\n\t\"Gt;\": \"≫\",\n\t\"gt;\": \">\",\n\t\"ic;\": \"⁣\",\n\t\"ii;\": \"ⅈ\",\n\t\"Im;\": \"ℑ\",\n\t\"in;\": \"∈\",\n\t\"it;\": \"⁢\",\n\t\"lE;\": \"≦\",\n\t\"le;\": \"≤\",\n\t\"lg;\": \"≶\",\n\t\"Ll;\": \"⋘\",\n\t\"ll;\": \"≪\",\n\t\"LT;\": \"<\",\n\t\"Lt;\": \"≪\",\n\t\"lt;\": \"<\",\n\t\"mp;\": \"∓\",\n\t\"Mu;\": \"Μ\",\n\t\"mu;\": \"μ\",\n\t\"ne;\": \"≠\",\n\t\"ni;\": \"∋\",\n\tnot: \"¬\",\n\t\"Nu;\": \"Ν\",\n\t\"nu;\": \"ν\",\n\t\"Or;\": \"⩔\",\n\t\"or;\": \"∨\",\n\t\"oS;\": \"Ⓢ\",\n\t\"Pi;\": \"Π\",\n\t\"pi;\": \"π\",\n\t\"pm;\": \"±\",\n\t\"Pr;\": \"⪻\",\n\t\"pr;\": \"≺\",\n\t\"Re;\": \"ℜ\",\n\tREG: \"®\",\n\treg: \"®\",\n\t\"rx;\": \"℞\",\n\t\"Sc;\": \"⪼\",\n\t\"sc;\": \"≻\",\n\tshy: \"­\",\n\tuml: \"¨\",\n\t\"wp;\": \"℘\",\n\t\"wr;\": \"≀\",\n\t\"Xi;\": \"Ξ\",\n\t\"xi;\": \"ξ\",\n\tyen: \"¥\",\n\t\"acd;\": \"∿\",\n\t\"acE;\": \"∾̳\",\n\t\"Acy;\": \"А\",\n\t\"acy;\": \"а\",\n\t\"Afr;\": \"𝔄\",\n\t\"afr;\": \"𝔞\",\n\t\"AMP;\": \"&\",\n\t\"amp;\": \"&\",\n\t\"And;\": \"⩓\",\n\t\"and;\": \"∧\",\n\t\"ang;\": \"∠\",\n\t\"apE;\": \"⩰\",\n\t\"ape;\": \"≊\",\n\t\"ast;\": \"*\",\n\tAuml: \"Ä\",\n\tauml: \"ä\",\n\t\"Bcy;\": \"Б\",\n\t\"bcy;\": \"б\",\n\t\"Bfr;\": \"𝔅\",\n\t\"bfr;\": \"𝔟\",\n\t\"bne;\": \"=⃥\",\n\t\"bot;\": \"⊥\",\n\t\"Cap;\": \"⋒\",\n\t\"cap;\": \"∩\",\n\tcent: \"¢\",\n\t\"Cfr;\": \"ℭ\",\n\t\"cfr;\": \"𝔠\",\n\t\"Chi;\": \"Χ\",\n\t\"chi;\": \"χ\",\n\t\"cir;\": \"○\",\n\tCOPY: \"©\",\n\tcopy: \"©\",\n\t\"Cup;\": \"⋓\",\n\t\"cup;\": \"∪\",\n\t\"Dcy;\": \"Д\",\n\t\"dcy;\": \"д\",\n\t\"deg;\": \"°\",\n\t\"Del;\": \"∇\",\n\t\"Dfr;\": \"𝔇\",\n\t\"dfr;\": \"𝔡\",\n\t\"die;\": \"¨\",\n\t\"div;\": \"÷\",\n\t\"Dot;\": \"¨\",\n\t\"dot;\": \"˙\",\n\t\"Ecy;\": \"Э\",\n\t\"ecy;\": \"э\",\n\t\"Efr;\": \"𝔈\",\n\t\"efr;\": \"𝔢\",\n\t\"egs;\": \"⪖\",\n\t\"ell;\": \"ℓ\",\n\t\"els;\": \"⪕\",\n\t\"ENG;\": \"Ŋ\",\n\t\"eng;\": \"ŋ\",\n\t\"Eta;\": \"Η\",\n\t\"eta;\": \"η\",\n\t\"ETH;\": \"Ð\",\n\t\"eth;\": \"ð\",\n\tEuml: \"Ë\",\n\teuml: \"ë\",\n\t\"Fcy;\": \"Ф\",\n\t\"fcy;\": \"ф\",\n\t\"Ffr;\": \"𝔉\",\n\t\"ffr;\": \"𝔣\",\n\t\"gap;\": \"⪆\",\n\t\"Gcy;\": \"Г\",\n\t\"gcy;\": \"г\",\n\t\"gEl;\": \"⪌\",\n\t\"gel;\": \"⋛\",\n\t\"geq;\": \"≥\",\n\t\"ges;\": \"⩾\",\n\t\"Gfr;\": \"𝔊\",\n\t\"gfr;\": \"𝔤\",\n\t\"ggg;\": \"⋙\",\n\t\"gla;\": \"⪥\",\n\t\"glE;\": \"⪒\",\n\t\"glj;\": \"⪤\",\n\t\"gnE;\": \"≩\",\n\t\"gne;\": \"⪈\",\n\t\"Hat;\": \"^\",\n\t\"Hfr;\": \"ℌ\",\n\t\"hfr;\": \"𝔥\",\n\t\"Icy;\": \"И\",\n\t\"icy;\": \"и\",\n\t\"iff;\": \"⇔\",\n\t\"Ifr;\": \"ℑ\",\n\t\"ifr;\": \"𝔦\",\n\t\"Int;\": \"∬\",\n\t\"int;\": \"∫\",\n\tIuml: \"Ï\",\n\tiuml: \"ï\",\n\t\"Jcy;\": \"Й\",\n\t\"jcy;\": \"й\",\n\t\"Jfr;\": \"𝔍\",\n\t\"jfr;\": \"𝔧\",\n\t\"Kcy;\": \"К\",\n\t\"kcy;\": \"к\",\n\t\"Kfr;\": \"𝔎\",\n\t\"kfr;\": \"𝔨\",\n\t\"lap;\": \"⪅\",\n\t\"lat;\": \"⪫\",\n\t\"Lcy;\": \"Л\",\n\t\"lcy;\": \"л\",\n\t\"lEg;\": \"⪋\",\n\t\"leg;\": \"⋚\",\n\t\"leq;\": \"≤\",\n\t\"les;\": \"⩽\",\n\t\"Lfr;\": \"𝔏\",\n\t\"lfr;\": \"𝔩\",\n\t\"lgE;\": \"⪑\",\n\t\"lnE;\": \"≨\",\n\t\"lne;\": \"⪇\",\n\t\"loz;\": \"◊\",\n\t\"lrm;\": \"‎\",\n\t\"Lsh;\": \"↰\",\n\t\"lsh;\": \"↰\",\n\tmacr: \"¯\",\n\t\"Map;\": \"⤅\",\n\t\"map;\": \"↦\",\n\t\"Mcy;\": \"М\",\n\t\"mcy;\": \"м\",\n\t\"Mfr;\": \"𝔐\",\n\t\"mfr;\": \"𝔪\",\n\t\"mho;\": \"℧\",\n\t\"mid;\": \"∣\",\n\t\"nap;\": \"≉\",\n\tnbsp: \" \",\n\t\"Ncy;\": \"Н\",\n\t\"ncy;\": \"н\",\n\t\"Nfr;\": \"𝔑\",\n\t\"nfr;\": \"𝔫\",\n\t\"ngE;\": \"≧̸\",\n\t\"nge;\": \"≱\",\n\t\"nGg;\": \"⋙̸\",\n\t\"nGt;\": \"≫⃒\",\n\t\"ngt;\": \"≯\",\n\t\"nis;\": \"⋼\",\n\t\"niv;\": \"∋\",\n\t\"nlE;\": \"≦̸\",\n\t\"nle;\": \"≰\",\n\t\"nLl;\": \"⋘̸\",\n\t\"nLt;\": \"≪⃒\",\n\t\"nlt;\": \"≮\",\n\t\"Not;\": \"⫬\",\n\t\"not;\": \"¬\",\n\t\"npr;\": \"⊀\",\n\t\"nsc;\": \"⊁\",\n\t\"num;\": \"#\",\n\t\"Ocy;\": \"О\",\n\t\"ocy;\": \"о\",\n\t\"Ofr;\": \"𝔒\",\n\t\"ofr;\": \"𝔬\",\n\t\"ogt;\": \"⧁\",\n\t\"ohm;\": \"Ω\",\n\t\"olt;\": \"⧀\",\n\t\"ord;\": \"⩝\",\n\tordf: \"ª\",\n\tordm: \"º\",\n\t\"orv;\": \"⩛\",\n\tOuml: \"Ö\",\n\touml: \"ö\",\n\t\"par;\": \"∥\",\n\tpara: \"¶\",\n\t\"Pcy;\": \"П\",\n\t\"pcy;\": \"п\",\n\t\"Pfr;\": \"𝔓\",\n\t\"pfr;\": \"𝔭\",\n\t\"Phi;\": \"Φ\",\n\t\"phi;\": \"φ\",\n\t\"piv;\": \"ϖ\",\n\t\"prE;\": \"⪳\",\n\t\"pre;\": \"⪯\",\n\t\"Psi;\": \"Ψ\",\n\t\"psi;\": \"ψ\",\n\t\"Qfr;\": \"𝔔\",\n\t\"qfr;\": \"𝔮\",\n\tQUOT: \"\\\"\",\n\tquot: \"\\\"\",\n\t\"Rcy;\": \"Р\",\n\t\"rcy;\": \"р\",\n\t\"REG;\": \"®\",\n\t\"reg;\": \"®\",\n\t\"Rfr;\": \"ℜ\",\n\t\"rfr;\": \"𝔯\",\n\t\"Rho;\": \"Ρ\",\n\t\"rho;\": \"ρ\",\n\t\"rlm;\": \"‏\",\n\t\"Rsh;\": \"↱\",\n\t\"rsh;\": \"↱\",\n\t\"scE;\": \"⪴\",\n\t\"sce;\": \"⪰\",\n\t\"Scy;\": \"С\",\n\t\"scy;\": \"с\",\n\tsect: \"§\",\n\t\"Sfr;\": \"𝔖\",\n\t\"sfr;\": \"𝔰\",\n\t\"shy;\": \"­\",\n\t\"sim;\": \"∼\",\n\t\"smt;\": \"⪪\",\n\t\"sol;\": \"/\",\n\t\"squ;\": \"□\",\n\t\"Sub;\": \"⋐\",\n\t\"sub;\": \"⊂\",\n\t\"Sum;\": \"∑\",\n\t\"sum;\": \"∑\",\n\t\"Sup;\": \"⋑\",\n\t\"sup;\": \"⊃\",\n\tsup1: \"¹\",\n\tsup2: \"²\",\n\tsup3: \"³\",\n\t\"Tab;\": \"\\t\",\n\t\"Tau;\": \"Τ\",\n\t\"tau;\": \"τ\",\n\t\"Tcy;\": \"Т\",\n\t\"tcy;\": \"т\",\n\t\"Tfr;\": \"𝔗\",\n\t\"tfr;\": \"𝔱\",\n\t\"top;\": \"⊤\",\n\t\"Ucy;\": \"У\",\n\t\"ucy;\": \"у\",\n\t\"Ufr;\": \"𝔘\",\n\t\"ufr;\": \"𝔲\",\n\t\"uml;\": \"¨\",\n\tUuml: \"Ü\",\n\tuuml: \"ü\",\n\t\"Vcy;\": \"В\",\n\t\"vcy;\": \"в\",\n\t\"Vee;\": \"⋁\",\n\t\"vee;\": \"∨\",\n\t\"Vfr;\": \"𝔙\",\n\t\"vfr;\": \"𝔳\",\n\t\"Wfr;\": \"𝔚\",\n\t\"wfr;\": \"𝔴\",\n\t\"Xfr;\": \"𝔛\",\n\t\"xfr;\": \"𝔵\",\n\t\"Ycy;\": \"Ы\",\n\t\"ycy;\": \"ы\",\n\t\"yen;\": \"¥\",\n\t\"Yfr;\": \"𝔜\",\n\t\"yfr;\": \"𝔶\",\n\tyuml: \"ÿ\",\n\t\"Zcy;\": \"З\",\n\t\"zcy;\": \"з\",\n\t\"Zfr;\": \"ℨ\",\n\t\"zfr;\": \"𝔷\",\n\t\"zwj;\": \"‍\",\n\tAcirc: \"Â\",\n\tacirc: \"â\",\n\tacute: \"´\",\n\tAElig: \"Æ\",\n\taelig: \"æ\",\n\t\"andd;\": \"⩜\",\n\t\"andv;\": \"⩚\",\n\t\"ange;\": \"⦤\",\n\t\"Aopf;\": \"𝔸\",\n\t\"aopf;\": \"𝕒\",\n\t\"apid;\": \"≋\",\n\t\"apos;\": \"'\",\n\tAring: \"Å\",\n\taring: \"å\",\n\t\"Ascr;\": \"𝒜\",\n\t\"ascr;\": \"𝒶\",\n\t\"Auml;\": \"Ä\",\n\t\"auml;\": \"ä\",\n\t\"Barv;\": \"⫧\",\n\t\"bbrk;\": \"⎵\",\n\t\"Beta;\": \"Β\",\n\t\"beta;\": \"β\",\n\t\"beth;\": \"ℶ\",\n\t\"bNot;\": \"⫭\",\n\t\"bnot;\": \"⌐\",\n\t\"Bopf;\": \"𝔹\",\n\t\"bopf;\": \"𝕓\",\n\t\"boxH;\": \"═\",\n\t\"boxh;\": \"─\",\n\t\"boxV;\": \"║\",\n\t\"boxv;\": \"│\",\n\t\"Bscr;\": \"ℬ\",\n\t\"bscr;\": \"𝒷\",\n\t\"bsim;\": \"∽\",\n\t\"bsol;\": \"\\\\\",\n\t\"bull;\": \"•\",\n\t\"bump;\": \"≎\",\n\t\"caps;\": \"∩︀\",\n\t\"Cdot;\": \"Ċ\",\n\t\"cdot;\": \"ċ\",\n\tcedil: \"¸\",\n\t\"cent;\": \"¢\",\n\t\"CHcy;\": \"Ч\",\n\t\"chcy;\": \"ч\",\n\t\"circ;\": \"ˆ\",\n\t\"cirE;\": \"⧃\",\n\t\"cire;\": \"≗\",\n\t\"comp;\": \"∁\",\n\t\"cong;\": \"≅\",\n\t\"Copf;\": \"ℂ\",\n\t\"copf;\": \"𝕔\",\n\t\"COPY;\": \"©\",\n\t\"copy;\": \"©\",\n\t\"Cscr;\": \"𝒞\",\n\t\"cscr;\": \"𝒸\",\n\t\"csub;\": \"⫏\",\n\t\"csup;\": \"⫐\",\n\t\"cups;\": \"∪︀\",\n\t\"Darr;\": \"↡\",\n\t\"dArr;\": \"⇓\",\n\t\"darr;\": \"↓\",\n\t\"dash;\": \"‐\",\n\t\"dHar;\": \"⥥\",\n\t\"diam;\": \"⋄\",\n\t\"DJcy;\": \"Ђ\",\n\t\"djcy;\": \"ђ\",\n\t\"Dopf;\": \"𝔻\",\n\t\"dopf;\": \"𝕕\",\n\t\"Dscr;\": \"𝒟\",\n\t\"dscr;\": \"𝒹\",\n\t\"DScy;\": \"Ѕ\",\n\t\"dscy;\": \"ѕ\",\n\t\"dsol;\": \"⧶\",\n\t\"dtri;\": \"▿\",\n\t\"DZcy;\": \"Џ\",\n\t\"dzcy;\": \"џ\",\n\t\"ecir;\": \"≖\",\n\tEcirc: \"Ê\",\n\tecirc: \"ê\",\n\t\"Edot;\": \"Ė\",\n\t\"eDot;\": \"≑\",\n\t\"edot;\": \"ė\",\n\t\"emsp;\": \" \",\n\t\"ensp;\": \" \",\n\t\"Eopf;\": \"𝔼\",\n\t\"eopf;\": \"𝕖\",\n\t\"epar;\": \"⋕\",\n\t\"epsi;\": \"ε\",\n\t\"Escr;\": \"ℰ\",\n\t\"escr;\": \"ℯ\",\n\t\"Esim;\": \"⩳\",\n\t\"esim;\": \"≂\",\n\t\"Euml;\": \"Ë\",\n\t\"euml;\": \"ë\",\n\t\"euro;\": \"€\",\n\t\"excl;\": \"!\",\n\t\"flat;\": \"♭\",\n\t\"fnof;\": \"ƒ\",\n\t\"Fopf;\": \"𝔽\",\n\t\"fopf;\": \"𝕗\",\n\t\"fork;\": \"⋔\",\n\t\"Fscr;\": \"ℱ\",\n\t\"fscr;\": \"𝒻\",\n\t\"Gdot;\": \"Ġ\",\n\t\"gdot;\": \"ġ\",\n\t\"geqq;\": \"≧\",\n\t\"gesl;\": \"⋛︀\",\n\t\"GJcy;\": \"Ѓ\",\n\t\"gjcy;\": \"ѓ\",\n\t\"gnap;\": \"⪊\",\n\t\"gneq;\": \"⪈\",\n\t\"Gopf;\": \"𝔾\",\n\t\"gopf;\": \"𝕘\",\n\t\"Gscr;\": \"𝒢\",\n\t\"gscr;\": \"ℊ\",\n\t\"gsim;\": \"≳\",\n\t\"gtcc;\": \"⪧\",\n\t\"gvnE;\": \"≩︀\",\n\t\"half;\": \"½\",\n\t\"hArr;\": \"⇔\",\n\t\"harr;\": \"↔\",\n\t\"hbar;\": \"ℏ\",\n\t\"Hopf;\": \"ℍ\",\n\t\"hopf;\": \"𝕙\",\n\t\"Hscr;\": \"ℋ\",\n\t\"hscr;\": \"𝒽\",\n\tIcirc: \"Î\",\n\ticirc: \"î\",\n\t\"Idot;\": \"İ\",\n\t\"IEcy;\": \"Е\",\n\t\"iecy;\": \"е\",\n\tiexcl: \"¡\",\n\t\"imof;\": \"⊷\",\n\t\"IOcy;\": \"Ё\",\n\t\"iocy;\": \"ё\",\n\t\"Iopf;\": \"𝕀\",\n\t\"iopf;\": \"𝕚\",\n\t\"Iota;\": \"Ι\",\n\t\"iota;\": \"ι\",\n\t\"Iscr;\": \"ℐ\",\n\t\"iscr;\": \"𝒾\",\n\t\"isin;\": \"∈\",\n\t\"Iuml;\": \"Ï\",\n\t\"iuml;\": \"ï\",\n\t\"Jopf;\": \"𝕁\",\n\t\"jopf;\": \"𝕛\",\n\t\"Jscr;\": \"𝒥\",\n\t\"jscr;\": \"𝒿\",\n\t\"KHcy;\": \"Х\",\n\t\"khcy;\": \"х\",\n\t\"KJcy;\": \"Ќ\",\n\t\"kjcy;\": \"ќ\",\n\t\"Kopf;\": \"𝕂\",\n\t\"kopf;\": \"𝕜\",\n\t\"Kscr;\": \"𝒦\",\n\t\"kscr;\": \"𝓀\",\n\t\"Lang;\": \"⟪\",\n\t\"lang;\": \"⟨\",\n\tlaquo: \"«\",\n\t\"Larr;\": \"↞\",\n\t\"lArr;\": \"⇐\",\n\t\"larr;\": \"←\",\n\t\"late;\": \"⪭\",\n\t\"lcub;\": \"{\",\n\t\"ldca;\": \"⤶\",\n\t\"ldsh;\": \"↲\",\n\t\"leqq;\": \"≦\",\n\t\"lesg;\": \"⋚︀\",\n\t\"lHar;\": \"⥢\",\n\t\"LJcy;\": \"Љ\",\n\t\"ljcy;\": \"љ\",\n\t\"lnap;\": \"⪉\",\n\t\"lneq;\": \"⪇\",\n\t\"Lopf;\": \"𝕃\",\n\t\"lopf;\": \"𝕝\",\n\t\"lozf;\": \"⧫\",\n\t\"lpar;\": \"(\",\n\t\"Lscr;\": \"ℒ\",\n\t\"lscr;\": \"𝓁\",\n\t\"lsim;\": \"≲\",\n\t\"lsqb;\": \"[\",\n\t\"ltcc;\": \"⪦\",\n\t\"ltri;\": \"◃\",\n\t\"lvnE;\": \"≨︀\",\n\t\"macr;\": \"¯\",\n\t\"male;\": \"♂\",\n\t\"malt;\": \"✠\",\n\tmicro: \"µ\",\n\t\"mlcp;\": \"⫛\",\n\t\"mldr;\": \"…\",\n\t\"Mopf;\": \"𝕄\",\n\t\"mopf;\": \"𝕞\",\n\t\"Mscr;\": \"ℳ\",\n\t\"mscr;\": \"𝓂\",\n\t\"nang;\": \"∠⃒\",\n\t\"napE;\": \"⩰̸\",\n\t\"nbsp;\": \" \",\n\t\"ncap;\": \"⩃\",\n\t\"ncup;\": \"⩂\",\n\t\"ngeq;\": \"≱\",\n\t\"nges;\": \"⩾̸\",\n\t\"ngtr;\": \"≯\",\n\t\"nGtv;\": \"≫̸\",\n\t\"nisd;\": \"⋺\",\n\t\"NJcy;\": \"Њ\",\n\t\"njcy;\": \"њ\",\n\t\"nldr;\": \"‥\",\n\t\"nleq;\": \"≰\",\n\t\"nles;\": \"⩽̸\",\n\t\"nLtv;\": \"≪̸\",\n\t\"nmid;\": \"∤\",\n\t\"Nopf;\": \"ℕ\",\n\t\"nopf;\": \"𝕟\",\n\t\"npar;\": \"∦\",\n\t\"npre;\": \"⪯̸\",\n\t\"nsce;\": \"⪰̸\",\n\t\"Nscr;\": \"𝒩\",\n\t\"nscr;\": \"𝓃\",\n\t\"nsim;\": \"≁\",\n\t\"nsub;\": \"⊄\",\n\t\"nsup;\": \"⊅\",\n\t\"ntgl;\": \"≹\",\n\t\"ntlg;\": \"≸\",\n\t\"nvap;\": \"≍⃒\",\n\t\"nvge;\": \"≥⃒\",\n\t\"nvgt;\": \">⃒\",\n\t\"nvle;\": \"≤⃒\",\n\t\"nvlt;\": \"<⃒\",\n\t\"oast;\": \"⊛\",\n\t\"ocir;\": \"⊚\",\n\tOcirc: \"Ô\",\n\tocirc: \"ô\",\n\t\"odiv;\": \"⨸\",\n\t\"odot;\": \"⊙\",\n\t\"ogon;\": \"˛\",\n\t\"oint;\": \"∮\",\n\t\"omid;\": \"⦶\",\n\t\"Oopf;\": \"𝕆\",\n\t\"oopf;\": \"𝕠\",\n\t\"opar;\": \"⦷\",\n\t\"ordf;\": \"ª\",\n\t\"ordm;\": \"º\",\n\t\"oror;\": \"⩖\",\n\t\"Oscr;\": \"𝒪\",\n\t\"oscr;\": \"ℴ\",\n\t\"osol;\": \"⊘\",\n\t\"Ouml;\": \"Ö\",\n\t\"ouml;\": \"ö\",\n\t\"para;\": \"¶\",\n\t\"part;\": \"∂\",\n\t\"perp;\": \"⊥\",\n\t\"phiv;\": \"ϕ\",\n\t\"plus;\": \"+\",\n\t\"Popf;\": \"ℙ\",\n\t\"popf;\": \"𝕡\",\n\tpound: \"£\",\n\t\"prap;\": \"⪷\",\n\t\"prec;\": \"≺\",\n\t\"prnE;\": \"⪵\",\n\t\"prod;\": \"∏\",\n\t\"prop;\": \"∝\",\n\t\"Pscr;\": \"𝒫\",\n\t\"pscr;\": \"𝓅\",\n\t\"qint;\": \"⨌\",\n\t\"Qopf;\": \"ℚ\",\n\t\"qopf;\": \"𝕢\",\n\t\"Qscr;\": \"𝒬\",\n\t\"qscr;\": \"𝓆\",\n\t\"QUOT;\": \"\\\"\",\n\t\"quot;\": \"\\\"\",\n\t\"race;\": \"∽̱\",\n\t\"Rang;\": \"⟫\",\n\t\"rang;\": \"⟩\",\n\traquo: \"»\",\n\t\"Rarr;\": \"↠\",\n\t\"rArr;\": \"⇒\",\n\t\"rarr;\": \"→\",\n\t\"rcub;\": \"}\",\n\t\"rdca;\": \"⤷\",\n\t\"rdsh;\": \"↳\",\n\t\"real;\": \"ℜ\",\n\t\"rect;\": \"▭\",\n\t\"rHar;\": \"⥤\",\n\t\"rhov;\": \"ϱ\",\n\t\"ring;\": \"˚\",\n\t\"Ropf;\": \"ℝ\",\n\t\"ropf;\": \"𝕣\",\n\t\"rpar;\": \")\",\n\t\"Rscr;\": \"ℛ\",\n\t\"rscr;\": \"𝓇\",\n\t\"rsqb;\": \"]\",\n\t\"rtri;\": \"▹\",\n\t\"scap;\": \"⪸\",\n\t\"scnE;\": \"⪶\",\n\t\"sdot;\": \"⋅\",\n\t\"sect;\": \"§\",\n\t\"semi;\": \";\",\n\t\"sext;\": \"✶\",\n\t\"SHcy;\": \"Ш\",\n\t\"shcy;\": \"ш\",\n\t\"sime;\": \"≃\",\n\t\"simg;\": \"⪞\",\n\t\"siml;\": \"⪝\",\n\t\"smid;\": \"∣\",\n\t\"smte;\": \"⪬\",\n\t\"solb;\": \"⧄\",\n\t\"Sopf;\": \"𝕊\",\n\t\"sopf;\": \"𝕤\",\n\t\"spar;\": \"∥\",\n\t\"Sqrt;\": \"√\",\n\t\"squf;\": \"▪\",\n\t\"Sscr;\": \"𝒮\",\n\t\"sscr;\": \"𝓈\",\n\t\"Star;\": \"⋆\",\n\t\"star;\": \"☆\",\n\t\"subE;\": \"⫅\",\n\t\"sube;\": \"⊆\",\n\t\"succ;\": \"≻\",\n\t\"sung;\": \"♪\",\n\t\"sup1;\": \"¹\",\n\t\"sup2;\": \"²\",\n\t\"sup3;\": \"³\",\n\t\"supE;\": \"⫆\",\n\t\"supe;\": \"⊇\",\n\tszlig: \"ß\",\n\t\"tbrk;\": \"⎴\",\n\t\"tdot;\": \"⃛\",\n\tTHORN: \"Þ\",\n\tthorn: \"þ\",\n\ttimes: \"×\",\n\t\"tint;\": \"∭\",\n\t\"toea;\": \"⤨\",\n\t\"Topf;\": \"𝕋\",\n\t\"topf;\": \"𝕥\",\n\t\"tosa;\": \"⤩\",\n\t\"trie;\": \"≜\",\n\t\"Tscr;\": \"𝒯\",\n\t\"tscr;\": \"𝓉\",\n\t\"TScy;\": \"Ц\",\n\t\"tscy;\": \"ц\",\n\t\"Uarr;\": \"↟\",\n\t\"uArr;\": \"⇑\",\n\t\"uarr;\": \"↑\",\n\tUcirc: \"Û\",\n\tucirc: \"û\",\n\t\"uHar;\": \"⥣\",\n\t\"Uopf;\": \"𝕌\",\n\t\"uopf;\": \"𝕦\",\n\t\"Upsi;\": \"ϒ\",\n\t\"upsi;\": \"υ\",\n\t\"Uscr;\": \"𝒰\",\n\t\"uscr;\": \"𝓊\",\n\t\"utri;\": \"▵\",\n\t\"Uuml;\": \"Ü\",\n\t\"uuml;\": \"ü\",\n\t\"vArr;\": \"⇕\",\n\t\"varr;\": \"↕\",\n\t\"Vbar;\": \"⫫\",\n\t\"vBar;\": \"⫨\",\n\t\"Vert;\": \"‖\",\n\t\"vert;\": \"|\",\n\t\"Vopf;\": \"𝕍\",\n\t\"vopf;\": \"𝕧\",\n\t\"Vscr;\": \"𝒱\",\n\t\"vscr;\": \"𝓋\",\n\t\"Wopf;\": \"𝕎\",\n\t\"wopf;\": \"𝕨\",\n\t\"Wscr;\": \"𝒲\",\n\t\"wscr;\": \"𝓌\",\n\t\"xcap;\": \"⋂\",\n\t\"xcup;\": \"⋃\",\n\t\"xmap;\": \"⟼\",\n\t\"xnis;\": \"⋻\",\n\t\"Xopf;\": \"𝕏\",\n\t\"xopf;\": \"𝕩\",\n\t\"Xscr;\": \"𝒳\",\n\t\"xscr;\": \"𝓍\",\n\t\"xvee;\": \"⋁\",\n\t\"YAcy;\": \"Я\",\n\t\"yacy;\": \"я\",\n\t\"YIcy;\": \"Ї\",\n\t\"yicy;\": \"ї\",\n\t\"Yopf;\": \"𝕐\",\n\t\"yopf;\": \"𝕪\",\n\t\"Yscr;\": \"𝒴\",\n\t\"yscr;\": \"𝓎\",\n\t\"YUcy;\": \"Ю\",\n\t\"yucy;\": \"ю\",\n\t\"Yuml;\": \"Ÿ\",\n\t\"yuml;\": \"ÿ\",\n\t\"Zdot;\": \"Ż\",\n\t\"zdot;\": \"ż\",\n\t\"Zeta;\": \"Ζ\",\n\t\"zeta;\": \"ζ\",\n\t\"ZHcy;\": \"Ж\",\n\t\"zhcy;\": \"ж\",\n\t\"Zopf;\": \"ℤ\",\n\t\"zopf;\": \"𝕫\",\n\t\"Zscr;\": \"𝒵\",\n\t\"zscr;\": \"𝓏\",\n\t\"zwnj;\": \"‌\",\n\tAacute: \"Á\",\n\taacute: \"á\",\n\t\"Acirc;\": \"Â\",\n\t\"acirc;\": \"â\",\n\t\"acute;\": \"´\",\n\t\"AElig;\": \"Æ\",\n\t\"aelig;\": \"æ\",\n\tAgrave: \"À\",\n\tagrave: \"à\",\n\t\"aleph;\": \"ℵ\",\n\t\"Alpha;\": \"Α\",\n\t\"alpha;\": \"α\",\n\t\"Amacr;\": \"Ā\",\n\t\"amacr;\": \"ā\",\n\t\"amalg;\": \"⨿\",\n\t\"angle;\": \"∠\",\n\t\"angrt;\": \"∟\",\n\t\"angst;\": \"Å\",\n\t\"Aogon;\": \"Ą\",\n\t\"aogon;\": \"ą\",\n\t\"Aring;\": \"Å\",\n\t\"aring;\": \"å\",\n\t\"asymp;\": \"≈\",\n\tAtilde: \"Ã\",\n\tatilde: \"ã\",\n\t\"awint;\": \"⨑\",\n\t\"bcong;\": \"≌\",\n\t\"bdquo;\": \"„\",\n\t\"bepsi;\": \"϶\",\n\t\"blank;\": \"␣\",\n\t\"blk12;\": \"▒\",\n\t\"blk14;\": \"░\",\n\t\"blk34;\": \"▓\",\n\t\"block;\": \"█\",\n\t\"boxDL;\": \"╗\",\n\t\"boxDl;\": \"╖\",\n\t\"boxdL;\": \"╕\",\n\t\"boxdl;\": \"┐\",\n\t\"boxDR;\": \"╔\",\n\t\"boxDr;\": \"╓\",\n\t\"boxdR;\": \"╒\",\n\t\"boxdr;\": \"┌\",\n\t\"boxHD;\": \"╦\",\n\t\"boxHd;\": \"╤\",\n\t\"boxhD;\": \"╥\",\n\t\"boxhd;\": \"┬\",\n\t\"boxHU;\": \"╩\",\n\t\"boxHu;\": \"╧\",\n\t\"boxhU;\": \"╨\",\n\t\"boxhu;\": \"┴\",\n\t\"boxUL;\": \"╝\",\n\t\"boxUl;\": \"╜\",\n\t\"boxuL;\": \"╛\",\n\t\"boxul;\": \"┘\",\n\t\"boxUR;\": \"╚\",\n\t\"boxUr;\": \"╙\",\n\t\"boxuR;\": \"╘\",\n\t\"boxur;\": \"└\",\n\t\"boxVH;\": \"╬\",\n\t\"boxVh;\": \"╫\",\n\t\"boxvH;\": \"╪\",\n\t\"boxvh;\": \"┼\",\n\t\"boxVL;\": \"╣\",\n\t\"boxVl;\": \"╢\",\n\t\"boxvL;\": \"╡\",\n\t\"boxvl;\": \"┤\",\n\t\"boxVR;\": \"╠\",\n\t\"boxVr;\": \"╟\",\n\t\"boxvR;\": \"╞\",\n\t\"boxvr;\": \"├\",\n\t\"Breve;\": \"˘\",\n\t\"breve;\": \"˘\",\n\tbrvbar: \"¦\",\n\t\"bsemi;\": \"⁏\",\n\t\"bsime;\": \"⋍\",\n\t\"bsolb;\": \"⧅\",\n\t\"bumpE;\": \"⪮\",\n\t\"bumpe;\": \"≏\",\n\t\"caret;\": \"⁁\",\n\t\"caron;\": \"ˇ\",\n\t\"ccaps;\": \"⩍\",\n\tCcedil: \"Ç\",\n\tccedil: \"ç\",\n\t\"Ccirc;\": \"Ĉ\",\n\t\"ccirc;\": \"ĉ\",\n\t\"ccups;\": \"⩌\",\n\t\"cedil;\": \"¸\",\n\t\"check;\": \"✓\",\n\t\"clubs;\": \"♣\",\n\t\"Colon;\": \"∷\",\n\t\"colon;\": \":\",\n\t\"comma;\": \",\",\n\t\"crarr;\": \"↵\",\n\t\"Cross;\": \"⨯\",\n\t\"cross;\": \"✗\",\n\t\"csube;\": \"⫑\",\n\t\"csupe;\": \"⫒\",\n\t\"ctdot;\": \"⋯\",\n\t\"cuepr;\": \"⋞\",\n\t\"cuesc;\": \"⋟\",\n\t\"cupor;\": \"⩅\",\n\tcurren: \"¤\",\n\t\"cuvee;\": \"⋎\",\n\t\"cuwed;\": \"⋏\",\n\t\"cwint;\": \"∱\",\n\t\"Dashv;\": \"⫤\",\n\t\"dashv;\": \"⊣\",\n\t\"dblac;\": \"˝\",\n\t\"ddarr;\": \"⇊\",\n\t\"Delta;\": \"Δ\",\n\t\"delta;\": \"δ\",\n\t\"dharl;\": \"⇃\",\n\t\"dharr;\": \"⇂\",\n\t\"diams;\": \"♦\",\n\t\"disin;\": \"⋲\",\n\tdivide: \"÷\",\n\t\"doteq;\": \"≐\",\n\t\"dtdot;\": \"⋱\",\n\t\"dtrif;\": \"▾\",\n\t\"duarr;\": \"⇵\",\n\t\"duhar;\": \"⥯\",\n\tEacute: \"É\",\n\teacute: \"é\",\n\t\"Ecirc;\": \"Ê\",\n\t\"ecirc;\": \"ê\",\n\t\"eDDot;\": \"⩷\",\n\t\"efDot;\": \"≒\",\n\tEgrave: \"È\",\n\tegrave: \"è\",\n\t\"Emacr;\": \"Ē\",\n\t\"emacr;\": \"ē\",\n\t\"empty;\": \"∅\",\n\t\"Eogon;\": \"Ę\",\n\t\"eogon;\": \"ę\",\n\t\"eplus;\": \"⩱\",\n\t\"epsiv;\": \"ϵ\",\n\t\"eqsim;\": \"≂\",\n\t\"Equal;\": \"⩵\",\n\t\"equiv;\": \"≡\",\n\t\"erarr;\": \"⥱\",\n\t\"erDot;\": \"≓\",\n\t\"esdot;\": \"≐\",\n\t\"exist;\": \"∃\",\n\t\"fflig;\": \"ﬀ\",\n\t\"filig;\": \"ﬁ\",\n\t\"fjlig;\": \"fj\",\n\t\"fllig;\": \"ﬂ\",\n\t\"fltns;\": \"▱\",\n\t\"forkv;\": \"⫙\",\n\tfrac12: \"½\",\n\tfrac14: \"¼\",\n\tfrac34: \"¾\",\n\t\"frasl;\": \"⁄\",\n\t\"frown;\": \"⌢\",\n\t\"Gamma;\": \"Γ\",\n\t\"gamma;\": \"γ\",\n\t\"Gcirc;\": \"Ĝ\",\n\t\"gcirc;\": \"ĝ\",\n\t\"gescc;\": \"⪩\",\n\t\"gimel;\": \"ℷ\",\n\t\"gneqq;\": \"≩\",\n\t\"gnsim;\": \"⋧\",\n\t\"grave;\": \"`\",\n\t\"gsime;\": \"⪎\",\n\t\"gsiml;\": \"⪐\",\n\t\"gtcir;\": \"⩺\",\n\t\"gtdot;\": \"⋗\",\n\t\"Hacek;\": \"ˇ\",\n\t\"harrw;\": \"↭\",\n\t\"Hcirc;\": \"Ĥ\",\n\t\"hcirc;\": \"ĥ\",\n\t\"hoarr;\": \"⇿\",\n\tIacute: \"Í\",\n\tiacute: \"í\",\n\t\"Icirc;\": \"Î\",\n\t\"icirc;\": \"î\",\n\t\"iexcl;\": \"¡\",\n\tIgrave: \"Ì\",\n\tigrave: \"ì\",\n\t\"iiint;\": \"∭\",\n\t\"iiota;\": \"℩\",\n\t\"IJlig;\": \"Ĳ\",\n\t\"ijlig;\": \"ĳ\",\n\t\"Imacr;\": \"Ī\",\n\t\"imacr;\": \"ī\",\n\t\"image;\": \"ℑ\",\n\t\"imath;\": \"ı\",\n\t\"imped;\": \"Ƶ\",\n\t\"infin;\": \"∞\",\n\t\"Iogon;\": \"Į\",\n\t\"iogon;\": \"į\",\n\t\"iprod;\": \"⨼\",\n\tiquest: \"¿\",\n\t\"isinE;\": \"⋹\",\n\t\"isins;\": \"⋴\",\n\t\"isinv;\": \"∈\",\n\t\"Iukcy;\": \"І\",\n\t\"iukcy;\": \"і\",\n\t\"Jcirc;\": \"Ĵ\",\n\t\"jcirc;\": \"ĵ\",\n\t\"jmath;\": \"ȷ\",\n\t\"Jukcy;\": \"Є\",\n\t\"jukcy;\": \"є\",\n\t\"Kappa;\": \"Κ\",\n\t\"kappa;\": \"κ\",\n\t\"lAarr;\": \"⇚\",\n\t\"langd;\": \"⦑\",\n\t\"laquo;\": \"«\",\n\t\"larrb;\": \"⇤\",\n\t\"lates;\": \"⪭︀\",\n\t\"lBarr;\": \"⤎\",\n\t\"lbarr;\": \"⤌\",\n\t\"lbbrk;\": \"❲\",\n\t\"lbrke;\": \"⦋\",\n\t\"lceil;\": \"⌈\",\n\t\"ldquo;\": \"“\",\n\t\"lescc;\": \"⪨\",\n\t\"lhard;\": \"↽\",\n\t\"lharu;\": \"↼\",\n\t\"lhblk;\": \"▄\",\n\t\"llarr;\": \"⇇\",\n\t\"lltri;\": \"◺\",\n\t\"lneqq;\": \"≨\",\n\t\"lnsim;\": \"⋦\",\n\t\"loang;\": \"⟬\",\n\t\"loarr;\": \"⇽\",\n\t\"lobrk;\": \"⟦\",\n\t\"lopar;\": \"⦅\",\n\t\"lrarr;\": \"⇆\",\n\t\"lrhar;\": \"⇋\",\n\t\"lrtri;\": \"⊿\",\n\t\"lsime;\": \"⪍\",\n\t\"lsimg;\": \"⪏\",\n\t\"lsquo;\": \"‘\",\n\t\"ltcir;\": \"⩹\",\n\t\"ltdot;\": \"⋖\",\n\t\"ltrie;\": \"⊴\",\n\t\"ltrif;\": \"◂\",\n\t\"mdash;\": \"—\",\n\t\"mDDot;\": \"∺\",\n\t\"micro;\": \"µ\",\n\tmiddot: \"·\",\n\t\"minus;\": \"−\",\n\t\"mumap;\": \"⊸\",\n\t\"nabla;\": \"∇\",\n\t\"napid;\": \"≋̸\",\n\t\"napos;\": \"ŉ\",\n\t\"natur;\": \"♮\",\n\t\"nbump;\": \"≎̸\",\n\t\"ncong;\": \"≇\",\n\t\"ndash;\": \"–\",\n\t\"neArr;\": \"⇗\",\n\t\"nearr;\": \"↗\",\n\t\"nedot;\": \"≐̸\",\n\t\"nesim;\": \"≂̸\",\n\t\"ngeqq;\": \"≧̸\",\n\t\"ngsim;\": \"≵\",\n\t\"nhArr;\": \"⇎\",\n\t\"nharr;\": \"↮\",\n\t\"nhpar;\": \"⫲\",\n\t\"nlArr;\": \"⇍\",\n\t\"nlarr;\": \"↚\",\n\t\"nleqq;\": \"≦̸\",\n\t\"nless;\": \"≮\",\n\t\"nlsim;\": \"≴\",\n\t\"nltri;\": \"⋪\",\n\t\"notin;\": \"∉\",\n\t\"notni;\": \"∌\",\n\t\"npart;\": \"∂̸\",\n\t\"nprec;\": \"⊀\",\n\t\"nrArr;\": \"⇏\",\n\t\"nrarr;\": \"↛\",\n\t\"nrtri;\": \"⋫\",\n\t\"nsime;\": \"≄\",\n\t\"nsmid;\": \"∤\",\n\t\"nspar;\": \"∦\",\n\t\"nsubE;\": \"⫅̸\",\n\t\"nsube;\": \"⊈\",\n\t\"nsucc;\": \"⊁\",\n\t\"nsupE;\": \"⫆̸\",\n\t\"nsupe;\": \"⊉\",\n\tNtilde: \"Ñ\",\n\tntilde: \"ñ\",\n\t\"numsp;\": \" \",\n\t\"nvsim;\": \"∼⃒\",\n\t\"nwArr;\": \"⇖\",\n\t\"nwarr;\": \"↖\",\n\tOacute: \"Ó\",\n\toacute: \"ó\",\n\t\"Ocirc;\": \"Ô\",\n\t\"ocirc;\": \"ô\",\n\t\"odash;\": \"⊝\",\n\t\"OElig;\": \"Œ\",\n\t\"oelig;\": \"œ\",\n\t\"ofcir;\": \"⦿\",\n\tOgrave: \"Ò\",\n\tograve: \"ò\",\n\t\"ohbar;\": \"⦵\",\n\t\"olarr;\": \"↺\",\n\t\"olcir;\": \"⦾\",\n\t\"oline;\": \"‾\",\n\t\"Omacr;\": \"Ō\",\n\t\"omacr;\": \"ō\",\n\t\"Omega;\": \"Ω\",\n\t\"omega;\": \"ω\",\n\t\"operp;\": \"⦹\",\n\t\"oplus;\": \"⊕\",\n\t\"orarr;\": \"↻\",\n\t\"order;\": \"ℴ\",\n\tOslash: \"Ø\",\n\toslash: \"ø\",\n\tOtilde: \"Õ\",\n\totilde: \"õ\",\n\t\"ovbar;\": \"⌽\",\n\t\"parsl;\": \"⫽\",\n\t\"phone;\": \"☎\",\n\t\"plusb;\": \"⊞\",\n\t\"pluse;\": \"⩲\",\n\tplusmn: \"±\",\n\t\"pound;\": \"£\",\n\t\"prcue;\": \"≼\",\n\t\"Prime;\": \"″\",\n\t\"prime;\": \"′\",\n\t\"prnap;\": \"⪹\",\n\t\"prsim;\": \"≾\",\n\t\"quest;\": \"?\",\n\t\"rAarr;\": \"⇛\",\n\t\"radic;\": \"√\",\n\t\"rangd;\": \"⦒\",\n\t\"range;\": \"⦥\",\n\t\"raquo;\": \"»\",\n\t\"rarrb;\": \"⇥\",\n\t\"rarrc;\": \"⤳\",\n\t\"rarrw;\": \"↝\",\n\t\"ratio;\": \"∶\",\n\t\"RBarr;\": \"⤐\",\n\t\"rBarr;\": \"⤏\",\n\t\"rbarr;\": \"⤍\",\n\t\"rbbrk;\": \"❳\",\n\t\"rbrke;\": \"⦌\",\n\t\"rceil;\": \"⌉\",\n\t\"rdquo;\": \"”\",\n\t\"reals;\": \"ℝ\",\n\t\"rhard;\": \"⇁\",\n\t\"rharu;\": \"⇀\",\n\t\"rlarr;\": \"⇄\",\n\t\"rlhar;\": \"⇌\",\n\t\"rnmid;\": \"⫮\",\n\t\"roang;\": \"⟭\",\n\t\"roarr;\": \"⇾\",\n\t\"robrk;\": \"⟧\",\n\t\"ropar;\": \"⦆\",\n\t\"rrarr;\": \"⇉\",\n\t\"rsquo;\": \"’\",\n\t\"rtrie;\": \"⊵\",\n\t\"rtrif;\": \"▸\",\n\t\"sbquo;\": \"‚\",\n\t\"sccue;\": \"≽\",\n\t\"Scirc;\": \"Ŝ\",\n\t\"scirc;\": \"ŝ\",\n\t\"scnap;\": \"⪺\",\n\t\"scsim;\": \"≿\",\n\t\"sdotb;\": \"⊡\",\n\t\"sdote;\": \"⩦\",\n\t\"seArr;\": \"⇘\",\n\t\"searr;\": \"↘\",\n\t\"setmn;\": \"∖\",\n\t\"sharp;\": \"♯\",\n\t\"Sigma;\": \"Σ\",\n\t\"sigma;\": \"σ\",\n\t\"simeq;\": \"≃\",\n\t\"simgE;\": \"⪠\",\n\t\"simlE;\": \"⪟\",\n\t\"simne;\": \"≆\",\n\t\"slarr;\": \"←\",\n\t\"smile;\": \"⌣\",\n\t\"smtes;\": \"⪬︀\",\n\t\"sqcap;\": \"⊓\",\n\t\"sqcup;\": \"⊔\",\n\t\"sqsub;\": \"⊏\",\n\t\"sqsup;\": \"⊐\",\n\t\"srarr;\": \"→\",\n\t\"starf;\": \"★\",\n\t\"strns;\": \"¯\",\n\t\"subnE;\": \"⫋\",\n\t\"subne;\": \"⊊\",\n\t\"supnE;\": \"⫌\",\n\t\"supne;\": \"⊋\",\n\t\"swArr;\": \"⇙\",\n\t\"swarr;\": \"↙\",\n\t\"szlig;\": \"ß\",\n\t\"Theta;\": \"Θ\",\n\t\"theta;\": \"θ\",\n\t\"thkap;\": \"≈\",\n\t\"THORN;\": \"Þ\",\n\t\"thorn;\": \"þ\",\n\t\"Tilde;\": \"∼\",\n\t\"tilde;\": \"˜\",\n\t\"times;\": \"×\",\n\t\"TRADE;\": \"™\",\n\t\"trade;\": \"™\",\n\t\"trisb;\": \"⧍\",\n\t\"TSHcy;\": \"Ћ\",\n\t\"tshcy;\": \"ћ\",\n\t\"twixt;\": \"≬\",\n\tUacute: \"Ú\",\n\tuacute: \"ú\",\n\t\"Ubrcy;\": \"Ў\",\n\t\"ubrcy;\": \"ў\",\n\t\"Ucirc;\": \"Û\",\n\t\"ucirc;\": \"û\",\n\t\"udarr;\": \"⇅\",\n\t\"udhar;\": \"⥮\",\n\tUgrave: \"Ù\",\n\tugrave: \"ù\",\n\t\"uharl;\": \"↿\",\n\t\"uharr;\": \"↾\",\n\t\"uhblk;\": \"▀\",\n\t\"ultri;\": \"◸\",\n\t\"Umacr;\": \"Ū\",\n\t\"umacr;\": \"ū\",\n\t\"Union;\": \"⋃\",\n\t\"Uogon;\": \"Ų\",\n\t\"uogon;\": \"ų\",\n\t\"uplus;\": \"⊎\",\n\t\"upsih;\": \"ϒ\",\n\t\"UpTee;\": \"⊥\",\n\t\"Uring;\": \"Ů\",\n\t\"uring;\": \"ů\",\n\t\"urtri;\": \"◹\",\n\t\"utdot;\": \"⋰\",\n\t\"utrif;\": \"▴\",\n\t\"uuarr;\": \"⇈\",\n\t\"varpi;\": \"ϖ\",\n\t\"vBarv;\": \"⫩\",\n\t\"VDash;\": \"⊫\",\n\t\"Vdash;\": \"⊩\",\n\t\"vDash;\": \"⊨\",\n\t\"vdash;\": \"⊢\",\n\t\"veeeq;\": \"≚\",\n\t\"vltri;\": \"⊲\",\n\t\"vnsub;\": \"⊂⃒\",\n\t\"vnsup;\": \"⊃⃒\",\n\t\"vprop;\": \"∝\",\n\t\"vrtri;\": \"⊳\",\n\t\"Wcirc;\": \"Ŵ\",\n\t\"wcirc;\": \"ŵ\",\n\t\"Wedge;\": \"⋀\",\n\t\"wedge;\": \"∧\",\n\t\"xcirc;\": \"◯\",\n\t\"xdtri;\": \"▽\",\n\t\"xhArr;\": \"⟺\",\n\t\"xharr;\": \"⟷\",\n\t\"xlArr;\": \"⟸\",\n\t\"xlarr;\": \"⟵\",\n\t\"xodot;\": \"⨀\",\n\t\"xrArr;\": \"⟹\",\n\t\"xrarr;\": \"⟶\",\n\t\"xutri;\": \"△\",\n\tYacute: \"Ý\",\n\tyacute: \"ý\",\n\t\"Ycirc;\": \"Ŷ\",\n\t\"ycirc;\": \"ŷ\",\n\t\"Aacute;\": \"Á\",\n\t\"aacute;\": \"á\",\n\t\"Abreve;\": \"Ă\",\n\t\"abreve;\": \"ă\",\n\t\"Agrave;\": \"À\",\n\t\"agrave;\": \"à\",\n\t\"andand;\": \"⩕\",\n\t\"angmsd;\": \"∡\",\n\t\"angsph;\": \"∢\",\n\t\"apacir;\": \"⩯\",\n\t\"approx;\": \"≈\",\n\t\"Assign;\": \"≔\",\n\t\"Atilde;\": \"Ã\",\n\t\"atilde;\": \"ã\",\n\t\"barvee;\": \"⊽\",\n\t\"Barwed;\": \"⌆\",\n\t\"barwed;\": \"⌅\",\n\t\"becaus;\": \"∵\",\n\t\"bernou;\": \"ℬ\",\n\t\"bigcap;\": \"⋂\",\n\t\"bigcup;\": \"⋃\",\n\t\"bigvee;\": \"⋁\",\n\t\"bkarow;\": \"⤍\",\n\t\"bottom;\": \"⊥\",\n\t\"bowtie;\": \"⋈\",\n\t\"boxbox;\": \"⧉\",\n\t\"bprime;\": \"‵\",\n\t\"brvbar;\": \"¦\",\n\t\"bullet;\": \"•\",\n\t\"Bumpeq;\": \"≎\",\n\t\"bumpeq;\": \"≏\",\n\t\"Cacute;\": \"Ć\",\n\t\"cacute;\": \"ć\",\n\t\"capand;\": \"⩄\",\n\t\"capcap;\": \"⩋\",\n\t\"capcup;\": \"⩇\",\n\t\"capdot;\": \"⩀\",\n\t\"Ccaron;\": \"Č\",\n\t\"ccaron;\": \"č\",\n\t\"Ccedil;\": \"Ç\",\n\t\"ccedil;\": \"ç\",\n\t\"circeq;\": \"≗\",\n\t\"cirmid;\": \"⫯\",\n\t\"Colone;\": \"⩴\",\n\t\"colone;\": \"≔\",\n\t\"commat;\": \"@\",\n\t\"compfn;\": \"∘\",\n\t\"Conint;\": \"∯\",\n\t\"conint;\": \"∮\",\n\t\"coprod;\": \"∐\",\n\t\"copysr;\": \"℗\",\n\t\"cularr;\": \"↶\",\n\t\"CupCap;\": \"≍\",\n\t\"cupcap;\": \"⩆\",\n\t\"cupcup;\": \"⩊\",\n\t\"cupdot;\": \"⊍\",\n\t\"curarr;\": \"↷\",\n\t\"curren;\": \"¤\",\n\t\"cylcty;\": \"⌭\",\n\t\"Dagger;\": \"‡\",\n\t\"dagger;\": \"†\",\n\t\"daleth;\": \"ℸ\",\n\t\"Dcaron;\": \"Ď\",\n\t\"dcaron;\": \"ď\",\n\t\"dfisht;\": \"⥿\",\n\t\"divide;\": \"÷\",\n\t\"divonx;\": \"⋇\",\n\t\"dlcorn;\": \"⌞\",\n\t\"dlcrop;\": \"⌍\",\n\t\"dollar;\": \"$\",\n\t\"DotDot;\": \"⃜\",\n\t\"drcorn;\": \"⌟\",\n\t\"drcrop;\": \"⌌\",\n\t\"Dstrok;\": \"Đ\",\n\t\"dstrok;\": \"đ\",\n\t\"Eacute;\": \"É\",\n\t\"eacute;\": \"é\",\n\t\"easter;\": \"⩮\",\n\t\"Ecaron;\": \"Ě\",\n\t\"ecaron;\": \"ě\",\n\t\"ecolon;\": \"≕\",\n\t\"Egrave;\": \"È\",\n\t\"egrave;\": \"è\",\n\t\"egsdot;\": \"⪘\",\n\t\"elsdot;\": \"⪗\",\n\t\"emptyv;\": \"∅\",\n\t\"emsp13;\": \" \",\n\t\"emsp14;\": \" \",\n\t\"eparsl;\": \"⧣\",\n\t\"eqcirc;\": \"≖\",\n\t\"equals;\": \"=\",\n\t\"equest;\": \"≟\",\n\t\"Exists;\": \"∃\",\n\t\"female;\": \"♀\",\n\t\"ffilig;\": \"ﬃ\",\n\t\"ffllig;\": \"ﬄ\",\n\t\"ForAll;\": \"∀\",\n\t\"forall;\": \"∀\",\n\t\"frac12;\": \"½\",\n\t\"frac13;\": \"⅓\",\n\t\"frac14;\": \"¼\",\n\t\"frac15;\": \"⅕\",\n\t\"frac16;\": \"⅙\",\n\t\"frac18;\": \"⅛\",\n\t\"frac23;\": \"⅔\",\n\t\"frac25;\": \"⅖\",\n\t\"frac34;\": \"¾\",\n\t\"frac35;\": \"⅗\",\n\t\"frac38;\": \"⅜\",\n\t\"frac45;\": \"⅘\",\n\t\"frac56;\": \"⅚\",\n\t\"frac58;\": \"⅝\",\n\t\"frac78;\": \"⅞\",\n\t\"gacute;\": \"ǵ\",\n\t\"Gammad;\": \"Ϝ\",\n\t\"gammad;\": \"ϝ\",\n\t\"Gbreve;\": \"Ğ\",\n\t\"gbreve;\": \"ğ\",\n\t\"Gcedil;\": \"Ģ\",\n\t\"gesdot;\": \"⪀\",\n\t\"gesles;\": \"⪔\",\n\t\"gtlPar;\": \"⦕\",\n\t\"gtrarr;\": \"⥸\",\n\t\"gtrdot;\": \"⋗\",\n\t\"gtrsim;\": \"≳\",\n\t\"hairsp;\": \" \",\n\t\"hamilt;\": \"ℋ\",\n\t\"HARDcy;\": \"Ъ\",\n\t\"hardcy;\": \"ъ\",\n\t\"hearts;\": \"♥\",\n\t\"hellip;\": \"…\",\n\t\"hercon;\": \"⊹\",\n\t\"homtht;\": \"∻\",\n\t\"horbar;\": \"―\",\n\t\"hslash;\": \"ℏ\",\n\t\"Hstrok;\": \"Ħ\",\n\t\"hstrok;\": \"ħ\",\n\t\"hybull;\": \"⁃\",\n\t\"hyphen;\": \"‐\",\n\t\"Iacute;\": \"Í\",\n\t\"iacute;\": \"í\",\n\t\"Igrave;\": \"Ì\",\n\t\"igrave;\": \"ì\",\n\t\"iiiint;\": \"⨌\",\n\t\"iinfin;\": \"⧜\",\n\t\"incare;\": \"℅\",\n\t\"inodot;\": \"ı\",\n\t\"intcal;\": \"⊺\",\n\t\"iquest;\": \"¿\",\n\t\"isinsv;\": \"⋳\",\n\t\"Itilde;\": \"Ĩ\",\n\t\"itilde;\": \"ĩ\",\n\t\"Jsercy;\": \"Ј\",\n\t\"jsercy;\": \"ј\",\n\t\"kappav;\": \"ϰ\",\n\t\"Kcedil;\": \"Ķ\",\n\t\"kcedil;\": \"ķ\",\n\t\"kgreen;\": \"ĸ\",\n\t\"Lacute;\": \"Ĺ\",\n\t\"lacute;\": \"ĺ\",\n\t\"lagran;\": \"ℒ\",\n\t\"Lambda;\": \"Λ\",\n\t\"lambda;\": \"λ\",\n\t\"langle;\": \"⟨\",\n\t\"larrfs;\": \"⤝\",\n\t\"larrhk;\": \"↩\",\n\t\"larrlp;\": \"↫\",\n\t\"larrpl;\": \"⤹\",\n\t\"larrtl;\": \"↢\",\n\t\"lAtail;\": \"⤛\",\n\t\"latail;\": \"⤙\",\n\t\"lbrace;\": \"{\",\n\t\"lbrack;\": \"[\",\n\t\"Lcaron;\": \"Ľ\",\n\t\"lcaron;\": \"ľ\",\n\t\"Lcedil;\": \"Ļ\",\n\t\"lcedil;\": \"ļ\",\n\t\"ldquor;\": \"„\",\n\t\"lesdot;\": \"⩿\",\n\t\"lesges;\": \"⪓\",\n\t\"lfisht;\": \"⥼\",\n\t\"lfloor;\": \"⌊\",\n\t\"lharul;\": \"⥪\",\n\t\"llhard;\": \"⥫\",\n\t\"Lmidot;\": \"Ŀ\",\n\t\"lmidot;\": \"ŀ\",\n\t\"lmoust;\": \"⎰\",\n\t\"loplus;\": \"⨭\",\n\t\"lowast;\": \"∗\",\n\t\"lowbar;\": \"_\",\n\t\"lparlt;\": \"⦓\",\n\t\"lrhard;\": \"⥭\",\n\t\"lsaquo;\": \"‹\",\n\t\"lsquor;\": \"‚\",\n\t\"Lstrok;\": \"Ł\",\n\t\"lstrok;\": \"ł\",\n\t\"lthree;\": \"⋋\",\n\t\"ltimes;\": \"⋉\",\n\t\"ltlarr;\": \"⥶\",\n\t\"ltrPar;\": \"⦖\",\n\t\"mapsto;\": \"↦\",\n\t\"marker;\": \"▮\",\n\t\"mcomma;\": \"⨩\",\n\t\"midast;\": \"*\",\n\t\"midcir;\": \"⫰\",\n\t\"middot;\": \"·\",\n\t\"minusb;\": \"⊟\",\n\t\"minusd;\": \"∸\",\n\t\"mnplus;\": \"∓\",\n\t\"models;\": \"⊧\",\n\t\"mstpos;\": \"∾\",\n\t\"Nacute;\": \"Ń\",\n\t\"nacute;\": \"ń\",\n\t\"nbumpe;\": \"≏̸\",\n\t\"Ncaron;\": \"Ň\",\n\t\"ncaron;\": \"ň\",\n\t\"Ncedil;\": \"Ņ\",\n\t\"ncedil;\": \"ņ\",\n\t\"nearhk;\": \"⤤\",\n\t\"nequiv;\": \"≢\",\n\t\"nesear;\": \"⤨\",\n\t\"nexist;\": \"∄\",\n\t\"nltrie;\": \"⋬\",\n\t\"notinE;\": \"⋹̸\",\n\t\"nparsl;\": \"⫽⃥\",\n\t\"nprcue;\": \"⋠\",\n\t\"nrarrc;\": \"⤳̸\",\n\t\"nrarrw;\": \"↝̸\",\n\t\"nrtrie;\": \"⋭\",\n\t\"nsccue;\": \"⋡\",\n\t\"nsimeq;\": \"≄\",\n\t\"Ntilde;\": \"Ñ\",\n\t\"ntilde;\": \"ñ\",\n\t\"numero;\": \"№\",\n\t\"nVDash;\": \"⊯\",\n\t\"nVdash;\": \"⊮\",\n\t\"nvDash;\": \"⊭\",\n\t\"nvdash;\": \"⊬\",\n\t\"nvHarr;\": \"⤄\",\n\t\"nvlArr;\": \"⤂\",\n\t\"nvrArr;\": \"⤃\",\n\t\"nwarhk;\": \"⤣\",\n\t\"nwnear;\": \"⤧\",\n\t\"Oacute;\": \"Ó\",\n\t\"oacute;\": \"ó\",\n\t\"Odblac;\": \"Ő\",\n\t\"odblac;\": \"ő\",\n\t\"odsold;\": \"⦼\",\n\t\"Ograve;\": \"Ò\",\n\t\"ograve;\": \"ò\",\n\t\"ominus;\": \"⊖\",\n\t\"origof;\": \"⊶\",\n\t\"Oslash;\": \"Ø\",\n\t\"oslash;\": \"ø\",\n\t\"Otilde;\": \"Õ\",\n\t\"otilde;\": \"õ\",\n\t\"Otimes;\": \"⨷\",\n\t\"otimes;\": \"⊗\",\n\t\"parsim;\": \"⫳\",\n\t\"percnt;\": \"%\",\n\t\"period;\": \".\",\n\t\"permil;\": \"‰\",\n\t\"phmmat;\": \"ℳ\",\n\t\"planck;\": \"ℏ\",\n\t\"plankv;\": \"ℏ\",\n\t\"plusdo;\": \"∔\",\n\t\"plusdu;\": \"⨥\",\n\t\"plusmn;\": \"±\",\n\t\"preceq;\": \"⪯\",\n\t\"primes;\": \"ℙ\",\n\t\"prnsim;\": \"⋨\",\n\t\"propto;\": \"∝\",\n\t\"prurel;\": \"⊰\",\n\t\"puncsp;\": \" \",\n\t\"qprime;\": \"⁗\",\n\t\"Racute;\": \"Ŕ\",\n\t\"racute;\": \"ŕ\",\n\t\"rangle;\": \"⟩\",\n\t\"rarrap;\": \"⥵\",\n\t\"rarrfs;\": \"⤞\",\n\t\"rarrhk;\": \"↪\",\n\t\"rarrlp;\": \"↬\",\n\t\"rarrpl;\": \"⥅\",\n\t\"Rarrtl;\": \"⤖\",\n\t\"rarrtl;\": \"↣\",\n\t\"rAtail;\": \"⤜\",\n\t\"ratail;\": \"⤚\",\n\t\"rbrace;\": \"}\",\n\t\"rbrack;\": \"]\",\n\t\"Rcaron;\": \"Ř\",\n\t\"rcaron;\": \"ř\",\n\t\"Rcedil;\": \"Ŗ\",\n\t\"rcedil;\": \"ŗ\",\n\t\"rdquor;\": \"”\",\n\t\"rfisht;\": \"⥽\",\n\t\"rfloor;\": \"⌋\",\n\t\"rharul;\": \"⥬\",\n\t\"rmoust;\": \"⎱\",\n\t\"roplus;\": \"⨮\",\n\t\"rpargt;\": \"⦔\",\n\t\"rsaquo;\": \"›\",\n\t\"rsquor;\": \"’\",\n\t\"rthree;\": \"⋌\",\n\t\"rtimes;\": \"⋊\",\n\t\"Sacute;\": \"Ś\",\n\t\"sacute;\": \"ś\",\n\t\"Scaron;\": \"Š\",\n\t\"scaron;\": \"š\",\n\t\"Scedil;\": \"Ş\",\n\t\"scedil;\": \"ş\",\n\t\"scnsim;\": \"⋩\",\n\t\"searhk;\": \"⤥\",\n\t\"seswar;\": \"⤩\",\n\t\"sfrown;\": \"⌢\",\n\t\"SHCHcy;\": \"Щ\",\n\t\"shchcy;\": \"щ\",\n\t\"sigmaf;\": \"ς\",\n\t\"sigmav;\": \"ς\",\n\t\"simdot;\": \"⩪\",\n\t\"smashp;\": \"⨳\",\n\t\"SOFTcy;\": \"Ь\",\n\t\"softcy;\": \"ь\",\n\t\"solbar;\": \"⌿\",\n\t\"spades;\": \"♠\",\n\t\"sqcaps;\": \"⊓︀\",\n\t\"sqcups;\": \"⊔︀\",\n\t\"sqsube;\": \"⊑\",\n\t\"sqsupe;\": \"⊒\",\n\t\"Square;\": \"□\",\n\t\"square;\": \"□\",\n\t\"squarf;\": \"▪\",\n\t\"ssetmn;\": \"∖\",\n\t\"ssmile;\": \"⌣\",\n\t\"sstarf;\": \"⋆\",\n\t\"subdot;\": \"⪽\",\n\t\"Subset;\": \"⋐\",\n\t\"subset;\": \"⊂\",\n\t\"subsim;\": \"⫇\",\n\t\"subsub;\": \"⫕\",\n\t\"subsup;\": \"⫓\",\n\t\"succeq;\": \"⪰\",\n\t\"supdot;\": \"⪾\",\n\t\"Supset;\": \"⋑\",\n\t\"supset;\": \"⊃\",\n\t\"supsim;\": \"⫈\",\n\t\"supsub;\": \"⫔\",\n\t\"supsup;\": \"⫖\",\n\t\"swarhk;\": \"⤦\",\n\t\"swnwar;\": \"⤪\",\n\t\"target;\": \"⌖\",\n\t\"Tcaron;\": \"Ť\",\n\t\"tcaron;\": \"ť\",\n\t\"Tcedil;\": \"Ţ\",\n\t\"tcedil;\": \"ţ\",\n\t\"telrec;\": \"⌕\",\n\t\"there4;\": \"∴\",\n\t\"thetav;\": \"ϑ\",\n\t\"thinsp;\": \" \",\n\t\"thksim;\": \"∼\",\n\t\"timesb;\": \"⊠\",\n\t\"timesd;\": \"⨰\",\n\t\"topbot;\": \"⌶\",\n\t\"topcir;\": \"⫱\",\n\t\"tprime;\": \"‴\",\n\t\"tridot;\": \"◬\",\n\t\"Tstrok;\": \"Ŧ\",\n\t\"tstrok;\": \"ŧ\",\n\t\"Uacute;\": \"Ú\",\n\t\"uacute;\": \"ú\",\n\t\"Ubreve;\": \"Ŭ\",\n\t\"ubreve;\": \"ŭ\",\n\t\"Udblac;\": \"Ű\",\n\t\"udblac;\": \"ű\",\n\t\"ufisht;\": \"⥾\",\n\t\"Ugrave;\": \"Ù\",\n\t\"ugrave;\": \"ù\",\n\t\"ulcorn;\": \"⌜\",\n\t\"ulcrop;\": \"⌏\",\n\t\"urcorn;\": \"⌝\",\n\t\"urcrop;\": \"⌎\",\n\t\"Utilde;\": \"Ũ\",\n\t\"utilde;\": \"ũ\",\n\t\"vangrt;\": \"⦜\",\n\t\"varphi;\": \"ϕ\",\n\t\"varrho;\": \"ϱ\",\n\t\"Vdashl;\": \"⫦\",\n\t\"veebar;\": \"⊻\",\n\t\"vellip;\": \"⋮\",\n\t\"Verbar;\": \"‖\",\n\t\"verbar;\": \"|\",\n\t\"vsubnE;\": \"⫋︀\",\n\t\"vsubne;\": \"⊊︀\",\n\t\"vsupnE;\": \"⫌︀\",\n\t\"vsupne;\": \"⊋︀\",\n\t\"Vvdash;\": \"⊪\",\n\t\"wedbar;\": \"⩟\",\n\t\"wedgeq;\": \"≙\",\n\t\"weierp;\": \"℘\",\n\t\"wreath;\": \"≀\",\n\t\"xoplus;\": \"⨁\",\n\t\"xotime;\": \"⨂\",\n\t\"xsqcup;\": \"⨆\",\n\t\"xuplus;\": \"⨄\",\n\t\"xwedge;\": \"⋀\",\n\t\"Yacute;\": \"Ý\",\n\t\"yacute;\": \"ý\",\n\t\"Zacute;\": \"Ź\",\n\t\"zacute;\": \"ź\",\n\t\"Zcaron;\": \"Ž\",\n\t\"zcaron;\": \"ž\",\n\t\"zeetrf;\": \"ℨ\",\n\t\"alefsym;\": \"ℵ\",\n\t\"angrtvb;\": \"⊾\",\n\t\"angzarr;\": \"⍼\",\n\t\"asympeq;\": \"≍\",\n\t\"backsim;\": \"∽\",\n\t\"Because;\": \"∵\",\n\t\"because;\": \"∵\",\n\t\"bemptyv;\": \"⦰\",\n\t\"between;\": \"≬\",\n\t\"bigcirc;\": \"◯\",\n\t\"bigodot;\": \"⨀\",\n\t\"bigstar;\": \"★\",\n\t\"bnequiv;\": \"≡⃥\",\n\t\"boxplus;\": \"⊞\",\n\t\"Cayleys;\": \"ℭ\",\n\t\"Cconint;\": \"∰\",\n\t\"ccupssm;\": \"⩐\",\n\t\"Cedilla;\": \"¸\",\n\t\"cemptyv;\": \"⦲\",\n\t\"cirscir;\": \"⧂\",\n\t\"coloneq;\": \"≔\",\n\t\"congdot;\": \"⩭\",\n\t\"cudarrl;\": \"⤸\",\n\t\"cudarrr;\": \"⤵\",\n\t\"cularrp;\": \"⤽\",\n\t\"curarrm;\": \"⤼\",\n\t\"dbkarow;\": \"⤏\",\n\t\"ddagger;\": \"‡\",\n\t\"ddotseq;\": \"⩷\",\n\t\"demptyv;\": \"⦱\",\n\t\"Diamond;\": \"⋄\",\n\t\"diamond;\": \"⋄\",\n\t\"digamma;\": \"ϝ\",\n\t\"dotplus;\": \"∔\",\n\t\"DownTee;\": \"⊤\",\n\t\"dwangle;\": \"⦦\",\n\t\"Element;\": \"∈\",\n\t\"Epsilon;\": \"Ε\",\n\t\"epsilon;\": \"ε\",\n\t\"eqcolon;\": \"≕\",\n\t\"equivDD;\": \"⩸\",\n\t\"gesdoto;\": \"⪂\",\n\t\"gtquest;\": \"⩼\",\n\t\"gtrless;\": \"≷\",\n\t\"harrcir;\": \"⥈\",\n\t\"Implies;\": \"⇒\",\n\t\"intprod;\": \"⨼\",\n\t\"isindot;\": \"⋵\",\n\t\"larrbfs;\": \"⤟\",\n\t\"larrsim;\": \"⥳\",\n\t\"lbrksld;\": \"⦏\",\n\t\"lbrkslu;\": \"⦍\",\n\t\"ldrdhar;\": \"⥧\",\n\t\"LeftTee;\": \"⊣\",\n\t\"lesdoto;\": \"⪁\",\n\t\"lessdot;\": \"⋖\",\n\t\"lessgtr;\": \"≶\",\n\t\"lesssim;\": \"≲\",\n\t\"lotimes;\": \"⨴\",\n\t\"lozenge;\": \"◊\",\n\t\"ltquest;\": \"⩻\",\n\t\"luruhar;\": \"⥦\",\n\t\"maltese;\": \"✠\",\n\t\"minusdu;\": \"⨪\",\n\t\"napprox;\": \"≉\",\n\t\"natural;\": \"♮\",\n\t\"nearrow;\": \"↗\",\n\t\"NewLine;\": \"\\n\",\n\t\"nexists;\": \"∄\",\n\t\"NoBreak;\": \"⁠\",\n\t\"notinva;\": \"∉\",\n\t\"notinvb;\": \"⋷\",\n\t\"notinvc;\": \"⋶\",\n\t\"NotLess;\": \"≮\",\n\t\"notniva;\": \"∌\",\n\t\"notnivb;\": \"⋾\",\n\t\"notnivc;\": \"⋽\",\n\t\"npolint;\": \"⨔\",\n\t\"npreceq;\": \"⪯̸\",\n\t\"nsqsube;\": \"⋢\",\n\t\"nsqsupe;\": \"⋣\",\n\t\"nsubset;\": \"⊂⃒\",\n\t\"nsucceq;\": \"⪰̸\",\n\t\"nsupset;\": \"⊃⃒\",\n\t\"nvinfin;\": \"⧞\",\n\t\"nvltrie;\": \"⊴⃒\",\n\t\"nvrtrie;\": \"⊵⃒\",\n\t\"nwarrow;\": \"↖\",\n\t\"olcross;\": \"⦻\",\n\t\"Omicron;\": \"Ο\",\n\t\"omicron;\": \"ο\",\n\t\"orderof;\": \"ℴ\",\n\t\"orslope;\": \"⩗\",\n\t\"OverBar;\": \"‾\",\n\t\"pertenk;\": \"‱\",\n\t\"planckh;\": \"ℎ\",\n\t\"pluscir;\": \"⨢\",\n\t\"plussim;\": \"⨦\",\n\t\"plustwo;\": \"⨧\",\n\t\"precsim;\": \"≾\",\n\t\"Product;\": \"∏\",\n\t\"quatint;\": \"⨖\",\n\t\"questeq;\": \"≟\",\n\t\"rarrbfs;\": \"⤠\",\n\t\"rarrsim;\": \"⥴\",\n\t\"rbrksld;\": \"⦎\",\n\t\"rbrkslu;\": \"⦐\",\n\t\"rdldhar;\": \"⥩\",\n\t\"realine;\": \"ℛ\",\n\t\"rotimes;\": \"⨵\",\n\t\"ruluhar;\": \"⥨\",\n\t\"searrow;\": \"↘\",\n\t\"simplus;\": \"⨤\",\n\t\"simrarr;\": \"⥲\",\n\t\"subedot;\": \"⫃\",\n\t\"submult;\": \"⫁\",\n\t\"subplus;\": \"⪿\",\n\t\"subrarr;\": \"⥹\",\n\t\"succsim;\": \"≿\",\n\t\"supdsub;\": \"⫘\",\n\t\"supedot;\": \"⫄\",\n\t\"suphsol;\": \"⟉\",\n\t\"suphsub;\": \"⫗\",\n\t\"suplarr;\": \"⥻\",\n\t\"supmult;\": \"⫂\",\n\t\"supplus;\": \"⫀\",\n\t\"swarrow;\": \"↙\",\n\t\"topfork;\": \"⫚\",\n\t\"triplus;\": \"⨹\",\n\t\"tritime;\": \"⨻\",\n\t\"UpArrow;\": \"↑\",\n\t\"Uparrow;\": \"⇑\",\n\t\"uparrow;\": \"↑\",\n\t\"Upsilon;\": \"Υ\",\n\t\"upsilon;\": \"υ\",\n\t\"uwangle;\": \"⦧\",\n\t\"vzigzag;\": \"⦚\",\n\t\"zigrarr;\": \"⇝\",\n\t\"andslope;\": \"⩘\",\n\t\"angmsdaa;\": \"⦨\",\n\t\"angmsdab;\": \"⦩\",\n\t\"angmsdac;\": \"⦪\",\n\t\"angmsdad;\": \"⦫\",\n\t\"angmsdae;\": \"⦬\",\n\t\"angmsdaf;\": \"⦭\",\n\t\"angmsdag;\": \"⦮\",\n\t\"angmsdah;\": \"⦯\",\n\t\"angrtvbd;\": \"⦝\",\n\t\"approxeq;\": \"≊\",\n\t\"awconint;\": \"∳\",\n\t\"backcong;\": \"≌\",\n\t\"barwedge;\": \"⌅\",\n\t\"bbrktbrk;\": \"⎶\",\n\t\"bigoplus;\": \"⨁\",\n\t\"bigsqcup;\": \"⨆\",\n\t\"biguplus;\": \"⨄\",\n\t\"bigwedge;\": \"⋀\",\n\t\"boxminus;\": \"⊟\",\n\t\"boxtimes;\": \"⊠\",\n\t\"bsolhsub;\": \"⟈\",\n\t\"capbrcup;\": \"⩉\",\n\t\"circledR;\": \"®\",\n\t\"circledS;\": \"Ⓢ\",\n\t\"cirfnint;\": \"⨐\",\n\t\"clubsuit;\": \"♣\",\n\t\"cupbrcap;\": \"⩈\",\n\t\"curlyvee;\": \"⋎\",\n\t\"cwconint;\": \"∲\",\n\t\"DDotrahd;\": \"⤑\",\n\t\"doteqdot;\": \"≑\",\n\t\"DotEqual;\": \"≐\",\n\t\"dotminus;\": \"∸\",\n\t\"drbkarow;\": \"⤐\",\n\t\"dzigrarr;\": \"⟿\",\n\t\"elinters;\": \"⏧\",\n\t\"emptyset;\": \"∅\",\n\t\"eqvparsl;\": \"⧥\",\n\t\"fpartint;\": \"⨍\",\n\t\"geqslant;\": \"⩾\",\n\t\"gesdotol;\": \"⪄\",\n\t\"gnapprox;\": \"⪊\",\n\t\"hksearow;\": \"⤥\",\n\t\"hkswarow;\": \"⤦\",\n\t\"imagline;\": \"ℐ\",\n\t\"imagpart;\": \"ℑ\",\n\t\"infintie;\": \"⧝\",\n\t\"integers;\": \"ℤ\",\n\t\"Integral;\": \"∫\",\n\t\"intercal;\": \"⊺\",\n\t\"intlarhk;\": \"⨗\",\n\t\"laemptyv;\": \"⦴\",\n\t\"ldrushar;\": \"⥋\",\n\t\"leqslant;\": \"⩽\",\n\t\"lesdotor;\": \"⪃\",\n\t\"LessLess;\": \"⪡\",\n\t\"llcorner;\": \"⌞\",\n\t\"lnapprox;\": \"⪉\",\n\t\"lrcorner;\": \"⌟\",\n\t\"lurdshar;\": \"⥊\",\n\t\"mapstoup;\": \"↥\",\n\t\"multimap;\": \"⊸\",\n\t\"naturals;\": \"ℕ\",\n\t\"ncongdot;\": \"⩭̸\",\n\t\"NotEqual;\": \"≠\",\n\t\"notindot;\": \"⋵̸\",\n\t\"NotTilde;\": \"≁\",\n\t\"otimesas;\": \"⨶\",\n\t\"parallel;\": \"∥\",\n\t\"PartialD;\": \"∂\",\n\t\"plusacir;\": \"⨣\",\n\t\"pointint;\": \"⨕\",\n\t\"Precedes;\": \"≺\",\n\t\"precneqq;\": \"⪵\",\n\t\"precnsim;\": \"⋨\",\n\t\"profalar;\": \"⌮\",\n\t\"profline;\": \"⌒\",\n\t\"profsurf;\": \"⌓\",\n\t\"raemptyv;\": \"⦳\",\n\t\"realpart;\": \"ℜ\",\n\t\"RightTee;\": \"⊢\",\n\t\"rppolint;\": \"⨒\",\n\t\"rtriltri;\": \"⧎\",\n\t\"scpolint;\": \"⨓\",\n\t\"setminus;\": \"∖\",\n\t\"shortmid;\": \"∣\",\n\t\"smeparsl;\": \"⧤\",\n\t\"sqsubset;\": \"⊏\",\n\t\"sqsupset;\": \"⊐\",\n\t\"subseteq;\": \"⊆\",\n\t\"Succeeds;\": \"≻\",\n\t\"succneqq;\": \"⪶\",\n\t\"succnsim;\": \"⋩\",\n\t\"SuchThat;\": \"∋\",\n\t\"Superset;\": \"⊃\",\n\t\"supseteq;\": \"⊇\",\n\t\"thetasym;\": \"ϑ\",\n\t\"thicksim;\": \"∼\",\n\t\"timesbar;\": \"⨱\",\n\t\"triangle;\": \"▵\",\n\t\"triminus;\": \"⨺\",\n\t\"trpezium;\": \"⏢\",\n\t\"Uarrocir;\": \"⥉\",\n\t\"ulcorner;\": \"⌜\",\n\t\"UnderBar;\": \"_\",\n\t\"urcorner;\": \"⌝\",\n\t\"varkappa;\": \"ϰ\",\n\t\"varsigma;\": \"ς\",\n\t\"vartheta;\": \"ϑ\",\n\t\"backprime;\": \"‵\",\n\t\"backsimeq;\": \"⋍\",\n\t\"Backslash;\": \"∖\",\n\t\"bigotimes;\": \"⨂\",\n\t\"CenterDot;\": \"·\",\n\t\"centerdot;\": \"·\",\n\t\"checkmark;\": \"✓\",\n\t\"CircleDot;\": \"⊙\",\n\t\"complexes;\": \"ℂ\",\n\t\"Congruent;\": \"≡\",\n\t\"Coproduct;\": \"∐\",\n\t\"dotsquare;\": \"⊡\",\n\t\"DoubleDot;\": \"¨\",\n\t\"DownArrow;\": \"↓\",\n\t\"Downarrow;\": \"⇓\",\n\t\"downarrow;\": \"↓\",\n\t\"DownBreve;\": \"̑\",\n\t\"gtrapprox;\": \"⪆\",\n\t\"gtreqless;\": \"⋛\",\n\t\"gvertneqq;\": \"≩︀\",\n\t\"heartsuit;\": \"♥\",\n\t\"HumpEqual;\": \"≏\",\n\t\"LeftArrow;\": \"←\",\n\t\"Leftarrow;\": \"⇐\",\n\t\"leftarrow;\": \"←\",\n\t\"LeftFloor;\": \"⌊\",\n\t\"lesseqgtr;\": \"⋚\",\n\t\"LessTilde;\": \"≲\",\n\t\"lvertneqq;\": \"≨︀\",\n\t\"Mellintrf;\": \"ℳ\",\n\t\"MinusPlus;\": \"∓\",\n\t\"ngeqslant;\": \"⩾̸\",\n\t\"nleqslant;\": \"⩽̸\",\n\t\"NotCupCap;\": \"≭\",\n\t\"NotExists;\": \"∄\",\n\t\"NotSubset;\": \"⊂⃒\",\n\t\"nparallel;\": \"∦\",\n\t\"nshortmid;\": \"∤\",\n\t\"nsubseteq;\": \"⊈\",\n\t\"nsupseteq;\": \"⊉\",\n\t\"OverBrace;\": \"⏞\",\n\t\"pitchfork;\": \"⋔\",\n\t\"PlusMinus;\": \"±\",\n\t\"rationals;\": \"ℚ\",\n\t\"spadesuit;\": \"♠\",\n\t\"subseteqq;\": \"⫅\",\n\t\"subsetneq;\": \"⊊\",\n\t\"supseteqq;\": \"⫆\",\n\t\"supsetneq;\": \"⊋\",\n\t\"Therefore;\": \"∴\",\n\t\"therefore;\": \"∴\",\n\t\"ThinSpace;\": \" \",\n\t\"triangleq;\": \"≜\",\n\t\"TripleDot;\": \"⃛\",\n\t\"UnionPlus;\": \"⊎\",\n\t\"varpropto;\": \"∝\",\n\t\"Bernoullis;\": \"ℬ\",\n\t\"circledast;\": \"⊛\",\n\t\"CirclePlus;\": \"⊕\",\n\t\"complement;\": \"∁\",\n\t\"curlywedge;\": \"⋏\",\n\t\"eqslantgtr;\": \"⪖\",\n\t\"EqualTilde;\": \"≂\",\n\t\"Fouriertrf;\": \"ℱ\",\n\t\"gtreqqless;\": \"⪌\",\n\t\"ImaginaryI;\": \"ⅈ\",\n\t\"Laplacetrf;\": \"ℒ\",\n\t\"LeftVector;\": \"↼\",\n\t\"lessapprox;\": \"⪅\",\n\t\"lesseqqgtr;\": \"⪋\",\n\t\"Lleftarrow;\": \"⇚\",\n\t\"lmoustache;\": \"⎰\",\n\t\"longmapsto;\": \"⟼\",\n\t\"mapstodown;\": \"↧\",\n\t\"mapstoleft;\": \"↤\",\n\t\"nLeftarrow;\": \"⇍\",\n\t\"nleftarrow;\": \"↚\",\n\t\"NotElement;\": \"∉\",\n\t\"NotGreater;\": \"≯\",\n\t\"nsubseteqq;\": \"⫅̸\",\n\t\"nsupseteqq;\": \"⫆̸\",\n\t\"precapprox;\": \"⪷\",\n\t\"Proportion;\": \"∷\",\n\t\"RightArrow;\": \"→\",\n\t\"Rightarrow;\": \"⇒\",\n\t\"rightarrow;\": \"→\",\n\t\"RightFloor;\": \"⌋\",\n\t\"rmoustache;\": \"⎱\",\n\t\"sqsubseteq;\": \"⊑\",\n\t\"sqsupseteq;\": \"⊒\",\n\t\"subsetneqq;\": \"⫋\",\n\t\"succapprox;\": \"⪸\",\n\t\"supsetneqq;\": \"⫌\",\n\t\"ThickSpace;\": \"  \",\n\t\"TildeEqual;\": \"≃\",\n\t\"TildeTilde;\": \"≈\",\n\t\"UnderBrace;\": \"⏟\",\n\t\"UpArrowBar;\": \"⤒\",\n\t\"UpTeeArrow;\": \"↥\",\n\t\"upuparrows;\": \"⇈\",\n\t\"varepsilon;\": \"ϵ\",\n\t\"varnothing;\": \"∅\",\n\t\"backepsilon;\": \"϶\",\n\t\"blacksquare;\": \"▪\",\n\t\"circledcirc;\": \"⊚\",\n\t\"circleddash;\": \"⊝\",\n\t\"CircleMinus;\": \"⊖\",\n\t\"CircleTimes;\": \"⊗\",\n\t\"curlyeqprec;\": \"⋞\",\n\t\"curlyeqsucc;\": \"⋟\",\n\t\"diamondsuit;\": \"♦\",\n\t\"eqslantless;\": \"⪕\",\n\t\"Equilibrium;\": \"⇌\",\n\t\"expectation;\": \"ℰ\",\n\t\"GreaterLess;\": \"≷\",\n\t\"LeftCeiling;\": \"⌈\",\n\t\"LessGreater;\": \"≶\",\n\t\"MediumSpace;\": \" \",\n\t\"NotLessLess;\": \"≪̸\",\n\t\"NotPrecedes;\": \"⊀\",\n\t\"NotSucceeds;\": \"⊁\",\n\t\"NotSuperset;\": \"⊃⃒\",\n\t\"nRightarrow;\": \"⇏\",\n\t\"nrightarrow;\": \"↛\",\n\t\"OverBracket;\": \"⎴\",\n\t\"preccurlyeq;\": \"≼\",\n\t\"precnapprox;\": \"⪹\",\n\t\"quaternions;\": \"ℍ\",\n\t\"RightVector;\": \"⇀\",\n\t\"Rrightarrow;\": \"⇛\",\n\t\"RuleDelayed;\": \"⧴\",\n\t\"SmallCircle;\": \"∘\",\n\t\"SquareUnion;\": \"⊔\",\n\t\"straightphi;\": \"ϕ\",\n\t\"SubsetEqual;\": \"⊆\",\n\t\"succcurlyeq;\": \"≽\",\n\t\"succnapprox;\": \"⪺\",\n\t\"thickapprox;\": \"≈\",\n\t\"UpDownArrow;\": \"↕\",\n\t\"Updownarrow;\": \"⇕\",\n\t\"updownarrow;\": \"↕\",\n\t\"VerticalBar;\": \"∣\",\n\t\"blacklozenge;\": \"⧫\",\n\t\"DownArrowBar;\": \"⤓\",\n\t\"DownTeeArrow;\": \"↧\",\n\t\"ExponentialE;\": \"ⅇ\",\n\t\"exponentiale;\": \"ⅇ\",\n\t\"GreaterEqual;\": \"≥\",\n\t\"GreaterTilde;\": \"≳\",\n\t\"HilbertSpace;\": \"ℋ\",\n\t\"HumpDownHump;\": \"≎\",\n\t\"Intersection;\": \"⋂\",\n\t\"LeftArrowBar;\": \"⇤\",\n\t\"LeftTeeArrow;\": \"↤\",\n\t\"LeftTriangle;\": \"⊲\",\n\t\"LeftUpVector;\": \"↿\",\n\t\"NotCongruent;\": \"≢\",\n\t\"NotHumpEqual;\": \"≏̸\",\n\t\"NotLessEqual;\": \"≰\",\n\t\"NotLessTilde;\": \"≴\",\n\t\"Proportional;\": \"∝\",\n\t\"RightCeiling;\": \"⌉\",\n\t\"risingdotseq;\": \"≓\",\n\t\"RoundImplies;\": \"⥰\",\n\t\"ShortUpArrow;\": \"↑\",\n\t\"SquareSubset;\": \"⊏\",\n\t\"triangledown;\": \"▿\",\n\t\"triangleleft;\": \"◃\",\n\t\"UnderBracket;\": \"⎵\",\n\t\"varsubsetneq;\": \"⊊︀\",\n\t\"varsupsetneq;\": \"⊋︀\",\n\t\"VerticalLine;\": \"|\",\n\t\"ApplyFunction;\": \"⁡\",\n\t\"bigtriangleup;\": \"△\",\n\t\"blacktriangle;\": \"▴\",\n\t\"DifferentialD;\": \"ⅆ\",\n\t\"divideontimes;\": \"⋇\",\n\t\"DoubleLeftTee;\": \"⫤\",\n\t\"DoubleUpArrow;\": \"⇑\",\n\t\"fallingdotseq;\": \"≒\",\n\t\"hookleftarrow;\": \"↩\",\n\t\"leftarrowtail;\": \"↢\",\n\t\"leftharpoonup;\": \"↼\",\n\t\"LeftTeeVector;\": \"⥚\",\n\t\"LeftVectorBar;\": \"⥒\",\n\t\"LessFullEqual;\": \"≦\",\n\t\"LongLeftArrow;\": \"⟵\",\n\t\"Longleftarrow;\": \"⟸\",\n\t\"longleftarrow;\": \"⟵\",\n\t\"looparrowleft;\": \"↫\",\n\t\"measuredangle;\": \"∡\",\n\t\"NotEqualTilde;\": \"≂̸\",\n\t\"NotTildeEqual;\": \"≄\",\n\t\"NotTildeTilde;\": \"≉\",\n\t\"ntriangleleft;\": \"⋪\",\n\t\"Poincareplane;\": \"ℌ\",\n\t\"PrecedesEqual;\": \"⪯\",\n\t\"PrecedesTilde;\": \"≾\",\n\t\"RightArrowBar;\": \"⇥\",\n\t\"RightTeeArrow;\": \"↦\",\n\t\"RightTriangle;\": \"⊳\",\n\t\"RightUpVector;\": \"↾\",\n\t\"shortparallel;\": \"∥\",\n\t\"smallsetminus;\": \"∖\",\n\t\"SucceedsEqual;\": \"⪰\",\n\t\"SucceedsTilde;\": \"≿\",\n\t\"SupersetEqual;\": \"⊇\",\n\t\"triangleright;\": \"▹\",\n\t\"UpEquilibrium;\": \"⥮\",\n\t\"upharpoonleft;\": \"↿\",\n\t\"varsubsetneqq;\": \"⫋︀\",\n\t\"varsupsetneqq;\": \"⫌︀\",\n\t\"VerticalTilde;\": \"≀\",\n\t\"VeryThinSpace;\": \" \",\n\t\"curvearrowleft;\": \"↶\",\n\t\"DiacriticalDot;\": \"˙\",\n\t\"doublebarwedge;\": \"⌆\",\n\t\"DoubleRightTee;\": \"⊨\",\n\t\"downdownarrows;\": \"⇊\",\n\t\"DownLeftVector;\": \"↽\",\n\t\"GreaterGreater;\": \"⪢\",\n\t\"hookrightarrow;\": \"↪\",\n\t\"HorizontalLine;\": \"─\",\n\t\"InvisibleComma;\": \"⁣\",\n\t\"InvisibleTimes;\": \"⁢\",\n\t\"LeftDownVector;\": \"⇃\",\n\t\"leftleftarrows;\": \"⇇\",\n\t\"LeftRightArrow;\": \"↔\",\n\t\"Leftrightarrow;\": \"⇔\",\n\t\"leftrightarrow;\": \"↔\",\n\t\"leftthreetimes;\": \"⋋\",\n\t\"LessSlantEqual;\": \"⩽\",\n\t\"LongRightArrow;\": \"⟶\",\n\t\"Longrightarrow;\": \"⟹\",\n\t\"longrightarrow;\": \"⟶\",\n\t\"looparrowright;\": \"↬\",\n\t\"LowerLeftArrow;\": \"↙\",\n\t\"NestedLessLess;\": \"≪\",\n\t\"NotGreaterLess;\": \"≹\",\n\t\"NotLessGreater;\": \"≸\",\n\t\"NotSubsetEqual;\": \"⊈\",\n\t\"NotVerticalBar;\": \"∤\",\n\t\"nshortparallel;\": \"∦\",\n\t\"ntriangleright;\": \"⋫\",\n\t\"OpenCurlyQuote;\": \"‘\",\n\t\"ReverseElement;\": \"∋\",\n\t\"rightarrowtail;\": \"↣\",\n\t\"rightharpoonup;\": \"⇀\",\n\t\"RightTeeVector;\": \"⥛\",\n\t\"RightVectorBar;\": \"⥓\",\n\t\"ShortDownArrow;\": \"↓\",\n\t\"ShortLeftArrow;\": \"←\",\n\t\"SquareSuperset;\": \"⊐\",\n\t\"TildeFullEqual;\": \"≅\",\n\t\"trianglelefteq;\": \"⊴\",\n\t\"upharpoonright;\": \"↾\",\n\t\"UpperLeftArrow;\": \"↖\",\n\t\"ZeroWidthSpace;\": \"​\",\n\t\"bigtriangledown;\": \"▽\",\n\t\"circlearrowleft;\": \"↺\",\n\t\"CloseCurlyQuote;\": \"’\",\n\t\"ContourIntegral;\": \"∮\",\n\t\"curvearrowright;\": \"↷\",\n\t\"DoubleDownArrow;\": \"⇓\",\n\t\"DoubleLeftArrow;\": \"⇐\",\n\t\"downharpoonleft;\": \"⇃\",\n\t\"DownRightVector;\": \"⇁\",\n\t\"leftharpoondown;\": \"↽\",\n\t\"leftrightarrows;\": \"⇆\",\n\t\"LeftRightVector;\": \"⥎\",\n\t\"LeftTriangleBar;\": \"⧏\",\n\t\"LeftUpTeeVector;\": \"⥠\",\n\t\"LeftUpVectorBar;\": \"⥘\",\n\t\"LowerRightArrow;\": \"↘\",\n\t\"nLeftrightarrow;\": \"⇎\",\n\t\"nleftrightarrow;\": \"↮\",\n\t\"NotGreaterEqual;\": \"≱\",\n\t\"NotGreaterTilde;\": \"≵\",\n\t\"NotHumpDownHump;\": \"≎̸\",\n\t\"NotLeftTriangle;\": \"⋪\",\n\t\"NotSquareSubset;\": \"⊏̸\",\n\t\"ntrianglelefteq;\": \"⋬\",\n\t\"OverParenthesis;\": \"⏜\",\n\t\"RightDownVector;\": \"⇂\",\n\t\"rightleftarrows;\": \"⇄\",\n\t\"rightsquigarrow;\": \"↝\",\n\t\"rightthreetimes;\": \"⋌\",\n\t\"ShortRightArrow;\": \"→\",\n\t\"straightepsilon;\": \"ϵ\",\n\t\"trianglerighteq;\": \"⊵\",\n\t\"UpperRightArrow;\": \"↗\",\n\t\"vartriangleleft;\": \"⊲\",\n\t\"circlearrowright;\": \"↻\",\n\t\"DiacriticalAcute;\": \"´\",\n\t\"DiacriticalGrave;\": \"`\",\n\t\"DiacriticalTilde;\": \"˜\",\n\t\"DoubleRightArrow;\": \"⇒\",\n\t\"DownArrowUpArrow;\": \"⇵\",\n\t\"downharpoonright;\": \"⇂\",\n\t\"EmptySmallSquare;\": \"◻\",\n\t\"GreaterEqualLess;\": \"⋛\",\n\t\"GreaterFullEqual;\": \"≧\",\n\t\"LeftAngleBracket;\": \"⟨\",\n\t\"LeftUpDownVector;\": \"⥑\",\n\t\"LessEqualGreater;\": \"⋚\",\n\t\"NonBreakingSpace;\": \" \",\n\t\"NotPrecedesEqual;\": \"⪯̸\",\n\t\"NotRightTriangle;\": \"⋫\",\n\t\"NotSucceedsEqual;\": \"⪰̸\",\n\t\"NotSucceedsTilde;\": \"≿̸\",\n\t\"NotSupersetEqual;\": \"⊉\",\n\t\"ntrianglerighteq;\": \"⋭\",\n\t\"rightharpoondown;\": \"⇁\",\n\t\"rightrightarrows;\": \"⇉\",\n\t\"RightTriangleBar;\": \"⧐\",\n\t\"RightUpTeeVector;\": \"⥜\",\n\t\"RightUpVectorBar;\": \"⥔\",\n\t\"twoheadleftarrow;\": \"↞\",\n\t\"UnderParenthesis;\": \"⏝\",\n\t\"UpArrowDownArrow;\": \"⇅\",\n\t\"vartriangleright;\": \"⊳\",\n\t\"blacktriangledown;\": \"▾\",\n\t\"blacktriangleleft;\": \"◂\",\n\t\"DoubleUpDownArrow;\": \"⇕\",\n\t\"DoubleVerticalBar;\": \"∥\",\n\t\"DownLeftTeeVector;\": \"⥞\",\n\t\"DownLeftVectorBar;\": \"⥖\",\n\t\"FilledSmallSquare;\": \"◼\",\n\t\"GreaterSlantEqual;\": \"⩾\",\n\t\"LeftDoubleBracket;\": \"⟦\",\n\t\"LeftDownTeeVector;\": \"⥡\",\n\t\"LeftDownVectorBar;\": \"⥙\",\n\t\"leftrightharpoons;\": \"⇋\",\n\t\"LeftTriangleEqual;\": \"⊴\",\n\t\"NegativeThinSpace;\": \"​\",\n\t\"NotGreaterGreater;\": \"≫̸\",\n\t\"NotLessSlantEqual;\": \"⩽̸\",\n\t\"NotNestedLessLess;\": \"⪡̸\",\n\t\"NotReverseElement;\": \"∌\",\n\t\"NotSquareSuperset;\": \"⊐̸\",\n\t\"NotTildeFullEqual;\": \"≇\",\n\t\"RightAngleBracket;\": \"⟩\",\n\t\"rightleftharpoons;\": \"⇌\",\n\t\"RightUpDownVector;\": \"⥏\",\n\t\"SquareSubsetEqual;\": \"⊑\",\n\t\"twoheadrightarrow;\": \"↠\",\n\t\"VerticalSeparator;\": \"❘\",\n\t\"blacktriangleright;\": \"▸\",\n\t\"DownRightTeeVector;\": \"⥟\",\n\t\"DownRightVectorBar;\": \"⥗\",\n\t\"LongLeftRightArrow;\": \"⟷\",\n\t\"Longleftrightarrow;\": \"⟺\",\n\t\"longleftrightarrow;\": \"⟷\",\n\t\"NegativeThickSpace;\": \"​\",\n\t\"NotLeftTriangleBar;\": \"⧏̸\",\n\t\"PrecedesSlantEqual;\": \"≼\",\n\t\"ReverseEquilibrium;\": \"⇋\",\n\t\"RightDoubleBracket;\": \"⟧\",\n\t\"RightDownTeeVector;\": \"⥝\",\n\t\"RightDownVectorBar;\": \"⥕\",\n\t\"RightTriangleEqual;\": \"⊵\",\n\t\"SquareIntersection;\": \"⊓\",\n\t\"SucceedsSlantEqual;\": \"≽\",\n\t\"DoubleLongLeftArrow;\": \"⟸\",\n\t\"DownLeftRightVector;\": \"⥐\",\n\t\"LeftArrowRightArrow;\": \"⇆\",\n\t\"leftrightsquigarrow;\": \"↭\",\n\t\"NegativeMediumSpace;\": \"​\",\n\t\"NotGreaterFullEqual;\": \"≧̸\",\n\t\"NotRightTriangleBar;\": \"⧐̸\",\n\t\"RightArrowLeftArrow;\": \"⇄\",\n\t\"SquareSupersetEqual;\": \"⊒\",\n\t\"CapitalDifferentialD;\": \"ⅅ\",\n\t\"DoubleLeftRightArrow;\": \"⇔\",\n\t\"DoubleLongRightArrow;\": \"⟹\",\n\t\"EmptyVerySmallSquare;\": \"▫\",\n\t\"NestedGreaterGreater;\": \"≫\",\n\t\"NotDoubleVerticalBar;\": \"∦\",\n\t\"NotGreaterSlantEqual;\": \"⩾̸\",\n\t\"NotLeftTriangleEqual;\": \"⋬\",\n\t\"NotSquareSubsetEqual;\": \"⋢\",\n\t\"OpenCurlyDoubleQuote;\": \"“\",\n\t\"ReverseUpEquilibrium;\": \"⥯\",\n\t\"CloseCurlyDoubleQuote;\": \"”\",\n\t\"DoubleContourIntegral;\": \"∯\",\n\t\"FilledVerySmallSquare;\": \"▪\",\n\t\"NegativeVeryThinSpace;\": \"​\",\n\t\"NotPrecedesSlantEqual;\": \"⋠\",\n\t\"NotRightTriangleEqual;\": \"⋭\",\n\t\"NotSucceedsSlantEqual;\": \"⋡\",\n\t\"DiacriticalDoubleAcute;\": \"˝\",\n\t\"NotSquareSupersetEqual;\": \"⋣\",\n\t\"NotNestedGreaterGreater;\": \"⪢̸\",\n\t\"ClockwiseContourIntegral;\": \"∲\",\n\t\"DoubleLongLeftRightArrow;\": \"⟺\",\n\t\"CounterClockwiseContourIntegral;\": \"∳\"\n};\n\n// lazy compute this to make this file tree-shakable for browser\nlet maxCRNameLength;\nconst decodeHtml = (rawText, asAttr) => {\n    let offset = 0;\n    const end = rawText.length;\n    let decodedText = '';\n    function advance(length) {\n        offset += length;\n        rawText = rawText.slice(length);\n    }\n    while (offset < end) {\n        const head = /&(?:#x?)?/i.exec(rawText);\n        if (!head || offset + head.index >= end) {\n            const remaining = end - offset;\n            decodedText += rawText.slice(0, remaining);\n            advance(remaining);\n            break;\n        }\n        // Advance to the \"&\".\n        decodedText += rawText.slice(0, head.index);\n        advance(head.index);\n        if (head[0] === '&') {\n            // Named character reference.\n            let name = '';\n            let value = undefined;\n            if (/[0-9a-z]/i.test(rawText[1])) {\n                if (!maxCRNameLength) {\n                    maxCRNameLength = Object.keys(namedCharacterReferences).reduce((max, name) => Math.max(max, name.length), 0);\n                }\n                for (let length = maxCRNameLength; !value && length > 0; --length) {\n                    name = rawText.slice(1, 1 + length);\n                    value = namedCharacterReferences[name];\n                }\n                if (value) {\n                    const semi = name.endsWith(';');\n                    if (asAttr &&\n                        !semi &&\n                        /[=a-z0-9]/i.test(rawText[name.length + 1] || '')) {\n                        decodedText += '&' + name;\n                        advance(1 + name.length);\n                    }\n                    else {\n                        decodedText += value;\n                        advance(1 + name.length);\n                    }\n                }\n                else {\n                    decodedText += '&' + name;\n                    advance(1 + name.length);\n                }\n            }\n            else {\n                decodedText += '&';\n                advance(1);\n            }\n        }\n        else {\n            // Numeric character reference.\n            const hex = head[0] === '&#x';\n            const pattern = hex ? /^&#x([0-9a-f]+);?/i : /^&#([0-9]+);?/;\n            const body = pattern.exec(rawText);\n            if (!body) {\n                decodedText += head[0];\n                advance(head[0].length);\n            }\n            else {\n                // https://html.spec.whatwg.org/multipage/parsing.html#numeric-character-reference-end-state\n                let cp = Number.parseInt(body[1], hex ? 16 : 10);\n                if (cp === 0) {\n                    cp = 0xfffd;\n                }\n                else if (cp > 0x10ffff) {\n                    cp = 0xfffd;\n                }\n                else if (cp >= 0xd800 && cp <= 0xdfff) {\n                    cp = 0xfffd;\n                }\n                else if ((cp >= 0xfdd0 && cp <= 0xfdef) || (cp & 0xfffe) === 0xfffe) ;\n                else if ((cp >= 0x01 && cp <= 0x08) ||\n                    cp === 0x0b ||\n                    (cp >= 0x0d && cp <= 0x1f) ||\n                    (cp >= 0x7f && cp <= 0x9f)) {\n                    cp = CCR_REPLACEMENTS[cp] || cp;\n                }\n                decodedText += String.fromCodePoint(cp);\n                advance(body[0].length);\n            }\n        }\n    }\n    return decodedText;\n};\n// https://html.spec.whatwg.org/multipage/parsing.html#numeric-character-reference-end-state\nconst CCR_REPLACEMENTS = {\n    0x80: 0x20ac,\n    0x82: 0x201a,\n    0x83: 0x0192,\n    0x84: 0x201e,\n    0x85: 0x2026,\n    0x86: 0x2020,\n    0x87: 0x2021,\n    0x88: 0x02c6,\n    0x89: 0x2030,\n    0x8a: 0x0160,\n    0x8b: 0x2039,\n    0x8c: 0x0152,\n    0x8e: 0x017d,\n    0x91: 0x2018,\n    0x92: 0x2019,\n    0x93: 0x201c,\n    0x94: 0x201d,\n    0x95: 0x2022,\n    0x96: 0x2013,\n    0x97: 0x2014,\n    0x98: 0x02dc,\n    0x99: 0x2122,\n    0x9a: 0x0161,\n    0x9b: 0x203a,\n    0x9c: 0x0153,\n    0x9e: 0x017e,\n    0x9f: 0x0178\n};\n\nconst isRawTextContainer = /*#__PURE__*/ shared.makeMap('style,iframe,script,noscript', true);\nconst parserOptions = {\n    isVoidTag: shared.isVoidTag,\n    isNativeTag: tag => shared.isHTMLTag(tag) || shared.isSVGTag(tag),\n    isPreTag: tag => tag === 'pre',\n    decodeEntities: decodeHtml,\n    isBuiltInComponent: (tag) => {\n        if (compilerCore.isBuiltInType(tag, `Transition`)) {\n            return TRANSITION;\n        }\n        else if (compilerCore.isBuiltInType(tag, `TransitionGroup`)) {\n            return TRANSITION_GROUP;\n        }\n    },\n    // https://html.spec.whatwg.org/multipage/parsing.html#tree-construction-dispatcher\n    getNamespace(tag, parent) {\n        let ns = parent ? parent.ns : 0 /* DOMNamespaces.HTML */;\n        if (parent && ns === 2 /* DOMNamespaces.MATH_ML */) {\n            if (parent.tag === 'annotation-xml') {\n                if (tag === 'svg') {\n                    return 1 /* DOMNamespaces.SVG */;\n                }\n                if (parent.props.some(a => a.type === 6 /* NodeTypes.ATTRIBUTE */ &&\n                    a.name === 'encoding' &&\n                    a.value != null &&\n                    (a.value.content === 'text/html' ||\n                        a.value.content === 'application/xhtml+xml'))) {\n                    ns = 0 /* DOMNamespaces.HTML */;\n                }\n            }\n            else if (/^m(?:[ions]|text)$/.test(parent.tag) &&\n                tag !== 'mglyph' &&\n                tag !== 'malignmark') {\n                ns = 0 /* DOMNamespaces.HTML */;\n            }\n        }\n        else if (parent && ns === 1 /* DOMNamespaces.SVG */) {\n            if (parent.tag === 'foreignObject' ||\n                parent.tag === 'desc' ||\n                parent.tag === 'title') {\n                ns = 0 /* DOMNamespaces.HTML */;\n            }\n        }\n        if (ns === 0 /* DOMNamespaces.HTML */) {\n            if (tag === 'svg') {\n                return 1 /* DOMNamespaces.SVG */;\n            }\n            if (tag === 'math') {\n                return 2 /* DOMNamespaces.MATH_ML */;\n            }\n        }\n        return ns;\n    },\n    // https://html.spec.whatwg.org/multipage/parsing.html#parsing-html-fragments\n    getTextMode({ tag, ns }) {\n        if (ns === 0 /* DOMNamespaces.HTML */) {\n            if (tag === 'textarea' || tag === 'title') {\n                return 1 /* TextModes.RCDATA */;\n            }\n            if (isRawTextContainer(tag)) {\n                return 2 /* TextModes.RAWTEXT */;\n            }\n        }\n        return 0 /* TextModes.DATA */;\n    }\n};\n\n// Parse inline CSS strings for static style attributes into an object.\n// This is a NodeTransform since it works on the static `style` attribute and\n// converts it into a dynamic equivalent:\n// style=\"color: red\" -> :style='{ \"color\": \"red\" }'\n// It is then processed by `transformElement` and included in the generated\n// props.\nconst transformStyle = node => {\n    if (node.type === 1 /* NodeTypes.ELEMENT */) {\n        node.props.forEach((p, i) => {\n            if (p.type === 6 /* NodeTypes.ATTRIBUTE */ && p.name === 'style' && p.value) {\n                // replace p with an expression node\n                node.props[i] = {\n                    type: 7 /* NodeTypes.DIRECTIVE */,\n                    name: `bind`,\n                    arg: compilerCore.createSimpleExpression(`style`, true, p.loc),\n                    exp: parseInlineCSS(p.value.content, p.loc),\n                    modifiers: [],\n                    loc: p.loc\n                };\n            }\n        });\n    }\n};\nconst parseInlineCSS = (cssText, loc) => {\n    const normalized = shared.parseStringStyle(cssText);\n    return compilerCore.createSimpleExpression(JSON.stringify(normalized), false, loc, 3 /* ConstantTypes.CAN_STRINGIFY */);\n};\n\nfunction createDOMCompilerError(code, loc) {\n    return compilerCore.createCompilerError(code, loc, DOMErrorMessages );\n}\nconst DOMErrorMessages = {\n    [51 /* DOMErrorCodes.X_V_HTML_NO_EXPRESSION */]: `v-html is missing expression.`,\n    [52 /* DOMErrorCodes.X_V_HTML_WITH_CHILDREN */]: `v-html will override element children.`,\n    [53 /* DOMErrorCodes.X_V_TEXT_NO_EXPRESSION */]: `v-text is missing expression.`,\n    [54 /* DOMErrorCodes.X_V_TEXT_WITH_CHILDREN */]: `v-text will override element children.`,\n    [55 /* DOMErrorCodes.X_V_MODEL_ON_INVALID_ELEMENT */]: `v-model can only be used on <input>, <textarea> and <select> elements.`,\n    [56 /* DOMErrorCodes.X_V_MODEL_ARG_ON_ELEMENT */]: `v-model argument is not supported on plain elements.`,\n    [57 /* DOMErrorCodes.X_V_MODEL_ON_FILE_INPUT_ELEMENT */]: `v-model cannot be used on file inputs since they are read-only. Use a v-on:change listener instead.`,\n    [58 /* DOMErrorCodes.X_V_MODEL_UNNECESSARY_VALUE */]: `Unnecessary value binding used alongside v-model. It will interfere with v-model's behavior.`,\n    [59 /* DOMErrorCodes.X_V_SHOW_NO_EXPRESSION */]: `v-show is missing expression.`,\n    [60 /* DOMErrorCodes.X_TRANSITION_INVALID_CHILDREN */]: `<Transition> expects exactly one child element or component.`,\n    [61 /* DOMErrorCodes.X_IGNORED_SIDE_EFFECT_TAG */]: `Tags with side effect (<script> and <style>) are ignored in client component templates.`\n};\n\nconst transformVHtml = (dir, node, context) => {\n    const { exp, loc } = dir;\n    if (!exp) {\n        context.onError(createDOMCompilerError(51 /* DOMErrorCodes.X_V_HTML_NO_EXPRESSION */, loc));\n    }\n    if (node.children.length) {\n        context.onError(createDOMCompilerError(52 /* DOMErrorCodes.X_V_HTML_WITH_CHILDREN */, loc));\n        node.children.length = 0;\n    }\n    return {\n        props: [\n            compilerCore.createObjectProperty(compilerCore.createSimpleExpression(`innerHTML`, true, loc), exp || compilerCore.createSimpleExpression('', true))\n        ]\n    };\n};\n\nconst transformVText = (dir, node, context) => {\n    const { exp, loc } = dir;\n    if (!exp) {\n        context.onError(createDOMCompilerError(53 /* DOMErrorCodes.X_V_TEXT_NO_EXPRESSION */, loc));\n    }\n    if (node.children.length) {\n        context.onError(createDOMCompilerError(54 /* DOMErrorCodes.X_V_TEXT_WITH_CHILDREN */, loc));\n        node.children.length = 0;\n    }\n    return {\n        props: [\n            compilerCore.createObjectProperty(compilerCore.createSimpleExpression(`textContent`, true), exp\n                ? compilerCore.getConstantType(exp, context) > 0\n                    ? exp\n                    : compilerCore.createCallExpression(context.helperString(compilerCore.TO_DISPLAY_STRING), [exp], loc)\n                : compilerCore.createSimpleExpression('', true))\n        ]\n    };\n};\n\nconst transformModel = (dir, node, context) => {\n    const baseResult = compilerCore.transformModel(dir, node, context);\n    // base transform has errors OR component v-model (only need props)\n    if (!baseResult.props.length || node.tagType === 1 /* ElementTypes.COMPONENT */) {\n        return baseResult;\n    }\n    if (dir.arg) {\n        context.onError(createDOMCompilerError(56 /* DOMErrorCodes.X_V_MODEL_ARG_ON_ELEMENT */, dir.arg.loc));\n    }\n    function checkDuplicatedValue() {\n        const value = compilerCore.findProp(node, 'value');\n        if (value) {\n            context.onError(createDOMCompilerError(58 /* DOMErrorCodes.X_V_MODEL_UNNECESSARY_VALUE */, value.loc));\n        }\n    }\n    const { tag } = node;\n    const isCustomElement = context.isCustomElement(tag);\n    if (tag === 'input' ||\n        tag === 'textarea' ||\n        tag === 'select' ||\n        isCustomElement) {\n        let directiveToUse = V_MODEL_TEXT;\n        let isInvalidType = false;\n        if (tag === 'input' || isCustomElement) {\n            const type = compilerCore.findProp(node, `type`);\n            if (type) {\n                if (type.type === 7 /* NodeTypes.DIRECTIVE */) {\n                    // :type=\"foo\"\n                    directiveToUse = V_MODEL_DYNAMIC;\n                }\n                else if (type.value) {\n                    switch (type.value.content) {\n                        case 'radio':\n                            directiveToUse = V_MODEL_RADIO;\n                            break;\n                        case 'checkbox':\n                            directiveToUse = V_MODEL_CHECKBOX;\n                            break;\n                        case 'file':\n                            isInvalidType = true;\n                            context.onError(createDOMCompilerError(57 /* DOMErrorCodes.X_V_MODEL_ON_FILE_INPUT_ELEMENT */, dir.loc));\n                            break;\n                        default:\n                            // text type\n                            checkDuplicatedValue();\n                            break;\n                    }\n                }\n            }\n            else if (compilerCore.hasDynamicKeyVBind(node)) {\n                // element has bindings with dynamic keys, which can possibly contain\n                // \"type\".\n                directiveToUse = V_MODEL_DYNAMIC;\n            }\n            else {\n                // text type\n                checkDuplicatedValue();\n            }\n        }\n        else if (tag === 'select') {\n            directiveToUse = V_MODEL_SELECT;\n        }\n        else {\n            // textarea\n            checkDuplicatedValue();\n        }\n        // inject runtime directive\n        // by returning the helper symbol via needRuntime\n        // the import will replaced a resolveDirective call.\n        if (!isInvalidType) {\n            baseResult.needRuntime = context.helper(directiveToUse);\n        }\n    }\n    else {\n        context.onError(createDOMCompilerError(55 /* DOMErrorCodes.X_V_MODEL_ON_INVALID_ELEMENT */, dir.loc));\n    }\n    // native vmodel doesn't need the `modelValue` props since they are also\n    // passed to the runtime as `binding.value`. removing it reduces code size.\n    baseResult.props = baseResult.props.filter(p => !(p.key.type === 4 /* NodeTypes.SIMPLE_EXPRESSION */ &&\n        p.key.content === 'modelValue'));\n    return baseResult;\n};\n\nconst isEventOptionModifier = /*#__PURE__*/ shared.makeMap(`passive,once,capture`);\nconst isNonKeyModifier = /*#__PURE__*/ shared.makeMap(\n// event propagation management\n`stop,prevent,self,` +\n    // system modifiers + exact\n    `ctrl,shift,alt,meta,exact,` +\n    // mouse\n    `middle`);\n// left & right could be mouse or key modifiers based on event type\nconst maybeKeyModifier = /*#__PURE__*/ shared.makeMap('left,right');\nconst isKeyboardEvent = /*#__PURE__*/ shared.makeMap(`onkeyup,onkeydown,onkeypress`, true);\nconst resolveModifiers = (key, modifiers, context, loc) => {\n    const keyModifiers = [];\n    const nonKeyModifiers = [];\n    const eventOptionModifiers = [];\n    for (let i = 0; i < modifiers.length; i++) {\n        const modifier = modifiers[i];\n        if (modifier === 'native' &&\n            compilerCore.checkCompatEnabled(\"COMPILER_V_ON_NATIVE\" /* CompilerDeprecationTypes.COMPILER_V_ON_NATIVE */, context, loc)) {\n            eventOptionModifiers.push(modifier);\n        }\n        else if (isEventOptionModifier(modifier)) {\n            // eventOptionModifiers: modifiers for addEventListener() options,\n            // e.g. .passive & .capture\n            eventOptionModifiers.push(modifier);\n        }\n        else {\n            // runtimeModifiers: modifiers that needs runtime guards\n            if (maybeKeyModifier(modifier)) {\n                if (compilerCore.isStaticExp(key)) {\n                    if (isKeyboardEvent(key.content)) {\n                        keyModifiers.push(modifier);\n                    }\n                    else {\n                        nonKeyModifiers.push(modifier);\n                    }\n                }\n                else {\n                    keyModifiers.push(modifier);\n                    nonKeyModifiers.push(modifier);\n                }\n            }\n            else {\n                if (isNonKeyModifier(modifier)) {\n                    nonKeyModifiers.push(modifier);\n                }\n                else {\n                    keyModifiers.push(modifier);\n                }\n            }\n        }\n    }\n    return {\n        keyModifiers,\n        nonKeyModifiers,\n        eventOptionModifiers\n    };\n};\nconst transformClick = (key, event) => {\n    const isStaticClick = compilerCore.isStaticExp(key) && key.content.toLowerCase() === 'onclick';\n    return isStaticClick\n        ? compilerCore.createSimpleExpression(event, true)\n        : key.type !== 4 /* NodeTypes.SIMPLE_EXPRESSION */\n            ? compilerCore.createCompoundExpression([\n                `(`,\n                key,\n                `) === \"onClick\" ? \"${event}\" : (`,\n                key,\n                `)`\n            ])\n            : key;\n};\nconst transformOn = (dir, node, context) => {\n    return compilerCore.transformOn(dir, node, context, baseResult => {\n        const { modifiers } = dir;\n        if (!modifiers.length)\n            return baseResult;\n        let { key, value: handlerExp } = baseResult.props[0];\n        const { keyModifiers, nonKeyModifiers, eventOptionModifiers } = resolveModifiers(key, modifiers, context, dir.loc);\n        // normalize click.right and click.middle since they don't actually fire\n        if (nonKeyModifiers.includes('right')) {\n            key = transformClick(key, `onContextmenu`);\n        }\n        if (nonKeyModifiers.includes('middle')) {\n            key = transformClick(key, `onMouseup`);\n        }\n        if (nonKeyModifiers.length) {\n            handlerExp = compilerCore.createCallExpression(context.helper(V_ON_WITH_MODIFIERS), [\n                handlerExp,\n                JSON.stringify(nonKeyModifiers)\n            ]);\n        }\n        if (keyModifiers.length &&\n            // if event name is dynamic, always wrap with keys guard\n            (!compilerCore.isStaticExp(key) || isKeyboardEvent(key.content))) {\n            handlerExp = compilerCore.createCallExpression(context.helper(V_ON_WITH_KEYS), [\n                handlerExp,\n                JSON.stringify(keyModifiers)\n            ]);\n        }\n        if (eventOptionModifiers.length) {\n            const modifierPostfix = eventOptionModifiers.map(shared.capitalize).join('');\n            key = compilerCore.isStaticExp(key)\n                ? compilerCore.createSimpleExpression(`${key.content}${modifierPostfix}`, true)\n                : compilerCore.createCompoundExpression([`(`, key, `) + \"${modifierPostfix}\"`]);\n        }\n        return {\n            props: [compilerCore.createObjectProperty(key, handlerExp)]\n        };\n    });\n};\n\nconst transformShow = (dir, node, context) => {\n    const { exp, loc } = dir;\n    if (!exp) {\n        context.onError(createDOMCompilerError(59 /* DOMErrorCodes.X_V_SHOW_NO_EXPRESSION */, loc));\n    }\n    return {\n        props: [],\n        needRuntime: context.helper(V_SHOW)\n    };\n};\n\nconst transformTransition = (node, context) => {\n    if (node.type === 1 /* NodeTypes.ELEMENT */ &&\n        node.tagType === 1 /* ElementTypes.COMPONENT */) {\n        const component = context.isBuiltInComponent(node.tag);\n        if (component === TRANSITION) {\n            return () => {\n                if (!node.children.length) {\n                    return;\n                }\n                // warn multiple transition children\n                if (hasMultipleChildren(node)) {\n                    context.onError(createDOMCompilerError(60 /* DOMErrorCodes.X_TRANSITION_INVALID_CHILDREN */, {\n                        start: node.children[0].loc.start,\n                        end: node.children[node.children.length - 1].loc.end,\n                        source: ''\n                    }));\n                }\n                // check if it's s single child w/ v-show\n                // if yes, inject \"persisted: true\" to the transition props\n                const child = node.children[0];\n                if (child.type === 1 /* NodeTypes.ELEMENT */) {\n                    for (const p of child.props) {\n                        if (p.type === 7 /* NodeTypes.DIRECTIVE */ && p.name === 'show') {\n                            node.props.push({\n                                type: 6 /* NodeTypes.ATTRIBUTE */,\n                                name: 'persisted',\n                                value: undefined,\n                                loc: node.loc\n                            });\n                        }\n                    }\n                }\n            };\n        }\n    }\n};\nfunction hasMultipleChildren(node) {\n    // #1352 filter out potential comment nodes.\n    const children = (node.children = node.children.filter(c => c.type !== 3 /* NodeTypes.COMMENT */ &&\n        !(c.type === 2 /* NodeTypes.TEXT */ && !c.content.trim())));\n    const child = children[0];\n    return (children.length !== 1 ||\n        child.type === 11 /* NodeTypes.FOR */ ||\n        (child.type === 9 /* NodeTypes.IF */ && child.branches.some(hasMultipleChildren)));\n}\n\n/**\n * This module is Node-only.\n */\n/**\n * Regex for replacing placeholders for embedded constant variables\n * (e.g. import URL string constants generated by compiler-sfc)\n */\nconst expReplaceRE = /__VUE_EXP_START__(.*?)__VUE_EXP_END__/g;\n/**\n * Turn eligible hoisted static trees into stringified static nodes, e.g.\n *\n * ```js\n * const _hoisted_1 = createStaticVNode(`<div class=\"foo\">bar</div>`)\n * ```\n *\n * A single static vnode can contain stringified content for **multiple**\n * consecutive nodes (element and plain text), called a \"chunk\".\n * `@vue/runtime-dom` will create the content via innerHTML in a hidden\n * container element and insert all the nodes in place. The call must also\n * provide the number of nodes contained in the chunk so that during hydration\n * we can know how many nodes the static vnode should adopt.\n *\n * The optimization scans a children list that contains hoisted nodes, and\n * tries to find the largest chunk of consecutive hoisted nodes before running\n * into a non-hoisted node or the end of the list. A chunk is then converted\n * into a single static vnode and replaces the hoisted expression of the first\n * node in the chunk. Other nodes in the chunk are considered \"merged\" and\n * therefore removed from both the hoist list and the children array.\n *\n * This optimization is only performed in Node.js.\n */\nconst stringifyStatic = (children, context, parent) => {\n    // bail stringification for slot content\n    if (context.scopes.vSlot > 0) {\n        return;\n    }\n    let nc = 0; // current node count\n    let ec = 0; // current element with binding count\n    const currentChunk = [];\n    const stringifyCurrentChunk = (currentIndex) => {\n        if (nc >= 20 /* StringifyThresholds.NODE_COUNT */ ||\n            ec >= 5 /* StringifyThresholds.ELEMENT_WITH_BINDING_COUNT */) {\n            // combine all currently eligible nodes into a single static vnode call\n            const staticCall = compilerCore.createCallExpression(context.helper(compilerCore.CREATE_STATIC), [\n                JSON.stringify(currentChunk.map(node => stringifyNode(node, context)).join('')).replace(expReplaceRE, `\" + $1 + \"`),\n                // the 2nd argument indicates the number of DOM nodes this static vnode\n                // will insert / hydrate\n                String(currentChunk.length)\n            ]);\n            // replace the first node's hoisted expression with the static vnode call\n            replaceHoist(currentChunk[0], staticCall, context);\n            if (currentChunk.length > 1) {\n                for (let i = 1; i < currentChunk.length; i++) {\n                    // for the merged nodes, set their hoisted expression to null\n                    replaceHoist(currentChunk[i], null, context);\n                }\n                // also remove merged nodes from children\n                const deleteCount = currentChunk.length - 1;\n                children.splice(currentIndex - currentChunk.length + 1, deleteCount);\n                return deleteCount;\n            }\n        }\n        return 0;\n    };\n    let i = 0;\n    for (; i < children.length; i++) {\n        const child = children[i];\n        const hoisted = getHoistedNode(child);\n        if (hoisted) {\n            // presence of hoisted means child must be a stringifiable node\n            const node = child;\n            const result = analyzeNode(node);\n            if (result) {\n                // node is stringifiable, record state\n                nc += result[0];\n                ec += result[1];\n                currentChunk.push(node);\n                continue;\n            }\n        }\n        // we only reach here if we ran into a node that is not stringifiable\n        // check if currently analyzed nodes meet criteria for stringification.\n        // adjust iteration index\n        i -= stringifyCurrentChunk(i);\n        // reset state\n        nc = 0;\n        ec = 0;\n        currentChunk.length = 0;\n    }\n    // in case the last node was also stringifiable\n    stringifyCurrentChunk(i);\n};\nconst getHoistedNode = (node) => ((node.type === 1 /* NodeTypes.ELEMENT */ && node.tagType === 0 /* ElementTypes.ELEMENT */) ||\n    node.type == 12 /* NodeTypes.TEXT_CALL */) &&\n    node.codegenNode &&\n    node.codegenNode.type === 4 /* NodeTypes.SIMPLE_EXPRESSION */ &&\n    node.codegenNode.hoisted;\nconst dataAriaRE = /^(data|aria)-/;\nconst isStringifiableAttr = (name, ns) => {\n    return ((ns === 0 /* DOMNamespaces.HTML */\n        ? shared.isKnownHtmlAttr(name)\n        : ns === 1 /* DOMNamespaces.SVG */\n            ? shared.isKnownSvgAttr(name)\n            : false) || dataAriaRE.test(name));\n};\nconst replaceHoist = (node, replacement, context) => {\n    const hoistToReplace = node.codegenNode.hoisted;\n    context.hoists[context.hoists.indexOf(hoistToReplace)] = replacement;\n};\nconst isNonStringifiable = /*#__PURE__*/ shared.makeMap(`caption,thead,tr,th,tbody,td,tfoot,colgroup,col`);\n/**\n * for a hoisted node, analyze it and return:\n * - false: bailed (contains non-stringifiable props or runtime constant)\n * - [nc, ec] where\n *   - nc is the number of nodes inside\n *   - ec is the number of element with bindings inside\n */\nfunction analyzeNode(node) {\n    if (node.type === 1 /* NodeTypes.ELEMENT */ && isNonStringifiable(node.tag)) {\n        return false;\n    }\n    if (node.type === 12 /* NodeTypes.TEXT_CALL */) {\n        return [1, 0];\n    }\n    let nc = 1; // node count\n    let ec = node.props.length > 0 ? 1 : 0; // element w/ binding count\n    let bailed = false;\n    const bail = () => {\n        bailed = true;\n        return false;\n    };\n    // TODO: check for cases where using innerHTML will result in different\n    // output compared to imperative node insertions.\n    // probably only need to check for most common case\n    // i.e. non-phrasing-content tags inside `<p>`\n    function walk(node) {\n        for (let i = 0; i < node.props.length; i++) {\n            const p = node.props[i];\n            // bail on non-attr bindings\n            if (p.type === 6 /* NodeTypes.ATTRIBUTE */ &&\n                !isStringifiableAttr(p.name, node.ns)) {\n                return bail();\n            }\n            if (p.type === 7 /* NodeTypes.DIRECTIVE */ && p.name === 'bind') {\n                // bail on non-attr bindings\n                if (p.arg &&\n                    (p.arg.type === 8 /* NodeTypes.COMPOUND_EXPRESSION */ ||\n                        (p.arg.isStatic && !isStringifiableAttr(p.arg.content, node.ns)))) {\n                    return bail();\n                }\n                if (p.exp &&\n                    (p.exp.type === 8 /* NodeTypes.COMPOUND_EXPRESSION */ ||\n                        p.exp.constType < 3 /* ConstantTypes.CAN_STRINGIFY */)) {\n                    return bail();\n                }\n            }\n        }\n        for (let i = 0; i < node.children.length; i++) {\n            nc++;\n            const child = node.children[i];\n            if (child.type === 1 /* NodeTypes.ELEMENT */) {\n                if (child.props.length > 0) {\n                    ec++;\n                }\n                walk(child);\n                if (bailed) {\n                    return false;\n                }\n            }\n        }\n        return true;\n    }\n    return walk(node) ? [nc, ec] : false;\n}\nfunction stringifyNode(node, context) {\n    if (shared.isString(node)) {\n        return node;\n    }\n    if (shared.isSymbol(node)) {\n        return ``;\n    }\n    switch (node.type) {\n        case 1 /* NodeTypes.ELEMENT */:\n            return stringifyElement(node, context);\n        case 2 /* NodeTypes.TEXT */:\n            return shared.escapeHtml(node.content);\n        case 3 /* NodeTypes.COMMENT */:\n            return `<!--${shared.escapeHtml(node.content)}-->`;\n        case 5 /* NodeTypes.INTERPOLATION */:\n            return shared.escapeHtml(shared.toDisplayString(evaluateConstant(node.content)));\n        case 8 /* NodeTypes.COMPOUND_EXPRESSION */:\n            return shared.escapeHtml(evaluateConstant(node));\n        case 12 /* NodeTypes.TEXT_CALL */:\n            return stringifyNode(node.content, context);\n        default:\n            // static trees will not contain if/for nodes\n            return '';\n    }\n}\nfunction stringifyElement(node, context) {\n    let res = `<${node.tag}`;\n    let innerHTML = '';\n    for (let i = 0; i < node.props.length; i++) {\n        const p = node.props[i];\n        if (p.type === 6 /* NodeTypes.ATTRIBUTE */) {\n            res += ` ${p.name}`;\n            if (p.value) {\n                res += `=\"${shared.escapeHtml(p.value.content)}\"`;\n            }\n        }\n        else if (p.type === 7 /* NodeTypes.DIRECTIVE */) {\n            if (p.name === 'bind') {\n                const exp = p.exp;\n                if (exp.content[0] === '_') {\n                    // internally generated string constant references\n                    // e.g. imported URL strings via compiler-sfc transformAssetUrl plugin\n                    res += ` ${p.arg.content}=\"__VUE_EXP_START__${exp.content}__VUE_EXP_END__\"`;\n                    continue;\n                }\n                // #6568\n                if (shared.isBooleanAttr(p.arg.content) &&\n                    exp.content === 'false') {\n                    continue;\n                }\n                // constant v-bind, e.g. :foo=\"1\"\n                let evaluated = evaluateConstant(exp);\n                if (evaluated != null) {\n                    const arg = p.arg && p.arg.content;\n                    if (arg === 'class') {\n                        evaluated = shared.normalizeClass(evaluated);\n                    }\n                    else if (arg === 'style') {\n                        evaluated = shared.stringifyStyle(shared.normalizeStyle(evaluated));\n                    }\n                    res += ` ${p.arg.content}=\"${shared.escapeHtml(evaluated)}\"`;\n                }\n            }\n            else if (p.name === 'html') {\n                // #5439 v-html with constant value\n                // not sure why would anyone do this but it can happen\n                innerHTML = evaluateConstant(p.exp);\n            }\n            else if (p.name === 'text') {\n                innerHTML = shared.escapeHtml(shared.toDisplayString(evaluateConstant(p.exp)));\n            }\n        }\n    }\n    if (context.scopeId) {\n        res += ` ${context.scopeId}`;\n    }\n    res += `>`;\n    if (innerHTML) {\n        res += innerHTML;\n    }\n    else {\n        for (let i = 0; i < node.children.length; i++) {\n            res += stringifyNode(node.children[i], context);\n        }\n    }\n    if (!shared.isVoidTag(node.tag)) {\n        res += `</${node.tag}>`;\n    }\n    return res;\n}\n// __UNSAFE__\n// Reason: eval.\n// It's technically safe to eval because only constant expressions are possible\n// here, e.g. `{{ 1 }}` or `{{ 'foo' }}`\n// in addition, constant exps bail on presence of parens so you can't even\n// run JSFuck in here. But we mark it unsafe for security review purposes.\n// (see compiler-core/src/transforms/transformExpression)\nfunction evaluateConstant(exp) {\n    if (exp.type === 4 /* NodeTypes.SIMPLE_EXPRESSION */) {\n        return new Function(`return ${exp.content}`)();\n    }\n    else {\n        // compound\n        let res = ``;\n        exp.children.forEach(c => {\n            if (shared.isString(c) || shared.isSymbol(c)) {\n                return;\n            }\n            if (c.type === 2 /* NodeTypes.TEXT */) {\n                res += c.content;\n            }\n            else if (c.type === 5 /* NodeTypes.INTERPOLATION */) {\n                res += shared.toDisplayString(evaluateConstant(c.content));\n            }\n            else {\n                res += evaluateConstant(c);\n            }\n        });\n        return res;\n    }\n}\n\nconst ignoreSideEffectTags = (node, context) => {\n    if (node.type === 1 /* NodeTypes.ELEMENT */ &&\n        node.tagType === 0 /* ElementTypes.ELEMENT */ &&\n        (node.tag === 'script' || node.tag === 'style')) {\n        context.onError(createDOMCompilerError(61 /* DOMErrorCodes.X_IGNORED_SIDE_EFFECT_TAG */, node.loc));\n        context.removeNode();\n    }\n};\n\nconst DOMNodeTransforms = [\n    transformStyle,\n    ...([transformTransition] )\n];\nconst DOMDirectiveTransforms = {\n    cloak: compilerCore.noopDirectiveTransform,\n    html: transformVHtml,\n    text: transformVText,\n    model: transformModel,\n    on: transformOn,\n    show: transformShow\n};\nfunction compile(template, options = {}) {\n    return compilerCore.baseCompile(template, shared.extend({}, parserOptions, options, {\n        nodeTransforms: [\n            // ignore <script> and <tag>\n            // this is not put inside DOMNodeTransforms because that list is used\n            // by compiler-ssr to generate vnode fallback branches\n            ignoreSideEffectTags,\n            ...DOMNodeTransforms,\n            ...(options.nodeTransforms || [])\n        ],\n        directiveTransforms: shared.extend({}, DOMDirectiveTransforms, options.directiveTransforms || {}),\n        transformHoist: stringifyStatic\n    }));\n}\nfunction parse(template, options = {}) {\n    return compilerCore.baseParse(template, shared.extend({}, parserOptions, options));\n}\n\nexports.DOMDirectiveTransforms = DOMDirectiveTransforms;\nexports.DOMNodeTransforms = DOMNodeTransforms;\nexports.TRANSITION = TRANSITION;\nexports.TRANSITION_GROUP = TRANSITION_GROUP;\nexports.V_MODEL_CHECKBOX = V_MODEL_CHECKBOX;\nexports.V_MODEL_DYNAMIC = V_MODEL_DYNAMIC;\nexports.V_MODEL_RADIO = V_MODEL_RADIO;\nexports.V_MODEL_SELECT = V_MODEL_SELECT;\nexports.V_MODEL_TEXT = V_MODEL_TEXT;\nexports.V_ON_WITH_KEYS = V_ON_WITH_KEYS;\nexports.V_ON_WITH_MODIFIERS = V_ON_WITH_MODIFIERS;\nexports.V_SHOW = V_SHOW;\nexports.compile = compile;\nexports.createDOMCompilerError = createDOMCompilerError;\nexports.parse = parse;\nexports.parserOptions = parserOptions;\nexports.transformStyle = transformStyle;\nObject.keys(compilerCore).forEach(function(k) {\n  if (k !== 'default') exports[k] = compilerCore[k];\n});\n/LICENSE\u0004CThe MIT License (MIT)\n\nCopyright (c) 2018-present, Yuxi (Evan) You\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n/dist/compiler-dom.d.ts\bcimport { CodegenResult } from '@vue/compiler-core';\r\nimport { CompilerError } from '@vue/compiler-core';\r\nimport { CompilerOptions } from '@vue/compiler-core';\r\nimport { DirectiveTransform } from '@vue/compiler-core';\r\nimport { NodeTransform } from '@vue/compiler-core';\r\nimport { ParserOptions } from '@vue/compiler-core';\r\nimport { RootNode } from '@vue/compiler-core';\r\nimport { SourceLocation } from '@vue/compiler-core';\r\n\r\nexport declare function compile(template: string, options?: CompilerOptions): CodegenResult;\r\n\r\nexport declare function createDOMCompilerError(code: DOMErrorCodes, loc?: SourceLocation): DOMCompilerError;\r\n\r\ndeclare interface DOMCompilerError extends CompilerError {\r\n    code: DOMErrorCodes;\r\n}\r\n\r\nexport declare const DOMDirectiveTransforms: Record<string, DirectiveTransform>;\r\n\r\nexport declare const enum DOMErrorCodes {\r\n    X_V_HTML_NO_EXPRESSION = 51,\r\n    X_V_HTML_WITH_CHILDREN = 52,\r\n    X_V_TEXT_NO_EXPRESSION = 53,\r\n    X_V_TEXT_WITH_CHILDREN = 54,\r\n    X_V_MODEL_ON_INVALID_ELEMENT = 55,\r\n    X_V_MODEL_ARG_ON_ELEMENT = 56,\r\n    X_V_MODEL_ON_FILE_INPUT_ELEMENT = 57,\r\n    X_V_MODEL_UNNECESSARY_VALUE = 58,\r\n    X_V_SHOW_NO_EXPRESSION = 59,\r\n    X_TRANSITION_INVALID_CHILDREN = 60,\r\n    X_IGNORED_SIDE_EFFECT_TAG = 61,\r\n    __EXTEND_POINT__ = 62\r\n}\r\n\r\nexport declare const DOMNodeTransforms: NodeTransform[];\r\n\r\nexport declare function parse(template: string, options?: ParserOptions): RootNode;\r\n\r\nexport declare const parserOptions: ParserOptions;\r\n\r\nexport declare const transformStyle: NodeTransform;\r\n\r\nexport declare const TRANSITION: unique symbol;\r\n\r\nexport declare const TRANSITION_GROUP: unique symbol;\r\n\r\nexport declare const V_MODEL_CHECKBOX: unique symbol;\r\n\r\nexport declare const V_MODEL_DYNAMIC: unique symbol;\r\n\r\nexport declare const V_MODEL_RADIO: unique symbol;\r\n\r\nexport declare const V_MODEL_SELECT: unique symbol;\r\n\r\nexport declare const V_MODEL_TEXT: unique symbol;\r\n\r\nexport declare const V_ON_WITH_KEYS: unique symbol;\r\n\r\nexport declare const V_ON_WITH_MODIFIERS: unique symbol;\r\n\r\nexport declare const V_SHOW: unique symbol;\r\n\r\n\r\nexport * from \"@vue/compiler-core\";\r\n\r\nexport { }\r\n!/dist/compiler-dom.global.prod.jsCvar VueCompilerDOM=function(e){\"use strict\";function t(e,t){const n=Object.create(null),o=e.split(\",\");for(let r=0;r<o.length;r++)n[o[r]]=!0;return t?e=>!!n[e.toLowerCase()]:e=>!!n[e]}const n=/;(?![^(]*\\))/g,o=/:([^]+)/,r=/\\/\\*.*?\\*\\//gs;const s=t(\"html,body,base,head,link,meta,style,title,address,article,aside,footer,header,hgroup,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,summary,template,blockquote,iframe,tfoot\"),i=t(\"svg,animate,animateMotion,animateTransform,circle,clipPath,color-profile,defs,desc,discard,ellipse,feBlend,feColorMatrix,feComponentTransfer,feComposite,feConvolveMatrix,feDiffuseLighting,feDisplacementMap,feDistantLight,feDropShadow,feFlood,feFuncA,feFuncB,feFuncG,feFuncR,feGaussianBlur,feImage,feMerge,feMergeNode,feMorphology,feOffset,fePointLight,feSpecularLighting,feSpotLight,feTile,feTurbulence,filter,foreignObject,g,hatch,hatchpath,image,line,linearGradient,marker,mask,mesh,meshgradient,meshpatch,meshrow,metadata,mpath,path,pattern,polygon,polyline,radialGradient,rect,set,solidcolor,stop,switch,symbol,text,textPath,title,tspan,unknown,use,view\"),c=t(\"area,base,br,col,embed,hr,img,input,link,meta,param,source,track,wbr\"),l={},a=()=>{},p=()=>!1,u=/^on[^a-z]/,f=e=>u.test(e),d=Object.assign,h=Array.isArray,m=e=>\"string\"==typeof e,g=e=>\"symbol\"==typeof e,y=e=>null!==e&&\"object\"==typeof e,v=t(\",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted\"),S=t(\"bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo\"),b=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},E=/-(\\w)/g,N=b((e=>e.replace(E,((e,t)=>t?t.toUpperCase():\"\")))),_=/\\B([A-Z])/g,x=b((e=>e.replace(_,\"-$1\").toLowerCase())),T=b((e=>e.charAt(0).toUpperCase()+e.slice(1))),k=b((e=>e?`on${T(e)}`:\"\"));function O(e){throw e}function C(e){}function I(e,t,n,o){const r=new SyntaxError(String(e));return r.code=e,r.loc=t,r}const M=Symbol(\"\"),R=Symbol(\"\"),P=Symbol(\"\"),w=Symbol(\"\"),$=Symbol(\"\"),L=Symbol(\"\"),V=Symbol(\"\"),A=Symbol(\"\"),D=Symbol(\"\"),B=Symbol(\"\"),F=Symbol(\"\"),j=Symbol(\"\"),H=Symbol(\"\"),W=Symbol(\"\"),K=Symbol(\"\"),U=Symbol(\"\"),J=Symbol(\"\"),G=Symbol(\"\"),z=Symbol(\"\"),Y=Symbol(\"\"),Z=Symbol(\"\"),q=Symbol(\"\"),X=Symbol(\"\"),Q=Symbol(\"\"),ee=Symbol(\"\"),te=Symbol(\"\"),ne=Symbol(\"\"),oe=Symbol(\"\"),re=Symbol(\"\"),se=Symbol(\"\"),ie=Symbol(\"\"),ce=Symbol(\"\"),le=Symbol(\"\"),ae=Symbol(\"\"),pe=Symbol(\"\"),ue=Symbol(\"\"),fe=Symbol(\"\"),de=Symbol(\"\"),he=Symbol(\"\"),me={[M]:\"Fragment\",[R]:\"Teleport\",[P]:\"Suspense\",[w]:\"KeepAlive\",[$]:\"BaseTransition\",[L]:\"openBlock\",[V]:\"createBlock\",[A]:\"createElementBlock\",[D]:\"createVNode\",[B]:\"createElementVNode\",[F]:\"createCommentVNode\",[j]:\"createTextVNode\",[H]:\"createStaticVNode\",[W]:\"resolveComponent\",[K]:\"resolveDynamicComponent\",[U]:\"resolveDirective\",[J]:\"resolveFilter\",[G]:\"withDirectives\",[z]:\"renderList\",[Y]:\"renderSlot\",[Z]:\"createSlots\",[q]:\"toDisplayString\",[X]:\"mergeProps\",[Q]:\"normalizeClass\",[ee]:\"normalizeStyle\",[te]:\"normalizeProps\",[ne]:\"guardReactiveProps\",[oe]:\"toHandlers\",[re]:\"camelize\",[se]:\"capitalize\",[ie]:\"toHandlerKey\",[ce]:\"setBlockTracking\",[le]:\"pushScopeId\",[ae]:\"popScopeId\",[pe]:\"withCtx\",[ue]:\"unref\",[fe]:\"isRef\",[de]:\"withMemo\",[he]:\"isMemoSame\"};function ge(e){Object.getOwnPropertySymbols(e).forEach((t=>{me[t]=e[t]}))}const ye={source:\"\",start:{line:1,column:1,offset:0},end:{line:1,column:1,offset:0}};function ve(e,t=ye){return{type:0,children:e,helpers:new Set,components:[],directives:[],hoists:[],imports:[],cached:0,temps:0,codegenNode:void 0,loc:t}}function Se(e,t,n,o,r,s,i,c=!1,l=!1,a=!1,p=ye){return e&&(c?(e.helper(L),e.helper(Qe(e.inSSR,a))):e.helper(Xe(e.inSSR,a)),i&&e.helper(G)),{type:13,tag:t,props:n,children:o,patchFlag:r,dynamicProps:s,directives:i,isBlock:c,disableTracking:l,isComponent:a,loc:p}}function be(e,t=ye){return{type:17,loc:t,elements:e}}function Ee(e,t=ye){return{type:15,loc:t,properties:e}}function Ne(e,t){return{type:16,loc:ye,key:m(e)?_e(e,!0):e,value:t}}function _e(e,t=!1,n=ye,o=0){return{type:4,loc:n,content:e,isStatic:t,constType:t?3:o}}function xe(e,t=ye){return{type:8,loc:t,children:e}}function Te(e,t=[],n=ye){return{type:14,loc:n,callee:e,arguments:t}}function ke(e,t,n=!1,o=!1,r=ye){return{type:18,params:e,returns:t,newline:n,isSlot:o,loc:r}}function Oe(e,t,n,o=!0){return{type:19,test:e,consequent:t,alternate:n,newline:o,loc:ye}}function Ce(e,t,n=!1){return{type:20,index:e,value:t,isVNode:n,loc:ye}}function Ie(e){return{type:21,body:e,loc:ye}}const Me=e=>4===e.type&&e.isStatic,Re=(e,t)=>e===t||e===x(t);function Pe(e){return Re(e,\"Teleport\")?R:Re(e,\"Suspense\")?P:Re(e,\"KeepAlive\")?w:Re(e,\"BaseTransition\")?$:void 0}const we=/^\\d|[^\\$\\w]/,$e=e=>!we.test(e),Le=/[A-Za-z_$\\xA0-\\uFFFF]/,Ve=/[\\.\\?\\w$\\xA0-\\uFFFF]/,Ae=/\\s+[.[]\\s*|\\s*[.[]\\s+/g,De=e=>{e=e.trim().replace(Ae,(e=>e.trim()));let t=0,n=[],o=0,r=0,s=null;for(let i=0;i<e.length;i++){const c=e.charAt(i);switch(t){case 0:if(\"[\"===c)n.push(t),t=1,o++;else if(\"(\"===c)n.push(t),t=2,r++;else if(!(0===i?Le:Ve).test(c))return!1;break;case 1:\"'\"===c||'\"'===c||\"`\"===c?(n.push(t),t=3,s=c):\"[\"===c?o++:\"]\"===c&&(--o||(t=n.pop()));break;case 2:if(\"'\"===c||'\"'===c||\"`\"===c)n.push(t),t=3,s=c;else if(\"(\"===c)r++;else if(\")\"===c){if(i===e.length-1)return!1;--r||(t=n.pop())}break;case 3:c===s&&(t=n.pop(),s=null)}}return!o&&!r},Be=a,Fe=De;function je(e,t,n){const o={source:e.source.slice(t,t+n),start:He(e.start,e.source,t),end:e.end};return null!=n&&(o.end=He(e.start,e.source,t+n)),o}function He(e,t,n=t.length){return We(d({},e),t,n)}function We(e,t,n=t.length){let o=0,r=-1;for(let s=0;s<n;s++)10===t.charCodeAt(s)&&(o++,r=s);return e.offset+=n,e.line+=o,e.column=-1===r?e.column+n:n-r,e}function Ke(e,t,n=!1){for(let o=0;o<e.props.length;o++){const r=e.props[o];if(7===r.type&&(n||r.exp)&&(m(t)?r.name===t:t.test(r.name)))return r}}function Ue(e,t,n=!1,o=!1){for(let r=0;r<e.props.length;r++){const s=e.props[r];if(6===s.type){if(n)continue;if(s.name===t&&(s.value||o))return s}else if(\"bind\"===s.name&&(s.exp||o)&&Je(s.arg,t))return s}}function Je(e,t){return!(!e||!Me(e)||e.content!==t)}function Ge(e){return e.props.some((e=>!(7!==e.type||\"bind\"!==e.name||e.arg&&4===e.arg.type&&e.arg.isStatic)))}function ze(e){return 5===e.type||2===e.type}function Ye(e){return 7===e.type&&\"slot\"===e.name}function Ze(e){return 1===e.type&&3===e.tagType}function qe(e){return 1===e.type&&2===e.tagType}function Xe(e,t){return e||t?D:B}function Qe(e,t){return e||t?V:A}const et=new Set([te,ne]);function tt(e,t=[]){if(e&&!m(e)&&14===e.type){const n=e.callee;if(!m(n)&&et.has(n))return tt(e.arguments[0],t.concat(e))}return[e,t]}function nt(e,t,n){let o,r,s=13===e.type?e.props:e.arguments[2],i=[];if(s&&!m(s)&&14===s.type){const e=tt(s);s=e[0],i=e[1],r=i[i.length-1]}if(null==s||m(s))o=Ee([t]);else if(14===s.type){const e=s.arguments[0];m(e)||15!==e.type?s.callee===oe?o=Te(n.helper(X),[Ee([t]),s]):s.arguments.unshift(Ee([t])):ot(t,e)||e.properties.unshift(t),!o&&(o=s)}else 15===s.type?(ot(t,s)||s.properties.unshift(t),o=s):(o=Te(n.helper(X),[Ee([t]),s]),r&&r.callee===ne&&(r=i[i.length-2]));13===e.type?r?r.arguments[0]=o:e.props=o:r?r.arguments[0]=o:e.arguments[2]=o}function ot(e,t){let n=!1;if(4===e.key.type){const o=e.key.content;n=t.properties.some((e=>4===e.key.type&&e.key.content===o))}return n}function rt(e,t){return`_${t}_${e.replace(/[^\\w]/g,((t,n)=>\"-\"===t?\"_\":e.charCodeAt(n).toString()))}`}function st(e){return 14===e.type&&e.callee===de?e.arguments[1].returns:e}function it(e,{helper:t,removeHelper:n,inSSR:o}){e.isBlock||(e.isBlock=!0,n(Xe(o,e.isComponent)),t(L),t(Qe(o,e.isComponent)))}const ct={COMPILER_IS_ON_ELEMENT:{message:'Platform-native elements with \"is\" prop will no longer be treated as components in Vue 3 unless the \"is\" value is explicitly prefixed with \"vue:\".',link:\"https://v3-migration.vuejs.org/breaking-changes/custom-elements-interop.html\"},COMPILER_V_BIND_SYNC:{message:e=>`.sync modifier for v-bind has been removed. Use v-model with argument instead. \\`v-bind:${e}.sync\\` should be changed to \\`v-model:${e}\\`.`,link:\"https://v3-migration.vuejs.org/breaking-changes/v-model.html\"},COMPILER_V_BIND_PROP:{message:\".prop modifier for v-bind has been removed and no longer necessary. Vue 3 will automatically set a binding as DOM property when appropriate.\"},COMPILER_V_BIND_OBJECT_ORDER:{message:'v-bind=\"obj\" usage is now order sensitive and behaves like JavaScript object spread: it will now overwrite an existing non-mergeable attribute that appears before v-bind in the case of conflict. To retain 2.x behavior, move v-bind to make it the first attribute. You can also suppress this warning if the usage is intended.',link:\"https://v3-migration.vuejs.org/breaking-changes/v-bind.html\"},COMPILER_V_ON_NATIVE:{message:\".native modifier for v-on has been removed as is no longer necessary.\",link:\"https://v3-migration.vuejs.org/breaking-changes/v-on-native-modifier-removed.html\"},COMPILER_V_IF_V_FOR_PRECEDENCE:{message:\"v-if / v-for precedence when used on the same element has changed in Vue 3: v-if now takes higher precedence and will no longer have access to v-for scope variables. It is best to avoid the ambiguity with <template> tags or use a computed property that filters v-for data source.\",link:\"https://v3-migration.vuejs.org/breaking-changes/v-if-v-for.html\"},COMPILER_NATIVE_TEMPLATE:{message:\"<template> with no special directives will render as a native template element instead of its inner content in Vue 3.\"},COMPILER_INLINE_TEMPLATE:{message:'\"inline-template\" has been removed in Vue 3.',link:\"https://v3-migration.vuejs.org/breaking-changes/inline-template-attribute.html\"},COMPILER_FILTER:{message:'filters have been removed in Vue 3. The \"|\" symbol will be treated as native JavaScript bitwise OR operator. Use method calls or computed properties instead.',link:\"https://v3-migration.vuejs.org/breaking-changes/filters.html\"}};function lt(e,t){const n=t.options?t.options.compatConfig:t.compatConfig,o=n&&n[e];return\"MODE\"===e?o||3:o}function at(e,t){const n=lt(\"MODE\",t),o=lt(e,t);return 3===n?!0===o:!1!==o}function pt(e,t,n,...o){return at(e,t)}const ut=/&(gt|lt|amp|apos|quot);/g,ft={gt:\">\",lt:\"<\",amp:\"&\",apos:\"'\",quot:'\"'},dt={delimiters:[\"{{\",\"}}\"],getNamespace:()=>0,getTextMode:()=>0,isVoidTag:p,isPreTag:p,isCustomElement:p,decodeEntities:e=>e.replace(ut,((e,t)=>ft[t])),onError:O,onWarn:C,comments:!1};function ht(e,t={}){const n=function(e,t){const n=d({},dt);let o;for(o in t)n[o]=void 0===t[o]?dt[o]:t[o];return{options:n,column:1,line:1,offset:0,originalSource:e,source:e,inPre:!1,inVPre:!1,onWarn:n.onWarn}}(e,t),o=Ct(n);return ve(mt(n,0,[]),It(n,o))}function mt(e,t,n){const o=Mt(n),r=o?o.ns:0,s=[];for(;!Lt(e,t,n);){const i=e.source;let c;if(0===t||1===t)if(!e.inVPre&&Rt(i,e.options.delimiters[0]))c=Tt(e,t);else if(0===t&&\"<\"===i[0])if(1===i.length);else if(\"!\"===i[1])c=Rt(i,\"\\x3c!--\")?vt(e):Rt(i,\"<!DOCTYPE\")?St(e):Rt(i,\"<![CDATA[\")&&0!==r?yt(e,n):St(e);else if(\"/\"===i[1])if(2===i.length);else{if(\">\"===i[2]){Pt(e,3);continue}if(/[a-z]/i.test(i[2])){Nt(e,1,o);continue}c=St(e)}else/[a-z]/i.test(i[1])?(c=bt(e,n),at(\"COMPILER_NATIVE_TEMPLATE\",e)&&c&&\"template\"===c.tag&&!c.props.some((e=>7===e.type&&Et(e.name)))&&(c=c.children)):\"?\"===i[1]&&(c=St(e));if(c||(c=kt(e,t)),h(c))for(let e=0;e<c.length;e++)gt(s,c[e]);else gt(s,c)}let i=!1;if(2!==t&&1!==t){const t=\"preserve\"!==e.options.whitespace;for(let n=0;n<s.length;n++){const o=s[n];if(2===o.type)if(e.inPre)o.content=o.content.replace(/\\r\\n/g,\"\\n\");else if(/[^\\t\\r\\n\\f ]/.test(o.content))t&&(o.content=o.content.replace(/[\\t\\r\\n\\f ]+/g,\" \"));else{const e=s[n-1],r=s[n+1];!e||!r||t&&(3===e.type&&3===r.type||3===e.type&&1===r.type||1===e.type&&3===r.type||1===e.type&&1===r.type&&/[\\r\\n]/.test(o.content))?(i=!0,s[n]=null):o.content=\" \"}else 3!==o.type||e.options.comments||(i=!0,s[n]=null)}if(e.inPre&&o&&e.options.isPreTag(o.tag)){const e=s[0];e&&2===e.type&&(e.content=e.content.replace(/^\\r?\\n/,\"\"))}}return i?s.filter(Boolean):s}function gt(e,t){if(2===t.type){const n=Mt(e);if(n&&2===n.type&&n.loc.end.offset===t.loc.start.offset)return n.content+=t.content,n.loc.end=t.loc.end,void(n.loc.source+=t.loc.source)}e.push(t)}function yt(e,t){Pt(e,9);const n=mt(e,3,t);return 0===e.source.length||Pt(e,3),n}function vt(e){const t=Ct(e);let n;const o=/--(\\!)?>/.exec(e.source);if(o){n=e.source.slice(4,o.index);const t=e.source.slice(0,o.index);let r=1,s=0;for(;-1!==(s=t.indexOf(\"\\x3c!--\",r));)Pt(e,s-r+1),r=s+1;Pt(e,o.index+o[0].length-r+1)}else n=e.source.slice(4),Pt(e,e.source.length);return{type:3,content:n,loc:It(e,t)}}function St(e){const t=Ct(e),n=\"?\"===e.source[1]?1:2;let o;const r=e.source.indexOf(\">\");return-1===r?(o=e.source.slice(n),Pt(e,e.source.length)):(o=e.source.slice(n,r),Pt(e,r+1)),{type:3,content:o,loc:It(e,t)}}function bt(e,t){const n=e.inPre,o=e.inVPre,r=Mt(t),s=Nt(e,0,r),i=e.inPre&&!n,c=e.inVPre&&!o;if(s.isSelfClosing||e.options.isVoidTag(s.tag))return i&&(e.inPre=!1),c&&(e.inVPre=!1),s;t.push(s);const l=e.options.getTextMode(s,r),a=mt(e,l,t);t.pop();{const t=s.props.find((e=>6===e.type&&\"inline-template\"===e.name));if(t&&pt(\"COMPILER_INLINE_TEMPLATE\",e)){const n=It(e,s.loc.end);t.value={type:2,content:n.source,loc:n}}}if(s.children=a,Vt(e.source,s.tag))Nt(e,1,r);else if(0===e.source.length&&\"script\"===s.tag.toLowerCase()){const e=a[0];e&&Rt(e.loc.source,\"\\x3c!--\")}return s.loc=It(e,s.loc.start),i&&(e.inPre=!1),c&&(e.inVPre=!1),s}const Et=t(\"if,else,else-if,for,slot\");function Nt(e,t,n){const o=Ct(e),r=/^<\\/?([a-z][^\\t\\r\\n\\f />]*)/i.exec(e.source),s=r[1],i=e.options.getNamespace(s,n);Pt(e,r[0].length),wt(e);const c=Ct(e),l=e.source;e.options.isPreTag(s)&&(e.inPre=!0);let a=_t(e,t);0===t&&!e.inVPre&&a.some((e=>7===e.type&&\"pre\"===e.name))&&(e.inVPre=!0,d(e,c),e.source=l,a=_t(e,t).filter((e=>\"v-pre\"!==e.name)));let p=!1;if(0===e.source.length||(p=Rt(e.source,\"/>\"),Pt(e,p?2:1)),1===t)return;let u=0;return e.inVPre||(\"slot\"===s?u=2:\"template\"===s?a.some((e=>7===e.type&&Et(e.name)))&&(u=3):function(e,t,n){const o=n.options;if(o.isCustomElement(e))return!1;if(\"component\"===e||/^[A-Z]/.test(e)||Pe(e)||o.isBuiltInComponent&&o.isBuiltInComponent(e)||o.isNativeTag&&!o.isNativeTag(e))return!0;for(let r=0;r<t.length;r++){const e=t[r];if(6===e.type){if(\"is\"===e.name&&e.value){if(e.value.content.startsWith(\"vue:\"))return!0;if(pt(\"COMPILER_IS_ON_ELEMENT\",n))return!0}}else{if(\"is\"===e.name)return!0;if(\"bind\"===e.name&&Je(e.arg,\"is\")&&pt(\"COMPILER_IS_ON_ELEMENT\",n))return!0}}}(s,a,e)&&(u=1)),{type:1,ns:i,tag:s,tagType:u,props:a,isSelfClosing:p,children:[],loc:It(e,o),codegenNode:void 0}}function _t(e,t){const n=[],o=new Set;for(;e.source.length>0&&!Rt(e.source,\">\")&&!Rt(e.source,\"/>\");){if(Rt(e.source,\"/\")){Pt(e,1),wt(e);continue}const r=xt(e,o);6===r.type&&r.value&&\"class\"===r.name&&(r.value.content=r.value.content.replace(/\\s+/g,\" \").trim()),0===t&&n.push(r),/^[^\\t\\r\\n\\f />]/.test(e.source),wt(e)}return n}function xt(e,t){const n=Ct(e),o=/^[^\\t\\r\\n\\f />][^\\t\\r\\n\\f />=]*/.exec(e.source)[0];t.has(o),t.add(o);{const e=/[\"'<]/g;let t;for(;t=e.exec(o););}let r;Pt(e,o.length),/^[\\t\\r\\n\\f ]*=/.test(e.source)&&(wt(e),Pt(e,1),wt(e),r=function(e){const t=Ct(e);let n;const o=e.source[0],r='\"'===o||\"'\"===o;if(r){Pt(e,1);const t=e.source.indexOf(o);-1===t?n=Ot(e,e.source.length,4):(n=Ot(e,t,4),Pt(e,1))}else{const t=/^[^\\t\\r\\n\\f >]+/.exec(e.source);if(!t)return;const o=/[\"'<=`]/g;let r;for(;r=o.exec(t[0]););n=Ot(e,t[0].length,4)}return{content:n,isQuoted:r,loc:It(e,t)}}(e));const s=It(e,n);if(!e.inVPre&&/^(v-[A-Za-z0-9-]|:|\\.|@|#)/.test(o)){const t=/(?:^v-([a-z0-9-]+))?(?:(?::|^\\.|^@|^#)(\\[[^\\]]+\\]|[^\\.]+))?(.+)?$/i.exec(o);let i,c=Rt(o,\".\"),l=t[1]||(c||Rt(o,\":\")?\"bind\":Rt(o,\"@\")?\"on\":\"slot\");if(t[2]){const r=\"slot\"===l,s=o.lastIndexOf(t[2]),c=It(e,$t(e,n,s),$t(e,n,s+t[2].length+(r&&t[3]||\"\").length));let a=t[2],p=!0;a.startsWith(\"[\")?(p=!1,a=a.endsWith(\"]\")?a.slice(1,a.length-1):a.slice(1)):r&&(a+=t[3]||\"\"),i={type:4,content:a,isStatic:p,constType:p?3:0,loc:c}}if(r&&r.isQuoted){const e=r.loc;e.start.offset++,e.start.column++,e.end=He(e.start,r.content),e.source=e.source.slice(1,-1)}const a=t[3]?t[3].slice(1).split(\".\"):[];return c&&a.push(\"prop\"),\"bind\"===l&&i&&a.includes(\"sync\")&&pt(\"COMPILER_V_BIND_SYNC\",e,0)&&(l=\"model\",a.splice(a.indexOf(\"sync\"),1)),{type:7,name:l,exp:r&&{type:4,content:r.content,isStatic:!1,constType:0,loc:r.loc},arg:i,modifiers:a,loc:s}}return!e.inVPre&&Rt(o,\"v-\"),{type:6,name:o,value:r&&{type:2,content:r.content,loc:r.loc},loc:s}}function Tt(e,t){const[n,o]=e.options.delimiters,r=e.source.indexOf(o,n.length);if(-1===r)return;const s=Ct(e);Pt(e,n.length);const i=Ct(e),c=Ct(e),l=r-n.length,a=e.source.slice(0,l),p=Ot(e,l,t),u=p.trim(),f=p.indexOf(u);f>0&&We(i,a,f);return We(c,a,l-(p.length-u.length-f)),Pt(e,o.length),{type:5,content:{type:4,isStatic:!1,constType:0,content:u,loc:It(e,i,c)},loc:It(e,s)}}function kt(e,t){const n=3===t?[\"]]>\"]:[\"<\",e.options.delimiters[0]];let o=e.source.length;for(let s=0;s<n.length;s++){const t=e.source.indexOf(n[s],1);-1!==t&&o>t&&(o=t)}const r=Ct(e);return{type:2,content:Ot(e,o,t),loc:It(e,r)}}function Ot(e,t,n){const o=e.source.slice(0,t);return Pt(e,t),2!==n&&3!==n&&o.includes(\"&\")?e.options.decodeEntities(o,4===n):o}function Ct(e){const{column:t,line:n,offset:o}=e;return{column:t,line:n,offset:o}}function It(e,t,n){return{start:t,end:n=n||Ct(e),source:e.originalSource.slice(t.offset,n.offset)}}function Mt(e){return e[e.length-1]}function Rt(e,t){return e.startsWith(t)}function Pt(e,t){const{source:n}=e;We(e,n,t),e.source=n.slice(t)}function wt(e){const t=/^[\\t\\r\\n\\f ]+/.exec(e.source);t&&Pt(e,t[0].length)}function $t(e,t,n){return He(t,e.originalSource.slice(t.offset,n),n)}function Lt(e,t,n){const o=e.source;switch(t){case 0:if(Rt(o,\"</\"))for(let e=n.length-1;e>=0;--e)if(Vt(o,n[e].tag))return!0;break;case 1:case 2:{const e=Mt(n);if(e&&Vt(o,e.tag))return!0;break}case 3:if(Rt(o,\"]]>\"))return!0}return!o}function Vt(e,t){return Rt(e,\"</\")&&e.slice(2,2+t.length).toLowerCase()===t.toLowerCase()&&/[\\t\\r\\n\\f />]/.test(e[2+t.length]||\">\")}function At(e,t){Bt(e,t,Dt(e,e.children[0]))}function Dt(e,t){const{children:n}=e;return 1===n.length&&1===t.type&&!qe(t)}function Bt(e,t,n=!1){const{children:o}=e,r=o.length;let s=0;for(let i=0;i<o.length;i++){const e=o[i];if(1===e.type&&0===e.tagType){const o=n?0:Ft(e,t);if(o>0){if(o>=2){e.codegenNode.patchFlag=\"-1\",e.codegenNode=t.hoist(e.codegenNode),s++;continue}}else{const n=e.codegenNode;if(13===n.type){const o=Ut(n);if((!o||512===o||1===o)&&Wt(e,t)>=2){const o=Kt(e);o&&(n.props=t.hoist(o))}n.dynamicProps&&(n.dynamicProps=t.hoist(n.dynamicProps))}}}if(1===e.type){const n=1===e.tagType;n&&t.scopes.vSlot++,Bt(e,t),n&&t.scopes.vSlot--}else if(11===e.type)Bt(e,t,1===e.children.length);else if(9===e.type)for(let n=0;n<e.branches.length;n++)Bt(e.branches[n],t,1===e.branches[n].children.length)}s&&t.transformHoist&&t.transformHoist(o,t,e),s&&s===r&&1===e.type&&0===e.tagType&&e.codegenNode&&13===e.codegenNode.type&&h(e.codegenNode.children)&&(e.codegenNode.children=t.hoist(be(e.codegenNode.children)))}function Ft(e,t){const{constantCache:n}=t;switch(e.type){case 1:if(0!==e.tagType)return 0;const o=n.get(e);if(void 0!==o)return o;const r=e.codegenNode;if(13!==r.type)return 0;if(r.isBlock&&\"svg\"!==e.tag&&\"foreignObject\"!==e.tag)return 0;if(Ut(r))return n.set(e,0),0;{let o=3;const s=Wt(e,t);if(0===s)return n.set(e,0),0;s<o&&(o=s);for(let r=0;r<e.children.length;r++){const s=Ft(e.children[r],t);if(0===s)return n.set(e,0),0;s<o&&(o=s)}if(o>1)for(let r=0;r<e.props.length;r++){const s=e.props[r];if(7===s.type&&\"bind\"===s.name&&s.exp){const r=Ft(s.exp,t);if(0===r)return n.set(e,0),0;r<o&&(o=r)}}if(r.isBlock){for(let t=0;t<e.props.length;t++){if(7===e.props[t].type)return n.set(e,0),0}t.removeHelper(L),t.removeHelper(Qe(t.inSSR,r.isComponent)),r.isBlock=!1,t.helper(Xe(t.inSSR,r.isComponent))}return n.set(e,o),o}case 2:case 3:return 3;case 9:case 11:case 10:default:return 0;case 5:case 12:return Ft(e.content,t);case 4:return e.constType;case 8:let s=3;for(let n=0;n<e.children.length;n++){const o=e.children[n];if(m(o)||g(o))continue;const r=Ft(o,t);if(0===r)return 0;r<s&&(s=r)}return s}}const jt=new Set([Q,ee,te,ne]);function Ht(e,t){if(14===e.type&&!m(e.callee)&&jt.has(e.callee)){const n=e.arguments[0];if(4===n.type)return Ft(n,t);if(14===n.type)return Ht(n,t)}return 0}function Wt(e,t){let n=3;const o=Kt(e);if(o&&15===o.type){const{properties:e}=o;for(let o=0;o<e.length;o++){const{key:r,value:s}=e[o],i=Ft(r,t);if(0===i)return i;let c;if(i<n&&(n=i),c=4===s.type?Ft(s,t):14===s.type?Ht(s,t):0,0===c)return c;c<n&&(n=c)}}return n}function Kt(e){const t=e.codegenNode;if(13===t.type)return t.props}function Ut(e){const t=e.patchFlag;return t?parseInt(t,10):void 0}function Jt(e,{filename:t=\"\",prefixIdentifiers:n=!1,hoistStatic:o=!1,cacheHandlers:r=!1,nodeTransforms:s=[],directiveTransforms:i={},transformHoist:c=null,isBuiltInComponent:p=a,isCustomElement:u=a,expressionPlugins:f=[],scopeId:d=null,slotted:h=!0,ssr:g=!1,inSSR:y=!1,ssrCssVars:v=\"\",bindingMetadata:S=l,inline:b=!1,isTS:E=!1,onError:_=O,onWarn:x=C,compatConfig:k}){const I=t.replace(/\\?.*$/,\"\").match(/([^/\\\\]+)\\.\\w+$/),M={selfName:I&&T(N(I[1])),prefixIdentifiers:n,hoistStatic:o,cacheHandlers:r,nodeTransforms:s,directiveTransforms:i,transformHoist:c,isBuiltInComponent:p,isCustomElement:u,expressionPlugins:f,scopeId:d,slotted:h,ssr:g,inSSR:y,ssrCssVars:v,bindingMetadata:S,inline:b,isTS:E,onError:_,onWarn:x,compatConfig:k,root:e,helpers:new Map,components:new Set,directives:new Set,hoists:[],imports:[],constantCache:new Map,temps:0,cached:0,identifiers:Object.create(null),scopes:{vFor:0,vSlot:0,vPre:0,vOnce:0},parent:null,currentNode:e,childIndex:0,inVOnce:!1,helper(e){const t=M.helpers.get(e)||0;return M.helpers.set(e,t+1),e},removeHelper(e){const t=M.helpers.get(e);if(t){const n=t-1;n?M.helpers.set(e,n):M.helpers.delete(e)}},helperString:e=>`_${me[M.helper(e)]}`,replaceNode(e){M.parent.children[M.childIndex]=M.currentNode=e},removeNode(e){const t=e?M.parent.children.indexOf(e):M.currentNode?M.childIndex:-1;e&&e!==M.currentNode?M.childIndex>t&&(M.childIndex--,M.onNodeRemoved()):(M.currentNode=null,M.onNodeRemoved()),M.parent.children.splice(t,1)},onNodeRemoved:()=>{},addIdentifiers(e){},removeIdentifiers(e){},hoist(e){m(e)&&(e=_e(e)),M.hoists.push(e);const t=_e(`_hoisted_${M.hoists.length}`,!1,e.loc,2);return t.hoisted=e,t},cache:(e,t=!1)=>Ce(M.cached++,e,t)};return M.filters=new Set,M}function Gt(e,t){const n=Jt(e,t);zt(e,n),t.hoistStatic&&At(e,n),t.ssr||function(e,t){const{helper:n}=t,{children:o}=e;if(1===o.length){const n=o[0];if(Dt(e,n)&&n.codegenNode){const o=n.codegenNode;13===o.type&&it(o,t),e.codegenNode=o}else e.codegenNode=n}else if(o.length>1){let o=64;e.codegenNode=Se(t,n(M),void 0,e.children,o+\"\",void 0,void 0,!0,void 0,!1)}}(e,n),e.helpers=new Set([...n.helpers.keys()]),e.components=[...n.components],e.directives=[...n.directives],e.imports=n.imports,e.hoists=n.hoists,e.temps=n.temps,e.cached=n.cached,e.filters=[...n.filters]}function zt(e,t){t.currentNode=e;const{nodeTransforms:n}=t,o=[];for(let s=0;s<n.length;s++){const r=n[s](e,t);if(r&&(h(r)?o.push(...r):o.push(r)),!t.currentNode)return;e=t.currentNode}switch(e.type){case 3:t.ssr||t.helper(F);break;case 5:t.ssr||t.helper(q);break;case 9:for(let n=0;n<e.branches.length;n++)zt(e.branches[n],t);break;case 10:case 11:case 1:case 0:!function(e,t){let n=0;const o=()=>{n--};for(;n<e.children.length;n++){const r=e.children[n];m(r)||(t.parent=e,t.childIndex=n,t.onNodeRemoved=o,zt(r,t))}}(e,t)}t.currentNode=e;let r=o.length;for(;r--;)o[r]()}function Yt(e,t){const n=m(e)?t=>t===e:t=>e.test(t);return(e,o)=>{if(1===e.type){const{props:r}=e;if(3===e.tagType&&r.some(Ye))return;const s=[];for(let i=0;i<r.length;i++){const c=r[i];if(7===c.type&&n(c.name)){r.splice(i,1),i--;const n=t(e,c,o);n&&s.push(n)}}return s}}}const Zt=\"/*#__PURE__*/\",qt=e=>`${me[e]}: _${me[e]}`;function Xt(e,{mode:t=\"function\",prefixIdentifiers:n=\"module\"===t,sourceMap:o=!1,filename:r=\"template.vue.html\",scopeId:s=null,optimizeImports:i=!1,runtimeGlobalName:c=\"Vue\",runtimeModuleName:l=\"vue\",ssrRuntimeModuleName:a=\"vue/server-renderer\",ssr:p=!1,isTS:u=!1,inSSR:f=!1}){const d={mode:t,prefixIdentifiers:n,sourceMap:o,filename:r,scopeId:s,optimizeImports:i,runtimeGlobalName:c,runtimeModuleName:l,ssrRuntimeModuleName:a,ssr:p,isTS:u,inSSR:f,source:e.loc.source,code:\"\",column:1,line:1,offset:0,indentLevel:0,pure:!1,map:void 0,helper:e=>`_${me[e]}`,push(e,t){d.code+=e},indent(){h(++d.indentLevel)},deindent(e=!1){e?--d.indentLevel:h(--d.indentLevel)},newline(){h(d.indentLevel)}};function h(e){d.push(\"\\n\"+\"  \".repeat(e))}return d}function Qt(e,t={}){const n=Xt(e,t);t.onContextCreated&&t.onContextCreated(n);const{mode:o,push:r,prefixIdentifiers:s,indent:i,deindent:c,newline:l,ssr:a}=n,p=Array.from(e.helpers),u=p.length>0,f=!s&&\"module\"!==o,d=n;!function(e,t){const{push:n,newline:o,runtimeGlobalName:r}=t,s=r,i=Array.from(e.helpers);if(i.length>0&&(n(`const _Vue = ${s}\\n`),e.hoists.length)){n(`const { ${[D,B,F,j,H].filter((e=>i.includes(e))).map(qt).join(\", \")} } = _Vue\\n`)}(function(e,t){if(!e.length)return;t.pure=!0;const{push:n,newline:o}=t;o();for(let r=0;r<e.length;r++){const s=e[r];s&&(n(`const _hoisted_${r+1} = `),on(s,t),o())}t.pure=!1})(e.hoists,t),o(),n(\"return \")}(e,d);if(r(`function ${a?\"ssrRender\":\"render\"}(${(a?[\"_ctx\",\"_push\",\"_parent\",\"_attrs\"]:[\"_ctx\",\"_cache\"]).join(\", \")}) {`),i(),f&&(r(\"with (_ctx) {\"),i(),u&&(r(`const { ${p.map(qt).join(\", \")} } = _Vue`),r(\"\\n\"),l())),e.components.length&&(en(e.components,\"component\",n),(e.directives.length||e.temps>0)&&l()),e.directives.length&&(en(e.directives,\"directive\",n),e.temps>0&&l()),e.filters&&e.filters.length&&(l(),en(e.filters,\"filter\",n),l()),e.temps>0){r(\"let \");for(let t=0;t<e.temps;t++)r(`${t>0?\", \":\"\"}_temp${t}`)}return(e.components.length||e.directives.length||e.temps)&&(r(\"\\n\"),l()),a||r(\"return \"),e.codegenNode?on(e.codegenNode,n):r(\"null\"),f&&(c(),r(\"}\")),c(),r(\"}\"),{ast:e,code:n.code,preamble:\"\",map:n.map?n.map.toJSON():void 0}}function en(e,t,{helper:n,push:o,newline:r,isTS:s}){const i=n(\"filter\"===t?J:\"component\"===t?W:U);for(let c=0;c<e.length;c++){let n=e[c];const l=n.endsWith(\"__self\");l&&(n=n.slice(0,-6)),o(`const ${rt(n,t)} = ${i}(${JSON.stringify(n)}${l?\", true\":\"\"})${s?\"!\":\"\"}`),c<e.length-1&&r()}}function tn(e,t){const n=e.length>3||!1;t.push(\"[\"),n&&t.indent(),nn(e,t,n),n&&t.deindent(),t.push(\"]\")}function nn(e,t,n=!1,o=!0){const{push:r,newline:s}=t;for(let i=0;i<e.length;i++){const c=e[i];m(c)?r(c):h(c)?tn(c,t):on(c,t),i<e.length-1&&(n?(o&&r(\",\"),s()):o&&r(\", \"))}}function on(e,t){if(m(e))t.push(e);else if(g(e))t.push(t.helper(e));else switch(e.type){case 1:case 9:case 11:case 12:on(e.codegenNode,t);break;case 2:!function(e,t){t.push(JSON.stringify(e.content),e)}(e,t);break;case 4:rn(e,t);break;case 5:!function(e,t){const{push:n,helper:o,pure:r}=t;r&&n(Zt);n(`${o(q)}(`),on(e.content,t),n(\")\")}(e,t);break;case 8:sn(e,t);break;case 3:!function(e,t){const{push:n,helper:o,pure:r}=t;r&&n(Zt);n(`${o(F)}(${JSON.stringify(e.content)})`,e)}(e,t);break;case 13:!function(e,t){const{push:n,helper:o,pure:r}=t,{tag:s,props:i,children:c,patchFlag:l,dynamicProps:a,directives:p,isBlock:u,disableTracking:f,isComponent:d}=e;p&&n(o(G)+\"(\");u&&n(`(${o(L)}(${f?\"true\":\"\"}), `);r&&n(Zt);const h=u?Qe(t.inSSR,d):Xe(t.inSSR,d);n(o(h)+\"(\",e),nn(function(e){let t=e.length;for(;t--&&null==e[t];);return e.slice(0,t+1).map((e=>e||\"null\"))}([s,i,c,l,a]),t),n(\")\"),u&&n(\")\");p&&(n(\", \"),on(p,t),n(\")\"))}(e,t);break;case 14:!function(e,t){const{push:n,helper:o,pure:r}=t,s=m(e.callee)?e.callee:o(e.callee);r&&n(Zt);n(s+\"(\",e),nn(e.arguments,t),n(\")\")}(e,t);break;case 15:!function(e,t){const{push:n,indent:o,deindent:r,newline:s}=t,{properties:i}=e;if(!i.length)return void n(\"{}\",e);const c=i.length>1||!1;n(c?\"{\":\"{ \"),c&&o();for(let l=0;l<i.length;l++){const{key:e,value:o}=i[l];cn(e,t),n(\": \"),on(o,t),l<i.length-1&&(n(\",\"),s())}c&&r(),n(c?\"}\":\" }\")}(e,t);break;case 17:!function(e,t){tn(e.elements,t)}(e,t);break;case 18:!function(e,t){const{push:n,indent:o,deindent:r}=t,{params:s,returns:i,body:c,newline:l,isSlot:a}=e;a&&n(`_${me[pe]}(`);n(\"(\",e),h(s)?nn(s,t):s&&on(s,t);n(\") => \"),(l||c)&&(n(\"{\"),o());i?(l&&n(\"return \"),h(i)?tn(i,t):on(i,t)):c&&on(c,t);(l||c)&&(r(),n(\"}\"));a&&(e.isNonScopedSlot&&n(\", undefined, true\"),n(\")\"))}(e,t);break;case 19:!function(e,t){const{test:n,consequent:o,alternate:r,newline:s}=e,{push:i,indent:c,deindent:l,newline:a}=t;if(4===n.type){const e=!$e(n.content);e&&i(\"(\"),rn(n,t),e&&i(\")\")}else i(\"(\"),on(n,t),i(\")\");s&&c(),t.indentLevel++,s||i(\" \"),i(\"? \"),on(o,t),t.indentLevel--,s&&a(),s||i(\" \"),i(\": \");const p=19===r.type;p||t.indentLevel++;on(r,t),p||t.indentLevel--;s&&l(!0)}(e,t);break;case 20:!function(e,t){const{push:n,helper:o,indent:r,deindent:s,newline:i}=t;n(`_cache[${e.index}] || (`),e.isVNode&&(r(),n(`${o(ce)}(-1),`),i());n(`_cache[${e.index}] = `),on(e.value,t),e.isVNode&&(n(\",\"),i(),n(`${o(ce)}(1),`),i(),n(`_cache[${e.index}]`),s());n(\")\")}(e,t);break;case 21:nn(e.body,t,!0,!1)}}function rn(e,t){const{content:n,isStatic:o}=e;t.push(o?JSON.stringify(n):n,e)}function sn(e,t){for(let n=0;n<e.children.length;n++){const o=e.children[n];m(o)?t.push(o):on(o,t)}}function cn(e,t){const{push:n}=t;if(8===e.type)n(\"[\"),sn(e,t),n(\"]\");else if(e.isStatic){n($e(e.content)?e.content:JSON.stringify(e.content),e)}else n(`[${e.content}]`,e)}function ln(e,t=[]){switch(e.type){case\"Identifier\":t.push(e);break;case\"MemberExpression\":let n=e;for(;\"MemberExpression\"===n.type;)n=n.object;t.push(n);break;case\"ObjectPattern\":for(const o of e.properties)ln(\"RestElement\"===o.type?o.argument:o.value,t);break;case\"ArrayPattern\":e.elements.forEach((e=>{e&&ln(e,t)}));break;case\"RestElement\":ln(e.argument,t);break;case\"AssignmentPattern\":ln(e.left,t)}return t}const an=e=>e&&(\"ObjectProperty\"===e.type||\"ObjectMethod\"===e.type)&&!e.computed;function pn(e,t,n=!1,o=!1,r=Object.create(t.identifiers)){return e}const un=Yt(/^(if|else|else-if)$/,((e,t,n)=>fn(e,t,n,((e,t,o)=>{const r=n.parent.children;let s=r.indexOf(e),i=0;for(;s-- >=0;){const e=r[s];e&&9===e.type&&(i+=e.branches.length)}return()=>{if(o)e.codegenNode=hn(t,i,n);else{const o=function(e){for(;;)if(19===e.type){if(19!==e.alternate.type)return e;e=e.alternate}else 20===e.type&&(e=e.value)}(e.codegenNode);o.alternate=hn(t,i+e.branches.length-1,n)}}}))));function fn(e,t,n,o){if(!(\"else\"===t.name||t.exp&&t.exp.content.trim())){t.exp=_e(\"true\",!1,t.exp?t.exp.loc:e.loc)}if(\"if\"===t.name){const r=dn(e,t),s={type:9,loc:e.loc,branches:[r]};if(n.replaceNode(s),o)return o(s,r,!0)}else{const r=n.parent.children;let s=r.indexOf(e);for(;s-- >=-1;){const i=r[s];if(i&&3===i.type)n.removeNode(i);else{if(!i||2!==i.type||i.content.trim().length){if(i&&9===i.type){n.removeNode();const r=dn(e,t);i.branches.push(r);const s=o&&o(i,r,!1);zt(r,n),s&&s(),n.currentNode=null}break}n.removeNode(i)}}}}function dn(e,t){const n=3===e.tagType;return{type:10,loc:e.loc,condition:\"else\"===t.name?void 0:t.exp,children:n&&!Ke(e,\"for\")?e.children:[e],userKey:Ue(e,\"key\"),isTemplateIf:n}}function hn(e,t,n){return e.condition?Oe(e.condition,mn(e,t,n),Te(n.helper(F),['\"\"',\"true\"])):mn(e,t,n)}function mn(e,t,n){const{helper:o}=n,r=Ne(\"key\",_e(`${t}`,!1,ye,2)),{children:s}=e,i=s[0];if(1!==s.length||1!==i.type){if(1===s.length&&11===i.type){const e=i.codegenNode;return nt(e,r,n),e}{let t=64;return Se(n,o(M),Ee([r]),s,t+\"\",void 0,void 0,!0,!1,!1,e.loc)}}{const e=i.codegenNode,t=st(e);return 13===t.type&&it(t,n),nt(t,r,n),e}}const gn=Yt(\"for\",((e,t,n)=>{const{helper:o,removeHelper:r}=n;return yn(e,t,n,(t=>{const s=Te(o(z),[t.source]),i=Ze(e),c=Ke(e,\"memo\"),l=Ue(e,\"key\"),a=l&&(6===l.type?_e(l.value.content,!0):l.exp),p=l?Ne(\"key\",a):null,u=4===t.source.type&&t.source.constType>0,f=u?64:l?128:256;return t.codegenNode=Se(n,o(M),void 0,s,f+\"\",void 0,void 0,!0,!u,!1,e.loc),()=>{let l;const{children:f}=t,d=1!==f.length||1!==f[0].type,h=qe(e)?e:i&&1===e.children.length&&qe(e.children[0])?e.children[0]:null;if(h?(l=h.codegenNode,i&&p&&nt(l,p,n)):d?l=Se(n,o(M),p?Ee([p]):void 0,e.children,\"64\",void 0,void 0,!0,void 0,!1):(l=f[0].codegenNode,i&&p&&nt(l,p,n),l.isBlock!==!u&&(l.isBlock?(r(L),r(Qe(n.inSSR,l.isComponent))):r(Xe(n.inSSR,l.isComponent))),l.isBlock=!u,l.isBlock?(o(L),o(Qe(n.inSSR,l.isComponent))):o(Xe(n.inSSR,l.isComponent))),c){const e=ke(_n(t.parseResult,[_e(\"_cached\")]));e.body=Ie([xe([\"const _memo = (\",c.exp,\")\"]),xe([\"if (_cached\",...a?[\" && _cached.key === \",a]:[],` && ${n.helperString(he)}(_cached, _memo)) return _cached`]),xe([\"const _item = \",l]),_e(\"_item.memo = _memo\"),_e(\"return _item\")]),s.arguments.push(e,_e(\"_cache\"),_e(String(n.cached++)))}else s.arguments.push(ke(_n(t.parseResult),l,!0))}}))}));function yn(e,t,n,o){if(!t.exp)return;const r=En(t.exp);if(!r)return;const{scopes:s}=n,{source:i,value:c,key:l,index:a}=r,p={type:11,loc:t.loc,source:i,valueAlias:c,keyAlias:l,objectIndexAlias:a,parseResult:r,children:Ze(e)?e.children:[e]};n.replaceNode(p),s.vFor++;const u=o&&o(p);return()=>{s.vFor--,u&&u()}}const vn=/([\\s\\S]*?)\\s+(?:in|of)\\s+([\\s\\S]*)/,Sn=/,([^,\\}\\]]*)(?:,([^,\\}\\]]*))?$/,bn=/^\\(|\\)$/g;function En(e,t){const n=e.loc,o=e.content,r=o.match(vn);if(!r)return;const[,s,i]=r,c={source:Nn(n,i.trim(),o.indexOf(i,s.length)),value:void 0,key:void 0,index:void 0};let l=s.trim().replace(bn,\"\").trim();const a=s.indexOf(l),p=l.match(Sn);if(p){l=l.replace(Sn,\"\").trim();const e=p[1].trim();let t;if(e&&(t=o.indexOf(e,a+l.length),c.key=Nn(n,e,t)),p[2]){const r=p[2].trim();r&&(c.index=Nn(n,r,o.indexOf(r,c.key?t+e.length:a+l.length)))}}return l&&(c.value=Nn(n,l,a)),c}function Nn(e,t,n){return _e(t,!1,je(e,n,t.length))}function _n({value:e,key:t,index:n},o=[]){return function(e){let t=e.length;for(;t--&&!e[t];);return e.slice(0,t+1).map(((e,t)=>e||_e(\"_\".repeat(t+1),!1)))}([e,t,n,...o])}const xn=_e(\"undefined\",!1),Tn=(e,t)=>{if(1===e.type&&(1===e.tagType||3===e.tagType)){const n=Ke(e,\"slot\");if(n)return t.scopes.vSlot++,()=>{t.scopes.vSlot--}}},kn=(e,t,n)=>ke(e,t,!1,!0,t.length?t[0].loc:n);function On(e,t,n=kn){t.helper(pe);const{children:o,loc:r}=e,s=[],i=[];let c=t.scopes.vSlot>0||t.scopes.vFor>0;const l=Ke(e,\"slot\",!0);if(l){const{arg:e,exp:t}=l;e&&!Me(e)&&(c=!0),s.push(Ne(e||_e(\"default\",!0),n(t,o,r)))}let a=!1,p=!1;const u=[],f=new Set;let d=0;for(let g=0;g<o.length;g++){const e=o[g];let r;if(!Ze(e)||!(r=Ke(e,\"slot\",!0))){3!==e.type&&u.push(e);continue}if(l)break;a=!0;const{children:h,loc:m}=e,{arg:y=_e(\"default\",!0),exp:v}=r;let S;Me(y)?S=y?y.content:\"default\":c=!0;const b=n(v,h,m);let E,N,_;if(E=Ke(e,\"if\"))c=!0,i.push(Oe(E.exp,Cn(y,b,d++),xn));else if(N=Ke(e,/^else(-if)?$/,!0)){let e,t=g;for(;t--&&(e=o[t],3===e.type););if(e&&Ze(e)&&Ke(e,\"if\")){o.splice(g,1),g--;let e=i[i.length-1];for(;19===e.alternate.type;)e=e.alternate;e.alternate=N.exp?Oe(N.exp,Cn(y,b,d++),xn):Cn(y,b,d++)}}else if(_=Ke(e,\"for\")){c=!0;const e=_.parseResult||En(_.exp);e&&i.push(Te(t.helper(z),[e.source,ke(_n(e),Cn(y,b),!0)]))}else{if(S){if(f.has(S))continue;f.add(S),\"default\"===S&&(p=!0)}s.push(Ne(y,b))}}if(!l){const e=(e,o)=>{const s=n(e,o,r);return t.compatConfig&&(s.isNonScopedSlot=!0),Ne(\"default\",s)};a?u.length&&u.some((e=>Mn(e)))&&(p||s.push(e(void 0,u))):s.push(e(void 0,o))}const h=c?2:In(e.children)?3:1;let m=Ee(s.concat(Ne(\"_\",_e(h+\"\",!1))),r);return i.length&&(m=Te(t.helper(Z),[m,be(i)])),{slots:m,hasDynamicSlots:c}}function Cn(e,t,n){const o=[Ne(\"name\",e),Ne(\"fn\",t)];return null!=n&&o.push(Ne(\"key\",_e(String(n),!0))),Ee(o)}function In(e){for(let t=0;t<e.length;t++){const n=e[t];switch(n.type){case 1:if(2===n.tagType||In(n.children))return!0;break;case 9:if(In(n.branches))return!0;break;case 10:case 11:if(In(n.children))return!0}}return!1}function Mn(e){return 2!==e.type&&12!==e.type||(2===e.type?!!e.content.trim():Mn(e.content))}const Rn=new WeakMap,Pn=(e,t)=>function(){if(1!==(e=t.currentNode).type||0!==e.tagType&&1!==e.tagType)return;const{tag:n,props:o}=e,r=1===e.tagType;let s=r?wn(e,t):`\"${n}\"`;const i=y(s)&&s.callee===K;let c,l,a,p,u,f,d=0,h=i||s===R||s===P||!r&&(\"svg\"===n||\"foreignObject\"===n);if(o.length>0){const n=$n(e,t,void 0,r,i);c=n.props,d=n.patchFlag,u=n.dynamicPropNames;const o=n.directives;f=o&&o.length?be(o.map((e=>An(e,t)))):void 0,n.shouldUseBlock&&(h=!0)}if(e.children.length>0){s===w&&(h=!0,d|=1024);if(r&&s!==R&&s!==w){const{slots:n,hasDynamicSlots:o}=On(e,t);l=n,o&&(d|=1024)}else if(1===e.children.length&&s!==R){const n=e.children[0],o=n.type,r=5===o||8===o;r&&0===Ft(n,t)&&(d|=1),l=r||2===o?n:e.children}else l=e.children}0!==d&&(a=String(d),u&&u.length&&(p=function(e){let t=\"[\";for(let n=0,o=e.length;n<o;n++)t+=JSON.stringify(e[n]),n<o-1&&(t+=\", \");return t+\"]\"}(u))),e.codegenNode=Se(t,s,c,l,a,p,f,!!h,!1,r,e.loc)};function wn(e,t,n=!1){let{tag:o}=e;const r=Dn(o),s=Ue(e,\"is\");if(s)if(r||at(\"COMPILER_IS_ON_ELEMENT\",t)){const e=6===s.type?s.value&&_e(s.value.content,!0):s.exp;if(e)return Te(t.helper(K),[e])}else 6===s.type&&s.value.content.startsWith(\"vue:\")&&(o=s.value.content.slice(4));const i=!r&&Ke(e,\"is\");if(i&&i.exp)return Te(t.helper(K),[i.exp]);const c=Pe(o)||t.isBuiltInComponent(o);return c?(n||t.helper(c),c):(t.helper(W),t.components.add(o),rt(o,\"component\"))}function $n(e,t,n=e.props,o,r,s=!1){const{tag:i,loc:c,children:l}=e;let a=[];const p=[],u=[],d=l.length>0;let h=!1,m=0,y=!1,b=!1,E=!1,N=!1,_=!1,x=!1;const T=[],k=e=>{a.length&&(p.push(Ee(Ln(a),c)),a=[]),e&&p.push(e)},O=({key:e,value:n})=>{if(Me(e)){const s=e.content,i=f(s);if(!i||o&&!r||\"onclick\"===s.toLowerCase()||\"onUpdate:modelValue\"===s||v(s)||(N=!0),i&&v(s)&&(x=!0),20===n.type||(4===n.type||8===n.type)&&Ft(n,t)>0)return;\"ref\"===s?y=!0:\"class\"===s?b=!0:\"style\"===s?E=!0:\"key\"===s||T.includes(s)||T.push(s),!o||\"class\"!==s&&\"style\"!==s||T.includes(s)||T.push(s)}else _=!0};for(let f=0;f<n.length;f++){const r=n[f];if(6===r.type){const{loc:e,name:n,value:o}=r;let s=!0;if(\"ref\"===n&&(y=!0,t.scopes.vFor>0&&a.push(Ne(_e(\"ref_for\",!0),_e(\"true\")))),\"is\"===n&&(Dn(i)||o&&o.content.startsWith(\"vue:\")||at(\"COMPILER_IS_ON_ELEMENT\",t)))continue;a.push(Ne(_e(n,!0,je(e,0,n.length)),_e(o?o.content:\"\",s,o?o.loc:e)))}else{const{name:n,arg:l,exp:f,loc:m}=r,y=\"bind\"===n,v=\"on\"===n;if(\"slot\"===n)continue;if(\"once\"===n||\"memo\"===n)continue;if(\"is\"===n||y&&Je(l,\"is\")&&(Dn(i)||at(\"COMPILER_IS_ON_ELEMENT\",t)))continue;if(v&&s)continue;if((y&&Je(l,\"key\")||v&&d&&Je(l,\"vue:before-update\"))&&(h=!0),y&&Je(l,\"ref\")&&t.scopes.vFor>0&&a.push(Ne(_e(\"ref_for\",!0),_e(\"true\"))),!l&&(y||v)){if(_=!0,f)if(y){if(k(),at(\"COMPILER_V_BIND_OBJECT_ORDER\",t)){p.unshift(f);continue}p.push(f)}else k({type:14,loc:m,callee:t.helper(oe),arguments:o?[f]:[f,\"true\"]});continue}const b=t.directiveTransforms[n];if(b){const{props:n,needRuntime:o}=b(r,e,t);!s&&n.forEach(O),v&&l&&!Me(l)?k(Ee(n,c)):a.push(...n),o&&(u.push(r),g(o)&&Rn.set(r,o))}else S(n)||(u.push(r),d&&(h=!0))}}let C;if(p.length?(k(),C=p.length>1?Te(t.helper(X),p,c):p[0]):a.length&&(C=Ee(Ln(a),c)),_?m|=16:(b&&!o&&(m|=2),E&&!o&&(m|=4),T.length&&(m|=8),N&&(m|=32)),h||0!==m&&32!==m||!(y||x||u.length>0)||(m|=512),!t.inSSR&&C)switch(C.type){case 15:let e=-1,n=-1,o=!1;for(let t=0;t<C.properties.length;t++){const r=C.properties[t].key;Me(r)?\"class\"===r.content?e=t:\"style\"===r.content&&(n=t):r.isHandlerKey||(o=!0)}const r=C.properties[e],s=C.properties[n];o?C=Te(t.helper(te),[C]):(r&&!Me(r.value)&&(r.value=Te(t.helper(Q),[r.value])),s&&(E||4===s.value.type&&\"[\"===s.value.content.trim()[0]||17===s.value.type)&&(s.value=Te(t.helper(ee),[s.value])));break;case 14:break;default:C=Te(t.helper(te),[Te(t.helper(ne),[C])])}return{props:C,directives:u,patchFlag:m,dynamicPropNames:T,shouldUseBlock:h}}function Ln(e){const t=new Map,n=[];for(let o=0;o<e.length;o++){const r=e[o];if(8===r.key.type||!r.key.isStatic){n.push(r);continue}const s=r.key.content,i=t.get(s);i?(\"style\"===s||\"class\"===s||f(s))&&Vn(i,r):(t.set(s,r),n.push(r))}return n}function Vn(e,t){17===e.value.type?e.value.elements.push(t.value):e.value=be([e.value,t.value],e.loc)}function An(e,t){const n=[],o=Rn.get(e);o?n.push(t.helperString(o)):(t.helper(U),t.directives.add(e.name),n.push(rt(e.name,\"directive\")));const{loc:r}=e;if(e.exp&&n.push(e.exp),e.arg&&(e.exp||n.push(\"void 0\"),n.push(e.arg)),Object.keys(e.modifiers).length){e.arg||(e.exp||n.push(\"void 0\"),n.push(\"void 0\"));const t=_e(\"true\",!1,r);n.push(Ee(e.modifiers.map((e=>Ne(e,t))),r))}return be(n,e.loc)}function Dn(e){return\"component\"===e||\"Component\"===e}const Bn=(e,t)=>{if(qe(e)){const{children:n,loc:o}=e,{slotName:r,slotProps:s}=Fn(e,t),i=[t.prefixIdentifiers?\"_ctx.$slots\":\"$slots\",r,\"{}\",\"undefined\",\"true\"];let c=2;s&&(i[2]=s,c=3),n.length&&(i[3]=ke([],n,!1,!1,o),c=4),t.scopeId&&!t.slotted&&(c=5),i.splice(c),e.codegenNode=Te(t.helper(Y),i,o)}};function Fn(e,t){let n,o='\"default\"';const r=[];for(let s=0;s<e.props.length;s++){const t=e.props[s];6===t.type?t.value&&(\"name\"===t.name?o=JSON.stringify(t.value.content):(t.name=N(t.name),r.push(t))):\"bind\"===t.name&&Je(t.arg,\"name\")?t.exp&&(o=t.exp):(\"bind\"===t.name&&t.arg&&Me(t.arg)&&(t.arg.content=N(t.arg.content)),r.push(t))}if(r.length>0){const{props:o,directives:s}=$n(e,t,r,!1,!1);n=o}return{slotName:o,slotProps:n}}const jn=/^\\s*([\\w$_]+|(async\\s*)?\\([^)]*?\\))\\s*(:[^=]+)?=>|^\\s*(async\\s+)?function(?:\\s+[\\w$]+)?\\s*\\(/,Hn=(e,t,n,o)=>{const{loc:r,modifiers:s,arg:i}=e;let c;if(4===i.type)if(i.isStatic){let e=i.content;e.startsWith(\"vue:\")&&(e=`vnode-${e.slice(4)}`);c=_e(0!==t.tagType||e.startsWith(\"vnode\")||!/[A-Z]/.test(e)?k(N(e)):`on:${e}`,!0,i.loc)}else c=xe([`${n.helperString(ie)}(`,i,\")\"]);else c=i,c.children.unshift(`${n.helperString(ie)}(`),c.children.push(\")\");let l=e.exp;l&&!l.content.trim()&&(l=void 0);let a=n.cacheHandlers&&!l&&!n.inVOnce;if(l){const e=Fe(l.content),t=!(e||jn.test(l.content)),n=l.content.includes(\";\");(t||a&&e)&&(l=xe([`${t?\"$event\":\"(...args)\"} => ${n?\"{\":\"(\"}`,l,n?\"}\":\")\"]))}let p={props:[Ne(c,l||_e(\"() => {}\",!1,r))]};return o&&(p=o(p)),a&&(p.props[0].value=n.cache(p.props[0].value)),p.props.forEach((e=>e.key.isHandlerKey=!0)),p},Wn=(e,t,n)=>{const{exp:o,modifiers:r,loc:s}=e,i=e.arg;return 4!==i.type?(i.children.unshift(\"(\"),i.children.push(') || \"\"')):i.isStatic||(i.content=`${i.content} || \"\"`),r.includes(\"camel\")&&(4===i.type?i.content=i.isStatic?N(i.content):`${n.helperString(re)}(${i.content})`:(i.children.unshift(`${n.helperString(re)}(`),i.children.push(\")\"))),n.inSSR||(r.includes(\"prop\")&&Kn(i,\".\"),r.includes(\"attr\")&&Kn(i,\"^\")),!o||4===o.type&&!o.content.trim()?{props:[Ne(i,_e(\"\",!0,s))]}:{props:[Ne(i,o)]}},Kn=(e,t)=>{4===e.type?e.content=e.isStatic?t+e.content:`\\`${t}\\${${e.content}}\\``:(e.children.unshift(`'${t}' + (`),e.children.push(\")\"))},Un=(e,t)=>{if(0===e.type||1===e.type||11===e.type||10===e.type)return()=>{const n=e.children;let o,r=!1;for(let e=0;e<n.length;e++){const t=n[e];if(ze(t)){r=!0;for(let r=e+1;r<n.length;r++){const s=n[r];if(!ze(s)){o=void 0;break}o||(o=n[e]=xe([t],t.loc)),o.children.push(\" + \",s),n.splice(r,1),r--}}}if(r&&(1!==n.length||0!==e.type&&(1!==e.type||0!==e.tagType||e.props.find((e=>7===e.type&&!t.directiveTransforms[e.name]))||\"template\"===e.tag)))for(let e=0;e<n.length;e++){const o=n[e];if(ze(o)||8===o.type){const r=[];2===o.type&&\" \"===o.content||r.push(o),t.ssr||0!==Ft(o,t)||r.push(\"1\"),n[e]={type:12,content:o,loc:o.loc,codegenNode:Te(t.helper(j),r)}}}}},Jn=new WeakSet,Gn=(e,t)=>{if(1===e.type&&Ke(e,\"once\",!0)){if(Jn.has(e)||t.inVOnce)return;return Jn.add(e),t.inVOnce=!0,t.helper(ce),()=>{t.inVOnce=!1;const e=t.currentNode;e.codegenNode&&(e.codegenNode=t.cache(e.codegenNode,!0))}}},zn=(e,t,n)=>{const{exp:o,arg:r}=e;if(!o)return Yn();const s=o.loc.source,i=4===o.type?o.content:s,c=n.bindingMetadata[s];if(\"props\"===c||\"props-aliased\"===c)return Yn();if(!i.trim()||!Fe(i))return Yn();const l=r||_e(\"modelValue\",!0),a=r?Me(r)?`onUpdate:${N(r.content)}`:xe(['\"onUpdate:\" + ',r]):\"onUpdate:modelValue\";let p;p=xe([`${n.isTS?\"($event: any)\":\"$event\"} => ((`,o,\") = $event)\"]);const u=[Ne(l,e.exp),Ne(a,p)];if(e.modifiers.length&&1===t.tagType){const t=e.modifiers.map((e=>($e(e)?e:JSON.stringify(e))+\": true\")).join(\", \"),n=r?Me(r)?`${r.content}Modifiers`:xe([r,' + \"Modifiers\"']):\"modelModifiers\";u.push(Ne(n,_e(`{ ${t} }`,!1,e.loc,2)))}return Yn(u)};function Yn(e=[]){return{props:e}}const Zn=/[\\w).+\\-_$\\]]/,qn=(e,t)=>{at(\"COMPILER_FILTER\",t)&&(5===e.type&&Xn(e.content,t),1===e.type&&e.props.forEach((e=>{7===e.type&&\"for\"!==e.name&&e.exp&&Xn(e.exp,t)})))};function Xn(e,t){if(4===e.type)Qn(e,t);else for(let n=0;n<e.children.length;n++){const o=e.children[n];\"object\"==typeof o&&(4===o.type?Qn(o,t):8===o.type?Xn(e,t):5===o.type&&Xn(o.content,t))}}function Qn(e,t){const n=e.content;let o,r,s,i,c=!1,l=!1,a=!1,p=!1,u=0,f=0,d=0,h=0,m=[];for(s=0;s<n.length;s++)if(r=o,o=n.charCodeAt(s),c)39===o&&92!==r&&(c=!1);else if(l)34===o&&92!==r&&(l=!1);else if(a)96===o&&92!==r&&(a=!1);else if(p)47===o&&92!==r&&(p=!1);else if(124!==o||124===n.charCodeAt(s+1)||124===n.charCodeAt(s-1)||u||f||d){switch(o){case 34:l=!0;break;case 39:c=!0;break;case 96:a=!0;break;case 40:d++;break;case 41:d--;break;case 91:f++;break;case 93:f--;break;case 123:u++;break;case 125:u--}if(47===o){let e,t=s-1;for(;t>=0&&(e=n.charAt(t),\" \"===e);t--);e&&Zn.test(e)||(p=!0)}}else void 0===i?(h=s+1,i=n.slice(0,s).trim()):g();function g(){m.push(n.slice(h,s).trim()),h=s+1}if(void 0===i?i=n.slice(0,s).trim():0!==h&&g(),m.length){for(s=0;s<m.length;s++)i=eo(i,m[s],t);e.content=i}}function eo(e,t,n){n.helper(J);const o=t.indexOf(\"(\");if(o<0)return n.filters.add(t),`${rt(t,\"filter\")}(${e})`;{const r=t.slice(0,o),s=t.slice(o+1);return n.filters.add(r),`${rt(r,\"filter\")}(${e}${\")\"!==s?\",\"+s:s}`}}const to=new WeakSet,no=(e,t)=>{if(1===e.type){const n=Ke(e,\"memo\");if(!n||to.has(e))return;return to.add(e),()=>{const o=e.codegenNode||t.currentNode.codegenNode;o&&13===o.type&&(1!==e.tagType&&it(o,t),e.codegenNode=Te(t.helper(de),[n.exp,ke(void 0,o),\"_cache\",String(t.cached++)]))}}};function oo(e){return[[Gn,un,no,gn,qn,Bn,Pn,Tn,Un],{on:Hn,bind:Wn,model:zn}]}function ro(e,t={}){const n=t.onError||O,o=\"module\"===t.mode;!0===t.prefixIdentifiers?n(I(47)):o&&n(I(48));t.cacheHandlers&&n(I(49)),t.scopeId&&!o&&n(I(50));const r=m(e)?ht(e,t):e,[s,i]=oo();return Gt(r,d({},t,{prefixIdentifiers:false,nodeTransforms:[...s,...t.nodeTransforms||[]],directiveTransforms:d({},i,t.directiveTransforms||{})})),Qt(r,d({},t,{prefixIdentifiers:false}))}const so=()=>({props:[]}),io=Symbol(\"\"),co=Symbol(\"\"),lo=Symbol(\"\"),ao=Symbol(\"\"),po=Symbol(\"\"),uo=Symbol(\"\"),fo=Symbol(\"\"),ho=Symbol(\"\"),mo=Symbol(\"\"),go=Symbol(\"\");let yo;ge({[io]:\"vModelRadio\",[co]:\"vModelCheckbox\",[lo]:\"vModelText\",[ao]:\"vModelSelect\",[po]:\"vModelDynamic\",[uo]:\"withModifiers\",[fo]:\"withKeys\",[ho]:\"vShow\",[mo]:\"Transition\",[go]:\"TransitionGroup\"});const vo=t(\"style,iframe,script,noscript\",!0),So={isVoidTag:c,isNativeTag:e=>s(e)||i(e),isPreTag:e=>\"pre\"===e,decodeEntities:function(e,t=!1){return yo||(yo=document.createElement(\"div\")),t?(yo.innerHTML=`<div foo=\"${e.replace(/\"/g,\"&quot;\")}\">`,yo.children[0].getAttribute(\"foo\")):(yo.innerHTML=e,yo.textContent)},isBuiltInComponent:e=>Re(e,\"Transition\")?mo:Re(e,\"TransitionGroup\")?go:void 0,getNamespace(e,t){let n=t?t.ns:0;if(t&&2===n)if(\"annotation-xml\"===t.tag){if(\"svg\"===e)return 1;t.props.some((e=>6===e.type&&\"encoding\"===e.name&&null!=e.value&&(\"text/html\"===e.value.content||\"application/xhtml+xml\"===e.value.content)))&&(n=0)}else/^m(?:[ions]|text)$/.test(t.tag)&&\"mglyph\"!==e&&\"malignmark\"!==e&&(n=0);else t&&1===n&&(\"foreignObject\"!==t.tag&&\"desc\"!==t.tag&&\"title\"!==t.tag||(n=0));if(0===n){if(\"svg\"===e)return 1;if(\"math\"===e)return 2}return n},getTextMode({tag:e,ns:t}){if(0===t){if(\"textarea\"===e||\"title\"===e)return 1;if(vo(e))return 2}return 0}},bo=e=>{1===e.type&&e.props.forEach(((t,n)=>{6===t.type&&\"style\"===t.name&&t.value&&(e.props[n]={type:7,name:\"bind\",arg:_e(\"style\",!0,t.loc),exp:Eo(t.value.content,t.loc),modifiers:[],loc:t.loc})}))},Eo=(e,t)=>{const s=function(e){const t={};return e.replace(r,\"\").split(n).forEach((e=>{if(e){const n=e.split(o);n.length>1&&(t[n[0].trim()]=n[1].trim())}})),t}(e);return _e(JSON.stringify(s),!1,t,3)};function No(e,t){return I(e,t)}const _o=t(\"passive,once,capture\"),xo=t(\"stop,prevent,self,ctrl,shift,alt,meta,exact,middle\"),To=t(\"left,right\"),ko=t(\"onkeyup,onkeydown,onkeypress\",!0),Oo=(e,t)=>Me(e)&&\"onclick\"===e.content.toLowerCase()?_e(t,!0):4!==e.type?xe([\"(\",e,`) === \"onClick\" ? \"${t}\" : (`,e,\")\"]):e,Co=(e,t)=>{1!==e.type||0!==e.tagType||\"script\"!==e.tag&&\"style\"!==e.tag||t.removeNode()},Io=[bo],Mo={cloak:so,html:(e,t,n)=>{const{exp:o,loc:r}=e;return t.children.length&&(t.children.length=0),{props:[Ne(_e(\"innerHTML\",!0,r),o||_e(\"\",!0))]}},text:(e,t,n)=>{const{exp:o,loc:r}=e;return t.children.length&&(t.children.length=0),{props:[Ne(_e(\"textContent\",!0),o?Ft(o,n)>0?o:Te(n.helperString(q),[o],r):_e(\"\",!0))]}},model:(e,t,n)=>{const o=zn(e,t,n);if(!o.props.length||1===t.tagType)return o;const{tag:r}=t,s=n.isCustomElement(r);if(\"input\"===r||\"textarea\"===r||\"select\"===r||s){let e=lo,i=!1;if(\"input\"===r||s){const n=Ue(t,\"type\");if(n){if(7===n.type)e=po;else if(n.value)switch(n.value.content){case\"radio\":e=io;break;case\"checkbox\":e=co;break;case\"file\":i=!0}}else Ge(t)&&(e=po)}else\"select\"===r&&(e=ao);i||(o.needRuntime=n.helper(e))}return o.props=o.props.filter((e=>!(4===e.key.type&&\"modelValue\"===e.key.content))),o},on:(e,t,n)=>Hn(e,t,n,(t=>{const{modifiers:o}=e;if(!o.length)return t;let{key:r,value:s}=t.props[0];const{keyModifiers:i,nonKeyModifiers:c,eventOptionModifiers:l}=((e,t,n,o)=>{const r=[],s=[],i=[];for(let c=0;c<t.length;c++){const o=t[c];\"native\"===o&&pt(\"COMPILER_V_ON_NATIVE\",n)||_o(o)?i.push(o):To(o)?Me(e)?ko(e.content)?r.push(o):s.push(o):(r.push(o),s.push(o)):xo(o)?s.push(o):r.push(o)}return{keyModifiers:r,nonKeyModifiers:s,eventOptionModifiers:i}})(r,o,n);if(c.includes(\"right\")&&(r=Oo(r,\"onContextmenu\")),c.includes(\"middle\")&&(r=Oo(r,\"onMouseup\")),c.length&&(s=Te(n.helper(uo),[s,JSON.stringify(c)])),!i.length||Me(r)&&!ko(r.content)||(s=Te(n.helper(fo),[s,JSON.stringify(i)])),l.length){const e=l.map(T).join(\"\");r=Me(r)?_e(`${r.content}${e}`,!0):xe([\"(\",r,`) + \"${e}\"`])}return{props:[Ne(r,s)]}})),show:(e,t,n)=>({props:[],needRuntime:n.helper(ho)})};return e.BASE_TRANSITION=$,e.CAMELIZE=re,e.CAPITALIZE=se,e.CREATE_BLOCK=V,e.CREATE_COMMENT=F,e.CREATE_ELEMENT_BLOCK=A,e.CREATE_ELEMENT_VNODE=B,e.CREATE_SLOTS=Z,e.CREATE_STATIC=H,e.CREATE_TEXT=j,e.CREATE_VNODE=D,e.DOMDirectiveTransforms=Mo,e.DOMNodeTransforms=Io,e.FRAGMENT=M,e.GUARD_REACTIVE_PROPS=ne,e.IS_MEMO_SAME=he,e.IS_REF=fe,e.KEEP_ALIVE=w,e.MERGE_PROPS=X,e.NORMALIZE_CLASS=Q,e.NORMALIZE_PROPS=te,e.NORMALIZE_STYLE=ee,e.OPEN_BLOCK=L,e.POP_SCOPE_ID=ae,e.PUSH_SCOPE_ID=le,e.RENDER_LIST=z,e.RENDER_SLOT=Y,e.RESOLVE_COMPONENT=W,e.RESOLVE_DIRECTIVE=U,e.RESOLVE_DYNAMIC_COMPONENT=K,e.RESOLVE_FILTER=J,e.SET_BLOCK_TRACKING=ce,e.SUSPENSE=P,e.TELEPORT=R,e.TO_DISPLAY_STRING=q,e.TO_HANDLERS=oe,e.TO_HANDLER_KEY=ie,e.TRANSITION=mo,e.TRANSITION_GROUP=go,e.UNREF=ue,e.V_MODEL_CHECKBOX=co,e.V_MODEL_DYNAMIC=po,e.V_MODEL_RADIO=io,e.V_MODEL_SELECT=ao,e.V_MODEL_TEXT=lo,e.V_ON_WITH_KEYS=fo,e.V_ON_WITH_MODIFIERS=uo,e.V_SHOW=ho,e.WITH_CTX=pe,e.WITH_DIRECTIVES=G,e.WITH_MEMO=de,e.advancePositionWithClone=He,e.advancePositionWithMutation=We,e.assert=function(e,t){if(!e)throw new Error(t||\"unexpected compiler condition\")},e.baseCompile=ro,e.baseParse=ht,e.buildDirectiveArgs=An,e.buildProps=$n,e.buildSlots=On,e.checkCompatEnabled=pt,e.compile=function(e,t={}){return ro(e,d({},So,t,{nodeTransforms:[Co,...Io,...t.nodeTransforms||[]],directiveTransforms:d({},Mo,t.directiveTransforms||{}),transformHoist:null}))},e.createArrayExpression=be,e.createAssignmentExpression=function(e,t){return{type:24,left:e,right:t,loc:ye}},e.createBlockStatement=Ie,e.createCacheExpression=Ce,e.createCallExpression=Te,e.createCompilerError=I,e.createCompoundExpression=xe,e.createConditionalExpression=Oe,e.createDOMCompilerError=No,e.createForLoopParams=_n,e.createFunctionExpression=ke,e.createIfStatement=function(e,t,n){return{type:23,test:e,consequent:t,alternate:n,loc:ye}},e.createInterpolation=function(e,t){return{type:5,loc:t,content:m(e)?_e(e,!1,t):e}},e.createObjectExpression=Ee,e.createObjectProperty=Ne,e.createReturnStatement=function(e){return{type:26,returns:e,loc:ye}},e.createRoot=ve,e.createSequenceExpression=function(e){return{type:25,expressions:e,loc:ye}},e.createSimpleExpression=_e,e.createStructuralDirectiveTransform=Yt,e.createTemplateLiteral=function(e){return{type:22,elements:e,loc:ye}},e.createTransformContext=Jt,e.createVNodeCall=Se,e.extractIdentifiers=ln,e.findDir=Ke,e.findProp=Ue,e.generate=Qt,e.generateCodeFrame=function(e,t=0,n=e.length){let o=e.split(/(\\r?\\n)/);const r=o.filter(((e,t)=>t%2==1));o=o.filter(((e,t)=>t%2==0));let s=0;const i=[];for(let c=0;c<o.length;c++)if(s+=o[c].length+(r[c]&&r[c].length||0),s>=t){for(let e=c-2;e<=c+2||n>s;e++){if(e<0||e>=o.length)continue;const l=e+1;i.push(`${l}${\" \".repeat(Math.max(3-String(l).length,0))}|  ${o[e]}`);const a=o[e].length,p=r[e]&&r[e].length||0;if(e===c){const e=t-(s-(a+p)),o=Math.max(1,n>s?a-e:n-t);i.push(\"   |  \"+\" \".repeat(e)+\"^\".repeat(o))}else if(e>c){if(n>s){const e=Math.max(Math.min(n-s,a),1);i.push(\"   |  \"+\"^\".repeat(e))}s+=a+p}}break}return i.join(\"\\n\")},e.getBaseTransformPreset=oo,e.getConstantType=Ft,e.getInnerRange=je,e.getMemoedVNodeCall=st,e.getVNodeBlockHelper=Qe,e.getVNodeHelper=Xe,e.hasDynamicKeyVBind=Ge,e.hasScopeRef=function e(t,n){if(!t||0===Object.keys(n).length)return!1;switch(t.type){case 1:for(let o=0;o<t.props.length;o++){const r=t.props[o];if(7===r.type&&(e(r.arg,n)||e(r.exp,n)))return!0}return t.children.some((t=>e(t,n)));case 11:return!!e(t.source,n)||t.children.some((t=>e(t,n)));case 9:return t.branches.some((t=>e(t,n)));case 10:return!!e(t.condition,n)||t.children.some((t=>e(t,n)));case 4:return!t.isStatic&&$e(t.content)&&!!n[t.content];case 8:return t.children.some((t=>y(t)&&e(t,n)));case 5:case 12:return e(t.content,n);default:return!1}},e.helperNameMap=me,e.injectProp=nt,e.isBuiltInType=Re,e.isCoreComponent=Pe,e.isFunctionType=e=>/Function(?:Expression|Declaration)$|Method$/.test(e.type),e.isInDestructureAssignment=function(e,t){if(e&&(\"ObjectProperty\"===e.type||\"ArrayPattern\"===e.type)){let e=t.length;for(;e--;){const n=t[e];if(\"AssignmentExpression\"===n.type)return!0;if(\"ObjectProperty\"!==n.type&&!n.type.endsWith(\"Pattern\"))break}}return!1},e.isMemberExpression=Fe,e.isMemberExpressionBrowser=De,e.isMemberExpressionNode=Be,e.isReferencedIdentifier=function(e,t,n){return!1},e.isSimpleIdentifier=$e,e.isSlotOutlet=qe,e.isStaticArgOf=Je,e.isStaticExp=Me,e.isStaticProperty=an,e.isStaticPropertyKey=(e,t)=>an(t)&&t.key===e,e.isTemplateNode=Ze,e.isText=ze,e.isVSlot=Ye,e.locStub=ye,e.makeBlock=it,e.noopDirectiveTransform=so,e.parse=function(e,t={}){return ht(e,d({},So,t))},e.parserOptions=So,e.processExpression=pn,e.processFor=yn,e.processIf=fn,e.processSlotOutlet=Fn,e.registerRuntimeHelpers=ge,e.resolveComponentType=wn,e.stringifyExpression=function e(t){return m(t)?t:4===t.type?t.content:t.children.map(e).join(\"\")},e.toValidAssetId=rt,e.trackSlotScopes=Tn,e.trackVForSlotScopes=(e,t)=>{let n;if(Ze(e)&&e.props.some(Ye)&&(n=Ke(e,\"for\"))){const e=n.parseResult=En(n.exp);if(e){const{value:n,key:o,index:r}=e,{addIdentifiers:s,removeIdentifiers:i}=t;return n&&s(n),o&&s(o),r&&s(r),()=>{n&&i(n),o&&i(o),r&&i(r)}}}},e.transform=Gt,e.transformBind=Wn,e.transformElement=Pn,e.transformExpression=(e,t)=>{if(5===e.type)e.content=pn(e.content,t);else if(1===e.type)for(let n=0;n<e.props.length;n++){const o=e.props[n];if(7===o.type&&\"for\"!==o.name){const e=o.exp,n=o.arg;!e||4!==e.type||\"on\"===o.name&&n||(o.exp=pn(e,t,\"slot\"===o.name)),n&&4===n.type&&!n.isStatic&&(o.arg=pn(n,t))}}},e.transformModel=zn,e.transformOn=Hn,e.transformStyle=bo,e.traverseNode=zt,e.walkBlockDeclarations=function(e,t){for(const n of e.body)if(\"VariableDeclaration\"===n.type){if(n.declare)continue;for(const e of n.declarations)for(const n of ln(e.id))t(n)}else if(\"FunctionDeclaration\"===n.type||\"ClassDeclaration\"===n.type){if(n.declare||!n.id)continue;t(n.id)}},e.walkFunctionParams=function(e,t){for(const n of e.params)for(const e of ln(n))t(e)},e.walkIdentifiers=function(e,t,n=!1,o=[],r=Object.create(null)){},e.warnDeprecation=function(e,t,n,...o){if(\"suppress-warning\"===lt(e,t))return;const{message:r,link:s}=ct[e],i=`(deprecation ${e}) ${\"function\"==typeof r?r(...o):r}${s?`\\n  Details: ${s}`:\"\"}`,c=new SyntaxError(i);c.code=e,n&&(c.loc=n),t.onWarn(c)},Object.defineProperty(e,\"__esModule\",{value:!0}),e}({});\n/README.md\u0013# @vue/compiler-dom/index.jsĽ'use strict'\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./dist/compiler-dom.cjs.prod.js')\n} else {\n  module.exports = require('./dist/compiler-dom.cjs.js')\n}\n/dist/compiler-dom.cjs.prod.js\u0000\u0001('use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar compilerCore = require('@vue/compiler-core');\nvar shared = require('@vue/shared');\n\nconst V_MODEL_RADIO = Symbol(``);\nconst V_MODEL_CHECKBOX = Symbol(``);\nconst V_MODEL_TEXT = Symbol(``);\nconst V_MODEL_SELECT = Symbol(``);\nconst V_MODEL_DYNAMIC = Symbol(``);\nconst V_ON_WITH_MODIFIERS = Symbol(``);\nconst V_ON_WITH_KEYS = Symbol(``);\nconst V_SHOW = Symbol(``);\nconst TRANSITION = Symbol(``);\nconst TRANSITION_GROUP = Symbol(``);\ncompilerCore.registerRuntimeHelpers({\n    [V_MODEL_RADIO]: `vModelRadio`,\n    [V_MODEL_CHECKBOX]: `vModelCheckbox`,\n    [V_MODEL_TEXT]: `vModelText`,\n    [V_MODEL_SELECT]: `vModelSelect`,\n    [V_MODEL_DYNAMIC]: `vModelDynamic`,\n    [V_ON_WITH_MODIFIERS]: `withModifiers`,\n    [V_ON_WITH_KEYS]: `withKeys`,\n    [V_SHOW]: `vShow`,\n    [TRANSITION]: `Transition`,\n    [TRANSITION_GROUP]: `TransitionGroup`\n});\n\nvar namedCharacterReferences = {\n\tGT: \">\",\n\tgt: \">\",\n\tLT: \"<\",\n\tlt: \"<\",\n\t\"ac;\": \"∾\",\n\t\"af;\": \"⁡\",\n\tAMP: \"&\",\n\tamp: \"&\",\n\t\"ap;\": \"≈\",\n\t\"DD;\": \"ⅅ\",\n\t\"dd;\": \"ⅆ\",\n\tdeg: \"°\",\n\t\"ee;\": \"ⅇ\",\n\t\"eg;\": \"⪚\",\n\t\"el;\": \"⪙\",\n\tETH: \"Ð\",\n\teth: \"ð\",\n\t\"gE;\": \"≧\",\n\t\"ge;\": \"≥\",\n\t\"Gg;\": \"⋙\",\n\t\"gg;\": \"≫\",\n\t\"gl;\": \"≷\",\n\t\"GT;\": \">\",\n\t\"Gt;\": \"≫\",\n\t\"gt;\": \">\",\n\t\"ic;\": \"⁣\",\n\t\"ii;\": \"ⅈ\",\n\t\"Im;\": \"ℑ\",\n\t\"in;\": \"∈\",\n\t\"it;\": \"⁢\",\n\t\"lE;\": \"≦\",\n\t\"le;\": \"≤\",\n\t\"lg;\": \"≶\",\n\t\"Ll;\": \"⋘\",\n\t\"ll;\": \"≪\",\n\t\"LT;\": \"<\",\n\t\"Lt;\": \"≪\",\n\t\"lt;\": \"<\",\n\t\"mp;\": \"∓\",\n\t\"Mu;\": \"Μ\",\n\t\"mu;\": \"μ\",\n\t\"ne;\": \"≠\",\n\t\"ni;\": \"∋\",\n\tnot: \"¬\",\n\t\"Nu;\": \"Ν\",\n\t\"nu;\": \"ν\",\n\t\"Or;\": \"⩔\",\n\t\"or;\": \"∨\",\n\t\"oS;\": \"Ⓢ\",\n\t\"Pi;\": \"Π\",\n\t\"pi;\": \"π\",\n\t\"pm;\": \"±\",\n\t\"Pr;\": \"⪻\",\n\t\"pr;\": \"≺\",\n\t\"Re;\": \"ℜ\",\n\tREG: \"®\",\n\treg: \"®\",\n\t\"rx;\": \"℞\",\n\t\"Sc;\": \"⪼\",\n\t\"sc;\": \"≻\",\n\tshy: \"­\",\n\tuml: \"¨\",\n\t\"wp;\": \"℘\",\n\t\"wr;\": \"≀\",\n\t\"Xi;\": \"Ξ\",\n\t\"xi;\": \"ξ\",\n\tyen: \"¥\",\n\t\"acd;\": \"∿\",\n\t\"acE;\": \"∾̳\",\n\t\"Acy;\": \"А\",\n\t\"acy;\": \"а\",\n\t\"Afr;\": \"𝔄\",\n\t\"afr;\": \"𝔞\",\n\t\"AMP;\": \"&\",\n\t\"amp;\": \"&\",\n\t\"And;\": \"⩓\",\n\t\"and;\": \"∧\",\n\t\"ang;\": \"∠\",\n\t\"apE;\": \"⩰\",\n\t\"ape;\": \"≊\",\n\t\"ast;\": \"*\",\n\tAuml: \"Ä\",\n\tauml: \"ä\",\n\t\"Bcy;\": \"Б\",\n\t\"bcy;\": \"б\",\n\t\"Bfr;\": \"𝔅\",\n\t\"bfr;\": \"𝔟\",\n\t\"bne;\": \"=⃥\",\n\t\"bot;\": \"⊥\",\n\t\"Cap;\": \"⋒\",\n\t\"cap;\": \"∩\",\n\tcent: \"¢\",\n\t\"Cfr;\": \"ℭ\",\n\t\"cfr;\": \"𝔠\",\n\t\"Chi;\": \"Χ\",\n\t\"chi;\": \"χ\",\n\t\"cir;\": \"○\",\n\tCOPY: \"©\",\n\tcopy: \"©\",\n\t\"Cup;\": \"⋓\",\n\t\"cup;\": \"∪\",\n\t\"Dcy;\": \"Д\",\n\t\"dcy;\": \"д\",\n\t\"deg;\": \"°\",\n\t\"Del;\": \"∇\",\n\t\"Dfr;\": \"𝔇\",\n\t\"dfr;\": \"𝔡\",\n\t\"die;\": \"¨\",\n\t\"div;\": \"÷\",\n\t\"Dot;\": \"¨\",\n\t\"dot;\": \"˙\",\n\t\"Ecy;\": \"Э\",\n\t\"ecy;\": \"э\",\n\t\"Efr;\": \"𝔈\",\n\t\"efr;\": \"𝔢\",\n\t\"egs;\": \"⪖\",\n\t\"ell;\": \"ℓ\",\n\t\"els;\": \"⪕\",\n\t\"ENG;\": \"Ŋ\",\n\t\"eng;\": \"ŋ\",\n\t\"Eta;\": \"Η\",\n\t\"eta;\": \"η\",\n\t\"ETH;\": \"Ð\",\n\t\"eth;\": \"ð\",\n\tEuml: \"Ë\",\n\teuml: \"ë\",\n\t\"Fcy;\": \"Ф\",\n\t\"fcy;\": \"ф\",\n\t\"Ffr;\": \"𝔉\",\n\t\"ffr;\": \"𝔣\",\n\t\"gap;\": \"⪆\",\n\t\"Gcy;\": \"Г\",\n\t\"gcy;\": \"г\",\n\t\"gEl;\": \"⪌\",\n\t\"gel;\": \"⋛\",\n\t\"geq;\": \"≥\",\n\t\"ges;\": \"⩾\",\n\t\"Gfr;\": \"𝔊\",\n\t\"gfr;\": \"𝔤\",\n\t\"ggg;\": \"⋙\",\n\t\"gla;\": \"⪥\",\n\t\"glE;\": \"⪒\",\n\t\"glj;\": \"⪤\",\n\t\"gnE;\": \"≩\",\n\t\"gne;\": \"⪈\",\n\t\"Hat;\": \"^\",\n\t\"Hfr;\": \"ℌ\",\n\t\"hfr;\": \"𝔥\",\n\t\"Icy;\": \"И\",\n\t\"icy;\": \"и\",\n\t\"iff;\": \"⇔\",\n\t\"Ifr;\": \"ℑ\",\n\t\"ifr;\": \"𝔦\",\n\t\"Int;\": \"∬\",\n\t\"int;\": \"∫\",\n\tIuml: \"Ï\",\n\tiuml: \"ï\",\n\t\"Jcy;\": \"Й\",\n\t\"jcy;\": \"й\",\n\t\"Jfr;\": \"𝔍\",\n\t\"jfr;\": \"𝔧\",\n\t\"Kcy;\": \"К\",\n\t\"kcy;\": \"к\",\n\t\"Kfr;\": \"𝔎\",\n\t\"kfr;\": \"𝔨\",\n\t\"lap;\": \"⪅\",\n\t\"lat;\": \"⪫\",\n\t\"Lcy;\": \"Л\",\n\t\"lcy;\": \"л\",\n\t\"lEg;\": \"⪋\",\n\t\"leg;\": \"⋚\",\n\t\"leq;\": \"≤\",\n\t\"les;\": \"⩽\",\n\t\"Lfr;\": \"𝔏\",\n\t\"lfr;\": \"𝔩\",\n\t\"lgE;\": \"⪑\",\n\t\"lnE;\": \"≨\",\n\t\"lne;\": \"⪇\",\n\t\"loz;\": \"◊\",\n\t\"lrm;\": \"‎\",\n\t\"Lsh;\": \"↰\",\n\t\"lsh;\": \"↰\",\n\tmacr: \"¯\",\n\t\"Map;\": \"⤅\",\n\t\"map;\": \"↦\",\n\t\"Mcy;\": \"М\",\n\t\"mcy;\": \"м\",\n\t\"Mfr;\": \"𝔐\",\n\t\"mfr;\": \"𝔪\",\n\t\"mho;\": \"℧\",\n\t\"mid;\": \"∣\",\n\t\"nap;\": \"≉\",\n\tnbsp: \" \",\n\t\"Ncy;\": \"Н\",\n\t\"ncy;\": \"н\",\n\t\"Nfr;\": \"𝔑\",\n\t\"nfr;\": \"𝔫\",\n\t\"ngE;\": \"≧̸\",\n\t\"nge;\": \"≱\",\n\t\"nGg;\": \"⋙̸\",\n\t\"nGt;\": \"≫⃒\",\n\t\"ngt;\": \"≯\",\n\t\"nis;\": \"⋼\",\n\t\"niv;\": \"∋\",\n\t\"nlE;\": \"≦̸\",\n\t\"nle;\": \"≰\",\n\t\"nLl;\": \"⋘̸\",\n\t\"nLt;\": \"≪⃒\",\n\t\"nlt;\": \"≮\",\n\t\"Not;\": \"⫬\",\n\t\"not;\": \"¬\",\n\t\"npr;\": \"⊀\",\n\t\"nsc;\": \"⊁\",\n\t\"num;\": \"#\",\n\t\"Ocy;\": \"О\",\n\t\"ocy;\": \"о\",\n\t\"Ofr;\": \"𝔒\",\n\t\"ofr;\": \"𝔬\",\n\t\"ogt;\": \"⧁\",\n\t\"ohm;\": \"Ω\",\n\t\"olt;\": \"⧀\",\n\t\"ord;\": \"⩝\",\n\tordf: \"ª\",\n\tordm: \"º\",\n\t\"orv;\": \"⩛\",\n\tOuml: \"Ö\",\n\touml: \"ö\",\n\t\"par;\": \"∥\",\n\tpara: \"¶\",\n\t\"Pcy;\": \"П\",\n\t\"pcy;\": \"п\",\n\t\"Pfr;\": \"𝔓\",\n\t\"pfr;\": \"𝔭\",\n\t\"Phi;\": \"Φ\",\n\t\"phi;\": \"φ\",\n\t\"piv;\": \"ϖ\",\n\t\"prE;\": \"⪳\",\n\t\"pre;\": \"⪯\",\n\t\"Psi;\": \"Ψ\",\n\t\"psi;\": \"ψ\",\n\t\"Qfr;\": \"𝔔\",\n\t\"qfr;\": \"𝔮\",\n\tQUOT: \"\\\"\",\n\tquot: \"\\\"\",\n\t\"Rcy;\": \"Р\",\n\t\"rcy;\": \"р\",\n\t\"REG;\": \"®\",\n\t\"reg;\": \"®\",\n\t\"Rfr;\": \"ℜ\",\n\t\"rfr;\": \"𝔯\",\n\t\"Rho;\": \"Ρ\",\n\t\"rho;\": \"ρ\",\n\t\"rlm;\": \"‏\",\n\t\"Rsh;\": \"↱\",\n\t\"rsh;\": \"↱\",\n\t\"scE;\": \"⪴\",\n\t\"sce;\": \"⪰\",\n\t\"Scy;\": \"С\",\n\t\"scy;\": \"с\",\n\tsect: \"§\",\n\t\"Sfr;\": \"𝔖\",\n\t\"sfr;\": \"𝔰\",\n\t\"shy;\": \"­\",\n\t\"sim;\": \"∼\",\n\t\"smt;\": \"⪪\",\n\t\"sol;\": \"/\",\n\t\"squ;\": \"□\",\n\t\"Sub;\": \"⋐\",\n\t\"sub;\": \"⊂\",\n\t\"Sum;\": \"∑\",\n\t\"sum;\": \"∑\",\n\t\"Sup;\": \"⋑\",\n\t\"sup;\": \"⊃\",\n\tsup1: \"¹\",\n\tsup2: \"²\",\n\tsup3: \"³\",\n\t\"Tab;\": \"\\t\",\n\t\"Tau;\": \"Τ\",\n\t\"tau;\": \"τ\",\n\t\"Tcy;\": \"Т\",\n\t\"tcy;\": \"т\",\n\t\"Tfr;\": \"𝔗\",\n\t\"tfr;\": \"𝔱\",\n\t\"top;\": \"⊤\",\n\t\"Ucy;\": \"У\",\n\t\"ucy;\": \"у\",\n\t\"Ufr;\": \"𝔘\",\n\t\"ufr;\": \"𝔲\",\n\t\"uml;\": \"¨\",\n\tUuml: \"Ü\",\n\tuuml: \"ü\",\n\t\"Vcy;\": \"В\",\n\t\"vcy;\": \"в\",\n\t\"Vee;\": \"⋁\",\n\t\"vee;\": \"∨\",\n\t\"Vfr;\": \"𝔙\",\n\t\"vfr;\": \"𝔳\",\n\t\"Wfr;\": \"𝔚\",\n\t\"wfr;\": \"𝔴\",\n\t\"Xfr;\": \"𝔛\",\n\t\"xfr;\": \"𝔵\",\n\t\"Ycy;\": \"Ы\",\n\t\"ycy;\": \"ы\",\n\t\"yen;\": \"¥\",\n\t\"Yfr;\": \"𝔜\",\n\t\"yfr;\": \"𝔶\",\n\tyuml: \"ÿ\",\n\t\"Zcy;\": \"З\",\n\t\"zcy;\": \"з\",\n\t\"Zfr;\": \"ℨ\",\n\t\"zfr;\": \"𝔷\",\n\t\"zwj;\": \"‍\",\n\tAcirc: \"Â\",\n\tacirc: \"â\",\n\tacute: \"´\",\n\tAElig: \"Æ\",\n\taelig: \"æ\",\n\t\"andd;\": \"⩜\",\n\t\"andv;\": \"⩚\",\n\t\"ange;\": \"⦤\",\n\t\"Aopf;\": \"𝔸\",\n\t\"aopf;\": \"𝕒\",\n\t\"apid;\": \"≋\",\n\t\"apos;\": \"'\",\n\tAring: \"Å\",\n\taring: \"å\",\n\t\"Ascr;\": \"𝒜\",\n\t\"ascr;\": \"𝒶\",\n\t\"Auml;\": \"Ä\",\n\t\"auml;\": \"ä\",\n\t\"Barv;\": \"⫧\",\n\t\"bbrk;\": \"⎵\",\n\t\"Beta;\": \"Β\",\n\t\"beta;\": \"β\",\n\t\"beth;\": \"ℶ\",\n\t\"bNot;\": \"⫭\",\n\t\"bnot;\": \"⌐\",\n\t\"Bopf;\": \"𝔹\",\n\t\"bopf;\": \"𝕓\",\n\t\"boxH;\": \"═\",\n\t\"boxh;\": \"─\",\n\t\"boxV;\": \"║\",\n\t\"boxv;\": \"│\",\n\t\"Bscr;\": \"ℬ\",\n\t\"bscr;\": \"𝒷\",\n\t\"bsim;\": \"∽\",\n\t\"bsol;\": \"\\\\\",\n\t\"bull;\": \"•\",\n\t\"bump;\": \"≎\",\n\t\"caps;\": \"∩︀\",\n\t\"Cdot;\": \"Ċ\",\n\t\"cdot;\": \"ċ\",\n\tcedil: \"¸\",\n\t\"cent;\": \"¢\",\n\t\"CHcy;\": \"Ч\",\n\t\"chcy;\": \"ч\",\n\t\"circ;\": \"ˆ\",\n\t\"cirE;\": \"⧃\",\n\t\"cire;\": \"≗\",\n\t\"comp;\": \"∁\",\n\t\"cong;\": \"≅\",\n\t\"Copf;\": \"ℂ\",\n\t\"copf;\": \"𝕔\",\n\t\"COPY;\": \"©\",\n\t\"copy;\": \"©\",\n\t\"Cscr;\": \"𝒞\",\n\t\"cscr;\": \"𝒸\",\n\t\"csub;\": \"⫏\",\n\t\"csup;\": \"⫐\",\n\t\"cups;\": \"∪︀\",\n\t\"Darr;\": \"↡\",\n\t\"dArr;\": \"⇓\",\n\t\"darr;\": \"↓\",\n\t\"dash;\": \"‐\",\n\t\"dHar;\": \"⥥\",\n\t\"diam;\": \"⋄\",\n\t\"DJcy;\": \"Ђ\",\n\t\"djcy;\": \"ђ\",\n\t\"Dopf;\": \"𝔻\",\n\t\"dopf;\": \"𝕕\",\n\t\"Dscr;\": \"𝒟\",\n\t\"dscr;\": \"𝒹\",\n\t\"DScy;\": \"Ѕ\",\n\t\"dscy;\": \"ѕ\",\n\t\"dsol;\": \"⧶\",\n\t\"dtri;\": \"▿\",\n\t\"DZcy;\": \"Џ\",\n\t\"dzcy;\": \"џ\",\n\t\"ecir;\": \"≖\",\n\tEcirc: \"Ê\",\n\tecirc: \"ê\",\n\t\"Edot;\": \"Ė\",\n\t\"eDot;\": \"≑\",\n\t\"edot;\": \"ė\",\n\t\"emsp;\": \" \",\n\t\"ensp;\": \" \",\n\t\"Eopf;\": \"𝔼\",\n\t\"eopf;\": \"𝕖\",\n\t\"epar;\": \"⋕\",\n\t\"epsi;\": \"ε\",\n\t\"Escr;\": \"ℰ\",\n\t\"escr;\": \"ℯ\",\n\t\"Esim;\": \"⩳\",\n\t\"esim;\": \"≂\",\n\t\"Euml;\": \"Ë\",\n\t\"euml;\": \"ë\",\n\t\"euro;\": \"€\",\n\t\"excl;\": \"!\",\n\t\"flat;\": \"♭\",\n\t\"fnof;\": \"ƒ\",\n\t\"Fopf;\": \"𝔽\",\n\t\"fopf;\": \"𝕗\",\n\t\"fork;\": \"⋔\",\n\t\"Fscr;\": \"ℱ\",\n\t\"fscr;\": \"𝒻\",\n\t\"Gdot;\": \"Ġ\",\n\t\"gdot;\": \"ġ\",\n\t\"geqq;\": \"≧\",\n\t\"gesl;\": \"⋛︀\",\n\t\"GJcy;\": \"Ѓ\",\n\t\"gjcy;\": \"ѓ\",\n\t\"gnap;\": \"⪊\",\n\t\"gneq;\": \"⪈\",\n\t\"Gopf;\": \"𝔾\",\n\t\"gopf;\": \"𝕘\",\n\t\"Gscr;\": \"𝒢\",\n\t\"gscr;\": \"ℊ\",\n\t\"gsim;\": \"≳\",\n\t\"gtcc;\": \"⪧\",\n\t\"gvnE;\": \"≩︀\",\n\t\"half;\": \"½\",\n\t\"hArr;\": \"⇔\",\n\t\"harr;\": \"↔\",\n\t\"hbar;\": \"ℏ\",\n\t\"Hopf;\": \"ℍ\",\n\t\"hopf;\": \"𝕙\",\n\t\"Hscr;\": \"ℋ\",\n\t\"hscr;\": \"𝒽\",\n\tIcirc: \"Î\",\n\ticirc: \"î\",\n\t\"Idot;\": \"İ\",\n\t\"IEcy;\": \"Е\",\n\t\"iecy;\": \"е\",\n\tiexcl: \"¡\",\n\t\"imof;\": \"⊷\",\n\t\"IOcy;\": \"Ё\",\n\t\"iocy;\": \"ё\",\n\t\"Iopf;\": \"𝕀\",\n\t\"iopf;\": \"𝕚\",\n\t\"Iota;\": \"Ι\",\n\t\"iota;\": \"ι\",\n\t\"Iscr;\": \"ℐ\",\n\t\"iscr;\": \"𝒾\",\n\t\"isin;\": \"∈\",\n\t\"Iuml;\": \"Ï\",\n\t\"iuml;\": \"ï\",\n\t\"Jopf;\": \"𝕁\",\n\t\"jopf;\": \"𝕛\",\n\t\"Jscr;\": \"𝒥\",\n\t\"jscr;\": \"𝒿\",\n\t\"KHcy;\": \"Х\",\n\t\"khcy;\": \"х\",\n\t\"KJcy;\": \"Ќ\",\n\t\"kjcy;\": \"ќ\",\n\t\"Kopf;\": \"𝕂\",\n\t\"kopf;\": \"𝕜\",\n\t\"Kscr;\": \"𝒦\",\n\t\"kscr;\": \"𝓀\",\n\t\"Lang;\": \"⟪\",\n\t\"lang;\": \"⟨\",\n\tlaquo: \"«\",\n\t\"Larr;\": \"↞\",\n\t\"lArr;\": \"⇐\",\n\t\"larr;\": \"←\",\n\t\"late;\": \"⪭\",\n\t\"lcub;\": \"{\",\n\t\"ldca;\": \"⤶\",\n\t\"ldsh;\": \"↲\",\n\t\"leqq;\": \"≦\",\n\t\"lesg;\": \"⋚︀\",\n\t\"lHar;\": \"⥢\",\n\t\"LJcy;\": \"Љ\",\n\t\"ljcy;\": \"љ\",\n\t\"lnap;\": \"⪉\",\n\t\"lneq;\": \"⪇\",\n\t\"Lopf;\": \"𝕃\",\n\t\"lopf;\": \"𝕝\",\n\t\"lozf;\": \"⧫\",\n\t\"lpar;\": \"(\",\n\t\"Lscr;\": \"ℒ\",\n\t\"lscr;\": \"𝓁\",\n\t\"lsim;\": \"≲\",\n\t\"lsqb;\": \"[\",\n\t\"ltcc;\": \"⪦\",\n\t\"ltri;\": \"◃\",\n\t\"lvnE;\": \"≨︀\",\n\t\"macr;\": \"¯\",\n\t\"male;\": \"♂\",\n\t\"malt;\": \"✠\",\n\tmicro: \"µ\",\n\t\"mlcp;\": \"⫛\",\n\t\"mldr;\": \"…\",\n\t\"Mopf;\": \"𝕄\",\n\t\"mopf;\": \"𝕞\",\n\t\"Mscr;\": \"ℳ\",\n\t\"mscr;\": \"𝓂\",\n\t\"nang;\": \"∠⃒\",\n\t\"napE;\": \"⩰̸\",\n\t\"nbsp;\": \" \",\n\t\"ncap;\": \"⩃\",\n\t\"ncup;\": \"⩂\",\n\t\"ngeq;\": \"≱\",\n\t\"nges;\": \"⩾̸\",\n\t\"ngtr;\": \"≯\",\n\t\"nGtv;\": \"≫̸\",\n\t\"nisd;\": \"⋺\",\n\t\"NJcy;\": \"Њ\",\n\t\"njcy;\": \"њ\",\n\t\"nldr;\": \"‥\",\n\t\"nleq;\": \"≰\",\n\t\"nles;\": \"⩽̸\",\n\t\"nLtv;\": \"≪̸\",\n\t\"nmid;\": \"∤\",\n\t\"Nopf;\": \"ℕ\",\n\t\"nopf;\": \"𝕟\",\n\t\"npar;\": \"∦\",\n\t\"npre;\": \"⪯̸\",\n\t\"nsce;\": \"⪰̸\",\n\t\"Nscr;\": \"𝒩\",\n\t\"nscr;\": \"𝓃\",\n\t\"nsim;\": \"≁\",\n\t\"nsub;\": \"⊄\",\n\t\"nsup;\": \"⊅\",\n\t\"ntgl;\": \"≹\",\n\t\"ntlg;\": \"≸\",\n\t\"nvap;\": \"≍⃒\",\n\t\"nvge;\": \"≥⃒\",\n\t\"nvgt;\": \">⃒\",\n\t\"nvle;\": \"≤⃒\",\n\t\"nvlt;\": \"<⃒\",\n\t\"oast;\": \"⊛\",\n\t\"ocir;\": \"⊚\",\n\tOcirc: \"Ô\",\n\tocirc: \"ô\",\n\t\"odiv;\": \"⨸\",\n\t\"odot;\": \"⊙\",\n\t\"ogon;\": \"˛\",\n\t\"oint;\": \"∮\",\n\t\"omid;\": \"⦶\",\n\t\"Oopf;\": \"𝕆\",\n\t\"oopf;\": \"𝕠\",\n\t\"opar;\": \"⦷\",\n\t\"ordf;\": \"ª\",\n\t\"ordm;\": \"º\",\n\t\"oror;\": \"⩖\",\n\t\"Oscr;\": \"𝒪\",\n\t\"oscr;\": \"ℴ\",\n\t\"osol;\": \"⊘\",\n\t\"Ouml;\": \"Ö\",\n\t\"ouml;\": \"ö\",\n\t\"para;\": \"¶\",\n\t\"part;\": \"∂\",\n\t\"perp;\": \"⊥\",\n\t\"phiv;\": \"ϕ\",\n\t\"plus;\": \"+\",\n\t\"Popf;\": \"ℙ\",\n\t\"popf;\": \"𝕡\",\n\tpound: \"£\",\n\t\"prap;\": \"⪷\",\n\t\"prec;\": \"≺\",\n\t\"prnE;\": \"⪵\",\n\t\"prod;\": \"∏\",\n\t\"prop;\": \"∝\",\n\t\"Pscr;\": \"𝒫\",\n\t\"pscr;\": \"𝓅\",\n\t\"qint;\": \"⨌\",\n\t\"Qopf;\": \"ℚ\",\n\t\"qopf;\": \"𝕢\",\n\t\"Qscr;\": \"𝒬\",\n\t\"qscr;\": \"𝓆\",\n\t\"QUOT;\": \"\\\"\",\n\t\"quot;\": \"\\\"\",\n\t\"race;\": \"∽̱\",\n\t\"Rang;\": \"⟫\",\n\t\"rang;\": \"⟩\",\n\traquo: \"»\",\n\t\"Rarr;\": \"↠\",\n\t\"rArr;\": \"⇒\",\n\t\"rarr;\": \"→\",\n\t\"rcub;\": \"}\",\n\t\"rdca;\": \"⤷\",\n\t\"rdsh;\": \"↳\",\n\t\"real;\": \"ℜ\",\n\t\"rect;\": \"▭\",\n\t\"rHar;\": \"⥤\",\n\t\"rhov;\": \"ϱ\",\n\t\"ring;\": \"˚\",\n\t\"Ropf;\": \"ℝ\",\n\t\"ropf;\": \"𝕣\",\n\t\"rpar;\": \")\",\n\t\"Rscr;\": \"ℛ\",\n\t\"rscr;\": \"𝓇\",\n\t\"rsqb;\": \"]\",\n\t\"rtri;\": \"▹\",\n\t\"scap;\": \"⪸\",\n\t\"scnE;\": \"⪶\",\n\t\"sdot;\": \"⋅\",\n\t\"sect;\": \"§\",\n\t\"semi;\": \";\",\n\t\"sext;\": \"✶\",\n\t\"SHcy;\": \"Ш\",\n\t\"shcy;\": \"ш\",\n\t\"sime;\": \"≃\",\n\t\"simg;\": \"⪞\",\n\t\"siml;\": \"⪝\",\n\t\"smid;\": \"∣\",\n\t\"smte;\": \"⪬\",\n\t\"solb;\": \"⧄\",\n\t\"Sopf;\": \"𝕊\",\n\t\"sopf;\": \"𝕤\",\n\t\"spar;\": \"∥\",\n\t\"Sqrt;\": \"√\",\n\t\"squf;\": \"▪\",\n\t\"Sscr;\": \"𝒮\",\n\t\"sscr;\": \"𝓈\",\n\t\"Star;\": \"⋆\",\n\t\"star;\": \"☆\",\n\t\"subE;\": \"⫅\",\n\t\"sube;\": \"⊆\",\n\t\"succ;\": \"≻\",\n\t\"sung;\": \"♪\",\n\t\"sup1;\": \"¹\",\n\t\"sup2;\": \"²\",\n\t\"sup3;\": \"³\",\n\t\"supE;\": \"⫆\",\n\t\"supe;\": \"⊇\",\n\tszlig: \"ß\",\n\t\"tbrk;\": \"⎴\",\n\t\"tdot;\": \"⃛\",\n\tTHORN: \"Þ\",\n\tthorn: \"þ\",\n\ttimes: \"×\",\n\t\"tint;\": \"∭\",\n\t\"toea;\": \"⤨\",\n\t\"Topf;\": \"𝕋\",\n\t\"topf;\": \"𝕥\",\n\t\"tosa;\": \"⤩\",\n\t\"trie;\": \"≜\",\n\t\"Tscr;\": \"𝒯\",\n\t\"tscr;\": \"𝓉\",\n\t\"TScy;\": \"Ц\",\n\t\"tscy;\": \"ц\",\n\t\"Uarr;\": \"↟\",\n\t\"uArr;\": \"⇑\",\n\t\"uarr;\": \"↑\",\n\tUcirc: \"Û\",\n\tucirc: \"û\",\n\t\"uHar;\": \"⥣\",\n\t\"Uopf;\": \"𝕌\",\n\t\"uopf;\": \"𝕦\",\n\t\"Upsi;\": \"ϒ\",\n\t\"upsi;\": \"υ\",\n\t\"Uscr;\": \"𝒰\",\n\t\"uscr;\": \"𝓊\",\n\t\"utri;\": \"▵\",\n\t\"Uuml;\": \"Ü\",\n\t\"uuml;\": \"ü\",\n\t\"vArr;\": \"⇕\",\n\t\"varr;\": \"↕\",\n\t\"Vbar;\": \"⫫\",\n\t\"vBar;\": \"⫨\",\n\t\"Vert;\": \"‖\",\n\t\"vert;\": \"|\",\n\t\"Vopf;\": \"𝕍\",\n\t\"vopf;\": \"𝕧\",\n\t\"Vscr;\": \"𝒱\",\n\t\"vscr;\": \"𝓋\",\n\t\"Wopf;\": \"𝕎\",\n\t\"wopf;\": \"𝕨\",\n\t\"Wscr;\": \"𝒲\",\n\t\"wscr;\": \"𝓌\",\n\t\"xcap;\": \"⋂\",\n\t\"xcup;\": \"⋃\",\n\t\"xmap;\": \"⟼\",\n\t\"xnis;\": \"⋻\",\n\t\"Xopf;\": \"𝕏\",\n\t\"xopf;\": \"𝕩\",\n\t\"Xscr;\": \"𝒳\",\n\t\"xscr;\": \"𝓍\",\n\t\"xvee;\": \"⋁\",\n\t\"YAcy;\": \"Я\",\n\t\"yacy;\": \"я\",\n\t\"YIcy;\": \"Ї\",\n\t\"yicy;\": \"ї\",\n\t\"Yopf;\": \"𝕐\",\n\t\"yopf;\": \"𝕪\",\n\t\"Yscr;\": \"𝒴\",\n\t\"yscr;\": \"𝓎\",\n\t\"YUcy;\": \"Ю\",\n\t\"yucy;\": \"ю\",\n\t\"Yuml;\": \"Ÿ\",\n\t\"yuml;\": \"ÿ\",\n\t\"Zdot;\": \"Ż\",\n\t\"zdot;\": \"ż\",\n\t\"Zeta;\": \"Ζ\",\n\t\"zeta;\": \"ζ\",\n\t\"ZHcy;\": \"Ж\",\n\t\"zhcy;\": \"ж\",\n\t\"Zopf;\": \"ℤ\",\n\t\"zopf;\": \"𝕫\",\n\t\"Zscr;\": \"𝒵\",\n\t\"zscr;\": \"𝓏\",\n\t\"zwnj;\": \"‌\",\n\tAacute: \"Á\",\n\taacute: \"á\",\n\t\"Acirc;\": \"Â\",\n\t\"acirc;\": \"â\",\n\t\"acute;\": \"´\",\n\t\"AElig;\": \"Æ\",\n\t\"aelig;\": \"æ\",\n\tAgrave: \"À\",\n\tagrave: \"à\",\n\t\"aleph;\": \"ℵ\",\n\t\"Alpha;\": \"Α\",\n\t\"alpha;\": \"α\",\n\t\"Amacr;\": \"Ā\",\n\t\"amacr;\": \"ā\",\n\t\"amalg;\": \"⨿\",\n\t\"angle;\": \"∠\",\n\t\"angrt;\": \"∟\",\n\t\"angst;\": \"Å\",\n\t\"Aogon;\": \"Ą\",\n\t\"aogon;\": \"ą\",\n\t\"Aring;\": \"Å\",\n\t\"aring;\": \"å\",\n\t\"asymp;\": \"≈\",\n\tAtilde: \"Ã\",\n\tatilde: \"ã\",\n\t\"awint;\": \"⨑\",\n\t\"bcong;\": \"≌\",\n\t\"bdquo;\": \"„\",\n\t\"bepsi;\": \"϶\",\n\t\"blank;\": \"␣\",\n\t\"blk12;\": \"▒\",\n\t\"blk14;\": \"░\",\n\t\"blk34;\": \"▓\",\n\t\"block;\": \"█\",\n\t\"boxDL;\": \"╗\",\n\t\"boxDl;\": \"╖\",\n\t\"boxdL;\": \"╕\",\n\t\"boxdl;\": \"┐\",\n\t\"boxDR;\": \"╔\",\n\t\"boxDr;\": \"╓\",\n\t\"boxdR;\": \"╒\",\n\t\"boxdr;\": \"┌\",\n\t\"boxHD;\": \"╦\",\n\t\"boxHd;\": \"╤\",\n\t\"boxhD;\": \"╥\",\n\t\"boxhd;\": \"┬\",\n\t\"boxHU;\": \"╩\",\n\t\"boxHu;\": \"╧\",\n\t\"boxhU;\": \"╨\",\n\t\"boxhu;\": \"┴\",\n\t\"boxUL;\": \"╝\",\n\t\"boxUl;\": \"╜\",\n\t\"boxuL;\": \"╛\",\n\t\"boxul;\": \"┘\",\n\t\"boxUR;\": \"╚\",\n\t\"boxUr;\": \"╙\",\n\t\"boxuR;\": \"╘\",\n\t\"boxur;\": \"└\",\n\t\"boxVH;\": \"╬\",\n\t\"boxVh;\": \"╫\",\n\t\"boxvH;\": \"╪\",\n\t\"boxvh;\": \"┼\",\n\t\"boxVL;\": \"╣\",\n\t\"boxVl;\": \"╢\",\n\t\"boxvL;\": \"╡\",\n\t\"boxvl;\": \"┤\",\n\t\"boxVR;\": \"╠\",\n\t\"boxVr;\": \"╟\",\n\t\"boxvR;\": \"╞\",\n\t\"boxvr;\": \"├\",\n\t\"Breve;\": \"˘\",\n\t\"breve;\": \"˘\",\n\tbrvbar: \"¦\",\n\t\"bsemi;\": \"⁏\",\n\t\"bsime;\": \"⋍\",\n\t\"bsolb;\": \"⧅\",\n\t\"bumpE;\": \"⪮\",\n\t\"bumpe;\": \"≏\",\n\t\"caret;\": \"⁁\",\n\t\"caron;\": \"ˇ\",\n\t\"ccaps;\": \"⩍\",\n\tCcedil: \"Ç\",\n\tccedil: \"ç\",\n\t\"Ccirc;\": \"Ĉ\",\n\t\"ccirc;\": \"ĉ\",\n\t\"ccups;\": \"⩌\",\n\t\"cedil;\": \"¸\",\n\t\"check;\": \"✓\",\n\t\"clubs;\": \"♣\",\n\t\"Colon;\": \"∷\",\n\t\"colon;\": \":\",\n\t\"comma;\": \",\",\n\t\"crarr;\": \"↵\",\n\t\"Cross;\": \"⨯\",\n\t\"cross;\": \"✗\",\n\t\"csube;\": \"⫑\",\n\t\"csupe;\": \"⫒\",\n\t\"ctdot;\": \"⋯\",\n\t\"cuepr;\": \"⋞\",\n\t\"cuesc;\": \"⋟\",\n\t\"cupor;\": \"⩅\",\n\tcurren: \"¤\",\n\t\"cuvee;\": \"⋎\",\n\t\"cuwed;\": \"⋏\",\n\t\"cwint;\": \"∱\",\n\t\"Dashv;\": \"⫤\",\n\t\"dashv;\": \"⊣\",\n\t\"dblac;\": \"˝\",\n\t\"ddarr;\": \"⇊\",\n\t\"Delta;\": \"Δ\",\n\t\"delta;\": \"δ\",\n\t\"dharl;\": \"⇃\",\n\t\"dharr;\": \"⇂\",\n\t\"diams;\": \"♦\",\n\t\"disin;\": \"⋲\",\n\tdivide: \"÷\",\n\t\"doteq;\": \"≐\",\n\t\"dtdot;\": \"⋱\",\n\t\"dtrif;\": \"▾\",\n\t\"duarr;\": \"⇵\",\n\t\"duhar;\": \"⥯\",\n\tEacute: \"É\",\n\teacute: \"é\",\n\t\"Ecirc;\": \"Ê\",\n\t\"ecirc;\": \"ê\",\n\t\"eDDot;\": \"⩷\",\n\t\"efDot;\": \"≒\",\n\tEgrave: \"È\",\n\tegrave: \"è\",\n\t\"Emacr;\": \"Ē\",\n\t\"emacr;\": \"ē\",\n\t\"empty;\": \"∅\",\n\t\"Eogon;\": \"Ę\",\n\t\"eogon;\": \"ę\",\n\t\"eplus;\": \"⩱\",\n\t\"epsiv;\": \"ϵ\",\n\t\"eqsim;\": \"≂\",\n\t\"Equal;\": \"⩵\",\n\t\"equiv;\": \"≡\",\n\t\"erarr;\": \"⥱\",\n\t\"erDot;\": \"≓\",\n\t\"esdot;\": \"≐\",\n\t\"exist;\": \"∃\",\n\t\"fflig;\": \"ﬀ\",\n\t\"filig;\": \"ﬁ\",\n\t\"fjlig;\": \"fj\",\n\t\"fllig;\": \"ﬂ\",\n\t\"fltns;\": \"▱\",\n\t\"forkv;\": \"⫙\",\n\tfrac12: \"½\",\n\tfrac14: \"¼\",\n\tfrac34: \"¾\",\n\t\"frasl;\": \"⁄\",\n\t\"frown;\": \"⌢\",\n\t\"Gamma;\": \"Γ\",\n\t\"gamma;\": \"γ\",\n\t\"Gcirc;\": \"Ĝ\",\n\t\"gcirc;\": \"ĝ\",\n\t\"gescc;\": \"⪩\",\n\t\"gimel;\": \"ℷ\",\n\t\"gneqq;\": \"≩\",\n\t\"gnsim;\": \"⋧\",\n\t\"grave;\": \"`\",\n\t\"gsime;\": \"⪎\",\n\t\"gsiml;\": \"⪐\",\n\t\"gtcir;\": \"⩺\",\n\t\"gtdot;\": \"⋗\",\n\t\"Hacek;\": \"ˇ\",\n\t\"harrw;\": \"↭\",\n\t\"Hcirc;\": \"Ĥ\",\n\t\"hcirc;\": \"ĥ\",\n\t\"hoarr;\": \"⇿\",\n\tIacute: \"Í\",\n\tiacute: \"í\",\n\t\"Icirc;\": \"Î\",\n\t\"icirc;\": \"î\",\n\t\"iexcl;\": \"¡\",\n\tIgrave: \"Ì\",\n\tigrave: \"ì\",\n\t\"iiint;\": \"∭\",\n\t\"iiota;\": \"℩\",\n\t\"IJlig;\": \"Ĳ\",\n\t\"ijlig;\": \"ĳ\",\n\t\"Imacr;\": \"Ī\",\n\t\"imacr;\": \"ī\",\n\t\"image;\": \"ℑ\",\n\t\"imath;\": \"ı\",\n\t\"imped;\": \"Ƶ\",\n\t\"infin;\": \"∞\",\n\t\"Iogon;\": \"Į\",\n\t\"iogon;\": \"į\",\n\t\"iprod;\": \"⨼\",\n\tiquest: \"¿\",\n\t\"isinE;\": \"⋹\",\n\t\"isins;\": \"⋴\",\n\t\"isinv;\": \"∈\",\n\t\"Iukcy;\": \"І\",\n\t\"iukcy;\": \"і\",\n\t\"Jcirc;\": \"Ĵ\",\n\t\"jcirc;\": \"ĵ\",\n\t\"jmath;\": \"ȷ\",\n\t\"Jukcy;\": \"Є\",\n\t\"jukcy;\": \"є\",\n\t\"Kappa;\": \"Κ\",\n\t\"kappa;\": \"κ\",\n\t\"lAarr;\": \"⇚\",\n\t\"langd;\": \"⦑\",\n\t\"laquo;\": \"«\",\n\t\"larrb;\": \"⇤\",\n\t\"lates;\": \"⪭︀\",\n\t\"lBarr;\": \"⤎\",\n\t\"lbarr;\": \"⤌\",\n\t\"lbbrk;\": \"❲\",\n\t\"lbrke;\": \"⦋\",\n\t\"lceil;\": \"⌈\",\n\t\"ldquo;\": \"“\",\n\t\"lescc;\": \"⪨\",\n\t\"lhard;\": \"↽\",\n\t\"lharu;\": \"↼\",\n\t\"lhblk;\": \"▄\",\n\t\"llarr;\": \"⇇\",\n\t\"lltri;\": \"◺\",\n\t\"lneqq;\": \"≨\",\n\t\"lnsim;\": \"⋦\",\n\t\"loang;\": \"⟬\",\n\t\"loarr;\": \"⇽\",\n\t\"lobrk;\": \"⟦\",\n\t\"lopar;\": \"⦅\",\n\t\"lrarr;\": \"⇆\",\n\t\"lrhar;\": \"⇋\",\n\t\"lrtri;\": \"⊿\",\n\t\"lsime;\": \"⪍\",\n\t\"lsimg;\": \"⪏\",\n\t\"lsquo;\": \"‘\",\n\t\"ltcir;\": \"⩹\",\n\t\"ltdot;\": \"⋖\",\n\t\"ltrie;\": \"⊴\",\n\t\"ltrif;\": \"◂\",\n\t\"mdash;\": \"—\",\n\t\"mDDot;\": \"∺\",\n\t\"micro;\": \"µ\",\n\tmiddot: \"·\",\n\t\"minus;\": \"−\",\n\t\"mumap;\": \"⊸\",\n\t\"nabla;\": \"∇\",\n\t\"napid;\": \"≋̸\",\n\t\"napos;\": \"ŉ\",\n\t\"natur;\": \"♮\",\n\t\"nbump;\": \"≎̸\",\n\t\"ncong;\": \"≇\",\n\t\"ndash;\": \"–\",\n\t\"neArr;\": \"⇗\",\n\t\"nearr;\": \"↗\",\n\t\"nedot;\": \"≐̸\",\n\t\"nesim;\": \"≂̸\",\n\t\"ngeqq;\": \"≧̸\",\n\t\"ngsim;\": \"≵\",\n\t\"nhArr;\": \"⇎\",\n\t\"nharr;\": \"↮\",\n\t\"nhpar;\": \"⫲\",\n\t\"nlArr;\": \"⇍\",\n\t\"nlarr;\": \"↚\",\n\t\"nleqq;\": \"≦̸\",\n\t\"nless;\": \"≮\",\n\t\"nlsim;\": \"≴\",\n\t\"nltri;\": \"⋪\",\n\t\"notin;\": \"∉\",\n\t\"notni;\": \"∌\",\n\t\"npart;\": \"∂̸\",\n\t\"nprec;\": \"⊀\",\n\t\"nrArr;\": \"⇏\",\n\t\"nrarr;\": \"↛\",\n\t\"nrtri;\": \"⋫\",\n\t\"nsime;\": \"≄\",\n\t\"nsmid;\": \"∤\",\n\t\"nspar;\": \"∦\",\n\t\"nsubE;\": \"⫅̸\",\n\t\"nsube;\": \"⊈\",\n\t\"nsucc;\": \"⊁\",\n\t\"nsupE;\": \"⫆̸\",\n\t\"nsupe;\": \"⊉\",\n\tNtilde: \"Ñ\",\n\tntilde: \"ñ\",\n\t\"numsp;\": \" \",\n\t\"nvsim;\": \"∼⃒\",\n\t\"nwArr;\": \"⇖\",\n\t\"nwarr;\": \"↖\",\n\tOacute: \"Ó\",\n\toacute: \"ó\",\n\t\"Ocirc;\": \"Ô\",\n\t\"ocirc;\": \"ô\",\n\t\"odash;\": \"⊝\",\n\t\"OElig;\": \"Œ\",\n\t\"oelig;\": \"œ\",\n\t\"ofcir;\": \"⦿\",\n\tOgrave: \"Ò\",\n\tograve: \"ò\",\n\t\"ohbar;\": \"⦵\",\n\t\"olarr;\": \"↺\",\n\t\"olcir;\": \"⦾\",\n\t\"oline;\": \"‾\",\n\t\"Omacr;\": \"Ō\",\n\t\"omacr;\": \"ō\",\n\t\"Omega;\": \"Ω\",\n\t\"omega;\": \"ω\",\n\t\"operp;\": \"⦹\",\n\t\"oplus;\": \"⊕\",\n\t\"orarr;\": \"↻\",\n\t\"order;\": \"ℴ\",\n\tOslash: \"Ø\",\n\toslash: \"ø\",\n\tOtilde: \"Õ\",\n\totilde: \"õ\",\n\t\"ovbar;\": \"⌽\",\n\t\"parsl;\": \"⫽\",\n\t\"phone;\": \"☎\",\n\t\"plusb;\": \"⊞\",\n\t\"pluse;\": \"⩲\",\n\tplusmn: \"±\",\n\t\"pound;\": \"£\",\n\t\"prcue;\": \"≼\",\n\t\"Prime;\": \"″\",\n\t\"prime;\": \"′\",\n\t\"prnap;\": \"⪹\",\n\t\"prsim;\": \"≾\",\n\t\"quest;\": \"?\",\n\t\"rAarr;\": \"⇛\",\n\t\"radic;\": \"√\",\n\t\"rangd;\": \"⦒\",\n\t\"range;\": \"⦥\",\n\t\"raquo;\": \"»\",\n\t\"rarrb;\": \"⇥\",\n\t\"rarrc;\": \"⤳\",\n\t\"rarrw;\": \"↝\",\n\t\"ratio;\": \"∶\",\n\t\"RBarr;\": \"⤐\",\n\t\"rBarr;\": \"⤏\",\n\t\"rbarr;\": \"⤍\",\n\t\"rbbrk;\": \"❳\",\n\t\"rbrke;\": \"⦌\",\n\t\"rceil;\": \"⌉\",\n\t\"rdquo;\": \"”\",\n\t\"reals;\": \"ℝ\",\n\t\"rhard;\": \"⇁\",\n\t\"rharu;\": \"⇀\",\n\t\"rlarr;\": \"⇄\",\n\t\"rlhar;\": \"⇌\",\n\t\"rnmid;\": \"⫮\",\n\t\"roang;\": \"⟭\",\n\t\"roarr;\": \"⇾\",\n\t\"robrk;\": \"⟧\",\n\t\"ropar;\": \"⦆\",\n\t\"rrarr;\": \"⇉\",\n\t\"rsquo;\": \"’\",\n\t\"rtrie;\": \"⊵\",\n\t\"rtrif;\": \"▸\",\n\t\"sbquo;\": \"‚\",\n\t\"sccue;\": \"≽\",\n\t\"Scirc;\": \"Ŝ\",\n\t\"scirc;\": \"ŝ\",\n\t\"scnap;\": \"⪺\",\n\t\"scsim;\": \"≿\",\n\t\"sdotb;\": \"⊡\",\n\t\"sdote;\": \"⩦\",\n\t\"seArr;\": \"⇘\",\n\t\"searr;\": \"↘\",\n\t\"setmn;\": \"∖\",\n\t\"sharp;\": \"♯\",\n\t\"Sigma;\": \"Σ\",\n\t\"sigma;\": \"σ\",\n\t\"simeq;\": \"≃\",\n\t\"simgE;\": \"⪠\",\n\t\"simlE;\": \"⪟\",\n\t\"simne;\": \"≆\",\n\t\"slarr;\": \"←\",\n\t\"smile;\": \"⌣\",\n\t\"smtes;\": \"⪬︀\",\n\t\"sqcap;\": \"⊓\",\n\t\"sqcup;\": \"⊔\",\n\t\"sqsub;\": \"⊏\",\n\t\"sqsup;\": \"⊐\",\n\t\"srarr;\": \"→\",\n\t\"starf;\": \"★\",\n\t\"strns;\": \"¯\",\n\t\"subnE;\": \"⫋\",\n\t\"subne;\": \"⊊\",\n\t\"supnE;\": \"⫌\",\n\t\"supne;\": \"⊋\",\n\t\"swArr;\": \"⇙\",\n\t\"swarr;\": \"↙\",\n\t\"szlig;\": \"ß\",\n\t\"Theta;\": \"Θ\",\n\t\"theta;\": \"θ\",\n\t\"thkap;\": \"≈\",\n\t\"THORN;\": \"Þ\",\n\t\"thorn;\": \"þ\",\n\t\"Tilde;\": \"∼\",\n\t\"tilde;\": \"˜\",\n\t\"times;\": \"×\",\n\t\"TRADE;\": \"™\",\n\t\"trade;\": \"™\",\n\t\"trisb;\": \"⧍\",\n\t\"TSHcy;\": \"Ћ\",\n\t\"tshcy;\": \"ћ\",\n\t\"twixt;\": \"≬\",\n\tUacute: \"Ú\",\n\tuacute: \"ú\",\n\t\"Ubrcy;\": \"Ў\",\n\t\"ubrcy;\": \"ў\",\n\t\"Ucirc;\": \"Û\",\n\t\"ucirc;\": \"û\",\n\t\"udarr;\": \"⇅\",\n\t\"udhar;\": \"⥮\",\n\tUgrave: \"Ù\",\n\tugrave: \"ù\",\n\t\"uharl;\": \"↿\",\n\t\"uharr;\": \"↾\",\n\t\"uhblk;\": \"▀\",\n\t\"ultri;\": \"◸\",\n\t\"Umacr;\": \"Ū\",\n\t\"umacr;\": \"ū\",\n\t\"Union;\": \"⋃\",\n\t\"Uogon;\": \"Ų\",\n\t\"uogon;\": \"ų\",\n\t\"uplus;\": \"⊎\",\n\t\"upsih;\": \"ϒ\",\n\t\"UpTee;\": \"⊥\",\n\t\"Uring;\": \"Ů\",\n\t\"uring;\": \"ů\",\n\t\"urtri;\": \"◹\",\n\t\"utdot;\": \"⋰\",\n\t\"utrif;\": \"▴\",\n\t\"uuarr;\": \"⇈\",\n\t\"varpi;\": \"ϖ\",\n\t\"vBarv;\": \"⫩\",\n\t\"VDash;\": \"⊫\",\n\t\"Vdash;\": \"⊩\",\n\t\"vDash;\": \"⊨\",\n\t\"vdash;\": \"⊢\",\n\t\"veeeq;\": \"≚\",\n\t\"vltri;\": \"⊲\",\n\t\"vnsub;\": \"⊂⃒\",\n\t\"vnsup;\": \"⊃⃒\",\n\t\"vprop;\": \"∝\",\n\t\"vrtri;\": \"⊳\",\n\t\"Wcirc;\": \"Ŵ\",\n\t\"wcirc;\": \"ŵ\",\n\t\"Wedge;\": \"⋀\",\n\t\"wedge;\": \"∧\",\n\t\"xcirc;\": \"◯\",\n\t\"xdtri;\": \"▽\",\n\t\"xhArr;\": \"⟺\",\n\t\"xharr;\": \"⟷\",\n\t\"xlArr;\": \"⟸\",\n\t\"xlarr;\": \"⟵\",\n\t\"xodot;\": \"⨀\",\n\t\"xrArr;\": \"⟹\",\n\t\"xrarr;\": \"⟶\",\n\t\"xutri;\": \"△\",\n\tYacute: \"Ý\",\n\tyacute: \"ý\",\n\t\"Ycirc;\": \"Ŷ\",\n\t\"ycirc;\": \"ŷ\",\n\t\"Aacute;\": \"Á\",\n\t\"aacute;\": \"á\",\n\t\"Abreve;\": \"Ă\",\n\t\"abreve;\": \"ă\",\n\t\"Agrave;\": \"À\",\n\t\"agrave;\": \"à\",\n\t\"andand;\": \"⩕\",\n\t\"angmsd;\": \"∡\",\n\t\"angsph;\": \"∢\",\n\t\"apacir;\": \"⩯\",\n\t\"approx;\": \"≈\",\n\t\"Assign;\": \"≔\",\n\t\"Atilde;\": \"Ã\",\n\t\"atilde;\": \"ã\",\n\t\"barvee;\": \"⊽\",\n\t\"Barwed;\": \"⌆\",\n\t\"barwed;\": \"⌅\",\n\t\"becaus;\": \"∵\",\n\t\"bernou;\": \"ℬ\",\n\t\"bigcap;\": \"⋂\",\n\t\"bigcup;\": \"⋃\",\n\t\"bigvee;\": \"⋁\",\n\t\"bkarow;\": \"⤍\",\n\t\"bottom;\": \"⊥\",\n\t\"bowtie;\": \"⋈\",\n\t\"boxbox;\": \"⧉\",\n\t\"bprime;\": \"‵\",\n\t\"brvbar;\": \"¦\",\n\t\"bullet;\": \"•\",\n\t\"Bumpeq;\": \"≎\",\n\t\"bumpeq;\": \"≏\",\n\t\"Cacute;\": \"Ć\",\n\t\"cacute;\": \"ć\",\n\t\"capand;\": \"⩄\",\n\t\"capcap;\": \"⩋\",\n\t\"capcup;\": \"⩇\",\n\t\"capdot;\": \"⩀\",\n\t\"Ccaron;\": \"Č\",\n\t\"ccaron;\": \"č\",\n\t\"Ccedil;\": \"Ç\",\n\t\"ccedil;\": \"ç\",\n\t\"circeq;\": \"≗\",\n\t\"cirmid;\": \"⫯\",\n\t\"Colone;\": \"⩴\",\n\t\"colone;\": \"≔\",\n\t\"commat;\": \"@\",\n\t\"compfn;\": \"∘\",\n\t\"Conint;\": \"∯\",\n\t\"conint;\": \"∮\",\n\t\"coprod;\": \"∐\",\n\t\"copysr;\": \"℗\",\n\t\"cularr;\": \"↶\",\n\t\"CupCap;\": \"≍\",\n\t\"cupcap;\": \"⩆\",\n\t\"cupcup;\": \"⩊\",\n\t\"cupdot;\": \"⊍\",\n\t\"curarr;\": \"↷\",\n\t\"curren;\": \"¤\",\n\t\"cylcty;\": \"⌭\",\n\t\"Dagger;\": \"‡\",\n\t\"dagger;\": \"†\",\n\t\"daleth;\": \"ℸ\",\n\t\"Dcaron;\": \"Ď\",\n\t\"dcaron;\": \"ď\",\n\t\"dfisht;\": \"⥿\",\n\t\"divide;\": \"÷\",\n\t\"divonx;\": \"⋇\",\n\t\"dlcorn;\": \"⌞\",\n\t\"dlcrop;\": \"⌍\",\n\t\"dollar;\": \"$\",\n\t\"DotDot;\": \"⃜\",\n\t\"drcorn;\": \"⌟\",\n\t\"drcrop;\": \"⌌\",\n\t\"Dstrok;\": \"Đ\",\n\t\"dstrok;\": \"đ\",\n\t\"Eacute;\": \"É\",\n\t\"eacute;\": \"é\",\n\t\"easter;\": \"⩮\",\n\t\"Ecaron;\": \"Ě\",\n\t\"ecaron;\": \"ě\",\n\t\"ecolon;\": \"≕\",\n\t\"Egrave;\": \"È\",\n\t\"egrave;\": \"è\",\n\t\"egsdot;\": \"⪘\",\n\t\"elsdot;\": \"⪗\",\n\t\"emptyv;\": \"∅\",\n\t\"emsp13;\": \" \",\n\t\"emsp14;\": \" \",\n\t\"eparsl;\": \"⧣\",\n\t\"eqcirc;\": \"≖\",\n\t\"equals;\": \"=\",\n\t\"equest;\": \"≟\",\n\t\"Exists;\": \"∃\",\n\t\"female;\": \"♀\",\n\t\"ffilig;\": \"ﬃ\",\n\t\"ffllig;\": \"ﬄ\",\n\t\"ForAll;\": \"∀\",\n\t\"forall;\": \"∀\",\n\t\"frac12;\": \"½\",\n\t\"frac13;\": \"⅓\",\n\t\"frac14;\": \"¼\",\n\t\"frac15;\": \"⅕\",\n\t\"frac16;\": \"⅙\",\n\t\"frac18;\": \"⅛\",\n\t\"frac23;\": \"⅔\",\n\t\"frac25;\": \"⅖\",\n\t\"frac34;\": \"¾\",\n\t\"frac35;\": \"⅗\",\n\t\"frac38;\": \"⅜\",\n\t\"frac45;\": \"⅘\",\n\t\"frac56;\": \"⅚\",\n\t\"frac58;\": \"⅝\",\n\t\"frac78;\": \"⅞\",\n\t\"gacute;\": \"ǵ\",\n\t\"Gammad;\": \"Ϝ\",\n\t\"gammad;\": \"ϝ\",\n\t\"Gbreve;\": \"Ğ\",\n\t\"gbreve;\": \"ğ\",\n\t\"Gcedil;\": \"Ģ\",\n\t\"gesdot;\": \"⪀\",\n\t\"gesles;\": \"⪔\",\n\t\"gtlPar;\": \"⦕\",\n\t\"gtrarr;\": \"⥸\",\n\t\"gtrdot;\": \"⋗\",\n\t\"gtrsim;\": \"≳\",\n\t\"hairsp;\": \" \",\n\t\"hamilt;\": \"ℋ\",\n\t\"HARDcy;\": \"Ъ\",\n\t\"hardcy;\": \"ъ\",\n\t\"hearts;\": \"♥\",\n\t\"hellip;\": \"…\",\n\t\"hercon;\": \"⊹\",\n\t\"homtht;\": \"∻\",\n\t\"horbar;\": \"―\",\n\t\"hslash;\": \"ℏ\",\n\t\"Hstrok;\": \"Ħ\",\n\t\"hstrok;\": \"ħ\",\n\t\"hybull;\": \"⁃\",\n\t\"hyphen;\": \"‐\",\n\t\"Iacute;\": \"Í\",\n\t\"iacute;\": \"í\",\n\t\"Igrave;\": \"Ì\",\n\t\"igrave;\": \"ì\",\n\t\"iiiint;\": \"⨌\",\n\t\"iinfin;\": \"⧜\",\n\t\"incare;\": \"℅\",\n\t\"inodot;\": \"ı\",\n\t\"intcal;\": \"⊺\",\n\t\"iquest;\": \"¿\",\n\t\"isinsv;\": \"⋳\",\n\t\"Itilde;\": \"Ĩ\",\n\t\"itilde;\": \"ĩ\",\n\t\"Jsercy;\": \"Ј\",\n\t\"jsercy;\": \"ј\",\n\t\"kappav;\": \"ϰ\",\n\t\"Kcedil;\": \"Ķ\",\n\t\"kcedil;\": \"ķ\",\n\t\"kgreen;\": \"ĸ\",\n\t\"Lacute;\": \"Ĺ\",\n\t\"lacute;\": \"ĺ\",\n\t\"lagran;\": \"ℒ\",\n\t\"Lambda;\": \"Λ\",\n\t\"lambda;\": \"λ\",\n\t\"langle;\": \"⟨\",\n\t\"larrfs;\": \"⤝\",\n\t\"larrhk;\": \"↩\",\n\t\"larrlp;\": \"↫\",\n\t\"larrpl;\": \"⤹\",\n\t\"larrtl;\": \"↢\",\n\t\"lAtail;\": \"⤛\",\n\t\"latail;\": \"⤙\",\n\t\"lbrace;\": \"{\",\n\t\"lbrack;\": \"[\",\n\t\"Lcaron;\": \"Ľ\",\n\t\"lcaron;\": \"ľ\",\n\t\"Lcedil;\": \"Ļ\",\n\t\"lcedil;\": \"ļ\",\n\t\"ldquor;\": \"„\",\n\t\"lesdot;\": \"⩿\",\n\t\"lesges;\": \"⪓\",\n\t\"lfisht;\": \"⥼\",\n\t\"lfloor;\": \"⌊\",\n\t\"lharul;\": \"⥪\",\n\t\"llhard;\": \"⥫\",\n\t\"Lmidot;\": \"Ŀ\",\n\t\"lmidot;\": \"ŀ\",\n\t\"lmoust;\": \"⎰\",\n\t\"loplus;\": \"⨭\",\n\t\"lowast;\": \"∗\",\n\t\"lowbar;\": \"_\",\n\t\"lparlt;\": \"⦓\",\n\t\"lrhard;\": \"⥭\",\n\t\"lsaquo;\": \"‹\",\n\t\"lsquor;\": \"‚\",\n\t\"Lstrok;\": \"Ł\",\n\t\"lstrok;\": \"ł\",\n\t\"lthree;\": \"⋋\",\n\t\"ltimes;\": \"⋉\",\n\t\"ltlarr;\": \"⥶\",\n\t\"ltrPar;\": \"⦖\",\n\t\"mapsto;\": \"↦\",\n\t\"marker;\": \"▮\",\n\t\"mcomma;\": \"⨩\",\n\t\"midast;\": \"*\",\n\t\"midcir;\": \"⫰\",\n\t\"middot;\": \"·\",\n\t\"minusb;\": \"⊟\",\n\t\"minusd;\": \"∸\",\n\t\"mnplus;\": \"∓\",\n\t\"models;\": \"⊧\",\n\t\"mstpos;\": \"∾\",\n\t\"Nacute;\": \"Ń\",\n\t\"nacute;\": \"ń\",\n\t\"nbumpe;\": \"≏̸\",\n\t\"Ncaron;\": \"Ň\",\n\t\"ncaron;\": \"ň\",\n\t\"Ncedil;\": \"Ņ\",\n\t\"ncedil;\": \"ņ\",\n\t\"nearhk;\": \"⤤\",\n\t\"nequiv;\": \"≢\",\n\t\"nesear;\": \"⤨\",\n\t\"nexist;\": \"∄\",\n\t\"nltrie;\": \"⋬\",\n\t\"notinE;\": \"⋹̸\",\n\t\"nparsl;\": \"⫽⃥\",\n\t\"nprcue;\": \"⋠\",\n\t\"nrarrc;\": \"⤳̸\",\n\t\"nrarrw;\": \"↝̸\",\n\t\"nrtrie;\": \"⋭\",\n\t\"nsccue;\": \"⋡\",\n\t\"nsimeq;\": \"≄\",\n\t\"Ntilde;\": \"Ñ\",\n\t\"ntilde;\": \"ñ\",\n\t\"numero;\": \"№\",\n\t\"nVDash;\": \"⊯\",\n\t\"nVdash;\": \"⊮\",\n\t\"nvDash;\": \"⊭\",\n\t\"nvdash;\": \"⊬\",\n\t\"nvHarr;\": \"⤄\",\n\t\"nvlArr;\": \"⤂\",\n\t\"nvrArr;\": \"⤃\",\n\t\"nwarhk;\": \"⤣\",\n\t\"nwnear;\": \"⤧\",\n\t\"Oacute;\": \"Ó\",\n\t\"oacute;\": \"ó\",\n\t\"Odblac;\": \"Ő\",\n\t\"odblac;\": \"ő\",\n\t\"odsold;\": \"⦼\",\n\t\"Ograve;\": \"Ò\",\n\t\"ograve;\": \"ò\",\n\t\"ominus;\": \"⊖\",\n\t\"origof;\": \"⊶\",\n\t\"Oslash;\": \"Ø\",\n\t\"oslash;\": \"ø\",\n\t\"Otilde;\": \"Õ\",\n\t\"otilde;\": \"õ\",\n\t\"Otimes;\": \"⨷\",\n\t\"otimes;\": \"⊗\",\n\t\"parsim;\": \"⫳\",\n\t\"percnt;\": \"%\",\n\t\"period;\": \".\",\n\t\"permil;\": \"‰\",\n\t\"phmmat;\": \"ℳ\",\n\t\"planck;\": \"ℏ\",\n\t\"plankv;\": \"ℏ\",\n\t\"plusdo;\": \"∔\",\n\t\"plusdu;\": \"⨥\",\n\t\"plusmn;\": \"±\",\n\t\"preceq;\": \"⪯\",\n\t\"primes;\": \"ℙ\",\n\t\"prnsim;\": \"⋨\",\n\t\"propto;\": \"∝\",\n\t\"prurel;\": \"⊰\",\n\t\"puncsp;\": \" \",\n\t\"qprime;\": \"⁗\",\n\t\"Racute;\": \"Ŕ\",\n\t\"racute;\": \"ŕ\",\n\t\"rangle;\": \"⟩\",\n\t\"rarrap;\": \"⥵\",\n\t\"rarrfs;\": \"⤞\",\n\t\"rarrhk;\": \"↪\",\n\t\"rarrlp;\": \"↬\",\n\t\"rarrpl;\": \"⥅\",\n\t\"Rarrtl;\": \"⤖\",\n\t\"rarrtl;\": \"↣\",\n\t\"rAtail;\": \"⤜\",\n\t\"ratail;\": \"⤚\",\n\t\"rbrace;\": \"}\",\n\t\"rbrack;\": \"]\",\n\t\"Rcaron;\": \"Ř\",\n\t\"rcaron;\": \"ř\",\n\t\"Rcedil;\": \"Ŗ\",\n\t\"rcedil;\": \"ŗ\",\n\t\"rdquor;\": \"”\",\n\t\"rfisht;\": \"⥽\",\n\t\"rfloor;\": \"⌋\",\n\t\"rharul;\": \"⥬\",\n\t\"rmoust;\": \"⎱\",\n\t\"roplus;\": \"⨮\",\n\t\"rpargt;\": \"⦔\",\n\t\"rsaquo;\": \"›\",\n\t\"rsquor;\": \"’\",\n\t\"rthree;\": \"⋌\",\n\t\"rtimes;\": \"⋊\",\n\t\"Sacute;\": \"Ś\",\n\t\"sacute;\": \"ś\",\n\t\"Scaron;\": \"Š\",\n\t\"scaron;\": \"š\",\n\t\"Scedil;\": \"Ş\",\n\t\"scedil;\": \"ş\",\n\t\"scnsim;\": \"⋩\",\n\t\"searhk;\": \"⤥\",\n\t\"seswar;\": \"⤩\",\n\t\"sfrown;\": \"⌢\",\n\t\"SHCHcy;\": \"Щ\",\n\t\"shchcy;\": \"щ\",\n\t\"sigmaf;\": \"ς\",\n\t\"sigmav;\": \"ς\",\n\t\"simdot;\": \"⩪\",\n\t\"smashp;\": \"⨳\",\n\t\"SOFTcy;\": \"Ь\",\n\t\"softcy;\": \"ь\",\n\t\"solbar;\": \"⌿\",\n\t\"spades;\": \"♠\",\n\t\"sqcaps;\": \"⊓︀\",\n\t\"sqcups;\": \"⊔︀\",\n\t\"sqsube;\": \"⊑\",\n\t\"sqsupe;\": \"⊒\",\n\t\"Square;\": \"□\",\n\t\"square;\": \"□\",\n\t\"squarf;\": \"▪\",\n\t\"ssetmn;\": \"∖\",\n\t\"ssmile;\": \"⌣\",\n\t\"sstarf;\": \"⋆\",\n\t\"subdot;\": \"⪽\",\n\t\"Subset;\": \"⋐\",\n\t\"subset;\": \"⊂\",\n\t\"subsim;\": \"⫇\",\n\t\"subsub;\": \"⫕\",\n\t\"subsup;\": \"⫓\",\n\t\"succeq;\": \"⪰\",\n\t\"supdot;\": \"⪾\",\n\t\"Supset;\": \"⋑\",\n\t\"supset;\": \"⊃\",\n\t\"supsim;\": \"⫈\",\n\t\"supsub;\": \"⫔\",\n\t\"supsup;\": \"⫖\",\n\t\"swarhk;\": \"⤦\",\n\t\"swnwar;\": \"⤪\",\n\t\"target;\": \"⌖\",\n\t\"Tcaron;\": \"Ť\",\n\t\"tcaron;\": \"ť\",\n\t\"Tcedil;\": \"Ţ\",\n\t\"tcedil;\": \"ţ\",\n\t\"telrec;\": \"⌕\",\n\t\"there4;\": \"∴\",\n\t\"thetav;\": \"ϑ\",\n\t\"thinsp;\": \" \",\n\t\"thksim;\": \"∼\",\n\t\"timesb;\": \"⊠\",\n\t\"timesd;\": \"⨰\",\n\t\"topbot;\": \"⌶\",\n\t\"topcir;\": \"⫱\",\n\t\"tprime;\": \"‴\",\n\t\"tridot;\": \"◬\",\n\t\"Tstrok;\": \"Ŧ\",\n\t\"tstrok;\": \"ŧ\",\n\t\"Uacute;\": \"Ú\",\n\t\"uacute;\": \"ú\",\n\t\"Ubreve;\": \"Ŭ\",\n\t\"ubreve;\": \"ŭ\",\n\t\"Udblac;\": \"Ű\",\n\t\"udblac;\": \"ű\",\n\t\"ufisht;\": \"⥾\",\n\t\"Ugrave;\": \"Ù\",\n\t\"ugrave;\": \"ù\",\n\t\"ulcorn;\": \"⌜\",\n\t\"ulcrop;\": \"⌏\",\n\t\"urcorn;\": \"⌝\",\n\t\"urcrop;\": \"⌎\",\n\t\"Utilde;\": \"Ũ\",\n\t\"utilde;\": \"ũ\",\n\t\"vangrt;\": \"⦜\",\n\t\"varphi;\": \"ϕ\",\n\t\"varrho;\": \"ϱ\",\n\t\"Vdashl;\": \"⫦\",\n\t\"veebar;\": \"⊻\",\n\t\"vellip;\": \"⋮\",\n\t\"Verbar;\": \"‖\",\n\t\"verbar;\": \"|\",\n\t\"vsubnE;\": \"⫋︀\",\n\t\"vsubne;\": \"⊊︀\",\n\t\"vsupnE;\": \"⫌︀\",\n\t\"vsupne;\": \"⊋︀\",\n\t\"Vvdash;\": \"⊪\",\n\t\"wedbar;\": \"⩟\",\n\t\"wedgeq;\": \"≙\",\n\t\"weierp;\": \"℘\",\n\t\"wreath;\": \"≀\",\n\t\"xoplus;\": \"⨁\",\n\t\"xotime;\": \"⨂\",\n\t\"xsqcup;\": \"⨆\",\n\t\"xuplus;\": \"⨄\",\n\t\"xwedge;\": \"⋀\",\n\t\"Yacute;\": \"Ý\",\n\t\"yacute;\": \"ý\",\n\t\"Zacute;\": \"Ź\",\n\t\"zacute;\": \"ź\",\n\t\"Zcaron;\": \"Ž\",\n\t\"zcaron;\": \"ž\",\n\t\"zeetrf;\": \"ℨ\",\n\t\"alefsym;\": \"ℵ\",\n\t\"angrtvb;\": \"⊾\",\n\t\"angzarr;\": \"⍼\",\n\t\"asympeq;\": \"≍\",\n\t\"backsim;\": \"∽\",\n\t\"Because;\": \"∵\",\n\t\"because;\": \"∵\",\n\t\"bemptyv;\": \"⦰\",\n\t\"between;\": \"≬\",\n\t\"bigcirc;\": \"◯\",\n\t\"bigodot;\": \"⨀\",\n\t\"bigstar;\": \"★\",\n\t\"bnequiv;\": \"≡⃥\",\n\t\"boxplus;\": \"⊞\",\n\t\"Cayleys;\": \"ℭ\",\n\t\"Cconint;\": \"∰\",\n\t\"ccupssm;\": \"⩐\",\n\t\"Cedilla;\": \"¸\",\n\t\"cemptyv;\": \"⦲\",\n\t\"cirscir;\": \"⧂\",\n\t\"coloneq;\": \"≔\",\n\t\"congdot;\": \"⩭\",\n\t\"cudarrl;\": \"⤸\",\n\t\"cudarrr;\": \"⤵\",\n\t\"cularrp;\": \"⤽\",\n\t\"curarrm;\": \"⤼\",\n\t\"dbkarow;\": \"⤏\",\n\t\"ddagger;\": \"‡\",\n\t\"ddotseq;\": \"⩷\",\n\t\"demptyv;\": \"⦱\",\n\t\"Diamond;\": \"⋄\",\n\t\"diamond;\": \"⋄\",\n\t\"digamma;\": \"ϝ\",\n\t\"dotplus;\": \"∔\",\n\t\"DownTee;\": \"⊤\",\n\t\"dwangle;\": \"⦦\",\n\t\"Element;\": \"∈\",\n\t\"Epsilon;\": \"Ε\",\n\t\"epsilon;\": \"ε\",\n\t\"eqcolon;\": \"≕\",\n\t\"equivDD;\": \"⩸\",\n\t\"gesdoto;\": \"⪂\",\n\t\"gtquest;\": \"⩼\",\n\t\"gtrless;\": \"≷\",\n\t\"harrcir;\": \"⥈\",\n\t\"Implies;\": \"⇒\",\n\t\"intprod;\": \"⨼\",\n\t\"isindot;\": \"⋵\",\n\t\"larrbfs;\": \"⤟\",\n\t\"larrsim;\": \"⥳\",\n\t\"lbrksld;\": \"⦏\",\n\t\"lbrkslu;\": \"⦍\",\n\t\"ldrdhar;\": \"⥧\",\n\t\"LeftTee;\": \"⊣\",\n\t\"lesdoto;\": \"⪁\",\n\t\"lessdot;\": \"⋖\",\n\t\"lessgtr;\": \"≶\",\n\t\"lesssim;\": \"≲\",\n\t\"lotimes;\": \"⨴\",\n\t\"lozenge;\": \"◊\",\n\t\"ltquest;\": \"⩻\",\n\t\"luruhar;\": \"⥦\",\n\t\"maltese;\": \"✠\",\n\t\"minusdu;\": \"⨪\",\n\t\"napprox;\": \"≉\",\n\t\"natural;\": \"♮\",\n\t\"nearrow;\": \"↗\",\n\t\"NewLine;\": \"\\n\",\n\t\"nexists;\": \"∄\",\n\t\"NoBreak;\": \"⁠\",\n\t\"notinva;\": \"∉\",\n\t\"notinvb;\": \"⋷\",\n\t\"notinvc;\": \"⋶\",\n\t\"NotLess;\": \"≮\",\n\t\"notniva;\": \"∌\",\n\t\"notnivb;\": \"⋾\",\n\t\"notnivc;\": \"⋽\",\n\t\"npolint;\": \"⨔\",\n\t\"npreceq;\": \"⪯̸\",\n\t\"nsqsube;\": \"⋢\",\n\t\"nsqsupe;\": \"⋣\",\n\t\"nsubset;\": \"⊂⃒\",\n\t\"nsucceq;\": \"⪰̸\",\n\t\"nsupset;\": \"⊃⃒\",\n\t\"nvinfin;\": \"⧞\",\n\t\"nvltrie;\": \"⊴⃒\",\n\t\"nvrtrie;\": \"⊵⃒\",\n\t\"nwarrow;\": \"↖\",\n\t\"olcross;\": \"⦻\",\n\t\"Omicron;\": \"Ο\",\n\t\"omicron;\": \"ο\",\n\t\"orderof;\": \"ℴ\",\n\t\"orslope;\": \"⩗\",\n\t\"OverBar;\": \"‾\",\n\t\"pertenk;\": \"‱\",\n\t\"planckh;\": \"ℎ\",\n\t\"pluscir;\": \"⨢\",\n\t\"plussim;\": \"⨦\",\n\t\"plustwo;\": \"⨧\",\n\t\"precsim;\": \"≾\",\n\t\"Product;\": \"∏\",\n\t\"quatint;\": \"⨖\",\n\t\"questeq;\": \"≟\",\n\t\"rarrbfs;\": \"⤠\",\n\t\"rarrsim;\": \"⥴\",\n\t\"rbrksld;\": \"⦎\",\n\t\"rbrkslu;\": \"⦐\",\n\t\"rdldhar;\": \"⥩\",\n\t\"realine;\": \"ℛ\",\n\t\"rotimes;\": \"⨵\",\n\t\"ruluhar;\": \"⥨\",\n\t\"searrow;\": \"↘\",\n\t\"simplus;\": \"⨤\",\n\t\"simrarr;\": \"⥲\",\n\t\"subedot;\": \"⫃\",\n\t\"submult;\": \"⫁\",\n\t\"subplus;\": \"⪿\",\n\t\"subrarr;\": \"⥹\",\n\t\"succsim;\": \"≿\",\n\t\"supdsub;\": \"⫘\",\n\t\"supedot;\": \"⫄\",\n\t\"suphsol;\": \"⟉\",\n\t\"suphsub;\": \"⫗\",\n\t\"suplarr;\": \"⥻\",\n\t\"supmult;\": \"⫂\",\n\t\"supplus;\": \"⫀\",\n\t\"swarrow;\": \"↙\",\n\t\"topfork;\": \"⫚\",\n\t\"triplus;\": \"⨹\",\n\t\"tritime;\": \"⨻\",\n\t\"UpArrow;\": \"↑\",\n\t\"Uparrow;\": \"⇑\",\n\t\"uparrow;\": \"↑\",\n\t\"Upsilon;\": \"Υ\",\n\t\"upsilon;\": \"υ\",\n\t\"uwangle;\": \"⦧\",\n\t\"vzigzag;\": \"⦚\",\n\t\"zigrarr;\": \"⇝\",\n\t\"andslope;\": \"⩘\",\n\t\"angmsdaa;\": \"⦨\",\n\t\"angmsdab;\": \"⦩\",\n\t\"angmsdac;\": \"⦪\",\n\t\"angmsdad;\": \"⦫\",\n\t\"angmsdae;\": \"⦬\",\n\t\"angmsdaf;\": \"⦭\",\n\t\"angmsdag;\": \"⦮\",\n\t\"angmsdah;\": \"⦯\",\n\t\"angrtvbd;\": \"⦝\",\n\t\"approxeq;\": \"≊\",\n\t\"awconint;\": \"∳\",\n\t\"backcong;\": \"≌\",\n\t\"barwedge;\": \"⌅\",\n\t\"bbrktbrk;\": \"⎶\",\n\t\"bigoplus;\": \"⨁\",\n\t\"bigsqcup;\": \"⨆\",\n\t\"biguplus;\": \"⨄\",\n\t\"bigwedge;\": \"⋀\",\n\t\"boxminus;\": \"⊟\",\n\t\"boxtimes;\": \"⊠\",\n\t\"bsolhsub;\": \"⟈\",\n\t\"capbrcup;\": \"⩉\",\n\t\"circledR;\": \"®\",\n\t\"circledS;\": \"Ⓢ\",\n\t\"cirfnint;\": \"⨐\",\n\t\"clubsuit;\": \"♣\",\n\t\"cupbrcap;\": \"⩈\",\n\t\"curlyvee;\": \"⋎\",\n\t\"cwconint;\": \"∲\",\n\t\"DDotrahd;\": \"⤑\",\n\t\"doteqdot;\": \"≑\",\n\t\"DotEqual;\": \"≐\",\n\t\"dotminus;\": \"∸\",\n\t\"drbkarow;\": \"⤐\",\n\t\"dzigrarr;\": \"⟿\",\n\t\"elinters;\": \"⏧\",\n\t\"emptyset;\": \"∅\",\n\t\"eqvparsl;\": \"⧥\",\n\t\"fpartint;\": \"⨍\",\n\t\"geqslant;\": \"⩾\",\n\t\"gesdotol;\": \"⪄\",\n\t\"gnapprox;\": \"⪊\",\n\t\"hksearow;\": \"⤥\",\n\t\"hkswarow;\": \"⤦\",\n\t\"imagline;\": \"ℐ\",\n\t\"imagpart;\": \"ℑ\",\n\t\"infintie;\": \"⧝\",\n\t\"integers;\": \"ℤ\",\n\t\"Integral;\": \"∫\",\n\t\"intercal;\": \"⊺\",\n\t\"intlarhk;\": \"⨗\",\n\t\"laemptyv;\": \"⦴\",\n\t\"ldrushar;\": \"⥋\",\n\t\"leqslant;\": \"⩽\",\n\t\"lesdotor;\": \"⪃\",\n\t\"LessLess;\": \"⪡\",\n\t\"llcorner;\": \"⌞\",\n\t\"lnapprox;\": \"⪉\",\n\t\"lrcorner;\": \"⌟\",\n\t\"lurdshar;\": \"⥊\",\n\t\"mapstoup;\": \"↥\",\n\t\"multimap;\": \"⊸\",\n\t\"naturals;\": \"ℕ\",\n\t\"ncongdot;\": \"⩭̸\",\n\t\"NotEqual;\": \"≠\",\n\t\"notindot;\": \"⋵̸\",\n\t\"NotTilde;\": \"≁\",\n\t\"otimesas;\": \"⨶\",\n\t\"parallel;\": \"∥\",\n\t\"PartialD;\": \"∂\",\n\t\"plusacir;\": \"⨣\",\n\t\"pointint;\": \"⨕\",\n\t\"Precedes;\": \"≺\",\n\t\"precneqq;\": \"⪵\",\n\t\"precnsim;\": \"⋨\",\n\t\"profalar;\": \"⌮\",\n\t\"profline;\": \"⌒\",\n\t\"profsurf;\": \"⌓\",\n\t\"raemptyv;\": \"⦳\",\n\t\"realpart;\": \"ℜ\",\n\t\"RightTee;\": \"⊢\",\n\t\"rppolint;\": \"⨒\",\n\t\"rtriltri;\": \"⧎\",\n\t\"scpolint;\": \"⨓\",\n\t\"setminus;\": \"∖\",\n\t\"shortmid;\": \"∣\",\n\t\"smeparsl;\": \"⧤\",\n\t\"sqsubset;\": \"⊏\",\n\t\"sqsupset;\": \"⊐\",\n\t\"subseteq;\": \"⊆\",\n\t\"Succeeds;\": \"≻\",\n\t\"succneqq;\": \"⪶\",\n\t\"succnsim;\": \"⋩\",\n\t\"SuchThat;\": \"∋\",\n\t\"Superset;\": \"⊃\",\n\t\"supseteq;\": \"⊇\",\n\t\"thetasym;\": \"ϑ\",\n\t\"thicksim;\": \"∼\",\n\t\"timesbar;\": \"⨱\",\n\t\"triangle;\": \"▵\",\n\t\"triminus;\": \"⨺\",\n\t\"trpezium;\": \"⏢\",\n\t\"Uarrocir;\": \"⥉\",\n\t\"ulcorner;\": \"⌜\",\n\t\"UnderBar;\": \"_\",\n\t\"urcorner;\": \"⌝\",\n\t\"varkappa;\": \"ϰ\",\n\t\"varsigma;\": \"ς\",\n\t\"vartheta;\": \"ϑ\",\n\t\"backprime;\": \"‵\",\n\t\"backsimeq;\": \"⋍\",\n\t\"Backslash;\": \"∖\",\n\t\"bigotimes;\": \"⨂\",\n\t\"CenterDot;\": \"·\",\n\t\"centerdot;\": \"·\",\n\t\"checkmark;\": \"✓\",\n\t\"CircleDot;\": \"⊙\",\n\t\"complexes;\": \"ℂ\",\n\t\"Congruent;\": \"≡\",\n\t\"Coproduct;\": \"∐\",\n\t\"dotsquare;\": \"⊡\",\n\t\"DoubleDot;\": \"¨\",\n\t\"DownArrow;\": \"↓\",\n\t\"Downarrow;\": \"⇓\",\n\t\"downarrow;\": \"↓\",\n\t\"DownBreve;\": \"̑\",\n\t\"gtrapprox;\": \"⪆\",\n\t\"gtreqless;\": \"⋛\",\n\t\"gvertneqq;\": \"≩︀\",\n\t\"heartsuit;\": \"♥\",\n\t\"HumpEqual;\": \"≏\",\n\t\"LeftArrow;\": \"←\",\n\t\"Leftarrow;\": \"⇐\",\n\t\"leftarrow;\": \"←\",\n\t\"LeftFloor;\": \"⌊\",\n\t\"lesseqgtr;\": \"⋚\",\n\t\"LessTilde;\": \"≲\",\n\t\"lvertneqq;\": \"≨︀\",\n\t\"Mellintrf;\": \"ℳ\",\n\t\"MinusPlus;\": \"∓\",\n\t\"ngeqslant;\": \"⩾̸\",\n\t\"nleqslant;\": \"⩽̸\",\n\t\"NotCupCap;\": \"≭\",\n\t\"NotExists;\": \"∄\",\n\t\"NotSubset;\": \"⊂⃒\",\n\t\"nparallel;\": \"∦\",\n\t\"nshortmid;\": \"∤\",\n\t\"nsubseteq;\": \"⊈\",\n\t\"nsupseteq;\": \"⊉\",\n\t\"OverBrace;\": \"⏞\",\n\t\"pitchfork;\": \"⋔\",\n\t\"PlusMinus;\": \"±\",\n\t\"rationals;\": \"ℚ\",\n\t\"spadesuit;\": \"♠\",\n\t\"subseteqq;\": \"⫅\",\n\t\"subsetneq;\": \"⊊\",\n\t\"supseteqq;\": \"⫆\",\n\t\"supsetneq;\": \"⊋\",\n\t\"Therefore;\": \"∴\",\n\t\"therefore;\": \"∴\",\n\t\"ThinSpace;\": \" \",\n\t\"triangleq;\": \"≜\",\n\t\"TripleDot;\": \"⃛\",\n\t\"UnionPlus;\": \"⊎\",\n\t\"varpropto;\": \"∝\",\n\t\"Bernoullis;\": \"ℬ\",\n\t\"circledast;\": \"⊛\",\n\t\"CirclePlus;\": \"⊕\",\n\t\"complement;\": \"∁\",\n\t\"curlywedge;\": \"⋏\",\n\t\"eqslantgtr;\": \"⪖\",\n\t\"EqualTilde;\": \"≂\",\n\t\"Fouriertrf;\": \"ℱ\",\n\t\"gtreqqless;\": \"⪌\",\n\t\"ImaginaryI;\": \"ⅈ\",\n\t\"Laplacetrf;\": \"ℒ\",\n\t\"LeftVector;\": \"↼\",\n\t\"lessapprox;\": \"⪅\",\n\t\"lesseqqgtr;\": \"⪋\",\n\t\"Lleftarrow;\": \"⇚\",\n\t\"lmoustache;\": \"⎰\",\n\t\"longmapsto;\": \"⟼\",\n\t\"mapstodown;\": \"↧\",\n\t\"mapstoleft;\": \"↤\",\n\t\"nLeftarrow;\": \"⇍\",\n\t\"nleftarrow;\": \"↚\",\n\t\"NotElement;\": \"∉\",\n\t\"NotGreater;\": \"≯\",\n\t\"nsubseteqq;\": \"⫅̸\",\n\t\"nsupseteqq;\": \"⫆̸\",\n\t\"precapprox;\": \"⪷\",\n\t\"Proportion;\": \"∷\",\n\t\"RightArrow;\": \"→\",\n\t\"Rightarrow;\": \"⇒\",\n\t\"rightarrow;\": \"→\",\n\t\"RightFloor;\": \"⌋\",\n\t\"rmoustache;\": \"⎱\",\n\t\"sqsubseteq;\": \"⊑\",\n\t\"sqsupseteq;\": \"⊒\",\n\t\"subsetneqq;\": \"⫋\",\n\t\"succapprox;\": \"⪸\",\n\t\"supsetneqq;\": \"⫌\",\n\t\"ThickSpace;\": \"  \",\n\t\"TildeEqual;\": \"≃\",\n\t\"TildeTilde;\": \"≈\",\n\t\"UnderBrace;\": \"⏟\",\n\t\"UpArrowBar;\": \"⤒\",\n\t\"UpTeeArrow;\": \"↥\",\n\t\"upuparrows;\": \"⇈\",\n\t\"varepsilon;\": \"ϵ\",\n\t\"varnothing;\": \"∅\",\n\t\"backepsilon;\": \"϶\",\n\t\"blacksquare;\": \"▪\",\n\t\"circledcirc;\": \"⊚\",\n\t\"circleddash;\": \"⊝\",\n\t\"CircleMinus;\": \"⊖\",\n\t\"CircleTimes;\": \"⊗\",\n\t\"curlyeqprec;\": \"⋞\",\n\t\"curlyeqsucc;\": \"⋟\",\n\t\"diamondsuit;\": \"♦\",\n\t\"eqslantless;\": \"⪕\",\n\t\"Equilibrium;\": \"⇌\",\n\t\"expectation;\": \"ℰ\",\n\t\"GreaterLess;\": \"≷\",\n\t\"LeftCeiling;\": \"⌈\",\n\t\"LessGreater;\": \"≶\",\n\t\"MediumSpace;\": \" \",\n\t\"NotLessLess;\": \"≪̸\",\n\t\"NotPrecedes;\": \"⊀\",\n\t\"NotSucceeds;\": \"⊁\",\n\t\"NotSuperset;\": \"⊃⃒\",\n\t\"nRightarrow;\": \"⇏\",\n\t\"nrightarrow;\": \"↛\",\n\t\"OverBracket;\": \"⎴\",\n\t\"preccurlyeq;\": \"≼\",\n\t\"precnapprox;\": \"⪹\",\n\t\"quaternions;\": \"ℍ\",\n\t\"RightVector;\": \"⇀\",\n\t\"Rrightarrow;\": \"⇛\",\n\t\"RuleDelayed;\": \"⧴\",\n\t\"SmallCircle;\": \"∘\",\n\t\"SquareUnion;\": \"⊔\",\n\t\"straightphi;\": \"ϕ\",\n\t\"SubsetEqual;\": \"⊆\",\n\t\"succcurlyeq;\": \"≽\",\n\t\"succnapprox;\": \"⪺\",\n\t\"thickapprox;\": \"≈\",\n\t\"UpDownArrow;\": \"↕\",\n\t\"Updownarrow;\": \"⇕\",\n\t\"updownarrow;\": \"↕\",\n\t\"VerticalBar;\": \"∣\",\n\t\"blacklozenge;\": \"⧫\",\n\t\"DownArrowBar;\": \"⤓\",\n\t\"DownTeeArrow;\": \"↧\",\n\t\"ExponentialE;\": \"ⅇ\",\n\t\"exponentiale;\": \"ⅇ\",\n\t\"GreaterEqual;\": \"≥\",\n\t\"GreaterTilde;\": \"≳\",\n\t\"HilbertSpace;\": \"ℋ\",\n\t\"HumpDownHump;\": \"≎\",\n\t\"Intersection;\": \"⋂\",\n\t\"LeftArrowBar;\": \"⇤\",\n\t\"LeftTeeArrow;\": \"↤\",\n\t\"LeftTriangle;\": \"⊲\",\n\t\"LeftUpVector;\": \"↿\",\n\t\"NotCongruent;\": \"≢\",\n\t\"NotHumpEqual;\": \"≏̸\",\n\t\"NotLessEqual;\": \"≰\",\n\t\"NotLessTilde;\": \"≴\",\n\t\"Proportional;\": \"∝\",\n\t\"RightCeiling;\": \"⌉\",\n\t\"risingdotseq;\": \"≓\",\n\t\"RoundImplies;\": \"⥰\",\n\t\"ShortUpArrow;\": \"↑\",\n\t\"SquareSubset;\": \"⊏\",\n\t\"triangledown;\": \"▿\",\n\t\"triangleleft;\": \"◃\",\n\t\"UnderBracket;\": \"⎵\",\n\t\"varsubsetneq;\": \"⊊︀\",\n\t\"varsupsetneq;\": \"⊋︀\",\n\t\"VerticalLine;\": \"|\",\n\t\"ApplyFunction;\": \"⁡\",\n\t\"bigtriangleup;\": \"△\",\n\t\"blacktriangle;\": \"▴\",\n\t\"DifferentialD;\": \"ⅆ\",\n\t\"divideontimes;\": \"⋇\",\n\t\"DoubleLeftTee;\": \"⫤\",\n\t\"DoubleUpArrow;\": \"⇑\",\n\t\"fallingdotseq;\": \"≒\",\n\t\"hookleftarrow;\": \"↩\",\n\t\"leftarrowtail;\": \"↢\",\n\t\"leftharpoonup;\": \"↼\",\n\t\"LeftTeeVector;\": \"⥚\",\n\t\"LeftVectorBar;\": \"⥒\",\n\t\"LessFullEqual;\": \"≦\",\n\t\"LongLeftArrow;\": \"⟵\",\n\t\"Longleftarrow;\": \"⟸\",\n\t\"longleftarrow;\": \"⟵\",\n\t\"looparrowleft;\": \"↫\",\n\t\"measuredangle;\": \"∡\",\n\t\"NotEqualTilde;\": \"≂̸\",\n\t\"NotTildeEqual;\": \"≄\",\n\t\"NotTildeTilde;\": \"≉\",\n\t\"ntriangleleft;\": \"⋪\",\n\t\"Poincareplane;\": \"ℌ\",\n\t\"PrecedesEqual;\": \"⪯\",\n\t\"PrecedesTilde;\": \"≾\",\n\t\"RightArrowBar;\": \"⇥\",\n\t\"RightTeeArrow;\": \"↦\",\n\t\"RightTriangle;\": \"⊳\",\n\t\"RightUpVector;\": \"↾\",\n\t\"shortparallel;\": \"∥\",\n\t\"smallsetminus;\": \"∖\",\n\t\"SucceedsEqual;\": \"⪰\",\n\t\"SucceedsTilde;\": \"≿\",\n\t\"SupersetEqual;\": \"⊇\",\n\t\"triangleright;\": \"▹\",\n\t\"UpEquilibrium;\": \"⥮\",\n\t\"upharpoonleft;\": \"↿\",\n\t\"varsubsetneqq;\": \"⫋︀\",\n\t\"varsupsetneqq;\": \"⫌︀\",\n\t\"VerticalTilde;\": \"≀\",\n\t\"VeryThinSpace;\": \" \",\n\t\"curvearrowleft;\": \"↶\",\n\t\"DiacriticalDot;\": \"˙\",\n\t\"doublebarwedge;\": \"⌆\",\n\t\"DoubleRightTee;\": \"⊨\",\n\t\"downdownarrows;\": \"⇊\",\n\t\"DownLeftVector;\": \"↽\",\n\t\"GreaterGreater;\": \"⪢\",\n\t\"hookrightarrow;\": \"↪\",\n\t\"HorizontalLine;\": \"─\",\n\t\"InvisibleComma;\": \"⁣\",\n\t\"InvisibleTimes;\": \"⁢\",\n\t\"LeftDownVector;\": \"⇃\",\n\t\"leftleftarrows;\": \"⇇\",\n\t\"LeftRightArrow;\": \"↔\",\n\t\"Leftrightarrow;\": \"⇔\",\n\t\"leftrightarrow;\": \"↔\",\n\t\"leftthreetimes;\": \"⋋\",\n\t\"LessSlantEqual;\": \"⩽\",\n\t\"LongRightArrow;\": \"⟶\",\n\t\"Longrightarrow;\": \"⟹\",\n\t\"longrightarrow;\": \"⟶\",\n\t\"looparrowright;\": \"↬\",\n\t\"LowerLeftArrow;\": \"↙\",\n\t\"NestedLessLess;\": \"≪\",\n\t\"NotGreaterLess;\": \"≹\",\n\t\"NotLessGreater;\": \"≸\",\n\t\"NotSubsetEqual;\": \"⊈\",\n\t\"NotVerticalBar;\": \"∤\",\n\t\"nshortparallel;\": \"∦\",\n\t\"ntriangleright;\": \"⋫\",\n\t\"OpenCurlyQuote;\": \"‘\",\n\t\"ReverseElement;\": \"∋\",\n\t\"rightarrowtail;\": \"↣\",\n\t\"rightharpoonup;\": \"⇀\",\n\t\"RightTeeVector;\": \"⥛\",\n\t\"RightVectorBar;\": \"⥓\",\n\t\"ShortDownArrow;\": \"↓\",\n\t\"ShortLeftArrow;\": \"←\",\n\t\"SquareSuperset;\": \"⊐\",\n\t\"TildeFullEqual;\": \"≅\",\n\t\"trianglelefteq;\": \"⊴\",\n\t\"upharpoonright;\": \"↾\",\n\t\"UpperLeftArrow;\": \"↖\",\n\t\"ZeroWidthSpace;\": \"​\",\n\t\"bigtriangledown;\": \"▽\",\n\t\"circlearrowleft;\": \"↺\",\n\t\"CloseCurlyQuote;\": \"’\",\n\t\"ContourIntegral;\": \"∮\",\n\t\"curvearrowright;\": \"↷\",\n\t\"DoubleDownArrow;\": \"⇓\",\n\t\"DoubleLeftArrow;\": \"⇐\",\n\t\"downharpoonleft;\": \"⇃\",\n\t\"DownRightVector;\": \"⇁\",\n\t\"leftharpoondown;\": \"↽\",\n\t\"leftrightarrows;\": \"⇆\",\n\t\"LeftRightVector;\": \"⥎\",\n\t\"LeftTriangleBar;\": \"⧏\",\n\t\"LeftUpTeeVector;\": \"⥠\",\n\t\"LeftUpVectorBar;\": \"⥘\",\n\t\"LowerRightArrow;\": \"↘\",\n\t\"nLeftrightarrow;\": \"⇎\",\n\t\"nleftrightarrow;\": \"↮\",\n\t\"NotGreaterEqual;\": \"≱\",\n\t\"NotGreaterTilde;\": \"≵\",\n\t\"NotHumpDownHump;\": \"≎̸\",\n\t\"NotLeftTriangle;\": \"⋪\",\n\t\"NotSquareSubset;\": \"⊏̸\",\n\t\"ntrianglelefteq;\": \"⋬\",\n\t\"OverParenthesis;\": \"⏜\",\n\t\"RightDownVector;\": \"⇂\",\n\t\"rightleftarrows;\": \"⇄\",\n\t\"rightsquigarrow;\": \"↝\",\n\t\"rightthreetimes;\": \"⋌\",\n\t\"ShortRightArrow;\": \"→\",\n\t\"straightepsilon;\": \"ϵ\",\n\t\"trianglerighteq;\": \"⊵\",\n\t\"UpperRightArrow;\": \"↗\",\n\t\"vartriangleleft;\": \"⊲\",\n\t\"circlearrowright;\": \"↻\",\n\t\"DiacriticalAcute;\": \"´\",\n\t\"DiacriticalGrave;\": \"`\",\n\t\"DiacriticalTilde;\": \"˜\",\n\t\"DoubleRightArrow;\": \"⇒\",\n\t\"DownArrowUpArrow;\": \"⇵\",\n\t\"downharpoonright;\": \"⇂\",\n\t\"EmptySmallSquare;\": \"◻\",\n\t\"GreaterEqualLess;\": \"⋛\",\n\t\"GreaterFullEqual;\": \"≧\",\n\t\"LeftAngleBracket;\": \"⟨\",\n\t\"LeftUpDownVector;\": \"⥑\",\n\t\"LessEqualGreater;\": \"⋚\",\n\t\"NonBreakingSpace;\": \" \",\n\t\"NotPrecedesEqual;\": \"⪯̸\",\n\t\"NotRightTriangle;\": \"⋫\",\n\t\"NotSucceedsEqual;\": \"⪰̸\",\n\t\"NotSucceedsTilde;\": \"≿̸\",\n\t\"NotSupersetEqual;\": \"⊉\",\n\t\"ntrianglerighteq;\": \"⋭\",\n\t\"rightharpoondown;\": \"⇁\",\n\t\"rightrightarrows;\": \"⇉\",\n\t\"RightTriangleBar;\": \"⧐\",\n\t\"RightUpTeeVector;\": \"⥜\",\n\t\"RightUpVectorBar;\": \"⥔\",\n\t\"twoheadleftarrow;\": \"↞\",\n\t\"UnderParenthesis;\": \"⏝\",\n\t\"UpArrowDownArrow;\": \"⇅\",\n\t\"vartriangleright;\": \"⊳\",\n\t\"blacktriangledown;\": \"▾\",\n\t\"blacktriangleleft;\": \"◂\",\n\t\"DoubleUpDownArrow;\": \"⇕\",\n\t\"DoubleVerticalBar;\": \"∥\",\n\t\"DownLeftTeeVector;\": \"⥞\",\n\t\"DownLeftVectorBar;\": \"⥖\",\n\t\"FilledSmallSquare;\": \"◼\",\n\t\"GreaterSlantEqual;\": \"⩾\",\n\t\"LeftDoubleBracket;\": \"⟦\",\n\t\"LeftDownTeeVector;\": \"⥡\",\n\t\"LeftDownVectorBar;\": \"⥙\",\n\t\"leftrightharpoons;\": \"⇋\",\n\t\"LeftTriangleEqual;\": \"⊴\",\n\t\"NegativeThinSpace;\": \"​\",\n\t\"NotGreaterGreater;\": \"≫̸\",\n\t\"NotLessSlantEqual;\": \"⩽̸\",\n\t\"NotNestedLessLess;\": \"⪡̸\",\n\t\"NotReverseElement;\": \"∌\",\n\t\"NotSquareSuperset;\": \"⊐̸\",\n\t\"NotTildeFullEqual;\": \"≇\",\n\t\"RightAngleBracket;\": \"⟩\",\n\t\"rightleftharpoons;\": \"⇌\",\n\t\"RightUpDownVector;\": \"⥏\",\n\t\"SquareSubsetEqual;\": \"⊑\",\n\t\"twoheadrightarrow;\": \"↠\",\n\t\"VerticalSeparator;\": \"❘\",\n\t\"blacktriangleright;\": \"▸\",\n\t\"DownRightTeeVector;\": \"⥟\",\n\t\"DownRightVectorBar;\": \"⥗\",\n\t\"LongLeftRightArrow;\": \"⟷\",\n\t\"Longleftrightarrow;\": \"⟺\",\n\t\"longleftrightarrow;\": \"⟷\",\n\t\"NegativeThickSpace;\": \"​\",\n\t\"NotLeftTriangleBar;\": \"⧏̸\",\n\t\"PrecedesSlantEqual;\": \"≼\",\n\t\"ReverseEquilibrium;\": \"⇋\",\n\t\"RightDoubleBracket;\": \"⟧\",\n\t\"RightDownTeeVector;\": \"⥝\",\n\t\"RightDownVectorBar;\": \"⥕\",\n\t\"RightTriangleEqual;\": \"⊵\",\n\t\"SquareIntersection;\": \"⊓\",\n\t\"SucceedsSlantEqual;\": \"≽\",\n\t\"DoubleLongLeftArrow;\": \"⟸\",\n\t\"DownLeftRightVector;\": \"⥐\",\n\t\"LeftArrowRightArrow;\": \"⇆\",\n\t\"leftrightsquigarrow;\": \"↭\",\n\t\"NegativeMediumSpace;\": \"​\",\n\t\"NotGreaterFullEqual;\": \"≧̸\",\n\t\"NotRightTriangleBar;\": \"⧐̸\",\n\t\"RightArrowLeftArrow;\": \"⇄\",\n\t\"SquareSupersetEqual;\": \"⊒\",\n\t\"CapitalDifferentialD;\": \"ⅅ\",\n\t\"DoubleLeftRightArrow;\": \"⇔\",\n\t\"DoubleLongRightArrow;\": \"⟹\",\n\t\"EmptyVerySmallSquare;\": \"▫\",\n\t\"NestedGreaterGreater;\": \"≫\",\n\t\"NotDoubleVerticalBar;\": \"∦\",\n\t\"NotGreaterSlantEqual;\": \"⩾̸\",\n\t\"NotLeftTriangleEqual;\": \"⋬\",\n\t\"NotSquareSubsetEqual;\": \"⋢\",\n\t\"OpenCurlyDoubleQuote;\": \"“\",\n\t\"ReverseUpEquilibrium;\": \"⥯\",\n\t\"CloseCurlyDoubleQuote;\": \"”\",\n\t\"DoubleContourIntegral;\": \"∯\",\n\t\"FilledVerySmallSquare;\": \"▪\",\n\t\"NegativeVeryThinSpace;\": \"​\",\n\t\"NotPrecedesSlantEqual;\": \"⋠\",\n\t\"NotRightTriangleEqual;\": \"⋭\",\n\t\"NotSucceedsSlantEqual;\": \"⋡\",\n\t\"DiacriticalDoubleAcute;\": \"˝\",\n\t\"NotSquareSupersetEqual;\": \"⋣\",\n\t\"NotNestedGreaterGreater;\": \"⪢̸\",\n\t\"ClockwiseContourIntegral;\": \"∲\",\n\t\"DoubleLongLeftRightArrow;\": \"⟺\",\n\t\"CounterClockwiseContourIntegral;\": \"∳\"\n};\n\n// lazy compute this to make this file tree-shakable for browser\nlet maxCRNameLength;\nconst decodeHtml = (rawText, asAttr) => {\n    let offset = 0;\n    const end = rawText.length;\n    let decodedText = '';\n    function advance(length) {\n        offset += length;\n        rawText = rawText.slice(length);\n    }\n    while (offset < end) {\n        const head = /&(?:#x?)?/i.exec(rawText);\n        if (!head || offset + head.index >= end) {\n            const remaining = end - offset;\n            decodedText += rawText.slice(0, remaining);\n            advance(remaining);\n            break;\n        }\n        // Advance to the \"&\".\n        decodedText += rawText.slice(0, head.index);\n        advance(head.index);\n        if (head[0] === '&') {\n            // Named character reference.\n            let name = '';\n            let value = undefined;\n            if (/[0-9a-z]/i.test(rawText[1])) {\n                if (!maxCRNameLength) {\n                    maxCRNameLength = Object.keys(namedCharacterReferences).reduce((max, name) => Math.max(max, name.length), 0);\n                }\n                for (let length = maxCRNameLength; !value && length > 0; --length) {\n                    name = rawText.slice(1, 1 + length);\n                    value = namedCharacterReferences[name];\n                }\n                if (value) {\n                    const semi = name.endsWith(';');\n                    if (asAttr &&\n                        !semi &&\n                        /[=a-z0-9]/i.test(rawText[name.length + 1] || '')) {\n                        decodedText += '&' + name;\n                        advance(1 + name.length);\n                    }\n                    else {\n                        decodedText += value;\n                        advance(1 + name.length);\n                    }\n                }\n                else {\n                    decodedText += '&' + name;\n                    advance(1 + name.length);\n                }\n            }\n            else {\n                decodedText += '&';\n                advance(1);\n            }\n        }\n        else {\n            // Numeric character reference.\n            const hex = head[0] === '&#x';\n            const pattern = hex ? /^&#x([0-9a-f]+);?/i : /^&#([0-9]+);?/;\n            const body = pattern.exec(rawText);\n            if (!body) {\n                decodedText += head[0];\n                advance(head[0].length);\n            }\n            else {\n                // https://html.spec.whatwg.org/multipage/parsing.html#numeric-character-reference-end-state\n                let cp = Number.parseInt(body[1], hex ? 16 : 10);\n                if (cp === 0) {\n                    cp = 0xfffd;\n                }\n                else if (cp > 0x10ffff) {\n                    cp = 0xfffd;\n                }\n                else if (cp >= 0xd800 && cp <= 0xdfff) {\n                    cp = 0xfffd;\n                }\n                else if ((cp >= 0xfdd0 && cp <= 0xfdef) || (cp & 0xfffe) === 0xfffe) ;\n                else if ((cp >= 0x01 && cp <= 0x08) ||\n                    cp === 0x0b ||\n                    (cp >= 0x0d && cp <= 0x1f) ||\n                    (cp >= 0x7f && cp <= 0x9f)) {\n                    cp = CCR_REPLACEMENTS[cp] || cp;\n                }\n                decodedText += String.fromCodePoint(cp);\n                advance(body[0].length);\n            }\n        }\n    }\n    return decodedText;\n};\n// https://html.spec.whatwg.org/multipage/parsing.html#numeric-character-reference-end-state\nconst CCR_REPLACEMENTS = {\n    0x80: 0x20ac,\n    0x82: 0x201a,\n    0x83: 0x0192,\n    0x84: 0x201e,\n    0x85: 0x2026,\n    0x86: 0x2020,\n    0x87: 0x2021,\n    0x88: 0x02c6,\n    0x89: 0x2030,\n    0x8a: 0x0160,\n    0x8b: 0x2039,\n    0x8c: 0x0152,\n    0x8e: 0x017d,\n    0x91: 0x2018,\n    0x92: 0x2019,\n    0x93: 0x201c,\n    0x94: 0x201d,\n    0x95: 0x2022,\n    0x96: 0x2013,\n    0x97: 0x2014,\n    0x98: 0x02dc,\n    0x99: 0x2122,\n    0x9a: 0x0161,\n    0x9b: 0x203a,\n    0x9c: 0x0153,\n    0x9e: 0x017e,\n    0x9f: 0x0178\n};\n\nconst isRawTextContainer = /*#__PURE__*/ shared.makeMap('style,iframe,script,noscript', true);\nconst parserOptions = {\n    isVoidTag: shared.isVoidTag,\n    isNativeTag: tag => shared.isHTMLTag(tag) || shared.isSVGTag(tag),\n    isPreTag: tag => tag === 'pre',\n    decodeEntities: decodeHtml,\n    isBuiltInComponent: (tag) => {\n        if (compilerCore.isBuiltInType(tag, `Transition`)) {\n            return TRANSITION;\n        }\n        else if (compilerCore.isBuiltInType(tag, `TransitionGroup`)) {\n            return TRANSITION_GROUP;\n        }\n    },\n    // https://html.spec.whatwg.org/multipage/parsing.html#tree-construction-dispatcher\n    getNamespace(tag, parent) {\n        let ns = parent ? parent.ns : 0 /* DOMNamespaces.HTML */;\n        if (parent && ns === 2 /* DOMNamespaces.MATH_ML */) {\n            if (parent.tag === 'annotation-xml') {\n                if (tag === 'svg') {\n                    return 1 /* DOMNamespaces.SVG */;\n                }\n                if (parent.props.some(a => a.type === 6 /* NodeTypes.ATTRIBUTE */ &&\n                    a.name === 'encoding' &&\n                    a.value != null &&\n                    (a.value.content === 'text/html' ||\n                        a.value.content === 'application/xhtml+xml'))) {\n                    ns = 0 /* DOMNamespaces.HTML */;\n                }\n            }\n            else if (/^m(?:[ions]|text)$/.test(parent.tag) &&\n                tag !== 'mglyph' &&\n                tag !== 'malignmark') {\n                ns = 0 /* DOMNamespaces.HTML */;\n            }\n        }\n        else if (parent && ns === 1 /* DOMNamespaces.SVG */) {\n            if (parent.tag === 'foreignObject' ||\n                parent.tag === 'desc' ||\n                parent.tag === 'title') {\n                ns = 0 /* DOMNamespaces.HTML */;\n            }\n        }\n        if (ns === 0 /* DOMNamespaces.HTML */) {\n            if (tag === 'svg') {\n                return 1 /* DOMNamespaces.SVG */;\n            }\n            if (tag === 'math') {\n                return 2 /* DOMNamespaces.MATH_ML */;\n            }\n        }\n        return ns;\n    },\n    // https://html.spec.whatwg.org/multipage/parsing.html#parsing-html-fragments\n    getTextMode({ tag, ns }) {\n        if (ns === 0 /* DOMNamespaces.HTML */) {\n            if (tag === 'textarea' || tag === 'title') {\n                return 1 /* TextModes.RCDATA */;\n            }\n            if (isRawTextContainer(tag)) {\n                return 2 /* TextModes.RAWTEXT */;\n            }\n        }\n        return 0 /* TextModes.DATA */;\n    }\n};\n\n// Parse inline CSS strings for static style attributes into an object.\n// This is a NodeTransform since it works on the static `style` attribute and\n// converts it into a dynamic equivalent:\n// style=\"color: red\" -> :style='{ \"color\": \"red\" }'\n// It is then processed by `transformElement` and included in the generated\n// props.\nconst transformStyle = node => {\n    if (node.type === 1 /* NodeTypes.ELEMENT */) {\n        node.props.forEach((p, i) => {\n            if (p.type === 6 /* NodeTypes.ATTRIBUTE */ && p.name === 'style' && p.value) {\n                // replace p with an expression node\n                node.props[i] = {\n                    type: 7 /* NodeTypes.DIRECTIVE */,\n                    name: `bind`,\n                    arg: compilerCore.createSimpleExpression(`style`, true, p.loc),\n                    exp: parseInlineCSS(p.value.content, p.loc),\n                    modifiers: [],\n                    loc: p.loc\n                };\n            }\n        });\n    }\n};\nconst parseInlineCSS = (cssText, loc) => {\n    const normalized = shared.parseStringStyle(cssText);\n    return compilerCore.createSimpleExpression(JSON.stringify(normalized), false, loc, 3 /* ConstantTypes.CAN_STRINGIFY */);\n};\n\nfunction createDOMCompilerError(code, loc) {\n    return compilerCore.createCompilerError(code, loc, DOMErrorMessages );\n}\nconst DOMErrorMessages = {\n    [51 /* DOMErrorCodes.X_V_HTML_NO_EXPRESSION */]: `v-html is missing expression.`,\n    [52 /* DOMErrorCodes.X_V_HTML_WITH_CHILDREN */]: `v-html will override element children.`,\n    [53 /* DOMErrorCodes.X_V_TEXT_NO_EXPRESSION */]: `v-text is missing expression.`,\n    [54 /* DOMErrorCodes.X_V_TEXT_WITH_CHILDREN */]: `v-text will override element children.`,\n    [55 /* DOMErrorCodes.X_V_MODEL_ON_INVALID_ELEMENT */]: `v-model can only be used on <input>, <textarea> and <select> elements.`,\n    [56 /* DOMErrorCodes.X_V_MODEL_ARG_ON_ELEMENT */]: `v-model argument is not supported on plain elements.`,\n    [57 /* DOMErrorCodes.X_V_MODEL_ON_FILE_INPUT_ELEMENT */]: `v-model cannot be used on file inputs since they are read-only. Use a v-on:change listener instead.`,\n    [58 /* DOMErrorCodes.X_V_MODEL_UNNECESSARY_VALUE */]: `Unnecessary value binding used alongside v-model. It will interfere with v-model's behavior.`,\n    [59 /* DOMErrorCodes.X_V_SHOW_NO_EXPRESSION */]: `v-show is missing expression.`,\n    [60 /* DOMErrorCodes.X_TRANSITION_INVALID_CHILDREN */]: `<Transition> expects exactly one child element or component.`,\n    [61 /* DOMErrorCodes.X_IGNORED_SIDE_EFFECT_TAG */]: `Tags with side effect (<script> and <style>) are ignored in client component templates.`\n};\n\nconst transformVHtml = (dir, node, context) => {\n    const { exp, loc } = dir;\n    if (!exp) {\n        context.onError(createDOMCompilerError(51 /* DOMErrorCodes.X_V_HTML_NO_EXPRESSION */, loc));\n    }\n    if (node.children.length) {\n        context.onError(createDOMCompilerError(52 /* DOMErrorCodes.X_V_HTML_WITH_CHILDREN */, loc));\n        node.children.length = 0;\n    }\n    return {\n        props: [\n            compilerCore.createObjectProperty(compilerCore.createSimpleExpression(`innerHTML`, true, loc), exp || compilerCore.createSimpleExpression('', true))\n        ]\n    };\n};\n\nconst transformVText = (dir, node, context) => {\n    const { exp, loc } = dir;\n    if (!exp) {\n        context.onError(createDOMCompilerError(53 /* DOMErrorCodes.X_V_TEXT_NO_EXPRESSION */, loc));\n    }\n    if (node.children.length) {\n        context.onError(createDOMCompilerError(54 /* DOMErrorCodes.X_V_TEXT_WITH_CHILDREN */, loc));\n        node.children.length = 0;\n    }\n    return {\n        props: [\n            compilerCore.createObjectProperty(compilerCore.createSimpleExpression(`textContent`, true), exp\n                ? compilerCore.getConstantType(exp, context) > 0\n                    ? exp\n                    : compilerCore.createCallExpression(context.helperString(compilerCore.TO_DISPLAY_STRING), [exp], loc)\n                : compilerCore.createSimpleExpression('', true))\n        ]\n    };\n};\n\nconst transformModel = (dir, node, context) => {\n    const baseResult = compilerCore.transformModel(dir, node, context);\n    // base transform has errors OR component v-model (only need props)\n    if (!baseResult.props.length || node.tagType === 1 /* ElementTypes.COMPONENT */) {\n        return baseResult;\n    }\n    if (dir.arg) {\n        context.onError(createDOMCompilerError(56 /* DOMErrorCodes.X_V_MODEL_ARG_ON_ELEMENT */, dir.arg.loc));\n    }\n    const { tag } = node;\n    const isCustomElement = context.isCustomElement(tag);\n    if (tag === 'input' ||\n        tag === 'textarea' ||\n        tag === 'select' ||\n        isCustomElement) {\n        let directiveToUse = V_MODEL_TEXT;\n        let isInvalidType = false;\n        if (tag === 'input' || isCustomElement) {\n            const type = compilerCore.findProp(node, `type`);\n            if (type) {\n                if (type.type === 7 /* NodeTypes.DIRECTIVE */) {\n                    // :type=\"foo\"\n                    directiveToUse = V_MODEL_DYNAMIC;\n                }\n                else if (type.value) {\n                    switch (type.value.content) {\n                        case 'radio':\n                            directiveToUse = V_MODEL_RADIO;\n                            break;\n                        case 'checkbox':\n                            directiveToUse = V_MODEL_CHECKBOX;\n                            break;\n                        case 'file':\n                            isInvalidType = true;\n                            context.onError(createDOMCompilerError(57 /* DOMErrorCodes.X_V_MODEL_ON_FILE_INPUT_ELEMENT */, dir.loc));\n                            break;\n                    }\n                }\n            }\n            else if (compilerCore.hasDynamicKeyVBind(node)) {\n                // element has bindings with dynamic keys, which can possibly contain\n                // \"type\".\n                directiveToUse = V_MODEL_DYNAMIC;\n            }\n            else ;\n        }\n        else if (tag === 'select') {\n            directiveToUse = V_MODEL_SELECT;\n        }\n        else ;\n        // inject runtime directive\n        // by returning the helper symbol via needRuntime\n        // the import will replaced a resolveDirective call.\n        if (!isInvalidType) {\n            baseResult.needRuntime = context.helper(directiveToUse);\n        }\n    }\n    else {\n        context.onError(createDOMCompilerError(55 /* DOMErrorCodes.X_V_MODEL_ON_INVALID_ELEMENT */, dir.loc));\n    }\n    // native vmodel doesn't need the `modelValue` props since they are also\n    // passed to the runtime as `binding.value`. removing it reduces code size.\n    baseResult.props = baseResult.props.filter(p => !(p.key.type === 4 /* NodeTypes.SIMPLE_EXPRESSION */ &&\n        p.key.content === 'modelValue'));\n    return baseResult;\n};\n\nconst isEventOptionModifier = /*#__PURE__*/ shared.makeMap(`passive,once,capture`);\nconst isNonKeyModifier = /*#__PURE__*/ shared.makeMap(\n// event propagation management\n`stop,prevent,self,` +\n    // system modifiers + exact\n    `ctrl,shift,alt,meta,exact,` +\n    // mouse\n    `middle`);\n// left & right could be mouse or key modifiers based on event type\nconst maybeKeyModifier = /*#__PURE__*/ shared.makeMap('left,right');\nconst isKeyboardEvent = /*#__PURE__*/ shared.makeMap(`onkeyup,onkeydown,onkeypress`, true);\nconst resolveModifiers = (key, modifiers, context, loc) => {\n    const keyModifiers = [];\n    const nonKeyModifiers = [];\n    const eventOptionModifiers = [];\n    for (let i = 0; i < modifiers.length; i++) {\n        const modifier = modifiers[i];\n        if (modifier === 'native' &&\n            compilerCore.checkCompatEnabled(\"COMPILER_V_ON_NATIVE\" /* CompilerDeprecationTypes.COMPILER_V_ON_NATIVE */, context, loc)) {\n            eventOptionModifiers.push(modifier);\n        }\n        else if (isEventOptionModifier(modifier)) {\n            // eventOptionModifiers: modifiers for addEventListener() options,\n            // e.g. .passive & .capture\n            eventOptionModifiers.push(modifier);\n        }\n        else {\n            // runtimeModifiers: modifiers that needs runtime guards\n            if (maybeKeyModifier(modifier)) {\n                if (compilerCore.isStaticExp(key)) {\n                    if (isKeyboardEvent(key.content)) {\n                        keyModifiers.push(modifier);\n                    }\n                    else {\n                        nonKeyModifiers.push(modifier);\n                    }\n                }\n                else {\n                    keyModifiers.push(modifier);\n                    nonKeyModifiers.push(modifier);\n                }\n            }\n            else {\n                if (isNonKeyModifier(modifier)) {\n                    nonKeyModifiers.push(modifier);\n                }\n                else {\n                    keyModifiers.push(modifier);\n                }\n            }\n        }\n    }\n    return {\n        keyModifiers,\n        nonKeyModifiers,\n        eventOptionModifiers\n    };\n};\nconst transformClick = (key, event) => {\n    const isStaticClick = compilerCore.isStaticExp(key) && key.content.toLowerCase() === 'onclick';\n    return isStaticClick\n        ? compilerCore.createSimpleExpression(event, true)\n        : key.type !== 4 /* NodeTypes.SIMPLE_EXPRESSION */\n            ? compilerCore.createCompoundExpression([\n                `(`,\n                key,\n                `) === \"onClick\" ? \"${event}\" : (`,\n                key,\n                `)`\n            ])\n            : key;\n};\nconst transformOn = (dir, node, context) => {\n    return compilerCore.transformOn(dir, node, context, baseResult => {\n        const { modifiers } = dir;\n        if (!modifiers.length)\n            return baseResult;\n        let { key, value: handlerExp } = baseResult.props[0];\n        const { keyModifiers, nonKeyModifiers, eventOptionModifiers } = resolveModifiers(key, modifiers, context, dir.loc);\n        // normalize click.right and click.middle since they don't actually fire\n        if (nonKeyModifiers.includes('right')) {\n            key = transformClick(key, `onContextmenu`);\n        }\n        if (nonKeyModifiers.includes('middle')) {\n            key = transformClick(key, `onMouseup`);\n        }\n        if (nonKeyModifiers.length) {\n            handlerExp = compilerCore.createCallExpression(context.helper(V_ON_WITH_MODIFIERS), [\n                handlerExp,\n                JSON.stringify(nonKeyModifiers)\n            ]);\n        }\n        if (keyModifiers.length &&\n            // if event name is dynamic, always wrap with keys guard\n            (!compilerCore.isStaticExp(key) || isKeyboardEvent(key.content))) {\n            handlerExp = compilerCore.createCallExpression(context.helper(V_ON_WITH_KEYS), [\n                handlerExp,\n                JSON.stringify(keyModifiers)\n            ]);\n        }\n        if (eventOptionModifiers.length) {\n            const modifierPostfix = eventOptionModifiers.map(shared.capitalize).join('');\n            key = compilerCore.isStaticExp(key)\n                ? compilerCore.createSimpleExpression(`${key.content}${modifierPostfix}`, true)\n                : compilerCore.createCompoundExpression([`(`, key, `) + \"${modifierPostfix}\"`]);\n        }\n        return {\n            props: [compilerCore.createObjectProperty(key, handlerExp)]\n        };\n    });\n};\n\nconst transformShow = (dir, node, context) => {\n    const { exp, loc } = dir;\n    if (!exp) {\n        context.onError(createDOMCompilerError(59 /* DOMErrorCodes.X_V_SHOW_NO_EXPRESSION */, loc));\n    }\n    return {\n        props: [],\n        needRuntime: context.helper(V_SHOW)\n    };\n};\n\n/**\n * This module is Node-only.\n */\n/**\n * Regex for replacing placeholders for embedded constant variables\n * (e.g. import URL string constants generated by compiler-sfc)\n */\nconst expReplaceRE = /__VUE_EXP_START__(.*?)__VUE_EXP_END__/g;\n/**\n * Turn eligible hoisted static trees into stringified static nodes, e.g.\n *\n * ```js\n * const _hoisted_1 = createStaticVNode(`<div class=\"foo\">bar</div>`)\n * ```\n *\n * A single static vnode can contain stringified content for **multiple**\n * consecutive nodes (element and plain text), called a \"chunk\".\n * `@vue/runtime-dom` will create the content via innerHTML in a hidden\n * container element and insert all the nodes in place. The call must also\n * provide the number of nodes contained in the chunk so that during hydration\n * we can know how many nodes the static vnode should adopt.\n *\n * The optimization scans a children list that contains hoisted nodes, and\n * tries to find the largest chunk of consecutive hoisted nodes before running\n * into a non-hoisted node or the end of the list. A chunk is then converted\n * into a single static vnode and replaces the hoisted expression of the first\n * node in the chunk. Other nodes in the chunk are considered \"merged\" and\n * therefore removed from both the hoist list and the children array.\n *\n * This optimization is only performed in Node.js.\n */\nconst stringifyStatic = (children, context, parent) => {\n    // bail stringification for slot content\n    if (context.scopes.vSlot > 0) {\n        return;\n    }\n    let nc = 0; // current node count\n    let ec = 0; // current element with binding count\n    const currentChunk = [];\n    const stringifyCurrentChunk = (currentIndex) => {\n        if (nc >= 20 /* StringifyThresholds.NODE_COUNT */ ||\n            ec >= 5 /* StringifyThresholds.ELEMENT_WITH_BINDING_COUNT */) {\n            // combine all currently eligible nodes into a single static vnode call\n            const staticCall = compilerCore.createCallExpression(context.helper(compilerCore.CREATE_STATIC), [\n                JSON.stringify(currentChunk.map(node => stringifyNode(node, context)).join('')).replace(expReplaceRE, `\" + $1 + \"`),\n                // the 2nd argument indicates the number of DOM nodes this static vnode\n                // will insert / hydrate\n                String(currentChunk.length)\n            ]);\n            // replace the first node's hoisted expression with the static vnode call\n            replaceHoist(currentChunk[0], staticCall, context);\n            if (currentChunk.length > 1) {\n                for (let i = 1; i < currentChunk.length; i++) {\n                    // for the merged nodes, set their hoisted expression to null\n                    replaceHoist(currentChunk[i], null, context);\n                }\n                // also remove merged nodes from children\n                const deleteCount = currentChunk.length - 1;\n                children.splice(currentIndex - currentChunk.length + 1, deleteCount);\n                return deleteCount;\n            }\n        }\n        return 0;\n    };\n    let i = 0;\n    for (; i < children.length; i++) {\n        const child = children[i];\n        const hoisted = getHoistedNode(child);\n        if (hoisted) {\n            // presence of hoisted means child must be a stringifiable node\n            const node = child;\n            const result = analyzeNode(node);\n            if (result) {\n                // node is stringifiable, record state\n                nc += result[0];\n                ec += result[1];\n                currentChunk.push(node);\n                continue;\n            }\n        }\n        // we only reach here if we ran into a node that is not stringifiable\n        // check if currently analyzed nodes meet criteria for stringification.\n        // adjust iteration index\n        i -= stringifyCurrentChunk(i);\n        // reset state\n        nc = 0;\n        ec = 0;\n        currentChunk.length = 0;\n    }\n    // in case the last node was also stringifiable\n    stringifyCurrentChunk(i);\n};\nconst getHoistedNode = (node) => ((node.type === 1 /* NodeTypes.ELEMENT */ && node.tagType === 0 /* ElementTypes.ELEMENT */) ||\n    node.type == 12 /* NodeTypes.TEXT_CALL */) &&\n    node.codegenNode &&\n    node.codegenNode.type === 4 /* NodeTypes.SIMPLE_EXPRESSION */ &&\n    node.codegenNode.hoisted;\nconst dataAriaRE = /^(data|aria)-/;\nconst isStringifiableAttr = (name, ns) => {\n    return ((ns === 0 /* DOMNamespaces.HTML */\n        ? shared.isKnownHtmlAttr(name)\n        : ns === 1 /* DOMNamespaces.SVG */\n            ? shared.isKnownSvgAttr(name)\n            : false) || dataAriaRE.test(name));\n};\nconst replaceHoist = (node, replacement, context) => {\n    const hoistToReplace = node.codegenNode.hoisted;\n    context.hoists[context.hoists.indexOf(hoistToReplace)] = replacement;\n};\nconst isNonStringifiable = /*#__PURE__*/ shared.makeMap(`caption,thead,tr,th,tbody,td,tfoot,colgroup,col`);\n/**\n * for a hoisted node, analyze it and return:\n * - false: bailed (contains non-stringifiable props or runtime constant)\n * - [nc, ec] where\n *   - nc is the number of nodes inside\n *   - ec is the number of element with bindings inside\n */\nfunction analyzeNode(node) {\n    if (node.type === 1 /* NodeTypes.ELEMENT */ && isNonStringifiable(node.tag)) {\n        return false;\n    }\n    if (node.type === 12 /* NodeTypes.TEXT_CALL */) {\n        return [1, 0];\n    }\n    let nc = 1; // node count\n    let ec = node.props.length > 0 ? 1 : 0; // element w/ binding count\n    let bailed = false;\n    const bail = () => {\n        bailed = true;\n        return false;\n    };\n    // TODO: check for cases where using innerHTML will result in different\n    // output compared to imperative node insertions.\n    // probably only need to check for most common case\n    // i.e. non-phrasing-content tags inside `<p>`\n    function walk(node) {\n        for (let i = 0; i < node.props.length; i++) {\n            const p = node.props[i];\n            // bail on non-attr bindings\n            if (p.type === 6 /* NodeTypes.ATTRIBUTE */ &&\n                !isStringifiableAttr(p.name, node.ns)) {\n                return bail();\n            }\n            if (p.type === 7 /* NodeTypes.DIRECTIVE */ && p.name === 'bind') {\n                // bail on non-attr bindings\n                if (p.arg &&\n                    (p.arg.type === 8 /* NodeTypes.COMPOUND_EXPRESSION */ ||\n                        (p.arg.isStatic && !isStringifiableAttr(p.arg.content, node.ns)))) {\n                    return bail();\n                }\n                if (p.exp &&\n                    (p.exp.type === 8 /* NodeTypes.COMPOUND_EXPRESSION */ ||\n                        p.exp.constType < 3 /* ConstantTypes.CAN_STRINGIFY */)) {\n                    return bail();\n                }\n            }\n        }\n        for (let i = 0; i < node.children.length; i++) {\n            nc++;\n            const child = node.children[i];\n            if (child.type === 1 /* NodeTypes.ELEMENT */) {\n                if (child.props.length > 0) {\n                    ec++;\n                }\n                walk(child);\n                if (bailed) {\n                    return false;\n                }\n            }\n        }\n        return true;\n    }\n    return walk(node) ? [nc, ec] : false;\n}\nfunction stringifyNode(node, context) {\n    if (shared.isString(node)) {\n        return node;\n    }\n    if (shared.isSymbol(node)) {\n        return ``;\n    }\n    switch (node.type) {\n        case 1 /* NodeTypes.ELEMENT */:\n            return stringifyElement(node, context);\n        case 2 /* NodeTypes.TEXT */:\n            return shared.escapeHtml(node.content);\n        case 3 /* NodeTypes.COMMENT */:\n            return `<!--${shared.escapeHtml(node.content)}-->`;\n        case 5 /* NodeTypes.INTERPOLATION */:\n            return shared.escapeHtml(shared.toDisplayString(evaluateConstant(node.content)));\n        case 8 /* NodeTypes.COMPOUND_EXPRESSION */:\n            return shared.escapeHtml(evaluateConstant(node));\n        case 12 /* NodeTypes.TEXT_CALL */:\n            return stringifyNode(node.content, context);\n        default:\n            // static trees will not contain if/for nodes\n            return '';\n    }\n}\nfunction stringifyElement(node, context) {\n    let res = `<${node.tag}`;\n    let innerHTML = '';\n    for (let i = 0; i < node.props.length; i++) {\n        const p = node.props[i];\n        if (p.type === 6 /* NodeTypes.ATTRIBUTE */) {\n            res += ` ${p.name}`;\n            if (p.value) {\n                res += `=\"${shared.escapeHtml(p.value.content)}\"`;\n            }\n        }\n        else if (p.type === 7 /* NodeTypes.DIRECTIVE */) {\n            if (p.name === 'bind') {\n                const exp = p.exp;\n                if (exp.content[0] === '_') {\n                    // internally generated string constant references\n                    // e.g. imported URL strings via compiler-sfc transformAssetUrl plugin\n                    res += ` ${p.arg.content}=\"__VUE_EXP_START__${exp.content}__VUE_EXP_END__\"`;\n                    continue;\n                }\n                // #6568\n                if (shared.isBooleanAttr(p.arg.content) &&\n                    exp.content === 'false') {\n                    continue;\n                }\n                // constant v-bind, e.g. :foo=\"1\"\n                let evaluated = evaluateConstant(exp);\n                if (evaluated != null) {\n                    const arg = p.arg && p.arg.content;\n                    if (arg === 'class') {\n                        evaluated = shared.normalizeClass(evaluated);\n                    }\n                    else if (arg === 'style') {\n                        evaluated = shared.stringifyStyle(shared.normalizeStyle(evaluated));\n                    }\n                    res += ` ${p.arg.content}=\"${shared.escapeHtml(evaluated)}\"`;\n                }\n            }\n            else if (p.name === 'html') {\n                // #5439 v-html with constant value\n                // not sure why would anyone do this but it can happen\n                innerHTML = evaluateConstant(p.exp);\n            }\n            else if (p.name === 'text') {\n                innerHTML = shared.escapeHtml(shared.toDisplayString(evaluateConstant(p.exp)));\n            }\n        }\n    }\n    if (context.scopeId) {\n        res += ` ${context.scopeId}`;\n    }\n    res += `>`;\n    if (innerHTML) {\n        res += innerHTML;\n    }\n    else {\n        for (let i = 0; i < node.children.length; i++) {\n            res += stringifyNode(node.children[i], context);\n        }\n    }\n    if (!shared.isVoidTag(node.tag)) {\n        res += `</${node.tag}>`;\n    }\n    return res;\n}\n// __UNSAFE__\n// Reason: eval.\n// It's technically safe to eval because only constant expressions are possible\n// here, e.g. `{{ 1 }}` or `{{ 'foo' }}`\n// in addition, constant exps bail on presence of parens so you can't even\n// run JSFuck in here. But we mark it unsafe for security review purposes.\n// (see compiler-core/src/transforms/transformExpression)\nfunction evaluateConstant(exp) {\n    if (exp.type === 4 /* NodeTypes.SIMPLE_EXPRESSION */) {\n        return new Function(`return ${exp.content}`)();\n    }\n    else {\n        // compound\n        let res = ``;\n        exp.children.forEach(c => {\n            if (shared.isString(c) || shared.isSymbol(c)) {\n                return;\n            }\n            if (c.type === 2 /* NodeTypes.TEXT */) {\n                res += c.content;\n            }\n            else if (c.type === 5 /* NodeTypes.INTERPOLATION */) {\n                res += shared.toDisplayString(evaluateConstant(c.content));\n            }\n            else {\n                res += evaluateConstant(c);\n            }\n        });\n        return res;\n    }\n}\n\nconst ignoreSideEffectTags = (node, context) => {\n    if (node.type === 1 /* NodeTypes.ELEMENT */ &&\n        node.tagType === 0 /* ElementTypes.ELEMENT */ &&\n        (node.tag === 'script' || node.tag === 'style')) {\n        context.onError(createDOMCompilerError(61 /* DOMErrorCodes.X_IGNORED_SIDE_EFFECT_TAG */, node.loc));\n        context.removeNode();\n    }\n};\n\nconst DOMNodeTransforms = [\n    transformStyle,\n    ...([])\n];\nconst DOMDirectiveTransforms = {\n    cloak: compilerCore.noopDirectiveTransform,\n    html: transformVHtml,\n    text: transformVText,\n    model: transformModel,\n    on: transformOn,\n    show: transformShow\n};\nfunction compile(template, options = {}) {\n    return compilerCore.baseCompile(template, shared.extend({}, parserOptions, options, {\n        nodeTransforms: [\n            // ignore <script> and <tag>\n            // this is not put inside DOMNodeTransforms because that list is used\n            // by compiler-ssr to generate vnode fallback branches\n            ignoreSideEffectTags,\n            ...DOMNodeTransforms,\n            ...(options.nodeTransforms || [])\n        ],\n        directiveTransforms: shared.extend({}, DOMDirectiveTransforms, options.directiveTransforms || {}),\n        transformHoist: stringifyStatic\n    }));\n}\nfunction parse(template, options = {}) {\n    return compilerCore.baseParse(template, shared.extend({}, parserOptions, options));\n}\n\nexports.DOMDirectiveTransforms = DOMDirectiveTransforms;\nexports.DOMNodeTransforms = DOMNodeTransforms;\nexports.TRANSITION = TRANSITION;\nexports.TRANSITION_GROUP = TRANSITION_GROUP;\nexports.V_MODEL_CHECKBOX = V_MODEL_CHECKBOX;\nexports.V_MODEL_DYNAMIC = V_MODEL_DYNAMIC;\nexports.V_MODEL_RADIO = V_MODEL_RADIO;\nexports.V_MODEL_SELECT = V_MODEL_SELECT;\nexports.V_MODEL_TEXT = V_MODEL_TEXT;\nexports.V_ON_WITH_KEYS = V_ON_WITH_KEYS;\nexports.V_ON_WITH_MODIFIERS = V_ON_WITH_MODIFIERS;\nexports.V_SHOW = V_SHOW;\nexports.compile = compile;\nexports.createDOMCompilerError = createDOMCompilerError;\nexports.parse = parse;\nexports.parserOptions = parserOptions;\nexports.transformStyle = transformStyle;\nObject.keys(compilerCore).forEach(function(k) {\n  if (k !== 'default') exports[k] = compilerCore[k];\n});\n!/dist/compiler-dom.esm-bundler.jsP=import { registerRuntimeHelpers, isBuiltInType, createSimpleExpression, createCompilerError, createObjectProperty, getConstantType, createCallExpression, TO_DISPLAY_STRING, transformModel as transformModel$1, findProp, hasDynamicKeyVBind, transformOn as transformOn$1, isStaticExp, createCompoundExpression, checkCompatEnabled, noopDirectiveTransform, baseCompile, baseParse } from '@vue/compiler-core';\nexport * from '@vue/compiler-core';\nimport { isVoidTag, isHTMLTag, isSVGTag, makeMap, parseStringStyle, capitalize, extend } from '@vue/shared';\n\nconst V_MODEL_RADIO = Symbol((process.env.NODE_ENV !== 'production') ? `vModelRadio` : ``);\nconst V_MODEL_CHECKBOX = Symbol((process.env.NODE_ENV !== 'production') ? `vModelCheckbox` : ``);\nconst V_MODEL_TEXT = Symbol((process.env.NODE_ENV !== 'production') ? `vModelText` : ``);\nconst V_MODEL_SELECT = Symbol((process.env.NODE_ENV !== 'production') ? `vModelSelect` : ``);\nconst V_MODEL_DYNAMIC = Symbol((process.env.NODE_ENV !== 'production') ? `vModelDynamic` : ``);\nconst V_ON_WITH_MODIFIERS = Symbol((process.env.NODE_ENV !== 'production') ? `vOnModifiersGuard` : ``);\nconst V_ON_WITH_KEYS = Symbol((process.env.NODE_ENV !== 'production') ? `vOnKeysGuard` : ``);\nconst V_SHOW = Symbol((process.env.NODE_ENV !== 'production') ? `vShow` : ``);\nconst TRANSITION = Symbol((process.env.NODE_ENV !== 'production') ? `Transition` : ``);\nconst TRANSITION_GROUP = Symbol((process.env.NODE_ENV !== 'production') ? `TransitionGroup` : ``);\nregisterRuntimeHelpers({\n    [V_MODEL_RADIO]: `vModelRadio`,\n    [V_MODEL_CHECKBOX]: `vModelCheckbox`,\n    [V_MODEL_TEXT]: `vModelText`,\n    [V_MODEL_SELECT]: `vModelSelect`,\n    [V_MODEL_DYNAMIC]: `vModelDynamic`,\n    [V_ON_WITH_MODIFIERS]: `withModifiers`,\n    [V_ON_WITH_KEYS]: `withKeys`,\n    [V_SHOW]: `vShow`,\n    [TRANSITION]: `Transition`,\n    [TRANSITION_GROUP]: `TransitionGroup`\n});\n\n/* eslint-disable no-restricted-globals */\nlet decoder;\nfunction decodeHtmlBrowser(raw, asAttr = false) {\n    if (!decoder) {\n        decoder = document.createElement('div');\n    }\n    if (asAttr) {\n        decoder.innerHTML = `<div foo=\"${raw.replace(/\"/g, '&quot;')}\">`;\n        return decoder.children[0].getAttribute('foo');\n    }\n    else {\n        decoder.innerHTML = raw;\n        return decoder.textContent;\n    }\n}\n\nconst isRawTextContainer = /*#__PURE__*/ makeMap('style,iframe,script,noscript', true);\nconst parserOptions = {\n    isVoidTag,\n    isNativeTag: tag => isHTMLTag(tag) || isSVGTag(tag),\n    isPreTag: tag => tag === 'pre',\n    decodeEntities: decodeHtmlBrowser ,\n    isBuiltInComponent: (tag) => {\n        if (isBuiltInType(tag, `Transition`)) {\n            return TRANSITION;\n        }\n        else if (isBuiltInType(tag, `TransitionGroup`)) {\n            return TRANSITION_GROUP;\n        }\n    },\n    // https://html.spec.whatwg.org/multipage/parsing.html#tree-construction-dispatcher\n    getNamespace(tag, parent) {\n        let ns = parent ? parent.ns : 0 /* DOMNamespaces.HTML */;\n        if (parent && ns === 2 /* DOMNamespaces.MATH_ML */) {\n            if (parent.tag === 'annotation-xml') {\n                if (tag === 'svg') {\n                    return 1 /* DOMNamespaces.SVG */;\n                }\n                if (parent.props.some(a => a.type === 6 /* NodeTypes.ATTRIBUTE */ &&\n                    a.name === 'encoding' &&\n                    a.value != null &&\n                    (a.value.content === 'text/html' ||\n                        a.value.content === 'application/xhtml+xml'))) {\n                    ns = 0 /* DOMNamespaces.HTML */;\n                }\n            }\n            else if (/^m(?:[ions]|text)$/.test(parent.tag) &&\n                tag !== 'mglyph' &&\n                tag !== 'malignmark') {\n                ns = 0 /* DOMNamespaces.HTML */;\n            }\n        }\n        else if (parent && ns === 1 /* DOMNamespaces.SVG */) {\n            if (parent.tag === 'foreignObject' ||\n                parent.tag === 'desc' ||\n                parent.tag === 'title') {\n                ns = 0 /* DOMNamespaces.HTML */;\n            }\n        }\n        if (ns === 0 /* DOMNamespaces.HTML */) {\n            if (tag === 'svg') {\n                return 1 /* DOMNamespaces.SVG */;\n            }\n            if (tag === 'math') {\n                return 2 /* DOMNamespaces.MATH_ML */;\n            }\n        }\n        return ns;\n    },\n    // https://html.spec.whatwg.org/multipage/parsing.html#parsing-html-fragments\n    getTextMode({ tag, ns }) {\n        if (ns === 0 /* DOMNamespaces.HTML */) {\n            if (tag === 'textarea' || tag === 'title') {\n                return 1 /* TextModes.RCDATA */;\n            }\n            if (isRawTextContainer(tag)) {\n                return 2 /* TextModes.RAWTEXT */;\n            }\n        }\n        return 0 /* TextModes.DATA */;\n    }\n};\n\n// Parse inline CSS strings for static style attributes into an object.\n// This is a NodeTransform since it works on the static `style` attribute and\n// converts it into a dynamic equivalent:\n// style=\"color: red\" -> :style='{ \"color\": \"red\" }'\n// It is then processed by `transformElement` and included in the generated\n// props.\nconst transformStyle = node => {\n    if (node.type === 1 /* NodeTypes.ELEMENT */) {\n        node.props.forEach((p, i) => {\n            if (p.type === 6 /* NodeTypes.ATTRIBUTE */ && p.name === 'style' && p.value) {\n                // replace p with an expression node\n                node.props[i] = {\n                    type: 7 /* NodeTypes.DIRECTIVE */,\n                    name: `bind`,\n                    arg: createSimpleExpression(`style`, true, p.loc),\n                    exp: parseInlineCSS(p.value.content, p.loc),\n                    modifiers: [],\n                    loc: p.loc\n                };\n            }\n        });\n    }\n};\nconst parseInlineCSS = (cssText, loc) => {\n    const normalized = parseStringStyle(cssText);\n    return createSimpleExpression(JSON.stringify(normalized), false, loc, 3 /* ConstantTypes.CAN_STRINGIFY */);\n};\n\nfunction createDOMCompilerError(code, loc) {\n    return createCompilerError(code, loc, (process.env.NODE_ENV !== 'production') || !true ? DOMErrorMessages : undefined);\n}\nconst DOMErrorMessages = {\n    [51 /* DOMErrorCodes.X_V_HTML_NO_EXPRESSION */]: `v-html is missing expression.`,\n    [52 /* DOMErrorCodes.X_V_HTML_WITH_CHILDREN */]: `v-html will override element children.`,\n    [53 /* DOMErrorCodes.X_V_TEXT_NO_EXPRESSION */]: `v-text is missing expression.`,\n    [54 /* DOMErrorCodes.X_V_TEXT_WITH_CHILDREN */]: `v-text will override element children.`,\n    [55 /* DOMErrorCodes.X_V_MODEL_ON_INVALID_ELEMENT */]: `v-model can only be used on <input>, <textarea> and <select> elements.`,\n    [56 /* DOMErrorCodes.X_V_MODEL_ARG_ON_ELEMENT */]: `v-model argument is not supported on plain elements.`,\n    [57 /* DOMErrorCodes.X_V_MODEL_ON_FILE_INPUT_ELEMENT */]: `v-model cannot be used on file inputs since they are read-only. Use a v-on:change listener instead.`,\n    [58 /* DOMErrorCodes.X_V_MODEL_UNNECESSARY_VALUE */]: `Unnecessary value binding used alongside v-model. It will interfere with v-model's behavior.`,\n    [59 /* DOMErrorCodes.X_V_SHOW_NO_EXPRESSION */]: `v-show is missing expression.`,\n    [60 /* DOMErrorCodes.X_TRANSITION_INVALID_CHILDREN */]: `<Transition> expects exactly one child element or component.`,\n    [61 /* DOMErrorCodes.X_IGNORED_SIDE_EFFECT_TAG */]: `Tags with side effect (<script> and <style>) are ignored in client component templates.`\n};\n\nconst transformVHtml = (dir, node, context) => {\n    const { exp, loc } = dir;\n    if (!exp) {\n        context.onError(createDOMCompilerError(51 /* DOMErrorCodes.X_V_HTML_NO_EXPRESSION */, loc));\n    }\n    if (node.children.length) {\n        context.onError(createDOMCompilerError(52 /* DOMErrorCodes.X_V_HTML_WITH_CHILDREN */, loc));\n        node.children.length = 0;\n    }\n    return {\n        props: [\n            createObjectProperty(createSimpleExpression(`innerHTML`, true, loc), exp || createSimpleExpression('', true))\n        ]\n    };\n};\n\nconst transformVText = (dir, node, context) => {\n    const { exp, loc } = dir;\n    if (!exp) {\n        context.onError(createDOMCompilerError(53 /* DOMErrorCodes.X_V_TEXT_NO_EXPRESSION */, loc));\n    }\n    if (node.children.length) {\n        context.onError(createDOMCompilerError(54 /* DOMErrorCodes.X_V_TEXT_WITH_CHILDREN */, loc));\n        node.children.length = 0;\n    }\n    return {\n        props: [\n            createObjectProperty(createSimpleExpression(`textContent`, true), exp\n                ? getConstantType(exp, context) > 0\n                    ? exp\n                    : createCallExpression(context.helperString(TO_DISPLAY_STRING), [exp], loc)\n                : createSimpleExpression('', true))\n        ]\n    };\n};\n\nconst transformModel = (dir, node, context) => {\n    const baseResult = transformModel$1(dir, node, context);\n    // base transform has errors OR component v-model (only need props)\n    if (!baseResult.props.length || node.tagType === 1 /* ElementTypes.COMPONENT */) {\n        return baseResult;\n    }\n    if (dir.arg) {\n        context.onError(createDOMCompilerError(56 /* DOMErrorCodes.X_V_MODEL_ARG_ON_ELEMENT */, dir.arg.loc));\n    }\n    function checkDuplicatedValue() {\n        const value = findProp(node, 'value');\n        if (value) {\n            context.onError(createDOMCompilerError(58 /* DOMErrorCodes.X_V_MODEL_UNNECESSARY_VALUE */, value.loc));\n        }\n    }\n    const { tag } = node;\n    const isCustomElement = context.isCustomElement(tag);\n    if (tag === 'input' ||\n        tag === 'textarea' ||\n        tag === 'select' ||\n        isCustomElement) {\n        let directiveToUse = V_MODEL_TEXT;\n        let isInvalidType = false;\n        if (tag === 'input' || isCustomElement) {\n            const type = findProp(node, `type`);\n            if (type) {\n                if (type.type === 7 /* NodeTypes.DIRECTIVE */) {\n                    // :type=\"foo\"\n                    directiveToUse = V_MODEL_DYNAMIC;\n                }\n                else if (type.value) {\n                    switch (type.value.content) {\n                        case 'radio':\n                            directiveToUse = V_MODEL_RADIO;\n                            break;\n                        case 'checkbox':\n                            directiveToUse = V_MODEL_CHECKBOX;\n                            break;\n                        case 'file':\n                            isInvalidType = true;\n                            context.onError(createDOMCompilerError(57 /* DOMErrorCodes.X_V_MODEL_ON_FILE_INPUT_ELEMENT */, dir.loc));\n                            break;\n                        default:\n                            // text type\n                            (process.env.NODE_ENV !== 'production') && checkDuplicatedValue();\n                            break;\n                    }\n                }\n            }\n            else if (hasDynamicKeyVBind(node)) {\n                // element has bindings with dynamic keys, which can possibly contain\n                // \"type\".\n                directiveToUse = V_MODEL_DYNAMIC;\n            }\n            else {\n                // text type\n                (process.env.NODE_ENV !== 'production') && checkDuplicatedValue();\n            }\n        }\n        else if (tag === 'select') {\n            directiveToUse = V_MODEL_SELECT;\n        }\n        else {\n            // textarea\n            (process.env.NODE_ENV !== 'production') && checkDuplicatedValue();\n        }\n        // inject runtime directive\n        // by returning the helper symbol via needRuntime\n        // the import will replaced a resolveDirective call.\n        if (!isInvalidType) {\n            baseResult.needRuntime = context.helper(directiveToUse);\n        }\n    }\n    else {\n        context.onError(createDOMCompilerError(55 /* DOMErrorCodes.X_V_MODEL_ON_INVALID_ELEMENT */, dir.loc));\n    }\n    // native vmodel doesn't need the `modelValue` props since they are also\n    // passed to the runtime as `binding.value`. removing it reduces code size.\n    baseResult.props = baseResult.props.filter(p => !(p.key.type === 4 /* NodeTypes.SIMPLE_EXPRESSION */ &&\n        p.key.content === 'modelValue'));\n    return baseResult;\n};\n\nconst isEventOptionModifier = /*#__PURE__*/ makeMap(`passive,once,capture`);\nconst isNonKeyModifier = /*#__PURE__*/ makeMap(\n// event propagation management\n`stop,prevent,self,` +\n    // system modifiers + exact\n    `ctrl,shift,alt,meta,exact,` +\n    // mouse\n    `middle`);\n// left & right could be mouse or key modifiers based on event type\nconst maybeKeyModifier = /*#__PURE__*/ makeMap('left,right');\nconst isKeyboardEvent = /*#__PURE__*/ makeMap(`onkeyup,onkeydown,onkeypress`, true);\nconst resolveModifiers = (key, modifiers, context, loc) => {\n    const keyModifiers = [];\n    const nonKeyModifiers = [];\n    const eventOptionModifiers = [];\n    for (let i = 0; i < modifiers.length; i++) {\n        const modifier = modifiers[i];\n        if (modifier === 'native' &&\n            checkCompatEnabled(\"COMPILER_V_ON_NATIVE\" /* CompilerDeprecationTypes.COMPILER_V_ON_NATIVE */, context, loc)) {\n            eventOptionModifiers.push(modifier);\n        }\n        else if (isEventOptionModifier(modifier)) {\n            // eventOptionModifiers: modifiers for addEventListener() options,\n            // e.g. .passive & .capture\n            eventOptionModifiers.push(modifier);\n        }\n        else {\n            // runtimeModifiers: modifiers that needs runtime guards\n            if (maybeKeyModifier(modifier)) {\n                if (isStaticExp(key)) {\n                    if (isKeyboardEvent(key.content)) {\n                        keyModifiers.push(modifier);\n                    }\n                    else {\n                        nonKeyModifiers.push(modifier);\n                    }\n                }\n                else {\n                    keyModifiers.push(modifier);\n                    nonKeyModifiers.push(modifier);\n                }\n            }\n            else {\n                if (isNonKeyModifier(modifier)) {\n                    nonKeyModifiers.push(modifier);\n                }\n                else {\n                    keyModifiers.push(modifier);\n                }\n            }\n        }\n    }\n    return {\n        keyModifiers,\n        nonKeyModifiers,\n        eventOptionModifiers\n    };\n};\nconst transformClick = (key, event) => {\n    const isStaticClick = isStaticExp(key) && key.content.toLowerCase() === 'onclick';\n    return isStaticClick\n        ? createSimpleExpression(event, true)\n        : key.type !== 4 /* NodeTypes.SIMPLE_EXPRESSION */\n            ? createCompoundExpression([\n                `(`,\n                key,\n                `) === \"onClick\" ? \"${event}\" : (`,\n                key,\n                `)`\n            ])\n            : key;\n};\nconst transformOn = (dir, node, context) => {\n    return transformOn$1(dir, node, context, baseResult => {\n        const { modifiers } = dir;\n        if (!modifiers.length)\n            return baseResult;\n        let { key, value: handlerExp } = baseResult.props[0];\n        const { keyModifiers, nonKeyModifiers, eventOptionModifiers } = resolveModifiers(key, modifiers, context, dir.loc);\n        // normalize click.right and click.middle since they don't actually fire\n        if (nonKeyModifiers.includes('right')) {\n            key = transformClick(key, `onContextmenu`);\n        }\n        if (nonKeyModifiers.includes('middle')) {\n            key = transformClick(key, `onMouseup`);\n        }\n        if (nonKeyModifiers.length) {\n            handlerExp = createCallExpression(context.helper(V_ON_WITH_MODIFIERS), [\n                handlerExp,\n                JSON.stringify(nonKeyModifiers)\n            ]);\n        }\n        if (keyModifiers.length &&\n            // if event name is dynamic, always wrap with keys guard\n            (!isStaticExp(key) || isKeyboardEvent(key.content))) {\n            handlerExp = createCallExpression(context.helper(V_ON_WITH_KEYS), [\n                handlerExp,\n                JSON.stringify(keyModifiers)\n            ]);\n        }\n        if (eventOptionModifiers.length) {\n            const modifierPostfix = eventOptionModifiers.map(capitalize).join('');\n            key = isStaticExp(key)\n                ? createSimpleExpression(`${key.content}${modifierPostfix}`, true)\n                : createCompoundExpression([`(`, key, `) + \"${modifierPostfix}\"`]);\n        }\n        return {\n            props: [createObjectProperty(key, handlerExp)]\n        };\n    });\n};\n\nconst transformShow = (dir, node, context) => {\n    const { exp, loc } = dir;\n    if (!exp) {\n        context.onError(createDOMCompilerError(59 /* DOMErrorCodes.X_V_SHOW_NO_EXPRESSION */, loc));\n    }\n    return {\n        props: [],\n        needRuntime: context.helper(V_SHOW)\n    };\n};\n\nconst transformTransition = (node, context) => {\n    if (node.type === 1 /* NodeTypes.ELEMENT */ &&\n        node.tagType === 1 /* ElementTypes.COMPONENT */) {\n        const component = context.isBuiltInComponent(node.tag);\n        if (component === TRANSITION) {\n            return () => {\n                if (!node.children.length) {\n                    return;\n                }\n                // warn multiple transition children\n                if (hasMultipleChildren(node)) {\n                    context.onError(createDOMCompilerError(60 /* DOMErrorCodes.X_TRANSITION_INVALID_CHILDREN */, {\n                        start: node.children[0].loc.start,\n                        end: node.children[node.children.length - 1].loc.end,\n                        source: ''\n                    }));\n                }\n                // check if it's s single child w/ v-show\n                // if yes, inject \"persisted: true\" to the transition props\n                const child = node.children[0];\n                if (child.type === 1 /* NodeTypes.ELEMENT */) {\n                    for (const p of child.props) {\n                        if (p.type === 7 /* NodeTypes.DIRECTIVE */ && p.name === 'show') {\n                            node.props.push({\n                                type: 6 /* NodeTypes.ATTRIBUTE */,\n                                name: 'persisted',\n                                value: undefined,\n                                loc: node.loc\n                            });\n                        }\n                    }\n                }\n            };\n        }\n    }\n};\nfunction hasMultipleChildren(node) {\n    // #1352 filter out potential comment nodes.\n    const children = (node.children = node.children.filter(c => c.type !== 3 /* NodeTypes.COMMENT */ &&\n        !(c.type === 2 /* NodeTypes.TEXT */ && !c.content.trim())));\n    const child = children[0];\n    return (children.length !== 1 ||\n        child.type === 11 /* NodeTypes.FOR */ ||\n        (child.type === 9 /* NodeTypes.IF */ && child.branches.some(hasMultipleChildren)));\n}\n\nconst ignoreSideEffectTags = (node, context) => {\n    if (node.type === 1 /* NodeTypes.ELEMENT */ &&\n        node.tagType === 0 /* ElementTypes.ELEMENT */ &&\n        (node.tag === 'script' || node.tag === 'style')) {\n        context.onError(createDOMCompilerError(61 /* DOMErrorCodes.X_IGNORED_SIDE_EFFECT_TAG */, node.loc));\n        context.removeNode();\n    }\n};\n\nconst DOMNodeTransforms = [\n    transformStyle,\n    ...((process.env.NODE_ENV !== 'production') ? [transformTransition] : [])\n];\nconst DOMDirectiveTransforms = {\n    cloak: noopDirectiveTransform,\n    html: transformVHtml,\n    text: transformVText,\n    model: transformModel,\n    on: transformOn,\n    show: transformShow\n};\nfunction compile(template, options = {}) {\n    return baseCompile(template, extend({}, parserOptions, options, {\n        nodeTransforms: [\n            // ignore <script> and <tag>\n            // this is not put inside DOMNodeTransforms because that list is used\n            // by compiler-ssr to generate vnode fallback branches\n            ignoreSideEffectTags,\n            ...DOMNodeTransforms,\n            ...(options.nodeTransforms || [])\n        ],\n        directiveTransforms: extend({}, DOMDirectiveTransforms, options.directiveTransforms || {}),\n        transformHoist: null \n    }));\n}\nfunction parse(template, options = {}) {\n    return baseParse(template, extend({}, parserOptions, options));\n}\n\nexport { DOMDirectiveTransforms, DOMNodeTransforms, TRANSITION, TRANSITION_GROUP, V_MODEL_CHECKBOX, V_MODEL_DYNAMIC, V_MODEL_RADIO, V_MODEL_SELECT, V_MODEL_TEXT, V_ON_WITH_KEYS, V_ON_WITH_MODIFIERS, V_SHOW, compile, createDOMCompilerError, parse, parserOptions, transformStyle };\n/package.json\u0003{\n  \"name\": \"@vue/compiler-dom\",\n  \"version\": \"3.2.47\",\n  \"description\": \"@vue/compiler-dom\",\n  \"main\": \"index.js\",\n  \"module\": \"dist/compiler-dom.esm-bundler.js\",\n  \"types\": \"dist/compiler-dom.d.ts\",\n  \"unpkg\": \"dist/compiler-dom.global.js\",\n  \"jsdelivr\": \"dist/compiler-dom.global.js\",\n  \"files\": [\n    \"index.js\",\n    \"dist\"\n  ],\n  \"sideEffects\": false,\n  \"buildOptions\": {\n    \"name\": \"VueCompilerDOM\",\n    \"compat\": true,\n    \"formats\": [\n      \"esm-bundler\",\n      \"esm-browser\",\n      \"cjs\",\n      \"global\"\n    ]\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/vuejs/core.git\",\n    \"directory\": \"packages/compiler-dom\"\n  },\n  \"keywords\": [\n    \"vue\"\n  ],\n  \"author\": \"Evan You\",\n  \"license\": \"MIT\",\n  \"bugs\": {\n    \"url\": \"https://github.com/vuejs/core/issues\"\n  },\n  \"homepage\": \"https://github.com/vuejs/core/tree/main/packages/compiler-dom#readme\",\n  \"dependencies\": {\n    \"@vue/shared\": \"3.2.47\",\n    \"@vue/compiler-core\": \"3.2.47\"\n  }\n}\n!/dist/compiler-dom.esm-browser.js\u0000\u0003a/**\n * Make a map and return a function for checking if a key\n * is in that map.\n * IMPORTANT: all calls of this function must be prefixed with\n * \\/\\*#\\_\\_PURE\\_\\_\\*\\/\n * So that rollup can tree-shake them if necessary.\n */\nfunction makeMap(str, expectsLowerCase) {\n    const map = Object.create(null);\n    const list = str.split(',');\n    for (let i = 0; i < list.length; i++) {\n        map[list[i]] = true;\n    }\n    return expectsLowerCase ? val => !!map[val.toLowerCase()] : val => !!map[val];\n}\n\n/**\n * dev only flag -> name mapping\n */\nconst PatchFlagNames = {\n    [1 /* PatchFlags.TEXT */]: `TEXT`,\n    [2 /* PatchFlags.CLASS */]: `CLASS`,\n    [4 /* PatchFlags.STYLE */]: `STYLE`,\n    [8 /* PatchFlags.PROPS */]: `PROPS`,\n    [16 /* PatchFlags.FULL_PROPS */]: `FULL_PROPS`,\n    [32 /* PatchFlags.HYDRATE_EVENTS */]: `HYDRATE_EVENTS`,\n    [64 /* PatchFlags.STABLE_FRAGMENT */]: `STABLE_FRAGMENT`,\n    [128 /* PatchFlags.KEYED_FRAGMENT */]: `KEYED_FRAGMENT`,\n    [256 /* PatchFlags.UNKEYED_FRAGMENT */]: `UNKEYED_FRAGMENT`,\n    [512 /* PatchFlags.NEED_PATCH */]: `NEED_PATCH`,\n    [1024 /* PatchFlags.DYNAMIC_SLOTS */]: `DYNAMIC_SLOTS`,\n    [2048 /* PatchFlags.DEV_ROOT_FRAGMENT */]: `DEV_ROOT_FRAGMENT`,\n    [-1 /* PatchFlags.HOISTED */]: `HOISTED`,\n    [-2 /* PatchFlags.BAIL */]: `BAIL`\n};\n\n/**\n * Dev only\n */\nconst slotFlagsText = {\n    [1 /* SlotFlags.STABLE */]: 'STABLE',\n    [2 /* SlotFlags.DYNAMIC */]: 'DYNAMIC',\n    [3 /* SlotFlags.FORWARDED */]: 'FORWARDED'\n};\n\nconst range = 2;\nfunction generateCodeFrame(source, start = 0, end = source.length) {\n    // Split the content into individual lines but capture the newline sequence\n    // that separated each line. This is important because the actual sequence is\n    // needed to properly take into account the full line length for offset\n    // comparison\n    let lines = source.split(/(\\r?\\n)/);\n    // Separate the lines and newline sequences into separate arrays for easier referencing\n    const newlineSequences = lines.filter((_, idx) => idx % 2 === 1);\n    lines = lines.filter((_, idx) => idx % 2 === 0);\n    let count = 0;\n    const res = [];\n    for (let i = 0; i < lines.length; i++) {\n        count +=\n            lines[i].length +\n                ((newlineSequences[i] && newlineSequences[i].length) || 0);\n        if (count >= start) {\n            for (let j = i - range; j <= i + range || end > count; j++) {\n                if (j < 0 || j >= lines.length)\n                    continue;\n                const line = j + 1;\n                res.push(`${line}${' '.repeat(Math.max(3 - String(line).length, 0))}|  ${lines[j]}`);\n                const lineLength = lines[j].length;\n                const newLineSeqLength = (newlineSequences[j] && newlineSequences[j].length) || 0;\n                if (j === i) {\n                    // push underline\n                    const pad = start - (count - (lineLength + newLineSeqLength));\n                    const length = Math.max(1, end > count ? lineLength - pad : end - start);\n                    res.push(`   |  ` + ' '.repeat(pad) + '^'.repeat(length));\n                }\n                else if (j > i) {\n                    if (end > count) {\n                        const length = Math.max(Math.min(end - count, lineLength), 1);\n                        res.push(`   |  ` + '^'.repeat(length));\n                    }\n                    count += lineLength + newLineSeqLength;\n                }\n            }\n            break;\n        }\n    }\n    return res.join('\\n');\n}\n\nconst listDelimiterRE = /;(?![^(]*\\))/g;\nconst propertyDelimiterRE = /:([^]+)/;\nconst styleCommentRE = /\\/\\*.*?\\*\\//gs;\nfunction parseStringStyle(cssText) {\n    const ret = {};\n    cssText\n        .replace(styleCommentRE, '')\n        .split(listDelimiterRE)\n        .forEach(item => {\n        if (item) {\n            const tmp = item.split(propertyDelimiterRE);\n            tmp.length > 1 && (ret[tmp[0].trim()] = tmp[1].trim());\n        }\n    });\n    return ret;\n}\n\n// These tag configs are shared between compiler-dom and runtime-dom, so they\n// https://developer.mozilla.org/en-US/docs/Web/HTML/Element\nconst HTML_TAGS = 'html,body,base,head,link,meta,style,title,address,article,aside,footer,' +\n    'header,hgroup,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,' +\n    'figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,' +\n    'data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,' +\n    'time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,' +\n    'canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,' +\n    'th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,' +\n    'option,output,progress,select,textarea,details,dialog,menu,' +\n    'summary,template,blockquote,iframe,tfoot';\n// https://developer.mozilla.org/en-US/docs/Web/SVG/Element\nconst SVG_TAGS = 'svg,animate,animateMotion,animateTransform,circle,clipPath,color-profile,' +\n    'defs,desc,discard,ellipse,feBlend,feColorMatrix,feComponentTransfer,' +\n    'feComposite,feConvolveMatrix,feDiffuseLighting,feDisplacementMap,' +\n    'feDistantLight,feDropShadow,feFlood,feFuncA,feFuncB,feFuncG,feFuncR,' +\n    'feGaussianBlur,feImage,feMerge,feMergeNode,feMorphology,feOffset,' +\n    'fePointLight,feSpecularLighting,feSpotLight,feTile,feTurbulence,filter,' +\n    'foreignObject,g,hatch,hatchpath,image,line,linearGradient,marker,mask,' +\n    'mesh,meshgradient,meshpatch,meshrow,metadata,mpath,path,pattern,' +\n    'polygon,polyline,radialGradient,rect,set,solidcolor,stop,switch,symbol,' +\n    'text,textPath,title,tspan,unknown,use,view';\nconst VOID_TAGS = 'area,base,br,col,embed,hr,img,input,link,meta,param,source,track,wbr';\n/**\n * Compiler only.\n * Do NOT use in runtime code paths unless behind `true` flag.\n */\nconst isHTMLTag = /*#__PURE__*/ makeMap(HTML_TAGS);\n/**\n * Compiler only.\n * Do NOT use in runtime code paths unless behind `true` flag.\n */\nconst isSVGTag = /*#__PURE__*/ makeMap(SVG_TAGS);\n/**\n * Compiler only.\n * Do NOT use in runtime code paths unless behind `true` flag.\n */\nconst isVoidTag = /*#__PURE__*/ makeMap(VOID_TAGS);\n\nconst EMPTY_OBJ = Object.freeze({})\n    ;\nconst NOOP = () => { };\n/**\n * Always return false.\n */\nconst NO = () => false;\nconst onRE = /^on[^a-z]/;\nconst isOn = (key) => onRE.test(key);\nconst extend = Object.assign;\nconst isArray = Array.isArray;\nconst isString = (val) => typeof val === 'string';\nconst isSymbol = (val) => typeof val === 'symbol';\nconst isObject = (val) => val !== null && typeof val === 'object';\nconst isReservedProp = /*#__PURE__*/ makeMap(\n// the leading comma is intentional so empty string \"\" is also included\n',key,ref,ref_for,ref_key,' +\n    'onVnodeBeforeMount,onVnodeMounted,' +\n    'onVnodeBeforeUpdate,onVnodeUpdated,' +\n    'onVnodeBeforeUnmount,onVnodeUnmounted');\nconst isBuiltInDirective = /*#__PURE__*/ makeMap('bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo');\nconst cacheStringFunction = (fn) => {\n    const cache = Object.create(null);\n    return ((str) => {\n        const hit = cache[str];\n        return hit || (cache[str] = fn(str));\n    });\n};\nconst camelizeRE = /-(\\w)/g;\n/**\n * @private\n */\nconst camelize = cacheStringFunction((str) => {\n    return str.replace(camelizeRE, (_, c) => (c ? c.toUpperCase() : ''));\n});\nconst hyphenateRE = /\\B([A-Z])/g;\n/**\n * @private\n */\nconst hyphenate = cacheStringFunction((str) => str.replace(hyphenateRE, '-$1').toLowerCase());\n/**\n * @private\n */\nconst capitalize = cacheStringFunction((str) => str.charAt(0).toUpperCase() + str.slice(1));\n/**\n * @private\n */\nconst toHandlerKey = cacheStringFunction((str) => str ? `on${capitalize(str)}` : ``);\n\nfunction defaultOnError(error) {\n    throw error;\n}\nfunction defaultOnWarn(msg) {\n    console.warn(`[Vue warn] ${msg.message}`);\n}\nfunction createCompilerError(code, loc, messages, additionalMessage) {\n    const msg = (messages || errorMessages)[code] + (additionalMessage || ``)\n        ;\n    const error = new SyntaxError(String(msg));\n    error.code = code;\n    error.loc = loc;\n    return error;\n}\nconst errorMessages = {\n    // parse errors\n    [0 /* ErrorCodes.ABRUPT_CLOSING_OF_EMPTY_COMMENT */]: 'Illegal comment.',\n    [1 /* ErrorCodes.CDATA_IN_HTML_CONTENT */]: 'CDATA section is allowed only in XML context.',\n    [2 /* ErrorCodes.DUPLICATE_ATTRIBUTE */]: 'Duplicate attribute.',\n    [3 /* ErrorCodes.END_TAG_WITH_ATTRIBUTES */]: 'End tag cannot have attributes.',\n    [4 /* ErrorCodes.END_TAG_WITH_TRAILING_SOLIDUS */]: \"Illegal '/' in tags.\",\n    [5 /* ErrorCodes.EOF_BEFORE_TAG_NAME */]: 'Unexpected EOF in tag.',\n    [6 /* ErrorCodes.EOF_IN_CDATA */]: 'Unexpected EOF in CDATA section.',\n    [7 /* ErrorCodes.EOF_IN_COMMENT */]: 'Unexpected EOF in comment.',\n    [8 /* ErrorCodes.EOF_IN_SCRIPT_HTML_COMMENT_LIKE_TEXT */]: 'Unexpected EOF in script.',\n    [9 /* ErrorCodes.EOF_IN_TAG */]: 'Unexpected EOF in tag.',\n    [10 /* ErrorCodes.INCORRECTLY_CLOSED_COMMENT */]: 'Incorrectly closed comment.',\n    [11 /* ErrorCodes.INCORRECTLY_OPENED_COMMENT */]: 'Incorrectly opened comment.',\n    [12 /* ErrorCodes.INVALID_FIRST_CHARACTER_OF_TAG_NAME */]: \"Illegal tag name. Use '&lt;' to print '<'.\",\n    [13 /* ErrorCodes.MISSING_ATTRIBUTE_VALUE */]: 'Attribute value was expected.',\n    [14 /* ErrorCodes.MISSING_END_TAG_NAME */]: 'End tag name was expected.',\n    [15 /* ErrorCodes.MISSING_WHITESPACE_BETWEEN_ATTRIBUTES */]: 'Whitespace was expected.',\n    [16 /* ErrorCodes.NESTED_COMMENT */]: \"Unexpected '<!--' in comment.\",\n    [17 /* ErrorCodes.UNEXPECTED_CHARACTER_IN_ATTRIBUTE_NAME */]: 'Attribute name cannot contain U+0022 (\"), U+0027 (\\'), and U+003C (<).',\n    [18 /* ErrorCodes.UNEXPECTED_CHARACTER_IN_UNQUOTED_ATTRIBUTE_VALUE */]: 'Unquoted attribute value cannot contain U+0022 (\"), U+0027 (\\'), U+003C (<), U+003D (=), and U+0060 (`).',\n    [19 /* ErrorCodes.UNEXPECTED_EQUALS_SIGN_BEFORE_ATTRIBUTE_NAME */]: \"Attribute name cannot start with '='.\",\n    [21 /* ErrorCodes.UNEXPECTED_QUESTION_MARK_INSTEAD_OF_TAG_NAME */]: \"'<?' is allowed only in XML context.\",\n    [20 /* ErrorCodes.UNEXPECTED_NULL_CHARACTER */]: `Unexpected null character.`,\n    [22 /* ErrorCodes.UNEXPECTED_SOLIDUS_IN_TAG */]: \"Illegal '/' in tags.\",\n    // Vue-specific parse errors\n    [23 /* ErrorCodes.X_INVALID_END_TAG */]: 'Invalid end tag.',\n    [24 /* ErrorCodes.X_MISSING_END_TAG */]: 'Element is missing end tag.',\n    [25 /* ErrorCodes.X_MISSING_INTERPOLATION_END */]: 'Interpolation end sign was not found.',\n    [27 /* ErrorCodes.X_MISSING_DYNAMIC_DIRECTIVE_ARGUMENT_END */]: 'End bracket for dynamic directive argument was not found. ' +\n        'Note that dynamic directive argument cannot contain spaces.',\n    [26 /* ErrorCodes.X_MISSING_DIRECTIVE_NAME */]: 'Legal directive name was expected.',\n    // transform errors\n    [28 /* ErrorCodes.X_V_IF_NO_EXPRESSION */]: `v-if/v-else-if is missing expression.`,\n    [29 /* ErrorCodes.X_V_IF_SAME_KEY */]: `v-if/else branches must use unique keys.`,\n    [30 /* ErrorCodes.X_V_ELSE_NO_ADJACENT_IF */]: `v-else/v-else-if has no adjacent v-if or v-else-if.`,\n    [31 /* ErrorCodes.X_V_FOR_NO_EXPRESSION */]: `v-for is missing expression.`,\n    [32 /* ErrorCodes.X_V_FOR_MALFORMED_EXPRESSION */]: `v-for has invalid expression.`,\n    [33 /* ErrorCodes.X_V_FOR_TEMPLATE_KEY_PLACEMENT */]: `<template v-for> key should be placed on the <template> tag.`,\n    [34 /* ErrorCodes.X_V_BIND_NO_EXPRESSION */]: `v-bind is missing expression.`,\n    [35 /* ErrorCodes.X_V_ON_NO_EXPRESSION */]: `v-on is missing expression.`,\n    [36 /* ErrorCodes.X_V_SLOT_UNEXPECTED_DIRECTIVE_ON_SLOT_OUTLET */]: `Unexpected custom directive on <slot> outlet.`,\n    [37 /* ErrorCodes.X_V_SLOT_MIXED_SLOT_USAGE */]: `Mixed v-slot usage on both the component and nested <template>. ` +\n        `When there are multiple named slots, all slots should use <template> ` +\n        `syntax to avoid scope ambiguity.`,\n    [38 /* ErrorCodes.X_V_SLOT_DUPLICATE_SLOT_NAMES */]: `Duplicate slot names found. `,\n    [39 /* ErrorCodes.X_V_SLOT_EXTRANEOUS_DEFAULT_SLOT_CHILDREN */]: `Extraneous children found when component already has explicitly named ` +\n        `default slot. These children will be ignored.`,\n    [40 /* ErrorCodes.X_V_SLOT_MISPLACED */]: `v-slot can only be used on components or <template> tags.`,\n    [41 /* ErrorCodes.X_V_MODEL_NO_EXPRESSION */]: `v-model is missing expression.`,\n    [42 /* ErrorCodes.X_V_MODEL_MALFORMED_EXPRESSION */]: `v-model value must be a valid JavaScript member expression.`,\n    [43 /* ErrorCodes.X_V_MODEL_ON_SCOPE_VARIABLE */]: `v-model cannot be used on v-for or v-slot scope variables because they are not writable.`,\n    [44 /* ErrorCodes.X_V_MODEL_ON_PROPS */]: `v-model cannot be used on a prop, because local prop bindings are not writable.\\nUse a v-bind binding combined with a v-on listener that emits update:x event instead.`,\n    [45 /* ErrorCodes.X_INVALID_EXPRESSION */]: `Error parsing JavaScript expression: `,\n    [46 /* ErrorCodes.X_KEEP_ALIVE_INVALID_CHILDREN */]: `<KeepAlive> expects exactly one child component.`,\n    // generic errors\n    [47 /* ErrorCodes.X_PREFIX_ID_NOT_SUPPORTED */]: `\"prefixIdentifiers\" option is not supported in this build of compiler.`,\n    [48 /* ErrorCodes.X_MODULE_MODE_NOT_SUPPORTED */]: `ES module mode is not supported in this build of compiler.`,\n    [49 /* ErrorCodes.X_CACHE_HANDLER_NOT_SUPPORTED */]: `\"cacheHandlers\" option is only supported when the \"prefixIdentifiers\" option is enabled.`,\n    [50 /* ErrorCodes.X_SCOPE_ID_NOT_SUPPORTED */]: `\"scopeId\" option is only supported in module mode.`,\n    // just to fulfill types\n    [51 /* ErrorCodes.__EXTEND_POINT__ */]: ``\n};\n\nconst FRAGMENT = Symbol(`Fragment` );\nconst TELEPORT = Symbol(`Teleport` );\nconst SUSPENSE = Symbol(`Suspense` );\nconst KEEP_ALIVE = Symbol(`KeepAlive` );\nconst BASE_TRANSITION = Symbol(`BaseTransition` );\nconst OPEN_BLOCK = Symbol(`openBlock` );\nconst CREATE_BLOCK = Symbol(`createBlock` );\nconst CREATE_ELEMENT_BLOCK = Symbol(`createElementBlock` );\nconst CREATE_VNODE = Symbol(`createVNode` );\nconst CREATE_ELEMENT_VNODE = Symbol(`createElementVNode` );\nconst CREATE_COMMENT = Symbol(`createCommentVNode` );\nconst CREATE_TEXT = Symbol(`createTextVNode` );\nconst CREATE_STATIC = Symbol(`createStaticVNode` );\nconst RESOLVE_COMPONENT = Symbol(`resolveComponent` );\nconst RESOLVE_DYNAMIC_COMPONENT = Symbol(`resolveDynamicComponent` );\nconst RESOLVE_DIRECTIVE = Symbol(`resolveDirective` );\nconst RESOLVE_FILTER = Symbol(`resolveFilter` );\nconst WITH_DIRECTIVES = Symbol(`withDirectives` );\nconst RENDER_LIST = Symbol(`renderList` );\nconst RENDER_SLOT = Symbol(`renderSlot` );\nconst CREATE_SLOTS = Symbol(`createSlots` );\nconst TO_DISPLAY_STRING = Symbol(`toDisplayString` );\nconst MERGE_PROPS = Symbol(`mergeProps` );\nconst NORMALIZE_CLASS = Symbol(`normalizeClass` );\nconst NORMALIZE_STYLE = Symbol(`normalizeStyle` );\nconst NORMALIZE_PROPS = Symbol(`normalizeProps` );\nconst GUARD_REACTIVE_PROPS = Symbol(`guardReactiveProps` );\nconst TO_HANDLERS = Symbol(`toHandlers` );\nconst CAMELIZE = Symbol(`camelize` );\nconst CAPITALIZE = Symbol(`capitalize` );\nconst TO_HANDLER_KEY = Symbol(`toHandlerKey` );\nconst SET_BLOCK_TRACKING = Symbol(`setBlockTracking` );\nconst PUSH_SCOPE_ID = Symbol(`pushScopeId` );\nconst POP_SCOPE_ID = Symbol(`popScopeId` );\nconst WITH_CTX = Symbol(`withCtx` );\nconst UNREF = Symbol(`unref` );\nconst IS_REF = Symbol(`isRef` );\nconst WITH_MEMO = Symbol(`withMemo` );\nconst IS_MEMO_SAME = Symbol(`isMemoSame` );\n// Name mapping for runtime helpers that need to be imported from 'vue' in\n// generated code. Make sure these are correctly exported in the runtime!\nconst helperNameMap = {\n    [FRAGMENT]: `Fragment`,\n    [TELEPORT]: `Teleport`,\n    [SUSPENSE]: `Suspense`,\n    [KEEP_ALIVE]: `KeepAlive`,\n    [BASE_TRANSITION]: `BaseTransition`,\n    [OPEN_BLOCK]: `openBlock`,\n    [CREATE_BLOCK]: `createBlock`,\n    [CREATE_ELEMENT_BLOCK]: `createElementBlock`,\n    [CREATE_VNODE]: `createVNode`,\n    [CREATE_ELEMENT_VNODE]: `createElementVNode`,\n    [CREATE_COMMENT]: `createCommentVNode`,\n    [CREATE_TEXT]: `createTextVNode`,\n    [CREATE_STATIC]: `createStaticVNode`,\n    [RESOLVE_COMPONENT]: `resolveComponent`,\n    [RESOLVE_DYNAMIC_COMPONENT]: `resolveDynamicComponent`,\n    [RESOLVE_DIRECTIVE]: `resolveDirective`,\n    [RESOLVE_FILTER]: `resolveFilter`,\n    [WITH_DIRECTIVES]: `withDirectives`,\n    [RENDER_LIST]: `renderList`,\n    [RENDER_SLOT]: `renderSlot`,\n    [CREATE_SLOTS]: `createSlots`,\n    [TO_DISPLAY_STRING]: `toDisplayString`,\n    [MERGE_PROPS]: `mergeProps`,\n    [NORMALIZE_CLASS]: `normalizeClass`,\n    [NORMALIZE_STYLE]: `normalizeStyle`,\n    [NORMALIZE_PROPS]: `normalizeProps`,\n    [GUARD_REACTIVE_PROPS]: `guardReactiveProps`,\n    [TO_HANDLERS]: `toHandlers`,\n    [CAMELIZE]: `camelize`,\n    [CAPITALIZE]: `capitalize`,\n    [TO_HANDLER_KEY]: `toHandlerKey`,\n    [SET_BLOCK_TRACKING]: `setBlockTracking`,\n    [PUSH_SCOPE_ID]: `pushScopeId`,\n    [POP_SCOPE_ID]: `popScopeId`,\n    [WITH_CTX]: `withCtx`,\n    [UNREF]: `unref`,\n    [IS_REF]: `isRef`,\n    [WITH_MEMO]: `withMemo`,\n    [IS_MEMO_SAME]: `isMemoSame`\n};\nfunction registerRuntimeHelpers(helpers) {\n    Object.getOwnPropertySymbols(helpers).forEach(s => {\n        helperNameMap[s] = helpers[s];\n    });\n}\n\n// AST Utilities ---------------------------------------------------------------\n// Some expressions, e.g. sequence and conditional expressions, are never\n// associated with template nodes, so their source locations are just a stub.\n// Container types like CompoundExpression also don't need a real location.\nconst locStub = {\n    source: '',\n    start: { line: 1, column: 1, offset: 0 },\n    end: { line: 1, column: 1, offset: 0 }\n};\nfunction createRoot(children, loc = locStub) {\n    return {\n        type: 0 /* NodeTypes.ROOT */,\n        children,\n        helpers: new Set(),\n        components: [],\n        directives: [],\n        hoists: [],\n        imports: [],\n        cached: 0,\n        temps: 0,\n        codegenNode: undefined,\n        loc\n    };\n}\nfunction createVNodeCall(context, tag, props, children, patchFlag, dynamicProps, directives, isBlock = false, disableTracking = false, isComponent = false, loc = locStub) {\n    if (context) {\n        if (isBlock) {\n            context.helper(OPEN_BLOCK);\n            context.helper(getVNodeBlockHelper(context.inSSR, isComponent));\n        }\n        else {\n            context.helper(getVNodeHelper(context.inSSR, isComponent));\n        }\n        if (directives) {\n            context.helper(WITH_DIRECTIVES);\n        }\n    }\n    return {\n        type: 13 /* NodeTypes.VNODE_CALL */,\n        tag,\n        props,\n        children,\n        patchFlag,\n        dynamicProps,\n        directives,\n        isBlock,\n        disableTracking,\n        isComponent,\n        loc\n    };\n}\nfunction createArrayExpression(elements, loc = locStub) {\n    return {\n        type: 17 /* NodeTypes.JS_ARRAY_EXPRESSION */,\n        loc,\n        elements\n    };\n}\nfunction createObjectExpression(properties, loc = locStub) {\n    return {\n        type: 15 /* NodeTypes.JS_OBJECT_EXPRESSION */,\n        loc,\n        properties\n    };\n}\nfunction createObjectProperty(key, value) {\n    return {\n        type: 16 /* NodeTypes.JS_PROPERTY */,\n        loc: locStub,\n        key: isString(key) ? createSimpleExpression(key, true) : key,\n        value\n    };\n}\nfunction createSimpleExpression(content, isStatic = false, loc = locStub, constType = 0 /* ConstantTypes.NOT_CONSTANT */) {\n    return {\n        type: 4 /* NodeTypes.SIMPLE_EXPRESSION */,\n        loc,\n        content,\n        isStatic,\n        constType: isStatic ? 3 /* ConstantTypes.CAN_STRINGIFY */ : constType\n    };\n}\nfunction createInterpolation(content, loc) {\n    return {\n        type: 5 /* NodeTypes.INTERPOLATION */,\n        loc,\n        content: isString(content)\n            ? createSimpleExpression(content, false, loc)\n            : content\n    };\n}\nfunction createCompoundExpression(children, loc = locStub) {\n    return {\n        type: 8 /* NodeTypes.COMPOUND_EXPRESSION */,\n        loc,\n        children\n    };\n}\nfunction createCallExpression(callee, args = [], loc = locStub) {\n    return {\n        type: 14 /* NodeTypes.JS_CALL_EXPRESSION */,\n        loc,\n        callee,\n        arguments: args\n    };\n}\nfunction createFunctionExpression(params, returns = undefined, newline = false, isSlot = false, loc = locStub) {\n    return {\n        type: 18 /* NodeTypes.JS_FUNCTION_EXPRESSION */,\n        params,\n        returns,\n        newline,\n        isSlot,\n        loc\n    };\n}\nfunction createConditionalExpression(test, consequent, alternate, newline = true) {\n    return {\n        type: 19 /* NodeTypes.JS_CONDITIONAL_EXPRESSION */,\n        test,\n        consequent,\n        alternate,\n        newline,\n        loc: locStub\n    };\n}\nfunction createCacheExpression(index, value, isVNode = false) {\n    return {\n        type: 20 /* NodeTypes.JS_CACHE_EXPRESSION */,\n        index,\n        value,\n        isVNode,\n        loc: locStub\n    };\n}\nfunction createBlockStatement(body) {\n    return {\n        type: 21 /* NodeTypes.JS_BLOCK_STATEMENT */,\n        body,\n        loc: locStub\n    };\n}\nfunction createTemplateLiteral(elements) {\n    return {\n        type: 22 /* NodeTypes.JS_TEMPLATE_LITERAL */,\n        elements,\n        loc: locStub\n    };\n}\nfunction createIfStatement(test, consequent, alternate) {\n    return {\n        type: 23 /* NodeTypes.JS_IF_STATEMENT */,\n        test,\n        consequent,\n        alternate,\n        loc: locStub\n    };\n}\nfunction createAssignmentExpression(left, right) {\n    return {\n        type: 24 /* NodeTypes.JS_ASSIGNMENT_EXPRESSION */,\n        left,\n        right,\n        loc: locStub\n    };\n}\nfunction createSequenceExpression(expressions) {\n    return {\n        type: 25 /* NodeTypes.JS_SEQUENCE_EXPRESSION */,\n        expressions,\n        loc: locStub\n    };\n}\nfunction createReturnStatement(returns) {\n    return {\n        type: 26 /* NodeTypes.JS_RETURN_STATEMENT */,\n        returns,\n        loc: locStub\n    };\n}\n\nconst isStaticExp = (p) => p.type === 4 /* NodeTypes.SIMPLE_EXPRESSION */ && p.isStatic;\nconst isBuiltInType = (tag, expected) => tag === expected || tag === hyphenate(expected);\nfunction isCoreComponent(tag) {\n    if (isBuiltInType(tag, 'Teleport')) {\n        return TELEPORT;\n    }\n    else if (isBuiltInType(tag, 'Suspense')) {\n        return SUSPENSE;\n    }\n    else if (isBuiltInType(tag, 'KeepAlive')) {\n        return KEEP_ALIVE;\n    }\n    else if (isBuiltInType(tag, 'BaseTransition')) {\n        return BASE_TRANSITION;\n    }\n}\nconst nonIdentifierRE = /^\\d|[^\\$\\w]/;\nconst isSimpleIdentifier = (name) => !nonIdentifierRE.test(name);\nconst validFirstIdentCharRE = /[A-Za-z_$\\xA0-\\uFFFF]/;\nconst validIdentCharRE = /[\\.\\?\\w$\\xA0-\\uFFFF]/;\nconst whitespaceRE = /\\s+[.[]\\s*|\\s*[.[]\\s+/g;\n/**\n * Simple lexer to check if an expression is a member expression. This is\n * lax and only checks validity at the root level (i.e. does not validate exps\n * inside square brackets), but it's ok since these are only used on template\n * expressions and false positives are invalid expressions in the first place.\n */\nconst isMemberExpressionBrowser = (path) => {\n    // remove whitespaces around . or [ first\n    path = path.trim().replace(whitespaceRE, s => s.trim());\n    let state = 0 /* MemberExpLexState.inMemberExp */;\n    let stateStack = [];\n    let currentOpenBracketCount = 0;\n    let currentOpenParensCount = 0;\n    let currentStringType = null;\n    for (let i = 0; i < path.length; i++) {\n        const char = path.charAt(i);\n        switch (state) {\n            case 0 /* MemberExpLexState.inMemberExp */:\n                if (char === '[') {\n                    stateStack.push(state);\n                    state = 1 /* MemberExpLexState.inBrackets */;\n                    currentOpenBracketCount++;\n                }\n                else if (char === '(') {\n                    stateStack.push(state);\n                    state = 2 /* MemberExpLexState.inParens */;\n                    currentOpenParensCount++;\n                }\n                else if (!(i === 0 ? validFirstIdentCharRE : validIdentCharRE).test(char)) {\n                    return false;\n                }\n                break;\n            case 1 /* MemberExpLexState.inBrackets */:\n                if (char === `'` || char === `\"` || char === '`') {\n                    stateStack.push(state);\n                    state = 3 /* MemberExpLexState.inString */;\n                    currentStringType = char;\n                }\n                else if (char === `[`) {\n                    currentOpenBracketCount++;\n                }\n                else if (char === `]`) {\n                    if (!--currentOpenBracketCount) {\n                        state = stateStack.pop();\n                    }\n                }\n                break;\n            case 2 /* MemberExpLexState.inParens */:\n                if (char === `'` || char === `\"` || char === '`') {\n                    stateStack.push(state);\n                    state = 3 /* MemberExpLexState.inString */;\n                    currentStringType = char;\n                }\n                else if (char === `(`) {\n                    currentOpenParensCount++;\n                }\n                else if (char === `)`) {\n                    // if the exp ends as a call then it should not be considered valid\n                    if (i === path.length - 1) {\n                        return false;\n                    }\n                    if (!--currentOpenParensCount) {\n                        state = stateStack.pop();\n                    }\n                }\n                break;\n            case 3 /* MemberExpLexState.inString */:\n                if (char === currentStringType) {\n                    state = stateStack.pop();\n                    currentStringType = null;\n                }\n                break;\n        }\n    }\n    return !currentOpenBracketCount && !currentOpenParensCount;\n};\nconst isMemberExpressionNode = NOOP\n    ;\nconst isMemberExpression = isMemberExpressionBrowser\n    ;\nfunction getInnerRange(loc, offset, length) {\n    const source = loc.source.slice(offset, offset + length);\n    const newLoc = {\n        source,\n        start: advancePositionWithClone(loc.start, loc.source, offset),\n        end: loc.end\n    };\n    if (length != null) {\n        newLoc.end = advancePositionWithClone(loc.start, loc.source, offset + length);\n    }\n    return newLoc;\n}\nfunction advancePositionWithClone(pos, source, numberOfCharacters = source.length) {\n    return advancePositionWithMutation(extend({}, pos), source, numberOfCharacters);\n}\n// advance by mutation without cloning (for performance reasons), since this\n// gets called a lot in the parser\nfunction advancePositionWithMutation(pos, source, numberOfCharacters = source.length) {\n    let linesCount = 0;\n    let lastNewLinePos = -1;\n    for (let i = 0; i < numberOfCharacters; i++) {\n        if (source.charCodeAt(i) === 10 /* newline char code */) {\n            linesCount++;\n            lastNewLinePos = i;\n        }\n    }\n    pos.offset += numberOfCharacters;\n    pos.line += linesCount;\n    pos.column =\n        lastNewLinePos === -1\n            ? pos.column + numberOfCharacters\n            : numberOfCharacters - lastNewLinePos;\n    return pos;\n}\nfunction assert(condition, msg) {\n    /* istanbul ignore if */\n    if (!condition) {\n        throw new Error(msg || `unexpected compiler condition`);\n    }\n}\nfunction findDir(node, name, allowEmpty = false) {\n    for (let i = 0; i < node.props.length; i++) {\n        const p = node.props[i];\n        if (p.type === 7 /* NodeTypes.DIRECTIVE */ &&\n            (allowEmpty || p.exp) &&\n            (isString(name) ? p.name === name : name.test(p.name))) {\n            return p;\n        }\n    }\n}\nfunction findProp(node, name, dynamicOnly = false, allowEmpty = false) {\n    for (let i = 0; i < node.props.length; i++) {\n        const p = node.props[i];\n        if (p.type === 6 /* NodeTypes.ATTRIBUTE */) {\n            if (dynamicOnly)\n                continue;\n            if (p.name === name && (p.value || allowEmpty)) {\n                return p;\n            }\n        }\n        else if (p.name === 'bind' &&\n            (p.exp || allowEmpty) &&\n            isStaticArgOf(p.arg, name)) {\n            return p;\n        }\n    }\n}\nfunction isStaticArgOf(arg, name) {\n    return !!(arg && isStaticExp(arg) && arg.content === name);\n}\nfunction hasDynamicKeyVBind(node) {\n    return node.props.some(p => p.type === 7 /* NodeTypes.DIRECTIVE */ &&\n        p.name === 'bind' &&\n        (!p.arg || // v-bind=\"obj\"\n            p.arg.type !== 4 /* NodeTypes.SIMPLE_EXPRESSION */ || // v-bind:[_ctx.foo]\n            !p.arg.isStatic) // v-bind:[foo]\n    );\n}\nfunction isText$1(node) {\n    return node.type === 5 /* NodeTypes.INTERPOLATION */ || node.type === 2 /* NodeTypes.TEXT */;\n}\nfunction isVSlot(p) {\n    return p.type === 7 /* NodeTypes.DIRECTIVE */ && p.name === 'slot';\n}\nfunction isTemplateNode(node) {\n    return (node.type === 1 /* NodeTypes.ELEMENT */ && node.tagType === 3 /* ElementTypes.TEMPLATE */);\n}\nfunction isSlotOutlet(node) {\n    return node.type === 1 /* NodeTypes.ELEMENT */ && node.tagType === 2 /* ElementTypes.SLOT */;\n}\nfunction getVNodeHelper(ssr, isComponent) {\n    return ssr || isComponent ? CREATE_VNODE : CREATE_ELEMENT_VNODE;\n}\nfunction getVNodeBlockHelper(ssr, isComponent) {\n    return ssr || isComponent ? CREATE_BLOCK : CREATE_ELEMENT_BLOCK;\n}\nconst propsHelperSet = new Set([NORMALIZE_PROPS, GUARD_REACTIVE_PROPS]);\nfunction getUnnormalizedProps(props, callPath = []) {\n    if (props &&\n        !isString(props) &&\n        props.type === 14 /* NodeTypes.JS_CALL_EXPRESSION */) {\n        const callee = props.callee;\n        if (!isString(callee) && propsHelperSet.has(callee)) {\n            return getUnnormalizedProps(props.arguments[0], callPath.concat(props));\n        }\n    }\n    return [props, callPath];\n}\nfunction injectProp(node, prop, context) {\n    let propsWithInjection;\n    /**\n     * 1. mergeProps(...)\n     * 2. toHandlers(...)\n     * 3. normalizeProps(...)\n     * 4. normalizeProps(guardReactiveProps(...))\n     *\n     * we need to get the real props before normalization\n     */\n    let props = node.type === 13 /* NodeTypes.VNODE_CALL */ ? node.props : node.arguments[2];\n    let callPath = [];\n    let parentCall;\n    if (props &&\n        !isString(props) &&\n        props.type === 14 /* NodeTypes.JS_CALL_EXPRESSION */) {\n        const ret = getUnnormalizedProps(props);\n        props = ret[0];\n        callPath = ret[1];\n        parentCall = callPath[callPath.length - 1];\n    }\n    if (props == null || isString(props)) {\n        propsWithInjection = createObjectExpression([prop]);\n    }\n    else if (props.type === 14 /* NodeTypes.JS_CALL_EXPRESSION */) {\n        // merged props... add ours\n        // only inject key to object literal if it's the first argument so that\n        // if doesn't override user provided keys\n        const first = props.arguments[0];\n        if (!isString(first) && first.type === 15 /* NodeTypes.JS_OBJECT_EXPRESSION */) {\n            // #6631\n            if (!hasProp(prop, first)) {\n                first.properties.unshift(prop);\n            }\n        }\n        else {\n            if (props.callee === TO_HANDLERS) {\n                // #2366\n                propsWithInjection = createCallExpression(context.helper(MERGE_PROPS), [\n                    createObjectExpression([prop]),\n                    props\n                ]);\n            }\n            else {\n                props.arguments.unshift(createObjectExpression([prop]));\n            }\n        }\n        !propsWithInjection && (propsWithInjection = props);\n    }\n    else if (props.type === 15 /* NodeTypes.JS_OBJECT_EXPRESSION */) {\n        if (!hasProp(prop, props)) {\n            props.properties.unshift(prop);\n        }\n        propsWithInjection = props;\n    }\n    else {\n        // single v-bind with expression, return a merged replacement\n        propsWithInjection = createCallExpression(context.helper(MERGE_PROPS), [\n            createObjectExpression([prop]),\n            props\n        ]);\n        // in the case of nested helper call, e.g. `normalizeProps(guardReactiveProps(props))`,\n        // it will be rewritten as `normalizeProps(mergeProps({ key: 0 }, props))`,\n        // the `guardReactiveProps` will no longer be needed\n        if (parentCall && parentCall.callee === GUARD_REACTIVE_PROPS) {\n            parentCall = callPath[callPath.length - 2];\n        }\n    }\n    if (node.type === 13 /* NodeTypes.VNODE_CALL */) {\n        if (parentCall) {\n            parentCall.arguments[0] = propsWithInjection;\n        }\n        else {\n            node.props = propsWithInjection;\n        }\n    }\n    else {\n        if (parentCall) {\n            parentCall.arguments[0] = propsWithInjection;\n        }\n        else {\n            node.arguments[2] = propsWithInjection;\n        }\n    }\n}\n// check existing key to avoid overriding user provided keys\nfunction hasProp(prop, props) {\n    let result = false;\n    if (prop.key.type === 4 /* NodeTypes.SIMPLE_EXPRESSION */) {\n        const propKeyName = prop.key.content;\n        result = props.properties.some(p => p.key.type === 4 /* NodeTypes.SIMPLE_EXPRESSION */ &&\n            p.key.content === propKeyName);\n    }\n    return result;\n}\nfunction toValidAssetId(name, type) {\n    // see issue#4422, we need adding identifier on validAssetId if variable `name` has specific character\n    return `_${type}_${name.replace(/[^\\w]/g, (searchValue, replaceValue) => {\n        return searchValue === '-' ? '_' : name.charCodeAt(replaceValue).toString();\n    })}`;\n}\n// Check if a node contains expressions that reference current context scope ids\nfunction hasScopeRef(node, ids) {\n    if (!node || Object.keys(ids).length === 0) {\n        return false;\n    }\n    switch (node.type) {\n        case 1 /* NodeTypes.ELEMENT */:\n            for (let i = 0; i < node.props.length; i++) {\n                const p = node.props[i];\n                if (p.type === 7 /* NodeTypes.DIRECTIVE */ &&\n                    (hasScopeRef(p.arg, ids) || hasScopeRef(p.exp, ids))) {\n                    return true;\n                }\n            }\n            return node.children.some(c => hasScopeRef(c, ids));\n        case 11 /* NodeTypes.FOR */:\n            if (hasScopeRef(node.source, ids)) {\n                return true;\n            }\n            return node.children.some(c => hasScopeRef(c, ids));\n        case 9 /* NodeTypes.IF */:\n            return node.branches.some(b => hasScopeRef(b, ids));\n        case 10 /* NodeTypes.IF_BRANCH */:\n            if (hasScopeRef(node.condition, ids)) {\n                return true;\n            }\n            return node.children.some(c => hasScopeRef(c, ids));\n        case 4 /* NodeTypes.SIMPLE_EXPRESSION */:\n            return (!node.isStatic &&\n                isSimpleIdentifier(node.content) &&\n                !!ids[node.content]);\n        case 8 /* NodeTypes.COMPOUND_EXPRESSION */:\n            return node.children.some(c => isObject(c) && hasScopeRef(c, ids));\n        case 5 /* NodeTypes.INTERPOLATION */:\n        case 12 /* NodeTypes.TEXT_CALL */:\n            return hasScopeRef(node.content, ids);\n        case 2 /* NodeTypes.TEXT */:\n        case 3 /* NodeTypes.COMMENT */:\n            return false;\n        default:\n            return false;\n    }\n}\nfunction getMemoedVNodeCall(node) {\n    if (node.type === 14 /* NodeTypes.JS_CALL_EXPRESSION */ && node.callee === WITH_MEMO) {\n        return node.arguments[1].returns;\n    }\n    else {\n        return node;\n    }\n}\nfunction makeBlock(node, { helper, removeHelper, inSSR }) {\n    if (!node.isBlock) {\n        node.isBlock = true;\n        removeHelper(getVNodeHelper(inSSR, node.isComponent));\n        helper(OPEN_BLOCK);\n        helper(getVNodeBlockHelper(inSSR, node.isComponent));\n    }\n}\n\nconst deprecationData = {\n    [\"COMPILER_IS_ON_ELEMENT\" /* CompilerDeprecationTypes.COMPILER_IS_ON_ELEMENT */]: {\n        message: `Platform-native elements with \"is\" prop will no longer be ` +\n            `treated as components in Vue 3 unless the \"is\" value is explicitly ` +\n            `prefixed with \"vue:\".`,\n        link: `https://v3-migration.vuejs.org/breaking-changes/custom-elements-interop.html`\n    },\n    [\"COMPILER_V_BIND_SYNC\" /* CompilerDeprecationTypes.COMPILER_V_BIND_SYNC */]: {\n        message: key => `.sync modifier for v-bind has been removed. Use v-model with ` +\n            `argument instead. \\`v-bind:${key}.sync\\` should be changed to ` +\n            `\\`v-model:${key}\\`.`,\n        link: `https://v3-migration.vuejs.org/breaking-changes/v-model.html`\n    },\n    [\"COMPILER_V_BIND_PROP\" /* CompilerDeprecationTypes.COMPILER_V_BIND_PROP */]: {\n        message: `.prop modifier for v-bind has been removed and no longer necessary. ` +\n            `Vue 3 will automatically set a binding as DOM property when appropriate.`\n    },\n    [\"COMPILER_V_BIND_OBJECT_ORDER\" /* CompilerDeprecationTypes.COMPILER_V_BIND_OBJECT_ORDER */]: {\n        message: `v-bind=\"obj\" usage is now order sensitive and behaves like JavaScript ` +\n            `object spread: it will now overwrite an existing non-mergeable attribute ` +\n            `that appears before v-bind in the case of conflict. ` +\n            `To retain 2.x behavior, move v-bind to make it the first attribute. ` +\n            `You can also suppress this warning if the usage is intended.`,\n        link: `https://v3-migration.vuejs.org/breaking-changes/v-bind.html`\n    },\n    [\"COMPILER_V_ON_NATIVE\" /* CompilerDeprecationTypes.COMPILER_V_ON_NATIVE */]: {\n        message: `.native modifier for v-on has been removed as is no longer necessary.`,\n        link: `https://v3-migration.vuejs.org/breaking-changes/v-on-native-modifier-removed.html`\n    },\n    [\"COMPILER_V_IF_V_FOR_PRECEDENCE\" /* CompilerDeprecationTypes.COMPILER_V_IF_V_FOR_PRECEDENCE */]: {\n        message: `v-if / v-for precedence when used on the same element has changed ` +\n            `in Vue 3: v-if now takes higher precedence and will no longer have ` +\n            `access to v-for scope variables. It is best to avoid the ambiguity ` +\n            `with <template> tags or use a computed property that filters v-for ` +\n            `data source.`,\n        link: `https://v3-migration.vuejs.org/breaking-changes/v-if-v-for.html`\n    },\n    [\"COMPILER_NATIVE_TEMPLATE\" /* CompilerDeprecationTypes.COMPILER_NATIVE_TEMPLATE */]: {\n        message: `<template> with no special directives will render as a native template ` +\n            `element instead of its inner content in Vue 3.`\n    },\n    [\"COMPILER_INLINE_TEMPLATE\" /* CompilerDeprecationTypes.COMPILER_INLINE_TEMPLATE */]: {\n        message: `\"inline-template\" has been removed in Vue 3.`,\n        link: `https://v3-migration.vuejs.org/breaking-changes/inline-template-attribute.html`\n    },\n    [\"COMPILER_FILTER\" /* CompilerDeprecationTypes.COMPILER_FILTERS */]: {\n        message: `filters have been removed in Vue 3. ` +\n            `The \"|\" symbol will be treated as native JavaScript bitwise OR operator. ` +\n            `Use method calls or computed properties instead.`,\n        link: `https://v3-migration.vuejs.org/breaking-changes/filters.html`\n    }\n};\nfunction getCompatValue(key, context) {\n    const config = context.options\n        ? context.options.compatConfig\n        : context.compatConfig;\n    const value = config && config[key];\n    if (key === 'MODE') {\n        return value || 3; // compiler defaults to v3 behavior\n    }\n    else {\n        return value;\n    }\n}\nfunction isCompatEnabled(key, context) {\n    const mode = getCompatValue('MODE', context);\n    const value = getCompatValue(key, context);\n    // in v3 mode, only enable if explicitly set to true\n    // otherwise enable for any non-false value\n    return mode === 3 ? value === true : value !== false;\n}\nfunction checkCompatEnabled(key, context, loc, ...args) {\n    const enabled = isCompatEnabled(key, context);\n    if (enabled) {\n        warnDeprecation(key, context, loc, ...args);\n    }\n    return enabled;\n}\nfunction warnDeprecation(key, context, loc, ...args) {\n    const val = getCompatValue(key, context);\n    if (val === 'suppress-warning') {\n        return;\n    }\n    const { message, link } = deprecationData[key];\n    const msg = `(deprecation ${key}) ${typeof message === 'function' ? message(...args) : message}${link ? `\\n  Details: ${link}` : ``}`;\n    const err = new SyntaxError(msg);\n    err.code = key;\n    if (loc)\n        err.loc = loc;\n    context.onWarn(err);\n}\n\n// The default decoder only provides escapes for characters reserved as part of\n// the template syntax, and is only used if the custom renderer did not provide\n// a platform-specific decoder.\nconst decodeRE = /&(gt|lt|amp|apos|quot);/g;\nconst decodeMap = {\n    gt: '>',\n    lt: '<',\n    amp: '&',\n    apos: \"'\",\n    quot: '\"'\n};\nconst defaultParserOptions = {\n    delimiters: [`{{`, `}}`],\n    getNamespace: () => 0 /* Namespaces.HTML */,\n    getTextMode: () => 0 /* TextModes.DATA */,\n    isVoidTag: NO,\n    isPreTag: NO,\n    isCustomElement: NO,\n    decodeEntities: (rawText) => rawText.replace(decodeRE, (_, p1) => decodeMap[p1]),\n    onError: defaultOnError,\n    onWarn: defaultOnWarn,\n    comments: true\n};\nfunction baseParse(content, options = {}) {\n    const context = createParserContext(content, options);\n    const start = getCursor(context);\n    return createRoot(parseChildren(context, 0 /* TextModes.DATA */, []), getSelection(context, start));\n}\nfunction createParserContext(content, rawOptions) {\n    const options = extend({}, defaultParserOptions);\n    let key;\n    for (key in rawOptions) {\n        // @ts-ignore\n        options[key] =\n            rawOptions[key] === undefined\n                ? defaultParserOptions[key]\n                : rawOptions[key];\n    }\n    return {\n        options,\n        column: 1,\n        line: 1,\n        offset: 0,\n        originalSource: content,\n        source: content,\n        inPre: false,\n        inVPre: false,\n        onWarn: options.onWarn\n    };\n}\nfunction parseChildren(context, mode, ancestors) {\n    const parent = last(ancestors);\n    const ns = parent ? parent.ns : 0 /* Namespaces.HTML */;\n    const nodes = [];\n    while (!isEnd(context, mode, ancestors)) {\n        const s = context.source;\n        let node = undefined;\n        if (mode === 0 /* TextModes.DATA */ || mode === 1 /* TextModes.RCDATA */) {\n            if (!context.inVPre && startsWith(s, context.options.delimiters[0])) {\n                // '{{'\n                node = parseInterpolation(context, mode);\n            }\n            else if (mode === 0 /* TextModes.DATA */ && s[0] === '<') {\n                // https://html.spec.whatwg.org/multipage/parsing.html#tag-open-state\n                if (s.length === 1) {\n                    emitError(context, 5 /* ErrorCodes.EOF_BEFORE_TAG_NAME */, 1);\n                }\n                else if (s[1] === '!') {\n                    // https://html.spec.whatwg.org/multipage/parsing.html#markup-declaration-open-state\n                    if (startsWith(s, '<!--')) {\n                        node = parseComment(context);\n                    }\n                    else if (startsWith(s, '<!DOCTYPE')) {\n                        // Ignore DOCTYPE by a limitation.\n                        node = parseBogusComment(context);\n                    }\n                    else if (startsWith(s, '<![CDATA[')) {\n                        if (ns !== 0 /* Namespaces.HTML */) {\n                            node = parseCDATA(context, ancestors);\n                        }\n                        else {\n                            emitError(context, 1 /* ErrorCodes.CDATA_IN_HTML_CONTENT */);\n                            node = parseBogusComment(context);\n                        }\n                    }\n                    else {\n                        emitError(context, 11 /* ErrorCodes.INCORRECTLY_OPENED_COMMENT */);\n                        node = parseBogusComment(context);\n                    }\n                }\n                else if (s[1] === '/') {\n                    // https://html.spec.whatwg.org/multipage/parsing.html#end-tag-open-state\n                    if (s.length === 2) {\n                        emitError(context, 5 /* ErrorCodes.EOF_BEFORE_TAG_NAME */, 2);\n                    }\n                    else if (s[2] === '>') {\n                        emitError(context, 14 /* ErrorCodes.MISSING_END_TAG_NAME */, 2);\n                        advanceBy(context, 3);\n                        continue;\n                    }\n                    else if (/[a-z]/i.test(s[2])) {\n                        emitError(context, 23 /* ErrorCodes.X_INVALID_END_TAG */);\n                        parseTag(context, 1 /* TagType.End */, parent);\n                        continue;\n                    }\n                    else {\n                        emitError(context, 12 /* ErrorCodes.INVALID_FIRST_CHARACTER_OF_TAG_NAME */, 2);\n                        node = parseBogusComment(context);\n                    }\n                }\n                else if (/[a-z]/i.test(s[1])) {\n                    node = parseElement(context, ancestors);\n                    // 2.x <template> with no directive compat\n                    if (isCompatEnabled(\"COMPILER_NATIVE_TEMPLATE\" /* CompilerDeprecationTypes.COMPILER_NATIVE_TEMPLATE */, context) &&\n                        node &&\n                        node.tag === 'template' &&\n                        !node.props.some(p => p.type === 7 /* NodeTypes.DIRECTIVE */ &&\n                            isSpecialTemplateDirective(p.name))) {\n                        warnDeprecation(\"COMPILER_NATIVE_TEMPLATE\" /* CompilerDeprecationTypes.COMPILER_NATIVE_TEMPLATE */, context, node.loc);\n                        node = node.children;\n                    }\n                }\n                else if (s[1] === '?') {\n                    emitError(context, 21 /* ErrorCodes.UNEXPECTED_QUESTION_MARK_INSTEAD_OF_TAG_NAME */, 1);\n                    node = parseBogusComment(context);\n                }\n                else {\n                    emitError(context, 12 /* ErrorCodes.INVALID_FIRST_CHARACTER_OF_TAG_NAME */, 1);\n                }\n            }\n        }\n        if (!node) {\n            node = parseText(context, mode);\n        }\n        if (isArray(node)) {\n            for (let i = 0; i < node.length; i++) {\n                pushNode(nodes, node[i]);\n            }\n        }\n        else {\n            pushNode(nodes, node);\n        }\n    }\n    // Whitespace handling strategy like v2\n    let removedWhitespace = false;\n    if (mode !== 2 /* TextModes.RAWTEXT */ && mode !== 1 /* TextModes.RCDATA */) {\n        const shouldCondense = context.options.whitespace !== 'preserve';\n        for (let i = 0; i < nodes.length; i++) {\n            const node = nodes[i];\n            if (node.type === 2 /* NodeTypes.TEXT */) {\n                if (!context.inPre) {\n                    if (!/[^\\t\\r\\n\\f ]/.test(node.content)) {\n                        const prev = nodes[i - 1];\n                        const next = nodes[i + 1];\n                        // Remove if:\n                        // - the whitespace is the first or last node, or:\n                        // - (condense mode) the whitespace is between twos comments, or:\n                        // - (condense mode) the whitespace is between comment and element, or:\n                        // - (condense mode) the whitespace is between two elements AND contains newline\n                        if (!prev ||\n                            !next ||\n                            (shouldCondense &&\n                                ((prev.type === 3 /* NodeTypes.COMMENT */ &&\n                                    next.type === 3 /* NodeTypes.COMMENT */) ||\n                                    (prev.type === 3 /* NodeTypes.COMMENT */ &&\n                                        next.type === 1 /* NodeTypes.ELEMENT */) ||\n                                    (prev.type === 1 /* NodeTypes.ELEMENT */ &&\n                                        next.type === 3 /* NodeTypes.COMMENT */) ||\n                                    (prev.type === 1 /* NodeTypes.ELEMENT */ &&\n                                        next.type === 1 /* NodeTypes.ELEMENT */ &&\n                                        /[\\r\\n]/.test(node.content))))) {\n                            removedWhitespace = true;\n                            nodes[i] = null;\n                        }\n                        else {\n                            // Otherwise, the whitespace is condensed into a single space\n                            node.content = ' ';\n                        }\n                    }\n                    else if (shouldCondense) {\n                        // in condense mode, consecutive whitespaces in text are condensed\n                        // down to a single space.\n                        node.content = node.content.replace(/[\\t\\r\\n\\f ]+/g, ' ');\n                    }\n                }\n                else {\n                    // #6410 normalize windows newlines in <pre>:\n                    // in SSR, browsers normalize server-rendered \\r\\n into a single \\n\n                    // in the DOM\n                    node.content = node.content.replace(/\\r\\n/g, '\\n');\n                }\n            }\n            // Remove comment nodes if desired by configuration.\n            else if (node.type === 3 /* NodeTypes.COMMENT */ && !context.options.comments) {\n                removedWhitespace = true;\n                nodes[i] = null;\n            }\n        }\n        if (context.inPre && parent && context.options.isPreTag(parent.tag)) {\n            // remove leading newline per html spec\n            // https://html.spec.whatwg.org/multipage/grouping-content.html#the-pre-element\n            const first = nodes[0];\n            if (first && first.type === 2 /* NodeTypes.TEXT */) {\n                first.content = first.content.replace(/^\\r?\\n/, '');\n            }\n        }\n    }\n    return removedWhitespace ? nodes.filter(Boolean) : nodes;\n}\nfunction pushNode(nodes, node) {\n    if (node.type === 2 /* NodeTypes.TEXT */) {\n        const prev = last(nodes);\n        // Merge if both this and the previous node are text and those are\n        // consecutive. This happens for cases like \"a < b\".\n        if (prev &&\n            prev.type === 2 /* NodeTypes.TEXT */ &&\n            prev.loc.end.offset === node.loc.start.offset) {\n            prev.content += node.content;\n            prev.loc.end = node.loc.end;\n            prev.loc.source += node.loc.source;\n            return;\n        }\n    }\n    nodes.push(node);\n}\nfunction parseCDATA(context, ancestors) {\n    advanceBy(context, 9);\n    const nodes = parseChildren(context, 3 /* TextModes.CDATA */, ancestors);\n    if (context.source.length === 0) {\n        emitError(context, 6 /* ErrorCodes.EOF_IN_CDATA */);\n    }\n    else {\n        advanceBy(context, 3);\n    }\n    return nodes;\n}\nfunction parseComment(context) {\n    const start = getCursor(context);\n    let content;\n    // Regular comment.\n    const match = /--(\\!)?>/.exec(context.source);\n    if (!match) {\n        content = context.source.slice(4);\n        advanceBy(context, context.source.length);\n        emitError(context, 7 /* ErrorCodes.EOF_IN_COMMENT */);\n    }\n    else {\n        if (match.index <= 3) {\n            emitError(context, 0 /* ErrorCodes.ABRUPT_CLOSING_OF_EMPTY_COMMENT */);\n        }\n        if (match[1]) {\n            emitError(context, 10 /* ErrorCodes.INCORRECTLY_CLOSED_COMMENT */);\n        }\n        content = context.source.slice(4, match.index);\n        // Advancing with reporting nested comments.\n        const s = context.source.slice(0, match.index);\n        let prevIndex = 1, nestedIndex = 0;\n        while ((nestedIndex = s.indexOf('<!--', prevIndex)) !== -1) {\n            advanceBy(context, nestedIndex - prevIndex + 1);\n            if (nestedIndex + 4 < s.length) {\n                emitError(context, 16 /* ErrorCodes.NESTED_COMMENT */);\n            }\n            prevIndex = nestedIndex + 1;\n        }\n        advanceBy(context, match.index + match[0].length - prevIndex + 1);\n    }\n    return {\n        type: 3 /* NodeTypes.COMMENT */,\n        content,\n        loc: getSelection(context, start)\n    };\n}\nfunction parseBogusComment(context) {\n    const start = getCursor(context);\n    const contentStart = context.source[1] === '?' ? 1 : 2;\n    let content;\n    const closeIndex = context.source.indexOf('>');\n    if (closeIndex === -1) {\n        content = context.source.slice(contentStart);\n        advanceBy(context, context.source.length);\n    }\n    else {\n        content = context.source.slice(contentStart, closeIndex);\n        advanceBy(context, closeIndex + 1);\n    }\n    return {\n        type: 3 /* NodeTypes.COMMENT */,\n        content,\n        loc: getSelection(context, start)\n    };\n}\nfunction parseElement(context, ancestors) {\n    // Start tag.\n    const wasInPre = context.inPre;\n    const wasInVPre = context.inVPre;\n    const parent = last(ancestors);\n    const element = parseTag(context, 0 /* TagType.Start */, parent);\n    const isPreBoundary = context.inPre && !wasInPre;\n    const isVPreBoundary = context.inVPre && !wasInVPre;\n    if (element.isSelfClosing || context.options.isVoidTag(element.tag)) {\n        // #4030 self-closing <pre> tag\n        if (isPreBoundary) {\n            context.inPre = false;\n        }\n        if (isVPreBoundary) {\n            context.inVPre = false;\n        }\n        return element;\n    }\n    // Children.\n    ancestors.push(element);\n    const mode = context.options.getTextMode(element, parent);\n    const children = parseChildren(context, mode, ancestors);\n    ancestors.pop();\n    // 2.x inline-template compat\n    {\n        const inlineTemplateProp = element.props.find(p => p.type === 6 /* NodeTypes.ATTRIBUTE */ && p.name === 'inline-template');\n        if (inlineTemplateProp &&\n            checkCompatEnabled(\"COMPILER_INLINE_TEMPLATE\" /* CompilerDeprecationTypes.COMPILER_INLINE_TEMPLATE */, context, inlineTemplateProp.loc)) {\n            const loc = getSelection(context, element.loc.end);\n            inlineTemplateProp.value = {\n                type: 2 /* NodeTypes.TEXT */,\n                content: loc.source,\n                loc\n            };\n        }\n    }\n    element.children = children;\n    // End tag.\n    if (startsWithEndTagOpen(context.source, element.tag)) {\n        parseTag(context, 1 /* TagType.End */, parent);\n    }\n    else {\n        emitError(context, 24 /* ErrorCodes.X_MISSING_END_TAG */, 0, element.loc.start);\n        if (context.source.length === 0 && element.tag.toLowerCase() === 'script') {\n            const first = children[0];\n            if (first && startsWith(first.loc.source, '<!--')) {\n                emitError(context, 8 /* ErrorCodes.EOF_IN_SCRIPT_HTML_COMMENT_LIKE_TEXT */);\n            }\n        }\n    }\n    element.loc = getSelection(context, element.loc.start);\n    if (isPreBoundary) {\n        context.inPre = false;\n    }\n    if (isVPreBoundary) {\n        context.inVPre = false;\n    }\n    return element;\n}\nconst isSpecialTemplateDirective = /*#__PURE__*/ makeMap(`if,else,else-if,for,slot`);\nfunction parseTag(context, type, parent) {\n    // Tag open.\n    const start = getCursor(context);\n    const match = /^<\\/?([a-z][^\\t\\r\\n\\f />]*)/i.exec(context.source);\n    const tag = match[1];\n    const ns = context.options.getNamespace(tag, parent);\n    advanceBy(context, match[0].length);\n    advanceSpaces(context);\n    // save current state in case we need to re-parse attributes with v-pre\n    const cursor = getCursor(context);\n    const currentSource = context.source;\n    // check <pre> tag\n    if (context.options.isPreTag(tag)) {\n        context.inPre = true;\n    }\n    // Attributes.\n    let props = parseAttributes(context, type);\n    // check v-pre\n    if (type === 0 /* TagType.Start */ &&\n        !context.inVPre &&\n        props.some(p => p.type === 7 /* NodeTypes.DIRECTIVE */ && p.name === 'pre')) {\n        context.inVPre = true;\n        // reset context\n        extend(context, cursor);\n        context.source = currentSource;\n        // re-parse attrs and filter out v-pre itself\n        props = parseAttributes(context, type).filter(p => p.name !== 'v-pre');\n    }\n    // Tag close.\n    let isSelfClosing = false;\n    if (context.source.length === 0) {\n        emitError(context, 9 /* ErrorCodes.EOF_IN_TAG */);\n    }\n    else {\n        isSelfClosing = startsWith(context.source, '/>');\n        if (type === 1 /* TagType.End */ && isSelfClosing) {\n            emitError(context, 4 /* ErrorCodes.END_TAG_WITH_TRAILING_SOLIDUS */);\n        }\n        advanceBy(context, isSelfClosing ? 2 : 1);\n    }\n    if (type === 1 /* TagType.End */) {\n        return;\n    }\n    // 2.x deprecation checks\n    if (isCompatEnabled(\"COMPILER_V_IF_V_FOR_PRECEDENCE\" /* CompilerDeprecationTypes.COMPILER_V_IF_V_FOR_PRECEDENCE */, context)) {\n        let hasIf = false;\n        let hasFor = false;\n        for (let i = 0; i < props.length; i++) {\n            const p = props[i];\n            if (p.type === 7 /* NodeTypes.DIRECTIVE */) {\n                if (p.name === 'if') {\n                    hasIf = true;\n                }\n                else if (p.name === 'for') {\n                    hasFor = true;\n                }\n            }\n            if (hasIf && hasFor) {\n                warnDeprecation(\"COMPILER_V_IF_V_FOR_PRECEDENCE\" /* CompilerDeprecationTypes.COMPILER_V_IF_V_FOR_PRECEDENCE */, context, getSelection(context, start));\n                break;\n            }\n        }\n    }\n    let tagType = 0 /* ElementTypes.ELEMENT */;\n    if (!context.inVPre) {\n        if (tag === 'slot') {\n            tagType = 2 /* ElementTypes.SLOT */;\n        }\n        else if (tag === 'template') {\n            if (props.some(p => p.type === 7 /* NodeTypes.DIRECTIVE */ && isSpecialTemplateDirective(p.name))) {\n                tagType = 3 /* ElementTypes.TEMPLATE */;\n            }\n        }\n        else if (isComponent(tag, props, context)) {\n            tagType = 1 /* ElementTypes.COMPONENT */;\n        }\n    }\n    return {\n        type: 1 /* NodeTypes.ELEMENT */,\n        ns,\n        tag,\n        tagType,\n        props,\n        isSelfClosing,\n        children: [],\n        loc: getSelection(context, start),\n        codegenNode: undefined // to be created during transform phase\n    };\n}\nfunction isComponent(tag, props, context) {\n    const options = context.options;\n    if (options.isCustomElement(tag)) {\n        return false;\n    }\n    if (tag === 'component' ||\n        /^[A-Z]/.test(tag) ||\n        isCoreComponent(tag) ||\n        (options.isBuiltInComponent && options.isBuiltInComponent(tag)) ||\n        (options.isNativeTag && !options.isNativeTag(tag))) {\n        return true;\n    }\n    // at this point the tag should be a native tag, but check for potential \"is\"\n    // casting\n    for (let i = 0; i < props.length; i++) {\n        const p = props[i];\n        if (p.type === 6 /* NodeTypes.ATTRIBUTE */) {\n            if (p.name === 'is' && p.value) {\n                if (p.value.content.startsWith('vue:')) {\n                    return true;\n                }\n                else if (checkCompatEnabled(\"COMPILER_IS_ON_ELEMENT\" /* CompilerDeprecationTypes.COMPILER_IS_ON_ELEMENT */, context, p.loc)) {\n                    return true;\n                }\n            }\n        }\n        else {\n            // directive\n            // v-is (TODO Deprecate)\n            if (p.name === 'is') {\n                return true;\n            }\n            else if (\n            // :is on plain element - only treat as component in compat mode\n            p.name === 'bind' &&\n                isStaticArgOf(p.arg, 'is') &&\n                true &&\n                checkCompatEnabled(\"COMPILER_IS_ON_ELEMENT\" /* CompilerDeprecationTypes.COMPILER_IS_ON_ELEMENT */, context, p.loc)) {\n                return true;\n            }\n        }\n    }\n}\nfunction parseAttributes(context, type) {\n    const props = [];\n    const attributeNames = new Set();\n    while (context.source.length > 0 &&\n        !startsWith(context.source, '>') &&\n        !startsWith(context.source, '/>')) {\n        if (startsWith(context.source, '/')) {\n            emitError(context, 22 /* ErrorCodes.UNEXPECTED_SOLIDUS_IN_TAG */);\n            advanceBy(context, 1);\n            advanceSpaces(context);\n            continue;\n        }\n        if (type === 1 /* TagType.End */) {\n            emitError(context, 3 /* ErrorCodes.END_TAG_WITH_ATTRIBUTES */);\n        }\n        const attr = parseAttribute(context, attributeNames);\n        // Trim whitespace between class\n        // https://github.com/vuejs/core/issues/4251\n        if (attr.type === 6 /* NodeTypes.ATTRIBUTE */ &&\n            attr.value &&\n            attr.name === 'class') {\n            attr.value.content = attr.value.content.replace(/\\s+/g, ' ').trim();\n        }\n        if (type === 0 /* TagType.Start */) {\n            props.push(attr);\n        }\n        if (/^[^\\t\\r\\n\\f />]/.test(context.source)) {\n            emitError(context, 15 /* ErrorCodes.MISSING_WHITESPACE_BETWEEN_ATTRIBUTES */);\n        }\n        advanceSpaces(context);\n    }\n    return props;\n}\nfunction parseAttribute(context, nameSet) {\n    // Name.\n    const start = getCursor(context);\n    const match = /^[^\\t\\r\\n\\f />][^\\t\\r\\n\\f />=]*/.exec(context.source);\n    const name = match[0];\n    if (nameSet.has(name)) {\n        emitError(context, 2 /* ErrorCodes.DUPLICATE_ATTRIBUTE */);\n    }\n    nameSet.add(name);\n    if (name[0] === '=') {\n        emitError(context, 19 /* ErrorCodes.UNEXPECTED_EQUALS_SIGN_BEFORE_ATTRIBUTE_NAME */);\n    }\n    {\n        const pattern = /[\"'<]/g;\n        let m;\n        while ((m = pattern.exec(name))) {\n            emitError(context, 17 /* ErrorCodes.UNEXPECTED_CHARACTER_IN_ATTRIBUTE_NAME */, m.index);\n        }\n    }\n    advanceBy(context, name.length);\n    // Value\n    let value = undefined;\n    if (/^[\\t\\r\\n\\f ]*=/.test(context.source)) {\n        advanceSpaces(context);\n        advanceBy(context, 1);\n        advanceSpaces(context);\n        value = parseAttributeValue(context);\n        if (!value) {\n            emitError(context, 13 /* ErrorCodes.MISSING_ATTRIBUTE_VALUE */);\n        }\n    }\n    const loc = getSelection(context, start);\n    if (!context.inVPre && /^(v-[A-Za-z0-9-]|:|\\.|@|#)/.test(name)) {\n        const match = /(?:^v-([a-z0-9-]+))?(?:(?::|^\\.|^@|^#)(\\[[^\\]]+\\]|[^\\.]+))?(.+)?$/i.exec(name);\n        let isPropShorthand = startsWith(name, '.');\n        let dirName = match[1] ||\n            (isPropShorthand || startsWith(name, ':')\n                ? 'bind'\n                : startsWith(name, '@')\n                    ? 'on'\n                    : 'slot');\n        let arg;\n        if (match[2]) {\n            const isSlot = dirName === 'slot';\n            const startOffset = name.lastIndexOf(match[2]);\n            const loc = getSelection(context, getNewPosition(context, start, startOffset), getNewPosition(context, start, startOffset + match[2].length + ((isSlot && match[3]) || '').length));\n            let content = match[2];\n            let isStatic = true;\n            if (content.startsWith('[')) {\n                isStatic = false;\n                if (!content.endsWith(']')) {\n                    emitError(context, 27 /* ErrorCodes.X_MISSING_DYNAMIC_DIRECTIVE_ARGUMENT_END */);\n                    content = content.slice(1);\n                }\n                else {\n                    content = content.slice(1, content.length - 1);\n                }\n            }\n            else if (isSlot) {\n                // #1241 special case for v-slot: vuetify relies extensively on slot\n                // names containing dots. v-slot doesn't have any modifiers and Vue 2.x\n                // supports such usage so we are keeping it consistent with 2.x.\n                content += match[3] || '';\n            }\n            arg = {\n                type: 4 /* NodeTypes.SIMPLE_EXPRESSION */,\n                content,\n                isStatic,\n                constType: isStatic\n                    ? 3 /* ConstantTypes.CAN_STRINGIFY */\n                    : 0 /* ConstantTypes.NOT_CONSTANT */,\n                loc\n            };\n        }\n        if (value && value.isQuoted) {\n            const valueLoc = value.loc;\n            valueLoc.start.offset++;\n            valueLoc.start.column++;\n            valueLoc.end = advancePositionWithClone(valueLoc.start, value.content);\n            valueLoc.source = valueLoc.source.slice(1, -1);\n        }\n        const modifiers = match[3] ? match[3].slice(1).split('.') : [];\n        if (isPropShorthand)\n            modifiers.push('prop');\n        // 2.x compat v-bind:foo.sync -> v-model:foo\n        if (dirName === 'bind' && arg) {\n            if (modifiers.includes('sync') &&\n                checkCompatEnabled(\"COMPILER_V_BIND_SYNC\" /* CompilerDeprecationTypes.COMPILER_V_BIND_SYNC */, context, loc, arg.loc.source)) {\n                dirName = 'model';\n                modifiers.splice(modifiers.indexOf('sync'), 1);\n            }\n            if (modifiers.includes('prop')) {\n                checkCompatEnabled(\"COMPILER_V_BIND_PROP\" /* CompilerDeprecationTypes.COMPILER_V_BIND_PROP */, context, loc);\n            }\n        }\n        return {\n            type: 7 /* NodeTypes.DIRECTIVE */,\n            name: dirName,\n            exp: value && {\n                type: 4 /* NodeTypes.SIMPLE_EXPRESSION */,\n                content: value.content,\n                isStatic: false,\n                // Treat as non-constant by default. This can be potentially set to\n                // other values by `transformExpression` to make it eligible for hoisting.\n                constType: 0 /* ConstantTypes.NOT_CONSTANT */,\n                loc: value.loc\n            },\n            arg,\n            modifiers,\n            loc\n        };\n    }\n    // missing directive name or illegal directive name\n    if (!context.inVPre && startsWith(name, 'v-')) {\n        emitError(context, 26 /* ErrorCodes.X_MISSING_DIRECTIVE_NAME */);\n    }\n    return {\n        type: 6 /* NodeTypes.ATTRIBUTE */,\n        name,\n        value: value && {\n            type: 2 /* NodeTypes.TEXT */,\n            content: value.content,\n            loc: value.loc\n        },\n        loc\n    };\n}\nfunction parseAttributeValue(context) {\n    const start = getCursor(context);\n    let content;\n    const quote = context.source[0];\n    const isQuoted = quote === `\"` || quote === `'`;\n    if (isQuoted) {\n        // Quoted value.\n        advanceBy(context, 1);\n        const endIndex = context.source.indexOf(quote);\n        if (endIndex === -1) {\n            content = parseTextData(context, context.source.length, 4 /* TextModes.ATTRIBUTE_VALUE */);\n        }\n        else {\n            content = parseTextData(context, endIndex, 4 /* TextModes.ATTRIBUTE_VALUE */);\n            advanceBy(context, 1);\n        }\n    }\n    else {\n        // Unquoted\n        const match = /^[^\\t\\r\\n\\f >]+/.exec(context.source);\n        if (!match) {\n            return undefined;\n        }\n        const unexpectedChars = /[\"'<=`]/g;\n        let m;\n        while ((m = unexpectedChars.exec(match[0]))) {\n            emitError(context, 18 /* ErrorCodes.UNEXPECTED_CHARACTER_IN_UNQUOTED_ATTRIBUTE_VALUE */, m.index);\n        }\n        content = parseTextData(context, match[0].length, 4 /* TextModes.ATTRIBUTE_VALUE */);\n    }\n    return { content, isQuoted, loc: getSelection(context, start) };\n}\nfunction parseInterpolation(context, mode) {\n    const [open, close] = context.options.delimiters;\n    const closeIndex = context.source.indexOf(close, open.length);\n    if (closeIndex === -1) {\n        emitError(context, 25 /* ErrorCodes.X_MISSING_INTERPOLATION_END */);\n        return undefined;\n    }\n    const start = getCursor(context);\n    advanceBy(context, open.length);\n    const innerStart = getCursor(context);\n    const innerEnd = getCursor(context);\n    const rawContentLength = closeIndex - open.length;\n    const rawContent = context.source.slice(0, rawContentLength);\n    const preTrimContent = parseTextData(context, rawContentLength, mode);\n    const content = preTrimContent.trim();\n    const startOffset = preTrimContent.indexOf(content);\n    if (startOffset > 0) {\n        advancePositionWithMutation(innerStart, rawContent, startOffset);\n    }\n    const endOffset = rawContentLength - (preTrimContent.length - content.length - startOffset);\n    advancePositionWithMutation(innerEnd, rawContent, endOffset);\n    advanceBy(context, close.length);\n    return {\n        type: 5 /* NodeTypes.INTERPOLATION */,\n        content: {\n            type: 4 /* NodeTypes.SIMPLE_EXPRESSION */,\n            isStatic: false,\n            // Set `isConstant` to false by default and will decide in transformExpression\n            constType: 0 /* ConstantTypes.NOT_CONSTANT */,\n            content,\n            loc: getSelection(context, innerStart, innerEnd)\n        },\n        loc: getSelection(context, start)\n    };\n}\nfunction parseText(context, mode) {\n    const endTokens = mode === 3 /* TextModes.CDATA */ ? [']]>'] : ['<', context.options.delimiters[0]];\n    let endIndex = context.source.length;\n    for (let i = 0; i < endTokens.length; i++) {\n        const index = context.source.indexOf(endTokens[i], 1);\n        if (index !== -1 && endIndex > index) {\n            endIndex = index;\n        }\n    }\n    const start = getCursor(context);\n    const content = parseTextData(context, endIndex, mode);\n    return {\n        type: 2 /* NodeTypes.TEXT */,\n        content,\n        loc: getSelection(context, start)\n    };\n}\n/**\n * Get text data with a given length from the current location.\n * This translates HTML entities in the text data.\n */\nfunction parseTextData(context, length, mode) {\n    const rawText = context.source.slice(0, length);\n    advanceBy(context, length);\n    if (mode === 2 /* TextModes.RAWTEXT */ ||\n        mode === 3 /* TextModes.CDATA */ ||\n        !rawText.includes('&')) {\n        return rawText;\n    }\n    else {\n        // DATA or RCDATA containing \"&\"\". Entity decoding required.\n        return context.options.decodeEntities(rawText, mode === 4 /* TextModes.ATTRIBUTE_VALUE */);\n    }\n}\nfunction getCursor(context) {\n    const { column, line, offset } = context;\n    return { column, line, offset };\n}\nfunction getSelection(context, start, end) {\n    end = end || getCursor(context);\n    return {\n        start,\n        end,\n        source: context.originalSource.slice(start.offset, end.offset)\n    };\n}\nfunction last(xs) {\n    return xs[xs.length - 1];\n}\nfunction startsWith(source, searchString) {\n    return source.startsWith(searchString);\n}\nfunction advanceBy(context, numberOfCharacters) {\n    const { source } = context;\n    advancePositionWithMutation(context, source, numberOfCharacters);\n    context.source = source.slice(numberOfCharacters);\n}\nfunction advanceSpaces(context) {\n    const match = /^[\\t\\r\\n\\f ]+/.exec(context.source);\n    if (match) {\n        advanceBy(context, match[0].length);\n    }\n}\nfunction getNewPosition(context, start, numberOfCharacters) {\n    return advancePositionWithClone(start, context.originalSource.slice(start.offset, numberOfCharacters), numberOfCharacters);\n}\nfunction emitError(context, code, offset, loc = getCursor(context)) {\n    if (offset) {\n        loc.offset += offset;\n        loc.column += offset;\n    }\n    context.options.onError(createCompilerError(code, {\n        start: loc,\n        end: loc,\n        source: ''\n    }));\n}\nfunction isEnd(context, mode, ancestors) {\n    const s = context.source;\n    switch (mode) {\n        case 0 /* TextModes.DATA */:\n            if (startsWith(s, '</')) {\n                // TODO: probably bad performance\n                for (let i = ancestors.length - 1; i >= 0; --i) {\n                    if (startsWithEndTagOpen(s, ancestors[i].tag)) {\n                        return true;\n                    }\n                }\n            }\n            break;\n        case 1 /* TextModes.RCDATA */:\n        case 2 /* TextModes.RAWTEXT */: {\n            const parent = last(ancestors);\n            if (parent && startsWithEndTagOpen(s, parent.tag)) {\n                return true;\n            }\n            break;\n        }\n        case 3 /* TextModes.CDATA */:\n            if (startsWith(s, ']]>')) {\n                return true;\n            }\n            break;\n    }\n    return !s;\n}\nfunction startsWithEndTagOpen(source, tag) {\n    return (startsWith(source, '</') &&\n        source.slice(2, 2 + tag.length).toLowerCase() === tag.toLowerCase() &&\n        /[\\t\\r\\n\\f />]/.test(source[2 + tag.length] || '>'));\n}\n\nfunction hoistStatic(root, context) {\n    walk(root, context, \n    // Root node is unfortunately non-hoistable due to potential parent\n    // fallthrough attributes.\n    isSingleElementRoot(root, root.children[0]));\n}\nfunction isSingleElementRoot(root, child) {\n    const { children } = root;\n    return (children.length === 1 &&\n        child.type === 1 /* NodeTypes.ELEMENT */ &&\n        !isSlotOutlet(child));\n}\nfunction walk(node, context, doNotHoistNode = false) {\n    const { children } = node;\n    const originalCount = children.length;\n    let hoistedCount = 0;\n    for (let i = 0; i < children.length; i++) {\n        const child = children[i];\n        // only plain elements & text calls are eligible for hoisting.\n        if (child.type === 1 /* NodeTypes.ELEMENT */ &&\n            child.tagType === 0 /* ElementTypes.ELEMENT */) {\n            const constantType = doNotHoistNode\n                ? 0 /* ConstantTypes.NOT_CONSTANT */\n                : getConstantType(child, context);\n            if (constantType > 0 /* ConstantTypes.NOT_CONSTANT */) {\n                if (constantType >= 2 /* ConstantTypes.CAN_HOIST */) {\n                    child.codegenNode.patchFlag =\n                        -1 /* PatchFlags.HOISTED */ + (` /* HOISTED */` );\n                    child.codegenNode = context.hoist(child.codegenNode);\n                    hoistedCount++;\n                    continue;\n                }\n            }\n            else {\n                // node may contain dynamic children, but its props may be eligible for\n                // hoisting.\n                const codegenNode = child.codegenNode;\n                if (codegenNode.type === 13 /* NodeTypes.VNODE_CALL */) {\n                    const flag = getPatchFlag(codegenNode);\n                    if ((!flag ||\n                        flag === 512 /* PatchFlags.NEED_PATCH */ ||\n                        flag === 1 /* PatchFlags.TEXT */) &&\n                        getGeneratedPropsConstantType(child, context) >=\n                            2 /* ConstantTypes.CAN_HOIST */) {\n                        const props = getNodeProps(child);\n                        if (props) {\n                            codegenNode.props = context.hoist(props);\n                        }\n                    }\n                    if (codegenNode.dynamicProps) {\n                        codegenNode.dynamicProps = context.hoist(codegenNode.dynamicProps);\n                    }\n                }\n            }\n        }\n        // walk further\n        if (child.type === 1 /* NodeTypes.ELEMENT */) {\n            const isComponent = child.tagType === 1 /* ElementTypes.COMPONENT */;\n            if (isComponent) {\n                context.scopes.vSlot++;\n            }\n            walk(child, context);\n            if (isComponent) {\n                context.scopes.vSlot--;\n            }\n        }\n        else if (child.type === 11 /* NodeTypes.FOR */) {\n            // Do not hoist v-for single child because it has to be a block\n            walk(child, context, child.children.length === 1);\n        }\n        else if (child.type === 9 /* NodeTypes.IF */) {\n            for (let i = 0; i < child.branches.length; i++) {\n                // Do not hoist v-if single child because it has to be a block\n                walk(child.branches[i], context, child.branches[i].children.length === 1);\n            }\n        }\n    }\n    if (hoistedCount && context.transformHoist) {\n        context.transformHoist(children, context, node);\n    }\n    // all children were hoisted - the entire children array is hoistable.\n    if (hoistedCount &&\n        hoistedCount === originalCount &&\n        node.type === 1 /* NodeTypes.ELEMENT */ &&\n        node.tagType === 0 /* ElementTypes.ELEMENT */ &&\n        node.codegenNode &&\n        node.codegenNode.type === 13 /* NodeTypes.VNODE_CALL */ &&\n        isArray(node.codegenNode.children)) {\n        node.codegenNode.children = context.hoist(createArrayExpression(node.codegenNode.children));\n    }\n}\nfunction getConstantType(node, context) {\n    const { constantCache } = context;\n    switch (node.type) {\n        case 1 /* NodeTypes.ELEMENT */:\n            if (node.tagType !== 0 /* ElementTypes.ELEMENT */) {\n                return 0 /* ConstantTypes.NOT_CONSTANT */;\n            }\n            const cached = constantCache.get(node);\n            if (cached !== undefined) {\n                return cached;\n            }\n            const codegenNode = node.codegenNode;\n            if (codegenNode.type !== 13 /* NodeTypes.VNODE_CALL */) {\n                return 0 /* ConstantTypes.NOT_CONSTANT */;\n            }\n            if (codegenNode.isBlock &&\n                node.tag !== 'svg' &&\n                node.tag !== 'foreignObject') {\n                return 0 /* ConstantTypes.NOT_CONSTANT */;\n            }\n            const flag = getPatchFlag(codegenNode);\n            if (!flag) {\n                let returnType = 3 /* ConstantTypes.CAN_STRINGIFY */;\n                // Element itself has no patch flag. However we still need to check:\n                // 1. Even for a node with no patch flag, it is possible for it to contain\n                // non-hoistable expressions that refers to scope variables, e.g. compiler\n                // injected keys or cached event handlers. Therefore we need to always\n                // check the codegenNode's props to be sure.\n                const generatedPropsType = getGeneratedPropsConstantType(node, context);\n                if (generatedPropsType === 0 /* ConstantTypes.NOT_CONSTANT */) {\n                    constantCache.set(node, 0 /* ConstantTypes.NOT_CONSTANT */);\n                    return 0 /* ConstantTypes.NOT_CONSTANT */;\n                }\n                if (generatedPropsType < returnType) {\n                    returnType = generatedPropsType;\n                }\n                // 2. its children.\n                for (let i = 0; i < node.children.length; i++) {\n                    const childType = getConstantType(node.children[i], context);\n                    if (childType === 0 /* ConstantTypes.NOT_CONSTANT */) {\n                        constantCache.set(node, 0 /* ConstantTypes.NOT_CONSTANT */);\n                        return 0 /* ConstantTypes.NOT_CONSTANT */;\n                    }\n                    if (childType < returnType) {\n                        returnType = childType;\n                    }\n                }\n                // 3. if the type is not already CAN_SKIP_PATCH which is the lowest non-0\n                // type, check if any of the props can cause the type to be lowered\n                // we can skip can_patch because it's guaranteed by the absence of a\n                // patchFlag.\n                if (returnType > 1 /* ConstantTypes.CAN_SKIP_PATCH */) {\n                    for (let i = 0; i < node.props.length; i++) {\n                        const p = node.props[i];\n                        if (p.type === 7 /* NodeTypes.DIRECTIVE */ && p.name === 'bind' && p.exp) {\n                            const expType = getConstantType(p.exp, context);\n                            if (expType === 0 /* ConstantTypes.NOT_CONSTANT */) {\n                                constantCache.set(node, 0 /* ConstantTypes.NOT_CONSTANT */);\n                                return 0 /* ConstantTypes.NOT_CONSTANT */;\n                            }\n                            if (expType < returnType) {\n                                returnType = expType;\n                            }\n                        }\n                    }\n                }\n                // only svg/foreignObject could be block here, however if they are\n                // static then they don't need to be blocks since there will be no\n                // nested updates.\n                if (codegenNode.isBlock) {\n                    // except set custom directives.\n                    for (let i = 0; i < node.props.length; i++) {\n                        const p = node.props[i];\n                        if (p.type === 7 /* NodeTypes.DIRECTIVE */) {\n                            constantCache.set(node, 0 /* ConstantTypes.NOT_CONSTANT */);\n                            return 0 /* ConstantTypes.NOT_CONSTANT */;\n                        }\n                    }\n                    context.removeHelper(OPEN_BLOCK);\n                    context.removeHelper(getVNodeBlockHelper(context.inSSR, codegenNode.isComponent));\n                    codegenNode.isBlock = false;\n                    context.helper(getVNodeHelper(context.inSSR, codegenNode.isComponent));\n                }\n                constantCache.set(node, returnType);\n                return returnType;\n            }\n            else {\n                constantCache.set(node, 0 /* ConstantTypes.NOT_CONSTANT */);\n                return 0 /* ConstantTypes.NOT_CONSTANT */;\n            }\n        case 2 /* NodeTypes.TEXT */:\n        case 3 /* NodeTypes.COMMENT */:\n            return 3 /* ConstantTypes.CAN_STRINGIFY */;\n        case 9 /* NodeTypes.IF */:\n        case 11 /* NodeTypes.FOR */:\n        case 10 /* NodeTypes.IF_BRANCH */:\n            return 0 /* ConstantTypes.NOT_CONSTANT */;\n        case 5 /* NodeTypes.INTERPOLATION */:\n        case 12 /* NodeTypes.TEXT_CALL */:\n            return getConstantType(node.content, context);\n        case 4 /* NodeTypes.SIMPLE_EXPRESSION */:\n            return node.constType;\n        case 8 /* NodeTypes.COMPOUND_EXPRESSION */:\n            let returnType = 3 /* ConstantTypes.CAN_STRINGIFY */;\n            for (let i = 0; i < node.children.length; i++) {\n                const child = node.children[i];\n                if (isString(child) || isSymbol(child)) {\n                    continue;\n                }\n                const childType = getConstantType(child, context);\n                if (childType === 0 /* ConstantTypes.NOT_CONSTANT */) {\n                    return 0 /* ConstantTypes.NOT_CONSTANT */;\n                }\n                else if (childType < returnType) {\n                    returnType = childType;\n                }\n            }\n            return returnType;\n        default:\n            return 0 /* ConstantTypes.NOT_CONSTANT */;\n    }\n}\nconst allowHoistedHelperSet = new Set([\n    NORMALIZE_CLASS,\n    NORMALIZE_STYLE,\n    NORMALIZE_PROPS,\n    GUARD_REACTIVE_PROPS\n]);\nfunction getConstantTypeOfHelperCall(value, context) {\n    if (value.type === 14 /* NodeTypes.JS_CALL_EXPRESSION */ &&\n        !isString(value.callee) &&\n        allowHoistedHelperSet.has(value.callee)) {\n        const arg = value.arguments[0];\n        if (arg.type === 4 /* NodeTypes.SIMPLE_EXPRESSION */) {\n            return getConstantType(arg, context);\n        }\n        else if (arg.type === 14 /* NodeTypes.JS_CALL_EXPRESSION */) {\n            // in the case of nested helper call, e.g. `normalizeProps(guardReactiveProps(exp))`\n            return getConstantTypeOfHelperCall(arg, context);\n        }\n    }\n    return 0 /* ConstantTypes.NOT_CONSTANT */;\n}\nfunction getGeneratedPropsConstantType(node, context) {\n    let returnType = 3 /* ConstantTypes.CAN_STRINGIFY */;\n    const props = getNodeProps(node);\n    if (props && props.type === 15 /* NodeTypes.JS_OBJECT_EXPRESSION */) {\n        const { properties } = props;\n        for (let i = 0; i < properties.length; i++) {\n            const { key, value } = properties[i];\n            const keyType = getConstantType(key, context);\n            if (keyType === 0 /* ConstantTypes.NOT_CONSTANT */) {\n                return keyType;\n            }\n            if (keyType < returnType) {\n                returnType = keyType;\n            }\n            let valueType;\n            if (value.type === 4 /* NodeTypes.SIMPLE_EXPRESSION */) {\n                valueType = getConstantType(value, context);\n            }\n            else if (value.type === 14 /* NodeTypes.JS_CALL_EXPRESSION */) {\n                // some helper calls can be hoisted,\n                // such as the `normalizeProps` generated by the compiler for pre-normalize class,\n                // in this case we need to respect the ConstantType of the helper's arguments\n                valueType = getConstantTypeOfHelperCall(value, context);\n            }\n            else {\n                valueType = 0 /* ConstantTypes.NOT_CONSTANT */;\n            }\n            if (valueType === 0 /* ConstantTypes.NOT_CONSTANT */) {\n                return valueType;\n            }\n            if (valueType < returnType) {\n                returnType = valueType;\n            }\n        }\n    }\n    return returnType;\n}\nfunction getNodeProps(node) {\n    const codegenNode = node.codegenNode;\n    if (codegenNode.type === 13 /* NodeTypes.VNODE_CALL */) {\n        return codegenNode.props;\n    }\n}\nfunction getPatchFlag(node) {\n    const flag = node.patchFlag;\n    return flag ? parseInt(flag, 10) : undefined;\n}\n\nfunction createTransformContext(root, { filename = '', prefixIdentifiers = false, hoistStatic = false, cacheHandlers = false, nodeTransforms = [], directiveTransforms = {}, transformHoist = null, isBuiltInComponent = NOOP, isCustomElement = NOOP, expressionPlugins = [], scopeId = null, slotted = true, ssr = false, inSSR = false, ssrCssVars = ``, bindingMetadata = EMPTY_OBJ, inline = false, isTS = false, onError = defaultOnError, onWarn = defaultOnWarn, compatConfig }) {\n    const nameMatch = filename.replace(/\\?.*$/, '').match(/([^/\\\\]+)\\.\\w+$/);\n    const context = {\n        // options\n        selfName: nameMatch && capitalize(camelize(nameMatch[1])),\n        prefixIdentifiers,\n        hoistStatic,\n        cacheHandlers,\n        nodeTransforms,\n        directiveTransforms,\n        transformHoist,\n        isBuiltInComponent,\n        isCustomElement,\n        expressionPlugins,\n        scopeId,\n        slotted,\n        ssr,\n        inSSR,\n        ssrCssVars,\n        bindingMetadata,\n        inline,\n        isTS,\n        onError,\n        onWarn,\n        compatConfig,\n        // state\n        root,\n        helpers: new Map(),\n        components: new Set(),\n        directives: new Set(),\n        hoists: [],\n        imports: [],\n        constantCache: new Map(),\n        temps: 0,\n        cached: 0,\n        identifiers: Object.create(null),\n        scopes: {\n            vFor: 0,\n            vSlot: 0,\n            vPre: 0,\n            vOnce: 0\n        },\n        parent: null,\n        currentNode: root,\n        childIndex: 0,\n        inVOnce: false,\n        // methods\n        helper(name) {\n            const count = context.helpers.get(name) || 0;\n            context.helpers.set(name, count + 1);\n            return name;\n        },\n        removeHelper(name) {\n            const count = context.helpers.get(name);\n            if (count) {\n                const currentCount = count - 1;\n                if (!currentCount) {\n                    context.helpers.delete(name);\n                }\n                else {\n                    context.helpers.set(name, currentCount);\n                }\n            }\n        },\n        helperString(name) {\n            return `_${helperNameMap[context.helper(name)]}`;\n        },\n        replaceNode(node) {\n            /* istanbul ignore if */\n            {\n                if (!context.currentNode) {\n                    throw new Error(`Node being replaced is already removed.`);\n                }\n                if (!context.parent) {\n                    throw new Error(`Cannot replace root node.`);\n                }\n            }\n            context.parent.children[context.childIndex] = context.currentNode = node;\n        },\n        removeNode(node) {\n            if (!context.parent) {\n                throw new Error(`Cannot remove root node.`);\n            }\n            const list = context.parent.children;\n            const removalIndex = node\n                ? list.indexOf(node)\n                : context.currentNode\n                    ? context.childIndex\n                    : -1;\n            /* istanbul ignore if */\n            if (removalIndex < 0) {\n                throw new Error(`node being removed is not a child of current parent`);\n            }\n            if (!node || node === context.currentNode) {\n                // current node removed\n                context.currentNode = null;\n                context.onNodeRemoved();\n            }\n            else {\n                // sibling node removed\n                if (context.childIndex > removalIndex) {\n                    context.childIndex--;\n                    context.onNodeRemoved();\n                }\n            }\n            context.parent.children.splice(removalIndex, 1);\n        },\n        onNodeRemoved: () => { },\n        addIdentifiers(exp) {\n        },\n        removeIdentifiers(exp) {\n        },\n        hoist(exp) {\n            if (isString(exp))\n                exp = createSimpleExpression(exp);\n            context.hoists.push(exp);\n            const identifier = createSimpleExpression(`_hoisted_${context.hoists.length}`, false, exp.loc, 2 /* ConstantTypes.CAN_HOIST */);\n            identifier.hoisted = exp;\n            return identifier;\n        },\n        cache(exp, isVNode = false) {\n            return createCacheExpression(context.cached++, exp, isVNode);\n        }\n    };\n    {\n        context.filters = new Set();\n    }\n    return context;\n}\nfunction transform(root, options) {\n    const context = createTransformContext(root, options);\n    traverseNode(root, context);\n    if (options.hoistStatic) {\n        hoistStatic(root, context);\n    }\n    if (!options.ssr) {\n        createRootCodegen(root, context);\n    }\n    // finalize meta information\n    root.helpers = new Set([...context.helpers.keys()]);\n    root.components = [...context.components];\n    root.directives = [...context.directives];\n    root.imports = context.imports;\n    root.hoists = context.hoists;\n    root.temps = context.temps;\n    root.cached = context.cached;\n    {\n        root.filters = [...context.filters];\n    }\n}\nfunction createRootCodegen(root, context) {\n    const { helper } = context;\n    const { children } = root;\n    if (children.length === 1) {\n        const child = children[0];\n        // if the single child is an element, turn it into a block.\n        if (isSingleElementRoot(root, child) && child.codegenNode) {\n            // single element root is never hoisted so codegenNode will never be\n            // SimpleExpressionNode\n            const codegenNode = child.codegenNode;\n            if (codegenNode.type === 13 /* NodeTypes.VNODE_CALL */) {\n                makeBlock(codegenNode, context);\n            }\n            root.codegenNode = codegenNode;\n        }\n        else {\n            // - single <slot/>, IfNode, ForNode: already blocks.\n            // - single text node: always patched.\n            // root codegen falls through via genNode()\n            root.codegenNode = child;\n        }\n    }\n    else if (children.length > 1) {\n        // root has multiple nodes - return a fragment block.\n        let patchFlag = 64 /* PatchFlags.STABLE_FRAGMENT */;\n        let patchFlagText = PatchFlagNames[64 /* PatchFlags.STABLE_FRAGMENT */];\n        // check if the fragment actually contains a single valid child with\n        // the rest being comments\n        if (children.filter(c => c.type !== 3 /* NodeTypes.COMMENT */).length === 1) {\n            patchFlag |= 2048 /* PatchFlags.DEV_ROOT_FRAGMENT */;\n            patchFlagText += `, ${PatchFlagNames[2048 /* PatchFlags.DEV_ROOT_FRAGMENT */]}`;\n        }\n        root.codegenNode = createVNodeCall(context, helper(FRAGMENT), undefined, root.children, patchFlag + (` /* ${patchFlagText} */` ), undefined, undefined, true, undefined, false /* isComponent */);\n    }\n    else ;\n}\nfunction traverseChildren(parent, context) {\n    let i = 0;\n    const nodeRemoved = () => {\n        i--;\n    };\n    for (; i < parent.children.length; i++) {\n        const child = parent.children[i];\n        if (isString(child))\n            continue;\n        context.parent = parent;\n        context.childIndex = i;\n        context.onNodeRemoved = nodeRemoved;\n        traverseNode(child, context);\n    }\n}\nfunction traverseNode(node, context) {\n    context.currentNode = node;\n    // apply transform plugins\n    const { nodeTransforms } = context;\n    const exitFns = [];\n    for (let i = 0; i < nodeTransforms.length; i++) {\n        const onExit = nodeTransforms[i](node, context);\n        if (onExit) {\n            if (isArray(onExit)) {\n                exitFns.push(...onExit);\n            }\n            else {\n                exitFns.push(onExit);\n            }\n        }\n        if (!context.currentNode) {\n            // node was removed\n            return;\n        }\n        else {\n            // node may have been replaced\n            node = context.currentNode;\n        }\n    }\n    switch (node.type) {\n        case 3 /* NodeTypes.COMMENT */:\n            if (!context.ssr) {\n                // inject import for the Comment symbol, which is needed for creating\n                // comment nodes with `createVNode`\n                context.helper(CREATE_COMMENT);\n            }\n            break;\n        case 5 /* NodeTypes.INTERPOLATION */:\n            // no need to traverse, but we need to inject toString helper\n            if (!context.ssr) {\n                context.helper(TO_DISPLAY_STRING);\n            }\n            break;\n        // for container types, further traverse downwards\n        case 9 /* NodeTypes.IF */:\n            for (let i = 0; i < node.branches.length; i++) {\n                traverseNode(node.branches[i], context);\n            }\n            break;\n        case 10 /* NodeTypes.IF_BRANCH */:\n        case 11 /* NodeTypes.FOR */:\n        case 1 /* NodeTypes.ELEMENT */:\n        case 0 /* NodeTypes.ROOT */:\n            traverseChildren(node, context);\n            break;\n    }\n    // exit transforms\n    context.currentNode = node;\n    let i = exitFns.length;\n    while (i--) {\n        exitFns[i]();\n    }\n}\nfunction createStructuralDirectiveTransform(name, fn) {\n    const matches = isString(name)\n        ? (n) => n === name\n        : (n) => name.test(n);\n    return (node, context) => {\n        if (node.type === 1 /* NodeTypes.ELEMENT */) {\n            const { props } = node;\n            // structural directive transforms are not concerned with slots\n            // as they are handled separately in vSlot.ts\n            if (node.tagType === 3 /* ElementTypes.TEMPLATE */ && props.some(isVSlot)) {\n                return;\n            }\n            const exitFns = [];\n            for (let i = 0; i < props.length; i++) {\n                const prop = props[i];\n                if (prop.type === 7 /* NodeTypes.DIRECTIVE */ && matches(prop.name)) {\n                    // structural directives are removed to avoid infinite recursion\n                    // also we remove them *before* applying so that it can further\n                    // traverse itself in case it moves the node around\n                    props.splice(i, 1);\n                    i--;\n                    const onExit = fn(node, prop, context);\n                    if (onExit)\n                        exitFns.push(onExit);\n                }\n            }\n            return exitFns;\n        }\n    };\n}\n\nconst PURE_ANNOTATION = `/*#__PURE__*/`;\nconst aliasHelper = (s) => `${helperNameMap[s]}: _${helperNameMap[s]}`;\nfunction createCodegenContext(ast, { mode = 'function', prefixIdentifiers = mode === 'module', sourceMap = false, filename = `template.vue.html`, scopeId = null, optimizeImports = false, runtimeGlobalName = `Vue`, runtimeModuleName = `vue`, ssrRuntimeModuleName = 'vue/server-renderer', ssr = false, isTS = false, inSSR = false }) {\n    const context = {\n        mode,\n        prefixIdentifiers,\n        sourceMap,\n        filename,\n        scopeId,\n        optimizeImports,\n        runtimeGlobalName,\n        runtimeModuleName,\n        ssrRuntimeModuleName,\n        ssr,\n        isTS,\n        inSSR,\n        source: ast.loc.source,\n        code: ``,\n        column: 1,\n        line: 1,\n        offset: 0,\n        indentLevel: 0,\n        pure: false,\n        map: undefined,\n        helper(key) {\n            return `_${helperNameMap[key]}`;\n        },\n        push(code, node) {\n            context.code += code;\n        },\n        indent() {\n            newline(++context.indentLevel);\n        },\n        deindent(withoutNewLine = false) {\n            if (withoutNewLine) {\n                --context.indentLevel;\n            }\n            else {\n                newline(--context.indentLevel);\n            }\n        },\n        newline() {\n            newline(context.indentLevel);\n        }\n    };\n    function newline(n) {\n        context.push('\\n' + `  `.repeat(n));\n    }\n    return context;\n}\nfunction generate(ast, options = {}) {\n    const context = createCodegenContext(ast, options);\n    if (options.onContextCreated)\n        options.onContextCreated(context);\n    const { mode, push, prefixIdentifiers, indent, deindent, newline, scopeId, ssr } = context;\n    const helpers = Array.from(ast.helpers);\n    const hasHelpers = helpers.length > 0;\n    const useWithBlock = !prefixIdentifiers && mode !== 'module';\n    const isSetupInlined = !true ;\n    // preambles\n    // in setup() inline mode, the preamble is generated in a sub context\n    // and returned separately.\n    const preambleContext = isSetupInlined\n        ? createCodegenContext(ast, options)\n        : context;\n    {\n        genFunctionPreamble(ast, preambleContext);\n    }\n    // enter render function\n    const functionName = ssr ? `ssrRender` : `render`;\n    const args = ssr ? ['_ctx', '_push', '_parent', '_attrs'] : ['_ctx', '_cache'];\n    const signature = args.join(', ');\n    {\n        push(`function ${functionName}(${signature}) {`);\n    }\n    indent();\n    if (useWithBlock) {\n        push(`with (_ctx) {`);\n        indent();\n        // function mode const declarations should be inside with block\n        // also they should be renamed to avoid collision with user properties\n        if (hasHelpers) {\n            push(`const { ${helpers.map(aliasHelper).join(', ')} } = _Vue`);\n            push(`\\n`);\n            newline();\n        }\n    }\n    // generate asset resolution statements\n    if (ast.components.length) {\n        genAssets(ast.components, 'component', context);\n        if (ast.directives.length || ast.temps > 0) {\n            newline();\n        }\n    }\n    if (ast.directives.length) {\n        genAssets(ast.directives, 'directive', context);\n        if (ast.temps > 0) {\n            newline();\n        }\n    }\n    if (ast.filters && ast.filters.length) {\n        newline();\n        genAssets(ast.filters, 'filter', context);\n        newline();\n    }\n    if (ast.temps > 0) {\n        push(`let `);\n        for (let i = 0; i < ast.temps; i++) {\n            push(`${i > 0 ? `, ` : ``}_temp${i}`);\n        }\n    }\n    if (ast.components.length || ast.directives.length || ast.temps) {\n        push(`\\n`);\n        newline();\n    }\n    // generate the VNode tree expression\n    if (!ssr) {\n        push(`return `);\n    }\n    if (ast.codegenNode) {\n        genNode(ast.codegenNode, context);\n    }\n    else {\n        push(`null`);\n    }\n    if (useWithBlock) {\n        deindent();\n        push(`}`);\n    }\n    deindent();\n    push(`}`);\n    return {\n        ast,\n        code: context.code,\n        preamble: isSetupInlined ? preambleContext.code : ``,\n        // SourceMapGenerator does have toJSON() method but it's not in the types\n        map: context.map ? context.map.toJSON() : undefined\n    };\n}\nfunction genFunctionPreamble(ast, context) {\n    const { ssr, prefixIdentifiers, push, newline, runtimeModuleName, runtimeGlobalName, ssrRuntimeModuleName } = context;\n    const VueBinding = runtimeGlobalName;\n    // Generate const declaration for helpers\n    // In prefix mode, we place the const declaration at top so it's done\n    // only once; But if we not prefixing, we place the declaration inside the\n    // with block so it doesn't incur the `in` check cost for every helper access.\n    const helpers = Array.from(ast.helpers);\n    if (helpers.length > 0) {\n        {\n            // \"with\" mode.\n            // save Vue in a separate variable to avoid collision\n            push(`const _Vue = ${VueBinding}\\n`);\n            // in \"with\" mode, helpers are declared inside the with block to avoid\n            // has check cost, but hoists are lifted out of the function - we need\n            // to provide the helper here.\n            if (ast.hoists.length) {\n                const staticHelpers = [\n                    CREATE_VNODE,\n                    CREATE_ELEMENT_VNODE,\n                    CREATE_COMMENT,\n                    CREATE_TEXT,\n                    CREATE_STATIC\n                ]\n                    .filter(helper => helpers.includes(helper))\n                    .map(aliasHelper)\n                    .join(', ');\n                push(`const { ${staticHelpers} } = _Vue\\n`);\n            }\n        }\n    }\n    genHoists(ast.hoists, context);\n    newline();\n    push(`return `);\n}\nfunction genAssets(assets, type, { helper, push, newline, isTS }) {\n    const resolver = helper(type === 'filter'\n        ? RESOLVE_FILTER\n        : type === 'component'\n            ? RESOLVE_COMPONENT\n            : RESOLVE_DIRECTIVE);\n    for (let i = 0; i < assets.length; i++) {\n        let id = assets[i];\n        // potential component implicit self-reference inferred from SFC filename\n        const maybeSelfReference = id.endsWith('__self');\n        if (maybeSelfReference) {\n            id = id.slice(0, -6);\n        }\n        push(`const ${toValidAssetId(id, type)} = ${resolver}(${JSON.stringify(id)}${maybeSelfReference ? `, true` : ``})${isTS ? `!` : ``}`);\n        if (i < assets.length - 1) {\n            newline();\n        }\n    }\n}\nfunction genHoists(hoists, context) {\n    if (!hoists.length) {\n        return;\n    }\n    context.pure = true;\n    const { push, newline, helper, scopeId, mode } = context;\n    newline();\n    for (let i = 0; i < hoists.length; i++) {\n        const exp = hoists[i];\n        if (exp) {\n            push(`const _hoisted_${i + 1} = ${``}`);\n            genNode(exp, context);\n            newline();\n        }\n    }\n    context.pure = false;\n}\nfunction isText(n) {\n    return (isString(n) ||\n        n.type === 4 /* NodeTypes.SIMPLE_EXPRESSION */ ||\n        n.type === 2 /* NodeTypes.TEXT */ ||\n        n.type === 5 /* NodeTypes.INTERPOLATION */ ||\n        n.type === 8 /* NodeTypes.COMPOUND_EXPRESSION */);\n}\nfunction genNodeListAsArray(nodes, context) {\n    const multilines = nodes.length > 3 ||\n        (nodes.some(n => isArray(n) || !isText(n)));\n    context.push(`[`);\n    multilines && context.indent();\n    genNodeList(nodes, context, multilines);\n    multilines && context.deindent();\n    context.push(`]`);\n}\nfunction genNodeList(nodes, context, multilines = false, comma = true) {\n    const { push, newline } = context;\n    for (let i = 0; i < nodes.length; i++) {\n        const node = nodes[i];\n        if (isString(node)) {\n            push(node);\n        }\n        else if (isArray(node)) {\n            genNodeListAsArray(node, context);\n        }\n        else {\n            genNode(node, context);\n        }\n        if (i < nodes.length - 1) {\n            if (multilines) {\n                comma && push(',');\n                newline();\n            }\n            else {\n                comma && push(', ');\n            }\n        }\n    }\n}\nfunction genNode(node, context) {\n    if (isString(node)) {\n        context.push(node);\n        return;\n    }\n    if (isSymbol(node)) {\n        context.push(context.helper(node));\n        return;\n    }\n    switch (node.type) {\n        case 1 /* NodeTypes.ELEMENT */:\n        case 9 /* NodeTypes.IF */:\n        case 11 /* NodeTypes.FOR */:\n            assert(node.codegenNode != null, `Codegen node is missing for element/if/for node. ` +\n                    `Apply appropriate transforms first.`);\n            genNode(node.codegenNode, context);\n            break;\n        case 2 /* NodeTypes.TEXT */:\n            genText(node, context);\n            break;\n        case 4 /* NodeTypes.SIMPLE_EXPRESSION */:\n            genExpression(node, context);\n            break;\n        case 5 /* NodeTypes.INTERPOLATION */:\n            genInterpolation(node, context);\n            break;\n        case 12 /* NodeTypes.TEXT_CALL */:\n            genNode(node.codegenNode, context);\n            break;\n        case 8 /* NodeTypes.COMPOUND_EXPRESSION */:\n            genCompoundExpression(node, context);\n            break;\n        case 3 /* NodeTypes.COMMENT */:\n            genComment(node, context);\n            break;\n        case 13 /* NodeTypes.VNODE_CALL */:\n            genVNodeCall(node, context);\n            break;\n        case 14 /* NodeTypes.JS_CALL_EXPRESSION */:\n            genCallExpression(node, context);\n            break;\n        case 15 /* NodeTypes.JS_OBJECT_EXPRESSION */:\n            genObjectExpression(node, context);\n            break;\n        case 17 /* NodeTypes.JS_ARRAY_EXPRESSION */:\n            genArrayExpression(node, context);\n            break;\n        case 18 /* NodeTypes.JS_FUNCTION_EXPRESSION */:\n            genFunctionExpression(node, context);\n            break;\n        case 19 /* NodeTypes.JS_CONDITIONAL_EXPRESSION */:\n            genConditionalExpression(node, context);\n            break;\n        case 20 /* NodeTypes.JS_CACHE_EXPRESSION */:\n            genCacheExpression(node, context);\n            break;\n        case 21 /* NodeTypes.JS_BLOCK_STATEMENT */:\n            genNodeList(node.body, context, true, false);\n            break;\n        // SSR only types\n        case 22 /* NodeTypes.JS_TEMPLATE_LITERAL */:\n            break;\n        case 23 /* NodeTypes.JS_IF_STATEMENT */:\n            break;\n        case 24 /* NodeTypes.JS_ASSIGNMENT_EXPRESSION */:\n            break;\n        case 25 /* NodeTypes.JS_SEQUENCE_EXPRESSION */:\n            break;\n        case 26 /* NodeTypes.JS_RETURN_STATEMENT */:\n            break;\n        /* istanbul ignore next */\n        case 10 /* NodeTypes.IF_BRANCH */:\n            // noop\n            break;\n        default:\n            {\n                assert(false, `unhandled codegen node type: ${node.type}`);\n                // make sure we exhaust all possible types\n                const exhaustiveCheck = node;\n                return exhaustiveCheck;\n            }\n    }\n}\nfunction genText(node, context) {\n    context.push(JSON.stringify(node.content), node);\n}\nfunction genExpression(node, context) {\n    const { content, isStatic } = node;\n    context.push(isStatic ? JSON.stringify(content) : content, node);\n}\nfunction genInterpolation(node, context) {\n    const { push, helper, pure } = context;\n    if (pure)\n        push(PURE_ANNOTATION);\n    push(`${helper(TO_DISPLAY_STRING)}(`);\n    genNode(node.content, context);\n    push(`)`);\n}\nfunction genCompoundExpression(node, context) {\n    for (let i = 0; i < node.children.length; i++) {\n        const child = node.children[i];\n        if (isString(child)) {\n            context.push(child);\n        }\n        else {\n            genNode(child, context);\n        }\n    }\n}\nfunction genExpressionAsPropertyKey(node, context) {\n    const { push } = context;\n    if (node.type === 8 /* NodeTypes.COMPOUND_EXPRESSION */) {\n        push(`[`);\n        genCompoundExpression(node, context);\n        push(`]`);\n    }\n    else if (node.isStatic) {\n        // only quote keys if necessary\n        const text = isSimpleIdentifier(node.content)\n            ? node.content\n            : JSON.stringify(node.content);\n        push(text, node);\n    }\n    else {\n        push(`[${node.content}]`, node);\n    }\n}\nfunction genComment(node, context) {\n    const { push, helper, pure } = context;\n    if (pure) {\n        push(PURE_ANNOTATION);\n    }\n    push(`${helper(CREATE_COMMENT)}(${JSON.stringify(node.content)})`, node);\n}\nfunction genVNodeCall(node, context) {\n    const { push, helper, pure } = context;\n    const { tag, props, children, patchFlag, dynamicProps, directives, isBlock, disableTracking, isComponent } = node;\n    if (directives) {\n        push(helper(WITH_DIRECTIVES) + `(`);\n    }\n    if (isBlock) {\n        push(`(${helper(OPEN_BLOCK)}(${disableTracking ? `true` : ``}), `);\n    }\n    if (pure) {\n        push(PURE_ANNOTATION);\n    }\n    const callHelper = isBlock\n        ? getVNodeBlockHelper(context.inSSR, isComponent)\n        : getVNodeHelper(context.inSSR, isComponent);\n    push(helper(callHelper) + `(`, node);\n    genNodeList(genNullableArgs([tag, props, children, patchFlag, dynamicProps]), context);\n    push(`)`);\n    if (isBlock) {\n        push(`)`);\n    }\n    if (directives) {\n        push(`, `);\n        genNode(directives, context);\n        push(`)`);\n    }\n}\nfunction genNullableArgs(args) {\n    let i = args.length;\n    while (i--) {\n        if (args[i] != null)\n            break;\n    }\n    return args.slice(0, i + 1).map(arg => arg || `null`);\n}\n// JavaScript\nfunction genCallExpression(node, context) {\n    const { push, helper, pure } = context;\n    const callee = isString(node.callee) ? node.callee : helper(node.callee);\n    if (pure) {\n        push(PURE_ANNOTATION);\n    }\n    push(callee + `(`, node);\n    genNodeList(node.arguments, context);\n    push(`)`);\n}\nfunction genObjectExpression(node, context) {\n    const { push, indent, deindent, newline } = context;\n    const { properties } = node;\n    if (!properties.length) {\n        push(`{}`, node);\n        return;\n    }\n    const multilines = properties.length > 1 ||\n        (properties.some(p => p.value.type !== 4 /* NodeTypes.SIMPLE_EXPRESSION */));\n    push(multilines ? `{` : `{ `);\n    multilines && indent();\n    for (let i = 0; i < properties.length; i++) {\n        const { key, value } = properties[i];\n        // key\n        genExpressionAsPropertyKey(key, context);\n        push(`: `);\n        // value\n        genNode(value, context);\n        if (i < properties.length - 1) {\n            // will only reach this if it's multilines\n            push(`,`);\n            newline();\n        }\n    }\n    multilines && deindent();\n    push(multilines ? `}` : ` }`);\n}\nfunction genArrayExpression(node, context) {\n    genNodeListAsArray(node.elements, context);\n}\nfunction genFunctionExpression(node, context) {\n    const { push, indent, deindent } = context;\n    const { params, returns, body, newline, isSlot } = node;\n    if (isSlot) {\n        // wrap slot functions with owner context\n        push(`_${helperNameMap[WITH_CTX]}(`);\n    }\n    push(`(`, node);\n    if (isArray(params)) {\n        genNodeList(params, context);\n    }\n    else if (params) {\n        genNode(params, context);\n    }\n    push(`) => `);\n    if (newline || body) {\n        push(`{`);\n        indent();\n    }\n    if (returns) {\n        if (newline) {\n            push(`return `);\n        }\n        if (isArray(returns)) {\n            genNodeListAsArray(returns, context);\n        }\n        else {\n            genNode(returns, context);\n        }\n    }\n    else if (body) {\n        genNode(body, context);\n    }\n    if (newline || body) {\n        deindent();\n        push(`}`);\n    }\n    if (isSlot) {\n        if (node.isNonScopedSlot) {\n            push(`, undefined, true`);\n        }\n        push(`)`);\n    }\n}\nfunction genConditionalExpression(node, context) {\n    const { test, consequent, alternate, newline: needNewline } = node;\n    const { push, indent, deindent, newline } = context;\n    if (test.type === 4 /* NodeTypes.SIMPLE_EXPRESSION */) {\n        const needsParens = !isSimpleIdentifier(test.content);\n        needsParens && push(`(`);\n        genExpression(test, context);\n        needsParens && push(`)`);\n    }\n    else {\n        push(`(`);\n        genNode(test, context);\n        push(`)`);\n    }\n    needNewline && indent();\n    context.indentLevel++;\n    needNewline || push(` `);\n    push(`? `);\n    genNode(consequent, context);\n    context.indentLevel--;\n    needNewline && newline();\n    needNewline || push(` `);\n    push(`: `);\n    const isNested = alternate.type === 19 /* NodeTypes.JS_CONDITIONAL_EXPRESSION */;\n    if (!isNested) {\n        context.indentLevel++;\n    }\n    genNode(alternate, context);\n    if (!isNested) {\n        context.indentLevel--;\n    }\n    needNewline && deindent(true /* without newline */);\n}\nfunction genCacheExpression(node, context) {\n    const { push, helper, indent, deindent, newline } = context;\n    push(`_cache[${node.index}] || (`);\n    if (node.isVNode) {\n        indent();\n        push(`${helper(SET_BLOCK_TRACKING)}(-1),`);\n        newline();\n    }\n    push(`_cache[${node.index}] = `);\n    genNode(node.value, context);\n    if (node.isVNode) {\n        push(`,`);\n        newline();\n        push(`${helper(SET_BLOCK_TRACKING)}(1),`);\n        newline();\n        push(`_cache[${node.index}]`);\n        deindent();\n    }\n    push(`)`);\n}\n\nfunction walkIdentifiers(root, onIdentifier, includeAll = false, parentStack = [], knownIds = Object.create(null)) {\n    {\n        return;\n    }\n}\nfunction isReferencedIdentifier(id, parent, parentStack) {\n    {\n        return false;\n    }\n}\nfunction isInDestructureAssignment(parent, parentStack) {\n    if (parent &&\n        (parent.type === 'ObjectProperty' || parent.type === 'ArrayPattern')) {\n        let i = parentStack.length;\n        while (i--) {\n            const p = parentStack[i];\n            if (p.type === 'AssignmentExpression') {\n                return true;\n            }\n            else if (p.type !== 'ObjectProperty' && !p.type.endsWith('Pattern')) {\n                break;\n            }\n        }\n    }\n    return false;\n}\nfunction walkFunctionParams(node, onIdent) {\n    for (const p of node.params) {\n        for (const id of extractIdentifiers(p)) {\n            onIdent(id);\n        }\n    }\n}\nfunction walkBlockDeclarations(block, onIdent) {\n    for (const stmt of block.body) {\n        if (stmt.type === 'VariableDeclaration') {\n            if (stmt.declare)\n                continue;\n            for (const decl of stmt.declarations) {\n                for (const id of extractIdentifiers(decl.id)) {\n                    onIdent(id);\n                }\n            }\n        }\n        else if (stmt.type === 'FunctionDeclaration' ||\n            stmt.type === 'ClassDeclaration') {\n            if (stmt.declare || !stmt.id)\n                continue;\n            onIdent(stmt.id);\n        }\n    }\n}\nfunction extractIdentifiers(param, nodes = []) {\n    switch (param.type) {\n        case 'Identifier':\n            nodes.push(param);\n            break;\n        case 'MemberExpression':\n            let object = param;\n            while (object.type === 'MemberExpression') {\n                object = object.object;\n            }\n            nodes.push(object);\n            break;\n        case 'ObjectPattern':\n            for (const prop of param.properties) {\n                if (prop.type === 'RestElement') {\n                    extractIdentifiers(prop.argument, nodes);\n                }\n                else {\n                    extractIdentifiers(prop.value, nodes);\n                }\n            }\n            break;\n        case 'ArrayPattern':\n            param.elements.forEach(element => {\n                if (element)\n                    extractIdentifiers(element, nodes);\n            });\n            break;\n        case 'RestElement':\n            extractIdentifiers(param.argument, nodes);\n            break;\n        case 'AssignmentPattern':\n            extractIdentifiers(param.left, nodes);\n            break;\n    }\n    return nodes;\n}\nconst isFunctionType = (node) => {\n    return /Function(?:Expression|Declaration)$|Method$/.test(node.type);\n};\nconst isStaticProperty = (node) => node &&\n    (node.type === 'ObjectProperty' || node.type === 'ObjectMethod') &&\n    !node.computed;\nconst isStaticPropertyKey = (node, parent) => isStaticProperty(parent) && parent.key === node;\n\n// these keywords should not appear inside expressions, but operators like\n// 'typeof', 'instanceof', and 'in' are allowed\nconst prohibitedKeywordRE = new RegExp('\\\\b' +\n    ('arguments,await,break,case,catch,class,const,continue,debugger,default,' +\n        'delete,do,else,export,extends,finally,for,function,if,import,let,new,' +\n        'return,super,switch,throw,try,var,void,while,with,yield')\n        .split(',')\n        .join('\\\\b|\\\\b') +\n    '\\\\b');\n// strip strings in expressions\nconst stripStringRE = /'(?:[^'\\\\]|\\\\.)*'|\"(?:[^\"\\\\]|\\\\.)*\"|`(?:[^`\\\\]|\\\\.)*\\$\\{|\\}(?:[^`\\\\]|\\\\.)*`|`(?:[^`\\\\]|\\\\.)*`/g;\n/**\n * Validate a non-prefixed expression.\n * This is only called when using the in-browser runtime compiler since it\n * doesn't prefix expressions.\n */\nfunction validateBrowserExpression(node, context, asParams = false, asRawStatements = false) {\n    const exp = node.content;\n    // empty expressions are validated per-directive since some directives\n    // do allow empty expressions.\n    if (!exp.trim()) {\n        return;\n    }\n    try {\n        new Function(asRawStatements\n            ? ` ${exp} `\n            : `return ${asParams ? `(${exp}) => {}` : `(${exp})`}`);\n    }\n    catch (e) {\n        let message = e.message;\n        const keywordMatch = exp\n            .replace(stripStringRE, '')\n            .match(prohibitedKeywordRE);\n        if (keywordMatch) {\n            message = `avoid using JavaScript keyword as property name: \"${keywordMatch[0]}\"`;\n        }\n        context.onError(createCompilerError(45 /* ErrorCodes.X_INVALID_EXPRESSION */, node.loc, undefined, message));\n    }\n}\n\nconst transformExpression = (node, context) => {\n    if (node.type === 5 /* NodeTypes.INTERPOLATION */) {\n        node.content = processExpression(node.content, context);\n    }\n    else if (node.type === 1 /* NodeTypes.ELEMENT */) {\n        // handle directives on element\n        for (let i = 0; i < node.props.length; i++) {\n            const dir = node.props[i];\n            // do not process for v-on & v-for since they are special handled\n            if (dir.type === 7 /* NodeTypes.DIRECTIVE */ && dir.name !== 'for') {\n                const exp = dir.exp;\n                const arg = dir.arg;\n                // do not process exp if this is v-on:arg - we need special handling\n                // for wrapping inline statements.\n                if (exp &&\n                    exp.type === 4 /* NodeTypes.SIMPLE_EXPRESSION */ &&\n                    !(dir.name === 'on' && arg)) {\n                    dir.exp = processExpression(exp, context, \n                    // slot args must be processed as function params\n                    dir.name === 'slot');\n                }\n                if (arg && arg.type === 4 /* NodeTypes.SIMPLE_EXPRESSION */ && !arg.isStatic) {\n                    dir.arg = processExpression(arg, context);\n                }\n            }\n        }\n    }\n};\n// Important: since this function uses Node.js only dependencies, it should\n// always be used with a leading !true check so that it can be\n// tree-shaken from the browser build.\nfunction processExpression(node, context, \n// some expressions like v-slot props & v-for aliases should be parsed as\n// function params\nasParams = false, \n// v-on handler values may contain multiple statements\nasRawStatements = false, localVars = Object.create(context.identifiers)) {\n    {\n        {\n            // simple in-browser validation (same logic in 2.x)\n            validateBrowserExpression(node, context, asParams, asRawStatements);\n        }\n        return node;\n    }\n}\nfunction stringifyExpression(exp) {\n    if (isString(exp)) {\n        return exp;\n    }\n    else if (exp.type === 4 /* NodeTypes.SIMPLE_EXPRESSION */) {\n        return exp.content;\n    }\n    else {\n        return exp.children\n            .map(stringifyExpression)\n            .join('');\n    }\n}\n\nconst transformIf = createStructuralDirectiveTransform(/^(if|else|else-if)$/, (node, dir, context) => {\n    return processIf(node, dir, context, (ifNode, branch, isRoot) => {\n        // #1587: We need to dynamically increment the key based on the current\n        // node's sibling nodes, since chained v-if/else branches are\n        // rendered at the same depth\n        const siblings = context.parent.children;\n        let i = siblings.indexOf(ifNode);\n        let key = 0;\n        while (i-- >= 0) {\n            const sibling = siblings[i];\n            if (sibling && sibling.type === 9 /* NodeTypes.IF */) {\n                key += sibling.branches.length;\n            }\n        }\n        // Exit callback. Complete the codegenNode when all children have been\n        // transformed.\n        return () => {\n            if (isRoot) {\n                ifNode.codegenNode = createCodegenNodeForBranch(branch, key, context);\n            }\n            else {\n                // attach this branch's codegen node to the v-if root.\n                const parentCondition = getParentCondition(ifNode.codegenNode);\n                parentCondition.alternate = createCodegenNodeForBranch(branch, key + ifNode.branches.length - 1, context);\n            }\n        };\n    });\n});\n// target-agnostic transform used for both Client and SSR\nfunction processIf(node, dir, context, processCodegen) {\n    if (dir.name !== 'else' &&\n        (!dir.exp || !dir.exp.content.trim())) {\n        const loc = dir.exp ? dir.exp.loc : node.loc;\n        context.onError(createCompilerError(28 /* ErrorCodes.X_V_IF_NO_EXPRESSION */, dir.loc));\n        dir.exp = createSimpleExpression(`true`, false, loc);\n    }\n    if (dir.exp) {\n        validateBrowserExpression(dir.exp, context);\n    }\n    if (dir.name === 'if') {\n        const branch = createIfBranch(node, dir);\n        const ifNode = {\n            type: 9 /* NodeTypes.IF */,\n            loc: node.loc,\n            branches: [branch]\n        };\n        context.replaceNode(ifNode);\n        if (processCodegen) {\n            return processCodegen(ifNode, branch, true);\n        }\n    }\n    else {\n        // locate the adjacent v-if\n        const siblings = context.parent.children;\n        const comments = [];\n        let i = siblings.indexOf(node);\n        while (i-- >= -1) {\n            const sibling = siblings[i];\n            if (sibling && sibling.type === 3 /* NodeTypes.COMMENT */) {\n                context.removeNode(sibling);\n                comments.unshift(sibling);\n                continue;\n            }\n            if (sibling &&\n                sibling.type === 2 /* NodeTypes.TEXT */ &&\n                !sibling.content.trim().length) {\n                context.removeNode(sibling);\n                continue;\n            }\n            if (sibling && sibling.type === 9 /* NodeTypes.IF */) {\n                // Check if v-else was followed by v-else-if\n                if (dir.name === 'else-if' &&\n                    sibling.branches[sibling.branches.length - 1].condition === undefined) {\n                    context.onError(createCompilerError(30 /* ErrorCodes.X_V_ELSE_NO_ADJACENT_IF */, node.loc));\n                }\n                // move the node to the if node's branches\n                context.removeNode();\n                const branch = createIfBranch(node, dir);\n                if (comments.length &&\n                    // #3619 ignore comments if the v-if is direct child of <transition>\n                    !(context.parent &&\n                        context.parent.type === 1 /* NodeTypes.ELEMENT */ &&\n                        isBuiltInType(context.parent.tag, 'transition'))) {\n                    branch.children = [...comments, ...branch.children];\n                }\n                // check if user is forcing same key on different branches\n                {\n                    const key = branch.userKey;\n                    if (key) {\n                        sibling.branches.forEach(({ userKey }) => {\n                            if (isSameKey(userKey, key)) {\n                                context.onError(createCompilerError(29 /* ErrorCodes.X_V_IF_SAME_KEY */, branch.userKey.loc));\n                            }\n                        });\n                    }\n                }\n                sibling.branches.push(branch);\n                const onExit = processCodegen && processCodegen(sibling, branch, false);\n                // since the branch was removed, it will not be traversed.\n                // make sure to traverse here.\n                traverseNode(branch, context);\n                // call on exit\n                if (onExit)\n                    onExit();\n                // make sure to reset currentNode after traversal to indicate this\n                // node has been removed.\n                context.currentNode = null;\n            }\n            else {\n                context.onError(createCompilerError(30 /* ErrorCodes.X_V_ELSE_NO_ADJACENT_IF */, node.loc));\n            }\n            break;\n        }\n    }\n}\nfunction createIfBranch(node, dir) {\n    const isTemplateIf = node.tagType === 3 /* ElementTypes.TEMPLATE */;\n    return {\n        type: 10 /* NodeTypes.IF_BRANCH */,\n        loc: node.loc,\n        condition: dir.name === 'else' ? undefined : dir.exp,\n        children: isTemplateIf && !findDir(node, 'for') ? node.children : [node],\n        userKey: findProp(node, `key`),\n        isTemplateIf\n    };\n}\nfunction createCodegenNodeForBranch(branch, keyIndex, context) {\n    if (branch.condition) {\n        return createConditionalExpression(branch.condition, createChildrenCodegenNode(branch, keyIndex, context), \n        // make sure to pass in asBlock: true so that the comment node call\n        // closes the current block.\n        createCallExpression(context.helper(CREATE_COMMENT), [\n            '\"v-if\"' ,\n            'true'\n        ]));\n    }\n    else {\n        return createChildrenCodegenNode(branch, keyIndex, context);\n    }\n}\nfunction createChildrenCodegenNode(branch, keyIndex, context) {\n    const { helper } = context;\n    const keyProperty = createObjectProperty(`key`, createSimpleExpression(`${keyIndex}`, false, locStub, 2 /* ConstantTypes.CAN_HOIST */));\n    const { children } = branch;\n    const firstChild = children[0];\n    const needFragmentWrapper = children.length !== 1 || firstChild.type !== 1 /* NodeTypes.ELEMENT */;\n    if (needFragmentWrapper) {\n        if (children.length === 1 && firstChild.type === 11 /* NodeTypes.FOR */) {\n            // optimize away nested fragments when child is a ForNode\n            const vnodeCall = firstChild.codegenNode;\n            injectProp(vnodeCall, keyProperty, context);\n            return vnodeCall;\n        }\n        else {\n            let patchFlag = 64 /* PatchFlags.STABLE_FRAGMENT */;\n            let patchFlagText = PatchFlagNames[64 /* PatchFlags.STABLE_FRAGMENT */];\n            // check if the fragment actually contains a single valid child with\n            // the rest being comments\n            if (!branch.isTemplateIf &&\n                children.filter(c => c.type !== 3 /* NodeTypes.COMMENT */).length === 1) {\n                patchFlag |= 2048 /* PatchFlags.DEV_ROOT_FRAGMENT */;\n                patchFlagText += `, ${PatchFlagNames[2048 /* PatchFlags.DEV_ROOT_FRAGMENT */]}`;\n            }\n            return createVNodeCall(context, helper(FRAGMENT), createObjectExpression([keyProperty]), children, patchFlag + (` /* ${patchFlagText} */` ), undefined, undefined, true, false, false /* isComponent */, branch.loc);\n        }\n    }\n    else {\n        const ret = firstChild.codegenNode;\n        const vnodeCall = getMemoedVNodeCall(ret);\n        // Change createVNode to createBlock.\n        if (vnodeCall.type === 13 /* NodeTypes.VNODE_CALL */) {\n            makeBlock(vnodeCall, context);\n        }\n        // inject branch key\n        injectProp(vnodeCall, keyProperty, context);\n        return ret;\n    }\n}\nfunction isSameKey(a, b) {\n    if (!a || a.type !== b.type) {\n        return false;\n    }\n    if (a.type === 6 /* NodeTypes.ATTRIBUTE */) {\n        if (a.value.content !== b.value.content) {\n            return false;\n        }\n    }\n    else {\n        // directive\n        const exp = a.exp;\n        const branchExp = b.exp;\n        if (exp.type !== branchExp.type) {\n            return false;\n        }\n        if (exp.type !== 4 /* NodeTypes.SIMPLE_EXPRESSION */ ||\n            exp.isStatic !== branchExp.isStatic ||\n            exp.content !== branchExp.content) {\n            return false;\n        }\n    }\n    return true;\n}\nfunction getParentCondition(node) {\n    while (true) {\n        if (node.type === 19 /* NodeTypes.JS_CONDITIONAL_EXPRESSION */) {\n            if (node.alternate.type === 19 /* NodeTypes.JS_CONDITIONAL_EXPRESSION */) {\n                node = node.alternate;\n            }\n            else {\n                return node;\n            }\n        }\n        else if (node.type === 20 /* NodeTypes.JS_CACHE_EXPRESSION */) {\n            node = node.value;\n        }\n    }\n}\n\nconst transformFor = createStructuralDirectiveTransform('for', (node, dir, context) => {\n    const { helper, removeHelper } = context;\n    return processFor(node, dir, context, forNode => {\n        // create the loop render function expression now, and add the\n        // iterator on exit after all children have been traversed\n        const renderExp = createCallExpression(helper(RENDER_LIST), [\n            forNode.source\n        ]);\n        const isTemplate = isTemplateNode(node);\n        const memo = findDir(node, 'memo');\n        const keyProp = findProp(node, `key`);\n        const keyExp = keyProp &&\n            (keyProp.type === 6 /* NodeTypes.ATTRIBUTE */\n                ? createSimpleExpression(keyProp.value.content, true)\n                : keyProp.exp);\n        const keyProperty = keyProp ? createObjectProperty(`key`, keyExp) : null;\n        const isStableFragment = forNode.source.type === 4 /* NodeTypes.SIMPLE_EXPRESSION */ &&\n            forNode.source.constType > 0 /* ConstantTypes.NOT_CONSTANT */;\n        const fragmentFlag = isStableFragment\n            ? 64 /* PatchFlags.STABLE_FRAGMENT */\n            : keyProp\n                ? 128 /* PatchFlags.KEYED_FRAGMENT */\n                : 256 /* PatchFlags.UNKEYED_FRAGMENT */;\n        forNode.codegenNode = createVNodeCall(context, helper(FRAGMENT), undefined, renderExp, fragmentFlag +\n            (` /* ${PatchFlagNames[fragmentFlag]} */` ), undefined, undefined, true /* isBlock */, !isStableFragment /* disableTracking */, false /* isComponent */, node.loc);\n        return () => {\n            // finish the codegen now that all children have been traversed\n            let childBlock;\n            const { children } = forNode;\n            // check <template v-for> key placement\n            if (isTemplate) {\n                node.children.some(c => {\n                    if (c.type === 1 /* NodeTypes.ELEMENT */) {\n                        const key = findProp(c, 'key');\n                        if (key) {\n                            context.onError(createCompilerError(33 /* ErrorCodes.X_V_FOR_TEMPLATE_KEY_PLACEMENT */, key.loc));\n                            return true;\n                        }\n                    }\n                });\n            }\n            const needFragmentWrapper = children.length !== 1 || children[0].type !== 1 /* NodeTypes.ELEMENT */;\n            const slotOutlet = isSlotOutlet(node)\n                ? node\n                : isTemplate &&\n                    node.children.length === 1 &&\n                    isSlotOutlet(node.children[0])\n                    ? node.children[0] // api-extractor somehow fails to infer this\n                    : null;\n            if (slotOutlet) {\n                // <slot v-for=\"...\"> or <template v-for=\"...\"><slot/></template>\n                childBlock = slotOutlet.codegenNode;\n                if (isTemplate && keyProperty) {\n                    // <template v-for=\"...\" :key=\"...\"><slot/></template>\n                    // we need to inject the key to the renderSlot() call.\n                    // the props for renderSlot is passed as the 3rd argument.\n                    injectProp(childBlock, keyProperty, context);\n                }\n            }\n            else if (needFragmentWrapper) {\n                // <template v-for=\"...\"> with text or multi-elements\n                // should generate a fragment block for each loop\n                childBlock = createVNodeCall(context, helper(FRAGMENT), keyProperty ? createObjectExpression([keyProperty]) : undefined, node.children, 64 /* PatchFlags.STABLE_FRAGMENT */ +\n                    (` /* ${PatchFlagNames[64 /* PatchFlags.STABLE_FRAGMENT */]} */`\n                        ), undefined, undefined, true, undefined, false /* isComponent */);\n            }\n            else {\n                // Normal element v-for. Directly use the child's codegenNode\n                // but mark it as a block.\n                childBlock = children[0]\n                    .codegenNode;\n                if (isTemplate && keyProperty) {\n                    injectProp(childBlock, keyProperty, context);\n                }\n                if (childBlock.isBlock !== !isStableFragment) {\n                    if (childBlock.isBlock) {\n                        // switch from block to vnode\n                        removeHelper(OPEN_BLOCK);\n                        removeHelper(getVNodeBlockHelper(context.inSSR, childBlock.isComponent));\n                    }\n                    else {\n                        // switch from vnode to block\n                        removeHelper(getVNodeHelper(context.inSSR, childBlock.isComponent));\n                    }\n                }\n                childBlock.isBlock = !isStableFragment;\n                if (childBlock.isBlock) {\n                    helper(OPEN_BLOCK);\n                    helper(getVNodeBlockHelper(context.inSSR, childBlock.isComponent));\n                }\n                else {\n                    helper(getVNodeHelper(context.inSSR, childBlock.isComponent));\n                }\n            }\n            if (memo) {\n                const loop = createFunctionExpression(createForLoopParams(forNode.parseResult, [\n                    createSimpleExpression(`_cached`)\n                ]));\n                loop.body = createBlockStatement([\n                    createCompoundExpression([`const _memo = (`, memo.exp, `)`]),\n                    createCompoundExpression([\n                        `if (_cached`,\n                        ...(keyExp ? [` && _cached.key === `, keyExp] : []),\n                        ` && ${context.helperString(IS_MEMO_SAME)}(_cached, _memo)) return _cached`\n                    ]),\n                    createCompoundExpression([`const _item = `, childBlock]),\n                    createSimpleExpression(`_item.memo = _memo`),\n                    createSimpleExpression(`return _item`)\n                ]);\n                renderExp.arguments.push(loop, createSimpleExpression(`_cache`), createSimpleExpression(String(context.cached++)));\n            }\n            else {\n                renderExp.arguments.push(createFunctionExpression(createForLoopParams(forNode.parseResult), childBlock, true /* force newline */));\n            }\n        };\n    });\n});\n// target-agnostic transform used for both Client and SSR\nfunction processFor(node, dir, context, processCodegen) {\n    if (!dir.exp) {\n        context.onError(createCompilerError(31 /* ErrorCodes.X_V_FOR_NO_EXPRESSION */, dir.loc));\n        return;\n    }\n    const parseResult = parseForExpression(\n    // can only be simple expression because vFor transform is applied\n    // before expression transform.\n    dir.exp, context);\n    if (!parseResult) {\n        context.onError(createCompilerError(32 /* ErrorCodes.X_V_FOR_MALFORMED_EXPRESSION */, dir.loc));\n        return;\n    }\n    const { addIdentifiers, removeIdentifiers, scopes } = context;\n    const { source, value, key, index } = parseResult;\n    const forNode = {\n        type: 11 /* NodeTypes.FOR */,\n        loc: dir.loc,\n        source,\n        valueAlias: value,\n        keyAlias: key,\n        objectIndexAlias: index,\n        parseResult,\n        children: isTemplateNode(node) ? node.children : [node]\n    };\n    context.replaceNode(forNode);\n    // bookkeeping\n    scopes.vFor++;\n    const onExit = processCodegen && processCodegen(forNode);\n    return () => {\n        scopes.vFor--;\n        if (onExit)\n            onExit();\n    };\n}\nconst forAliasRE = /([\\s\\S]*?)\\s+(?:in|of)\\s+([\\s\\S]*)/;\n// This regex doesn't cover the case if key or index aliases have destructuring,\n// but those do not make sense in the first place, so this works in practice.\nconst forIteratorRE = /,([^,\\}\\]]*)(?:,([^,\\}\\]]*))?$/;\nconst stripParensRE = /^\\(|\\)$/g;\nfunction parseForExpression(input, context) {\n    const loc = input.loc;\n    const exp = input.content;\n    const inMatch = exp.match(forAliasRE);\n    if (!inMatch)\n        return;\n    const [, LHS, RHS] = inMatch;\n    const result = {\n        source: createAliasExpression(loc, RHS.trim(), exp.indexOf(RHS, LHS.length)),\n        value: undefined,\n        key: undefined,\n        index: undefined\n    };\n    {\n        validateBrowserExpression(result.source, context);\n    }\n    let valueContent = LHS.trim().replace(stripParensRE, '').trim();\n    const trimmedOffset = LHS.indexOf(valueContent);\n    const iteratorMatch = valueContent.match(forIteratorRE);\n    if (iteratorMatch) {\n        valueContent = valueContent.replace(forIteratorRE, '').trim();\n        const keyContent = iteratorMatch[1].trim();\n        let keyOffset;\n        if (keyContent) {\n            keyOffset = exp.indexOf(keyContent, trimmedOffset + valueContent.length);\n            result.key = createAliasExpression(loc, keyContent, keyOffset);\n            {\n                validateBrowserExpression(result.key, context, true);\n            }\n        }\n        if (iteratorMatch[2]) {\n            const indexContent = iteratorMatch[2].trim();\n            if (indexContent) {\n                result.index = createAliasExpression(loc, indexContent, exp.indexOf(indexContent, result.key\n                    ? keyOffset + keyContent.length\n                    : trimmedOffset + valueContent.length));\n                {\n                    validateBrowserExpression(result.index, context, true);\n                }\n            }\n        }\n    }\n    if (valueContent) {\n        result.value = createAliasExpression(loc, valueContent, trimmedOffset);\n        {\n            validateBrowserExpression(result.value, context, true);\n        }\n    }\n    return result;\n}\nfunction createAliasExpression(range, content, offset) {\n    return createSimpleExpression(content, false, getInnerRange(range, offset, content.length));\n}\nfunction createForLoopParams({ value, key, index }, memoArgs = []) {\n    return createParamsList([value, key, index, ...memoArgs]);\n}\nfunction createParamsList(args) {\n    let i = args.length;\n    while (i--) {\n        if (args[i])\n            break;\n    }\n    return args\n        .slice(0, i + 1)\n        .map((arg, i) => arg || createSimpleExpression(`_`.repeat(i + 1), false));\n}\n\nconst defaultFallback = createSimpleExpression(`undefined`, false);\n// A NodeTransform that:\n// 1. Tracks scope identifiers for scoped slots so that they don't get prefixed\n//    by transformExpression. This is only applied in non-browser builds with\n//    { prefixIdentifiers: true }.\n// 2. Track v-slot depths so that we know a slot is inside another slot.\n//    Note the exit callback is executed before buildSlots() on the same node,\n//    so only nested slots see positive numbers.\nconst trackSlotScopes = (node, context) => {\n    if (node.type === 1 /* NodeTypes.ELEMENT */ &&\n        (node.tagType === 1 /* ElementTypes.COMPONENT */ ||\n            node.tagType === 3 /* ElementTypes.TEMPLATE */)) {\n        // We are only checking non-empty v-slot here\n        // since we only care about slots that introduce scope variables.\n        const vSlot = findDir(node, 'slot');\n        if (vSlot) {\n            vSlot.exp;\n            context.scopes.vSlot++;\n            return () => {\n                context.scopes.vSlot--;\n            };\n        }\n    }\n};\n// A NodeTransform that tracks scope identifiers for scoped slots with v-for.\n// This transform is only applied in non-browser builds with { prefixIdentifiers: true }\nconst trackVForSlotScopes = (node, context) => {\n    let vFor;\n    if (isTemplateNode(node) &&\n        node.props.some(isVSlot) &&\n        (vFor = findDir(node, 'for'))) {\n        const result = (vFor.parseResult = parseForExpression(vFor.exp, context));\n        if (result) {\n            const { value, key, index } = result;\n            const { addIdentifiers, removeIdentifiers } = context;\n            value && addIdentifiers(value);\n            key && addIdentifiers(key);\n            index && addIdentifiers(index);\n            return () => {\n                value && removeIdentifiers(value);\n                key && removeIdentifiers(key);\n                index && removeIdentifiers(index);\n            };\n        }\n    }\n};\nconst buildClientSlotFn = (props, children, loc) => createFunctionExpression(props, children, false /* newline */, true /* isSlot */, children.length ? children[0].loc : loc);\n// Instead of being a DirectiveTransform, v-slot processing is called during\n// transformElement to build the slots object for a component.\nfunction buildSlots(node, context, buildSlotFn = buildClientSlotFn) {\n    context.helper(WITH_CTX);\n    const { children, loc } = node;\n    const slotsProperties = [];\n    const dynamicSlots = [];\n    // If the slot is inside a v-for or another v-slot, force it to be dynamic\n    // since it likely uses a scope variable.\n    let hasDynamicSlots = context.scopes.vSlot > 0 || context.scopes.vFor > 0;\n    // 1. Check for slot with slotProps on component itself.\n    //    <Comp v-slot=\"{ prop }\"/>\n    const onComponentSlot = findDir(node, 'slot', true);\n    if (onComponentSlot) {\n        const { arg, exp } = onComponentSlot;\n        if (arg && !isStaticExp(arg)) {\n            hasDynamicSlots = true;\n        }\n        slotsProperties.push(createObjectProperty(arg || createSimpleExpression('default', true), buildSlotFn(exp, children, loc)));\n    }\n    // 2. Iterate through children and check for template slots\n    //    <template v-slot:foo=\"{ prop }\">\n    let hasTemplateSlots = false;\n    let hasNamedDefaultSlot = false;\n    const implicitDefaultChildren = [];\n    const seenSlotNames = new Set();\n    let conditionalBranchIndex = 0;\n    for (let i = 0; i < children.length; i++) {\n        const slotElement = children[i];\n        let slotDir;\n        if (!isTemplateNode(slotElement) ||\n            !(slotDir = findDir(slotElement, 'slot', true))) {\n            // not a <template v-slot>, skip.\n            if (slotElement.type !== 3 /* NodeTypes.COMMENT */) {\n                implicitDefaultChildren.push(slotElement);\n            }\n            continue;\n        }\n        if (onComponentSlot) {\n            // already has on-component slot - this is incorrect usage.\n            context.onError(createCompilerError(37 /* ErrorCodes.X_V_SLOT_MIXED_SLOT_USAGE */, slotDir.loc));\n            break;\n        }\n        hasTemplateSlots = true;\n        const { children: slotChildren, loc: slotLoc } = slotElement;\n        const { arg: slotName = createSimpleExpression(`default`, true), exp: slotProps, loc: dirLoc } = slotDir;\n        // check if name is dynamic.\n        let staticSlotName;\n        if (isStaticExp(slotName)) {\n            staticSlotName = slotName ? slotName.content : `default`;\n        }\n        else {\n            hasDynamicSlots = true;\n        }\n        const slotFunction = buildSlotFn(slotProps, slotChildren, slotLoc);\n        // check if this slot is conditional (v-if/v-for)\n        let vIf;\n        let vElse;\n        let vFor;\n        if ((vIf = findDir(slotElement, 'if'))) {\n            hasDynamicSlots = true;\n            dynamicSlots.push(createConditionalExpression(vIf.exp, buildDynamicSlot(slotName, slotFunction, conditionalBranchIndex++), defaultFallback));\n        }\n        else if ((vElse = findDir(slotElement, /^else(-if)?$/, true /* allowEmpty */))) {\n            // find adjacent v-if\n            let j = i;\n            let prev;\n            while (j--) {\n                prev = children[j];\n                if (prev.type !== 3 /* NodeTypes.COMMENT */) {\n                    break;\n                }\n            }\n            if (prev && isTemplateNode(prev) && findDir(prev, 'if')) {\n                // remove node\n                children.splice(i, 1);\n                i--;\n                // attach this slot to previous conditional\n                let conditional = dynamicSlots[dynamicSlots.length - 1];\n                while (conditional.alternate.type === 19 /* NodeTypes.JS_CONDITIONAL_EXPRESSION */) {\n                    conditional = conditional.alternate;\n                }\n                conditional.alternate = vElse.exp\n                    ? createConditionalExpression(vElse.exp, buildDynamicSlot(slotName, slotFunction, conditionalBranchIndex++), defaultFallback)\n                    : buildDynamicSlot(slotName, slotFunction, conditionalBranchIndex++);\n            }\n            else {\n                context.onError(createCompilerError(30 /* ErrorCodes.X_V_ELSE_NO_ADJACENT_IF */, vElse.loc));\n            }\n        }\n        else if ((vFor = findDir(slotElement, 'for'))) {\n            hasDynamicSlots = true;\n            const parseResult = vFor.parseResult ||\n                parseForExpression(vFor.exp, context);\n            if (parseResult) {\n                // Render the dynamic slots as an array and add it to the createSlot()\n                // args. The runtime knows how to handle it appropriately.\n                dynamicSlots.push(createCallExpression(context.helper(RENDER_LIST), [\n                    parseResult.source,\n                    createFunctionExpression(createForLoopParams(parseResult), buildDynamicSlot(slotName, slotFunction), true /* force newline */)\n                ]));\n            }\n            else {\n                context.onError(createCompilerError(32 /* ErrorCodes.X_V_FOR_MALFORMED_EXPRESSION */, vFor.loc));\n            }\n        }\n        else {\n            // check duplicate static names\n            if (staticSlotName) {\n                if (seenSlotNames.has(staticSlotName)) {\n                    context.onError(createCompilerError(38 /* ErrorCodes.X_V_SLOT_DUPLICATE_SLOT_NAMES */, dirLoc));\n                    continue;\n                }\n                seenSlotNames.add(staticSlotName);\n                if (staticSlotName === 'default') {\n                    hasNamedDefaultSlot = true;\n                }\n            }\n            slotsProperties.push(createObjectProperty(slotName, slotFunction));\n        }\n    }\n    if (!onComponentSlot) {\n        const buildDefaultSlotProperty = (props, children) => {\n            const fn = buildSlotFn(props, children, loc);\n            if (context.compatConfig) {\n                fn.isNonScopedSlot = true;\n            }\n            return createObjectProperty(`default`, fn);\n        };\n        if (!hasTemplateSlots) {\n            // implicit default slot (on component)\n            slotsProperties.push(buildDefaultSlotProperty(undefined, children));\n        }\n        else if (implicitDefaultChildren.length &&\n            // #3766\n            // with whitespace: 'preserve', whitespaces between slots will end up in\n            // implicitDefaultChildren. Ignore if all implicit children are whitespaces.\n            implicitDefaultChildren.some(node => isNonWhitespaceContent(node))) {\n            // implicit default slot (mixed with named slots)\n            if (hasNamedDefaultSlot) {\n                context.onError(createCompilerError(39 /* ErrorCodes.X_V_SLOT_EXTRANEOUS_DEFAULT_SLOT_CHILDREN */, implicitDefaultChildren[0].loc));\n            }\n            else {\n                slotsProperties.push(buildDefaultSlotProperty(undefined, implicitDefaultChildren));\n            }\n        }\n    }\n    const slotFlag = hasDynamicSlots\n        ? 2 /* SlotFlags.DYNAMIC */\n        : hasForwardedSlots(node.children)\n            ? 3 /* SlotFlags.FORWARDED */\n            : 1 /* SlotFlags.STABLE */;\n    let slots = createObjectExpression(slotsProperties.concat(createObjectProperty(`_`, \n    // 2 = compiled but dynamic = can skip normalization, but must run diff\n    // 1 = compiled and static = can skip normalization AND diff as optimized\n    createSimpleExpression(slotFlag + (` /* ${slotFlagsText[slotFlag]} */` ), false))), loc);\n    if (dynamicSlots.length) {\n        slots = createCallExpression(context.helper(CREATE_SLOTS), [\n            slots,\n            createArrayExpression(dynamicSlots)\n        ]);\n    }\n    return {\n        slots,\n        hasDynamicSlots\n    };\n}\nfunction buildDynamicSlot(name, fn, index) {\n    const props = [\n        createObjectProperty(`name`, name),\n        createObjectProperty(`fn`, fn)\n    ];\n    if (index != null) {\n        props.push(createObjectProperty(`key`, createSimpleExpression(String(index), true)));\n    }\n    return createObjectExpression(props);\n}\nfunction hasForwardedSlots(children) {\n    for (let i = 0; i < children.length; i++) {\n        const child = children[i];\n        switch (child.type) {\n            case 1 /* NodeTypes.ELEMENT */:\n                if (child.tagType === 2 /* ElementTypes.SLOT */ ||\n                    hasForwardedSlots(child.children)) {\n                    return true;\n                }\n                break;\n            case 9 /* NodeTypes.IF */:\n                if (hasForwardedSlots(child.branches))\n                    return true;\n                break;\n            case 10 /* NodeTypes.IF_BRANCH */:\n            case 11 /* NodeTypes.FOR */:\n                if (hasForwardedSlots(child.children))\n                    return true;\n                break;\n        }\n    }\n    return false;\n}\nfunction isNonWhitespaceContent(node) {\n    if (node.type !== 2 /* NodeTypes.TEXT */ && node.type !== 12 /* NodeTypes.TEXT_CALL */)\n        return true;\n    return node.type === 2 /* NodeTypes.TEXT */\n        ? !!node.content.trim()\n        : isNonWhitespaceContent(node.content);\n}\n\n// some directive transforms (e.g. v-model) may return a symbol for runtime\n// import, which should be used instead of a resolveDirective call.\nconst directiveImportMap = new WeakMap();\n// generate a JavaScript AST for this element's codegen\nconst transformElement = (node, context) => {\n    // perform the work on exit, after all child expressions have been\n    // processed and merged.\n    return function postTransformElement() {\n        node = context.currentNode;\n        if (!(node.type === 1 /* NodeTypes.ELEMENT */ &&\n            (node.tagType === 0 /* ElementTypes.ELEMENT */ ||\n                node.tagType === 1 /* ElementTypes.COMPONENT */))) {\n            return;\n        }\n        const { tag, props } = node;\n        const isComponent = node.tagType === 1 /* ElementTypes.COMPONENT */;\n        // The goal of the transform is to create a codegenNode implementing the\n        // VNodeCall interface.\n        let vnodeTag = isComponent\n            ? resolveComponentType(node, context)\n            : `\"${tag}\"`;\n        const isDynamicComponent = isObject(vnodeTag) && vnodeTag.callee === RESOLVE_DYNAMIC_COMPONENT;\n        let vnodeProps;\n        let vnodeChildren;\n        let vnodePatchFlag;\n        let patchFlag = 0;\n        let vnodeDynamicProps;\n        let dynamicPropNames;\n        let vnodeDirectives;\n        let shouldUseBlock = \n        // dynamic component may resolve to plain elements\n        isDynamicComponent ||\n            vnodeTag === TELEPORT ||\n            vnodeTag === SUSPENSE ||\n            (!isComponent &&\n                // <svg> and <foreignObject> must be forced into blocks so that block\n                // updates inside get proper isSVG flag at runtime. (#639, #643)\n                // This is technically web-specific, but splitting the logic out of core\n                // leads to too much unnecessary complexity.\n                (tag === 'svg' || tag === 'foreignObject'));\n        // props\n        if (props.length > 0) {\n            const propsBuildResult = buildProps(node, context, undefined, isComponent, isDynamicComponent);\n            vnodeProps = propsBuildResult.props;\n            patchFlag = propsBuildResult.patchFlag;\n            dynamicPropNames = propsBuildResult.dynamicPropNames;\n            const directives = propsBuildResult.directives;\n            vnodeDirectives =\n                directives && directives.length\n                    ? createArrayExpression(directives.map(dir => buildDirectiveArgs(dir, context)))\n                    : undefined;\n            if (propsBuildResult.shouldUseBlock) {\n                shouldUseBlock = true;\n            }\n        }\n        // children\n        if (node.children.length > 0) {\n            if (vnodeTag === KEEP_ALIVE) {\n                // Although a built-in component, we compile KeepAlive with raw children\n                // instead of slot functions so that it can be used inside Transition\n                // or other Transition-wrapping HOCs.\n                // To ensure correct updates with block optimizations, we need to:\n                // 1. Force keep-alive into a block. This avoids its children being\n                //    collected by a parent block.\n                shouldUseBlock = true;\n                // 2. Force keep-alive to always be updated, since it uses raw children.\n                patchFlag |= 1024 /* PatchFlags.DYNAMIC_SLOTS */;\n                if (node.children.length > 1) {\n                    context.onError(createCompilerError(46 /* ErrorCodes.X_KEEP_ALIVE_INVALID_CHILDREN */, {\n                        start: node.children[0].loc.start,\n                        end: node.children[node.children.length - 1].loc.end,\n                        source: ''\n                    }));\n                }\n            }\n            const shouldBuildAsSlots = isComponent &&\n                // Teleport is not a real component and has dedicated runtime handling\n                vnodeTag !== TELEPORT &&\n                // explained above.\n                vnodeTag !== KEEP_ALIVE;\n            if (shouldBuildAsSlots) {\n                const { slots, hasDynamicSlots } = buildSlots(node, context);\n                vnodeChildren = slots;\n                if (hasDynamicSlots) {\n                    patchFlag |= 1024 /* PatchFlags.DYNAMIC_SLOTS */;\n                }\n            }\n            else if (node.children.length === 1 && vnodeTag !== TELEPORT) {\n                const child = node.children[0];\n                const type = child.type;\n                // check for dynamic text children\n                const hasDynamicTextChild = type === 5 /* NodeTypes.INTERPOLATION */ ||\n                    type === 8 /* NodeTypes.COMPOUND_EXPRESSION */;\n                if (hasDynamicTextChild &&\n                    getConstantType(child, context) === 0 /* ConstantTypes.NOT_CONSTANT */) {\n                    patchFlag |= 1 /* PatchFlags.TEXT */;\n                }\n                // pass directly if the only child is a text node\n                // (plain / interpolation / expression)\n                if (hasDynamicTextChild || type === 2 /* NodeTypes.TEXT */) {\n                    vnodeChildren = child;\n                }\n                else {\n                    vnodeChildren = node.children;\n                }\n            }\n            else {\n                vnodeChildren = node.children;\n            }\n        }\n        // patchFlag & dynamicPropNames\n        if (patchFlag !== 0) {\n            {\n                if (patchFlag < 0) {\n                    // special flags (negative and mutually exclusive)\n                    vnodePatchFlag = patchFlag + ` /* ${PatchFlagNames[patchFlag]} */`;\n                }\n                else {\n                    // bitwise flags\n                    const flagNames = Object.keys(PatchFlagNames)\n                        .map(Number)\n                        .filter(n => n > 0 && patchFlag & n)\n                        .map(n => PatchFlagNames[n])\n                        .join(`, `);\n                    vnodePatchFlag = patchFlag + ` /* ${flagNames} */`;\n                }\n            }\n            if (dynamicPropNames && dynamicPropNames.length) {\n                vnodeDynamicProps = stringifyDynamicPropNames(dynamicPropNames);\n            }\n        }\n        node.codegenNode = createVNodeCall(context, vnodeTag, vnodeProps, vnodeChildren, vnodePatchFlag, vnodeDynamicProps, vnodeDirectives, !!shouldUseBlock, false /* disableTracking */, isComponent, node.loc);\n    };\n};\nfunction resolveComponentType(node, context, ssr = false) {\n    let { tag } = node;\n    // 1. dynamic component\n    const isExplicitDynamic = isComponentTag(tag);\n    const isProp = findProp(node, 'is');\n    if (isProp) {\n        if (isExplicitDynamic ||\n            (isCompatEnabled(\"COMPILER_IS_ON_ELEMENT\" /* CompilerDeprecationTypes.COMPILER_IS_ON_ELEMENT */, context))) {\n            const exp = isProp.type === 6 /* NodeTypes.ATTRIBUTE */\n                ? isProp.value && createSimpleExpression(isProp.value.content, true)\n                : isProp.exp;\n            if (exp) {\n                return createCallExpression(context.helper(RESOLVE_DYNAMIC_COMPONENT), [\n                    exp\n                ]);\n            }\n        }\n        else if (isProp.type === 6 /* NodeTypes.ATTRIBUTE */ &&\n            isProp.value.content.startsWith('vue:')) {\n            // <button is=\"vue:xxx\">\n            // if not <component>, only is value that starts with \"vue:\" will be\n            // treated as component by the parse phase and reach here, unless it's\n            // compat mode where all is values are considered components\n            tag = isProp.value.content.slice(4);\n        }\n    }\n    // 1.5 v-is (TODO: Deprecate)\n    const isDir = !isExplicitDynamic && findDir(node, 'is');\n    if (isDir && isDir.exp) {\n        return createCallExpression(context.helper(RESOLVE_DYNAMIC_COMPONENT), [\n            isDir.exp\n        ]);\n    }\n    // 2. built-in components (Teleport, Transition, KeepAlive, Suspense...)\n    const builtIn = isCoreComponent(tag) || context.isBuiltInComponent(tag);\n    if (builtIn) {\n        // built-ins are simply fallthroughs / have special handling during ssr\n        // so we don't need to import their runtime equivalents\n        if (!ssr)\n            context.helper(builtIn);\n        return builtIn;\n    }\n    // 5. user component (resolve)\n    context.helper(RESOLVE_COMPONENT);\n    context.components.add(tag);\n    return toValidAssetId(tag, `component`);\n}\nfunction buildProps(node, context, props = node.props, isComponent, isDynamicComponent, ssr = false) {\n    const { tag, loc: elementLoc, children } = node;\n    let properties = [];\n    const mergeArgs = [];\n    const runtimeDirectives = [];\n    const hasChildren = children.length > 0;\n    let shouldUseBlock = false;\n    // patchFlag analysis\n    let patchFlag = 0;\n    let hasRef = false;\n    let hasClassBinding = false;\n    let hasStyleBinding = false;\n    let hasHydrationEventBinding = false;\n    let hasDynamicKeys = false;\n    let hasVnodeHook = false;\n    const dynamicPropNames = [];\n    const pushMergeArg = (arg) => {\n        if (properties.length) {\n            mergeArgs.push(createObjectExpression(dedupeProperties(properties), elementLoc));\n            properties = [];\n        }\n        if (arg)\n            mergeArgs.push(arg);\n    };\n    const analyzePatchFlag = ({ key, value }) => {\n        if (isStaticExp(key)) {\n            const name = key.content;\n            const isEventHandler = isOn(name);\n            if (isEventHandler &&\n                (!isComponent || isDynamicComponent) &&\n                // omit the flag for click handlers because hydration gives click\n                // dedicated fast path.\n                name.toLowerCase() !== 'onclick' &&\n                // omit v-model handlers\n                name !== 'onUpdate:modelValue' &&\n                // omit onVnodeXXX hooks\n                !isReservedProp(name)) {\n                hasHydrationEventBinding = true;\n            }\n            if (isEventHandler && isReservedProp(name)) {\n                hasVnodeHook = true;\n            }\n            if (value.type === 20 /* NodeTypes.JS_CACHE_EXPRESSION */ ||\n                ((value.type === 4 /* NodeTypes.SIMPLE_EXPRESSION */ ||\n                    value.type === 8 /* NodeTypes.COMPOUND_EXPRESSION */) &&\n                    getConstantType(value, context) > 0)) {\n                // skip if the prop is a cached handler or has constant value\n                return;\n            }\n            if (name === 'ref') {\n                hasRef = true;\n            }\n            else if (name === 'class') {\n                hasClassBinding = true;\n            }\n            else if (name === 'style') {\n                hasStyleBinding = true;\n            }\n            else if (name !== 'key' && !dynamicPropNames.includes(name)) {\n                dynamicPropNames.push(name);\n            }\n            // treat the dynamic class and style binding of the component as dynamic props\n            if (isComponent &&\n                (name === 'class' || name === 'style') &&\n                !dynamicPropNames.includes(name)) {\n                dynamicPropNames.push(name);\n            }\n        }\n        else {\n            hasDynamicKeys = true;\n        }\n    };\n    for (let i = 0; i < props.length; i++) {\n        // static attribute\n        const prop = props[i];\n        if (prop.type === 6 /* NodeTypes.ATTRIBUTE */) {\n            const { loc, name, value } = prop;\n            let isStatic = true;\n            if (name === 'ref') {\n                hasRef = true;\n                if (context.scopes.vFor > 0) {\n                    properties.push(createObjectProperty(createSimpleExpression('ref_for', true), createSimpleExpression('true')));\n                }\n            }\n            // skip is on <component>, or is=\"vue:xxx\"\n            if (name === 'is' &&\n                (isComponentTag(tag) ||\n                    (value && value.content.startsWith('vue:')) ||\n                    (isCompatEnabled(\"COMPILER_IS_ON_ELEMENT\" /* CompilerDeprecationTypes.COMPILER_IS_ON_ELEMENT */, context)))) {\n                continue;\n            }\n            properties.push(createObjectProperty(createSimpleExpression(name, true, getInnerRange(loc, 0, name.length)), createSimpleExpression(value ? value.content : '', isStatic, value ? value.loc : loc)));\n        }\n        else {\n            // directives\n            const { name, arg, exp, loc } = prop;\n            const isVBind = name === 'bind';\n            const isVOn = name === 'on';\n            // skip v-slot - it is handled by its dedicated transform.\n            if (name === 'slot') {\n                if (!isComponent) {\n                    context.onError(createCompilerError(40 /* ErrorCodes.X_V_SLOT_MISPLACED */, loc));\n                }\n                continue;\n            }\n            // skip v-once/v-memo - they are handled by dedicated transforms.\n            if (name === 'once' || name === 'memo') {\n                continue;\n            }\n            // skip v-is and :is on <component>\n            if (name === 'is' ||\n                (isVBind &&\n                    isStaticArgOf(arg, 'is') &&\n                    (isComponentTag(tag) ||\n                        (isCompatEnabled(\"COMPILER_IS_ON_ELEMENT\" /* CompilerDeprecationTypes.COMPILER_IS_ON_ELEMENT */, context))))) {\n                continue;\n            }\n            // skip v-on in SSR compilation\n            if (isVOn && ssr) {\n                continue;\n            }\n            if (\n            // #938: elements with dynamic keys should be forced into blocks\n            (isVBind && isStaticArgOf(arg, 'key')) ||\n                // inline before-update hooks need to force block so that it is invoked\n                // before children\n                (isVOn && hasChildren && isStaticArgOf(arg, 'vue:before-update'))) {\n                shouldUseBlock = true;\n            }\n            if (isVBind && isStaticArgOf(arg, 'ref') && context.scopes.vFor > 0) {\n                properties.push(createObjectProperty(createSimpleExpression('ref_for', true), createSimpleExpression('true')));\n            }\n            // special case for v-bind and v-on with no argument\n            if (!arg && (isVBind || isVOn)) {\n                hasDynamicKeys = true;\n                if (exp) {\n                    if (isVBind) {\n                        // have to merge early for compat build check\n                        pushMergeArg();\n                        {\n                            // 2.x v-bind object order compat\n                            {\n                                const hasOverridableKeys = mergeArgs.some(arg => {\n                                    if (arg.type === 15 /* NodeTypes.JS_OBJECT_EXPRESSION */) {\n                                        return arg.properties.some(({ key }) => {\n                                            if (key.type !== 4 /* NodeTypes.SIMPLE_EXPRESSION */ ||\n                                                !key.isStatic) {\n                                                return true;\n                                            }\n                                            return (key.content !== 'class' &&\n                                                key.content !== 'style' &&\n                                                !isOn(key.content));\n                                        });\n                                    }\n                                    else {\n                                        // dynamic expression\n                                        return true;\n                                    }\n                                });\n                                if (hasOverridableKeys) {\n                                    checkCompatEnabled(\"COMPILER_V_BIND_OBJECT_ORDER\" /* CompilerDeprecationTypes.COMPILER_V_BIND_OBJECT_ORDER */, context, loc);\n                                }\n                            }\n                            if (isCompatEnabled(\"COMPILER_V_BIND_OBJECT_ORDER\" /* CompilerDeprecationTypes.COMPILER_V_BIND_OBJECT_ORDER */, context)) {\n                                mergeArgs.unshift(exp);\n                                continue;\n                            }\n                        }\n                        mergeArgs.push(exp);\n                    }\n                    else {\n                        // v-on=\"obj\" -> toHandlers(obj)\n                        pushMergeArg({\n                            type: 14 /* NodeTypes.JS_CALL_EXPRESSION */,\n                            loc,\n                            callee: context.helper(TO_HANDLERS),\n                            arguments: isComponent ? [exp] : [exp, `true`]\n                        });\n                    }\n                }\n                else {\n                    context.onError(createCompilerError(isVBind\n                        ? 34 /* ErrorCodes.X_V_BIND_NO_EXPRESSION */\n                        : 35 /* ErrorCodes.X_V_ON_NO_EXPRESSION */, loc));\n                }\n                continue;\n            }\n            const directiveTransform = context.directiveTransforms[name];\n            if (directiveTransform) {\n                // has built-in directive transform.\n                const { props, needRuntime } = directiveTransform(prop, node, context);\n                !ssr && props.forEach(analyzePatchFlag);\n                if (isVOn && arg && !isStaticExp(arg)) {\n                    pushMergeArg(createObjectExpression(props, elementLoc));\n                }\n                else {\n                    properties.push(...props);\n                }\n                if (needRuntime) {\n                    runtimeDirectives.push(prop);\n                    if (isSymbol(needRuntime)) {\n                        directiveImportMap.set(prop, needRuntime);\n                    }\n                }\n            }\n            else if (!isBuiltInDirective(name)) {\n                // no built-in transform, this is a user custom directive.\n                runtimeDirectives.push(prop);\n                // custom dirs may use beforeUpdate so they need to force blocks\n                // to ensure before-update gets called before children update\n                if (hasChildren) {\n                    shouldUseBlock = true;\n                }\n            }\n        }\n    }\n    let propsExpression = undefined;\n    // has v-bind=\"object\" or v-on=\"object\", wrap with mergeProps\n    if (mergeArgs.length) {\n        // close up any not-yet-merged props\n        pushMergeArg();\n        if (mergeArgs.length > 1) {\n            propsExpression = createCallExpression(context.helper(MERGE_PROPS), mergeArgs, elementLoc);\n        }\n        else {\n            // single v-bind with nothing else - no need for a mergeProps call\n            propsExpression = mergeArgs[0];\n        }\n    }\n    else if (properties.length) {\n        propsExpression = createObjectExpression(dedupeProperties(properties), elementLoc);\n    }\n    // patchFlag analysis\n    if (hasDynamicKeys) {\n        patchFlag |= 16 /* PatchFlags.FULL_PROPS */;\n    }\n    else {\n        if (hasClassBinding && !isComponent) {\n            patchFlag |= 2 /* PatchFlags.CLASS */;\n        }\n        if (hasStyleBinding && !isComponent) {\n            patchFlag |= 4 /* PatchFlags.STYLE */;\n        }\n        if (dynamicPropNames.length) {\n            patchFlag |= 8 /* PatchFlags.PROPS */;\n        }\n        if (hasHydrationEventBinding) {\n            patchFlag |= 32 /* PatchFlags.HYDRATE_EVENTS */;\n        }\n    }\n    if (!shouldUseBlock &&\n        (patchFlag === 0 || patchFlag === 32 /* PatchFlags.HYDRATE_EVENTS */) &&\n        (hasRef || hasVnodeHook || runtimeDirectives.length > 0)) {\n        patchFlag |= 512 /* PatchFlags.NEED_PATCH */;\n    }\n    // pre-normalize props, SSR is skipped for now\n    if (!context.inSSR && propsExpression) {\n        switch (propsExpression.type) {\n            case 15 /* NodeTypes.JS_OBJECT_EXPRESSION */:\n                // means that there is no v-bind,\n                // but still need to deal with dynamic key binding\n                let classKeyIndex = -1;\n                let styleKeyIndex = -1;\n                let hasDynamicKey = false;\n                for (let i = 0; i < propsExpression.properties.length; i++) {\n                    const key = propsExpression.properties[i].key;\n                    if (isStaticExp(key)) {\n                        if (key.content === 'class') {\n                            classKeyIndex = i;\n                        }\n                        else if (key.content === 'style') {\n                            styleKeyIndex = i;\n                        }\n                    }\n                    else if (!key.isHandlerKey) {\n                        hasDynamicKey = true;\n                    }\n                }\n                const classProp = propsExpression.properties[classKeyIndex];\n                const styleProp = propsExpression.properties[styleKeyIndex];\n                // no dynamic key\n                if (!hasDynamicKey) {\n                    if (classProp && !isStaticExp(classProp.value)) {\n                        classProp.value = createCallExpression(context.helper(NORMALIZE_CLASS), [classProp.value]);\n                    }\n                    if (styleProp &&\n                        // the static style is compiled into an object,\n                        // so use `hasStyleBinding` to ensure that it is a dynamic style binding\n                        (hasStyleBinding ||\n                            (styleProp.value.type === 4 /* NodeTypes.SIMPLE_EXPRESSION */ &&\n                                styleProp.value.content.trim()[0] === `[`) ||\n                            // v-bind:style and style both exist,\n                            // v-bind:style with static literal object\n                            styleProp.value.type === 17 /* NodeTypes.JS_ARRAY_EXPRESSION */)) {\n                        styleProp.value = createCallExpression(context.helper(NORMALIZE_STYLE), [styleProp.value]);\n                    }\n                }\n                else {\n                    // dynamic key binding, wrap with `normalizeProps`\n                    propsExpression = createCallExpression(context.helper(NORMALIZE_PROPS), [propsExpression]);\n                }\n                break;\n            case 14 /* NodeTypes.JS_CALL_EXPRESSION */:\n                // mergeProps call, do nothing\n                break;\n            default:\n                // single v-bind\n                propsExpression = createCallExpression(context.helper(NORMALIZE_PROPS), [\n                    createCallExpression(context.helper(GUARD_REACTIVE_PROPS), [\n                        propsExpression\n                    ])\n                ]);\n                break;\n        }\n    }\n    return {\n        props: propsExpression,\n        directives: runtimeDirectives,\n        patchFlag,\n        dynamicPropNames,\n        shouldUseBlock\n    };\n}\n// Dedupe props in an object literal.\n// Literal duplicated attributes would have been warned during the parse phase,\n// however, it's possible to encounter duplicated `onXXX` handlers with different\n// modifiers. We also need to merge static and dynamic class / style attributes.\n// - onXXX handlers / style: merge into array\n// - class: merge into single expression with concatenation\nfunction dedupeProperties(properties) {\n    const knownProps = new Map();\n    const deduped = [];\n    for (let i = 0; i < properties.length; i++) {\n        const prop = properties[i];\n        // dynamic keys are always allowed\n        if (prop.key.type === 8 /* NodeTypes.COMPOUND_EXPRESSION */ || !prop.key.isStatic) {\n            deduped.push(prop);\n            continue;\n        }\n        const name = prop.key.content;\n        const existing = knownProps.get(name);\n        if (existing) {\n            if (name === 'style' || name === 'class' || isOn(name)) {\n                mergeAsArray(existing, prop);\n            }\n            // unexpected duplicate, should have emitted error during parse\n        }\n        else {\n            knownProps.set(name, prop);\n            deduped.push(prop);\n        }\n    }\n    return deduped;\n}\nfunction mergeAsArray(existing, incoming) {\n    if (existing.value.type === 17 /* NodeTypes.JS_ARRAY_EXPRESSION */) {\n        existing.value.elements.push(incoming.value);\n    }\n    else {\n        existing.value = createArrayExpression([existing.value, incoming.value], existing.loc);\n    }\n}\nfunction buildDirectiveArgs(dir, context) {\n    const dirArgs = [];\n    const runtime = directiveImportMap.get(dir);\n    if (runtime) {\n        // built-in directive with runtime\n        dirArgs.push(context.helperString(runtime));\n    }\n    else {\n        {\n            // inject statement for resolving directive\n            context.helper(RESOLVE_DIRECTIVE);\n            context.directives.add(dir.name);\n            dirArgs.push(toValidAssetId(dir.name, `directive`));\n        }\n    }\n    const { loc } = dir;\n    if (dir.exp)\n        dirArgs.push(dir.exp);\n    if (dir.arg) {\n        if (!dir.exp) {\n            dirArgs.push(`void 0`);\n        }\n        dirArgs.push(dir.arg);\n    }\n    if (Object.keys(dir.modifiers).length) {\n        if (!dir.arg) {\n            if (!dir.exp) {\n                dirArgs.push(`void 0`);\n            }\n            dirArgs.push(`void 0`);\n        }\n        const trueExpression = createSimpleExpression(`true`, false, loc);\n        dirArgs.push(createObjectExpression(dir.modifiers.map(modifier => createObjectProperty(modifier, trueExpression)), loc));\n    }\n    return createArrayExpression(dirArgs, dir.loc);\n}\nfunction stringifyDynamicPropNames(props) {\n    let propsNamesString = `[`;\n    for (let i = 0, l = props.length; i < l; i++) {\n        propsNamesString += JSON.stringify(props[i]);\n        if (i < l - 1)\n            propsNamesString += ', ';\n    }\n    return propsNamesString + `]`;\n}\nfunction isComponentTag(tag) {\n    return tag === 'component' || tag === 'Component';\n}\n\nconst transformSlotOutlet = (node, context) => {\n    if (isSlotOutlet(node)) {\n        const { children, loc } = node;\n        const { slotName, slotProps } = processSlotOutlet(node, context);\n        const slotArgs = [\n            context.prefixIdentifiers ? `_ctx.$slots` : `$slots`,\n            slotName,\n            '{}',\n            'undefined',\n            'true'\n        ];\n        let expectedLen = 2;\n        if (slotProps) {\n            slotArgs[2] = slotProps;\n            expectedLen = 3;\n        }\n        if (children.length) {\n            slotArgs[3] = createFunctionExpression([], children, false, false, loc);\n            expectedLen = 4;\n        }\n        if (context.scopeId && !context.slotted) {\n            expectedLen = 5;\n        }\n        slotArgs.splice(expectedLen); // remove unused arguments\n        node.codegenNode = createCallExpression(context.helper(RENDER_SLOT), slotArgs, loc);\n    }\n};\nfunction processSlotOutlet(node, context) {\n    let slotName = `\"default\"`;\n    let slotProps = undefined;\n    const nonNameProps = [];\n    for (let i = 0; i < node.props.length; i++) {\n        const p = node.props[i];\n        if (p.type === 6 /* NodeTypes.ATTRIBUTE */) {\n            if (p.value) {\n                if (p.name === 'name') {\n                    slotName = JSON.stringify(p.value.content);\n                }\n                else {\n                    p.name = camelize(p.name);\n                    nonNameProps.push(p);\n                }\n            }\n        }\n        else {\n            if (p.name === 'bind' && isStaticArgOf(p.arg, 'name')) {\n                if (p.exp)\n                    slotName = p.exp;\n            }\n            else {\n                if (p.name === 'bind' && p.arg && isStaticExp(p.arg)) {\n                    p.arg.content = camelize(p.arg.content);\n                }\n                nonNameProps.push(p);\n            }\n        }\n    }\n    if (nonNameProps.length > 0) {\n        const { props, directives } = buildProps(node, context, nonNameProps, false, false);\n        slotProps = props;\n        if (directives.length) {\n            context.onError(createCompilerError(36 /* ErrorCodes.X_V_SLOT_UNEXPECTED_DIRECTIVE_ON_SLOT_OUTLET */, directives[0].loc));\n        }\n    }\n    return {\n        slotName,\n        slotProps\n    };\n}\n\nconst fnExpRE = /^\\s*([\\w$_]+|(async\\s*)?\\([^)]*?\\))\\s*(:[^=]+)?=>|^\\s*(async\\s+)?function(?:\\s+[\\w$]+)?\\s*\\(/;\nconst transformOn$1 = (dir, node, context, augmentor) => {\n    const { loc, modifiers, arg } = dir;\n    if (!dir.exp && !modifiers.length) {\n        context.onError(createCompilerError(35 /* ErrorCodes.X_V_ON_NO_EXPRESSION */, loc));\n    }\n    let eventName;\n    if (arg.type === 4 /* NodeTypes.SIMPLE_EXPRESSION */) {\n        if (arg.isStatic) {\n            let rawName = arg.content;\n            // TODO deprecate @vnodeXXX usage\n            if (rawName.startsWith('vue:')) {\n                rawName = `vnode-${rawName.slice(4)}`;\n            }\n            const eventString = node.tagType !== 0 /* ElementTypes.ELEMENT */ ||\n                rawName.startsWith('vnode') ||\n                !/[A-Z]/.test(rawName)\n                ? // for non-element and vnode lifecycle event listeners, auto convert\n                    // it to camelCase. See issue #2249\n                    toHandlerKey(camelize(rawName))\n                : // preserve case for plain element listeners that have uppercase\n                    // letters, as these may be custom elements' custom events\n                    `on:${rawName}`;\n            eventName = createSimpleExpression(eventString, true, arg.loc);\n        }\n        else {\n            // #2388\n            eventName = createCompoundExpression([\n                `${context.helperString(TO_HANDLER_KEY)}(`,\n                arg,\n                `)`\n            ]);\n        }\n    }\n    else {\n        // already a compound expression.\n        eventName = arg;\n        eventName.children.unshift(`${context.helperString(TO_HANDLER_KEY)}(`);\n        eventName.children.push(`)`);\n    }\n    // handler processing\n    let exp = dir.exp;\n    if (exp && !exp.content.trim()) {\n        exp = undefined;\n    }\n    let shouldCache = context.cacheHandlers && !exp && !context.inVOnce;\n    if (exp) {\n        const isMemberExp = isMemberExpression(exp.content);\n        const isInlineStatement = !(isMemberExp || fnExpRE.test(exp.content));\n        const hasMultipleStatements = exp.content.includes(`;`);\n        {\n            validateBrowserExpression(exp, context, false, hasMultipleStatements);\n        }\n        if (isInlineStatement || (shouldCache && isMemberExp)) {\n            // wrap inline statement in a function expression\n            exp = createCompoundExpression([\n                `${isInlineStatement\n                    ? `$event`\n                    : `${``}(...args)`} => ${hasMultipleStatements ? `{` : `(`}`,\n                exp,\n                hasMultipleStatements ? `}` : `)`\n            ]);\n        }\n    }\n    let ret = {\n        props: [\n            createObjectProperty(eventName, exp || createSimpleExpression(`() => {}`, false, loc))\n        ]\n    };\n    // apply extended compiler augmentor\n    if (augmentor) {\n        ret = augmentor(ret);\n    }\n    if (shouldCache) {\n        // cache handlers so that it's always the same handler being passed down.\n        // this avoids unnecessary re-renders when users use inline handlers on\n        // components.\n        ret.props[0].value = context.cache(ret.props[0].value);\n    }\n    // mark the key as handler for props normalization check\n    ret.props.forEach(p => (p.key.isHandlerKey = true));\n    return ret;\n};\n\n// v-bind without arg is handled directly in ./transformElements.ts due to it affecting\n// codegen for the entire props object. This transform here is only for v-bind\n// *with* args.\nconst transformBind = (dir, _node, context) => {\n    const { exp, modifiers, loc } = dir;\n    const arg = dir.arg;\n    if (arg.type !== 4 /* NodeTypes.SIMPLE_EXPRESSION */) {\n        arg.children.unshift(`(`);\n        arg.children.push(`) || \"\"`);\n    }\n    else if (!arg.isStatic) {\n        arg.content = `${arg.content} || \"\"`;\n    }\n    // .sync is replaced by v-model:arg\n    if (modifiers.includes('camel')) {\n        if (arg.type === 4 /* NodeTypes.SIMPLE_EXPRESSION */) {\n            if (arg.isStatic) {\n                arg.content = camelize(arg.content);\n            }\n            else {\n                arg.content = `${context.helperString(CAMELIZE)}(${arg.content})`;\n            }\n        }\n        else {\n            arg.children.unshift(`${context.helperString(CAMELIZE)}(`);\n            arg.children.push(`)`);\n        }\n    }\n    if (!context.inSSR) {\n        if (modifiers.includes('prop')) {\n            injectPrefix(arg, '.');\n        }\n        if (modifiers.includes('attr')) {\n            injectPrefix(arg, '^');\n        }\n    }\n    if (!exp ||\n        (exp.type === 4 /* NodeTypes.SIMPLE_EXPRESSION */ && !exp.content.trim())) {\n        context.onError(createCompilerError(34 /* ErrorCodes.X_V_BIND_NO_EXPRESSION */, loc));\n        return {\n            props: [createObjectProperty(arg, createSimpleExpression('', true, loc))]\n        };\n    }\n    return {\n        props: [createObjectProperty(arg, exp)]\n    };\n};\nconst injectPrefix = (arg, prefix) => {\n    if (arg.type === 4 /* NodeTypes.SIMPLE_EXPRESSION */) {\n        if (arg.isStatic) {\n            arg.content = prefix + arg.content;\n        }\n        else {\n            arg.content = `\\`${prefix}\\${${arg.content}}\\``;\n        }\n    }\n    else {\n        arg.children.unshift(`'${prefix}' + (`);\n        arg.children.push(`)`);\n    }\n};\n\n// Merge adjacent text nodes and expressions into a single expression\n// e.g. <div>abc {{ d }} {{ e }}</div> should have a single expression node as child.\nconst transformText = (node, context) => {\n    if (node.type === 0 /* NodeTypes.ROOT */ ||\n        node.type === 1 /* NodeTypes.ELEMENT */ ||\n        node.type === 11 /* NodeTypes.FOR */ ||\n        node.type === 10 /* NodeTypes.IF_BRANCH */) {\n        // perform the transform on node exit so that all expressions have already\n        // been processed.\n        return () => {\n            const children = node.children;\n            let currentContainer = undefined;\n            let hasText = false;\n            for (let i = 0; i < children.length; i++) {\n                const child = children[i];\n                if (isText$1(child)) {\n                    hasText = true;\n                    for (let j = i + 1; j < children.length; j++) {\n                        const next = children[j];\n                        if (isText$1(next)) {\n                            if (!currentContainer) {\n                                currentContainer = children[i] = createCompoundExpression([child], child.loc);\n                            }\n                            // merge adjacent text node into current\n                            currentContainer.children.push(` + `, next);\n                            children.splice(j, 1);\n                            j--;\n                        }\n                        else {\n                            currentContainer = undefined;\n                            break;\n                        }\n                    }\n                }\n            }\n            if (!hasText ||\n                // if this is a plain element with a single text child, leave it\n                // as-is since the runtime has dedicated fast path for this by directly\n                // setting textContent of the element.\n                // for component root it's always normalized anyway.\n                (children.length === 1 &&\n                    (node.type === 0 /* NodeTypes.ROOT */ ||\n                        (node.type === 1 /* NodeTypes.ELEMENT */ &&\n                            node.tagType === 0 /* ElementTypes.ELEMENT */ &&\n                            // #3756\n                            // custom directives can potentially add DOM elements arbitrarily,\n                            // we need to avoid setting textContent of the element at runtime\n                            // to avoid accidentally overwriting the DOM elements added\n                            // by the user through custom directives.\n                            !node.props.find(p => p.type === 7 /* NodeTypes.DIRECTIVE */ &&\n                                !context.directiveTransforms[p.name]) &&\n                            // in compat mode, <template> tags with no special directives\n                            // will be rendered as a fragment so its children must be\n                            // converted into vnodes.\n                            !(node.tag === 'template'))))) {\n                return;\n            }\n            // pre-convert text nodes into createTextVNode(text) calls to avoid\n            // runtime normalization.\n            for (let i = 0; i < children.length; i++) {\n                const child = children[i];\n                if (isText$1(child) || child.type === 8 /* NodeTypes.COMPOUND_EXPRESSION */) {\n                    const callArgs = [];\n                    // createTextVNode defaults to single whitespace, so if it is a\n                    // single space the code could be an empty call to save bytes.\n                    if (child.type !== 2 /* NodeTypes.TEXT */ || child.content !== ' ') {\n                        callArgs.push(child);\n                    }\n                    // mark dynamic text with flag so it gets patched inside a block\n                    if (!context.ssr &&\n                        getConstantType(child, context) === 0 /* ConstantTypes.NOT_CONSTANT */) {\n                        callArgs.push(1 /* PatchFlags.TEXT */ +\n                            (` /* ${PatchFlagNames[1 /* PatchFlags.TEXT */]} */` ));\n                    }\n                    children[i] = {\n                        type: 12 /* NodeTypes.TEXT_CALL */,\n                        content: child,\n                        loc: child.loc,\n                        codegenNode: createCallExpression(context.helper(CREATE_TEXT), callArgs)\n                    };\n                }\n            }\n        };\n    }\n};\n\nconst seen$1 = new WeakSet();\nconst transformOnce = (node, context) => {\n    if (node.type === 1 /* NodeTypes.ELEMENT */ && findDir(node, 'once', true)) {\n        if (seen$1.has(node) || context.inVOnce) {\n            return;\n        }\n        seen$1.add(node);\n        context.inVOnce = true;\n        context.helper(SET_BLOCK_TRACKING);\n        return () => {\n            context.inVOnce = false;\n            const cur = context.currentNode;\n            if (cur.codegenNode) {\n                cur.codegenNode = context.cache(cur.codegenNode, true /* isVNode */);\n            }\n        };\n    }\n};\n\nconst transformModel$1 = (dir, node, context) => {\n    const { exp, arg } = dir;\n    if (!exp) {\n        context.onError(createCompilerError(41 /* ErrorCodes.X_V_MODEL_NO_EXPRESSION */, dir.loc));\n        return createTransformProps();\n    }\n    const rawExp = exp.loc.source;\n    const expString = exp.type === 4 /* NodeTypes.SIMPLE_EXPRESSION */ ? exp.content : rawExp;\n    // im SFC <script setup> inline mode, the exp may have been transformed into\n    // _unref(exp)\n    const bindingType = context.bindingMetadata[rawExp];\n    // check props\n    if (bindingType === \"props\" /* BindingTypes.PROPS */ ||\n        bindingType === \"props-aliased\" /* BindingTypes.PROPS_ALIASED */) {\n        context.onError(createCompilerError(44 /* ErrorCodes.X_V_MODEL_ON_PROPS */, exp.loc));\n        return createTransformProps();\n    }\n    const maybeRef = !true  ;\n    if (!expString.trim() ||\n        (!isMemberExpression(expString) && !maybeRef)) {\n        context.onError(createCompilerError(42 /* ErrorCodes.X_V_MODEL_MALFORMED_EXPRESSION */, exp.loc));\n        return createTransformProps();\n    }\n    const propName = arg ? arg : createSimpleExpression('modelValue', true);\n    const eventName = arg\n        ? isStaticExp(arg)\n            ? `onUpdate:${camelize(arg.content)}`\n            : createCompoundExpression(['\"onUpdate:\" + ', arg])\n        : `onUpdate:modelValue`;\n    let assignmentExp;\n    const eventArg = context.isTS ? `($event: any)` : `$event`;\n    {\n        assignmentExp = createCompoundExpression([\n            `${eventArg} => ((`,\n            exp,\n            `) = $event)`\n        ]);\n    }\n    const props = [\n        // modelValue: foo\n        createObjectProperty(propName, dir.exp),\n        // \"onUpdate:modelValue\": $event => (foo = $event)\n        createObjectProperty(eventName, assignmentExp)\n    ];\n    // modelModifiers: { foo: true, \"bar-baz\": true }\n    if (dir.modifiers.length && node.tagType === 1 /* ElementTypes.COMPONENT */) {\n        const modifiers = dir.modifiers\n            .map(m => (isSimpleIdentifier(m) ? m : JSON.stringify(m)) + `: true`)\n            .join(`, `);\n        const modifiersKey = arg\n            ? isStaticExp(arg)\n                ? `${arg.content}Modifiers`\n                : createCompoundExpression([arg, ' + \"Modifiers\"'])\n            : `modelModifiers`;\n        props.push(createObjectProperty(modifiersKey, createSimpleExpression(`{ ${modifiers} }`, false, dir.loc, 2 /* ConstantTypes.CAN_HOIST */)));\n    }\n    return createTransformProps(props);\n};\nfunction createTransformProps(props = []) {\n    return { props };\n}\n\nconst validDivisionCharRE = /[\\w).+\\-_$\\]]/;\nconst transformFilter = (node, context) => {\n    if (!isCompatEnabled(\"COMPILER_FILTER\" /* CompilerDeprecationTypes.COMPILER_FILTERS */, context)) {\n        return;\n    }\n    if (node.type === 5 /* NodeTypes.INTERPOLATION */) {\n        // filter rewrite is applied before expression transform so only\n        // simple expressions are possible at this stage\n        rewriteFilter(node.content, context);\n    }\n    if (node.type === 1 /* NodeTypes.ELEMENT */) {\n        node.props.forEach((prop) => {\n            if (prop.type === 7 /* NodeTypes.DIRECTIVE */ &&\n                prop.name !== 'for' &&\n                prop.exp) {\n                rewriteFilter(prop.exp, context);\n            }\n        });\n    }\n};\nfunction rewriteFilter(node, context) {\n    if (node.type === 4 /* NodeTypes.SIMPLE_EXPRESSION */) {\n        parseFilter(node, context);\n    }\n    else {\n        for (let i = 0; i < node.children.length; i++) {\n            const child = node.children[i];\n            if (typeof child !== 'object')\n                continue;\n            if (child.type === 4 /* NodeTypes.SIMPLE_EXPRESSION */) {\n                parseFilter(child, context);\n            }\n            else if (child.type === 8 /* NodeTypes.COMPOUND_EXPRESSION */) {\n                rewriteFilter(node, context);\n            }\n            else if (child.type === 5 /* NodeTypes.INTERPOLATION */) {\n                rewriteFilter(child.content, context);\n            }\n        }\n    }\n}\nfunction parseFilter(node, context) {\n    const exp = node.content;\n    let inSingle = false;\n    let inDouble = false;\n    let inTemplateString = false;\n    let inRegex = false;\n    let curly = 0;\n    let square = 0;\n    let paren = 0;\n    let lastFilterIndex = 0;\n    let c, prev, i, expression, filters = [];\n    for (i = 0; i < exp.length; i++) {\n        prev = c;\n        c = exp.charCodeAt(i);\n        if (inSingle) {\n            if (c === 0x27 && prev !== 0x5c)\n                inSingle = false;\n        }\n        else if (inDouble) {\n            if (c === 0x22 && prev !== 0x5c)\n                inDouble = false;\n        }\n        else if (inTemplateString) {\n            if (c === 0x60 && prev !== 0x5c)\n                inTemplateString = false;\n        }\n        else if (inRegex) {\n            if (c === 0x2f && prev !== 0x5c)\n                inRegex = false;\n        }\n        else if (c === 0x7c && // pipe\n            exp.charCodeAt(i + 1) !== 0x7c &&\n            exp.charCodeAt(i - 1) !== 0x7c &&\n            !curly &&\n            !square &&\n            !paren) {\n            if (expression === undefined) {\n                // first filter, end of expression\n                lastFilterIndex = i + 1;\n                expression = exp.slice(0, i).trim();\n            }\n            else {\n                pushFilter();\n            }\n        }\n        else {\n            switch (c) {\n                case 0x22:\n                    inDouble = true;\n                    break; // \"\n                case 0x27:\n                    inSingle = true;\n                    break; // '\n                case 0x60:\n                    inTemplateString = true;\n                    break; // `\n                case 0x28:\n                    paren++;\n                    break; // (\n                case 0x29:\n                    paren--;\n                    break; // )\n                case 0x5b:\n                    square++;\n                    break; // [\n                case 0x5d:\n                    square--;\n                    break; // ]\n                case 0x7b:\n                    curly++;\n                    break; // {\n                case 0x7d:\n                    curly--;\n                    break; // }\n            }\n            if (c === 0x2f) {\n                // /\n                let j = i - 1;\n                let p;\n                // find first non-whitespace prev char\n                for (; j >= 0; j--) {\n                    p = exp.charAt(j);\n                    if (p !== ' ')\n                        break;\n                }\n                if (!p || !validDivisionCharRE.test(p)) {\n                    inRegex = true;\n                }\n            }\n        }\n    }\n    if (expression === undefined) {\n        expression = exp.slice(0, i).trim();\n    }\n    else if (lastFilterIndex !== 0) {\n        pushFilter();\n    }\n    function pushFilter() {\n        filters.push(exp.slice(lastFilterIndex, i).trim());\n        lastFilterIndex = i + 1;\n    }\n    if (filters.length) {\n        warnDeprecation(\"COMPILER_FILTER\" /* CompilerDeprecationTypes.COMPILER_FILTERS */, context, node.loc);\n        for (i = 0; i < filters.length; i++) {\n            expression = wrapFilter(expression, filters[i], context);\n        }\n        node.content = expression;\n    }\n}\nfunction wrapFilter(exp, filter, context) {\n    context.helper(RESOLVE_FILTER);\n    const i = filter.indexOf('(');\n    if (i < 0) {\n        context.filters.add(filter);\n        return `${toValidAssetId(filter, 'filter')}(${exp})`;\n    }\n    else {\n        const name = filter.slice(0, i);\n        const args = filter.slice(i + 1);\n        context.filters.add(name);\n        return `${toValidAssetId(name, 'filter')}(${exp}${args !== ')' ? ',' + args : args}`;\n    }\n}\n\nconst seen = new WeakSet();\nconst transformMemo = (node, context) => {\n    if (node.type === 1 /* NodeTypes.ELEMENT */) {\n        const dir = findDir(node, 'memo');\n        if (!dir || seen.has(node)) {\n            return;\n        }\n        seen.add(node);\n        return () => {\n            const codegenNode = node.codegenNode ||\n                context.currentNode.codegenNode;\n            if (codegenNode && codegenNode.type === 13 /* NodeTypes.VNODE_CALL */) {\n                // non-component sub tree should be turned into a block\n                if (node.tagType !== 1 /* ElementTypes.COMPONENT */) {\n                    makeBlock(codegenNode, context);\n                }\n                node.codegenNode = createCallExpression(context.helper(WITH_MEMO), [\n                    dir.exp,\n                    createFunctionExpression(undefined, codegenNode),\n                    `_cache`,\n                    String(context.cached++)\n                ]);\n            }\n        };\n    }\n};\n\nfunction getBaseTransformPreset(prefixIdentifiers) {\n    return [\n        [\n            transformOnce,\n            transformIf,\n            transformMemo,\n            transformFor,\n            ...([transformFilter] ),\n            ...([transformExpression]\n                    ),\n            transformSlotOutlet,\n            transformElement,\n            trackSlotScopes,\n            transformText\n        ],\n        {\n            on: transformOn$1,\n            bind: transformBind,\n            model: transformModel$1\n        }\n    ];\n}\n// we name it `baseCompile` so that higher order compilers like\n// @vue/compiler-dom can export `compile` while re-exporting everything else.\nfunction baseCompile(template, options = {}) {\n    const onError = options.onError || defaultOnError;\n    const isModuleMode = options.mode === 'module';\n    /* istanbul ignore if */\n    {\n        if (options.prefixIdentifiers === true) {\n            onError(createCompilerError(47 /* ErrorCodes.X_PREFIX_ID_NOT_SUPPORTED */));\n        }\n        else if (isModuleMode) {\n            onError(createCompilerError(48 /* ErrorCodes.X_MODULE_MODE_NOT_SUPPORTED */));\n        }\n    }\n    const prefixIdentifiers = !true ;\n    if (options.cacheHandlers) {\n        onError(createCompilerError(49 /* ErrorCodes.X_CACHE_HANDLER_NOT_SUPPORTED */));\n    }\n    if (options.scopeId && !isModuleMode) {\n        onError(createCompilerError(50 /* ErrorCodes.X_SCOPE_ID_NOT_SUPPORTED */));\n    }\n    const ast = isString(template) ? baseParse(template, options) : template;\n    const [nodeTransforms, directiveTransforms] = getBaseTransformPreset();\n    transform(ast, extend({}, options, {\n        prefixIdentifiers,\n        nodeTransforms: [\n            ...nodeTransforms,\n            ...(options.nodeTransforms || []) // user transforms\n        ],\n        directiveTransforms: extend({}, directiveTransforms, options.directiveTransforms || {} // user transforms\n        )\n    }));\n    return generate(ast, extend({}, options, {\n        prefixIdentifiers\n    }));\n}\n\nconst noopDirectiveTransform = () => ({ props: [] });\n\nconst V_MODEL_RADIO = Symbol(`vModelRadio` );\nconst V_MODEL_CHECKBOX = Symbol(`vModelCheckbox` );\nconst V_MODEL_TEXT = Symbol(`vModelText` );\nconst V_MODEL_SELECT = Symbol(`vModelSelect` );\nconst V_MODEL_DYNAMIC = Symbol(`vModelDynamic` );\nconst V_ON_WITH_MODIFIERS = Symbol(`vOnModifiersGuard` );\nconst V_ON_WITH_KEYS = Symbol(`vOnKeysGuard` );\nconst V_SHOW = Symbol(`vShow` );\nconst TRANSITION = Symbol(`Transition` );\nconst TRANSITION_GROUP = Symbol(`TransitionGroup` );\nregisterRuntimeHelpers({\n    [V_MODEL_RADIO]: `vModelRadio`,\n    [V_MODEL_CHECKBOX]: `vModelCheckbox`,\n    [V_MODEL_TEXT]: `vModelText`,\n    [V_MODEL_SELECT]: `vModelSelect`,\n    [V_MODEL_DYNAMIC]: `vModelDynamic`,\n    [V_ON_WITH_MODIFIERS]: `withModifiers`,\n    [V_ON_WITH_KEYS]: `withKeys`,\n    [V_SHOW]: `vShow`,\n    [TRANSITION]: `Transition`,\n    [TRANSITION_GROUP]: `TransitionGroup`\n});\n\n/* eslint-disable no-restricted-globals */\nlet decoder;\nfunction decodeHtmlBrowser(raw, asAttr = false) {\n    if (!decoder) {\n        decoder = document.createElement('div');\n    }\n    if (asAttr) {\n        decoder.innerHTML = `<div foo=\"${raw.replace(/\"/g, '&quot;')}\">`;\n        return decoder.children[0].getAttribute('foo');\n    }\n    else {\n        decoder.innerHTML = raw;\n        return decoder.textContent;\n    }\n}\n\nconst isRawTextContainer = /*#__PURE__*/ makeMap('style,iframe,script,noscript', true);\nconst parserOptions = {\n    isVoidTag,\n    isNativeTag: tag => isHTMLTag(tag) || isSVGTag(tag),\n    isPreTag: tag => tag === 'pre',\n    decodeEntities: decodeHtmlBrowser ,\n    isBuiltInComponent: (tag) => {\n        if (isBuiltInType(tag, `Transition`)) {\n            return TRANSITION;\n        }\n        else if (isBuiltInType(tag, `TransitionGroup`)) {\n            return TRANSITION_GROUP;\n        }\n    },\n    // https://html.spec.whatwg.org/multipage/parsing.html#tree-construction-dispatcher\n    getNamespace(tag, parent) {\n        let ns = parent ? parent.ns : 0 /* DOMNamespaces.HTML */;\n        if (parent && ns === 2 /* DOMNamespaces.MATH_ML */) {\n            if (parent.tag === 'annotation-xml') {\n                if (tag === 'svg') {\n                    return 1 /* DOMNamespaces.SVG */;\n                }\n                if (parent.props.some(a => a.type === 6 /* NodeTypes.ATTRIBUTE */ &&\n                    a.name === 'encoding' &&\n                    a.value != null &&\n                    (a.value.content === 'text/html' ||\n                        a.value.content === 'application/xhtml+xml'))) {\n                    ns = 0 /* DOMNamespaces.HTML */;\n                }\n            }\n            else if (/^m(?:[ions]|text)$/.test(parent.tag) &&\n                tag !== 'mglyph' &&\n                tag !== 'malignmark') {\n                ns = 0 /* DOMNamespaces.HTML */;\n            }\n        }\n        else if (parent && ns === 1 /* DOMNamespaces.SVG */) {\n            if (parent.tag === 'foreignObject' ||\n                parent.tag === 'desc' ||\n                parent.tag === 'title') {\n                ns = 0 /* DOMNamespaces.HTML */;\n            }\n        }\n        if (ns === 0 /* DOMNamespaces.HTML */) {\n            if (tag === 'svg') {\n                return 1 /* DOMNamespaces.SVG */;\n            }\n            if (tag === 'math') {\n                return 2 /* DOMNamespaces.MATH_ML */;\n            }\n        }\n        return ns;\n    },\n    // https://html.spec.whatwg.org/multipage/parsing.html#parsing-html-fragments\n    getTextMode({ tag, ns }) {\n        if (ns === 0 /* DOMNamespaces.HTML */) {\n            if (tag === 'textarea' || tag === 'title') {\n                return 1 /* TextModes.RCDATA */;\n            }\n            if (isRawTextContainer(tag)) {\n                return 2 /* TextModes.RAWTEXT */;\n            }\n        }\n        return 0 /* TextModes.DATA */;\n    }\n};\n\n// Parse inline CSS strings for static style attributes into an object.\n// This is a NodeTransform since it works on the static `style` attribute and\n// converts it into a dynamic equivalent:\n// style=\"color: red\" -> :style='{ \"color\": \"red\" }'\n// It is then processed by `transformElement` and included in the generated\n// props.\nconst transformStyle = node => {\n    if (node.type === 1 /* NodeTypes.ELEMENT */) {\n        node.props.forEach((p, i) => {\n            if (p.type === 6 /* NodeTypes.ATTRIBUTE */ && p.name === 'style' && p.value) {\n                // replace p with an expression node\n                node.props[i] = {\n                    type: 7 /* NodeTypes.DIRECTIVE */,\n                    name: `bind`,\n                    arg: createSimpleExpression(`style`, true, p.loc),\n                    exp: parseInlineCSS(p.value.content, p.loc),\n                    modifiers: [],\n                    loc: p.loc\n                };\n            }\n        });\n    }\n};\nconst parseInlineCSS = (cssText, loc) => {\n    const normalized = parseStringStyle(cssText);\n    return createSimpleExpression(JSON.stringify(normalized), false, loc, 3 /* ConstantTypes.CAN_STRINGIFY */);\n};\n\nfunction createDOMCompilerError(code, loc) {\n    return createCompilerError(code, loc, DOMErrorMessages );\n}\nconst DOMErrorMessages = {\n    [51 /* DOMErrorCodes.X_V_HTML_NO_EXPRESSION */]: `v-html is missing expression.`,\n    [52 /* DOMErrorCodes.X_V_HTML_WITH_CHILDREN */]: `v-html will override element children.`,\n    [53 /* DOMErrorCodes.X_V_TEXT_NO_EXPRESSION */]: `v-text is missing expression.`,\n    [54 /* DOMErrorCodes.X_V_TEXT_WITH_CHILDREN */]: `v-text will override element children.`,\n    [55 /* DOMErrorCodes.X_V_MODEL_ON_INVALID_ELEMENT */]: `v-model can only be used on <input>, <textarea> and <select> elements.`,\n    [56 /* DOMErrorCodes.X_V_MODEL_ARG_ON_ELEMENT */]: `v-model argument is not supported on plain elements.`,\n    [57 /* DOMErrorCodes.X_V_MODEL_ON_FILE_INPUT_ELEMENT */]: `v-model cannot be used on file inputs since they are read-only. Use a v-on:change listener instead.`,\n    [58 /* DOMErrorCodes.X_V_MODEL_UNNECESSARY_VALUE */]: `Unnecessary value binding used alongside v-model. It will interfere with v-model's behavior.`,\n    [59 /* DOMErrorCodes.X_V_SHOW_NO_EXPRESSION */]: `v-show is missing expression.`,\n    [60 /* DOMErrorCodes.X_TRANSITION_INVALID_CHILDREN */]: `<Transition> expects exactly one child element or component.`,\n    [61 /* DOMErrorCodes.X_IGNORED_SIDE_EFFECT_TAG */]: `Tags with side effect (<script> and <style>) are ignored in client component templates.`\n};\n\nconst transformVHtml = (dir, node, context) => {\n    const { exp, loc } = dir;\n    if (!exp) {\n        context.onError(createDOMCompilerError(51 /* DOMErrorCodes.X_V_HTML_NO_EXPRESSION */, loc));\n    }\n    if (node.children.length) {\n        context.onError(createDOMCompilerError(52 /* DOMErrorCodes.X_V_HTML_WITH_CHILDREN */, loc));\n        node.children.length = 0;\n    }\n    return {\n        props: [\n            createObjectProperty(createSimpleExpression(`innerHTML`, true, loc), exp || createSimpleExpression('', true))\n        ]\n    };\n};\n\nconst transformVText = (dir, node, context) => {\n    const { exp, loc } = dir;\n    if (!exp) {\n        context.onError(createDOMCompilerError(53 /* DOMErrorCodes.X_V_TEXT_NO_EXPRESSION */, loc));\n    }\n    if (node.children.length) {\n        context.onError(createDOMCompilerError(54 /* DOMErrorCodes.X_V_TEXT_WITH_CHILDREN */, loc));\n        node.children.length = 0;\n    }\n    return {\n        props: [\n            createObjectProperty(createSimpleExpression(`textContent`, true), exp\n                ? getConstantType(exp, context) > 0\n                    ? exp\n                    : createCallExpression(context.helperString(TO_DISPLAY_STRING), [exp], loc)\n                : createSimpleExpression('', true))\n        ]\n    };\n};\n\nconst transformModel = (dir, node, context) => {\n    const baseResult = transformModel$1(dir, node, context);\n    // base transform has errors OR component v-model (only need props)\n    if (!baseResult.props.length || node.tagType === 1 /* ElementTypes.COMPONENT */) {\n        return baseResult;\n    }\n    if (dir.arg) {\n        context.onError(createDOMCompilerError(56 /* DOMErrorCodes.X_V_MODEL_ARG_ON_ELEMENT */, dir.arg.loc));\n    }\n    function checkDuplicatedValue() {\n        const value = findProp(node, 'value');\n        if (value) {\n            context.onError(createDOMCompilerError(58 /* DOMErrorCodes.X_V_MODEL_UNNECESSARY_VALUE */, value.loc));\n        }\n    }\n    const { tag } = node;\n    const isCustomElement = context.isCustomElement(tag);\n    if (tag === 'input' ||\n        tag === 'textarea' ||\n        tag === 'select' ||\n        isCustomElement) {\n        let directiveToUse = V_MODEL_TEXT;\n        let isInvalidType = false;\n        if (tag === 'input' || isCustomElement) {\n            const type = findProp(node, `type`);\n            if (type) {\n                if (type.type === 7 /* NodeTypes.DIRECTIVE */) {\n                    // :type=\"foo\"\n                    directiveToUse = V_MODEL_DYNAMIC;\n                }\n                else if (type.value) {\n                    switch (type.value.content) {\n                        case 'radio':\n                            directiveToUse = V_MODEL_RADIO;\n                            break;\n                        case 'checkbox':\n                            directiveToUse = V_MODEL_CHECKBOX;\n                            break;\n                        case 'file':\n                            isInvalidType = true;\n                            context.onError(createDOMCompilerError(57 /* DOMErrorCodes.X_V_MODEL_ON_FILE_INPUT_ELEMENT */, dir.loc));\n                            break;\n                        default:\n                            // text type\n                            checkDuplicatedValue();\n                            break;\n                    }\n                }\n            }\n            else if (hasDynamicKeyVBind(node)) {\n                // element has bindings with dynamic keys, which can possibly contain\n                // \"type\".\n                directiveToUse = V_MODEL_DYNAMIC;\n            }\n            else {\n                // text type\n                checkDuplicatedValue();\n            }\n        }\n        else if (tag === 'select') {\n            directiveToUse = V_MODEL_SELECT;\n        }\n        else {\n            // textarea\n            checkDuplicatedValue();\n        }\n        // inject runtime directive\n        // by returning the helper symbol via needRuntime\n        // the import will replaced a resolveDirective call.\n        if (!isInvalidType) {\n            baseResult.needRuntime = context.helper(directiveToUse);\n        }\n    }\n    else {\n        context.onError(createDOMCompilerError(55 /* DOMErrorCodes.X_V_MODEL_ON_INVALID_ELEMENT */, dir.loc));\n    }\n    // native vmodel doesn't need the `modelValue` props since they are also\n    // passed to the runtime as `binding.value`. removing it reduces code size.\n    baseResult.props = baseResult.props.filter(p => !(p.key.type === 4 /* NodeTypes.SIMPLE_EXPRESSION */ &&\n        p.key.content === 'modelValue'));\n    return baseResult;\n};\n\nconst isEventOptionModifier = /*#__PURE__*/ makeMap(`passive,once,capture`);\nconst isNonKeyModifier = /*#__PURE__*/ makeMap(\n// event propagation management\n`stop,prevent,self,` +\n    // system modifiers + exact\n    `ctrl,shift,alt,meta,exact,` +\n    // mouse\n    `middle`);\n// left & right could be mouse or key modifiers based on event type\nconst maybeKeyModifier = /*#__PURE__*/ makeMap('left,right');\nconst isKeyboardEvent = /*#__PURE__*/ makeMap(`onkeyup,onkeydown,onkeypress`, true);\nconst resolveModifiers = (key, modifiers, context, loc) => {\n    const keyModifiers = [];\n    const nonKeyModifiers = [];\n    const eventOptionModifiers = [];\n    for (let i = 0; i < modifiers.length; i++) {\n        const modifier = modifiers[i];\n        if (modifier === 'native' &&\n            checkCompatEnabled(\"COMPILER_V_ON_NATIVE\" /* CompilerDeprecationTypes.COMPILER_V_ON_NATIVE */, context, loc)) {\n            eventOptionModifiers.push(modifier);\n        }\n        else if (isEventOptionModifier(modifier)) {\n            // eventOptionModifiers: modifiers for addEventListener() options,\n            // e.g. .passive & .capture\n            eventOptionModifiers.push(modifier);\n        }\n        else {\n            // runtimeModifiers: modifiers that needs runtime guards\n            if (maybeKeyModifier(modifier)) {\n                if (isStaticExp(key)) {\n                    if (isKeyboardEvent(key.content)) {\n                        keyModifiers.push(modifier);\n                    }\n                    else {\n                        nonKeyModifiers.push(modifier);\n                    }\n                }\n                else {\n                    keyModifiers.push(modifier);\n                    nonKeyModifiers.push(modifier);\n                }\n            }\n            else {\n                if (isNonKeyModifier(modifier)) {\n                    nonKeyModifiers.push(modifier);\n                }\n                else {\n                    keyModifiers.push(modifier);\n                }\n            }\n        }\n    }\n    return {\n        keyModifiers,\n        nonKeyModifiers,\n        eventOptionModifiers\n    };\n};\nconst transformClick = (key, event) => {\n    const isStaticClick = isStaticExp(key) && key.content.toLowerCase() === 'onclick';\n    return isStaticClick\n        ? createSimpleExpression(event, true)\n        : key.type !== 4 /* NodeTypes.SIMPLE_EXPRESSION */\n            ? createCompoundExpression([\n                `(`,\n                key,\n                `) === \"onClick\" ? \"${event}\" : (`,\n                key,\n                `)`\n            ])\n            : key;\n};\nconst transformOn = (dir, node, context) => {\n    return transformOn$1(dir, node, context, baseResult => {\n        const { modifiers } = dir;\n        if (!modifiers.length)\n            return baseResult;\n        let { key, value: handlerExp } = baseResult.props[0];\n        const { keyModifiers, nonKeyModifiers, eventOptionModifiers } = resolveModifiers(key, modifiers, context, dir.loc);\n        // normalize click.right and click.middle since they don't actually fire\n        if (nonKeyModifiers.includes('right')) {\n            key = transformClick(key, `onContextmenu`);\n        }\n        if (nonKeyModifiers.includes('middle')) {\n            key = transformClick(key, `onMouseup`);\n        }\n        if (nonKeyModifiers.length) {\n            handlerExp = createCallExpression(context.helper(V_ON_WITH_MODIFIERS), [\n                handlerExp,\n                JSON.stringify(nonKeyModifiers)\n            ]);\n        }\n        if (keyModifiers.length &&\n            // if event name is dynamic, always wrap with keys guard\n            (!isStaticExp(key) || isKeyboardEvent(key.content))) {\n            handlerExp = createCallExpression(context.helper(V_ON_WITH_KEYS), [\n                handlerExp,\n                JSON.stringify(keyModifiers)\n            ]);\n        }\n        if (eventOptionModifiers.length) {\n            const modifierPostfix = eventOptionModifiers.map(capitalize).join('');\n            key = isStaticExp(key)\n                ? createSimpleExpression(`${key.content}${modifierPostfix}`, true)\n                : createCompoundExpression([`(`, key, `) + \"${modifierPostfix}\"`]);\n        }\n        return {\n            props: [createObjectProperty(key, handlerExp)]\n        };\n    });\n};\n\nconst transformShow = (dir, node, context) => {\n    const { exp, loc } = dir;\n    if (!exp) {\n        context.onError(createDOMCompilerError(59 /* DOMErrorCodes.X_V_SHOW_NO_EXPRESSION */, loc));\n    }\n    return {\n        props: [],\n        needRuntime: context.helper(V_SHOW)\n    };\n};\n\nconst transformTransition = (node, context) => {\n    if (node.type === 1 /* NodeTypes.ELEMENT */ &&\n        node.tagType === 1 /* ElementTypes.COMPONENT */) {\n        const component = context.isBuiltInComponent(node.tag);\n        if (component === TRANSITION) {\n            return () => {\n                if (!node.children.length) {\n                    return;\n                }\n                // warn multiple transition children\n                if (hasMultipleChildren(node)) {\n                    context.onError(createDOMCompilerError(60 /* DOMErrorCodes.X_TRANSITION_INVALID_CHILDREN */, {\n                        start: node.children[0].loc.start,\n                        end: node.children[node.children.length - 1].loc.end,\n                        source: ''\n                    }));\n                }\n                // check if it's s single child w/ v-show\n                // if yes, inject \"persisted: true\" to the transition props\n                const child = node.children[0];\n                if (child.type === 1 /* NodeTypes.ELEMENT */) {\n                    for (const p of child.props) {\n                        if (p.type === 7 /* NodeTypes.DIRECTIVE */ && p.name === 'show') {\n                            node.props.push({\n                                type: 6 /* NodeTypes.ATTRIBUTE */,\n                                name: 'persisted',\n                                value: undefined,\n                                loc: node.loc\n                            });\n                        }\n                    }\n                }\n            };\n        }\n    }\n};\nfunction hasMultipleChildren(node) {\n    // #1352 filter out potential comment nodes.\n    const children = (node.children = node.children.filter(c => c.type !== 3 /* NodeTypes.COMMENT */ &&\n        !(c.type === 2 /* NodeTypes.TEXT */ && !c.content.trim())));\n    const child = children[0];\n    return (children.length !== 1 ||\n        child.type === 11 /* NodeTypes.FOR */ ||\n        (child.type === 9 /* NodeTypes.IF */ && child.branches.some(hasMultipleChildren)));\n}\n\nconst ignoreSideEffectTags = (node, context) => {\n    if (node.type === 1 /* NodeTypes.ELEMENT */ &&\n        node.tagType === 0 /* ElementTypes.ELEMENT */ &&\n        (node.tag === 'script' || node.tag === 'style')) {\n        context.onError(createDOMCompilerError(61 /* DOMErrorCodes.X_IGNORED_SIDE_EFFECT_TAG */, node.loc));\n        context.removeNode();\n    }\n};\n\nconst DOMNodeTransforms = [\n    transformStyle,\n    ...([transformTransition] )\n];\nconst DOMDirectiveTransforms = {\n    cloak: noopDirectiveTransform,\n    html: transformVHtml,\n    text: transformVText,\n    model: transformModel,\n    on: transformOn,\n    show: transformShow\n};\nfunction compile(template, options = {}) {\n    return baseCompile(template, extend({}, parserOptions, options, {\n        nodeTransforms: [\n            // ignore <script> and <tag>\n            // this is not put inside DOMNodeTransforms because that list is used\n            // by compiler-ssr to generate vnode fallback branches\n            ignoreSideEffectTags,\n            ...DOMNodeTransforms,\n            ...(options.nodeTransforms || [])\n        ],\n        directiveTransforms: extend({}, DOMDirectiveTransforms, options.directiveTransforms || {}),\n        transformHoist: null \n    }));\n}\nfunction parse(template, options = {}) {\n    return baseParse(template, extend({}, parserOptions, options));\n}\n\nexport { BASE_TRANSITION, CAMELIZE, CAPITALIZE, CREATE_BLOCK, CREATE_COMMENT, CREATE_ELEMENT_BLOCK, CREATE_ELEMENT_VNODE, CREATE_SLOTS, CREATE_STATIC, CREATE_TEXT, CREATE_VNODE, DOMDirectiveTransforms, DOMNodeTransforms, FRAGMENT, GUARD_REACTIVE_PROPS, IS_MEMO_SAME, IS_REF, KEEP_ALIVE, MERGE_PROPS, NORMALIZE_CLASS, NORMALIZE_PROPS, NORMALIZE_STYLE, OPEN_BLOCK, POP_SCOPE_ID, PUSH_SCOPE_ID, RENDER_LIST, RENDER_SLOT, RESOLVE_COMPONENT, RESOLVE_DIRECTIVE, RESOLVE_DYNAMIC_COMPONENT, RESOLVE_FILTER, SET_BLOCK_TRACKING, SUSPENSE, TELEPORT, TO_DISPLAY_STRING, TO_HANDLERS, TO_HANDLER_KEY, TRANSITION, TRANSITION_GROUP, UNREF, V_MODEL_CHECKBOX, V_MODEL_DYNAMIC, V_MODEL_RADIO, V_MODEL_SELECT, V_MODEL_TEXT, V_ON_WITH_KEYS, V_ON_WITH_MODIFIERS, V_SHOW, WITH_CTX, WITH_DIRECTIVES, WITH_MEMO, advancePositionWithClone, advancePositionWithMutation, assert, baseCompile, baseParse, buildDirectiveArgs, buildProps, buildSlots, checkCompatEnabled, compile, createArrayExpression, createAssignmentExpression, createBlockStatement, createCacheExpression, createCallExpression, createCompilerError, createCompoundExpression, createConditionalExpression, createDOMCompilerError, createForLoopParams, createFunctionExpression, createIfStatement, createInterpolation, createObjectExpression, createObjectProperty, createReturnStatement, createRoot, createSequenceExpression, createSimpleExpression, createStructuralDirectiveTransform, createTemplateLiteral, createTransformContext, createVNodeCall, extractIdentifiers, findDir, findProp, generate, generateCodeFrame, getBaseTransformPreset, getConstantType, getInnerRange, getMemoedVNodeCall, getVNodeBlockHelper, getVNodeHelper, hasDynamicKeyVBind, hasScopeRef, helperNameMap, injectProp, isBuiltInType, isCoreComponent, isFunctionType, isInDestructureAssignment, isMemberExpression, isMemberExpressionBrowser, isMemberExpressionNode, isReferencedIdentifier, isSimpleIdentifier, isSlotOutlet, isStaticArgOf, isStaticExp, isStaticProperty, isStaticPropertyKey, isTemplateNode, isText$1 as isText, isVSlot, locStub, makeBlock, noopDirectiveTransform, parse, parserOptions, processExpression, processFor, processIf, processSlotOutlet, registerRuntimeHelpers, resolveComponentType, stringifyExpression, toValidAssetId, trackSlotScopes, trackVForSlotScopes, transform, transformBind, transformElement, transformExpression, transformModel$1 as transformModel, transformOn$1 as transformOn, transformStyle, traverseNode, walkBlockDeclarations, walkFunctionParams, walkIdentifiers, warnDeprecation };\n/dist/compiler-dom.global.js\u0000\u0003var VueCompilerDOM = (function (exports) {\n  'use strict';\n\n  /**\n   * Make a map and return a function for checking if a key\n   * is in that map.\n   * IMPORTANT: all calls of this function must be prefixed with\n   * \\/\\*#\\_\\_PURE\\_\\_\\*\\/\n   * So that rollup can tree-shake them if necessary.\n   */\n  function makeMap(str, expectsLowerCase) {\n      const map = Object.create(null);\n      const list = str.split(',');\n      for (let i = 0; i < list.length; i++) {\n          map[list[i]] = true;\n      }\n      return expectsLowerCase ? val => !!map[val.toLowerCase()] : val => !!map[val];\n  }\n\n  /**\n   * dev only flag -> name mapping\n   */\n  const PatchFlagNames = {\n      [1 /* PatchFlags.TEXT */]: `TEXT`,\n      [2 /* PatchFlags.CLASS */]: `CLASS`,\n      [4 /* PatchFlags.STYLE */]: `STYLE`,\n      [8 /* PatchFlags.PROPS */]: `PROPS`,\n      [16 /* PatchFlags.FULL_PROPS */]: `FULL_PROPS`,\n      [32 /* PatchFlags.HYDRATE_EVENTS */]: `HYDRATE_EVENTS`,\n      [64 /* PatchFlags.STABLE_FRAGMENT */]: `STABLE_FRAGMENT`,\n      [128 /* PatchFlags.KEYED_FRAGMENT */]: `KEYED_FRAGMENT`,\n      [256 /* PatchFlags.UNKEYED_FRAGMENT */]: `UNKEYED_FRAGMENT`,\n      [512 /* PatchFlags.NEED_PATCH */]: `NEED_PATCH`,\n      [1024 /* PatchFlags.DYNAMIC_SLOTS */]: `DYNAMIC_SLOTS`,\n      [2048 /* PatchFlags.DEV_ROOT_FRAGMENT */]: `DEV_ROOT_FRAGMENT`,\n      [-1 /* PatchFlags.HOISTED */]: `HOISTED`,\n      [-2 /* PatchFlags.BAIL */]: `BAIL`\n  };\n\n  /**\n   * Dev only\n   */\n  const slotFlagsText = {\n      [1 /* SlotFlags.STABLE */]: 'STABLE',\n      [2 /* SlotFlags.DYNAMIC */]: 'DYNAMIC',\n      [3 /* SlotFlags.FORWARDED */]: 'FORWARDED'\n  };\n\n  const range = 2;\n  function generateCodeFrame(source, start = 0, end = source.length) {\n      // Split the content into individual lines but capture the newline sequence\n      // that separated each line. This is important because the actual sequence is\n      // needed to properly take into account the full line length for offset\n      // comparison\n      let lines = source.split(/(\\r?\\n)/);\n      // Separate the lines and newline sequences into separate arrays for easier referencing\n      const newlineSequences = lines.filter((_, idx) => idx % 2 === 1);\n      lines = lines.filter((_, idx) => idx % 2 === 0);\n      let count = 0;\n      const res = [];\n      for (let i = 0; i < lines.length; i++) {\n          count +=\n              lines[i].length +\n                  ((newlineSequences[i] && newlineSequences[i].length) || 0);\n          if (count >= start) {\n              for (let j = i - range; j <= i + range || end > count; j++) {\n                  if (j < 0 || j >= lines.length)\n                      continue;\n                  const line = j + 1;\n                  res.push(`${line}${' '.repeat(Math.max(3 - String(line).length, 0))}|  ${lines[j]}`);\n                  const lineLength = lines[j].length;\n                  const newLineSeqLength = (newlineSequences[j] && newlineSequences[j].length) || 0;\n                  if (j === i) {\n                      // push underline\n                      const pad = start - (count - (lineLength + newLineSeqLength));\n                      const length = Math.max(1, end > count ? lineLength - pad : end - start);\n                      res.push(`   |  ` + ' '.repeat(pad) + '^'.repeat(length));\n                  }\n                  else if (j > i) {\n                      if (end > count) {\n                          const length = Math.max(Math.min(end - count, lineLength), 1);\n                          res.push(`   |  ` + '^'.repeat(length));\n                      }\n                      count += lineLength + newLineSeqLength;\n                  }\n              }\n              break;\n          }\n      }\n      return res.join('\\n');\n  }\n\n  const listDelimiterRE = /;(?![^(]*\\))/g;\n  const propertyDelimiterRE = /:([^]+)/;\n  const styleCommentRE = /\\/\\*.*?\\*\\//gs;\n  function parseStringStyle(cssText) {\n      const ret = {};\n      cssText\n          .replace(styleCommentRE, '')\n          .split(listDelimiterRE)\n          .forEach(item => {\n          if (item) {\n              const tmp = item.split(propertyDelimiterRE);\n              tmp.length > 1 && (ret[tmp[0].trim()] = tmp[1].trim());\n          }\n      });\n      return ret;\n  }\n\n  // These tag configs are shared between compiler-dom and runtime-dom, so they\n  // https://developer.mozilla.org/en-US/docs/Web/HTML/Element\n  const HTML_TAGS = 'html,body,base,head,link,meta,style,title,address,article,aside,footer,' +\n      'header,hgroup,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,' +\n      'figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,' +\n      'data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,' +\n      'time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,' +\n      'canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,' +\n      'th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,' +\n      'option,output,progress,select,textarea,details,dialog,menu,' +\n      'summary,template,blockquote,iframe,tfoot';\n  // https://developer.mozilla.org/en-US/docs/Web/SVG/Element\n  const SVG_TAGS = 'svg,animate,animateMotion,animateTransform,circle,clipPath,color-profile,' +\n      'defs,desc,discard,ellipse,feBlend,feColorMatrix,feComponentTransfer,' +\n      'feComposite,feConvolveMatrix,feDiffuseLighting,feDisplacementMap,' +\n      'feDistantLight,feDropShadow,feFlood,feFuncA,feFuncB,feFuncG,feFuncR,' +\n      'feGaussianBlur,feImage,feMerge,feMergeNode,feMorphology,feOffset,' +\n      'fePointLight,feSpecularLighting,feSpotLight,feTile,feTurbulence,filter,' +\n      'foreignObject,g,hatch,hatchpath,image,line,linearGradient,marker,mask,' +\n      'mesh,meshgradient,meshpatch,meshrow,metadata,mpath,path,pattern,' +\n      'polygon,polyline,radialGradient,rect,set,solidcolor,stop,switch,symbol,' +\n      'text,textPath,title,tspan,unknown,use,view';\n  const VOID_TAGS = 'area,base,br,col,embed,hr,img,input,link,meta,param,source,track,wbr';\n  /**\n   * Compiler only.\n   * Do NOT use in runtime code paths unless behind `true` flag.\n   */\n  const isHTMLTag = /*#__PURE__*/ makeMap(HTML_TAGS);\n  /**\n   * Compiler only.\n   * Do NOT use in runtime code paths unless behind `true` flag.\n   */\n  const isSVGTag = /*#__PURE__*/ makeMap(SVG_TAGS);\n  /**\n   * Compiler only.\n   * Do NOT use in runtime code paths unless behind `true` flag.\n   */\n  const isVoidTag = /*#__PURE__*/ makeMap(VOID_TAGS);\n\n  const EMPTY_OBJ = Object.freeze({})\n      ;\n  const NOOP = () => { };\n  /**\n   * Always return false.\n   */\n  const NO = () => false;\n  const onRE = /^on[^a-z]/;\n  const isOn = (key) => onRE.test(key);\n  const extend = Object.assign;\n  const isArray = Array.isArray;\n  const isString = (val) => typeof val === 'string';\n  const isSymbol = (val) => typeof val === 'symbol';\n  const isObject = (val) => val !== null && typeof val === 'object';\n  const isReservedProp = /*#__PURE__*/ makeMap(\n  // the leading comma is intentional so empty string \"\" is also included\n  ',key,ref,ref_for,ref_key,' +\n      'onVnodeBeforeMount,onVnodeMounted,' +\n      'onVnodeBeforeUpdate,onVnodeUpdated,' +\n      'onVnodeBeforeUnmount,onVnodeUnmounted');\n  const isBuiltInDirective = /*#__PURE__*/ makeMap('bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo');\n  const cacheStringFunction = (fn) => {\n      const cache = Object.create(null);\n      return ((str) => {\n          const hit = cache[str];\n          return hit || (cache[str] = fn(str));\n      });\n  };\n  const camelizeRE = /-(\\w)/g;\n  /**\n   * @private\n   */\n  const camelize = cacheStringFunction((str) => {\n      return str.replace(camelizeRE, (_, c) => (c ? c.toUpperCase() : ''));\n  });\n  const hyphenateRE = /\\B([A-Z])/g;\n  /**\n   * @private\n   */\n  const hyphenate = cacheStringFunction((str) => str.replace(hyphenateRE, '-$1').toLowerCase());\n  /**\n   * @private\n   */\n  const capitalize = cacheStringFunction((str) => str.charAt(0).toUpperCase() + str.slice(1));\n  /**\n   * @private\n   */\n  const toHandlerKey = cacheStringFunction((str) => str ? `on${capitalize(str)}` : ``);\n\n  function defaultOnError(error) {\n      throw error;\n  }\n  function defaultOnWarn(msg) {\n      console.warn(`[Vue warn] ${msg.message}`);\n  }\n  function createCompilerError(code, loc, messages, additionalMessage) {\n      const msg = (messages || errorMessages)[code] + (additionalMessage || ``)\n          ;\n      const error = new SyntaxError(String(msg));\n      error.code = code;\n      error.loc = loc;\n      return error;\n  }\n  const errorMessages = {\n      // parse errors\n      [0 /* ErrorCodes.ABRUPT_CLOSING_OF_EMPTY_COMMENT */]: 'Illegal comment.',\n      [1 /* ErrorCodes.CDATA_IN_HTML_CONTENT */]: 'CDATA section is allowed only in XML context.',\n      [2 /* ErrorCodes.DUPLICATE_ATTRIBUTE */]: 'Duplicate attribute.',\n      [3 /* ErrorCodes.END_TAG_WITH_ATTRIBUTES */]: 'End tag cannot have attributes.',\n      [4 /* ErrorCodes.END_TAG_WITH_TRAILING_SOLIDUS */]: \"Illegal '/' in tags.\",\n      [5 /* ErrorCodes.EOF_BEFORE_TAG_NAME */]: 'Unexpected EOF in tag.',\n      [6 /* ErrorCodes.EOF_IN_CDATA */]: 'Unexpected EOF in CDATA section.',\n      [7 /* ErrorCodes.EOF_IN_COMMENT */]: 'Unexpected EOF in comment.',\n      [8 /* ErrorCodes.EOF_IN_SCRIPT_HTML_COMMENT_LIKE_TEXT */]: 'Unexpected EOF in script.',\n      [9 /* ErrorCodes.EOF_IN_TAG */]: 'Unexpected EOF in tag.',\n      [10 /* ErrorCodes.INCORRECTLY_CLOSED_COMMENT */]: 'Incorrectly closed comment.',\n      [11 /* ErrorCodes.INCORRECTLY_OPENED_COMMENT */]: 'Incorrectly opened comment.',\n      [12 /* ErrorCodes.INVALID_FIRST_CHARACTER_OF_TAG_NAME */]: \"Illegal tag name. Use '&lt;' to print '<'.\",\n      [13 /* ErrorCodes.MISSING_ATTRIBUTE_VALUE */]: 'Attribute value was expected.',\n      [14 /* ErrorCodes.MISSING_END_TAG_NAME */]: 'End tag name was expected.',\n      [15 /* ErrorCodes.MISSING_WHITESPACE_BETWEEN_ATTRIBUTES */]: 'Whitespace was expected.',\n      [16 /* ErrorCodes.NESTED_COMMENT */]: \"Unexpected '<!--' in comment.\",\n      [17 /* ErrorCodes.UNEXPECTED_CHARACTER_IN_ATTRIBUTE_NAME */]: 'Attribute name cannot contain U+0022 (\"), U+0027 (\\'), and U+003C (<).',\n      [18 /* ErrorCodes.UNEXPECTED_CHARACTER_IN_UNQUOTED_ATTRIBUTE_VALUE */]: 'Unquoted attribute value cannot contain U+0022 (\"), U+0027 (\\'), U+003C (<), U+003D (=), and U+0060 (`).',\n      [19 /* ErrorCodes.UNEXPECTED_EQUALS_SIGN_BEFORE_ATTRIBUTE_NAME */]: \"Attribute name cannot start with '='.\",\n      [21 /* ErrorCodes.UNEXPECTED_QUESTION_MARK_INSTEAD_OF_TAG_NAME */]: \"'<?' is allowed only in XML context.\",\n      [20 /* ErrorCodes.UNEXPECTED_NULL_CHARACTER */]: `Unexpected null character.`,\n      [22 /* ErrorCodes.UNEXPECTED_SOLIDUS_IN_TAG */]: \"Illegal '/' in tags.\",\n      // Vue-specific parse errors\n      [23 /* ErrorCodes.X_INVALID_END_TAG */]: 'Invalid end tag.',\n      [24 /* ErrorCodes.X_MISSING_END_TAG */]: 'Element is missing end tag.',\n      [25 /* ErrorCodes.X_MISSING_INTERPOLATION_END */]: 'Interpolation end sign was not found.',\n      [27 /* ErrorCodes.X_MISSING_DYNAMIC_DIRECTIVE_ARGUMENT_END */]: 'End bracket for dynamic directive argument was not found. ' +\n          'Note that dynamic directive argument cannot contain spaces.',\n      [26 /* ErrorCodes.X_MISSING_DIRECTIVE_NAME */]: 'Legal directive name was expected.',\n      // transform errors\n      [28 /* ErrorCodes.X_V_IF_NO_EXPRESSION */]: `v-if/v-else-if is missing expression.`,\n      [29 /* ErrorCodes.X_V_IF_SAME_KEY */]: `v-if/else branches must use unique keys.`,\n      [30 /* ErrorCodes.X_V_ELSE_NO_ADJACENT_IF */]: `v-else/v-else-if has no adjacent v-if or v-else-if.`,\n      [31 /* ErrorCodes.X_V_FOR_NO_EXPRESSION */]: `v-for is missing expression.`,\n      [32 /* ErrorCodes.X_V_FOR_MALFORMED_EXPRESSION */]: `v-for has invalid expression.`,\n      [33 /* ErrorCodes.X_V_FOR_TEMPLATE_KEY_PLACEMENT */]: `<template v-for> key should be placed on the <template> tag.`,\n      [34 /* ErrorCodes.X_V_BIND_NO_EXPRESSION */]: `v-bind is missing expression.`,\n      [35 /* ErrorCodes.X_V_ON_NO_EXPRESSION */]: `v-on is missing expression.`,\n      [36 /* ErrorCodes.X_V_SLOT_UNEXPECTED_DIRECTIVE_ON_SLOT_OUTLET */]: `Unexpected custom directive on <slot> outlet.`,\n      [37 /* ErrorCodes.X_V_SLOT_MIXED_SLOT_USAGE */]: `Mixed v-slot usage on both the component and nested <template>. ` +\n          `When there are multiple named slots, all slots should use <template> ` +\n          `syntax to avoid scope ambiguity.`,\n      [38 /* ErrorCodes.X_V_SLOT_DUPLICATE_SLOT_NAMES */]: `Duplicate slot names found. `,\n      [39 /* ErrorCodes.X_V_SLOT_EXTRANEOUS_DEFAULT_SLOT_CHILDREN */]: `Extraneous children found when component already has explicitly named ` +\n          `default slot. These children will be ignored.`,\n      [40 /* ErrorCodes.X_V_SLOT_MISPLACED */]: `v-slot can only be used on components or <template> tags.`,\n      [41 /* ErrorCodes.X_V_MODEL_NO_EXPRESSION */]: `v-model is missing expression.`,\n      [42 /* ErrorCodes.X_V_MODEL_MALFORMED_EXPRESSION */]: `v-model value must be a valid JavaScript member expression.`,\n      [43 /* ErrorCodes.X_V_MODEL_ON_SCOPE_VARIABLE */]: `v-model cannot be used on v-for or v-slot scope variables because they are not writable.`,\n      [44 /* ErrorCodes.X_V_MODEL_ON_PROPS */]: `v-model cannot be used on a prop, because local prop bindings are not writable.\\nUse a v-bind binding combined with a v-on listener that emits update:x event instead.`,\n      [45 /* ErrorCodes.X_INVALID_EXPRESSION */]: `Error parsing JavaScript expression: `,\n      [46 /* ErrorCodes.X_KEEP_ALIVE_INVALID_CHILDREN */]: `<KeepAlive> expects exactly one child component.`,\n      // generic errors\n      [47 /* ErrorCodes.X_PREFIX_ID_NOT_SUPPORTED */]: `\"prefixIdentifiers\" option is not supported in this build of compiler.`,\n      [48 /* ErrorCodes.X_MODULE_MODE_NOT_SUPPORTED */]: `ES module mode is not supported in this build of compiler.`,\n      [49 /* ErrorCodes.X_CACHE_HANDLER_NOT_SUPPORTED */]: `\"cacheHandlers\" option is only supported when the \"prefixIdentifiers\" option is enabled.`,\n      [50 /* ErrorCodes.X_SCOPE_ID_NOT_SUPPORTED */]: `\"scopeId\" option is only supported in module mode.`,\n      // just to fulfill types\n      [51 /* ErrorCodes.__EXTEND_POINT__ */]: ``\n  };\n\n  const FRAGMENT = Symbol(`Fragment` );\n  const TELEPORT = Symbol(`Teleport` );\n  const SUSPENSE = Symbol(`Suspense` );\n  const KEEP_ALIVE = Symbol(`KeepAlive` );\n  const BASE_TRANSITION = Symbol(`BaseTransition` );\n  const OPEN_BLOCK = Symbol(`openBlock` );\n  const CREATE_BLOCK = Symbol(`createBlock` );\n  const CREATE_ELEMENT_BLOCK = Symbol(`createElementBlock` );\n  const CREATE_VNODE = Symbol(`createVNode` );\n  const CREATE_ELEMENT_VNODE = Symbol(`createElementVNode` );\n  const CREATE_COMMENT = Symbol(`createCommentVNode` );\n  const CREATE_TEXT = Symbol(`createTextVNode` );\n  const CREATE_STATIC = Symbol(`createStaticVNode` );\n  const RESOLVE_COMPONENT = Symbol(`resolveComponent` );\n  const RESOLVE_DYNAMIC_COMPONENT = Symbol(`resolveDynamicComponent` );\n  const RESOLVE_DIRECTIVE = Symbol(`resolveDirective` );\n  const RESOLVE_FILTER = Symbol(`resolveFilter` );\n  const WITH_DIRECTIVES = Symbol(`withDirectives` );\n  const RENDER_LIST = Symbol(`renderList` );\n  const RENDER_SLOT = Symbol(`renderSlot` );\n  const CREATE_SLOTS = Symbol(`createSlots` );\n  const TO_DISPLAY_STRING = Symbol(`toDisplayString` );\n  const MERGE_PROPS = Symbol(`mergeProps` );\n  const NORMALIZE_CLASS = Symbol(`normalizeClass` );\n  const NORMALIZE_STYLE = Symbol(`normalizeStyle` );\n  const NORMALIZE_PROPS = Symbol(`normalizeProps` );\n  const GUARD_REACTIVE_PROPS = Symbol(`guardReactiveProps` );\n  const TO_HANDLERS = Symbol(`toHandlers` );\n  const CAMELIZE = Symbol(`camelize` );\n  const CAPITALIZE = Symbol(`capitalize` );\n  const TO_HANDLER_KEY = Symbol(`toHandlerKey` );\n  const SET_BLOCK_TRACKING = Symbol(`setBlockTracking` );\n  const PUSH_SCOPE_ID = Symbol(`pushScopeId` );\n  const POP_SCOPE_ID = Symbol(`popScopeId` );\n  const WITH_CTX = Symbol(`withCtx` );\n  const UNREF = Symbol(`unref` );\n  const IS_REF = Symbol(`isRef` );\n  const WITH_MEMO = Symbol(`withMemo` );\n  const IS_MEMO_SAME = Symbol(`isMemoSame` );\n  // Name mapping for runtime helpers that need to be imported from 'vue' in\n  // generated code. Make sure these are correctly exported in the runtime!\n  const helperNameMap = {\n      [FRAGMENT]: `Fragment`,\n      [TELEPORT]: `Teleport`,\n      [SUSPENSE]: `Suspense`,\n      [KEEP_ALIVE]: `KeepAlive`,\n      [BASE_TRANSITION]: `BaseTransition`,\n      [OPEN_BLOCK]: `openBlock`,\n      [CREATE_BLOCK]: `createBlock`,\n      [CREATE_ELEMENT_BLOCK]: `createElementBlock`,\n      [CREATE_VNODE]: `createVNode`,\n      [CREATE_ELEMENT_VNODE]: `createElementVNode`,\n      [CREATE_COMMENT]: `createCommentVNode`,\n      [CREATE_TEXT]: `createTextVNode`,\n      [CREATE_STATIC]: `createStaticVNode`,\n      [RESOLVE_COMPONENT]: `resolveComponent`,\n      [RESOLVE_DYNAMIC_COMPONENT]: `resolveDynamicComponent`,\n      [RESOLVE_DIRECTIVE]: `resolveDirective`,\n      [RESOLVE_FILTER]: `resolveFilter`,\n      [WITH_DIRECTIVES]: `withDirectives`,\n      [RENDER_LIST]: `renderList`,\n      [RENDER_SLOT]: `renderSlot`,\n      [CREATE_SLOTS]: `createSlots`,\n      [TO_DISPLAY_STRING]: `toDisplayString`,\n      [MERGE_PROPS]: `mergeProps`,\n      [NORMALIZE_CLASS]: `normalizeClass`,\n      [NORMALIZE_STYLE]: `normalizeStyle`,\n      [NORMALIZE_PROPS]: `normalizeProps`,\n      [GUARD_REACTIVE_PROPS]: `guardReactiveProps`,\n      [TO_HANDLERS]: `toHandlers`,\n      [CAMELIZE]: `camelize`,\n      [CAPITALIZE]: `capitalize`,\n      [TO_HANDLER_KEY]: `toHandlerKey`,\n      [SET_BLOCK_TRACKING]: `setBlockTracking`,\n      [PUSH_SCOPE_ID]: `pushScopeId`,\n      [POP_SCOPE_ID]: `popScopeId`,\n      [WITH_CTX]: `withCtx`,\n      [UNREF]: `unref`,\n      [IS_REF]: `isRef`,\n      [WITH_MEMO]: `withMemo`,\n      [IS_MEMO_SAME]: `isMemoSame`\n  };\n  function registerRuntimeHelpers(helpers) {\n      Object.getOwnPropertySymbols(helpers).forEach(s => {\n          helperNameMap[s] = helpers[s];\n      });\n  }\n\n  // AST Utilities ---------------------------------------------------------------\n  // Some expressions, e.g. sequence and conditional expressions, are never\n  // associated with template nodes, so their source locations are just a stub.\n  // Container types like CompoundExpression also don't need a real location.\n  const locStub = {\n      source: '',\n      start: { line: 1, column: 1, offset: 0 },\n      end: { line: 1, column: 1, offset: 0 }\n  };\n  function createRoot(children, loc = locStub) {\n      return {\n          type: 0 /* NodeTypes.ROOT */,\n          children,\n          helpers: new Set(),\n          components: [],\n          directives: [],\n          hoists: [],\n          imports: [],\n          cached: 0,\n          temps: 0,\n          codegenNode: undefined,\n          loc\n      };\n  }\n  function createVNodeCall(context, tag, props, children, patchFlag, dynamicProps, directives, isBlock = false, disableTracking = false, isComponent = false, loc = locStub) {\n      if (context) {\n          if (isBlock) {\n              context.helper(OPEN_BLOCK);\n              context.helper(getVNodeBlockHelper(context.inSSR, isComponent));\n          }\n          else {\n              context.helper(getVNodeHelper(context.inSSR, isComponent));\n          }\n          if (directives) {\n              context.helper(WITH_DIRECTIVES);\n          }\n      }\n      return {\n          type: 13 /* NodeTypes.VNODE_CALL */,\n          tag,\n          props,\n          children,\n          patchFlag,\n          dynamicProps,\n          directives,\n          isBlock,\n          disableTracking,\n          isComponent,\n          loc\n      };\n  }\n  function createArrayExpression(elements, loc = locStub) {\n      return {\n          type: 17 /* NodeTypes.JS_ARRAY_EXPRESSION */,\n          loc,\n          elements\n      };\n  }\n  function createObjectExpression(properties, loc = locStub) {\n      return {\n          type: 15 /* NodeTypes.JS_OBJECT_EXPRESSION */,\n          loc,\n          properties\n      };\n  }\n  function createObjectProperty(key, value) {\n      return {\n          type: 16 /* NodeTypes.JS_PROPERTY */,\n          loc: locStub,\n          key: isString(key) ? createSimpleExpression(key, true) : key,\n          value\n      };\n  }\n  function createSimpleExpression(content, isStatic = false, loc = locStub, constType = 0 /* ConstantTypes.NOT_CONSTANT */) {\n      return {\n          type: 4 /* NodeTypes.SIMPLE_EXPRESSION */,\n          loc,\n          content,\n          isStatic,\n          constType: isStatic ? 3 /* ConstantTypes.CAN_STRINGIFY */ : constType\n      };\n  }\n  function createInterpolation(content, loc) {\n      return {\n          type: 5 /* NodeTypes.INTERPOLATION */,\n          loc,\n          content: isString(content)\n              ? createSimpleExpression(content, false, loc)\n              : content\n      };\n  }\n  function createCompoundExpression(children, loc = locStub) {\n      return {\n          type: 8 /* NodeTypes.COMPOUND_EXPRESSION */,\n          loc,\n          children\n      };\n  }\n  function createCallExpression(callee, args = [], loc = locStub) {\n      return {\n          type: 14 /* NodeTypes.JS_CALL_EXPRESSION */,\n          loc,\n          callee,\n          arguments: args\n      };\n  }\n  function createFunctionExpression(params, returns = undefined, newline = false, isSlot = false, loc = locStub) {\n      return {\n          type: 18 /* NodeTypes.JS_FUNCTION_EXPRESSION */,\n          params,\n          returns,\n          newline,\n          isSlot,\n          loc\n      };\n  }\n  function createConditionalExpression(test, consequent, alternate, newline = true) {\n      return {\n          type: 19 /* NodeTypes.JS_CONDITIONAL_EXPRESSION */,\n          test,\n          consequent,\n          alternate,\n          newline,\n          loc: locStub\n      };\n  }\n  function createCacheExpression(index, value, isVNode = false) {\n      return {\n          type: 20 /* NodeTypes.JS_CACHE_EXPRESSION */,\n          index,\n          value,\n          isVNode,\n          loc: locStub\n      };\n  }\n  function createBlockStatement(body) {\n      return {\n          type: 21 /* NodeTypes.JS_BLOCK_STATEMENT */,\n          body,\n          loc: locStub\n      };\n  }\n  function createTemplateLiteral(elements) {\n      return {\n          type: 22 /* NodeTypes.JS_TEMPLATE_LITERAL */,\n          elements,\n          loc: locStub\n      };\n  }\n  function createIfStatement(test, consequent, alternate) {\n      return {\n          type: 23 /* NodeTypes.JS_IF_STATEMENT */,\n          test,\n          consequent,\n          alternate,\n          loc: locStub\n      };\n  }\n  function createAssignmentExpression(left, right) {\n      return {\n          type: 24 /* NodeTypes.JS_ASSIGNMENT_EXPRESSION */,\n          left,\n          right,\n          loc: locStub\n      };\n  }\n  function createSequenceExpression(expressions) {\n      return {\n          type: 25 /* NodeTypes.JS_SEQUENCE_EXPRESSION */,\n          expressions,\n          loc: locStub\n      };\n  }\n  function createReturnStatement(returns) {\n      return {\n          type: 26 /* NodeTypes.JS_RETURN_STATEMENT */,\n          returns,\n          loc: locStub\n      };\n  }\n\n  const isStaticExp = (p) => p.type === 4 /* NodeTypes.SIMPLE_EXPRESSION */ && p.isStatic;\n  const isBuiltInType = (tag, expected) => tag === expected || tag === hyphenate(expected);\n  function isCoreComponent(tag) {\n      if (isBuiltInType(tag, 'Teleport')) {\n          return TELEPORT;\n      }\n      else if (isBuiltInType(tag, 'Suspense')) {\n          return SUSPENSE;\n      }\n      else if (isBuiltInType(tag, 'KeepAlive')) {\n          return KEEP_ALIVE;\n      }\n      else if (isBuiltInType(tag, 'BaseTransition')) {\n          return BASE_TRANSITION;\n      }\n  }\n  const nonIdentifierRE = /^\\d|[^\\$\\w]/;\n  const isSimpleIdentifier = (name) => !nonIdentifierRE.test(name);\n  const validFirstIdentCharRE = /[A-Za-z_$\\xA0-\\uFFFF]/;\n  const validIdentCharRE = /[\\.\\?\\w$\\xA0-\\uFFFF]/;\n  const whitespaceRE = /\\s+[.[]\\s*|\\s*[.[]\\s+/g;\n  /**\n   * Simple lexer to check if an expression is a member expression. This is\n   * lax and only checks validity at the root level (i.e. does not validate exps\n   * inside square brackets), but it's ok since these are only used on template\n   * expressions and false positives are invalid expressions in the first place.\n   */\n  const isMemberExpressionBrowser = (path) => {\n      // remove whitespaces around . or [ first\n      path = path.trim().replace(whitespaceRE, s => s.trim());\n      let state = 0 /* MemberExpLexState.inMemberExp */;\n      let stateStack = [];\n      let currentOpenBracketCount = 0;\n      let currentOpenParensCount = 0;\n      let currentStringType = null;\n      for (let i = 0; i < path.length; i++) {\n          const char = path.charAt(i);\n          switch (state) {\n              case 0 /* MemberExpLexState.inMemberExp */:\n                  if (char === '[') {\n                      stateStack.push(state);\n                      state = 1 /* MemberExpLexState.inBrackets */;\n                      currentOpenBracketCount++;\n                  }\n                  else if (char === '(') {\n                      stateStack.push(state);\n                      state = 2 /* MemberExpLexState.inParens */;\n                      currentOpenParensCount++;\n                  }\n                  else if (!(i === 0 ? validFirstIdentCharRE : validIdentCharRE).test(char)) {\n                      return false;\n                  }\n                  break;\n              case 1 /* MemberExpLexState.inBrackets */:\n                  if (char === `'` || char === `\"` || char === '`') {\n                      stateStack.push(state);\n                      state = 3 /* MemberExpLexState.inString */;\n                      currentStringType = char;\n                  }\n                  else if (char === `[`) {\n                      currentOpenBracketCount++;\n                  }\n                  else if (char === `]`) {\n                      if (!--currentOpenBracketCount) {\n                          state = stateStack.pop();\n                      }\n                  }\n                  break;\n              case 2 /* MemberExpLexState.inParens */:\n                  if (char === `'` || char === `\"` || char === '`') {\n                      stateStack.push(state);\n                      state = 3 /* MemberExpLexState.inString */;\n                      currentStringType = char;\n                  }\n                  else if (char === `(`) {\n                      currentOpenParensCount++;\n                  }\n                  else if (char === `)`) {\n                      // if the exp ends as a call then it should not be considered valid\n                      if (i === path.length - 1) {\n                          return false;\n                      }\n                      if (!--currentOpenParensCount) {\n                          state = stateStack.pop();\n                      }\n                  }\n                  break;\n              case 3 /* MemberExpLexState.inString */:\n                  if (char === currentStringType) {\n                      state = stateStack.pop();\n                      currentStringType = null;\n                  }\n                  break;\n          }\n      }\n      return !currentOpenBracketCount && !currentOpenParensCount;\n  };\n  const isMemberExpressionNode = NOOP\n      ;\n  const isMemberExpression = isMemberExpressionBrowser\n      ;\n  function getInnerRange(loc, offset, length) {\n      const source = loc.source.slice(offset, offset + length);\n      const newLoc = {\n          source,\n          start: advancePositionWithClone(loc.start, loc.source, offset),\n          end: loc.end\n      };\n      if (length != null) {\n          newLoc.end = advancePositionWithClone(loc.start, loc.source, offset + length);\n      }\n      return newLoc;\n  }\n  function advancePositionWithClone(pos, source, numberOfCharacters = source.length) {\n      return advancePositionWithMutation(extend({}, pos), source, numberOfCharacters);\n  }\n  // advance by mutation without cloning (for performance reasons), since this\n  // gets called a lot in the parser\n  function advancePositionWithMutation(pos, source, numberOfCharacters = source.length) {\n      let linesCount = 0;\n      let lastNewLinePos = -1;\n      for (let i = 0; i < numberOfCharacters; i++) {\n          if (source.charCodeAt(i) === 10 /* newline char code */) {\n              linesCount++;\n              lastNewLinePos = i;\n          }\n      }\n      pos.offset += numberOfCharacters;\n      pos.line += linesCount;\n      pos.column =\n          lastNewLinePos === -1\n              ? pos.column + numberOfCharacters\n              : numberOfCharacters - lastNewLinePos;\n      return pos;\n  }\n  function assert(condition, msg) {\n      /* istanbul ignore if */\n      if (!condition) {\n          throw new Error(msg || `unexpected compiler condition`);\n      }\n  }\n  function findDir(node, name, allowEmpty = false) {\n      for (let i = 0; i < node.props.length; i++) {\n          const p = node.props[i];\n          if (p.type === 7 /* NodeTypes.DIRECTIVE */ &&\n              (allowEmpty || p.exp) &&\n              (isString(name) ? p.name === name : name.test(p.name))) {\n              return p;\n          }\n      }\n  }\n  function findProp(node, name, dynamicOnly = false, allowEmpty = false) {\n      for (let i = 0; i < node.props.length; i++) {\n          const p = node.props[i];\n          if (p.type === 6 /* NodeTypes.ATTRIBUTE */) {\n              if (dynamicOnly)\n                  continue;\n              if (p.name === name && (p.value || allowEmpty)) {\n                  return p;\n              }\n          }\n          else if (p.name === 'bind' &&\n              (p.exp || allowEmpty) &&\n              isStaticArgOf(p.arg, name)) {\n              return p;\n          }\n      }\n  }\n  function isStaticArgOf(arg, name) {\n      return !!(arg && isStaticExp(arg) && arg.content === name);\n  }\n  function hasDynamicKeyVBind(node) {\n      return node.props.some(p => p.type === 7 /* NodeTypes.DIRECTIVE */ &&\n          p.name === 'bind' &&\n          (!p.arg || // v-bind=\"obj\"\n              p.arg.type !== 4 /* NodeTypes.SIMPLE_EXPRESSION */ || // v-bind:[_ctx.foo]\n              !p.arg.isStatic) // v-bind:[foo]\n      );\n  }\n  function isText$1(node) {\n      return node.type === 5 /* NodeTypes.INTERPOLATION */ || node.type === 2 /* NodeTypes.TEXT */;\n  }\n  function isVSlot(p) {\n      return p.type === 7 /* NodeTypes.DIRECTIVE */ && p.name === 'slot';\n  }\n  function isTemplateNode(node) {\n      return (node.type === 1 /* NodeTypes.ELEMENT */ && node.tagType === 3 /* ElementTypes.TEMPLATE */);\n  }\n  function isSlotOutlet(node) {\n      return node.type === 1 /* NodeTypes.ELEMENT */ && node.tagType === 2 /* ElementTypes.SLOT */;\n  }\n  function getVNodeHelper(ssr, isComponent) {\n      return ssr || isComponent ? CREATE_VNODE : CREATE_ELEMENT_VNODE;\n  }\n  function getVNodeBlockHelper(ssr, isComponent) {\n      return ssr || isComponent ? CREATE_BLOCK : CREATE_ELEMENT_BLOCK;\n  }\n  const propsHelperSet = new Set([NORMALIZE_PROPS, GUARD_REACTIVE_PROPS]);\n  function getUnnormalizedProps(props, callPath = []) {\n      if (props &&\n          !isString(props) &&\n          props.type === 14 /* NodeTypes.JS_CALL_EXPRESSION */) {\n          const callee = props.callee;\n          if (!isString(callee) && propsHelperSet.has(callee)) {\n              return getUnnormalizedProps(props.arguments[0], callPath.concat(props));\n          }\n      }\n      return [props, callPath];\n  }\n  function injectProp(node, prop, context) {\n      let propsWithInjection;\n      /**\n       * 1. mergeProps(...)\n       * 2. toHandlers(...)\n       * 3. normalizeProps(...)\n       * 4. normalizeProps(guardReactiveProps(...))\n       *\n       * we need to get the real props before normalization\n       */\n      let props = node.type === 13 /* NodeTypes.VNODE_CALL */ ? node.props : node.arguments[2];\n      let callPath = [];\n      let parentCall;\n      if (props &&\n          !isString(props) &&\n          props.type === 14 /* NodeTypes.JS_CALL_EXPRESSION */) {\n          const ret = getUnnormalizedProps(props);\n          props = ret[0];\n          callPath = ret[1];\n          parentCall = callPath[callPath.length - 1];\n      }\n      if (props == null || isString(props)) {\n          propsWithInjection = createObjectExpression([prop]);\n      }\n      else if (props.type === 14 /* NodeTypes.JS_CALL_EXPRESSION */) {\n          // merged props... add ours\n          // only inject key to object literal if it's the first argument so that\n          // if doesn't override user provided keys\n          const first = props.arguments[0];\n          if (!isString(first) && first.type === 15 /* NodeTypes.JS_OBJECT_EXPRESSION */) {\n              // #6631\n              if (!hasProp(prop, first)) {\n                  first.properties.unshift(prop);\n              }\n          }\n          else {\n              if (props.callee === TO_HANDLERS) {\n                  // #2366\n                  propsWithInjection = createCallExpression(context.helper(MERGE_PROPS), [\n                      createObjectExpression([prop]),\n                      props\n                  ]);\n              }\n              else {\n                  props.arguments.unshift(createObjectExpression([prop]));\n              }\n          }\n          !propsWithInjection && (propsWithInjection = props);\n      }\n      else if (props.type === 15 /* NodeTypes.JS_OBJECT_EXPRESSION */) {\n          if (!hasProp(prop, props)) {\n              props.properties.unshift(prop);\n          }\n          propsWithInjection = props;\n      }\n      else {\n          // single v-bind with expression, return a merged replacement\n          propsWithInjection = createCallExpression(context.helper(MERGE_PROPS), [\n              createObjectExpression([prop]),\n              props\n          ]);\n          // in the case of nested helper call, e.g. `normalizeProps(guardReactiveProps(props))`,\n          // it will be rewritten as `normalizeProps(mergeProps({ key: 0 }, props))`,\n          // the `guardReactiveProps` will no longer be needed\n          if (parentCall && parentCall.callee === GUARD_REACTIVE_PROPS) {\n              parentCall = callPath[callPath.length - 2];\n          }\n      }\n      if (node.type === 13 /* NodeTypes.VNODE_CALL */) {\n          if (parentCall) {\n              parentCall.arguments[0] = propsWithInjection;\n          }\n          else {\n              node.props = propsWithInjection;\n          }\n      }\n      else {\n          if (parentCall) {\n              parentCall.arguments[0] = propsWithInjection;\n          }\n          else {\n              node.arguments[2] = propsWithInjection;\n          }\n      }\n  }\n  // check existing key to avoid overriding user provided keys\n  function hasProp(prop, props) {\n      let result = false;\n      if (prop.key.type === 4 /* NodeTypes.SIMPLE_EXPRESSION */) {\n          const propKeyName = prop.key.content;\n          result = props.properties.some(p => p.key.type === 4 /* NodeTypes.SIMPLE_EXPRESSION */ &&\n              p.key.content === propKeyName);\n      }\n      return result;\n  }\n  function toValidAssetId(name, type) {\n      // see issue#4422, we need adding identifier on validAssetId if variable `name` has specific character\n      return `_${type}_${name.replace(/[^\\w]/g, (searchValue, replaceValue) => {\n        return searchValue === '-' ? '_' : name.charCodeAt(replaceValue).toString();\n    })}`;\n  }\n  // Check if a node contains expressions that reference current context scope ids\n  function hasScopeRef(node, ids) {\n      if (!node || Object.keys(ids).length === 0) {\n          return false;\n      }\n      switch (node.type) {\n          case 1 /* NodeTypes.ELEMENT */:\n              for (let i = 0; i < node.props.length; i++) {\n                  const p = node.props[i];\n                  if (p.type === 7 /* NodeTypes.DIRECTIVE */ &&\n                      (hasScopeRef(p.arg, ids) || hasScopeRef(p.exp, ids))) {\n                      return true;\n                  }\n              }\n              return node.children.some(c => hasScopeRef(c, ids));\n          case 11 /* NodeTypes.FOR */:\n              if (hasScopeRef(node.source, ids)) {\n                  return true;\n              }\n              return node.children.some(c => hasScopeRef(c, ids));\n          case 9 /* NodeTypes.IF */:\n              return node.branches.some(b => hasScopeRef(b, ids));\n          case 10 /* NodeTypes.IF_BRANCH */:\n              if (hasScopeRef(node.condition, ids)) {\n                  return true;\n              }\n              return node.children.some(c => hasScopeRef(c, ids));\n          case 4 /* NodeTypes.SIMPLE_EXPRESSION */:\n              return (!node.isStatic &&\n                  isSimpleIdentifier(node.content) &&\n                  !!ids[node.content]);\n          case 8 /* NodeTypes.COMPOUND_EXPRESSION */:\n              return node.children.some(c => isObject(c) && hasScopeRef(c, ids));\n          case 5 /* NodeTypes.INTERPOLATION */:\n          case 12 /* NodeTypes.TEXT_CALL */:\n              return hasScopeRef(node.content, ids);\n          case 2 /* NodeTypes.TEXT */:\n          case 3 /* NodeTypes.COMMENT */:\n              return false;\n          default:\n              return false;\n      }\n  }\n  function getMemoedVNodeCall(node) {\n      if (node.type === 14 /* NodeTypes.JS_CALL_EXPRESSION */ && node.callee === WITH_MEMO) {\n          return node.arguments[1].returns;\n      }\n      else {\n          return node;\n      }\n  }\n  function makeBlock(node, { helper, removeHelper, inSSR }) {\n      if (!node.isBlock) {\n          node.isBlock = true;\n          removeHelper(getVNodeHelper(inSSR, node.isComponent));\n          helper(OPEN_BLOCK);\n          helper(getVNodeBlockHelper(inSSR, node.isComponent));\n      }\n  }\n\n  const deprecationData = {\n      [\"COMPILER_IS_ON_ELEMENT\" /* CompilerDeprecationTypes.COMPILER_IS_ON_ELEMENT */]: {\n          message: `Platform-native elements with \"is\" prop will no longer be ` +\n              `treated as components in Vue 3 unless the \"is\" value is explicitly ` +\n              `prefixed with \"vue:\".`,\n          link: `https://v3-migration.vuejs.org/breaking-changes/custom-elements-interop.html`\n      },\n      [\"COMPILER_V_BIND_SYNC\" /* CompilerDeprecationTypes.COMPILER_V_BIND_SYNC */]: {\n          message: key => `.sync modifier for v-bind has been removed. Use v-model with ` +\n              `argument instead. \\`v-bind:${key}.sync\\` should be changed to ` +\n              `\\`v-model:${key}\\`.`,\n          link: `https://v3-migration.vuejs.org/breaking-changes/v-model.html`\n      },\n      [\"COMPILER_V_BIND_PROP\" /* CompilerDeprecationTypes.COMPILER_V_BIND_PROP */]: {\n          message: `.prop modifier for v-bind has been removed and no longer necessary. ` +\n              `Vue 3 will automatically set a binding as DOM property when appropriate.`\n      },\n      [\"COMPILER_V_BIND_OBJECT_ORDER\" /* CompilerDeprecationTypes.COMPILER_V_BIND_OBJECT_ORDER */]: {\n          message: `v-bind=\"obj\" usage is now order sensitive and behaves like JavaScript ` +\n              `object spread: it will now overwrite an existing non-mergeable attribute ` +\n              `that appears before v-bind in the case of conflict. ` +\n              `To retain 2.x behavior, move v-bind to make it the first attribute. ` +\n              `You can also suppress this warning if the usage is intended.`,\n          link: `https://v3-migration.vuejs.org/breaking-changes/v-bind.html`\n      },\n      [\"COMPILER_V_ON_NATIVE\" /* CompilerDeprecationTypes.COMPILER_V_ON_NATIVE */]: {\n          message: `.native modifier for v-on has been removed as is no longer necessary.`,\n          link: `https://v3-migration.vuejs.org/breaking-changes/v-on-native-modifier-removed.html`\n      },\n      [\"COMPILER_V_IF_V_FOR_PRECEDENCE\" /* CompilerDeprecationTypes.COMPILER_V_IF_V_FOR_PRECEDENCE */]: {\n          message: `v-if / v-for precedence when used on the same element has changed ` +\n              `in Vue 3: v-if now takes higher precedence and will no longer have ` +\n              `access to v-for scope variables. It is best to avoid the ambiguity ` +\n              `with <template> tags or use a computed property that filters v-for ` +\n              `data source.`,\n          link: `https://v3-migration.vuejs.org/breaking-changes/v-if-v-for.html`\n      },\n      [\"COMPILER_NATIVE_TEMPLATE\" /* CompilerDeprecationTypes.COMPILER_NATIVE_TEMPLATE */]: {\n          message: `<template> with no special directives will render as a native template ` +\n              `element instead of its inner content in Vue 3.`\n      },\n      [\"COMPILER_INLINE_TEMPLATE\" /* CompilerDeprecationTypes.COMPILER_INLINE_TEMPLATE */]: {\n          message: `\"inline-template\" has been removed in Vue 3.`,\n          link: `https://v3-migration.vuejs.org/breaking-changes/inline-template-attribute.html`\n      },\n      [\"COMPILER_FILTER\" /* CompilerDeprecationTypes.COMPILER_FILTERS */]: {\n          message: `filters have been removed in Vue 3. ` +\n              `The \"|\" symbol will be treated as native JavaScript bitwise OR operator. ` +\n              `Use method calls or computed properties instead.`,\n          link: `https://v3-migration.vuejs.org/breaking-changes/filters.html`\n      }\n  };\n  function getCompatValue(key, context) {\n      const config = context.options\n          ? context.options.compatConfig\n          : context.compatConfig;\n      const value = config && config[key];\n      if (key === 'MODE') {\n          return value || 3; // compiler defaults to v3 behavior\n      }\n      else {\n          return value;\n      }\n  }\n  function isCompatEnabled(key, context) {\n      const mode = getCompatValue('MODE', context);\n      const value = getCompatValue(key, context);\n      // in v3 mode, only enable if explicitly set to true\n      // otherwise enable for any non-false value\n      return mode === 3 ? value === true : value !== false;\n  }\n  function checkCompatEnabled(key, context, loc, ...args) {\n      const enabled = isCompatEnabled(key, context);\n      if (enabled) {\n          warnDeprecation(key, context, loc, ...args);\n      }\n      return enabled;\n  }\n  function warnDeprecation(key, context, loc, ...args) {\n      const val = getCompatValue(key, context);\n      if (val === 'suppress-warning') {\n          return;\n      }\n      const { message, link } = deprecationData[key];\n      const msg = `(deprecation ${key}) ${typeof message === 'function' ? message(...args) : message}${link ? `\\n  Details: ${link}` : ``}`;\n      const err = new SyntaxError(msg);\n      err.code = key;\n      if (loc)\n          err.loc = loc;\n      context.onWarn(err);\n  }\n\n  // The default decoder only provides escapes for characters reserved as part of\n  // the template syntax, and is only used if the custom renderer did not provide\n  // a platform-specific decoder.\n  const decodeRE = /&(gt|lt|amp|apos|quot);/g;\n  const decodeMap = {\n      gt: '>',\n      lt: '<',\n      amp: '&',\n      apos: \"'\",\n      quot: '\"'\n  };\n  const defaultParserOptions = {\n      delimiters: [`{{`, `}}`],\n      getNamespace: () => 0 /* Namespaces.HTML */,\n      getTextMode: () => 0 /* TextModes.DATA */,\n      isVoidTag: NO,\n      isPreTag: NO,\n      isCustomElement: NO,\n      decodeEntities: (rawText) => rawText.replace(decodeRE, (_, p1) => decodeMap[p1]),\n      onError: defaultOnError,\n      onWarn: defaultOnWarn,\n      comments: true\n  };\n  function baseParse(content, options = {}) {\n      const context = createParserContext(content, options);\n      const start = getCursor(context);\n      return createRoot(parseChildren(context, 0 /* TextModes.DATA */, []), getSelection(context, start));\n  }\n  function createParserContext(content, rawOptions) {\n      const options = extend({}, defaultParserOptions);\n      let key;\n      for (key in rawOptions) {\n          // @ts-ignore\n          options[key] =\n              rawOptions[key] === undefined\n                  ? defaultParserOptions[key]\n                  : rawOptions[key];\n      }\n      return {\n          options,\n          column: 1,\n          line: 1,\n          offset: 0,\n          originalSource: content,\n          source: content,\n          inPre: false,\n          inVPre: false,\n          onWarn: options.onWarn\n      };\n  }\n  function parseChildren(context, mode, ancestors) {\n      const parent = last(ancestors);\n      const ns = parent ? parent.ns : 0 /* Namespaces.HTML */;\n      const nodes = [];\n      while (!isEnd(context, mode, ancestors)) {\n          const s = context.source;\n          let node = undefined;\n          if (mode === 0 /* TextModes.DATA */ || mode === 1 /* TextModes.RCDATA */) {\n              if (!context.inVPre && startsWith(s, context.options.delimiters[0])) {\n                  // '{{'\n                  node = parseInterpolation(context, mode);\n              }\n              else if (mode === 0 /* TextModes.DATA */ && s[0] === '<') {\n                  // https://html.spec.whatwg.org/multipage/parsing.html#tag-open-state\n                  if (s.length === 1) {\n                      emitError(context, 5 /* ErrorCodes.EOF_BEFORE_TAG_NAME */, 1);\n                  }\n                  else if (s[1] === '!') {\n                      // https://html.spec.whatwg.org/multipage/parsing.html#markup-declaration-open-state\n                      if (startsWith(s, '<!--')) {\n                          node = parseComment(context);\n                      }\n                      else if (startsWith(s, '<!DOCTYPE')) {\n                          // Ignore DOCTYPE by a limitation.\n                          node = parseBogusComment(context);\n                      }\n                      else if (startsWith(s, '<![CDATA[')) {\n                          if (ns !== 0 /* Namespaces.HTML */) {\n                              node = parseCDATA(context, ancestors);\n                          }\n                          else {\n                              emitError(context, 1 /* ErrorCodes.CDATA_IN_HTML_CONTENT */);\n                              node = parseBogusComment(context);\n                          }\n                      }\n                      else {\n                          emitError(context, 11 /* ErrorCodes.INCORRECTLY_OPENED_COMMENT */);\n                          node = parseBogusComment(context);\n                      }\n                  }\n                  else if (s[1] === '/') {\n                      // https://html.spec.whatwg.org/multipage/parsing.html#end-tag-open-state\n                      if (s.length === 2) {\n                          emitError(context, 5 /* ErrorCodes.EOF_BEFORE_TAG_NAME */, 2);\n                      }\n                      else if (s[2] === '>') {\n                          emitError(context, 14 /* ErrorCodes.MISSING_END_TAG_NAME */, 2);\n                          advanceBy(context, 3);\n                          continue;\n                      }\n                      else if (/[a-z]/i.test(s[2])) {\n                          emitError(context, 23 /* ErrorCodes.X_INVALID_END_TAG */);\n                          parseTag(context, 1 /* TagType.End */, parent);\n                          continue;\n                      }\n                      else {\n                          emitError(context, 12 /* ErrorCodes.INVALID_FIRST_CHARACTER_OF_TAG_NAME */, 2);\n                          node = parseBogusComment(context);\n                      }\n                  }\n                  else if (/[a-z]/i.test(s[1])) {\n                      node = parseElement(context, ancestors);\n                      // 2.x <template> with no directive compat\n                      if (isCompatEnabled(\"COMPILER_NATIVE_TEMPLATE\" /* CompilerDeprecationTypes.COMPILER_NATIVE_TEMPLATE */, context) &&\n                          node &&\n                          node.tag === 'template' &&\n                          !node.props.some(p => p.type === 7 /* NodeTypes.DIRECTIVE */ &&\n                              isSpecialTemplateDirective(p.name))) {\n                          warnDeprecation(\"COMPILER_NATIVE_TEMPLATE\" /* CompilerDeprecationTypes.COMPILER_NATIVE_TEMPLATE */, context, node.loc);\n                          node = node.children;\n                      }\n                  }\n                  else if (s[1] === '?') {\n                      emitError(context, 21 /* ErrorCodes.UNEXPECTED_QUESTION_MARK_INSTEAD_OF_TAG_NAME */, 1);\n                      node = parseBogusComment(context);\n                  }\n                  else {\n                      emitError(context, 12 /* ErrorCodes.INVALID_FIRST_CHARACTER_OF_TAG_NAME */, 1);\n                  }\n              }\n          }\n          if (!node) {\n              node = parseText(context, mode);\n          }\n          if (isArray(node)) {\n              for (let i = 0; i < node.length; i++) {\n                  pushNode(nodes, node[i]);\n              }\n          }\n          else {\n              pushNode(nodes, node);\n          }\n      }\n      // Whitespace handling strategy like v2\n      let removedWhitespace = false;\n      if (mode !== 2 /* TextModes.RAWTEXT */ && mode !== 1 /* TextModes.RCDATA */) {\n          const shouldCondense = context.options.whitespace !== 'preserve';\n          for (let i = 0; i < nodes.length; i++) {\n              const node = nodes[i];\n              if (node.type === 2 /* NodeTypes.TEXT */) {\n                  if (!context.inPre) {\n                      if (!/[^\\t\\r\\n\\f ]/.test(node.content)) {\n                          const prev = nodes[i - 1];\n                          const next = nodes[i + 1];\n                          // Remove if:\n                          // - the whitespace is the first or last node, or:\n                          // - (condense mode) the whitespace is between twos comments, or:\n                          // - (condense mode) the whitespace is between comment and element, or:\n                          // - (condense mode) the whitespace is between two elements AND contains newline\n                          if (!prev ||\n                              !next ||\n                              (shouldCondense &&\n                                  ((prev.type === 3 /* NodeTypes.COMMENT */ &&\n                                      next.type === 3 /* NodeTypes.COMMENT */) ||\n                                      (prev.type === 3 /* NodeTypes.COMMENT */ &&\n                                          next.type === 1 /* NodeTypes.ELEMENT */) ||\n                                      (prev.type === 1 /* NodeTypes.ELEMENT */ &&\n                                          next.type === 3 /* NodeTypes.COMMENT */) ||\n                                      (prev.type === 1 /* NodeTypes.ELEMENT */ &&\n                                          next.type === 1 /* NodeTypes.ELEMENT */ &&\n                                          /[\\r\\n]/.test(node.content))))) {\n                              removedWhitespace = true;\n                              nodes[i] = null;\n                          }\n                          else {\n                              // Otherwise, the whitespace is condensed into a single space\n                              node.content = ' ';\n                          }\n                      }\n                      else if (shouldCondense) {\n                          // in condense mode, consecutive whitespaces in text are condensed\n                          // down to a single space.\n                          node.content = node.content.replace(/[\\t\\r\\n\\f ]+/g, ' ');\n                      }\n                  }\n                  else {\n                      // #6410 normalize windows newlines in <pre>:\n                      // in SSR, browsers normalize server-rendered \\r\\n into a single \\n\n                      // in the DOM\n                      node.content = node.content.replace(/\\r\\n/g, '\\n');\n                  }\n              }\n              // Remove comment nodes if desired by configuration.\n              else if (node.type === 3 /* NodeTypes.COMMENT */ && !context.options.comments) {\n                  removedWhitespace = true;\n                  nodes[i] = null;\n              }\n          }\n          if (context.inPre && parent && context.options.isPreTag(parent.tag)) {\n              // remove leading newline per html spec\n              // https://html.spec.whatwg.org/multipage/grouping-content.html#the-pre-element\n              const first = nodes[0];\n              if (first && first.type === 2 /* NodeTypes.TEXT */) {\n                  first.content = first.content.replace(/^\\r?\\n/, '');\n              }\n          }\n      }\n      return removedWhitespace ? nodes.filter(Boolean) : nodes;\n  }\n  function pushNode(nodes, node) {\n      if (node.type === 2 /* NodeTypes.TEXT */) {\n          const prev = last(nodes);\n          // Merge if both this and the previous node are text and those are\n          // consecutive. This happens for cases like \"a < b\".\n          if (prev &&\n              prev.type === 2 /* NodeTypes.TEXT */ &&\n              prev.loc.end.offset === node.loc.start.offset) {\n              prev.content += node.content;\n              prev.loc.end = node.loc.end;\n              prev.loc.source += node.loc.source;\n              return;\n          }\n      }\n      nodes.push(node);\n  }\n  function parseCDATA(context, ancestors) {\n      advanceBy(context, 9);\n      const nodes = parseChildren(context, 3 /* TextModes.CDATA */, ancestors);\n      if (context.source.length === 0) {\n          emitError(context, 6 /* ErrorCodes.EOF_IN_CDATA */);\n      }\n      else {\n          advanceBy(context, 3);\n      }\n      return nodes;\n  }\n  function parseComment(context) {\n      const start = getCursor(context);\n      let content;\n      // Regular comment.\n      const match = /--(\\!)?>/.exec(context.source);\n      if (!match) {\n          content = context.source.slice(4);\n          advanceBy(context, context.source.length);\n          emitError(context, 7 /* ErrorCodes.EOF_IN_COMMENT */);\n      }\n      else {\n          if (match.index <= 3) {\n              emitError(context, 0 /* ErrorCodes.ABRUPT_CLOSING_OF_EMPTY_COMMENT */);\n          }\n          if (match[1]) {\n              emitError(context, 10 /* ErrorCodes.INCORRECTLY_CLOSED_COMMENT */);\n          }\n          content = context.source.slice(4, match.index);\n          // Advancing with reporting nested comments.\n          const s = context.source.slice(0, match.index);\n          let prevIndex = 1, nestedIndex = 0;\n          while ((nestedIndex = s.indexOf('<!--', prevIndex)) !== -1) {\n              advanceBy(context, nestedIndex - prevIndex + 1);\n              if (nestedIndex + 4 < s.length) {\n                  emitError(context, 16 /* ErrorCodes.NESTED_COMMENT */);\n              }\n              prevIndex = nestedIndex + 1;\n          }\n          advanceBy(context, match.index + match[0].length - prevIndex + 1);\n      }\n      return {\n          type: 3 /* NodeTypes.COMMENT */,\n          content,\n          loc: getSelection(context, start)\n      };\n  }\n  function parseBogusComment(context) {\n      const start = getCursor(context);\n      const contentStart = context.source[1] === '?' ? 1 : 2;\n      let content;\n      const closeIndex = context.source.indexOf('>');\n      if (closeIndex === -1) {\n          content = context.source.slice(contentStart);\n          advanceBy(context, context.source.length);\n      }\n      else {\n          content = context.source.slice(contentStart, closeIndex);\n          advanceBy(context, closeIndex + 1);\n      }\n      return {\n          type: 3 /* NodeTypes.COMMENT */,\n          content,\n          loc: getSelection(context, start)\n      };\n  }\n  function parseElement(context, ancestors) {\n      // Start tag.\n      const wasInPre = context.inPre;\n      const wasInVPre = context.inVPre;\n      const parent = last(ancestors);\n      const element = parseTag(context, 0 /* TagType.Start */, parent);\n      const isPreBoundary = context.inPre && !wasInPre;\n      const isVPreBoundary = context.inVPre && !wasInVPre;\n      if (element.isSelfClosing || context.options.isVoidTag(element.tag)) {\n          // #4030 self-closing <pre> tag\n          if (isPreBoundary) {\n              context.inPre = false;\n          }\n          if (isVPreBoundary) {\n              context.inVPre = false;\n          }\n          return element;\n      }\n      // Children.\n      ancestors.push(element);\n      const mode = context.options.getTextMode(element, parent);\n      const children = parseChildren(context, mode, ancestors);\n      ancestors.pop();\n      // 2.x inline-template compat\n      {\n          const inlineTemplateProp = element.props.find(p => p.type === 6 /* NodeTypes.ATTRIBUTE */ && p.name === 'inline-template');\n          if (inlineTemplateProp &&\n              checkCompatEnabled(\"COMPILER_INLINE_TEMPLATE\" /* CompilerDeprecationTypes.COMPILER_INLINE_TEMPLATE */, context, inlineTemplateProp.loc)) {\n              const loc = getSelection(context, element.loc.end);\n              inlineTemplateProp.value = {\n                  type: 2 /* NodeTypes.TEXT */,\n                  content: loc.source,\n                  loc\n              };\n          }\n      }\n      element.children = children;\n      // End tag.\n      if (startsWithEndTagOpen(context.source, element.tag)) {\n          parseTag(context, 1 /* TagType.End */, parent);\n      }\n      else {\n          emitError(context, 24 /* ErrorCodes.X_MISSING_END_TAG */, 0, element.loc.start);\n          if (context.source.length === 0 && element.tag.toLowerCase() === 'script') {\n              const first = children[0];\n              if (first && startsWith(first.loc.source, '<!--')) {\n                  emitError(context, 8 /* ErrorCodes.EOF_IN_SCRIPT_HTML_COMMENT_LIKE_TEXT */);\n              }\n          }\n      }\n      element.loc = getSelection(context, element.loc.start);\n      if (isPreBoundary) {\n          context.inPre = false;\n      }\n      if (isVPreBoundary) {\n          context.inVPre = false;\n      }\n      return element;\n  }\n  const isSpecialTemplateDirective = /*#__PURE__*/ makeMap(`if,else,else-if,for,slot`);\n  function parseTag(context, type, parent) {\n      // Tag open.\n      const start = getCursor(context);\n      const match = /^<\\/?([a-z][^\\t\\r\\n\\f />]*)/i.exec(context.source);\n      const tag = match[1];\n      const ns = context.options.getNamespace(tag, parent);\n      advanceBy(context, match[0].length);\n      advanceSpaces(context);\n      // save current state in case we need to re-parse attributes with v-pre\n      const cursor = getCursor(context);\n      const currentSource = context.source;\n      // check <pre> tag\n      if (context.options.isPreTag(tag)) {\n          context.inPre = true;\n      }\n      // Attributes.\n      let props = parseAttributes(context, type);\n      // check v-pre\n      if (type === 0 /* TagType.Start */ &&\n          !context.inVPre &&\n          props.some(p => p.type === 7 /* NodeTypes.DIRECTIVE */ && p.name === 'pre')) {\n          context.inVPre = true;\n          // reset context\n          extend(context, cursor);\n          context.source = currentSource;\n          // re-parse attrs and filter out v-pre itself\n          props = parseAttributes(context, type).filter(p => p.name !== 'v-pre');\n      }\n      // Tag close.\n      let isSelfClosing = false;\n      if (context.source.length === 0) {\n          emitError(context, 9 /* ErrorCodes.EOF_IN_TAG */);\n      }\n      else {\n          isSelfClosing = startsWith(context.source, '/>');\n          if (type === 1 /* TagType.End */ && isSelfClosing) {\n              emitError(context, 4 /* ErrorCodes.END_TAG_WITH_TRAILING_SOLIDUS */);\n          }\n          advanceBy(context, isSelfClosing ? 2 : 1);\n      }\n      if (type === 1 /* TagType.End */) {\n          return;\n      }\n      // 2.x deprecation checks\n      if (isCompatEnabled(\"COMPILER_V_IF_V_FOR_PRECEDENCE\" /* CompilerDeprecationTypes.COMPILER_V_IF_V_FOR_PRECEDENCE */, context)) {\n          let hasIf = false;\n          let hasFor = false;\n          for (let i = 0; i < props.length; i++) {\n              const p = props[i];\n              if (p.type === 7 /* NodeTypes.DIRECTIVE */) {\n                  if (p.name === 'if') {\n                      hasIf = true;\n                  }\n                  else if (p.name === 'for') {\n                      hasFor = true;\n                  }\n              }\n              if (hasIf && hasFor) {\n                  warnDeprecation(\"COMPILER_V_IF_V_FOR_PRECEDENCE\" /* CompilerDeprecationTypes.COMPILER_V_IF_V_FOR_PRECEDENCE */, context, getSelection(context, start));\n                  break;\n              }\n          }\n      }\n      let tagType = 0 /* ElementTypes.ELEMENT */;\n      if (!context.inVPre) {\n          if (tag === 'slot') {\n              tagType = 2 /* ElementTypes.SLOT */;\n          }\n          else if (tag === 'template') {\n              if (props.some(p => p.type === 7 /* NodeTypes.DIRECTIVE */ && isSpecialTemplateDirective(p.name))) {\n                  tagType = 3 /* ElementTypes.TEMPLATE */;\n              }\n          }\n          else if (isComponent(tag, props, context)) {\n              tagType = 1 /* ElementTypes.COMPONENT */;\n          }\n      }\n      return {\n          type: 1 /* NodeTypes.ELEMENT */,\n          ns,\n          tag,\n          tagType,\n          props,\n          isSelfClosing,\n          children: [],\n          loc: getSelection(context, start),\n          codegenNode: undefined // to be created during transform phase\n      };\n  }\n  function isComponent(tag, props, context) {\n      const options = context.options;\n      if (options.isCustomElement(tag)) {\n          return false;\n      }\n      if (tag === 'component' ||\n          /^[A-Z]/.test(tag) ||\n          isCoreComponent(tag) ||\n          (options.isBuiltInComponent && options.isBuiltInComponent(tag)) ||\n          (options.isNativeTag && !options.isNativeTag(tag))) {\n          return true;\n      }\n      // at this point the tag should be a native tag, but check for potential \"is\"\n      // casting\n      for (let i = 0; i < props.length; i++) {\n          const p = props[i];\n          if (p.type === 6 /* NodeTypes.ATTRIBUTE */) {\n              if (p.name === 'is' && p.value) {\n                  if (p.value.content.startsWith('vue:')) {\n                      return true;\n                  }\n                  else if (checkCompatEnabled(\"COMPILER_IS_ON_ELEMENT\" /* CompilerDeprecationTypes.COMPILER_IS_ON_ELEMENT */, context, p.loc)) {\n                      return true;\n                  }\n              }\n          }\n          else {\n              // directive\n              // v-is (TODO Deprecate)\n              if (p.name === 'is') {\n                  return true;\n              }\n              else if (\n              // :is on plain element - only treat as component in compat mode\n              p.name === 'bind' &&\n                  isStaticArgOf(p.arg, 'is') &&\n                  true &&\n                  checkCompatEnabled(\"COMPILER_IS_ON_ELEMENT\" /* CompilerDeprecationTypes.COMPILER_IS_ON_ELEMENT */, context, p.loc)) {\n                  return true;\n              }\n          }\n      }\n  }\n  function parseAttributes(context, type) {\n      const props = [];\n      const attributeNames = new Set();\n      while (context.source.length > 0 &&\n          !startsWith(context.source, '>') &&\n          !startsWith(context.source, '/>')) {\n          if (startsWith(context.source, '/')) {\n              emitError(context, 22 /* ErrorCodes.UNEXPECTED_SOLIDUS_IN_TAG */);\n              advanceBy(context, 1);\n              advanceSpaces(context);\n              continue;\n          }\n          if (type === 1 /* TagType.End */) {\n              emitError(context, 3 /* ErrorCodes.END_TAG_WITH_ATTRIBUTES */);\n          }\n          const attr = parseAttribute(context, attributeNames);\n          // Trim whitespace between class\n          // https://github.com/vuejs/core/issues/4251\n          if (attr.type === 6 /* NodeTypes.ATTRIBUTE */ &&\n              attr.value &&\n              attr.name === 'class') {\n              attr.value.content = attr.value.content.replace(/\\s+/g, ' ').trim();\n          }\n          if (type === 0 /* TagType.Start */) {\n              props.push(attr);\n          }\n          if (/^[^\\t\\r\\n\\f />]/.test(context.source)) {\n              emitError(context, 15 /* ErrorCodes.MISSING_WHITESPACE_BETWEEN_ATTRIBUTES */);\n          }\n          advanceSpaces(context);\n      }\n      return props;\n  }\n  function parseAttribute(context, nameSet) {\n      // Name.\n      const start = getCursor(context);\n      const match = /^[^\\t\\r\\n\\f />][^\\t\\r\\n\\f />=]*/.exec(context.source);\n      const name = match[0];\n      if (nameSet.has(name)) {\n          emitError(context, 2 /* ErrorCodes.DUPLICATE_ATTRIBUTE */);\n      }\n      nameSet.add(name);\n      if (name[0] === '=') {\n          emitError(context, 19 /* ErrorCodes.UNEXPECTED_EQUALS_SIGN_BEFORE_ATTRIBUTE_NAME */);\n      }\n      {\n          const pattern = /[\"'<]/g;\n          let m;\n          while ((m = pattern.exec(name))) {\n              emitError(context, 17 /* ErrorCodes.UNEXPECTED_CHARACTER_IN_ATTRIBUTE_NAME */, m.index);\n          }\n      }\n      advanceBy(context, name.length);\n      // Value\n      let value = undefined;\n      if (/^[\\t\\r\\n\\f ]*=/.test(context.source)) {\n          advanceSpaces(context);\n          advanceBy(context, 1);\n          advanceSpaces(context);\n          value = parseAttributeValue(context);\n          if (!value) {\n              emitError(context, 13 /* ErrorCodes.MISSING_ATTRIBUTE_VALUE */);\n          }\n      }\n      const loc = getSelection(context, start);\n      if (!context.inVPre && /^(v-[A-Za-z0-9-]|:|\\.|@|#)/.test(name)) {\n          const match = /(?:^v-([a-z0-9-]+))?(?:(?::|^\\.|^@|^#)(\\[[^\\]]+\\]|[^\\.]+))?(.+)?$/i.exec(name);\n          let isPropShorthand = startsWith(name, '.');\n          let dirName = match[1] ||\n              (isPropShorthand || startsWith(name, ':')\n                  ? 'bind'\n                  : startsWith(name, '@')\n                      ? 'on'\n                      : 'slot');\n          let arg;\n          if (match[2]) {\n              const isSlot = dirName === 'slot';\n              const startOffset = name.lastIndexOf(match[2]);\n              const loc = getSelection(context, getNewPosition(context, start, startOffset), getNewPosition(context, start, startOffset + match[2].length + ((isSlot && match[3]) || '').length));\n              let content = match[2];\n              let isStatic = true;\n              if (content.startsWith('[')) {\n                  isStatic = false;\n                  if (!content.endsWith(']')) {\n                      emitError(context, 27 /* ErrorCodes.X_MISSING_DYNAMIC_DIRECTIVE_ARGUMENT_END */);\n                      content = content.slice(1);\n                  }\n                  else {\n                      content = content.slice(1, content.length - 1);\n                  }\n              }\n              else if (isSlot) {\n                  // #1241 special case for v-slot: vuetify relies extensively on slot\n                  // names containing dots. v-slot doesn't have any modifiers and Vue 2.x\n                  // supports such usage so we are keeping it consistent with 2.x.\n                  content += match[3] || '';\n              }\n              arg = {\n                  type: 4 /* NodeTypes.SIMPLE_EXPRESSION */,\n                  content,\n                  isStatic,\n                  constType: isStatic\n                      ? 3 /* ConstantTypes.CAN_STRINGIFY */\n                      : 0 /* ConstantTypes.NOT_CONSTANT */,\n                  loc\n              };\n          }\n          if (value && value.isQuoted) {\n              const valueLoc = value.loc;\n              valueLoc.start.offset++;\n              valueLoc.start.column++;\n              valueLoc.end = advancePositionWithClone(valueLoc.start, value.content);\n              valueLoc.source = valueLoc.source.slice(1, -1);\n          }\n          const modifiers = match[3] ? match[3].slice(1).split('.') : [];\n          if (isPropShorthand)\n              modifiers.push('prop');\n          // 2.x compat v-bind:foo.sync -> v-model:foo\n          if (dirName === 'bind' && arg) {\n              if (modifiers.includes('sync') &&\n                  checkCompatEnabled(\"COMPILER_V_BIND_SYNC\" /* CompilerDeprecationTypes.COMPILER_V_BIND_SYNC */, context, loc, arg.loc.source)) {\n                  dirName = 'model';\n                  modifiers.splice(modifiers.indexOf('sync'), 1);\n              }\n              if (modifiers.includes('prop')) {\n                  checkCompatEnabled(\"COMPILER_V_BIND_PROP\" /* CompilerDeprecationTypes.COMPILER_V_BIND_PROP */, context, loc);\n              }\n          }\n          return {\n              type: 7 /* NodeTypes.DIRECTIVE */,\n              name: dirName,\n              exp: value && {\n                  type: 4 /* NodeTypes.SIMPLE_EXPRESSION */,\n                  content: value.content,\n                  isStatic: false,\n                  // Treat as non-constant by default. This can be potentially set to\n                  // other values by `transformExpression` to make it eligible for hoisting.\n                  constType: 0 /* ConstantTypes.NOT_CONSTANT */,\n                  loc: value.loc\n              },\n              arg,\n              modifiers,\n              loc\n          };\n      }\n      // missing directive name or illegal directive name\n      if (!context.inVPre && startsWith(name, 'v-')) {\n          emitError(context, 26 /* ErrorCodes.X_MISSING_DIRECTIVE_NAME */);\n      }\n      return {\n          type: 6 /* NodeTypes.ATTRIBUTE */,\n          name,\n          value: value && {\n              type: 2 /* NodeTypes.TEXT */,\n              content: value.content,\n              loc: value.loc\n          },\n          loc\n      };\n  }\n  function parseAttributeValue(context) {\n      const start = getCursor(context);\n      let content;\n      const quote = context.source[0];\n      const isQuoted = quote === `\"` || quote === `'`;\n      if (isQuoted) {\n          // Quoted value.\n          advanceBy(context, 1);\n          const endIndex = context.source.indexOf(quote);\n          if (endIndex === -1) {\n              content = parseTextData(context, context.source.length, 4 /* TextModes.ATTRIBUTE_VALUE */);\n          }\n          else {\n              content = parseTextData(context, endIndex, 4 /* TextModes.ATTRIBUTE_VALUE */);\n              advanceBy(context, 1);\n          }\n      }\n      else {\n          // Unquoted\n          const match = /^[^\\t\\r\\n\\f >]+/.exec(context.source);\n          if (!match) {\n              return undefined;\n          }\n          const unexpectedChars = /[\"'<=`]/g;\n          let m;\n          while ((m = unexpectedChars.exec(match[0]))) {\n              emitError(context, 18 /* ErrorCodes.UNEXPECTED_CHARACTER_IN_UNQUOTED_ATTRIBUTE_VALUE */, m.index);\n          }\n          content = parseTextData(context, match[0].length, 4 /* TextModes.ATTRIBUTE_VALUE */);\n      }\n      return { content, isQuoted, loc: getSelection(context, start) };\n  }\n  function parseInterpolation(context, mode) {\n      const [open, close] = context.options.delimiters;\n      const closeIndex = context.source.indexOf(close, open.length);\n      if (closeIndex === -1) {\n          emitError(context, 25 /* ErrorCodes.X_MISSING_INTERPOLATION_END */);\n          return undefined;\n      }\n      const start = getCursor(context);\n      advanceBy(context, open.length);\n      const innerStart = getCursor(context);\n      const innerEnd = getCursor(context);\n      const rawContentLength = closeIndex - open.length;\n      const rawContent = context.source.slice(0, rawContentLength);\n      const preTrimContent = parseTextData(context, rawContentLength, mode);\n      const content = preTrimContent.trim();\n      const startOffset = preTrimContent.indexOf(content);\n      if (startOffset > 0) {\n          advancePositionWithMutation(innerStart, rawContent, startOffset);\n      }\n      const endOffset = rawContentLength - (preTrimContent.length - content.length - startOffset);\n      advancePositionWithMutation(innerEnd, rawContent, endOffset);\n      advanceBy(context, close.length);\n      return {\n          type: 5 /* NodeTypes.INTERPOLATION */,\n          content: {\n              type: 4 /* NodeTypes.SIMPLE_EXPRESSION */,\n              isStatic: false,\n              // Set `isConstant` to false by default and will decide in transformExpression\n              constType: 0 /* ConstantTypes.NOT_CONSTANT */,\n              content,\n              loc: getSelection(context, innerStart, innerEnd)\n          },\n          loc: getSelection(context, start)\n      };\n  }\n  function parseText(context, mode) {\n      const endTokens = mode === 3 /* TextModes.CDATA */ ? [']]>'] : ['<', context.options.delimiters[0]];\n      let endIndex = context.source.length;\n      for (let i = 0; i < endTokens.length; i++) {\n          const index = context.source.indexOf(endTokens[i], 1);\n          if (index !== -1 && endIndex > index) {\n              endIndex = index;\n          }\n      }\n      const start = getCursor(context);\n      const content = parseTextData(context, endIndex, mode);\n      return {\n          type: 2 /* NodeTypes.TEXT */,\n          content,\n          loc: getSelection(context, start)\n      };\n  }\n  /**\n   * Get text data with a given length from the current location.\n   * This translates HTML entities in the text data.\n   */\n  function parseTextData(context, length, mode) {\n      const rawText = context.source.slice(0, length);\n      advanceBy(context, length);\n      if (mode === 2 /* TextModes.RAWTEXT */ ||\n          mode === 3 /* TextModes.CDATA */ ||\n          !rawText.includes('&')) {\n          return rawText;\n      }\n      else {\n          // DATA or RCDATA containing \"&\"\". Entity decoding required.\n          return context.options.decodeEntities(rawText, mode === 4 /* TextModes.ATTRIBUTE_VALUE */);\n      }\n  }\n  function getCursor(context) {\n      const { column, line, offset } = context;\n      return { column, line, offset };\n  }\n  function getSelection(context, start, end) {\n      end = end || getCursor(context);\n      return {\n          start,\n          end,\n          source: context.originalSource.slice(start.offset, end.offset)\n      };\n  }\n  function last(xs) {\n      return xs[xs.length - 1];\n  }\n  function startsWith(source, searchString) {\n      return source.startsWith(searchString);\n  }\n  function advanceBy(context, numberOfCharacters) {\n      const { source } = context;\n      advancePositionWithMutation(context, source, numberOfCharacters);\n      context.source = source.slice(numberOfCharacters);\n  }\n  function advanceSpaces(context) {\n      const match = /^[\\t\\r\\n\\f ]+/.exec(context.source);\n      if (match) {\n          advanceBy(context, match[0].length);\n      }\n  }\n  function getNewPosition(context, start, numberOfCharacters) {\n      return advancePositionWithClone(start, context.originalSource.slice(start.offset, numberOfCharacters), numberOfCharacters);\n  }\n  function emitError(context, code, offset, loc = getCursor(context)) {\n      if (offset) {\n          loc.offset += offset;\n          loc.column += offset;\n      }\n      context.options.onError(createCompilerError(code, {\n          start: loc,\n          end: loc,\n          source: ''\n      }));\n  }\n  function isEnd(context, mode, ancestors) {\n      const s = context.source;\n      switch (mode) {\n          case 0 /* TextModes.DATA */:\n              if (startsWith(s, '</')) {\n                  // TODO: probably bad performance\n                  for (let i = ancestors.length - 1; i >= 0; --i) {\n                      if (startsWithEndTagOpen(s, ancestors[i].tag)) {\n                          return true;\n                      }\n                  }\n              }\n              break;\n          case 1 /* TextModes.RCDATA */:\n          case 2 /* TextModes.RAWTEXT */: {\n              const parent = last(ancestors);\n              if (parent && startsWithEndTagOpen(s, parent.tag)) {\n                  return true;\n              }\n              break;\n          }\n          case 3 /* TextModes.CDATA */:\n              if (startsWith(s, ']]>')) {\n                  return true;\n              }\n              break;\n      }\n      return !s;\n  }\n  function startsWithEndTagOpen(source, tag) {\n      return (startsWith(source, '</') &&\n          source.slice(2, 2 + tag.length).toLowerCase() === tag.toLowerCase() &&\n          /[\\t\\r\\n\\f />]/.test(source[2 + tag.length] || '>'));\n  }\n\n  function hoistStatic(root, context) {\n      walk(root, context, \n      // Root node is unfortunately non-hoistable due to potential parent\n      // fallthrough attributes.\n      isSingleElementRoot(root, root.children[0]));\n  }\n  function isSingleElementRoot(root, child) {\n      const { children } = root;\n      return (children.length === 1 &&\n          child.type === 1 /* NodeTypes.ELEMENT */ &&\n          !isSlotOutlet(child));\n  }\n  function walk(node, context, doNotHoistNode = false) {\n      const { children } = node;\n      const originalCount = children.length;\n      let hoistedCount = 0;\n      for (let i = 0; i < children.length; i++) {\n          const child = children[i];\n          // only plain elements & text calls are eligible for hoisting.\n          if (child.type === 1 /* NodeTypes.ELEMENT */ &&\n              child.tagType === 0 /* ElementTypes.ELEMENT */) {\n              const constantType = doNotHoistNode\n                  ? 0 /* ConstantTypes.NOT_CONSTANT */\n                  : getConstantType(child, context);\n              if (constantType > 0 /* ConstantTypes.NOT_CONSTANT */) {\n                  if (constantType >= 2 /* ConstantTypes.CAN_HOIST */) {\n                      child.codegenNode.patchFlag =\n                          -1 /* PatchFlags.HOISTED */ + (` /* HOISTED */` );\n                      child.codegenNode = context.hoist(child.codegenNode);\n                      hoistedCount++;\n                      continue;\n                  }\n              }\n              else {\n                  // node may contain dynamic children, but its props may be eligible for\n                  // hoisting.\n                  const codegenNode = child.codegenNode;\n                  if (codegenNode.type === 13 /* NodeTypes.VNODE_CALL */) {\n                      const flag = getPatchFlag(codegenNode);\n                      if ((!flag ||\n                          flag === 512 /* PatchFlags.NEED_PATCH */ ||\n                          flag === 1 /* PatchFlags.TEXT */) &&\n                          getGeneratedPropsConstantType(child, context) >=\n                              2 /* ConstantTypes.CAN_HOIST */) {\n                          const props = getNodeProps(child);\n                          if (props) {\n                              codegenNode.props = context.hoist(props);\n                          }\n                      }\n                      if (codegenNode.dynamicProps) {\n                          codegenNode.dynamicProps = context.hoist(codegenNode.dynamicProps);\n                      }\n                  }\n              }\n          }\n          // walk further\n          if (child.type === 1 /* NodeTypes.ELEMENT */) {\n              const isComponent = child.tagType === 1 /* ElementTypes.COMPONENT */;\n              if (isComponent) {\n                  context.scopes.vSlot++;\n              }\n              walk(child, context);\n              if (isComponent) {\n                  context.scopes.vSlot--;\n              }\n          }\n          else if (child.type === 11 /* NodeTypes.FOR */) {\n              // Do not hoist v-for single child because it has to be a block\n              walk(child, context, child.children.length === 1);\n          }\n          else if (child.type === 9 /* NodeTypes.IF */) {\n              for (let i = 0; i < child.branches.length; i++) {\n                  // Do not hoist v-if single child because it has to be a block\n                  walk(child.branches[i], context, child.branches[i].children.length === 1);\n              }\n          }\n      }\n      if (hoistedCount && context.transformHoist) {\n          context.transformHoist(children, context, node);\n      }\n      // all children were hoisted - the entire children array is hoistable.\n      if (hoistedCount &&\n          hoistedCount === originalCount &&\n          node.type === 1 /* NodeTypes.ELEMENT */ &&\n          node.tagType === 0 /* ElementTypes.ELEMENT */ &&\n          node.codegenNode &&\n          node.codegenNode.type === 13 /* NodeTypes.VNODE_CALL */ &&\n          isArray(node.codegenNode.children)) {\n          node.codegenNode.children = context.hoist(createArrayExpression(node.codegenNode.children));\n      }\n  }\n  function getConstantType(node, context) {\n      const { constantCache } = context;\n      switch (node.type) {\n          case 1 /* NodeTypes.ELEMENT */:\n              if (node.tagType !== 0 /* ElementTypes.ELEMENT */) {\n                  return 0 /* ConstantTypes.NOT_CONSTANT */;\n              }\n              const cached = constantCache.get(node);\n              if (cached !== undefined) {\n                  return cached;\n              }\n              const codegenNode = node.codegenNode;\n              if (codegenNode.type !== 13 /* NodeTypes.VNODE_CALL */) {\n                  return 0 /* ConstantTypes.NOT_CONSTANT */;\n              }\n              if (codegenNode.isBlock &&\n                  node.tag !== 'svg' &&\n                  node.tag !== 'foreignObject') {\n                  return 0 /* ConstantTypes.NOT_CONSTANT */;\n              }\n              const flag = getPatchFlag(codegenNode);\n              if (!flag) {\n                  let returnType = 3 /* ConstantTypes.CAN_STRINGIFY */;\n                  // Element itself has no patch flag. However we still need to check:\n                  // 1. Even for a node with no patch flag, it is possible for it to contain\n                  // non-hoistable expressions that refers to scope variables, e.g. compiler\n                  // injected keys or cached event handlers. Therefore we need to always\n                  // check the codegenNode's props to be sure.\n                  const generatedPropsType = getGeneratedPropsConstantType(node, context);\n                  if (generatedPropsType === 0 /* ConstantTypes.NOT_CONSTANT */) {\n                      constantCache.set(node, 0 /* ConstantTypes.NOT_CONSTANT */);\n                      return 0 /* ConstantTypes.NOT_CONSTANT */;\n                  }\n                  if (generatedPropsType < returnType) {\n                      returnType = generatedPropsType;\n                  }\n                  // 2. its children.\n                  for (let i = 0; i < node.children.length; i++) {\n                      const childType = getConstantType(node.children[i], context);\n                      if (childType === 0 /* ConstantTypes.NOT_CONSTANT */) {\n                          constantCache.set(node, 0 /* ConstantTypes.NOT_CONSTANT */);\n                          return 0 /* ConstantTypes.NOT_CONSTANT */;\n                      }\n                      if (childType < returnType) {\n                          returnType = childType;\n                      }\n                  }\n                  // 3. if the type is not already CAN_SKIP_PATCH which is the lowest non-0\n                  // type, check if any of the props can cause the type to be lowered\n                  // we can skip can_patch because it's guaranteed by the absence of a\n                  // patchFlag.\n                  if (returnType > 1 /* ConstantTypes.CAN_SKIP_PATCH */) {\n                      for (let i = 0; i < node.props.length; i++) {\n                          const p = node.props[i];\n                          if (p.type === 7 /* NodeTypes.DIRECTIVE */ && p.name === 'bind' && p.exp) {\n                              const expType = getConstantType(p.exp, context);\n                              if (expType === 0 /* ConstantTypes.NOT_CONSTANT */) {\n                                  constantCache.set(node, 0 /* ConstantTypes.NOT_CONSTANT */);\n                                  return 0 /* ConstantTypes.NOT_CONSTANT */;\n                              }\n                              if (expType < returnType) {\n                                  returnType = expType;\n                              }\n                          }\n                      }\n                  }\n                  // only svg/foreignObject could be block here, however if they are\n                  // static then they don't need to be blocks since there will be no\n                  // nested updates.\n                  if (codegenNode.isBlock) {\n                      // except set custom directives.\n                      for (let i = 0; i < node.props.length; i++) {\n                          const p = node.props[i];\n                          if (p.type === 7 /* NodeTypes.DIRECTIVE */) {\n                              constantCache.set(node, 0 /* ConstantTypes.NOT_CONSTANT */);\n                              return 0 /* ConstantTypes.NOT_CONSTANT */;\n                          }\n                      }\n                      context.removeHelper(OPEN_BLOCK);\n                      context.removeHelper(getVNodeBlockHelper(context.inSSR, codegenNode.isComponent));\n                      codegenNode.isBlock = false;\n                      context.helper(getVNodeHelper(context.inSSR, codegenNode.isComponent));\n                  }\n                  constantCache.set(node, returnType);\n                  return returnType;\n              }\n              else {\n                  constantCache.set(node, 0 /* ConstantTypes.NOT_CONSTANT */);\n                  return 0 /* ConstantTypes.NOT_CONSTANT */;\n              }\n          case 2 /* NodeTypes.TEXT */:\n          case 3 /* NodeTypes.COMMENT */:\n              return 3 /* ConstantTypes.CAN_STRINGIFY */;\n          case 9 /* NodeTypes.IF */:\n          case 11 /* NodeTypes.FOR */:\n          case 10 /* NodeTypes.IF_BRANCH */:\n              return 0 /* ConstantTypes.NOT_CONSTANT */;\n          case 5 /* NodeTypes.INTERPOLATION */:\n          case 12 /* NodeTypes.TEXT_CALL */:\n              return getConstantType(node.content, context);\n          case 4 /* NodeTypes.SIMPLE_EXPRESSION */:\n              return node.constType;\n          case 8 /* NodeTypes.COMPOUND_EXPRESSION */:\n              let returnType = 3 /* ConstantTypes.CAN_STRINGIFY */;\n              for (let i = 0; i < node.children.length; i++) {\n                  const child = node.children[i];\n                  if (isString(child) || isSymbol(child)) {\n                      continue;\n                  }\n                  const childType = getConstantType(child, context);\n                  if (childType === 0 /* ConstantTypes.NOT_CONSTANT */) {\n                      return 0 /* ConstantTypes.NOT_CONSTANT */;\n                  }\n                  else if (childType < returnType) {\n                      returnType = childType;\n                  }\n              }\n              return returnType;\n          default:\n              return 0 /* ConstantTypes.NOT_CONSTANT */;\n      }\n  }\n  const allowHoistedHelperSet = new Set([\n      NORMALIZE_CLASS,\n      NORMALIZE_STYLE,\n      NORMALIZE_PROPS,\n      GUARD_REACTIVE_PROPS\n  ]);\n  function getConstantTypeOfHelperCall(value, context) {\n      if (value.type === 14 /* NodeTypes.JS_CALL_EXPRESSION */ &&\n          !isString(value.callee) &&\n          allowHoistedHelperSet.has(value.callee)) {\n          const arg = value.arguments[0];\n          if (arg.type === 4 /* NodeTypes.SIMPLE_EXPRESSION */) {\n              return getConstantType(arg, context);\n          }\n          else if (arg.type === 14 /* NodeTypes.JS_CALL_EXPRESSION */) {\n              // in the case of nested helper call, e.g. `normalizeProps(guardReactiveProps(exp))`\n              return getConstantTypeOfHelperCall(arg, context);\n          }\n      }\n      return 0 /* ConstantTypes.NOT_CONSTANT */;\n  }\n  function getGeneratedPropsConstantType(node, context) {\n      let returnType = 3 /* ConstantTypes.CAN_STRINGIFY */;\n      const props = getNodeProps(node);\n      if (props && props.type === 15 /* NodeTypes.JS_OBJECT_EXPRESSION */) {\n          const { properties } = props;\n          for (let i = 0; i < properties.length; i++) {\n              const { key, value } = properties[i];\n              const keyType = getConstantType(key, context);\n              if (keyType === 0 /* ConstantTypes.NOT_CONSTANT */) {\n                  return keyType;\n              }\n              if (keyType < returnType) {\n                  returnType = keyType;\n              }\n              let valueType;\n              if (value.type === 4 /* NodeTypes.SIMPLE_EXPRESSION */) {\n                  valueType = getConstantType(value, context);\n              }\n              else if (value.type === 14 /* NodeTypes.JS_CALL_EXPRESSION */) {\n                  // some helper calls can be hoisted,\n                  // such as the `normalizeProps` generated by the compiler for pre-normalize class,\n                  // in this case we need to respect the ConstantType of the helper's arguments\n                  valueType = getConstantTypeOfHelperCall(value, context);\n              }\n              else {\n                  valueType = 0 /* ConstantTypes.NOT_CONSTANT */;\n              }\n              if (valueType === 0 /* ConstantTypes.NOT_CONSTANT */) {\n                  return valueType;\n              }\n              if (valueType < returnType) {\n                  returnType = valueType;\n              }\n          }\n      }\n      return returnType;\n  }\n  function getNodeProps(node) {\n      const codegenNode = node.codegenNode;\n      if (codegenNode.type === 13 /* NodeTypes.VNODE_CALL */) {\n          return codegenNode.props;\n      }\n  }\n  function getPatchFlag(node) {\n      const flag = node.patchFlag;\n      return flag ? parseInt(flag, 10) : undefined;\n  }\n\n  function createTransformContext(root, { filename = '', prefixIdentifiers = false, hoistStatic = false, cacheHandlers = false, nodeTransforms = [], directiveTransforms = {}, transformHoist = null, isBuiltInComponent = NOOP, isCustomElement = NOOP, expressionPlugins = [], scopeId = null, slotted = true, ssr = false, inSSR = false, ssrCssVars = ``, bindingMetadata = EMPTY_OBJ, inline = false, isTS = false, onError = defaultOnError, onWarn = defaultOnWarn, compatConfig }) {\n      const nameMatch = filename.replace(/\\?.*$/, '').match(/([^/\\\\]+)\\.\\w+$/);\n      const context = {\n          // options\n          selfName: nameMatch && capitalize(camelize(nameMatch[1])),\n          prefixIdentifiers,\n          hoistStatic,\n          cacheHandlers,\n          nodeTransforms,\n          directiveTransforms,\n          transformHoist,\n          isBuiltInComponent,\n          isCustomElement,\n          expressionPlugins,\n          scopeId,\n          slotted,\n          ssr,\n          inSSR,\n          ssrCssVars,\n          bindingMetadata,\n          inline,\n          isTS,\n          onError,\n          onWarn,\n          compatConfig,\n          // state\n          root,\n          helpers: new Map(),\n          components: new Set(),\n          directives: new Set(),\n          hoists: [],\n          imports: [],\n          constantCache: new Map(),\n          temps: 0,\n          cached: 0,\n          identifiers: Object.create(null),\n          scopes: {\n              vFor: 0,\n              vSlot: 0,\n              vPre: 0,\n              vOnce: 0\n          },\n          parent: null,\n          currentNode: root,\n          childIndex: 0,\n          inVOnce: false,\n          // methods\n          helper(name) {\n              const count = context.helpers.get(name) || 0;\n              context.helpers.set(name, count + 1);\n              return name;\n          },\n          removeHelper(name) {\n              const count = context.helpers.get(name);\n              if (count) {\n                  const currentCount = count - 1;\n                  if (!currentCount) {\n                      context.helpers.delete(name);\n                  }\n                  else {\n                      context.helpers.set(name, currentCount);\n                  }\n              }\n          },\n          helperString(name) {\n              return `_${helperNameMap[context.helper(name)]}`;\n          },\n          replaceNode(node) {\n              /* istanbul ignore if */\n              {\n                  if (!context.currentNode) {\n                      throw new Error(`Node being replaced is already removed.`);\n                  }\n                  if (!context.parent) {\n                      throw new Error(`Cannot replace root node.`);\n                  }\n              }\n              context.parent.children[context.childIndex] = context.currentNode = node;\n          },\n          removeNode(node) {\n              if (!context.parent) {\n                  throw new Error(`Cannot remove root node.`);\n              }\n              const list = context.parent.children;\n              const removalIndex = node\n                  ? list.indexOf(node)\n                  : context.currentNode\n                      ? context.childIndex\n                      : -1;\n              /* istanbul ignore if */\n              if (removalIndex < 0) {\n                  throw new Error(`node being removed is not a child of current parent`);\n              }\n              if (!node || node === context.currentNode) {\n                  // current node removed\n                  context.currentNode = null;\n                  context.onNodeRemoved();\n              }\n              else {\n                  // sibling node removed\n                  if (context.childIndex > removalIndex) {\n                      context.childIndex--;\n                      context.onNodeRemoved();\n                  }\n              }\n              context.parent.children.splice(removalIndex, 1);\n          },\n          onNodeRemoved: () => { },\n          addIdentifiers(exp) {\n          },\n          removeIdentifiers(exp) {\n          },\n          hoist(exp) {\n              if (isString(exp))\n                  exp = createSimpleExpression(exp);\n              context.hoists.push(exp);\n              const identifier = createSimpleExpression(`_hoisted_${context.hoists.length}`, false, exp.loc, 2 /* ConstantTypes.CAN_HOIST */);\n              identifier.hoisted = exp;\n              return identifier;\n          },\n          cache(exp, isVNode = false) {\n              return createCacheExpression(context.cached++, exp, isVNode);\n          }\n      };\n      {\n          context.filters = new Set();\n      }\n      return context;\n  }\n  function transform(root, options) {\n      const context = createTransformContext(root, options);\n      traverseNode(root, context);\n      if (options.hoistStatic) {\n          hoistStatic(root, context);\n      }\n      if (!options.ssr) {\n          createRootCodegen(root, context);\n      }\n      // finalize meta information\n      root.helpers = new Set([...context.helpers.keys()]);\n      root.components = [...context.components];\n      root.directives = [...context.directives];\n      root.imports = context.imports;\n      root.hoists = context.hoists;\n      root.temps = context.temps;\n      root.cached = context.cached;\n      {\n          root.filters = [...context.filters];\n      }\n  }\n  function createRootCodegen(root, context) {\n      const { helper } = context;\n      const { children } = root;\n      if (children.length === 1) {\n          const child = children[0];\n          // if the single child is an element, turn it into a block.\n          if (isSingleElementRoot(root, child) && child.codegenNode) {\n              // single element root is never hoisted so codegenNode will never be\n              // SimpleExpressionNode\n              const codegenNode = child.codegenNode;\n              if (codegenNode.type === 13 /* NodeTypes.VNODE_CALL */) {\n                  makeBlock(codegenNode, context);\n              }\n              root.codegenNode = codegenNode;\n          }\n          else {\n              // - single <slot/>, IfNode, ForNode: already blocks.\n              // - single text node: always patched.\n              // root codegen falls through via genNode()\n              root.codegenNode = child;\n          }\n      }\n      else if (children.length > 1) {\n          // root has multiple nodes - return a fragment block.\n          let patchFlag = 64 /* PatchFlags.STABLE_FRAGMENT */;\n          let patchFlagText = PatchFlagNames[64 /* PatchFlags.STABLE_FRAGMENT */];\n          // check if the fragment actually contains a single valid child with\n          // the rest being comments\n          if (children.filter(c => c.type !== 3 /* NodeTypes.COMMENT */).length === 1) {\n              patchFlag |= 2048 /* PatchFlags.DEV_ROOT_FRAGMENT */;\n              patchFlagText += `, ${PatchFlagNames[2048 /* PatchFlags.DEV_ROOT_FRAGMENT */]}`;\n          }\n          root.codegenNode = createVNodeCall(context, helper(FRAGMENT), undefined, root.children, patchFlag + (` /* ${patchFlagText} */` ), undefined, undefined, true, undefined, false /* isComponent */);\n      }\n      else ;\n  }\n  function traverseChildren(parent, context) {\n      let i = 0;\n      const nodeRemoved = () => {\n          i--;\n      };\n      for (; i < parent.children.length; i++) {\n          const child = parent.children[i];\n          if (isString(child))\n              continue;\n          context.parent = parent;\n          context.childIndex = i;\n          context.onNodeRemoved = nodeRemoved;\n          traverseNode(child, context);\n      }\n  }\n  function traverseNode(node, context) {\n      context.currentNode = node;\n      // apply transform plugins\n      const { nodeTransforms } = context;\n      const exitFns = [];\n      for (let i = 0; i < nodeTransforms.length; i++) {\n          const onExit = nodeTransforms[i](node, context);\n          if (onExit) {\n              if (isArray(onExit)) {\n                  exitFns.push(...onExit);\n              }\n              else {\n                  exitFns.push(onExit);\n              }\n          }\n          if (!context.currentNode) {\n              // node was removed\n              return;\n          }\n          else {\n              // node may have been replaced\n              node = context.currentNode;\n          }\n      }\n      switch (node.type) {\n          case 3 /* NodeTypes.COMMENT */:\n              if (!context.ssr) {\n                  // inject import for the Comment symbol, which is needed for creating\n                  // comment nodes with `createVNode`\n                  context.helper(CREATE_COMMENT);\n              }\n              break;\n          case 5 /* NodeTypes.INTERPOLATION */:\n              // no need to traverse, but we need to inject toString helper\n              if (!context.ssr) {\n                  context.helper(TO_DISPLAY_STRING);\n              }\n              break;\n          // for container types, further traverse downwards\n          case 9 /* NodeTypes.IF */:\n              for (let i = 0; i < node.branches.length; i++) {\n                  traverseNode(node.branches[i], context);\n              }\n              break;\n          case 10 /* NodeTypes.IF_BRANCH */:\n          case 11 /* NodeTypes.FOR */:\n          case 1 /* NodeTypes.ELEMENT */:\n          case 0 /* NodeTypes.ROOT */:\n              traverseChildren(node, context);\n              break;\n      }\n      // exit transforms\n      context.currentNode = node;\n      let i = exitFns.length;\n      while (i--) {\n          exitFns[i]();\n      }\n  }\n  function createStructuralDirectiveTransform(name, fn) {\n      const matches = isString(name)\n          ? (n) => n === name\n          : (n) => name.test(n);\n      return (node, context) => {\n          if (node.type === 1 /* NodeTypes.ELEMENT */) {\n              const { props } = node;\n              // structural directive transforms are not concerned with slots\n              // as they are handled separately in vSlot.ts\n              if (node.tagType === 3 /* ElementTypes.TEMPLATE */ && props.some(isVSlot)) {\n                  return;\n              }\n              const exitFns = [];\n              for (let i = 0; i < props.length; i++) {\n                  const prop = props[i];\n                  if (prop.type === 7 /* NodeTypes.DIRECTIVE */ && matches(prop.name)) {\n                      // structural directives are removed to avoid infinite recursion\n                      // also we remove them *before* applying so that it can further\n                      // traverse itself in case it moves the node around\n                      props.splice(i, 1);\n                      i--;\n                      const onExit = fn(node, prop, context);\n                      if (onExit)\n                          exitFns.push(onExit);\n                  }\n              }\n              return exitFns;\n          }\n      };\n  }\n\n  const PURE_ANNOTATION = `/*#__PURE__*/`;\n  const aliasHelper = (s) => `${helperNameMap[s]}: _${helperNameMap[s]}`;\n  function createCodegenContext(ast, { mode = 'function', prefixIdentifiers = mode === 'module', sourceMap = false, filename = `template.vue.html`, scopeId = null, optimizeImports = false, runtimeGlobalName = `Vue`, runtimeModuleName = `vue`, ssrRuntimeModuleName = 'vue/server-renderer', ssr = false, isTS = false, inSSR = false }) {\n      const context = {\n          mode,\n          prefixIdentifiers,\n          sourceMap,\n          filename,\n          scopeId,\n          optimizeImports,\n          runtimeGlobalName,\n          runtimeModuleName,\n          ssrRuntimeModuleName,\n          ssr,\n          isTS,\n          inSSR,\n          source: ast.loc.source,\n          code: ``,\n          column: 1,\n          line: 1,\n          offset: 0,\n          indentLevel: 0,\n          pure: false,\n          map: undefined,\n          helper(key) {\n              return `_${helperNameMap[key]}`;\n          },\n          push(code, node) {\n              context.code += code;\n          },\n          indent() {\n              newline(++context.indentLevel);\n          },\n          deindent(withoutNewLine = false) {\n              if (withoutNewLine) {\n                  --context.indentLevel;\n              }\n              else {\n                  newline(--context.indentLevel);\n              }\n          },\n          newline() {\n              newline(context.indentLevel);\n          }\n      };\n      function newline(n) {\n          context.push('\\n' + `  `.repeat(n));\n      }\n      return context;\n  }\n  function generate(ast, options = {}) {\n      const context = createCodegenContext(ast, options);\n      if (options.onContextCreated)\n          options.onContextCreated(context);\n      const { mode, push, prefixIdentifiers, indent, deindent, newline, scopeId, ssr } = context;\n      const helpers = Array.from(ast.helpers);\n      const hasHelpers = helpers.length > 0;\n      const useWithBlock = !prefixIdentifiers && mode !== 'module';\n      const isSetupInlined = !true ;\n      // preambles\n      // in setup() inline mode, the preamble is generated in a sub context\n      // and returned separately.\n      const preambleContext = isSetupInlined\n          ? createCodegenContext(ast, options)\n          : context;\n      {\n          genFunctionPreamble(ast, preambleContext);\n      }\n      // enter render function\n      const functionName = ssr ? `ssrRender` : `render`;\n      const args = ssr ? ['_ctx', '_push', '_parent', '_attrs'] : ['_ctx', '_cache'];\n      const signature = args.join(', ');\n      {\n          push(`function ${functionName}(${signature}) {`);\n      }\n      indent();\n      if (useWithBlock) {\n          push(`with (_ctx) {`);\n          indent();\n          // function mode const declarations should be inside with block\n          // also they should be renamed to avoid collision with user properties\n          if (hasHelpers) {\n              push(`const { ${helpers.map(aliasHelper).join(', ')} } = _Vue`);\n              push(`\\n`);\n              newline();\n          }\n      }\n      // generate asset resolution statements\n      if (ast.components.length) {\n          genAssets(ast.components, 'component', context);\n          if (ast.directives.length || ast.temps > 0) {\n              newline();\n          }\n      }\n      if (ast.directives.length) {\n          genAssets(ast.directives, 'directive', context);\n          if (ast.temps > 0) {\n              newline();\n          }\n      }\n      if (ast.filters && ast.filters.length) {\n          newline();\n          genAssets(ast.filters, 'filter', context);\n          newline();\n      }\n      if (ast.temps > 0) {\n          push(`let `);\n          for (let i = 0; i < ast.temps; i++) {\n              push(`${i > 0 ? `, ` : ``}_temp${i}`);\n          }\n      }\n      if (ast.components.length || ast.directives.length || ast.temps) {\n          push(`\\n`);\n          newline();\n      }\n      // generate the VNode tree expression\n      if (!ssr) {\n          push(`return `);\n      }\n      if (ast.codegenNode) {\n          genNode(ast.codegenNode, context);\n      }\n      else {\n          push(`null`);\n      }\n      if (useWithBlock) {\n          deindent();\n          push(`}`);\n      }\n      deindent();\n      push(`}`);\n      return {\n          ast,\n          code: context.code,\n          preamble: isSetupInlined ? preambleContext.code : ``,\n          // SourceMapGenerator does have toJSON() method but it's not in the types\n          map: context.map ? context.map.toJSON() : undefined\n      };\n  }\n  function genFunctionPreamble(ast, context) {\n      const { ssr, prefixIdentifiers, push, newline, runtimeModuleName, runtimeGlobalName, ssrRuntimeModuleName } = context;\n      const VueBinding = runtimeGlobalName;\n      // Generate const declaration for helpers\n      // In prefix mode, we place the const declaration at top so it's done\n      // only once; But if we not prefixing, we place the declaration inside the\n      // with block so it doesn't incur the `in` check cost for every helper access.\n      const helpers = Array.from(ast.helpers);\n      if (helpers.length > 0) {\n          {\n              // \"with\" mode.\n              // save Vue in a separate variable to avoid collision\n              push(`const _Vue = ${VueBinding}\\n`);\n              // in \"with\" mode, helpers are declared inside the with block to avoid\n              // has check cost, but hoists are lifted out of the function - we need\n              // to provide the helper here.\n              if (ast.hoists.length) {\n                  const staticHelpers = [\n                      CREATE_VNODE,\n                      CREATE_ELEMENT_VNODE,\n                      CREATE_COMMENT,\n                      CREATE_TEXT,\n                      CREATE_STATIC\n                  ]\n                      .filter(helper => helpers.includes(helper))\n                      .map(aliasHelper)\n                      .join(', ');\n                  push(`const { ${staticHelpers} } = _Vue\\n`);\n              }\n          }\n      }\n      genHoists(ast.hoists, context);\n      newline();\n      push(`return `);\n  }\n  function genAssets(assets, type, { helper, push, newline, isTS }) {\n      const resolver = helper(type === 'filter'\n          ? RESOLVE_FILTER\n          : type === 'component'\n              ? RESOLVE_COMPONENT\n              : RESOLVE_DIRECTIVE);\n      for (let i = 0; i < assets.length; i++) {\n          let id = assets[i];\n          // potential component implicit self-reference inferred from SFC filename\n          const maybeSelfReference = id.endsWith('__self');\n          if (maybeSelfReference) {\n              id = id.slice(0, -6);\n          }\n          push(`const ${toValidAssetId(id, type)} = ${resolver}(${JSON.stringify(id)}${maybeSelfReference ? `, true` : ``})${isTS ? `!` : ``}`);\n          if (i < assets.length - 1) {\n              newline();\n          }\n      }\n  }\n  function genHoists(hoists, context) {\n      if (!hoists.length) {\n          return;\n      }\n      context.pure = true;\n      const { push, newline, helper, scopeId, mode } = context;\n      newline();\n      for (let i = 0; i < hoists.length; i++) {\n          const exp = hoists[i];\n          if (exp) {\n              push(`const _hoisted_${i + 1} = ${``}`);\n              genNode(exp, context);\n              newline();\n          }\n      }\n      context.pure = false;\n  }\n  function isText(n) {\n      return (isString(n) ||\n          n.type === 4 /* NodeTypes.SIMPLE_EXPRESSION */ ||\n          n.type === 2 /* NodeTypes.TEXT */ ||\n          n.type === 5 /* NodeTypes.INTERPOLATION */ ||\n          n.type === 8 /* NodeTypes.COMPOUND_EXPRESSION */);\n  }\n  function genNodeListAsArray(nodes, context) {\n      const multilines = nodes.length > 3 ||\n          (nodes.some(n => isArray(n) || !isText(n)));\n      context.push(`[`);\n      multilines && context.indent();\n      genNodeList(nodes, context, multilines);\n      multilines && context.deindent();\n      context.push(`]`);\n  }\n  function genNodeList(nodes, context, multilines = false, comma = true) {\n      const { push, newline } = context;\n      for (let i = 0; i < nodes.length; i++) {\n          const node = nodes[i];\n          if (isString(node)) {\n              push(node);\n          }\n          else if (isArray(node)) {\n              genNodeListAsArray(node, context);\n          }\n          else {\n              genNode(node, context);\n          }\n          if (i < nodes.length - 1) {\n              if (multilines) {\n                  comma && push(',');\n                  newline();\n              }\n              else {\n                  comma && push(', ');\n              }\n          }\n      }\n  }\n  function genNode(node, context) {\n      if (isString(node)) {\n          context.push(node);\n          return;\n      }\n      if (isSymbol(node)) {\n          context.push(context.helper(node));\n          return;\n      }\n      switch (node.type) {\n          case 1 /* NodeTypes.ELEMENT */:\n          case 9 /* NodeTypes.IF */:\n          case 11 /* NodeTypes.FOR */:\n              assert(node.codegenNode != null, `Codegen node is missing for element/if/for node. ` +\n                      `Apply appropriate transforms first.`);\n              genNode(node.codegenNode, context);\n              break;\n          case 2 /* NodeTypes.TEXT */:\n              genText(node, context);\n              break;\n          case 4 /* NodeTypes.SIMPLE_EXPRESSION */:\n              genExpression(node, context);\n              break;\n          case 5 /* NodeTypes.INTERPOLATION */:\n              genInterpolation(node, context);\n              break;\n          case 12 /* NodeTypes.TEXT_CALL */:\n              genNode(node.codegenNode, context);\n              break;\n          case 8 /* NodeTypes.COMPOUND_EXPRESSION */:\n              genCompoundExpression(node, context);\n              break;\n          case 3 /* NodeTypes.COMMENT */:\n              genComment(node, context);\n              break;\n          case 13 /* NodeTypes.VNODE_CALL */:\n              genVNodeCall(node, context);\n              break;\n          case 14 /* NodeTypes.JS_CALL_EXPRESSION */:\n              genCallExpression(node, context);\n              break;\n          case 15 /* NodeTypes.JS_OBJECT_EXPRESSION */:\n              genObjectExpression(node, context);\n              break;\n          case 17 /* NodeTypes.JS_ARRAY_EXPRESSION */:\n              genArrayExpression(node, context);\n              break;\n          case 18 /* NodeTypes.JS_FUNCTION_EXPRESSION */:\n              genFunctionExpression(node, context);\n              break;\n          case 19 /* NodeTypes.JS_CONDITIONAL_EXPRESSION */:\n              genConditionalExpression(node, context);\n              break;\n          case 20 /* NodeTypes.JS_CACHE_EXPRESSION */:\n              genCacheExpression(node, context);\n              break;\n          case 21 /* NodeTypes.JS_BLOCK_STATEMENT */:\n              genNodeList(node.body, context, true, false);\n              break;\n          // SSR only types\n          case 22 /* NodeTypes.JS_TEMPLATE_LITERAL */:\n              break;\n          case 23 /* NodeTypes.JS_IF_STATEMENT */:\n              break;\n          case 24 /* NodeTypes.JS_ASSIGNMENT_EXPRESSION */:\n              break;\n          case 25 /* NodeTypes.JS_SEQUENCE_EXPRESSION */:\n              break;\n          case 26 /* NodeTypes.JS_RETURN_STATEMENT */:\n              break;\n          /* istanbul ignore next */\n          case 10 /* NodeTypes.IF_BRANCH */:\n              // noop\n              break;\n          default:\n              {\n                  assert(false, `unhandled codegen node type: ${node.type}`);\n                  // make sure we exhaust all possible types\n                  const exhaustiveCheck = node;\n                  return exhaustiveCheck;\n              }\n      }\n  }\n  function genText(node, context) {\n      context.push(JSON.stringify(node.content), node);\n  }\n  function genExpression(node, context) {\n      const { content, isStatic } = node;\n      context.push(isStatic ? JSON.stringify(content) : content, node);\n  }\n  function genInterpolation(node, context) {\n      const { push, helper, pure } = context;\n      if (pure)\n          push(PURE_ANNOTATION);\n      push(`${helper(TO_DISPLAY_STRING)}(`);\n      genNode(node.content, context);\n      push(`)`);\n  }\n  function genCompoundExpression(node, context) {\n      for (let i = 0; i < node.children.length; i++) {\n          const child = node.children[i];\n          if (isString(child)) {\n              context.push(child);\n          }\n          else {\n              genNode(child, context);\n          }\n      }\n  }\n  function genExpressionAsPropertyKey(node, context) {\n      const { push } = context;\n      if (node.type === 8 /* NodeTypes.COMPOUND_EXPRESSION */) {\n          push(`[`);\n          genCompoundExpression(node, context);\n          push(`]`);\n      }\n      else if (node.isStatic) {\n          // only quote keys if necessary\n          const text = isSimpleIdentifier(node.content)\n              ? node.content\n              : JSON.stringify(node.content);\n          push(text, node);\n      }\n      else {\n          push(`[${node.content}]`, node);\n      }\n  }\n  function genComment(node, context) {\n      const { push, helper, pure } = context;\n      if (pure) {\n          push(PURE_ANNOTATION);\n      }\n      push(`${helper(CREATE_COMMENT)}(${JSON.stringify(node.content)})`, node);\n  }\n  function genVNodeCall(node, context) {\n      const { push, helper, pure } = context;\n      const { tag, props, children, patchFlag, dynamicProps, directives, isBlock, disableTracking, isComponent } = node;\n      if (directives) {\n          push(helper(WITH_DIRECTIVES) + `(`);\n      }\n      if (isBlock) {\n          push(`(${helper(OPEN_BLOCK)}(${disableTracking ? `true` : ``}), `);\n      }\n      if (pure) {\n          push(PURE_ANNOTATION);\n      }\n      const callHelper = isBlock\n          ? getVNodeBlockHelper(context.inSSR, isComponent)\n          : getVNodeHelper(context.inSSR, isComponent);\n      push(helper(callHelper) + `(`, node);\n      genNodeList(genNullableArgs([tag, props, children, patchFlag, dynamicProps]), context);\n      push(`)`);\n      if (isBlock) {\n          push(`)`);\n      }\n      if (directives) {\n          push(`, `);\n          genNode(directives, context);\n          push(`)`);\n      }\n  }\n  function genNullableArgs(args) {\n      let i = args.length;\n      while (i--) {\n          if (args[i] != null)\n              break;\n      }\n      return args.slice(0, i + 1).map(arg => arg || `null`);\n  }\n  // JavaScript\n  function genCallExpression(node, context) {\n      const { push, helper, pure } = context;\n      const callee = isString(node.callee) ? node.callee : helper(node.callee);\n      if (pure) {\n          push(PURE_ANNOTATION);\n      }\n      push(callee + `(`, node);\n      genNodeList(node.arguments, context);\n      push(`)`);\n  }\n  function genObjectExpression(node, context) {\n      const { push, indent, deindent, newline } = context;\n      const { properties } = node;\n      if (!properties.length) {\n          push(`{}`, node);\n          return;\n      }\n      const multilines = properties.length > 1 ||\n          (properties.some(p => p.value.type !== 4 /* NodeTypes.SIMPLE_EXPRESSION */));\n      push(multilines ? `{` : `{ `);\n      multilines && indent();\n      for (let i = 0; i < properties.length; i++) {\n          const { key, value } = properties[i];\n          // key\n          genExpressionAsPropertyKey(key, context);\n          push(`: `);\n          // value\n          genNode(value, context);\n          if (i < properties.length - 1) {\n              // will only reach this if it's multilines\n              push(`,`);\n              newline();\n          }\n      }\n      multilines && deindent();\n      push(multilines ? `}` : ` }`);\n  }\n  function genArrayExpression(node, context) {\n      genNodeListAsArray(node.elements, context);\n  }\n  function genFunctionExpression(node, context) {\n      const { push, indent, deindent } = context;\n      const { params, returns, body, newline, isSlot } = node;\n      if (isSlot) {\n          // wrap slot functions with owner context\n          push(`_${helperNameMap[WITH_CTX]}(`);\n      }\n      push(`(`, node);\n      if (isArray(params)) {\n          genNodeList(params, context);\n      }\n      else if (params) {\n          genNode(params, context);\n      }\n      push(`) => `);\n      if (newline || body) {\n          push(`{`);\n          indent();\n      }\n      if (returns) {\n          if (newline) {\n              push(`return `);\n          }\n          if (isArray(returns)) {\n              genNodeListAsArray(returns, context);\n          }\n          else {\n              genNode(returns, context);\n          }\n      }\n      else if (body) {\n          genNode(body, context);\n      }\n      if (newline || body) {\n          deindent();\n          push(`}`);\n      }\n      if (isSlot) {\n          if (node.isNonScopedSlot) {\n              push(`, undefined, true`);\n          }\n          push(`)`);\n      }\n  }\n  function genConditionalExpression(node, context) {\n      const { test, consequent, alternate, newline: needNewline } = node;\n      const { push, indent, deindent, newline } = context;\n      if (test.type === 4 /* NodeTypes.SIMPLE_EXPRESSION */) {\n          const needsParens = !isSimpleIdentifier(test.content);\n          needsParens && push(`(`);\n          genExpression(test, context);\n          needsParens && push(`)`);\n      }\n      else {\n          push(`(`);\n          genNode(test, context);\n          push(`)`);\n      }\n      needNewline && indent();\n      context.indentLevel++;\n      needNewline || push(` `);\n      push(`? `);\n      genNode(consequent, context);\n      context.indentLevel--;\n      needNewline && newline();\n      needNewline || push(` `);\n      push(`: `);\n      const isNested = alternate.type === 19 /* NodeTypes.JS_CONDITIONAL_EXPRESSION */;\n      if (!isNested) {\n          context.indentLevel++;\n      }\n      genNode(alternate, context);\n      if (!isNested) {\n          context.indentLevel--;\n      }\n      needNewline && deindent(true /* without newline */);\n  }\n  function genCacheExpression(node, context) {\n      const { push, helper, indent, deindent, newline } = context;\n      push(`_cache[${node.index}] || (`);\n      if (node.isVNode) {\n          indent();\n          push(`${helper(SET_BLOCK_TRACKING)}(-1),`);\n          newline();\n      }\n      push(`_cache[${node.index}] = `);\n      genNode(node.value, context);\n      if (node.isVNode) {\n          push(`,`);\n          newline();\n          push(`${helper(SET_BLOCK_TRACKING)}(1),`);\n          newline();\n          push(`_cache[${node.index}]`);\n          deindent();\n      }\n      push(`)`);\n  }\n\n  function walkIdentifiers(root, onIdentifier, includeAll = false, parentStack = [], knownIds = Object.create(null)) {\n      {\n          return;\n      }\n  }\n  function isReferencedIdentifier(id, parent, parentStack) {\n      {\n          return false;\n      }\n  }\n  function isInDestructureAssignment(parent, parentStack) {\n      if (parent &&\n          (parent.type === 'ObjectProperty' || parent.type === 'ArrayPattern')) {\n          let i = parentStack.length;\n          while (i--) {\n              const p = parentStack[i];\n              if (p.type === 'AssignmentExpression') {\n                  return true;\n              }\n              else if (p.type !== 'ObjectProperty' && !p.type.endsWith('Pattern')) {\n                  break;\n              }\n          }\n      }\n      return false;\n  }\n  function walkFunctionParams(node, onIdent) {\n      for (const p of node.params) {\n          for (const id of extractIdentifiers(p)) {\n              onIdent(id);\n          }\n      }\n  }\n  function walkBlockDeclarations(block, onIdent) {\n      for (const stmt of block.body) {\n          if (stmt.type === 'VariableDeclaration') {\n              if (stmt.declare)\n                  continue;\n              for (const decl of stmt.declarations) {\n                  for (const id of extractIdentifiers(decl.id)) {\n                      onIdent(id);\n                  }\n              }\n          }\n          else if (stmt.type === 'FunctionDeclaration' ||\n              stmt.type === 'ClassDeclaration') {\n              if (stmt.declare || !stmt.id)\n                  continue;\n              onIdent(stmt.id);\n          }\n      }\n  }\n  function extractIdentifiers(param, nodes = []) {\n      switch (param.type) {\n          case 'Identifier':\n              nodes.push(param);\n              break;\n          case 'MemberExpression':\n              let object = param;\n              while (object.type === 'MemberExpression') {\n                  object = object.object;\n              }\n              nodes.push(object);\n              break;\n          case 'ObjectPattern':\n              for (const prop of param.properties) {\n                  if (prop.type === 'RestElement') {\n                      extractIdentifiers(prop.argument, nodes);\n                  }\n                  else {\n                      extractIdentifiers(prop.value, nodes);\n                  }\n              }\n              break;\n          case 'ArrayPattern':\n              param.elements.forEach(element => {\n                  if (element)\n                      extractIdentifiers(element, nodes);\n              });\n              break;\n          case 'RestElement':\n              extractIdentifiers(param.argument, nodes);\n              break;\n          case 'AssignmentPattern':\n              extractIdentifiers(param.left, nodes);\n              break;\n      }\n      return nodes;\n  }\n  const isFunctionType = (node) => {\n      return /Function(?:Expression|Declaration)$|Method$/.test(node.type);\n  };\n  const isStaticProperty = (node) => node &&\n      (node.type === 'ObjectProperty' || node.type === 'ObjectMethod') &&\n      !node.computed;\n  const isStaticPropertyKey = (node, parent) => isStaticProperty(parent) && parent.key === node;\n\n  // these keywords should not appear inside expressions, but operators like\n  // 'typeof', 'instanceof', and 'in' are allowed\n  const prohibitedKeywordRE = new RegExp('\\\\b' +\n      ('arguments,await,break,case,catch,class,const,continue,debugger,default,' +\n          'delete,do,else,export,extends,finally,for,function,if,import,let,new,' +\n          'return,super,switch,throw,try,var,void,while,with,yield')\n          .split(',')\n          .join('\\\\b|\\\\b') +\n      '\\\\b');\n  // strip strings in expressions\n  const stripStringRE = /'(?:[^'\\\\]|\\\\.)*'|\"(?:[^\"\\\\]|\\\\.)*\"|`(?:[^`\\\\]|\\\\.)*\\$\\{|\\}(?:[^`\\\\]|\\\\.)*`|`(?:[^`\\\\]|\\\\.)*`/g;\n  /**\n   * Validate a non-prefixed expression.\n   * This is only called when using the in-browser runtime compiler since it\n   * doesn't prefix expressions.\n   */\n  function validateBrowserExpression(node, context, asParams = false, asRawStatements = false) {\n      const exp = node.content;\n      // empty expressions are validated per-directive since some directives\n      // do allow empty expressions.\n      if (!exp.trim()) {\n          return;\n      }\n      try {\n          new Function(asRawStatements\n              ? ` ${exp} `\n              : `return ${asParams ? `(${exp}) => {}` : `(${exp})`}`);\n      }\n      catch (e) {\n          let message = e.message;\n          const keywordMatch = exp\n              .replace(stripStringRE, '')\n              .match(prohibitedKeywordRE);\n          if (keywordMatch) {\n              message = `avoid using JavaScript keyword as property name: \"${keywordMatch[0]}\"`;\n          }\n          context.onError(createCompilerError(45 /* ErrorCodes.X_INVALID_EXPRESSION */, node.loc, undefined, message));\n      }\n  }\n\n  const transformExpression = (node, context) => {\n      if (node.type === 5 /* NodeTypes.INTERPOLATION */) {\n          node.content = processExpression(node.content, context);\n      }\n      else if (node.type === 1 /* NodeTypes.ELEMENT */) {\n          // handle directives on element\n          for (let i = 0; i < node.props.length; i++) {\n              const dir = node.props[i];\n              // do not process for v-on & v-for since they are special handled\n              if (dir.type === 7 /* NodeTypes.DIRECTIVE */ && dir.name !== 'for') {\n                  const exp = dir.exp;\n                  const arg = dir.arg;\n                  // do not process exp if this is v-on:arg - we need special handling\n                  // for wrapping inline statements.\n                  if (exp &&\n                      exp.type === 4 /* NodeTypes.SIMPLE_EXPRESSION */ &&\n                      !(dir.name === 'on' && arg)) {\n                      dir.exp = processExpression(exp, context, \n                      // slot args must be processed as function params\n                      dir.name === 'slot');\n                  }\n                  if (arg && arg.type === 4 /* NodeTypes.SIMPLE_EXPRESSION */ && !arg.isStatic) {\n                      dir.arg = processExpression(arg, context);\n                  }\n              }\n          }\n      }\n  };\n  // Important: since this function uses Node.js only dependencies, it should\n  // always be used with a leading !true check so that it can be\n  // tree-shaken from the browser build.\n  function processExpression(node, context, \n  // some expressions like v-slot props & v-for aliases should be parsed as\n  // function params\n  asParams = false, \n  // v-on handler values may contain multiple statements\n  asRawStatements = false, localVars = Object.create(context.identifiers)) {\n      {\n          {\n              // simple in-browser validation (same logic in 2.x)\n              validateBrowserExpression(node, context, asParams, asRawStatements);\n          }\n          return node;\n      }\n  }\n  function stringifyExpression(exp) {\n      if (isString(exp)) {\n          return exp;\n      }\n      else if (exp.type === 4 /* NodeTypes.SIMPLE_EXPRESSION */) {\n          return exp.content;\n      }\n      else {\n          return exp.children\n              .map(stringifyExpression)\n              .join('');\n      }\n  }\n\n  const transformIf = createStructuralDirectiveTransform(/^(if|else|else-if)$/, (node, dir, context) => {\n      return processIf(node, dir, context, (ifNode, branch, isRoot) => {\n          // #1587: We need to dynamically increment the key based on the current\n          // node's sibling nodes, since chained v-if/else branches are\n          // rendered at the same depth\n          const siblings = context.parent.children;\n          let i = siblings.indexOf(ifNode);\n          let key = 0;\n          while (i-- >= 0) {\n              const sibling = siblings[i];\n              if (sibling && sibling.type === 9 /* NodeTypes.IF */) {\n                  key += sibling.branches.length;\n              }\n          }\n          // Exit callback. Complete the codegenNode when all children have been\n          // transformed.\n          return () => {\n              if (isRoot) {\n                  ifNode.codegenNode = createCodegenNodeForBranch(branch, key, context);\n              }\n              else {\n                  // attach this branch's codegen node to the v-if root.\n                  const parentCondition = getParentCondition(ifNode.codegenNode);\n                  parentCondition.alternate = createCodegenNodeForBranch(branch, key + ifNode.branches.length - 1, context);\n              }\n          };\n      });\n  });\n  // target-agnostic transform used for both Client and SSR\n  function processIf(node, dir, context, processCodegen) {\n      if (dir.name !== 'else' &&\n          (!dir.exp || !dir.exp.content.trim())) {\n          const loc = dir.exp ? dir.exp.loc : node.loc;\n          context.onError(createCompilerError(28 /* ErrorCodes.X_V_IF_NO_EXPRESSION */, dir.loc));\n          dir.exp = createSimpleExpression(`true`, false, loc);\n      }\n      if (dir.exp) {\n          validateBrowserExpression(dir.exp, context);\n      }\n      if (dir.name === 'if') {\n          const branch = createIfBranch(node, dir);\n          const ifNode = {\n              type: 9 /* NodeTypes.IF */,\n              loc: node.loc,\n              branches: [branch]\n          };\n          context.replaceNode(ifNode);\n          if (processCodegen) {\n              return processCodegen(ifNode, branch, true);\n          }\n      }\n      else {\n          // locate the adjacent v-if\n          const siblings = context.parent.children;\n          const comments = [];\n          let i = siblings.indexOf(node);\n          while (i-- >= -1) {\n              const sibling = siblings[i];\n              if (sibling && sibling.type === 3 /* NodeTypes.COMMENT */) {\n                  context.removeNode(sibling);\n                  comments.unshift(sibling);\n                  continue;\n              }\n              if (sibling &&\n                  sibling.type === 2 /* NodeTypes.TEXT */ &&\n                  !sibling.content.trim().length) {\n                  context.removeNode(sibling);\n                  continue;\n              }\n              if (sibling && sibling.type === 9 /* NodeTypes.IF */) {\n                  // Check if v-else was followed by v-else-if\n                  if (dir.name === 'else-if' &&\n                      sibling.branches[sibling.branches.length - 1].condition === undefined) {\n                      context.onError(createCompilerError(30 /* ErrorCodes.X_V_ELSE_NO_ADJACENT_IF */, node.loc));\n                  }\n                  // move the node to the if node's branches\n                  context.removeNode();\n                  const branch = createIfBranch(node, dir);\n                  if (comments.length &&\n                      // #3619 ignore comments if the v-if is direct child of <transition>\n                      !(context.parent &&\n                          context.parent.type === 1 /* NodeTypes.ELEMENT */ &&\n                          isBuiltInType(context.parent.tag, 'transition'))) {\n                      branch.children = [...comments, ...branch.children];\n                  }\n                  // check if user is forcing same key on different branches\n                  {\n                      const key = branch.userKey;\n                      if (key) {\n                          sibling.branches.forEach(({ userKey }) => {\n                              if (isSameKey(userKey, key)) {\n                                  context.onError(createCompilerError(29 /* ErrorCodes.X_V_IF_SAME_KEY */, branch.userKey.loc));\n                              }\n                          });\n                      }\n                  }\n                  sibling.branches.push(branch);\n                  const onExit = processCodegen && processCodegen(sibling, branch, false);\n                  // since the branch was removed, it will not be traversed.\n                  // make sure to traverse here.\n                  traverseNode(branch, context);\n                  // call on exit\n                  if (onExit)\n                      onExit();\n                  // make sure to reset currentNode after traversal to indicate this\n                  // node has been removed.\n                  context.currentNode = null;\n              }\n              else {\n                  context.onError(createCompilerError(30 /* ErrorCodes.X_V_ELSE_NO_ADJACENT_IF */, node.loc));\n              }\n              break;\n          }\n      }\n  }\n  function createIfBranch(node, dir) {\n      const isTemplateIf = node.tagType === 3 /* ElementTypes.TEMPLATE */;\n      return {\n          type: 10 /* NodeTypes.IF_BRANCH */,\n          loc: node.loc,\n          condition: dir.name === 'else' ? undefined : dir.exp,\n          children: isTemplateIf && !findDir(node, 'for') ? node.children : [node],\n          userKey: findProp(node, `key`),\n          isTemplateIf\n      };\n  }\n  function createCodegenNodeForBranch(branch, keyIndex, context) {\n      if (branch.condition) {\n          return createConditionalExpression(branch.condition, createChildrenCodegenNode(branch, keyIndex, context), \n          // make sure to pass in asBlock: true so that the comment node call\n          // closes the current block.\n          createCallExpression(context.helper(CREATE_COMMENT), [\n              '\"v-if\"' ,\n              'true'\n          ]));\n      }\n      else {\n          return createChildrenCodegenNode(branch, keyIndex, context);\n      }\n  }\n  function createChildrenCodegenNode(branch, keyIndex, context) {\n      const { helper } = context;\n      const keyProperty = createObjectProperty(`key`, createSimpleExpression(`${keyIndex}`, false, locStub, 2 /* ConstantTypes.CAN_HOIST */));\n      const { children } = branch;\n      const firstChild = children[0];\n      const needFragmentWrapper = children.length !== 1 || firstChild.type !== 1 /* NodeTypes.ELEMENT */;\n      if (needFragmentWrapper) {\n          if (children.length === 1 && firstChild.type === 11 /* NodeTypes.FOR */) {\n              // optimize away nested fragments when child is a ForNode\n              const vnodeCall = firstChild.codegenNode;\n              injectProp(vnodeCall, keyProperty, context);\n              return vnodeCall;\n          }\n          else {\n              let patchFlag = 64 /* PatchFlags.STABLE_FRAGMENT */;\n              let patchFlagText = PatchFlagNames[64 /* PatchFlags.STABLE_FRAGMENT */];\n              // check if the fragment actually contains a single valid child with\n              // the rest being comments\n              if (!branch.isTemplateIf &&\n                  children.filter(c => c.type !== 3 /* NodeTypes.COMMENT */).length === 1) {\n                  patchFlag |= 2048 /* PatchFlags.DEV_ROOT_FRAGMENT */;\n                  patchFlagText += `, ${PatchFlagNames[2048 /* PatchFlags.DEV_ROOT_FRAGMENT */]}`;\n              }\n              return createVNodeCall(context, helper(FRAGMENT), createObjectExpression([keyProperty]), children, patchFlag + (` /* ${patchFlagText} */` ), undefined, undefined, true, false, false /* isComponent */, branch.loc);\n          }\n      }\n      else {\n          const ret = firstChild.codegenNode;\n          const vnodeCall = getMemoedVNodeCall(ret);\n          // Change createVNode to createBlock.\n          if (vnodeCall.type === 13 /* NodeTypes.VNODE_CALL */) {\n              makeBlock(vnodeCall, context);\n          }\n          // inject branch key\n          injectProp(vnodeCall, keyProperty, context);\n          return ret;\n      }\n  }\n  function isSameKey(a, b) {\n      if (!a || a.type !== b.type) {\n          return false;\n      }\n      if (a.type === 6 /* NodeTypes.ATTRIBUTE */) {\n          if (a.value.content !== b.value.content) {\n              return false;\n          }\n      }\n      else {\n          // directive\n          const exp = a.exp;\n          const branchExp = b.exp;\n          if (exp.type !== branchExp.type) {\n              return false;\n          }\n          if (exp.type !== 4 /* NodeTypes.SIMPLE_EXPRESSION */ ||\n              exp.isStatic !== branchExp.isStatic ||\n              exp.content !== branchExp.content) {\n              return false;\n          }\n      }\n      return true;\n  }\n  function getParentCondition(node) {\n      while (true) {\n          if (node.type === 19 /* NodeTypes.JS_CONDITIONAL_EXPRESSION */) {\n              if (node.alternate.type === 19 /* NodeTypes.JS_CONDITIONAL_EXPRESSION */) {\n                  node = node.alternate;\n              }\n              else {\n                  return node;\n              }\n          }\n          else if (node.type === 20 /* NodeTypes.JS_CACHE_EXPRESSION */) {\n              node = node.value;\n          }\n      }\n  }\n\n  const transformFor = createStructuralDirectiveTransform('for', (node, dir, context) => {\n      const { helper, removeHelper } = context;\n      return processFor(node, dir, context, forNode => {\n          // create the loop render function expression now, and add the\n          // iterator on exit after all children have been traversed\n          const renderExp = createCallExpression(helper(RENDER_LIST), [\n              forNode.source\n          ]);\n          const isTemplate = isTemplateNode(node);\n          const memo = findDir(node, 'memo');\n          const keyProp = findProp(node, `key`);\n          const keyExp = keyProp &&\n              (keyProp.type === 6 /* NodeTypes.ATTRIBUTE */\n                  ? createSimpleExpression(keyProp.value.content, true)\n                  : keyProp.exp);\n          const keyProperty = keyProp ? createObjectProperty(`key`, keyExp) : null;\n          const isStableFragment = forNode.source.type === 4 /* NodeTypes.SIMPLE_EXPRESSION */ &&\n              forNode.source.constType > 0 /* ConstantTypes.NOT_CONSTANT */;\n          const fragmentFlag = isStableFragment\n              ? 64 /* PatchFlags.STABLE_FRAGMENT */\n              : keyProp\n                  ? 128 /* PatchFlags.KEYED_FRAGMENT */\n                  : 256 /* PatchFlags.UNKEYED_FRAGMENT */;\n          forNode.codegenNode = createVNodeCall(context, helper(FRAGMENT), undefined, renderExp, fragmentFlag +\n              (` /* ${PatchFlagNames[fragmentFlag]} */` ), undefined, undefined, true /* isBlock */, !isStableFragment /* disableTracking */, false /* isComponent */, node.loc);\n          return () => {\n              // finish the codegen now that all children have been traversed\n              let childBlock;\n              const { children } = forNode;\n              // check <template v-for> key placement\n              if (isTemplate) {\n                  node.children.some(c => {\n                      if (c.type === 1 /* NodeTypes.ELEMENT */) {\n                          const key = findProp(c, 'key');\n                          if (key) {\n                              context.onError(createCompilerError(33 /* ErrorCodes.X_V_FOR_TEMPLATE_KEY_PLACEMENT */, key.loc));\n                              return true;\n                          }\n                      }\n                  });\n              }\n              const needFragmentWrapper = children.length !== 1 || children[0].type !== 1 /* NodeTypes.ELEMENT */;\n              const slotOutlet = isSlotOutlet(node)\n                  ? node\n                  : isTemplate &&\n                      node.children.length === 1 &&\n                      isSlotOutlet(node.children[0])\n                      ? node.children[0] // api-extractor somehow fails to infer this\n                      : null;\n              if (slotOutlet) {\n                  // <slot v-for=\"...\"> or <template v-for=\"...\"><slot/></template>\n                  childBlock = slotOutlet.codegenNode;\n                  if (isTemplate && keyProperty) {\n                      // <template v-for=\"...\" :key=\"...\"><slot/></template>\n                      // we need to inject the key to the renderSlot() call.\n                      // the props for renderSlot is passed as the 3rd argument.\n                      injectProp(childBlock, keyProperty, context);\n                  }\n              }\n              else if (needFragmentWrapper) {\n                  // <template v-for=\"...\"> with text or multi-elements\n                  // should generate a fragment block for each loop\n                  childBlock = createVNodeCall(context, helper(FRAGMENT), keyProperty ? createObjectExpression([keyProperty]) : undefined, node.children, 64 /* PatchFlags.STABLE_FRAGMENT */ +\n                      (` /* ${PatchFlagNames[64 /* PatchFlags.STABLE_FRAGMENT */]} */`\n                          ), undefined, undefined, true, undefined, false /* isComponent */);\n              }\n              else {\n                  // Normal element v-for. Directly use the child's codegenNode\n                  // but mark it as a block.\n                  childBlock = children[0]\n                      .codegenNode;\n                  if (isTemplate && keyProperty) {\n                      injectProp(childBlock, keyProperty, context);\n                  }\n                  if (childBlock.isBlock !== !isStableFragment) {\n                      if (childBlock.isBlock) {\n                          // switch from block to vnode\n                          removeHelper(OPEN_BLOCK);\n                          removeHelper(getVNodeBlockHelper(context.inSSR, childBlock.isComponent));\n                      }\n                      else {\n                          // switch from vnode to block\n                          removeHelper(getVNodeHelper(context.inSSR, childBlock.isComponent));\n                      }\n                  }\n                  childBlock.isBlock = !isStableFragment;\n                  if (childBlock.isBlock) {\n                      helper(OPEN_BLOCK);\n                      helper(getVNodeBlockHelper(context.inSSR, childBlock.isComponent));\n                  }\n                  else {\n                      helper(getVNodeHelper(context.inSSR, childBlock.isComponent));\n                  }\n              }\n              if (memo) {\n                  const loop = createFunctionExpression(createForLoopParams(forNode.parseResult, [\n                      createSimpleExpression(`_cached`)\n                  ]));\n                  loop.body = createBlockStatement([\n                      createCompoundExpression([`const _memo = (`, memo.exp, `)`]),\n                      createCompoundExpression([\n                          `if (_cached`,\n                          ...(keyExp ? [` && _cached.key === `, keyExp] : []),\n                          ` && ${context.helperString(IS_MEMO_SAME)}(_cached, _memo)) return _cached`\n                      ]),\n                      createCompoundExpression([`const _item = `, childBlock]),\n                      createSimpleExpression(`_item.memo = _memo`),\n                      createSimpleExpression(`return _item`)\n                  ]);\n                  renderExp.arguments.push(loop, createSimpleExpression(`_cache`), createSimpleExpression(String(context.cached++)));\n              }\n              else {\n                  renderExp.arguments.push(createFunctionExpression(createForLoopParams(forNode.parseResult), childBlock, true /* force newline */));\n              }\n          };\n      });\n  });\n  // target-agnostic transform used for both Client and SSR\n  function processFor(node, dir, context, processCodegen) {\n      if (!dir.exp) {\n          context.onError(createCompilerError(31 /* ErrorCodes.X_V_FOR_NO_EXPRESSION */, dir.loc));\n          return;\n      }\n      const parseResult = parseForExpression(\n      // can only be simple expression because vFor transform is applied\n      // before expression transform.\n      dir.exp, context);\n      if (!parseResult) {\n          context.onError(createCompilerError(32 /* ErrorCodes.X_V_FOR_MALFORMED_EXPRESSION */, dir.loc));\n          return;\n      }\n      const { addIdentifiers, removeIdentifiers, scopes } = context;\n      const { source, value, key, index } = parseResult;\n      const forNode = {\n          type: 11 /* NodeTypes.FOR */,\n          loc: dir.loc,\n          source,\n          valueAlias: value,\n          keyAlias: key,\n          objectIndexAlias: index,\n          parseResult,\n          children: isTemplateNode(node) ? node.children : [node]\n      };\n      context.replaceNode(forNode);\n      // bookkeeping\n      scopes.vFor++;\n      const onExit = processCodegen && processCodegen(forNode);\n      return () => {\n          scopes.vFor--;\n          if (onExit)\n              onExit();\n      };\n  }\n  const forAliasRE = /([\\s\\S]*?)\\s+(?:in|of)\\s+([\\s\\S]*)/;\n  // This regex doesn't cover the case if key or index aliases have destructuring,\n  // but those do not make sense in the first place, so this works in practice.\n  const forIteratorRE = /,([^,\\}\\]]*)(?:,([^,\\}\\]]*))?$/;\n  const stripParensRE = /^\\(|\\)$/g;\n  function parseForExpression(input, context) {\n      const loc = input.loc;\n      const exp = input.content;\n      const inMatch = exp.match(forAliasRE);\n      if (!inMatch)\n          return;\n      const [, LHS, RHS] = inMatch;\n      const result = {\n          source: createAliasExpression(loc, RHS.trim(), exp.indexOf(RHS, LHS.length)),\n          value: undefined,\n          key: undefined,\n          index: undefined\n      };\n      {\n          validateBrowserExpression(result.source, context);\n      }\n      let valueContent = LHS.trim().replace(stripParensRE, '').trim();\n      const trimmedOffset = LHS.indexOf(valueContent);\n      const iteratorMatch = valueContent.match(forIteratorRE);\n      if (iteratorMatch) {\n          valueContent = valueContent.replace(forIteratorRE, '').trim();\n          const keyContent = iteratorMatch[1].trim();\n          let keyOffset;\n          if (keyContent) {\n              keyOffset = exp.indexOf(keyContent, trimmedOffset + valueContent.length);\n              result.key = createAliasExpression(loc, keyContent, keyOffset);\n              {\n                  validateBrowserExpression(result.key, context, true);\n              }\n          }\n          if (iteratorMatch[2]) {\n              const indexContent = iteratorMatch[2].trim();\n              if (indexContent) {\n                  result.index = createAliasExpression(loc, indexContent, exp.indexOf(indexContent, result.key\n                      ? keyOffset + keyContent.length\n                      : trimmedOffset + valueContent.length));\n                  {\n                      validateBrowserExpression(result.index, context, true);\n                  }\n              }\n          }\n      }\n      if (valueContent) {\n          result.value = createAliasExpression(loc, valueContent, trimmedOffset);\n          {\n              validateBrowserExpression(result.value, context, true);\n          }\n      }\n      return result;\n  }\n  function createAliasExpression(range, content, offset) {\n      return createSimpleExpression(content, false, getInnerRange(range, offset, content.length));\n  }\n  function createForLoopParams({ value, key, index }, memoArgs = []) {\n      return createParamsList([value, key, index, ...memoArgs]);\n  }\n  function createParamsList(args) {\n      let i = args.length;\n      while (i--) {\n          if (args[i])\n              break;\n      }\n      return args\n          .slice(0, i + 1)\n          .map((arg, i) => arg || createSimpleExpression(`_`.repeat(i + 1), false));\n  }\n\n  const defaultFallback = createSimpleExpression(`undefined`, false);\n  // A NodeTransform that:\n  // 1. Tracks scope identifiers for scoped slots so that they don't get prefixed\n  //    by transformExpression. This is only applied in non-browser builds with\n  //    { prefixIdentifiers: true }.\n  // 2. Track v-slot depths so that we know a slot is inside another slot.\n  //    Note the exit callback is executed before buildSlots() on the same node,\n  //    so only nested slots see positive numbers.\n  const trackSlotScopes = (node, context) => {\n      if (node.type === 1 /* NodeTypes.ELEMENT */ &&\n          (node.tagType === 1 /* ElementTypes.COMPONENT */ ||\n              node.tagType === 3 /* ElementTypes.TEMPLATE */)) {\n          // We are only checking non-empty v-slot here\n          // since we only care about slots that introduce scope variables.\n          const vSlot = findDir(node, 'slot');\n          if (vSlot) {\n              vSlot.exp;\n              context.scopes.vSlot++;\n              return () => {\n                  context.scopes.vSlot--;\n              };\n          }\n      }\n  };\n  // A NodeTransform that tracks scope identifiers for scoped slots with v-for.\n  // This transform is only applied in non-browser builds with { prefixIdentifiers: true }\n  const trackVForSlotScopes = (node, context) => {\n      let vFor;\n      if (isTemplateNode(node) &&\n          node.props.some(isVSlot) &&\n          (vFor = findDir(node, 'for'))) {\n          const result = (vFor.parseResult = parseForExpression(vFor.exp, context));\n          if (result) {\n              const { value, key, index } = result;\n              const { addIdentifiers, removeIdentifiers } = context;\n              value && addIdentifiers(value);\n              key && addIdentifiers(key);\n              index && addIdentifiers(index);\n              return () => {\n                  value && removeIdentifiers(value);\n                  key && removeIdentifiers(key);\n                  index && removeIdentifiers(index);\n              };\n          }\n      }\n  };\n  const buildClientSlotFn = (props, children, loc) => createFunctionExpression(props, children, false /* newline */, true /* isSlot */, children.length ? children[0].loc : loc);\n  // Instead of being a DirectiveTransform, v-slot processing is called during\n  // transformElement to build the slots object for a component.\n  function buildSlots(node, context, buildSlotFn = buildClientSlotFn) {\n      context.helper(WITH_CTX);\n      const { children, loc } = node;\n      const slotsProperties = [];\n      const dynamicSlots = [];\n      // If the slot is inside a v-for or another v-slot, force it to be dynamic\n      // since it likely uses a scope variable.\n      let hasDynamicSlots = context.scopes.vSlot > 0 || context.scopes.vFor > 0;\n      // 1. Check for slot with slotProps on component itself.\n      //    <Comp v-slot=\"{ prop }\"/>\n      const onComponentSlot = findDir(node, 'slot', true);\n      if (onComponentSlot) {\n          const { arg, exp } = onComponentSlot;\n          if (arg && !isStaticExp(arg)) {\n              hasDynamicSlots = true;\n          }\n          slotsProperties.push(createObjectProperty(arg || createSimpleExpression('default', true), buildSlotFn(exp, children, loc)));\n      }\n      // 2. Iterate through children and check for template slots\n      //    <template v-slot:foo=\"{ prop }\">\n      let hasTemplateSlots = false;\n      let hasNamedDefaultSlot = false;\n      const implicitDefaultChildren = [];\n      const seenSlotNames = new Set();\n      let conditionalBranchIndex = 0;\n      for (let i = 0; i < children.length; i++) {\n          const slotElement = children[i];\n          let slotDir;\n          if (!isTemplateNode(slotElement) ||\n              !(slotDir = findDir(slotElement, 'slot', true))) {\n              // not a <template v-slot>, skip.\n              if (slotElement.type !== 3 /* NodeTypes.COMMENT */) {\n                  implicitDefaultChildren.push(slotElement);\n              }\n              continue;\n          }\n          if (onComponentSlot) {\n              // already has on-component slot - this is incorrect usage.\n              context.onError(createCompilerError(37 /* ErrorCodes.X_V_SLOT_MIXED_SLOT_USAGE */, slotDir.loc));\n              break;\n          }\n          hasTemplateSlots = true;\n          const { children: slotChildren, loc: slotLoc } = slotElement;\n          const { arg: slotName = createSimpleExpression(`default`, true), exp: slotProps, loc: dirLoc } = slotDir;\n          // check if name is dynamic.\n          let staticSlotName;\n          if (isStaticExp(slotName)) {\n              staticSlotName = slotName ? slotName.content : `default`;\n          }\n          else {\n              hasDynamicSlots = true;\n          }\n          const slotFunction = buildSlotFn(slotProps, slotChildren, slotLoc);\n          // check if this slot is conditional (v-if/v-for)\n          let vIf;\n          let vElse;\n          let vFor;\n          if ((vIf = findDir(slotElement, 'if'))) {\n              hasDynamicSlots = true;\n              dynamicSlots.push(createConditionalExpression(vIf.exp, buildDynamicSlot(slotName, slotFunction, conditionalBranchIndex++), defaultFallback));\n          }\n          else if ((vElse = findDir(slotElement, /^else(-if)?$/, true /* allowEmpty */))) {\n              // find adjacent v-if\n              let j = i;\n              let prev;\n              while (j--) {\n                  prev = children[j];\n                  if (prev.type !== 3 /* NodeTypes.COMMENT */) {\n                      break;\n                  }\n              }\n              if (prev && isTemplateNode(prev) && findDir(prev, 'if')) {\n                  // remove node\n                  children.splice(i, 1);\n                  i--;\n                  // attach this slot to previous conditional\n                  let conditional = dynamicSlots[dynamicSlots.length - 1];\n                  while (conditional.alternate.type === 19 /* NodeTypes.JS_CONDITIONAL_EXPRESSION */) {\n                      conditional = conditional.alternate;\n                  }\n                  conditional.alternate = vElse.exp\n                      ? createConditionalExpression(vElse.exp, buildDynamicSlot(slotName, slotFunction, conditionalBranchIndex++), defaultFallback)\n                      : buildDynamicSlot(slotName, slotFunction, conditionalBranchIndex++);\n              }\n              else {\n                  context.onError(createCompilerError(30 /* ErrorCodes.X_V_ELSE_NO_ADJACENT_IF */, vElse.loc));\n              }\n          }\n          else if ((vFor = findDir(slotElement, 'for'))) {\n              hasDynamicSlots = true;\n              const parseResult = vFor.parseResult ||\n                  parseForExpression(vFor.exp, context);\n              if (parseResult) {\n                  // Render the dynamic slots as an array and add it to the createSlot()\n                  // args. The runtime knows how to handle it appropriately.\n                  dynamicSlots.push(createCallExpression(context.helper(RENDER_LIST), [\n                      parseResult.source,\n                      createFunctionExpression(createForLoopParams(parseResult), buildDynamicSlot(slotName, slotFunction), true /* force newline */)\n                  ]));\n              }\n              else {\n                  context.onError(createCompilerError(32 /* ErrorCodes.X_V_FOR_MALFORMED_EXPRESSION */, vFor.loc));\n              }\n          }\n          else {\n              // check duplicate static names\n              if (staticSlotName) {\n                  if (seenSlotNames.has(staticSlotName)) {\n                      context.onError(createCompilerError(38 /* ErrorCodes.X_V_SLOT_DUPLICATE_SLOT_NAMES */, dirLoc));\n                      continue;\n                  }\n                  seenSlotNames.add(staticSlotName);\n                  if (staticSlotName === 'default') {\n                      hasNamedDefaultSlot = true;\n                  }\n              }\n              slotsProperties.push(createObjectProperty(slotName, slotFunction));\n          }\n      }\n      if (!onComponentSlot) {\n          const buildDefaultSlotProperty = (props, children) => {\n              const fn = buildSlotFn(props, children, loc);\n              if (context.compatConfig) {\n                  fn.isNonScopedSlot = true;\n              }\n              return createObjectProperty(`default`, fn);\n          };\n          if (!hasTemplateSlots) {\n              // implicit default slot (on component)\n              slotsProperties.push(buildDefaultSlotProperty(undefined, children));\n          }\n          else if (implicitDefaultChildren.length &&\n              // #3766\n              // with whitespace: 'preserve', whitespaces between slots will end up in\n              // implicitDefaultChildren. Ignore if all implicit children are whitespaces.\n              implicitDefaultChildren.some(node => isNonWhitespaceContent(node))) {\n              // implicit default slot (mixed with named slots)\n              if (hasNamedDefaultSlot) {\n                  context.onError(createCompilerError(39 /* ErrorCodes.X_V_SLOT_EXTRANEOUS_DEFAULT_SLOT_CHILDREN */, implicitDefaultChildren[0].loc));\n              }\n              else {\n                  slotsProperties.push(buildDefaultSlotProperty(undefined, implicitDefaultChildren));\n              }\n          }\n      }\n      const slotFlag = hasDynamicSlots\n          ? 2 /* SlotFlags.DYNAMIC */\n          : hasForwardedSlots(node.children)\n              ? 3 /* SlotFlags.FORWARDED */\n              : 1 /* SlotFlags.STABLE */;\n      let slots = createObjectExpression(slotsProperties.concat(createObjectProperty(`_`, \n      // 2 = compiled but dynamic = can skip normalization, but must run diff\n      // 1 = compiled and static = can skip normalization AND diff as optimized\n      createSimpleExpression(slotFlag + (` /* ${slotFlagsText[slotFlag]} */` ), false))), loc);\n      if (dynamicSlots.length) {\n          slots = createCallExpression(context.helper(CREATE_SLOTS), [\n              slots,\n              createArrayExpression(dynamicSlots)\n          ]);\n      }\n      return {\n          slots,\n          hasDynamicSlots\n      };\n  }\n  function buildDynamicSlot(name, fn, index) {\n      const props = [\n          createObjectProperty(`name`, name),\n          createObjectProperty(`fn`, fn)\n      ];\n      if (index != null) {\n          props.push(createObjectProperty(`key`, createSimpleExpression(String(index), true)));\n      }\n      return createObjectExpression(props);\n  }\n  function hasForwardedSlots(children) {\n      for (let i = 0; i < children.length; i++) {\n          const child = children[i];\n          switch (child.type) {\n              case 1 /* NodeTypes.ELEMENT */:\n                  if (child.tagType === 2 /* ElementTypes.SLOT */ ||\n                      hasForwardedSlots(child.children)) {\n                      return true;\n                  }\n                  break;\n              case 9 /* NodeTypes.IF */:\n                  if (hasForwardedSlots(child.branches))\n                      return true;\n                  break;\n              case 10 /* NodeTypes.IF_BRANCH */:\n              case 11 /* NodeTypes.FOR */:\n                  if (hasForwardedSlots(child.children))\n                      return true;\n                  break;\n          }\n      }\n      return false;\n  }\n  function isNonWhitespaceContent(node) {\n      if (node.type !== 2 /* NodeTypes.TEXT */ && node.type !== 12 /* NodeTypes.TEXT_CALL */)\n          return true;\n      return node.type === 2 /* NodeTypes.TEXT */\n          ? !!node.content.trim()\n          : isNonWhitespaceContent(node.content);\n  }\n\n  // some directive transforms (e.g. v-model) may return a symbol for runtime\n  // import, which should be used instead of a resolveDirective call.\n  const directiveImportMap = new WeakMap();\n  // generate a JavaScript AST for this element's codegen\n  const transformElement = (node, context) => {\n      // perform the work on exit, after all child expressions have been\n      // processed and merged.\n      return function postTransformElement() {\n          node = context.currentNode;\n          if (!(node.type === 1 /* NodeTypes.ELEMENT */ &&\n              (node.tagType === 0 /* ElementTypes.ELEMENT */ ||\n                  node.tagType === 1 /* ElementTypes.COMPONENT */))) {\n              return;\n          }\n          const { tag, props } = node;\n          const isComponent = node.tagType === 1 /* ElementTypes.COMPONENT */;\n          // The goal of the transform is to create a codegenNode implementing the\n          // VNodeCall interface.\n          let vnodeTag = isComponent\n              ? resolveComponentType(node, context)\n              : `\"${tag}\"`;\n          const isDynamicComponent = isObject(vnodeTag) && vnodeTag.callee === RESOLVE_DYNAMIC_COMPONENT;\n          let vnodeProps;\n          let vnodeChildren;\n          let vnodePatchFlag;\n          let patchFlag = 0;\n          let vnodeDynamicProps;\n          let dynamicPropNames;\n          let vnodeDirectives;\n          let shouldUseBlock = \n          // dynamic component may resolve to plain elements\n          isDynamicComponent ||\n              vnodeTag === TELEPORT ||\n              vnodeTag === SUSPENSE ||\n              (!isComponent &&\n                  // <svg> and <foreignObject> must be forced into blocks so that block\n                  // updates inside get proper isSVG flag at runtime. (#639, #643)\n                  // This is technically web-specific, but splitting the logic out of core\n                  // leads to too much unnecessary complexity.\n                  (tag === 'svg' || tag === 'foreignObject'));\n          // props\n          if (props.length > 0) {\n              const propsBuildResult = buildProps(node, context, undefined, isComponent, isDynamicComponent);\n              vnodeProps = propsBuildResult.props;\n              patchFlag = propsBuildResult.patchFlag;\n              dynamicPropNames = propsBuildResult.dynamicPropNames;\n              const directives = propsBuildResult.directives;\n              vnodeDirectives =\n                  directives && directives.length\n                      ? createArrayExpression(directives.map(dir => buildDirectiveArgs(dir, context)))\n                      : undefined;\n              if (propsBuildResult.shouldUseBlock) {\n                  shouldUseBlock = true;\n              }\n          }\n          // children\n          if (node.children.length > 0) {\n              if (vnodeTag === KEEP_ALIVE) {\n                  // Although a built-in component, we compile KeepAlive with raw children\n                  // instead of slot functions so that it can be used inside Transition\n                  // or other Transition-wrapping HOCs.\n                  // To ensure correct updates with block optimizations, we need to:\n                  // 1. Force keep-alive into a block. This avoids its children being\n                  //    collected by a parent block.\n                  shouldUseBlock = true;\n                  // 2. Force keep-alive to always be updated, since it uses raw children.\n                  patchFlag |= 1024 /* PatchFlags.DYNAMIC_SLOTS */;\n                  if (node.children.length > 1) {\n                      context.onError(createCompilerError(46 /* ErrorCodes.X_KEEP_ALIVE_INVALID_CHILDREN */, {\n                          start: node.children[0].loc.start,\n                          end: node.children[node.children.length - 1].loc.end,\n                          source: ''\n                      }));\n                  }\n              }\n              const shouldBuildAsSlots = isComponent &&\n                  // Teleport is not a real component and has dedicated runtime handling\n                  vnodeTag !== TELEPORT &&\n                  // explained above.\n                  vnodeTag !== KEEP_ALIVE;\n              if (shouldBuildAsSlots) {\n                  const { slots, hasDynamicSlots } = buildSlots(node, context);\n                  vnodeChildren = slots;\n                  if (hasDynamicSlots) {\n                      patchFlag |= 1024 /* PatchFlags.DYNAMIC_SLOTS */;\n                  }\n              }\n              else if (node.children.length === 1 && vnodeTag !== TELEPORT) {\n                  const child = node.children[0];\n                  const type = child.type;\n                  // check for dynamic text children\n                  const hasDynamicTextChild = type === 5 /* NodeTypes.INTERPOLATION */ ||\n                      type === 8 /* NodeTypes.COMPOUND_EXPRESSION */;\n                  if (hasDynamicTextChild &&\n                      getConstantType(child, context) === 0 /* ConstantTypes.NOT_CONSTANT */) {\n                      patchFlag |= 1 /* PatchFlags.TEXT */;\n                  }\n                  // pass directly if the only child is a text node\n                  // (plain / interpolation / expression)\n                  if (hasDynamicTextChild || type === 2 /* NodeTypes.TEXT */) {\n                      vnodeChildren = child;\n                  }\n                  else {\n                      vnodeChildren = node.children;\n                  }\n              }\n              else {\n                  vnodeChildren = node.children;\n              }\n          }\n          // patchFlag & dynamicPropNames\n          if (patchFlag !== 0) {\n              {\n                  if (patchFlag < 0) {\n                      // special flags (negative and mutually exclusive)\n                      vnodePatchFlag = patchFlag + ` /* ${PatchFlagNames[patchFlag]} */`;\n                  }\n                  else {\n                      // bitwise flags\n                      const flagNames = Object.keys(PatchFlagNames)\n                          .map(Number)\n                          .filter(n => n > 0 && patchFlag & n)\n                          .map(n => PatchFlagNames[n])\n                          .join(`, `);\n                      vnodePatchFlag = patchFlag + ` /* ${flagNames} */`;\n                  }\n              }\n              if (dynamicPropNames && dynamicPropNames.length) {\n                  vnodeDynamicProps = stringifyDynamicPropNames(dynamicPropNames);\n              }\n          }\n          node.codegenNode = createVNodeCall(context, vnodeTag, vnodeProps, vnodeChildren, vnodePatchFlag, vnodeDynamicProps, vnodeDirectives, !!shouldUseBlock, false /* disableTracking */, isComponent, node.loc);\n      };\n  };\n  function resolveComponentType(node, context, ssr = false) {\n      let { tag } = node;\n      // 1. dynamic component\n      const isExplicitDynamic = isComponentTag(tag);\n      const isProp = findProp(node, 'is');\n      if (isProp) {\n          if (isExplicitDynamic ||\n              (isCompatEnabled(\"COMPILER_IS_ON_ELEMENT\" /* CompilerDeprecationTypes.COMPILER_IS_ON_ELEMENT */, context))) {\n              const exp = isProp.type === 6 /* NodeTypes.ATTRIBUTE */\n                  ? isProp.value && createSimpleExpression(isProp.value.content, true)\n                  : isProp.exp;\n              if (exp) {\n                  return createCallExpression(context.helper(RESOLVE_DYNAMIC_COMPONENT), [\n                      exp\n                  ]);\n              }\n          }\n          else if (isProp.type === 6 /* NodeTypes.ATTRIBUTE */ &&\n              isProp.value.content.startsWith('vue:')) {\n              // <button is=\"vue:xxx\">\n              // if not <component>, only is value that starts with \"vue:\" will be\n              // treated as component by the parse phase and reach here, unless it's\n              // compat mode where all is values are considered components\n              tag = isProp.value.content.slice(4);\n          }\n      }\n      // 1.5 v-is (TODO: Deprecate)\n      const isDir = !isExplicitDynamic && findDir(node, 'is');\n      if (isDir && isDir.exp) {\n          return createCallExpression(context.helper(RESOLVE_DYNAMIC_COMPONENT), [\n              isDir.exp\n          ]);\n      }\n      // 2. built-in components (Teleport, Transition, KeepAlive, Suspense...)\n      const builtIn = isCoreComponent(tag) || context.isBuiltInComponent(tag);\n      if (builtIn) {\n          // built-ins are simply fallthroughs / have special handling during ssr\n          // so we don't need to import their runtime equivalents\n          if (!ssr)\n              context.helper(builtIn);\n          return builtIn;\n      }\n      // 5. user component (resolve)\n      context.helper(RESOLVE_COMPONENT);\n      context.components.add(tag);\n      return toValidAssetId(tag, `component`);\n  }\n  function buildProps(node, context, props = node.props, isComponent, isDynamicComponent, ssr = false) {\n      const { tag, loc: elementLoc, children } = node;\n      let properties = [];\n      const mergeArgs = [];\n      const runtimeDirectives = [];\n      const hasChildren = children.length > 0;\n      let shouldUseBlock = false;\n      // patchFlag analysis\n      let patchFlag = 0;\n      let hasRef = false;\n      let hasClassBinding = false;\n      let hasStyleBinding = false;\n      let hasHydrationEventBinding = false;\n      let hasDynamicKeys = false;\n      let hasVnodeHook = false;\n      const dynamicPropNames = [];\n      const pushMergeArg = (arg) => {\n          if (properties.length) {\n              mergeArgs.push(createObjectExpression(dedupeProperties(properties), elementLoc));\n              properties = [];\n          }\n          if (arg)\n              mergeArgs.push(arg);\n      };\n      const analyzePatchFlag = ({ key, value }) => {\n          if (isStaticExp(key)) {\n              const name = key.content;\n              const isEventHandler = isOn(name);\n              if (isEventHandler &&\n                  (!isComponent || isDynamicComponent) &&\n                  // omit the flag for click handlers because hydration gives click\n                  // dedicated fast path.\n                  name.toLowerCase() !== 'onclick' &&\n                  // omit v-model handlers\n                  name !== 'onUpdate:modelValue' &&\n                  // omit onVnodeXXX hooks\n                  !isReservedProp(name)) {\n                  hasHydrationEventBinding = true;\n              }\n              if (isEventHandler && isReservedProp(name)) {\n                  hasVnodeHook = true;\n              }\n              if (value.type === 20 /* NodeTypes.JS_CACHE_EXPRESSION */ ||\n                  ((value.type === 4 /* NodeTypes.SIMPLE_EXPRESSION */ ||\n                      value.type === 8 /* NodeTypes.COMPOUND_EXPRESSION */) &&\n                      getConstantType(value, context) > 0)) {\n                  // skip if the prop is a cached handler or has constant value\n                  return;\n              }\n              if (name === 'ref') {\n                  hasRef = true;\n              }\n              else if (name === 'class') {\n                  hasClassBinding = true;\n              }\n              else if (name === 'style') {\n                  hasStyleBinding = true;\n              }\n              else if (name !== 'key' && !dynamicPropNames.includes(name)) {\n                  dynamicPropNames.push(name);\n              }\n              // treat the dynamic class and style binding of the component as dynamic props\n              if (isComponent &&\n                  (name === 'class' || name === 'style') &&\n                  !dynamicPropNames.includes(name)) {\n                  dynamicPropNames.push(name);\n              }\n          }\n          else {\n              hasDynamicKeys = true;\n          }\n      };\n      for (let i = 0; i < props.length; i++) {\n          // static attribute\n          const prop = props[i];\n          if (prop.type === 6 /* NodeTypes.ATTRIBUTE */) {\n              const { loc, name, value } = prop;\n              let isStatic = true;\n              if (name === 'ref') {\n                  hasRef = true;\n                  if (context.scopes.vFor > 0) {\n                      properties.push(createObjectProperty(createSimpleExpression('ref_for', true), createSimpleExpression('true')));\n                  }\n              }\n              // skip is on <component>, or is=\"vue:xxx\"\n              if (name === 'is' &&\n                  (isComponentTag(tag) ||\n                      (value && value.content.startsWith('vue:')) ||\n                      (isCompatEnabled(\"COMPILER_IS_ON_ELEMENT\" /* CompilerDeprecationTypes.COMPILER_IS_ON_ELEMENT */, context)))) {\n                  continue;\n              }\n              properties.push(createObjectProperty(createSimpleExpression(name, true, getInnerRange(loc, 0, name.length)), createSimpleExpression(value ? value.content : '', isStatic, value ? value.loc : loc)));\n          }\n          else {\n              // directives\n              const { name, arg, exp, loc } = prop;\n              const isVBind = name === 'bind';\n              const isVOn = name === 'on';\n              // skip v-slot - it is handled by its dedicated transform.\n              if (name === 'slot') {\n                  if (!isComponent) {\n                      context.onError(createCompilerError(40 /* ErrorCodes.X_V_SLOT_MISPLACED */, loc));\n                  }\n                  continue;\n              }\n              // skip v-once/v-memo - they are handled by dedicated transforms.\n              if (name === 'once' || name === 'memo') {\n                  continue;\n              }\n              // skip v-is and :is on <component>\n              if (name === 'is' ||\n                  (isVBind &&\n                      isStaticArgOf(arg, 'is') &&\n                      (isComponentTag(tag) ||\n                          (isCompatEnabled(\"COMPILER_IS_ON_ELEMENT\" /* CompilerDeprecationTypes.COMPILER_IS_ON_ELEMENT */, context))))) {\n                  continue;\n              }\n              // skip v-on in SSR compilation\n              if (isVOn && ssr) {\n                  continue;\n              }\n              if (\n              // #938: elements with dynamic keys should be forced into blocks\n              (isVBind && isStaticArgOf(arg, 'key')) ||\n                  // inline before-update hooks need to force block so that it is invoked\n                  // before children\n                  (isVOn && hasChildren && isStaticArgOf(arg, 'vue:before-update'))) {\n                  shouldUseBlock = true;\n              }\n              if (isVBind && isStaticArgOf(arg, 'ref') && context.scopes.vFor > 0) {\n                  properties.push(createObjectProperty(createSimpleExpression('ref_for', true), createSimpleExpression('true')));\n              }\n              // special case for v-bind and v-on with no argument\n              if (!arg && (isVBind || isVOn)) {\n                  hasDynamicKeys = true;\n                  if (exp) {\n                      if (isVBind) {\n                          // have to merge early for compat build check\n                          pushMergeArg();\n                          {\n                              // 2.x v-bind object order compat\n                              {\n                                  const hasOverridableKeys = mergeArgs.some(arg => {\n                                      if (arg.type === 15 /* NodeTypes.JS_OBJECT_EXPRESSION */) {\n                                          return arg.properties.some(({ key }) => {\n                                              if (key.type !== 4 /* NodeTypes.SIMPLE_EXPRESSION */ ||\n                                                  !key.isStatic) {\n                                                  return true;\n                                              }\n                                              return (key.content !== 'class' &&\n                                                  key.content !== 'style' &&\n                                                  !isOn(key.content));\n                                          });\n                                      }\n                                      else {\n                                          // dynamic expression\n                                          return true;\n                                      }\n                                  });\n                                  if (hasOverridableKeys) {\n                                      checkCompatEnabled(\"COMPILER_V_BIND_OBJECT_ORDER\" /* CompilerDeprecationTypes.COMPILER_V_BIND_OBJECT_ORDER */, context, loc);\n                                  }\n                              }\n                              if (isCompatEnabled(\"COMPILER_V_BIND_OBJECT_ORDER\" /* CompilerDeprecationTypes.COMPILER_V_BIND_OBJECT_ORDER */, context)) {\n                                  mergeArgs.unshift(exp);\n                                  continue;\n                              }\n                          }\n                          mergeArgs.push(exp);\n                      }\n                      else {\n                          // v-on=\"obj\" -> toHandlers(obj)\n                          pushMergeArg({\n                              type: 14 /* NodeTypes.JS_CALL_EXPRESSION */,\n                              loc,\n                              callee: context.helper(TO_HANDLERS),\n                              arguments: isComponent ? [exp] : [exp, `true`]\n                          });\n                      }\n                  }\n                  else {\n                      context.onError(createCompilerError(isVBind\n                          ? 34 /* ErrorCodes.X_V_BIND_NO_EXPRESSION */\n                          : 35 /* ErrorCodes.X_V_ON_NO_EXPRESSION */, loc));\n                  }\n                  continue;\n              }\n              const directiveTransform = context.directiveTransforms[name];\n              if (directiveTransform) {\n                  // has built-in directive transform.\n                  const { props, needRuntime } = directiveTransform(prop, node, context);\n                  !ssr && props.forEach(analyzePatchFlag);\n                  if (isVOn && arg && !isStaticExp(arg)) {\n                      pushMergeArg(createObjectExpression(props, elementLoc));\n                  }\n                  else {\n                      properties.push(...props);\n                  }\n                  if (needRuntime) {\n                      runtimeDirectives.push(prop);\n                      if (isSymbol(needRuntime)) {\n                          directiveImportMap.set(prop, needRuntime);\n                      }\n                  }\n              }\n              else if (!isBuiltInDirective(name)) {\n                  // no built-in transform, this is a user custom directive.\n                  runtimeDirectives.push(prop);\n                  // custom dirs may use beforeUpdate so they need to force blocks\n                  // to ensure before-update gets called before children update\n                  if (hasChildren) {\n                      shouldUseBlock = true;\n                  }\n              }\n          }\n      }\n      let propsExpression = undefined;\n      // has v-bind=\"object\" or v-on=\"object\", wrap with mergeProps\n      if (mergeArgs.length) {\n          // close up any not-yet-merged props\n          pushMergeArg();\n          if (mergeArgs.length > 1) {\n              propsExpression = createCallExpression(context.helper(MERGE_PROPS), mergeArgs, elementLoc);\n          }\n          else {\n              // single v-bind with nothing else - no need for a mergeProps call\n              propsExpression = mergeArgs[0];\n          }\n      }\n      else if (properties.length) {\n          propsExpression = createObjectExpression(dedupeProperties(properties), elementLoc);\n      }\n      // patchFlag analysis\n      if (hasDynamicKeys) {\n          patchFlag |= 16 /* PatchFlags.FULL_PROPS */;\n      }\n      else {\n          if (hasClassBinding && !isComponent) {\n              patchFlag |= 2 /* PatchFlags.CLASS */;\n          }\n          if (hasStyleBinding && !isComponent) {\n              patchFlag |= 4 /* PatchFlags.STYLE */;\n          }\n          if (dynamicPropNames.length) {\n              patchFlag |= 8 /* PatchFlags.PROPS */;\n          }\n          if (hasHydrationEventBinding) {\n              patchFlag |= 32 /* PatchFlags.HYDRATE_EVENTS */;\n          }\n      }\n      if (!shouldUseBlock &&\n          (patchFlag === 0 || patchFlag === 32 /* PatchFlags.HYDRATE_EVENTS */) &&\n          (hasRef || hasVnodeHook || runtimeDirectives.length > 0)) {\n          patchFlag |= 512 /* PatchFlags.NEED_PATCH */;\n      }\n      // pre-normalize props, SSR is skipped for now\n      if (!context.inSSR && propsExpression) {\n          switch (propsExpression.type) {\n              case 15 /* NodeTypes.JS_OBJECT_EXPRESSION */:\n                  // means that there is no v-bind,\n                  // but still need to deal with dynamic key binding\n                  let classKeyIndex = -1;\n                  let styleKeyIndex = -1;\n                  let hasDynamicKey = false;\n                  for (let i = 0; i < propsExpression.properties.length; i++) {\n                      const key = propsExpression.properties[i].key;\n                      if (isStaticExp(key)) {\n                          if (key.content === 'class') {\n                              classKeyIndex = i;\n                          }\n                          else if (key.content === 'style') {\n                              styleKeyIndex = i;\n                          }\n                      }\n                      else if (!key.isHandlerKey) {\n                          hasDynamicKey = true;\n                      }\n                  }\n                  const classProp = propsExpression.properties[classKeyIndex];\n                  const styleProp = propsExpression.properties[styleKeyIndex];\n                  // no dynamic key\n                  if (!hasDynamicKey) {\n                      if (classProp && !isStaticExp(classProp.value)) {\n                          classProp.value = createCallExpression(context.helper(NORMALIZE_CLASS), [classProp.value]);\n                      }\n                      if (styleProp &&\n                          // the static style is compiled into an object,\n                          // so use `hasStyleBinding` to ensure that it is a dynamic style binding\n                          (hasStyleBinding ||\n                              (styleProp.value.type === 4 /* NodeTypes.SIMPLE_EXPRESSION */ &&\n                                  styleProp.value.content.trim()[0] === `[`) ||\n                              // v-bind:style and style both exist,\n                              // v-bind:style with static literal object\n                              styleProp.value.type === 17 /* NodeTypes.JS_ARRAY_EXPRESSION */)) {\n                          styleProp.value = createCallExpression(context.helper(NORMALIZE_STYLE), [styleProp.value]);\n                      }\n                  }\n                  else {\n                      // dynamic key binding, wrap with `normalizeProps`\n                      propsExpression = createCallExpression(context.helper(NORMALIZE_PROPS), [propsExpression]);\n                  }\n                  break;\n              case 14 /* NodeTypes.JS_CALL_EXPRESSION */:\n                  // mergeProps call, do nothing\n                  break;\n              default:\n                  // single v-bind\n                  propsExpression = createCallExpression(context.helper(NORMALIZE_PROPS), [\n                      createCallExpression(context.helper(GUARD_REACTIVE_PROPS), [\n                          propsExpression\n                      ])\n                  ]);\n                  break;\n          }\n      }\n      return {\n          props: propsExpression,\n          directives: runtimeDirectives,\n          patchFlag,\n          dynamicPropNames,\n          shouldUseBlock\n      };\n  }\n  // Dedupe props in an object literal.\n  // Literal duplicated attributes would have been warned during the parse phase,\n  // however, it's possible to encounter duplicated `onXXX` handlers with different\n  // modifiers. We also need to merge static and dynamic class / style attributes.\n  // - onXXX handlers / style: merge into array\n  // - class: merge into single expression with concatenation\n  function dedupeProperties(properties) {\n      const knownProps = new Map();\n      const deduped = [];\n      for (let i = 0; i < properties.length; i++) {\n          const prop = properties[i];\n          // dynamic keys are always allowed\n          if (prop.key.type === 8 /* NodeTypes.COMPOUND_EXPRESSION */ || !prop.key.isStatic) {\n              deduped.push(prop);\n              continue;\n          }\n          const name = prop.key.content;\n          const existing = knownProps.get(name);\n          if (existing) {\n              if (name === 'style' || name === 'class' || isOn(name)) {\n                  mergeAsArray(existing, prop);\n              }\n              // unexpected duplicate, should have emitted error during parse\n          }\n          else {\n              knownProps.set(name, prop);\n              deduped.push(prop);\n          }\n      }\n      return deduped;\n  }\n  function mergeAsArray(existing, incoming) {\n      if (existing.value.type === 17 /* NodeTypes.JS_ARRAY_EXPRESSION */) {\n          existing.value.elements.push(incoming.value);\n      }\n      else {\n          existing.value = createArrayExpression([existing.value, incoming.value], existing.loc);\n      }\n  }\n  function buildDirectiveArgs(dir, context) {\n      const dirArgs = [];\n      const runtime = directiveImportMap.get(dir);\n      if (runtime) {\n          // built-in directive with runtime\n          dirArgs.push(context.helperString(runtime));\n      }\n      else {\n          {\n              // inject statement for resolving directive\n              context.helper(RESOLVE_DIRECTIVE);\n              context.directives.add(dir.name);\n              dirArgs.push(toValidAssetId(dir.name, `directive`));\n          }\n      }\n      const { loc } = dir;\n      if (dir.exp)\n          dirArgs.push(dir.exp);\n      if (dir.arg) {\n          if (!dir.exp) {\n              dirArgs.push(`void 0`);\n          }\n          dirArgs.push(dir.arg);\n      }\n      if (Object.keys(dir.modifiers).length) {\n          if (!dir.arg) {\n              if (!dir.exp) {\n                  dirArgs.push(`void 0`);\n              }\n              dirArgs.push(`void 0`);\n          }\n          const trueExpression = createSimpleExpression(`true`, false, loc);\n          dirArgs.push(createObjectExpression(dir.modifiers.map(modifier => createObjectProperty(modifier, trueExpression)), loc));\n      }\n      return createArrayExpression(dirArgs, dir.loc);\n  }\n  function stringifyDynamicPropNames(props) {\n      let propsNamesString = `[`;\n      for (let i = 0, l = props.length; i < l; i++) {\n          propsNamesString += JSON.stringify(props[i]);\n          if (i < l - 1)\n              propsNamesString += ', ';\n      }\n      return propsNamesString + `]`;\n  }\n  function isComponentTag(tag) {\n      return tag === 'component' || tag === 'Component';\n  }\n\n  const transformSlotOutlet = (node, context) => {\n      if (isSlotOutlet(node)) {\n          const { children, loc } = node;\n          const { slotName, slotProps } = processSlotOutlet(node, context);\n          const slotArgs = [\n              context.prefixIdentifiers ? `_ctx.$slots` : `$slots`,\n              slotName,\n              '{}',\n              'undefined',\n              'true'\n          ];\n          let expectedLen = 2;\n          if (slotProps) {\n              slotArgs[2] = slotProps;\n              expectedLen = 3;\n          }\n          if (children.length) {\n              slotArgs[3] = createFunctionExpression([], children, false, false, loc);\n              expectedLen = 4;\n          }\n          if (context.scopeId && !context.slotted) {\n              expectedLen = 5;\n          }\n          slotArgs.splice(expectedLen); // remove unused arguments\n          node.codegenNode = createCallExpression(context.helper(RENDER_SLOT), slotArgs, loc);\n      }\n  };\n  function processSlotOutlet(node, context) {\n      let slotName = `\"default\"`;\n      let slotProps = undefined;\n      const nonNameProps = [];\n      for (let i = 0; i < node.props.length; i++) {\n          const p = node.props[i];\n          if (p.type === 6 /* NodeTypes.ATTRIBUTE */) {\n              if (p.value) {\n                  if (p.name === 'name') {\n                      slotName = JSON.stringify(p.value.content);\n                  }\n                  else {\n                      p.name = camelize(p.name);\n                      nonNameProps.push(p);\n                  }\n              }\n          }\n          else {\n              if (p.name === 'bind' && isStaticArgOf(p.arg, 'name')) {\n                  if (p.exp)\n                      slotName = p.exp;\n              }\n              else {\n                  if (p.name === 'bind' && p.arg && isStaticExp(p.arg)) {\n                      p.arg.content = camelize(p.arg.content);\n                  }\n                  nonNameProps.push(p);\n              }\n          }\n      }\n      if (nonNameProps.length > 0) {\n          const { props, directives } = buildProps(node, context, nonNameProps, false, false);\n          slotProps = props;\n          if (directives.length) {\n              context.onError(createCompilerError(36 /* ErrorCodes.X_V_SLOT_UNEXPECTED_DIRECTIVE_ON_SLOT_OUTLET */, directives[0].loc));\n          }\n      }\n      return {\n          slotName,\n          slotProps\n      };\n  }\n\n  const fnExpRE = /^\\s*([\\w$_]+|(async\\s*)?\\([^)]*?\\))\\s*(:[^=]+)?=>|^\\s*(async\\s+)?function(?:\\s+[\\w$]+)?\\s*\\(/;\n  const transformOn$1 = (dir, node, context, augmentor) => {\n      const { loc, modifiers, arg } = dir;\n      if (!dir.exp && !modifiers.length) {\n          context.onError(createCompilerError(35 /* ErrorCodes.X_V_ON_NO_EXPRESSION */, loc));\n      }\n      let eventName;\n      if (arg.type === 4 /* NodeTypes.SIMPLE_EXPRESSION */) {\n          if (arg.isStatic) {\n              let rawName = arg.content;\n              // TODO deprecate @vnodeXXX usage\n              if (rawName.startsWith('vue:')) {\n                  rawName = `vnode-${rawName.slice(4)}`;\n              }\n              const eventString = node.tagType !== 0 /* ElementTypes.ELEMENT */ ||\n                  rawName.startsWith('vnode') ||\n                  !/[A-Z]/.test(rawName)\n                  ? // for non-element and vnode lifecycle event listeners, auto convert\n                      // it to camelCase. See issue #2249\n                      toHandlerKey(camelize(rawName))\n                  : // preserve case for plain element listeners that have uppercase\n                      // letters, as these may be custom elements' custom events\n                      `on:${rawName}`;\n              eventName = createSimpleExpression(eventString, true, arg.loc);\n          }\n          else {\n              // #2388\n              eventName = createCompoundExpression([\n                  `${context.helperString(TO_HANDLER_KEY)}(`,\n                  arg,\n                  `)`\n              ]);\n          }\n      }\n      else {\n          // already a compound expression.\n          eventName = arg;\n          eventName.children.unshift(`${context.helperString(TO_HANDLER_KEY)}(`);\n          eventName.children.push(`)`);\n      }\n      // handler processing\n      let exp = dir.exp;\n      if (exp && !exp.content.trim()) {\n          exp = undefined;\n      }\n      let shouldCache = context.cacheHandlers && !exp && !context.inVOnce;\n      if (exp) {\n          const isMemberExp = isMemberExpression(exp.content);\n          const isInlineStatement = !(isMemberExp || fnExpRE.test(exp.content));\n          const hasMultipleStatements = exp.content.includes(`;`);\n          {\n              validateBrowserExpression(exp, context, false, hasMultipleStatements);\n          }\n          if (isInlineStatement || (shouldCache && isMemberExp)) {\n              // wrap inline statement in a function expression\n              exp = createCompoundExpression([\n                  `${isInlineStatement\n                    ? `$event`\n                    : `${``}(...args)`} => ${hasMultipleStatements ? `{` : `(`}`,\n                  exp,\n                  hasMultipleStatements ? `}` : `)`\n              ]);\n          }\n      }\n      let ret = {\n          props: [\n              createObjectProperty(eventName, exp || createSimpleExpression(`() => {}`, false, loc))\n          ]\n      };\n      // apply extended compiler augmentor\n      if (augmentor) {\n          ret = augmentor(ret);\n      }\n      if (shouldCache) {\n          // cache handlers so that it's always the same handler being passed down.\n          // this avoids unnecessary re-renders when users use inline handlers on\n          // components.\n          ret.props[0].value = context.cache(ret.props[0].value);\n      }\n      // mark the key as handler for props normalization check\n      ret.props.forEach(p => (p.key.isHandlerKey = true));\n      return ret;\n  };\n\n  // v-bind without arg is handled directly in ./transformElements.ts due to it affecting\n  // codegen for the entire props object. This transform here is only for v-bind\n  // *with* args.\n  const transformBind = (dir, _node, context) => {\n      const { exp, modifiers, loc } = dir;\n      const arg = dir.arg;\n      if (arg.type !== 4 /* NodeTypes.SIMPLE_EXPRESSION */) {\n          arg.children.unshift(`(`);\n          arg.children.push(`) || \"\"`);\n      }\n      else if (!arg.isStatic) {\n          arg.content = `${arg.content} || \"\"`;\n      }\n      // .sync is replaced by v-model:arg\n      if (modifiers.includes('camel')) {\n          if (arg.type === 4 /* NodeTypes.SIMPLE_EXPRESSION */) {\n              if (arg.isStatic) {\n                  arg.content = camelize(arg.content);\n              }\n              else {\n                  arg.content = `${context.helperString(CAMELIZE)}(${arg.content})`;\n              }\n          }\n          else {\n              arg.children.unshift(`${context.helperString(CAMELIZE)}(`);\n              arg.children.push(`)`);\n          }\n      }\n      if (!context.inSSR) {\n          if (modifiers.includes('prop')) {\n              injectPrefix(arg, '.');\n          }\n          if (modifiers.includes('attr')) {\n              injectPrefix(arg, '^');\n          }\n      }\n      if (!exp ||\n          (exp.type === 4 /* NodeTypes.SIMPLE_EXPRESSION */ && !exp.content.trim())) {\n          context.onError(createCompilerError(34 /* ErrorCodes.X_V_BIND_NO_EXPRESSION */, loc));\n          return {\n              props: [createObjectProperty(arg, createSimpleExpression('', true, loc))]\n          };\n      }\n      return {\n          props: [createObjectProperty(arg, exp)]\n      };\n  };\n  const injectPrefix = (arg, prefix) => {\n      if (arg.type === 4 /* NodeTypes.SIMPLE_EXPRESSION */) {\n          if (arg.isStatic) {\n              arg.content = prefix + arg.content;\n          }\n          else {\n              arg.content = `\\`${prefix}\\${${arg.content}}\\``;\n          }\n      }\n      else {\n          arg.children.unshift(`'${prefix}' + (`);\n          arg.children.push(`)`);\n      }\n  };\n\n  // Merge adjacent text nodes and expressions into a single expression\n  // e.g. <div>abc {{ d }} {{ e }}</div> should have a single expression node as child.\n  const transformText = (node, context) => {\n      if (node.type === 0 /* NodeTypes.ROOT */ ||\n          node.type === 1 /* NodeTypes.ELEMENT */ ||\n          node.type === 11 /* NodeTypes.FOR */ ||\n          node.type === 10 /* NodeTypes.IF_BRANCH */) {\n          // perform the transform on node exit so that all expressions have already\n          // been processed.\n          return () => {\n              const children = node.children;\n              let currentContainer = undefined;\n              let hasText = false;\n              for (let i = 0; i < children.length; i++) {\n                  const child = children[i];\n                  if (isText$1(child)) {\n                      hasText = true;\n                      for (let j = i + 1; j < children.length; j++) {\n                          const next = children[j];\n                          if (isText$1(next)) {\n                              if (!currentContainer) {\n                                  currentContainer = children[i] = createCompoundExpression([child], child.loc);\n                              }\n                              // merge adjacent text node into current\n                              currentContainer.children.push(` + `, next);\n                              children.splice(j, 1);\n                              j--;\n                          }\n                          else {\n                              currentContainer = undefined;\n                              break;\n                          }\n                      }\n                  }\n              }\n              if (!hasText ||\n                  // if this is a plain element with a single text child, leave it\n                  // as-is since the runtime has dedicated fast path for this by directly\n                  // setting textContent of the element.\n                  // for component root it's always normalized anyway.\n                  (children.length === 1 &&\n                      (node.type === 0 /* NodeTypes.ROOT */ ||\n                          (node.type === 1 /* NodeTypes.ELEMENT */ &&\n                              node.tagType === 0 /* ElementTypes.ELEMENT */ &&\n                              // #3756\n                              // custom directives can potentially add DOM elements arbitrarily,\n                              // we need to avoid setting textContent of the element at runtime\n                              // to avoid accidentally overwriting the DOM elements added\n                              // by the user through custom directives.\n                              !node.props.find(p => p.type === 7 /* NodeTypes.DIRECTIVE */ &&\n                                  !context.directiveTransforms[p.name]) &&\n                              // in compat mode, <template> tags with no special directives\n                              // will be rendered as a fragment so its children must be\n                              // converted into vnodes.\n                              !(node.tag === 'template'))))) {\n                  return;\n              }\n              // pre-convert text nodes into createTextVNode(text) calls to avoid\n              // runtime normalization.\n              for (let i = 0; i < children.length; i++) {\n                  const child = children[i];\n                  if (isText$1(child) || child.type === 8 /* NodeTypes.COMPOUND_EXPRESSION */) {\n                      const callArgs = [];\n                      // createTextVNode defaults to single whitespace, so if it is a\n                      // single space the code could be an empty call to save bytes.\n                      if (child.type !== 2 /* NodeTypes.TEXT */ || child.content !== ' ') {\n                          callArgs.push(child);\n                      }\n                      // mark dynamic text with flag so it gets patched inside a block\n                      if (!context.ssr &&\n                          getConstantType(child, context) === 0 /* ConstantTypes.NOT_CONSTANT */) {\n                          callArgs.push(1 /* PatchFlags.TEXT */ +\n                              (` /* ${PatchFlagNames[1 /* PatchFlags.TEXT */]} */` ));\n                      }\n                      children[i] = {\n                          type: 12 /* NodeTypes.TEXT_CALL */,\n                          content: child,\n                          loc: child.loc,\n                          codegenNode: createCallExpression(context.helper(CREATE_TEXT), callArgs)\n                      };\n                  }\n              }\n          };\n      }\n  };\n\n  const seen$1 = new WeakSet();\n  const transformOnce = (node, context) => {\n      if (node.type === 1 /* NodeTypes.ELEMENT */ && findDir(node, 'once', true)) {\n          if (seen$1.has(node) || context.inVOnce) {\n              return;\n          }\n          seen$1.add(node);\n          context.inVOnce = true;\n          context.helper(SET_BLOCK_TRACKING);\n          return () => {\n              context.inVOnce = false;\n              const cur = context.currentNode;\n              if (cur.codegenNode) {\n                  cur.codegenNode = context.cache(cur.codegenNode, true /* isVNode */);\n              }\n          };\n      }\n  };\n\n  const transformModel$1 = (dir, node, context) => {\n      const { exp, arg } = dir;\n      if (!exp) {\n          context.onError(createCompilerError(41 /* ErrorCodes.X_V_MODEL_NO_EXPRESSION */, dir.loc));\n          return createTransformProps();\n      }\n      const rawExp = exp.loc.source;\n      const expString = exp.type === 4 /* NodeTypes.SIMPLE_EXPRESSION */ ? exp.content : rawExp;\n      // im SFC <script setup> inline mode, the exp may have been transformed into\n      // _unref(exp)\n      const bindingType = context.bindingMetadata[rawExp];\n      // check props\n      if (bindingType === \"props\" /* BindingTypes.PROPS */ ||\n          bindingType === \"props-aliased\" /* BindingTypes.PROPS_ALIASED */) {\n          context.onError(createCompilerError(44 /* ErrorCodes.X_V_MODEL_ON_PROPS */, exp.loc));\n          return createTransformProps();\n      }\n      const maybeRef = !true  ;\n      if (!expString.trim() ||\n          (!isMemberExpression(expString) && !maybeRef)) {\n          context.onError(createCompilerError(42 /* ErrorCodes.X_V_MODEL_MALFORMED_EXPRESSION */, exp.loc));\n          return createTransformProps();\n      }\n      const propName = arg ? arg : createSimpleExpression('modelValue', true);\n      const eventName = arg\n          ? isStaticExp(arg)\n              ? `onUpdate:${camelize(arg.content)}`\n              : createCompoundExpression(['\"onUpdate:\" + ', arg])\n          : `onUpdate:modelValue`;\n      let assignmentExp;\n      const eventArg = context.isTS ? `($event: any)` : `$event`;\n      {\n          assignmentExp = createCompoundExpression([\n              `${eventArg} => ((`,\n              exp,\n              `) = $event)`\n          ]);\n      }\n      const props = [\n          // modelValue: foo\n          createObjectProperty(propName, dir.exp),\n          // \"onUpdate:modelValue\": $event => (foo = $event)\n          createObjectProperty(eventName, assignmentExp)\n      ];\n      // modelModifiers: { foo: true, \"bar-baz\": true }\n      if (dir.modifiers.length && node.tagType === 1 /* ElementTypes.COMPONENT */) {\n          const modifiers = dir.modifiers\n              .map(m => (isSimpleIdentifier(m) ? m : JSON.stringify(m)) + `: true`)\n              .join(`, `);\n          const modifiersKey = arg\n              ? isStaticExp(arg)\n                  ? `${arg.content}Modifiers`\n                  : createCompoundExpression([arg, ' + \"Modifiers\"'])\n              : `modelModifiers`;\n          props.push(createObjectProperty(modifiersKey, createSimpleExpression(`{ ${modifiers} }`, false, dir.loc, 2 /* ConstantTypes.CAN_HOIST */)));\n      }\n      return createTransformProps(props);\n  };\n  function createTransformProps(props = []) {\n      return { props };\n  }\n\n  const validDivisionCharRE = /[\\w).+\\-_$\\]]/;\n  const transformFilter = (node, context) => {\n      if (!isCompatEnabled(\"COMPILER_FILTER\" /* CompilerDeprecationTypes.COMPILER_FILTERS */, context)) {\n          return;\n      }\n      if (node.type === 5 /* NodeTypes.INTERPOLATION */) {\n          // filter rewrite is applied before expression transform so only\n          // simple expressions are possible at this stage\n          rewriteFilter(node.content, context);\n      }\n      if (node.type === 1 /* NodeTypes.ELEMENT */) {\n          node.props.forEach((prop) => {\n              if (prop.type === 7 /* NodeTypes.DIRECTIVE */ &&\n                  prop.name !== 'for' &&\n                  prop.exp) {\n                  rewriteFilter(prop.exp, context);\n              }\n          });\n      }\n  };\n  function rewriteFilter(node, context) {\n      if (node.type === 4 /* NodeTypes.SIMPLE_EXPRESSION */) {\n          parseFilter(node, context);\n      }\n      else {\n          for (let i = 0; i < node.children.length; i++) {\n              const child = node.children[i];\n              if (typeof child !== 'object')\n                  continue;\n              if (child.type === 4 /* NodeTypes.SIMPLE_EXPRESSION */) {\n                  parseFilter(child, context);\n              }\n              else if (child.type === 8 /* NodeTypes.COMPOUND_EXPRESSION */) {\n                  rewriteFilter(node, context);\n              }\n              else if (child.type === 5 /* NodeTypes.INTERPOLATION */) {\n                  rewriteFilter(child.content, context);\n              }\n          }\n      }\n  }\n  function parseFilter(node, context) {\n      const exp = node.content;\n      let inSingle = false;\n      let inDouble = false;\n      let inTemplateString = false;\n      let inRegex = false;\n      let curly = 0;\n      let square = 0;\n      let paren = 0;\n      let lastFilterIndex = 0;\n      let c, prev, i, expression, filters = [];\n      for (i = 0; i < exp.length; i++) {\n          prev = c;\n          c = exp.charCodeAt(i);\n          if (inSingle) {\n              if (c === 0x27 && prev !== 0x5c)\n                  inSingle = false;\n          }\n          else if (inDouble) {\n              if (c === 0x22 && prev !== 0x5c)\n                  inDouble = false;\n          }\n          else if (inTemplateString) {\n              if (c === 0x60 && prev !== 0x5c)\n                  inTemplateString = false;\n          }\n          else if (inRegex) {\n              if (c === 0x2f && prev !== 0x5c)\n                  inRegex = false;\n          }\n          else if (c === 0x7c && // pipe\n              exp.charCodeAt(i + 1) !== 0x7c &&\n              exp.charCodeAt(i - 1) !== 0x7c &&\n              !curly &&\n              !square &&\n              !paren) {\n              if (expression === undefined) {\n                  // first filter, end of expression\n                  lastFilterIndex = i + 1;\n                  expression = exp.slice(0, i).trim();\n              }\n              else {\n                  pushFilter();\n              }\n          }\n          else {\n              switch (c) {\n                  case 0x22:\n                      inDouble = true;\n                      break; // \"\n                  case 0x27:\n                      inSingle = true;\n                      break; // '\n                  case 0x60:\n                      inTemplateString = true;\n                      break; // `\n                  case 0x28:\n                      paren++;\n                      break; // (\n                  case 0x29:\n                      paren--;\n                      break; // )\n                  case 0x5b:\n                      square++;\n                      break; // [\n                  case 0x5d:\n                      square--;\n                      break; // ]\n                  case 0x7b:\n                      curly++;\n                      break; // {\n                  case 0x7d:\n                      curly--;\n                      break; // }\n              }\n              if (c === 0x2f) {\n                  // /\n                  let j = i - 1;\n                  let p;\n                  // find first non-whitespace prev char\n                  for (; j >= 0; j--) {\n                      p = exp.charAt(j);\n                      if (p !== ' ')\n                          break;\n                  }\n                  if (!p || !validDivisionCharRE.test(p)) {\n                      inRegex = true;\n                  }\n              }\n          }\n      }\n      if (expression === undefined) {\n          expression = exp.slice(0, i).trim();\n      }\n      else if (lastFilterIndex !== 0) {\n          pushFilter();\n      }\n      function pushFilter() {\n          filters.push(exp.slice(lastFilterIndex, i).trim());\n          lastFilterIndex = i + 1;\n      }\n      if (filters.length) {\n          warnDeprecation(\"COMPILER_FILTER\" /* CompilerDeprecationTypes.COMPILER_FILTERS */, context, node.loc);\n          for (i = 0; i < filters.length; i++) {\n              expression = wrapFilter(expression, filters[i], context);\n          }\n          node.content = expression;\n      }\n  }\n  function wrapFilter(exp, filter, context) {\n      context.helper(RESOLVE_FILTER);\n      const i = filter.indexOf('(');\n      if (i < 0) {\n          context.filters.add(filter);\n          return `${toValidAssetId(filter, 'filter')}(${exp})`;\n      }\n      else {\n          const name = filter.slice(0, i);\n          const args = filter.slice(i + 1);\n          context.filters.add(name);\n          return `${toValidAssetId(name, 'filter')}(${exp}${args !== ')' ? ',' + args : args}`;\n      }\n  }\n\n  const seen = new WeakSet();\n  const transformMemo = (node, context) => {\n      if (node.type === 1 /* NodeTypes.ELEMENT */) {\n          const dir = findDir(node, 'memo');\n          if (!dir || seen.has(node)) {\n              return;\n          }\n          seen.add(node);\n          return () => {\n              const codegenNode = node.codegenNode ||\n                  context.currentNode.codegenNode;\n              if (codegenNode && codegenNode.type === 13 /* NodeTypes.VNODE_CALL */) {\n                  // non-component sub tree should be turned into a block\n                  if (node.tagType !== 1 /* ElementTypes.COMPONENT */) {\n                      makeBlock(codegenNode, context);\n                  }\n                  node.codegenNode = createCallExpression(context.helper(WITH_MEMO), [\n                      dir.exp,\n                      createFunctionExpression(undefined, codegenNode),\n                      `_cache`,\n                      String(context.cached++)\n                  ]);\n              }\n          };\n      }\n  };\n\n  function getBaseTransformPreset(prefixIdentifiers) {\n      return [\n          [\n              transformOnce,\n              transformIf,\n              transformMemo,\n              transformFor,\n              ...([transformFilter] ),\n              ...([transformExpression]\n                      ),\n              transformSlotOutlet,\n              transformElement,\n              trackSlotScopes,\n              transformText\n          ],\n          {\n              on: transformOn$1,\n              bind: transformBind,\n              model: transformModel$1\n          }\n      ];\n  }\n  // we name it `baseCompile` so that higher order compilers like\n  // @vue/compiler-dom can export `compile` while re-exporting everything else.\n  function baseCompile(template, options = {}) {\n      const onError = options.onError || defaultOnError;\n      const isModuleMode = options.mode === 'module';\n      /* istanbul ignore if */\n      {\n          if (options.prefixIdentifiers === true) {\n              onError(createCompilerError(47 /* ErrorCodes.X_PREFIX_ID_NOT_SUPPORTED */));\n          }\n          else if (isModuleMode) {\n              onError(createCompilerError(48 /* ErrorCodes.X_MODULE_MODE_NOT_SUPPORTED */));\n          }\n      }\n      const prefixIdentifiers = !true ;\n      if (options.cacheHandlers) {\n          onError(createCompilerError(49 /* ErrorCodes.X_CACHE_HANDLER_NOT_SUPPORTED */));\n      }\n      if (options.scopeId && !isModuleMode) {\n          onError(createCompilerError(50 /* ErrorCodes.X_SCOPE_ID_NOT_SUPPORTED */));\n      }\n      const ast = isString(template) ? baseParse(template, options) : template;\n      const [nodeTransforms, directiveTransforms] = getBaseTransformPreset();\n      transform(ast, extend({}, options, {\n          prefixIdentifiers,\n          nodeTransforms: [\n              ...nodeTransforms,\n              ...(options.nodeTransforms || []) // user transforms\n          ],\n          directiveTransforms: extend({}, directiveTransforms, options.directiveTransforms || {} // user transforms\n          )\n      }));\n      return generate(ast, extend({}, options, {\n          prefixIdentifiers\n      }));\n  }\n\n  const noopDirectiveTransform = () => ({ props: [] });\n\n  const V_MODEL_RADIO = Symbol(`vModelRadio` );\n  const V_MODEL_CHECKBOX = Symbol(`vModelCheckbox` );\n  const V_MODEL_TEXT = Symbol(`vModelText` );\n  const V_MODEL_SELECT = Symbol(`vModelSelect` );\n  const V_MODEL_DYNAMIC = Symbol(`vModelDynamic` );\n  const V_ON_WITH_MODIFIERS = Symbol(`vOnModifiersGuard` );\n  const V_ON_WITH_KEYS = Symbol(`vOnKeysGuard` );\n  const V_SHOW = Symbol(`vShow` );\n  const TRANSITION = Symbol(`Transition` );\n  const TRANSITION_GROUP = Symbol(`TransitionGroup` );\n  registerRuntimeHelpers({\n      [V_MODEL_RADIO]: `vModelRadio`,\n      [V_MODEL_CHECKBOX]: `vModelCheckbox`,\n      [V_MODEL_TEXT]: `vModelText`,\n      [V_MODEL_SELECT]: `vModelSelect`,\n      [V_MODEL_DYNAMIC]: `vModelDynamic`,\n      [V_ON_WITH_MODIFIERS]: `withModifiers`,\n      [V_ON_WITH_KEYS]: `withKeys`,\n      [V_SHOW]: `vShow`,\n      [TRANSITION]: `Transition`,\n      [TRANSITION_GROUP]: `TransitionGroup`\n  });\n\n  /* eslint-disable no-restricted-globals */\n  let decoder;\n  function decodeHtmlBrowser(raw, asAttr = false) {\n      if (!decoder) {\n          decoder = document.createElement('div');\n      }\n      if (asAttr) {\n          decoder.innerHTML = `<div foo=\"${raw.replace(/\"/g, '&quot;')}\">`;\n          return decoder.children[0].getAttribute('foo');\n      }\n      else {\n          decoder.innerHTML = raw;\n          return decoder.textContent;\n      }\n  }\n\n  const isRawTextContainer = /*#__PURE__*/ makeMap('style,iframe,script,noscript', true);\n  const parserOptions = {\n      isVoidTag,\n      isNativeTag: tag => isHTMLTag(tag) || isSVGTag(tag),\n      isPreTag: tag => tag === 'pre',\n      decodeEntities: decodeHtmlBrowser ,\n      isBuiltInComponent: (tag) => {\n          if (isBuiltInType(tag, `Transition`)) {\n              return TRANSITION;\n          }\n          else if (isBuiltInType(tag, `TransitionGroup`)) {\n              return TRANSITION_GROUP;\n          }\n      },\n      // https://html.spec.whatwg.org/multipage/parsing.html#tree-construction-dispatcher\n      getNamespace(tag, parent) {\n          let ns = parent ? parent.ns : 0 /* DOMNamespaces.HTML */;\n          if (parent && ns === 2 /* DOMNamespaces.MATH_ML */) {\n              if (parent.tag === 'annotation-xml') {\n                  if (tag === 'svg') {\n                      return 1 /* DOMNamespaces.SVG */;\n                  }\n                  if (parent.props.some(a => a.type === 6 /* NodeTypes.ATTRIBUTE */ &&\n                      a.name === 'encoding' &&\n                      a.value != null &&\n                      (a.value.content === 'text/html' ||\n                          a.value.content === 'application/xhtml+xml'))) {\n                      ns = 0 /* DOMNamespaces.HTML */;\n                  }\n              }\n              else if (/^m(?:[ions]|text)$/.test(parent.tag) &&\n                  tag !== 'mglyph' &&\n                  tag !== 'malignmark') {\n                  ns = 0 /* DOMNamespaces.HTML */;\n              }\n          }\n          else if (parent && ns === 1 /* DOMNamespaces.SVG */) {\n              if (parent.tag === 'foreignObject' ||\n                  parent.tag === 'desc' ||\n                  parent.tag === 'title') {\n                  ns = 0 /* DOMNamespaces.HTML */;\n              }\n          }\n          if (ns === 0 /* DOMNamespaces.HTML */) {\n              if (tag === 'svg') {\n                  return 1 /* DOMNamespaces.SVG */;\n              }\n              if (tag === 'math') {\n                  return 2 /* DOMNamespaces.MATH_ML */;\n              }\n          }\n          return ns;\n      },\n      // https://html.spec.whatwg.org/multipage/parsing.html#parsing-html-fragments\n      getTextMode({ tag, ns }) {\n          if (ns === 0 /* DOMNamespaces.HTML */) {\n              if (tag === 'textarea' || tag === 'title') {\n                  return 1 /* TextModes.RCDATA */;\n              }\n              if (isRawTextContainer(tag)) {\n                  return 2 /* TextModes.RAWTEXT */;\n              }\n          }\n          return 0 /* TextModes.DATA */;\n      }\n  };\n\n  // Parse inline CSS strings for static style attributes into an object.\n  // This is a NodeTransform since it works on the static `style` attribute and\n  // converts it into a dynamic equivalent:\n  // style=\"color: red\" -> :style='{ \"color\": \"red\" }'\n  // It is then processed by `transformElement` and included in the generated\n  // props.\n  const transformStyle = node => {\n      if (node.type === 1 /* NodeTypes.ELEMENT */) {\n          node.props.forEach((p, i) => {\n              if (p.type === 6 /* NodeTypes.ATTRIBUTE */ && p.name === 'style' && p.value) {\n                  // replace p with an expression node\n                  node.props[i] = {\n                      type: 7 /* NodeTypes.DIRECTIVE */,\n                      name: `bind`,\n                      arg: createSimpleExpression(`style`, true, p.loc),\n                      exp: parseInlineCSS(p.value.content, p.loc),\n                      modifiers: [],\n                      loc: p.loc\n                  };\n              }\n          });\n      }\n  };\n  const parseInlineCSS = (cssText, loc) => {\n      const normalized = parseStringStyle(cssText);\n      return createSimpleExpression(JSON.stringify(normalized), false, loc, 3 /* ConstantTypes.CAN_STRINGIFY */);\n  };\n\n  function createDOMCompilerError(code, loc) {\n      return createCompilerError(code, loc, DOMErrorMessages );\n  }\n  const DOMErrorMessages = {\n      [51 /* DOMErrorCodes.X_V_HTML_NO_EXPRESSION */]: `v-html is missing expression.`,\n      [52 /* DOMErrorCodes.X_V_HTML_WITH_CHILDREN */]: `v-html will override element children.`,\n      [53 /* DOMErrorCodes.X_V_TEXT_NO_EXPRESSION */]: `v-text is missing expression.`,\n      [54 /* DOMErrorCodes.X_V_TEXT_WITH_CHILDREN */]: `v-text will override element children.`,\n      [55 /* DOMErrorCodes.X_V_MODEL_ON_INVALID_ELEMENT */]: `v-model can only be used on <input>, <textarea> and <select> elements.`,\n      [56 /* DOMErrorCodes.X_V_MODEL_ARG_ON_ELEMENT */]: `v-model argument is not supported on plain elements.`,\n      [57 /* DOMErrorCodes.X_V_MODEL_ON_FILE_INPUT_ELEMENT */]: `v-model cannot be used on file inputs since they are read-only. Use a v-on:change listener instead.`,\n      [58 /* DOMErrorCodes.X_V_MODEL_UNNECESSARY_VALUE */]: `Unnecessary value binding used alongside v-model. It will interfere with v-model's behavior.`,\n      [59 /* DOMErrorCodes.X_V_SHOW_NO_EXPRESSION */]: `v-show is missing expression.`,\n      [60 /* DOMErrorCodes.X_TRANSITION_INVALID_CHILDREN */]: `<Transition> expects exactly one child element or component.`,\n      [61 /* DOMErrorCodes.X_IGNORED_SIDE_EFFECT_TAG */]: `Tags with side effect (<script> and <style>) are ignored in client component templates.`\n  };\n\n  const transformVHtml = (dir, node, context) => {\n      const { exp, loc } = dir;\n      if (!exp) {\n          context.onError(createDOMCompilerError(51 /* DOMErrorCodes.X_V_HTML_NO_EXPRESSION */, loc));\n      }\n      if (node.children.length) {\n          context.onError(createDOMCompilerError(52 /* DOMErrorCodes.X_V_HTML_WITH_CHILDREN */, loc));\n          node.children.length = 0;\n      }\n      return {\n          props: [\n              createObjectProperty(createSimpleExpression(`innerHTML`, true, loc), exp || createSimpleExpression('', true))\n          ]\n      };\n  };\n\n  const transformVText = (dir, node, context) => {\n      const { exp, loc } = dir;\n      if (!exp) {\n          context.onError(createDOMCompilerError(53 /* DOMErrorCodes.X_V_TEXT_NO_EXPRESSION */, loc));\n      }\n      if (node.children.length) {\n          context.onError(createDOMCompilerError(54 /* DOMErrorCodes.X_V_TEXT_WITH_CHILDREN */, loc));\n          node.children.length = 0;\n      }\n      return {\n          props: [\n              createObjectProperty(createSimpleExpression(`textContent`, true), exp\n                  ? getConstantType(exp, context) > 0\n                      ? exp\n                      : createCallExpression(context.helperString(TO_DISPLAY_STRING), [exp], loc)\n                  : createSimpleExpression('', true))\n          ]\n      };\n  };\n\n  const transformModel = (dir, node, context) => {\n      const baseResult = transformModel$1(dir, node, context);\n      // base transform has errors OR component v-model (only need props)\n      if (!baseResult.props.length || node.tagType === 1 /* ElementTypes.COMPONENT */) {\n          return baseResult;\n      }\n      if (dir.arg) {\n          context.onError(createDOMCompilerError(56 /* DOMErrorCodes.X_V_MODEL_ARG_ON_ELEMENT */, dir.arg.loc));\n      }\n      function checkDuplicatedValue() {\n          const value = findProp(node, 'value');\n          if (value) {\n              context.onError(createDOMCompilerError(58 /* DOMErrorCodes.X_V_MODEL_UNNECESSARY_VALUE */, value.loc));\n          }\n      }\n      const { tag } = node;\n      const isCustomElement = context.isCustomElement(tag);\n      if (tag === 'input' ||\n          tag === 'textarea' ||\n          tag === 'select' ||\n          isCustomElement) {\n          let directiveToUse = V_MODEL_TEXT;\n          let isInvalidType = false;\n          if (tag === 'input' || isCustomElement) {\n              const type = findProp(node, `type`);\n              if (type) {\n                  if (type.type === 7 /* NodeTypes.DIRECTIVE */) {\n                      // :type=\"foo\"\n                      directiveToUse = V_MODEL_DYNAMIC;\n                  }\n                  else if (type.value) {\n                      switch (type.value.content) {\n                          case 'radio':\n                              directiveToUse = V_MODEL_RADIO;\n                              break;\n                          case 'checkbox':\n                              directiveToUse = V_MODEL_CHECKBOX;\n                              break;\n                          case 'file':\n                              isInvalidType = true;\n                              context.onError(createDOMCompilerError(57 /* DOMErrorCodes.X_V_MODEL_ON_FILE_INPUT_ELEMENT */, dir.loc));\n                              break;\n                          default:\n                              // text type\n                              checkDuplicatedValue();\n                              break;\n                      }\n                  }\n              }\n              else if (hasDynamicKeyVBind(node)) {\n                  // element has bindings with dynamic keys, which can possibly contain\n                  // \"type\".\n                  directiveToUse = V_MODEL_DYNAMIC;\n              }\n              else {\n                  // text type\n                  checkDuplicatedValue();\n              }\n          }\n          else if (tag === 'select') {\n              directiveToUse = V_MODEL_SELECT;\n          }\n          else {\n              // textarea\n              checkDuplicatedValue();\n          }\n          // inject runtime directive\n          // by returning the helper symbol via needRuntime\n          // the import will replaced a resolveDirective call.\n          if (!isInvalidType) {\n              baseResult.needRuntime = context.helper(directiveToUse);\n          }\n      }\n      else {\n          context.onError(createDOMCompilerError(55 /* DOMErrorCodes.X_V_MODEL_ON_INVALID_ELEMENT */, dir.loc));\n      }\n      // native vmodel doesn't need the `modelValue` props since they are also\n      // passed to the runtime as `binding.value`. removing it reduces code size.\n      baseResult.props = baseResult.props.filter(p => !(p.key.type === 4 /* NodeTypes.SIMPLE_EXPRESSION */ &&\n          p.key.content === 'modelValue'));\n      return baseResult;\n  };\n\n  const isEventOptionModifier = /*#__PURE__*/ makeMap(`passive,once,capture`);\n  const isNonKeyModifier = /*#__PURE__*/ makeMap(\n  // event propagation management\n`stop,prevent,self,`   +\n      // system modifiers + exact\n      `ctrl,shift,alt,meta,exact,` +\n      // mouse\n      `middle`);\n  // left & right could be mouse or key modifiers based on event type\n  const maybeKeyModifier = /*#__PURE__*/ makeMap('left,right');\n  const isKeyboardEvent = /*#__PURE__*/ makeMap(`onkeyup,onkeydown,onkeypress`, true);\n  const resolveModifiers = (key, modifiers, context, loc) => {\n      const keyModifiers = [];\n      const nonKeyModifiers = [];\n      const eventOptionModifiers = [];\n      for (let i = 0; i < modifiers.length; i++) {\n          const modifier = modifiers[i];\n          if (modifier === 'native' &&\n              checkCompatEnabled(\"COMPILER_V_ON_NATIVE\" /* CompilerDeprecationTypes.COMPILER_V_ON_NATIVE */, context, loc)) {\n              eventOptionModifiers.push(modifier);\n          }\n          else if (isEventOptionModifier(modifier)) {\n              // eventOptionModifiers: modifiers for addEventListener() options,\n              // e.g. .passive & .capture\n              eventOptionModifiers.push(modifier);\n          }\n          else {\n              // runtimeModifiers: modifiers that needs runtime guards\n              if (maybeKeyModifier(modifier)) {\n                  if (isStaticExp(key)) {\n                      if (isKeyboardEvent(key.content)) {\n                          keyModifiers.push(modifier);\n                      }\n                      else {\n                          nonKeyModifiers.push(modifier);\n                      }\n                  }\n                  else {\n                      keyModifiers.push(modifier);\n                      nonKeyModifiers.push(modifier);\n                  }\n              }\n              else {\n                  if (isNonKeyModifier(modifier)) {\n                      nonKeyModifiers.push(modifier);\n                  }\n                  else {\n                      keyModifiers.push(modifier);\n                  }\n              }\n          }\n      }\n      return {\n          keyModifiers,\n          nonKeyModifiers,\n          eventOptionModifiers\n      };\n  };\n  const transformClick = (key, event) => {\n      const isStaticClick = isStaticExp(key) && key.content.toLowerCase() === 'onclick';\n      return isStaticClick\n          ? createSimpleExpression(event, true)\n          : key.type !== 4 /* NodeTypes.SIMPLE_EXPRESSION */\n              ? createCompoundExpression([\n                  `(`,\n                  key,\n                  `) === \"onClick\" ? \"${event}\" : (`,\n                  key,\n                  `)`\n              ])\n              : key;\n  };\n  const transformOn = (dir, node, context) => {\n      return transformOn$1(dir, node, context, baseResult => {\n          const { modifiers } = dir;\n          if (!modifiers.length)\n              return baseResult;\n          let { key, value: handlerExp } = baseResult.props[0];\n          const { keyModifiers, nonKeyModifiers, eventOptionModifiers } = resolveModifiers(key, modifiers, context, dir.loc);\n          // normalize click.right and click.middle since they don't actually fire\n          if (nonKeyModifiers.includes('right')) {\n              key = transformClick(key, `onContextmenu`);\n          }\n          if (nonKeyModifiers.includes('middle')) {\n              key = transformClick(key, `onMouseup`);\n          }\n          if (nonKeyModifiers.length) {\n              handlerExp = createCallExpression(context.helper(V_ON_WITH_MODIFIERS), [\n                  handlerExp,\n                  JSON.stringify(nonKeyModifiers)\n              ]);\n          }\n          if (keyModifiers.length &&\n              // if event name is dynamic, always wrap with keys guard\n              (!isStaticExp(key) || isKeyboardEvent(key.content))) {\n              handlerExp = createCallExpression(context.helper(V_ON_WITH_KEYS), [\n                  handlerExp,\n                  JSON.stringify(keyModifiers)\n              ]);\n          }\n          if (eventOptionModifiers.length) {\n              const modifierPostfix = eventOptionModifiers.map(capitalize).join('');\n              key = isStaticExp(key)\n                  ? createSimpleExpression(`${key.content}${modifierPostfix}`, true)\n                  : createCompoundExpression([`(`, key, `) + \"${modifierPostfix}\"`]);\n          }\n          return {\n              props: [createObjectProperty(key, handlerExp)]\n          };\n      });\n  };\n\n  const transformShow = (dir, node, context) => {\n      const { exp, loc } = dir;\n      if (!exp) {\n          context.onError(createDOMCompilerError(59 /* DOMErrorCodes.X_V_SHOW_NO_EXPRESSION */, loc));\n      }\n      return {\n          props: [],\n          needRuntime: context.helper(V_SHOW)\n      };\n  };\n\n  const transformTransition = (node, context) => {\n      if (node.type === 1 /* NodeTypes.ELEMENT */ &&\n          node.tagType === 1 /* ElementTypes.COMPONENT */) {\n          const component = context.isBuiltInComponent(node.tag);\n          if (component === TRANSITION) {\n              return () => {\n                  if (!node.children.length) {\n                      return;\n                  }\n                  // warn multiple transition children\n                  if (hasMultipleChildren(node)) {\n                      context.onError(createDOMCompilerError(60 /* DOMErrorCodes.X_TRANSITION_INVALID_CHILDREN */, {\n                          start: node.children[0].loc.start,\n                          end: node.children[node.children.length - 1].loc.end,\n                          source: ''\n                      }));\n                  }\n                  // check if it's s single child w/ v-show\n                  // if yes, inject \"persisted: true\" to the transition props\n                  const child = node.children[0];\n                  if (child.type === 1 /* NodeTypes.ELEMENT */) {\n                      for (const p of child.props) {\n                          if (p.type === 7 /* NodeTypes.DIRECTIVE */ && p.name === 'show') {\n                              node.props.push({\n                                  type: 6 /* NodeTypes.ATTRIBUTE */,\n                                  name: 'persisted',\n                                  value: undefined,\n                                  loc: node.loc\n                              });\n                          }\n                      }\n                  }\n              };\n          }\n      }\n  };\n  function hasMultipleChildren(node) {\n      // #1352 filter out potential comment nodes.\n      const children = (node.children = node.children.filter(c => c.type !== 3 /* NodeTypes.COMMENT */ &&\n          !(c.type === 2 /* NodeTypes.TEXT */ && !c.content.trim())));\n      const child = children[0];\n      return (children.length !== 1 ||\n          child.type === 11 /* NodeTypes.FOR */ ||\n          (child.type === 9 /* NodeTypes.IF */ && child.branches.some(hasMultipleChildren)));\n  }\n\n  const ignoreSideEffectTags = (node, context) => {\n      if (node.type === 1 /* NodeTypes.ELEMENT */ &&\n          node.tagType === 0 /* ElementTypes.ELEMENT */ &&\n          (node.tag === 'script' || node.tag === 'style')) {\n          context.onError(createDOMCompilerError(61 /* DOMErrorCodes.X_IGNORED_SIDE_EFFECT_TAG */, node.loc));\n          context.removeNode();\n      }\n  };\n\n  const DOMNodeTransforms = [\n      transformStyle,\n      ...([transformTransition] )\n  ];\n  const DOMDirectiveTransforms = {\n      cloak: noopDirectiveTransform,\n      html: transformVHtml,\n      text: transformVText,\n      model: transformModel,\n      on: transformOn,\n      show: transformShow\n  };\n  function compile(template, options = {}) {\n      return baseCompile(template, extend({}, parserOptions, options, {\n          nodeTransforms: [\n              // ignore <script> and <tag>\n              // this is not put inside DOMNodeTransforms because that list is used\n              // by compiler-ssr to generate vnode fallback branches\n              ignoreSideEffectTags,\n              ...DOMNodeTransforms,\n              ...(options.nodeTransforms || [])\n          ],\n          directiveTransforms: extend({}, DOMDirectiveTransforms, options.directiveTransforms || {}),\n          transformHoist: null \n      }));\n  }\n  function parse(template, options = {}) {\n      return baseParse(template, extend({}, parserOptions, options));\n  }\n\n  exports.BASE_TRANSITION = BASE_TRANSITION;\n  exports.CAMELIZE = CAMELIZE;\n  exports.CAPITALIZE = CAPITALIZE;\n  exports.CREATE_BLOCK = CREATE_BLOCK;\n  exports.CREATE_COMMENT = CREATE_COMMENT;\n  exports.CREATE_ELEMENT_BLOCK = CREATE_ELEMENT_BLOCK;\n  exports.CREATE_ELEMENT_VNODE = CREATE_ELEMENT_VNODE;\n  exports.CREATE_SLOTS = CREATE_SLOTS;\n  exports.CREATE_STATIC = CREATE_STATIC;\n  exports.CREATE_TEXT = CREATE_TEXT;\n  exports.CREATE_VNODE = CREATE_VNODE;\n  exports.DOMDirectiveTransforms = DOMDirectiveTransforms;\n  exports.DOMNodeTransforms = DOMNodeTransforms;\n  exports.FRAGMENT = FRAGMENT;\n  exports.GUARD_REACTIVE_PROPS = GUARD_REACTIVE_PROPS;\n  exports.IS_MEMO_SAME = IS_MEMO_SAME;\n  exports.IS_REF = IS_REF;\n  exports.KEEP_ALIVE = KEEP_ALIVE;\n  exports.MERGE_PROPS = MERGE_PROPS;\n  exports.NORMALIZE_CLASS = NORMALIZE_CLASS;\n  exports.NORMALIZE_PROPS = NORMALIZE_PROPS;\n  exports.NORMALIZE_STYLE = NORMALIZE_STYLE;\n  exports.OPEN_BLOCK = OPEN_BLOCK;\n  exports.POP_SCOPE_ID = POP_SCOPE_ID;\n  exports.PUSH_SCOPE_ID = PUSH_SCOPE_ID;\n  exports.RENDER_LIST = RENDER_LIST;\n  exports.RENDER_SLOT = RENDER_SLOT;\n  exports.RESOLVE_COMPONENT = RESOLVE_COMPONENT;\n  exports.RESOLVE_DIRECTIVE = RESOLVE_DIRECTIVE;\n  exports.RESOLVE_DYNAMIC_COMPONENT = RESOLVE_DYNAMIC_COMPONENT;\n  exports.RESOLVE_FILTER = RESOLVE_FILTER;\n  exports.SET_BLOCK_TRACKING = SET_BLOCK_TRACKING;\n  exports.SUSPENSE = SUSPENSE;\n  exports.TELEPORT = TELEPORT;\n  exports.TO_DISPLAY_STRING = TO_DISPLAY_STRING;\n  exports.TO_HANDLERS = TO_HANDLERS;\n  exports.TO_HANDLER_KEY = TO_HANDLER_KEY;\n  exports.TRANSITION = TRANSITION;\n  exports.TRANSITION_GROUP = TRANSITION_GROUP;\n  exports.UNREF = UNREF;\n  exports.V_MODEL_CHECKBOX = V_MODEL_CHECKBOX;\n  exports.V_MODEL_DYNAMIC = V_MODEL_DYNAMIC;\n  exports.V_MODEL_RADIO = V_MODEL_RADIO;\n  exports.V_MODEL_SELECT = V_MODEL_SELECT;\n  exports.V_MODEL_TEXT = V_MODEL_TEXT;\n  exports.V_ON_WITH_KEYS = V_ON_WITH_KEYS;\n  exports.V_ON_WITH_MODIFIERS = V_ON_WITH_MODIFIERS;\n  exports.V_SHOW = V_SHOW;\n  exports.WITH_CTX = WITH_CTX;\n  exports.WITH_DIRECTIVES = WITH_DIRECTIVES;\n  exports.WITH_MEMO = WITH_MEMO;\n  exports.advancePositionWithClone = advancePositionWithClone;\n  exports.advancePositionWithMutation = advancePositionWithMutation;\n  exports.assert = assert;\n  exports.baseCompile = baseCompile;\n  exports.baseParse = baseParse;\n  exports.buildDirectiveArgs = buildDirectiveArgs;\n  exports.buildProps = buildProps;\n  exports.buildSlots = buildSlots;\n  exports.checkCompatEnabled = checkCompatEnabled;\n  exports.compile = compile;\n  exports.createArrayExpression = createArrayExpression;\n  exports.createAssignmentExpression = createAssignmentExpression;\n  exports.createBlockStatement = createBlockStatement;\n  exports.createCacheExpression = createCacheExpression;\n  exports.createCallExpression = createCallExpression;\n  exports.createCompilerError = createCompilerError;\n  exports.createCompoundExpression = createCompoundExpression;\n  exports.createConditionalExpression = createConditionalExpression;\n  exports.createDOMCompilerError = createDOMCompilerError;\n  exports.createForLoopParams = createForLoopParams;\n  exports.createFunctionExpression = createFunctionExpression;\n  exports.createIfStatement = createIfStatement;\n  exports.createInterpolation = createInterpolation;\n  exports.createObjectExpression = createObjectExpression;\n  exports.createObjectProperty = createObjectProperty;\n  exports.createReturnStatement = createReturnStatement;\n  exports.createRoot = createRoot;\n  exports.createSequenceExpression = createSequenceExpression;\n  exports.createSimpleExpression = createSimpleExpression;\n  exports.createStructuralDirectiveTransform = createStructuralDirectiveTransform;\n  exports.createTemplateLiteral = createTemplateLiteral;\n  exports.createTransformContext = createTransformContext;\n  exports.createVNodeCall = createVNodeCall;\n  exports.extractIdentifiers = extractIdentifiers;\n  exports.findDir = findDir;\n  exports.findProp = findProp;\n  exports.generate = generate;\n  exports.generateCodeFrame = generateCodeFrame;\n  exports.getBaseTransformPreset = getBaseTransformPreset;\n  exports.getConstantType = getConstantType;\n  exports.getInnerRange = getInnerRange;\n  exports.getMemoedVNodeCall = getMemoedVNodeCall;\n  exports.getVNodeBlockHelper = getVNodeBlockHelper;\n  exports.getVNodeHelper = getVNodeHelper;\n  exports.hasDynamicKeyVBind = hasDynamicKeyVBind;\n  exports.hasScopeRef = hasScopeRef;\n  exports.helperNameMap = helperNameMap;\n  exports.injectProp = injectProp;\n  exports.isBuiltInType = isBuiltInType;\n  exports.isCoreComponent = isCoreComponent;\n  exports.isFunctionType = isFunctionType;\n  exports.isInDestructureAssignment = isInDestructureAssignment;\n  exports.isMemberExpression = isMemberExpression;\n  exports.isMemberExpressionBrowser = isMemberExpressionBrowser;\n  exports.isMemberExpressionNode = isMemberExpressionNode;\n  exports.isReferencedIdentifier = isReferencedIdentifier;\n  exports.isSimpleIdentifier = isSimpleIdentifier;\n  exports.isSlotOutlet = isSlotOutlet;\n  exports.isStaticArgOf = isStaticArgOf;\n  exports.isStaticExp = isStaticExp;\n  exports.isStaticProperty = isStaticProperty;\n  exports.isStaticPropertyKey = isStaticPropertyKey;\n  exports.isTemplateNode = isTemplateNode;\n  exports.isText = isText$1;\n  exports.isVSlot = isVSlot;\n  exports.locStub = locStub;\n  exports.makeBlock = makeBlock;\n  exports.noopDirectiveTransform = noopDirectiveTransform;\n  exports.parse = parse;\n  exports.parserOptions = parserOptions;\n  exports.processExpression = processExpression;\n  exports.processFor = processFor;\n  exports.processIf = processIf;\n  exports.processSlotOutlet = processSlotOutlet;\n  exports.registerRuntimeHelpers = registerRuntimeHelpers;\n  exports.resolveComponentType = resolveComponentType;\n  exports.stringifyExpression = stringifyExpression;\n  exports.toValidAssetId = toValidAssetId;\n  exports.trackSlotScopes = trackSlotScopes;\n  exports.trackVForSlotScopes = trackVForSlotScopes;\n  exports.transform = transform;\n  exports.transformBind = transformBind;\n  exports.transformElement = transformElement;\n  exports.transformExpression = transformExpression;\n  exports.transformModel = transformModel$1;\n  exports.transformOn = transformOn$1;\n  exports.transformStyle = transformStyle;\n  exports.traverseNode = traverseNode;\n  exports.walkBlockDeclarations = walkBlockDeclarations;\n  exports.walkFunctionParams = walkFunctionParams;\n  exports.walkIdentifiers = walkIdentifiers;\n  exports.warnDeprecation = warnDeprecation;\n\n  Object.defineProperty(exports, '__esModule', { value: true });\n\n  return exports;\n\n})({});\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QHZ1ZS9jb21waWxlci1zZmNAMy4yLjQ3",
    "content": "/package.json\u0005{\n  \"name\": \"@vue/compiler-sfc\",\n  \"version\": \"3.2.47\",\n  \"description\": \"@vue/compiler-sfc\",\n  \"main\": \"dist/compiler-sfc.cjs.js\",\n  \"module\": \"dist/compiler-sfc.esm-browser.js\",\n  \"types\": \"dist/compiler-sfc.d.ts\",\n  \"files\": [\n    \"dist\"\n  ],\n  \"buildOptions\": {\n    \"name\": \"VueCompilerSFC\",\n    \"formats\": [\n      \"cjs\",\n      \"esm-browser\"\n    ],\n    \"prod\": false,\n    \"enableNonBrowserBranches\": true\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/vuejs/core.git\",\n    \"directory\": \"packages/compiler-sfc\"\n  },\n  \"keywords\": [\n    \"vue\"\n  ],\n  \"author\": \"Evan You\",\n  \"license\": \"MIT\",\n  \"bugs\": {\n    \"url\": \"https://github.com/vuejs/core/issues\"\n  },\n  \"homepage\": \"https://github.com/vuejs/core/tree/main/packages/compiler-sfc#readme\",\n  \"dependencies\": {\n    \"@babel/parser\": \"^7.16.4\",\n    \"@vue/compiler-core\": \"3.2.47\",\n    \"@vue/compiler-dom\": \"3.2.47\",\n    \"@vue/compiler-ssr\": \"3.2.47\",\n    \"@vue/reactivity-transform\": \"3.2.47\",\n    \"@vue/shared\": \"3.2.47\",\n    \"estree-walker\": \"^2.0.2\",\n    \"magic-string\": \"^0.25.7\",\n    \"source-map\": \"^0.6.1\",\n    \"postcss\": \"^8.1.10\"\n  },\n  \"devDependencies\": {\n    \"@types/estree\": \"^0.0.48\",\n    \"@babel/types\": \"^7.16.0\",\n    \"@types/lru-cache\": \"^5.1.0\",\n    \"pug\": \"^3.0.1\",\n    \"sass\": \"^1.26.9\",\n    \"@vue/consolidate\": \"^0.17.3\",\n    \"hash-sum\": \"^2.0.0\",\n    \"lru-cache\": \"^5.1.1\",\n    \"merge-source-map\": \"^1.1.0\",\n    \"postcss-modules\": \"^4.0.0\",\n    \"postcss-selector-parser\": \"^6.0.4\"\n  }\n}\n/dist/compiler-sfc.d.ts'Kimport { parse as babelParse } from '@babel/parser';\r\nimport { BindingMetadata } from '@vue/compiler-core';\r\nimport { CodegenResult } from '@vue/compiler-core';\r\nimport { CompilerError } from '@vue/compiler-core';\r\nimport { CompilerOptions } from '@vue/compiler-core';\r\nimport { ElementNode } from '@vue/compiler-core';\r\nimport { extractIdentifiers } from '@vue/compiler-core';\r\nimport { generateCodeFrame } from '@vue/compiler-core';\r\nimport { isInDestructureAssignment } from '@vue/compiler-core';\r\nimport { isStaticProperty } from '@vue/compiler-core';\r\nimport { LazyResult } from 'postcss';\r\nimport MagicString from 'magic-string';\r\nimport { ParserOptions } from '@vue/compiler-core';\r\nimport { ParserPlugin } from '@babel/parser';\r\nimport { RawSourceMap } from 'source-map';\r\nimport { Result } from 'postcss';\r\nimport { RootNode } from '@vue/compiler-core';\r\nimport { shouldTransform as shouldTransformRef } from '@vue/reactivity-transform';\r\nimport { SourceLocation } from '@vue/compiler-core';\r\nimport { Statement } from '@babel/types';\r\nimport { transform as transformRef } from '@vue/reactivity-transform';\r\nimport { transformAST as transformRefAST } from '@vue/reactivity-transform';\r\nimport { walkIdentifiers } from '@vue/compiler-core';\r\n\r\nexport declare interface AssetURLOptions {\r\n    /**\r\n     * If base is provided, instead of transforming relative asset urls into\r\n     * imports, they will be directly rewritten to absolute urls.\r\n     */\r\n    base?: string | null;\r\n    /**\r\n     * If true, also processes absolute urls.\r\n     */\r\n    includeAbsolute?: boolean;\r\n    tags?: AssetURLTagConfig;\r\n}\r\n\r\nexport declare interface AssetURLTagConfig {\r\n    [name: string]: string[];\r\n}\r\n\r\nexport { babelParse }\r\n\r\nexport { BindingMetadata }\r\n\r\nexport { CompilerError }\r\n\r\nexport { CompilerOptions }\r\n\r\n/**\r\n * Compile `<script setup>`\r\n * It requires the whole SFC descriptor because we need to handle and merge\r\n * normal `<script>` + `<script setup>` if both are present.\r\n */\r\nexport declare function compileScript(sfc: SFCDescriptor, options: SFCScriptCompileOptions): SFCScriptBlock;\r\n\r\nexport declare function compileStyle(options: SFCStyleCompileOptions): SFCStyleCompileResults;\r\n\r\nexport declare function compileStyleAsync(options: SFCAsyncStyleCompileOptions): Promise<SFCStyleCompileResults>;\r\n\r\nexport declare function compileTemplate(options: SFCTemplateCompileOptions): SFCTemplateCompileResults;\r\n\r\n/**\r\n * Aligns with postcss-modules\r\n * https://github.com/css-modules/postcss-modules\r\n */\r\ndeclare interface CSSModulesOptions {\r\n    scopeBehaviour?: 'global' | 'local';\r\n    generateScopedName?: string | ((name: string, filename: string, css: string) => string);\r\n    hashPrefix?: string;\r\n    localsConvention?: 'camelCase' | 'camelCaseOnly' | 'dashes' | 'dashesOnly';\r\n    exportGlobals?: boolean;\r\n    globalModulePaths?: RegExp[];\r\n}\r\n\r\nexport { extractIdentifiers }\r\n\r\nexport { generateCodeFrame }\r\n\r\ndeclare interface ImportBinding {\r\n    isType: boolean;\r\n    imported: string;\r\n    local: string;\r\n    source: string;\r\n    isFromSetup: boolean;\r\n    isUsedInTemplate: boolean;\r\n}\r\n\r\nexport { isInDestructureAssignment }\r\n\r\nexport { isStaticProperty }\r\n\r\nexport { MagicString }\r\n\r\nexport declare function parse(source: string, { sourceMap, filename, sourceRoot, pad, ignoreEmpty, compiler }?: SFCParseOptions): SFCParseResult;\r\n\r\ndeclare type PreprocessLang = 'less' | 'sass' | 'scss' | 'styl' | 'stylus';\r\n\r\n/**\r\n * Utility for rewriting `export default` in a script block into a variable\r\n * declaration so that we can inject things into it\r\n */\r\nexport declare function rewriteDefault(input: string, as: string, parserPlugins?: ParserPlugin[]): string;\r\n\r\nexport declare interface SFCAsyncStyleCompileOptions extends SFCStyleCompileOptions {\r\n    isAsync?: boolean;\r\n    modules?: boolean;\r\n    modulesOptions?: CSSModulesOptions;\r\n}\r\n\r\nexport declare interface SFCBlock {\r\n    type: string;\r\n    content: string;\r\n    attrs: Record<string, string | true>;\r\n    loc: SourceLocation;\r\n    map?: RawSourceMap;\r\n    lang?: string;\r\n    src?: string;\r\n}\r\n\r\nexport declare interface SFCDescriptor {\r\n    filename: string;\r\n    source: string;\r\n    template: SFCTemplateBlock | null;\r\n    script: SFCScriptBlock | null;\r\n    scriptSetup: SFCScriptBlock | null;\r\n    styles: SFCStyleBlock[];\r\n    customBlocks: SFCBlock[];\r\n    cssVars: string[];\r\n    /**\r\n     * whether the SFC uses :slotted() modifier.\r\n     * this is used as a compiler optimization hint.\r\n     */\r\n    slotted: boolean;\r\n    /**\r\n     * compare with an existing descriptor to determine whether HMR should perform\r\n     * a reload vs. re-render.\r\n     *\r\n     * Note: this comparison assumes the prev/next script are already identical,\r\n     * and only checks the special case where <script setup lang=\"ts\"> unused import\r\n     * pruning result changes due to template changes.\r\n     */\r\n    shouldForceReload: (prevImports: Record<string, ImportBinding>) => boolean;\r\n}\r\n\r\nexport declare interface SFCParseOptions {\r\n    filename?: string;\r\n    sourceMap?: boolean;\r\n    sourceRoot?: string;\r\n    pad?: boolean | 'line' | 'space';\r\n    ignoreEmpty?: boolean;\r\n    compiler?: TemplateCompiler;\r\n}\r\n\r\nexport declare interface SFCParseResult {\r\n    descriptor: SFCDescriptor;\r\n    errors: (CompilerError | SyntaxError)[];\r\n}\r\n\r\nexport declare interface SFCScriptBlock extends SFCBlock {\r\n    type: 'script';\r\n    setup?: string | boolean;\r\n    bindings?: BindingMetadata;\r\n    imports?: Record<string, ImportBinding>;\r\n    scriptAst?: Statement[];\r\n    scriptSetupAst?: Statement[];\r\n}\r\n\r\nexport declare interface SFCScriptCompileOptions {\r\n    /**\r\n     * Scope ID for prefixing injected CSS variables.\r\n     * This must be consistent with the `id` passed to `compileStyle`.\r\n     */\r\n    id: string;\r\n    /**\r\n     * Production mode. Used to determine whether to generate hashed CSS variables\r\n     */\r\n    isProd?: boolean;\r\n    /**\r\n     * Enable/disable source map. Defaults to true.\r\n     */\r\n    sourceMap?: boolean;\r\n    /**\r\n     * https://babeljs.io/docs/en/babel-parser#plugins\r\n     */\r\n    babelParserPlugins?: ParserPlugin[];\r\n    /**\r\n     * (Experimental) Enable syntax transform for using refs without `.value` and\r\n     * using destructured props with reactivity\r\n     */\r\n    reactivityTransform?: boolean;\r\n    /**\r\n     * (Experimental) Enable syntax transform for using refs without `.value`\r\n     * https://github.com/vuejs/rfcs/discussions/369\r\n     * @deprecated now part of `reactivityTransform`\r\n     * @default false\r\n     */\r\n    refTransform?: boolean;\r\n    /**\r\n     * (Experimental) Enable syntax transform for destructuring from defineProps()\r\n     * https://github.com/vuejs/rfcs/discussions/394\r\n     * @deprecated now part of `reactivityTransform`\r\n     * @default false\r\n     */\r\n    propsDestructureTransform?: boolean;\r\n    /**\r\n     * @deprecated use `reactivityTransform` instead.\r\n     */\r\n    refSugar?: boolean;\r\n    /**\r\n     * Compile the template and inline the resulting render function\r\n     * directly inside setup().\r\n     * - Only affects `<script setup>`\r\n     * - This should only be used in production because it prevents the template\r\n     * from being hot-reloaded separately from component state.\r\n     */\r\n    inlineTemplate?: boolean;\r\n    /**\r\n     * Options for template compilation when inlining. Note these are options that\r\n     * would normally be passed to `compiler-sfc`'s own `compileTemplate()`, not\r\n     * options passed to `compiler-dom`.\r\n     */\r\n    templateOptions?: Partial<SFCTemplateCompileOptions>;\r\n}\r\n\r\nexport declare interface SFCStyleBlock extends SFCBlock {\r\n    type: 'style';\r\n    scoped?: boolean;\r\n    module?: string | boolean;\r\n}\r\n\r\nexport declare interface SFCStyleCompileOptions {\r\n    source: string;\r\n    filename: string;\r\n    id: string;\r\n    scoped?: boolean;\r\n    trim?: boolean;\r\n    isProd?: boolean;\r\n    inMap?: RawSourceMap;\r\n    preprocessLang?: PreprocessLang;\r\n    preprocessOptions?: any;\r\n    preprocessCustomRequire?: (id: string) => any;\r\n    postcssOptions?: any;\r\n    postcssPlugins?: any[];\r\n    /**\r\n     * @deprecated use `inMap` instead.\r\n     */\r\n    map?: RawSourceMap;\r\n}\r\n\r\nexport declare interface SFCStyleCompileResults {\r\n    code: string;\r\n    map: RawSourceMap | undefined;\r\n    rawResult: Result | LazyResult | undefined;\r\n    errors: Error[];\r\n    modules?: Record<string, string>;\r\n    dependencies: Set<string>;\r\n}\r\n\r\nexport declare interface SFCTemplateBlock extends SFCBlock {\r\n    type: 'template';\r\n    ast: ElementNode;\r\n}\r\n\r\nexport declare interface SFCTemplateCompileOptions {\r\n    source: string;\r\n    filename: string;\r\n    id: string;\r\n    scoped?: boolean;\r\n    slotted?: boolean;\r\n    isProd?: boolean;\r\n    ssr?: boolean;\r\n    ssrCssVars?: string[];\r\n    inMap?: RawSourceMap;\r\n    compiler?: TemplateCompiler;\r\n    compilerOptions?: CompilerOptions;\r\n    preprocessLang?: string;\r\n    preprocessOptions?: any;\r\n    /**\r\n     * In some cases, compiler-sfc may not be inside the project root (e.g. when\r\n     * linked or globally installed). In such cases a custom `require` can be\r\n     * passed to correctly resolve the preprocessors.\r\n     */\r\n    preprocessCustomRequire?: (id: string) => any;\r\n    /**\r\n     * Configure what tags/attributes to transform into asset url imports,\r\n     * or disable the transform altogether with `false`.\r\n     */\r\n    transformAssetUrls?: AssetURLOptions | AssetURLTagConfig | boolean;\r\n}\r\n\r\nexport declare interface SFCTemplateCompileResults {\r\n    code: string;\r\n    ast?: RootNode;\r\n    preamble?: string;\r\n    source: string;\r\n    tips: string[];\r\n    errors: (string | CompilerError)[];\r\n    map?: RawSourceMap;\r\n}\r\n\r\nexport { shouldTransformRef }\r\n\r\nexport declare interface TemplateCompiler {\r\n    compile(template: string, options: CompilerOptions): CodegenResult;\r\n    parse(template: string, options: ParserOptions): RootNode;\r\n}\r\n\r\nexport { transformRef }\r\n\r\nexport { transformRefAST }\r\n\r\nexport declare const walk: any;\r\n\r\nexport { walkIdentifiers }\r\n\r\nexport { }\r\n/README.md\u0011R# @vue/compiler-sfc\n\n> Lower level utilities for compiling Vue Single File Components\n\n**Note: as of 3.2.13+, this package is included as a dependency of the main `vue` package and can be accessed as `vue/compiler-sfc`. This means you no longer need to explicitly install this package and ensure its version match that of `vue`'s. Just use the main `vue/compiler-sfc` deep import instead.**\n\nThis package contains lower level utilities that you can use if you are writing a plugin / transform for a bundler or module system that compiles Vue Single File Components (SFCs) into JavaScript. It is used in [vue-loader](https://github.com/vuejs/vue-loader), [rollup-plugin-vue](https://github.com/vuejs/rollup-plugin-vue) and [vite](https://github.com/vitejs/vite).\n\n## API\n\nThe API is intentionally low-level due to the various considerations when integrating Vue SFCs in a build system:\n\n- Separate hot-module replacement (HMR) for script, template and styles\n\n  - template updates should not reset component state\n  - style updates should be performed without component re-render\n\n- Leveraging the tool's plugin system for pre-processor handling. e.g. `<style lang=\"scss\">` should be processed by the corresponding webpack loader.\n\n- In some cases, transformers of each block in an SFC do not share the same execution context. For example, when used with `thread-loader` or other parallelized configurations, the template sub-loader in `vue-loader` may not have access to the full SFC and its descriptor.\n\nThe general idea is to generate a facade module that imports the individual blocks of the component. The trick is the module imports itself with different query strings so that the build system can handle each request as \"virtual\" modules:\n\n```\n                                  +--------------------+\n                                  |                    |\n                                  |  script transform  |\n                           +----->+                    |\n                           |      +--------------------+\n                           |\n+--------------------+     |      +--------------------+\n|                    |     |      |                    |\n|  facade transform  +----------->+ template transform |\n|                    |     |      |                    |\n+--------------------+     |      +--------------------+\n                           |\n                           |      +--------------------+\n                           +----->+                    |\n                                  |  style transform   |\n                                  |                    |\n                                  +--------------------+\n```\n\nWhere the facade module looks like this:\n\n```js\n// main script\nimport script from '/project/foo.vue?vue&type=script'\n// template compiled to render function\nimport { render } from '/project/foo.vue?vue&type=template&id=xxxxxx'\n// css\nimport '/project/foo.vue?vue&type=style&index=0&id=xxxxxx'\n\n// attach render function to script\nscript.render = render\n\n// attach additional metadata\n// some of these should be dev only\nscript.__file = 'example.vue'\nscript.__scopeId = 'xxxxxx'\n\n// additional tooling-specific HMR handling code\n// using __VUE_HMR_API__ global\n\nexport default script\n```\n\n### High Level Workflow\n\n1. In facade transform, parse the source into descriptor with the `parse` API and generate the above facade module code based on the descriptor;\n\n2. In script transform, use `compileScript` to process the script. This handles features like `<script setup>` and CSS variable injection. Alternatively, this can be done directly in the facade module (with the code inlined instead of imported), but it will require rewriting `export default` to a temp variable (a `rewriteDefault` convenience API is provided for this purpose) so additional options can be attached to the exported object.\n\n3. In template transform, use `compileTemplate` to compile the raw template into render function code.\n\n4. In style transform, use `compileStyle` to compile raw CSS to handle `<style scoped>`, `<style module>` and CSS variable injection.\n\nOptions needed for these APIs can be passed via the query string.\n\nFor detailed API references and options, check out the source type definitions. For actual usage of these APIs, check out [rollup-plugin-vue](https://github.com/vuejs/rollup-plugin-vue/tree/next) or [vue-loader](https://github.com/vuejs/vue-loader/tree/next).\n!/dist/compiler-sfc.esm-browser.js\u0000\u00176/**\n * Make a map and return a function for checking if a key\n * is in that map.\n * IMPORTANT: all calls of this function must be prefixed with\n * \\/\\*#\\_\\_PURE\\_\\_\\*\\/\n * So that rollup can tree-shake them if necessary.\n */\nfunction makeMap(str, expectsLowerCase) {\n    const map = Object.create(null);\n    const list = str.split(',');\n    for (let i = 0; i < list.length; i++) {\n        map[list[i]] = true;\n    }\n    return expectsLowerCase ? val => !!map[val.toLowerCase()] : val => !!map[val];\n}\n\n/**\n * dev only flag -> name mapping\n */\nconst PatchFlagNames = {\n    [1 /* PatchFlags.TEXT */]: `TEXT`,\n    [2 /* PatchFlags.CLASS */]: `CLASS`,\n    [4 /* PatchFlags.STYLE */]: `STYLE`,\n    [8 /* PatchFlags.PROPS */]: `PROPS`,\n    [16 /* PatchFlags.FULL_PROPS */]: `FULL_PROPS`,\n    [32 /* PatchFlags.HYDRATE_EVENTS */]: `HYDRATE_EVENTS`,\n    [64 /* PatchFlags.STABLE_FRAGMENT */]: `STABLE_FRAGMENT`,\n    [128 /* PatchFlags.KEYED_FRAGMENT */]: `KEYED_FRAGMENT`,\n    [256 /* PatchFlags.UNKEYED_FRAGMENT */]: `UNKEYED_FRAGMENT`,\n    [512 /* PatchFlags.NEED_PATCH */]: `NEED_PATCH`,\n    [1024 /* PatchFlags.DYNAMIC_SLOTS */]: `DYNAMIC_SLOTS`,\n    [2048 /* PatchFlags.DEV_ROOT_FRAGMENT */]: `DEV_ROOT_FRAGMENT`,\n    [-1 /* PatchFlags.HOISTED */]: `HOISTED`,\n    [-2 /* PatchFlags.BAIL */]: `BAIL`\n};\n\n/**\n * Dev only\n */\nconst slotFlagsText = {\n    [1 /* SlotFlags.STABLE */]: 'STABLE',\n    [2 /* SlotFlags.DYNAMIC */]: 'DYNAMIC',\n    [3 /* SlotFlags.FORWARDED */]: 'FORWARDED'\n};\n\nconst GLOBALS_WHITE_LISTED = 'Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,' +\n    'decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,' +\n    'Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt';\nconst isGloballyWhitelisted = /*#__PURE__*/ makeMap(GLOBALS_WHITE_LISTED);\n\nconst range = 2;\nfunction generateCodeFrame(source, start = 0, end = source.length) {\n    // Split the content into individual lines but capture the newline sequence\n    // that separated each line. This is important because the actual sequence is\n    // needed to properly take into account the full line length for offset\n    // comparison\n    let lines = source.split(/(\\r?\\n)/);\n    // Separate the lines and newline sequences into separate arrays for easier referencing\n    const newlineSequences = lines.filter((_, idx) => idx % 2 === 1);\n    lines = lines.filter((_, idx) => idx % 2 === 0);\n    let count = 0;\n    const res = [];\n    for (let i = 0; i < lines.length; i++) {\n        count +=\n            lines[i].length +\n                ((newlineSequences[i] && newlineSequences[i].length) || 0);\n        if (count >= start) {\n            for (let j = i - range; j <= i + range || end > count; j++) {\n                if (j < 0 || j >= lines.length)\n                    continue;\n                const line = j + 1;\n                res.push(`${line}${' '.repeat(Math.max(3 - String(line).length, 0))}|  ${lines[j]}`);\n                const lineLength = lines[j].length;\n                const newLineSeqLength = (newlineSequences[j] && newlineSequences[j].length) || 0;\n                if (j === i) {\n                    // push underline\n                    const pad = start - (count - (lineLength + newLineSeqLength));\n                    const length = Math.max(1, end > count ? lineLength - pad : end - start);\n                    res.push(`   |  ` + ' '.repeat(pad) + '^'.repeat(length));\n                }\n                else if (j > i) {\n                    if (end > count) {\n                        const length = Math.max(Math.min(end - count, lineLength), 1);\n                        res.push(`   |  ` + '^'.repeat(length));\n                    }\n                    count += lineLength + newLineSeqLength;\n                }\n            }\n            break;\n        }\n    }\n    return res.join('\\n');\n}\n\nfunction normalizeStyle(value) {\n    if (isArray$3(value)) {\n        const res = {};\n        for (let i = 0; i < value.length; i++) {\n            const item = value[i];\n            const normalized = isString$2(item)\n                ? parseStringStyle(item)\n                : normalizeStyle(item);\n            if (normalized) {\n                for (const key in normalized) {\n                    res[key] = normalized[key];\n                }\n            }\n        }\n        return res;\n    }\n    else if (isString$2(value)) {\n        return value;\n    }\n    else if (isObject$2(value)) {\n        return value;\n    }\n}\nconst listDelimiterRE = /;(?![^(]*\\))/g;\nconst propertyDelimiterRE = /:([^]+)/;\nconst styleCommentRE = /\\/\\*.*?\\*\\//gs;\nfunction parseStringStyle(cssText) {\n    const ret = {};\n    cssText\n        .replace(styleCommentRE, '')\n        .split(listDelimiterRE)\n        .forEach(item => {\n        if (item) {\n            const tmp = item.split(propertyDelimiterRE);\n            tmp.length > 1 && (ret[tmp[0].trim()] = tmp[1].trim());\n        }\n    });\n    return ret;\n}\nfunction stringifyStyle(styles) {\n    let ret = '';\n    if (!styles || isString$2(styles)) {\n        return ret;\n    }\n    for (const key in styles) {\n        const value = styles[key];\n        const normalizedKey = key.startsWith(`--`) ? key : hyphenate(key);\n        if (isString$2(value) || typeof value === 'number') {\n            // only render valid values\n            ret += `${normalizedKey}:${value};`;\n        }\n    }\n    return ret;\n}\nfunction normalizeClass(value) {\n    let res = '';\n    if (isString$2(value)) {\n        res = value;\n    }\n    else if (isArray$3(value)) {\n        for (let i = 0; i < value.length; i++) {\n            const normalized = normalizeClass(value[i]);\n            if (normalized) {\n                res += normalized + ' ';\n            }\n        }\n    }\n    else if (isObject$2(value)) {\n        for (const name in value) {\n            if (value[name]) {\n                res += name + ' ';\n            }\n        }\n    }\n    return res.trim();\n}\n\n// These tag configs are shared between compiler-dom and runtime-dom, so they\n// https://developer.mozilla.org/en-US/docs/Web/HTML/Element\nconst HTML_TAGS = 'html,body,base,head,link,meta,style,title,address,article,aside,footer,' +\n    'header,hgroup,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,' +\n    'figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,' +\n    'data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,' +\n    'time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,' +\n    'canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,' +\n    'th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,' +\n    'option,output,progress,select,textarea,details,dialog,menu,' +\n    'summary,template,blockquote,iframe,tfoot';\n// https://developer.mozilla.org/en-US/docs/Web/SVG/Element\nconst SVG_TAGS = 'svg,animate,animateMotion,animateTransform,circle,clipPath,color-profile,' +\n    'defs,desc,discard,ellipse,feBlend,feColorMatrix,feComponentTransfer,' +\n    'feComposite,feConvolveMatrix,feDiffuseLighting,feDisplacementMap,' +\n    'feDistantLight,feDropShadow,feFlood,feFuncA,feFuncB,feFuncG,feFuncR,' +\n    'feGaussianBlur,feImage,feMerge,feMergeNode,feMorphology,feOffset,' +\n    'fePointLight,feSpecularLighting,feSpotLight,feTile,feTurbulence,filter,' +\n    'foreignObject,g,hatch,hatchpath,image,line,linearGradient,marker,mask,' +\n    'mesh,meshgradient,meshpatch,meshrow,metadata,mpath,path,pattern,' +\n    'polygon,polyline,radialGradient,rect,set,solidcolor,stop,switch,symbol,' +\n    'text,textPath,title,tspan,unknown,use,view';\nconst VOID_TAGS = 'area,base,br,col,embed,hr,img,input,link,meta,param,source,track,wbr';\n/**\n * Compiler only.\n * Do NOT use in runtime code paths unless behind `true` flag.\n */\nconst isHTMLTag = /*#__PURE__*/ makeMap(HTML_TAGS);\n/**\n * Compiler only.\n * Do NOT use in runtime code paths unless behind `true` flag.\n */\nconst isSVGTag = /*#__PURE__*/ makeMap(SVG_TAGS);\n/**\n * Compiler only.\n * Do NOT use in runtime code paths unless behind `true` flag.\n */\nconst isVoidTag = /*#__PURE__*/ makeMap(VOID_TAGS);\n\n/**\n * On the client we only need to offer special cases for boolean attributes that\n * have different names from their corresponding dom properties:\n * - itemscope -> N/A\n * - allowfullscreen -> allowFullscreen\n * - formnovalidate -> formNoValidate\n * - ismap -> isMap\n * - nomodule -> noModule\n * - novalidate -> noValidate\n * - readonly -> readOnly\n */\nconst specialBooleanAttrs = `itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly`;\n/**\n * The full list is needed during SSR to produce the correct initial markup.\n */\nconst isBooleanAttr = /*#__PURE__*/ makeMap(specialBooleanAttrs +\n    `,async,autofocus,autoplay,controls,default,defer,disabled,hidden,` +\n    `loop,open,required,reversed,scoped,seamless,` +\n    `checked,muted,multiple,selected`);\nconst unsafeAttrCharRE = /[>/=\"'\\u0009\\u000a\\u000c\\u0020]/;\nconst attrValidationCache = {};\nfunction isSSRSafeAttrName(name) {\n    if (attrValidationCache.hasOwnProperty(name)) {\n        return attrValidationCache[name];\n    }\n    const isUnsafe = unsafeAttrCharRE.test(name);\n    if (isUnsafe) {\n        console.error(`unsafe attribute name: ${name}`);\n    }\n    return (attrValidationCache[name] = !isUnsafe);\n}\nconst propsToAttrMap = {\n    acceptCharset: 'accept-charset',\n    className: 'class',\n    htmlFor: 'for',\n    httpEquiv: 'http-equiv'\n};\n/**\n * Known attributes, this is used for stringification of runtime static nodes\n * so that we don't stringify bindings that cannot be set from HTML.\n * Don't also forget to allow `data-*` and `aria-*`!\n * Generated from https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes\n */\nconst isKnownHtmlAttr = /*#__PURE__*/ makeMap(`accept,accept-charset,accesskey,action,align,allow,alt,async,` +\n    `autocapitalize,autocomplete,autofocus,autoplay,background,bgcolor,` +\n    `border,buffered,capture,challenge,charset,checked,cite,class,code,` +\n    `codebase,color,cols,colspan,content,contenteditable,contextmenu,controls,` +\n    `coords,crossorigin,csp,data,datetime,decoding,default,defer,dir,dirname,` +\n    `disabled,download,draggable,dropzone,enctype,enterkeyhint,for,form,` +\n    `formaction,formenctype,formmethod,formnovalidate,formtarget,headers,` +\n    `height,hidden,high,href,hreflang,http-equiv,icon,id,importance,integrity,` +\n    `ismap,itemprop,keytype,kind,label,lang,language,loading,list,loop,low,` +\n    `manifest,max,maxlength,minlength,media,min,multiple,muted,name,novalidate,` +\n    `open,optimum,pattern,ping,placeholder,poster,preload,radiogroup,readonly,` +\n    `referrerpolicy,rel,required,reversed,rows,rowspan,sandbox,scope,scoped,` +\n    `selected,shape,size,sizes,slot,span,spellcheck,src,srcdoc,srclang,srcset,` +\n    `start,step,style,summary,tabindex,target,title,translate,type,usemap,` +\n    `value,width,wrap`);\n/**\n * Generated from https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute\n */\nconst isKnownSvgAttr = /*#__PURE__*/ makeMap(`xmlns,accent-height,accumulate,additive,alignment-baseline,alphabetic,amplitude,` +\n    `arabic-form,ascent,attributeName,attributeType,azimuth,baseFrequency,` +\n    `baseline-shift,baseProfile,bbox,begin,bias,by,calcMode,cap-height,class,` +\n    `clip,clipPathUnits,clip-path,clip-rule,color,color-interpolation,` +\n    `color-interpolation-filters,color-profile,color-rendering,` +\n    `contentScriptType,contentStyleType,crossorigin,cursor,cx,cy,d,decelerate,` +\n    `descent,diffuseConstant,direction,display,divisor,dominant-baseline,dur,dx,` +\n    `dy,edgeMode,elevation,enable-background,end,exponent,fill,fill-opacity,` +\n    `fill-rule,filter,filterRes,filterUnits,flood-color,flood-opacity,` +\n    `font-family,font-size,font-size-adjust,font-stretch,font-style,` +\n    `font-variant,font-weight,format,from,fr,fx,fy,g1,g2,glyph-name,` +\n    `glyph-orientation-horizontal,glyph-orientation-vertical,glyphRef,` +\n    `gradientTransform,gradientUnits,hanging,height,href,hreflang,horiz-adv-x,` +\n    `horiz-origin-x,id,ideographic,image-rendering,in,in2,intercept,k,k1,k2,k3,` +\n    `k4,kernelMatrix,kernelUnitLength,kerning,keyPoints,keySplines,keyTimes,` +\n    `lang,lengthAdjust,letter-spacing,lighting-color,limitingConeAngle,local,` +\n    `marker-end,marker-mid,marker-start,markerHeight,markerUnits,markerWidth,` +\n    `mask,maskContentUnits,maskUnits,mathematical,max,media,method,min,mode,` +\n    `name,numOctaves,offset,opacity,operator,order,orient,orientation,origin,` +\n    `overflow,overline-position,overline-thickness,panose-1,paint-order,path,` +\n    `pathLength,patternContentUnits,patternTransform,patternUnits,ping,` +\n    `pointer-events,points,pointsAtX,pointsAtY,pointsAtZ,preserveAlpha,` +\n    `preserveAspectRatio,primitiveUnits,r,radius,referrerPolicy,refX,refY,rel,` +\n    `rendering-intent,repeatCount,repeatDur,requiredExtensions,requiredFeatures,` +\n    `restart,result,rotate,rx,ry,scale,seed,shape-rendering,slope,spacing,` +\n    `specularConstant,specularExponent,speed,spreadMethod,startOffset,` +\n    `stdDeviation,stemh,stemv,stitchTiles,stop-color,stop-opacity,` +\n    `strikethrough-position,strikethrough-thickness,string,stroke,` +\n    `stroke-dasharray,stroke-dashoffset,stroke-linecap,stroke-linejoin,` +\n    `stroke-miterlimit,stroke-opacity,stroke-width,style,surfaceScale,` +\n    `systemLanguage,tabindex,tableValues,target,targetX,targetY,text-anchor,` +\n    `text-decoration,text-rendering,textLength,to,transform,transform-origin,` +\n    `type,u1,u2,underline-position,underline-thickness,unicode,unicode-bidi,` +\n    `unicode-range,units-per-em,v-alphabetic,v-hanging,v-ideographic,` +\n    `v-mathematical,values,vector-effect,version,vert-adv-y,vert-origin-x,` +\n    `vert-origin-y,viewBox,viewTarget,visibility,width,widths,word-spacing,` +\n    `writing-mode,x,x-height,x1,x2,xChannelSelector,xlink:actuate,xlink:arcrole,` +\n    `xlink:href,xlink:role,xlink:show,xlink:title,xlink:type,xml:base,xml:lang,` +\n    `xml:space,y,y1,y2,yChannelSelector,z,zoomAndPan`);\n\nconst escapeRE = /[\"'&<>]/;\nfunction escapeHtml(string) {\n    const str = '' + string;\n    const match = escapeRE.exec(str);\n    if (!match) {\n        return str;\n    }\n    let html = '';\n    let escaped;\n    let index;\n    let lastIndex = 0;\n    for (index = match.index; index < str.length; index++) {\n        switch (str.charCodeAt(index)) {\n            case 34: // \"\n                escaped = '&quot;';\n                break;\n            case 38: // &\n                escaped = '&amp;';\n                break;\n            case 39: // '\n                escaped = '&#39;';\n                break;\n            case 60: // <\n                escaped = '&lt;';\n                break;\n            case 62: // >\n                escaped = '&gt;';\n                break;\n            default:\n                continue;\n        }\n        if (lastIndex !== index) {\n            html += str.slice(lastIndex, index);\n        }\n        lastIndex = index + 1;\n        html += escaped;\n    }\n    return lastIndex !== index ? html + str.slice(lastIndex, index) : html;\n}\n\n/**\n * For converting {{ interpolation }} values to displayed strings.\n * @private\n */\nconst toDisplayString = (val) => {\n    return isString$2(val)\n        ? val\n        : val == null\n            ? ''\n            : isArray$3(val) ||\n                (isObject$2(val) &&\n                    (val.toString === objectToString$1 || !isFunction$1(val.toString)))\n                ? JSON.stringify(val, replacer, 2)\n                : String(val);\n};\nconst replacer = (_key, val) => {\n    // can't use isRef here since @vue/shared has no deps\n    if (val && val.__v_isRef) {\n        return replacer(_key, val.value);\n    }\n    else if (isMap(val)) {\n        return {\n            [`Map(${val.size})`]: [...val.entries()].reduce((entries, [key, val]) => {\n                entries[`${key} =>`] = val;\n                return entries;\n            }, {})\n        };\n    }\n    else if (isSet(val)) {\n        return {\n            [`Set(${val.size})`]: [...val.values()]\n        };\n    }\n    else if (isObject$2(val) && !isArray$3(val) && !isPlainObject(val)) {\n        return String(val);\n    }\n    return val;\n};\n\nconst EMPTY_OBJ = Object.freeze({})\n    ;\nconst NOOP = () => { };\n/**\n * Always return false.\n */\nconst NO = () => false;\nconst onRE = /^on[^a-z]/;\nconst isOn = (key) => onRE.test(key);\nconst extend = Object.assign;\nconst hasOwnProperty$3 = Object.prototype.hasOwnProperty;\nconst hasOwn = (val, key) => hasOwnProperty$3.call(val, key);\nconst isArray$3 = Array.isArray;\nconst isMap = (val) => toTypeString(val) === '[object Map]';\nconst isSet = (val) => toTypeString(val) === '[object Set]';\nconst isFunction$1 = (val) => typeof val === 'function';\nconst isString$2 = (val) => typeof val === 'string';\nconst isSymbol$1 = (val) => typeof val === 'symbol';\nconst isObject$2 = (val) => val !== null && typeof val === 'object';\nconst objectToString$1 = Object.prototype.toString;\nconst toTypeString = (value) => objectToString$1.call(value);\nconst isPlainObject = (val) => toTypeString(val) === '[object Object]';\nconst isReservedProp = /*#__PURE__*/ makeMap(\n// the leading comma is intentional so empty string \"\" is also included\n',key,ref,ref_for,ref_key,' +\n    'onVnodeBeforeMount,onVnodeMounted,' +\n    'onVnodeBeforeUpdate,onVnodeUpdated,' +\n    'onVnodeBeforeUnmount,onVnodeUnmounted');\nconst isBuiltInDirective = /*#__PURE__*/ makeMap('bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo');\nconst cacheStringFunction = (fn) => {\n    const cache = Object.create(null);\n    return ((str) => {\n        const hit = cache[str];\n        return hit || (cache[str] = fn(str));\n    });\n};\nconst camelizeRE = /-(\\w)/g;\n/**\n * @private\n */\nconst camelize = cacheStringFunction((str) => {\n    return str.replace(camelizeRE, (_, c) => (c ? c.toUpperCase() : ''));\n});\nconst hyphenateRE = /\\B([A-Z])/g;\n/**\n * @private\n */\nconst hyphenate = cacheStringFunction((str) => str.replace(hyphenateRE, '-$1').toLowerCase());\n/**\n * @private\n */\nconst capitalize$1 = cacheStringFunction((str) => str.charAt(0).toUpperCase() + str.slice(1));\n/**\n * @private\n */\nconst toHandlerKey = cacheStringFunction((str) => str ? `on${capitalize$1(str)}` : ``);\nconst identRE = /^[_$a-zA-Z\\xA0-\\uFFFF][_$a-zA-Z0-9\\xA0-\\uFFFF]*$/;\nfunction genPropsAccessExp(name) {\n    return identRE.test(name)\n        ? `__props.${name}`\n        : `__props[${JSON.stringify(name)}]`;\n}\n\nfunction defaultOnError(error) {\n    throw error;\n}\nfunction defaultOnWarn(msg) {\n    console.warn(`[Vue warn] ${msg.message}`);\n}\nfunction createCompilerError(code, loc, messages, additionalMessage) {\n    const msg = (messages || errorMessages)[code] + (additionalMessage || ``)\n        ;\n    const error = new SyntaxError(String(msg));\n    error.code = code;\n    error.loc = loc;\n    return error;\n}\nconst errorMessages = {\n    // parse errors\n    [0 /* ErrorCodes.ABRUPT_CLOSING_OF_EMPTY_COMMENT */]: 'Illegal comment.',\n    [1 /* ErrorCodes.CDATA_IN_HTML_CONTENT */]: 'CDATA section is allowed only in XML context.',\n    [2 /* ErrorCodes.DUPLICATE_ATTRIBUTE */]: 'Duplicate attribute.',\n    [3 /* ErrorCodes.END_TAG_WITH_ATTRIBUTES */]: 'End tag cannot have attributes.',\n    [4 /* ErrorCodes.END_TAG_WITH_TRAILING_SOLIDUS */]: \"Illegal '/' in tags.\",\n    [5 /* ErrorCodes.EOF_BEFORE_TAG_NAME */]: 'Unexpected EOF in tag.',\n    [6 /* ErrorCodes.EOF_IN_CDATA */]: 'Unexpected EOF in CDATA section.',\n    [7 /* ErrorCodes.EOF_IN_COMMENT */]: 'Unexpected EOF in comment.',\n    [8 /* ErrorCodes.EOF_IN_SCRIPT_HTML_COMMENT_LIKE_TEXT */]: 'Unexpected EOF in script.',\n    [9 /* ErrorCodes.EOF_IN_TAG */]: 'Unexpected EOF in tag.',\n    [10 /* ErrorCodes.INCORRECTLY_CLOSED_COMMENT */]: 'Incorrectly closed comment.',\n    [11 /* ErrorCodes.INCORRECTLY_OPENED_COMMENT */]: 'Incorrectly opened comment.',\n    [12 /* ErrorCodes.INVALID_FIRST_CHARACTER_OF_TAG_NAME */]: \"Illegal tag name. Use '&lt;' to print '<'.\",\n    [13 /* ErrorCodes.MISSING_ATTRIBUTE_VALUE */]: 'Attribute value was expected.',\n    [14 /* ErrorCodes.MISSING_END_TAG_NAME */]: 'End tag name was expected.',\n    [15 /* ErrorCodes.MISSING_WHITESPACE_BETWEEN_ATTRIBUTES */]: 'Whitespace was expected.',\n    [16 /* ErrorCodes.NESTED_COMMENT */]: \"Unexpected '<!--' in comment.\",\n    [17 /* ErrorCodes.UNEXPECTED_CHARACTER_IN_ATTRIBUTE_NAME */]: 'Attribute name cannot contain U+0022 (\"), U+0027 (\\'), and U+003C (<).',\n    [18 /* ErrorCodes.UNEXPECTED_CHARACTER_IN_UNQUOTED_ATTRIBUTE_VALUE */]: 'Unquoted attribute value cannot contain U+0022 (\"), U+0027 (\\'), U+003C (<), U+003D (=), and U+0060 (`).',\n    [19 /* ErrorCodes.UNEXPECTED_EQUALS_SIGN_BEFORE_ATTRIBUTE_NAME */]: \"Attribute name cannot start with '='.\",\n    [21 /* ErrorCodes.UNEXPECTED_QUESTION_MARK_INSTEAD_OF_TAG_NAME */]: \"'<?' is allowed only in XML context.\",\n    [20 /* ErrorCodes.UNEXPECTED_NULL_CHARACTER */]: `Unexpected null character.`,\n    [22 /* ErrorCodes.UNEXPECTED_SOLIDUS_IN_TAG */]: \"Illegal '/' in tags.\",\n    // Vue-specific parse errors\n    [23 /* ErrorCodes.X_INVALID_END_TAG */]: 'Invalid end tag.',\n    [24 /* ErrorCodes.X_MISSING_END_TAG */]: 'Element is missing end tag.',\n    [25 /* ErrorCodes.X_MISSING_INTERPOLATION_END */]: 'Interpolation end sign was not found.',\n    [27 /* ErrorCodes.X_MISSING_DYNAMIC_DIRECTIVE_ARGUMENT_END */]: 'End bracket for dynamic directive argument was not found. ' +\n        'Note that dynamic directive argument cannot contain spaces.',\n    [26 /* ErrorCodes.X_MISSING_DIRECTIVE_NAME */]: 'Legal directive name was expected.',\n    // transform errors\n    [28 /* ErrorCodes.X_V_IF_NO_EXPRESSION */]: `v-if/v-else-if is missing expression.`,\n    [29 /* ErrorCodes.X_V_IF_SAME_KEY */]: `v-if/else branches must use unique keys.`,\n    [30 /* ErrorCodes.X_V_ELSE_NO_ADJACENT_IF */]: `v-else/v-else-if has no adjacent v-if or v-else-if.`,\n    [31 /* ErrorCodes.X_V_FOR_NO_EXPRESSION */]: `v-for is missing expression.`,\n    [32 /* ErrorCodes.X_V_FOR_MALFORMED_EXPRESSION */]: `v-for has invalid expression.`,\n    [33 /* ErrorCodes.X_V_FOR_TEMPLATE_KEY_PLACEMENT */]: `<template v-for> key should be placed on the <template> tag.`,\n    [34 /* ErrorCodes.X_V_BIND_NO_EXPRESSION */]: `v-bind is missing expression.`,\n    [35 /* ErrorCodes.X_V_ON_NO_EXPRESSION */]: `v-on is missing expression.`,\n    [36 /* ErrorCodes.X_V_SLOT_UNEXPECTED_DIRECTIVE_ON_SLOT_OUTLET */]: `Unexpected custom directive on <slot> outlet.`,\n    [37 /* ErrorCodes.X_V_SLOT_MIXED_SLOT_USAGE */]: `Mixed v-slot usage on both the component and nested <template>. ` +\n        `When there are multiple named slots, all slots should use <template> ` +\n        `syntax to avoid scope ambiguity.`,\n    [38 /* ErrorCodes.X_V_SLOT_DUPLICATE_SLOT_NAMES */]: `Duplicate slot names found. `,\n    [39 /* ErrorCodes.X_V_SLOT_EXTRANEOUS_DEFAULT_SLOT_CHILDREN */]: `Extraneous children found when component already has explicitly named ` +\n        `default slot. These children will be ignored.`,\n    [40 /* ErrorCodes.X_V_SLOT_MISPLACED */]: `v-slot can only be used on components or <template> tags.`,\n    [41 /* ErrorCodes.X_V_MODEL_NO_EXPRESSION */]: `v-model is missing expression.`,\n    [42 /* ErrorCodes.X_V_MODEL_MALFORMED_EXPRESSION */]: `v-model value must be a valid JavaScript member expression.`,\n    [43 /* ErrorCodes.X_V_MODEL_ON_SCOPE_VARIABLE */]: `v-model cannot be used on v-for or v-slot scope variables because they are not writable.`,\n    [44 /* ErrorCodes.X_V_MODEL_ON_PROPS */]: `v-model cannot be used on a prop, because local prop bindings are not writable.\\nUse a v-bind binding combined with a v-on listener that emits update:x event instead.`,\n    [45 /* ErrorCodes.X_INVALID_EXPRESSION */]: `Error parsing JavaScript expression: `,\n    [46 /* ErrorCodes.X_KEEP_ALIVE_INVALID_CHILDREN */]: `<KeepAlive> expects exactly one child component.`,\n    // generic errors\n    [47 /* ErrorCodes.X_PREFIX_ID_NOT_SUPPORTED */]: `\"prefixIdentifiers\" option is not supported in this build of compiler.`,\n    [48 /* ErrorCodes.X_MODULE_MODE_NOT_SUPPORTED */]: `ES module mode is not supported in this build of compiler.`,\n    [49 /* ErrorCodes.X_CACHE_HANDLER_NOT_SUPPORTED */]: `\"cacheHandlers\" option is only supported when the \"prefixIdentifiers\" option is enabled.`,\n    [50 /* ErrorCodes.X_SCOPE_ID_NOT_SUPPORTED */]: `\"scopeId\" option is only supported in module mode.`,\n    // just to fulfill types\n    [51 /* ErrorCodes.__EXTEND_POINT__ */]: ``\n};\n\nconst FRAGMENT = Symbol(`Fragment` );\nconst TELEPORT = Symbol(`Teleport` );\nconst SUSPENSE = Symbol(`Suspense` );\nconst KEEP_ALIVE = Symbol(`KeepAlive` );\nconst BASE_TRANSITION = Symbol(`BaseTransition` );\nconst OPEN_BLOCK = Symbol(`openBlock` );\nconst CREATE_BLOCK = Symbol(`createBlock` );\nconst CREATE_ELEMENT_BLOCK = Symbol(`createElementBlock` );\nconst CREATE_VNODE = Symbol(`createVNode` );\nconst CREATE_ELEMENT_VNODE = Symbol(`createElementVNode` );\nconst CREATE_COMMENT = Symbol(`createCommentVNode` );\nconst CREATE_TEXT = Symbol(`createTextVNode` );\nconst CREATE_STATIC = Symbol(`createStaticVNode` );\nconst RESOLVE_COMPONENT = Symbol(`resolveComponent` );\nconst RESOLVE_DYNAMIC_COMPONENT = Symbol(`resolveDynamicComponent` );\nconst RESOLVE_DIRECTIVE = Symbol(`resolveDirective` );\nconst RESOLVE_FILTER = Symbol(`resolveFilter` );\nconst WITH_DIRECTIVES = Symbol(`withDirectives` );\nconst RENDER_LIST = Symbol(`renderList` );\nconst RENDER_SLOT = Symbol(`renderSlot` );\nconst CREATE_SLOTS = Symbol(`createSlots` );\nconst TO_DISPLAY_STRING = Symbol(`toDisplayString` );\nconst MERGE_PROPS = Symbol(`mergeProps` );\nconst NORMALIZE_CLASS = Symbol(`normalizeClass` );\nconst NORMALIZE_STYLE = Symbol(`normalizeStyle` );\nconst NORMALIZE_PROPS = Symbol(`normalizeProps` );\nconst GUARD_REACTIVE_PROPS = Symbol(`guardReactiveProps` );\nconst TO_HANDLERS = Symbol(`toHandlers` );\nconst CAMELIZE = Symbol(`camelize` );\nconst CAPITALIZE = Symbol(`capitalize` );\nconst TO_HANDLER_KEY = Symbol(`toHandlerKey` );\nconst SET_BLOCK_TRACKING = Symbol(`setBlockTracking` );\nconst PUSH_SCOPE_ID = Symbol(`pushScopeId` );\nconst POP_SCOPE_ID = Symbol(`popScopeId` );\nconst WITH_CTX = Symbol(`withCtx` );\nconst UNREF = Symbol(`unref` );\nconst IS_REF = Symbol(`isRef` );\nconst WITH_MEMO = Symbol(`withMemo` );\nconst IS_MEMO_SAME = Symbol(`isMemoSame` );\n// Name mapping for runtime helpers that need to be imported from 'vue' in\n// generated code. Make sure these are correctly exported in the runtime!\nconst helperNameMap = {\n    [FRAGMENT]: `Fragment`,\n    [TELEPORT]: `Teleport`,\n    [SUSPENSE]: `Suspense`,\n    [KEEP_ALIVE]: `KeepAlive`,\n    [BASE_TRANSITION]: `BaseTransition`,\n    [OPEN_BLOCK]: `openBlock`,\n    [CREATE_BLOCK]: `createBlock`,\n    [CREATE_ELEMENT_BLOCK]: `createElementBlock`,\n    [CREATE_VNODE]: `createVNode`,\n    [CREATE_ELEMENT_VNODE]: `createElementVNode`,\n    [CREATE_COMMENT]: `createCommentVNode`,\n    [CREATE_TEXT]: `createTextVNode`,\n    [CREATE_STATIC]: `createStaticVNode`,\n    [RESOLVE_COMPONENT]: `resolveComponent`,\n    [RESOLVE_DYNAMIC_COMPONENT]: `resolveDynamicComponent`,\n    [RESOLVE_DIRECTIVE]: `resolveDirective`,\n    [RESOLVE_FILTER]: `resolveFilter`,\n    [WITH_DIRECTIVES]: `withDirectives`,\n    [RENDER_LIST]: `renderList`,\n    [RENDER_SLOT]: `renderSlot`,\n    [CREATE_SLOTS]: `createSlots`,\n    [TO_DISPLAY_STRING]: `toDisplayString`,\n    [MERGE_PROPS]: `mergeProps`,\n    [NORMALIZE_CLASS]: `normalizeClass`,\n    [NORMALIZE_STYLE]: `normalizeStyle`,\n    [NORMALIZE_PROPS]: `normalizeProps`,\n    [GUARD_REACTIVE_PROPS]: `guardReactiveProps`,\n    [TO_HANDLERS]: `toHandlers`,\n    [CAMELIZE]: `camelize`,\n    [CAPITALIZE]: `capitalize`,\n    [TO_HANDLER_KEY]: `toHandlerKey`,\n    [SET_BLOCK_TRACKING]: `setBlockTracking`,\n    [PUSH_SCOPE_ID]: `pushScopeId`,\n    [POP_SCOPE_ID]: `popScopeId`,\n    [WITH_CTX]: `withCtx`,\n    [UNREF]: `unref`,\n    [IS_REF]: `isRef`,\n    [WITH_MEMO]: `withMemo`,\n    [IS_MEMO_SAME]: `isMemoSame`\n};\nfunction registerRuntimeHelpers(helpers) {\n    Object.getOwnPropertySymbols(helpers).forEach(s => {\n        helperNameMap[s] = helpers[s];\n    });\n}\n\n// AST Utilities ---------------------------------------------------------------\n// Some expressions, e.g. sequence and conditional expressions, are never\n// associated with template nodes, so their source locations are just a stub.\n// Container types like CompoundExpression also don't need a real location.\nconst locStub = {\n    source: '',\n    start: { line: 1, column: 1, offset: 0 },\n    end: { line: 1, column: 1, offset: 0 }\n};\nfunction createRoot(children, loc = locStub) {\n    return {\n        type: 0 /* NodeTypes.ROOT */,\n        children,\n        helpers: new Set(),\n        components: [],\n        directives: [],\n        hoists: [],\n        imports: [],\n        cached: 0,\n        temps: 0,\n        codegenNode: undefined,\n        loc\n    };\n}\nfunction createVNodeCall(context, tag, props, children, patchFlag, dynamicProps, directives, isBlock = false, disableTracking = false, isComponent = false, loc = locStub) {\n    if (context) {\n        if (isBlock) {\n            context.helper(OPEN_BLOCK);\n            context.helper(getVNodeBlockHelper(context.inSSR, isComponent));\n        }\n        else {\n            context.helper(getVNodeHelper(context.inSSR, isComponent));\n        }\n        if (directives) {\n            context.helper(WITH_DIRECTIVES);\n        }\n    }\n    return {\n        type: 13 /* NodeTypes.VNODE_CALL */,\n        tag,\n        props,\n        children,\n        patchFlag,\n        dynamicProps,\n        directives,\n        isBlock,\n        disableTracking,\n        isComponent,\n        loc\n    };\n}\nfunction createArrayExpression(elements, loc = locStub) {\n    return {\n        type: 17 /* NodeTypes.JS_ARRAY_EXPRESSION */,\n        loc,\n        elements\n    };\n}\nfunction createObjectExpression(properties, loc = locStub) {\n    return {\n        type: 15 /* NodeTypes.JS_OBJECT_EXPRESSION */,\n        loc,\n        properties\n    };\n}\nfunction createObjectProperty(key, value) {\n    return {\n        type: 16 /* NodeTypes.JS_PROPERTY */,\n        loc: locStub,\n        key: isString$2(key) ? createSimpleExpression(key, true) : key,\n        value\n    };\n}\nfunction createSimpleExpression(content, isStatic = false, loc = locStub, constType = 0 /* ConstantTypes.NOT_CONSTANT */) {\n    return {\n        type: 4 /* NodeTypes.SIMPLE_EXPRESSION */,\n        loc,\n        content,\n        isStatic,\n        constType: isStatic ? 3 /* ConstantTypes.CAN_STRINGIFY */ : constType\n    };\n}\nfunction createInterpolation(content, loc) {\n    return {\n        type: 5 /* NodeTypes.INTERPOLATION */,\n        loc,\n        content: isString$2(content)\n            ? createSimpleExpression(content, false, loc)\n            : content\n    };\n}\nfunction createCompoundExpression(children, loc = locStub) {\n    return {\n        type: 8 /* NodeTypes.COMPOUND_EXPRESSION */,\n        loc,\n        children\n    };\n}\nfunction createCallExpression(callee, args = [], loc = locStub) {\n    return {\n        type: 14 /* NodeTypes.JS_CALL_EXPRESSION */,\n        loc,\n        callee,\n        arguments: args\n    };\n}\nfunction createFunctionExpression(params, returns = undefined, newline = false, isSlot = false, loc = locStub) {\n    return {\n        type: 18 /* NodeTypes.JS_FUNCTION_EXPRESSION */,\n        params,\n        returns,\n        newline,\n        isSlot,\n        loc\n    };\n}\nfunction createConditionalExpression(test, consequent, alternate, newline = true) {\n    return {\n        type: 19 /* NodeTypes.JS_CONDITIONAL_EXPRESSION */,\n        test,\n        consequent,\n        alternate,\n        newline,\n        loc: locStub\n    };\n}\nfunction createCacheExpression(index, value, isVNode = false) {\n    return {\n        type: 20 /* NodeTypes.JS_CACHE_EXPRESSION */,\n        index,\n        value,\n        isVNode,\n        loc: locStub\n    };\n}\nfunction createBlockStatement(body) {\n    return {\n        type: 21 /* NodeTypes.JS_BLOCK_STATEMENT */,\n        body,\n        loc: locStub\n    };\n}\nfunction createTemplateLiteral(elements) {\n    return {\n        type: 22 /* NodeTypes.JS_TEMPLATE_LITERAL */,\n        elements,\n        loc: locStub\n    };\n}\nfunction createIfStatement(test, consequent, alternate) {\n    return {\n        type: 23 /* NodeTypes.JS_IF_STATEMENT */,\n        test,\n        consequent,\n        alternate,\n        loc: locStub\n    };\n}\nfunction createAssignmentExpression(left, right) {\n    return {\n        type: 24 /* NodeTypes.JS_ASSIGNMENT_EXPRESSION */,\n        left,\n        right,\n        loc: locStub\n    };\n}\nfunction createSequenceExpression(expressions) {\n    return {\n        type: 25 /* NodeTypes.JS_SEQUENCE_EXPRESSION */,\n        expressions,\n        loc: locStub\n    };\n}\nfunction createReturnStatement(returns) {\n    return {\n        type: 26 /* NodeTypes.JS_RETURN_STATEMENT */,\n        returns,\n        loc: locStub\n    };\n}\n\nfunction getDefaultExportFromCjs (x) {\n\treturn x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;\n}\n\nfunction getAugmentedNamespace(n) {\n  var f = n.default;\n\tif (typeof f == \"function\") {\n\t\tvar a = function () {\n\t\t\treturn f.apply(this, arguments);\n\t\t};\n\t\ta.prototype = f.prototype;\n  } else a = {};\n  Object.defineProperty(a, '__esModule', {value: true});\n\tObject.keys(n).forEach(function (k) {\n\t\tvar d = Object.getOwnPropertyDescriptor(n, k);\n\t\tObject.defineProperty(a, k, d.get ? d : {\n\t\t\tenumerable: true,\n\t\t\tget: function () {\n\t\t\t\treturn n[k];\n\t\t\t}\n\t\t});\n\t});\n\treturn a;\n}\n\nvar lib = {};\n\nObject.defineProperty(lib, '__esModule', { value: true });\n\nconst lineBreak = /\\r\\n?|[\\n\\u2028\\u2029]/;\nconst lineBreakG = new RegExp(lineBreak.source, \"g\");\nfunction isNewLine(code) {\n  switch (code) {\n    case 10:\n    case 13:\n    case 8232:\n    case 8233:\n      return true;\n\n    default:\n      return false;\n  }\n}\nconst skipWhiteSpace = /(?:\\s|\\/\\/.*|\\/\\*[^]*?\\*\\/)*/g;\nconst skipWhiteSpaceInLine = /(?:[^\\S\\n\\r\\u2028\\u2029]|\\/\\/.*|\\/\\*.*?\\*\\/)*/y;\nconst skipWhiteSpaceToLineBreak = new RegExp(\"(?=(\" + skipWhiteSpaceInLine.source + \"))\\\\1\" + /(?=[\\n\\r\\u2028\\u2029]|\\/\\*(?!.*?\\*\\/)|$)/.source, \"y\");\nfunction isWhitespace(code) {\n  switch (code) {\n    case 0x0009:\n    case 0x000b:\n    case 0x000c:\n    case 32:\n    case 160:\n    case 5760:\n    case 0x2000:\n    case 0x2001:\n    case 0x2002:\n    case 0x2003:\n    case 0x2004:\n    case 0x2005:\n    case 0x2006:\n    case 0x2007:\n    case 0x2008:\n    case 0x2009:\n    case 0x200a:\n    case 0x202f:\n    case 0x205f:\n    case 0x3000:\n    case 0xfeff:\n      return true;\n\n    default:\n      return false;\n  }\n}\n\nclass Position {\n  constructor(line, col) {\n    this.line = void 0;\n    this.column = void 0;\n    this.line = line;\n    this.column = col;\n  }\n\n}\nclass SourceLocation {\n  constructor(start, end) {\n    this.start = void 0;\n    this.end = void 0;\n    this.filename = void 0;\n    this.identifierName = void 0;\n    this.start = start;\n    this.end = end;\n  }\n\n}\nfunction getLineInfo(input, offset) {\n  let line = 1;\n  let lineStart = 0;\n  let match;\n  lineBreakG.lastIndex = 0;\n\n  while ((match = lineBreakG.exec(input)) && match.index < offset) {\n    line++;\n    lineStart = lineBreakG.lastIndex;\n  }\n\n  return new Position(line, offset - lineStart);\n}\n\nclass BaseParser {\n  constructor() {\n    this.sawUnambiguousESM = false;\n    this.ambiguousScriptDifferentAst = false;\n  }\n\n  hasPlugin(name) {\n    return this.plugins.has(name);\n  }\n\n  getPluginOption(plugin, name) {\n    if (this.hasPlugin(plugin)) return this.plugins.get(plugin)[name];\n  }\n\n}\n\nfunction setTrailingComments(node, comments) {\n  if (node.trailingComments === undefined) {\n    node.trailingComments = comments;\n  } else {\n    node.trailingComments.unshift(...comments);\n  }\n}\n\nfunction setLeadingComments(node, comments) {\n  if (node.leadingComments === undefined) {\n    node.leadingComments = comments;\n  } else {\n    node.leadingComments.unshift(...comments);\n  }\n}\n\nfunction setInnerComments(node, comments) {\n  if (node.innerComments === undefined) {\n    node.innerComments = comments;\n  } else {\n    node.innerComments.unshift(...comments);\n  }\n}\n\nfunction adjustInnerComments(node, elements, commentWS) {\n  let lastElement = null;\n  let i = elements.length;\n\n  while (lastElement === null && i > 0) {\n    lastElement = elements[--i];\n  }\n\n  if (lastElement === null || lastElement.start > commentWS.start) {\n    setInnerComments(node, commentWS.comments);\n  } else {\n    setTrailingComments(lastElement, commentWS.comments);\n  }\n}\n\nclass CommentsParser extends BaseParser {\n  addComment(comment) {\n    if (this.filename) comment.loc.filename = this.filename;\n    this.state.comments.push(comment);\n  }\n\n  processComment(node) {\n    const {\n      commentStack\n    } = this.state;\n    const commentStackLength = commentStack.length;\n    if (commentStackLength === 0) return;\n    let i = commentStackLength - 1;\n    const lastCommentWS = commentStack[i];\n\n    if (lastCommentWS.start === node.end) {\n      lastCommentWS.leadingNode = node;\n      i--;\n    }\n\n    const {\n      start: nodeStart\n    } = node;\n\n    for (; i >= 0; i--) {\n      const commentWS = commentStack[i];\n      const commentEnd = commentWS.end;\n\n      if (commentEnd > nodeStart) {\n        commentWS.containingNode = node;\n        this.finalizeComment(commentWS);\n        commentStack.splice(i, 1);\n      } else {\n        if (commentEnd === nodeStart) {\n          commentWS.trailingNode = node;\n        }\n\n        break;\n      }\n    }\n  }\n\n  finalizeComment(commentWS) {\n    const {\n      comments\n    } = commentWS;\n\n    if (commentWS.leadingNode !== null || commentWS.trailingNode !== null) {\n      if (commentWS.leadingNode !== null) {\n        setTrailingComments(commentWS.leadingNode, comments);\n      }\n\n      if (commentWS.trailingNode !== null) {\n        setLeadingComments(commentWS.trailingNode, comments);\n      }\n    } else {\n      const {\n        containingNode: node,\n        start: commentStart\n      } = commentWS;\n\n      if (this.input.charCodeAt(commentStart - 1) === 44) {\n        switch (node.type) {\n          case \"ObjectExpression\":\n          case \"ObjectPattern\":\n          case \"RecordExpression\":\n            adjustInnerComments(node, node.properties, commentWS);\n            break;\n\n          case \"CallExpression\":\n          case \"OptionalCallExpression\":\n            adjustInnerComments(node, node.arguments, commentWS);\n            break;\n\n          case \"FunctionDeclaration\":\n          case \"FunctionExpression\":\n          case \"ArrowFunctionExpression\":\n          case \"ObjectMethod\":\n          case \"ClassMethod\":\n          case \"ClassPrivateMethod\":\n            adjustInnerComments(node, node.params, commentWS);\n            break;\n\n          case \"ArrayExpression\":\n          case \"ArrayPattern\":\n          case \"TupleExpression\":\n            adjustInnerComments(node, node.elements, commentWS);\n            break;\n\n          case \"ExportNamedDeclaration\":\n          case \"ImportDeclaration\":\n            adjustInnerComments(node, node.specifiers, commentWS);\n            break;\n\n          default:\n            {\n              setInnerComments(node, comments);\n            }\n        }\n      } else {\n        setInnerComments(node, comments);\n      }\n    }\n  }\n\n  finalizeRemainingComments() {\n    const {\n      commentStack\n    } = this.state;\n\n    for (let i = commentStack.length - 1; i >= 0; i--) {\n      this.finalizeComment(commentStack[i]);\n    }\n\n    this.state.commentStack = [];\n  }\n\n  resetPreviousNodeTrailingComments(node) {\n    const {\n      commentStack\n    } = this.state;\n    const {\n      length\n    } = commentStack;\n    if (length === 0) return;\n    const commentWS = commentStack[length - 1];\n\n    if (commentWS.leadingNode === node) {\n      commentWS.leadingNode = null;\n    }\n  }\n\n  takeSurroundingComments(node, start, end) {\n    const {\n      commentStack\n    } = this.state;\n    const commentStackLength = commentStack.length;\n    if (commentStackLength === 0) return;\n    let i = commentStackLength - 1;\n\n    for (; i >= 0; i--) {\n      const commentWS = commentStack[i];\n      const commentEnd = commentWS.end;\n      const commentStart = commentWS.start;\n\n      if (commentStart === end) {\n        commentWS.leadingNode = node;\n      } else if (commentEnd === start) {\n        commentWS.trailingNode = node;\n      } else if (commentEnd < start) {\n        break;\n      }\n    }\n  }\n\n}\n\nconst ErrorCodes = Object.freeze({\n  SyntaxError: \"BABEL_PARSER_SYNTAX_ERROR\",\n  SourceTypeModuleError: \"BABEL_PARSER_SOURCETYPE_MODULE_REQUIRED\"\n});\n\nconst ErrorMessages = makeErrorTemplates({\n  AccessorIsGenerator: \"A %0ter cannot be a generator.\",\n  ArgumentsInClass: \"'arguments' is only allowed in functions and class methods.\",\n  AsyncFunctionInSingleStatementContext: \"Async functions can only be declared at the top level or inside a block.\",\n  AwaitBindingIdentifier: \"Can not use 'await' as identifier inside an async function.\",\n  AwaitBindingIdentifierInStaticBlock: \"Can not use 'await' as identifier inside a static block.\",\n  AwaitExpressionFormalParameter: \"'await' is not allowed in async function parameters.\",\n  AwaitNotInAsyncContext: \"'await' is only allowed within async functions and at the top levels of modules.\",\n  AwaitNotInAsyncFunction: \"'await' is only allowed within async functions.\",\n  BadGetterArity: \"A 'get' accesor must not have any formal parameters.\",\n  BadSetterArity: \"A 'set' accesor must have exactly one formal parameter.\",\n  BadSetterRestParameter: \"A 'set' accesor function argument must not be a rest parameter.\",\n  ConstructorClassField: \"Classes may not have a field named 'constructor'.\",\n  ConstructorClassPrivateField: \"Classes may not have a private field named '#constructor'.\",\n  ConstructorIsAccessor: \"Class constructor may not be an accessor.\",\n  ConstructorIsAsync: \"Constructor can't be an async function.\",\n  ConstructorIsGenerator: \"Constructor can't be a generator.\",\n  DeclarationMissingInitializer: \"'%0' require an initialization value.\",\n  DecoratorBeforeExport: \"Decorators must be placed *before* the 'export' keyword. You can set the 'decoratorsBeforeExport' option to false to use the 'export @decorator class {}' syntax.\",\n  DecoratorConstructor: \"Decorators can't be used with a constructor. Did you mean '@dec class { ... }'?\",\n  DecoratorExportClass: \"Using the export keyword between a decorator and a class is not allowed. Please use `export @dec class` instead.\",\n  DecoratorSemicolon: \"Decorators must not be followed by a semicolon.\",\n  DecoratorStaticBlock: \"Decorators can't be used with a static block.\",\n  DeletePrivateField: \"Deleting a private field is not allowed.\",\n  DestructureNamedImport: \"ES2015 named imports do not destructure. Use another statement for destructuring after the import.\",\n  DuplicateConstructor: \"Duplicate constructor in the same class.\",\n  DuplicateDefaultExport: \"Only one default export allowed per module.\",\n  DuplicateExport: \"`%0` has already been exported. Exported identifiers must be unique.\",\n  DuplicateProto: \"Redefinition of __proto__ property.\",\n  DuplicateRegExpFlags: \"Duplicate regular expression flag.\",\n  ElementAfterRest: \"Rest element must be last element.\",\n  EscapedCharNotAnIdentifier: \"Invalid Unicode escape.\",\n  ExportBindingIsString: \"A string literal cannot be used as an exported binding without `from`.\\n- Did you mean `export { '%0' as '%1' } from 'some-module'`?\",\n  ExportDefaultFromAsIdentifier: \"'from' is not allowed as an identifier after 'export default'.\",\n  ForInOfLoopInitializer: \"'%0' loop variable declaration may not have an initializer.\",\n  ForOfAsync: \"The left-hand side of a for-of loop may not be 'async'.\",\n  ForOfLet: \"The left-hand side of a for-of loop may not start with 'let'.\",\n  GeneratorInSingleStatementContext: \"Generators can only be declared at the top level or inside a block.\",\n  IllegalBreakContinue: \"Unsyntactic %0.\",\n  IllegalLanguageModeDirective: \"Illegal 'use strict' directive in function with non-simple parameter list.\",\n  IllegalReturn: \"'return' outside of function.\",\n  ImportBindingIsString: 'A string literal cannot be used as an imported binding.\\n- Did you mean `import { \"%0\" as foo }`?',\n  ImportCallArgumentTrailingComma: \"Trailing comma is disallowed inside import(...) arguments.\",\n  ImportCallArity: \"`import()` requires exactly %0.\",\n  ImportCallNotNewExpression: \"Cannot use new with import(...).\",\n  ImportCallSpreadArgument: \"`...` is not allowed in `import()`.\",\n  InvalidBigIntLiteral: \"Invalid BigIntLiteral.\",\n  InvalidCodePoint: \"Code point out of bounds.\",\n  InvalidDecimal: \"Invalid decimal.\",\n  InvalidDigit: \"Expected number in radix %0.\",\n  InvalidEscapeSequence: \"Bad character escape sequence.\",\n  InvalidEscapeSequenceTemplate: \"Invalid escape sequence in template.\",\n  InvalidEscapedReservedWord: \"Escape sequence in keyword %0.\",\n  InvalidIdentifier: \"Invalid identifier %0.\",\n  InvalidLhs: \"Invalid left-hand side in %0.\",\n  InvalidLhsBinding: \"Binding invalid left-hand side in %0.\",\n  InvalidNumber: \"Invalid number.\",\n  InvalidOrMissingExponent: \"Floating-point numbers require a valid exponent after the 'e'.\",\n  InvalidOrUnexpectedToken: \"Unexpected character '%0'.\",\n  InvalidParenthesizedAssignment: \"Invalid parenthesized assignment pattern.\",\n  InvalidPrivateFieldResolution: \"Private name #%0 is not defined.\",\n  InvalidPropertyBindingPattern: \"Binding member expression.\",\n  InvalidRecordProperty: \"Only properties and spread elements are allowed in record definitions.\",\n  InvalidRestAssignmentPattern: \"Invalid rest operator's argument.\",\n  LabelRedeclaration: \"Label '%0' is already declared.\",\n  LetInLexicalBinding: \"'let' is not allowed to be used as a name in 'let' or 'const' declarations.\",\n  LineTerminatorBeforeArrow: \"No line break is allowed before '=>'.\",\n  MalformedRegExpFlags: \"Invalid regular expression flag.\",\n  MissingClassName: \"A class name is required.\",\n  MissingEqInAssignment: \"Only '=' operator can be used for specifying default value.\",\n  MissingSemicolon: \"Missing semicolon.\",\n  MissingUnicodeEscape: \"Expecting Unicode escape sequence \\\\uXXXX.\",\n  MixingCoalesceWithLogical: \"Nullish coalescing operator(??) requires parens when mixing with logical operators.\",\n  ModuleAttributeDifferentFromType: \"The only accepted module attribute is `type`.\",\n  ModuleAttributeInvalidValue: \"Only string literals are allowed as module attribute values.\",\n  ModuleAttributesWithDuplicateKeys: 'Duplicate key \"%0\" is not allowed in module attributes.',\n  ModuleExportNameHasLoneSurrogate: \"An export name cannot include a lone surrogate, found '\\\\u%0'.\",\n  ModuleExportUndefined: \"Export '%0' is not defined.\",\n  MultipleDefaultsInSwitch: \"Multiple default clauses.\",\n  NewlineAfterThrow: \"Illegal newline after throw.\",\n  NoCatchOrFinally: \"Missing catch or finally clause.\",\n  NumberIdentifier: \"Identifier directly after number.\",\n  NumericSeparatorInEscapeSequence: \"Numeric separators are not allowed inside unicode escape sequences or hex escape sequences.\",\n  ObsoleteAwaitStar: \"'await*' has been removed from the async functions proposal. Use Promise.all() instead.\",\n  OptionalChainingNoNew: \"Constructors in/after an Optional Chain are not allowed.\",\n  OptionalChainingNoTemplate: \"Tagged Template Literals are not allowed in optionalChain.\",\n  OverrideOnConstructor: \"'override' modifier cannot appear on a constructor declaration.\",\n  ParamDupe: \"Argument name clash.\",\n  PatternHasAccessor: \"Object pattern can't contain getter or setter.\",\n  PatternHasMethod: \"Object pattern can't contain methods.\",\n  PipeBodyIsTighter: \"Unexpected %0 after pipeline body; any %0 expression acting as Hack-style pipe body must be parenthesized due to its loose operator precedence.\",\n  PipeTopicRequiresHackPipes: 'Topic reference is used, but the pipelineOperator plugin was not passed a \"proposal\": \"hack\" or \"smart\" option.',\n  PipeTopicUnbound: \"Topic reference is unbound; it must be inside a pipe body.\",\n  PipeTopicUnconfiguredToken: 'Invalid topic token %0. In order to use %0 as a topic reference, the pipelineOperator plugin must be configured with { \"proposal\": \"hack\", \"topicToken\": \"%0\" }.',\n  PipeTopicUnused: \"Hack-style pipe body does not contain a topic reference; Hack-style pipes must use topic at least once.\",\n  PipeUnparenthesizedBody: \"Hack-style pipe body cannot be an unparenthesized %0 expression; please wrap it in parentheses.\",\n  PipelineBodyNoArrow: 'Unexpected arrow \"=>\" after pipeline body; arrow function in pipeline body must be parenthesized.',\n  PipelineBodySequenceExpression: \"Pipeline body may not be a comma-separated sequence expression.\",\n  PipelineHeadSequenceExpression: \"Pipeline head should not be a comma-separated sequence expression.\",\n  PipelineTopicUnused: \"Pipeline is in topic style but does not use topic reference.\",\n  PrimaryTopicNotAllowed: \"Topic reference was used in a lexical context without topic binding.\",\n  PrimaryTopicRequiresSmartPipeline: 'Topic reference is used, but the pipelineOperator plugin was not passed a \"proposal\": \"hack\" or \"smart\" option.',\n  PrivateInExpectedIn: \"Private names are only allowed in property accesses (`obj.#%0`) or in `in` expressions (`#%0 in obj`).\",\n  PrivateNameRedeclaration: \"Duplicate private name #%0.\",\n  RecordExpressionBarIncorrectEndSyntaxType: \"Record expressions ending with '|}' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'.\",\n  RecordExpressionBarIncorrectStartSyntaxType: \"Record expressions starting with '{|' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'.\",\n  RecordExpressionHashIncorrectStartSyntaxType: \"Record expressions starting with '#{' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'hash'.\",\n  RecordNoProto: \"'__proto__' is not allowed in Record expressions.\",\n  RestTrailingComma: \"Unexpected trailing comma after rest element.\",\n  SloppyFunction: \"In non-strict mode code, functions can only be declared at top level, inside a block, or as the body of an if statement.\",\n  StaticPrototype: \"Classes may not have static property named prototype.\",\n  StrictDelete: \"Deleting local variable in strict mode.\",\n  StrictEvalArguments: \"Assigning to '%0' in strict mode.\",\n  StrictEvalArgumentsBinding: \"Binding '%0' in strict mode.\",\n  StrictFunction: \"In strict mode code, functions can only be declared at top level or inside a block.\",\n  StrictNumericEscape: \"The only valid numeric escape in strict mode is '\\\\0'.\",\n  StrictOctalLiteral: \"Legacy octal literals are not allowed in strict mode.\",\n  StrictWith: \"'with' in strict mode.\",\n  SuperNotAllowed: \"`super()` is only valid inside a class constructor of a subclass. Maybe a typo in the method name ('constructor') or not extending another class?\",\n  SuperPrivateField: \"Private fields can't be accessed on super.\",\n  TrailingDecorator: \"Decorators must be attached to a class element.\",\n  TupleExpressionBarIncorrectEndSyntaxType: \"Tuple expressions ending with '|]' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'.\",\n  TupleExpressionBarIncorrectStartSyntaxType: \"Tuple expressions starting with '[|' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'.\",\n  TupleExpressionHashIncorrectStartSyntaxType: \"Tuple expressions starting with '#[' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'hash'.\",\n  UnexpectedArgumentPlaceholder: \"Unexpected argument placeholder.\",\n  UnexpectedAwaitAfterPipelineBody: 'Unexpected \"await\" after pipeline body; await must have parentheses in minimal proposal.',\n  UnexpectedDigitAfterHash: \"Unexpected digit after hash token.\",\n  UnexpectedImportExport: \"'import' and 'export' may only appear at the top level.\",\n  UnexpectedKeyword: \"Unexpected keyword '%0'.\",\n  UnexpectedLeadingDecorator: \"Leading decorators must be attached to a class declaration.\",\n  UnexpectedLexicalDeclaration: \"Lexical declaration cannot appear in a single-statement context.\",\n  UnexpectedNewTarget: \"`new.target` can only be used in functions or class properties.\",\n  UnexpectedNumericSeparator: \"A numeric separator is only allowed between two digits.\",\n  UnexpectedPrivateField: \"Private names can only be used as the name of a class element (i.e. class C { #p = 42; #m() {} } )\\n or a property of member expression (i.e. this.#p).\",\n  UnexpectedReservedWord: \"Unexpected reserved word '%0'.\",\n  UnexpectedSuper: \"'super' is only allowed in object methods and classes.\",\n  UnexpectedToken: \"Unexpected token '%0'.\",\n  UnexpectedTokenUnaryExponentiation: \"Illegal expression. Wrap left hand side or entire exponentiation in parentheses.\",\n  UnsupportedBind: \"Binding should be performed on object property.\",\n  UnsupportedDecoratorExport: \"A decorated export must export a class declaration.\",\n  UnsupportedDefaultExport: \"Only expressions, functions or classes are allowed as the `default` export.\",\n  UnsupportedImport: \"`import` can only be used in `import()` or `import.meta`.\",\n  UnsupportedMetaProperty: \"The only valid meta property for %0 is %0.%1.\",\n  UnsupportedParameterDecorator: \"Decorators cannot be used to decorate parameters.\",\n  UnsupportedPropertyDecorator: \"Decorators cannot be used to decorate object literal properties.\",\n  UnsupportedSuper: \"'super' can only be used with function calls (i.e. super()) or in property accesses (i.e. super.prop or super[prop]).\",\n  UnterminatedComment: \"Unterminated comment.\",\n  UnterminatedRegExp: \"Unterminated regular expression.\",\n  UnterminatedString: \"Unterminated string constant.\",\n  UnterminatedTemplate: \"Unterminated template.\",\n  VarRedeclaration: \"Identifier '%0' has already been declared.\",\n  YieldBindingIdentifier: \"Can not use 'yield' as identifier inside a generator.\",\n  YieldInParameter: \"Yield expression is not allowed in formal parameters.\",\n  ZeroDigitNumericSeparator: \"Numeric separator can not be used after leading 0.\"\n}, ErrorCodes.SyntaxError);\nconst SourceTypeModuleErrorMessages = makeErrorTemplates({\n  ImportMetaOutsideModule: `import.meta may appear only with 'sourceType: \"module\"'`,\n  ImportOutsideModule: `'import' and 'export' may appear only with 'sourceType: \"module\"'`\n}, ErrorCodes.SourceTypeModuleError);\n\nfunction keepReasonCodeCompat(reasonCode, syntaxPlugin) {\n  {\n    if (syntaxPlugin === \"flow\" && reasonCode === \"PatternIsOptional\") {\n      return \"OptionalBindingPattern\";\n    }\n  }\n  return reasonCode;\n}\n\nfunction makeErrorTemplates(messages, code, syntaxPlugin) {\n  const templates = {};\n  Object.keys(messages).forEach(reasonCode => {\n    templates[reasonCode] = Object.freeze({\n      code,\n      reasonCode: keepReasonCodeCompat(reasonCode, syntaxPlugin),\n      template: messages[reasonCode]\n    });\n  });\n  return Object.freeze(templates);\n}\nclass ParserError extends CommentsParser {\n  getLocationForPosition(pos) {\n    let loc;\n    if (pos === this.state.start) loc = this.state.startLoc;else if (pos === this.state.lastTokStart) loc = this.state.lastTokStartLoc;else if (pos === this.state.end) loc = this.state.endLoc;else if (pos === this.state.lastTokEnd) loc = this.state.lastTokEndLoc;else loc = getLineInfo(this.input, pos);\n    return loc;\n  }\n\n  raise(pos, {\n    code,\n    reasonCode,\n    template\n  }, ...params) {\n    return this.raiseWithData(pos, {\n      code,\n      reasonCode\n    }, template, ...params);\n  }\n\n  raiseOverwrite(pos, {\n    code,\n    template\n  }, ...params) {\n    const loc = this.getLocationForPosition(pos);\n    const message = template.replace(/%(\\d+)/g, (_, i) => params[i]) + ` (${loc.line}:${loc.column})`;\n\n    if (this.options.errorRecovery) {\n      const errors = this.state.errors;\n\n      for (let i = errors.length - 1; i >= 0; i--) {\n        const error = errors[i];\n\n        if (error.pos === pos) {\n          return Object.assign(error, {\n            message\n          });\n        } else if (error.pos < pos) {\n          break;\n        }\n      }\n    }\n\n    return this._raise({\n      code,\n      loc,\n      pos\n    }, message);\n  }\n\n  raiseWithData(pos, data, errorTemplate, ...params) {\n    const loc = this.getLocationForPosition(pos);\n    const message = errorTemplate.replace(/%(\\d+)/g, (_, i) => params[i]) + ` (${loc.line}:${loc.column})`;\n    return this._raise(Object.assign({\n      loc,\n      pos\n    }, data), message);\n  }\n\n  _raise(errorContext, message) {\n    const err = new SyntaxError(message);\n    Object.assign(err, errorContext);\n\n    if (this.options.errorRecovery) {\n      if (!this.isLookahead) this.state.errors.push(err);\n      return err;\n    } else {\n      throw err;\n    }\n  }\n\n}\n\nvar estree = (superClass => class extends superClass {\n  parseRegExpLiteral({\n    pattern,\n    flags\n  }) {\n    let regex = null;\n\n    try {\n      regex = new RegExp(pattern, flags);\n    } catch (e) {}\n\n    const node = this.estreeParseLiteral(regex);\n    node.regex = {\n      pattern,\n      flags\n    };\n    return node;\n  }\n\n  parseBigIntLiteral(value) {\n    let bigInt;\n\n    try {\n      bigInt = BigInt(value);\n    } catch (_unused) {\n      bigInt = null;\n    }\n\n    const node = this.estreeParseLiteral(bigInt);\n    node.bigint = String(node.value || value);\n    return node;\n  }\n\n  parseDecimalLiteral(value) {\n    const decimal = null;\n    const node = this.estreeParseLiteral(decimal);\n    node.decimal = String(node.value || value);\n    return node;\n  }\n\n  estreeParseLiteral(value) {\n    return this.parseLiteral(value, \"Literal\");\n  }\n\n  parseStringLiteral(value) {\n    return this.estreeParseLiteral(value);\n  }\n\n  parseNumericLiteral(value) {\n    return this.estreeParseLiteral(value);\n  }\n\n  parseNullLiteral() {\n    return this.estreeParseLiteral(null);\n  }\n\n  parseBooleanLiteral(value) {\n    return this.estreeParseLiteral(value);\n  }\n\n  directiveToStmt(directive) {\n    const directiveLiteral = directive.value;\n    const stmt = this.startNodeAt(directive.start, directive.loc.start);\n    const expression = this.startNodeAt(directiveLiteral.start, directiveLiteral.loc.start);\n    expression.value = directiveLiteral.extra.expressionValue;\n    expression.raw = directiveLiteral.extra.raw;\n    stmt.expression = this.finishNodeAt(expression, \"Literal\", directiveLiteral.end, directiveLiteral.loc.end);\n    stmt.directive = directiveLiteral.extra.raw.slice(1, -1);\n    return this.finishNodeAt(stmt, \"ExpressionStatement\", directive.end, directive.loc.end);\n  }\n\n  initFunction(node, isAsync) {\n    super.initFunction(node, isAsync);\n    node.expression = false;\n  }\n\n  checkDeclaration(node) {\n    if (node != null && this.isObjectProperty(node)) {\n      this.checkDeclaration(node.value);\n    } else {\n      super.checkDeclaration(node);\n    }\n  }\n\n  getObjectOrClassMethodParams(method) {\n    return method.value.params;\n  }\n\n  isValidDirective(stmt) {\n    var _stmt$expression$extr;\n\n    return stmt.type === \"ExpressionStatement\" && stmt.expression.type === \"Literal\" && typeof stmt.expression.value === \"string\" && !((_stmt$expression$extr = stmt.expression.extra) != null && _stmt$expression$extr.parenthesized);\n  }\n\n  parseBlockBody(node, ...args) {\n    super.parseBlockBody(node, ...args);\n    const directiveStatements = node.directives.map(d => this.directiveToStmt(d));\n    node.body = directiveStatements.concat(node.body);\n    delete node.directives;\n  }\n\n  pushClassMethod(classBody, method, isGenerator, isAsync, isConstructor, allowsDirectSuper) {\n    this.parseMethod(method, isGenerator, isAsync, isConstructor, allowsDirectSuper, \"ClassMethod\", true);\n\n    if (method.typeParameters) {\n      method.value.typeParameters = method.typeParameters;\n      delete method.typeParameters;\n    }\n\n    classBody.body.push(method);\n  }\n\n  parsePrivateName() {\n    const node = super.parsePrivateName();\n    {\n      if (!this.getPluginOption(\"estree\", \"classFeatures\")) {\n        return node;\n      }\n    }\n    return this.convertPrivateNameToPrivateIdentifier(node);\n  }\n\n  convertPrivateNameToPrivateIdentifier(node) {\n    const name = super.getPrivateNameSV(node);\n    node = node;\n    delete node.id;\n    node.name = name;\n    node.type = \"PrivateIdentifier\";\n    return node;\n  }\n\n  isPrivateName(node) {\n    {\n      if (!this.getPluginOption(\"estree\", \"classFeatures\")) {\n        return super.isPrivateName(node);\n      }\n    }\n    return node.type === \"PrivateIdentifier\";\n  }\n\n  getPrivateNameSV(node) {\n    {\n      if (!this.getPluginOption(\"estree\", \"classFeatures\")) {\n        return super.getPrivateNameSV(node);\n      }\n    }\n    return node.name;\n  }\n\n  parseLiteral(value, type) {\n    const node = super.parseLiteral(value, type);\n    node.raw = node.extra.raw;\n    delete node.extra;\n    return node;\n  }\n\n  parseFunctionBody(node, allowExpression, isMethod = false) {\n    super.parseFunctionBody(node, allowExpression, isMethod);\n    node.expression = node.body.type !== \"BlockStatement\";\n  }\n\n  parseMethod(node, isGenerator, isAsync, isConstructor, allowDirectSuper, type, inClassScope = false) {\n    let funcNode = this.startNode();\n    funcNode.kind = node.kind;\n    funcNode = super.parseMethod(funcNode, isGenerator, isAsync, isConstructor, allowDirectSuper, type, inClassScope);\n    funcNode.type = \"FunctionExpression\";\n    delete funcNode.kind;\n    node.value = funcNode;\n\n    if (type === \"ClassPrivateMethod\") {\n      node.computed = false;\n    }\n\n    type = \"MethodDefinition\";\n    return this.finishNode(node, type);\n  }\n\n  parseClassProperty(...args) {\n    const propertyNode = super.parseClassProperty(...args);\n    {\n      if (!this.getPluginOption(\"estree\", \"classFeatures\")) {\n        return propertyNode;\n      }\n    }\n    propertyNode.type = \"PropertyDefinition\";\n    return propertyNode;\n  }\n\n  parseClassPrivateProperty(...args) {\n    const propertyNode = super.parseClassPrivateProperty(...args);\n    {\n      if (!this.getPluginOption(\"estree\", \"classFeatures\")) {\n        return propertyNode;\n      }\n    }\n    propertyNode.type = \"PropertyDefinition\";\n    propertyNode.computed = false;\n    return propertyNode;\n  }\n\n  parseObjectMethod(prop, isGenerator, isAsync, isPattern, isAccessor) {\n    const node = super.parseObjectMethod(prop, isGenerator, isAsync, isPattern, isAccessor);\n\n    if (node) {\n      node.type = \"Property\";\n      if (node.kind === \"method\") node.kind = \"init\";\n      node.shorthand = false;\n    }\n\n    return node;\n  }\n\n  parseObjectProperty(prop, startPos, startLoc, isPattern, refExpressionErrors) {\n    const node = super.parseObjectProperty(prop, startPos, startLoc, isPattern, refExpressionErrors);\n\n    if (node) {\n      node.kind = \"init\";\n      node.type = \"Property\";\n    }\n\n    return node;\n  }\n\n  isAssignable(node, isBinding) {\n    if (node != null && this.isObjectProperty(node)) {\n      return this.isAssignable(node.value, isBinding);\n    }\n\n    return super.isAssignable(node, isBinding);\n  }\n\n  toAssignable(node, isLHS = false) {\n    if (node != null && this.isObjectProperty(node)) {\n      this.toAssignable(node.value, isLHS);\n      return node;\n    }\n\n    return super.toAssignable(node, isLHS);\n  }\n\n  toAssignableObjectExpressionProp(prop, ...args) {\n    if (prop.kind === \"get\" || prop.kind === \"set\") {\n      this.raise(prop.key.start, ErrorMessages.PatternHasAccessor);\n    } else if (prop.method) {\n      this.raise(prop.key.start, ErrorMessages.PatternHasMethod);\n    } else {\n      super.toAssignableObjectExpressionProp(prop, ...args);\n    }\n  }\n\n  finishCallExpression(node, optional) {\n    super.finishCallExpression(node, optional);\n\n    if (node.callee.type === \"Import\") {\n      node.type = \"ImportExpression\";\n      node.source = node.arguments[0];\n\n      if (this.hasPlugin(\"importAssertions\")) {\n        var _node$arguments$;\n\n        node.attributes = (_node$arguments$ = node.arguments[1]) != null ? _node$arguments$ : null;\n      }\n\n      delete node.arguments;\n      delete node.callee;\n    }\n\n    return node;\n  }\n\n  toReferencedArguments(node) {\n    if (node.type === \"ImportExpression\") {\n      return;\n    }\n\n    super.toReferencedArguments(node);\n  }\n\n  parseExport(node) {\n    super.parseExport(node);\n\n    switch (node.type) {\n      case \"ExportAllDeclaration\":\n        node.exported = null;\n        break;\n\n      case \"ExportNamedDeclaration\":\n        if (node.specifiers.length === 1 && node.specifiers[0].type === \"ExportNamespaceSpecifier\") {\n          node.type = \"ExportAllDeclaration\";\n          node.exported = node.specifiers[0].exported;\n          delete node.specifiers;\n        }\n\n        break;\n    }\n\n    return node;\n  }\n\n  parseSubscript(base, startPos, startLoc, noCalls, state) {\n    const node = super.parseSubscript(base, startPos, startLoc, noCalls, state);\n\n    if (state.optionalChainMember) {\n      if (node.type === \"OptionalMemberExpression\" || node.type === \"OptionalCallExpression\") {\n        node.type = node.type.substring(8);\n      }\n\n      if (state.stop) {\n        const chain = this.startNodeAtNode(node);\n        chain.expression = node;\n        return this.finishNode(chain, \"ChainExpression\");\n      }\n    } else if (node.type === \"MemberExpression\" || node.type === \"CallExpression\") {\n      node.optional = false;\n    }\n\n    return node;\n  }\n\n  hasPropertyAsPrivateName(node) {\n    if (node.type === \"ChainExpression\") {\n      node = node.expression;\n    }\n\n    return super.hasPropertyAsPrivateName(node);\n  }\n\n  isOptionalChain(node) {\n    return node.type === \"ChainExpression\";\n  }\n\n  isObjectProperty(node) {\n    return node.type === \"Property\" && node.kind === \"init\" && !node.method;\n  }\n\n  isObjectMethod(node) {\n    return node.method || node.kind === \"get\" || node.kind === \"set\";\n  }\n\n});\n\nclass TokContext {\n  constructor(token, preserveSpace) {\n    this.token = void 0;\n    this.preserveSpace = void 0;\n    this.token = token;\n    this.preserveSpace = !!preserveSpace;\n  }\n\n}\nconst types$1 = {\n  brace: new TokContext(\"{\"),\n  template: new TokContext(\"`\", true)\n};\n\nconst beforeExpr = true;\nconst startsExpr = true;\nconst isLoop = true;\nconst isAssign = true;\nconst prefix = true;\nconst postfix = true;\nclass ExportedTokenType {\n  constructor(label, conf = {}) {\n    this.label = void 0;\n    this.keyword = void 0;\n    this.beforeExpr = void 0;\n    this.startsExpr = void 0;\n    this.rightAssociative = void 0;\n    this.isLoop = void 0;\n    this.isAssign = void 0;\n    this.prefix = void 0;\n    this.postfix = void 0;\n    this.binop = void 0;\n    this.label = label;\n    this.keyword = conf.keyword;\n    this.beforeExpr = !!conf.beforeExpr;\n    this.startsExpr = !!conf.startsExpr;\n    this.rightAssociative = !!conf.rightAssociative;\n    this.isLoop = !!conf.isLoop;\n    this.isAssign = !!conf.isAssign;\n    this.prefix = !!conf.prefix;\n    this.postfix = !!conf.postfix;\n    this.binop = conf.binop != null ? conf.binop : null;\n    {\n      this.updateContext = null;\n    }\n  }\n\n}\nconst keywords$1 = new Map();\n\nfunction createKeyword(name, options = {}) {\n  options.keyword = name;\n  const token = createToken(name, options);\n  keywords$1.set(name, token);\n  return token;\n}\n\nfunction createBinop(name, binop) {\n  return createToken(name, {\n    beforeExpr,\n    binop\n  });\n}\n\nlet tokenTypeCounter = -1;\nconst tokenTypes$1 = [];\nconst tokenLabels = [];\nconst tokenBinops = [];\nconst tokenBeforeExprs = [];\nconst tokenStartsExprs = [];\nconst tokenPrefixes = [];\n\nfunction createToken(name, options = {}) {\n  var _options$binop, _options$beforeExpr, _options$startsExpr, _options$prefix;\n\n  ++tokenTypeCounter;\n  tokenLabels.push(name);\n  tokenBinops.push((_options$binop = options.binop) != null ? _options$binop : -1);\n  tokenBeforeExprs.push((_options$beforeExpr = options.beforeExpr) != null ? _options$beforeExpr : false);\n  tokenStartsExprs.push((_options$startsExpr = options.startsExpr) != null ? _options$startsExpr : false);\n  tokenPrefixes.push((_options$prefix = options.prefix) != null ? _options$prefix : false);\n  tokenTypes$1.push(new ExportedTokenType(name, options));\n  return tokenTypeCounter;\n}\n\nfunction createKeywordLike(name, options = {}) {\n  var _options$binop2, _options$beforeExpr2, _options$startsExpr2, _options$prefix2;\n\n  ++tokenTypeCounter;\n  keywords$1.set(name, tokenTypeCounter);\n  tokenLabels.push(name);\n  tokenBinops.push((_options$binop2 = options.binop) != null ? _options$binop2 : -1);\n  tokenBeforeExprs.push((_options$beforeExpr2 = options.beforeExpr) != null ? _options$beforeExpr2 : false);\n  tokenStartsExprs.push((_options$startsExpr2 = options.startsExpr) != null ? _options$startsExpr2 : false);\n  tokenPrefixes.push((_options$prefix2 = options.prefix) != null ? _options$prefix2 : false);\n  tokenTypes$1.push(new ExportedTokenType(\"name\", options));\n  return tokenTypeCounter;\n}\n\nconst tt = {\n  bracketL: createToken(\"[\", {\n    beforeExpr,\n    startsExpr\n  }),\n  bracketHashL: createToken(\"#[\", {\n    beforeExpr,\n    startsExpr\n  }),\n  bracketBarL: createToken(\"[|\", {\n    beforeExpr,\n    startsExpr\n  }),\n  bracketR: createToken(\"]\"),\n  bracketBarR: createToken(\"|]\"),\n  braceL: createToken(\"{\", {\n    beforeExpr,\n    startsExpr\n  }),\n  braceBarL: createToken(\"{|\", {\n    beforeExpr,\n    startsExpr\n  }),\n  braceHashL: createToken(\"#{\", {\n    beforeExpr,\n    startsExpr\n  }),\n  braceR: createToken(\"}\", {\n    beforeExpr\n  }),\n  braceBarR: createToken(\"|}\"),\n  parenL: createToken(\"(\", {\n    beforeExpr,\n    startsExpr\n  }),\n  parenR: createToken(\")\"),\n  comma: createToken(\",\", {\n    beforeExpr\n  }),\n  semi: createToken(\";\", {\n    beforeExpr\n  }),\n  colon: createToken(\":\", {\n    beforeExpr\n  }),\n  doubleColon: createToken(\"::\", {\n    beforeExpr\n  }),\n  dot: createToken(\".\"),\n  question: createToken(\"?\", {\n    beforeExpr\n  }),\n  questionDot: createToken(\"?.\"),\n  arrow: createToken(\"=>\", {\n    beforeExpr\n  }),\n  template: createToken(\"template\"),\n  ellipsis: createToken(\"...\", {\n    beforeExpr\n  }),\n  backQuote: createToken(\"`\", {\n    startsExpr\n  }),\n  dollarBraceL: createToken(\"${\", {\n    beforeExpr,\n    startsExpr\n  }),\n  at: createToken(\"@\"),\n  hash: createToken(\"#\", {\n    startsExpr\n  }),\n  interpreterDirective: createToken(\"#!...\"),\n  eq: createToken(\"=\", {\n    beforeExpr,\n    isAssign\n  }),\n  assign: createToken(\"_=\", {\n    beforeExpr,\n    isAssign\n  }),\n  slashAssign: createToken(\"_=\", {\n    beforeExpr,\n    isAssign\n  }),\n  xorAssign: createToken(\"_=\", {\n    beforeExpr,\n    isAssign\n  }),\n  moduloAssign: createToken(\"_=\", {\n    beforeExpr,\n    isAssign\n  }),\n  incDec: createToken(\"++/--\", {\n    prefix,\n    postfix,\n    startsExpr\n  }),\n  bang: createToken(\"!\", {\n    beforeExpr,\n    prefix,\n    startsExpr\n  }),\n  tilde: createToken(\"~\", {\n    beforeExpr,\n    prefix,\n    startsExpr\n  }),\n  pipeline: createBinop(\"|>\", 0),\n  nullishCoalescing: createBinop(\"??\", 1),\n  logicalOR: createBinop(\"||\", 1),\n  logicalAND: createBinop(\"&&\", 2),\n  bitwiseOR: createBinop(\"|\", 3),\n  bitwiseXOR: createBinop(\"^\", 4),\n  bitwiseAND: createBinop(\"&\", 5),\n  equality: createBinop(\"==/!=/===/!==\", 6),\n  lt: createBinop(\"</>/<=/>=\", 7),\n  gt: createBinop(\"</>/<=/>=\", 7),\n  relational: createBinop(\"</>/<=/>=\", 7),\n  bitShift: createBinop(\"<</>>/>>>\", 8),\n  plusMin: createToken(\"+/-\", {\n    beforeExpr,\n    binop: 9,\n    prefix,\n    startsExpr\n  }),\n  modulo: createToken(\"%\", {\n    binop: 10,\n    startsExpr\n  }),\n  star: createToken(\"*\", {\n    binop: 10\n  }),\n  slash: createBinop(\"/\", 10),\n  exponent: createToken(\"**\", {\n    beforeExpr,\n    binop: 11,\n    rightAssociative: true\n  }),\n  _in: createKeyword(\"in\", {\n    beforeExpr,\n    binop: 7\n  }),\n  _instanceof: createKeyword(\"instanceof\", {\n    beforeExpr,\n    binop: 7\n  }),\n  _break: createKeyword(\"break\"),\n  _case: createKeyword(\"case\", {\n    beforeExpr\n  }),\n  _catch: createKeyword(\"catch\"),\n  _continue: createKeyword(\"continue\"),\n  _debugger: createKeyword(\"debugger\"),\n  _default: createKeyword(\"default\", {\n    beforeExpr\n  }),\n  _else: createKeyword(\"else\", {\n    beforeExpr\n  }),\n  _finally: createKeyword(\"finally\"),\n  _function: createKeyword(\"function\", {\n    startsExpr\n  }),\n  _if: createKeyword(\"if\"),\n  _return: createKeyword(\"return\", {\n    beforeExpr\n  }),\n  _switch: createKeyword(\"switch\"),\n  _throw: createKeyword(\"throw\", {\n    beforeExpr,\n    prefix,\n    startsExpr\n  }),\n  _try: createKeyword(\"try\"),\n  _var: createKeyword(\"var\"),\n  _const: createKeyword(\"const\"),\n  _with: createKeyword(\"with\"),\n  _new: createKeyword(\"new\", {\n    beforeExpr,\n    startsExpr\n  }),\n  _this: createKeyword(\"this\", {\n    startsExpr\n  }),\n  _super: createKeyword(\"super\", {\n    startsExpr\n  }),\n  _class: createKeyword(\"class\", {\n    startsExpr\n  }),\n  _extends: createKeyword(\"extends\", {\n    beforeExpr\n  }),\n  _export: createKeyword(\"export\"),\n  _import: createKeyword(\"import\", {\n    startsExpr\n  }),\n  _null: createKeyword(\"null\", {\n    startsExpr\n  }),\n  _true: createKeyword(\"true\", {\n    startsExpr\n  }),\n  _false: createKeyword(\"false\", {\n    startsExpr\n  }),\n  _typeof: createKeyword(\"typeof\", {\n    beforeExpr,\n    prefix,\n    startsExpr\n  }),\n  _void: createKeyword(\"void\", {\n    beforeExpr,\n    prefix,\n    startsExpr\n  }),\n  _delete: createKeyword(\"delete\", {\n    beforeExpr,\n    prefix,\n    startsExpr\n  }),\n  _do: createKeyword(\"do\", {\n    isLoop,\n    beforeExpr\n  }),\n  _for: createKeyword(\"for\", {\n    isLoop\n  }),\n  _while: createKeyword(\"while\", {\n    isLoop\n  }),\n  _as: createKeywordLike(\"as\", {\n    startsExpr\n  }),\n  _assert: createKeywordLike(\"assert\", {\n    startsExpr\n  }),\n  _async: createKeywordLike(\"async\", {\n    startsExpr\n  }),\n  _await: createKeywordLike(\"await\", {\n    startsExpr\n  }),\n  _from: createKeywordLike(\"from\", {\n    startsExpr\n  }),\n  _get: createKeywordLike(\"get\", {\n    startsExpr\n  }),\n  _let: createKeywordLike(\"let\", {\n    startsExpr\n  }),\n  _meta: createKeywordLike(\"meta\", {\n    startsExpr\n  }),\n  _of: createKeywordLike(\"of\", {\n    startsExpr\n  }),\n  _sent: createKeywordLike(\"sent\", {\n    startsExpr\n  }),\n  _set: createKeywordLike(\"set\", {\n    startsExpr\n  }),\n  _static: createKeywordLike(\"static\", {\n    startsExpr\n  }),\n  _yield: createKeywordLike(\"yield\", {\n    startsExpr\n  }),\n  _asserts: createKeywordLike(\"asserts\", {\n    startsExpr\n  }),\n  _checks: createKeywordLike(\"checks\", {\n    startsExpr\n  }),\n  _exports: createKeywordLike(\"exports\", {\n    startsExpr\n  }),\n  _global: createKeywordLike(\"global\", {\n    startsExpr\n  }),\n  _implements: createKeywordLike(\"implements\", {\n    startsExpr\n  }),\n  _intrinsic: createKeywordLike(\"intrinsic\", {\n    startsExpr\n  }),\n  _infer: createKeywordLike(\"infer\", {\n    startsExpr\n  }),\n  _is: createKeywordLike(\"is\", {\n    startsExpr\n  }),\n  _mixins: createKeywordLike(\"mixins\", {\n    startsExpr\n  }),\n  _proto: createKeywordLike(\"proto\", {\n    startsExpr\n  }),\n  _require: createKeywordLike(\"require\", {\n    startsExpr\n  }),\n  _keyof: createKeywordLike(\"keyof\", {\n    startsExpr\n  }),\n  _readonly: createKeywordLike(\"readonly\", {\n    startsExpr\n  }),\n  _unique: createKeywordLike(\"unique\", {\n    startsExpr\n  }),\n  _abstract: createKeywordLike(\"abstract\", {\n    startsExpr\n  }),\n  _declare: createKeywordLike(\"declare\", {\n    startsExpr\n  }),\n  _enum: createKeywordLike(\"enum\", {\n    startsExpr\n  }),\n  _module: createKeywordLike(\"module\", {\n    startsExpr\n  }),\n  _namespace: createKeywordLike(\"namespace\", {\n    startsExpr\n  }),\n  _interface: createKeywordLike(\"interface\", {\n    startsExpr\n  }),\n  _type: createKeywordLike(\"type\", {\n    startsExpr\n  }),\n  _opaque: createKeywordLike(\"opaque\", {\n    startsExpr\n  }),\n  name: createToken(\"name\", {\n    startsExpr\n  }),\n  string: createToken(\"string\", {\n    startsExpr\n  }),\n  num: createToken(\"num\", {\n    startsExpr\n  }),\n  bigint: createToken(\"bigint\", {\n    startsExpr\n  }),\n  decimal: createToken(\"decimal\", {\n    startsExpr\n  }),\n  regexp: createToken(\"regexp\", {\n    startsExpr\n  }),\n  privateName: createToken(\"#name\", {\n    startsExpr\n  }),\n  eof: createToken(\"eof\"),\n  jsxName: createToken(\"jsxName\"),\n  jsxText: createToken(\"jsxText\", {\n    beforeExpr: true\n  }),\n  jsxTagStart: createToken(\"jsxTagStart\", {\n    startsExpr: true\n  }),\n  jsxTagEnd: createToken(\"jsxTagEnd\"),\n  placeholder: createToken(\"%%\", {\n    startsExpr: true\n  })\n};\nfunction tokenIsIdentifier(token) {\n  return token >= 87 && token <= 122;\n}\nfunction tokenKeywordOrIdentifierIsKeyword(token) {\n  return token <= 86;\n}\nfunction tokenIsKeywordOrIdentifier(token) {\n  return token >= 52 && token <= 122;\n}\nfunction tokenIsLiteralPropertyName(token) {\n  return token >= 52 && token <= 126;\n}\nfunction tokenComesBeforeExpression(token) {\n  return tokenBeforeExprs[token];\n}\nfunction tokenCanStartExpression(token) {\n  return tokenStartsExprs[token];\n}\nfunction tokenIsAssignment(token) {\n  return token >= 27 && token <= 31;\n}\nfunction tokenIsFlowInterfaceOrTypeOrOpaque(token) {\n  return token >= 119 && token <= 121;\n}\nfunction tokenIsLoop(token) {\n  return token >= 84 && token <= 86;\n}\nfunction tokenIsKeyword(token) {\n  return token >= 52 && token <= 86;\n}\nfunction tokenIsOperator(token) {\n  return token >= 35 && token <= 53;\n}\nfunction tokenIsPostfix(token) {\n  return token === 32;\n}\nfunction tokenIsPrefix(token) {\n  return tokenPrefixes[token];\n}\nfunction tokenIsTSTypeOperator(token) {\n  return token >= 111 && token <= 113;\n}\nfunction tokenIsTSDeclarationStart(token) {\n  return token >= 114 && token <= 120;\n}\nfunction tokenLabelName(token) {\n  return tokenLabels[token];\n}\nfunction tokenOperatorPrecedence(token) {\n  return tokenBinops[token];\n}\nfunction tokenIsRightAssociative(token) {\n  return token === 51;\n}\nfunction getExportedToken(token) {\n  return tokenTypes$1[token];\n}\nfunction isTokenType(obj) {\n  return typeof obj === \"number\";\n}\n{\n  tokenTypes$1[8].updateContext = context => {\n    context.pop();\n  };\n\n  tokenTypes$1[5].updateContext = tokenTypes$1[7].updateContext = tokenTypes$1[23].updateContext = context => {\n    context.push(types$1.brace);\n  };\n\n  tokenTypes$1[22].updateContext = context => {\n    if (context[context.length - 1] === types$1.template) {\n      context.pop();\n    } else {\n      context.push(types$1.template);\n    }\n  };\n\n  tokenTypes$1[132].updateContext = context => {\n    context.push(types$1.j_expr, types$1.j_oTag);\n  };\n}\n\nlet nonASCIIidentifierStartChars = \"\\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\\u0560-\\u0588\\u05d0-\\u05ea\\u05ef-\\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\\u0860-\\u086a\\u0870-\\u0887\\u0889-\\u088e\\u08a0-\\u08c9\\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\\u09fc\\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\\u0c5d\\u0c60\\u0c61\\u0c80\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd\\u0cdd\\u0cde\\u0ce0\\u0ce1\\u0cf1\\u0cf2\\u0d04-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d\\u0d4e\\u0d54-\\u0d56\\u0d5f-\\u0d61\\u0d7a-\\u0d7f\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0e01-\\u0e30\\u0e32\\u0e33\\u0e40-\\u0e46\\u0e81\\u0e82\\u0e84\\u0e86-\\u0e8a\\u0e8c-\\u0ea3\\u0ea5\\u0ea7-\\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-\\u1711\\u171f-\\u1731\\u1740-\\u1751\\u1760-\\u176c\\u176e-\\u1770\\u1780-\\u17b3\\u17d7\\u17dc\\u1820-\\u1878\\u1880-\\u18a8\\u18aa\\u18b0-\\u18f5\\u1900-\\u191e\\u1950-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19b0-\\u19c9\\u1a00-\\u1a16\\u1a20-\\u1a54\\u1aa7\\u1b05-\\u1b33\\u1b45-\\u1b4c\\u1b83-\\u1ba0\\u1bae\\u1baf\\u1bba-\\u1be5\\u1c00-\\u1c23\\u1c4d-\\u1c4f\\u1c5a-\\u1c7d\\u1c80-\\u1c88\\u1c90-\\u1cba\\u1cbd-\\u1cbf\\u1ce9-\\u1cec\\u1cee-\\u1cf3\\u1cf5\\u1cf6\\u1cfa\\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-\\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-\\u312f\\u3131-\\u318e\\u31a0-\\u31bf\\u31f0-\\u31ff\\u3400-\\u4dbf\\u4e00-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a\\ua62b\\ua640-\\ua66e\\ua67f-\\ua69d\\ua6a0-\\ua6ef\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua7ca\\ua7d0\\ua7d1\\ua7d3\\ua7d5-\\ua7d9\\ua7f2-\\ua801\\ua803-\\ua805\\ua807-\\ua80a\\ua80c-\\ua822\\ua840-\\ua873\\ua882-\\ua8b3\\ua8f2-\\ua8f7\\ua8fb\\ua8fd\\ua8fe\\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-\\uab69\\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\";\nlet nonASCIIidentifierChars = \"\\u200c\\u200d\\xb7\\u0300-\\u036f\\u0387\\u0483-\\u0487\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u064b-\\u0669\\u0670\\u06d6-\\u06dc\\u06df-\\u06e4\\u06e7\\u06e8\\u06ea-\\u06ed\\u06f0-\\u06f9\\u0711\\u0730-\\u074a\\u07a6-\\u07b0\\u07c0-\\u07c9\\u07eb-\\u07f3\\u07fd\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0859-\\u085b\\u0898-\\u089f\\u08ca-\\u08e1\\u08e3-\\u0903\\u093a-\\u093c\\u093e-\\u094f\\u0951-\\u0957\\u0962\\u0963\\u0966-\\u096f\\u0981-\\u0983\\u09bc\\u09be-\\u09c4\\u09c7\\u09c8\\u09cb-\\u09cd\\u09d7\\u09e2\\u09e3\\u09e6-\\u09ef\\u09fe\\u0a01-\\u0a03\\u0a3c\\u0a3e-\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a66-\\u0a71\\u0a75\\u0a81-\\u0a83\\u0abc\\u0abe-\\u0ac5\\u0ac7-\\u0ac9\\u0acb-\\u0acd\\u0ae2\\u0ae3\\u0ae6-\\u0aef\\u0afa-\\u0aff\\u0b01-\\u0b03\\u0b3c\\u0b3e-\\u0b44\\u0b47\\u0b48\\u0b4b-\\u0b4d\\u0b55-\\u0b57\\u0b62\\u0b63\\u0b66-\\u0b6f\\u0b82\\u0bbe-\\u0bc2\\u0bc6-\\u0bc8\\u0bca-\\u0bcd\\u0bd7\\u0be6-\\u0bef\\u0c00-\\u0c04\\u0c3c\\u0c3e-\\u0c44\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62\\u0c63\\u0c66-\\u0c6f\\u0c81-\\u0c83\\u0cbc\\u0cbe-\\u0cc4\\u0cc6-\\u0cc8\\u0cca-\\u0ccd\\u0cd5\\u0cd6\\u0ce2\\u0ce3\\u0ce6-\\u0cef\\u0d00-\\u0d03\\u0d3b\\u0d3c\\u0d3e-\\u0d44\\u0d46-\\u0d48\\u0d4a-\\u0d4d\\u0d57\\u0d62\\u0d63\\u0d66-\\u0d6f\\u0d81-\\u0d83\\u0dca\\u0dcf-\\u0dd4\\u0dd6\\u0dd8-\\u0ddf\\u0de6-\\u0def\\u0df2\\u0df3\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0e50-\\u0e59\\u0eb1\\u0eb4-\\u0ebc\\u0ec8-\\u0ecd\\u0ed0-\\u0ed9\\u0f18\\u0f19\\u0f20-\\u0f29\\u0f35\\u0f37\\u0f39\\u0f3e\\u0f3f\\u0f71-\\u0f84\\u0f86\\u0f87\\u0f8d-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u102b-\\u103e\\u1040-\\u1049\\u1056-\\u1059\\u105e-\\u1060\\u1062-\\u1064\\u1067-\\u106d\\u1071-\\u1074\\u1082-\\u108d\\u108f-\\u109d\\u135d-\\u135f\\u1369-\\u1371\\u1712-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b4-\\u17d3\\u17dd\\u17e0-\\u17e9\\u180b-\\u180d\\u180f-\\u1819\\u18a9\\u1920-\\u192b\\u1930-\\u193b\\u1946-\\u194f\\u19d0-\\u19da\\u1a17-\\u1a1b\\u1a55-\\u1a5e\\u1a60-\\u1a7c\\u1a7f-\\u1a89\\u1a90-\\u1a99\\u1ab0-\\u1abd\\u1abf-\\u1ace\\u1b00-\\u1b04\\u1b34-\\u1b44\\u1b50-\\u1b59\\u1b6b-\\u1b73\\u1b80-\\u1b82\\u1ba1-\\u1bad\\u1bb0-\\u1bb9\\u1be6-\\u1bf3\\u1c24-\\u1c37\\u1c40-\\u1c49\\u1c50-\\u1c59\\u1cd0-\\u1cd2\\u1cd4-\\u1ce8\\u1ced\\u1cf4\\u1cf7-\\u1cf9\\u1dc0-\\u1dff\\u203f\\u2040\\u2054\\u20d0-\\u20dc\\u20e1\\u20e5-\\u20f0\\u2cef-\\u2cf1\\u2d7f\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\ua620-\\ua629\\ua66f\\ua674-\\ua67d\\ua69e\\ua69f\\ua6f0\\ua6f1\\ua802\\ua806\\ua80b\\ua823-\\ua827\\ua82c\\ua880\\ua881\\ua8b4-\\ua8c5\\ua8d0-\\ua8d9\\ua8e0-\\ua8f1\\ua8ff-\\ua909\\ua926-\\ua92d\\ua947-\\ua953\\ua980-\\ua983\\ua9b3-\\ua9c0\\ua9d0-\\ua9d9\\ua9e5\\ua9f0-\\ua9f9\\uaa29-\\uaa36\\uaa43\\uaa4c\\uaa4d\\uaa50-\\uaa59\\uaa7b-\\uaa7d\\uaab0\\uaab2-\\uaab4\\uaab7\\uaab8\\uaabe\\uaabf\\uaac1\\uaaeb-\\uaaef\\uaaf5\\uaaf6\\uabe3-\\uabea\\uabec\\uabed\\uabf0-\\uabf9\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe2f\\ufe33\\ufe34\\ufe4d-\\ufe4f\\uff10-\\uff19\\uff3f\";\nconst nonASCIIidentifierStart = new RegExp(\"[\" + nonASCIIidentifierStartChars + \"]\");\nconst nonASCIIidentifier = new RegExp(\"[\" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + \"]\");\nnonASCIIidentifierStartChars = nonASCIIidentifierChars = null;\nconst astralIdentifierStartCodes = [0, 11, 2, 25, 2, 18, 2, 1, 2, 14, 3, 13, 35, 122, 70, 52, 268, 28, 4, 48, 48, 31, 14, 29, 6, 37, 11, 29, 3, 35, 5, 7, 2, 4, 43, 157, 19, 35, 5, 35, 5, 39, 9, 51, 13, 10, 2, 14, 2, 6, 2, 1, 2, 10, 2, 14, 2, 6, 2, 1, 68, 310, 10, 21, 11, 7, 25, 5, 2, 41, 2, 8, 70, 5, 3, 0, 2, 43, 2, 1, 4, 0, 3, 22, 11, 22, 10, 30, 66, 18, 2, 1, 11, 21, 11, 25, 71, 55, 7, 1, 65, 0, 16, 3, 2, 2, 2, 28, 43, 28, 4, 28, 36, 7, 2, 27, 28, 53, 11, 21, 11, 18, 14, 17, 111, 72, 56, 50, 14, 50, 14, 35, 349, 41, 7, 1, 79, 28, 11, 0, 9, 21, 43, 17, 47, 20, 28, 22, 13, 52, 58, 1, 3, 0, 14, 44, 33, 24, 27, 35, 30, 0, 3, 0, 9, 34, 4, 0, 13, 47, 15, 3, 22, 0, 2, 0, 36, 17, 2, 24, 85, 6, 2, 0, 2, 3, 2, 14, 2, 9, 8, 46, 39, 7, 3, 1, 3, 21, 2, 6, 2, 1, 2, 4, 4, 0, 19, 0, 13, 4, 159, 52, 19, 3, 21, 2, 31, 47, 21, 1, 2, 0, 185, 46, 42, 3, 37, 47, 21, 0, 60, 42, 14, 0, 72, 26, 38, 6, 186, 43, 117, 63, 32, 7, 3, 0, 3, 7, 2, 1, 2, 23, 16, 0, 2, 0, 95, 7, 3, 38, 17, 0, 2, 0, 29, 0, 11, 39, 8, 0, 22, 0, 12, 45, 20, 0, 19, 72, 264, 8, 2, 36, 18, 0, 50, 29, 113, 6, 2, 1, 2, 37, 22, 0, 26, 5, 2, 1, 2, 31, 15, 0, 328, 18, 190, 0, 80, 921, 103, 110, 18, 195, 2637, 96, 16, 1070, 4050, 582, 8634, 568, 8, 30, 18, 78, 18, 29, 19, 47, 17, 3, 32, 20, 6, 18, 689, 63, 129, 74, 6, 0, 67, 12, 65, 1, 2, 0, 29, 6135, 9, 1237, 43, 8, 8936, 3, 2, 6, 2, 1, 2, 290, 46, 2, 18, 3, 9, 395, 2309, 106, 6, 12, 4, 8, 8, 9, 5991, 84, 2, 70, 2, 1, 3, 0, 3, 1, 3, 3, 2, 11, 2, 0, 2, 6, 2, 64, 2, 3, 3, 7, 2, 6, 2, 27, 2, 3, 2, 4, 2, 0, 4, 6, 2, 339, 3, 24, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 7, 1845, 30, 482, 44, 11, 6, 17, 0, 322, 29, 19, 43, 1269, 6, 2, 3, 2, 1, 2, 14, 2, 196, 60, 67, 8, 0, 1205, 3, 2, 26, 2, 1, 2, 0, 3, 0, 2, 9, 2, 3, 2, 0, 2, 0, 7, 0, 5, 0, 2, 0, 2, 0, 2, 2, 2, 1, 2, 0, 3, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 1, 2, 0, 3, 3, 2, 6, 2, 3, 2, 3, 2, 0, 2, 9, 2, 16, 6, 2, 2, 4, 2, 16, 4421, 42719, 33, 4152, 8, 221, 3, 5761, 15, 7472, 3104, 541, 1507, 4938];\nconst astralIdentifierCodes = [509, 0, 227, 0, 150, 4, 294, 9, 1368, 2, 2, 1, 6, 3, 41, 2, 5, 0, 166, 1, 574, 3, 9, 9, 370, 1, 154, 10, 50, 3, 123, 2, 54, 14, 32, 10, 3, 1, 11, 3, 46, 10, 8, 0, 46, 9, 7, 2, 37, 13, 2, 9, 6, 1, 45, 0, 13, 2, 49, 13, 9, 3, 2, 11, 83, 11, 7, 0, 161, 11, 6, 9, 7, 3, 56, 1, 2, 6, 3, 1, 3, 2, 10, 0, 11, 1, 3, 6, 4, 4, 193, 17, 10, 9, 5, 0, 82, 19, 13, 9, 214, 6, 3, 8, 28, 1, 83, 16, 16, 9, 82, 12, 9, 9, 84, 14, 5, 9, 243, 14, 166, 9, 71, 5, 2, 1, 3, 3, 2, 0, 2, 1, 13, 9, 120, 6, 3, 6, 4, 0, 29, 9, 41, 6, 2, 3, 9, 0, 10, 10, 47, 15, 406, 7, 2, 7, 17, 9, 57, 21, 2, 13, 123, 5, 4, 0, 2, 1, 2, 6, 2, 0, 9, 9, 49, 4, 2, 1, 2, 4, 9, 9, 330, 3, 19306, 9, 87, 9, 39, 4, 60, 6, 26, 9, 1014, 0, 2, 54, 8, 3, 82, 0, 12, 1, 19628, 1, 4706, 45, 3, 22, 543, 4, 4, 5, 9, 7, 3, 6, 31, 3, 149, 2, 1418, 49, 513, 54, 5, 49, 9, 0, 15, 0, 23, 4, 2, 14, 1361, 6, 2, 16, 3, 6, 2, 1, 2, 4, 262, 6, 10, 9, 357, 0, 62, 13, 1495, 6, 110, 6, 6, 9, 4759, 9, 787719, 239];\n\nfunction isInAstralSet(code, set) {\n  let pos = 0x10000;\n\n  for (let i = 0, length = set.length; i < length; i += 2) {\n    pos += set[i];\n    if (pos > code) return false;\n    pos += set[i + 1];\n    if (pos >= code) return true;\n  }\n\n  return false;\n}\n\nfunction isIdentifierStart(code) {\n  if (code < 65) return code === 36;\n  if (code <= 90) return true;\n  if (code < 97) return code === 95;\n  if (code <= 122) return true;\n\n  if (code <= 0xffff) {\n    return code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code));\n  }\n\n  return isInAstralSet(code, astralIdentifierStartCodes);\n}\nfunction isIdentifierChar(code) {\n  if (code < 48) return code === 36;\n  if (code < 58) return true;\n  if (code < 65) return false;\n  if (code <= 90) return true;\n  if (code < 97) return code === 95;\n  if (code <= 122) return true;\n\n  if (code <= 0xffff) {\n    return code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code));\n  }\n\n  return isInAstralSet(code, astralIdentifierStartCodes) || isInAstralSet(code, astralIdentifierCodes);\n}\n\nconst reservedWords = {\n  keyword: [\"break\", \"case\", \"catch\", \"continue\", \"debugger\", \"default\", \"do\", \"else\", \"finally\", \"for\", \"function\", \"if\", \"return\", \"switch\", \"throw\", \"try\", \"var\", \"const\", \"while\", \"with\", \"new\", \"this\", \"super\", \"class\", \"extends\", \"export\", \"import\", \"null\", \"true\", \"false\", \"in\", \"instanceof\", \"typeof\", \"void\", \"delete\"],\n  strict: [\"implements\", \"interface\", \"let\", \"package\", \"private\", \"protected\", \"public\", \"static\", \"yield\"],\n  strictBind: [\"eval\", \"arguments\"]\n};\nconst keywords = new Set(reservedWords.keyword);\nconst reservedWordsStrictSet = new Set(reservedWords.strict);\nconst reservedWordsStrictBindSet = new Set(reservedWords.strictBind);\nfunction isReservedWord(word, inModule) {\n  return inModule && word === \"await\" || word === \"enum\";\n}\nfunction isStrictReservedWord(word, inModule) {\n  return isReservedWord(word, inModule) || reservedWordsStrictSet.has(word);\n}\nfunction isStrictBindOnlyReservedWord(word) {\n  return reservedWordsStrictBindSet.has(word);\n}\nfunction isStrictBindReservedWord(word, inModule) {\n  return isStrictReservedWord(word, inModule) || isStrictBindOnlyReservedWord(word);\n}\nfunction isKeyword(word) {\n  return keywords.has(word);\n}\n\nfunction isIteratorStart(current, next) {\n  return current === 64 && next === 64;\n}\nconst reservedWordLikeSet = new Set([\"break\", \"case\", \"catch\", \"continue\", \"debugger\", \"default\", \"do\", \"else\", \"finally\", \"for\", \"function\", \"if\", \"return\", \"switch\", \"throw\", \"try\", \"var\", \"const\", \"while\", \"with\", \"new\", \"this\", \"super\", \"class\", \"extends\", \"export\", \"import\", \"null\", \"true\", \"false\", \"in\", \"instanceof\", \"typeof\", \"void\", \"delete\", \"implements\", \"interface\", \"let\", \"package\", \"private\", \"protected\", \"public\", \"static\", \"yield\", \"eval\", \"arguments\", \"enum\", \"await\"]);\nfunction canBeReservedWord(word) {\n  return reservedWordLikeSet.has(word);\n}\n\nconst SCOPE_OTHER = 0b000000000,\n      SCOPE_PROGRAM = 0b000000001,\n      SCOPE_FUNCTION = 0b000000010,\n      SCOPE_ARROW = 0b000000100,\n      SCOPE_SIMPLE_CATCH = 0b000001000,\n      SCOPE_SUPER = 0b000010000,\n      SCOPE_DIRECT_SUPER = 0b000100000,\n      SCOPE_CLASS = 0b001000000,\n      SCOPE_STATIC_BLOCK = 0b010000000,\n      SCOPE_TS_MODULE = 0b100000000,\n      SCOPE_VAR = SCOPE_PROGRAM | SCOPE_FUNCTION | SCOPE_TS_MODULE;\nconst BIND_KIND_VALUE = 0b000000000001,\n      BIND_KIND_TYPE = 0b000000000010,\n      BIND_SCOPE_VAR = 0b000000000100,\n      BIND_SCOPE_LEXICAL = 0b000000001000,\n      BIND_SCOPE_FUNCTION = 0b000000010000,\n      BIND_FLAGS_NONE = 0b000001000000,\n      BIND_FLAGS_CLASS = 0b000010000000,\n      BIND_FLAGS_TS_ENUM = 0b000100000000,\n      BIND_FLAGS_TS_CONST_ENUM = 0b001000000000,\n      BIND_FLAGS_TS_EXPORT_ONLY = 0b010000000000,\n      BIND_FLAGS_FLOW_DECLARE_FN = 0b100000000000;\nconst BIND_CLASS = BIND_KIND_VALUE | BIND_KIND_TYPE | BIND_SCOPE_LEXICAL | BIND_FLAGS_CLASS,\n      BIND_LEXICAL = BIND_KIND_VALUE | 0 | BIND_SCOPE_LEXICAL | 0,\n      BIND_VAR = BIND_KIND_VALUE | 0 | BIND_SCOPE_VAR | 0,\n      BIND_FUNCTION = BIND_KIND_VALUE | 0 | BIND_SCOPE_FUNCTION | 0,\n      BIND_TS_INTERFACE = 0 | BIND_KIND_TYPE | 0 | BIND_FLAGS_CLASS,\n      BIND_TS_TYPE = 0 | BIND_KIND_TYPE | 0 | 0,\n      BIND_TS_ENUM = BIND_KIND_VALUE | BIND_KIND_TYPE | BIND_SCOPE_LEXICAL | BIND_FLAGS_TS_ENUM,\n      BIND_TS_AMBIENT = 0 | 0 | 0 | BIND_FLAGS_TS_EXPORT_ONLY,\n      BIND_NONE = 0 | 0 | 0 | BIND_FLAGS_NONE,\n      BIND_OUTSIDE = BIND_KIND_VALUE | 0 | 0 | BIND_FLAGS_NONE,\n      BIND_TS_CONST_ENUM = BIND_TS_ENUM | BIND_FLAGS_TS_CONST_ENUM,\n      BIND_TS_NAMESPACE = 0 | 0 | 0 | BIND_FLAGS_TS_EXPORT_ONLY,\n      BIND_FLOW_DECLARE_FN = BIND_FLAGS_FLOW_DECLARE_FN;\nconst CLASS_ELEMENT_FLAG_STATIC = 0b100,\n      CLASS_ELEMENT_KIND_GETTER = 0b010,\n      CLASS_ELEMENT_KIND_SETTER = 0b001,\n      CLASS_ELEMENT_KIND_ACCESSOR = CLASS_ELEMENT_KIND_GETTER | CLASS_ELEMENT_KIND_SETTER;\nconst CLASS_ELEMENT_STATIC_GETTER = CLASS_ELEMENT_KIND_GETTER | CLASS_ELEMENT_FLAG_STATIC,\n      CLASS_ELEMENT_STATIC_SETTER = CLASS_ELEMENT_KIND_SETTER | CLASS_ELEMENT_FLAG_STATIC,\n      CLASS_ELEMENT_INSTANCE_GETTER = CLASS_ELEMENT_KIND_GETTER,\n      CLASS_ELEMENT_INSTANCE_SETTER = CLASS_ELEMENT_KIND_SETTER,\n      CLASS_ELEMENT_OTHER = 0;\n\nclass Scope {\n  constructor(flags) {\n    this.var = new Set();\n    this.lexical = new Set();\n    this.functions = new Set();\n    this.flags = flags;\n  }\n\n}\nclass ScopeHandler {\n  constructor(raise, inModule) {\n    this.scopeStack = [];\n    this.undefinedExports = new Map();\n    this.undefinedPrivateNames = new Map();\n    this.raise = raise;\n    this.inModule = inModule;\n  }\n\n  get inFunction() {\n    return (this.currentVarScopeFlags() & SCOPE_FUNCTION) > 0;\n  }\n\n  get allowSuper() {\n    return (this.currentThisScopeFlags() & SCOPE_SUPER) > 0;\n  }\n\n  get allowDirectSuper() {\n    return (this.currentThisScopeFlags() & SCOPE_DIRECT_SUPER) > 0;\n  }\n\n  get inClass() {\n    return (this.currentThisScopeFlags() & SCOPE_CLASS) > 0;\n  }\n\n  get inClassAndNotInNonArrowFunction() {\n    const flags = this.currentThisScopeFlags();\n    return (flags & SCOPE_CLASS) > 0 && (flags & SCOPE_FUNCTION) === 0;\n  }\n\n  get inStaticBlock() {\n    for (let i = this.scopeStack.length - 1;; i--) {\n      const {\n        flags\n      } = this.scopeStack[i];\n\n      if (flags & SCOPE_STATIC_BLOCK) {\n        return true;\n      }\n\n      if (flags & (SCOPE_VAR | SCOPE_CLASS)) {\n        return false;\n      }\n    }\n  }\n\n  get inNonArrowFunction() {\n    return (this.currentThisScopeFlags() & SCOPE_FUNCTION) > 0;\n  }\n\n  get treatFunctionsAsVar() {\n    return this.treatFunctionsAsVarInScope(this.currentScope());\n  }\n\n  createScope(flags) {\n    return new Scope(flags);\n  }\n\n  enter(flags) {\n    this.scopeStack.push(this.createScope(flags));\n  }\n\n  exit() {\n    this.scopeStack.pop();\n  }\n\n  treatFunctionsAsVarInScope(scope) {\n    return !!(scope.flags & SCOPE_FUNCTION || !this.inModule && scope.flags & SCOPE_PROGRAM);\n  }\n\n  declareName(name, bindingType, pos) {\n    let scope = this.currentScope();\n\n    if (bindingType & BIND_SCOPE_LEXICAL || bindingType & BIND_SCOPE_FUNCTION) {\n      this.checkRedeclarationInScope(scope, name, bindingType, pos);\n\n      if (bindingType & BIND_SCOPE_FUNCTION) {\n        scope.functions.add(name);\n      } else {\n        scope.lexical.add(name);\n      }\n\n      if (bindingType & BIND_SCOPE_LEXICAL) {\n        this.maybeExportDefined(scope, name);\n      }\n    } else if (bindingType & BIND_SCOPE_VAR) {\n      for (let i = this.scopeStack.length - 1; i >= 0; --i) {\n        scope = this.scopeStack[i];\n        this.checkRedeclarationInScope(scope, name, bindingType, pos);\n        scope.var.add(name);\n        this.maybeExportDefined(scope, name);\n        if (scope.flags & SCOPE_VAR) break;\n      }\n    }\n\n    if (this.inModule && scope.flags & SCOPE_PROGRAM) {\n      this.undefinedExports.delete(name);\n    }\n  }\n\n  maybeExportDefined(scope, name) {\n    if (this.inModule && scope.flags & SCOPE_PROGRAM) {\n      this.undefinedExports.delete(name);\n    }\n  }\n\n  checkRedeclarationInScope(scope, name, bindingType, pos) {\n    if (this.isRedeclaredInScope(scope, name, bindingType)) {\n      this.raise(pos, ErrorMessages.VarRedeclaration, name);\n    }\n  }\n\n  isRedeclaredInScope(scope, name, bindingType) {\n    if (!(bindingType & BIND_KIND_VALUE)) return false;\n\n    if (bindingType & BIND_SCOPE_LEXICAL) {\n      return scope.lexical.has(name) || scope.functions.has(name) || scope.var.has(name);\n    }\n\n    if (bindingType & BIND_SCOPE_FUNCTION) {\n      return scope.lexical.has(name) || !this.treatFunctionsAsVarInScope(scope) && scope.var.has(name);\n    }\n\n    return scope.lexical.has(name) && !(scope.flags & SCOPE_SIMPLE_CATCH && scope.lexical.values().next().value === name) || !this.treatFunctionsAsVarInScope(scope) && scope.functions.has(name);\n  }\n\n  checkLocalExport(id) {\n    const {\n      name\n    } = id;\n    const topLevelScope = this.scopeStack[0];\n\n    if (!topLevelScope.lexical.has(name) && !topLevelScope.var.has(name) && !topLevelScope.functions.has(name)) {\n      this.undefinedExports.set(name, id.start);\n    }\n  }\n\n  currentScope() {\n    return this.scopeStack[this.scopeStack.length - 1];\n  }\n\n  currentVarScopeFlags() {\n    for (let i = this.scopeStack.length - 1;; i--) {\n      const {\n        flags\n      } = this.scopeStack[i];\n\n      if (flags & SCOPE_VAR) {\n        return flags;\n      }\n    }\n  }\n\n  currentThisScopeFlags() {\n    for (let i = this.scopeStack.length - 1;; i--) {\n      const {\n        flags\n      } = this.scopeStack[i];\n\n      if (flags & (SCOPE_VAR | SCOPE_CLASS) && !(flags & SCOPE_ARROW)) {\n        return flags;\n      }\n    }\n  }\n\n}\n\nclass FlowScope extends Scope {\n  constructor(...args) {\n    super(...args);\n    this.declareFunctions = new Set();\n  }\n\n}\n\nclass FlowScopeHandler extends ScopeHandler {\n  createScope(flags) {\n    return new FlowScope(flags);\n  }\n\n  declareName(name, bindingType, pos) {\n    const scope = this.currentScope();\n\n    if (bindingType & BIND_FLAGS_FLOW_DECLARE_FN) {\n      this.checkRedeclarationInScope(scope, name, bindingType, pos);\n      this.maybeExportDefined(scope, name);\n      scope.declareFunctions.add(name);\n      return;\n    }\n\n    super.declareName(...arguments);\n  }\n\n  isRedeclaredInScope(scope, name, bindingType) {\n    if (super.isRedeclaredInScope(...arguments)) return true;\n\n    if (bindingType & BIND_FLAGS_FLOW_DECLARE_FN) {\n      return !scope.declareFunctions.has(name) && (scope.lexical.has(name) || scope.functions.has(name));\n    }\n\n    return false;\n  }\n\n  checkLocalExport(id) {\n    if (!this.scopeStack[0].declareFunctions.has(id.name)) {\n      super.checkLocalExport(id);\n    }\n  }\n\n}\n\nclass State {\n  constructor() {\n    this.strict = void 0;\n    this.curLine = void 0;\n    this.lineStart = void 0;\n    this.startLoc = void 0;\n    this.endLoc = void 0;\n    this.errors = [];\n    this.potentialArrowAt = -1;\n    this.noArrowAt = [];\n    this.noArrowParamsConversionAt = [];\n    this.maybeInArrowParameters = false;\n    this.inType = false;\n    this.noAnonFunctionType = false;\n    this.hasFlowComment = false;\n    this.isAmbientContext = false;\n    this.inAbstractClass = false;\n    this.topicContext = {\n      maxNumOfResolvableTopics: 0,\n      maxTopicIndex: null\n    };\n    this.soloAwait = false;\n    this.inFSharpPipelineDirectBody = false;\n    this.labels = [];\n    this.decoratorStack = [[]];\n    this.comments = [];\n    this.commentStack = [];\n    this.pos = 0;\n    this.type = 129;\n    this.value = null;\n    this.start = 0;\n    this.end = 0;\n    this.lastTokEndLoc = null;\n    this.lastTokStartLoc = null;\n    this.lastTokStart = 0;\n    this.lastTokEnd = 0;\n    this.context = [types$1.brace];\n    this.canStartJSXElement = true;\n    this.containsEsc = false;\n    this.strictErrors = new Map();\n    this.tokensLength = 0;\n  }\n\n  init({\n    strictMode,\n    sourceType,\n    startLine,\n    startColumn\n  }) {\n    this.strict = strictMode === false ? false : strictMode === true ? true : sourceType === \"module\";\n    this.curLine = startLine;\n    this.lineStart = -startColumn;\n    this.startLoc = this.endLoc = new Position(startLine, startColumn);\n  }\n\n  curPosition() {\n    return new Position(this.curLine, this.pos - this.lineStart);\n  }\n\n  clone(skipArrays) {\n    const state = new State();\n    const keys = Object.keys(this);\n\n    for (let i = 0, length = keys.length; i < length; i++) {\n      const key = keys[i];\n      let val = this[key];\n\n      if (!skipArrays && Array.isArray(val)) {\n        val = val.slice();\n      }\n\n      state[key] = val;\n    }\n\n    return state;\n  }\n\n}\n\nvar _isDigit = function isDigit(code) {\n  return code >= 48 && code <= 57;\n};\nconst VALID_REGEX_FLAGS = new Set([103, 109, 115, 105, 121, 117, 100]);\nconst forbiddenNumericSeparatorSiblings = {\n  decBinOct: [46, 66, 69, 79, 95, 98, 101, 111],\n  hex: [46, 88, 95, 120]\n};\nconst allowedNumericSeparatorSiblings = {};\nallowedNumericSeparatorSiblings.bin = [48, 49];\nallowedNumericSeparatorSiblings.oct = [...allowedNumericSeparatorSiblings.bin, 50, 51, 52, 53, 54, 55];\nallowedNumericSeparatorSiblings.dec = [...allowedNumericSeparatorSiblings.oct, 56, 57];\nallowedNumericSeparatorSiblings.hex = [...allowedNumericSeparatorSiblings.dec, 65, 66, 67, 68, 69, 70, 97, 98, 99, 100, 101, 102];\nclass Token {\n  constructor(state) {\n    this.type = state.type;\n    this.value = state.value;\n    this.start = state.start;\n    this.end = state.end;\n    this.loc = new SourceLocation(state.startLoc, state.endLoc);\n  }\n\n}\nclass Tokenizer extends ParserError {\n  constructor(options, input) {\n    super();\n    this.isLookahead = void 0;\n    this.tokens = [];\n    this.state = new State();\n    this.state.init(options);\n    this.input = input;\n    this.length = input.length;\n    this.isLookahead = false;\n  }\n\n  pushToken(token) {\n    this.tokens.length = this.state.tokensLength;\n    this.tokens.push(token);\n    ++this.state.tokensLength;\n  }\n\n  next() {\n    this.checkKeywordEscapes();\n\n    if (this.options.tokens) {\n      this.pushToken(new Token(this.state));\n    }\n\n    this.state.lastTokEnd = this.state.end;\n    this.state.lastTokStart = this.state.start;\n    this.state.lastTokEndLoc = this.state.endLoc;\n    this.state.lastTokStartLoc = this.state.startLoc;\n    this.nextToken();\n  }\n\n  eat(type) {\n    if (this.match(type)) {\n      this.next();\n      return true;\n    } else {\n      return false;\n    }\n  }\n\n  match(type) {\n    return this.state.type === type;\n  }\n\n  createLookaheadState(state) {\n    return {\n      pos: state.pos,\n      value: null,\n      type: state.type,\n      start: state.start,\n      end: state.end,\n      lastTokEnd: state.end,\n      context: [this.curContext()],\n      inType: state.inType\n    };\n  }\n\n  lookahead() {\n    const old = this.state;\n    this.state = this.createLookaheadState(old);\n    this.isLookahead = true;\n    this.nextToken();\n    this.isLookahead = false;\n    const curr = this.state;\n    this.state = old;\n    return curr;\n  }\n\n  nextTokenStart() {\n    return this.nextTokenStartSince(this.state.pos);\n  }\n\n  nextTokenStartSince(pos) {\n    skipWhiteSpace.lastIndex = pos;\n    return skipWhiteSpace.test(this.input) ? skipWhiteSpace.lastIndex : pos;\n  }\n\n  lookaheadCharCode() {\n    return this.input.charCodeAt(this.nextTokenStart());\n  }\n\n  codePointAtPos(pos) {\n    let cp = this.input.charCodeAt(pos);\n\n    if ((cp & 0xfc00) === 0xd800 && ++pos < this.input.length) {\n      const trail = this.input.charCodeAt(pos);\n\n      if ((trail & 0xfc00) === 0xdc00) {\n        cp = 0x10000 + ((cp & 0x3ff) << 10) + (trail & 0x3ff);\n      }\n    }\n\n    return cp;\n  }\n\n  setStrict(strict) {\n    this.state.strict = strict;\n\n    if (strict) {\n      this.state.strictErrors.forEach((message, pos) => this.raise(pos, message));\n      this.state.strictErrors.clear();\n    }\n  }\n\n  curContext() {\n    return this.state.context[this.state.context.length - 1];\n  }\n\n  nextToken() {\n    const curContext = this.curContext();\n    if (!curContext.preserveSpace) this.skipSpace();\n    this.state.start = this.state.pos;\n    if (!this.isLookahead) this.state.startLoc = this.state.curPosition();\n\n    if (this.state.pos >= this.length) {\n      this.finishToken(129);\n      return;\n    }\n\n    if (curContext === types$1.template) {\n      this.readTmplToken();\n    } else {\n      this.getTokenFromCode(this.codePointAtPos(this.state.pos));\n    }\n  }\n\n  skipBlockComment() {\n    let startLoc;\n    if (!this.isLookahead) startLoc = this.state.curPosition();\n    const start = this.state.pos;\n    const end = this.input.indexOf(\"*/\", start + 2);\n    if (end === -1) throw this.raise(start, ErrorMessages.UnterminatedComment);\n    this.state.pos = end + 2;\n    lineBreakG.lastIndex = start + 2;\n\n    while (lineBreakG.test(this.input) && lineBreakG.lastIndex <= end) {\n      ++this.state.curLine;\n      this.state.lineStart = lineBreakG.lastIndex;\n    }\n\n    if (this.isLookahead) return;\n    const comment = {\n      type: \"CommentBlock\",\n      value: this.input.slice(start + 2, end),\n      start,\n      end: end + 2,\n      loc: new SourceLocation(startLoc, this.state.curPosition())\n    };\n    if (this.options.tokens) this.pushToken(comment);\n    return comment;\n  }\n\n  skipLineComment(startSkip) {\n    const start = this.state.pos;\n    let startLoc;\n    if (!this.isLookahead) startLoc = this.state.curPosition();\n    let ch = this.input.charCodeAt(this.state.pos += startSkip);\n\n    if (this.state.pos < this.length) {\n      while (!isNewLine(ch) && ++this.state.pos < this.length) {\n        ch = this.input.charCodeAt(this.state.pos);\n      }\n    }\n\n    if (this.isLookahead) return;\n    const end = this.state.pos;\n    const value = this.input.slice(start + startSkip, end);\n    const comment = {\n      type: \"CommentLine\",\n      value,\n      start,\n      end,\n      loc: new SourceLocation(startLoc, this.state.curPosition())\n    };\n    if (this.options.tokens) this.pushToken(comment);\n    return comment;\n  }\n\n  skipSpace() {\n    const spaceStart = this.state.pos;\n    const comments = [];\n\n    loop: while (this.state.pos < this.length) {\n      const ch = this.input.charCodeAt(this.state.pos);\n\n      switch (ch) {\n        case 32:\n        case 160:\n        case 9:\n          ++this.state.pos;\n          break;\n\n        case 13:\n          if (this.input.charCodeAt(this.state.pos + 1) === 10) {\n            ++this.state.pos;\n          }\n\n        case 10:\n        case 8232:\n        case 8233:\n          ++this.state.pos;\n          ++this.state.curLine;\n          this.state.lineStart = this.state.pos;\n          break;\n\n        case 47:\n          switch (this.input.charCodeAt(this.state.pos + 1)) {\n            case 42:\n              {\n                const comment = this.skipBlockComment();\n\n                if (comment !== undefined) {\n                  this.addComment(comment);\n                  if (this.options.attachComment) comments.push(comment);\n                }\n\n                break;\n              }\n\n            case 47:\n              {\n                const comment = this.skipLineComment(2);\n\n                if (comment !== undefined) {\n                  this.addComment(comment);\n                  if (this.options.attachComment) comments.push(comment);\n                }\n\n                break;\n              }\n\n            default:\n              break loop;\n          }\n\n          break;\n\n        default:\n          if (isWhitespace(ch)) {\n            ++this.state.pos;\n          } else if (ch === 45 && !this.inModule) {\n            const pos = this.state.pos;\n\n            if (this.input.charCodeAt(pos + 1) === 45 && this.input.charCodeAt(pos + 2) === 62 && (spaceStart === 0 || this.state.lineStart > spaceStart)) {\n              const comment = this.skipLineComment(3);\n\n              if (comment !== undefined) {\n                this.addComment(comment);\n                if (this.options.attachComment) comments.push(comment);\n              }\n            } else {\n              break loop;\n            }\n          } else if (ch === 60 && !this.inModule) {\n            const pos = this.state.pos;\n\n            if (this.input.charCodeAt(pos + 1) === 33 && this.input.charCodeAt(pos + 2) === 45 && this.input.charCodeAt(pos + 3) === 45) {\n              const comment = this.skipLineComment(4);\n\n              if (comment !== undefined) {\n                this.addComment(comment);\n                if (this.options.attachComment) comments.push(comment);\n              }\n            } else {\n              break loop;\n            }\n          } else {\n            break loop;\n          }\n\n      }\n    }\n\n    if (comments.length > 0) {\n      const end = this.state.pos;\n      const CommentWhitespace = {\n        start: spaceStart,\n        end,\n        comments,\n        leadingNode: null,\n        trailingNode: null,\n        containingNode: null\n      };\n      this.state.commentStack.push(CommentWhitespace);\n    }\n  }\n\n  finishToken(type, val) {\n    this.state.end = this.state.pos;\n    const prevType = this.state.type;\n    this.state.type = type;\n    this.state.value = val;\n\n    if (!this.isLookahead) {\n      this.state.endLoc = this.state.curPosition();\n      this.updateContext(prevType);\n    }\n  }\n\n  replaceToken(type) {\n    this.state.type = type;\n    this.updateContext();\n  }\n\n  readToken_numberSign() {\n    if (this.state.pos === 0 && this.readToken_interpreter()) {\n      return;\n    }\n\n    const nextPos = this.state.pos + 1;\n    const next = this.codePointAtPos(nextPos);\n\n    if (next >= 48 && next <= 57) {\n      throw this.raise(this.state.pos, ErrorMessages.UnexpectedDigitAfterHash);\n    }\n\n    if (next === 123 || next === 91 && this.hasPlugin(\"recordAndTuple\")) {\n      this.expectPlugin(\"recordAndTuple\");\n\n      if (this.getPluginOption(\"recordAndTuple\", \"syntaxType\") !== \"hash\") {\n        throw this.raise(this.state.pos, next === 123 ? ErrorMessages.RecordExpressionHashIncorrectStartSyntaxType : ErrorMessages.TupleExpressionHashIncorrectStartSyntaxType);\n      }\n\n      this.state.pos += 2;\n\n      if (next === 123) {\n        this.finishToken(7);\n      } else {\n        this.finishToken(1);\n      }\n    } else if (isIdentifierStart(next)) {\n      ++this.state.pos;\n      this.finishToken(128, this.readWord1(next));\n    } else if (next === 92) {\n      ++this.state.pos;\n      this.finishToken(128, this.readWord1());\n    } else {\n      this.finishOp(25, 1);\n    }\n  }\n\n  readToken_dot() {\n    const next = this.input.charCodeAt(this.state.pos + 1);\n\n    if (next >= 48 && next <= 57) {\n      this.readNumber(true);\n      return;\n    }\n\n    if (next === 46 && this.input.charCodeAt(this.state.pos + 2) === 46) {\n      this.state.pos += 3;\n      this.finishToken(21);\n    } else {\n      ++this.state.pos;\n      this.finishToken(16);\n    }\n  }\n\n  readToken_slash() {\n    const next = this.input.charCodeAt(this.state.pos + 1);\n\n    if (next === 61) {\n      this.finishOp(29, 2);\n    } else {\n      this.finishOp(50, 1);\n    }\n  }\n\n  readToken_interpreter() {\n    if (this.state.pos !== 0 || this.length < 2) return false;\n    let ch = this.input.charCodeAt(this.state.pos + 1);\n    if (ch !== 33) return false;\n    const start = this.state.pos;\n    this.state.pos += 1;\n\n    while (!isNewLine(ch) && ++this.state.pos < this.length) {\n      ch = this.input.charCodeAt(this.state.pos);\n    }\n\n    const value = this.input.slice(start + 2, this.state.pos);\n    this.finishToken(26, value);\n    return true;\n  }\n\n  readToken_mult_modulo(code) {\n    let type = code === 42 ? 49 : 48;\n    let width = 1;\n    let next = this.input.charCodeAt(this.state.pos + 1);\n\n    if (code === 42 && next === 42) {\n      width++;\n      next = this.input.charCodeAt(this.state.pos + 2);\n      type = 51;\n    }\n\n    if (next === 61 && !this.state.inType) {\n      width++;\n      type = code === 37 ? 31 : 28;\n    }\n\n    this.finishOp(type, width);\n  }\n\n  readToken_pipe_amp(code) {\n    const next = this.input.charCodeAt(this.state.pos + 1);\n\n    if (next === code) {\n      if (this.input.charCodeAt(this.state.pos + 2) === 61) {\n        this.finishOp(28, 3);\n      } else {\n        this.finishOp(code === 124 ? 37 : 38, 2);\n      }\n\n      return;\n    }\n\n    if (code === 124) {\n      if (next === 62) {\n        this.finishOp(35, 2);\n        return;\n      }\n\n      if (this.hasPlugin(\"recordAndTuple\") && next === 125) {\n        if (this.getPluginOption(\"recordAndTuple\", \"syntaxType\") !== \"bar\") {\n          throw this.raise(this.state.pos, ErrorMessages.RecordExpressionBarIncorrectEndSyntaxType);\n        }\n\n        this.state.pos += 2;\n        this.finishToken(9);\n        return;\n      }\n\n      if (this.hasPlugin(\"recordAndTuple\") && next === 93) {\n        if (this.getPluginOption(\"recordAndTuple\", \"syntaxType\") !== \"bar\") {\n          throw this.raise(this.state.pos, ErrorMessages.TupleExpressionBarIncorrectEndSyntaxType);\n        }\n\n        this.state.pos += 2;\n        this.finishToken(4);\n        return;\n      }\n    }\n\n    if (next === 61) {\n      this.finishOp(28, 2);\n      return;\n    }\n\n    this.finishOp(code === 124 ? 39 : 41, 1);\n  }\n\n  readToken_caret() {\n    const next = this.input.charCodeAt(this.state.pos + 1);\n\n    if (next === 61 && !this.state.inType) {\n      this.finishOp(30, 2);\n    } else {\n      this.finishOp(40, 1);\n    }\n  }\n\n  readToken_plus_min(code) {\n    const next = this.input.charCodeAt(this.state.pos + 1);\n\n    if (next === code) {\n      this.finishOp(32, 2);\n      return;\n    }\n\n    if (next === 61) {\n      this.finishOp(28, 2);\n    } else {\n      this.finishOp(47, 1);\n    }\n  }\n\n  readToken_lt() {\n    const {\n      pos\n    } = this.state;\n    const next = this.input.charCodeAt(pos + 1);\n\n    if (next === 60) {\n      if (this.input.charCodeAt(pos + 2) === 61) {\n        this.finishOp(28, 3);\n        return;\n      }\n\n      this.finishOp(46, 2);\n      return;\n    }\n\n    if (next === 61) {\n      this.finishOp(45, 2);\n      return;\n    }\n\n    this.finishOp(43, 1);\n  }\n\n  readToken_gt() {\n    const {\n      pos\n    } = this.state;\n    const next = this.input.charCodeAt(pos + 1);\n\n    if (next === 62) {\n      const size = this.input.charCodeAt(pos + 2) === 62 ? 3 : 2;\n\n      if (this.input.charCodeAt(pos + size) === 61) {\n        this.finishOp(28, size + 1);\n        return;\n      }\n\n      this.finishOp(46, size);\n      return;\n    }\n\n    if (next === 61) {\n      this.finishOp(45, 2);\n      return;\n    }\n\n    this.finishOp(44, 1);\n  }\n\n  readToken_eq_excl(code) {\n    const next = this.input.charCodeAt(this.state.pos + 1);\n\n    if (next === 61) {\n      this.finishOp(42, this.input.charCodeAt(this.state.pos + 2) === 61 ? 3 : 2);\n      return;\n    }\n\n    if (code === 61 && next === 62) {\n      this.state.pos += 2;\n      this.finishToken(19);\n      return;\n    }\n\n    this.finishOp(code === 61 ? 27 : 33, 1);\n  }\n\n  readToken_question() {\n    const next = this.input.charCodeAt(this.state.pos + 1);\n    const next2 = this.input.charCodeAt(this.state.pos + 2);\n\n    if (next === 63) {\n      if (next2 === 61) {\n        this.finishOp(28, 3);\n      } else {\n        this.finishOp(36, 2);\n      }\n    } else if (next === 46 && !(next2 >= 48 && next2 <= 57)) {\n      this.state.pos += 2;\n      this.finishToken(18);\n    } else {\n      ++this.state.pos;\n      this.finishToken(17);\n    }\n  }\n\n  getTokenFromCode(code) {\n    switch (code) {\n      case 46:\n        this.readToken_dot();\n        return;\n\n      case 40:\n        ++this.state.pos;\n        this.finishToken(10);\n        return;\n\n      case 41:\n        ++this.state.pos;\n        this.finishToken(11);\n        return;\n\n      case 59:\n        ++this.state.pos;\n        this.finishToken(13);\n        return;\n\n      case 44:\n        ++this.state.pos;\n        this.finishToken(12);\n        return;\n\n      case 91:\n        if (this.hasPlugin(\"recordAndTuple\") && this.input.charCodeAt(this.state.pos + 1) === 124) {\n          if (this.getPluginOption(\"recordAndTuple\", \"syntaxType\") !== \"bar\") {\n            throw this.raise(this.state.pos, ErrorMessages.TupleExpressionBarIncorrectStartSyntaxType);\n          }\n\n          this.state.pos += 2;\n          this.finishToken(2);\n        } else {\n          ++this.state.pos;\n          this.finishToken(0);\n        }\n\n        return;\n\n      case 93:\n        ++this.state.pos;\n        this.finishToken(3);\n        return;\n\n      case 123:\n        if (this.hasPlugin(\"recordAndTuple\") && this.input.charCodeAt(this.state.pos + 1) === 124) {\n          if (this.getPluginOption(\"recordAndTuple\", \"syntaxType\") !== \"bar\") {\n            throw this.raise(this.state.pos, ErrorMessages.RecordExpressionBarIncorrectStartSyntaxType);\n          }\n\n          this.state.pos += 2;\n          this.finishToken(6);\n        } else {\n          ++this.state.pos;\n          this.finishToken(5);\n        }\n\n        return;\n\n      case 125:\n        ++this.state.pos;\n        this.finishToken(8);\n        return;\n\n      case 58:\n        if (this.hasPlugin(\"functionBind\") && this.input.charCodeAt(this.state.pos + 1) === 58) {\n          this.finishOp(15, 2);\n        } else {\n          ++this.state.pos;\n          this.finishToken(14);\n        }\n\n        return;\n\n      case 63:\n        this.readToken_question();\n        return;\n\n      case 96:\n        ++this.state.pos;\n        this.finishToken(22);\n        return;\n\n      case 48:\n        {\n          const next = this.input.charCodeAt(this.state.pos + 1);\n\n          if (next === 120 || next === 88) {\n            this.readRadixNumber(16);\n            return;\n          }\n\n          if (next === 111 || next === 79) {\n            this.readRadixNumber(8);\n            return;\n          }\n\n          if (next === 98 || next === 66) {\n            this.readRadixNumber(2);\n            return;\n          }\n        }\n\n      case 49:\n      case 50:\n      case 51:\n      case 52:\n      case 53:\n      case 54:\n      case 55:\n      case 56:\n      case 57:\n        this.readNumber(false);\n        return;\n\n      case 34:\n      case 39:\n        this.readString(code);\n        return;\n\n      case 47:\n        this.readToken_slash();\n        return;\n\n      case 37:\n      case 42:\n        this.readToken_mult_modulo(code);\n        return;\n\n      case 124:\n      case 38:\n        this.readToken_pipe_amp(code);\n        return;\n\n      case 94:\n        this.readToken_caret();\n        return;\n\n      case 43:\n      case 45:\n        this.readToken_plus_min(code);\n        return;\n\n      case 60:\n        this.readToken_lt();\n        return;\n\n      case 62:\n        this.readToken_gt();\n        return;\n\n      case 61:\n      case 33:\n        this.readToken_eq_excl(code);\n        return;\n\n      case 126:\n        this.finishOp(34, 1);\n        return;\n\n      case 64:\n        ++this.state.pos;\n        this.finishToken(24);\n        return;\n\n      case 35:\n        this.readToken_numberSign();\n        return;\n\n      case 92:\n        this.readWord();\n        return;\n\n      default:\n        if (isIdentifierStart(code)) {\n          this.readWord(code);\n          return;\n        }\n\n    }\n\n    throw this.raise(this.state.pos, ErrorMessages.InvalidOrUnexpectedToken, String.fromCodePoint(code));\n  }\n\n  finishOp(type, size) {\n    const str = this.input.slice(this.state.pos, this.state.pos + size);\n    this.state.pos += size;\n    this.finishToken(type, str);\n  }\n\n  readRegexp() {\n    const start = this.state.start + 1;\n    let escaped, inClass;\n    let {\n      pos\n    } = this.state;\n\n    for (;; ++pos) {\n      if (pos >= this.length) {\n        throw this.raise(start, ErrorMessages.UnterminatedRegExp);\n      }\n\n      const ch = this.input.charCodeAt(pos);\n\n      if (isNewLine(ch)) {\n        throw this.raise(start, ErrorMessages.UnterminatedRegExp);\n      }\n\n      if (escaped) {\n        escaped = false;\n      } else {\n        if (ch === 91) {\n          inClass = true;\n        } else if (ch === 93 && inClass) {\n          inClass = false;\n        } else if (ch === 47 && !inClass) {\n          break;\n        }\n\n        escaped = ch === 92;\n      }\n    }\n\n    const content = this.input.slice(start, pos);\n    ++pos;\n    let mods = \"\";\n\n    while (pos < this.length) {\n      const cp = this.codePointAtPos(pos);\n      const char = String.fromCharCode(cp);\n\n      if (VALID_REGEX_FLAGS.has(cp)) {\n        if (mods.includes(char)) {\n          this.raise(pos + 1, ErrorMessages.DuplicateRegExpFlags);\n        }\n      } else if (isIdentifierChar(cp) || cp === 92) {\n        this.raise(pos + 1, ErrorMessages.MalformedRegExpFlags);\n      } else {\n        break;\n      }\n\n      ++pos;\n      mods += char;\n    }\n\n    this.state.pos = pos;\n    this.finishToken(127, {\n      pattern: content,\n      flags: mods\n    });\n  }\n\n  readInt(radix, len, forceLen, allowNumSeparator = true) {\n    const start = this.state.pos;\n    const forbiddenSiblings = radix === 16 ? forbiddenNumericSeparatorSiblings.hex : forbiddenNumericSeparatorSiblings.decBinOct;\n    const allowedSiblings = radix === 16 ? allowedNumericSeparatorSiblings.hex : radix === 10 ? allowedNumericSeparatorSiblings.dec : radix === 8 ? allowedNumericSeparatorSiblings.oct : allowedNumericSeparatorSiblings.bin;\n    let invalid = false;\n    let total = 0;\n\n    for (let i = 0, e = len == null ? Infinity : len; i < e; ++i) {\n      const code = this.input.charCodeAt(this.state.pos);\n      let val;\n\n      if (code === 95) {\n        const prev = this.input.charCodeAt(this.state.pos - 1);\n        const next = this.input.charCodeAt(this.state.pos + 1);\n\n        if (allowedSiblings.indexOf(next) === -1) {\n          this.raise(this.state.pos, ErrorMessages.UnexpectedNumericSeparator);\n        } else if (forbiddenSiblings.indexOf(prev) > -1 || forbiddenSiblings.indexOf(next) > -1 || Number.isNaN(next)) {\n          this.raise(this.state.pos, ErrorMessages.UnexpectedNumericSeparator);\n        }\n\n        if (!allowNumSeparator) {\n          this.raise(this.state.pos, ErrorMessages.NumericSeparatorInEscapeSequence);\n        }\n\n        ++this.state.pos;\n        continue;\n      }\n\n      if (code >= 97) {\n        val = code - 97 + 10;\n      } else if (code >= 65) {\n        val = code - 65 + 10;\n      } else if (_isDigit(code)) {\n        val = code - 48;\n      } else {\n        val = Infinity;\n      }\n\n      if (val >= radix) {\n        if (this.options.errorRecovery && val <= 9) {\n          val = 0;\n          this.raise(this.state.start + i + 2, ErrorMessages.InvalidDigit, radix);\n        } else if (forceLen) {\n          val = 0;\n          invalid = true;\n        } else {\n          break;\n        }\n      }\n\n      ++this.state.pos;\n      total = total * radix + val;\n    }\n\n    if (this.state.pos === start || len != null && this.state.pos - start !== len || invalid) {\n      return null;\n    }\n\n    return total;\n  }\n\n  readRadixNumber(radix) {\n    const start = this.state.pos;\n    let isBigInt = false;\n    this.state.pos += 2;\n    const val = this.readInt(radix);\n\n    if (val == null) {\n      this.raise(this.state.start + 2, ErrorMessages.InvalidDigit, radix);\n    }\n\n    const next = this.input.charCodeAt(this.state.pos);\n\n    if (next === 110) {\n      ++this.state.pos;\n      isBigInt = true;\n    } else if (next === 109) {\n      throw this.raise(start, ErrorMessages.InvalidDecimal);\n    }\n\n    if (isIdentifierStart(this.codePointAtPos(this.state.pos))) {\n      throw this.raise(this.state.pos, ErrorMessages.NumberIdentifier);\n    }\n\n    if (isBigInt) {\n      const str = this.input.slice(start, this.state.pos).replace(/[_n]/g, \"\");\n      this.finishToken(125, str);\n      return;\n    }\n\n    this.finishToken(124, val);\n  }\n\n  readNumber(startsWithDot) {\n    const start = this.state.pos;\n    let isFloat = false;\n    let isBigInt = false;\n    let isDecimal = false;\n    let hasExponent = false;\n    let isOctal = false;\n\n    if (!startsWithDot && this.readInt(10) === null) {\n      this.raise(start, ErrorMessages.InvalidNumber);\n    }\n\n    const hasLeadingZero = this.state.pos - start >= 2 && this.input.charCodeAt(start) === 48;\n\n    if (hasLeadingZero) {\n      const integer = this.input.slice(start, this.state.pos);\n      this.recordStrictModeErrors(start, ErrorMessages.StrictOctalLiteral);\n\n      if (!this.state.strict) {\n        const underscorePos = integer.indexOf(\"_\");\n\n        if (underscorePos > 0) {\n          this.raise(underscorePos + start, ErrorMessages.ZeroDigitNumericSeparator);\n        }\n      }\n\n      isOctal = hasLeadingZero && !/[89]/.test(integer);\n    }\n\n    let next = this.input.charCodeAt(this.state.pos);\n\n    if (next === 46 && !isOctal) {\n      ++this.state.pos;\n      this.readInt(10);\n      isFloat = true;\n      next = this.input.charCodeAt(this.state.pos);\n    }\n\n    if ((next === 69 || next === 101) && !isOctal) {\n      next = this.input.charCodeAt(++this.state.pos);\n\n      if (next === 43 || next === 45) {\n        ++this.state.pos;\n      }\n\n      if (this.readInt(10) === null) {\n        this.raise(start, ErrorMessages.InvalidOrMissingExponent);\n      }\n\n      isFloat = true;\n      hasExponent = true;\n      next = this.input.charCodeAt(this.state.pos);\n    }\n\n    if (next === 110) {\n      if (isFloat || hasLeadingZero) {\n        this.raise(start, ErrorMessages.InvalidBigIntLiteral);\n      }\n\n      ++this.state.pos;\n      isBigInt = true;\n    }\n\n    if (next === 109) {\n      this.expectPlugin(\"decimal\", this.state.pos);\n\n      if (hasExponent || hasLeadingZero) {\n        this.raise(start, ErrorMessages.InvalidDecimal);\n      }\n\n      ++this.state.pos;\n      isDecimal = true;\n    }\n\n    if (isIdentifierStart(this.codePointAtPos(this.state.pos))) {\n      throw this.raise(this.state.pos, ErrorMessages.NumberIdentifier);\n    }\n\n    const str = this.input.slice(start, this.state.pos).replace(/[_mn]/g, \"\");\n\n    if (isBigInt) {\n      this.finishToken(125, str);\n      return;\n    }\n\n    if (isDecimal) {\n      this.finishToken(126, str);\n      return;\n    }\n\n    const val = isOctal ? parseInt(str, 8) : parseFloat(str);\n    this.finishToken(124, val);\n  }\n\n  readCodePoint(throwOnInvalid) {\n    const ch = this.input.charCodeAt(this.state.pos);\n    let code;\n\n    if (ch === 123) {\n      const codePos = ++this.state.pos;\n      code = this.readHexChar(this.input.indexOf(\"}\", this.state.pos) - this.state.pos, true, throwOnInvalid);\n      ++this.state.pos;\n\n      if (code !== null && code > 0x10ffff) {\n        if (throwOnInvalid) {\n          this.raise(codePos, ErrorMessages.InvalidCodePoint);\n        } else {\n          return null;\n        }\n      }\n    } else {\n      code = this.readHexChar(4, false, throwOnInvalid);\n    }\n\n    return code;\n  }\n\n  readString(quote) {\n    let out = \"\",\n        chunkStart = ++this.state.pos;\n\n    for (;;) {\n      if (this.state.pos >= this.length) {\n        throw this.raise(this.state.start, ErrorMessages.UnterminatedString);\n      }\n\n      const ch = this.input.charCodeAt(this.state.pos);\n      if (ch === quote) break;\n\n      if (ch === 92) {\n        out += this.input.slice(chunkStart, this.state.pos);\n        out += this.readEscapedChar(false);\n        chunkStart = this.state.pos;\n      } else if (ch === 8232 || ch === 8233) {\n        ++this.state.pos;\n        ++this.state.curLine;\n        this.state.lineStart = this.state.pos;\n      } else if (isNewLine(ch)) {\n        throw this.raise(this.state.start, ErrorMessages.UnterminatedString);\n      } else {\n        ++this.state.pos;\n      }\n    }\n\n    out += this.input.slice(chunkStart, this.state.pos++);\n    this.finishToken(123, out);\n  }\n\n  readTmplToken() {\n    let out = \"\",\n        chunkStart = this.state.pos,\n        containsInvalid = false;\n\n    for (;;) {\n      if (this.state.pos >= this.length) {\n        throw this.raise(this.state.start, ErrorMessages.UnterminatedTemplate);\n      }\n\n      const ch = this.input.charCodeAt(this.state.pos);\n\n      if (ch === 96 || ch === 36 && this.input.charCodeAt(this.state.pos + 1) === 123) {\n        if (this.state.pos === this.state.start && this.match(20)) {\n          if (ch === 36) {\n            this.state.pos += 2;\n            this.finishToken(23);\n            return;\n          } else {\n            ++this.state.pos;\n            this.finishToken(22);\n            return;\n          }\n        }\n\n        out += this.input.slice(chunkStart, this.state.pos);\n        this.finishToken(20, containsInvalid ? null : out);\n        return;\n      }\n\n      if (ch === 92) {\n        out += this.input.slice(chunkStart, this.state.pos);\n        const escaped = this.readEscapedChar(true);\n\n        if (escaped === null) {\n          containsInvalid = true;\n        } else {\n          out += escaped;\n        }\n\n        chunkStart = this.state.pos;\n      } else if (isNewLine(ch)) {\n        out += this.input.slice(chunkStart, this.state.pos);\n        ++this.state.pos;\n\n        switch (ch) {\n          case 13:\n            if (this.input.charCodeAt(this.state.pos) === 10) {\n              ++this.state.pos;\n            }\n\n          case 10:\n            out += \"\\n\";\n            break;\n\n          default:\n            out += String.fromCharCode(ch);\n            break;\n        }\n\n        ++this.state.curLine;\n        this.state.lineStart = this.state.pos;\n        chunkStart = this.state.pos;\n      } else {\n        ++this.state.pos;\n      }\n    }\n  }\n\n  recordStrictModeErrors(pos, message) {\n    if (this.state.strict && !this.state.strictErrors.has(pos)) {\n      this.raise(pos, message);\n    } else {\n      this.state.strictErrors.set(pos, message);\n    }\n  }\n\n  readEscapedChar(inTemplate) {\n    const throwOnInvalid = !inTemplate;\n    const ch = this.input.charCodeAt(++this.state.pos);\n    ++this.state.pos;\n\n    switch (ch) {\n      case 110:\n        return \"\\n\";\n\n      case 114:\n        return \"\\r\";\n\n      case 120:\n        {\n          const code = this.readHexChar(2, false, throwOnInvalid);\n          return code === null ? null : String.fromCharCode(code);\n        }\n\n      case 117:\n        {\n          const code = this.readCodePoint(throwOnInvalid);\n          return code === null ? null : String.fromCodePoint(code);\n        }\n\n      case 116:\n        return \"\\t\";\n\n      case 98:\n        return \"\\b\";\n\n      case 118:\n        return \"\\u000b\";\n\n      case 102:\n        return \"\\f\";\n\n      case 13:\n        if (this.input.charCodeAt(this.state.pos) === 10) {\n          ++this.state.pos;\n        }\n\n      case 10:\n        this.state.lineStart = this.state.pos;\n        ++this.state.curLine;\n\n      case 8232:\n      case 8233:\n        return \"\";\n\n      case 56:\n      case 57:\n        if (inTemplate) {\n          return null;\n        } else {\n          this.recordStrictModeErrors(this.state.pos - 1, ErrorMessages.StrictNumericEscape);\n        }\n\n      default:\n        if (ch >= 48 && ch <= 55) {\n          const codePos = this.state.pos - 1;\n          const match = this.input.substr(this.state.pos - 1, 3).match(/^[0-7]+/);\n          let octalStr = match[0];\n          let octal = parseInt(octalStr, 8);\n\n          if (octal > 255) {\n            octalStr = octalStr.slice(0, -1);\n            octal = parseInt(octalStr, 8);\n          }\n\n          this.state.pos += octalStr.length - 1;\n          const next = this.input.charCodeAt(this.state.pos);\n\n          if (octalStr !== \"0\" || next === 56 || next === 57) {\n            if (inTemplate) {\n              return null;\n            } else {\n              this.recordStrictModeErrors(codePos, ErrorMessages.StrictNumericEscape);\n            }\n          }\n\n          return String.fromCharCode(octal);\n        }\n\n        return String.fromCharCode(ch);\n    }\n  }\n\n  readHexChar(len, forceLen, throwOnInvalid) {\n    const codePos = this.state.pos;\n    const n = this.readInt(16, len, forceLen, false);\n\n    if (n === null) {\n      if (throwOnInvalid) {\n        this.raise(codePos, ErrorMessages.InvalidEscapeSequence);\n      } else {\n        this.state.pos = codePos - 1;\n      }\n    }\n\n    return n;\n  }\n\n  readWord1(firstCode) {\n    this.state.containsEsc = false;\n    let word = \"\";\n    const start = this.state.pos;\n    let chunkStart = this.state.pos;\n\n    if (firstCode !== undefined) {\n      this.state.pos += firstCode <= 0xffff ? 1 : 2;\n    }\n\n    while (this.state.pos < this.length) {\n      const ch = this.codePointAtPos(this.state.pos);\n\n      if (isIdentifierChar(ch)) {\n        this.state.pos += ch <= 0xffff ? 1 : 2;\n      } else if (ch === 92) {\n        this.state.containsEsc = true;\n        word += this.input.slice(chunkStart, this.state.pos);\n        const escStart = this.state.pos;\n        const identifierCheck = this.state.pos === start ? isIdentifierStart : isIdentifierChar;\n\n        if (this.input.charCodeAt(++this.state.pos) !== 117) {\n          this.raise(this.state.pos, ErrorMessages.MissingUnicodeEscape);\n          chunkStart = this.state.pos - 1;\n          continue;\n        }\n\n        ++this.state.pos;\n        const esc = this.readCodePoint(true);\n\n        if (esc !== null) {\n          if (!identifierCheck(esc)) {\n            this.raise(escStart, ErrorMessages.EscapedCharNotAnIdentifier);\n          }\n\n          word += String.fromCodePoint(esc);\n        }\n\n        chunkStart = this.state.pos;\n      } else {\n        break;\n      }\n    }\n\n    return word + this.input.slice(chunkStart, this.state.pos);\n  }\n\n  readWord(firstCode) {\n    const word = this.readWord1(firstCode);\n    const type = keywords$1.get(word);\n\n    if (type !== undefined) {\n      this.finishToken(type, tokenLabelName(type));\n    } else {\n      this.finishToken(122, word);\n    }\n  }\n\n  checkKeywordEscapes() {\n    const {\n      type\n    } = this.state;\n\n    if (tokenIsKeyword(type) && this.state.containsEsc) {\n      this.raise(this.state.start, ErrorMessages.InvalidEscapedReservedWord, tokenLabelName(type));\n    }\n  }\n\n  updateContext(prevType) {\n    const {\n      context,\n      type\n    } = this.state;\n\n    switch (type) {\n      case 8:\n        context.pop();\n        break;\n\n      case 5:\n      case 7:\n      case 23:\n        context.push(types$1.brace);\n        break;\n\n      case 22:\n        if (context[context.length - 1] === types$1.template) {\n          context.pop();\n        } else {\n          context.push(types$1.template);\n        }\n\n        break;\n    }\n  }\n\n}\n\nclass ClassScope {\n  constructor() {\n    this.privateNames = new Set();\n    this.loneAccessors = new Map();\n    this.undefinedPrivateNames = new Map();\n  }\n\n}\nclass ClassScopeHandler {\n  constructor(raise) {\n    this.stack = [];\n    this.undefinedPrivateNames = new Map();\n    this.raise = raise;\n  }\n\n  current() {\n    return this.stack[this.stack.length - 1];\n  }\n\n  enter() {\n    this.stack.push(new ClassScope());\n  }\n\n  exit() {\n    const oldClassScope = this.stack.pop();\n    const current = this.current();\n\n    for (const [name, pos] of Array.from(oldClassScope.undefinedPrivateNames)) {\n      if (current) {\n        if (!current.undefinedPrivateNames.has(name)) {\n          current.undefinedPrivateNames.set(name, pos);\n        }\n      } else {\n        this.raise(pos, ErrorMessages.InvalidPrivateFieldResolution, name);\n      }\n    }\n  }\n\n  declarePrivateName(name, elementType, pos) {\n    const classScope = this.current();\n    let redefined = classScope.privateNames.has(name);\n\n    if (elementType & CLASS_ELEMENT_KIND_ACCESSOR) {\n      const accessor = redefined && classScope.loneAccessors.get(name);\n\n      if (accessor) {\n        const oldStatic = accessor & CLASS_ELEMENT_FLAG_STATIC;\n        const newStatic = elementType & CLASS_ELEMENT_FLAG_STATIC;\n        const oldKind = accessor & CLASS_ELEMENT_KIND_ACCESSOR;\n        const newKind = elementType & CLASS_ELEMENT_KIND_ACCESSOR;\n        redefined = oldKind === newKind || oldStatic !== newStatic;\n        if (!redefined) classScope.loneAccessors.delete(name);\n      } else if (!redefined) {\n        classScope.loneAccessors.set(name, elementType);\n      }\n    }\n\n    if (redefined) {\n      this.raise(pos, ErrorMessages.PrivateNameRedeclaration, name);\n    }\n\n    classScope.privateNames.add(name);\n    classScope.undefinedPrivateNames.delete(name);\n  }\n\n  usePrivateName(name, pos) {\n    let classScope;\n\n    for (classScope of this.stack) {\n      if (classScope.privateNames.has(name)) return;\n    }\n\n    if (classScope) {\n      classScope.undefinedPrivateNames.set(name, pos);\n    } else {\n      this.raise(pos, ErrorMessages.InvalidPrivateFieldResolution, name);\n    }\n  }\n\n}\n\nconst kExpression = 0,\n      kMaybeArrowParameterDeclaration = 1,\n      kMaybeAsyncArrowParameterDeclaration = 2,\n      kParameterDeclaration = 3;\n\nclass ExpressionScope {\n  constructor(type = kExpression) {\n    this.type = void 0;\n    this.type = type;\n  }\n\n  canBeArrowParameterDeclaration() {\n    return this.type === kMaybeAsyncArrowParameterDeclaration || this.type === kMaybeArrowParameterDeclaration;\n  }\n\n  isCertainlyParameterDeclaration() {\n    return this.type === kParameterDeclaration;\n  }\n\n}\n\nclass ArrowHeadParsingScope extends ExpressionScope {\n  constructor(type) {\n    super(type);\n    this.errors = new Map();\n  }\n\n  recordDeclarationError(pos, template) {\n    this.errors.set(pos, template);\n  }\n\n  clearDeclarationError(pos) {\n    this.errors.delete(pos);\n  }\n\n  iterateErrors(iterator) {\n    this.errors.forEach(iterator);\n  }\n\n}\n\nclass ExpressionScopeHandler {\n  constructor(raise) {\n    this.stack = [new ExpressionScope()];\n    this.raise = raise;\n  }\n\n  enter(scope) {\n    this.stack.push(scope);\n  }\n\n  exit() {\n    this.stack.pop();\n  }\n\n  recordParameterInitializerError(pos, template) {\n    const {\n      stack\n    } = this;\n    let i = stack.length - 1;\n    let scope = stack[i];\n\n    while (!scope.isCertainlyParameterDeclaration()) {\n      if (scope.canBeArrowParameterDeclaration()) {\n        scope.recordDeclarationError(pos, template);\n      } else {\n        return;\n      }\n\n      scope = stack[--i];\n    }\n\n    this.raise(pos, template);\n  }\n\n  recordParenthesizedIdentifierError(pos, template) {\n    const {\n      stack\n    } = this;\n    const scope = stack[stack.length - 1];\n\n    if (scope.isCertainlyParameterDeclaration()) {\n      this.raise(pos, template);\n    } else if (scope.canBeArrowParameterDeclaration()) {\n      scope.recordDeclarationError(pos, template);\n    } else {\n      return;\n    }\n  }\n\n  recordAsyncArrowParametersError(pos, template) {\n    const {\n      stack\n    } = this;\n    let i = stack.length - 1;\n    let scope = stack[i];\n\n    while (scope.canBeArrowParameterDeclaration()) {\n      if (scope.type === kMaybeAsyncArrowParameterDeclaration) {\n        scope.recordDeclarationError(pos, template);\n      }\n\n      scope = stack[--i];\n    }\n  }\n\n  validateAsPattern() {\n    const {\n      stack\n    } = this;\n    const currentScope = stack[stack.length - 1];\n    if (!currentScope.canBeArrowParameterDeclaration()) return;\n    currentScope.iterateErrors((template, pos) => {\n      this.raise(pos, template);\n      let i = stack.length - 2;\n      let scope = stack[i];\n\n      while (scope.canBeArrowParameterDeclaration()) {\n        scope.clearDeclarationError(pos);\n        scope = stack[--i];\n      }\n    });\n  }\n\n}\nfunction newParameterDeclarationScope() {\n  return new ExpressionScope(kParameterDeclaration);\n}\nfunction newArrowHeadScope() {\n  return new ArrowHeadParsingScope(kMaybeArrowParameterDeclaration);\n}\nfunction newAsyncArrowScope() {\n  return new ArrowHeadParsingScope(kMaybeAsyncArrowParameterDeclaration);\n}\nfunction newExpressionScope() {\n  return new ExpressionScope();\n}\n\nconst PARAM = 0b0000,\n      PARAM_YIELD = 0b0001,\n      PARAM_AWAIT = 0b0010,\n      PARAM_RETURN = 0b0100,\n      PARAM_IN = 0b1000;\nclass ProductionParameterHandler {\n  constructor() {\n    this.stacks = [];\n  }\n\n  enter(flags) {\n    this.stacks.push(flags);\n  }\n\n  exit() {\n    this.stacks.pop();\n  }\n\n  currentFlags() {\n    return this.stacks[this.stacks.length - 1];\n  }\n\n  get hasAwait() {\n    return (this.currentFlags() & PARAM_AWAIT) > 0;\n  }\n\n  get hasYield() {\n    return (this.currentFlags() & PARAM_YIELD) > 0;\n  }\n\n  get hasReturn() {\n    return (this.currentFlags() & PARAM_RETURN) > 0;\n  }\n\n  get hasIn() {\n    return (this.currentFlags() & PARAM_IN) > 0;\n  }\n\n}\nfunction functionFlags(isAsync, isGenerator) {\n  return (isAsync ? PARAM_AWAIT : 0) | (isGenerator ? PARAM_YIELD : 0);\n}\n\nclass UtilParser extends Tokenizer {\n  addExtra(node, key, val) {\n    if (!node) return;\n    const extra = node.extra = node.extra || {};\n    extra[key] = val;\n  }\n\n  isContextual(token) {\n    return this.state.type === token && !this.state.containsEsc;\n  }\n\n  isUnparsedContextual(nameStart, name) {\n    const nameEnd = nameStart + name.length;\n\n    if (this.input.slice(nameStart, nameEnd) === name) {\n      const nextCh = this.input.charCodeAt(nameEnd);\n      return !(isIdentifierChar(nextCh) || (nextCh & 0xfc00) === 0xd800);\n    }\n\n    return false;\n  }\n\n  isLookaheadContextual(name) {\n    const next = this.nextTokenStart();\n    return this.isUnparsedContextual(next, name);\n  }\n\n  eatContextual(token) {\n    if (this.isContextual(token)) {\n      this.next();\n      return true;\n    }\n\n    return false;\n  }\n\n  expectContextual(token, template) {\n    if (!this.eatContextual(token)) this.unexpected(null, template);\n  }\n\n  canInsertSemicolon() {\n    return this.match(129) || this.match(8) || this.hasPrecedingLineBreak();\n  }\n\n  hasPrecedingLineBreak() {\n    return lineBreak.test(this.input.slice(this.state.lastTokEnd, this.state.start));\n  }\n\n  hasFollowingLineBreak() {\n    skipWhiteSpaceToLineBreak.lastIndex = this.state.end;\n    return skipWhiteSpaceToLineBreak.test(this.input);\n  }\n\n  isLineTerminator() {\n    return this.eat(13) || this.canInsertSemicolon();\n  }\n\n  semicolon(allowAsi = true) {\n    if (allowAsi ? this.isLineTerminator() : this.eat(13)) return;\n    this.raise(this.state.lastTokEnd, ErrorMessages.MissingSemicolon);\n  }\n\n  expect(type, pos) {\n    this.eat(type) || this.unexpected(pos, type);\n  }\n\n  assertNoSpace(message = \"Unexpected space.\") {\n    if (this.state.start > this.state.lastTokEnd) {\n      this.raise(this.state.lastTokEnd, {\n        code: ErrorCodes.SyntaxError,\n        reasonCode: \"UnexpectedSpace\",\n        template: message\n      });\n    }\n  }\n\n  unexpected(pos, messageOrType = {\n    code: ErrorCodes.SyntaxError,\n    reasonCode: \"UnexpectedToken\",\n    template: \"Unexpected token\"\n  }) {\n    if (isTokenType(messageOrType)) {\n      messageOrType = {\n        code: ErrorCodes.SyntaxError,\n        reasonCode: \"UnexpectedToken\",\n        template: `Unexpected token, expected \"${tokenLabelName(messageOrType)}\"`\n      };\n    }\n\n    throw this.raise(pos != null ? pos : this.state.start, messageOrType);\n  }\n\n  expectPlugin(name, pos) {\n    if (!this.hasPlugin(name)) {\n      throw this.raiseWithData(pos != null ? pos : this.state.start, {\n        missingPlugin: [name]\n      }, `This experimental syntax requires enabling the parser plugin: '${name}'`);\n    }\n\n    return true;\n  }\n\n  expectOnePlugin(names, pos) {\n    if (!names.some(n => this.hasPlugin(n))) {\n      throw this.raiseWithData(pos != null ? pos : this.state.start, {\n        missingPlugin: names\n      }, `This experimental syntax requires enabling one of the following parser plugin(s): '${names.join(\", \")}'`);\n    }\n  }\n\n  tryParse(fn, oldState = this.state.clone()) {\n    const abortSignal = {\n      node: null\n    };\n\n    try {\n      const node = fn((node = null) => {\n        abortSignal.node = node;\n        throw abortSignal;\n      });\n\n      if (this.state.errors.length > oldState.errors.length) {\n        const failState = this.state;\n        this.state = oldState;\n        this.state.tokensLength = failState.tokensLength;\n        return {\n          node,\n          error: failState.errors[oldState.errors.length],\n          thrown: false,\n          aborted: false,\n          failState\n        };\n      }\n\n      return {\n        node,\n        error: null,\n        thrown: false,\n        aborted: false,\n        failState: null\n      };\n    } catch (error) {\n      const failState = this.state;\n      this.state = oldState;\n\n      if (error instanceof SyntaxError) {\n        return {\n          node: null,\n          error,\n          thrown: true,\n          aborted: false,\n          failState\n        };\n      }\n\n      if (error === abortSignal) {\n        return {\n          node: abortSignal.node,\n          error: null,\n          thrown: false,\n          aborted: true,\n          failState\n        };\n      }\n\n      throw error;\n    }\n  }\n\n  checkExpressionErrors(refExpressionErrors, andThrow) {\n    if (!refExpressionErrors) return false;\n    const {\n      shorthandAssign,\n      doubleProto,\n      optionalParameters\n    } = refExpressionErrors;\n    const hasErrors = shorthandAssign + doubleProto + optionalParameters > -3;\n\n    if (!andThrow) {\n      return hasErrors;\n    } else if (hasErrors) {\n      if (shorthandAssign >= 0) {\n        this.unexpected(shorthandAssign);\n      }\n\n      if (doubleProto >= 0) {\n        this.raise(doubleProto, ErrorMessages.DuplicateProto);\n      }\n\n      if (optionalParameters >= 0) {\n        this.unexpected(optionalParameters);\n      }\n    }\n  }\n\n  isLiteralPropertyName() {\n    return tokenIsLiteralPropertyName(this.state.type);\n  }\n\n  isPrivateName(node) {\n    return node.type === \"PrivateName\";\n  }\n\n  getPrivateNameSV(node) {\n    return node.id.name;\n  }\n\n  hasPropertyAsPrivateName(node) {\n    return (node.type === \"MemberExpression\" || node.type === \"OptionalMemberExpression\") && this.isPrivateName(node.property);\n  }\n\n  isOptionalChain(node) {\n    return node.type === \"OptionalMemberExpression\" || node.type === \"OptionalCallExpression\";\n  }\n\n  isObjectProperty(node) {\n    return node.type === \"ObjectProperty\";\n  }\n\n  isObjectMethod(node) {\n    return node.type === \"ObjectMethod\";\n  }\n\n  initializeScopes(inModule = this.options.sourceType === \"module\") {\n    const oldLabels = this.state.labels;\n    this.state.labels = [];\n    const oldExportedIdentifiers = this.exportedIdentifiers;\n    this.exportedIdentifiers = new Set();\n    const oldInModule = this.inModule;\n    this.inModule = inModule;\n    const oldScope = this.scope;\n    const ScopeHandler = this.getScopeHandler();\n    this.scope = new ScopeHandler(this.raise.bind(this), this.inModule);\n    const oldProdParam = this.prodParam;\n    this.prodParam = new ProductionParameterHandler();\n    const oldClassScope = this.classScope;\n    this.classScope = new ClassScopeHandler(this.raise.bind(this));\n    const oldExpressionScope = this.expressionScope;\n    this.expressionScope = new ExpressionScopeHandler(this.raise.bind(this));\n    return () => {\n      this.state.labels = oldLabels;\n      this.exportedIdentifiers = oldExportedIdentifiers;\n      this.inModule = oldInModule;\n      this.scope = oldScope;\n      this.prodParam = oldProdParam;\n      this.classScope = oldClassScope;\n      this.expressionScope = oldExpressionScope;\n    };\n  }\n\n  enterInitialScopes() {\n    let paramFlags = PARAM;\n\n    if (this.inModule) {\n      paramFlags |= PARAM_AWAIT;\n    }\n\n    this.scope.enter(SCOPE_PROGRAM);\n    this.prodParam.enter(paramFlags);\n  }\n\n}\nclass ExpressionErrors {\n  constructor() {\n    this.shorthandAssign = -1;\n    this.doubleProto = -1;\n    this.optionalParameters = -1;\n  }\n\n}\n\nlet Node$5 = class Node {\n  constructor(parser, pos, loc) {\n    this.type = \"\";\n    this.start = pos;\n    this.end = 0;\n    this.loc = new SourceLocation(loc);\n    if (parser != null && parser.options.ranges) this.range = [pos, 0];\n    if (parser != null && parser.filename) this.loc.filename = parser.filename;\n  }\n\n};\n\nconst NodePrototype = Node$5.prototype;\n{\n  NodePrototype.__clone = function () {\n    const newNode = new Node$5();\n    const keys = Object.keys(this);\n\n    for (let i = 0, length = keys.length; i < length; i++) {\n      const key = keys[i];\n\n      if (key !== \"leadingComments\" && key !== \"trailingComments\" && key !== \"innerComments\") {\n        newNode[key] = this[key];\n      }\n    }\n\n    return newNode;\n  };\n}\n\nfunction clonePlaceholder(node) {\n  return cloneIdentifier(node);\n}\n\nfunction cloneIdentifier(node) {\n  const {\n    type,\n    start,\n    end,\n    loc,\n    range,\n    extra,\n    name\n  } = node;\n  const cloned = Object.create(NodePrototype);\n  cloned.type = type;\n  cloned.start = start;\n  cloned.end = end;\n  cloned.loc = loc;\n  cloned.range = range;\n  cloned.extra = extra;\n  cloned.name = name;\n\n  if (type === \"Placeholder\") {\n    cloned.expectedNode = node.expectedNode;\n  }\n\n  return cloned;\n}\nfunction cloneStringLiteral(node) {\n  const {\n    type,\n    start,\n    end,\n    loc,\n    range,\n    extra\n  } = node;\n\n  if (type === \"Placeholder\") {\n    return clonePlaceholder(node);\n  }\n\n  const cloned = Object.create(NodePrototype);\n  cloned.type = \"StringLiteral\";\n  cloned.start = start;\n  cloned.end = end;\n  cloned.loc = loc;\n  cloned.range = range;\n  cloned.extra = extra;\n  cloned.value = node.value;\n  return cloned;\n}\nclass NodeUtils extends UtilParser {\n  startNode() {\n    return new Node$5(this, this.state.start, this.state.startLoc);\n  }\n\n  startNodeAt(pos, loc) {\n    return new Node$5(this, pos, loc);\n  }\n\n  startNodeAtNode(type) {\n    return this.startNodeAt(type.start, type.loc.start);\n  }\n\n  finishNode(node, type) {\n    return this.finishNodeAt(node, type, this.state.lastTokEnd, this.state.lastTokEndLoc);\n  }\n\n  finishNodeAt(node, type, pos, loc) {\n\n    node.type = type;\n    node.end = pos;\n    node.loc.end = loc;\n    if (this.options.ranges) node.range[1] = pos;\n    if (this.options.attachComment) this.processComment(node);\n    return node;\n  }\n\n  resetStartLocation(node, start, startLoc) {\n    node.start = start;\n    node.loc.start = startLoc;\n    if (this.options.ranges) node.range[0] = start;\n  }\n\n  resetEndLocation(node, end = this.state.lastTokEnd, endLoc = this.state.lastTokEndLoc) {\n    node.end = end;\n    node.loc.end = endLoc;\n    if (this.options.ranges) node.range[1] = end;\n  }\n\n  resetStartLocationFromNode(node, locationNode) {\n    this.resetStartLocation(node, locationNode.start, locationNode.loc.start);\n  }\n\n}\n\nconst reservedTypes = new Set([\"_\", \"any\", \"bool\", \"boolean\", \"empty\", \"extends\", \"false\", \"interface\", \"mixed\", \"null\", \"number\", \"static\", \"string\", \"true\", \"typeof\", \"void\"]);\nconst FlowErrors = makeErrorTemplates({\n  AmbiguousConditionalArrow: \"Ambiguous expression: wrap the arrow functions in parentheses to disambiguate.\",\n  AmbiguousDeclareModuleKind: \"Found both `declare module.exports` and `declare export` in the same module. Modules can only have 1 since they are either an ES module or they are a CommonJS module.\",\n  AssignReservedType: \"Cannot overwrite reserved type %0.\",\n  DeclareClassElement: \"The `declare` modifier can only appear on class fields.\",\n  DeclareClassFieldInitializer: \"Initializers are not allowed in fields with the `declare` modifier.\",\n  DuplicateDeclareModuleExports: \"Duplicate `declare module.exports` statement.\",\n  EnumBooleanMemberNotInitialized: \"Boolean enum members need to be initialized. Use either `%0 = true,` or `%0 = false,` in enum `%1`.\",\n  EnumDuplicateMemberName: \"Enum member names need to be unique, but the name `%0` has already been used before in enum `%1`.\",\n  EnumInconsistentMemberValues: \"Enum `%0` has inconsistent member initializers. Either use no initializers, or consistently use literals (either booleans, numbers, or strings) for all member initializers.\",\n  EnumInvalidExplicitType: \"Enum type `%1` is not valid. Use one of `boolean`, `number`, `string`, or `symbol` in enum `%0`.\",\n  EnumInvalidExplicitTypeUnknownSupplied: \"Supplied enum type is not valid. Use one of `boolean`, `number`, `string`, or `symbol` in enum `%0`.\",\n  EnumInvalidMemberInitializerPrimaryType: \"Enum `%0` has type `%2`, so the initializer of `%1` needs to be a %2 literal.\",\n  EnumInvalidMemberInitializerSymbolType: \"Symbol enum members cannot be initialized. Use `%1,` in enum `%0`.\",\n  EnumInvalidMemberInitializerUnknownType: \"The enum member initializer for `%1` needs to be a literal (either a boolean, number, or string) in enum `%0`.\",\n  EnumInvalidMemberName: \"Enum member names cannot start with lowercase 'a' through 'z'. Instead of using `%0`, consider using `%1`, in enum `%2`.\",\n  EnumNumberMemberNotInitialized: \"Number enum members need to be initialized, e.g. `%1 = 1` in enum `%0`.\",\n  EnumStringMemberInconsistentlyInitailized: \"String enum members need to consistently either all use initializers, or use no initializers, in enum `%0`.\",\n  GetterMayNotHaveThisParam: \"A getter cannot have a `this` parameter.\",\n  ImportTypeShorthandOnlyInPureImport: \"The `type` and `typeof` keywords on named imports can only be used on regular `import` statements. It cannot be used with `import type` or `import typeof` statements.\",\n  InexactInsideExact: \"Explicit inexact syntax cannot appear inside an explicit exact object type.\",\n  InexactInsideNonObject: \"Explicit inexact syntax cannot appear in class or interface definitions.\",\n  InexactVariance: \"Explicit inexact syntax cannot have variance.\",\n  InvalidNonTypeImportInDeclareModule: \"Imports within a `declare module` body must always be `import type` or `import typeof`.\",\n  MissingTypeParamDefault: \"Type parameter declaration needs a default, since a preceding type parameter declaration has a default.\",\n  NestedDeclareModule: \"`declare module` cannot be used inside another `declare module`.\",\n  NestedFlowComment: \"Cannot have a flow comment inside another flow comment.\",\n  PatternIsOptional: \"A binding pattern parameter cannot be optional in an implementation signature.\",\n  SetterMayNotHaveThisParam: \"A setter cannot have a `this` parameter.\",\n  SpreadVariance: \"Spread properties cannot have variance.\",\n  ThisParamAnnotationRequired: \"A type annotation is required for the `this` parameter.\",\n  ThisParamBannedInConstructor: \"Constructors cannot have a `this` parameter; constructors don't bind `this` like other functions.\",\n  ThisParamMayNotBeOptional: \"The `this` parameter cannot be optional.\",\n  ThisParamMustBeFirst: \"The `this` parameter must be the first function parameter.\",\n  ThisParamNoDefault: \"The `this` parameter may not have a default value.\",\n  TypeBeforeInitializer: \"Type annotations must come before default assignments, e.g. instead of `age = 25: number` use `age: number = 25`.\",\n  TypeCastInPattern: \"The type cast expression is expected to be wrapped with parenthesis.\",\n  UnexpectedExplicitInexactInObject: \"Explicit inexact syntax must appear at the end of an inexact object.\",\n  UnexpectedReservedType: \"Unexpected reserved type %0.\",\n  UnexpectedReservedUnderscore: \"`_` is only allowed as a type argument to call or new.\",\n  UnexpectedSpaceBetweenModuloChecks: \"Spaces between `%` and `checks` are not allowed here.\",\n  UnexpectedSpreadType: \"Spread operator cannot appear in class or interface definitions.\",\n  UnexpectedSubtractionOperand: 'Unexpected token, expected \"number\" or \"bigint\".',\n  UnexpectedTokenAfterTypeParameter: \"Expected an arrow function after this type parameter declaration.\",\n  UnexpectedTypeParameterBeforeAsyncArrowFunction: \"Type parameters must come after the async keyword, e.g. instead of `<T> async () => {}`, use `async <T>() => {}`.\",\n  UnsupportedDeclareExportKind: \"`declare export %0` is not supported. Use `%1` instead.\",\n  UnsupportedStatementInDeclareModule: \"Only declares and type imports are allowed inside declare module.\",\n  UnterminatedFlowComment: \"Unterminated flow-comment.\"\n}, ErrorCodes.SyntaxError, \"flow\");\n\nfunction isEsModuleType(bodyElement) {\n  return bodyElement.type === \"DeclareExportAllDeclaration\" || bodyElement.type === \"DeclareExportDeclaration\" && (!bodyElement.declaration || bodyElement.declaration.type !== \"TypeAlias\" && bodyElement.declaration.type !== \"InterfaceDeclaration\");\n}\n\nfunction hasTypeImportKind(node) {\n  return node.importKind === \"type\" || node.importKind === \"typeof\";\n}\n\nfunction isMaybeDefaultImport(type) {\n  return tokenIsKeywordOrIdentifier(type) && type !== 91;\n}\n\nconst exportSuggestions = {\n  const: \"declare export var\",\n  let: \"declare export var\",\n  type: \"export type\",\n  interface: \"export interface\"\n};\n\nfunction partition(list, test) {\n  const list1 = [];\n  const list2 = [];\n\n  for (let i = 0; i < list.length; i++) {\n    (test(list[i], i, list) ? list1 : list2).push(list[i]);\n  }\n\n  return [list1, list2];\n}\n\nconst FLOW_PRAGMA_REGEX = /\\*?\\s*@((?:no)?flow)\\b/;\nvar flow = (superClass => class extends superClass {\n  constructor(...args) {\n    super(...args);\n    this.flowPragma = undefined;\n  }\n\n  getScopeHandler() {\n    return FlowScopeHandler;\n  }\n\n  shouldParseTypes() {\n    return this.getPluginOption(\"flow\", \"all\") || this.flowPragma === \"flow\";\n  }\n\n  shouldParseEnums() {\n    return !!this.getPluginOption(\"flow\", \"enums\");\n  }\n\n  finishToken(type, val) {\n    if (type !== 123 && type !== 13 && type !== 26) {\n      if (this.flowPragma === undefined) {\n        this.flowPragma = null;\n      }\n    }\n\n    return super.finishToken(type, val);\n  }\n\n  addComment(comment) {\n    if (this.flowPragma === undefined) {\n      const matches = FLOW_PRAGMA_REGEX.exec(comment.value);\n\n      if (!matches) ; else if (matches[1] === \"flow\") {\n        this.flowPragma = \"flow\";\n      } else if (matches[1] === \"noflow\") {\n        this.flowPragma = \"noflow\";\n      } else {\n        throw new Error(\"Unexpected flow pragma\");\n      }\n    }\n\n    return super.addComment(comment);\n  }\n\n  flowParseTypeInitialiser(tok) {\n    const oldInType = this.state.inType;\n    this.state.inType = true;\n    this.expect(tok || 14);\n    const type = this.flowParseType();\n    this.state.inType = oldInType;\n    return type;\n  }\n\n  flowParsePredicate() {\n    const node = this.startNode();\n    const moduloPos = this.state.start;\n    this.next();\n    this.expectContextual(101);\n\n    if (this.state.lastTokStart > moduloPos + 1) {\n      this.raise(moduloPos, FlowErrors.UnexpectedSpaceBetweenModuloChecks);\n    }\n\n    if (this.eat(10)) {\n      node.value = this.parseExpression();\n      this.expect(11);\n      return this.finishNode(node, \"DeclaredPredicate\");\n    } else {\n      return this.finishNode(node, \"InferredPredicate\");\n    }\n  }\n\n  flowParseTypeAndPredicateInitialiser() {\n    const oldInType = this.state.inType;\n    this.state.inType = true;\n    this.expect(14);\n    let type = null;\n    let predicate = null;\n\n    if (this.match(48)) {\n      this.state.inType = oldInType;\n      predicate = this.flowParsePredicate();\n    } else {\n      type = this.flowParseType();\n      this.state.inType = oldInType;\n\n      if (this.match(48)) {\n        predicate = this.flowParsePredicate();\n      }\n    }\n\n    return [type, predicate];\n  }\n\n  flowParseDeclareClass(node) {\n    this.next();\n    this.flowParseInterfaceish(node, true);\n    return this.finishNode(node, \"DeclareClass\");\n  }\n\n  flowParseDeclareFunction(node) {\n    this.next();\n    const id = node.id = this.parseIdentifier();\n    const typeNode = this.startNode();\n    const typeContainer = this.startNode();\n\n    if (this.match(43)) {\n      typeNode.typeParameters = this.flowParseTypeParameterDeclaration();\n    } else {\n      typeNode.typeParameters = null;\n    }\n\n    this.expect(10);\n    const tmp = this.flowParseFunctionTypeParams();\n    typeNode.params = tmp.params;\n    typeNode.rest = tmp.rest;\n    typeNode.this = tmp._this;\n    this.expect(11);\n    [typeNode.returnType, node.predicate] = this.flowParseTypeAndPredicateInitialiser();\n    typeContainer.typeAnnotation = this.finishNode(typeNode, \"FunctionTypeAnnotation\");\n    id.typeAnnotation = this.finishNode(typeContainer, \"TypeAnnotation\");\n    this.resetEndLocation(id);\n    this.semicolon();\n    this.scope.declareName(node.id.name, BIND_FLOW_DECLARE_FN, node.id.start);\n    return this.finishNode(node, \"DeclareFunction\");\n  }\n\n  flowParseDeclare(node, insideModule) {\n    if (this.match(74)) {\n      return this.flowParseDeclareClass(node);\n    } else if (this.match(62)) {\n      return this.flowParseDeclareFunction(node);\n    } else if (this.match(68)) {\n      return this.flowParseDeclareVariable(node);\n    } else if (this.eatContextual(117)) {\n      if (this.match(16)) {\n        return this.flowParseDeclareModuleExports(node);\n      } else {\n        if (insideModule) {\n          this.raise(this.state.lastTokStart, FlowErrors.NestedDeclareModule);\n        }\n\n        return this.flowParseDeclareModule(node);\n      }\n    } else if (this.isContextual(120)) {\n      return this.flowParseDeclareTypeAlias(node);\n    } else if (this.isContextual(121)) {\n      return this.flowParseDeclareOpaqueType(node);\n    } else if (this.isContextual(119)) {\n      return this.flowParseDeclareInterface(node);\n    } else if (this.match(76)) {\n      return this.flowParseDeclareExportDeclaration(node, insideModule);\n    } else {\n      throw this.unexpected();\n    }\n  }\n\n  flowParseDeclareVariable(node) {\n    this.next();\n    node.id = this.flowParseTypeAnnotatableIdentifier(true);\n    this.scope.declareName(node.id.name, BIND_VAR, node.id.start);\n    this.semicolon();\n    return this.finishNode(node, \"DeclareVariable\");\n  }\n\n  flowParseDeclareModule(node) {\n    this.scope.enter(SCOPE_OTHER);\n\n    if (this.match(123)) {\n      node.id = this.parseExprAtom();\n    } else {\n      node.id = this.parseIdentifier();\n    }\n\n    const bodyNode = node.body = this.startNode();\n    const body = bodyNode.body = [];\n    this.expect(5);\n\n    while (!this.match(8)) {\n      let bodyNode = this.startNode();\n\n      if (this.match(77)) {\n        this.next();\n\n        if (!this.isContextual(120) && !this.match(81)) {\n          this.raise(this.state.lastTokStart, FlowErrors.InvalidNonTypeImportInDeclareModule);\n        }\n\n        this.parseImport(bodyNode);\n      } else {\n        this.expectContextual(115, FlowErrors.UnsupportedStatementInDeclareModule);\n        bodyNode = this.flowParseDeclare(bodyNode, true);\n      }\n\n      body.push(bodyNode);\n    }\n\n    this.scope.exit();\n    this.expect(8);\n    this.finishNode(bodyNode, \"BlockStatement\");\n    let kind = null;\n    let hasModuleExport = false;\n    body.forEach(bodyElement => {\n      if (isEsModuleType(bodyElement)) {\n        if (kind === \"CommonJS\") {\n          this.raise(bodyElement.start, FlowErrors.AmbiguousDeclareModuleKind);\n        }\n\n        kind = \"ES\";\n      } else if (bodyElement.type === \"DeclareModuleExports\") {\n        if (hasModuleExport) {\n          this.raise(bodyElement.start, FlowErrors.DuplicateDeclareModuleExports);\n        }\n\n        if (kind === \"ES\") {\n          this.raise(bodyElement.start, FlowErrors.AmbiguousDeclareModuleKind);\n        }\n\n        kind = \"CommonJS\";\n        hasModuleExport = true;\n      }\n    });\n    node.kind = kind || \"CommonJS\";\n    return this.finishNode(node, \"DeclareModule\");\n  }\n\n  flowParseDeclareExportDeclaration(node, insideModule) {\n    this.expect(76);\n\n    if (this.eat(59)) {\n      if (this.match(62) || this.match(74)) {\n        node.declaration = this.flowParseDeclare(this.startNode());\n      } else {\n        node.declaration = this.flowParseType();\n        this.semicolon();\n      }\n\n      node.default = true;\n      return this.finishNode(node, \"DeclareExportDeclaration\");\n    } else {\n      if (this.match(69) || this.isLet() || (this.isContextual(120) || this.isContextual(119)) && !insideModule) {\n        const label = this.state.value;\n        const suggestion = exportSuggestions[label];\n        throw this.raise(this.state.start, FlowErrors.UnsupportedDeclareExportKind, label, suggestion);\n      }\n\n      if (this.match(68) || this.match(62) || this.match(74) || this.isContextual(121)) {\n        node.declaration = this.flowParseDeclare(this.startNode());\n        node.default = false;\n        return this.finishNode(node, \"DeclareExportDeclaration\");\n      } else if (this.match(49) || this.match(5) || this.isContextual(119) || this.isContextual(120) || this.isContextual(121)) {\n        node = this.parseExport(node);\n\n        if (node.type === \"ExportNamedDeclaration\") {\n          node.type = \"ExportDeclaration\";\n          node.default = false;\n          delete node.exportKind;\n        }\n\n        node.type = \"Declare\" + node.type;\n        return node;\n      }\n    }\n\n    throw this.unexpected();\n  }\n\n  flowParseDeclareModuleExports(node) {\n    this.next();\n    this.expectContextual(102);\n    node.typeAnnotation = this.flowParseTypeAnnotation();\n    this.semicolon();\n    return this.finishNode(node, \"DeclareModuleExports\");\n  }\n\n  flowParseDeclareTypeAlias(node) {\n    this.next();\n    this.flowParseTypeAlias(node);\n    node.type = \"DeclareTypeAlias\";\n    return node;\n  }\n\n  flowParseDeclareOpaqueType(node) {\n    this.next();\n    this.flowParseOpaqueType(node, true);\n    node.type = \"DeclareOpaqueType\";\n    return node;\n  }\n\n  flowParseDeclareInterface(node) {\n    this.next();\n    this.flowParseInterfaceish(node);\n    return this.finishNode(node, \"DeclareInterface\");\n  }\n\n  flowParseInterfaceish(node, isClass = false) {\n    node.id = this.flowParseRestrictedIdentifier(!isClass, true);\n    this.scope.declareName(node.id.name, isClass ? BIND_FUNCTION : BIND_LEXICAL, node.id.start);\n\n    if (this.match(43)) {\n      node.typeParameters = this.flowParseTypeParameterDeclaration();\n    } else {\n      node.typeParameters = null;\n    }\n\n    node.extends = [];\n    node.implements = [];\n    node.mixins = [];\n\n    if (this.eat(75)) {\n      do {\n        node.extends.push(this.flowParseInterfaceExtends());\n      } while (!isClass && this.eat(12));\n    }\n\n    if (this.isContextual(108)) {\n      this.next();\n\n      do {\n        node.mixins.push(this.flowParseInterfaceExtends());\n      } while (this.eat(12));\n    }\n\n    if (this.isContextual(104)) {\n      this.next();\n\n      do {\n        node.implements.push(this.flowParseInterfaceExtends());\n      } while (this.eat(12));\n    }\n\n    node.body = this.flowParseObjectType({\n      allowStatic: isClass,\n      allowExact: false,\n      allowSpread: false,\n      allowProto: isClass,\n      allowInexact: false\n    });\n  }\n\n  flowParseInterfaceExtends() {\n    const node = this.startNode();\n    node.id = this.flowParseQualifiedTypeIdentifier();\n\n    if (this.match(43)) {\n      node.typeParameters = this.flowParseTypeParameterInstantiation();\n    } else {\n      node.typeParameters = null;\n    }\n\n    return this.finishNode(node, \"InterfaceExtends\");\n  }\n\n  flowParseInterface(node) {\n    this.flowParseInterfaceish(node);\n    return this.finishNode(node, \"InterfaceDeclaration\");\n  }\n\n  checkNotUnderscore(word) {\n    if (word === \"_\") {\n      this.raise(this.state.start, FlowErrors.UnexpectedReservedUnderscore);\n    }\n  }\n\n  checkReservedType(word, startLoc, declaration) {\n    if (!reservedTypes.has(word)) return;\n    this.raise(startLoc, declaration ? FlowErrors.AssignReservedType : FlowErrors.UnexpectedReservedType, word);\n  }\n\n  flowParseRestrictedIdentifier(liberal, declaration) {\n    this.checkReservedType(this.state.value, this.state.start, declaration);\n    return this.parseIdentifier(liberal);\n  }\n\n  flowParseTypeAlias(node) {\n    node.id = this.flowParseRestrictedIdentifier(false, true);\n    this.scope.declareName(node.id.name, BIND_LEXICAL, node.id.start);\n\n    if (this.match(43)) {\n      node.typeParameters = this.flowParseTypeParameterDeclaration();\n    } else {\n      node.typeParameters = null;\n    }\n\n    node.right = this.flowParseTypeInitialiser(27);\n    this.semicolon();\n    return this.finishNode(node, \"TypeAlias\");\n  }\n\n  flowParseOpaqueType(node, declare) {\n    this.expectContextual(120);\n    node.id = this.flowParseRestrictedIdentifier(true, true);\n    this.scope.declareName(node.id.name, BIND_LEXICAL, node.id.start);\n\n    if (this.match(43)) {\n      node.typeParameters = this.flowParseTypeParameterDeclaration();\n    } else {\n      node.typeParameters = null;\n    }\n\n    node.supertype = null;\n\n    if (this.match(14)) {\n      node.supertype = this.flowParseTypeInitialiser(14);\n    }\n\n    node.impltype = null;\n\n    if (!declare) {\n      node.impltype = this.flowParseTypeInitialiser(27);\n    }\n\n    this.semicolon();\n    return this.finishNode(node, \"OpaqueType\");\n  }\n\n  flowParseTypeParameter(requireDefault = false) {\n    const nodeStart = this.state.start;\n    const node = this.startNode();\n    const variance = this.flowParseVariance();\n    const ident = this.flowParseTypeAnnotatableIdentifier();\n    node.name = ident.name;\n    node.variance = variance;\n    node.bound = ident.typeAnnotation;\n\n    if (this.match(27)) {\n      this.eat(27);\n      node.default = this.flowParseType();\n    } else {\n      if (requireDefault) {\n        this.raise(nodeStart, FlowErrors.MissingTypeParamDefault);\n      }\n    }\n\n    return this.finishNode(node, \"TypeParameter\");\n  }\n\n  flowParseTypeParameterDeclaration() {\n    const oldInType = this.state.inType;\n    const node = this.startNode();\n    node.params = [];\n    this.state.inType = true;\n\n    if (this.match(43) || this.match(132)) {\n      this.next();\n    } else {\n      this.unexpected();\n    }\n\n    let defaultRequired = false;\n\n    do {\n      const typeParameter = this.flowParseTypeParameter(defaultRequired);\n      node.params.push(typeParameter);\n\n      if (typeParameter.default) {\n        defaultRequired = true;\n      }\n\n      if (!this.match(44)) {\n        this.expect(12);\n      }\n    } while (!this.match(44));\n\n    this.expect(44);\n    this.state.inType = oldInType;\n    return this.finishNode(node, \"TypeParameterDeclaration\");\n  }\n\n  flowParseTypeParameterInstantiation() {\n    const node = this.startNode();\n    const oldInType = this.state.inType;\n    node.params = [];\n    this.state.inType = true;\n    this.expect(43);\n    const oldNoAnonFunctionType = this.state.noAnonFunctionType;\n    this.state.noAnonFunctionType = false;\n\n    while (!this.match(44)) {\n      node.params.push(this.flowParseType());\n\n      if (!this.match(44)) {\n        this.expect(12);\n      }\n    }\n\n    this.state.noAnonFunctionType = oldNoAnonFunctionType;\n    this.expect(44);\n    this.state.inType = oldInType;\n    return this.finishNode(node, \"TypeParameterInstantiation\");\n  }\n\n  flowParseTypeParameterInstantiationCallOrNew() {\n    const node = this.startNode();\n    const oldInType = this.state.inType;\n    node.params = [];\n    this.state.inType = true;\n    this.expect(43);\n\n    while (!this.match(44)) {\n      node.params.push(this.flowParseTypeOrImplicitInstantiation());\n\n      if (!this.match(44)) {\n        this.expect(12);\n      }\n    }\n\n    this.expect(44);\n    this.state.inType = oldInType;\n    return this.finishNode(node, \"TypeParameterInstantiation\");\n  }\n\n  flowParseInterfaceType() {\n    const node = this.startNode();\n    this.expectContextual(119);\n    node.extends = [];\n\n    if (this.eat(75)) {\n      do {\n        node.extends.push(this.flowParseInterfaceExtends());\n      } while (this.eat(12));\n    }\n\n    node.body = this.flowParseObjectType({\n      allowStatic: false,\n      allowExact: false,\n      allowSpread: false,\n      allowProto: false,\n      allowInexact: false\n    });\n    return this.finishNode(node, \"InterfaceTypeAnnotation\");\n  }\n\n  flowParseObjectPropertyKey() {\n    return this.match(124) || this.match(123) ? this.parseExprAtom() : this.parseIdentifier(true);\n  }\n\n  flowParseObjectTypeIndexer(node, isStatic, variance) {\n    node.static = isStatic;\n\n    if (this.lookahead().type === 14) {\n      node.id = this.flowParseObjectPropertyKey();\n      node.key = this.flowParseTypeInitialiser();\n    } else {\n      node.id = null;\n      node.key = this.flowParseType();\n    }\n\n    this.expect(3);\n    node.value = this.flowParseTypeInitialiser();\n    node.variance = variance;\n    return this.finishNode(node, \"ObjectTypeIndexer\");\n  }\n\n  flowParseObjectTypeInternalSlot(node, isStatic) {\n    node.static = isStatic;\n    node.id = this.flowParseObjectPropertyKey();\n    this.expect(3);\n    this.expect(3);\n\n    if (this.match(43) || this.match(10)) {\n      node.method = true;\n      node.optional = false;\n      node.value = this.flowParseObjectTypeMethodish(this.startNodeAt(node.start, node.loc.start));\n    } else {\n      node.method = false;\n\n      if (this.eat(17)) {\n        node.optional = true;\n      }\n\n      node.value = this.flowParseTypeInitialiser();\n    }\n\n    return this.finishNode(node, \"ObjectTypeInternalSlot\");\n  }\n\n  flowParseObjectTypeMethodish(node) {\n    node.params = [];\n    node.rest = null;\n    node.typeParameters = null;\n    node.this = null;\n\n    if (this.match(43)) {\n      node.typeParameters = this.flowParseTypeParameterDeclaration();\n    }\n\n    this.expect(10);\n\n    if (this.match(72)) {\n      node.this = this.flowParseFunctionTypeParam(true);\n      node.this.name = null;\n\n      if (!this.match(11)) {\n        this.expect(12);\n      }\n    }\n\n    while (!this.match(11) && !this.match(21)) {\n      node.params.push(this.flowParseFunctionTypeParam(false));\n\n      if (!this.match(11)) {\n        this.expect(12);\n      }\n    }\n\n    if (this.eat(21)) {\n      node.rest = this.flowParseFunctionTypeParam(false);\n    }\n\n    this.expect(11);\n    node.returnType = this.flowParseTypeInitialiser();\n    return this.finishNode(node, \"FunctionTypeAnnotation\");\n  }\n\n  flowParseObjectTypeCallProperty(node, isStatic) {\n    const valueNode = this.startNode();\n    node.static = isStatic;\n    node.value = this.flowParseObjectTypeMethodish(valueNode);\n    return this.finishNode(node, \"ObjectTypeCallProperty\");\n  }\n\n  flowParseObjectType({\n    allowStatic,\n    allowExact,\n    allowSpread,\n    allowProto,\n    allowInexact\n  }) {\n    const oldInType = this.state.inType;\n    this.state.inType = true;\n    const nodeStart = this.startNode();\n    nodeStart.callProperties = [];\n    nodeStart.properties = [];\n    nodeStart.indexers = [];\n    nodeStart.internalSlots = [];\n    let endDelim;\n    let exact;\n    let inexact = false;\n\n    if (allowExact && this.match(6)) {\n      this.expect(6);\n      endDelim = 9;\n      exact = true;\n    } else {\n      this.expect(5);\n      endDelim = 8;\n      exact = false;\n    }\n\n    nodeStart.exact = exact;\n\n    while (!this.match(endDelim)) {\n      let isStatic = false;\n      let protoStart = null;\n      let inexactStart = null;\n      const node = this.startNode();\n\n      if (allowProto && this.isContextual(109)) {\n        const lookahead = this.lookahead();\n\n        if (lookahead.type !== 14 && lookahead.type !== 17) {\n          this.next();\n          protoStart = this.state.start;\n          allowStatic = false;\n        }\n      }\n\n      if (allowStatic && this.isContextual(98)) {\n        const lookahead = this.lookahead();\n\n        if (lookahead.type !== 14 && lookahead.type !== 17) {\n          this.next();\n          isStatic = true;\n        }\n      }\n\n      const variance = this.flowParseVariance();\n\n      if (this.eat(0)) {\n        if (protoStart != null) {\n          this.unexpected(protoStart);\n        }\n\n        if (this.eat(0)) {\n          if (variance) {\n            this.unexpected(variance.start);\n          }\n\n          nodeStart.internalSlots.push(this.flowParseObjectTypeInternalSlot(node, isStatic));\n        } else {\n          nodeStart.indexers.push(this.flowParseObjectTypeIndexer(node, isStatic, variance));\n        }\n      } else if (this.match(10) || this.match(43)) {\n        if (protoStart != null) {\n          this.unexpected(protoStart);\n        }\n\n        if (variance) {\n          this.unexpected(variance.start);\n        }\n\n        nodeStart.callProperties.push(this.flowParseObjectTypeCallProperty(node, isStatic));\n      } else {\n        let kind = \"init\";\n\n        if (this.isContextual(92) || this.isContextual(97)) {\n          const lookahead = this.lookahead();\n\n          if (tokenIsLiteralPropertyName(lookahead.type)) {\n            kind = this.state.value;\n            this.next();\n          }\n        }\n\n        const propOrInexact = this.flowParseObjectTypeProperty(node, isStatic, protoStart, variance, kind, allowSpread, allowInexact != null ? allowInexact : !exact);\n\n        if (propOrInexact === null) {\n          inexact = true;\n          inexactStart = this.state.lastTokStart;\n        } else {\n          nodeStart.properties.push(propOrInexact);\n        }\n      }\n\n      this.flowObjectTypeSemicolon();\n\n      if (inexactStart && !this.match(8) && !this.match(9)) {\n        this.raise(inexactStart, FlowErrors.UnexpectedExplicitInexactInObject);\n      }\n    }\n\n    this.expect(endDelim);\n\n    if (allowSpread) {\n      nodeStart.inexact = inexact;\n    }\n\n    const out = this.finishNode(nodeStart, \"ObjectTypeAnnotation\");\n    this.state.inType = oldInType;\n    return out;\n  }\n\n  flowParseObjectTypeProperty(node, isStatic, protoStart, variance, kind, allowSpread, allowInexact) {\n    if (this.eat(21)) {\n      const isInexactToken = this.match(12) || this.match(13) || this.match(8) || this.match(9);\n\n      if (isInexactToken) {\n        if (!allowSpread) {\n          this.raise(this.state.lastTokStart, FlowErrors.InexactInsideNonObject);\n        } else if (!allowInexact) {\n          this.raise(this.state.lastTokStart, FlowErrors.InexactInsideExact);\n        }\n\n        if (variance) {\n          this.raise(variance.start, FlowErrors.InexactVariance);\n        }\n\n        return null;\n      }\n\n      if (!allowSpread) {\n        this.raise(this.state.lastTokStart, FlowErrors.UnexpectedSpreadType);\n      }\n\n      if (protoStart != null) {\n        this.unexpected(protoStart);\n      }\n\n      if (variance) {\n        this.raise(variance.start, FlowErrors.SpreadVariance);\n      }\n\n      node.argument = this.flowParseType();\n      return this.finishNode(node, \"ObjectTypeSpreadProperty\");\n    } else {\n      node.key = this.flowParseObjectPropertyKey();\n      node.static = isStatic;\n      node.proto = protoStart != null;\n      node.kind = kind;\n      let optional = false;\n\n      if (this.match(43) || this.match(10)) {\n        node.method = true;\n\n        if (protoStart != null) {\n          this.unexpected(protoStart);\n        }\n\n        if (variance) {\n          this.unexpected(variance.start);\n        }\n\n        node.value = this.flowParseObjectTypeMethodish(this.startNodeAt(node.start, node.loc.start));\n\n        if (kind === \"get\" || kind === \"set\") {\n          this.flowCheckGetterSetterParams(node);\n        }\n\n        if (!allowSpread && node.key.name === \"constructor\" && node.value.this) {\n          this.raise(node.value.this.start, FlowErrors.ThisParamBannedInConstructor);\n        }\n      } else {\n        if (kind !== \"init\") this.unexpected();\n        node.method = false;\n\n        if (this.eat(17)) {\n          optional = true;\n        }\n\n        node.value = this.flowParseTypeInitialiser();\n        node.variance = variance;\n      }\n\n      node.optional = optional;\n      return this.finishNode(node, \"ObjectTypeProperty\");\n    }\n  }\n\n  flowCheckGetterSetterParams(property) {\n    const paramCount = property.kind === \"get\" ? 0 : 1;\n    const start = property.start;\n    const length = property.value.params.length + (property.value.rest ? 1 : 0);\n\n    if (property.value.this) {\n      this.raise(property.value.this.start, property.kind === \"get\" ? FlowErrors.GetterMayNotHaveThisParam : FlowErrors.SetterMayNotHaveThisParam);\n    }\n\n    if (length !== paramCount) {\n      if (property.kind === \"get\") {\n        this.raise(start, ErrorMessages.BadGetterArity);\n      } else {\n        this.raise(start, ErrorMessages.BadSetterArity);\n      }\n    }\n\n    if (property.kind === \"set\" && property.value.rest) {\n      this.raise(start, ErrorMessages.BadSetterRestParameter);\n    }\n  }\n\n  flowObjectTypeSemicolon() {\n    if (!this.eat(13) && !this.eat(12) && !this.match(8) && !this.match(9)) {\n      this.unexpected();\n    }\n  }\n\n  flowParseQualifiedTypeIdentifier(startPos, startLoc, id) {\n    startPos = startPos || this.state.start;\n    startLoc = startLoc || this.state.startLoc;\n    let node = id || this.flowParseRestrictedIdentifier(true);\n\n    while (this.eat(16)) {\n      const node2 = this.startNodeAt(startPos, startLoc);\n      node2.qualification = node;\n      node2.id = this.flowParseRestrictedIdentifier(true);\n      node = this.finishNode(node2, \"QualifiedTypeIdentifier\");\n    }\n\n    return node;\n  }\n\n  flowParseGenericType(startPos, startLoc, id) {\n    const node = this.startNodeAt(startPos, startLoc);\n    node.typeParameters = null;\n    node.id = this.flowParseQualifiedTypeIdentifier(startPos, startLoc, id);\n\n    if (this.match(43)) {\n      node.typeParameters = this.flowParseTypeParameterInstantiation();\n    }\n\n    return this.finishNode(node, \"GenericTypeAnnotation\");\n  }\n\n  flowParseTypeofType() {\n    const node = this.startNode();\n    this.expect(81);\n    node.argument = this.flowParsePrimaryType();\n    return this.finishNode(node, \"TypeofTypeAnnotation\");\n  }\n\n  flowParseTupleType() {\n    const node = this.startNode();\n    node.types = [];\n    this.expect(0);\n\n    while (this.state.pos < this.length && !this.match(3)) {\n      node.types.push(this.flowParseType());\n      if (this.match(3)) break;\n      this.expect(12);\n    }\n\n    this.expect(3);\n    return this.finishNode(node, \"TupleTypeAnnotation\");\n  }\n\n  flowParseFunctionTypeParam(first) {\n    let name = null;\n    let optional = false;\n    let typeAnnotation = null;\n    const node = this.startNode();\n    const lh = this.lookahead();\n    const isThis = this.state.type === 72;\n\n    if (lh.type === 14 || lh.type === 17) {\n      if (isThis && !first) {\n        this.raise(node.start, FlowErrors.ThisParamMustBeFirst);\n      }\n\n      name = this.parseIdentifier(isThis);\n\n      if (this.eat(17)) {\n        optional = true;\n\n        if (isThis) {\n          this.raise(node.start, FlowErrors.ThisParamMayNotBeOptional);\n        }\n      }\n\n      typeAnnotation = this.flowParseTypeInitialiser();\n    } else {\n      typeAnnotation = this.flowParseType();\n    }\n\n    node.name = name;\n    node.optional = optional;\n    node.typeAnnotation = typeAnnotation;\n    return this.finishNode(node, \"FunctionTypeParam\");\n  }\n\n  reinterpretTypeAsFunctionTypeParam(type) {\n    const node = this.startNodeAt(type.start, type.loc.start);\n    node.name = null;\n    node.optional = false;\n    node.typeAnnotation = type;\n    return this.finishNode(node, \"FunctionTypeParam\");\n  }\n\n  flowParseFunctionTypeParams(params = []) {\n    let rest = null;\n    let _this = null;\n\n    if (this.match(72)) {\n      _this = this.flowParseFunctionTypeParam(true);\n      _this.name = null;\n\n      if (!this.match(11)) {\n        this.expect(12);\n      }\n    }\n\n    while (!this.match(11) && !this.match(21)) {\n      params.push(this.flowParseFunctionTypeParam(false));\n\n      if (!this.match(11)) {\n        this.expect(12);\n      }\n    }\n\n    if (this.eat(21)) {\n      rest = this.flowParseFunctionTypeParam(false);\n    }\n\n    return {\n      params,\n      rest,\n      _this\n    };\n  }\n\n  flowIdentToTypeAnnotation(startPos, startLoc, node, id) {\n    switch (id.name) {\n      case \"any\":\n        return this.finishNode(node, \"AnyTypeAnnotation\");\n\n      case \"bool\":\n      case \"boolean\":\n        return this.finishNode(node, \"BooleanTypeAnnotation\");\n\n      case \"mixed\":\n        return this.finishNode(node, \"MixedTypeAnnotation\");\n\n      case \"empty\":\n        return this.finishNode(node, \"EmptyTypeAnnotation\");\n\n      case \"number\":\n        return this.finishNode(node, \"NumberTypeAnnotation\");\n\n      case \"string\":\n        return this.finishNode(node, \"StringTypeAnnotation\");\n\n      case \"symbol\":\n        return this.finishNode(node, \"SymbolTypeAnnotation\");\n\n      default:\n        this.checkNotUnderscore(id.name);\n        return this.flowParseGenericType(startPos, startLoc, id);\n    }\n  }\n\n  flowParsePrimaryType() {\n    const startPos = this.state.start;\n    const startLoc = this.state.startLoc;\n    const node = this.startNode();\n    let tmp;\n    let type;\n    let isGroupedType = false;\n    const oldNoAnonFunctionType = this.state.noAnonFunctionType;\n\n    switch (this.state.type) {\n      case 5:\n        return this.flowParseObjectType({\n          allowStatic: false,\n          allowExact: false,\n          allowSpread: true,\n          allowProto: false,\n          allowInexact: true\n        });\n\n      case 6:\n        return this.flowParseObjectType({\n          allowStatic: false,\n          allowExact: true,\n          allowSpread: true,\n          allowProto: false,\n          allowInexact: false\n        });\n\n      case 0:\n        this.state.noAnonFunctionType = false;\n        type = this.flowParseTupleType();\n        this.state.noAnonFunctionType = oldNoAnonFunctionType;\n        return type;\n\n      case 43:\n        node.typeParameters = this.flowParseTypeParameterDeclaration();\n        this.expect(10);\n        tmp = this.flowParseFunctionTypeParams();\n        node.params = tmp.params;\n        node.rest = tmp.rest;\n        node.this = tmp._this;\n        this.expect(11);\n        this.expect(19);\n        node.returnType = this.flowParseType();\n        return this.finishNode(node, \"FunctionTypeAnnotation\");\n\n      case 10:\n        this.next();\n\n        if (!this.match(11) && !this.match(21)) {\n          if (tokenIsIdentifier(this.state.type) || this.match(72)) {\n            const token = this.lookahead().type;\n            isGroupedType = token !== 17 && token !== 14;\n          } else {\n            isGroupedType = true;\n          }\n        }\n\n        if (isGroupedType) {\n          this.state.noAnonFunctionType = false;\n          type = this.flowParseType();\n          this.state.noAnonFunctionType = oldNoAnonFunctionType;\n\n          if (this.state.noAnonFunctionType || !(this.match(12) || this.match(11) && this.lookahead().type === 19)) {\n            this.expect(11);\n            return type;\n          } else {\n            this.eat(12);\n          }\n        }\n\n        if (type) {\n          tmp = this.flowParseFunctionTypeParams([this.reinterpretTypeAsFunctionTypeParam(type)]);\n        } else {\n          tmp = this.flowParseFunctionTypeParams();\n        }\n\n        node.params = tmp.params;\n        node.rest = tmp.rest;\n        node.this = tmp._this;\n        this.expect(11);\n        this.expect(19);\n        node.returnType = this.flowParseType();\n        node.typeParameters = null;\n        return this.finishNode(node, \"FunctionTypeAnnotation\");\n\n      case 123:\n        return this.parseLiteral(this.state.value, \"StringLiteralTypeAnnotation\");\n\n      case 79:\n      case 80:\n        node.value = this.match(79);\n        this.next();\n        return this.finishNode(node, \"BooleanLiteralTypeAnnotation\");\n\n      case 47:\n        if (this.state.value === \"-\") {\n          this.next();\n\n          if (this.match(124)) {\n            return this.parseLiteralAtNode(-this.state.value, \"NumberLiteralTypeAnnotation\", node);\n          }\n\n          if (this.match(125)) {\n            return this.parseLiteralAtNode(-this.state.value, \"BigIntLiteralTypeAnnotation\", node);\n          }\n\n          throw this.raise(this.state.start, FlowErrors.UnexpectedSubtractionOperand);\n        }\n\n        throw this.unexpected();\n\n      case 124:\n        return this.parseLiteral(this.state.value, \"NumberLiteralTypeAnnotation\");\n\n      case 125:\n        return this.parseLiteral(this.state.value, \"BigIntLiteralTypeAnnotation\");\n\n      case 82:\n        this.next();\n        return this.finishNode(node, \"VoidTypeAnnotation\");\n\n      case 78:\n        this.next();\n        return this.finishNode(node, \"NullLiteralTypeAnnotation\");\n\n      case 72:\n        this.next();\n        return this.finishNode(node, \"ThisTypeAnnotation\");\n\n      case 49:\n        this.next();\n        return this.finishNode(node, \"ExistsTypeAnnotation\");\n\n      case 81:\n        return this.flowParseTypeofType();\n\n      default:\n        if (tokenIsKeyword(this.state.type)) {\n          const label = tokenLabelName(this.state.type);\n          this.next();\n          return super.createIdentifier(node, label);\n        } else if (tokenIsIdentifier(this.state.type)) {\n          if (this.isContextual(119)) {\n            return this.flowParseInterfaceType();\n          }\n\n          return this.flowIdentToTypeAnnotation(startPos, startLoc, node, this.parseIdentifier());\n        }\n\n    }\n\n    throw this.unexpected();\n  }\n\n  flowParsePostfixType() {\n    const startPos = this.state.start;\n    const startLoc = this.state.startLoc;\n    let type = this.flowParsePrimaryType();\n    let seenOptionalIndexedAccess = false;\n\n    while ((this.match(0) || this.match(18)) && !this.canInsertSemicolon()) {\n      const node = this.startNodeAt(startPos, startLoc);\n      const optional = this.eat(18);\n      seenOptionalIndexedAccess = seenOptionalIndexedAccess || optional;\n      this.expect(0);\n\n      if (!optional && this.match(3)) {\n        node.elementType = type;\n        this.next();\n        type = this.finishNode(node, \"ArrayTypeAnnotation\");\n      } else {\n        node.objectType = type;\n        node.indexType = this.flowParseType();\n        this.expect(3);\n\n        if (seenOptionalIndexedAccess) {\n          node.optional = optional;\n          type = this.finishNode(node, \"OptionalIndexedAccessType\");\n        } else {\n          type = this.finishNode(node, \"IndexedAccessType\");\n        }\n      }\n    }\n\n    return type;\n  }\n\n  flowParsePrefixType() {\n    const node = this.startNode();\n\n    if (this.eat(17)) {\n      node.typeAnnotation = this.flowParsePrefixType();\n      return this.finishNode(node, \"NullableTypeAnnotation\");\n    } else {\n      return this.flowParsePostfixType();\n    }\n  }\n\n  flowParseAnonFunctionWithoutParens() {\n    const param = this.flowParsePrefixType();\n\n    if (!this.state.noAnonFunctionType && this.eat(19)) {\n      const node = this.startNodeAt(param.start, param.loc.start);\n      node.params = [this.reinterpretTypeAsFunctionTypeParam(param)];\n      node.rest = null;\n      node.this = null;\n      node.returnType = this.flowParseType();\n      node.typeParameters = null;\n      return this.finishNode(node, \"FunctionTypeAnnotation\");\n    }\n\n    return param;\n  }\n\n  flowParseIntersectionType() {\n    const node = this.startNode();\n    this.eat(41);\n    const type = this.flowParseAnonFunctionWithoutParens();\n    node.types = [type];\n\n    while (this.eat(41)) {\n      node.types.push(this.flowParseAnonFunctionWithoutParens());\n    }\n\n    return node.types.length === 1 ? type : this.finishNode(node, \"IntersectionTypeAnnotation\");\n  }\n\n  flowParseUnionType() {\n    const node = this.startNode();\n    this.eat(39);\n    const type = this.flowParseIntersectionType();\n    node.types = [type];\n\n    while (this.eat(39)) {\n      node.types.push(this.flowParseIntersectionType());\n    }\n\n    return node.types.length === 1 ? type : this.finishNode(node, \"UnionTypeAnnotation\");\n  }\n\n  flowParseType() {\n    const oldInType = this.state.inType;\n    this.state.inType = true;\n    const type = this.flowParseUnionType();\n    this.state.inType = oldInType;\n    return type;\n  }\n\n  flowParseTypeOrImplicitInstantiation() {\n    if (this.state.type === 122 && this.state.value === \"_\") {\n      const startPos = this.state.start;\n      const startLoc = this.state.startLoc;\n      const node = this.parseIdentifier();\n      return this.flowParseGenericType(startPos, startLoc, node);\n    } else {\n      return this.flowParseType();\n    }\n  }\n\n  flowParseTypeAnnotation() {\n    const node = this.startNode();\n    node.typeAnnotation = this.flowParseTypeInitialiser();\n    return this.finishNode(node, \"TypeAnnotation\");\n  }\n\n  flowParseTypeAnnotatableIdentifier(allowPrimitiveOverride) {\n    const ident = allowPrimitiveOverride ? this.parseIdentifier() : this.flowParseRestrictedIdentifier();\n\n    if (this.match(14)) {\n      ident.typeAnnotation = this.flowParseTypeAnnotation();\n      this.resetEndLocation(ident);\n    }\n\n    return ident;\n  }\n\n  typeCastToParameter(node) {\n    node.expression.typeAnnotation = node.typeAnnotation;\n    this.resetEndLocation(node.expression, node.typeAnnotation.end, node.typeAnnotation.loc.end);\n    return node.expression;\n  }\n\n  flowParseVariance() {\n    let variance = null;\n\n    if (this.match(47)) {\n      variance = this.startNode();\n\n      if (this.state.value === \"+\") {\n        variance.kind = \"plus\";\n      } else {\n        variance.kind = \"minus\";\n      }\n\n      this.next();\n      this.finishNode(variance, \"Variance\");\n    }\n\n    return variance;\n  }\n\n  parseFunctionBody(node, allowExpressionBody, isMethod = false) {\n    if (allowExpressionBody) {\n      return this.forwardNoArrowParamsConversionAt(node, () => super.parseFunctionBody(node, true, isMethod));\n    }\n\n    return super.parseFunctionBody(node, false, isMethod);\n  }\n\n  parseFunctionBodyAndFinish(node, type, isMethod = false) {\n    if (this.match(14)) {\n      const typeNode = this.startNode();\n      [typeNode.typeAnnotation, node.predicate] = this.flowParseTypeAndPredicateInitialiser();\n      node.returnType = typeNode.typeAnnotation ? this.finishNode(typeNode, \"TypeAnnotation\") : null;\n    }\n\n    super.parseFunctionBodyAndFinish(node, type, isMethod);\n  }\n\n  parseStatement(context, topLevel) {\n    if (this.state.strict && this.isContextual(119)) {\n      const lookahead = this.lookahead();\n\n      if (tokenIsKeywordOrIdentifier(lookahead.type)) {\n        const node = this.startNode();\n        this.next();\n        return this.flowParseInterface(node);\n      }\n    } else if (this.shouldParseEnums() && this.isContextual(116)) {\n      const node = this.startNode();\n      this.next();\n      return this.flowParseEnumDeclaration(node);\n    }\n\n    const stmt = super.parseStatement(context, topLevel);\n\n    if (this.flowPragma === undefined && !this.isValidDirective(stmt)) {\n      this.flowPragma = null;\n    }\n\n    return stmt;\n  }\n\n  parseExpressionStatement(node, expr) {\n    if (expr.type === \"Identifier\") {\n      if (expr.name === \"declare\") {\n        if (this.match(74) || tokenIsIdentifier(this.state.type) || this.match(62) || this.match(68) || this.match(76)) {\n          return this.flowParseDeclare(node);\n        }\n      } else if (tokenIsIdentifier(this.state.type)) {\n        if (expr.name === \"interface\") {\n          return this.flowParseInterface(node);\n        } else if (expr.name === \"type\") {\n          return this.flowParseTypeAlias(node);\n        } else if (expr.name === \"opaque\") {\n          return this.flowParseOpaqueType(node, false);\n        }\n      }\n    }\n\n    return super.parseExpressionStatement(node, expr);\n  }\n\n  shouldParseExportDeclaration() {\n    const {\n      type\n    } = this.state;\n\n    if (tokenIsFlowInterfaceOrTypeOrOpaque(type) || this.shouldParseEnums() && type === 116) {\n      return !this.state.containsEsc;\n    }\n\n    return super.shouldParseExportDeclaration();\n  }\n\n  isExportDefaultSpecifier() {\n    const {\n      type\n    } = this.state;\n\n    if (tokenIsFlowInterfaceOrTypeOrOpaque(type) || this.shouldParseEnums() && type === 116) {\n      return this.state.containsEsc;\n    }\n\n    return super.isExportDefaultSpecifier();\n  }\n\n  parseExportDefaultExpression() {\n    if (this.shouldParseEnums() && this.isContextual(116)) {\n      const node = this.startNode();\n      this.next();\n      return this.flowParseEnumDeclaration(node);\n    }\n\n    return super.parseExportDefaultExpression();\n  }\n\n  parseConditional(expr, startPos, startLoc, refExpressionErrors) {\n    if (!this.match(17)) return expr;\n\n    if (this.state.maybeInArrowParameters) {\n      const nextCh = this.lookaheadCharCode();\n\n      if (nextCh === 44 || nextCh === 61 || nextCh === 58 || nextCh === 41) {\n        this.setOptionalParametersError(refExpressionErrors);\n        return expr;\n      }\n    }\n\n    this.expect(17);\n    const state = this.state.clone();\n    const originalNoArrowAt = this.state.noArrowAt;\n    const node = this.startNodeAt(startPos, startLoc);\n    let {\n      consequent,\n      failed\n    } = this.tryParseConditionalConsequent();\n    let [valid, invalid] = this.getArrowLikeExpressions(consequent);\n\n    if (failed || invalid.length > 0) {\n      const noArrowAt = [...originalNoArrowAt];\n\n      if (invalid.length > 0) {\n        this.state = state;\n        this.state.noArrowAt = noArrowAt;\n\n        for (let i = 0; i < invalid.length; i++) {\n          noArrowAt.push(invalid[i].start);\n        }\n\n        ({\n          consequent,\n          failed\n        } = this.tryParseConditionalConsequent());\n        [valid, invalid] = this.getArrowLikeExpressions(consequent);\n      }\n\n      if (failed && valid.length > 1) {\n        this.raise(state.start, FlowErrors.AmbiguousConditionalArrow);\n      }\n\n      if (failed && valid.length === 1) {\n        this.state = state;\n        noArrowAt.push(valid[0].start);\n        this.state.noArrowAt = noArrowAt;\n        ({\n          consequent,\n          failed\n        } = this.tryParseConditionalConsequent());\n      }\n    }\n\n    this.getArrowLikeExpressions(consequent, true);\n    this.state.noArrowAt = originalNoArrowAt;\n    this.expect(14);\n    node.test = expr;\n    node.consequent = consequent;\n    node.alternate = this.forwardNoArrowParamsConversionAt(node, () => this.parseMaybeAssign(undefined, undefined));\n    return this.finishNode(node, \"ConditionalExpression\");\n  }\n\n  tryParseConditionalConsequent() {\n    this.state.noArrowParamsConversionAt.push(this.state.start);\n    const consequent = this.parseMaybeAssignAllowIn();\n    const failed = !this.match(14);\n    this.state.noArrowParamsConversionAt.pop();\n    return {\n      consequent,\n      failed\n    };\n  }\n\n  getArrowLikeExpressions(node, disallowInvalid) {\n    const stack = [node];\n    const arrows = [];\n\n    while (stack.length !== 0) {\n      const node = stack.pop();\n\n      if (node.type === \"ArrowFunctionExpression\") {\n        if (node.typeParameters || !node.returnType) {\n          this.finishArrowValidation(node);\n        } else {\n          arrows.push(node);\n        }\n\n        stack.push(node.body);\n      } else if (node.type === \"ConditionalExpression\") {\n        stack.push(node.consequent);\n        stack.push(node.alternate);\n      }\n    }\n\n    if (disallowInvalid) {\n      arrows.forEach(node => this.finishArrowValidation(node));\n      return [arrows, []];\n    }\n\n    return partition(arrows, node => node.params.every(param => this.isAssignable(param, true)));\n  }\n\n  finishArrowValidation(node) {\n    var _node$extra;\n\n    this.toAssignableList(node.params, (_node$extra = node.extra) == null ? void 0 : _node$extra.trailingComma, false);\n    this.scope.enter(SCOPE_FUNCTION | SCOPE_ARROW);\n    super.checkParams(node, false, true);\n    this.scope.exit();\n  }\n\n  forwardNoArrowParamsConversionAt(node, parse) {\n    let result;\n\n    if (this.state.noArrowParamsConversionAt.indexOf(node.start) !== -1) {\n      this.state.noArrowParamsConversionAt.push(this.state.start);\n      result = parse();\n      this.state.noArrowParamsConversionAt.pop();\n    } else {\n      result = parse();\n    }\n\n    return result;\n  }\n\n  parseParenItem(node, startPos, startLoc) {\n    node = super.parseParenItem(node, startPos, startLoc);\n\n    if (this.eat(17)) {\n      node.optional = true;\n      this.resetEndLocation(node);\n    }\n\n    if (this.match(14)) {\n      const typeCastNode = this.startNodeAt(startPos, startLoc);\n      typeCastNode.expression = node;\n      typeCastNode.typeAnnotation = this.flowParseTypeAnnotation();\n      return this.finishNode(typeCastNode, \"TypeCastExpression\");\n    }\n\n    return node;\n  }\n\n  assertModuleNodeAllowed(node) {\n    if (node.type === \"ImportDeclaration\" && (node.importKind === \"type\" || node.importKind === \"typeof\") || node.type === \"ExportNamedDeclaration\" && node.exportKind === \"type\" || node.type === \"ExportAllDeclaration\" && node.exportKind === \"type\") {\n      return;\n    }\n\n    super.assertModuleNodeAllowed(node);\n  }\n\n  parseExport(node) {\n    const decl = super.parseExport(node);\n\n    if (decl.type === \"ExportNamedDeclaration\" || decl.type === \"ExportAllDeclaration\") {\n      decl.exportKind = decl.exportKind || \"value\";\n    }\n\n    return decl;\n  }\n\n  parseExportDeclaration(node) {\n    if (this.isContextual(120)) {\n      node.exportKind = \"type\";\n      const declarationNode = this.startNode();\n      this.next();\n\n      if (this.match(5)) {\n        node.specifiers = this.parseExportSpecifiers(true);\n        this.parseExportFrom(node);\n        return null;\n      } else {\n        return this.flowParseTypeAlias(declarationNode);\n      }\n    } else if (this.isContextual(121)) {\n      node.exportKind = \"type\";\n      const declarationNode = this.startNode();\n      this.next();\n      return this.flowParseOpaqueType(declarationNode, false);\n    } else if (this.isContextual(119)) {\n      node.exportKind = \"type\";\n      const declarationNode = this.startNode();\n      this.next();\n      return this.flowParseInterface(declarationNode);\n    } else if (this.shouldParseEnums() && this.isContextual(116)) {\n      node.exportKind = \"value\";\n      const declarationNode = this.startNode();\n      this.next();\n      return this.flowParseEnumDeclaration(declarationNode);\n    } else {\n      return super.parseExportDeclaration(node);\n    }\n  }\n\n  eatExportStar(node) {\n    if (super.eatExportStar(...arguments)) return true;\n\n    if (this.isContextual(120) && this.lookahead().type === 49) {\n      node.exportKind = \"type\";\n      this.next();\n      this.next();\n      return true;\n    }\n\n    return false;\n  }\n\n  maybeParseExportNamespaceSpecifier(node) {\n    const pos = this.state.start;\n    const hasNamespace = super.maybeParseExportNamespaceSpecifier(node);\n\n    if (hasNamespace && node.exportKind === \"type\") {\n      this.unexpected(pos);\n    }\n\n    return hasNamespace;\n  }\n\n  parseClassId(node, isStatement, optionalId) {\n    super.parseClassId(node, isStatement, optionalId);\n\n    if (this.match(43)) {\n      node.typeParameters = this.flowParseTypeParameterDeclaration();\n    }\n  }\n\n  parseClassMember(classBody, member, state) {\n    const pos = this.state.start;\n\n    if (this.isContextual(115)) {\n      if (this.parseClassMemberFromModifier(classBody, member)) {\n        return;\n      }\n\n      member.declare = true;\n    }\n\n    super.parseClassMember(classBody, member, state);\n\n    if (member.declare) {\n      if (member.type !== \"ClassProperty\" && member.type !== \"ClassPrivateProperty\" && member.type !== \"PropertyDefinition\") {\n        this.raise(pos, FlowErrors.DeclareClassElement);\n      } else if (member.value) {\n        this.raise(member.value.start, FlowErrors.DeclareClassFieldInitializer);\n      }\n    }\n  }\n\n  isIterator(word) {\n    return word === \"iterator\" || word === \"asyncIterator\";\n  }\n\n  readIterator() {\n    const word = super.readWord1();\n    const fullWord = \"@@\" + word;\n\n    if (!this.isIterator(word) || !this.state.inType) {\n      this.raise(this.state.pos, ErrorMessages.InvalidIdentifier, fullWord);\n    }\n\n    this.finishToken(122, fullWord);\n  }\n\n  getTokenFromCode(code) {\n    const next = this.input.charCodeAt(this.state.pos + 1);\n\n    if (code === 123 && next === 124) {\n      return this.finishOp(6, 2);\n    } else if (this.state.inType && (code === 62 || code === 60)) {\n      return this.finishOp(code === 62 ? 44 : 43, 1);\n    } else if (this.state.inType && code === 63) {\n      if (next === 46) {\n        return this.finishOp(18, 2);\n      }\n\n      return this.finishOp(17, 1);\n    } else if (isIteratorStart(code, next)) {\n      this.state.pos += 2;\n      return this.readIterator();\n    } else {\n      return super.getTokenFromCode(code);\n    }\n  }\n\n  isAssignable(node, isBinding) {\n    if (node.type === \"TypeCastExpression\") {\n      return this.isAssignable(node.expression, isBinding);\n    } else {\n      return super.isAssignable(node, isBinding);\n    }\n  }\n\n  toAssignable(node, isLHS = false) {\n    if (node.type === \"TypeCastExpression\") {\n      return super.toAssignable(this.typeCastToParameter(node), isLHS);\n    } else {\n      return super.toAssignable(node, isLHS);\n    }\n  }\n\n  toAssignableList(exprList, trailingCommaPos, isLHS) {\n    for (let i = 0; i < exprList.length; i++) {\n      const expr = exprList[i];\n\n      if ((expr == null ? void 0 : expr.type) === \"TypeCastExpression\") {\n        exprList[i] = this.typeCastToParameter(expr);\n      }\n    }\n\n    return super.toAssignableList(exprList, trailingCommaPos, isLHS);\n  }\n\n  toReferencedList(exprList, isParenthesizedExpr) {\n    for (let i = 0; i < exprList.length; i++) {\n      var _expr$extra;\n\n      const expr = exprList[i];\n\n      if (expr && expr.type === \"TypeCastExpression\" && !((_expr$extra = expr.extra) != null && _expr$extra.parenthesized) && (exprList.length > 1 || !isParenthesizedExpr)) {\n        this.raise(expr.typeAnnotation.start, FlowErrors.TypeCastInPattern);\n      }\n    }\n\n    return exprList;\n  }\n\n  parseArrayLike(close, canBePattern, isTuple, refExpressionErrors) {\n    const node = super.parseArrayLike(close, canBePattern, isTuple, refExpressionErrors);\n\n    if (canBePattern && !this.state.maybeInArrowParameters) {\n      this.toReferencedList(node.elements);\n    }\n\n    return node;\n  }\n\n  checkLVal(expr, ...args) {\n    if (expr.type !== \"TypeCastExpression\") {\n      return super.checkLVal(expr, ...args);\n    }\n  }\n\n  parseClassProperty(node) {\n    if (this.match(14)) {\n      node.typeAnnotation = this.flowParseTypeAnnotation();\n    }\n\n    return super.parseClassProperty(node);\n  }\n\n  parseClassPrivateProperty(node) {\n    if (this.match(14)) {\n      node.typeAnnotation = this.flowParseTypeAnnotation();\n    }\n\n    return super.parseClassPrivateProperty(node);\n  }\n\n  isClassMethod() {\n    return this.match(43) || super.isClassMethod();\n  }\n\n  isClassProperty() {\n    return this.match(14) || super.isClassProperty();\n  }\n\n  isNonstaticConstructor(method) {\n    return !this.match(14) && super.isNonstaticConstructor(method);\n  }\n\n  pushClassMethod(classBody, method, isGenerator, isAsync, isConstructor, allowsDirectSuper) {\n    if (method.variance) {\n      this.unexpected(method.variance.start);\n    }\n\n    delete method.variance;\n\n    if (this.match(43)) {\n      method.typeParameters = this.flowParseTypeParameterDeclaration();\n    }\n\n    super.pushClassMethod(classBody, method, isGenerator, isAsync, isConstructor, allowsDirectSuper);\n\n    if (method.params && isConstructor) {\n      const params = method.params;\n\n      if (params.length > 0 && this.isThisParam(params[0])) {\n        this.raise(method.start, FlowErrors.ThisParamBannedInConstructor);\n      }\n    } else if (method.type === \"MethodDefinition\" && isConstructor && method.value.params) {\n      const params = method.value.params;\n\n      if (params.length > 0 && this.isThisParam(params[0])) {\n        this.raise(method.start, FlowErrors.ThisParamBannedInConstructor);\n      }\n    }\n  }\n\n  pushClassPrivateMethod(classBody, method, isGenerator, isAsync) {\n    if (method.variance) {\n      this.unexpected(method.variance.start);\n    }\n\n    delete method.variance;\n\n    if (this.match(43)) {\n      method.typeParameters = this.flowParseTypeParameterDeclaration();\n    }\n\n    super.pushClassPrivateMethod(classBody, method, isGenerator, isAsync);\n  }\n\n  parseClassSuper(node) {\n    super.parseClassSuper(node);\n\n    if (node.superClass && this.match(43)) {\n      node.superTypeParameters = this.flowParseTypeParameterInstantiation();\n    }\n\n    if (this.isContextual(104)) {\n      this.next();\n      const implemented = node.implements = [];\n\n      do {\n        const node = this.startNode();\n        node.id = this.flowParseRestrictedIdentifier(true);\n\n        if (this.match(43)) {\n          node.typeParameters = this.flowParseTypeParameterInstantiation();\n        } else {\n          node.typeParameters = null;\n        }\n\n        implemented.push(this.finishNode(node, \"ClassImplements\"));\n      } while (this.eat(12));\n    }\n  }\n\n  checkGetterSetterParams(method) {\n    super.checkGetterSetterParams(method);\n    const params = this.getObjectOrClassMethodParams(method);\n\n    if (params.length > 0) {\n      const param = params[0];\n\n      if (this.isThisParam(param) && method.kind === \"get\") {\n        this.raise(param.start, FlowErrors.GetterMayNotHaveThisParam);\n      } else if (this.isThisParam(param)) {\n        this.raise(param.start, FlowErrors.SetterMayNotHaveThisParam);\n      }\n    }\n  }\n\n  parsePropertyNamePrefixOperator(node) {\n    node.variance = this.flowParseVariance();\n  }\n\n  parseObjPropValue(prop, startPos, startLoc, isGenerator, isAsync, isPattern, isAccessor, refExpressionErrors) {\n    if (prop.variance) {\n      this.unexpected(prop.variance.start);\n    }\n\n    delete prop.variance;\n    let typeParameters;\n\n    if (this.match(43) && !isAccessor) {\n      typeParameters = this.flowParseTypeParameterDeclaration();\n      if (!this.match(10)) this.unexpected();\n    }\n\n    super.parseObjPropValue(prop, startPos, startLoc, isGenerator, isAsync, isPattern, isAccessor, refExpressionErrors);\n\n    if (typeParameters) {\n      (prop.value || prop).typeParameters = typeParameters;\n    }\n  }\n\n  parseAssignableListItemTypes(param) {\n    if (this.eat(17)) {\n      if (param.type !== \"Identifier\") {\n        this.raise(param.start, FlowErrors.PatternIsOptional);\n      }\n\n      if (this.isThisParam(param)) {\n        this.raise(param.start, FlowErrors.ThisParamMayNotBeOptional);\n      }\n\n      param.optional = true;\n    }\n\n    if (this.match(14)) {\n      param.typeAnnotation = this.flowParseTypeAnnotation();\n    } else if (this.isThisParam(param)) {\n      this.raise(param.start, FlowErrors.ThisParamAnnotationRequired);\n    }\n\n    if (this.match(27) && this.isThisParam(param)) {\n      this.raise(param.start, FlowErrors.ThisParamNoDefault);\n    }\n\n    this.resetEndLocation(param);\n    return param;\n  }\n\n  parseMaybeDefault(startPos, startLoc, left) {\n    const node = super.parseMaybeDefault(startPos, startLoc, left);\n\n    if (node.type === \"AssignmentPattern\" && node.typeAnnotation && node.right.start < node.typeAnnotation.start) {\n      this.raise(node.typeAnnotation.start, FlowErrors.TypeBeforeInitializer);\n    }\n\n    return node;\n  }\n\n  shouldParseDefaultImport(node) {\n    if (!hasTypeImportKind(node)) {\n      return super.shouldParseDefaultImport(node);\n    }\n\n    return isMaybeDefaultImport(this.state.type);\n  }\n\n  parseImportSpecifierLocal(node, specifier, type, contextDescription) {\n    specifier.local = hasTypeImportKind(node) ? this.flowParseRestrictedIdentifier(true, true) : this.parseIdentifier();\n    this.checkLVal(specifier.local, contextDescription, BIND_LEXICAL);\n    node.specifiers.push(this.finishNode(specifier, type));\n  }\n\n  maybeParseDefaultImportSpecifier(node) {\n    node.importKind = \"value\";\n    let kind = null;\n\n    if (this.match(81)) {\n      kind = \"typeof\";\n    } else if (this.isContextual(120)) {\n      kind = \"type\";\n    }\n\n    if (kind) {\n      const lh = this.lookahead();\n      const {\n        type\n      } = lh;\n\n      if (kind === \"type\" && type === 49) {\n        this.unexpected(lh.start);\n      }\n\n      if (isMaybeDefaultImport(type) || type === 5 || type === 49) {\n        this.next();\n        node.importKind = kind;\n      }\n    }\n\n    return super.maybeParseDefaultImportSpecifier(node);\n  }\n\n  parseImportSpecifier(specifier, importedIsString, isInTypeOnlyImport, isMaybeTypeOnly) {\n    const firstIdent = specifier.imported;\n    let specifierTypeKind = null;\n\n    if (firstIdent.type === \"Identifier\") {\n      if (firstIdent.name === \"type\") {\n        specifierTypeKind = \"type\";\n      } else if (firstIdent.name === \"typeof\") {\n        specifierTypeKind = \"typeof\";\n      }\n    }\n\n    let isBinding = false;\n\n    if (this.isContextual(87) && !this.isLookaheadContextual(\"as\")) {\n      const as_ident = this.parseIdentifier(true);\n\n      if (specifierTypeKind !== null && !tokenIsKeywordOrIdentifier(this.state.type)) {\n        specifier.imported = as_ident;\n        specifier.importKind = specifierTypeKind;\n        specifier.local = cloneIdentifier(as_ident);\n      } else {\n        specifier.imported = firstIdent;\n        specifier.importKind = null;\n        specifier.local = this.parseIdentifier();\n      }\n    } else {\n      if (specifierTypeKind !== null && tokenIsKeywordOrIdentifier(this.state.type)) {\n        specifier.imported = this.parseIdentifier(true);\n        specifier.importKind = specifierTypeKind;\n      } else {\n        if (importedIsString) {\n          throw this.raise(specifier.start, ErrorMessages.ImportBindingIsString, firstIdent.value);\n        }\n\n        specifier.imported = firstIdent;\n        specifier.importKind = null;\n      }\n\n      if (this.eatContextual(87)) {\n        specifier.local = this.parseIdentifier();\n      } else {\n        isBinding = true;\n        specifier.local = cloneIdentifier(specifier.imported);\n      }\n    }\n\n    const specifierIsTypeImport = hasTypeImportKind(specifier);\n\n    if (isInTypeOnlyImport && specifierIsTypeImport) {\n      this.raise(specifier.start, FlowErrors.ImportTypeShorthandOnlyInPureImport);\n    }\n\n    if (isInTypeOnlyImport || specifierIsTypeImport) {\n      this.checkReservedType(specifier.local.name, specifier.local.start, true);\n    }\n\n    if (isBinding && !isInTypeOnlyImport && !specifierIsTypeImport) {\n      this.checkReservedWord(specifier.local.name, specifier.start, true, true);\n    }\n\n    this.checkLVal(specifier.local, \"import specifier\", BIND_LEXICAL);\n    return this.finishNode(specifier, \"ImportSpecifier\");\n  }\n\n  parseBindingAtom() {\n    switch (this.state.type) {\n      case 72:\n        return this.parseIdentifier(true);\n\n      default:\n        return super.parseBindingAtom();\n    }\n  }\n\n  parseFunctionParams(node, allowModifiers) {\n    const kind = node.kind;\n\n    if (kind !== \"get\" && kind !== \"set\" && this.match(43)) {\n      node.typeParameters = this.flowParseTypeParameterDeclaration();\n    }\n\n    super.parseFunctionParams(node, allowModifiers);\n  }\n\n  parseVarId(decl, kind) {\n    super.parseVarId(decl, kind);\n\n    if (this.match(14)) {\n      decl.id.typeAnnotation = this.flowParseTypeAnnotation();\n      this.resetEndLocation(decl.id);\n    }\n  }\n\n  parseAsyncArrowFromCallExpression(node, call) {\n    if (this.match(14)) {\n      const oldNoAnonFunctionType = this.state.noAnonFunctionType;\n      this.state.noAnonFunctionType = true;\n      node.returnType = this.flowParseTypeAnnotation();\n      this.state.noAnonFunctionType = oldNoAnonFunctionType;\n    }\n\n    return super.parseAsyncArrowFromCallExpression(node, call);\n  }\n\n  shouldParseAsyncArrow() {\n    return this.match(14) || super.shouldParseAsyncArrow();\n  }\n\n  parseMaybeAssign(refExpressionErrors, afterLeftParse) {\n    var _jsx;\n\n    let state = null;\n    let jsx;\n\n    if (this.hasPlugin(\"jsx\") && (this.match(132) || this.match(43))) {\n      state = this.state.clone();\n      jsx = this.tryParse(() => super.parseMaybeAssign(refExpressionErrors, afterLeftParse), state);\n      if (!jsx.error) return jsx.node;\n      const {\n        context\n      } = this.state;\n      const curContext = context[context.length - 1];\n\n      if (curContext === types$1.j_oTag) {\n        context.length -= 2;\n      } else if (curContext === types$1.j_expr) {\n        context.length -= 1;\n      }\n    }\n\n    if ((_jsx = jsx) != null && _jsx.error || this.match(43)) {\n      var _jsx2, _jsx3;\n\n      state = state || this.state.clone();\n      let typeParameters;\n      const arrow = this.tryParse(abort => {\n        var _arrowExpression$extr;\n\n        typeParameters = this.flowParseTypeParameterDeclaration();\n        const arrowExpression = this.forwardNoArrowParamsConversionAt(typeParameters, () => {\n          const result = super.parseMaybeAssign(refExpressionErrors, afterLeftParse);\n          this.resetStartLocationFromNode(result, typeParameters);\n          return result;\n        });\n        if ((_arrowExpression$extr = arrowExpression.extra) != null && _arrowExpression$extr.parenthesized) abort();\n        const expr = this.maybeUnwrapTypeCastExpression(arrowExpression);\n        if (expr.type !== \"ArrowFunctionExpression\") abort();\n        expr.typeParameters = typeParameters;\n        this.resetStartLocationFromNode(expr, typeParameters);\n        return arrowExpression;\n      }, state);\n      let arrowExpression = null;\n\n      if (arrow.node && this.maybeUnwrapTypeCastExpression(arrow.node).type === \"ArrowFunctionExpression\") {\n        if (!arrow.error && !arrow.aborted) {\n          if (arrow.node.async) {\n            this.raise(typeParameters.start, FlowErrors.UnexpectedTypeParameterBeforeAsyncArrowFunction);\n          }\n\n          return arrow.node;\n        }\n\n        arrowExpression = arrow.node;\n      }\n\n      if ((_jsx2 = jsx) != null && _jsx2.node) {\n        this.state = jsx.failState;\n        return jsx.node;\n      }\n\n      if (arrowExpression) {\n        this.state = arrow.failState;\n        return arrowExpression;\n      }\n\n      if ((_jsx3 = jsx) != null && _jsx3.thrown) throw jsx.error;\n      if (arrow.thrown) throw arrow.error;\n      throw this.raise(typeParameters.start, FlowErrors.UnexpectedTokenAfterTypeParameter);\n    }\n\n    return super.parseMaybeAssign(refExpressionErrors, afterLeftParse);\n  }\n\n  parseArrow(node) {\n    if (this.match(14)) {\n      const result = this.tryParse(() => {\n        const oldNoAnonFunctionType = this.state.noAnonFunctionType;\n        this.state.noAnonFunctionType = true;\n        const typeNode = this.startNode();\n        [typeNode.typeAnnotation, node.predicate] = this.flowParseTypeAndPredicateInitialiser();\n        this.state.noAnonFunctionType = oldNoAnonFunctionType;\n        if (this.canInsertSemicolon()) this.unexpected();\n        if (!this.match(19)) this.unexpected();\n        return typeNode;\n      });\n      if (result.thrown) return null;\n      if (result.error) this.state = result.failState;\n      node.returnType = result.node.typeAnnotation ? this.finishNode(result.node, \"TypeAnnotation\") : null;\n    }\n\n    return super.parseArrow(node);\n  }\n\n  shouldParseArrow(params) {\n    return this.match(14) || super.shouldParseArrow(params);\n  }\n\n  setArrowFunctionParameters(node, params) {\n    if (this.state.noArrowParamsConversionAt.indexOf(node.start) !== -1) {\n      node.params = params;\n    } else {\n      super.setArrowFunctionParameters(node, params);\n    }\n  }\n\n  checkParams(node, allowDuplicates, isArrowFunction) {\n    if (isArrowFunction && this.state.noArrowParamsConversionAt.indexOf(node.start) !== -1) {\n      return;\n    }\n\n    for (let i = 0; i < node.params.length; i++) {\n      if (this.isThisParam(node.params[i]) && i > 0) {\n        this.raise(node.params[i].start, FlowErrors.ThisParamMustBeFirst);\n      }\n    }\n\n    return super.checkParams(...arguments);\n  }\n\n  parseParenAndDistinguishExpression(canBeArrow) {\n    return super.parseParenAndDistinguishExpression(canBeArrow && this.state.noArrowAt.indexOf(this.state.start) === -1);\n  }\n\n  parseSubscripts(base, startPos, startLoc, noCalls) {\n    if (base.type === \"Identifier\" && base.name === \"async\" && this.state.noArrowAt.indexOf(startPos) !== -1) {\n      this.next();\n      const node = this.startNodeAt(startPos, startLoc);\n      node.callee = base;\n      node.arguments = this.parseCallExpressionArguments(11, false);\n      base = this.finishNode(node, \"CallExpression\");\n    } else if (base.type === \"Identifier\" && base.name === \"async\" && this.match(43)) {\n      const state = this.state.clone();\n      const arrow = this.tryParse(abort => this.parseAsyncArrowWithTypeParameters(startPos, startLoc) || abort(), state);\n      if (!arrow.error && !arrow.aborted) return arrow.node;\n      const result = this.tryParse(() => super.parseSubscripts(base, startPos, startLoc, noCalls), state);\n      if (result.node && !result.error) return result.node;\n\n      if (arrow.node) {\n        this.state = arrow.failState;\n        return arrow.node;\n      }\n\n      if (result.node) {\n        this.state = result.failState;\n        return result.node;\n      }\n\n      throw arrow.error || result.error;\n    }\n\n    return super.parseSubscripts(base, startPos, startLoc, noCalls);\n  }\n\n  parseSubscript(base, startPos, startLoc, noCalls, subscriptState) {\n    if (this.match(18) && this.isLookaheadToken_lt()) {\n      subscriptState.optionalChainMember = true;\n\n      if (noCalls) {\n        subscriptState.stop = true;\n        return base;\n      }\n\n      this.next();\n      const node = this.startNodeAt(startPos, startLoc);\n      node.callee = base;\n      node.typeArguments = this.flowParseTypeParameterInstantiation();\n      this.expect(10);\n      node.arguments = this.parseCallExpressionArguments(11, false);\n      node.optional = true;\n      return this.finishCallExpression(node, true);\n    } else if (!noCalls && this.shouldParseTypes() && this.match(43)) {\n      const node = this.startNodeAt(startPos, startLoc);\n      node.callee = base;\n      const result = this.tryParse(() => {\n        node.typeArguments = this.flowParseTypeParameterInstantiationCallOrNew();\n        this.expect(10);\n        node.arguments = this.parseCallExpressionArguments(11, false);\n        if (subscriptState.optionalChainMember) node.optional = false;\n        return this.finishCallExpression(node, subscriptState.optionalChainMember);\n      });\n\n      if (result.node) {\n        if (result.error) this.state = result.failState;\n        return result.node;\n      }\n    }\n\n    return super.parseSubscript(base, startPos, startLoc, noCalls, subscriptState);\n  }\n\n  parseNewArguments(node) {\n    let targs = null;\n\n    if (this.shouldParseTypes() && this.match(43)) {\n      targs = this.tryParse(() => this.flowParseTypeParameterInstantiationCallOrNew()).node;\n    }\n\n    node.typeArguments = targs;\n    super.parseNewArguments(node);\n  }\n\n  parseAsyncArrowWithTypeParameters(startPos, startLoc) {\n    const node = this.startNodeAt(startPos, startLoc);\n    this.parseFunctionParams(node);\n    if (!this.parseArrow(node)) return;\n    return this.parseArrowExpression(node, undefined, true);\n  }\n\n  readToken_mult_modulo(code) {\n    const next = this.input.charCodeAt(this.state.pos + 1);\n\n    if (code === 42 && next === 47 && this.state.hasFlowComment) {\n      this.state.hasFlowComment = false;\n      this.state.pos += 2;\n      this.nextToken();\n      return;\n    }\n\n    super.readToken_mult_modulo(code);\n  }\n\n  readToken_pipe_amp(code) {\n    const next = this.input.charCodeAt(this.state.pos + 1);\n\n    if (code === 124 && next === 125) {\n      this.finishOp(9, 2);\n      return;\n    }\n\n    super.readToken_pipe_amp(code);\n  }\n\n  parseTopLevel(file, program) {\n    const fileNode = super.parseTopLevel(file, program);\n\n    if (this.state.hasFlowComment) {\n      this.raise(this.state.pos, FlowErrors.UnterminatedFlowComment);\n    }\n\n    return fileNode;\n  }\n\n  skipBlockComment() {\n    if (this.hasPlugin(\"flowComments\") && this.skipFlowComment()) {\n      if (this.state.hasFlowComment) {\n        this.unexpected(null, FlowErrors.NestedFlowComment);\n      }\n\n      this.hasFlowCommentCompletion();\n      this.state.pos += this.skipFlowComment();\n      this.state.hasFlowComment = true;\n      return;\n    }\n\n    if (this.state.hasFlowComment) {\n      const end = this.input.indexOf(\"*-/\", this.state.pos += 2);\n\n      if (end === -1) {\n        throw this.raise(this.state.pos - 2, ErrorMessages.UnterminatedComment);\n      }\n\n      this.state.pos = end + 3;\n      return;\n    }\n\n    return super.skipBlockComment();\n  }\n\n  skipFlowComment() {\n    const {\n      pos\n    } = this.state;\n    let shiftToFirstNonWhiteSpace = 2;\n\n    while ([32, 9].includes(this.input.charCodeAt(pos + shiftToFirstNonWhiteSpace))) {\n      shiftToFirstNonWhiteSpace++;\n    }\n\n    const ch2 = this.input.charCodeAt(shiftToFirstNonWhiteSpace + pos);\n    const ch3 = this.input.charCodeAt(shiftToFirstNonWhiteSpace + pos + 1);\n\n    if (ch2 === 58 && ch3 === 58) {\n      return shiftToFirstNonWhiteSpace + 2;\n    }\n\n    if (this.input.slice(shiftToFirstNonWhiteSpace + pos, shiftToFirstNonWhiteSpace + pos + 12) === \"flow-include\") {\n      return shiftToFirstNonWhiteSpace + 12;\n    }\n\n    if (ch2 === 58 && ch3 !== 58) {\n      return shiftToFirstNonWhiteSpace;\n    }\n\n    return false;\n  }\n\n  hasFlowCommentCompletion() {\n    const end = this.input.indexOf(\"*/\", this.state.pos);\n\n    if (end === -1) {\n      throw this.raise(this.state.pos, ErrorMessages.UnterminatedComment);\n    }\n  }\n\n  flowEnumErrorBooleanMemberNotInitialized(pos, {\n    enumName,\n    memberName\n  }) {\n    this.raise(pos, FlowErrors.EnumBooleanMemberNotInitialized, memberName, enumName);\n  }\n\n  flowEnumErrorInvalidMemberName(pos, {\n    enumName,\n    memberName\n  }) {\n    const suggestion = memberName[0].toUpperCase() + memberName.slice(1);\n    this.raise(pos, FlowErrors.EnumInvalidMemberName, memberName, suggestion, enumName);\n  }\n\n  flowEnumErrorDuplicateMemberName(pos, {\n    enumName,\n    memberName\n  }) {\n    this.raise(pos, FlowErrors.EnumDuplicateMemberName, memberName, enumName);\n  }\n\n  flowEnumErrorInconsistentMemberValues(pos, {\n    enumName\n  }) {\n    this.raise(pos, FlowErrors.EnumInconsistentMemberValues, enumName);\n  }\n\n  flowEnumErrorInvalidExplicitType(pos, {\n    enumName,\n    suppliedType\n  }) {\n    return this.raise(pos, suppliedType === null ? FlowErrors.EnumInvalidExplicitTypeUnknownSupplied : FlowErrors.EnumInvalidExplicitType, enumName, suppliedType);\n  }\n\n  flowEnumErrorInvalidMemberInitializer(pos, {\n    enumName,\n    explicitType,\n    memberName\n  }) {\n    let message = null;\n\n    switch (explicitType) {\n      case \"boolean\":\n      case \"number\":\n      case \"string\":\n        message = FlowErrors.EnumInvalidMemberInitializerPrimaryType;\n        break;\n\n      case \"symbol\":\n        message = FlowErrors.EnumInvalidMemberInitializerSymbolType;\n        break;\n\n      default:\n        message = FlowErrors.EnumInvalidMemberInitializerUnknownType;\n    }\n\n    return this.raise(pos, message, enumName, memberName, explicitType);\n  }\n\n  flowEnumErrorNumberMemberNotInitialized(pos, {\n    enumName,\n    memberName\n  }) {\n    this.raise(pos, FlowErrors.EnumNumberMemberNotInitialized, enumName, memberName);\n  }\n\n  flowEnumErrorStringMemberInconsistentlyInitailized(pos, {\n    enumName\n  }) {\n    this.raise(pos, FlowErrors.EnumStringMemberInconsistentlyInitailized, enumName);\n  }\n\n  flowEnumMemberInit() {\n    const startPos = this.state.start;\n\n    const endOfInit = () => this.match(12) || this.match(8);\n\n    switch (this.state.type) {\n      case 124:\n        {\n          const literal = this.parseNumericLiteral(this.state.value);\n\n          if (endOfInit()) {\n            return {\n              type: \"number\",\n              pos: literal.start,\n              value: literal\n            };\n          }\n\n          return {\n            type: \"invalid\",\n            pos: startPos\n          };\n        }\n\n      case 123:\n        {\n          const literal = this.parseStringLiteral(this.state.value);\n\n          if (endOfInit()) {\n            return {\n              type: \"string\",\n              pos: literal.start,\n              value: literal\n            };\n          }\n\n          return {\n            type: \"invalid\",\n            pos: startPos\n          };\n        }\n\n      case 79:\n      case 80:\n        {\n          const literal = this.parseBooleanLiteral(this.match(79));\n\n          if (endOfInit()) {\n            return {\n              type: \"boolean\",\n              pos: literal.start,\n              value: literal\n            };\n          }\n\n          return {\n            type: \"invalid\",\n            pos: startPos\n          };\n        }\n\n      default:\n        return {\n          type: \"invalid\",\n          pos: startPos\n        };\n    }\n  }\n\n  flowEnumMemberRaw() {\n    const pos = this.state.start;\n    const id = this.parseIdentifier(true);\n    const init = this.eat(27) ? this.flowEnumMemberInit() : {\n      type: \"none\",\n      pos\n    };\n    return {\n      id,\n      init\n    };\n  }\n\n  flowEnumCheckExplicitTypeMismatch(pos, context, expectedType) {\n    const {\n      explicitType\n    } = context;\n\n    if (explicitType === null) {\n      return;\n    }\n\n    if (explicitType !== expectedType) {\n      this.flowEnumErrorInvalidMemberInitializer(pos, context);\n    }\n  }\n\n  flowEnumMembers({\n    enumName,\n    explicitType\n  }) {\n    const seenNames = new Set();\n    const members = {\n      booleanMembers: [],\n      numberMembers: [],\n      stringMembers: [],\n      defaultedMembers: []\n    };\n    let hasUnknownMembers = false;\n\n    while (!this.match(8)) {\n      if (this.eat(21)) {\n        hasUnknownMembers = true;\n        break;\n      }\n\n      const memberNode = this.startNode();\n      const {\n        id,\n        init\n      } = this.flowEnumMemberRaw();\n      const memberName = id.name;\n\n      if (memberName === \"\") {\n        continue;\n      }\n\n      if (/^[a-z]/.test(memberName)) {\n        this.flowEnumErrorInvalidMemberName(id.start, {\n          enumName,\n          memberName\n        });\n      }\n\n      if (seenNames.has(memberName)) {\n        this.flowEnumErrorDuplicateMemberName(id.start, {\n          enumName,\n          memberName\n        });\n      }\n\n      seenNames.add(memberName);\n      const context = {\n        enumName,\n        explicitType,\n        memberName\n      };\n      memberNode.id = id;\n\n      switch (init.type) {\n        case \"boolean\":\n          {\n            this.flowEnumCheckExplicitTypeMismatch(init.pos, context, \"boolean\");\n            memberNode.init = init.value;\n            members.booleanMembers.push(this.finishNode(memberNode, \"EnumBooleanMember\"));\n            break;\n          }\n\n        case \"number\":\n          {\n            this.flowEnumCheckExplicitTypeMismatch(init.pos, context, \"number\");\n            memberNode.init = init.value;\n            members.numberMembers.push(this.finishNode(memberNode, \"EnumNumberMember\"));\n            break;\n          }\n\n        case \"string\":\n          {\n            this.flowEnumCheckExplicitTypeMismatch(init.pos, context, \"string\");\n            memberNode.init = init.value;\n            members.stringMembers.push(this.finishNode(memberNode, \"EnumStringMember\"));\n            break;\n          }\n\n        case \"invalid\":\n          {\n            throw this.flowEnumErrorInvalidMemberInitializer(init.pos, context);\n          }\n\n        case \"none\":\n          {\n            switch (explicitType) {\n              case \"boolean\":\n                this.flowEnumErrorBooleanMemberNotInitialized(init.pos, context);\n                break;\n\n              case \"number\":\n                this.flowEnumErrorNumberMemberNotInitialized(init.pos, context);\n                break;\n\n              default:\n                members.defaultedMembers.push(this.finishNode(memberNode, \"EnumDefaultedMember\"));\n            }\n          }\n      }\n\n      if (!this.match(8)) {\n        this.expect(12);\n      }\n    }\n\n    return {\n      members,\n      hasUnknownMembers\n    };\n  }\n\n  flowEnumStringMembers(initializedMembers, defaultedMembers, {\n    enumName\n  }) {\n    if (initializedMembers.length === 0) {\n      return defaultedMembers;\n    } else if (defaultedMembers.length === 0) {\n      return initializedMembers;\n    } else if (defaultedMembers.length > initializedMembers.length) {\n      for (const member of initializedMembers) {\n        this.flowEnumErrorStringMemberInconsistentlyInitailized(member.start, {\n          enumName\n        });\n      }\n\n      return defaultedMembers;\n    } else {\n      for (const member of defaultedMembers) {\n        this.flowEnumErrorStringMemberInconsistentlyInitailized(member.start, {\n          enumName\n        });\n      }\n\n      return initializedMembers;\n    }\n  }\n\n  flowEnumParseExplicitType({\n    enumName\n  }) {\n    if (this.eatContextual(95)) {\n      if (!tokenIsIdentifier(this.state.type)) {\n        throw this.flowEnumErrorInvalidExplicitType(this.state.start, {\n          enumName,\n          suppliedType: null\n        });\n      }\n\n      const {\n        value\n      } = this.state;\n      this.next();\n\n      if (value !== \"boolean\" && value !== \"number\" && value !== \"string\" && value !== \"symbol\") {\n        this.flowEnumErrorInvalidExplicitType(this.state.start, {\n          enumName,\n          suppliedType: value\n        });\n      }\n\n      return value;\n    }\n\n    return null;\n  }\n\n  flowEnumBody(node, {\n    enumName,\n    nameLoc\n  }) {\n    const explicitType = this.flowEnumParseExplicitType({\n      enumName\n    });\n    this.expect(5);\n    const {\n      members,\n      hasUnknownMembers\n    } = this.flowEnumMembers({\n      enumName,\n      explicitType\n    });\n    node.hasUnknownMembers = hasUnknownMembers;\n\n    switch (explicitType) {\n      case \"boolean\":\n        node.explicitType = true;\n        node.members = members.booleanMembers;\n        this.expect(8);\n        return this.finishNode(node, \"EnumBooleanBody\");\n\n      case \"number\":\n        node.explicitType = true;\n        node.members = members.numberMembers;\n        this.expect(8);\n        return this.finishNode(node, \"EnumNumberBody\");\n\n      case \"string\":\n        node.explicitType = true;\n        node.members = this.flowEnumStringMembers(members.stringMembers, members.defaultedMembers, {\n          enumName\n        });\n        this.expect(8);\n        return this.finishNode(node, \"EnumStringBody\");\n\n      case \"symbol\":\n        node.members = members.defaultedMembers;\n        this.expect(8);\n        return this.finishNode(node, \"EnumSymbolBody\");\n\n      default:\n        {\n          const empty = () => {\n            node.members = [];\n            this.expect(8);\n            return this.finishNode(node, \"EnumStringBody\");\n          };\n\n          node.explicitType = false;\n          const boolsLen = members.booleanMembers.length;\n          const numsLen = members.numberMembers.length;\n          const strsLen = members.stringMembers.length;\n          const defaultedLen = members.defaultedMembers.length;\n\n          if (!boolsLen && !numsLen && !strsLen && !defaultedLen) {\n            return empty();\n          } else if (!boolsLen && !numsLen) {\n            node.members = this.flowEnumStringMembers(members.stringMembers, members.defaultedMembers, {\n              enumName\n            });\n            this.expect(8);\n            return this.finishNode(node, \"EnumStringBody\");\n          } else if (!numsLen && !strsLen && boolsLen >= defaultedLen) {\n            for (const member of members.defaultedMembers) {\n              this.flowEnumErrorBooleanMemberNotInitialized(member.start, {\n                enumName,\n                memberName: member.id.name\n              });\n            }\n\n            node.members = members.booleanMembers;\n            this.expect(8);\n            return this.finishNode(node, \"EnumBooleanBody\");\n          } else if (!boolsLen && !strsLen && numsLen >= defaultedLen) {\n            for (const member of members.defaultedMembers) {\n              this.flowEnumErrorNumberMemberNotInitialized(member.start, {\n                enumName,\n                memberName: member.id.name\n              });\n            }\n\n            node.members = members.numberMembers;\n            this.expect(8);\n            return this.finishNode(node, \"EnumNumberBody\");\n          } else {\n            this.flowEnumErrorInconsistentMemberValues(nameLoc, {\n              enumName\n            });\n            return empty();\n          }\n        }\n    }\n  }\n\n  flowParseEnumDeclaration(node) {\n    const id = this.parseIdentifier();\n    node.id = id;\n    node.body = this.flowEnumBody(this.startNode(), {\n      enumName: id.name,\n      nameLoc: id.start\n    });\n    return this.finishNode(node, \"EnumDeclaration\");\n  }\n\n  isLookaheadToken_lt() {\n    const next = this.nextTokenStart();\n\n    if (this.input.charCodeAt(next) === 60) {\n      const afterNext = this.input.charCodeAt(next + 1);\n      return afterNext !== 60 && afterNext !== 61;\n    }\n\n    return false;\n  }\n\n  maybeUnwrapTypeCastExpression(node) {\n    return node.type === \"TypeCastExpression\" ? node.expression : node;\n  }\n\n});\n\nconst entities = {\n  quot: \"\\u0022\",\n  amp: \"&\",\n  apos: \"\\u0027\",\n  lt: \"<\",\n  gt: \">\",\n  nbsp: \"\\u00A0\",\n  iexcl: \"\\u00A1\",\n  cent: \"\\u00A2\",\n  pound: \"\\u00A3\",\n  curren: \"\\u00A4\",\n  yen: \"\\u00A5\",\n  brvbar: \"\\u00A6\",\n  sect: \"\\u00A7\",\n  uml: \"\\u00A8\",\n  copy: \"\\u00A9\",\n  ordf: \"\\u00AA\",\n  laquo: \"\\u00AB\",\n  not: \"\\u00AC\",\n  shy: \"\\u00AD\",\n  reg: \"\\u00AE\",\n  macr: \"\\u00AF\",\n  deg: \"\\u00B0\",\n  plusmn: \"\\u00B1\",\n  sup2: \"\\u00B2\",\n  sup3: \"\\u00B3\",\n  acute: \"\\u00B4\",\n  micro: \"\\u00B5\",\n  para: \"\\u00B6\",\n  middot: \"\\u00B7\",\n  cedil: \"\\u00B8\",\n  sup1: \"\\u00B9\",\n  ordm: \"\\u00BA\",\n  raquo: \"\\u00BB\",\n  frac14: \"\\u00BC\",\n  frac12: \"\\u00BD\",\n  frac34: \"\\u00BE\",\n  iquest: \"\\u00BF\",\n  Agrave: \"\\u00C0\",\n  Aacute: \"\\u00C1\",\n  Acirc: \"\\u00C2\",\n  Atilde: \"\\u00C3\",\n  Auml: \"\\u00C4\",\n  Aring: \"\\u00C5\",\n  AElig: \"\\u00C6\",\n  Ccedil: \"\\u00C7\",\n  Egrave: \"\\u00C8\",\n  Eacute: \"\\u00C9\",\n  Ecirc: \"\\u00CA\",\n  Euml: \"\\u00CB\",\n  Igrave: \"\\u00CC\",\n  Iacute: \"\\u00CD\",\n  Icirc: \"\\u00CE\",\n  Iuml: \"\\u00CF\",\n  ETH: \"\\u00D0\",\n  Ntilde: \"\\u00D1\",\n  Ograve: \"\\u00D2\",\n  Oacute: \"\\u00D3\",\n  Ocirc: \"\\u00D4\",\n  Otilde: \"\\u00D5\",\n  Ouml: \"\\u00D6\",\n  times: \"\\u00D7\",\n  Oslash: \"\\u00D8\",\n  Ugrave: \"\\u00D9\",\n  Uacute: \"\\u00DA\",\n  Ucirc: \"\\u00DB\",\n  Uuml: \"\\u00DC\",\n  Yacute: \"\\u00DD\",\n  THORN: \"\\u00DE\",\n  szlig: \"\\u00DF\",\n  agrave: \"\\u00E0\",\n  aacute: \"\\u00E1\",\n  acirc: \"\\u00E2\",\n  atilde: \"\\u00E3\",\n  auml: \"\\u00E4\",\n  aring: \"\\u00E5\",\n  aelig: \"\\u00E6\",\n  ccedil: \"\\u00E7\",\n  egrave: \"\\u00E8\",\n  eacute: \"\\u00E9\",\n  ecirc: \"\\u00EA\",\n  euml: \"\\u00EB\",\n  igrave: \"\\u00EC\",\n  iacute: \"\\u00ED\",\n  icirc: \"\\u00EE\",\n  iuml: \"\\u00EF\",\n  eth: \"\\u00F0\",\n  ntilde: \"\\u00F1\",\n  ograve: \"\\u00F2\",\n  oacute: \"\\u00F3\",\n  ocirc: \"\\u00F4\",\n  otilde: \"\\u00F5\",\n  ouml: \"\\u00F6\",\n  divide: \"\\u00F7\",\n  oslash: \"\\u00F8\",\n  ugrave: \"\\u00F9\",\n  uacute: \"\\u00FA\",\n  ucirc: \"\\u00FB\",\n  uuml: \"\\u00FC\",\n  yacute: \"\\u00FD\",\n  thorn: \"\\u00FE\",\n  yuml: \"\\u00FF\",\n  OElig: \"\\u0152\",\n  oelig: \"\\u0153\",\n  Scaron: \"\\u0160\",\n  scaron: \"\\u0161\",\n  Yuml: \"\\u0178\",\n  fnof: \"\\u0192\",\n  circ: \"\\u02C6\",\n  tilde: \"\\u02DC\",\n  Alpha: \"\\u0391\",\n  Beta: \"\\u0392\",\n  Gamma: \"\\u0393\",\n  Delta: \"\\u0394\",\n  Epsilon: \"\\u0395\",\n  Zeta: \"\\u0396\",\n  Eta: \"\\u0397\",\n  Theta: \"\\u0398\",\n  Iota: \"\\u0399\",\n  Kappa: \"\\u039A\",\n  Lambda: \"\\u039B\",\n  Mu: \"\\u039C\",\n  Nu: \"\\u039D\",\n  Xi: \"\\u039E\",\n  Omicron: \"\\u039F\",\n  Pi: \"\\u03A0\",\n  Rho: \"\\u03A1\",\n  Sigma: \"\\u03A3\",\n  Tau: \"\\u03A4\",\n  Upsilon: \"\\u03A5\",\n  Phi: \"\\u03A6\",\n  Chi: \"\\u03A7\",\n  Psi: \"\\u03A8\",\n  Omega: \"\\u03A9\",\n  alpha: \"\\u03B1\",\n  beta: \"\\u03B2\",\n  gamma: \"\\u03B3\",\n  delta: \"\\u03B4\",\n  epsilon: \"\\u03B5\",\n  zeta: \"\\u03B6\",\n  eta: \"\\u03B7\",\n  theta: \"\\u03B8\",\n  iota: \"\\u03B9\",\n  kappa: \"\\u03BA\",\n  lambda: \"\\u03BB\",\n  mu: \"\\u03BC\",\n  nu: \"\\u03BD\",\n  xi: \"\\u03BE\",\n  omicron: \"\\u03BF\",\n  pi: \"\\u03C0\",\n  rho: \"\\u03C1\",\n  sigmaf: \"\\u03C2\",\n  sigma: \"\\u03C3\",\n  tau: \"\\u03C4\",\n  upsilon: \"\\u03C5\",\n  phi: \"\\u03C6\",\n  chi: \"\\u03C7\",\n  psi: \"\\u03C8\",\n  omega: \"\\u03C9\",\n  thetasym: \"\\u03D1\",\n  upsih: \"\\u03D2\",\n  piv: \"\\u03D6\",\n  ensp: \"\\u2002\",\n  emsp: \"\\u2003\",\n  thinsp: \"\\u2009\",\n  zwnj: \"\\u200C\",\n  zwj: \"\\u200D\",\n  lrm: \"\\u200E\",\n  rlm: \"\\u200F\",\n  ndash: \"\\u2013\",\n  mdash: \"\\u2014\",\n  lsquo: \"\\u2018\",\n  rsquo: \"\\u2019\",\n  sbquo: \"\\u201A\",\n  ldquo: \"\\u201C\",\n  rdquo: \"\\u201D\",\n  bdquo: \"\\u201E\",\n  dagger: \"\\u2020\",\n  Dagger: \"\\u2021\",\n  bull: \"\\u2022\",\n  hellip: \"\\u2026\",\n  permil: \"\\u2030\",\n  prime: \"\\u2032\",\n  Prime: \"\\u2033\",\n  lsaquo: \"\\u2039\",\n  rsaquo: \"\\u203A\",\n  oline: \"\\u203E\",\n  frasl: \"\\u2044\",\n  euro: \"\\u20AC\",\n  image: \"\\u2111\",\n  weierp: \"\\u2118\",\n  real: \"\\u211C\",\n  trade: \"\\u2122\",\n  alefsym: \"\\u2135\",\n  larr: \"\\u2190\",\n  uarr: \"\\u2191\",\n  rarr: \"\\u2192\",\n  darr: \"\\u2193\",\n  harr: \"\\u2194\",\n  crarr: \"\\u21B5\",\n  lArr: \"\\u21D0\",\n  uArr: \"\\u21D1\",\n  rArr: \"\\u21D2\",\n  dArr: \"\\u21D3\",\n  hArr: \"\\u21D4\",\n  forall: \"\\u2200\",\n  part: \"\\u2202\",\n  exist: \"\\u2203\",\n  empty: \"\\u2205\",\n  nabla: \"\\u2207\",\n  isin: \"\\u2208\",\n  notin: \"\\u2209\",\n  ni: \"\\u220B\",\n  prod: \"\\u220F\",\n  sum: \"\\u2211\",\n  minus: \"\\u2212\",\n  lowast: \"\\u2217\",\n  radic: \"\\u221A\",\n  prop: \"\\u221D\",\n  infin: \"\\u221E\",\n  ang: \"\\u2220\",\n  and: \"\\u2227\",\n  or: \"\\u2228\",\n  cap: \"\\u2229\",\n  cup: \"\\u222A\",\n  int: \"\\u222B\",\n  there4: \"\\u2234\",\n  sim: \"\\u223C\",\n  cong: \"\\u2245\",\n  asymp: \"\\u2248\",\n  ne: \"\\u2260\",\n  equiv: \"\\u2261\",\n  le: \"\\u2264\",\n  ge: \"\\u2265\",\n  sub: \"\\u2282\",\n  sup: \"\\u2283\",\n  nsub: \"\\u2284\",\n  sube: \"\\u2286\",\n  supe: \"\\u2287\",\n  oplus: \"\\u2295\",\n  otimes: \"\\u2297\",\n  perp: \"\\u22A5\",\n  sdot: \"\\u22C5\",\n  lceil: \"\\u2308\",\n  rceil: \"\\u2309\",\n  lfloor: \"\\u230A\",\n  rfloor: \"\\u230B\",\n  lang: \"\\u2329\",\n  rang: \"\\u232A\",\n  loz: \"\\u25CA\",\n  spades: \"\\u2660\",\n  clubs: \"\\u2663\",\n  hearts: \"\\u2665\",\n  diams: \"\\u2666\"\n};\n\nconst HEX_NUMBER = /^[\\da-fA-F]+$/;\nconst DECIMAL_NUMBER = /^\\d+$/;\nconst JsxErrors = makeErrorTemplates({\n  AttributeIsEmpty: \"JSX attributes must only be assigned a non-empty expression.\",\n  MissingClosingTagElement: \"Expected corresponding JSX closing tag for <%0>.\",\n  MissingClosingTagFragment: \"Expected corresponding JSX closing tag for <>.\",\n  UnexpectedSequenceExpression: \"Sequence expressions cannot be directly nested inside JSX. Did you mean to wrap it in parentheses (...)?\",\n  UnsupportedJsxValue: \"JSX value should be either an expression or a quoted JSX text.\",\n  UnterminatedJsxContent: \"Unterminated JSX contents.\",\n  UnwrappedAdjacentJSXElements: \"Adjacent JSX elements must be wrapped in an enclosing tag. Did you want a JSX fragment <>...</>?\"\n}, ErrorCodes.SyntaxError, \"jsx\");\ntypes$1.j_oTag = new TokContext(\"<tag\");\ntypes$1.j_cTag = new TokContext(\"</tag\");\ntypes$1.j_expr = new TokContext(\"<tag>...</tag>\", true);\n\nfunction isFragment(object) {\n  return object ? object.type === \"JSXOpeningFragment\" || object.type === \"JSXClosingFragment\" : false;\n}\n\nfunction getQualifiedJSXName(object) {\n  if (object.type === \"JSXIdentifier\") {\n    return object.name;\n  }\n\n  if (object.type === \"JSXNamespacedName\") {\n    return object.namespace.name + \":\" + object.name.name;\n  }\n\n  if (object.type === \"JSXMemberExpression\") {\n    return getQualifiedJSXName(object.object) + \".\" + getQualifiedJSXName(object.property);\n  }\n\n  throw new Error(\"Node had unexpected type: \" + object.type);\n}\n\nvar jsx = (superClass => class extends superClass {\n  jsxReadToken() {\n    let out = \"\";\n    let chunkStart = this.state.pos;\n\n    for (;;) {\n      if (this.state.pos >= this.length) {\n        throw this.raise(this.state.start, JsxErrors.UnterminatedJsxContent);\n      }\n\n      const ch = this.input.charCodeAt(this.state.pos);\n\n      switch (ch) {\n        case 60:\n        case 123:\n          if (this.state.pos === this.state.start) {\n            if (ch === 60 && this.state.canStartJSXElement) {\n              ++this.state.pos;\n              return this.finishToken(132);\n            }\n\n            return super.getTokenFromCode(ch);\n          }\n\n          out += this.input.slice(chunkStart, this.state.pos);\n          return this.finishToken(131, out);\n\n        case 38:\n          out += this.input.slice(chunkStart, this.state.pos);\n          out += this.jsxReadEntity();\n          chunkStart = this.state.pos;\n          break;\n\n        case 62:\n        case 125:\n\n        default:\n          if (isNewLine(ch)) {\n            out += this.input.slice(chunkStart, this.state.pos);\n            out += this.jsxReadNewLine(true);\n            chunkStart = this.state.pos;\n          } else {\n            ++this.state.pos;\n          }\n\n      }\n    }\n  }\n\n  jsxReadNewLine(normalizeCRLF) {\n    const ch = this.input.charCodeAt(this.state.pos);\n    let out;\n    ++this.state.pos;\n\n    if (ch === 13 && this.input.charCodeAt(this.state.pos) === 10) {\n      ++this.state.pos;\n      out = normalizeCRLF ? \"\\n\" : \"\\r\\n\";\n    } else {\n      out = String.fromCharCode(ch);\n    }\n\n    ++this.state.curLine;\n    this.state.lineStart = this.state.pos;\n    return out;\n  }\n\n  jsxReadString(quote) {\n    let out = \"\";\n    let chunkStart = ++this.state.pos;\n\n    for (;;) {\n      if (this.state.pos >= this.length) {\n        throw this.raise(this.state.start, ErrorMessages.UnterminatedString);\n      }\n\n      const ch = this.input.charCodeAt(this.state.pos);\n      if (ch === quote) break;\n\n      if (ch === 38) {\n        out += this.input.slice(chunkStart, this.state.pos);\n        out += this.jsxReadEntity();\n        chunkStart = this.state.pos;\n      } else if (isNewLine(ch)) {\n        out += this.input.slice(chunkStart, this.state.pos);\n        out += this.jsxReadNewLine(false);\n        chunkStart = this.state.pos;\n      } else {\n        ++this.state.pos;\n      }\n    }\n\n    out += this.input.slice(chunkStart, this.state.pos++);\n    return this.finishToken(123, out);\n  }\n\n  jsxReadEntity() {\n    let str = \"\";\n    let count = 0;\n    let entity;\n    let ch = this.input[this.state.pos];\n    const startPos = ++this.state.pos;\n\n    while (this.state.pos < this.length && count++ < 10) {\n      ch = this.input[this.state.pos++];\n\n      if (ch === \";\") {\n        if (str[0] === \"#\") {\n          if (str[1] === \"x\") {\n            str = str.substr(2);\n\n            if (HEX_NUMBER.test(str)) {\n              entity = String.fromCodePoint(parseInt(str, 16));\n            }\n          } else {\n            str = str.substr(1);\n\n            if (DECIMAL_NUMBER.test(str)) {\n              entity = String.fromCodePoint(parseInt(str, 10));\n            }\n          }\n        } else {\n          entity = entities[str];\n        }\n\n        break;\n      }\n\n      str += ch;\n    }\n\n    if (!entity) {\n      this.state.pos = startPos;\n      return \"&\";\n    }\n\n    return entity;\n  }\n\n  jsxReadWord() {\n    let ch;\n    const start = this.state.pos;\n\n    do {\n      ch = this.input.charCodeAt(++this.state.pos);\n    } while (isIdentifierChar(ch) || ch === 45);\n\n    return this.finishToken(130, this.input.slice(start, this.state.pos));\n  }\n\n  jsxParseIdentifier() {\n    const node = this.startNode();\n\n    if (this.match(130)) {\n      node.name = this.state.value;\n    } else if (tokenIsKeyword(this.state.type)) {\n      node.name = tokenLabelName(this.state.type);\n    } else {\n      this.unexpected();\n    }\n\n    this.next();\n    return this.finishNode(node, \"JSXIdentifier\");\n  }\n\n  jsxParseNamespacedName() {\n    const startPos = this.state.start;\n    const startLoc = this.state.startLoc;\n    const name = this.jsxParseIdentifier();\n    if (!this.eat(14)) return name;\n    const node = this.startNodeAt(startPos, startLoc);\n    node.namespace = name;\n    node.name = this.jsxParseIdentifier();\n    return this.finishNode(node, \"JSXNamespacedName\");\n  }\n\n  jsxParseElementName() {\n    const startPos = this.state.start;\n    const startLoc = this.state.startLoc;\n    let node = this.jsxParseNamespacedName();\n\n    if (node.type === \"JSXNamespacedName\") {\n      return node;\n    }\n\n    while (this.eat(16)) {\n      const newNode = this.startNodeAt(startPos, startLoc);\n      newNode.object = node;\n      newNode.property = this.jsxParseIdentifier();\n      node = this.finishNode(newNode, \"JSXMemberExpression\");\n    }\n\n    return node;\n  }\n\n  jsxParseAttributeValue() {\n    let node;\n\n    switch (this.state.type) {\n      case 5:\n        node = this.startNode();\n        this.next();\n        node = this.jsxParseExpressionContainer(node);\n\n        if (node.expression.type === \"JSXEmptyExpression\") {\n          this.raise(node.start, JsxErrors.AttributeIsEmpty);\n        }\n\n        return node;\n\n      case 132:\n      case 123:\n        return this.parseExprAtom();\n\n      default:\n        throw this.raise(this.state.start, JsxErrors.UnsupportedJsxValue);\n    }\n  }\n\n  jsxParseEmptyExpression() {\n    const node = this.startNodeAt(this.state.lastTokEnd, this.state.lastTokEndLoc);\n    return this.finishNodeAt(node, \"JSXEmptyExpression\", this.state.start, this.state.startLoc);\n  }\n\n  jsxParseSpreadChild(node) {\n    this.next();\n    node.expression = this.parseExpression();\n    this.expect(8);\n    return this.finishNode(node, \"JSXSpreadChild\");\n  }\n\n  jsxParseExpressionContainer(node) {\n    if (this.match(8)) {\n      node.expression = this.jsxParseEmptyExpression();\n    } else {\n      const expression = this.parseExpression();\n      node.expression = expression;\n    }\n\n    this.expect(8);\n    return this.finishNode(node, \"JSXExpressionContainer\");\n  }\n\n  jsxParseAttribute() {\n    const node = this.startNode();\n\n    if (this.eat(5)) {\n      this.expect(21);\n      node.argument = this.parseMaybeAssignAllowIn();\n      this.expect(8);\n      return this.finishNode(node, \"JSXSpreadAttribute\");\n    }\n\n    node.name = this.jsxParseNamespacedName();\n    node.value = this.eat(27) ? this.jsxParseAttributeValue() : null;\n    return this.finishNode(node, \"JSXAttribute\");\n  }\n\n  jsxParseOpeningElementAt(startPos, startLoc) {\n    const node = this.startNodeAt(startPos, startLoc);\n\n    if (this.match(133)) {\n      this.expect(133);\n      return this.finishNode(node, \"JSXOpeningFragment\");\n    }\n\n    node.name = this.jsxParseElementName();\n    return this.jsxParseOpeningElementAfterName(node);\n  }\n\n  jsxParseOpeningElementAfterName(node) {\n    const attributes = [];\n\n    while (!this.match(50) && !this.match(133)) {\n      attributes.push(this.jsxParseAttribute());\n    }\n\n    node.attributes = attributes;\n    node.selfClosing = this.eat(50);\n    this.expect(133);\n    return this.finishNode(node, \"JSXOpeningElement\");\n  }\n\n  jsxParseClosingElementAt(startPos, startLoc) {\n    const node = this.startNodeAt(startPos, startLoc);\n\n    if (this.match(133)) {\n      this.expect(133);\n      return this.finishNode(node, \"JSXClosingFragment\");\n    }\n\n    node.name = this.jsxParseElementName();\n    this.expect(133);\n    return this.finishNode(node, \"JSXClosingElement\");\n  }\n\n  jsxParseElementAt(startPos, startLoc) {\n    const node = this.startNodeAt(startPos, startLoc);\n    const children = [];\n    const openingElement = this.jsxParseOpeningElementAt(startPos, startLoc);\n    let closingElement = null;\n\n    if (!openingElement.selfClosing) {\n      contents: for (;;) {\n        switch (this.state.type) {\n          case 132:\n            startPos = this.state.start;\n            startLoc = this.state.startLoc;\n            this.next();\n\n            if (this.eat(50)) {\n              closingElement = this.jsxParseClosingElementAt(startPos, startLoc);\n              break contents;\n            }\n\n            children.push(this.jsxParseElementAt(startPos, startLoc));\n            break;\n\n          case 131:\n            children.push(this.parseExprAtom());\n            break;\n\n          case 5:\n            {\n              const node = this.startNode();\n              this.next();\n\n              if (this.match(21)) {\n                children.push(this.jsxParseSpreadChild(node));\n              } else {\n                children.push(this.jsxParseExpressionContainer(node));\n              }\n\n              break;\n            }\n\n          default:\n            throw this.unexpected();\n        }\n      }\n\n      if (isFragment(openingElement) && !isFragment(closingElement)) {\n        this.raise(closingElement.start, JsxErrors.MissingClosingTagFragment);\n      } else if (!isFragment(openingElement) && isFragment(closingElement)) {\n        this.raise(closingElement.start, JsxErrors.MissingClosingTagElement, getQualifiedJSXName(openingElement.name));\n      } else if (!isFragment(openingElement) && !isFragment(closingElement)) {\n        if (getQualifiedJSXName(closingElement.name) !== getQualifiedJSXName(openingElement.name)) {\n          this.raise(closingElement.start, JsxErrors.MissingClosingTagElement, getQualifiedJSXName(openingElement.name));\n        }\n      }\n    }\n\n    if (isFragment(openingElement)) {\n      node.openingFragment = openingElement;\n      node.closingFragment = closingElement;\n    } else {\n      node.openingElement = openingElement;\n      node.closingElement = closingElement;\n    }\n\n    node.children = children;\n\n    if (this.match(43)) {\n      throw this.raise(this.state.start, JsxErrors.UnwrappedAdjacentJSXElements);\n    }\n\n    return isFragment(openingElement) ? this.finishNode(node, \"JSXFragment\") : this.finishNode(node, \"JSXElement\");\n  }\n\n  jsxParseElement() {\n    const startPos = this.state.start;\n    const startLoc = this.state.startLoc;\n    this.next();\n    return this.jsxParseElementAt(startPos, startLoc);\n  }\n\n  parseExprAtom(refExpressionErrors) {\n    if (this.match(131)) {\n      return this.parseLiteral(this.state.value, \"JSXText\");\n    } else if (this.match(132)) {\n      return this.jsxParseElement();\n    } else if (this.match(43) && this.input.charCodeAt(this.state.pos) !== 33) {\n      this.replaceToken(132);\n      return this.jsxParseElement();\n    } else {\n      return super.parseExprAtom(refExpressionErrors);\n    }\n  }\n\n  getTokenFromCode(code) {\n    const context = this.curContext();\n\n    if (context === types$1.j_expr) {\n      return this.jsxReadToken();\n    }\n\n    if (context === types$1.j_oTag || context === types$1.j_cTag) {\n      if (isIdentifierStart(code)) {\n        return this.jsxReadWord();\n      }\n\n      if (code === 62) {\n        ++this.state.pos;\n        return this.finishToken(133);\n      }\n\n      if ((code === 34 || code === 39) && context === types$1.j_oTag) {\n        return this.jsxReadString(code);\n      }\n    }\n\n    if (code === 60 && this.state.canStartJSXElement && this.input.charCodeAt(this.state.pos + 1) !== 33) {\n      ++this.state.pos;\n      return this.finishToken(132);\n    }\n\n    return super.getTokenFromCode(code);\n  }\n\n  updateContext(prevType) {\n    super.updateContext(prevType);\n    const {\n      context,\n      type\n    } = this.state;\n\n    if (type === 50 && prevType === 132) {\n      context.splice(-2, 2, types$1.j_cTag);\n      this.state.canStartJSXElement = false;\n    } else if (type === 132) {\n      context.push(types$1.j_expr, types$1.j_oTag);\n    } else if (type === 133) {\n      const out = context.pop();\n\n      if (out === types$1.j_oTag && prevType === 50 || out === types$1.j_cTag) {\n        context.pop();\n        this.state.canStartJSXElement = context[context.length - 1] === types$1.j_expr;\n      } else {\n        this.state.canStartJSXElement = true;\n      }\n    } else {\n      this.state.canStartJSXElement = tokenComesBeforeExpression(type);\n    }\n  }\n\n});\n\nclass TypeScriptScope extends Scope {\n  constructor(...args) {\n    super(...args);\n    this.types = new Set();\n    this.enums = new Set();\n    this.constEnums = new Set();\n    this.classes = new Set();\n    this.exportOnlyBindings = new Set();\n  }\n\n}\n\nclass TypeScriptScopeHandler extends ScopeHandler {\n  createScope(flags) {\n    return new TypeScriptScope(flags);\n  }\n\n  declareName(name, bindingType, pos) {\n    const scope = this.currentScope();\n\n    if (bindingType & BIND_FLAGS_TS_EXPORT_ONLY) {\n      this.maybeExportDefined(scope, name);\n      scope.exportOnlyBindings.add(name);\n      return;\n    }\n\n    super.declareName(...arguments);\n\n    if (bindingType & BIND_KIND_TYPE) {\n      if (!(bindingType & BIND_KIND_VALUE)) {\n        this.checkRedeclarationInScope(scope, name, bindingType, pos);\n        this.maybeExportDefined(scope, name);\n      }\n\n      scope.types.add(name);\n    }\n\n    if (bindingType & BIND_FLAGS_TS_ENUM) scope.enums.add(name);\n    if (bindingType & BIND_FLAGS_TS_CONST_ENUM) scope.constEnums.add(name);\n    if (bindingType & BIND_FLAGS_CLASS) scope.classes.add(name);\n  }\n\n  isRedeclaredInScope(scope, name, bindingType) {\n    if (scope.enums.has(name)) {\n      if (bindingType & BIND_FLAGS_TS_ENUM) {\n        const isConst = !!(bindingType & BIND_FLAGS_TS_CONST_ENUM);\n        const wasConst = scope.constEnums.has(name);\n        return isConst !== wasConst;\n      }\n\n      return true;\n    }\n\n    if (bindingType & BIND_FLAGS_CLASS && scope.classes.has(name)) {\n      if (scope.lexical.has(name)) {\n        return !!(bindingType & BIND_KIND_VALUE);\n      } else {\n        return false;\n      }\n    }\n\n    if (bindingType & BIND_KIND_TYPE && scope.types.has(name)) {\n      return true;\n    }\n\n    return super.isRedeclaredInScope(...arguments);\n  }\n\n  checkLocalExport(id) {\n    const topLevelScope = this.scopeStack[0];\n    const {\n      name\n    } = id;\n\n    if (!topLevelScope.types.has(name) && !topLevelScope.exportOnlyBindings.has(name)) {\n      super.checkLocalExport(id);\n    }\n  }\n\n}\n\nfunction nonNull(x) {\n  if (x == null) {\n    throw new Error(`Unexpected ${x} value.`);\n  }\n\n  return x;\n}\n\nfunction assert$1(x) {\n  if (!x) {\n    throw new Error(\"Assert fail\");\n  }\n}\n\nconst TSErrors = makeErrorTemplates({\n  AbstractMethodHasImplementation: \"Method '%0' cannot have an implementation because it is marked abstract.\",\n  AbstractPropertyHasInitializer: \"Property '%0' cannot have an initializer because it is marked abstract.\",\n  AccesorCannotDeclareThisParameter: \"'get' and 'set' accessors cannot declare 'this' parameters.\",\n  AccesorCannotHaveTypeParameters: \"An accessor cannot have type parameters.\",\n  ClassMethodHasDeclare: \"Class methods cannot have the 'declare' modifier.\",\n  ClassMethodHasReadonly: \"Class methods cannot have the 'readonly' modifier.\",\n  ConstructorHasTypeParameters: \"Type parameters cannot appear on a constructor declaration.\",\n  DeclareAccessor: \"'declare' is not allowed in %0ters.\",\n  DeclareClassFieldHasInitializer: \"Initializers are not allowed in ambient contexts.\",\n  DeclareFunctionHasImplementation: \"An implementation cannot be declared in ambient contexts.\",\n  DuplicateAccessibilityModifier: \"Accessibility modifier already seen.\",\n  DuplicateModifier: \"Duplicate modifier: '%0'.\",\n  EmptyHeritageClauseType: \"'%0' list cannot be empty.\",\n  EmptyTypeArguments: \"Type argument list cannot be empty.\",\n  EmptyTypeParameters: \"Type parameter list cannot be empty.\",\n  ExpectedAmbientAfterExportDeclare: \"'export declare' must be followed by an ambient declaration.\",\n  ImportAliasHasImportType: \"An import alias can not use 'import type'.\",\n  IncompatibleModifiers: \"'%0' modifier cannot be used with '%1' modifier.\",\n  IndexSignatureHasAbstract: \"Index signatures cannot have the 'abstract' modifier.\",\n  IndexSignatureHasAccessibility: \"Index signatures cannot have an accessibility modifier ('%0').\",\n  IndexSignatureHasDeclare: \"Index signatures cannot have the 'declare' modifier.\",\n  IndexSignatureHasOverride: \"'override' modifier cannot appear on an index signature.\",\n  IndexSignatureHasStatic: \"Index signatures cannot have the 'static' modifier.\",\n  InvalidModifierOnTypeMember: \"'%0' modifier cannot appear on a type member.\",\n  InvalidModifiersOrder: \"'%0' modifier must precede '%1' modifier.\",\n  InvalidTupleMemberLabel: \"Tuple members must be labeled with a simple identifier.\",\n  MissingInterfaceName: \"'interface' declarations must be followed by an identifier.\",\n  MixedLabeledAndUnlabeledElements: \"Tuple members must all have names or all not have names.\",\n  NonAbstractClassHasAbstractMethod: \"Abstract methods can only appear within an abstract class.\",\n  NonClassMethodPropertyHasAbstractModifer: \"'abstract' modifier can only appear on a class, method, or property declaration.\",\n  OptionalTypeBeforeRequired: \"A required element cannot follow an optional element.\",\n  OverrideNotInSubClass: \"This member cannot have an 'override' modifier because its containing class does not extend another class.\",\n  PatternIsOptional: \"A binding pattern parameter cannot be optional in an implementation signature.\",\n  PrivateElementHasAbstract: \"Private elements cannot have the 'abstract' modifier.\",\n  PrivateElementHasAccessibility: \"Private elements cannot have an accessibility modifier ('%0').\",\n  ReadonlyForMethodSignature: \"'readonly' modifier can only appear on a property declaration or index signature.\",\n  ReservedArrowTypeParam: \"This syntax is reserved in files with the .mts or .cts extension. Add a trailing comma, as in `<T,>() => ...`.\",\n  ReservedTypeAssertion: \"This syntax is reserved in files with the .mts or .cts extension. Use an `as` expression instead.\",\n  SetAccesorCannotHaveOptionalParameter: \"A 'set' accessor cannot have an optional parameter.\",\n  SetAccesorCannotHaveRestParameter: \"A 'set' accessor cannot have rest parameter.\",\n  SetAccesorCannotHaveReturnType: \"A 'set' accessor cannot have a return type annotation.\",\n  StaticBlockCannotHaveModifier: \"Static class blocks cannot have any modifier.\",\n  TypeAnnotationAfterAssign: \"Type annotations must come before default assignments, e.g. instead of `age = 25: number` use `age: number = 25`.\",\n  TypeImportCannotSpecifyDefaultAndNamed: \"A type-only import can specify a default import or named bindings, but not both.\",\n  TypeModifierIsUsedInTypeExports: \"The 'type' modifier cannot be used on a named export when 'export type' is used on its export statement.\",\n  TypeModifierIsUsedInTypeImports: \"The 'type' modifier cannot be used on a named import when 'import type' is used on its import statement.\",\n  UnexpectedParameterModifier: \"A parameter property is only allowed in a constructor implementation.\",\n  UnexpectedReadonly: \"'readonly' type modifier is only permitted on array and tuple literal types.\",\n  UnexpectedTypeAnnotation: \"Did not expect a type annotation here.\",\n  UnexpectedTypeCastInParameter: \"Unexpected type cast in parameter position.\",\n  UnsupportedImportTypeArgument: \"Argument in a type import must be a string literal.\",\n  UnsupportedParameterPropertyKind: \"A parameter property may not be declared using a binding pattern.\",\n  UnsupportedSignatureParameterKind: \"Name in a signature must be an Identifier, ObjectPattern or ArrayPattern, instead got %0.\"\n}, ErrorCodes.SyntaxError, \"typescript\");\n\nfunction keywordTypeFromName(value) {\n  switch (value) {\n    case \"any\":\n      return \"TSAnyKeyword\";\n\n    case \"boolean\":\n      return \"TSBooleanKeyword\";\n\n    case \"bigint\":\n      return \"TSBigIntKeyword\";\n\n    case \"never\":\n      return \"TSNeverKeyword\";\n\n    case \"number\":\n      return \"TSNumberKeyword\";\n\n    case \"object\":\n      return \"TSObjectKeyword\";\n\n    case \"string\":\n      return \"TSStringKeyword\";\n\n    case \"symbol\":\n      return \"TSSymbolKeyword\";\n\n    case \"undefined\":\n      return \"TSUndefinedKeyword\";\n\n    case \"unknown\":\n      return \"TSUnknownKeyword\";\n\n    default:\n      return undefined;\n  }\n}\n\nfunction tsIsAccessModifier(modifier) {\n  return modifier === \"private\" || modifier === \"public\" || modifier === \"protected\";\n}\n\nvar typescript = (superClass => class extends superClass {\n  getScopeHandler() {\n    return TypeScriptScopeHandler;\n  }\n\n  tsIsIdentifier() {\n    return tokenIsIdentifier(this.state.type);\n  }\n\n  tsTokenCanFollowModifier() {\n    return (this.match(0) || this.match(5) || this.match(49) || this.match(21) || this.match(128) || this.isLiteralPropertyName()) && !this.hasPrecedingLineBreak();\n  }\n\n  tsNextTokenCanFollowModifier() {\n    this.next();\n    return this.tsTokenCanFollowModifier();\n  }\n\n  tsParseModifier(allowedModifiers, stopOnStartOfClassStaticBlock) {\n    if (!tokenIsIdentifier(this.state.type)) {\n      return undefined;\n    }\n\n    const modifier = this.state.value;\n\n    if (allowedModifiers.indexOf(modifier) !== -1) {\n      if (stopOnStartOfClassStaticBlock && this.tsIsStartOfStaticBlocks()) {\n        return undefined;\n      }\n\n      if (this.tsTryParse(this.tsNextTokenCanFollowModifier.bind(this))) {\n        return modifier;\n      }\n    }\n\n    return undefined;\n  }\n\n  tsParseModifiers(modified, allowedModifiers, disallowedModifiers, errorTemplate, stopOnStartOfClassStaticBlock) {\n    const enforceOrder = (pos, modifier, before, after) => {\n      if (modifier === before && modified[after]) {\n        this.raise(pos, TSErrors.InvalidModifiersOrder, before, after);\n      }\n    };\n\n    const incompatible = (pos, modifier, mod1, mod2) => {\n      if (modified[mod1] && modifier === mod2 || modified[mod2] && modifier === mod1) {\n        this.raise(pos, TSErrors.IncompatibleModifiers, mod1, mod2);\n      }\n    };\n\n    for (;;) {\n      const startPos = this.state.start;\n      const modifier = this.tsParseModifier(allowedModifiers.concat(disallowedModifiers != null ? disallowedModifiers : []), stopOnStartOfClassStaticBlock);\n      if (!modifier) break;\n\n      if (tsIsAccessModifier(modifier)) {\n        if (modified.accessibility) {\n          this.raise(startPos, TSErrors.DuplicateAccessibilityModifier);\n        } else {\n          enforceOrder(startPos, modifier, modifier, \"override\");\n          enforceOrder(startPos, modifier, modifier, \"static\");\n          enforceOrder(startPos, modifier, modifier, \"readonly\");\n          modified.accessibility = modifier;\n        }\n      } else {\n        if (Object.hasOwnProperty.call(modified, modifier)) {\n          this.raise(startPos, TSErrors.DuplicateModifier, modifier);\n        } else {\n          enforceOrder(startPos, modifier, \"static\", \"readonly\");\n          enforceOrder(startPos, modifier, \"static\", \"override\");\n          enforceOrder(startPos, modifier, \"override\", \"readonly\");\n          enforceOrder(startPos, modifier, \"abstract\", \"override\");\n          incompatible(startPos, modifier, \"declare\", \"override\");\n          incompatible(startPos, modifier, \"static\", \"abstract\");\n        }\n\n        modified[modifier] = true;\n      }\n\n      if (disallowedModifiers != null && disallowedModifiers.includes(modifier)) {\n        this.raise(startPos, errorTemplate, modifier);\n      }\n    }\n  }\n\n  tsIsListTerminator(kind) {\n    switch (kind) {\n      case \"EnumMembers\":\n      case \"TypeMembers\":\n        return this.match(8);\n\n      case \"HeritageClauseElement\":\n        return this.match(5);\n\n      case \"TupleElementTypes\":\n        return this.match(3);\n\n      case \"TypeParametersOrArguments\":\n        return this.match(44);\n    }\n\n    throw new Error(\"Unreachable\");\n  }\n\n  tsParseList(kind, parseElement) {\n    const result = [];\n\n    while (!this.tsIsListTerminator(kind)) {\n      result.push(parseElement());\n    }\n\n    return result;\n  }\n\n  tsParseDelimitedList(kind, parseElement, refTrailingCommaPos) {\n    return nonNull(this.tsParseDelimitedListWorker(kind, parseElement, true, refTrailingCommaPos));\n  }\n\n  tsParseDelimitedListWorker(kind, parseElement, expectSuccess, refTrailingCommaPos) {\n    const result = [];\n    let trailingCommaPos = -1;\n\n    for (;;) {\n      if (this.tsIsListTerminator(kind)) {\n        break;\n      }\n\n      trailingCommaPos = -1;\n      const element = parseElement();\n\n      if (element == null) {\n        return undefined;\n      }\n\n      result.push(element);\n\n      if (this.eat(12)) {\n        trailingCommaPos = this.state.lastTokStart;\n        continue;\n      }\n\n      if (this.tsIsListTerminator(kind)) {\n        break;\n      }\n\n      if (expectSuccess) {\n        this.expect(12);\n      }\n\n      return undefined;\n    }\n\n    if (refTrailingCommaPos) {\n      refTrailingCommaPos.value = trailingCommaPos;\n    }\n\n    return result;\n  }\n\n  tsParseBracketedList(kind, parseElement, bracket, skipFirstToken, refTrailingCommaPos) {\n    if (!skipFirstToken) {\n      if (bracket) {\n        this.expect(0);\n      } else {\n        this.expect(43);\n      }\n    }\n\n    const result = this.tsParseDelimitedList(kind, parseElement, refTrailingCommaPos);\n\n    if (bracket) {\n      this.expect(3);\n    } else {\n      this.expect(44);\n    }\n\n    return result;\n  }\n\n  tsParseImportType() {\n    const node = this.startNode();\n    this.expect(77);\n    this.expect(10);\n\n    if (!this.match(123)) {\n      this.raise(this.state.start, TSErrors.UnsupportedImportTypeArgument);\n    }\n\n    node.argument = this.parseExprAtom();\n    this.expect(11);\n\n    if (this.eat(16)) {\n      node.qualifier = this.tsParseEntityName(true);\n    }\n\n    if (this.match(43)) {\n      node.typeParameters = this.tsParseTypeArguments();\n    }\n\n    return this.finishNode(node, \"TSImportType\");\n  }\n\n  tsParseEntityName(allowReservedWords) {\n    let entity = this.parseIdentifier();\n\n    while (this.eat(16)) {\n      const node = this.startNodeAtNode(entity);\n      node.left = entity;\n      node.right = this.parseIdentifier(allowReservedWords);\n      entity = this.finishNode(node, \"TSQualifiedName\");\n    }\n\n    return entity;\n  }\n\n  tsParseTypeReference() {\n    const node = this.startNode();\n    node.typeName = this.tsParseEntityName(false);\n\n    if (!this.hasPrecedingLineBreak() && this.match(43)) {\n      node.typeParameters = this.tsParseTypeArguments();\n    }\n\n    return this.finishNode(node, \"TSTypeReference\");\n  }\n\n  tsParseThisTypePredicate(lhs) {\n    this.next();\n    const node = this.startNodeAtNode(lhs);\n    node.parameterName = lhs;\n    node.typeAnnotation = this.tsParseTypeAnnotation(false);\n    node.asserts = false;\n    return this.finishNode(node, \"TSTypePredicate\");\n  }\n\n  tsParseThisTypeNode() {\n    const node = this.startNode();\n    this.next();\n    return this.finishNode(node, \"TSThisType\");\n  }\n\n  tsParseTypeQuery() {\n    const node = this.startNode();\n    this.expect(81);\n\n    if (this.match(77)) {\n      node.exprName = this.tsParseImportType();\n    } else {\n      node.exprName = this.tsParseEntityName(true);\n    }\n\n    return this.finishNode(node, \"TSTypeQuery\");\n  }\n\n  tsParseTypeParameter() {\n    const node = this.startNode();\n    node.name = this.tsParseTypeParameterName();\n    node.constraint = this.tsEatThenParseType(75);\n    node.default = this.tsEatThenParseType(27);\n    return this.finishNode(node, \"TSTypeParameter\");\n  }\n\n  tsTryParseTypeParameters() {\n    if (this.match(43)) {\n      return this.tsParseTypeParameters();\n    }\n  }\n\n  tsParseTypeParameters() {\n    const node = this.startNode();\n\n    if (this.match(43) || this.match(132)) {\n      this.next();\n    } else {\n      this.unexpected();\n    }\n\n    const refTrailingCommaPos = {\n      value: -1\n    };\n    node.params = this.tsParseBracketedList(\"TypeParametersOrArguments\", this.tsParseTypeParameter.bind(this), false, true, refTrailingCommaPos);\n\n    if (node.params.length === 0) {\n      this.raise(node.start, TSErrors.EmptyTypeParameters);\n    }\n\n    if (refTrailingCommaPos.value !== -1) {\n      this.addExtra(node, \"trailingComma\", refTrailingCommaPos.value);\n    }\n\n    return this.finishNode(node, \"TSTypeParameterDeclaration\");\n  }\n\n  tsTryNextParseConstantContext() {\n    if (this.lookahead().type === 69) {\n      this.next();\n      return this.tsParseTypeReference();\n    }\n\n    return null;\n  }\n\n  tsFillSignature(returnToken, signature) {\n    const returnTokenRequired = returnToken === 19;\n    signature.typeParameters = this.tsTryParseTypeParameters();\n    this.expect(10);\n    signature.parameters = this.tsParseBindingListForSignature();\n\n    if (returnTokenRequired) {\n      signature.typeAnnotation = this.tsParseTypeOrTypePredicateAnnotation(returnToken);\n    } else if (this.match(returnToken)) {\n      signature.typeAnnotation = this.tsParseTypeOrTypePredicateAnnotation(returnToken);\n    }\n  }\n\n  tsParseBindingListForSignature() {\n    return this.parseBindingList(11, 41).map(pattern => {\n      if (pattern.type !== \"Identifier\" && pattern.type !== \"RestElement\" && pattern.type !== \"ObjectPattern\" && pattern.type !== \"ArrayPattern\") {\n        this.raise(pattern.start, TSErrors.UnsupportedSignatureParameterKind, pattern.type);\n      }\n\n      return pattern;\n    });\n  }\n\n  tsParseTypeMemberSemicolon() {\n    if (!this.eat(12) && !this.isLineTerminator()) {\n      this.expect(13);\n    }\n  }\n\n  tsParseSignatureMember(kind, node) {\n    this.tsFillSignature(14, node);\n    this.tsParseTypeMemberSemicolon();\n    return this.finishNode(node, kind);\n  }\n\n  tsIsUnambiguouslyIndexSignature() {\n    this.next();\n\n    if (tokenIsIdentifier(this.state.type)) {\n      this.next();\n      return this.match(14);\n    }\n\n    return false;\n  }\n\n  tsTryParseIndexSignature(node) {\n    if (!(this.match(0) && this.tsLookAhead(this.tsIsUnambiguouslyIndexSignature.bind(this)))) {\n      return undefined;\n    }\n\n    this.expect(0);\n    const id = this.parseIdentifier();\n    id.typeAnnotation = this.tsParseTypeAnnotation();\n    this.resetEndLocation(id);\n    this.expect(3);\n    node.parameters = [id];\n    const type = this.tsTryParseTypeAnnotation();\n    if (type) node.typeAnnotation = type;\n    this.tsParseTypeMemberSemicolon();\n    return this.finishNode(node, \"TSIndexSignature\");\n  }\n\n  tsParsePropertyOrMethodSignature(node, readonly) {\n    if (this.eat(17)) node.optional = true;\n    const nodeAny = node;\n\n    if (this.match(10) || this.match(43)) {\n      if (readonly) {\n        this.raise(node.start, TSErrors.ReadonlyForMethodSignature);\n      }\n\n      const method = nodeAny;\n\n      if (method.kind && this.match(43)) {\n        this.raise(this.state.pos, TSErrors.AccesorCannotHaveTypeParameters);\n      }\n\n      this.tsFillSignature(14, method);\n      this.tsParseTypeMemberSemicolon();\n\n      if (method.kind === \"get\") {\n        if (method.parameters.length > 0) {\n          this.raise(this.state.pos, ErrorMessages.BadGetterArity);\n\n          if (this.isThisParam(method.parameters[0])) {\n            this.raise(this.state.pos, TSErrors.AccesorCannotDeclareThisParameter);\n          }\n        }\n      } else if (method.kind === \"set\") {\n        if (method.parameters.length !== 1) {\n          this.raise(this.state.pos, ErrorMessages.BadSetterArity);\n        } else {\n          const firstParameter = method.parameters[0];\n\n          if (this.isThisParam(firstParameter)) {\n            this.raise(this.state.pos, TSErrors.AccesorCannotDeclareThisParameter);\n          }\n\n          if (firstParameter.type === \"Identifier\" && firstParameter.optional) {\n            this.raise(this.state.pos, TSErrors.SetAccesorCannotHaveOptionalParameter);\n          }\n\n          if (firstParameter.type === \"RestElement\") {\n            this.raise(this.state.pos, TSErrors.SetAccesorCannotHaveRestParameter);\n          }\n        }\n\n        if (method.typeAnnotation) {\n          this.raise(method.typeAnnotation.start, TSErrors.SetAccesorCannotHaveReturnType);\n        }\n      } else {\n        method.kind = \"method\";\n      }\n\n      return this.finishNode(method, \"TSMethodSignature\");\n    } else {\n      const property = nodeAny;\n      if (readonly) property.readonly = true;\n      const type = this.tsTryParseTypeAnnotation();\n      if (type) property.typeAnnotation = type;\n      this.tsParseTypeMemberSemicolon();\n      return this.finishNode(property, \"TSPropertySignature\");\n    }\n  }\n\n  tsParseTypeMember() {\n    const node = this.startNode();\n\n    if (this.match(10) || this.match(43)) {\n      return this.tsParseSignatureMember(\"TSCallSignatureDeclaration\", node);\n    }\n\n    if (this.match(71)) {\n      const id = this.startNode();\n      this.next();\n\n      if (this.match(10) || this.match(43)) {\n        return this.tsParseSignatureMember(\"TSConstructSignatureDeclaration\", node);\n      } else {\n        node.key = this.createIdentifier(id, \"new\");\n        return this.tsParsePropertyOrMethodSignature(node, false);\n      }\n    }\n\n    this.tsParseModifiers(node, [\"readonly\"], [\"declare\", \"abstract\", \"private\", \"protected\", \"public\", \"static\", \"override\"], TSErrors.InvalidModifierOnTypeMember);\n    const idx = this.tsTryParseIndexSignature(node);\n\n    if (idx) {\n      return idx;\n    }\n\n    this.parsePropertyName(node);\n\n    if (!node.computed && node.key.type === \"Identifier\" && (node.key.name === \"get\" || node.key.name === \"set\") && this.tsTokenCanFollowModifier()) {\n      node.kind = node.key.name;\n      this.parsePropertyName(node);\n    }\n\n    return this.tsParsePropertyOrMethodSignature(node, !!node.readonly);\n  }\n\n  tsParseTypeLiteral() {\n    const node = this.startNode();\n    node.members = this.tsParseObjectTypeMembers();\n    return this.finishNode(node, \"TSTypeLiteral\");\n  }\n\n  tsParseObjectTypeMembers() {\n    this.expect(5);\n    const members = this.tsParseList(\"TypeMembers\", this.tsParseTypeMember.bind(this));\n    this.expect(8);\n    return members;\n  }\n\n  tsIsStartOfMappedType() {\n    this.next();\n\n    if (this.eat(47)) {\n      return this.isContextual(112);\n    }\n\n    if (this.isContextual(112)) {\n      this.next();\n    }\n\n    if (!this.match(0)) {\n      return false;\n    }\n\n    this.next();\n\n    if (!this.tsIsIdentifier()) {\n      return false;\n    }\n\n    this.next();\n    return this.match(52);\n  }\n\n  tsParseMappedTypeParameter() {\n    const node = this.startNode();\n    node.name = this.tsParseTypeParameterName();\n    node.constraint = this.tsExpectThenParseType(52);\n    return this.finishNode(node, \"TSTypeParameter\");\n  }\n\n  tsParseMappedType() {\n    const node = this.startNode();\n    this.expect(5);\n\n    if (this.match(47)) {\n      node.readonly = this.state.value;\n      this.next();\n      this.expectContextual(112);\n    } else if (this.eatContextual(112)) {\n      node.readonly = true;\n    }\n\n    this.expect(0);\n    node.typeParameter = this.tsParseMappedTypeParameter();\n    node.nameType = this.eatContextual(87) ? this.tsParseType() : null;\n    this.expect(3);\n\n    if (this.match(47)) {\n      node.optional = this.state.value;\n      this.next();\n      this.expect(17);\n    } else if (this.eat(17)) {\n      node.optional = true;\n    }\n\n    node.typeAnnotation = this.tsTryParseType();\n    this.semicolon();\n    this.expect(8);\n    return this.finishNode(node, \"TSMappedType\");\n  }\n\n  tsParseTupleType() {\n    const node = this.startNode();\n    node.elementTypes = this.tsParseBracketedList(\"TupleElementTypes\", this.tsParseTupleElementType.bind(this), true, false);\n    let seenOptionalElement = false;\n    let labeledElements = null;\n    node.elementTypes.forEach(elementNode => {\n      var _labeledElements;\n\n      let {\n        type\n      } = elementNode;\n\n      if (seenOptionalElement && type !== \"TSRestType\" && type !== \"TSOptionalType\" && !(type === \"TSNamedTupleMember\" && elementNode.optional)) {\n        this.raise(elementNode.start, TSErrors.OptionalTypeBeforeRequired);\n      }\n\n      seenOptionalElement = seenOptionalElement || type === \"TSNamedTupleMember\" && elementNode.optional || type === \"TSOptionalType\";\n\n      if (type === \"TSRestType\") {\n        elementNode = elementNode.typeAnnotation;\n        type = elementNode.type;\n      }\n\n      const isLabeled = type === \"TSNamedTupleMember\";\n      labeledElements = (_labeledElements = labeledElements) != null ? _labeledElements : isLabeled;\n\n      if (labeledElements !== isLabeled) {\n        this.raise(elementNode.start, TSErrors.MixedLabeledAndUnlabeledElements);\n      }\n    });\n    return this.finishNode(node, \"TSTupleType\");\n  }\n\n  tsParseTupleElementType() {\n    const {\n      start: startPos,\n      startLoc\n    } = this.state;\n    const rest = this.eat(21);\n    let type = this.tsParseType();\n    const optional = this.eat(17);\n    const labeled = this.eat(14);\n\n    if (labeled) {\n      const labeledNode = this.startNodeAtNode(type);\n      labeledNode.optional = optional;\n\n      if (type.type === \"TSTypeReference\" && !type.typeParameters && type.typeName.type === \"Identifier\") {\n        labeledNode.label = type.typeName;\n      } else {\n        this.raise(type.start, TSErrors.InvalidTupleMemberLabel);\n        labeledNode.label = type;\n      }\n\n      labeledNode.elementType = this.tsParseType();\n      type = this.finishNode(labeledNode, \"TSNamedTupleMember\");\n    } else if (optional) {\n      const optionalTypeNode = this.startNodeAtNode(type);\n      optionalTypeNode.typeAnnotation = type;\n      type = this.finishNode(optionalTypeNode, \"TSOptionalType\");\n    }\n\n    if (rest) {\n      const restNode = this.startNodeAt(startPos, startLoc);\n      restNode.typeAnnotation = type;\n      type = this.finishNode(restNode, \"TSRestType\");\n    }\n\n    return type;\n  }\n\n  tsParseParenthesizedType() {\n    const node = this.startNode();\n    this.expect(10);\n    node.typeAnnotation = this.tsParseType();\n    this.expect(11);\n    return this.finishNode(node, \"TSParenthesizedType\");\n  }\n\n  tsParseFunctionOrConstructorType(type, abstract) {\n    const node = this.startNode();\n\n    if (type === \"TSConstructorType\") {\n      node.abstract = !!abstract;\n      if (abstract) this.next();\n      this.next();\n    }\n\n    this.tsFillSignature(19, node);\n    return this.finishNode(node, type);\n  }\n\n  tsParseLiteralTypeNode() {\n    const node = this.startNode();\n\n    node.literal = (() => {\n      switch (this.state.type) {\n        case 124:\n        case 125:\n        case 123:\n        case 79:\n        case 80:\n          return this.parseExprAtom();\n\n        default:\n          throw this.unexpected();\n      }\n    })();\n\n    return this.finishNode(node, \"TSLiteralType\");\n  }\n\n  tsParseTemplateLiteralType() {\n    const node = this.startNode();\n    node.literal = this.parseTemplate(false);\n    return this.finishNode(node, \"TSLiteralType\");\n  }\n\n  parseTemplateSubstitution() {\n    if (this.state.inType) return this.tsParseType();\n    return super.parseTemplateSubstitution();\n  }\n\n  tsParseThisTypeOrThisTypePredicate() {\n    const thisKeyword = this.tsParseThisTypeNode();\n\n    if (this.isContextual(107) && !this.hasPrecedingLineBreak()) {\n      return this.tsParseThisTypePredicate(thisKeyword);\n    } else {\n      return thisKeyword;\n    }\n  }\n\n  tsParseNonArrayType() {\n    switch (this.state.type) {\n      case 123:\n      case 124:\n      case 125:\n      case 79:\n      case 80:\n        return this.tsParseLiteralTypeNode();\n\n      case 47:\n        if (this.state.value === \"-\") {\n          const node = this.startNode();\n          const nextToken = this.lookahead();\n\n          if (nextToken.type !== 124 && nextToken.type !== 125) {\n            throw this.unexpected();\n          }\n\n          node.literal = this.parseMaybeUnary();\n          return this.finishNode(node, \"TSLiteralType\");\n        }\n\n        break;\n\n      case 72:\n        return this.tsParseThisTypeOrThisTypePredicate();\n\n      case 81:\n        return this.tsParseTypeQuery();\n\n      case 77:\n        return this.tsParseImportType();\n\n      case 5:\n        return this.tsLookAhead(this.tsIsStartOfMappedType.bind(this)) ? this.tsParseMappedType() : this.tsParseTypeLiteral();\n\n      case 0:\n        return this.tsParseTupleType();\n\n      case 10:\n        return this.tsParseParenthesizedType();\n\n      case 22:\n        return this.tsParseTemplateLiteralType();\n\n      default:\n        {\n          const {\n            type\n          } = this.state;\n\n          if (tokenIsIdentifier(type) || type === 82 || type === 78) {\n            const nodeType = type === 82 ? \"TSVoidKeyword\" : type === 78 ? \"TSNullKeyword\" : keywordTypeFromName(this.state.value);\n\n            if (nodeType !== undefined && this.lookaheadCharCode() !== 46) {\n              const node = this.startNode();\n              this.next();\n              return this.finishNode(node, nodeType);\n            }\n\n            return this.tsParseTypeReference();\n          }\n        }\n    }\n\n    throw this.unexpected();\n  }\n\n  tsParseArrayTypeOrHigher() {\n    let type = this.tsParseNonArrayType();\n\n    while (!this.hasPrecedingLineBreak() && this.eat(0)) {\n      if (this.match(3)) {\n        const node = this.startNodeAtNode(type);\n        node.elementType = type;\n        this.expect(3);\n        type = this.finishNode(node, \"TSArrayType\");\n      } else {\n        const node = this.startNodeAtNode(type);\n        node.objectType = type;\n        node.indexType = this.tsParseType();\n        this.expect(3);\n        type = this.finishNode(node, \"TSIndexedAccessType\");\n      }\n    }\n\n    return type;\n  }\n\n  tsParseTypeOperator() {\n    const node = this.startNode();\n    const operator = this.state.value;\n    this.next();\n    node.operator = operator;\n    node.typeAnnotation = this.tsParseTypeOperatorOrHigher();\n\n    if (operator === \"readonly\") {\n      this.tsCheckTypeAnnotationForReadOnly(node);\n    }\n\n    return this.finishNode(node, \"TSTypeOperator\");\n  }\n\n  tsCheckTypeAnnotationForReadOnly(node) {\n    switch (node.typeAnnotation.type) {\n      case \"TSTupleType\":\n      case \"TSArrayType\":\n        return;\n\n      default:\n        this.raise(node.start, TSErrors.UnexpectedReadonly);\n    }\n  }\n\n  tsParseInferType() {\n    const node = this.startNode();\n    this.expectContextual(106);\n    const typeParameter = this.startNode();\n    typeParameter.name = this.tsParseTypeParameterName();\n    node.typeParameter = this.finishNode(typeParameter, \"TSTypeParameter\");\n    return this.finishNode(node, \"TSInferType\");\n  }\n\n  tsParseTypeOperatorOrHigher() {\n    const isTypeOperator = tokenIsTSTypeOperator(this.state.type) && !this.state.containsEsc;\n    return isTypeOperator ? this.tsParseTypeOperator() : this.isContextual(106) ? this.tsParseInferType() : this.tsParseArrayTypeOrHigher();\n  }\n\n  tsParseUnionOrIntersectionType(kind, parseConstituentType, operator) {\n    const node = this.startNode();\n    const hasLeadingOperator = this.eat(operator);\n    const types = [];\n\n    do {\n      types.push(parseConstituentType());\n    } while (this.eat(operator));\n\n    if (types.length === 1 && !hasLeadingOperator) {\n      return types[0];\n    }\n\n    node.types = types;\n    return this.finishNode(node, kind);\n  }\n\n  tsParseIntersectionTypeOrHigher() {\n    return this.tsParseUnionOrIntersectionType(\"TSIntersectionType\", this.tsParseTypeOperatorOrHigher.bind(this), 41);\n  }\n\n  tsParseUnionTypeOrHigher() {\n    return this.tsParseUnionOrIntersectionType(\"TSUnionType\", this.tsParseIntersectionTypeOrHigher.bind(this), 39);\n  }\n\n  tsIsStartOfFunctionType() {\n    if (this.match(43)) {\n      return true;\n    }\n\n    return this.match(10) && this.tsLookAhead(this.tsIsUnambiguouslyStartOfFunctionType.bind(this));\n  }\n\n  tsSkipParameterStart() {\n    if (tokenIsIdentifier(this.state.type) || this.match(72)) {\n      this.next();\n      return true;\n    }\n\n    if (this.match(5)) {\n      let braceStackCounter = 1;\n      this.next();\n\n      while (braceStackCounter > 0) {\n        if (this.match(5)) {\n          ++braceStackCounter;\n        } else if (this.match(8)) {\n          --braceStackCounter;\n        }\n\n        this.next();\n      }\n\n      return true;\n    }\n\n    if (this.match(0)) {\n      let braceStackCounter = 1;\n      this.next();\n\n      while (braceStackCounter > 0) {\n        if (this.match(0)) {\n          ++braceStackCounter;\n        } else if (this.match(3)) {\n          --braceStackCounter;\n        }\n\n        this.next();\n      }\n\n      return true;\n    }\n\n    return false;\n  }\n\n  tsIsUnambiguouslyStartOfFunctionType() {\n    this.next();\n\n    if (this.match(11) || this.match(21)) {\n      return true;\n    }\n\n    if (this.tsSkipParameterStart()) {\n      if (this.match(14) || this.match(12) || this.match(17) || this.match(27)) {\n        return true;\n      }\n\n      if (this.match(11)) {\n        this.next();\n\n        if (this.match(19)) {\n          return true;\n        }\n      }\n    }\n\n    return false;\n  }\n\n  tsParseTypeOrTypePredicateAnnotation(returnToken) {\n    return this.tsInType(() => {\n      const t = this.startNode();\n      this.expect(returnToken);\n      const node = this.startNode();\n      const asserts = !!this.tsTryParse(this.tsParseTypePredicateAsserts.bind(this));\n\n      if (asserts && this.match(72)) {\n        let thisTypePredicate = this.tsParseThisTypeOrThisTypePredicate();\n\n        if (thisTypePredicate.type === \"TSThisType\") {\n          node.parameterName = thisTypePredicate;\n          node.asserts = true;\n          node.typeAnnotation = null;\n          thisTypePredicate = this.finishNode(node, \"TSTypePredicate\");\n        } else {\n          this.resetStartLocationFromNode(thisTypePredicate, node);\n          thisTypePredicate.asserts = true;\n        }\n\n        t.typeAnnotation = thisTypePredicate;\n        return this.finishNode(t, \"TSTypeAnnotation\");\n      }\n\n      const typePredicateVariable = this.tsIsIdentifier() && this.tsTryParse(this.tsParseTypePredicatePrefix.bind(this));\n\n      if (!typePredicateVariable) {\n        if (!asserts) {\n          return this.tsParseTypeAnnotation(false, t);\n        }\n\n        node.parameterName = this.parseIdentifier();\n        node.asserts = asserts;\n        node.typeAnnotation = null;\n        t.typeAnnotation = this.finishNode(node, \"TSTypePredicate\");\n        return this.finishNode(t, \"TSTypeAnnotation\");\n      }\n\n      const type = this.tsParseTypeAnnotation(false);\n      node.parameterName = typePredicateVariable;\n      node.typeAnnotation = type;\n      node.asserts = asserts;\n      t.typeAnnotation = this.finishNode(node, \"TSTypePredicate\");\n      return this.finishNode(t, \"TSTypeAnnotation\");\n    });\n  }\n\n  tsTryParseTypeOrTypePredicateAnnotation() {\n    return this.match(14) ? this.tsParseTypeOrTypePredicateAnnotation(14) : undefined;\n  }\n\n  tsTryParseTypeAnnotation() {\n    return this.match(14) ? this.tsParseTypeAnnotation() : undefined;\n  }\n\n  tsTryParseType() {\n    return this.tsEatThenParseType(14);\n  }\n\n  tsParseTypePredicatePrefix() {\n    const id = this.parseIdentifier();\n\n    if (this.isContextual(107) && !this.hasPrecedingLineBreak()) {\n      this.next();\n      return id;\n    }\n  }\n\n  tsParseTypePredicateAsserts() {\n    if (this.state.type !== 100) {\n      return false;\n    }\n\n    const containsEsc = this.state.containsEsc;\n    this.next();\n\n    if (!tokenIsIdentifier(this.state.type) && !this.match(72)) {\n      return false;\n    }\n\n    if (containsEsc) {\n      this.raise(this.state.lastTokStart, ErrorMessages.InvalidEscapedReservedWord, \"asserts\");\n    }\n\n    return true;\n  }\n\n  tsParseTypeAnnotation(eatColon = true, t = this.startNode()) {\n    this.tsInType(() => {\n      if (eatColon) this.expect(14);\n      t.typeAnnotation = this.tsParseType();\n    });\n    return this.finishNode(t, \"TSTypeAnnotation\");\n  }\n\n  tsParseType() {\n    assert$1(this.state.inType);\n    const type = this.tsParseNonConditionalType();\n\n    if (this.hasPrecedingLineBreak() || !this.eat(75)) {\n      return type;\n    }\n\n    const node = this.startNodeAtNode(type);\n    node.checkType = type;\n    node.extendsType = this.tsParseNonConditionalType();\n    this.expect(17);\n    node.trueType = this.tsParseType();\n    this.expect(14);\n    node.falseType = this.tsParseType();\n    return this.finishNode(node, \"TSConditionalType\");\n  }\n\n  isAbstractConstructorSignature() {\n    return this.isContextual(114) && this.lookahead().type === 71;\n  }\n\n  tsParseNonConditionalType() {\n    if (this.tsIsStartOfFunctionType()) {\n      return this.tsParseFunctionOrConstructorType(\"TSFunctionType\");\n    }\n\n    if (this.match(71)) {\n      return this.tsParseFunctionOrConstructorType(\"TSConstructorType\");\n    } else if (this.isAbstractConstructorSignature()) {\n      return this.tsParseFunctionOrConstructorType(\"TSConstructorType\", true);\n    }\n\n    return this.tsParseUnionTypeOrHigher();\n  }\n\n  tsParseTypeAssertion() {\n    if (this.getPluginOption(\"typescript\", \"disallowAmbiguousJSXLike\")) {\n      this.raise(this.state.start, TSErrors.ReservedTypeAssertion);\n    }\n\n    const node = this.startNode();\n\n    const _const = this.tsTryNextParseConstantContext();\n\n    node.typeAnnotation = _const || this.tsNextThenParseType();\n    this.expect(44);\n    node.expression = this.parseMaybeUnary();\n    return this.finishNode(node, \"TSTypeAssertion\");\n  }\n\n  tsParseHeritageClause(descriptor) {\n    const originalStart = this.state.start;\n    const delimitedList = this.tsParseDelimitedList(\"HeritageClauseElement\", this.tsParseExpressionWithTypeArguments.bind(this));\n\n    if (!delimitedList.length) {\n      this.raise(originalStart, TSErrors.EmptyHeritageClauseType, descriptor);\n    }\n\n    return delimitedList;\n  }\n\n  tsParseExpressionWithTypeArguments() {\n    const node = this.startNode();\n    node.expression = this.tsParseEntityName(false);\n\n    if (this.match(43)) {\n      node.typeParameters = this.tsParseTypeArguments();\n    }\n\n    return this.finishNode(node, \"TSExpressionWithTypeArguments\");\n  }\n\n  tsParseInterfaceDeclaration(node) {\n    if (tokenIsIdentifier(this.state.type)) {\n      node.id = this.parseIdentifier();\n      this.checkLVal(node.id, \"typescript interface declaration\", BIND_TS_INTERFACE);\n    } else {\n      node.id = null;\n      this.raise(this.state.start, TSErrors.MissingInterfaceName);\n    }\n\n    node.typeParameters = this.tsTryParseTypeParameters();\n\n    if (this.eat(75)) {\n      node.extends = this.tsParseHeritageClause(\"extends\");\n    }\n\n    const body = this.startNode();\n    body.body = this.tsInType(this.tsParseObjectTypeMembers.bind(this));\n    node.body = this.finishNode(body, \"TSInterfaceBody\");\n    return this.finishNode(node, \"TSInterfaceDeclaration\");\n  }\n\n  tsParseTypeAliasDeclaration(node) {\n    node.id = this.parseIdentifier();\n    this.checkLVal(node.id, \"typescript type alias\", BIND_TS_TYPE);\n    node.typeParameters = this.tsTryParseTypeParameters();\n    node.typeAnnotation = this.tsInType(() => {\n      this.expect(27);\n\n      if (this.isContextual(105) && this.lookahead().type !== 16) {\n        const node = this.startNode();\n        this.next();\n        return this.finishNode(node, \"TSIntrinsicKeyword\");\n      }\n\n      return this.tsParseType();\n    });\n    this.semicolon();\n    return this.finishNode(node, \"TSTypeAliasDeclaration\");\n  }\n\n  tsInNoContext(cb) {\n    const oldContext = this.state.context;\n    this.state.context = [oldContext[0]];\n\n    try {\n      return cb();\n    } finally {\n      this.state.context = oldContext;\n    }\n  }\n\n  tsInType(cb) {\n    const oldInType = this.state.inType;\n    this.state.inType = true;\n\n    try {\n      return cb();\n    } finally {\n      this.state.inType = oldInType;\n    }\n  }\n\n  tsEatThenParseType(token) {\n    return !this.match(token) ? undefined : this.tsNextThenParseType();\n  }\n\n  tsExpectThenParseType(token) {\n    return this.tsDoThenParseType(() => this.expect(token));\n  }\n\n  tsNextThenParseType() {\n    return this.tsDoThenParseType(() => this.next());\n  }\n\n  tsDoThenParseType(cb) {\n    return this.tsInType(() => {\n      cb();\n      return this.tsParseType();\n    });\n  }\n\n  tsParseEnumMember() {\n    const node = this.startNode();\n    node.id = this.match(123) ? this.parseExprAtom() : this.parseIdentifier(true);\n\n    if (this.eat(27)) {\n      node.initializer = this.parseMaybeAssignAllowIn();\n    }\n\n    return this.finishNode(node, \"TSEnumMember\");\n  }\n\n  tsParseEnumDeclaration(node, isConst) {\n    if (isConst) node.const = true;\n    node.id = this.parseIdentifier();\n    this.checkLVal(node.id, \"typescript enum declaration\", isConst ? BIND_TS_CONST_ENUM : BIND_TS_ENUM);\n    this.expect(5);\n    node.members = this.tsParseDelimitedList(\"EnumMembers\", this.tsParseEnumMember.bind(this));\n    this.expect(8);\n    return this.finishNode(node, \"TSEnumDeclaration\");\n  }\n\n  tsParseModuleBlock() {\n    const node = this.startNode();\n    this.scope.enter(SCOPE_OTHER);\n    this.expect(5);\n    this.parseBlockOrModuleBlockBody(node.body = [], undefined, true, 8);\n    this.scope.exit();\n    return this.finishNode(node, \"TSModuleBlock\");\n  }\n\n  tsParseModuleOrNamespaceDeclaration(node, nested = false) {\n    node.id = this.parseIdentifier();\n\n    if (!nested) {\n      this.checkLVal(node.id, \"module or namespace declaration\", BIND_TS_NAMESPACE);\n    }\n\n    if (this.eat(16)) {\n      const inner = this.startNode();\n      this.tsParseModuleOrNamespaceDeclaration(inner, true);\n      node.body = inner;\n    } else {\n      this.scope.enter(SCOPE_TS_MODULE);\n      this.prodParam.enter(PARAM);\n      node.body = this.tsParseModuleBlock();\n      this.prodParam.exit();\n      this.scope.exit();\n    }\n\n    return this.finishNode(node, \"TSModuleDeclaration\");\n  }\n\n  tsParseAmbientExternalModuleDeclaration(node) {\n    if (this.isContextual(103)) {\n      node.global = true;\n      node.id = this.parseIdentifier();\n    } else if (this.match(123)) {\n      node.id = this.parseExprAtom();\n    } else {\n      this.unexpected();\n    }\n\n    if (this.match(5)) {\n      this.scope.enter(SCOPE_TS_MODULE);\n      this.prodParam.enter(PARAM);\n      node.body = this.tsParseModuleBlock();\n      this.prodParam.exit();\n      this.scope.exit();\n    } else {\n      this.semicolon();\n    }\n\n    return this.finishNode(node, \"TSModuleDeclaration\");\n  }\n\n  tsParseImportEqualsDeclaration(node, isExport) {\n    node.isExport = isExport || false;\n    node.id = this.parseIdentifier();\n    this.checkLVal(node.id, \"import equals declaration\", BIND_LEXICAL);\n    this.expect(27);\n    const moduleReference = this.tsParseModuleReference();\n\n    if (node.importKind === \"type\" && moduleReference.type !== \"TSExternalModuleReference\") {\n      this.raise(moduleReference.start, TSErrors.ImportAliasHasImportType);\n    }\n\n    node.moduleReference = moduleReference;\n    this.semicolon();\n    return this.finishNode(node, \"TSImportEqualsDeclaration\");\n  }\n\n  tsIsExternalModuleReference() {\n    return this.isContextual(110) && this.lookaheadCharCode() === 40;\n  }\n\n  tsParseModuleReference() {\n    return this.tsIsExternalModuleReference() ? this.tsParseExternalModuleReference() : this.tsParseEntityName(false);\n  }\n\n  tsParseExternalModuleReference() {\n    const node = this.startNode();\n    this.expectContextual(110);\n    this.expect(10);\n\n    if (!this.match(123)) {\n      throw this.unexpected();\n    }\n\n    node.expression = this.parseExprAtom();\n    this.expect(11);\n    return this.finishNode(node, \"TSExternalModuleReference\");\n  }\n\n  tsLookAhead(f) {\n    const state = this.state.clone();\n    const res = f();\n    this.state = state;\n    return res;\n  }\n\n  tsTryParseAndCatch(f) {\n    const result = this.tryParse(abort => f() || abort());\n    if (result.aborted || !result.node) return undefined;\n    if (result.error) this.state = result.failState;\n    return result.node;\n  }\n\n  tsTryParse(f) {\n    const state = this.state.clone();\n    const result = f();\n\n    if (result !== undefined && result !== false) {\n      return result;\n    } else {\n      this.state = state;\n      return undefined;\n    }\n  }\n\n  tsTryParseDeclare(nany) {\n    if (this.isLineTerminator()) {\n      return;\n    }\n\n    let starttype = this.state.type;\n    let kind;\n\n    if (this.isContextual(93)) {\n      starttype = 68;\n      kind = \"let\";\n    }\n\n    return this.tsInAmbientContext(() => {\n      switch (starttype) {\n        case 62:\n          nany.declare = true;\n          return this.parseFunctionStatement(nany, false, true);\n\n        case 74:\n          nany.declare = true;\n          return this.parseClass(nany, true, false);\n\n        case 69:\n          if (this.match(69) && this.isLookaheadContextual(\"enum\")) {\n            this.expect(69);\n            this.expectContextual(116);\n            return this.tsParseEnumDeclaration(nany, true);\n          }\n\n        case 68:\n          kind = kind || this.state.value;\n          return this.parseVarStatement(nany, kind);\n\n        case 103:\n          return this.tsParseAmbientExternalModuleDeclaration(nany);\n\n        default:\n          {\n            if (tokenIsIdentifier(starttype)) {\n              return this.tsParseDeclaration(nany, this.state.value, true);\n            }\n          }\n      }\n    });\n  }\n\n  tsTryParseExportDeclaration() {\n    return this.tsParseDeclaration(this.startNode(), this.state.value, true);\n  }\n\n  tsParseExpressionStatement(node, expr) {\n    switch (expr.name) {\n      case \"declare\":\n        {\n          const declaration = this.tsTryParseDeclare(node);\n\n          if (declaration) {\n            declaration.declare = true;\n            return declaration;\n          }\n\n          break;\n        }\n\n      case \"global\":\n        if (this.match(5)) {\n          this.scope.enter(SCOPE_TS_MODULE);\n          this.prodParam.enter(PARAM);\n          const mod = node;\n          mod.global = true;\n          mod.id = expr;\n          mod.body = this.tsParseModuleBlock();\n          this.scope.exit();\n          this.prodParam.exit();\n          return this.finishNode(mod, \"TSModuleDeclaration\");\n        }\n\n        break;\n\n      default:\n        return this.tsParseDeclaration(node, expr.name, false);\n    }\n  }\n\n  tsParseDeclaration(node, value, next) {\n    switch (value) {\n      case \"abstract\":\n        if (this.tsCheckLineTerminator(next) && (this.match(74) || tokenIsIdentifier(this.state.type))) {\n          return this.tsParseAbstractDeclaration(node);\n        }\n\n        break;\n\n      case \"enum\":\n        if (next || tokenIsIdentifier(this.state.type)) {\n          if (next) this.next();\n          return this.tsParseEnumDeclaration(node, false);\n        }\n\n        break;\n\n      case \"interface\":\n        if (this.tsCheckLineTerminator(next) && tokenIsIdentifier(this.state.type)) {\n          return this.tsParseInterfaceDeclaration(node);\n        }\n\n        break;\n\n      case \"module\":\n        if (this.tsCheckLineTerminator(next)) {\n          if (this.match(123)) {\n            return this.tsParseAmbientExternalModuleDeclaration(node);\n          } else if (tokenIsIdentifier(this.state.type)) {\n            return this.tsParseModuleOrNamespaceDeclaration(node);\n          }\n        }\n\n        break;\n\n      case \"namespace\":\n        if (this.tsCheckLineTerminator(next) && tokenIsIdentifier(this.state.type)) {\n          return this.tsParseModuleOrNamespaceDeclaration(node);\n        }\n\n        break;\n\n      case \"type\":\n        if (this.tsCheckLineTerminator(next) && tokenIsIdentifier(this.state.type)) {\n          return this.tsParseTypeAliasDeclaration(node);\n        }\n\n        break;\n    }\n  }\n\n  tsCheckLineTerminator(next) {\n    if (next) {\n      if (this.hasFollowingLineBreak()) return false;\n      this.next();\n      return true;\n    }\n\n    return !this.isLineTerminator();\n  }\n\n  tsTryParseGenericAsyncArrowFunction(startPos, startLoc) {\n    if (!this.match(43)) {\n      return undefined;\n    }\n\n    const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;\n    this.state.maybeInArrowParameters = true;\n    const res = this.tsTryParseAndCatch(() => {\n      const node = this.startNodeAt(startPos, startLoc);\n      node.typeParameters = this.tsParseTypeParameters();\n      super.parseFunctionParams(node);\n      node.returnType = this.tsTryParseTypeOrTypePredicateAnnotation();\n      this.expect(19);\n      return node;\n    });\n    this.state.maybeInArrowParameters = oldMaybeInArrowParameters;\n\n    if (!res) {\n      return undefined;\n    }\n\n    return this.parseArrowExpression(res, null, true);\n  }\n\n  tsParseTypeArguments() {\n    const node = this.startNode();\n    node.params = this.tsInType(() => this.tsInNoContext(() => {\n      this.expect(43);\n      return this.tsParseDelimitedList(\"TypeParametersOrArguments\", this.tsParseType.bind(this));\n    }));\n\n    if (node.params.length === 0) {\n      this.raise(node.start, TSErrors.EmptyTypeArguments);\n    }\n\n    this.expect(44);\n    return this.finishNode(node, \"TSTypeParameterInstantiation\");\n  }\n\n  tsIsDeclarationStart() {\n    return tokenIsTSDeclarationStart(this.state.type);\n  }\n\n  isExportDefaultSpecifier() {\n    if (this.tsIsDeclarationStart()) return false;\n    return super.isExportDefaultSpecifier();\n  }\n\n  parseAssignableListItem(allowModifiers, decorators) {\n    const startPos = this.state.start;\n    const startLoc = this.state.startLoc;\n    let accessibility;\n    let readonly = false;\n    let override = false;\n\n    if (allowModifiers !== undefined) {\n      const modified = {};\n      this.tsParseModifiers(modified, [\"public\", \"private\", \"protected\", \"override\", \"readonly\"]);\n      accessibility = modified.accessibility;\n      override = modified.override;\n      readonly = modified.readonly;\n\n      if (allowModifiers === false && (accessibility || readonly || override)) {\n        this.raise(startPos, TSErrors.UnexpectedParameterModifier);\n      }\n    }\n\n    const left = this.parseMaybeDefault();\n    this.parseAssignableListItemTypes(left);\n    const elt = this.parseMaybeDefault(left.start, left.loc.start, left);\n\n    if (accessibility || readonly || override) {\n      const pp = this.startNodeAt(startPos, startLoc);\n\n      if (decorators.length) {\n        pp.decorators = decorators;\n      }\n\n      if (accessibility) pp.accessibility = accessibility;\n      if (readonly) pp.readonly = readonly;\n      if (override) pp.override = override;\n\n      if (elt.type !== \"Identifier\" && elt.type !== \"AssignmentPattern\") {\n        this.raise(pp.start, TSErrors.UnsupportedParameterPropertyKind);\n      }\n\n      pp.parameter = elt;\n      return this.finishNode(pp, \"TSParameterProperty\");\n    }\n\n    if (decorators.length) {\n      left.decorators = decorators;\n    }\n\n    return elt;\n  }\n\n  parseFunctionBodyAndFinish(node, type, isMethod = false) {\n    if (this.match(14)) {\n      node.returnType = this.tsParseTypeOrTypePredicateAnnotation(14);\n    }\n\n    const bodilessType = type === \"FunctionDeclaration\" ? \"TSDeclareFunction\" : type === \"ClassMethod\" || type === \"ClassPrivateMethod\" ? \"TSDeclareMethod\" : undefined;\n\n    if (bodilessType && !this.match(5) && this.isLineTerminator()) {\n      this.finishNode(node, bodilessType);\n      return;\n    }\n\n    if (bodilessType === \"TSDeclareFunction\" && this.state.isAmbientContext) {\n      this.raise(node.start, TSErrors.DeclareFunctionHasImplementation);\n\n      if (node.declare) {\n        super.parseFunctionBodyAndFinish(node, bodilessType, isMethod);\n        return;\n      }\n    }\n\n    super.parseFunctionBodyAndFinish(node, type, isMethod);\n  }\n\n  registerFunctionStatementId(node) {\n    if (!node.body && node.id) {\n      this.checkLVal(node.id, \"function name\", BIND_TS_AMBIENT);\n    } else {\n      super.registerFunctionStatementId(...arguments);\n    }\n  }\n\n  tsCheckForInvalidTypeCasts(items) {\n    items.forEach(node => {\n      if ((node == null ? void 0 : node.type) === \"TSTypeCastExpression\") {\n        this.raise(node.typeAnnotation.start, TSErrors.UnexpectedTypeAnnotation);\n      }\n    });\n  }\n\n  toReferencedList(exprList, isInParens) {\n    this.tsCheckForInvalidTypeCasts(exprList);\n    return exprList;\n  }\n\n  parseArrayLike(...args) {\n    const node = super.parseArrayLike(...args);\n\n    if (node.type === \"ArrayExpression\") {\n      this.tsCheckForInvalidTypeCasts(node.elements);\n    }\n\n    return node;\n  }\n\n  parseSubscript(base, startPos, startLoc, noCalls, state) {\n    if (!this.hasPrecedingLineBreak() && this.match(33)) {\n      this.state.canStartJSXElement = false;\n      this.next();\n      const nonNullExpression = this.startNodeAt(startPos, startLoc);\n      nonNullExpression.expression = base;\n      return this.finishNode(nonNullExpression, \"TSNonNullExpression\");\n    }\n\n    let isOptionalCall = false;\n\n    if (this.match(18) && this.lookaheadCharCode() === 60) {\n      if (noCalls) {\n        state.stop = true;\n        return base;\n      }\n\n      state.optionalChainMember = isOptionalCall = true;\n      this.next();\n    }\n\n    if (this.match(43)) {\n      let missingParenErrorPos;\n      const result = this.tsTryParseAndCatch(() => {\n        if (!noCalls && this.atPossibleAsyncArrow(base)) {\n          const asyncArrowFn = this.tsTryParseGenericAsyncArrowFunction(startPos, startLoc);\n\n          if (asyncArrowFn) {\n            return asyncArrowFn;\n          }\n        }\n\n        const node = this.startNodeAt(startPos, startLoc);\n        node.callee = base;\n        const typeArguments = this.tsParseTypeArguments();\n\n        if (typeArguments) {\n          if (isOptionalCall && !this.match(10)) {\n            missingParenErrorPos = this.state.pos;\n            this.unexpected();\n          }\n\n          if (!noCalls && this.eat(10)) {\n            node.arguments = this.parseCallExpressionArguments(11, false);\n            this.tsCheckForInvalidTypeCasts(node.arguments);\n            node.typeParameters = typeArguments;\n\n            if (state.optionalChainMember) {\n              node.optional = isOptionalCall;\n            }\n\n            return this.finishCallExpression(node, state.optionalChainMember);\n          } else if (this.match(22)) {\n            const result = this.parseTaggedTemplateExpression(base, startPos, startLoc, state);\n            result.typeParameters = typeArguments;\n            return result;\n          }\n        }\n\n        this.unexpected();\n      });\n\n      if (missingParenErrorPos) {\n        this.unexpected(missingParenErrorPos, 10);\n      }\n\n      if (result) return result;\n    }\n\n    return super.parseSubscript(base, startPos, startLoc, noCalls, state);\n  }\n\n  parseNewArguments(node) {\n    if (this.match(43)) {\n      const typeParameters = this.tsTryParseAndCatch(() => {\n        const args = this.tsParseTypeArguments();\n        if (!this.match(10)) this.unexpected();\n        return args;\n      });\n\n      if (typeParameters) {\n        node.typeParameters = typeParameters;\n      }\n    }\n\n    super.parseNewArguments(node);\n  }\n\n  parseExprOp(left, leftStartPos, leftStartLoc, minPrec) {\n    if (tokenOperatorPrecedence(52) > minPrec && !this.hasPrecedingLineBreak() && this.isContextual(87)) {\n      const node = this.startNodeAt(leftStartPos, leftStartLoc);\n      node.expression = left;\n\n      const _const = this.tsTryNextParseConstantContext();\n\n      if (_const) {\n        node.typeAnnotation = _const;\n      } else {\n        node.typeAnnotation = this.tsNextThenParseType();\n      }\n\n      this.finishNode(node, \"TSAsExpression\");\n      this.reScan_lt_gt();\n      return this.parseExprOp(node, leftStartPos, leftStartLoc, minPrec);\n    }\n\n    return super.parseExprOp(left, leftStartPos, leftStartLoc, minPrec);\n  }\n\n  checkReservedWord(word, startLoc, checkKeywords, isBinding) {}\n\n  checkDuplicateExports() {}\n\n  parseImport(node) {\n    node.importKind = \"value\";\n\n    if (tokenIsIdentifier(this.state.type) || this.match(49) || this.match(5)) {\n      let ahead = this.lookahead();\n\n      if (this.isContextual(120) && ahead.type !== 12 && ahead.type !== 91 && ahead.type !== 27) {\n        node.importKind = \"type\";\n        this.next();\n        ahead = this.lookahead();\n      }\n\n      if (tokenIsIdentifier(this.state.type) && ahead.type === 27) {\n        return this.tsParseImportEqualsDeclaration(node);\n      }\n    }\n\n    const importNode = super.parseImport(node);\n\n    if (importNode.importKind === \"type\" && importNode.specifiers.length > 1 && importNode.specifiers[0].type === \"ImportDefaultSpecifier\") {\n      this.raise(importNode.start, TSErrors.TypeImportCannotSpecifyDefaultAndNamed);\n    }\n\n    return importNode;\n  }\n\n  parseExport(node) {\n    if (this.match(77)) {\n      this.next();\n\n      if (this.isContextual(120) && this.lookaheadCharCode() !== 61) {\n        node.importKind = \"type\";\n        this.next();\n      } else {\n        node.importKind = \"value\";\n      }\n\n      return this.tsParseImportEqualsDeclaration(node, true);\n    } else if (this.eat(27)) {\n      const assign = node;\n      assign.expression = this.parseExpression();\n      this.semicolon();\n      return this.finishNode(assign, \"TSExportAssignment\");\n    } else if (this.eatContextual(87)) {\n      const decl = node;\n      this.expectContextual(118);\n      decl.id = this.parseIdentifier();\n      this.semicolon();\n      return this.finishNode(decl, \"TSNamespaceExportDeclaration\");\n    } else {\n      if (this.isContextual(120) && this.lookahead().type === 5) {\n        this.next();\n        node.exportKind = \"type\";\n      } else {\n        node.exportKind = \"value\";\n      }\n\n      return super.parseExport(node);\n    }\n  }\n\n  isAbstractClass() {\n    return this.isContextual(114) && this.lookahead().type === 74;\n  }\n\n  parseExportDefaultExpression() {\n    if (this.isAbstractClass()) {\n      const cls = this.startNode();\n      this.next();\n      cls.abstract = true;\n      this.parseClass(cls, true, true);\n      return cls;\n    }\n\n    if (this.match(119)) {\n      const interfaceNode = this.startNode();\n      this.next();\n      const result = this.tsParseInterfaceDeclaration(interfaceNode);\n      if (result) return result;\n    }\n\n    return super.parseExportDefaultExpression();\n  }\n\n  parseStatementContent(context, topLevel) {\n    if (this.state.type === 69) {\n      const ahead = this.lookahead();\n\n      if (ahead.type === 116) {\n        const node = this.startNode();\n        this.next();\n        this.expectContextual(116);\n        return this.tsParseEnumDeclaration(node, true);\n      }\n    }\n\n    return super.parseStatementContent(context, topLevel);\n  }\n\n  parseAccessModifier() {\n    return this.tsParseModifier([\"public\", \"protected\", \"private\"]);\n  }\n\n  tsHasSomeModifiers(member, modifiers) {\n    return modifiers.some(modifier => {\n      if (tsIsAccessModifier(modifier)) {\n        return member.accessibility === modifier;\n      }\n\n      return !!member[modifier];\n    });\n  }\n\n  tsIsStartOfStaticBlocks() {\n    return this.isContextual(98) && this.lookaheadCharCode() === 123;\n  }\n\n  parseClassMember(classBody, member, state) {\n    const modifiers = [\"declare\", \"private\", \"public\", \"protected\", \"override\", \"abstract\", \"readonly\", \"static\"];\n    this.tsParseModifiers(member, modifiers, undefined, undefined, true);\n\n    const callParseClassMemberWithIsStatic = () => {\n      if (this.tsIsStartOfStaticBlocks()) {\n        this.next();\n        this.next();\n\n        if (this.tsHasSomeModifiers(member, modifiers)) {\n          this.raise(this.state.pos, TSErrors.StaticBlockCannotHaveModifier);\n        }\n\n        this.parseClassStaticBlock(classBody, member);\n      } else {\n        this.parseClassMemberWithIsStatic(classBody, member, state, !!member.static);\n      }\n    };\n\n    if (member.declare) {\n      this.tsInAmbientContext(callParseClassMemberWithIsStatic);\n    } else {\n      callParseClassMemberWithIsStatic();\n    }\n  }\n\n  parseClassMemberWithIsStatic(classBody, member, state, isStatic) {\n    const idx = this.tsTryParseIndexSignature(member);\n\n    if (idx) {\n      classBody.body.push(idx);\n\n      if (member.abstract) {\n        this.raise(member.start, TSErrors.IndexSignatureHasAbstract);\n      }\n\n      if (member.accessibility) {\n        this.raise(member.start, TSErrors.IndexSignatureHasAccessibility, member.accessibility);\n      }\n\n      if (member.declare) {\n        this.raise(member.start, TSErrors.IndexSignatureHasDeclare);\n      }\n\n      if (member.override) {\n        this.raise(member.start, TSErrors.IndexSignatureHasOverride);\n      }\n\n      return;\n    }\n\n    if (!this.state.inAbstractClass && member.abstract) {\n      this.raise(member.start, TSErrors.NonAbstractClassHasAbstractMethod);\n    }\n\n    if (member.override) {\n      if (!state.hadSuperClass) {\n        this.raise(member.start, TSErrors.OverrideNotInSubClass);\n      }\n    }\n\n    super.parseClassMemberWithIsStatic(classBody, member, state, isStatic);\n  }\n\n  parsePostMemberNameModifiers(methodOrProp) {\n    const optional = this.eat(17);\n    if (optional) methodOrProp.optional = true;\n\n    if (methodOrProp.readonly && this.match(10)) {\n      this.raise(methodOrProp.start, TSErrors.ClassMethodHasReadonly);\n    }\n\n    if (methodOrProp.declare && this.match(10)) {\n      this.raise(methodOrProp.start, TSErrors.ClassMethodHasDeclare);\n    }\n  }\n\n  parseExpressionStatement(node, expr) {\n    const decl = expr.type === \"Identifier\" ? this.tsParseExpressionStatement(node, expr) : undefined;\n    return decl || super.parseExpressionStatement(node, expr);\n  }\n\n  shouldParseExportDeclaration() {\n    if (this.tsIsDeclarationStart()) return true;\n    return super.shouldParseExportDeclaration();\n  }\n\n  parseConditional(expr, startPos, startLoc, refExpressionErrors) {\n    if (!this.state.maybeInArrowParameters || !this.match(17)) {\n      return super.parseConditional(expr, startPos, startLoc, refExpressionErrors);\n    }\n\n    const result = this.tryParse(() => super.parseConditional(expr, startPos, startLoc));\n\n    if (!result.node) {\n      if (result.error) {\n        super.setOptionalParametersError(refExpressionErrors, result.error);\n      }\n\n      return expr;\n    }\n\n    if (result.error) this.state = result.failState;\n    return result.node;\n  }\n\n  parseParenItem(node, startPos, startLoc) {\n    node = super.parseParenItem(node, startPos, startLoc);\n\n    if (this.eat(17)) {\n      node.optional = true;\n      this.resetEndLocation(node);\n    }\n\n    if (this.match(14)) {\n      const typeCastNode = this.startNodeAt(startPos, startLoc);\n      typeCastNode.expression = node;\n      typeCastNode.typeAnnotation = this.tsParseTypeAnnotation();\n      return this.finishNode(typeCastNode, \"TSTypeCastExpression\");\n    }\n\n    return node;\n  }\n\n  parseExportDeclaration(node) {\n    const startPos = this.state.start;\n    const startLoc = this.state.startLoc;\n    const isDeclare = this.eatContextual(115);\n\n    if (isDeclare && (this.isContextual(115) || !this.shouldParseExportDeclaration())) {\n      throw this.raise(this.state.start, TSErrors.ExpectedAmbientAfterExportDeclare);\n    }\n\n    let declaration;\n\n    if (tokenIsIdentifier(this.state.type)) {\n      declaration = this.tsTryParseExportDeclaration();\n    }\n\n    if (!declaration) {\n      declaration = super.parseExportDeclaration(node);\n    }\n\n    if (declaration && (declaration.type === \"TSInterfaceDeclaration\" || declaration.type === \"TSTypeAliasDeclaration\" || isDeclare)) {\n      node.exportKind = \"type\";\n    }\n\n    if (declaration && isDeclare) {\n      this.resetStartLocation(declaration, startPos, startLoc);\n      declaration.declare = true;\n    }\n\n    return declaration;\n  }\n\n  parseClassId(node, isStatement, optionalId) {\n    if ((!isStatement || optionalId) && this.isContextual(104)) {\n      return;\n    }\n\n    super.parseClassId(node, isStatement, optionalId, node.declare ? BIND_TS_AMBIENT : BIND_CLASS);\n    const typeParameters = this.tsTryParseTypeParameters();\n    if (typeParameters) node.typeParameters = typeParameters;\n  }\n\n  parseClassPropertyAnnotation(node) {\n    if (!node.optional && this.eat(33)) {\n      node.definite = true;\n    }\n\n    const type = this.tsTryParseTypeAnnotation();\n    if (type) node.typeAnnotation = type;\n  }\n\n  parseClassProperty(node) {\n    this.parseClassPropertyAnnotation(node);\n\n    if (this.state.isAmbientContext && this.match(27)) {\n      this.raise(this.state.start, TSErrors.DeclareClassFieldHasInitializer);\n    }\n\n    if (node.abstract && this.match(27)) {\n      const {\n        key\n      } = node;\n      this.raise(this.state.start, TSErrors.AbstractPropertyHasInitializer, key.type === \"Identifier\" && !node.computed ? key.name : `[${this.input.slice(key.start, key.end)}]`);\n    }\n\n    return super.parseClassProperty(node);\n  }\n\n  parseClassPrivateProperty(node) {\n    if (node.abstract) {\n      this.raise(node.start, TSErrors.PrivateElementHasAbstract);\n    }\n\n    if (node.accessibility) {\n      this.raise(node.start, TSErrors.PrivateElementHasAccessibility, node.accessibility);\n    }\n\n    this.parseClassPropertyAnnotation(node);\n    return super.parseClassPrivateProperty(node);\n  }\n\n  pushClassMethod(classBody, method, isGenerator, isAsync, isConstructor, allowsDirectSuper) {\n    const typeParameters = this.tsTryParseTypeParameters();\n\n    if (typeParameters && isConstructor) {\n      this.raise(typeParameters.start, TSErrors.ConstructorHasTypeParameters);\n    }\n\n    if (method.declare && (method.kind === \"get\" || method.kind === \"set\")) {\n      this.raise(method.start, TSErrors.DeclareAccessor, method.kind);\n    }\n\n    if (typeParameters) method.typeParameters = typeParameters;\n    super.pushClassMethod(classBody, method, isGenerator, isAsync, isConstructor, allowsDirectSuper);\n  }\n\n  pushClassPrivateMethod(classBody, method, isGenerator, isAsync) {\n    const typeParameters = this.tsTryParseTypeParameters();\n    if (typeParameters) method.typeParameters = typeParameters;\n    super.pushClassPrivateMethod(classBody, method, isGenerator, isAsync);\n  }\n\n  declareClassPrivateMethodInScope(node, kind) {\n    if (node.type === \"TSDeclareMethod\") return;\n    if (node.type === \"MethodDefinition\" && !node.value.body) return;\n    super.declareClassPrivateMethodInScope(node, kind);\n  }\n\n  parseClassSuper(node) {\n    super.parseClassSuper(node);\n\n    if (node.superClass && this.match(43)) {\n      node.superTypeParameters = this.tsParseTypeArguments();\n    }\n\n    if (this.eatContextual(104)) {\n      node.implements = this.tsParseHeritageClause(\"implements\");\n    }\n  }\n\n  parseObjPropValue(prop, ...args) {\n    const typeParameters = this.tsTryParseTypeParameters();\n    if (typeParameters) prop.typeParameters = typeParameters;\n    super.parseObjPropValue(prop, ...args);\n  }\n\n  parseFunctionParams(node, allowModifiers) {\n    const typeParameters = this.tsTryParseTypeParameters();\n    if (typeParameters) node.typeParameters = typeParameters;\n    super.parseFunctionParams(node, allowModifiers);\n  }\n\n  parseVarId(decl, kind) {\n    super.parseVarId(decl, kind);\n\n    if (decl.id.type === \"Identifier\" && this.eat(33)) {\n      decl.definite = true;\n    }\n\n    const type = this.tsTryParseTypeAnnotation();\n\n    if (type) {\n      decl.id.typeAnnotation = type;\n      this.resetEndLocation(decl.id);\n    }\n  }\n\n  parseAsyncArrowFromCallExpression(node, call) {\n    if (this.match(14)) {\n      node.returnType = this.tsParseTypeAnnotation();\n    }\n\n    return super.parseAsyncArrowFromCallExpression(node, call);\n  }\n\n  parseMaybeAssign(...args) {\n    var _jsx, _jsx2, _typeCast, _jsx3, _typeCast2, _jsx4, _typeCast3;\n\n    let state;\n    let jsx;\n    let typeCast;\n\n    if (this.hasPlugin(\"jsx\") && (this.match(132) || this.match(43))) {\n      state = this.state.clone();\n      jsx = this.tryParse(() => super.parseMaybeAssign(...args), state);\n      if (!jsx.error) return jsx.node;\n      const {\n        context\n      } = this.state;\n\n      if (context[context.length - 1] === types$1.j_oTag) {\n        context.length -= 2;\n      } else if (context[context.length - 1] === types$1.j_expr) {\n        context.length -= 1;\n      }\n    }\n\n    if (!((_jsx = jsx) != null && _jsx.error) && !this.match(43)) {\n      return super.parseMaybeAssign(...args);\n    }\n\n    let typeParameters;\n    state = state || this.state.clone();\n    const arrow = this.tryParse(abort => {\n      var _expr$extra, _typeParameters;\n\n      typeParameters = this.tsParseTypeParameters();\n      const expr = super.parseMaybeAssign(...args);\n\n      if (expr.type !== \"ArrowFunctionExpression\" || (_expr$extra = expr.extra) != null && _expr$extra.parenthesized) {\n        abort();\n      }\n\n      if (((_typeParameters = typeParameters) == null ? void 0 : _typeParameters.params.length) !== 0) {\n        this.resetStartLocationFromNode(expr, typeParameters);\n      }\n\n      expr.typeParameters = typeParameters;\n      return expr;\n    }, state);\n\n    if (!arrow.error && !arrow.aborted) {\n      if (typeParameters) this.reportReservedArrowTypeParam(typeParameters);\n      return arrow.node;\n    }\n\n    if (!jsx) {\n      assert$1(!this.hasPlugin(\"jsx\"));\n      typeCast = this.tryParse(() => super.parseMaybeAssign(...args), state);\n      if (!typeCast.error) return typeCast.node;\n    }\n\n    if ((_jsx2 = jsx) != null && _jsx2.node) {\n      this.state = jsx.failState;\n      return jsx.node;\n    }\n\n    if (arrow.node) {\n      this.state = arrow.failState;\n      if (typeParameters) this.reportReservedArrowTypeParam(typeParameters);\n      return arrow.node;\n    }\n\n    if ((_typeCast = typeCast) != null && _typeCast.node) {\n      this.state = typeCast.failState;\n      return typeCast.node;\n    }\n\n    if ((_jsx3 = jsx) != null && _jsx3.thrown) throw jsx.error;\n    if (arrow.thrown) throw arrow.error;\n    if ((_typeCast2 = typeCast) != null && _typeCast2.thrown) throw typeCast.error;\n    throw ((_jsx4 = jsx) == null ? void 0 : _jsx4.error) || arrow.error || ((_typeCast3 = typeCast) == null ? void 0 : _typeCast3.error);\n  }\n\n  reportReservedArrowTypeParam(node) {\n    var _node$extra;\n\n    if (node.params.length === 1 && !((_node$extra = node.extra) != null && _node$extra.trailingComma) && this.getPluginOption(\"typescript\", \"disallowAmbiguousJSXLike\")) {\n      this.raise(node.start, TSErrors.ReservedArrowTypeParam);\n    }\n  }\n\n  parseMaybeUnary(refExpressionErrors) {\n    if (!this.hasPlugin(\"jsx\") && this.match(43)) {\n      return this.tsParseTypeAssertion();\n    } else {\n      return super.parseMaybeUnary(refExpressionErrors);\n    }\n  }\n\n  parseArrow(node) {\n    if (this.match(14)) {\n      const result = this.tryParse(abort => {\n        const returnType = this.tsParseTypeOrTypePredicateAnnotation(14);\n        if (this.canInsertSemicolon() || !this.match(19)) abort();\n        return returnType;\n      });\n      if (result.aborted) return;\n\n      if (!result.thrown) {\n        if (result.error) this.state = result.failState;\n        node.returnType = result.node;\n      }\n    }\n\n    return super.parseArrow(node);\n  }\n\n  parseAssignableListItemTypes(param) {\n    if (this.eat(17)) {\n      if (param.type !== \"Identifier\" && !this.state.isAmbientContext && !this.state.inType) {\n        this.raise(param.start, TSErrors.PatternIsOptional);\n      }\n\n      param.optional = true;\n    }\n\n    const type = this.tsTryParseTypeAnnotation();\n    if (type) param.typeAnnotation = type;\n    this.resetEndLocation(param);\n    return param;\n  }\n\n  isAssignable(node, isBinding) {\n    switch (node.type) {\n      case \"TSTypeCastExpression\":\n        return this.isAssignable(node.expression, isBinding);\n\n      case \"TSParameterProperty\":\n        return true;\n\n      default:\n        return super.isAssignable(node, isBinding);\n    }\n  }\n\n  toAssignable(node, isLHS = false) {\n    switch (node.type) {\n      case \"TSTypeCastExpression\":\n        return super.toAssignable(this.typeCastToParameter(node), isLHS);\n\n      case \"TSParameterProperty\":\n        return super.toAssignable(node, isLHS);\n\n      case \"ParenthesizedExpression\":\n        return this.toAssignableParenthesizedExpression(node, isLHS);\n\n      case \"TSAsExpression\":\n      case \"TSNonNullExpression\":\n      case \"TSTypeAssertion\":\n        node.expression = this.toAssignable(node.expression, isLHS);\n        return node;\n\n      default:\n        return super.toAssignable(node, isLHS);\n    }\n  }\n\n  toAssignableParenthesizedExpression(node, isLHS) {\n    switch (node.expression.type) {\n      case \"TSAsExpression\":\n      case \"TSNonNullExpression\":\n      case \"TSTypeAssertion\":\n      case \"ParenthesizedExpression\":\n        node.expression = this.toAssignable(node.expression, isLHS);\n        return node;\n\n      default:\n        return super.toAssignable(node, isLHS);\n    }\n  }\n\n  checkLVal(expr, contextDescription, ...args) {\n    var _expr$extra2;\n\n    switch (expr.type) {\n      case \"TSTypeCastExpression\":\n        return;\n\n      case \"TSParameterProperty\":\n        this.checkLVal(expr.parameter, \"parameter property\", ...args);\n        return;\n\n      case \"TSAsExpression\":\n      case \"TSTypeAssertion\":\n        if (!args[0] && contextDescription !== \"parenthesized expression\" && !((_expr$extra2 = expr.extra) != null && _expr$extra2.parenthesized)) {\n          this.raise(expr.start, ErrorMessages.InvalidLhs, contextDescription);\n          break;\n        }\n\n        this.checkLVal(expr.expression, \"parenthesized expression\", ...args);\n        return;\n\n      case \"TSNonNullExpression\":\n        this.checkLVal(expr.expression, contextDescription, ...args);\n        return;\n\n      default:\n        super.checkLVal(expr, contextDescription, ...args);\n        return;\n    }\n  }\n\n  parseBindingAtom() {\n    switch (this.state.type) {\n      case 72:\n        return this.parseIdentifier(true);\n\n      default:\n        return super.parseBindingAtom();\n    }\n  }\n\n  parseMaybeDecoratorArguments(expr) {\n    if (this.match(43)) {\n      const typeArguments = this.tsParseTypeArguments();\n\n      if (this.match(10)) {\n        const call = super.parseMaybeDecoratorArguments(expr);\n        call.typeParameters = typeArguments;\n        return call;\n      }\n\n      this.unexpected(this.state.start, 10);\n    }\n\n    return super.parseMaybeDecoratorArguments(expr);\n  }\n\n  checkCommaAfterRest(close) {\n    if (this.state.isAmbientContext && this.match(12) && this.lookaheadCharCode() === close) {\n      this.next();\n    } else {\n      super.checkCommaAfterRest(close);\n    }\n  }\n\n  isClassMethod() {\n    return this.match(43) || super.isClassMethod();\n  }\n\n  isClassProperty() {\n    return this.match(33) || this.match(14) || super.isClassProperty();\n  }\n\n  parseMaybeDefault(...args) {\n    const node = super.parseMaybeDefault(...args);\n\n    if (node.type === \"AssignmentPattern\" && node.typeAnnotation && node.right.start < node.typeAnnotation.start) {\n      this.raise(node.typeAnnotation.start, TSErrors.TypeAnnotationAfterAssign);\n    }\n\n    return node;\n  }\n\n  getTokenFromCode(code) {\n    if (this.state.inType) {\n      if (code === 62) {\n        return this.finishOp(44, 1);\n      }\n\n      if (code === 60) {\n        return this.finishOp(43, 1);\n      }\n    }\n\n    return super.getTokenFromCode(code);\n  }\n\n  reScan_lt_gt() {\n    const {\n      type\n    } = this.state;\n\n    if (type === 43) {\n      this.state.pos -= 1;\n      this.readToken_lt();\n    } else if (type === 44) {\n      this.state.pos -= 1;\n      this.readToken_gt();\n    }\n  }\n\n  toAssignableList(exprList) {\n    for (let i = 0; i < exprList.length; i++) {\n      const expr = exprList[i];\n      if (!expr) continue;\n\n      switch (expr.type) {\n        case \"TSTypeCastExpression\":\n          exprList[i] = this.typeCastToParameter(expr);\n          break;\n\n        case \"TSAsExpression\":\n        case \"TSTypeAssertion\":\n          if (!this.state.maybeInArrowParameters) {\n            exprList[i] = this.typeCastToParameter(expr);\n          } else {\n            this.raise(expr.start, TSErrors.UnexpectedTypeCastInParameter);\n          }\n\n          break;\n      }\n    }\n\n    return super.toAssignableList(...arguments);\n  }\n\n  typeCastToParameter(node) {\n    node.expression.typeAnnotation = node.typeAnnotation;\n    this.resetEndLocation(node.expression, node.typeAnnotation.end, node.typeAnnotation.loc.end);\n    return node.expression;\n  }\n\n  shouldParseArrow(params) {\n    if (this.match(14)) {\n      return params.every(expr => this.isAssignable(expr, true));\n    }\n\n    return super.shouldParseArrow(params);\n  }\n\n  shouldParseAsyncArrow() {\n    return this.match(14) || super.shouldParseAsyncArrow();\n  }\n\n  canHaveLeadingDecorator() {\n    return super.canHaveLeadingDecorator() || this.isAbstractClass();\n  }\n\n  jsxParseOpeningElementAfterName(node) {\n    if (this.match(43)) {\n      const typeArguments = this.tsTryParseAndCatch(() => this.tsParseTypeArguments());\n      if (typeArguments) node.typeParameters = typeArguments;\n    }\n\n    return super.jsxParseOpeningElementAfterName(node);\n  }\n\n  getGetterSetterExpectedParamCount(method) {\n    const baseCount = super.getGetterSetterExpectedParamCount(method);\n    const params = this.getObjectOrClassMethodParams(method);\n    const firstParam = params[0];\n    const hasContextParam = firstParam && this.isThisParam(firstParam);\n    return hasContextParam ? baseCount + 1 : baseCount;\n  }\n\n  parseCatchClauseParam() {\n    const param = super.parseCatchClauseParam();\n    const type = this.tsTryParseTypeAnnotation();\n\n    if (type) {\n      param.typeAnnotation = type;\n      this.resetEndLocation(param);\n    }\n\n    return param;\n  }\n\n  tsInAmbientContext(cb) {\n    const oldIsAmbientContext = this.state.isAmbientContext;\n    this.state.isAmbientContext = true;\n\n    try {\n      return cb();\n    } finally {\n      this.state.isAmbientContext = oldIsAmbientContext;\n    }\n  }\n\n  parseClass(node, ...args) {\n    const oldInAbstractClass = this.state.inAbstractClass;\n    this.state.inAbstractClass = !!node.abstract;\n\n    try {\n      return super.parseClass(node, ...args);\n    } finally {\n      this.state.inAbstractClass = oldInAbstractClass;\n    }\n  }\n\n  tsParseAbstractDeclaration(node) {\n    if (this.match(74)) {\n      node.abstract = true;\n      return this.parseClass(node, true, false);\n    } else if (this.isContextual(119)) {\n      if (!this.hasFollowingLineBreak()) {\n        node.abstract = true;\n        this.raise(node.start, TSErrors.NonClassMethodPropertyHasAbstractModifer);\n        this.next();\n        return this.tsParseInterfaceDeclaration(node);\n      }\n    } else {\n      this.unexpected(null, 74);\n    }\n  }\n\n  parseMethod(...args) {\n    const method = super.parseMethod(...args);\n\n    if (method.abstract) {\n      const hasBody = this.hasPlugin(\"estree\") ? !!method.value.body : !!method.body;\n\n      if (hasBody) {\n        const {\n          key\n        } = method;\n        this.raise(method.start, TSErrors.AbstractMethodHasImplementation, key.type === \"Identifier\" && !method.computed ? key.name : `[${this.input.slice(key.start, key.end)}]`);\n      }\n    }\n\n    return method;\n  }\n\n  tsParseTypeParameterName() {\n    const typeName = this.parseIdentifier();\n    return typeName.name;\n  }\n\n  shouldParseAsAmbientContext() {\n    return !!this.getPluginOption(\"typescript\", \"dts\");\n  }\n\n  parse() {\n    if (this.shouldParseAsAmbientContext()) {\n      this.state.isAmbientContext = true;\n    }\n\n    return super.parse();\n  }\n\n  getExpression() {\n    if (this.shouldParseAsAmbientContext()) {\n      this.state.isAmbientContext = true;\n    }\n\n    return super.getExpression();\n  }\n\n  parseExportSpecifier(node, isString, isInTypeExport, isMaybeTypeOnly) {\n    if (!isString && isMaybeTypeOnly) {\n      this.parseTypeOnlyImportExportSpecifier(node, false, isInTypeExport);\n      return this.finishNode(node, \"ExportSpecifier\");\n    }\n\n    node.exportKind = \"value\";\n    return super.parseExportSpecifier(node, isString, isInTypeExport, isMaybeTypeOnly);\n  }\n\n  parseImportSpecifier(specifier, importedIsString, isInTypeOnlyImport, isMaybeTypeOnly) {\n    if (!importedIsString && isMaybeTypeOnly) {\n      this.parseTypeOnlyImportExportSpecifier(specifier, true, isInTypeOnlyImport);\n      return this.finishNode(specifier, \"ImportSpecifier\");\n    }\n\n    specifier.importKind = \"value\";\n    return super.parseImportSpecifier(specifier, importedIsString, isInTypeOnlyImport, isMaybeTypeOnly);\n  }\n\n  parseTypeOnlyImportExportSpecifier(node, isImport, isInTypeOnlyImportExport) {\n    const leftOfAsKey = isImport ? \"imported\" : \"local\";\n    const rightOfAsKey = isImport ? \"local\" : \"exported\";\n    let leftOfAs = node[leftOfAsKey];\n    let rightOfAs;\n    let hasTypeSpecifier = false;\n    let canParseAsKeyword = true;\n    const pos = leftOfAs.start;\n\n    if (this.isContextual(87)) {\n      const firstAs = this.parseIdentifier();\n\n      if (this.isContextual(87)) {\n        const secondAs = this.parseIdentifier();\n\n        if (tokenIsKeywordOrIdentifier(this.state.type)) {\n          hasTypeSpecifier = true;\n          leftOfAs = firstAs;\n          rightOfAs = this.parseIdentifier();\n          canParseAsKeyword = false;\n        } else {\n          rightOfAs = secondAs;\n          canParseAsKeyword = false;\n        }\n      } else if (tokenIsKeywordOrIdentifier(this.state.type)) {\n        canParseAsKeyword = false;\n        rightOfAs = this.parseIdentifier();\n      } else {\n        hasTypeSpecifier = true;\n        leftOfAs = firstAs;\n      }\n    } else if (tokenIsKeywordOrIdentifier(this.state.type)) {\n      hasTypeSpecifier = true;\n      leftOfAs = this.parseIdentifier();\n    }\n\n    if (hasTypeSpecifier && isInTypeOnlyImportExport) {\n      this.raise(pos, isImport ? TSErrors.TypeModifierIsUsedInTypeImports : TSErrors.TypeModifierIsUsedInTypeExports);\n    }\n\n    node[leftOfAsKey] = leftOfAs;\n    node[rightOfAsKey] = rightOfAs;\n    const kindKey = isImport ? \"importKind\" : \"exportKind\";\n    node[kindKey] = hasTypeSpecifier ? \"type\" : \"value\";\n\n    if (canParseAsKeyword && this.eatContextual(87)) {\n      node[rightOfAsKey] = isImport ? this.parseIdentifier() : this.parseModuleExportName();\n    }\n\n    if (!node[rightOfAsKey]) {\n      node[rightOfAsKey] = cloneIdentifier(node[leftOfAsKey]);\n    }\n\n    if (isImport) {\n      this.checkLVal(node[rightOfAsKey], \"import specifier\", BIND_LEXICAL);\n    }\n  }\n\n});\n\nconst PlaceHolderErrors = makeErrorTemplates({\n  ClassNameIsRequired: \"A class name is required.\"\n}, ErrorCodes.SyntaxError);\nvar placeholders = (superClass => class extends superClass {\n  parsePlaceholder(expectedNode) {\n    if (this.match(134)) {\n      const node = this.startNode();\n      this.next();\n      this.assertNoSpace(\"Unexpected space in placeholder.\");\n      node.name = super.parseIdentifier(true);\n      this.assertNoSpace(\"Unexpected space in placeholder.\");\n      this.expect(134);\n      return this.finishPlaceholder(node, expectedNode);\n    }\n  }\n\n  finishPlaceholder(node, expectedNode) {\n    const isFinished = !!(node.expectedNode && node.type === \"Placeholder\");\n    node.expectedNode = expectedNode;\n    return isFinished ? node : this.finishNode(node, \"Placeholder\");\n  }\n\n  getTokenFromCode(code) {\n    if (code === 37 && this.input.charCodeAt(this.state.pos + 1) === 37) {\n      return this.finishOp(134, 2);\n    }\n\n    return super.getTokenFromCode(...arguments);\n  }\n\n  parseExprAtom() {\n    return this.parsePlaceholder(\"Expression\") || super.parseExprAtom(...arguments);\n  }\n\n  parseIdentifier() {\n    return this.parsePlaceholder(\"Identifier\") || super.parseIdentifier(...arguments);\n  }\n\n  checkReservedWord(word) {\n    if (word !== undefined) super.checkReservedWord(...arguments);\n  }\n\n  parseBindingAtom() {\n    return this.parsePlaceholder(\"Pattern\") || super.parseBindingAtom(...arguments);\n  }\n\n  checkLVal(expr) {\n    if (expr.type !== \"Placeholder\") super.checkLVal(...arguments);\n  }\n\n  toAssignable(node) {\n    if (node && node.type === \"Placeholder\" && node.expectedNode === \"Expression\") {\n      node.expectedNode = \"Pattern\";\n      return node;\n    }\n\n    return super.toAssignable(...arguments);\n  }\n\n  isLet(context) {\n    if (super.isLet(context)) {\n      return true;\n    }\n\n    if (!this.isContextual(93)) {\n      return false;\n    }\n\n    if (context) return false;\n    const nextToken = this.lookahead();\n\n    if (nextToken.type === 134) {\n      return true;\n    }\n\n    return false;\n  }\n\n  verifyBreakContinue(node) {\n    if (node.label && node.label.type === \"Placeholder\") return;\n    super.verifyBreakContinue(...arguments);\n  }\n\n  parseExpressionStatement(node, expr) {\n    if (expr.type !== \"Placeholder\" || expr.extra && expr.extra.parenthesized) {\n      return super.parseExpressionStatement(...arguments);\n    }\n\n    if (this.match(14)) {\n      const stmt = node;\n      stmt.label = this.finishPlaceholder(expr, \"Identifier\");\n      this.next();\n      stmt.body = this.parseStatement(\"label\");\n      return this.finishNode(stmt, \"LabeledStatement\");\n    }\n\n    this.semicolon();\n    node.name = expr.name;\n    return this.finishPlaceholder(node, \"Statement\");\n  }\n\n  parseBlock() {\n    return this.parsePlaceholder(\"BlockStatement\") || super.parseBlock(...arguments);\n  }\n\n  parseFunctionId() {\n    return this.parsePlaceholder(\"Identifier\") || super.parseFunctionId(...arguments);\n  }\n\n  parseClass(node, isStatement, optionalId) {\n    const type = isStatement ? \"ClassDeclaration\" : \"ClassExpression\";\n    this.next();\n    this.takeDecorators(node);\n    const oldStrict = this.state.strict;\n    const placeholder = this.parsePlaceholder(\"Identifier\");\n\n    if (placeholder) {\n      if (this.match(75) || this.match(134) || this.match(5)) {\n        node.id = placeholder;\n      } else if (optionalId || !isStatement) {\n        node.id = null;\n        node.body = this.finishPlaceholder(placeholder, \"ClassBody\");\n        return this.finishNode(node, type);\n      } else {\n        this.unexpected(null, PlaceHolderErrors.ClassNameIsRequired);\n      }\n    } else {\n      this.parseClassId(node, isStatement, optionalId);\n    }\n\n    this.parseClassSuper(node);\n    node.body = this.parsePlaceholder(\"ClassBody\") || this.parseClassBody(!!node.superClass, oldStrict);\n    return this.finishNode(node, type);\n  }\n\n  parseExport(node) {\n    const placeholder = this.parsePlaceholder(\"Identifier\");\n    if (!placeholder) return super.parseExport(...arguments);\n\n    if (!this.isContextual(91) && !this.match(12)) {\n      node.specifiers = [];\n      node.source = null;\n      node.declaration = this.finishPlaceholder(placeholder, \"Declaration\");\n      return this.finishNode(node, \"ExportNamedDeclaration\");\n    }\n\n    this.expectPlugin(\"exportDefaultFrom\");\n    const specifier = this.startNode();\n    specifier.exported = placeholder;\n    node.specifiers = [this.finishNode(specifier, \"ExportDefaultSpecifier\")];\n    return super.parseExport(node);\n  }\n\n  isExportDefaultSpecifier() {\n    if (this.match(59)) {\n      const next = this.nextTokenStart();\n\n      if (this.isUnparsedContextual(next, \"from\")) {\n        if (this.input.startsWith(tokenLabelName(134), this.nextTokenStartSince(next + 4))) {\n          return true;\n        }\n      }\n    }\n\n    return super.isExportDefaultSpecifier();\n  }\n\n  maybeParseExportDefaultSpecifier(node) {\n    if (node.specifiers && node.specifiers.length > 0) {\n      return true;\n    }\n\n    return super.maybeParseExportDefaultSpecifier(...arguments);\n  }\n\n  checkExport(node) {\n    const {\n      specifiers\n    } = node;\n\n    if (specifiers != null && specifiers.length) {\n      node.specifiers = specifiers.filter(node => node.exported.type === \"Placeholder\");\n    }\n\n    super.checkExport(node);\n    node.specifiers = specifiers;\n  }\n\n  parseImport(node) {\n    const placeholder = this.parsePlaceholder(\"Identifier\");\n    if (!placeholder) return super.parseImport(...arguments);\n    node.specifiers = [];\n\n    if (!this.isContextual(91) && !this.match(12)) {\n      node.source = this.finishPlaceholder(placeholder, \"StringLiteral\");\n      this.semicolon();\n      return this.finishNode(node, \"ImportDeclaration\");\n    }\n\n    const specifier = this.startNodeAtNode(placeholder);\n    specifier.local = placeholder;\n    this.finishNode(specifier, \"ImportDefaultSpecifier\");\n    node.specifiers.push(specifier);\n\n    if (this.eat(12)) {\n      const hasStarImport = this.maybeParseStarImportSpecifier(node);\n      if (!hasStarImport) this.parseNamedImportSpecifiers(node);\n    }\n\n    this.expectContextual(91);\n    node.source = this.parseImportSource();\n    this.semicolon();\n    return this.finishNode(node, \"ImportDeclaration\");\n  }\n\n  parseImportSource() {\n    return this.parsePlaceholder(\"StringLiteral\") || super.parseImportSource(...arguments);\n  }\n\n});\n\nvar v8intrinsic = (superClass => class extends superClass {\n  parseV8Intrinsic() {\n    if (this.match(48)) {\n      const v8IntrinsicStart = this.state.start;\n      const node = this.startNode();\n      this.next();\n\n      if (tokenIsIdentifier(this.state.type)) {\n        const name = this.parseIdentifierName(this.state.start);\n        const identifier = this.createIdentifier(node, name);\n        identifier.type = \"V8IntrinsicIdentifier\";\n\n        if (this.match(10)) {\n          return identifier;\n        }\n      }\n\n      this.unexpected(v8IntrinsicStart);\n    }\n  }\n\n  parseExprAtom() {\n    return this.parseV8Intrinsic() || super.parseExprAtom(...arguments);\n  }\n\n});\n\nfunction hasPlugin(plugins, name) {\n  return plugins.some(plugin => {\n    if (Array.isArray(plugin)) {\n      return plugin[0] === name;\n    } else {\n      return plugin === name;\n    }\n  });\n}\nfunction getPluginOption(plugins, name, option) {\n  const plugin = plugins.find(plugin => {\n    if (Array.isArray(plugin)) {\n      return plugin[0] === name;\n    } else {\n      return plugin === name;\n    }\n  });\n\n  if (plugin && Array.isArray(plugin)) {\n    return plugin[1][option];\n  }\n\n  return null;\n}\nconst PIPELINE_PROPOSALS = [\"minimal\", \"fsharp\", \"hack\", \"smart\"];\nconst TOPIC_TOKENS = [\"^\", \"%\", \"#\"];\nconst RECORD_AND_TUPLE_SYNTAX_TYPES = [\"hash\", \"bar\"];\nfunction validatePlugins(plugins) {\n  if (hasPlugin(plugins, \"decorators\")) {\n    if (hasPlugin(plugins, \"decorators-legacy\")) {\n      throw new Error(\"Cannot use the decorators and decorators-legacy plugin together\");\n    }\n\n    const decoratorsBeforeExport = getPluginOption(plugins, \"decorators\", \"decoratorsBeforeExport\");\n\n    if (decoratorsBeforeExport == null) {\n      throw new Error(\"The 'decorators' plugin requires a 'decoratorsBeforeExport' option,\" + \" whose value must be a boolean. If you are migrating from\" + \" Babylon/Babel 6 or want to use the old decorators proposal, you\" + \" should use the 'decorators-legacy' plugin instead of 'decorators'.\");\n    } else if (typeof decoratorsBeforeExport !== \"boolean\") {\n      throw new Error(\"'decoratorsBeforeExport' must be a boolean.\");\n    }\n  }\n\n  if (hasPlugin(plugins, \"flow\") && hasPlugin(plugins, \"typescript\")) {\n    throw new Error(\"Cannot combine flow and typescript plugins.\");\n  }\n\n  if (hasPlugin(plugins, \"placeholders\") && hasPlugin(plugins, \"v8intrinsic\")) {\n    throw new Error(\"Cannot combine placeholders and v8intrinsic plugins.\");\n  }\n\n  if (hasPlugin(plugins, \"pipelineOperator\")) {\n    const proposal = getPluginOption(plugins, \"pipelineOperator\", \"proposal\");\n\n    if (!PIPELINE_PROPOSALS.includes(proposal)) {\n      const proposalList = PIPELINE_PROPOSALS.map(p => `\"${p}\"`).join(\", \");\n      throw new Error(`\"pipelineOperator\" requires \"proposal\" option whose value must be one of: ${proposalList}.`);\n    }\n\n    const tupleSyntaxIsHash = hasPlugin(plugins, \"recordAndTuple\") && getPluginOption(plugins, \"recordAndTuple\", \"syntaxType\") === \"hash\";\n\n    if (proposal === \"hack\") {\n      if (hasPlugin(plugins, \"placeholders\")) {\n        throw new Error(\"Cannot combine placeholders plugin and Hack-style pipes.\");\n      }\n\n      if (hasPlugin(plugins, \"v8intrinsic\")) {\n        throw new Error(\"Cannot combine v8intrinsic plugin and Hack-style pipes.\");\n      }\n\n      const topicToken = getPluginOption(plugins, \"pipelineOperator\", \"topicToken\");\n\n      if (!TOPIC_TOKENS.includes(topicToken)) {\n        const tokenList = TOPIC_TOKENS.map(t => `\"${t}\"`).join(\", \");\n        throw new Error(`\"pipelineOperator\" in \"proposal\": \"hack\" mode also requires a \"topicToken\" option whose value must be one of: ${tokenList}.`);\n      }\n\n      if (topicToken === \"#\" && tupleSyntaxIsHash) {\n        throw new Error('Plugin conflict between `[\"pipelineOperator\", { proposal: \"hack\", topicToken: \"#\" }]` and `[\"recordAndtuple\", { syntaxType: \"hash\"}]`.');\n      }\n    } else if (proposal === \"smart\" && tupleSyntaxIsHash) {\n      throw new Error('Plugin conflict between `[\"pipelineOperator\", { proposal: \"smart\" }]` and `[\"recordAndtuple\", { syntaxType: \"hash\"}]`.');\n    }\n  }\n\n  if (hasPlugin(plugins, \"moduleAttributes\")) {\n    {\n      if (hasPlugin(plugins, \"importAssertions\")) {\n        throw new Error(\"Cannot combine importAssertions and moduleAttributes plugins.\");\n      }\n\n      const moduleAttributesVerionPluginOption = getPluginOption(plugins, \"moduleAttributes\", \"version\");\n\n      if (moduleAttributesVerionPluginOption !== \"may-2020\") {\n        throw new Error(\"The 'moduleAttributes' plugin requires a 'version' option,\" + \" representing the last proposal update. Currently, the\" + \" only supported value is 'may-2020'.\");\n      }\n    }\n  }\n\n  if (hasPlugin(plugins, \"recordAndTuple\") && !RECORD_AND_TUPLE_SYNTAX_TYPES.includes(getPluginOption(plugins, \"recordAndTuple\", \"syntaxType\"))) {\n    throw new Error(\"'recordAndTuple' requires 'syntaxType' option whose value should be one of: \" + RECORD_AND_TUPLE_SYNTAX_TYPES.map(p => `'${p}'`).join(\", \"));\n  }\n\n  if (hasPlugin(plugins, \"asyncDoExpressions\") && !hasPlugin(plugins, \"doExpressions\")) {\n    const error = new Error(\"'asyncDoExpressions' requires 'doExpressions', please add 'doExpressions' to parser plugins.\");\n    error.missingPlugins = \"doExpressions\";\n    throw error;\n  }\n}\nconst mixinPlugins = {\n  estree,\n  jsx,\n  flow,\n  typescript,\n  v8intrinsic,\n  placeholders\n};\nconst mixinPluginNames = Object.keys(mixinPlugins);\n\nconst defaultOptions = {\n  sourceType: \"script\",\n  sourceFilename: undefined,\n  startColumn: 0,\n  startLine: 1,\n  allowAwaitOutsideFunction: false,\n  allowReturnOutsideFunction: false,\n  allowImportExportEverywhere: false,\n  allowSuperOutsideMethod: false,\n  allowUndeclaredExports: false,\n  plugins: [],\n  strictMode: null,\n  ranges: false,\n  tokens: false,\n  createParenthesizedExpressions: false,\n  errorRecovery: false,\n  attachComment: true\n};\nfunction getOptions(opts) {\n  const options = {};\n\n  for (const key of Object.keys(defaultOptions)) {\n    options[key] = opts && opts[key] != null ? opts[key] : defaultOptions[key];\n  }\n\n  return options;\n}\n\nconst unwrapParenthesizedExpression = node => {\n  return node.type === \"ParenthesizedExpression\" ? unwrapParenthesizedExpression(node.expression) : node;\n};\n\nclass LValParser extends NodeUtils {\n  toAssignable(node, isLHS = false) {\n    var _node$extra, _node$extra3;\n\n    let parenthesized = undefined;\n\n    if (node.type === \"ParenthesizedExpression\" || (_node$extra = node.extra) != null && _node$extra.parenthesized) {\n      parenthesized = unwrapParenthesizedExpression(node);\n\n      if (isLHS) {\n        if (parenthesized.type === \"Identifier\") {\n          this.expressionScope.recordParenthesizedIdentifierError(node.start, ErrorMessages.InvalidParenthesizedAssignment);\n        } else if (parenthesized.type !== \"MemberExpression\") {\n          this.raise(node.start, ErrorMessages.InvalidParenthesizedAssignment);\n        }\n      } else {\n        this.raise(node.start, ErrorMessages.InvalidParenthesizedAssignment);\n      }\n    }\n\n    switch (node.type) {\n      case \"Identifier\":\n      case \"ObjectPattern\":\n      case \"ArrayPattern\":\n      case \"AssignmentPattern\":\n      case \"RestElement\":\n        break;\n\n      case \"ObjectExpression\":\n        node.type = \"ObjectPattern\";\n\n        for (let i = 0, length = node.properties.length, last = length - 1; i < length; i++) {\n          var _node$extra2;\n\n          const prop = node.properties[i];\n          const isLast = i === last;\n          this.toAssignableObjectExpressionProp(prop, isLast, isLHS);\n\n          if (isLast && prop.type === \"RestElement\" && (_node$extra2 = node.extra) != null && _node$extra2.trailingComma) {\n            this.raiseRestNotLast(node.extra.trailingComma);\n          }\n        }\n\n        break;\n\n      case \"ObjectProperty\":\n        this.toAssignable(node.value, isLHS);\n        break;\n\n      case \"SpreadElement\":\n        {\n          this.checkToRestConversion(node);\n          node.type = \"RestElement\";\n          const arg = node.argument;\n          this.toAssignable(arg, isLHS);\n          break;\n        }\n\n      case \"ArrayExpression\":\n        node.type = \"ArrayPattern\";\n        this.toAssignableList(node.elements, (_node$extra3 = node.extra) == null ? void 0 : _node$extra3.trailingComma, isLHS);\n        break;\n\n      case \"AssignmentExpression\":\n        if (node.operator !== \"=\") {\n          this.raise(node.left.end, ErrorMessages.MissingEqInAssignment);\n        }\n\n        node.type = \"AssignmentPattern\";\n        delete node.operator;\n        this.toAssignable(node.left, isLHS);\n        break;\n\n      case \"ParenthesizedExpression\":\n        this.toAssignable(parenthesized, isLHS);\n        break;\n    }\n\n    return node;\n  }\n\n  toAssignableObjectExpressionProp(prop, isLast, isLHS) {\n    if (prop.type === \"ObjectMethod\") {\n      const error = prop.kind === \"get\" || prop.kind === \"set\" ? ErrorMessages.PatternHasAccessor : ErrorMessages.PatternHasMethod;\n      this.raise(prop.key.start, error);\n    } else if (prop.type === \"SpreadElement\" && !isLast) {\n      this.raiseRestNotLast(prop.start);\n    } else {\n      this.toAssignable(prop, isLHS);\n    }\n  }\n\n  toAssignableList(exprList, trailingCommaPos, isLHS) {\n    let end = exprList.length;\n\n    if (end) {\n      const last = exprList[end - 1];\n\n      if ((last == null ? void 0 : last.type) === \"RestElement\") {\n        --end;\n      } else if ((last == null ? void 0 : last.type) === \"SpreadElement\") {\n        last.type = \"RestElement\";\n        let arg = last.argument;\n        this.toAssignable(arg, isLHS);\n        arg = unwrapParenthesizedExpression(arg);\n\n        if (arg.type !== \"Identifier\" && arg.type !== \"MemberExpression\" && arg.type !== \"ArrayPattern\" && arg.type !== \"ObjectPattern\") {\n          this.unexpected(arg.start);\n        }\n\n        if (trailingCommaPos) {\n          this.raiseTrailingCommaAfterRest(trailingCommaPos);\n        }\n\n        --end;\n      }\n    }\n\n    for (let i = 0; i < end; i++) {\n      const elt = exprList[i];\n\n      if (elt) {\n        this.toAssignable(elt, isLHS);\n\n        if (elt.type === \"RestElement\") {\n          this.raiseRestNotLast(elt.start);\n        }\n      }\n    }\n\n    return exprList;\n  }\n\n  isAssignable(node, isBinding) {\n    switch (node.type) {\n      case \"Identifier\":\n      case \"ObjectPattern\":\n      case \"ArrayPattern\":\n      case \"AssignmentPattern\":\n      case \"RestElement\":\n        return true;\n\n      case \"ObjectExpression\":\n        {\n          const last = node.properties.length - 1;\n          return node.properties.every((prop, i) => {\n            return prop.type !== \"ObjectMethod\" && (i === last || prop.type !== \"SpreadElement\") && this.isAssignable(prop);\n          });\n        }\n\n      case \"ObjectProperty\":\n        return this.isAssignable(node.value);\n\n      case \"SpreadElement\":\n        return this.isAssignable(node.argument);\n\n      case \"ArrayExpression\":\n        return node.elements.every(element => element === null || this.isAssignable(element));\n\n      case \"AssignmentExpression\":\n        return node.operator === \"=\";\n\n      case \"ParenthesizedExpression\":\n        return this.isAssignable(node.expression);\n\n      case \"MemberExpression\":\n      case \"OptionalMemberExpression\":\n        return !isBinding;\n\n      default:\n        return false;\n    }\n  }\n\n  toReferencedList(exprList, isParenthesizedExpr) {\n    return exprList;\n  }\n\n  toReferencedListDeep(exprList, isParenthesizedExpr) {\n    this.toReferencedList(exprList, isParenthesizedExpr);\n\n    for (const expr of exprList) {\n      if ((expr == null ? void 0 : expr.type) === \"ArrayExpression\") {\n        this.toReferencedListDeep(expr.elements);\n      }\n    }\n  }\n\n  parseSpread(refExpressionErrors, refNeedsArrowPos) {\n    const node = this.startNode();\n    this.next();\n    node.argument = this.parseMaybeAssignAllowIn(refExpressionErrors, undefined, refNeedsArrowPos);\n    return this.finishNode(node, \"SpreadElement\");\n  }\n\n  parseRestBinding() {\n    const node = this.startNode();\n    this.next();\n    node.argument = this.parseBindingAtom();\n    return this.finishNode(node, \"RestElement\");\n  }\n\n  parseBindingAtom() {\n    switch (this.state.type) {\n      case 0:\n        {\n          const node = this.startNode();\n          this.next();\n          node.elements = this.parseBindingList(3, 93, true);\n          return this.finishNode(node, \"ArrayPattern\");\n        }\n\n      case 5:\n        return this.parseObjectLike(8, true);\n    }\n\n    return this.parseIdentifier();\n  }\n\n  parseBindingList(close, closeCharCode, allowEmpty, allowModifiers) {\n    const elts = [];\n    let first = true;\n\n    while (!this.eat(close)) {\n      if (first) {\n        first = false;\n      } else {\n        this.expect(12);\n      }\n\n      if (allowEmpty && this.match(12)) {\n        elts.push(null);\n      } else if (this.eat(close)) {\n        break;\n      } else if (this.match(21)) {\n        elts.push(this.parseAssignableListItemTypes(this.parseRestBinding()));\n        this.checkCommaAfterRest(closeCharCode);\n        this.expect(close);\n        break;\n      } else {\n        const decorators = [];\n\n        if (this.match(24) && this.hasPlugin(\"decorators\")) {\n          this.raise(this.state.start, ErrorMessages.UnsupportedParameterDecorator);\n        }\n\n        while (this.match(24)) {\n          decorators.push(this.parseDecorator());\n        }\n\n        elts.push(this.parseAssignableListItem(allowModifiers, decorators));\n      }\n    }\n\n    return elts;\n  }\n\n  parseBindingRestProperty(prop) {\n    this.next();\n    prop.argument = this.parseIdentifier();\n    this.checkCommaAfterRest(125);\n    return this.finishNode(prop, \"RestElement\");\n  }\n\n  parseBindingProperty() {\n    const prop = this.startNode();\n    const {\n      type,\n      start: startPos,\n      startLoc\n    } = this.state;\n\n    if (type === 21) {\n      return this.parseBindingRestProperty(prop);\n    } else {\n      this.parsePropertyName(prop);\n    }\n\n    prop.method = false;\n    this.parseObjPropValue(prop, startPos, startLoc, false, false, true, false);\n    return prop;\n  }\n\n  parseAssignableListItem(allowModifiers, decorators) {\n    const left = this.parseMaybeDefault();\n    this.parseAssignableListItemTypes(left);\n    const elt = this.parseMaybeDefault(left.start, left.loc.start, left);\n\n    if (decorators.length) {\n      left.decorators = decorators;\n    }\n\n    return elt;\n  }\n\n  parseAssignableListItemTypes(param) {\n    return param;\n  }\n\n  parseMaybeDefault(startPos, startLoc, left) {\n    var _startLoc, _startPos, _left;\n\n    startLoc = (_startLoc = startLoc) != null ? _startLoc : this.state.startLoc;\n    startPos = (_startPos = startPos) != null ? _startPos : this.state.start;\n    left = (_left = left) != null ? _left : this.parseBindingAtom();\n    if (!this.eat(27)) return left;\n    const node = this.startNodeAt(startPos, startLoc);\n    node.left = left;\n    node.right = this.parseMaybeAssignAllowIn();\n    return this.finishNode(node, \"AssignmentPattern\");\n  }\n\n  checkLVal(expr, contextDescription, bindingType = BIND_NONE, checkClashes, disallowLetBinding, strictModeChanged = false) {\n    switch (expr.type) {\n      case \"Identifier\":\n        {\n          const {\n            name\n          } = expr;\n\n          if (this.state.strict && (strictModeChanged ? isStrictBindReservedWord(name, this.inModule) : isStrictBindOnlyReservedWord(name))) {\n            this.raise(expr.start, bindingType === BIND_NONE ? ErrorMessages.StrictEvalArguments : ErrorMessages.StrictEvalArgumentsBinding, name);\n          }\n\n          if (checkClashes) {\n            if (checkClashes.has(name)) {\n              this.raise(expr.start, ErrorMessages.ParamDupe);\n            } else {\n              checkClashes.add(name);\n            }\n          }\n\n          if (disallowLetBinding && name === \"let\") {\n            this.raise(expr.start, ErrorMessages.LetInLexicalBinding);\n          }\n\n          if (!(bindingType & BIND_NONE)) {\n            this.scope.declareName(name, bindingType, expr.start);\n          }\n\n          break;\n        }\n\n      case \"MemberExpression\":\n        if (bindingType !== BIND_NONE) {\n          this.raise(expr.start, ErrorMessages.InvalidPropertyBindingPattern);\n        }\n\n        break;\n\n      case \"ObjectPattern\":\n        for (let prop of expr.properties) {\n          if (this.isObjectProperty(prop)) prop = prop.value;else if (this.isObjectMethod(prop)) continue;\n          this.checkLVal(prop, \"object destructuring pattern\", bindingType, checkClashes, disallowLetBinding);\n        }\n\n        break;\n\n      case \"ArrayPattern\":\n        for (const elem of expr.elements) {\n          if (elem) {\n            this.checkLVal(elem, \"array destructuring pattern\", bindingType, checkClashes, disallowLetBinding);\n          }\n        }\n\n        break;\n\n      case \"AssignmentPattern\":\n        this.checkLVal(expr.left, \"assignment pattern\", bindingType, checkClashes);\n        break;\n\n      case \"RestElement\":\n        this.checkLVal(expr.argument, \"rest element\", bindingType, checkClashes);\n        break;\n\n      case \"ParenthesizedExpression\":\n        this.checkLVal(expr.expression, \"parenthesized expression\", bindingType, checkClashes);\n        break;\n\n      default:\n        {\n          this.raise(expr.start, bindingType === BIND_NONE ? ErrorMessages.InvalidLhs : ErrorMessages.InvalidLhsBinding, contextDescription);\n        }\n    }\n  }\n\n  checkToRestConversion(node) {\n    if (node.argument.type !== \"Identifier\" && node.argument.type !== \"MemberExpression\") {\n      this.raise(node.argument.start, ErrorMessages.InvalidRestAssignmentPattern);\n    }\n  }\n\n  checkCommaAfterRest(close) {\n    if (this.match(12)) {\n      if (this.lookaheadCharCode() === close) {\n        this.raiseTrailingCommaAfterRest(this.state.start);\n      } else {\n        this.raiseRestNotLast(this.state.start);\n      }\n    }\n  }\n\n  raiseRestNotLast(pos) {\n    throw this.raise(pos, ErrorMessages.ElementAfterRest);\n  }\n\n  raiseTrailingCommaAfterRest(pos) {\n    this.raise(pos, ErrorMessages.RestTrailingComma);\n  }\n\n}\n\nconst invalidHackPipeBodies = new Map([[\"ArrowFunctionExpression\", \"arrow function\"], [\"AssignmentExpression\", \"assignment\"], [\"ConditionalExpression\", \"conditional\"], [\"YieldExpression\", \"yield\"]]);\nclass ExpressionParser extends LValParser {\n  checkProto(prop, isRecord, protoRef, refExpressionErrors) {\n    if (prop.type === \"SpreadElement\" || this.isObjectMethod(prop) || prop.computed || prop.shorthand) {\n      return;\n    }\n\n    const key = prop.key;\n    const name = key.type === \"Identifier\" ? key.name : key.value;\n\n    if (name === \"__proto__\") {\n      if (isRecord) {\n        this.raise(key.start, ErrorMessages.RecordNoProto);\n        return;\n      }\n\n      if (protoRef.used) {\n        if (refExpressionErrors) {\n          if (refExpressionErrors.doubleProto === -1) {\n            refExpressionErrors.doubleProto = key.start;\n          }\n        } else {\n          this.raise(key.start, ErrorMessages.DuplicateProto);\n        }\n      }\n\n      protoRef.used = true;\n    }\n  }\n\n  shouldExitDescending(expr, potentialArrowAt) {\n    return expr.type === \"ArrowFunctionExpression\" && expr.start === potentialArrowAt;\n  }\n\n  getExpression() {\n    this.enterInitialScopes();\n    this.nextToken();\n    const expr = this.parseExpression();\n\n    if (!this.match(129)) {\n      this.unexpected();\n    }\n\n    this.finalizeRemainingComments();\n    expr.comments = this.state.comments;\n    expr.errors = this.state.errors;\n\n    if (this.options.tokens) {\n      expr.tokens = this.tokens;\n    }\n\n    return expr;\n  }\n\n  parseExpression(disallowIn, refExpressionErrors) {\n    if (disallowIn) {\n      return this.disallowInAnd(() => this.parseExpressionBase(refExpressionErrors));\n    }\n\n    return this.allowInAnd(() => this.parseExpressionBase(refExpressionErrors));\n  }\n\n  parseExpressionBase(refExpressionErrors) {\n    const startPos = this.state.start;\n    const startLoc = this.state.startLoc;\n    const expr = this.parseMaybeAssign(refExpressionErrors);\n\n    if (this.match(12)) {\n      const node = this.startNodeAt(startPos, startLoc);\n      node.expressions = [expr];\n\n      while (this.eat(12)) {\n        node.expressions.push(this.parseMaybeAssign(refExpressionErrors));\n      }\n\n      this.toReferencedList(node.expressions);\n      return this.finishNode(node, \"SequenceExpression\");\n    }\n\n    return expr;\n  }\n\n  parseMaybeAssignDisallowIn(refExpressionErrors, afterLeftParse) {\n    return this.disallowInAnd(() => this.parseMaybeAssign(refExpressionErrors, afterLeftParse));\n  }\n\n  parseMaybeAssignAllowIn(refExpressionErrors, afterLeftParse) {\n    return this.allowInAnd(() => this.parseMaybeAssign(refExpressionErrors, afterLeftParse));\n  }\n\n  setOptionalParametersError(refExpressionErrors, resultError) {\n    var _resultError$pos;\n\n    refExpressionErrors.optionalParameters = (_resultError$pos = resultError == null ? void 0 : resultError.pos) != null ? _resultError$pos : this.state.start;\n  }\n\n  parseMaybeAssign(refExpressionErrors, afterLeftParse) {\n    const startPos = this.state.start;\n    const startLoc = this.state.startLoc;\n\n    if (this.isContextual(99)) {\n      if (this.prodParam.hasYield) {\n        let left = this.parseYield();\n\n        if (afterLeftParse) {\n          left = afterLeftParse.call(this, left, startPos, startLoc);\n        }\n\n        return left;\n      }\n    }\n\n    let ownExpressionErrors;\n\n    if (refExpressionErrors) {\n      ownExpressionErrors = false;\n    } else {\n      refExpressionErrors = new ExpressionErrors();\n      ownExpressionErrors = true;\n    }\n\n    const {\n      type\n    } = this.state;\n\n    if (type === 10 || tokenIsIdentifier(type)) {\n      this.state.potentialArrowAt = this.state.start;\n    }\n\n    let left = this.parseMaybeConditional(refExpressionErrors);\n\n    if (afterLeftParse) {\n      left = afterLeftParse.call(this, left, startPos, startLoc);\n    }\n\n    if (tokenIsAssignment(this.state.type)) {\n      const node = this.startNodeAt(startPos, startLoc);\n      const operator = this.state.value;\n      node.operator = operator;\n\n      if (this.match(27)) {\n        node.left = this.toAssignable(left, true);\n\n        if (refExpressionErrors.doubleProto >= startPos) {\n          refExpressionErrors.doubleProto = -1;\n        }\n\n        if (refExpressionErrors.shorthandAssign >= startPos) {\n          refExpressionErrors.shorthandAssign = -1;\n        }\n      } else {\n        node.left = left;\n      }\n\n      this.checkLVal(left, \"assignment expression\");\n      this.next();\n      node.right = this.parseMaybeAssign();\n      return this.finishNode(node, \"AssignmentExpression\");\n    } else if (ownExpressionErrors) {\n      this.checkExpressionErrors(refExpressionErrors, true);\n    }\n\n    return left;\n  }\n\n  parseMaybeConditional(refExpressionErrors) {\n    const startPos = this.state.start;\n    const startLoc = this.state.startLoc;\n    const potentialArrowAt = this.state.potentialArrowAt;\n    const expr = this.parseExprOps(refExpressionErrors);\n\n    if (this.shouldExitDescending(expr, potentialArrowAt)) {\n      return expr;\n    }\n\n    return this.parseConditional(expr, startPos, startLoc, refExpressionErrors);\n  }\n\n  parseConditional(expr, startPos, startLoc, refExpressionErrors) {\n    if (this.eat(17)) {\n      const node = this.startNodeAt(startPos, startLoc);\n      node.test = expr;\n      node.consequent = this.parseMaybeAssignAllowIn();\n      this.expect(14);\n      node.alternate = this.parseMaybeAssign();\n      return this.finishNode(node, \"ConditionalExpression\");\n    }\n\n    return expr;\n  }\n\n  parseMaybeUnaryOrPrivate(refExpressionErrors) {\n    return this.match(128) ? this.parsePrivateName() : this.parseMaybeUnary(refExpressionErrors);\n  }\n\n  parseExprOps(refExpressionErrors) {\n    const startPos = this.state.start;\n    const startLoc = this.state.startLoc;\n    const potentialArrowAt = this.state.potentialArrowAt;\n    const expr = this.parseMaybeUnaryOrPrivate(refExpressionErrors);\n\n    if (this.shouldExitDescending(expr, potentialArrowAt)) {\n      return expr;\n    }\n\n    return this.parseExprOp(expr, startPos, startLoc, -1);\n  }\n\n  parseExprOp(left, leftStartPos, leftStartLoc, minPrec) {\n    if (this.isPrivateName(left)) {\n      const value = this.getPrivateNameSV(left);\n      const {\n        start\n      } = left;\n\n      if (minPrec >= tokenOperatorPrecedence(52) || !this.prodParam.hasIn || !this.match(52)) {\n        this.raise(start, ErrorMessages.PrivateInExpectedIn, value);\n      }\n\n      this.classScope.usePrivateName(value, start);\n    }\n\n    const op = this.state.type;\n\n    if (tokenIsOperator(op) && (this.prodParam.hasIn || !this.match(52))) {\n      let prec = tokenOperatorPrecedence(op);\n\n      if (prec > minPrec) {\n        if (op === 35) {\n          this.expectPlugin(\"pipelineOperator\");\n\n          if (this.state.inFSharpPipelineDirectBody) {\n            return left;\n          }\n\n          this.checkPipelineAtInfixOperator(left, leftStartPos);\n        }\n\n        const node = this.startNodeAt(leftStartPos, leftStartLoc);\n        node.left = left;\n        node.operator = this.state.value;\n        const logical = op === 37 || op === 38;\n        const coalesce = op === 36;\n\n        if (coalesce) {\n          prec = tokenOperatorPrecedence(38);\n        }\n\n        this.next();\n\n        if (op === 35 && this.getPluginOption(\"pipelineOperator\", \"proposal\") === \"minimal\") {\n          if (this.state.type === 90 && this.prodParam.hasAwait) {\n            throw this.raise(this.state.start, ErrorMessages.UnexpectedAwaitAfterPipelineBody);\n          }\n        }\n\n        node.right = this.parseExprOpRightExpr(op, prec);\n        this.finishNode(node, logical || coalesce ? \"LogicalExpression\" : \"BinaryExpression\");\n        const nextOp = this.state.type;\n\n        if (coalesce && (nextOp === 37 || nextOp === 38) || logical && nextOp === 36) {\n          throw this.raise(this.state.start, ErrorMessages.MixingCoalesceWithLogical);\n        }\n\n        return this.parseExprOp(node, leftStartPos, leftStartLoc, minPrec);\n      }\n    }\n\n    return left;\n  }\n\n  parseExprOpRightExpr(op, prec) {\n    const startPos = this.state.start;\n    const startLoc = this.state.startLoc;\n\n    switch (op) {\n      case 35:\n        switch (this.getPluginOption(\"pipelineOperator\", \"proposal\")) {\n          case \"hack\":\n            return this.withTopicBindingContext(() => {\n              return this.parseHackPipeBody();\n            });\n\n          case \"smart\":\n            return this.withTopicBindingContext(() => {\n              if (this.prodParam.hasYield && this.isContextual(99)) {\n                throw this.raise(this.state.start, ErrorMessages.PipeBodyIsTighter, this.state.value);\n              }\n\n              return this.parseSmartPipelineBodyInStyle(this.parseExprOpBaseRightExpr(op, prec), startPos, startLoc);\n            });\n\n          case \"fsharp\":\n            return this.withSoloAwaitPermittingContext(() => {\n              return this.parseFSharpPipelineBody(prec);\n            });\n        }\n\n      default:\n        return this.parseExprOpBaseRightExpr(op, prec);\n    }\n  }\n\n  parseExprOpBaseRightExpr(op, prec) {\n    const startPos = this.state.start;\n    const startLoc = this.state.startLoc;\n    return this.parseExprOp(this.parseMaybeUnaryOrPrivate(), startPos, startLoc, tokenIsRightAssociative(op) ? prec - 1 : prec);\n  }\n\n  parseHackPipeBody() {\n    var _body$extra;\n\n    const {\n      start\n    } = this.state;\n    const body = this.parseMaybeAssign();\n\n    if (invalidHackPipeBodies.has(body.type) && !((_body$extra = body.extra) != null && _body$extra.parenthesized)) {\n      this.raise(start, ErrorMessages.PipeUnparenthesizedBody, invalidHackPipeBodies.get(body.type));\n    }\n\n    if (!this.topicReferenceWasUsedInCurrentContext()) {\n      this.raise(start, ErrorMessages.PipeTopicUnused);\n    }\n\n    return body;\n  }\n\n  checkExponentialAfterUnary(node) {\n    if (this.match(51)) {\n      this.raise(node.argument.start, ErrorMessages.UnexpectedTokenUnaryExponentiation);\n    }\n  }\n\n  parseMaybeUnary(refExpressionErrors, sawUnary) {\n    const startPos = this.state.start;\n    const startLoc = this.state.startLoc;\n    const isAwait = this.isContextual(90);\n\n    if (isAwait && this.isAwaitAllowed()) {\n      this.next();\n      const expr = this.parseAwait(startPos, startLoc);\n      if (!sawUnary) this.checkExponentialAfterUnary(expr);\n      return expr;\n    }\n\n    const update = this.match(32);\n    const node = this.startNode();\n\n    if (tokenIsPrefix(this.state.type)) {\n      node.operator = this.state.value;\n      node.prefix = true;\n\n      if (this.match(66)) {\n        this.expectPlugin(\"throwExpressions\");\n      }\n\n      const isDelete = this.match(83);\n      this.next();\n      node.argument = this.parseMaybeUnary(null, true);\n      this.checkExpressionErrors(refExpressionErrors, true);\n\n      if (this.state.strict && isDelete) {\n        const arg = node.argument;\n\n        if (arg.type === \"Identifier\") {\n          this.raise(node.start, ErrorMessages.StrictDelete);\n        } else if (this.hasPropertyAsPrivateName(arg)) {\n          this.raise(node.start, ErrorMessages.DeletePrivateField);\n        }\n      }\n\n      if (!update) {\n        if (!sawUnary) this.checkExponentialAfterUnary(node);\n        return this.finishNode(node, \"UnaryExpression\");\n      }\n    }\n\n    const expr = this.parseUpdate(node, update, refExpressionErrors);\n\n    if (isAwait) {\n      const {\n        type\n      } = this.state;\n      const startsExpr = this.hasPlugin(\"v8intrinsic\") ? tokenCanStartExpression(type) : tokenCanStartExpression(type) && !this.match(48);\n\n      if (startsExpr && !this.isAmbiguousAwait()) {\n        this.raiseOverwrite(startPos, ErrorMessages.AwaitNotInAsyncContext);\n        return this.parseAwait(startPos, startLoc);\n      }\n    }\n\n    return expr;\n  }\n\n  parseUpdate(node, update, refExpressionErrors) {\n    if (update) {\n      this.checkLVal(node.argument, \"prefix operation\");\n      return this.finishNode(node, \"UpdateExpression\");\n    }\n\n    const startPos = this.state.start;\n    const startLoc = this.state.startLoc;\n    let expr = this.parseExprSubscripts(refExpressionErrors);\n    if (this.checkExpressionErrors(refExpressionErrors, false)) return expr;\n\n    while (tokenIsPostfix(this.state.type) && !this.canInsertSemicolon()) {\n      const node = this.startNodeAt(startPos, startLoc);\n      node.operator = this.state.value;\n      node.prefix = false;\n      node.argument = expr;\n      this.checkLVal(expr, \"postfix operation\");\n      this.next();\n      expr = this.finishNode(node, \"UpdateExpression\");\n    }\n\n    return expr;\n  }\n\n  parseExprSubscripts(refExpressionErrors) {\n    const startPos = this.state.start;\n    const startLoc = this.state.startLoc;\n    const potentialArrowAt = this.state.potentialArrowAt;\n    const expr = this.parseExprAtom(refExpressionErrors);\n\n    if (this.shouldExitDescending(expr, potentialArrowAt)) {\n      return expr;\n    }\n\n    return this.parseSubscripts(expr, startPos, startLoc);\n  }\n\n  parseSubscripts(base, startPos, startLoc, noCalls) {\n    const state = {\n      optionalChainMember: false,\n      maybeAsyncArrow: this.atPossibleAsyncArrow(base),\n      stop: false\n    };\n\n    do {\n      base = this.parseSubscript(base, startPos, startLoc, noCalls, state);\n      state.maybeAsyncArrow = false;\n    } while (!state.stop);\n\n    return base;\n  }\n\n  parseSubscript(base, startPos, startLoc, noCalls, state) {\n    if (!noCalls && this.eat(15)) {\n      return this.parseBind(base, startPos, startLoc, noCalls, state);\n    } else if (this.match(22)) {\n      return this.parseTaggedTemplateExpression(base, startPos, startLoc, state);\n    }\n\n    let optional = false;\n\n    if (this.match(18)) {\n      if (noCalls && this.lookaheadCharCode() === 40) {\n        state.stop = true;\n        return base;\n      }\n\n      state.optionalChainMember = optional = true;\n      this.next();\n    }\n\n    if (!noCalls && this.match(10)) {\n      return this.parseCoverCallAndAsyncArrowHead(base, startPos, startLoc, state, optional);\n    } else {\n      const computed = this.eat(0);\n\n      if (computed || optional || this.eat(16)) {\n        return this.parseMember(base, startPos, startLoc, state, computed, optional);\n      } else {\n        state.stop = true;\n        return base;\n      }\n    }\n  }\n\n  parseMember(base, startPos, startLoc, state, computed, optional) {\n    const node = this.startNodeAt(startPos, startLoc);\n    node.object = base;\n    node.computed = computed;\n    const privateName = !computed && this.match(128) && this.state.value;\n    const property = computed ? this.parseExpression() : privateName ? this.parsePrivateName() : this.parseIdentifier(true);\n\n    if (privateName !== false) {\n      if (node.object.type === \"Super\") {\n        this.raise(startPos, ErrorMessages.SuperPrivateField);\n      }\n\n      this.classScope.usePrivateName(privateName, property.start);\n    }\n\n    node.property = property;\n\n    if (computed) {\n      this.expect(3);\n    }\n\n    if (state.optionalChainMember) {\n      node.optional = optional;\n      return this.finishNode(node, \"OptionalMemberExpression\");\n    } else {\n      return this.finishNode(node, \"MemberExpression\");\n    }\n  }\n\n  parseBind(base, startPos, startLoc, noCalls, state) {\n    const node = this.startNodeAt(startPos, startLoc);\n    node.object = base;\n    node.callee = this.parseNoCallExpr();\n    state.stop = true;\n    return this.parseSubscripts(this.finishNode(node, \"BindExpression\"), startPos, startLoc, noCalls);\n  }\n\n  parseCoverCallAndAsyncArrowHead(base, startPos, startLoc, state, optional) {\n    const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;\n    let refExpressionErrors = null;\n    this.state.maybeInArrowParameters = true;\n    this.next();\n    let node = this.startNodeAt(startPos, startLoc);\n    node.callee = base;\n\n    if (state.maybeAsyncArrow) {\n      this.expressionScope.enter(newAsyncArrowScope());\n      refExpressionErrors = new ExpressionErrors();\n    }\n\n    if (state.optionalChainMember) {\n      node.optional = optional;\n    }\n\n    if (optional) {\n      node.arguments = this.parseCallExpressionArguments(11);\n    } else {\n      node.arguments = this.parseCallExpressionArguments(11, base.type === \"Import\", base.type !== \"Super\", node, refExpressionErrors);\n    }\n\n    this.finishCallExpression(node, state.optionalChainMember);\n\n    if (state.maybeAsyncArrow && this.shouldParseAsyncArrow() && !optional) {\n      state.stop = true;\n      this.expressionScope.validateAsPattern();\n      this.expressionScope.exit();\n      node = this.parseAsyncArrowFromCallExpression(this.startNodeAt(startPos, startLoc), node);\n    } else {\n      if (state.maybeAsyncArrow) {\n        this.checkExpressionErrors(refExpressionErrors, true);\n        this.expressionScope.exit();\n      }\n\n      this.toReferencedArguments(node);\n    }\n\n    this.state.maybeInArrowParameters = oldMaybeInArrowParameters;\n    return node;\n  }\n\n  toReferencedArguments(node, isParenthesizedExpr) {\n    this.toReferencedListDeep(node.arguments, isParenthesizedExpr);\n  }\n\n  parseTaggedTemplateExpression(base, startPos, startLoc, state) {\n    const node = this.startNodeAt(startPos, startLoc);\n    node.tag = base;\n    node.quasi = this.parseTemplate(true);\n\n    if (state.optionalChainMember) {\n      this.raise(startPos, ErrorMessages.OptionalChainingNoTemplate);\n    }\n\n    return this.finishNode(node, \"TaggedTemplateExpression\");\n  }\n\n  atPossibleAsyncArrow(base) {\n    return base.type === \"Identifier\" && base.name === \"async\" && this.state.lastTokEnd === base.end && !this.canInsertSemicolon() && base.end - base.start === 5 && base.start === this.state.potentialArrowAt;\n  }\n\n  finishCallExpression(node, optional) {\n    if (node.callee.type === \"Import\") {\n      if (node.arguments.length === 2) {\n        {\n          if (!this.hasPlugin(\"moduleAttributes\")) {\n            this.expectPlugin(\"importAssertions\");\n          }\n        }\n      }\n\n      if (node.arguments.length === 0 || node.arguments.length > 2) {\n        this.raise(node.start, ErrorMessages.ImportCallArity, this.hasPlugin(\"importAssertions\") || this.hasPlugin(\"moduleAttributes\") ? \"one or two arguments\" : \"one argument\");\n      } else {\n        for (const arg of node.arguments) {\n          if (arg.type === \"SpreadElement\") {\n            this.raise(arg.start, ErrorMessages.ImportCallSpreadArgument);\n          }\n        }\n      }\n    }\n\n    return this.finishNode(node, optional ? \"OptionalCallExpression\" : \"CallExpression\");\n  }\n\n  parseCallExpressionArguments(close, dynamicImport, allowPlaceholder, nodeForExtra, refExpressionErrors) {\n    const elts = [];\n    let first = true;\n    const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;\n    this.state.inFSharpPipelineDirectBody = false;\n\n    while (!this.eat(close)) {\n      if (first) {\n        first = false;\n      } else {\n        this.expect(12);\n\n        if (this.match(close)) {\n          if (dynamicImport && !this.hasPlugin(\"importAssertions\") && !this.hasPlugin(\"moduleAttributes\")) {\n            this.raise(this.state.lastTokStart, ErrorMessages.ImportCallArgumentTrailingComma);\n          }\n\n          if (nodeForExtra) {\n            this.addExtra(nodeForExtra, \"trailingComma\", this.state.lastTokStart);\n          }\n\n          this.next();\n          break;\n        }\n      }\n\n      elts.push(this.parseExprListItem(false, refExpressionErrors, allowPlaceholder));\n    }\n\n    this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;\n    return elts;\n  }\n\n  shouldParseAsyncArrow() {\n    return this.match(19) && !this.canInsertSemicolon();\n  }\n\n  parseAsyncArrowFromCallExpression(node, call) {\n    var _call$extra;\n\n    this.resetPreviousNodeTrailingComments(call);\n    this.expect(19);\n    this.parseArrowExpression(node, call.arguments, true, (_call$extra = call.extra) == null ? void 0 : _call$extra.trailingComma);\n\n    if (call.innerComments) {\n      setInnerComments(node, call.innerComments);\n    }\n\n    if (call.callee.trailingComments) {\n      setInnerComments(node, call.callee.trailingComments);\n    }\n\n    return node;\n  }\n\n  parseNoCallExpr() {\n    const startPos = this.state.start;\n    const startLoc = this.state.startLoc;\n    return this.parseSubscripts(this.parseExprAtom(), startPos, startLoc, true);\n  }\n\n  parseExprAtom(refExpressionErrors) {\n    let node;\n    const {\n      type\n    } = this.state;\n\n    switch (type) {\n      case 73:\n        return this.parseSuper();\n\n      case 77:\n        node = this.startNode();\n        this.next();\n\n        if (this.match(16)) {\n          return this.parseImportMetaProperty(node);\n        }\n\n        if (!this.match(10)) {\n          this.raise(this.state.lastTokStart, ErrorMessages.UnsupportedImport);\n        }\n\n        return this.finishNode(node, \"Import\");\n\n      case 72:\n        node = this.startNode();\n        this.next();\n        return this.finishNode(node, \"ThisExpression\");\n\n      case 84:\n        {\n          return this.parseDo(this.startNode(), false);\n        }\n\n      case 50:\n      case 29:\n        {\n          this.readRegexp();\n          return this.parseRegExpLiteral(this.state.value);\n        }\n\n      case 124:\n        return this.parseNumericLiteral(this.state.value);\n\n      case 125:\n        return this.parseBigIntLiteral(this.state.value);\n\n      case 126:\n        return this.parseDecimalLiteral(this.state.value);\n\n      case 123:\n        return this.parseStringLiteral(this.state.value);\n\n      case 78:\n        return this.parseNullLiteral();\n\n      case 79:\n        return this.parseBooleanLiteral(true);\n\n      case 80:\n        return this.parseBooleanLiteral(false);\n\n      case 10:\n        {\n          const canBeArrow = this.state.potentialArrowAt === this.state.start;\n          return this.parseParenAndDistinguishExpression(canBeArrow);\n        }\n\n      case 2:\n      case 1:\n        {\n          return this.parseArrayLike(this.state.type === 2 ? 4 : 3, false, true);\n        }\n\n      case 0:\n        {\n          return this.parseArrayLike(3, true, false, refExpressionErrors);\n        }\n\n      case 6:\n      case 7:\n        {\n          return this.parseObjectLike(this.state.type === 6 ? 9 : 8, false, true);\n        }\n\n      case 5:\n        {\n          return this.parseObjectLike(8, false, false, refExpressionErrors);\n        }\n\n      case 62:\n        return this.parseFunctionOrFunctionSent();\n\n      case 24:\n        this.parseDecorators();\n\n      case 74:\n        node = this.startNode();\n        this.takeDecorators(node);\n        return this.parseClass(node, false);\n\n      case 71:\n        return this.parseNewOrNewTarget();\n\n      case 22:\n        return this.parseTemplate(false);\n\n      case 15:\n        {\n          node = this.startNode();\n          this.next();\n          node.object = null;\n          const callee = node.callee = this.parseNoCallExpr();\n\n          if (callee.type === \"MemberExpression\") {\n            return this.finishNode(node, \"BindExpression\");\n          } else {\n            throw this.raise(callee.start, ErrorMessages.UnsupportedBind);\n          }\n        }\n\n      case 128:\n        {\n          this.raise(this.state.start, ErrorMessages.PrivateInExpectedIn, this.state.value);\n          return this.parsePrivateName();\n        }\n\n      case 31:\n        {\n          return this.parseTopicReferenceThenEqualsSign(48, \"%\");\n        }\n\n      case 30:\n        {\n          return this.parseTopicReferenceThenEqualsSign(40, \"^\");\n        }\n\n      case 40:\n      case 48:\n      case 25:\n        {\n          const pipeProposal = this.getPluginOption(\"pipelineOperator\", \"proposal\");\n\n          if (pipeProposal) {\n            return this.parseTopicReference(pipeProposal);\n          } else {\n            throw this.unexpected();\n          }\n        }\n\n      case 43:\n        {\n          const lookaheadCh = this.input.codePointAt(this.nextTokenStart());\n\n          if (isIdentifierStart(lookaheadCh) || lookaheadCh === 62) {\n            this.expectOnePlugin([\"jsx\", \"flow\", \"typescript\"]);\n            break;\n          } else {\n            throw this.unexpected();\n          }\n        }\n\n      default:\n        if (tokenIsIdentifier(type)) {\n          if (this.isContextual(117) && this.lookaheadCharCode() === 123 && !this.hasFollowingLineBreak()) {\n            return this.parseModuleExpression();\n          }\n\n          const canBeArrow = this.state.potentialArrowAt === this.state.start;\n          const containsEsc = this.state.containsEsc;\n          const id = this.parseIdentifier();\n\n          if (!containsEsc && id.name === \"async\" && !this.canInsertSemicolon()) {\n            const {\n              type\n            } = this.state;\n\n            if (type === 62) {\n              this.resetPreviousNodeTrailingComments(id);\n              this.next();\n              return this.parseFunction(this.startNodeAtNode(id), undefined, true);\n            } else if (tokenIsIdentifier(type)) {\n              if (this.lookaheadCharCode() === 61) {\n                return this.parseAsyncArrowUnaryFunction(this.startNodeAtNode(id));\n              } else {\n                return id;\n              }\n            } else if (type === 84) {\n              this.resetPreviousNodeTrailingComments(id);\n              return this.parseDo(this.startNodeAtNode(id), true);\n            }\n          }\n\n          if (canBeArrow && this.match(19) && !this.canInsertSemicolon()) {\n            this.next();\n            return this.parseArrowExpression(this.startNodeAtNode(id), [id], false);\n          }\n\n          return id;\n        } else {\n          throw this.unexpected();\n        }\n\n    }\n  }\n\n  parseTopicReferenceThenEqualsSign(topicTokenType, topicTokenValue) {\n    const pipeProposal = this.getPluginOption(\"pipelineOperator\", \"proposal\");\n\n    if (pipeProposal) {\n      this.state.type = topicTokenType;\n      this.state.value = topicTokenValue;\n      this.state.pos--;\n      this.state.end--;\n      this.state.endLoc.column--;\n      return this.parseTopicReference(pipeProposal);\n    } else {\n      throw this.unexpected();\n    }\n  }\n\n  parseTopicReference(pipeProposal) {\n    const node = this.startNode();\n    const start = this.state.start;\n    const tokenType = this.state.type;\n    this.next();\n    return this.finishTopicReference(node, start, pipeProposal, tokenType);\n  }\n\n  finishTopicReference(node, start, pipeProposal, tokenType) {\n    if (this.testTopicReferenceConfiguration(pipeProposal, start, tokenType)) {\n      let nodeType;\n\n      if (pipeProposal === \"smart\") {\n        nodeType = \"PipelinePrimaryTopicReference\";\n      } else {\n        nodeType = \"TopicReference\";\n      }\n\n      if (!this.topicReferenceIsAllowedInCurrentContext()) {\n        if (pipeProposal === \"smart\") {\n          this.raise(start, ErrorMessages.PrimaryTopicNotAllowed);\n        } else {\n          this.raise(start, ErrorMessages.PipeTopicUnbound);\n        }\n      }\n\n      this.registerTopicReference();\n      return this.finishNode(node, nodeType);\n    } else {\n      throw this.raise(start, ErrorMessages.PipeTopicUnconfiguredToken, tokenLabelName(tokenType));\n    }\n  }\n\n  testTopicReferenceConfiguration(pipeProposal, start, tokenType) {\n    switch (pipeProposal) {\n      case \"hack\":\n        {\n          const pluginTopicToken = this.getPluginOption(\"pipelineOperator\", \"topicToken\");\n          return tokenLabelName(tokenType) === pluginTopicToken;\n        }\n\n      case \"smart\":\n        return tokenType === 25;\n\n      default:\n        throw this.raise(start, ErrorMessages.PipeTopicRequiresHackPipes);\n    }\n  }\n\n  parseAsyncArrowUnaryFunction(node) {\n    this.prodParam.enter(functionFlags(true, this.prodParam.hasYield));\n    const params = [this.parseIdentifier()];\n    this.prodParam.exit();\n\n    if (this.hasPrecedingLineBreak()) {\n      this.raise(this.state.pos, ErrorMessages.LineTerminatorBeforeArrow);\n    }\n\n    this.expect(19);\n    this.parseArrowExpression(node, params, true);\n    return node;\n  }\n\n  parseDo(node, isAsync) {\n    this.expectPlugin(\"doExpressions\");\n\n    if (isAsync) {\n      this.expectPlugin(\"asyncDoExpressions\");\n    }\n\n    node.async = isAsync;\n    this.next();\n    const oldLabels = this.state.labels;\n    this.state.labels = [];\n\n    if (isAsync) {\n      this.prodParam.enter(PARAM_AWAIT);\n      node.body = this.parseBlock();\n      this.prodParam.exit();\n    } else {\n      node.body = this.parseBlock();\n    }\n\n    this.state.labels = oldLabels;\n    return this.finishNode(node, \"DoExpression\");\n  }\n\n  parseSuper() {\n    const node = this.startNode();\n    this.next();\n\n    if (this.match(10) && !this.scope.allowDirectSuper && !this.options.allowSuperOutsideMethod) {\n      this.raise(node.start, ErrorMessages.SuperNotAllowed);\n    } else if (!this.scope.allowSuper && !this.options.allowSuperOutsideMethod) {\n      this.raise(node.start, ErrorMessages.UnexpectedSuper);\n    }\n\n    if (!this.match(10) && !this.match(0) && !this.match(16)) {\n      this.raise(node.start, ErrorMessages.UnsupportedSuper);\n    }\n\n    return this.finishNode(node, \"Super\");\n  }\n\n  parsePrivateName() {\n    const node = this.startNode();\n    const id = this.startNodeAt(this.state.start + 1, new Position(this.state.curLine, this.state.start + 1 - this.state.lineStart));\n    const name = this.state.value;\n    this.next();\n    node.id = this.createIdentifier(id, name);\n    return this.finishNode(node, \"PrivateName\");\n  }\n\n  parseFunctionOrFunctionSent() {\n    const node = this.startNode();\n    this.next();\n\n    if (this.prodParam.hasYield && this.match(16)) {\n      const meta = this.createIdentifier(this.startNodeAtNode(node), \"function\");\n      this.next();\n\n      if (this.match(96)) {\n        this.expectPlugin(\"functionSent\");\n      } else if (!this.hasPlugin(\"functionSent\")) {\n        this.unexpected();\n      }\n\n      return this.parseMetaProperty(node, meta, \"sent\");\n    }\n\n    return this.parseFunction(node);\n  }\n\n  parseMetaProperty(node, meta, propertyName) {\n    node.meta = meta;\n    const containsEsc = this.state.containsEsc;\n    node.property = this.parseIdentifier(true);\n\n    if (node.property.name !== propertyName || containsEsc) {\n      this.raise(node.property.start, ErrorMessages.UnsupportedMetaProperty, meta.name, propertyName);\n    }\n\n    return this.finishNode(node, \"MetaProperty\");\n  }\n\n  parseImportMetaProperty(node) {\n    const id = this.createIdentifier(this.startNodeAtNode(node), \"import\");\n    this.next();\n\n    if (this.isContextual(94)) {\n      if (!this.inModule) {\n        this.raise(id.start, SourceTypeModuleErrorMessages.ImportMetaOutsideModule);\n      }\n\n      this.sawUnambiguousESM = true;\n    }\n\n    return this.parseMetaProperty(node, id, \"meta\");\n  }\n\n  parseLiteralAtNode(value, type, node) {\n    this.addExtra(node, \"rawValue\", value);\n    this.addExtra(node, \"raw\", this.input.slice(node.start, this.state.end));\n    node.value = value;\n    this.next();\n    return this.finishNode(node, type);\n  }\n\n  parseLiteral(value, type) {\n    const node = this.startNode();\n    return this.parseLiteralAtNode(value, type, node);\n  }\n\n  parseStringLiteral(value) {\n    return this.parseLiteral(value, \"StringLiteral\");\n  }\n\n  parseNumericLiteral(value) {\n    return this.parseLiteral(value, \"NumericLiteral\");\n  }\n\n  parseBigIntLiteral(value) {\n    return this.parseLiteral(value, \"BigIntLiteral\");\n  }\n\n  parseDecimalLiteral(value) {\n    return this.parseLiteral(value, \"DecimalLiteral\");\n  }\n\n  parseRegExpLiteral(value) {\n    const node = this.parseLiteral(value.value, \"RegExpLiteral\");\n    node.pattern = value.pattern;\n    node.flags = value.flags;\n    return node;\n  }\n\n  parseBooleanLiteral(value) {\n    const node = this.startNode();\n    node.value = value;\n    this.next();\n    return this.finishNode(node, \"BooleanLiteral\");\n  }\n\n  parseNullLiteral() {\n    const node = this.startNode();\n    this.next();\n    return this.finishNode(node, \"NullLiteral\");\n  }\n\n  parseParenAndDistinguishExpression(canBeArrow) {\n    const startPos = this.state.start;\n    const startLoc = this.state.startLoc;\n    let val;\n    this.next();\n    this.expressionScope.enter(newArrowHeadScope());\n    const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;\n    const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;\n    this.state.maybeInArrowParameters = true;\n    this.state.inFSharpPipelineDirectBody = false;\n    const innerStartPos = this.state.start;\n    const innerStartLoc = this.state.startLoc;\n    const exprList = [];\n    const refExpressionErrors = new ExpressionErrors();\n    let first = true;\n    let spreadStart;\n    let optionalCommaStart;\n\n    while (!this.match(11)) {\n      if (first) {\n        first = false;\n      } else {\n        this.expect(12, refExpressionErrors.optionalParameters === -1 ? null : refExpressionErrors.optionalParameters);\n\n        if (this.match(11)) {\n          optionalCommaStart = this.state.start;\n          break;\n        }\n      }\n\n      if (this.match(21)) {\n        const spreadNodeStartPos = this.state.start;\n        const spreadNodeStartLoc = this.state.startLoc;\n        spreadStart = this.state.start;\n        exprList.push(this.parseParenItem(this.parseRestBinding(), spreadNodeStartPos, spreadNodeStartLoc));\n        this.checkCommaAfterRest(41);\n        break;\n      } else {\n        exprList.push(this.parseMaybeAssignAllowIn(refExpressionErrors, this.parseParenItem));\n      }\n    }\n\n    const innerEndPos = this.state.lastTokEnd;\n    const innerEndLoc = this.state.lastTokEndLoc;\n    this.expect(11);\n    this.state.maybeInArrowParameters = oldMaybeInArrowParameters;\n    this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;\n    let arrowNode = this.startNodeAt(startPos, startLoc);\n\n    if (canBeArrow && this.shouldParseArrow(exprList) && (arrowNode = this.parseArrow(arrowNode))) {\n      this.expressionScope.validateAsPattern();\n      this.expressionScope.exit();\n      this.parseArrowExpression(arrowNode, exprList, false);\n      return arrowNode;\n    }\n\n    this.expressionScope.exit();\n\n    if (!exprList.length) {\n      this.unexpected(this.state.lastTokStart);\n    }\n\n    if (optionalCommaStart) this.unexpected(optionalCommaStart);\n    if (spreadStart) this.unexpected(spreadStart);\n    this.checkExpressionErrors(refExpressionErrors, true);\n    this.toReferencedListDeep(exprList, true);\n\n    if (exprList.length > 1) {\n      val = this.startNodeAt(innerStartPos, innerStartLoc);\n      val.expressions = exprList;\n      this.finishNode(val, \"SequenceExpression\");\n      this.resetEndLocation(val, innerEndPos, innerEndLoc);\n    } else {\n      val = exprList[0];\n    }\n\n    if (!this.options.createParenthesizedExpressions) {\n      this.addExtra(val, \"parenthesized\", true);\n      this.addExtra(val, \"parenStart\", startPos);\n      this.takeSurroundingComments(val, startPos, this.state.lastTokEnd);\n      return val;\n    }\n\n    const parenExpression = this.startNodeAt(startPos, startLoc);\n    parenExpression.expression = val;\n    this.finishNode(parenExpression, \"ParenthesizedExpression\");\n    return parenExpression;\n  }\n\n  shouldParseArrow(params) {\n    return !this.canInsertSemicolon();\n  }\n\n  parseArrow(node) {\n    if (this.eat(19)) {\n      return node;\n    }\n  }\n\n  parseParenItem(node, startPos, startLoc) {\n    return node;\n  }\n\n  parseNewOrNewTarget() {\n    const node = this.startNode();\n    this.next();\n\n    if (this.match(16)) {\n      const meta = this.createIdentifier(this.startNodeAtNode(node), \"new\");\n      this.next();\n      const metaProp = this.parseMetaProperty(node, meta, \"target\");\n\n      if (!this.scope.inNonArrowFunction && !this.scope.inClass) {\n        this.raise(metaProp.start, ErrorMessages.UnexpectedNewTarget);\n      }\n\n      return metaProp;\n    }\n\n    return this.parseNew(node);\n  }\n\n  parseNew(node) {\n    node.callee = this.parseNoCallExpr();\n\n    if (node.callee.type === \"Import\") {\n      this.raise(node.callee.start, ErrorMessages.ImportCallNotNewExpression);\n    } else if (this.isOptionalChain(node.callee)) {\n      this.raise(this.state.lastTokEnd, ErrorMessages.OptionalChainingNoNew);\n    } else if (this.eat(18)) {\n      this.raise(this.state.start, ErrorMessages.OptionalChainingNoNew);\n    }\n\n    this.parseNewArguments(node);\n    return this.finishNode(node, \"NewExpression\");\n  }\n\n  parseNewArguments(node) {\n    if (this.eat(10)) {\n      const args = this.parseExprList(11);\n      this.toReferencedList(args);\n      node.arguments = args;\n    } else {\n      node.arguments = [];\n    }\n  }\n\n  parseTemplateElement(isTagged) {\n    const elem = this.startNode();\n\n    if (this.state.value === null) {\n      if (!isTagged) {\n        this.raise(this.state.start + 1, ErrorMessages.InvalidEscapeSequenceTemplate);\n      }\n    }\n\n    elem.value = {\n      raw: this.input.slice(this.state.start, this.state.end).replace(/\\r\\n?/g, \"\\n\"),\n      cooked: this.state.value\n    };\n    this.next();\n    elem.tail = this.match(22);\n    return this.finishNode(elem, \"TemplateElement\");\n  }\n\n  parseTemplate(isTagged) {\n    const node = this.startNode();\n    this.next();\n    node.expressions = [];\n    let curElt = this.parseTemplateElement(isTagged);\n    node.quasis = [curElt];\n\n    while (!curElt.tail) {\n      this.expect(23);\n      node.expressions.push(this.parseTemplateSubstitution());\n      this.expect(8);\n      node.quasis.push(curElt = this.parseTemplateElement(isTagged));\n    }\n\n    this.next();\n    return this.finishNode(node, \"TemplateLiteral\");\n  }\n\n  parseTemplateSubstitution() {\n    return this.parseExpression();\n  }\n\n  parseObjectLike(close, isPattern, isRecord, refExpressionErrors) {\n    if (isRecord) {\n      this.expectPlugin(\"recordAndTuple\");\n    }\n\n    const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;\n    this.state.inFSharpPipelineDirectBody = false;\n    const propHash = Object.create(null);\n    let first = true;\n    const node = this.startNode();\n    node.properties = [];\n    this.next();\n\n    while (!this.match(close)) {\n      if (first) {\n        first = false;\n      } else {\n        this.expect(12);\n\n        if (this.match(close)) {\n          this.addExtra(node, \"trailingComma\", this.state.lastTokStart);\n          break;\n        }\n      }\n\n      let prop;\n\n      if (isPattern) {\n        prop = this.parseBindingProperty();\n      } else {\n        prop = this.parsePropertyDefinition(refExpressionErrors);\n        this.checkProto(prop, isRecord, propHash, refExpressionErrors);\n      }\n\n      if (isRecord && !this.isObjectProperty(prop) && prop.type !== \"SpreadElement\") {\n        this.raise(prop.start, ErrorMessages.InvalidRecordProperty);\n      }\n\n      if (prop.shorthand) {\n        this.addExtra(prop, \"shorthand\", true);\n      }\n\n      node.properties.push(prop);\n    }\n\n    this.next();\n    this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;\n    let type = \"ObjectExpression\";\n\n    if (isPattern) {\n      type = \"ObjectPattern\";\n    } else if (isRecord) {\n      type = \"RecordExpression\";\n    }\n\n    return this.finishNode(node, type);\n  }\n\n  maybeAsyncOrAccessorProp(prop) {\n    return !prop.computed && prop.key.type === \"Identifier\" && (this.isLiteralPropertyName() || this.match(0) || this.match(49));\n  }\n\n  parsePropertyDefinition(refExpressionErrors) {\n    let decorators = [];\n\n    if (this.match(24)) {\n      if (this.hasPlugin(\"decorators\")) {\n        this.raise(this.state.start, ErrorMessages.UnsupportedPropertyDecorator);\n      }\n\n      while (this.match(24)) {\n        decorators.push(this.parseDecorator());\n      }\n    }\n\n    const prop = this.startNode();\n    let isAsync = false;\n    let isAccessor = false;\n    let startPos;\n    let startLoc;\n\n    if (this.match(21)) {\n      if (decorators.length) this.unexpected();\n      return this.parseSpread();\n    }\n\n    if (decorators.length) {\n      prop.decorators = decorators;\n      decorators = [];\n    }\n\n    prop.method = false;\n\n    if (refExpressionErrors) {\n      startPos = this.state.start;\n      startLoc = this.state.startLoc;\n    }\n\n    let isGenerator = this.eat(49);\n    this.parsePropertyNamePrefixOperator(prop);\n    const containsEsc = this.state.containsEsc;\n    const key = this.parsePropertyName(prop);\n\n    if (!isGenerator && !containsEsc && this.maybeAsyncOrAccessorProp(prop)) {\n      const keyName = key.name;\n\n      if (keyName === \"async\" && !this.hasPrecedingLineBreak()) {\n        isAsync = true;\n        this.resetPreviousNodeTrailingComments(key);\n        isGenerator = this.eat(49);\n        this.parsePropertyName(prop);\n      }\n\n      if (keyName === \"get\" || keyName === \"set\") {\n        isAccessor = true;\n        this.resetPreviousNodeTrailingComments(key);\n        prop.kind = keyName;\n\n        if (this.match(49)) {\n          isGenerator = true;\n          this.raise(this.state.pos, ErrorMessages.AccessorIsGenerator, keyName);\n          this.next();\n        }\n\n        this.parsePropertyName(prop);\n      }\n    }\n\n    this.parseObjPropValue(prop, startPos, startLoc, isGenerator, isAsync, false, isAccessor, refExpressionErrors);\n    return prop;\n  }\n\n  getGetterSetterExpectedParamCount(method) {\n    return method.kind === \"get\" ? 0 : 1;\n  }\n\n  getObjectOrClassMethodParams(method) {\n    return method.params;\n  }\n\n  checkGetterSetterParams(method) {\n    var _params;\n\n    const paramCount = this.getGetterSetterExpectedParamCount(method);\n    const params = this.getObjectOrClassMethodParams(method);\n    const start = method.start;\n\n    if (params.length !== paramCount) {\n      if (method.kind === \"get\") {\n        this.raise(start, ErrorMessages.BadGetterArity);\n      } else {\n        this.raise(start, ErrorMessages.BadSetterArity);\n      }\n    }\n\n    if (method.kind === \"set\" && ((_params = params[params.length - 1]) == null ? void 0 : _params.type) === \"RestElement\") {\n      this.raise(start, ErrorMessages.BadSetterRestParameter);\n    }\n  }\n\n  parseObjectMethod(prop, isGenerator, isAsync, isPattern, isAccessor) {\n    if (isAccessor) {\n      this.parseMethod(prop, isGenerator, false, false, false, \"ObjectMethod\");\n      this.checkGetterSetterParams(prop);\n      return prop;\n    }\n\n    if (isAsync || isGenerator || this.match(10)) {\n      if (isPattern) this.unexpected();\n      prop.kind = \"method\";\n      prop.method = true;\n      return this.parseMethod(prop, isGenerator, isAsync, false, false, \"ObjectMethod\");\n    }\n  }\n\n  parseObjectProperty(prop, startPos, startLoc, isPattern, refExpressionErrors) {\n    prop.shorthand = false;\n\n    if (this.eat(14)) {\n      prop.value = isPattern ? this.parseMaybeDefault(this.state.start, this.state.startLoc) : this.parseMaybeAssignAllowIn(refExpressionErrors);\n      return this.finishNode(prop, \"ObjectProperty\");\n    }\n\n    if (!prop.computed && prop.key.type === \"Identifier\") {\n      this.checkReservedWord(prop.key.name, prop.key.start, true, false);\n\n      if (isPattern) {\n        prop.value = this.parseMaybeDefault(startPos, startLoc, cloneIdentifier(prop.key));\n      } else if (this.match(27) && refExpressionErrors) {\n        if (refExpressionErrors.shorthandAssign === -1) {\n          refExpressionErrors.shorthandAssign = this.state.start;\n        }\n\n        prop.value = this.parseMaybeDefault(startPos, startLoc, cloneIdentifier(prop.key));\n      } else {\n        prop.value = cloneIdentifier(prop.key);\n      }\n\n      prop.shorthand = true;\n      return this.finishNode(prop, \"ObjectProperty\");\n    }\n  }\n\n  parseObjPropValue(prop, startPos, startLoc, isGenerator, isAsync, isPattern, isAccessor, refExpressionErrors) {\n    const node = this.parseObjectMethod(prop, isGenerator, isAsync, isPattern, isAccessor) || this.parseObjectProperty(prop, startPos, startLoc, isPattern, refExpressionErrors);\n    if (!node) this.unexpected();\n    return node;\n  }\n\n  parsePropertyName(prop) {\n    if (this.eat(0)) {\n      prop.computed = true;\n      prop.key = this.parseMaybeAssignAllowIn();\n      this.expect(3);\n    } else {\n      const {\n        type,\n        value\n      } = this.state;\n      let key;\n\n      if (tokenIsKeywordOrIdentifier(type)) {\n        key = this.parseIdentifier(true);\n      } else {\n        switch (type) {\n          case 124:\n            key = this.parseNumericLiteral(value);\n            break;\n\n          case 123:\n            key = this.parseStringLiteral(value);\n            break;\n\n          case 125:\n            key = this.parseBigIntLiteral(value);\n            break;\n\n          case 126:\n            key = this.parseDecimalLiteral(value);\n            break;\n\n          case 128:\n            {\n              const privateKeyPos = this.state.start + 1;\n              this.raise(privateKeyPos, ErrorMessages.UnexpectedPrivateField);\n              key = this.parsePrivateName();\n              break;\n            }\n\n          default:\n            throw this.unexpected();\n        }\n      }\n\n      prop.key = key;\n\n      if (type !== 128) {\n        prop.computed = false;\n      }\n    }\n\n    return prop.key;\n  }\n\n  initFunction(node, isAsync) {\n    node.id = null;\n    node.generator = false;\n    node.async = !!isAsync;\n  }\n\n  parseMethod(node, isGenerator, isAsync, isConstructor, allowDirectSuper, type, inClassScope = false) {\n    this.initFunction(node, isAsync);\n    node.generator = !!isGenerator;\n    const allowModifiers = isConstructor;\n    this.scope.enter(SCOPE_FUNCTION | SCOPE_SUPER | (inClassScope ? SCOPE_CLASS : 0) | (allowDirectSuper ? SCOPE_DIRECT_SUPER : 0));\n    this.prodParam.enter(functionFlags(isAsync, node.generator));\n    this.parseFunctionParams(node, allowModifiers);\n    this.parseFunctionBodyAndFinish(node, type, true);\n    this.prodParam.exit();\n    this.scope.exit();\n    return node;\n  }\n\n  parseArrayLike(close, canBePattern, isTuple, refExpressionErrors) {\n    if (isTuple) {\n      this.expectPlugin(\"recordAndTuple\");\n    }\n\n    const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;\n    this.state.inFSharpPipelineDirectBody = false;\n    const node = this.startNode();\n    this.next();\n    node.elements = this.parseExprList(close, !isTuple, refExpressionErrors, node);\n    this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;\n    return this.finishNode(node, isTuple ? \"TupleExpression\" : \"ArrayExpression\");\n  }\n\n  parseArrowExpression(node, params, isAsync, trailingCommaPos) {\n    this.scope.enter(SCOPE_FUNCTION | SCOPE_ARROW);\n    let flags = functionFlags(isAsync, false);\n\n    if (!this.match(0) && this.prodParam.hasIn) {\n      flags |= PARAM_IN;\n    }\n\n    this.prodParam.enter(flags);\n    this.initFunction(node, isAsync);\n    const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;\n\n    if (params) {\n      this.state.maybeInArrowParameters = true;\n      this.setArrowFunctionParameters(node, params, trailingCommaPos);\n    }\n\n    this.state.maybeInArrowParameters = false;\n    this.parseFunctionBody(node, true);\n    this.prodParam.exit();\n    this.scope.exit();\n    this.state.maybeInArrowParameters = oldMaybeInArrowParameters;\n    return this.finishNode(node, \"ArrowFunctionExpression\");\n  }\n\n  setArrowFunctionParameters(node, params, trailingCommaPos) {\n    node.params = this.toAssignableList(params, trailingCommaPos, false);\n  }\n\n  parseFunctionBodyAndFinish(node, type, isMethod = false) {\n    this.parseFunctionBody(node, false, isMethod);\n    this.finishNode(node, type);\n  }\n\n  parseFunctionBody(node, allowExpression, isMethod = false) {\n    const isExpression = allowExpression && !this.match(5);\n    this.expressionScope.enter(newExpressionScope());\n\n    if (isExpression) {\n      node.body = this.parseMaybeAssign();\n      this.checkParams(node, false, allowExpression, false);\n    } else {\n      const oldStrict = this.state.strict;\n      const oldLabels = this.state.labels;\n      this.state.labels = [];\n      this.prodParam.enter(this.prodParam.currentFlags() | PARAM_RETURN);\n      node.body = this.parseBlock(true, false, hasStrictModeDirective => {\n        const nonSimple = !this.isSimpleParamList(node.params);\n\n        if (hasStrictModeDirective && nonSimple) {\n          const errorPos = (node.kind === \"method\" || node.kind === \"constructor\") && !!node.key ? node.key.end : node.start;\n          this.raise(errorPos, ErrorMessages.IllegalLanguageModeDirective);\n        }\n\n        const strictModeChanged = !oldStrict && this.state.strict;\n        this.checkParams(node, !this.state.strict && !allowExpression && !isMethod && !nonSimple, allowExpression, strictModeChanged);\n\n        if (this.state.strict && node.id) {\n          this.checkLVal(node.id, \"function name\", BIND_OUTSIDE, undefined, undefined, strictModeChanged);\n        }\n      });\n      this.prodParam.exit();\n      this.state.labels = oldLabels;\n    }\n\n    this.expressionScope.exit();\n  }\n\n  isSimpleParamList(params) {\n    for (let i = 0, len = params.length; i < len; i++) {\n      if (params[i].type !== \"Identifier\") return false;\n    }\n\n    return true;\n  }\n\n  checkParams(node, allowDuplicates, isArrowFunction, strictModeChanged = true) {\n    const checkClashes = new Set();\n\n    for (const param of node.params) {\n      this.checkLVal(param, \"function parameter list\", BIND_VAR, allowDuplicates ? null : checkClashes, undefined, strictModeChanged);\n    }\n  }\n\n  parseExprList(close, allowEmpty, refExpressionErrors, nodeForExtra) {\n    const elts = [];\n    let first = true;\n\n    while (!this.eat(close)) {\n      if (first) {\n        first = false;\n      } else {\n        this.expect(12);\n\n        if (this.match(close)) {\n          if (nodeForExtra) {\n            this.addExtra(nodeForExtra, \"trailingComma\", this.state.lastTokStart);\n          }\n\n          this.next();\n          break;\n        }\n      }\n\n      elts.push(this.parseExprListItem(allowEmpty, refExpressionErrors));\n    }\n\n    return elts;\n  }\n\n  parseExprListItem(allowEmpty, refExpressionErrors, allowPlaceholder) {\n    let elt;\n\n    if (this.match(12)) {\n      if (!allowEmpty) {\n        this.raise(this.state.pos, ErrorMessages.UnexpectedToken, \",\");\n      }\n\n      elt = null;\n    } else if (this.match(21)) {\n      const spreadNodeStartPos = this.state.start;\n      const spreadNodeStartLoc = this.state.startLoc;\n      elt = this.parseParenItem(this.parseSpread(refExpressionErrors), spreadNodeStartPos, spreadNodeStartLoc);\n    } else if (this.match(17)) {\n      this.expectPlugin(\"partialApplication\");\n\n      if (!allowPlaceholder) {\n        this.raise(this.state.start, ErrorMessages.UnexpectedArgumentPlaceholder);\n      }\n\n      const node = this.startNode();\n      this.next();\n      elt = this.finishNode(node, \"ArgumentPlaceholder\");\n    } else {\n      elt = this.parseMaybeAssignAllowIn(refExpressionErrors, this.parseParenItem);\n    }\n\n    return elt;\n  }\n\n  parseIdentifier(liberal) {\n    const node = this.startNode();\n    const name = this.parseIdentifierName(node.start, liberal);\n    return this.createIdentifier(node, name);\n  }\n\n  createIdentifier(node, name) {\n    node.name = name;\n    node.loc.identifierName = name;\n    return this.finishNode(node, \"Identifier\");\n  }\n\n  parseIdentifierName(pos, liberal) {\n    let name;\n    const {\n      start,\n      type\n    } = this.state;\n\n    if (tokenIsKeywordOrIdentifier(type)) {\n      name = this.state.value;\n    } else {\n      throw this.unexpected();\n    }\n\n    const tokenIsKeyword = tokenKeywordOrIdentifierIsKeyword(type);\n\n    if (liberal) {\n      if (tokenIsKeyword) {\n        this.replaceToken(122);\n      }\n    } else {\n      this.checkReservedWord(name, start, tokenIsKeyword, false);\n    }\n\n    this.next();\n    return name;\n  }\n\n  checkReservedWord(word, startLoc, checkKeywords, isBinding) {\n    if (word.length > 10) {\n      return;\n    }\n\n    if (!canBeReservedWord(word)) {\n      return;\n    }\n\n    if (word === \"yield\") {\n      if (this.prodParam.hasYield) {\n        this.raise(startLoc, ErrorMessages.YieldBindingIdentifier);\n        return;\n      }\n    } else if (word === \"await\") {\n      if (this.prodParam.hasAwait) {\n        this.raise(startLoc, ErrorMessages.AwaitBindingIdentifier);\n        return;\n      } else if (this.scope.inStaticBlock) {\n        this.raise(startLoc, ErrorMessages.AwaitBindingIdentifierInStaticBlock);\n        return;\n      } else {\n        this.expressionScope.recordAsyncArrowParametersError(startLoc, ErrorMessages.AwaitBindingIdentifier);\n      }\n    } else if (word === \"arguments\") {\n      if (this.scope.inClassAndNotInNonArrowFunction) {\n        this.raise(startLoc, ErrorMessages.ArgumentsInClass);\n        return;\n      }\n    }\n\n    if (checkKeywords && isKeyword(word)) {\n      this.raise(startLoc, ErrorMessages.UnexpectedKeyword, word);\n      return;\n    }\n\n    const reservedTest = !this.state.strict ? isReservedWord : isBinding ? isStrictBindReservedWord : isStrictReservedWord;\n\n    if (reservedTest(word, this.inModule)) {\n      this.raise(startLoc, ErrorMessages.UnexpectedReservedWord, word);\n    }\n  }\n\n  isAwaitAllowed() {\n    if (this.prodParam.hasAwait) return true;\n\n    if (this.options.allowAwaitOutsideFunction && !this.scope.inFunction) {\n      return true;\n    }\n\n    return false;\n  }\n\n  parseAwait(startPos, startLoc) {\n    const node = this.startNodeAt(startPos, startLoc);\n    this.expressionScope.recordParameterInitializerError(node.start, ErrorMessages.AwaitExpressionFormalParameter);\n\n    if (this.eat(49)) {\n      this.raise(node.start, ErrorMessages.ObsoleteAwaitStar);\n    }\n\n    if (!this.scope.inFunction && !this.options.allowAwaitOutsideFunction) {\n      if (this.isAmbiguousAwait()) {\n        this.ambiguousScriptDifferentAst = true;\n      } else {\n        this.sawUnambiguousESM = true;\n      }\n    }\n\n    if (!this.state.soloAwait) {\n      node.argument = this.parseMaybeUnary(null, true);\n    }\n\n    return this.finishNode(node, \"AwaitExpression\");\n  }\n\n  isAmbiguousAwait() {\n    return this.hasPrecedingLineBreak() || this.match(47) || this.match(10) || this.match(0) || this.match(22) || this.match(127) || this.match(50) || this.hasPlugin(\"v8intrinsic\") && this.match(48);\n  }\n\n  parseYield() {\n    const node = this.startNode();\n    this.expressionScope.recordParameterInitializerError(node.start, ErrorMessages.YieldInParameter);\n    this.next();\n    let delegating = false;\n    let argument = null;\n\n    if (!this.hasPrecedingLineBreak()) {\n      delegating = this.eat(49);\n\n      switch (this.state.type) {\n        case 13:\n        case 129:\n        case 8:\n        case 11:\n        case 3:\n        case 9:\n        case 14:\n        case 12:\n          if (!delegating) break;\n\n        default:\n          argument = this.parseMaybeAssign();\n      }\n    }\n\n    node.delegate = delegating;\n    node.argument = argument;\n    return this.finishNode(node, \"YieldExpression\");\n  }\n\n  checkPipelineAtInfixOperator(left, leftStartPos) {\n    if (this.getPluginOption(\"pipelineOperator\", \"proposal\") === \"smart\") {\n      if (left.type === \"SequenceExpression\") {\n        this.raise(leftStartPos, ErrorMessages.PipelineHeadSequenceExpression);\n      }\n    }\n  }\n\n  checkHackPipeBodyEarlyErrors(startPos) {\n    if (!this.topicReferenceWasUsedInCurrentContext()) {\n      this.raise(startPos, ErrorMessages.PipeTopicUnused);\n    }\n  }\n\n  parseSmartPipelineBodyInStyle(childExpr, startPos, startLoc) {\n    const bodyNode = this.startNodeAt(startPos, startLoc);\n\n    if (this.isSimpleReference(childExpr)) {\n      bodyNode.callee = childExpr;\n      return this.finishNode(bodyNode, \"PipelineBareFunction\");\n    } else {\n      this.checkSmartPipeTopicBodyEarlyErrors(startPos);\n      bodyNode.expression = childExpr;\n      return this.finishNode(bodyNode, \"PipelineTopicExpression\");\n    }\n  }\n\n  isSimpleReference(expression) {\n    switch (expression.type) {\n      case \"MemberExpression\":\n        return !expression.computed && this.isSimpleReference(expression.object);\n\n      case \"Identifier\":\n        return true;\n\n      default:\n        return false;\n    }\n  }\n\n  checkSmartPipeTopicBodyEarlyErrors(startPos) {\n    if (this.match(19)) {\n      throw this.raise(this.state.start, ErrorMessages.PipelineBodyNoArrow);\n    } else if (!this.topicReferenceWasUsedInCurrentContext()) {\n      this.raise(startPos, ErrorMessages.PipelineTopicUnused);\n    }\n  }\n\n  withTopicBindingContext(callback) {\n    const outerContextTopicState = this.state.topicContext;\n    this.state.topicContext = {\n      maxNumOfResolvableTopics: 1,\n      maxTopicIndex: null\n    };\n\n    try {\n      return callback();\n    } finally {\n      this.state.topicContext = outerContextTopicState;\n    }\n  }\n\n  withSmartMixTopicForbiddingContext(callback) {\n    const proposal = this.getPluginOption(\"pipelineOperator\", \"proposal\");\n\n    if (proposal === \"smart\") {\n      const outerContextTopicState = this.state.topicContext;\n      this.state.topicContext = {\n        maxNumOfResolvableTopics: 0,\n        maxTopicIndex: null\n      };\n\n      try {\n        return callback();\n      } finally {\n        this.state.topicContext = outerContextTopicState;\n      }\n    } else {\n      return callback();\n    }\n  }\n\n  withSoloAwaitPermittingContext(callback) {\n    const outerContextSoloAwaitState = this.state.soloAwait;\n    this.state.soloAwait = true;\n\n    try {\n      return callback();\n    } finally {\n      this.state.soloAwait = outerContextSoloAwaitState;\n    }\n  }\n\n  allowInAnd(callback) {\n    const flags = this.prodParam.currentFlags();\n    const prodParamToSet = PARAM_IN & ~flags;\n\n    if (prodParamToSet) {\n      this.prodParam.enter(flags | PARAM_IN);\n\n      try {\n        return callback();\n      } finally {\n        this.prodParam.exit();\n      }\n    }\n\n    return callback();\n  }\n\n  disallowInAnd(callback) {\n    const flags = this.prodParam.currentFlags();\n    const prodParamToClear = PARAM_IN & flags;\n\n    if (prodParamToClear) {\n      this.prodParam.enter(flags & ~PARAM_IN);\n\n      try {\n        return callback();\n      } finally {\n        this.prodParam.exit();\n      }\n    }\n\n    return callback();\n  }\n\n  registerTopicReference() {\n    this.state.topicContext.maxTopicIndex = 0;\n  }\n\n  topicReferenceIsAllowedInCurrentContext() {\n    return this.state.topicContext.maxNumOfResolvableTopics >= 1;\n  }\n\n  topicReferenceWasUsedInCurrentContext() {\n    return this.state.topicContext.maxTopicIndex != null && this.state.topicContext.maxTopicIndex >= 0;\n  }\n\n  parseFSharpPipelineBody(prec) {\n    const startPos = this.state.start;\n    const startLoc = this.state.startLoc;\n    this.state.potentialArrowAt = this.state.start;\n    const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;\n    this.state.inFSharpPipelineDirectBody = true;\n    const ret = this.parseExprOp(this.parseMaybeUnaryOrPrivate(), startPos, startLoc, prec);\n    this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;\n    return ret;\n  }\n\n  parseModuleExpression() {\n    this.expectPlugin(\"moduleBlocks\");\n    const node = this.startNode();\n    this.next();\n    this.eat(5);\n    const revertScopes = this.initializeScopes(true);\n    this.enterInitialScopes();\n    const program = this.startNode();\n\n    try {\n      node.body = this.parseProgram(program, 8, \"module\");\n    } finally {\n      revertScopes();\n    }\n\n    this.eat(8);\n    return this.finishNode(node, \"ModuleExpression\");\n  }\n\n  parsePropertyNamePrefixOperator(prop) {}\n\n}\n\nconst loopLabel = {\n  kind: \"loop\"\n},\n      switchLabel = {\n  kind: \"switch\"\n};\nconst FUNC_NO_FLAGS = 0b000,\n      FUNC_STATEMENT = 0b001,\n      FUNC_HANGING_STATEMENT = 0b010,\n      FUNC_NULLABLE_ID = 0b100;\nconst loneSurrogate = /[\\uD800-\\uDFFF]/u;\nconst keywordRelationalOperator = /in(?:stanceof)?/y;\n\nfunction babel7CompatTokens(tokens) {\n  for (let i = 0; i < tokens.length; i++) {\n    const token = tokens[i];\n    const {\n      type\n    } = token;\n\n    if (type === 128) {\n      {\n        const {\n          loc,\n          start,\n          value,\n          end\n        } = token;\n        const hashEndPos = start + 1;\n        const hashEndLoc = new Position(loc.start.line, loc.start.column + 1);\n        tokens.splice(i, 1, new Token({\n          type: getExportedToken(25),\n          value: \"#\",\n          start: start,\n          end: hashEndPos,\n          startLoc: loc.start,\n          endLoc: hashEndLoc\n        }), new Token({\n          type: getExportedToken(122),\n          value: value,\n          start: hashEndPos,\n          end: end,\n          startLoc: hashEndLoc,\n          endLoc: loc.end\n        }));\n        i++;\n        continue;\n      }\n    }\n\n    if (typeof type === \"number\") {\n      token.type = getExportedToken(type);\n    }\n  }\n\n  return tokens;\n}\n\nclass StatementParser extends ExpressionParser {\n  parseTopLevel(file, program) {\n    file.program = this.parseProgram(program);\n    file.comments = this.state.comments;\n    if (this.options.tokens) file.tokens = babel7CompatTokens(this.tokens);\n    return this.finishNode(file, \"File\");\n  }\n\n  parseProgram(program, end = 129, sourceType = this.options.sourceType) {\n    program.sourceType = sourceType;\n    program.interpreter = this.parseInterpreterDirective();\n    this.parseBlockBody(program, true, true, end);\n\n    if (this.inModule && !this.options.allowUndeclaredExports && this.scope.undefinedExports.size > 0) {\n      for (const [name] of Array.from(this.scope.undefinedExports)) {\n        const pos = this.scope.undefinedExports.get(name);\n        this.raise(pos, ErrorMessages.ModuleExportUndefined, name);\n      }\n    }\n\n    return this.finishNode(program, \"Program\");\n  }\n\n  stmtToDirective(stmt) {\n    const directive = stmt;\n    directive.type = \"Directive\";\n    directive.value = directive.expression;\n    delete directive.expression;\n    const directiveLiteral = directive.value;\n    const expressionValue = directiveLiteral.value;\n    const raw = this.input.slice(directiveLiteral.start, directiveLiteral.end);\n    const val = directiveLiteral.value = raw.slice(1, -1);\n    this.addExtra(directiveLiteral, \"raw\", raw);\n    this.addExtra(directiveLiteral, \"rawValue\", val);\n    this.addExtra(directiveLiteral, \"expressionValue\", expressionValue);\n    directiveLiteral.type = \"DirectiveLiteral\";\n    return directive;\n  }\n\n  parseInterpreterDirective() {\n    if (!this.match(26)) {\n      return null;\n    }\n\n    const node = this.startNode();\n    node.value = this.state.value;\n    this.next();\n    return this.finishNode(node, \"InterpreterDirective\");\n  }\n\n  isLet(context) {\n    if (!this.isContextual(93)) {\n      return false;\n    }\n\n    return this.isLetKeyword(context);\n  }\n\n  isLetKeyword(context) {\n    const next = this.nextTokenStart();\n    const nextCh = this.codePointAtPos(next);\n\n    if (nextCh === 92 || nextCh === 91) {\n      return true;\n    }\n\n    if (context) return false;\n    if (nextCh === 123) return true;\n\n    if (isIdentifierStart(nextCh)) {\n      keywordRelationalOperator.lastIndex = next;\n\n      if (keywordRelationalOperator.test(this.input)) {\n        const endCh = this.codePointAtPos(keywordRelationalOperator.lastIndex);\n\n        if (!isIdentifierChar(endCh) && endCh !== 92) {\n          return false;\n        }\n      }\n\n      return true;\n    }\n\n    return false;\n  }\n\n  parseStatement(context, topLevel) {\n    if (this.match(24)) {\n      this.parseDecorators(true);\n    }\n\n    return this.parseStatementContent(context, topLevel);\n  }\n\n  parseStatementContent(context, topLevel) {\n    let starttype = this.state.type;\n    const node = this.startNode();\n    let kind;\n\n    if (this.isLet(context)) {\n      starttype = 68;\n      kind = \"let\";\n    }\n\n    switch (starttype) {\n      case 54:\n        return this.parseBreakContinueStatement(node, true);\n\n      case 57:\n        return this.parseBreakContinueStatement(node, false);\n\n      case 58:\n        return this.parseDebuggerStatement(node);\n\n      case 84:\n        return this.parseDoStatement(node);\n\n      case 85:\n        return this.parseForStatement(node);\n\n      case 62:\n        if (this.lookaheadCharCode() === 46) break;\n\n        if (context) {\n          if (this.state.strict) {\n            this.raise(this.state.start, ErrorMessages.StrictFunction);\n          } else if (context !== \"if\" && context !== \"label\") {\n            this.raise(this.state.start, ErrorMessages.SloppyFunction);\n          }\n        }\n\n        return this.parseFunctionStatement(node, false, !context);\n\n      case 74:\n        if (context) this.unexpected();\n        return this.parseClass(node, true);\n\n      case 63:\n        return this.parseIfStatement(node);\n\n      case 64:\n        return this.parseReturnStatement(node);\n\n      case 65:\n        return this.parseSwitchStatement(node);\n\n      case 66:\n        return this.parseThrowStatement(node);\n\n      case 67:\n        return this.parseTryStatement(node);\n\n      case 69:\n      case 68:\n        kind = kind || this.state.value;\n\n        if (context && kind !== \"var\") {\n          this.raise(this.state.start, ErrorMessages.UnexpectedLexicalDeclaration);\n        }\n\n        return this.parseVarStatement(node, kind);\n\n      case 86:\n        return this.parseWhileStatement(node);\n\n      case 70:\n        return this.parseWithStatement(node);\n\n      case 5:\n        return this.parseBlock();\n\n      case 13:\n        return this.parseEmptyStatement(node);\n\n      case 77:\n        {\n          const nextTokenCharCode = this.lookaheadCharCode();\n\n          if (nextTokenCharCode === 40 || nextTokenCharCode === 46) {\n            break;\n          }\n        }\n\n      case 76:\n        {\n          if (!this.options.allowImportExportEverywhere && !topLevel) {\n            this.raise(this.state.start, ErrorMessages.UnexpectedImportExport);\n          }\n\n          this.next();\n          let result;\n\n          if (starttype === 77) {\n            result = this.parseImport(node);\n\n            if (result.type === \"ImportDeclaration\" && (!result.importKind || result.importKind === \"value\")) {\n              this.sawUnambiguousESM = true;\n            }\n          } else {\n            result = this.parseExport(node);\n\n            if (result.type === \"ExportNamedDeclaration\" && (!result.exportKind || result.exportKind === \"value\") || result.type === \"ExportAllDeclaration\" && (!result.exportKind || result.exportKind === \"value\") || result.type === \"ExportDefaultDeclaration\") {\n              this.sawUnambiguousESM = true;\n            }\n          }\n\n          this.assertModuleNodeAllowed(node);\n          return result;\n        }\n\n      default:\n        {\n          if (this.isAsyncFunction()) {\n            if (context) {\n              this.raise(this.state.start, ErrorMessages.AsyncFunctionInSingleStatementContext);\n            }\n\n            this.next();\n            return this.parseFunctionStatement(node, true, !context);\n          }\n        }\n    }\n\n    const maybeName = this.state.value;\n    const expr = this.parseExpression();\n\n    if (tokenIsIdentifier(starttype) && expr.type === \"Identifier\" && this.eat(14)) {\n      return this.parseLabeledStatement(node, maybeName, expr, context);\n    } else {\n      return this.parseExpressionStatement(node, expr);\n    }\n  }\n\n  assertModuleNodeAllowed(node) {\n    if (!this.options.allowImportExportEverywhere && !this.inModule) {\n      this.raise(node.start, SourceTypeModuleErrorMessages.ImportOutsideModule);\n    }\n  }\n\n  takeDecorators(node) {\n    const decorators = this.state.decoratorStack[this.state.decoratorStack.length - 1];\n\n    if (decorators.length) {\n      node.decorators = decorators;\n      this.resetStartLocationFromNode(node, decorators[0]);\n      this.state.decoratorStack[this.state.decoratorStack.length - 1] = [];\n    }\n  }\n\n  canHaveLeadingDecorator() {\n    return this.match(74);\n  }\n\n  parseDecorators(allowExport) {\n    const currentContextDecorators = this.state.decoratorStack[this.state.decoratorStack.length - 1];\n\n    while (this.match(24)) {\n      const decorator = this.parseDecorator();\n      currentContextDecorators.push(decorator);\n    }\n\n    if (this.match(76)) {\n      if (!allowExport) {\n        this.unexpected();\n      }\n\n      if (this.hasPlugin(\"decorators\") && !this.getPluginOption(\"decorators\", \"decoratorsBeforeExport\")) {\n        this.raise(this.state.start, ErrorMessages.DecoratorExportClass);\n      }\n    } else if (!this.canHaveLeadingDecorator()) {\n      throw this.raise(this.state.start, ErrorMessages.UnexpectedLeadingDecorator);\n    }\n  }\n\n  parseDecorator() {\n    this.expectOnePlugin([\"decorators-legacy\", \"decorators\"]);\n    const node = this.startNode();\n    this.next();\n\n    if (this.hasPlugin(\"decorators\")) {\n      this.state.decoratorStack.push([]);\n      const startPos = this.state.start;\n      const startLoc = this.state.startLoc;\n      let expr;\n\n      if (this.eat(10)) {\n        expr = this.parseExpression();\n        this.expect(11);\n      } else {\n        expr = this.parseIdentifier(false);\n\n        while (this.eat(16)) {\n          const node = this.startNodeAt(startPos, startLoc);\n          node.object = expr;\n          node.property = this.parseIdentifier(true);\n          node.computed = false;\n          expr = this.finishNode(node, \"MemberExpression\");\n        }\n      }\n\n      node.expression = this.parseMaybeDecoratorArguments(expr);\n      this.state.decoratorStack.pop();\n    } else {\n      node.expression = this.parseExprSubscripts();\n    }\n\n    return this.finishNode(node, \"Decorator\");\n  }\n\n  parseMaybeDecoratorArguments(expr) {\n    if (this.eat(10)) {\n      const node = this.startNodeAtNode(expr);\n      node.callee = expr;\n      node.arguments = this.parseCallExpressionArguments(11, false);\n      this.toReferencedList(node.arguments);\n      return this.finishNode(node, \"CallExpression\");\n    }\n\n    return expr;\n  }\n\n  parseBreakContinueStatement(node, isBreak) {\n    this.next();\n\n    if (this.isLineTerminator()) {\n      node.label = null;\n    } else {\n      node.label = this.parseIdentifier();\n      this.semicolon();\n    }\n\n    this.verifyBreakContinue(node, isBreak);\n    return this.finishNode(node, isBreak ? \"BreakStatement\" : \"ContinueStatement\");\n  }\n\n  verifyBreakContinue(node, isBreak) {\n    let i;\n\n    for (i = 0; i < this.state.labels.length; ++i) {\n      const lab = this.state.labels[i];\n\n      if (node.label == null || lab.name === node.label.name) {\n        if (lab.kind != null && (isBreak || lab.kind === \"loop\")) break;\n        if (node.label && isBreak) break;\n      }\n    }\n\n    if (i === this.state.labels.length) {\n      this.raise(node.start, ErrorMessages.IllegalBreakContinue, isBreak ? \"break\" : \"continue\");\n    }\n  }\n\n  parseDebuggerStatement(node) {\n    this.next();\n    this.semicolon();\n    return this.finishNode(node, \"DebuggerStatement\");\n  }\n\n  parseHeaderExpression() {\n    this.expect(10);\n    const val = this.parseExpression();\n    this.expect(11);\n    return val;\n  }\n\n  parseDoStatement(node) {\n    this.next();\n    this.state.labels.push(loopLabel);\n    node.body = this.withSmartMixTopicForbiddingContext(() => this.parseStatement(\"do\"));\n    this.state.labels.pop();\n    this.expect(86);\n    node.test = this.parseHeaderExpression();\n    this.eat(13);\n    return this.finishNode(node, \"DoWhileStatement\");\n  }\n\n  parseForStatement(node) {\n    this.next();\n    this.state.labels.push(loopLabel);\n    let awaitAt = -1;\n\n    if (this.isAwaitAllowed() && this.eatContextual(90)) {\n      awaitAt = this.state.lastTokStart;\n    }\n\n    this.scope.enter(SCOPE_OTHER);\n    this.expect(10);\n\n    if (this.match(13)) {\n      if (awaitAt > -1) {\n        this.unexpected(awaitAt);\n      }\n\n      return this.parseFor(node, null);\n    }\n\n    const startsWithLet = this.isContextual(93);\n    const isLet = startsWithLet && this.isLetKeyword();\n\n    if (this.match(68) || this.match(69) || isLet) {\n      const init = this.startNode();\n      const kind = isLet ? \"let\" : this.state.value;\n      this.next();\n      this.parseVar(init, true, kind);\n      this.finishNode(init, \"VariableDeclaration\");\n\n      if ((this.match(52) || this.isContextual(95)) && init.declarations.length === 1) {\n        return this.parseForIn(node, init, awaitAt);\n      }\n\n      if (awaitAt > -1) {\n        this.unexpected(awaitAt);\n      }\n\n      return this.parseFor(node, init);\n    }\n\n    const startsWithAsync = this.isContextual(89);\n    const refExpressionErrors = new ExpressionErrors();\n    const init = this.parseExpression(true, refExpressionErrors);\n    const isForOf = this.isContextual(95);\n\n    if (isForOf) {\n      if (startsWithLet) {\n        this.raise(init.start, ErrorMessages.ForOfLet);\n      } else if (awaitAt === -1 && startsWithAsync && init.type === \"Identifier\") {\n        this.raise(init.start, ErrorMessages.ForOfAsync);\n      }\n    }\n\n    if (isForOf || this.match(52)) {\n      this.toAssignable(init, true);\n      const description = isForOf ? \"for-of statement\" : \"for-in statement\";\n      this.checkLVal(init, description);\n      return this.parseForIn(node, init, awaitAt);\n    } else {\n      this.checkExpressionErrors(refExpressionErrors, true);\n    }\n\n    if (awaitAt > -1) {\n      this.unexpected(awaitAt);\n    }\n\n    return this.parseFor(node, init);\n  }\n\n  parseFunctionStatement(node, isAsync, declarationPosition) {\n    this.next();\n    return this.parseFunction(node, FUNC_STATEMENT | (declarationPosition ? 0 : FUNC_HANGING_STATEMENT), isAsync);\n  }\n\n  parseIfStatement(node) {\n    this.next();\n    node.test = this.parseHeaderExpression();\n    node.consequent = this.parseStatement(\"if\");\n    node.alternate = this.eat(60) ? this.parseStatement(\"if\") : null;\n    return this.finishNode(node, \"IfStatement\");\n  }\n\n  parseReturnStatement(node) {\n    if (!this.prodParam.hasReturn && !this.options.allowReturnOutsideFunction) {\n      this.raise(this.state.start, ErrorMessages.IllegalReturn);\n    }\n\n    this.next();\n\n    if (this.isLineTerminator()) {\n      node.argument = null;\n    } else {\n      node.argument = this.parseExpression();\n      this.semicolon();\n    }\n\n    return this.finishNode(node, \"ReturnStatement\");\n  }\n\n  parseSwitchStatement(node) {\n    this.next();\n    node.discriminant = this.parseHeaderExpression();\n    const cases = node.cases = [];\n    this.expect(5);\n    this.state.labels.push(switchLabel);\n    this.scope.enter(SCOPE_OTHER);\n    let cur;\n\n    for (let sawDefault; !this.match(8);) {\n      if (this.match(55) || this.match(59)) {\n        const isCase = this.match(55);\n        if (cur) this.finishNode(cur, \"SwitchCase\");\n        cases.push(cur = this.startNode());\n        cur.consequent = [];\n        this.next();\n\n        if (isCase) {\n          cur.test = this.parseExpression();\n        } else {\n          if (sawDefault) {\n            this.raise(this.state.lastTokStart, ErrorMessages.MultipleDefaultsInSwitch);\n          }\n\n          sawDefault = true;\n          cur.test = null;\n        }\n\n        this.expect(14);\n      } else {\n        if (cur) {\n          cur.consequent.push(this.parseStatement(null));\n        } else {\n          this.unexpected();\n        }\n      }\n    }\n\n    this.scope.exit();\n    if (cur) this.finishNode(cur, \"SwitchCase\");\n    this.next();\n    this.state.labels.pop();\n    return this.finishNode(node, \"SwitchStatement\");\n  }\n\n  parseThrowStatement(node) {\n    this.next();\n\n    if (this.hasPrecedingLineBreak()) {\n      this.raise(this.state.lastTokEnd, ErrorMessages.NewlineAfterThrow);\n    }\n\n    node.argument = this.parseExpression();\n    this.semicolon();\n    return this.finishNode(node, \"ThrowStatement\");\n  }\n\n  parseCatchClauseParam() {\n    const param = this.parseBindingAtom();\n    const simple = param.type === \"Identifier\";\n    this.scope.enter(simple ? SCOPE_SIMPLE_CATCH : 0);\n    this.checkLVal(param, \"catch clause\", BIND_LEXICAL);\n    return param;\n  }\n\n  parseTryStatement(node) {\n    this.next();\n    node.block = this.parseBlock();\n    node.handler = null;\n\n    if (this.match(56)) {\n      const clause = this.startNode();\n      this.next();\n\n      if (this.match(10)) {\n        this.expect(10);\n        clause.param = this.parseCatchClauseParam();\n        this.expect(11);\n      } else {\n        clause.param = null;\n        this.scope.enter(SCOPE_OTHER);\n      }\n\n      clause.body = this.withSmartMixTopicForbiddingContext(() => this.parseBlock(false, false));\n      this.scope.exit();\n      node.handler = this.finishNode(clause, \"CatchClause\");\n    }\n\n    node.finalizer = this.eat(61) ? this.parseBlock() : null;\n\n    if (!node.handler && !node.finalizer) {\n      this.raise(node.start, ErrorMessages.NoCatchOrFinally);\n    }\n\n    return this.finishNode(node, \"TryStatement\");\n  }\n\n  parseVarStatement(node, kind) {\n    this.next();\n    this.parseVar(node, false, kind);\n    this.semicolon();\n    return this.finishNode(node, \"VariableDeclaration\");\n  }\n\n  parseWhileStatement(node) {\n    this.next();\n    node.test = this.parseHeaderExpression();\n    this.state.labels.push(loopLabel);\n    node.body = this.withSmartMixTopicForbiddingContext(() => this.parseStatement(\"while\"));\n    this.state.labels.pop();\n    return this.finishNode(node, \"WhileStatement\");\n  }\n\n  parseWithStatement(node) {\n    if (this.state.strict) {\n      this.raise(this.state.start, ErrorMessages.StrictWith);\n    }\n\n    this.next();\n    node.object = this.parseHeaderExpression();\n    node.body = this.withSmartMixTopicForbiddingContext(() => this.parseStatement(\"with\"));\n    return this.finishNode(node, \"WithStatement\");\n  }\n\n  parseEmptyStatement(node) {\n    this.next();\n    return this.finishNode(node, \"EmptyStatement\");\n  }\n\n  parseLabeledStatement(node, maybeName, expr, context) {\n    for (const label of this.state.labels) {\n      if (label.name === maybeName) {\n        this.raise(expr.start, ErrorMessages.LabelRedeclaration, maybeName);\n      }\n    }\n\n    const kind = tokenIsLoop(this.state.type) ? \"loop\" : this.match(65) ? \"switch\" : null;\n\n    for (let i = this.state.labels.length - 1; i >= 0; i--) {\n      const label = this.state.labels[i];\n\n      if (label.statementStart === node.start) {\n        label.statementStart = this.state.start;\n        label.kind = kind;\n      } else {\n        break;\n      }\n    }\n\n    this.state.labels.push({\n      name: maybeName,\n      kind: kind,\n      statementStart: this.state.start\n    });\n    node.body = this.parseStatement(context ? context.indexOf(\"label\") === -1 ? context + \"label\" : context : \"label\");\n    this.state.labels.pop();\n    node.label = expr;\n    return this.finishNode(node, \"LabeledStatement\");\n  }\n\n  parseExpressionStatement(node, expr) {\n    node.expression = expr;\n    this.semicolon();\n    return this.finishNode(node, \"ExpressionStatement\");\n  }\n\n  parseBlock(allowDirectives = false, createNewLexicalScope = true, afterBlockParse) {\n    const node = this.startNode();\n\n    if (allowDirectives) {\n      this.state.strictErrors.clear();\n    }\n\n    this.expect(5);\n\n    if (createNewLexicalScope) {\n      this.scope.enter(SCOPE_OTHER);\n    }\n\n    this.parseBlockBody(node, allowDirectives, false, 8, afterBlockParse);\n\n    if (createNewLexicalScope) {\n      this.scope.exit();\n    }\n\n    return this.finishNode(node, \"BlockStatement\");\n  }\n\n  isValidDirective(stmt) {\n    return stmt.type === \"ExpressionStatement\" && stmt.expression.type === \"StringLiteral\" && !stmt.expression.extra.parenthesized;\n  }\n\n  parseBlockBody(node, allowDirectives, topLevel, end, afterBlockParse) {\n    const body = node.body = [];\n    const directives = node.directives = [];\n    this.parseBlockOrModuleBlockBody(body, allowDirectives ? directives : undefined, topLevel, end, afterBlockParse);\n  }\n\n  parseBlockOrModuleBlockBody(body, directives, topLevel, end, afterBlockParse) {\n    const oldStrict = this.state.strict;\n    let hasStrictModeDirective = false;\n    let parsedNonDirective = false;\n\n    while (!this.match(end)) {\n      const stmt = this.parseStatement(null, topLevel);\n\n      if (directives && !parsedNonDirective) {\n        if (this.isValidDirective(stmt)) {\n          const directive = this.stmtToDirective(stmt);\n          directives.push(directive);\n\n          if (!hasStrictModeDirective && directive.value.value === \"use strict\") {\n            hasStrictModeDirective = true;\n            this.setStrict(true);\n          }\n\n          continue;\n        }\n\n        parsedNonDirective = true;\n        this.state.strictErrors.clear();\n      }\n\n      body.push(stmt);\n    }\n\n    if (afterBlockParse) {\n      afterBlockParse.call(this, hasStrictModeDirective);\n    }\n\n    if (!oldStrict) {\n      this.setStrict(false);\n    }\n\n    this.next();\n  }\n\n  parseFor(node, init) {\n    node.init = init;\n    this.semicolon(false);\n    node.test = this.match(13) ? null : this.parseExpression();\n    this.semicolon(false);\n    node.update = this.match(11) ? null : this.parseExpression();\n    this.expect(11);\n    node.body = this.withSmartMixTopicForbiddingContext(() => this.parseStatement(\"for\"));\n    this.scope.exit();\n    this.state.labels.pop();\n    return this.finishNode(node, \"ForStatement\");\n  }\n\n  parseForIn(node, init, awaitAt) {\n    const isForIn = this.match(52);\n    this.next();\n\n    if (isForIn) {\n      if (awaitAt > -1) this.unexpected(awaitAt);\n    } else {\n      node.await = awaitAt > -1;\n    }\n\n    if (init.type === \"VariableDeclaration\" && init.declarations[0].init != null && (!isForIn || this.state.strict || init.kind !== \"var\" || init.declarations[0].id.type !== \"Identifier\")) {\n      this.raise(init.start, ErrorMessages.ForInOfLoopInitializer, isForIn ? \"for-in\" : \"for-of\");\n    } else if (init.type === \"AssignmentPattern\") {\n      this.raise(init.start, ErrorMessages.InvalidLhs, \"for-loop\");\n    }\n\n    node.left = init;\n    node.right = isForIn ? this.parseExpression() : this.parseMaybeAssignAllowIn();\n    this.expect(11);\n    node.body = this.withSmartMixTopicForbiddingContext(() => this.parseStatement(\"for\"));\n    this.scope.exit();\n    this.state.labels.pop();\n    return this.finishNode(node, isForIn ? \"ForInStatement\" : \"ForOfStatement\");\n  }\n\n  parseVar(node, isFor, kind) {\n    const declarations = node.declarations = [];\n    const isTypescript = this.hasPlugin(\"typescript\");\n    node.kind = kind;\n\n    for (;;) {\n      const decl = this.startNode();\n      this.parseVarId(decl, kind);\n\n      if (this.eat(27)) {\n        decl.init = isFor ? this.parseMaybeAssignDisallowIn() : this.parseMaybeAssignAllowIn();\n      } else {\n        if (kind === \"const\" && !(this.match(52) || this.isContextual(95))) {\n          if (!isTypescript) {\n            this.raise(this.state.lastTokEnd, ErrorMessages.DeclarationMissingInitializer, \"Const declarations\");\n          }\n        } else if (decl.id.type !== \"Identifier\" && !(isFor && (this.match(52) || this.isContextual(95)))) {\n          this.raise(this.state.lastTokEnd, ErrorMessages.DeclarationMissingInitializer, \"Complex binding patterns\");\n        }\n\n        decl.init = null;\n      }\n\n      declarations.push(this.finishNode(decl, \"VariableDeclarator\"));\n      if (!this.eat(12)) break;\n    }\n\n    return node;\n  }\n\n  parseVarId(decl, kind) {\n    decl.id = this.parseBindingAtom();\n    this.checkLVal(decl.id, \"variable declaration\", kind === \"var\" ? BIND_VAR : BIND_LEXICAL, undefined, kind !== \"var\");\n  }\n\n  parseFunction(node, statement = FUNC_NO_FLAGS, isAsync = false) {\n    const isStatement = statement & FUNC_STATEMENT;\n    const isHangingStatement = statement & FUNC_HANGING_STATEMENT;\n    const requireId = !!isStatement && !(statement & FUNC_NULLABLE_ID);\n    this.initFunction(node, isAsync);\n\n    if (this.match(49) && isHangingStatement) {\n      this.raise(this.state.start, ErrorMessages.GeneratorInSingleStatementContext);\n    }\n\n    node.generator = this.eat(49);\n\n    if (isStatement) {\n      node.id = this.parseFunctionId(requireId);\n    }\n\n    const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;\n    this.state.maybeInArrowParameters = false;\n    this.scope.enter(SCOPE_FUNCTION);\n    this.prodParam.enter(functionFlags(isAsync, node.generator));\n\n    if (!isStatement) {\n      node.id = this.parseFunctionId();\n    }\n\n    this.parseFunctionParams(node, false);\n    this.withSmartMixTopicForbiddingContext(() => {\n      this.parseFunctionBodyAndFinish(node, isStatement ? \"FunctionDeclaration\" : \"FunctionExpression\");\n    });\n    this.prodParam.exit();\n    this.scope.exit();\n\n    if (isStatement && !isHangingStatement) {\n      this.registerFunctionStatementId(node);\n    }\n\n    this.state.maybeInArrowParameters = oldMaybeInArrowParameters;\n    return node;\n  }\n\n  parseFunctionId(requireId) {\n    return requireId || tokenIsIdentifier(this.state.type) ? this.parseIdentifier() : null;\n  }\n\n  parseFunctionParams(node, allowModifiers) {\n    this.expect(10);\n    this.expressionScope.enter(newParameterDeclarationScope());\n    node.params = this.parseBindingList(11, 41, false, allowModifiers);\n    this.expressionScope.exit();\n  }\n\n  registerFunctionStatementId(node) {\n    if (!node.id) return;\n    this.scope.declareName(node.id.name, this.state.strict || node.generator || node.async ? this.scope.treatFunctionsAsVar ? BIND_VAR : BIND_LEXICAL : BIND_FUNCTION, node.id.start);\n  }\n\n  parseClass(node, isStatement, optionalId) {\n    this.next();\n    this.takeDecorators(node);\n    const oldStrict = this.state.strict;\n    this.state.strict = true;\n    this.parseClassId(node, isStatement, optionalId);\n    this.parseClassSuper(node);\n    node.body = this.parseClassBody(!!node.superClass, oldStrict);\n    return this.finishNode(node, isStatement ? \"ClassDeclaration\" : \"ClassExpression\");\n  }\n\n  isClassProperty() {\n    return this.match(27) || this.match(13) || this.match(8);\n  }\n\n  isClassMethod() {\n    return this.match(10);\n  }\n\n  isNonstaticConstructor(method) {\n    return !method.computed && !method.static && (method.key.name === \"constructor\" || method.key.value === \"constructor\");\n  }\n\n  parseClassBody(hadSuperClass, oldStrict) {\n    this.classScope.enter();\n    const state = {\n      hadConstructor: false,\n      hadSuperClass\n    };\n    let decorators = [];\n    const classBody = this.startNode();\n    classBody.body = [];\n    this.expect(5);\n    this.withSmartMixTopicForbiddingContext(() => {\n      while (!this.match(8)) {\n        if (this.eat(13)) {\n          if (decorators.length > 0) {\n            throw this.raise(this.state.lastTokEnd, ErrorMessages.DecoratorSemicolon);\n          }\n\n          continue;\n        }\n\n        if (this.match(24)) {\n          decorators.push(this.parseDecorator());\n          continue;\n        }\n\n        const member = this.startNode();\n\n        if (decorators.length) {\n          member.decorators = decorators;\n          this.resetStartLocationFromNode(member, decorators[0]);\n          decorators = [];\n        }\n\n        this.parseClassMember(classBody, member, state);\n\n        if (member.kind === \"constructor\" && member.decorators && member.decorators.length > 0) {\n          this.raise(member.start, ErrorMessages.DecoratorConstructor);\n        }\n      }\n    });\n    this.state.strict = oldStrict;\n    this.next();\n\n    if (decorators.length) {\n      throw this.raise(this.state.start, ErrorMessages.TrailingDecorator);\n    }\n\n    this.classScope.exit();\n    return this.finishNode(classBody, \"ClassBody\");\n  }\n\n  parseClassMemberFromModifier(classBody, member) {\n    const key = this.parseIdentifier(true);\n\n    if (this.isClassMethod()) {\n      const method = member;\n      method.kind = \"method\";\n      method.computed = false;\n      method.key = key;\n      method.static = false;\n      this.pushClassMethod(classBody, method, false, false, false, false);\n      return true;\n    } else if (this.isClassProperty()) {\n      const prop = member;\n      prop.computed = false;\n      prop.key = key;\n      prop.static = false;\n      classBody.body.push(this.parseClassProperty(prop));\n      return true;\n    }\n\n    this.resetPreviousNodeTrailingComments(key);\n    return false;\n  }\n\n  parseClassMember(classBody, member, state) {\n    const isStatic = this.isContextual(98);\n\n    if (isStatic) {\n      if (this.parseClassMemberFromModifier(classBody, member)) {\n        return;\n      }\n\n      if (this.eat(5)) {\n        this.parseClassStaticBlock(classBody, member);\n        return;\n      }\n    }\n\n    this.parseClassMemberWithIsStatic(classBody, member, state, isStatic);\n  }\n\n  parseClassMemberWithIsStatic(classBody, member, state, isStatic) {\n    const publicMethod = member;\n    const privateMethod = member;\n    const publicProp = member;\n    const privateProp = member;\n    const method = publicMethod;\n    const publicMember = publicMethod;\n    member.static = isStatic;\n    this.parsePropertyNamePrefixOperator(member);\n\n    if (this.eat(49)) {\n      method.kind = \"method\";\n      const isPrivateName = this.match(128);\n      this.parseClassElementName(method);\n\n      if (isPrivateName) {\n        this.pushClassPrivateMethod(classBody, privateMethod, true, false);\n        return;\n      }\n\n      if (this.isNonstaticConstructor(publicMethod)) {\n        this.raise(publicMethod.key.start, ErrorMessages.ConstructorIsGenerator);\n      }\n\n      this.pushClassMethod(classBody, publicMethod, true, false, false, false);\n      return;\n    }\n\n    const isContextual = tokenIsIdentifier(this.state.type) && !this.state.containsEsc;\n    const isPrivate = this.match(128);\n    const key = this.parseClassElementName(member);\n    const maybeQuestionTokenStart = this.state.start;\n    this.parsePostMemberNameModifiers(publicMember);\n\n    if (this.isClassMethod()) {\n      method.kind = \"method\";\n\n      if (isPrivate) {\n        this.pushClassPrivateMethod(classBody, privateMethod, false, false);\n        return;\n      }\n\n      const isConstructor = this.isNonstaticConstructor(publicMethod);\n      let allowsDirectSuper = false;\n\n      if (isConstructor) {\n        publicMethod.kind = \"constructor\";\n\n        if (state.hadConstructor && !this.hasPlugin(\"typescript\")) {\n          this.raise(key.start, ErrorMessages.DuplicateConstructor);\n        }\n\n        if (isConstructor && this.hasPlugin(\"typescript\") && member.override) {\n          this.raise(key.start, ErrorMessages.OverrideOnConstructor);\n        }\n\n        state.hadConstructor = true;\n        allowsDirectSuper = state.hadSuperClass;\n      }\n\n      this.pushClassMethod(classBody, publicMethod, false, false, isConstructor, allowsDirectSuper);\n    } else if (this.isClassProperty()) {\n      if (isPrivate) {\n        this.pushClassPrivateProperty(classBody, privateProp);\n      } else {\n        this.pushClassProperty(classBody, publicProp);\n      }\n    } else if (isContextual && key.name === \"async\" && !this.isLineTerminator()) {\n      this.resetPreviousNodeTrailingComments(key);\n      const isGenerator = this.eat(49);\n\n      if (publicMember.optional) {\n        this.unexpected(maybeQuestionTokenStart);\n      }\n\n      method.kind = \"method\";\n      const isPrivate = this.match(128);\n      this.parseClassElementName(method);\n      this.parsePostMemberNameModifiers(publicMember);\n\n      if (isPrivate) {\n        this.pushClassPrivateMethod(classBody, privateMethod, isGenerator, true);\n      } else {\n        if (this.isNonstaticConstructor(publicMethod)) {\n          this.raise(publicMethod.key.start, ErrorMessages.ConstructorIsAsync);\n        }\n\n        this.pushClassMethod(classBody, publicMethod, isGenerator, true, false, false);\n      }\n    } else if (isContextual && (key.name === \"get\" || key.name === \"set\") && !(this.match(49) && this.isLineTerminator())) {\n      this.resetPreviousNodeTrailingComments(key);\n      method.kind = key.name;\n      const isPrivate = this.match(128);\n      this.parseClassElementName(publicMethod);\n\n      if (isPrivate) {\n        this.pushClassPrivateMethod(classBody, privateMethod, false, false);\n      } else {\n        if (this.isNonstaticConstructor(publicMethod)) {\n          this.raise(publicMethod.key.start, ErrorMessages.ConstructorIsAccessor);\n        }\n\n        this.pushClassMethod(classBody, publicMethod, false, false, false, false);\n      }\n\n      this.checkGetterSetterParams(publicMethod);\n    } else if (this.isLineTerminator()) {\n      if (isPrivate) {\n        this.pushClassPrivateProperty(classBody, privateProp);\n      } else {\n        this.pushClassProperty(classBody, publicProp);\n      }\n    } else {\n      this.unexpected();\n    }\n  }\n\n  parseClassElementName(member) {\n    const {\n      type,\n      value,\n      start\n    } = this.state;\n\n    if ((type === 122 || type === 123) && member.static && value === \"prototype\") {\n      this.raise(start, ErrorMessages.StaticPrototype);\n    }\n\n    if (type === 128) {\n      if (value === \"constructor\") {\n        this.raise(start, ErrorMessages.ConstructorClassPrivateField);\n      }\n\n      const key = this.parsePrivateName();\n      member.key = key;\n      return key;\n    }\n\n    return this.parsePropertyName(member);\n  }\n\n  parseClassStaticBlock(classBody, member) {\n    var _member$decorators;\n\n    this.scope.enter(SCOPE_CLASS | SCOPE_STATIC_BLOCK | SCOPE_SUPER);\n    const oldLabels = this.state.labels;\n    this.state.labels = [];\n    this.prodParam.enter(PARAM);\n    const body = member.body = [];\n    this.parseBlockOrModuleBlockBody(body, undefined, false, 8);\n    this.prodParam.exit();\n    this.scope.exit();\n    this.state.labels = oldLabels;\n    classBody.body.push(this.finishNode(member, \"StaticBlock\"));\n\n    if ((_member$decorators = member.decorators) != null && _member$decorators.length) {\n      this.raise(member.start, ErrorMessages.DecoratorStaticBlock);\n    }\n  }\n\n  pushClassProperty(classBody, prop) {\n    if (!prop.computed && (prop.key.name === \"constructor\" || prop.key.value === \"constructor\")) {\n      this.raise(prop.key.start, ErrorMessages.ConstructorClassField);\n    }\n\n    classBody.body.push(this.parseClassProperty(prop));\n  }\n\n  pushClassPrivateProperty(classBody, prop) {\n    const node = this.parseClassPrivateProperty(prop);\n    classBody.body.push(node);\n    this.classScope.declarePrivateName(this.getPrivateNameSV(node.key), CLASS_ELEMENT_OTHER, node.key.start);\n  }\n\n  pushClassMethod(classBody, method, isGenerator, isAsync, isConstructor, allowsDirectSuper) {\n    classBody.body.push(this.parseMethod(method, isGenerator, isAsync, isConstructor, allowsDirectSuper, \"ClassMethod\", true));\n  }\n\n  pushClassPrivateMethod(classBody, method, isGenerator, isAsync) {\n    const node = this.parseMethod(method, isGenerator, isAsync, false, false, \"ClassPrivateMethod\", true);\n    classBody.body.push(node);\n    const kind = node.kind === \"get\" ? node.static ? CLASS_ELEMENT_STATIC_GETTER : CLASS_ELEMENT_INSTANCE_GETTER : node.kind === \"set\" ? node.static ? CLASS_ELEMENT_STATIC_SETTER : CLASS_ELEMENT_INSTANCE_SETTER : CLASS_ELEMENT_OTHER;\n    this.declareClassPrivateMethodInScope(node, kind);\n  }\n\n  declareClassPrivateMethodInScope(node, kind) {\n    this.classScope.declarePrivateName(this.getPrivateNameSV(node.key), kind, node.key.start);\n  }\n\n  parsePostMemberNameModifiers(methodOrProp) {}\n\n  parseClassPrivateProperty(node) {\n    this.parseInitializer(node);\n    this.semicolon();\n    return this.finishNode(node, \"ClassPrivateProperty\");\n  }\n\n  parseClassProperty(node) {\n    this.parseInitializer(node);\n    this.semicolon();\n    return this.finishNode(node, \"ClassProperty\");\n  }\n\n  parseInitializer(node) {\n    this.scope.enter(SCOPE_CLASS | SCOPE_SUPER);\n    this.expressionScope.enter(newExpressionScope());\n    this.prodParam.enter(PARAM);\n    node.value = this.eat(27) ? this.parseMaybeAssignAllowIn() : null;\n    this.expressionScope.exit();\n    this.prodParam.exit();\n    this.scope.exit();\n  }\n\n  parseClassId(node, isStatement, optionalId, bindingType = BIND_CLASS) {\n    if (tokenIsIdentifier(this.state.type)) {\n      node.id = this.parseIdentifier();\n\n      if (isStatement) {\n        this.checkLVal(node.id, \"class name\", bindingType);\n      }\n    } else {\n      if (optionalId || !isStatement) {\n        node.id = null;\n      } else {\n        this.unexpected(null, ErrorMessages.MissingClassName);\n      }\n    }\n  }\n\n  parseClassSuper(node) {\n    node.superClass = this.eat(75) ? this.parseExprSubscripts() : null;\n  }\n\n  parseExport(node) {\n    const hasDefault = this.maybeParseExportDefaultSpecifier(node);\n    const parseAfterDefault = !hasDefault || this.eat(12);\n    const hasStar = parseAfterDefault && this.eatExportStar(node);\n    const hasNamespace = hasStar && this.maybeParseExportNamespaceSpecifier(node);\n    const parseAfterNamespace = parseAfterDefault && (!hasNamespace || this.eat(12));\n    const isFromRequired = hasDefault || hasStar;\n\n    if (hasStar && !hasNamespace) {\n      if (hasDefault) this.unexpected();\n      this.parseExportFrom(node, true);\n      return this.finishNode(node, \"ExportAllDeclaration\");\n    }\n\n    const hasSpecifiers = this.maybeParseExportNamedSpecifiers(node);\n\n    if (hasDefault && parseAfterDefault && !hasStar && !hasSpecifiers || hasNamespace && parseAfterNamespace && !hasSpecifiers) {\n      throw this.unexpected(null, 5);\n    }\n\n    let hasDeclaration;\n\n    if (isFromRequired || hasSpecifiers) {\n      hasDeclaration = false;\n      this.parseExportFrom(node, isFromRequired);\n    } else {\n      hasDeclaration = this.maybeParseExportDeclaration(node);\n    }\n\n    if (isFromRequired || hasSpecifiers || hasDeclaration) {\n      this.checkExport(node, true, false, !!node.source);\n      return this.finishNode(node, \"ExportNamedDeclaration\");\n    }\n\n    if (this.eat(59)) {\n      node.declaration = this.parseExportDefaultExpression();\n      this.checkExport(node, true, true);\n      return this.finishNode(node, \"ExportDefaultDeclaration\");\n    }\n\n    throw this.unexpected(null, 5);\n  }\n\n  eatExportStar(node) {\n    return this.eat(49);\n  }\n\n  maybeParseExportDefaultSpecifier(node) {\n    if (this.isExportDefaultSpecifier()) {\n      this.expectPlugin(\"exportDefaultFrom\");\n      const specifier = this.startNode();\n      specifier.exported = this.parseIdentifier(true);\n      node.specifiers = [this.finishNode(specifier, \"ExportDefaultSpecifier\")];\n      return true;\n    }\n\n    return false;\n  }\n\n  maybeParseExportNamespaceSpecifier(node) {\n    if (this.isContextual(87)) {\n      if (!node.specifiers) node.specifiers = [];\n      const specifier = this.startNodeAt(this.state.lastTokStart, this.state.lastTokStartLoc);\n      this.next();\n      specifier.exported = this.parseModuleExportName();\n      node.specifiers.push(this.finishNode(specifier, \"ExportNamespaceSpecifier\"));\n      return true;\n    }\n\n    return false;\n  }\n\n  maybeParseExportNamedSpecifiers(node) {\n    if (this.match(5)) {\n      if (!node.specifiers) node.specifiers = [];\n      const isTypeExport = node.exportKind === \"type\";\n      node.specifiers.push(...this.parseExportSpecifiers(isTypeExport));\n      node.source = null;\n      node.declaration = null;\n\n      if (this.hasPlugin(\"importAssertions\")) {\n        node.assertions = [];\n      }\n\n      return true;\n    }\n\n    return false;\n  }\n\n  maybeParseExportDeclaration(node) {\n    if (this.shouldParseExportDeclaration()) {\n      node.specifiers = [];\n      node.source = null;\n\n      if (this.hasPlugin(\"importAssertions\")) {\n        node.assertions = [];\n      }\n\n      node.declaration = this.parseExportDeclaration(node);\n      return true;\n    }\n\n    return false;\n  }\n\n  isAsyncFunction() {\n    if (!this.isContextual(89)) return false;\n    const next = this.nextTokenStart();\n    return !lineBreak.test(this.input.slice(this.state.pos, next)) && this.isUnparsedContextual(next, \"function\");\n  }\n\n  parseExportDefaultExpression() {\n    const expr = this.startNode();\n    const isAsync = this.isAsyncFunction();\n\n    if (this.match(62) || isAsync) {\n      this.next();\n\n      if (isAsync) {\n        this.next();\n      }\n\n      return this.parseFunction(expr, FUNC_STATEMENT | FUNC_NULLABLE_ID, isAsync);\n    } else if (this.match(74)) {\n      return this.parseClass(expr, true, true);\n    } else if (this.match(24)) {\n      if (this.hasPlugin(\"decorators\") && this.getPluginOption(\"decorators\", \"decoratorsBeforeExport\")) {\n        this.raise(this.state.start, ErrorMessages.DecoratorBeforeExport);\n      }\n\n      this.parseDecorators(false);\n      return this.parseClass(expr, true, true);\n    } else if (this.match(69) || this.match(68) || this.isLet()) {\n      throw this.raise(this.state.start, ErrorMessages.UnsupportedDefaultExport);\n    } else {\n      const res = this.parseMaybeAssignAllowIn();\n      this.semicolon();\n      return res;\n    }\n  }\n\n  parseExportDeclaration(node) {\n    return this.parseStatement(null);\n  }\n\n  isExportDefaultSpecifier() {\n    const {\n      type\n    } = this.state;\n\n    if (tokenIsIdentifier(type)) {\n      if (type === 89 && !this.state.containsEsc || type === 93) {\n        return false;\n      }\n\n      if ((type === 120 || type === 119) && !this.state.containsEsc) {\n        const {\n          type: nextType\n        } = this.lookahead();\n\n        if (tokenIsIdentifier(nextType) && nextType !== 91 || nextType === 5) {\n          this.expectOnePlugin([\"flow\", \"typescript\"]);\n          return false;\n        }\n      }\n    } else if (!this.match(59)) {\n      return false;\n    }\n\n    const next = this.nextTokenStart();\n    const hasFrom = this.isUnparsedContextual(next, \"from\");\n\n    if (this.input.charCodeAt(next) === 44 || tokenIsIdentifier(this.state.type) && hasFrom) {\n      return true;\n    }\n\n    if (this.match(59) && hasFrom) {\n      const nextAfterFrom = this.input.charCodeAt(this.nextTokenStartSince(next + 4));\n      return nextAfterFrom === 34 || nextAfterFrom === 39;\n    }\n\n    return false;\n  }\n\n  parseExportFrom(node, expect) {\n    if (this.eatContextual(91)) {\n      node.source = this.parseImportSource();\n      this.checkExport(node);\n      const assertions = this.maybeParseImportAssertions();\n\n      if (assertions) {\n        node.assertions = assertions;\n      }\n    } else if (expect) {\n      this.unexpected();\n    }\n\n    this.semicolon();\n  }\n\n  shouldParseExportDeclaration() {\n    const {\n      type\n    } = this.state;\n\n    if (type === 24) {\n      this.expectOnePlugin([\"decorators\", \"decorators-legacy\"]);\n\n      if (this.hasPlugin(\"decorators\")) {\n        if (this.getPluginOption(\"decorators\", \"decoratorsBeforeExport\")) {\n          this.unexpected(this.state.start, ErrorMessages.DecoratorBeforeExport);\n        } else {\n          return true;\n        }\n      }\n    }\n\n    return type === 68 || type === 69 || type === 62 || type === 74 || this.isLet() || this.isAsyncFunction();\n  }\n\n  checkExport(node, checkNames, isDefault, isFrom) {\n    if (checkNames) {\n      if (isDefault) {\n        this.checkDuplicateExports(node, \"default\");\n\n        if (this.hasPlugin(\"exportDefaultFrom\")) {\n          var _declaration$extra;\n\n          const declaration = node.declaration;\n\n          if (declaration.type === \"Identifier\" && declaration.name === \"from\" && declaration.end - declaration.start === 4 && !((_declaration$extra = declaration.extra) != null && _declaration$extra.parenthesized)) {\n            this.raise(declaration.start, ErrorMessages.ExportDefaultFromAsIdentifier);\n          }\n        }\n      } else if (node.specifiers && node.specifiers.length) {\n        for (const specifier of node.specifiers) {\n          const {\n            exported\n          } = specifier;\n          const exportedName = exported.type === \"Identifier\" ? exported.name : exported.value;\n          this.checkDuplicateExports(specifier, exportedName);\n\n          if (!isFrom && specifier.local) {\n            const {\n              local\n            } = specifier;\n\n            if (local.type !== \"Identifier\") {\n              this.raise(specifier.start, ErrorMessages.ExportBindingIsString, local.value, exportedName);\n            } else {\n              this.checkReservedWord(local.name, local.start, true, false);\n              this.scope.checkLocalExport(local);\n            }\n          }\n        }\n      } else if (node.declaration) {\n        if (node.declaration.type === \"FunctionDeclaration\" || node.declaration.type === \"ClassDeclaration\") {\n          const id = node.declaration.id;\n          if (!id) throw new Error(\"Assertion failure\");\n          this.checkDuplicateExports(node, id.name);\n        } else if (node.declaration.type === \"VariableDeclaration\") {\n          for (const declaration of node.declaration.declarations) {\n            this.checkDeclaration(declaration.id);\n          }\n        }\n      }\n    }\n\n    const currentContextDecorators = this.state.decoratorStack[this.state.decoratorStack.length - 1];\n\n    if (currentContextDecorators.length) {\n      throw this.raise(node.start, ErrorMessages.UnsupportedDecoratorExport);\n    }\n  }\n\n  checkDeclaration(node) {\n    if (node.type === \"Identifier\") {\n      this.checkDuplicateExports(node, node.name);\n    } else if (node.type === \"ObjectPattern\") {\n      for (const prop of node.properties) {\n        this.checkDeclaration(prop);\n      }\n    } else if (node.type === \"ArrayPattern\") {\n      for (const elem of node.elements) {\n        if (elem) {\n          this.checkDeclaration(elem);\n        }\n      }\n    } else if (node.type === \"ObjectProperty\") {\n      this.checkDeclaration(node.value);\n    } else if (node.type === \"RestElement\") {\n      this.checkDeclaration(node.argument);\n    } else if (node.type === \"AssignmentPattern\") {\n      this.checkDeclaration(node.left);\n    }\n  }\n\n  checkDuplicateExports(node, name) {\n    if (this.exportedIdentifiers.has(name)) {\n      this.raise(node.start, name === \"default\" ? ErrorMessages.DuplicateDefaultExport : ErrorMessages.DuplicateExport, name);\n    }\n\n    this.exportedIdentifiers.add(name);\n  }\n\n  parseExportSpecifiers(isInTypeExport) {\n    const nodes = [];\n    let first = true;\n    this.expect(5);\n\n    while (!this.eat(8)) {\n      if (first) {\n        first = false;\n      } else {\n        this.expect(12);\n        if (this.eat(8)) break;\n      }\n\n      const isMaybeTypeOnly = this.isContextual(120);\n      const isString = this.match(123);\n      const node = this.startNode();\n      node.local = this.parseModuleExportName();\n      nodes.push(this.parseExportSpecifier(node, isString, isInTypeExport, isMaybeTypeOnly));\n    }\n\n    return nodes;\n  }\n\n  parseExportSpecifier(node, isString, isInTypeExport, isMaybeTypeOnly) {\n    if (this.eatContextual(87)) {\n      node.exported = this.parseModuleExportName();\n    } else if (isString) {\n      node.exported = cloneStringLiteral(node.local);\n    } else if (!node.exported) {\n      node.exported = cloneIdentifier(node.local);\n    }\n\n    return this.finishNode(node, \"ExportSpecifier\");\n  }\n\n  parseModuleExportName() {\n    if (this.match(123)) {\n      const result = this.parseStringLiteral(this.state.value);\n      const surrogate = result.value.match(loneSurrogate);\n\n      if (surrogate) {\n        this.raise(result.start, ErrorMessages.ModuleExportNameHasLoneSurrogate, surrogate[0].charCodeAt(0).toString(16));\n      }\n\n      return result;\n    }\n\n    return this.parseIdentifier(true);\n  }\n\n  parseImport(node) {\n    node.specifiers = [];\n\n    if (!this.match(123)) {\n      const hasDefault = this.maybeParseDefaultImportSpecifier(node);\n      const parseNext = !hasDefault || this.eat(12);\n      const hasStar = parseNext && this.maybeParseStarImportSpecifier(node);\n      if (parseNext && !hasStar) this.parseNamedImportSpecifiers(node);\n      this.expectContextual(91);\n    }\n\n    node.source = this.parseImportSource();\n    const assertions = this.maybeParseImportAssertions();\n\n    if (assertions) {\n      node.assertions = assertions;\n    } else {\n      const attributes = this.maybeParseModuleAttributes();\n\n      if (attributes) {\n        node.attributes = attributes;\n      }\n    }\n\n    this.semicolon();\n    return this.finishNode(node, \"ImportDeclaration\");\n  }\n\n  parseImportSource() {\n    if (!this.match(123)) this.unexpected();\n    return this.parseExprAtom();\n  }\n\n  shouldParseDefaultImport(node) {\n    return tokenIsIdentifier(this.state.type);\n  }\n\n  parseImportSpecifierLocal(node, specifier, type, contextDescription) {\n    specifier.local = this.parseIdentifier();\n    this.checkLVal(specifier.local, contextDescription, BIND_LEXICAL);\n    node.specifiers.push(this.finishNode(specifier, type));\n  }\n\n  parseAssertEntries() {\n    const attrs = [];\n    const attrNames = new Set();\n\n    do {\n      if (this.match(8)) {\n        break;\n      }\n\n      const node = this.startNode();\n      const keyName = this.state.value;\n\n      if (attrNames.has(keyName)) {\n        this.raise(this.state.start, ErrorMessages.ModuleAttributesWithDuplicateKeys, keyName);\n      }\n\n      attrNames.add(keyName);\n\n      if (this.match(123)) {\n        node.key = this.parseStringLiteral(keyName);\n      } else {\n        node.key = this.parseIdentifier(true);\n      }\n\n      this.expect(14);\n\n      if (!this.match(123)) {\n        throw this.unexpected(this.state.start, ErrorMessages.ModuleAttributeInvalidValue);\n      }\n\n      node.value = this.parseStringLiteral(this.state.value);\n      this.finishNode(node, \"ImportAttribute\");\n      attrs.push(node);\n    } while (this.eat(12));\n\n    return attrs;\n  }\n\n  maybeParseModuleAttributes() {\n    if (this.match(70) && !this.hasPrecedingLineBreak()) {\n      this.expectPlugin(\"moduleAttributes\");\n      this.next();\n    } else {\n      if (this.hasPlugin(\"moduleAttributes\")) return [];\n      return null;\n    }\n\n    const attrs = [];\n    const attributes = new Set();\n\n    do {\n      const node = this.startNode();\n      node.key = this.parseIdentifier(true);\n\n      if (node.key.name !== \"type\") {\n        this.raise(node.key.start, ErrorMessages.ModuleAttributeDifferentFromType, node.key.name);\n      }\n\n      if (attributes.has(node.key.name)) {\n        this.raise(node.key.start, ErrorMessages.ModuleAttributesWithDuplicateKeys, node.key.name);\n      }\n\n      attributes.add(node.key.name);\n      this.expect(14);\n\n      if (!this.match(123)) {\n        throw this.unexpected(this.state.start, ErrorMessages.ModuleAttributeInvalidValue);\n      }\n\n      node.value = this.parseStringLiteral(this.state.value);\n      this.finishNode(node, \"ImportAttribute\");\n      attrs.push(node);\n    } while (this.eat(12));\n\n    return attrs;\n  }\n\n  maybeParseImportAssertions() {\n    if (this.isContextual(88) && !this.hasPrecedingLineBreak()) {\n      this.expectPlugin(\"importAssertions\");\n      this.next();\n    } else {\n      if (this.hasPlugin(\"importAssertions\")) return [];\n      return null;\n    }\n\n    this.eat(5);\n    const attrs = this.parseAssertEntries();\n    this.eat(8);\n    return attrs;\n  }\n\n  maybeParseDefaultImportSpecifier(node) {\n    if (this.shouldParseDefaultImport(node)) {\n      this.parseImportSpecifierLocal(node, this.startNode(), \"ImportDefaultSpecifier\", \"default import specifier\");\n      return true;\n    }\n\n    return false;\n  }\n\n  maybeParseStarImportSpecifier(node) {\n    if (this.match(49)) {\n      const specifier = this.startNode();\n      this.next();\n      this.expectContextual(87);\n      this.parseImportSpecifierLocal(node, specifier, \"ImportNamespaceSpecifier\", \"import namespace specifier\");\n      return true;\n    }\n\n    return false;\n  }\n\n  parseNamedImportSpecifiers(node) {\n    let first = true;\n    this.expect(5);\n\n    while (!this.eat(8)) {\n      if (first) {\n        first = false;\n      } else {\n        if (this.eat(14)) {\n          throw this.raise(this.state.start, ErrorMessages.DestructureNamedImport);\n        }\n\n        this.expect(12);\n        if (this.eat(8)) break;\n      }\n\n      const specifier = this.startNode();\n      const importedIsString = this.match(123);\n      const isMaybeTypeOnly = this.isContextual(120);\n      specifier.imported = this.parseModuleExportName();\n      const importSpecifier = this.parseImportSpecifier(specifier, importedIsString, node.importKind === \"type\" || node.importKind === \"typeof\", isMaybeTypeOnly);\n      node.specifiers.push(importSpecifier);\n    }\n  }\n\n  parseImportSpecifier(specifier, importedIsString, isInTypeOnlyImport, isMaybeTypeOnly) {\n    if (this.eatContextual(87)) {\n      specifier.local = this.parseIdentifier();\n    } else {\n      const {\n        imported\n      } = specifier;\n\n      if (importedIsString) {\n        throw this.raise(specifier.start, ErrorMessages.ImportBindingIsString, imported.value);\n      }\n\n      this.checkReservedWord(imported.name, specifier.start, true, true);\n\n      if (!specifier.local) {\n        specifier.local = cloneIdentifier(imported);\n      }\n    }\n\n    this.checkLVal(specifier.local, \"import specifier\", BIND_LEXICAL);\n    return this.finishNode(specifier, \"ImportSpecifier\");\n  }\n\n  isThisParam(param) {\n    return param.type === \"Identifier\" && param.name === \"this\";\n  }\n\n}\n\nlet Parser$2 = class Parser extends StatementParser {\n  constructor(options, input) {\n    options = getOptions(options);\n    super(options, input);\n    this.options = options;\n    this.initializeScopes();\n    this.plugins = pluginsMap(this.options.plugins);\n    this.filename = options.sourceFilename;\n  }\n\n  getScopeHandler() {\n    return ScopeHandler;\n  }\n\n  parse() {\n    this.enterInitialScopes();\n    const file = this.startNode();\n    const program = this.startNode();\n    this.nextToken();\n    file.errors = null;\n    this.parseTopLevel(file, program);\n    file.errors = this.state.errors;\n    return file;\n  }\n\n};\n\nfunction pluginsMap(plugins) {\n  const pluginMap = new Map();\n\n  for (const plugin of plugins) {\n    const [name, options] = Array.isArray(plugin) ? plugin : [plugin, {}];\n    if (!pluginMap.has(name)) pluginMap.set(name, options || {});\n  }\n\n  return pluginMap;\n}\n\nfunction parse$9(input, options) {\n  var _options;\n\n  if (((_options = options) == null ? void 0 : _options.sourceType) === \"unambiguous\") {\n    options = Object.assign({}, options);\n\n    try {\n      options.sourceType = \"module\";\n      const parser = getParser(options, input);\n      const ast = parser.parse();\n\n      if (parser.sawUnambiguousESM) {\n        return ast;\n      }\n\n      if (parser.ambiguousScriptDifferentAst) {\n        try {\n          options.sourceType = \"script\";\n          return getParser(options, input).parse();\n        } catch (_unused) {}\n      } else {\n        ast.program.sourceType = \"script\";\n      }\n\n      return ast;\n    } catch (moduleError) {\n      try {\n        options.sourceType = \"script\";\n        return getParser(options, input).parse();\n      } catch (_unused2) {}\n\n      throw moduleError;\n    }\n  } else {\n    return getParser(options, input).parse();\n  }\n}\nfunction parseExpression(input, options) {\n  const parser = getParser(options, input);\n\n  if (parser.options.strictMode) {\n    parser.state.strict = true;\n  }\n\n  return parser.getExpression();\n}\n\nfunction generateExportedTokenTypes(internalTokenTypes) {\n  const tokenTypes = {};\n\n  for (const typeName of Object.keys(internalTokenTypes)) {\n    tokenTypes[typeName] = getExportedToken(internalTokenTypes[typeName]);\n  }\n\n  return tokenTypes;\n}\n\nconst tokTypes = generateExportedTokenTypes(tt);\n\nfunction getParser(options, input) {\n  let cls = Parser$2;\n\n  if (options != null && options.plugins) {\n    validatePlugins(options.plugins);\n    cls = getParserClass(options.plugins);\n  }\n\n  return new cls(options, input);\n}\n\nconst parserClassCache = {};\n\nfunction getParserClass(pluginsFromOptions) {\n  const pluginList = mixinPluginNames.filter(name => hasPlugin(pluginsFromOptions, name));\n  const key = pluginList.join(\"/\");\n  let cls = parserClassCache[key];\n\n  if (!cls) {\n    cls = Parser$2;\n\n    for (const plugin of pluginList) {\n      cls = mixinPlugins[plugin](cls);\n    }\n\n    parserClassCache[key] = cls;\n  }\n\n  return cls;\n}\n\nvar parse_1$1 = lib.parse = parse$9;\nvar parseExpression_1 = lib.parseExpression = parseExpression;\nlib.tokTypes = tokTypes;\n\nconst isStaticExp = (p) => p.type === 4 /* NodeTypes.SIMPLE_EXPRESSION */ && p.isStatic;\nconst isBuiltInType = (tag, expected) => tag === expected || tag === hyphenate(expected);\nfunction isCoreComponent(tag) {\n    if (isBuiltInType(tag, 'Teleport')) {\n        return TELEPORT;\n    }\n    else if (isBuiltInType(tag, 'Suspense')) {\n        return SUSPENSE;\n    }\n    else if (isBuiltInType(tag, 'KeepAlive')) {\n        return KEEP_ALIVE;\n    }\n    else if (isBuiltInType(tag, 'BaseTransition')) {\n        return BASE_TRANSITION;\n    }\n}\nconst nonIdentifierRE = /^\\d|[^\\$\\w]/;\nconst isSimpleIdentifier = (name) => !nonIdentifierRE.test(name);\nconst validFirstIdentCharRE = /[A-Za-z_$\\xA0-\\uFFFF]/;\nconst validIdentCharRE = /[\\.\\?\\w$\\xA0-\\uFFFF]/;\nconst whitespaceRE = /\\s+[.[]\\s*|\\s*[.[]\\s+/g;\n/**\n * Simple lexer to check if an expression is a member expression. This is\n * lax and only checks validity at the root level (i.e. does not validate exps\n * inside square brackets), but it's ok since these are only used on template\n * expressions and false positives are invalid expressions in the first place.\n */\nconst isMemberExpressionBrowser = (path) => {\n    // remove whitespaces around . or [ first\n    path = path.trim().replace(whitespaceRE, s => s.trim());\n    let state = 0 /* MemberExpLexState.inMemberExp */;\n    let stateStack = [];\n    let currentOpenBracketCount = 0;\n    let currentOpenParensCount = 0;\n    let currentStringType = null;\n    for (let i = 0; i < path.length; i++) {\n        const char = path.charAt(i);\n        switch (state) {\n            case 0 /* MemberExpLexState.inMemberExp */:\n                if (char === '[') {\n                    stateStack.push(state);\n                    state = 1 /* MemberExpLexState.inBrackets */;\n                    currentOpenBracketCount++;\n                }\n                else if (char === '(') {\n                    stateStack.push(state);\n                    state = 2 /* MemberExpLexState.inParens */;\n                    currentOpenParensCount++;\n                }\n                else if (!(i === 0 ? validFirstIdentCharRE : validIdentCharRE).test(char)) {\n                    return false;\n                }\n                break;\n            case 1 /* MemberExpLexState.inBrackets */:\n                if (char === `'` || char === `\"` || char === '`') {\n                    stateStack.push(state);\n                    state = 3 /* MemberExpLexState.inString */;\n                    currentStringType = char;\n                }\n                else if (char === `[`) {\n                    currentOpenBracketCount++;\n                }\n                else if (char === `]`) {\n                    if (!--currentOpenBracketCount) {\n                        state = stateStack.pop();\n                    }\n                }\n                break;\n            case 2 /* MemberExpLexState.inParens */:\n                if (char === `'` || char === `\"` || char === '`') {\n                    stateStack.push(state);\n                    state = 3 /* MemberExpLexState.inString */;\n                    currentStringType = char;\n                }\n                else if (char === `(`) {\n                    currentOpenParensCount++;\n                }\n                else if (char === `)`) {\n                    // if the exp ends as a call then it should not be considered valid\n                    if (i === path.length - 1) {\n                        return false;\n                    }\n                    if (!--currentOpenParensCount) {\n                        state = stateStack.pop();\n                    }\n                }\n                break;\n            case 3 /* MemberExpLexState.inString */:\n                if (char === currentStringType) {\n                    state = stateStack.pop();\n                    currentStringType = null;\n                }\n                break;\n        }\n    }\n    return !currentOpenBracketCount && !currentOpenParensCount;\n};\nconst isMemberExpressionNode = (path, context) => {\n        try {\n            let ret = parseExpression_1(path, {\n                plugins: context.expressionPlugins\n            });\n            if (ret.type === 'TSAsExpression' || ret.type === 'TSTypeAssertion') {\n                ret = ret.expression;\n            }\n            return (ret.type === 'MemberExpression' ||\n                ret.type === 'OptionalMemberExpression' ||\n                ret.type === 'Identifier');\n        }\n        catch (e) {\n            return false;\n        }\n    };\nconst isMemberExpression = isMemberExpressionNode;\nfunction getInnerRange(loc, offset, length) {\n    const source = loc.source.slice(offset, offset + length);\n    const newLoc = {\n        source,\n        start: advancePositionWithClone(loc.start, loc.source, offset),\n        end: loc.end\n    };\n    if (length != null) {\n        newLoc.end = advancePositionWithClone(loc.start, loc.source, offset + length);\n    }\n    return newLoc;\n}\nfunction advancePositionWithClone(pos, source, numberOfCharacters = source.length) {\n    return advancePositionWithMutation(extend({}, pos), source, numberOfCharacters);\n}\n// advance by mutation without cloning (for performance reasons), since this\n// gets called a lot in the parser\nfunction advancePositionWithMutation(pos, source, numberOfCharacters = source.length) {\n    let linesCount = 0;\n    let lastNewLinePos = -1;\n    for (let i = 0; i < numberOfCharacters; i++) {\n        if (source.charCodeAt(i) === 10 /* newline char code */) {\n            linesCount++;\n            lastNewLinePos = i;\n        }\n    }\n    pos.offset += numberOfCharacters;\n    pos.line += linesCount;\n    pos.column =\n        lastNewLinePos === -1\n            ? pos.column + numberOfCharacters\n            : numberOfCharacters - lastNewLinePos;\n    return pos;\n}\nfunction assert(condition, msg) {\n    /* istanbul ignore if */\n    if (!condition) {\n        throw new Error(msg || `unexpected compiler condition`);\n    }\n}\nfunction findDir(node, name, allowEmpty = false) {\n    for (let i = 0; i < node.props.length; i++) {\n        const p = node.props[i];\n        if (p.type === 7 /* NodeTypes.DIRECTIVE */ &&\n            (allowEmpty || p.exp) &&\n            (isString$2(name) ? p.name === name : name.test(p.name))) {\n            return p;\n        }\n    }\n}\nfunction findProp(node, name, dynamicOnly = false, allowEmpty = false) {\n    for (let i = 0; i < node.props.length; i++) {\n        const p = node.props[i];\n        if (p.type === 6 /* NodeTypes.ATTRIBUTE */) {\n            if (dynamicOnly)\n                continue;\n            if (p.name === name && (p.value || allowEmpty)) {\n                return p;\n            }\n        }\n        else if (p.name === 'bind' &&\n            (p.exp || allowEmpty) &&\n            isStaticArgOf(p.arg, name)) {\n            return p;\n        }\n    }\n}\nfunction isStaticArgOf(arg, name) {\n    return !!(arg && isStaticExp(arg) && arg.content === name);\n}\nfunction hasDynamicKeyVBind(node) {\n    return node.props.some(p => p.type === 7 /* NodeTypes.DIRECTIVE */ &&\n        p.name === 'bind' &&\n        (!p.arg || // v-bind=\"obj\"\n            p.arg.type !== 4 /* NodeTypes.SIMPLE_EXPRESSION */ || // v-bind:[_ctx.foo]\n            !p.arg.isStatic) // v-bind:[foo]\n    );\n}\nfunction isText$1(node) {\n    return node.type === 5 /* NodeTypes.INTERPOLATION */ || node.type === 2 /* NodeTypes.TEXT */;\n}\nfunction isVSlot(p) {\n    return p.type === 7 /* NodeTypes.DIRECTIVE */ && p.name === 'slot';\n}\nfunction isTemplateNode(node) {\n    return (node.type === 1 /* NodeTypes.ELEMENT */ && node.tagType === 3 /* ElementTypes.TEMPLATE */);\n}\nfunction isSlotOutlet(node) {\n    return node.type === 1 /* NodeTypes.ELEMENT */ && node.tagType === 2 /* ElementTypes.SLOT */;\n}\nfunction getVNodeHelper(ssr, isComponent) {\n    return ssr || isComponent ? CREATE_VNODE : CREATE_ELEMENT_VNODE;\n}\nfunction getVNodeBlockHelper(ssr, isComponent) {\n    return ssr || isComponent ? CREATE_BLOCK : CREATE_ELEMENT_BLOCK;\n}\nconst propsHelperSet = new Set([NORMALIZE_PROPS, GUARD_REACTIVE_PROPS]);\nfunction getUnnormalizedProps(props, callPath = []) {\n    if (props &&\n        !isString$2(props) &&\n        props.type === 14 /* NodeTypes.JS_CALL_EXPRESSION */) {\n        const callee = props.callee;\n        if (!isString$2(callee) && propsHelperSet.has(callee)) {\n            return getUnnormalizedProps(props.arguments[0], callPath.concat(props));\n        }\n    }\n    return [props, callPath];\n}\nfunction injectProp(node, prop, context) {\n    let propsWithInjection;\n    /**\n     * 1. mergeProps(...)\n     * 2. toHandlers(...)\n     * 3. normalizeProps(...)\n     * 4. normalizeProps(guardReactiveProps(...))\n     *\n     * we need to get the real props before normalization\n     */\n    let props = node.type === 13 /* NodeTypes.VNODE_CALL */ ? node.props : node.arguments[2];\n    let callPath = [];\n    let parentCall;\n    if (props &&\n        !isString$2(props) &&\n        props.type === 14 /* NodeTypes.JS_CALL_EXPRESSION */) {\n        const ret = getUnnormalizedProps(props);\n        props = ret[0];\n        callPath = ret[1];\n        parentCall = callPath[callPath.length - 1];\n    }\n    if (props == null || isString$2(props)) {\n        propsWithInjection = createObjectExpression([prop]);\n    }\n    else if (props.type === 14 /* NodeTypes.JS_CALL_EXPRESSION */) {\n        // merged props... add ours\n        // only inject key to object literal if it's the first argument so that\n        // if doesn't override user provided keys\n        const first = props.arguments[0];\n        if (!isString$2(first) && first.type === 15 /* NodeTypes.JS_OBJECT_EXPRESSION */) {\n            // #6631\n            if (!hasProp(prop, first)) {\n                first.properties.unshift(prop);\n            }\n        }\n        else {\n            if (props.callee === TO_HANDLERS) {\n                // #2366\n                propsWithInjection = createCallExpression(context.helper(MERGE_PROPS), [\n                    createObjectExpression([prop]),\n                    props\n                ]);\n            }\n            else {\n                props.arguments.unshift(createObjectExpression([prop]));\n            }\n        }\n        !propsWithInjection && (propsWithInjection = props);\n    }\n    else if (props.type === 15 /* NodeTypes.JS_OBJECT_EXPRESSION */) {\n        if (!hasProp(prop, props)) {\n            props.properties.unshift(prop);\n        }\n        propsWithInjection = props;\n    }\n    else {\n        // single v-bind with expression, return a merged replacement\n        propsWithInjection = createCallExpression(context.helper(MERGE_PROPS), [\n            createObjectExpression([prop]),\n            props\n        ]);\n        // in the case of nested helper call, e.g. `normalizeProps(guardReactiveProps(props))`,\n        // it will be rewritten as `normalizeProps(mergeProps({ key: 0 }, props))`,\n        // the `guardReactiveProps` will no longer be needed\n        if (parentCall && parentCall.callee === GUARD_REACTIVE_PROPS) {\n            parentCall = callPath[callPath.length - 2];\n        }\n    }\n    if (node.type === 13 /* NodeTypes.VNODE_CALL */) {\n        if (parentCall) {\n            parentCall.arguments[0] = propsWithInjection;\n        }\n        else {\n            node.props = propsWithInjection;\n        }\n    }\n    else {\n        if (parentCall) {\n            parentCall.arguments[0] = propsWithInjection;\n        }\n        else {\n            node.arguments[2] = propsWithInjection;\n        }\n    }\n}\n// check existing key to avoid overriding user provided keys\nfunction hasProp(prop, props) {\n    let result = false;\n    if (prop.key.type === 4 /* NodeTypes.SIMPLE_EXPRESSION */) {\n        const propKeyName = prop.key.content;\n        result = props.properties.some(p => p.key.type === 4 /* NodeTypes.SIMPLE_EXPRESSION */ &&\n            p.key.content === propKeyName);\n    }\n    return result;\n}\nfunction toValidAssetId(name, type) {\n    // see issue#4422, we need adding identifier on validAssetId if variable `name` has specific character\n    return `_${type}_${name.replace(/[^\\w]/g, (searchValue, replaceValue) => {\n        return searchValue === '-' ? '_' : name.charCodeAt(replaceValue).toString();\n    })}`;\n}\n// Check if a node contains expressions that reference current context scope ids\nfunction hasScopeRef(node, ids) {\n    if (!node || Object.keys(ids).length === 0) {\n        return false;\n    }\n    switch (node.type) {\n        case 1 /* NodeTypes.ELEMENT */:\n            for (let i = 0; i < node.props.length; i++) {\n                const p = node.props[i];\n                if (p.type === 7 /* NodeTypes.DIRECTIVE */ &&\n                    (hasScopeRef(p.arg, ids) || hasScopeRef(p.exp, ids))) {\n                    return true;\n                }\n            }\n            return node.children.some(c => hasScopeRef(c, ids));\n        case 11 /* NodeTypes.FOR */:\n            if (hasScopeRef(node.source, ids)) {\n                return true;\n            }\n            return node.children.some(c => hasScopeRef(c, ids));\n        case 9 /* NodeTypes.IF */:\n            return node.branches.some(b => hasScopeRef(b, ids));\n        case 10 /* NodeTypes.IF_BRANCH */:\n            if (hasScopeRef(node.condition, ids)) {\n                return true;\n            }\n            return node.children.some(c => hasScopeRef(c, ids));\n        case 4 /* NodeTypes.SIMPLE_EXPRESSION */:\n            return (!node.isStatic &&\n                isSimpleIdentifier(node.content) &&\n                !!ids[node.content]);\n        case 8 /* NodeTypes.COMPOUND_EXPRESSION */:\n            return node.children.some(c => isObject$2(c) && hasScopeRef(c, ids));\n        case 5 /* NodeTypes.INTERPOLATION */:\n        case 12 /* NodeTypes.TEXT_CALL */:\n            return hasScopeRef(node.content, ids);\n        case 2 /* NodeTypes.TEXT */:\n        case 3 /* NodeTypes.COMMENT */:\n            return false;\n        default:\n            return false;\n    }\n}\nfunction getMemoedVNodeCall(node) {\n    if (node.type === 14 /* NodeTypes.JS_CALL_EXPRESSION */ && node.callee === WITH_MEMO) {\n        return node.arguments[1].returns;\n    }\n    else {\n        return node;\n    }\n}\nfunction makeBlock(node, { helper, removeHelper, inSSR }) {\n    if (!node.isBlock) {\n        node.isBlock = true;\n        removeHelper(getVNodeHelper(inSSR, node.isComponent));\n        helper(OPEN_BLOCK);\n        helper(getVNodeBlockHelper(inSSR, node.isComponent));\n    }\n}\n\nconst deprecationData = {\n    [\"COMPILER_IS_ON_ELEMENT\" /* CompilerDeprecationTypes.COMPILER_IS_ON_ELEMENT */]: {\n        message: `Platform-native elements with \"is\" prop will no longer be ` +\n            `treated as components in Vue 3 unless the \"is\" value is explicitly ` +\n            `prefixed with \"vue:\".`,\n        link: `https://v3-migration.vuejs.org/breaking-changes/custom-elements-interop.html`\n    },\n    [\"COMPILER_V_BIND_SYNC\" /* CompilerDeprecationTypes.COMPILER_V_BIND_SYNC */]: {\n        message: key => `.sync modifier for v-bind has been removed. Use v-model with ` +\n            `argument instead. \\`v-bind:${key}.sync\\` should be changed to ` +\n            `\\`v-model:${key}\\`.`,\n        link: `https://v3-migration.vuejs.org/breaking-changes/v-model.html`\n    },\n    [\"COMPILER_V_BIND_PROP\" /* CompilerDeprecationTypes.COMPILER_V_BIND_PROP */]: {\n        message: `.prop modifier for v-bind has been removed and no longer necessary. ` +\n            `Vue 3 will automatically set a binding as DOM property when appropriate.`\n    },\n    [\"COMPILER_V_BIND_OBJECT_ORDER\" /* CompilerDeprecationTypes.COMPILER_V_BIND_OBJECT_ORDER */]: {\n        message: `v-bind=\"obj\" usage is now order sensitive and behaves like JavaScript ` +\n            `object spread: it will now overwrite an existing non-mergeable attribute ` +\n            `that appears before v-bind in the case of conflict. ` +\n            `To retain 2.x behavior, move v-bind to make it the first attribute. ` +\n            `You can also suppress this warning if the usage is intended.`,\n        link: `https://v3-migration.vuejs.org/breaking-changes/v-bind.html`\n    },\n    [\"COMPILER_V_ON_NATIVE\" /* CompilerDeprecationTypes.COMPILER_V_ON_NATIVE */]: {\n        message: `.native modifier for v-on has been removed as is no longer necessary.`,\n        link: `https://v3-migration.vuejs.org/breaking-changes/v-on-native-modifier-removed.html`\n    },\n    [\"COMPILER_V_IF_V_FOR_PRECEDENCE\" /* CompilerDeprecationTypes.COMPILER_V_IF_V_FOR_PRECEDENCE */]: {\n        message: `v-if / v-for precedence when used on the same element has changed ` +\n            `in Vue 3: v-if now takes higher precedence and will no longer have ` +\n            `access to v-for scope variables. It is best to avoid the ambiguity ` +\n            `with <template> tags or use a computed property that filters v-for ` +\n            `data source.`,\n        link: `https://v3-migration.vuejs.org/breaking-changes/v-if-v-for.html`\n    },\n    [\"COMPILER_NATIVE_TEMPLATE\" /* CompilerDeprecationTypes.COMPILER_NATIVE_TEMPLATE */]: {\n        message: `<template> with no special directives will render as a native template ` +\n            `element instead of its inner content in Vue 3.`\n    },\n    [\"COMPILER_INLINE_TEMPLATE\" /* CompilerDeprecationTypes.COMPILER_INLINE_TEMPLATE */]: {\n        message: `\"inline-template\" has been removed in Vue 3.`,\n        link: `https://v3-migration.vuejs.org/breaking-changes/inline-template-attribute.html`\n    },\n    [\"COMPILER_FILTER\" /* CompilerDeprecationTypes.COMPILER_FILTERS */]: {\n        message: `filters have been removed in Vue 3. ` +\n            `The \"|\" symbol will be treated as native JavaScript bitwise OR operator. ` +\n            `Use method calls or computed properties instead.`,\n        link: `https://v3-migration.vuejs.org/breaking-changes/filters.html`\n    }\n};\nfunction getCompatValue(key, context) {\n    const config = context.options\n        ? context.options.compatConfig\n        : context.compatConfig;\n    const value = config && config[key];\n    if (key === 'MODE') {\n        return value || 3; // compiler defaults to v3 behavior\n    }\n    else {\n        return value;\n    }\n}\nfunction isCompatEnabled(key, context) {\n    const mode = getCompatValue('MODE', context);\n    const value = getCompatValue(key, context);\n    // in v3 mode, only enable if explicitly set to true\n    // otherwise enable for any non-false value\n    return mode === 3 ? value === true : value !== false;\n}\nfunction checkCompatEnabled(key, context, loc, ...args) {\n    const enabled = isCompatEnabled(key, context);\n    if (enabled) {\n        warnDeprecation(key, context, loc, ...args);\n    }\n    return enabled;\n}\nfunction warnDeprecation(key, context, loc, ...args) {\n    const val = getCompatValue(key, context);\n    if (val === 'suppress-warning') {\n        return;\n    }\n    const { message, link } = deprecationData[key];\n    const msg = `(deprecation ${key}) ${typeof message === 'function' ? message(...args) : message}${link ? `\\n  Details: ${link}` : ``}`;\n    const err = new SyntaxError(msg);\n    err.code = key;\n    if (loc)\n        err.loc = loc;\n    context.onWarn(err);\n}\n\n// The default decoder only provides escapes for characters reserved as part of\n// the template syntax, and is only used if the custom renderer did not provide\n// a platform-specific decoder.\nconst decodeRE = /&(gt|lt|amp|apos|quot);/g;\nconst decodeMap = {\n    gt: '>',\n    lt: '<',\n    amp: '&',\n    apos: \"'\",\n    quot: '\"'\n};\nconst defaultParserOptions = {\n    delimiters: [`{{`, `}}`],\n    getNamespace: () => 0 /* Namespaces.HTML */,\n    getTextMode: () => 0 /* TextModes.DATA */,\n    isVoidTag: NO,\n    isPreTag: NO,\n    isCustomElement: NO,\n    decodeEntities: (rawText) => rawText.replace(decodeRE, (_, p1) => decodeMap[p1]),\n    onError: defaultOnError,\n    onWarn: defaultOnWarn,\n    comments: true\n};\nfunction baseParse(content, options = {}) {\n    const context = createParserContext(content, options);\n    const start = getCursor(context);\n    return createRoot(parseChildren(context, 0 /* TextModes.DATA */, []), getSelection(context, start));\n}\nfunction createParserContext(content, rawOptions) {\n    const options = extend({}, defaultParserOptions);\n    let key;\n    for (key in rawOptions) {\n        // @ts-ignore\n        options[key] =\n            rawOptions[key] === undefined\n                ? defaultParserOptions[key]\n                : rawOptions[key];\n    }\n    return {\n        options,\n        column: 1,\n        line: 1,\n        offset: 0,\n        originalSource: content,\n        source: content,\n        inPre: false,\n        inVPre: false,\n        onWarn: options.onWarn\n    };\n}\nfunction parseChildren(context, mode, ancestors) {\n    const parent = last(ancestors);\n    const ns = parent ? parent.ns : 0 /* Namespaces.HTML */;\n    const nodes = [];\n    while (!isEnd(context, mode, ancestors)) {\n        const s = context.source;\n        let node = undefined;\n        if (mode === 0 /* TextModes.DATA */ || mode === 1 /* TextModes.RCDATA */) {\n            if (!context.inVPre && startsWith(s, context.options.delimiters[0])) {\n                // '{{'\n                node = parseInterpolation(context, mode);\n            }\n            else if (mode === 0 /* TextModes.DATA */ && s[0] === '<') {\n                // https://html.spec.whatwg.org/multipage/parsing.html#tag-open-state\n                if (s.length === 1) {\n                    emitError(context, 5 /* ErrorCodes.EOF_BEFORE_TAG_NAME */, 1);\n                }\n                else if (s[1] === '!') {\n                    // https://html.spec.whatwg.org/multipage/parsing.html#markup-declaration-open-state\n                    if (startsWith(s, '<!--')) {\n                        node = parseComment(context);\n                    }\n                    else if (startsWith(s, '<!DOCTYPE')) {\n                        // Ignore DOCTYPE by a limitation.\n                        node = parseBogusComment(context);\n                    }\n                    else if (startsWith(s, '<![CDATA[')) {\n                        if (ns !== 0 /* Namespaces.HTML */) {\n                            node = parseCDATA(context, ancestors);\n                        }\n                        else {\n                            emitError(context, 1 /* ErrorCodes.CDATA_IN_HTML_CONTENT */);\n                            node = parseBogusComment(context);\n                        }\n                    }\n                    else {\n                        emitError(context, 11 /* ErrorCodes.INCORRECTLY_OPENED_COMMENT */);\n                        node = parseBogusComment(context);\n                    }\n                }\n                else if (s[1] === '/') {\n                    // https://html.spec.whatwg.org/multipage/parsing.html#end-tag-open-state\n                    if (s.length === 2) {\n                        emitError(context, 5 /* ErrorCodes.EOF_BEFORE_TAG_NAME */, 2);\n                    }\n                    else if (s[2] === '>') {\n                        emitError(context, 14 /* ErrorCodes.MISSING_END_TAG_NAME */, 2);\n                        advanceBy(context, 3);\n                        continue;\n                    }\n                    else if (/[a-z]/i.test(s[2])) {\n                        emitError(context, 23 /* ErrorCodes.X_INVALID_END_TAG */);\n                        parseTag(context, 1 /* TagType.End */, parent);\n                        continue;\n                    }\n                    else {\n                        emitError(context, 12 /* ErrorCodes.INVALID_FIRST_CHARACTER_OF_TAG_NAME */, 2);\n                        node = parseBogusComment(context);\n                    }\n                }\n                else if (/[a-z]/i.test(s[1])) {\n                    node = parseElement(context, ancestors);\n                }\n                else if (s[1] === '?') {\n                    emitError(context, 21 /* ErrorCodes.UNEXPECTED_QUESTION_MARK_INSTEAD_OF_TAG_NAME */, 1);\n                    node = parseBogusComment(context);\n                }\n                else {\n                    emitError(context, 12 /* ErrorCodes.INVALID_FIRST_CHARACTER_OF_TAG_NAME */, 1);\n                }\n            }\n        }\n        if (!node) {\n            node = parseText(context, mode);\n        }\n        if (isArray$3(node)) {\n            for (let i = 0; i < node.length; i++) {\n                pushNode(nodes, node[i]);\n            }\n        }\n        else {\n            pushNode(nodes, node);\n        }\n    }\n    // Whitespace handling strategy like v2\n    let removedWhitespace = false;\n    if (mode !== 2 /* TextModes.RAWTEXT */ && mode !== 1 /* TextModes.RCDATA */) {\n        const shouldCondense = context.options.whitespace !== 'preserve';\n        for (let i = 0; i < nodes.length; i++) {\n            const node = nodes[i];\n            if (node.type === 2 /* NodeTypes.TEXT */) {\n                if (!context.inPre) {\n                    if (!/[^\\t\\r\\n\\f ]/.test(node.content)) {\n                        const prev = nodes[i - 1];\n                        const next = nodes[i + 1];\n                        // Remove if:\n                        // - the whitespace is the first or last node, or:\n                        // - (condense mode) the whitespace is between twos comments, or:\n                        // - (condense mode) the whitespace is between comment and element, or:\n                        // - (condense mode) the whitespace is between two elements AND contains newline\n                        if (!prev ||\n                            !next ||\n                            (shouldCondense &&\n                                ((prev.type === 3 /* NodeTypes.COMMENT */ &&\n                                    next.type === 3 /* NodeTypes.COMMENT */) ||\n                                    (prev.type === 3 /* NodeTypes.COMMENT */ &&\n                                        next.type === 1 /* NodeTypes.ELEMENT */) ||\n                                    (prev.type === 1 /* NodeTypes.ELEMENT */ &&\n                                        next.type === 3 /* NodeTypes.COMMENT */) ||\n                                    (prev.type === 1 /* NodeTypes.ELEMENT */ &&\n                                        next.type === 1 /* NodeTypes.ELEMENT */ &&\n                                        /[\\r\\n]/.test(node.content))))) {\n                            removedWhitespace = true;\n                            nodes[i] = null;\n                        }\n                        else {\n                            // Otherwise, the whitespace is condensed into a single space\n                            node.content = ' ';\n                        }\n                    }\n                    else if (shouldCondense) {\n                        // in condense mode, consecutive whitespaces in text are condensed\n                        // down to a single space.\n                        node.content = node.content.replace(/[\\t\\r\\n\\f ]+/g, ' ');\n                    }\n                }\n                else {\n                    // #6410 normalize windows newlines in <pre>:\n                    // in SSR, browsers normalize server-rendered \\r\\n into a single \\n\n                    // in the DOM\n                    node.content = node.content.replace(/\\r\\n/g, '\\n');\n                }\n            }\n            // Remove comment nodes if desired by configuration.\n            else if (node.type === 3 /* NodeTypes.COMMENT */ && !context.options.comments) {\n                removedWhitespace = true;\n                nodes[i] = null;\n            }\n        }\n        if (context.inPre && parent && context.options.isPreTag(parent.tag)) {\n            // remove leading newline per html spec\n            // https://html.spec.whatwg.org/multipage/grouping-content.html#the-pre-element\n            const first = nodes[0];\n            if (first && first.type === 2 /* NodeTypes.TEXT */) {\n                first.content = first.content.replace(/^\\r?\\n/, '');\n            }\n        }\n    }\n    return removedWhitespace ? nodes.filter(Boolean) : nodes;\n}\nfunction pushNode(nodes, node) {\n    if (node.type === 2 /* NodeTypes.TEXT */) {\n        const prev = last(nodes);\n        // Merge if both this and the previous node are text and those are\n        // consecutive. This happens for cases like \"a < b\".\n        if (prev &&\n            prev.type === 2 /* NodeTypes.TEXT */ &&\n            prev.loc.end.offset === node.loc.start.offset) {\n            prev.content += node.content;\n            prev.loc.end = node.loc.end;\n            prev.loc.source += node.loc.source;\n            return;\n        }\n    }\n    nodes.push(node);\n}\nfunction parseCDATA(context, ancestors) {\n    advanceBy(context, 9);\n    const nodes = parseChildren(context, 3 /* TextModes.CDATA */, ancestors);\n    if (context.source.length === 0) {\n        emitError(context, 6 /* ErrorCodes.EOF_IN_CDATA */);\n    }\n    else {\n        advanceBy(context, 3);\n    }\n    return nodes;\n}\nfunction parseComment(context) {\n    const start = getCursor(context);\n    let content;\n    // Regular comment.\n    const match = /--(\\!)?>/.exec(context.source);\n    if (!match) {\n        content = context.source.slice(4);\n        advanceBy(context, context.source.length);\n        emitError(context, 7 /* ErrorCodes.EOF_IN_COMMENT */);\n    }\n    else {\n        if (match.index <= 3) {\n            emitError(context, 0 /* ErrorCodes.ABRUPT_CLOSING_OF_EMPTY_COMMENT */);\n        }\n        if (match[1]) {\n            emitError(context, 10 /* ErrorCodes.INCORRECTLY_CLOSED_COMMENT */);\n        }\n        content = context.source.slice(4, match.index);\n        // Advancing with reporting nested comments.\n        const s = context.source.slice(0, match.index);\n        let prevIndex = 1, nestedIndex = 0;\n        while ((nestedIndex = s.indexOf('<!--', prevIndex)) !== -1) {\n            advanceBy(context, nestedIndex - prevIndex + 1);\n            if (nestedIndex + 4 < s.length) {\n                emitError(context, 16 /* ErrorCodes.NESTED_COMMENT */);\n            }\n            prevIndex = nestedIndex + 1;\n        }\n        advanceBy(context, match.index + match[0].length - prevIndex + 1);\n    }\n    return {\n        type: 3 /* NodeTypes.COMMENT */,\n        content,\n        loc: getSelection(context, start)\n    };\n}\nfunction parseBogusComment(context) {\n    const start = getCursor(context);\n    const contentStart = context.source[1] === '?' ? 1 : 2;\n    let content;\n    const closeIndex = context.source.indexOf('>');\n    if (closeIndex === -1) {\n        content = context.source.slice(contentStart);\n        advanceBy(context, context.source.length);\n    }\n    else {\n        content = context.source.slice(contentStart, closeIndex);\n        advanceBy(context, closeIndex + 1);\n    }\n    return {\n        type: 3 /* NodeTypes.COMMENT */,\n        content,\n        loc: getSelection(context, start)\n    };\n}\nfunction parseElement(context, ancestors) {\n    // Start tag.\n    const wasInPre = context.inPre;\n    const wasInVPre = context.inVPre;\n    const parent = last(ancestors);\n    const element = parseTag(context, 0 /* TagType.Start */, parent);\n    const isPreBoundary = context.inPre && !wasInPre;\n    const isVPreBoundary = context.inVPre && !wasInVPre;\n    if (element.isSelfClosing || context.options.isVoidTag(element.tag)) {\n        // #4030 self-closing <pre> tag\n        if (isPreBoundary) {\n            context.inPre = false;\n        }\n        if (isVPreBoundary) {\n            context.inVPre = false;\n        }\n        return element;\n    }\n    // Children.\n    ancestors.push(element);\n    const mode = context.options.getTextMode(element, parent);\n    const children = parseChildren(context, mode, ancestors);\n    ancestors.pop();\n    element.children = children;\n    // End tag.\n    if (startsWithEndTagOpen(context.source, element.tag)) {\n        parseTag(context, 1 /* TagType.End */, parent);\n    }\n    else {\n        emitError(context, 24 /* ErrorCodes.X_MISSING_END_TAG */, 0, element.loc.start);\n        if (context.source.length === 0 && element.tag.toLowerCase() === 'script') {\n            const first = children[0];\n            if (first && startsWith(first.loc.source, '<!--')) {\n                emitError(context, 8 /* ErrorCodes.EOF_IN_SCRIPT_HTML_COMMENT_LIKE_TEXT */);\n            }\n        }\n    }\n    element.loc = getSelection(context, element.loc.start);\n    if (isPreBoundary) {\n        context.inPre = false;\n    }\n    if (isVPreBoundary) {\n        context.inVPre = false;\n    }\n    return element;\n}\nconst isSpecialTemplateDirective = /*#__PURE__*/ makeMap(`if,else,else-if,for,slot`);\nfunction parseTag(context, type, parent) {\n    // Tag open.\n    const start = getCursor(context);\n    const match = /^<\\/?([a-z][^\\t\\r\\n\\f />]*)/i.exec(context.source);\n    const tag = match[1];\n    const ns = context.options.getNamespace(tag, parent);\n    advanceBy(context, match[0].length);\n    advanceSpaces(context);\n    // save current state in case we need to re-parse attributes with v-pre\n    const cursor = getCursor(context);\n    const currentSource = context.source;\n    // check <pre> tag\n    if (context.options.isPreTag(tag)) {\n        context.inPre = true;\n    }\n    // Attributes.\n    let props = parseAttributes(context, type);\n    // check v-pre\n    if (type === 0 /* TagType.Start */ &&\n        !context.inVPre &&\n        props.some(p => p.type === 7 /* NodeTypes.DIRECTIVE */ && p.name === 'pre')) {\n        context.inVPre = true;\n        // reset context\n        extend(context, cursor);\n        context.source = currentSource;\n        // re-parse attrs and filter out v-pre itself\n        props = parseAttributes(context, type).filter(p => p.name !== 'v-pre');\n    }\n    // Tag close.\n    let isSelfClosing = false;\n    if (context.source.length === 0) {\n        emitError(context, 9 /* ErrorCodes.EOF_IN_TAG */);\n    }\n    else {\n        isSelfClosing = startsWith(context.source, '/>');\n        if (type === 1 /* TagType.End */ && isSelfClosing) {\n            emitError(context, 4 /* ErrorCodes.END_TAG_WITH_TRAILING_SOLIDUS */);\n        }\n        advanceBy(context, isSelfClosing ? 2 : 1);\n    }\n    if (type === 1 /* TagType.End */) {\n        return;\n    }\n    let tagType = 0 /* ElementTypes.ELEMENT */;\n    if (!context.inVPre) {\n        if (tag === 'slot') {\n            tagType = 2 /* ElementTypes.SLOT */;\n        }\n        else if (tag === 'template') {\n            if (props.some(p => p.type === 7 /* NodeTypes.DIRECTIVE */ && isSpecialTemplateDirective(p.name))) {\n                tagType = 3 /* ElementTypes.TEMPLATE */;\n            }\n        }\n        else if (isComponent(tag, props, context)) {\n            tagType = 1 /* ElementTypes.COMPONENT */;\n        }\n    }\n    return {\n        type: 1 /* NodeTypes.ELEMENT */,\n        ns,\n        tag,\n        tagType,\n        props,\n        isSelfClosing,\n        children: [],\n        loc: getSelection(context, start),\n        codegenNode: undefined // to be created during transform phase\n    };\n}\nfunction isComponent(tag, props, context) {\n    const options = context.options;\n    if (options.isCustomElement(tag)) {\n        return false;\n    }\n    if (tag === 'component' ||\n        /^[A-Z]/.test(tag) ||\n        isCoreComponent(tag) ||\n        (options.isBuiltInComponent && options.isBuiltInComponent(tag)) ||\n        (options.isNativeTag && !options.isNativeTag(tag))) {\n        return true;\n    }\n    // at this point the tag should be a native tag, but check for potential \"is\"\n    // casting\n    for (let i = 0; i < props.length; i++) {\n        const p = props[i];\n        if (p.type === 6 /* NodeTypes.ATTRIBUTE */) {\n            if (p.name === 'is' && p.value) {\n                if (p.value.content.startsWith('vue:')) {\n                    return true;\n                }\n            }\n        }\n        else {\n            // directive\n            // v-is (TODO Deprecate)\n            if (p.name === 'is') {\n                return true;\n            }\n            else if (\n            // :is on plain element - only treat as component in compat mode\n            p.name === 'bind' &&\n                isStaticArgOf(p.arg, 'is') &&\n                false &&\n                checkCompatEnabled(\"COMPILER_IS_ON_ELEMENT\" /* CompilerDeprecationTypes.COMPILER_IS_ON_ELEMENT */, context, p.loc)) {\n                return true;\n            }\n        }\n    }\n}\nfunction parseAttributes(context, type) {\n    const props = [];\n    const attributeNames = new Set();\n    while (context.source.length > 0 &&\n        !startsWith(context.source, '>') &&\n        !startsWith(context.source, '/>')) {\n        if (startsWith(context.source, '/')) {\n            emitError(context, 22 /* ErrorCodes.UNEXPECTED_SOLIDUS_IN_TAG */);\n            advanceBy(context, 1);\n            advanceSpaces(context);\n            continue;\n        }\n        if (type === 1 /* TagType.End */) {\n            emitError(context, 3 /* ErrorCodes.END_TAG_WITH_ATTRIBUTES */);\n        }\n        const attr = parseAttribute(context, attributeNames);\n        // Trim whitespace between class\n        // https://github.com/vuejs/core/issues/4251\n        if (attr.type === 6 /* NodeTypes.ATTRIBUTE */ &&\n            attr.value &&\n            attr.name === 'class') {\n            attr.value.content = attr.value.content.replace(/\\s+/g, ' ').trim();\n        }\n        if (type === 0 /* TagType.Start */) {\n            props.push(attr);\n        }\n        if (/^[^\\t\\r\\n\\f />]/.test(context.source)) {\n            emitError(context, 15 /* ErrorCodes.MISSING_WHITESPACE_BETWEEN_ATTRIBUTES */);\n        }\n        advanceSpaces(context);\n    }\n    return props;\n}\nfunction parseAttribute(context, nameSet) {\n    // Name.\n    const start = getCursor(context);\n    const match = /^[^\\t\\r\\n\\f />][^\\t\\r\\n\\f />=]*/.exec(context.source);\n    const name = match[0];\n    if (nameSet.has(name)) {\n        emitError(context, 2 /* ErrorCodes.DUPLICATE_ATTRIBUTE */);\n    }\n    nameSet.add(name);\n    if (name[0] === '=') {\n        emitError(context, 19 /* ErrorCodes.UNEXPECTED_EQUALS_SIGN_BEFORE_ATTRIBUTE_NAME */);\n    }\n    {\n        const pattern = /[\"'<]/g;\n        let m;\n        while ((m = pattern.exec(name))) {\n            emitError(context, 17 /* ErrorCodes.UNEXPECTED_CHARACTER_IN_ATTRIBUTE_NAME */, m.index);\n        }\n    }\n    advanceBy(context, name.length);\n    // Value\n    let value = undefined;\n    if (/^[\\t\\r\\n\\f ]*=/.test(context.source)) {\n        advanceSpaces(context);\n        advanceBy(context, 1);\n        advanceSpaces(context);\n        value = parseAttributeValue(context);\n        if (!value) {\n            emitError(context, 13 /* ErrorCodes.MISSING_ATTRIBUTE_VALUE */);\n        }\n    }\n    const loc = getSelection(context, start);\n    if (!context.inVPre && /^(v-[A-Za-z0-9-]|:|\\.|@|#)/.test(name)) {\n        const match = /(?:^v-([a-z0-9-]+))?(?:(?::|^\\.|^@|^#)(\\[[^\\]]+\\]|[^\\.]+))?(.+)?$/i.exec(name);\n        let isPropShorthand = startsWith(name, '.');\n        let dirName = match[1] ||\n            (isPropShorthand || startsWith(name, ':')\n                ? 'bind'\n                : startsWith(name, '@')\n                    ? 'on'\n                    : 'slot');\n        let arg;\n        if (match[2]) {\n            const isSlot = dirName === 'slot';\n            const startOffset = name.lastIndexOf(match[2]);\n            const loc = getSelection(context, getNewPosition(context, start, startOffset), getNewPosition(context, start, startOffset + match[2].length + ((isSlot && match[3]) || '').length));\n            let content = match[2];\n            let isStatic = true;\n            if (content.startsWith('[')) {\n                isStatic = false;\n                if (!content.endsWith(']')) {\n                    emitError(context, 27 /* ErrorCodes.X_MISSING_DYNAMIC_DIRECTIVE_ARGUMENT_END */);\n                    content = content.slice(1);\n                }\n                else {\n                    content = content.slice(1, content.length - 1);\n                }\n            }\n            else if (isSlot) {\n                // #1241 special case for v-slot: vuetify relies extensively on slot\n                // names containing dots. v-slot doesn't have any modifiers and Vue 2.x\n                // supports such usage so we are keeping it consistent with 2.x.\n                content += match[3] || '';\n            }\n            arg = {\n                type: 4 /* NodeTypes.SIMPLE_EXPRESSION */,\n                content,\n                isStatic,\n                constType: isStatic\n                    ? 3 /* ConstantTypes.CAN_STRINGIFY */\n                    : 0 /* ConstantTypes.NOT_CONSTANT */,\n                loc\n            };\n        }\n        if (value && value.isQuoted) {\n            const valueLoc = value.loc;\n            valueLoc.start.offset++;\n            valueLoc.start.column++;\n            valueLoc.end = advancePositionWithClone(valueLoc.start, value.content);\n            valueLoc.source = valueLoc.source.slice(1, -1);\n        }\n        const modifiers = match[3] ? match[3].slice(1).split('.') : [];\n        if (isPropShorthand)\n            modifiers.push('prop');\n        return {\n            type: 7 /* NodeTypes.DIRECTIVE */,\n            name: dirName,\n            exp: value && {\n                type: 4 /* NodeTypes.SIMPLE_EXPRESSION */,\n                content: value.content,\n                isStatic: false,\n                // Treat as non-constant by default. This can be potentially set to\n                // other values by `transformExpression` to make it eligible for hoisting.\n                constType: 0 /* ConstantTypes.NOT_CONSTANT */,\n                loc: value.loc\n            },\n            arg,\n            modifiers,\n            loc\n        };\n    }\n    // missing directive name or illegal directive name\n    if (!context.inVPre && startsWith(name, 'v-')) {\n        emitError(context, 26 /* ErrorCodes.X_MISSING_DIRECTIVE_NAME */);\n    }\n    return {\n        type: 6 /* NodeTypes.ATTRIBUTE */,\n        name,\n        value: value && {\n            type: 2 /* NodeTypes.TEXT */,\n            content: value.content,\n            loc: value.loc\n        },\n        loc\n    };\n}\nfunction parseAttributeValue(context) {\n    const start = getCursor(context);\n    let content;\n    const quote = context.source[0];\n    const isQuoted = quote === `\"` || quote === `'`;\n    if (isQuoted) {\n        // Quoted value.\n        advanceBy(context, 1);\n        const endIndex = context.source.indexOf(quote);\n        if (endIndex === -1) {\n            content = parseTextData(context, context.source.length, 4 /* TextModes.ATTRIBUTE_VALUE */);\n        }\n        else {\n            content = parseTextData(context, endIndex, 4 /* TextModes.ATTRIBUTE_VALUE */);\n            advanceBy(context, 1);\n        }\n    }\n    else {\n        // Unquoted\n        const match = /^[^\\t\\r\\n\\f >]+/.exec(context.source);\n        if (!match) {\n            return undefined;\n        }\n        const unexpectedChars = /[\"'<=`]/g;\n        let m;\n        while ((m = unexpectedChars.exec(match[0]))) {\n            emitError(context, 18 /* ErrorCodes.UNEXPECTED_CHARACTER_IN_UNQUOTED_ATTRIBUTE_VALUE */, m.index);\n        }\n        content = parseTextData(context, match[0].length, 4 /* TextModes.ATTRIBUTE_VALUE */);\n    }\n    return { content, isQuoted, loc: getSelection(context, start) };\n}\nfunction parseInterpolation(context, mode) {\n    const [open, close] = context.options.delimiters;\n    const closeIndex = context.source.indexOf(close, open.length);\n    if (closeIndex === -1) {\n        emitError(context, 25 /* ErrorCodes.X_MISSING_INTERPOLATION_END */);\n        return undefined;\n    }\n    const start = getCursor(context);\n    advanceBy(context, open.length);\n    const innerStart = getCursor(context);\n    const innerEnd = getCursor(context);\n    const rawContentLength = closeIndex - open.length;\n    const rawContent = context.source.slice(0, rawContentLength);\n    const preTrimContent = parseTextData(context, rawContentLength, mode);\n    const content = preTrimContent.trim();\n    const startOffset = preTrimContent.indexOf(content);\n    if (startOffset > 0) {\n        advancePositionWithMutation(innerStart, rawContent, startOffset);\n    }\n    const endOffset = rawContentLength - (preTrimContent.length - content.length - startOffset);\n    advancePositionWithMutation(innerEnd, rawContent, endOffset);\n    advanceBy(context, close.length);\n    return {\n        type: 5 /* NodeTypes.INTERPOLATION */,\n        content: {\n            type: 4 /* NodeTypes.SIMPLE_EXPRESSION */,\n            isStatic: false,\n            // Set `isConstant` to false by default and will decide in transformExpression\n            constType: 0 /* ConstantTypes.NOT_CONSTANT */,\n            content,\n            loc: getSelection(context, innerStart, innerEnd)\n        },\n        loc: getSelection(context, start)\n    };\n}\nfunction parseText(context, mode) {\n    const endTokens = mode === 3 /* TextModes.CDATA */ ? [']]>'] : ['<', context.options.delimiters[0]];\n    let endIndex = context.source.length;\n    for (let i = 0; i < endTokens.length; i++) {\n        const index = context.source.indexOf(endTokens[i], 1);\n        if (index !== -1 && endIndex > index) {\n            endIndex = index;\n        }\n    }\n    const start = getCursor(context);\n    const content = parseTextData(context, endIndex, mode);\n    return {\n        type: 2 /* NodeTypes.TEXT */,\n        content,\n        loc: getSelection(context, start)\n    };\n}\n/**\n * Get text data with a given length from the current location.\n * This translates HTML entities in the text data.\n */\nfunction parseTextData(context, length, mode) {\n    const rawText = context.source.slice(0, length);\n    advanceBy(context, length);\n    if (mode === 2 /* TextModes.RAWTEXT */ ||\n        mode === 3 /* TextModes.CDATA */ ||\n        !rawText.includes('&')) {\n        return rawText;\n    }\n    else {\n        // DATA or RCDATA containing \"&\"\". Entity decoding required.\n        return context.options.decodeEntities(rawText, mode === 4 /* TextModes.ATTRIBUTE_VALUE */);\n    }\n}\nfunction getCursor(context) {\n    const { column, line, offset } = context;\n    return { column, line, offset };\n}\nfunction getSelection(context, start, end) {\n    end = end || getCursor(context);\n    return {\n        start,\n        end,\n        source: context.originalSource.slice(start.offset, end.offset)\n    };\n}\nfunction last(xs) {\n    return xs[xs.length - 1];\n}\nfunction startsWith(source, searchString) {\n    return source.startsWith(searchString);\n}\nfunction advanceBy(context, numberOfCharacters) {\n    const { source } = context;\n    advancePositionWithMutation(context, source, numberOfCharacters);\n    context.source = source.slice(numberOfCharacters);\n}\nfunction advanceSpaces(context) {\n    const match = /^[\\t\\r\\n\\f ]+/.exec(context.source);\n    if (match) {\n        advanceBy(context, match[0].length);\n    }\n}\nfunction getNewPosition(context, start, numberOfCharacters) {\n    return advancePositionWithClone(start, context.originalSource.slice(start.offset, numberOfCharacters), numberOfCharacters);\n}\nfunction emitError(context, code, offset, loc = getCursor(context)) {\n    if (offset) {\n        loc.offset += offset;\n        loc.column += offset;\n    }\n    context.options.onError(createCompilerError(code, {\n        start: loc,\n        end: loc,\n        source: ''\n    }));\n}\nfunction isEnd(context, mode, ancestors) {\n    const s = context.source;\n    switch (mode) {\n        case 0 /* TextModes.DATA */:\n            if (startsWith(s, '</')) {\n                // TODO: probably bad performance\n                for (let i = ancestors.length - 1; i >= 0; --i) {\n                    if (startsWithEndTagOpen(s, ancestors[i].tag)) {\n                        return true;\n                    }\n                }\n            }\n            break;\n        case 1 /* TextModes.RCDATA */:\n        case 2 /* TextModes.RAWTEXT */: {\n            const parent = last(ancestors);\n            if (parent && startsWithEndTagOpen(s, parent.tag)) {\n                return true;\n            }\n            break;\n        }\n        case 3 /* TextModes.CDATA */:\n            if (startsWith(s, ']]>')) {\n                return true;\n            }\n            break;\n    }\n    return !s;\n}\nfunction startsWithEndTagOpen(source, tag) {\n    return (startsWith(source, '</') &&\n        source.slice(2, 2 + tag.length).toLowerCase() === tag.toLowerCase() &&\n        /[\\t\\r\\n\\f />]/.test(source[2 + tag.length] || '>'));\n}\n\nfunction hoistStatic(root, context) {\n    walk$2(root, context, \n    // Root node is unfortunately non-hoistable due to potential parent\n    // fallthrough attributes.\n    isSingleElementRoot(root, root.children[0]));\n}\nfunction isSingleElementRoot(root, child) {\n    const { children } = root;\n    return (children.length === 1 &&\n        child.type === 1 /* NodeTypes.ELEMENT */ &&\n        !isSlotOutlet(child));\n}\nfunction walk$2(node, context, doNotHoistNode = false) {\n    const { children } = node;\n    const originalCount = children.length;\n    let hoistedCount = 0;\n    for (let i = 0; i < children.length; i++) {\n        const child = children[i];\n        // only plain elements & text calls are eligible for hoisting.\n        if (child.type === 1 /* NodeTypes.ELEMENT */ &&\n            child.tagType === 0 /* ElementTypes.ELEMENT */) {\n            const constantType = doNotHoistNode\n                ? 0 /* ConstantTypes.NOT_CONSTANT */\n                : getConstantType(child, context);\n            if (constantType > 0 /* ConstantTypes.NOT_CONSTANT */) {\n                if (constantType >= 2 /* ConstantTypes.CAN_HOIST */) {\n                    child.codegenNode.patchFlag =\n                        -1 /* PatchFlags.HOISTED */ + (` /* HOISTED */` );\n                    child.codegenNode = context.hoist(child.codegenNode);\n                    hoistedCount++;\n                    continue;\n                }\n            }\n            else {\n                // node may contain dynamic children, but its props may be eligible for\n                // hoisting.\n                const codegenNode = child.codegenNode;\n                if (codegenNode.type === 13 /* NodeTypes.VNODE_CALL */) {\n                    const flag = getPatchFlag(codegenNode);\n                    if ((!flag ||\n                        flag === 512 /* PatchFlags.NEED_PATCH */ ||\n                        flag === 1 /* PatchFlags.TEXT */) &&\n                        getGeneratedPropsConstantType(child, context) >=\n                            2 /* ConstantTypes.CAN_HOIST */) {\n                        const props = getNodeProps(child);\n                        if (props) {\n                            codegenNode.props = context.hoist(props);\n                        }\n                    }\n                    if (codegenNode.dynamicProps) {\n                        codegenNode.dynamicProps = context.hoist(codegenNode.dynamicProps);\n                    }\n                }\n            }\n        }\n        // walk further\n        if (child.type === 1 /* NodeTypes.ELEMENT */) {\n            const isComponent = child.tagType === 1 /* ElementTypes.COMPONENT */;\n            if (isComponent) {\n                context.scopes.vSlot++;\n            }\n            walk$2(child, context);\n            if (isComponent) {\n                context.scopes.vSlot--;\n            }\n        }\n        else if (child.type === 11 /* NodeTypes.FOR */) {\n            // Do not hoist v-for single child because it has to be a block\n            walk$2(child, context, child.children.length === 1);\n        }\n        else if (child.type === 9 /* NodeTypes.IF */) {\n            for (let i = 0; i < child.branches.length; i++) {\n                // Do not hoist v-if single child because it has to be a block\n                walk$2(child.branches[i], context, child.branches[i].children.length === 1);\n            }\n        }\n    }\n    if (hoistedCount && context.transformHoist) {\n        context.transformHoist(children, context, node);\n    }\n    // all children were hoisted - the entire children array is hoistable.\n    if (hoistedCount &&\n        hoistedCount === originalCount &&\n        node.type === 1 /* NodeTypes.ELEMENT */ &&\n        node.tagType === 0 /* ElementTypes.ELEMENT */ &&\n        node.codegenNode &&\n        node.codegenNode.type === 13 /* NodeTypes.VNODE_CALL */ &&\n        isArray$3(node.codegenNode.children)) {\n        node.codegenNode.children = context.hoist(createArrayExpression(node.codegenNode.children));\n    }\n}\nfunction getConstantType(node, context) {\n    const { constantCache } = context;\n    switch (node.type) {\n        case 1 /* NodeTypes.ELEMENT */:\n            if (node.tagType !== 0 /* ElementTypes.ELEMENT */) {\n                return 0 /* ConstantTypes.NOT_CONSTANT */;\n            }\n            const cached = constantCache.get(node);\n            if (cached !== undefined) {\n                return cached;\n            }\n            const codegenNode = node.codegenNode;\n            if (codegenNode.type !== 13 /* NodeTypes.VNODE_CALL */) {\n                return 0 /* ConstantTypes.NOT_CONSTANT */;\n            }\n            if (codegenNode.isBlock &&\n                node.tag !== 'svg' &&\n                node.tag !== 'foreignObject') {\n                return 0 /* ConstantTypes.NOT_CONSTANT */;\n            }\n            const flag = getPatchFlag(codegenNode);\n            if (!flag) {\n                let returnType = 3 /* ConstantTypes.CAN_STRINGIFY */;\n                // Element itself has no patch flag. However we still need to check:\n                // 1. Even for a node with no patch flag, it is possible for it to contain\n                // non-hoistable expressions that refers to scope variables, e.g. compiler\n                // injected keys or cached event handlers. Therefore we need to always\n                // check the codegenNode's props to be sure.\n                const generatedPropsType = getGeneratedPropsConstantType(node, context);\n                if (generatedPropsType === 0 /* ConstantTypes.NOT_CONSTANT */) {\n                    constantCache.set(node, 0 /* ConstantTypes.NOT_CONSTANT */);\n                    return 0 /* ConstantTypes.NOT_CONSTANT */;\n                }\n                if (generatedPropsType < returnType) {\n                    returnType = generatedPropsType;\n                }\n                // 2. its children.\n                for (let i = 0; i < node.children.length; i++) {\n                    const childType = getConstantType(node.children[i], context);\n                    if (childType === 0 /* ConstantTypes.NOT_CONSTANT */) {\n                        constantCache.set(node, 0 /* ConstantTypes.NOT_CONSTANT */);\n                        return 0 /* ConstantTypes.NOT_CONSTANT */;\n                    }\n                    if (childType < returnType) {\n                        returnType = childType;\n                    }\n                }\n                // 3. if the type is not already CAN_SKIP_PATCH which is the lowest non-0\n                // type, check if any of the props can cause the type to be lowered\n                // we can skip can_patch because it's guaranteed by the absence of a\n                // patchFlag.\n                if (returnType > 1 /* ConstantTypes.CAN_SKIP_PATCH */) {\n                    for (let i = 0; i < node.props.length; i++) {\n                        const p = node.props[i];\n                        if (p.type === 7 /* NodeTypes.DIRECTIVE */ && p.name === 'bind' && p.exp) {\n                            const expType = getConstantType(p.exp, context);\n                            if (expType === 0 /* ConstantTypes.NOT_CONSTANT */) {\n                                constantCache.set(node, 0 /* ConstantTypes.NOT_CONSTANT */);\n                                return 0 /* ConstantTypes.NOT_CONSTANT */;\n                            }\n                            if (expType < returnType) {\n                                returnType = expType;\n                            }\n                        }\n                    }\n                }\n                // only svg/foreignObject could be block here, however if they are\n                // static then they don't need to be blocks since there will be no\n                // nested updates.\n                if (codegenNode.isBlock) {\n                    // except set custom directives.\n                    for (let i = 0; i < node.props.length; i++) {\n                        const p = node.props[i];\n                        if (p.type === 7 /* NodeTypes.DIRECTIVE */) {\n                            constantCache.set(node, 0 /* ConstantTypes.NOT_CONSTANT */);\n                            return 0 /* ConstantTypes.NOT_CONSTANT */;\n                        }\n                    }\n                    context.removeHelper(OPEN_BLOCK);\n                    context.removeHelper(getVNodeBlockHelper(context.inSSR, codegenNode.isComponent));\n                    codegenNode.isBlock = false;\n                    context.helper(getVNodeHelper(context.inSSR, codegenNode.isComponent));\n                }\n                constantCache.set(node, returnType);\n                return returnType;\n            }\n            else {\n                constantCache.set(node, 0 /* ConstantTypes.NOT_CONSTANT */);\n                return 0 /* ConstantTypes.NOT_CONSTANT */;\n            }\n        case 2 /* NodeTypes.TEXT */:\n        case 3 /* NodeTypes.COMMENT */:\n            return 3 /* ConstantTypes.CAN_STRINGIFY */;\n        case 9 /* NodeTypes.IF */:\n        case 11 /* NodeTypes.FOR */:\n        case 10 /* NodeTypes.IF_BRANCH */:\n            return 0 /* ConstantTypes.NOT_CONSTANT */;\n        case 5 /* NodeTypes.INTERPOLATION */:\n        case 12 /* NodeTypes.TEXT_CALL */:\n            return getConstantType(node.content, context);\n        case 4 /* NodeTypes.SIMPLE_EXPRESSION */:\n            return node.constType;\n        case 8 /* NodeTypes.COMPOUND_EXPRESSION */:\n            let returnType = 3 /* ConstantTypes.CAN_STRINGIFY */;\n            for (let i = 0; i < node.children.length; i++) {\n                const child = node.children[i];\n                if (isString$2(child) || isSymbol$1(child)) {\n                    continue;\n                }\n                const childType = getConstantType(child, context);\n                if (childType === 0 /* ConstantTypes.NOT_CONSTANT */) {\n                    return 0 /* ConstantTypes.NOT_CONSTANT */;\n                }\n                else if (childType < returnType) {\n                    returnType = childType;\n                }\n            }\n            return returnType;\n        default:\n            return 0 /* ConstantTypes.NOT_CONSTANT */;\n    }\n}\nconst allowHoistedHelperSet = new Set([\n    NORMALIZE_CLASS,\n    NORMALIZE_STYLE,\n    NORMALIZE_PROPS,\n    GUARD_REACTIVE_PROPS\n]);\nfunction getConstantTypeOfHelperCall(value, context) {\n    if (value.type === 14 /* NodeTypes.JS_CALL_EXPRESSION */ &&\n        !isString$2(value.callee) &&\n        allowHoistedHelperSet.has(value.callee)) {\n        const arg = value.arguments[0];\n        if (arg.type === 4 /* NodeTypes.SIMPLE_EXPRESSION */) {\n            return getConstantType(arg, context);\n        }\n        else if (arg.type === 14 /* NodeTypes.JS_CALL_EXPRESSION */) {\n            // in the case of nested helper call, e.g. `normalizeProps(guardReactiveProps(exp))`\n            return getConstantTypeOfHelperCall(arg, context);\n        }\n    }\n    return 0 /* ConstantTypes.NOT_CONSTANT */;\n}\nfunction getGeneratedPropsConstantType(node, context) {\n    let returnType = 3 /* ConstantTypes.CAN_STRINGIFY */;\n    const props = getNodeProps(node);\n    if (props && props.type === 15 /* NodeTypes.JS_OBJECT_EXPRESSION */) {\n        const { properties } = props;\n        for (let i = 0; i < properties.length; i++) {\n            const { key, value } = properties[i];\n            const keyType = getConstantType(key, context);\n            if (keyType === 0 /* ConstantTypes.NOT_CONSTANT */) {\n                return keyType;\n            }\n            if (keyType < returnType) {\n                returnType = keyType;\n            }\n            let valueType;\n            if (value.type === 4 /* NodeTypes.SIMPLE_EXPRESSION */) {\n                valueType = getConstantType(value, context);\n            }\n            else if (value.type === 14 /* NodeTypes.JS_CALL_EXPRESSION */) {\n                // some helper calls can be hoisted,\n                // such as the `normalizeProps` generated by the compiler for pre-normalize class,\n                // in this case we need to respect the ConstantType of the helper's arguments\n                valueType = getConstantTypeOfHelperCall(value, context);\n            }\n            else {\n                valueType = 0 /* ConstantTypes.NOT_CONSTANT */;\n            }\n            if (valueType === 0 /* ConstantTypes.NOT_CONSTANT */) {\n                return valueType;\n            }\n            if (valueType < returnType) {\n                returnType = valueType;\n            }\n        }\n    }\n    return returnType;\n}\nfunction getNodeProps(node) {\n    const codegenNode = node.codegenNode;\n    if (codegenNode.type === 13 /* NodeTypes.VNODE_CALL */) {\n        return codegenNode.props;\n    }\n}\nfunction getPatchFlag(node) {\n    const flag = node.patchFlag;\n    return flag ? parseInt(flag, 10) : undefined;\n}\n\nfunction createTransformContext(root, { filename = '', prefixIdentifiers = false, hoistStatic = false, cacheHandlers = false, nodeTransforms = [], directiveTransforms = {}, transformHoist = null, isBuiltInComponent = NOOP, isCustomElement = NOOP, expressionPlugins = [], scopeId = null, slotted = true, ssr = false, inSSR = false, ssrCssVars = ``, bindingMetadata = EMPTY_OBJ, inline = false, isTS = false, onError = defaultOnError, onWarn = defaultOnWarn, compatConfig }) {\n    const nameMatch = filename.replace(/\\?.*$/, '').match(/([^/\\\\]+)\\.\\w+$/);\n    const context = {\n        // options\n        selfName: nameMatch && capitalize$1(camelize(nameMatch[1])),\n        prefixIdentifiers,\n        hoistStatic,\n        cacheHandlers,\n        nodeTransforms,\n        directiveTransforms,\n        transformHoist,\n        isBuiltInComponent,\n        isCustomElement,\n        expressionPlugins,\n        scopeId,\n        slotted,\n        ssr,\n        inSSR,\n        ssrCssVars,\n        bindingMetadata,\n        inline,\n        isTS,\n        onError,\n        onWarn,\n        compatConfig,\n        // state\n        root,\n        helpers: new Map(),\n        components: new Set(),\n        directives: new Set(),\n        hoists: [],\n        imports: [],\n        constantCache: new Map(),\n        temps: 0,\n        cached: 0,\n        identifiers: Object.create(null),\n        scopes: {\n            vFor: 0,\n            vSlot: 0,\n            vPre: 0,\n            vOnce: 0\n        },\n        parent: null,\n        currentNode: root,\n        childIndex: 0,\n        inVOnce: false,\n        // methods\n        helper(name) {\n            const count = context.helpers.get(name) || 0;\n            context.helpers.set(name, count + 1);\n            return name;\n        },\n        removeHelper(name) {\n            const count = context.helpers.get(name);\n            if (count) {\n                const currentCount = count - 1;\n                if (!currentCount) {\n                    context.helpers.delete(name);\n                }\n                else {\n                    context.helpers.set(name, currentCount);\n                }\n            }\n        },\n        helperString(name) {\n            return `_${helperNameMap[context.helper(name)]}`;\n        },\n        replaceNode(node) {\n            /* istanbul ignore if */\n            {\n                if (!context.currentNode) {\n                    throw new Error(`Node being replaced is already removed.`);\n                }\n                if (!context.parent) {\n                    throw new Error(`Cannot replace root node.`);\n                }\n            }\n            context.parent.children[context.childIndex] = context.currentNode = node;\n        },\n        removeNode(node) {\n            if (!context.parent) {\n                throw new Error(`Cannot remove root node.`);\n            }\n            const list = context.parent.children;\n            const removalIndex = node\n                ? list.indexOf(node)\n                : context.currentNode\n                    ? context.childIndex\n                    : -1;\n            /* istanbul ignore if */\n            if (removalIndex < 0) {\n                throw new Error(`node being removed is not a child of current parent`);\n            }\n            if (!node || node === context.currentNode) {\n                // current node removed\n                context.currentNode = null;\n                context.onNodeRemoved();\n            }\n            else {\n                // sibling node removed\n                if (context.childIndex > removalIndex) {\n                    context.childIndex--;\n                    context.onNodeRemoved();\n                }\n            }\n            context.parent.children.splice(removalIndex, 1);\n        },\n        onNodeRemoved: () => { },\n        addIdentifiers(exp) {\n            // identifier tracking only happens in non-browser builds.\n            {\n                if (isString$2(exp)) {\n                    addId(exp);\n                }\n                else if (exp.identifiers) {\n                    exp.identifiers.forEach(addId);\n                }\n                else if (exp.type === 4 /* NodeTypes.SIMPLE_EXPRESSION */) {\n                    addId(exp.content);\n                }\n            }\n        },\n        removeIdentifiers(exp) {\n            {\n                if (isString$2(exp)) {\n                    removeId(exp);\n                }\n                else if (exp.identifiers) {\n                    exp.identifiers.forEach(removeId);\n                }\n                else if (exp.type === 4 /* NodeTypes.SIMPLE_EXPRESSION */) {\n                    removeId(exp.content);\n                }\n            }\n        },\n        hoist(exp) {\n            if (isString$2(exp))\n                exp = createSimpleExpression(exp);\n            context.hoists.push(exp);\n            const identifier = createSimpleExpression(`_hoisted_${context.hoists.length}`, false, exp.loc, 2 /* ConstantTypes.CAN_HOIST */);\n            identifier.hoisted = exp;\n            return identifier;\n        },\n        cache(exp, isVNode = false) {\n            return createCacheExpression(context.cached++, exp, isVNode);\n        }\n    };\n    function addId(id) {\n        const { identifiers } = context;\n        if (identifiers[id] === undefined) {\n            identifiers[id] = 0;\n        }\n        identifiers[id]++;\n    }\n    function removeId(id) {\n        context.identifiers[id]--;\n    }\n    return context;\n}\nfunction transform$1(root, options) {\n    const context = createTransformContext(root, options);\n    traverseNode(root, context);\n    if (options.hoistStatic) {\n        hoistStatic(root, context);\n    }\n    if (!options.ssr) {\n        createRootCodegen(root, context);\n    }\n    // finalize meta information\n    root.helpers = new Set([...context.helpers.keys()]);\n    root.components = [...context.components];\n    root.directives = [...context.directives];\n    root.imports = context.imports;\n    root.hoists = context.hoists;\n    root.temps = context.temps;\n    root.cached = context.cached;\n}\nfunction createRootCodegen(root, context) {\n    const { helper } = context;\n    const { children } = root;\n    if (children.length === 1) {\n        const child = children[0];\n        // if the single child is an element, turn it into a block.\n        if (isSingleElementRoot(root, child) && child.codegenNode) {\n            // single element root is never hoisted so codegenNode will never be\n            // SimpleExpressionNode\n            const codegenNode = child.codegenNode;\n            if (codegenNode.type === 13 /* NodeTypes.VNODE_CALL */) {\n                makeBlock(codegenNode, context);\n            }\n            root.codegenNode = codegenNode;\n        }\n        else {\n            // - single <slot/>, IfNode, ForNode: already blocks.\n            // - single text node: always patched.\n            // root codegen falls through via genNode()\n            root.codegenNode = child;\n        }\n    }\n    else if (children.length > 1) {\n        // root has multiple nodes - return a fragment block.\n        let patchFlag = 64 /* PatchFlags.STABLE_FRAGMENT */;\n        let patchFlagText = PatchFlagNames[64 /* PatchFlags.STABLE_FRAGMENT */];\n        // check if the fragment actually contains a single valid child with\n        // the rest being comments\n        if (children.filter(c => c.type !== 3 /* NodeTypes.COMMENT */).length === 1) {\n            patchFlag |= 2048 /* PatchFlags.DEV_ROOT_FRAGMENT */;\n            patchFlagText += `, ${PatchFlagNames[2048 /* PatchFlags.DEV_ROOT_FRAGMENT */]}`;\n        }\n        root.codegenNode = createVNodeCall(context, helper(FRAGMENT), undefined, root.children, patchFlag + (` /* ${patchFlagText} */` ), undefined, undefined, true, undefined, false /* isComponent */);\n    }\n    else ;\n}\nfunction traverseChildren(parent, context) {\n    let i = 0;\n    const nodeRemoved = () => {\n        i--;\n    };\n    for (; i < parent.children.length; i++) {\n        const child = parent.children[i];\n        if (isString$2(child))\n            continue;\n        context.parent = parent;\n        context.childIndex = i;\n        context.onNodeRemoved = nodeRemoved;\n        traverseNode(child, context);\n    }\n}\nfunction traverseNode(node, context) {\n    context.currentNode = node;\n    // apply transform plugins\n    const { nodeTransforms } = context;\n    const exitFns = [];\n    for (let i = 0; i < nodeTransforms.length; i++) {\n        const onExit = nodeTransforms[i](node, context);\n        if (onExit) {\n            if (isArray$3(onExit)) {\n                exitFns.push(...onExit);\n            }\n            else {\n                exitFns.push(onExit);\n            }\n        }\n        if (!context.currentNode) {\n            // node was removed\n            return;\n        }\n        else {\n            // node may have been replaced\n            node = context.currentNode;\n        }\n    }\n    switch (node.type) {\n        case 3 /* NodeTypes.COMMENT */:\n            if (!context.ssr) {\n                // inject import for the Comment symbol, which is needed for creating\n                // comment nodes with `createVNode`\n                context.helper(CREATE_COMMENT);\n            }\n            break;\n        case 5 /* NodeTypes.INTERPOLATION */:\n            // no need to traverse, but we need to inject toString helper\n            if (!context.ssr) {\n                context.helper(TO_DISPLAY_STRING);\n            }\n            break;\n        // for container types, further traverse downwards\n        case 9 /* NodeTypes.IF */:\n            for (let i = 0; i < node.branches.length; i++) {\n                traverseNode(node.branches[i], context);\n            }\n            break;\n        case 10 /* NodeTypes.IF_BRANCH */:\n        case 11 /* NodeTypes.FOR */:\n        case 1 /* NodeTypes.ELEMENT */:\n        case 0 /* NodeTypes.ROOT */:\n            traverseChildren(node, context);\n            break;\n    }\n    // exit transforms\n    context.currentNode = node;\n    let i = exitFns.length;\n    while (i--) {\n        exitFns[i]();\n    }\n}\nfunction createStructuralDirectiveTransform(name, fn) {\n    const matches = isString$2(name)\n        ? (n) => n === name\n        : (n) => name.test(n);\n    return (node, context) => {\n        if (node.type === 1 /* NodeTypes.ELEMENT */) {\n            const { props } = node;\n            // structural directive transforms are not concerned with slots\n            // as they are handled separately in vSlot.ts\n            if (node.tagType === 3 /* ElementTypes.TEMPLATE */ && props.some(isVSlot)) {\n                return;\n            }\n            const exitFns = [];\n            for (let i = 0; i < props.length; i++) {\n                const prop = props[i];\n                if (prop.type === 7 /* NodeTypes.DIRECTIVE */ && matches(prop.name)) {\n                    // structural directives are removed to avoid infinite recursion\n                    // also we remove them *before* applying so that it can further\n                    // traverse itself in case it moves the node around\n                    props.splice(i, 1);\n                    i--;\n                    const onExit = fn(node, prop, context);\n                    if (onExit)\n                        exitFns.push(onExit);\n                }\n            }\n            return exitFns;\n        }\n    };\n}\n\nvar sourceMap$2 = {};\n\nvar sourceMapGenerator$1 = {};\n\nvar base64Vlq$1 = {};\n\nvar base64$3 = {};\n\n/* -*- Mode: js; js-indent-level: 2; -*- */\n\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar intToCharMap$1 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');\n\n/**\n * Encode an integer in the range of 0 to 63 to a single base 64 digit.\n */\nbase64$3.encode = function (number) {\n  if (0 <= number && number < intToCharMap$1.length) {\n    return intToCharMap$1[number];\n  }\n  throw new TypeError(\"Must be between 0 and 63: \" + number);\n};\n\n/**\n * Decode a single base 64 character code digit to an integer. Returns -1 on\n * failure.\n */\nbase64$3.decode = function (charCode) {\n  var bigA = 65;     // 'A'\n  var bigZ = 90;     // 'Z'\n\n  var littleA = 97;  // 'a'\n  var littleZ = 122; // 'z'\n\n  var zero = 48;     // '0'\n  var nine = 57;     // '9'\n\n  var plus = 43;     // '+'\n  var slash = 47;    // '/'\n\n  var littleOffset = 26;\n  var numberOffset = 52;\n\n  // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ\n  if (bigA <= charCode && charCode <= bigZ) {\n    return (charCode - bigA);\n  }\n\n  // 26 - 51: abcdefghijklmnopqrstuvwxyz\n  if (littleA <= charCode && charCode <= littleZ) {\n    return (charCode - littleA + littleOffset);\n  }\n\n  // 52 - 61: 0123456789\n  if (zero <= charCode && charCode <= nine) {\n    return (charCode - zero + numberOffset);\n  }\n\n  // 62: +\n  if (charCode == plus) {\n    return 62;\n  }\n\n  // 63: /\n  if (charCode == slash) {\n    return 63;\n  }\n\n  // Invalid base64 digit.\n  return -1;\n};\n\n/* -*- Mode: js; js-indent-level: 2; -*- */\n\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n *\n * Based on the Base 64 VLQ implementation in Closure Compiler:\n * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java\n *\n * Copyright 2011 The Closure Compiler Authors. All rights reserved.\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *  * Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n *  * Redistributions in binary form must reproduce the above\n *    copyright notice, this list of conditions and the following\n *    disclaimer in the documentation and/or other materials provided\n *    with the distribution.\n *  * Neither the name of Google Inc. nor the names of its\n *    contributors may be used to endorse or promote products derived\n *    from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nvar base64$2 = base64$3;\n\n// A single base 64 digit can contain 6 bits of data. For the base 64 variable\n// length quantities we use in the source map spec, the first bit is the sign,\n// the next four bits are the actual value, and the 6th bit is the\n// continuation bit. The continuation bit tells us whether there are more\n// digits in this value following this digit.\n//\n//   Continuation\n//   |    Sign\n//   |    |\n//   V    V\n//   101011\n\nvar VLQ_BASE_SHIFT$1 = 5;\n\n// binary: 100000\nvar VLQ_BASE$1 = 1 << VLQ_BASE_SHIFT$1;\n\n// binary: 011111\nvar VLQ_BASE_MASK$1 = VLQ_BASE$1 - 1;\n\n// binary: 100000\nvar VLQ_CONTINUATION_BIT$1 = VLQ_BASE$1;\n\n/**\n * Converts from a two-complement value to a value where the sign bit is\n * placed in the least significant bit.  For example, as decimals:\n *   1 becomes 2 (10 binary), -1 becomes 3 (11 binary)\n *   2 becomes 4 (100 binary), -2 becomes 5 (101 binary)\n */\nfunction toVLQSigned$1(aValue) {\n  return aValue < 0\n    ? ((-aValue) << 1) + 1\n    : (aValue << 1) + 0;\n}\n\n/**\n * Converts to a two-complement value from a value where the sign bit is\n * placed in the least significant bit.  For example, as decimals:\n *   2 (10 binary) becomes 1, 3 (11 binary) becomes -1\n *   4 (100 binary) becomes 2, 5 (101 binary) becomes -2\n */\nfunction fromVLQSigned$1(aValue) {\n  var isNegative = (aValue & 1) === 1;\n  var shifted = aValue >> 1;\n  return isNegative\n    ? -shifted\n    : shifted;\n}\n\n/**\n * Returns the base 64 VLQ encoded value.\n */\nbase64Vlq$1.encode = function base64VLQ_encode(aValue) {\n  var encoded = \"\";\n  var digit;\n\n  var vlq = toVLQSigned$1(aValue);\n\n  do {\n    digit = vlq & VLQ_BASE_MASK$1;\n    vlq >>>= VLQ_BASE_SHIFT$1;\n    if (vlq > 0) {\n      // There are still more digits in this value, so we must make sure the\n      // continuation bit is marked.\n      digit |= VLQ_CONTINUATION_BIT$1;\n    }\n    encoded += base64$2.encode(digit);\n  } while (vlq > 0);\n\n  return encoded;\n};\n\n/**\n * Decodes the next base 64 VLQ value from the given string and returns the\n * value and the rest of the string via the out parameter.\n */\nbase64Vlq$1.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) {\n  var strLen = aStr.length;\n  var result = 0;\n  var shift = 0;\n  var continuation, digit;\n\n  do {\n    if (aIndex >= strLen) {\n      throw new Error(\"Expected more digits in base 64 VLQ value.\");\n    }\n\n    digit = base64$2.decode(aStr.charCodeAt(aIndex++));\n    if (digit === -1) {\n      throw new Error(\"Invalid base64 digit: \" + aStr.charAt(aIndex - 1));\n    }\n\n    continuation = !!(digit & VLQ_CONTINUATION_BIT$1);\n    digit &= VLQ_BASE_MASK$1;\n    result = result + (digit << shift);\n    shift += VLQ_BASE_SHIFT$1;\n  } while (continuation);\n\n  aOutParam.value = fromVLQSigned$1(result);\n  aOutParam.rest = aIndex;\n};\n\nvar util$c = {};\n\n/* -*- Mode: js; js-indent-level: 2; -*- */\n\n(function (exports) {\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\n\t/**\n\t * This is a helper function for getting values from parameter/options\n\t * objects.\n\t *\n\t * @param args The object we are extracting values from\n\t * @param name The name of the property we are getting.\n\t * @param defaultValue An optional value to return if the property is missing\n\t * from the object. If this is not specified and the property is missing, an\n\t * error will be thrown.\n\t */\n\tfunction getArg(aArgs, aName, aDefaultValue) {\n\t  if (aName in aArgs) {\n\t    return aArgs[aName];\n\t  } else if (arguments.length === 3) {\n\t    return aDefaultValue;\n\t  } else {\n\t    throw new Error('\"' + aName + '\" is a required argument.');\n\t  }\n\t}\n\texports.getArg = getArg;\n\n\tvar urlRegexp = /^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.-]*)(?::(\\d+))?(.*)$/;\n\tvar dataUrlRegexp = /^data:.+\\,.+$/;\n\n\tfunction urlParse(aUrl) {\n\t  var match = aUrl.match(urlRegexp);\n\t  if (!match) {\n\t    return null;\n\t  }\n\t  return {\n\t    scheme: match[1],\n\t    auth: match[2],\n\t    host: match[3],\n\t    port: match[4],\n\t    path: match[5]\n\t  };\n\t}\n\texports.urlParse = urlParse;\n\n\tfunction urlGenerate(aParsedUrl) {\n\t  var url = '';\n\t  if (aParsedUrl.scheme) {\n\t    url += aParsedUrl.scheme + ':';\n\t  }\n\t  url += '//';\n\t  if (aParsedUrl.auth) {\n\t    url += aParsedUrl.auth + '@';\n\t  }\n\t  if (aParsedUrl.host) {\n\t    url += aParsedUrl.host;\n\t  }\n\t  if (aParsedUrl.port) {\n\t    url += \":\" + aParsedUrl.port;\n\t  }\n\t  if (aParsedUrl.path) {\n\t    url += aParsedUrl.path;\n\t  }\n\t  return url;\n\t}\n\texports.urlGenerate = urlGenerate;\n\n\t/**\n\t * Normalizes a path, or the path portion of a URL:\n\t *\n\t * - Replaces consecutive slashes with one slash.\n\t * - Removes unnecessary '.' parts.\n\t * - Removes unnecessary '<dir>/..' parts.\n\t *\n\t * Based on code in the Node.js 'path' core module.\n\t *\n\t * @param aPath The path or url to normalize.\n\t */\n\tfunction normalize(aPath) {\n\t  var path = aPath;\n\t  var url = urlParse(aPath);\n\t  if (url) {\n\t    if (!url.path) {\n\t      return aPath;\n\t    }\n\t    path = url.path;\n\t  }\n\t  var isAbsolute = exports.isAbsolute(path);\n\n\t  var parts = path.split(/\\/+/);\n\t  for (var part, up = 0, i = parts.length - 1; i >= 0; i--) {\n\t    part = parts[i];\n\t    if (part === '.') {\n\t      parts.splice(i, 1);\n\t    } else if (part === '..') {\n\t      up++;\n\t    } else if (up > 0) {\n\t      if (part === '') {\n\t        // The first part is blank if the path is absolute. Trying to go\n\t        // above the root is a no-op. Therefore we can remove all '..' parts\n\t        // directly after the root.\n\t        parts.splice(i + 1, up);\n\t        up = 0;\n\t      } else {\n\t        parts.splice(i, 2);\n\t        up--;\n\t      }\n\t    }\n\t  }\n\t  path = parts.join('/');\n\n\t  if (path === '') {\n\t    path = isAbsolute ? '/' : '.';\n\t  }\n\n\t  if (url) {\n\t    url.path = path;\n\t    return urlGenerate(url);\n\t  }\n\t  return path;\n\t}\n\texports.normalize = normalize;\n\n\t/**\n\t * Joins two paths/URLs.\n\t *\n\t * @param aRoot The root path or URL.\n\t * @param aPath The path or URL to be joined with the root.\n\t *\n\t * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a\n\t *   scheme-relative URL: Then the scheme of aRoot, if any, is prepended\n\t *   first.\n\t * - Otherwise aPath is a path. If aRoot is a URL, then its path portion\n\t *   is updated with the result and aRoot is returned. Otherwise the result\n\t *   is returned.\n\t *   - If aPath is absolute, the result is aPath.\n\t *   - Otherwise the two paths are joined with a slash.\n\t * - Joining for example 'http://' and 'www.example.com' is also supported.\n\t */\n\tfunction join(aRoot, aPath) {\n\t  if (aRoot === \"\") {\n\t    aRoot = \".\";\n\t  }\n\t  if (aPath === \"\") {\n\t    aPath = \".\";\n\t  }\n\t  var aPathUrl = urlParse(aPath);\n\t  var aRootUrl = urlParse(aRoot);\n\t  if (aRootUrl) {\n\t    aRoot = aRootUrl.path || '/';\n\t  }\n\n\t  // `join(foo, '//www.example.org')`\n\t  if (aPathUrl && !aPathUrl.scheme) {\n\t    if (aRootUrl) {\n\t      aPathUrl.scheme = aRootUrl.scheme;\n\t    }\n\t    return urlGenerate(aPathUrl);\n\t  }\n\n\t  if (aPathUrl || aPath.match(dataUrlRegexp)) {\n\t    return aPath;\n\t  }\n\n\t  // `join('http://', 'www.example.com')`\n\t  if (aRootUrl && !aRootUrl.host && !aRootUrl.path) {\n\t    aRootUrl.host = aPath;\n\t    return urlGenerate(aRootUrl);\n\t  }\n\n\t  var joined = aPath.charAt(0) === '/'\n\t    ? aPath\n\t    : normalize(aRoot.replace(/\\/+$/, '') + '/' + aPath);\n\n\t  if (aRootUrl) {\n\t    aRootUrl.path = joined;\n\t    return urlGenerate(aRootUrl);\n\t  }\n\t  return joined;\n\t}\n\texports.join = join;\n\n\texports.isAbsolute = function (aPath) {\n\t  return aPath.charAt(0) === '/' || urlRegexp.test(aPath);\n\t};\n\n\t/**\n\t * Make a path relative to a URL or another path.\n\t *\n\t * @param aRoot The root path or URL.\n\t * @param aPath The path or URL to be made relative to aRoot.\n\t */\n\tfunction relative(aRoot, aPath) {\n\t  if (aRoot === \"\") {\n\t    aRoot = \".\";\n\t  }\n\n\t  aRoot = aRoot.replace(/\\/$/, '');\n\n\t  // It is possible for the path to be above the root. In this case, simply\n\t  // checking whether the root is a prefix of the path won't work. Instead, we\n\t  // need to remove components from the root one by one, until either we find\n\t  // a prefix that fits, or we run out of components to remove.\n\t  var level = 0;\n\t  while (aPath.indexOf(aRoot + '/') !== 0) {\n\t    var index = aRoot.lastIndexOf(\"/\");\n\t    if (index < 0) {\n\t      return aPath;\n\t    }\n\n\t    // If the only part of the root that is left is the scheme (i.e. http://,\n\t    // file:///, etc.), one or more slashes (/), or simply nothing at all, we\n\t    // have exhausted all components, so the path is not relative to the root.\n\t    aRoot = aRoot.slice(0, index);\n\t    if (aRoot.match(/^([^\\/]+:\\/)?\\/*$/)) {\n\t      return aPath;\n\t    }\n\n\t    ++level;\n\t  }\n\n\t  // Make sure we add a \"../\" for each component we removed from the root.\n\t  return Array(level + 1).join(\"../\") + aPath.substr(aRoot.length + 1);\n\t}\n\texports.relative = relative;\n\n\tvar supportsNullProto = (function () {\n\t  var obj = Object.create(null);\n\t  return !('__proto__' in obj);\n\t}());\n\n\tfunction identity (s) {\n\t  return s;\n\t}\n\n\t/**\n\t * Because behavior goes wacky when you set `__proto__` on objects, we\n\t * have to prefix all the strings in our set with an arbitrary character.\n\t *\n\t * See https://github.com/mozilla/source-map/pull/31 and\n\t * https://github.com/mozilla/source-map/issues/30\n\t *\n\t * @param String aStr\n\t */\n\tfunction toSetString(aStr) {\n\t  if (isProtoString(aStr)) {\n\t    return '$' + aStr;\n\t  }\n\n\t  return aStr;\n\t}\n\texports.toSetString = supportsNullProto ? identity : toSetString;\n\n\tfunction fromSetString(aStr) {\n\t  if (isProtoString(aStr)) {\n\t    return aStr.slice(1);\n\t  }\n\n\t  return aStr;\n\t}\n\texports.fromSetString = supportsNullProto ? identity : fromSetString;\n\n\tfunction isProtoString(s) {\n\t  if (!s) {\n\t    return false;\n\t  }\n\n\t  var length = s.length;\n\n\t  if (length < 9 /* \"__proto__\".length */) {\n\t    return false;\n\t  }\n\n\t  if (s.charCodeAt(length - 1) !== 95  /* '_' */ ||\n\t      s.charCodeAt(length - 2) !== 95  /* '_' */ ||\n\t      s.charCodeAt(length - 3) !== 111 /* 'o' */ ||\n\t      s.charCodeAt(length - 4) !== 116 /* 't' */ ||\n\t      s.charCodeAt(length - 5) !== 111 /* 'o' */ ||\n\t      s.charCodeAt(length - 6) !== 114 /* 'r' */ ||\n\t      s.charCodeAt(length - 7) !== 112 /* 'p' */ ||\n\t      s.charCodeAt(length - 8) !== 95  /* '_' */ ||\n\t      s.charCodeAt(length - 9) !== 95  /* '_' */) {\n\t    return false;\n\t  }\n\n\t  for (var i = length - 10; i >= 0; i--) {\n\t    if (s.charCodeAt(i) !== 36 /* '$' */) {\n\t      return false;\n\t    }\n\t  }\n\n\t  return true;\n\t}\n\n\t/**\n\t * Comparator between two mappings where the original positions are compared.\n\t *\n\t * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n\t * mappings with the same original source/line/column, but different generated\n\t * line and column the same. Useful when searching for a mapping with a\n\t * stubbed out mapping.\n\t */\n\tfunction compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) {\n\t  var cmp = strcmp(mappingA.source, mappingB.source);\n\t  if (cmp !== 0) {\n\t    return cmp;\n\t  }\n\n\t  cmp = mappingA.originalLine - mappingB.originalLine;\n\t  if (cmp !== 0) {\n\t    return cmp;\n\t  }\n\n\t  cmp = mappingA.originalColumn - mappingB.originalColumn;\n\t  if (cmp !== 0 || onlyCompareOriginal) {\n\t    return cmp;\n\t  }\n\n\t  cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n\t  if (cmp !== 0) {\n\t    return cmp;\n\t  }\n\n\t  cmp = mappingA.generatedLine - mappingB.generatedLine;\n\t  if (cmp !== 0) {\n\t    return cmp;\n\t  }\n\n\t  return strcmp(mappingA.name, mappingB.name);\n\t}\n\texports.compareByOriginalPositions = compareByOriginalPositions;\n\n\t/**\n\t * Comparator between two mappings with deflated source and name indices where\n\t * the generated positions are compared.\n\t *\n\t * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n\t * mappings with the same generated line and column, but different\n\t * source/name/original line and column the same. Useful when searching for a\n\t * mapping with a stubbed out mapping.\n\t */\n\tfunction compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) {\n\t  var cmp = mappingA.generatedLine - mappingB.generatedLine;\n\t  if (cmp !== 0) {\n\t    return cmp;\n\t  }\n\n\t  cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n\t  if (cmp !== 0 || onlyCompareGenerated) {\n\t    return cmp;\n\t  }\n\n\t  cmp = strcmp(mappingA.source, mappingB.source);\n\t  if (cmp !== 0) {\n\t    return cmp;\n\t  }\n\n\t  cmp = mappingA.originalLine - mappingB.originalLine;\n\t  if (cmp !== 0) {\n\t    return cmp;\n\t  }\n\n\t  cmp = mappingA.originalColumn - mappingB.originalColumn;\n\t  if (cmp !== 0) {\n\t    return cmp;\n\t  }\n\n\t  return strcmp(mappingA.name, mappingB.name);\n\t}\n\texports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated;\n\n\tfunction strcmp(aStr1, aStr2) {\n\t  if (aStr1 === aStr2) {\n\t    return 0;\n\t  }\n\n\t  if (aStr1 === null) {\n\t    return 1; // aStr2 !== null\n\t  }\n\n\t  if (aStr2 === null) {\n\t    return -1; // aStr1 !== null\n\t  }\n\n\t  if (aStr1 > aStr2) {\n\t    return 1;\n\t  }\n\n\t  return -1;\n\t}\n\n\t/**\n\t * Comparator between two mappings with inflated source and name strings where\n\t * the generated positions are compared.\n\t */\n\tfunction compareByGeneratedPositionsInflated(mappingA, mappingB) {\n\t  var cmp = mappingA.generatedLine - mappingB.generatedLine;\n\t  if (cmp !== 0) {\n\t    return cmp;\n\t  }\n\n\t  cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n\t  if (cmp !== 0) {\n\t    return cmp;\n\t  }\n\n\t  cmp = strcmp(mappingA.source, mappingB.source);\n\t  if (cmp !== 0) {\n\t    return cmp;\n\t  }\n\n\t  cmp = mappingA.originalLine - mappingB.originalLine;\n\t  if (cmp !== 0) {\n\t    return cmp;\n\t  }\n\n\t  cmp = mappingA.originalColumn - mappingB.originalColumn;\n\t  if (cmp !== 0) {\n\t    return cmp;\n\t  }\n\n\t  return strcmp(mappingA.name, mappingB.name);\n\t}\n\texports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated;\n\n\t/**\n\t * Strip any JSON XSSI avoidance prefix from the string (as documented\n\t * in the source maps specification), and then parse the string as\n\t * JSON.\n\t */\n\tfunction parseSourceMapInput(str) {\n\t  return JSON.parse(str.replace(/^\\)]}'[^\\n]*\\n/, ''));\n\t}\n\texports.parseSourceMapInput = parseSourceMapInput;\n\n\t/**\n\t * Compute the URL of a source given the the source root, the source's\n\t * URL, and the source map's URL.\n\t */\n\tfunction computeSourceURL(sourceRoot, sourceURL, sourceMapURL) {\n\t  sourceURL = sourceURL || '';\n\n\t  if (sourceRoot) {\n\t    // This follows what Chrome does.\n\t    if (sourceRoot[sourceRoot.length - 1] !== '/' && sourceURL[0] !== '/') {\n\t      sourceRoot += '/';\n\t    }\n\t    // The spec says:\n\t    //   Line 4: An optional source root, useful for relocating source\n\t    //   files on a server or removing repeated values in the\n\t    //   “sources” entry.  This value is prepended to the individual\n\t    //   entries in the “source” field.\n\t    sourceURL = sourceRoot + sourceURL;\n\t  }\n\n\t  // Historically, SourceMapConsumer did not take the sourceMapURL as\n\t  // a parameter.  This mode is still somewhat supported, which is why\n\t  // this code block is conditional.  However, it's preferable to pass\n\t  // the source map URL to SourceMapConsumer, so that this function\n\t  // can implement the source URL resolution algorithm as outlined in\n\t  // the spec.  This block is basically the equivalent of:\n\t  //    new URL(sourceURL, sourceMapURL).toString()\n\t  // ... except it avoids using URL, which wasn't available in the\n\t  // older releases of node still supported by this library.\n\t  //\n\t  // The spec says:\n\t  //   If the sources are not absolute URLs after prepending of the\n\t  //   “sourceRoot”, the sources are resolved relative to the\n\t  //   SourceMap (like resolving script src in a html document).\n\t  if (sourceMapURL) {\n\t    var parsed = urlParse(sourceMapURL);\n\t    if (!parsed) {\n\t      throw new Error(\"sourceMapURL could not be parsed\");\n\t    }\n\t    if (parsed.path) {\n\t      // Strip the last path component, but keep the \"/\".\n\t      var index = parsed.path.lastIndexOf('/');\n\t      if (index >= 0) {\n\t        parsed.path = parsed.path.substring(0, index + 1);\n\t      }\n\t    }\n\t    sourceURL = join(urlGenerate(parsed), sourceURL);\n\t  }\n\n\t  return normalize(sourceURL);\n\t}\n\texports.computeSourceURL = computeSourceURL;\n} (util$c));\n\nvar arraySet$1 = {};\n\n/* -*- Mode: js; js-indent-level: 2; -*- */\n\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util$b = util$c;\nvar has$1 = Object.prototype.hasOwnProperty;\nvar hasNativeMap$1 = typeof Map !== \"undefined\";\n\n/**\n * A data structure which is a combination of an array and a set. Adding a new\n * member is O(1), testing for membership is O(1), and finding the index of an\n * element is O(1). Removing elements from the set is not supported. Only\n * strings are supported for membership.\n */\nfunction ArraySet$5() {\n  this._array = [];\n  this._set = hasNativeMap$1 ? new Map() : Object.create(null);\n}\n\n/**\n * Static method for creating ArraySet instances from an existing array.\n */\nArraySet$5.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) {\n  var set = new ArraySet$5();\n  for (var i = 0, len = aArray.length; i < len; i++) {\n    set.add(aArray[i], aAllowDuplicates);\n  }\n  return set;\n};\n\n/**\n * Return how many unique items are in this ArraySet. If duplicates have been\n * added, than those do not count towards the size.\n *\n * @returns Number\n */\nArraySet$5.prototype.size = function ArraySet_size() {\n  return hasNativeMap$1 ? this._set.size : Object.getOwnPropertyNames(this._set).length;\n};\n\n/**\n * Add the given string to this set.\n *\n * @param String aStr\n */\nArraySet$5.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) {\n  var sStr = hasNativeMap$1 ? aStr : util$b.toSetString(aStr);\n  var isDuplicate = hasNativeMap$1 ? this.has(aStr) : has$1.call(this._set, sStr);\n  var idx = this._array.length;\n  if (!isDuplicate || aAllowDuplicates) {\n    this._array.push(aStr);\n  }\n  if (!isDuplicate) {\n    if (hasNativeMap$1) {\n      this._set.set(aStr, idx);\n    } else {\n      this._set[sStr] = idx;\n    }\n  }\n};\n\n/**\n * Is the given string a member of this set?\n *\n * @param String aStr\n */\nArraySet$5.prototype.has = function ArraySet_has(aStr) {\n  if (hasNativeMap$1) {\n    return this._set.has(aStr);\n  } else {\n    var sStr = util$b.toSetString(aStr);\n    return has$1.call(this._set, sStr);\n  }\n};\n\n/**\n * What is the index of the given string in the array?\n *\n * @param String aStr\n */\nArraySet$5.prototype.indexOf = function ArraySet_indexOf(aStr) {\n  if (hasNativeMap$1) {\n    var idx = this._set.get(aStr);\n    if (idx >= 0) {\n        return idx;\n    }\n  } else {\n    var sStr = util$b.toSetString(aStr);\n    if (has$1.call(this._set, sStr)) {\n      return this._set[sStr];\n    }\n  }\n\n  throw new Error('\"' + aStr + '\" is not in the set.');\n};\n\n/**\n * What is the element at the given index?\n *\n * @param Number aIdx\n */\nArraySet$5.prototype.at = function ArraySet_at(aIdx) {\n  if (aIdx >= 0 && aIdx < this._array.length) {\n    return this._array[aIdx];\n  }\n  throw new Error('No element indexed by ' + aIdx);\n};\n\n/**\n * Returns the array representation of this set (which has the proper indices\n * indicated by indexOf). Note that this is a copy of the internal array used\n * for storing the members so that no one can mess with internal state.\n */\nArraySet$5.prototype.toArray = function ArraySet_toArray() {\n  return this._array.slice();\n};\n\narraySet$1.ArraySet = ArraySet$5;\n\nvar mappingList$1 = {};\n\n/* -*- Mode: js; js-indent-level: 2; -*- */\n\n/*\n * Copyright 2014 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util$a = util$c;\n\n/**\n * Determine whether mappingB is after mappingA with respect to generated\n * position.\n */\nfunction generatedPositionAfter$1(mappingA, mappingB) {\n  // Optimized for most common case\n  var lineA = mappingA.generatedLine;\n  var lineB = mappingB.generatedLine;\n  var columnA = mappingA.generatedColumn;\n  var columnB = mappingB.generatedColumn;\n  return lineB > lineA || lineB == lineA && columnB >= columnA ||\n         util$a.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0;\n}\n\n/**\n * A data structure to provide a sorted view of accumulated mappings in a\n * performance conscious manner. It trades a neglibable overhead in general\n * case for a large speedup in case of mappings being added in order.\n */\nfunction MappingList$3() {\n  this._array = [];\n  this._sorted = true;\n  // Serves as infimum\n  this._last = {generatedLine: -1, generatedColumn: 0};\n}\n\n/**\n * Iterate through internal items. This method takes the same arguments that\n * `Array.prototype.forEach` takes.\n *\n * NOTE: The order of the mappings is NOT guaranteed.\n */\nMappingList$3.prototype.unsortedForEach =\n  function MappingList_forEach(aCallback, aThisArg) {\n    this._array.forEach(aCallback, aThisArg);\n  };\n\n/**\n * Add the given source mapping.\n *\n * @param Object aMapping\n */\nMappingList$3.prototype.add = function MappingList_add(aMapping) {\n  if (generatedPositionAfter$1(this._last, aMapping)) {\n    this._last = aMapping;\n    this._array.push(aMapping);\n  } else {\n    this._sorted = false;\n    this._array.push(aMapping);\n  }\n};\n\n/**\n * Returns the flat, sorted array of mappings. The mappings are sorted by\n * generated position.\n *\n * WARNING: This method returns internal data without copying, for\n * performance. The return value must NOT be mutated, and should be treated as\n * an immutable borrow. If you want to take ownership, you must make your own\n * copy.\n */\nMappingList$3.prototype.toArray = function MappingList_toArray() {\n  if (!this._sorted) {\n    this._array.sort(util$a.compareByGeneratedPositionsInflated);\n    this._sorted = true;\n  }\n  return this._array;\n};\n\nmappingList$1.MappingList = MappingList$3;\n\n/* -*- Mode: js; js-indent-level: 2; -*- */\n\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar base64VLQ$3 = base64Vlq$1;\nvar util$9 = util$c;\nvar ArraySet$4 = arraySet$1.ArraySet;\nvar MappingList$2 = mappingList$1.MappingList;\n\n/**\n * An instance of the SourceMapGenerator represents a source map which is\n * being built incrementally. You may pass an object with the following\n * properties:\n *\n *   - file: The filename of the generated source.\n *   - sourceRoot: A root for all relative URLs in this source map.\n */\nfunction SourceMapGenerator$8(aArgs) {\n  if (!aArgs) {\n    aArgs = {};\n  }\n  this._file = util$9.getArg(aArgs, 'file', null);\n  this._sourceRoot = util$9.getArg(aArgs, 'sourceRoot', null);\n  this._skipValidation = util$9.getArg(aArgs, 'skipValidation', false);\n  this._sources = new ArraySet$4();\n  this._names = new ArraySet$4();\n  this._mappings = new MappingList$2();\n  this._sourcesContents = null;\n}\n\nSourceMapGenerator$8.prototype._version = 3;\n\n/**\n * Creates a new SourceMapGenerator based on a SourceMapConsumer\n *\n * @param aSourceMapConsumer The SourceMap.\n */\nSourceMapGenerator$8.fromSourceMap =\n  function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) {\n    var sourceRoot = aSourceMapConsumer.sourceRoot;\n    var generator = new SourceMapGenerator$8({\n      file: aSourceMapConsumer.file,\n      sourceRoot: sourceRoot\n    });\n    aSourceMapConsumer.eachMapping(function (mapping) {\n      var newMapping = {\n        generated: {\n          line: mapping.generatedLine,\n          column: mapping.generatedColumn\n        }\n      };\n\n      if (mapping.source != null) {\n        newMapping.source = mapping.source;\n        if (sourceRoot != null) {\n          newMapping.source = util$9.relative(sourceRoot, newMapping.source);\n        }\n\n        newMapping.original = {\n          line: mapping.originalLine,\n          column: mapping.originalColumn\n        };\n\n        if (mapping.name != null) {\n          newMapping.name = mapping.name;\n        }\n      }\n\n      generator.addMapping(newMapping);\n    });\n    aSourceMapConsumer.sources.forEach(function (sourceFile) {\n      var sourceRelative = sourceFile;\n      if (sourceRoot !== null) {\n        sourceRelative = util$9.relative(sourceRoot, sourceFile);\n      }\n\n      if (!generator._sources.has(sourceRelative)) {\n        generator._sources.add(sourceRelative);\n      }\n\n      var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n      if (content != null) {\n        generator.setSourceContent(sourceFile, content);\n      }\n    });\n    return generator;\n  };\n\n/**\n * Add a single mapping from original source line and column to the generated\n * source's line and column for this source map being created. The mapping\n * object should have the following properties:\n *\n *   - generated: An object with the generated line and column positions.\n *   - original: An object with the original line and column positions.\n *   - source: The original source file (relative to the sourceRoot).\n *   - name: An optional original token name for this mapping.\n */\nSourceMapGenerator$8.prototype.addMapping =\n  function SourceMapGenerator_addMapping(aArgs) {\n    var generated = util$9.getArg(aArgs, 'generated');\n    var original = util$9.getArg(aArgs, 'original', null);\n    var source = util$9.getArg(aArgs, 'source', null);\n    var name = util$9.getArg(aArgs, 'name', null);\n\n    if (!this._skipValidation) {\n      this._validateMapping(generated, original, source, name);\n    }\n\n    if (source != null) {\n      source = String(source);\n      if (!this._sources.has(source)) {\n        this._sources.add(source);\n      }\n    }\n\n    if (name != null) {\n      name = String(name);\n      if (!this._names.has(name)) {\n        this._names.add(name);\n      }\n    }\n\n    this._mappings.add({\n      generatedLine: generated.line,\n      generatedColumn: generated.column,\n      originalLine: original != null && original.line,\n      originalColumn: original != null && original.column,\n      source: source,\n      name: name\n    });\n  };\n\n/**\n * Set the source content for a source file.\n */\nSourceMapGenerator$8.prototype.setSourceContent =\n  function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) {\n    var source = aSourceFile;\n    if (this._sourceRoot != null) {\n      source = util$9.relative(this._sourceRoot, source);\n    }\n\n    if (aSourceContent != null) {\n      // Add the source content to the _sourcesContents map.\n      // Create a new _sourcesContents map if the property is null.\n      if (!this._sourcesContents) {\n        this._sourcesContents = Object.create(null);\n      }\n      this._sourcesContents[util$9.toSetString(source)] = aSourceContent;\n    } else if (this._sourcesContents) {\n      // Remove the source file from the _sourcesContents map.\n      // If the _sourcesContents map is empty, set the property to null.\n      delete this._sourcesContents[util$9.toSetString(source)];\n      if (Object.keys(this._sourcesContents).length === 0) {\n        this._sourcesContents = null;\n      }\n    }\n  };\n\n/**\n * Applies the mappings of a sub-source-map for a specific source file to the\n * source map being generated. Each mapping to the supplied source file is\n * rewritten using the supplied source map. Note: The resolution for the\n * resulting mappings is the minimium of this map and the supplied map.\n *\n * @param aSourceMapConsumer The source map to be applied.\n * @param aSourceFile Optional. The filename of the source file.\n *        If omitted, SourceMapConsumer's file property will be used.\n * @param aSourceMapPath Optional. The dirname of the path to the source map\n *        to be applied. If relative, it is relative to the SourceMapConsumer.\n *        This parameter is needed when the two source maps aren't in the same\n *        directory, and the source map to be applied contains relative source\n *        paths. If so, those relative source paths need to be rewritten\n *        relative to the SourceMapGenerator.\n */\nSourceMapGenerator$8.prototype.applySourceMap =\n  function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) {\n    var sourceFile = aSourceFile;\n    // If aSourceFile is omitted, we will use the file property of the SourceMap\n    if (aSourceFile == null) {\n      if (aSourceMapConsumer.file == null) {\n        throw new Error(\n          'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' +\n          'or the source map\\'s \"file\" property. Both were omitted.'\n        );\n      }\n      sourceFile = aSourceMapConsumer.file;\n    }\n    var sourceRoot = this._sourceRoot;\n    // Make \"sourceFile\" relative if an absolute Url is passed.\n    if (sourceRoot != null) {\n      sourceFile = util$9.relative(sourceRoot, sourceFile);\n    }\n    // Applying the SourceMap can add and remove items from the sources and\n    // the names array.\n    var newSources = new ArraySet$4();\n    var newNames = new ArraySet$4();\n\n    // Find mappings for the \"sourceFile\"\n    this._mappings.unsortedForEach(function (mapping) {\n      if (mapping.source === sourceFile && mapping.originalLine != null) {\n        // Check if it can be mapped by the source map, then update the mapping.\n        var original = aSourceMapConsumer.originalPositionFor({\n          line: mapping.originalLine,\n          column: mapping.originalColumn\n        });\n        if (original.source != null) {\n          // Copy mapping\n          mapping.source = original.source;\n          if (aSourceMapPath != null) {\n            mapping.source = util$9.join(aSourceMapPath, mapping.source);\n          }\n          if (sourceRoot != null) {\n            mapping.source = util$9.relative(sourceRoot, mapping.source);\n          }\n          mapping.originalLine = original.line;\n          mapping.originalColumn = original.column;\n          if (original.name != null) {\n            mapping.name = original.name;\n          }\n        }\n      }\n\n      var source = mapping.source;\n      if (source != null && !newSources.has(source)) {\n        newSources.add(source);\n      }\n\n      var name = mapping.name;\n      if (name != null && !newNames.has(name)) {\n        newNames.add(name);\n      }\n\n    }, this);\n    this._sources = newSources;\n    this._names = newNames;\n\n    // Copy sourcesContents of applied map.\n    aSourceMapConsumer.sources.forEach(function (sourceFile) {\n      var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n      if (content != null) {\n        if (aSourceMapPath != null) {\n          sourceFile = util$9.join(aSourceMapPath, sourceFile);\n        }\n        if (sourceRoot != null) {\n          sourceFile = util$9.relative(sourceRoot, sourceFile);\n        }\n        this.setSourceContent(sourceFile, content);\n      }\n    }, this);\n  };\n\n/**\n * A mapping can have one of the three levels of data:\n *\n *   1. Just the generated position.\n *   2. The Generated position, original position, and original source.\n *   3. Generated and original position, original source, as well as a name\n *      token.\n *\n * To maintain consistency, we validate that any new mapping being added falls\n * in to one of these categories.\n */\nSourceMapGenerator$8.prototype._validateMapping =\n  function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource,\n                                              aName) {\n    // When aOriginal is truthy but has empty values for .line and .column,\n    // it is most likely a programmer error. In this case we throw a very\n    // specific error message to try to guide them the right way.\n    // For example: https://github.com/Polymer/polymer-bundler/pull/519\n    if (aOriginal && typeof aOriginal.line !== 'number' && typeof aOriginal.column !== 'number') {\n        throw new Error(\n            'original.line and original.column are not numbers -- you probably meant to omit ' +\n            'the original mapping entirely and only map the generated position. If so, pass ' +\n            'null for the original mapping instead of an object with empty or null values.'\n        );\n    }\n\n    if (aGenerated && 'line' in aGenerated && 'column' in aGenerated\n        && aGenerated.line > 0 && aGenerated.column >= 0\n        && !aOriginal && !aSource && !aName) {\n      // Case 1.\n      return;\n    }\n    else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated\n             && aOriginal && 'line' in aOriginal && 'column' in aOriginal\n             && aGenerated.line > 0 && aGenerated.column >= 0\n             && aOriginal.line > 0 && aOriginal.column >= 0\n             && aSource) {\n      // Cases 2 and 3.\n      return;\n    }\n    else {\n      throw new Error('Invalid mapping: ' + JSON.stringify({\n        generated: aGenerated,\n        source: aSource,\n        original: aOriginal,\n        name: aName\n      }));\n    }\n  };\n\n/**\n * Serialize the accumulated mappings in to the stream of base 64 VLQs\n * specified by the source map format.\n */\nSourceMapGenerator$8.prototype._serializeMappings =\n  function SourceMapGenerator_serializeMappings() {\n    var previousGeneratedColumn = 0;\n    var previousGeneratedLine = 1;\n    var previousOriginalColumn = 0;\n    var previousOriginalLine = 0;\n    var previousName = 0;\n    var previousSource = 0;\n    var result = '';\n    var next;\n    var mapping;\n    var nameIdx;\n    var sourceIdx;\n\n    var mappings = this._mappings.toArray();\n    for (var i = 0, len = mappings.length; i < len; i++) {\n      mapping = mappings[i];\n      next = '';\n\n      if (mapping.generatedLine !== previousGeneratedLine) {\n        previousGeneratedColumn = 0;\n        while (mapping.generatedLine !== previousGeneratedLine) {\n          next += ';';\n          previousGeneratedLine++;\n        }\n      }\n      else {\n        if (i > 0) {\n          if (!util$9.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) {\n            continue;\n          }\n          next += ',';\n        }\n      }\n\n      next += base64VLQ$3.encode(mapping.generatedColumn\n                                 - previousGeneratedColumn);\n      previousGeneratedColumn = mapping.generatedColumn;\n\n      if (mapping.source != null) {\n        sourceIdx = this._sources.indexOf(mapping.source);\n        next += base64VLQ$3.encode(sourceIdx - previousSource);\n        previousSource = sourceIdx;\n\n        // lines are stored 0-based in SourceMap spec version 3\n        next += base64VLQ$3.encode(mapping.originalLine - 1\n                                   - previousOriginalLine);\n        previousOriginalLine = mapping.originalLine - 1;\n\n        next += base64VLQ$3.encode(mapping.originalColumn\n                                   - previousOriginalColumn);\n        previousOriginalColumn = mapping.originalColumn;\n\n        if (mapping.name != null) {\n          nameIdx = this._names.indexOf(mapping.name);\n          next += base64VLQ$3.encode(nameIdx - previousName);\n          previousName = nameIdx;\n        }\n      }\n\n      result += next;\n    }\n\n    return result;\n  };\n\nSourceMapGenerator$8.prototype._generateSourcesContent =\n  function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) {\n    return aSources.map(function (source) {\n      if (!this._sourcesContents) {\n        return null;\n      }\n      if (aSourceRoot != null) {\n        source = util$9.relative(aSourceRoot, source);\n      }\n      var key = util$9.toSetString(source);\n      return Object.prototype.hasOwnProperty.call(this._sourcesContents, key)\n        ? this._sourcesContents[key]\n        : null;\n    }, this);\n  };\n\n/**\n * Externalize the source map.\n */\nSourceMapGenerator$8.prototype.toJSON =\n  function SourceMapGenerator_toJSON() {\n    var map = {\n      version: this._version,\n      sources: this._sources.toArray(),\n      names: this._names.toArray(),\n      mappings: this._serializeMappings()\n    };\n    if (this._file != null) {\n      map.file = this._file;\n    }\n    if (this._sourceRoot != null) {\n      map.sourceRoot = this._sourceRoot;\n    }\n    if (this._sourcesContents) {\n      map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot);\n    }\n\n    return map;\n  };\n\n/**\n * Render the source map being generated to a string.\n */\nSourceMapGenerator$8.prototype.toString =\n  function SourceMapGenerator_toString() {\n    return JSON.stringify(this.toJSON());\n  };\n\nsourceMapGenerator$1.SourceMapGenerator = SourceMapGenerator$8;\n\nvar sourceMapConsumer$1 = {};\n\nvar binarySearch$3 = {};\n\n/* -*- Mode: js; js-indent-level: 2; -*- */\n\n(function (exports) {\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\n\texports.GREATEST_LOWER_BOUND = 1;\n\texports.LEAST_UPPER_BOUND = 2;\n\n\t/**\n\t * Recursive implementation of binary search.\n\t *\n\t * @param aLow Indices here and lower do not contain the needle.\n\t * @param aHigh Indices here and higher do not contain the needle.\n\t * @param aNeedle The element being searched for.\n\t * @param aHaystack The non-empty array being searched.\n\t * @param aCompare Function which takes two elements and returns -1, 0, or 1.\n\t * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n\t *     'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n\t *     closest element that is smaller than or greater than the one we are\n\t *     searching for, respectively, if the exact element cannot be found.\n\t */\n\tfunction recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) {\n\t  // This function terminates when one of the following is true:\n\t  //\n\t  //   1. We find the exact element we are looking for.\n\t  //\n\t  //   2. We did not find the exact element, but we can return the index of\n\t  //      the next-closest element.\n\t  //\n\t  //   3. We did not find the exact element, and there is no next-closest\n\t  //      element than the one we are searching for, so we return -1.\n\t  var mid = Math.floor((aHigh - aLow) / 2) + aLow;\n\t  var cmp = aCompare(aNeedle, aHaystack[mid], true);\n\t  if (cmp === 0) {\n\t    // Found the element we are looking for.\n\t    return mid;\n\t  }\n\t  else if (cmp > 0) {\n\t    // Our needle is greater than aHaystack[mid].\n\t    if (aHigh - mid > 1) {\n\t      // The element is in the upper half.\n\t      return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias);\n\t    }\n\n\t    // The exact needle element was not found in this haystack. Determine if\n\t    // we are in termination case (3) or (2) and return the appropriate thing.\n\t    if (aBias == exports.LEAST_UPPER_BOUND) {\n\t      return aHigh < aHaystack.length ? aHigh : -1;\n\t    } else {\n\t      return mid;\n\t    }\n\t  }\n\t  else {\n\t    // Our needle is less than aHaystack[mid].\n\t    if (mid - aLow > 1) {\n\t      // The element is in the lower half.\n\t      return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias);\n\t    }\n\n\t    // we are in termination case (3) or (2) and return the appropriate thing.\n\t    if (aBias == exports.LEAST_UPPER_BOUND) {\n\t      return mid;\n\t    } else {\n\t      return aLow < 0 ? -1 : aLow;\n\t    }\n\t  }\n\t}\n\n\t/**\n\t * This is an implementation of binary search which will always try and return\n\t * the index of the closest element if there is no exact hit. This is because\n\t * mappings between original and generated line/col pairs are single points,\n\t * and there is an implicit region between each of them, so a miss just means\n\t * that you aren't on the very start of a region.\n\t *\n\t * @param aNeedle The element you are looking for.\n\t * @param aHaystack The array that is being searched.\n\t * @param aCompare A function which takes the needle and an element in the\n\t *     array and returns -1, 0, or 1 depending on whether the needle is less\n\t *     than, equal to, or greater than the element, respectively.\n\t * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n\t *     'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n\t *     closest element that is smaller than or greater than the one we are\n\t *     searching for, respectively, if the exact element cannot be found.\n\t *     Defaults to 'binarySearch.GREATEST_LOWER_BOUND'.\n\t */\n\texports.search = function search(aNeedle, aHaystack, aCompare, aBias) {\n\t  if (aHaystack.length === 0) {\n\t    return -1;\n\t  }\n\n\t  var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack,\n\t                              aCompare, aBias || exports.GREATEST_LOWER_BOUND);\n\t  if (index < 0) {\n\t    return -1;\n\t  }\n\n\t  // We have found either the exact element, or the next-closest element than\n\t  // the one we are searching for. However, there may be more than one such\n\t  // element. Make sure we always return the smallest of these.\n\t  while (index - 1 >= 0) {\n\t    if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) {\n\t      break;\n\t    }\n\t    --index;\n\t  }\n\n\t  return index;\n\t};\n} (binarySearch$3));\n\nvar quickSort$3 = {};\n\n/* -*- Mode: js; js-indent-level: 2; -*- */\n\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\n// It turns out that some (most?) JavaScript engines don't self-host\n// `Array.prototype.sort`. This makes sense because C++ will likely remain\n// faster than JS when doing raw CPU-intensive sorting. However, when using a\n// custom comparator function, calling back and forth between the VM's C++ and\n// JIT'd JS is rather slow *and* loses JIT type information, resulting in\n// worse generated code for the comparator function than would be optimal. In\n// fact, when sorting with a comparator, these costs outweigh the benefits of\n// sorting in C++. By using our own JS-implemented Quick Sort (below), we get\n// a ~3500ms mean speed-up in `bench/bench.html`.\n\n/**\n * Swap the elements indexed by `x` and `y` in the array `ary`.\n *\n * @param {Array} ary\n *        The array.\n * @param {Number} x\n *        The index of the first item.\n * @param {Number} y\n *        The index of the second item.\n */\nfunction swap$1(ary, x, y) {\n  var temp = ary[x];\n  ary[x] = ary[y];\n  ary[y] = temp;\n}\n\n/**\n * Returns a random integer within the range `low .. high` inclusive.\n *\n * @param {Number} low\n *        The lower bound on the range.\n * @param {Number} high\n *        The upper bound on the range.\n */\nfunction randomIntInRange(low, high) {\n  return Math.round(low + (Math.random() * (high - low)));\n}\n\n/**\n * The Quick Sort algorithm.\n *\n * @param {Array} ary\n *        An array to sort.\n * @param {function} comparator\n *        Function to use to compare two items.\n * @param {Number} p\n *        Start index of the array\n * @param {Number} r\n *        End index of the array\n */\nfunction doQuickSort(ary, comparator, p, r) {\n  // If our lower bound is less than our upper bound, we (1) partition the\n  // array into two pieces and (2) recurse on each half. If it is not, this is\n  // the empty array and our base case.\n\n  if (p < r) {\n    // (1) Partitioning.\n    //\n    // The partitioning chooses a pivot between `p` and `r` and moves all\n    // elements that are less than or equal to the pivot to the before it, and\n    // all the elements that are greater than it after it. The effect is that\n    // once partition is done, the pivot is in the exact place it will be when\n    // the array is put in sorted order, and it will not need to be moved\n    // again. This runs in O(n) time.\n\n    // Always choose a random pivot so that an input array which is reverse\n    // sorted does not cause O(n^2) running time.\n    var pivotIndex = randomIntInRange(p, r);\n    var i = p - 1;\n\n    swap$1(ary, pivotIndex, r);\n    var pivot = ary[r];\n\n    // Immediately after `j` is incremented in this loop, the following hold\n    // true:\n    //\n    //   * Every element in `ary[p .. i]` is less than or equal to the pivot.\n    //\n    //   * Every element in `ary[i+1 .. j-1]` is greater than the pivot.\n    for (var j = p; j < r; j++) {\n      if (comparator(ary[j], pivot) <= 0) {\n        i += 1;\n        swap$1(ary, i, j);\n      }\n    }\n\n    swap$1(ary, i + 1, j);\n    var q = i + 1;\n\n    // (2) Recurse on each half.\n\n    doQuickSort(ary, comparator, p, q - 1);\n    doQuickSort(ary, comparator, q + 1, r);\n  }\n}\n\n/**\n * Sort the given array in-place with the given comparator function.\n *\n * @param {Array} ary\n *        An array to sort.\n * @param {function} comparator\n *        Function to use to compare two items.\n */\nquickSort$3.quickSort = function (ary, comparator) {\n  doQuickSort(ary, comparator, 0, ary.length - 1);\n};\n\n/* -*- Mode: js; js-indent-level: 2; -*- */\n\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util$8 = util$c;\nvar binarySearch$2 = binarySearch$3;\nvar ArraySet$3 = arraySet$1.ArraySet;\nvar base64VLQ$2 = base64Vlq$1;\nvar quickSort$2 = quickSort$3.quickSort;\n\nfunction SourceMapConsumer$6(aSourceMap, aSourceMapURL) {\n  var sourceMap = aSourceMap;\n  if (typeof aSourceMap === 'string') {\n    sourceMap = util$8.parseSourceMapInput(aSourceMap);\n  }\n\n  return sourceMap.sections != null\n    ? new IndexedSourceMapConsumer$1(sourceMap, aSourceMapURL)\n    : new BasicSourceMapConsumer$1(sourceMap, aSourceMapURL);\n}\n\nSourceMapConsumer$6.fromSourceMap = function(aSourceMap, aSourceMapURL) {\n  return BasicSourceMapConsumer$1.fromSourceMap(aSourceMap, aSourceMapURL);\n};\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nSourceMapConsumer$6.prototype._version = 3;\n\n// `__generatedMappings` and `__originalMappings` are arrays that hold the\n// parsed mapping coordinates from the source map's \"mappings\" attribute. They\n// are lazily instantiated, accessed via the `_generatedMappings` and\n// `_originalMappings` getters respectively, and we only parse the mappings\n// and create these arrays once queried for a source location. We jump through\n// these hoops because there can be many thousands of mappings, and parsing\n// them is expensive, so we only want to do it if we must.\n//\n// Each object in the arrays is of the form:\n//\n//     {\n//       generatedLine: The line number in the generated code,\n//       generatedColumn: The column number in the generated code,\n//       source: The path to the original source file that generated this\n//               chunk of code,\n//       originalLine: The line number in the original source that\n//                     corresponds to this chunk of generated code,\n//       originalColumn: The column number in the original source that\n//                       corresponds to this chunk of generated code,\n//       name: The name of the original symbol which generated this chunk of\n//             code.\n//     }\n//\n// All properties except for `generatedLine` and `generatedColumn` can be\n// `null`.\n//\n// `_generatedMappings` is ordered by the generated positions.\n//\n// `_originalMappings` is ordered by the original positions.\n\nSourceMapConsumer$6.prototype.__generatedMappings = null;\nObject.defineProperty(SourceMapConsumer$6.prototype, '_generatedMappings', {\n  configurable: true,\n  enumerable: true,\n  get: function () {\n    if (!this.__generatedMappings) {\n      this._parseMappings(this._mappings, this.sourceRoot);\n    }\n\n    return this.__generatedMappings;\n  }\n});\n\nSourceMapConsumer$6.prototype.__originalMappings = null;\nObject.defineProperty(SourceMapConsumer$6.prototype, '_originalMappings', {\n  configurable: true,\n  enumerable: true,\n  get: function () {\n    if (!this.__originalMappings) {\n      this._parseMappings(this._mappings, this.sourceRoot);\n    }\n\n    return this.__originalMappings;\n  }\n});\n\nSourceMapConsumer$6.prototype._charIsMappingSeparator =\n  function SourceMapConsumer_charIsMappingSeparator(aStr, index) {\n    var c = aStr.charAt(index);\n    return c === \";\" || c === \",\";\n  };\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nSourceMapConsumer$6.prototype._parseMappings =\n  function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n    throw new Error(\"Subclasses must implement _parseMappings\");\n  };\n\nSourceMapConsumer$6.GENERATED_ORDER = 1;\nSourceMapConsumer$6.ORIGINAL_ORDER = 2;\n\nSourceMapConsumer$6.GREATEST_LOWER_BOUND = 1;\nSourceMapConsumer$6.LEAST_UPPER_BOUND = 2;\n\n/**\n * Iterate over each mapping between an original source/line/column and a\n * generated line/column in this source map.\n *\n * @param Function aCallback\n *        The function that is called with each mapping.\n * @param Object aContext\n *        Optional. If specified, this object will be the value of `this` every\n *        time that `aCallback` is called.\n * @param aOrder\n *        Either `SourceMapConsumer.GENERATED_ORDER` or\n *        `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to\n *        iterate over the mappings sorted by the generated file's line/column\n *        order or the original's source/line/column order, respectively. Defaults to\n *        `SourceMapConsumer.GENERATED_ORDER`.\n */\nSourceMapConsumer$6.prototype.eachMapping =\n  function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) {\n    var context = aContext || null;\n    var order = aOrder || SourceMapConsumer$6.GENERATED_ORDER;\n\n    var mappings;\n    switch (order) {\n    case SourceMapConsumer$6.GENERATED_ORDER:\n      mappings = this._generatedMappings;\n      break;\n    case SourceMapConsumer$6.ORIGINAL_ORDER:\n      mappings = this._originalMappings;\n      break;\n    default:\n      throw new Error(\"Unknown order of iteration.\");\n    }\n\n    var sourceRoot = this.sourceRoot;\n    mappings.map(function (mapping) {\n      var source = mapping.source === null ? null : this._sources.at(mapping.source);\n      source = util$8.computeSourceURL(sourceRoot, source, this._sourceMapURL);\n      return {\n        source: source,\n        generatedLine: mapping.generatedLine,\n        generatedColumn: mapping.generatedColumn,\n        originalLine: mapping.originalLine,\n        originalColumn: mapping.originalColumn,\n        name: mapping.name === null ? null : this._names.at(mapping.name)\n      };\n    }, this).forEach(aCallback, context);\n  };\n\n/**\n * Returns all generated line and column information for the original source,\n * line, and column provided. If no column is provided, returns all mappings\n * corresponding to a either the line we are searching for or the next\n * closest line that has any mappings. Otherwise, returns all mappings\n * corresponding to the given line and either the column we are searching for\n * or the next closest column that has any offsets.\n *\n * The only argument is an object with the following properties:\n *\n *   - source: The filename of the original source.\n *   - line: The line number in the original source.  The line number is 1-based.\n *   - column: Optional. the column number in the original source.\n *    The column number is 0-based.\n *\n * and an array of objects is returned, each with the following properties:\n *\n *   - line: The line number in the generated source, or null.  The\n *    line number is 1-based.\n *   - column: The column number in the generated source, or null.\n *    The column number is 0-based.\n */\nSourceMapConsumer$6.prototype.allGeneratedPositionsFor =\n  function SourceMapConsumer_allGeneratedPositionsFor(aArgs) {\n    var line = util$8.getArg(aArgs, 'line');\n\n    // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping\n    // returns the index of the closest mapping less than the needle. By\n    // setting needle.originalColumn to 0, we thus find the last mapping for\n    // the given line, provided such a mapping exists.\n    var needle = {\n      source: util$8.getArg(aArgs, 'source'),\n      originalLine: line,\n      originalColumn: util$8.getArg(aArgs, 'column', 0)\n    };\n\n    needle.source = this._findSourceIndex(needle.source);\n    if (needle.source < 0) {\n      return [];\n    }\n\n    var mappings = [];\n\n    var index = this._findMapping(needle,\n                                  this._originalMappings,\n                                  \"originalLine\",\n                                  \"originalColumn\",\n                                  util$8.compareByOriginalPositions,\n                                  binarySearch$2.LEAST_UPPER_BOUND);\n    if (index >= 0) {\n      var mapping = this._originalMappings[index];\n\n      if (aArgs.column === undefined) {\n        var originalLine = mapping.originalLine;\n\n        // Iterate until either we run out of mappings, or we run into\n        // a mapping for a different line than the one we found. Since\n        // mappings are sorted, this is guaranteed to find all mappings for\n        // the line we found.\n        while (mapping && mapping.originalLine === originalLine) {\n          mappings.push({\n            line: util$8.getArg(mapping, 'generatedLine', null),\n            column: util$8.getArg(mapping, 'generatedColumn', null),\n            lastColumn: util$8.getArg(mapping, 'lastGeneratedColumn', null)\n          });\n\n          mapping = this._originalMappings[++index];\n        }\n      } else {\n        var originalColumn = mapping.originalColumn;\n\n        // Iterate until either we run out of mappings, or we run into\n        // a mapping for a different line than the one we were searching for.\n        // Since mappings are sorted, this is guaranteed to find all mappings for\n        // the line we are searching for.\n        while (mapping &&\n               mapping.originalLine === line &&\n               mapping.originalColumn == originalColumn) {\n          mappings.push({\n            line: util$8.getArg(mapping, 'generatedLine', null),\n            column: util$8.getArg(mapping, 'generatedColumn', null),\n            lastColumn: util$8.getArg(mapping, 'lastGeneratedColumn', null)\n          });\n\n          mapping = this._originalMappings[++index];\n        }\n      }\n    }\n\n    return mappings;\n  };\n\nsourceMapConsumer$1.SourceMapConsumer = SourceMapConsumer$6;\n\n/**\n * A BasicSourceMapConsumer instance represents a parsed source map which we can\n * query for information about the original file positions by giving it a file\n * position in the generated source.\n *\n * The first parameter is the raw source map (either as a JSON string, or\n * already parsed to an object). According to the spec, source maps have the\n * following attributes:\n *\n *   - version: Which version of the source map spec this map is following.\n *   - sources: An array of URLs to the original source files.\n *   - names: An array of identifiers which can be referrenced by individual mappings.\n *   - sourceRoot: Optional. The URL root from which all sources are relative.\n *   - sourcesContent: Optional. An array of contents of the original source files.\n *   - mappings: A string of base64 VLQs which contain the actual mappings.\n *   - file: Optional. The generated file this source map is associated with.\n *\n * Here is an example source map, taken from the source map spec[0]:\n *\n *     {\n *       version : 3,\n *       file: \"out.js\",\n *       sourceRoot : \"\",\n *       sources: [\"foo.js\", \"bar.js\"],\n *       names: [\"src\", \"maps\", \"are\", \"fun\"],\n *       mappings: \"AA,AB;;ABCDE;\"\n *     }\n *\n * The second parameter, if given, is a string whose value is the URL\n * at which the source map was found.  This URL is used to compute the\n * sources array.\n *\n * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1#\n */\nfunction BasicSourceMapConsumer$1(aSourceMap, aSourceMapURL) {\n  var sourceMap = aSourceMap;\n  if (typeof aSourceMap === 'string') {\n    sourceMap = util$8.parseSourceMapInput(aSourceMap);\n  }\n\n  var version = util$8.getArg(sourceMap, 'version');\n  var sources = util$8.getArg(sourceMap, 'sources');\n  // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which\n  // requires the array) to play nice here.\n  var names = util$8.getArg(sourceMap, 'names', []);\n  var sourceRoot = util$8.getArg(sourceMap, 'sourceRoot', null);\n  var sourcesContent = util$8.getArg(sourceMap, 'sourcesContent', null);\n  var mappings = util$8.getArg(sourceMap, 'mappings');\n  var file = util$8.getArg(sourceMap, 'file', null);\n\n  // Once again, Sass deviates from the spec and supplies the version as a\n  // string rather than a number, so we use loose equality checking here.\n  if (version != this._version) {\n    throw new Error('Unsupported version: ' + version);\n  }\n\n  if (sourceRoot) {\n    sourceRoot = util$8.normalize(sourceRoot);\n  }\n\n  sources = sources\n    .map(String)\n    // Some source maps produce relative source paths like \"./foo.js\" instead of\n    // \"foo.js\".  Normalize these first so that future comparisons will succeed.\n    // See bugzil.la/1090768.\n    .map(util$8.normalize)\n    // Always ensure that absolute sources are internally stored relative to\n    // the source root, if the source root is absolute. Not doing this would\n    // be particularly problematic when the source root is a prefix of the\n    // source (valid, but why??). See github issue #199 and bugzil.la/1188982.\n    .map(function (source) {\n      return sourceRoot && util$8.isAbsolute(sourceRoot) && util$8.isAbsolute(source)\n        ? util$8.relative(sourceRoot, source)\n        : source;\n    });\n\n  // Pass `true` below to allow duplicate names and sources. While source maps\n  // are intended to be compressed and deduplicated, the TypeScript compiler\n  // sometimes generates source maps with duplicates in them. See Github issue\n  // #72 and bugzil.la/889492.\n  this._names = ArraySet$3.fromArray(names.map(String), true);\n  this._sources = ArraySet$3.fromArray(sources, true);\n\n  this._absoluteSources = this._sources.toArray().map(function (s) {\n    return util$8.computeSourceURL(sourceRoot, s, aSourceMapURL);\n  });\n\n  this.sourceRoot = sourceRoot;\n  this.sourcesContent = sourcesContent;\n  this._mappings = mappings;\n  this._sourceMapURL = aSourceMapURL;\n  this.file = file;\n}\n\nBasicSourceMapConsumer$1.prototype = Object.create(SourceMapConsumer$6.prototype);\nBasicSourceMapConsumer$1.prototype.consumer = SourceMapConsumer$6;\n\n/**\n * Utility function to find the index of a source.  Returns -1 if not\n * found.\n */\nBasicSourceMapConsumer$1.prototype._findSourceIndex = function(aSource) {\n  var relativeSource = aSource;\n  if (this.sourceRoot != null) {\n    relativeSource = util$8.relative(this.sourceRoot, relativeSource);\n  }\n\n  if (this._sources.has(relativeSource)) {\n    return this._sources.indexOf(relativeSource);\n  }\n\n  // Maybe aSource is an absolute URL as returned by |sources|.  In\n  // this case we can't simply undo the transform.\n  var i;\n  for (i = 0; i < this._absoluteSources.length; ++i) {\n    if (this._absoluteSources[i] == aSource) {\n      return i;\n    }\n  }\n\n  return -1;\n};\n\n/**\n * Create a BasicSourceMapConsumer from a SourceMapGenerator.\n *\n * @param SourceMapGenerator aSourceMap\n *        The source map that will be consumed.\n * @param String aSourceMapURL\n *        The URL at which the source map can be found (optional)\n * @returns BasicSourceMapConsumer\n */\nBasicSourceMapConsumer$1.fromSourceMap =\n  function SourceMapConsumer_fromSourceMap(aSourceMap, aSourceMapURL) {\n    var smc = Object.create(BasicSourceMapConsumer$1.prototype);\n\n    var names = smc._names = ArraySet$3.fromArray(aSourceMap._names.toArray(), true);\n    var sources = smc._sources = ArraySet$3.fromArray(aSourceMap._sources.toArray(), true);\n    smc.sourceRoot = aSourceMap._sourceRoot;\n    smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(),\n                                                            smc.sourceRoot);\n    smc.file = aSourceMap._file;\n    smc._sourceMapURL = aSourceMapURL;\n    smc._absoluteSources = smc._sources.toArray().map(function (s) {\n      return util$8.computeSourceURL(smc.sourceRoot, s, aSourceMapURL);\n    });\n\n    // Because we are modifying the entries (by converting string sources and\n    // names to indices into the sources and names ArraySets), we have to make\n    // a copy of the entry or else bad things happen. Shared mutable state\n    // strikes again! See github issue #191.\n\n    var generatedMappings = aSourceMap._mappings.toArray().slice();\n    var destGeneratedMappings = smc.__generatedMappings = [];\n    var destOriginalMappings = smc.__originalMappings = [];\n\n    for (var i = 0, length = generatedMappings.length; i < length; i++) {\n      var srcMapping = generatedMappings[i];\n      var destMapping = new Mapping$1;\n      destMapping.generatedLine = srcMapping.generatedLine;\n      destMapping.generatedColumn = srcMapping.generatedColumn;\n\n      if (srcMapping.source) {\n        destMapping.source = sources.indexOf(srcMapping.source);\n        destMapping.originalLine = srcMapping.originalLine;\n        destMapping.originalColumn = srcMapping.originalColumn;\n\n        if (srcMapping.name) {\n          destMapping.name = names.indexOf(srcMapping.name);\n        }\n\n        destOriginalMappings.push(destMapping);\n      }\n\n      destGeneratedMappings.push(destMapping);\n    }\n\n    quickSort$2(smc.__originalMappings, util$8.compareByOriginalPositions);\n\n    return smc;\n  };\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nBasicSourceMapConsumer$1.prototype._version = 3;\n\n/**\n * The list of original sources.\n */\nObject.defineProperty(BasicSourceMapConsumer$1.prototype, 'sources', {\n  get: function () {\n    return this._absoluteSources.slice();\n  }\n});\n\n/**\n * Provide the JIT with a nice shape / hidden class.\n */\nfunction Mapping$1() {\n  this.generatedLine = 0;\n  this.generatedColumn = 0;\n  this.source = null;\n  this.originalLine = null;\n  this.originalColumn = null;\n  this.name = null;\n}\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nBasicSourceMapConsumer$1.prototype._parseMappings =\n  function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n    var generatedLine = 1;\n    var previousGeneratedColumn = 0;\n    var previousOriginalLine = 0;\n    var previousOriginalColumn = 0;\n    var previousSource = 0;\n    var previousName = 0;\n    var length = aStr.length;\n    var index = 0;\n    var cachedSegments = {};\n    var temp = {};\n    var originalMappings = [];\n    var generatedMappings = [];\n    var mapping, str, segment, end, value;\n\n    while (index < length) {\n      if (aStr.charAt(index) === ';') {\n        generatedLine++;\n        index++;\n        previousGeneratedColumn = 0;\n      }\n      else if (aStr.charAt(index) === ',') {\n        index++;\n      }\n      else {\n        mapping = new Mapping$1();\n        mapping.generatedLine = generatedLine;\n\n        // Because each offset is encoded relative to the previous one,\n        // many segments often have the same encoding. We can exploit this\n        // fact by caching the parsed variable length fields of each segment,\n        // allowing us to avoid a second parse if we encounter the same\n        // segment again.\n        for (end = index; end < length; end++) {\n          if (this._charIsMappingSeparator(aStr, end)) {\n            break;\n          }\n        }\n        str = aStr.slice(index, end);\n\n        segment = cachedSegments[str];\n        if (segment) {\n          index += str.length;\n        } else {\n          segment = [];\n          while (index < end) {\n            base64VLQ$2.decode(aStr, index, temp);\n            value = temp.value;\n            index = temp.rest;\n            segment.push(value);\n          }\n\n          if (segment.length === 2) {\n            throw new Error('Found a source, but no line and column');\n          }\n\n          if (segment.length === 3) {\n            throw new Error('Found a source and line, but no column');\n          }\n\n          cachedSegments[str] = segment;\n        }\n\n        // Generated column.\n        mapping.generatedColumn = previousGeneratedColumn + segment[0];\n        previousGeneratedColumn = mapping.generatedColumn;\n\n        if (segment.length > 1) {\n          // Original source.\n          mapping.source = previousSource + segment[1];\n          previousSource += segment[1];\n\n          // Original line.\n          mapping.originalLine = previousOriginalLine + segment[2];\n          previousOriginalLine = mapping.originalLine;\n          // Lines are stored 0-based\n          mapping.originalLine += 1;\n\n          // Original column.\n          mapping.originalColumn = previousOriginalColumn + segment[3];\n          previousOriginalColumn = mapping.originalColumn;\n\n          if (segment.length > 4) {\n            // Original name.\n            mapping.name = previousName + segment[4];\n            previousName += segment[4];\n          }\n        }\n\n        generatedMappings.push(mapping);\n        if (typeof mapping.originalLine === 'number') {\n          originalMappings.push(mapping);\n        }\n      }\n    }\n\n    quickSort$2(generatedMappings, util$8.compareByGeneratedPositionsDeflated);\n    this.__generatedMappings = generatedMappings;\n\n    quickSort$2(originalMappings, util$8.compareByOriginalPositions);\n    this.__originalMappings = originalMappings;\n  };\n\n/**\n * Find the mapping that best matches the hypothetical \"needle\" mapping that\n * we are searching for in the given \"haystack\" of mappings.\n */\nBasicSourceMapConsumer$1.prototype._findMapping =\n  function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName,\n                                         aColumnName, aComparator, aBias) {\n    // To return the position we are searching for, we must first find the\n    // mapping for the given position and then return the opposite position it\n    // points to. Because the mappings are sorted, we can use binary search to\n    // find the best mapping.\n\n    if (aNeedle[aLineName] <= 0) {\n      throw new TypeError('Line must be greater than or equal to 1, got '\n                          + aNeedle[aLineName]);\n    }\n    if (aNeedle[aColumnName] < 0) {\n      throw new TypeError('Column must be greater than or equal to 0, got '\n                          + aNeedle[aColumnName]);\n    }\n\n    return binarySearch$2.search(aNeedle, aMappings, aComparator, aBias);\n  };\n\n/**\n * Compute the last column for each generated mapping. The last column is\n * inclusive.\n */\nBasicSourceMapConsumer$1.prototype.computeColumnSpans =\n  function SourceMapConsumer_computeColumnSpans() {\n    for (var index = 0; index < this._generatedMappings.length; ++index) {\n      var mapping = this._generatedMappings[index];\n\n      // Mappings do not contain a field for the last generated columnt. We\n      // can come up with an optimistic estimate, however, by assuming that\n      // mappings are contiguous (i.e. given two consecutive mappings, the\n      // first mapping ends where the second one starts).\n      if (index + 1 < this._generatedMappings.length) {\n        var nextMapping = this._generatedMappings[index + 1];\n\n        if (mapping.generatedLine === nextMapping.generatedLine) {\n          mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1;\n          continue;\n        }\n      }\n\n      // The last mapping for each line spans the entire line.\n      mapping.lastGeneratedColumn = Infinity;\n    }\n  };\n\n/**\n * Returns the original source, line, and column information for the generated\n * source's line and column positions provided. The only argument is an object\n * with the following properties:\n *\n *   - line: The line number in the generated source.  The line number\n *     is 1-based.\n *   - column: The column number in the generated source.  The column\n *     number is 0-based.\n *   - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n *     'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n *     closest element that is smaller than or greater than the one we are\n *     searching for, respectively, if the exact element cannot be found.\n *     Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n *\n * and an object is returned with the following properties:\n *\n *   - source: The original source file, or null.\n *   - line: The line number in the original source, or null.  The\n *     line number is 1-based.\n *   - column: The column number in the original source, or null.  The\n *     column number is 0-based.\n *   - name: The original identifier, or null.\n */\nBasicSourceMapConsumer$1.prototype.originalPositionFor =\n  function SourceMapConsumer_originalPositionFor(aArgs) {\n    var needle = {\n      generatedLine: util$8.getArg(aArgs, 'line'),\n      generatedColumn: util$8.getArg(aArgs, 'column')\n    };\n\n    var index = this._findMapping(\n      needle,\n      this._generatedMappings,\n      \"generatedLine\",\n      \"generatedColumn\",\n      util$8.compareByGeneratedPositionsDeflated,\n      util$8.getArg(aArgs, 'bias', SourceMapConsumer$6.GREATEST_LOWER_BOUND)\n    );\n\n    if (index >= 0) {\n      var mapping = this._generatedMappings[index];\n\n      if (mapping.generatedLine === needle.generatedLine) {\n        var source = util$8.getArg(mapping, 'source', null);\n        if (source !== null) {\n          source = this._sources.at(source);\n          source = util$8.computeSourceURL(this.sourceRoot, source, this._sourceMapURL);\n        }\n        var name = util$8.getArg(mapping, 'name', null);\n        if (name !== null) {\n          name = this._names.at(name);\n        }\n        return {\n          source: source,\n          line: util$8.getArg(mapping, 'originalLine', null),\n          column: util$8.getArg(mapping, 'originalColumn', null),\n          name: name\n        };\n      }\n    }\n\n    return {\n      source: null,\n      line: null,\n      column: null,\n      name: null\n    };\n  };\n\n/**\n * Return true if we have the source content for every source in the source\n * map, false otherwise.\n */\nBasicSourceMapConsumer$1.prototype.hasContentsOfAllSources =\n  function BasicSourceMapConsumer_hasContentsOfAllSources() {\n    if (!this.sourcesContent) {\n      return false;\n    }\n    return this.sourcesContent.length >= this._sources.size() &&\n      !this.sourcesContent.some(function (sc) { return sc == null; });\n  };\n\n/**\n * Returns the original source content. The only argument is the url of the\n * original source file. Returns null if no original source content is\n * available.\n */\nBasicSourceMapConsumer$1.prototype.sourceContentFor =\n  function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n    if (!this.sourcesContent) {\n      return null;\n    }\n\n    var index = this._findSourceIndex(aSource);\n    if (index >= 0) {\n      return this.sourcesContent[index];\n    }\n\n    var relativeSource = aSource;\n    if (this.sourceRoot != null) {\n      relativeSource = util$8.relative(this.sourceRoot, relativeSource);\n    }\n\n    var url;\n    if (this.sourceRoot != null\n        && (url = util$8.urlParse(this.sourceRoot))) {\n      // XXX: file:// URIs and absolute paths lead to unexpected behavior for\n      // many users. We can help them out when they expect file:// URIs to\n      // behave like it would if they were running a local HTTP server. See\n      // https://bugzilla.mozilla.org/show_bug.cgi?id=885597.\n      var fileUriAbsPath = relativeSource.replace(/^file:\\/\\//, \"\");\n      if (url.scheme == \"file\"\n          && this._sources.has(fileUriAbsPath)) {\n        return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)]\n      }\n\n      if ((!url.path || url.path == \"/\")\n          && this._sources.has(\"/\" + relativeSource)) {\n        return this.sourcesContent[this._sources.indexOf(\"/\" + relativeSource)];\n      }\n    }\n\n    // This function is used recursively from\n    // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we\n    // don't want to throw if we can't find the source - we just want to\n    // return null, so we provide a flag to exit gracefully.\n    if (nullOnMissing) {\n      return null;\n    }\n    else {\n      throw new Error('\"' + relativeSource + '\" is not in the SourceMap.');\n    }\n  };\n\n/**\n * Returns the generated line and column information for the original source,\n * line, and column positions provided. The only argument is an object with\n * the following properties:\n *\n *   - source: The filename of the original source.\n *   - line: The line number in the original source.  The line number\n *     is 1-based.\n *   - column: The column number in the original source.  The column\n *     number is 0-based.\n *   - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n *     'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n *     closest element that is smaller than or greater than the one we are\n *     searching for, respectively, if the exact element cannot be found.\n *     Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n *\n * and an object is returned with the following properties:\n *\n *   - line: The line number in the generated source, or null.  The\n *     line number is 1-based.\n *   - column: The column number in the generated source, or null.\n *     The column number is 0-based.\n */\nBasicSourceMapConsumer$1.prototype.generatedPositionFor =\n  function SourceMapConsumer_generatedPositionFor(aArgs) {\n    var source = util$8.getArg(aArgs, 'source');\n    source = this._findSourceIndex(source);\n    if (source < 0) {\n      return {\n        line: null,\n        column: null,\n        lastColumn: null\n      };\n    }\n\n    var needle = {\n      source: source,\n      originalLine: util$8.getArg(aArgs, 'line'),\n      originalColumn: util$8.getArg(aArgs, 'column')\n    };\n\n    var index = this._findMapping(\n      needle,\n      this._originalMappings,\n      \"originalLine\",\n      \"originalColumn\",\n      util$8.compareByOriginalPositions,\n      util$8.getArg(aArgs, 'bias', SourceMapConsumer$6.GREATEST_LOWER_BOUND)\n    );\n\n    if (index >= 0) {\n      var mapping = this._originalMappings[index];\n\n      if (mapping.source === needle.source) {\n        return {\n          line: util$8.getArg(mapping, 'generatedLine', null),\n          column: util$8.getArg(mapping, 'generatedColumn', null),\n          lastColumn: util$8.getArg(mapping, 'lastGeneratedColumn', null)\n        };\n      }\n    }\n\n    return {\n      line: null,\n      column: null,\n      lastColumn: null\n    };\n  };\n\nsourceMapConsumer$1.BasicSourceMapConsumer = BasicSourceMapConsumer$1;\n\n/**\n * An IndexedSourceMapConsumer instance represents a parsed source map which\n * we can query for information. It differs from BasicSourceMapConsumer in\n * that it takes \"indexed\" source maps (i.e. ones with a \"sections\" field) as\n * input.\n *\n * The first parameter is a raw source map (either as a JSON string, or already\n * parsed to an object). According to the spec for indexed source maps, they\n * have the following attributes:\n *\n *   - version: Which version of the source map spec this map is following.\n *   - file: Optional. The generated file this source map is associated with.\n *   - sections: A list of section definitions.\n *\n * Each value under the \"sections\" field has two fields:\n *   - offset: The offset into the original specified at which this section\n *       begins to apply, defined as an object with a \"line\" and \"column\"\n *       field.\n *   - map: A source map definition. This source map could also be indexed,\n *       but doesn't have to be.\n *\n * Instead of the \"map\" field, it's also possible to have a \"url\" field\n * specifying a URL to retrieve a source map from, but that's currently\n * unsupported.\n *\n * Here's an example source map, taken from the source map spec[0], but\n * modified to omit a section which uses the \"url\" field.\n *\n *  {\n *    version : 3,\n *    file: \"app.js\",\n *    sections: [{\n *      offset: {line:100, column:10},\n *      map: {\n *        version : 3,\n *        file: \"section.js\",\n *        sources: [\"foo.js\", \"bar.js\"],\n *        names: [\"src\", \"maps\", \"are\", \"fun\"],\n *        mappings: \"AAAA,E;;ABCDE;\"\n *      }\n *    }],\n *  }\n *\n * The second parameter, if given, is a string whose value is the URL\n * at which the source map was found.  This URL is used to compute the\n * sources array.\n *\n * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt\n */\nfunction IndexedSourceMapConsumer$1(aSourceMap, aSourceMapURL) {\n  var sourceMap = aSourceMap;\n  if (typeof aSourceMap === 'string') {\n    sourceMap = util$8.parseSourceMapInput(aSourceMap);\n  }\n\n  var version = util$8.getArg(sourceMap, 'version');\n  var sections = util$8.getArg(sourceMap, 'sections');\n\n  if (version != this._version) {\n    throw new Error('Unsupported version: ' + version);\n  }\n\n  this._sources = new ArraySet$3();\n  this._names = new ArraySet$3();\n\n  var lastOffset = {\n    line: -1,\n    column: 0\n  };\n  this._sections = sections.map(function (s) {\n    if (s.url) {\n      // The url field will require support for asynchronicity.\n      // See https://github.com/mozilla/source-map/issues/16\n      throw new Error('Support for url field in sections not implemented.');\n    }\n    var offset = util$8.getArg(s, 'offset');\n    var offsetLine = util$8.getArg(offset, 'line');\n    var offsetColumn = util$8.getArg(offset, 'column');\n\n    if (offsetLine < lastOffset.line ||\n        (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) {\n      throw new Error('Section offsets must be ordered and non-overlapping.');\n    }\n    lastOffset = offset;\n\n    return {\n      generatedOffset: {\n        // The offset fields are 0-based, but we use 1-based indices when\n        // encoding/decoding from VLQ.\n        generatedLine: offsetLine + 1,\n        generatedColumn: offsetColumn + 1\n      },\n      consumer: new SourceMapConsumer$6(util$8.getArg(s, 'map'), aSourceMapURL)\n    }\n  });\n}\n\nIndexedSourceMapConsumer$1.prototype = Object.create(SourceMapConsumer$6.prototype);\nIndexedSourceMapConsumer$1.prototype.constructor = SourceMapConsumer$6;\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nIndexedSourceMapConsumer$1.prototype._version = 3;\n\n/**\n * The list of original sources.\n */\nObject.defineProperty(IndexedSourceMapConsumer$1.prototype, 'sources', {\n  get: function () {\n    var sources = [];\n    for (var i = 0; i < this._sections.length; i++) {\n      for (var j = 0; j < this._sections[i].consumer.sources.length; j++) {\n        sources.push(this._sections[i].consumer.sources[j]);\n      }\n    }\n    return sources;\n  }\n});\n\n/**\n * Returns the original source, line, and column information for the generated\n * source's line and column positions provided. The only argument is an object\n * with the following properties:\n *\n *   - line: The line number in the generated source.  The line number\n *     is 1-based.\n *   - column: The column number in the generated source.  The column\n *     number is 0-based.\n *\n * and an object is returned with the following properties:\n *\n *   - source: The original source file, or null.\n *   - line: The line number in the original source, or null.  The\n *     line number is 1-based.\n *   - column: The column number in the original source, or null.  The\n *     column number is 0-based.\n *   - name: The original identifier, or null.\n */\nIndexedSourceMapConsumer$1.prototype.originalPositionFor =\n  function IndexedSourceMapConsumer_originalPositionFor(aArgs) {\n    var needle = {\n      generatedLine: util$8.getArg(aArgs, 'line'),\n      generatedColumn: util$8.getArg(aArgs, 'column')\n    };\n\n    // Find the section containing the generated position we're trying to map\n    // to an original position.\n    var sectionIndex = binarySearch$2.search(needle, this._sections,\n      function(needle, section) {\n        var cmp = needle.generatedLine - section.generatedOffset.generatedLine;\n        if (cmp) {\n          return cmp;\n        }\n\n        return (needle.generatedColumn -\n                section.generatedOffset.generatedColumn);\n      });\n    var section = this._sections[sectionIndex];\n\n    if (!section) {\n      return {\n        source: null,\n        line: null,\n        column: null,\n        name: null\n      };\n    }\n\n    return section.consumer.originalPositionFor({\n      line: needle.generatedLine -\n        (section.generatedOffset.generatedLine - 1),\n      column: needle.generatedColumn -\n        (section.generatedOffset.generatedLine === needle.generatedLine\n         ? section.generatedOffset.generatedColumn - 1\n         : 0),\n      bias: aArgs.bias\n    });\n  };\n\n/**\n * Return true if we have the source content for every source in the source\n * map, false otherwise.\n */\nIndexedSourceMapConsumer$1.prototype.hasContentsOfAllSources =\n  function IndexedSourceMapConsumer_hasContentsOfAllSources() {\n    return this._sections.every(function (s) {\n      return s.consumer.hasContentsOfAllSources();\n    });\n  };\n\n/**\n * Returns the original source content. The only argument is the url of the\n * original source file. Returns null if no original source content is\n * available.\n */\nIndexedSourceMapConsumer$1.prototype.sourceContentFor =\n  function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n    for (var i = 0; i < this._sections.length; i++) {\n      var section = this._sections[i];\n\n      var content = section.consumer.sourceContentFor(aSource, true);\n      if (content) {\n        return content;\n      }\n    }\n    if (nullOnMissing) {\n      return null;\n    }\n    else {\n      throw new Error('\"' + aSource + '\" is not in the SourceMap.');\n    }\n  };\n\n/**\n * Returns the generated line and column information for the original source,\n * line, and column positions provided. The only argument is an object with\n * the following properties:\n *\n *   - source: The filename of the original source.\n *   - line: The line number in the original source.  The line number\n *     is 1-based.\n *   - column: The column number in the original source.  The column\n *     number is 0-based.\n *\n * and an object is returned with the following properties:\n *\n *   - line: The line number in the generated source, or null.  The\n *     line number is 1-based. \n *   - column: The column number in the generated source, or null.\n *     The column number is 0-based.\n */\nIndexedSourceMapConsumer$1.prototype.generatedPositionFor =\n  function IndexedSourceMapConsumer_generatedPositionFor(aArgs) {\n    for (var i = 0; i < this._sections.length; i++) {\n      var section = this._sections[i];\n\n      // Only consider this section if the requested source is in the list of\n      // sources of the consumer.\n      if (section.consumer._findSourceIndex(util$8.getArg(aArgs, 'source')) === -1) {\n        continue;\n      }\n      var generatedPosition = section.consumer.generatedPositionFor(aArgs);\n      if (generatedPosition) {\n        var ret = {\n          line: generatedPosition.line +\n            (section.generatedOffset.generatedLine - 1),\n          column: generatedPosition.column +\n            (section.generatedOffset.generatedLine === generatedPosition.line\n             ? section.generatedOffset.generatedColumn - 1\n             : 0)\n        };\n        return ret;\n      }\n    }\n\n    return {\n      line: null,\n      column: null\n    };\n  };\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nIndexedSourceMapConsumer$1.prototype._parseMappings =\n  function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n    this.__generatedMappings = [];\n    this.__originalMappings = [];\n    for (var i = 0; i < this._sections.length; i++) {\n      var section = this._sections[i];\n      var sectionMappings = section.consumer._generatedMappings;\n      for (var j = 0; j < sectionMappings.length; j++) {\n        var mapping = sectionMappings[j];\n\n        var source = section.consumer._sources.at(mapping.source);\n        source = util$8.computeSourceURL(section.consumer.sourceRoot, source, this._sourceMapURL);\n        this._sources.add(source);\n        source = this._sources.indexOf(source);\n\n        var name = null;\n        if (mapping.name) {\n          name = section.consumer._names.at(mapping.name);\n          this._names.add(name);\n          name = this._names.indexOf(name);\n        }\n\n        // The mappings coming from the consumer for the section have\n        // generated positions relative to the start of the section, so we\n        // need to offset them to be relative to the start of the concatenated\n        // generated file.\n        var adjustedMapping = {\n          source: source,\n          generatedLine: mapping.generatedLine +\n            (section.generatedOffset.generatedLine - 1),\n          generatedColumn: mapping.generatedColumn +\n            (section.generatedOffset.generatedLine === mapping.generatedLine\n            ? section.generatedOffset.generatedColumn - 1\n            : 0),\n          originalLine: mapping.originalLine,\n          originalColumn: mapping.originalColumn,\n          name: name\n        };\n\n        this.__generatedMappings.push(adjustedMapping);\n        if (typeof adjustedMapping.originalLine === 'number') {\n          this.__originalMappings.push(adjustedMapping);\n        }\n      }\n    }\n\n    quickSort$2(this.__generatedMappings, util$8.compareByGeneratedPositionsDeflated);\n    quickSort$2(this.__originalMappings, util$8.compareByOriginalPositions);\n  };\n\nsourceMapConsumer$1.IndexedSourceMapConsumer = IndexedSourceMapConsumer$1;\n\nvar sourceNode$1 = {};\n\n/* -*- Mode: js; js-indent-level: 2; -*- */\n\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar SourceMapGenerator$7 = sourceMapGenerator$1.SourceMapGenerator;\nvar util$7 = util$c;\n\n// Matches a Windows-style `\\r\\n` newline or a `\\n` newline used by all other\n// operating systems these days (capturing the result).\nvar REGEX_NEWLINE$1 = /(\\r?\\n)/;\n\n// Newline character code for charCodeAt() comparisons\nvar NEWLINE_CODE$1 = 10;\n\n// Private symbol for identifying `SourceNode`s when multiple versions of\n// the source-map library are loaded. This MUST NOT CHANGE across\n// versions!\nvar isSourceNode$1 = \"$$$isSourceNode$$$\";\n\n/**\n * SourceNodes provide a way to abstract over interpolating/concatenating\n * snippets of generated JavaScript source code while maintaining the line and\n * column information associated with the original source code.\n *\n * @param aLine The original line number.\n * @param aColumn The original column number.\n * @param aSource The original source's filename.\n * @param aChunks Optional. An array of strings which are snippets of\n *        generated JS, or other SourceNodes.\n * @param aName The original identifier.\n */\nfunction SourceNode$1(aLine, aColumn, aSource, aChunks, aName) {\n  this.children = [];\n  this.sourceContents = {};\n  this.line = aLine == null ? null : aLine;\n  this.column = aColumn == null ? null : aColumn;\n  this.source = aSource == null ? null : aSource;\n  this.name = aName == null ? null : aName;\n  this[isSourceNode$1] = true;\n  if (aChunks != null) this.add(aChunks);\n}\n\n/**\n * Creates a SourceNode from generated code and a SourceMapConsumer.\n *\n * @param aGeneratedCode The generated code\n * @param aSourceMapConsumer The SourceMap for the generated code\n * @param aRelativePath Optional. The path that relative sources in the\n *        SourceMapConsumer should be relative to.\n */\nSourceNode$1.fromStringWithSourceMap =\n  function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) {\n    // The SourceNode we want to fill with the generated code\n    // and the SourceMap\n    var node = new SourceNode$1();\n\n    // All even indices of this array are one line of the generated code,\n    // while all odd indices are the newlines between two adjacent lines\n    // (since `REGEX_NEWLINE` captures its match).\n    // Processed fragments are accessed by calling `shiftNextLine`.\n    var remainingLines = aGeneratedCode.split(REGEX_NEWLINE$1);\n    var remainingLinesIndex = 0;\n    var shiftNextLine = function() {\n      var lineContents = getNextLine();\n      // The last line of a file might not have a newline.\n      var newLine = getNextLine() || \"\";\n      return lineContents + newLine;\n\n      function getNextLine() {\n        return remainingLinesIndex < remainingLines.length ?\n            remainingLines[remainingLinesIndex++] : undefined;\n      }\n    };\n\n    // We need to remember the position of \"remainingLines\"\n    var lastGeneratedLine = 1, lastGeneratedColumn = 0;\n\n    // The generate SourceNodes we need a code range.\n    // To extract it current and last mapping is used.\n    // Here we store the last mapping.\n    var lastMapping = null;\n\n    aSourceMapConsumer.eachMapping(function (mapping) {\n      if (lastMapping !== null) {\n        // We add the code from \"lastMapping\" to \"mapping\":\n        // First check if there is a new line in between.\n        if (lastGeneratedLine < mapping.generatedLine) {\n          // Associate first line with \"lastMapping\"\n          addMappingWithCode(lastMapping, shiftNextLine());\n          lastGeneratedLine++;\n          lastGeneratedColumn = 0;\n          // The remaining code is added without mapping\n        } else {\n          // There is no new line in between.\n          // Associate the code between \"lastGeneratedColumn\" and\n          // \"mapping.generatedColumn\" with \"lastMapping\"\n          var nextLine = remainingLines[remainingLinesIndex] || '';\n          var code = nextLine.substr(0, mapping.generatedColumn -\n                                        lastGeneratedColumn);\n          remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn -\n                                              lastGeneratedColumn);\n          lastGeneratedColumn = mapping.generatedColumn;\n          addMappingWithCode(lastMapping, code);\n          // No more remaining code, continue\n          lastMapping = mapping;\n          return;\n        }\n      }\n      // We add the generated code until the first mapping\n      // to the SourceNode without any mapping.\n      // Each line is added as separate string.\n      while (lastGeneratedLine < mapping.generatedLine) {\n        node.add(shiftNextLine());\n        lastGeneratedLine++;\n      }\n      if (lastGeneratedColumn < mapping.generatedColumn) {\n        var nextLine = remainingLines[remainingLinesIndex] || '';\n        node.add(nextLine.substr(0, mapping.generatedColumn));\n        remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn);\n        lastGeneratedColumn = mapping.generatedColumn;\n      }\n      lastMapping = mapping;\n    }, this);\n    // We have processed all mappings.\n    if (remainingLinesIndex < remainingLines.length) {\n      if (lastMapping) {\n        // Associate the remaining code in the current line with \"lastMapping\"\n        addMappingWithCode(lastMapping, shiftNextLine());\n      }\n      // and add the remaining lines without any mapping\n      node.add(remainingLines.splice(remainingLinesIndex).join(\"\"));\n    }\n\n    // Copy sourcesContent into SourceNode\n    aSourceMapConsumer.sources.forEach(function (sourceFile) {\n      var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n      if (content != null) {\n        if (aRelativePath != null) {\n          sourceFile = util$7.join(aRelativePath, sourceFile);\n        }\n        node.setSourceContent(sourceFile, content);\n      }\n    });\n\n    return node;\n\n    function addMappingWithCode(mapping, code) {\n      if (mapping === null || mapping.source === undefined) {\n        node.add(code);\n      } else {\n        var source = aRelativePath\n          ? util$7.join(aRelativePath, mapping.source)\n          : mapping.source;\n        node.add(new SourceNode$1(mapping.originalLine,\n                                mapping.originalColumn,\n                                source,\n                                code,\n                                mapping.name));\n      }\n    }\n  };\n\n/**\n * Add a chunk of generated JS to this source node.\n *\n * @param aChunk A string snippet of generated JS code, another instance of\n *        SourceNode, or an array where each member is one of those things.\n */\nSourceNode$1.prototype.add = function SourceNode_add(aChunk) {\n  if (Array.isArray(aChunk)) {\n    aChunk.forEach(function (chunk) {\n      this.add(chunk);\n    }, this);\n  }\n  else if (aChunk[isSourceNode$1] || typeof aChunk === \"string\") {\n    if (aChunk) {\n      this.children.push(aChunk);\n    }\n  }\n  else {\n    throw new TypeError(\n      \"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk\n    );\n  }\n  return this;\n};\n\n/**\n * Add a chunk of generated JS to the beginning of this source node.\n *\n * @param aChunk A string snippet of generated JS code, another instance of\n *        SourceNode, or an array where each member is one of those things.\n */\nSourceNode$1.prototype.prepend = function SourceNode_prepend(aChunk) {\n  if (Array.isArray(aChunk)) {\n    for (var i = aChunk.length-1; i >= 0; i--) {\n      this.prepend(aChunk[i]);\n    }\n  }\n  else if (aChunk[isSourceNode$1] || typeof aChunk === \"string\") {\n    this.children.unshift(aChunk);\n  }\n  else {\n    throw new TypeError(\n      \"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk\n    );\n  }\n  return this;\n};\n\n/**\n * Walk over the tree of JS snippets in this node and its children. The\n * walking function is called once for each snippet of JS and is passed that\n * snippet and the its original associated source's line/column location.\n *\n * @param aFn The traversal function.\n */\nSourceNode$1.prototype.walk = function SourceNode_walk(aFn) {\n  var chunk;\n  for (var i = 0, len = this.children.length; i < len; i++) {\n    chunk = this.children[i];\n    if (chunk[isSourceNode$1]) {\n      chunk.walk(aFn);\n    }\n    else {\n      if (chunk !== '') {\n        aFn(chunk, { source: this.source,\n                     line: this.line,\n                     column: this.column,\n                     name: this.name });\n      }\n    }\n  }\n};\n\n/**\n * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between\n * each of `this.children`.\n *\n * @param aSep The separator.\n */\nSourceNode$1.prototype.join = function SourceNode_join(aSep) {\n  var newChildren;\n  var i;\n  var len = this.children.length;\n  if (len > 0) {\n    newChildren = [];\n    for (i = 0; i < len-1; i++) {\n      newChildren.push(this.children[i]);\n      newChildren.push(aSep);\n    }\n    newChildren.push(this.children[i]);\n    this.children = newChildren;\n  }\n  return this;\n};\n\n/**\n * Call String.prototype.replace on the very right-most source snippet. Useful\n * for trimming whitespace from the end of a source node, etc.\n *\n * @param aPattern The pattern to replace.\n * @param aReplacement The thing to replace the pattern with.\n */\nSourceNode$1.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) {\n  var lastChild = this.children[this.children.length - 1];\n  if (lastChild[isSourceNode$1]) {\n    lastChild.replaceRight(aPattern, aReplacement);\n  }\n  else if (typeof lastChild === 'string') {\n    this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement);\n  }\n  else {\n    this.children.push(''.replace(aPattern, aReplacement));\n  }\n  return this;\n};\n\n/**\n * Set the source content for a source file. This will be added to the SourceMapGenerator\n * in the sourcesContent field.\n *\n * @param aSourceFile The filename of the source file\n * @param aSourceContent The content of the source file\n */\nSourceNode$1.prototype.setSourceContent =\n  function SourceNode_setSourceContent(aSourceFile, aSourceContent) {\n    this.sourceContents[util$7.toSetString(aSourceFile)] = aSourceContent;\n  };\n\n/**\n * Walk over the tree of SourceNodes. The walking function is called for each\n * source file content and is passed the filename and source content.\n *\n * @param aFn The traversal function.\n */\nSourceNode$1.prototype.walkSourceContents =\n  function SourceNode_walkSourceContents(aFn) {\n    for (var i = 0, len = this.children.length; i < len; i++) {\n      if (this.children[i][isSourceNode$1]) {\n        this.children[i].walkSourceContents(aFn);\n      }\n    }\n\n    var sources = Object.keys(this.sourceContents);\n    for (var i = 0, len = sources.length; i < len; i++) {\n      aFn(util$7.fromSetString(sources[i]), this.sourceContents[sources[i]]);\n    }\n  };\n\n/**\n * Return the string representation of this source node. Walks over the tree\n * and concatenates all the various snippets together to one string.\n */\nSourceNode$1.prototype.toString = function SourceNode_toString() {\n  var str = \"\";\n  this.walk(function (chunk) {\n    str += chunk;\n  });\n  return str;\n};\n\n/**\n * Returns the string representation of this source node along with a source\n * map.\n */\nSourceNode$1.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) {\n  var generated = {\n    code: \"\",\n    line: 1,\n    column: 0\n  };\n  var map = new SourceMapGenerator$7(aArgs);\n  var sourceMappingActive = false;\n  var lastOriginalSource = null;\n  var lastOriginalLine = null;\n  var lastOriginalColumn = null;\n  var lastOriginalName = null;\n  this.walk(function (chunk, original) {\n    generated.code += chunk;\n    if (original.source !== null\n        && original.line !== null\n        && original.column !== null) {\n      if(lastOriginalSource !== original.source\n         || lastOriginalLine !== original.line\n         || lastOriginalColumn !== original.column\n         || lastOriginalName !== original.name) {\n        map.addMapping({\n          source: original.source,\n          original: {\n            line: original.line,\n            column: original.column\n          },\n          generated: {\n            line: generated.line,\n            column: generated.column\n          },\n          name: original.name\n        });\n      }\n      lastOriginalSource = original.source;\n      lastOriginalLine = original.line;\n      lastOriginalColumn = original.column;\n      lastOriginalName = original.name;\n      sourceMappingActive = true;\n    } else if (sourceMappingActive) {\n      map.addMapping({\n        generated: {\n          line: generated.line,\n          column: generated.column\n        }\n      });\n      lastOriginalSource = null;\n      sourceMappingActive = false;\n    }\n    for (var idx = 0, length = chunk.length; idx < length; idx++) {\n      if (chunk.charCodeAt(idx) === NEWLINE_CODE$1) {\n        generated.line++;\n        generated.column = 0;\n        // Mappings end at eol\n        if (idx + 1 === length) {\n          lastOriginalSource = null;\n          sourceMappingActive = false;\n        } else if (sourceMappingActive) {\n          map.addMapping({\n            source: original.source,\n            original: {\n              line: original.line,\n              column: original.column\n            },\n            generated: {\n              line: generated.line,\n              column: generated.column\n            },\n            name: original.name\n          });\n        }\n      } else {\n        generated.column++;\n      }\n    }\n  });\n  this.walkSourceContents(function (sourceFile, sourceContent) {\n    map.setSourceContent(sourceFile, sourceContent);\n  });\n\n  return { code: generated.code, map: map };\n};\n\nsourceNode$1.SourceNode = SourceNode$1;\n\n/*\n * Copyright 2009-2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE.txt or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar SourceMapGenerator$6 = sourceMap$2.SourceMapGenerator = sourceMapGenerator$1.SourceMapGenerator;\nvar SourceMapConsumer$5 = sourceMap$2.SourceMapConsumer = sourceMapConsumer$1.SourceMapConsumer;\nsourceMap$2.SourceNode = sourceNode$1.SourceNode;\n\nconst PURE_ANNOTATION = `/*#__PURE__*/`;\nconst aliasHelper = (s) => `${helperNameMap[s]}: _${helperNameMap[s]}`;\nfunction createCodegenContext(ast, { mode = 'function', prefixIdentifiers = mode === 'module', sourceMap = false, filename = `template.vue.html`, scopeId = null, optimizeImports = false, runtimeGlobalName = `Vue`, runtimeModuleName = `vue`, ssrRuntimeModuleName = 'vue/server-renderer', ssr = false, isTS = false, inSSR = false }) {\n    const context = {\n        mode,\n        prefixIdentifiers,\n        sourceMap,\n        filename,\n        scopeId,\n        optimizeImports,\n        runtimeGlobalName,\n        runtimeModuleName,\n        ssrRuntimeModuleName,\n        ssr,\n        isTS,\n        inSSR,\n        source: ast.loc.source,\n        code: ``,\n        column: 1,\n        line: 1,\n        offset: 0,\n        indentLevel: 0,\n        pure: false,\n        map: undefined,\n        helper(key) {\n            return `_${helperNameMap[key]}`;\n        },\n        push(code, node) {\n            context.code += code;\n            if (context.map) {\n                if (node) {\n                    let name;\n                    if (node.type === 4 /* NodeTypes.SIMPLE_EXPRESSION */ && !node.isStatic) {\n                        const content = node.content.replace(/^_ctx\\./, '');\n                        if (content !== node.content && isSimpleIdentifier(content)) {\n                            name = content;\n                        }\n                    }\n                    addMapping(node.loc.start, name);\n                }\n                advancePositionWithMutation(context, code);\n                if (node && node.loc !== locStub) {\n                    addMapping(node.loc.end);\n                }\n            }\n        },\n        indent() {\n            newline(++context.indentLevel);\n        },\n        deindent(withoutNewLine = false) {\n            if (withoutNewLine) {\n                --context.indentLevel;\n            }\n            else {\n                newline(--context.indentLevel);\n            }\n        },\n        newline() {\n            newline(context.indentLevel);\n        }\n    };\n    function newline(n) {\n        context.push('\\n' + `  `.repeat(n));\n    }\n    function addMapping(loc, name) {\n        context.map.addMapping({\n            name,\n            source: context.filename,\n            original: {\n                line: loc.line,\n                column: loc.column - 1 // source-map column is 0 based\n            },\n            generated: {\n                line: context.line,\n                column: context.column - 1\n            }\n        });\n    }\n    if (sourceMap) {\n        // lazy require source-map implementation, only in non-browser builds\n        context.map = new SourceMapGenerator$6();\n        context.map.setSourceContent(filename, context.source);\n    }\n    return context;\n}\nfunction generate(ast, options = {}) {\n    const context = createCodegenContext(ast, options);\n    if (options.onContextCreated)\n        options.onContextCreated(context);\n    const { mode, push, prefixIdentifiers, indent, deindent, newline, scopeId, ssr } = context;\n    const helpers = Array.from(ast.helpers);\n    const hasHelpers = helpers.length > 0;\n    const useWithBlock = !prefixIdentifiers && mode !== 'module';\n    const genScopeId = scopeId != null && mode === 'module';\n    const isSetupInlined = !!options.inline;\n    // preambles\n    // in setup() inline mode, the preamble is generated in a sub context\n    // and returned separately.\n    const preambleContext = isSetupInlined\n        ? createCodegenContext(ast, options)\n        : context;\n    if (mode === 'module') {\n        genModulePreamble(ast, preambleContext, genScopeId, isSetupInlined);\n    }\n    else {\n        genFunctionPreamble(ast, preambleContext);\n    }\n    // enter render function\n    const functionName = ssr ? `ssrRender` : `render`;\n    const args = ssr ? ['_ctx', '_push', '_parent', '_attrs'] : ['_ctx', '_cache'];\n    if (options.bindingMetadata && !options.inline) {\n        // binding optimization args\n        args.push('$props', '$setup', '$data', '$options');\n    }\n    const signature = options.isTS\n        ? args.map(arg => `${arg}: any`).join(',')\n        : args.join(', ');\n    if (isSetupInlined) {\n        push(`(${signature}) => {`);\n    }\n    else {\n        push(`function ${functionName}(${signature}) {`);\n    }\n    indent();\n    if (useWithBlock) {\n        push(`with (_ctx) {`);\n        indent();\n        // function mode const declarations should be inside with block\n        // also they should be renamed to avoid collision with user properties\n        if (hasHelpers) {\n            push(`const { ${helpers.map(aliasHelper).join(', ')} } = _Vue`);\n            push(`\\n`);\n            newline();\n        }\n    }\n    // generate asset resolution statements\n    if (ast.components.length) {\n        genAssets(ast.components, 'component', context);\n        if (ast.directives.length || ast.temps > 0) {\n            newline();\n        }\n    }\n    if (ast.directives.length) {\n        genAssets(ast.directives, 'directive', context);\n        if (ast.temps > 0) {\n            newline();\n        }\n    }\n    if (ast.temps > 0) {\n        push(`let `);\n        for (let i = 0; i < ast.temps; i++) {\n            push(`${i > 0 ? `, ` : ``}_temp${i}`);\n        }\n    }\n    if (ast.components.length || ast.directives.length || ast.temps) {\n        push(`\\n`);\n        newline();\n    }\n    // generate the VNode tree expression\n    if (!ssr) {\n        push(`return `);\n    }\n    if (ast.codegenNode) {\n        genNode(ast.codegenNode, context);\n    }\n    else {\n        push(`null`);\n    }\n    if (useWithBlock) {\n        deindent();\n        push(`}`);\n    }\n    deindent();\n    push(`}`);\n    return {\n        ast,\n        code: context.code,\n        preamble: isSetupInlined ? preambleContext.code : ``,\n        // SourceMapGenerator does have toJSON() method but it's not in the types\n        map: context.map ? context.map.toJSON() : undefined\n    };\n}\nfunction genFunctionPreamble(ast, context) {\n    const { ssr, prefixIdentifiers, push, newline, runtimeModuleName, runtimeGlobalName, ssrRuntimeModuleName } = context;\n    const VueBinding = ssr\n        ? `require(${JSON.stringify(runtimeModuleName)})`\n        : runtimeGlobalName;\n    // Generate const declaration for helpers\n    // In prefix mode, we place the const declaration at top so it's done\n    // only once; But if we not prefixing, we place the declaration inside the\n    // with block so it doesn't incur the `in` check cost for every helper access.\n    const helpers = Array.from(ast.helpers);\n    if (helpers.length > 0) {\n        if (prefixIdentifiers) {\n            push(`const { ${helpers.map(aliasHelper).join(', ')} } = ${VueBinding}\\n`);\n        }\n        else {\n            // \"with\" mode.\n            // save Vue in a separate variable to avoid collision\n            push(`const _Vue = ${VueBinding}\\n`);\n            // in \"with\" mode, helpers are declared inside the with block to avoid\n            // has check cost, but hoists are lifted out of the function - we need\n            // to provide the helper here.\n            if (ast.hoists.length) {\n                const staticHelpers = [\n                    CREATE_VNODE,\n                    CREATE_ELEMENT_VNODE,\n                    CREATE_COMMENT,\n                    CREATE_TEXT,\n                    CREATE_STATIC\n                ]\n                    .filter(helper => helpers.includes(helper))\n                    .map(aliasHelper)\n                    .join(', ');\n                push(`const { ${staticHelpers} } = _Vue\\n`);\n            }\n        }\n    }\n    // generate variables for ssr helpers\n    if (ast.ssrHelpers && ast.ssrHelpers.length) {\n        // ssr guarantees prefixIdentifier: true\n        push(`const { ${ast.ssrHelpers\n            .map(aliasHelper)\n            .join(', ')} } = require(\"${ssrRuntimeModuleName}\")\\n`);\n    }\n    genHoists(ast.hoists, context);\n    newline();\n    push(`return `);\n}\nfunction genModulePreamble(ast, context, genScopeId, inline) {\n    const { push, newline, optimizeImports, runtimeModuleName, ssrRuntimeModuleName } = context;\n    if (genScopeId && ast.hoists.length) {\n        ast.helpers.add(PUSH_SCOPE_ID);\n        ast.helpers.add(POP_SCOPE_ID);\n    }\n    // generate import statements for helpers\n    if (ast.helpers.size) {\n        const helpers = Array.from(ast.helpers);\n        if (optimizeImports) {\n            // when bundled with webpack with code-split, calling an import binding\n            // as a function leads to it being wrapped with `Object(a.b)` or `(0,a.b)`,\n            // incurring both payload size increase and potential perf overhead.\n            // therefore we assign the imports to variables (which is a constant ~50b\n            // cost per-component instead of scaling with template size)\n            push(`import { ${helpers\n                .map(s => helperNameMap[s])\n                .join(', ')} } from ${JSON.stringify(runtimeModuleName)}\\n`);\n            push(`\\n// Binding optimization for webpack code-split\\nconst ${helpers\n                .map(s => `_${helperNameMap[s]} = ${helperNameMap[s]}`)\n                .join(', ')}\\n`);\n        }\n        else {\n            push(`import { ${helpers\n                .map(s => `${helperNameMap[s]} as _${helperNameMap[s]}`)\n                .join(', ')} } from ${JSON.stringify(runtimeModuleName)}\\n`);\n        }\n    }\n    if (ast.ssrHelpers && ast.ssrHelpers.length) {\n        push(`import { ${ast.ssrHelpers\n            .map(s => `${helperNameMap[s]} as _${helperNameMap[s]}`)\n            .join(', ')} } from \"${ssrRuntimeModuleName}\"\\n`);\n    }\n    if (ast.imports.length) {\n        genImports(ast.imports, context);\n        newline();\n    }\n    genHoists(ast.hoists, context);\n    newline();\n    if (!inline) {\n        push(`export `);\n    }\n}\nfunction genAssets(assets, type, { helper, push, newline, isTS }) {\n    const resolver = helper(type === 'component'\n            ? RESOLVE_COMPONENT\n            : RESOLVE_DIRECTIVE);\n    for (let i = 0; i < assets.length; i++) {\n        let id = assets[i];\n        // potential component implicit self-reference inferred from SFC filename\n        const maybeSelfReference = id.endsWith('__self');\n        if (maybeSelfReference) {\n            id = id.slice(0, -6);\n        }\n        push(`const ${toValidAssetId(id, type)} = ${resolver}(${JSON.stringify(id)}${maybeSelfReference ? `, true` : ``})${isTS ? `!` : ``}`);\n        if (i < assets.length - 1) {\n            newline();\n        }\n    }\n}\nfunction genHoists(hoists, context) {\n    if (!hoists.length) {\n        return;\n    }\n    context.pure = true;\n    const { push, newline, helper, scopeId, mode } = context;\n    const genScopeId = scopeId != null && mode !== 'function';\n    newline();\n    // generate inlined withScopeId helper\n    if (genScopeId) {\n        push(`const _withScopeId = n => (${helper(PUSH_SCOPE_ID)}(\"${scopeId}\"),n=n(),${helper(POP_SCOPE_ID)}(),n)`);\n        newline();\n    }\n    for (let i = 0; i < hoists.length; i++) {\n        const exp = hoists[i];\n        if (exp) {\n            const needScopeIdWrapper = genScopeId && exp.type === 13 /* NodeTypes.VNODE_CALL */;\n            push(`const _hoisted_${i + 1} = ${needScopeIdWrapper ? `${PURE_ANNOTATION} _withScopeId(() => ` : ``}`);\n            genNode(exp, context);\n            if (needScopeIdWrapper) {\n                push(`)`);\n            }\n            newline();\n        }\n    }\n    context.pure = false;\n}\nfunction genImports(importsOptions, context) {\n    if (!importsOptions.length) {\n        return;\n    }\n    importsOptions.forEach(imports => {\n        context.push(`import `);\n        genNode(imports.exp, context);\n        context.push(` from '${imports.path}'`);\n        context.newline();\n    });\n}\nfunction isText(n) {\n    return (isString$2(n) ||\n        n.type === 4 /* NodeTypes.SIMPLE_EXPRESSION */ ||\n        n.type === 2 /* NodeTypes.TEXT */ ||\n        n.type === 5 /* NodeTypes.INTERPOLATION */ ||\n        n.type === 8 /* NodeTypes.COMPOUND_EXPRESSION */);\n}\nfunction genNodeListAsArray(nodes, context) {\n    const multilines = nodes.length > 3 ||\n        (nodes.some(n => isArray$3(n) || !isText(n)));\n    context.push(`[`);\n    multilines && context.indent();\n    genNodeList(nodes, context, multilines);\n    multilines && context.deindent();\n    context.push(`]`);\n}\nfunction genNodeList(nodes, context, multilines = false, comma = true) {\n    const { push, newline } = context;\n    for (let i = 0; i < nodes.length; i++) {\n        const node = nodes[i];\n        if (isString$2(node)) {\n            push(node);\n        }\n        else if (isArray$3(node)) {\n            genNodeListAsArray(node, context);\n        }\n        else {\n            genNode(node, context);\n        }\n        if (i < nodes.length - 1) {\n            if (multilines) {\n                comma && push(',');\n                newline();\n            }\n            else {\n                comma && push(', ');\n            }\n        }\n    }\n}\nfunction genNode(node, context) {\n    if (isString$2(node)) {\n        context.push(node);\n        return;\n    }\n    if (isSymbol$1(node)) {\n        context.push(context.helper(node));\n        return;\n    }\n    switch (node.type) {\n        case 1 /* NodeTypes.ELEMENT */:\n        case 9 /* NodeTypes.IF */:\n        case 11 /* NodeTypes.FOR */:\n            assert(node.codegenNode != null, `Codegen node is missing for element/if/for node. ` +\n                    `Apply appropriate transforms first.`);\n            genNode(node.codegenNode, context);\n            break;\n        case 2 /* NodeTypes.TEXT */:\n            genText(node, context);\n            break;\n        case 4 /* NodeTypes.SIMPLE_EXPRESSION */:\n            genExpression(node, context);\n            break;\n        case 5 /* NodeTypes.INTERPOLATION */:\n            genInterpolation(node, context);\n            break;\n        case 12 /* NodeTypes.TEXT_CALL */:\n            genNode(node.codegenNode, context);\n            break;\n        case 8 /* NodeTypes.COMPOUND_EXPRESSION */:\n            genCompoundExpression(node, context);\n            break;\n        case 3 /* NodeTypes.COMMENT */:\n            genComment(node, context);\n            break;\n        case 13 /* NodeTypes.VNODE_CALL */:\n            genVNodeCall(node, context);\n            break;\n        case 14 /* NodeTypes.JS_CALL_EXPRESSION */:\n            genCallExpression(node, context);\n            break;\n        case 15 /* NodeTypes.JS_OBJECT_EXPRESSION */:\n            genObjectExpression(node, context);\n            break;\n        case 17 /* NodeTypes.JS_ARRAY_EXPRESSION */:\n            genArrayExpression(node, context);\n            break;\n        case 18 /* NodeTypes.JS_FUNCTION_EXPRESSION */:\n            genFunctionExpression(node, context);\n            break;\n        case 19 /* NodeTypes.JS_CONDITIONAL_EXPRESSION */:\n            genConditionalExpression(node, context);\n            break;\n        case 20 /* NodeTypes.JS_CACHE_EXPRESSION */:\n            genCacheExpression(node, context);\n            break;\n        case 21 /* NodeTypes.JS_BLOCK_STATEMENT */:\n            genNodeList(node.body, context, true, false);\n            break;\n        // SSR only types\n        case 22 /* NodeTypes.JS_TEMPLATE_LITERAL */:\n            genTemplateLiteral(node, context);\n            break;\n        case 23 /* NodeTypes.JS_IF_STATEMENT */:\n            genIfStatement(node, context);\n            break;\n        case 24 /* NodeTypes.JS_ASSIGNMENT_EXPRESSION */:\n            genAssignmentExpression(node, context);\n            break;\n        case 25 /* NodeTypes.JS_SEQUENCE_EXPRESSION */:\n            genSequenceExpression(node, context);\n            break;\n        case 26 /* NodeTypes.JS_RETURN_STATEMENT */:\n            genReturnStatement(node, context);\n            break;\n        /* istanbul ignore next */\n        case 10 /* NodeTypes.IF_BRANCH */:\n            // noop\n            break;\n        default:\n            {\n                assert(false, `unhandled codegen node type: ${node.type}`);\n                // make sure we exhaust all possible types\n                const exhaustiveCheck = node;\n                return exhaustiveCheck;\n            }\n    }\n}\nfunction genText(node, context) {\n    context.push(JSON.stringify(node.content), node);\n}\nfunction genExpression(node, context) {\n    const { content, isStatic } = node;\n    context.push(isStatic ? JSON.stringify(content) : content, node);\n}\nfunction genInterpolation(node, context) {\n    const { push, helper, pure } = context;\n    if (pure)\n        push(PURE_ANNOTATION);\n    push(`${helper(TO_DISPLAY_STRING)}(`);\n    genNode(node.content, context);\n    push(`)`);\n}\nfunction genCompoundExpression(node, context) {\n    for (let i = 0; i < node.children.length; i++) {\n        const child = node.children[i];\n        if (isString$2(child)) {\n            context.push(child);\n        }\n        else {\n            genNode(child, context);\n        }\n    }\n}\nfunction genExpressionAsPropertyKey(node, context) {\n    const { push } = context;\n    if (node.type === 8 /* NodeTypes.COMPOUND_EXPRESSION */) {\n        push(`[`);\n        genCompoundExpression(node, context);\n        push(`]`);\n    }\n    else if (node.isStatic) {\n        // only quote keys if necessary\n        const text = isSimpleIdentifier(node.content)\n            ? node.content\n            : JSON.stringify(node.content);\n        push(text, node);\n    }\n    else {\n        push(`[${node.content}]`, node);\n    }\n}\nfunction genComment(node, context) {\n    const { push, helper, pure } = context;\n    if (pure) {\n        push(PURE_ANNOTATION);\n    }\n    push(`${helper(CREATE_COMMENT)}(${JSON.stringify(node.content)})`, node);\n}\nfunction genVNodeCall(node, context) {\n    const { push, helper, pure } = context;\n    const { tag, props, children, patchFlag, dynamicProps, directives, isBlock, disableTracking, isComponent } = node;\n    if (directives) {\n        push(helper(WITH_DIRECTIVES) + `(`);\n    }\n    if (isBlock) {\n        push(`(${helper(OPEN_BLOCK)}(${disableTracking ? `true` : ``}), `);\n    }\n    if (pure) {\n        push(PURE_ANNOTATION);\n    }\n    const callHelper = isBlock\n        ? getVNodeBlockHelper(context.inSSR, isComponent)\n        : getVNodeHelper(context.inSSR, isComponent);\n    push(helper(callHelper) + `(`, node);\n    genNodeList(genNullableArgs([tag, props, children, patchFlag, dynamicProps]), context);\n    push(`)`);\n    if (isBlock) {\n        push(`)`);\n    }\n    if (directives) {\n        push(`, `);\n        genNode(directives, context);\n        push(`)`);\n    }\n}\nfunction genNullableArgs(args) {\n    let i = args.length;\n    while (i--) {\n        if (args[i] != null)\n            break;\n    }\n    return args.slice(0, i + 1).map(arg => arg || `null`);\n}\n// JavaScript\nfunction genCallExpression(node, context) {\n    const { push, helper, pure } = context;\n    const callee = isString$2(node.callee) ? node.callee : helper(node.callee);\n    if (pure) {\n        push(PURE_ANNOTATION);\n    }\n    push(callee + `(`, node);\n    genNodeList(node.arguments, context);\n    push(`)`);\n}\nfunction genObjectExpression(node, context) {\n    const { push, indent, deindent, newline } = context;\n    const { properties } = node;\n    if (!properties.length) {\n        push(`{}`, node);\n        return;\n    }\n    const multilines = properties.length > 1 ||\n        (properties.some(p => p.value.type !== 4 /* NodeTypes.SIMPLE_EXPRESSION */));\n    push(multilines ? `{` : `{ `);\n    multilines && indent();\n    for (let i = 0; i < properties.length; i++) {\n        const { key, value } = properties[i];\n        // key\n        genExpressionAsPropertyKey(key, context);\n        push(`: `);\n        // value\n        genNode(value, context);\n        if (i < properties.length - 1) {\n            // will only reach this if it's multilines\n            push(`,`);\n            newline();\n        }\n    }\n    multilines && deindent();\n    push(multilines ? `}` : ` }`);\n}\nfunction genArrayExpression(node, context) {\n    genNodeListAsArray(node.elements, context);\n}\nfunction genFunctionExpression(node, context) {\n    const { push, indent, deindent } = context;\n    const { params, returns, body, newline, isSlot } = node;\n    if (isSlot) {\n        // wrap slot functions with owner context\n        push(`_${helperNameMap[WITH_CTX]}(`);\n    }\n    push(`(`, node);\n    if (isArray$3(params)) {\n        genNodeList(params, context);\n    }\n    else if (params) {\n        genNode(params, context);\n    }\n    push(`) => `);\n    if (newline || body) {\n        push(`{`);\n        indent();\n    }\n    if (returns) {\n        if (newline) {\n            push(`return `);\n        }\n        if (isArray$3(returns)) {\n            genNodeListAsArray(returns, context);\n        }\n        else {\n            genNode(returns, context);\n        }\n    }\n    else if (body) {\n        genNode(body, context);\n    }\n    if (newline || body) {\n        deindent();\n        push(`}`);\n    }\n    if (isSlot) {\n        push(`)`);\n    }\n}\nfunction genConditionalExpression(node, context) {\n    const { test, consequent, alternate, newline: needNewline } = node;\n    const { push, indent, deindent, newline } = context;\n    if (test.type === 4 /* NodeTypes.SIMPLE_EXPRESSION */) {\n        const needsParens = !isSimpleIdentifier(test.content);\n        needsParens && push(`(`);\n        genExpression(test, context);\n        needsParens && push(`)`);\n    }\n    else {\n        push(`(`);\n        genNode(test, context);\n        push(`)`);\n    }\n    needNewline && indent();\n    context.indentLevel++;\n    needNewline || push(` `);\n    push(`? `);\n    genNode(consequent, context);\n    context.indentLevel--;\n    needNewline && newline();\n    needNewline || push(` `);\n    push(`: `);\n    const isNested = alternate.type === 19 /* NodeTypes.JS_CONDITIONAL_EXPRESSION */;\n    if (!isNested) {\n        context.indentLevel++;\n    }\n    genNode(alternate, context);\n    if (!isNested) {\n        context.indentLevel--;\n    }\n    needNewline && deindent(true /* without newline */);\n}\nfunction genCacheExpression(node, context) {\n    const { push, helper, indent, deindent, newline } = context;\n    push(`_cache[${node.index}] || (`);\n    if (node.isVNode) {\n        indent();\n        push(`${helper(SET_BLOCK_TRACKING)}(-1),`);\n        newline();\n    }\n    push(`_cache[${node.index}] = `);\n    genNode(node.value, context);\n    if (node.isVNode) {\n        push(`,`);\n        newline();\n        push(`${helper(SET_BLOCK_TRACKING)}(1),`);\n        newline();\n        push(`_cache[${node.index}]`);\n        deindent();\n    }\n    push(`)`);\n}\nfunction genTemplateLiteral(node, context) {\n    const { push, indent, deindent } = context;\n    push('`');\n    const l = node.elements.length;\n    const multilines = l > 3;\n    for (let i = 0; i < l; i++) {\n        const e = node.elements[i];\n        if (isString$2(e)) {\n            push(e.replace(/(`|\\$|\\\\)/g, '\\\\$1'));\n        }\n        else {\n            push('${');\n            if (multilines)\n                indent();\n            genNode(e, context);\n            if (multilines)\n                deindent();\n            push('}');\n        }\n    }\n    push('`');\n}\nfunction genIfStatement(node, context) {\n    const { push, indent, deindent } = context;\n    const { test, consequent, alternate } = node;\n    push(`if (`);\n    genNode(test, context);\n    push(`) {`);\n    indent();\n    genNode(consequent, context);\n    deindent();\n    push(`}`);\n    if (alternate) {\n        push(` else `);\n        if (alternate.type === 23 /* NodeTypes.JS_IF_STATEMENT */) {\n            genIfStatement(alternate, context);\n        }\n        else {\n            push(`{`);\n            indent();\n            genNode(alternate, context);\n            deindent();\n            push(`}`);\n        }\n    }\n}\nfunction genAssignmentExpression(node, context) {\n    genNode(node.left, context);\n    context.push(` = `);\n    genNode(node.right, context);\n}\nfunction genSequenceExpression(node, context) {\n    context.push(`(`);\n    genNodeList(node.expressions, context);\n    context.push(`)`);\n}\nfunction genReturnStatement({ returns }, context) {\n    context.push(`return `);\n    if (isArray$3(returns)) {\n        genNodeListAsArray(returns, context);\n    }\n    else {\n        genNode(returns, context);\n    }\n}\n\n// @ts-check\n/** @typedef { import('estree').BaseNode} BaseNode */\n\n/** @typedef {{\n\tskip: () => void;\n\tremove: () => void;\n\treplace: (node: BaseNode) => void;\n}} WalkerContext */\n\nclass WalkerBase {\n\tconstructor() {\n\t\t/** @type {boolean} */\n\t\tthis.should_skip = false;\n\n\t\t/** @type {boolean} */\n\t\tthis.should_remove = false;\n\n\t\t/** @type {BaseNode | null} */\n\t\tthis.replacement = null;\n\n\t\t/** @type {WalkerContext} */\n\t\tthis.context = {\n\t\t\tskip: () => (this.should_skip = true),\n\t\t\tremove: () => (this.should_remove = true),\n\t\t\treplace: (node) => (this.replacement = node)\n\t\t};\n\t}\n\n\t/**\n\t *\n\t * @param {any} parent\n\t * @param {string} prop\n\t * @param {number} index\n\t * @param {BaseNode} node\n\t */\n\treplace(parent, prop, index, node) {\n\t\tif (parent) {\n\t\t\tif (index !== null) {\n\t\t\t\tparent[prop][index] = node;\n\t\t\t} else {\n\t\t\t\tparent[prop] = node;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t *\n\t * @param {any} parent\n\t * @param {string} prop\n\t * @param {number} index\n\t */\n\tremove(parent, prop, index) {\n\t\tif (parent) {\n\t\t\tif (index !== null) {\n\t\t\t\tparent[prop].splice(index, 1);\n\t\t\t} else {\n\t\t\t\tdelete parent[prop];\n\t\t\t}\n\t\t}\n\t}\n}\n\n// @ts-check\n\n/** @typedef { import('estree').BaseNode} BaseNode */\n/** @typedef { import('./walker.js').WalkerContext} WalkerContext */\n\n/** @typedef {(\n *    this: WalkerContext,\n *    node: BaseNode,\n *    parent: BaseNode,\n *    key: string,\n *    index: number\n * ) => void} SyncHandler */\n\nclass SyncWalker extends WalkerBase {\n\t/**\n\t *\n\t * @param {SyncHandler} enter\n\t * @param {SyncHandler} leave\n\t */\n\tconstructor(enter, leave) {\n\t\tsuper();\n\n\t\t/** @type {SyncHandler} */\n\t\tthis.enter = enter;\n\n\t\t/** @type {SyncHandler} */\n\t\tthis.leave = leave;\n\t}\n\n\t/**\n\t *\n\t * @param {BaseNode} node\n\t * @param {BaseNode} parent\n\t * @param {string} [prop]\n\t * @param {number} [index]\n\t * @returns {BaseNode}\n\t */\n\tvisit(node, parent, prop, index) {\n\t\tif (node) {\n\t\t\tif (this.enter) {\n\t\t\t\tconst _should_skip = this.should_skip;\n\t\t\t\tconst _should_remove = this.should_remove;\n\t\t\t\tconst _replacement = this.replacement;\n\t\t\t\tthis.should_skip = false;\n\t\t\t\tthis.should_remove = false;\n\t\t\t\tthis.replacement = null;\n\n\t\t\t\tthis.enter.call(this.context, node, parent, prop, index);\n\n\t\t\t\tif (this.replacement) {\n\t\t\t\t\tnode = this.replacement;\n\t\t\t\t\tthis.replace(parent, prop, index, node);\n\t\t\t\t}\n\n\t\t\t\tif (this.should_remove) {\n\t\t\t\t\tthis.remove(parent, prop, index);\n\t\t\t\t}\n\n\t\t\t\tconst skipped = this.should_skip;\n\t\t\t\tconst removed = this.should_remove;\n\n\t\t\t\tthis.should_skip = _should_skip;\n\t\t\t\tthis.should_remove = _should_remove;\n\t\t\t\tthis.replacement = _replacement;\n\n\t\t\t\tif (skipped) return node;\n\t\t\t\tif (removed) return null;\n\t\t\t}\n\n\t\t\tfor (const key in node) {\n\t\t\t\tconst value = node[key];\n\n\t\t\t\tif (typeof value !== \"object\") {\n\t\t\t\t\tcontinue;\n\t\t\t\t} else if (Array.isArray(value)) {\n\t\t\t\t\tfor (let i = 0; i < value.length; i += 1) {\n\t\t\t\t\t\tif (value[i] !== null && typeof value[i].type === 'string') {\n\t\t\t\t\t\t\tif (!this.visit(value[i], node, key, i)) {\n\t\t\t\t\t\t\t\t// removed\n\t\t\t\t\t\t\t\ti--;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else if (value !== null && typeof value.type === \"string\") {\n\t\t\t\t\tthis.visit(value, node, key, null);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.leave) {\n\t\t\t\tconst _replacement = this.replacement;\n\t\t\t\tconst _should_remove = this.should_remove;\n\t\t\t\tthis.replacement = null;\n\t\t\t\tthis.should_remove = false;\n\n\t\t\t\tthis.leave.call(this.context, node, parent, prop, index);\n\n\t\t\t\tif (this.replacement) {\n\t\t\t\t\tnode = this.replacement;\n\t\t\t\t\tthis.replace(parent, prop, index, node);\n\t\t\t\t}\n\n\t\t\t\tif (this.should_remove) {\n\t\t\t\t\tthis.remove(parent, prop, index);\n\t\t\t\t}\n\n\t\t\t\tconst removed = this.should_remove;\n\n\t\t\t\tthis.replacement = _replacement;\n\t\t\t\tthis.should_remove = _should_remove;\n\n\t\t\t\tif (removed) return null;\n\t\t\t}\n\t\t}\n\n\t\treturn node;\n\t}\n}\n\n// @ts-check\n\n/** @typedef { import('estree').BaseNode} BaseNode */\n/** @typedef { import('./sync.js').SyncHandler} SyncHandler */\n/** @typedef { import('./async.js').AsyncHandler} AsyncHandler */\n\n/**\n *\n * @param {BaseNode} ast\n * @param {{\n *   enter?: SyncHandler\n *   leave?: SyncHandler\n * }} walker\n * @returns {BaseNode}\n */\nfunction walk$1(ast, { enter, leave }) {\n\tconst instance = new SyncWalker(enter, leave);\n\treturn instance.visit(ast, null);\n}\n\nfunction walkIdentifiers(root, onIdentifier, includeAll = false, parentStack = [], knownIds = Object.create(null)) {\n    const rootExp = root.type === 'Program' &&\n        root.body[0].type === 'ExpressionStatement' &&\n        root.body[0].expression;\n    walk$1(root, {\n        enter(node, parent) {\n            parent && parentStack.push(parent);\n            if (parent &&\n                parent.type.startsWith('TS') &&\n                parent.type !== 'TSAsExpression' &&\n                parent.type !== 'TSNonNullExpression' &&\n                parent.type !== 'TSTypeAssertion') {\n                return this.skip();\n            }\n            if (node.type === 'Identifier') {\n                const isLocal = !!knownIds[node.name];\n                const isRefed = isReferencedIdentifier(node, parent, parentStack);\n                if (includeAll || (isRefed && !isLocal)) {\n                    onIdentifier(node, parent, parentStack, isRefed, isLocal);\n                }\n            }\n            else if (node.type === 'ObjectProperty' &&\n                parent.type === 'ObjectPattern') {\n                node.inPattern = true;\n            }\n            else if (isFunctionType(node)) {\n                // walk function expressions and add its arguments to known identifiers\n                // so that we don't prefix them\n                walkFunctionParams(node, id => markScopeIdentifier(node, id, knownIds));\n            }\n            else if (node.type === 'BlockStatement') {\n                // #3445 record block-level local variables\n                walkBlockDeclarations(node, id => markScopeIdentifier(node, id, knownIds));\n            }\n        },\n        leave(node, parent) {\n            parent && parentStack.pop();\n            if (node !== rootExp && node.scopeIds) {\n                for (const id of node.scopeIds) {\n                    knownIds[id]--;\n                    if (knownIds[id] === 0) {\n                        delete knownIds[id];\n                    }\n                }\n            }\n        }\n    });\n}\nfunction isReferencedIdentifier(id, parent, parentStack) {\n    if (!parent) {\n        return true;\n    }\n    // is a special keyword but parsed as identifier\n    if (id.name === 'arguments') {\n        return false;\n    }\n    if (isReferenced(id, parent)) {\n        return true;\n    }\n    // babel's isReferenced check returns false for ids being assigned to, so we\n    // need to cover those cases here\n    switch (parent.type) {\n        case 'AssignmentExpression':\n        case 'AssignmentPattern':\n            return true;\n        case 'ObjectPattern':\n        case 'ArrayPattern':\n            return isInDestructureAssignment(parent, parentStack);\n    }\n    return false;\n}\nfunction isInDestructureAssignment(parent, parentStack) {\n    if (parent &&\n        (parent.type === 'ObjectProperty' || parent.type === 'ArrayPattern')) {\n        let i = parentStack.length;\n        while (i--) {\n            const p = parentStack[i];\n            if (p.type === 'AssignmentExpression') {\n                return true;\n            }\n            else if (p.type !== 'ObjectProperty' && !p.type.endsWith('Pattern')) {\n                break;\n            }\n        }\n    }\n    return false;\n}\nfunction walkFunctionParams(node, onIdent) {\n    for (const p of node.params) {\n        for (const id of extractIdentifiers(p)) {\n            onIdent(id);\n        }\n    }\n}\nfunction walkBlockDeclarations(block, onIdent) {\n    for (const stmt of block.body) {\n        if (stmt.type === 'VariableDeclaration') {\n            if (stmt.declare)\n                continue;\n            for (const decl of stmt.declarations) {\n                for (const id of extractIdentifiers(decl.id)) {\n                    onIdent(id);\n                }\n            }\n        }\n        else if (stmt.type === 'FunctionDeclaration' ||\n            stmt.type === 'ClassDeclaration') {\n            if (stmt.declare || !stmt.id)\n                continue;\n            onIdent(stmt.id);\n        }\n    }\n}\nfunction extractIdentifiers(param, nodes = []) {\n    switch (param.type) {\n        case 'Identifier':\n            nodes.push(param);\n            break;\n        case 'MemberExpression':\n            let object = param;\n            while (object.type === 'MemberExpression') {\n                object = object.object;\n            }\n            nodes.push(object);\n            break;\n        case 'ObjectPattern':\n            for (const prop of param.properties) {\n                if (prop.type === 'RestElement') {\n                    extractIdentifiers(prop.argument, nodes);\n                }\n                else {\n                    extractIdentifiers(prop.value, nodes);\n                }\n            }\n            break;\n        case 'ArrayPattern':\n            param.elements.forEach(element => {\n                if (element)\n                    extractIdentifiers(element, nodes);\n            });\n            break;\n        case 'RestElement':\n            extractIdentifiers(param.argument, nodes);\n            break;\n        case 'AssignmentPattern':\n            extractIdentifiers(param.left, nodes);\n            break;\n    }\n    return nodes;\n}\nfunction markScopeIdentifier(node, child, knownIds) {\n    const { name } = child;\n    if (node.scopeIds && node.scopeIds.has(name)) {\n        return;\n    }\n    if (name in knownIds) {\n        knownIds[name]++;\n    }\n    else {\n        knownIds[name] = 1;\n    }\n    (node.scopeIds || (node.scopeIds = new Set())).add(name);\n}\nconst isFunctionType = (node) => {\n    return /Function(?:Expression|Declaration)$|Method$/.test(node.type);\n};\nconst isStaticProperty = (node) => node &&\n    (node.type === 'ObjectProperty' || node.type === 'ObjectMethod') &&\n    !node.computed;\nconst isStaticPropertyKey = (node, parent) => isStaticProperty(parent) && parent.key === node;\n/**\n * Copied from https://github.com/babel/babel/blob/main/packages/babel-types/src/validators/isReferenced.ts\n * To avoid runtime dependency on @babel/types (which includes process references)\n * This file should not change very often in babel but we may need to keep it\n * up-to-date from time to time.\n *\n * https://github.com/babel/babel/blob/main/LICENSE\n *\n */\nfunction isReferenced(node, parent, grandparent) {\n    switch (parent.type) {\n        // yes: PARENT[NODE]\n        // yes: NODE.child\n        // no: parent.NODE\n        case 'MemberExpression':\n        case 'OptionalMemberExpression':\n            if (parent.property === node) {\n                return !!parent.computed;\n            }\n            return parent.object === node;\n        case 'JSXMemberExpression':\n            return parent.object === node;\n        // no: let NODE = init;\n        // yes: let id = NODE;\n        case 'VariableDeclarator':\n            return parent.init === node;\n        // yes: () => NODE\n        // no: (NODE) => {}\n        case 'ArrowFunctionExpression':\n            return parent.body === node;\n        // no: class { #NODE; }\n        // no: class { get #NODE() {} }\n        // no: class { #NODE() {} }\n        // no: class { fn() { return this.#NODE; } }\n        case 'PrivateName':\n            return false;\n        // no: class { NODE() {} }\n        // yes: class { [NODE]() {} }\n        // no: class { foo(NODE) {} }\n        case 'ClassMethod':\n        case 'ClassPrivateMethod':\n        case 'ObjectMethod':\n            if (parent.key === node) {\n                return !!parent.computed;\n            }\n            return false;\n        // yes: { [NODE]: \"\" }\n        // no: { NODE: \"\" }\n        // depends: { NODE }\n        // depends: { key: NODE }\n        case 'ObjectProperty':\n            if (parent.key === node) {\n                return !!parent.computed;\n            }\n            // parent.value === node\n            return !grandparent || grandparent.type !== 'ObjectPattern';\n        // no: class { NODE = value; }\n        // yes: class { [NODE] = value; }\n        // yes: class { key = NODE; }\n        case 'ClassProperty':\n            if (parent.key === node) {\n                return !!parent.computed;\n            }\n            return true;\n        case 'ClassPrivateProperty':\n            return parent.key !== node;\n        // no: class NODE {}\n        // yes: class Foo extends NODE {}\n        case 'ClassDeclaration':\n        case 'ClassExpression':\n            return parent.superClass === node;\n        // yes: left = NODE;\n        // no: NODE = right;\n        case 'AssignmentExpression':\n            return parent.right === node;\n        // no: [NODE = foo] = [];\n        // yes: [foo = NODE] = [];\n        case 'AssignmentPattern':\n            return parent.right === node;\n        // no: NODE: for (;;) {}\n        case 'LabeledStatement':\n            return false;\n        // no: try {} catch (NODE) {}\n        case 'CatchClause':\n            return false;\n        // no: function foo(...NODE) {}\n        case 'RestElement':\n            return false;\n        case 'BreakStatement':\n        case 'ContinueStatement':\n            return false;\n        // no: function NODE() {}\n        // no: function foo(NODE) {}\n        case 'FunctionDeclaration':\n        case 'FunctionExpression':\n            return false;\n        // no: export NODE from \"foo\";\n        // no: export * as NODE from \"foo\";\n        case 'ExportNamespaceSpecifier':\n        case 'ExportDefaultSpecifier':\n            return false;\n        // no: export { foo as NODE };\n        // yes: export { NODE as foo };\n        // no: export { NODE as foo } from \"foo\";\n        case 'ExportSpecifier':\n            // @ts-expect-error\n            if (grandparent === null || grandparent === void 0 ? void 0 : grandparent.source) {\n                return false;\n            }\n            return parent.local === node;\n        // no: import NODE from \"foo\";\n        // no: import * as NODE from \"foo\";\n        // no: import { NODE as foo } from \"foo\";\n        // no: import { foo as NODE } from \"foo\";\n        // no: import NODE from \"bar\";\n        case 'ImportDefaultSpecifier':\n        case 'ImportNamespaceSpecifier':\n        case 'ImportSpecifier':\n            return false;\n        // no: import \"foo\" assert { NODE: \"json\" }\n        case 'ImportAttribute':\n            return false;\n        // no: <div NODE=\"foo\" />\n        case 'JSXAttribute':\n            return false;\n        // no: [NODE] = [];\n        // no: ({ NODE }) = [];\n        case 'ObjectPattern':\n        case 'ArrayPattern':\n            return false;\n        // no: new.NODE\n        // no: NODE.target\n        case 'MetaProperty':\n            return false;\n        // yes: type X = { someProperty: NODE }\n        // no: type X = { NODE: OtherType }\n        case 'ObjectTypeProperty':\n            return parent.key !== node;\n        // yes: enum X { Foo = NODE }\n        // no: enum X { NODE }\n        case 'TSEnumMember':\n            return parent.id !== node;\n        // yes: { [NODE]: value }\n        // no: { NODE: value }\n        case 'TSPropertySignature':\n            if (parent.key === node) {\n                return !!parent.computed;\n            }\n            return true;\n    }\n    return true;\n}\n\nconst isLiteralWhitelisted = /*#__PURE__*/ makeMap('true,false,null,this');\nconst transformExpression = (node, context) => {\n    if (node.type === 5 /* NodeTypes.INTERPOLATION */) {\n        node.content = processExpression(node.content, context);\n    }\n    else if (node.type === 1 /* NodeTypes.ELEMENT */) {\n        // handle directives on element\n        for (let i = 0; i < node.props.length; i++) {\n            const dir = node.props[i];\n            // do not process for v-on & v-for since they are special handled\n            if (dir.type === 7 /* NodeTypes.DIRECTIVE */ && dir.name !== 'for') {\n                const exp = dir.exp;\n                const arg = dir.arg;\n                // do not process exp if this is v-on:arg - we need special handling\n                // for wrapping inline statements.\n                if (exp &&\n                    exp.type === 4 /* NodeTypes.SIMPLE_EXPRESSION */ &&\n                    !(dir.name === 'on' && arg)) {\n                    dir.exp = processExpression(exp, context, \n                    // slot args must be processed as function params\n                    dir.name === 'slot');\n                }\n                if (arg && arg.type === 4 /* NodeTypes.SIMPLE_EXPRESSION */ && !arg.isStatic) {\n                    dir.arg = processExpression(arg, context);\n                }\n            }\n        }\n    }\n};\n// Important: since this function uses Node.js only dependencies, it should\n// always be used with a leading !false check so that it can be\n// tree-shaken from the browser build.\nfunction processExpression(node, context, \n// some expressions like v-slot props & v-for aliases should be parsed as\n// function params\nasParams = false, \n// v-on handler values may contain multiple statements\nasRawStatements = false, localVars = Object.create(context.identifiers)) {\n    if (!context.prefixIdentifiers || !node.content.trim()) {\n        return node;\n    }\n    const { inline, bindingMetadata } = context;\n    const rewriteIdentifier = (raw, parent, id) => {\n        const type = hasOwn(bindingMetadata, raw) && bindingMetadata[raw];\n        if (inline) {\n            // x = y\n            const isAssignmentLVal = parent && parent.type === 'AssignmentExpression' && parent.left === id;\n            // x++\n            const isUpdateArg = parent && parent.type === 'UpdateExpression' && parent.argument === id;\n            // ({ x } = y)\n            const isDestructureAssignment = parent && isInDestructureAssignment(parent, parentStack);\n            if (type === \"setup-const\" /* BindingTypes.SETUP_CONST */ ||\n                type === \"setup-reactive-const\" /* BindingTypes.SETUP_REACTIVE_CONST */ ||\n                localVars[raw]) {\n                return raw;\n            }\n            else if (type === \"setup-ref\" /* BindingTypes.SETUP_REF */) {\n                return `${raw}.value`;\n            }\n            else if (type === \"setup-maybe-ref\" /* BindingTypes.SETUP_MAYBE_REF */) {\n                // const binding that may or may not be ref\n                // if it's not a ref, then assignments don't make sense -\n                // so we ignore the non-ref assignment case and generate code\n                // that assumes the value to be a ref for more efficiency\n                return isAssignmentLVal || isUpdateArg || isDestructureAssignment\n                    ? `${raw}.value`\n                    : `${context.helperString(UNREF)}(${raw})`;\n            }\n            else if (type === \"setup-let\" /* BindingTypes.SETUP_LET */) {\n                if (isAssignmentLVal) {\n                    // let binding.\n                    // this is a bit more tricky as we need to cover the case where\n                    // let is a local non-ref value, and we need to replicate the\n                    // right hand side value.\n                    // x = y --> isRef(x) ? x.value = y : x = y\n                    const { right: rVal, operator } = parent;\n                    const rExp = rawExp.slice(rVal.start - 1, rVal.end - 1);\n                    const rExpString = stringifyExpression(processExpression(createSimpleExpression(rExp, false), context, false, false, knownIds));\n                    return `${context.helperString(IS_REF)}(${raw})${context.isTS ? ` //@ts-ignore\\n` : ``} ? ${raw}.value ${operator} ${rExpString} : ${raw}`;\n                }\n                else if (isUpdateArg) {\n                    // make id replace parent in the code range so the raw update operator\n                    // is removed\n                    id.start = parent.start;\n                    id.end = parent.end;\n                    const { prefix: isPrefix, operator } = parent;\n                    const prefix = isPrefix ? operator : ``;\n                    const postfix = isPrefix ? `` : operator;\n                    // let binding.\n                    // x++ --> isRef(a) ? a.value++ : a++\n                    return `${context.helperString(IS_REF)}(${raw})${context.isTS ? ` //@ts-ignore\\n` : ``} ? ${prefix}${raw}.value${postfix} : ${prefix}${raw}${postfix}`;\n                }\n                else if (isDestructureAssignment) {\n                    // TODO\n                    // let binding in a destructure assignment - it's very tricky to\n                    // handle both possible cases here without altering the original\n                    // structure of the code, so we just assume it's not a ref here\n                    // for now\n                    return raw;\n                }\n                else {\n                    return `${context.helperString(UNREF)}(${raw})`;\n                }\n            }\n            else if (type === \"props\" /* BindingTypes.PROPS */) {\n                // use __props which is generated by compileScript so in ts mode\n                // it gets correct type\n                return genPropsAccessExp(raw);\n            }\n            else if (type === \"props-aliased\" /* BindingTypes.PROPS_ALIASED */) {\n                // prop with a different local alias (from defineProps() destructure)\n                return genPropsAccessExp(bindingMetadata.__propsAliases[raw]);\n            }\n        }\n        else {\n            if (type && type.startsWith('setup')) {\n                // setup bindings in non-inline mode\n                return `$setup.${raw}`;\n            }\n            else if (type === \"props-aliased\" /* BindingTypes.PROPS_ALIASED */) {\n                return `$props['${bindingMetadata.__propsAliases[raw]}']`;\n            }\n            else if (type) {\n                return `$${type}.${raw}`;\n            }\n        }\n        // fallback to ctx\n        return `_ctx.${raw}`;\n    };\n    // fast path if expression is a simple identifier.\n    const rawExp = node.content;\n    // bail constant on parens (function invocation) and dot (member access)\n    const bailConstant = rawExp.indexOf(`(`) > -1 || rawExp.indexOf('.') > 0;\n    if (isSimpleIdentifier(rawExp)) {\n        const isScopeVarReference = context.identifiers[rawExp];\n        const isAllowedGlobal = isGloballyWhitelisted(rawExp);\n        const isLiteral = isLiteralWhitelisted(rawExp);\n        if (!asParams && !isScopeVarReference && !isAllowedGlobal && !isLiteral) {\n            // const bindings exposed from setup can be skipped for patching but\n            // cannot be hoisted to module scope\n            if (bindingMetadata[node.content] === \"setup-const\" /* BindingTypes.SETUP_CONST */) {\n                node.constType = 1 /* ConstantTypes.CAN_SKIP_PATCH */;\n            }\n            node.content = rewriteIdentifier(rawExp);\n        }\n        else if (!isScopeVarReference) {\n            if (isLiteral) {\n                node.constType = 3 /* ConstantTypes.CAN_STRINGIFY */;\n            }\n            else {\n                node.constType = 2 /* ConstantTypes.CAN_HOIST */;\n            }\n        }\n        return node;\n    }\n    let ast;\n    // exp needs to be parsed differently:\n    // 1. Multiple inline statements (v-on, with presence of `;`): parse as raw\n    //    exp, but make sure to pad with spaces for consistent ranges\n    // 2. Expressions: wrap with parens (for e.g. object expressions)\n    // 3. Function arguments (v-for, v-slot): place in a function argument position\n    const source = asRawStatements\n        ? ` ${rawExp} `\n        : `(${rawExp})${asParams ? `=>{}` : ``}`;\n    try {\n        ast = parse_1$1(source, {\n            plugins: context.expressionPlugins\n        }).program;\n    }\n    catch (e) {\n        context.onError(createCompilerError(45 /* ErrorCodes.X_INVALID_EXPRESSION */, node.loc, undefined, e.message));\n        return node;\n    }\n    const ids = [];\n    const parentStack = [];\n    const knownIds = Object.create(context.identifiers);\n    walkIdentifiers(ast, (node, parent, _, isReferenced, isLocal) => {\n        if (isStaticPropertyKey(node, parent)) {\n            return;\n        }\n        const needPrefix = isReferenced && canPrefix(node);\n        if (needPrefix && !isLocal) {\n            if (isStaticProperty(parent) && parent.shorthand) {\n                node.prefix = `${node.name}: `;\n            }\n            node.name = rewriteIdentifier(node.name, parent, node);\n            ids.push(node);\n        }\n        else {\n            // The identifier is considered constant unless it's pointing to a\n            // local scope variable (a v-for alias, or a v-slot prop)\n            if (!(needPrefix && isLocal) && !bailConstant) {\n                node.isConstant = true;\n            }\n            // also generate sub-expressions for other identifiers for better\n            // source map support. (except for property keys which are static)\n            ids.push(node);\n        }\n    }, true, // invoke on ALL identifiers\n    parentStack, knownIds);\n    // We break up the compound expression into an array of strings and sub\n    // expressions (for identifiers that have been prefixed). In codegen, if\n    // an ExpressionNode has the `.children` property, it will be used instead of\n    // `.content`.\n    const children = [];\n    ids.sort((a, b) => a.start - b.start);\n    ids.forEach((id, i) => {\n        // range is offset by -1 due to the wrapping parens when parsed\n        const start = id.start - 1;\n        const end = id.end - 1;\n        const last = ids[i - 1];\n        const leadingText = rawExp.slice(last ? last.end - 1 : 0, start);\n        if (leadingText.length || id.prefix) {\n            children.push(leadingText + (id.prefix || ``));\n        }\n        const source = rawExp.slice(start, end);\n        children.push(createSimpleExpression(id.name, false, {\n            source,\n            start: advancePositionWithClone(node.loc.start, source, start),\n            end: advancePositionWithClone(node.loc.start, source, end)\n        }, id.isConstant ? 3 /* ConstantTypes.CAN_STRINGIFY */ : 0 /* ConstantTypes.NOT_CONSTANT */));\n        if (i === ids.length - 1 && end < rawExp.length) {\n            children.push(rawExp.slice(end));\n        }\n    });\n    let ret;\n    if (children.length) {\n        ret = createCompoundExpression(children, node.loc);\n    }\n    else {\n        ret = node;\n        ret.constType = bailConstant\n            ? 0 /* ConstantTypes.NOT_CONSTANT */\n            : 3 /* ConstantTypes.CAN_STRINGIFY */;\n    }\n    ret.identifiers = Object.keys(knownIds);\n    return ret;\n}\nfunction canPrefix(id) {\n    // skip whitelisted globals\n    if (isGloballyWhitelisted(id.name)) {\n        return false;\n    }\n    // special case for webpack compilation\n    if (id.name === 'require') {\n        return false;\n    }\n    return true;\n}\nfunction stringifyExpression(exp) {\n    if (isString$2(exp)) {\n        return exp;\n    }\n    else if (exp.type === 4 /* NodeTypes.SIMPLE_EXPRESSION */) {\n        return exp.content;\n    }\n    else {\n        return exp.children\n            .map(stringifyExpression)\n            .join('');\n    }\n}\n\nconst transformIf = createStructuralDirectiveTransform(/^(if|else|else-if)$/, (node, dir, context) => {\n    return processIf(node, dir, context, (ifNode, branch, isRoot) => {\n        // #1587: We need to dynamically increment the key based on the current\n        // node's sibling nodes, since chained v-if/else branches are\n        // rendered at the same depth\n        const siblings = context.parent.children;\n        let i = siblings.indexOf(ifNode);\n        let key = 0;\n        while (i-- >= 0) {\n            const sibling = siblings[i];\n            if (sibling && sibling.type === 9 /* NodeTypes.IF */) {\n                key += sibling.branches.length;\n            }\n        }\n        // Exit callback. Complete the codegenNode when all children have been\n        // transformed.\n        return () => {\n            if (isRoot) {\n                ifNode.codegenNode = createCodegenNodeForBranch(branch, key, context);\n            }\n            else {\n                // attach this branch's codegen node to the v-if root.\n                const parentCondition = getParentCondition(ifNode.codegenNode);\n                parentCondition.alternate = createCodegenNodeForBranch(branch, key + ifNode.branches.length - 1, context);\n            }\n        };\n    });\n});\n// target-agnostic transform used for both Client and SSR\nfunction processIf(node, dir, context, processCodegen) {\n    if (dir.name !== 'else' &&\n        (!dir.exp || !dir.exp.content.trim())) {\n        const loc = dir.exp ? dir.exp.loc : node.loc;\n        context.onError(createCompilerError(28 /* ErrorCodes.X_V_IF_NO_EXPRESSION */, dir.loc));\n        dir.exp = createSimpleExpression(`true`, false, loc);\n    }\n    if (context.prefixIdentifiers && dir.exp) {\n        // dir.exp can only be simple expression because vIf transform is applied\n        // before expression transform.\n        dir.exp = processExpression(dir.exp, context);\n    }\n    if (dir.name === 'if') {\n        const branch = createIfBranch(node, dir);\n        const ifNode = {\n            type: 9 /* NodeTypes.IF */,\n            loc: node.loc,\n            branches: [branch]\n        };\n        context.replaceNode(ifNode);\n        if (processCodegen) {\n            return processCodegen(ifNode, branch, true);\n        }\n    }\n    else {\n        // locate the adjacent v-if\n        const siblings = context.parent.children;\n        const comments = [];\n        let i = siblings.indexOf(node);\n        while (i-- >= -1) {\n            const sibling = siblings[i];\n            if (sibling && sibling.type === 3 /* NodeTypes.COMMENT */) {\n                context.removeNode(sibling);\n                comments.unshift(sibling);\n                continue;\n            }\n            if (sibling &&\n                sibling.type === 2 /* NodeTypes.TEXT */ &&\n                !sibling.content.trim().length) {\n                context.removeNode(sibling);\n                continue;\n            }\n            if (sibling && sibling.type === 9 /* NodeTypes.IF */) {\n                // Check if v-else was followed by v-else-if\n                if (dir.name === 'else-if' &&\n                    sibling.branches[sibling.branches.length - 1].condition === undefined) {\n                    context.onError(createCompilerError(30 /* ErrorCodes.X_V_ELSE_NO_ADJACENT_IF */, node.loc));\n                }\n                // move the node to the if node's branches\n                context.removeNode();\n                const branch = createIfBranch(node, dir);\n                if (comments.length &&\n                    // #3619 ignore comments if the v-if is direct child of <transition>\n                    !(context.parent &&\n                        context.parent.type === 1 /* NodeTypes.ELEMENT */ &&\n                        isBuiltInType(context.parent.tag, 'transition'))) {\n                    branch.children = [...comments, ...branch.children];\n                }\n                // check if user is forcing same key on different branches\n                {\n                    const key = branch.userKey;\n                    if (key) {\n                        sibling.branches.forEach(({ userKey }) => {\n                            if (isSameKey(userKey, key)) {\n                                context.onError(createCompilerError(29 /* ErrorCodes.X_V_IF_SAME_KEY */, branch.userKey.loc));\n                            }\n                        });\n                    }\n                }\n                sibling.branches.push(branch);\n                const onExit = processCodegen && processCodegen(sibling, branch, false);\n                // since the branch was removed, it will not be traversed.\n                // make sure to traverse here.\n                traverseNode(branch, context);\n                // call on exit\n                if (onExit)\n                    onExit();\n                // make sure to reset currentNode after traversal to indicate this\n                // node has been removed.\n                context.currentNode = null;\n            }\n            else {\n                context.onError(createCompilerError(30 /* ErrorCodes.X_V_ELSE_NO_ADJACENT_IF */, node.loc));\n            }\n            break;\n        }\n    }\n}\nfunction createIfBranch(node, dir) {\n    const isTemplateIf = node.tagType === 3 /* ElementTypes.TEMPLATE */;\n    return {\n        type: 10 /* NodeTypes.IF_BRANCH */,\n        loc: node.loc,\n        condition: dir.name === 'else' ? undefined : dir.exp,\n        children: isTemplateIf && !findDir(node, 'for') ? node.children : [node],\n        userKey: findProp(node, `key`),\n        isTemplateIf\n    };\n}\nfunction createCodegenNodeForBranch(branch, keyIndex, context) {\n    if (branch.condition) {\n        return createConditionalExpression(branch.condition, createChildrenCodegenNode(branch, keyIndex, context), \n        // make sure to pass in asBlock: true so that the comment node call\n        // closes the current block.\n        createCallExpression(context.helper(CREATE_COMMENT), [\n            '\"v-if\"' ,\n            'true'\n        ]));\n    }\n    else {\n        return createChildrenCodegenNode(branch, keyIndex, context);\n    }\n}\nfunction createChildrenCodegenNode(branch, keyIndex, context) {\n    const { helper } = context;\n    const keyProperty = createObjectProperty(`key`, createSimpleExpression(`${keyIndex}`, false, locStub, 2 /* ConstantTypes.CAN_HOIST */));\n    const { children } = branch;\n    const firstChild = children[0];\n    const needFragmentWrapper = children.length !== 1 || firstChild.type !== 1 /* NodeTypes.ELEMENT */;\n    if (needFragmentWrapper) {\n        if (children.length === 1 && firstChild.type === 11 /* NodeTypes.FOR */) {\n            // optimize away nested fragments when child is a ForNode\n            const vnodeCall = firstChild.codegenNode;\n            injectProp(vnodeCall, keyProperty, context);\n            return vnodeCall;\n        }\n        else {\n            let patchFlag = 64 /* PatchFlags.STABLE_FRAGMENT */;\n            let patchFlagText = PatchFlagNames[64 /* PatchFlags.STABLE_FRAGMENT */];\n            // check if the fragment actually contains a single valid child with\n            // the rest being comments\n            if (!branch.isTemplateIf &&\n                children.filter(c => c.type !== 3 /* NodeTypes.COMMENT */).length === 1) {\n                patchFlag |= 2048 /* PatchFlags.DEV_ROOT_FRAGMENT */;\n                patchFlagText += `, ${PatchFlagNames[2048 /* PatchFlags.DEV_ROOT_FRAGMENT */]}`;\n            }\n            return createVNodeCall(context, helper(FRAGMENT), createObjectExpression([keyProperty]), children, patchFlag + (` /* ${patchFlagText} */` ), undefined, undefined, true, false, false /* isComponent */, branch.loc);\n        }\n    }\n    else {\n        const ret = firstChild.codegenNode;\n        const vnodeCall = getMemoedVNodeCall(ret);\n        // Change createVNode to createBlock.\n        if (vnodeCall.type === 13 /* NodeTypes.VNODE_CALL */) {\n            makeBlock(vnodeCall, context);\n        }\n        // inject branch key\n        injectProp(vnodeCall, keyProperty, context);\n        return ret;\n    }\n}\nfunction isSameKey(a, b) {\n    if (!a || a.type !== b.type) {\n        return false;\n    }\n    if (a.type === 6 /* NodeTypes.ATTRIBUTE */) {\n        if (a.value.content !== b.value.content) {\n            return false;\n        }\n    }\n    else {\n        // directive\n        const exp = a.exp;\n        const branchExp = b.exp;\n        if (exp.type !== branchExp.type) {\n            return false;\n        }\n        if (exp.type !== 4 /* NodeTypes.SIMPLE_EXPRESSION */ ||\n            exp.isStatic !== branchExp.isStatic ||\n            exp.content !== branchExp.content) {\n            return false;\n        }\n    }\n    return true;\n}\nfunction getParentCondition(node) {\n    while (true) {\n        if (node.type === 19 /* NodeTypes.JS_CONDITIONAL_EXPRESSION */) {\n            if (node.alternate.type === 19 /* NodeTypes.JS_CONDITIONAL_EXPRESSION */) {\n                node = node.alternate;\n            }\n            else {\n                return node;\n            }\n        }\n        else if (node.type === 20 /* NodeTypes.JS_CACHE_EXPRESSION */) {\n            node = node.value;\n        }\n    }\n}\n\nconst transformFor = createStructuralDirectiveTransform('for', (node, dir, context) => {\n    const { helper, removeHelper } = context;\n    return processFor(node, dir, context, forNode => {\n        // create the loop render function expression now, and add the\n        // iterator on exit after all children have been traversed\n        const renderExp = createCallExpression(helper(RENDER_LIST), [\n            forNode.source\n        ]);\n        const isTemplate = isTemplateNode(node);\n        const memo = findDir(node, 'memo');\n        const keyProp = findProp(node, `key`);\n        const keyExp = keyProp &&\n            (keyProp.type === 6 /* NodeTypes.ATTRIBUTE */\n                ? createSimpleExpression(keyProp.value.content, true)\n                : keyProp.exp);\n        const keyProperty = keyProp ? createObjectProperty(`key`, keyExp) : null;\n        if (isTemplate) {\n            // #2085 / #5288 process :key and v-memo expressions need to be\n            // processed on `<template v-for>`. In this case the node is discarded\n            // and never traversed so its binding expressions won't be processed\n            // by the normal transforms.\n            if (memo) {\n                memo.exp = processExpression(memo.exp, context);\n            }\n            if (keyProperty && keyProp.type !== 6 /* NodeTypes.ATTRIBUTE */) {\n                keyProperty.value = processExpression(keyProperty.value, context);\n            }\n        }\n        const isStableFragment = forNode.source.type === 4 /* NodeTypes.SIMPLE_EXPRESSION */ &&\n            forNode.source.constType > 0 /* ConstantTypes.NOT_CONSTANT */;\n        const fragmentFlag = isStableFragment\n            ? 64 /* PatchFlags.STABLE_FRAGMENT */\n            : keyProp\n                ? 128 /* PatchFlags.KEYED_FRAGMENT */\n                : 256 /* PatchFlags.UNKEYED_FRAGMENT */;\n        forNode.codegenNode = createVNodeCall(context, helper(FRAGMENT), undefined, renderExp, fragmentFlag +\n            (` /* ${PatchFlagNames[fragmentFlag]} */` ), undefined, undefined, true /* isBlock */, !isStableFragment /* disableTracking */, false /* isComponent */, node.loc);\n        return () => {\n            // finish the codegen now that all children have been traversed\n            let childBlock;\n            const { children } = forNode;\n            // check <template v-for> key placement\n            if (isTemplate) {\n                node.children.some(c => {\n                    if (c.type === 1 /* NodeTypes.ELEMENT */) {\n                        const key = findProp(c, 'key');\n                        if (key) {\n                            context.onError(createCompilerError(33 /* ErrorCodes.X_V_FOR_TEMPLATE_KEY_PLACEMENT */, key.loc));\n                            return true;\n                        }\n                    }\n                });\n            }\n            const needFragmentWrapper = children.length !== 1 || children[0].type !== 1 /* NodeTypes.ELEMENT */;\n            const slotOutlet = isSlotOutlet(node)\n                ? node\n                : isTemplate &&\n                    node.children.length === 1 &&\n                    isSlotOutlet(node.children[0])\n                    ? node.children[0] // api-extractor somehow fails to infer this\n                    : null;\n            if (slotOutlet) {\n                // <slot v-for=\"...\"> or <template v-for=\"...\"><slot/></template>\n                childBlock = slotOutlet.codegenNode;\n                if (isTemplate && keyProperty) {\n                    // <template v-for=\"...\" :key=\"...\"><slot/></template>\n                    // we need to inject the key to the renderSlot() call.\n                    // the props for renderSlot is passed as the 3rd argument.\n                    injectProp(childBlock, keyProperty, context);\n                }\n            }\n            else if (needFragmentWrapper) {\n                // <template v-for=\"...\"> with text or multi-elements\n                // should generate a fragment block for each loop\n                childBlock = createVNodeCall(context, helper(FRAGMENT), keyProperty ? createObjectExpression([keyProperty]) : undefined, node.children, 64 /* PatchFlags.STABLE_FRAGMENT */ +\n                    (` /* ${PatchFlagNames[64 /* PatchFlags.STABLE_FRAGMENT */]} */`\n                        ), undefined, undefined, true, undefined, false /* isComponent */);\n            }\n            else {\n                // Normal element v-for. Directly use the child's codegenNode\n                // but mark it as a block.\n                childBlock = children[0]\n                    .codegenNode;\n                if (isTemplate && keyProperty) {\n                    injectProp(childBlock, keyProperty, context);\n                }\n                if (childBlock.isBlock !== !isStableFragment) {\n                    if (childBlock.isBlock) {\n                        // switch from block to vnode\n                        removeHelper(OPEN_BLOCK);\n                        removeHelper(getVNodeBlockHelper(context.inSSR, childBlock.isComponent));\n                    }\n                    else {\n                        // switch from vnode to block\n                        removeHelper(getVNodeHelper(context.inSSR, childBlock.isComponent));\n                    }\n                }\n                childBlock.isBlock = !isStableFragment;\n                if (childBlock.isBlock) {\n                    helper(OPEN_BLOCK);\n                    helper(getVNodeBlockHelper(context.inSSR, childBlock.isComponent));\n                }\n                else {\n                    helper(getVNodeHelper(context.inSSR, childBlock.isComponent));\n                }\n            }\n            if (memo) {\n                const loop = createFunctionExpression(createForLoopParams(forNode.parseResult, [\n                    createSimpleExpression(`_cached`)\n                ]));\n                loop.body = createBlockStatement([\n                    createCompoundExpression([`const _memo = (`, memo.exp, `)`]),\n                    createCompoundExpression([\n                        `if (_cached`,\n                        ...(keyExp ? [` && _cached.key === `, keyExp] : []),\n                        ` && ${context.helperString(IS_MEMO_SAME)}(_cached, _memo)) return _cached`\n                    ]),\n                    createCompoundExpression([`const _item = `, childBlock]),\n                    createSimpleExpression(`_item.memo = _memo`),\n                    createSimpleExpression(`return _item`)\n                ]);\n                renderExp.arguments.push(loop, createSimpleExpression(`_cache`), createSimpleExpression(String(context.cached++)));\n            }\n            else {\n                renderExp.arguments.push(createFunctionExpression(createForLoopParams(forNode.parseResult), childBlock, true /* force newline */));\n            }\n        };\n    });\n});\n// target-agnostic transform used for both Client and SSR\nfunction processFor(node, dir, context, processCodegen) {\n    if (!dir.exp) {\n        context.onError(createCompilerError(31 /* ErrorCodes.X_V_FOR_NO_EXPRESSION */, dir.loc));\n        return;\n    }\n    const parseResult = parseForExpression(\n    // can only be simple expression because vFor transform is applied\n    // before expression transform.\n    dir.exp, context);\n    if (!parseResult) {\n        context.onError(createCompilerError(32 /* ErrorCodes.X_V_FOR_MALFORMED_EXPRESSION */, dir.loc));\n        return;\n    }\n    const { addIdentifiers, removeIdentifiers, scopes } = context;\n    const { source, value, key, index } = parseResult;\n    const forNode = {\n        type: 11 /* NodeTypes.FOR */,\n        loc: dir.loc,\n        source,\n        valueAlias: value,\n        keyAlias: key,\n        objectIndexAlias: index,\n        parseResult,\n        children: isTemplateNode(node) ? node.children : [node]\n    };\n    context.replaceNode(forNode);\n    // bookkeeping\n    scopes.vFor++;\n    if (context.prefixIdentifiers) {\n        // scope management\n        // inject identifiers to context\n        value && addIdentifiers(value);\n        key && addIdentifiers(key);\n        index && addIdentifiers(index);\n    }\n    const onExit = processCodegen && processCodegen(forNode);\n    return () => {\n        scopes.vFor--;\n        if (context.prefixIdentifiers) {\n            value && removeIdentifiers(value);\n            key && removeIdentifiers(key);\n            index && removeIdentifiers(index);\n        }\n        if (onExit)\n            onExit();\n    };\n}\nconst forAliasRE$1 = /([\\s\\S]*?)\\s+(?:in|of)\\s+([\\s\\S]*)/;\n// This regex doesn't cover the case if key or index aliases have destructuring,\n// but those do not make sense in the first place, so this works in practice.\nconst forIteratorRE = /,([^,\\}\\]]*)(?:,([^,\\}\\]]*))?$/;\nconst stripParensRE = /^\\(|\\)$/g;\nfunction parseForExpression(input, context) {\n    const loc = input.loc;\n    const exp = input.content;\n    const inMatch = exp.match(forAliasRE$1);\n    if (!inMatch)\n        return;\n    const [, LHS, RHS] = inMatch;\n    const result = {\n        source: createAliasExpression(loc, RHS.trim(), exp.indexOf(RHS, LHS.length)),\n        value: undefined,\n        key: undefined,\n        index: undefined\n    };\n    if (context.prefixIdentifiers) {\n        result.source = processExpression(result.source, context);\n    }\n    let valueContent = LHS.trim().replace(stripParensRE, '').trim();\n    const trimmedOffset = LHS.indexOf(valueContent);\n    const iteratorMatch = valueContent.match(forIteratorRE);\n    if (iteratorMatch) {\n        valueContent = valueContent.replace(forIteratorRE, '').trim();\n        const keyContent = iteratorMatch[1].trim();\n        let keyOffset;\n        if (keyContent) {\n            keyOffset = exp.indexOf(keyContent, trimmedOffset + valueContent.length);\n            result.key = createAliasExpression(loc, keyContent, keyOffset);\n            if (context.prefixIdentifiers) {\n                result.key = processExpression(result.key, context, true);\n            }\n        }\n        if (iteratorMatch[2]) {\n            const indexContent = iteratorMatch[2].trim();\n            if (indexContent) {\n                result.index = createAliasExpression(loc, indexContent, exp.indexOf(indexContent, result.key\n                    ? keyOffset + keyContent.length\n                    : trimmedOffset + valueContent.length));\n                if (context.prefixIdentifiers) {\n                    result.index = processExpression(result.index, context, true);\n                }\n            }\n        }\n    }\n    if (valueContent) {\n        result.value = createAliasExpression(loc, valueContent, trimmedOffset);\n        if (context.prefixIdentifiers) {\n            result.value = processExpression(result.value, context, true);\n        }\n    }\n    return result;\n}\nfunction createAliasExpression(range, content, offset) {\n    return createSimpleExpression(content, false, getInnerRange(range, offset, content.length));\n}\nfunction createForLoopParams({ value, key, index }, memoArgs = []) {\n    return createParamsList([value, key, index, ...memoArgs]);\n}\nfunction createParamsList(args) {\n    let i = args.length;\n    while (i--) {\n        if (args[i])\n            break;\n    }\n    return args\n        .slice(0, i + 1)\n        .map((arg, i) => arg || createSimpleExpression(`_`.repeat(i + 1), false));\n}\n\nconst defaultFallback = createSimpleExpression(`undefined`, false);\n// A NodeTransform that:\n// 1. Tracks scope identifiers for scoped slots so that they don't get prefixed\n//    by transformExpression. This is only applied in non-browser builds with\n//    { prefixIdentifiers: true }.\n// 2. Track v-slot depths so that we know a slot is inside another slot.\n//    Note the exit callback is executed before buildSlots() on the same node,\n//    so only nested slots see positive numbers.\nconst trackSlotScopes = (node, context) => {\n    if (node.type === 1 /* NodeTypes.ELEMENT */ &&\n        (node.tagType === 1 /* ElementTypes.COMPONENT */ ||\n            node.tagType === 3 /* ElementTypes.TEMPLATE */)) {\n        // We are only checking non-empty v-slot here\n        // since we only care about slots that introduce scope variables.\n        const vSlot = findDir(node, 'slot');\n        if (vSlot) {\n            const slotProps = vSlot.exp;\n            if (context.prefixIdentifiers) {\n                slotProps && context.addIdentifiers(slotProps);\n            }\n            context.scopes.vSlot++;\n            return () => {\n                if (context.prefixIdentifiers) {\n                    slotProps && context.removeIdentifiers(slotProps);\n                }\n                context.scopes.vSlot--;\n            };\n        }\n    }\n};\n// A NodeTransform that tracks scope identifiers for scoped slots with v-for.\n// This transform is only applied in non-browser builds with { prefixIdentifiers: true }\nconst trackVForSlotScopes = (node, context) => {\n    let vFor;\n    if (isTemplateNode(node) &&\n        node.props.some(isVSlot) &&\n        (vFor = findDir(node, 'for'))) {\n        const result = (vFor.parseResult = parseForExpression(vFor.exp, context));\n        if (result) {\n            const { value, key, index } = result;\n            const { addIdentifiers, removeIdentifiers } = context;\n            value && addIdentifiers(value);\n            key && addIdentifiers(key);\n            index && addIdentifiers(index);\n            return () => {\n                value && removeIdentifiers(value);\n                key && removeIdentifiers(key);\n                index && removeIdentifiers(index);\n            };\n        }\n    }\n};\nconst buildClientSlotFn = (props, children, loc) => createFunctionExpression(props, children, false /* newline */, true /* isSlot */, children.length ? children[0].loc : loc);\n// Instead of being a DirectiveTransform, v-slot processing is called during\n// transformElement to build the slots object for a component.\nfunction buildSlots(node, context, buildSlotFn = buildClientSlotFn) {\n    context.helper(WITH_CTX);\n    const { children, loc } = node;\n    const slotsProperties = [];\n    const dynamicSlots = [];\n    // If the slot is inside a v-for or another v-slot, force it to be dynamic\n    // since it likely uses a scope variable.\n    let hasDynamicSlots = context.scopes.vSlot > 0 || context.scopes.vFor > 0;\n    // with `prefixIdentifiers: true`, this can be further optimized to make\n    // it dynamic only when the slot actually uses the scope variables.\n    if (!context.ssr && context.prefixIdentifiers) {\n        hasDynamicSlots = hasScopeRef(node, context.identifiers);\n    }\n    // 1. Check for slot with slotProps on component itself.\n    //    <Comp v-slot=\"{ prop }\"/>\n    const onComponentSlot = findDir(node, 'slot', true);\n    if (onComponentSlot) {\n        const { arg, exp } = onComponentSlot;\n        if (arg && !isStaticExp(arg)) {\n            hasDynamicSlots = true;\n        }\n        slotsProperties.push(createObjectProperty(arg || createSimpleExpression('default', true), buildSlotFn(exp, children, loc)));\n    }\n    // 2. Iterate through children and check for template slots\n    //    <template v-slot:foo=\"{ prop }\">\n    let hasTemplateSlots = false;\n    let hasNamedDefaultSlot = false;\n    const implicitDefaultChildren = [];\n    const seenSlotNames = new Set();\n    let conditionalBranchIndex = 0;\n    for (let i = 0; i < children.length; i++) {\n        const slotElement = children[i];\n        let slotDir;\n        if (!isTemplateNode(slotElement) ||\n            !(slotDir = findDir(slotElement, 'slot', true))) {\n            // not a <template v-slot>, skip.\n            if (slotElement.type !== 3 /* NodeTypes.COMMENT */) {\n                implicitDefaultChildren.push(slotElement);\n            }\n            continue;\n        }\n        if (onComponentSlot) {\n            // already has on-component slot - this is incorrect usage.\n            context.onError(createCompilerError(37 /* ErrorCodes.X_V_SLOT_MIXED_SLOT_USAGE */, slotDir.loc));\n            break;\n        }\n        hasTemplateSlots = true;\n        const { children: slotChildren, loc: slotLoc } = slotElement;\n        const { arg: slotName = createSimpleExpression(`default`, true), exp: slotProps, loc: dirLoc } = slotDir;\n        // check if name is dynamic.\n        let staticSlotName;\n        if (isStaticExp(slotName)) {\n            staticSlotName = slotName ? slotName.content : `default`;\n        }\n        else {\n            hasDynamicSlots = true;\n        }\n        const slotFunction = buildSlotFn(slotProps, slotChildren, slotLoc);\n        // check if this slot is conditional (v-if/v-for)\n        let vIf;\n        let vElse;\n        let vFor;\n        if ((vIf = findDir(slotElement, 'if'))) {\n            hasDynamicSlots = true;\n            dynamicSlots.push(createConditionalExpression(vIf.exp, buildDynamicSlot(slotName, slotFunction, conditionalBranchIndex++), defaultFallback));\n        }\n        else if ((vElse = findDir(slotElement, /^else(-if)?$/, true /* allowEmpty */))) {\n            // find adjacent v-if\n            let j = i;\n            let prev;\n            while (j--) {\n                prev = children[j];\n                if (prev.type !== 3 /* NodeTypes.COMMENT */) {\n                    break;\n                }\n            }\n            if (prev && isTemplateNode(prev) && findDir(prev, 'if')) {\n                // remove node\n                children.splice(i, 1);\n                i--;\n                // attach this slot to previous conditional\n                let conditional = dynamicSlots[dynamicSlots.length - 1];\n                while (conditional.alternate.type === 19 /* NodeTypes.JS_CONDITIONAL_EXPRESSION */) {\n                    conditional = conditional.alternate;\n                }\n                conditional.alternate = vElse.exp\n                    ? createConditionalExpression(vElse.exp, buildDynamicSlot(slotName, slotFunction, conditionalBranchIndex++), defaultFallback)\n                    : buildDynamicSlot(slotName, slotFunction, conditionalBranchIndex++);\n            }\n            else {\n                context.onError(createCompilerError(30 /* ErrorCodes.X_V_ELSE_NO_ADJACENT_IF */, vElse.loc));\n            }\n        }\n        else if ((vFor = findDir(slotElement, 'for'))) {\n            hasDynamicSlots = true;\n            const parseResult = vFor.parseResult ||\n                parseForExpression(vFor.exp, context);\n            if (parseResult) {\n                // Render the dynamic slots as an array and add it to the createSlot()\n                // args. The runtime knows how to handle it appropriately.\n                dynamicSlots.push(createCallExpression(context.helper(RENDER_LIST), [\n                    parseResult.source,\n                    createFunctionExpression(createForLoopParams(parseResult), buildDynamicSlot(slotName, slotFunction), true /* force newline */)\n                ]));\n            }\n            else {\n                context.onError(createCompilerError(32 /* ErrorCodes.X_V_FOR_MALFORMED_EXPRESSION */, vFor.loc));\n            }\n        }\n        else {\n            // check duplicate static names\n            if (staticSlotName) {\n                if (seenSlotNames.has(staticSlotName)) {\n                    context.onError(createCompilerError(38 /* ErrorCodes.X_V_SLOT_DUPLICATE_SLOT_NAMES */, dirLoc));\n                    continue;\n                }\n                seenSlotNames.add(staticSlotName);\n                if (staticSlotName === 'default') {\n                    hasNamedDefaultSlot = true;\n                }\n            }\n            slotsProperties.push(createObjectProperty(slotName, slotFunction));\n        }\n    }\n    if (!onComponentSlot) {\n        const buildDefaultSlotProperty = (props, children) => {\n            const fn = buildSlotFn(props, children, loc);\n            return createObjectProperty(`default`, fn);\n        };\n        if (!hasTemplateSlots) {\n            // implicit default slot (on component)\n            slotsProperties.push(buildDefaultSlotProperty(undefined, children));\n        }\n        else if (implicitDefaultChildren.length &&\n            // #3766\n            // with whitespace: 'preserve', whitespaces between slots will end up in\n            // implicitDefaultChildren. Ignore if all implicit children are whitespaces.\n            implicitDefaultChildren.some(node => isNonWhitespaceContent(node))) {\n            // implicit default slot (mixed with named slots)\n            if (hasNamedDefaultSlot) {\n                context.onError(createCompilerError(39 /* ErrorCodes.X_V_SLOT_EXTRANEOUS_DEFAULT_SLOT_CHILDREN */, implicitDefaultChildren[0].loc));\n            }\n            else {\n                slotsProperties.push(buildDefaultSlotProperty(undefined, implicitDefaultChildren));\n            }\n        }\n    }\n    const slotFlag = hasDynamicSlots\n        ? 2 /* SlotFlags.DYNAMIC */\n        : hasForwardedSlots(node.children)\n            ? 3 /* SlotFlags.FORWARDED */\n            : 1 /* SlotFlags.STABLE */;\n    let slots = createObjectExpression(slotsProperties.concat(createObjectProperty(`_`, \n    // 2 = compiled but dynamic = can skip normalization, but must run diff\n    // 1 = compiled and static = can skip normalization AND diff as optimized\n    createSimpleExpression(slotFlag + (` /* ${slotFlagsText[slotFlag]} */` ), false))), loc);\n    if (dynamicSlots.length) {\n        slots = createCallExpression(context.helper(CREATE_SLOTS), [\n            slots,\n            createArrayExpression(dynamicSlots)\n        ]);\n    }\n    return {\n        slots,\n        hasDynamicSlots\n    };\n}\nfunction buildDynamicSlot(name, fn, index) {\n    const props = [\n        createObjectProperty(`name`, name),\n        createObjectProperty(`fn`, fn)\n    ];\n    if (index != null) {\n        props.push(createObjectProperty(`key`, createSimpleExpression(String(index), true)));\n    }\n    return createObjectExpression(props);\n}\nfunction hasForwardedSlots(children) {\n    for (let i = 0; i < children.length; i++) {\n        const child = children[i];\n        switch (child.type) {\n            case 1 /* NodeTypes.ELEMENT */:\n                if (child.tagType === 2 /* ElementTypes.SLOT */ ||\n                    hasForwardedSlots(child.children)) {\n                    return true;\n                }\n                break;\n            case 9 /* NodeTypes.IF */:\n                if (hasForwardedSlots(child.branches))\n                    return true;\n                break;\n            case 10 /* NodeTypes.IF_BRANCH */:\n            case 11 /* NodeTypes.FOR */:\n                if (hasForwardedSlots(child.children))\n                    return true;\n                break;\n        }\n    }\n    return false;\n}\nfunction isNonWhitespaceContent(node) {\n    if (node.type !== 2 /* NodeTypes.TEXT */ && node.type !== 12 /* NodeTypes.TEXT_CALL */)\n        return true;\n    return node.type === 2 /* NodeTypes.TEXT */\n        ? !!node.content.trim()\n        : isNonWhitespaceContent(node.content);\n}\n\n// some directive transforms (e.g. v-model) may return a symbol for runtime\n// import, which should be used instead of a resolveDirective call.\nconst directiveImportMap = new WeakMap();\n// generate a JavaScript AST for this element's codegen\nconst transformElement = (node, context) => {\n    // perform the work on exit, after all child expressions have been\n    // processed and merged.\n    return function postTransformElement() {\n        node = context.currentNode;\n        if (!(node.type === 1 /* NodeTypes.ELEMENT */ &&\n            (node.tagType === 0 /* ElementTypes.ELEMENT */ ||\n                node.tagType === 1 /* ElementTypes.COMPONENT */))) {\n            return;\n        }\n        const { tag, props } = node;\n        const isComponent = node.tagType === 1 /* ElementTypes.COMPONENT */;\n        // The goal of the transform is to create a codegenNode implementing the\n        // VNodeCall interface.\n        let vnodeTag = isComponent\n            ? resolveComponentType(node, context)\n            : `\"${tag}\"`;\n        const isDynamicComponent = isObject$2(vnodeTag) && vnodeTag.callee === RESOLVE_DYNAMIC_COMPONENT;\n        let vnodeProps;\n        let vnodeChildren;\n        let vnodePatchFlag;\n        let patchFlag = 0;\n        let vnodeDynamicProps;\n        let dynamicPropNames;\n        let vnodeDirectives;\n        let shouldUseBlock = \n        // dynamic component may resolve to plain elements\n        isDynamicComponent ||\n            vnodeTag === TELEPORT ||\n            vnodeTag === SUSPENSE ||\n            (!isComponent &&\n                // <svg> and <foreignObject> must be forced into blocks so that block\n                // updates inside get proper isSVG flag at runtime. (#639, #643)\n                // This is technically web-specific, but splitting the logic out of core\n                // leads to too much unnecessary complexity.\n                (tag === 'svg' || tag === 'foreignObject'));\n        // props\n        if (props.length > 0) {\n            const propsBuildResult = buildProps(node, context, undefined, isComponent, isDynamicComponent);\n            vnodeProps = propsBuildResult.props;\n            patchFlag = propsBuildResult.patchFlag;\n            dynamicPropNames = propsBuildResult.dynamicPropNames;\n            const directives = propsBuildResult.directives;\n            vnodeDirectives =\n                directives && directives.length\n                    ? createArrayExpression(directives.map(dir => buildDirectiveArgs(dir, context)))\n                    : undefined;\n            if (propsBuildResult.shouldUseBlock) {\n                shouldUseBlock = true;\n            }\n        }\n        // children\n        if (node.children.length > 0) {\n            if (vnodeTag === KEEP_ALIVE) {\n                // Although a built-in component, we compile KeepAlive with raw children\n                // instead of slot functions so that it can be used inside Transition\n                // or other Transition-wrapping HOCs.\n                // To ensure correct updates with block optimizations, we need to:\n                // 1. Force keep-alive into a block. This avoids its children being\n                //    collected by a parent block.\n                shouldUseBlock = true;\n                // 2. Force keep-alive to always be updated, since it uses raw children.\n                patchFlag |= 1024 /* PatchFlags.DYNAMIC_SLOTS */;\n                if (node.children.length > 1) {\n                    context.onError(createCompilerError(46 /* ErrorCodes.X_KEEP_ALIVE_INVALID_CHILDREN */, {\n                        start: node.children[0].loc.start,\n                        end: node.children[node.children.length - 1].loc.end,\n                        source: ''\n                    }));\n                }\n            }\n            const shouldBuildAsSlots = isComponent &&\n                // Teleport is not a real component and has dedicated runtime handling\n                vnodeTag !== TELEPORT &&\n                // explained above.\n                vnodeTag !== KEEP_ALIVE;\n            if (shouldBuildAsSlots) {\n                const { slots, hasDynamicSlots } = buildSlots(node, context);\n                vnodeChildren = slots;\n                if (hasDynamicSlots) {\n                    patchFlag |= 1024 /* PatchFlags.DYNAMIC_SLOTS */;\n                }\n            }\n            else if (node.children.length === 1 && vnodeTag !== TELEPORT) {\n                const child = node.children[0];\n                const type = child.type;\n                // check for dynamic text children\n                const hasDynamicTextChild = type === 5 /* NodeTypes.INTERPOLATION */ ||\n                    type === 8 /* NodeTypes.COMPOUND_EXPRESSION */;\n                if (hasDynamicTextChild &&\n                    getConstantType(child, context) === 0 /* ConstantTypes.NOT_CONSTANT */) {\n                    patchFlag |= 1 /* PatchFlags.TEXT */;\n                }\n                // pass directly if the only child is a text node\n                // (plain / interpolation / expression)\n                if (hasDynamicTextChild || type === 2 /* NodeTypes.TEXT */) {\n                    vnodeChildren = child;\n                }\n                else {\n                    vnodeChildren = node.children;\n                }\n            }\n            else {\n                vnodeChildren = node.children;\n            }\n        }\n        // patchFlag & dynamicPropNames\n        if (patchFlag !== 0) {\n            {\n                if (patchFlag < 0) {\n                    // special flags (negative and mutually exclusive)\n                    vnodePatchFlag = patchFlag + ` /* ${PatchFlagNames[patchFlag]} */`;\n                }\n                else {\n                    // bitwise flags\n                    const flagNames = Object.keys(PatchFlagNames)\n                        .map(Number)\n                        .filter(n => n > 0 && patchFlag & n)\n                        .map(n => PatchFlagNames[n])\n                        .join(`, `);\n                    vnodePatchFlag = patchFlag + ` /* ${flagNames} */`;\n                }\n            }\n            if (dynamicPropNames && dynamicPropNames.length) {\n                vnodeDynamicProps = stringifyDynamicPropNames(dynamicPropNames);\n            }\n        }\n        node.codegenNode = createVNodeCall(context, vnodeTag, vnodeProps, vnodeChildren, vnodePatchFlag, vnodeDynamicProps, vnodeDirectives, !!shouldUseBlock, false /* disableTracking */, isComponent, node.loc);\n    };\n};\nfunction resolveComponentType(node, context, ssr = false) {\n    let { tag } = node;\n    // 1. dynamic component\n    const isExplicitDynamic = isComponentTag(tag);\n    const isProp = findProp(node, 'is');\n    if (isProp) {\n        if (isExplicitDynamic ||\n            (false )) {\n            const exp = isProp.type === 6 /* NodeTypes.ATTRIBUTE */\n                ? isProp.value && createSimpleExpression(isProp.value.content, true)\n                : isProp.exp;\n            if (exp) {\n                return createCallExpression(context.helper(RESOLVE_DYNAMIC_COMPONENT), [\n                    exp\n                ]);\n            }\n        }\n        else if (isProp.type === 6 /* NodeTypes.ATTRIBUTE */ &&\n            isProp.value.content.startsWith('vue:')) {\n            // <button is=\"vue:xxx\">\n            // if not <component>, only is value that starts with \"vue:\" will be\n            // treated as component by the parse phase and reach here, unless it's\n            // compat mode where all is values are considered components\n            tag = isProp.value.content.slice(4);\n        }\n    }\n    // 1.5 v-is (TODO: Deprecate)\n    const isDir = !isExplicitDynamic && findDir(node, 'is');\n    if (isDir && isDir.exp) {\n        return createCallExpression(context.helper(RESOLVE_DYNAMIC_COMPONENT), [\n            isDir.exp\n        ]);\n    }\n    // 2. built-in components (Teleport, Transition, KeepAlive, Suspense...)\n    const builtIn = isCoreComponent(tag) || context.isBuiltInComponent(tag);\n    if (builtIn) {\n        // built-ins are simply fallthroughs / have special handling during ssr\n        // so we don't need to import their runtime equivalents\n        if (!ssr)\n            context.helper(builtIn);\n        return builtIn;\n    }\n    // 3. user component (from setup bindings)\n    // this is skipped in browser build since browser builds do not perform\n    // binding analysis.\n    {\n        const fromSetup = resolveSetupReference(tag, context);\n        if (fromSetup) {\n            return fromSetup;\n        }\n        const dotIndex = tag.indexOf('.');\n        if (dotIndex > 0) {\n            const ns = resolveSetupReference(tag.slice(0, dotIndex), context);\n            if (ns) {\n                return ns + tag.slice(dotIndex);\n            }\n        }\n    }\n    // 4. Self referencing component (inferred from filename)\n    if (context.selfName &&\n        capitalize$1(camelize(tag)) === context.selfName) {\n        context.helper(RESOLVE_COMPONENT);\n        // codegen.ts has special check for __self postfix when generating\n        // component imports, which will pass additional `maybeSelfReference` flag\n        // to `resolveComponent`.\n        context.components.add(tag + `__self`);\n        return toValidAssetId(tag, `component`);\n    }\n    // 5. user component (resolve)\n    context.helper(RESOLVE_COMPONENT);\n    context.components.add(tag);\n    return toValidAssetId(tag, `component`);\n}\nfunction resolveSetupReference(name, context) {\n    const bindings = context.bindingMetadata;\n    if (!bindings || bindings.__isScriptSetup === false) {\n        return;\n    }\n    const camelName = camelize(name);\n    const PascalName = capitalize$1(camelName);\n    const checkType = (type) => {\n        if (bindings[name] === type) {\n            return name;\n        }\n        if (bindings[camelName] === type) {\n            return camelName;\n        }\n        if (bindings[PascalName] === type) {\n            return PascalName;\n        }\n    };\n    const fromConst = checkType(\"setup-const\" /* BindingTypes.SETUP_CONST */) ||\n        checkType(\"setup-reactive-const\" /* BindingTypes.SETUP_REACTIVE_CONST */);\n    if (fromConst) {\n        return context.inline\n            ? // in inline mode, const setup bindings (e.g. imports) can be used as-is\n                fromConst\n            : `$setup[${JSON.stringify(fromConst)}]`;\n    }\n    const fromMaybeRef = checkType(\"setup-let\" /* BindingTypes.SETUP_LET */) ||\n        checkType(\"setup-ref\" /* BindingTypes.SETUP_REF */) ||\n        checkType(\"setup-maybe-ref\" /* BindingTypes.SETUP_MAYBE_REF */);\n    if (fromMaybeRef) {\n        return context.inline\n            ? // setup scope bindings that may be refs need to be unrefed\n                `${context.helperString(UNREF)}(${fromMaybeRef})`\n            : `$setup[${JSON.stringify(fromMaybeRef)}]`;\n    }\n}\nfunction buildProps(node, context, props = node.props, isComponent, isDynamicComponent, ssr = false) {\n    const { tag, loc: elementLoc, children } = node;\n    let properties = [];\n    const mergeArgs = [];\n    const runtimeDirectives = [];\n    const hasChildren = children.length > 0;\n    let shouldUseBlock = false;\n    // patchFlag analysis\n    let patchFlag = 0;\n    let hasRef = false;\n    let hasClassBinding = false;\n    let hasStyleBinding = false;\n    let hasHydrationEventBinding = false;\n    let hasDynamicKeys = false;\n    let hasVnodeHook = false;\n    const dynamicPropNames = [];\n    const pushMergeArg = (arg) => {\n        if (properties.length) {\n            mergeArgs.push(createObjectExpression(dedupeProperties(properties), elementLoc));\n            properties = [];\n        }\n        if (arg)\n            mergeArgs.push(arg);\n    };\n    const analyzePatchFlag = ({ key, value }) => {\n        if (isStaticExp(key)) {\n            const name = key.content;\n            const isEventHandler = isOn(name);\n            if (isEventHandler &&\n                (!isComponent || isDynamicComponent) &&\n                // omit the flag for click handlers because hydration gives click\n                // dedicated fast path.\n                name.toLowerCase() !== 'onclick' &&\n                // omit v-model handlers\n                name !== 'onUpdate:modelValue' &&\n                // omit onVnodeXXX hooks\n                !isReservedProp(name)) {\n                hasHydrationEventBinding = true;\n            }\n            if (isEventHandler && isReservedProp(name)) {\n                hasVnodeHook = true;\n            }\n            if (value.type === 20 /* NodeTypes.JS_CACHE_EXPRESSION */ ||\n                ((value.type === 4 /* NodeTypes.SIMPLE_EXPRESSION */ ||\n                    value.type === 8 /* NodeTypes.COMPOUND_EXPRESSION */) &&\n                    getConstantType(value, context) > 0)) {\n                // skip if the prop is a cached handler or has constant value\n                return;\n            }\n            if (name === 'ref') {\n                hasRef = true;\n            }\n            else if (name === 'class') {\n                hasClassBinding = true;\n            }\n            else if (name === 'style') {\n                hasStyleBinding = true;\n            }\n            else if (name !== 'key' && !dynamicPropNames.includes(name)) {\n                dynamicPropNames.push(name);\n            }\n            // treat the dynamic class and style binding of the component as dynamic props\n            if (isComponent &&\n                (name === 'class' || name === 'style') &&\n                !dynamicPropNames.includes(name)) {\n                dynamicPropNames.push(name);\n            }\n        }\n        else {\n            hasDynamicKeys = true;\n        }\n    };\n    for (let i = 0; i < props.length; i++) {\n        // static attribute\n        const prop = props[i];\n        if (prop.type === 6 /* NodeTypes.ATTRIBUTE */) {\n            const { loc, name, value } = prop;\n            let isStatic = true;\n            if (name === 'ref') {\n                hasRef = true;\n                if (context.scopes.vFor > 0) {\n                    properties.push(createObjectProperty(createSimpleExpression('ref_for', true), createSimpleExpression('true')));\n                }\n                // in inline mode there is no setupState object, so we can't use string\n                // keys to set the ref. Instead, we need to transform it to pass the\n                // actual ref instead.\n                if (value && context.inline) {\n                    const binding = context.bindingMetadata[value.content];\n                    if (binding === \"setup-let\" /* BindingTypes.SETUP_LET */ ||\n                        binding === \"setup-ref\" /* BindingTypes.SETUP_REF */ ||\n                        binding === \"setup-maybe-ref\" /* BindingTypes.SETUP_MAYBE_REF */) {\n                        isStatic = false;\n                        properties.push(createObjectProperty(createSimpleExpression('ref_key', true), createSimpleExpression(value.content, true, value.loc)));\n                    }\n                }\n            }\n            // skip is on <component>, or is=\"vue:xxx\"\n            if (name === 'is' &&\n                (isComponentTag(tag) ||\n                    (value && value.content.startsWith('vue:')) ||\n                    (false ))) {\n                continue;\n            }\n            properties.push(createObjectProperty(createSimpleExpression(name, true, getInnerRange(loc, 0, name.length)), createSimpleExpression(value ? value.content : '', isStatic, value ? value.loc : loc)));\n        }\n        else {\n            // directives\n            const { name, arg, exp, loc } = prop;\n            const isVBind = name === 'bind';\n            const isVOn = name === 'on';\n            // skip v-slot - it is handled by its dedicated transform.\n            if (name === 'slot') {\n                if (!isComponent) {\n                    context.onError(createCompilerError(40 /* ErrorCodes.X_V_SLOT_MISPLACED */, loc));\n                }\n                continue;\n            }\n            // skip v-once/v-memo - they are handled by dedicated transforms.\n            if (name === 'once' || name === 'memo') {\n                continue;\n            }\n            // skip v-is and :is on <component>\n            if (name === 'is' ||\n                (isVBind &&\n                    isStaticArgOf(arg, 'is') &&\n                    (isComponentTag(tag) ||\n                        (false )))) {\n                continue;\n            }\n            // skip v-on in SSR compilation\n            if (isVOn && ssr) {\n                continue;\n            }\n            if (\n            // #938: elements with dynamic keys should be forced into blocks\n            (isVBind && isStaticArgOf(arg, 'key')) ||\n                // inline before-update hooks need to force block so that it is invoked\n                // before children\n                (isVOn && hasChildren && isStaticArgOf(arg, 'vue:before-update'))) {\n                shouldUseBlock = true;\n            }\n            if (isVBind && isStaticArgOf(arg, 'ref') && context.scopes.vFor > 0) {\n                properties.push(createObjectProperty(createSimpleExpression('ref_for', true), createSimpleExpression('true')));\n            }\n            // special case for v-bind and v-on with no argument\n            if (!arg && (isVBind || isVOn)) {\n                hasDynamicKeys = true;\n                if (exp) {\n                    if (isVBind) {\n                        // have to merge early for compat build check\n                        pushMergeArg();\n                        mergeArgs.push(exp);\n                    }\n                    else {\n                        // v-on=\"obj\" -> toHandlers(obj)\n                        pushMergeArg({\n                            type: 14 /* NodeTypes.JS_CALL_EXPRESSION */,\n                            loc,\n                            callee: context.helper(TO_HANDLERS),\n                            arguments: isComponent ? [exp] : [exp, `true`]\n                        });\n                    }\n                }\n                else {\n                    context.onError(createCompilerError(isVBind\n                        ? 34 /* ErrorCodes.X_V_BIND_NO_EXPRESSION */\n                        : 35 /* ErrorCodes.X_V_ON_NO_EXPRESSION */, loc));\n                }\n                continue;\n            }\n            const directiveTransform = context.directiveTransforms[name];\n            if (directiveTransform) {\n                // has built-in directive transform.\n                const { props, needRuntime } = directiveTransform(prop, node, context);\n                !ssr && props.forEach(analyzePatchFlag);\n                if (isVOn && arg && !isStaticExp(arg)) {\n                    pushMergeArg(createObjectExpression(props, elementLoc));\n                }\n                else {\n                    properties.push(...props);\n                }\n                if (needRuntime) {\n                    runtimeDirectives.push(prop);\n                    if (isSymbol$1(needRuntime)) {\n                        directiveImportMap.set(prop, needRuntime);\n                    }\n                }\n            }\n            else if (!isBuiltInDirective(name)) {\n                // no built-in transform, this is a user custom directive.\n                runtimeDirectives.push(prop);\n                // custom dirs may use beforeUpdate so they need to force blocks\n                // to ensure before-update gets called before children update\n                if (hasChildren) {\n                    shouldUseBlock = true;\n                }\n            }\n        }\n    }\n    let propsExpression = undefined;\n    // has v-bind=\"object\" or v-on=\"object\", wrap with mergeProps\n    if (mergeArgs.length) {\n        // close up any not-yet-merged props\n        pushMergeArg();\n        if (mergeArgs.length > 1) {\n            propsExpression = createCallExpression(context.helper(MERGE_PROPS), mergeArgs, elementLoc);\n        }\n        else {\n            // single v-bind with nothing else - no need for a mergeProps call\n            propsExpression = mergeArgs[0];\n        }\n    }\n    else if (properties.length) {\n        propsExpression = createObjectExpression(dedupeProperties(properties), elementLoc);\n    }\n    // patchFlag analysis\n    if (hasDynamicKeys) {\n        patchFlag |= 16 /* PatchFlags.FULL_PROPS */;\n    }\n    else {\n        if (hasClassBinding && !isComponent) {\n            patchFlag |= 2 /* PatchFlags.CLASS */;\n        }\n        if (hasStyleBinding && !isComponent) {\n            patchFlag |= 4 /* PatchFlags.STYLE */;\n        }\n        if (dynamicPropNames.length) {\n            patchFlag |= 8 /* PatchFlags.PROPS */;\n        }\n        if (hasHydrationEventBinding) {\n            patchFlag |= 32 /* PatchFlags.HYDRATE_EVENTS */;\n        }\n    }\n    if (!shouldUseBlock &&\n        (patchFlag === 0 || patchFlag === 32 /* PatchFlags.HYDRATE_EVENTS */) &&\n        (hasRef || hasVnodeHook || runtimeDirectives.length > 0)) {\n        patchFlag |= 512 /* PatchFlags.NEED_PATCH */;\n    }\n    // pre-normalize props, SSR is skipped for now\n    if (!context.inSSR && propsExpression) {\n        switch (propsExpression.type) {\n            case 15 /* NodeTypes.JS_OBJECT_EXPRESSION */:\n                // means that there is no v-bind,\n                // but still need to deal with dynamic key binding\n                let classKeyIndex = -1;\n                let styleKeyIndex = -1;\n                let hasDynamicKey = false;\n                for (let i = 0; i < propsExpression.properties.length; i++) {\n                    const key = propsExpression.properties[i].key;\n                    if (isStaticExp(key)) {\n                        if (key.content === 'class') {\n                            classKeyIndex = i;\n                        }\n                        else if (key.content === 'style') {\n                            styleKeyIndex = i;\n                        }\n                    }\n                    else if (!key.isHandlerKey) {\n                        hasDynamicKey = true;\n                    }\n                }\n                const classProp = propsExpression.properties[classKeyIndex];\n                const styleProp = propsExpression.properties[styleKeyIndex];\n                // no dynamic key\n                if (!hasDynamicKey) {\n                    if (classProp && !isStaticExp(classProp.value)) {\n                        classProp.value = createCallExpression(context.helper(NORMALIZE_CLASS), [classProp.value]);\n                    }\n                    if (styleProp &&\n                        // the static style is compiled into an object,\n                        // so use `hasStyleBinding` to ensure that it is a dynamic style binding\n                        (hasStyleBinding ||\n                            (styleProp.value.type === 4 /* NodeTypes.SIMPLE_EXPRESSION */ &&\n                                styleProp.value.content.trim()[0] === `[`) ||\n                            // v-bind:style and style both exist,\n                            // v-bind:style with static literal object\n                            styleProp.value.type === 17 /* NodeTypes.JS_ARRAY_EXPRESSION */)) {\n                        styleProp.value = createCallExpression(context.helper(NORMALIZE_STYLE), [styleProp.value]);\n                    }\n                }\n                else {\n                    // dynamic key binding, wrap with `normalizeProps`\n                    propsExpression = createCallExpression(context.helper(NORMALIZE_PROPS), [propsExpression]);\n                }\n                break;\n            case 14 /* NodeTypes.JS_CALL_EXPRESSION */:\n                // mergeProps call, do nothing\n                break;\n            default:\n                // single v-bind\n                propsExpression = createCallExpression(context.helper(NORMALIZE_PROPS), [\n                    createCallExpression(context.helper(GUARD_REACTIVE_PROPS), [\n                        propsExpression\n                    ])\n                ]);\n                break;\n        }\n    }\n    return {\n        props: propsExpression,\n        directives: runtimeDirectives,\n        patchFlag,\n        dynamicPropNames,\n        shouldUseBlock\n    };\n}\n// Dedupe props in an object literal.\n// Literal duplicated attributes would have been warned during the parse phase,\n// however, it's possible to encounter duplicated `onXXX` handlers with different\n// modifiers. We also need to merge static and dynamic class / style attributes.\n// - onXXX handlers / style: merge into array\n// - class: merge into single expression with concatenation\nfunction dedupeProperties(properties) {\n    const knownProps = new Map();\n    const deduped = [];\n    for (let i = 0; i < properties.length; i++) {\n        const prop = properties[i];\n        // dynamic keys are always allowed\n        if (prop.key.type === 8 /* NodeTypes.COMPOUND_EXPRESSION */ || !prop.key.isStatic) {\n            deduped.push(prop);\n            continue;\n        }\n        const name = prop.key.content;\n        const existing = knownProps.get(name);\n        if (existing) {\n            if (name === 'style' || name === 'class' || isOn(name)) {\n                mergeAsArray(existing, prop);\n            }\n            // unexpected duplicate, should have emitted error during parse\n        }\n        else {\n            knownProps.set(name, prop);\n            deduped.push(prop);\n        }\n    }\n    return deduped;\n}\nfunction mergeAsArray(existing, incoming) {\n    if (existing.value.type === 17 /* NodeTypes.JS_ARRAY_EXPRESSION */) {\n        existing.value.elements.push(incoming.value);\n    }\n    else {\n        existing.value = createArrayExpression([existing.value, incoming.value], existing.loc);\n    }\n}\nfunction buildDirectiveArgs(dir, context) {\n    const dirArgs = [];\n    const runtime = directiveImportMap.get(dir);\n    if (runtime) {\n        // built-in directive with runtime\n        dirArgs.push(context.helperString(runtime));\n    }\n    else {\n        // user directive.\n        // see if we have directives exposed via <script setup>\n        const fromSetup = resolveSetupReference('v-' + dir.name, context);\n        if (fromSetup) {\n            dirArgs.push(fromSetup);\n        }\n        else {\n            // inject statement for resolving directive\n            context.helper(RESOLVE_DIRECTIVE);\n            context.directives.add(dir.name);\n            dirArgs.push(toValidAssetId(dir.name, `directive`));\n        }\n    }\n    const { loc } = dir;\n    if (dir.exp)\n        dirArgs.push(dir.exp);\n    if (dir.arg) {\n        if (!dir.exp) {\n            dirArgs.push(`void 0`);\n        }\n        dirArgs.push(dir.arg);\n    }\n    if (Object.keys(dir.modifiers).length) {\n        if (!dir.arg) {\n            if (!dir.exp) {\n                dirArgs.push(`void 0`);\n            }\n            dirArgs.push(`void 0`);\n        }\n        const trueExpression = createSimpleExpression(`true`, false, loc);\n        dirArgs.push(createObjectExpression(dir.modifiers.map(modifier => createObjectProperty(modifier, trueExpression)), loc));\n    }\n    return createArrayExpression(dirArgs, dir.loc);\n}\nfunction stringifyDynamicPropNames(props) {\n    let propsNamesString = `[`;\n    for (let i = 0, l = props.length; i < l; i++) {\n        propsNamesString += JSON.stringify(props[i]);\n        if (i < l - 1)\n            propsNamesString += ', ';\n    }\n    return propsNamesString + `]`;\n}\nfunction isComponentTag(tag) {\n    return tag === 'component' || tag === 'Component';\n}\n\nconst transformSlotOutlet = (node, context) => {\n    if (isSlotOutlet(node)) {\n        const { children, loc } = node;\n        const { slotName, slotProps } = processSlotOutlet(node, context);\n        const slotArgs = [\n            context.prefixIdentifiers ? `_ctx.$slots` : `$slots`,\n            slotName,\n            '{}',\n            'undefined',\n            'true'\n        ];\n        let expectedLen = 2;\n        if (slotProps) {\n            slotArgs[2] = slotProps;\n            expectedLen = 3;\n        }\n        if (children.length) {\n            slotArgs[3] = createFunctionExpression([], children, false, false, loc);\n            expectedLen = 4;\n        }\n        if (context.scopeId && !context.slotted) {\n            expectedLen = 5;\n        }\n        slotArgs.splice(expectedLen); // remove unused arguments\n        node.codegenNode = createCallExpression(context.helper(RENDER_SLOT), slotArgs, loc);\n    }\n};\nfunction processSlotOutlet(node, context) {\n    let slotName = `\"default\"`;\n    let slotProps = undefined;\n    const nonNameProps = [];\n    for (let i = 0; i < node.props.length; i++) {\n        const p = node.props[i];\n        if (p.type === 6 /* NodeTypes.ATTRIBUTE */) {\n            if (p.value) {\n                if (p.name === 'name') {\n                    slotName = JSON.stringify(p.value.content);\n                }\n                else {\n                    p.name = camelize(p.name);\n                    nonNameProps.push(p);\n                }\n            }\n        }\n        else {\n            if (p.name === 'bind' && isStaticArgOf(p.arg, 'name')) {\n                if (p.exp)\n                    slotName = p.exp;\n            }\n            else {\n                if (p.name === 'bind' && p.arg && isStaticExp(p.arg)) {\n                    p.arg.content = camelize(p.arg.content);\n                }\n                nonNameProps.push(p);\n            }\n        }\n    }\n    if (nonNameProps.length > 0) {\n        const { props, directives } = buildProps(node, context, nonNameProps, false, false);\n        slotProps = props;\n        if (directives.length) {\n            context.onError(createCompilerError(36 /* ErrorCodes.X_V_SLOT_UNEXPECTED_DIRECTIVE_ON_SLOT_OUTLET */, directives[0].loc));\n        }\n    }\n    return {\n        slotName,\n        slotProps\n    };\n}\n\nconst fnExpRE = /^\\s*([\\w$_]+|(async\\s*)?\\([^)]*?\\))\\s*(:[^=]+)?=>|^\\s*(async\\s+)?function(?:\\s+[\\w$]+)?\\s*\\(/;\nconst transformOn$1 = (dir, node, context, augmentor) => {\n    const { loc, modifiers, arg } = dir;\n    if (!dir.exp && !modifiers.length) {\n        context.onError(createCompilerError(35 /* ErrorCodes.X_V_ON_NO_EXPRESSION */, loc));\n    }\n    let eventName;\n    if (arg.type === 4 /* NodeTypes.SIMPLE_EXPRESSION */) {\n        if (arg.isStatic) {\n            let rawName = arg.content;\n            // TODO deprecate @vnodeXXX usage\n            if (rawName.startsWith('vue:')) {\n                rawName = `vnode-${rawName.slice(4)}`;\n            }\n            const eventString = node.tagType !== 0 /* ElementTypes.ELEMENT */ ||\n                rawName.startsWith('vnode') ||\n                !/[A-Z]/.test(rawName)\n                ? // for non-element and vnode lifecycle event listeners, auto convert\n                    // it to camelCase. See issue #2249\n                    toHandlerKey(camelize(rawName))\n                : // preserve case for plain element listeners that have uppercase\n                    // letters, as these may be custom elements' custom events\n                    `on:${rawName}`;\n            eventName = createSimpleExpression(eventString, true, arg.loc);\n        }\n        else {\n            // #2388\n            eventName = createCompoundExpression([\n                `${context.helperString(TO_HANDLER_KEY)}(`,\n                arg,\n                `)`\n            ]);\n        }\n    }\n    else {\n        // already a compound expression.\n        eventName = arg;\n        eventName.children.unshift(`${context.helperString(TO_HANDLER_KEY)}(`);\n        eventName.children.push(`)`);\n    }\n    // handler processing\n    let exp = dir.exp;\n    if (exp && !exp.content.trim()) {\n        exp = undefined;\n    }\n    let shouldCache = context.cacheHandlers && !exp && !context.inVOnce;\n    if (exp) {\n        const isMemberExp = isMemberExpression(exp.content, context);\n        const isInlineStatement = !(isMemberExp || fnExpRE.test(exp.content));\n        const hasMultipleStatements = exp.content.includes(`;`);\n        // process the expression since it's been skipped\n        if (context.prefixIdentifiers) {\n            isInlineStatement && context.addIdentifiers(`$event`);\n            exp = dir.exp = processExpression(exp, context, false, hasMultipleStatements);\n            isInlineStatement && context.removeIdentifiers(`$event`);\n            // with scope analysis, the function is hoistable if it has no reference\n            // to scope variables.\n            shouldCache =\n                context.cacheHandlers &&\n                    // unnecessary to cache inside v-once\n                    !context.inVOnce &&\n                    // runtime constants don't need to be cached\n                    // (this is analyzed by compileScript in SFC <script setup>)\n                    !(exp.type === 4 /* NodeTypes.SIMPLE_EXPRESSION */ && exp.constType > 0) &&\n                    // #1541 bail if this is a member exp handler passed to a component -\n                    // we need to use the original function to preserve arity,\n                    // e.g. <transition> relies on checking cb.length to determine\n                    // transition end handling. Inline function is ok since its arity\n                    // is preserved even when cached.\n                    !(isMemberExp && node.tagType === 1 /* ElementTypes.COMPONENT */) &&\n                    // bail if the function references closure variables (v-for, v-slot)\n                    // it must be passed fresh to avoid stale values.\n                    !hasScopeRef(exp, context.identifiers);\n            // If the expression is optimizable and is a member expression pointing\n            // to a function, turn it into invocation (and wrap in an arrow function\n            // below) so that it always accesses the latest value when called - thus\n            // avoiding the need to be patched.\n            if (shouldCache && isMemberExp) {\n                if (exp.type === 4 /* NodeTypes.SIMPLE_EXPRESSION */) {\n                    exp.content = `${exp.content} && ${exp.content}(...args)`;\n                }\n                else {\n                    exp.children = [...exp.children, ` && `, ...exp.children, `(...args)`];\n                }\n            }\n        }\n        if (isInlineStatement || (shouldCache && isMemberExp)) {\n            // wrap inline statement in a function expression\n            exp = createCompoundExpression([\n                `${isInlineStatement\n                    ? context.isTS\n                        ? `($event: any)`\n                        : `$event`\n                    : `${context.isTS ? `\\n//@ts-ignore\\n` : ``}(...args)`} => ${hasMultipleStatements ? `{` : `(`}`,\n                exp,\n                hasMultipleStatements ? `}` : `)`\n            ]);\n        }\n    }\n    let ret = {\n        props: [\n            createObjectProperty(eventName, exp || createSimpleExpression(`() => {}`, false, loc))\n        ]\n    };\n    // apply extended compiler augmentor\n    if (augmentor) {\n        ret = augmentor(ret);\n    }\n    if (shouldCache) {\n        // cache handlers so that it's always the same handler being passed down.\n        // this avoids unnecessary re-renders when users use inline handlers on\n        // components.\n        ret.props[0].value = context.cache(ret.props[0].value);\n    }\n    // mark the key as handler for props normalization check\n    ret.props.forEach(p => (p.key.isHandlerKey = true));\n    return ret;\n};\n\n// v-bind without arg is handled directly in ./transformElements.ts due to it affecting\n// codegen for the entire props object. This transform here is only for v-bind\n// *with* args.\nconst transformBind = (dir, _node, context) => {\n    const { exp, modifiers, loc } = dir;\n    const arg = dir.arg;\n    if (arg.type !== 4 /* NodeTypes.SIMPLE_EXPRESSION */) {\n        arg.children.unshift(`(`);\n        arg.children.push(`) || \"\"`);\n    }\n    else if (!arg.isStatic) {\n        arg.content = `${arg.content} || \"\"`;\n    }\n    // .sync is replaced by v-model:arg\n    if (modifiers.includes('camel')) {\n        if (arg.type === 4 /* NodeTypes.SIMPLE_EXPRESSION */) {\n            if (arg.isStatic) {\n                arg.content = camelize(arg.content);\n            }\n            else {\n                arg.content = `${context.helperString(CAMELIZE)}(${arg.content})`;\n            }\n        }\n        else {\n            arg.children.unshift(`${context.helperString(CAMELIZE)}(`);\n            arg.children.push(`)`);\n        }\n    }\n    if (!context.inSSR) {\n        if (modifiers.includes('prop')) {\n            injectPrefix(arg, '.');\n        }\n        if (modifiers.includes('attr')) {\n            injectPrefix(arg, '^');\n        }\n    }\n    if (!exp ||\n        (exp.type === 4 /* NodeTypes.SIMPLE_EXPRESSION */ && !exp.content.trim())) {\n        context.onError(createCompilerError(34 /* ErrorCodes.X_V_BIND_NO_EXPRESSION */, loc));\n        return {\n            props: [createObjectProperty(arg, createSimpleExpression('', true, loc))]\n        };\n    }\n    return {\n        props: [createObjectProperty(arg, exp)]\n    };\n};\nconst injectPrefix = (arg, prefix) => {\n    if (arg.type === 4 /* NodeTypes.SIMPLE_EXPRESSION */) {\n        if (arg.isStatic) {\n            arg.content = prefix + arg.content;\n        }\n        else {\n            arg.content = `\\`${prefix}\\${${arg.content}}\\``;\n        }\n    }\n    else {\n        arg.children.unshift(`'${prefix}' + (`);\n        arg.children.push(`)`);\n    }\n};\n\n// Merge adjacent text nodes and expressions into a single expression\n// e.g. <div>abc {{ d }} {{ e }}</div> should have a single expression node as child.\nconst transformText = (node, context) => {\n    if (node.type === 0 /* NodeTypes.ROOT */ ||\n        node.type === 1 /* NodeTypes.ELEMENT */ ||\n        node.type === 11 /* NodeTypes.FOR */ ||\n        node.type === 10 /* NodeTypes.IF_BRANCH */) {\n        // perform the transform on node exit so that all expressions have already\n        // been processed.\n        return () => {\n            const children = node.children;\n            let currentContainer = undefined;\n            let hasText = false;\n            for (let i = 0; i < children.length; i++) {\n                const child = children[i];\n                if (isText$1(child)) {\n                    hasText = true;\n                    for (let j = i + 1; j < children.length; j++) {\n                        const next = children[j];\n                        if (isText$1(next)) {\n                            if (!currentContainer) {\n                                currentContainer = children[i] = createCompoundExpression([child], child.loc);\n                            }\n                            // merge adjacent text node into current\n                            currentContainer.children.push(` + `, next);\n                            children.splice(j, 1);\n                            j--;\n                        }\n                        else {\n                            currentContainer = undefined;\n                            break;\n                        }\n                    }\n                }\n            }\n            if (!hasText ||\n                // if this is a plain element with a single text child, leave it\n                // as-is since the runtime has dedicated fast path for this by directly\n                // setting textContent of the element.\n                // for component root it's always normalized anyway.\n                (children.length === 1 &&\n                    (node.type === 0 /* NodeTypes.ROOT */ ||\n                        (node.type === 1 /* NodeTypes.ELEMENT */ &&\n                            node.tagType === 0 /* ElementTypes.ELEMENT */ &&\n                            // #3756\n                            // custom directives can potentially add DOM elements arbitrarily,\n                            // we need to avoid setting textContent of the element at runtime\n                            // to avoid accidentally overwriting the DOM elements added\n                            // by the user through custom directives.\n                            !node.props.find(p => p.type === 7 /* NodeTypes.DIRECTIVE */ &&\n                                !context.directiveTransforms[p.name]) &&\n                            // in compat mode, <template> tags with no special directives\n                            // will be rendered as a fragment so its children must be\n                            // converted into vnodes.\n                            !(false ))))) {\n                return;\n            }\n            // pre-convert text nodes into createTextVNode(text) calls to avoid\n            // runtime normalization.\n            for (let i = 0; i < children.length; i++) {\n                const child = children[i];\n                if (isText$1(child) || child.type === 8 /* NodeTypes.COMPOUND_EXPRESSION */) {\n                    const callArgs = [];\n                    // createTextVNode defaults to single whitespace, so if it is a\n                    // single space the code could be an empty call to save bytes.\n                    if (child.type !== 2 /* NodeTypes.TEXT */ || child.content !== ' ') {\n                        callArgs.push(child);\n                    }\n                    // mark dynamic text with flag so it gets patched inside a block\n                    if (!context.ssr &&\n                        getConstantType(child, context) === 0 /* ConstantTypes.NOT_CONSTANT */) {\n                        callArgs.push(1 /* PatchFlags.TEXT */ +\n                            (` /* ${PatchFlagNames[1 /* PatchFlags.TEXT */]} */` ));\n                    }\n                    children[i] = {\n                        type: 12 /* NodeTypes.TEXT_CALL */,\n                        content: child,\n                        loc: child.loc,\n                        codegenNode: createCallExpression(context.helper(CREATE_TEXT), callArgs)\n                    };\n                }\n            }\n        };\n    }\n};\n\nconst seen$1 = new WeakSet();\nconst transformOnce = (node, context) => {\n    if (node.type === 1 /* NodeTypes.ELEMENT */ && findDir(node, 'once', true)) {\n        if (seen$1.has(node) || context.inVOnce) {\n            return;\n        }\n        seen$1.add(node);\n        context.inVOnce = true;\n        context.helper(SET_BLOCK_TRACKING);\n        return () => {\n            context.inVOnce = false;\n            const cur = context.currentNode;\n            if (cur.codegenNode) {\n                cur.codegenNode = context.cache(cur.codegenNode, true /* isVNode */);\n            }\n        };\n    }\n};\n\nconst transformModel$1 = (dir, node, context) => {\n    const { exp, arg } = dir;\n    if (!exp) {\n        context.onError(createCompilerError(41 /* ErrorCodes.X_V_MODEL_NO_EXPRESSION */, dir.loc));\n        return createTransformProps();\n    }\n    const rawExp = exp.loc.source;\n    const expString = exp.type === 4 /* NodeTypes.SIMPLE_EXPRESSION */ ? exp.content : rawExp;\n    // im SFC <script setup> inline mode, the exp may have been transformed into\n    // _unref(exp)\n    const bindingType = context.bindingMetadata[rawExp];\n    // check props\n    if (bindingType === \"props\" /* BindingTypes.PROPS */ ||\n        bindingType === \"props-aliased\" /* BindingTypes.PROPS_ALIASED */) {\n        context.onError(createCompilerError(44 /* ErrorCodes.X_V_MODEL_ON_PROPS */, exp.loc));\n        return createTransformProps();\n    }\n    const maybeRef = context.inline &&\n        (bindingType === \"setup-let\" /* BindingTypes.SETUP_LET */ ||\n            bindingType === \"setup-ref\" /* BindingTypes.SETUP_REF */ ||\n            bindingType === \"setup-maybe-ref\" /* BindingTypes.SETUP_MAYBE_REF */);\n    if (!expString.trim() ||\n        (!isMemberExpression(expString, context) && !maybeRef)) {\n        context.onError(createCompilerError(42 /* ErrorCodes.X_V_MODEL_MALFORMED_EXPRESSION */, exp.loc));\n        return createTransformProps();\n    }\n    if (context.prefixIdentifiers &&\n        isSimpleIdentifier(expString) &&\n        context.identifiers[expString]) {\n        context.onError(createCompilerError(43 /* ErrorCodes.X_V_MODEL_ON_SCOPE_VARIABLE */, exp.loc));\n        return createTransformProps();\n    }\n    const propName = arg ? arg : createSimpleExpression('modelValue', true);\n    const eventName = arg\n        ? isStaticExp(arg)\n            ? `onUpdate:${camelize(arg.content)}`\n            : createCompoundExpression(['\"onUpdate:\" + ', arg])\n        : `onUpdate:modelValue`;\n    let assignmentExp;\n    const eventArg = context.isTS ? `($event: any)` : `$event`;\n    if (maybeRef) {\n        if (bindingType === \"setup-ref\" /* BindingTypes.SETUP_REF */) {\n            // v-model used on known ref.\n            assignmentExp = createCompoundExpression([\n                `${eventArg} => ((`,\n                createSimpleExpression(rawExp, false, exp.loc),\n                `).value = $event)`\n            ]);\n        }\n        else {\n            // v-model used on a potentially ref binding in <script setup> inline mode.\n            // the assignment needs to check whether the binding is actually a ref.\n            const altAssignment = bindingType === \"setup-let\" /* BindingTypes.SETUP_LET */ ? `${rawExp} = $event` : `null`;\n            assignmentExp = createCompoundExpression([\n                `${eventArg} => (${context.helperString(IS_REF)}(${rawExp}) ? (`,\n                createSimpleExpression(rawExp, false, exp.loc),\n                `).value = $event : ${altAssignment})`\n            ]);\n        }\n    }\n    else {\n        assignmentExp = createCompoundExpression([\n            `${eventArg} => ((`,\n            exp,\n            `) = $event)`\n        ]);\n    }\n    const props = [\n        // modelValue: foo\n        createObjectProperty(propName, dir.exp),\n        // \"onUpdate:modelValue\": $event => (foo = $event)\n        createObjectProperty(eventName, assignmentExp)\n    ];\n    // cache v-model handler if applicable (when it doesn't refer any scope vars)\n    if (context.prefixIdentifiers &&\n        !context.inVOnce &&\n        context.cacheHandlers &&\n        !hasScopeRef(exp, context.identifiers)) {\n        props[1].value = context.cache(props[1].value);\n    }\n    // modelModifiers: { foo: true, \"bar-baz\": true }\n    if (dir.modifiers.length && node.tagType === 1 /* ElementTypes.COMPONENT */) {\n        const modifiers = dir.modifiers\n            .map(m => (isSimpleIdentifier(m) ? m : JSON.stringify(m)) + `: true`)\n            .join(`, `);\n        const modifiersKey = arg\n            ? isStaticExp(arg)\n                ? `${arg.content}Modifiers`\n                : createCompoundExpression([arg, ' + \"Modifiers\"'])\n            : `modelModifiers`;\n        props.push(createObjectProperty(modifiersKey, createSimpleExpression(`{ ${modifiers} }`, false, dir.loc, 2 /* ConstantTypes.CAN_HOIST */)));\n    }\n    return createTransformProps(props);\n};\nfunction createTransformProps(props = []) {\n    return { props };\n}\n\nconst seen = new WeakSet();\nconst transformMemo = (node, context) => {\n    if (node.type === 1 /* NodeTypes.ELEMENT */) {\n        const dir = findDir(node, 'memo');\n        if (!dir || seen.has(node)) {\n            return;\n        }\n        seen.add(node);\n        return () => {\n            const codegenNode = node.codegenNode ||\n                context.currentNode.codegenNode;\n            if (codegenNode && codegenNode.type === 13 /* NodeTypes.VNODE_CALL */) {\n                // non-component sub tree should be turned into a block\n                if (node.tagType !== 1 /* ElementTypes.COMPONENT */) {\n                    makeBlock(codegenNode, context);\n                }\n                node.codegenNode = createCallExpression(context.helper(WITH_MEMO), [\n                    dir.exp,\n                    createFunctionExpression(undefined, codegenNode),\n                    `_cache`,\n                    String(context.cached++)\n                ]);\n            }\n        };\n    }\n};\n\nfunction getBaseTransformPreset(prefixIdentifiers) {\n    return [\n        [\n            transformOnce,\n            transformIf,\n            transformMemo,\n            transformFor,\n            ...([]),\n            ...(prefixIdentifiers\n                ? [\n                    // order is important\n                    trackVForSlotScopes,\n                    transformExpression\n                ]\n                : []),\n            transformSlotOutlet,\n            transformElement,\n            trackSlotScopes,\n            transformText\n        ],\n        {\n            on: transformOn$1,\n            bind: transformBind,\n            model: transformModel$1\n        }\n    ];\n}\n// we name it `baseCompile` so that higher order compilers like\n// @vue/compiler-dom can export `compile` while re-exporting everything else.\nfunction baseCompile(template, options = {}) {\n    const onError = options.onError || defaultOnError;\n    const isModuleMode = options.mode === 'module';\n    const prefixIdentifiers = (options.prefixIdentifiers === true || isModuleMode);\n    if (!prefixIdentifiers && options.cacheHandlers) {\n        onError(createCompilerError(49 /* ErrorCodes.X_CACHE_HANDLER_NOT_SUPPORTED */));\n    }\n    if (options.scopeId && !isModuleMode) {\n        onError(createCompilerError(50 /* ErrorCodes.X_SCOPE_ID_NOT_SUPPORTED */));\n    }\n    const ast = isString$2(template) ? baseParse(template, options) : template;\n    const [nodeTransforms, directiveTransforms] = getBaseTransformPreset(prefixIdentifiers);\n    if (options.isTS) {\n        const { expressionPlugins } = options;\n        if (!expressionPlugins || !expressionPlugins.includes('typescript')) {\n            options.expressionPlugins = [...(expressionPlugins || []), 'typescript'];\n        }\n    }\n    transform$1(ast, extend({}, options, {\n        prefixIdentifiers,\n        nodeTransforms: [\n            ...nodeTransforms,\n            ...(options.nodeTransforms || []) // user transforms\n        ],\n        directiveTransforms: extend({}, directiveTransforms, options.directiveTransforms || {} // user transforms\n        )\n    }));\n    return generate(ast, extend({}, options, {\n        prefixIdentifiers\n    }));\n}\n\nconst noopDirectiveTransform = () => ({ props: [] });\n\nconst V_MODEL_RADIO = Symbol(`vModelRadio` );\nconst V_MODEL_CHECKBOX = Symbol(`vModelCheckbox` );\nconst V_MODEL_TEXT = Symbol(`vModelText` );\nconst V_MODEL_SELECT = Symbol(`vModelSelect` );\nconst V_MODEL_DYNAMIC = Symbol(`vModelDynamic` );\nconst V_ON_WITH_MODIFIERS = Symbol(`vOnModifiersGuard` );\nconst V_ON_WITH_KEYS = Symbol(`vOnKeysGuard` );\nconst V_SHOW = Symbol(`vShow` );\nconst TRANSITION = Symbol(`Transition` );\nconst TRANSITION_GROUP = Symbol(`TransitionGroup` );\nregisterRuntimeHelpers({\n    [V_MODEL_RADIO]: `vModelRadio`,\n    [V_MODEL_CHECKBOX]: `vModelCheckbox`,\n    [V_MODEL_TEXT]: `vModelText`,\n    [V_MODEL_SELECT]: `vModelSelect`,\n    [V_MODEL_DYNAMIC]: `vModelDynamic`,\n    [V_ON_WITH_MODIFIERS]: `withModifiers`,\n    [V_ON_WITH_KEYS]: `withKeys`,\n    [V_SHOW]: `vShow`,\n    [TRANSITION]: `Transition`,\n    [TRANSITION_GROUP]: `TransitionGroup`\n});\n\nvar namedCharacterReferences = {\n\tGT: \">\",\n\tgt: \">\",\n\tLT: \"<\",\n\tlt: \"<\",\n\t\"ac;\": \"∾\",\n\t\"af;\": \"⁡\",\n\tAMP: \"&\",\n\tamp: \"&\",\n\t\"ap;\": \"≈\",\n\t\"DD;\": \"ⅅ\",\n\t\"dd;\": \"ⅆ\",\n\tdeg: \"°\",\n\t\"ee;\": \"ⅇ\",\n\t\"eg;\": \"⪚\",\n\t\"el;\": \"⪙\",\n\tETH: \"Ð\",\n\teth: \"ð\",\n\t\"gE;\": \"≧\",\n\t\"ge;\": \"≥\",\n\t\"Gg;\": \"⋙\",\n\t\"gg;\": \"≫\",\n\t\"gl;\": \"≷\",\n\t\"GT;\": \">\",\n\t\"Gt;\": \"≫\",\n\t\"gt;\": \">\",\n\t\"ic;\": \"⁣\",\n\t\"ii;\": \"ⅈ\",\n\t\"Im;\": \"ℑ\",\n\t\"in;\": \"∈\",\n\t\"it;\": \"⁢\",\n\t\"lE;\": \"≦\",\n\t\"le;\": \"≤\",\n\t\"lg;\": \"≶\",\n\t\"Ll;\": \"⋘\",\n\t\"ll;\": \"≪\",\n\t\"LT;\": \"<\",\n\t\"Lt;\": \"≪\",\n\t\"lt;\": \"<\",\n\t\"mp;\": \"∓\",\n\t\"Mu;\": \"Μ\",\n\t\"mu;\": \"μ\",\n\t\"ne;\": \"≠\",\n\t\"ni;\": \"∋\",\n\tnot: \"¬\",\n\t\"Nu;\": \"Ν\",\n\t\"nu;\": \"ν\",\n\t\"Or;\": \"⩔\",\n\t\"or;\": \"∨\",\n\t\"oS;\": \"Ⓢ\",\n\t\"Pi;\": \"Π\",\n\t\"pi;\": \"π\",\n\t\"pm;\": \"±\",\n\t\"Pr;\": \"⪻\",\n\t\"pr;\": \"≺\",\n\t\"Re;\": \"ℜ\",\n\tREG: \"®\",\n\treg: \"®\",\n\t\"rx;\": \"℞\",\n\t\"Sc;\": \"⪼\",\n\t\"sc;\": \"≻\",\n\tshy: \"­\",\n\tuml: \"¨\",\n\t\"wp;\": \"℘\",\n\t\"wr;\": \"≀\",\n\t\"Xi;\": \"Ξ\",\n\t\"xi;\": \"ξ\",\n\tyen: \"¥\",\n\t\"acd;\": \"∿\",\n\t\"acE;\": \"∾̳\",\n\t\"Acy;\": \"А\",\n\t\"acy;\": \"а\",\n\t\"Afr;\": \"𝔄\",\n\t\"afr;\": \"𝔞\",\n\t\"AMP;\": \"&\",\n\t\"amp;\": \"&\",\n\t\"And;\": \"⩓\",\n\t\"and;\": \"∧\",\n\t\"ang;\": \"∠\",\n\t\"apE;\": \"⩰\",\n\t\"ape;\": \"≊\",\n\t\"ast;\": \"*\",\n\tAuml: \"Ä\",\n\tauml: \"ä\",\n\t\"Bcy;\": \"Б\",\n\t\"bcy;\": \"б\",\n\t\"Bfr;\": \"𝔅\",\n\t\"bfr;\": \"𝔟\",\n\t\"bne;\": \"=⃥\",\n\t\"bot;\": \"⊥\",\n\t\"Cap;\": \"⋒\",\n\t\"cap;\": \"∩\",\n\tcent: \"¢\",\n\t\"Cfr;\": \"ℭ\",\n\t\"cfr;\": \"𝔠\",\n\t\"Chi;\": \"Χ\",\n\t\"chi;\": \"χ\",\n\t\"cir;\": \"○\",\n\tCOPY: \"©\",\n\tcopy: \"©\",\n\t\"Cup;\": \"⋓\",\n\t\"cup;\": \"∪\",\n\t\"Dcy;\": \"Д\",\n\t\"dcy;\": \"д\",\n\t\"deg;\": \"°\",\n\t\"Del;\": \"∇\",\n\t\"Dfr;\": \"𝔇\",\n\t\"dfr;\": \"𝔡\",\n\t\"die;\": \"¨\",\n\t\"div;\": \"÷\",\n\t\"Dot;\": \"¨\",\n\t\"dot;\": \"˙\",\n\t\"Ecy;\": \"Э\",\n\t\"ecy;\": \"э\",\n\t\"Efr;\": \"𝔈\",\n\t\"efr;\": \"𝔢\",\n\t\"egs;\": \"⪖\",\n\t\"ell;\": \"ℓ\",\n\t\"els;\": \"⪕\",\n\t\"ENG;\": \"Ŋ\",\n\t\"eng;\": \"ŋ\",\n\t\"Eta;\": \"Η\",\n\t\"eta;\": \"η\",\n\t\"ETH;\": \"Ð\",\n\t\"eth;\": \"ð\",\n\tEuml: \"Ë\",\n\teuml: \"ë\",\n\t\"Fcy;\": \"Ф\",\n\t\"fcy;\": \"ф\",\n\t\"Ffr;\": \"𝔉\",\n\t\"ffr;\": \"𝔣\",\n\t\"gap;\": \"⪆\",\n\t\"Gcy;\": \"Г\",\n\t\"gcy;\": \"г\",\n\t\"gEl;\": \"⪌\",\n\t\"gel;\": \"⋛\",\n\t\"geq;\": \"≥\",\n\t\"ges;\": \"⩾\",\n\t\"Gfr;\": \"𝔊\",\n\t\"gfr;\": \"𝔤\",\n\t\"ggg;\": \"⋙\",\n\t\"gla;\": \"⪥\",\n\t\"glE;\": \"⪒\",\n\t\"glj;\": \"⪤\",\n\t\"gnE;\": \"≩\",\n\t\"gne;\": \"⪈\",\n\t\"Hat;\": \"^\",\n\t\"Hfr;\": \"ℌ\",\n\t\"hfr;\": \"𝔥\",\n\t\"Icy;\": \"И\",\n\t\"icy;\": \"и\",\n\t\"iff;\": \"⇔\",\n\t\"Ifr;\": \"ℑ\",\n\t\"ifr;\": \"𝔦\",\n\t\"Int;\": \"∬\",\n\t\"int;\": \"∫\",\n\tIuml: \"Ï\",\n\tiuml: \"ï\",\n\t\"Jcy;\": \"Й\",\n\t\"jcy;\": \"й\",\n\t\"Jfr;\": \"𝔍\",\n\t\"jfr;\": \"𝔧\",\n\t\"Kcy;\": \"К\",\n\t\"kcy;\": \"к\",\n\t\"Kfr;\": \"𝔎\",\n\t\"kfr;\": \"𝔨\",\n\t\"lap;\": \"⪅\",\n\t\"lat;\": \"⪫\",\n\t\"Lcy;\": \"Л\",\n\t\"lcy;\": \"л\",\n\t\"lEg;\": \"⪋\",\n\t\"leg;\": \"⋚\",\n\t\"leq;\": \"≤\",\n\t\"les;\": \"⩽\",\n\t\"Lfr;\": \"𝔏\",\n\t\"lfr;\": \"𝔩\",\n\t\"lgE;\": \"⪑\",\n\t\"lnE;\": \"≨\",\n\t\"lne;\": \"⪇\",\n\t\"loz;\": \"◊\",\n\t\"lrm;\": \"‎\",\n\t\"Lsh;\": \"↰\",\n\t\"lsh;\": \"↰\",\n\tmacr: \"¯\",\n\t\"Map;\": \"⤅\",\n\t\"map;\": \"↦\",\n\t\"Mcy;\": \"М\",\n\t\"mcy;\": \"м\",\n\t\"Mfr;\": \"𝔐\",\n\t\"mfr;\": \"𝔪\",\n\t\"mho;\": \"℧\",\n\t\"mid;\": \"∣\",\n\t\"nap;\": \"≉\",\n\tnbsp: \" \",\n\t\"Ncy;\": \"Н\",\n\t\"ncy;\": \"н\",\n\t\"Nfr;\": \"𝔑\",\n\t\"nfr;\": \"𝔫\",\n\t\"ngE;\": \"≧̸\",\n\t\"nge;\": \"≱\",\n\t\"nGg;\": \"⋙̸\",\n\t\"nGt;\": \"≫⃒\",\n\t\"ngt;\": \"≯\",\n\t\"nis;\": \"⋼\",\n\t\"niv;\": \"∋\",\n\t\"nlE;\": \"≦̸\",\n\t\"nle;\": \"≰\",\n\t\"nLl;\": \"⋘̸\",\n\t\"nLt;\": \"≪⃒\",\n\t\"nlt;\": \"≮\",\n\t\"Not;\": \"⫬\",\n\t\"not;\": \"¬\",\n\t\"npr;\": \"⊀\",\n\t\"nsc;\": \"⊁\",\n\t\"num;\": \"#\",\n\t\"Ocy;\": \"О\",\n\t\"ocy;\": \"о\",\n\t\"Ofr;\": \"𝔒\",\n\t\"ofr;\": \"𝔬\",\n\t\"ogt;\": \"⧁\",\n\t\"ohm;\": \"Ω\",\n\t\"olt;\": \"⧀\",\n\t\"ord;\": \"⩝\",\n\tordf: \"ª\",\n\tordm: \"º\",\n\t\"orv;\": \"⩛\",\n\tOuml: \"Ö\",\n\touml: \"ö\",\n\t\"par;\": \"∥\",\n\tpara: \"¶\",\n\t\"Pcy;\": \"П\",\n\t\"pcy;\": \"п\",\n\t\"Pfr;\": \"𝔓\",\n\t\"pfr;\": \"𝔭\",\n\t\"Phi;\": \"Φ\",\n\t\"phi;\": \"φ\",\n\t\"piv;\": \"ϖ\",\n\t\"prE;\": \"⪳\",\n\t\"pre;\": \"⪯\",\n\t\"Psi;\": \"Ψ\",\n\t\"psi;\": \"ψ\",\n\t\"Qfr;\": \"𝔔\",\n\t\"qfr;\": \"𝔮\",\n\tQUOT: \"\\\"\",\n\tquot: \"\\\"\",\n\t\"Rcy;\": \"Р\",\n\t\"rcy;\": \"р\",\n\t\"REG;\": \"®\",\n\t\"reg;\": \"®\",\n\t\"Rfr;\": \"ℜ\",\n\t\"rfr;\": \"𝔯\",\n\t\"Rho;\": \"Ρ\",\n\t\"rho;\": \"ρ\",\n\t\"rlm;\": \"‏\",\n\t\"Rsh;\": \"↱\",\n\t\"rsh;\": \"↱\",\n\t\"scE;\": \"⪴\",\n\t\"sce;\": \"⪰\",\n\t\"Scy;\": \"С\",\n\t\"scy;\": \"с\",\n\tsect: \"§\",\n\t\"Sfr;\": \"𝔖\",\n\t\"sfr;\": \"𝔰\",\n\t\"shy;\": \"­\",\n\t\"sim;\": \"∼\",\n\t\"smt;\": \"⪪\",\n\t\"sol;\": \"/\",\n\t\"squ;\": \"□\",\n\t\"Sub;\": \"⋐\",\n\t\"sub;\": \"⊂\",\n\t\"Sum;\": \"∑\",\n\t\"sum;\": \"∑\",\n\t\"Sup;\": \"⋑\",\n\t\"sup;\": \"⊃\",\n\tsup1: \"¹\",\n\tsup2: \"²\",\n\tsup3: \"³\",\n\t\"Tab;\": \"\\t\",\n\t\"Tau;\": \"Τ\",\n\t\"tau;\": \"τ\",\n\t\"Tcy;\": \"Т\",\n\t\"tcy;\": \"т\",\n\t\"Tfr;\": \"𝔗\",\n\t\"tfr;\": \"𝔱\",\n\t\"top;\": \"⊤\",\n\t\"Ucy;\": \"У\",\n\t\"ucy;\": \"у\",\n\t\"Ufr;\": \"𝔘\",\n\t\"ufr;\": \"𝔲\",\n\t\"uml;\": \"¨\",\n\tUuml: \"Ü\",\n\tuuml: \"ü\",\n\t\"Vcy;\": \"В\",\n\t\"vcy;\": \"в\",\n\t\"Vee;\": \"⋁\",\n\t\"vee;\": \"∨\",\n\t\"Vfr;\": \"𝔙\",\n\t\"vfr;\": \"𝔳\",\n\t\"Wfr;\": \"𝔚\",\n\t\"wfr;\": \"𝔴\",\n\t\"Xfr;\": \"𝔛\",\n\t\"xfr;\": \"𝔵\",\n\t\"Ycy;\": \"Ы\",\n\t\"ycy;\": \"ы\",\n\t\"yen;\": \"¥\",\n\t\"Yfr;\": \"𝔜\",\n\t\"yfr;\": \"𝔶\",\n\tyuml: \"ÿ\",\n\t\"Zcy;\": \"З\",\n\t\"zcy;\": \"з\",\n\t\"Zfr;\": \"ℨ\",\n\t\"zfr;\": \"𝔷\",\n\t\"zwj;\": \"‍\",\n\tAcirc: \"Â\",\n\tacirc: \"â\",\n\tacute: \"´\",\n\tAElig: \"Æ\",\n\taelig: \"æ\",\n\t\"andd;\": \"⩜\",\n\t\"andv;\": \"⩚\",\n\t\"ange;\": \"⦤\",\n\t\"Aopf;\": \"𝔸\",\n\t\"aopf;\": \"𝕒\",\n\t\"apid;\": \"≋\",\n\t\"apos;\": \"'\",\n\tAring: \"Å\",\n\taring: \"å\",\n\t\"Ascr;\": \"𝒜\",\n\t\"ascr;\": \"𝒶\",\n\t\"Auml;\": \"Ä\",\n\t\"auml;\": \"ä\",\n\t\"Barv;\": \"⫧\",\n\t\"bbrk;\": \"⎵\",\n\t\"Beta;\": \"Β\",\n\t\"beta;\": \"β\",\n\t\"beth;\": \"ℶ\",\n\t\"bNot;\": \"⫭\",\n\t\"bnot;\": \"⌐\",\n\t\"Bopf;\": \"𝔹\",\n\t\"bopf;\": \"𝕓\",\n\t\"boxH;\": \"═\",\n\t\"boxh;\": \"─\",\n\t\"boxV;\": \"║\",\n\t\"boxv;\": \"│\",\n\t\"Bscr;\": \"ℬ\",\n\t\"bscr;\": \"𝒷\",\n\t\"bsim;\": \"∽\",\n\t\"bsol;\": \"\\\\\",\n\t\"bull;\": \"•\",\n\t\"bump;\": \"≎\",\n\t\"caps;\": \"∩︀\",\n\t\"Cdot;\": \"Ċ\",\n\t\"cdot;\": \"ċ\",\n\tcedil: \"¸\",\n\t\"cent;\": \"¢\",\n\t\"CHcy;\": \"Ч\",\n\t\"chcy;\": \"ч\",\n\t\"circ;\": \"ˆ\",\n\t\"cirE;\": \"⧃\",\n\t\"cire;\": \"≗\",\n\t\"comp;\": \"∁\",\n\t\"cong;\": \"≅\",\n\t\"Copf;\": \"ℂ\",\n\t\"copf;\": \"𝕔\",\n\t\"COPY;\": \"©\",\n\t\"copy;\": \"©\",\n\t\"Cscr;\": \"𝒞\",\n\t\"cscr;\": \"𝒸\",\n\t\"csub;\": \"⫏\",\n\t\"csup;\": \"⫐\",\n\t\"cups;\": \"∪︀\",\n\t\"Darr;\": \"↡\",\n\t\"dArr;\": \"⇓\",\n\t\"darr;\": \"↓\",\n\t\"dash;\": \"‐\",\n\t\"dHar;\": \"⥥\",\n\t\"diam;\": \"⋄\",\n\t\"DJcy;\": \"Ђ\",\n\t\"djcy;\": \"ђ\",\n\t\"Dopf;\": \"𝔻\",\n\t\"dopf;\": \"𝕕\",\n\t\"Dscr;\": \"𝒟\",\n\t\"dscr;\": \"𝒹\",\n\t\"DScy;\": \"Ѕ\",\n\t\"dscy;\": \"ѕ\",\n\t\"dsol;\": \"⧶\",\n\t\"dtri;\": \"▿\",\n\t\"DZcy;\": \"Џ\",\n\t\"dzcy;\": \"џ\",\n\t\"ecir;\": \"≖\",\n\tEcirc: \"Ê\",\n\tecirc: \"ê\",\n\t\"Edot;\": \"Ė\",\n\t\"eDot;\": \"≑\",\n\t\"edot;\": \"ė\",\n\t\"emsp;\": \" \",\n\t\"ensp;\": \" \",\n\t\"Eopf;\": \"𝔼\",\n\t\"eopf;\": \"𝕖\",\n\t\"epar;\": \"⋕\",\n\t\"epsi;\": \"ε\",\n\t\"Escr;\": \"ℰ\",\n\t\"escr;\": \"ℯ\",\n\t\"Esim;\": \"⩳\",\n\t\"esim;\": \"≂\",\n\t\"Euml;\": \"Ë\",\n\t\"euml;\": \"ë\",\n\t\"euro;\": \"€\",\n\t\"excl;\": \"!\",\n\t\"flat;\": \"♭\",\n\t\"fnof;\": \"ƒ\",\n\t\"Fopf;\": \"𝔽\",\n\t\"fopf;\": \"𝕗\",\n\t\"fork;\": \"⋔\",\n\t\"Fscr;\": \"ℱ\",\n\t\"fscr;\": \"𝒻\",\n\t\"Gdot;\": \"Ġ\",\n\t\"gdot;\": \"ġ\",\n\t\"geqq;\": \"≧\",\n\t\"gesl;\": \"⋛︀\",\n\t\"GJcy;\": \"Ѓ\",\n\t\"gjcy;\": \"ѓ\",\n\t\"gnap;\": \"⪊\",\n\t\"gneq;\": \"⪈\",\n\t\"Gopf;\": \"𝔾\",\n\t\"gopf;\": \"𝕘\",\n\t\"Gscr;\": \"𝒢\",\n\t\"gscr;\": \"ℊ\",\n\t\"gsim;\": \"≳\",\n\t\"gtcc;\": \"⪧\",\n\t\"gvnE;\": \"≩︀\",\n\t\"half;\": \"½\",\n\t\"hArr;\": \"⇔\",\n\t\"harr;\": \"↔\",\n\t\"hbar;\": \"ℏ\",\n\t\"Hopf;\": \"ℍ\",\n\t\"hopf;\": \"𝕙\",\n\t\"Hscr;\": \"ℋ\",\n\t\"hscr;\": \"𝒽\",\n\tIcirc: \"Î\",\n\ticirc: \"î\",\n\t\"Idot;\": \"İ\",\n\t\"IEcy;\": \"Е\",\n\t\"iecy;\": \"е\",\n\tiexcl: \"¡\",\n\t\"imof;\": \"⊷\",\n\t\"IOcy;\": \"Ё\",\n\t\"iocy;\": \"ё\",\n\t\"Iopf;\": \"𝕀\",\n\t\"iopf;\": \"𝕚\",\n\t\"Iota;\": \"Ι\",\n\t\"iota;\": \"ι\",\n\t\"Iscr;\": \"ℐ\",\n\t\"iscr;\": \"𝒾\",\n\t\"isin;\": \"∈\",\n\t\"Iuml;\": \"Ï\",\n\t\"iuml;\": \"ï\",\n\t\"Jopf;\": \"𝕁\",\n\t\"jopf;\": \"𝕛\",\n\t\"Jscr;\": \"𝒥\",\n\t\"jscr;\": \"𝒿\",\n\t\"KHcy;\": \"Х\",\n\t\"khcy;\": \"х\",\n\t\"KJcy;\": \"Ќ\",\n\t\"kjcy;\": \"ќ\",\n\t\"Kopf;\": \"𝕂\",\n\t\"kopf;\": \"𝕜\",\n\t\"Kscr;\": \"𝒦\",\n\t\"kscr;\": \"𝓀\",\n\t\"Lang;\": \"⟪\",\n\t\"lang;\": \"⟨\",\n\tlaquo: \"«\",\n\t\"Larr;\": \"↞\",\n\t\"lArr;\": \"⇐\",\n\t\"larr;\": \"←\",\n\t\"late;\": \"⪭\",\n\t\"lcub;\": \"{\",\n\t\"ldca;\": \"⤶\",\n\t\"ldsh;\": \"↲\",\n\t\"leqq;\": \"≦\",\n\t\"lesg;\": \"⋚︀\",\n\t\"lHar;\": \"⥢\",\n\t\"LJcy;\": \"Љ\",\n\t\"ljcy;\": \"љ\",\n\t\"lnap;\": \"⪉\",\n\t\"lneq;\": \"⪇\",\n\t\"Lopf;\": \"𝕃\",\n\t\"lopf;\": \"𝕝\",\n\t\"lozf;\": \"⧫\",\n\t\"lpar;\": \"(\",\n\t\"Lscr;\": \"ℒ\",\n\t\"lscr;\": \"𝓁\",\n\t\"lsim;\": \"≲\",\n\t\"lsqb;\": \"[\",\n\t\"ltcc;\": \"⪦\",\n\t\"ltri;\": \"◃\",\n\t\"lvnE;\": \"≨︀\",\n\t\"macr;\": \"¯\",\n\t\"male;\": \"♂\",\n\t\"malt;\": \"✠\",\n\tmicro: \"µ\",\n\t\"mlcp;\": \"⫛\",\n\t\"mldr;\": \"…\",\n\t\"Mopf;\": \"𝕄\",\n\t\"mopf;\": \"𝕞\",\n\t\"Mscr;\": \"ℳ\",\n\t\"mscr;\": \"𝓂\",\n\t\"nang;\": \"∠⃒\",\n\t\"napE;\": \"⩰̸\",\n\t\"nbsp;\": \" \",\n\t\"ncap;\": \"⩃\",\n\t\"ncup;\": \"⩂\",\n\t\"ngeq;\": \"≱\",\n\t\"nges;\": \"⩾̸\",\n\t\"ngtr;\": \"≯\",\n\t\"nGtv;\": \"≫̸\",\n\t\"nisd;\": \"⋺\",\n\t\"NJcy;\": \"Њ\",\n\t\"njcy;\": \"њ\",\n\t\"nldr;\": \"‥\",\n\t\"nleq;\": \"≰\",\n\t\"nles;\": \"⩽̸\",\n\t\"nLtv;\": \"≪̸\",\n\t\"nmid;\": \"∤\",\n\t\"Nopf;\": \"ℕ\",\n\t\"nopf;\": \"𝕟\",\n\t\"npar;\": \"∦\",\n\t\"npre;\": \"⪯̸\",\n\t\"nsce;\": \"⪰̸\",\n\t\"Nscr;\": \"𝒩\",\n\t\"nscr;\": \"𝓃\",\n\t\"nsim;\": \"≁\",\n\t\"nsub;\": \"⊄\",\n\t\"nsup;\": \"⊅\",\n\t\"ntgl;\": \"≹\",\n\t\"ntlg;\": \"≸\",\n\t\"nvap;\": \"≍⃒\",\n\t\"nvge;\": \"≥⃒\",\n\t\"nvgt;\": \">⃒\",\n\t\"nvle;\": \"≤⃒\",\n\t\"nvlt;\": \"<⃒\",\n\t\"oast;\": \"⊛\",\n\t\"ocir;\": \"⊚\",\n\tOcirc: \"Ô\",\n\tocirc: \"ô\",\n\t\"odiv;\": \"⨸\",\n\t\"odot;\": \"⊙\",\n\t\"ogon;\": \"˛\",\n\t\"oint;\": \"∮\",\n\t\"omid;\": \"⦶\",\n\t\"Oopf;\": \"𝕆\",\n\t\"oopf;\": \"𝕠\",\n\t\"opar;\": \"⦷\",\n\t\"ordf;\": \"ª\",\n\t\"ordm;\": \"º\",\n\t\"oror;\": \"⩖\",\n\t\"Oscr;\": \"𝒪\",\n\t\"oscr;\": \"ℴ\",\n\t\"osol;\": \"⊘\",\n\t\"Ouml;\": \"Ö\",\n\t\"ouml;\": \"ö\",\n\t\"para;\": \"¶\",\n\t\"part;\": \"∂\",\n\t\"perp;\": \"⊥\",\n\t\"phiv;\": \"ϕ\",\n\t\"plus;\": \"+\",\n\t\"Popf;\": \"ℙ\",\n\t\"popf;\": \"𝕡\",\n\tpound: \"£\",\n\t\"prap;\": \"⪷\",\n\t\"prec;\": \"≺\",\n\t\"prnE;\": \"⪵\",\n\t\"prod;\": \"∏\",\n\t\"prop;\": \"∝\",\n\t\"Pscr;\": \"𝒫\",\n\t\"pscr;\": \"𝓅\",\n\t\"qint;\": \"⨌\",\n\t\"Qopf;\": \"ℚ\",\n\t\"qopf;\": \"𝕢\",\n\t\"Qscr;\": \"𝒬\",\n\t\"qscr;\": \"𝓆\",\n\t\"QUOT;\": \"\\\"\",\n\t\"quot;\": \"\\\"\",\n\t\"race;\": \"∽̱\",\n\t\"Rang;\": \"⟫\",\n\t\"rang;\": \"⟩\",\n\traquo: \"»\",\n\t\"Rarr;\": \"↠\",\n\t\"rArr;\": \"⇒\",\n\t\"rarr;\": \"→\",\n\t\"rcub;\": \"}\",\n\t\"rdca;\": \"⤷\",\n\t\"rdsh;\": \"↳\",\n\t\"real;\": \"ℜ\",\n\t\"rect;\": \"▭\",\n\t\"rHar;\": \"⥤\",\n\t\"rhov;\": \"ϱ\",\n\t\"ring;\": \"˚\",\n\t\"Ropf;\": \"ℝ\",\n\t\"ropf;\": \"𝕣\",\n\t\"rpar;\": \")\",\n\t\"Rscr;\": \"ℛ\",\n\t\"rscr;\": \"𝓇\",\n\t\"rsqb;\": \"]\",\n\t\"rtri;\": \"▹\",\n\t\"scap;\": \"⪸\",\n\t\"scnE;\": \"⪶\",\n\t\"sdot;\": \"⋅\",\n\t\"sect;\": \"§\",\n\t\"semi;\": \";\",\n\t\"sext;\": \"✶\",\n\t\"SHcy;\": \"Ш\",\n\t\"shcy;\": \"ш\",\n\t\"sime;\": \"≃\",\n\t\"simg;\": \"⪞\",\n\t\"siml;\": \"⪝\",\n\t\"smid;\": \"∣\",\n\t\"smte;\": \"⪬\",\n\t\"solb;\": \"⧄\",\n\t\"Sopf;\": \"𝕊\",\n\t\"sopf;\": \"𝕤\",\n\t\"spar;\": \"∥\",\n\t\"Sqrt;\": \"√\",\n\t\"squf;\": \"▪\",\n\t\"Sscr;\": \"𝒮\",\n\t\"sscr;\": \"𝓈\",\n\t\"Star;\": \"⋆\",\n\t\"star;\": \"☆\",\n\t\"subE;\": \"⫅\",\n\t\"sube;\": \"⊆\",\n\t\"succ;\": \"≻\",\n\t\"sung;\": \"♪\",\n\t\"sup1;\": \"¹\",\n\t\"sup2;\": \"²\",\n\t\"sup3;\": \"³\",\n\t\"supE;\": \"⫆\",\n\t\"supe;\": \"⊇\",\n\tszlig: \"ß\",\n\t\"tbrk;\": \"⎴\",\n\t\"tdot;\": \"⃛\",\n\tTHORN: \"Þ\",\n\tthorn: \"þ\",\n\ttimes: \"×\",\n\t\"tint;\": \"∭\",\n\t\"toea;\": \"⤨\",\n\t\"Topf;\": \"𝕋\",\n\t\"topf;\": \"𝕥\",\n\t\"tosa;\": \"⤩\",\n\t\"trie;\": \"≜\",\n\t\"Tscr;\": \"𝒯\",\n\t\"tscr;\": \"𝓉\",\n\t\"TScy;\": \"Ц\",\n\t\"tscy;\": \"ц\",\n\t\"Uarr;\": \"↟\",\n\t\"uArr;\": \"⇑\",\n\t\"uarr;\": \"↑\",\n\tUcirc: \"Û\",\n\tucirc: \"û\",\n\t\"uHar;\": \"⥣\",\n\t\"Uopf;\": \"𝕌\",\n\t\"uopf;\": \"𝕦\",\n\t\"Upsi;\": \"ϒ\",\n\t\"upsi;\": \"υ\",\n\t\"Uscr;\": \"𝒰\",\n\t\"uscr;\": \"𝓊\",\n\t\"utri;\": \"▵\",\n\t\"Uuml;\": \"Ü\",\n\t\"uuml;\": \"ü\",\n\t\"vArr;\": \"⇕\",\n\t\"varr;\": \"↕\",\n\t\"Vbar;\": \"⫫\",\n\t\"vBar;\": \"⫨\",\n\t\"Vert;\": \"‖\",\n\t\"vert;\": \"|\",\n\t\"Vopf;\": \"𝕍\",\n\t\"vopf;\": \"𝕧\",\n\t\"Vscr;\": \"𝒱\",\n\t\"vscr;\": \"𝓋\",\n\t\"Wopf;\": \"𝕎\",\n\t\"wopf;\": \"𝕨\",\n\t\"Wscr;\": \"𝒲\",\n\t\"wscr;\": \"𝓌\",\n\t\"xcap;\": \"⋂\",\n\t\"xcup;\": \"⋃\",\n\t\"xmap;\": \"⟼\",\n\t\"xnis;\": \"⋻\",\n\t\"Xopf;\": \"𝕏\",\n\t\"xopf;\": \"𝕩\",\n\t\"Xscr;\": \"𝒳\",\n\t\"xscr;\": \"𝓍\",\n\t\"xvee;\": \"⋁\",\n\t\"YAcy;\": \"Я\",\n\t\"yacy;\": \"я\",\n\t\"YIcy;\": \"Ї\",\n\t\"yicy;\": \"ї\",\n\t\"Yopf;\": \"𝕐\",\n\t\"yopf;\": \"𝕪\",\n\t\"Yscr;\": \"𝒴\",\n\t\"yscr;\": \"𝓎\",\n\t\"YUcy;\": \"Ю\",\n\t\"yucy;\": \"ю\",\n\t\"Yuml;\": \"Ÿ\",\n\t\"yuml;\": \"ÿ\",\n\t\"Zdot;\": \"Ż\",\n\t\"zdot;\": \"ż\",\n\t\"Zeta;\": \"Ζ\",\n\t\"zeta;\": \"ζ\",\n\t\"ZHcy;\": \"Ж\",\n\t\"zhcy;\": \"ж\",\n\t\"Zopf;\": \"ℤ\",\n\t\"zopf;\": \"𝕫\",\n\t\"Zscr;\": \"𝒵\",\n\t\"zscr;\": \"𝓏\",\n\t\"zwnj;\": \"‌\",\n\tAacute: \"Á\",\n\taacute: \"á\",\n\t\"Acirc;\": \"Â\",\n\t\"acirc;\": \"â\",\n\t\"acute;\": \"´\",\n\t\"AElig;\": \"Æ\",\n\t\"aelig;\": \"æ\",\n\tAgrave: \"À\",\n\tagrave: \"à\",\n\t\"aleph;\": \"ℵ\",\n\t\"Alpha;\": \"Α\",\n\t\"alpha;\": \"α\",\n\t\"Amacr;\": \"Ā\",\n\t\"amacr;\": \"ā\",\n\t\"amalg;\": \"⨿\",\n\t\"angle;\": \"∠\",\n\t\"angrt;\": \"∟\",\n\t\"angst;\": \"Å\",\n\t\"Aogon;\": \"Ą\",\n\t\"aogon;\": \"ą\",\n\t\"Aring;\": \"Å\",\n\t\"aring;\": \"å\",\n\t\"asymp;\": \"≈\",\n\tAtilde: \"Ã\",\n\tatilde: \"ã\",\n\t\"awint;\": \"⨑\",\n\t\"bcong;\": \"≌\",\n\t\"bdquo;\": \"„\",\n\t\"bepsi;\": \"϶\",\n\t\"blank;\": \"␣\",\n\t\"blk12;\": \"▒\",\n\t\"blk14;\": \"░\",\n\t\"blk34;\": \"▓\",\n\t\"block;\": \"█\",\n\t\"boxDL;\": \"╗\",\n\t\"boxDl;\": \"╖\",\n\t\"boxdL;\": \"╕\",\n\t\"boxdl;\": \"┐\",\n\t\"boxDR;\": \"╔\",\n\t\"boxDr;\": \"╓\",\n\t\"boxdR;\": \"╒\",\n\t\"boxdr;\": \"┌\",\n\t\"boxHD;\": \"╦\",\n\t\"boxHd;\": \"╤\",\n\t\"boxhD;\": \"╥\",\n\t\"boxhd;\": \"┬\",\n\t\"boxHU;\": \"╩\",\n\t\"boxHu;\": \"╧\",\n\t\"boxhU;\": \"╨\",\n\t\"boxhu;\": \"┴\",\n\t\"boxUL;\": \"╝\",\n\t\"boxUl;\": \"╜\",\n\t\"boxuL;\": \"╛\",\n\t\"boxul;\": \"┘\",\n\t\"boxUR;\": \"╚\",\n\t\"boxUr;\": \"╙\",\n\t\"boxuR;\": \"╘\",\n\t\"boxur;\": \"└\",\n\t\"boxVH;\": \"╬\",\n\t\"boxVh;\": \"╫\",\n\t\"boxvH;\": \"╪\",\n\t\"boxvh;\": \"┼\",\n\t\"boxVL;\": \"╣\",\n\t\"boxVl;\": \"╢\",\n\t\"boxvL;\": \"╡\",\n\t\"boxvl;\": \"┤\",\n\t\"boxVR;\": \"╠\",\n\t\"boxVr;\": \"╟\",\n\t\"boxvR;\": \"╞\",\n\t\"boxvr;\": \"├\",\n\t\"Breve;\": \"˘\",\n\t\"breve;\": \"˘\",\n\tbrvbar: \"¦\",\n\t\"bsemi;\": \"⁏\",\n\t\"bsime;\": \"⋍\",\n\t\"bsolb;\": \"⧅\",\n\t\"bumpE;\": \"⪮\",\n\t\"bumpe;\": \"≏\",\n\t\"caret;\": \"⁁\",\n\t\"caron;\": \"ˇ\",\n\t\"ccaps;\": \"⩍\",\n\tCcedil: \"Ç\",\n\tccedil: \"ç\",\n\t\"Ccirc;\": \"Ĉ\",\n\t\"ccirc;\": \"ĉ\",\n\t\"ccups;\": \"⩌\",\n\t\"cedil;\": \"¸\",\n\t\"check;\": \"✓\",\n\t\"clubs;\": \"♣\",\n\t\"Colon;\": \"∷\",\n\t\"colon;\": \":\",\n\t\"comma;\": \",\",\n\t\"crarr;\": \"↵\",\n\t\"Cross;\": \"⨯\",\n\t\"cross;\": \"✗\",\n\t\"csube;\": \"⫑\",\n\t\"csupe;\": \"⫒\",\n\t\"ctdot;\": \"⋯\",\n\t\"cuepr;\": \"⋞\",\n\t\"cuesc;\": \"⋟\",\n\t\"cupor;\": \"⩅\",\n\tcurren: \"¤\",\n\t\"cuvee;\": \"⋎\",\n\t\"cuwed;\": \"⋏\",\n\t\"cwint;\": \"∱\",\n\t\"Dashv;\": \"⫤\",\n\t\"dashv;\": \"⊣\",\n\t\"dblac;\": \"˝\",\n\t\"ddarr;\": \"⇊\",\n\t\"Delta;\": \"Δ\",\n\t\"delta;\": \"δ\",\n\t\"dharl;\": \"⇃\",\n\t\"dharr;\": \"⇂\",\n\t\"diams;\": \"♦\",\n\t\"disin;\": \"⋲\",\n\tdivide: \"÷\",\n\t\"doteq;\": \"≐\",\n\t\"dtdot;\": \"⋱\",\n\t\"dtrif;\": \"▾\",\n\t\"duarr;\": \"⇵\",\n\t\"duhar;\": \"⥯\",\n\tEacute: \"É\",\n\teacute: \"é\",\n\t\"Ecirc;\": \"Ê\",\n\t\"ecirc;\": \"ê\",\n\t\"eDDot;\": \"⩷\",\n\t\"efDot;\": \"≒\",\n\tEgrave: \"È\",\n\tegrave: \"è\",\n\t\"Emacr;\": \"Ē\",\n\t\"emacr;\": \"ē\",\n\t\"empty;\": \"∅\",\n\t\"Eogon;\": \"Ę\",\n\t\"eogon;\": \"ę\",\n\t\"eplus;\": \"⩱\",\n\t\"epsiv;\": \"ϵ\",\n\t\"eqsim;\": \"≂\",\n\t\"Equal;\": \"⩵\",\n\t\"equiv;\": \"≡\",\n\t\"erarr;\": \"⥱\",\n\t\"erDot;\": \"≓\",\n\t\"esdot;\": \"≐\",\n\t\"exist;\": \"∃\",\n\t\"fflig;\": \"ﬀ\",\n\t\"filig;\": \"ﬁ\",\n\t\"fjlig;\": \"fj\",\n\t\"fllig;\": \"ﬂ\",\n\t\"fltns;\": \"▱\",\n\t\"forkv;\": \"⫙\",\n\tfrac12: \"½\",\n\tfrac14: \"¼\",\n\tfrac34: \"¾\",\n\t\"frasl;\": \"⁄\",\n\t\"frown;\": \"⌢\",\n\t\"Gamma;\": \"Γ\",\n\t\"gamma;\": \"γ\",\n\t\"Gcirc;\": \"Ĝ\",\n\t\"gcirc;\": \"ĝ\",\n\t\"gescc;\": \"⪩\",\n\t\"gimel;\": \"ℷ\",\n\t\"gneqq;\": \"≩\",\n\t\"gnsim;\": \"⋧\",\n\t\"grave;\": \"`\",\n\t\"gsime;\": \"⪎\",\n\t\"gsiml;\": \"⪐\",\n\t\"gtcir;\": \"⩺\",\n\t\"gtdot;\": \"⋗\",\n\t\"Hacek;\": \"ˇ\",\n\t\"harrw;\": \"↭\",\n\t\"Hcirc;\": \"Ĥ\",\n\t\"hcirc;\": \"ĥ\",\n\t\"hoarr;\": \"⇿\",\n\tIacute: \"Í\",\n\tiacute: \"í\",\n\t\"Icirc;\": \"Î\",\n\t\"icirc;\": \"î\",\n\t\"iexcl;\": \"¡\",\n\tIgrave: \"Ì\",\n\tigrave: \"ì\",\n\t\"iiint;\": \"∭\",\n\t\"iiota;\": \"℩\",\n\t\"IJlig;\": \"Ĳ\",\n\t\"ijlig;\": \"ĳ\",\n\t\"Imacr;\": \"Ī\",\n\t\"imacr;\": \"ī\",\n\t\"image;\": \"ℑ\",\n\t\"imath;\": \"ı\",\n\t\"imped;\": \"Ƶ\",\n\t\"infin;\": \"∞\",\n\t\"Iogon;\": \"Į\",\n\t\"iogon;\": \"į\",\n\t\"iprod;\": \"⨼\",\n\tiquest: \"¿\",\n\t\"isinE;\": \"⋹\",\n\t\"isins;\": \"⋴\",\n\t\"isinv;\": \"∈\",\n\t\"Iukcy;\": \"І\",\n\t\"iukcy;\": \"і\",\n\t\"Jcirc;\": \"Ĵ\",\n\t\"jcirc;\": \"ĵ\",\n\t\"jmath;\": \"ȷ\",\n\t\"Jukcy;\": \"Є\",\n\t\"jukcy;\": \"є\",\n\t\"Kappa;\": \"Κ\",\n\t\"kappa;\": \"κ\",\n\t\"lAarr;\": \"⇚\",\n\t\"langd;\": \"⦑\",\n\t\"laquo;\": \"«\",\n\t\"larrb;\": \"⇤\",\n\t\"lates;\": \"⪭︀\",\n\t\"lBarr;\": \"⤎\",\n\t\"lbarr;\": \"⤌\",\n\t\"lbbrk;\": \"❲\",\n\t\"lbrke;\": \"⦋\",\n\t\"lceil;\": \"⌈\",\n\t\"ldquo;\": \"“\",\n\t\"lescc;\": \"⪨\",\n\t\"lhard;\": \"↽\",\n\t\"lharu;\": \"↼\",\n\t\"lhblk;\": \"▄\",\n\t\"llarr;\": \"⇇\",\n\t\"lltri;\": \"◺\",\n\t\"lneqq;\": \"≨\",\n\t\"lnsim;\": \"⋦\",\n\t\"loang;\": \"⟬\",\n\t\"loarr;\": \"⇽\",\n\t\"lobrk;\": \"⟦\",\n\t\"lopar;\": \"⦅\",\n\t\"lrarr;\": \"⇆\",\n\t\"lrhar;\": \"⇋\",\n\t\"lrtri;\": \"⊿\",\n\t\"lsime;\": \"⪍\",\n\t\"lsimg;\": \"⪏\",\n\t\"lsquo;\": \"‘\",\n\t\"ltcir;\": \"⩹\",\n\t\"ltdot;\": \"⋖\",\n\t\"ltrie;\": \"⊴\",\n\t\"ltrif;\": \"◂\",\n\t\"mdash;\": \"—\",\n\t\"mDDot;\": \"∺\",\n\t\"micro;\": \"µ\",\n\tmiddot: \"·\",\n\t\"minus;\": \"−\",\n\t\"mumap;\": \"⊸\",\n\t\"nabla;\": \"∇\",\n\t\"napid;\": \"≋̸\",\n\t\"napos;\": \"ŉ\",\n\t\"natur;\": \"♮\",\n\t\"nbump;\": \"≎̸\",\n\t\"ncong;\": \"≇\",\n\t\"ndash;\": \"–\",\n\t\"neArr;\": \"⇗\",\n\t\"nearr;\": \"↗\",\n\t\"nedot;\": \"≐̸\",\n\t\"nesim;\": \"≂̸\",\n\t\"ngeqq;\": \"≧̸\",\n\t\"ngsim;\": \"≵\",\n\t\"nhArr;\": \"⇎\",\n\t\"nharr;\": \"↮\",\n\t\"nhpar;\": \"⫲\",\n\t\"nlArr;\": \"⇍\",\n\t\"nlarr;\": \"↚\",\n\t\"nleqq;\": \"≦̸\",\n\t\"nless;\": \"≮\",\n\t\"nlsim;\": \"≴\",\n\t\"nltri;\": \"⋪\",\n\t\"notin;\": \"∉\",\n\t\"notni;\": \"∌\",\n\t\"npart;\": \"∂̸\",\n\t\"nprec;\": \"⊀\",\n\t\"nrArr;\": \"⇏\",\n\t\"nrarr;\": \"↛\",\n\t\"nrtri;\": \"⋫\",\n\t\"nsime;\": \"≄\",\n\t\"nsmid;\": \"∤\",\n\t\"nspar;\": \"∦\",\n\t\"nsubE;\": \"⫅̸\",\n\t\"nsube;\": \"⊈\",\n\t\"nsucc;\": \"⊁\",\n\t\"nsupE;\": \"⫆̸\",\n\t\"nsupe;\": \"⊉\",\n\tNtilde: \"Ñ\",\n\tntilde: \"ñ\",\n\t\"numsp;\": \" \",\n\t\"nvsim;\": \"∼⃒\",\n\t\"nwArr;\": \"⇖\",\n\t\"nwarr;\": \"↖\",\n\tOacute: \"Ó\",\n\toacute: \"ó\",\n\t\"Ocirc;\": \"Ô\",\n\t\"ocirc;\": \"ô\",\n\t\"odash;\": \"⊝\",\n\t\"OElig;\": \"Œ\",\n\t\"oelig;\": \"œ\",\n\t\"ofcir;\": \"⦿\",\n\tOgrave: \"Ò\",\n\tograve: \"ò\",\n\t\"ohbar;\": \"⦵\",\n\t\"olarr;\": \"↺\",\n\t\"olcir;\": \"⦾\",\n\t\"oline;\": \"‾\",\n\t\"Omacr;\": \"Ō\",\n\t\"omacr;\": \"ō\",\n\t\"Omega;\": \"Ω\",\n\t\"omega;\": \"ω\",\n\t\"operp;\": \"⦹\",\n\t\"oplus;\": \"⊕\",\n\t\"orarr;\": \"↻\",\n\t\"order;\": \"ℴ\",\n\tOslash: \"Ø\",\n\toslash: \"ø\",\n\tOtilde: \"Õ\",\n\totilde: \"õ\",\n\t\"ovbar;\": \"⌽\",\n\t\"parsl;\": \"⫽\",\n\t\"phone;\": \"☎\",\n\t\"plusb;\": \"⊞\",\n\t\"pluse;\": \"⩲\",\n\tplusmn: \"±\",\n\t\"pound;\": \"£\",\n\t\"prcue;\": \"≼\",\n\t\"Prime;\": \"″\",\n\t\"prime;\": \"′\",\n\t\"prnap;\": \"⪹\",\n\t\"prsim;\": \"≾\",\n\t\"quest;\": \"?\",\n\t\"rAarr;\": \"⇛\",\n\t\"radic;\": \"√\",\n\t\"rangd;\": \"⦒\",\n\t\"range;\": \"⦥\",\n\t\"raquo;\": \"»\",\n\t\"rarrb;\": \"⇥\",\n\t\"rarrc;\": \"⤳\",\n\t\"rarrw;\": \"↝\",\n\t\"ratio;\": \"∶\",\n\t\"RBarr;\": \"⤐\",\n\t\"rBarr;\": \"⤏\",\n\t\"rbarr;\": \"⤍\",\n\t\"rbbrk;\": \"❳\",\n\t\"rbrke;\": \"⦌\",\n\t\"rceil;\": \"⌉\",\n\t\"rdquo;\": \"”\",\n\t\"reals;\": \"ℝ\",\n\t\"rhard;\": \"⇁\",\n\t\"rharu;\": \"⇀\",\n\t\"rlarr;\": \"⇄\",\n\t\"rlhar;\": \"⇌\",\n\t\"rnmid;\": \"⫮\",\n\t\"roang;\": \"⟭\",\n\t\"roarr;\": \"⇾\",\n\t\"robrk;\": \"⟧\",\n\t\"ropar;\": \"⦆\",\n\t\"rrarr;\": \"⇉\",\n\t\"rsquo;\": \"’\",\n\t\"rtrie;\": \"⊵\",\n\t\"rtrif;\": \"▸\",\n\t\"sbquo;\": \"‚\",\n\t\"sccue;\": \"≽\",\n\t\"Scirc;\": \"Ŝ\",\n\t\"scirc;\": \"ŝ\",\n\t\"scnap;\": \"⪺\",\n\t\"scsim;\": \"≿\",\n\t\"sdotb;\": \"⊡\",\n\t\"sdote;\": \"⩦\",\n\t\"seArr;\": \"⇘\",\n\t\"searr;\": \"↘\",\n\t\"setmn;\": \"∖\",\n\t\"sharp;\": \"♯\",\n\t\"Sigma;\": \"Σ\",\n\t\"sigma;\": \"σ\",\n\t\"simeq;\": \"≃\",\n\t\"simgE;\": \"⪠\",\n\t\"simlE;\": \"⪟\",\n\t\"simne;\": \"≆\",\n\t\"slarr;\": \"←\",\n\t\"smile;\": \"⌣\",\n\t\"smtes;\": \"⪬︀\",\n\t\"sqcap;\": \"⊓\",\n\t\"sqcup;\": \"⊔\",\n\t\"sqsub;\": \"⊏\",\n\t\"sqsup;\": \"⊐\",\n\t\"srarr;\": \"→\",\n\t\"starf;\": \"★\",\n\t\"strns;\": \"¯\",\n\t\"subnE;\": \"⫋\",\n\t\"subne;\": \"⊊\",\n\t\"supnE;\": \"⫌\",\n\t\"supne;\": \"⊋\",\n\t\"swArr;\": \"⇙\",\n\t\"swarr;\": \"↙\",\n\t\"szlig;\": \"ß\",\n\t\"Theta;\": \"Θ\",\n\t\"theta;\": \"θ\",\n\t\"thkap;\": \"≈\",\n\t\"THORN;\": \"Þ\",\n\t\"thorn;\": \"þ\",\n\t\"Tilde;\": \"∼\",\n\t\"tilde;\": \"˜\",\n\t\"times;\": \"×\",\n\t\"TRADE;\": \"™\",\n\t\"trade;\": \"™\",\n\t\"trisb;\": \"⧍\",\n\t\"TSHcy;\": \"Ћ\",\n\t\"tshcy;\": \"ћ\",\n\t\"twixt;\": \"≬\",\n\tUacute: \"Ú\",\n\tuacute: \"ú\",\n\t\"Ubrcy;\": \"Ў\",\n\t\"ubrcy;\": \"ў\",\n\t\"Ucirc;\": \"Û\",\n\t\"ucirc;\": \"û\",\n\t\"udarr;\": \"⇅\",\n\t\"udhar;\": \"⥮\",\n\tUgrave: \"Ù\",\n\tugrave: \"ù\",\n\t\"uharl;\": \"↿\",\n\t\"uharr;\": \"↾\",\n\t\"uhblk;\": \"▀\",\n\t\"ultri;\": \"◸\",\n\t\"Umacr;\": \"Ū\",\n\t\"umacr;\": \"ū\",\n\t\"Union;\": \"⋃\",\n\t\"Uogon;\": \"Ų\",\n\t\"uogon;\": \"ų\",\n\t\"uplus;\": \"⊎\",\n\t\"upsih;\": \"ϒ\",\n\t\"UpTee;\": \"⊥\",\n\t\"Uring;\": \"Ů\",\n\t\"uring;\": \"ů\",\n\t\"urtri;\": \"◹\",\n\t\"utdot;\": \"⋰\",\n\t\"utrif;\": \"▴\",\n\t\"uuarr;\": \"⇈\",\n\t\"varpi;\": \"ϖ\",\n\t\"vBarv;\": \"⫩\",\n\t\"VDash;\": \"⊫\",\n\t\"Vdash;\": \"⊩\",\n\t\"vDash;\": \"⊨\",\n\t\"vdash;\": \"⊢\",\n\t\"veeeq;\": \"≚\",\n\t\"vltri;\": \"⊲\",\n\t\"vnsub;\": \"⊂⃒\",\n\t\"vnsup;\": \"⊃⃒\",\n\t\"vprop;\": \"∝\",\n\t\"vrtri;\": \"⊳\",\n\t\"Wcirc;\": \"Ŵ\",\n\t\"wcirc;\": \"ŵ\",\n\t\"Wedge;\": \"⋀\",\n\t\"wedge;\": \"∧\",\n\t\"xcirc;\": \"◯\",\n\t\"xdtri;\": \"▽\",\n\t\"xhArr;\": \"⟺\",\n\t\"xharr;\": \"⟷\",\n\t\"xlArr;\": \"⟸\",\n\t\"xlarr;\": \"⟵\",\n\t\"xodot;\": \"⨀\",\n\t\"xrArr;\": \"⟹\",\n\t\"xrarr;\": \"⟶\",\n\t\"xutri;\": \"△\",\n\tYacute: \"Ý\",\n\tyacute: \"ý\",\n\t\"Ycirc;\": \"Ŷ\",\n\t\"ycirc;\": \"ŷ\",\n\t\"Aacute;\": \"Á\",\n\t\"aacute;\": \"á\",\n\t\"Abreve;\": \"Ă\",\n\t\"abreve;\": \"ă\",\n\t\"Agrave;\": \"À\",\n\t\"agrave;\": \"à\",\n\t\"andand;\": \"⩕\",\n\t\"angmsd;\": \"∡\",\n\t\"angsph;\": \"∢\",\n\t\"apacir;\": \"⩯\",\n\t\"approx;\": \"≈\",\n\t\"Assign;\": \"≔\",\n\t\"Atilde;\": \"Ã\",\n\t\"atilde;\": \"ã\",\n\t\"barvee;\": \"⊽\",\n\t\"Barwed;\": \"⌆\",\n\t\"barwed;\": \"⌅\",\n\t\"becaus;\": \"∵\",\n\t\"bernou;\": \"ℬ\",\n\t\"bigcap;\": \"⋂\",\n\t\"bigcup;\": \"⋃\",\n\t\"bigvee;\": \"⋁\",\n\t\"bkarow;\": \"⤍\",\n\t\"bottom;\": \"⊥\",\n\t\"bowtie;\": \"⋈\",\n\t\"boxbox;\": \"⧉\",\n\t\"bprime;\": \"‵\",\n\t\"brvbar;\": \"¦\",\n\t\"bullet;\": \"•\",\n\t\"Bumpeq;\": \"≎\",\n\t\"bumpeq;\": \"≏\",\n\t\"Cacute;\": \"Ć\",\n\t\"cacute;\": \"ć\",\n\t\"capand;\": \"⩄\",\n\t\"capcap;\": \"⩋\",\n\t\"capcup;\": \"⩇\",\n\t\"capdot;\": \"⩀\",\n\t\"Ccaron;\": \"Č\",\n\t\"ccaron;\": \"č\",\n\t\"Ccedil;\": \"Ç\",\n\t\"ccedil;\": \"ç\",\n\t\"circeq;\": \"≗\",\n\t\"cirmid;\": \"⫯\",\n\t\"Colone;\": \"⩴\",\n\t\"colone;\": \"≔\",\n\t\"commat;\": \"@\",\n\t\"compfn;\": \"∘\",\n\t\"Conint;\": \"∯\",\n\t\"conint;\": \"∮\",\n\t\"coprod;\": \"∐\",\n\t\"copysr;\": \"℗\",\n\t\"cularr;\": \"↶\",\n\t\"CupCap;\": \"≍\",\n\t\"cupcap;\": \"⩆\",\n\t\"cupcup;\": \"⩊\",\n\t\"cupdot;\": \"⊍\",\n\t\"curarr;\": \"↷\",\n\t\"curren;\": \"¤\",\n\t\"cylcty;\": \"⌭\",\n\t\"Dagger;\": \"‡\",\n\t\"dagger;\": \"†\",\n\t\"daleth;\": \"ℸ\",\n\t\"Dcaron;\": \"Ď\",\n\t\"dcaron;\": \"ď\",\n\t\"dfisht;\": \"⥿\",\n\t\"divide;\": \"÷\",\n\t\"divonx;\": \"⋇\",\n\t\"dlcorn;\": \"⌞\",\n\t\"dlcrop;\": \"⌍\",\n\t\"dollar;\": \"$\",\n\t\"DotDot;\": \"⃜\",\n\t\"drcorn;\": \"⌟\",\n\t\"drcrop;\": \"⌌\",\n\t\"Dstrok;\": \"Đ\",\n\t\"dstrok;\": \"đ\",\n\t\"Eacute;\": \"É\",\n\t\"eacute;\": \"é\",\n\t\"easter;\": \"⩮\",\n\t\"Ecaron;\": \"Ě\",\n\t\"ecaron;\": \"ě\",\n\t\"ecolon;\": \"≕\",\n\t\"Egrave;\": \"È\",\n\t\"egrave;\": \"è\",\n\t\"egsdot;\": \"⪘\",\n\t\"elsdot;\": \"⪗\",\n\t\"emptyv;\": \"∅\",\n\t\"emsp13;\": \" \",\n\t\"emsp14;\": \" \",\n\t\"eparsl;\": \"⧣\",\n\t\"eqcirc;\": \"≖\",\n\t\"equals;\": \"=\",\n\t\"equest;\": \"≟\",\n\t\"Exists;\": \"∃\",\n\t\"female;\": \"♀\",\n\t\"ffilig;\": \"ﬃ\",\n\t\"ffllig;\": \"ﬄ\",\n\t\"ForAll;\": \"∀\",\n\t\"forall;\": \"∀\",\n\t\"frac12;\": \"½\",\n\t\"frac13;\": \"⅓\",\n\t\"frac14;\": \"¼\",\n\t\"frac15;\": \"⅕\",\n\t\"frac16;\": \"⅙\",\n\t\"frac18;\": \"⅛\",\n\t\"frac23;\": \"⅔\",\n\t\"frac25;\": \"⅖\",\n\t\"frac34;\": \"¾\",\n\t\"frac35;\": \"⅗\",\n\t\"frac38;\": \"⅜\",\n\t\"frac45;\": \"⅘\",\n\t\"frac56;\": \"⅚\",\n\t\"frac58;\": \"⅝\",\n\t\"frac78;\": \"⅞\",\n\t\"gacute;\": \"ǵ\",\n\t\"Gammad;\": \"Ϝ\",\n\t\"gammad;\": \"ϝ\",\n\t\"Gbreve;\": \"Ğ\",\n\t\"gbreve;\": \"ğ\",\n\t\"Gcedil;\": \"Ģ\",\n\t\"gesdot;\": \"⪀\",\n\t\"gesles;\": \"⪔\",\n\t\"gtlPar;\": \"⦕\",\n\t\"gtrarr;\": \"⥸\",\n\t\"gtrdot;\": \"⋗\",\n\t\"gtrsim;\": \"≳\",\n\t\"hairsp;\": \" \",\n\t\"hamilt;\": \"ℋ\",\n\t\"HARDcy;\": \"Ъ\",\n\t\"hardcy;\": \"ъ\",\n\t\"hearts;\": \"♥\",\n\t\"hellip;\": \"…\",\n\t\"hercon;\": \"⊹\",\n\t\"homtht;\": \"∻\",\n\t\"horbar;\": \"―\",\n\t\"hslash;\": \"ℏ\",\n\t\"Hstrok;\": \"Ħ\",\n\t\"hstrok;\": \"ħ\",\n\t\"hybull;\": \"⁃\",\n\t\"hyphen;\": \"‐\",\n\t\"Iacute;\": \"Í\",\n\t\"iacute;\": \"í\",\n\t\"Igrave;\": \"Ì\",\n\t\"igrave;\": \"ì\",\n\t\"iiiint;\": \"⨌\",\n\t\"iinfin;\": \"⧜\",\n\t\"incare;\": \"℅\",\n\t\"inodot;\": \"ı\",\n\t\"intcal;\": \"⊺\",\n\t\"iquest;\": \"¿\",\n\t\"isinsv;\": \"⋳\",\n\t\"Itilde;\": \"Ĩ\",\n\t\"itilde;\": \"ĩ\",\n\t\"Jsercy;\": \"Ј\",\n\t\"jsercy;\": \"ј\",\n\t\"kappav;\": \"ϰ\",\n\t\"Kcedil;\": \"Ķ\",\n\t\"kcedil;\": \"ķ\",\n\t\"kgreen;\": \"ĸ\",\n\t\"Lacute;\": \"Ĺ\",\n\t\"lacute;\": \"ĺ\",\n\t\"lagran;\": \"ℒ\",\n\t\"Lambda;\": \"Λ\",\n\t\"lambda;\": \"λ\",\n\t\"langle;\": \"⟨\",\n\t\"larrfs;\": \"⤝\",\n\t\"larrhk;\": \"↩\",\n\t\"larrlp;\": \"↫\",\n\t\"larrpl;\": \"⤹\",\n\t\"larrtl;\": \"↢\",\n\t\"lAtail;\": \"⤛\",\n\t\"latail;\": \"⤙\",\n\t\"lbrace;\": \"{\",\n\t\"lbrack;\": \"[\",\n\t\"Lcaron;\": \"Ľ\",\n\t\"lcaron;\": \"ľ\",\n\t\"Lcedil;\": \"Ļ\",\n\t\"lcedil;\": \"ļ\",\n\t\"ldquor;\": \"„\",\n\t\"lesdot;\": \"⩿\",\n\t\"lesges;\": \"⪓\",\n\t\"lfisht;\": \"⥼\",\n\t\"lfloor;\": \"⌊\",\n\t\"lharul;\": \"⥪\",\n\t\"llhard;\": \"⥫\",\n\t\"Lmidot;\": \"Ŀ\",\n\t\"lmidot;\": \"ŀ\",\n\t\"lmoust;\": \"⎰\",\n\t\"loplus;\": \"⨭\",\n\t\"lowast;\": \"∗\",\n\t\"lowbar;\": \"_\",\n\t\"lparlt;\": \"⦓\",\n\t\"lrhard;\": \"⥭\",\n\t\"lsaquo;\": \"‹\",\n\t\"lsquor;\": \"‚\",\n\t\"Lstrok;\": \"Ł\",\n\t\"lstrok;\": \"ł\",\n\t\"lthree;\": \"⋋\",\n\t\"ltimes;\": \"⋉\",\n\t\"ltlarr;\": \"⥶\",\n\t\"ltrPar;\": \"⦖\",\n\t\"mapsto;\": \"↦\",\n\t\"marker;\": \"▮\",\n\t\"mcomma;\": \"⨩\",\n\t\"midast;\": \"*\",\n\t\"midcir;\": \"⫰\",\n\t\"middot;\": \"·\",\n\t\"minusb;\": \"⊟\",\n\t\"minusd;\": \"∸\",\n\t\"mnplus;\": \"∓\",\n\t\"models;\": \"⊧\",\n\t\"mstpos;\": \"∾\",\n\t\"Nacute;\": \"Ń\",\n\t\"nacute;\": \"ń\",\n\t\"nbumpe;\": \"≏̸\",\n\t\"Ncaron;\": \"Ň\",\n\t\"ncaron;\": \"ň\",\n\t\"Ncedil;\": \"Ņ\",\n\t\"ncedil;\": \"ņ\",\n\t\"nearhk;\": \"⤤\",\n\t\"nequiv;\": \"≢\",\n\t\"nesear;\": \"⤨\",\n\t\"nexist;\": \"∄\",\n\t\"nltrie;\": \"⋬\",\n\t\"notinE;\": \"⋹̸\",\n\t\"nparsl;\": \"⫽⃥\",\n\t\"nprcue;\": \"⋠\",\n\t\"nrarrc;\": \"⤳̸\",\n\t\"nrarrw;\": \"↝̸\",\n\t\"nrtrie;\": \"⋭\",\n\t\"nsccue;\": \"⋡\",\n\t\"nsimeq;\": \"≄\",\n\t\"Ntilde;\": \"Ñ\",\n\t\"ntilde;\": \"ñ\",\n\t\"numero;\": \"№\",\n\t\"nVDash;\": \"⊯\",\n\t\"nVdash;\": \"⊮\",\n\t\"nvDash;\": \"⊭\",\n\t\"nvdash;\": \"⊬\",\n\t\"nvHarr;\": \"⤄\",\n\t\"nvlArr;\": \"⤂\",\n\t\"nvrArr;\": \"⤃\",\n\t\"nwarhk;\": \"⤣\",\n\t\"nwnear;\": \"⤧\",\n\t\"Oacute;\": \"Ó\",\n\t\"oacute;\": \"ó\",\n\t\"Odblac;\": \"Ő\",\n\t\"odblac;\": \"ő\",\n\t\"odsold;\": \"⦼\",\n\t\"Ograve;\": \"Ò\",\n\t\"ograve;\": \"ò\",\n\t\"ominus;\": \"⊖\",\n\t\"origof;\": \"⊶\",\n\t\"Oslash;\": \"Ø\",\n\t\"oslash;\": \"ø\",\n\t\"Otilde;\": \"Õ\",\n\t\"otilde;\": \"õ\",\n\t\"Otimes;\": \"⨷\",\n\t\"otimes;\": \"⊗\",\n\t\"parsim;\": \"⫳\",\n\t\"percnt;\": \"%\",\n\t\"period;\": \".\",\n\t\"permil;\": \"‰\",\n\t\"phmmat;\": \"ℳ\",\n\t\"planck;\": \"ℏ\",\n\t\"plankv;\": \"ℏ\",\n\t\"plusdo;\": \"∔\",\n\t\"plusdu;\": \"⨥\",\n\t\"plusmn;\": \"±\",\n\t\"preceq;\": \"⪯\",\n\t\"primes;\": \"ℙ\",\n\t\"prnsim;\": \"⋨\",\n\t\"propto;\": \"∝\",\n\t\"prurel;\": \"⊰\",\n\t\"puncsp;\": \" \",\n\t\"qprime;\": \"⁗\",\n\t\"Racute;\": \"Ŕ\",\n\t\"racute;\": \"ŕ\",\n\t\"rangle;\": \"⟩\",\n\t\"rarrap;\": \"⥵\",\n\t\"rarrfs;\": \"⤞\",\n\t\"rarrhk;\": \"↪\",\n\t\"rarrlp;\": \"↬\",\n\t\"rarrpl;\": \"⥅\",\n\t\"Rarrtl;\": \"⤖\",\n\t\"rarrtl;\": \"↣\",\n\t\"rAtail;\": \"⤜\",\n\t\"ratail;\": \"⤚\",\n\t\"rbrace;\": \"}\",\n\t\"rbrack;\": \"]\",\n\t\"Rcaron;\": \"Ř\",\n\t\"rcaron;\": \"ř\",\n\t\"Rcedil;\": \"Ŗ\",\n\t\"rcedil;\": \"ŗ\",\n\t\"rdquor;\": \"”\",\n\t\"rfisht;\": \"⥽\",\n\t\"rfloor;\": \"⌋\",\n\t\"rharul;\": \"⥬\",\n\t\"rmoust;\": \"⎱\",\n\t\"roplus;\": \"⨮\",\n\t\"rpargt;\": \"⦔\",\n\t\"rsaquo;\": \"›\",\n\t\"rsquor;\": \"’\",\n\t\"rthree;\": \"⋌\",\n\t\"rtimes;\": \"⋊\",\n\t\"Sacute;\": \"Ś\",\n\t\"sacute;\": \"ś\",\n\t\"Scaron;\": \"Š\",\n\t\"scaron;\": \"š\",\n\t\"Scedil;\": \"Ş\",\n\t\"scedil;\": \"ş\",\n\t\"scnsim;\": \"⋩\",\n\t\"searhk;\": \"⤥\",\n\t\"seswar;\": \"⤩\",\n\t\"sfrown;\": \"⌢\",\n\t\"SHCHcy;\": \"Щ\",\n\t\"shchcy;\": \"щ\",\n\t\"sigmaf;\": \"ς\",\n\t\"sigmav;\": \"ς\",\n\t\"simdot;\": \"⩪\",\n\t\"smashp;\": \"⨳\",\n\t\"SOFTcy;\": \"Ь\",\n\t\"softcy;\": \"ь\",\n\t\"solbar;\": \"⌿\",\n\t\"spades;\": \"♠\",\n\t\"sqcaps;\": \"⊓︀\",\n\t\"sqcups;\": \"⊔︀\",\n\t\"sqsube;\": \"⊑\",\n\t\"sqsupe;\": \"⊒\",\n\t\"Square;\": \"□\",\n\t\"square;\": \"□\",\n\t\"squarf;\": \"▪\",\n\t\"ssetmn;\": \"∖\",\n\t\"ssmile;\": \"⌣\",\n\t\"sstarf;\": \"⋆\",\n\t\"subdot;\": \"⪽\",\n\t\"Subset;\": \"⋐\",\n\t\"subset;\": \"⊂\",\n\t\"subsim;\": \"⫇\",\n\t\"subsub;\": \"⫕\",\n\t\"subsup;\": \"⫓\",\n\t\"succeq;\": \"⪰\",\n\t\"supdot;\": \"⪾\",\n\t\"Supset;\": \"⋑\",\n\t\"supset;\": \"⊃\",\n\t\"supsim;\": \"⫈\",\n\t\"supsub;\": \"⫔\",\n\t\"supsup;\": \"⫖\",\n\t\"swarhk;\": \"⤦\",\n\t\"swnwar;\": \"⤪\",\n\t\"target;\": \"⌖\",\n\t\"Tcaron;\": \"Ť\",\n\t\"tcaron;\": \"ť\",\n\t\"Tcedil;\": \"Ţ\",\n\t\"tcedil;\": \"ţ\",\n\t\"telrec;\": \"⌕\",\n\t\"there4;\": \"∴\",\n\t\"thetav;\": \"ϑ\",\n\t\"thinsp;\": \" \",\n\t\"thksim;\": \"∼\",\n\t\"timesb;\": \"⊠\",\n\t\"timesd;\": \"⨰\",\n\t\"topbot;\": \"⌶\",\n\t\"topcir;\": \"⫱\",\n\t\"tprime;\": \"‴\",\n\t\"tridot;\": \"◬\",\n\t\"Tstrok;\": \"Ŧ\",\n\t\"tstrok;\": \"ŧ\",\n\t\"Uacute;\": \"Ú\",\n\t\"uacute;\": \"ú\",\n\t\"Ubreve;\": \"Ŭ\",\n\t\"ubreve;\": \"ŭ\",\n\t\"Udblac;\": \"Ű\",\n\t\"udblac;\": \"ű\",\n\t\"ufisht;\": \"⥾\",\n\t\"Ugrave;\": \"Ù\",\n\t\"ugrave;\": \"ù\",\n\t\"ulcorn;\": \"⌜\",\n\t\"ulcrop;\": \"⌏\",\n\t\"urcorn;\": \"⌝\",\n\t\"urcrop;\": \"⌎\",\n\t\"Utilde;\": \"Ũ\",\n\t\"utilde;\": \"ũ\",\n\t\"vangrt;\": \"⦜\",\n\t\"varphi;\": \"ϕ\",\n\t\"varrho;\": \"ϱ\",\n\t\"Vdashl;\": \"⫦\",\n\t\"veebar;\": \"⊻\",\n\t\"vellip;\": \"⋮\",\n\t\"Verbar;\": \"‖\",\n\t\"verbar;\": \"|\",\n\t\"vsubnE;\": \"⫋︀\",\n\t\"vsubne;\": \"⊊︀\",\n\t\"vsupnE;\": \"⫌︀\",\n\t\"vsupne;\": \"⊋︀\",\n\t\"Vvdash;\": \"⊪\",\n\t\"wedbar;\": \"⩟\",\n\t\"wedgeq;\": \"≙\",\n\t\"weierp;\": \"℘\",\n\t\"wreath;\": \"≀\",\n\t\"xoplus;\": \"⨁\",\n\t\"xotime;\": \"⨂\",\n\t\"xsqcup;\": \"⨆\",\n\t\"xuplus;\": \"⨄\",\n\t\"xwedge;\": \"⋀\",\n\t\"Yacute;\": \"Ý\",\n\t\"yacute;\": \"ý\",\n\t\"Zacute;\": \"Ź\",\n\t\"zacute;\": \"ź\",\n\t\"Zcaron;\": \"Ž\",\n\t\"zcaron;\": \"ž\",\n\t\"zeetrf;\": \"ℨ\",\n\t\"alefsym;\": \"ℵ\",\n\t\"angrtvb;\": \"⊾\",\n\t\"angzarr;\": \"⍼\",\n\t\"asympeq;\": \"≍\",\n\t\"backsim;\": \"∽\",\n\t\"Because;\": \"∵\",\n\t\"because;\": \"∵\",\n\t\"bemptyv;\": \"⦰\",\n\t\"between;\": \"≬\",\n\t\"bigcirc;\": \"◯\",\n\t\"bigodot;\": \"⨀\",\n\t\"bigstar;\": \"★\",\n\t\"bnequiv;\": \"≡⃥\",\n\t\"boxplus;\": \"⊞\",\n\t\"Cayleys;\": \"ℭ\",\n\t\"Cconint;\": \"∰\",\n\t\"ccupssm;\": \"⩐\",\n\t\"Cedilla;\": \"¸\",\n\t\"cemptyv;\": \"⦲\",\n\t\"cirscir;\": \"⧂\",\n\t\"coloneq;\": \"≔\",\n\t\"congdot;\": \"⩭\",\n\t\"cudarrl;\": \"⤸\",\n\t\"cudarrr;\": \"⤵\",\n\t\"cularrp;\": \"⤽\",\n\t\"curarrm;\": \"⤼\",\n\t\"dbkarow;\": \"⤏\",\n\t\"ddagger;\": \"‡\",\n\t\"ddotseq;\": \"⩷\",\n\t\"demptyv;\": \"⦱\",\n\t\"Diamond;\": \"⋄\",\n\t\"diamond;\": \"⋄\",\n\t\"digamma;\": \"ϝ\",\n\t\"dotplus;\": \"∔\",\n\t\"DownTee;\": \"⊤\",\n\t\"dwangle;\": \"⦦\",\n\t\"Element;\": \"∈\",\n\t\"Epsilon;\": \"Ε\",\n\t\"epsilon;\": \"ε\",\n\t\"eqcolon;\": \"≕\",\n\t\"equivDD;\": \"⩸\",\n\t\"gesdoto;\": \"⪂\",\n\t\"gtquest;\": \"⩼\",\n\t\"gtrless;\": \"≷\",\n\t\"harrcir;\": \"⥈\",\n\t\"Implies;\": \"⇒\",\n\t\"intprod;\": \"⨼\",\n\t\"isindot;\": \"⋵\",\n\t\"larrbfs;\": \"⤟\",\n\t\"larrsim;\": \"⥳\",\n\t\"lbrksld;\": \"⦏\",\n\t\"lbrkslu;\": \"⦍\",\n\t\"ldrdhar;\": \"⥧\",\n\t\"LeftTee;\": \"⊣\",\n\t\"lesdoto;\": \"⪁\",\n\t\"lessdot;\": \"⋖\",\n\t\"lessgtr;\": \"≶\",\n\t\"lesssim;\": \"≲\",\n\t\"lotimes;\": \"⨴\",\n\t\"lozenge;\": \"◊\",\n\t\"ltquest;\": \"⩻\",\n\t\"luruhar;\": \"⥦\",\n\t\"maltese;\": \"✠\",\n\t\"minusdu;\": \"⨪\",\n\t\"napprox;\": \"≉\",\n\t\"natural;\": \"♮\",\n\t\"nearrow;\": \"↗\",\n\t\"NewLine;\": \"\\n\",\n\t\"nexists;\": \"∄\",\n\t\"NoBreak;\": \"⁠\",\n\t\"notinva;\": \"∉\",\n\t\"notinvb;\": \"⋷\",\n\t\"notinvc;\": \"⋶\",\n\t\"NotLess;\": \"≮\",\n\t\"notniva;\": \"∌\",\n\t\"notnivb;\": \"⋾\",\n\t\"notnivc;\": \"⋽\",\n\t\"npolint;\": \"⨔\",\n\t\"npreceq;\": \"⪯̸\",\n\t\"nsqsube;\": \"⋢\",\n\t\"nsqsupe;\": \"⋣\",\n\t\"nsubset;\": \"⊂⃒\",\n\t\"nsucceq;\": \"⪰̸\",\n\t\"nsupset;\": \"⊃⃒\",\n\t\"nvinfin;\": \"⧞\",\n\t\"nvltrie;\": \"⊴⃒\",\n\t\"nvrtrie;\": \"⊵⃒\",\n\t\"nwarrow;\": \"↖\",\n\t\"olcross;\": \"⦻\",\n\t\"Omicron;\": \"Ο\",\n\t\"omicron;\": \"ο\",\n\t\"orderof;\": \"ℴ\",\n\t\"orslope;\": \"⩗\",\n\t\"OverBar;\": \"‾\",\n\t\"pertenk;\": \"‱\",\n\t\"planckh;\": \"ℎ\",\n\t\"pluscir;\": \"⨢\",\n\t\"plussim;\": \"⨦\",\n\t\"plustwo;\": \"⨧\",\n\t\"precsim;\": \"≾\",\n\t\"Product;\": \"∏\",\n\t\"quatint;\": \"⨖\",\n\t\"questeq;\": \"≟\",\n\t\"rarrbfs;\": \"⤠\",\n\t\"rarrsim;\": \"⥴\",\n\t\"rbrksld;\": \"⦎\",\n\t\"rbrkslu;\": \"⦐\",\n\t\"rdldhar;\": \"⥩\",\n\t\"realine;\": \"ℛ\",\n\t\"rotimes;\": \"⨵\",\n\t\"ruluhar;\": \"⥨\",\n\t\"searrow;\": \"↘\",\n\t\"simplus;\": \"⨤\",\n\t\"simrarr;\": \"⥲\",\n\t\"subedot;\": \"⫃\",\n\t\"submult;\": \"⫁\",\n\t\"subplus;\": \"⪿\",\n\t\"subrarr;\": \"⥹\",\n\t\"succsim;\": \"≿\",\n\t\"supdsub;\": \"⫘\",\n\t\"supedot;\": \"⫄\",\n\t\"suphsol;\": \"⟉\",\n\t\"suphsub;\": \"⫗\",\n\t\"suplarr;\": \"⥻\",\n\t\"supmult;\": \"⫂\",\n\t\"supplus;\": \"⫀\",\n\t\"swarrow;\": \"↙\",\n\t\"topfork;\": \"⫚\",\n\t\"triplus;\": \"⨹\",\n\t\"tritime;\": \"⨻\",\n\t\"UpArrow;\": \"↑\",\n\t\"Uparrow;\": \"⇑\",\n\t\"uparrow;\": \"↑\",\n\t\"Upsilon;\": \"Υ\",\n\t\"upsilon;\": \"υ\",\n\t\"uwangle;\": \"⦧\",\n\t\"vzigzag;\": \"⦚\",\n\t\"zigrarr;\": \"⇝\",\n\t\"andslope;\": \"⩘\",\n\t\"angmsdaa;\": \"⦨\",\n\t\"angmsdab;\": \"⦩\",\n\t\"angmsdac;\": \"⦪\",\n\t\"angmsdad;\": \"⦫\",\n\t\"angmsdae;\": \"⦬\",\n\t\"angmsdaf;\": \"⦭\",\n\t\"angmsdag;\": \"⦮\",\n\t\"angmsdah;\": \"⦯\",\n\t\"angrtvbd;\": \"⦝\",\n\t\"approxeq;\": \"≊\",\n\t\"awconint;\": \"∳\",\n\t\"backcong;\": \"≌\",\n\t\"barwedge;\": \"⌅\",\n\t\"bbrktbrk;\": \"⎶\",\n\t\"bigoplus;\": \"⨁\",\n\t\"bigsqcup;\": \"⨆\",\n\t\"biguplus;\": \"⨄\",\n\t\"bigwedge;\": \"⋀\",\n\t\"boxminus;\": \"⊟\",\n\t\"boxtimes;\": \"⊠\",\n\t\"bsolhsub;\": \"⟈\",\n\t\"capbrcup;\": \"⩉\",\n\t\"circledR;\": \"®\",\n\t\"circledS;\": \"Ⓢ\",\n\t\"cirfnint;\": \"⨐\",\n\t\"clubsuit;\": \"♣\",\n\t\"cupbrcap;\": \"⩈\",\n\t\"curlyvee;\": \"⋎\",\n\t\"cwconint;\": \"∲\",\n\t\"DDotrahd;\": \"⤑\",\n\t\"doteqdot;\": \"≑\",\n\t\"DotEqual;\": \"≐\",\n\t\"dotminus;\": \"∸\",\n\t\"drbkarow;\": \"⤐\",\n\t\"dzigrarr;\": \"⟿\",\n\t\"elinters;\": \"⏧\",\n\t\"emptyset;\": \"∅\",\n\t\"eqvparsl;\": \"⧥\",\n\t\"fpartint;\": \"⨍\",\n\t\"geqslant;\": \"⩾\",\n\t\"gesdotol;\": \"⪄\",\n\t\"gnapprox;\": \"⪊\",\n\t\"hksearow;\": \"⤥\",\n\t\"hkswarow;\": \"⤦\",\n\t\"imagline;\": \"ℐ\",\n\t\"imagpart;\": \"ℑ\",\n\t\"infintie;\": \"⧝\",\n\t\"integers;\": \"ℤ\",\n\t\"Integral;\": \"∫\",\n\t\"intercal;\": \"⊺\",\n\t\"intlarhk;\": \"⨗\",\n\t\"laemptyv;\": \"⦴\",\n\t\"ldrushar;\": \"⥋\",\n\t\"leqslant;\": \"⩽\",\n\t\"lesdotor;\": \"⪃\",\n\t\"LessLess;\": \"⪡\",\n\t\"llcorner;\": \"⌞\",\n\t\"lnapprox;\": \"⪉\",\n\t\"lrcorner;\": \"⌟\",\n\t\"lurdshar;\": \"⥊\",\n\t\"mapstoup;\": \"↥\",\n\t\"multimap;\": \"⊸\",\n\t\"naturals;\": \"ℕ\",\n\t\"ncongdot;\": \"⩭̸\",\n\t\"NotEqual;\": \"≠\",\n\t\"notindot;\": \"⋵̸\",\n\t\"NotTilde;\": \"≁\",\n\t\"otimesas;\": \"⨶\",\n\t\"parallel;\": \"∥\",\n\t\"PartialD;\": \"∂\",\n\t\"plusacir;\": \"⨣\",\n\t\"pointint;\": \"⨕\",\n\t\"Precedes;\": \"≺\",\n\t\"precneqq;\": \"⪵\",\n\t\"precnsim;\": \"⋨\",\n\t\"profalar;\": \"⌮\",\n\t\"profline;\": \"⌒\",\n\t\"profsurf;\": \"⌓\",\n\t\"raemptyv;\": \"⦳\",\n\t\"realpart;\": \"ℜ\",\n\t\"RightTee;\": \"⊢\",\n\t\"rppolint;\": \"⨒\",\n\t\"rtriltri;\": \"⧎\",\n\t\"scpolint;\": \"⨓\",\n\t\"setminus;\": \"∖\",\n\t\"shortmid;\": \"∣\",\n\t\"smeparsl;\": \"⧤\",\n\t\"sqsubset;\": \"⊏\",\n\t\"sqsupset;\": \"⊐\",\n\t\"subseteq;\": \"⊆\",\n\t\"Succeeds;\": \"≻\",\n\t\"succneqq;\": \"⪶\",\n\t\"succnsim;\": \"⋩\",\n\t\"SuchThat;\": \"∋\",\n\t\"Superset;\": \"⊃\",\n\t\"supseteq;\": \"⊇\",\n\t\"thetasym;\": \"ϑ\",\n\t\"thicksim;\": \"∼\",\n\t\"timesbar;\": \"⨱\",\n\t\"triangle;\": \"▵\",\n\t\"triminus;\": \"⨺\",\n\t\"trpezium;\": \"⏢\",\n\t\"Uarrocir;\": \"⥉\",\n\t\"ulcorner;\": \"⌜\",\n\t\"UnderBar;\": \"_\",\n\t\"urcorner;\": \"⌝\",\n\t\"varkappa;\": \"ϰ\",\n\t\"varsigma;\": \"ς\",\n\t\"vartheta;\": \"ϑ\",\n\t\"backprime;\": \"‵\",\n\t\"backsimeq;\": \"⋍\",\n\t\"Backslash;\": \"∖\",\n\t\"bigotimes;\": \"⨂\",\n\t\"CenterDot;\": \"·\",\n\t\"centerdot;\": \"·\",\n\t\"checkmark;\": \"✓\",\n\t\"CircleDot;\": \"⊙\",\n\t\"complexes;\": \"ℂ\",\n\t\"Congruent;\": \"≡\",\n\t\"Coproduct;\": \"∐\",\n\t\"dotsquare;\": \"⊡\",\n\t\"DoubleDot;\": \"¨\",\n\t\"DownArrow;\": \"↓\",\n\t\"Downarrow;\": \"⇓\",\n\t\"downarrow;\": \"↓\",\n\t\"DownBreve;\": \"̑\",\n\t\"gtrapprox;\": \"⪆\",\n\t\"gtreqless;\": \"⋛\",\n\t\"gvertneqq;\": \"≩︀\",\n\t\"heartsuit;\": \"♥\",\n\t\"HumpEqual;\": \"≏\",\n\t\"LeftArrow;\": \"←\",\n\t\"Leftarrow;\": \"⇐\",\n\t\"leftarrow;\": \"←\",\n\t\"LeftFloor;\": \"⌊\",\n\t\"lesseqgtr;\": \"⋚\",\n\t\"LessTilde;\": \"≲\",\n\t\"lvertneqq;\": \"≨︀\",\n\t\"Mellintrf;\": \"ℳ\",\n\t\"MinusPlus;\": \"∓\",\n\t\"ngeqslant;\": \"⩾̸\",\n\t\"nleqslant;\": \"⩽̸\",\n\t\"NotCupCap;\": \"≭\",\n\t\"NotExists;\": \"∄\",\n\t\"NotSubset;\": \"⊂⃒\",\n\t\"nparallel;\": \"∦\",\n\t\"nshortmid;\": \"∤\",\n\t\"nsubseteq;\": \"⊈\",\n\t\"nsupseteq;\": \"⊉\",\n\t\"OverBrace;\": \"⏞\",\n\t\"pitchfork;\": \"⋔\",\n\t\"PlusMinus;\": \"±\",\n\t\"rationals;\": \"ℚ\",\n\t\"spadesuit;\": \"♠\",\n\t\"subseteqq;\": \"⫅\",\n\t\"subsetneq;\": \"⊊\",\n\t\"supseteqq;\": \"⫆\",\n\t\"supsetneq;\": \"⊋\",\n\t\"Therefore;\": \"∴\",\n\t\"therefore;\": \"∴\",\n\t\"ThinSpace;\": \" \",\n\t\"triangleq;\": \"≜\",\n\t\"TripleDot;\": \"⃛\",\n\t\"UnionPlus;\": \"⊎\",\n\t\"varpropto;\": \"∝\",\n\t\"Bernoullis;\": \"ℬ\",\n\t\"circledast;\": \"⊛\",\n\t\"CirclePlus;\": \"⊕\",\n\t\"complement;\": \"∁\",\n\t\"curlywedge;\": \"⋏\",\n\t\"eqslantgtr;\": \"⪖\",\n\t\"EqualTilde;\": \"≂\",\n\t\"Fouriertrf;\": \"ℱ\",\n\t\"gtreqqless;\": \"⪌\",\n\t\"ImaginaryI;\": \"ⅈ\",\n\t\"Laplacetrf;\": \"ℒ\",\n\t\"LeftVector;\": \"↼\",\n\t\"lessapprox;\": \"⪅\",\n\t\"lesseqqgtr;\": \"⪋\",\n\t\"Lleftarrow;\": \"⇚\",\n\t\"lmoustache;\": \"⎰\",\n\t\"longmapsto;\": \"⟼\",\n\t\"mapstodown;\": \"↧\",\n\t\"mapstoleft;\": \"↤\",\n\t\"nLeftarrow;\": \"⇍\",\n\t\"nleftarrow;\": \"↚\",\n\t\"NotElement;\": \"∉\",\n\t\"NotGreater;\": \"≯\",\n\t\"nsubseteqq;\": \"⫅̸\",\n\t\"nsupseteqq;\": \"⫆̸\",\n\t\"precapprox;\": \"⪷\",\n\t\"Proportion;\": \"∷\",\n\t\"RightArrow;\": \"→\",\n\t\"Rightarrow;\": \"⇒\",\n\t\"rightarrow;\": \"→\",\n\t\"RightFloor;\": \"⌋\",\n\t\"rmoustache;\": \"⎱\",\n\t\"sqsubseteq;\": \"⊑\",\n\t\"sqsupseteq;\": \"⊒\",\n\t\"subsetneqq;\": \"⫋\",\n\t\"succapprox;\": \"⪸\",\n\t\"supsetneqq;\": \"⫌\",\n\t\"ThickSpace;\": \"  \",\n\t\"TildeEqual;\": \"≃\",\n\t\"TildeTilde;\": \"≈\",\n\t\"UnderBrace;\": \"⏟\",\n\t\"UpArrowBar;\": \"⤒\",\n\t\"UpTeeArrow;\": \"↥\",\n\t\"upuparrows;\": \"⇈\",\n\t\"varepsilon;\": \"ϵ\",\n\t\"varnothing;\": \"∅\",\n\t\"backepsilon;\": \"϶\",\n\t\"blacksquare;\": \"▪\",\n\t\"circledcirc;\": \"⊚\",\n\t\"circleddash;\": \"⊝\",\n\t\"CircleMinus;\": \"⊖\",\n\t\"CircleTimes;\": \"⊗\",\n\t\"curlyeqprec;\": \"⋞\",\n\t\"curlyeqsucc;\": \"⋟\",\n\t\"diamondsuit;\": \"♦\",\n\t\"eqslantless;\": \"⪕\",\n\t\"Equilibrium;\": \"⇌\",\n\t\"expectation;\": \"ℰ\",\n\t\"GreaterLess;\": \"≷\",\n\t\"LeftCeiling;\": \"⌈\",\n\t\"LessGreater;\": \"≶\",\n\t\"MediumSpace;\": \" \",\n\t\"NotLessLess;\": \"≪̸\",\n\t\"NotPrecedes;\": \"⊀\",\n\t\"NotSucceeds;\": \"⊁\",\n\t\"NotSuperset;\": \"⊃⃒\",\n\t\"nRightarrow;\": \"⇏\",\n\t\"nrightarrow;\": \"↛\",\n\t\"OverBracket;\": \"⎴\",\n\t\"preccurlyeq;\": \"≼\",\n\t\"precnapprox;\": \"⪹\",\n\t\"quaternions;\": \"ℍ\",\n\t\"RightVector;\": \"⇀\",\n\t\"Rrightarrow;\": \"⇛\",\n\t\"RuleDelayed;\": \"⧴\",\n\t\"SmallCircle;\": \"∘\",\n\t\"SquareUnion;\": \"⊔\",\n\t\"straightphi;\": \"ϕ\",\n\t\"SubsetEqual;\": \"⊆\",\n\t\"succcurlyeq;\": \"≽\",\n\t\"succnapprox;\": \"⪺\",\n\t\"thickapprox;\": \"≈\",\n\t\"UpDownArrow;\": \"↕\",\n\t\"Updownarrow;\": \"⇕\",\n\t\"updownarrow;\": \"↕\",\n\t\"VerticalBar;\": \"∣\",\n\t\"blacklozenge;\": \"⧫\",\n\t\"DownArrowBar;\": \"⤓\",\n\t\"DownTeeArrow;\": \"↧\",\n\t\"ExponentialE;\": \"ⅇ\",\n\t\"exponentiale;\": \"ⅇ\",\n\t\"GreaterEqual;\": \"≥\",\n\t\"GreaterTilde;\": \"≳\",\n\t\"HilbertSpace;\": \"ℋ\",\n\t\"HumpDownHump;\": \"≎\",\n\t\"Intersection;\": \"⋂\",\n\t\"LeftArrowBar;\": \"⇤\",\n\t\"LeftTeeArrow;\": \"↤\",\n\t\"LeftTriangle;\": \"⊲\",\n\t\"LeftUpVector;\": \"↿\",\n\t\"NotCongruent;\": \"≢\",\n\t\"NotHumpEqual;\": \"≏̸\",\n\t\"NotLessEqual;\": \"≰\",\n\t\"NotLessTilde;\": \"≴\",\n\t\"Proportional;\": \"∝\",\n\t\"RightCeiling;\": \"⌉\",\n\t\"risingdotseq;\": \"≓\",\n\t\"RoundImplies;\": \"⥰\",\n\t\"ShortUpArrow;\": \"↑\",\n\t\"SquareSubset;\": \"⊏\",\n\t\"triangledown;\": \"▿\",\n\t\"triangleleft;\": \"◃\",\n\t\"UnderBracket;\": \"⎵\",\n\t\"varsubsetneq;\": \"⊊︀\",\n\t\"varsupsetneq;\": \"⊋︀\",\n\t\"VerticalLine;\": \"|\",\n\t\"ApplyFunction;\": \"⁡\",\n\t\"bigtriangleup;\": \"△\",\n\t\"blacktriangle;\": \"▴\",\n\t\"DifferentialD;\": \"ⅆ\",\n\t\"divideontimes;\": \"⋇\",\n\t\"DoubleLeftTee;\": \"⫤\",\n\t\"DoubleUpArrow;\": \"⇑\",\n\t\"fallingdotseq;\": \"≒\",\n\t\"hookleftarrow;\": \"↩\",\n\t\"leftarrowtail;\": \"↢\",\n\t\"leftharpoonup;\": \"↼\",\n\t\"LeftTeeVector;\": \"⥚\",\n\t\"LeftVectorBar;\": \"⥒\",\n\t\"LessFullEqual;\": \"≦\",\n\t\"LongLeftArrow;\": \"⟵\",\n\t\"Longleftarrow;\": \"⟸\",\n\t\"longleftarrow;\": \"⟵\",\n\t\"looparrowleft;\": \"↫\",\n\t\"measuredangle;\": \"∡\",\n\t\"NotEqualTilde;\": \"≂̸\",\n\t\"NotTildeEqual;\": \"≄\",\n\t\"NotTildeTilde;\": \"≉\",\n\t\"ntriangleleft;\": \"⋪\",\n\t\"Poincareplane;\": \"ℌ\",\n\t\"PrecedesEqual;\": \"⪯\",\n\t\"PrecedesTilde;\": \"≾\",\n\t\"RightArrowBar;\": \"⇥\",\n\t\"RightTeeArrow;\": \"↦\",\n\t\"RightTriangle;\": \"⊳\",\n\t\"RightUpVector;\": \"↾\",\n\t\"shortparallel;\": \"∥\",\n\t\"smallsetminus;\": \"∖\",\n\t\"SucceedsEqual;\": \"⪰\",\n\t\"SucceedsTilde;\": \"≿\",\n\t\"SupersetEqual;\": \"⊇\",\n\t\"triangleright;\": \"▹\",\n\t\"UpEquilibrium;\": \"⥮\",\n\t\"upharpoonleft;\": \"↿\",\n\t\"varsubsetneqq;\": \"⫋︀\",\n\t\"varsupsetneqq;\": \"⫌︀\",\n\t\"VerticalTilde;\": \"≀\",\n\t\"VeryThinSpace;\": \" \",\n\t\"curvearrowleft;\": \"↶\",\n\t\"DiacriticalDot;\": \"˙\",\n\t\"doublebarwedge;\": \"⌆\",\n\t\"DoubleRightTee;\": \"⊨\",\n\t\"downdownarrows;\": \"⇊\",\n\t\"DownLeftVector;\": \"↽\",\n\t\"GreaterGreater;\": \"⪢\",\n\t\"hookrightarrow;\": \"↪\",\n\t\"HorizontalLine;\": \"─\",\n\t\"InvisibleComma;\": \"⁣\",\n\t\"InvisibleTimes;\": \"⁢\",\n\t\"LeftDownVector;\": \"⇃\",\n\t\"leftleftarrows;\": \"⇇\",\n\t\"LeftRightArrow;\": \"↔\",\n\t\"Leftrightarrow;\": \"⇔\",\n\t\"leftrightarrow;\": \"↔\",\n\t\"leftthreetimes;\": \"⋋\",\n\t\"LessSlantEqual;\": \"⩽\",\n\t\"LongRightArrow;\": \"⟶\",\n\t\"Longrightarrow;\": \"⟹\",\n\t\"longrightarrow;\": \"⟶\",\n\t\"looparrowright;\": \"↬\",\n\t\"LowerLeftArrow;\": \"↙\",\n\t\"NestedLessLess;\": \"≪\",\n\t\"NotGreaterLess;\": \"≹\",\n\t\"NotLessGreater;\": \"≸\",\n\t\"NotSubsetEqual;\": \"⊈\",\n\t\"NotVerticalBar;\": \"∤\",\n\t\"nshortparallel;\": \"∦\",\n\t\"ntriangleright;\": \"⋫\",\n\t\"OpenCurlyQuote;\": \"‘\",\n\t\"ReverseElement;\": \"∋\",\n\t\"rightarrowtail;\": \"↣\",\n\t\"rightharpoonup;\": \"⇀\",\n\t\"RightTeeVector;\": \"⥛\",\n\t\"RightVectorBar;\": \"⥓\",\n\t\"ShortDownArrow;\": \"↓\",\n\t\"ShortLeftArrow;\": \"←\",\n\t\"SquareSuperset;\": \"⊐\",\n\t\"TildeFullEqual;\": \"≅\",\n\t\"trianglelefteq;\": \"⊴\",\n\t\"upharpoonright;\": \"↾\",\n\t\"UpperLeftArrow;\": \"↖\",\n\t\"ZeroWidthSpace;\": \"​\",\n\t\"bigtriangledown;\": \"▽\",\n\t\"circlearrowleft;\": \"↺\",\n\t\"CloseCurlyQuote;\": \"’\",\n\t\"ContourIntegral;\": \"∮\",\n\t\"curvearrowright;\": \"↷\",\n\t\"DoubleDownArrow;\": \"⇓\",\n\t\"DoubleLeftArrow;\": \"⇐\",\n\t\"downharpoonleft;\": \"⇃\",\n\t\"DownRightVector;\": \"⇁\",\n\t\"leftharpoondown;\": \"↽\",\n\t\"leftrightarrows;\": \"⇆\",\n\t\"LeftRightVector;\": \"⥎\",\n\t\"LeftTriangleBar;\": \"⧏\",\n\t\"LeftUpTeeVector;\": \"⥠\",\n\t\"LeftUpVectorBar;\": \"⥘\",\n\t\"LowerRightArrow;\": \"↘\",\n\t\"nLeftrightarrow;\": \"⇎\",\n\t\"nleftrightarrow;\": \"↮\",\n\t\"NotGreaterEqual;\": \"≱\",\n\t\"NotGreaterTilde;\": \"≵\",\n\t\"NotHumpDownHump;\": \"≎̸\",\n\t\"NotLeftTriangle;\": \"⋪\",\n\t\"NotSquareSubset;\": \"⊏̸\",\n\t\"ntrianglelefteq;\": \"⋬\",\n\t\"OverParenthesis;\": \"⏜\",\n\t\"RightDownVector;\": \"⇂\",\n\t\"rightleftarrows;\": \"⇄\",\n\t\"rightsquigarrow;\": \"↝\",\n\t\"rightthreetimes;\": \"⋌\",\n\t\"ShortRightArrow;\": \"→\",\n\t\"straightepsilon;\": \"ϵ\",\n\t\"trianglerighteq;\": \"⊵\",\n\t\"UpperRightArrow;\": \"↗\",\n\t\"vartriangleleft;\": \"⊲\",\n\t\"circlearrowright;\": \"↻\",\n\t\"DiacriticalAcute;\": \"´\",\n\t\"DiacriticalGrave;\": \"`\",\n\t\"DiacriticalTilde;\": \"˜\",\n\t\"DoubleRightArrow;\": \"⇒\",\n\t\"DownArrowUpArrow;\": \"⇵\",\n\t\"downharpoonright;\": \"⇂\",\n\t\"EmptySmallSquare;\": \"◻\",\n\t\"GreaterEqualLess;\": \"⋛\",\n\t\"GreaterFullEqual;\": \"≧\",\n\t\"LeftAngleBracket;\": \"⟨\",\n\t\"LeftUpDownVector;\": \"⥑\",\n\t\"LessEqualGreater;\": \"⋚\",\n\t\"NonBreakingSpace;\": \" \",\n\t\"NotPrecedesEqual;\": \"⪯̸\",\n\t\"NotRightTriangle;\": \"⋫\",\n\t\"NotSucceedsEqual;\": \"⪰̸\",\n\t\"NotSucceedsTilde;\": \"≿̸\",\n\t\"NotSupersetEqual;\": \"⊉\",\n\t\"ntrianglerighteq;\": \"⋭\",\n\t\"rightharpoondown;\": \"⇁\",\n\t\"rightrightarrows;\": \"⇉\",\n\t\"RightTriangleBar;\": \"⧐\",\n\t\"RightUpTeeVector;\": \"⥜\",\n\t\"RightUpVectorBar;\": \"⥔\",\n\t\"twoheadleftarrow;\": \"↞\",\n\t\"UnderParenthesis;\": \"⏝\",\n\t\"UpArrowDownArrow;\": \"⇅\",\n\t\"vartriangleright;\": \"⊳\",\n\t\"blacktriangledown;\": \"▾\",\n\t\"blacktriangleleft;\": \"◂\",\n\t\"DoubleUpDownArrow;\": \"⇕\",\n\t\"DoubleVerticalBar;\": \"∥\",\n\t\"DownLeftTeeVector;\": \"⥞\",\n\t\"DownLeftVectorBar;\": \"⥖\",\n\t\"FilledSmallSquare;\": \"◼\",\n\t\"GreaterSlantEqual;\": \"⩾\",\n\t\"LeftDoubleBracket;\": \"⟦\",\n\t\"LeftDownTeeVector;\": \"⥡\",\n\t\"LeftDownVectorBar;\": \"⥙\",\n\t\"leftrightharpoons;\": \"⇋\",\n\t\"LeftTriangleEqual;\": \"⊴\",\n\t\"NegativeThinSpace;\": \"​\",\n\t\"NotGreaterGreater;\": \"≫̸\",\n\t\"NotLessSlantEqual;\": \"⩽̸\",\n\t\"NotNestedLessLess;\": \"⪡̸\",\n\t\"NotReverseElement;\": \"∌\",\n\t\"NotSquareSuperset;\": \"⊐̸\",\n\t\"NotTildeFullEqual;\": \"≇\",\n\t\"RightAngleBracket;\": \"⟩\",\n\t\"rightleftharpoons;\": \"⇌\",\n\t\"RightUpDownVector;\": \"⥏\",\n\t\"SquareSubsetEqual;\": \"⊑\",\n\t\"twoheadrightarrow;\": \"↠\",\n\t\"VerticalSeparator;\": \"❘\",\n\t\"blacktriangleright;\": \"▸\",\n\t\"DownRightTeeVector;\": \"⥟\",\n\t\"DownRightVectorBar;\": \"⥗\",\n\t\"LongLeftRightArrow;\": \"⟷\",\n\t\"Longleftrightarrow;\": \"⟺\",\n\t\"longleftrightarrow;\": \"⟷\",\n\t\"NegativeThickSpace;\": \"​\",\n\t\"NotLeftTriangleBar;\": \"⧏̸\",\n\t\"PrecedesSlantEqual;\": \"≼\",\n\t\"ReverseEquilibrium;\": \"⇋\",\n\t\"RightDoubleBracket;\": \"⟧\",\n\t\"RightDownTeeVector;\": \"⥝\",\n\t\"RightDownVectorBar;\": \"⥕\",\n\t\"RightTriangleEqual;\": \"⊵\",\n\t\"SquareIntersection;\": \"⊓\",\n\t\"SucceedsSlantEqual;\": \"≽\",\n\t\"DoubleLongLeftArrow;\": \"⟸\",\n\t\"DownLeftRightVector;\": \"⥐\",\n\t\"LeftArrowRightArrow;\": \"⇆\",\n\t\"leftrightsquigarrow;\": \"↭\",\n\t\"NegativeMediumSpace;\": \"​\",\n\t\"NotGreaterFullEqual;\": \"≧̸\",\n\t\"NotRightTriangleBar;\": \"⧐̸\",\n\t\"RightArrowLeftArrow;\": \"⇄\",\n\t\"SquareSupersetEqual;\": \"⊒\",\n\t\"CapitalDifferentialD;\": \"ⅅ\",\n\t\"DoubleLeftRightArrow;\": \"⇔\",\n\t\"DoubleLongRightArrow;\": \"⟹\",\n\t\"EmptyVerySmallSquare;\": \"▫\",\n\t\"NestedGreaterGreater;\": \"≫\",\n\t\"NotDoubleVerticalBar;\": \"∦\",\n\t\"NotGreaterSlantEqual;\": \"⩾̸\",\n\t\"NotLeftTriangleEqual;\": \"⋬\",\n\t\"NotSquareSubsetEqual;\": \"⋢\",\n\t\"OpenCurlyDoubleQuote;\": \"“\",\n\t\"ReverseUpEquilibrium;\": \"⥯\",\n\t\"CloseCurlyDoubleQuote;\": \"”\",\n\t\"DoubleContourIntegral;\": \"∯\",\n\t\"FilledVerySmallSquare;\": \"▪\",\n\t\"NegativeVeryThinSpace;\": \"​\",\n\t\"NotPrecedesSlantEqual;\": \"⋠\",\n\t\"NotRightTriangleEqual;\": \"⋭\",\n\t\"NotSucceedsSlantEqual;\": \"⋡\",\n\t\"DiacriticalDoubleAcute;\": \"˝\",\n\t\"NotSquareSupersetEqual;\": \"⋣\",\n\t\"NotNestedGreaterGreater;\": \"⪢̸\",\n\t\"ClockwiseContourIntegral;\": \"∲\",\n\t\"DoubleLongLeftRightArrow;\": \"⟺\",\n\t\"CounterClockwiseContourIntegral;\": \"∳\"\n};\n\n// lazy compute this to make this file tree-shakable for browser\nlet maxCRNameLength;\nconst decodeHtml = (rawText, asAttr) => {\n    let offset = 0;\n    const end = rawText.length;\n    let decodedText = '';\n    function advance(length) {\n        offset += length;\n        rawText = rawText.slice(length);\n    }\n    while (offset < end) {\n        const head = /&(?:#x?)?/i.exec(rawText);\n        if (!head || offset + head.index >= end) {\n            const remaining = end - offset;\n            decodedText += rawText.slice(0, remaining);\n            advance(remaining);\n            break;\n        }\n        // Advance to the \"&\".\n        decodedText += rawText.slice(0, head.index);\n        advance(head.index);\n        if (head[0] === '&') {\n            // Named character reference.\n            let name = '';\n            let value = undefined;\n            if (/[0-9a-z]/i.test(rawText[1])) {\n                if (!maxCRNameLength) {\n                    maxCRNameLength = Object.keys(namedCharacterReferences).reduce((max, name) => Math.max(max, name.length), 0);\n                }\n                for (let length = maxCRNameLength; !value && length > 0; --length) {\n                    name = rawText.slice(1, 1 + length);\n                    value = namedCharacterReferences[name];\n                }\n                if (value) {\n                    const semi = name.endsWith(';');\n                    if (asAttr &&\n                        !semi &&\n                        /[=a-z0-9]/i.test(rawText[name.length + 1] || '')) {\n                        decodedText += '&' + name;\n                        advance(1 + name.length);\n                    }\n                    else {\n                        decodedText += value;\n                        advance(1 + name.length);\n                    }\n                }\n                else {\n                    decodedText += '&' + name;\n                    advance(1 + name.length);\n                }\n            }\n            else {\n                decodedText += '&';\n                advance(1);\n            }\n        }\n        else {\n            // Numeric character reference.\n            const hex = head[0] === '&#x';\n            const pattern = hex ? /^&#x([0-9a-f]+);?/i : /^&#([0-9]+);?/;\n            const body = pattern.exec(rawText);\n            if (!body) {\n                decodedText += head[0];\n                advance(head[0].length);\n            }\n            else {\n                // https://html.spec.whatwg.org/multipage/parsing.html#numeric-character-reference-end-state\n                let cp = Number.parseInt(body[1], hex ? 16 : 10);\n                if (cp === 0) {\n                    cp = 0xfffd;\n                }\n                else if (cp > 0x10ffff) {\n                    cp = 0xfffd;\n                }\n                else if (cp >= 0xd800 && cp <= 0xdfff) {\n                    cp = 0xfffd;\n                }\n                else if ((cp >= 0xfdd0 && cp <= 0xfdef) || (cp & 0xfffe) === 0xfffe) ;\n                else if ((cp >= 0x01 && cp <= 0x08) ||\n                    cp === 0x0b ||\n                    (cp >= 0x0d && cp <= 0x1f) ||\n                    (cp >= 0x7f && cp <= 0x9f)) {\n                    cp = CCR_REPLACEMENTS[cp] || cp;\n                }\n                decodedText += String.fromCodePoint(cp);\n                advance(body[0].length);\n            }\n        }\n    }\n    return decodedText;\n};\n// https://html.spec.whatwg.org/multipage/parsing.html#numeric-character-reference-end-state\nconst CCR_REPLACEMENTS = {\n    0x80: 0x20ac,\n    0x82: 0x201a,\n    0x83: 0x0192,\n    0x84: 0x201e,\n    0x85: 0x2026,\n    0x86: 0x2020,\n    0x87: 0x2021,\n    0x88: 0x02c6,\n    0x89: 0x2030,\n    0x8a: 0x0160,\n    0x8b: 0x2039,\n    0x8c: 0x0152,\n    0x8e: 0x017d,\n    0x91: 0x2018,\n    0x92: 0x2019,\n    0x93: 0x201c,\n    0x94: 0x201d,\n    0x95: 0x2022,\n    0x96: 0x2013,\n    0x97: 0x2014,\n    0x98: 0x02dc,\n    0x99: 0x2122,\n    0x9a: 0x0161,\n    0x9b: 0x203a,\n    0x9c: 0x0153,\n    0x9e: 0x017e,\n    0x9f: 0x0178\n};\n\nconst isRawTextContainer = /*#__PURE__*/ makeMap('style,iframe,script,noscript', true);\nconst parserOptions = {\n    isVoidTag,\n    isNativeTag: tag => isHTMLTag(tag) || isSVGTag(tag),\n    isPreTag: tag => tag === 'pre',\n    decodeEntities: decodeHtml,\n    isBuiltInComponent: (tag) => {\n        if (isBuiltInType(tag, `Transition`)) {\n            return TRANSITION;\n        }\n        else if (isBuiltInType(tag, `TransitionGroup`)) {\n            return TRANSITION_GROUP;\n        }\n    },\n    // https://html.spec.whatwg.org/multipage/parsing.html#tree-construction-dispatcher\n    getNamespace(tag, parent) {\n        let ns = parent ? parent.ns : 0 /* DOMNamespaces.HTML */;\n        if (parent && ns === 2 /* DOMNamespaces.MATH_ML */) {\n            if (parent.tag === 'annotation-xml') {\n                if (tag === 'svg') {\n                    return 1 /* DOMNamespaces.SVG */;\n                }\n                if (parent.props.some(a => a.type === 6 /* NodeTypes.ATTRIBUTE */ &&\n                    a.name === 'encoding' &&\n                    a.value != null &&\n                    (a.value.content === 'text/html' ||\n                        a.value.content === 'application/xhtml+xml'))) {\n                    ns = 0 /* DOMNamespaces.HTML */;\n                }\n            }\n            else if (/^m(?:[ions]|text)$/.test(parent.tag) &&\n                tag !== 'mglyph' &&\n                tag !== 'malignmark') {\n                ns = 0 /* DOMNamespaces.HTML */;\n            }\n        }\n        else if (parent && ns === 1 /* DOMNamespaces.SVG */) {\n            if (parent.tag === 'foreignObject' ||\n                parent.tag === 'desc' ||\n                parent.tag === 'title') {\n                ns = 0 /* DOMNamespaces.HTML */;\n            }\n        }\n        if (ns === 0 /* DOMNamespaces.HTML */) {\n            if (tag === 'svg') {\n                return 1 /* DOMNamespaces.SVG */;\n            }\n            if (tag === 'math') {\n                return 2 /* DOMNamespaces.MATH_ML */;\n            }\n        }\n        return ns;\n    },\n    // https://html.spec.whatwg.org/multipage/parsing.html#parsing-html-fragments\n    getTextMode({ tag, ns }) {\n        if (ns === 0 /* DOMNamespaces.HTML */) {\n            if (tag === 'textarea' || tag === 'title') {\n                return 1 /* TextModes.RCDATA */;\n            }\n            if (isRawTextContainer(tag)) {\n                return 2 /* TextModes.RAWTEXT */;\n            }\n        }\n        return 0 /* TextModes.DATA */;\n    }\n};\n\n// Parse inline CSS strings for static style attributes into an object.\n// This is a NodeTransform since it works on the static `style` attribute and\n// converts it into a dynamic equivalent:\n// style=\"color: red\" -> :style='{ \"color\": \"red\" }'\n// It is then processed by `transformElement` and included in the generated\n// props.\nconst transformStyle = node => {\n    if (node.type === 1 /* NodeTypes.ELEMENT */) {\n        node.props.forEach((p, i) => {\n            if (p.type === 6 /* NodeTypes.ATTRIBUTE */ && p.name === 'style' && p.value) {\n                // replace p with an expression node\n                node.props[i] = {\n                    type: 7 /* NodeTypes.DIRECTIVE */,\n                    name: `bind`,\n                    arg: createSimpleExpression(`style`, true, p.loc),\n                    exp: parseInlineCSS(p.value.content, p.loc),\n                    modifiers: [],\n                    loc: p.loc\n                };\n            }\n        });\n    }\n};\nconst parseInlineCSS = (cssText, loc) => {\n    const normalized = parseStringStyle(cssText);\n    return createSimpleExpression(JSON.stringify(normalized), false, loc, 3 /* ConstantTypes.CAN_STRINGIFY */);\n};\n\nfunction createDOMCompilerError(code, loc) {\n    return createCompilerError(code, loc, DOMErrorMessages );\n}\nconst DOMErrorMessages = {\n    [51 /* DOMErrorCodes.X_V_HTML_NO_EXPRESSION */]: `v-html is missing expression.`,\n    [52 /* DOMErrorCodes.X_V_HTML_WITH_CHILDREN */]: `v-html will override element children.`,\n    [53 /* DOMErrorCodes.X_V_TEXT_NO_EXPRESSION */]: `v-text is missing expression.`,\n    [54 /* DOMErrorCodes.X_V_TEXT_WITH_CHILDREN */]: `v-text will override element children.`,\n    [55 /* DOMErrorCodes.X_V_MODEL_ON_INVALID_ELEMENT */]: `v-model can only be used on <input>, <textarea> and <select> elements.`,\n    [56 /* DOMErrorCodes.X_V_MODEL_ARG_ON_ELEMENT */]: `v-model argument is not supported on plain elements.`,\n    [57 /* DOMErrorCodes.X_V_MODEL_ON_FILE_INPUT_ELEMENT */]: `v-model cannot be used on file inputs since they are read-only. Use a v-on:change listener instead.`,\n    [58 /* DOMErrorCodes.X_V_MODEL_UNNECESSARY_VALUE */]: `Unnecessary value binding used alongside v-model. It will interfere with v-model's behavior.`,\n    [59 /* DOMErrorCodes.X_V_SHOW_NO_EXPRESSION */]: `v-show is missing expression.`,\n    [60 /* DOMErrorCodes.X_TRANSITION_INVALID_CHILDREN */]: `<Transition> expects exactly one child element or component.`,\n    [61 /* DOMErrorCodes.X_IGNORED_SIDE_EFFECT_TAG */]: `Tags with side effect (<script> and <style>) are ignored in client component templates.`\n};\n\nconst transformVHtml = (dir, node, context) => {\n    const { exp, loc } = dir;\n    if (!exp) {\n        context.onError(createDOMCompilerError(51 /* DOMErrorCodes.X_V_HTML_NO_EXPRESSION */, loc));\n    }\n    if (node.children.length) {\n        context.onError(createDOMCompilerError(52 /* DOMErrorCodes.X_V_HTML_WITH_CHILDREN */, loc));\n        node.children.length = 0;\n    }\n    return {\n        props: [\n            createObjectProperty(createSimpleExpression(`innerHTML`, true, loc), exp || createSimpleExpression('', true))\n        ]\n    };\n};\n\nconst transformVText = (dir, node, context) => {\n    const { exp, loc } = dir;\n    if (!exp) {\n        context.onError(createDOMCompilerError(53 /* DOMErrorCodes.X_V_TEXT_NO_EXPRESSION */, loc));\n    }\n    if (node.children.length) {\n        context.onError(createDOMCompilerError(54 /* DOMErrorCodes.X_V_TEXT_WITH_CHILDREN */, loc));\n        node.children.length = 0;\n    }\n    return {\n        props: [\n            createObjectProperty(createSimpleExpression(`textContent`, true), exp\n                ? getConstantType(exp, context) > 0\n                    ? exp\n                    : createCallExpression(context.helperString(TO_DISPLAY_STRING), [exp], loc)\n                : createSimpleExpression('', true))\n        ]\n    };\n};\n\nconst transformModel = (dir, node, context) => {\n    const baseResult = transformModel$1(dir, node, context);\n    // base transform has errors OR component v-model (only need props)\n    if (!baseResult.props.length || node.tagType === 1 /* ElementTypes.COMPONENT */) {\n        return baseResult;\n    }\n    if (dir.arg) {\n        context.onError(createDOMCompilerError(56 /* DOMErrorCodes.X_V_MODEL_ARG_ON_ELEMENT */, dir.arg.loc));\n    }\n    function checkDuplicatedValue() {\n        const value = findProp(node, 'value');\n        if (value) {\n            context.onError(createDOMCompilerError(58 /* DOMErrorCodes.X_V_MODEL_UNNECESSARY_VALUE */, value.loc));\n        }\n    }\n    const { tag } = node;\n    const isCustomElement = context.isCustomElement(tag);\n    if (tag === 'input' ||\n        tag === 'textarea' ||\n        tag === 'select' ||\n        isCustomElement) {\n        let directiveToUse = V_MODEL_TEXT;\n        let isInvalidType = false;\n        if (tag === 'input' || isCustomElement) {\n            const type = findProp(node, `type`);\n            if (type) {\n                if (type.type === 7 /* NodeTypes.DIRECTIVE */) {\n                    // :type=\"foo\"\n                    directiveToUse = V_MODEL_DYNAMIC;\n                }\n                else if (type.value) {\n                    switch (type.value.content) {\n                        case 'radio':\n                            directiveToUse = V_MODEL_RADIO;\n                            break;\n                        case 'checkbox':\n                            directiveToUse = V_MODEL_CHECKBOX;\n                            break;\n                        case 'file':\n                            isInvalidType = true;\n                            context.onError(createDOMCompilerError(57 /* DOMErrorCodes.X_V_MODEL_ON_FILE_INPUT_ELEMENT */, dir.loc));\n                            break;\n                        default:\n                            // text type\n                            checkDuplicatedValue();\n                            break;\n                    }\n                }\n            }\n            else if (hasDynamicKeyVBind(node)) {\n                // element has bindings with dynamic keys, which can possibly contain\n                // \"type\".\n                directiveToUse = V_MODEL_DYNAMIC;\n            }\n            else {\n                // text type\n                checkDuplicatedValue();\n            }\n        }\n        else if (tag === 'select') {\n            directiveToUse = V_MODEL_SELECT;\n        }\n        else {\n            // textarea\n            checkDuplicatedValue();\n        }\n        // inject runtime directive\n        // by returning the helper symbol via needRuntime\n        // the import will replaced a resolveDirective call.\n        if (!isInvalidType) {\n            baseResult.needRuntime = context.helper(directiveToUse);\n        }\n    }\n    else {\n        context.onError(createDOMCompilerError(55 /* DOMErrorCodes.X_V_MODEL_ON_INVALID_ELEMENT */, dir.loc));\n    }\n    // native vmodel doesn't need the `modelValue` props since they are also\n    // passed to the runtime as `binding.value`. removing it reduces code size.\n    baseResult.props = baseResult.props.filter(p => !(p.key.type === 4 /* NodeTypes.SIMPLE_EXPRESSION */ &&\n        p.key.content === 'modelValue'));\n    return baseResult;\n};\n\nconst isEventOptionModifier = /*#__PURE__*/ makeMap(`passive,once,capture`);\nconst isNonKeyModifier = /*#__PURE__*/ makeMap(\n// event propagation management\n`stop,prevent,self,` +\n    // system modifiers + exact\n    `ctrl,shift,alt,meta,exact,` +\n    // mouse\n    `middle`);\n// left & right could be mouse or key modifiers based on event type\nconst maybeKeyModifier = /*#__PURE__*/ makeMap('left,right');\nconst isKeyboardEvent = /*#__PURE__*/ makeMap(`onkeyup,onkeydown,onkeypress`, true);\nconst resolveModifiers = (key, modifiers, context, loc) => {\n    const keyModifiers = [];\n    const nonKeyModifiers = [];\n    const eventOptionModifiers = [];\n    for (let i = 0; i < modifiers.length; i++) {\n        const modifier = modifiers[i];\n        if (isEventOptionModifier(modifier)) {\n            // eventOptionModifiers: modifiers for addEventListener() options,\n            // e.g. .passive & .capture\n            eventOptionModifiers.push(modifier);\n        }\n        else {\n            // runtimeModifiers: modifiers that needs runtime guards\n            if (maybeKeyModifier(modifier)) {\n                if (isStaticExp(key)) {\n                    if (isKeyboardEvent(key.content)) {\n                        keyModifiers.push(modifier);\n                    }\n                    else {\n                        nonKeyModifiers.push(modifier);\n                    }\n                }\n                else {\n                    keyModifiers.push(modifier);\n                    nonKeyModifiers.push(modifier);\n                }\n            }\n            else {\n                if (isNonKeyModifier(modifier)) {\n                    nonKeyModifiers.push(modifier);\n                }\n                else {\n                    keyModifiers.push(modifier);\n                }\n            }\n        }\n    }\n    return {\n        keyModifiers,\n        nonKeyModifiers,\n        eventOptionModifiers\n    };\n};\nconst transformClick = (key, event) => {\n    const isStaticClick = isStaticExp(key) && key.content.toLowerCase() === 'onclick';\n    return isStaticClick\n        ? createSimpleExpression(event, true)\n        : key.type !== 4 /* NodeTypes.SIMPLE_EXPRESSION */\n            ? createCompoundExpression([\n                `(`,\n                key,\n                `) === \"onClick\" ? \"${event}\" : (`,\n                key,\n                `)`\n            ])\n            : key;\n};\nconst transformOn = (dir, node, context) => {\n    return transformOn$1(dir, node, context, baseResult => {\n        const { modifiers } = dir;\n        if (!modifiers.length)\n            return baseResult;\n        let { key, value: handlerExp } = baseResult.props[0];\n        const { keyModifiers, nonKeyModifiers, eventOptionModifiers } = resolveModifiers(key, modifiers, context, dir.loc);\n        // normalize click.right and click.middle since they don't actually fire\n        if (nonKeyModifiers.includes('right')) {\n            key = transformClick(key, `onContextmenu`);\n        }\n        if (nonKeyModifiers.includes('middle')) {\n            key = transformClick(key, `onMouseup`);\n        }\n        if (nonKeyModifiers.length) {\n            handlerExp = createCallExpression(context.helper(V_ON_WITH_MODIFIERS), [\n                handlerExp,\n                JSON.stringify(nonKeyModifiers)\n            ]);\n        }\n        if (keyModifiers.length &&\n            // if event name is dynamic, always wrap with keys guard\n            (!isStaticExp(key) || isKeyboardEvent(key.content))) {\n            handlerExp = createCallExpression(context.helper(V_ON_WITH_KEYS), [\n                handlerExp,\n                JSON.stringify(keyModifiers)\n            ]);\n        }\n        if (eventOptionModifiers.length) {\n            const modifierPostfix = eventOptionModifiers.map(capitalize$1).join('');\n            key = isStaticExp(key)\n                ? createSimpleExpression(`${key.content}${modifierPostfix}`, true)\n                : createCompoundExpression([`(`, key, `) + \"${modifierPostfix}\"`]);\n        }\n        return {\n            props: [createObjectProperty(key, handlerExp)]\n        };\n    });\n};\n\nconst transformShow = (dir, node, context) => {\n    const { exp, loc } = dir;\n    if (!exp) {\n        context.onError(createDOMCompilerError(59 /* DOMErrorCodes.X_V_SHOW_NO_EXPRESSION */, loc));\n    }\n    return {\n        props: [],\n        needRuntime: context.helper(V_SHOW)\n    };\n};\n\nconst transformTransition = (node, context) => {\n    if (node.type === 1 /* NodeTypes.ELEMENT */ &&\n        node.tagType === 1 /* ElementTypes.COMPONENT */) {\n        const component = context.isBuiltInComponent(node.tag);\n        if (component === TRANSITION) {\n            return () => {\n                if (!node.children.length) {\n                    return;\n                }\n                // warn multiple transition children\n                if (hasMultipleChildren(node)) {\n                    context.onError(createDOMCompilerError(60 /* DOMErrorCodes.X_TRANSITION_INVALID_CHILDREN */, {\n                        start: node.children[0].loc.start,\n                        end: node.children[node.children.length - 1].loc.end,\n                        source: ''\n                    }));\n                }\n                // check if it's s single child w/ v-show\n                // if yes, inject \"persisted: true\" to the transition props\n                const child = node.children[0];\n                if (child.type === 1 /* NodeTypes.ELEMENT */) {\n                    for (const p of child.props) {\n                        if (p.type === 7 /* NodeTypes.DIRECTIVE */ && p.name === 'show') {\n                            node.props.push({\n                                type: 6 /* NodeTypes.ATTRIBUTE */,\n                                name: 'persisted',\n                                value: undefined,\n                                loc: node.loc\n                            });\n                        }\n                    }\n                }\n            };\n        }\n    }\n};\nfunction hasMultipleChildren(node) {\n    // #1352 filter out potential comment nodes.\n    const children = (node.children = node.children.filter(c => c.type !== 3 /* NodeTypes.COMMENT */ &&\n        !(c.type === 2 /* NodeTypes.TEXT */ && !c.content.trim())));\n    const child = children[0];\n    return (children.length !== 1 ||\n        child.type === 11 /* NodeTypes.FOR */ ||\n        (child.type === 9 /* NodeTypes.IF */ && child.branches.some(hasMultipleChildren)));\n}\n\n/**\n * This module is Node-only.\n */\n/**\n * Regex for replacing placeholders for embedded constant variables\n * (e.g. import URL string constants generated by compiler-sfc)\n */\nconst expReplaceRE = /__VUE_EXP_START__(.*?)__VUE_EXP_END__/g;\n/**\n * Turn eligible hoisted static trees into stringified static nodes, e.g.\n *\n * ```js\n * const _hoisted_1 = createStaticVNode(`<div class=\"foo\">bar</div>`)\n * ```\n *\n * A single static vnode can contain stringified content for **multiple**\n * consecutive nodes (element and plain text), called a \"chunk\".\n * `@vue/runtime-dom` will create the content via innerHTML in a hidden\n * container element and insert all the nodes in place. The call must also\n * provide the number of nodes contained in the chunk so that during hydration\n * we can know how many nodes the static vnode should adopt.\n *\n * The optimization scans a children list that contains hoisted nodes, and\n * tries to find the largest chunk of consecutive hoisted nodes before running\n * into a non-hoisted node or the end of the list. A chunk is then converted\n * into a single static vnode and replaces the hoisted expression of the first\n * node in the chunk. Other nodes in the chunk are considered \"merged\" and\n * therefore removed from both the hoist list and the children array.\n *\n * This optimization is only performed in Node.js.\n */\nconst stringifyStatic = (children, context, parent) => {\n    // bail stringification for slot content\n    if (context.scopes.vSlot > 0) {\n        return;\n    }\n    let nc = 0; // current node count\n    let ec = 0; // current element with binding count\n    const currentChunk = [];\n    const stringifyCurrentChunk = (currentIndex) => {\n        if (nc >= 20 /* StringifyThresholds.NODE_COUNT */ ||\n            ec >= 5 /* StringifyThresholds.ELEMENT_WITH_BINDING_COUNT */) {\n            // combine all currently eligible nodes into a single static vnode call\n            const staticCall = createCallExpression(context.helper(CREATE_STATIC), [\n                JSON.stringify(currentChunk.map(node => stringifyNode(node, context)).join('')).replace(expReplaceRE, `\" + $1 + \"`),\n                // the 2nd argument indicates the number of DOM nodes this static vnode\n                // will insert / hydrate\n                String(currentChunk.length)\n            ]);\n            // replace the first node's hoisted expression with the static vnode call\n            replaceHoist(currentChunk[0], staticCall, context);\n            if (currentChunk.length > 1) {\n                for (let i = 1; i < currentChunk.length; i++) {\n                    // for the merged nodes, set their hoisted expression to null\n                    replaceHoist(currentChunk[i], null, context);\n                }\n                // also remove merged nodes from children\n                const deleteCount = currentChunk.length - 1;\n                children.splice(currentIndex - currentChunk.length + 1, deleteCount);\n                return deleteCount;\n            }\n        }\n        return 0;\n    };\n    let i = 0;\n    for (; i < children.length; i++) {\n        const child = children[i];\n        const hoisted = getHoistedNode(child);\n        if (hoisted) {\n            // presence of hoisted means child must be a stringifiable node\n            const node = child;\n            const result = analyzeNode(node);\n            if (result) {\n                // node is stringifiable, record state\n                nc += result[0];\n                ec += result[1];\n                currentChunk.push(node);\n                continue;\n            }\n        }\n        // we only reach here if we ran into a node that is not stringifiable\n        // check if currently analyzed nodes meet criteria for stringification.\n        // adjust iteration index\n        i -= stringifyCurrentChunk(i);\n        // reset state\n        nc = 0;\n        ec = 0;\n        currentChunk.length = 0;\n    }\n    // in case the last node was also stringifiable\n    stringifyCurrentChunk(i);\n};\nconst getHoistedNode = (node) => ((node.type === 1 /* NodeTypes.ELEMENT */ && node.tagType === 0 /* ElementTypes.ELEMENT */) ||\n    node.type == 12 /* NodeTypes.TEXT_CALL */) &&\n    node.codegenNode &&\n    node.codegenNode.type === 4 /* NodeTypes.SIMPLE_EXPRESSION */ &&\n    node.codegenNode.hoisted;\nconst dataAriaRE = /^(data|aria)-/;\nconst isStringifiableAttr = (name, ns) => {\n    return ((ns === 0 /* DOMNamespaces.HTML */\n        ? isKnownHtmlAttr(name)\n        : ns === 1 /* DOMNamespaces.SVG */\n            ? isKnownSvgAttr(name)\n            : false) || dataAriaRE.test(name));\n};\nconst replaceHoist = (node, replacement, context) => {\n    const hoistToReplace = node.codegenNode.hoisted;\n    context.hoists[context.hoists.indexOf(hoistToReplace)] = replacement;\n};\nconst isNonStringifiable = /*#__PURE__*/ makeMap(`caption,thead,tr,th,tbody,td,tfoot,colgroup,col`);\n/**\n * for a hoisted node, analyze it and return:\n * - false: bailed (contains non-stringifiable props or runtime constant)\n * - [nc, ec] where\n *   - nc is the number of nodes inside\n *   - ec is the number of element with bindings inside\n */\nfunction analyzeNode(node) {\n    if (node.type === 1 /* NodeTypes.ELEMENT */ && isNonStringifiable(node.tag)) {\n        return false;\n    }\n    if (node.type === 12 /* NodeTypes.TEXT_CALL */) {\n        return [1, 0];\n    }\n    let nc = 1; // node count\n    let ec = node.props.length > 0 ? 1 : 0; // element w/ binding count\n    let bailed = false;\n    const bail = () => {\n        bailed = true;\n        return false;\n    };\n    // TODO: check for cases where using innerHTML will result in different\n    // output compared to imperative node insertions.\n    // probably only need to check for most common case\n    // i.e. non-phrasing-content tags inside `<p>`\n    function walk(node) {\n        for (let i = 0; i < node.props.length; i++) {\n            const p = node.props[i];\n            // bail on non-attr bindings\n            if (p.type === 6 /* NodeTypes.ATTRIBUTE */ &&\n                !isStringifiableAttr(p.name, node.ns)) {\n                return bail();\n            }\n            if (p.type === 7 /* NodeTypes.DIRECTIVE */ && p.name === 'bind') {\n                // bail on non-attr bindings\n                if (p.arg &&\n                    (p.arg.type === 8 /* NodeTypes.COMPOUND_EXPRESSION */ ||\n                        (p.arg.isStatic && !isStringifiableAttr(p.arg.content, node.ns)))) {\n                    return bail();\n                }\n                if (p.exp &&\n                    (p.exp.type === 8 /* NodeTypes.COMPOUND_EXPRESSION */ ||\n                        p.exp.constType < 3 /* ConstantTypes.CAN_STRINGIFY */)) {\n                    return bail();\n                }\n            }\n        }\n        for (let i = 0; i < node.children.length; i++) {\n            nc++;\n            const child = node.children[i];\n            if (child.type === 1 /* NodeTypes.ELEMENT */) {\n                if (child.props.length > 0) {\n                    ec++;\n                }\n                walk(child);\n                if (bailed) {\n                    return false;\n                }\n            }\n        }\n        return true;\n    }\n    return walk(node) ? [nc, ec] : false;\n}\nfunction stringifyNode(node, context) {\n    if (isString$2(node)) {\n        return node;\n    }\n    if (isSymbol$1(node)) {\n        return ``;\n    }\n    switch (node.type) {\n        case 1 /* NodeTypes.ELEMENT */:\n            return stringifyElement(node, context);\n        case 2 /* NodeTypes.TEXT */:\n            return escapeHtml(node.content);\n        case 3 /* NodeTypes.COMMENT */:\n            return `<!--${escapeHtml(node.content)}-->`;\n        case 5 /* NodeTypes.INTERPOLATION */:\n            return escapeHtml(toDisplayString(evaluateConstant(node.content)));\n        case 8 /* NodeTypes.COMPOUND_EXPRESSION */:\n            return escapeHtml(evaluateConstant(node));\n        case 12 /* NodeTypes.TEXT_CALL */:\n            return stringifyNode(node.content, context);\n        default:\n            // static trees will not contain if/for nodes\n            return '';\n    }\n}\nfunction stringifyElement(node, context) {\n    let res = `<${node.tag}`;\n    let innerHTML = '';\n    for (let i = 0; i < node.props.length; i++) {\n        const p = node.props[i];\n        if (p.type === 6 /* NodeTypes.ATTRIBUTE */) {\n            res += ` ${p.name}`;\n            if (p.value) {\n                res += `=\"${escapeHtml(p.value.content)}\"`;\n            }\n        }\n        else if (p.type === 7 /* NodeTypes.DIRECTIVE */) {\n            if (p.name === 'bind') {\n                const exp = p.exp;\n                if (exp.content[0] === '_') {\n                    // internally generated string constant references\n                    // e.g. imported URL strings via compiler-sfc transformAssetUrl plugin\n                    res += ` ${p.arg.content}=\"__VUE_EXP_START__${exp.content}__VUE_EXP_END__\"`;\n                    continue;\n                }\n                // #6568\n                if (isBooleanAttr(p.arg.content) &&\n                    exp.content === 'false') {\n                    continue;\n                }\n                // constant v-bind, e.g. :foo=\"1\"\n                let evaluated = evaluateConstant(exp);\n                if (evaluated != null) {\n                    const arg = p.arg && p.arg.content;\n                    if (arg === 'class') {\n                        evaluated = normalizeClass(evaluated);\n                    }\n                    else if (arg === 'style') {\n                        evaluated = stringifyStyle(normalizeStyle(evaluated));\n                    }\n                    res += ` ${p.arg.content}=\"${escapeHtml(evaluated)}\"`;\n                }\n            }\n            else if (p.name === 'html') {\n                // #5439 v-html with constant value\n                // not sure why would anyone do this but it can happen\n                innerHTML = evaluateConstant(p.exp);\n            }\n            else if (p.name === 'text') {\n                innerHTML = escapeHtml(toDisplayString(evaluateConstant(p.exp)));\n            }\n        }\n    }\n    if (context.scopeId) {\n        res += ` ${context.scopeId}`;\n    }\n    res += `>`;\n    if (innerHTML) {\n        res += innerHTML;\n    }\n    else {\n        for (let i = 0; i < node.children.length; i++) {\n            res += stringifyNode(node.children[i], context);\n        }\n    }\n    if (!isVoidTag(node.tag)) {\n        res += `</${node.tag}>`;\n    }\n    return res;\n}\n// __UNSAFE__\n// Reason: eval.\n// It's technically safe to eval because only constant expressions are possible\n// here, e.g. `{{ 1 }}` or `{{ 'foo' }}`\n// in addition, constant exps bail on presence of parens so you can't even\n// run JSFuck in here. But we mark it unsafe for security review purposes.\n// (see compiler-core/src/transforms/transformExpression)\nfunction evaluateConstant(exp) {\n    if (exp.type === 4 /* NodeTypes.SIMPLE_EXPRESSION */) {\n        return new Function(`return ${exp.content}`)();\n    }\n    else {\n        // compound\n        let res = ``;\n        exp.children.forEach(c => {\n            if (isString$2(c) || isSymbol$1(c)) {\n                return;\n            }\n            if (c.type === 2 /* NodeTypes.TEXT */) {\n                res += c.content;\n            }\n            else if (c.type === 5 /* NodeTypes.INTERPOLATION */) {\n                res += toDisplayString(evaluateConstant(c.content));\n            }\n            else {\n                res += evaluateConstant(c);\n            }\n        });\n        return res;\n    }\n}\n\nconst ignoreSideEffectTags = (node, context) => {\n    if (node.type === 1 /* NodeTypes.ELEMENT */ &&\n        node.tagType === 0 /* ElementTypes.ELEMENT */ &&\n        (node.tag === 'script' || node.tag === 'style')) {\n        context.onError(createDOMCompilerError(61 /* DOMErrorCodes.X_IGNORED_SIDE_EFFECT_TAG */, node.loc));\n        context.removeNode();\n    }\n};\n\nconst DOMNodeTransforms = [\n    transformStyle,\n    ...([transformTransition] )\n];\nconst DOMDirectiveTransforms = {\n    cloak: noopDirectiveTransform,\n    html: transformVHtml,\n    text: transformVText,\n    model: transformModel,\n    on: transformOn,\n    show: transformShow\n};\nfunction compile$1(template, options = {}) {\n    return baseCompile(template, extend({}, parserOptions, options, {\n        nodeTransforms: [\n            // ignore <script> and <tag>\n            // this is not put inside DOMNodeTransforms because that list is used\n            // by compiler-ssr to generate vnode fallback branches\n            ignoreSideEffectTags,\n            ...DOMNodeTransforms,\n            ...(options.nodeTransforms || [])\n        ],\n        directiveTransforms: extend({}, DOMDirectiveTransforms, options.directiveTransforms || {}),\n        transformHoist: stringifyStatic\n    }));\n}\nfunction parse$8(template, options = {}) {\n    return baseParse(template, extend({}, parserOptions, options));\n}\n\nvar CompilerDOM = /*#__PURE__*/Object.freeze({\n  __proto__: null,\n  BASE_TRANSITION: BASE_TRANSITION,\n  CAMELIZE: CAMELIZE,\n  CAPITALIZE: CAPITALIZE,\n  CREATE_BLOCK: CREATE_BLOCK,\n  CREATE_COMMENT: CREATE_COMMENT,\n  CREATE_ELEMENT_BLOCK: CREATE_ELEMENT_BLOCK,\n  CREATE_ELEMENT_VNODE: CREATE_ELEMENT_VNODE,\n  CREATE_SLOTS: CREATE_SLOTS,\n  CREATE_STATIC: CREATE_STATIC,\n  CREATE_TEXT: CREATE_TEXT,\n  CREATE_VNODE: CREATE_VNODE,\n  DOMDirectiveTransforms: DOMDirectiveTransforms,\n  DOMNodeTransforms: DOMNodeTransforms,\n  FRAGMENT: FRAGMENT,\n  GUARD_REACTIVE_PROPS: GUARD_REACTIVE_PROPS,\n  IS_MEMO_SAME: IS_MEMO_SAME,\n  IS_REF: IS_REF,\n  KEEP_ALIVE: KEEP_ALIVE,\n  MERGE_PROPS: MERGE_PROPS,\n  NORMALIZE_CLASS: NORMALIZE_CLASS,\n  NORMALIZE_PROPS: NORMALIZE_PROPS,\n  NORMALIZE_STYLE: NORMALIZE_STYLE,\n  OPEN_BLOCK: OPEN_BLOCK,\n  POP_SCOPE_ID: POP_SCOPE_ID,\n  PUSH_SCOPE_ID: PUSH_SCOPE_ID,\n  RENDER_LIST: RENDER_LIST,\n  RENDER_SLOT: RENDER_SLOT,\n  RESOLVE_COMPONENT: RESOLVE_COMPONENT,\n  RESOLVE_DIRECTIVE: RESOLVE_DIRECTIVE,\n  RESOLVE_DYNAMIC_COMPONENT: RESOLVE_DYNAMIC_COMPONENT,\n  RESOLVE_FILTER: RESOLVE_FILTER,\n  SET_BLOCK_TRACKING: SET_BLOCK_TRACKING,\n  SUSPENSE: SUSPENSE,\n  TELEPORT: TELEPORT,\n  TO_DISPLAY_STRING: TO_DISPLAY_STRING,\n  TO_HANDLERS: TO_HANDLERS,\n  TO_HANDLER_KEY: TO_HANDLER_KEY,\n  TRANSITION: TRANSITION,\n  TRANSITION_GROUP: TRANSITION_GROUP,\n  UNREF: UNREF,\n  V_MODEL_CHECKBOX: V_MODEL_CHECKBOX,\n  V_MODEL_DYNAMIC: V_MODEL_DYNAMIC,\n  V_MODEL_RADIO: V_MODEL_RADIO,\n  V_MODEL_SELECT: V_MODEL_SELECT,\n  V_MODEL_TEXT: V_MODEL_TEXT,\n  V_ON_WITH_KEYS: V_ON_WITH_KEYS,\n  V_ON_WITH_MODIFIERS: V_ON_WITH_MODIFIERS,\n  V_SHOW: V_SHOW,\n  WITH_CTX: WITH_CTX,\n  WITH_DIRECTIVES: WITH_DIRECTIVES,\n  WITH_MEMO: WITH_MEMO,\n  advancePositionWithClone: advancePositionWithClone,\n  advancePositionWithMutation: advancePositionWithMutation,\n  assert: assert,\n  baseCompile: baseCompile,\n  baseParse: baseParse,\n  buildDirectiveArgs: buildDirectiveArgs,\n  buildProps: buildProps,\n  buildSlots: buildSlots,\n  checkCompatEnabled: checkCompatEnabled,\n  compile: compile$1,\n  createArrayExpression: createArrayExpression,\n  createAssignmentExpression: createAssignmentExpression,\n  createBlockStatement: createBlockStatement,\n  createCacheExpression: createCacheExpression,\n  createCallExpression: createCallExpression,\n  createCompilerError: createCompilerError,\n  createCompoundExpression: createCompoundExpression,\n  createConditionalExpression: createConditionalExpression,\n  createDOMCompilerError: createDOMCompilerError,\n  createForLoopParams: createForLoopParams,\n  createFunctionExpression: createFunctionExpression,\n  createIfStatement: createIfStatement,\n  createInterpolation: createInterpolation,\n  createObjectExpression: createObjectExpression,\n  createObjectProperty: createObjectProperty,\n  createReturnStatement: createReturnStatement,\n  createRoot: createRoot,\n  createSequenceExpression: createSequenceExpression,\n  createSimpleExpression: createSimpleExpression,\n  createStructuralDirectiveTransform: createStructuralDirectiveTransform,\n  createTemplateLiteral: createTemplateLiteral,\n  createTransformContext: createTransformContext,\n  createVNodeCall: createVNodeCall,\n  extractIdentifiers: extractIdentifiers,\n  findDir: findDir,\n  findProp: findProp,\n  generate: generate,\n  generateCodeFrame: generateCodeFrame,\n  getBaseTransformPreset: getBaseTransformPreset,\n  getConstantType: getConstantType,\n  getInnerRange: getInnerRange,\n  getMemoedVNodeCall: getMemoedVNodeCall,\n  getVNodeBlockHelper: getVNodeBlockHelper,\n  getVNodeHelper: getVNodeHelper,\n  hasDynamicKeyVBind: hasDynamicKeyVBind,\n  hasScopeRef: hasScopeRef,\n  helperNameMap: helperNameMap,\n  injectProp: injectProp,\n  isBuiltInType: isBuiltInType,\n  isCoreComponent: isCoreComponent,\n  isFunctionType: isFunctionType,\n  isInDestructureAssignment: isInDestructureAssignment,\n  isMemberExpression: isMemberExpression,\n  isMemberExpressionBrowser: isMemberExpressionBrowser,\n  isMemberExpressionNode: isMemberExpressionNode,\n  isReferencedIdentifier: isReferencedIdentifier,\n  isSimpleIdentifier: isSimpleIdentifier,\n  isSlotOutlet: isSlotOutlet,\n  isStaticArgOf: isStaticArgOf,\n  isStaticExp: isStaticExp,\n  isStaticProperty: isStaticProperty,\n  isStaticPropertyKey: isStaticPropertyKey,\n  isTemplateNode: isTemplateNode,\n  isText: isText$1,\n  isVSlot: isVSlot,\n  locStub: locStub,\n  makeBlock: makeBlock,\n  noopDirectiveTransform: noopDirectiveTransform,\n  parse: parse$8,\n  parserOptions: parserOptions,\n  processExpression: processExpression,\n  processFor: processFor,\n  processIf: processIf,\n  processSlotOutlet: processSlotOutlet,\n  registerRuntimeHelpers: registerRuntimeHelpers,\n  resolveComponentType: resolveComponentType,\n  stringifyExpression: stringifyExpression,\n  toValidAssetId: toValidAssetId,\n  trackSlotScopes: trackSlotScopes,\n  trackVForSlotScopes: trackVForSlotScopes,\n  transform: transform$1,\n  transformBind: transformBind,\n  transformElement: transformElement,\n  transformExpression: transformExpression,\n  transformModel: transformModel$1,\n  transformOn: transformOn$1,\n  transformStyle: transformStyle,\n  traverseNode: traverseNode,\n  walkBlockDeclarations: walkBlockDeclarations,\n  walkFunctionParams: walkFunctionParams,\n  walkIdentifiers: walkIdentifiers,\n  warnDeprecation: warnDeprecation\n});\n\nfunction pad$1 (hash, len) {\n  while (hash.length < len) {\n    hash = '0' + hash;\n  }\n  return hash;\n}\n\nfunction fold (hash, text) {\n  var i;\n  var chr;\n  var len;\n  if (text.length === 0) {\n    return hash;\n  }\n  for (i = 0, len = text.length; i < len; i++) {\n    chr = text.charCodeAt(i);\n    hash = ((hash << 5) - hash) + chr;\n    hash |= 0;\n  }\n  return hash < 0 ? hash * -2 : hash;\n}\n\nfunction foldObject (hash, o, seen) {\n  return Object.keys(o).sort().reduce(foldKey, hash);\n  function foldKey (hash, key) {\n    return foldValue(hash, o[key], key, seen);\n  }\n}\n\nfunction foldValue (input, value, key, seen) {\n  var hash = fold(fold(fold(input, key), toString$2(value)), typeof value);\n  if (value === null) {\n    return fold(hash, 'null');\n  }\n  if (value === undefined) {\n    return fold(hash, 'undefined');\n  }\n  if (typeof value === 'object' || typeof value === 'function') {\n    if (seen.indexOf(value) !== -1) {\n      return fold(hash, '[Circular]' + key);\n    }\n    seen.push(value);\n\n    var objHash = foldObject(hash, value, seen);\n\n    if (!('valueOf' in value) || typeof value.valueOf !== 'function') {\n      return objHash;\n    }\n\n    try {\n      return fold(objHash, String(value.valueOf()))\n    } catch (err) {\n      return fold(objHash, '[valueOf exception]' + (err.stack || err.message))\n    }\n  }\n  return fold(hash, value.toString());\n}\n\nfunction toString$2 (o) {\n  return Object.prototype.toString.call(o);\n}\n\nfunction sum (o) {\n  return pad$1(foldValue(0, o, '', []).toString(16), 8);\n}\n\nvar hashSum = sum;\n\nvar hash = hashSum;\n\nconst CSS_VARS_HELPER = `useCssVars`;\nfunction genCssVarsFromList(vars, id, isProd, isSSR = false) {\n    return `{\\n  ${vars\n        .map(key => `\"${isSSR ? `--` : ``}${genVarName(id, key, isProd)}\": (${key})`)\n        .join(',\\n  ')}\\n}`;\n}\nfunction genVarName(id, raw, isProd) {\n    if (isProd) {\n        return hash(id + raw);\n    }\n    else {\n        // escape ASCII Punctuation & Symbols\n        return `${id}-${raw.replace(/[ !\"#$%&'()*+,./:;<=>?@[\\\\\\]^`{|}~]/g, s => `\\\\${s}`)}`;\n    }\n}\nfunction normalizeExpression(exp) {\n    exp = exp.trim();\n    if ((exp[0] === `'` && exp[exp.length - 1] === `'`) ||\n        (exp[0] === `\"` && exp[exp.length - 1] === `\"`)) {\n        return exp.slice(1, -1);\n    }\n    return exp;\n}\nconst vBindRE = /v-bind\\s*\\(/g;\nfunction parseCssVars(sfc) {\n    const vars = [];\n    sfc.styles.forEach(style => {\n        let match;\n        // ignore v-bind() in comments /* ... */\n        const content = style.content.replace(/\\/\\*([\\s\\S]*?)\\*\\//g, '');\n        while ((match = vBindRE.exec(content))) {\n            const start = match.index + match[0].length;\n            const end = lexBinding(content, start);\n            if (end !== null) {\n                const variable = normalizeExpression(content.slice(start, end));\n                if (!vars.includes(variable)) {\n                    vars.push(variable);\n                }\n            }\n        }\n    });\n    return vars;\n}\nfunction lexBinding(content, start) {\n    let state = 0 /* LexerState.inParens */;\n    let parenDepth = 0;\n    for (let i = start; i < content.length; i++) {\n        const char = content.charAt(i);\n        switch (state) {\n            case 0 /* LexerState.inParens */:\n                if (char === `'`) {\n                    state = 1 /* LexerState.inSingleQuoteString */;\n                }\n                else if (char === `\"`) {\n                    state = 2 /* LexerState.inDoubleQuoteString */;\n                }\n                else if (char === `(`) {\n                    parenDepth++;\n                }\n                else if (char === `)`) {\n                    if (parenDepth > 0) {\n                        parenDepth--;\n                    }\n                    else {\n                        return i;\n                    }\n                }\n                break;\n            case 1 /* LexerState.inSingleQuoteString */:\n                if (char === `'`) {\n                    state = 0 /* LexerState.inParens */;\n                }\n                break;\n            case 2 /* LexerState.inDoubleQuoteString */:\n                if (char === `\"`) {\n                    state = 0 /* LexerState.inParens */;\n                }\n                break;\n        }\n    }\n    return null;\n}\nconst cssVarsPlugin = opts => {\n    const { id, isProd } = opts;\n    return {\n        postcssPlugin: 'vue-sfc-vars',\n        Declaration(decl) {\n            // rewrite CSS variables\n            const value = decl.value;\n            if (vBindRE.test(value)) {\n                vBindRE.lastIndex = 0;\n                let transformed = '';\n                let lastIndex = 0;\n                let match;\n                while ((match = vBindRE.exec(value))) {\n                    const start = match.index + match[0].length;\n                    const end = lexBinding(value, start);\n                    if (end !== null) {\n                        const variable = normalizeExpression(value.slice(start, end));\n                        transformed +=\n                            value.slice(lastIndex, match.index) +\n                                `var(--${genVarName(id, variable, isProd)})`;\n                        lastIndex = end + 1;\n                    }\n                }\n                decl.value = transformed + value.slice(lastIndex);\n            }\n        }\n    };\n};\ncssVarsPlugin.postcss = true;\nfunction genCssVarsCode(vars, bindings, id, isProd) {\n    const varsExp = genCssVarsFromList(vars, id, isProd);\n    const exp = createSimpleExpression(varsExp, false);\n    const context = createTransformContext(createRoot([]), {\n        prefixIdentifiers: true,\n        inline: true,\n        bindingMetadata: bindings.__isScriptSetup === false ? undefined : bindings\n    });\n    const transformed = processExpression(exp, context);\n    const transformedString = transformed.type === 4 /* NodeTypes.SIMPLE_EXPRESSION */\n        ? transformed.content\n        : transformed.children\n            .map(c => {\n            return typeof c === 'string'\n                ? c\n                : c.content;\n        })\n            .join('');\n    return `_${CSS_VARS_HELPER}(_ctx => (${transformedString}))`;\n}\n// <script setup> already gets the calls injected as part of the transform\n// this is only for single normal <script>\nfunction genNormalScriptCssVarsCode(cssVars, bindings, id, isProd) {\n    return (`\\nimport { ${CSS_VARS_HELPER} as _${CSS_VARS_HELPER} } from 'vue'\\n` +\n        `const __injectCSSVars__ = () => {\\n${genCssVarsCode(cssVars, bindings, id, isProd)}}\\n` +\n        `const __setup__ = __default__.setup\\n` +\n        `__default__.setup = __setup__\\n` +\n        `  ? (props, ctx) => { __injectCSSVars__();return __setup__(props, ctx) }\\n` +\n        `  : __injectCSSVars__\\n`);\n}\n\nfunction createCache(size = 500) {\n    return new Map()\n        ;\n}\n\nvar global$1 = (typeof global !== \"undefined\" ? global :\n  typeof self !== \"undefined\" ? self :\n  typeof window !== \"undefined\" ? window : {});\n\nvar lookup = [];\nvar revLookup = [];\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array;\nvar inited = false;\nfunction init () {\n  inited = true;\n  var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n  for (var i = 0, len = code.length; i < len; ++i) {\n    lookup[i] = code[i];\n    revLookup[code.charCodeAt(i)] = i;\n  }\n\n  revLookup['-'.charCodeAt(0)] = 62;\n  revLookup['_'.charCodeAt(0)] = 63;\n}\n\nfunction toByteArray (b64) {\n  if (!inited) {\n    init();\n  }\n  var i, j, l, tmp, placeHolders, arr;\n  var len = b64.length;\n\n  if (len % 4 > 0) {\n    throw new Error('Invalid string. Length must be a multiple of 4')\n  }\n\n  // the number of equal signs (place holders)\n  // if there are two placeholders, than the two characters before it\n  // represent one byte\n  // if there is only one, then the three characters before it represent 2 bytes\n  // this is just a cheap hack to not do indexOf twice\n  placeHolders = b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0;\n\n  // base64 is 4/3 + up to two characters of the original data\n  arr = new Arr(len * 3 / 4 - placeHolders);\n\n  // if there are placeholders, only get up to the last complete 4 chars\n  l = placeHolders > 0 ? len - 4 : len;\n\n  var L = 0;\n\n  for (i = 0, j = 0; i < l; i += 4, j += 3) {\n    tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)];\n    arr[L++] = (tmp >> 16) & 0xFF;\n    arr[L++] = (tmp >> 8) & 0xFF;\n    arr[L++] = tmp & 0xFF;\n  }\n\n  if (placeHolders === 2) {\n    tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4);\n    arr[L++] = tmp & 0xFF;\n  } else if (placeHolders === 1) {\n    tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2);\n    arr[L++] = (tmp >> 8) & 0xFF;\n    arr[L++] = tmp & 0xFF;\n  }\n\n  return arr\n}\n\nfunction tripletToBase64 (num) {\n  return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n  var tmp;\n  var output = [];\n  for (var i = start; i < end; i += 3) {\n    tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2]);\n    output.push(tripletToBase64(tmp));\n  }\n  return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n  if (!inited) {\n    init();\n  }\n  var tmp;\n  var len = uint8.length;\n  var extraBytes = len % 3; // if we have 1 byte left, pad 2 bytes\n  var output = '';\n  var parts = [];\n  var maxChunkLength = 16383; // must be multiple of 3\n\n  // go through the array every three bytes, we'll deal with trailing stuff later\n  for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n    parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)));\n  }\n\n  // pad the end with zeros, but make sure to not forget the extra bytes\n  if (extraBytes === 1) {\n    tmp = uint8[len - 1];\n    output += lookup[tmp >> 2];\n    output += lookup[(tmp << 4) & 0x3F];\n    output += '==';\n  } else if (extraBytes === 2) {\n    tmp = (uint8[len - 2] << 8) + (uint8[len - 1]);\n    output += lookup[tmp >> 10];\n    output += lookup[(tmp >> 4) & 0x3F];\n    output += lookup[(tmp << 2) & 0x3F];\n    output += '=';\n  }\n\n  parts.push(output);\n\n  return parts.join('')\n}\n\nfunction read (buffer, offset, isLE, mLen, nBytes) {\n  var e, m;\n  var eLen = nBytes * 8 - mLen - 1;\n  var eMax = (1 << eLen) - 1;\n  var eBias = eMax >> 1;\n  var nBits = -7;\n  var i = isLE ? (nBytes - 1) : 0;\n  var d = isLE ? -1 : 1;\n  var s = buffer[offset + i];\n\n  i += d;\n\n  e = s & ((1 << (-nBits)) - 1);\n  s >>= (-nBits);\n  nBits += eLen;\n  for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n  m = e & ((1 << (-nBits)) - 1);\n  e >>= (-nBits);\n  nBits += mLen;\n  for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n  if (e === 0) {\n    e = 1 - eBias;\n  } else if (e === eMax) {\n    return m ? NaN : ((s ? -1 : 1) * Infinity)\n  } else {\n    m = m + Math.pow(2, mLen);\n    e = e - eBias;\n  }\n  return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nfunction write (buffer, value, offset, isLE, mLen, nBytes) {\n  var e, m, c;\n  var eLen = nBytes * 8 - mLen - 1;\n  var eMax = (1 << eLen) - 1;\n  var eBias = eMax >> 1;\n  var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0);\n  var i = isLE ? 0 : (nBytes - 1);\n  var d = isLE ? 1 : -1;\n  var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0;\n\n  value = Math.abs(value);\n\n  if (isNaN(value) || value === Infinity) {\n    m = isNaN(value) ? 1 : 0;\n    e = eMax;\n  } else {\n    e = Math.floor(Math.log(value) / Math.LN2);\n    if (value * (c = Math.pow(2, -e)) < 1) {\n      e--;\n      c *= 2;\n    }\n    if (e + eBias >= 1) {\n      value += rt / c;\n    } else {\n      value += rt * Math.pow(2, 1 - eBias);\n    }\n    if (value * c >= 2) {\n      e++;\n      c /= 2;\n    }\n\n    if (e + eBias >= eMax) {\n      m = 0;\n      e = eMax;\n    } else if (e + eBias >= 1) {\n      m = (value * c - 1) * Math.pow(2, mLen);\n      e = e + eBias;\n    } else {\n      m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen);\n      e = 0;\n    }\n  }\n\n  for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n  e = (e << mLen) | m;\n  eLen += mLen;\n  for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n  buffer[offset + i - d] |= s * 128;\n}\n\nvar toString$1 = {}.toString;\n\nvar isArray$2 = Array.isArray || function (arr) {\n  return toString$1.call(arr) == '[object Array]';\n};\n\n/*!\n * The buffer module from node.js, for the browser.\n *\n * @author   Feross Aboukhadijeh <feross@feross.org> <http://feross.org>\n * @license  MIT\n */\n\nvar INSPECT_MAX_BYTES = 50;\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n *   === true    Use Uint8Array implementation (fastest)\n *   === false   Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n *   - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n *     See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n *   - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n *   - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n *     incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global$1.TYPED_ARRAY_SUPPORT !== undefined\n  ? global$1.TYPED_ARRAY_SUPPORT\n  : true;\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nkMaxLength();\n\nfunction kMaxLength () {\n  return Buffer.TYPED_ARRAY_SUPPORT\n    ? 0x7fffffff\n    : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n  if (kMaxLength() < length) {\n    throw new RangeError('Invalid typed array length')\n  }\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    // Return an augmented `Uint8Array` instance, for best performance\n    that = new Uint8Array(length);\n    that.__proto__ = Buffer.prototype;\n  } else {\n    // Fallback: Return an object instance of the Buffer class\n    if (that === null) {\n      that = new Buffer(length);\n    }\n    that.length = length;\n  }\n\n  return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n  if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n    return new Buffer(arg, encodingOrOffset, length)\n  }\n\n  // Common case.\n  if (typeof arg === 'number') {\n    if (typeof encodingOrOffset === 'string') {\n      throw new Error(\n        'If encoding is specified then the first argument must be a string'\n      )\n    }\n    return allocUnsafe(this, arg)\n  }\n  return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192; // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n  arr.__proto__ = Buffer.prototype;\n  return arr\n};\n\nfunction from (that, value, encodingOrOffset, length) {\n  if (typeof value === 'number') {\n    throw new TypeError('\"value\" argument must not be a number')\n  }\n\n  if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n    return fromArrayBuffer(that, value, encodingOrOffset, length)\n  }\n\n  if (typeof value === 'string') {\n    return fromString(that, value, encodingOrOffset)\n  }\n\n  return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n  return from(null, value, encodingOrOffset, length)\n};\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n  Buffer.prototype.__proto__ = Uint8Array.prototype;\n  Buffer.__proto__ = Uint8Array;\n  if (typeof Symbol !== 'undefined' && Symbol.species &&\n      Buffer[Symbol.species] === Buffer) ;\n}\n\nfunction assertSize (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('\"size\" argument must be a number')\n  } else if (size < 0) {\n    throw new RangeError('\"size\" argument must not be negative')\n  }\n}\n\nfunction alloc (that, size, fill, encoding) {\n  assertSize(size);\n  if (size <= 0) {\n    return createBuffer(that, size)\n  }\n  if (fill !== undefined) {\n    // Only pay attention to encoding if it's a string. This\n    // prevents accidentally sending in a number that would\n    // be interpretted as a start offset.\n    return typeof encoding === 'string'\n      ? createBuffer(that, size).fill(fill, encoding)\n      : createBuffer(that, size).fill(fill)\n  }\n  return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n  return alloc(null, size, fill, encoding)\n};\n\nfunction allocUnsafe (that, size) {\n  assertSize(size);\n  that = createBuffer(that, size < 0 ? 0 : checked(size) | 0);\n  if (!Buffer.TYPED_ARRAY_SUPPORT) {\n    for (var i = 0; i < size; ++i) {\n      that[i] = 0;\n    }\n  }\n  return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n  return allocUnsafe(null, size)\n};\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n  return allocUnsafe(null, size)\n};\n\nfunction fromString (that, string, encoding) {\n  if (typeof encoding !== 'string' || encoding === '') {\n    encoding = 'utf8';\n  }\n\n  if (!Buffer.isEncoding(encoding)) {\n    throw new TypeError('\"encoding\" must be a valid string encoding')\n  }\n\n  var length = byteLength(string, encoding) | 0;\n  that = createBuffer(that, length);\n\n  var actual = that.write(string, encoding);\n\n  if (actual !== length) {\n    // Writing a hex string, for example, that contains invalid characters will\n    // cause everything after the first invalid character to be ignored. (e.g.\n    // 'abxxcd' will be treated as 'ab')\n    that = that.slice(0, actual);\n  }\n\n  return that\n}\n\nfunction fromArrayLike (that, array) {\n  var length = array.length < 0 ? 0 : checked(array.length) | 0;\n  that = createBuffer(that, length);\n  for (var i = 0; i < length; i += 1) {\n    that[i] = array[i] & 255;\n  }\n  return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n  array.byteLength; // this throws if `array` is not a valid ArrayBuffer\n\n  if (byteOffset < 0 || array.byteLength < byteOffset) {\n    throw new RangeError('\\'offset\\' is out of bounds')\n  }\n\n  if (array.byteLength < byteOffset + (length || 0)) {\n    throw new RangeError('\\'length\\' is out of bounds')\n  }\n\n  if (byteOffset === undefined && length === undefined) {\n    array = new Uint8Array(array);\n  } else if (length === undefined) {\n    array = new Uint8Array(array, byteOffset);\n  } else {\n    array = new Uint8Array(array, byteOffset, length);\n  }\n\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    // Return an augmented `Uint8Array` instance, for best performance\n    that = array;\n    that.__proto__ = Buffer.prototype;\n  } else {\n    // Fallback: Return an object instance of the Buffer class\n    that = fromArrayLike(that, array);\n  }\n  return that\n}\n\nfunction fromObject (that, obj) {\n  if (internalIsBuffer(obj)) {\n    var len = checked(obj.length) | 0;\n    that = createBuffer(that, len);\n\n    if (that.length === 0) {\n      return that\n    }\n\n    obj.copy(that, 0, 0, len);\n    return that\n  }\n\n  if (obj) {\n    if ((typeof ArrayBuffer !== 'undefined' &&\n        obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n      if (typeof obj.length !== 'number' || isnan(obj.length)) {\n        return createBuffer(that, 0)\n      }\n      return fromArrayLike(that, obj)\n    }\n\n    if (obj.type === 'Buffer' && isArray$2(obj.data)) {\n      return fromArrayLike(that, obj.data)\n    }\n  }\n\n  throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n  // Note: cannot use `length < kMaxLength()` here because that fails when\n  // length is NaN (which is otherwise coerced to zero.)\n  if (length >= kMaxLength()) {\n    throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n                         'size: 0x' + kMaxLength().toString(16) + ' bytes')\n  }\n  return length | 0\n}\nBuffer.isBuffer = isBuffer$1;\nfunction internalIsBuffer (b) {\n  return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n  if (!internalIsBuffer(a) || !internalIsBuffer(b)) {\n    throw new TypeError('Arguments must be Buffers')\n  }\n\n  if (a === b) return 0\n\n  var x = a.length;\n  var y = b.length;\n\n  for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n    if (a[i] !== b[i]) {\n      x = a[i];\n      y = b[i];\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n};\n\nBuffer.isEncoding = function isEncoding (encoding) {\n  switch (String(encoding).toLowerCase()) {\n    case 'hex':\n    case 'utf8':\n    case 'utf-8':\n    case 'ascii':\n    case 'latin1':\n    case 'binary':\n    case 'base64':\n    case 'ucs2':\n    case 'ucs-2':\n    case 'utf16le':\n    case 'utf-16le':\n      return true\n    default:\n      return false\n  }\n};\n\nBuffer.concat = function concat (list, length) {\n  if (!isArray$2(list)) {\n    throw new TypeError('\"list\" argument must be an Array of Buffers')\n  }\n\n  if (list.length === 0) {\n    return Buffer.alloc(0)\n  }\n\n  var i;\n  if (length === undefined) {\n    length = 0;\n    for (i = 0; i < list.length; ++i) {\n      length += list[i].length;\n    }\n  }\n\n  var buffer = Buffer.allocUnsafe(length);\n  var pos = 0;\n  for (i = 0; i < list.length; ++i) {\n    var buf = list[i];\n    if (!internalIsBuffer(buf)) {\n      throw new TypeError('\"list\" argument must be an Array of Buffers')\n    }\n    buf.copy(buffer, pos);\n    pos += buf.length;\n  }\n  return buffer\n};\n\nfunction byteLength (string, encoding) {\n  if (internalIsBuffer(string)) {\n    return string.length\n  }\n  if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n      (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n    return string.byteLength\n  }\n  if (typeof string !== 'string') {\n    string = '' + string;\n  }\n\n  var len = string.length;\n  if (len === 0) return 0\n\n  // Use a for loop to avoid recursion\n  var loweredCase = false;\n  for (;;) {\n    switch (encoding) {\n      case 'ascii':\n      case 'latin1':\n      case 'binary':\n        return len\n      case 'utf8':\n      case 'utf-8':\n      case undefined:\n        return utf8ToBytes(string).length\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return len * 2\n      case 'hex':\n        return len >>> 1\n      case 'base64':\n        return base64ToBytes(string).length\n      default:\n        if (loweredCase) return utf8ToBytes(string).length // assume utf8\n        encoding = ('' + encoding).toLowerCase();\n        loweredCase = true;\n    }\n  }\n}\nBuffer.byteLength = byteLength;\n\nfunction slowToString (encoding, start, end) {\n  var loweredCase = false;\n\n  // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n  // property of a typed array.\n\n  // This behaves neither like String nor Uint8Array in that we set start/end\n  // to their upper/lower bounds if the value passed is out of range.\n  // undefined is handled specially as per ECMA-262 6th Edition,\n  // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n  if (start === undefined || start < 0) {\n    start = 0;\n  }\n  // Return early if start > this.length. Done here to prevent potential uint32\n  // coercion fail below.\n  if (start > this.length) {\n    return ''\n  }\n\n  if (end === undefined || end > this.length) {\n    end = this.length;\n  }\n\n  if (end <= 0) {\n    return ''\n  }\n\n  // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n  end >>>= 0;\n  start >>>= 0;\n\n  if (end <= start) {\n    return ''\n  }\n\n  if (!encoding) encoding = 'utf8';\n\n  while (true) {\n    switch (encoding) {\n      case 'hex':\n        return hexSlice(this, start, end)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Slice(this, start, end)\n\n      case 'ascii':\n        return asciiSlice(this, start, end)\n\n      case 'latin1':\n      case 'binary':\n        return latin1Slice(this, start, end)\n\n      case 'base64':\n        return base64Slice(this, start, end)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return utf16leSlice(this, start, end)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = (encoding + '').toLowerCase();\n        loweredCase = true;\n    }\n  }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true;\n\nfunction swap (b, n, m) {\n  var i = b[n];\n  b[n] = b[m];\n  b[m] = i;\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n  var len = this.length;\n  if (len % 2 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 16-bits')\n  }\n  for (var i = 0; i < len; i += 2) {\n    swap(this, i, i + 1);\n  }\n  return this\n};\n\nBuffer.prototype.swap32 = function swap32 () {\n  var len = this.length;\n  if (len % 4 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 32-bits')\n  }\n  for (var i = 0; i < len; i += 4) {\n    swap(this, i, i + 3);\n    swap(this, i + 1, i + 2);\n  }\n  return this\n};\n\nBuffer.prototype.swap64 = function swap64 () {\n  var len = this.length;\n  if (len % 8 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 64-bits')\n  }\n  for (var i = 0; i < len; i += 8) {\n    swap(this, i, i + 7);\n    swap(this, i + 1, i + 6);\n    swap(this, i + 2, i + 5);\n    swap(this, i + 3, i + 4);\n  }\n  return this\n};\n\nBuffer.prototype.toString = function toString () {\n  var length = this.length | 0;\n  if (length === 0) return ''\n  if (arguments.length === 0) return utf8Slice(this, 0, length)\n  return slowToString.apply(this, arguments)\n};\n\nBuffer.prototype.equals = function equals (b) {\n  if (!internalIsBuffer(b)) throw new TypeError('Argument must be a Buffer')\n  if (this === b) return true\n  return Buffer.compare(this, b) === 0\n};\n\nBuffer.prototype.inspect = function inspect () {\n  var str = '';\n  var max = INSPECT_MAX_BYTES;\n  if (this.length > 0) {\n    str = this.toString('hex', 0, max).match(/.{2}/g).join(' ');\n    if (this.length > max) str += ' ... ';\n  }\n  return '<Buffer ' + str + '>'\n};\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n  if (!internalIsBuffer(target)) {\n    throw new TypeError('Argument must be a Buffer')\n  }\n\n  if (start === undefined) {\n    start = 0;\n  }\n  if (end === undefined) {\n    end = target ? target.length : 0;\n  }\n  if (thisStart === undefined) {\n    thisStart = 0;\n  }\n  if (thisEnd === undefined) {\n    thisEnd = this.length;\n  }\n\n  if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n    throw new RangeError('out of range index')\n  }\n\n  if (thisStart >= thisEnd && start >= end) {\n    return 0\n  }\n  if (thisStart >= thisEnd) {\n    return -1\n  }\n  if (start >= end) {\n    return 1\n  }\n\n  start >>>= 0;\n  end >>>= 0;\n  thisStart >>>= 0;\n  thisEnd >>>= 0;\n\n  if (this === target) return 0\n\n  var x = thisEnd - thisStart;\n  var y = end - start;\n  var len = Math.min(x, y);\n\n  var thisCopy = this.slice(thisStart, thisEnd);\n  var targetCopy = target.slice(start, end);\n\n  for (var i = 0; i < len; ++i) {\n    if (thisCopy[i] !== targetCopy[i]) {\n      x = thisCopy[i];\n      y = targetCopy[i];\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n};\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n  // Empty buffer means no match\n  if (buffer.length === 0) return -1\n\n  // Normalize byteOffset\n  if (typeof byteOffset === 'string') {\n    encoding = byteOffset;\n    byteOffset = 0;\n  } else if (byteOffset > 0x7fffffff) {\n    byteOffset = 0x7fffffff;\n  } else if (byteOffset < -0x80000000) {\n    byteOffset = -0x80000000;\n  }\n  byteOffset = +byteOffset;  // Coerce to Number.\n  if (isNaN(byteOffset)) {\n    // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n    byteOffset = dir ? 0 : (buffer.length - 1);\n  }\n\n  // Normalize byteOffset: negative offsets start from the end of the buffer\n  if (byteOffset < 0) byteOffset = buffer.length + byteOffset;\n  if (byteOffset >= buffer.length) {\n    if (dir) return -1\n    else byteOffset = buffer.length - 1;\n  } else if (byteOffset < 0) {\n    if (dir) byteOffset = 0;\n    else return -1\n  }\n\n  // Normalize val\n  if (typeof val === 'string') {\n    val = Buffer.from(val, encoding);\n  }\n\n  // Finally, search either indexOf (if dir is true) or lastIndexOf\n  if (internalIsBuffer(val)) {\n    // Special case: looking for empty string/buffer always fails\n    if (val.length === 0) {\n      return -1\n    }\n    return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n  } else if (typeof val === 'number') {\n    val = val & 0xFF; // Search for a byte value [0-255]\n    if (Buffer.TYPED_ARRAY_SUPPORT &&\n        typeof Uint8Array.prototype.indexOf === 'function') {\n      if (dir) {\n        return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n      } else {\n        return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n      }\n    }\n    return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n  }\n\n  throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n  var indexSize = 1;\n  var arrLength = arr.length;\n  var valLength = val.length;\n\n  if (encoding !== undefined) {\n    encoding = String(encoding).toLowerCase();\n    if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n        encoding === 'utf16le' || encoding === 'utf-16le') {\n      if (arr.length < 2 || val.length < 2) {\n        return -1\n      }\n      indexSize = 2;\n      arrLength /= 2;\n      valLength /= 2;\n      byteOffset /= 2;\n    }\n  }\n\n  function read (buf, i) {\n    if (indexSize === 1) {\n      return buf[i]\n    } else {\n      return buf.readUInt16BE(i * indexSize)\n    }\n  }\n\n  var i;\n  if (dir) {\n    var foundIndex = -1;\n    for (i = byteOffset; i < arrLength; i++) {\n      if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n        if (foundIndex === -1) foundIndex = i;\n        if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n      } else {\n        if (foundIndex !== -1) i -= i - foundIndex;\n        foundIndex = -1;\n      }\n    }\n  } else {\n    if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength;\n    for (i = byteOffset; i >= 0; i--) {\n      var found = true;\n      for (var j = 0; j < valLength; j++) {\n        if (read(arr, i + j) !== read(val, j)) {\n          found = false;\n          break\n        }\n      }\n      if (found) return i\n    }\n  }\n\n  return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n  return this.indexOf(val, byteOffset, encoding) !== -1\n};\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n};\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n};\n\nfunction hexWrite (buf, string, offset, length) {\n  offset = Number(offset) || 0;\n  var remaining = buf.length - offset;\n  if (!length) {\n    length = remaining;\n  } else {\n    length = Number(length);\n    if (length > remaining) {\n      length = remaining;\n    }\n  }\n\n  // must be an even number of digits\n  var strLen = string.length;\n  if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n  if (length > strLen / 2) {\n    length = strLen / 2;\n  }\n  for (var i = 0; i < length; ++i) {\n    var parsed = parseInt(string.substr(i * 2, 2), 16);\n    if (isNaN(parsed)) return i\n    buf[offset + i] = parsed;\n  }\n  return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n  return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n  return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n  return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n  return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n  return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n  // Buffer#write(string)\n  if (offset === undefined) {\n    encoding = 'utf8';\n    length = this.length;\n    offset = 0;\n  // Buffer#write(string, encoding)\n  } else if (length === undefined && typeof offset === 'string') {\n    encoding = offset;\n    length = this.length;\n    offset = 0;\n  // Buffer#write(string, offset[, length][, encoding])\n  } else if (isFinite(offset)) {\n    offset = offset | 0;\n    if (isFinite(length)) {\n      length = length | 0;\n      if (encoding === undefined) encoding = 'utf8';\n    } else {\n      encoding = length;\n      length = undefined;\n    }\n  // legacy write(string, encoding, offset, length) - remove in v0.13\n  } else {\n    throw new Error(\n      'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n    )\n  }\n\n  var remaining = this.length - offset;\n  if (length === undefined || length > remaining) length = remaining;\n\n  if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n    throw new RangeError('Attempt to write outside buffer bounds')\n  }\n\n  if (!encoding) encoding = 'utf8';\n\n  var loweredCase = false;\n  for (;;) {\n    switch (encoding) {\n      case 'hex':\n        return hexWrite(this, string, offset, length)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Write(this, string, offset, length)\n\n      case 'ascii':\n        return asciiWrite(this, string, offset, length)\n\n      case 'latin1':\n      case 'binary':\n        return latin1Write(this, string, offset, length)\n\n      case 'base64':\n        // Warning: maxLength not taken into account in base64Write\n        return base64Write(this, string, offset, length)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return ucs2Write(this, string, offset, length)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = ('' + encoding).toLowerCase();\n        loweredCase = true;\n    }\n  }\n};\n\nBuffer.prototype.toJSON = function toJSON () {\n  return {\n    type: 'Buffer',\n    data: Array.prototype.slice.call(this._arr || this, 0)\n  }\n};\n\nfunction base64Slice (buf, start, end) {\n  if (start === 0 && end === buf.length) {\n    return fromByteArray(buf)\n  } else {\n    return fromByteArray(buf.slice(start, end))\n  }\n}\n\nfunction utf8Slice (buf, start, end) {\n  end = Math.min(buf.length, end);\n  var res = [];\n\n  var i = start;\n  while (i < end) {\n    var firstByte = buf[i];\n    var codePoint = null;\n    var bytesPerSequence = (firstByte > 0xEF) ? 4\n      : (firstByte > 0xDF) ? 3\n      : (firstByte > 0xBF) ? 2\n      : 1;\n\n    if (i + bytesPerSequence <= end) {\n      var secondByte, thirdByte, fourthByte, tempCodePoint;\n\n      switch (bytesPerSequence) {\n        case 1:\n          if (firstByte < 0x80) {\n            codePoint = firstByte;\n          }\n          break\n        case 2:\n          secondByte = buf[i + 1];\n          if ((secondByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F);\n            if (tempCodePoint > 0x7F) {\n              codePoint = tempCodePoint;\n            }\n          }\n          break\n        case 3:\n          secondByte = buf[i + 1];\n          thirdByte = buf[i + 2];\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F);\n            if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n              codePoint = tempCodePoint;\n            }\n          }\n          break\n        case 4:\n          secondByte = buf[i + 1];\n          thirdByte = buf[i + 2];\n          fourthByte = buf[i + 3];\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F);\n            if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n              codePoint = tempCodePoint;\n            }\n          }\n      }\n    }\n\n    if (codePoint === null) {\n      // we did not generate a valid codePoint so insert a\n      // replacement char (U+FFFD) and advance only 1 byte\n      codePoint = 0xFFFD;\n      bytesPerSequence = 1;\n    } else if (codePoint > 0xFFFF) {\n      // encode to utf16 (surrogate pair dance)\n      codePoint -= 0x10000;\n      res.push(codePoint >>> 10 & 0x3FF | 0xD800);\n      codePoint = 0xDC00 | codePoint & 0x3FF;\n    }\n\n    res.push(codePoint);\n    i += bytesPerSequence;\n  }\n\n  return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000;\n\nfunction decodeCodePointsArray (codePoints) {\n  var len = codePoints.length;\n  if (len <= MAX_ARGUMENTS_LENGTH) {\n    return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n  }\n\n  // Decode in chunks to avoid \"call stack size exceeded\".\n  var res = '';\n  var i = 0;\n  while (i < len) {\n    res += String.fromCharCode.apply(\n      String,\n      codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n    );\n  }\n  return res\n}\n\nfunction asciiSlice (buf, start, end) {\n  var ret = '';\n  end = Math.min(buf.length, end);\n\n  for (var i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i] & 0x7F);\n  }\n  return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n  var ret = '';\n  end = Math.min(buf.length, end);\n\n  for (var i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i]);\n  }\n  return ret\n}\n\nfunction hexSlice (buf, start, end) {\n  var len = buf.length;\n\n  if (!start || start < 0) start = 0;\n  if (!end || end < 0 || end > len) end = len;\n\n  var out = '';\n  for (var i = start; i < end; ++i) {\n    out += toHex(buf[i]);\n  }\n  return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n  var bytes = buf.slice(start, end);\n  var res = '';\n  for (var i = 0; i < bytes.length; i += 2) {\n    res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256);\n  }\n  return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n  var len = this.length;\n  start = ~~start;\n  end = end === undefined ? len : ~~end;\n\n  if (start < 0) {\n    start += len;\n    if (start < 0) start = 0;\n  } else if (start > len) {\n    start = len;\n  }\n\n  if (end < 0) {\n    end += len;\n    if (end < 0) end = 0;\n  } else if (end > len) {\n    end = len;\n  }\n\n  if (end < start) end = start;\n\n  var newBuf;\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    newBuf = this.subarray(start, end);\n    newBuf.__proto__ = Buffer.prototype;\n  } else {\n    var sliceLen = end - start;\n    newBuf = new Buffer(sliceLen, undefined);\n    for (var i = 0; i < sliceLen; ++i) {\n      newBuf[i] = this[i + start];\n    }\n  }\n\n  return newBuf\n};\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n  if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n  if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n  offset = offset | 0;\n  byteLength = byteLength | 0;\n  if (!noAssert) checkOffset(offset, byteLength, this.length);\n\n  var val = this[offset];\n  var mul = 1;\n  var i = 0;\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul;\n  }\n\n  return val\n};\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n  offset = offset | 0;\n  byteLength = byteLength | 0;\n  if (!noAssert) {\n    checkOffset(offset, byteLength, this.length);\n  }\n\n  var val = this[offset + --byteLength];\n  var mul = 1;\n  while (byteLength > 0 && (mul *= 0x100)) {\n    val += this[offset + --byteLength] * mul;\n  }\n\n  return val\n};\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 1, this.length);\n  return this[offset]\n};\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length);\n  return this[offset] | (this[offset + 1] << 8)\n};\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length);\n  return (this[offset] << 8) | this[offset + 1]\n};\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length);\n\n  return ((this[offset]) |\n      (this[offset + 1] << 8) |\n      (this[offset + 2] << 16)) +\n      (this[offset + 3] * 0x1000000)\n};\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length);\n\n  return (this[offset] * 0x1000000) +\n    ((this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    this[offset + 3])\n};\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n  offset = offset | 0;\n  byteLength = byteLength | 0;\n  if (!noAssert) checkOffset(offset, byteLength, this.length);\n\n  var val = this[offset];\n  var mul = 1;\n  var i = 0;\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul;\n  }\n  mul *= 0x80;\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength);\n\n  return val\n};\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n  offset = offset | 0;\n  byteLength = byteLength | 0;\n  if (!noAssert) checkOffset(offset, byteLength, this.length);\n\n  var i = byteLength;\n  var mul = 1;\n  var val = this[offset + --i];\n  while (i > 0 && (mul *= 0x100)) {\n    val += this[offset + --i] * mul;\n  }\n  mul *= 0x80;\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength);\n\n  return val\n};\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 1, this.length);\n  if (!(this[offset] & 0x80)) return (this[offset])\n  return ((0xff - this[offset] + 1) * -1)\n};\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length);\n  var val = this[offset] | (this[offset + 1] << 8);\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n};\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length);\n  var val = this[offset + 1] | (this[offset] << 8);\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n};\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length);\n\n  return (this[offset]) |\n    (this[offset + 1] << 8) |\n    (this[offset + 2] << 16) |\n    (this[offset + 3] << 24)\n};\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length);\n\n  return (this[offset] << 24) |\n    (this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    (this[offset + 3])\n};\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length);\n  return read(this, offset, true, 23, 4)\n};\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length);\n  return read(this, offset, false, 23, 4)\n};\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 8, this.length);\n  return read(this, offset, true, 52, 8)\n};\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 8, this.length);\n  return read(this, offset, false, 52, 8)\n};\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n  if (!internalIsBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n  if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n  value = +value;\n  offset = offset | 0;\n  byteLength = byteLength | 0;\n  if (!noAssert) {\n    var maxBytes = Math.pow(2, 8 * byteLength) - 1;\n    checkInt(this, value, offset, byteLength, maxBytes, 0);\n  }\n\n  var mul = 1;\n  var i = 0;\n  this[offset] = value & 0xFF;\n  while (++i < byteLength && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF;\n  }\n\n  return offset + byteLength\n};\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n  value = +value;\n  offset = offset | 0;\n  byteLength = byteLength | 0;\n  if (!noAssert) {\n    var maxBytes = Math.pow(2, 8 * byteLength) - 1;\n    checkInt(this, value, offset, byteLength, maxBytes, 0);\n  }\n\n  var i = byteLength - 1;\n  var mul = 1;\n  this[offset + i] = value & 0xFF;\n  while (--i >= 0 && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF;\n  }\n\n  return offset + byteLength\n};\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n  value = +value;\n  offset = offset | 0;\n  if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0);\n  if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value);\n  this[offset] = (value & 0xff);\n  return offset + 1\n};\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n  if (value < 0) value = 0xffff + value + 1;\n  for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n    buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n      (littleEndian ? i : 1 - i) * 8;\n  }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n  value = +value;\n  offset = offset | 0;\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0);\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value & 0xff);\n    this[offset + 1] = (value >>> 8);\n  } else {\n    objectWriteUInt16(this, value, offset, true);\n  }\n  return offset + 2\n};\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n  value = +value;\n  offset = offset | 0;\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0);\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 8);\n    this[offset + 1] = (value & 0xff);\n  } else {\n    objectWriteUInt16(this, value, offset, false);\n  }\n  return offset + 2\n};\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n  if (value < 0) value = 0xffffffff + value + 1;\n  for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n    buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff;\n  }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n  value = +value;\n  offset = offset | 0;\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0);\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset + 3] = (value >>> 24);\n    this[offset + 2] = (value >>> 16);\n    this[offset + 1] = (value >>> 8);\n    this[offset] = (value & 0xff);\n  } else {\n    objectWriteUInt32(this, value, offset, true);\n  }\n  return offset + 4\n};\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n  value = +value;\n  offset = offset | 0;\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0);\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 24);\n    this[offset + 1] = (value >>> 16);\n    this[offset + 2] = (value >>> 8);\n    this[offset + 3] = (value & 0xff);\n  } else {\n    objectWriteUInt32(this, value, offset, false);\n  }\n  return offset + 4\n};\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n  value = +value;\n  offset = offset | 0;\n  if (!noAssert) {\n    var limit = Math.pow(2, 8 * byteLength - 1);\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit);\n  }\n\n  var i = 0;\n  var mul = 1;\n  var sub = 0;\n  this[offset] = value & 0xFF;\n  while (++i < byteLength && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n      sub = 1;\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF;\n  }\n\n  return offset + byteLength\n};\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n  value = +value;\n  offset = offset | 0;\n  if (!noAssert) {\n    var limit = Math.pow(2, 8 * byteLength - 1);\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit);\n  }\n\n  var i = byteLength - 1;\n  var mul = 1;\n  var sub = 0;\n  this[offset + i] = value & 0xFF;\n  while (--i >= 0 && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n      sub = 1;\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF;\n  }\n\n  return offset + byteLength\n};\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n  value = +value;\n  offset = offset | 0;\n  if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80);\n  if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value);\n  if (value < 0) value = 0xff + value + 1;\n  this[offset] = (value & 0xff);\n  return offset + 1\n};\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n  value = +value;\n  offset = offset | 0;\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000);\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value & 0xff);\n    this[offset + 1] = (value >>> 8);\n  } else {\n    objectWriteUInt16(this, value, offset, true);\n  }\n  return offset + 2\n};\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n  value = +value;\n  offset = offset | 0;\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000);\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 8);\n    this[offset + 1] = (value & 0xff);\n  } else {\n    objectWriteUInt16(this, value, offset, false);\n  }\n  return offset + 2\n};\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n  value = +value;\n  offset = offset | 0;\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000);\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value & 0xff);\n    this[offset + 1] = (value >>> 8);\n    this[offset + 2] = (value >>> 16);\n    this[offset + 3] = (value >>> 24);\n  } else {\n    objectWriteUInt32(this, value, offset, true);\n  }\n  return offset + 4\n};\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n  value = +value;\n  offset = offset | 0;\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000);\n  if (value < 0) value = 0xffffffff + value + 1;\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 24);\n    this[offset + 1] = (value >>> 16);\n    this[offset + 2] = (value >>> 8);\n    this[offset + 3] = (value & 0xff);\n  } else {\n    objectWriteUInt32(this, value, offset, false);\n  }\n  return offset + 4\n};\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n  if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 4);\n  }\n  write(buf, value, offset, littleEndian, 23, 4);\n  return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, true, noAssert)\n};\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, false, noAssert)\n};\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 8);\n  }\n  write(buf, value, offset, littleEndian, 52, 8);\n  return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, true, noAssert)\n};\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, false, noAssert)\n};\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n  if (!start) start = 0;\n  if (!end && end !== 0) end = this.length;\n  if (targetStart >= target.length) targetStart = target.length;\n  if (!targetStart) targetStart = 0;\n  if (end > 0 && end < start) end = start;\n\n  // Copy 0 bytes; we're done\n  if (end === start) return 0\n  if (target.length === 0 || this.length === 0) return 0\n\n  // Fatal error conditions\n  if (targetStart < 0) {\n    throw new RangeError('targetStart out of bounds')\n  }\n  if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n  if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n  // Are we oob?\n  if (end > this.length) end = this.length;\n  if (target.length - targetStart < end - start) {\n    end = target.length - targetStart + start;\n  }\n\n  var len = end - start;\n  var i;\n\n  if (this === target && start < targetStart && targetStart < end) {\n    // descending copy from end\n    for (i = len - 1; i >= 0; --i) {\n      target[i + targetStart] = this[i + start];\n    }\n  } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n    // ascending copy from start\n    for (i = 0; i < len; ++i) {\n      target[i + targetStart] = this[i + start];\n    }\n  } else {\n    Uint8Array.prototype.set.call(\n      target,\n      this.subarray(start, start + len),\n      targetStart\n    );\n  }\n\n  return len\n};\n\n// Usage:\n//    buffer.fill(number[, offset[, end]])\n//    buffer.fill(buffer[, offset[, end]])\n//    buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n  // Handle string cases:\n  if (typeof val === 'string') {\n    if (typeof start === 'string') {\n      encoding = start;\n      start = 0;\n      end = this.length;\n    } else if (typeof end === 'string') {\n      encoding = end;\n      end = this.length;\n    }\n    if (val.length === 1) {\n      var code = val.charCodeAt(0);\n      if (code < 256) {\n        val = code;\n      }\n    }\n    if (encoding !== undefined && typeof encoding !== 'string') {\n      throw new TypeError('encoding must be a string')\n    }\n    if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n      throw new TypeError('Unknown encoding: ' + encoding)\n    }\n  } else if (typeof val === 'number') {\n    val = val & 255;\n  }\n\n  // Invalid ranges are not set to a default, so can range check early.\n  if (start < 0 || this.length < start || this.length < end) {\n    throw new RangeError('Out of range index')\n  }\n\n  if (end <= start) {\n    return this\n  }\n\n  start = start >>> 0;\n  end = end === undefined ? this.length : end >>> 0;\n\n  if (!val) val = 0;\n\n  var i;\n  if (typeof val === 'number') {\n    for (i = start; i < end; ++i) {\n      this[i] = val;\n    }\n  } else {\n    var bytes = internalIsBuffer(val)\n      ? val\n      : utf8ToBytes(new Buffer(val, encoding).toString());\n    var len = bytes.length;\n    for (i = 0; i < end - start; ++i) {\n      this[i + start] = bytes[i % len];\n    }\n  }\n\n  return this\n};\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g;\n\nfunction base64clean (str) {\n  // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n  str = stringtrim(str).replace(INVALID_BASE64_RE, '');\n  // Node converts strings with length < 2 to ''\n  if (str.length < 2) return ''\n  // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n  while (str.length % 4 !== 0) {\n    str = str + '=';\n  }\n  return str\n}\n\nfunction stringtrim (str) {\n  if (str.trim) return str.trim()\n  return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n  if (n < 16) return '0' + n.toString(16)\n  return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n  units = units || Infinity;\n  var codePoint;\n  var length = string.length;\n  var leadSurrogate = null;\n  var bytes = [];\n\n  for (var i = 0; i < length; ++i) {\n    codePoint = string.charCodeAt(i);\n\n    // is surrogate component\n    if (codePoint > 0xD7FF && codePoint < 0xE000) {\n      // last char was a lead\n      if (!leadSurrogate) {\n        // no lead yet\n        if (codePoint > 0xDBFF) {\n          // unexpected trail\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);\n          continue\n        } else if (i + 1 === length) {\n          // unpaired lead\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);\n          continue\n        }\n\n        // valid lead\n        leadSurrogate = codePoint;\n\n        continue\n      }\n\n      // 2 leads in a row\n      if (codePoint < 0xDC00) {\n        if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);\n        leadSurrogate = codePoint;\n        continue\n      }\n\n      // valid surrogate pair\n      codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000;\n    } else if (leadSurrogate) {\n      // valid bmp char, but last char was a lead\n      if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);\n    }\n\n    leadSurrogate = null;\n\n    // encode utf8\n    if (codePoint < 0x80) {\n      if ((units -= 1) < 0) break\n      bytes.push(codePoint);\n    } else if (codePoint < 0x800) {\n      if ((units -= 2) < 0) break\n      bytes.push(\n        codePoint >> 0x6 | 0xC0,\n        codePoint & 0x3F | 0x80\n      );\n    } else if (codePoint < 0x10000) {\n      if ((units -= 3) < 0) break\n      bytes.push(\n        codePoint >> 0xC | 0xE0,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      );\n    } else if (codePoint < 0x110000) {\n      if ((units -= 4) < 0) break\n      bytes.push(\n        codePoint >> 0x12 | 0xF0,\n        codePoint >> 0xC & 0x3F | 0x80,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      );\n    } else {\n      throw new Error('Invalid code point')\n    }\n  }\n\n  return bytes\n}\n\nfunction asciiToBytes (str) {\n  var byteArray = [];\n  for (var i = 0; i < str.length; ++i) {\n    // Node's code seems to be doing this and not & 0x7F..\n    byteArray.push(str.charCodeAt(i) & 0xFF);\n  }\n  return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n  var c, hi, lo;\n  var byteArray = [];\n  for (var i = 0; i < str.length; ++i) {\n    if ((units -= 2) < 0) break\n\n    c = str.charCodeAt(i);\n    hi = c >> 8;\n    lo = c % 256;\n    byteArray.push(lo);\n    byteArray.push(hi);\n  }\n\n  return byteArray\n}\n\n\nfunction base64ToBytes (str) {\n  return toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n  for (var i = 0; i < length; ++i) {\n    if ((i + offset >= dst.length) || (i >= src.length)) break\n    dst[i + offset] = src[i];\n  }\n  return i\n}\n\nfunction isnan (val) {\n  return val !== val // eslint-disable-line no-self-compare\n}\n\n\n// the following is from is-buffer, also by Feross Aboukhadijeh and with same lisence\n// The _isBuffer check is for Safari 5-7 support, because it's missing\n// Object.prototype.constructor. Remove this eventually\nfunction isBuffer$1(obj) {\n  return obj != null && (!!obj._isBuffer || isFastBuffer(obj) || isSlowBuffer(obj))\n}\n\nfunction isFastBuffer (obj) {\n  return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)\n}\n\n// For Node v0.10 support. Remove this eventually.\nfunction isSlowBuffer (obj) {\n  return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isFastBuffer(obj.slice(0, 0))\n}\n\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\nfunction encode$1(decoded) {\n    var sourceFileIndex = 0; // second field\n    var sourceCodeLine = 0; // third field\n    var sourceCodeColumn = 0; // fourth field\n    var nameIndex = 0; // fifth field\n    var mappings = '';\n    for (var i = 0; i < decoded.length; i++) {\n        var line = decoded[i];\n        if (i > 0)\n            mappings += ';';\n        if (line.length === 0)\n            continue;\n        var generatedCodeColumn = 0; // first field\n        var lineMappings = [];\n        for (var _i = 0, line_1 = line; _i < line_1.length; _i++) {\n            var segment = line_1[_i];\n            var segmentMappings = encodeInteger(segment[0] - generatedCodeColumn);\n            generatedCodeColumn = segment[0];\n            if (segment.length > 1) {\n                segmentMappings +=\n                    encodeInteger(segment[1] - sourceFileIndex) +\n                        encodeInteger(segment[2] - sourceCodeLine) +\n                        encodeInteger(segment[3] - sourceCodeColumn);\n                sourceFileIndex = segment[1];\n                sourceCodeLine = segment[2];\n                sourceCodeColumn = segment[3];\n            }\n            if (segment.length === 5) {\n                segmentMappings += encodeInteger(segment[4] - nameIndex);\n                nameIndex = segment[4];\n            }\n            lineMappings.push(segmentMappings);\n        }\n        mappings += lineMappings.join(',');\n    }\n    return mappings;\n}\nfunction encodeInteger(num) {\n    var result = '';\n    num = num < 0 ? (-num << 1) | 1 : num << 1;\n    do {\n        var clamped = num & 31;\n        num >>>= 5;\n        if (num > 0) {\n            clamped |= 32;\n        }\n        result += chars[clamped];\n    } while (num > 0);\n    return result;\n}\n\nvar BitSet = function BitSet(arg) {\n\tthis.bits = arg instanceof BitSet ? arg.bits.slice() : [];\n};\n\nBitSet.prototype.add = function add (n) {\n\tthis.bits[n >> 5] |= 1 << (n & 31);\n};\n\nBitSet.prototype.has = function has (n) {\n\treturn !!(this.bits[n >> 5] & (1 << (n & 31)));\n};\n\nvar Chunk = function Chunk(start, end, content) {\n\tthis.start = start;\n\tthis.end = end;\n\tthis.original = content;\n\n\tthis.intro = '';\n\tthis.outro = '';\n\n\tthis.content = content;\n\tthis.storeName = false;\n\tthis.edited = false;\n\n\t// we make these non-enumerable, for sanity while debugging\n\tObject.defineProperties(this, {\n\t\tprevious: { writable: true, value: null },\n\t\tnext:     { writable: true, value: null }\n\t});\n};\n\nChunk.prototype.appendLeft = function appendLeft (content) {\n\tthis.outro += content;\n};\n\nChunk.prototype.appendRight = function appendRight (content) {\n\tthis.intro = this.intro + content;\n};\n\nChunk.prototype.clone = function clone () {\n\tvar chunk = new Chunk(this.start, this.end, this.original);\n\n\tchunk.intro = this.intro;\n\tchunk.outro = this.outro;\n\tchunk.content = this.content;\n\tchunk.storeName = this.storeName;\n\tchunk.edited = this.edited;\n\n\treturn chunk;\n};\n\nChunk.prototype.contains = function contains (index) {\n\treturn this.start < index && index < this.end;\n};\n\nChunk.prototype.eachNext = function eachNext (fn) {\n\tvar chunk = this;\n\twhile (chunk) {\n\t\tfn(chunk);\n\t\tchunk = chunk.next;\n\t}\n};\n\nChunk.prototype.eachPrevious = function eachPrevious (fn) {\n\tvar chunk = this;\n\twhile (chunk) {\n\t\tfn(chunk);\n\t\tchunk = chunk.previous;\n\t}\n};\n\nChunk.prototype.edit = function edit (content, storeName, contentOnly) {\n\tthis.content = content;\n\tif (!contentOnly) {\n\t\tthis.intro = '';\n\t\tthis.outro = '';\n\t}\n\tthis.storeName = storeName;\n\n\tthis.edited = true;\n\n\treturn this;\n};\n\nChunk.prototype.prependLeft = function prependLeft (content) {\n\tthis.outro = content + this.outro;\n};\n\nChunk.prototype.prependRight = function prependRight (content) {\n\tthis.intro = content + this.intro;\n};\n\nChunk.prototype.split = function split (index) {\n\tvar sliceIndex = index - this.start;\n\n\tvar originalBefore = this.original.slice(0, sliceIndex);\n\tvar originalAfter = this.original.slice(sliceIndex);\n\n\tthis.original = originalBefore;\n\n\tvar newChunk = new Chunk(index, this.end, originalAfter);\n\tnewChunk.outro = this.outro;\n\tthis.outro = '';\n\n\tthis.end = index;\n\n\tif (this.edited) {\n\t\t// TODO is this block necessary?...\n\t\tnewChunk.edit('', false);\n\t\tthis.content = '';\n\t} else {\n\t\tthis.content = originalBefore;\n\t}\n\n\tnewChunk.next = this.next;\n\tif (newChunk.next) { newChunk.next.previous = newChunk; }\n\tnewChunk.previous = this;\n\tthis.next = newChunk;\n\n\treturn newChunk;\n};\n\nChunk.prototype.toString = function toString () {\n\treturn this.intro + this.content + this.outro;\n};\n\nChunk.prototype.trimEnd = function trimEnd (rx) {\n\tthis.outro = this.outro.replace(rx, '');\n\tif (this.outro.length) { return true; }\n\n\tvar trimmed = this.content.replace(rx, '');\n\n\tif (trimmed.length) {\n\t\tif (trimmed !== this.content) {\n\t\t\tthis.split(this.start + trimmed.length).edit('', undefined, true);\n\t\t}\n\t\treturn true;\n\n\t} else {\n\t\tthis.edit('', undefined, true);\n\n\t\tthis.intro = this.intro.replace(rx, '');\n\t\tif (this.intro.length) { return true; }\n\t}\n};\n\nChunk.prototype.trimStart = function trimStart (rx) {\n\tthis.intro = this.intro.replace(rx, '');\n\tif (this.intro.length) { return true; }\n\n\tvar trimmed = this.content.replace(rx, '');\n\n\tif (trimmed.length) {\n\t\tif (trimmed !== this.content) {\n\t\t\tthis.split(this.end - trimmed.length);\n\t\t\tthis.edit('', undefined, true);\n\t\t}\n\t\treturn true;\n\n\t} else {\n\t\tthis.edit('', undefined, true);\n\n\t\tthis.outro = this.outro.replace(rx, '');\n\t\tif (this.outro.length) { return true; }\n\t}\n};\n\nvar btoa = function () {\n\tthrow new Error('Unsupported environment: `window.btoa` or `Buffer` should be supported.');\n};\nif (typeof window !== 'undefined' && typeof window.btoa === 'function') {\n\tbtoa = function (str) { return window.btoa(unescape(encodeURIComponent(str))); };\n} else if (typeof Buffer === 'function') {\n\tbtoa = function (str) { return Buffer.from(str, 'utf-8').toString('base64'); };\n}\n\nvar SourceMap = function SourceMap(properties) {\n\tthis.version = 3;\n\tthis.file = properties.file;\n\tthis.sources = properties.sources;\n\tthis.sourcesContent = properties.sourcesContent;\n\tthis.names = properties.names;\n\tthis.mappings = encode$1(properties.mappings);\n};\n\nSourceMap.prototype.toString = function toString () {\n\treturn JSON.stringify(this);\n};\n\nSourceMap.prototype.toUrl = function toUrl () {\n\treturn 'data:application/json;charset=utf-8;base64,' + btoa(this.toString());\n};\n\nfunction guessIndent(code) {\n\tvar lines = code.split('\\n');\n\n\tvar tabbed = lines.filter(function (line) { return /^\\t+/.test(line); });\n\tvar spaced = lines.filter(function (line) { return /^ {2,}/.test(line); });\n\n\tif (tabbed.length === 0 && spaced.length === 0) {\n\t\treturn null;\n\t}\n\n\t// More lines tabbed than spaced? Assume tabs, and\n\t// default to tabs in the case of a tie (or nothing\n\t// to go on)\n\tif (tabbed.length >= spaced.length) {\n\t\treturn '\\t';\n\t}\n\n\t// Otherwise, we need to guess the multiple\n\tvar min = spaced.reduce(function (previous, current) {\n\t\tvar numSpaces = /^ +/.exec(current)[0].length;\n\t\treturn Math.min(numSpaces, previous);\n\t}, Infinity);\n\n\treturn new Array(min + 1).join(' ');\n}\n\nfunction getRelativePath(from, to) {\n\tvar fromParts = from.split(/[/\\\\]/);\n\tvar toParts = to.split(/[/\\\\]/);\n\n\tfromParts.pop(); // get dirname\n\n\twhile (fromParts[0] === toParts[0]) {\n\t\tfromParts.shift();\n\t\ttoParts.shift();\n\t}\n\n\tif (fromParts.length) {\n\t\tvar i = fromParts.length;\n\t\twhile (i--) { fromParts[i] = '..'; }\n\t}\n\n\treturn fromParts.concat(toParts).join('/');\n}\n\nvar toString = Object.prototype.toString;\n\nfunction isObject$1(thing) {\n\treturn toString.call(thing) === '[object Object]';\n}\n\nfunction getLocator(source) {\n\tvar originalLines = source.split('\\n');\n\tvar lineOffsets = [];\n\n\tfor (var i = 0, pos = 0; i < originalLines.length; i++) {\n\t\tlineOffsets.push(pos);\n\t\tpos += originalLines[i].length + 1;\n\t}\n\n\treturn function locate(index) {\n\t\tvar i = 0;\n\t\tvar j = lineOffsets.length;\n\t\twhile (i < j) {\n\t\t\tvar m = (i + j) >> 1;\n\t\t\tif (index < lineOffsets[m]) {\n\t\t\t\tj = m;\n\t\t\t} else {\n\t\t\t\ti = m + 1;\n\t\t\t}\n\t\t}\n\t\tvar line = i - 1;\n\t\tvar column = index - lineOffsets[line];\n\t\treturn { line: line, column: column };\n\t};\n}\n\nvar Mappings = function Mappings(hires) {\n\tthis.hires = hires;\n\tthis.generatedCodeLine = 0;\n\tthis.generatedCodeColumn = 0;\n\tthis.raw = [];\n\tthis.rawSegments = this.raw[this.generatedCodeLine] = [];\n\tthis.pending = null;\n};\n\nMappings.prototype.addEdit = function addEdit (sourceIndex, content, loc, nameIndex) {\n\tif (content.length) {\n\t\tvar segment = [this.generatedCodeColumn, sourceIndex, loc.line, loc.column];\n\t\tif (nameIndex >= 0) {\n\t\t\tsegment.push(nameIndex);\n\t\t}\n\t\tthis.rawSegments.push(segment);\n\t} else if (this.pending) {\n\t\tthis.rawSegments.push(this.pending);\n\t}\n\n\tthis.advance(content);\n\tthis.pending = null;\n};\n\nMappings.prototype.addUneditedChunk = function addUneditedChunk (sourceIndex, chunk, original, loc, sourcemapLocations) {\n\tvar originalCharIndex = chunk.start;\n\tvar first = true;\n\n\twhile (originalCharIndex < chunk.end) {\n\t\tif (this.hires || first || sourcemapLocations.has(originalCharIndex)) {\n\t\t\tthis.rawSegments.push([this.generatedCodeColumn, sourceIndex, loc.line, loc.column]);\n\t\t}\n\n\t\tif (original[originalCharIndex] === '\\n') {\n\t\t\tloc.line += 1;\n\t\t\tloc.column = 0;\n\t\t\tthis.generatedCodeLine += 1;\n\t\t\tthis.raw[this.generatedCodeLine] = this.rawSegments = [];\n\t\t\tthis.generatedCodeColumn = 0;\n\t\t\tfirst = true;\n\t\t} else {\n\t\t\tloc.column += 1;\n\t\t\tthis.generatedCodeColumn += 1;\n\t\t\tfirst = false;\n\t\t}\n\n\t\toriginalCharIndex += 1;\n\t}\n\n\tthis.pending = null;\n};\n\nMappings.prototype.advance = function advance (str) {\n\tif (!str) { return; }\n\n\tvar lines = str.split('\\n');\n\n\tif (lines.length > 1) {\n\t\tfor (var i = 0; i < lines.length - 1; i++) {\n\t\t\tthis.generatedCodeLine++;\n\t\t\tthis.raw[this.generatedCodeLine] = this.rawSegments = [];\n\t\t}\n\t\tthis.generatedCodeColumn = 0;\n\t}\n\n\tthis.generatedCodeColumn += lines[lines.length - 1].length;\n};\n\nvar n = '\\n';\n\nvar warned = {\n\tinsertLeft: false,\n\tinsertRight: false,\n\tstoreName: false\n};\n\nvar MagicString = function MagicString(string, options) {\n\tif ( options === void 0 ) options = {};\n\n\tvar chunk = new Chunk(0, string.length, string);\n\n\tObject.defineProperties(this, {\n\t\toriginal:              { writable: true, value: string },\n\t\toutro:                 { writable: true, value: '' },\n\t\tintro:                 { writable: true, value: '' },\n\t\tfirstChunk:            { writable: true, value: chunk },\n\t\tlastChunk:             { writable: true, value: chunk },\n\t\tlastSearchedChunk:     { writable: true, value: chunk },\n\t\tbyStart:               { writable: true, value: {} },\n\t\tbyEnd:                 { writable: true, value: {} },\n\t\tfilename:              { writable: true, value: options.filename },\n\t\tindentExclusionRanges: { writable: true, value: options.indentExclusionRanges },\n\t\tsourcemapLocations:    { writable: true, value: new BitSet() },\n\t\tstoredNames:           { writable: true, value: {} },\n\t\tindentStr:             { writable: true, value: guessIndent(string) }\n\t});\n\n\tthis.byStart[0] = chunk;\n\tthis.byEnd[string.length] = chunk;\n};\n\nMagicString.prototype.addSourcemapLocation = function addSourcemapLocation (char) {\n\tthis.sourcemapLocations.add(char);\n};\n\nMagicString.prototype.append = function append (content) {\n\tif (typeof content !== 'string') { throw new TypeError('outro content must be a string'); }\n\n\tthis.outro += content;\n\treturn this;\n};\n\nMagicString.prototype.appendLeft = function appendLeft (index, content) {\n\tif (typeof content !== 'string') { throw new TypeError('inserted content must be a string'); }\n\n\tthis._split(index);\n\n\tvar chunk = this.byEnd[index];\n\n\tif (chunk) {\n\t\tchunk.appendLeft(content);\n\t} else {\n\t\tthis.intro += content;\n\t}\n\treturn this;\n};\n\nMagicString.prototype.appendRight = function appendRight (index, content) {\n\tif (typeof content !== 'string') { throw new TypeError('inserted content must be a string'); }\n\n\tthis._split(index);\n\n\tvar chunk = this.byStart[index];\n\n\tif (chunk) {\n\t\tchunk.appendRight(content);\n\t} else {\n\t\tthis.outro += content;\n\t}\n\treturn this;\n};\n\nMagicString.prototype.clone = function clone () {\n\tvar cloned = new MagicString(this.original, { filename: this.filename });\n\n\tvar originalChunk = this.firstChunk;\n\tvar clonedChunk = (cloned.firstChunk = cloned.lastSearchedChunk = originalChunk.clone());\n\n\twhile (originalChunk) {\n\t\tcloned.byStart[clonedChunk.start] = clonedChunk;\n\t\tcloned.byEnd[clonedChunk.end] = clonedChunk;\n\n\t\tvar nextOriginalChunk = originalChunk.next;\n\t\tvar nextClonedChunk = nextOriginalChunk && nextOriginalChunk.clone();\n\n\t\tif (nextClonedChunk) {\n\t\t\tclonedChunk.next = nextClonedChunk;\n\t\t\tnextClonedChunk.previous = clonedChunk;\n\n\t\t\tclonedChunk = nextClonedChunk;\n\t\t}\n\n\t\toriginalChunk = nextOriginalChunk;\n\t}\n\n\tcloned.lastChunk = clonedChunk;\n\n\tif (this.indentExclusionRanges) {\n\t\tcloned.indentExclusionRanges = this.indentExclusionRanges.slice();\n\t}\n\n\tcloned.sourcemapLocations = new BitSet(this.sourcemapLocations);\n\n\tcloned.intro = this.intro;\n\tcloned.outro = this.outro;\n\n\treturn cloned;\n};\n\nMagicString.prototype.generateDecodedMap = function generateDecodedMap (options) {\n\t\tvar this$1$1 = this;\n\n\toptions = options || {};\n\n\tvar sourceIndex = 0;\n\tvar names = Object.keys(this.storedNames);\n\tvar mappings = new Mappings(options.hires);\n\n\tvar locate = getLocator(this.original);\n\n\tif (this.intro) {\n\t\tmappings.advance(this.intro);\n\t}\n\n\tthis.firstChunk.eachNext(function (chunk) {\n\t\tvar loc = locate(chunk.start);\n\n\t\tif (chunk.intro.length) { mappings.advance(chunk.intro); }\n\n\t\tif (chunk.edited) {\n\t\t\tmappings.addEdit(\n\t\t\t\tsourceIndex,\n\t\t\t\tchunk.content,\n\t\t\t\tloc,\n\t\t\t\tchunk.storeName ? names.indexOf(chunk.original) : -1\n\t\t\t);\n\t\t} else {\n\t\t\tmappings.addUneditedChunk(sourceIndex, chunk, this$1$1.original, loc, this$1$1.sourcemapLocations);\n\t\t}\n\n\t\tif (chunk.outro.length) { mappings.advance(chunk.outro); }\n\t});\n\n\treturn {\n\t\tfile: options.file ? options.file.split(/[/\\\\]/).pop() : null,\n\t\tsources: [options.source ? getRelativePath(options.file || '', options.source) : null],\n\t\tsourcesContent: options.includeContent ? [this.original] : [null],\n\t\tnames: names,\n\t\tmappings: mappings.raw\n\t};\n};\n\nMagicString.prototype.generateMap = function generateMap (options) {\n\treturn new SourceMap(this.generateDecodedMap(options));\n};\n\nMagicString.prototype.getIndentString = function getIndentString () {\n\treturn this.indentStr === null ? '\\t' : this.indentStr;\n};\n\nMagicString.prototype.indent = function indent (indentStr, options) {\n\tvar pattern = /^[^\\r\\n]/gm;\n\n\tif (isObject$1(indentStr)) {\n\t\toptions = indentStr;\n\t\tindentStr = undefined;\n\t}\n\n\tindentStr = indentStr !== undefined ? indentStr : this.indentStr || '\\t';\n\n\tif (indentStr === '') { return this; } // noop\n\n\toptions = options || {};\n\n\t// Process exclusion ranges\n\tvar isExcluded = {};\n\n\tif (options.exclude) {\n\t\tvar exclusions =\n\t\t\ttypeof options.exclude[0] === 'number' ? [options.exclude] : options.exclude;\n\t\texclusions.forEach(function (exclusion) {\n\t\t\tfor (var i = exclusion[0]; i < exclusion[1]; i += 1) {\n\t\t\t\tisExcluded[i] = true;\n\t\t\t}\n\t\t});\n\t}\n\n\tvar shouldIndentNextCharacter = options.indentStart !== false;\n\tvar replacer = function (match) {\n\t\tif (shouldIndentNextCharacter) { return (\"\" + indentStr + match); }\n\t\tshouldIndentNextCharacter = true;\n\t\treturn match;\n\t};\n\n\tthis.intro = this.intro.replace(pattern, replacer);\n\n\tvar charIndex = 0;\n\tvar chunk = this.firstChunk;\n\n\twhile (chunk) {\n\t\tvar end = chunk.end;\n\n\t\tif (chunk.edited) {\n\t\t\tif (!isExcluded[charIndex]) {\n\t\t\t\tchunk.content = chunk.content.replace(pattern, replacer);\n\n\t\t\t\tif (chunk.content.length) {\n\t\t\t\t\tshouldIndentNextCharacter = chunk.content[chunk.content.length - 1] === '\\n';\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tcharIndex = chunk.start;\n\n\t\t\twhile (charIndex < end) {\n\t\t\t\tif (!isExcluded[charIndex]) {\n\t\t\t\t\tvar char = this.original[charIndex];\n\n\t\t\t\t\tif (char === '\\n') {\n\t\t\t\t\t\tshouldIndentNextCharacter = true;\n\t\t\t\t\t} else if (char !== '\\r' && shouldIndentNextCharacter) {\n\t\t\t\t\t\tshouldIndentNextCharacter = false;\n\n\t\t\t\t\t\tif (charIndex === chunk.start) {\n\t\t\t\t\t\t\tchunk.prependRight(indentStr);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis._splitChunk(chunk, charIndex);\n\t\t\t\t\t\t\tchunk = chunk.next;\n\t\t\t\t\t\t\tchunk.prependRight(indentStr);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcharIndex += 1;\n\t\t\t}\n\t\t}\n\n\t\tcharIndex = chunk.end;\n\t\tchunk = chunk.next;\n\t}\n\n\tthis.outro = this.outro.replace(pattern, replacer);\n\n\treturn this;\n};\n\nMagicString.prototype.insert = function insert () {\n\tthrow new Error('magicString.insert(...) is deprecated. Use prependRight(...) or appendLeft(...)');\n};\n\nMagicString.prototype.insertLeft = function insertLeft (index, content) {\n\tif (!warned.insertLeft) {\n\t\tconsole.warn('magicString.insertLeft(...) is deprecated. Use magicString.appendLeft(...) instead'); // eslint-disable-line no-console\n\t\twarned.insertLeft = true;\n\t}\n\n\treturn this.appendLeft(index, content);\n};\n\nMagicString.prototype.insertRight = function insertRight (index, content) {\n\tif (!warned.insertRight) {\n\t\tconsole.warn('magicString.insertRight(...) is deprecated. Use magicString.prependRight(...) instead'); // eslint-disable-line no-console\n\t\twarned.insertRight = true;\n\t}\n\n\treturn this.prependRight(index, content);\n};\n\nMagicString.prototype.move = function move (start, end, index) {\n\tif (index >= start && index <= end) { throw new Error('Cannot move a selection inside itself'); }\n\n\tthis._split(start);\n\tthis._split(end);\n\tthis._split(index);\n\n\tvar first = this.byStart[start];\n\tvar last = this.byEnd[end];\n\n\tvar oldLeft = first.previous;\n\tvar oldRight = last.next;\n\n\tvar newRight = this.byStart[index];\n\tif (!newRight && last === this.lastChunk) { return this; }\n\tvar newLeft = newRight ? newRight.previous : this.lastChunk;\n\n\tif (oldLeft) { oldLeft.next = oldRight; }\n\tif (oldRight) { oldRight.previous = oldLeft; }\n\n\tif (newLeft) { newLeft.next = first; }\n\tif (newRight) { newRight.previous = last; }\n\n\tif (!first.previous) { this.firstChunk = last.next; }\n\tif (!last.next) {\n\t\tthis.lastChunk = first.previous;\n\t\tthis.lastChunk.next = null;\n\t}\n\n\tfirst.previous = newLeft;\n\tlast.next = newRight || null;\n\n\tif (!newLeft) { this.firstChunk = first; }\n\tif (!newRight) { this.lastChunk = last; }\n\treturn this;\n};\n\nMagicString.prototype.overwrite = function overwrite (start, end, content, options) {\n\tif (typeof content !== 'string') { throw new TypeError('replacement content must be a string'); }\n\n\twhile (start < 0) { start += this.original.length; }\n\twhile (end < 0) { end += this.original.length; }\n\n\tif (end > this.original.length) { throw new Error('end is out of bounds'); }\n\tif (start === end)\n\t\t{ throw new Error('Cannot overwrite a zero-length range – use appendLeft or prependRight instead'); }\n\n\tthis._split(start);\n\tthis._split(end);\n\n\tif (options === true) {\n\t\tif (!warned.storeName) {\n\t\t\tconsole.warn('The final argument to magicString.overwrite(...) should be an options object. See https://github.com/rich-harris/magic-string'); // eslint-disable-line no-console\n\t\t\twarned.storeName = true;\n\t\t}\n\n\t\toptions = { storeName: true };\n\t}\n\tvar storeName = options !== undefined ? options.storeName : false;\n\tvar contentOnly = options !== undefined ? options.contentOnly : false;\n\n\tif (storeName) {\n\t\tvar original = this.original.slice(start, end);\n\t\tthis.storedNames[original] = true;\n\t}\n\n\tvar first = this.byStart[start];\n\tvar last = this.byEnd[end];\n\n\tif (first) {\n\t\tif (end > first.end && first.next !== this.byStart[first.end]) {\n\t\t\tthrow new Error('Cannot overwrite across a split point');\n\t\t}\n\n\t\tfirst.edit(content, storeName, contentOnly);\n\n\t\tif (first !== last) {\n\t\t\tvar chunk = first.next;\n\t\t\twhile (chunk !== last) {\n\t\t\t\tchunk.edit('', false);\n\t\t\t\tchunk = chunk.next;\n\t\t\t}\n\n\t\t\tchunk.edit('', false);\n\t\t}\n\t} else {\n\t\t// must be inserting at the end\n\t\tvar newChunk = new Chunk(start, end, '').edit(content, storeName);\n\n\t\t// TODO last chunk in the array may not be the last chunk, if it's moved...\n\t\tlast.next = newChunk;\n\t\tnewChunk.previous = last;\n\t}\n\treturn this;\n};\n\nMagicString.prototype.prepend = function prepend (content) {\n\tif (typeof content !== 'string') { throw new TypeError('outro content must be a string'); }\n\n\tthis.intro = content + this.intro;\n\treturn this;\n};\n\nMagicString.prototype.prependLeft = function prependLeft (index, content) {\n\tif (typeof content !== 'string') { throw new TypeError('inserted content must be a string'); }\n\n\tthis._split(index);\n\n\tvar chunk = this.byEnd[index];\n\n\tif (chunk) {\n\t\tchunk.prependLeft(content);\n\t} else {\n\t\tthis.intro = content + this.intro;\n\t}\n\treturn this;\n};\n\nMagicString.prototype.prependRight = function prependRight (index, content) {\n\tif (typeof content !== 'string') { throw new TypeError('inserted content must be a string'); }\n\n\tthis._split(index);\n\n\tvar chunk = this.byStart[index];\n\n\tif (chunk) {\n\t\tchunk.prependRight(content);\n\t} else {\n\t\tthis.outro = content + this.outro;\n\t}\n\treturn this;\n};\n\nMagicString.prototype.remove = function remove (start, end) {\n\twhile (start < 0) { start += this.original.length; }\n\twhile (end < 0) { end += this.original.length; }\n\n\tif (start === end) { return this; }\n\n\tif (start < 0 || end > this.original.length) { throw new Error('Character is out of bounds'); }\n\tif (start > end) { throw new Error('end must be greater than start'); }\n\n\tthis._split(start);\n\tthis._split(end);\n\n\tvar chunk = this.byStart[start];\n\n\twhile (chunk) {\n\t\tchunk.intro = '';\n\t\tchunk.outro = '';\n\t\tchunk.edit('');\n\n\t\tchunk = end > chunk.end ? this.byStart[chunk.end] : null;\n\t}\n\treturn this;\n};\n\nMagicString.prototype.lastChar = function lastChar () {\n\tif (this.outro.length)\n\t\t{ return this.outro[this.outro.length - 1]; }\n\tvar chunk = this.lastChunk;\n\tdo {\n\t\tif (chunk.outro.length)\n\t\t\t{ return chunk.outro[chunk.outro.length - 1]; }\n\t\tif (chunk.content.length)\n\t\t\t{ return chunk.content[chunk.content.length - 1]; }\n\t\tif (chunk.intro.length)\n\t\t\t{ return chunk.intro[chunk.intro.length - 1]; }\n\t} while (chunk = chunk.previous);\n\tif (this.intro.length)\n\t\t{ return this.intro[this.intro.length - 1]; }\n\treturn '';\n};\n\nMagicString.prototype.lastLine = function lastLine () {\n\tvar lineIndex = this.outro.lastIndexOf(n);\n\tif (lineIndex !== -1)\n\t\t{ return this.outro.substr(lineIndex + 1); }\n\tvar lineStr = this.outro;\n\tvar chunk = this.lastChunk;\n\tdo {\n\t\tif (chunk.outro.length > 0) {\n\t\t\tlineIndex = chunk.outro.lastIndexOf(n);\n\t\t\tif (lineIndex !== -1)\n\t\t\t\t{ return chunk.outro.substr(lineIndex + 1) + lineStr; }\n\t\t\tlineStr = chunk.outro + lineStr;\n\t\t}\n\n\t\tif (chunk.content.length > 0) {\n\t\t\tlineIndex = chunk.content.lastIndexOf(n);\n\t\t\tif (lineIndex !== -1)\n\t\t\t\t{ return chunk.content.substr(lineIndex + 1) + lineStr; }\n\t\t\tlineStr = chunk.content + lineStr;\n\t\t}\n\n\t\tif (chunk.intro.length > 0) {\n\t\t\tlineIndex = chunk.intro.lastIndexOf(n);\n\t\t\tif (lineIndex !== -1)\n\t\t\t\t{ return chunk.intro.substr(lineIndex + 1) + lineStr; }\n\t\t\tlineStr = chunk.intro + lineStr;\n\t\t}\n\t} while (chunk = chunk.previous);\n\tlineIndex = this.intro.lastIndexOf(n);\n\tif (lineIndex !== -1)\n\t\t{ return this.intro.substr(lineIndex + 1) + lineStr; }\n\treturn this.intro + lineStr;\n};\n\nMagicString.prototype.slice = function slice (start, end) {\n\t\tif ( start === void 0 ) start = 0;\n\t\tif ( end === void 0 ) end = this.original.length;\n\n\twhile (start < 0) { start += this.original.length; }\n\twhile (end < 0) { end += this.original.length; }\n\n\tvar result = '';\n\n\t// find start chunk\n\tvar chunk = this.firstChunk;\n\twhile (chunk && (chunk.start > start || chunk.end <= start)) {\n\t\t// found end chunk before start\n\t\tif (chunk.start < end && chunk.end >= end) {\n\t\t\treturn result;\n\t\t}\n\n\t\tchunk = chunk.next;\n\t}\n\n\tif (chunk && chunk.edited && chunk.start !== start)\n\t\t{ throw new Error((\"Cannot use replaced character \" + start + \" as slice start anchor.\")); }\n\n\tvar startChunk = chunk;\n\twhile (chunk) {\n\t\tif (chunk.intro && (startChunk !== chunk || chunk.start === start)) {\n\t\t\tresult += chunk.intro;\n\t\t}\n\n\t\tvar containsEnd = chunk.start < end && chunk.end >= end;\n\t\tif (containsEnd && chunk.edited && chunk.end !== end)\n\t\t\t{ throw new Error((\"Cannot use replaced character \" + end + \" as slice end anchor.\")); }\n\n\t\tvar sliceStart = startChunk === chunk ? start - chunk.start : 0;\n\t\tvar sliceEnd = containsEnd ? chunk.content.length + end - chunk.end : chunk.content.length;\n\n\t\tresult += chunk.content.slice(sliceStart, sliceEnd);\n\n\t\tif (chunk.outro && (!containsEnd || chunk.end === end)) {\n\t\t\tresult += chunk.outro;\n\t\t}\n\n\t\tif (containsEnd) {\n\t\t\tbreak;\n\t\t}\n\n\t\tchunk = chunk.next;\n\t}\n\n\treturn result;\n};\n\n// TODO deprecate this? not really very useful\nMagicString.prototype.snip = function snip (start, end) {\n\tvar clone = this.clone();\n\tclone.remove(0, start);\n\tclone.remove(end, clone.original.length);\n\n\treturn clone;\n};\n\nMagicString.prototype._split = function _split (index) {\n\tif (this.byStart[index] || this.byEnd[index]) { return; }\n\n\tvar chunk = this.lastSearchedChunk;\n\tvar searchForward = index > chunk.end;\n\n\twhile (chunk) {\n\t\tif (chunk.contains(index)) { return this._splitChunk(chunk, index); }\n\n\t\tchunk = searchForward ? this.byStart[chunk.end] : this.byEnd[chunk.start];\n\t}\n};\n\nMagicString.prototype._splitChunk = function _splitChunk (chunk, index) {\n\tif (chunk.edited && chunk.content.length) {\n\t\t// zero-length edited chunks are a special case (overlapping replacements)\n\t\tvar loc = getLocator(this.original)(index);\n\t\tthrow new Error(\n\t\t\t(\"Cannot split a chunk that has already been edited (\" + (loc.line) + \":\" + (loc.column) + \" – \\\"\" + (chunk.original) + \"\\\")\")\n\t\t);\n\t}\n\n\tvar newChunk = chunk.split(index);\n\n\tthis.byEnd[index] = chunk;\n\tthis.byStart[index] = newChunk;\n\tthis.byEnd[newChunk.end] = newChunk;\n\n\tif (chunk === this.lastChunk) { this.lastChunk = newChunk; }\n\n\tthis.lastSearchedChunk = chunk;\n\treturn true;\n};\n\nMagicString.prototype.toString = function toString () {\n\tvar str = this.intro;\n\n\tvar chunk = this.firstChunk;\n\twhile (chunk) {\n\t\tstr += chunk.toString();\n\t\tchunk = chunk.next;\n\t}\n\n\treturn str + this.outro;\n};\n\nMagicString.prototype.isEmpty = function isEmpty () {\n\tvar chunk = this.firstChunk;\n\tdo {\n\t\tif (chunk.intro.length && chunk.intro.trim() ||\n\t\t\t\tchunk.content.length && chunk.content.trim() ||\n\t\t\t\tchunk.outro.length && chunk.outro.trim())\n\t\t\t{ return false; }\n\t} while (chunk = chunk.next);\n\treturn true;\n};\n\nMagicString.prototype.length = function length () {\n\tvar chunk = this.firstChunk;\n\tvar length = 0;\n\tdo {\n\t\tlength += chunk.intro.length + chunk.content.length + chunk.outro.length;\n\t} while (chunk = chunk.next);\n\treturn length;\n};\n\nMagicString.prototype.trimLines = function trimLines () {\n\treturn this.trim('[\\\\r\\\\n]');\n};\n\nMagicString.prototype.trim = function trim (charType) {\n\treturn this.trimStart(charType).trimEnd(charType);\n};\n\nMagicString.prototype.trimEndAborted = function trimEndAborted (charType) {\n\tvar rx = new RegExp((charType || '\\\\s') + '+$');\n\n\tthis.outro = this.outro.replace(rx, '');\n\tif (this.outro.length) { return true; }\n\n\tvar chunk = this.lastChunk;\n\n\tdo {\n\t\tvar end = chunk.end;\n\t\tvar aborted = chunk.trimEnd(rx);\n\n\t\t// if chunk was trimmed, we have a new lastChunk\n\t\tif (chunk.end !== end) {\n\t\t\tif (this.lastChunk === chunk) {\n\t\t\t\tthis.lastChunk = chunk.next;\n\t\t\t}\n\n\t\t\tthis.byEnd[chunk.end] = chunk;\n\t\t\tthis.byStart[chunk.next.start] = chunk.next;\n\t\t\tthis.byEnd[chunk.next.end] = chunk.next;\n\t\t}\n\n\t\tif (aborted) { return true; }\n\t\tchunk = chunk.previous;\n\t} while (chunk);\n\n\treturn false;\n};\n\nMagicString.prototype.trimEnd = function trimEnd (charType) {\n\tthis.trimEndAborted(charType);\n\treturn this;\n};\nMagicString.prototype.trimStartAborted = function trimStartAborted (charType) {\n\tvar rx = new RegExp('^' + (charType || '\\\\s') + '+');\n\n\tthis.intro = this.intro.replace(rx, '');\n\tif (this.intro.length) { return true; }\n\n\tvar chunk = this.firstChunk;\n\n\tdo {\n\t\tvar end = chunk.end;\n\t\tvar aborted = chunk.trimStart(rx);\n\n\t\tif (chunk.end !== end) {\n\t\t\t// special case...\n\t\t\tif (chunk === this.lastChunk) { this.lastChunk = chunk.next; }\n\n\t\t\tthis.byEnd[chunk.end] = chunk;\n\t\t\tthis.byStart[chunk.next.start] = chunk.next;\n\t\t\tthis.byEnd[chunk.next.end] = chunk.next;\n\t\t}\n\n\t\tif (aborted) { return true; }\n\t\tchunk = chunk.next;\n\t} while (chunk);\n\n\treturn false;\n};\n\nMagicString.prototype.trimStart = function trimStart (charType) {\n\tthis.trimStartAborted(charType);\n\treturn this;\n};\n\nvar MagicString$1 = MagicString;\n\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// resolves . and .. elements in a path array with directory names there\n// must be no slashes, empty elements, or device names (c:\\) in the array\n// (so also no leading and trailing slashes - it does not distinguish\n// relative and absolute paths)\nfunction normalizeArray(parts, allowAboveRoot) {\n  // if the path tries to go above the root, `up` ends up > 0\n  var up = 0;\n  for (var i = parts.length - 1; i >= 0; i--) {\n    var last = parts[i];\n    if (last === '.') {\n      parts.splice(i, 1);\n    } else if (last === '..') {\n      parts.splice(i, 1);\n      up++;\n    } else if (up) {\n      parts.splice(i, 1);\n      up--;\n    }\n  }\n\n  // if the path is allowed to go above the root, restore leading ..s\n  if (allowAboveRoot) {\n    for (; up--; up) {\n      parts.unshift('..');\n    }\n  }\n\n  return parts;\n}\n\n// Split a filename into [root, dir, basename, ext], unix version\n// 'root' is just a slash, or nothing.\nvar splitPathRe =\n    /^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;\nvar splitPath = function(filename) {\n  return splitPathRe.exec(filename).slice(1);\n};\n\n// path.resolve([from ...], to)\n// posix version\nfunction resolve$2() {\n  var resolvedPath = '',\n      resolvedAbsolute = false;\n\n  for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n    var path = (i >= 0) ? arguments[i] : '/';\n\n    // Skip empty and invalid entries\n    if (typeof path !== 'string') {\n      throw new TypeError('Arguments to path.resolve must be strings');\n    } else if (!path) {\n      continue;\n    }\n\n    resolvedPath = path + '/' + resolvedPath;\n    resolvedAbsolute = path.charAt(0) === '/';\n  }\n\n  // At this point the path should be resolved to a full absolute path, but\n  // handle relative paths to be safe (might happen when process.cwd() fails)\n\n  // Normalize the path\n  resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) {\n    return !!p;\n  }), !resolvedAbsolute).join('/');\n\n  return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';\n}\n// path.normalize(path)\n// posix version\nfunction normalize(path) {\n  var isPathAbsolute = isAbsolute$1(path),\n      trailingSlash = substr(path, -1) === '/';\n\n  // Normalize the path\n  path = normalizeArray(filter(path.split('/'), function(p) {\n    return !!p;\n  }), !isPathAbsolute).join('/');\n\n  if (!path && !isPathAbsolute) {\n    path = '.';\n  }\n  if (path && trailingSlash) {\n    path += '/';\n  }\n\n  return (isPathAbsolute ? '/' : '') + path;\n}\n// posix version\nfunction isAbsolute$1(path) {\n  return path.charAt(0) === '/';\n}\n\n// posix version\nfunction join$1() {\n  var paths = Array.prototype.slice.call(arguments, 0);\n  return normalize(filter(paths, function(p, index) {\n    if (typeof p !== 'string') {\n      throw new TypeError('Arguments to path.join must be strings');\n    }\n    return p;\n  }).join('/'));\n}\n\n\n// path.relative(from, to)\n// posix version\nfunction relative$1(from, to) {\n  from = resolve$2(from).substr(1);\n  to = resolve$2(to).substr(1);\n\n  function trim(arr) {\n    var start = 0;\n    for (; start < arr.length; start++) {\n      if (arr[start] !== '') break;\n    }\n\n    var end = arr.length - 1;\n    for (; end >= 0; end--) {\n      if (arr[end] !== '') break;\n    }\n\n    if (start > end) return [];\n    return arr.slice(start, end - start + 1);\n  }\n\n  var fromParts = trim(from.split('/'));\n  var toParts = trim(to.split('/'));\n\n  var length = Math.min(fromParts.length, toParts.length);\n  var samePartsLength = length;\n  for (var i = 0; i < length; i++) {\n    if (fromParts[i] !== toParts[i]) {\n      samePartsLength = i;\n      break;\n    }\n  }\n\n  var outputParts = [];\n  for (var i = samePartsLength; i < fromParts.length; i++) {\n    outputParts.push('..');\n  }\n\n  outputParts = outputParts.concat(toParts.slice(samePartsLength));\n\n  return outputParts.join('/');\n}\n\nvar sep$1 = '/';\nvar delimiter$1 = ':';\n\nfunction dirname$2(path) {\n  var result = splitPath(path),\n      root = result[0],\n      dir = result[1];\n\n  if (!root && !dir) {\n    // No dirname whatsoever\n    return '.';\n  }\n\n  if (dir) {\n    // It has a dirname, strip trailing slash\n    dir = dir.substr(0, dir.length - 1);\n  }\n\n  return root + dir;\n}\n\nfunction basename(path, ext) {\n  var f = splitPath(path)[2];\n  // TODO: make this comparison case-insensitive on windows?\n  if (ext && f.substr(-1 * ext.length) === ext) {\n    f = f.substr(0, f.length - ext.length);\n  }\n  return f;\n}\n\n\nfunction extname(path) {\n  return splitPath(path)[3];\n}\nvar path = {\n  extname: extname,\n  basename: basename,\n  dirname: dirname$2,\n  sep: sep$1,\n  delimiter: delimiter$1,\n  relative: relative$1,\n  join: join$1,\n  isAbsolute: isAbsolute$1,\n  normalize: normalize,\n  resolve: resolve$2\n};\nfunction filter (xs, f) {\n    if (xs.filter) return xs.filter(f);\n    var res = [];\n    for (var i = 0; i < xs.length; i++) {\n        if (f(xs[i], i, xs)) res.push(xs[i]);\n    }\n    return res;\n}\n\n// String.prototype.substr - negative index don't work in IE8\nvar substr = 'ab'.substr(-1) === 'b' ?\n    function (str, start, len) { return str.substr(start, len) } :\n    function (str, start, len) {\n        if (start < 0) start = str.length + start;\n        return str.substr(start, len);\n    }\n;\n\nvar _polyfillNode_path = /*#__PURE__*/Object.freeze({\n  __proto__: null,\n  basename: basename,\n  default: path,\n  delimiter: delimiter$1,\n  dirname: dirname$2,\n  extname: extname,\n  isAbsolute: isAbsolute$1,\n  join: join$1,\n  normalize: normalize,\n  relative: relative$1,\n  resolve: resolve$2,\n  sep: sep$1\n});\n\n/*! https://mths.be/punycode v1.4.1 by @mathias */\n\n\n/** Highest positive signed 32-bit float value */\nvar maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1\n\n/** Bootstring parameters */\nvar base = 36;\nvar tMin = 1;\nvar tMax = 26;\nvar skew = 38;\nvar damp = 700;\nvar initialBias = 72;\nvar initialN = 128; // 0x80\nvar delimiter = '-'; // '\\x2D'\nvar regexNonASCII = /[^\\x20-\\x7E]/; // unprintable ASCII chars + non-ASCII chars\nvar regexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g; // RFC 3490 separators\n\n/** Error messages */\nvar errors = {\n  'overflow': 'Overflow: input needs wider integers to process',\n  'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n  'invalid-input': 'Invalid input'\n};\n\n/** Convenience shortcuts */\nvar baseMinusTMin = base - tMin;\nvar floor = Math.floor;\nvar stringFromCharCode = String.fromCharCode;\n\n/*--------------------------------------------------------------------------*/\n\n/**\n * A generic error utility function.\n * @private\n * @param {String} type The error type.\n * @returns {Error} Throws a `RangeError` with the applicable error message.\n */\nfunction error(type) {\n  throw new RangeError(errors[type]);\n}\n\n/**\n * A generic `Array#map` utility function.\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} callback The function that gets called for every array\n * item.\n * @returns {Array} A new array of values returned by the callback function.\n */\nfunction map$1(array, fn) {\n  var length = array.length;\n  var result = [];\n  while (length--) {\n    result[length] = fn(array[length]);\n  }\n  return result;\n}\n\n/**\n * A simple `Array#map`-like wrapper to work with domain name strings or email\n * addresses.\n * @private\n * @param {String} domain The domain name or email address.\n * @param {Function} callback The function that gets called for every\n * character.\n * @returns {Array} A new string of characters returned by the callback\n * function.\n */\nfunction mapDomain(string, fn) {\n  var parts = string.split('@');\n  var result = '';\n  if (parts.length > 1) {\n    // In email addresses, only the domain name should be punycoded. Leave\n    // the local part (i.e. everything up to `@`) intact.\n    result = parts[0] + '@';\n    string = parts[1];\n  }\n  // Avoid `split(regex)` for IE8 compatibility. See #17.\n  string = string.replace(regexSeparators, '\\x2E');\n  var labels = string.split('.');\n  var encoded = map$1(labels, fn).join('.');\n  return result + encoded;\n}\n\n/**\n * Creates an array containing the numeric code points of each Unicode\n * character in the string. While JavaScript uses UCS-2 internally,\n * this function will convert a pair of surrogate halves (each of which\n * UCS-2 exposes as separate characters) into a single code point,\n * matching UTF-16.\n * @see `punycode.ucs2.encode`\n * @see <https://mathiasbynens.be/notes/javascript-encoding>\n * @memberOf punycode.ucs2\n * @name decode\n * @param {String} string The Unicode input string (UCS-2).\n * @returns {Array} The new array of code points.\n */\nfunction ucs2decode(string) {\n  var output = [],\n    counter = 0,\n    length = string.length,\n    value,\n    extra;\n  while (counter < length) {\n    value = string.charCodeAt(counter++);\n    if (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n      // high surrogate, and there is a next character\n      extra = string.charCodeAt(counter++);\n      if ((extra & 0xFC00) == 0xDC00) { // low surrogate\n        output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n      } else {\n        // unmatched surrogate; only append this code unit, in case the next\n        // code unit is the high surrogate of a surrogate pair\n        output.push(value);\n        counter--;\n      }\n    } else {\n      output.push(value);\n    }\n  }\n  return output;\n}\n\n/**\n * Converts a digit/integer into a basic code point.\n * @see `basicToDigit()`\n * @private\n * @param {Number} digit The numeric value of a basic code point.\n * @returns {Number} The basic code point whose value (when used for\n * representing integers) is `digit`, which needs to be in the range\n * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n * used; else, the lowercase form is used. The behavior is undefined\n * if `flag` is non-zero and `digit` has no uppercase form.\n */\nfunction digitToBasic(digit, flag) {\n  //  0..25 map to ASCII a..z or A..Z\n  // 26..35 map to ASCII 0..9\n  return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n}\n\n/**\n * Bias adaptation function as per section 3.4 of RFC 3492.\n * https://tools.ietf.org/html/rfc3492#section-3.4\n * @private\n */\nfunction adapt(delta, numPoints, firstTime) {\n  var k = 0;\n  delta = firstTime ? floor(delta / damp) : delta >> 1;\n  delta += floor(delta / numPoints);\n  for ( /* no initialization */ ; delta > baseMinusTMin * tMax >> 1; k += base) {\n    delta = floor(delta / baseMinusTMin);\n  }\n  return floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n}\n\n/**\n * Converts a string of Unicode symbols (e.g. a domain name label) to a\n * Punycode string of ASCII-only symbols.\n * @memberOf punycode\n * @param {String} input The string of Unicode symbols.\n * @returns {String} The resulting Punycode string of ASCII-only symbols.\n */\nfunction encode(input) {\n  var n,\n    delta,\n    handledCPCount,\n    basicLength,\n    bias,\n    j,\n    m,\n    q,\n    k,\n    t,\n    currentValue,\n    output = [],\n    /** `inputLength` will hold the number of code points in `input`. */\n    inputLength,\n    /** Cached calculation results */\n    handledCPCountPlusOne,\n    baseMinusT,\n    qMinusT;\n\n  // Convert the input in UCS-2 to Unicode\n  input = ucs2decode(input);\n\n  // Cache the length\n  inputLength = input.length;\n\n  // Initialize the state\n  n = initialN;\n  delta = 0;\n  bias = initialBias;\n\n  // Handle the basic code points\n  for (j = 0; j < inputLength; ++j) {\n    currentValue = input[j];\n    if (currentValue < 0x80) {\n      output.push(stringFromCharCode(currentValue));\n    }\n  }\n\n  handledCPCount = basicLength = output.length;\n\n  // `handledCPCount` is the number of code points that have been handled;\n  // `basicLength` is the number of basic code points.\n\n  // Finish the basic string - if it is not empty - with a delimiter\n  if (basicLength) {\n    output.push(delimiter);\n  }\n\n  // Main encoding loop:\n  while (handledCPCount < inputLength) {\n\n    // All non-basic code points < n have been handled already. Find the next\n    // larger one:\n    for (m = maxInt, j = 0; j < inputLength; ++j) {\n      currentValue = input[j];\n      if (currentValue >= n && currentValue < m) {\n        m = currentValue;\n      }\n    }\n\n    // Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,\n    // but guard against overflow\n    handledCPCountPlusOne = handledCPCount + 1;\n    if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n      error('overflow');\n    }\n\n    delta += (m - n) * handledCPCountPlusOne;\n    n = m;\n\n    for (j = 0; j < inputLength; ++j) {\n      currentValue = input[j];\n\n      if (currentValue < n && ++delta > maxInt) {\n        error('overflow');\n      }\n\n      if (currentValue == n) {\n        // Represent delta as a generalized variable-length integer\n        for (q = delta, k = base; /* no condition */ ; k += base) {\n          t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n          if (q < t) {\n            break;\n          }\n          qMinusT = q - t;\n          baseMinusT = base - t;\n          output.push(\n            stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n          );\n          q = floor(qMinusT / baseMinusT);\n        }\n\n        output.push(stringFromCharCode(digitToBasic(q, 0)));\n        bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n        delta = 0;\n        ++handledCPCount;\n      }\n    }\n\n    ++delta;\n    ++n;\n\n  }\n  return output.join('');\n}\n\n/**\n * Converts a Unicode string representing a domain name or an email address to\n * Punycode. Only the non-ASCII parts of the domain name will be converted,\n * i.e. it doesn't matter if you call it with a domain that's already in\n * ASCII.\n * @memberOf punycode\n * @param {String} input The domain name or email address to convert, as a\n * Unicode string.\n * @returns {String} The Punycode representation of the given domain name or\n * email address.\n */\nfunction toASCII(input) {\n  return mapDomain(input, function(string) {\n    return regexNonASCII.test(string) ?\n      'xn--' + encode(string) :\n      string;\n  });\n}\n\n// shim for using process in browser\n// based off https://github.com/defunctzombie/node-process/blob/master/browser.js\n\nfunction defaultSetTimout() {\n    throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n    throw new Error('clearTimeout has not been defined');\n}\nvar cachedSetTimeout = defaultSetTimout;\nvar cachedClearTimeout = defaultClearTimeout;\nif (typeof global$1.setTimeout === 'function') {\n    cachedSetTimeout = setTimeout;\n}\nif (typeof global$1.clearTimeout === 'function') {\n    cachedClearTimeout = clearTimeout;\n}\n\nfunction runTimeout(fun) {\n    if (cachedSetTimeout === setTimeout) {\n        //normal enviroments in sane situations\n        return setTimeout(fun, 0);\n    }\n    // if setTimeout wasn't available but was latter defined\n    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n        cachedSetTimeout = setTimeout;\n        return setTimeout(fun, 0);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedSetTimeout(fun, 0);\n    } catch(e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n            return cachedSetTimeout.call(null, fun, 0);\n        } catch(e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n            return cachedSetTimeout.call(this, fun, 0);\n        }\n    }\n\n\n}\nfunction runClearTimeout(marker) {\n    if (cachedClearTimeout === clearTimeout) {\n        //normal enviroments in sane situations\n        return clearTimeout(marker);\n    }\n    // if clearTimeout wasn't available but was latter defined\n    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n        cachedClearTimeout = clearTimeout;\n        return clearTimeout(marker);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedClearTimeout(marker);\n    } catch (e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n            return cachedClearTimeout.call(null, marker);\n        } catch (e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n            return cachedClearTimeout.call(this, marker);\n        }\n    }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n    if (!draining || !currentQueue) {\n        return;\n    }\n    draining = false;\n    if (currentQueue.length) {\n        queue = currentQueue.concat(queue);\n    } else {\n        queueIndex = -1;\n    }\n    if (queue.length) {\n        drainQueue();\n    }\n}\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    var timeout = runTimeout(cleanUpNextTick);\n    draining = true;\n\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        while (++queueIndex < len) {\n            if (currentQueue) {\n                currentQueue[queueIndex].run();\n            }\n        }\n        queueIndex = -1;\n        len = queue.length;\n    }\n    currentQueue = null;\n    draining = false;\n    runClearTimeout(timeout);\n}\nfunction nextTick(fun) {\n    var args = new Array(arguments.length - 1);\n    if (arguments.length > 1) {\n        for (var i = 1; i < arguments.length; i++) {\n            args[i - 1] = arguments[i];\n        }\n    }\n    queue.push(new Item(fun, args));\n    if (queue.length === 1 && !draining) {\n        runTimeout(drainQueue);\n    }\n}\n// v8 likes predictible objects\nfunction Item(fun, array) {\n    this.fun = fun;\n    this.array = array;\n}\nItem.prototype.run = function () {\n    this.fun.apply(null, this.array);\n};\nvar title = 'browser';\nvar platform = 'browser';\nvar browser = true;\nvar env = {};\nvar argv = [];\nvar version = ''; // empty string to avoid regexp issues\nvar versions = {};\nvar release = {};\nvar config = {};\n\nfunction noop() {}\n\nvar on = noop;\nvar addListener = noop;\nvar once = noop;\nvar off = noop;\nvar removeListener = noop;\nvar removeAllListeners = noop;\nvar emit = noop;\n\nfunction binding(name) {\n    throw new Error('process.binding is not supported');\n}\n\nfunction cwd () { return '/' }\nfunction chdir (dir) {\n    throw new Error('process.chdir is not supported');\n}function umask() { return 0; }\n\n// from https://github.com/kumavis/browser-process-hrtime/blob/master/index.js\nvar performance = global$1.performance || {};\nvar performanceNow =\n  performance.now        ||\n  performance.mozNow     ||\n  performance.msNow      ||\n  performance.oNow       ||\n  performance.webkitNow  ||\n  function(){ return (new Date()).getTime() };\n\n// generate timestamp or delta\n// see http://nodejs.org/api/process.html#process_process_hrtime\nfunction hrtime(previousTimestamp){\n  var clocktime = performanceNow.call(performance)*1e-3;\n  var seconds = Math.floor(clocktime);\n  var nanoseconds = Math.floor((clocktime%1)*1e9);\n  if (previousTimestamp) {\n    seconds = seconds - previousTimestamp[0];\n    nanoseconds = nanoseconds - previousTimestamp[1];\n    if (nanoseconds<0) {\n      seconds--;\n      nanoseconds += 1e9;\n    }\n  }\n  return [seconds,nanoseconds]\n}\n\nvar startTime = new Date();\nfunction uptime() {\n  var currentTime = new Date();\n  var dif = currentTime - startTime;\n  return dif / 1000;\n}\n\nvar browser$1 = {\n  nextTick: nextTick,\n  title: title,\n  browser: browser,\n  env: env,\n  argv: argv,\n  version: version,\n  versions: versions,\n  on: on,\n  addListener: addListener,\n  once: once,\n  off: off,\n  removeListener: removeListener,\n  removeAllListeners: removeAllListeners,\n  emit: emit,\n  binding: binding,\n  cwd: cwd,\n  chdir: chdir,\n  umask: umask,\n  hrtime: hrtime,\n  platform: platform,\n  release: release,\n  config: config,\n  uptime: uptime\n};\n\nvar inherits;\nif (typeof Object.create === 'function'){\n  inherits = function inherits(ctor, superCtor) {\n    // implementation from standard node.js 'util' module\n    ctor.super_ = superCtor;\n    ctor.prototype = Object.create(superCtor.prototype, {\n      constructor: {\n        value: ctor,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }\n    });\n  };\n} else {\n  inherits = function inherits(ctor, superCtor) {\n    ctor.super_ = superCtor;\n    var TempCtor = function () {};\n    TempCtor.prototype = superCtor.prototype;\n    ctor.prototype = new TempCtor();\n    ctor.prototype.constructor = ctor;\n  };\n}\nvar inherits$1 = inherits;\n\nvar formatRegExp = /%[sdj%]/g;\nfunction format$1(f) {\n  if (!isString$1(f)) {\n    var objects = [];\n    for (var i = 0; i < arguments.length; i++) {\n      objects.push(inspect(arguments[i]));\n    }\n    return objects.join(' ');\n  }\n\n  var i = 1;\n  var args = arguments;\n  var len = args.length;\n  var str = String(f).replace(formatRegExp, function(x) {\n    if (x === '%%') return '%';\n    if (i >= len) return x;\n    switch (x) {\n      case '%s': return String(args[i++]);\n      case '%d': return Number(args[i++]);\n      case '%j':\n        try {\n          return JSON.stringify(args[i++]);\n        } catch (_) {\n          return '[Circular]';\n        }\n      default:\n        return x;\n    }\n  });\n  for (var x = args[i]; i < len; x = args[++i]) {\n    if (isNull(x) || !isObject(x)) {\n      str += ' ' + x;\n    } else {\n      str += ' ' + inspect(x);\n    }\n  }\n  return str;\n}\n\n// Mark that a method should not be used.\n// Returns a modified function which warns once by default.\n// If --no-deprecation is set, then it is a no-op.\nfunction deprecate(fn, msg) {\n  // Allow for deprecating things in the process of starting up.\n  if (isUndefined(global$1.process)) {\n    return function() {\n      return deprecate(fn, msg).apply(this, arguments);\n    };\n  }\n\n  if (browser$1.noDeprecation === true) {\n    return fn;\n  }\n\n  var warned = false;\n  function deprecated() {\n    if (!warned) {\n      if (browser$1.throwDeprecation) {\n        throw new Error(msg);\n      } else if (browser$1.traceDeprecation) {\n        console.trace(msg);\n      } else {\n        console.error(msg);\n      }\n      warned = true;\n    }\n    return fn.apply(this, arguments);\n  }\n\n  return deprecated;\n}\n\nvar debugs = {};\nvar debugEnviron;\nfunction debuglog(set) {\n  if (isUndefined(debugEnviron))\n    debugEnviron = browser$1.env.NODE_DEBUG || '';\n  set = set.toUpperCase();\n  if (!debugs[set]) {\n    if (new RegExp('\\\\b' + set + '\\\\b', 'i').test(debugEnviron)) {\n      var pid = 0;\n      debugs[set] = function() {\n        var msg = format$1.apply(null, arguments);\n        console.error('%s %d: %s', set, pid, msg);\n      };\n    } else {\n      debugs[set] = function() {};\n    }\n  }\n  return debugs[set];\n}\n\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Object} opts Optional options object that alters the output.\n */\n/* legacy: obj, showHidden, depth, colors*/\nfunction inspect(obj, opts) {\n  // default options\n  var ctx = {\n    seen: [],\n    stylize: stylizeNoColor\n  };\n  // legacy...\n  if (arguments.length >= 3) ctx.depth = arguments[2];\n  if (arguments.length >= 4) ctx.colors = arguments[3];\n  if (isBoolean(opts)) {\n    // legacy...\n    ctx.showHidden = opts;\n  } else if (opts) {\n    // got an \"options\" object\n    _extend(ctx, opts);\n  }\n  // set default options\n  if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n  if (isUndefined(ctx.depth)) ctx.depth = 2;\n  if (isUndefined(ctx.colors)) ctx.colors = false;\n  if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n  if (ctx.colors) ctx.stylize = stylizeWithColor;\n  return formatValue(ctx, obj, ctx.depth);\n}\n\n// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\ninspect.colors = {\n  'bold' : [1, 22],\n  'italic' : [3, 23],\n  'underline' : [4, 24],\n  'inverse' : [7, 27],\n  'white' : [37, 39],\n  'grey' : [90, 39],\n  'black' : [30, 39],\n  'blue' : [34, 39],\n  'cyan' : [36, 39],\n  'green' : [32, 39],\n  'magenta' : [35, 39],\n  'red' : [31, 39],\n  'yellow' : [33, 39]\n};\n\n// Don't use 'blue' not visible on cmd.exe\ninspect.styles = {\n  'special': 'cyan',\n  'number': 'yellow',\n  'boolean': 'yellow',\n  'undefined': 'grey',\n  'null': 'bold',\n  'string': 'green',\n  'date': 'magenta',\n  // \"name\": intentionally not styling\n  'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n  var style = inspect.styles[styleType];\n\n  if (style) {\n    return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n           '\\u001b[' + inspect.colors[style][1] + 'm';\n  } else {\n    return str;\n  }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n  return str;\n}\n\n\nfunction arrayToHash(array) {\n  var hash = {};\n\n  array.forEach(function(val, idx) {\n    hash[val] = true;\n  });\n\n  return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n  // Provide a hook for user-specified inspect functions.\n  // Check that value is an object with an inspect function on it\n  if (ctx.customInspect &&\n      value &&\n      isFunction(value.inspect) &&\n      // Filter out the util module, it's inspect function is special\n      value.inspect !== inspect &&\n      // Also filter out any prototype objects using the circular check.\n      !(value.constructor && value.constructor.prototype === value)) {\n    var ret = value.inspect(recurseTimes, ctx);\n    if (!isString$1(ret)) {\n      ret = formatValue(ctx, ret, recurseTimes);\n    }\n    return ret;\n  }\n\n  // Primitive types cannot have properties\n  var primitive = formatPrimitive(ctx, value);\n  if (primitive) {\n    return primitive;\n  }\n\n  // Look up the keys of the object.\n  var keys = Object.keys(value);\n  var visibleKeys = arrayToHash(keys);\n\n  if (ctx.showHidden) {\n    keys = Object.getOwnPropertyNames(value);\n  }\n\n  // IE doesn't make error fields non-enumerable\n  // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n  if (isError(value)\n      && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n    return formatError(value);\n  }\n\n  // Some type of object without properties can be shortcutted.\n  if (keys.length === 0) {\n    if (isFunction(value)) {\n      var name = value.name ? ': ' + value.name : '';\n      return ctx.stylize('[Function' + name + ']', 'special');\n    }\n    if (isRegExp(value)) {\n      return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n    }\n    if (isDate(value)) {\n      return ctx.stylize(Date.prototype.toString.call(value), 'date');\n    }\n    if (isError(value)) {\n      return formatError(value);\n    }\n  }\n\n  var base = '', array = false, braces = ['{', '}'];\n\n  // Make Array say that they are Array\n  if (isArray$1(value)) {\n    array = true;\n    braces = ['[', ']'];\n  }\n\n  // Make functions say that they are functions\n  if (isFunction(value)) {\n    var n = value.name ? ': ' + value.name : '';\n    base = ' [Function' + n + ']';\n  }\n\n  // Make RegExps say that they are RegExps\n  if (isRegExp(value)) {\n    base = ' ' + RegExp.prototype.toString.call(value);\n  }\n\n  // Make dates with properties first say the date\n  if (isDate(value)) {\n    base = ' ' + Date.prototype.toUTCString.call(value);\n  }\n\n  // Make error with message first say the error\n  if (isError(value)) {\n    base = ' ' + formatError(value);\n  }\n\n  if (keys.length === 0 && (!array || value.length == 0)) {\n    return braces[0] + base + braces[1];\n  }\n\n  if (recurseTimes < 0) {\n    if (isRegExp(value)) {\n      return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n    } else {\n      return ctx.stylize('[Object]', 'special');\n    }\n  }\n\n  ctx.seen.push(value);\n\n  var output;\n  if (array) {\n    output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n  } else {\n    output = keys.map(function(key) {\n      return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n    });\n  }\n\n  ctx.seen.pop();\n\n  return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n  if (isUndefined(value))\n    return ctx.stylize('undefined', 'undefined');\n  if (isString$1(value)) {\n    var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n                                             .replace(/'/g, \"\\\\'\")\n                                             .replace(/\\\\\"/g, '\"') + '\\'';\n    return ctx.stylize(simple, 'string');\n  }\n  if (isNumber(value))\n    return ctx.stylize('' + value, 'number');\n  if (isBoolean(value))\n    return ctx.stylize('' + value, 'boolean');\n  // For some reason typeof null is \"object\", so special case here.\n  if (isNull(value))\n    return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n  return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n  var output = [];\n  for (var i = 0, l = value.length; i < l; ++i) {\n    if (hasOwnProperty$2(value, String(i))) {\n      output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n          String(i), true));\n    } else {\n      output.push('');\n    }\n  }\n  keys.forEach(function(key) {\n    if (!key.match(/^\\d+$/)) {\n      output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n          key, true));\n    }\n  });\n  return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n  var name, str, desc;\n  desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n  if (desc.get) {\n    if (desc.set) {\n      str = ctx.stylize('[Getter/Setter]', 'special');\n    } else {\n      str = ctx.stylize('[Getter]', 'special');\n    }\n  } else {\n    if (desc.set) {\n      str = ctx.stylize('[Setter]', 'special');\n    }\n  }\n  if (!hasOwnProperty$2(visibleKeys, key)) {\n    name = '[' + key + ']';\n  }\n  if (!str) {\n    if (ctx.seen.indexOf(desc.value) < 0) {\n      if (isNull(recurseTimes)) {\n        str = formatValue(ctx, desc.value, null);\n      } else {\n        str = formatValue(ctx, desc.value, recurseTimes - 1);\n      }\n      if (str.indexOf('\\n') > -1) {\n        if (array) {\n          str = str.split('\\n').map(function(line) {\n            return '  ' + line;\n          }).join('\\n').substr(2);\n        } else {\n          str = '\\n' + str.split('\\n').map(function(line) {\n            return '   ' + line;\n          }).join('\\n');\n        }\n      }\n    } else {\n      str = ctx.stylize('[Circular]', 'special');\n    }\n  }\n  if (isUndefined(name)) {\n    if (array && key.match(/^\\d+$/)) {\n      return str;\n    }\n    name = JSON.stringify('' + key);\n    if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n      name = name.substr(1, name.length - 2);\n      name = ctx.stylize(name, 'name');\n    } else {\n      name = name.replace(/'/g, \"\\\\'\")\n                 .replace(/\\\\\"/g, '\"')\n                 .replace(/(^\"|\"$)/g, \"'\");\n      name = ctx.stylize(name, 'string');\n    }\n  }\n\n  return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n  var length = output.reduce(function(prev, cur) {\n    if (cur.indexOf('\\n') >= 0) ;\n    return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n  }, 0);\n\n  if (length > 60) {\n    return braces[0] +\n           (base === '' ? '' : base + '\\n ') +\n           ' ' +\n           output.join(',\\n  ') +\n           ' ' +\n           braces[1];\n  }\n\n  return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\n\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\nfunction isArray$1(ar) {\n  return Array.isArray(ar);\n}\n\nfunction isBoolean(arg) {\n  return typeof arg === 'boolean';\n}\n\nfunction isNull(arg) {\n  return arg === null;\n}\n\nfunction isNullOrUndefined(arg) {\n  return arg == null;\n}\n\nfunction isNumber(arg) {\n  return typeof arg === 'number';\n}\n\nfunction isString$1(arg) {\n  return typeof arg === 'string';\n}\n\nfunction isSymbol(arg) {\n  return typeof arg === 'symbol';\n}\n\nfunction isUndefined(arg) {\n  return arg === void 0;\n}\n\nfunction isRegExp(re) {\n  return isObject(re) && objectToString(re) === '[object RegExp]';\n}\n\nfunction isObject(arg) {\n  return typeof arg === 'object' && arg !== null;\n}\n\nfunction isDate(d) {\n  return isObject(d) && objectToString(d) === '[object Date]';\n}\n\nfunction isError(e) {\n  return isObject(e) &&\n      (objectToString(e) === '[object Error]' || e instanceof Error);\n}\n\nfunction isFunction(arg) {\n  return typeof arg === 'function';\n}\n\nfunction isPrimitive(arg) {\n  return arg === null ||\n         typeof arg === 'boolean' ||\n         typeof arg === 'number' ||\n         typeof arg === 'string' ||\n         typeof arg === 'symbol' ||  // ES6 symbol\n         typeof arg === 'undefined';\n}\n\nfunction isBuffer(maybeBuf) {\n  return Buffer.isBuffer(maybeBuf);\n}\n\nfunction objectToString(o) {\n  return Object.prototype.toString.call(o);\n}\n\n\nfunction pad(n) {\n  return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n              'Oct', 'Nov', 'Dec'];\n\n// 26 Feb 16:19:34\nfunction timestamp() {\n  var d = new Date();\n  var time = [pad(d.getHours()),\n              pad(d.getMinutes()),\n              pad(d.getSeconds())].join(':');\n  return [d.getDate(), months[d.getMonth()], time].join(' ');\n}\n\n\n// log is just a thin wrapper to console.log that prepends a timestamp\nfunction log() {\n  console.log('%s - %s', timestamp(), format$1.apply(null, arguments));\n}\n\nfunction _extend(origin, add) {\n  // Don't do anything if add isn't an object\n  if (!add || !isObject(add)) return origin;\n\n  var keys = Object.keys(add);\n  var i = keys.length;\n  while (i--) {\n    origin[keys[i]] = add[keys[i]];\n  }\n  return origin;\n}\nfunction hasOwnProperty$2(obj, prop) {\n  return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nvar _polyfillNode_util = {\n  inherits: inherits$1,\n  _extend: _extend,\n  log: log,\n  isBuffer: isBuffer,\n  isPrimitive: isPrimitive,\n  isFunction: isFunction,\n  isError: isError,\n  isDate: isDate,\n  isObject: isObject,\n  isRegExp: isRegExp,\n  isUndefined: isUndefined,\n  isSymbol: isSymbol,\n  isString: isString$1,\n  isNumber: isNumber,\n  isNullOrUndefined: isNullOrUndefined,\n  isNull: isNull,\n  isBoolean: isBoolean,\n  isArray: isArray$1,\n  inspect: inspect,\n  deprecate: deprecate,\n  format: format$1,\n  debuglog: debuglog\n};\n\nvar _polyfillNode_util$1 = /*#__PURE__*/Object.freeze({\n  __proto__: null,\n  _extend: _extend,\n  debuglog: debuglog,\n  default: _polyfillNode_util,\n  deprecate: deprecate,\n  format: format$1,\n  inherits: inherits$1,\n  inspect: inspect,\n  isArray: isArray$1,\n  isBoolean: isBoolean,\n  isBuffer: isBuffer,\n  isDate: isDate,\n  isError: isError,\n  isFunction: isFunction,\n  isNull: isNull,\n  isNullOrUndefined: isNullOrUndefined,\n  isNumber: isNumber,\n  isObject: isObject,\n  isPrimitive: isPrimitive,\n  isRegExp: isRegExp,\n  isString: isString$1,\n  isSymbol: isSymbol,\n  isUndefined: isUndefined,\n  log: log\n});\n\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n\n// If obj.hasOwnProperty has been overridden, then calling\n// obj.hasOwnProperty(prop) will break.\n// See: https://github.com/joyent/node/issues/1707\nfunction hasOwnProperty$1(obj, prop) {\n  return Object.prototype.hasOwnProperty.call(obj, prop);\n}\nvar isArray = Array.isArray || function (xs) {\n  return Object.prototype.toString.call(xs) === '[object Array]';\n};\nfunction stringifyPrimitive(v) {\n  switch (typeof v) {\n    case 'string':\n      return v;\n\n    case 'boolean':\n      return v ? 'true' : 'false';\n\n    case 'number':\n      return isFinite(v) ? v : '';\n\n    default:\n      return '';\n  }\n}\n\nfunction stringify$5 (obj, sep, eq, name) {\n  sep = sep || '&';\n  eq = eq || '=';\n  if (obj === null) {\n    obj = undefined;\n  }\n\n  if (typeof obj === 'object') {\n    return map(objectKeys(obj), function(k) {\n      var ks = encodeURIComponent(stringifyPrimitive(k)) + eq;\n      if (isArray(obj[k])) {\n        return map(obj[k], function(v) {\n          return ks + encodeURIComponent(stringifyPrimitive(v));\n        }).join(sep);\n      } else {\n        return ks + encodeURIComponent(stringifyPrimitive(obj[k]));\n      }\n    }).join(sep);\n\n  }\n\n  if (!name) return '';\n  return encodeURIComponent(stringifyPrimitive(name)) + eq +\n         encodeURIComponent(stringifyPrimitive(obj));\n}\nfunction map (xs, f) {\n  if (xs.map) return xs.map(f);\n  var res = [];\n  for (var i = 0; i < xs.length; i++) {\n    res.push(f(xs[i], i));\n  }\n  return res;\n}\n\nvar objectKeys = Object.keys || function (obj) {\n  var res = [];\n  for (var key in obj) {\n    if (Object.prototype.hasOwnProperty.call(obj, key)) res.push(key);\n  }\n  return res;\n};\n\nfunction parse$7(qs, sep, eq, options) {\n  sep = sep || '&';\n  eq = eq || '=';\n  var obj = {};\n\n  if (typeof qs !== 'string' || qs.length === 0) {\n    return obj;\n  }\n\n  var regexp = /\\+/g;\n  qs = qs.split(sep);\n\n  var maxKeys = 1000;\n  if (options && typeof options.maxKeys === 'number') {\n    maxKeys = options.maxKeys;\n  }\n\n  var len = qs.length;\n  // maxKeys <= 0 means that we should not limit keys count\n  if (maxKeys > 0 && len > maxKeys) {\n    len = maxKeys;\n  }\n\n  for (var i = 0; i < len; ++i) {\n    var x = qs[i].replace(regexp, '%20'),\n        idx = x.indexOf(eq),\n        kstr, vstr, k, v;\n\n    if (idx >= 0) {\n      kstr = x.substr(0, idx);\n      vstr = x.substr(idx + 1);\n    } else {\n      kstr = x;\n      vstr = '';\n    }\n\n    k = decodeURIComponent(kstr);\n    v = decodeURIComponent(vstr);\n\n    if (!hasOwnProperty$1(obj, k)) {\n      obj[k] = v;\n    } else if (isArray(obj[k])) {\n      obj[k].push(v);\n    } else {\n      obj[k] = [obj[k], v];\n    }\n  }\n\n  return obj;\n}\n\n// WHATWG API\nconst URL$1 = global$1.URL;\nconst URLSearchParams = global$1.URLSearchParams;\nvar _polyfillNode_url = {\n  parse: urlParse,\n  resolve: urlResolve,\n  resolveObject: urlResolveObject,\n  fileURLToPath: urlFileURLToPath,\n  format: urlFormat,\n  Url: Url,\n\n  // WHATWG API\n  URL: URL$1,\n  URLSearchParams,  \n};\nfunction Url() {\n  this.protocol = null;\n  this.slashes = null;\n  this.auth = null;\n  this.host = null;\n  this.port = null;\n  this.hostname = null;\n  this.hash = null;\n  this.search = null;\n  this.query = null;\n  this.pathname = null;\n  this.path = null;\n  this.href = null;\n}\n\n// Reference: RFC 3986, RFC 1808, RFC 2396\n\n// define these here so at least they only have to be\n// compiled once on the first module load.\nvar protocolPattern = /^([a-z0-9.+-]+:)/i,\n  portPattern = /:[0-9]*$/,\n\n  // Special case for a simple path URL\n  simplePathPattern = /^(\\/\\/?(?!\\/)[^\\?\\s]*)(\\?[^\\s]*)?$/,\n\n  // RFC 2396: characters reserved for delimiting URLs.\n  // We actually just auto-escape these.\n  delims = ['<', '>', '\"', '`', ' ', '\\r', '\\n', '\\t'],\n\n  // RFC 2396: characters not allowed for various reasons.\n  unwise = ['{', '}', '|', '\\\\', '^', '`'].concat(delims),\n\n  // Allowed by RFCs, but cause of XSS attacks.  Always escape these.\n  autoEscape = ['\\''].concat(unwise),\n  // Characters that are never ever allowed in a hostname.\n  // Note that any invalid chars are also handled, but these\n  // are the ones that are *expected* to be seen, so we fast-path\n  // them.\n  nonHostChars = ['%', '/', '?', ';', '#'].concat(autoEscape),\n  hostEndingChars = ['/', '?', '#'],\n  hostnameMaxLen = 255,\n  hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/,\n  hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/,\n  // protocols that can allow \"unsafe\" and \"unwise\" chars.\n  unsafeProtocol = {\n    'javascript': true,\n    'javascript:': true\n  },\n  // protocols that never have a hostname.\n  hostlessProtocol = {\n    'javascript': true,\n    'javascript:': true\n  },\n  // protocols that always contain a // bit.\n  slashedProtocol = {\n    'http': true,\n    'https': true,\n    'ftp': true,\n    'gopher': true,\n    'file': true,\n    'http:': true,\n    'https:': true,\n    'ftp:': true,\n    'gopher:': true,\n    'file:': true\n  };\n\nfunction urlParse(url, parseQueryString, slashesDenoteHost) {\n  if (url && isObject(url) && url instanceof Url) return url;\n\n  var u = new Url;\n  u.parse(url, parseQueryString, slashesDenoteHost);\n  return u;\n}\nUrl.prototype.parse = function(url, parseQueryString, slashesDenoteHost) {\n  return parse$6(this, url, parseQueryString, slashesDenoteHost);\n};\n\nfunction parse$6(self, url, parseQueryString, slashesDenoteHost) {\n  if (!isString$1(url)) {\n    throw new TypeError('Parameter \\'url\\' must be a string, not ' + typeof url);\n  }\n\n  // Copy chrome, IE, opera backslash-handling behavior.\n  // Back slashes before the query string get converted to forward slashes\n  // See: https://code.google.com/p/chromium/issues/detail?id=25916\n  var queryIndex = url.indexOf('?'),\n    splitter =\n    (queryIndex !== -1 && queryIndex < url.indexOf('#')) ? '?' : '#',\n    uSplit = url.split(splitter),\n    slashRegex = /\\\\/g;\n  uSplit[0] = uSplit[0].replace(slashRegex, '/');\n  url = uSplit.join(splitter);\n\n  var rest = url;\n\n  // trim before proceeding.\n  // This is to support parse stuff like \"  http://foo.com  \\n\"\n  rest = rest.trim();\n\n  if (!slashesDenoteHost && url.split('#').length === 1) {\n    // Try fast path regexp\n    var simplePath = simplePathPattern.exec(rest);\n    if (simplePath) {\n      self.path = rest;\n      self.href = rest;\n      self.pathname = simplePath[1];\n      if (simplePath[2]) {\n        self.search = simplePath[2];\n        if (parseQueryString) {\n          self.query = parse$7(self.search.substr(1));\n        } else {\n          self.query = self.search.substr(1);\n        }\n      } else if (parseQueryString) {\n        self.search = '';\n        self.query = {};\n      }\n      return self;\n    }\n  }\n\n  var proto = protocolPattern.exec(rest);\n  if (proto) {\n    proto = proto[0];\n    var lowerProto = proto.toLowerCase();\n    self.protocol = lowerProto;\n    rest = rest.substr(proto.length);\n  }\n\n  // figure out if it's got a host\n  // user@server is *always* interpreted as a hostname, and url\n  // resolution will treat //foo/bar as host=foo,path=bar because that's\n  // how the browser resolves relative URLs.\n  if (slashesDenoteHost || proto || rest.match(/^\\/\\/[^@\\/]+@[^@\\/]+/)) {\n    var slashes = rest.substr(0, 2) === '//';\n    if (slashes && !(proto && hostlessProtocol[proto])) {\n      rest = rest.substr(2);\n      self.slashes = true;\n    }\n  }\n  var i, hec, l, p;\n  if (!hostlessProtocol[proto] &&\n    (slashes || (proto && !slashedProtocol[proto]))) {\n\n    // there's a hostname.\n    // the first instance of /, ?, ;, or # ends the host.\n    //\n    // If there is an @ in the hostname, then non-host chars *are* allowed\n    // to the left of the last @ sign, unless some host-ending character\n    // comes *before* the @-sign.\n    // URLs are obnoxious.\n    //\n    // ex:\n    // http://a@b@c/ => user:a@b host:c\n    // http://a@b?@c => user:a host:c path:/?@c\n\n    // v0.12 TODO(isaacs): This is not quite how Chrome does things.\n    // Review our test case against browsers more comprehensively.\n\n    // find the first instance of any hostEndingChars\n    var hostEnd = -1;\n    for (i = 0; i < hostEndingChars.length; i++) {\n      hec = rest.indexOf(hostEndingChars[i]);\n      if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))\n        hostEnd = hec;\n    }\n\n    // at this point, either we have an explicit point where the\n    // auth portion cannot go past, or the last @ char is the decider.\n    var auth, atSign;\n    if (hostEnd === -1) {\n      // atSign can be anywhere.\n      atSign = rest.lastIndexOf('@');\n    } else {\n      // atSign must be in auth portion.\n      // http://a@b/c@d => host:b auth:a path:/c@d\n      atSign = rest.lastIndexOf('@', hostEnd);\n    }\n\n    // Now we have a portion which is definitely the auth.\n    // Pull that off.\n    if (atSign !== -1) {\n      auth = rest.slice(0, atSign);\n      rest = rest.slice(atSign + 1);\n      self.auth = decodeURIComponent(auth);\n    }\n\n    // the host is the remaining to the left of the first non-host char\n    hostEnd = -1;\n    for (i = 0; i < nonHostChars.length; i++) {\n      hec = rest.indexOf(nonHostChars[i]);\n      if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))\n        hostEnd = hec;\n    }\n    // if we still have not hit it, then the entire thing is a host.\n    if (hostEnd === -1)\n      hostEnd = rest.length;\n\n    self.host = rest.slice(0, hostEnd);\n    rest = rest.slice(hostEnd);\n\n    // pull out port.\n    parseHost(self);\n\n    // we've indicated that there is a hostname,\n    // so even if it's empty, it has to be present.\n    self.hostname = self.hostname || '';\n\n    // if hostname begins with [ and ends with ]\n    // assume that it's an IPv6 address.\n    var ipv6Hostname = self.hostname[0] === '[' &&\n      self.hostname[self.hostname.length - 1] === ']';\n\n    // validate a little.\n    if (!ipv6Hostname) {\n      var hostparts = self.hostname.split(/\\./);\n      for (i = 0, l = hostparts.length; i < l; i++) {\n        var part = hostparts[i];\n        if (!part) continue;\n        if (!part.match(hostnamePartPattern)) {\n          var newpart = '';\n          for (var j = 0, k = part.length; j < k; j++) {\n            if (part.charCodeAt(j) > 127) {\n              // we replace non-ASCII char with a temporary placeholder\n              // we need this to make sure size of hostname is not\n              // broken by replacing non-ASCII by nothing\n              newpart += 'x';\n            } else {\n              newpart += part[j];\n            }\n          }\n          // we test again with ASCII char only\n          if (!newpart.match(hostnamePartPattern)) {\n            var validParts = hostparts.slice(0, i);\n            var notHost = hostparts.slice(i + 1);\n            var bit = part.match(hostnamePartStart);\n            if (bit) {\n              validParts.push(bit[1]);\n              notHost.unshift(bit[2]);\n            }\n            if (notHost.length) {\n              rest = '/' + notHost.join('.') + rest;\n            }\n            self.hostname = validParts.join('.');\n            break;\n          }\n        }\n      }\n    }\n\n    if (self.hostname.length > hostnameMaxLen) {\n      self.hostname = '';\n    } else {\n      // hostnames are always lower case.\n      self.hostname = self.hostname.toLowerCase();\n    }\n\n    if (!ipv6Hostname) {\n      // IDNA Support: Returns a punycoded representation of \"domain\".\n      // It only converts parts of the domain name that\n      // have non-ASCII characters, i.e. it doesn't matter if\n      // you call it with a domain that already is ASCII-only.\n      self.hostname = toASCII(self.hostname);\n    }\n\n    p = self.port ? ':' + self.port : '';\n    var h = self.hostname || '';\n    self.host = h + p;\n    self.href += self.host;\n\n    // strip [ and ] from the hostname\n    // the host field still retains them, though\n    if (ipv6Hostname) {\n      self.hostname = self.hostname.substr(1, self.hostname.length - 2);\n      if (rest[0] !== '/') {\n        rest = '/' + rest;\n      }\n    }\n  }\n\n  // now rest is set to the post-host stuff.\n  // chop off any delim chars.\n  if (!unsafeProtocol[lowerProto]) {\n\n    // First, make 100% sure that any \"autoEscape\" chars get\n    // escaped, even if encodeURIComponent doesn't think they\n    // need to be.\n    for (i = 0, l = autoEscape.length; i < l; i++) {\n      var ae = autoEscape[i];\n      if (rest.indexOf(ae) === -1)\n        continue;\n      var esc = encodeURIComponent(ae);\n      if (esc === ae) {\n        esc = escape(ae);\n      }\n      rest = rest.split(ae).join(esc);\n    }\n  }\n\n\n  // chop off from the tail first.\n  var hash = rest.indexOf('#');\n  if (hash !== -1) {\n    // got a fragment string.\n    self.hash = rest.substr(hash);\n    rest = rest.slice(0, hash);\n  }\n  var qm = rest.indexOf('?');\n  if (qm !== -1) {\n    self.search = rest.substr(qm);\n    self.query = rest.substr(qm + 1);\n    if (parseQueryString) {\n      self.query = parse$7(self.query);\n    }\n    rest = rest.slice(0, qm);\n  } else if (parseQueryString) {\n    // no query string, but parseQueryString still requested\n    self.search = '';\n    self.query = {};\n  }\n  if (rest) self.pathname = rest;\n  if (slashedProtocol[lowerProto] &&\n    self.hostname && !self.pathname) {\n    self.pathname = '/';\n  }\n\n  //to support http.request\n  if (self.pathname || self.search) {\n    p = self.pathname || '';\n    var s = self.search || '';\n    self.path = p + s;\n  }\n\n  // finally, reconstruct the href based on what has been validated.\n  self.href = format(self);\n  return self;\n}\n\nfunction urlFileURLToPath(path) {\n  if (typeof path === 'string')\n    path = new Url().parse(path);\n  else if (!(path instanceof Url))\n    throw new TypeError('The \"path\" argument must be of type string or an instance of URL. Received type ' + (typeof path) + String(path));\n  if (path.protocol !== 'file:')\n    throw new TypeError('The URL must be of scheme file');\n  return getPathFromURLPosix(path);\n}\n\nfunction getPathFromURLPosix(url) {\n  const pathname = url.pathname;\n  for (let n = 0; n < pathname.length; n++) {\n    if (pathname[n] === '%') {\n      const third = pathname.codePointAt(n + 2) | 0x20;\n      if (pathname[n + 1] === '2' && third === 102) {\n        throw new TypeError(\n          'must not include encoded / characters'\n        );\n      }\n    }\n  }\n  return decodeURIComponent(pathname);\n}\n\n// format a parsed object into a url string\nfunction urlFormat(obj) {\n  // ensure it's an object, and not a string url.\n  // If it's an obj, this is a no-op.\n  // this way, you can call url_format() on strings\n  // to clean up potentially wonky urls.\n  if (isString$1(obj)) obj = parse$6({}, obj);\n  return format(obj);\n}\n\nfunction format(self) {\n  var auth = self.auth || '';\n  if (auth) {\n    auth = encodeURIComponent(auth);\n    auth = auth.replace(/%3A/i, ':');\n    auth += '@';\n  }\n\n  var protocol = self.protocol || '',\n    pathname = self.pathname || '',\n    hash = self.hash || '',\n    host = false,\n    query = '';\n\n  if (self.host) {\n    host = auth + self.host;\n  } else if (self.hostname) {\n    host = auth + (self.hostname.indexOf(':') === -1 ?\n      self.hostname :\n      '[' + this.hostname + ']');\n    if (self.port) {\n      host += ':' + self.port;\n    }\n  }\n\n  if (self.query &&\n    isObject(self.query) &&\n    Object.keys(self.query).length) {\n    query = stringify$5(self.query);\n  }\n\n  var search = self.search || (query && ('?' + query)) || '';\n\n  if (protocol && protocol.substr(-1) !== ':') protocol += ':';\n\n  // only the slashedProtocols get the //.  Not mailto:, xmpp:, etc.\n  // unless they had them to begin with.\n  if (self.slashes ||\n    (!protocol || slashedProtocol[protocol]) && host !== false) {\n    host = '//' + (host || '');\n    if (pathname && pathname.charAt(0) !== '/') pathname = '/' + pathname;\n  } else if (!host) {\n    host = '';\n  }\n\n  if (hash && hash.charAt(0) !== '#') hash = '#' + hash;\n  if (search && search.charAt(0) !== '?') search = '?' + search;\n\n  pathname = pathname.replace(/[?#]/g, function(match) {\n    return encodeURIComponent(match);\n  });\n  search = search.replace('#', '%23');\n\n  return protocol + host + pathname + search + hash;\n}\n\nUrl.prototype.format = function() {\n  return format(this);\n};\n\nfunction urlResolve(source, relative) {\n  return urlParse(source, false, true).resolve(relative);\n}\n\nUrl.prototype.resolve = function(relative) {\n  return this.resolveObject(urlParse(relative, false, true)).format();\n};\n\nfunction urlResolveObject(source, relative) {\n  if (!source) return relative;\n  return urlParse(source, false, true).resolveObject(relative);\n}\n\nUrl.prototype.resolveObject = function(relative) {\n  if (isString$1(relative)) {\n    var rel = new Url();\n    rel.parse(relative, false, true);\n    relative = rel;\n  }\n\n  var result = new Url();\n  var tkeys = Object.keys(this);\n  for (var tk = 0; tk < tkeys.length; tk++) {\n    var tkey = tkeys[tk];\n    result[tkey] = this[tkey];\n  }\n\n  // hash is always overridden, no matter what.\n  // even href=\"\" will remove it.\n  result.hash = relative.hash;\n\n  // if the relative url is empty, then there's nothing left to do here.\n  if (relative.href === '') {\n    result.href = result.format();\n    return result;\n  }\n\n  // hrefs like //foo/bar always cut to the protocol.\n  if (relative.slashes && !relative.protocol) {\n    // take everything except the protocol from relative\n    var rkeys = Object.keys(relative);\n    for (var rk = 0; rk < rkeys.length; rk++) {\n      var rkey = rkeys[rk];\n      if (rkey !== 'protocol')\n        result[rkey] = relative[rkey];\n    }\n\n    //urlParse appends trailing / to urls like http://www.example.com\n    if (slashedProtocol[result.protocol] &&\n      result.hostname && !result.pathname) {\n      result.path = result.pathname = '/';\n    }\n\n    result.href = result.format();\n    return result;\n  }\n  var relPath;\n  if (relative.protocol && relative.protocol !== result.protocol) {\n    // if it's a known url protocol, then changing\n    // the protocol does weird things\n    // first, if it's not file:, then we MUST have a host,\n    // and if there was a path\n    // to begin with, then we MUST have a path.\n    // if it is file:, then the host is dropped,\n    // because that's known to be hostless.\n    // anything else is assumed to be absolute.\n    if (!slashedProtocol[relative.protocol]) {\n      var keys = Object.keys(relative);\n      for (var v = 0; v < keys.length; v++) {\n        var k = keys[v];\n        result[k] = relative[k];\n      }\n      result.href = result.format();\n      return result;\n    }\n\n    result.protocol = relative.protocol;\n    if (!relative.host && !hostlessProtocol[relative.protocol]) {\n      relPath = (relative.pathname || '').split('/');\n      while (relPath.length && !(relative.host = relPath.shift()));\n      if (!relative.host) relative.host = '';\n      if (!relative.hostname) relative.hostname = '';\n      if (relPath[0] !== '') relPath.unshift('');\n      if (relPath.length < 2) relPath.unshift('');\n      result.pathname = relPath.join('/');\n    } else {\n      result.pathname = relative.pathname;\n    }\n    result.search = relative.search;\n    result.query = relative.query;\n    result.host = relative.host || '';\n    result.auth = relative.auth;\n    result.hostname = relative.hostname || relative.host;\n    result.port = relative.port;\n    // to support http.request\n    if (result.pathname || result.search) {\n      var p = result.pathname || '';\n      var s = result.search || '';\n      result.path = p + s;\n    }\n    result.slashes = result.slashes || relative.slashes;\n    result.href = result.format();\n    return result;\n  }\n\n  var isSourceAbs = (result.pathname && result.pathname.charAt(0) === '/'),\n    isRelAbs = (\n      relative.host ||\n      relative.pathname && relative.pathname.charAt(0) === '/'\n    ),\n    mustEndAbs = (isRelAbs || isSourceAbs ||\n      (result.host && relative.pathname)),\n    removeAllDots = mustEndAbs,\n    srcPath = result.pathname && result.pathname.split('/') || [],\n    psychotic = result.protocol && !slashedProtocol[result.protocol];\n  relPath = relative.pathname && relative.pathname.split('/') || [];\n  // if the url is a non-slashed url, then relative\n  // links like ../.. should be able\n  // to crawl up to the hostname, as well.  This is strange.\n  // result.protocol has already been set by now.\n  // Later on, put the first path part into the host field.\n  if (psychotic) {\n    result.hostname = '';\n    result.port = null;\n    if (result.host) {\n      if (srcPath[0] === '') srcPath[0] = result.host;\n      else srcPath.unshift(result.host);\n    }\n    result.host = '';\n    if (relative.protocol) {\n      relative.hostname = null;\n      relative.port = null;\n      if (relative.host) {\n        if (relPath[0] === '') relPath[0] = relative.host;\n        else relPath.unshift(relative.host);\n      }\n      relative.host = null;\n    }\n    mustEndAbs = mustEndAbs && (relPath[0] === '' || srcPath[0] === '');\n  }\n  var authInHost;\n  if (isRelAbs) {\n    // it's absolute.\n    result.host = (relative.host || relative.host === '') ?\n      relative.host : result.host;\n    result.hostname = (relative.hostname || relative.hostname === '') ?\n      relative.hostname : result.hostname;\n    result.search = relative.search;\n    result.query = relative.query;\n    srcPath = relPath;\n    // fall through to the dot-handling below.\n  } else if (relPath.length) {\n    // it's relative\n    // throw away the existing file, and take the new path instead.\n    if (!srcPath) srcPath = [];\n    srcPath.pop();\n    srcPath = srcPath.concat(relPath);\n    result.search = relative.search;\n    result.query = relative.query;\n  } else if (!isNullOrUndefined(relative.search)) {\n    // just pull out the search.\n    // like href='?foo'.\n    // Put this after the other two cases because it simplifies the booleans\n    if (psychotic) {\n      result.hostname = result.host = srcPath.shift();\n      //occationaly the auth can get stuck only in host\n      //this especially happens in cases like\n      //url.resolveObject('mailto:local1@domain1', 'local2@domain2')\n      authInHost = result.host && result.host.indexOf('@') > 0 ?\n        result.host.split('@') : false;\n      if (authInHost) {\n        result.auth = authInHost.shift();\n        result.host = result.hostname = authInHost.shift();\n      }\n    }\n    result.search = relative.search;\n    result.query = relative.query;\n    //to support http.request\n    if (!isNull(result.pathname) || !isNull(result.search)) {\n      result.path = (result.pathname ? result.pathname : '') +\n        (result.search ? result.search : '');\n    }\n    result.href = result.format();\n    return result;\n  }\n\n  if (!srcPath.length) {\n    // no path at all.  easy.\n    // we've already handled the other stuff above.\n    result.pathname = null;\n    //to support http.request\n    if (result.search) {\n      result.path = '/' + result.search;\n    } else {\n      result.path = null;\n    }\n    result.href = result.format();\n    return result;\n  }\n\n  // if a url ENDs in . or .., then it must get a trailing slash.\n  // however, if it ends in anything else non-slashy,\n  // then it must NOT get a trailing slash.\n  var last = srcPath.slice(-1)[0];\n  var hasTrailingSlash = (\n    (result.host || relative.host || srcPath.length > 1) &&\n    (last === '.' || last === '..') || last === '');\n\n  // strip single dots, resolve double dots to parent dir\n  // if the path tries to go above the root, `up` ends up > 0\n  var up = 0;\n  for (var i = srcPath.length; i >= 0; i--) {\n    last = srcPath[i];\n    if (last === '.') {\n      srcPath.splice(i, 1);\n    } else if (last === '..') {\n      srcPath.splice(i, 1);\n      up++;\n    } else if (up) {\n      srcPath.splice(i, 1);\n      up--;\n    }\n  }\n\n  // if the path is allowed to go above the root, restore leading ..s\n  if (!mustEndAbs && !removeAllDots) {\n    for (; up--; up) {\n      srcPath.unshift('..');\n    }\n  }\n\n  if (mustEndAbs && srcPath[0] !== '' &&\n    (!srcPath[0] || srcPath[0].charAt(0) !== '/')) {\n    srcPath.unshift('');\n  }\n\n  if (hasTrailingSlash && (srcPath.join('/').substr(-1) !== '/')) {\n    srcPath.push('');\n  }\n\n  var isAbsolute = srcPath[0] === '' ||\n    (srcPath[0] && srcPath[0].charAt(0) === '/');\n\n  // put the host back\n  if (psychotic) {\n    result.hostname = result.host = isAbsolute ? '' :\n      srcPath.length ? srcPath.shift() : '';\n    //occationaly the auth can get stuck only in host\n    //this especially happens in cases like\n    //url.resolveObject('mailto:local1@domain1', 'local2@domain2')\n    authInHost = result.host && result.host.indexOf('@') > 0 ?\n      result.host.split('@') : false;\n    if (authInHost) {\n      result.auth = authInHost.shift();\n      result.host = result.hostname = authInHost.shift();\n    }\n  }\n\n  mustEndAbs = mustEndAbs || (result.host && srcPath.length);\n\n  if (mustEndAbs && !isAbsolute) {\n    srcPath.unshift('');\n  }\n\n  if (!srcPath.length) {\n    result.pathname = null;\n    result.path = null;\n  } else {\n    result.pathname = srcPath.join('/');\n  }\n\n  //to support request.http\n  if (!isNull(result.pathname) || !isNull(result.search)) {\n    result.path = (result.pathname ? result.pathname : '') +\n      (result.search ? result.search : '');\n  }\n  result.auth = relative.auth || result.auth;\n  result.slashes = result.slashes || relative.slashes;\n  result.href = result.format();\n  return result;\n};\n\nUrl.prototype.parseHost = function() {\n  return parseHost(this);\n};\n\nfunction parseHost(self) {\n  var host = self.host;\n  var port = portPattern.exec(host);\n  if (port) {\n    port = port[0];\n    if (port !== ':') {\n      self.port = port.substr(1);\n    }\n    host = host.substr(0, host.length - port.length);\n  }\n  if (host) self.hostname = host;\n}\n\nvar _polyfillNode_url$1 = /*#__PURE__*/Object.freeze({\n  __proto__: null,\n  URL: URL$1,\n  URLSearchParams: URLSearchParams,\n  Url: Url,\n  default: _polyfillNode_url,\n  fileURLToPath: urlFileURLToPath,\n  format: urlFormat,\n  parse: urlParse,\n  resolve: urlResolve,\n  resolveObject: urlResolveObject\n});\n\nfunction isRelativeUrl(url) {\n    const firstChar = url.charAt(0);\n    return firstChar === '.' || firstChar === '~' || firstChar === '@';\n}\nconst externalRE = /^(https?:)?\\/\\//;\nfunction isExternalUrl(url) {\n    return externalRE.test(url);\n}\nconst dataUrlRE = /^\\s*data:/i;\nfunction isDataUrl(url) {\n    return dataUrlRE.test(url);\n}\n/**\n * Parses string url into URL object.\n */\nfunction parseUrl(url) {\n    const firstChar = url.charAt(0);\n    if (firstChar === '~') {\n        const secondChar = url.charAt(1);\n        url = url.slice(secondChar === '/' ? 2 : 1);\n    }\n    return parseUriParts(url);\n}\n/**\n * vuejs/component-compiler-utils#22 Support uri fragment in transformed require\n * @param urlString an url as a string\n */\nfunction parseUriParts(urlString) {\n    // A TypeError is thrown if urlString is not a string\n    // @see https://nodejs.org/api/url.html#url_url_parse_urlstring_parsequerystring_slashesdenotehost\n    return urlParse(isString$2(urlString) ? urlString : '', false, true);\n}\n\nconst defaultAssetUrlOptions = {\n    base: null,\n    includeAbsolute: false,\n    tags: {\n        video: ['src', 'poster'],\n        source: ['src'],\n        img: ['src'],\n        image: ['xlink:href', 'href'],\n        use: ['xlink:href', 'href']\n    }\n};\nconst normalizeOptions = (options) => {\n    if (Object.keys(options).some(key => isArray$3(options[key]))) {\n        // legacy option format which directly passes in tags config\n        return Object.assign(Object.assign({}, defaultAssetUrlOptions), { tags: options });\n    }\n    return Object.assign(Object.assign({}, defaultAssetUrlOptions), options);\n};\nconst createAssetUrlTransformWithOptions = (options) => {\n    return (node, context) => transformAssetUrl(node, context, options);\n};\n/**\n * A `@vue/compiler-core` plugin that transforms relative asset urls into\n * either imports or absolute urls.\n *\n * ``` js\n * // Before\n * createVNode('img', { src: './logo.png' })\n *\n * // After\n * import _imports_0 from './logo.png'\n * createVNode('img', { src: _imports_0 })\n * ```\n */\nconst transformAssetUrl = (node, context, options = defaultAssetUrlOptions) => {\n    if (node.type === 1 /* NodeTypes.ELEMENT */) {\n        if (!node.props.length) {\n            return;\n        }\n        const tags = options.tags || defaultAssetUrlOptions.tags;\n        const attrs = tags[node.tag];\n        const wildCardAttrs = tags['*'];\n        if (!attrs && !wildCardAttrs) {\n            return;\n        }\n        const assetAttrs = (attrs || []).concat(wildCardAttrs || []);\n        node.props.forEach((attr, index) => {\n            if (attr.type !== 6 /* NodeTypes.ATTRIBUTE */ ||\n                !assetAttrs.includes(attr.name) ||\n                !attr.value ||\n                isExternalUrl(attr.value.content) ||\n                isDataUrl(attr.value.content) ||\n                attr.value.content[0] === '#' ||\n                (!options.includeAbsolute && !isRelativeUrl(attr.value.content))) {\n                return;\n            }\n            const url = parseUrl(attr.value.content);\n            if (options.base && attr.value.content[0] === '.') {\n                // explicit base - directly rewrite relative urls into absolute url\n                // to avoid generating extra imports\n                // Allow for full hostnames provided in options.base\n                const base = parseUrl(options.base);\n                const protocol = base.protocol || '';\n                const host = base.host ? protocol + '//' + base.host : '';\n                const basePath = base.path || '/';\n                // when packaged in the browser, path will be using the posix-\n                // only version provided by rollup-plugin-node-builtins.\n                attr.value.content =\n                    host +\n                        (path.posix || path).join(basePath, url.path + (url.hash || ''));\n                return;\n            }\n            // otherwise, transform the url into an import.\n            // this assumes a bundler will resolve the import into the correct\n            // absolute url (e.g. webpack file-loader)\n            const exp = getImportsExpressionExp(url.path, url.hash, attr.loc, context);\n            node.props[index] = {\n                type: 7 /* NodeTypes.DIRECTIVE */,\n                name: 'bind',\n                arg: createSimpleExpression(attr.name, true, attr.loc),\n                exp,\n                modifiers: [],\n                loc: attr.loc\n            };\n        });\n    }\n};\nfunction getImportsExpressionExp(path, hash, loc, context) {\n    if (path) {\n        let name;\n        let exp;\n        const existingIndex = context.imports.findIndex(i => i.path === path);\n        if (existingIndex > -1) {\n            name = `_imports_${existingIndex}`;\n            exp = context.imports[existingIndex].exp;\n        }\n        else {\n            name = `_imports_${context.imports.length}`;\n            exp = createSimpleExpression(name, false, loc, 3 /* ConstantTypes.CAN_STRINGIFY */);\n            context.imports.push({ exp, path });\n        }\n        if (!hash) {\n            return exp;\n        }\n        const hashExp = `${name} + '${hash}'`;\n        const finalExp = createSimpleExpression(hashExp, false, loc, 3 /* ConstantTypes.CAN_STRINGIFY */);\n        if (!context.hoistStatic) {\n            return finalExp;\n        }\n        const existingHoistIndex = context.hoists.findIndex(h => {\n            return (h &&\n                h.type === 4 /* NodeTypes.SIMPLE_EXPRESSION */ &&\n                !h.isStatic &&\n                h.content === hashExp);\n        });\n        if (existingHoistIndex > -1) {\n            return createSimpleExpression(`_hoisted_${existingHoistIndex + 1}`, false, loc, 3 /* ConstantTypes.CAN_STRINGIFY */);\n        }\n        return context.hoist(finalExp);\n    }\n    else {\n        return createSimpleExpression(`''`, false, loc, 3 /* ConstantTypes.CAN_STRINGIFY */);\n    }\n}\n\nconst srcsetTags = ['img', 'source'];\n// http://w3c.github.io/html/semantics-embedded-content.html#ref-for-image-candidate-string-5\nconst escapedSpaceCharacters = /( |\\\\t|\\\\n|\\\\f|\\\\r)+/g;\nconst createSrcsetTransformWithOptions = (options) => {\n    return (node, context) => transformSrcset(node, context, options);\n};\nconst transformSrcset = (node, context, options = defaultAssetUrlOptions) => {\n    if (node.type === 1 /* NodeTypes.ELEMENT */) {\n        if (srcsetTags.includes(node.tag) && node.props.length) {\n            node.props.forEach((attr, index) => {\n                if (attr.name === 'srcset' && attr.type === 6 /* NodeTypes.ATTRIBUTE */) {\n                    if (!attr.value)\n                        return;\n                    const value = attr.value.content;\n                    if (!value)\n                        return;\n                    const imageCandidates = value.split(',').map(s => {\n                        // The attribute value arrives here with all whitespace, except\n                        // normal spaces, represented by escape sequences\n                        const [url, descriptor] = s\n                            .replace(escapedSpaceCharacters, ' ')\n                            .trim()\n                            .split(' ', 2);\n                        return { url, descriptor };\n                    });\n                    // data urls contains comma after the encoding so we need to re-merge\n                    // them\n                    for (let i = 0; i < imageCandidates.length; i++) {\n                        const { url } = imageCandidates[i];\n                        if (isDataUrl(url)) {\n                            imageCandidates[i + 1].url =\n                                url + ',' + imageCandidates[i + 1].url;\n                            imageCandidates.splice(i, 1);\n                        }\n                    }\n                    const shouldProcessUrl = (url) => {\n                        return (!isExternalUrl(url) &&\n                            !isDataUrl(url) &&\n                            (options.includeAbsolute || isRelativeUrl(url)));\n                    };\n                    // When srcset does not contain any qualified URLs, skip transforming\n                    if (!imageCandidates.some(({ url }) => shouldProcessUrl(url))) {\n                        return;\n                    }\n                    if (options.base) {\n                        const base = options.base;\n                        const set = [];\n                        let needImportTransform = false;\n                        imageCandidates.forEach(candidate => {\n                            let { url, descriptor } = candidate;\n                            descriptor = descriptor ? ` ${descriptor}` : ``;\n                            if (url[0] === '.') {\n                                candidate.url = (path.posix || path).join(base, url);\n                                set.push(candidate.url + descriptor);\n                            }\n                            else if (shouldProcessUrl(url)) {\n                                needImportTransform = true;\n                            }\n                            else {\n                                set.push(url + descriptor);\n                            }\n                        });\n                        if (!needImportTransform) {\n                            attr.value.content = set.join(', ');\n                            return;\n                        }\n                    }\n                    const compoundExpression = createCompoundExpression([], attr.loc);\n                    imageCandidates.forEach(({ url, descriptor }, index) => {\n                        if (shouldProcessUrl(url)) {\n                            const { path } = parseUrl(url);\n                            let exp;\n                            if (path) {\n                                const existingImportsIndex = context.imports.findIndex(i => i.path === path);\n                                if (existingImportsIndex > -1) {\n                                    exp = createSimpleExpression(`_imports_${existingImportsIndex}`, false, attr.loc, 3 /* ConstantTypes.CAN_STRINGIFY */);\n                                }\n                                else {\n                                    exp = createSimpleExpression(`_imports_${context.imports.length}`, false, attr.loc, 3 /* ConstantTypes.CAN_STRINGIFY */);\n                                    context.imports.push({ exp, path });\n                                }\n                                compoundExpression.children.push(exp);\n                            }\n                        }\n                        else {\n                            const exp = createSimpleExpression(`\"${url}\"`, false, attr.loc, 3 /* ConstantTypes.CAN_STRINGIFY */);\n                            compoundExpression.children.push(exp);\n                        }\n                        const isNotLast = imageCandidates.length - 1 > index;\n                        if (descriptor && isNotLast) {\n                            compoundExpression.children.push(` + ' ${descriptor}, ' + `);\n                        }\n                        else if (descriptor) {\n                            compoundExpression.children.push(` + ' ${descriptor}'`);\n                        }\n                        else if (isNotLast) {\n                            compoundExpression.children.push(` + ', ' + `);\n                        }\n                    });\n                    let exp = compoundExpression;\n                    if (context.hoistStatic) {\n                        exp = context.hoist(compoundExpression);\n                        exp.constType = 3 /* ConstantTypes.CAN_STRINGIFY */;\n                    }\n                    node.props[index] = {\n                        type: 7 /* NodeTypes.DIRECTIVE */,\n                        name: 'bind',\n                        arg: createSimpleExpression('srcset', true, attr.loc),\n                        exp,\n                        modifiers: [],\n                        loc: attr.loc\n                    };\n                }\n            });\n        }\n    }\n};\n\nconst SSR_INTERPOLATE = Symbol(`ssrInterpolate`);\nconst SSR_RENDER_VNODE = Symbol(`ssrRenderVNode`);\nconst SSR_RENDER_COMPONENT = Symbol(`ssrRenderComponent`);\nconst SSR_RENDER_SLOT = Symbol(`ssrRenderSlot`);\nconst SSR_RENDER_SLOT_INNER = Symbol(`ssrRenderSlotInner`);\nconst SSR_RENDER_CLASS = Symbol(`ssrRenderClass`);\nconst SSR_RENDER_STYLE = Symbol(`ssrRenderStyle`);\nconst SSR_RENDER_ATTRS = Symbol(`ssrRenderAttrs`);\nconst SSR_RENDER_ATTR = Symbol(`ssrRenderAttr`);\nconst SSR_RENDER_DYNAMIC_ATTR = Symbol(`ssrRenderDynamicAttr`);\nconst SSR_RENDER_LIST = Symbol(`ssrRenderList`);\nconst SSR_INCLUDE_BOOLEAN_ATTR = Symbol(`ssrIncludeBooleanAttr`);\nconst SSR_LOOSE_EQUAL = Symbol(`ssrLooseEqual`);\nconst SSR_LOOSE_CONTAIN = Symbol(`ssrLooseContain`);\nconst SSR_RENDER_DYNAMIC_MODEL = Symbol(`ssrRenderDynamicModel`);\nconst SSR_GET_DYNAMIC_MODEL_PROPS = Symbol(`ssrGetDynamicModelProps`);\nconst SSR_RENDER_TELEPORT = Symbol(`ssrRenderTeleport`);\nconst SSR_RENDER_SUSPENSE = Symbol(`ssrRenderSuspense`);\nconst SSR_GET_DIRECTIVE_PROPS = Symbol(`ssrGetDirectiveProps`);\nconst ssrHelpers = {\n    [SSR_INTERPOLATE]: `ssrInterpolate`,\n    [SSR_RENDER_VNODE]: `ssrRenderVNode`,\n    [SSR_RENDER_COMPONENT]: `ssrRenderComponent`,\n    [SSR_RENDER_SLOT]: `ssrRenderSlot`,\n    [SSR_RENDER_SLOT_INNER]: `ssrRenderSlotInner`,\n    [SSR_RENDER_CLASS]: `ssrRenderClass`,\n    [SSR_RENDER_STYLE]: `ssrRenderStyle`,\n    [SSR_RENDER_ATTRS]: `ssrRenderAttrs`,\n    [SSR_RENDER_ATTR]: `ssrRenderAttr`,\n    [SSR_RENDER_DYNAMIC_ATTR]: `ssrRenderDynamicAttr`,\n    [SSR_RENDER_LIST]: `ssrRenderList`,\n    [SSR_INCLUDE_BOOLEAN_ATTR]: `ssrIncludeBooleanAttr`,\n    [SSR_LOOSE_EQUAL]: `ssrLooseEqual`,\n    [SSR_LOOSE_CONTAIN]: `ssrLooseContain`,\n    [SSR_RENDER_DYNAMIC_MODEL]: `ssrRenderDynamicModel`,\n    [SSR_GET_DYNAMIC_MODEL_PROPS]: `ssrGetDynamicModelProps`,\n    [SSR_RENDER_TELEPORT]: `ssrRenderTeleport`,\n    [SSR_RENDER_SUSPENSE]: `ssrRenderSuspense`,\n    [SSR_GET_DIRECTIVE_PROPS]: `ssrGetDirectiveProps`\n};\n// Note: these are helpers imported from @vue/server-renderer\n// make sure the names match!\nregisterRuntimeHelpers(ssrHelpers);\n\n// Plugin for the first transform pass, which simply constructs the AST node\nconst ssrTransformIf = createStructuralDirectiveTransform(/^(if|else|else-if)$/, processIf);\n// This is called during the 2nd transform pass to construct the SSR-specific\n// codegen nodes.\nfunction ssrProcessIf(node, context, disableNestedFragments = false) {\n    const [rootBranch] = node.branches;\n    const ifStatement = createIfStatement(rootBranch.condition, processIfBranch(rootBranch, context, disableNestedFragments));\n    context.pushStatement(ifStatement);\n    let currentIf = ifStatement;\n    for (let i = 1; i < node.branches.length; i++) {\n        const branch = node.branches[i];\n        const branchBlockStatement = processIfBranch(branch, context, disableNestedFragments);\n        if (branch.condition) {\n            // else-if\n            currentIf = currentIf.alternate = createIfStatement(branch.condition, branchBlockStatement);\n        }\n        else {\n            // else\n            currentIf.alternate = branchBlockStatement;\n        }\n    }\n    if (!currentIf.alternate) {\n        currentIf.alternate = createBlockStatement([\n            createCallExpression(`_push`, ['`<!---->`'])\n        ]);\n    }\n}\nfunction processIfBranch(branch, context, disableNestedFragments = false) {\n    const { children } = branch;\n    const needFragmentWrapper = !disableNestedFragments &&\n        (children.length !== 1 || children[0].type !== 1 /* NodeTypes.ELEMENT */) &&\n        // optimize away nested fragments when the only child is a ForNode\n        !(children.length === 1 && children[0].type === 11 /* NodeTypes.FOR */);\n    return processChildrenAsStatement(branch, context, needFragmentWrapper);\n}\n\n// Plugin for the first transform pass, which simply constructs the AST node\nconst ssrTransformFor = createStructuralDirectiveTransform('for', processFor);\n// This is called during the 2nd transform pass to construct the SSR-specific\n// codegen nodes.\nfunction ssrProcessFor(node, context, disableNestedFragments = false) {\n    const needFragmentWrapper = !disableNestedFragments &&\n        (node.children.length !== 1 || node.children[0].type !== 1 /* NodeTypes.ELEMENT */);\n    const renderLoop = createFunctionExpression(createForLoopParams(node.parseResult));\n    renderLoop.body = processChildrenAsStatement(node, context, needFragmentWrapper);\n    // v-for always renders a fragment unless explicitly disabled\n    if (!disableNestedFragments) {\n        context.pushStringPart(`<!--[-->`);\n    }\n    context.pushStatement(createCallExpression(context.helper(SSR_RENDER_LIST), [\n        node.source,\n        renderLoop\n    ]));\n    if (!disableNestedFragments) {\n        context.pushStringPart(`<!--]-->`);\n    }\n}\n\nconst ssrTransformSlotOutlet = (node, context) => {\n    if (isSlotOutlet(node)) {\n        const { slotName, slotProps } = processSlotOutlet(node, context);\n        const args = [\n            `_ctx.$slots`,\n            slotName,\n            slotProps || `{}`,\n            // fallback content placeholder. will be replaced in the process phase\n            `null`,\n            `_push`,\n            `_parent`\n        ];\n        // inject slot scope id if current template uses :slotted\n        if (context.scopeId && context.slotted !== false) {\n            args.push(`\"${context.scopeId}-s\"`);\n        }\n        let method = SSR_RENDER_SLOT;\n        // #3989\n        // check if this is a single slot inside a transition wrapper - since\n        // transition will unwrap the slot fragment into a single vnode at runtime,\n        // we need to avoid rendering the slot as a fragment.\n        const parent = context.parent;\n        if (parent &&\n            parent.type === 1 /* NodeTypes.ELEMENT */ &&\n            parent.tagType === 1 /* ElementTypes.COMPONENT */ &&\n            resolveComponentType(parent, context, true) === TRANSITION &&\n            parent.children.filter(c => c.type === 1 /* NodeTypes.ELEMENT */).length === 1) {\n            method = SSR_RENDER_SLOT_INNER;\n            if (!(context.scopeId && context.slotted !== false)) {\n                args.push('null');\n            }\n            args.push('true');\n        }\n        node.ssrCodegenNode = createCallExpression(context.helper(method), args);\n    }\n};\nfunction ssrProcessSlotOutlet(node, context) {\n    const renderCall = node.ssrCodegenNode;\n    // has fallback content\n    if (node.children.length) {\n        const fallbackRenderFn = createFunctionExpression([]);\n        fallbackRenderFn.body = processChildrenAsStatement(node, context);\n        // _renderSlot(slots, name, props, fallback, ...)\n        renderCall.arguments[3] = fallbackRenderFn;\n    }\n    // Forwarded <slot/>. Merge slot scope ids\n    if (context.withSlotScopeId) {\n        const slotScopeId = renderCall.arguments[6];\n        renderCall.arguments[6] = slotScopeId\n            ? `${slotScopeId} + _scopeId`\n            : `_scopeId`;\n    }\n    context.pushStatement(node.ssrCodegenNode);\n}\n\nfunction createSSRCompilerError(code, loc) {\n    return createCompilerError(code, loc, SSRErrorMessages);\n}\nconst SSRErrorMessages = {\n    [62 /* SSRErrorCodes.X_SSR_UNSAFE_ATTR_NAME */]: `Unsafe attribute name for SSR.`,\n    [63 /* SSRErrorCodes.X_SSR_NO_TELEPORT_TARGET */]: `Missing the 'to' prop on teleport element.`,\n    [64 /* SSRErrorCodes.X_SSR_INVALID_AST_NODE */]: `Invalid AST node during SSR transform.`\n};\n\n// Note: this is a 2nd-pass codegen transform.\nfunction ssrProcessTeleport(node, context) {\n    const targetProp = findProp(node, 'to');\n    if (!targetProp) {\n        context.onError(createSSRCompilerError(63 /* SSRErrorCodes.X_SSR_NO_TELEPORT_TARGET */, node.loc));\n        return;\n    }\n    let target;\n    if (targetProp.type === 6 /* NodeTypes.ATTRIBUTE */) {\n        target =\n            targetProp.value && createSimpleExpression(targetProp.value.content, true);\n    }\n    else {\n        target = targetProp.exp;\n    }\n    if (!target) {\n        context.onError(createSSRCompilerError(63 /* SSRErrorCodes.X_SSR_NO_TELEPORT_TARGET */, targetProp.loc));\n        return;\n    }\n    const disabledProp = findProp(node, 'disabled', false, true /* allow empty */);\n    const disabled = disabledProp\n        ? disabledProp.type === 6 /* NodeTypes.ATTRIBUTE */\n            ? `true`\n            : disabledProp.exp || `false`\n        : `false`;\n    const contentRenderFn = createFunctionExpression([`_push`], undefined, // Body is added later\n    true, // newline\n    false, // isSlot\n    node.loc);\n    contentRenderFn.body = processChildrenAsStatement(node, context);\n    context.pushStatement(createCallExpression(context.helper(SSR_RENDER_TELEPORT), [\n        `_push`,\n        contentRenderFn,\n        target,\n        disabled,\n        `_parent`\n    ]));\n}\n\nconst wipMap$2 = new WeakMap();\n// phase 1\nfunction ssrTransformSuspense(node, context) {\n    return () => {\n        if (node.children.length) {\n            const wipEntry = {\n                slotsExp: null,\n                wipSlots: []\n            };\n            wipMap$2.set(node, wipEntry);\n            wipEntry.slotsExp = buildSlots(node, context, (_props, children, loc) => {\n                const fn = createFunctionExpression([], undefined, // no return, assign body later\n                true, // newline\n                false, // suspense slots are not treated as normal slots\n                loc);\n                wipEntry.wipSlots.push({\n                    fn,\n                    children\n                });\n                return fn;\n            }).slots;\n        }\n    };\n}\n// phase 2\nfunction ssrProcessSuspense(node, context) {\n    // complete wip slots with ssr code\n    const wipEntry = wipMap$2.get(node);\n    if (!wipEntry) {\n        return;\n    }\n    const { slotsExp, wipSlots } = wipEntry;\n    for (let i = 0; i < wipSlots.length; i++) {\n        const slot = wipSlots[i];\n        slot.fn.body = processChildrenAsStatement(slot, context);\n    }\n    // _push(ssrRenderSuspense(slots))\n    context.pushStatement(createCallExpression(context.helper(SSR_RENDER_SUSPENSE), [\n        `_push`,\n        slotsExp\n    ]));\n}\n\n// for directives with children overwrite (e.g. v-html & v-text), we need to\n// store the raw children so that they can be added in the 2nd pass.\nconst rawChildrenMap = new WeakMap();\nconst ssrTransformElement = (node, context) => {\n    if (node.type !== 1 /* NodeTypes.ELEMENT */ ||\n        node.tagType !== 0 /* ElementTypes.ELEMENT */) {\n        return;\n    }\n    return function ssrPostTransformElement() {\n        // element\n        // generate the template literal representing the open tag.\n        const openTag = [`<${node.tag}`];\n        // some tags need to be passed to runtime for special checks\n        const needTagForRuntime = node.tag === 'textarea' || node.tag.indexOf('-') > 0;\n        // v-bind=\"obj\", v-bind:[key] and custom directives can potentially\n        // overwrite other static attrs and can affect final rendering result,\n        // so when they are present we need to bail out to full `renderAttrs`\n        const hasDynamicVBind = hasDynamicKeyVBind(node);\n        const hasCustomDir = node.props.some(p => p.type === 7 /* NodeTypes.DIRECTIVE */ && !isBuiltInDirective(p.name));\n        const needMergeProps = hasDynamicVBind || hasCustomDir;\n        if (needMergeProps) {\n            const { props, directives } = buildProps(node, context, node.props, false /* isComponent */, false /* isDynamicComponent */, true /* ssr */);\n            if (props || directives.length) {\n                const mergedProps = buildSSRProps(props, directives, context);\n                const propsExp = createCallExpression(context.helper(SSR_RENDER_ATTRS), [mergedProps]);\n                if (node.tag === 'textarea') {\n                    const existingText = node.children[0];\n                    // If interpolation, this is dynamic <textarea> content, potentially\n                    // injected by v-model and takes higher priority than v-bind value\n                    if (!existingText || existingText.type !== 5 /* NodeTypes.INTERPOLATION */) {\n                        // <textarea> with dynamic v-bind. We don't know if the final props\n                        // will contain .value, so we will have to do something special:\n                        // assign the merged props to a temp variable, and check whether\n                        // it contains value (if yes, render is as children).\n                        const tempId = `_temp${context.temps++}`;\n                        propsExp.arguments = [\n                            createAssignmentExpression(createSimpleExpression(tempId, false), mergedProps)\n                        ];\n                        rawChildrenMap.set(node, createCallExpression(context.helper(SSR_INTERPOLATE), [\n                            createConditionalExpression(createSimpleExpression(`\"value\" in ${tempId}`, false), createSimpleExpression(`${tempId}.value`, false), createSimpleExpression(existingText ? existingText.content : ``, true), false)\n                        ]));\n                    }\n                }\n                else if (node.tag === 'input') {\n                    // <input v-bind=\"obj\" v-model>\n                    // we need to determine the props to render for the dynamic v-model\n                    // and merge it with the v-bind expression.\n                    const vModel = findVModel(node);\n                    if (vModel) {\n                        // 1. save the props (san v-model) in a temp variable\n                        const tempId = `_temp${context.temps++}`;\n                        const tempExp = createSimpleExpression(tempId, false);\n                        propsExp.arguments = [\n                            createSequenceExpression([\n                                createAssignmentExpression(tempExp, mergedProps),\n                                createCallExpression(context.helper(MERGE_PROPS), [\n                                    tempExp,\n                                    createCallExpression(context.helper(SSR_GET_DYNAMIC_MODEL_PROPS), [\n                                        tempExp,\n                                        vModel.exp // model\n                                    ])\n                                ])\n                            ])\n                        ];\n                    }\n                }\n                if (needTagForRuntime) {\n                    propsExp.arguments.push(`\"${node.tag}\"`);\n                }\n                openTag.push(propsExp);\n            }\n        }\n        // book keeping static/dynamic class merging.\n        let dynamicClassBinding = undefined;\n        let staticClassBinding = undefined;\n        // all style bindings are converted to dynamic by transformStyle.\n        // but we need to make sure to merge them.\n        let dynamicStyleBinding = undefined;\n        for (let i = 0; i < node.props.length; i++) {\n            const prop = node.props[i];\n            // ignore true-value/false-value on input\n            if (node.tag === 'input' && isTrueFalseValue(prop)) {\n                continue;\n            }\n            // special cases with children override\n            if (prop.type === 7 /* NodeTypes.DIRECTIVE */) {\n                if (prop.name === 'html' && prop.exp) {\n                    rawChildrenMap.set(node, prop.exp);\n                }\n                else if (prop.name === 'text' && prop.exp) {\n                    node.children = [createInterpolation(prop.exp, prop.loc)];\n                }\n                else if (prop.name === 'slot') {\n                    context.onError(createCompilerError(40 /* ErrorCodes.X_V_SLOT_MISPLACED */, prop.loc));\n                }\n                else if (isTextareaWithValue(node, prop) && prop.exp) {\n                    if (!needMergeProps) {\n                        node.children = [createInterpolation(prop.exp, prop.loc)];\n                    }\n                }\n                else if (!needMergeProps && prop.name !== 'on') {\n                    // Directive transforms.\n                    const directiveTransform = context.directiveTransforms[prop.name];\n                    if (directiveTransform) {\n                        const { props, ssrTagParts } = directiveTransform(prop, node, context);\n                        if (ssrTagParts) {\n                            openTag.push(...ssrTagParts);\n                        }\n                        for (let j = 0; j < props.length; j++) {\n                            const { key, value } = props[j];\n                            if (isStaticExp(key)) {\n                                let attrName = key.content;\n                                // static key attr\n                                if (attrName === 'key' || attrName === 'ref') {\n                                    continue;\n                                }\n                                if (attrName === 'class') {\n                                    openTag.push(` class=\"`, (dynamicClassBinding = createCallExpression(context.helper(SSR_RENDER_CLASS), [value])), `\"`);\n                                }\n                                else if (attrName === 'style') {\n                                    if (dynamicStyleBinding) {\n                                        // already has style binding, merge into it.\n                                        mergeCall(dynamicStyleBinding, value);\n                                    }\n                                    else {\n                                        openTag.push(` style=\"`, (dynamicStyleBinding = createCallExpression(context.helper(SSR_RENDER_STYLE), [value])), `\"`);\n                                    }\n                                }\n                                else {\n                                    attrName =\n                                        node.tag.indexOf('-') > 0\n                                            ? attrName // preserve raw name on custom elements\n                                            : propsToAttrMap[attrName] || attrName.toLowerCase();\n                                    if (isBooleanAttr(attrName)) {\n                                        openTag.push(createConditionalExpression(createCallExpression(context.helper(SSR_INCLUDE_BOOLEAN_ATTR), [value]), createSimpleExpression(' ' + attrName, true), createSimpleExpression('', true), false /* no newline */));\n                                    }\n                                    else if (isSSRSafeAttrName(attrName)) {\n                                        openTag.push(createCallExpression(context.helper(SSR_RENDER_ATTR), [\n                                            key,\n                                            value\n                                        ]));\n                                    }\n                                    else {\n                                        context.onError(createSSRCompilerError(62 /* SSRErrorCodes.X_SSR_UNSAFE_ATTR_NAME */, key.loc));\n                                    }\n                                }\n                            }\n                            else {\n                                // dynamic key attr\n                                // this branch is only encountered for custom directive\n                                // transforms that returns properties with dynamic keys\n                                const args = [key, value];\n                                if (needTagForRuntime) {\n                                    args.push(`\"${node.tag}\"`);\n                                }\n                                openTag.push(createCallExpression(context.helper(SSR_RENDER_DYNAMIC_ATTR), args));\n                            }\n                        }\n                    }\n                }\n            }\n            else {\n                // special case: value on <textarea>\n                if (node.tag === 'textarea' && prop.name === 'value' && prop.value) {\n                    rawChildrenMap.set(node, escapeHtml(prop.value.content));\n                }\n                else if (!needMergeProps) {\n                    if (prop.name === 'key' || prop.name === 'ref') {\n                        continue;\n                    }\n                    // static prop\n                    if (prop.name === 'class' && prop.value) {\n                        staticClassBinding = JSON.stringify(prop.value.content);\n                    }\n                    openTag.push(` ${prop.name}` +\n                        (prop.value ? `=\"${escapeHtml(prop.value.content)}\"` : ``));\n                }\n            }\n        }\n        // handle co-existence of dynamic + static class bindings\n        if (dynamicClassBinding && staticClassBinding) {\n            mergeCall(dynamicClassBinding, staticClassBinding);\n            removeStaticBinding(openTag, 'class');\n        }\n        if (context.scopeId) {\n            openTag.push(` ${context.scopeId}`);\n        }\n        node.ssrCodegenNode = createTemplateLiteral(openTag);\n    };\n};\nfunction buildSSRProps(props, directives, context) {\n    let mergePropsArgs = [];\n    if (props) {\n        if (props.type === 14 /* NodeTypes.JS_CALL_EXPRESSION */) {\n            // already a mergeProps call\n            mergePropsArgs = props.arguments;\n        }\n        else {\n            mergePropsArgs.push(props);\n        }\n    }\n    if (directives.length) {\n        for (const dir of directives) {\n            mergePropsArgs.push(createCallExpression(context.helper(SSR_GET_DIRECTIVE_PROPS), [\n                `_ctx`,\n                ...buildDirectiveArgs(dir, context).elements\n            ]));\n        }\n    }\n    return mergePropsArgs.length > 1\n        ? createCallExpression(context.helper(MERGE_PROPS), mergePropsArgs)\n        : mergePropsArgs[0];\n}\nfunction isTrueFalseValue(prop) {\n    if (prop.type === 7 /* NodeTypes.DIRECTIVE */) {\n        return (prop.name === 'bind' &&\n            prop.arg &&\n            isStaticExp(prop.arg) &&\n            (prop.arg.content === 'true-value' || prop.arg.content === 'false-value'));\n    }\n    else {\n        return prop.name === 'true-value' || prop.name === 'false-value';\n    }\n}\nfunction isTextareaWithValue(node, prop) {\n    return !!(node.tag === 'textarea' &&\n        prop.name === 'bind' &&\n        isStaticArgOf(prop.arg, 'value'));\n}\nfunction mergeCall(call, arg) {\n    const existing = call.arguments[0];\n    if (existing.type === 17 /* NodeTypes.JS_ARRAY_EXPRESSION */) {\n        existing.elements.push(arg);\n    }\n    else {\n        call.arguments[0] = createArrayExpression([existing, arg]);\n    }\n}\nfunction removeStaticBinding(tag, binding) {\n    const regExp = new RegExp(`^ ${binding}=\".+\"$`);\n    const i = tag.findIndex(e => typeof e === 'string' && regExp.test(e));\n    if (i > -1) {\n        tag.splice(i, 1);\n    }\n}\nfunction findVModel(node) {\n    return node.props.find(p => p.type === 7 /* NodeTypes.DIRECTIVE */ && p.name === 'model' && p.exp);\n}\nfunction ssrProcessElement(node, context) {\n    const isVoidTag = context.options.isVoidTag || NO;\n    const elementsToAdd = node.ssrCodegenNode.elements;\n    for (let j = 0; j < elementsToAdd.length; j++) {\n        context.pushStringPart(elementsToAdd[j]);\n    }\n    // Handle slot scopeId\n    if (context.withSlotScopeId) {\n        context.pushStringPart(createSimpleExpression(`_scopeId`, false));\n    }\n    // close open tag\n    context.pushStringPart(`>`);\n    const rawChildren = rawChildrenMap.get(node);\n    if (rawChildren) {\n        context.pushStringPart(rawChildren);\n    }\n    else if (node.children.length) {\n        processChildren(node, context);\n    }\n    if (!isVoidTag(node.tag)) {\n        // push closing tag\n        context.pushStringPart(`</${node.tag}>`);\n    }\n}\n\nconst wipMap$1 = new WeakMap();\n// phase 1: build props\nfunction ssrTransformTransitionGroup(node, context) {\n    return () => {\n        const tag = findProp(node, 'tag');\n        if (tag) {\n            const otherProps = node.props.filter(p => p !== tag);\n            const { props, directives } = buildProps(node, context, otherProps, true /* isComponent */, false /* isDynamicComponent */, true /* ssr (skip event listeners) */);\n            let propsExp = null;\n            if (props || directives.length) {\n                propsExp = createCallExpression(context.helper(SSR_RENDER_ATTRS), [\n                    buildSSRProps(props, directives, context)\n                ]);\n            }\n            wipMap$1.set(node, {\n                tag,\n                propsExp\n            });\n        }\n    };\n}\n// phase 2: process children\nfunction ssrProcessTransitionGroup(node, context) {\n    const entry = wipMap$1.get(node);\n    if (entry) {\n        const { tag, propsExp } = entry;\n        if (tag.type === 7 /* NodeTypes.DIRECTIVE */) {\n            // dynamic :tag\n            context.pushStringPart(`<`);\n            context.pushStringPart(tag.exp);\n            if (propsExp) {\n                context.pushStringPart(propsExp);\n            }\n            context.pushStringPart(`>`);\n            processChildren(node, context, false, \n            /**\n             * TransitionGroup has the special runtime behavior of flattening and\n             * concatenating all children into a single fragment (in order for them to\n             * be patched using the same key map) so we need to account for that here\n             * by disabling nested fragment wrappers from being generated.\n             */\n            true);\n            context.pushStringPart(`</`);\n            context.pushStringPart(tag.exp);\n            context.pushStringPart(`>`);\n        }\n        else {\n            // static tag\n            context.pushStringPart(`<${tag.value.content}`);\n            if (propsExp) {\n                context.pushStringPart(propsExp);\n            }\n            context.pushStringPart(`>`);\n            processChildren(node, context, false, true);\n            context.pushStringPart(`</${tag.value.content}>`);\n        }\n    }\n    else {\n        // fragment\n        processChildren(node, context, true, true);\n    }\n}\n\n// We need to construct the slot functions in the 1st pass to ensure proper\n// scope tracking, but the children of each slot cannot be processed until\n// the 2nd pass, so we store the WIP slot functions in a weakMap during the 1st\n// pass and complete them in the 2nd pass.\nconst wipMap = new WeakMap();\nconst WIP_SLOT = Symbol();\nconst componentTypeMap = new WeakMap();\n// ssr component transform is done in two phases:\n// In phase 1. we use `buildSlot` to analyze the children of the component into\n// WIP slot functions (it must be done in phase 1 because `buildSlot` relies on\n// the core transform context).\n// In phase 2. we convert the WIP slots from phase 1 into ssr-specific codegen\n// nodes.\nconst ssrTransformComponent = (node, context) => {\n    if (node.type !== 1 /* NodeTypes.ELEMENT */ ||\n        node.tagType !== 1 /* ElementTypes.COMPONENT */) {\n        return;\n    }\n    const component = resolveComponentType(node, context, true /* ssr */);\n    const isDynamicComponent = isObject$2(component) && component.callee === RESOLVE_DYNAMIC_COMPONENT;\n    componentTypeMap.set(node, component);\n    if (isSymbol$1(component)) {\n        if (component === SUSPENSE) {\n            return ssrTransformSuspense(node, context);\n        }\n        if (component === TRANSITION_GROUP) {\n            return ssrTransformTransitionGroup(node, context);\n        }\n        return; // other built-in components: fallthrough\n    }\n    // Build the fallback vnode-based branch for the component's slots.\n    // We need to clone the node into a fresh copy and use the buildSlots' logic\n    // to get access to the children of each slot. We then compile them with\n    // a child transform pipeline using vnode-based transforms (instead of ssr-\n    // based ones), and save the result branch (a ReturnStatement) in an array.\n    // The branch is retrieved when processing slots again in ssr mode.\n    const vnodeBranches = [];\n    const clonedNode = clone(node);\n    return function ssrPostTransformComponent() {\n        // Using the cloned node, build the normal VNode-based branches (for\n        // fallback in case the child is render-fn based). Store them in an array\n        // for later use.\n        if (clonedNode.children.length) {\n            buildSlots(clonedNode, context, (props, children) => {\n                vnodeBranches.push(createVNodeSlotBranch(props, children, context));\n                return createFunctionExpression(undefined);\n            });\n        }\n        let propsExp = `null`;\n        if (node.props.length) {\n            // note we are not passing ssr: true here because for components, v-on\n            // handlers should still be passed\n            const { props, directives } = buildProps(node, context, undefined, true, isDynamicComponent);\n            if (props || directives.length) {\n                propsExp = buildSSRProps(props, directives, context);\n            }\n        }\n        const wipEntries = [];\n        wipMap.set(node, wipEntries);\n        const buildSSRSlotFn = (props, children, loc) => {\n            const param0 = (props && stringifyExpression(props)) || `_`;\n            const fn = createFunctionExpression([param0, `_push`, `_parent`, `_scopeId`], undefined, // no return, assign body later\n            true, // newline\n            true, // isSlot\n            loc);\n            wipEntries.push({\n                type: WIP_SLOT,\n                fn,\n                children,\n                // also collect the corresponding vnode branch built earlier\n                vnodeBranch: vnodeBranches[wipEntries.length]\n            });\n            return fn;\n        };\n        const slots = node.children.length\n            ? buildSlots(node, context, buildSSRSlotFn).slots\n            : `null`;\n        if (typeof component !== 'string') {\n            // dynamic component that resolved to a `resolveDynamicComponent` call\n            // expression - since the resolved result may be a plain element (string)\n            // or a VNode, handle it with `renderVNode`.\n            node.ssrCodegenNode = createCallExpression(context.helper(SSR_RENDER_VNODE), [\n                `_push`,\n                createCallExpression(context.helper(CREATE_VNODE), [\n                    component,\n                    propsExp,\n                    slots\n                ]),\n                `_parent`\n            ]);\n        }\n        else {\n            node.ssrCodegenNode = createCallExpression(context.helper(SSR_RENDER_COMPONENT), [component, propsExp, slots, `_parent`]);\n        }\n    };\n};\nfunction ssrProcessComponent(node, context, parent) {\n    const component = componentTypeMap.get(node);\n    if (!node.ssrCodegenNode) {\n        // this is a built-in component that fell-through.\n        if (component === TELEPORT) {\n            return ssrProcessTeleport(node, context);\n        }\n        else if (component === SUSPENSE) {\n            return ssrProcessSuspense(node, context);\n        }\n        else if (component === TRANSITION_GROUP) {\n            return ssrProcessTransitionGroup(node, context);\n        }\n        else {\n            // real fall-through: Transition / KeepAlive\n            // just render its children.\n            // #5352: if is at root level of a slot, push an empty string.\n            // this does not affect the final output, but avoids all-comment slot\n            // content of being treated as empty by ssrRenderSlot().\n            if (parent.type === WIP_SLOT) {\n                context.pushStringPart(``);\n            }\n            // #5351: filter out comment children inside transition\n            if (component === TRANSITION) {\n                node.children = node.children.filter(c => c.type !== 3 /* NodeTypes.COMMENT */);\n            }\n            processChildren(node, context);\n        }\n    }\n    else {\n        // finish up slot function expressions from the 1st pass.\n        const wipEntries = wipMap.get(node) || [];\n        for (let i = 0; i < wipEntries.length; i++) {\n            const { fn, vnodeBranch } = wipEntries[i];\n            // For each slot, we generate two branches: one SSR-optimized branch and\n            // one normal vnode-based branch. The branches are taken based on the\n            // presence of the 2nd `_push` argument (which is only present if the slot\n            // is called by `_ssrRenderSlot`.\n            fn.body = createIfStatement(createSimpleExpression(`_push`, false), processChildrenAsStatement(wipEntries[i], context, false, true /* withSlotScopeId */), vnodeBranch);\n        }\n        // component is inside a slot, inherit slot scope Id\n        if (context.withSlotScopeId) {\n            node.ssrCodegenNode.arguments.push(`_scopeId`);\n        }\n        if (typeof component === 'string') {\n            // static component\n            context.pushStatement(createCallExpression(`_push`, [node.ssrCodegenNode]));\n        }\n        else {\n            // dynamic component (`resolveDynamicComponent` call)\n            // the codegen node is a `renderVNode` call\n            context.pushStatement(node.ssrCodegenNode);\n        }\n    }\n}\nconst rawOptionsMap = new WeakMap();\nconst [baseNodeTransforms, baseDirectiveTransforms] = getBaseTransformPreset(true);\nconst vnodeNodeTransforms = [...baseNodeTransforms, ...DOMNodeTransforms];\nconst vnodeDirectiveTransforms = Object.assign(Object.assign({}, baseDirectiveTransforms), DOMDirectiveTransforms);\nfunction createVNodeSlotBranch(props, children, parentContext) {\n    // apply a sub-transform using vnode-based transforms.\n    const rawOptions = rawOptionsMap.get(parentContext.root);\n    const subOptions = Object.assign(Object.assign({}, rawOptions), { \n        // overwrite with vnode-based transforms\n        nodeTransforms: [\n            ...vnodeNodeTransforms,\n            ...(rawOptions.nodeTransforms || [])\n        ], directiveTransforms: Object.assign(Object.assign({}, vnodeDirectiveTransforms), (rawOptions.directiveTransforms || {})) });\n    // wrap the children with a wrapper template for proper children treatment.\n    const wrapperNode = {\n        type: 1 /* NodeTypes.ELEMENT */,\n        ns: 0 /* Namespaces.HTML */,\n        tag: 'template',\n        tagType: 3 /* ElementTypes.TEMPLATE */,\n        isSelfClosing: false,\n        // important: provide v-slot=\"props\" on the wrapper for proper\n        // scope analysis\n        props: [\n            {\n                type: 7 /* NodeTypes.DIRECTIVE */,\n                name: 'slot',\n                exp: props,\n                arg: undefined,\n                modifiers: [],\n                loc: locStub\n            }\n        ],\n        children,\n        loc: locStub,\n        codegenNode: undefined\n    };\n    subTransform(wrapperNode, subOptions, parentContext);\n    return createReturnStatement(children);\n}\nfunction subTransform(node, options, parentContext) {\n    const childRoot = createRoot([node]);\n    const childContext = createTransformContext(childRoot, options);\n    // this sub transform is for vnode fallback branch so it should be handled\n    // like normal render functions\n    childContext.ssr = false;\n    // inherit parent scope analysis state\n    childContext.scopes = Object.assign({}, parentContext.scopes);\n    childContext.identifiers = Object.assign({}, parentContext.identifiers);\n    childContext.imports = parentContext.imports;\n    // traverse\n    traverseNode(childRoot, childContext);\n    ['helpers', 'components', 'directives'].forEach(key => {\n        childContext[key].forEach((value, helperKey) => {\n            if (key === 'helpers') {\n                const parentCount = parentContext.helpers.get(helperKey);\n                if (parentCount === undefined) {\n                    parentContext.helpers.set(helperKey, value);\n                }\n                else {\n                    parentContext.helpers.set(helperKey, value + parentCount);\n                }\n            }\n            else {\n                parentContext[key].add(value);\n            }\n        });\n    });\n    // imports/hoists are not merged because:\n    // - imports are only used for asset urls and should be consistent between\n    //   node/client branches\n    // - hoists are not enabled for the client branch here\n}\nfunction clone(v) {\n    if (isArray$3(v)) {\n        return v.map(clone);\n    }\n    else if (isObject$2(v)) {\n        const res = {};\n        for (const key in v) {\n            res[key] = clone(v[key]);\n        }\n        return res;\n    }\n    else {\n        return v;\n    }\n}\n\n// Because SSR codegen output is completely different from client-side output\n// (e.g. multiple elements can be concatenated into a single template literal\n// instead of each getting a corresponding call), we need to apply an extra\n// transform pass to convert the template AST into a fresh JS AST before\n// passing it to codegen.\nfunction ssrCodegenTransform(ast, options) {\n    const context = createSSRTransformContext(ast, options);\n    // inject SFC <style> CSS variables\n    // we do this instead of inlining the expression to ensure the vars are\n    // only resolved once per render\n    if (options.ssrCssVars) {\n        const cssContext = createTransformContext(createRoot([]), options);\n        const varsExp = processExpression(createSimpleExpression(options.ssrCssVars, false), cssContext);\n        context.body.push(createCompoundExpression([`const _cssVars = { style: `, varsExp, `}`]));\n        Array.from(cssContext.helpers.keys()).forEach(helper => {\n            ast.helpers.add(helper);\n        });\n    }\n    const isFragment = ast.children.length > 1 && ast.children.some(c => !isText$1(c));\n    processChildren(ast, context, isFragment);\n    ast.codegenNode = createBlockStatement(context.body);\n    // Finalize helpers.\n    // We need to separate helpers imported from 'vue' vs. '@vue/server-renderer'\n    ast.ssrHelpers = Array.from(new Set([\n        ...Array.from(ast.helpers).filter(h => h in ssrHelpers),\n        ...context.helpers\n    ]));\n    ast.helpers = new Set(Array.from(ast.helpers).filter(h => !(h in ssrHelpers)));\n}\nfunction createSSRTransformContext(root, options, helpers = new Set(), withSlotScopeId = false) {\n    const body = [];\n    let currentString = null;\n    return {\n        root,\n        options,\n        body,\n        helpers,\n        withSlotScopeId,\n        onError: options.onError ||\n            (e => {\n                throw e;\n            }),\n        helper(name) {\n            helpers.add(name);\n            return name;\n        },\n        pushStringPart(part) {\n            if (!currentString) {\n                const currentCall = createCallExpression(`_push`);\n                body.push(currentCall);\n                currentString = createTemplateLiteral([]);\n                currentCall.arguments.push(currentString);\n            }\n            const bufferedElements = currentString.elements;\n            const lastItem = bufferedElements[bufferedElements.length - 1];\n            if (isString$2(part) && isString$2(lastItem)) {\n                bufferedElements[bufferedElements.length - 1] += part;\n            }\n            else {\n                bufferedElements.push(part);\n            }\n        },\n        pushStatement(statement) {\n            // close current string\n            currentString = null;\n            body.push(statement);\n        }\n    };\n}\nfunction createChildContext(parent, withSlotScopeId = parent.withSlotScopeId) {\n    // ensure child inherits parent helpers\n    return createSSRTransformContext(parent.root, parent.options, parent.helpers, withSlotScopeId);\n}\nfunction processChildren(parent, context, asFragment = false, disableNestedFragments = false) {\n    if (asFragment) {\n        context.pushStringPart(`<!--[-->`);\n    }\n    const { children } = parent;\n    for (let i = 0; i < children.length; i++) {\n        const child = children[i];\n        switch (child.type) {\n            case 1 /* NodeTypes.ELEMENT */:\n                switch (child.tagType) {\n                    case 0 /* ElementTypes.ELEMENT */:\n                        ssrProcessElement(child, context);\n                        break;\n                    case 1 /* ElementTypes.COMPONENT */:\n                        ssrProcessComponent(child, context, parent);\n                        break;\n                    case 2 /* ElementTypes.SLOT */:\n                        ssrProcessSlotOutlet(child, context);\n                        break;\n                    case 3 /* ElementTypes.TEMPLATE */:\n                        // TODO\n                        break;\n                    default:\n                        context.onError(createSSRCompilerError(64 /* SSRErrorCodes.X_SSR_INVALID_AST_NODE */, child.loc));\n                        // make sure we exhaust all possible types\n                        const exhaustiveCheck = child;\n                        return exhaustiveCheck;\n                }\n                break;\n            case 2 /* NodeTypes.TEXT */:\n                context.pushStringPart(escapeHtml(child.content));\n                break;\n            case 3 /* NodeTypes.COMMENT */:\n                // no need to escape comment here because the AST can only\n                // contain valid comments.\n                context.pushStringPart(`<!--${child.content}-->`);\n                break;\n            case 5 /* NodeTypes.INTERPOLATION */:\n                context.pushStringPart(createCallExpression(context.helper(SSR_INTERPOLATE), [child.content]));\n                break;\n            case 9 /* NodeTypes.IF */:\n                ssrProcessIf(child, context, disableNestedFragments);\n                break;\n            case 11 /* NodeTypes.FOR */:\n                ssrProcessFor(child, context, disableNestedFragments);\n                break;\n            case 10 /* NodeTypes.IF_BRANCH */:\n                // no-op - handled by ssrProcessIf\n                break;\n            case 12 /* NodeTypes.TEXT_CALL */:\n            case 8 /* NodeTypes.COMPOUND_EXPRESSION */:\n                // no-op - these two types can never appear as template child node since\n                // `transformText` is not used during SSR compile.\n                break;\n            default:\n                context.onError(createSSRCompilerError(64 /* SSRErrorCodes.X_SSR_INVALID_AST_NODE */, child.loc));\n                // make sure we exhaust all possible types\n                const exhaustiveCheck = child;\n                return exhaustiveCheck;\n        }\n    }\n    if (asFragment) {\n        context.pushStringPart(`<!--]-->`);\n    }\n}\nfunction processChildrenAsStatement(parent, parentContext, asFragment = false, withSlotScopeId = parentContext.withSlotScopeId) {\n    const childContext = createChildContext(parentContext, withSlotScopeId);\n    processChildren(parent, childContext, asFragment);\n    return createBlockStatement(childContext.body);\n}\n\nconst ssrTransformModel = (dir, node, context) => {\n    const model = dir.exp;\n    function checkDuplicatedValue() {\n        const value = findProp(node, 'value');\n        if (value) {\n            context.onError(createDOMCompilerError(58 /* DOMErrorCodes.X_V_MODEL_UNNECESSARY_VALUE */, value.loc));\n        }\n    }\n    if (node.tagType === 0 /* ElementTypes.ELEMENT */) {\n        const res = { props: [] };\n        const defaultProps = [\n            // default value binding for text type inputs\n            createObjectProperty(`value`, model)\n        ];\n        if (node.tag === 'input') {\n            const type = findProp(node, 'type');\n            if (type) {\n                const value = findValueBinding(node);\n                if (type.type === 7 /* NodeTypes.DIRECTIVE */) {\n                    // dynamic type\n                    res.ssrTagParts = [\n                        createCallExpression(context.helper(SSR_RENDER_DYNAMIC_MODEL), [\n                            type.exp,\n                            model,\n                            value\n                        ])\n                    ];\n                }\n                else if (type.value) {\n                    // static type\n                    switch (type.value.content) {\n                        case 'radio':\n                            res.props = [\n                                createObjectProperty(`checked`, createCallExpression(context.helper(SSR_LOOSE_EQUAL), [\n                                    model,\n                                    value\n                                ]))\n                            ];\n                            break;\n                        case 'checkbox':\n                            const trueValueBinding = findProp(node, 'true-value');\n                            if (trueValueBinding) {\n                                const trueValue = trueValueBinding.type === 6 /* NodeTypes.ATTRIBUTE */\n                                    ? JSON.stringify(trueValueBinding.value.content)\n                                    : trueValueBinding.exp;\n                                res.props = [\n                                    createObjectProperty(`checked`, createCallExpression(context.helper(SSR_LOOSE_EQUAL), [\n                                        model,\n                                        trueValue\n                                    ]))\n                                ];\n                            }\n                            else {\n                                res.props = [\n                                    createObjectProperty(`checked`, createConditionalExpression(createCallExpression(`Array.isArray`, [model]), createCallExpression(context.helper(SSR_LOOSE_CONTAIN), [\n                                        model,\n                                        value\n                                    ]), model))\n                                ];\n                            }\n                            break;\n                        case 'file':\n                            context.onError(createDOMCompilerError(57 /* DOMErrorCodes.X_V_MODEL_ON_FILE_INPUT_ELEMENT */, dir.loc));\n                            break;\n                        default:\n                            checkDuplicatedValue();\n                            res.props = defaultProps;\n                            break;\n                    }\n                }\n            }\n            else if (hasDynamicKeyVBind(node)) ;\n            else {\n                // text type\n                checkDuplicatedValue();\n                res.props = defaultProps;\n            }\n        }\n        else if (node.tag === 'textarea') {\n            checkDuplicatedValue();\n            node.children = [createInterpolation(model, model.loc)];\n        }\n        else if (node.tag === 'select') ;\n        else {\n            context.onError(createDOMCompilerError(55 /* DOMErrorCodes.X_V_MODEL_ON_INVALID_ELEMENT */, dir.loc));\n        }\n        return res;\n    }\n    else {\n        // component v-model\n        return transformModel$1(dir, node, context);\n    }\n};\nfunction findValueBinding(node) {\n    const valueBinding = findProp(node, 'value');\n    return valueBinding\n        ? valueBinding.type === 7 /* NodeTypes.DIRECTIVE */\n            ? valueBinding.exp\n            : createSimpleExpression(valueBinding.value.content, true)\n        : createSimpleExpression(`null`, false);\n}\n\nconst ssrTransformShow = (dir, node, context) => {\n    if (!dir.exp) {\n        context.onError(createDOMCompilerError(59 /* DOMErrorCodes.X_V_SHOW_NO_EXPRESSION */));\n    }\n    return {\n        props: [\n            createObjectProperty(`style`, createConditionalExpression(dir.exp, createSimpleExpression(`null`, false), createObjectExpression([\n                createObjectProperty(`display`, createSimpleExpression(`none`, true))\n            ]), false /* no newline */))\n        ]\n    };\n};\n\nconst filterChild = (node) => node.children.filter(n => n.type !== 3 /* NodeTypes.COMMENT */);\nconst hasSingleChild = (node) => filterChild(node).length === 1;\nconst ssrInjectFallthroughAttrs = (node, context) => {\n    // _attrs is provided as a function argument.\n    // mark it as a known identifier so that it doesn't get prefixed by\n    // transformExpression.\n    if (node.type === 0 /* NodeTypes.ROOT */) {\n        context.identifiers._attrs = 1;\n    }\n    if (node.type === 1 /* NodeTypes.ELEMENT */ &&\n        node.tagType === 1 /* ElementTypes.COMPONENT */ &&\n        (isBuiltInType(node.tag, 'Transition') ||\n            isBuiltInType(node.tag, 'KeepAlive'))) {\n        const rootChildren = filterChild(context.root);\n        if (rootChildren.length === 1 && rootChildren[0] === node) {\n            if (hasSingleChild(node)) {\n                injectFallthroughAttrs(node.children[0]);\n            }\n            return;\n        }\n    }\n    const parent = context.parent;\n    if (!parent || parent.type !== 0 /* NodeTypes.ROOT */) {\n        return;\n    }\n    if (node.type === 10 /* NodeTypes.IF_BRANCH */ && hasSingleChild(node)) {\n        // detect cases where the parent v-if is not the only root level node\n        let hasEncounteredIf = false;\n        for (const c of filterChild(parent)) {\n            if (c.type === 9 /* NodeTypes.IF */ ||\n                (c.type === 1 /* NodeTypes.ELEMENT */ && findDir(c, 'if'))) {\n                // multiple root v-if\n                if (hasEncounteredIf)\n                    return;\n                hasEncounteredIf = true;\n            }\n            else if (\n            // node before v-if\n            !hasEncounteredIf ||\n                // non else nodes\n                !(c.type === 1 /* NodeTypes.ELEMENT */ && findDir(c, /else/, true))) {\n                return;\n            }\n        }\n        injectFallthroughAttrs(node.children[0]);\n    }\n    else if (hasSingleChild(parent)) {\n        injectFallthroughAttrs(node);\n    }\n};\nfunction injectFallthroughAttrs(node) {\n    if (node.type === 1 /* NodeTypes.ELEMENT */ &&\n        (node.tagType === 0 /* ElementTypes.ELEMENT */ ||\n            node.tagType === 1 /* ElementTypes.COMPONENT */) &&\n        !findDir(node, 'for')) {\n        node.props.push({\n            type: 7 /* NodeTypes.DIRECTIVE */,\n            name: 'bind',\n            arg: undefined,\n            exp: createSimpleExpression(`_attrs`, false),\n            modifiers: [],\n            loc: locStub\n        });\n    }\n}\n\nconst ssrInjectCssVars = (node, context) => {\n    if (!context.ssrCssVars) {\n        return;\n    }\n    // _cssVars is initialized once per render function\n    // the code is injected in ssrCodegenTransform when creating the\n    // ssr transform context\n    if (node.type === 0 /* NodeTypes.ROOT */) {\n        context.identifiers._cssVars = 1;\n    }\n    const parent = context.parent;\n    if (!parent || parent.type !== 0 /* NodeTypes.ROOT */) {\n        return;\n    }\n    if (node.type === 10 /* NodeTypes.IF_BRANCH */) {\n        for (const child of node.children) {\n            injectCssVars(child);\n        }\n    }\n    else {\n        injectCssVars(node);\n    }\n};\nfunction injectCssVars(node) {\n    if (node.type === 1 /* NodeTypes.ELEMENT */ &&\n        (node.tagType === 0 /* ElementTypes.ELEMENT */ ||\n            node.tagType === 1 /* ElementTypes.COMPONENT */) &&\n        !findDir(node, 'for')) {\n        if (isBuiltInType(node.tag, 'Suspense')) {\n            for (const child of node.children) {\n                if (child.type === 1 /* NodeTypes.ELEMENT */ &&\n                    child.tagType === 3 /* ElementTypes.TEMPLATE */) {\n                    // suspense slot\n                    child.children.forEach(injectCssVars);\n                }\n                else {\n                    injectCssVars(child);\n                }\n            }\n        }\n        else {\n            node.props.push({\n                type: 7 /* NodeTypes.DIRECTIVE */,\n                name: 'bind',\n                arg: undefined,\n                exp: createSimpleExpression(`_cssVars`, false),\n                modifiers: [],\n                loc: locStub\n            });\n        }\n    }\n}\n\nfunction compile(template, options = {}) {\n    options = Object.assign(Object.assign(Object.assign({}, options), parserOptions), { ssr: true, inSSR: true, scopeId: options.mode === 'function' ? null : options.scopeId, \n        // always prefix since compiler-ssr doesn't have size concern\n        prefixIdentifiers: true, \n        // disable optimizations that are unnecessary for ssr\n        cacheHandlers: false, hoistStatic: false });\n    const ast = baseParse(template, options);\n    // Save raw options for AST. This is needed when performing sub-transforms\n    // on slot vnode branches.\n    rawOptionsMap.set(ast, options);\n    transform$1(ast, Object.assign(Object.assign({}, options), { hoistStatic: false, nodeTransforms: [\n            ssrTransformIf,\n            ssrTransformFor,\n            trackVForSlotScopes,\n            transformExpression,\n            ssrTransformSlotOutlet,\n            ssrInjectFallthroughAttrs,\n            ssrInjectCssVars,\n            ssrTransformElement,\n            ssrTransformComponent,\n            trackSlotScopes,\n            transformStyle,\n            ...(options.nodeTransforms || []) // user transforms\n        ], directiveTransforms: Object.assign({ \n            // reusing core v-bind\n            bind: transformBind, on: transformOn$1, \n            // model and show has dedicated SSR handling\n            model: ssrTransformModel, show: ssrTransformShow, \n            // the following are ignored during SSR\n            // on: noopDirectiveTransform,\n            cloak: noopDirectiveTransform, once: noopDirectiveTransform, memo: noopDirectiveTransform }, (options.directiveTransforms || {}) // user transforms\n        ) }));\n    // traverse the template AST and convert into SSR codegen AST\n    // by replacing ast.codegenNode.\n    ssrCodegenTransform(ast, options);\n    return generate(ast, options);\n}\n\nvar CompilerSSR = /*#__PURE__*/Object.freeze({\n  __proto__: null,\n  compile: compile\n});\n\nvar _polyfillNode_fs = {};\n\nvar _polyfillNode_fs$1 = /*#__PURE__*/Object.freeze({\n  __proto__: null,\n  default: _polyfillNode_fs\n});\n\nvar require$$0$2 = /*@__PURE__*/getAugmentedNamespace(_polyfillNode_fs$1);\n\nvar require$$2$1 = /*@__PURE__*/getAugmentedNamespace(_polyfillNode_path);\n\nvar require$$0$1 = /*@__PURE__*/getAugmentedNamespace(_polyfillNode_util$1);\n\nconst hasWarned$1 = {};\nfunction warnOnce$4(msg) {\n    const isNodeProd = typeof process !== 'undefined' && process.env.NODE_ENV === 'production';\n    if (!isNodeProd && !false && !hasWarned$1[msg]) {\n        hasWarned$1[msg] = true;\n        warn$1(msg);\n    }\n}\nfunction warn$1(msg) {\n    console.warn(`\\x1b[1m\\x1b[33m[@vue/compiler-sfc]\\x1b[0m\\x1b[33m ${msg}\\x1b[0m\\n`);\n}\n\nfunction preprocess$1({ source, filename, preprocessOptions }, preprocessor) {\n    // Consolidate exposes a callback based API, but the callback is in fact\n    // called synchronously for most templating engines. In our case, we have to\n    // expose a synchronous API so that it is usable in Jest transforms (which\n    // have to be sync because they are applied via Node.js require hooks)\n    let res = '';\n    let err = null;\n    preprocessor.render(source, Object.assign({ filename }, preprocessOptions), (_err, _res) => {\n        if (_err)\n            err = _err;\n        res = _res;\n    });\n    if (err)\n        throw err;\n    return res;\n}\nfunction compileTemplate(options) {\n    const { preprocessLang, preprocessCustomRequire } = options;\n    if (preprocessLang &&\n        !preprocessCustomRequire) {\n        throw new Error(`[@vue/compiler-sfc] Template preprocessing in the browser build must ` +\n            `provide the \\`preprocessCustomRequire\\` option to return the in-browser ` +\n            `version of the preprocessor in the shape of { render(): string }.`);\n    }\n    const preprocessor = preprocessLang\n        ? preprocessCustomRequire\n            ? preprocessCustomRequire(preprocessLang)\n            : undefined\n                \n        : false;\n    if (preprocessor) {\n        try {\n            return doCompileTemplate(Object.assign(Object.assign({}, options), { source: preprocess$1(options, preprocessor) }));\n        }\n        catch (e) {\n            return {\n                code: `export default function render() {}`,\n                source: options.source,\n                tips: [],\n                errors: [e]\n            };\n        }\n    }\n    else if (preprocessLang) {\n        return {\n            code: `export default function render() {}`,\n            source: options.source,\n            tips: [\n                `Component ${options.filename} uses lang ${preprocessLang} for template. Please install the language preprocessor.`\n            ],\n            errors: [\n                `Component ${options.filename} uses lang ${preprocessLang} for template, however it is not installed.`\n            ]\n        };\n    }\n    else {\n        return doCompileTemplate(options);\n    }\n}\nfunction doCompileTemplate({ filename, id, scoped, slotted, inMap, source, ssr = false, ssrCssVars, isProd = false, compiler = ssr ? CompilerSSR : CompilerDOM, compilerOptions = {}, transformAssetUrls }) {\n    const errors = [];\n    const warnings = [];\n    let nodeTransforms = [];\n    if (isObject$2(transformAssetUrls)) {\n        const assetOptions = normalizeOptions(transformAssetUrls);\n        nodeTransforms = [\n            createAssetUrlTransformWithOptions(assetOptions),\n            createSrcsetTransformWithOptions(assetOptions)\n        ];\n    }\n    else if (transformAssetUrls !== false) {\n        nodeTransforms = [transformAssetUrl, transformSrcset];\n    }\n    if (ssr && !ssrCssVars) {\n        warnOnce$4(`compileTemplate is called with \\`ssr: true\\` but no ` +\n            `corresponding \\`cssVars\\` option.\\`.`);\n    }\n    if (!id) {\n        warnOnce$4(`compileTemplate now requires the \\`id\\` option.\\`.`);\n        id = '';\n    }\n    const shortId = id.replace(/^data-v-/, '');\n    const longId = `data-v-${shortId}`;\n    let { code, ast, preamble, map } = compiler.compile(source, Object.assign(Object.assign({ mode: 'module', prefixIdentifiers: true, hoistStatic: true, cacheHandlers: true, ssrCssVars: ssr && ssrCssVars && ssrCssVars.length\n            ? genCssVarsFromList(ssrCssVars, shortId, isProd, true)\n            : '', scopeId: scoped ? longId : undefined, slotted, sourceMap: true }, compilerOptions), { nodeTransforms: nodeTransforms.concat(compilerOptions.nodeTransforms || []), filename, onError: e => errors.push(e), onWarn: w => warnings.push(w) }));\n    // inMap should be the map produced by ./parse.ts which is a simple line-only\n    // mapping. If it is present, we need to adjust the final map and errors to\n    // reflect the original line numbers.\n    if (inMap) {\n        if (map) {\n            map = mapLines(inMap, map);\n        }\n        if (errors.length) {\n            patchErrors(errors, source, inMap);\n        }\n    }\n    const tips = warnings.map(w => {\n        let msg = w.message;\n        if (w.loc) {\n            msg += `\\n${generateCodeFrame(source, w.loc.start.offset, w.loc.end.offset)}`;\n        }\n        return msg;\n    });\n    return { code, ast, preamble, source, errors, tips, map };\n}\nfunction mapLines(oldMap, newMap) {\n    if (!oldMap)\n        return newMap;\n    if (!newMap)\n        return oldMap;\n    const oldMapConsumer = new SourceMapConsumer$5(oldMap);\n    const newMapConsumer = new SourceMapConsumer$5(newMap);\n    const mergedMapGenerator = new SourceMapGenerator$6();\n    newMapConsumer.eachMapping(m => {\n        if (m.originalLine == null) {\n            return;\n        }\n        const origPosInOldMap = oldMapConsumer.originalPositionFor({\n            line: m.originalLine,\n            column: m.originalColumn\n        });\n        if (origPosInOldMap.source == null) {\n            return;\n        }\n        mergedMapGenerator.addMapping({\n            generated: {\n                line: m.generatedLine,\n                column: m.generatedColumn\n            },\n            original: {\n                line: origPosInOldMap.line,\n                // use current column, since the oldMap produced by @vue/compiler-sfc\n                // does not\n                column: m.originalColumn\n            },\n            source: origPosInOldMap.source,\n            name: origPosInOldMap.name\n        });\n    });\n    // source-map's type definition is incomplete\n    const generator = mergedMapGenerator;\n    oldMapConsumer.sources.forEach((sourceFile) => {\n        generator._sources.add(sourceFile);\n        const sourceContent = oldMapConsumer.sourceContentFor(sourceFile);\n        if (sourceContent != null) {\n            mergedMapGenerator.setSourceContent(sourceFile, sourceContent);\n        }\n    });\n    generator._sourceRoot = oldMap.sourceRoot;\n    generator._file = oldMap.file;\n    return generator.toJSON();\n}\nfunction patchErrors(errors, source, inMap) {\n    const originalSource = inMap.sourcesContent[0];\n    const offset = originalSource.indexOf(source);\n    const lineOffset = originalSource.slice(0, offset).split(/\\r?\\n/).length - 1;\n    errors.forEach(err => {\n        if (err.loc) {\n            err.loc.start.line += lineOffset;\n            err.loc.start.offset += offset;\n            if (err.loc.end !== err.loc.start) {\n                err.loc.end.line += lineOffset;\n                err.loc.end.offset += offset;\n            }\n        }\n    });\n}\n\nconst defaultExportRE = /((?:^|\\n|;)\\s*)export(\\s*)default/;\nconst namedDefaultExportRE = /((?:^|\\n|;)\\s*)export(.+)(?:as)?(\\s*)default/s;\nconst exportDefaultClassRE = /((?:^|\\n|;)\\s*)export\\s+default\\s+class\\s+([\\w$]+)/;\n/**\n * Utility for rewriting `export default` in a script block into a variable\n * declaration so that we can inject things into it\n */\nfunction rewriteDefault(input, as, parserPlugins) {\n    if (!hasDefaultExport(input)) {\n        return input + `\\nconst ${as} = {}`;\n    }\n    let replaced;\n    const classMatch = input.match(exportDefaultClassRE);\n    if (classMatch) {\n        replaced =\n            input.replace(exportDefaultClassRE, '$1class $2') +\n                `\\nconst ${as} = ${classMatch[2]}`;\n    }\n    else {\n        replaced = input.replace(defaultExportRE, `$1const ${as} =`);\n    }\n    if (!hasDefaultExport(replaced)) {\n        return replaced;\n    }\n    // if the script somehow still contains `default export`, it probably has\n    // multi-line comments or template strings. fallback to a full parse.\n    const s = new MagicString$1(input);\n    const ast = parse_1$1(input, {\n        sourceType: 'module',\n        plugins: parserPlugins\n    }).program.body;\n    ast.forEach(node => {\n        if (node.type === 'ExportDefaultDeclaration') {\n            if (node.declaration.type === 'ClassDeclaration') {\n                s.overwrite(node.start, node.declaration.id.start, `class `);\n                s.append(`\\nconst ${as} = ${node.declaration.id.name}`);\n            }\n            else {\n                s.overwrite(node.start, node.declaration.start, `const ${as} = `);\n            }\n        }\n        if (node.type === 'ExportNamedDeclaration') {\n            for (const specifier of node.specifiers) {\n                if (specifier.type === 'ExportSpecifier' &&\n                    specifier.exported.type === 'Identifier' &&\n                    specifier.exported.name === 'default') {\n                    if (node.source) {\n                        if (specifier.local.name === 'default') {\n                            const end = specifierEnd(input, specifier.local.end, node.end);\n                            s.prepend(`import { default as __VUE_DEFAULT__ } from '${node.source.value}'\\n`);\n                            s.overwrite(specifier.start, end, ``);\n                            s.append(`\\nconst ${as} = __VUE_DEFAULT__`);\n                            continue;\n                        }\n                        else {\n                            const end = specifierEnd(input, specifier.exported.end, node.end);\n                            s.prepend(`import { ${input.slice(specifier.local.start, specifier.local.end)} } from '${node.source.value}'\\n`);\n                            s.overwrite(specifier.start, end, ``);\n                            s.append(`\\nconst ${as} = ${specifier.local.name}`);\n                            continue;\n                        }\n                    }\n                    const end = specifierEnd(input, specifier.end, node.end);\n                    s.overwrite(specifier.start, end, ``);\n                    s.append(`\\nconst ${as} = ${specifier.local.name}`);\n                }\n            }\n        }\n    });\n    return s.toString();\n}\nfunction hasDefaultExport(input) {\n    return defaultExportRE.test(input) || namedDefaultExportRE.test(input);\n}\nfunction specifierEnd(input, end, nodeEnd) {\n    // export { default   , foo } ...\n    let hasCommas = false;\n    let oldEnd = end;\n    while (end < nodeEnd) {\n        if (/\\s/.test(input.charAt(end))) {\n            end++;\n        }\n        else if (input.charAt(end) === ',') {\n            end++;\n            hasCommas = true;\n            break;\n        }\n        else if (input.charAt(end) === '}') {\n            break;\n        }\n    }\n    return hasCommas ? end : oldEnd;\n}\n\nconst CONVERT_SYMBOL = '$';\nconst ESCAPE_SYMBOL = '$$';\nconst IMPORT_SOURCE = 'vue/macros';\nconst shorthands = ['ref', 'computed', 'shallowRef', 'toRef', 'customRef'];\nconst transformCheckRE = /[^\\w]\\$(?:\\$|ref|computed|shallowRef)?\\s*(\\(|\\<)/;\nfunction shouldTransform(src) {\n    return transformCheckRE.test(src);\n}\nfunction transform(src, { filename, sourceMap, parserPlugins, importHelpersFrom = 'vue' } = {}) {\n    const plugins = parserPlugins || [];\n    if (filename) {\n        if (/\\.tsx?$/.test(filename)) {\n            plugins.push('typescript');\n        }\n        if (filename.endsWith('x')) {\n            plugins.push('jsx');\n        }\n    }\n    const ast = parse_1$1(src, {\n        sourceType: 'module',\n        plugins\n    });\n    const s = new MagicString$1(src);\n    const res = transformAST(ast.program, s, 0);\n    // inject helper imports\n    if (res.importedHelpers.length) {\n        s.prepend(`import { ${res.importedHelpers\n            .map(h => `${h} as _${h}`)\n            .join(', ')} } from '${importHelpersFrom}'\\n`);\n    }\n    return Object.assign(Object.assign({}, res), { code: s.toString(), map: sourceMap\n            ? s.generateMap({\n                source: filename,\n                hires: true,\n                includeContent: true\n            })\n            : null });\n}\nfunction transformAST(ast, s, offset = 0, knownRefs, knownProps) {\n    // TODO remove when out of experimental\n    warnExperimental();\n    const userImports = Object.create(null);\n    for (const node of ast.body) {\n        if (node.type !== 'ImportDeclaration')\n            continue;\n        walkImportDeclaration(node);\n    }\n    // macro import handling\n    let convertSymbol;\n    let escapeSymbol;\n    for (const { local, imported, source, specifier } of Object.values(userImports)) {\n        if (source === IMPORT_SOURCE) {\n            if (imported === ESCAPE_SYMBOL) {\n                escapeSymbol = local;\n            }\n            else if (imported === CONVERT_SYMBOL) {\n                convertSymbol = local;\n            }\n            else if (imported !== local) {\n                error(`macro imports for ref-creating methods do not support aliasing.`, specifier);\n            }\n        }\n    }\n    // default symbol\n    if (!convertSymbol && !userImports[CONVERT_SYMBOL]) {\n        convertSymbol = CONVERT_SYMBOL;\n    }\n    if (!escapeSymbol && !userImports[ESCAPE_SYMBOL]) {\n        escapeSymbol = ESCAPE_SYMBOL;\n    }\n    const importedHelpers = new Set();\n    const rootScope = {};\n    const scopeStack = [rootScope];\n    let currentScope = rootScope;\n    let escapeScope; // inside $$()\n    const excludedIds = new WeakSet();\n    const parentStack = [];\n    const propsLocalToPublicMap = Object.create(null);\n    if (knownRefs) {\n        for (const key of knownRefs) {\n            rootScope[key] = {};\n        }\n    }\n    if (knownProps) {\n        for (const key in knownProps) {\n            const { local, isConst } = knownProps[key];\n            rootScope[local] = {\n                isProp: true,\n                isConst: !!isConst\n            };\n            propsLocalToPublicMap[local] = key;\n        }\n    }\n    function walkImportDeclaration(node) {\n        const source = node.source.value;\n        if (source === IMPORT_SOURCE) {\n            s.remove(node.start + offset, node.end + offset);\n        }\n        for (const specifier of node.specifiers) {\n            const local = specifier.local.name;\n            const imported = (specifier.type === 'ImportSpecifier' &&\n                specifier.imported.type === 'Identifier' &&\n                specifier.imported.name) ||\n                'default';\n            userImports[local] = {\n                source,\n                local,\n                imported,\n                specifier\n            };\n        }\n    }\n    function isRefCreationCall(callee) {\n        if (!convertSymbol || currentScope[convertSymbol] !== undefined) {\n            return false;\n        }\n        if (callee === convertSymbol) {\n            return convertSymbol;\n        }\n        if (callee[0] === '$' && shorthands.includes(callee.slice(1))) {\n            return callee;\n        }\n        return false;\n    }\n    function error(msg, node) {\n        const e = new Error(msg);\n        e.node = node;\n        throw e;\n    }\n    function helper(msg) {\n        importedHelpers.add(msg);\n        return `_${msg}`;\n    }\n    function registerBinding(id, binding) {\n        excludedIds.add(id);\n        if (currentScope) {\n            currentScope[id.name] = binding ? binding : false;\n        }\n        else {\n            error('registerBinding called without active scope, something is wrong.', id);\n        }\n    }\n    const registerRefBinding = (id, isConst = false) => registerBinding(id, { isConst });\n    let tempVarCount = 0;\n    function genTempVar() {\n        return `__$temp_${++tempVarCount}`;\n    }\n    function snip(node) {\n        return s.original.slice(node.start + offset, node.end + offset);\n    }\n    function walkScope(node, isRoot = false) {\n        for (const stmt of node.body) {\n            if (stmt.type === 'VariableDeclaration') {\n                walkVariableDeclaration(stmt, isRoot);\n            }\n            else if (stmt.type === 'FunctionDeclaration' ||\n                stmt.type === 'ClassDeclaration') {\n                if (stmt.declare || !stmt.id)\n                    continue;\n                registerBinding(stmt.id);\n            }\n            else if ((stmt.type === 'ForOfStatement' || stmt.type === 'ForInStatement') &&\n                stmt.left.type === 'VariableDeclaration') {\n                walkVariableDeclaration(stmt.left);\n            }\n            else if (stmt.type === 'ExportNamedDeclaration' &&\n                stmt.declaration &&\n                stmt.declaration.type === 'VariableDeclaration') {\n                walkVariableDeclaration(stmt.declaration, isRoot);\n            }\n            else if (stmt.type === 'LabeledStatement' &&\n                stmt.body.type === 'VariableDeclaration') {\n                walkVariableDeclaration(stmt.body, isRoot);\n            }\n        }\n    }\n    function walkVariableDeclaration(stmt, isRoot = false) {\n        if (stmt.declare) {\n            return;\n        }\n        for (const decl of stmt.declarations) {\n            let refCall;\n            const isCall = decl.init &&\n                decl.init.type === 'CallExpression' &&\n                decl.init.callee.type === 'Identifier';\n            if (isCall &&\n                (refCall = isRefCreationCall(decl.init.callee.name))) {\n                processRefDeclaration(refCall, decl.id, decl.init, stmt.kind === 'const');\n            }\n            else {\n                const isProps = isRoot && isCall && decl.init.callee.name === 'defineProps';\n                for (const id of extractIdentifiers(decl.id)) {\n                    if (isProps) {\n                        // for defineProps destructure, only exclude them since they\n                        // are already passed in as knownProps\n                        excludedIds.add(id);\n                    }\n                    else {\n                        registerBinding(id);\n                    }\n                }\n            }\n        }\n    }\n    function processRefDeclaration(method, id, call, isConst) {\n        excludedIds.add(call.callee);\n        if (method === convertSymbol) {\n            // $\n            // remove macro\n            s.remove(call.callee.start + offset, call.callee.end + offset);\n            if (id.type === 'Identifier') {\n                // single variable\n                registerRefBinding(id, isConst);\n            }\n            else if (id.type === 'ObjectPattern') {\n                processRefObjectPattern(id, call, isConst);\n            }\n            else if (id.type === 'ArrayPattern') {\n                processRefArrayPattern(id, call, isConst);\n            }\n        }\n        else {\n            // shorthands\n            if (id.type === 'Identifier') {\n                registerRefBinding(id, isConst);\n                // replace call\n                s.overwrite(call.start + offset, call.start + method.length + offset, helper(method.slice(1)));\n            }\n            else {\n                error(`${method}() cannot be used with destructure patterns.`, call);\n            }\n        }\n    }\n    function processRefObjectPattern(pattern, call, isConst, tempVar, path = []) {\n        if (!tempVar) {\n            tempVar = genTempVar();\n            // const { x } = $(useFoo()) --> const __$temp_1 = useFoo()\n            s.overwrite(pattern.start + offset, pattern.end + offset, tempVar);\n        }\n        let nameId;\n        for (const p of pattern.properties) {\n            let key;\n            let defaultValue;\n            if (p.type === 'ObjectProperty') {\n                if (p.key.start === p.value.start) {\n                    // shorthand { foo }\n                    nameId = p.key;\n                    if (p.value.type === 'Identifier') {\n                        // avoid shorthand value identifier from being processed\n                        excludedIds.add(p.value);\n                    }\n                    else if (p.value.type === 'AssignmentPattern' &&\n                        p.value.left.type === 'Identifier') {\n                        // { foo = 1 }\n                        excludedIds.add(p.value.left);\n                        defaultValue = p.value.right;\n                    }\n                }\n                else {\n                    key = p.computed ? p.key : p.key.name;\n                    if (p.value.type === 'Identifier') {\n                        // { foo: bar }\n                        nameId = p.value;\n                    }\n                    else if (p.value.type === 'ObjectPattern') {\n                        processRefObjectPattern(p.value, call, isConst, tempVar, [\n                            ...path,\n                            key\n                        ]);\n                    }\n                    else if (p.value.type === 'ArrayPattern') {\n                        processRefArrayPattern(p.value, call, isConst, tempVar, [\n                            ...path,\n                            key\n                        ]);\n                    }\n                    else if (p.value.type === 'AssignmentPattern') {\n                        if (p.value.left.type === 'Identifier') {\n                            // { foo: bar = 1 }\n                            nameId = p.value.left;\n                            defaultValue = p.value.right;\n                        }\n                        else if (p.value.left.type === 'ObjectPattern') {\n                            processRefObjectPattern(p.value.left, call, isConst, tempVar, [\n                                ...path,\n                                [key, p.value.right]\n                            ]);\n                        }\n                        else if (p.value.left.type === 'ArrayPattern') {\n                            processRefArrayPattern(p.value.left, call, isConst, tempVar, [\n                                ...path,\n                                [key, p.value.right]\n                            ]);\n                        }\n                        else ;\n                    }\n                }\n            }\n            else {\n                // rest element { ...foo }\n                error(`reactivity destructure does not support rest elements.`, p);\n            }\n            if (nameId) {\n                registerRefBinding(nameId, isConst);\n                // inject toRef() after original replaced pattern\n                const source = pathToString(tempVar, path);\n                const keyStr = isString$2(key)\n                    ? `'${key}'`\n                    : key\n                        ? snip(key)\n                        : `'${nameId.name}'`;\n                const defaultStr = defaultValue ? `, ${snip(defaultValue)}` : ``;\n                s.appendLeft(call.end + offset, `,\\n  ${nameId.name} = ${helper('toRef')}(${source}, ${keyStr}${defaultStr})`);\n            }\n        }\n        if (nameId) {\n            s.appendLeft(call.end + offset, ';');\n        }\n    }\n    function processRefArrayPattern(pattern, call, isConst, tempVar, path = []) {\n        if (!tempVar) {\n            // const [x] = $(useFoo()) --> const __$temp_1 = useFoo()\n            tempVar = genTempVar();\n            s.overwrite(pattern.start + offset, pattern.end + offset, tempVar);\n        }\n        let nameId;\n        for (let i = 0; i < pattern.elements.length; i++) {\n            const e = pattern.elements[i];\n            if (!e)\n                continue;\n            let defaultValue;\n            if (e.type === 'Identifier') {\n                // [a] --> [__a]\n                nameId = e;\n            }\n            else if (e.type === 'AssignmentPattern') {\n                // [a = 1]\n                nameId = e.left;\n                defaultValue = e.right;\n            }\n            else if (e.type === 'RestElement') {\n                // [...a]\n                error(`reactivity destructure does not support rest elements.`, e);\n            }\n            else if (e.type === 'ObjectPattern') {\n                processRefObjectPattern(e, call, isConst, tempVar, [...path, i]);\n            }\n            else if (e.type === 'ArrayPattern') {\n                processRefArrayPattern(e, call, isConst, tempVar, [...path, i]);\n            }\n            if (nameId) {\n                registerRefBinding(nameId, isConst);\n                // inject toRef() after original replaced pattern\n                const source = pathToString(tempVar, path);\n                const defaultStr = defaultValue ? `, ${snip(defaultValue)}` : ``;\n                s.appendLeft(call.end + offset, `,\\n  ${nameId.name} = ${helper('toRef')}(${source}, ${i}${defaultStr})`);\n            }\n        }\n        if (nameId) {\n            s.appendLeft(call.end + offset, ';');\n        }\n    }\n    function pathToString(source, path) {\n        if (path.length) {\n            for (const seg of path) {\n                if (isArray$3(seg)) {\n                    source = `(${source}${segToString(seg[0])} || ${snip(seg[1])})`;\n                }\n                else {\n                    source += segToString(seg);\n                }\n            }\n        }\n        return source;\n    }\n    function segToString(seg) {\n        if (typeof seg === 'number') {\n            return `[${seg}]`;\n        }\n        else if (typeof seg === 'string') {\n            return `.${seg}`;\n        }\n        else {\n            return snip(seg);\n        }\n    }\n    function rewriteId(scope, id, parent, parentStack) {\n        if (hasOwn(scope, id.name)) {\n            const binding = scope[id.name];\n            if (binding) {\n                if (binding.isConst &&\n                    ((parent.type === 'AssignmentExpression' && id === parent.left) ||\n                        parent.type === 'UpdateExpression')) {\n                    error(`Assignment to constant variable.`, id);\n                }\n                const { isProp } = binding;\n                if (isStaticProperty(parent) && parent.shorthand) {\n                    // let binding used in a property shorthand\n                    // skip for destructure patterns\n                    if (!parent.inPattern ||\n                        isInDestructureAssignment(parent, parentStack)) {\n                        if (isProp) {\n                            if (escapeScope) {\n                                // prop binding in $$()\n                                // { prop } -> { prop: __props_prop }\n                                registerEscapedPropBinding(id);\n                                s.appendLeft(id.end + offset, `: __props_${propsLocalToPublicMap[id.name]}`);\n                            }\n                            else {\n                                // { prop } -> { prop: __props.prop }\n                                s.appendLeft(id.end + offset, `: ${genPropsAccessExp(propsLocalToPublicMap[id.name])}`);\n                            }\n                        }\n                        else {\n                            // { foo } -> { foo: foo.value }\n                            s.appendLeft(id.end + offset, `: ${id.name}.value`);\n                        }\n                    }\n                }\n                else {\n                    if (isProp) {\n                        if (escapeScope) {\n                            // x --> __props_x\n                            registerEscapedPropBinding(id);\n                            s.overwrite(id.start + offset, id.end + offset, `__props_${propsLocalToPublicMap[id.name]}`);\n                        }\n                        else {\n                            // x --> __props.x\n                            s.overwrite(id.start + offset, id.end + offset, genPropsAccessExp(propsLocalToPublicMap[id.name]));\n                        }\n                    }\n                    else {\n                        // x --> x.value\n                        s.appendLeft(id.end + offset, '.value');\n                    }\n                }\n            }\n            return true;\n        }\n        return false;\n    }\n    const propBindingRefs = {};\n    function registerEscapedPropBinding(id) {\n        if (!propBindingRefs.hasOwnProperty(id.name)) {\n            propBindingRefs[id.name] = true;\n            const publicKey = propsLocalToPublicMap[id.name];\n            s.prependRight(offset, `const __props_${publicKey} = ${helper(`toRef`)}(__props, '${publicKey}');\\n`);\n        }\n    }\n    // check root scope first\n    walkScope(ast, true);\n    walk$1(ast, {\n        enter(node, parent) {\n            parent && parentStack.push(parent);\n            // function scopes\n            if (isFunctionType(node)) {\n                scopeStack.push((currentScope = {}));\n                walkFunctionParams(node, registerBinding);\n                if (node.body.type === 'BlockStatement') {\n                    walkScope(node.body);\n                }\n                return;\n            }\n            // catch param\n            if (node.type === 'CatchClause') {\n                scopeStack.push((currentScope = {}));\n                if (node.param && node.param.type === 'Identifier') {\n                    registerBinding(node.param);\n                }\n                walkScope(node.body);\n                return;\n            }\n            // non-function block scopes\n            if (node.type === 'BlockStatement' && !isFunctionType(parent)) {\n                scopeStack.push((currentScope = {}));\n                walkScope(node);\n                return;\n            }\n            // skip type nodes\n            if (parent &&\n                parent.type.startsWith('TS') &&\n                parent.type !== 'TSAsExpression' &&\n                parent.type !== 'TSNonNullExpression' &&\n                parent.type !== 'TSTypeAssertion') {\n                return this.skip();\n            }\n            if (node.type === 'Identifier') {\n                const binding = rootScope[node.name];\n                if (\n                // if inside $$(), skip unless this is a destructured prop binding\n                !(escapeScope && (!binding || !binding.isProp)) &&\n                    isReferencedIdentifier(node, parent, parentStack) &&\n                    !excludedIds.has(node)) {\n                    // walk up the scope chain to check if id should be appended .value\n                    let i = scopeStack.length;\n                    while (i--) {\n                        if (rewriteId(scopeStack[i], node, parent, parentStack)) {\n                            return;\n                        }\n                    }\n                }\n            }\n            if (node.type === 'CallExpression' && node.callee.type === 'Identifier') {\n                const callee = node.callee.name;\n                const refCall = isRefCreationCall(callee);\n                if (refCall && (!parent || parent.type !== 'VariableDeclarator')) {\n                    return error(`${refCall} can only be used as the initializer of ` +\n                        `a variable declaration.`, node);\n                }\n                if (escapeSymbol &&\n                    currentScope[escapeSymbol] === undefined &&\n                    callee === escapeSymbol) {\n                    escapeScope = node;\n                    s.remove(node.callee.start + offset, node.callee.end + offset);\n                    if ((parent === null || parent === void 0 ? void 0 : parent.type) === 'ExpressionStatement') {\n                        // edge case where the call expression is an expression statement\n                        // if its own - prepend semicolon to avoid it being parsed as\n                        // function invocation of previous line\n                        let i = (node.leadingComments\n                            ? node.leadingComments[0].start\n                            : node.start) + offset;\n                        while (i--) {\n                            const char = s.original.charAt(i);\n                            if (char === '\\n') {\n                                // only insert semi if it's actually the fisrt thign after\n                                // newline\n                                s.prependRight(node.start + offset, ';');\n                                break;\n                            }\n                            else if (!/\\s/.test(char)) {\n                                break;\n                            }\n                        }\n                    }\n                }\n                // TODO remove when out of experimental\n                if (callee === '$raw') {\n                    error(`$raw() has been replaced by $$(). ` +\n                        `See ${RFC_LINK} for latest updates.`, node);\n                }\n                if (callee === '$fromRef') {\n                    error(`$fromRef() has been replaced by $(). ` +\n                        `See ${RFC_LINK} for latest updates.`, node);\n                }\n            }\n        },\n        leave(node, parent) {\n            parent && parentStack.pop();\n            if ((node.type === 'BlockStatement' && !isFunctionType(parent)) ||\n                isFunctionType(node)) {\n                scopeStack.pop();\n                currentScope = scopeStack[scopeStack.length - 1] || null;\n            }\n            if (node === escapeScope) {\n                escapeScope = undefined;\n            }\n        }\n    });\n    return {\n        rootRefs: Object.keys(rootScope).filter(key => {\n            const binding = rootScope[key];\n            return binding && !binding.isProp;\n        }),\n        importedHelpers: [...importedHelpers]\n    };\n}\nconst RFC_LINK = `https://github.com/vuejs/rfcs/discussions/369`;\nconst hasWarned = {};\nfunction warnExperimental() {\n    // eslint-disable-next-line\n    if (typeof window !== 'undefined') {\n        return;\n    }\n    warnOnce$3(`Reactivity transform is an experimental feature.\\n` +\n        `Experimental features may change behavior between patch versions.\\n` +\n        `It is recommended to pin your vue dependencies to exact versions to avoid breakage.\\n` +\n        `You can follow the proposal's status at ${RFC_LINK}.`);\n}\nfunction warnOnce$3(msg) {\n    const isNodeProd = typeof process !== 'undefined' && process.env.NODE_ENV === 'production';\n    if (!isNodeProd && !false && !hasWarned[msg]) {\n        hasWarned[msg] = true;\n        warn(msg);\n    }\n}\nfunction warn(msg) {\n    console.warn(`\\x1b[1m\\x1b[33m[@vue/reactivity-transform]\\x1b[0m\\x1b[33m ${msg}\\x1b[0m\\n`);\n}\n\n// Special compiler macros\nconst DEFINE_PROPS = 'defineProps';\nconst DEFINE_EMITS = 'defineEmits';\nconst DEFINE_EXPOSE = 'defineExpose';\nconst WITH_DEFAULTS = 'withDefaults';\n// constants\nconst DEFAULT_VAR = `__default__`;\nconst isBuiltInDir = makeMap(`once,memo,if,for,else,else-if,slot,text,html,on,bind,model,show,cloak,is`);\n/**\n * Compile `<script setup>`\n * It requires the whole SFC descriptor because we need to handle and merge\n * normal `<script>` + `<script setup>` if both are present.\n */\nfunction compileScript(sfc, options) {\n    var _a;\n    let { script, scriptSetup, source, filename } = sfc;\n    // feature flags\n    // TODO remove support for deprecated options when out of experimental\n    const enableReactivityTransform = !!options.reactivityTransform ||\n        !!options.refSugar ||\n        !!options.refTransform;\n    const enablePropsTransform = !!options.reactivityTransform || !!options.propsDestructureTransform;\n    const isProd = !!options.isProd;\n    const genSourceMap = options.sourceMap !== false;\n    let refBindings;\n    if (!options.id) {\n        warnOnce$4(`compileScript now requires passing the \\`id\\` option.\\n` +\n            `Upgrade your vite or vue-loader version for compatibility with ` +\n            `the latest experimental proposals.`);\n    }\n    const scopeId = options.id ? options.id.replace(/^data-v-/, '') : '';\n    const cssVars = sfc.cssVars;\n    const scriptLang = script && script.lang;\n    const scriptSetupLang = scriptSetup && scriptSetup.lang;\n    const isTS = scriptLang === 'ts' ||\n        scriptLang === 'tsx' ||\n        scriptSetupLang === 'ts' ||\n        scriptSetupLang === 'tsx';\n    // resolve parser plugins\n    const plugins = [];\n    if (!isTS || scriptLang === 'tsx' || scriptSetupLang === 'tsx') {\n        plugins.push('jsx');\n    }\n    else {\n        // If don't match the case of adding jsx, should remove the jsx from the babelParserPlugins\n        if (options.babelParserPlugins)\n            options.babelParserPlugins = options.babelParserPlugins.filter(n => n !== 'jsx');\n    }\n    if (options.babelParserPlugins)\n        plugins.push(...options.babelParserPlugins);\n    if (isTS) {\n        plugins.push('typescript');\n        if (!plugins.includes('decorators')) {\n            plugins.push('decorators-legacy');\n        }\n    }\n    if (!scriptSetup) {\n        if (!script) {\n            throw new Error(`[@vue/compiler-sfc] SFC contains no <script> tags.`);\n        }\n        if (scriptLang && !isTS && scriptLang !== 'jsx') {\n            // do not process non js/ts script blocks\n            return script;\n        }\n        try {\n            let content = script.content;\n            let map = script.map;\n            const scriptAst = parse_1$1(content, {\n                plugins,\n                sourceType: 'module'\n            }).program;\n            const bindings = analyzeScriptBindings(scriptAst.body);\n            if (enableReactivityTransform && shouldTransform(content)) {\n                const s = new MagicString$1(source);\n                const startOffset = script.loc.start.offset;\n                const endOffset = script.loc.end.offset;\n                const { importedHelpers } = transformAST(scriptAst, s, startOffset);\n                if (importedHelpers.length) {\n                    s.prepend(`import { ${importedHelpers\n                        .map(h => `${h} as _${h}`)\n                        .join(', ')} } from 'vue'\\n`);\n                }\n                s.remove(0, startOffset);\n                s.remove(endOffset, source.length);\n                content = s.toString();\n                if (genSourceMap) {\n                    map = s.generateMap({\n                        source: filename,\n                        hires: true,\n                        includeContent: true\n                    });\n                }\n            }\n            if (cssVars.length) {\n                content = rewriteDefault(content, DEFAULT_VAR, plugins);\n                content += genNormalScriptCssVarsCode(cssVars, bindings, scopeId, isProd);\n                content += `\\nexport default ${DEFAULT_VAR}`;\n            }\n            return Object.assign(Object.assign({}, script), { content,\n                map,\n                bindings, scriptAst: scriptAst.body });\n        }\n        catch (e) {\n            // silently fallback if parse fails since user may be using custom\n            // babel syntax\n            return script;\n        }\n    }\n    if (script && scriptLang !== scriptSetupLang) {\n        throw new Error(`[@vue/compiler-sfc] <script> and <script setup> must have the same ` +\n            `language type.`);\n    }\n    if (scriptSetupLang && !isTS && scriptSetupLang !== 'jsx') {\n        // do not process non js/ts script blocks\n        return scriptSetup;\n    }\n    // metadata that needs to be returned\n    const bindingMetadata = {};\n    const helperImports = new Set();\n    const userImports = Object.create(null);\n    const scriptBindings = Object.create(null);\n    const setupBindings = Object.create(null);\n    let defaultExport;\n    let hasDefinePropsCall = false;\n    let hasDefineEmitCall = false;\n    let hasDefineExposeCall = false;\n    let hasDefaultExportName = false;\n    let hasDefaultExportRender = false;\n    let propsRuntimeDecl;\n    let propsRuntimeDefaults;\n    let propsDestructureDecl;\n    let propsDestructureRestId;\n    let propsTypeDecl;\n    let propsTypeDeclRaw;\n    let propsIdentifier;\n    let emitsRuntimeDecl;\n    let emitsTypeDecl;\n    let emitsTypeDeclRaw;\n    let emitIdentifier;\n    let hasAwait = false;\n    let hasInlinedSsrRenderFn = false;\n    // props/emits declared via types\n    const typeDeclaredProps = {};\n    const typeDeclaredEmits = new Set();\n    // record declared types for runtime props type generation\n    const declaredTypes = {};\n    // props destructure data\n    const propsDestructuredBindings = Object.create(null);\n    // magic-string state\n    const s = new MagicString$1(source);\n    const startOffset = scriptSetup.loc.start.offset;\n    const endOffset = scriptSetup.loc.end.offset;\n    const scriptStartOffset = script && script.loc.start.offset;\n    const scriptEndOffset = script && script.loc.end.offset;\n    function helper(key) {\n        helperImports.add(key);\n        return `_${key}`;\n    }\n    function parse(input, options, offset) {\n        try {\n            return parse_1$1(input, options).program;\n        }\n        catch (e) {\n            e.message = `[@vue/compiler-sfc] ${e.message}\\n\\n${sfc.filename}\\n${generateCodeFrame(source, e.pos + offset, e.pos + offset + 1)}`;\n            throw e;\n        }\n    }\n    function error(msg, node, end = node.end + startOffset) {\n        throw new Error(`[@vue/compiler-sfc] ${msg}\\n\\n${sfc.filename}\\n${generateCodeFrame(source, node.start + startOffset, end)}`);\n    }\n    function hoistNode(node) {\n        const start = node.start + startOffset;\n        let end = node.end + startOffset;\n        // locate comment\n        if (node.trailingComments && node.trailingComments.length > 0) {\n            const lastCommentNode = node.trailingComments[node.trailingComments.length - 1];\n            end = lastCommentNode.end + startOffset;\n        }\n        // locate the end of whitespace between this statement and the next\n        while (end <= source.length) {\n            if (!/\\s/.test(source.charAt(end))) {\n                break;\n            }\n            end++;\n        }\n        s.move(start, end, 0);\n    }\n    function registerUserImport(source, local, imported, isType, isFromSetup, needTemplateUsageCheck) {\n        // template usage check is only needed in non-inline mode, so we can skip\n        // the work if inlineTemplate is true.\n        let isUsedInTemplate = needTemplateUsageCheck;\n        if (needTemplateUsageCheck &&\n            isTS &&\n            sfc.template &&\n            !sfc.template.src &&\n            !sfc.template.lang) {\n            isUsedInTemplate = isImportUsed(local, sfc);\n        }\n        userImports[local] = {\n            isType,\n            imported: imported || 'default',\n            local,\n            source,\n            isFromSetup,\n            isUsedInTemplate\n        };\n    }\n    function processDefineProps(node, declId, declKind) {\n        if (!isCallOf(node, DEFINE_PROPS)) {\n            return false;\n        }\n        if (hasDefinePropsCall) {\n            error(`duplicate ${DEFINE_PROPS}() call`, node);\n        }\n        hasDefinePropsCall = true;\n        propsRuntimeDecl = node.arguments[0];\n        // call has type parameters - infer runtime types from it\n        if (node.typeParameters) {\n            if (propsRuntimeDecl) {\n                error(`${DEFINE_PROPS}() cannot accept both type and non-type arguments ` +\n                    `at the same time. Use one or the other.`, node);\n            }\n            propsTypeDeclRaw = node.typeParameters.params[0];\n            propsTypeDecl = resolveQualifiedType(propsTypeDeclRaw, node => node.type === 'TSTypeLiteral');\n            if (!propsTypeDecl) {\n                error(`type argument passed to ${DEFINE_PROPS}() must be a literal type, ` +\n                    `or a reference to an interface or literal type.`, propsTypeDeclRaw);\n            }\n        }\n        if (declId) {\n            const isConst = declKind === 'const';\n            if (enablePropsTransform && declId.type === 'ObjectPattern') {\n                propsDestructureDecl = declId;\n                // props destructure - handle compilation sugar\n                for (const prop of declId.properties) {\n                    if (prop.type === 'ObjectProperty') {\n                        const propKey = resolveObjectKey(prop.key, prop.computed);\n                        if (!propKey) {\n                            error(`${DEFINE_PROPS}() destructure cannot use computed key.`, prop.key);\n                        }\n                        if (prop.value.type === 'AssignmentPattern') {\n                            // default value { foo = 123 }\n                            const { left, right } = prop.value;\n                            if (left.type !== 'Identifier') {\n                                error(`${DEFINE_PROPS}() destructure does not support nested patterns.`, left);\n                            }\n                            // store default value\n                            propsDestructuredBindings[propKey] = {\n                                local: left.name,\n                                default: right,\n                                isConst\n                            };\n                        }\n                        else if (prop.value.type === 'Identifier') {\n                            // simple destructure\n                            propsDestructuredBindings[propKey] = {\n                                local: prop.value.name,\n                                isConst\n                            };\n                        }\n                        else {\n                            error(`${DEFINE_PROPS}() destructure does not support nested patterns.`, prop.value);\n                        }\n                    }\n                    else {\n                        // rest spread\n                        propsDestructureRestId = prop.argument.name;\n                    }\n                }\n            }\n            else {\n                propsIdentifier = scriptSetup.content.slice(declId.start, declId.end);\n            }\n        }\n        return true;\n    }\n    function processWithDefaults(node, declId, declKind) {\n        if (!isCallOf(node, WITH_DEFAULTS)) {\n            return false;\n        }\n        if (processDefineProps(node.arguments[0], declId, declKind)) {\n            if (propsRuntimeDecl) {\n                error(`${WITH_DEFAULTS} can only be used with type-based ` +\n                    `${DEFINE_PROPS} declaration.`, node);\n            }\n            if (propsDestructureDecl) {\n                error(`${WITH_DEFAULTS}() is unnecessary when using destructure with ${DEFINE_PROPS}().\\n` +\n                    `Prefer using destructure default values, e.g. const { foo = 1 } = defineProps(...).`, node.callee);\n            }\n            propsRuntimeDefaults = node.arguments[1];\n            if (!propsRuntimeDefaults ||\n                propsRuntimeDefaults.type !== 'ObjectExpression') {\n                error(`The 2nd argument of ${WITH_DEFAULTS} must be an object literal.`, propsRuntimeDefaults || node);\n            }\n        }\n        else {\n            error(`${WITH_DEFAULTS}' first argument must be a ${DEFINE_PROPS} call.`, node.arguments[0] || node);\n        }\n        return true;\n    }\n    function processDefineEmits(node, declId) {\n        if (!isCallOf(node, DEFINE_EMITS)) {\n            return false;\n        }\n        if (hasDefineEmitCall) {\n            error(`duplicate ${DEFINE_EMITS}() call`, node);\n        }\n        hasDefineEmitCall = true;\n        emitsRuntimeDecl = node.arguments[0];\n        if (node.typeParameters) {\n            if (emitsRuntimeDecl) {\n                error(`${DEFINE_EMITS}() cannot accept both type and non-type arguments ` +\n                    `at the same time. Use one or the other.`, node);\n            }\n            emitsTypeDeclRaw = node.typeParameters.params[0];\n            emitsTypeDecl = resolveQualifiedType(emitsTypeDeclRaw, node => node.type === 'TSFunctionType' || node.type === 'TSTypeLiteral');\n            if (!emitsTypeDecl) {\n                error(`type argument passed to ${DEFINE_EMITS}() must be a function type, ` +\n                    `a literal type with call signatures, or a reference to the above types.`, emitsTypeDeclRaw);\n            }\n        }\n        if (declId) {\n            emitIdentifier =\n                declId.type === 'Identifier'\n                    ? declId.name\n                    : scriptSetup.content.slice(declId.start, declId.end);\n        }\n        return true;\n    }\n    function getAstBody() {\n        return scriptAst\n            ? [...scriptSetupAst.body, ...scriptAst.body]\n            : scriptSetupAst.body;\n    }\n    function resolveExtendsType(node, qualifier, cache = []) {\n        if (node.type === 'TSInterfaceDeclaration' && node.extends) {\n            node.extends.forEach(extend => {\n                if (extend.type === 'TSExpressionWithTypeArguments' &&\n                    extend.expression.type === 'Identifier') {\n                    const body = getAstBody();\n                    for (const node of body) {\n                        const qualified = isQualifiedType(node, qualifier, extend.expression.name);\n                        if (qualified) {\n                            cache.push(qualified);\n                            resolveExtendsType(node, qualifier, cache);\n                            return cache;\n                        }\n                    }\n                }\n            });\n        }\n        return cache;\n    }\n    function isQualifiedType(node, qualifier, refName) {\n        if (node.type === 'TSInterfaceDeclaration' && node.id.name === refName) {\n            return node.body;\n        }\n        else if (node.type === 'TSTypeAliasDeclaration' &&\n            node.id.name === refName &&\n            qualifier(node.typeAnnotation)) {\n            return node.typeAnnotation;\n        }\n        else if (node.type === 'ExportNamedDeclaration' && node.declaration) {\n            return isQualifiedType(node.declaration, qualifier, refName);\n        }\n    }\n    // filter all extends types to keep the override declaration\n    function filterExtendsType(extendsTypes, bodies) {\n        extendsTypes.forEach(extend => {\n            const body = extend.body;\n            body.forEach(newBody => {\n                if (newBody.type === 'TSPropertySignature' &&\n                    newBody.key.type === 'Identifier') {\n                    const name = newBody.key.name;\n                    const hasOverride = bodies.some(seenBody => seenBody.type === 'TSPropertySignature' &&\n                        seenBody.key.type === 'Identifier' &&\n                        seenBody.key.name === name);\n                    if (!hasOverride)\n                        bodies.push(newBody);\n                }\n            });\n        });\n    }\n    function resolveQualifiedType(node, qualifier) {\n        if (qualifier(node)) {\n            return node;\n        }\n        if (node.type === 'TSTypeReference' &&\n            node.typeName.type === 'Identifier') {\n            const refName = node.typeName.name;\n            const body = getAstBody();\n            for (let i = 0; i < body.length; i++) {\n                const node = body[i];\n                let qualified = isQualifiedType(node, qualifier, refName);\n                if (qualified) {\n                    const extendsTypes = resolveExtendsType(node, qualifier);\n                    if (extendsTypes.length) {\n                        const bodies = [...qualified.body];\n                        filterExtendsType(extendsTypes, bodies);\n                        qualified.body = bodies;\n                    }\n                    qualified.__fromNormalScript =\n                        scriptAst && i >= scriptSetupAst.body.length;\n                    return qualified;\n                }\n            }\n        }\n    }\n    function processDefineExpose(node) {\n        if (isCallOf(node, DEFINE_EXPOSE)) {\n            if (hasDefineExposeCall) {\n                error(`duplicate ${DEFINE_EXPOSE}() call`, node);\n            }\n            hasDefineExposeCall = true;\n            return true;\n        }\n        return false;\n    }\n    function checkInvalidScopeReference(node, method) {\n        if (!node)\n            return;\n        walkIdentifiers(node, id => {\n            if (setupBindings[id.name]) {\n                error(`\\`${method}()\\` in <script setup> cannot reference locally ` +\n                    `declared variables because it will be hoisted outside of the ` +\n                    `setup() function. If your component options require initialization ` +\n                    `in the module scope, use a separate normal <script> to export ` +\n                    `the options instead.`, id);\n            }\n        });\n    }\n    /**\n     * await foo()\n     * -->\n     * ;(\n     *   ([__temp,__restore] = withAsyncContext(() => foo())),\n     *   await __temp,\n     *   __restore()\n     * )\n     *\n     * const a = await foo()\n     * -->\n     * const a = (\n     *   ([__temp, __restore] = withAsyncContext(() => foo())),\n     *   __temp = await __temp,\n     *   __restore(),\n     *   __temp\n     * )\n     */\n    function processAwait(node, needSemi, isStatement) {\n        const argumentStart = node.argument.extra && node.argument.extra.parenthesized\n            ? node.argument.extra.parenStart\n            : node.argument.start;\n        const argumentStr = source.slice(argumentStart + startOffset, node.argument.end + startOffset);\n        const containsNestedAwait = /\\bawait\\b/.test(argumentStr);\n        s.overwrite(node.start + startOffset, argumentStart + startOffset, `${needSemi ? `;` : ``}(\\n  ([__temp,__restore] = ${helper(`withAsyncContext`)}(${containsNestedAwait ? `async ` : ``}() => `);\n        s.appendLeft(node.end + startOffset, `)),\\n  ${isStatement ? `` : `__temp = `}await __temp,\\n  __restore()${isStatement ? `` : `,\\n  __temp`}\\n)`);\n    }\n    /**\n     * check defaults. If the default object is an object literal with only\n     * static properties, we can directly generate more optimized default\n     * declarations. Otherwise we will have to fallback to runtime merging.\n     */\n    function hasStaticWithDefaults() {\n        return (propsRuntimeDefaults &&\n            propsRuntimeDefaults.type === 'ObjectExpression' &&\n            propsRuntimeDefaults.properties.every(node => (node.type === 'ObjectProperty' &&\n                (!node.computed || node.key.type.endsWith('Literal'))) ||\n                node.type === 'ObjectMethod'));\n    }\n    function genRuntimeProps(props) {\n        const keys = Object.keys(props);\n        if (!keys.length) {\n            return ``;\n        }\n        const hasStaticDefaults = hasStaticWithDefaults();\n        const scriptSetupSource = scriptSetup.content;\n        let propsDecls = `{\n    ${keys\n            .map(key => {\n            let defaultString;\n            const destructured = genDestructuredDefaultValue(key);\n            if (destructured) {\n                defaultString = `default: ${destructured}`;\n            }\n            else if (hasStaticDefaults) {\n                const prop = propsRuntimeDefaults.properties.find(node => {\n                    if (node.type === 'SpreadElement')\n                        return false;\n                    return resolveObjectKey(node.key, node.computed) === key;\n                });\n                if (prop) {\n                    if (prop.type === 'ObjectProperty') {\n                        // prop has corresponding static default value\n                        defaultString = `default: ${scriptSetupSource.slice(prop.value.start, prop.value.end)}`;\n                    }\n                    else {\n                        defaultString = `${prop.async ? 'async ' : ''}${prop.kind !== 'method' ? `${prop.kind} ` : ''}default() ${scriptSetupSource.slice(prop.body.start, prop.body.end)}`;\n                    }\n                }\n            }\n            const { type, required } = props[key];\n            if (!isProd) {\n                return `${key}: { type: ${toRuntimeTypeString(type)}, required: ${required}${defaultString ? `, ${defaultString}` : ``} }`;\n            }\n            else if (type.some(el => el === 'Boolean' ||\n                ((!hasStaticDefaults || defaultString) && el === 'Function'))) {\n                // #4783 for boolean, should keep the type\n                // #7111 for function, if default value exists or it's not static, should keep it\n                // in production\n                return `${key}: { type: ${toRuntimeTypeString(type)}${defaultString ? `, ${defaultString}` : ``} }`;\n            }\n            else {\n                // production: checks are useless\n                return `${key}: ${defaultString ? `{ ${defaultString} }` : 'null'}`;\n            }\n        })\n            .join(',\\n    ')}\\n  }`;\n        if (propsRuntimeDefaults && !hasStaticDefaults) {\n            propsDecls = `${helper('mergeDefaults')}(${propsDecls}, ${source.slice(propsRuntimeDefaults.start + startOffset, propsRuntimeDefaults.end + startOffset)})`;\n        }\n        return `\\n  props: ${propsDecls},`;\n    }\n    function genDestructuredDefaultValue(key) {\n        const destructured = propsDestructuredBindings[key];\n        if (destructured && destructured.default) {\n            const value = scriptSetup.content.slice(destructured.default.start, destructured.default.end);\n            const isLiteral = destructured.default.type.endsWith('Literal');\n            return isLiteral ? value : `() => (${value})`;\n        }\n    }\n    function genSetupPropsType(node) {\n        const scriptSource = node.__fromNormalScript\n            ? script.content\n            : scriptSetup.content;\n        if (hasStaticWithDefaults()) {\n            // if withDefaults() is used, we need to remove the optional flags\n            // on props that have default values\n            let res = `{ `;\n            const members = node.type === 'TSTypeLiteral' ? node.members : node.body;\n            for (const m of members) {\n                if ((m.type === 'TSPropertySignature' ||\n                    m.type === 'TSMethodSignature') &&\n                    m.typeAnnotation &&\n                    m.key.type === 'Identifier') {\n                    if (propsRuntimeDefaults.properties.some(p => {\n                        if (p.type === 'SpreadElement')\n                            return false;\n                        return (resolveObjectKey(p.key, p.computed) ===\n                            m.key.name);\n                    })) {\n                        res +=\n                            m.key.name +\n                                (m.type === 'TSMethodSignature' ? '()' : '') +\n                                scriptSource.slice(m.typeAnnotation.start, m.typeAnnotation.end) +\n                                ', ';\n                    }\n                    else {\n                        res += scriptSource.slice(m.start, m.typeAnnotation.end) + `, `;\n                    }\n                }\n            }\n            return (res.length ? res.slice(0, -2) : res) + ` }`;\n        }\n        else {\n            return scriptSource.slice(node.start, node.end);\n        }\n    }\n    // 0. parse both <script> and <script setup> blocks\n    const scriptAst = script &&\n        parse(script.content, {\n            plugins,\n            sourceType: 'module'\n        }, scriptStartOffset);\n    const scriptSetupAst = parse(scriptSetup.content, {\n        plugins: [\n            ...plugins,\n            // allow top level await but only inside <script setup>\n            'topLevelAwait'\n        ],\n        sourceType: 'module'\n    }, startOffset);\n    // 1.1 walk import delcarations of <script>\n    if (scriptAst) {\n        for (const node of scriptAst.body) {\n            if (node.type === 'ImportDeclaration') {\n                // record imports for dedupe\n                for (const specifier of node.specifiers) {\n                    const imported = specifier.type === 'ImportSpecifier' &&\n                        specifier.imported.type === 'Identifier' &&\n                        specifier.imported.name;\n                    registerUserImport(node.source.value, specifier.local.name, imported, node.importKind === 'type' ||\n                        (specifier.type === 'ImportSpecifier' &&\n                            specifier.importKind === 'type'), false, !options.inlineTemplate);\n                }\n            }\n        }\n    }\n    // 1.2 walk import declarations of <script setup>\n    for (const node of scriptSetupAst.body) {\n        if (node.type === 'ImportDeclaration') {\n            // import declarations are moved to top\n            hoistNode(node);\n            // dedupe imports\n            let removed = 0;\n            const removeSpecifier = (i) => {\n                const removeLeft = i > removed;\n                removed++;\n                const current = node.specifiers[i];\n                const next = node.specifiers[i + 1];\n                s.remove(removeLeft\n                    ? node.specifiers[i - 1].end + startOffset\n                    : current.start + startOffset, next && !removeLeft\n                    ? next.start + startOffset\n                    : current.end + startOffset);\n            };\n            for (let i = 0; i < node.specifiers.length; i++) {\n                const specifier = node.specifiers[i];\n                const local = specifier.local.name;\n                let imported = specifier.type === 'ImportSpecifier' &&\n                    specifier.imported.type === 'Identifier' &&\n                    specifier.imported.name;\n                if (specifier.type === 'ImportNamespaceSpecifier') {\n                    imported = '*';\n                }\n                const source = node.source.value;\n                const existing = userImports[local];\n                if (source === 'vue' &&\n                    (imported === DEFINE_PROPS ||\n                        imported === DEFINE_EMITS ||\n                        imported === DEFINE_EXPOSE)) {\n                    warnOnce$4(`\\`${imported}\\` is a compiler macro and no longer needs to be imported.`);\n                    removeSpecifier(i);\n                }\n                else if (existing) {\n                    if (existing.source === source && existing.imported === imported) {\n                        // already imported in <script setup>, dedupe\n                        removeSpecifier(i);\n                    }\n                    else {\n                        error(`different imports aliased to same local name.`, specifier);\n                    }\n                }\n                else {\n                    registerUserImport(source, local, imported, node.importKind === 'type' ||\n                        (specifier.type === 'ImportSpecifier' &&\n                            specifier.importKind === 'type'), true, !options.inlineTemplate);\n                }\n            }\n            if (node.specifiers.length && removed === node.specifiers.length) {\n                s.remove(node.start + startOffset, node.end + startOffset);\n            }\n        }\n    }\n    // 1.3 resolve possible user import alias of `ref` and `reactive`\n    const vueImportAliases = {};\n    for (const key in userImports) {\n        const { source, imported, local } = userImports[key];\n        if (source === 'vue')\n            vueImportAliases[imported] = local;\n    }\n    // 2.1 process normal <script> body\n    if (script && scriptAst) {\n        for (const node of scriptAst.body) {\n            if (node.type === 'ExportDefaultDeclaration') {\n                // export default\n                defaultExport = node;\n                // check if user has manually specified `name` or 'render` option in\n                // export default\n                // if has name, skip name inference\n                // if has render and no template, generate return object instead of\n                // empty render function (#4980)\n                let optionProperties;\n                if (defaultExport.declaration.type === 'ObjectExpression') {\n                    optionProperties = defaultExport.declaration.properties;\n                }\n                else if (defaultExport.declaration.type === 'CallExpression' &&\n                    defaultExport.declaration.arguments[0].type === 'ObjectExpression') {\n                    optionProperties = defaultExport.declaration.arguments[0].properties;\n                }\n                if (optionProperties) {\n                    for (const s of optionProperties) {\n                        if (s.type === 'ObjectProperty' &&\n                            s.key.type === 'Identifier' &&\n                            s.key.name === 'name') {\n                            hasDefaultExportName = true;\n                        }\n                        if ((s.type === 'ObjectMethod' || s.type === 'ObjectProperty') &&\n                            s.key.type === 'Identifier' &&\n                            s.key.name === 'render') {\n                            // TODO warn when we provide a better way to do it?\n                            hasDefaultExportRender = true;\n                        }\n                    }\n                }\n                // export default { ... } --> const __default__ = { ... }\n                const start = node.start + scriptStartOffset;\n                const end = node.declaration.start + scriptStartOffset;\n                s.overwrite(start, end, `const ${DEFAULT_VAR} = `);\n            }\n            else if (node.type === 'ExportNamedDeclaration') {\n                const defaultSpecifier = node.specifiers.find(s => s.exported.type === 'Identifier' && s.exported.name === 'default');\n                if (defaultSpecifier) {\n                    defaultExport = node;\n                    // 1. remove specifier\n                    if (node.specifiers.length > 1) {\n                        s.remove(defaultSpecifier.start + scriptStartOffset, defaultSpecifier.end + scriptStartOffset);\n                    }\n                    else {\n                        s.remove(node.start + scriptStartOffset, node.end + scriptStartOffset);\n                    }\n                    if (node.source) {\n                        // export { x as default } from './x'\n                        // rewrite to `import { x as __default__ } from './x'` and\n                        // add to top\n                        s.prepend(`import { ${defaultSpecifier.local.name} as ${DEFAULT_VAR} } from '${node.source.value}'\\n`);\n                    }\n                    else {\n                        // export { x as default }\n                        // rewrite to `const __default__ = x` and move to end\n                        s.appendLeft(scriptEndOffset, `\\nconst ${DEFAULT_VAR} = ${defaultSpecifier.local.name}\\n`);\n                    }\n                }\n                if (node.declaration) {\n                    walkDeclaration(node.declaration, scriptBindings, vueImportAliases);\n                }\n            }\n            else if ((node.type === 'VariableDeclaration' ||\n                node.type === 'FunctionDeclaration' ||\n                node.type === 'ClassDeclaration' ||\n                node.type === 'TSEnumDeclaration') &&\n                !node.declare) {\n                walkDeclaration(node, scriptBindings, vueImportAliases);\n            }\n        }\n        // apply reactivity transform\n        if (enableReactivityTransform && shouldTransform(script.content)) {\n            const { rootRefs, importedHelpers } = transformAST(scriptAst, s, scriptStartOffset);\n            refBindings = rootRefs;\n            for (const h of importedHelpers) {\n                helperImports.add(h);\n            }\n        }\n        // <script> after <script setup>\n        // we need to move the block up so that `const __default__` is\n        // declared before being used in the actual component definition\n        if (scriptStartOffset > startOffset) {\n            // if content doesn't end with newline, add one\n            if (!/\\n$/.test(script.content.trim())) {\n                s.appendLeft(scriptEndOffset, `\\n`);\n            }\n            s.move(scriptStartOffset, scriptEndOffset, 0);\n        }\n    }\n    // 2.2 process <script setup> body\n    for (const node of scriptSetupAst.body) {\n        // (Dropped) `ref: x` bindings\n        // TODO remove when out of experimental\n        if (node.type === 'LabeledStatement' &&\n            node.label.name === 'ref' &&\n            node.body.type === 'ExpressionStatement') {\n            error(`ref sugar using the label syntax was an experimental proposal and ` +\n                `has been dropped based on community feedback. Please check out ` +\n                `the new proposal at https://github.com/vuejs/rfcs/discussions/369`, node);\n        }\n        if (node.type === 'ExpressionStatement') {\n            // process `defineProps` and `defineEmit(s)` calls\n            if (processDefineProps(node.expression) ||\n                processDefineEmits(node.expression) ||\n                processWithDefaults(node.expression)) {\n                s.remove(node.start + startOffset, node.end + startOffset);\n            }\n            else if (processDefineExpose(node.expression)) {\n                // defineExpose({}) -> expose({})\n                const callee = node.expression.callee;\n                s.overwrite(callee.start + startOffset, callee.end + startOffset, 'expose');\n            }\n        }\n        if (node.type === 'VariableDeclaration' && !node.declare) {\n            const total = node.declarations.length;\n            let left = total;\n            for (let i = 0; i < total; i++) {\n                const decl = node.declarations[i];\n                if (decl.init) {\n                    // defineProps / defineEmits\n                    const isDefineProps = processDefineProps(decl.init, decl.id, node.kind) ||\n                        processWithDefaults(decl.init, decl.id, node.kind);\n                    const isDefineEmits = processDefineEmits(decl.init, decl.id);\n                    if (isDefineProps || isDefineEmits) {\n                        if (left === 1) {\n                            s.remove(node.start + startOffset, node.end + startOffset);\n                        }\n                        else {\n                            let start = decl.start + startOffset;\n                            let end = decl.end + startOffset;\n                            if (i === 0) {\n                                // first one, locate the start of the next\n                                end = node.declarations[i + 1].start + startOffset;\n                            }\n                            else {\n                                // not first one, locate the end of the prev\n                                start = node.declarations[i - 1].end + startOffset;\n                            }\n                            s.remove(start, end);\n                            left--;\n                        }\n                    }\n                }\n            }\n        }\n        // walk declarations to record declared bindings\n        if ((node.type === 'VariableDeclaration' ||\n            node.type === 'FunctionDeclaration' ||\n            node.type === 'ClassDeclaration') &&\n            !node.declare) {\n            walkDeclaration(node, setupBindings, vueImportAliases);\n        }\n        // walk statements & named exports / variable declarations for top level\n        // await\n        if ((node.type === 'VariableDeclaration' && !node.declare) ||\n            node.type.endsWith('Statement')) {\n            const scope = [scriptSetupAst.body];\n            walk$1(node, {\n                enter(child, parent) {\n                    if (isFunctionType(child)) {\n                        this.skip();\n                    }\n                    if (child.type === 'BlockStatement') {\n                        scope.push(child.body);\n                    }\n                    if (child.type === 'AwaitExpression') {\n                        hasAwait = true;\n                        // if the await expression is an expression statement and\n                        // - is in the root scope\n                        // - or is not the first statement in a nested block scope\n                        // then it needs a semicolon before the generated code.\n                        const currentScope = scope[scope.length - 1];\n                        const needsSemi = currentScope.some((n, i) => {\n                            return ((scope.length === 1 || i > 0) &&\n                                n.type === 'ExpressionStatement' &&\n                                n.start === child.start);\n                        });\n                        processAwait(child, needsSemi, parent.type === 'ExpressionStatement');\n                    }\n                },\n                exit(node) {\n                    if (node.type === 'BlockStatement')\n                        scope.pop();\n                }\n            });\n        }\n        if ((node.type === 'ExportNamedDeclaration' && node.exportKind !== 'type') ||\n            node.type === 'ExportAllDeclaration' ||\n            node.type === 'ExportDefaultDeclaration') {\n            error(`<script setup> cannot contain ES module exports. ` +\n                `If you are using a previous version of <script setup>, please ` +\n                `consult the updated RFC at https://github.com/vuejs/rfcs/pull/227.`, node);\n        }\n        if (isTS) {\n            // runtime enum\n            if (node.type === 'TSEnumDeclaration') {\n                registerBinding(setupBindings, node.id, \"setup-const\" /* BindingTypes.SETUP_CONST */);\n            }\n            // move all Type declarations to outer scope\n            if (node.type.startsWith('TS') ||\n                (node.type === 'ExportNamedDeclaration' &&\n                    node.exportKind === 'type') ||\n                (node.type === 'VariableDeclaration' && node.declare)) {\n                recordType(node, declaredTypes);\n                hoistNode(node);\n            }\n        }\n    }\n    // 3. Apply reactivity transform\n    if ((enableReactivityTransform &&\n        // normal <script> had ref bindings that maybe used in <script setup>\n        (refBindings || shouldTransform(scriptSetup.content))) ||\n        propsDestructureDecl) {\n        const { rootRefs, importedHelpers } = transformAST(scriptSetupAst, s, startOffset, refBindings, propsDestructuredBindings);\n        refBindings = refBindings ? [...refBindings, ...rootRefs] : rootRefs;\n        for (const h of importedHelpers) {\n            helperImports.add(h);\n        }\n    }\n    // 4. extract runtime props/emits code from setup context type\n    if (propsTypeDecl) {\n        extractRuntimeProps(propsTypeDecl, typeDeclaredProps, declaredTypes);\n    }\n    if (emitsTypeDecl) {\n        extractRuntimeEmits(emitsTypeDecl, typeDeclaredEmits);\n    }\n    // 5. check useOptions args to make sure it doesn't reference setup scope\n    // variables\n    checkInvalidScopeReference(propsRuntimeDecl, DEFINE_PROPS);\n    checkInvalidScopeReference(propsRuntimeDefaults, DEFINE_PROPS);\n    checkInvalidScopeReference(propsDestructureDecl, DEFINE_PROPS);\n    checkInvalidScopeReference(emitsRuntimeDecl, DEFINE_EMITS);\n    // 6. remove non-script content\n    if (script) {\n        if (startOffset < scriptStartOffset) {\n            // <script setup> before <script>\n            s.remove(0, startOffset);\n            s.remove(endOffset, scriptStartOffset);\n            s.remove(scriptEndOffset, source.length);\n        }\n        else {\n            // <script> before <script setup>\n            s.remove(0, scriptStartOffset);\n            s.remove(scriptEndOffset, startOffset);\n            s.remove(endOffset, source.length);\n        }\n    }\n    else {\n        // only <script setup>\n        s.remove(0, startOffset);\n        s.remove(endOffset, source.length);\n    }\n    // 7. analyze binding metadata\n    if (scriptAst) {\n        Object.assign(bindingMetadata, analyzeScriptBindings(scriptAst.body));\n    }\n    if (propsRuntimeDecl) {\n        for (const key of getObjectOrArrayExpressionKeys(propsRuntimeDecl)) {\n            bindingMetadata[key] = \"props\" /* BindingTypes.PROPS */;\n        }\n    }\n    for (const key in typeDeclaredProps) {\n        bindingMetadata[key] = \"props\" /* BindingTypes.PROPS */;\n    }\n    // props aliases\n    if (propsDestructureDecl) {\n        if (propsDestructureRestId) {\n            bindingMetadata[propsDestructureRestId] =\n                \"setup-reactive-const\" /* BindingTypes.SETUP_REACTIVE_CONST */;\n        }\n        for (const key in propsDestructuredBindings) {\n            const { local } = propsDestructuredBindings[key];\n            if (local !== key) {\n                bindingMetadata[local] = \"props-aliased\" /* BindingTypes.PROPS_ALIASED */;\n                (bindingMetadata.__propsAliases ||\n                    (bindingMetadata.__propsAliases = {}))[local] = key;\n            }\n        }\n    }\n    for (const [key, { isType, imported, source }] of Object.entries(userImports)) {\n        if (isType)\n            continue;\n        bindingMetadata[key] =\n            imported === '*' ||\n                (imported === 'default' && source.endsWith('.vue')) ||\n                source === 'vue'\n                ? \"setup-const\" /* BindingTypes.SETUP_CONST */\n                : \"setup-maybe-ref\" /* BindingTypes.SETUP_MAYBE_REF */;\n    }\n    for (const key in scriptBindings) {\n        bindingMetadata[key] = scriptBindings[key];\n    }\n    for (const key in setupBindings) {\n        bindingMetadata[key] = setupBindings[key];\n    }\n    // known ref bindings\n    if (refBindings) {\n        for (const key of refBindings) {\n            bindingMetadata[key] = \"setup-ref\" /* BindingTypes.SETUP_REF */;\n        }\n    }\n    // 8. inject `useCssVars` calls\n    if (cssVars.length &&\n        // no need to do this when targeting SSR\n        !(options.inlineTemplate && ((_a = options.templateOptions) === null || _a === void 0 ? void 0 : _a.ssr))) {\n        helperImports.add(CSS_VARS_HELPER);\n        helperImports.add('unref');\n        s.prependRight(startOffset, `\\n${genCssVarsCode(cssVars, bindingMetadata, scopeId, isProd)}\\n`);\n    }\n    // 9. finalize setup() argument signature\n    let args = `__props`;\n    if (propsTypeDecl) {\n        // mark as any and only cast on assignment\n        // since the user defined complex types may be incompatible with the\n        // inferred type from generated runtime declarations\n        args += `: any`;\n    }\n    // inject user assignment of props\n    // we use a default __props so that template expressions referencing props\n    // can use it directly\n    if (propsIdentifier) {\n        s.prependLeft(startOffset, `\\nconst ${propsIdentifier} = __props${propsTypeDecl ? ` as ${genSetupPropsType(propsTypeDecl)}` : ``};\\n`);\n    }\n    if (propsDestructureRestId) {\n        s.prependLeft(startOffset, `\\nconst ${propsDestructureRestId} = ${helper(`createPropsRestProxy`)}(__props, ${JSON.stringify(Object.keys(propsDestructuredBindings))});\\n`);\n    }\n    // inject temp variables for async context preservation\n    if (hasAwait) {\n        const any = isTS ? `: any` : ``;\n        s.prependLeft(startOffset, `\\nlet __temp${any}, __restore${any}\\n`);\n    }\n    const destructureElements = hasDefineExposeCall || !options.inlineTemplate ? [`expose`] : [];\n    if (emitIdentifier) {\n        destructureElements.push(emitIdentifier === `emit` ? `emit` : `emit: ${emitIdentifier}`);\n    }\n    if (destructureElements.length) {\n        args += `, { ${destructureElements.join(', ')} }`;\n        if (emitsTypeDecl) {\n            const content = emitsTypeDecl.__fromNormalScript\n                ? script.content\n                : scriptSetup.content;\n            args += `: { emit: (${content.slice(emitsTypeDecl.start, emitsTypeDecl.end)}), expose: any, slots: any, attrs: any }`;\n        }\n    }\n    // 10. generate return statement\n    let returned;\n    if (!options.inlineTemplate || (!sfc.template && hasDefaultExportRender)) {\n        // non-inline mode, or has manual render in normal <script>\n        // return bindings from script and script setup\n        const allBindings = Object.assign(Object.assign({}, scriptBindings), setupBindings);\n        for (const key in userImports) {\n            if (!userImports[key].isType && userImports[key].isUsedInTemplate) {\n                allBindings[key] = true;\n            }\n        }\n        returned = `{ `;\n        for (const key in allBindings) {\n            if (allBindings[key] === true &&\n                userImports[key].source !== 'vue' &&\n                !userImports[key].source.endsWith('.vue')) {\n                // generate getter for import bindings\n                // skip vue imports since we know they will never change\n                returned += `get ${key}() { return ${key} }, `;\n            }\n            else if (bindingMetadata[key] === \"setup-let\" /* BindingTypes.SETUP_LET */) {\n                // local let binding, also add setter\n                const setArg = key === 'v' ? `_v` : `v`;\n                returned +=\n                    `get ${key}() { return ${key} }, ` +\n                        `set ${key}(${setArg}) { ${key} = ${setArg} }, `;\n            }\n            else {\n                returned += `${key}, `;\n            }\n        }\n        returned = returned.replace(/, $/, '') + ` }`;\n    }\n    else {\n        // inline mode\n        if (sfc.template && !sfc.template.src) {\n            if (options.templateOptions && options.templateOptions.ssr) {\n                hasInlinedSsrRenderFn = true;\n            }\n            // inline render function mode - we are going to compile the template and\n            // inline it right here\n            const { code, ast, preamble, tips, errors } = compileTemplate(Object.assign(Object.assign({ filename, source: sfc.template.content, inMap: sfc.template.map }, options.templateOptions), { id: scopeId, scoped: sfc.styles.some(s => s.scoped), isProd: options.isProd, ssrCssVars: sfc.cssVars, compilerOptions: Object.assign(Object.assign({}, (options.templateOptions &&\n                    options.templateOptions.compilerOptions)), { inline: true, isTS,\n                    bindingMetadata }) }));\n            if (tips.length) {\n                tips.forEach(warnOnce$4);\n            }\n            const err = errors[0];\n            if (typeof err === 'string') {\n                throw new Error(err);\n            }\n            else if (err) {\n                if (err.loc) {\n                    err.message +=\n                        `\\n\\n` +\n                            sfc.filename +\n                            '\\n' +\n                            generateCodeFrame(source, err.loc.start.offset, err.loc.end.offset) +\n                            `\\n`;\n                }\n                throw err;\n            }\n            if (preamble) {\n                s.prepend(preamble);\n            }\n            // avoid duplicated unref import\n            // as this may get injected by the render function preamble OR the\n            // css vars codegen\n            if (ast && ast.helpers.has(UNREF)) {\n                helperImports.delete('unref');\n            }\n            returned = code;\n        }\n        else {\n            returned = `() => {}`;\n        }\n    }\n    if (!options.inlineTemplate && !false) {\n        // in non-inline mode, the `__isScriptSetup: true` flag is used by\n        // componentPublicInstance proxy to allow properties that start with $ or _\n        s.appendRight(endOffset, `\\nconst __returned__ = ${returned}\\n` +\n            `Object.defineProperty(__returned__, '__isScriptSetup', { enumerable: false, value: true })\\n` +\n            `return __returned__` +\n            `\\n}\\n\\n`);\n    }\n    else {\n        s.appendRight(endOffset, `\\nreturn ${returned}\\n}\\n\\n`);\n    }\n    // 11. finalize default export\n    let runtimeOptions = ``;\n    if (!hasDefaultExportName && filename && filename !== DEFAULT_FILENAME) {\n        const match = filename.match(/([^/\\\\]+)\\.\\w+$/);\n        if (match) {\n            runtimeOptions += `\\n  __name: '${match[1]}',`;\n        }\n    }\n    if (hasInlinedSsrRenderFn) {\n        runtimeOptions += `\\n  __ssrInlineRender: true,`;\n    }\n    if (propsRuntimeDecl) {\n        let declCode = scriptSetup.content\n            .slice(propsRuntimeDecl.start, propsRuntimeDecl.end)\n            .trim();\n        if (propsDestructureDecl) {\n            const defaults = [];\n            for (const key in propsDestructuredBindings) {\n                const d = genDestructuredDefaultValue(key);\n                if (d)\n                    defaults.push(`${key}: ${d}`);\n            }\n            if (defaults.length) {\n                declCode = `${helper(`mergeDefaults`)}(${declCode}, {\\n  ${defaults.join(',\\n  ')}\\n})`;\n            }\n        }\n        runtimeOptions += `\\n  props: ${declCode},`;\n    }\n    else if (propsTypeDecl) {\n        runtimeOptions += genRuntimeProps(typeDeclaredProps);\n    }\n    if (emitsRuntimeDecl) {\n        runtimeOptions += `\\n  emits: ${scriptSetup.content\n            .slice(emitsRuntimeDecl.start, emitsRuntimeDecl.end)\n            .trim()},`;\n    }\n    else if (emitsTypeDecl) {\n        runtimeOptions += genRuntimeEmits(typeDeclaredEmits);\n    }\n    // <script setup> components are closed by default. If the user did not\n    // explicitly call `defineExpose`, call expose() with no args.\n    const exposeCall = hasDefineExposeCall || options.inlineTemplate ? `` : `  expose();\\n`;\n    // wrap setup code with function.\n    if (isTS) {\n        // for TS, make sure the exported type is still valid type with\n        // correct props information\n        // we have to use object spread for types to be merged properly\n        // user's TS setting should compile it down to proper targets\n        // export default defineComponent({ ...__default__, ... })\n        const def = defaultExport ? `\\n  ...${DEFAULT_VAR},` : ``;\n        s.prependLeft(startOffset, `\\nexport default /*#__PURE__*/${helper(`defineComponent`)}({${def}${runtimeOptions}\\n  ${hasAwait ? `async ` : ``}setup(${args}) {\\n${exposeCall}`);\n        s.appendRight(endOffset, `})`);\n    }\n    else {\n        if (defaultExport) {\n            // without TS, can't rely on rest spread, so we use Object.assign\n            // export default Object.assign(__default__, { ... })\n            s.prependLeft(startOffset, `\\nexport default /*#__PURE__*/Object.assign(${DEFAULT_VAR}, {${runtimeOptions}\\n  ` +\n                `${hasAwait ? `async ` : ``}setup(${args}) {\\n${exposeCall}`);\n            s.appendRight(endOffset, `})`);\n        }\n        else {\n            s.prependLeft(startOffset, `\\nexport default {${runtimeOptions}\\n  ` +\n                `${hasAwait ? `async ` : ``}setup(${args}) {\\n${exposeCall}`);\n            s.appendRight(endOffset, `}`);\n        }\n    }\n    // 12. finalize Vue helper imports\n    if (helperImports.size > 0) {\n        s.prepend(`import { ${[...helperImports]\n            .map(h => `${h} as _${h}`)\n            .join(', ')} } from 'vue'\\n`);\n    }\n    s.trim();\n    return Object.assign(Object.assign({}, scriptSetup), { bindings: bindingMetadata, imports: userImports, content: s.toString(), map: genSourceMap\n            ? s.generateMap({\n                source: filename,\n                hires: true,\n                includeContent: true\n            })\n            : undefined, scriptAst: scriptAst === null || scriptAst === void 0 ? void 0 : scriptAst.body, scriptSetupAst: scriptSetupAst === null || scriptSetupAst === void 0 ? void 0 : scriptSetupAst.body });\n}\nfunction registerBinding(bindings, node, type) {\n    bindings[node.name] = type;\n}\nfunction walkDeclaration(node, bindings, userImportAliases) {\n    if (node.type === 'VariableDeclaration') {\n        const isConst = node.kind === 'const';\n        // export const foo = ...\n        for (const { id, init } of node.declarations) {\n            const isDefineCall = !!(isConst &&\n                isCallOf(init, c => c === DEFINE_PROPS || c === DEFINE_EMITS || c === WITH_DEFAULTS));\n            if (id.type === 'Identifier') {\n                let bindingType;\n                const userReactiveBinding = userImportAliases['reactive'];\n                if (isCallOf(init, userReactiveBinding)) {\n                    // treat reactive() calls as let since it's meant to be mutable\n                    bindingType = isConst\n                        ? \"setup-reactive-const\" /* BindingTypes.SETUP_REACTIVE_CONST */\n                        : \"setup-let\" /* BindingTypes.SETUP_LET */;\n                }\n                else if (\n                // if a declaration is a const literal, we can mark it so that\n                // the generated render fn code doesn't need to unref() it\n                isDefineCall ||\n                    (isConst && canNeverBeRef(init, userReactiveBinding))) {\n                    bindingType = isCallOf(init, DEFINE_PROPS)\n                        ? \"setup-reactive-const\" /* BindingTypes.SETUP_REACTIVE_CONST */\n                        : \"setup-const\" /* BindingTypes.SETUP_CONST */;\n                }\n                else if (isConst) {\n                    if (isCallOf(init, userImportAliases['ref'])) {\n                        bindingType = \"setup-ref\" /* BindingTypes.SETUP_REF */;\n                    }\n                    else {\n                        bindingType = \"setup-maybe-ref\" /* BindingTypes.SETUP_MAYBE_REF */;\n                    }\n                }\n                else {\n                    bindingType = \"setup-let\" /* BindingTypes.SETUP_LET */;\n                }\n                registerBinding(bindings, id, bindingType);\n            }\n            else {\n                if (isCallOf(init, DEFINE_PROPS)) {\n                    continue;\n                }\n                if (id.type === 'ObjectPattern') {\n                    walkObjectPattern(id, bindings, isConst, isDefineCall);\n                }\n                else if (id.type === 'ArrayPattern') {\n                    walkArrayPattern(id, bindings, isConst, isDefineCall);\n                }\n            }\n        }\n    }\n    else if (node.type === 'TSEnumDeclaration' ||\n        node.type === 'FunctionDeclaration' ||\n        node.type === 'ClassDeclaration') {\n        // export function foo() {} / export class Foo {}\n        // export declarations must be named.\n        bindings[node.id.name] = \"setup-const\" /* BindingTypes.SETUP_CONST */;\n    }\n}\nfunction walkObjectPattern(node, bindings, isConst, isDefineCall = false) {\n    for (const p of node.properties) {\n        if (p.type === 'ObjectProperty') {\n            if (p.key.type === 'Identifier' && p.key === p.value) {\n                // shorthand: const { x } = ...\n                const type = isDefineCall\n                    ? \"setup-const\" /* BindingTypes.SETUP_CONST */\n                    : isConst\n                        ? \"setup-maybe-ref\" /* BindingTypes.SETUP_MAYBE_REF */\n                        : \"setup-let\" /* BindingTypes.SETUP_LET */;\n                registerBinding(bindings, p.key, type);\n            }\n            else {\n                walkPattern(p.value, bindings, isConst, isDefineCall);\n            }\n        }\n        else {\n            // ...rest\n            // argument can only be identifier when destructuring\n            const type = isConst ? \"setup-const\" /* BindingTypes.SETUP_CONST */ : \"setup-let\" /* BindingTypes.SETUP_LET */;\n            registerBinding(bindings, p.argument, type);\n        }\n    }\n}\nfunction walkArrayPattern(node, bindings, isConst, isDefineCall = false) {\n    for (const e of node.elements) {\n        e && walkPattern(e, bindings, isConst, isDefineCall);\n    }\n}\nfunction walkPattern(node, bindings, isConst, isDefineCall = false) {\n    if (node.type === 'Identifier') {\n        const type = isDefineCall\n            ? \"setup-const\" /* BindingTypes.SETUP_CONST */\n            : isConst\n                ? \"setup-maybe-ref\" /* BindingTypes.SETUP_MAYBE_REF */\n                : \"setup-let\" /* BindingTypes.SETUP_LET */;\n        registerBinding(bindings, node, type);\n    }\n    else if (node.type === 'RestElement') {\n        // argument can only be identifier when destructuring\n        const type = isConst ? \"setup-const\" /* BindingTypes.SETUP_CONST */ : \"setup-let\" /* BindingTypes.SETUP_LET */;\n        registerBinding(bindings, node.argument, type);\n    }\n    else if (node.type === 'ObjectPattern') {\n        walkObjectPattern(node, bindings, isConst);\n    }\n    else if (node.type === 'ArrayPattern') {\n        walkArrayPattern(node, bindings, isConst);\n    }\n    else if (node.type === 'AssignmentPattern') {\n        if (node.left.type === 'Identifier') {\n            const type = isDefineCall\n                ? \"setup-const\" /* BindingTypes.SETUP_CONST */\n                : isConst\n                    ? \"setup-maybe-ref\" /* BindingTypes.SETUP_MAYBE_REF */\n                    : \"setup-let\" /* BindingTypes.SETUP_LET */;\n            registerBinding(bindings, node.left, type);\n        }\n        else {\n            walkPattern(node.left, bindings, isConst);\n        }\n    }\n}\nfunction recordType(node, declaredTypes) {\n    if (node.type === 'TSInterfaceDeclaration') {\n        declaredTypes[node.id.name] = [`Object`];\n    }\n    else if (node.type === 'TSTypeAliasDeclaration') {\n        declaredTypes[node.id.name] = inferRuntimeType(node.typeAnnotation, declaredTypes);\n    }\n    else if (node.type === 'ExportNamedDeclaration' && node.declaration) {\n        recordType(node.declaration, declaredTypes);\n    }\n}\nfunction extractRuntimeProps(node, props, declaredTypes, isProd) {\n    const members = node.type === 'TSTypeLiteral' ? node.members : node.body;\n    for (const m of members) {\n        if ((m.type === 'TSPropertySignature' || m.type === 'TSMethodSignature') &&\n            m.key.type === 'Identifier') {\n            let type;\n            if (m.type === 'TSMethodSignature') {\n                type = ['Function'];\n            }\n            else if (m.typeAnnotation) {\n                type = inferRuntimeType(m.typeAnnotation.typeAnnotation, declaredTypes);\n            }\n            props[m.key.name] = {\n                key: m.key.name,\n                required: !m.optional,\n                type: type || [`null`]\n            };\n        }\n    }\n}\nfunction inferRuntimeType(node, declaredTypes) {\n    switch (node.type) {\n        case 'TSStringKeyword':\n            return ['String'];\n        case 'TSNumberKeyword':\n            return ['Number'];\n        case 'TSBooleanKeyword':\n            return ['Boolean'];\n        case 'TSObjectKeyword':\n            return ['Object'];\n        case 'TSTypeLiteral':\n            // TODO (nice to have) generate runtime property validation\n            return ['Object'];\n        case 'TSFunctionType':\n            return ['Function'];\n        case 'TSArrayType':\n        case 'TSTupleType':\n            // TODO (nice to have) generate runtime element type/length checks\n            return ['Array'];\n        case 'TSLiteralType':\n            switch (node.literal.type) {\n                case 'StringLiteral':\n                    return ['String'];\n                case 'BooleanLiteral':\n                    return ['Boolean'];\n                case 'NumericLiteral':\n                case 'BigIntLiteral':\n                    return ['Number'];\n                default:\n                    return [`null`];\n            }\n        case 'TSTypeReference':\n            if (node.typeName.type === 'Identifier') {\n                if (declaredTypes[node.typeName.name]) {\n                    return declaredTypes[node.typeName.name];\n                }\n                switch (node.typeName.name) {\n                    case 'Array':\n                    case 'Function':\n                    case 'Object':\n                    case 'Set':\n                    case 'Map':\n                    case 'WeakSet':\n                    case 'WeakMap':\n                    case 'Date':\n                    case 'Promise':\n                        return [node.typeName.name];\n                    case 'Record':\n                    case 'Partial':\n                    case 'Readonly':\n                    case 'Pick':\n                    case 'Omit':\n                    case 'Exclude':\n                    case 'Extract':\n                    case 'Required':\n                    case 'InstanceType':\n                        return ['Object'];\n                }\n            }\n            return [`null`];\n        case 'TSParenthesizedType':\n            return inferRuntimeType(node.typeAnnotation, declaredTypes);\n        case 'TSUnionType':\n            return [\n                ...new Set([].concat(...node.types.map(t => inferRuntimeType(t, declaredTypes))))\n            ];\n        case 'TSIntersectionType':\n            return ['Object'];\n        case 'TSSymbolKeyword':\n            return ['Symbol'];\n        default:\n            return [`null`]; // no runtime check\n    }\n}\nfunction toRuntimeTypeString(types) {\n    return types.length > 1 ? `[${types.join(', ')}]` : types[0];\n}\nfunction extractRuntimeEmits(node, emits) {\n    if (node.type === 'TSTypeLiteral' || node.type === 'TSInterfaceBody') {\n        const members = node.type === 'TSTypeLiteral' ? node.members : node.body;\n        for (let t of members) {\n            if (t.type === 'TSCallSignatureDeclaration') {\n                extractEventNames(t.parameters[0], emits);\n            }\n        }\n        return;\n    }\n    else {\n        extractEventNames(node.parameters[0], emits);\n    }\n}\nfunction extractEventNames(eventName, emits) {\n    if (eventName.type === 'Identifier' &&\n        eventName.typeAnnotation &&\n        eventName.typeAnnotation.type === 'TSTypeAnnotation') {\n        const typeNode = eventName.typeAnnotation.typeAnnotation;\n        if (typeNode.type === 'TSLiteralType') {\n            if (typeNode.literal.type !== 'UnaryExpression') {\n                emits.add(String(typeNode.literal.value));\n            }\n        }\n        else if (typeNode.type === 'TSUnionType') {\n            for (const t of typeNode.types) {\n                if (t.type === 'TSLiteralType' &&\n                    t.literal.type !== 'UnaryExpression') {\n                    emits.add(String(t.literal.value));\n                }\n            }\n        }\n    }\n}\nfunction genRuntimeEmits(emits) {\n    return emits.size\n        ? `\\n  emits: [${Array.from(emits)\n            .map(p => JSON.stringify(p))\n            .join(', ')}],`\n        : ``;\n}\nfunction isCallOf(node, test) {\n    return !!(node &&\n        test &&\n        node.type === 'CallExpression' &&\n        node.callee.type === 'Identifier' &&\n        (typeof test === 'string'\n            ? node.callee.name === test\n            : test(node.callee.name)));\n}\nfunction canNeverBeRef(node, userReactiveImport) {\n    if (isCallOf(node, userReactiveImport)) {\n        return true;\n    }\n    switch (node.type) {\n        case 'UnaryExpression':\n        case 'BinaryExpression':\n        case 'ArrayExpression':\n        case 'ObjectExpression':\n        case 'FunctionExpression':\n        case 'ArrowFunctionExpression':\n        case 'UpdateExpression':\n        case 'ClassExpression':\n        case 'TaggedTemplateExpression':\n            return true;\n        case 'SequenceExpression':\n            return canNeverBeRef(node.expressions[node.expressions.length - 1], userReactiveImport);\n        default:\n            if (node.type.endsWith('Literal')) {\n                return true;\n            }\n            return false;\n    }\n}\n/**\n * Analyze bindings in normal `<script>`\n * Note that `compileScriptSetup` already analyzes bindings as part of its\n * compilation process so this should only be used on single `<script>` SFCs.\n */\nfunction analyzeScriptBindings(ast) {\n    for (const node of ast) {\n        if (node.type === 'ExportDefaultDeclaration' &&\n            node.declaration.type === 'ObjectExpression') {\n            return analyzeBindingsFromOptions(node.declaration);\n        }\n    }\n    return {};\n}\nfunction analyzeBindingsFromOptions(node) {\n    const bindings = {};\n    // #3270, #3275\n    // mark non-script-setup so we don't resolve components/directives from these\n    Object.defineProperty(bindings, '__isScriptSetup', {\n        enumerable: false,\n        value: false\n    });\n    for (const property of node.properties) {\n        if (property.type === 'ObjectProperty' &&\n            !property.computed &&\n            property.key.type === 'Identifier') {\n            // props\n            if (property.key.name === 'props') {\n                // props: ['foo']\n                // props: { foo: ... }\n                for (const key of getObjectOrArrayExpressionKeys(property.value)) {\n                    bindings[key] = \"props\" /* BindingTypes.PROPS */;\n                }\n            }\n            // inject\n            else if (property.key.name === 'inject') {\n                // inject: ['foo']\n                // inject: { foo: {} }\n                for (const key of getObjectOrArrayExpressionKeys(property.value)) {\n                    bindings[key] = \"options\" /* BindingTypes.OPTIONS */;\n                }\n            }\n            // computed & methods\n            else if (property.value.type === 'ObjectExpression' &&\n                (property.key.name === 'computed' || property.key.name === 'methods')) {\n                // methods: { foo() {} }\n                // computed: { foo() {} }\n                for (const key of getObjectExpressionKeys(property.value)) {\n                    bindings[key] = \"options\" /* BindingTypes.OPTIONS */;\n                }\n            }\n        }\n        // setup & data\n        else if (property.type === 'ObjectMethod' &&\n            property.key.type === 'Identifier' &&\n            (property.key.name === 'setup' || property.key.name === 'data')) {\n            for (const bodyItem of property.body.body) {\n                // setup() {\n                //   return {\n                //     foo: null\n                //   }\n                // }\n                if (bodyItem.type === 'ReturnStatement' &&\n                    bodyItem.argument &&\n                    bodyItem.argument.type === 'ObjectExpression') {\n                    for (const key of getObjectExpressionKeys(bodyItem.argument)) {\n                        bindings[key] =\n                            property.key.name === 'setup'\n                                ? \"setup-maybe-ref\" /* BindingTypes.SETUP_MAYBE_REF */\n                                : \"data\" /* BindingTypes.DATA */;\n                    }\n                }\n            }\n        }\n    }\n    return bindings;\n}\nfunction getObjectExpressionKeys(node) {\n    const keys = [];\n    for (const prop of node.properties) {\n        if (prop.type === 'SpreadElement')\n            continue;\n        const key = resolveObjectKey(prop.key, prop.computed);\n        if (key)\n            keys.push(String(key));\n    }\n    return keys;\n}\nfunction getArrayExpressionKeys(node) {\n    const keys = [];\n    for (const element of node.elements) {\n        if (element && element.type === 'StringLiteral') {\n            keys.push(element.value);\n        }\n    }\n    return keys;\n}\nfunction getObjectOrArrayExpressionKeys(value) {\n    if (value.type === 'ArrayExpression') {\n        return getArrayExpressionKeys(value);\n    }\n    if (value.type === 'ObjectExpression') {\n        return getObjectExpressionKeys(value);\n    }\n    return [];\n}\nconst templateUsageCheckCache = createCache();\nfunction resolveTemplateUsageCheckString(sfc) {\n    const { content, ast } = sfc.template;\n    const cached = templateUsageCheckCache.get(content);\n    if (cached) {\n        return cached;\n    }\n    let code = '';\n    transform$1(createRoot([ast]), {\n        nodeTransforms: [\n            node => {\n                if (node.type === 1 /* NodeTypes.ELEMENT */) {\n                    if (!parserOptions.isNativeTag(node.tag) &&\n                        !parserOptions.isBuiltInComponent(node.tag)) {\n                        code += `,${camelize(node.tag)},${capitalize$1(camelize(node.tag))}`;\n                    }\n                    for (let i = 0; i < node.props.length; i++) {\n                        const prop = node.props[i];\n                        if (prop.type === 7 /* NodeTypes.DIRECTIVE */) {\n                            if (!isBuiltInDir(prop.name)) {\n                                code += `,v${capitalize$1(camelize(prop.name))}`;\n                            }\n                            if (prop.exp) {\n                                code += `,${processExp(prop.exp.content, prop.name)}`;\n                            }\n                        }\n                    }\n                }\n                else if (node.type === 5 /* NodeTypes.INTERPOLATION */) {\n                    code += `,${processExp(node.content.content)}`;\n                }\n            }\n        ]\n    });\n    code += ';';\n    templateUsageCheckCache.set(content, code);\n    return code;\n}\nconst forAliasRE = /([\\s\\S]*?)\\s+(?:in|of)\\s+([\\s\\S]*)/;\nfunction processExp(exp, dir) {\n    if (/ as\\s+\\w|<.*>|:/.test(exp)) {\n        if (dir === 'slot') {\n            exp = `(${exp})=>{}`;\n        }\n        else if (dir === 'on') {\n            exp = `()=>{return ${exp}}`;\n        }\n        else if (dir === 'for') {\n            const inMatch = exp.match(forAliasRE);\n            if (inMatch) {\n                const [, LHS, RHS] = inMatch;\n                return processExp(`(${LHS})=>{}`) + processExp(RHS);\n            }\n        }\n        let ret = '';\n        // has potential type cast or generic arguments that uses types\n        const ast = parseExpression_1(exp, { plugins: ['typescript'] });\n        walkIdentifiers(ast, node => {\n            ret += `,` + node.name;\n        });\n        return ret;\n    }\n    return stripStrings(exp);\n}\nfunction stripStrings(exp) {\n    return exp\n        .replace(/'[^']*'|\"[^\"]*\"/g, '')\n        .replace(/`[^`]+`/g, stripTemplateString);\n}\nfunction stripTemplateString(str) {\n    const interpMatch = str.match(/\\${[^}]+}/g);\n    if (interpMatch) {\n        return interpMatch.map(m => m.slice(2, -1)).join(',');\n    }\n    return '';\n}\nfunction isImportUsed(local, sfc) {\n    return new RegExp(\n    // #4274 escape $ since it's a special char in regex\n    // (and is the only regex special char that is valid in identifiers)\n    `[^\\\\w$_]${local.replace(/\\$/g, '\\\\$')}[^\\\\w$_]`).test(resolveTemplateUsageCheckString(sfc));\n}\n/**\n * Note: this comparison assumes the prev/next script are already identical,\n * and only checks the special case where <script setup lang=\"ts\"> unused import\n * pruning result changes due to template changes.\n */\nfunction hmrShouldReload(prevImports, next) {\n    if (!next.scriptSetup ||\n        (next.scriptSetup.lang !== 'ts' && next.scriptSetup.lang !== 'tsx')) {\n        return false;\n    }\n    // for each previous import, check if its used status remain the same based on\n    // the next descriptor's template\n    for (const key in prevImports) {\n        // if an import was previous unused, but now is used, we need to force\n        // reload so that the script now includes that import.\n        if (!prevImports[key].isUsedInTemplate && isImportUsed(key, next)) {\n            return true;\n        }\n    }\n    return false;\n}\nfunction resolveObjectKey(node, computed) {\n    switch (node.type) {\n        case 'StringLiteral':\n        case 'NumericLiteral':\n            return node.value;\n        case 'Identifier':\n            if (!computed)\n                return node.name;\n    }\n    return undefined;\n}\n\nconst DEFAULT_FILENAME = 'anonymous.vue';\nconst sourceToSFC = createCache();\nfunction parse$5(source, { sourceMap = true, filename = DEFAULT_FILENAME, sourceRoot = '', pad = false, ignoreEmpty = true, compiler = CompilerDOM } = {}) {\n    const sourceKey = source + sourceMap + filename + sourceRoot + pad + compiler.parse;\n    const cache = sourceToSFC.get(sourceKey);\n    if (cache) {\n        return cache;\n    }\n    const descriptor = {\n        filename,\n        source,\n        template: null,\n        script: null,\n        scriptSetup: null,\n        styles: [],\n        customBlocks: [],\n        cssVars: [],\n        slotted: false,\n        shouldForceReload: prevImports => hmrShouldReload(prevImports, descriptor)\n    };\n    const errors = [];\n    const ast = compiler.parse(source, {\n        // there are no components at SFC parsing level\n        isNativeTag: () => true,\n        // preserve all whitespaces\n        isPreTag: () => true,\n        getTextMode: ({ tag, props }, parent) => {\n            // all top level elements except <template> are parsed as raw text\n            // containers\n            if ((!parent && tag !== 'template') ||\n                // <template lang=\"xxx\"> should also be treated as raw text\n                (tag === 'template' &&\n                    props.some(p => p.type === 6 /* NodeTypes.ATTRIBUTE */ &&\n                        p.name === 'lang' &&\n                        p.value &&\n                        p.value.content &&\n                        p.value.content !== 'html'))) {\n                return 2 /* TextModes.RAWTEXT */;\n            }\n            else {\n                return 0 /* TextModes.DATA */;\n            }\n        },\n        onError: e => {\n            errors.push(e);\n        }\n    });\n    ast.children.forEach(node => {\n        if (node.type !== 1 /* NodeTypes.ELEMENT */) {\n            return;\n        }\n        // we only want to keep the nodes that are not empty (when the tag is not a template)\n        if (ignoreEmpty &&\n            node.tag !== 'template' &&\n            isEmpty(node) &&\n            !hasSrc(node)) {\n            return;\n        }\n        switch (node.tag) {\n            case 'template':\n                if (!descriptor.template) {\n                    const templateBlock = (descriptor.template = createBlock(node, source, false));\n                    templateBlock.ast = node;\n                    // warn against 2.x <template functional>\n                    if (templateBlock.attrs.functional) {\n                        const err = new SyntaxError(`<template functional> is no longer supported in Vue 3, since ` +\n                            `functional components no longer have significant performance ` +\n                            `difference from stateful ones. Just use a normal <template> ` +\n                            `instead.`);\n                        err.loc = node.props.find(p => p.name === 'functional').loc;\n                        errors.push(err);\n                    }\n                }\n                else {\n                    errors.push(createDuplicateBlockError(node));\n                }\n                break;\n            case 'script':\n                const scriptBlock = createBlock(node, source, pad);\n                const isSetup = !!scriptBlock.attrs.setup;\n                if (isSetup && !descriptor.scriptSetup) {\n                    descriptor.scriptSetup = scriptBlock;\n                    break;\n                }\n                if (!isSetup && !descriptor.script) {\n                    descriptor.script = scriptBlock;\n                    break;\n                }\n                errors.push(createDuplicateBlockError(node, isSetup));\n                break;\n            case 'style':\n                const styleBlock = createBlock(node, source, pad);\n                if (styleBlock.attrs.vars) {\n                    errors.push(new SyntaxError(`<style vars> has been replaced by a new proposal: ` +\n                        `https://github.com/vuejs/rfcs/pull/231`));\n                }\n                descriptor.styles.push(styleBlock);\n                break;\n            default:\n                descriptor.customBlocks.push(createBlock(node, source, pad));\n                break;\n        }\n    });\n    if (!descriptor.template && !descriptor.script && !descriptor.scriptSetup) {\n        errors.push(new SyntaxError(`At least one <template> or <script> is required in a single file component.`));\n    }\n    if (descriptor.scriptSetup) {\n        if (descriptor.scriptSetup.src) {\n            errors.push(new SyntaxError(`<script setup> cannot use the \"src\" attribute because ` +\n                `its syntax will be ambiguous outside of the component.`));\n            descriptor.scriptSetup = null;\n        }\n        if (descriptor.script && descriptor.script.src) {\n            errors.push(new SyntaxError(`<script> cannot use the \"src\" attribute when <script setup> is ` +\n                `also present because they must be processed together.`));\n            descriptor.script = null;\n        }\n    }\n    if (sourceMap) {\n        const genMap = (block) => {\n            if (block && !block.src) {\n                block.map = generateSourceMap(filename, source, block.content, sourceRoot, !pad || block.type === 'template' ? block.loc.start.line - 1 : 0);\n            }\n        };\n        genMap(descriptor.template);\n        genMap(descriptor.script);\n        descriptor.styles.forEach(genMap);\n        descriptor.customBlocks.forEach(genMap);\n    }\n    // parse CSS vars\n    descriptor.cssVars = parseCssVars(descriptor);\n    // check if the SFC uses :slotted\n    const slottedRE = /(?:::v-|:)slotted\\(/;\n    descriptor.slotted = descriptor.styles.some(s => s.scoped && slottedRE.test(s.content));\n    const result = {\n        descriptor,\n        errors\n    };\n    sourceToSFC.set(sourceKey, result);\n    return result;\n}\nfunction createDuplicateBlockError(node, isScriptSetup = false) {\n    const err = new SyntaxError(`Single file component can contain only one <${node.tag}${isScriptSetup ? ` setup` : ``}> element`);\n    err.loc = node.loc;\n    return err;\n}\nfunction createBlock(node, source, pad) {\n    const type = node.tag;\n    let { start, end } = node.loc;\n    let content = '';\n    if (node.children.length) {\n        start = node.children[0].loc.start;\n        end = node.children[node.children.length - 1].loc.end;\n        content = source.slice(start.offset, end.offset);\n    }\n    else {\n        const offset = node.loc.source.indexOf(`</`);\n        if (offset > -1) {\n            start = {\n                line: start.line,\n                column: start.column + offset,\n                offset: start.offset + offset\n            };\n        }\n        end = Object.assign({}, start);\n    }\n    const loc = {\n        source: content,\n        start,\n        end\n    };\n    const attrs = {};\n    const block = {\n        type,\n        content,\n        loc,\n        attrs\n    };\n    if (pad) {\n        block.content = padContent(source, block, pad) + block.content;\n    }\n    node.props.forEach(p => {\n        if (p.type === 6 /* NodeTypes.ATTRIBUTE */) {\n            attrs[p.name] = p.value ? p.value.content || true : true;\n            if (p.name === 'lang') {\n                block.lang = p.value && p.value.content;\n            }\n            else if (p.name === 'src') {\n                block.src = p.value && p.value.content;\n            }\n            else if (type === 'style') {\n                if (p.name === 'scoped') {\n                    block.scoped = true;\n                }\n                else if (p.name === 'module') {\n                    block.module = attrs[p.name];\n                }\n            }\n            else if (type === 'script' && p.name === 'setup') {\n                block.setup = attrs.setup;\n            }\n        }\n    });\n    return block;\n}\nconst splitRE = /\\r?\\n/g;\nconst emptyRE = /^(?:\\/\\/)?\\s*$/;\nconst replaceRE = /./g;\nfunction generateSourceMap(filename, source, generated, sourceRoot, lineOffset) {\n    const map = new SourceMapGenerator$6({\n        file: filename.replace(/\\\\/g, '/'),\n        sourceRoot: sourceRoot.replace(/\\\\/g, '/')\n    });\n    map.setSourceContent(filename, source);\n    generated.split(splitRE).forEach((line, index) => {\n        if (!emptyRE.test(line)) {\n            const originalLine = index + 1 + lineOffset;\n            const generatedLine = index + 1;\n            for (let i = 0; i < line.length; i++) {\n                if (!/\\s/.test(line[i])) {\n                    map.addMapping({\n                        source: filename,\n                        original: {\n                            line: originalLine,\n                            column: i\n                        },\n                        generated: {\n                            line: generatedLine,\n                            column: i\n                        }\n                    });\n                }\n            }\n        }\n    });\n    return JSON.parse(map.toString());\n}\nfunction padContent(content, block, pad) {\n    content = content.slice(0, block.loc.start.offset);\n    if (pad === 'space') {\n        return content.replace(replaceRE, ' ');\n    }\n    else {\n        const offset = content.split(splitRE).length;\n        const padChar = block.type === 'script' && !block.lang ? '//\\n' : '\\n';\n        return Array(offset).join(padChar);\n    }\n}\nfunction hasSrc(node) {\n    return node.props.some(p => {\n        if (p.type !== 6 /* NodeTypes.ATTRIBUTE */) {\n            return false;\n        }\n        return p.name === 'src';\n    });\n}\n/**\n * Returns true if the node has no children\n * once the empty text nodes (trimmed content) have been filtered out.\n */\nfunction isEmpty(node) {\n    for (let i = 0; i < node.children.length; i++) {\n        const child = node.children[i];\n        if (child.type !== 2 /* NodeTypes.TEXT */ || child.content.trim() !== '') {\n            return false;\n        }\n    }\n    return true;\n}\n\nvar picocolors = {exports: {}};\n\n// MIT lisence\n// from https://github.com/substack/tty-browserify/blob/1ba769a6429d242f36226538835b4034bf6b7886/index.js\n\nfunction isatty() {\n  return false;\n}\n\nfunction ReadStream() {\n  throw new Error('tty.ReadStream is not implemented');\n}\n\nfunction WriteStream() {\n  throw new Error('tty.ReadStream is not implemented');\n}\n\nvar _polyfillNode_tty = {\n  isatty: isatty,\n  ReadStream: ReadStream,\n  WriteStream: WriteStream\n};\n\nvar _polyfillNode_tty$1 = /*#__PURE__*/Object.freeze({\n  __proto__: null,\n  ReadStream: ReadStream,\n  WriteStream: WriteStream,\n  default: _polyfillNode_tty,\n  isatty: isatty\n});\n\nvar require$$0 = /*@__PURE__*/getAugmentedNamespace(_polyfillNode_tty$1);\n\nlet tty = require$$0;\n\nlet isColorSupported =\n\t!(\"NO_COLOR\" in ({}) || browser$1.argv.includes(\"--no-color\")) &&\n\t(\"FORCE_COLOR\" in ({}) ||\n\t\tbrowser$1.argv.includes(\"--color\") ||\n\t\t\"\" === \"win32\" ||\n\t\t(tty.isatty(1) && browser$1.env.TERM !== \"dumb\") ||\n\t\t\"CI\" in ({}));\n\nlet formatter =\n\t(open, close, replace = open) =>\n\tinput => {\n\t\tlet string = \"\" + input;\n\t\tlet index = string.indexOf(close, open.length);\n\t\treturn ~index\n\t\t\t? open + replaceClose(string, close, replace, index) + close\n\t\t\t: open + string + close\n\t};\n\nlet replaceClose = (string, close, replace, index) => {\n\tlet start = string.substring(0, index) + replace;\n\tlet end = string.substring(index + close.length);\n\tlet nextIndex = end.indexOf(close);\n\treturn ~nextIndex ? start + replaceClose(end, close, replace, nextIndex) : start + end\n};\n\nlet createColors = (enabled = isColorSupported) => ({\n\tisColorSupported: enabled,\n\treset: enabled ? s => `\\x1b[0m${s}\\x1b[0m` : String,\n\tbold: enabled ? formatter(\"\\x1b[1m\", \"\\x1b[22m\", \"\\x1b[22m\\x1b[1m\") : String,\n\tdim: enabled ? formatter(\"\\x1b[2m\", \"\\x1b[22m\", \"\\x1b[22m\\x1b[2m\") : String,\n\titalic: enabled ? formatter(\"\\x1b[3m\", \"\\x1b[23m\") : String,\n\tunderline: enabled ? formatter(\"\\x1b[4m\", \"\\x1b[24m\") : String,\n\tinverse: enabled ? formatter(\"\\x1b[7m\", \"\\x1b[27m\") : String,\n\thidden: enabled ? formatter(\"\\x1b[8m\", \"\\x1b[28m\") : String,\n\tstrikethrough: enabled ? formatter(\"\\x1b[9m\", \"\\x1b[29m\") : String,\n\tblack: enabled ? formatter(\"\\x1b[30m\", \"\\x1b[39m\") : String,\n\tred: enabled ? formatter(\"\\x1b[31m\", \"\\x1b[39m\") : String,\n\tgreen: enabled ? formatter(\"\\x1b[32m\", \"\\x1b[39m\") : String,\n\tyellow: enabled ? formatter(\"\\x1b[33m\", \"\\x1b[39m\") : String,\n\tblue: enabled ? formatter(\"\\x1b[34m\", \"\\x1b[39m\") : String,\n\tmagenta: enabled ? formatter(\"\\x1b[35m\", \"\\x1b[39m\") : String,\n\tcyan: enabled ? formatter(\"\\x1b[36m\", \"\\x1b[39m\") : String,\n\twhite: enabled ? formatter(\"\\x1b[37m\", \"\\x1b[39m\") : String,\n\tgray: enabled ? formatter(\"\\x1b[90m\", \"\\x1b[39m\") : String,\n\tbgBlack: enabled ? formatter(\"\\x1b[40m\", \"\\x1b[49m\") : String,\n\tbgRed: enabled ? formatter(\"\\x1b[41m\", \"\\x1b[49m\") : String,\n\tbgGreen: enabled ? formatter(\"\\x1b[42m\", \"\\x1b[49m\") : String,\n\tbgYellow: enabled ? formatter(\"\\x1b[43m\", \"\\x1b[49m\") : String,\n\tbgBlue: enabled ? formatter(\"\\x1b[44m\", \"\\x1b[49m\") : String,\n\tbgMagenta: enabled ? formatter(\"\\x1b[45m\", \"\\x1b[49m\") : String,\n\tbgCyan: enabled ? formatter(\"\\x1b[46m\", \"\\x1b[49m\") : String,\n\tbgWhite: enabled ? formatter(\"\\x1b[47m\", \"\\x1b[49m\") : String,\n});\n\npicocolors.exports = createColors();\npicocolors.exports.createColors = createColors;\n\nconst SINGLE_QUOTE = \"'\".charCodeAt(0);\nconst DOUBLE_QUOTE = '\"'.charCodeAt(0);\nconst BACKSLASH = '\\\\'.charCodeAt(0);\nconst SLASH = '/'.charCodeAt(0);\nconst NEWLINE = '\\n'.charCodeAt(0);\nconst SPACE = ' '.charCodeAt(0);\nconst FEED = '\\f'.charCodeAt(0);\nconst TAB = '\\t'.charCodeAt(0);\nconst CR = '\\r'.charCodeAt(0);\nconst OPEN_SQUARE = '['.charCodeAt(0);\nconst CLOSE_SQUARE = ']'.charCodeAt(0);\nconst OPEN_PARENTHESES = '('.charCodeAt(0);\nconst CLOSE_PARENTHESES = ')'.charCodeAt(0);\nconst OPEN_CURLY = '{'.charCodeAt(0);\nconst CLOSE_CURLY = '}'.charCodeAt(0);\nconst SEMICOLON = ';'.charCodeAt(0);\nconst ASTERISK = '*'.charCodeAt(0);\nconst COLON = ':'.charCodeAt(0);\nconst AT = '@'.charCodeAt(0);\n\nconst RE_AT_END = /[\\t\\n\\f\\r \"#'()/;[\\\\\\]{}]/g;\nconst RE_WORD_END = /[\\t\\n\\f\\r !\"#'():;@[\\\\\\]{}]|\\/(?=\\*)/g;\nconst RE_BAD_BRACKET = /.[\\n\"'(/\\\\]/;\nconst RE_HEX_ESCAPE = /[\\da-f]/i;\n\nvar tokenize$1 = function tokenizer(input, options = {}) {\n  let css = input.css.valueOf();\n  let ignore = options.ignoreErrors;\n\n  let code, next, quote, content, escape;\n  let escaped, escapePos, prev, n, currentToken;\n\n  let length = css.length;\n  let pos = 0;\n  let buffer = [];\n  let returned = [];\n\n  function position() {\n    return pos\n  }\n\n  function unclosed(what) {\n    throw input.error('Unclosed ' + what, pos)\n  }\n\n  function endOfFile() {\n    return returned.length === 0 && pos >= length\n  }\n\n  function nextToken(opts) {\n    if (returned.length) return returned.pop()\n    if (pos >= length) return\n\n    let ignoreUnclosed = opts ? opts.ignoreUnclosed : false;\n\n    code = css.charCodeAt(pos);\n\n    switch (code) {\n      case NEWLINE:\n      case SPACE:\n      case TAB:\n      case CR:\n      case FEED: {\n        next = pos;\n        do {\n          next += 1;\n          code = css.charCodeAt(next);\n        } while (\n          code === SPACE ||\n          code === NEWLINE ||\n          code === TAB ||\n          code === CR ||\n          code === FEED\n        )\n\n        currentToken = ['space', css.slice(pos, next)];\n        pos = next - 1;\n        break\n      }\n\n      case OPEN_SQUARE:\n      case CLOSE_SQUARE:\n      case OPEN_CURLY:\n      case CLOSE_CURLY:\n      case COLON:\n      case SEMICOLON:\n      case CLOSE_PARENTHESES: {\n        let controlChar = String.fromCharCode(code);\n        currentToken = [controlChar, controlChar, pos];\n        break\n      }\n\n      case OPEN_PARENTHESES: {\n        prev = buffer.length ? buffer.pop()[1] : '';\n        n = css.charCodeAt(pos + 1);\n        if (\n          prev === 'url' &&\n          n !== SINGLE_QUOTE &&\n          n !== DOUBLE_QUOTE &&\n          n !== SPACE &&\n          n !== NEWLINE &&\n          n !== TAB &&\n          n !== FEED &&\n          n !== CR\n        ) {\n          next = pos;\n          do {\n            escaped = false;\n            next = css.indexOf(')', next + 1);\n            if (next === -1) {\n              if (ignore || ignoreUnclosed) {\n                next = pos;\n                break\n              } else {\n                unclosed('bracket');\n              }\n            }\n            escapePos = next;\n            while (css.charCodeAt(escapePos - 1) === BACKSLASH) {\n              escapePos -= 1;\n              escaped = !escaped;\n            }\n          } while (escaped)\n\n          currentToken = ['brackets', css.slice(pos, next + 1), pos, next];\n\n          pos = next;\n        } else {\n          next = css.indexOf(')', pos + 1);\n          content = css.slice(pos, next + 1);\n\n          if (next === -1 || RE_BAD_BRACKET.test(content)) {\n            currentToken = ['(', '(', pos];\n          } else {\n            currentToken = ['brackets', content, pos, next];\n            pos = next;\n          }\n        }\n\n        break\n      }\n\n      case SINGLE_QUOTE:\n      case DOUBLE_QUOTE: {\n        quote = code === SINGLE_QUOTE ? \"'\" : '\"';\n        next = pos;\n        do {\n          escaped = false;\n          next = css.indexOf(quote, next + 1);\n          if (next === -1) {\n            if (ignore || ignoreUnclosed) {\n              next = pos + 1;\n              break\n            } else {\n              unclosed('string');\n            }\n          }\n          escapePos = next;\n          while (css.charCodeAt(escapePos - 1) === BACKSLASH) {\n            escapePos -= 1;\n            escaped = !escaped;\n          }\n        } while (escaped)\n\n        currentToken = ['string', css.slice(pos, next + 1), pos, next];\n        pos = next;\n        break\n      }\n\n      case AT: {\n        RE_AT_END.lastIndex = pos + 1;\n        RE_AT_END.test(css);\n        if (RE_AT_END.lastIndex === 0) {\n          next = css.length - 1;\n        } else {\n          next = RE_AT_END.lastIndex - 2;\n        }\n\n        currentToken = ['at-word', css.slice(pos, next + 1), pos, next];\n\n        pos = next;\n        break\n      }\n\n      case BACKSLASH: {\n        next = pos;\n        escape = true;\n        while (css.charCodeAt(next + 1) === BACKSLASH) {\n          next += 1;\n          escape = !escape;\n        }\n        code = css.charCodeAt(next + 1);\n        if (\n          escape &&\n          code !== SLASH &&\n          code !== SPACE &&\n          code !== NEWLINE &&\n          code !== TAB &&\n          code !== CR &&\n          code !== FEED\n        ) {\n          next += 1;\n          if (RE_HEX_ESCAPE.test(css.charAt(next))) {\n            while (RE_HEX_ESCAPE.test(css.charAt(next + 1))) {\n              next += 1;\n            }\n            if (css.charCodeAt(next + 1) === SPACE) {\n              next += 1;\n            }\n          }\n        }\n\n        currentToken = ['word', css.slice(pos, next + 1), pos, next];\n\n        pos = next;\n        break\n      }\n\n      default: {\n        if (code === SLASH && css.charCodeAt(pos + 1) === ASTERISK) {\n          next = css.indexOf('*/', pos + 2) + 1;\n          if (next === 0) {\n            if (ignore || ignoreUnclosed) {\n              next = css.length;\n            } else {\n              unclosed('comment');\n            }\n          }\n\n          currentToken = ['comment', css.slice(pos, next + 1), pos, next];\n          pos = next;\n        } else {\n          RE_WORD_END.lastIndex = pos + 1;\n          RE_WORD_END.test(css);\n          if (RE_WORD_END.lastIndex === 0) {\n            next = css.length - 1;\n          } else {\n            next = RE_WORD_END.lastIndex - 2;\n          }\n\n          currentToken = ['word', css.slice(pos, next + 1), pos, next];\n          buffer.push(currentToken);\n          pos = next;\n        }\n\n        break\n      }\n    }\n\n    pos++;\n    return currentToken\n  }\n\n  function back(token) {\n    returned.push(token);\n  }\n\n  return {\n    back,\n    nextToken,\n    endOfFile,\n    position\n  }\n};\n\nlet pico$1 = picocolors.exports;\n\nlet tokenizer$1 = tokenize$1;\n\nlet Input$5;\n\nfunction registerInput(dependant) {\n  Input$5 = dependant;\n}\n\nconst HIGHLIGHT_THEME = {\n  'brackets': pico$1.cyan,\n  'at-word': pico$1.cyan,\n  'comment': pico$1.gray,\n  'string': pico$1.green,\n  'class': pico$1.yellow,\n  'hash': pico$1.magenta,\n  'call': pico$1.cyan,\n  '(': pico$1.cyan,\n  ')': pico$1.cyan,\n  '{': pico$1.yellow,\n  '}': pico$1.yellow,\n  '[': pico$1.yellow,\n  ']': pico$1.yellow,\n  ':': pico$1.yellow,\n  ';': pico$1.yellow\n};\n\nfunction getTokenType([type, value], processor) {\n  if (type === 'word') {\n    if (value[0] === '.') {\n      return 'class'\n    }\n    if (value[0] === '#') {\n      return 'hash'\n    }\n  }\n\n  if (!processor.endOfFile()) {\n    let next = processor.nextToken();\n    processor.back(next);\n    if (next[0] === 'brackets' || next[0] === '(') return 'call'\n  }\n\n  return type\n}\n\nfunction terminalHighlight$2(css) {\n  let processor = tokenizer$1(new Input$5(css), { ignoreErrors: true });\n  let result = '';\n  while (!processor.endOfFile()) {\n    let token = processor.nextToken();\n    let color = HIGHLIGHT_THEME[getTokenType(token, processor)];\n    if (color) {\n      result += token[1]\n        .split(/\\r?\\n/)\n        .map(i => color(i))\n        .join('\\n');\n    } else {\n      result += token[1];\n    }\n  }\n  return result\n}\n\nterminalHighlight$2.registerInput = registerInput;\n\nvar terminalHighlight_1 = terminalHighlight$2;\n\nlet pico = picocolors.exports;\n\nlet terminalHighlight$1 = terminalHighlight_1;\n\nlet CssSyntaxError$3 = class CssSyntaxError extends Error {\n  constructor(message, line, column, source, file, plugin) {\n    super(message);\n    this.name = 'CssSyntaxError';\n    this.reason = message;\n\n    if (file) {\n      this.file = file;\n    }\n    if (source) {\n      this.source = source;\n    }\n    if (plugin) {\n      this.plugin = plugin;\n    }\n    if (typeof line !== 'undefined' && typeof column !== 'undefined') {\n      if (typeof line === 'number') {\n        this.line = line;\n        this.column = column;\n      } else {\n        this.line = line.line;\n        this.column = line.column;\n        this.endLine = column.line;\n        this.endColumn = column.column;\n      }\n    }\n\n    this.setMessage();\n\n    if (Error.captureStackTrace) {\n      Error.captureStackTrace(this, CssSyntaxError$3);\n    }\n  }\n\n  setMessage() {\n    this.message = this.plugin ? this.plugin + ': ' : '';\n    this.message += this.file ? this.file : '<css input>';\n    if (typeof this.line !== 'undefined') {\n      this.message += ':' + this.line + ':' + this.column;\n    }\n    this.message += ': ' + this.reason;\n  }\n\n  showSourceCode(color) {\n    if (!this.source) return ''\n\n    let css = this.source;\n    if (color == null) color = pico.isColorSupported;\n    if (terminalHighlight$1) {\n      if (color) css = terminalHighlight$1(css);\n    }\n\n    let lines = css.split(/\\r?\\n/);\n    let start = Math.max(this.line - 3, 0);\n    let end = Math.min(this.line + 2, lines.length);\n\n    let maxWidth = String(end).length;\n\n    let mark, aside;\n    if (color) {\n      let { bold, red, gray } = pico.createColors(true);\n      mark = text => bold(red(text));\n      aside = text => gray(text);\n    } else {\n      mark = aside = str => str;\n    }\n\n    return lines\n      .slice(start, end)\n      .map((line, index) => {\n        let number = start + 1 + index;\n        let gutter = ' ' + (' ' + number).slice(-maxWidth) + ' | ';\n        if (number === this.line) {\n          let spacing =\n            aside(gutter.replace(/\\d/g, ' ')) +\n            line.slice(0, this.column - 1).replace(/[^\\t]/g, ' ');\n          return mark('>') + aside(gutter) + line + '\\n ' + spacing + mark('^')\n        }\n        return ' ' + aside(gutter) + line\n      })\n      .join('\\n')\n  }\n\n  toString() {\n    let code = this.showSourceCode();\n    if (code) {\n      code = '\\n\\n' + code + '\\n';\n    }\n    return this.name + ': ' + this.message + code\n  }\n};\n\nvar cssSyntaxError = CssSyntaxError$3;\nCssSyntaxError$3.default = CssSyntaxError$3;\n\nvar symbols = {};\n\nsymbols.isClean = Symbol('isClean');\n\nsymbols.my = Symbol('my');\n\nconst DEFAULT_RAW = {\n  colon: ': ',\n  indent: '    ',\n  beforeDecl: '\\n',\n  beforeRule: '\\n',\n  beforeOpen: ' ',\n  beforeClose: '\\n',\n  beforeComment: '\\n',\n  after: '\\n',\n  emptyBody: '',\n  commentLeft: ' ',\n  commentRight: ' ',\n  semicolon: false\n};\n\nfunction capitalize(str) {\n  return str[0].toUpperCase() + str.slice(1)\n}\n\nlet Stringifier$2 = class Stringifier {\n  constructor(builder) {\n    this.builder = builder;\n  }\n\n  stringify(node, semicolon) {\n    /* c8 ignore start */\n    if (!this[node.type]) {\n      throw new Error(\n        'Unknown AST node type ' +\n          node.type +\n          '. ' +\n          'Maybe you need to change PostCSS stringifier.'\n      )\n    }\n    /* c8 ignore stop */\n    this[node.type](node, semicolon);\n  }\n\n  document(node) {\n    this.body(node);\n  }\n\n  root(node) {\n    this.body(node);\n    if (node.raws.after) this.builder(node.raws.after);\n  }\n\n  comment(node) {\n    let left = this.raw(node, 'left', 'commentLeft');\n    let right = this.raw(node, 'right', 'commentRight');\n    this.builder('/*' + left + node.text + right + '*/', node);\n  }\n\n  decl(node, semicolon) {\n    let between = this.raw(node, 'between', 'colon');\n    let string = node.prop + between + this.rawValue(node, 'value');\n\n    if (node.important) {\n      string += node.raws.important || ' !important';\n    }\n\n    if (semicolon) string += ';';\n    this.builder(string, node);\n  }\n\n  rule(node) {\n    this.block(node, this.rawValue(node, 'selector'));\n    if (node.raws.ownSemicolon) {\n      this.builder(node.raws.ownSemicolon, node, 'end');\n    }\n  }\n\n  atrule(node, semicolon) {\n    let name = '@' + node.name;\n    let params = node.params ? this.rawValue(node, 'params') : '';\n\n    if (typeof node.raws.afterName !== 'undefined') {\n      name += node.raws.afterName;\n    } else if (params) {\n      name += ' ';\n    }\n\n    if (node.nodes) {\n      this.block(node, name + params);\n    } else {\n      let end = (node.raws.between || '') + (semicolon ? ';' : '');\n      this.builder(name + params + end, node);\n    }\n  }\n\n  body(node) {\n    let last = node.nodes.length - 1;\n    while (last > 0) {\n      if (node.nodes[last].type !== 'comment') break\n      last -= 1;\n    }\n\n    let semicolon = this.raw(node, 'semicolon');\n    for (let i = 0; i < node.nodes.length; i++) {\n      let child = node.nodes[i];\n      let before = this.raw(child, 'before');\n      if (before) this.builder(before);\n      this.stringify(child, last !== i || semicolon);\n    }\n  }\n\n  block(node, start) {\n    let between = this.raw(node, 'between', 'beforeOpen');\n    this.builder(start + between + '{', node, 'start');\n\n    let after;\n    if (node.nodes && node.nodes.length) {\n      this.body(node);\n      after = this.raw(node, 'after');\n    } else {\n      after = this.raw(node, 'after', 'emptyBody');\n    }\n\n    if (after) this.builder(after);\n    this.builder('}', node, 'end');\n  }\n\n  raw(node, own, detect) {\n    let value;\n    if (!detect) detect = own;\n\n    // Already had\n    if (own) {\n      value = node.raws[own];\n      if (typeof value !== 'undefined') return value\n    }\n\n    let parent = node.parent;\n\n    if (detect === 'before') {\n      // Hack for first rule in CSS\n      if (!parent || (parent.type === 'root' && parent.first === node)) {\n        return ''\n      }\n\n      // `root` nodes in `document` should use only their own raws\n      if (parent && parent.type === 'document') {\n        return ''\n      }\n    }\n\n    // Floating child without parent\n    if (!parent) return DEFAULT_RAW[detect]\n\n    // Detect style by other nodes\n    let root = node.root();\n    if (!root.rawCache) root.rawCache = {};\n    if (typeof root.rawCache[detect] !== 'undefined') {\n      return root.rawCache[detect]\n    }\n\n    if (detect === 'before' || detect === 'after') {\n      return this.beforeAfter(node, detect)\n    } else {\n      let method = 'raw' + capitalize(detect);\n      if (this[method]) {\n        value = this[method](root, node);\n      } else {\n        root.walk(i => {\n          value = i.raws[own];\n          if (typeof value !== 'undefined') return false\n        });\n      }\n    }\n\n    if (typeof value === 'undefined') value = DEFAULT_RAW[detect];\n\n    root.rawCache[detect] = value;\n    return value\n  }\n\n  rawSemicolon(root) {\n    let value;\n    root.walk(i => {\n      if (i.nodes && i.nodes.length && i.last.type === 'decl') {\n        value = i.raws.semicolon;\n        if (typeof value !== 'undefined') return false\n      }\n    });\n    return value\n  }\n\n  rawEmptyBody(root) {\n    let value;\n    root.walk(i => {\n      if (i.nodes && i.nodes.length === 0) {\n        value = i.raws.after;\n        if (typeof value !== 'undefined') return false\n      }\n    });\n    return value\n  }\n\n  rawIndent(root) {\n    if (root.raws.indent) return root.raws.indent\n    let value;\n    root.walk(i => {\n      let p = i.parent;\n      if (p && p !== root && p.parent && p.parent === root) {\n        if (typeof i.raws.before !== 'undefined') {\n          let parts = i.raws.before.split('\\n');\n          value = parts[parts.length - 1];\n          value = value.replace(/\\S/g, '');\n          return false\n        }\n      }\n    });\n    return value\n  }\n\n  rawBeforeComment(root, node) {\n    let value;\n    root.walkComments(i => {\n      if (typeof i.raws.before !== 'undefined') {\n        value = i.raws.before;\n        if (value.includes('\\n')) {\n          value = value.replace(/[^\\n]+$/, '');\n        }\n        return false\n      }\n    });\n    if (typeof value === 'undefined') {\n      value = this.raw(node, null, 'beforeDecl');\n    } else if (value) {\n      value = value.replace(/\\S/g, '');\n    }\n    return value\n  }\n\n  rawBeforeDecl(root, node) {\n    let value;\n    root.walkDecls(i => {\n      if (typeof i.raws.before !== 'undefined') {\n        value = i.raws.before;\n        if (value.includes('\\n')) {\n          value = value.replace(/[^\\n]+$/, '');\n        }\n        return false\n      }\n    });\n    if (typeof value === 'undefined') {\n      value = this.raw(node, null, 'beforeRule');\n    } else if (value) {\n      value = value.replace(/\\S/g, '');\n    }\n    return value\n  }\n\n  rawBeforeRule(root) {\n    let value;\n    root.walk(i => {\n      if (i.nodes && (i.parent !== root || root.first !== i)) {\n        if (typeof i.raws.before !== 'undefined') {\n          value = i.raws.before;\n          if (value.includes('\\n')) {\n            value = value.replace(/[^\\n]+$/, '');\n          }\n          return false\n        }\n      }\n    });\n    if (value) value = value.replace(/\\S/g, '');\n    return value\n  }\n\n  rawBeforeClose(root) {\n    let value;\n    root.walk(i => {\n      if (i.nodes && i.nodes.length > 0) {\n        if (typeof i.raws.after !== 'undefined') {\n          value = i.raws.after;\n          if (value.includes('\\n')) {\n            value = value.replace(/[^\\n]+$/, '');\n          }\n          return false\n        }\n      }\n    });\n    if (value) value = value.replace(/\\S/g, '');\n    return value\n  }\n\n  rawBeforeOpen(root) {\n    let value;\n    root.walk(i => {\n      if (i.type !== 'decl') {\n        value = i.raws.between;\n        if (typeof value !== 'undefined') return false\n      }\n    });\n    return value\n  }\n\n  rawColon(root) {\n    let value;\n    root.walkDecls(i => {\n      if (typeof i.raws.between !== 'undefined') {\n        value = i.raws.between.replace(/[^\\s:]/g, '');\n        return false\n      }\n    });\n    return value\n  }\n\n  beforeAfter(node, detect) {\n    let value;\n    if (node.type === 'decl') {\n      value = this.raw(node, null, 'beforeDecl');\n    } else if (node.type === 'comment') {\n      value = this.raw(node, null, 'beforeComment');\n    } else if (detect === 'before') {\n      value = this.raw(node, null, 'beforeRule');\n    } else {\n      value = this.raw(node, null, 'beforeClose');\n    }\n\n    let buf = node.parent;\n    let depth = 0;\n    while (buf && buf.type !== 'root') {\n      depth += 1;\n      buf = buf.parent;\n    }\n\n    if (value.includes('\\n')) {\n      let indent = this.raw(node, null, 'indent');\n      if (indent.length) {\n        for (let step = 0; step < depth; step++) value += indent;\n      }\n    }\n\n    return value\n  }\n\n  rawValue(node, prop) {\n    let value = node[prop];\n    let raw = node.raws[prop];\n    if (raw && raw.value === value) {\n      return raw.raw\n    }\n\n    return value\n  }\n};\n\nvar stringifier = Stringifier$2;\nStringifier$2.default = Stringifier$2;\n\nlet Stringifier$1 = stringifier;\n\nfunction stringify$4(node, builder) {\n  let str = new Stringifier$1(builder);\n  str.stringify(node);\n}\n\nvar stringify_1 = stringify$4;\nstringify$4.default = stringify$4;\n\nlet { isClean: isClean$2, my: my$2 } = symbols;\nlet CssSyntaxError$2 = cssSyntaxError;\nlet Stringifier = stringifier;\nlet stringify$3 = stringify_1;\n\nfunction cloneNode(obj, parent) {\n  let cloned = new obj.constructor();\n\n  for (let i in obj) {\n    if (!Object.prototype.hasOwnProperty.call(obj, i)) {\n      /* c8 ignore next 2 */\n      continue\n    }\n    if (i === 'proxyCache') continue\n    let value = obj[i];\n    let type = typeof value;\n\n    if (i === 'parent' && type === 'object') {\n      if (parent) cloned[i] = parent;\n    } else if (i === 'source') {\n      cloned[i] = value;\n    } else if (Array.isArray(value)) {\n      cloned[i] = value.map(j => cloneNode(j, cloned));\n    } else {\n      if (type === 'object' && value !== null) value = cloneNode(value);\n      cloned[i] = value;\n    }\n  }\n\n  return cloned\n}\n\nlet Node$4 = class Node {\n  constructor(defaults = {}) {\n    this.raws = {};\n    this[isClean$2] = false;\n    this[my$2] = true;\n\n    for (let name in defaults) {\n      if (name === 'nodes') {\n        this.nodes = [];\n        for (let node of defaults[name]) {\n          if (typeof node.clone === 'function') {\n            this.append(node.clone());\n          } else {\n            this.append(node);\n          }\n        }\n      } else {\n        this[name] = defaults[name];\n      }\n    }\n  }\n\n  error(message, opts = {}) {\n    if (this.source) {\n      let { start, end } = this.rangeBy(opts);\n      return this.source.input.error(\n        message,\n        { line: start.line, column: start.column },\n        { line: end.line, column: end.column },\n        opts\n      )\n    }\n    return new CssSyntaxError$2(message)\n  }\n\n  warn(result, text, opts) {\n    let data = { node: this };\n    for (let i in opts) data[i] = opts[i];\n    return result.warn(text, data)\n  }\n\n  remove() {\n    if (this.parent) {\n      this.parent.removeChild(this);\n    }\n    this.parent = undefined;\n    return this\n  }\n\n  toString(stringifier = stringify$3) {\n    if (stringifier.stringify) stringifier = stringifier.stringify;\n    let result = '';\n    stringifier(this, i => {\n      result += i;\n    });\n    return result\n  }\n\n  assign(overrides = {}) {\n    for (let name in overrides) {\n      this[name] = overrides[name];\n    }\n    return this\n  }\n\n  clone(overrides = {}) {\n    let cloned = cloneNode(this);\n    for (let name in overrides) {\n      cloned[name] = overrides[name];\n    }\n    return cloned\n  }\n\n  cloneBefore(overrides = {}) {\n    let cloned = this.clone(overrides);\n    this.parent.insertBefore(this, cloned);\n    return cloned\n  }\n\n  cloneAfter(overrides = {}) {\n    let cloned = this.clone(overrides);\n    this.parent.insertAfter(this, cloned);\n    return cloned\n  }\n\n  replaceWith(...nodes) {\n    if (this.parent) {\n      let bookmark = this;\n      let foundSelf = false;\n      for (let node of nodes) {\n        if (node === this) {\n          foundSelf = true;\n        } else if (foundSelf) {\n          this.parent.insertAfter(bookmark, node);\n          bookmark = node;\n        } else {\n          this.parent.insertBefore(bookmark, node);\n        }\n      }\n\n      if (!foundSelf) {\n        this.remove();\n      }\n    }\n\n    return this\n  }\n\n  next() {\n    if (!this.parent) return undefined\n    let index = this.parent.index(this);\n    return this.parent.nodes[index + 1]\n  }\n\n  prev() {\n    if (!this.parent) return undefined\n    let index = this.parent.index(this);\n    return this.parent.nodes[index - 1]\n  }\n\n  before(add) {\n    this.parent.insertBefore(this, add);\n    return this\n  }\n\n  after(add) {\n    this.parent.insertAfter(this, add);\n    return this\n  }\n\n  root() {\n    let result = this;\n    while (result.parent && result.parent.type !== 'document') {\n      result = result.parent;\n    }\n    return result\n  }\n\n  raw(prop, defaultType) {\n    let str = new Stringifier();\n    return str.raw(this, prop, defaultType)\n  }\n\n  cleanRaws(keepBetween) {\n    delete this.raws.before;\n    delete this.raws.after;\n    if (!keepBetween) delete this.raws.between;\n  }\n\n  toJSON(_, inputs) {\n    let fixed = {};\n    let emitInputs = inputs == null;\n    inputs = inputs || new Map();\n    let inputsNextIndex = 0;\n\n    for (let name in this) {\n      if (!Object.prototype.hasOwnProperty.call(this, name)) {\n        /* c8 ignore next 2 */\n        continue\n      }\n      if (name === 'parent' || name === 'proxyCache') continue\n      let value = this[name];\n\n      if (Array.isArray(value)) {\n        fixed[name] = value.map(i => {\n          if (typeof i === 'object' && i.toJSON) {\n            return i.toJSON(null, inputs)\n          } else {\n            return i\n          }\n        });\n      } else if (typeof value === 'object' && value.toJSON) {\n        fixed[name] = value.toJSON(null, inputs);\n      } else if (name === 'source') {\n        let inputId = inputs.get(value.input);\n        if (inputId == null) {\n          inputId = inputsNextIndex;\n          inputs.set(value.input, inputsNextIndex);\n          inputsNextIndex++;\n        }\n        fixed[name] = {\n          inputId,\n          start: value.start,\n          end: value.end\n        };\n      } else {\n        fixed[name] = value;\n      }\n    }\n\n    if (emitInputs) {\n      fixed.inputs = [...inputs.keys()].map(input => input.toJSON());\n    }\n\n    return fixed\n  }\n\n  positionInside(index) {\n    let string = this.toString();\n    let column = this.source.start.column;\n    let line = this.source.start.line;\n\n    for (let i = 0; i < index; i++) {\n      if (string[i] === '\\n') {\n        column = 1;\n        line += 1;\n      } else {\n        column += 1;\n      }\n    }\n\n    return { line, column }\n  }\n\n  positionBy(opts) {\n    let pos = this.source.start;\n    if (opts.index) {\n      pos = this.positionInside(opts.index);\n    } else if (opts.word) {\n      let index = this.toString().indexOf(opts.word);\n      if (index !== -1) pos = this.positionInside(index);\n    }\n    return pos\n  }\n\n  rangeBy(opts) {\n    let start = {\n      line: this.source.start.line,\n      column: this.source.start.column\n    };\n    let end = this.source.end\n      ? {\n          line: this.source.end.line,\n          column: this.source.end.column + 1\n        }\n      : {\n          line: start.line,\n          column: start.column + 1\n        };\n\n    if (opts.word) {\n      let index = this.toString().indexOf(opts.word);\n      if (index !== -1) {\n        start = this.positionInside(index);\n        end = this.positionInside(index + opts.word.length);\n      }\n    } else {\n      if (opts.start) {\n        start = {\n          line: opts.start.line,\n          column: opts.start.column\n        };\n      } else if (opts.index) {\n        start = this.positionInside(opts.index);\n      }\n\n      if (opts.end) {\n        end = {\n          line: opts.end.line,\n          column: opts.end.column\n        };\n      } else if (opts.endIndex) {\n        end = this.positionInside(opts.endIndex);\n      } else if (opts.index) {\n        end = this.positionInside(opts.index + 1);\n      }\n    }\n\n    if (\n      end.line < start.line ||\n      (end.line === start.line && end.column <= start.column)\n    ) {\n      end = { line: start.line, column: start.column + 1 };\n    }\n\n    return { start, end }\n  }\n\n  getProxyProcessor() {\n    return {\n      set(node, prop, value) {\n        if (node[prop] === value) return true\n        node[prop] = value;\n        if (\n          prop === 'prop' ||\n          prop === 'value' ||\n          prop === 'name' ||\n          prop === 'params' ||\n          prop === 'important' ||\n          /* c8 ignore next */\n          prop === 'text'\n        ) {\n          node.markDirty();\n        }\n        return true\n      },\n\n      get(node, prop) {\n        if (prop === 'proxyOf') {\n          return node\n        } else if (prop === 'root') {\n          return () => node.root().toProxy()\n        } else {\n          return node[prop]\n        }\n      }\n    }\n  }\n\n  toProxy() {\n    if (!this.proxyCache) {\n      this.proxyCache = new Proxy(this, this.getProxyProcessor());\n    }\n    return this.proxyCache\n  }\n\n  addToError(error) {\n    error.postcssNode = this;\n    if (error.stack && this.source && /\\n\\s{4}at /.test(error.stack)) {\n      let s = this.source;\n      error.stack = error.stack.replace(\n        /\\n\\s{4}at /,\n        `$&${s.input.from}:${s.start.line}:${s.start.column}$&`\n      );\n    }\n    return error\n  }\n\n  markDirty() {\n    if (this[isClean$2]) {\n      this[isClean$2] = false;\n      let next = this;\n      while ((next = next.parent)) {\n        next[isClean$2] = false;\n      }\n    }\n  }\n\n  get proxyOf() {\n    return this\n  }\n};\n\nvar node$2 = Node$4;\nNode$4.default = Node$4;\n\nlet Node$3 = node$2;\n\nlet Declaration$4 = class Declaration extends Node$3 {\n  constructor(defaults) {\n    if (\n      defaults &&\n      typeof defaults.value !== 'undefined' &&\n      typeof defaults.value !== 'string'\n    ) {\n      defaults = { ...defaults, value: String(defaults.value) };\n    }\n    super(defaults);\n    this.type = 'decl';\n  }\n\n  get variable() {\n    return this.prop.startsWith('--') || this.prop[0] === '$'\n  }\n};\n\nvar declaration = Declaration$4;\nDeclaration$4.default = Declaration$4;\n\nvar sourceMap$1 = {};\n\nvar sourceMapGenerator = {};\n\nvar base64Vlq = {};\n\nvar base64$1 = {};\n\n/* -*- Mode: js; js-indent-level: 2; -*- */\n\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');\n\n/**\n * Encode an integer in the range of 0 to 63 to a single base 64 digit.\n */\nbase64$1.encode = function (number) {\n  if (0 <= number && number < intToCharMap.length) {\n    return intToCharMap[number];\n  }\n  throw new TypeError(\"Must be between 0 and 63: \" + number);\n};\n\n/**\n * Decode a single base 64 character code digit to an integer. Returns -1 on\n * failure.\n */\nbase64$1.decode = function (charCode) {\n  var bigA = 65;     // 'A'\n  var bigZ = 90;     // 'Z'\n\n  var littleA = 97;  // 'a'\n  var littleZ = 122; // 'z'\n\n  var zero = 48;     // '0'\n  var nine = 57;     // '9'\n\n  var plus = 43;     // '+'\n  var slash = 47;    // '/'\n\n  var littleOffset = 26;\n  var numberOffset = 52;\n\n  // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ\n  if (bigA <= charCode && charCode <= bigZ) {\n    return (charCode - bigA);\n  }\n\n  // 26 - 51: abcdefghijklmnopqrstuvwxyz\n  if (littleA <= charCode && charCode <= littleZ) {\n    return (charCode - littleA + littleOffset);\n  }\n\n  // 52 - 61: 0123456789\n  if (zero <= charCode && charCode <= nine) {\n    return (charCode - zero + numberOffset);\n  }\n\n  // 62: +\n  if (charCode == plus) {\n    return 62;\n  }\n\n  // 63: /\n  if (charCode == slash) {\n    return 63;\n  }\n\n  // Invalid base64 digit.\n  return -1;\n};\n\n/* -*- Mode: js; js-indent-level: 2; -*- */\n\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n *\n * Based on the Base 64 VLQ implementation in Closure Compiler:\n * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java\n *\n * Copyright 2011 The Closure Compiler Authors. All rights reserved.\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *  * Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n *  * Redistributions in binary form must reproduce the above\n *    copyright notice, this list of conditions and the following\n *    disclaimer in the documentation and/or other materials provided\n *    with the distribution.\n *  * Neither the name of Google Inc. nor the names of its\n *    contributors may be used to endorse or promote products derived\n *    from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nvar base64 = base64$1;\n\n// A single base 64 digit can contain 6 bits of data. For the base 64 variable\n// length quantities we use in the source map spec, the first bit is the sign,\n// the next four bits are the actual value, and the 6th bit is the\n// continuation bit. The continuation bit tells us whether there are more\n// digits in this value following this digit.\n//\n//   Continuation\n//   |    Sign\n//   |    |\n//   V    V\n//   101011\n\nvar VLQ_BASE_SHIFT = 5;\n\n// binary: 100000\nvar VLQ_BASE = 1 << VLQ_BASE_SHIFT;\n\n// binary: 011111\nvar VLQ_BASE_MASK = VLQ_BASE - 1;\n\n// binary: 100000\nvar VLQ_CONTINUATION_BIT = VLQ_BASE;\n\n/**\n * Converts from a two-complement value to a value where the sign bit is\n * placed in the least significant bit.  For example, as decimals:\n *   1 becomes 2 (10 binary), -1 becomes 3 (11 binary)\n *   2 becomes 4 (100 binary), -2 becomes 5 (101 binary)\n */\nfunction toVLQSigned(aValue) {\n  return aValue < 0\n    ? ((-aValue) << 1) + 1\n    : (aValue << 1) + 0;\n}\n\n/**\n * Converts to a two-complement value from a value where the sign bit is\n * placed in the least significant bit.  For example, as decimals:\n *   2 (10 binary) becomes 1, 3 (11 binary) becomes -1\n *   4 (100 binary) becomes 2, 5 (101 binary) becomes -2\n */\nfunction fromVLQSigned(aValue) {\n  var isNegative = (aValue & 1) === 1;\n  var shifted = aValue >> 1;\n  return isNegative\n    ? -shifted\n    : shifted;\n}\n\n/**\n * Returns the base 64 VLQ encoded value.\n */\nbase64Vlq.encode = function base64VLQ_encode(aValue) {\n  var encoded = \"\";\n  var digit;\n\n  var vlq = toVLQSigned(aValue);\n\n  do {\n    digit = vlq & VLQ_BASE_MASK;\n    vlq >>>= VLQ_BASE_SHIFT;\n    if (vlq > 0) {\n      // There are still more digits in this value, so we must make sure the\n      // continuation bit is marked.\n      digit |= VLQ_CONTINUATION_BIT;\n    }\n    encoded += base64.encode(digit);\n  } while (vlq > 0);\n\n  return encoded;\n};\n\n/**\n * Decodes the next base 64 VLQ value from the given string and returns the\n * value and the rest of the string via the out parameter.\n */\nbase64Vlq.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) {\n  var strLen = aStr.length;\n  var result = 0;\n  var shift = 0;\n  var continuation, digit;\n\n  do {\n    if (aIndex >= strLen) {\n      throw new Error(\"Expected more digits in base 64 VLQ value.\");\n    }\n\n    digit = base64.decode(aStr.charCodeAt(aIndex++));\n    if (digit === -1) {\n      throw new Error(\"Invalid base64 digit: \" + aStr.charAt(aIndex - 1));\n    }\n\n    continuation = !!(digit & VLQ_CONTINUATION_BIT);\n    digit &= VLQ_BASE_MASK;\n    result = result + (digit << shift);\n    shift += VLQ_BASE_SHIFT;\n  } while (continuation);\n\n  aOutParam.value = fromVLQSigned(result);\n  aOutParam.rest = aIndex;\n};\n\nvar util$6 = {};\n\n/* -*- Mode: js; js-indent-level: 2; -*- */\n\n(function (exports) {\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\n\t/**\n\t * This is a helper function for getting values from parameter/options\n\t * objects.\n\t *\n\t * @param args The object we are extracting values from\n\t * @param name The name of the property we are getting.\n\t * @param defaultValue An optional value to return if the property is missing\n\t * from the object. If this is not specified and the property is missing, an\n\t * error will be thrown.\n\t */\n\tfunction getArg(aArgs, aName, aDefaultValue) {\n\t  if (aName in aArgs) {\n\t    return aArgs[aName];\n\t  } else if (arguments.length === 3) {\n\t    return aDefaultValue;\n\t  } else {\n\t    throw new Error('\"' + aName + '\" is a required argument.');\n\t  }\n\t}\n\texports.getArg = getArg;\n\n\tvar urlRegexp = /^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.-]*)(?::(\\d+))?(.*)$/;\n\tvar dataUrlRegexp = /^data:.+\\,.+$/;\n\n\tfunction urlParse(aUrl) {\n\t  var match = aUrl.match(urlRegexp);\n\t  if (!match) {\n\t    return null;\n\t  }\n\t  return {\n\t    scheme: match[1],\n\t    auth: match[2],\n\t    host: match[3],\n\t    port: match[4],\n\t    path: match[5]\n\t  };\n\t}\n\texports.urlParse = urlParse;\n\n\tfunction urlGenerate(aParsedUrl) {\n\t  var url = '';\n\t  if (aParsedUrl.scheme) {\n\t    url += aParsedUrl.scheme + ':';\n\t  }\n\t  url += '//';\n\t  if (aParsedUrl.auth) {\n\t    url += aParsedUrl.auth + '@';\n\t  }\n\t  if (aParsedUrl.host) {\n\t    url += aParsedUrl.host;\n\t  }\n\t  if (aParsedUrl.port) {\n\t    url += \":\" + aParsedUrl.port;\n\t  }\n\t  if (aParsedUrl.path) {\n\t    url += aParsedUrl.path;\n\t  }\n\t  return url;\n\t}\n\texports.urlGenerate = urlGenerate;\n\n\tvar MAX_CACHED_INPUTS = 32;\n\n\t/**\n\t * Takes some function `f(input) -> result` and returns a memoized version of\n\t * `f`.\n\t *\n\t * We keep at most `MAX_CACHED_INPUTS` memoized results of `f` alive. The\n\t * memoization is a dumb-simple, linear least-recently-used cache.\n\t */\n\tfunction lruMemoize(f) {\n\t  var cache = [];\n\n\t  return function(input) {\n\t    for (var i = 0; i < cache.length; i++) {\n\t      if (cache[i].input === input) {\n\t        var temp = cache[0];\n\t        cache[0] = cache[i];\n\t        cache[i] = temp;\n\t        return cache[0].result;\n\t      }\n\t    }\n\n\t    var result = f(input);\n\n\t    cache.unshift({\n\t      input,\n\t      result,\n\t    });\n\n\t    if (cache.length > MAX_CACHED_INPUTS) {\n\t      cache.pop();\n\t    }\n\n\t    return result;\n\t  };\n\t}\n\n\t/**\n\t * Normalizes a path, or the path portion of a URL:\n\t *\n\t * - Replaces consecutive slashes with one slash.\n\t * - Removes unnecessary '.' parts.\n\t * - Removes unnecessary '<dir>/..' parts.\n\t *\n\t * Based on code in the Node.js 'path' core module.\n\t *\n\t * @param aPath The path or url to normalize.\n\t */\n\tvar normalize = lruMemoize(function normalize(aPath) {\n\t  var path = aPath;\n\t  var url = urlParse(aPath);\n\t  if (url) {\n\t    if (!url.path) {\n\t      return aPath;\n\t    }\n\t    path = url.path;\n\t  }\n\t  var isAbsolute = exports.isAbsolute(path);\n\t  // Split the path into parts between `/` characters. This is much faster than\n\t  // using `.split(/\\/+/g)`.\n\t  var parts = [];\n\t  var start = 0;\n\t  var i = 0;\n\t  while (true) {\n\t    start = i;\n\t    i = path.indexOf(\"/\", start);\n\t    if (i === -1) {\n\t      parts.push(path.slice(start));\n\t      break;\n\t    } else {\n\t      parts.push(path.slice(start, i));\n\t      while (i < path.length && path[i] === \"/\") {\n\t        i++;\n\t      }\n\t    }\n\t  }\n\n\t  for (var part, up = 0, i = parts.length - 1; i >= 0; i--) {\n\t    part = parts[i];\n\t    if (part === '.') {\n\t      parts.splice(i, 1);\n\t    } else if (part === '..') {\n\t      up++;\n\t    } else if (up > 0) {\n\t      if (part === '') {\n\t        // The first part is blank if the path is absolute. Trying to go\n\t        // above the root is a no-op. Therefore we can remove all '..' parts\n\t        // directly after the root.\n\t        parts.splice(i + 1, up);\n\t        up = 0;\n\t      } else {\n\t        parts.splice(i, 2);\n\t        up--;\n\t      }\n\t    }\n\t  }\n\t  path = parts.join('/');\n\n\t  if (path === '') {\n\t    path = isAbsolute ? '/' : '.';\n\t  }\n\n\t  if (url) {\n\t    url.path = path;\n\t    return urlGenerate(url);\n\t  }\n\t  return path;\n\t});\n\texports.normalize = normalize;\n\n\t/**\n\t * Joins two paths/URLs.\n\t *\n\t * @param aRoot The root path or URL.\n\t * @param aPath The path or URL to be joined with the root.\n\t *\n\t * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a\n\t *   scheme-relative URL: Then the scheme of aRoot, if any, is prepended\n\t *   first.\n\t * - Otherwise aPath is a path. If aRoot is a URL, then its path portion\n\t *   is updated with the result and aRoot is returned. Otherwise the result\n\t *   is returned.\n\t *   - If aPath is absolute, the result is aPath.\n\t *   - Otherwise the two paths are joined with a slash.\n\t * - Joining for example 'http://' and 'www.example.com' is also supported.\n\t */\n\tfunction join(aRoot, aPath) {\n\t  if (aRoot === \"\") {\n\t    aRoot = \".\";\n\t  }\n\t  if (aPath === \"\") {\n\t    aPath = \".\";\n\t  }\n\t  var aPathUrl = urlParse(aPath);\n\t  var aRootUrl = urlParse(aRoot);\n\t  if (aRootUrl) {\n\t    aRoot = aRootUrl.path || '/';\n\t  }\n\n\t  // `join(foo, '//www.example.org')`\n\t  if (aPathUrl && !aPathUrl.scheme) {\n\t    if (aRootUrl) {\n\t      aPathUrl.scheme = aRootUrl.scheme;\n\t    }\n\t    return urlGenerate(aPathUrl);\n\t  }\n\n\t  if (aPathUrl || aPath.match(dataUrlRegexp)) {\n\t    return aPath;\n\t  }\n\n\t  // `join('http://', 'www.example.com')`\n\t  if (aRootUrl && !aRootUrl.host && !aRootUrl.path) {\n\t    aRootUrl.host = aPath;\n\t    return urlGenerate(aRootUrl);\n\t  }\n\n\t  var joined = aPath.charAt(0) === '/'\n\t    ? aPath\n\t    : normalize(aRoot.replace(/\\/+$/, '') + '/' + aPath);\n\n\t  if (aRootUrl) {\n\t    aRootUrl.path = joined;\n\t    return urlGenerate(aRootUrl);\n\t  }\n\t  return joined;\n\t}\n\texports.join = join;\n\n\texports.isAbsolute = function (aPath) {\n\t  return aPath.charAt(0) === '/' || urlRegexp.test(aPath);\n\t};\n\n\t/**\n\t * Make a path relative to a URL or another path.\n\t *\n\t * @param aRoot The root path or URL.\n\t * @param aPath The path or URL to be made relative to aRoot.\n\t */\n\tfunction relative(aRoot, aPath) {\n\t  if (aRoot === \"\") {\n\t    aRoot = \".\";\n\t  }\n\n\t  aRoot = aRoot.replace(/\\/$/, '');\n\n\t  // It is possible for the path to be above the root. In this case, simply\n\t  // checking whether the root is a prefix of the path won't work. Instead, we\n\t  // need to remove components from the root one by one, until either we find\n\t  // a prefix that fits, or we run out of components to remove.\n\t  var level = 0;\n\t  while (aPath.indexOf(aRoot + '/') !== 0) {\n\t    var index = aRoot.lastIndexOf(\"/\");\n\t    if (index < 0) {\n\t      return aPath;\n\t    }\n\n\t    // If the only part of the root that is left is the scheme (i.e. http://,\n\t    // file:///, etc.), one or more slashes (/), or simply nothing at all, we\n\t    // have exhausted all components, so the path is not relative to the root.\n\t    aRoot = aRoot.slice(0, index);\n\t    if (aRoot.match(/^([^\\/]+:\\/)?\\/*$/)) {\n\t      return aPath;\n\t    }\n\n\t    ++level;\n\t  }\n\n\t  // Make sure we add a \"../\" for each component we removed from the root.\n\t  return Array(level + 1).join(\"../\") + aPath.substr(aRoot.length + 1);\n\t}\n\texports.relative = relative;\n\n\tvar supportsNullProto = (function () {\n\t  var obj = Object.create(null);\n\t  return !('__proto__' in obj);\n\t}());\n\n\tfunction identity (s) {\n\t  return s;\n\t}\n\n\t/**\n\t * Because behavior goes wacky when you set `__proto__` on objects, we\n\t * have to prefix all the strings in our set with an arbitrary character.\n\t *\n\t * See https://github.com/mozilla/source-map/pull/31 and\n\t * https://github.com/mozilla/source-map/issues/30\n\t *\n\t * @param String aStr\n\t */\n\tfunction toSetString(aStr) {\n\t  if (isProtoString(aStr)) {\n\t    return '$' + aStr;\n\t  }\n\n\t  return aStr;\n\t}\n\texports.toSetString = supportsNullProto ? identity : toSetString;\n\n\tfunction fromSetString(aStr) {\n\t  if (isProtoString(aStr)) {\n\t    return aStr.slice(1);\n\t  }\n\n\t  return aStr;\n\t}\n\texports.fromSetString = supportsNullProto ? identity : fromSetString;\n\n\tfunction isProtoString(s) {\n\t  if (!s) {\n\t    return false;\n\t  }\n\n\t  var length = s.length;\n\n\t  if (length < 9 /* \"__proto__\".length */) {\n\t    return false;\n\t  }\n\n\t  if (s.charCodeAt(length - 1) !== 95  /* '_' */ ||\n\t      s.charCodeAt(length - 2) !== 95  /* '_' */ ||\n\t      s.charCodeAt(length - 3) !== 111 /* 'o' */ ||\n\t      s.charCodeAt(length - 4) !== 116 /* 't' */ ||\n\t      s.charCodeAt(length - 5) !== 111 /* 'o' */ ||\n\t      s.charCodeAt(length - 6) !== 114 /* 'r' */ ||\n\t      s.charCodeAt(length - 7) !== 112 /* 'p' */ ||\n\t      s.charCodeAt(length - 8) !== 95  /* '_' */ ||\n\t      s.charCodeAt(length - 9) !== 95  /* '_' */) {\n\t    return false;\n\t  }\n\n\t  for (var i = length - 10; i >= 0; i--) {\n\t    if (s.charCodeAt(i) !== 36 /* '$' */) {\n\t      return false;\n\t    }\n\t  }\n\n\t  return true;\n\t}\n\n\t/**\n\t * Comparator between two mappings where the original positions are compared.\n\t *\n\t * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n\t * mappings with the same original source/line/column, but different generated\n\t * line and column the same. Useful when searching for a mapping with a\n\t * stubbed out mapping.\n\t */\n\tfunction compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) {\n\t  var cmp = strcmp(mappingA.source, mappingB.source);\n\t  if (cmp !== 0) {\n\t    return cmp;\n\t  }\n\n\t  cmp = mappingA.originalLine - mappingB.originalLine;\n\t  if (cmp !== 0) {\n\t    return cmp;\n\t  }\n\n\t  cmp = mappingA.originalColumn - mappingB.originalColumn;\n\t  if (cmp !== 0 || onlyCompareOriginal) {\n\t    return cmp;\n\t  }\n\n\t  cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n\t  if (cmp !== 0) {\n\t    return cmp;\n\t  }\n\n\t  cmp = mappingA.generatedLine - mappingB.generatedLine;\n\t  if (cmp !== 0) {\n\t    return cmp;\n\t  }\n\n\t  return strcmp(mappingA.name, mappingB.name);\n\t}\n\texports.compareByOriginalPositions = compareByOriginalPositions;\n\n\tfunction compareByOriginalPositionsNoSource(mappingA, mappingB, onlyCompareOriginal) {\n\t  var cmp;\n\n\t  cmp = mappingA.originalLine - mappingB.originalLine;\n\t  if (cmp !== 0) {\n\t    return cmp;\n\t  }\n\n\t  cmp = mappingA.originalColumn - mappingB.originalColumn;\n\t  if (cmp !== 0 || onlyCompareOriginal) {\n\t    return cmp;\n\t  }\n\n\t  cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n\t  if (cmp !== 0) {\n\t    return cmp;\n\t  }\n\n\t  cmp = mappingA.generatedLine - mappingB.generatedLine;\n\t  if (cmp !== 0) {\n\t    return cmp;\n\t  }\n\n\t  return strcmp(mappingA.name, mappingB.name);\n\t}\n\texports.compareByOriginalPositionsNoSource = compareByOriginalPositionsNoSource;\n\n\t/**\n\t * Comparator between two mappings with deflated source and name indices where\n\t * the generated positions are compared.\n\t *\n\t * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n\t * mappings with the same generated line and column, but different\n\t * source/name/original line and column the same. Useful when searching for a\n\t * mapping with a stubbed out mapping.\n\t */\n\tfunction compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) {\n\t  var cmp = mappingA.generatedLine - mappingB.generatedLine;\n\t  if (cmp !== 0) {\n\t    return cmp;\n\t  }\n\n\t  cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n\t  if (cmp !== 0 || onlyCompareGenerated) {\n\t    return cmp;\n\t  }\n\n\t  cmp = strcmp(mappingA.source, mappingB.source);\n\t  if (cmp !== 0) {\n\t    return cmp;\n\t  }\n\n\t  cmp = mappingA.originalLine - mappingB.originalLine;\n\t  if (cmp !== 0) {\n\t    return cmp;\n\t  }\n\n\t  cmp = mappingA.originalColumn - mappingB.originalColumn;\n\t  if (cmp !== 0) {\n\t    return cmp;\n\t  }\n\n\t  return strcmp(mappingA.name, mappingB.name);\n\t}\n\texports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated;\n\n\tfunction compareByGeneratedPositionsDeflatedNoLine(mappingA, mappingB, onlyCompareGenerated) {\n\t  var cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n\t  if (cmp !== 0 || onlyCompareGenerated) {\n\t    return cmp;\n\t  }\n\n\t  cmp = strcmp(mappingA.source, mappingB.source);\n\t  if (cmp !== 0) {\n\t    return cmp;\n\t  }\n\n\t  cmp = mappingA.originalLine - mappingB.originalLine;\n\t  if (cmp !== 0) {\n\t    return cmp;\n\t  }\n\n\t  cmp = mappingA.originalColumn - mappingB.originalColumn;\n\t  if (cmp !== 0) {\n\t    return cmp;\n\t  }\n\n\t  return strcmp(mappingA.name, mappingB.name);\n\t}\n\texports.compareByGeneratedPositionsDeflatedNoLine = compareByGeneratedPositionsDeflatedNoLine;\n\n\tfunction strcmp(aStr1, aStr2) {\n\t  if (aStr1 === aStr2) {\n\t    return 0;\n\t  }\n\n\t  if (aStr1 === null) {\n\t    return 1; // aStr2 !== null\n\t  }\n\n\t  if (aStr2 === null) {\n\t    return -1; // aStr1 !== null\n\t  }\n\n\t  if (aStr1 > aStr2) {\n\t    return 1;\n\t  }\n\n\t  return -1;\n\t}\n\n\t/**\n\t * Comparator between two mappings with inflated source and name strings where\n\t * the generated positions are compared.\n\t */\n\tfunction compareByGeneratedPositionsInflated(mappingA, mappingB) {\n\t  var cmp = mappingA.generatedLine - mappingB.generatedLine;\n\t  if (cmp !== 0) {\n\t    return cmp;\n\t  }\n\n\t  cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n\t  if (cmp !== 0) {\n\t    return cmp;\n\t  }\n\n\t  cmp = strcmp(mappingA.source, mappingB.source);\n\t  if (cmp !== 0) {\n\t    return cmp;\n\t  }\n\n\t  cmp = mappingA.originalLine - mappingB.originalLine;\n\t  if (cmp !== 0) {\n\t    return cmp;\n\t  }\n\n\t  cmp = mappingA.originalColumn - mappingB.originalColumn;\n\t  if (cmp !== 0) {\n\t    return cmp;\n\t  }\n\n\t  return strcmp(mappingA.name, mappingB.name);\n\t}\n\texports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated;\n\n\t/**\n\t * Strip any JSON XSSI avoidance prefix from the string (as documented\n\t * in the source maps specification), and then parse the string as\n\t * JSON.\n\t */\n\tfunction parseSourceMapInput(str) {\n\t  return JSON.parse(str.replace(/^\\)]}'[^\\n]*\\n/, ''));\n\t}\n\texports.parseSourceMapInput = parseSourceMapInput;\n\n\t/**\n\t * Compute the URL of a source given the the source root, the source's\n\t * URL, and the source map's URL.\n\t */\n\tfunction computeSourceURL(sourceRoot, sourceURL, sourceMapURL) {\n\t  sourceURL = sourceURL || '';\n\n\t  if (sourceRoot) {\n\t    // This follows what Chrome does.\n\t    if (sourceRoot[sourceRoot.length - 1] !== '/' && sourceURL[0] !== '/') {\n\t      sourceRoot += '/';\n\t    }\n\t    // The spec says:\n\t    //   Line 4: An optional source root, useful for relocating source\n\t    //   files on a server or removing repeated values in the\n\t    //   “sources” entry.  This value is prepended to the individual\n\t    //   entries in the “source” field.\n\t    sourceURL = sourceRoot + sourceURL;\n\t  }\n\n\t  // Historically, SourceMapConsumer did not take the sourceMapURL as\n\t  // a parameter.  This mode is still somewhat supported, which is why\n\t  // this code block is conditional.  However, it's preferable to pass\n\t  // the source map URL to SourceMapConsumer, so that this function\n\t  // can implement the source URL resolution algorithm as outlined in\n\t  // the spec.  This block is basically the equivalent of:\n\t  //    new URL(sourceURL, sourceMapURL).toString()\n\t  // ... except it avoids using URL, which wasn't available in the\n\t  // older releases of node still supported by this library.\n\t  //\n\t  // The spec says:\n\t  //   If the sources are not absolute URLs after prepending of the\n\t  //   “sourceRoot”, the sources are resolved relative to the\n\t  //   SourceMap (like resolving script src in a html document).\n\t  if (sourceMapURL) {\n\t    var parsed = urlParse(sourceMapURL);\n\t    if (!parsed) {\n\t      throw new Error(\"sourceMapURL could not be parsed\");\n\t    }\n\t    if (parsed.path) {\n\t      // Strip the last path component, but keep the \"/\".\n\t      var index = parsed.path.lastIndexOf('/');\n\t      if (index >= 0) {\n\t        parsed.path = parsed.path.substring(0, index + 1);\n\t      }\n\t    }\n\t    sourceURL = join(urlGenerate(parsed), sourceURL);\n\t  }\n\n\t  return normalize(sourceURL);\n\t}\n\texports.computeSourceURL = computeSourceURL;\n} (util$6));\n\nvar arraySet = {};\n\n/* -*- Mode: js; js-indent-level: 2; -*- */\n\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util$5 = util$6;\nvar has = Object.prototype.hasOwnProperty;\nvar hasNativeMap = typeof Map !== \"undefined\";\n\n/**\n * A data structure which is a combination of an array and a set. Adding a new\n * member is O(1), testing for membership is O(1), and finding the index of an\n * element is O(1). Removing elements from the set is not supported. Only\n * strings are supported for membership.\n */\nfunction ArraySet$2() {\n  this._array = [];\n  this._set = hasNativeMap ? new Map() : Object.create(null);\n}\n\n/**\n * Static method for creating ArraySet instances from an existing array.\n */\nArraySet$2.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) {\n  var set = new ArraySet$2();\n  for (var i = 0, len = aArray.length; i < len; i++) {\n    set.add(aArray[i], aAllowDuplicates);\n  }\n  return set;\n};\n\n/**\n * Return how many unique items are in this ArraySet. If duplicates have been\n * added, than those do not count towards the size.\n *\n * @returns Number\n */\nArraySet$2.prototype.size = function ArraySet_size() {\n  return hasNativeMap ? this._set.size : Object.getOwnPropertyNames(this._set).length;\n};\n\n/**\n * Add the given string to this set.\n *\n * @param String aStr\n */\nArraySet$2.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) {\n  var sStr = hasNativeMap ? aStr : util$5.toSetString(aStr);\n  var isDuplicate = hasNativeMap ? this.has(aStr) : has.call(this._set, sStr);\n  var idx = this._array.length;\n  if (!isDuplicate || aAllowDuplicates) {\n    this._array.push(aStr);\n  }\n  if (!isDuplicate) {\n    if (hasNativeMap) {\n      this._set.set(aStr, idx);\n    } else {\n      this._set[sStr] = idx;\n    }\n  }\n};\n\n/**\n * Is the given string a member of this set?\n *\n * @param String aStr\n */\nArraySet$2.prototype.has = function ArraySet_has(aStr) {\n  if (hasNativeMap) {\n    return this._set.has(aStr);\n  } else {\n    var sStr = util$5.toSetString(aStr);\n    return has.call(this._set, sStr);\n  }\n};\n\n/**\n * What is the index of the given string in the array?\n *\n * @param String aStr\n */\nArraySet$2.prototype.indexOf = function ArraySet_indexOf(aStr) {\n  if (hasNativeMap) {\n    var idx = this._set.get(aStr);\n    if (idx >= 0) {\n        return idx;\n    }\n  } else {\n    var sStr = util$5.toSetString(aStr);\n    if (has.call(this._set, sStr)) {\n      return this._set[sStr];\n    }\n  }\n\n  throw new Error('\"' + aStr + '\" is not in the set.');\n};\n\n/**\n * What is the element at the given index?\n *\n * @param Number aIdx\n */\nArraySet$2.prototype.at = function ArraySet_at(aIdx) {\n  if (aIdx >= 0 && aIdx < this._array.length) {\n    return this._array[aIdx];\n  }\n  throw new Error('No element indexed by ' + aIdx);\n};\n\n/**\n * Returns the array representation of this set (which has the proper indices\n * indicated by indexOf). Note that this is a copy of the internal array used\n * for storing the members so that no one can mess with internal state.\n */\nArraySet$2.prototype.toArray = function ArraySet_toArray() {\n  return this._array.slice();\n};\n\narraySet.ArraySet = ArraySet$2;\n\nvar mappingList = {};\n\n/* -*- Mode: js; js-indent-level: 2; -*- */\n\n/*\n * Copyright 2014 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util$4 = util$6;\n\n/**\n * Determine whether mappingB is after mappingA with respect to generated\n * position.\n */\nfunction generatedPositionAfter(mappingA, mappingB) {\n  // Optimized for most common case\n  var lineA = mappingA.generatedLine;\n  var lineB = mappingB.generatedLine;\n  var columnA = mappingA.generatedColumn;\n  var columnB = mappingB.generatedColumn;\n  return lineB > lineA || lineB == lineA && columnB >= columnA ||\n         util$4.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0;\n}\n\n/**\n * A data structure to provide a sorted view of accumulated mappings in a\n * performance conscious manner. It trades a neglibable overhead in general\n * case for a large speedup in case of mappings being added in order.\n */\nfunction MappingList$1() {\n  this._array = [];\n  this._sorted = true;\n  // Serves as infimum\n  this._last = {generatedLine: -1, generatedColumn: 0};\n}\n\n/**\n * Iterate through internal items. This method takes the same arguments that\n * `Array.prototype.forEach` takes.\n *\n * NOTE: The order of the mappings is NOT guaranteed.\n */\nMappingList$1.prototype.unsortedForEach =\n  function MappingList_forEach(aCallback, aThisArg) {\n    this._array.forEach(aCallback, aThisArg);\n  };\n\n/**\n * Add the given source mapping.\n *\n * @param Object aMapping\n */\nMappingList$1.prototype.add = function MappingList_add(aMapping) {\n  if (generatedPositionAfter(this._last, aMapping)) {\n    this._last = aMapping;\n    this._array.push(aMapping);\n  } else {\n    this._sorted = false;\n    this._array.push(aMapping);\n  }\n};\n\n/**\n * Returns the flat, sorted array of mappings. The mappings are sorted by\n * generated position.\n *\n * WARNING: This method returns internal data without copying, for\n * performance. The return value must NOT be mutated, and should be treated as\n * an immutable borrow. If you want to take ownership, you must make your own\n * copy.\n */\nMappingList$1.prototype.toArray = function MappingList_toArray() {\n  if (!this._sorted) {\n    this._array.sort(util$4.compareByGeneratedPositionsInflated);\n    this._sorted = true;\n  }\n  return this._array;\n};\n\nmappingList.MappingList = MappingList$1;\n\n/* -*- Mode: js; js-indent-level: 2; -*- */\n\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar base64VLQ$1 = base64Vlq;\nvar util$3 = util$6;\nvar ArraySet$1 = arraySet.ArraySet;\nvar MappingList = mappingList.MappingList;\n\n/**\n * An instance of the SourceMapGenerator represents a source map which is\n * being built incrementally. You may pass an object with the following\n * properties:\n *\n *   - file: The filename of the generated source.\n *   - sourceRoot: A root for all relative URLs in this source map.\n */\nfunction SourceMapGenerator$5(aArgs) {\n  if (!aArgs) {\n    aArgs = {};\n  }\n  this._file = util$3.getArg(aArgs, 'file', null);\n  this._sourceRoot = util$3.getArg(aArgs, 'sourceRoot', null);\n  this._skipValidation = util$3.getArg(aArgs, 'skipValidation', false);\n  this._sources = new ArraySet$1();\n  this._names = new ArraySet$1();\n  this._mappings = new MappingList();\n  this._sourcesContents = null;\n}\n\nSourceMapGenerator$5.prototype._version = 3;\n\n/**\n * Creates a new SourceMapGenerator based on a SourceMapConsumer\n *\n * @param aSourceMapConsumer The SourceMap.\n */\nSourceMapGenerator$5.fromSourceMap =\n  function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) {\n    var sourceRoot = aSourceMapConsumer.sourceRoot;\n    var generator = new SourceMapGenerator$5({\n      file: aSourceMapConsumer.file,\n      sourceRoot: sourceRoot\n    });\n    aSourceMapConsumer.eachMapping(function (mapping) {\n      var newMapping = {\n        generated: {\n          line: mapping.generatedLine,\n          column: mapping.generatedColumn\n        }\n      };\n\n      if (mapping.source != null) {\n        newMapping.source = mapping.source;\n        if (sourceRoot != null) {\n          newMapping.source = util$3.relative(sourceRoot, newMapping.source);\n        }\n\n        newMapping.original = {\n          line: mapping.originalLine,\n          column: mapping.originalColumn\n        };\n\n        if (mapping.name != null) {\n          newMapping.name = mapping.name;\n        }\n      }\n\n      generator.addMapping(newMapping);\n    });\n    aSourceMapConsumer.sources.forEach(function (sourceFile) {\n      var sourceRelative = sourceFile;\n      if (sourceRoot !== null) {\n        sourceRelative = util$3.relative(sourceRoot, sourceFile);\n      }\n\n      if (!generator._sources.has(sourceRelative)) {\n        generator._sources.add(sourceRelative);\n      }\n\n      var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n      if (content != null) {\n        generator.setSourceContent(sourceFile, content);\n      }\n    });\n    return generator;\n  };\n\n/**\n * Add a single mapping from original source line and column to the generated\n * source's line and column for this source map being created. The mapping\n * object should have the following properties:\n *\n *   - generated: An object with the generated line and column positions.\n *   - original: An object with the original line and column positions.\n *   - source: The original source file (relative to the sourceRoot).\n *   - name: An optional original token name for this mapping.\n */\nSourceMapGenerator$5.prototype.addMapping =\n  function SourceMapGenerator_addMapping(aArgs) {\n    var generated = util$3.getArg(aArgs, 'generated');\n    var original = util$3.getArg(aArgs, 'original', null);\n    var source = util$3.getArg(aArgs, 'source', null);\n    var name = util$3.getArg(aArgs, 'name', null);\n\n    if (!this._skipValidation) {\n      this._validateMapping(generated, original, source, name);\n    }\n\n    if (source != null) {\n      source = String(source);\n      if (!this._sources.has(source)) {\n        this._sources.add(source);\n      }\n    }\n\n    if (name != null) {\n      name = String(name);\n      if (!this._names.has(name)) {\n        this._names.add(name);\n      }\n    }\n\n    this._mappings.add({\n      generatedLine: generated.line,\n      generatedColumn: generated.column,\n      originalLine: original != null && original.line,\n      originalColumn: original != null && original.column,\n      source: source,\n      name: name\n    });\n  };\n\n/**\n * Set the source content for a source file.\n */\nSourceMapGenerator$5.prototype.setSourceContent =\n  function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) {\n    var source = aSourceFile;\n    if (this._sourceRoot != null) {\n      source = util$3.relative(this._sourceRoot, source);\n    }\n\n    if (aSourceContent != null) {\n      // Add the source content to the _sourcesContents map.\n      // Create a new _sourcesContents map if the property is null.\n      if (!this._sourcesContents) {\n        this._sourcesContents = Object.create(null);\n      }\n      this._sourcesContents[util$3.toSetString(source)] = aSourceContent;\n    } else if (this._sourcesContents) {\n      // Remove the source file from the _sourcesContents map.\n      // If the _sourcesContents map is empty, set the property to null.\n      delete this._sourcesContents[util$3.toSetString(source)];\n      if (Object.keys(this._sourcesContents).length === 0) {\n        this._sourcesContents = null;\n      }\n    }\n  };\n\n/**\n * Applies the mappings of a sub-source-map for a specific source file to the\n * source map being generated. Each mapping to the supplied source file is\n * rewritten using the supplied source map. Note: The resolution for the\n * resulting mappings is the minimium of this map and the supplied map.\n *\n * @param aSourceMapConsumer The source map to be applied.\n * @param aSourceFile Optional. The filename of the source file.\n *        If omitted, SourceMapConsumer's file property will be used.\n * @param aSourceMapPath Optional. The dirname of the path to the source map\n *        to be applied. If relative, it is relative to the SourceMapConsumer.\n *        This parameter is needed when the two source maps aren't in the same\n *        directory, and the source map to be applied contains relative source\n *        paths. If so, those relative source paths need to be rewritten\n *        relative to the SourceMapGenerator.\n */\nSourceMapGenerator$5.prototype.applySourceMap =\n  function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) {\n    var sourceFile = aSourceFile;\n    // If aSourceFile is omitted, we will use the file property of the SourceMap\n    if (aSourceFile == null) {\n      if (aSourceMapConsumer.file == null) {\n        throw new Error(\n          'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' +\n          'or the source map\\'s \"file\" property. Both were omitted.'\n        );\n      }\n      sourceFile = aSourceMapConsumer.file;\n    }\n    var sourceRoot = this._sourceRoot;\n    // Make \"sourceFile\" relative if an absolute Url is passed.\n    if (sourceRoot != null) {\n      sourceFile = util$3.relative(sourceRoot, sourceFile);\n    }\n    // Applying the SourceMap can add and remove items from the sources and\n    // the names array.\n    var newSources = new ArraySet$1();\n    var newNames = new ArraySet$1();\n\n    // Find mappings for the \"sourceFile\"\n    this._mappings.unsortedForEach(function (mapping) {\n      if (mapping.source === sourceFile && mapping.originalLine != null) {\n        // Check if it can be mapped by the source map, then update the mapping.\n        var original = aSourceMapConsumer.originalPositionFor({\n          line: mapping.originalLine,\n          column: mapping.originalColumn\n        });\n        if (original.source != null) {\n          // Copy mapping\n          mapping.source = original.source;\n          if (aSourceMapPath != null) {\n            mapping.source = util$3.join(aSourceMapPath, mapping.source);\n          }\n          if (sourceRoot != null) {\n            mapping.source = util$3.relative(sourceRoot, mapping.source);\n          }\n          mapping.originalLine = original.line;\n          mapping.originalColumn = original.column;\n          if (original.name != null) {\n            mapping.name = original.name;\n          }\n        }\n      }\n\n      var source = mapping.source;\n      if (source != null && !newSources.has(source)) {\n        newSources.add(source);\n      }\n\n      var name = mapping.name;\n      if (name != null && !newNames.has(name)) {\n        newNames.add(name);\n      }\n\n    }, this);\n    this._sources = newSources;\n    this._names = newNames;\n\n    // Copy sourcesContents of applied map.\n    aSourceMapConsumer.sources.forEach(function (sourceFile) {\n      var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n      if (content != null) {\n        if (aSourceMapPath != null) {\n          sourceFile = util$3.join(aSourceMapPath, sourceFile);\n        }\n        if (sourceRoot != null) {\n          sourceFile = util$3.relative(sourceRoot, sourceFile);\n        }\n        this.setSourceContent(sourceFile, content);\n      }\n    }, this);\n  };\n\n/**\n * A mapping can have one of the three levels of data:\n *\n *   1. Just the generated position.\n *   2. The Generated position, original position, and original source.\n *   3. Generated and original position, original source, as well as a name\n *      token.\n *\n * To maintain consistency, we validate that any new mapping being added falls\n * in to one of these categories.\n */\nSourceMapGenerator$5.prototype._validateMapping =\n  function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource,\n                                              aName) {\n    // When aOriginal is truthy but has empty values for .line and .column,\n    // it is most likely a programmer error. In this case we throw a very\n    // specific error message to try to guide them the right way.\n    // For example: https://github.com/Polymer/polymer-bundler/pull/519\n    if (aOriginal && typeof aOriginal.line !== 'number' && typeof aOriginal.column !== 'number') {\n        throw new Error(\n            'original.line and original.column are not numbers -- you probably meant to omit ' +\n            'the original mapping entirely and only map the generated position. If so, pass ' +\n            'null for the original mapping instead of an object with empty or null values.'\n        );\n    }\n\n    if (aGenerated && 'line' in aGenerated && 'column' in aGenerated\n        && aGenerated.line > 0 && aGenerated.column >= 0\n        && !aOriginal && !aSource && !aName) {\n      // Case 1.\n      return;\n    }\n    else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated\n             && aOriginal && 'line' in aOriginal && 'column' in aOriginal\n             && aGenerated.line > 0 && aGenerated.column >= 0\n             && aOriginal.line > 0 && aOriginal.column >= 0\n             && aSource) {\n      // Cases 2 and 3.\n      return;\n    }\n    else {\n      throw new Error('Invalid mapping: ' + JSON.stringify({\n        generated: aGenerated,\n        source: aSource,\n        original: aOriginal,\n        name: aName\n      }));\n    }\n  };\n\n/**\n * Serialize the accumulated mappings in to the stream of base 64 VLQs\n * specified by the source map format.\n */\nSourceMapGenerator$5.prototype._serializeMappings =\n  function SourceMapGenerator_serializeMappings() {\n    var previousGeneratedColumn = 0;\n    var previousGeneratedLine = 1;\n    var previousOriginalColumn = 0;\n    var previousOriginalLine = 0;\n    var previousName = 0;\n    var previousSource = 0;\n    var result = '';\n    var next;\n    var mapping;\n    var nameIdx;\n    var sourceIdx;\n\n    var mappings = this._mappings.toArray();\n    for (var i = 0, len = mappings.length; i < len; i++) {\n      mapping = mappings[i];\n      next = '';\n\n      if (mapping.generatedLine !== previousGeneratedLine) {\n        previousGeneratedColumn = 0;\n        while (mapping.generatedLine !== previousGeneratedLine) {\n          next += ';';\n          previousGeneratedLine++;\n        }\n      }\n      else {\n        if (i > 0) {\n          if (!util$3.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) {\n            continue;\n          }\n          next += ',';\n        }\n      }\n\n      next += base64VLQ$1.encode(mapping.generatedColumn\n                                 - previousGeneratedColumn);\n      previousGeneratedColumn = mapping.generatedColumn;\n\n      if (mapping.source != null) {\n        sourceIdx = this._sources.indexOf(mapping.source);\n        next += base64VLQ$1.encode(sourceIdx - previousSource);\n        previousSource = sourceIdx;\n\n        // lines are stored 0-based in SourceMap spec version 3\n        next += base64VLQ$1.encode(mapping.originalLine - 1\n                                   - previousOriginalLine);\n        previousOriginalLine = mapping.originalLine - 1;\n\n        next += base64VLQ$1.encode(mapping.originalColumn\n                                   - previousOriginalColumn);\n        previousOriginalColumn = mapping.originalColumn;\n\n        if (mapping.name != null) {\n          nameIdx = this._names.indexOf(mapping.name);\n          next += base64VLQ$1.encode(nameIdx - previousName);\n          previousName = nameIdx;\n        }\n      }\n\n      result += next;\n    }\n\n    return result;\n  };\n\nSourceMapGenerator$5.prototype._generateSourcesContent =\n  function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) {\n    return aSources.map(function (source) {\n      if (!this._sourcesContents) {\n        return null;\n      }\n      if (aSourceRoot != null) {\n        source = util$3.relative(aSourceRoot, source);\n      }\n      var key = util$3.toSetString(source);\n      return Object.prototype.hasOwnProperty.call(this._sourcesContents, key)\n        ? this._sourcesContents[key]\n        : null;\n    }, this);\n  };\n\n/**\n * Externalize the source map.\n */\nSourceMapGenerator$5.prototype.toJSON =\n  function SourceMapGenerator_toJSON() {\n    var map = {\n      version: this._version,\n      sources: this._sources.toArray(),\n      names: this._names.toArray(),\n      mappings: this._serializeMappings()\n    };\n    if (this._file != null) {\n      map.file = this._file;\n    }\n    if (this._sourceRoot != null) {\n      map.sourceRoot = this._sourceRoot;\n    }\n    if (this._sourcesContents) {\n      map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot);\n    }\n\n    return map;\n  };\n\n/**\n * Render the source map being generated to a string.\n */\nSourceMapGenerator$5.prototype.toString =\n  function SourceMapGenerator_toString() {\n    return JSON.stringify(this.toJSON());\n  };\n\nsourceMapGenerator.SourceMapGenerator = SourceMapGenerator$5;\n\nvar sourceMapConsumer = {};\n\nvar binarySearch$1 = {};\n\n/* -*- Mode: js; js-indent-level: 2; -*- */\n\n(function (exports) {\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\n\texports.GREATEST_LOWER_BOUND = 1;\n\texports.LEAST_UPPER_BOUND = 2;\n\n\t/**\n\t * Recursive implementation of binary search.\n\t *\n\t * @param aLow Indices here and lower do not contain the needle.\n\t * @param aHigh Indices here and higher do not contain the needle.\n\t * @param aNeedle The element being searched for.\n\t * @param aHaystack The non-empty array being searched.\n\t * @param aCompare Function which takes two elements and returns -1, 0, or 1.\n\t * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n\t *     'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n\t *     closest element that is smaller than or greater than the one we are\n\t *     searching for, respectively, if the exact element cannot be found.\n\t */\n\tfunction recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) {\n\t  // This function terminates when one of the following is true:\n\t  //\n\t  //   1. We find the exact element we are looking for.\n\t  //\n\t  //   2. We did not find the exact element, but we can return the index of\n\t  //      the next-closest element.\n\t  //\n\t  //   3. We did not find the exact element, and there is no next-closest\n\t  //      element than the one we are searching for, so we return -1.\n\t  var mid = Math.floor((aHigh - aLow) / 2) + aLow;\n\t  var cmp = aCompare(aNeedle, aHaystack[mid], true);\n\t  if (cmp === 0) {\n\t    // Found the element we are looking for.\n\t    return mid;\n\t  }\n\t  else if (cmp > 0) {\n\t    // Our needle is greater than aHaystack[mid].\n\t    if (aHigh - mid > 1) {\n\t      // The element is in the upper half.\n\t      return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias);\n\t    }\n\n\t    // The exact needle element was not found in this haystack. Determine if\n\t    // we are in termination case (3) or (2) and return the appropriate thing.\n\t    if (aBias == exports.LEAST_UPPER_BOUND) {\n\t      return aHigh < aHaystack.length ? aHigh : -1;\n\t    } else {\n\t      return mid;\n\t    }\n\t  }\n\t  else {\n\t    // Our needle is less than aHaystack[mid].\n\t    if (mid - aLow > 1) {\n\t      // The element is in the lower half.\n\t      return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias);\n\t    }\n\n\t    // we are in termination case (3) or (2) and return the appropriate thing.\n\t    if (aBias == exports.LEAST_UPPER_BOUND) {\n\t      return mid;\n\t    } else {\n\t      return aLow < 0 ? -1 : aLow;\n\t    }\n\t  }\n\t}\n\n\t/**\n\t * This is an implementation of binary search which will always try and return\n\t * the index of the closest element if there is no exact hit. This is because\n\t * mappings between original and generated line/col pairs are single points,\n\t * and there is an implicit region between each of them, so a miss just means\n\t * that you aren't on the very start of a region.\n\t *\n\t * @param aNeedle The element you are looking for.\n\t * @param aHaystack The array that is being searched.\n\t * @param aCompare A function which takes the needle and an element in the\n\t *     array and returns -1, 0, or 1 depending on whether the needle is less\n\t *     than, equal to, or greater than the element, respectively.\n\t * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n\t *     'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n\t *     closest element that is smaller than or greater than the one we are\n\t *     searching for, respectively, if the exact element cannot be found.\n\t *     Defaults to 'binarySearch.GREATEST_LOWER_BOUND'.\n\t */\n\texports.search = function search(aNeedle, aHaystack, aCompare, aBias) {\n\t  if (aHaystack.length === 0) {\n\t    return -1;\n\t  }\n\n\t  var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack,\n\t                              aCompare, aBias || exports.GREATEST_LOWER_BOUND);\n\t  if (index < 0) {\n\t    return -1;\n\t  }\n\n\t  // We have found either the exact element, or the next-closest element than\n\t  // the one we are searching for. However, there may be more than one such\n\t  // element. Make sure we always return the smallest of these.\n\t  while (index - 1 >= 0) {\n\t    if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) {\n\t      break;\n\t    }\n\t    --index;\n\t  }\n\n\t  return index;\n\t};\n} (binarySearch$1));\n\nvar quickSort$1 = {};\n\n/* -*- Mode: js; js-indent-level: 2; -*- */\n\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\n// It turns out that some (most?) JavaScript engines don't self-host\n// `Array.prototype.sort`. This makes sense because C++ will likely remain\n// faster than JS when doing raw CPU-intensive sorting. However, when using a\n// custom comparator function, calling back and forth between the VM's C++ and\n// JIT'd JS is rather slow *and* loses JIT type information, resulting in\n// worse generated code for the comparator function than would be optimal. In\n// fact, when sorting with a comparator, these costs outweigh the benefits of\n// sorting in C++. By using our own JS-implemented Quick Sort (below), we get\n// a ~3500ms mean speed-up in `bench/bench.html`.\n\nfunction SortTemplate(comparator) {\n\n/**\n * Swap the elements indexed by `x` and `y` in the array `ary`.\n *\n * @param {Array} ary\n *        The array.\n * @param {Number} x\n *        The index of the first item.\n * @param {Number} y\n *        The index of the second item.\n */\nfunction swap(ary, x, y) {\n  var temp = ary[x];\n  ary[x] = ary[y];\n  ary[y] = temp;\n}\n\n/**\n * Returns a random integer within the range `low .. high` inclusive.\n *\n * @param {Number} low\n *        The lower bound on the range.\n * @param {Number} high\n *        The upper bound on the range.\n */\nfunction randomIntInRange(low, high) {\n  return Math.round(low + (Math.random() * (high - low)));\n}\n\n/**\n * The Quick Sort algorithm.\n *\n * @param {Array} ary\n *        An array to sort.\n * @param {function} comparator\n *        Function to use to compare two items.\n * @param {Number} p\n *        Start index of the array\n * @param {Number} r\n *        End index of the array\n */\nfunction doQuickSort(ary, comparator, p, r) {\n  // If our lower bound is less than our upper bound, we (1) partition the\n  // array into two pieces and (2) recurse on each half. If it is not, this is\n  // the empty array and our base case.\n\n  if (p < r) {\n    // (1) Partitioning.\n    //\n    // The partitioning chooses a pivot between `p` and `r` and moves all\n    // elements that are less than or equal to the pivot to the before it, and\n    // all the elements that are greater than it after it. The effect is that\n    // once partition is done, the pivot is in the exact place it will be when\n    // the array is put in sorted order, and it will not need to be moved\n    // again. This runs in O(n) time.\n\n    // Always choose a random pivot so that an input array which is reverse\n    // sorted does not cause O(n^2) running time.\n    var pivotIndex = randomIntInRange(p, r);\n    var i = p - 1;\n\n    swap(ary, pivotIndex, r);\n    var pivot = ary[r];\n\n    // Immediately after `j` is incremented in this loop, the following hold\n    // true:\n    //\n    //   * Every element in `ary[p .. i]` is less than or equal to the pivot.\n    //\n    //   * Every element in `ary[i+1 .. j-1]` is greater than the pivot.\n    for (var j = p; j < r; j++) {\n      if (comparator(ary[j], pivot, false) <= 0) {\n        i += 1;\n        swap(ary, i, j);\n      }\n    }\n\n    swap(ary, i + 1, j);\n    var q = i + 1;\n\n    // (2) Recurse on each half.\n\n    doQuickSort(ary, comparator, p, q - 1);\n    doQuickSort(ary, comparator, q + 1, r);\n  }\n}\n\n  return doQuickSort;\n}\n\nfunction cloneSort(comparator) {\n  let template = SortTemplate.toString();\n  let templateFn = new Function(`return ${template}`)();\n  return templateFn(comparator);\n}\n\n/**\n * Sort the given array in-place with the given comparator function.\n *\n * @param {Array} ary\n *        An array to sort.\n * @param {function} comparator\n *        Function to use to compare two items.\n */\n\nlet sortCache = new WeakMap();\nquickSort$1.quickSort = function (ary, comparator, start = 0) {\n  let doQuickSort = sortCache.get(comparator);\n  if (doQuickSort === void 0) {\n    doQuickSort = cloneSort(comparator);\n    sortCache.set(comparator, doQuickSort);\n  }\n  doQuickSort(ary, comparator, start, ary.length - 1);\n};\n\n/* -*- Mode: js; js-indent-level: 2; -*- */\n\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util$2 = util$6;\nvar binarySearch = binarySearch$1;\nvar ArraySet = arraySet.ArraySet;\nvar base64VLQ = base64Vlq;\nvar quickSort = quickSort$1.quickSort;\n\nfunction SourceMapConsumer$4(aSourceMap, aSourceMapURL) {\n  var sourceMap = aSourceMap;\n  if (typeof aSourceMap === 'string') {\n    sourceMap = util$2.parseSourceMapInput(aSourceMap);\n  }\n\n  return sourceMap.sections != null\n    ? new IndexedSourceMapConsumer(sourceMap, aSourceMapURL)\n    : new BasicSourceMapConsumer(sourceMap, aSourceMapURL);\n}\n\nSourceMapConsumer$4.fromSourceMap = function(aSourceMap, aSourceMapURL) {\n  return BasicSourceMapConsumer.fromSourceMap(aSourceMap, aSourceMapURL);\n};\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nSourceMapConsumer$4.prototype._version = 3;\n\n// `__generatedMappings` and `__originalMappings` are arrays that hold the\n// parsed mapping coordinates from the source map's \"mappings\" attribute. They\n// are lazily instantiated, accessed via the `_generatedMappings` and\n// `_originalMappings` getters respectively, and we only parse the mappings\n// and create these arrays once queried for a source location. We jump through\n// these hoops because there can be many thousands of mappings, and parsing\n// them is expensive, so we only want to do it if we must.\n//\n// Each object in the arrays is of the form:\n//\n//     {\n//       generatedLine: The line number in the generated code,\n//       generatedColumn: The column number in the generated code,\n//       source: The path to the original source file that generated this\n//               chunk of code,\n//       originalLine: The line number in the original source that\n//                     corresponds to this chunk of generated code,\n//       originalColumn: The column number in the original source that\n//                       corresponds to this chunk of generated code,\n//       name: The name of the original symbol which generated this chunk of\n//             code.\n//     }\n//\n// All properties except for `generatedLine` and `generatedColumn` can be\n// `null`.\n//\n// `_generatedMappings` is ordered by the generated positions.\n//\n// `_originalMappings` is ordered by the original positions.\n\nSourceMapConsumer$4.prototype.__generatedMappings = null;\nObject.defineProperty(SourceMapConsumer$4.prototype, '_generatedMappings', {\n  configurable: true,\n  enumerable: true,\n  get: function () {\n    if (!this.__generatedMappings) {\n      this._parseMappings(this._mappings, this.sourceRoot);\n    }\n\n    return this.__generatedMappings;\n  }\n});\n\nSourceMapConsumer$4.prototype.__originalMappings = null;\nObject.defineProperty(SourceMapConsumer$4.prototype, '_originalMappings', {\n  configurable: true,\n  enumerable: true,\n  get: function () {\n    if (!this.__originalMappings) {\n      this._parseMappings(this._mappings, this.sourceRoot);\n    }\n\n    return this.__originalMappings;\n  }\n});\n\nSourceMapConsumer$4.prototype._charIsMappingSeparator =\n  function SourceMapConsumer_charIsMappingSeparator(aStr, index) {\n    var c = aStr.charAt(index);\n    return c === \";\" || c === \",\";\n  };\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nSourceMapConsumer$4.prototype._parseMappings =\n  function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n    throw new Error(\"Subclasses must implement _parseMappings\");\n  };\n\nSourceMapConsumer$4.GENERATED_ORDER = 1;\nSourceMapConsumer$4.ORIGINAL_ORDER = 2;\n\nSourceMapConsumer$4.GREATEST_LOWER_BOUND = 1;\nSourceMapConsumer$4.LEAST_UPPER_BOUND = 2;\n\n/**\n * Iterate over each mapping between an original source/line/column and a\n * generated line/column in this source map.\n *\n * @param Function aCallback\n *        The function that is called with each mapping.\n * @param Object aContext\n *        Optional. If specified, this object will be the value of `this` every\n *        time that `aCallback` is called.\n * @param aOrder\n *        Either `SourceMapConsumer.GENERATED_ORDER` or\n *        `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to\n *        iterate over the mappings sorted by the generated file's line/column\n *        order or the original's source/line/column order, respectively. Defaults to\n *        `SourceMapConsumer.GENERATED_ORDER`.\n */\nSourceMapConsumer$4.prototype.eachMapping =\n  function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) {\n    var context = aContext || null;\n    var order = aOrder || SourceMapConsumer$4.GENERATED_ORDER;\n\n    var mappings;\n    switch (order) {\n    case SourceMapConsumer$4.GENERATED_ORDER:\n      mappings = this._generatedMappings;\n      break;\n    case SourceMapConsumer$4.ORIGINAL_ORDER:\n      mappings = this._originalMappings;\n      break;\n    default:\n      throw new Error(\"Unknown order of iteration.\");\n    }\n\n    var sourceRoot = this.sourceRoot;\n    var boundCallback = aCallback.bind(context);\n    var names = this._names;\n    var sources = this._sources;\n    var sourceMapURL = this._sourceMapURL;\n\n    for (var i = 0, n = mappings.length; i < n; i++) {\n      var mapping = mappings[i];\n      var source = mapping.source === null ? null : sources.at(mapping.source);\n      source = util$2.computeSourceURL(sourceRoot, source, sourceMapURL);\n      boundCallback({\n        source: source,\n        generatedLine: mapping.generatedLine,\n        generatedColumn: mapping.generatedColumn,\n        originalLine: mapping.originalLine,\n        originalColumn: mapping.originalColumn,\n        name: mapping.name === null ? null : names.at(mapping.name)\n      });\n    }\n  };\n\n/**\n * Returns all generated line and column information for the original source,\n * line, and column provided. If no column is provided, returns all mappings\n * corresponding to a either the line we are searching for or the next\n * closest line that has any mappings. Otherwise, returns all mappings\n * corresponding to the given line and either the column we are searching for\n * or the next closest column that has any offsets.\n *\n * The only argument is an object with the following properties:\n *\n *   - source: The filename of the original source.\n *   - line: The line number in the original source.  The line number is 1-based.\n *   - column: Optional. the column number in the original source.\n *    The column number is 0-based.\n *\n * and an array of objects is returned, each with the following properties:\n *\n *   - line: The line number in the generated source, or null.  The\n *    line number is 1-based.\n *   - column: The column number in the generated source, or null.\n *    The column number is 0-based.\n */\nSourceMapConsumer$4.prototype.allGeneratedPositionsFor =\n  function SourceMapConsumer_allGeneratedPositionsFor(aArgs) {\n    var line = util$2.getArg(aArgs, 'line');\n\n    // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping\n    // returns the index of the closest mapping less than the needle. By\n    // setting needle.originalColumn to 0, we thus find the last mapping for\n    // the given line, provided such a mapping exists.\n    var needle = {\n      source: util$2.getArg(aArgs, 'source'),\n      originalLine: line,\n      originalColumn: util$2.getArg(aArgs, 'column', 0)\n    };\n\n    needle.source = this._findSourceIndex(needle.source);\n    if (needle.source < 0) {\n      return [];\n    }\n\n    var mappings = [];\n\n    var index = this._findMapping(needle,\n                                  this._originalMappings,\n                                  \"originalLine\",\n                                  \"originalColumn\",\n                                  util$2.compareByOriginalPositions,\n                                  binarySearch.LEAST_UPPER_BOUND);\n    if (index >= 0) {\n      var mapping = this._originalMappings[index];\n\n      if (aArgs.column === undefined) {\n        var originalLine = mapping.originalLine;\n\n        // Iterate until either we run out of mappings, or we run into\n        // a mapping for a different line than the one we found. Since\n        // mappings are sorted, this is guaranteed to find all mappings for\n        // the line we found.\n        while (mapping && mapping.originalLine === originalLine) {\n          mappings.push({\n            line: util$2.getArg(mapping, 'generatedLine', null),\n            column: util$2.getArg(mapping, 'generatedColumn', null),\n            lastColumn: util$2.getArg(mapping, 'lastGeneratedColumn', null)\n          });\n\n          mapping = this._originalMappings[++index];\n        }\n      } else {\n        var originalColumn = mapping.originalColumn;\n\n        // Iterate until either we run out of mappings, or we run into\n        // a mapping for a different line than the one we were searching for.\n        // Since mappings are sorted, this is guaranteed to find all mappings for\n        // the line we are searching for.\n        while (mapping &&\n               mapping.originalLine === line &&\n               mapping.originalColumn == originalColumn) {\n          mappings.push({\n            line: util$2.getArg(mapping, 'generatedLine', null),\n            column: util$2.getArg(mapping, 'generatedColumn', null),\n            lastColumn: util$2.getArg(mapping, 'lastGeneratedColumn', null)\n          });\n\n          mapping = this._originalMappings[++index];\n        }\n      }\n    }\n\n    return mappings;\n  };\n\nsourceMapConsumer.SourceMapConsumer = SourceMapConsumer$4;\n\n/**\n * A BasicSourceMapConsumer instance represents a parsed source map which we can\n * query for information about the original file positions by giving it a file\n * position in the generated source.\n *\n * The first parameter is the raw source map (either as a JSON string, or\n * already parsed to an object). According to the spec, source maps have the\n * following attributes:\n *\n *   - version: Which version of the source map spec this map is following.\n *   - sources: An array of URLs to the original source files.\n *   - names: An array of identifiers which can be referrenced by individual mappings.\n *   - sourceRoot: Optional. The URL root from which all sources are relative.\n *   - sourcesContent: Optional. An array of contents of the original source files.\n *   - mappings: A string of base64 VLQs which contain the actual mappings.\n *   - file: Optional. The generated file this source map is associated with.\n *\n * Here is an example source map, taken from the source map spec[0]:\n *\n *     {\n *       version : 3,\n *       file: \"out.js\",\n *       sourceRoot : \"\",\n *       sources: [\"foo.js\", \"bar.js\"],\n *       names: [\"src\", \"maps\", \"are\", \"fun\"],\n *       mappings: \"AA,AB;;ABCDE;\"\n *     }\n *\n * The second parameter, if given, is a string whose value is the URL\n * at which the source map was found.  This URL is used to compute the\n * sources array.\n *\n * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1#\n */\nfunction BasicSourceMapConsumer(aSourceMap, aSourceMapURL) {\n  var sourceMap = aSourceMap;\n  if (typeof aSourceMap === 'string') {\n    sourceMap = util$2.parseSourceMapInput(aSourceMap);\n  }\n\n  var version = util$2.getArg(sourceMap, 'version');\n  var sources = util$2.getArg(sourceMap, 'sources');\n  // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which\n  // requires the array) to play nice here.\n  var names = util$2.getArg(sourceMap, 'names', []);\n  var sourceRoot = util$2.getArg(sourceMap, 'sourceRoot', null);\n  var sourcesContent = util$2.getArg(sourceMap, 'sourcesContent', null);\n  var mappings = util$2.getArg(sourceMap, 'mappings');\n  var file = util$2.getArg(sourceMap, 'file', null);\n\n  // Once again, Sass deviates from the spec and supplies the version as a\n  // string rather than a number, so we use loose equality checking here.\n  if (version != this._version) {\n    throw new Error('Unsupported version: ' + version);\n  }\n\n  if (sourceRoot) {\n    sourceRoot = util$2.normalize(sourceRoot);\n  }\n\n  sources = sources\n    .map(String)\n    // Some source maps produce relative source paths like \"./foo.js\" instead of\n    // \"foo.js\".  Normalize these first so that future comparisons will succeed.\n    // See bugzil.la/1090768.\n    .map(util$2.normalize)\n    // Always ensure that absolute sources are internally stored relative to\n    // the source root, if the source root is absolute. Not doing this would\n    // be particularly problematic when the source root is a prefix of the\n    // source (valid, but why??). See github issue #199 and bugzil.la/1188982.\n    .map(function (source) {\n      return sourceRoot && util$2.isAbsolute(sourceRoot) && util$2.isAbsolute(source)\n        ? util$2.relative(sourceRoot, source)\n        : source;\n    });\n\n  // Pass `true` below to allow duplicate names and sources. While source maps\n  // are intended to be compressed and deduplicated, the TypeScript compiler\n  // sometimes generates source maps with duplicates in them. See Github issue\n  // #72 and bugzil.la/889492.\n  this._names = ArraySet.fromArray(names.map(String), true);\n  this._sources = ArraySet.fromArray(sources, true);\n\n  this._absoluteSources = this._sources.toArray().map(function (s) {\n    return util$2.computeSourceURL(sourceRoot, s, aSourceMapURL);\n  });\n\n  this.sourceRoot = sourceRoot;\n  this.sourcesContent = sourcesContent;\n  this._mappings = mappings;\n  this._sourceMapURL = aSourceMapURL;\n  this.file = file;\n}\n\nBasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer$4.prototype);\nBasicSourceMapConsumer.prototype.consumer = SourceMapConsumer$4;\n\n/**\n * Utility function to find the index of a source.  Returns -1 if not\n * found.\n */\nBasicSourceMapConsumer.prototype._findSourceIndex = function(aSource) {\n  var relativeSource = aSource;\n  if (this.sourceRoot != null) {\n    relativeSource = util$2.relative(this.sourceRoot, relativeSource);\n  }\n\n  if (this._sources.has(relativeSource)) {\n    return this._sources.indexOf(relativeSource);\n  }\n\n  // Maybe aSource is an absolute URL as returned by |sources|.  In\n  // this case we can't simply undo the transform.\n  var i;\n  for (i = 0; i < this._absoluteSources.length; ++i) {\n    if (this._absoluteSources[i] == aSource) {\n      return i;\n    }\n  }\n\n  return -1;\n};\n\n/**\n * Create a BasicSourceMapConsumer from a SourceMapGenerator.\n *\n * @param SourceMapGenerator aSourceMap\n *        The source map that will be consumed.\n * @param String aSourceMapURL\n *        The URL at which the source map can be found (optional)\n * @returns BasicSourceMapConsumer\n */\nBasicSourceMapConsumer.fromSourceMap =\n  function SourceMapConsumer_fromSourceMap(aSourceMap, aSourceMapURL) {\n    var smc = Object.create(BasicSourceMapConsumer.prototype);\n\n    var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true);\n    var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true);\n    smc.sourceRoot = aSourceMap._sourceRoot;\n    smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(),\n                                                            smc.sourceRoot);\n    smc.file = aSourceMap._file;\n    smc._sourceMapURL = aSourceMapURL;\n    smc._absoluteSources = smc._sources.toArray().map(function (s) {\n      return util$2.computeSourceURL(smc.sourceRoot, s, aSourceMapURL);\n    });\n\n    // Because we are modifying the entries (by converting string sources and\n    // names to indices into the sources and names ArraySets), we have to make\n    // a copy of the entry or else bad things happen. Shared mutable state\n    // strikes again! See github issue #191.\n\n    var generatedMappings = aSourceMap._mappings.toArray().slice();\n    var destGeneratedMappings = smc.__generatedMappings = [];\n    var destOriginalMappings = smc.__originalMappings = [];\n\n    for (var i = 0, length = generatedMappings.length; i < length; i++) {\n      var srcMapping = generatedMappings[i];\n      var destMapping = new Mapping;\n      destMapping.generatedLine = srcMapping.generatedLine;\n      destMapping.generatedColumn = srcMapping.generatedColumn;\n\n      if (srcMapping.source) {\n        destMapping.source = sources.indexOf(srcMapping.source);\n        destMapping.originalLine = srcMapping.originalLine;\n        destMapping.originalColumn = srcMapping.originalColumn;\n\n        if (srcMapping.name) {\n          destMapping.name = names.indexOf(srcMapping.name);\n        }\n\n        destOriginalMappings.push(destMapping);\n      }\n\n      destGeneratedMappings.push(destMapping);\n    }\n\n    quickSort(smc.__originalMappings, util$2.compareByOriginalPositions);\n\n    return smc;\n  };\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nBasicSourceMapConsumer.prototype._version = 3;\n\n/**\n * The list of original sources.\n */\nObject.defineProperty(BasicSourceMapConsumer.prototype, 'sources', {\n  get: function () {\n    return this._absoluteSources.slice();\n  }\n});\n\n/**\n * Provide the JIT with a nice shape / hidden class.\n */\nfunction Mapping() {\n  this.generatedLine = 0;\n  this.generatedColumn = 0;\n  this.source = null;\n  this.originalLine = null;\n  this.originalColumn = null;\n  this.name = null;\n}\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\n\nconst compareGenerated = util$2.compareByGeneratedPositionsDeflatedNoLine;\nfunction sortGenerated(array, start) {\n  let l = array.length;\n  let n = array.length - start;\n  if (n <= 1) {\n    return;\n  } else if (n == 2) {\n    let a = array[start];\n    let b = array[start + 1];\n    if (compareGenerated(a, b) > 0) {\n      array[start] = b;\n      array[start + 1] = a;\n    }\n  } else if (n < 20) {\n    for (let i = start; i < l; i++) {\n      for (let j = i; j > start; j--) {\n        let a = array[j - 1];\n        let b = array[j];\n        if (compareGenerated(a, b) <= 0) {\n          break;\n        }\n        array[j - 1] = b;\n        array[j] = a;\n      }\n    }\n  } else {\n    quickSort(array, compareGenerated, start);\n  }\n}\nBasicSourceMapConsumer.prototype._parseMappings =\n  function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n    var generatedLine = 1;\n    var previousGeneratedColumn = 0;\n    var previousOriginalLine = 0;\n    var previousOriginalColumn = 0;\n    var previousSource = 0;\n    var previousName = 0;\n    var length = aStr.length;\n    var index = 0;\n    var temp = {};\n    var originalMappings = [];\n    var generatedMappings = [];\n    var mapping, segment, end, value;\n\n    let subarrayStart = 0;\n    while (index < length) {\n      if (aStr.charAt(index) === ';') {\n        generatedLine++;\n        index++;\n        previousGeneratedColumn = 0;\n\n        sortGenerated(generatedMappings, subarrayStart);\n        subarrayStart = generatedMappings.length;\n      }\n      else if (aStr.charAt(index) === ',') {\n        index++;\n      }\n      else {\n        mapping = new Mapping();\n        mapping.generatedLine = generatedLine;\n\n        for (end = index; end < length; end++) {\n          if (this._charIsMappingSeparator(aStr, end)) {\n            break;\n          }\n        }\n        aStr.slice(index, end);\n\n        segment = [];\n        while (index < end) {\n          base64VLQ.decode(aStr, index, temp);\n          value = temp.value;\n          index = temp.rest;\n          segment.push(value);\n        }\n\n        if (segment.length === 2) {\n          throw new Error('Found a source, but no line and column');\n        }\n\n        if (segment.length === 3) {\n          throw new Error('Found a source and line, but no column');\n        }\n\n        // Generated column.\n        mapping.generatedColumn = previousGeneratedColumn + segment[0];\n        previousGeneratedColumn = mapping.generatedColumn;\n\n        if (segment.length > 1) {\n          // Original source.\n          mapping.source = previousSource + segment[1];\n          previousSource += segment[1];\n\n          // Original line.\n          mapping.originalLine = previousOriginalLine + segment[2];\n          previousOriginalLine = mapping.originalLine;\n          // Lines are stored 0-based\n          mapping.originalLine += 1;\n\n          // Original column.\n          mapping.originalColumn = previousOriginalColumn + segment[3];\n          previousOriginalColumn = mapping.originalColumn;\n\n          if (segment.length > 4) {\n            // Original name.\n            mapping.name = previousName + segment[4];\n            previousName += segment[4];\n          }\n        }\n\n        generatedMappings.push(mapping);\n        if (typeof mapping.originalLine === 'number') {\n          let currentSource = mapping.source;\n          while (originalMappings.length <= currentSource) {\n            originalMappings.push(null);\n          }\n          if (originalMappings[currentSource] === null) {\n            originalMappings[currentSource] = [];\n          }\n          originalMappings[currentSource].push(mapping);\n        }\n      }\n    }\n\n    sortGenerated(generatedMappings, subarrayStart);\n    this.__generatedMappings = generatedMappings;\n\n    for (var i = 0; i < originalMappings.length; i++) {\n      if (originalMappings[i] != null) {\n        quickSort(originalMappings[i], util$2.compareByOriginalPositionsNoSource);\n      }\n    }\n    this.__originalMappings = [].concat(...originalMappings);\n  };\n\n/**\n * Find the mapping that best matches the hypothetical \"needle\" mapping that\n * we are searching for in the given \"haystack\" of mappings.\n */\nBasicSourceMapConsumer.prototype._findMapping =\n  function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName,\n                                         aColumnName, aComparator, aBias) {\n    // To return the position we are searching for, we must first find the\n    // mapping for the given position and then return the opposite position it\n    // points to. Because the mappings are sorted, we can use binary search to\n    // find the best mapping.\n\n    if (aNeedle[aLineName] <= 0) {\n      throw new TypeError('Line must be greater than or equal to 1, got '\n                          + aNeedle[aLineName]);\n    }\n    if (aNeedle[aColumnName] < 0) {\n      throw new TypeError('Column must be greater than or equal to 0, got '\n                          + aNeedle[aColumnName]);\n    }\n\n    return binarySearch.search(aNeedle, aMappings, aComparator, aBias);\n  };\n\n/**\n * Compute the last column for each generated mapping. The last column is\n * inclusive.\n */\nBasicSourceMapConsumer.prototype.computeColumnSpans =\n  function SourceMapConsumer_computeColumnSpans() {\n    for (var index = 0; index < this._generatedMappings.length; ++index) {\n      var mapping = this._generatedMappings[index];\n\n      // Mappings do not contain a field for the last generated columnt. We\n      // can come up with an optimistic estimate, however, by assuming that\n      // mappings are contiguous (i.e. given two consecutive mappings, the\n      // first mapping ends where the second one starts).\n      if (index + 1 < this._generatedMappings.length) {\n        var nextMapping = this._generatedMappings[index + 1];\n\n        if (mapping.generatedLine === nextMapping.generatedLine) {\n          mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1;\n          continue;\n        }\n      }\n\n      // The last mapping for each line spans the entire line.\n      mapping.lastGeneratedColumn = Infinity;\n    }\n  };\n\n/**\n * Returns the original source, line, and column information for the generated\n * source's line and column positions provided. The only argument is an object\n * with the following properties:\n *\n *   - line: The line number in the generated source.  The line number\n *     is 1-based.\n *   - column: The column number in the generated source.  The column\n *     number is 0-based.\n *   - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n *     'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n *     closest element that is smaller than or greater than the one we are\n *     searching for, respectively, if the exact element cannot be found.\n *     Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n *\n * and an object is returned with the following properties:\n *\n *   - source: The original source file, or null.\n *   - line: The line number in the original source, or null.  The\n *     line number is 1-based.\n *   - column: The column number in the original source, or null.  The\n *     column number is 0-based.\n *   - name: The original identifier, or null.\n */\nBasicSourceMapConsumer.prototype.originalPositionFor =\n  function SourceMapConsumer_originalPositionFor(aArgs) {\n    var needle = {\n      generatedLine: util$2.getArg(aArgs, 'line'),\n      generatedColumn: util$2.getArg(aArgs, 'column')\n    };\n\n    var index = this._findMapping(\n      needle,\n      this._generatedMappings,\n      \"generatedLine\",\n      \"generatedColumn\",\n      util$2.compareByGeneratedPositionsDeflated,\n      util$2.getArg(aArgs, 'bias', SourceMapConsumer$4.GREATEST_LOWER_BOUND)\n    );\n\n    if (index >= 0) {\n      var mapping = this._generatedMappings[index];\n\n      if (mapping.generatedLine === needle.generatedLine) {\n        var source = util$2.getArg(mapping, 'source', null);\n        if (source !== null) {\n          source = this._sources.at(source);\n          source = util$2.computeSourceURL(this.sourceRoot, source, this._sourceMapURL);\n        }\n        var name = util$2.getArg(mapping, 'name', null);\n        if (name !== null) {\n          name = this._names.at(name);\n        }\n        return {\n          source: source,\n          line: util$2.getArg(mapping, 'originalLine', null),\n          column: util$2.getArg(mapping, 'originalColumn', null),\n          name: name\n        };\n      }\n    }\n\n    return {\n      source: null,\n      line: null,\n      column: null,\n      name: null\n    };\n  };\n\n/**\n * Return true if we have the source content for every source in the source\n * map, false otherwise.\n */\nBasicSourceMapConsumer.prototype.hasContentsOfAllSources =\n  function BasicSourceMapConsumer_hasContentsOfAllSources() {\n    if (!this.sourcesContent) {\n      return false;\n    }\n    return this.sourcesContent.length >= this._sources.size() &&\n      !this.sourcesContent.some(function (sc) { return sc == null; });\n  };\n\n/**\n * Returns the original source content. The only argument is the url of the\n * original source file. Returns null if no original source content is\n * available.\n */\nBasicSourceMapConsumer.prototype.sourceContentFor =\n  function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n    if (!this.sourcesContent) {\n      return null;\n    }\n\n    var index = this._findSourceIndex(aSource);\n    if (index >= 0) {\n      return this.sourcesContent[index];\n    }\n\n    var relativeSource = aSource;\n    if (this.sourceRoot != null) {\n      relativeSource = util$2.relative(this.sourceRoot, relativeSource);\n    }\n\n    var url;\n    if (this.sourceRoot != null\n        && (url = util$2.urlParse(this.sourceRoot))) {\n      // XXX: file:// URIs and absolute paths lead to unexpected behavior for\n      // many users. We can help them out when they expect file:// URIs to\n      // behave like it would if they were running a local HTTP server. See\n      // https://bugzilla.mozilla.org/show_bug.cgi?id=885597.\n      var fileUriAbsPath = relativeSource.replace(/^file:\\/\\//, \"\");\n      if (url.scheme == \"file\"\n          && this._sources.has(fileUriAbsPath)) {\n        return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)]\n      }\n\n      if ((!url.path || url.path == \"/\")\n          && this._sources.has(\"/\" + relativeSource)) {\n        return this.sourcesContent[this._sources.indexOf(\"/\" + relativeSource)];\n      }\n    }\n\n    // This function is used recursively from\n    // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we\n    // don't want to throw if we can't find the source - we just want to\n    // return null, so we provide a flag to exit gracefully.\n    if (nullOnMissing) {\n      return null;\n    }\n    else {\n      throw new Error('\"' + relativeSource + '\" is not in the SourceMap.');\n    }\n  };\n\n/**\n * Returns the generated line and column information for the original source,\n * line, and column positions provided. The only argument is an object with\n * the following properties:\n *\n *   - source: The filename of the original source.\n *   - line: The line number in the original source.  The line number\n *     is 1-based.\n *   - column: The column number in the original source.  The column\n *     number is 0-based.\n *   - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n *     'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n *     closest element that is smaller than or greater than the one we are\n *     searching for, respectively, if the exact element cannot be found.\n *     Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n *\n * and an object is returned with the following properties:\n *\n *   - line: The line number in the generated source, or null.  The\n *     line number is 1-based.\n *   - column: The column number in the generated source, or null.\n *     The column number is 0-based.\n */\nBasicSourceMapConsumer.prototype.generatedPositionFor =\n  function SourceMapConsumer_generatedPositionFor(aArgs) {\n    var source = util$2.getArg(aArgs, 'source');\n    source = this._findSourceIndex(source);\n    if (source < 0) {\n      return {\n        line: null,\n        column: null,\n        lastColumn: null\n      };\n    }\n\n    var needle = {\n      source: source,\n      originalLine: util$2.getArg(aArgs, 'line'),\n      originalColumn: util$2.getArg(aArgs, 'column')\n    };\n\n    var index = this._findMapping(\n      needle,\n      this._originalMappings,\n      \"originalLine\",\n      \"originalColumn\",\n      util$2.compareByOriginalPositions,\n      util$2.getArg(aArgs, 'bias', SourceMapConsumer$4.GREATEST_LOWER_BOUND)\n    );\n\n    if (index >= 0) {\n      var mapping = this._originalMappings[index];\n\n      if (mapping.source === needle.source) {\n        return {\n          line: util$2.getArg(mapping, 'generatedLine', null),\n          column: util$2.getArg(mapping, 'generatedColumn', null),\n          lastColumn: util$2.getArg(mapping, 'lastGeneratedColumn', null)\n        };\n      }\n    }\n\n    return {\n      line: null,\n      column: null,\n      lastColumn: null\n    };\n  };\n\nsourceMapConsumer.BasicSourceMapConsumer = BasicSourceMapConsumer;\n\n/**\n * An IndexedSourceMapConsumer instance represents a parsed source map which\n * we can query for information. It differs from BasicSourceMapConsumer in\n * that it takes \"indexed\" source maps (i.e. ones with a \"sections\" field) as\n * input.\n *\n * The first parameter is a raw source map (either as a JSON string, or already\n * parsed to an object). According to the spec for indexed source maps, they\n * have the following attributes:\n *\n *   - version: Which version of the source map spec this map is following.\n *   - file: Optional. The generated file this source map is associated with.\n *   - sections: A list of section definitions.\n *\n * Each value under the \"sections\" field has two fields:\n *   - offset: The offset into the original specified at which this section\n *       begins to apply, defined as an object with a \"line\" and \"column\"\n *       field.\n *   - map: A source map definition. This source map could also be indexed,\n *       but doesn't have to be.\n *\n * Instead of the \"map\" field, it's also possible to have a \"url\" field\n * specifying a URL to retrieve a source map from, but that's currently\n * unsupported.\n *\n * Here's an example source map, taken from the source map spec[0], but\n * modified to omit a section which uses the \"url\" field.\n *\n *  {\n *    version : 3,\n *    file: \"app.js\",\n *    sections: [{\n *      offset: {line:100, column:10},\n *      map: {\n *        version : 3,\n *        file: \"section.js\",\n *        sources: [\"foo.js\", \"bar.js\"],\n *        names: [\"src\", \"maps\", \"are\", \"fun\"],\n *        mappings: \"AAAA,E;;ABCDE;\"\n *      }\n *    }],\n *  }\n *\n * The second parameter, if given, is a string whose value is the URL\n * at which the source map was found.  This URL is used to compute the\n * sources array.\n *\n * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt\n */\nfunction IndexedSourceMapConsumer(aSourceMap, aSourceMapURL) {\n  var sourceMap = aSourceMap;\n  if (typeof aSourceMap === 'string') {\n    sourceMap = util$2.parseSourceMapInput(aSourceMap);\n  }\n\n  var version = util$2.getArg(sourceMap, 'version');\n  var sections = util$2.getArg(sourceMap, 'sections');\n\n  if (version != this._version) {\n    throw new Error('Unsupported version: ' + version);\n  }\n\n  this._sources = new ArraySet();\n  this._names = new ArraySet();\n\n  var lastOffset = {\n    line: -1,\n    column: 0\n  };\n  this._sections = sections.map(function (s) {\n    if (s.url) {\n      // The url field will require support for asynchronicity.\n      // See https://github.com/mozilla/source-map/issues/16\n      throw new Error('Support for url field in sections not implemented.');\n    }\n    var offset = util$2.getArg(s, 'offset');\n    var offsetLine = util$2.getArg(offset, 'line');\n    var offsetColumn = util$2.getArg(offset, 'column');\n\n    if (offsetLine < lastOffset.line ||\n        (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) {\n      throw new Error('Section offsets must be ordered and non-overlapping.');\n    }\n    lastOffset = offset;\n\n    return {\n      generatedOffset: {\n        // The offset fields are 0-based, but we use 1-based indices when\n        // encoding/decoding from VLQ.\n        generatedLine: offsetLine + 1,\n        generatedColumn: offsetColumn + 1\n      },\n      consumer: new SourceMapConsumer$4(util$2.getArg(s, 'map'), aSourceMapURL)\n    }\n  });\n}\n\nIndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer$4.prototype);\nIndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer$4;\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nIndexedSourceMapConsumer.prototype._version = 3;\n\n/**\n * The list of original sources.\n */\nObject.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', {\n  get: function () {\n    var sources = [];\n    for (var i = 0; i < this._sections.length; i++) {\n      for (var j = 0; j < this._sections[i].consumer.sources.length; j++) {\n        sources.push(this._sections[i].consumer.sources[j]);\n      }\n    }\n    return sources;\n  }\n});\n\n/**\n * Returns the original source, line, and column information for the generated\n * source's line and column positions provided. The only argument is an object\n * with the following properties:\n *\n *   - line: The line number in the generated source.  The line number\n *     is 1-based.\n *   - column: The column number in the generated source.  The column\n *     number is 0-based.\n *\n * and an object is returned with the following properties:\n *\n *   - source: The original source file, or null.\n *   - line: The line number in the original source, or null.  The\n *     line number is 1-based.\n *   - column: The column number in the original source, or null.  The\n *     column number is 0-based.\n *   - name: The original identifier, or null.\n */\nIndexedSourceMapConsumer.prototype.originalPositionFor =\n  function IndexedSourceMapConsumer_originalPositionFor(aArgs) {\n    var needle = {\n      generatedLine: util$2.getArg(aArgs, 'line'),\n      generatedColumn: util$2.getArg(aArgs, 'column')\n    };\n\n    // Find the section containing the generated position we're trying to map\n    // to an original position.\n    var sectionIndex = binarySearch.search(needle, this._sections,\n      function(needle, section) {\n        var cmp = needle.generatedLine - section.generatedOffset.generatedLine;\n        if (cmp) {\n          return cmp;\n        }\n\n        return (needle.generatedColumn -\n                section.generatedOffset.generatedColumn);\n      });\n    var section = this._sections[sectionIndex];\n\n    if (!section) {\n      return {\n        source: null,\n        line: null,\n        column: null,\n        name: null\n      };\n    }\n\n    return section.consumer.originalPositionFor({\n      line: needle.generatedLine -\n        (section.generatedOffset.generatedLine - 1),\n      column: needle.generatedColumn -\n        (section.generatedOffset.generatedLine === needle.generatedLine\n         ? section.generatedOffset.generatedColumn - 1\n         : 0),\n      bias: aArgs.bias\n    });\n  };\n\n/**\n * Return true if we have the source content for every source in the source\n * map, false otherwise.\n */\nIndexedSourceMapConsumer.prototype.hasContentsOfAllSources =\n  function IndexedSourceMapConsumer_hasContentsOfAllSources() {\n    return this._sections.every(function (s) {\n      return s.consumer.hasContentsOfAllSources();\n    });\n  };\n\n/**\n * Returns the original source content. The only argument is the url of the\n * original source file. Returns null if no original source content is\n * available.\n */\nIndexedSourceMapConsumer.prototype.sourceContentFor =\n  function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n    for (var i = 0; i < this._sections.length; i++) {\n      var section = this._sections[i];\n\n      var content = section.consumer.sourceContentFor(aSource, true);\n      if (content) {\n        return content;\n      }\n    }\n    if (nullOnMissing) {\n      return null;\n    }\n    else {\n      throw new Error('\"' + aSource + '\" is not in the SourceMap.');\n    }\n  };\n\n/**\n * Returns the generated line and column information for the original source,\n * line, and column positions provided. The only argument is an object with\n * the following properties:\n *\n *   - source: The filename of the original source.\n *   - line: The line number in the original source.  The line number\n *     is 1-based.\n *   - column: The column number in the original source.  The column\n *     number is 0-based.\n *\n * and an object is returned with the following properties:\n *\n *   - line: The line number in the generated source, or null.  The\n *     line number is 1-based. \n *   - column: The column number in the generated source, or null.\n *     The column number is 0-based.\n */\nIndexedSourceMapConsumer.prototype.generatedPositionFor =\n  function IndexedSourceMapConsumer_generatedPositionFor(aArgs) {\n    for (var i = 0; i < this._sections.length; i++) {\n      var section = this._sections[i];\n\n      // Only consider this section if the requested source is in the list of\n      // sources of the consumer.\n      if (section.consumer._findSourceIndex(util$2.getArg(aArgs, 'source')) === -1) {\n        continue;\n      }\n      var generatedPosition = section.consumer.generatedPositionFor(aArgs);\n      if (generatedPosition) {\n        var ret = {\n          line: generatedPosition.line +\n            (section.generatedOffset.generatedLine - 1),\n          column: generatedPosition.column +\n            (section.generatedOffset.generatedLine === generatedPosition.line\n             ? section.generatedOffset.generatedColumn - 1\n             : 0)\n        };\n        return ret;\n      }\n    }\n\n    return {\n      line: null,\n      column: null\n    };\n  };\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nIndexedSourceMapConsumer.prototype._parseMappings =\n  function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n    this.__generatedMappings = [];\n    this.__originalMappings = [];\n    for (var i = 0; i < this._sections.length; i++) {\n      var section = this._sections[i];\n      var sectionMappings = section.consumer._generatedMappings;\n      for (var j = 0; j < sectionMappings.length; j++) {\n        var mapping = sectionMappings[j];\n\n        var source = section.consumer._sources.at(mapping.source);\n        source = util$2.computeSourceURL(section.consumer.sourceRoot, source, this._sourceMapURL);\n        this._sources.add(source);\n        source = this._sources.indexOf(source);\n\n        var name = null;\n        if (mapping.name) {\n          name = section.consumer._names.at(mapping.name);\n          this._names.add(name);\n          name = this._names.indexOf(name);\n        }\n\n        // The mappings coming from the consumer for the section have\n        // generated positions relative to the start of the section, so we\n        // need to offset them to be relative to the start of the concatenated\n        // generated file.\n        var adjustedMapping = {\n          source: source,\n          generatedLine: mapping.generatedLine +\n            (section.generatedOffset.generatedLine - 1),\n          generatedColumn: mapping.generatedColumn +\n            (section.generatedOffset.generatedLine === mapping.generatedLine\n            ? section.generatedOffset.generatedColumn - 1\n            : 0),\n          originalLine: mapping.originalLine,\n          originalColumn: mapping.originalColumn,\n          name: name\n        };\n\n        this.__generatedMappings.push(adjustedMapping);\n        if (typeof adjustedMapping.originalLine === 'number') {\n          this.__originalMappings.push(adjustedMapping);\n        }\n      }\n    }\n\n    quickSort(this.__generatedMappings, util$2.compareByGeneratedPositionsDeflated);\n    quickSort(this.__originalMappings, util$2.compareByOriginalPositions);\n  };\n\nsourceMapConsumer.IndexedSourceMapConsumer = IndexedSourceMapConsumer;\n\nvar sourceNode = {};\n\n/* -*- Mode: js; js-indent-level: 2; -*- */\n\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar SourceMapGenerator$4 = sourceMapGenerator.SourceMapGenerator;\nvar util$1 = util$6;\n\n// Matches a Windows-style `\\r\\n` newline or a `\\n` newline used by all other\n// operating systems these days (capturing the result).\nvar REGEX_NEWLINE = /(\\r?\\n)/;\n\n// Newline character code for charCodeAt() comparisons\nvar NEWLINE_CODE = 10;\n\n// Private symbol for identifying `SourceNode`s when multiple versions of\n// the source-map library are loaded. This MUST NOT CHANGE across\n// versions!\nvar isSourceNode = \"$$$isSourceNode$$$\";\n\n/**\n * SourceNodes provide a way to abstract over interpolating/concatenating\n * snippets of generated JavaScript source code while maintaining the line and\n * column information associated with the original source code.\n *\n * @param aLine The original line number.\n * @param aColumn The original column number.\n * @param aSource The original source's filename.\n * @param aChunks Optional. An array of strings which are snippets of\n *        generated JS, or other SourceNodes.\n * @param aName The original identifier.\n */\nfunction SourceNode(aLine, aColumn, aSource, aChunks, aName) {\n  this.children = [];\n  this.sourceContents = {};\n  this.line = aLine == null ? null : aLine;\n  this.column = aColumn == null ? null : aColumn;\n  this.source = aSource == null ? null : aSource;\n  this.name = aName == null ? null : aName;\n  this[isSourceNode] = true;\n  if (aChunks != null) this.add(aChunks);\n}\n\n/**\n * Creates a SourceNode from generated code and a SourceMapConsumer.\n *\n * @param aGeneratedCode The generated code\n * @param aSourceMapConsumer The SourceMap for the generated code\n * @param aRelativePath Optional. The path that relative sources in the\n *        SourceMapConsumer should be relative to.\n */\nSourceNode.fromStringWithSourceMap =\n  function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) {\n    // The SourceNode we want to fill with the generated code\n    // and the SourceMap\n    var node = new SourceNode();\n\n    // All even indices of this array are one line of the generated code,\n    // while all odd indices are the newlines between two adjacent lines\n    // (since `REGEX_NEWLINE` captures its match).\n    // Processed fragments are accessed by calling `shiftNextLine`.\n    var remainingLines = aGeneratedCode.split(REGEX_NEWLINE);\n    var remainingLinesIndex = 0;\n    var shiftNextLine = function() {\n      var lineContents = getNextLine();\n      // The last line of a file might not have a newline.\n      var newLine = getNextLine() || \"\";\n      return lineContents + newLine;\n\n      function getNextLine() {\n        return remainingLinesIndex < remainingLines.length ?\n            remainingLines[remainingLinesIndex++] : undefined;\n      }\n    };\n\n    // We need to remember the position of \"remainingLines\"\n    var lastGeneratedLine = 1, lastGeneratedColumn = 0;\n\n    // The generate SourceNodes we need a code range.\n    // To extract it current and last mapping is used.\n    // Here we store the last mapping.\n    var lastMapping = null;\n\n    aSourceMapConsumer.eachMapping(function (mapping) {\n      if (lastMapping !== null) {\n        // We add the code from \"lastMapping\" to \"mapping\":\n        // First check if there is a new line in between.\n        if (lastGeneratedLine < mapping.generatedLine) {\n          // Associate first line with \"lastMapping\"\n          addMappingWithCode(lastMapping, shiftNextLine());\n          lastGeneratedLine++;\n          lastGeneratedColumn = 0;\n          // The remaining code is added without mapping\n        } else {\n          // There is no new line in between.\n          // Associate the code between \"lastGeneratedColumn\" and\n          // \"mapping.generatedColumn\" with \"lastMapping\"\n          var nextLine = remainingLines[remainingLinesIndex] || '';\n          var code = nextLine.substr(0, mapping.generatedColumn -\n                                        lastGeneratedColumn);\n          remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn -\n                                              lastGeneratedColumn);\n          lastGeneratedColumn = mapping.generatedColumn;\n          addMappingWithCode(lastMapping, code);\n          // No more remaining code, continue\n          lastMapping = mapping;\n          return;\n        }\n      }\n      // We add the generated code until the first mapping\n      // to the SourceNode without any mapping.\n      // Each line is added as separate string.\n      while (lastGeneratedLine < mapping.generatedLine) {\n        node.add(shiftNextLine());\n        lastGeneratedLine++;\n      }\n      if (lastGeneratedColumn < mapping.generatedColumn) {\n        var nextLine = remainingLines[remainingLinesIndex] || '';\n        node.add(nextLine.substr(0, mapping.generatedColumn));\n        remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn);\n        lastGeneratedColumn = mapping.generatedColumn;\n      }\n      lastMapping = mapping;\n    }, this);\n    // We have processed all mappings.\n    if (remainingLinesIndex < remainingLines.length) {\n      if (lastMapping) {\n        // Associate the remaining code in the current line with \"lastMapping\"\n        addMappingWithCode(lastMapping, shiftNextLine());\n      }\n      // and add the remaining lines without any mapping\n      node.add(remainingLines.splice(remainingLinesIndex).join(\"\"));\n    }\n\n    // Copy sourcesContent into SourceNode\n    aSourceMapConsumer.sources.forEach(function (sourceFile) {\n      var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n      if (content != null) {\n        if (aRelativePath != null) {\n          sourceFile = util$1.join(aRelativePath, sourceFile);\n        }\n        node.setSourceContent(sourceFile, content);\n      }\n    });\n\n    return node;\n\n    function addMappingWithCode(mapping, code) {\n      if (mapping === null || mapping.source === undefined) {\n        node.add(code);\n      } else {\n        var source = aRelativePath\n          ? util$1.join(aRelativePath, mapping.source)\n          : mapping.source;\n        node.add(new SourceNode(mapping.originalLine,\n                                mapping.originalColumn,\n                                source,\n                                code,\n                                mapping.name));\n      }\n    }\n  };\n\n/**\n * Add a chunk of generated JS to this source node.\n *\n * @param aChunk A string snippet of generated JS code, another instance of\n *        SourceNode, or an array where each member is one of those things.\n */\nSourceNode.prototype.add = function SourceNode_add(aChunk) {\n  if (Array.isArray(aChunk)) {\n    aChunk.forEach(function (chunk) {\n      this.add(chunk);\n    }, this);\n  }\n  else if (aChunk[isSourceNode] || typeof aChunk === \"string\") {\n    if (aChunk) {\n      this.children.push(aChunk);\n    }\n  }\n  else {\n    throw new TypeError(\n      \"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk\n    );\n  }\n  return this;\n};\n\n/**\n * Add a chunk of generated JS to the beginning of this source node.\n *\n * @param aChunk A string snippet of generated JS code, another instance of\n *        SourceNode, or an array where each member is one of those things.\n */\nSourceNode.prototype.prepend = function SourceNode_prepend(aChunk) {\n  if (Array.isArray(aChunk)) {\n    for (var i = aChunk.length-1; i >= 0; i--) {\n      this.prepend(aChunk[i]);\n    }\n  }\n  else if (aChunk[isSourceNode] || typeof aChunk === \"string\") {\n    this.children.unshift(aChunk);\n  }\n  else {\n    throw new TypeError(\n      \"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk\n    );\n  }\n  return this;\n};\n\n/**\n * Walk over the tree of JS snippets in this node and its children. The\n * walking function is called once for each snippet of JS and is passed that\n * snippet and the its original associated source's line/column location.\n *\n * @param aFn The traversal function.\n */\nSourceNode.prototype.walk = function SourceNode_walk(aFn) {\n  var chunk;\n  for (var i = 0, len = this.children.length; i < len; i++) {\n    chunk = this.children[i];\n    if (chunk[isSourceNode]) {\n      chunk.walk(aFn);\n    }\n    else {\n      if (chunk !== '') {\n        aFn(chunk, { source: this.source,\n                     line: this.line,\n                     column: this.column,\n                     name: this.name });\n      }\n    }\n  }\n};\n\n/**\n * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between\n * each of `this.children`.\n *\n * @param aSep The separator.\n */\nSourceNode.prototype.join = function SourceNode_join(aSep) {\n  var newChildren;\n  var i;\n  var len = this.children.length;\n  if (len > 0) {\n    newChildren = [];\n    for (i = 0; i < len-1; i++) {\n      newChildren.push(this.children[i]);\n      newChildren.push(aSep);\n    }\n    newChildren.push(this.children[i]);\n    this.children = newChildren;\n  }\n  return this;\n};\n\n/**\n * Call String.prototype.replace on the very right-most source snippet. Useful\n * for trimming whitespace from the end of a source node, etc.\n *\n * @param aPattern The pattern to replace.\n * @param aReplacement The thing to replace the pattern with.\n */\nSourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) {\n  var lastChild = this.children[this.children.length - 1];\n  if (lastChild[isSourceNode]) {\n    lastChild.replaceRight(aPattern, aReplacement);\n  }\n  else if (typeof lastChild === 'string') {\n    this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement);\n  }\n  else {\n    this.children.push(''.replace(aPattern, aReplacement));\n  }\n  return this;\n};\n\n/**\n * Set the source content for a source file. This will be added to the SourceMapGenerator\n * in the sourcesContent field.\n *\n * @param aSourceFile The filename of the source file\n * @param aSourceContent The content of the source file\n */\nSourceNode.prototype.setSourceContent =\n  function SourceNode_setSourceContent(aSourceFile, aSourceContent) {\n    this.sourceContents[util$1.toSetString(aSourceFile)] = aSourceContent;\n  };\n\n/**\n * Walk over the tree of SourceNodes. The walking function is called for each\n * source file content and is passed the filename and source content.\n *\n * @param aFn The traversal function.\n */\nSourceNode.prototype.walkSourceContents =\n  function SourceNode_walkSourceContents(aFn) {\n    for (var i = 0, len = this.children.length; i < len; i++) {\n      if (this.children[i][isSourceNode]) {\n        this.children[i].walkSourceContents(aFn);\n      }\n    }\n\n    var sources = Object.keys(this.sourceContents);\n    for (var i = 0, len = sources.length; i < len; i++) {\n      aFn(util$1.fromSetString(sources[i]), this.sourceContents[sources[i]]);\n    }\n  };\n\n/**\n * Return the string representation of this source node. Walks over the tree\n * and concatenates all the various snippets together to one string.\n */\nSourceNode.prototype.toString = function SourceNode_toString() {\n  var str = \"\";\n  this.walk(function (chunk) {\n    str += chunk;\n  });\n  return str;\n};\n\n/**\n * Returns the string representation of this source node along with a source\n * map.\n */\nSourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) {\n  var generated = {\n    code: \"\",\n    line: 1,\n    column: 0\n  };\n  var map = new SourceMapGenerator$4(aArgs);\n  var sourceMappingActive = false;\n  var lastOriginalSource = null;\n  var lastOriginalLine = null;\n  var lastOriginalColumn = null;\n  var lastOriginalName = null;\n  this.walk(function (chunk, original) {\n    generated.code += chunk;\n    if (original.source !== null\n        && original.line !== null\n        && original.column !== null) {\n      if(lastOriginalSource !== original.source\n         || lastOriginalLine !== original.line\n         || lastOriginalColumn !== original.column\n         || lastOriginalName !== original.name) {\n        map.addMapping({\n          source: original.source,\n          original: {\n            line: original.line,\n            column: original.column\n          },\n          generated: {\n            line: generated.line,\n            column: generated.column\n          },\n          name: original.name\n        });\n      }\n      lastOriginalSource = original.source;\n      lastOriginalLine = original.line;\n      lastOriginalColumn = original.column;\n      lastOriginalName = original.name;\n      sourceMappingActive = true;\n    } else if (sourceMappingActive) {\n      map.addMapping({\n        generated: {\n          line: generated.line,\n          column: generated.column\n        }\n      });\n      lastOriginalSource = null;\n      sourceMappingActive = false;\n    }\n    for (var idx = 0, length = chunk.length; idx < length; idx++) {\n      if (chunk.charCodeAt(idx) === NEWLINE_CODE) {\n        generated.line++;\n        generated.column = 0;\n        // Mappings end at eol\n        if (idx + 1 === length) {\n          lastOriginalSource = null;\n          sourceMappingActive = false;\n        } else if (sourceMappingActive) {\n          map.addMapping({\n            source: original.source,\n            original: {\n              line: original.line,\n              column: original.column\n            },\n            generated: {\n              line: generated.line,\n              column: generated.column\n            },\n            name: original.name\n          });\n        }\n      } else {\n        generated.column++;\n      }\n    }\n  });\n  this.walkSourceContents(function (sourceFile, sourceContent) {\n    map.setSourceContent(sourceFile, sourceContent);\n  });\n\n  return { code: generated.code, map: map };\n};\n\nsourceNode.SourceNode = SourceNode;\n\n/*\n * Copyright 2009-2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE.txt or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nsourceMap$1.SourceMapGenerator = sourceMapGenerator.SourceMapGenerator;\nsourceMap$1.SourceMapConsumer = sourceMapConsumer.SourceMapConsumer;\nsourceMap$1.SourceNode = sourceNode.SourceNode;\n\nvar require$$2 = /*@__PURE__*/getAugmentedNamespace(_polyfillNode_url$1);\n\nlet urlAlphabet =\n  'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict';\nlet customAlphabet = (alphabet, size) => {\n  return () => {\n    let id = '';\n    let i = size;\n    while (i--) {\n      id += alphabet[(Math.random() * alphabet.length) | 0];\n    }\n    return id\n  }\n};\nlet nanoid$1 = (size = 21) => {\n  let id = '';\n  let i = size;\n  while (i--) {\n    id += urlAlphabet[(Math.random() * 64) | 0];\n  }\n  return id\n};\nvar nonSecure = { nanoid: nanoid$1, customAlphabet };\n\nlet { SourceMapConsumer: SourceMapConsumer$3, SourceMapGenerator: SourceMapGenerator$3 } = sourceMap$1;\nlet { existsSync, readFileSync } = require$$0$2;\nlet { dirname: dirname$1, join } = require$$2$1;\n\nfunction fromBase64(str) {\n  if (Buffer) {\n    return Buffer.from(str, 'base64').toString()\n  } else {\n    /* c8 ignore next 2 */\n    return window.atob(str)\n  }\n}\n\nlet PreviousMap$2 = class PreviousMap {\n  constructor(css, opts) {\n    if (opts.map === false) return\n    this.loadAnnotation(css);\n    this.inline = this.startWith(this.annotation, 'data:');\n\n    let prev = opts.map ? opts.map.prev : undefined;\n    let text = this.loadMap(opts.from, prev);\n    if (!this.mapFile && opts.from) {\n      this.mapFile = opts.from;\n    }\n    if (this.mapFile) this.root = dirname$1(this.mapFile);\n    if (text) this.text = text;\n  }\n\n  consumer() {\n    if (!this.consumerCache) {\n      this.consumerCache = new SourceMapConsumer$3(this.text);\n    }\n    return this.consumerCache\n  }\n\n  withContent() {\n    return !!(\n      this.consumer().sourcesContent &&\n      this.consumer().sourcesContent.length > 0\n    )\n  }\n\n  startWith(string, start) {\n    if (!string) return false\n    return string.substr(0, start.length) === start\n  }\n\n  getAnnotationURL(sourceMapString) {\n    return sourceMapString.replace(/^\\/\\*\\s*# sourceMappingURL=/, '').trim()\n  }\n\n  loadAnnotation(css) {\n    let comments = css.match(/\\/\\*\\s*# sourceMappingURL=/gm);\n    if (!comments) return\n\n    // sourceMappingURLs from comments, strings, etc.\n    let start = css.lastIndexOf(comments.pop());\n    let end = css.indexOf('*/', start);\n\n    if (start > -1 && end > -1) {\n      // Locate the last sourceMappingURL to avoid pickin\n      this.annotation = this.getAnnotationURL(css.substring(start, end));\n    }\n  }\n\n  decodeInline(text) {\n    let baseCharsetUri = /^data:application\\/json;charset=utf-?8;base64,/;\n    let baseUri = /^data:application\\/json;base64,/;\n    let charsetUri = /^data:application\\/json;charset=utf-?8,/;\n    let uri = /^data:application\\/json,/;\n\n    if (charsetUri.test(text) || uri.test(text)) {\n      return decodeURIComponent(text.substr(RegExp.lastMatch.length))\n    }\n\n    if (baseCharsetUri.test(text) || baseUri.test(text)) {\n      return fromBase64(text.substr(RegExp.lastMatch.length))\n    }\n\n    let encoding = text.match(/data:application\\/json;([^,]+),/)[1];\n    throw new Error('Unsupported source map encoding ' + encoding)\n  }\n\n  loadFile(path) {\n    this.root = dirname$1(path);\n    if (existsSync(path)) {\n      this.mapFile = path;\n      return readFileSync(path, 'utf-8').toString().trim()\n    }\n  }\n\n  loadMap(file, prev) {\n    if (prev === false) return false\n\n    if (prev) {\n      if (typeof prev === 'string') {\n        return prev\n      } else if (typeof prev === 'function') {\n        let prevPath = prev(file);\n        if (prevPath) {\n          let map = this.loadFile(prevPath);\n          if (!map) {\n            throw new Error(\n              'Unable to load previous source map: ' + prevPath.toString()\n            )\n          }\n          return map\n        }\n      } else if (prev instanceof SourceMapConsumer$3) {\n        return SourceMapGenerator$3.fromSourceMap(prev).toString()\n      } else if (prev instanceof SourceMapGenerator$3) {\n        return prev.toString()\n      } else if (this.isMap(prev)) {\n        return JSON.stringify(prev)\n      } else {\n        throw new Error(\n          'Unsupported previous source map format: ' + prev.toString()\n        )\n      }\n    } else if (this.inline) {\n      return this.decodeInline(this.annotation)\n    } else if (this.annotation) {\n      let map = this.annotation;\n      if (file) map = join(dirname$1(file), map);\n      return this.loadFile(map)\n    }\n  }\n\n  isMap(map) {\n    if (typeof map !== 'object') return false\n    return (\n      typeof map.mappings === 'string' ||\n      typeof map._mappings === 'string' ||\n      Array.isArray(map.sections)\n    )\n  }\n};\n\nvar previousMap = PreviousMap$2;\nPreviousMap$2.default = PreviousMap$2;\n\nlet { SourceMapConsumer: SourceMapConsumer$2, SourceMapGenerator: SourceMapGenerator$2 } = sourceMap$1;\nlet { fileURLToPath, pathToFileURL: pathToFileURL$1 } = require$$2;\nlet { resolve: resolve$1, isAbsolute } = require$$2$1;\nlet { nanoid } = nonSecure;\n\nlet terminalHighlight = terminalHighlight_1;\nlet CssSyntaxError$1 = cssSyntaxError;\nlet PreviousMap$1 = previousMap;\n\nlet fromOffsetCache = Symbol('fromOffsetCache');\n\nlet sourceMapAvailable$1 = Boolean(SourceMapConsumer$2 && SourceMapGenerator$2);\nlet pathAvailable$1 = Boolean(resolve$1 && isAbsolute);\n\nlet Input$4 = class Input {\n  constructor(css, opts = {}) {\n    if (\n      css === null ||\n      typeof css === 'undefined' ||\n      (typeof css === 'object' && !css.toString)\n    ) {\n      throw new Error(`PostCSS received ${css} instead of CSS string`)\n    }\n\n    this.css = css.toString();\n\n    if (this.css[0] === '\\uFEFF' || this.css[0] === '\\uFFFE') {\n      this.hasBOM = true;\n      this.css = this.css.slice(1);\n    } else {\n      this.hasBOM = false;\n    }\n\n    if (opts.from) {\n      if (\n        !pathAvailable$1 ||\n        /^\\w+:\\/\\//.test(opts.from) ||\n        isAbsolute(opts.from)\n      ) {\n        this.file = opts.from;\n      } else {\n        this.file = resolve$1(opts.from);\n      }\n    }\n\n    if (pathAvailable$1 && sourceMapAvailable$1) {\n      let map = new PreviousMap$1(this.css, opts);\n      if (map.text) {\n        this.map = map;\n        let file = map.consumer().file;\n        if (!this.file && file) this.file = this.mapResolve(file);\n      }\n    }\n\n    if (!this.file) {\n      this.id = '<input css ' + nanoid(6) + '>';\n    }\n    if (this.map) this.map.file = this.from;\n  }\n\n  fromOffset(offset) {\n    let lastLine, lineToIndex;\n    if (!this[fromOffsetCache]) {\n      let lines = this.css.split('\\n');\n      lineToIndex = new Array(lines.length);\n      let prevIndex = 0;\n\n      for (let i = 0, l = lines.length; i < l; i++) {\n        lineToIndex[i] = prevIndex;\n        prevIndex += lines[i].length + 1;\n      }\n\n      this[fromOffsetCache] = lineToIndex;\n    } else {\n      lineToIndex = this[fromOffsetCache];\n    }\n    lastLine = lineToIndex[lineToIndex.length - 1];\n\n    let min = 0;\n    if (offset >= lastLine) {\n      min = lineToIndex.length - 1;\n    } else {\n      let max = lineToIndex.length - 2;\n      let mid;\n      while (min < max) {\n        mid = min + ((max - min) >> 1);\n        if (offset < lineToIndex[mid]) {\n          max = mid - 1;\n        } else if (offset >= lineToIndex[mid + 1]) {\n          min = mid + 1;\n        } else {\n          min = mid;\n          break\n        }\n      }\n    }\n    return {\n      line: min + 1,\n      col: offset - lineToIndex[min] + 1\n    }\n  }\n\n  error(message, line, column, opts = {}) {\n    let result, endLine, endColumn;\n\n    if (line && typeof line === 'object') {\n      let start = line;\n      let end = column;\n      if (typeof line.offset === 'number') {\n        let pos = this.fromOffset(start.offset);\n        line = pos.line;\n        column = pos.col;\n      } else {\n        line = start.line;\n        column = start.column;\n      }\n      if (typeof end.offset === 'number') {\n        let pos = this.fromOffset(end.offset);\n        endLine = pos.line;\n        endColumn = pos.col;\n      } else {\n        endLine = end.line;\n        endColumn = end.column;\n      }\n    } else if (!column) {\n      let pos = this.fromOffset(line);\n      line = pos.line;\n      column = pos.col;\n    }\n\n    let origin = this.origin(line, column, endLine, endColumn);\n    if (origin) {\n      result = new CssSyntaxError$1(\n        message,\n        origin.endLine === undefined\n          ? origin.line\n          : { line: origin.line, column: origin.column },\n        origin.endLine === undefined\n          ? origin.column\n          : { line: origin.endLine, column: origin.endColumn },\n        origin.source,\n        origin.file,\n        opts.plugin\n      );\n    } else {\n      result = new CssSyntaxError$1(\n        message,\n        endLine === undefined ? line : { line, column },\n        endLine === undefined ? column : { line: endLine, column: endColumn },\n        this.css,\n        this.file,\n        opts.plugin\n      );\n    }\n\n    result.input = { line, column, endLine, endColumn, source: this.css };\n    if (this.file) {\n      if (pathToFileURL$1) {\n        result.input.url = pathToFileURL$1(this.file).toString();\n      }\n      result.input.file = this.file;\n    }\n\n    return result\n  }\n\n  origin(line, column, endLine, endColumn) {\n    if (!this.map) return false\n    let consumer = this.map.consumer();\n\n    let from = consumer.originalPositionFor({ line, column });\n    if (!from.source) return false\n\n    let to;\n    if (typeof endLine === 'number') {\n      to = consumer.originalPositionFor({ line: endLine, column: endColumn });\n    }\n\n    let fromUrl;\n\n    if (isAbsolute(from.source)) {\n      fromUrl = pathToFileURL$1(from.source);\n    } else {\n      fromUrl = new URL(\n        from.source,\n        this.map.consumer().sourceRoot || pathToFileURL$1(this.map.mapFile)\n      );\n    }\n\n    let result = {\n      url: fromUrl.toString(),\n      line: from.line,\n      column: from.column,\n      endLine: to && to.line,\n      endColumn: to && to.column\n    };\n\n    if (fromUrl.protocol === 'file:') {\n      if (fileURLToPath) {\n        result.file = fileURLToPath(fromUrl);\n      } else {\n        /* c8 ignore next 2 */\n        throw new Error(`file: protocol is not available in this PostCSS build`)\n      }\n    }\n\n    let source = consumer.sourceContentFor(from.source);\n    if (source) result.source = source;\n\n    return result\n  }\n\n  mapResolve(file) {\n    if (/^\\w+:\\/\\//.test(file)) {\n      return file\n    }\n    return resolve$1(this.map.consumer().sourceRoot || this.map.root || '.', file)\n  }\n\n  get from() {\n    return this.file || this.id\n  }\n\n  toJSON() {\n    let json = {};\n    for (let name of ['hasBOM', 'css', 'file', 'id']) {\n      if (this[name] != null) {\n        json[name] = this[name];\n      }\n    }\n    if (this.map) {\n      json.map = { ...this.map };\n      if (json.map.consumerCache) {\n        json.map.consumerCache = undefined;\n      }\n    }\n    return json\n  }\n};\n\nvar input = Input$4;\nInput$4.default = Input$4;\n\nif (terminalHighlight && terminalHighlight.registerInput) {\n  terminalHighlight.registerInput(Input$4);\n}\n\nlet { SourceMapConsumer: SourceMapConsumer$1, SourceMapGenerator: SourceMapGenerator$1 } = sourceMap$1;\nlet { dirname, resolve, relative, sep } = require$$2$1;\nlet { pathToFileURL } = require$$2;\n\nlet Input$3 = input;\n\nlet sourceMapAvailable = Boolean(SourceMapConsumer$1 && SourceMapGenerator$1);\nlet pathAvailable = Boolean(dirname && resolve && relative && sep);\n\nlet MapGenerator$2 = class MapGenerator {\n  constructor(stringify, root, opts, cssString) {\n    this.stringify = stringify;\n    this.mapOpts = opts.map || {};\n    this.root = root;\n    this.opts = opts;\n    this.css = cssString;\n  }\n\n  isMap() {\n    if (typeof this.opts.map !== 'undefined') {\n      return !!this.opts.map\n    }\n    return this.previous().length > 0\n  }\n\n  previous() {\n    if (!this.previousMaps) {\n      this.previousMaps = [];\n      if (this.root) {\n        this.root.walk(node => {\n          if (node.source && node.source.input.map) {\n            let map = node.source.input.map;\n            if (!this.previousMaps.includes(map)) {\n              this.previousMaps.push(map);\n            }\n          }\n        });\n      } else {\n        let input = new Input$3(this.css, this.opts);\n        if (input.map) this.previousMaps.push(input.map);\n      }\n    }\n\n    return this.previousMaps\n  }\n\n  isInline() {\n    if (typeof this.mapOpts.inline !== 'undefined') {\n      return this.mapOpts.inline\n    }\n\n    let annotation = this.mapOpts.annotation;\n    if (typeof annotation !== 'undefined' && annotation !== true) {\n      return false\n    }\n\n    if (this.previous().length) {\n      return this.previous().some(i => i.inline)\n    }\n    return true\n  }\n\n  isSourcesContent() {\n    if (typeof this.mapOpts.sourcesContent !== 'undefined') {\n      return this.mapOpts.sourcesContent\n    }\n    if (this.previous().length) {\n      return this.previous().some(i => i.withContent())\n    }\n    return true\n  }\n\n  clearAnnotation() {\n    if (this.mapOpts.annotation === false) return\n\n    if (this.root) {\n      let node;\n      for (let i = this.root.nodes.length - 1; i >= 0; i--) {\n        node = this.root.nodes[i];\n        if (node.type !== 'comment') continue\n        if (node.text.indexOf('# sourceMappingURL=') === 0) {\n          this.root.removeChild(i);\n        }\n      }\n    } else if (this.css) {\n      this.css = this.css.replace(/(\\n)?\\/\\*#[\\S\\s]*?\\*\\/$/gm, '');\n    }\n  }\n\n  setSourcesContent() {\n    let already = {};\n    if (this.root) {\n      this.root.walk(node => {\n        if (node.source) {\n          let from = node.source.input.from;\n          if (from && !already[from]) {\n            already[from] = true;\n            this.map.setSourceContent(\n              this.toUrl(this.path(from)),\n              node.source.input.css\n            );\n          }\n        }\n      });\n    } else if (this.css) {\n      let from = this.opts.from\n        ? this.toUrl(this.path(this.opts.from))\n        : '<no source>';\n      this.map.setSourceContent(from, this.css);\n    }\n  }\n\n  applyPrevMaps() {\n    for (let prev of this.previous()) {\n      let from = this.toUrl(this.path(prev.file));\n      let root = prev.root || dirname(prev.file);\n      let map;\n\n      if (this.mapOpts.sourcesContent === false) {\n        map = new SourceMapConsumer$1(prev.text);\n        if (map.sourcesContent) {\n          map.sourcesContent = map.sourcesContent.map(() => null);\n        }\n      } else {\n        map = prev.consumer();\n      }\n\n      this.map.applySourceMap(map, from, this.toUrl(this.path(root)));\n    }\n  }\n\n  isAnnotation() {\n    if (this.isInline()) {\n      return true\n    }\n    if (typeof this.mapOpts.annotation !== 'undefined') {\n      return this.mapOpts.annotation\n    }\n    if (this.previous().length) {\n      return this.previous().some(i => i.annotation)\n    }\n    return true\n  }\n\n  toBase64(str) {\n    if (Buffer) {\n      return Buffer.from(str).toString('base64')\n    } else {\n      return window.btoa(unescape(encodeURIComponent(str)))\n    }\n  }\n\n  addAnnotation() {\n    let content;\n\n    if (this.isInline()) {\n      content =\n        'data:application/json;base64,' + this.toBase64(this.map.toString());\n    } else if (typeof this.mapOpts.annotation === 'string') {\n      content = this.mapOpts.annotation;\n    } else if (typeof this.mapOpts.annotation === 'function') {\n      content = this.mapOpts.annotation(this.opts.to, this.root);\n    } else {\n      content = this.outputFile() + '.map';\n    }\n    let eol = '\\n';\n    if (this.css.includes('\\r\\n')) eol = '\\r\\n';\n\n    this.css += eol + '/*# sourceMappingURL=' + content + ' */';\n  }\n\n  outputFile() {\n    if (this.opts.to) {\n      return this.path(this.opts.to)\n    } else if (this.opts.from) {\n      return this.path(this.opts.from)\n    } else {\n      return 'to.css'\n    }\n  }\n\n  generateMap() {\n    if (this.root) {\n      this.generateString();\n    } else if (this.previous().length === 1) {\n      let prev = this.previous()[0].consumer();\n      prev.file = this.outputFile();\n      this.map = SourceMapGenerator$1.fromSourceMap(prev);\n    } else {\n      this.map = new SourceMapGenerator$1({ file: this.outputFile() });\n      this.map.addMapping({\n        source: this.opts.from\n          ? this.toUrl(this.path(this.opts.from))\n          : '<no source>',\n        generated: { line: 1, column: 0 },\n        original: { line: 1, column: 0 }\n      });\n    }\n\n    if (this.isSourcesContent()) this.setSourcesContent();\n    if (this.root && this.previous().length > 0) this.applyPrevMaps();\n    if (this.isAnnotation()) this.addAnnotation();\n\n    if (this.isInline()) {\n      return [this.css]\n    } else {\n      return [this.css, this.map]\n    }\n  }\n\n  path(file) {\n    if (file.indexOf('<') === 0) return file\n    if (/^\\w+:\\/\\//.test(file)) return file\n    if (this.mapOpts.absolute) return file\n\n    let from = this.opts.to ? dirname(this.opts.to) : '.';\n\n    if (typeof this.mapOpts.annotation === 'string') {\n      from = dirname(resolve(from, this.mapOpts.annotation));\n    }\n\n    file = relative(from, file);\n    return file\n  }\n\n  toUrl(path) {\n    if (sep === '\\\\') {\n      path = path.replace(/\\\\/g, '/');\n    }\n    return encodeURI(path).replace(/[#?]/g, encodeURIComponent)\n  }\n\n  sourcePath(node) {\n    if (this.mapOpts.from) {\n      return this.toUrl(this.mapOpts.from)\n    } else if (this.mapOpts.absolute) {\n      if (pathToFileURL) {\n        return pathToFileURL(node.source.input.from).toString()\n      } else {\n        throw new Error(\n          '`map.absolute` option is not available in this PostCSS build'\n        )\n      }\n    } else {\n      return this.toUrl(this.path(node.source.input.from))\n    }\n  }\n\n  generateString() {\n    this.css = '';\n    this.map = new SourceMapGenerator$1({ file: this.outputFile() });\n\n    let line = 1;\n    let column = 1;\n\n    let noSource = '<no source>';\n    let mapping = {\n      source: '',\n      generated: { line: 0, column: 0 },\n      original: { line: 0, column: 0 }\n    };\n\n    let lines, last;\n    this.stringify(this.root, (str, node, type) => {\n      this.css += str;\n\n      if (node && type !== 'end') {\n        mapping.generated.line = line;\n        mapping.generated.column = column - 1;\n        if (node.source && node.source.start) {\n          mapping.source = this.sourcePath(node);\n          mapping.original.line = node.source.start.line;\n          mapping.original.column = node.source.start.column - 1;\n          this.map.addMapping(mapping);\n        } else {\n          mapping.source = noSource;\n          mapping.original.line = 1;\n          mapping.original.column = 0;\n          this.map.addMapping(mapping);\n        }\n      }\n\n      lines = str.match(/\\n/g);\n      if (lines) {\n        line += lines.length;\n        last = str.lastIndexOf('\\n');\n        column = str.length - last;\n      } else {\n        column += str.length;\n      }\n\n      if (node && type !== 'start') {\n        let p = node.parent || { raws: {} };\n        if (node.type !== 'decl' || node !== p.last || p.raws.semicolon) {\n          if (node.source && node.source.end) {\n            mapping.source = this.sourcePath(node);\n            mapping.original.line = node.source.end.line;\n            mapping.original.column = node.source.end.column - 1;\n            mapping.generated.line = line;\n            mapping.generated.column = column - 2;\n            this.map.addMapping(mapping);\n          } else {\n            mapping.source = noSource;\n            mapping.original.line = 1;\n            mapping.original.column = 0;\n            mapping.generated.line = line;\n            mapping.generated.column = column - 1;\n            this.map.addMapping(mapping);\n          }\n        }\n      }\n    });\n  }\n\n  generate() {\n    this.clearAnnotation();\n    if (pathAvailable && sourceMapAvailable && this.isMap()) {\n      return this.generateMap()\n    } else {\n      let result = '';\n      this.stringify(this.root, i => {\n        result += i;\n      });\n      return [result]\n    }\n  }\n};\n\nvar mapGenerator = MapGenerator$2;\n\nlet Node$2 = node$2;\n\nlet Comment$4 = class Comment extends Node$2 {\n  constructor(defaults) {\n    super(defaults);\n    this.type = 'comment';\n  }\n};\n\nvar comment$3 = Comment$4;\nComment$4.default = Comment$4;\n\nlet { isClean: isClean$1, my: my$1 } = symbols;\nlet Declaration$3 = declaration;\nlet Comment$3 = comment$3;\nlet Node$1 = node$2;\n\nlet parse$4, Rule$4, AtRule$4;\n\nfunction cleanSource(nodes) {\n  return nodes.map(i => {\n    if (i.nodes) i.nodes = cleanSource(i.nodes);\n    delete i.source;\n    return i\n  })\n}\n\nfunction markDirtyUp(node) {\n  node[isClean$1] = false;\n  if (node.proxyOf.nodes) {\n    for (let i of node.proxyOf.nodes) {\n      markDirtyUp(i);\n    }\n  }\n}\n\nlet Container$7 = class Container extends Node$1 {\n  push(child) {\n    child.parent = this;\n    this.proxyOf.nodes.push(child);\n    return this\n  }\n\n  each(callback) {\n    if (!this.proxyOf.nodes) return undefined\n    let iterator = this.getIterator();\n\n    let index, result;\n    while (this.indexes[iterator] < this.proxyOf.nodes.length) {\n      index = this.indexes[iterator];\n      result = callback(this.proxyOf.nodes[index], index);\n      if (result === false) break\n\n      this.indexes[iterator] += 1;\n    }\n\n    delete this.indexes[iterator];\n    return result\n  }\n\n  walk(callback) {\n    return this.each((child, i) => {\n      let result;\n      try {\n        result = callback(child, i);\n      } catch (e) {\n        throw child.addToError(e)\n      }\n      if (result !== false && child.walk) {\n        result = child.walk(callback);\n      }\n\n      return result\n    })\n  }\n\n  walkDecls(prop, callback) {\n    if (!callback) {\n      callback = prop;\n      return this.walk((child, i) => {\n        if (child.type === 'decl') {\n          return callback(child, i)\n        }\n      })\n    }\n    if (prop instanceof RegExp) {\n      return this.walk((child, i) => {\n        if (child.type === 'decl' && prop.test(child.prop)) {\n          return callback(child, i)\n        }\n      })\n    }\n    return this.walk((child, i) => {\n      if (child.type === 'decl' && child.prop === prop) {\n        return callback(child, i)\n      }\n    })\n  }\n\n  walkRules(selector, callback) {\n    if (!callback) {\n      callback = selector;\n\n      return this.walk((child, i) => {\n        if (child.type === 'rule') {\n          return callback(child, i)\n        }\n      })\n    }\n    if (selector instanceof RegExp) {\n      return this.walk((child, i) => {\n        if (child.type === 'rule' && selector.test(child.selector)) {\n          return callback(child, i)\n        }\n      })\n    }\n    return this.walk((child, i) => {\n      if (child.type === 'rule' && child.selector === selector) {\n        return callback(child, i)\n      }\n    })\n  }\n\n  walkAtRules(name, callback) {\n    if (!callback) {\n      callback = name;\n      return this.walk((child, i) => {\n        if (child.type === 'atrule') {\n          return callback(child, i)\n        }\n      })\n    }\n    if (name instanceof RegExp) {\n      return this.walk((child, i) => {\n        if (child.type === 'atrule' && name.test(child.name)) {\n          return callback(child, i)\n        }\n      })\n    }\n    return this.walk((child, i) => {\n      if (child.type === 'atrule' && child.name === name) {\n        return callback(child, i)\n      }\n    })\n  }\n\n  walkComments(callback) {\n    return this.walk((child, i) => {\n      if (child.type === 'comment') {\n        return callback(child, i)\n      }\n    })\n  }\n\n  append(...children) {\n    for (let child of children) {\n      let nodes = this.normalize(child, this.last);\n      for (let node of nodes) this.proxyOf.nodes.push(node);\n    }\n\n    this.markDirty();\n\n    return this\n  }\n\n  prepend(...children) {\n    children = children.reverse();\n    for (let child of children) {\n      let nodes = this.normalize(child, this.first, 'prepend').reverse();\n      for (let node of nodes) this.proxyOf.nodes.unshift(node);\n      for (let id in this.indexes) {\n        this.indexes[id] = this.indexes[id] + nodes.length;\n      }\n    }\n\n    this.markDirty();\n\n    return this\n  }\n\n  cleanRaws(keepBetween) {\n    super.cleanRaws(keepBetween);\n    if (this.nodes) {\n      for (let node of this.nodes) node.cleanRaws(keepBetween);\n    }\n  }\n\n  insertBefore(exist, add) {\n    exist = this.index(exist);\n\n    let type = exist === 0 ? 'prepend' : false;\n    let nodes = this.normalize(add, this.proxyOf.nodes[exist], type).reverse();\n    for (let node of nodes) this.proxyOf.nodes.splice(exist, 0, node);\n\n    let index;\n    for (let id in this.indexes) {\n      index = this.indexes[id];\n      if (exist <= index) {\n        this.indexes[id] = index + nodes.length;\n      }\n    }\n\n    this.markDirty();\n\n    return this\n  }\n\n  insertAfter(exist, add) {\n    exist = this.index(exist);\n\n    let nodes = this.normalize(add, this.proxyOf.nodes[exist]).reverse();\n    for (let node of nodes) this.proxyOf.nodes.splice(exist + 1, 0, node);\n\n    let index;\n    for (let id in this.indexes) {\n      index = this.indexes[id];\n      if (exist < index) {\n        this.indexes[id] = index + nodes.length;\n      }\n    }\n\n    this.markDirty();\n\n    return this\n  }\n\n  removeChild(child) {\n    child = this.index(child);\n    this.proxyOf.nodes[child].parent = undefined;\n    this.proxyOf.nodes.splice(child, 1);\n\n    let index;\n    for (let id in this.indexes) {\n      index = this.indexes[id];\n      if (index >= child) {\n        this.indexes[id] = index - 1;\n      }\n    }\n\n    this.markDirty();\n\n    return this\n  }\n\n  removeAll() {\n    for (let node of this.proxyOf.nodes) node.parent = undefined;\n    this.proxyOf.nodes = [];\n\n    this.markDirty();\n\n    return this\n  }\n\n  replaceValues(pattern, opts, callback) {\n    if (!callback) {\n      callback = opts;\n      opts = {};\n    }\n\n    this.walkDecls(decl => {\n      if (opts.props && !opts.props.includes(decl.prop)) return\n      if (opts.fast && !decl.value.includes(opts.fast)) return\n\n      decl.value = decl.value.replace(pattern, callback);\n    });\n\n    this.markDirty();\n\n    return this\n  }\n\n  every(condition) {\n    return this.nodes.every(condition)\n  }\n\n  some(condition) {\n    return this.nodes.some(condition)\n  }\n\n  index(child) {\n    if (typeof child === 'number') return child\n    if (child.proxyOf) child = child.proxyOf;\n    return this.proxyOf.nodes.indexOf(child)\n  }\n\n  get first() {\n    if (!this.proxyOf.nodes) return undefined\n    return this.proxyOf.nodes[0]\n  }\n\n  get last() {\n    if (!this.proxyOf.nodes) return undefined\n    return this.proxyOf.nodes[this.proxyOf.nodes.length - 1]\n  }\n\n  normalize(nodes, sample) {\n    if (typeof nodes === 'string') {\n      nodes = cleanSource(parse$4(nodes).nodes);\n    } else if (Array.isArray(nodes)) {\n      nodes = nodes.slice(0);\n      for (let i of nodes) {\n        if (i.parent) i.parent.removeChild(i, 'ignore');\n      }\n    } else if (nodes.type === 'root' && this.type !== 'document') {\n      nodes = nodes.nodes.slice(0);\n      for (let i of nodes) {\n        if (i.parent) i.parent.removeChild(i, 'ignore');\n      }\n    } else if (nodes.type) {\n      nodes = [nodes];\n    } else if (nodes.prop) {\n      if (typeof nodes.value === 'undefined') {\n        throw new Error('Value field is missed in node creation')\n      } else if (typeof nodes.value !== 'string') {\n        nodes.value = String(nodes.value);\n      }\n      nodes = [new Declaration$3(nodes)];\n    } else if (nodes.selector) {\n      nodes = [new Rule$4(nodes)];\n    } else if (nodes.name) {\n      nodes = [new AtRule$4(nodes)];\n    } else if (nodes.text) {\n      nodes = [new Comment$3(nodes)];\n    } else {\n      throw new Error('Unknown node type in node creation')\n    }\n\n    let processed = nodes.map(i => {\n      /* c8 ignore next */\n      if (!i[my$1]) Container$7.rebuild(i);\n      i = i.proxyOf;\n      if (i.parent) i.parent.removeChild(i);\n      if (i[isClean$1]) markDirtyUp(i);\n      if (typeof i.raws.before === 'undefined') {\n        if (sample && typeof sample.raws.before !== 'undefined') {\n          i.raws.before = sample.raws.before.replace(/\\S/g, '');\n        }\n      }\n      i.parent = this;\n      return i\n    });\n\n    return processed\n  }\n\n  getProxyProcessor() {\n    return {\n      set(node, prop, value) {\n        if (node[prop] === value) return true\n        node[prop] = value;\n        if (prop === 'name' || prop === 'params' || prop === 'selector') {\n          node.markDirty();\n        }\n        return true\n      },\n\n      get(node, prop) {\n        if (prop === 'proxyOf') {\n          return node\n        } else if (!node[prop]) {\n          return node[prop]\n        } else if (\n          prop === 'each' ||\n          (typeof prop === 'string' && prop.startsWith('walk'))\n        ) {\n          return (...args) => {\n            return node[prop](\n              ...args.map(i => {\n                if (typeof i === 'function') {\n                  return (child, index) => i(child.toProxy(), index)\n                } else {\n                  return i\n                }\n              })\n            )\n          }\n        } else if (prop === 'every' || prop === 'some') {\n          return cb => {\n            return node[prop]((child, ...other) =>\n              cb(child.toProxy(), ...other)\n            )\n          }\n        } else if (prop === 'root') {\n          return () => node.root().toProxy()\n        } else if (prop === 'nodes') {\n          return node.nodes.map(i => i.toProxy())\n        } else if (prop === 'first' || prop === 'last') {\n          return node[prop].toProxy()\n        } else {\n          return node[prop]\n        }\n      }\n    }\n  }\n\n  getIterator() {\n    if (!this.lastEach) this.lastEach = 0;\n    if (!this.indexes) this.indexes = {};\n\n    this.lastEach += 1;\n    let iterator = this.lastEach;\n    this.indexes[iterator] = 0;\n\n    return iterator\n  }\n};\n\nContainer$7.registerParse = dependant => {\n  parse$4 = dependant;\n};\n\nContainer$7.registerRule = dependant => {\n  Rule$4 = dependant;\n};\n\nContainer$7.registerAtRule = dependant => {\n  AtRule$4 = dependant;\n};\n\nvar container$1 = Container$7;\nContainer$7.default = Container$7;\n\n/* c8 ignore start */\nContainer$7.rebuild = node => {\n  if (node.type === 'atrule') {\n    Object.setPrototypeOf(node, AtRule$4.prototype);\n  } else if (node.type === 'rule') {\n    Object.setPrototypeOf(node, Rule$4.prototype);\n  } else if (node.type === 'decl') {\n    Object.setPrototypeOf(node, Declaration$3.prototype);\n  } else if (node.type === 'comment') {\n    Object.setPrototypeOf(node, Comment$3.prototype);\n  }\n\n  node[my$1] = true;\n\n  if (node.nodes) {\n    node.nodes.forEach(child => {\n      Container$7.rebuild(child);\n    });\n  }\n};\n\nlet Container$6 = container$1;\n\nlet LazyResult$4, Processor$3;\n\nlet Document$3 = class Document extends Container$6 {\n  constructor(defaults) {\n    // type needs to be passed to super, otherwise child roots won't be normalized correctly\n    super({ type: 'document', ...defaults });\n\n    if (!this.nodes) {\n      this.nodes = [];\n    }\n  }\n\n  toResult(opts = {}) {\n    let lazy = new LazyResult$4(new Processor$3(), this, opts);\n\n    return lazy.stringify()\n  }\n};\n\nDocument$3.registerLazyResult = dependant => {\n  LazyResult$4 = dependant;\n};\n\nDocument$3.registerProcessor = dependant => {\n  Processor$3 = dependant;\n};\n\nvar document = Document$3;\nDocument$3.default = Document$3;\n\n/* eslint-disable no-console */\n\nlet printed = {};\n\nvar warnOnce$2 = function warnOnce(message) {\n  if (printed[message]) return\n  printed[message] = true;\n\n  if (typeof console !== 'undefined' && console.warn) {\n    console.warn(message);\n  }\n};\n\nlet Warning$2 = class Warning {\n  constructor(text, opts = {}) {\n    this.type = 'warning';\n    this.text = text;\n\n    if (opts.node && opts.node.source) {\n      let range = opts.node.rangeBy(opts);\n      this.line = range.start.line;\n      this.column = range.start.column;\n      this.endLine = range.end.line;\n      this.endColumn = range.end.column;\n    }\n\n    for (let opt in opts) this[opt] = opts[opt];\n  }\n\n  toString() {\n    if (this.node) {\n      return this.node.error(this.text, {\n        plugin: this.plugin,\n        index: this.index,\n        word: this.word\n      }).message\n    }\n\n    if (this.plugin) {\n      return this.plugin + ': ' + this.text\n    }\n\n    return this.text\n  }\n};\n\nvar warning = Warning$2;\nWarning$2.default = Warning$2;\n\nlet Warning$1 = warning;\n\nlet Result$3 = class Result {\n  constructor(processor, root, opts) {\n    this.processor = processor;\n    this.messages = [];\n    this.root = root;\n    this.opts = opts;\n    this.css = undefined;\n    this.map = undefined;\n  }\n\n  toString() {\n    return this.css\n  }\n\n  warn(text, opts = {}) {\n    if (!opts.plugin) {\n      if (this.lastPlugin && this.lastPlugin.postcssPlugin) {\n        opts.plugin = this.lastPlugin.postcssPlugin;\n      }\n    }\n\n    let warning = new Warning$1(text, opts);\n    this.messages.push(warning);\n\n    return warning\n  }\n\n  warnings() {\n    return this.messages.filter(i => i.type === 'warning')\n  }\n\n  get content() {\n    return this.css\n  }\n};\n\nvar result = Result$3;\nResult$3.default = Result$3;\n\nlet Container$5 = container$1;\n\nlet AtRule$3 = class AtRule extends Container$5 {\n  constructor(defaults) {\n    super(defaults);\n    this.type = 'atrule';\n  }\n\n  append(...children) {\n    if (!this.proxyOf.nodes) this.nodes = [];\n    return super.append(...children)\n  }\n\n  prepend(...children) {\n    if (!this.proxyOf.nodes) this.nodes = [];\n    return super.prepend(...children)\n  }\n};\n\nvar atRule = AtRule$3;\nAtRule$3.default = AtRule$3;\n\nContainer$5.registerAtRule(AtRule$3);\n\nlet Container$4 = container$1;\n\nlet LazyResult$3, Processor$2;\n\nlet Root$5 = class Root extends Container$4 {\n  constructor(defaults) {\n    super(defaults);\n    this.type = 'root';\n    if (!this.nodes) this.nodes = [];\n  }\n\n  removeChild(child, ignore) {\n    let index = this.index(child);\n\n    if (!ignore && index === 0 && this.nodes.length > 1) {\n      this.nodes[1].raws.before = this.nodes[index].raws.before;\n    }\n\n    return super.removeChild(child)\n  }\n\n  normalize(child, sample, type) {\n    let nodes = super.normalize(child);\n\n    if (sample) {\n      if (type === 'prepend') {\n        if (this.nodes.length > 1) {\n          sample.raws.before = this.nodes[1].raws.before;\n        } else {\n          delete sample.raws.before;\n        }\n      } else if (this.first !== sample) {\n        for (let node of nodes) {\n          node.raws.before = sample.raws.before;\n        }\n      }\n    }\n\n    return nodes\n  }\n\n  toResult(opts = {}) {\n    let lazy = new LazyResult$3(new Processor$2(), this, opts);\n    return lazy.stringify()\n  }\n};\n\nRoot$5.registerLazyResult = dependant => {\n  LazyResult$3 = dependant;\n};\n\nRoot$5.registerProcessor = dependant => {\n  Processor$2 = dependant;\n};\n\nvar root$2 = Root$5;\nRoot$5.default = Root$5;\n\nlet list$2 = {\n  split(string, separators, last) {\n    let array = [];\n    let current = '';\n    let split = false;\n\n    let func = 0;\n    let quote = false;\n    let escape = false;\n\n    for (let letter of string) {\n      if (escape) {\n        escape = false;\n      } else if (letter === '\\\\') {\n        escape = true;\n      } else if (quote) {\n        if (letter === quote) {\n          quote = false;\n        }\n      } else if (letter === '\"' || letter === \"'\") {\n        quote = letter;\n      } else if (letter === '(') {\n        func += 1;\n      } else if (letter === ')') {\n        if (func > 0) func -= 1;\n      } else if (func === 0) {\n        if (separators.includes(letter)) split = true;\n      }\n\n      if (split) {\n        if (current !== '') array.push(current.trim());\n        current = '';\n        split = false;\n      } else {\n        current += letter;\n      }\n    }\n\n    if (last || current !== '') array.push(current.trim());\n    return array\n  },\n\n  space(string) {\n    let spaces = [' ', '\\n', '\\t'];\n    return list$2.split(string, spaces)\n  },\n\n  comma(string) {\n    return list$2.split(string, [','], true)\n  }\n};\n\nvar list_1 = list$2;\nlist$2.default = list$2;\n\nlet Container$3 = container$1;\nlet list$1 = list_1;\n\nlet Rule$3 = class Rule extends Container$3 {\n  constructor(defaults) {\n    super(defaults);\n    this.type = 'rule';\n    if (!this.nodes) this.nodes = [];\n  }\n\n  get selectors() {\n    return list$1.comma(this.selector)\n  }\n\n  set selectors(values) {\n    let match = this.selector ? this.selector.match(/,\\s*/) : null;\n    let sep = match ? match[0] : ',' + this.raw('between', 'beforeOpen');\n    this.selector = values.join(sep);\n  }\n};\n\nvar rule = Rule$3;\nRule$3.default = Rule$3;\n\nContainer$3.registerRule(Rule$3);\n\nlet Declaration$2 = declaration;\nlet tokenizer = tokenize$1;\nlet Comment$2 = comment$3;\nlet AtRule$2 = atRule;\nlet Root$4 = root$2;\nlet Rule$2 = rule;\n\nlet Parser$1 = class Parser {\n  constructor(input) {\n    this.input = input;\n\n    this.root = new Root$4();\n    this.current = this.root;\n    this.spaces = '';\n    this.semicolon = false;\n    this.customProperty = false;\n\n    this.createTokenizer();\n    this.root.source = { input, start: { offset: 0, line: 1, column: 1 } };\n  }\n\n  createTokenizer() {\n    this.tokenizer = tokenizer(this.input);\n  }\n\n  parse() {\n    let token;\n    while (!this.tokenizer.endOfFile()) {\n      token = this.tokenizer.nextToken();\n\n      switch (token[0]) {\n        case 'space':\n          this.spaces += token[1];\n          break\n\n        case ';':\n          this.freeSemicolon(token);\n          break\n\n        case '}':\n          this.end(token);\n          break\n\n        case 'comment':\n          this.comment(token);\n          break\n\n        case 'at-word':\n          this.atrule(token);\n          break\n\n        case '{':\n          this.emptyRule(token);\n          break\n\n        default:\n          this.other(token);\n          break\n      }\n    }\n    this.endFile();\n  }\n\n  comment(token) {\n    let node = new Comment$2();\n    this.init(node, token[2]);\n    node.source.end = this.getPosition(token[3] || token[2]);\n\n    let text = token[1].slice(2, -2);\n    if (/^\\s*$/.test(text)) {\n      node.text = '';\n      node.raws.left = text;\n      node.raws.right = '';\n    } else {\n      let match = text.match(/^(\\s*)([^]*\\S)(\\s*)$/);\n      node.text = match[2];\n      node.raws.left = match[1];\n      node.raws.right = match[3];\n    }\n  }\n\n  emptyRule(token) {\n    let node = new Rule$2();\n    this.init(node, token[2]);\n    node.selector = '';\n    node.raws.between = '';\n    this.current = node;\n  }\n\n  other(start) {\n    let end = false;\n    let type = null;\n    let colon = false;\n    let bracket = null;\n    let brackets = [];\n    let customProperty = start[1].startsWith('--');\n\n    let tokens = [];\n    let token = start;\n    while (token) {\n      type = token[0];\n      tokens.push(token);\n\n      if (type === '(' || type === '[') {\n        if (!bracket) bracket = token;\n        brackets.push(type === '(' ? ')' : ']');\n      } else if (customProperty && colon && type === '{') {\n        if (!bracket) bracket = token;\n        brackets.push('}');\n      } else if (brackets.length === 0) {\n        if (type === ';') {\n          if (colon) {\n            this.decl(tokens, customProperty);\n            return\n          } else {\n            break\n          }\n        } else if (type === '{') {\n          this.rule(tokens);\n          return\n        } else if (type === '}') {\n          this.tokenizer.back(tokens.pop());\n          end = true;\n          break\n        } else if (type === ':') {\n          colon = true;\n        }\n      } else if (type === brackets[brackets.length - 1]) {\n        brackets.pop();\n        if (brackets.length === 0) bracket = null;\n      }\n\n      token = this.tokenizer.nextToken();\n    }\n\n    if (this.tokenizer.endOfFile()) end = true;\n    if (brackets.length > 0) this.unclosedBracket(bracket);\n\n    if (end && colon) {\n      while (tokens.length) {\n        token = tokens[tokens.length - 1][0];\n        if (token !== 'space' && token !== 'comment') break\n        this.tokenizer.back(tokens.pop());\n      }\n      this.decl(tokens, customProperty);\n    } else {\n      this.unknownWord(tokens);\n    }\n  }\n\n  rule(tokens) {\n    tokens.pop();\n\n    let node = new Rule$2();\n    this.init(node, tokens[0][2]);\n\n    node.raws.between = this.spacesAndCommentsFromEnd(tokens);\n    this.raw(node, 'selector', tokens);\n    this.current = node;\n  }\n\n  decl(tokens, customProperty) {\n    let node = new Declaration$2();\n    this.init(node, tokens[0][2]);\n\n    let last = tokens[tokens.length - 1];\n    if (last[0] === ';') {\n      this.semicolon = true;\n      tokens.pop();\n    }\n    node.source.end = this.getPosition(last[3] || last[2]);\n\n    while (tokens[0][0] !== 'word') {\n      if (tokens.length === 1) this.unknownWord(tokens);\n      node.raws.before += tokens.shift()[1];\n    }\n    node.source.start = this.getPosition(tokens[0][2]);\n\n    node.prop = '';\n    while (tokens.length) {\n      let type = tokens[0][0];\n      if (type === ':' || type === 'space' || type === 'comment') {\n        break\n      }\n      node.prop += tokens.shift()[1];\n    }\n\n    node.raws.between = '';\n\n    let token;\n    while (tokens.length) {\n      token = tokens.shift();\n\n      if (token[0] === ':') {\n        node.raws.between += token[1];\n        break\n      } else {\n        if (token[0] === 'word' && /\\w/.test(token[1])) {\n          this.unknownWord([token]);\n        }\n        node.raws.between += token[1];\n      }\n    }\n\n    if (node.prop[0] === '_' || node.prop[0] === '*') {\n      node.raws.before += node.prop[0];\n      node.prop = node.prop.slice(1);\n    }\n    let firstSpaces = this.spacesAndCommentsFromStart(tokens);\n    this.precheckMissedSemicolon(tokens);\n\n    for (let i = tokens.length - 1; i >= 0; i--) {\n      token = tokens[i];\n      if (token[1].toLowerCase() === '!important') {\n        node.important = true;\n        let string = this.stringFrom(tokens, i);\n        string = this.spacesFromEnd(tokens) + string;\n        if (string !== ' !important') node.raws.important = string;\n        break\n      } else if (token[1].toLowerCase() === 'important') {\n        let cache = tokens.slice(0);\n        let str = '';\n        for (let j = i; j > 0; j--) {\n          let type = cache[j][0];\n          if (str.trim().indexOf('!') === 0 && type !== 'space') {\n            break\n          }\n          str = cache.pop()[1] + str;\n        }\n        if (str.trim().indexOf('!') === 0) {\n          node.important = true;\n          node.raws.important = str;\n          tokens = cache;\n        }\n      }\n\n      if (token[0] !== 'space' && token[0] !== 'comment') {\n        break\n      }\n    }\n\n    let hasWord = tokens.some(i => i[0] !== 'space' && i[0] !== 'comment');\n    this.raw(node, 'value', tokens);\n    if (hasWord) {\n      node.raws.between += firstSpaces;\n    } else {\n      node.value = firstSpaces + node.value;\n    }\n\n    if (node.value.includes(':') && !customProperty) {\n      this.checkMissedSemicolon(tokens);\n    }\n  }\n\n  atrule(token) {\n    let node = new AtRule$2();\n    node.name = token[1].slice(1);\n    if (node.name === '') {\n      this.unnamedAtrule(node, token);\n    }\n    this.init(node, token[2]);\n\n    let type;\n    let prev;\n    let shift;\n    let last = false;\n    let open = false;\n    let params = [];\n    let brackets = [];\n\n    while (!this.tokenizer.endOfFile()) {\n      token = this.tokenizer.nextToken();\n      type = token[0];\n\n      if (type === '(' || type === '[') {\n        brackets.push(type === '(' ? ')' : ']');\n      } else if (type === '{' && brackets.length > 0) {\n        brackets.push('}');\n      } else if (type === brackets[brackets.length - 1]) {\n        brackets.pop();\n      }\n\n      if (brackets.length === 0) {\n        if (type === ';') {\n          node.source.end = this.getPosition(token[2]);\n          this.semicolon = true;\n          break\n        } else if (type === '{') {\n          open = true;\n          break\n        } else if (type === '}') {\n          if (params.length > 0) {\n            shift = params.length - 1;\n            prev = params[shift];\n            while (prev && prev[0] === 'space') {\n              prev = params[--shift];\n            }\n            if (prev) {\n              node.source.end = this.getPosition(prev[3] || prev[2]);\n            }\n          }\n          this.end(token);\n          break\n        } else {\n          params.push(token);\n        }\n      } else {\n        params.push(token);\n      }\n\n      if (this.tokenizer.endOfFile()) {\n        last = true;\n        break\n      }\n    }\n\n    node.raws.between = this.spacesAndCommentsFromEnd(params);\n    if (params.length) {\n      node.raws.afterName = this.spacesAndCommentsFromStart(params);\n      this.raw(node, 'params', params);\n      if (last) {\n        token = params[params.length - 1];\n        node.source.end = this.getPosition(token[3] || token[2]);\n        this.spaces = node.raws.between;\n        node.raws.between = '';\n      }\n    } else {\n      node.raws.afterName = '';\n      node.params = '';\n    }\n\n    if (open) {\n      node.nodes = [];\n      this.current = node;\n    }\n  }\n\n  end(token) {\n    if (this.current.nodes && this.current.nodes.length) {\n      this.current.raws.semicolon = this.semicolon;\n    }\n    this.semicolon = false;\n\n    this.current.raws.after = (this.current.raws.after || '') + this.spaces;\n    this.spaces = '';\n\n    if (this.current.parent) {\n      this.current.source.end = this.getPosition(token[2]);\n      this.current = this.current.parent;\n    } else {\n      this.unexpectedClose(token);\n    }\n  }\n\n  endFile() {\n    if (this.current.parent) this.unclosedBlock();\n    if (this.current.nodes && this.current.nodes.length) {\n      this.current.raws.semicolon = this.semicolon;\n    }\n    this.current.raws.after = (this.current.raws.after || '') + this.spaces;\n  }\n\n  freeSemicolon(token) {\n    this.spaces += token[1];\n    if (this.current.nodes) {\n      let prev = this.current.nodes[this.current.nodes.length - 1];\n      if (prev && prev.type === 'rule' && !prev.raws.ownSemicolon) {\n        prev.raws.ownSemicolon = this.spaces;\n        this.spaces = '';\n      }\n    }\n  }\n\n  // Helpers\n\n  getPosition(offset) {\n    let pos = this.input.fromOffset(offset);\n    return {\n      offset,\n      line: pos.line,\n      column: pos.col\n    }\n  }\n\n  init(node, offset) {\n    this.current.push(node);\n    node.source = {\n      start: this.getPosition(offset),\n      input: this.input\n    };\n    node.raws.before = this.spaces;\n    this.spaces = '';\n    if (node.type !== 'comment') this.semicolon = false;\n  }\n\n  raw(node, prop, tokens) {\n    let token, type;\n    let length = tokens.length;\n    let value = '';\n    let clean = true;\n    let next, prev;\n    let pattern = /^([#.|])?(\\w)+/i;\n\n    for (let i = 0; i < length; i += 1) {\n      token = tokens[i];\n      type = token[0];\n\n      if (type === 'comment' && node.type === 'rule') {\n        prev = tokens[i - 1];\n        next = tokens[i + 1];\n\n        if (\n          prev[0] !== 'space' &&\n          next[0] !== 'space' &&\n          pattern.test(prev[1]) &&\n          pattern.test(next[1])\n        ) {\n          value += token[1];\n        } else {\n          clean = false;\n        }\n\n        continue\n      }\n\n      if (type === 'comment' || (type === 'space' && i === length - 1)) {\n        clean = false;\n      } else {\n        value += token[1];\n      }\n    }\n    if (!clean) {\n      let raw = tokens.reduce((all, i) => all + i[1], '');\n      node.raws[prop] = { value, raw };\n    }\n    node[prop] = value;\n  }\n\n  spacesAndCommentsFromEnd(tokens) {\n    let lastTokenType;\n    let spaces = '';\n    while (tokens.length) {\n      lastTokenType = tokens[tokens.length - 1][0];\n      if (lastTokenType !== 'space' && lastTokenType !== 'comment') break\n      spaces = tokens.pop()[1] + spaces;\n    }\n    return spaces\n  }\n\n  spacesAndCommentsFromStart(tokens) {\n    let next;\n    let spaces = '';\n    while (tokens.length) {\n      next = tokens[0][0];\n      if (next !== 'space' && next !== 'comment') break\n      spaces += tokens.shift()[1];\n    }\n    return spaces\n  }\n\n  spacesFromEnd(tokens) {\n    let lastTokenType;\n    let spaces = '';\n    while (tokens.length) {\n      lastTokenType = tokens[tokens.length - 1][0];\n      if (lastTokenType !== 'space') break\n      spaces = tokens.pop()[1] + spaces;\n    }\n    return spaces\n  }\n\n  stringFrom(tokens, from) {\n    let result = '';\n    for (let i = from; i < tokens.length; i++) {\n      result += tokens[i][1];\n    }\n    tokens.splice(from, tokens.length - from);\n    return result\n  }\n\n  colon(tokens) {\n    let brackets = 0;\n    let token, type, prev;\n    for (let [i, element] of tokens.entries()) {\n      token = element;\n      type = token[0];\n\n      if (type === '(') {\n        brackets += 1;\n      }\n      if (type === ')') {\n        brackets -= 1;\n      }\n      if (brackets === 0 && type === ':') {\n        if (!prev) {\n          this.doubleColon(token);\n        } else if (prev[0] === 'word' && prev[1] === 'progid') {\n          continue\n        } else {\n          return i\n        }\n      }\n\n      prev = token;\n    }\n    return false\n  }\n\n  // Errors\n\n  unclosedBracket(bracket) {\n    throw this.input.error(\n      'Unclosed bracket',\n      { offset: bracket[2] },\n      { offset: bracket[2] + 1 }\n    )\n  }\n\n  unknownWord(tokens) {\n    throw this.input.error(\n      'Unknown word',\n      { offset: tokens[0][2] },\n      { offset: tokens[0][2] + tokens[0][1].length }\n    )\n  }\n\n  unexpectedClose(token) {\n    throw this.input.error(\n      'Unexpected }',\n      { offset: token[2] },\n      { offset: token[2] + 1 }\n    )\n  }\n\n  unclosedBlock() {\n    let pos = this.current.source.start;\n    throw this.input.error('Unclosed block', pos.line, pos.column)\n  }\n\n  doubleColon(token) {\n    throw this.input.error(\n      'Double colon',\n      { offset: token[2] },\n      { offset: token[2] + token[1].length }\n    )\n  }\n\n  unnamedAtrule(node, token) {\n    throw this.input.error(\n      'At-rule without name',\n      { offset: token[2] },\n      { offset: token[2] + token[1].length }\n    )\n  }\n\n  precheckMissedSemicolon(/* tokens */) {\n    // Hook for Safe Parser\n  }\n\n  checkMissedSemicolon(tokens) {\n    let colon = this.colon(tokens);\n    if (colon === false) return\n\n    let founded = 0;\n    let token;\n    for (let j = colon - 1; j >= 0; j--) {\n      token = tokens[j];\n      if (token[0] !== 'space') {\n        founded += 1;\n        if (founded === 2) break\n      }\n    }\n    // If the token is a word, e.g. `!important`, `red` or any other valid property's value.\n    // Then we need to return the colon after that word token. [3] is the \"end\" colon of that word.\n    // And because we need it after that one we do +1 to get the next one.\n    throw this.input.error(\n      'Missed semicolon',\n      token[0] === 'word' ? token[3] + 1 : token[2]\n    )\n  }\n};\n\nvar parser$1 = Parser$1;\n\nlet Container$2 = container$1;\nlet Parser = parser$1;\nlet Input$2 = input;\n\nfunction parse$3(css, opts) {\n  let input = new Input$2(css, opts);\n  let parser = new Parser(input);\n  try {\n    parser.parse();\n  } catch (e) {\n    if (browser$1.env.NODE_ENV !== 'production') {\n      if (e.name === 'CssSyntaxError' && opts && opts.from) {\n        if (/\\.scss$/i.test(opts.from)) {\n          e.message +=\n            '\\nYou tried to parse SCSS with ' +\n            'the standard CSS parser; ' +\n            'try again with the postcss-scss parser';\n        } else if (/\\.sass/i.test(opts.from)) {\n          e.message +=\n            '\\nYou tried to parse Sass with ' +\n            'the standard CSS parser; ' +\n            'try again with the postcss-sass parser';\n        } else if (/\\.less$/i.test(opts.from)) {\n          e.message +=\n            '\\nYou tried to parse Less with ' +\n            'the standard CSS parser; ' +\n            'try again with the postcss-less parser';\n        }\n      }\n    }\n    throw e\n  }\n\n  return parser.root\n}\n\nvar parse_1 = parse$3;\nparse$3.default = parse$3;\n\nContainer$2.registerParse(parse$3);\n\nlet { isClean, my } = symbols;\nlet MapGenerator$1 = mapGenerator;\nlet stringify$2 = stringify_1;\nlet Container$1 = container$1;\nlet Document$2 = document;\nlet warnOnce$1 = warnOnce$2;\nlet Result$2 = result;\nlet parse$2 = parse_1;\nlet Root$3 = root$2;\n\nconst TYPE_TO_CLASS_NAME = {\n  document: 'Document',\n  root: 'Root',\n  atrule: 'AtRule',\n  rule: 'Rule',\n  decl: 'Declaration',\n  comment: 'Comment'\n};\n\nconst PLUGIN_PROPS = {\n  postcssPlugin: true,\n  prepare: true,\n  Once: true,\n  Document: true,\n  Root: true,\n  Declaration: true,\n  Rule: true,\n  AtRule: true,\n  Comment: true,\n  DeclarationExit: true,\n  RuleExit: true,\n  AtRuleExit: true,\n  CommentExit: true,\n  RootExit: true,\n  DocumentExit: true,\n  OnceExit: true\n};\n\nconst NOT_VISITORS = {\n  postcssPlugin: true,\n  prepare: true,\n  Once: true\n};\n\nconst CHILDREN = 0;\n\nfunction isPromise(obj) {\n  return typeof obj === 'object' && typeof obj.then === 'function'\n}\n\nfunction getEvents(node) {\n  let key = false;\n  let type = TYPE_TO_CLASS_NAME[node.type];\n  if (node.type === 'decl') {\n    key = node.prop.toLowerCase();\n  } else if (node.type === 'atrule') {\n    key = node.name.toLowerCase();\n  }\n\n  if (key && node.append) {\n    return [\n      type,\n      type + '-' + key,\n      CHILDREN,\n      type + 'Exit',\n      type + 'Exit-' + key\n    ]\n  } else if (key) {\n    return [type, type + '-' + key, type + 'Exit', type + 'Exit-' + key]\n  } else if (node.append) {\n    return [type, CHILDREN, type + 'Exit']\n  } else {\n    return [type, type + 'Exit']\n  }\n}\n\nfunction toStack(node) {\n  let events;\n  if (node.type === 'document') {\n    events = ['Document', CHILDREN, 'DocumentExit'];\n  } else if (node.type === 'root') {\n    events = ['Root', CHILDREN, 'RootExit'];\n  } else {\n    events = getEvents(node);\n  }\n\n  return {\n    node,\n    events,\n    eventIndex: 0,\n    visitors: [],\n    visitorIndex: 0,\n    iterator: 0\n  }\n}\n\nfunction cleanMarks(node) {\n  node[isClean] = false;\n  if (node.nodes) node.nodes.forEach(i => cleanMarks(i));\n  return node\n}\n\nlet postcss$2 = {};\n\nlet LazyResult$2 = class LazyResult {\n  constructor(processor, css, opts) {\n    this.stringified = false;\n    this.processed = false;\n\n    let root;\n    if (\n      typeof css === 'object' &&\n      css !== null &&\n      (css.type === 'root' || css.type === 'document')\n    ) {\n      root = cleanMarks(css);\n    } else if (css instanceof LazyResult$2 || css instanceof Result$2) {\n      root = cleanMarks(css.root);\n      if (css.map) {\n        if (typeof opts.map === 'undefined') opts.map = {};\n        if (!opts.map.inline) opts.map.inline = false;\n        opts.map.prev = css.map;\n      }\n    } else {\n      let parser = parse$2;\n      if (opts.syntax) parser = opts.syntax.parse;\n      if (opts.parser) parser = opts.parser;\n      if (parser.parse) parser = parser.parse;\n\n      try {\n        root = parser(css, opts);\n      } catch (error) {\n        this.processed = true;\n        this.error = error;\n      }\n\n      if (root && !root[my]) {\n        /* c8 ignore next 2 */\n        Container$1.rebuild(root);\n      }\n    }\n\n    this.result = new Result$2(processor, root, opts);\n    this.helpers = { ...postcss$2, result: this.result, postcss: postcss$2 };\n    this.plugins = this.processor.plugins.map(plugin => {\n      if (typeof plugin === 'object' && plugin.prepare) {\n        return { ...plugin, ...plugin.prepare(this.result) }\n      } else {\n        return plugin\n      }\n    });\n  }\n\n  get [Symbol.toStringTag]() {\n    return 'LazyResult'\n  }\n\n  get processor() {\n    return this.result.processor\n  }\n\n  get opts() {\n    return this.result.opts\n  }\n\n  get css() {\n    return this.stringify().css\n  }\n\n  get content() {\n    return this.stringify().content\n  }\n\n  get map() {\n    return this.stringify().map\n  }\n\n  get root() {\n    return this.sync().root\n  }\n\n  get messages() {\n    return this.sync().messages\n  }\n\n  warnings() {\n    return this.sync().warnings()\n  }\n\n  toString() {\n    return this.css\n  }\n\n  then(onFulfilled, onRejected) {\n    if (browser$1.env.NODE_ENV !== 'production') {\n      if (!('from' in this.opts)) {\n        warnOnce$1(\n          'Without `from` option PostCSS could generate wrong source map ' +\n            'and will not find Browserslist config. Set it to CSS file path ' +\n            'or to `undefined` to prevent this warning.'\n        );\n      }\n    }\n    return this.async().then(onFulfilled, onRejected)\n  }\n\n  catch(onRejected) {\n    return this.async().catch(onRejected)\n  }\n\n  finally(onFinally) {\n    return this.async().then(onFinally, onFinally)\n  }\n\n  async() {\n    if (this.error) return Promise.reject(this.error)\n    if (this.processed) return Promise.resolve(this.result)\n    if (!this.processing) {\n      this.processing = this.runAsync();\n    }\n    return this.processing\n  }\n\n  sync() {\n    if (this.error) throw this.error\n    if (this.processed) return this.result\n    this.processed = true;\n\n    if (this.processing) {\n      throw this.getAsyncError()\n    }\n\n    for (let plugin of this.plugins) {\n      let promise = this.runOnRoot(plugin);\n      if (isPromise(promise)) {\n        throw this.getAsyncError()\n      }\n    }\n\n    this.prepareVisitors();\n    if (this.hasListener) {\n      let root = this.result.root;\n      while (!root[isClean]) {\n        root[isClean] = true;\n        this.walkSync(root);\n      }\n      if (this.listeners.OnceExit) {\n        if (root.type === 'document') {\n          for (let subRoot of root.nodes) {\n            this.visitSync(this.listeners.OnceExit, subRoot);\n          }\n        } else {\n          this.visitSync(this.listeners.OnceExit, root);\n        }\n      }\n    }\n\n    return this.result\n  }\n\n  stringify() {\n    if (this.error) throw this.error\n    if (this.stringified) return this.result\n    this.stringified = true;\n\n    this.sync();\n\n    let opts = this.result.opts;\n    let str = stringify$2;\n    if (opts.syntax) str = opts.syntax.stringify;\n    if (opts.stringifier) str = opts.stringifier;\n    if (str.stringify) str = str.stringify;\n\n    let map = new MapGenerator$1(str, this.result.root, this.result.opts);\n    let data = map.generate();\n    this.result.css = data[0];\n    this.result.map = data[1];\n\n    return this.result\n  }\n\n  walkSync(node) {\n    node[isClean] = true;\n    let events = getEvents(node);\n    for (let event of events) {\n      if (event === CHILDREN) {\n        if (node.nodes) {\n          node.each(child => {\n            if (!child[isClean]) this.walkSync(child);\n          });\n        }\n      } else {\n        let visitors = this.listeners[event];\n        if (visitors) {\n          if (this.visitSync(visitors, node.toProxy())) return\n        }\n      }\n    }\n  }\n\n  visitSync(visitors, node) {\n    for (let [plugin, visitor] of visitors) {\n      this.result.lastPlugin = plugin;\n      let promise;\n      try {\n        promise = visitor(node, this.helpers);\n      } catch (e) {\n        throw this.handleError(e, node.proxyOf)\n      }\n      if (node.type !== 'root' && node.type !== 'document' && !node.parent) {\n        return true\n      }\n      if (isPromise(promise)) {\n        throw this.getAsyncError()\n      }\n    }\n  }\n\n  runOnRoot(plugin) {\n    this.result.lastPlugin = plugin;\n    try {\n      if (typeof plugin === 'object' && plugin.Once) {\n        if (this.result.root.type === 'document') {\n          let roots = this.result.root.nodes.map(root =>\n            plugin.Once(root, this.helpers)\n          );\n\n          if (isPromise(roots[0])) {\n            return Promise.all(roots)\n          }\n\n          return roots\n        }\n\n        return plugin.Once(this.result.root, this.helpers)\n      } else if (typeof plugin === 'function') {\n        return plugin(this.result.root, this.result)\n      }\n    } catch (error) {\n      throw this.handleError(error)\n    }\n  }\n\n  getAsyncError() {\n    throw new Error('Use process(css).then(cb) to work with async plugins')\n  }\n\n  handleError(error, node) {\n    let plugin = this.result.lastPlugin;\n    try {\n      if (node) node.addToError(error);\n      this.error = error;\n      if (error.name === 'CssSyntaxError' && !error.plugin) {\n        error.plugin = plugin.postcssPlugin;\n        error.setMessage();\n      } else if (plugin.postcssVersion) {\n        if (browser$1.env.NODE_ENV !== 'production') {\n          let pluginName = plugin.postcssPlugin;\n          let pluginVer = plugin.postcssVersion;\n          let runtimeVer = this.result.processor.version;\n          let a = pluginVer.split('.');\n          let b = runtimeVer.split('.');\n\n          if (a[0] !== b[0] || parseInt(a[1]) > parseInt(b[1])) {\n            // eslint-disable-next-line no-console\n            console.error(\n              'Unknown error from PostCSS plugin. Your current PostCSS ' +\n                'version is ' +\n                runtimeVer +\n                ', but ' +\n                pluginName +\n                ' uses ' +\n                pluginVer +\n                '. Perhaps this is the source of the error below.'\n            );\n          }\n        }\n      }\n    } catch (err) {\n      /* c8 ignore next 3 */\n      // eslint-disable-next-line no-console\n      if (console && console.error) console.error(err);\n    }\n    return error\n  }\n\n  async runAsync() {\n    this.plugin = 0;\n    for (let i = 0; i < this.plugins.length; i++) {\n      let plugin = this.plugins[i];\n      let promise = this.runOnRoot(plugin);\n      if (isPromise(promise)) {\n        try {\n          await promise;\n        } catch (error) {\n          throw this.handleError(error)\n        }\n      }\n    }\n\n    this.prepareVisitors();\n    if (this.hasListener) {\n      let root = this.result.root;\n      while (!root[isClean]) {\n        root[isClean] = true;\n        let stack = [toStack(root)];\n        while (stack.length > 0) {\n          let promise = this.visitTick(stack);\n          if (isPromise(promise)) {\n            try {\n              await promise;\n            } catch (e) {\n              let node = stack[stack.length - 1].node;\n              throw this.handleError(e, node)\n            }\n          }\n        }\n      }\n\n      if (this.listeners.OnceExit) {\n        for (let [plugin, visitor] of this.listeners.OnceExit) {\n          this.result.lastPlugin = plugin;\n          try {\n            if (root.type === 'document') {\n              let roots = root.nodes.map(subRoot =>\n                visitor(subRoot, this.helpers)\n              );\n\n              await Promise.all(roots);\n            } else {\n              await visitor(root, this.helpers);\n            }\n          } catch (e) {\n            throw this.handleError(e)\n          }\n        }\n      }\n    }\n\n    this.processed = true;\n    return this.stringify()\n  }\n\n  prepareVisitors() {\n    this.listeners = {};\n    let add = (plugin, type, cb) => {\n      if (!this.listeners[type]) this.listeners[type] = [];\n      this.listeners[type].push([plugin, cb]);\n    };\n    for (let plugin of this.plugins) {\n      if (typeof plugin === 'object') {\n        for (let event in plugin) {\n          if (!PLUGIN_PROPS[event] && /^[A-Z]/.test(event)) {\n            throw new Error(\n              `Unknown event ${event} in ${plugin.postcssPlugin}. ` +\n                `Try to update PostCSS (${this.processor.version} now).`\n            )\n          }\n          if (!NOT_VISITORS[event]) {\n            if (typeof plugin[event] === 'object') {\n              for (let filter in plugin[event]) {\n                if (filter === '*') {\n                  add(plugin, event, plugin[event][filter]);\n                } else {\n                  add(\n                    plugin,\n                    event + '-' + filter.toLowerCase(),\n                    plugin[event][filter]\n                  );\n                }\n              }\n            } else if (typeof plugin[event] === 'function') {\n              add(plugin, event, plugin[event]);\n            }\n          }\n        }\n      }\n    }\n    this.hasListener = Object.keys(this.listeners).length > 0;\n  }\n\n  visitTick(stack) {\n    let visit = stack[stack.length - 1];\n    let { node, visitors } = visit;\n\n    if (node.type !== 'root' && node.type !== 'document' && !node.parent) {\n      stack.pop();\n      return\n    }\n\n    if (visitors.length > 0 && visit.visitorIndex < visitors.length) {\n      let [plugin, visitor] = visitors[visit.visitorIndex];\n      visit.visitorIndex += 1;\n      if (visit.visitorIndex === visitors.length) {\n        visit.visitors = [];\n        visit.visitorIndex = 0;\n      }\n      this.result.lastPlugin = plugin;\n      try {\n        return visitor(node.toProxy(), this.helpers)\n      } catch (e) {\n        throw this.handleError(e, node)\n      }\n    }\n\n    if (visit.iterator !== 0) {\n      let iterator = visit.iterator;\n      let child;\n      while ((child = node.nodes[node.indexes[iterator]])) {\n        node.indexes[iterator] += 1;\n        if (!child[isClean]) {\n          child[isClean] = true;\n          stack.push(toStack(child));\n          return\n        }\n      }\n      visit.iterator = 0;\n      delete node.indexes[iterator];\n    }\n\n    let events = visit.events;\n    while (visit.eventIndex < events.length) {\n      let event = events[visit.eventIndex];\n      visit.eventIndex += 1;\n      if (event === CHILDREN) {\n        if (node.nodes && node.nodes.length) {\n          node[isClean] = true;\n          visit.iterator = node.getIterator();\n        }\n        return\n      } else if (this.listeners[event]) {\n        visit.visitors = this.listeners[event];\n        return\n      }\n    }\n    stack.pop();\n  }\n};\n\nLazyResult$2.registerPostcss = dependant => {\n  postcss$2 = dependant;\n};\n\nvar lazyResult = LazyResult$2;\nLazyResult$2.default = LazyResult$2;\n\nRoot$3.registerLazyResult(LazyResult$2);\nDocument$2.registerLazyResult(LazyResult$2);\n\nlet MapGenerator = mapGenerator;\nlet stringify$1 = stringify_1;\nlet warnOnce = warnOnce$2;\nlet parse$1 = parse_1;\nconst Result$1 = result;\n\nlet NoWorkResult$1 = class NoWorkResult {\n  constructor(processor, css, opts) {\n    css = css.toString();\n    this.stringified = false;\n\n    this._processor = processor;\n    this._css = css;\n    this._opts = opts;\n    this._map = undefined;\n    let root;\n\n    let str = stringify$1;\n    this.result = new Result$1(this._processor, root, this._opts);\n    this.result.css = css;\n\n    let self = this;\n    Object.defineProperty(this.result, 'root', {\n      get() {\n        return self.root\n      }\n    });\n\n    let map = new MapGenerator(str, root, this._opts, css);\n    if (map.isMap()) {\n      let [generatedCSS, generatedMap] = map.generate();\n      if (generatedCSS) {\n        this.result.css = generatedCSS;\n      }\n      if (generatedMap) {\n        this.result.map = generatedMap;\n      }\n    }\n  }\n\n  get [Symbol.toStringTag]() {\n    return 'NoWorkResult'\n  }\n\n  get processor() {\n    return this.result.processor\n  }\n\n  get opts() {\n    return this.result.opts\n  }\n\n  get css() {\n    return this.result.css\n  }\n\n  get content() {\n    return this.result.css\n  }\n\n  get map() {\n    return this.result.map\n  }\n\n  get root() {\n    if (this._root) {\n      return this._root\n    }\n\n    let root;\n    let parser = parse$1;\n\n    try {\n      root = parser(this._css, this._opts);\n    } catch (error) {\n      this.error = error;\n    }\n\n    this._root = root;\n\n    return root\n  }\n\n  get messages() {\n    return []\n  }\n\n  warnings() {\n    return []\n  }\n\n  toString() {\n    return this._css\n  }\n\n  then(onFulfilled, onRejected) {\n    if (browser$1.env.NODE_ENV !== 'production') {\n      if (!('from' in this._opts)) {\n        warnOnce(\n          'Without `from` option PostCSS could generate wrong source map ' +\n            'and will not find Browserslist config. Set it to CSS file path ' +\n            'or to `undefined` to prevent this warning.'\n        );\n      }\n    }\n\n    return this.async().then(onFulfilled, onRejected)\n  }\n\n  catch(onRejected) {\n    return this.async().catch(onRejected)\n  }\n\n  finally(onFinally) {\n    return this.async().then(onFinally, onFinally)\n  }\n\n  async() {\n    if (this.error) return Promise.reject(this.error)\n    return Promise.resolve(this.result)\n  }\n\n  sync() {\n    if (this.error) throw this.error\n    return this.result\n  }\n};\n\nvar noWorkResult = NoWorkResult$1;\nNoWorkResult$1.default = NoWorkResult$1;\n\nlet NoWorkResult = noWorkResult;\nlet LazyResult$1 = lazyResult;\nlet Document$1 = document;\nlet Root$2 = root$2;\n\nlet Processor$1 = class Processor {\n  constructor(plugins = []) {\n    this.version = '8.4.4';\n    this.plugins = this.normalize(plugins);\n  }\n\n  use(plugin) {\n    this.plugins = this.plugins.concat(this.normalize([plugin]));\n    return this\n  }\n\n  process(css, opts = {}) {\n    if (\n      this.plugins.length === 0 &&\n      typeof opts.parser === 'undefined' &&\n      typeof opts.stringifier === 'undefined' &&\n      typeof opts.syntax === 'undefined'\n    ) {\n      return new NoWorkResult(this, css, opts)\n    } else {\n      return new LazyResult$1(this, css, opts)\n    }\n  }\n\n  normalize(plugins) {\n    let normalized = [];\n    for (let i of plugins) {\n      if (i.postcss === true) {\n        i = i();\n      } else if (i.postcss) {\n        i = i.postcss;\n      }\n\n      if (typeof i === 'object' && Array.isArray(i.plugins)) {\n        normalized = normalized.concat(i.plugins);\n      } else if (typeof i === 'object' && i.postcssPlugin) {\n        normalized.push(i);\n      } else if (typeof i === 'function') {\n        normalized.push(i);\n      } else if (typeof i === 'object' && (i.parse || i.stringify)) {\n        if (browser$1.env.NODE_ENV !== 'production') {\n          throw new Error(\n            'PostCSS syntaxes cannot be used as plugins. Instead, please use ' +\n              'one of the syntax/parser/stringifier options as outlined ' +\n              'in your PostCSS runner documentation.'\n          )\n        }\n      } else {\n        throw new Error(i + ' is not a PostCSS plugin')\n      }\n    }\n    return normalized\n  }\n};\n\nvar processor$1 = Processor$1;\nProcessor$1.default = Processor$1;\n\nRoot$2.registerProcessor(Processor$1);\nDocument$1.registerProcessor(Processor$1);\n\nlet Declaration$1 = declaration;\nlet PreviousMap = previousMap;\nlet Comment$1 = comment$3;\nlet AtRule$1 = atRule;\nlet Input$1 = input;\nlet Root$1 = root$2;\nlet Rule$1 = rule;\n\nfunction fromJSON$1(json, inputs) {\n  if (Array.isArray(json)) return json.map(n => fromJSON$1(n))\n\n  let { inputs: ownInputs, ...defaults } = json;\n  if (ownInputs) {\n    inputs = [];\n    for (let input of ownInputs) {\n      let inputHydrated = { ...input, __proto__: Input$1.prototype };\n      if (inputHydrated.map) {\n        inputHydrated.map = {\n          ...inputHydrated.map,\n          __proto__: PreviousMap.prototype\n        };\n      }\n      inputs.push(inputHydrated);\n    }\n  }\n  if (defaults.nodes) {\n    defaults.nodes = json.nodes.map(n => fromJSON$1(n, inputs));\n  }\n  if (defaults.source) {\n    let { inputId, ...source } = defaults.source;\n    defaults.source = source;\n    if (inputId != null) {\n      defaults.source.input = inputs[inputId];\n    }\n  }\n  if (defaults.type === 'root') {\n    return new Root$1(defaults)\n  } else if (defaults.type === 'decl') {\n    return new Declaration$1(defaults)\n  } else if (defaults.type === 'rule') {\n    return new Rule$1(defaults)\n  } else if (defaults.type === 'comment') {\n    return new Comment$1(defaults)\n  } else if (defaults.type === 'atrule') {\n    return new AtRule$1(defaults)\n  } else {\n    throw new Error('Unknown node type: ' + json.type)\n  }\n}\n\nvar fromJSON_1 = fromJSON$1;\nfromJSON$1.default = fromJSON$1;\n\nlet CssSyntaxError = cssSyntaxError;\nlet Declaration = declaration;\nlet LazyResult = lazyResult;\nlet Container = container$1;\nlet Processor = processor$1;\nlet stringify = stringify_1;\nlet fromJSON = fromJSON_1;\nlet Document = document;\nlet Warning = warning;\nlet Comment = comment$3;\nlet AtRule = atRule;\nlet Result = result;\nlet Input = input;\nlet parse = parse_1;\nlet list = list_1;\nlet Rule = rule;\nlet Root = root$2;\nlet Node = node$2;\n\nfunction postcss(...plugins) {\n  if (plugins.length === 1 && Array.isArray(plugins[0])) {\n    plugins = plugins[0];\n  }\n  return new Processor(plugins)\n}\n\npostcss.plugin = function plugin(name, initializer) {\n  // eslint-disable-next-line no-console\n  if (console && console.warn) {\n    // eslint-disable-next-line no-console\n    console.warn(\n      name +\n        ': postcss.plugin was deprecated. Migration guide:\\n' +\n        'https://evilmartians.com/chronicles/postcss-8-plugin-migration'\n    );\n    if (browser$1.env.LANG && browser$1.env.LANG.startsWith('cn')) {\n      /* c8 ignore next 7 */\n      // eslint-disable-next-line no-console\n      console.warn(\n        name +\n          ': 里面 postcss.plugin 被弃用. 迁移指南:\\n' +\n          'https://www.w3ctech.com/topic/2226'\n      );\n    }\n  }\n  function creator(...args) {\n    let transformer = initializer(...args);\n    transformer.postcssPlugin = name;\n    transformer.postcssVersion = new Processor().version;\n    return transformer\n  }\n\n  let cache;\n  Object.defineProperty(creator, 'postcss', {\n    get() {\n      if (!cache) cache = creator();\n      return cache\n    }\n  });\n\n  creator.process = function (css, processOpts, pluginOpts) {\n    return postcss([creator(pluginOpts)]).process(css, processOpts)\n  };\n\n  return creator\n};\n\npostcss.stringify = stringify;\npostcss.parse = parse;\npostcss.fromJSON = fromJSON;\npostcss.list = list;\n\npostcss.comment = defaults => new Comment(defaults);\npostcss.atRule = defaults => new AtRule(defaults);\npostcss.decl = defaults => new Declaration(defaults);\npostcss.rule = defaults => new Rule(defaults);\npostcss.root = defaults => new Root(defaults);\npostcss.document = defaults => new Document(defaults);\n\npostcss.CssSyntaxError = CssSyntaxError;\npostcss.Declaration = Declaration;\npostcss.Container = Container;\npostcss.Processor = Processor;\npostcss.Document = Document;\npostcss.Comment = Comment;\npostcss.Warning = Warning;\npostcss.AtRule = AtRule;\npostcss.Result = Result;\npostcss.Input = Input;\npostcss.Rule = Rule;\npostcss.Root = Root;\npostcss.Node = Node;\n\nLazyResult.registerPostcss(postcss);\n\nvar postcss_1 = postcss;\npostcss.default = postcss;\n\nvar postcss$1 = postcss_1;\n\npostcss$1.stringify;\npostcss$1.fromJSON;\npostcss$1.plugin;\npostcss$1.parse;\npostcss$1.list;\n\npostcss$1.document;\npostcss$1.comment;\npostcss$1.atRule;\npostcss$1.rule;\npostcss$1.decl;\npostcss$1.root;\n\npostcss$1.CssSyntaxError;\npostcss$1.Declaration;\npostcss$1.Container;\npostcss$1.Processor;\npostcss$1.Document;\npostcss$1.Comment;\npostcss$1.Warning;\npostcss$1.AtRule;\npostcss$1.Result;\npostcss$1.Input;\npostcss$1.Rule;\npostcss$1.Root;\npostcss$1.Node;\n\nconst trimPlugin = () => {\n    return {\n        postcssPlugin: 'vue-sfc-trim',\n        Once(root) {\n            root.walk(({ type, raws }) => {\n                if (type === 'rule' || type === 'atrule') {\n                    if (raws.before)\n                        raws.before = '\\n';\n                    if ('after' in raws && raws.after)\n                        raws.after = '\\n';\n                }\n            });\n        }\n    };\n};\ntrimPlugin.postcss = true;\nvar trimPlugin$1 = trimPlugin;\n\nvar dist = {exports: {}};\n\nvar processor = {exports: {}};\n\nvar parser = {exports: {}};\n\nvar root$1 = {exports: {}};\n\nvar container = {exports: {}};\n\nvar node$1 = {exports: {}};\n\nvar util = {};\n\nvar unesc = {exports: {}};\n\n(function (module, exports) {\n\n\texports.__esModule = true;\n\texports[\"default\"] = unesc;\n\n\t// Many thanks for this post which made this migration much easier.\n\t// https://mathiasbynens.be/notes/css-escapes\n\n\t/**\n\t * \n\t * @param {string} str \n\t * @returns {[string, number]|undefined}\n\t */\n\tfunction gobbleHex(str) {\n\t  var lower = str.toLowerCase();\n\t  var hex = '';\n\t  var spaceTerminated = false;\n\n\t  for (var i = 0; i < 6 && lower[i] !== undefined; i++) {\n\t    var code = lower.charCodeAt(i); // check to see if we are dealing with a valid hex char [a-f|0-9]\n\n\t    var valid = code >= 97 && code <= 102 || code >= 48 && code <= 57; // https://drafts.csswg.org/css-syntax/#consume-escaped-code-point\n\n\t    spaceTerminated = code === 32;\n\n\t    if (!valid) {\n\t      break;\n\t    }\n\n\t    hex += lower[i];\n\t  }\n\n\t  if (hex.length === 0) {\n\t    return undefined;\n\t  }\n\n\t  var codePoint = parseInt(hex, 16);\n\t  var isSurrogate = codePoint >= 0xD800 && codePoint <= 0xDFFF; // Add special case for\n\t  // \"If this number is zero, or is for a surrogate, or is greater than the maximum allowed code point\"\n\t  // https://drafts.csswg.org/css-syntax/#maximum-allowed-code-point\n\n\t  if (isSurrogate || codePoint === 0x0000 || codePoint > 0x10FFFF) {\n\t    return [\"\\uFFFD\", hex.length + (spaceTerminated ? 1 : 0)];\n\t  }\n\n\t  return [String.fromCodePoint(codePoint), hex.length + (spaceTerminated ? 1 : 0)];\n\t}\n\n\tvar CONTAINS_ESCAPE = /\\\\/;\n\n\tfunction unesc(str) {\n\t  var needToProcess = CONTAINS_ESCAPE.test(str);\n\n\t  if (!needToProcess) {\n\t    return str;\n\t  }\n\n\t  var ret = \"\";\n\n\t  for (var i = 0; i < str.length; i++) {\n\t    if (str[i] === \"\\\\\") {\n\t      var gobbled = gobbleHex(str.slice(i + 1, i + 7));\n\n\t      if (gobbled !== undefined) {\n\t        ret += gobbled[0];\n\t        i += gobbled[1];\n\t        continue;\n\t      } // Retain a pair of \\\\ if double escaped `\\\\\\\\`\n\t      // https://github.com/postcss/postcss-selector-parser/commit/268c9a7656fb53f543dc620aa5b73a30ec3ff20e\n\n\n\t      if (str[i + 1] === \"\\\\\") {\n\t        ret += \"\\\\\";\n\t        i++;\n\t        continue;\n\t      } // if \\\\ is at the end of the string retain it\n\t      // https://github.com/postcss/postcss-selector-parser/commit/01a6b346e3612ce1ab20219acc26abdc259ccefb\n\n\n\t      if (str.length === i + 1) {\n\t        ret += str[i];\n\t      }\n\n\t      continue;\n\t    }\n\n\t    ret += str[i];\n\t  }\n\n\t  return ret;\n\t}\n\n\tmodule.exports = exports.default;\n} (unesc, unesc.exports));\n\nvar getProp = {exports: {}};\n\n(function (module, exports) {\n\n\texports.__esModule = true;\n\texports[\"default\"] = getProp;\n\n\tfunction getProp(obj) {\n\t  for (var _len = arguments.length, props = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n\t    props[_key - 1] = arguments[_key];\n\t  }\n\n\t  while (props.length > 0) {\n\t    var prop = props.shift();\n\n\t    if (!obj[prop]) {\n\t      return undefined;\n\t    }\n\n\t    obj = obj[prop];\n\t  }\n\n\t  return obj;\n\t}\n\n\tmodule.exports = exports.default;\n} (getProp, getProp.exports));\n\nvar ensureObject = {exports: {}};\n\n(function (module, exports) {\n\n\texports.__esModule = true;\n\texports[\"default\"] = ensureObject;\n\n\tfunction ensureObject(obj) {\n\t  for (var _len = arguments.length, props = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n\t    props[_key - 1] = arguments[_key];\n\t  }\n\n\t  while (props.length > 0) {\n\t    var prop = props.shift();\n\n\t    if (!obj[prop]) {\n\t      obj[prop] = {};\n\t    }\n\n\t    obj = obj[prop];\n\t  }\n\t}\n\n\tmodule.exports = exports.default;\n} (ensureObject, ensureObject.exports));\n\nvar stripComments = {exports: {}};\n\n(function (module, exports) {\n\n\texports.__esModule = true;\n\texports[\"default\"] = stripComments;\n\n\tfunction stripComments(str) {\n\t  var s = \"\";\n\t  var commentStart = str.indexOf(\"/*\");\n\t  var lastEnd = 0;\n\n\t  while (commentStart >= 0) {\n\t    s = s + str.slice(lastEnd, commentStart);\n\t    var commentEnd = str.indexOf(\"*/\", commentStart + 2);\n\n\t    if (commentEnd < 0) {\n\t      return s;\n\t    }\n\n\t    lastEnd = commentEnd + 2;\n\t    commentStart = str.indexOf(\"/*\", lastEnd);\n\t  }\n\n\t  s = s + str.slice(lastEnd);\n\t  return s;\n\t}\n\n\tmodule.exports = exports.default;\n} (stripComments, stripComments.exports));\n\nutil.__esModule = true;\nutil.stripComments = util.ensureObject = util.getProp = util.unesc = void 0;\n\nvar _unesc = _interopRequireDefault$1(unesc.exports);\n\nutil.unesc = _unesc[\"default\"];\n\nvar _getProp = _interopRequireDefault$1(getProp.exports);\n\nutil.getProp = _getProp[\"default\"];\n\nvar _ensureObject = _interopRequireDefault$1(ensureObject.exports);\n\nutil.ensureObject = _ensureObject[\"default\"];\n\nvar _stripComments = _interopRequireDefault$1(stripComments.exports);\n\nutil.stripComments = _stripComments[\"default\"];\n\nfunction _interopRequireDefault$1(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\n(function (module, exports) {\n\n\texports.__esModule = true;\n\texports[\"default\"] = void 0;\n\n\tvar _util = util;\n\n\tfunction _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); } }\n\n\tfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n\tvar cloneNode = function cloneNode(obj, parent) {\n\t  if (typeof obj !== 'object' || obj === null) {\n\t    return obj;\n\t  }\n\n\t  var cloned = new obj.constructor();\n\n\t  for (var i in obj) {\n\t    if (!obj.hasOwnProperty(i)) {\n\t      continue;\n\t    }\n\n\t    var value = obj[i];\n\t    var type = typeof value;\n\n\t    if (i === 'parent' && type === 'object') {\n\t      if (parent) {\n\t        cloned[i] = parent;\n\t      }\n\t    } else if (value instanceof Array) {\n\t      cloned[i] = value.map(function (j) {\n\t        return cloneNode(j, cloned);\n\t      });\n\t    } else {\n\t      cloned[i] = cloneNode(value, cloned);\n\t    }\n\t  }\n\n\t  return cloned;\n\t};\n\n\tvar Node = /*#__PURE__*/function () {\n\t  function Node(opts) {\n\t    if (opts === void 0) {\n\t      opts = {};\n\t    }\n\n\t    Object.assign(this, opts);\n\t    this.spaces = this.spaces || {};\n\t    this.spaces.before = this.spaces.before || '';\n\t    this.spaces.after = this.spaces.after || '';\n\t  }\n\n\t  var _proto = Node.prototype;\n\n\t  _proto.remove = function remove() {\n\t    if (this.parent) {\n\t      this.parent.removeChild(this);\n\t    }\n\n\t    this.parent = undefined;\n\t    return this;\n\t  };\n\n\t  _proto.replaceWith = function replaceWith() {\n\t    if (this.parent) {\n\t      for (var index in arguments) {\n\t        this.parent.insertBefore(this, arguments[index]);\n\t      }\n\n\t      this.remove();\n\t    }\n\n\t    return this;\n\t  };\n\n\t  _proto.next = function next() {\n\t    return this.parent.at(this.parent.index(this) + 1);\n\t  };\n\n\t  _proto.prev = function prev() {\n\t    return this.parent.at(this.parent.index(this) - 1);\n\t  };\n\n\t  _proto.clone = function clone(overrides) {\n\t    if (overrides === void 0) {\n\t      overrides = {};\n\t    }\n\n\t    var cloned = cloneNode(this);\n\n\t    for (var name in overrides) {\n\t      cloned[name] = overrides[name];\n\t    }\n\n\t    return cloned;\n\t  }\n\t  /**\n\t   * Some non-standard syntax doesn't follow normal escaping rules for css.\n\t   * This allows non standard syntax to be appended to an existing property\n\t   * by specifying the escaped value. By specifying the escaped value,\n\t   * illegal characters are allowed to be directly inserted into css output.\n\t   * @param {string} name the property to set\n\t   * @param {any} value the unescaped value of the property\n\t   * @param {string} valueEscaped optional. the escaped value of the property.\n\t   */\n\t  ;\n\n\t  _proto.appendToPropertyAndEscape = function appendToPropertyAndEscape(name, value, valueEscaped) {\n\t    if (!this.raws) {\n\t      this.raws = {};\n\t    }\n\n\t    var originalValue = this[name];\n\t    var originalEscaped = this.raws[name];\n\t    this[name] = originalValue + value; // this may trigger a setter that updates raws, so it has to be set first.\n\n\t    if (originalEscaped || valueEscaped !== value) {\n\t      this.raws[name] = (originalEscaped || originalValue) + valueEscaped;\n\t    } else {\n\t      delete this.raws[name]; // delete any escaped value that was created by the setter.\n\t    }\n\t  }\n\t  /**\n\t   * Some non-standard syntax doesn't follow normal escaping rules for css.\n\t   * This allows the escaped value to be specified directly, allowing illegal\n\t   * characters to be directly inserted into css output.\n\t   * @param {string} name the property to set\n\t   * @param {any} value the unescaped value of the property\n\t   * @param {string} valueEscaped the escaped value of the property.\n\t   */\n\t  ;\n\n\t  _proto.setPropertyAndEscape = function setPropertyAndEscape(name, value, valueEscaped) {\n\t    if (!this.raws) {\n\t      this.raws = {};\n\t    }\n\n\t    this[name] = value; // this may trigger a setter that updates raws, so it has to be set first.\n\n\t    this.raws[name] = valueEscaped;\n\t  }\n\t  /**\n\t   * When you want a value to passed through to CSS directly. This method\n\t   * deletes the corresponding raw value causing the stringifier to fallback\n\t   * to the unescaped value.\n\t   * @param {string} name the property to set.\n\t   * @param {any} value The value that is both escaped and unescaped.\n\t   */\n\t  ;\n\n\t  _proto.setPropertyWithoutEscape = function setPropertyWithoutEscape(name, value) {\n\t    this[name] = value; // this may trigger a setter that updates raws, so it has to be set first.\n\n\t    if (this.raws) {\n\t      delete this.raws[name];\n\t    }\n\t  }\n\t  /**\n\t   *\n\t   * @param {number} line The number (starting with 1)\n\t   * @param {number} column The column number (starting with 1)\n\t   */\n\t  ;\n\n\t  _proto.isAtPosition = function isAtPosition(line, column) {\n\t    if (this.source && this.source.start && this.source.end) {\n\t      if (this.source.start.line > line) {\n\t        return false;\n\t      }\n\n\t      if (this.source.end.line < line) {\n\t        return false;\n\t      }\n\n\t      if (this.source.start.line === line && this.source.start.column > column) {\n\t        return false;\n\t      }\n\n\t      if (this.source.end.line === line && this.source.end.column < column) {\n\t        return false;\n\t      }\n\n\t      return true;\n\t    }\n\n\t    return undefined;\n\t  };\n\n\t  _proto.stringifyProperty = function stringifyProperty(name) {\n\t    return this.raws && this.raws[name] || this[name];\n\t  };\n\n\t  _proto.valueToString = function valueToString() {\n\t    return String(this.stringifyProperty(\"value\"));\n\t  };\n\n\t  _proto.toString = function toString() {\n\t    return [this.rawSpaceBefore, this.valueToString(), this.rawSpaceAfter].join('');\n\t  };\n\n\t  _createClass(Node, [{\n\t    key: \"rawSpaceBefore\",\n\t    get: function get() {\n\t      var rawSpace = this.raws && this.raws.spaces && this.raws.spaces.before;\n\n\t      if (rawSpace === undefined) {\n\t        rawSpace = this.spaces && this.spaces.before;\n\t      }\n\n\t      return rawSpace || \"\";\n\t    },\n\t    set: function set(raw) {\n\t      (0, _util.ensureObject)(this, \"raws\", \"spaces\");\n\t      this.raws.spaces.before = raw;\n\t    }\n\t  }, {\n\t    key: \"rawSpaceAfter\",\n\t    get: function get() {\n\t      var rawSpace = this.raws && this.raws.spaces && this.raws.spaces.after;\n\n\t      if (rawSpace === undefined) {\n\t        rawSpace = this.spaces.after;\n\t      }\n\n\t      return rawSpace || \"\";\n\t    },\n\t    set: function set(raw) {\n\t      (0, _util.ensureObject)(this, \"raws\", \"spaces\");\n\t      this.raws.spaces.after = raw;\n\t    }\n\t  }]);\n\n\t  return Node;\n\t}();\n\n\texports[\"default\"] = Node;\n\tmodule.exports = exports.default;\n} (node$1, node$1.exports));\n\nvar types = {};\n\ntypes.__esModule = true;\ntypes.UNIVERSAL = types.ATTRIBUTE = types.CLASS = types.COMBINATOR = types.COMMENT = types.ID = types.NESTING = types.PSEUDO = types.ROOT = types.SELECTOR = types.STRING = types.TAG = void 0;\nvar TAG = 'tag';\ntypes.TAG = TAG;\nvar STRING = 'string';\ntypes.STRING = STRING;\nvar SELECTOR = 'selector';\ntypes.SELECTOR = SELECTOR;\nvar ROOT = 'root';\ntypes.ROOT = ROOT;\nvar PSEUDO = 'pseudo';\ntypes.PSEUDO = PSEUDO;\nvar NESTING = 'nesting';\ntypes.NESTING = NESTING;\nvar ID = 'id';\ntypes.ID = ID;\nvar COMMENT = 'comment';\ntypes.COMMENT = COMMENT;\nvar COMBINATOR = 'combinator';\ntypes.COMBINATOR = COMBINATOR;\nvar CLASS = 'class';\ntypes.CLASS = CLASS;\nvar ATTRIBUTE = 'attribute';\ntypes.ATTRIBUTE = ATTRIBUTE;\nvar UNIVERSAL = 'universal';\ntypes.UNIVERSAL = UNIVERSAL;\n\n(function (module, exports) {\n\n\texports.__esModule = true;\n\texports[\"default\"] = void 0;\n\n\tvar _node = _interopRequireDefault(node$1.exports);\n\n\tvar types$1 = _interopRequireWildcard(types);\n\n\tfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }\n\n\tfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") { return { \"default\": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (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; }\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\n\tfunction _createForOfIteratorHelperLoose(o, allowArrayLike) { var it; if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } it = o[Symbol.iterator](); return it.next.bind(it); }\n\n\tfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\n\tfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\n\tfunction _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); } }\n\n\tfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n\tfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\n\tfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\n\tvar Container = /*#__PURE__*/function (_Node) {\n\t  _inheritsLoose(Container, _Node);\n\n\t  function Container(opts) {\n\t    var _this;\n\n\t    _this = _Node.call(this, opts) || this;\n\n\t    if (!_this.nodes) {\n\t      _this.nodes = [];\n\t    }\n\n\t    return _this;\n\t  }\n\n\t  var _proto = Container.prototype;\n\n\t  _proto.append = function append(selector) {\n\t    selector.parent = this;\n\t    this.nodes.push(selector);\n\t    return this;\n\t  };\n\n\t  _proto.prepend = function prepend(selector) {\n\t    selector.parent = this;\n\t    this.nodes.unshift(selector);\n\t    return this;\n\t  };\n\n\t  _proto.at = function at(index) {\n\t    return this.nodes[index];\n\t  };\n\n\t  _proto.index = function index(child) {\n\t    if (typeof child === 'number') {\n\t      return child;\n\t    }\n\n\t    return this.nodes.indexOf(child);\n\t  };\n\n\t  _proto.removeChild = function removeChild(child) {\n\t    child = this.index(child);\n\t    this.at(child).parent = undefined;\n\t    this.nodes.splice(child, 1);\n\t    var index;\n\n\t    for (var id in this.indexes) {\n\t      index = this.indexes[id];\n\n\t      if (index >= child) {\n\t        this.indexes[id] = index - 1;\n\t      }\n\t    }\n\n\t    return this;\n\t  };\n\n\t  _proto.removeAll = function removeAll() {\n\t    for (var _iterator = _createForOfIteratorHelperLoose(this.nodes), _step; !(_step = _iterator()).done;) {\n\t      var node = _step.value;\n\t      node.parent = undefined;\n\t    }\n\n\t    this.nodes = [];\n\t    return this;\n\t  };\n\n\t  _proto.empty = function empty() {\n\t    return this.removeAll();\n\t  };\n\n\t  _proto.insertAfter = function insertAfter(oldNode, newNode) {\n\t    newNode.parent = this;\n\t    var oldIndex = this.index(oldNode);\n\t    this.nodes.splice(oldIndex + 1, 0, newNode);\n\t    newNode.parent = this;\n\t    var index;\n\n\t    for (var id in this.indexes) {\n\t      index = this.indexes[id];\n\n\t      if (oldIndex <= index) {\n\t        this.indexes[id] = index + 1;\n\t      }\n\t    }\n\n\t    return this;\n\t  };\n\n\t  _proto.insertBefore = function insertBefore(oldNode, newNode) {\n\t    newNode.parent = this;\n\t    var oldIndex = this.index(oldNode);\n\t    this.nodes.splice(oldIndex, 0, newNode);\n\t    newNode.parent = this;\n\t    var index;\n\n\t    for (var id in this.indexes) {\n\t      index = this.indexes[id];\n\n\t      if (index <= oldIndex) {\n\t        this.indexes[id] = index + 1;\n\t      }\n\t    }\n\n\t    return this;\n\t  };\n\n\t  _proto._findChildAtPosition = function _findChildAtPosition(line, col) {\n\t    var found = undefined;\n\t    this.each(function (node) {\n\t      if (node.atPosition) {\n\t        var foundChild = node.atPosition(line, col);\n\n\t        if (foundChild) {\n\t          found = foundChild;\n\t          return false;\n\t        }\n\t      } else if (node.isAtPosition(line, col)) {\n\t        found = node;\n\t        return false;\n\t      }\n\t    });\n\t    return found;\n\t  }\n\t  /**\n\t   * Return the most specific node at the line and column number given.\n\t   * The source location is based on the original parsed location, locations aren't\n\t   * updated as selector nodes are mutated.\n\t   * \n\t   * Note that this location is relative to the location of the first character\n\t   * of the selector, and not the location of the selector in the overall document\n\t   * when used in conjunction with postcss.\n\t   *\n\t   * If not found, returns undefined.\n\t   * @param {number} line The line number of the node to find. (1-based index)\n\t   * @param {number} col  The column number of the node to find. (1-based index)\n\t   */\n\t  ;\n\n\t  _proto.atPosition = function atPosition(line, col) {\n\t    if (this.isAtPosition(line, col)) {\n\t      return this._findChildAtPosition(line, col) || this;\n\t    } else {\n\t      return undefined;\n\t    }\n\t  };\n\n\t  _proto._inferEndPosition = function _inferEndPosition() {\n\t    if (this.last && this.last.source && this.last.source.end) {\n\t      this.source = this.source || {};\n\t      this.source.end = this.source.end || {};\n\t      Object.assign(this.source.end, this.last.source.end);\n\t    }\n\t  };\n\n\t  _proto.each = function each(callback) {\n\t    if (!this.lastEach) {\n\t      this.lastEach = 0;\n\t    }\n\n\t    if (!this.indexes) {\n\t      this.indexes = {};\n\t    }\n\n\t    this.lastEach++;\n\t    var id = this.lastEach;\n\t    this.indexes[id] = 0;\n\n\t    if (!this.length) {\n\t      return undefined;\n\t    }\n\n\t    var index, result;\n\n\t    while (this.indexes[id] < this.length) {\n\t      index = this.indexes[id];\n\t      result = callback(this.at(index), index);\n\n\t      if (result === false) {\n\t        break;\n\t      }\n\n\t      this.indexes[id] += 1;\n\t    }\n\n\t    delete this.indexes[id];\n\n\t    if (result === false) {\n\t      return false;\n\t    }\n\t  };\n\n\t  _proto.walk = function walk(callback) {\n\t    return this.each(function (node, i) {\n\t      var result = callback(node, i);\n\n\t      if (result !== false && node.length) {\n\t        result = node.walk(callback);\n\t      }\n\n\t      if (result === false) {\n\t        return false;\n\t      }\n\t    });\n\t  };\n\n\t  _proto.walkAttributes = function walkAttributes(callback) {\n\t    var _this2 = this;\n\n\t    return this.walk(function (selector) {\n\t      if (selector.type === types$1.ATTRIBUTE) {\n\t        return callback.call(_this2, selector);\n\t      }\n\t    });\n\t  };\n\n\t  _proto.walkClasses = function walkClasses(callback) {\n\t    var _this3 = this;\n\n\t    return this.walk(function (selector) {\n\t      if (selector.type === types$1.CLASS) {\n\t        return callback.call(_this3, selector);\n\t      }\n\t    });\n\t  };\n\n\t  _proto.walkCombinators = function walkCombinators(callback) {\n\t    var _this4 = this;\n\n\t    return this.walk(function (selector) {\n\t      if (selector.type === types$1.COMBINATOR) {\n\t        return callback.call(_this4, selector);\n\t      }\n\t    });\n\t  };\n\n\t  _proto.walkComments = function walkComments(callback) {\n\t    var _this5 = this;\n\n\t    return this.walk(function (selector) {\n\t      if (selector.type === types$1.COMMENT) {\n\t        return callback.call(_this5, selector);\n\t      }\n\t    });\n\t  };\n\n\t  _proto.walkIds = function walkIds(callback) {\n\t    var _this6 = this;\n\n\t    return this.walk(function (selector) {\n\t      if (selector.type === types$1.ID) {\n\t        return callback.call(_this6, selector);\n\t      }\n\t    });\n\t  };\n\n\t  _proto.walkNesting = function walkNesting(callback) {\n\t    var _this7 = this;\n\n\t    return this.walk(function (selector) {\n\t      if (selector.type === types$1.NESTING) {\n\t        return callback.call(_this7, selector);\n\t      }\n\t    });\n\t  };\n\n\t  _proto.walkPseudos = function walkPseudos(callback) {\n\t    var _this8 = this;\n\n\t    return this.walk(function (selector) {\n\t      if (selector.type === types$1.PSEUDO) {\n\t        return callback.call(_this8, selector);\n\t      }\n\t    });\n\t  };\n\n\t  _proto.walkTags = function walkTags(callback) {\n\t    var _this9 = this;\n\n\t    return this.walk(function (selector) {\n\t      if (selector.type === types$1.TAG) {\n\t        return callback.call(_this9, selector);\n\t      }\n\t    });\n\t  };\n\n\t  _proto.walkUniversals = function walkUniversals(callback) {\n\t    var _this10 = this;\n\n\t    return this.walk(function (selector) {\n\t      if (selector.type === types$1.UNIVERSAL) {\n\t        return callback.call(_this10, selector);\n\t      }\n\t    });\n\t  };\n\n\t  _proto.split = function split(callback) {\n\t    var _this11 = this;\n\n\t    var current = [];\n\t    return this.reduce(function (memo, node, index) {\n\t      var split = callback.call(_this11, node);\n\t      current.push(node);\n\n\t      if (split) {\n\t        memo.push(current);\n\t        current = [];\n\t      } else if (index === _this11.length - 1) {\n\t        memo.push(current);\n\t      }\n\n\t      return memo;\n\t    }, []);\n\t  };\n\n\t  _proto.map = function map(callback) {\n\t    return this.nodes.map(callback);\n\t  };\n\n\t  _proto.reduce = function reduce(callback, memo) {\n\t    return this.nodes.reduce(callback, memo);\n\t  };\n\n\t  _proto.every = function every(callback) {\n\t    return this.nodes.every(callback);\n\t  };\n\n\t  _proto.some = function some(callback) {\n\t    return this.nodes.some(callback);\n\t  };\n\n\t  _proto.filter = function filter(callback) {\n\t    return this.nodes.filter(callback);\n\t  };\n\n\t  _proto.sort = function sort(callback) {\n\t    return this.nodes.sort(callback);\n\t  };\n\n\t  _proto.toString = function toString() {\n\t    return this.map(String).join('');\n\t  };\n\n\t  _createClass(Container, [{\n\t    key: \"first\",\n\t    get: function get() {\n\t      return this.at(0);\n\t    }\n\t  }, {\n\t    key: \"last\",\n\t    get: function get() {\n\t      return this.at(this.length - 1);\n\t    }\n\t  }, {\n\t    key: \"length\",\n\t    get: function get() {\n\t      return this.nodes.length;\n\t    }\n\t  }]);\n\n\t  return Container;\n\t}(_node[\"default\"]);\n\n\texports[\"default\"] = Container;\n\tmodule.exports = exports.default;\n} (container, container.exports));\n\n(function (module, exports) {\n\n\texports.__esModule = true;\n\texports[\"default\"] = void 0;\n\n\tvar _container = _interopRequireDefault(container.exports);\n\n\tvar _types = types;\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\n\tfunction _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); } }\n\n\tfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n\tfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\n\tfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\n\tvar Root = /*#__PURE__*/function (_Container) {\n\t  _inheritsLoose(Root, _Container);\n\n\t  function Root(opts) {\n\t    var _this;\n\n\t    _this = _Container.call(this, opts) || this;\n\t    _this.type = _types.ROOT;\n\t    return _this;\n\t  }\n\n\t  var _proto = Root.prototype;\n\n\t  _proto.toString = function toString() {\n\t    var str = this.reduce(function (memo, selector) {\n\t      memo.push(String(selector));\n\t      return memo;\n\t    }, []).join(',');\n\t    return this.trailingComma ? str + ',' : str;\n\t  };\n\n\t  _proto.error = function error(message, options) {\n\t    if (this._error) {\n\t      return this._error(message, options);\n\t    } else {\n\t      return new Error(message);\n\t    }\n\t  };\n\n\t  _createClass(Root, [{\n\t    key: \"errorGenerator\",\n\t    set: function set(handler) {\n\t      this._error = handler;\n\t    }\n\t  }]);\n\n\t  return Root;\n\t}(_container[\"default\"]);\n\n\texports[\"default\"] = Root;\n\tmodule.exports = exports.default;\n} (root$1, root$1.exports));\n\nvar selector$1 = {exports: {}};\n\n(function (module, exports) {\n\n\texports.__esModule = true;\n\texports[\"default\"] = void 0;\n\n\tvar _container = _interopRequireDefault(container.exports);\n\n\tvar _types = types;\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\n\tfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\n\tfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\n\tvar Selector = /*#__PURE__*/function (_Container) {\n\t  _inheritsLoose(Selector, _Container);\n\n\t  function Selector(opts) {\n\t    var _this;\n\n\t    _this = _Container.call(this, opts) || this;\n\t    _this.type = _types.SELECTOR;\n\t    return _this;\n\t  }\n\n\t  return Selector;\n\t}(_container[\"default\"]);\n\n\texports[\"default\"] = Selector;\n\tmodule.exports = exports.default;\n} (selector$1, selector$1.exports));\n\nvar className$1 = {exports: {}};\n\n/*! https://mths.be/cssesc v3.0.0 by @mathias */\n\nvar object = {};\nvar hasOwnProperty = object.hasOwnProperty;\nvar merge$2 = function merge(options, defaults) {\n\tif (!options) {\n\t\treturn defaults;\n\t}\n\tvar result = {};\n\tfor (var key in defaults) {\n\t\t// `if (defaults.hasOwnProperty(key) { … }` is not needed here, since\n\t\t// only recognized option names are used.\n\t\tresult[key] = hasOwnProperty.call(options, key) ? options[key] : defaults[key];\n\t}\n\treturn result;\n};\n\nvar regexAnySingleEscape = /[ -,\\.\\/:-@\\[-\\^`\\{-~]/;\nvar regexSingleEscape = /[ -,\\.\\/:-@\\[\\]\\^`\\{-~]/;\nvar regexExcessiveSpaces = /(^|\\\\+)?(\\\\[A-F0-9]{1,6})\\x20(?![a-fA-F0-9\\x20])/g;\n\n// https://mathiasbynens.be/notes/css-escapes#css\nvar cssesc = function cssesc(string, options) {\n\toptions = merge$2(options, cssesc.options);\n\tif (options.quotes != 'single' && options.quotes != 'double') {\n\t\toptions.quotes = 'single';\n\t}\n\tvar quote = options.quotes == 'double' ? '\"' : '\\'';\n\tvar isIdentifier = options.isIdentifier;\n\n\tvar firstChar = string.charAt(0);\n\tvar output = '';\n\tvar counter = 0;\n\tvar length = string.length;\n\twhile (counter < length) {\n\t\tvar character = string.charAt(counter++);\n\t\tvar codePoint = character.charCodeAt();\n\t\tvar value = void 0;\n\t\t// If it’s not a printable ASCII character…\n\t\tif (codePoint < 0x20 || codePoint > 0x7E) {\n\t\t\tif (codePoint >= 0xD800 && codePoint <= 0xDBFF && counter < length) {\n\t\t\t\t// It’s a high surrogate, and there is a next character.\n\t\t\t\tvar extra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) {\n\t\t\t\t\t// next character is low surrogate\n\t\t\t\t\tcodePoint = ((codePoint & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000;\n\t\t\t\t} else {\n\t\t\t\t\t// It’s an unmatched surrogate; only append this code unit, in case\n\t\t\t\t\t// the next code unit is the high surrogate of a surrogate pair.\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t}\n\t\t\tvalue = '\\\\' + codePoint.toString(16).toUpperCase() + ' ';\n\t\t} else {\n\t\t\tif (options.escapeEverything) {\n\t\t\t\tif (regexAnySingleEscape.test(character)) {\n\t\t\t\t\tvalue = '\\\\' + character;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = '\\\\' + codePoint.toString(16).toUpperCase() + ' ';\n\t\t\t\t}\n\t\t\t} else if (/[\\t\\n\\f\\r\\x0B]/.test(character)) {\n\t\t\t\tvalue = '\\\\' + codePoint.toString(16).toUpperCase() + ' ';\n\t\t\t} else if (character == '\\\\' || !isIdentifier && (character == '\"' && quote == character || character == '\\'' && quote == character) || isIdentifier && regexSingleEscape.test(character)) {\n\t\t\t\tvalue = '\\\\' + character;\n\t\t\t} else {\n\t\t\t\tvalue = character;\n\t\t\t}\n\t\t}\n\t\toutput += value;\n\t}\n\n\tif (isIdentifier) {\n\t\tif (/^-[-\\d]/.test(output)) {\n\t\t\toutput = '\\\\-' + output.slice(1);\n\t\t} else if (/\\d/.test(firstChar)) {\n\t\t\toutput = '\\\\3' + firstChar + ' ' + output.slice(1);\n\t\t}\n\t}\n\n\t// Remove spaces after `\\HEX` escapes that are not followed by a hex digit,\n\t// since they’re redundant. Note that this is only possible if the escape\n\t// sequence isn’t preceded by an odd number of backslashes.\n\toutput = output.replace(regexExcessiveSpaces, function ($0, $1, $2) {\n\t\tif ($1 && $1.length % 2) {\n\t\t\t// It’s not safe to remove the space, so don’t.\n\t\t\treturn $0;\n\t\t}\n\t\t// Strip the space.\n\t\treturn ($1 || '') + $2;\n\t});\n\n\tif (!isIdentifier && options.wrap) {\n\t\treturn quote + output + quote;\n\t}\n\treturn output;\n};\n\n// Expose default options (so they can be overridden globally).\ncssesc.options = {\n\t'escapeEverything': false,\n\t'isIdentifier': false,\n\t'quotes': 'single',\n\t'wrap': false\n};\n\ncssesc.version = '3.0.0';\n\nvar cssesc_1 = cssesc;\n\n(function (module, exports) {\n\n\texports.__esModule = true;\n\texports[\"default\"] = void 0;\n\n\tvar _cssesc = _interopRequireDefault(cssesc_1);\n\n\tvar _util = util;\n\n\tvar _node = _interopRequireDefault(node$1.exports);\n\n\tvar _types = types;\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\n\tfunction _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); } }\n\n\tfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n\tfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\n\tfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\n\tvar ClassName = /*#__PURE__*/function (_Node) {\n\t  _inheritsLoose(ClassName, _Node);\n\n\t  function ClassName(opts) {\n\t    var _this;\n\n\t    _this = _Node.call(this, opts) || this;\n\t    _this.type = _types.CLASS;\n\t    _this._constructed = true;\n\t    return _this;\n\t  }\n\n\t  var _proto = ClassName.prototype;\n\n\t  _proto.valueToString = function valueToString() {\n\t    return '.' + _Node.prototype.valueToString.call(this);\n\t  };\n\n\t  _createClass(ClassName, [{\n\t    key: \"value\",\n\t    get: function get() {\n\t      return this._value;\n\t    },\n\t    set: function set(v) {\n\t      if (this._constructed) {\n\t        var escaped = (0, _cssesc[\"default\"])(v, {\n\t          isIdentifier: true\n\t        });\n\n\t        if (escaped !== v) {\n\t          (0, _util.ensureObject)(this, \"raws\");\n\t          this.raws.value = escaped;\n\t        } else if (this.raws) {\n\t          delete this.raws.value;\n\t        }\n\t      }\n\n\t      this._value = v;\n\t    }\n\t  }]);\n\n\t  return ClassName;\n\t}(_node[\"default\"]);\n\n\texports[\"default\"] = ClassName;\n\tmodule.exports = exports.default;\n} (className$1, className$1.exports));\n\nvar comment$2 = {exports: {}};\n\n(function (module, exports) {\n\n\texports.__esModule = true;\n\texports[\"default\"] = void 0;\n\n\tvar _node = _interopRequireDefault(node$1.exports);\n\n\tvar _types = types;\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\n\tfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\n\tfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\n\tvar Comment = /*#__PURE__*/function (_Node) {\n\t  _inheritsLoose(Comment, _Node);\n\n\t  function Comment(opts) {\n\t    var _this;\n\n\t    _this = _Node.call(this, opts) || this;\n\t    _this.type = _types.COMMENT;\n\t    return _this;\n\t  }\n\n\t  return Comment;\n\t}(_node[\"default\"]);\n\n\texports[\"default\"] = Comment;\n\tmodule.exports = exports.default;\n} (comment$2, comment$2.exports));\n\nvar id$1 = {exports: {}};\n\n(function (module, exports) {\n\n\texports.__esModule = true;\n\texports[\"default\"] = void 0;\n\n\tvar _node = _interopRequireDefault(node$1.exports);\n\n\tvar _types = types;\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\n\tfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\n\tfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\n\tvar ID = /*#__PURE__*/function (_Node) {\n\t  _inheritsLoose(ID, _Node);\n\n\t  function ID(opts) {\n\t    var _this;\n\n\t    _this = _Node.call(this, opts) || this;\n\t    _this.type = _types.ID;\n\t    return _this;\n\t  }\n\n\t  var _proto = ID.prototype;\n\n\t  _proto.valueToString = function valueToString() {\n\t    return '#' + _Node.prototype.valueToString.call(this);\n\t  };\n\n\t  return ID;\n\t}(_node[\"default\"]);\n\n\texports[\"default\"] = ID;\n\tmodule.exports = exports.default;\n} (id$1, id$1.exports));\n\nvar tag$1 = {exports: {}};\n\nvar namespace = {exports: {}};\n\n(function (module, exports) {\n\n\texports.__esModule = true;\n\texports[\"default\"] = void 0;\n\n\tvar _cssesc = _interopRequireDefault(cssesc_1);\n\n\tvar _util = util;\n\n\tvar _node = _interopRequireDefault(node$1.exports);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\n\tfunction _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); } }\n\n\tfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n\tfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\n\tfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\n\tvar Namespace = /*#__PURE__*/function (_Node) {\n\t  _inheritsLoose(Namespace, _Node);\n\n\t  function Namespace() {\n\t    return _Node.apply(this, arguments) || this;\n\t  }\n\n\t  var _proto = Namespace.prototype;\n\n\t  _proto.qualifiedName = function qualifiedName(value) {\n\t    if (this.namespace) {\n\t      return this.namespaceString + \"|\" + value;\n\t    } else {\n\t      return value;\n\t    }\n\t  };\n\n\t  _proto.valueToString = function valueToString() {\n\t    return this.qualifiedName(_Node.prototype.valueToString.call(this));\n\t  };\n\n\t  _createClass(Namespace, [{\n\t    key: \"namespace\",\n\t    get: function get() {\n\t      return this._namespace;\n\t    },\n\t    set: function set(namespace) {\n\t      if (namespace === true || namespace === \"*\" || namespace === \"&\") {\n\t        this._namespace = namespace;\n\n\t        if (this.raws) {\n\t          delete this.raws.namespace;\n\t        }\n\n\t        return;\n\t      }\n\n\t      var escaped = (0, _cssesc[\"default\"])(namespace, {\n\t        isIdentifier: true\n\t      });\n\t      this._namespace = namespace;\n\n\t      if (escaped !== namespace) {\n\t        (0, _util.ensureObject)(this, \"raws\");\n\t        this.raws.namespace = escaped;\n\t      } else if (this.raws) {\n\t        delete this.raws.namespace;\n\t      }\n\t    }\n\t  }, {\n\t    key: \"ns\",\n\t    get: function get() {\n\t      return this._namespace;\n\t    },\n\t    set: function set(namespace) {\n\t      this.namespace = namespace;\n\t    }\n\t  }, {\n\t    key: \"namespaceString\",\n\t    get: function get() {\n\t      if (this.namespace) {\n\t        var ns = this.stringifyProperty(\"namespace\");\n\n\t        if (ns === true) {\n\t          return '';\n\t        } else {\n\t          return ns;\n\t        }\n\t      } else {\n\t        return '';\n\t      }\n\t    }\n\t  }]);\n\n\t  return Namespace;\n\t}(_node[\"default\"]);\n\n\texports[\"default\"] = Namespace;\n\tmodule.exports = exports.default;\n} (namespace, namespace.exports));\n\n(function (module, exports) {\n\n\texports.__esModule = true;\n\texports[\"default\"] = void 0;\n\n\tvar _namespace = _interopRequireDefault(namespace.exports);\n\n\tvar _types = types;\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\n\tfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\n\tfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\n\tvar Tag = /*#__PURE__*/function (_Namespace) {\n\t  _inheritsLoose(Tag, _Namespace);\n\n\t  function Tag(opts) {\n\t    var _this;\n\n\t    _this = _Namespace.call(this, opts) || this;\n\t    _this.type = _types.TAG;\n\t    return _this;\n\t  }\n\n\t  return Tag;\n\t}(_namespace[\"default\"]);\n\n\texports[\"default\"] = Tag;\n\tmodule.exports = exports.default;\n} (tag$1, tag$1.exports));\n\nvar string$1 = {exports: {}};\n\n(function (module, exports) {\n\n\texports.__esModule = true;\n\texports[\"default\"] = void 0;\n\n\tvar _node = _interopRequireDefault(node$1.exports);\n\n\tvar _types = types;\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\n\tfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\n\tfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\n\tvar String = /*#__PURE__*/function (_Node) {\n\t  _inheritsLoose(String, _Node);\n\n\t  function String(opts) {\n\t    var _this;\n\n\t    _this = _Node.call(this, opts) || this;\n\t    _this.type = _types.STRING;\n\t    return _this;\n\t  }\n\n\t  return String;\n\t}(_node[\"default\"]);\n\n\texports[\"default\"] = String;\n\tmodule.exports = exports.default;\n} (string$1, string$1.exports));\n\nvar pseudo$1 = {exports: {}};\n\n(function (module, exports) {\n\n\texports.__esModule = true;\n\texports[\"default\"] = void 0;\n\n\tvar _container = _interopRequireDefault(container.exports);\n\n\tvar _types = types;\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\n\tfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\n\tfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\n\tvar Pseudo = /*#__PURE__*/function (_Container) {\n\t  _inheritsLoose(Pseudo, _Container);\n\n\t  function Pseudo(opts) {\n\t    var _this;\n\n\t    _this = _Container.call(this, opts) || this;\n\t    _this.type = _types.PSEUDO;\n\t    return _this;\n\t  }\n\n\t  var _proto = Pseudo.prototype;\n\n\t  _proto.toString = function toString() {\n\t    var params = this.length ? '(' + this.map(String).join(',') + ')' : '';\n\t    return [this.rawSpaceBefore, this.stringifyProperty(\"value\"), params, this.rawSpaceAfter].join('');\n\t  };\n\n\t  return Pseudo;\n\t}(_container[\"default\"]);\n\n\texports[\"default\"] = Pseudo;\n\tmodule.exports = exports.default;\n} (pseudo$1, pseudo$1.exports));\n\nvar attribute$1 = {};\n\n/**\n * For Node.js, simply re-export the core `util.deprecate` function.\n */\n\nvar node = require$$0$1.deprecate;\n\n(function (exports) {\n\n\texports.__esModule = true;\n\texports.unescapeValue = unescapeValue;\n\texports[\"default\"] = void 0;\n\n\tvar _cssesc = _interopRequireDefault(cssesc_1);\n\n\tvar _unesc = _interopRequireDefault(unesc.exports);\n\n\tvar _namespace = _interopRequireDefault(namespace.exports);\n\n\tvar _types = types;\n\n\tvar _CSSESC_QUOTE_OPTIONS;\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\n\tfunction _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); } }\n\n\tfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n\tfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\n\tfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\n\tvar deprecate = node;\n\n\tvar WRAPPED_IN_QUOTES = /^('|\")([^]*)\\1$/;\n\tvar warnOfDeprecatedValueAssignment = deprecate(function () {}, \"Assigning an attribute a value containing characters that might need to be escaped is deprecated. \" + \"Call attribute.setValue() instead.\");\n\tvar warnOfDeprecatedQuotedAssignment = deprecate(function () {}, \"Assigning attr.quoted is deprecated and has no effect. Assign to attr.quoteMark instead.\");\n\tvar warnOfDeprecatedConstructor = deprecate(function () {}, \"Constructing an Attribute selector with a value without specifying quoteMark is deprecated. Note: The value should be unescaped now.\");\n\n\tfunction unescapeValue(value) {\n\t  var deprecatedUsage = false;\n\t  var quoteMark = null;\n\t  var unescaped = value;\n\t  var m = unescaped.match(WRAPPED_IN_QUOTES);\n\n\t  if (m) {\n\t    quoteMark = m[1];\n\t    unescaped = m[2];\n\t  }\n\n\t  unescaped = (0, _unesc[\"default\"])(unescaped);\n\n\t  if (unescaped !== value) {\n\t    deprecatedUsage = true;\n\t  }\n\n\t  return {\n\t    deprecatedUsage: deprecatedUsage,\n\t    unescaped: unescaped,\n\t    quoteMark: quoteMark\n\t  };\n\t}\n\n\tfunction handleDeprecatedContructorOpts(opts) {\n\t  if (opts.quoteMark !== undefined) {\n\t    return opts;\n\t  }\n\n\t  if (opts.value === undefined) {\n\t    return opts;\n\t  }\n\n\t  warnOfDeprecatedConstructor();\n\n\t  var _unescapeValue = unescapeValue(opts.value),\n\t      quoteMark = _unescapeValue.quoteMark,\n\t      unescaped = _unescapeValue.unescaped;\n\n\t  if (!opts.raws) {\n\t    opts.raws = {};\n\t  }\n\n\t  if (opts.raws.value === undefined) {\n\t    opts.raws.value = opts.value;\n\t  }\n\n\t  opts.value = unescaped;\n\t  opts.quoteMark = quoteMark;\n\t  return opts;\n\t}\n\n\tvar Attribute = /*#__PURE__*/function (_Namespace) {\n\t  _inheritsLoose(Attribute, _Namespace);\n\n\t  function Attribute(opts) {\n\t    var _this;\n\n\t    if (opts === void 0) {\n\t      opts = {};\n\t    }\n\n\t    _this = _Namespace.call(this, handleDeprecatedContructorOpts(opts)) || this;\n\t    _this.type = _types.ATTRIBUTE;\n\t    _this.raws = _this.raws || {};\n\t    Object.defineProperty(_this.raws, 'unquoted', {\n\t      get: deprecate(function () {\n\t        return _this.value;\n\t      }, \"attr.raws.unquoted is deprecated. Call attr.value instead.\"),\n\t      set: deprecate(function () {\n\t        return _this.value;\n\t      }, \"Setting attr.raws.unquoted is deprecated and has no effect. attr.value is unescaped by default now.\")\n\t    });\n\t    _this._constructed = true;\n\t    return _this;\n\t  }\n\t  /**\n\t   * Returns the Attribute's value quoted such that it would be legal to use\n\t   * in the value of a css file. The original value's quotation setting\n\t   * used for stringification is left unchanged. See `setValue(value, options)`\n\t   * if you want to control the quote settings of a new value for the attribute.\n\t   *\n\t   * You can also change the quotation used for the current value by setting quoteMark.\n\t   *\n\t   * Options:\n\t   *   * quoteMark {'\"' | \"'\" | null} - Use this value to quote the value. If this\n\t   *     option is not set, the original value for quoteMark will be used. If\n\t   *     indeterminate, a double quote is used. The legal values are:\n\t   *     * `null` - the value will be unquoted and characters will be escaped as necessary.\n\t   *     * `'` - the value will be quoted with a single quote and single quotes are escaped.\n\t   *     * `\"` - the value will be quoted with a double quote and double quotes are escaped.\n\t   *   * preferCurrentQuoteMark {boolean} - if true, prefer the source quote mark\n\t   *     over the quoteMark option value.\n\t   *   * smart {boolean} - if true, will select a quote mark based on the value\n\t   *     and the other options specified here. See the `smartQuoteMark()`\n\t   *     method.\n\t   **/\n\n\n\t  var _proto = Attribute.prototype;\n\n\t  _proto.getQuotedValue = function getQuotedValue(options) {\n\t    if (options === void 0) {\n\t      options = {};\n\t    }\n\n\t    var quoteMark = this._determineQuoteMark(options);\n\n\t    var cssescopts = CSSESC_QUOTE_OPTIONS[quoteMark];\n\t    var escaped = (0, _cssesc[\"default\"])(this._value, cssescopts);\n\t    return escaped;\n\t  };\n\n\t  _proto._determineQuoteMark = function _determineQuoteMark(options) {\n\t    return options.smart ? this.smartQuoteMark(options) : this.preferredQuoteMark(options);\n\t  }\n\t  /**\n\t   * Set the unescaped value with the specified quotation options. The value\n\t   * provided must not include any wrapping quote marks -- those quotes will\n\t   * be interpreted as part of the value and escaped accordingly.\n\t   */\n\t  ;\n\n\t  _proto.setValue = function setValue(value, options) {\n\t    if (options === void 0) {\n\t      options = {};\n\t    }\n\n\t    this._value = value;\n\t    this._quoteMark = this._determineQuoteMark(options);\n\n\t    this._syncRawValue();\n\t  }\n\t  /**\n\t   * Intelligently select a quoteMark value based on the value's contents. If\n\t   * the value is a legal CSS ident, it will not be quoted. Otherwise a quote\n\t   * mark will be picked that minimizes the number of escapes.\n\t   *\n\t   * If there's no clear winner, the quote mark from these options is used,\n\t   * then the source quote mark (this is inverted if `preferCurrentQuoteMark` is\n\t   * true). If the quoteMark is unspecified, a double quote is used.\n\t   *\n\t   * @param options This takes the quoteMark and preferCurrentQuoteMark options\n\t   * from the quoteValue method.\n\t   */\n\t  ;\n\n\t  _proto.smartQuoteMark = function smartQuoteMark(options) {\n\t    var v = this.value;\n\t    var numSingleQuotes = v.replace(/[^']/g, '').length;\n\t    var numDoubleQuotes = v.replace(/[^\"]/g, '').length;\n\n\t    if (numSingleQuotes + numDoubleQuotes === 0) {\n\t      var escaped = (0, _cssesc[\"default\"])(v, {\n\t        isIdentifier: true\n\t      });\n\n\t      if (escaped === v) {\n\t        return Attribute.NO_QUOTE;\n\t      } else {\n\t        var pref = this.preferredQuoteMark(options);\n\n\t        if (pref === Attribute.NO_QUOTE) {\n\t          // pick a quote mark that isn't none and see if it's smaller\n\t          var quote = this.quoteMark || options.quoteMark || Attribute.DOUBLE_QUOTE;\n\t          var opts = CSSESC_QUOTE_OPTIONS[quote];\n\t          var quoteValue = (0, _cssesc[\"default\"])(v, opts);\n\n\t          if (quoteValue.length < escaped.length) {\n\t            return quote;\n\t          }\n\t        }\n\n\t        return pref;\n\t      }\n\t    } else if (numDoubleQuotes === numSingleQuotes) {\n\t      return this.preferredQuoteMark(options);\n\t    } else if (numDoubleQuotes < numSingleQuotes) {\n\t      return Attribute.DOUBLE_QUOTE;\n\t    } else {\n\t      return Attribute.SINGLE_QUOTE;\n\t    }\n\t  }\n\t  /**\n\t   * Selects the preferred quote mark based on the options and the current quote mark value.\n\t   * If you want the quote mark to depend on the attribute value, call `smartQuoteMark(opts)`\n\t   * instead.\n\t   */\n\t  ;\n\n\t  _proto.preferredQuoteMark = function preferredQuoteMark(options) {\n\t    var quoteMark = options.preferCurrentQuoteMark ? this.quoteMark : options.quoteMark;\n\n\t    if (quoteMark === undefined) {\n\t      quoteMark = options.preferCurrentQuoteMark ? options.quoteMark : this.quoteMark;\n\t    }\n\n\t    if (quoteMark === undefined) {\n\t      quoteMark = Attribute.DOUBLE_QUOTE;\n\t    }\n\n\t    return quoteMark;\n\t  };\n\n\t  _proto._syncRawValue = function _syncRawValue() {\n\t    var rawValue = (0, _cssesc[\"default\"])(this._value, CSSESC_QUOTE_OPTIONS[this.quoteMark]);\n\n\t    if (rawValue === this._value) {\n\t      if (this.raws) {\n\t        delete this.raws.value;\n\t      }\n\t    } else {\n\t      this.raws.value = rawValue;\n\t    }\n\t  };\n\n\t  _proto._handleEscapes = function _handleEscapes(prop, value) {\n\t    if (this._constructed) {\n\t      var escaped = (0, _cssesc[\"default\"])(value, {\n\t        isIdentifier: true\n\t      });\n\n\t      if (escaped !== value) {\n\t        this.raws[prop] = escaped;\n\t      } else {\n\t        delete this.raws[prop];\n\t      }\n\t    }\n\t  };\n\n\t  _proto._spacesFor = function _spacesFor(name) {\n\t    var attrSpaces = {\n\t      before: '',\n\t      after: ''\n\t    };\n\t    var spaces = this.spaces[name] || {};\n\t    var rawSpaces = this.raws.spaces && this.raws.spaces[name] || {};\n\t    return Object.assign(attrSpaces, spaces, rawSpaces);\n\t  };\n\n\t  _proto._stringFor = function _stringFor(name, spaceName, concat) {\n\t    if (spaceName === void 0) {\n\t      spaceName = name;\n\t    }\n\n\t    if (concat === void 0) {\n\t      concat = defaultAttrConcat;\n\t    }\n\n\t    var attrSpaces = this._spacesFor(spaceName);\n\n\t    return concat(this.stringifyProperty(name), attrSpaces);\n\t  }\n\t  /**\n\t   * returns the offset of the attribute part specified relative to the\n\t   * start of the node of the output string.\n\t   *\n\t   * * \"ns\" - alias for \"namespace\"\n\t   * * \"namespace\" - the namespace if it exists.\n\t   * * \"attribute\" - the attribute name\n\t   * * \"attributeNS\" - the start of the attribute or its namespace\n\t   * * \"operator\" - the match operator of the attribute\n\t   * * \"value\" - The value (string or identifier)\n\t   * * \"insensitive\" - the case insensitivity flag;\n\t   * @param part One of the possible values inside an attribute.\n\t   * @returns -1 if the name is invalid or the value doesn't exist in this attribute.\n\t   */\n\t  ;\n\n\t  _proto.offsetOf = function offsetOf(name) {\n\t    var count = 1;\n\n\t    var attributeSpaces = this._spacesFor(\"attribute\");\n\n\t    count += attributeSpaces.before.length;\n\n\t    if (name === \"namespace\" || name === \"ns\") {\n\t      return this.namespace ? count : -1;\n\t    }\n\n\t    if (name === \"attributeNS\") {\n\t      return count;\n\t    }\n\n\t    count += this.namespaceString.length;\n\n\t    if (this.namespace) {\n\t      count += 1;\n\t    }\n\n\t    if (name === \"attribute\") {\n\t      return count;\n\t    }\n\n\t    count += this.stringifyProperty(\"attribute\").length;\n\t    count += attributeSpaces.after.length;\n\n\t    var operatorSpaces = this._spacesFor(\"operator\");\n\n\t    count += operatorSpaces.before.length;\n\t    var operator = this.stringifyProperty(\"operator\");\n\n\t    if (name === \"operator\") {\n\t      return operator ? count : -1;\n\t    }\n\n\t    count += operator.length;\n\t    count += operatorSpaces.after.length;\n\n\t    var valueSpaces = this._spacesFor(\"value\");\n\n\t    count += valueSpaces.before.length;\n\t    var value = this.stringifyProperty(\"value\");\n\n\t    if (name === \"value\") {\n\t      return value ? count : -1;\n\t    }\n\n\t    count += value.length;\n\t    count += valueSpaces.after.length;\n\n\t    var insensitiveSpaces = this._spacesFor(\"insensitive\");\n\n\t    count += insensitiveSpaces.before.length;\n\n\t    if (name === \"insensitive\") {\n\t      return this.insensitive ? count : -1;\n\t    }\n\n\t    return -1;\n\t  };\n\n\t  _proto.toString = function toString() {\n\t    var _this2 = this;\n\n\t    var selector = [this.rawSpaceBefore, '['];\n\t    selector.push(this._stringFor('qualifiedAttribute', 'attribute'));\n\n\t    if (this.operator && (this.value || this.value === '')) {\n\t      selector.push(this._stringFor('operator'));\n\t      selector.push(this._stringFor('value'));\n\t      selector.push(this._stringFor('insensitiveFlag', 'insensitive', function (attrValue, attrSpaces) {\n\t        if (attrValue.length > 0 && !_this2.quoted && attrSpaces.before.length === 0 && !(_this2.spaces.value && _this2.spaces.value.after)) {\n\t          attrSpaces.before = \" \";\n\t        }\n\n\t        return defaultAttrConcat(attrValue, attrSpaces);\n\t      }));\n\t    }\n\n\t    selector.push(']');\n\t    selector.push(this.rawSpaceAfter);\n\t    return selector.join('');\n\t  };\n\n\t  _createClass(Attribute, [{\n\t    key: \"quoted\",\n\t    get: function get() {\n\t      var qm = this.quoteMark;\n\t      return qm === \"'\" || qm === '\"';\n\t    },\n\t    set: function set(value) {\n\t      warnOfDeprecatedQuotedAssignment();\n\t    }\n\t    /**\n\t     * returns a single (`'`) or double (`\"`) quote character if the value is quoted.\n\t     * returns `null` if the value is not quoted.\n\t     * returns `undefined` if the quotation state is unknown (this can happen when\n\t     * the attribute is constructed without specifying a quote mark.)\n\t     */\n\n\t  }, {\n\t    key: \"quoteMark\",\n\t    get: function get() {\n\t      return this._quoteMark;\n\t    }\n\t    /**\n\t     * Set the quote mark to be used by this attribute's value.\n\t     * If the quote mark changes, the raw (escaped) value at `attr.raws.value` of the attribute\n\t     * value is updated accordingly.\n\t     *\n\t     * @param {\"'\" | '\"' | null} quoteMark The quote mark or `null` if the value should be unquoted.\n\t     */\n\t    ,\n\t    set: function set(quoteMark) {\n\t      if (!this._constructed) {\n\t        this._quoteMark = quoteMark;\n\t        return;\n\t      }\n\n\t      if (this._quoteMark !== quoteMark) {\n\t        this._quoteMark = quoteMark;\n\n\t        this._syncRawValue();\n\t      }\n\t    }\n\t  }, {\n\t    key: \"qualifiedAttribute\",\n\t    get: function get() {\n\t      return this.qualifiedName(this.raws.attribute || this.attribute);\n\t    }\n\t  }, {\n\t    key: \"insensitiveFlag\",\n\t    get: function get() {\n\t      return this.insensitive ? 'i' : '';\n\t    }\n\t  }, {\n\t    key: \"value\",\n\t    get: function get() {\n\t      return this._value;\n\t    }\n\t    /**\n\t     * Before 3.0, the value had to be set to an escaped value including any wrapped\n\t     * quote marks. In 3.0, the semantics of `Attribute.value` changed so that the value\n\t     * is unescaped during parsing and any quote marks are removed.\n\t     *\n\t     * Because the ambiguity of this semantic change, if you set `attr.value = newValue`,\n\t     * a deprecation warning is raised when the new value contains any characters that would\n\t     * require escaping (including if it contains wrapped quotes).\n\t     *\n\t     * Instead, you should call `attr.setValue(newValue, opts)` and pass options that describe\n\t     * how the new value is quoted.\n\t     */\n\t    ,\n\t    set: function set(v) {\n\t      if (this._constructed) {\n\t        var _unescapeValue2 = unescapeValue(v),\n\t            deprecatedUsage = _unescapeValue2.deprecatedUsage,\n\t            unescaped = _unescapeValue2.unescaped,\n\t            quoteMark = _unescapeValue2.quoteMark;\n\n\t        if (deprecatedUsage) {\n\t          warnOfDeprecatedValueAssignment();\n\t        }\n\n\t        if (unescaped === this._value && quoteMark === this._quoteMark) {\n\t          return;\n\t        }\n\n\t        this._value = unescaped;\n\t        this._quoteMark = quoteMark;\n\n\t        this._syncRawValue();\n\t      } else {\n\t        this._value = v;\n\t      }\n\t    }\n\t  }, {\n\t    key: \"attribute\",\n\t    get: function get() {\n\t      return this._attribute;\n\t    },\n\t    set: function set(name) {\n\t      this._handleEscapes(\"attribute\", name);\n\n\t      this._attribute = name;\n\t    }\n\t  }]);\n\n\t  return Attribute;\n\t}(_namespace[\"default\"]);\n\n\texports[\"default\"] = Attribute;\n\tAttribute.NO_QUOTE = null;\n\tAttribute.SINGLE_QUOTE = \"'\";\n\tAttribute.DOUBLE_QUOTE = '\"';\n\tvar CSSESC_QUOTE_OPTIONS = (_CSSESC_QUOTE_OPTIONS = {\n\t  \"'\": {\n\t    quotes: 'single',\n\t    wrap: true\n\t  },\n\t  '\"': {\n\t    quotes: 'double',\n\t    wrap: true\n\t  }\n\t}, _CSSESC_QUOTE_OPTIONS[null] = {\n\t  isIdentifier: true\n\t}, _CSSESC_QUOTE_OPTIONS);\n\n\tfunction defaultAttrConcat(attrValue, attrSpaces) {\n\t  return \"\" + attrSpaces.before + attrValue + attrSpaces.after;\n\t}\n} (attribute$1));\n\nvar universal$1 = {exports: {}};\n\n(function (module, exports) {\n\n\texports.__esModule = true;\n\texports[\"default\"] = void 0;\n\n\tvar _namespace = _interopRequireDefault(namespace.exports);\n\n\tvar _types = types;\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\n\tfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\n\tfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\n\tvar Universal = /*#__PURE__*/function (_Namespace) {\n\t  _inheritsLoose(Universal, _Namespace);\n\n\t  function Universal(opts) {\n\t    var _this;\n\n\t    _this = _Namespace.call(this, opts) || this;\n\t    _this.type = _types.UNIVERSAL;\n\t    _this.value = '*';\n\t    return _this;\n\t  }\n\n\t  return Universal;\n\t}(_namespace[\"default\"]);\n\n\texports[\"default\"] = Universal;\n\tmodule.exports = exports.default;\n} (universal$1, universal$1.exports));\n\nvar combinator$2 = {exports: {}};\n\n(function (module, exports) {\n\n\texports.__esModule = true;\n\texports[\"default\"] = void 0;\n\n\tvar _node = _interopRequireDefault(node$1.exports);\n\n\tvar _types = types;\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\n\tfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\n\tfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\n\tvar Combinator = /*#__PURE__*/function (_Node) {\n\t  _inheritsLoose(Combinator, _Node);\n\n\t  function Combinator(opts) {\n\t    var _this;\n\n\t    _this = _Node.call(this, opts) || this;\n\t    _this.type = _types.COMBINATOR;\n\t    return _this;\n\t  }\n\n\t  return Combinator;\n\t}(_node[\"default\"]);\n\n\texports[\"default\"] = Combinator;\n\tmodule.exports = exports.default;\n} (combinator$2, combinator$2.exports));\n\nvar nesting$1 = {exports: {}};\n\n(function (module, exports) {\n\n\texports.__esModule = true;\n\texports[\"default\"] = void 0;\n\n\tvar _node = _interopRequireDefault(node$1.exports);\n\n\tvar _types = types;\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\n\tfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\n\tfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\n\tvar Nesting = /*#__PURE__*/function (_Node) {\n\t  _inheritsLoose(Nesting, _Node);\n\n\t  function Nesting(opts) {\n\t    var _this;\n\n\t    _this = _Node.call(this, opts) || this;\n\t    _this.type = _types.NESTING;\n\t    _this.value = '&';\n\t    return _this;\n\t  }\n\n\t  return Nesting;\n\t}(_node[\"default\"]);\n\n\texports[\"default\"] = Nesting;\n\tmodule.exports = exports.default;\n} (nesting$1, nesting$1.exports));\n\nvar sortAscending = {exports: {}};\n\n(function (module, exports) {\n\n\texports.__esModule = true;\n\texports[\"default\"] = sortAscending;\n\n\tfunction sortAscending(list) {\n\t  return list.sort(function (a, b) {\n\t    return a - b;\n\t  });\n\t}\n\tmodule.exports = exports.default;\n} (sortAscending, sortAscending.exports));\n\nvar tokenize = {};\n\nvar tokenTypes = {};\n\ntokenTypes.__esModule = true;\ntokenTypes.combinator = tokenTypes.word = tokenTypes.comment = tokenTypes.str = tokenTypes.tab = tokenTypes.newline = tokenTypes.feed = tokenTypes.cr = tokenTypes.backslash = tokenTypes.bang = tokenTypes.slash = tokenTypes.doubleQuote = tokenTypes.singleQuote = tokenTypes.space = tokenTypes.greaterThan = tokenTypes.pipe = tokenTypes.equals = tokenTypes.plus = tokenTypes.caret = tokenTypes.tilde = tokenTypes.dollar = tokenTypes.closeSquare = tokenTypes.openSquare = tokenTypes.closeParenthesis = tokenTypes.openParenthesis = tokenTypes.semicolon = tokenTypes.colon = tokenTypes.comma = tokenTypes.at = tokenTypes.asterisk = tokenTypes.ampersand = void 0;\nvar ampersand = 38; // `&`.charCodeAt(0);\n\ntokenTypes.ampersand = ampersand;\nvar asterisk = 42; // `*`.charCodeAt(0);\n\ntokenTypes.asterisk = asterisk;\nvar at = 64; // `@`.charCodeAt(0);\n\ntokenTypes.at = at;\nvar comma = 44; // `,`.charCodeAt(0);\n\ntokenTypes.comma = comma;\nvar colon = 58; // `:`.charCodeAt(0);\n\ntokenTypes.colon = colon;\nvar semicolon = 59; // `;`.charCodeAt(0);\n\ntokenTypes.semicolon = semicolon;\nvar openParenthesis = 40; // `(`.charCodeAt(0);\n\ntokenTypes.openParenthesis = openParenthesis;\nvar closeParenthesis = 41; // `)`.charCodeAt(0);\n\ntokenTypes.closeParenthesis = closeParenthesis;\nvar openSquare = 91; // `[`.charCodeAt(0);\n\ntokenTypes.openSquare = openSquare;\nvar closeSquare = 93; // `]`.charCodeAt(0);\n\ntokenTypes.closeSquare = closeSquare;\nvar dollar = 36; // `$`.charCodeAt(0);\n\ntokenTypes.dollar = dollar;\nvar tilde = 126; // `~`.charCodeAt(0);\n\ntokenTypes.tilde = tilde;\nvar caret = 94; // `^`.charCodeAt(0);\n\ntokenTypes.caret = caret;\nvar plus = 43; // `+`.charCodeAt(0);\n\ntokenTypes.plus = plus;\nvar equals = 61; // `=`.charCodeAt(0);\n\ntokenTypes.equals = equals;\nvar pipe = 124; // `|`.charCodeAt(0);\n\ntokenTypes.pipe = pipe;\nvar greaterThan = 62; // `>`.charCodeAt(0);\n\ntokenTypes.greaterThan = greaterThan;\nvar space = 32; // ` `.charCodeAt(0);\n\ntokenTypes.space = space;\nvar singleQuote = 39; // `'`.charCodeAt(0);\n\ntokenTypes.singleQuote = singleQuote;\nvar doubleQuote = 34; // `\"`.charCodeAt(0);\n\ntokenTypes.doubleQuote = doubleQuote;\nvar slash = 47; // `/`.charCodeAt(0);\n\ntokenTypes.slash = slash;\nvar bang = 33; // `!`.charCodeAt(0);\n\ntokenTypes.bang = bang;\nvar backslash = 92; // '\\\\'.charCodeAt(0);\n\ntokenTypes.backslash = backslash;\nvar cr = 13; // '\\r'.charCodeAt(0);\n\ntokenTypes.cr = cr;\nvar feed = 12; // '\\f'.charCodeAt(0);\n\ntokenTypes.feed = feed;\nvar newline = 10; // '\\n'.charCodeAt(0);\n\ntokenTypes.newline = newline;\nvar tab = 9; // '\\t'.charCodeAt(0);\n// Expose aliases primarily for readability.\n\ntokenTypes.tab = tab;\nvar str = singleQuote; // No good single character representation!\n\ntokenTypes.str = str;\nvar comment$1 = -1;\ntokenTypes.comment = comment$1;\nvar word = -2;\ntokenTypes.word = word;\nvar combinator$1 = -3;\ntokenTypes.combinator = combinator$1;\n\n(function (exports) {\n\n\texports.__esModule = true;\n\texports[\"default\"] = tokenize;\n\texports.FIELDS = void 0;\n\n\tvar t = _interopRequireWildcard(tokenTypes);\n\n\tvar _unescapable, _wordDelimiters;\n\n\tfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }\n\n\tfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") { return { \"default\": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (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; }\n\n\tvar unescapable = (_unescapable = {}, _unescapable[t.tab] = true, _unescapable[t.newline] = true, _unescapable[t.cr] = true, _unescapable[t.feed] = true, _unescapable);\n\tvar wordDelimiters = (_wordDelimiters = {}, _wordDelimiters[t.space] = true, _wordDelimiters[t.tab] = true, _wordDelimiters[t.newline] = true, _wordDelimiters[t.cr] = true, _wordDelimiters[t.feed] = true, _wordDelimiters[t.ampersand] = true, _wordDelimiters[t.asterisk] = true, _wordDelimiters[t.bang] = true, _wordDelimiters[t.comma] = true, _wordDelimiters[t.colon] = true, _wordDelimiters[t.semicolon] = true, _wordDelimiters[t.openParenthesis] = true, _wordDelimiters[t.closeParenthesis] = true, _wordDelimiters[t.openSquare] = true, _wordDelimiters[t.closeSquare] = true, _wordDelimiters[t.singleQuote] = true, _wordDelimiters[t.doubleQuote] = true, _wordDelimiters[t.plus] = true, _wordDelimiters[t.pipe] = true, _wordDelimiters[t.tilde] = true, _wordDelimiters[t.greaterThan] = true, _wordDelimiters[t.equals] = true, _wordDelimiters[t.dollar] = true, _wordDelimiters[t.caret] = true, _wordDelimiters[t.slash] = true, _wordDelimiters);\n\tvar hex = {};\n\tvar hexChars = \"0123456789abcdefABCDEF\";\n\n\tfor (var i = 0; i < hexChars.length; i++) {\n\t  hex[hexChars.charCodeAt(i)] = true;\n\t}\n\t/**\n\t *  Returns the last index of the bar css word\n\t * @param {string} css The string in which the word begins\n\t * @param {number} start The index into the string where word's first letter occurs\n\t */\n\n\n\tfunction consumeWord(css, start) {\n\t  var next = start;\n\t  var code;\n\n\t  do {\n\t    code = css.charCodeAt(next);\n\n\t    if (wordDelimiters[code]) {\n\t      return next - 1;\n\t    } else if (code === t.backslash) {\n\t      next = consumeEscape(css, next) + 1;\n\t    } else {\n\t      // All other characters are part of the word\n\t      next++;\n\t    }\n\t  } while (next < css.length);\n\n\t  return next - 1;\n\t}\n\t/**\n\t *  Returns the last index of the escape sequence\n\t * @param {string} css The string in which the sequence begins\n\t * @param {number} start The index into the string where escape character (`\\`) occurs.\n\t */\n\n\n\tfunction consumeEscape(css, start) {\n\t  var next = start;\n\t  var code = css.charCodeAt(next + 1);\n\n\t  if (unescapable[code]) ; else if (hex[code]) {\n\t    var hexDigits = 0; // consume up to 6 hex chars\n\n\t    do {\n\t      next++;\n\t      hexDigits++;\n\t      code = css.charCodeAt(next + 1);\n\t    } while (hex[code] && hexDigits < 6); // if fewer than 6 hex chars, a trailing space ends the escape\n\n\n\t    if (hexDigits < 6 && code === t.space) {\n\t      next++;\n\t    }\n\t  } else {\n\t    // the next char is part of the current word\n\t    next++;\n\t  }\n\n\t  return next;\n\t}\n\n\tvar FIELDS = {\n\t  TYPE: 0,\n\t  START_LINE: 1,\n\t  START_COL: 2,\n\t  END_LINE: 3,\n\t  END_COL: 4,\n\t  START_POS: 5,\n\t  END_POS: 6\n\t};\n\texports.FIELDS = FIELDS;\n\n\tfunction tokenize(input) {\n\t  var tokens = [];\n\t  var css = input.css.valueOf();\n\t  var _css = css,\n\t      length = _css.length;\n\t  var offset = -1;\n\t  var line = 1;\n\t  var start = 0;\n\t  var end = 0;\n\t  var code, content, endColumn, endLine, escaped, escapePos, last, lines, next, nextLine, nextOffset, quote, tokenType;\n\n\t  function unclosed(what, fix) {\n\t    if (input.safe) {\n\t      // fyi: this is never set to true.\n\t      css += fix;\n\t      next = css.length - 1;\n\t    } else {\n\t      throw input.error('Unclosed ' + what, line, start - offset, start);\n\t    }\n\t  }\n\n\t  while (start < length) {\n\t    code = css.charCodeAt(start);\n\n\t    if (code === t.newline) {\n\t      offset = start;\n\t      line += 1;\n\t    }\n\n\t    switch (code) {\n\t      case t.space:\n\t      case t.tab:\n\t      case t.newline:\n\t      case t.cr:\n\t      case t.feed:\n\t        next = start;\n\n\t        do {\n\t          next += 1;\n\t          code = css.charCodeAt(next);\n\n\t          if (code === t.newline) {\n\t            offset = next;\n\t            line += 1;\n\t          }\n\t        } while (code === t.space || code === t.newline || code === t.tab || code === t.cr || code === t.feed);\n\n\t        tokenType = t.space;\n\t        endLine = line;\n\t        endColumn = next - offset - 1;\n\t        end = next;\n\t        break;\n\n\t      case t.plus:\n\t      case t.greaterThan:\n\t      case t.tilde:\n\t      case t.pipe:\n\t        next = start;\n\n\t        do {\n\t          next += 1;\n\t          code = css.charCodeAt(next);\n\t        } while (code === t.plus || code === t.greaterThan || code === t.tilde || code === t.pipe);\n\n\t        tokenType = t.combinator;\n\t        endLine = line;\n\t        endColumn = start - offset;\n\t        end = next;\n\t        break;\n\t      // Consume these characters as single tokens.\n\n\t      case t.asterisk:\n\t      case t.ampersand:\n\t      case t.bang:\n\t      case t.comma:\n\t      case t.equals:\n\t      case t.dollar:\n\t      case t.caret:\n\t      case t.openSquare:\n\t      case t.closeSquare:\n\t      case t.colon:\n\t      case t.semicolon:\n\t      case t.openParenthesis:\n\t      case t.closeParenthesis:\n\t        next = start;\n\t        tokenType = code;\n\t        endLine = line;\n\t        endColumn = start - offset;\n\t        end = next + 1;\n\t        break;\n\n\t      case t.singleQuote:\n\t      case t.doubleQuote:\n\t        quote = code === t.singleQuote ? \"'\" : '\"';\n\t        next = start;\n\n\t        do {\n\t          escaped = false;\n\t          next = css.indexOf(quote, next + 1);\n\n\t          if (next === -1) {\n\t            unclosed('quote', quote);\n\t          }\n\n\t          escapePos = next;\n\n\t          while (css.charCodeAt(escapePos - 1) === t.backslash) {\n\t            escapePos -= 1;\n\t            escaped = !escaped;\n\t          }\n\t        } while (escaped);\n\n\t        tokenType = t.str;\n\t        endLine = line;\n\t        endColumn = start - offset;\n\t        end = next + 1;\n\t        break;\n\n\t      default:\n\t        if (code === t.slash && css.charCodeAt(start + 1) === t.asterisk) {\n\t          next = css.indexOf('*/', start + 2) + 1;\n\n\t          if (next === 0) {\n\t            unclosed('comment', '*/');\n\t          }\n\n\t          content = css.slice(start, next + 1);\n\t          lines = content.split('\\n');\n\t          last = lines.length - 1;\n\n\t          if (last > 0) {\n\t            nextLine = line + last;\n\t            nextOffset = next - lines[last].length;\n\t          } else {\n\t            nextLine = line;\n\t            nextOffset = offset;\n\t          }\n\n\t          tokenType = t.comment;\n\t          line = nextLine;\n\t          endLine = nextLine;\n\t          endColumn = next - nextOffset;\n\t        } else if (code === t.slash) {\n\t          next = start;\n\t          tokenType = code;\n\t          endLine = line;\n\t          endColumn = start - offset;\n\t          end = next + 1;\n\t        } else {\n\t          next = consumeWord(css, start);\n\t          tokenType = t.word;\n\t          endLine = line;\n\t          endColumn = next - offset;\n\t        }\n\n\t        end = next + 1;\n\t        break;\n\t    } // Ensure that the token structure remains consistent\n\n\n\t    tokens.push([tokenType, // [0] Token type\n\t    line, // [1] Starting line\n\t    start - offset, // [2] Starting column\n\t    endLine, // [3] Ending line\n\t    endColumn, // [4] Ending column\n\t    start, // [5] Start position / Source index\n\t    end // [6] End position\n\t    ]); // Reset offset for the next token\n\n\t    if (nextOffset) {\n\t      offset = nextOffset;\n\t      nextOffset = null;\n\t    }\n\n\t    start = end;\n\t  }\n\n\t  return tokens;\n\t}\n} (tokenize));\n\n(function (module, exports) {\n\n\texports.__esModule = true;\n\texports[\"default\"] = void 0;\n\n\tvar _root = _interopRequireDefault(root$1.exports);\n\n\tvar _selector = _interopRequireDefault(selector$1.exports);\n\n\tvar _className = _interopRequireDefault(className$1.exports);\n\n\tvar _comment = _interopRequireDefault(comment$2.exports);\n\n\tvar _id = _interopRequireDefault(id$1.exports);\n\n\tvar _tag = _interopRequireDefault(tag$1.exports);\n\n\tvar _string = _interopRequireDefault(string$1.exports);\n\n\tvar _pseudo = _interopRequireDefault(pseudo$1.exports);\n\n\tvar _attribute = _interopRequireWildcard(attribute$1);\n\n\tvar _universal = _interopRequireDefault(universal$1.exports);\n\n\tvar _combinator = _interopRequireDefault(combinator$2.exports);\n\n\tvar _nesting = _interopRequireDefault(nesting$1.exports);\n\n\tvar _sortAscending = _interopRequireDefault(sortAscending.exports);\n\n\tvar _tokenize = _interopRequireWildcard(tokenize);\n\n\tvar tokens = _interopRequireWildcard(tokenTypes);\n\n\tvar types$1 = _interopRequireWildcard(types);\n\n\tvar _util = util;\n\n\tvar _WHITESPACE_TOKENS, _Object$assign;\n\n\tfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }\n\n\tfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") { return { \"default\": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (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; }\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\n\tfunction _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); } }\n\n\tfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n\tvar WHITESPACE_TOKENS = (_WHITESPACE_TOKENS = {}, _WHITESPACE_TOKENS[tokens.space] = true, _WHITESPACE_TOKENS[tokens.cr] = true, _WHITESPACE_TOKENS[tokens.feed] = true, _WHITESPACE_TOKENS[tokens.newline] = true, _WHITESPACE_TOKENS[tokens.tab] = true, _WHITESPACE_TOKENS);\n\tvar WHITESPACE_EQUIV_TOKENS = Object.assign({}, WHITESPACE_TOKENS, (_Object$assign = {}, _Object$assign[tokens.comment] = true, _Object$assign));\n\n\tfunction tokenStart(token) {\n\t  return {\n\t    line: token[_tokenize.FIELDS.START_LINE],\n\t    column: token[_tokenize.FIELDS.START_COL]\n\t  };\n\t}\n\n\tfunction tokenEnd(token) {\n\t  return {\n\t    line: token[_tokenize.FIELDS.END_LINE],\n\t    column: token[_tokenize.FIELDS.END_COL]\n\t  };\n\t}\n\n\tfunction getSource(startLine, startColumn, endLine, endColumn) {\n\t  return {\n\t    start: {\n\t      line: startLine,\n\t      column: startColumn\n\t    },\n\t    end: {\n\t      line: endLine,\n\t      column: endColumn\n\t    }\n\t  };\n\t}\n\n\tfunction getTokenSource(token) {\n\t  return getSource(token[_tokenize.FIELDS.START_LINE], token[_tokenize.FIELDS.START_COL], token[_tokenize.FIELDS.END_LINE], token[_tokenize.FIELDS.END_COL]);\n\t}\n\n\tfunction getTokenSourceSpan(startToken, endToken) {\n\t  if (!startToken) {\n\t    return undefined;\n\t  }\n\n\t  return getSource(startToken[_tokenize.FIELDS.START_LINE], startToken[_tokenize.FIELDS.START_COL], endToken[_tokenize.FIELDS.END_LINE], endToken[_tokenize.FIELDS.END_COL]);\n\t}\n\n\tfunction unescapeProp(node, prop) {\n\t  var value = node[prop];\n\n\t  if (typeof value !== \"string\") {\n\t    return;\n\t  }\n\n\t  if (value.indexOf(\"\\\\\") !== -1) {\n\t    (0, _util.ensureObject)(node, 'raws');\n\t    node[prop] = (0, _util.unesc)(value);\n\n\t    if (node.raws[prop] === undefined) {\n\t      node.raws[prop] = value;\n\t    }\n\t  }\n\n\t  return node;\n\t}\n\n\tfunction indexesOf(array, item) {\n\t  var i = -1;\n\t  var indexes = [];\n\n\t  while ((i = array.indexOf(item, i + 1)) !== -1) {\n\t    indexes.push(i);\n\t  }\n\n\t  return indexes;\n\t}\n\n\tfunction uniqs() {\n\t  var list = Array.prototype.concat.apply([], arguments);\n\t  return list.filter(function (item, i) {\n\t    return i === list.indexOf(item);\n\t  });\n\t}\n\n\tvar Parser = /*#__PURE__*/function () {\n\t  function Parser(rule, options) {\n\t    if (options === void 0) {\n\t      options = {};\n\t    }\n\n\t    this.rule = rule;\n\t    this.options = Object.assign({\n\t      lossy: false,\n\t      safe: false\n\t    }, options);\n\t    this.position = 0;\n\t    this.css = typeof this.rule === 'string' ? this.rule : this.rule.selector;\n\t    this.tokens = (0, _tokenize[\"default\"])({\n\t      css: this.css,\n\t      error: this._errorGenerator(),\n\t      safe: this.options.safe\n\t    });\n\t    var rootSource = getTokenSourceSpan(this.tokens[0], this.tokens[this.tokens.length - 1]);\n\t    this.root = new _root[\"default\"]({\n\t      source: rootSource\n\t    });\n\t    this.root.errorGenerator = this._errorGenerator();\n\t    var selector = new _selector[\"default\"]({\n\t      source: {\n\t        start: {\n\t          line: 1,\n\t          column: 1\n\t        }\n\t      }\n\t    });\n\t    this.root.append(selector);\n\t    this.current = selector;\n\t    this.loop();\n\t  }\n\n\t  var _proto = Parser.prototype;\n\n\t  _proto._errorGenerator = function _errorGenerator() {\n\t    var _this = this;\n\n\t    return function (message, errorOptions) {\n\t      if (typeof _this.rule === 'string') {\n\t        return new Error(message);\n\t      }\n\n\t      return _this.rule.error(message, errorOptions);\n\t    };\n\t  };\n\n\t  _proto.attribute = function attribute() {\n\t    var attr = [];\n\t    var startingToken = this.currToken;\n\t    this.position++;\n\n\t    while (this.position < this.tokens.length && this.currToken[_tokenize.FIELDS.TYPE] !== tokens.closeSquare) {\n\t      attr.push(this.currToken);\n\t      this.position++;\n\t    }\n\n\t    if (this.currToken[_tokenize.FIELDS.TYPE] !== tokens.closeSquare) {\n\t      return this.expected('closing square bracket', this.currToken[_tokenize.FIELDS.START_POS]);\n\t    }\n\n\t    var len = attr.length;\n\t    var node = {\n\t      source: getSource(startingToken[1], startingToken[2], this.currToken[3], this.currToken[4]),\n\t      sourceIndex: startingToken[_tokenize.FIELDS.START_POS]\n\t    };\n\n\t    if (len === 1 && !~[tokens.word].indexOf(attr[0][_tokenize.FIELDS.TYPE])) {\n\t      return this.expected('attribute', attr[0][_tokenize.FIELDS.START_POS]);\n\t    }\n\n\t    var pos = 0;\n\t    var spaceBefore = '';\n\t    var commentBefore = '';\n\t    var lastAdded = null;\n\t    var spaceAfterMeaningfulToken = false;\n\n\t    while (pos < len) {\n\t      var token = attr[pos];\n\t      var content = this.content(token);\n\t      var next = attr[pos + 1];\n\n\t      switch (token[_tokenize.FIELDS.TYPE]) {\n\t        case tokens.space:\n\t          // if (\n\t          //     len === 1 ||\n\t          //     pos === 0 && this.content(next) === '|'\n\t          // ) {\n\t          //     return this.expected('attribute', token[TOKEN.START_POS], content);\n\t          // }\n\t          spaceAfterMeaningfulToken = true;\n\n\t          if (this.options.lossy) {\n\t            break;\n\t          }\n\n\t          if (lastAdded) {\n\t            (0, _util.ensureObject)(node, 'spaces', lastAdded);\n\t            var prevContent = node.spaces[lastAdded].after || '';\n\t            node.spaces[lastAdded].after = prevContent + content;\n\t            var existingComment = (0, _util.getProp)(node, 'raws', 'spaces', lastAdded, 'after') || null;\n\n\t            if (existingComment) {\n\t              node.raws.spaces[lastAdded].after = existingComment + content;\n\t            }\n\t          } else {\n\t            spaceBefore = spaceBefore + content;\n\t            commentBefore = commentBefore + content;\n\t          }\n\n\t          break;\n\n\t        case tokens.asterisk:\n\t          if (next[_tokenize.FIELDS.TYPE] === tokens.equals) {\n\t            node.operator = content;\n\t            lastAdded = 'operator';\n\t          } else if ((!node.namespace || lastAdded === \"namespace\" && !spaceAfterMeaningfulToken) && next) {\n\t            if (spaceBefore) {\n\t              (0, _util.ensureObject)(node, 'spaces', 'attribute');\n\t              node.spaces.attribute.before = spaceBefore;\n\t              spaceBefore = '';\n\t            }\n\n\t            if (commentBefore) {\n\t              (0, _util.ensureObject)(node, 'raws', 'spaces', 'attribute');\n\t              node.raws.spaces.attribute.before = spaceBefore;\n\t              commentBefore = '';\n\t            }\n\n\t            node.namespace = (node.namespace || \"\") + content;\n\t            var rawValue = (0, _util.getProp)(node, 'raws', 'namespace') || null;\n\n\t            if (rawValue) {\n\t              node.raws.namespace += content;\n\t            }\n\n\t            lastAdded = 'namespace';\n\t          }\n\n\t          spaceAfterMeaningfulToken = false;\n\t          break;\n\n\t        case tokens.dollar:\n\t          if (lastAdded === \"value\") {\n\t            var oldRawValue = (0, _util.getProp)(node, 'raws', 'value');\n\t            node.value += \"$\";\n\n\t            if (oldRawValue) {\n\t              node.raws.value = oldRawValue + \"$\";\n\t            }\n\n\t            break;\n\t          }\n\n\t        // Falls through\n\n\t        case tokens.caret:\n\t          if (next[_tokenize.FIELDS.TYPE] === tokens.equals) {\n\t            node.operator = content;\n\t            lastAdded = 'operator';\n\t          }\n\n\t          spaceAfterMeaningfulToken = false;\n\t          break;\n\n\t        case tokens.combinator:\n\t          if (content === '~' && next[_tokenize.FIELDS.TYPE] === tokens.equals) {\n\t            node.operator = content;\n\t            lastAdded = 'operator';\n\t          }\n\n\t          if (content !== '|') {\n\t            spaceAfterMeaningfulToken = false;\n\t            break;\n\t          }\n\n\t          if (next[_tokenize.FIELDS.TYPE] === tokens.equals) {\n\t            node.operator = content;\n\t            lastAdded = 'operator';\n\t          } else if (!node.namespace && !node.attribute) {\n\t            node.namespace = true;\n\t          }\n\n\t          spaceAfterMeaningfulToken = false;\n\t          break;\n\n\t        case tokens.word:\n\t          if (next && this.content(next) === '|' && attr[pos + 2] && attr[pos + 2][_tokenize.FIELDS.TYPE] !== tokens.equals && // this look-ahead probably fails with comment nodes involved.\n\t          !node.operator && !node.namespace) {\n\t            node.namespace = content;\n\t            lastAdded = 'namespace';\n\t          } else if (!node.attribute || lastAdded === \"attribute\" && !spaceAfterMeaningfulToken) {\n\t            if (spaceBefore) {\n\t              (0, _util.ensureObject)(node, 'spaces', 'attribute');\n\t              node.spaces.attribute.before = spaceBefore;\n\t              spaceBefore = '';\n\t            }\n\n\t            if (commentBefore) {\n\t              (0, _util.ensureObject)(node, 'raws', 'spaces', 'attribute');\n\t              node.raws.spaces.attribute.before = commentBefore;\n\t              commentBefore = '';\n\t            }\n\n\t            node.attribute = (node.attribute || \"\") + content;\n\n\t            var _rawValue = (0, _util.getProp)(node, 'raws', 'attribute') || null;\n\n\t            if (_rawValue) {\n\t              node.raws.attribute += content;\n\t            }\n\n\t            lastAdded = 'attribute';\n\t          } else if (!node.value && node.value !== \"\" || lastAdded === \"value\" && !spaceAfterMeaningfulToken) {\n\t            var _unescaped = (0, _util.unesc)(content);\n\n\t            var _oldRawValue = (0, _util.getProp)(node, 'raws', 'value') || '';\n\n\t            var oldValue = node.value || '';\n\t            node.value = oldValue + _unescaped;\n\t            node.quoteMark = null;\n\n\t            if (_unescaped !== content || _oldRawValue) {\n\t              (0, _util.ensureObject)(node, 'raws');\n\t              node.raws.value = (_oldRawValue || oldValue) + content;\n\t            }\n\n\t            lastAdded = 'value';\n\t          } else {\n\t            var insensitive = content === 'i' || content === \"I\";\n\n\t            if ((node.value || node.value === '') && (node.quoteMark || spaceAfterMeaningfulToken)) {\n\t              node.insensitive = insensitive;\n\n\t              if (!insensitive || content === \"I\") {\n\t                (0, _util.ensureObject)(node, 'raws');\n\t                node.raws.insensitiveFlag = content;\n\t              }\n\n\t              lastAdded = 'insensitive';\n\n\t              if (spaceBefore) {\n\t                (0, _util.ensureObject)(node, 'spaces', 'insensitive');\n\t                node.spaces.insensitive.before = spaceBefore;\n\t                spaceBefore = '';\n\t              }\n\n\t              if (commentBefore) {\n\t                (0, _util.ensureObject)(node, 'raws', 'spaces', 'insensitive');\n\t                node.raws.spaces.insensitive.before = commentBefore;\n\t                commentBefore = '';\n\t              }\n\t            } else if (node.value || node.value === '') {\n\t              lastAdded = 'value';\n\t              node.value += content;\n\n\t              if (node.raws.value) {\n\t                node.raws.value += content;\n\t              }\n\t            }\n\t          }\n\n\t          spaceAfterMeaningfulToken = false;\n\t          break;\n\n\t        case tokens.str:\n\t          if (!node.attribute || !node.operator) {\n\t            return this.error(\"Expected an attribute followed by an operator preceding the string.\", {\n\t              index: token[_tokenize.FIELDS.START_POS]\n\t            });\n\t          }\n\n\t          var _unescapeValue = (0, _attribute.unescapeValue)(content),\n\t              unescaped = _unescapeValue.unescaped,\n\t              quoteMark = _unescapeValue.quoteMark;\n\n\t          node.value = unescaped;\n\t          node.quoteMark = quoteMark;\n\t          lastAdded = 'value';\n\t          (0, _util.ensureObject)(node, 'raws');\n\t          node.raws.value = content;\n\t          spaceAfterMeaningfulToken = false;\n\t          break;\n\n\t        case tokens.equals:\n\t          if (!node.attribute) {\n\t            return this.expected('attribute', token[_tokenize.FIELDS.START_POS], content);\n\t          }\n\n\t          if (node.value) {\n\t            return this.error('Unexpected \"=\" found; an operator was already defined.', {\n\t              index: token[_tokenize.FIELDS.START_POS]\n\t            });\n\t          }\n\n\t          node.operator = node.operator ? node.operator + content : content;\n\t          lastAdded = 'operator';\n\t          spaceAfterMeaningfulToken = false;\n\t          break;\n\n\t        case tokens.comment:\n\t          if (lastAdded) {\n\t            if (spaceAfterMeaningfulToken || next && next[_tokenize.FIELDS.TYPE] === tokens.space || lastAdded === 'insensitive') {\n\t              var lastComment = (0, _util.getProp)(node, 'spaces', lastAdded, 'after') || '';\n\t              var rawLastComment = (0, _util.getProp)(node, 'raws', 'spaces', lastAdded, 'after') || lastComment;\n\t              (0, _util.ensureObject)(node, 'raws', 'spaces', lastAdded);\n\t              node.raws.spaces[lastAdded].after = rawLastComment + content;\n\t            } else {\n\t              var lastValue = node[lastAdded] || '';\n\t              var rawLastValue = (0, _util.getProp)(node, 'raws', lastAdded) || lastValue;\n\t              (0, _util.ensureObject)(node, 'raws');\n\t              node.raws[lastAdded] = rawLastValue + content;\n\t            }\n\t          } else {\n\t            commentBefore = commentBefore + content;\n\t          }\n\n\t          break;\n\n\t        default:\n\t          return this.error(\"Unexpected \\\"\" + content + \"\\\" found.\", {\n\t            index: token[_tokenize.FIELDS.START_POS]\n\t          });\n\t      }\n\n\t      pos++;\n\t    }\n\n\t    unescapeProp(node, \"attribute\");\n\t    unescapeProp(node, \"namespace\");\n\t    this.newNode(new _attribute[\"default\"](node));\n\t    this.position++;\n\t  }\n\t  /**\n\t   * return a node containing meaningless garbage up to (but not including) the specified token position.\n\t   * if the token position is negative, all remaining tokens are consumed.\n\t   *\n\t   * This returns an array containing a single string node if all whitespace,\n\t   * otherwise an array of comment nodes with space before and after.\n\t   *\n\t   * These tokens are not added to the current selector, the caller can add them or use them to amend\n\t   * a previous node's space metadata.\n\t   *\n\t   * In lossy mode, this returns only comments.\n\t   */\n\t  ;\n\n\t  _proto.parseWhitespaceEquivalentTokens = function parseWhitespaceEquivalentTokens(stopPosition) {\n\t    if (stopPosition < 0) {\n\t      stopPosition = this.tokens.length;\n\t    }\n\n\t    var startPosition = this.position;\n\t    var nodes = [];\n\t    var space = \"\";\n\t    var lastComment = undefined;\n\n\t    do {\n\t      if (WHITESPACE_TOKENS[this.currToken[_tokenize.FIELDS.TYPE]]) {\n\t        if (!this.options.lossy) {\n\t          space += this.content();\n\t        }\n\t      } else if (this.currToken[_tokenize.FIELDS.TYPE] === tokens.comment) {\n\t        var spaces = {};\n\n\t        if (space) {\n\t          spaces.before = space;\n\t          space = \"\";\n\t        }\n\n\t        lastComment = new _comment[\"default\"]({\n\t          value: this.content(),\n\t          source: getTokenSource(this.currToken),\n\t          sourceIndex: this.currToken[_tokenize.FIELDS.START_POS],\n\t          spaces: spaces\n\t        });\n\t        nodes.push(lastComment);\n\t      }\n\t    } while (++this.position < stopPosition);\n\n\t    if (space) {\n\t      if (lastComment) {\n\t        lastComment.spaces.after = space;\n\t      } else if (!this.options.lossy) {\n\t        var firstToken = this.tokens[startPosition];\n\t        var lastToken = this.tokens[this.position - 1];\n\t        nodes.push(new _string[\"default\"]({\n\t          value: '',\n\t          source: getSource(firstToken[_tokenize.FIELDS.START_LINE], firstToken[_tokenize.FIELDS.START_COL], lastToken[_tokenize.FIELDS.END_LINE], lastToken[_tokenize.FIELDS.END_COL]),\n\t          sourceIndex: firstToken[_tokenize.FIELDS.START_POS],\n\t          spaces: {\n\t            before: space,\n\t            after: ''\n\t          }\n\t        }));\n\t      }\n\t    }\n\n\t    return nodes;\n\t  }\n\t  /**\n\t   * \n\t   * @param {*} nodes \n\t   */\n\t  ;\n\n\t  _proto.convertWhitespaceNodesToSpace = function convertWhitespaceNodesToSpace(nodes, requiredSpace) {\n\t    var _this2 = this;\n\n\t    if (requiredSpace === void 0) {\n\t      requiredSpace = false;\n\t    }\n\n\t    var space = \"\";\n\t    var rawSpace = \"\";\n\t    nodes.forEach(function (n) {\n\t      var spaceBefore = _this2.lossySpace(n.spaces.before, requiredSpace);\n\n\t      var rawSpaceBefore = _this2.lossySpace(n.rawSpaceBefore, requiredSpace);\n\n\t      space += spaceBefore + _this2.lossySpace(n.spaces.after, requiredSpace && spaceBefore.length === 0);\n\t      rawSpace += spaceBefore + n.value + _this2.lossySpace(n.rawSpaceAfter, requiredSpace && rawSpaceBefore.length === 0);\n\t    });\n\n\t    if (rawSpace === space) {\n\t      rawSpace = undefined;\n\t    }\n\n\t    var result = {\n\t      space: space,\n\t      rawSpace: rawSpace\n\t    };\n\t    return result;\n\t  };\n\n\t  _proto.isNamedCombinator = function isNamedCombinator(position) {\n\t    if (position === void 0) {\n\t      position = this.position;\n\t    }\n\n\t    return this.tokens[position + 0] && this.tokens[position + 0][_tokenize.FIELDS.TYPE] === tokens.slash && this.tokens[position + 1] && this.tokens[position + 1][_tokenize.FIELDS.TYPE] === tokens.word && this.tokens[position + 2] && this.tokens[position + 2][_tokenize.FIELDS.TYPE] === tokens.slash;\n\t  };\n\n\t  _proto.namedCombinator = function namedCombinator() {\n\t    if (this.isNamedCombinator()) {\n\t      var nameRaw = this.content(this.tokens[this.position + 1]);\n\t      var name = (0, _util.unesc)(nameRaw).toLowerCase();\n\t      var raws = {};\n\n\t      if (name !== nameRaw) {\n\t        raws.value = \"/\" + nameRaw + \"/\";\n\t      }\n\n\t      var node = new _combinator[\"default\"]({\n\t        value: \"/\" + name + \"/\",\n\t        source: getSource(this.currToken[_tokenize.FIELDS.START_LINE], this.currToken[_tokenize.FIELDS.START_COL], this.tokens[this.position + 2][_tokenize.FIELDS.END_LINE], this.tokens[this.position + 2][_tokenize.FIELDS.END_COL]),\n\t        sourceIndex: this.currToken[_tokenize.FIELDS.START_POS],\n\t        raws: raws\n\t      });\n\t      this.position = this.position + 3;\n\t      return node;\n\t    } else {\n\t      this.unexpected();\n\t    }\n\t  };\n\n\t  _proto.combinator = function combinator() {\n\t    var _this3 = this;\n\n\t    if (this.content() === '|') {\n\t      return this.namespace();\n\t    } // We need to decide between a space that's a descendant combinator and meaningless whitespace at the end of a selector.\n\n\n\t    var nextSigTokenPos = this.locateNextMeaningfulToken(this.position);\n\n\t    if (nextSigTokenPos < 0 || this.tokens[nextSigTokenPos][_tokenize.FIELDS.TYPE] === tokens.comma) {\n\t      var nodes = this.parseWhitespaceEquivalentTokens(nextSigTokenPos);\n\n\t      if (nodes.length > 0) {\n\t        var last = this.current.last;\n\n\t        if (last) {\n\t          var _this$convertWhitespa = this.convertWhitespaceNodesToSpace(nodes),\n\t              space = _this$convertWhitespa.space,\n\t              rawSpace = _this$convertWhitespa.rawSpace;\n\n\t          if (rawSpace !== undefined) {\n\t            last.rawSpaceAfter += rawSpace;\n\t          }\n\n\t          last.spaces.after += space;\n\t        } else {\n\t          nodes.forEach(function (n) {\n\t            return _this3.newNode(n);\n\t          });\n\t        }\n\t      }\n\n\t      return;\n\t    }\n\n\t    var firstToken = this.currToken;\n\t    var spaceOrDescendantSelectorNodes = undefined;\n\n\t    if (nextSigTokenPos > this.position) {\n\t      spaceOrDescendantSelectorNodes = this.parseWhitespaceEquivalentTokens(nextSigTokenPos);\n\t    }\n\n\t    var node;\n\n\t    if (this.isNamedCombinator()) {\n\t      node = this.namedCombinator();\n\t    } else if (this.currToken[_tokenize.FIELDS.TYPE] === tokens.combinator) {\n\t      node = new _combinator[\"default\"]({\n\t        value: this.content(),\n\t        source: getTokenSource(this.currToken),\n\t        sourceIndex: this.currToken[_tokenize.FIELDS.START_POS]\n\t      });\n\t      this.position++;\n\t    } else if (WHITESPACE_TOKENS[this.currToken[_tokenize.FIELDS.TYPE]]) ; else if (!spaceOrDescendantSelectorNodes) {\n\t      this.unexpected();\n\t    }\n\n\t    if (node) {\n\t      if (spaceOrDescendantSelectorNodes) {\n\t        var _this$convertWhitespa2 = this.convertWhitespaceNodesToSpace(spaceOrDescendantSelectorNodes),\n\t            _space = _this$convertWhitespa2.space,\n\t            _rawSpace = _this$convertWhitespa2.rawSpace;\n\n\t        node.spaces.before = _space;\n\t        node.rawSpaceBefore = _rawSpace;\n\t      }\n\t    } else {\n\t      // descendant combinator\n\t      var _this$convertWhitespa3 = this.convertWhitespaceNodesToSpace(spaceOrDescendantSelectorNodes, true),\n\t          _space2 = _this$convertWhitespa3.space,\n\t          _rawSpace2 = _this$convertWhitespa3.rawSpace;\n\n\t      if (!_rawSpace2) {\n\t        _rawSpace2 = _space2;\n\t      }\n\n\t      var spaces = {};\n\t      var raws = {\n\t        spaces: {}\n\t      };\n\n\t      if (_space2.endsWith(' ') && _rawSpace2.endsWith(' ')) {\n\t        spaces.before = _space2.slice(0, _space2.length - 1);\n\t        raws.spaces.before = _rawSpace2.slice(0, _rawSpace2.length - 1);\n\t      } else if (_space2.startsWith(' ') && _rawSpace2.startsWith(' ')) {\n\t        spaces.after = _space2.slice(1);\n\t        raws.spaces.after = _rawSpace2.slice(1);\n\t      } else {\n\t        raws.value = _rawSpace2;\n\t      }\n\n\t      node = new _combinator[\"default\"]({\n\t        value: ' ',\n\t        source: getTokenSourceSpan(firstToken, this.tokens[this.position - 1]),\n\t        sourceIndex: firstToken[_tokenize.FIELDS.START_POS],\n\t        spaces: spaces,\n\t        raws: raws\n\t      });\n\t    }\n\n\t    if (this.currToken && this.currToken[_tokenize.FIELDS.TYPE] === tokens.space) {\n\t      node.spaces.after = this.optionalSpace(this.content());\n\t      this.position++;\n\t    }\n\n\t    return this.newNode(node);\n\t  };\n\n\t  _proto.comma = function comma() {\n\t    if (this.position === this.tokens.length - 1) {\n\t      this.root.trailingComma = true;\n\t      this.position++;\n\t      return;\n\t    }\n\n\t    this.current._inferEndPosition();\n\n\t    var selector = new _selector[\"default\"]({\n\t      source: {\n\t        start: tokenStart(this.tokens[this.position + 1])\n\t      }\n\t    });\n\t    this.current.parent.append(selector);\n\t    this.current = selector;\n\t    this.position++;\n\t  };\n\n\t  _proto.comment = function comment() {\n\t    var current = this.currToken;\n\t    this.newNode(new _comment[\"default\"]({\n\t      value: this.content(),\n\t      source: getTokenSource(current),\n\t      sourceIndex: current[_tokenize.FIELDS.START_POS]\n\t    }));\n\t    this.position++;\n\t  };\n\n\t  _proto.error = function error(message, opts) {\n\t    throw this.root.error(message, opts);\n\t  };\n\n\t  _proto.missingBackslash = function missingBackslash() {\n\t    return this.error('Expected a backslash preceding the semicolon.', {\n\t      index: this.currToken[_tokenize.FIELDS.START_POS]\n\t    });\n\t  };\n\n\t  _proto.missingParenthesis = function missingParenthesis() {\n\t    return this.expected('opening parenthesis', this.currToken[_tokenize.FIELDS.START_POS]);\n\t  };\n\n\t  _proto.missingSquareBracket = function missingSquareBracket() {\n\t    return this.expected('opening square bracket', this.currToken[_tokenize.FIELDS.START_POS]);\n\t  };\n\n\t  _proto.unexpected = function unexpected() {\n\t    return this.error(\"Unexpected '\" + this.content() + \"'. Escaping special characters with \\\\ may help.\", this.currToken[_tokenize.FIELDS.START_POS]);\n\t  };\n\n\t  _proto.namespace = function namespace() {\n\t    var before = this.prevToken && this.content(this.prevToken) || true;\n\n\t    if (this.nextToken[_tokenize.FIELDS.TYPE] === tokens.word) {\n\t      this.position++;\n\t      return this.word(before);\n\t    } else if (this.nextToken[_tokenize.FIELDS.TYPE] === tokens.asterisk) {\n\t      this.position++;\n\t      return this.universal(before);\n\t    }\n\t  };\n\n\t  _proto.nesting = function nesting() {\n\t    if (this.nextToken) {\n\t      var nextContent = this.content(this.nextToken);\n\n\t      if (nextContent === \"|\") {\n\t        this.position++;\n\t        return;\n\t      }\n\t    }\n\n\t    var current = this.currToken;\n\t    this.newNode(new _nesting[\"default\"]({\n\t      value: this.content(),\n\t      source: getTokenSource(current),\n\t      sourceIndex: current[_tokenize.FIELDS.START_POS]\n\t    }));\n\t    this.position++;\n\t  };\n\n\t  _proto.parentheses = function parentheses() {\n\t    var last = this.current.last;\n\t    var unbalanced = 1;\n\t    this.position++;\n\n\t    if (last && last.type === types$1.PSEUDO) {\n\t      var selector = new _selector[\"default\"]({\n\t        source: {\n\t          start: tokenStart(this.tokens[this.position - 1])\n\t        }\n\t      });\n\t      var cache = this.current;\n\t      last.append(selector);\n\t      this.current = selector;\n\n\t      while (this.position < this.tokens.length && unbalanced) {\n\t        if (this.currToken[_tokenize.FIELDS.TYPE] === tokens.openParenthesis) {\n\t          unbalanced++;\n\t        }\n\n\t        if (this.currToken[_tokenize.FIELDS.TYPE] === tokens.closeParenthesis) {\n\t          unbalanced--;\n\t        }\n\n\t        if (unbalanced) {\n\t          this.parse();\n\t        } else {\n\t          this.current.source.end = tokenEnd(this.currToken);\n\t          this.current.parent.source.end = tokenEnd(this.currToken);\n\t          this.position++;\n\t        }\n\t      }\n\n\t      this.current = cache;\n\t    } else {\n\t      // I think this case should be an error. It's used to implement a basic parse of media queries\n\t      // but I don't think it's a good idea.\n\t      var parenStart = this.currToken;\n\t      var parenValue = \"(\";\n\t      var parenEnd;\n\n\t      while (this.position < this.tokens.length && unbalanced) {\n\t        if (this.currToken[_tokenize.FIELDS.TYPE] === tokens.openParenthesis) {\n\t          unbalanced++;\n\t        }\n\n\t        if (this.currToken[_tokenize.FIELDS.TYPE] === tokens.closeParenthesis) {\n\t          unbalanced--;\n\t        }\n\n\t        parenEnd = this.currToken;\n\t        parenValue += this.parseParenthesisToken(this.currToken);\n\t        this.position++;\n\t      }\n\n\t      if (last) {\n\t        last.appendToPropertyAndEscape(\"value\", parenValue, parenValue);\n\t      } else {\n\t        this.newNode(new _string[\"default\"]({\n\t          value: parenValue,\n\t          source: getSource(parenStart[_tokenize.FIELDS.START_LINE], parenStart[_tokenize.FIELDS.START_COL], parenEnd[_tokenize.FIELDS.END_LINE], parenEnd[_tokenize.FIELDS.END_COL]),\n\t          sourceIndex: parenStart[_tokenize.FIELDS.START_POS]\n\t        }));\n\t      }\n\t    }\n\n\t    if (unbalanced) {\n\t      return this.expected('closing parenthesis', this.currToken[_tokenize.FIELDS.START_POS]);\n\t    }\n\t  };\n\n\t  _proto.pseudo = function pseudo() {\n\t    var _this4 = this;\n\n\t    var pseudoStr = '';\n\t    var startingToken = this.currToken;\n\n\t    while (this.currToken && this.currToken[_tokenize.FIELDS.TYPE] === tokens.colon) {\n\t      pseudoStr += this.content();\n\t      this.position++;\n\t    }\n\n\t    if (!this.currToken) {\n\t      return this.expected(['pseudo-class', 'pseudo-element'], this.position - 1);\n\t    }\n\n\t    if (this.currToken[_tokenize.FIELDS.TYPE] === tokens.word) {\n\t      this.splitWord(false, function (first, length) {\n\t        pseudoStr += first;\n\n\t        _this4.newNode(new _pseudo[\"default\"]({\n\t          value: pseudoStr,\n\t          source: getTokenSourceSpan(startingToken, _this4.currToken),\n\t          sourceIndex: startingToken[_tokenize.FIELDS.START_POS]\n\t        }));\n\n\t        if (length > 1 && _this4.nextToken && _this4.nextToken[_tokenize.FIELDS.TYPE] === tokens.openParenthesis) {\n\t          _this4.error('Misplaced parenthesis.', {\n\t            index: _this4.nextToken[_tokenize.FIELDS.START_POS]\n\t          });\n\t        }\n\t      });\n\t    } else {\n\t      return this.expected(['pseudo-class', 'pseudo-element'], this.currToken[_tokenize.FIELDS.START_POS]);\n\t    }\n\t  };\n\n\t  _proto.space = function space() {\n\t    var content = this.content(); // Handle space before and after the selector\n\n\t    if (this.position === 0 || this.prevToken[_tokenize.FIELDS.TYPE] === tokens.comma || this.prevToken[_tokenize.FIELDS.TYPE] === tokens.openParenthesis || this.current.nodes.every(function (node) {\n\t      return node.type === 'comment';\n\t    })) {\n\t      this.spaces = this.optionalSpace(content);\n\t      this.position++;\n\t    } else if (this.position === this.tokens.length - 1 || this.nextToken[_tokenize.FIELDS.TYPE] === tokens.comma || this.nextToken[_tokenize.FIELDS.TYPE] === tokens.closeParenthesis) {\n\t      this.current.last.spaces.after = this.optionalSpace(content);\n\t      this.position++;\n\t    } else {\n\t      this.combinator();\n\t    }\n\t  };\n\n\t  _proto.string = function string() {\n\t    var current = this.currToken;\n\t    this.newNode(new _string[\"default\"]({\n\t      value: this.content(),\n\t      source: getTokenSource(current),\n\t      sourceIndex: current[_tokenize.FIELDS.START_POS]\n\t    }));\n\t    this.position++;\n\t  };\n\n\t  _proto.universal = function universal(namespace) {\n\t    var nextToken = this.nextToken;\n\n\t    if (nextToken && this.content(nextToken) === '|') {\n\t      this.position++;\n\t      return this.namespace();\n\t    }\n\n\t    var current = this.currToken;\n\t    this.newNode(new _universal[\"default\"]({\n\t      value: this.content(),\n\t      source: getTokenSource(current),\n\t      sourceIndex: current[_tokenize.FIELDS.START_POS]\n\t    }), namespace);\n\t    this.position++;\n\t  };\n\n\t  _proto.splitWord = function splitWord(namespace, firstCallback) {\n\t    var _this5 = this;\n\n\t    var nextToken = this.nextToken;\n\t    var word = this.content();\n\n\t    while (nextToken && ~[tokens.dollar, tokens.caret, tokens.equals, tokens.word].indexOf(nextToken[_tokenize.FIELDS.TYPE])) {\n\t      this.position++;\n\t      var current = this.content();\n\t      word += current;\n\n\t      if (current.lastIndexOf('\\\\') === current.length - 1) {\n\t        var next = this.nextToken;\n\n\t        if (next && next[_tokenize.FIELDS.TYPE] === tokens.space) {\n\t          word += this.requiredSpace(this.content(next));\n\t          this.position++;\n\t        }\n\t      }\n\n\t      nextToken = this.nextToken;\n\t    }\n\n\t    var hasClass = indexesOf(word, '.').filter(function (i) {\n\t      // Allow escaped dot within class name\n\t      var escapedDot = word[i - 1] === '\\\\'; // Allow decimal numbers percent in @keyframes\n\n\t      var isKeyframesPercent = /^\\d+\\.\\d+%$/.test(word);\n\t      return !escapedDot && !isKeyframesPercent;\n\t    });\n\t    var hasId = indexesOf(word, '#').filter(function (i) {\n\t      return word[i - 1] !== '\\\\';\n\t    }); // Eliminate Sass interpolations from the list of id indexes\n\n\t    var interpolations = indexesOf(word, '#{');\n\n\t    if (interpolations.length) {\n\t      hasId = hasId.filter(function (hashIndex) {\n\t        return !~interpolations.indexOf(hashIndex);\n\t      });\n\t    }\n\n\t    var indices = (0, _sortAscending[\"default\"])(uniqs([0].concat(hasClass, hasId)));\n\t    indices.forEach(function (ind, i) {\n\t      var index = indices[i + 1] || word.length;\n\t      var value = word.slice(ind, index);\n\n\t      if (i === 0 && firstCallback) {\n\t        return firstCallback.call(_this5, value, indices.length);\n\t      }\n\n\t      var node;\n\t      var current = _this5.currToken;\n\t      var sourceIndex = current[_tokenize.FIELDS.START_POS] + indices[i];\n\t      var source = getSource(current[1], current[2] + ind, current[3], current[2] + (index - 1));\n\n\t      if (~hasClass.indexOf(ind)) {\n\t        var classNameOpts = {\n\t          value: value.slice(1),\n\t          source: source,\n\t          sourceIndex: sourceIndex\n\t        };\n\t        node = new _className[\"default\"](unescapeProp(classNameOpts, \"value\"));\n\t      } else if (~hasId.indexOf(ind)) {\n\t        var idOpts = {\n\t          value: value.slice(1),\n\t          source: source,\n\t          sourceIndex: sourceIndex\n\t        };\n\t        node = new _id[\"default\"](unescapeProp(idOpts, \"value\"));\n\t      } else {\n\t        var tagOpts = {\n\t          value: value,\n\t          source: source,\n\t          sourceIndex: sourceIndex\n\t        };\n\t        unescapeProp(tagOpts, \"value\");\n\t        node = new _tag[\"default\"](tagOpts);\n\t      }\n\n\t      _this5.newNode(node, namespace); // Ensure that the namespace is used only once\n\n\n\t      namespace = null;\n\t    });\n\t    this.position++;\n\t  };\n\n\t  _proto.word = function word(namespace) {\n\t    var nextToken = this.nextToken;\n\n\t    if (nextToken && this.content(nextToken) === '|') {\n\t      this.position++;\n\t      return this.namespace();\n\t    }\n\n\t    return this.splitWord(namespace);\n\t  };\n\n\t  _proto.loop = function loop() {\n\t    while (this.position < this.tokens.length) {\n\t      this.parse(true);\n\t    }\n\n\t    this.current._inferEndPosition();\n\n\t    return this.root;\n\t  };\n\n\t  _proto.parse = function parse(throwOnParenthesis) {\n\t    switch (this.currToken[_tokenize.FIELDS.TYPE]) {\n\t      case tokens.space:\n\t        this.space();\n\t        break;\n\n\t      case tokens.comment:\n\t        this.comment();\n\t        break;\n\n\t      case tokens.openParenthesis:\n\t        this.parentheses();\n\t        break;\n\n\t      case tokens.closeParenthesis:\n\t        if (throwOnParenthesis) {\n\t          this.missingParenthesis();\n\t        }\n\n\t        break;\n\n\t      case tokens.openSquare:\n\t        this.attribute();\n\t        break;\n\n\t      case tokens.dollar:\n\t      case tokens.caret:\n\t      case tokens.equals:\n\t      case tokens.word:\n\t        this.word();\n\t        break;\n\n\t      case tokens.colon:\n\t        this.pseudo();\n\t        break;\n\n\t      case tokens.comma:\n\t        this.comma();\n\t        break;\n\n\t      case tokens.asterisk:\n\t        this.universal();\n\t        break;\n\n\t      case tokens.ampersand:\n\t        this.nesting();\n\t        break;\n\n\t      case tokens.slash:\n\t      case tokens.combinator:\n\t        this.combinator();\n\t        break;\n\n\t      case tokens.str:\n\t        this.string();\n\t        break;\n\t      // These cases throw; no break needed.\n\n\t      case tokens.closeSquare:\n\t        this.missingSquareBracket();\n\n\t      case tokens.semicolon:\n\t        this.missingBackslash();\n\n\t      default:\n\t        this.unexpected();\n\t    }\n\t  }\n\t  /**\n\t   * Helpers\n\t   */\n\t  ;\n\n\t  _proto.expected = function expected(description, index, found) {\n\t    if (Array.isArray(description)) {\n\t      var last = description.pop();\n\t      description = description.join(', ') + \" or \" + last;\n\t    }\n\n\t    var an = /^[aeiou]/.test(description[0]) ? 'an' : 'a';\n\n\t    if (!found) {\n\t      return this.error(\"Expected \" + an + \" \" + description + \".\", {\n\t        index: index\n\t      });\n\t    }\n\n\t    return this.error(\"Expected \" + an + \" \" + description + \", found \\\"\" + found + \"\\\" instead.\", {\n\t      index: index\n\t    });\n\t  };\n\n\t  _proto.requiredSpace = function requiredSpace(space) {\n\t    return this.options.lossy ? ' ' : space;\n\t  };\n\n\t  _proto.optionalSpace = function optionalSpace(space) {\n\t    return this.options.lossy ? '' : space;\n\t  };\n\n\t  _proto.lossySpace = function lossySpace(space, required) {\n\t    if (this.options.lossy) {\n\t      return required ? ' ' : '';\n\t    } else {\n\t      return space;\n\t    }\n\t  };\n\n\t  _proto.parseParenthesisToken = function parseParenthesisToken(token) {\n\t    var content = this.content(token);\n\n\t    if (token[_tokenize.FIELDS.TYPE] === tokens.space) {\n\t      return this.requiredSpace(content);\n\t    } else {\n\t      return content;\n\t    }\n\t  };\n\n\t  _proto.newNode = function newNode(node, namespace) {\n\t    if (namespace) {\n\t      if (/^ +$/.test(namespace)) {\n\t        if (!this.options.lossy) {\n\t          this.spaces = (this.spaces || '') + namespace;\n\t        }\n\n\t        namespace = true;\n\t      }\n\n\t      node.namespace = namespace;\n\t      unescapeProp(node, \"namespace\");\n\t    }\n\n\t    if (this.spaces) {\n\t      node.spaces.before = this.spaces;\n\t      this.spaces = '';\n\t    }\n\n\t    return this.current.append(node);\n\t  };\n\n\t  _proto.content = function content(token) {\n\t    if (token === void 0) {\n\t      token = this.currToken;\n\t    }\n\n\t    return this.css.slice(token[_tokenize.FIELDS.START_POS], token[_tokenize.FIELDS.END_POS]);\n\t  };\n\n\t  /**\n\t   * returns the index of the next non-whitespace, non-comment token.\n\t   * returns -1 if no meaningful token is found.\n\t   */\n\t  _proto.locateNextMeaningfulToken = function locateNextMeaningfulToken(startPosition) {\n\t    if (startPosition === void 0) {\n\t      startPosition = this.position + 1;\n\t    }\n\n\t    var searchPosition = startPosition;\n\n\t    while (searchPosition < this.tokens.length) {\n\t      if (WHITESPACE_EQUIV_TOKENS[this.tokens[searchPosition][_tokenize.FIELDS.TYPE]]) {\n\t        searchPosition++;\n\t        continue;\n\t      } else {\n\t        return searchPosition;\n\t      }\n\t    }\n\n\t    return -1;\n\t  };\n\n\t  _createClass(Parser, [{\n\t    key: \"currToken\",\n\t    get: function get() {\n\t      return this.tokens[this.position];\n\t    }\n\t  }, {\n\t    key: \"nextToken\",\n\t    get: function get() {\n\t      return this.tokens[this.position + 1];\n\t    }\n\t  }, {\n\t    key: \"prevToken\",\n\t    get: function get() {\n\t      return this.tokens[this.position - 1];\n\t    }\n\t  }]);\n\n\t  return Parser;\n\t}();\n\n\texports[\"default\"] = Parser;\n\tmodule.exports = exports.default;\n} (parser, parser.exports));\n\n(function (module, exports) {\n\n\texports.__esModule = true;\n\texports[\"default\"] = void 0;\n\n\tvar _parser = _interopRequireDefault(parser.exports);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\n\tvar Processor = /*#__PURE__*/function () {\n\t  function Processor(func, options) {\n\t    this.func = func || function noop() {};\n\n\t    this.funcRes = null;\n\t    this.options = options;\n\t  }\n\n\t  var _proto = Processor.prototype;\n\n\t  _proto._shouldUpdateSelector = function _shouldUpdateSelector(rule, options) {\n\t    if (options === void 0) {\n\t      options = {};\n\t    }\n\n\t    var merged = Object.assign({}, this.options, options);\n\n\t    if (merged.updateSelector === false) {\n\t      return false;\n\t    } else {\n\t      return typeof rule !== \"string\";\n\t    }\n\t  };\n\n\t  _proto._isLossy = function _isLossy(options) {\n\t    if (options === void 0) {\n\t      options = {};\n\t    }\n\n\t    var merged = Object.assign({}, this.options, options);\n\n\t    if (merged.lossless === false) {\n\t      return true;\n\t    } else {\n\t      return false;\n\t    }\n\t  };\n\n\t  _proto._root = function _root(rule, options) {\n\t    if (options === void 0) {\n\t      options = {};\n\t    }\n\n\t    var parser = new _parser[\"default\"](rule, this._parseOptions(options));\n\t    return parser.root;\n\t  };\n\n\t  _proto._parseOptions = function _parseOptions(options) {\n\t    return {\n\t      lossy: this._isLossy(options)\n\t    };\n\t  };\n\n\t  _proto._run = function _run(rule, options) {\n\t    var _this = this;\n\n\t    if (options === void 0) {\n\t      options = {};\n\t    }\n\n\t    return new Promise(function (resolve, reject) {\n\t      try {\n\t        var root = _this._root(rule, options);\n\n\t        Promise.resolve(_this.func(root)).then(function (transform) {\n\t          var string = undefined;\n\n\t          if (_this._shouldUpdateSelector(rule, options)) {\n\t            string = root.toString();\n\t            rule.selector = string;\n\t          }\n\n\t          return {\n\t            transform: transform,\n\t            root: root,\n\t            string: string\n\t          };\n\t        }).then(resolve, reject);\n\t      } catch (e) {\n\t        reject(e);\n\t        return;\n\t      }\n\t    });\n\t  };\n\n\t  _proto._runSync = function _runSync(rule, options) {\n\t    if (options === void 0) {\n\t      options = {};\n\t    }\n\n\t    var root = this._root(rule, options);\n\n\t    var transform = this.func(root);\n\n\t    if (transform && typeof transform.then === \"function\") {\n\t      throw new Error(\"Selector processor returned a promise to a synchronous call.\");\n\t    }\n\n\t    var string = undefined;\n\n\t    if (options.updateSelector && typeof rule !== \"string\") {\n\t      string = root.toString();\n\t      rule.selector = string;\n\t    }\n\n\t    return {\n\t      transform: transform,\n\t      root: root,\n\t      string: string\n\t    };\n\t  }\n\t  /**\n\t   * Process rule into a selector AST.\n\t   *\n\t   * @param rule {postcss.Rule | string} The css selector to be processed\n\t   * @param options The options for processing\n\t   * @returns {Promise<parser.Root>} The AST of the selector after processing it.\n\t   */\n\t  ;\n\n\t  _proto.ast = function ast(rule, options) {\n\t    return this._run(rule, options).then(function (result) {\n\t      return result.root;\n\t    });\n\t  }\n\t  /**\n\t   * Process rule into a selector AST synchronously.\n\t   *\n\t   * @param rule {postcss.Rule | string} The css selector to be processed\n\t   * @param options The options for processing\n\t   * @returns {parser.Root} The AST of the selector after processing it.\n\t   */\n\t  ;\n\n\t  _proto.astSync = function astSync(rule, options) {\n\t    return this._runSync(rule, options).root;\n\t  }\n\t  /**\n\t   * Process a selector into a transformed value asynchronously\n\t   *\n\t   * @param rule {postcss.Rule | string} The css selector to be processed\n\t   * @param options The options for processing\n\t   * @returns {Promise<any>} The value returned by the processor.\n\t   */\n\t  ;\n\n\t  _proto.transform = function transform(rule, options) {\n\t    return this._run(rule, options).then(function (result) {\n\t      return result.transform;\n\t    });\n\t  }\n\t  /**\n\t   * Process a selector into a transformed value synchronously.\n\t   *\n\t   * @param rule {postcss.Rule | string} The css selector to be processed\n\t   * @param options The options for processing\n\t   * @returns {any} The value returned by the processor.\n\t   */\n\t  ;\n\n\t  _proto.transformSync = function transformSync(rule, options) {\n\t    return this._runSync(rule, options).transform;\n\t  }\n\t  /**\n\t   * Process a selector into a new selector string asynchronously.\n\t   *\n\t   * @param rule {postcss.Rule | string} The css selector to be processed\n\t   * @param options The options for processing\n\t   * @returns {string} the selector after processing.\n\t   */\n\t  ;\n\n\t  _proto.process = function process(rule, options) {\n\t    return this._run(rule, options).then(function (result) {\n\t      return result.string || result.root.toString();\n\t    });\n\t  }\n\t  /**\n\t   * Process a selector into a new selector string synchronously.\n\t   *\n\t   * @param rule {postcss.Rule | string} The css selector to be processed\n\t   * @param options The options for processing\n\t   * @returns {string} the selector after processing.\n\t   */\n\t  ;\n\n\t  _proto.processSync = function processSync(rule, options) {\n\t    var result = this._runSync(rule, options);\n\n\t    return result.string || result.root.toString();\n\t  };\n\n\t  return Processor;\n\t}();\n\n\texports[\"default\"] = Processor;\n\tmodule.exports = exports.default;\n} (processor, processor.exports));\n\nvar selectors = {};\n\nvar constructors = {};\n\nconstructors.__esModule = true;\nconstructors.universal = constructors.tag = constructors.string = constructors.selector = constructors.root = constructors.pseudo = constructors.nesting = constructors.id = constructors.comment = constructors.combinator = constructors.className = constructors.attribute = void 0;\n\nvar _attribute = _interopRequireDefault(attribute$1);\n\nvar _className = _interopRequireDefault(className$1.exports);\n\nvar _combinator = _interopRequireDefault(combinator$2.exports);\n\nvar _comment = _interopRequireDefault(comment$2.exports);\n\nvar _id = _interopRequireDefault(id$1.exports);\n\nvar _nesting = _interopRequireDefault(nesting$1.exports);\n\nvar _pseudo = _interopRequireDefault(pseudo$1.exports);\n\nvar _root = _interopRequireDefault(root$1.exports);\n\nvar _selector = _interopRequireDefault(selector$1.exports);\n\nvar _string = _interopRequireDefault(string$1.exports);\n\nvar _tag = _interopRequireDefault(tag$1.exports);\n\nvar _universal = _interopRequireDefault(universal$1.exports);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nvar attribute = function attribute(opts) {\n  return new _attribute[\"default\"](opts);\n};\n\nconstructors.attribute = attribute;\n\nvar className = function className(opts) {\n  return new _className[\"default\"](opts);\n};\n\nconstructors.className = className;\n\nvar combinator = function combinator(opts) {\n  return new _combinator[\"default\"](opts);\n};\n\nconstructors.combinator = combinator;\n\nvar comment = function comment(opts) {\n  return new _comment[\"default\"](opts);\n};\n\nconstructors.comment = comment;\n\nvar id = function id(opts) {\n  return new _id[\"default\"](opts);\n};\n\nconstructors.id = id;\n\nvar nesting = function nesting(opts) {\n  return new _nesting[\"default\"](opts);\n};\n\nconstructors.nesting = nesting;\n\nvar pseudo = function pseudo(opts) {\n  return new _pseudo[\"default\"](opts);\n};\n\nconstructors.pseudo = pseudo;\n\nvar root = function root(opts) {\n  return new _root[\"default\"](opts);\n};\n\nconstructors.root = root;\n\nvar selector = function selector(opts) {\n  return new _selector[\"default\"](opts);\n};\n\nconstructors.selector = selector;\n\nvar string = function string(opts) {\n  return new _string[\"default\"](opts);\n};\n\nconstructors.string = string;\n\nvar tag = function tag(opts) {\n  return new _tag[\"default\"](opts);\n};\n\nconstructors.tag = tag;\n\nvar universal = function universal(opts) {\n  return new _universal[\"default\"](opts);\n};\n\nconstructors.universal = universal;\n\nvar guards = {};\n\nguards.__esModule = true;\nguards.isNode = isNode;\nguards.isPseudoElement = isPseudoElement;\nguards.isPseudoClass = isPseudoClass;\nguards.isContainer = isContainer;\nguards.isNamespace = isNamespace;\nguards.isUniversal = guards.isTag = guards.isString = guards.isSelector = guards.isRoot = guards.isPseudo = guards.isNesting = guards.isIdentifier = guards.isComment = guards.isCombinator = guards.isClassName = guards.isAttribute = void 0;\n\nvar _types = types;\n\nvar _IS_TYPE;\n\nvar IS_TYPE = (_IS_TYPE = {}, _IS_TYPE[_types.ATTRIBUTE] = true, _IS_TYPE[_types.CLASS] = true, _IS_TYPE[_types.COMBINATOR] = true, _IS_TYPE[_types.COMMENT] = true, _IS_TYPE[_types.ID] = true, _IS_TYPE[_types.NESTING] = true, _IS_TYPE[_types.PSEUDO] = true, _IS_TYPE[_types.ROOT] = true, _IS_TYPE[_types.SELECTOR] = true, _IS_TYPE[_types.STRING] = true, _IS_TYPE[_types.TAG] = true, _IS_TYPE[_types.UNIVERSAL] = true, _IS_TYPE);\n\nfunction isNode(node) {\n  return typeof node === \"object\" && IS_TYPE[node.type];\n}\n\nfunction isNodeType(type, node) {\n  return isNode(node) && node.type === type;\n}\n\nvar isAttribute = isNodeType.bind(null, _types.ATTRIBUTE);\nguards.isAttribute = isAttribute;\nvar isClassName = isNodeType.bind(null, _types.CLASS);\nguards.isClassName = isClassName;\nvar isCombinator = isNodeType.bind(null, _types.COMBINATOR);\nguards.isCombinator = isCombinator;\nvar isComment = isNodeType.bind(null, _types.COMMENT);\nguards.isComment = isComment;\nvar isIdentifier = isNodeType.bind(null, _types.ID);\nguards.isIdentifier = isIdentifier;\nvar isNesting = isNodeType.bind(null, _types.NESTING);\nguards.isNesting = isNesting;\nvar isPseudo = isNodeType.bind(null, _types.PSEUDO);\nguards.isPseudo = isPseudo;\nvar isRoot = isNodeType.bind(null, _types.ROOT);\nguards.isRoot = isRoot;\nvar isSelector = isNodeType.bind(null, _types.SELECTOR);\nguards.isSelector = isSelector;\nvar isString = isNodeType.bind(null, _types.STRING);\nguards.isString = isString;\nvar isTag = isNodeType.bind(null, _types.TAG);\nguards.isTag = isTag;\nvar isUniversal = isNodeType.bind(null, _types.UNIVERSAL);\nguards.isUniversal = isUniversal;\n\nfunction isPseudoElement(node) {\n  return isPseudo(node) && node.value && (node.value.startsWith(\"::\") || node.value.toLowerCase() === \":before\" || node.value.toLowerCase() === \":after\");\n}\n\nfunction isPseudoClass(node) {\n  return isPseudo(node) && !isPseudoElement(node);\n}\n\nfunction isContainer(node) {\n  return !!(isNode(node) && node.walk);\n}\n\nfunction isNamespace(node) {\n  return isAttribute(node) || isTag(node);\n}\n\n(function (exports) {\n\n\texports.__esModule = true;\n\n\tvar _types = types;\n\n\tObject.keys(_types).forEach(function (key) {\n\t  if (key === \"default\" || key === \"__esModule\") return;\n\t  if (key in exports && exports[key] === _types[key]) return;\n\t  exports[key] = _types[key];\n\t});\n\n\tvar _constructors = constructors;\n\n\tObject.keys(_constructors).forEach(function (key) {\n\t  if (key === \"default\" || key === \"__esModule\") return;\n\t  if (key in exports && exports[key] === _constructors[key]) return;\n\t  exports[key] = _constructors[key];\n\t});\n\n\tvar _guards = guards;\n\n\tObject.keys(_guards).forEach(function (key) {\n\t  if (key === \"default\" || key === \"__esModule\") return;\n\t  if (key in exports && exports[key] === _guards[key]) return;\n\t  exports[key] = _guards[key];\n\t});\n} (selectors));\n\n(function (module, exports) {\n\n\texports.__esModule = true;\n\texports[\"default\"] = void 0;\n\n\tvar _processor = _interopRequireDefault(processor.exports);\n\n\tvar selectors$1 = _interopRequireWildcard(selectors);\n\n\tfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }\n\n\tfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") { return { \"default\": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (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; }\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\n\tvar parser = function parser(processor) {\n\t  return new _processor[\"default\"](processor);\n\t};\n\n\tObject.assign(parser, selectors$1);\n\tdelete parser.__esModule;\n\tvar _default = parser;\n\texports[\"default\"] = _default;\n\tmodule.exports = exports.default;\n} (dist, dist.exports));\n\nvar selectorParser = /*@__PURE__*/getDefaultExportFromCjs(dist.exports);\n\nconst animationNameRE = /^(-\\w+-)?animation-name$/;\nconst animationRE = /^(-\\w+-)?animation$/;\nconst scopedPlugin = (id = '') => {\n    const keyframes = Object.create(null);\n    const shortId = id.replace(/^data-v-/, '');\n    return {\n        postcssPlugin: 'vue-sfc-scoped',\n        Rule(rule) {\n            processRule(id, rule);\n        },\n        AtRule(node) {\n            if (/-?keyframes$/.test(node.name) &&\n                !node.params.endsWith(`-${shortId}`)) {\n                // register keyframes\n                keyframes[node.params] = node.params = node.params + '-' + shortId;\n            }\n        },\n        OnceExit(root) {\n            if (Object.keys(keyframes).length) {\n                // If keyframes are found in this <style>, find and rewrite animation names\n                // in declarations.\n                // Caveat: this only works for keyframes and animation rules in the same\n                // <style> element.\n                // individual animation-name declaration\n                root.walkDecls(decl => {\n                    if (animationNameRE.test(decl.prop)) {\n                        decl.value = decl.value\n                            .split(',')\n                            .map(v => keyframes[v.trim()] || v.trim())\n                            .join(',');\n                    }\n                    // shorthand\n                    if (animationRE.test(decl.prop)) {\n                        decl.value = decl.value\n                            .split(',')\n                            .map(v => {\n                            const vals = v.trim().split(/\\s+/);\n                            const i = vals.findIndex(val => keyframes[val]);\n                            if (i !== -1) {\n                                vals.splice(i, 1, keyframes[vals[i]]);\n                                return vals.join(' ');\n                            }\n                            else {\n                                return v;\n                            }\n                        })\n                            .join(',');\n                    }\n                });\n            }\n        }\n    };\n};\nconst processedRules = new WeakSet();\nfunction processRule(id, rule) {\n    if (processedRules.has(rule) ||\n        (rule.parent &&\n            rule.parent.type === 'atrule' &&\n            /-?keyframes$/.test(rule.parent.name))) {\n        return;\n    }\n    processedRules.add(rule);\n    rule.selector = selectorParser(selectorRoot => {\n        selectorRoot.each(selector => {\n            rewriteSelector(id, selector, selectorRoot);\n        });\n    }).processSync(rule.selector);\n}\nfunction rewriteSelector(id, selector, selectorRoot, slotted = false) {\n    let node = null;\n    let shouldInject = true;\n    // find the last child node to insert attribute selector\n    selector.each(n => {\n        // DEPRECATED \">>>\" and \"/deep/\" combinator\n        if (n.type === 'combinator' &&\n            (n.value === '>>>' || n.value === '/deep/')) {\n            n.value = ' ';\n            n.spaces.before = n.spaces.after = '';\n            warn$1(`the >>> and /deep/ combinators have been deprecated. ` +\n                `Use :deep() instead.`);\n            return false;\n        }\n        if (n.type === 'pseudo') {\n            const { value } = n;\n            // deep: inject [id] attribute at the node before the ::v-deep\n            // combinator.\n            if (value === ':deep' || value === '::v-deep') {\n                if (n.nodes.length) {\n                    // .foo ::v-deep(.bar) -> .foo[xxxxxxx] .bar\n                    // replace the current node with ::v-deep's inner selector\n                    let last = n;\n                    n.nodes[0].each(ss => {\n                        selector.insertAfter(last, ss);\n                        last = ss;\n                    });\n                    // insert a space combinator before if it doesn't already have one\n                    const prev = selector.at(selector.index(n) - 1);\n                    if (!prev || !isSpaceCombinator(prev)) {\n                        selector.insertAfter(n, selectorParser.combinator({\n                            value: ' '\n                        }));\n                    }\n                    selector.removeChild(n);\n                }\n                else {\n                    // DEPRECATED usage\n                    // .foo ::v-deep .bar -> .foo[xxxxxxx] .bar\n                    warn$1(`::v-deep usage as a combinator has ` +\n                        `been deprecated. Use :deep(<inner-selector>) instead.`);\n                    const prev = selector.at(selector.index(n) - 1);\n                    if (prev && isSpaceCombinator(prev)) {\n                        selector.removeChild(prev);\n                    }\n                    selector.removeChild(n);\n                }\n                return false;\n            }\n            // slot: use selector inside `::v-slotted` and inject [id + '-s']\n            // instead.\n            // ::v-slotted(.foo) -> .foo[xxxxxxx-s]\n            if (value === ':slotted' || value === '::v-slotted') {\n                rewriteSelector(id, n.nodes[0], selectorRoot, true /* slotted */);\n                let last = n;\n                n.nodes[0].each(ss => {\n                    selector.insertAfter(last, ss);\n                    last = ss;\n                });\n                // selector.insertAfter(n, n.nodes[0])\n                selector.removeChild(n);\n                // since slotted attribute already scopes the selector there's no\n                // need for the non-slot attribute.\n                shouldInject = false;\n                return false;\n            }\n            // global: replace with inner selector and do not inject [id].\n            // ::v-global(.foo) -> .foo\n            if (value === ':global' || value === '::v-global') {\n                selectorRoot.insertAfter(selector, n.nodes[0]);\n                selectorRoot.removeChild(selector);\n                return false;\n            }\n        }\n        if (n.type !== 'pseudo' && n.type !== 'combinator') {\n            node = n;\n        }\n    });\n    if (node) {\n        node.spaces.after = '';\n    }\n    else {\n        // For deep selectors & standalone pseudo selectors,\n        // the attribute selectors are prepended rather than appended.\n        // So all leading spaces must be eliminated to avoid problems.\n        selector.first.spaces.before = '';\n    }\n    if (shouldInject) {\n        const idToAdd = slotted ? id + '-s' : id;\n        selector.insertAfter(\n        // If node is null it means we need to inject [id] at the start\n        // insertAfter can handle `null` here\n        node, selectorParser.attribute({\n            attribute: idToAdd,\n            value: idToAdd,\n            raws: {},\n            quoteMark: `\"`\n        }));\n    }\n}\nfunction isSpaceCombinator(node) {\n    return node.type === 'combinator' && /^\\s+$/.test(node.value);\n}\nscopedPlugin.postcss = true;\nvar scopedPlugin$1 = scopedPlugin;\n\nvar sourceMap = sourceMap$2;\nvar SourceMapConsumer = sourceMap.SourceMapConsumer;\nvar SourceMapGenerator = sourceMap.SourceMapGenerator;\n\nvar mergeSourceMap = merge;\n\n/**\n * Merge old source map and new source map and return merged.\n * If old or new source map value is falsy, return another one as it is.\n *\n * @param {object|string} [oldMap] old source map object\n * @param {object|string} [newmap] new source map object\n * @return {object|undefined} merged source map object, or undefined when both old and new source map are undefined\n */\nfunction merge(oldMap, newMap) {\n  if (!oldMap) return newMap\n  if (!newMap) return oldMap\n\n  var oldMapConsumer = new SourceMapConsumer(oldMap);\n  var newMapConsumer = new SourceMapConsumer(newMap);\n  var mergedMapGenerator = new SourceMapGenerator();\n\n  // iterate on new map and overwrite original position of new map with one of old map\n  newMapConsumer.eachMapping(function(m) {\n    // pass when `originalLine` is null.\n    // It occurs in case that the node does not have origin in original code.\n    if (m.originalLine == null) return\n\n    var origPosInOldMap = oldMapConsumer.originalPositionFor({\n      line: m.originalLine,\n      column: m.originalColumn\n    });\n\n    if (origPosInOldMap.source == null) return\n\n    mergedMapGenerator.addMapping({\n      original: {\n        line: origPosInOldMap.line,\n        column: origPosInOldMap.column\n      },\n      generated: {\n        line: m.generatedLine,\n        column: m.generatedColumn\n      },\n      source: origPosInOldMap.source,\n      name: origPosInOldMap.name\n    });\n  });\n\n  var consumers = [oldMapConsumer, newMapConsumer];\n  consumers.forEach(function(consumer) {\n    consumer.sources.forEach(function(sourceFile) {\n      mergedMapGenerator._sources.add(sourceFile);\n      var sourceContent = consumer.sourceContentFor(sourceFile);\n      if (sourceContent != null) {\n        mergedMapGenerator.setSourceContent(sourceFile, sourceContent);\n      }\n    });\n  });\n\n  mergedMapGenerator._sourceRoot = oldMap.sourceRoot;\n  mergedMapGenerator._file = oldMap.file;\n\n  return JSON.parse(mergedMapGenerator.toString())\n}\n\nvar merge$1 = mergeSourceMap;\n\n// .scss/.sass processor\nconst scss = (source, map, options, load = require) => {\n    const nodeSass = load('sass');\n    const finalOptions = Object.assign(Object.assign({}, options), { data: getSource(source, options.filename, options.additionalData), file: options.filename, outFile: options.filename, sourceMap: !!map });\n    try {\n        const result = nodeSass.renderSync(finalOptions);\n        const dependencies = result.stats.includedFiles;\n        if (map) {\n            return {\n                code: result.css.toString(),\n                map: merge$1(map, JSON.parse(result.map.toString())),\n                errors: [],\n                dependencies\n            };\n        }\n        return { code: result.css.toString(), errors: [], dependencies };\n    }\n    catch (e) {\n        return { code: '', errors: [e], dependencies: [] };\n    }\n};\nconst sass = (source, map, options, load) => scss(source, map, Object.assign(Object.assign({}, options), { indentedSyntax: true }), load);\n// .less\nconst less = (source, map, options, load = require) => {\n    const nodeLess = load('less');\n    let result;\n    let error = null;\n    nodeLess.render(getSource(source, options.filename, options.additionalData), Object.assign(Object.assign({}, options), { syncImport: true }), (err, output) => {\n        error = err;\n        result = output;\n    });\n    if (error)\n        return { code: '', errors: [error], dependencies: [] };\n    const dependencies = result.imports;\n    if (map) {\n        return {\n            code: result.css.toString(),\n            map: merge$1(map, result.map),\n            errors: [],\n            dependencies: dependencies\n        };\n    }\n    return {\n        code: result.css.toString(),\n        errors: [],\n        dependencies: dependencies\n    };\n};\n// .styl\nconst styl = (source, map, options, load = require) => {\n    const nodeStylus = load('stylus');\n    try {\n        const ref = nodeStylus(source);\n        Object.keys(options).forEach(key => ref.set(key, options[key]));\n        if (map)\n            ref.set('sourcemap', { inline: false, comment: false });\n        const result = ref.render();\n        const dependencies = ref.deps();\n        if (map) {\n            return {\n                code: result,\n                map: merge$1(map, ref.sourcemap),\n                errors: [],\n                dependencies\n            };\n        }\n        return { code: result, errors: [], dependencies };\n    }\n    catch (e) {\n        return { code: '', errors: [e], dependencies: [] };\n    }\n};\nfunction getSource(source, filename, additionalData) {\n    if (!additionalData)\n        return source;\n    if (isFunction$1(additionalData)) {\n        return additionalData(source, filename);\n    }\n    return additionalData + source;\n}\nconst processors = {\n    less,\n    sass,\n    scss,\n    styl,\n    stylus: styl\n};\n\nfunction compileStyle(options) {\n    return doCompileStyle(Object.assign(Object.assign({}, options), { isAsync: false }));\n}\nfunction compileStyleAsync(options) {\n    return doCompileStyle(Object.assign(Object.assign({}, options), { isAsync: true }));\n}\nfunction doCompileStyle(options) {\n    const { filename, id, scoped = false, trim = true, isProd = false, modules = false, modulesOptions = {}, preprocessLang, postcssOptions, postcssPlugins } = options;\n    const preprocessor = preprocessLang && processors[preprocessLang];\n    const preProcessedSource = preprocessor && preprocess(options, preprocessor);\n    const map = preProcessedSource\n        ? preProcessedSource.map\n        : options.inMap || options.map;\n    const source = preProcessedSource ? preProcessedSource.code : options.source;\n    const shortId = id.replace(/^data-v-/, '');\n    const longId = `data-v-${shortId}`;\n    const plugins = (postcssPlugins || []).slice();\n    plugins.unshift(cssVarsPlugin({ id: shortId, isProd }));\n    if (trim) {\n        plugins.push(trimPlugin$1());\n    }\n    if (scoped) {\n        plugins.push(scopedPlugin$1(longId));\n    }\n    let cssModules;\n    if (modules) {\n        {\n            throw new Error('[@vue/compiler-sfc] `modules` option is not supported in the browser build.');\n        }\n    }\n    const postCSSOptions = Object.assign(Object.assign({}, postcssOptions), { to: filename, from: filename });\n    if (map) {\n        postCSSOptions.map = {\n            inline: false,\n            annotation: false,\n            prev: map\n        };\n    }\n    let result;\n    let code;\n    let outMap;\n    // stylus output include plain css. so need remove the repeat item\n    const dependencies = new Set(preProcessedSource ? preProcessedSource.dependencies : []);\n    // sass has filename self when provided filename option\n    dependencies.delete(filename);\n    const errors = [];\n    if (preProcessedSource && preProcessedSource.errors.length) {\n        errors.push(...preProcessedSource.errors);\n    }\n    const recordPlainCssDependencies = (messages) => {\n        messages.forEach(msg => {\n            if (msg.type === 'dependency') {\n                // postcss output path is absolute position path\n                dependencies.add(msg.file);\n            }\n        });\n        return dependencies;\n    };\n    try {\n        result = postcss$1(plugins).process(source, postCSSOptions);\n        // In async mode, return a promise.\n        if (options.isAsync) {\n            return result\n                .then(result => ({\n                code: result.css || '',\n                map: result.map && result.map.toJSON(),\n                errors,\n                modules: cssModules,\n                rawResult: result,\n                dependencies: recordPlainCssDependencies(result.messages)\n            }))\n                .catch(error => ({\n                code: '',\n                map: undefined,\n                errors: [...errors, error],\n                rawResult: undefined,\n                dependencies\n            }));\n        }\n        recordPlainCssDependencies(result.messages);\n        // force synchronous transform (we know we only have sync plugins)\n        code = result.css;\n        outMap = result.map;\n    }\n    catch (e) {\n        errors.push(e);\n    }\n    return {\n        code: code || ``,\n        map: outMap && outMap.toJSON(),\n        errors,\n        rawResult: result,\n        dependencies\n    };\n}\nfunction preprocess(options, preprocessor) {\n    if (!options.preprocessCustomRequire) {\n        throw new Error(`[@vue/compiler-sfc] Style preprocessing in the browser build must ` +\n            `provide the \\`preprocessCustomRequire\\` option to return the in-browser ` +\n            `version of the preprocessor.`);\n    }\n    return preprocessor(options.source, options.inMap || options.map, Object.assign({ filename: options.filename }, options.preprocessOptions), options.preprocessCustomRequire);\n}\n\n// API\nconst walk = walk$1;\n\nexport { MagicString$1 as MagicString, parse_1$1 as babelParse, compileScript, compileStyle, compileStyleAsync, compileTemplate, extractIdentifiers, generateCodeFrame, isInDestructureAssignment, isStaticProperty, parse$5 as parse, rewriteDefault, shouldTransform as shouldTransformRef, transform as transformRef, transformAST as transformRefAST, walk, walkIdentifiers };\n/dist/compiler-sfc.cjs.js\u0000\b\u0001'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar CompilerDOM = require('@vue/compiler-dom');\nvar require$$0$2 = require('source-map');\nvar MagicString = require('magic-string');\nvar parser$2 = require('@babel/parser');\nvar shared = require('@vue/shared');\nvar estreeWalker = require('estree-walker');\nvar path$4 = require('path');\nvar compilerCore = require('@vue/compiler-core');\nvar url = require('url');\nvar CompilerSSR = require('@vue/compiler-ssr');\nvar require$$2 = require('util');\nvar require$$0$1 = require('fs');\nvar reactivityTransform = require('@vue/reactivity-transform');\nvar require$$0$3 = require('postcss');\n\nfunction _interopNamespaceDefault(e) {\n\tvar n = Object.create(null);\n\tif (e) {\n\t\tfor (var k in e) {\n\t\t\tn[k] = e[k];\n\t\t}\n\t}\n\tn.default = e;\n\treturn Object.freeze(n);\n}\n\nvar CompilerDOM__namespace = /*#__PURE__*/_interopNamespaceDefault(CompilerDOM);\nvar CompilerSSR__namespace = /*#__PURE__*/_interopNamespaceDefault(CompilerSSR);\n\nvar commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\nfunction getDefaultExportFromCjs (x) {\n\treturn x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;\n}\n\nfunction getAugmentedNamespace(n) {\n  var f = n.default;\n\tif (typeof f == \"function\") {\n\t\tvar a = function () {\n\t\t\treturn f.apply(this, arguments);\n\t\t};\n\t\ta.prototype = f.prototype;\n  } else a = {};\n  Object.defineProperty(a, '__esModule', {value: true});\n\tObject.keys(n).forEach(function (k) {\n\t\tvar d = Object.getOwnPropertyDescriptor(n, k);\n\t\tObject.defineProperty(a, k, d.get ? d : {\n\t\t\tenumerable: true,\n\t\t\tget: function () {\n\t\t\t\treturn n[k];\n\t\t\t}\n\t\t});\n\t});\n\treturn a;\n}\n\nfunction pad (hash, len) {\n  while (hash.length < len) {\n    hash = '0' + hash;\n  }\n  return hash;\n}\n\nfunction fold (hash, text) {\n  var i;\n  var chr;\n  var len;\n  if (text.length === 0) {\n    return hash;\n  }\n  for (i = 0, len = text.length; i < len; i++) {\n    chr = text.charCodeAt(i);\n    hash = ((hash << 5) - hash) + chr;\n    hash |= 0;\n  }\n  return hash < 0 ? hash * -2 : hash;\n}\n\nfunction foldObject (hash, o, seen) {\n  return Object.keys(o).sort().reduce(foldKey, hash);\n  function foldKey (hash, key) {\n    return foldValue(hash, o[key], key, seen);\n  }\n}\n\nfunction foldValue (input, value, key, seen) {\n  var hash = fold(fold(fold(input, key), toString$1(value)), typeof value);\n  if (value === null) {\n    return fold(hash, 'null');\n  }\n  if (value === undefined) {\n    return fold(hash, 'undefined');\n  }\n  if (typeof value === 'object' || typeof value === 'function') {\n    if (seen.indexOf(value) !== -1) {\n      return fold(hash, '[Circular]' + key);\n    }\n    seen.push(value);\n\n    var objHash = foldObject(hash, value, seen);\n\n    if (!('valueOf' in value) || typeof value.valueOf !== 'function') {\n      return objHash;\n    }\n\n    try {\n      return fold(objHash, String(value.valueOf()))\n    } catch (err) {\n      return fold(objHash, '[valueOf exception]' + (err.stack || err.message))\n    }\n  }\n  return fold(hash, value.toString());\n}\n\nfunction toString$1 (o) {\n  return Object.prototype.toString.call(o);\n}\n\nfunction sum (o) {\n  return pad(foldValue(0, o, '', []).toString(16), 8);\n}\n\nvar hashSum = sum;\n\nvar hash$1 = hashSum;\n\nconst CSS_VARS_HELPER = `useCssVars`;\nfunction genCssVarsFromList(vars, id, isProd, isSSR = false) {\n    return `{\\n  ${vars\n        .map(key => `\"${isSSR ? `--` : ``}${genVarName(id, key, isProd)}\": (${key})`)\n        .join(',\\n  ')}\\n}`;\n}\nfunction genVarName(id, raw, isProd) {\n    if (isProd) {\n        return hash$1(id + raw);\n    }\n    else {\n        // escape ASCII Punctuation & Symbols\n        return `${id}-${raw.replace(/[ !\"#$%&'()*+,./:;<=>?@[\\\\\\]^`{|}~]/g, s => `\\\\${s}`)}`;\n    }\n}\nfunction normalizeExpression(exp) {\n    exp = exp.trim();\n    if ((exp[0] === `'` && exp[exp.length - 1] === `'`) ||\n        (exp[0] === `\"` && exp[exp.length - 1] === `\"`)) {\n        return exp.slice(1, -1);\n    }\n    return exp;\n}\nconst vBindRE = /v-bind\\s*\\(/g;\nfunction parseCssVars(sfc) {\n    const vars = [];\n    sfc.styles.forEach(style => {\n        let match;\n        // ignore v-bind() in comments /* ... */\n        const content = style.content.replace(/\\/\\*([\\s\\S]*?)\\*\\//g, '');\n        while ((match = vBindRE.exec(content))) {\n            const start = match.index + match[0].length;\n            const end = lexBinding(content, start);\n            if (end !== null) {\n                const variable = normalizeExpression(content.slice(start, end));\n                if (!vars.includes(variable)) {\n                    vars.push(variable);\n                }\n            }\n        }\n    });\n    return vars;\n}\nfunction lexBinding(content, start) {\n    let state = 0 /* LexerState.inParens */;\n    let parenDepth = 0;\n    for (let i = start; i < content.length; i++) {\n        const char = content.charAt(i);\n        switch (state) {\n            case 0 /* LexerState.inParens */:\n                if (char === `'`) {\n                    state = 1 /* LexerState.inSingleQuoteString */;\n                }\n                else if (char === `\"`) {\n                    state = 2 /* LexerState.inDoubleQuoteString */;\n                }\n                else if (char === `(`) {\n                    parenDepth++;\n                }\n                else if (char === `)`) {\n                    if (parenDepth > 0) {\n                        parenDepth--;\n                    }\n                    else {\n                        return i;\n                    }\n                }\n                break;\n            case 1 /* LexerState.inSingleQuoteString */:\n                if (char === `'`) {\n                    state = 0 /* LexerState.inParens */;\n                }\n                break;\n            case 2 /* LexerState.inDoubleQuoteString */:\n                if (char === `\"`) {\n                    state = 0 /* LexerState.inParens */;\n                }\n                break;\n        }\n    }\n    return null;\n}\nconst cssVarsPlugin = opts => {\n    const { id, isProd } = opts;\n    return {\n        postcssPlugin: 'vue-sfc-vars',\n        Declaration(decl) {\n            // rewrite CSS variables\n            const value = decl.value;\n            if (vBindRE.test(value)) {\n                vBindRE.lastIndex = 0;\n                let transformed = '';\n                let lastIndex = 0;\n                let match;\n                while ((match = vBindRE.exec(value))) {\n                    const start = match.index + match[0].length;\n                    const end = lexBinding(value, start);\n                    if (end !== null) {\n                        const variable = normalizeExpression(value.slice(start, end));\n                        transformed +=\n                            value.slice(lastIndex, match.index) +\n                                `var(--${genVarName(id, variable, isProd)})`;\n                        lastIndex = end + 1;\n                    }\n                }\n                decl.value = transformed + value.slice(lastIndex);\n            }\n        }\n    };\n};\ncssVarsPlugin.postcss = true;\nfunction genCssVarsCode(vars, bindings, id, isProd) {\n    const varsExp = genCssVarsFromList(vars, id, isProd);\n    const exp = CompilerDOM.createSimpleExpression(varsExp, false);\n    const context = CompilerDOM.createTransformContext(CompilerDOM.createRoot([]), {\n        prefixIdentifiers: true,\n        inline: true,\n        bindingMetadata: bindings.__isScriptSetup === false ? undefined : bindings\n    });\n    const transformed = CompilerDOM.processExpression(exp, context);\n    const transformedString = transformed.type === 4 /* NodeTypes.SIMPLE_EXPRESSION */\n        ? transformed.content\n        : transformed.children\n            .map(c => {\n            return typeof c === 'string'\n                ? c\n                : c.content;\n        })\n            .join('');\n    return `_${CSS_VARS_HELPER}(_ctx => (${transformedString}))`;\n}\n// <script setup> already gets the calls injected as part of the transform\n// this is only for single normal <script>\nfunction genNormalScriptCssVarsCode(cssVars, bindings, id, isProd) {\n    return (`\\nimport { ${CSS_VARS_HELPER} as _${CSS_VARS_HELPER} } from 'vue'\\n` +\n        `const __injectCSSVars__ = () => {\\n${genCssVarsCode(cssVars, bindings, id, isProd)}}\\n` +\n        `const __setup__ = __default__.setup\\n` +\n        `__default__.setup = __setup__\\n` +\n        `  ? (props, ctx) => { __injectCSSVars__();return __setup__(props, ctx) }\\n` +\n        `  : __injectCSSVars__\\n`);\n}\n\nvar iterator;\nvar hasRequiredIterator;\n\nfunction requireIterator () {\n\tif (hasRequiredIterator) return iterator;\n\thasRequiredIterator = 1;\n\titerator = function (Yallist) {\n\t  Yallist.prototype[Symbol.iterator] = function* () {\n\t    for (let walker = this.head; walker; walker = walker.next) {\n\t      yield walker.value;\n\t    }\n\t  };\n\t};\n\treturn iterator;\n}\n\nvar yallist = Yallist$1;\n\nYallist$1.Node = Node;\nYallist$1.create = Yallist$1;\n\nfunction Yallist$1 (list) {\n  var self = this;\n  if (!(self instanceof Yallist$1)) {\n    self = new Yallist$1();\n  }\n\n  self.tail = null;\n  self.head = null;\n  self.length = 0;\n\n  if (list && typeof list.forEach === 'function') {\n    list.forEach(function (item) {\n      self.push(item);\n    });\n  } else if (arguments.length > 0) {\n    for (var i = 0, l = arguments.length; i < l; i++) {\n      self.push(arguments[i]);\n    }\n  }\n\n  return self\n}\n\nYallist$1.prototype.removeNode = function (node) {\n  if (node.list !== this) {\n    throw new Error('removing node which does not belong to this list')\n  }\n\n  var next = node.next;\n  var prev = node.prev;\n\n  if (next) {\n    next.prev = prev;\n  }\n\n  if (prev) {\n    prev.next = next;\n  }\n\n  if (node === this.head) {\n    this.head = next;\n  }\n  if (node === this.tail) {\n    this.tail = prev;\n  }\n\n  node.list.length--;\n  node.next = null;\n  node.prev = null;\n  node.list = null;\n\n  return next\n};\n\nYallist$1.prototype.unshiftNode = function (node) {\n  if (node === this.head) {\n    return\n  }\n\n  if (node.list) {\n    node.list.removeNode(node);\n  }\n\n  var head = this.head;\n  node.list = this;\n  node.next = head;\n  if (head) {\n    head.prev = node;\n  }\n\n  this.head = node;\n  if (!this.tail) {\n    this.tail = node;\n  }\n  this.length++;\n};\n\nYallist$1.prototype.pushNode = function (node) {\n  if (node === this.tail) {\n    return\n  }\n\n  if (node.list) {\n    node.list.removeNode(node);\n  }\n\n  var tail = this.tail;\n  node.list = this;\n  node.prev = tail;\n  if (tail) {\n    tail.next = node;\n  }\n\n  this.tail = node;\n  if (!this.head) {\n    this.head = node;\n  }\n  this.length++;\n};\n\nYallist$1.prototype.push = function () {\n  for (var i = 0, l = arguments.length; i < l; i++) {\n    push(this, arguments[i]);\n  }\n  return this.length\n};\n\nYallist$1.prototype.unshift = function () {\n  for (var i = 0, l = arguments.length; i < l; i++) {\n    unshift(this, arguments[i]);\n  }\n  return this.length\n};\n\nYallist$1.prototype.pop = function () {\n  if (!this.tail) {\n    return undefined\n  }\n\n  var res = this.tail.value;\n  this.tail = this.tail.prev;\n  if (this.tail) {\n    this.tail.next = null;\n  } else {\n    this.head = null;\n  }\n  this.length--;\n  return res\n};\n\nYallist$1.prototype.shift = function () {\n  if (!this.head) {\n    return undefined\n  }\n\n  var res = this.head.value;\n  this.head = this.head.next;\n  if (this.head) {\n    this.head.prev = null;\n  } else {\n    this.tail = null;\n  }\n  this.length--;\n  return res\n};\n\nYallist$1.prototype.forEach = function (fn, thisp) {\n  thisp = thisp || this;\n  for (var walker = this.head, i = 0; walker !== null; i++) {\n    fn.call(thisp, walker.value, i, this);\n    walker = walker.next;\n  }\n};\n\nYallist$1.prototype.forEachReverse = function (fn, thisp) {\n  thisp = thisp || this;\n  for (var walker = this.tail, i = this.length - 1; walker !== null; i--) {\n    fn.call(thisp, walker.value, i, this);\n    walker = walker.prev;\n  }\n};\n\nYallist$1.prototype.get = function (n) {\n  for (var i = 0, walker = this.head; walker !== null && i < n; i++) {\n    // abort out of the list early if we hit a cycle\n    walker = walker.next;\n  }\n  if (i === n && walker !== null) {\n    return walker.value\n  }\n};\n\nYallist$1.prototype.getReverse = function (n) {\n  for (var i = 0, walker = this.tail; walker !== null && i < n; i++) {\n    // abort out of the list early if we hit a cycle\n    walker = walker.prev;\n  }\n  if (i === n && walker !== null) {\n    return walker.value\n  }\n};\n\nYallist$1.prototype.map = function (fn, thisp) {\n  thisp = thisp || this;\n  var res = new Yallist$1();\n  for (var walker = this.head; walker !== null;) {\n    res.push(fn.call(thisp, walker.value, this));\n    walker = walker.next;\n  }\n  return res\n};\n\nYallist$1.prototype.mapReverse = function (fn, thisp) {\n  thisp = thisp || this;\n  var res = new Yallist$1();\n  for (var walker = this.tail; walker !== null;) {\n    res.push(fn.call(thisp, walker.value, this));\n    walker = walker.prev;\n  }\n  return res\n};\n\nYallist$1.prototype.reduce = function (fn, initial) {\n  var acc;\n  var walker = this.head;\n  if (arguments.length > 1) {\n    acc = initial;\n  } else if (this.head) {\n    walker = this.head.next;\n    acc = this.head.value;\n  } else {\n    throw new TypeError('Reduce of empty list with no initial value')\n  }\n\n  for (var i = 0; walker !== null; i++) {\n    acc = fn(acc, walker.value, i);\n    walker = walker.next;\n  }\n\n  return acc\n};\n\nYallist$1.prototype.reduceReverse = function (fn, initial) {\n  var acc;\n  var walker = this.tail;\n  if (arguments.length > 1) {\n    acc = initial;\n  } else if (this.tail) {\n    walker = this.tail.prev;\n    acc = this.tail.value;\n  } else {\n    throw new TypeError('Reduce of empty list with no initial value')\n  }\n\n  for (var i = this.length - 1; walker !== null; i--) {\n    acc = fn(acc, walker.value, i);\n    walker = walker.prev;\n  }\n\n  return acc\n};\n\nYallist$1.prototype.toArray = function () {\n  var arr = new Array(this.length);\n  for (var i = 0, walker = this.head; walker !== null; i++) {\n    arr[i] = walker.value;\n    walker = walker.next;\n  }\n  return arr\n};\n\nYallist$1.prototype.toArrayReverse = function () {\n  var arr = new Array(this.length);\n  for (var i = 0, walker = this.tail; walker !== null; i++) {\n    arr[i] = walker.value;\n    walker = walker.prev;\n  }\n  return arr\n};\n\nYallist$1.prototype.slice = function (from, to) {\n  to = to || this.length;\n  if (to < 0) {\n    to += this.length;\n  }\n  from = from || 0;\n  if (from < 0) {\n    from += this.length;\n  }\n  var ret = new Yallist$1();\n  if (to < from || to < 0) {\n    return ret\n  }\n  if (from < 0) {\n    from = 0;\n  }\n  if (to > this.length) {\n    to = this.length;\n  }\n  for (var i = 0, walker = this.head; walker !== null && i < from; i++) {\n    walker = walker.next;\n  }\n  for (; walker !== null && i < to; i++, walker = walker.next) {\n    ret.push(walker.value);\n  }\n  return ret\n};\n\nYallist$1.prototype.sliceReverse = function (from, to) {\n  to = to || this.length;\n  if (to < 0) {\n    to += this.length;\n  }\n  from = from || 0;\n  if (from < 0) {\n    from += this.length;\n  }\n  var ret = new Yallist$1();\n  if (to < from || to < 0) {\n    return ret\n  }\n  if (from < 0) {\n    from = 0;\n  }\n  if (to > this.length) {\n    to = this.length;\n  }\n  for (var i = this.length, walker = this.tail; walker !== null && i > to; i--) {\n    walker = walker.prev;\n  }\n  for (; walker !== null && i > from; i--, walker = walker.prev) {\n    ret.push(walker.value);\n  }\n  return ret\n};\n\nYallist$1.prototype.splice = function (start, deleteCount /*, ...nodes */) {\n  if (start > this.length) {\n    start = this.length - 1;\n  }\n  if (start < 0) {\n    start = this.length + start;\n  }\n\n  for (var i = 0, walker = this.head; walker !== null && i < start; i++) {\n    walker = walker.next;\n  }\n\n  var ret = [];\n  for (var i = 0; walker && i < deleteCount; i++) {\n    ret.push(walker.value);\n    walker = this.removeNode(walker);\n  }\n  if (walker === null) {\n    walker = this.tail;\n  }\n\n  if (walker !== this.head && walker !== this.tail) {\n    walker = walker.prev;\n  }\n\n  for (var i = 2; i < arguments.length; i++) {\n    walker = insert(this, walker, arguments[i]);\n  }\n  return ret;\n};\n\nYallist$1.prototype.reverse = function () {\n  var head = this.head;\n  var tail = this.tail;\n  for (var walker = head; walker !== null; walker = walker.prev) {\n    var p = walker.prev;\n    walker.prev = walker.next;\n    walker.next = p;\n  }\n  this.head = tail;\n  this.tail = head;\n  return this\n};\n\nfunction insert (self, node, value) {\n  var inserted = node === self.head ?\n    new Node(value, null, node, self) :\n    new Node(value, node, node.next, self);\n\n  if (inserted.next === null) {\n    self.tail = inserted;\n  }\n  if (inserted.prev === null) {\n    self.head = inserted;\n  }\n\n  self.length++;\n\n  return inserted\n}\n\nfunction push (self, item) {\n  self.tail = new Node(item, self.tail, null, self);\n  if (!self.head) {\n    self.head = self.tail;\n  }\n  self.length++;\n}\n\nfunction unshift (self, item) {\n  self.head = new Node(item, null, self.head, self);\n  if (!self.tail) {\n    self.tail = self.head;\n  }\n  self.length++;\n}\n\nfunction Node (value, prev, next, list) {\n  if (!(this instanceof Node)) {\n    return new Node(value, prev, next, list)\n  }\n\n  this.list = list;\n  this.value = value;\n\n  if (prev) {\n    prev.next = this;\n    this.prev = prev;\n  } else {\n    this.prev = null;\n  }\n\n  if (next) {\n    next.prev = this;\n    this.next = next;\n  } else {\n    this.next = null;\n  }\n}\n\ntry {\n  // add if support for Symbol.iterator is present\n  requireIterator()(Yallist$1);\n} catch (er) {}\n\n// A linked list to keep track of recently-used-ness\nconst Yallist = yallist;\n\nconst MAX = Symbol('max');\nconst LENGTH = Symbol('length');\nconst LENGTH_CALCULATOR = Symbol('lengthCalculator');\nconst ALLOW_STALE = Symbol('allowStale');\nconst MAX_AGE = Symbol('maxAge');\nconst DISPOSE = Symbol('dispose');\nconst NO_DISPOSE_ON_SET = Symbol('noDisposeOnSet');\nconst LRU_LIST = Symbol('lruList');\nconst CACHE = Symbol('cache');\nconst UPDATE_AGE_ON_GET = Symbol('updateAgeOnGet');\n\nconst naiveLength = () => 1;\n\n// lruList is a yallist where the head is the youngest\n// item, and the tail is the oldest.  the list contains the Hit\n// objects as the entries.\n// Each Hit object has a reference to its Yallist.Node.  This\n// never changes.\n//\n// cache is a Map (or PseudoMap) that matches the keys to\n// the Yallist.Node object.\nclass LRUCache {\n  constructor (options) {\n    if (typeof options === 'number')\n      options = { max: options };\n\n    if (!options)\n      options = {};\n\n    if (options.max && (typeof options.max !== 'number' || options.max < 0))\n      throw new TypeError('max must be a non-negative number')\n    // Kind of weird to have a default max of Infinity, but oh well.\n    this[MAX] = options.max || Infinity;\n\n    const lc = options.length || naiveLength;\n    this[LENGTH_CALCULATOR] = (typeof lc !== 'function') ? naiveLength : lc;\n    this[ALLOW_STALE] = options.stale || false;\n    if (options.maxAge && typeof options.maxAge !== 'number')\n      throw new TypeError('maxAge must be a number')\n    this[MAX_AGE] = options.maxAge || 0;\n    this[DISPOSE] = options.dispose;\n    this[NO_DISPOSE_ON_SET] = options.noDisposeOnSet || false;\n    this[UPDATE_AGE_ON_GET] = options.updateAgeOnGet || false;\n    this.reset();\n  }\n\n  // resize the cache when the max changes.\n  set max (mL) {\n    if (typeof mL !== 'number' || mL < 0)\n      throw new TypeError('max must be a non-negative number')\n\n    this[MAX] = mL || Infinity;\n    trim(this);\n  }\n  get max () {\n    return this[MAX]\n  }\n\n  set allowStale (allowStale) {\n    this[ALLOW_STALE] = !!allowStale;\n  }\n  get allowStale () {\n    return this[ALLOW_STALE]\n  }\n\n  set maxAge (mA) {\n    if (typeof mA !== 'number')\n      throw new TypeError('maxAge must be a non-negative number')\n\n    this[MAX_AGE] = mA;\n    trim(this);\n  }\n  get maxAge () {\n    return this[MAX_AGE]\n  }\n\n  // resize the cache when the lengthCalculator changes.\n  set lengthCalculator (lC) {\n    if (typeof lC !== 'function')\n      lC = naiveLength;\n\n    if (lC !== this[LENGTH_CALCULATOR]) {\n      this[LENGTH_CALCULATOR] = lC;\n      this[LENGTH] = 0;\n      this[LRU_LIST].forEach(hit => {\n        hit.length = this[LENGTH_CALCULATOR](hit.value, hit.key);\n        this[LENGTH] += hit.length;\n      });\n    }\n    trim(this);\n  }\n  get lengthCalculator () { return this[LENGTH_CALCULATOR] }\n\n  get length () { return this[LENGTH] }\n  get itemCount () { return this[LRU_LIST].length }\n\n  rforEach (fn, thisp) {\n    thisp = thisp || this;\n    for (let walker = this[LRU_LIST].tail; walker !== null;) {\n      const prev = walker.prev;\n      forEachStep(this, fn, walker, thisp);\n      walker = prev;\n    }\n  }\n\n  forEach (fn, thisp) {\n    thisp = thisp || this;\n    for (let walker = this[LRU_LIST].head; walker !== null;) {\n      const next = walker.next;\n      forEachStep(this, fn, walker, thisp);\n      walker = next;\n    }\n  }\n\n  keys () {\n    return this[LRU_LIST].toArray().map(k => k.key)\n  }\n\n  values () {\n    return this[LRU_LIST].toArray().map(k => k.value)\n  }\n\n  reset () {\n    if (this[DISPOSE] &&\n        this[LRU_LIST] &&\n        this[LRU_LIST].length) {\n      this[LRU_LIST].forEach(hit => this[DISPOSE](hit.key, hit.value));\n    }\n\n    this[CACHE] = new Map(); // hash of items by key\n    this[LRU_LIST] = new Yallist(); // list of items in order of use recency\n    this[LENGTH] = 0; // length of items in the list\n  }\n\n  dump () {\n    return this[LRU_LIST].map(hit =>\n      isStale(this, hit) ? false : {\n        k: hit.key,\n        v: hit.value,\n        e: hit.now + (hit.maxAge || 0)\n      }).toArray().filter(h => h)\n  }\n\n  dumpLru () {\n    return this[LRU_LIST]\n  }\n\n  set (key, value, maxAge) {\n    maxAge = maxAge || this[MAX_AGE];\n\n    if (maxAge && typeof maxAge !== 'number')\n      throw new TypeError('maxAge must be a number')\n\n    const now = maxAge ? Date.now() : 0;\n    const len = this[LENGTH_CALCULATOR](value, key);\n\n    if (this[CACHE].has(key)) {\n      if (len > this[MAX]) {\n        del(this, this[CACHE].get(key));\n        return false\n      }\n\n      const node = this[CACHE].get(key);\n      const item = node.value;\n\n      // dispose of the old one before overwriting\n      // split out into 2 ifs for better coverage tracking\n      if (this[DISPOSE]) {\n        if (!this[NO_DISPOSE_ON_SET])\n          this[DISPOSE](key, item.value);\n      }\n\n      item.now = now;\n      item.maxAge = maxAge;\n      item.value = value;\n      this[LENGTH] += len - item.length;\n      item.length = len;\n      this.get(key);\n      trim(this);\n      return true\n    }\n\n    const hit = new Entry(key, value, len, now, maxAge);\n\n    // oversized objects fall out of cache automatically.\n    if (hit.length > this[MAX]) {\n      if (this[DISPOSE])\n        this[DISPOSE](key, value);\n\n      return false\n    }\n\n    this[LENGTH] += hit.length;\n    this[LRU_LIST].unshift(hit);\n    this[CACHE].set(key, this[LRU_LIST].head);\n    trim(this);\n    return true\n  }\n\n  has (key) {\n    if (!this[CACHE].has(key)) return false\n    const hit = this[CACHE].get(key).value;\n    return !isStale(this, hit)\n  }\n\n  get (key) {\n    return get(this, key, true)\n  }\n\n  peek (key) {\n    return get(this, key, false)\n  }\n\n  pop () {\n    const node = this[LRU_LIST].tail;\n    if (!node)\n      return null\n\n    del(this, node);\n    return node.value\n  }\n\n  del (key) {\n    del(this, this[CACHE].get(key));\n  }\n\n  load (arr) {\n    // reset the cache\n    this.reset();\n\n    const now = Date.now();\n    // A previous serialized cache has the most recent items first\n    for (let l = arr.length - 1; l >= 0; l--) {\n      const hit = arr[l];\n      const expiresAt = hit.e || 0;\n      if (expiresAt === 0)\n        // the item was created without expiration in a non aged cache\n        this.set(hit.k, hit.v);\n      else {\n        const maxAge = expiresAt - now;\n        // dont add already expired items\n        if (maxAge > 0) {\n          this.set(hit.k, hit.v, maxAge);\n        }\n      }\n    }\n  }\n\n  prune () {\n    this[CACHE].forEach((value, key) => get(this, key, false));\n  }\n}\n\nconst get = (self, key, doUse) => {\n  const node = self[CACHE].get(key);\n  if (node) {\n    const hit = node.value;\n    if (isStale(self, hit)) {\n      del(self, node);\n      if (!self[ALLOW_STALE])\n        return undefined\n    } else {\n      if (doUse) {\n        if (self[UPDATE_AGE_ON_GET])\n          node.value.now = Date.now();\n        self[LRU_LIST].unshiftNode(node);\n      }\n    }\n    return hit.value\n  }\n};\n\nconst isStale = (self, hit) => {\n  if (!hit || (!hit.maxAge && !self[MAX_AGE]))\n    return false\n\n  const diff = Date.now() - hit.now;\n  return hit.maxAge ? diff > hit.maxAge\n    : self[MAX_AGE] && (diff > self[MAX_AGE])\n};\n\nconst trim = self => {\n  if (self[LENGTH] > self[MAX]) {\n    for (let walker = self[LRU_LIST].tail;\n      self[LENGTH] > self[MAX] && walker !== null;) {\n      // We know that we're about to delete this one, and also\n      // what the next least recently used key will be, so just\n      // go ahead and set it now.\n      const prev = walker.prev;\n      del(self, walker);\n      walker = prev;\n    }\n  }\n};\n\nconst del = (self, node) => {\n  if (node) {\n    const hit = node.value;\n    if (self[DISPOSE])\n      self[DISPOSE](hit.key, hit.value);\n\n    self[LENGTH] -= hit.length;\n    self[CACHE].delete(hit.key);\n    self[LRU_LIST].removeNode(node);\n  }\n};\n\nclass Entry {\n  constructor (key, value, length, now, maxAge) {\n    this.key = key;\n    this.value = value;\n    this.length = length;\n    this.now = now;\n    this.maxAge = maxAge || 0;\n  }\n}\n\nconst forEachStep = (self, fn, node, thisp) => {\n  let hit = node.value;\n  if (isStale(self, hit)) {\n    del(self, node);\n    if (!self[ALLOW_STALE])\n      hit = undefined;\n  }\n  if (hit)\n    fn.call(thisp, hit.value, hit.key, self);\n};\n\nvar lruCache = LRUCache;\n\nvar LRU = lruCache;\n\nfunction createCache(size = 500) {\n    return new LRU(size);\n}\n\nfunction isRelativeUrl(url) {\n    const firstChar = url.charAt(0);\n    return firstChar === '.' || firstChar === '~' || firstChar === '@';\n}\nconst externalRE = /^(https?:)?\\/\\//;\nfunction isExternalUrl(url) {\n    return externalRE.test(url);\n}\nconst dataUrlRE = /^\\s*data:/i;\nfunction isDataUrl(url) {\n    return dataUrlRE.test(url);\n}\n/**\n * Parses string url into URL object.\n */\nfunction parseUrl(url) {\n    const firstChar = url.charAt(0);\n    if (firstChar === '~') {\n        const secondChar = url.charAt(1);\n        url = url.slice(secondChar === '/' ? 2 : 1);\n    }\n    return parseUriParts(url);\n}\n/**\n * vuejs/component-compiler-utils#22 Support uri fragment in transformed require\n * @param urlString an url as a string\n */\nfunction parseUriParts(urlString) {\n    // A TypeError is thrown if urlString is not a string\n    // @see https://nodejs.org/api/url.html#url_url_parse_urlstring_parsequerystring_slashesdenotehost\n    return url.parse(shared.isString(urlString) ? urlString : '', false, true);\n}\n\nconst defaultAssetUrlOptions = {\n    base: null,\n    includeAbsolute: false,\n    tags: {\n        video: ['src', 'poster'],\n        source: ['src'],\n        img: ['src'],\n        image: ['xlink:href', 'href'],\n        use: ['xlink:href', 'href']\n    }\n};\nconst normalizeOptions = (options) => {\n    if (Object.keys(options).some(key => shared.isArray(options[key]))) {\n        // legacy option format which directly passes in tags config\n        return {\n            ...defaultAssetUrlOptions,\n            tags: options\n        };\n    }\n    return {\n        ...defaultAssetUrlOptions,\n        ...options\n    };\n};\nconst createAssetUrlTransformWithOptions = (options) => {\n    return (node, context) => transformAssetUrl(node, context, options);\n};\n/**\n * A `@vue/compiler-core` plugin that transforms relative asset urls into\n * either imports or absolute urls.\n *\n * ``` js\n * // Before\n * createVNode('img', { src: './logo.png' })\n *\n * // After\n * import _imports_0 from './logo.png'\n * createVNode('img', { src: _imports_0 })\n * ```\n */\nconst transformAssetUrl = (node, context, options = defaultAssetUrlOptions) => {\n    if (node.type === 1 /* NodeTypes.ELEMENT */) {\n        if (!node.props.length) {\n            return;\n        }\n        const tags = options.tags || defaultAssetUrlOptions.tags;\n        const attrs = tags[node.tag];\n        const wildCardAttrs = tags['*'];\n        if (!attrs && !wildCardAttrs) {\n            return;\n        }\n        const assetAttrs = (attrs || []).concat(wildCardAttrs || []);\n        node.props.forEach((attr, index) => {\n            if (attr.type !== 6 /* NodeTypes.ATTRIBUTE */ ||\n                !assetAttrs.includes(attr.name) ||\n                !attr.value ||\n                isExternalUrl(attr.value.content) ||\n                isDataUrl(attr.value.content) ||\n                attr.value.content[0] === '#' ||\n                (!options.includeAbsolute && !isRelativeUrl(attr.value.content))) {\n                return;\n            }\n            const url = parseUrl(attr.value.content);\n            if (options.base && attr.value.content[0] === '.') {\n                // explicit base - directly rewrite relative urls into absolute url\n                // to avoid generating extra imports\n                // Allow for full hostnames provided in options.base\n                const base = parseUrl(options.base);\n                const protocol = base.protocol || '';\n                const host = base.host ? protocol + '//' + base.host : '';\n                const basePath = base.path || '/';\n                // when packaged in the browser, path will be using the posix-\n                // only version provided by rollup-plugin-node-builtins.\n                attr.value.content =\n                    host +\n                        (path$4.posix || path$4).join(basePath, url.path + (url.hash || ''));\n                return;\n            }\n            // otherwise, transform the url into an import.\n            // this assumes a bundler will resolve the import into the correct\n            // absolute url (e.g. webpack file-loader)\n            const exp = getImportsExpressionExp(url.path, url.hash, attr.loc, context);\n            node.props[index] = {\n                type: 7 /* NodeTypes.DIRECTIVE */,\n                name: 'bind',\n                arg: compilerCore.createSimpleExpression(attr.name, true, attr.loc),\n                exp,\n                modifiers: [],\n                loc: attr.loc\n            };\n        });\n    }\n};\nfunction getImportsExpressionExp(path, hash, loc, context) {\n    if (path) {\n        let name;\n        let exp;\n        const existingIndex = context.imports.findIndex(i => i.path === path);\n        if (existingIndex > -1) {\n            name = `_imports_${existingIndex}`;\n            exp = context.imports[existingIndex].exp;\n        }\n        else {\n            name = `_imports_${context.imports.length}`;\n            exp = compilerCore.createSimpleExpression(name, false, loc, 3 /* ConstantTypes.CAN_STRINGIFY */);\n            context.imports.push({ exp, path });\n        }\n        if (!hash) {\n            return exp;\n        }\n        const hashExp = `${name} + '${hash}'`;\n        const finalExp = compilerCore.createSimpleExpression(hashExp, false, loc, 3 /* ConstantTypes.CAN_STRINGIFY */);\n        if (!context.hoistStatic) {\n            return finalExp;\n        }\n        const existingHoistIndex = context.hoists.findIndex(h => {\n            return (h &&\n                h.type === 4 /* NodeTypes.SIMPLE_EXPRESSION */ &&\n                !h.isStatic &&\n                h.content === hashExp);\n        });\n        if (existingHoistIndex > -1) {\n            return compilerCore.createSimpleExpression(`_hoisted_${existingHoistIndex + 1}`, false, loc, 3 /* ConstantTypes.CAN_STRINGIFY */);\n        }\n        return context.hoist(finalExp);\n    }\n    else {\n        return compilerCore.createSimpleExpression(`''`, false, loc, 3 /* ConstantTypes.CAN_STRINGIFY */);\n    }\n}\n\nconst srcsetTags = ['img', 'source'];\n// http://w3c.github.io/html/semantics-embedded-content.html#ref-for-image-candidate-string-5\nconst escapedSpaceCharacters = /( |\\\\t|\\\\n|\\\\f|\\\\r)+/g;\nconst createSrcsetTransformWithOptions = (options) => {\n    return (node, context) => transformSrcset(node, context, options);\n};\nconst transformSrcset = (node, context, options = defaultAssetUrlOptions) => {\n    if (node.type === 1 /* NodeTypes.ELEMENT */) {\n        if (srcsetTags.includes(node.tag) && node.props.length) {\n            node.props.forEach((attr, index) => {\n                if (attr.name === 'srcset' && attr.type === 6 /* NodeTypes.ATTRIBUTE */) {\n                    if (!attr.value)\n                        return;\n                    const value = attr.value.content;\n                    if (!value)\n                        return;\n                    const imageCandidates = value.split(',').map(s => {\n                        // The attribute value arrives here with all whitespace, except\n                        // normal spaces, represented by escape sequences\n                        const [url, descriptor] = s\n                            .replace(escapedSpaceCharacters, ' ')\n                            .trim()\n                            .split(' ', 2);\n                        return { url, descriptor };\n                    });\n                    // data urls contains comma after the encoding so we need to re-merge\n                    // them\n                    for (let i = 0; i < imageCandidates.length; i++) {\n                        const { url } = imageCandidates[i];\n                        if (isDataUrl(url)) {\n                            imageCandidates[i + 1].url =\n                                url + ',' + imageCandidates[i + 1].url;\n                            imageCandidates.splice(i, 1);\n                        }\n                    }\n                    const shouldProcessUrl = (url) => {\n                        return (!isExternalUrl(url) &&\n                            !isDataUrl(url) &&\n                            (options.includeAbsolute || isRelativeUrl(url)));\n                    };\n                    // When srcset does not contain any qualified URLs, skip transforming\n                    if (!imageCandidates.some(({ url }) => shouldProcessUrl(url))) {\n                        return;\n                    }\n                    if (options.base) {\n                        const base = options.base;\n                        const set = [];\n                        let needImportTransform = false;\n                        imageCandidates.forEach(candidate => {\n                            let { url, descriptor } = candidate;\n                            descriptor = descriptor ? ` ${descriptor}` : ``;\n                            if (url[0] === '.') {\n                                candidate.url = (path$4.posix || path$4).join(base, url);\n                                set.push(candidate.url + descriptor);\n                            }\n                            else if (shouldProcessUrl(url)) {\n                                needImportTransform = true;\n                            }\n                            else {\n                                set.push(url + descriptor);\n                            }\n                        });\n                        if (!needImportTransform) {\n                            attr.value.content = set.join(', ');\n                            return;\n                        }\n                    }\n                    const compoundExpression = compilerCore.createCompoundExpression([], attr.loc);\n                    imageCandidates.forEach(({ url, descriptor }, index) => {\n                        if (shouldProcessUrl(url)) {\n                            const { path } = parseUrl(url);\n                            let exp;\n                            if (path) {\n                                const existingImportsIndex = context.imports.findIndex(i => i.path === path);\n                                if (existingImportsIndex > -1) {\n                                    exp = compilerCore.createSimpleExpression(`_imports_${existingImportsIndex}`, false, attr.loc, 3 /* ConstantTypes.CAN_STRINGIFY */);\n                                }\n                                else {\n                                    exp = compilerCore.createSimpleExpression(`_imports_${context.imports.length}`, false, attr.loc, 3 /* ConstantTypes.CAN_STRINGIFY */);\n                                    context.imports.push({ exp, path });\n                                }\n                                compoundExpression.children.push(exp);\n                            }\n                        }\n                        else {\n                            const exp = compilerCore.createSimpleExpression(`\"${url}\"`, false, attr.loc, 3 /* ConstantTypes.CAN_STRINGIFY */);\n                            compoundExpression.children.push(exp);\n                        }\n                        const isNotLast = imageCandidates.length - 1 > index;\n                        if (descriptor && isNotLast) {\n                            compoundExpression.children.push(` + ' ${descriptor}, ' + `);\n                        }\n                        else if (descriptor) {\n                            compoundExpression.children.push(` + ' ${descriptor}'`);\n                        }\n                        else if (isNotLast) {\n                            compoundExpression.children.push(` + ', ' + `);\n                        }\n                    });\n                    let exp = compoundExpression;\n                    if (context.hoistStatic) {\n                        exp = context.hoist(compoundExpression);\n                        exp.constType = 3 /* ConstantTypes.CAN_STRINGIFY */;\n                    }\n                    node.props[index] = {\n                        type: 7 /* NodeTypes.DIRECTIVE */,\n                        name: 'bind',\n                        arg: compilerCore.createSimpleExpression('srcset', true, attr.loc),\n                        exp,\n                        modifiers: [],\n                        loc: attr.loc\n                    };\n                }\n            });\n        }\n    }\n};\n\nvar consolidate$2 = {exports: {}};\n\nfunction commonjsRequire(path) {\n\tthrow new Error('Could not dynamically require \"' + path + '\". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.');\n}\n\nvar consolidate$1 = {exports: {}};\n\n(function (module, exports) {\n\t/*\n\t * Engines which do not support caching of their file contents\n\t * should use the `read()` function defined in consolidate.js\n\t * On top of this, when an engine compiles to a `Function`,\n\t * these functions should either be cached within consolidate.js\n\t * or the engine itself via `options.cache`. This will allow\n\t * users and frameworks to pass `options.cache = true` for\n\t * `NODE_ENV=production`, however edit the file(s) without\n\t * re-loading the application in development.\n\t */\n\n\t/**\n\t * Module dependencies.\n\t */\n\n\tvar fs = require$$0$1;\n\tvar path = path$4;\n\tvar util = require$$2;\n\n\tvar join = path.join;\n\tvar resolve = path.resolve;\n\tvar extname = path.extname;\n\tvar dirname = path.dirname;\n\tvar isAbsolute = path.isAbsolute;\n\n\tvar readCache = {};\n\n\t/**\n\t * Require cache.\n\t */\n\n\tvar cacheStore = {};\n\n\t/**\n\t * Require cache.\n\t */\n\n\tvar requires = {};\n\n\t/**\n\t * Clear the cache.\n\t *\n\t * @api public\n\t */\n\n\texports.clearCache = function() {\n\t  readCache = {};\n\t  cacheStore = {};\n\t};\n\n\t/**\n\t * Conditionally cache `compiled` template based\n\t * on the `options` filename and `.cache` boolean.\n\t *\n\t * @param {Object} options\n\t * @param {Function} compiled\n\t * @return {Function}\n\t * @api private\n\t */\n\n\tfunction cache(options, compiled) {\n\t  // cachable\n\t  if (compiled && options.filename && options.cache) {\n\t    delete readCache[options.filename];\n\t    cacheStore[options.filename] = compiled;\n\t    return compiled;\n\t  }\n\n\t  // check cache\n\t  if (options.filename && options.cache) {\n\t    return cacheStore[options.filename];\n\t  }\n\n\t  return compiled;\n\t}\n\n\t/**\n\t * Read `path` with `options` with\n\t * callback `(err, str)`. When `options.cache`\n\t * is true the template string will be cached.\n\t *\n\t * @param {String} options\n\t * @param {Function} cb\n\t * @api private\n\t */\n\n\tfunction read(path, options, cb) {\n\t  var str = readCache[path];\n\t  var cached = options.cache && str && typeof str === 'string';\n\n\t  // cached (only if cached is a string and not a compiled template function)\n\t  if (cached) return cb(null, str);\n\n\t  // read\n\t  fs.readFile(path, 'utf8', function(err, str) {\n\t    if (err) return cb(err);\n\t    // remove extraneous utf8 BOM marker\n\t    str = str.replace(/^\\uFEFF/, '');\n\t    if (options.cache) readCache[path] = str;\n\t    cb(null, str);\n\t  });\n\t}\n\n\t/**\n\t * Read `path` with `options` with\n\t * callback `(err, str)`. When `options.cache`\n\t * is true the partial string will be cached.\n\t *\n\t * @param {String} options\n\t * @param {Function} fn\n\t * @api private\n\t */\n\n\tfunction readPartials(path, options, cb) {\n\t  if (!options.partials) return cb();\n\t  var keys = Object.keys(options.partials);\n\t  var partials = {};\n\n\t  function next(index) {\n\t    if (index === keys.length) return cb(null, partials);\n\t    var key = keys[index];\n\t    var partialPath = options.partials[key];\n\n\t    if (partialPath === undefined || partialPath === null || partialPath === false) {\n\t      return next(++index);\n\t    }\n\n\t    var file;\n\t    if (isAbsolute(partialPath)) {\n\t      if (extname(partialPath) !== '') {\n\t        file = partialPath;\n\t      } else {\n\t        file = join(partialPath + extname(path));\n\t      }\n\t    } else {\n\t      file = join(dirname(path), partialPath + extname(path));\n\t    }\n\n\t    read(file, options, function(err, str) {\n\t      if (err) return cb(err);\n\t      partials[key] = str;\n\t      next(++index);\n\t    });\n\t  }\n\n\t  next(0);\n\t}\n\n\t/**\n\t * promisify\n\t */\n\tfunction promisify(cb, fn) {\n\t  return new Promise(function(resolve, reject) {\n\t    cb = cb || function(err, html) {\n\t      if (err) {\n\t        return reject(err);\n\t      }\n\t      resolve(html);\n\t    };\n\t    fn(cb);\n\t  });\n\t}\n\n\t/**\n\t * fromStringRenderer\n\t */\n\n\tfunction fromStringRenderer(name) {\n\t  return function(path, options, cb) {\n\t    options.filename = path;\n\n\t    return promisify(cb, function(cb) {\n\t      readPartials(path, options, function(err, partials) {\n\t        var extend = (requires.extend || (requires.extend = require$$2._extend));\n\t        var opts = extend({}, options);\n\t        opts.partials = partials;\n\t        if (err) return cb(err);\n\t        if (cache(opts)) {\n\t          exports[name].render('', opts, cb);\n\t        } else {\n\t          read(path, opts, function(err, str) {\n\t            if (err) return cb(err);\n\t            exports[name].render(str, opts, cb);\n\t          });\n\t        }\n\t      });\n\t    });\n\t  };\n\t}\n\n\t/**\n\t * velocity support.\n\t */\n\n\texports.velocityjs = fromStringRenderer('velocityjs');\n\n\t/**\n\t * velocity string support.\n\t */\n\n\texports.velocityjs.render = function(str, options, cb) {\n\t  return promisify(cb, function(cb) {\n\t    var engine = requires.velocityjs || (requires.velocityjs = require('velocityjs'));\n\t    try {\n\t      options.locals = options;\n\t      cb(null, engine.render(str, options).trimLeft());\n\t    } catch (err) {\n\t      cb(err);\n\t    }\n\t  });\n\t};\n\n\t/**\n\t * Liquid support.\n\t */\n\n\texports.liquid = fromStringRenderer('liquid');\n\n\t/**\n\t * Liquid string support.\n\t */\n\n\t/**\n\t * Note that in order to get filters and custom tags we've had to push\n\t * all user-defined locals down into @locals. However, just to make things\n\t * backwards-compatible, any property of `options` that is left after\n\t * processing and removing `locals`, `meta`, `filters`, `customTags` and\n\t * `includeDir` will also become a local.\n\t */\n\n\tfunction _renderTinyliquid(engine, str, options, cb) {\n\t  var context = engine.newContext();\n\t  var k;\n\n\t  /**\n\t   * Note that there's a bug in the library that doesn't allow us to pass\n\t   * the locals to newContext(), hence looping through the keys:\n\t   */\n\n\t  if (options.locals) {\n\t    for (k in options.locals) {\n\t      context.setLocals(k, options.locals[k]);\n\t    }\n\t    delete options.locals;\n\t  }\n\n\t  if (options.meta) {\n\t    context.setLocals('page', options.meta);\n\t    delete options.meta;\n\t  }\n\n\t  /**\n\t   * Add any defined filters:\n\t   */\n\n\t  if (options.filters) {\n\t    for (k in options.filters) {\n\t      context.setFilter(k, options.filters[k]);\n\t    }\n\t    delete options.filters;\n\t  }\n\n\t  /**\n\t   * Set up a callback for the include directory:\n\t   */\n\n\t  var includeDir = options.includeDir || process.cwd();\n\n\t  context.onInclude(function(name, callback) {\n\t    var extname = path.extname(name) ? '' : '.liquid';\n\t    var filename = path.resolve(includeDir, name + extname);\n\n\t    fs.readFile(filename, {encoding: 'utf8'}, function(err, data) {\n\t      if (err) return callback(err);\n\t      callback(null, engine.parse(data));\n\t    });\n\t  });\n\t  delete options.includeDir;\n\n\t  /**\n\t   * The custom tag functions need to have their results pushed back\n\t   * through the parser, so set up a shim before calling the provided\n\t   * callback:\n\t   */\n\n\t  var compileOptions = {\n\t    customTags: {}\n\t  };\n\n\t  if (options.customTags) {\n\t    var tagFunctions = options.customTags;\n\n\t    for (k in options.customTags) {\n\t      /*Tell jshint there's no problem with having this function in the loop */\n\t      /*jshint -W083 */\n\t      compileOptions.customTags[k] = function(context, name, body) {\n\t        var tpl = tagFunctions[name](body.trim());\n\t        context.astStack.push(engine.parse(tpl));\n\t      };\n\t      /*jshint +W083 */\n\t    }\n\t    delete options.customTags;\n\t  }\n\n\t  /**\n\t   * Now anything left in `options` becomes a local:\n\t   */\n\n\t  for (k in options) {\n\t    context.setLocals(k, options[k]);\n\t  }\n\n\t  /**\n\t   * Finally, execute the template:\n\t   */\n\n\t  var tmpl = cache(context) || cache(context, engine.compile(str, compileOptions));\n\t  tmpl(context, cb);\n\t}\n\n\texports.liquid.render = function(str, options, cb) {\n\t  return promisify(cb, function(cb) {\n\t    var engine = requires.liquid;\n\t    var Liquid;\n\n\t    try {\n\t      // set up tinyliquid engine\n\t      engine = requires.liquid = require('tinyliquid');\n\n\t      // use tinyliquid engine\n\t      _renderTinyliquid(engine, str, options, cb);\n\n\t      return;\n\n\t    } catch (err) {\n\n\t      // set up liquid-node engine\n\t      try {\n\t        Liquid = requires.liquid = require('liquid-node');\n\t        engine = new Liquid.Engine();\n\t      } catch (err) {\n\t        throw err;\n\t      }\n\n\t    }\n\n\t    // use liquid-node engine\n\t    try {\n\t      var locals = options.locals || {};\n\n\t      if (options.meta) {\n\t        locals.pages = options.meta;\n\t        delete options.meta;\n\t      }\n\n\t      /**\n\t       * Add any defined filters:\n\t       */\n\n\t      if (options.filters) {\n\t        engine.registerFilters(options.filters);\n\t        delete options.filters;\n\t      }\n\n\t      /**\n\t       * Set up a callback for the include directory:\n\t       */\n\n\t      var includeDir = options.includeDir || process.cwd();\n\t      engine.fileSystem = new Liquid.LocalFileSystem(includeDir, 'liquid');\n\t      delete options.includeDir;\n\n\t      /**\n\t       * The custom tag functions need to have their results pushed back\n\t       * through the parser, so set up a shim before calling the provided\n\t       * callback:\n\t       */\n\n\t      if (options.customTags) {\n\t        var tagFunctions = options.customTags;\n\n\t        for (k in options.customTags) {\n\t          engine.registerTag(k, tagFunctions[k]);\n\t        }\n\t        delete options.customTags;\n\t      }\n\n\t      /**\n\t       * Now anything left in `options` becomes a local:\n\t       */\n\n\t      for (var k in options) {\n\t        locals[k] = options[k];\n\t      }\n\n\t      /**\n\t       * Finally, execute the template:\n\t       */\n\n\t      return engine\n\t        .parseAndRender(str, locals)\n\t        .nodeify(function(err, result) {\n\t          if (err) {\n\t            throw new Error(err);\n\t          } else {\n\t            return cb(null, result);\n\t          }\n\t        });\n\n\t    } catch (err) {\n\t      cb(err);\n\t    }\n\t  });\n\t};\n\n\t/**\n\t * Jade support.\n\t */\n\n\texports.jade = function(path, options, cb) {\n\t  return promisify(cb, function(cb) {\n\t    var engine = requires.jade;\n\t    if (!engine) {\n\t      try {\n\t        engine = requires.jade = require('jade');\n\t      } catch (err) {\n\t        try {\n\t          engine = requires.jade = require('then-jade');\n\t        } catch (otherError) {\n\t          throw err;\n\t        }\n\t      }\n\t    }\n\n\t    try {\n\t      var tmpl = cache(options) || cache(options, engine.compileFile(path, options));\n\t      cb(null, tmpl(options));\n\t    } catch (err) {\n\t      cb(err);\n\t    }\n\t  });\n\t};\n\n\t/**\n\t * Jade string support.\n\t */\n\n\texports.jade.render = function(str, options, cb) {\n\t  return promisify(cb, function(cb) {\n\t    var engine = requires.jade;\n\t    if (!engine) {\n\t      try {\n\t        engine = requires.jade = require('jade');\n\t      } catch (err) {\n\t        try {\n\t          engine = requires.jade = require('then-jade');\n\t        } catch (otherError) {\n\t          throw err;\n\t        }\n\t      }\n\t    }\n\n\t    try {\n\t      var tmpl = cache(options) || cache(options, engine.compile(str, options));\n\t      cb(null, tmpl(options));\n\t    } catch (err) {\n\t      cb(err);\n\t    }\n\t  });\n\t};\n\n\t/**\n\t * Dust support.\n\t */\n\n\texports.dust = fromStringRenderer('dust');\n\n\t/**\n\t * Dust string support.\n\t */\n\n\texports.dust.render = function(str, options, cb) {\n\t  return promisify(cb, function(cb) {\n\t    var engine = requires.dust;\n\t    if (!engine) {\n\t      try {\n\t        engine = requires.dust = require('dust');\n\t      } catch (err) {\n\t        try {\n\t          engine = requires.dust = require('dustjs-helpers');\n\t        } catch (err) {\n\t          engine = requires.dust = require('dustjs-linkedin');\n\t        }\n\t      }\n\t    }\n\n\t    var ext = 'dust';\n\t    var views = '.';\n\n\t    if (options) {\n\t      if (options.ext) ext = options.ext;\n\t      if (options.views) views = options.views;\n\t      if (options.settings && options.settings.views) views = options.settings.views;\n\t    }\n\t    if (!options || (options && !options.cache)) engine.cache = {};\n\n\t    engine.onLoad = function(path, callback) {\n\t      if (extname(path) === '') path += '.' + ext;\n\t      if (path[0] !== '/') path = views + '/' + path;\n\t      read(path, options, callback);\n\t    };\n\n\t    try {\n\t      var templateName;\n\t      if (options.filename) {\n\t        templateName = options.filename.replace(new RegExp('^' + views + '/'), '').replace(new RegExp('\\\\.' + ext), '');\n\t      }\n\n\t      var tmpl = cache(options) || cache(options, engine.compileFn(str, templateName));\n\t      tmpl(options, cb);\n\t    } catch (err) {\n\t      cb(err);\n\t    }\n\t  });\n\t};\n\n\t/**\n\t * Swig support.\n\t */\n\n\texports.swig = fromStringRenderer('swig');\n\n\t/**\n\t * Swig string support.\n\t */\n\n\texports.swig.render = function(str, options, cb) {\n\t  return promisify(cb, function(cb) {\n\t    var engine = requires.swig;\n\t    if (!engine) {\n\t      try {\n\t        engine = requires.swig = require('swig');\n\t      } catch (err) {\n\t        try {\n\t          engine = requires.swig = require('swig-templates');\n\t        } catch (otherError) {\n\t          throw err;\n\t        }\n\t      }\n\t    }\n\n\t    try {\n\t      if (options.cache === true) options.cache = 'memory';\n\t      engine.setDefaults({ cache: options.cache });\n\t      var tmpl = cache(options) || cache(options, engine.compile(str, options));\n\t      cb(null, tmpl(options));\n\t    } catch (err) {\n\t      cb(err);\n\t    }\n\t  });\n\t};\n\n\t/**\n\t * Razor support.\n\t */\n\n\texports.razor = function(path, options, cb) {\n\t  return promisify(cb, function(cb) {\n\t    var engine = requires.razor;\n\t    if (!engine) {\n\t      try {\n\t        engine = requires.razor = require('razor-tmpl');\n\n\t      } catch (err) {\n\n\t        throw err;\n\n\t      }\n\t    }\n\t    try {\n\n\t      var tmpl = cache(options) || cache(options, (locals) => {\n\t        console.log('Rendering razor file', path);\n\t        return engine.renderFileSync(path, locals);\n\t      });\n\t      cb(null, tmpl(options));\n\t    } catch (err) {\n\t      cb(err);\n\t    }\n\t  });\n\t};\n\n\t/**\n\t * razor string support.\n\t */\n\n\texports.razor.render = function(str, options, cb) {\n\t  return promisify(cb, function(cb) {\n\n\t    try {\n\t      var engine = requires.razor = require('razor-tmpl');\n\t    } catch (err) {\n\t      throw err;\n\t    }\n\n\t    try {\n\t      var tf = engine.compile(str);\n\t      var tmpl = cache(options) || cache(options, tf);\n\t      cb(null, tmpl(options));\n\t    } catch (err) {\n\t      cb(err);\n\t    }\n\t  });\n\t};\n\n\t/**\n\t * Atpl support.\n\t */\n\n\texports.atpl = fromStringRenderer('atpl');\n\n\t/**\n\t * Atpl string support.\n\t */\n\n\texports.atpl.render = function(str, options, cb) {\n\t  return promisify(cb, function(cb) {\n\t    var engine = requires.atpl || (requires.atpl = require('atpl'));\n\t    try {\n\t      var tmpl = cache(options) || cache(options, engine.compile(str, options));\n\t      cb(null, tmpl(options));\n\t    } catch (err) {\n\t      cb(err);\n\t    }\n\t  });\n\t};\n\n\t/**\n\t * Liquor support,\n\t */\n\n\texports.liquor = fromStringRenderer('liquor');\n\n\t/**\n\t * Liquor string support.\n\t */\n\n\texports.liquor.render = function(str, options, cb) {\n\t  return promisify(cb, function(cb) {\n\t    var engine = requires.liquor || (requires.liquor = require('liquor'));\n\t    try {\n\t      var tmpl = cache(options) || cache(options, engine.compile(str, options));\n\t      cb(null, tmpl(options));\n\t    } catch (err) {\n\t      cb(err);\n\t    }\n\t  });\n\t};\n\n\t/**\n\t * Twig support.\n\t */\n\n\texports.twig = fromStringRenderer('twig');\n\n\t/**\n\t * Twig string support.\n\t */\n\n\texports.twig.render = function(str, options, cb) {\n\t  return promisify(cb, function(cb) {\n\t    var engine = requires.twig || (requires.twig = require('twig').twig);\n\t    var templateData = {\n\t      data: str,\n\t      allowInlineIncludes: options.allowInlineIncludes,\n\t      namespaces: options.namespaces,\n\t      path: options.path\n\t    };\n\t    try {\n\t      var tmpl = cache(templateData) || cache(templateData, engine(templateData));\n\t      cb(null, tmpl.render(options));\n\t    } catch (err) {\n\t      cb(err);\n\t    }\n\t  });\n\t};\n\n\t/**\n\t * EJS support.\n\t */\n\n\texports.ejs = fromStringRenderer('ejs');\n\n\t/**\n\t * EJS string support.\n\t */\n\n\texports.ejs.render = function(str, options, cb) {\n\t  return promisify(cb, function(cb) {\n\t    var engine = requires.ejs || (requires.ejs = require('ejs'));\n\t    try {\n\t      var tmpl = cache(options) || cache(options, engine.compile(str, options));\n\t      cb(null, tmpl(options));\n\t    } catch (err) {\n\t      cb(err);\n\t    }\n\t  });\n\t};\n\n\t/**\n\t * Eco support.\n\t */\n\n\texports.eco = fromStringRenderer('eco');\n\n\t/**\n\t * Eco string support.\n\t */\n\n\texports.eco.render = function(str, options, cb) {\n\t  return promisify(cb, function(cb) {\n\t    var engine = requires.eco || (requires.eco = require('eco'));\n\t    try {\n\t      cb(null, engine.render(str, options));\n\t    } catch (err) {\n\t      cb(err);\n\t    }\n\t  });\n\t};\n\n\t/**\n\t * Jazz support.\n\t */\n\n\texports.jazz = fromStringRenderer('jazz');\n\n\t/**\n\t * Jazz string support.\n\t */\n\n\texports.jazz.render = function(str, options, cb) {\n\t  return promisify(cb, function(cb) {\n\t    var engine = requires.jazz || (requires.jazz = require('jazz'));\n\t    try {\n\t      var tmpl = cache(options) || cache(options, engine.compile(str, options));\n\t      tmpl.eval(options, function(str) {\n\t        cb(null, str);\n\t      });\n\t    } catch (err) {\n\t      cb(err);\n\t    }\n\t  });\n\t};\n\n\t/**\n\t * JQTPL support.\n\t */\n\n\texports.jqtpl = fromStringRenderer('jqtpl');\n\n\t/**\n\t * JQTPL string support.\n\t */\n\n\texports.jqtpl.render = function(str, options, cb) {\n\t  return promisify(cb, function(cb) {\n\t    var engine = requires.jqtpl || (requires.jqtpl = require('jqtpl'));\n\t    try {\n\t      engine.template(str, str);\n\t      cb(null, engine.tmpl(str, options));\n\t    } catch (err) {\n\t      cb(err);\n\t    }\n\t  });\n\t};\n\n\t/**\n\t * Haml support.\n\t */\n\n\texports.haml = fromStringRenderer('haml');\n\n\t/**\n\t * Haml string support.\n\t */\n\n\texports.haml.render = function(str, options, cb) {\n\t  return promisify(cb, function(cb) {\n\t    var engine = requires.haml || (requires.haml = require('hamljs'));\n\t    try {\n\t      options.locals = options;\n\t      cb(null, engine.render(str, options).trimLeft());\n\t    } catch (err) {\n\t      cb(err);\n\t    }\n\t  });\n\t};\n\n\t/**\n\t * Hamlet support.\n\t */\n\n\texports.hamlet = fromStringRenderer('hamlet');\n\n\t/**\n\t * Hamlet string support.\n\t */\n\n\texports.hamlet.render = function(str, options, cb) {\n\t  return promisify(cb, function(cb) {\n\t    var engine = requires.hamlet || (requires.hamlet = require('hamlet'));\n\t    try {\n\t      options.locals = options;\n\t      cb(null, engine.render(str, options).trimLeft());\n\t    } catch (err) {\n\t      cb(err);\n\t    }\n\t  });\n\t};\n\n\t/**\n\t * Whiskers support.\n\t */\n\n\texports.whiskers = function(path, options, cb) {\n\t  return promisify(cb, function(cb) {\n\t    var engine = requires.whiskers || (requires.whiskers = require('whiskers'));\n\t    engine.__express(path, options, cb);\n\t  });\n\t};\n\n\t/**\n\t * Whiskers string support.\n\t */\n\n\texports.whiskers.render = function(str, options, cb) {\n\t  return promisify(cb, function(cb) {\n\t    var engine = requires.whiskers || (requires.whiskers = require('whiskers'));\n\t    try {\n\t      cb(null, engine.render(str, options));\n\t    } catch (err) {\n\t      cb(err);\n\t    }\n\t  });\n\t};\n\n\t/**\n\t * Coffee-HAML support.\n\t */\n\n\texports['haml-coffee'] = fromStringRenderer('haml-coffee');\n\n\t/**\n\t * Coffee-HAML string support.\n\t */\n\n\texports['haml-coffee'].render = function(str, options, cb) {\n\t  return promisify(cb, function(cb) {\n\t    var engine = requires['haml-coffee'] || (requires['haml-coffee'] = require('haml-coffee'));\n\t    try {\n\t      var tmpl = cache(options) || cache(options, engine.compile(str, options));\n\t      cb(null, tmpl(options));\n\t    } catch (err) {\n\t      cb(err);\n\t    }\n\t  });\n\t};\n\n\t/**\n\t * Hogan support.\n\t */\n\n\texports.hogan = fromStringRenderer('hogan');\n\n\t/**\n\t * Hogan string support.\n\t */\n\n\texports.hogan.render = function(str, options, cb) {\n\t  return promisify(cb, function(cb) {\n\t    var engine = requires.hogan || (requires.hogan = require('hogan.js'));\n\t    try {\n\t      var tmpl = cache(options) || cache(options, engine.compile(str, options));\n\t      cb(null, tmpl.render(options, options.partials));\n\t    } catch (err) {\n\t      cb(err);\n\t    }\n\t  });\n\t};\n\n\t/**\n\t * templayed.js support.\n\t */\n\n\texports.templayed = fromStringRenderer('templayed');\n\n\t/**\n\t * templayed.js string support.\n\t */\n\n\texports.templayed.render = function(str, options, cb) {\n\t  return promisify(cb, function(cb) {\n\t    var engine = requires.templayed || (requires.templayed = require('templayed'));\n\t    try {\n\t      var tmpl = cache(options) || cache(options, engine(str));\n\t      cb(null, tmpl(options));\n\t    } catch (err) {\n\t      cb(err);\n\t    }\n\t  });\n\t};\n\n\t/**\n\t * Handlebars support.\n\t */\n\n\texports.handlebars = fromStringRenderer('handlebars');\n\n\t/**\n\t * Handlebars string support.\n\t */\n\n\texports.handlebars.render = function(str, options, cb) {\n\t  return promisify(cb, function(cb) {\n\t    var engine = requires.handlebars || (requires.handlebars = require('handlebars'));\n\t    try {\n\t      for (var partial in options.partials) {\n\t        engine.registerPartial(partial, options.partials[partial]);\n\t      }\n\t      for (var helper in options.helpers) {\n\t        engine.registerHelper(helper, options.helpers[helper]);\n\t      }\n\t      var tmpl = cache(options) || cache(options, engine.compile(str, options));\n\t      cb(null, tmpl(options));\n\t    } catch (err) {\n\t      cb(err);\n\t    }\n\t  });\n\t};\n\n\t/**\n\t * Underscore support.\n\t */\n\n\texports.underscore = fromStringRenderer('underscore');\n\n\t/**\n\t * Underscore string support.\n\t */\n\n\texports.underscore.render = function(str, options, cb) {\n\t  return promisify(cb, function(cb) {\n\t    var engine = requires.underscore || (requires.underscore = require('underscore'));\n\t    try {\n\t      const partials = {};\n\t      for (var partial in options.partials) {\n\t        partials[partial] = engine.template(options.partials[partial]);\n\t      }\n\t      options.partials = partials;\n\t      var tmpl = cache(options) || cache(options, engine.template(str, null, options));\n\t      cb(null, tmpl(options).replace(/\\n$/, ''));\n\t    } catch (err) {\n\t      cb(err);\n\t    }\n\t  });\n\t};\n\n\t/**\n\t * Lodash support.\n\t */\n\n\texports.lodash = fromStringRenderer('lodash');\n\n\t/**\n\t * Lodash string support.\n\t */\n\n\texports.lodash.render = function(str, options, cb) {\n\t  return promisify(cb, function(cb) {\n\t    var engine = requires.lodash || (requires.lodash = require('lodash'));\n\t    try {\n\t      var tmpl = cache(options) || cache(options, engine.template(str, options));\n\t      cb(null, tmpl(options).replace(/\\n$/, ''));\n\t    } catch (err) {\n\t      cb(err);\n\t    }\n\t  });\n\t};\n\n\t/**\n\t * Pug support. (formerly Jade)\n\t */\n\n\texports.pug = function(path, options, cb) {\n\t  return promisify(cb, function(cb) {\n\t    var engine = requires.pug;\n\t    if (!engine) {\n\t      try {\n\t        engine = requires.pug = require('pug');\n\t      } catch (err) {\n\t        try {\n\t          engine = requires.pug = require('then-pug');\n\t        } catch (otherError) {\n\t          throw err;\n\t        }\n\t      }\n\t    }\n\n\t    try {\n\t      var tmpl = cache(options) || cache(options, engine.compileFile(path, options));\n\t      cb(null, tmpl(options));\n\t    } catch (err) {\n\t      cb(err);\n\t    }\n\t  });\n\t};\n\n\t/**\n\t * Pug string support.\n\t */\n\n\texports.pug.render = function(str, options, cb) {\n\t  return promisify(cb, function(cb) {\n\t    var engine = requires.pug;\n\t    if (!engine) {\n\t      try {\n\t        engine = requires.pug = require('pug');\n\t      } catch (err) {\n\t        try {\n\t          engine = requires.pug = require('then-pug');\n\t        } catch (otherError) {\n\t          throw err;\n\t        }\n\t      }\n\t    }\n\n\t    try {\n\t      var tmpl = cache(options) || cache(options, engine.compile(str, options));\n\t      cb(null, tmpl(options));\n\t    } catch (err) {\n\t      cb(err);\n\t    }\n\t  });\n\t};\n\n\t/**\n\t * QEJS support.\n\t */\n\n\texports.qejs = fromStringRenderer('qejs');\n\n\t/**\n\t * QEJS string support.\n\t */\n\n\texports.qejs.render = function(str, options, cb) {\n\t  return promisify(cb, function(cb) {\n\t    try {\n\t      var engine = requires.qejs || (requires.qejs = require('qejs'));\n\t      engine.render(str, options).then(function(result) {\n\t        cb(null, result);\n\t      }, function(err) {\n\t        cb(err);\n\t      }).done();\n\t    } catch (err) {\n\t      cb(err);\n\t    }\n\t  });\n\t};\n\n\t/**\n\t * Walrus support.\n\t */\n\n\texports.walrus = fromStringRenderer('walrus');\n\n\t/**\n\t * Walrus string support.\n\t */\n\n\texports.walrus.render = function(str, options, cb) {\n\t  return promisify(cb, function(cb) {\n\t    var engine = requires.walrus || (requires.walrus = require('walrus'));\n\t    try {\n\t      var tmpl = cache(options) || cache(options, engine.parse(str));\n\t      cb(null, tmpl.compile(options));\n\t    } catch (err) {\n\t      cb(err);\n\t    }\n\t  });\n\t};\n\n\t/**\n\t * Mustache support.\n\t */\n\n\texports.mustache = fromStringRenderer('mustache');\n\n\t/**\n\t * Mustache string support.\n\t */\n\n\texports.mustache.render = function(str, options, cb) {\n\t  return promisify(cb, function(cb) {\n\t    var engine = requires.mustache || (requires.mustache = require('mustache'));\n\t    try {\n\t      cb(null, engine.render(str, options, options.partials));\n\t    } catch (err) {\n\t      cb(err);\n\t    }\n\t  });\n\t};\n\n\t/**\n\t * Just support.\n\t */\n\n\texports.just = function(path, options, cb) {\n\t  return promisify(cb, function(cb) {\n\t    var engine = requires.just;\n\t    if (!engine) {\n\t      var JUST = require('just');\n\t      engine = requires.just = new JUST();\n\t    }\n\t    engine.configure({ useCache: options.cache });\n\t    engine.render(path, options, cb);\n\t  });\n\t};\n\n\t/**\n\t * Just string support.\n\t */\n\n\texports.just.render = function(str, options, cb) {\n\t  return promisify(cb, function(cb) {\n\t    var JUST = require('just');\n\t    var engine = new JUST({ root: { page: str }});\n\t    engine.render('page', options, cb);\n\t  });\n\t};\n\n\t/**\n\t * ECT support.\n\t */\n\n\texports.ect = function(path, options, cb) {\n\t  return promisify(cb, function(cb) {\n\t    var engine = requires.ect;\n\t    if (!engine) {\n\t      var ECT = require('ect');\n\t      engine = requires.ect = new ECT(options);\n\t    }\n\t    engine.configure({ cache: options.cache });\n\t    engine.render(path, options, cb);\n\t  });\n\t};\n\n\t/**\n\t * ECT string support.\n\t */\n\n\texports.ect.render = function(str, options, cb) {\n\t  return promisify(cb, function(cb) {\n\t    var ECT = require('ect');\n\t    var engine = new ECT({ root: { page: str }});\n\t    engine.render('page', options, cb);\n\t  });\n\t};\n\n\t/**\n\t * mote support.\n\t */\n\n\texports.mote = fromStringRenderer('mote');\n\n\t/**\n\t * mote string support.\n\t */\n\n\texports.mote.render = function(str, options, cb) {\n\t  return promisify(cb, function(cb) {\n\t    var engine = requires.mote || (requires.mote = require('mote'));\n\t    try {\n\t      var tmpl = cache(options) || cache(options, engine.compile(str));\n\t      cb(null, tmpl(options));\n\t    } catch (err) {\n\t      cb(err);\n\t    }\n\t  });\n\t};\n\n\t/**\n\t * Toffee support.\n\t */\n\n\texports.toffee = function(path, options, cb) {\n\t  return promisify(cb, function(cb) {\n\t    var toffee = requires.toffee || (requires.toffee = require('toffee'));\n\t    toffee.__consolidate_engine_render(path, options, cb);\n\t  });\n\t};\n\n\t/**\n\t * Toffee string support.\n\t */\n\n\texports.toffee.render = function(str, options, cb) {\n\t  return promisify(cb, function(cb) {\n\t    var engine = requires.toffee || (requires.toffee = require('toffee'));\n\t    try {\n\t      engine.str_render(str, options, cb);\n\t    } catch (err) {\n\t      cb(err);\n\t    }\n\t  });\n\t};\n\n\t/**\n\t * doT support.\n\t */\n\n\texports.dot = fromStringRenderer('dot');\n\n\t/**\n\t * doT string support.\n\t */\n\n\texports.dot.render = function(str, options, cb) {\n\t  return promisify(cb, function(cb) {\n\t    var engine = requires.dot || (requires.dot = require('dot'));\n\t    var extend = (requires.extend || (requires.extend = require$$2._extend));\n\t    try {\n\t      var settings = {};\n\t      settings = extend(settings, engine.templateSettings);\n\t      settings = extend(settings, options ? options.dot : {});\n\t      var tmpl = cache(options) || cache(options, engine.template(str, settings, options));\n\t      cb(null, tmpl(options));\n\t    } catch (err) {\n\t      cb(err);\n\t    }\n\t  });\n\t};\n\n\t/**\n\t * bracket support.\n\t */\n\n\texports.bracket = fromStringRenderer('bracket');\n\n\t/**\n\t * bracket string support.\n\t */\n\n\texports.bracket.render = function(str, options, cb) {\n\t  return promisify(cb, function(cb) {\n\t    var engine = requires.bracket || (requires.bracket = require('bracket-template'));\n\t    try {\n\t      var tmpl = cache(options) || cache(options, engine.default.compile(str, options));\n\t      cb(null, tmpl(options));\n\t    } catch (err) {\n\t      cb(err);\n\t    }\n\t  });\n\t};\n\n\t/**\n\t * Ractive support.\n\t */\n\n\texports.ractive = fromStringRenderer('ractive');\n\n\t/**\n\t * Ractive string support.\n\t */\n\n\texports.ractive.render = function(str, options, cb) {\n\t  return promisify(cb, function(cb) {\n\t    var Engine = requires.ractive || (requires.ractive = require('ractive'));\n\n\t    var template = cache(options) || cache(options, Engine.parse(str));\n\t    options.template = template;\n\n\t    if (options.data === null || options.data === undefined) {\n\t      var extend = (requires.extend || (requires.extend = require$$2._extend));\n\n\t      // Shallow clone the options object\n\t      options.data = extend({}, options);\n\n\t      // Remove consolidate-specific properties from the clone\n\t      var i;\n\t      var length;\n\t      var properties = ['template', 'filename', 'cache', 'partials'];\n\t      for (i = 0, length = properties.length; i < length; i++) {\n\t        var property = properties[i];\n\t        delete options.data[property];\n\t      }\n\t    }\n\n\t    try {\n\t      cb(null, new Engine(options).toHTML());\n\t    } catch (err) {\n\t      cb(err);\n\t    }\n\t  });\n\t};\n\n\t/**\n\t * Nunjucks support.\n\t */\n\n\texports.nunjucks = fromStringRenderer('nunjucks');\n\n\t/**\n\t * Nunjucks string support.\n\t */\n\n\texports.nunjucks.render = function(str, options, cb) {\n\t  return promisify(cb, function(cb) {\n\n\t    try {\n\n\t      var engine = options.nunjucksEnv || requires.nunjucks || (requires.nunjucks = require('nunjucks'));\n\n\t      var env = engine;\n\n\t      // deprecated fallback support for express\n\t      // <https://github.com/tj/consolidate.js/pull/152>\n\t      // <https://github.com/tj/consolidate.js/pull/224>\n\t      if (options.settings && options.settings.views) {\n\t        env = engine.configure(options.settings.views);\n\t      } else if (options.nunjucks && options.nunjucks.configure) {\n\t        env = engine.configure.apply(engine, options.nunjucks.configure);\n\t      }\n\n\t      //\n\t      // because `renderString` does not initiate loaders\n\t      // we must manually create a loader for it based off\n\t      // either `options.settings.views` or `options.nunjucks` or `options.nunjucks.root`\n\t      //\n\t      // <https://github.com/mozilla/nunjucks/issues/730>\n\t      // <https://github.com/crocodilejs/node-email-templates/issues/182>\n\t      //\n\n\t      // so instead we simply check if we passed a custom loader\n\t      // otherwise we create a simple file based loader\n\t      if (options.loader) {\n\t        env = new engine.Environment(options.loader);\n\t      } else if (options.settings && options.settings.views) {\n\t        env = new engine.Environment(\n\t          new engine.FileSystemLoader(options.settings.views)\n\t        );\n\t      } else if (options.nunjucks && options.nunjucks.loader) {\n\t        if (typeof options.nunjucks.loader === 'string') {\n\t          env = new engine.Environment(new engine.FileSystemLoader(options.nunjucks.loader));\n\t        } else {\n\t          env = new engine.Environment(\n\t            new engine.FileSystemLoader(\n\t              options.nunjucks.loader[0],\n\t              options.nunjucks.loader[1]\n\t            )\n\t          );\n\t        }\n\t      }\n\n\t      env.renderString(str, options, cb);\n\t    } catch (err) {\n\t      throw cb(err);\n\t    }\n\t  });\n\t};\n\n\t/**\n\t * HTMLing support.\n\t */\n\n\texports.htmling = fromStringRenderer('htmling');\n\n\t/**\n\t * HTMLing string support.\n\t */\n\n\texports.htmling.render = function(str, options, cb) {\n\t  return promisify(cb, function(cb) {\n\t    var engine = requires.htmling || (requires.htmling = require('htmling'));\n\t    try {\n\t      var tmpl = cache(options) || cache(options, engine.string(str));\n\t      cb(null, tmpl.render(options));\n\t    } catch (err) {\n\t      cb(err);\n\t    }\n\t  });\n\t};\n\n\t/**\n\t *  Rendering function\n\t */\n\tfunction requireReact(module, filename) {\n\t  var babel = requires.babel || (requires.babel = require('babel-core'));\n\n\t  var compiled = babel.transformFileSync(filename, { presets: [ 'react' ] }).code;\n\n\t  return module._compile(compiled, filename);\n\t}\n\n\texports.requireReact = requireReact;\n\n\t/**\n\t *  Converting a string into a node module.\n\t */\n\tfunction requireReactString(src, filename) {\n\t  var babel = requires.babel || (requires.babel = require('babel-core'));\n\n\t  if (!filename) filename = '';\n\t  var m = new module.constructor();\n\t  filename = filename || '';\n\n\t  // Compile Using React\n\t  var compiled = babel.transform(src, { presets: [ 'react' ] }).code;\n\n\t  // Compile as a module\n\t  m.paths = module.paths;\n\t  m._compile(compiled, filename);\n\n\t  return m.exports;\n\t}\n\n\t/**\n\t * A naive helper to replace {{tags}} with options.tags content\n\t */\n\tfunction reactBaseTmpl(data, options) {\n\n\t  var exp;\n\t  var regex;\n\n\t  // Iterates through the keys in file object\n\t  // and interpolate / replace {{key}} with it's value\n\t  for (var k in options) {\n\t    if (options.hasOwnProperty(k)) {\n\t      exp = '{{' + k + '}}';\n\t      regex = new RegExp(exp, 'g');\n\t      if (data.match(regex)) {\n\t        data = data.replace(regex, options[k]);\n\t      }\n\t    }\n\t  }\n\n\t  return data;\n\t}\n\n\t/**\n\t* Plates Support.\n\t*/\n\n\texports.plates = fromStringRenderer('plates');\n\n\t/**\n\t* Plates string support.\n\t*/\n\n\texports.plates.render = function(str, options, cb) {\n\t  return promisify(cb, function(cb) {\n\t    var engine = requires.plates || (requires.plates = require('plates'));\n\t    var map = options.map || undefined;\n\t    try {\n\t      var tmpl = engine.bind(str, options, map);\n\t      cb(null, tmpl);\n\t    } catch (err) {\n\t      cb(err);\n\t    }\n\t  });\n\t};\n\n\t/**\n\t *  The main render parser for React bsaed templates\n\t */\n\tfunction reactRenderer(type) {\n\n\t  if (commonjsRequire.extensions) {\n\n\t    // Ensure JSX is transformed on require\n\t    if (!commonjsRequire.extensions['.jsx']) {\n\t      commonjsRequire.extensions['.jsx'] = requireReact;\n\t    }\n\n\t    // Supporting .react extension as well as test cases\n\t    // Using .react extension is not recommended.\n\t    if (!commonjsRequire.extensions['.react']) {\n\t      commonjsRequire.extensions['.react'] = requireReact;\n\t    }\n\n\t  }\n\n\t  // Return rendering fx\n\t  return function(str, options, cb) {\n\t    return promisify(cb, function(cb) {\n\t      // React Import\n\t      var ReactDOM = requires.ReactDOM || (requires.ReactDOM = require('react-dom/server'));\n\t      var react = requires.react || (requires.react = require('react'));\n\n\t      // Assign HTML Base\n\t      var base = options.base;\n\t      delete options.base;\n\n\t      var enableCache = options.cache;\n\t      delete options.cache;\n\n\t      var isNonStatic = options.isNonStatic;\n\t      delete options.isNonStatic;\n\n\t      // Start Conversion\n\t      try {\n\n\t        var Code;\n\t        var Factory;\n\n\t        var baseStr;\n\t        var content;\n\t        var parsed;\n\n\t        if (!cache(options)) {\n\t          // Parsing\n\t          if (type === 'path') {\n\t            var path = resolve(str);\n\t            delete require.cache[path];\n\t            Code = commonjsRequire(path);\n\t          } else {\n\t            Code = requireReactString(str);\n\t          }\n\t          Factory = cache(options, react.createFactory(Code));\n\n\t        } else {\n\t          Factory = cache(options);\n\t        }\n\n\t        parsed = new Factory(options);\n\t        content = (isNonStatic) ? ReactDOM.renderToString(parsed) : ReactDOM.renderToStaticMarkup(parsed);\n\n\t        if (base) {\n\t          baseStr = readCache[str] || fs.readFileSync(resolve(base), 'utf8');\n\n\t          if (enableCache) {\n\t            readCache[str] = baseStr;\n\t          }\n\n\t          options.content = content;\n\t          content = reactBaseTmpl(baseStr, options);\n\t        }\n\n\t        cb(null, content);\n\n\t      } catch (err) {\n\t        cb(err);\n\t      }\n\t    });\n\t  };\n\t}\n\n\t/**\n\t * React JS Support\n\t */\n\texports.react = reactRenderer('path');\n\n\t/**\n\t * React JS string support.\n\t */\n\texports.react.render = reactRenderer('string');\n\n\t/**\n\t * ARC-templates support.\n\t */\n\n\texports['arc-templates'] = fromStringRenderer('arc-templates');\n\n\t/**\n\t * ARC-templates string support.\n\t */\n\n\texports['arc-templates'].render = function(str, options, cb) {\n\t  var readFileWithOptions = util.promisify(read);\n\t  var consolidateFileSystem = {};\n\t  consolidateFileSystem.readFile = function(path) {\n\t    return readFileWithOptions(path, options);\n\t  };\n\n\t  return promisify(cb, function(cb) {\n\t    try {\n\t      var engine = requires['arc-templates'];\n\t      if (!engine) {\n\t        var Engine = require('arc-templates/dist/es5');\n\t        engine = requires['arc-templates'] = new Engine({ filesystem: consolidateFileSystem });\n\t      }\n\n\t      var compiler = cache(options) || cache(options, engine.compileString(str, options.filename));\n\t      compiler.then(function(func) { return func(options); })\n\t        .then(function(result) { cb(null, result.content); })\n\t        .catch(cb);\n\t    } catch (err) {\n\t      cb(err);\n\t    }\n\t  });\n\t};\n\n\t/**\n\t * Vash support\n\t */\n\texports.vash = fromStringRenderer('vash');\n\n\t/**\n\t * Vash string support\n\t */\n\texports.vash.render = function(str, options, cb) {\n\t  return promisify(cb, function(cb) {\n\t    var engine = requires.vash || (requires.vash = require('vash'));\n\n\t    try {\n\t      // helper system : https://github.com/kirbysayshi/vash#helper-system\n\t      if (options.helpers) {\n\t        for (var key in options.helpers) {\n\t          if (!options.helpers.hasOwnProperty(key) || typeof options.helpers[key] !== 'function') {\n\t            continue;\n\t          }\n\t          engine.helpers[key] = options.helpers[key];\n\t        }\n\t      }\n\n\t      var tmpl = cache(options) || cache(options, engine.compile(str, options));\n\t      tmpl(options, function sealLayout(err, ctx) {\n\t        if (err) cb(err);\n\t        ctx.finishLayout();\n\t        cb(null, ctx.toString().replace(/\\n$/, ''));\n\t      });\n\t    } catch (err) {\n\t      cb(err);\n\t    }\n\t  });\n\t};\n\n\t/**\n\t * Slm support.\n\t */\n\n\texports.slm = fromStringRenderer('slm');\n\n\t/**\n\t * Slm string support.\n\t */\n\n\texports.slm.render = function(str, options, cb) {\n\t  return promisify(cb, function(cb) {\n\t    var engine = requires.slm || (requires.slm = require('slm'));\n\n\t    try {\n\t      var tmpl = cache(options) || cache(options, engine.compile(str, options));\n\t      cb(null, tmpl(options));\n\t    } catch (err) {\n\t      cb(err);\n\t    }\n\t  });\n\t};\n\n\t/**\n\t * Marko support.\n\t */\n\n\texports.marko = function(path, options, cb) {\n\t  return promisify(cb, function(cb) {\n\t    var engine = requires.marko || (requires.marko = require('marko'));\n\t    options.writeToDisk = !!options.cache;\n\n\t    try {\n\t      var tmpl = cache(options) || cache(options, engine.load(path, options));\n\t      tmpl.renderToString(options, cb);\n\t    } catch (err) {\n\t      cb(err);\n\t    }\n\t  });\n\t};\n\n\t/**\n\t * Marko string support.\n\t */\n\n\texports.marko.render = function(str, options, cb) {\n\t  return promisify(cb, function(cb) {\n\t    var engine = requires.marko || (requires.marko = require('marko'));\n\t    options.writeToDisk = !!options.cache;\n\t    options.filename = options.filename || 'string.marko';\n\n\t    try {\n\t      var tmpl = cache(options) || cache(options, engine.load(options.filename, str, options));\n\t      tmpl.renderToString(options, cb);\n\t    } catch (err) {\n\t      cb(err);\n\t    }\n\t  });\n\t};\n\n\t/**\n\t * Teacup support.\n\t */\n\texports.teacup = function(path, options, cb) {\n\t  return promisify(cb, function(cb) {\n\t    var engine = requires.teacup || (requires.teacup = require('teacup/lib/express'));\n\t    commonjsRequire.extensions['.teacup'] = commonjsRequire.extensions['.coffee'];\n\t    if (path[0] !== '/') {\n\t      path = join(process.cwd(), path);\n\t    }\n\t    if (!options.cache) {\n\t      var callback = cb;\n\t      cb = function() {\n\t        delete require.cache[path];\n\t        callback.apply(this, arguments);\n\t      };\n\t    }\n\t    engine.renderFile(path, options, cb);\n\t  });\n\t};\n\n\t/**\n\t * Teacup string support.\n\t */\n\texports.teacup.render = function(str, options, cb) {\n\t  var coffee = require('coffee-script');\n\t  var vm = require('vm');\n\t  var sandbox = {\n\t    module: {exports: {}},\n\t    require: commonjsRequire\n\t  };\n\t  return promisify(cb, function(cb) {\n\t    vm.runInNewContext(coffee.compile(str), sandbox);\n\t    var tmpl = sandbox.module.exports;\n\t    cb(null, tmpl(options));\n\t  });\n\t};\n\n\t/**\n\t * Squirrelly support.\n\t */\n\n\texports.squirrelly = fromStringRenderer('squirrelly');\n\n\t/**\n\t * Squirrelly string support.\n\t */\n\n\texports.squirrelly.render = function(str, options, cb) {\n\t  return promisify(cb, function(cb) {\n\t    var engine = requires.squirrelly || (requires.squirrelly = require('squirrelly'));\n\t    try {\n\t      for (var partial in options.partials) {\n\t        engine.definePartial(partial, options.partials[partial]);\n\t      }\n\t      for (var helper in options.helpers) {\n\t        engine.defineHelper(helper, options.helpers[helper]);\n\t      }\n\t      var tmpl = cache(options) || cache(options, engine.Compile(str, options));\n\t      cb(null, tmpl(options, engine));\n\t    } catch (err) {\n\t      cb(err);\n\t    }\n\t  });\n\t};\n\t/**\n\t * Twing support.\n\t */\n\n\texports.twing = fromStringRenderer('twing');\n\n\t/**\n\t * Twing string support.\n\t */ \n\n\texports.twing.render = function(str, options, cb) {\n\t  return promisify(cb, function(cb) {\n\t    var engine = requires.twing || (requires.twing = require('twing'));\n\t    try {\n\t      new engine.TwingEnvironment(new engine.TwingLoaderNull()).createTemplate(str).then((twingTemplate) => {\n\t        twingTemplate.render(options).then((rendTmpl) => {\n\t          var tmpl = cache(options) || cache(options, rendTmpl);\n\t          cb(null, tmpl);\n\t        });\n\t      });\n\t    } catch (err) {\n\t      cb(err);\n\t    }\n\t  });\n\t};\n\t/**\n\t * expose the instance of the engine\n\t */\n\texports.requires = requires;\n} (consolidate$1, consolidate$1.exports));\n\n(function (module) {\n\tmodule.exports = consolidate$1.exports;\n} (consolidate$2));\n\nvar consolidate = /*@__PURE__*/getDefaultExportFromCjs(consolidate$2.exports);\n\nconst hasWarned = {};\nfunction warnOnce(msg) {\n    const isNodeProd = typeof process !== 'undefined' && process.env.NODE_ENV === 'production';\n    if (!isNodeProd && !false && !hasWarned[msg]) {\n        hasWarned[msg] = true;\n        warn(msg);\n    }\n}\nfunction warn(msg) {\n    console.warn(`\\x1b[1m\\x1b[33m[@vue/compiler-sfc]\\x1b[0m\\x1b[33m ${msg}\\x1b[0m\\n`);\n}\n\nfunction preprocess$1({ source, filename, preprocessOptions }, preprocessor) {\n    // Consolidate exposes a callback based API, but the callback is in fact\n    // called synchronously for most templating engines. In our case, we have to\n    // expose a synchronous API so that it is usable in Jest transforms (which\n    // have to be sync because they are applied via Node.js require hooks)\n    let res = '';\n    let err = null;\n    preprocessor.render(source, { filename, ...preprocessOptions }, (_err, _res) => {\n        if (_err)\n            err = _err;\n        res = _res;\n    });\n    if (err)\n        throw err;\n    return res;\n}\nfunction compileTemplate(options) {\n    const { preprocessLang, preprocessCustomRequire } = options;\n    const preprocessor = preprocessLang\n        ? preprocessCustomRequire\n            ? preprocessCustomRequire(preprocessLang)\n            : consolidate[preprocessLang]\n        : false;\n    if (preprocessor) {\n        try {\n            return doCompileTemplate({\n                ...options,\n                source: preprocess$1(options, preprocessor)\n            });\n        }\n        catch (e) {\n            return {\n                code: `export default function render() {}`,\n                source: options.source,\n                tips: [],\n                errors: [e]\n            };\n        }\n    }\n    else if (preprocessLang) {\n        return {\n            code: `export default function render() {}`,\n            source: options.source,\n            tips: [\n                `Component ${options.filename} uses lang ${preprocessLang} for template. Please install the language preprocessor.`\n            ],\n            errors: [\n                `Component ${options.filename} uses lang ${preprocessLang} for template, however it is not installed.`\n            ]\n        };\n    }\n    else {\n        return doCompileTemplate(options);\n    }\n}\nfunction doCompileTemplate({ filename, id, scoped, slotted, inMap, source, ssr = false, ssrCssVars, isProd = false, compiler = ssr ? CompilerSSR__namespace : CompilerDOM__namespace, compilerOptions = {}, transformAssetUrls }) {\n    const errors = [];\n    const warnings = [];\n    let nodeTransforms = [];\n    if (shared.isObject(transformAssetUrls)) {\n        const assetOptions = normalizeOptions(transformAssetUrls);\n        nodeTransforms = [\n            createAssetUrlTransformWithOptions(assetOptions),\n            createSrcsetTransformWithOptions(assetOptions)\n        ];\n    }\n    else if (transformAssetUrls !== false) {\n        nodeTransforms = [transformAssetUrl, transformSrcset];\n    }\n    if (ssr && !ssrCssVars) {\n        warnOnce(`compileTemplate is called with \\`ssr: true\\` but no ` +\n            `corresponding \\`cssVars\\` option.\\`.`);\n    }\n    if (!id) {\n        warnOnce(`compileTemplate now requires the \\`id\\` option.\\`.`);\n        id = '';\n    }\n    const shortId = id.replace(/^data-v-/, '');\n    const longId = `data-v-${shortId}`;\n    let { code, ast, preamble, map } = compiler.compile(source, {\n        mode: 'module',\n        prefixIdentifiers: true,\n        hoistStatic: true,\n        cacheHandlers: true,\n        ssrCssVars: ssr && ssrCssVars && ssrCssVars.length\n            ? genCssVarsFromList(ssrCssVars, shortId, isProd, true)\n            : '',\n        scopeId: scoped ? longId : undefined,\n        slotted,\n        sourceMap: true,\n        ...compilerOptions,\n        nodeTransforms: nodeTransforms.concat(compilerOptions.nodeTransforms || []),\n        filename,\n        onError: e => errors.push(e),\n        onWarn: w => warnings.push(w)\n    });\n    // inMap should be the map produced by ./parse.ts which is a simple line-only\n    // mapping. If it is present, we need to adjust the final map and errors to\n    // reflect the original line numbers.\n    if (inMap) {\n        if (map) {\n            map = mapLines(inMap, map);\n        }\n        if (errors.length) {\n            patchErrors(errors, source, inMap);\n        }\n    }\n    const tips = warnings.map(w => {\n        let msg = w.message;\n        if (w.loc) {\n            msg += `\\n${shared.generateCodeFrame(source, w.loc.start.offset, w.loc.end.offset)}`;\n        }\n        return msg;\n    });\n    return { code, ast, preamble, source, errors, tips, map };\n}\nfunction mapLines(oldMap, newMap) {\n    if (!oldMap)\n        return newMap;\n    if (!newMap)\n        return oldMap;\n    const oldMapConsumer = new require$$0$2.SourceMapConsumer(oldMap);\n    const newMapConsumer = new require$$0$2.SourceMapConsumer(newMap);\n    const mergedMapGenerator = new require$$0$2.SourceMapGenerator();\n    newMapConsumer.eachMapping(m => {\n        if (m.originalLine == null) {\n            return;\n        }\n        const origPosInOldMap = oldMapConsumer.originalPositionFor({\n            line: m.originalLine,\n            column: m.originalColumn\n        });\n        if (origPosInOldMap.source == null) {\n            return;\n        }\n        mergedMapGenerator.addMapping({\n            generated: {\n                line: m.generatedLine,\n                column: m.generatedColumn\n            },\n            original: {\n                line: origPosInOldMap.line,\n                // use current column, since the oldMap produced by @vue/compiler-sfc\n                // does not\n                column: m.originalColumn\n            },\n            source: origPosInOldMap.source,\n            name: origPosInOldMap.name\n        });\n    });\n    // source-map's type definition is incomplete\n    const generator = mergedMapGenerator;\n    oldMapConsumer.sources.forEach((sourceFile) => {\n        generator._sources.add(sourceFile);\n        const sourceContent = oldMapConsumer.sourceContentFor(sourceFile);\n        if (sourceContent != null) {\n            mergedMapGenerator.setSourceContent(sourceFile, sourceContent);\n        }\n    });\n    generator._sourceRoot = oldMap.sourceRoot;\n    generator._file = oldMap.file;\n    return generator.toJSON();\n}\nfunction patchErrors(errors, source, inMap) {\n    const originalSource = inMap.sourcesContent[0];\n    const offset = originalSource.indexOf(source);\n    const lineOffset = originalSource.slice(0, offset).split(/\\r?\\n/).length - 1;\n    errors.forEach(err => {\n        if (err.loc) {\n            err.loc.start.line += lineOffset;\n            err.loc.start.offset += offset;\n            if (err.loc.end !== err.loc.start) {\n                err.loc.end.line += lineOffset;\n                err.loc.end.offset += offset;\n            }\n        }\n    });\n}\n\nconst defaultExportRE = /((?:^|\\n|;)\\s*)export(\\s*)default/;\nconst namedDefaultExportRE = /((?:^|\\n|;)\\s*)export(.+)(?:as)?(\\s*)default/s;\nconst exportDefaultClassRE = /((?:^|\\n|;)\\s*)export\\s+default\\s+class\\s+([\\w$]+)/;\n/**\n * Utility for rewriting `export default` in a script block into a variable\n * declaration so that we can inject things into it\n */\nfunction rewriteDefault(input, as, parserPlugins) {\n    if (!hasDefaultExport(input)) {\n        return input + `\\nconst ${as} = {}`;\n    }\n    let replaced;\n    const classMatch = input.match(exportDefaultClassRE);\n    if (classMatch) {\n        replaced =\n            input.replace(exportDefaultClassRE, '$1class $2') +\n                `\\nconst ${as} = ${classMatch[2]}`;\n    }\n    else {\n        replaced = input.replace(defaultExportRE, `$1const ${as} =`);\n    }\n    if (!hasDefaultExport(replaced)) {\n        return replaced;\n    }\n    // if the script somehow still contains `default export`, it probably has\n    // multi-line comments or template strings. fallback to a full parse.\n    const s = new MagicString(input);\n    const ast = parser$2.parse(input, {\n        sourceType: 'module',\n        plugins: parserPlugins\n    }).program.body;\n    ast.forEach(node => {\n        if (node.type === 'ExportDefaultDeclaration') {\n            if (node.declaration.type === 'ClassDeclaration') {\n                s.overwrite(node.start, node.declaration.id.start, `class `);\n                s.append(`\\nconst ${as} = ${node.declaration.id.name}`);\n            }\n            else {\n                s.overwrite(node.start, node.declaration.start, `const ${as} = `);\n            }\n        }\n        if (node.type === 'ExportNamedDeclaration') {\n            for (const specifier of node.specifiers) {\n                if (specifier.type === 'ExportSpecifier' &&\n                    specifier.exported.type === 'Identifier' &&\n                    specifier.exported.name === 'default') {\n                    if (node.source) {\n                        if (specifier.local.name === 'default') {\n                            const end = specifierEnd(input, specifier.local.end, node.end);\n                            s.prepend(`import { default as __VUE_DEFAULT__ } from '${node.source.value}'\\n`);\n                            s.overwrite(specifier.start, end, ``);\n                            s.append(`\\nconst ${as} = __VUE_DEFAULT__`);\n                            continue;\n                        }\n                        else {\n                            const end = specifierEnd(input, specifier.exported.end, node.end);\n                            s.prepend(`import { ${input.slice(specifier.local.start, specifier.local.end)} } from '${node.source.value}'\\n`);\n                            s.overwrite(specifier.start, end, ``);\n                            s.append(`\\nconst ${as} = ${specifier.local.name}`);\n                            continue;\n                        }\n                    }\n                    const end = specifierEnd(input, specifier.end, node.end);\n                    s.overwrite(specifier.start, end, ``);\n                    s.append(`\\nconst ${as} = ${specifier.local.name}`);\n                }\n            }\n        }\n    });\n    return s.toString();\n}\nfunction hasDefaultExport(input) {\n    return defaultExportRE.test(input) || namedDefaultExportRE.test(input);\n}\nfunction specifierEnd(input, end, nodeEnd) {\n    // export { default   , foo } ...\n    let hasCommas = false;\n    let oldEnd = end;\n    while (end < nodeEnd) {\n        if (/\\s/.test(input.charAt(end))) {\n            end++;\n        }\n        else if (input.charAt(end) === ',') {\n            end++;\n            hasCommas = true;\n            break;\n        }\n        else if (input.charAt(end) === '}') {\n            break;\n        }\n    }\n    return hasCommas ? end : oldEnd;\n}\n\n// Special compiler macros\nconst DEFINE_PROPS = 'defineProps';\nconst DEFINE_EMITS = 'defineEmits';\nconst DEFINE_EXPOSE = 'defineExpose';\nconst WITH_DEFAULTS = 'withDefaults';\n// constants\nconst DEFAULT_VAR = `__default__`;\nconst isBuiltInDir = shared.makeMap(`once,memo,if,for,else,else-if,slot,text,html,on,bind,model,show,cloak,is`);\n/**\n * Compile `<script setup>`\n * It requires the whole SFC descriptor because we need to handle and merge\n * normal `<script>` + `<script setup>` if both are present.\n */\nfunction compileScript(sfc, options) {\n    var _a;\n    let { script, scriptSetup, source, filename } = sfc;\n    // feature flags\n    // TODO remove support for deprecated options when out of experimental\n    const enableReactivityTransform = !!options.reactivityTransform ||\n        !!options.refSugar ||\n        !!options.refTransform;\n    const enablePropsTransform = !!options.reactivityTransform || !!options.propsDestructureTransform;\n    const isProd = !!options.isProd;\n    const genSourceMap = options.sourceMap !== false;\n    let refBindings;\n    if (!options.id) {\n        warnOnce(`compileScript now requires passing the \\`id\\` option.\\n` +\n            `Upgrade your vite or vue-loader version for compatibility with ` +\n            `the latest experimental proposals.`);\n    }\n    const scopeId = options.id ? options.id.replace(/^data-v-/, '') : '';\n    const cssVars = sfc.cssVars;\n    const scriptLang = script && script.lang;\n    const scriptSetupLang = scriptSetup && scriptSetup.lang;\n    const isTS = scriptLang === 'ts' ||\n        scriptLang === 'tsx' ||\n        scriptSetupLang === 'ts' ||\n        scriptSetupLang === 'tsx';\n    // resolve parser plugins\n    const plugins = [];\n    if (!isTS || scriptLang === 'tsx' || scriptSetupLang === 'tsx') {\n        plugins.push('jsx');\n    }\n    else {\n        // If don't match the case of adding jsx, should remove the jsx from the babelParserPlugins\n        if (options.babelParserPlugins)\n            options.babelParserPlugins = options.babelParserPlugins.filter(n => n !== 'jsx');\n    }\n    if (options.babelParserPlugins)\n        plugins.push(...options.babelParserPlugins);\n    if (isTS) {\n        plugins.push('typescript');\n        if (!plugins.includes('decorators')) {\n            plugins.push('decorators-legacy');\n        }\n    }\n    if (!scriptSetup) {\n        if (!script) {\n            throw new Error(`[@vue/compiler-sfc] SFC contains no <script> tags.`);\n        }\n        if (scriptLang && !isTS && scriptLang !== 'jsx') {\n            // do not process non js/ts script blocks\n            return script;\n        }\n        try {\n            let content = script.content;\n            let map = script.map;\n            const scriptAst = parser$2.parse(content, {\n                plugins,\n                sourceType: 'module'\n            }).program;\n            const bindings = analyzeScriptBindings(scriptAst.body);\n            if (enableReactivityTransform && reactivityTransform.shouldTransform(content)) {\n                const s = new MagicString(source);\n                const startOffset = script.loc.start.offset;\n                const endOffset = script.loc.end.offset;\n                const { importedHelpers } = reactivityTransform.transformAST(scriptAst, s, startOffset);\n                if (importedHelpers.length) {\n                    s.prepend(`import { ${importedHelpers\n                        .map(h => `${h} as _${h}`)\n                        .join(', ')} } from 'vue'\\n`);\n                }\n                s.remove(0, startOffset);\n                s.remove(endOffset, source.length);\n                content = s.toString();\n                if (genSourceMap) {\n                    map = s.generateMap({\n                        source: filename,\n                        hires: true,\n                        includeContent: true\n                    });\n                }\n            }\n            if (cssVars.length) {\n                content = rewriteDefault(content, DEFAULT_VAR, plugins);\n                content += genNormalScriptCssVarsCode(cssVars, bindings, scopeId, isProd);\n                content += `\\nexport default ${DEFAULT_VAR}`;\n            }\n            return {\n                ...script,\n                content,\n                map,\n                bindings,\n                scriptAst: scriptAst.body\n            };\n        }\n        catch (e) {\n            // silently fallback if parse fails since user may be using custom\n            // babel syntax\n            return script;\n        }\n    }\n    if (script && scriptLang !== scriptSetupLang) {\n        throw new Error(`[@vue/compiler-sfc] <script> and <script setup> must have the same ` +\n            `language type.`);\n    }\n    if (scriptSetupLang && !isTS && scriptSetupLang !== 'jsx') {\n        // do not process non js/ts script blocks\n        return scriptSetup;\n    }\n    // metadata that needs to be returned\n    const bindingMetadata = {};\n    const helperImports = new Set();\n    const userImports = Object.create(null);\n    const scriptBindings = Object.create(null);\n    const setupBindings = Object.create(null);\n    let defaultExport;\n    let hasDefinePropsCall = false;\n    let hasDefineEmitCall = false;\n    let hasDefineExposeCall = false;\n    let hasDefaultExportName = false;\n    let hasDefaultExportRender = false;\n    let propsRuntimeDecl;\n    let propsRuntimeDefaults;\n    let propsDestructureDecl;\n    let propsDestructureRestId;\n    let propsTypeDecl;\n    let propsTypeDeclRaw;\n    let propsIdentifier;\n    let emitsRuntimeDecl;\n    let emitsTypeDecl;\n    let emitsTypeDeclRaw;\n    let emitIdentifier;\n    let hasAwait = false;\n    let hasInlinedSsrRenderFn = false;\n    // props/emits declared via types\n    const typeDeclaredProps = {};\n    const typeDeclaredEmits = new Set();\n    // record declared types for runtime props type generation\n    const declaredTypes = {};\n    // props destructure data\n    const propsDestructuredBindings = Object.create(null);\n    // magic-string state\n    const s = new MagicString(source);\n    const startOffset = scriptSetup.loc.start.offset;\n    const endOffset = scriptSetup.loc.end.offset;\n    const scriptStartOffset = script && script.loc.start.offset;\n    const scriptEndOffset = script && script.loc.end.offset;\n    function helper(key) {\n        helperImports.add(key);\n        return `_${key}`;\n    }\n    function parse(input, options, offset) {\n        try {\n            return parser$2.parse(input, options).program;\n        }\n        catch (e) {\n            e.message = `[@vue/compiler-sfc] ${e.message}\\n\\n${sfc.filename}\\n${shared.generateCodeFrame(source, e.pos + offset, e.pos + offset + 1)}`;\n            throw e;\n        }\n    }\n    function error(msg, node, end = node.end + startOffset) {\n        throw new Error(`[@vue/compiler-sfc] ${msg}\\n\\n${sfc.filename}\\n${shared.generateCodeFrame(source, node.start + startOffset, end)}`);\n    }\n    function hoistNode(node) {\n        const start = node.start + startOffset;\n        let end = node.end + startOffset;\n        // locate comment\n        if (node.trailingComments && node.trailingComments.length > 0) {\n            const lastCommentNode = node.trailingComments[node.trailingComments.length - 1];\n            end = lastCommentNode.end + startOffset;\n        }\n        // locate the end of whitespace between this statement and the next\n        while (end <= source.length) {\n            if (!/\\s/.test(source.charAt(end))) {\n                break;\n            }\n            end++;\n        }\n        s.move(start, end, 0);\n    }\n    function registerUserImport(source, local, imported, isType, isFromSetup, needTemplateUsageCheck) {\n        // template usage check is only needed in non-inline mode, so we can skip\n        // the work if inlineTemplate is true.\n        let isUsedInTemplate = needTemplateUsageCheck;\n        if (needTemplateUsageCheck &&\n            isTS &&\n            sfc.template &&\n            !sfc.template.src &&\n            !sfc.template.lang) {\n            isUsedInTemplate = isImportUsed(local, sfc);\n        }\n        userImports[local] = {\n            isType,\n            imported: imported || 'default',\n            local,\n            source,\n            isFromSetup,\n            isUsedInTemplate\n        };\n    }\n    function processDefineProps(node, declId, declKind) {\n        if (!isCallOf(node, DEFINE_PROPS)) {\n            return false;\n        }\n        if (hasDefinePropsCall) {\n            error(`duplicate ${DEFINE_PROPS}() call`, node);\n        }\n        hasDefinePropsCall = true;\n        propsRuntimeDecl = node.arguments[0];\n        // call has type parameters - infer runtime types from it\n        if (node.typeParameters) {\n            if (propsRuntimeDecl) {\n                error(`${DEFINE_PROPS}() cannot accept both type and non-type arguments ` +\n                    `at the same time. Use one or the other.`, node);\n            }\n            propsTypeDeclRaw = node.typeParameters.params[0];\n            propsTypeDecl = resolveQualifiedType(propsTypeDeclRaw, node => node.type === 'TSTypeLiteral');\n            if (!propsTypeDecl) {\n                error(`type argument passed to ${DEFINE_PROPS}() must be a literal type, ` +\n                    `or a reference to an interface or literal type.`, propsTypeDeclRaw);\n            }\n        }\n        if (declId) {\n            const isConst = declKind === 'const';\n            if (enablePropsTransform && declId.type === 'ObjectPattern') {\n                propsDestructureDecl = declId;\n                // props destructure - handle compilation sugar\n                for (const prop of declId.properties) {\n                    if (prop.type === 'ObjectProperty') {\n                        const propKey = resolveObjectKey(prop.key, prop.computed);\n                        if (!propKey) {\n                            error(`${DEFINE_PROPS}() destructure cannot use computed key.`, prop.key);\n                        }\n                        if (prop.value.type === 'AssignmentPattern') {\n                            // default value { foo = 123 }\n                            const { left, right } = prop.value;\n                            if (left.type !== 'Identifier') {\n                                error(`${DEFINE_PROPS}() destructure does not support nested patterns.`, left);\n                            }\n                            // store default value\n                            propsDestructuredBindings[propKey] = {\n                                local: left.name,\n                                default: right,\n                                isConst\n                            };\n                        }\n                        else if (prop.value.type === 'Identifier') {\n                            // simple destructure\n                            propsDestructuredBindings[propKey] = {\n                                local: prop.value.name,\n                                isConst\n                            };\n                        }\n                        else {\n                            error(`${DEFINE_PROPS}() destructure does not support nested patterns.`, prop.value);\n                        }\n                    }\n                    else {\n                        // rest spread\n                        propsDestructureRestId = prop.argument.name;\n                    }\n                }\n            }\n            else {\n                propsIdentifier = scriptSetup.content.slice(declId.start, declId.end);\n            }\n        }\n        return true;\n    }\n    function processWithDefaults(node, declId, declKind) {\n        if (!isCallOf(node, WITH_DEFAULTS)) {\n            return false;\n        }\n        if (processDefineProps(node.arguments[0], declId, declKind)) {\n            if (propsRuntimeDecl) {\n                error(`${WITH_DEFAULTS} can only be used with type-based ` +\n                    `${DEFINE_PROPS} declaration.`, node);\n            }\n            if (propsDestructureDecl) {\n                error(`${WITH_DEFAULTS}() is unnecessary when using destructure with ${DEFINE_PROPS}().\\n` +\n                    `Prefer using destructure default values, e.g. const { foo = 1 } = defineProps(...).`, node.callee);\n            }\n            propsRuntimeDefaults = node.arguments[1];\n            if (!propsRuntimeDefaults ||\n                propsRuntimeDefaults.type !== 'ObjectExpression') {\n                error(`The 2nd argument of ${WITH_DEFAULTS} must be an object literal.`, propsRuntimeDefaults || node);\n            }\n        }\n        else {\n            error(`${WITH_DEFAULTS}' first argument must be a ${DEFINE_PROPS} call.`, node.arguments[0] || node);\n        }\n        return true;\n    }\n    function processDefineEmits(node, declId) {\n        if (!isCallOf(node, DEFINE_EMITS)) {\n            return false;\n        }\n        if (hasDefineEmitCall) {\n            error(`duplicate ${DEFINE_EMITS}() call`, node);\n        }\n        hasDefineEmitCall = true;\n        emitsRuntimeDecl = node.arguments[0];\n        if (node.typeParameters) {\n            if (emitsRuntimeDecl) {\n                error(`${DEFINE_EMITS}() cannot accept both type and non-type arguments ` +\n                    `at the same time. Use one or the other.`, node);\n            }\n            emitsTypeDeclRaw = node.typeParameters.params[0];\n            emitsTypeDecl = resolveQualifiedType(emitsTypeDeclRaw, node => node.type === 'TSFunctionType' || node.type === 'TSTypeLiteral');\n            if (!emitsTypeDecl) {\n                error(`type argument passed to ${DEFINE_EMITS}() must be a function type, ` +\n                    `a literal type with call signatures, or a reference to the above types.`, emitsTypeDeclRaw);\n            }\n        }\n        if (declId) {\n            emitIdentifier =\n                declId.type === 'Identifier'\n                    ? declId.name\n                    : scriptSetup.content.slice(declId.start, declId.end);\n        }\n        return true;\n    }\n    function getAstBody() {\n        return scriptAst\n            ? [...scriptSetupAst.body, ...scriptAst.body]\n            : scriptSetupAst.body;\n    }\n    function resolveExtendsType(node, qualifier, cache = []) {\n        if (node.type === 'TSInterfaceDeclaration' && node.extends) {\n            node.extends.forEach(extend => {\n                if (extend.type === 'TSExpressionWithTypeArguments' &&\n                    extend.expression.type === 'Identifier') {\n                    const body = getAstBody();\n                    for (const node of body) {\n                        const qualified = isQualifiedType(node, qualifier, extend.expression.name);\n                        if (qualified) {\n                            cache.push(qualified);\n                            resolveExtendsType(node, qualifier, cache);\n                            return cache;\n                        }\n                    }\n                }\n            });\n        }\n        return cache;\n    }\n    function isQualifiedType(node, qualifier, refName) {\n        if (node.type === 'TSInterfaceDeclaration' && node.id.name === refName) {\n            return node.body;\n        }\n        else if (node.type === 'TSTypeAliasDeclaration' &&\n            node.id.name === refName &&\n            qualifier(node.typeAnnotation)) {\n            return node.typeAnnotation;\n        }\n        else if (node.type === 'ExportNamedDeclaration' && node.declaration) {\n            return isQualifiedType(node.declaration, qualifier, refName);\n        }\n    }\n    // filter all extends types to keep the override declaration\n    function filterExtendsType(extendsTypes, bodies) {\n        extendsTypes.forEach(extend => {\n            const body = extend.body;\n            body.forEach(newBody => {\n                if (newBody.type === 'TSPropertySignature' &&\n                    newBody.key.type === 'Identifier') {\n                    const name = newBody.key.name;\n                    const hasOverride = bodies.some(seenBody => seenBody.type === 'TSPropertySignature' &&\n                        seenBody.key.type === 'Identifier' &&\n                        seenBody.key.name === name);\n                    if (!hasOverride)\n                        bodies.push(newBody);\n                }\n            });\n        });\n    }\n    function resolveQualifiedType(node, qualifier) {\n        if (qualifier(node)) {\n            return node;\n        }\n        if (node.type === 'TSTypeReference' &&\n            node.typeName.type === 'Identifier') {\n            const refName = node.typeName.name;\n            const body = getAstBody();\n            for (let i = 0; i < body.length; i++) {\n                const node = body[i];\n                let qualified = isQualifiedType(node, qualifier, refName);\n                if (qualified) {\n                    const extendsTypes = resolveExtendsType(node, qualifier);\n                    if (extendsTypes.length) {\n                        const bodies = [...qualified.body];\n                        filterExtendsType(extendsTypes, bodies);\n                        qualified.body = bodies;\n                    }\n                    qualified.__fromNormalScript =\n                        scriptAst && i >= scriptSetupAst.body.length;\n                    return qualified;\n                }\n            }\n        }\n    }\n    function processDefineExpose(node) {\n        if (isCallOf(node, DEFINE_EXPOSE)) {\n            if (hasDefineExposeCall) {\n                error(`duplicate ${DEFINE_EXPOSE}() call`, node);\n            }\n            hasDefineExposeCall = true;\n            return true;\n        }\n        return false;\n    }\n    function checkInvalidScopeReference(node, method) {\n        if (!node)\n            return;\n        CompilerDOM.walkIdentifiers(node, id => {\n            if (setupBindings[id.name]) {\n                error(`\\`${method}()\\` in <script setup> cannot reference locally ` +\n                    `declared variables because it will be hoisted outside of the ` +\n                    `setup() function. If your component options require initialization ` +\n                    `in the module scope, use a separate normal <script> to export ` +\n                    `the options instead.`, id);\n            }\n        });\n    }\n    /**\n     * await foo()\n     * -->\n     * ;(\n     *   ([__temp,__restore] = withAsyncContext(() => foo())),\n     *   await __temp,\n     *   __restore()\n     * )\n     *\n     * const a = await foo()\n     * -->\n     * const a = (\n     *   ([__temp, __restore] = withAsyncContext(() => foo())),\n     *   __temp = await __temp,\n     *   __restore(),\n     *   __temp\n     * )\n     */\n    function processAwait(node, needSemi, isStatement) {\n        const argumentStart = node.argument.extra && node.argument.extra.parenthesized\n            ? node.argument.extra.parenStart\n            : node.argument.start;\n        const argumentStr = source.slice(argumentStart + startOffset, node.argument.end + startOffset);\n        const containsNestedAwait = /\\bawait\\b/.test(argumentStr);\n        s.overwrite(node.start + startOffset, argumentStart + startOffset, `${needSemi ? `;` : ``}(\\n  ([__temp,__restore] = ${helper(`withAsyncContext`)}(${containsNestedAwait ? `async ` : ``}() => `);\n        s.appendLeft(node.end + startOffset, `)),\\n  ${isStatement ? `` : `__temp = `}await __temp,\\n  __restore()${isStatement ? `` : `,\\n  __temp`}\\n)`);\n    }\n    /**\n     * check defaults. If the default object is an object literal with only\n     * static properties, we can directly generate more optimized default\n     * declarations. Otherwise we will have to fallback to runtime merging.\n     */\n    function hasStaticWithDefaults() {\n        return (propsRuntimeDefaults &&\n            propsRuntimeDefaults.type === 'ObjectExpression' &&\n            propsRuntimeDefaults.properties.every(node => (node.type === 'ObjectProperty' &&\n                (!node.computed || node.key.type.endsWith('Literal'))) ||\n                node.type === 'ObjectMethod'));\n    }\n    function genRuntimeProps(props) {\n        const keys = Object.keys(props);\n        if (!keys.length) {\n            return ``;\n        }\n        const hasStaticDefaults = hasStaticWithDefaults();\n        const scriptSetupSource = scriptSetup.content;\n        let propsDecls = `{\n    ${keys\n            .map(key => {\n            let defaultString;\n            const destructured = genDestructuredDefaultValue(key);\n            if (destructured) {\n                defaultString = `default: ${destructured}`;\n            }\n            else if (hasStaticDefaults) {\n                const prop = propsRuntimeDefaults.properties.find(node => {\n                    if (node.type === 'SpreadElement')\n                        return false;\n                    return resolveObjectKey(node.key, node.computed) === key;\n                });\n                if (prop) {\n                    if (prop.type === 'ObjectProperty') {\n                        // prop has corresponding static default value\n                        defaultString = `default: ${scriptSetupSource.slice(prop.value.start, prop.value.end)}`;\n                    }\n                    else {\n                        defaultString = `${prop.async ? 'async ' : ''}${prop.kind !== 'method' ? `${prop.kind} ` : ''}default() ${scriptSetupSource.slice(prop.body.start, prop.body.end)}`;\n                    }\n                }\n            }\n            const { type, required } = props[key];\n            if (!isProd) {\n                return `${key}: { type: ${toRuntimeTypeString(type)}, required: ${required}${defaultString ? `, ${defaultString}` : ``} }`;\n            }\n            else if (type.some(el => el === 'Boolean' ||\n                ((!hasStaticDefaults || defaultString) && el === 'Function'))) {\n                // #4783 for boolean, should keep the type\n                // #7111 for function, if default value exists or it's not static, should keep it\n                // in production\n                return `${key}: { type: ${toRuntimeTypeString(type)}${defaultString ? `, ${defaultString}` : ``} }`;\n            }\n            else {\n                // production: checks are useless\n                return `${key}: ${defaultString ? `{ ${defaultString} }` : 'null'}`;\n            }\n        })\n            .join(',\\n    ')}\\n  }`;\n        if (propsRuntimeDefaults && !hasStaticDefaults) {\n            propsDecls = `${helper('mergeDefaults')}(${propsDecls}, ${source.slice(propsRuntimeDefaults.start + startOffset, propsRuntimeDefaults.end + startOffset)})`;\n        }\n        return `\\n  props: ${propsDecls},`;\n    }\n    function genDestructuredDefaultValue(key) {\n        const destructured = propsDestructuredBindings[key];\n        if (destructured && destructured.default) {\n            const value = scriptSetup.content.slice(destructured.default.start, destructured.default.end);\n            const isLiteral = destructured.default.type.endsWith('Literal');\n            return isLiteral ? value : `() => (${value})`;\n        }\n    }\n    function genSetupPropsType(node) {\n        const scriptSource = node.__fromNormalScript\n            ? script.content\n            : scriptSetup.content;\n        if (hasStaticWithDefaults()) {\n            // if withDefaults() is used, we need to remove the optional flags\n            // on props that have default values\n            let res = `{ `;\n            const members = node.type === 'TSTypeLiteral' ? node.members : node.body;\n            for (const m of members) {\n                if ((m.type === 'TSPropertySignature' ||\n                    m.type === 'TSMethodSignature') &&\n                    m.typeAnnotation &&\n                    m.key.type === 'Identifier') {\n                    if (propsRuntimeDefaults.properties.some(p => {\n                        if (p.type === 'SpreadElement')\n                            return false;\n                        return (resolveObjectKey(p.key, p.computed) ===\n                            m.key.name);\n                    })) {\n                        res +=\n                            m.key.name +\n                                (m.type === 'TSMethodSignature' ? '()' : '') +\n                                scriptSource.slice(m.typeAnnotation.start, m.typeAnnotation.end) +\n                                ', ';\n                    }\n                    else {\n                        res += scriptSource.slice(m.start, m.typeAnnotation.end) + `, `;\n                    }\n                }\n            }\n            return (res.length ? res.slice(0, -2) : res) + ` }`;\n        }\n        else {\n            return scriptSource.slice(node.start, node.end);\n        }\n    }\n    // 0. parse both <script> and <script setup> blocks\n    const scriptAst = script &&\n        parse(script.content, {\n            plugins,\n            sourceType: 'module'\n        }, scriptStartOffset);\n    const scriptSetupAst = parse(scriptSetup.content, {\n        plugins: [\n            ...plugins,\n            // allow top level await but only inside <script setup>\n            'topLevelAwait'\n        ],\n        sourceType: 'module'\n    }, startOffset);\n    // 1.1 walk import delcarations of <script>\n    if (scriptAst) {\n        for (const node of scriptAst.body) {\n            if (node.type === 'ImportDeclaration') {\n                // record imports for dedupe\n                for (const specifier of node.specifiers) {\n                    const imported = specifier.type === 'ImportSpecifier' &&\n                        specifier.imported.type === 'Identifier' &&\n                        specifier.imported.name;\n                    registerUserImport(node.source.value, specifier.local.name, imported, node.importKind === 'type' ||\n                        (specifier.type === 'ImportSpecifier' &&\n                            specifier.importKind === 'type'), false, !options.inlineTemplate);\n                }\n            }\n        }\n    }\n    // 1.2 walk import declarations of <script setup>\n    for (const node of scriptSetupAst.body) {\n        if (node.type === 'ImportDeclaration') {\n            // import declarations are moved to top\n            hoistNode(node);\n            // dedupe imports\n            let removed = 0;\n            const removeSpecifier = (i) => {\n                const removeLeft = i > removed;\n                removed++;\n                const current = node.specifiers[i];\n                const next = node.specifiers[i + 1];\n                s.remove(removeLeft\n                    ? node.specifiers[i - 1].end + startOffset\n                    : current.start + startOffset, next && !removeLeft\n                    ? next.start + startOffset\n                    : current.end + startOffset);\n            };\n            for (let i = 0; i < node.specifiers.length; i++) {\n                const specifier = node.specifiers[i];\n                const local = specifier.local.name;\n                let imported = specifier.type === 'ImportSpecifier' &&\n                    specifier.imported.type === 'Identifier' &&\n                    specifier.imported.name;\n                if (specifier.type === 'ImportNamespaceSpecifier') {\n                    imported = '*';\n                }\n                const source = node.source.value;\n                const existing = userImports[local];\n                if (source === 'vue' &&\n                    (imported === DEFINE_PROPS ||\n                        imported === DEFINE_EMITS ||\n                        imported === DEFINE_EXPOSE)) {\n                    warnOnce(`\\`${imported}\\` is a compiler macro and no longer needs to be imported.`);\n                    removeSpecifier(i);\n                }\n                else if (existing) {\n                    if (existing.source === source && existing.imported === imported) {\n                        // already imported in <script setup>, dedupe\n                        removeSpecifier(i);\n                    }\n                    else {\n                        error(`different imports aliased to same local name.`, specifier);\n                    }\n                }\n                else {\n                    registerUserImport(source, local, imported, node.importKind === 'type' ||\n                        (specifier.type === 'ImportSpecifier' &&\n                            specifier.importKind === 'type'), true, !options.inlineTemplate);\n                }\n            }\n            if (node.specifiers.length && removed === node.specifiers.length) {\n                s.remove(node.start + startOffset, node.end + startOffset);\n            }\n        }\n    }\n    // 1.3 resolve possible user import alias of `ref` and `reactive`\n    const vueImportAliases = {};\n    for (const key in userImports) {\n        const { source, imported, local } = userImports[key];\n        if (source === 'vue')\n            vueImportAliases[imported] = local;\n    }\n    // 2.1 process normal <script> body\n    if (script && scriptAst) {\n        for (const node of scriptAst.body) {\n            if (node.type === 'ExportDefaultDeclaration') {\n                // export default\n                defaultExport = node;\n                // check if user has manually specified `name` or 'render` option in\n                // export default\n                // if has name, skip name inference\n                // if has render and no template, generate return object instead of\n                // empty render function (#4980)\n                let optionProperties;\n                if (defaultExport.declaration.type === 'ObjectExpression') {\n                    optionProperties = defaultExport.declaration.properties;\n                }\n                else if (defaultExport.declaration.type === 'CallExpression' &&\n                    defaultExport.declaration.arguments[0].type === 'ObjectExpression') {\n                    optionProperties = defaultExport.declaration.arguments[0].properties;\n                }\n                if (optionProperties) {\n                    for (const s of optionProperties) {\n                        if (s.type === 'ObjectProperty' &&\n                            s.key.type === 'Identifier' &&\n                            s.key.name === 'name') {\n                            hasDefaultExportName = true;\n                        }\n                        if ((s.type === 'ObjectMethod' || s.type === 'ObjectProperty') &&\n                            s.key.type === 'Identifier' &&\n                            s.key.name === 'render') {\n                            // TODO warn when we provide a better way to do it?\n                            hasDefaultExportRender = true;\n                        }\n                    }\n                }\n                // export default { ... } --> const __default__ = { ... }\n                const start = node.start + scriptStartOffset;\n                const end = node.declaration.start + scriptStartOffset;\n                s.overwrite(start, end, `const ${DEFAULT_VAR} = `);\n            }\n            else if (node.type === 'ExportNamedDeclaration') {\n                const defaultSpecifier = node.specifiers.find(s => s.exported.type === 'Identifier' && s.exported.name === 'default');\n                if (defaultSpecifier) {\n                    defaultExport = node;\n                    // 1. remove specifier\n                    if (node.specifiers.length > 1) {\n                        s.remove(defaultSpecifier.start + scriptStartOffset, defaultSpecifier.end + scriptStartOffset);\n                    }\n                    else {\n                        s.remove(node.start + scriptStartOffset, node.end + scriptStartOffset);\n                    }\n                    if (node.source) {\n                        // export { x as default } from './x'\n                        // rewrite to `import { x as __default__ } from './x'` and\n                        // add to top\n                        s.prepend(`import { ${defaultSpecifier.local.name} as ${DEFAULT_VAR} } from '${node.source.value}'\\n`);\n                    }\n                    else {\n                        // export { x as default }\n                        // rewrite to `const __default__ = x` and move to end\n                        s.appendLeft(scriptEndOffset, `\\nconst ${DEFAULT_VAR} = ${defaultSpecifier.local.name}\\n`);\n                    }\n                }\n                if (node.declaration) {\n                    walkDeclaration(node.declaration, scriptBindings, vueImportAliases);\n                }\n            }\n            else if ((node.type === 'VariableDeclaration' ||\n                node.type === 'FunctionDeclaration' ||\n                node.type === 'ClassDeclaration' ||\n                node.type === 'TSEnumDeclaration') &&\n                !node.declare) {\n                walkDeclaration(node, scriptBindings, vueImportAliases);\n            }\n        }\n        // apply reactivity transform\n        if (enableReactivityTransform && reactivityTransform.shouldTransform(script.content)) {\n            const { rootRefs, importedHelpers } = reactivityTransform.transformAST(scriptAst, s, scriptStartOffset);\n            refBindings = rootRefs;\n            for (const h of importedHelpers) {\n                helperImports.add(h);\n            }\n        }\n        // <script> after <script setup>\n        // we need to move the block up so that `const __default__` is\n        // declared before being used in the actual component definition\n        if (scriptStartOffset > startOffset) {\n            // if content doesn't end with newline, add one\n            if (!/\\n$/.test(script.content.trim())) {\n                s.appendLeft(scriptEndOffset, `\\n`);\n            }\n            s.move(scriptStartOffset, scriptEndOffset, 0);\n        }\n    }\n    // 2.2 process <script setup> body\n    for (const node of scriptSetupAst.body) {\n        // (Dropped) `ref: x` bindings\n        // TODO remove when out of experimental\n        if (node.type === 'LabeledStatement' &&\n            node.label.name === 'ref' &&\n            node.body.type === 'ExpressionStatement') {\n            error(`ref sugar using the label syntax was an experimental proposal and ` +\n                `has been dropped based on community feedback. Please check out ` +\n                `the new proposal at https://github.com/vuejs/rfcs/discussions/369`, node);\n        }\n        if (node.type === 'ExpressionStatement') {\n            // process `defineProps` and `defineEmit(s)` calls\n            if (processDefineProps(node.expression) ||\n                processDefineEmits(node.expression) ||\n                processWithDefaults(node.expression)) {\n                s.remove(node.start + startOffset, node.end + startOffset);\n            }\n            else if (processDefineExpose(node.expression)) {\n                // defineExpose({}) -> expose({})\n                const callee = node.expression.callee;\n                s.overwrite(callee.start + startOffset, callee.end + startOffset, 'expose');\n            }\n        }\n        if (node.type === 'VariableDeclaration' && !node.declare) {\n            const total = node.declarations.length;\n            let left = total;\n            for (let i = 0; i < total; i++) {\n                const decl = node.declarations[i];\n                if (decl.init) {\n                    // defineProps / defineEmits\n                    const isDefineProps = processDefineProps(decl.init, decl.id, node.kind) ||\n                        processWithDefaults(decl.init, decl.id, node.kind);\n                    const isDefineEmits = processDefineEmits(decl.init, decl.id);\n                    if (isDefineProps || isDefineEmits) {\n                        if (left === 1) {\n                            s.remove(node.start + startOffset, node.end + startOffset);\n                        }\n                        else {\n                            let start = decl.start + startOffset;\n                            let end = decl.end + startOffset;\n                            if (i === 0) {\n                                // first one, locate the start of the next\n                                end = node.declarations[i + 1].start + startOffset;\n                            }\n                            else {\n                                // not first one, locate the end of the prev\n                                start = node.declarations[i - 1].end + startOffset;\n                            }\n                            s.remove(start, end);\n                            left--;\n                        }\n                    }\n                }\n            }\n        }\n        // walk declarations to record declared bindings\n        if ((node.type === 'VariableDeclaration' ||\n            node.type === 'FunctionDeclaration' ||\n            node.type === 'ClassDeclaration') &&\n            !node.declare) {\n            walkDeclaration(node, setupBindings, vueImportAliases);\n        }\n        // walk statements & named exports / variable declarations for top level\n        // await\n        if ((node.type === 'VariableDeclaration' && !node.declare) ||\n            node.type.endsWith('Statement')) {\n            const scope = [scriptSetupAst.body];\n            estreeWalker.walk(node, {\n                enter(child, parent) {\n                    if (CompilerDOM.isFunctionType(child)) {\n                        this.skip();\n                    }\n                    if (child.type === 'BlockStatement') {\n                        scope.push(child.body);\n                    }\n                    if (child.type === 'AwaitExpression') {\n                        hasAwait = true;\n                        // if the await expression is an expression statement and\n                        // - is in the root scope\n                        // - or is not the first statement in a nested block scope\n                        // then it needs a semicolon before the generated code.\n                        const currentScope = scope[scope.length - 1];\n                        const needsSemi = currentScope.some((n, i) => {\n                            return ((scope.length === 1 || i > 0) &&\n                                n.type === 'ExpressionStatement' &&\n                                n.start === child.start);\n                        });\n                        processAwait(child, needsSemi, parent.type === 'ExpressionStatement');\n                    }\n                },\n                exit(node) {\n                    if (node.type === 'BlockStatement')\n                        scope.pop();\n                }\n            });\n        }\n        if ((node.type === 'ExportNamedDeclaration' && node.exportKind !== 'type') ||\n            node.type === 'ExportAllDeclaration' ||\n            node.type === 'ExportDefaultDeclaration') {\n            error(`<script setup> cannot contain ES module exports. ` +\n                `If you are using a previous version of <script setup>, please ` +\n                `consult the updated RFC at https://github.com/vuejs/rfcs/pull/227.`, node);\n        }\n        if (isTS) {\n            // runtime enum\n            if (node.type === 'TSEnumDeclaration') {\n                registerBinding(setupBindings, node.id, \"setup-const\" /* BindingTypes.SETUP_CONST */);\n            }\n            // move all Type declarations to outer scope\n            if (node.type.startsWith('TS') ||\n                (node.type === 'ExportNamedDeclaration' &&\n                    node.exportKind === 'type') ||\n                (node.type === 'VariableDeclaration' && node.declare)) {\n                recordType(node, declaredTypes);\n                hoistNode(node);\n            }\n        }\n    }\n    // 3. Apply reactivity transform\n    if ((enableReactivityTransform &&\n        // normal <script> had ref bindings that maybe used in <script setup>\n        (refBindings || reactivityTransform.shouldTransform(scriptSetup.content))) ||\n        propsDestructureDecl) {\n        const { rootRefs, importedHelpers } = reactivityTransform.transformAST(scriptSetupAst, s, startOffset, refBindings, propsDestructuredBindings);\n        refBindings = refBindings ? [...refBindings, ...rootRefs] : rootRefs;\n        for (const h of importedHelpers) {\n            helperImports.add(h);\n        }\n    }\n    // 4. extract runtime props/emits code from setup context type\n    if (propsTypeDecl) {\n        extractRuntimeProps(propsTypeDecl, typeDeclaredProps, declaredTypes);\n    }\n    if (emitsTypeDecl) {\n        extractRuntimeEmits(emitsTypeDecl, typeDeclaredEmits);\n    }\n    // 5. check useOptions args to make sure it doesn't reference setup scope\n    // variables\n    checkInvalidScopeReference(propsRuntimeDecl, DEFINE_PROPS);\n    checkInvalidScopeReference(propsRuntimeDefaults, DEFINE_PROPS);\n    checkInvalidScopeReference(propsDestructureDecl, DEFINE_PROPS);\n    checkInvalidScopeReference(emitsRuntimeDecl, DEFINE_EMITS);\n    // 6. remove non-script content\n    if (script) {\n        if (startOffset < scriptStartOffset) {\n            // <script setup> before <script>\n            s.remove(0, startOffset);\n            s.remove(endOffset, scriptStartOffset);\n            s.remove(scriptEndOffset, source.length);\n        }\n        else {\n            // <script> before <script setup>\n            s.remove(0, scriptStartOffset);\n            s.remove(scriptEndOffset, startOffset);\n            s.remove(endOffset, source.length);\n        }\n    }\n    else {\n        // only <script setup>\n        s.remove(0, startOffset);\n        s.remove(endOffset, source.length);\n    }\n    // 7. analyze binding metadata\n    if (scriptAst) {\n        Object.assign(bindingMetadata, analyzeScriptBindings(scriptAst.body));\n    }\n    if (propsRuntimeDecl) {\n        for (const key of getObjectOrArrayExpressionKeys(propsRuntimeDecl)) {\n            bindingMetadata[key] = \"props\" /* BindingTypes.PROPS */;\n        }\n    }\n    for (const key in typeDeclaredProps) {\n        bindingMetadata[key] = \"props\" /* BindingTypes.PROPS */;\n    }\n    // props aliases\n    if (propsDestructureDecl) {\n        if (propsDestructureRestId) {\n            bindingMetadata[propsDestructureRestId] =\n                \"setup-reactive-const\" /* BindingTypes.SETUP_REACTIVE_CONST */;\n        }\n        for (const key in propsDestructuredBindings) {\n            const { local } = propsDestructuredBindings[key];\n            if (local !== key) {\n                bindingMetadata[local] = \"props-aliased\" /* BindingTypes.PROPS_ALIASED */;\n                (bindingMetadata.__propsAliases ||\n                    (bindingMetadata.__propsAliases = {}))[local] = key;\n            }\n        }\n    }\n    for (const [key, { isType, imported, source }] of Object.entries(userImports)) {\n        if (isType)\n            continue;\n        bindingMetadata[key] =\n            imported === '*' ||\n                (imported === 'default' && source.endsWith('.vue')) ||\n                source === 'vue'\n                ? \"setup-const\" /* BindingTypes.SETUP_CONST */\n                : \"setup-maybe-ref\" /* BindingTypes.SETUP_MAYBE_REF */;\n    }\n    for (const key in scriptBindings) {\n        bindingMetadata[key] = scriptBindings[key];\n    }\n    for (const key in setupBindings) {\n        bindingMetadata[key] = setupBindings[key];\n    }\n    // known ref bindings\n    if (refBindings) {\n        for (const key of refBindings) {\n            bindingMetadata[key] = \"setup-ref\" /* BindingTypes.SETUP_REF */;\n        }\n    }\n    // 8. inject `useCssVars` calls\n    if (cssVars.length &&\n        // no need to do this when targeting SSR\n        !(options.inlineTemplate && ((_a = options.templateOptions) === null || _a === void 0 ? void 0 : _a.ssr))) {\n        helperImports.add(CSS_VARS_HELPER);\n        helperImports.add('unref');\n        s.prependRight(startOffset, `\\n${genCssVarsCode(cssVars, bindingMetadata, scopeId, isProd)}\\n`);\n    }\n    // 9. finalize setup() argument signature\n    let args = `__props`;\n    if (propsTypeDecl) {\n        // mark as any and only cast on assignment\n        // since the user defined complex types may be incompatible with the\n        // inferred type from generated runtime declarations\n        args += `: any`;\n    }\n    // inject user assignment of props\n    // we use a default __props so that template expressions referencing props\n    // can use it directly\n    if (propsIdentifier) {\n        s.prependLeft(startOffset, `\\nconst ${propsIdentifier} = __props${propsTypeDecl ? ` as ${genSetupPropsType(propsTypeDecl)}` : ``};\\n`);\n    }\n    if (propsDestructureRestId) {\n        s.prependLeft(startOffset, `\\nconst ${propsDestructureRestId} = ${helper(`createPropsRestProxy`)}(__props, ${JSON.stringify(Object.keys(propsDestructuredBindings))});\\n`);\n    }\n    // inject temp variables for async context preservation\n    if (hasAwait) {\n        const any = isTS ? `: any` : ``;\n        s.prependLeft(startOffset, `\\nlet __temp${any}, __restore${any}\\n`);\n    }\n    const destructureElements = hasDefineExposeCall || !options.inlineTemplate ? [`expose`] : [];\n    if (emitIdentifier) {\n        destructureElements.push(emitIdentifier === `emit` ? `emit` : `emit: ${emitIdentifier}`);\n    }\n    if (destructureElements.length) {\n        args += `, { ${destructureElements.join(', ')} }`;\n        if (emitsTypeDecl) {\n            const content = emitsTypeDecl.__fromNormalScript\n                ? script.content\n                : scriptSetup.content;\n            args += `: { emit: (${content.slice(emitsTypeDecl.start, emitsTypeDecl.end)}), expose: any, slots: any, attrs: any }`;\n        }\n    }\n    // 10. generate return statement\n    let returned;\n    if (!options.inlineTemplate || (!sfc.template && hasDefaultExportRender)) {\n        // non-inline mode, or has manual render in normal <script>\n        // return bindings from script and script setup\n        const allBindings = {\n            ...scriptBindings,\n            ...setupBindings\n        };\n        for (const key in userImports) {\n            if (!userImports[key].isType && userImports[key].isUsedInTemplate) {\n                allBindings[key] = true;\n            }\n        }\n        returned = `{ `;\n        for (const key in allBindings) {\n            if (allBindings[key] === true &&\n                userImports[key].source !== 'vue' &&\n                !userImports[key].source.endsWith('.vue')) {\n                // generate getter for import bindings\n                // skip vue imports since we know they will never change\n                returned += `get ${key}() { return ${key} }, `;\n            }\n            else if (bindingMetadata[key] === \"setup-let\" /* BindingTypes.SETUP_LET */) {\n                // local let binding, also add setter\n                const setArg = key === 'v' ? `_v` : `v`;\n                returned +=\n                    `get ${key}() { return ${key} }, ` +\n                        `set ${key}(${setArg}) { ${key} = ${setArg} }, `;\n            }\n            else {\n                returned += `${key}, `;\n            }\n        }\n        returned = returned.replace(/, $/, '') + ` }`;\n    }\n    else {\n        // inline mode\n        if (sfc.template && !sfc.template.src) {\n            if (options.templateOptions && options.templateOptions.ssr) {\n                hasInlinedSsrRenderFn = true;\n            }\n            // inline render function mode - we are going to compile the template and\n            // inline it right here\n            const { code, ast, preamble, tips, errors } = compileTemplate({\n                filename,\n                source: sfc.template.content,\n                inMap: sfc.template.map,\n                ...options.templateOptions,\n                id: scopeId,\n                scoped: sfc.styles.some(s => s.scoped),\n                isProd: options.isProd,\n                ssrCssVars: sfc.cssVars,\n                compilerOptions: {\n                    ...(options.templateOptions &&\n                        options.templateOptions.compilerOptions),\n                    inline: true,\n                    isTS,\n                    bindingMetadata\n                }\n            });\n            if (tips.length) {\n                tips.forEach(warnOnce);\n            }\n            const err = errors[0];\n            if (typeof err === 'string') {\n                throw new Error(err);\n            }\n            else if (err) {\n                if (err.loc) {\n                    err.message +=\n                        `\\n\\n` +\n                            sfc.filename +\n                            '\\n' +\n                            shared.generateCodeFrame(source, err.loc.start.offset, err.loc.end.offset) +\n                            `\\n`;\n                }\n                throw err;\n            }\n            if (preamble) {\n                s.prepend(preamble);\n            }\n            // avoid duplicated unref import\n            // as this may get injected by the render function preamble OR the\n            // css vars codegen\n            if (ast && ast.helpers.has(CompilerDOM.UNREF)) {\n                helperImports.delete('unref');\n            }\n            returned = code;\n        }\n        else {\n            returned = `() => {}`;\n        }\n    }\n    if (!options.inlineTemplate && !false) {\n        // in non-inline mode, the `__isScriptSetup: true` flag is used by\n        // componentPublicInstance proxy to allow properties that start with $ or _\n        s.appendRight(endOffset, `\\nconst __returned__ = ${returned}\\n` +\n            `Object.defineProperty(__returned__, '__isScriptSetup', { enumerable: false, value: true })\\n` +\n            `return __returned__` +\n            `\\n}\\n\\n`);\n    }\n    else {\n        s.appendRight(endOffset, `\\nreturn ${returned}\\n}\\n\\n`);\n    }\n    // 11. finalize default export\n    let runtimeOptions = ``;\n    if (!hasDefaultExportName && filename && filename !== DEFAULT_FILENAME) {\n        const match = filename.match(/([^/\\\\]+)\\.\\w+$/);\n        if (match) {\n            runtimeOptions += `\\n  __name: '${match[1]}',`;\n        }\n    }\n    if (hasInlinedSsrRenderFn) {\n        runtimeOptions += `\\n  __ssrInlineRender: true,`;\n    }\n    if (propsRuntimeDecl) {\n        let declCode = scriptSetup.content\n            .slice(propsRuntimeDecl.start, propsRuntimeDecl.end)\n            .trim();\n        if (propsDestructureDecl) {\n            const defaults = [];\n            for (const key in propsDestructuredBindings) {\n                const d = genDestructuredDefaultValue(key);\n                if (d)\n                    defaults.push(`${key}: ${d}`);\n            }\n            if (defaults.length) {\n                declCode = `${helper(`mergeDefaults`)}(${declCode}, {\\n  ${defaults.join(',\\n  ')}\\n})`;\n            }\n        }\n        runtimeOptions += `\\n  props: ${declCode},`;\n    }\n    else if (propsTypeDecl) {\n        runtimeOptions += genRuntimeProps(typeDeclaredProps);\n    }\n    if (emitsRuntimeDecl) {\n        runtimeOptions += `\\n  emits: ${scriptSetup.content\n            .slice(emitsRuntimeDecl.start, emitsRuntimeDecl.end)\n            .trim()},`;\n    }\n    else if (emitsTypeDecl) {\n        runtimeOptions += genRuntimeEmits(typeDeclaredEmits);\n    }\n    // <script setup> components are closed by default. If the user did not\n    // explicitly call `defineExpose`, call expose() with no args.\n    const exposeCall = hasDefineExposeCall || options.inlineTemplate ? `` : `  expose();\\n`;\n    // wrap setup code with function.\n    if (isTS) {\n        // for TS, make sure the exported type is still valid type with\n        // correct props information\n        // we have to use object spread for types to be merged properly\n        // user's TS setting should compile it down to proper targets\n        // export default defineComponent({ ...__default__, ... })\n        const def = defaultExport ? `\\n  ...${DEFAULT_VAR},` : ``;\n        s.prependLeft(startOffset, `\\nexport default /*#__PURE__*/${helper(`defineComponent`)}({${def}${runtimeOptions}\\n  ${hasAwait ? `async ` : ``}setup(${args}) {\\n${exposeCall}`);\n        s.appendRight(endOffset, `})`);\n    }\n    else {\n        if (defaultExport) {\n            // without TS, can't rely on rest spread, so we use Object.assign\n            // export default Object.assign(__default__, { ... })\n            s.prependLeft(startOffset, `\\nexport default /*#__PURE__*/Object.assign(${DEFAULT_VAR}, {${runtimeOptions}\\n  ` +\n                `${hasAwait ? `async ` : ``}setup(${args}) {\\n${exposeCall}`);\n            s.appendRight(endOffset, `})`);\n        }\n        else {\n            s.prependLeft(startOffset, `\\nexport default {${runtimeOptions}\\n  ` +\n                `${hasAwait ? `async ` : ``}setup(${args}) {\\n${exposeCall}`);\n            s.appendRight(endOffset, `}`);\n        }\n    }\n    // 12. finalize Vue helper imports\n    if (helperImports.size > 0) {\n        s.prepend(`import { ${[...helperImports]\n            .map(h => `${h} as _${h}`)\n            .join(', ')} } from 'vue'\\n`);\n    }\n    s.trim();\n    return {\n        ...scriptSetup,\n        bindings: bindingMetadata,\n        imports: userImports,\n        content: s.toString(),\n        map: genSourceMap\n            ? s.generateMap({\n                source: filename,\n                hires: true,\n                includeContent: true\n            })\n            : undefined,\n        scriptAst: scriptAst === null || scriptAst === void 0 ? void 0 : scriptAst.body,\n        scriptSetupAst: scriptSetupAst === null || scriptSetupAst === void 0 ? void 0 : scriptSetupAst.body\n    };\n}\nfunction registerBinding(bindings, node, type) {\n    bindings[node.name] = type;\n}\nfunction walkDeclaration(node, bindings, userImportAliases) {\n    if (node.type === 'VariableDeclaration') {\n        const isConst = node.kind === 'const';\n        // export const foo = ...\n        for (const { id, init } of node.declarations) {\n            const isDefineCall = !!(isConst &&\n                isCallOf(init, c => c === DEFINE_PROPS || c === DEFINE_EMITS || c === WITH_DEFAULTS));\n            if (id.type === 'Identifier') {\n                let bindingType;\n                const userReactiveBinding = userImportAliases['reactive'];\n                if (isCallOf(init, userReactiveBinding)) {\n                    // treat reactive() calls as let since it's meant to be mutable\n                    bindingType = isConst\n                        ? \"setup-reactive-const\" /* BindingTypes.SETUP_REACTIVE_CONST */\n                        : \"setup-let\" /* BindingTypes.SETUP_LET */;\n                }\n                else if (\n                // if a declaration is a const literal, we can mark it so that\n                // the generated render fn code doesn't need to unref() it\n                isDefineCall ||\n                    (isConst && canNeverBeRef(init, userReactiveBinding))) {\n                    bindingType = isCallOf(init, DEFINE_PROPS)\n                        ? \"setup-reactive-const\" /* BindingTypes.SETUP_REACTIVE_CONST */\n                        : \"setup-const\" /* BindingTypes.SETUP_CONST */;\n                }\n                else if (isConst) {\n                    if (isCallOf(init, userImportAliases['ref'])) {\n                        bindingType = \"setup-ref\" /* BindingTypes.SETUP_REF */;\n                    }\n                    else {\n                        bindingType = \"setup-maybe-ref\" /* BindingTypes.SETUP_MAYBE_REF */;\n                    }\n                }\n                else {\n                    bindingType = \"setup-let\" /* BindingTypes.SETUP_LET */;\n                }\n                registerBinding(bindings, id, bindingType);\n            }\n            else {\n                if (isCallOf(init, DEFINE_PROPS)) {\n                    continue;\n                }\n                if (id.type === 'ObjectPattern') {\n                    walkObjectPattern(id, bindings, isConst, isDefineCall);\n                }\n                else if (id.type === 'ArrayPattern') {\n                    walkArrayPattern(id, bindings, isConst, isDefineCall);\n                }\n            }\n        }\n    }\n    else if (node.type === 'TSEnumDeclaration' ||\n        node.type === 'FunctionDeclaration' ||\n        node.type === 'ClassDeclaration') {\n        // export function foo() {} / export class Foo {}\n        // export declarations must be named.\n        bindings[node.id.name] = \"setup-const\" /* BindingTypes.SETUP_CONST */;\n    }\n}\nfunction walkObjectPattern(node, bindings, isConst, isDefineCall = false) {\n    for (const p of node.properties) {\n        if (p.type === 'ObjectProperty') {\n            if (p.key.type === 'Identifier' && p.key === p.value) {\n                // shorthand: const { x } = ...\n                const type = isDefineCall\n                    ? \"setup-const\" /* BindingTypes.SETUP_CONST */\n                    : isConst\n                        ? \"setup-maybe-ref\" /* BindingTypes.SETUP_MAYBE_REF */\n                        : \"setup-let\" /* BindingTypes.SETUP_LET */;\n                registerBinding(bindings, p.key, type);\n            }\n            else {\n                walkPattern(p.value, bindings, isConst, isDefineCall);\n            }\n        }\n        else {\n            // ...rest\n            // argument can only be identifier when destructuring\n            const type = isConst ? \"setup-const\" /* BindingTypes.SETUP_CONST */ : \"setup-let\" /* BindingTypes.SETUP_LET */;\n            registerBinding(bindings, p.argument, type);\n        }\n    }\n}\nfunction walkArrayPattern(node, bindings, isConst, isDefineCall = false) {\n    for (const e of node.elements) {\n        e && walkPattern(e, bindings, isConst, isDefineCall);\n    }\n}\nfunction walkPattern(node, bindings, isConst, isDefineCall = false) {\n    if (node.type === 'Identifier') {\n        const type = isDefineCall\n            ? \"setup-const\" /* BindingTypes.SETUP_CONST */\n            : isConst\n                ? \"setup-maybe-ref\" /* BindingTypes.SETUP_MAYBE_REF */\n                : \"setup-let\" /* BindingTypes.SETUP_LET */;\n        registerBinding(bindings, node, type);\n    }\n    else if (node.type === 'RestElement') {\n        // argument can only be identifier when destructuring\n        const type = isConst ? \"setup-const\" /* BindingTypes.SETUP_CONST */ : \"setup-let\" /* BindingTypes.SETUP_LET */;\n        registerBinding(bindings, node.argument, type);\n    }\n    else if (node.type === 'ObjectPattern') {\n        walkObjectPattern(node, bindings, isConst);\n    }\n    else if (node.type === 'ArrayPattern') {\n        walkArrayPattern(node, bindings, isConst);\n    }\n    else if (node.type === 'AssignmentPattern') {\n        if (node.left.type === 'Identifier') {\n            const type = isDefineCall\n                ? \"setup-const\" /* BindingTypes.SETUP_CONST */\n                : isConst\n                    ? \"setup-maybe-ref\" /* BindingTypes.SETUP_MAYBE_REF */\n                    : \"setup-let\" /* BindingTypes.SETUP_LET */;\n            registerBinding(bindings, node.left, type);\n        }\n        else {\n            walkPattern(node.left, bindings, isConst);\n        }\n    }\n}\nfunction recordType(node, declaredTypes) {\n    if (node.type === 'TSInterfaceDeclaration') {\n        declaredTypes[node.id.name] = [`Object`];\n    }\n    else if (node.type === 'TSTypeAliasDeclaration') {\n        declaredTypes[node.id.name] = inferRuntimeType(node.typeAnnotation, declaredTypes);\n    }\n    else if (node.type === 'ExportNamedDeclaration' && node.declaration) {\n        recordType(node.declaration, declaredTypes);\n    }\n}\nfunction extractRuntimeProps(node, props, declaredTypes, isProd) {\n    const members = node.type === 'TSTypeLiteral' ? node.members : node.body;\n    for (const m of members) {\n        if ((m.type === 'TSPropertySignature' || m.type === 'TSMethodSignature') &&\n            m.key.type === 'Identifier') {\n            let type;\n            if (m.type === 'TSMethodSignature') {\n                type = ['Function'];\n            }\n            else if (m.typeAnnotation) {\n                type = inferRuntimeType(m.typeAnnotation.typeAnnotation, declaredTypes);\n            }\n            props[m.key.name] = {\n                key: m.key.name,\n                required: !m.optional,\n                type: type || [`null`]\n            };\n        }\n    }\n}\nfunction inferRuntimeType(node, declaredTypes) {\n    switch (node.type) {\n        case 'TSStringKeyword':\n            return ['String'];\n        case 'TSNumberKeyword':\n            return ['Number'];\n        case 'TSBooleanKeyword':\n            return ['Boolean'];\n        case 'TSObjectKeyword':\n            return ['Object'];\n        case 'TSTypeLiteral':\n            // TODO (nice to have) generate runtime property validation\n            return ['Object'];\n        case 'TSFunctionType':\n            return ['Function'];\n        case 'TSArrayType':\n        case 'TSTupleType':\n            // TODO (nice to have) generate runtime element type/length checks\n            return ['Array'];\n        case 'TSLiteralType':\n            switch (node.literal.type) {\n                case 'StringLiteral':\n                    return ['String'];\n                case 'BooleanLiteral':\n                    return ['Boolean'];\n                case 'NumericLiteral':\n                case 'BigIntLiteral':\n                    return ['Number'];\n                default:\n                    return [`null`];\n            }\n        case 'TSTypeReference':\n            if (node.typeName.type === 'Identifier') {\n                if (declaredTypes[node.typeName.name]) {\n                    return declaredTypes[node.typeName.name];\n                }\n                switch (node.typeName.name) {\n                    case 'Array':\n                    case 'Function':\n                    case 'Object':\n                    case 'Set':\n                    case 'Map':\n                    case 'WeakSet':\n                    case 'WeakMap':\n                    case 'Date':\n                    case 'Promise':\n                        return [node.typeName.name];\n                    case 'Record':\n                    case 'Partial':\n                    case 'Readonly':\n                    case 'Pick':\n                    case 'Omit':\n                    case 'Exclude':\n                    case 'Extract':\n                    case 'Required':\n                    case 'InstanceType':\n                        return ['Object'];\n                }\n            }\n            return [`null`];\n        case 'TSParenthesizedType':\n            return inferRuntimeType(node.typeAnnotation, declaredTypes);\n        case 'TSUnionType':\n            return [\n                ...new Set([].concat(...node.types.map(t => inferRuntimeType(t, declaredTypes))))\n            ];\n        case 'TSIntersectionType':\n            return ['Object'];\n        case 'TSSymbolKeyword':\n            return ['Symbol'];\n        default:\n            return [`null`]; // no runtime check\n    }\n}\nfunction toRuntimeTypeString(types) {\n    return types.length > 1 ? `[${types.join(', ')}]` : types[0];\n}\nfunction extractRuntimeEmits(node, emits) {\n    if (node.type === 'TSTypeLiteral' || node.type === 'TSInterfaceBody') {\n        const members = node.type === 'TSTypeLiteral' ? node.members : node.body;\n        for (let t of members) {\n            if (t.type === 'TSCallSignatureDeclaration') {\n                extractEventNames(t.parameters[0], emits);\n            }\n        }\n        return;\n    }\n    else {\n        extractEventNames(node.parameters[0], emits);\n    }\n}\nfunction extractEventNames(eventName, emits) {\n    if (eventName.type === 'Identifier' &&\n        eventName.typeAnnotation &&\n        eventName.typeAnnotation.type === 'TSTypeAnnotation') {\n        const typeNode = eventName.typeAnnotation.typeAnnotation;\n        if (typeNode.type === 'TSLiteralType') {\n            if (typeNode.literal.type !== 'UnaryExpression') {\n                emits.add(String(typeNode.literal.value));\n            }\n        }\n        else if (typeNode.type === 'TSUnionType') {\n            for (const t of typeNode.types) {\n                if (t.type === 'TSLiteralType' &&\n                    t.literal.type !== 'UnaryExpression') {\n                    emits.add(String(t.literal.value));\n                }\n            }\n        }\n    }\n}\nfunction genRuntimeEmits(emits) {\n    return emits.size\n        ? `\\n  emits: [${Array.from(emits)\n            .map(p => JSON.stringify(p))\n            .join(', ')}],`\n        : ``;\n}\nfunction isCallOf(node, test) {\n    return !!(node &&\n        test &&\n        node.type === 'CallExpression' &&\n        node.callee.type === 'Identifier' &&\n        (typeof test === 'string'\n            ? node.callee.name === test\n            : test(node.callee.name)));\n}\nfunction canNeverBeRef(node, userReactiveImport) {\n    if (isCallOf(node, userReactiveImport)) {\n        return true;\n    }\n    switch (node.type) {\n        case 'UnaryExpression':\n        case 'BinaryExpression':\n        case 'ArrayExpression':\n        case 'ObjectExpression':\n        case 'FunctionExpression':\n        case 'ArrowFunctionExpression':\n        case 'UpdateExpression':\n        case 'ClassExpression':\n        case 'TaggedTemplateExpression':\n            return true;\n        case 'SequenceExpression':\n            return canNeverBeRef(node.expressions[node.expressions.length - 1], userReactiveImport);\n        default:\n            if (node.type.endsWith('Literal')) {\n                return true;\n            }\n            return false;\n    }\n}\n/**\n * Analyze bindings in normal `<script>`\n * Note that `compileScriptSetup` already analyzes bindings as part of its\n * compilation process so this should only be used on single `<script>` SFCs.\n */\nfunction analyzeScriptBindings(ast) {\n    for (const node of ast) {\n        if (node.type === 'ExportDefaultDeclaration' &&\n            node.declaration.type === 'ObjectExpression') {\n            return analyzeBindingsFromOptions(node.declaration);\n        }\n    }\n    return {};\n}\nfunction analyzeBindingsFromOptions(node) {\n    const bindings = {};\n    // #3270, #3275\n    // mark non-script-setup so we don't resolve components/directives from these\n    Object.defineProperty(bindings, '__isScriptSetup', {\n        enumerable: false,\n        value: false\n    });\n    for (const property of node.properties) {\n        if (property.type === 'ObjectProperty' &&\n            !property.computed &&\n            property.key.type === 'Identifier') {\n            // props\n            if (property.key.name === 'props') {\n                // props: ['foo']\n                // props: { foo: ... }\n                for (const key of getObjectOrArrayExpressionKeys(property.value)) {\n                    bindings[key] = \"props\" /* BindingTypes.PROPS */;\n                }\n            }\n            // inject\n            else if (property.key.name === 'inject') {\n                // inject: ['foo']\n                // inject: { foo: {} }\n                for (const key of getObjectOrArrayExpressionKeys(property.value)) {\n                    bindings[key] = \"options\" /* BindingTypes.OPTIONS */;\n                }\n            }\n            // computed & methods\n            else if (property.value.type === 'ObjectExpression' &&\n                (property.key.name === 'computed' || property.key.name === 'methods')) {\n                // methods: { foo() {} }\n                // computed: { foo() {} }\n                for (const key of getObjectExpressionKeys(property.value)) {\n                    bindings[key] = \"options\" /* BindingTypes.OPTIONS */;\n                }\n            }\n        }\n        // setup & data\n        else if (property.type === 'ObjectMethod' &&\n            property.key.type === 'Identifier' &&\n            (property.key.name === 'setup' || property.key.name === 'data')) {\n            for (const bodyItem of property.body.body) {\n                // setup() {\n                //   return {\n                //     foo: null\n                //   }\n                // }\n                if (bodyItem.type === 'ReturnStatement' &&\n                    bodyItem.argument &&\n                    bodyItem.argument.type === 'ObjectExpression') {\n                    for (const key of getObjectExpressionKeys(bodyItem.argument)) {\n                        bindings[key] =\n                            property.key.name === 'setup'\n                                ? \"setup-maybe-ref\" /* BindingTypes.SETUP_MAYBE_REF */\n                                : \"data\" /* BindingTypes.DATA */;\n                    }\n                }\n            }\n        }\n    }\n    return bindings;\n}\nfunction getObjectExpressionKeys(node) {\n    const keys = [];\n    for (const prop of node.properties) {\n        if (prop.type === 'SpreadElement')\n            continue;\n        const key = resolveObjectKey(prop.key, prop.computed);\n        if (key)\n            keys.push(String(key));\n    }\n    return keys;\n}\nfunction getArrayExpressionKeys(node) {\n    const keys = [];\n    for (const element of node.elements) {\n        if (element && element.type === 'StringLiteral') {\n            keys.push(element.value);\n        }\n    }\n    return keys;\n}\nfunction getObjectOrArrayExpressionKeys(value) {\n    if (value.type === 'ArrayExpression') {\n        return getArrayExpressionKeys(value);\n    }\n    if (value.type === 'ObjectExpression') {\n        return getObjectExpressionKeys(value);\n    }\n    return [];\n}\nconst templateUsageCheckCache = createCache();\nfunction resolveTemplateUsageCheckString(sfc) {\n    const { content, ast } = sfc.template;\n    const cached = templateUsageCheckCache.get(content);\n    if (cached) {\n        return cached;\n    }\n    let code = '';\n    CompilerDOM.transform(CompilerDOM.createRoot([ast]), {\n        nodeTransforms: [\n            node => {\n                if (node.type === 1 /* NodeTypes.ELEMENT */) {\n                    if (!CompilerDOM.parserOptions.isNativeTag(node.tag) &&\n                        !CompilerDOM.parserOptions.isBuiltInComponent(node.tag)) {\n                        code += `,${shared.camelize(node.tag)},${shared.capitalize(shared.camelize(node.tag))}`;\n                    }\n                    for (let i = 0; i < node.props.length; i++) {\n                        const prop = node.props[i];\n                        if (prop.type === 7 /* NodeTypes.DIRECTIVE */) {\n                            if (!isBuiltInDir(prop.name)) {\n                                code += `,v${shared.capitalize(shared.camelize(prop.name))}`;\n                            }\n                            if (prop.exp) {\n                                code += `,${processExp(prop.exp.content, prop.name)}`;\n                            }\n                        }\n                    }\n                }\n                else if (node.type === 5 /* NodeTypes.INTERPOLATION */) {\n                    code += `,${processExp(node.content.content)}`;\n                }\n            }\n        ]\n    });\n    code += ';';\n    templateUsageCheckCache.set(content, code);\n    return code;\n}\nconst forAliasRE = /([\\s\\S]*?)\\s+(?:in|of)\\s+([\\s\\S]*)/;\nfunction processExp(exp, dir) {\n    if (/ as\\s+\\w|<.*>|:/.test(exp)) {\n        if (dir === 'slot') {\n            exp = `(${exp})=>{}`;\n        }\n        else if (dir === 'on') {\n            exp = `()=>{return ${exp}}`;\n        }\n        else if (dir === 'for') {\n            const inMatch = exp.match(forAliasRE);\n            if (inMatch) {\n                const [, LHS, RHS] = inMatch;\n                return processExp(`(${LHS})=>{}`) + processExp(RHS);\n            }\n        }\n        let ret = '';\n        // has potential type cast or generic arguments that uses types\n        const ast = parser$2.parseExpression(exp, { plugins: ['typescript'] });\n        CompilerDOM.walkIdentifiers(ast, node => {\n            ret += `,` + node.name;\n        });\n        return ret;\n    }\n    return stripStrings(exp);\n}\nfunction stripStrings(exp) {\n    return exp\n        .replace(/'[^']*'|\"[^\"]*\"/g, '')\n        .replace(/`[^`]+`/g, stripTemplateString);\n}\nfunction stripTemplateString(str) {\n    const interpMatch = str.match(/\\${[^}]+}/g);\n    if (interpMatch) {\n        return interpMatch.map(m => m.slice(2, -1)).join(',');\n    }\n    return '';\n}\nfunction isImportUsed(local, sfc) {\n    return new RegExp(\n    // #4274 escape $ since it's a special char in regex\n    // (and is the only regex special char that is valid in identifiers)\n    `[^\\\\w$_]${local.replace(/\\$/g, '\\\\$')}[^\\\\w$_]`).test(resolveTemplateUsageCheckString(sfc));\n}\n/**\n * Note: this comparison assumes the prev/next script are already identical,\n * and only checks the special case where <script setup lang=\"ts\"> unused import\n * pruning result changes due to template changes.\n */\nfunction hmrShouldReload(prevImports, next) {\n    if (!next.scriptSetup ||\n        (next.scriptSetup.lang !== 'ts' && next.scriptSetup.lang !== 'tsx')) {\n        return false;\n    }\n    // for each previous import, check if its used status remain the same based on\n    // the next descriptor's template\n    for (const key in prevImports) {\n        // if an import was previous unused, but now is used, we need to force\n        // reload so that the script now includes that import.\n        if (!prevImports[key].isUsedInTemplate && isImportUsed(key, next)) {\n            return true;\n        }\n    }\n    return false;\n}\nfunction resolveObjectKey(node, computed) {\n    switch (node.type) {\n        case 'StringLiteral':\n        case 'NumericLiteral':\n            return node.value;\n        case 'Identifier':\n            if (!computed)\n                return node.name;\n    }\n    return undefined;\n}\n\nconst DEFAULT_FILENAME = 'anonymous.vue';\nconst sourceToSFC = createCache();\nfunction parse$4(source, { sourceMap = true, filename = DEFAULT_FILENAME, sourceRoot = '', pad = false, ignoreEmpty = true, compiler = CompilerDOM__namespace } = {}) {\n    const sourceKey = source + sourceMap + filename + sourceRoot + pad + compiler.parse;\n    const cache = sourceToSFC.get(sourceKey);\n    if (cache) {\n        return cache;\n    }\n    const descriptor = {\n        filename,\n        source,\n        template: null,\n        script: null,\n        scriptSetup: null,\n        styles: [],\n        customBlocks: [],\n        cssVars: [],\n        slotted: false,\n        shouldForceReload: prevImports => hmrShouldReload(prevImports, descriptor)\n    };\n    const errors = [];\n    const ast = compiler.parse(source, {\n        // there are no components at SFC parsing level\n        isNativeTag: () => true,\n        // preserve all whitespaces\n        isPreTag: () => true,\n        getTextMode: ({ tag, props }, parent) => {\n            // all top level elements except <template> are parsed as raw text\n            // containers\n            if ((!parent && tag !== 'template') ||\n                // <template lang=\"xxx\"> should also be treated as raw text\n                (tag === 'template' &&\n                    props.some(p => p.type === 6 /* NodeTypes.ATTRIBUTE */ &&\n                        p.name === 'lang' &&\n                        p.value &&\n                        p.value.content &&\n                        p.value.content !== 'html'))) {\n                return 2 /* TextModes.RAWTEXT */;\n            }\n            else {\n                return 0 /* TextModes.DATA */;\n            }\n        },\n        onError: e => {\n            errors.push(e);\n        }\n    });\n    ast.children.forEach(node => {\n        if (node.type !== 1 /* NodeTypes.ELEMENT */) {\n            return;\n        }\n        // we only want to keep the nodes that are not empty (when the tag is not a template)\n        if (ignoreEmpty &&\n            node.tag !== 'template' &&\n            isEmpty(node) &&\n            !hasSrc(node)) {\n            return;\n        }\n        switch (node.tag) {\n            case 'template':\n                if (!descriptor.template) {\n                    const templateBlock = (descriptor.template = createBlock(node, source, false));\n                    templateBlock.ast = node;\n                    // warn against 2.x <template functional>\n                    if (templateBlock.attrs.functional) {\n                        const err = new SyntaxError(`<template functional> is no longer supported in Vue 3, since ` +\n                            `functional components no longer have significant performance ` +\n                            `difference from stateful ones. Just use a normal <template> ` +\n                            `instead.`);\n                        err.loc = node.props.find(p => p.name === 'functional').loc;\n                        errors.push(err);\n                    }\n                }\n                else {\n                    errors.push(createDuplicateBlockError(node));\n                }\n                break;\n            case 'script':\n                const scriptBlock = createBlock(node, source, pad);\n                const isSetup = !!scriptBlock.attrs.setup;\n                if (isSetup && !descriptor.scriptSetup) {\n                    descriptor.scriptSetup = scriptBlock;\n                    break;\n                }\n                if (!isSetup && !descriptor.script) {\n                    descriptor.script = scriptBlock;\n                    break;\n                }\n                errors.push(createDuplicateBlockError(node, isSetup));\n                break;\n            case 'style':\n                const styleBlock = createBlock(node, source, pad);\n                if (styleBlock.attrs.vars) {\n                    errors.push(new SyntaxError(`<style vars> has been replaced by a new proposal: ` +\n                        `https://github.com/vuejs/rfcs/pull/231`));\n                }\n                descriptor.styles.push(styleBlock);\n                break;\n            default:\n                descriptor.customBlocks.push(createBlock(node, source, pad));\n                break;\n        }\n    });\n    if (!descriptor.template && !descriptor.script && !descriptor.scriptSetup) {\n        errors.push(new SyntaxError(`At least one <template> or <script> is required in a single file component.`));\n    }\n    if (descriptor.scriptSetup) {\n        if (descriptor.scriptSetup.src) {\n            errors.push(new SyntaxError(`<script setup> cannot use the \"src\" attribute because ` +\n                `its syntax will be ambiguous outside of the component.`));\n            descriptor.scriptSetup = null;\n        }\n        if (descriptor.script && descriptor.script.src) {\n            errors.push(new SyntaxError(`<script> cannot use the \"src\" attribute when <script setup> is ` +\n                `also present because they must be processed together.`));\n            descriptor.script = null;\n        }\n    }\n    if (sourceMap) {\n        const genMap = (block) => {\n            if (block && !block.src) {\n                block.map = generateSourceMap(filename, source, block.content, sourceRoot, !pad || block.type === 'template' ? block.loc.start.line - 1 : 0);\n            }\n        };\n        genMap(descriptor.template);\n        genMap(descriptor.script);\n        descriptor.styles.forEach(genMap);\n        descriptor.customBlocks.forEach(genMap);\n    }\n    // parse CSS vars\n    descriptor.cssVars = parseCssVars(descriptor);\n    // check if the SFC uses :slotted\n    const slottedRE = /(?:::v-|:)slotted\\(/;\n    descriptor.slotted = descriptor.styles.some(s => s.scoped && slottedRE.test(s.content));\n    const result = {\n        descriptor,\n        errors\n    };\n    sourceToSFC.set(sourceKey, result);\n    return result;\n}\nfunction createDuplicateBlockError(node, isScriptSetup = false) {\n    const err = new SyntaxError(`Single file component can contain only one <${node.tag}${isScriptSetup ? ` setup` : ``}> element`);\n    err.loc = node.loc;\n    return err;\n}\nfunction createBlock(node, source, pad) {\n    const type = node.tag;\n    let { start, end } = node.loc;\n    let content = '';\n    if (node.children.length) {\n        start = node.children[0].loc.start;\n        end = node.children[node.children.length - 1].loc.end;\n        content = source.slice(start.offset, end.offset);\n    }\n    else {\n        const offset = node.loc.source.indexOf(`</`);\n        if (offset > -1) {\n            start = {\n                line: start.line,\n                column: start.column + offset,\n                offset: start.offset + offset\n            };\n        }\n        end = { ...start };\n    }\n    const loc = {\n        source: content,\n        start,\n        end\n    };\n    const attrs = {};\n    const block = {\n        type,\n        content,\n        loc,\n        attrs\n    };\n    if (pad) {\n        block.content = padContent(source, block, pad) + block.content;\n    }\n    node.props.forEach(p => {\n        if (p.type === 6 /* NodeTypes.ATTRIBUTE */) {\n            attrs[p.name] = p.value ? p.value.content || true : true;\n            if (p.name === 'lang') {\n                block.lang = p.value && p.value.content;\n            }\n            else if (p.name === 'src') {\n                block.src = p.value && p.value.content;\n            }\n            else if (type === 'style') {\n                if (p.name === 'scoped') {\n                    block.scoped = true;\n                }\n                else if (p.name === 'module') {\n                    block.module = attrs[p.name];\n                }\n            }\n            else if (type === 'script' && p.name === 'setup') {\n                block.setup = attrs.setup;\n            }\n        }\n    });\n    return block;\n}\nconst splitRE = /\\r?\\n/g;\nconst emptyRE = /^(?:\\/\\/)?\\s*$/;\nconst replaceRE = /./g;\nfunction generateSourceMap(filename, source, generated, sourceRoot, lineOffset) {\n    const map = new require$$0$2.SourceMapGenerator({\n        file: filename.replace(/\\\\/g, '/'),\n        sourceRoot: sourceRoot.replace(/\\\\/g, '/')\n    });\n    map.setSourceContent(filename, source);\n    generated.split(splitRE).forEach((line, index) => {\n        if (!emptyRE.test(line)) {\n            const originalLine = index + 1 + lineOffset;\n            const generatedLine = index + 1;\n            for (let i = 0; i < line.length; i++) {\n                if (!/\\s/.test(line[i])) {\n                    map.addMapping({\n                        source: filename,\n                        original: {\n                            line: originalLine,\n                            column: i\n                        },\n                        generated: {\n                            line: generatedLine,\n                            column: i\n                        }\n                    });\n                }\n            }\n        }\n    });\n    return JSON.parse(map.toString());\n}\nfunction padContent(content, block, pad) {\n    content = content.slice(0, block.loc.start.offset);\n    if (pad === 'space') {\n        return content.replace(replaceRE, ' ');\n    }\n    else {\n        const offset = content.split(splitRE).length;\n        const padChar = block.type === 'script' && !block.lang ? '//\\n' : '\\n';\n        return Array(offset).join(padChar);\n    }\n}\nfunction hasSrc(node) {\n    return node.props.some(p => {\n        if (p.type !== 6 /* NodeTypes.ATTRIBUTE */) {\n            return false;\n        }\n        return p.name === 'src';\n    });\n}\n/**\n * Returns true if the node has no children\n * once the empty text nodes (trimmed content) have been filtered out.\n */\nfunction isEmpty(node) {\n    for (let i = 0; i < node.children.length; i++) {\n        const child = node.children[i];\n        if (child.type !== 2 /* NodeTypes.TEXT */ || child.content.trim() !== '') {\n            return false;\n        }\n    }\n    return true;\n}\n\nconst trimPlugin = () => {\n    return {\n        postcssPlugin: 'vue-sfc-trim',\n        Once(root) {\n            root.walk(({ type, raws }) => {\n                if (type === 'rule' || type === 'atrule') {\n                    if (raws.before)\n                        raws.before = '\\n';\n                    if ('after' in raws && raws.after)\n                        raws.after = '\\n';\n                }\n            });\n        }\n    };\n};\ntrimPlugin.postcss = true;\nvar trimPlugin$1 = trimPlugin;\n\nvar dist = {exports: {}};\n\nvar processor = {exports: {}};\n\nvar parser$1 = {exports: {}};\n\nvar root$2 = {exports: {}};\n\nvar container = {exports: {}};\n\nvar node$1 = {exports: {}};\n\nvar util$1 = {};\n\nvar unesc = {exports: {}};\n\n(function (module, exports) {\n\n\texports.__esModule = true;\n\texports[\"default\"] = unesc;\n\n\t// Many thanks for this post which made this migration much easier.\n\t// https://mathiasbynens.be/notes/css-escapes\n\n\t/**\n\t * \n\t * @param {string} str \n\t * @returns {[string, number]|undefined}\n\t */\n\tfunction gobbleHex(str) {\n\t  var lower = str.toLowerCase();\n\t  var hex = '';\n\t  var spaceTerminated = false;\n\n\t  for (var i = 0; i < 6 && lower[i] !== undefined; i++) {\n\t    var code = lower.charCodeAt(i); // check to see if we are dealing with a valid hex char [a-f|0-9]\n\n\t    var valid = code >= 97 && code <= 102 || code >= 48 && code <= 57; // https://drafts.csswg.org/css-syntax/#consume-escaped-code-point\n\n\t    spaceTerminated = code === 32;\n\n\t    if (!valid) {\n\t      break;\n\t    }\n\n\t    hex += lower[i];\n\t  }\n\n\t  if (hex.length === 0) {\n\t    return undefined;\n\t  }\n\n\t  var codePoint = parseInt(hex, 16);\n\t  var isSurrogate = codePoint >= 0xD800 && codePoint <= 0xDFFF; // Add special case for\n\t  // \"If this number is zero, or is for a surrogate, or is greater than the maximum allowed code point\"\n\t  // https://drafts.csswg.org/css-syntax/#maximum-allowed-code-point\n\n\t  if (isSurrogate || codePoint === 0x0000 || codePoint > 0x10FFFF) {\n\t    return [\"\\uFFFD\", hex.length + (spaceTerminated ? 1 : 0)];\n\t  }\n\n\t  return [String.fromCodePoint(codePoint), hex.length + (spaceTerminated ? 1 : 0)];\n\t}\n\n\tvar CONTAINS_ESCAPE = /\\\\/;\n\n\tfunction unesc(str) {\n\t  var needToProcess = CONTAINS_ESCAPE.test(str);\n\n\t  if (!needToProcess) {\n\t    return str;\n\t  }\n\n\t  var ret = \"\";\n\n\t  for (var i = 0; i < str.length; i++) {\n\t    if (str[i] === \"\\\\\") {\n\t      var gobbled = gobbleHex(str.slice(i + 1, i + 7));\n\n\t      if (gobbled !== undefined) {\n\t        ret += gobbled[0];\n\t        i += gobbled[1];\n\t        continue;\n\t      } // Retain a pair of \\\\ if double escaped `\\\\\\\\`\n\t      // https://github.com/postcss/postcss-selector-parser/commit/268c9a7656fb53f543dc620aa5b73a30ec3ff20e\n\n\n\t      if (str[i + 1] === \"\\\\\") {\n\t        ret += \"\\\\\";\n\t        i++;\n\t        continue;\n\t      } // if \\\\ is at the end of the string retain it\n\t      // https://github.com/postcss/postcss-selector-parser/commit/01a6b346e3612ce1ab20219acc26abdc259ccefb\n\n\n\t      if (str.length === i + 1) {\n\t        ret += str[i];\n\t      }\n\n\t      continue;\n\t    }\n\n\t    ret += str[i];\n\t  }\n\n\t  return ret;\n\t}\n\n\tmodule.exports = exports.default;\n} (unesc, unesc.exports));\n\nvar getProp = {exports: {}};\n\n(function (module, exports) {\n\n\texports.__esModule = true;\n\texports[\"default\"] = getProp;\n\n\tfunction getProp(obj) {\n\t  for (var _len = arguments.length, props = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n\t    props[_key - 1] = arguments[_key];\n\t  }\n\n\t  while (props.length > 0) {\n\t    var prop = props.shift();\n\n\t    if (!obj[prop]) {\n\t      return undefined;\n\t    }\n\n\t    obj = obj[prop];\n\t  }\n\n\t  return obj;\n\t}\n\n\tmodule.exports = exports.default;\n} (getProp, getProp.exports));\n\nvar ensureObject = {exports: {}};\n\n(function (module, exports) {\n\n\texports.__esModule = true;\n\texports[\"default\"] = ensureObject;\n\n\tfunction ensureObject(obj) {\n\t  for (var _len = arguments.length, props = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n\t    props[_key - 1] = arguments[_key];\n\t  }\n\n\t  while (props.length > 0) {\n\t    var prop = props.shift();\n\n\t    if (!obj[prop]) {\n\t      obj[prop] = {};\n\t    }\n\n\t    obj = obj[prop];\n\t  }\n\t}\n\n\tmodule.exports = exports.default;\n} (ensureObject, ensureObject.exports));\n\nvar stripComments = {exports: {}};\n\n(function (module, exports) {\n\n\texports.__esModule = true;\n\texports[\"default\"] = stripComments;\n\n\tfunction stripComments(str) {\n\t  var s = \"\";\n\t  var commentStart = str.indexOf(\"/*\");\n\t  var lastEnd = 0;\n\n\t  while (commentStart >= 0) {\n\t    s = s + str.slice(lastEnd, commentStart);\n\t    var commentEnd = str.indexOf(\"*/\", commentStart + 2);\n\n\t    if (commentEnd < 0) {\n\t      return s;\n\t    }\n\n\t    lastEnd = commentEnd + 2;\n\t    commentStart = str.indexOf(\"/*\", lastEnd);\n\t  }\n\n\t  s = s + str.slice(lastEnd);\n\t  return s;\n\t}\n\n\tmodule.exports = exports.default;\n} (stripComments, stripComments.exports));\n\nutil$1.__esModule = true;\nutil$1.stripComments = util$1.ensureObject = util$1.getProp = util$1.unesc = void 0;\n\nvar _unesc = _interopRequireDefault$6(unesc.exports);\n\nutil$1.unesc = _unesc[\"default\"];\n\nvar _getProp = _interopRequireDefault$6(getProp.exports);\n\nutil$1.getProp = _getProp[\"default\"];\n\nvar _ensureObject = _interopRequireDefault$6(ensureObject.exports);\n\nutil$1.ensureObject = _ensureObject[\"default\"];\n\nvar _stripComments = _interopRequireDefault$6(stripComments.exports);\n\nutil$1.stripComments = _stripComments[\"default\"];\n\nfunction _interopRequireDefault$6(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\n(function (module, exports) {\n\n\texports.__esModule = true;\n\texports[\"default\"] = void 0;\n\n\tvar _util = util$1;\n\n\tfunction _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); } }\n\n\tfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n\tvar cloneNode = function cloneNode(obj, parent) {\n\t  if (typeof obj !== 'object' || obj === null) {\n\t    return obj;\n\t  }\n\n\t  var cloned = new obj.constructor();\n\n\t  for (var i in obj) {\n\t    if (!obj.hasOwnProperty(i)) {\n\t      continue;\n\t    }\n\n\t    var value = obj[i];\n\t    var type = typeof value;\n\n\t    if (i === 'parent' && type === 'object') {\n\t      if (parent) {\n\t        cloned[i] = parent;\n\t      }\n\t    } else if (value instanceof Array) {\n\t      cloned[i] = value.map(function (j) {\n\t        return cloneNode(j, cloned);\n\t      });\n\t    } else {\n\t      cloned[i] = cloneNode(value, cloned);\n\t    }\n\t  }\n\n\t  return cloned;\n\t};\n\n\tvar Node = /*#__PURE__*/function () {\n\t  function Node(opts) {\n\t    if (opts === void 0) {\n\t      opts = {};\n\t    }\n\n\t    Object.assign(this, opts);\n\t    this.spaces = this.spaces || {};\n\t    this.spaces.before = this.spaces.before || '';\n\t    this.spaces.after = this.spaces.after || '';\n\t  }\n\n\t  var _proto = Node.prototype;\n\n\t  _proto.remove = function remove() {\n\t    if (this.parent) {\n\t      this.parent.removeChild(this);\n\t    }\n\n\t    this.parent = undefined;\n\t    return this;\n\t  };\n\n\t  _proto.replaceWith = function replaceWith() {\n\t    if (this.parent) {\n\t      for (var index in arguments) {\n\t        this.parent.insertBefore(this, arguments[index]);\n\t      }\n\n\t      this.remove();\n\t    }\n\n\t    return this;\n\t  };\n\n\t  _proto.next = function next() {\n\t    return this.parent.at(this.parent.index(this) + 1);\n\t  };\n\n\t  _proto.prev = function prev() {\n\t    return this.parent.at(this.parent.index(this) - 1);\n\t  };\n\n\t  _proto.clone = function clone(overrides) {\n\t    if (overrides === void 0) {\n\t      overrides = {};\n\t    }\n\n\t    var cloned = cloneNode(this);\n\n\t    for (var name in overrides) {\n\t      cloned[name] = overrides[name];\n\t    }\n\n\t    return cloned;\n\t  }\n\t  /**\n\t   * Some non-standard syntax doesn't follow normal escaping rules for css.\n\t   * This allows non standard syntax to be appended to an existing property\n\t   * by specifying the escaped value. By specifying the escaped value,\n\t   * illegal characters are allowed to be directly inserted into css output.\n\t   * @param {string} name the property to set\n\t   * @param {any} value the unescaped value of the property\n\t   * @param {string} valueEscaped optional. the escaped value of the property.\n\t   */\n\t  ;\n\n\t  _proto.appendToPropertyAndEscape = function appendToPropertyAndEscape(name, value, valueEscaped) {\n\t    if (!this.raws) {\n\t      this.raws = {};\n\t    }\n\n\t    var originalValue = this[name];\n\t    var originalEscaped = this.raws[name];\n\t    this[name] = originalValue + value; // this may trigger a setter that updates raws, so it has to be set first.\n\n\t    if (originalEscaped || valueEscaped !== value) {\n\t      this.raws[name] = (originalEscaped || originalValue) + valueEscaped;\n\t    } else {\n\t      delete this.raws[name]; // delete any escaped value that was created by the setter.\n\t    }\n\t  }\n\t  /**\n\t   * Some non-standard syntax doesn't follow normal escaping rules for css.\n\t   * This allows the escaped value to be specified directly, allowing illegal\n\t   * characters to be directly inserted into css output.\n\t   * @param {string} name the property to set\n\t   * @param {any} value the unescaped value of the property\n\t   * @param {string} valueEscaped the escaped value of the property.\n\t   */\n\t  ;\n\n\t  _proto.setPropertyAndEscape = function setPropertyAndEscape(name, value, valueEscaped) {\n\t    if (!this.raws) {\n\t      this.raws = {};\n\t    }\n\n\t    this[name] = value; // this may trigger a setter that updates raws, so it has to be set first.\n\n\t    this.raws[name] = valueEscaped;\n\t  }\n\t  /**\n\t   * When you want a value to passed through to CSS directly. This method\n\t   * deletes the corresponding raw value causing the stringifier to fallback\n\t   * to the unescaped value.\n\t   * @param {string} name the property to set.\n\t   * @param {any} value The value that is both escaped and unescaped.\n\t   */\n\t  ;\n\n\t  _proto.setPropertyWithoutEscape = function setPropertyWithoutEscape(name, value) {\n\t    this[name] = value; // this may trigger a setter that updates raws, so it has to be set first.\n\n\t    if (this.raws) {\n\t      delete this.raws[name];\n\t    }\n\t  }\n\t  /**\n\t   *\n\t   * @param {number} line The number (starting with 1)\n\t   * @param {number} column The column number (starting with 1)\n\t   */\n\t  ;\n\n\t  _proto.isAtPosition = function isAtPosition(line, column) {\n\t    if (this.source && this.source.start && this.source.end) {\n\t      if (this.source.start.line > line) {\n\t        return false;\n\t      }\n\n\t      if (this.source.end.line < line) {\n\t        return false;\n\t      }\n\n\t      if (this.source.start.line === line && this.source.start.column > column) {\n\t        return false;\n\t      }\n\n\t      if (this.source.end.line === line && this.source.end.column < column) {\n\t        return false;\n\t      }\n\n\t      return true;\n\t    }\n\n\t    return undefined;\n\t  };\n\n\t  _proto.stringifyProperty = function stringifyProperty(name) {\n\t    return this.raws && this.raws[name] || this[name];\n\t  };\n\n\t  _proto.valueToString = function valueToString() {\n\t    return String(this.stringifyProperty(\"value\"));\n\t  };\n\n\t  _proto.toString = function toString() {\n\t    return [this.rawSpaceBefore, this.valueToString(), this.rawSpaceAfter].join('');\n\t  };\n\n\t  _createClass(Node, [{\n\t    key: \"rawSpaceBefore\",\n\t    get: function get() {\n\t      var rawSpace = this.raws && this.raws.spaces && this.raws.spaces.before;\n\n\t      if (rawSpace === undefined) {\n\t        rawSpace = this.spaces && this.spaces.before;\n\t      }\n\n\t      return rawSpace || \"\";\n\t    },\n\t    set: function set(raw) {\n\t      (0, _util.ensureObject)(this, \"raws\", \"spaces\");\n\t      this.raws.spaces.before = raw;\n\t    }\n\t  }, {\n\t    key: \"rawSpaceAfter\",\n\t    get: function get() {\n\t      var rawSpace = this.raws && this.raws.spaces && this.raws.spaces.after;\n\n\t      if (rawSpace === undefined) {\n\t        rawSpace = this.spaces.after;\n\t      }\n\n\t      return rawSpace || \"\";\n\t    },\n\t    set: function set(raw) {\n\t      (0, _util.ensureObject)(this, \"raws\", \"spaces\");\n\t      this.raws.spaces.after = raw;\n\t    }\n\t  }]);\n\n\t  return Node;\n\t}();\n\n\texports[\"default\"] = Node;\n\tmodule.exports = exports.default;\n} (node$1, node$1.exports));\n\nvar types = {};\n\ntypes.__esModule = true;\ntypes.UNIVERSAL = types.ATTRIBUTE = types.CLASS = types.COMBINATOR = types.COMMENT = types.ID = types.NESTING = types.PSEUDO = types.ROOT = types.SELECTOR = types.STRING = types.TAG = void 0;\nvar TAG = 'tag';\ntypes.TAG = TAG;\nvar STRING = 'string';\ntypes.STRING = STRING;\nvar SELECTOR = 'selector';\ntypes.SELECTOR = SELECTOR;\nvar ROOT = 'root';\ntypes.ROOT = ROOT;\nvar PSEUDO = 'pseudo';\ntypes.PSEUDO = PSEUDO;\nvar NESTING = 'nesting';\ntypes.NESTING = NESTING;\nvar ID = 'id';\ntypes.ID = ID;\nvar COMMENT = 'comment';\ntypes.COMMENT = COMMENT;\nvar COMBINATOR = 'combinator';\ntypes.COMBINATOR = COMBINATOR;\nvar CLASS = 'class';\ntypes.CLASS = CLASS;\nvar ATTRIBUTE = 'attribute';\ntypes.ATTRIBUTE = ATTRIBUTE;\nvar UNIVERSAL = 'universal';\ntypes.UNIVERSAL = UNIVERSAL;\n\n(function (module, exports) {\n\n\texports.__esModule = true;\n\texports[\"default\"] = void 0;\n\n\tvar _node = _interopRequireDefault(node$1.exports);\n\n\tvar types$1 = _interopRequireWildcard(types);\n\n\tfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }\n\n\tfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") { return { \"default\": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (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; }\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\n\tfunction _createForOfIteratorHelperLoose(o, allowArrayLike) { var it; if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } it = o[Symbol.iterator](); return it.next.bind(it); }\n\n\tfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\n\tfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\n\tfunction _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); } }\n\n\tfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n\tfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\n\tfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\n\tvar Container = /*#__PURE__*/function (_Node) {\n\t  _inheritsLoose(Container, _Node);\n\n\t  function Container(opts) {\n\t    var _this;\n\n\t    _this = _Node.call(this, opts) || this;\n\n\t    if (!_this.nodes) {\n\t      _this.nodes = [];\n\t    }\n\n\t    return _this;\n\t  }\n\n\t  var _proto = Container.prototype;\n\n\t  _proto.append = function append(selector) {\n\t    selector.parent = this;\n\t    this.nodes.push(selector);\n\t    return this;\n\t  };\n\n\t  _proto.prepend = function prepend(selector) {\n\t    selector.parent = this;\n\t    this.nodes.unshift(selector);\n\t    return this;\n\t  };\n\n\t  _proto.at = function at(index) {\n\t    return this.nodes[index];\n\t  };\n\n\t  _proto.index = function index(child) {\n\t    if (typeof child === 'number') {\n\t      return child;\n\t    }\n\n\t    return this.nodes.indexOf(child);\n\t  };\n\n\t  _proto.removeChild = function removeChild(child) {\n\t    child = this.index(child);\n\t    this.at(child).parent = undefined;\n\t    this.nodes.splice(child, 1);\n\t    var index;\n\n\t    for (var id in this.indexes) {\n\t      index = this.indexes[id];\n\n\t      if (index >= child) {\n\t        this.indexes[id] = index - 1;\n\t      }\n\t    }\n\n\t    return this;\n\t  };\n\n\t  _proto.removeAll = function removeAll() {\n\t    for (var _iterator = _createForOfIteratorHelperLoose(this.nodes), _step; !(_step = _iterator()).done;) {\n\t      var node = _step.value;\n\t      node.parent = undefined;\n\t    }\n\n\t    this.nodes = [];\n\t    return this;\n\t  };\n\n\t  _proto.empty = function empty() {\n\t    return this.removeAll();\n\t  };\n\n\t  _proto.insertAfter = function insertAfter(oldNode, newNode) {\n\t    newNode.parent = this;\n\t    var oldIndex = this.index(oldNode);\n\t    this.nodes.splice(oldIndex + 1, 0, newNode);\n\t    newNode.parent = this;\n\t    var index;\n\n\t    for (var id in this.indexes) {\n\t      index = this.indexes[id];\n\n\t      if (oldIndex <= index) {\n\t        this.indexes[id] = index + 1;\n\t      }\n\t    }\n\n\t    return this;\n\t  };\n\n\t  _proto.insertBefore = function insertBefore(oldNode, newNode) {\n\t    newNode.parent = this;\n\t    var oldIndex = this.index(oldNode);\n\t    this.nodes.splice(oldIndex, 0, newNode);\n\t    newNode.parent = this;\n\t    var index;\n\n\t    for (var id in this.indexes) {\n\t      index = this.indexes[id];\n\n\t      if (index <= oldIndex) {\n\t        this.indexes[id] = index + 1;\n\t      }\n\t    }\n\n\t    return this;\n\t  };\n\n\t  _proto._findChildAtPosition = function _findChildAtPosition(line, col) {\n\t    var found = undefined;\n\t    this.each(function (node) {\n\t      if (node.atPosition) {\n\t        var foundChild = node.atPosition(line, col);\n\n\t        if (foundChild) {\n\t          found = foundChild;\n\t          return false;\n\t        }\n\t      } else if (node.isAtPosition(line, col)) {\n\t        found = node;\n\t        return false;\n\t      }\n\t    });\n\t    return found;\n\t  }\n\t  /**\n\t   * Return the most specific node at the line and column number given.\n\t   * The source location is based on the original parsed location, locations aren't\n\t   * updated as selector nodes are mutated.\n\t   * \n\t   * Note that this location is relative to the location of the first character\n\t   * of the selector, and not the location of the selector in the overall document\n\t   * when used in conjunction with postcss.\n\t   *\n\t   * If not found, returns undefined.\n\t   * @param {number} line The line number of the node to find. (1-based index)\n\t   * @param {number} col  The column number of the node to find. (1-based index)\n\t   */\n\t  ;\n\n\t  _proto.atPosition = function atPosition(line, col) {\n\t    if (this.isAtPosition(line, col)) {\n\t      return this._findChildAtPosition(line, col) || this;\n\t    } else {\n\t      return undefined;\n\t    }\n\t  };\n\n\t  _proto._inferEndPosition = function _inferEndPosition() {\n\t    if (this.last && this.last.source && this.last.source.end) {\n\t      this.source = this.source || {};\n\t      this.source.end = this.source.end || {};\n\t      Object.assign(this.source.end, this.last.source.end);\n\t    }\n\t  };\n\n\t  _proto.each = function each(callback) {\n\t    if (!this.lastEach) {\n\t      this.lastEach = 0;\n\t    }\n\n\t    if (!this.indexes) {\n\t      this.indexes = {};\n\t    }\n\n\t    this.lastEach++;\n\t    var id = this.lastEach;\n\t    this.indexes[id] = 0;\n\n\t    if (!this.length) {\n\t      return undefined;\n\t    }\n\n\t    var index, result;\n\n\t    while (this.indexes[id] < this.length) {\n\t      index = this.indexes[id];\n\t      result = callback(this.at(index), index);\n\n\t      if (result === false) {\n\t        break;\n\t      }\n\n\t      this.indexes[id] += 1;\n\t    }\n\n\t    delete this.indexes[id];\n\n\t    if (result === false) {\n\t      return false;\n\t    }\n\t  };\n\n\t  _proto.walk = function walk(callback) {\n\t    return this.each(function (node, i) {\n\t      var result = callback(node, i);\n\n\t      if (result !== false && node.length) {\n\t        result = node.walk(callback);\n\t      }\n\n\t      if (result === false) {\n\t        return false;\n\t      }\n\t    });\n\t  };\n\n\t  _proto.walkAttributes = function walkAttributes(callback) {\n\t    var _this2 = this;\n\n\t    return this.walk(function (selector) {\n\t      if (selector.type === types$1.ATTRIBUTE) {\n\t        return callback.call(_this2, selector);\n\t      }\n\t    });\n\t  };\n\n\t  _proto.walkClasses = function walkClasses(callback) {\n\t    var _this3 = this;\n\n\t    return this.walk(function (selector) {\n\t      if (selector.type === types$1.CLASS) {\n\t        return callback.call(_this3, selector);\n\t      }\n\t    });\n\t  };\n\n\t  _proto.walkCombinators = function walkCombinators(callback) {\n\t    var _this4 = this;\n\n\t    return this.walk(function (selector) {\n\t      if (selector.type === types$1.COMBINATOR) {\n\t        return callback.call(_this4, selector);\n\t      }\n\t    });\n\t  };\n\n\t  _proto.walkComments = function walkComments(callback) {\n\t    var _this5 = this;\n\n\t    return this.walk(function (selector) {\n\t      if (selector.type === types$1.COMMENT) {\n\t        return callback.call(_this5, selector);\n\t      }\n\t    });\n\t  };\n\n\t  _proto.walkIds = function walkIds(callback) {\n\t    var _this6 = this;\n\n\t    return this.walk(function (selector) {\n\t      if (selector.type === types$1.ID) {\n\t        return callback.call(_this6, selector);\n\t      }\n\t    });\n\t  };\n\n\t  _proto.walkNesting = function walkNesting(callback) {\n\t    var _this7 = this;\n\n\t    return this.walk(function (selector) {\n\t      if (selector.type === types$1.NESTING) {\n\t        return callback.call(_this7, selector);\n\t      }\n\t    });\n\t  };\n\n\t  _proto.walkPseudos = function walkPseudos(callback) {\n\t    var _this8 = this;\n\n\t    return this.walk(function (selector) {\n\t      if (selector.type === types$1.PSEUDO) {\n\t        return callback.call(_this8, selector);\n\t      }\n\t    });\n\t  };\n\n\t  _proto.walkTags = function walkTags(callback) {\n\t    var _this9 = this;\n\n\t    return this.walk(function (selector) {\n\t      if (selector.type === types$1.TAG) {\n\t        return callback.call(_this9, selector);\n\t      }\n\t    });\n\t  };\n\n\t  _proto.walkUniversals = function walkUniversals(callback) {\n\t    var _this10 = this;\n\n\t    return this.walk(function (selector) {\n\t      if (selector.type === types$1.UNIVERSAL) {\n\t        return callback.call(_this10, selector);\n\t      }\n\t    });\n\t  };\n\n\t  _proto.split = function split(callback) {\n\t    var _this11 = this;\n\n\t    var current = [];\n\t    return this.reduce(function (memo, node, index) {\n\t      var split = callback.call(_this11, node);\n\t      current.push(node);\n\n\t      if (split) {\n\t        memo.push(current);\n\t        current = [];\n\t      } else if (index === _this11.length - 1) {\n\t        memo.push(current);\n\t      }\n\n\t      return memo;\n\t    }, []);\n\t  };\n\n\t  _proto.map = function map(callback) {\n\t    return this.nodes.map(callback);\n\t  };\n\n\t  _proto.reduce = function reduce(callback, memo) {\n\t    return this.nodes.reduce(callback, memo);\n\t  };\n\n\t  _proto.every = function every(callback) {\n\t    return this.nodes.every(callback);\n\t  };\n\n\t  _proto.some = function some(callback) {\n\t    return this.nodes.some(callback);\n\t  };\n\n\t  _proto.filter = function filter(callback) {\n\t    return this.nodes.filter(callback);\n\t  };\n\n\t  _proto.sort = function sort(callback) {\n\t    return this.nodes.sort(callback);\n\t  };\n\n\t  _proto.toString = function toString() {\n\t    return this.map(String).join('');\n\t  };\n\n\t  _createClass(Container, [{\n\t    key: \"first\",\n\t    get: function get() {\n\t      return this.at(0);\n\t    }\n\t  }, {\n\t    key: \"last\",\n\t    get: function get() {\n\t      return this.at(this.length - 1);\n\t    }\n\t  }, {\n\t    key: \"length\",\n\t    get: function get() {\n\t      return this.nodes.length;\n\t    }\n\t  }]);\n\n\t  return Container;\n\t}(_node[\"default\"]);\n\n\texports[\"default\"] = Container;\n\tmodule.exports = exports.default;\n} (container, container.exports));\n\n(function (module, exports) {\n\n\texports.__esModule = true;\n\texports[\"default\"] = void 0;\n\n\tvar _container = _interopRequireDefault(container.exports);\n\n\tvar _types = types;\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\n\tfunction _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); } }\n\n\tfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n\tfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\n\tfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\n\tvar Root = /*#__PURE__*/function (_Container) {\n\t  _inheritsLoose(Root, _Container);\n\n\t  function Root(opts) {\n\t    var _this;\n\n\t    _this = _Container.call(this, opts) || this;\n\t    _this.type = _types.ROOT;\n\t    return _this;\n\t  }\n\n\t  var _proto = Root.prototype;\n\n\t  _proto.toString = function toString() {\n\t    var str = this.reduce(function (memo, selector) {\n\t      memo.push(String(selector));\n\t      return memo;\n\t    }, []).join(',');\n\t    return this.trailingComma ? str + ',' : str;\n\t  };\n\n\t  _proto.error = function error(message, options) {\n\t    if (this._error) {\n\t      return this._error(message, options);\n\t    } else {\n\t      return new Error(message);\n\t    }\n\t  };\n\n\t  _createClass(Root, [{\n\t    key: \"errorGenerator\",\n\t    set: function set(handler) {\n\t      this._error = handler;\n\t    }\n\t  }]);\n\n\t  return Root;\n\t}(_container[\"default\"]);\n\n\texports[\"default\"] = Root;\n\tmodule.exports = exports.default;\n} (root$2, root$2.exports));\n\nvar selector$1 = {exports: {}};\n\n(function (module, exports) {\n\n\texports.__esModule = true;\n\texports[\"default\"] = void 0;\n\n\tvar _container = _interopRequireDefault(container.exports);\n\n\tvar _types = types;\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\n\tfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\n\tfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\n\tvar Selector = /*#__PURE__*/function (_Container) {\n\t  _inheritsLoose(Selector, _Container);\n\n\t  function Selector(opts) {\n\t    var _this;\n\n\t    _this = _Container.call(this, opts) || this;\n\t    _this.type = _types.SELECTOR;\n\t    return _this;\n\t  }\n\n\t  return Selector;\n\t}(_container[\"default\"]);\n\n\texports[\"default\"] = Selector;\n\tmodule.exports = exports.default;\n} (selector$1, selector$1.exports));\n\nvar className$1 = {exports: {}};\n\n/*! https://mths.be/cssesc v3.0.0 by @mathias */\n\nvar object = {};\nvar hasOwnProperty$1 = object.hasOwnProperty;\nvar merge$2 = function merge(options, defaults) {\n\tif (!options) {\n\t\treturn defaults;\n\t}\n\tvar result = {};\n\tfor (var key in defaults) {\n\t\t// `if (defaults.hasOwnProperty(key) { … }` is not needed here, since\n\t\t// only recognized option names are used.\n\t\tresult[key] = hasOwnProperty$1.call(options, key) ? options[key] : defaults[key];\n\t}\n\treturn result;\n};\n\nvar regexAnySingleEscape = /[ -,\\.\\/:-@\\[-\\^`\\{-~]/;\nvar regexSingleEscape = /[ -,\\.\\/:-@\\[\\]\\^`\\{-~]/;\nvar regexExcessiveSpaces = /(^|\\\\+)?(\\\\[A-F0-9]{1,6})\\x20(?![a-fA-F0-9\\x20])/g;\n\n// https://mathiasbynens.be/notes/css-escapes#css\nvar cssesc = function cssesc(string, options) {\n\toptions = merge$2(options, cssesc.options);\n\tif (options.quotes != 'single' && options.quotes != 'double') {\n\t\toptions.quotes = 'single';\n\t}\n\tvar quote = options.quotes == 'double' ? '\"' : '\\'';\n\tvar isIdentifier = options.isIdentifier;\n\n\tvar firstChar = string.charAt(0);\n\tvar output = '';\n\tvar counter = 0;\n\tvar length = string.length;\n\twhile (counter < length) {\n\t\tvar character = string.charAt(counter++);\n\t\tvar codePoint = character.charCodeAt();\n\t\tvar value = void 0;\n\t\t// If it’s not a printable ASCII character…\n\t\tif (codePoint < 0x20 || codePoint > 0x7E) {\n\t\t\tif (codePoint >= 0xD800 && codePoint <= 0xDBFF && counter < length) {\n\t\t\t\t// It’s a high surrogate, and there is a next character.\n\t\t\t\tvar extra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) {\n\t\t\t\t\t// next character is low surrogate\n\t\t\t\t\tcodePoint = ((codePoint & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000;\n\t\t\t\t} else {\n\t\t\t\t\t// It’s an unmatched surrogate; only append this code unit, in case\n\t\t\t\t\t// the next code unit is the high surrogate of a surrogate pair.\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t}\n\t\t\tvalue = '\\\\' + codePoint.toString(16).toUpperCase() + ' ';\n\t\t} else {\n\t\t\tif (options.escapeEverything) {\n\t\t\t\tif (regexAnySingleEscape.test(character)) {\n\t\t\t\t\tvalue = '\\\\' + character;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = '\\\\' + codePoint.toString(16).toUpperCase() + ' ';\n\t\t\t\t}\n\t\t\t} else if (/[\\t\\n\\f\\r\\x0B]/.test(character)) {\n\t\t\t\tvalue = '\\\\' + codePoint.toString(16).toUpperCase() + ' ';\n\t\t\t} else if (character == '\\\\' || !isIdentifier && (character == '\"' && quote == character || character == '\\'' && quote == character) || isIdentifier && regexSingleEscape.test(character)) {\n\t\t\t\tvalue = '\\\\' + character;\n\t\t\t} else {\n\t\t\t\tvalue = character;\n\t\t\t}\n\t\t}\n\t\toutput += value;\n\t}\n\n\tif (isIdentifier) {\n\t\tif (/^-[-\\d]/.test(output)) {\n\t\t\toutput = '\\\\-' + output.slice(1);\n\t\t} else if (/\\d/.test(firstChar)) {\n\t\t\toutput = '\\\\3' + firstChar + ' ' + output.slice(1);\n\t\t}\n\t}\n\n\t// Remove spaces after `\\HEX` escapes that are not followed by a hex digit,\n\t// since they’re redundant. Note that this is only possible if the escape\n\t// sequence isn’t preceded by an odd number of backslashes.\n\toutput = output.replace(regexExcessiveSpaces, function ($0, $1, $2) {\n\t\tif ($1 && $1.length % 2) {\n\t\t\t// It’s not safe to remove the space, so don’t.\n\t\t\treturn $0;\n\t\t}\n\t\t// Strip the space.\n\t\treturn ($1 || '') + $2;\n\t});\n\n\tif (!isIdentifier && options.wrap) {\n\t\treturn quote + output + quote;\n\t}\n\treturn output;\n};\n\n// Expose default options (so they can be overridden globally).\ncssesc.options = {\n\t'escapeEverything': false,\n\t'isIdentifier': false,\n\t'quotes': 'single',\n\t'wrap': false\n};\n\ncssesc.version = '3.0.0';\n\nvar cssesc_1 = cssesc;\n\n(function (module, exports) {\n\n\texports.__esModule = true;\n\texports[\"default\"] = void 0;\n\n\tvar _cssesc = _interopRequireDefault(cssesc_1);\n\n\tvar _util = util$1;\n\n\tvar _node = _interopRequireDefault(node$1.exports);\n\n\tvar _types = types;\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\n\tfunction _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); } }\n\n\tfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n\tfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\n\tfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\n\tvar ClassName = /*#__PURE__*/function (_Node) {\n\t  _inheritsLoose(ClassName, _Node);\n\n\t  function ClassName(opts) {\n\t    var _this;\n\n\t    _this = _Node.call(this, opts) || this;\n\t    _this.type = _types.CLASS;\n\t    _this._constructed = true;\n\t    return _this;\n\t  }\n\n\t  var _proto = ClassName.prototype;\n\n\t  _proto.valueToString = function valueToString() {\n\t    return '.' + _Node.prototype.valueToString.call(this);\n\t  };\n\n\t  _createClass(ClassName, [{\n\t    key: \"value\",\n\t    get: function get() {\n\t      return this._value;\n\t    },\n\t    set: function set(v) {\n\t      if (this._constructed) {\n\t        var escaped = (0, _cssesc[\"default\"])(v, {\n\t          isIdentifier: true\n\t        });\n\n\t        if (escaped !== v) {\n\t          (0, _util.ensureObject)(this, \"raws\");\n\t          this.raws.value = escaped;\n\t        } else if (this.raws) {\n\t          delete this.raws.value;\n\t        }\n\t      }\n\n\t      this._value = v;\n\t    }\n\t  }]);\n\n\t  return ClassName;\n\t}(_node[\"default\"]);\n\n\texports[\"default\"] = ClassName;\n\tmodule.exports = exports.default;\n} (className$1, className$1.exports));\n\nvar comment$2 = {exports: {}};\n\n(function (module, exports) {\n\n\texports.__esModule = true;\n\texports[\"default\"] = void 0;\n\n\tvar _node = _interopRequireDefault(node$1.exports);\n\n\tvar _types = types;\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\n\tfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\n\tfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\n\tvar Comment = /*#__PURE__*/function (_Node) {\n\t  _inheritsLoose(Comment, _Node);\n\n\t  function Comment(opts) {\n\t    var _this;\n\n\t    _this = _Node.call(this, opts) || this;\n\t    _this.type = _types.COMMENT;\n\t    return _this;\n\t  }\n\n\t  return Comment;\n\t}(_node[\"default\"]);\n\n\texports[\"default\"] = Comment;\n\tmodule.exports = exports.default;\n} (comment$2, comment$2.exports));\n\nvar id$1 = {exports: {}};\n\n(function (module, exports) {\n\n\texports.__esModule = true;\n\texports[\"default\"] = void 0;\n\n\tvar _node = _interopRequireDefault(node$1.exports);\n\n\tvar _types = types;\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\n\tfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\n\tfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\n\tvar ID = /*#__PURE__*/function (_Node) {\n\t  _inheritsLoose(ID, _Node);\n\n\t  function ID(opts) {\n\t    var _this;\n\n\t    _this = _Node.call(this, opts) || this;\n\t    _this.type = _types.ID;\n\t    return _this;\n\t  }\n\n\t  var _proto = ID.prototype;\n\n\t  _proto.valueToString = function valueToString() {\n\t    return '#' + _Node.prototype.valueToString.call(this);\n\t  };\n\n\t  return ID;\n\t}(_node[\"default\"]);\n\n\texports[\"default\"] = ID;\n\tmodule.exports = exports.default;\n} (id$1, id$1.exports));\n\nvar tag$1 = {exports: {}};\n\nvar namespace = {exports: {}};\n\n(function (module, exports) {\n\n\texports.__esModule = true;\n\texports[\"default\"] = void 0;\n\n\tvar _cssesc = _interopRequireDefault(cssesc_1);\n\n\tvar _util = util$1;\n\n\tvar _node = _interopRequireDefault(node$1.exports);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\n\tfunction _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); } }\n\n\tfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n\tfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\n\tfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\n\tvar Namespace = /*#__PURE__*/function (_Node) {\n\t  _inheritsLoose(Namespace, _Node);\n\n\t  function Namespace() {\n\t    return _Node.apply(this, arguments) || this;\n\t  }\n\n\t  var _proto = Namespace.prototype;\n\n\t  _proto.qualifiedName = function qualifiedName(value) {\n\t    if (this.namespace) {\n\t      return this.namespaceString + \"|\" + value;\n\t    } else {\n\t      return value;\n\t    }\n\t  };\n\n\t  _proto.valueToString = function valueToString() {\n\t    return this.qualifiedName(_Node.prototype.valueToString.call(this));\n\t  };\n\n\t  _createClass(Namespace, [{\n\t    key: \"namespace\",\n\t    get: function get() {\n\t      return this._namespace;\n\t    },\n\t    set: function set(namespace) {\n\t      if (namespace === true || namespace === \"*\" || namespace === \"&\") {\n\t        this._namespace = namespace;\n\n\t        if (this.raws) {\n\t          delete this.raws.namespace;\n\t        }\n\n\t        return;\n\t      }\n\n\t      var escaped = (0, _cssesc[\"default\"])(namespace, {\n\t        isIdentifier: true\n\t      });\n\t      this._namespace = namespace;\n\n\t      if (escaped !== namespace) {\n\t        (0, _util.ensureObject)(this, \"raws\");\n\t        this.raws.namespace = escaped;\n\t      } else if (this.raws) {\n\t        delete this.raws.namespace;\n\t      }\n\t    }\n\t  }, {\n\t    key: \"ns\",\n\t    get: function get() {\n\t      return this._namespace;\n\t    },\n\t    set: function set(namespace) {\n\t      this.namespace = namespace;\n\t    }\n\t  }, {\n\t    key: \"namespaceString\",\n\t    get: function get() {\n\t      if (this.namespace) {\n\t        var ns = this.stringifyProperty(\"namespace\");\n\n\t        if (ns === true) {\n\t          return '';\n\t        } else {\n\t          return ns;\n\t        }\n\t      } else {\n\t        return '';\n\t      }\n\t    }\n\t  }]);\n\n\t  return Namespace;\n\t}(_node[\"default\"]);\n\n\texports[\"default\"] = Namespace;\n\tmodule.exports = exports.default;\n} (namespace, namespace.exports));\n\n(function (module, exports) {\n\n\texports.__esModule = true;\n\texports[\"default\"] = void 0;\n\n\tvar _namespace = _interopRequireDefault(namespace.exports);\n\n\tvar _types = types;\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\n\tfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\n\tfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\n\tvar Tag = /*#__PURE__*/function (_Namespace) {\n\t  _inheritsLoose(Tag, _Namespace);\n\n\t  function Tag(opts) {\n\t    var _this;\n\n\t    _this = _Namespace.call(this, opts) || this;\n\t    _this.type = _types.TAG;\n\t    return _this;\n\t  }\n\n\t  return Tag;\n\t}(_namespace[\"default\"]);\n\n\texports[\"default\"] = Tag;\n\tmodule.exports = exports.default;\n} (tag$1, tag$1.exports));\n\nvar string$1 = {exports: {}};\n\n(function (module, exports) {\n\n\texports.__esModule = true;\n\texports[\"default\"] = void 0;\n\n\tvar _node = _interopRequireDefault(node$1.exports);\n\n\tvar _types = types;\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\n\tfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\n\tfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\n\tvar String = /*#__PURE__*/function (_Node) {\n\t  _inheritsLoose(String, _Node);\n\n\t  function String(opts) {\n\t    var _this;\n\n\t    _this = _Node.call(this, opts) || this;\n\t    _this.type = _types.STRING;\n\t    return _this;\n\t  }\n\n\t  return String;\n\t}(_node[\"default\"]);\n\n\texports[\"default\"] = String;\n\tmodule.exports = exports.default;\n} (string$1, string$1.exports));\n\nvar pseudo$1 = {exports: {}};\n\n(function (module, exports) {\n\n\texports.__esModule = true;\n\texports[\"default\"] = void 0;\n\n\tvar _container = _interopRequireDefault(container.exports);\n\n\tvar _types = types;\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\n\tfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\n\tfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\n\tvar Pseudo = /*#__PURE__*/function (_Container) {\n\t  _inheritsLoose(Pseudo, _Container);\n\n\t  function Pseudo(opts) {\n\t    var _this;\n\n\t    _this = _Container.call(this, opts) || this;\n\t    _this.type = _types.PSEUDO;\n\t    return _this;\n\t  }\n\n\t  var _proto = Pseudo.prototype;\n\n\t  _proto.toString = function toString() {\n\t    var params = this.length ? '(' + this.map(String).join(',') + ')' : '';\n\t    return [this.rawSpaceBefore, this.stringifyProperty(\"value\"), params, this.rawSpaceAfter].join('');\n\t  };\n\n\t  return Pseudo;\n\t}(_container[\"default\"]);\n\n\texports[\"default\"] = Pseudo;\n\tmodule.exports = exports.default;\n} (pseudo$1, pseudo$1.exports));\n\nvar attribute$1 = {};\n\n/**\n * For Node.js, simply re-export the core `util.deprecate` function.\n */\n\nvar node = require$$2.deprecate;\n\n(function (exports) {\n\n\texports.__esModule = true;\n\texports.unescapeValue = unescapeValue;\n\texports[\"default\"] = void 0;\n\n\tvar _cssesc = _interopRequireDefault(cssesc_1);\n\n\tvar _unesc = _interopRequireDefault(unesc.exports);\n\n\tvar _namespace = _interopRequireDefault(namespace.exports);\n\n\tvar _types = types;\n\n\tvar _CSSESC_QUOTE_OPTIONS;\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\n\tfunction _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); } }\n\n\tfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n\tfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\n\tfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\n\tvar deprecate = node;\n\n\tvar WRAPPED_IN_QUOTES = /^('|\")([^]*)\\1$/;\n\tvar warnOfDeprecatedValueAssignment = deprecate(function () {}, \"Assigning an attribute a value containing characters that might need to be escaped is deprecated. \" + \"Call attribute.setValue() instead.\");\n\tvar warnOfDeprecatedQuotedAssignment = deprecate(function () {}, \"Assigning attr.quoted is deprecated and has no effect. Assign to attr.quoteMark instead.\");\n\tvar warnOfDeprecatedConstructor = deprecate(function () {}, \"Constructing an Attribute selector with a value without specifying quoteMark is deprecated. Note: The value should be unescaped now.\");\n\n\tfunction unescapeValue(value) {\n\t  var deprecatedUsage = false;\n\t  var quoteMark = null;\n\t  var unescaped = value;\n\t  var m = unescaped.match(WRAPPED_IN_QUOTES);\n\n\t  if (m) {\n\t    quoteMark = m[1];\n\t    unescaped = m[2];\n\t  }\n\n\t  unescaped = (0, _unesc[\"default\"])(unescaped);\n\n\t  if (unescaped !== value) {\n\t    deprecatedUsage = true;\n\t  }\n\n\t  return {\n\t    deprecatedUsage: deprecatedUsage,\n\t    unescaped: unescaped,\n\t    quoteMark: quoteMark\n\t  };\n\t}\n\n\tfunction handleDeprecatedContructorOpts(opts) {\n\t  if (opts.quoteMark !== undefined) {\n\t    return opts;\n\t  }\n\n\t  if (opts.value === undefined) {\n\t    return opts;\n\t  }\n\n\t  warnOfDeprecatedConstructor();\n\n\t  var _unescapeValue = unescapeValue(opts.value),\n\t      quoteMark = _unescapeValue.quoteMark,\n\t      unescaped = _unescapeValue.unescaped;\n\n\t  if (!opts.raws) {\n\t    opts.raws = {};\n\t  }\n\n\t  if (opts.raws.value === undefined) {\n\t    opts.raws.value = opts.value;\n\t  }\n\n\t  opts.value = unescaped;\n\t  opts.quoteMark = quoteMark;\n\t  return opts;\n\t}\n\n\tvar Attribute = /*#__PURE__*/function (_Namespace) {\n\t  _inheritsLoose(Attribute, _Namespace);\n\n\t  function Attribute(opts) {\n\t    var _this;\n\n\t    if (opts === void 0) {\n\t      opts = {};\n\t    }\n\n\t    _this = _Namespace.call(this, handleDeprecatedContructorOpts(opts)) || this;\n\t    _this.type = _types.ATTRIBUTE;\n\t    _this.raws = _this.raws || {};\n\t    Object.defineProperty(_this.raws, 'unquoted', {\n\t      get: deprecate(function () {\n\t        return _this.value;\n\t      }, \"attr.raws.unquoted is deprecated. Call attr.value instead.\"),\n\t      set: deprecate(function () {\n\t        return _this.value;\n\t      }, \"Setting attr.raws.unquoted is deprecated and has no effect. attr.value is unescaped by default now.\")\n\t    });\n\t    _this._constructed = true;\n\t    return _this;\n\t  }\n\t  /**\n\t   * Returns the Attribute's value quoted such that it would be legal to use\n\t   * in the value of a css file. The original value's quotation setting\n\t   * used for stringification is left unchanged. See `setValue(value, options)`\n\t   * if you want to control the quote settings of a new value for the attribute.\n\t   *\n\t   * You can also change the quotation used for the current value by setting quoteMark.\n\t   *\n\t   * Options:\n\t   *   * quoteMark {'\"' | \"'\" | null} - Use this value to quote the value. If this\n\t   *     option is not set, the original value for quoteMark will be used. If\n\t   *     indeterminate, a double quote is used. The legal values are:\n\t   *     * `null` - the value will be unquoted and characters will be escaped as necessary.\n\t   *     * `'` - the value will be quoted with a single quote and single quotes are escaped.\n\t   *     * `\"` - the value will be quoted with a double quote and double quotes are escaped.\n\t   *   * preferCurrentQuoteMark {boolean} - if true, prefer the source quote mark\n\t   *     over the quoteMark option value.\n\t   *   * smart {boolean} - if true, will select a quote mark based on the value\n\t   *     and the other options specified here. See the `smartQuoteMark()`\n\t   *     method.\n\t   **/\n\n\n\t  var _proto = Attribute.prototype;\n\n\t  _proto.getQuotedValue = function getQuotedValue(options) {\n\t    if (options === void 0) {\n\t      options = {};\n\t    }\n\n\t    var quoteMark = this._determineQuoteMark(options);\n\n\t    var cssescopts = CSSESC_QUOTE_OPTIONS[quoteMark];\n\t    var escaped = (0, _cssesc[\"default\"])(this._value, cssescopts);\n\t    return escaped;\n\t  };\n\n\t  _proto._determineQuoteMark = function _determineQuoteMark(options) {\n\t    return options.smart ? this.smartQuoteMark(options) : this.preferredQuoteMark(options);\n\t  }\n\t  /**\n\t   * Set the unescaped value with the specified quotation options. The value\n\t   * provided must not include any wrapping quote marks -- those quotes will\n\t   * be interpreted as part of the value and escaped accordingly.\n\t   */\n\t  ;\n\n\t  _proto.setValue = function setValue(value, options) {\n\t    if (options === void 0) {\n\t      options = {};\n\t    }\n\n\t    this._value = value;\n\t    this._quoteMark = this._determineQuoteMark(options);\n\n\t    this._syncRawValue();\n\t  }\n\t  /**\n\t   * Intelligently select a quoteMark value based on the value's contents. If\n\t   * the value is a legal CSS ident, it will not be quoted. Otherwise a quote\n\t   * mark will be picked that minimizes the number of escapes.\n\t   *\n\t   * If there's no clear winner, the quote mark from these options is used,\n\t   * then the source quote mark (this is inverted if `preferCurrentQuoteMark` is\n\t   * true). If the quoteMark is unspecified, a double quote is used.\n\t   *\n\t   * @param options This takes the quoteMark and preferCurrentQuoteMark options\n\t   * from the quoteValue method.\n\t   */\n\t  ;\n\n\t  _proto.smartQuoteMark = function smartQuoteMark(options) {\n\t    var v = this.value;\n\t    var numSingleQuotes = v.replace(/[^']/g, '').length;\n\t    var numDoubleQuotes = v.replace(/[^\"]/g, '').length;\n\n\t    if (numSingleQuotes + numDoubleQuotes === 0) {\n\t      var escaped = (0, _cssesc[\"default\"])(v, {\n\t        isIdentifier: true\n\t      });\n\n\t      if (escaped === v) {\n\t        return Attribute.NO_QUOTE;\n\t      } else {\n\t        var pref = this.preferredQuoteMark(options);\n\n\t        if (pref === Attribute.NO_QUOTE) {\n\t          // pick a quote mark that isn't none and see if it's smaller\n\t          var quote = this.quoteMark || options.quoteMark || Attribute.DOUBLE_QUOTE;\n\t          var opts = CSSESC_QUOTE_OPTIONS[quote];\n\t          var quoteValue = (0, _cssesc[\"default\"])(v, opts);\n\n\t          if (quoteValue.length < escaped.length) {\n\t            return quote;\n\t          }\n\t        }\n\n\t        return pref;\n\t      }\n\t    } else if (numDoubleQuotes === numSingleQuotes) {\n\t      return this.preferredQuoteMark(options);\n\t    } else if (numDoubleQuotes < numSingleQuotes) {\n\t      return Attribute.DOUBLE_QUOTE;\n\t    } else {\n\t      return Attribute.SINGLE_QUOTE;\n\t    }\n\t  }\n\t  /**\n\t   * Selects the preferred quote mark based on the options and the current quote mark value.\n\t   * If you want the quote mark to depend on the attribute value, call `smartQuoteMark(opts)`\n\t   * instead.\n\t   */\n\t  ;\n\n\t  _proto.preferredQuoteMark = function preferredQuoteMark(options) {\n\t    var quoteMark = options.preferCurrentQuoteMark ? this.quoteMark : options.quoteMark;\n\n\t    if (quoteMark === undefined) {\n\t      quoteMark = options.preferCurrentQuoteMark ? options.quoteMark : this.quoteMark;\n\t    }\n\n\t    if (quoteMark === undefined) {\n\t      quoteMark = Attribute.DOUBLE_QUOTE;\n\t    }\n\n\t    return quoteMark;\n\t  };\n\n\t  _proto._syncRawValue = function _syncRawValue() {\n\t    var rawValue = (0, _cssesc[\"default\"])(this._value, CSSESC_QUOTE_OPTIONS[this.quoteMark]);\n\n\t    if (rawValue === this._value) {\n\t      if (this.raws) {\n\t        delete this.raws.value;\n\t      }\n\t    } else {\n\t      this.raws.value = rawValue;\n\t    }\n\t  };\n\n\t  _proto._handleEscapes = function _handleEscapes(prop, value) {\n\t    if (this._constructed) {\n\t      var escaped = (0, _cssesc[\"default\"])(value, {\n\t        isIdentifier: true\n\t      });\n\n\t      if (escaped !== value) {\n\t        this.raws[prop] = escaped;\n\t      } else {\n\t        delete this.raws[prop];\n\t      }\n\t    }\n\t  };\n\n\t  _proto._spacesFor = function _spacesFor(name) {\n\t    var attrSpaces = {\n\t      before: '',\n\t      after: ''\n\t    };\n\t    var spaces = this.spaces[name] || {};\n\t    var rawSpaces = this.raws.spaces && this.raws.spaces[name] || {};\n\t    return Object.assign(attrSpaces, spaces, rawSpaces);\n\t  };\n\n\t  _proto._stringFor = function _stringFor(name, spaceName, concat) {\n\t    if (spaceName === void 0) {\n\t      spaceName = name;\n\t    }\n\n\t    if (concat === void 0) {\n\t      concat = defaultAttrConcat;\n\t    }\n\n\t    var attrSpaces = this._spacesFor(spaceName);\n\n\t    return concat(this.stringifyProperty(name), attrSpaces);\n\t  }\n\t  /**\n\t   * returns the offset of the attribute part specified relative to the\n\t   * start of the node of the output string.\n\t   *\n\t   * * \"ns\" - alias for \"namespace\"\n\t   * * \"namespace\" - the namespace if it exists.\n\t   * * \"attribute\" - the attribute name\n\t   * * \"attributeNS\" - the start of the attribute or its namespace\n\t   * * \"operator\" - the match operator of the attribute\n\t   * * \"value\" - The value (string or identifier)\n\t   * * \"insensitive\" - the case insensitivity flag;\n\t   * @param part One of the possible values inside an attribute.\n\t   * @returns -1 if the name is invalid or the value doesn't exist in this attribute.\n\t   */\n\t  ;\n\n\t  _proto.offsetOf = function offsetOf(name) {\n\t    var count = 1;\n\n\t    var attributeSpaces = this._spacesFor(\"attribute\");\n\n\t    count += attributeSpaces.before.length;\n\n\t    if (name === \"namespace\" || name === \"ns\") {\n\t      return this.namespace ? count : -1;\n\t    }\n\n\t    if (name === \"attributeNS\") {\n\t      return count;\n\t    }\n\n\t    count += this.namespaceString.length;\n\n\t    if (this.namespace) {\n\t      count += 1;\n\t    }\n\n\t    if (name === \"attribute\") {\n\t      return count;\n\t    }\n\n\t    count += this.stringifyProperty(\"attribute\").length;\n\t    count += attributeSpaces.after.length;\n\n\t    var operatorSpaces = this._spacesFor(\"operator\");\n\n\t    count += operatorSpaces.before.length;\n\t    var operator = this.stringifyProperty(\"operator\");\n\n\t    if (name === \"operator\") {\n\t      return operator ? count : -1;\n\t    }\n\n\t    count += operator.length;\n\t    count += operatorSpaces.after.length;\n\n\t    var valueSpaces = this._spacesFor(\"value\");\n\n\t    count += valueSpaces.before.length;\n\t    var value = this.stringifyProperty(\"value\");\n\n\t    if (name === \"value\") {\n\t      return value ? count : -1;\n\t    }\n\n\t    count += value.length;\n\t    count += valueSpaces.after.length;\n\n\t    var insensitiveSpaces = this._spacesFor(\"insensitive\");\n\n\t    count += insensitiveSpaces.before.length;\n\n\t    if (name === \"insensitive\") {\n\t      return this.insensitive ? count : -1;\n\t    }\n\n\t    return -1;\n\t  };\n\n\t  _proto.toString = function toString() {\n\t    var _this2 = this;\n\n\t    var selector = [this.rawSpaceBefore, '['];\n\t    selector.push(this._stringFor('qualifiedAttribute', 'attribute'));\n\n\t    if (this.operator && (this.value || this.value === '')) {\n\t      selector.push(this._stringFor('operator'));\n\t      selector.push(this._stringFor('value'));\n\t      selector.push(this._stringFor('insensitiveFlag', 'insensitive', function (attrValue, attrSpaces) {\n\t        if (attrValue.length > 0 && !_this2.quoted && attrSpaces.before.length === 0 && !(_this2.spaces.value && _this2.spaces.value.after)) {\n\t          attrSpaces.before = \" \";\n\t        }\n\n\t        return defaultAttrConcat(attrValue, attrSpaces);\n\t      }));\n\t    }\n\n\t    selector.push(']');\n\t    selector.push(this.rawSpaceAfter);\n\t    return selector.join('');\n\t  };\n\n\t  _createClass(Attribute, [{\n\t    key: \"quoted\",\n\t    get: function get() {\n\t      var qm = this.quoteMark;\n\t      return qm === \"'\" || qm === '\"';\n\t    },\n\t    set: function set(value) {\n\t      warnOfDeprecatedQuotedAssignment();\n\t    }\n\t    /**\n\t     * returns a single (`'`) or double (`\"`) quote character if the value is quoted.\n\t     * returns `null` if the value is not quoted.\n\t     * returns `undefined` if the quotation state is unknown (this can happen when\n\t     * the attribute is constructed without specifying a quote mark.)\n\t     */\n\n\t  }, {\n\t    key: \"quoteMark\",\n\t    get: function get() {\n\t      return this._quoteMark;\n\t    }\n\t    /**\n\t     * Set the quote mark to be used by this attribute's value.\n\t     * If the quote mark changes, the raw (escaped) value at `attr.raws.value` of the attribute\n\t     * value is updated accordingly.\n\t     *\n\t     * @param {\"'\" | '\"' | null} quoteMark The quote mark or `null` if the value should be unquoted.\n\t     */\n\t    ,\n\t    set: function set(quoteMark) {\n\t      if (!this._constructed) {\n\t        this._quoteMark = quoteMark;\n\t        return;\n\t      }\n\n\t      if (this._quoteMark !== quoteMark) {\n\t        this._quoteMark = quoteMark;\n\n\t        this._syncRawValue();\n\t      }\n\t    }\n\t  }, {\n\t    key: \"qualifiedAttribute\",\n\t    get: function get() {\n\t      return this.qualifiedName(this.raws.attribute || this.attribute);\n\t    }\n\t  }, {\n\t    key: \"insensitiveFlag\",\n\t    get: function get() {\n\t      return this.insensitive ? 'i' : '';\n\t    }\n\t  }, {\n\t    key: \"value\",\n\t    get: function get() {\n\t      return this._value;\n\t    }\n\t    /**\n\t     * Before 3.0, the value had to be set to an escaped value including any wrapped\n\t     * quote marks. In 3.0, the semantics of `Attribute.value` changed so that the value\n\t     * is unescaped during parsing and any quote marks are removed.\n\t     *\n\t     * Because the ambiguity of this semantic change, if you set `attr.value = newValue`,\n\t     * a deprecation warning is raised when the new value contains any characters that would\n\t     * require escaping (including if it contains wrapped quotes).\n\t     *\n\t     * Instead, you should call `attr.setValue(newValue, opts)` and pass options that describe\n\t     * how the new value is quoted.\n\t     */\n\t    ,\n\t    set: function set(v) {\n\t      if (this._constructed) {\n\t        var _unescapeValue2 = unescapeValue(v),\n\t            deprecatedUsage = _unescapeValue2.deprecatedUsage,\n\t            unescaped = _unescapeValue2.unescaped,\n\t            quoteMark = _unescapeValue2.quoteMark;\n\n\t        if (deprecatedUsage) {\n\t          warnOfDeprecatedValueAssignment();\n\t        }\n\n\t        if (unescaped === this._value && quoteMark === this._quoteMark) {\n\t          return;\n\t        }\n\n\t        this._value = unescaped;\n\t        this._quoteMark = quoteMark;\n\n\t        this._syncRawValue();\n\t      } else {\n\t        this._value = v;\n\t      }\n\t    }\n\t  }, {\n\t    key: \"attribute\",\n\t    get: function get() {\n\t      return this._attribute;\n\t    },\n\t    set: function set(name) {\n\t      this._handleEscapes(\"attribute\", name);\n\n\t      this._attribute = name;\n\t    }\n\t  }]);\n\n\t  return Attribute;\n\t}(_namespace[\"default\"]);\n\n\texports[\"default\"] = Attribute;\n\tAttribute.NO_QUOTE = null;\n\tAttribute.SINGLE_QUOTE = \"'\";\n\tAttribute.DOUBLE_QUOTE = '\"';\n\tvar CSSESC_QUOTE_OPTIONS = (_CSSESC_QUOTE_OPTIONS = {\n\t  \"'\": {\n\t    quotes: 'single',\n\t    wrap: true\n\t  },\n\t  '\"': {\n\t    quotes: 'double',\n\t    wrap: true\n\t  }\n\t}, _CSSESC_QUOTE_OPTIONS[null] = {\n\t  isIdentifier: true\n\t}, _CSSESC_QUOTE_OPTIONS);\n\n\tfunction defaultAttrConcat(attrValue, attrSpaces) {\n\t  return \"\" + attrSpaces.before + attrValue + attrSpaces.after;\n\t}\n} (attribute$1));\n\nvar universal$1 = {exports: {}};\n\n(function (module, exports) {\n\n\texports.__esModule = true;\n\texports[\"default\"] = void 0;\n\n\tvar _namespace = _interopRequireDefault(namespace.exports);\n\n\tvar _types = types;\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\n\tfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\n\tfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\n\tvar Universal = /*#__PURE__*/function (_Namespace) {\n\t  _inheritsLoose(Universal, _Namespace);\n\n\t  function Universal(opts) {\n\t    var _this;\n\n\t    _this = _Namespace.call(this, opts) || this;\n\t    _this.type = _types.UNIVERSAL;\n\t    _this.value = '*';\n\t    return _this;\n\t  }\n\n\t  return Universal;\n\t}(_namespace[\"default\"]);\n\n\texports[\"default\"] = Universal;\n\tmodule.exports = exports.default;\n} (universal$1, universal$1.exports));\n\nvar combinator$2 = {exports: {}};\n\n(function (module, exports) {\n\n\texports.__esModule = true;\n\texports[\"default\"] = void 0;\n\n\tvar _node = _interopRequireDefault(node$1.exports);\n\n\tvar _types = types;\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\n\tfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\n\tfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\n\tvar Combinator = /*#__PURE__*/function (_Node) {\n\t  _inheritsLoose(Combinator, _Node);\n\n\t  function Combinator(opts) {\n\t    var _this;\n\n\t    _this = _Node.call(this, opts) || this;\n\t    _this.type = _types.COMBINATOR;\n\t    return _this;\n\t  }\n\n\t  return Combinator;\n\t}(_node[\"default\"]);\n\n\texports[\"default\"] = Combinator;\n\tmodule.exports = exports.default;\n} (combinator$2, combinator$2.exports));\n\nvar nesting$1 = {exports: {}};\n\n(function (module, exports) {\n\n\texports.__esModule = true;\n\texports[\"default\"] = void 0;\n\n\tvar _node = _interopRequireDefault(node$1.exports);\n\n\tvar _types = types;\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\n\tfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\n\tfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\n\tvar Nesting = /*#__PURE__*/function (_Node) {\n\t  _inheritsLoose(Nesting, _Node);\n\n\t  function Nesting(opts) {\n\t    var _this;\n\n\t    _this = _Node.call(this, opts) || this;\n\t    _this.type = _types.NESTING;\n\t    _this.value = '&';\n\t    return _this;\n\t  }\n\n\t  return Nesting;\n\t}(_node[\"default\"]);\n\n\texports[\"default\"] = Nesting;\n\tmodule.exports = exports.default;\n} (nesting$1, nesting$1.exports));\n\nvar sortAscending = {exports: {}};\n\n(function (module, exports) {\n\n\texports.__esModule = true;\n\texports[\"default\"] = sortAscending;\n\n\tfunction sortAscending(list) {\n\t  return list.sort(function (a, b) {\n\t    return a - b;\n\t  });\n\t}\n\tmodule.exports = exports.default;\n} (sortAscending, sortAscending.exports));\n\nvar tokenize = {};\n\nvar tokenTypes = {};\n\ntokenTypes.__esModule = true;\ntokenTypes.combinator = tokenTypes.word = tokenTypes.comment = tokenTypes.str = tokenTypes.tab = tokenTypes.newline = tokenTypes.feed = tokenTypes.cr = tokenTypes.backslash = tokenTypes.bang = tokenTypes.slash = tokenTypes.doubleQuote = tokenTypes.singleQuote = tokenTypes.space = tokenTypes.greaterThan = tokenTypes.pipe = tokenTypes.equals = tokenTypes.plus = tokenTypes.caret = tokenTypes.tilde = tokenTypes.dollar = tokenTypes.closeSquare = tokenTypes.openSquare = tokenTypes.closeParenthesis = tokenTypes.openParenthesis = tokenTypes.semicolon = tokenTypes.colon = tokenTypes.comma = tokenTypes.at = tokenTypes.asterisk = tokenTypes.ampersand = void 0;\nvar ampersand = 38; // `&`.charCodeAt(0);\n\ntokenTypes.ampersand = ampersand;\nvar asterisk = 42; // `*`.charCodeAt(0);\n\ntokenTypes.asterisk = asterisk;\nvar at = 64; // `@`.charCodeAt(0);\n\ntokenTypes.at = at;\nvar comma$1 = 44; // `,`.charCodeAt(0);\n\ntokenTypes.comma = comma$1;\nvar colon$1 = 58; // `:`.charCodeAt(0);\n\ntokenTypes.colon = colon$1;\nvar semicolon = 59; // `;`.charCodeAt(0);\n\ntokenTypes.semicolon = semicolon;\nvar openParenthesis = 40; // `(`.charCodeAt(0);\n\ntokenTypes.openParenthesis = openParenthesis;\nvar closeParenthesis = 41; // `)`.charCodeAt(0);\n\ntokenTypes.closeParenthesis = closeParenthesis;\nvar openSquare = 91; // `[`.charCodeAt(0);\n\ntokenTypes.openSquare = openSquare;\nvar closeSquare = 93; // `]`.charCodeAt(0);\n\ntokenTypes.closeSquare = closeSquare;\nvar dollar = 36; // `$`.charCodeAt(0);\n\ntokenTypes.dollar = dollar;\nvar tilde = 126; // `~`.charCodeAt(0);\n\ntokenTypes.tilde = tilde;\nvar caret = 94; // `^`.charCodeAt(0);\n\ntokenTypes.caret = caret;\nvar plus$1 = 43; // `+`.charCodeAt(0);\n\ntokenTypes.plus = plus$1;\nvar equals = 61; // `=`.charCodeAt(0);\n\ntokenTypes.equals = equals;\nvar pipe = 124; // `|`.charCodeAt(0);\n\ntokenTypes.pipe = pipe;\nvar greaterThan = 62; // `>`.charCodeAt(0);\n\ntokenTypes.greaterThan = greaterThan;\nvar space = 32; // ` `.charCodeAt(0);\n\ntokenTypes.space = space;\nvar singleQuote$1 = 39; // `'`.charCodeAt(0);\n\ntokenTypes.singleQuote = singleQuote$1;\nvar doubleQuote$1 = 34; // `\"`.charCodeAt(0);\n\ntokenTypes.doubleQuote = doubleQuote$1;\nvar slash$1 = 47; // `/`.charCodeAt(0);\n\ntokenTypes.slash = slash$1;\nvar bang = 33; // `!`.charCodeAt(0);\n\ntokenTypes.bang = bang;\nvar backslash$1 = 92; // '\\\\'.charCodeAt(0);\n\ntokenTypes.backslash = backslash$1;\nvar cr = 13; // '\\r'.charCodeAt(0);\n\ntokenTypes.cr = cr;\nvar feed = 12; // '\\f'.charCodeAt(0);\n\ntokenTypes.feed = feed;\nvar newline = 10; // '\\n'.charCodeAt(0);\n\ntokenTypes.newline = newline;\nvar tab = 9; // '\\t'.charCodeAt(0);\n// Expose aliases primarily for readability.\n\ntokenTypes.tab = tab;\nvar str = singleQuote$1; // No good single character representation!\n\ntokenTypes.str = str;\nvar comment$1 = -1;\ntokenTypes.comment = comment$1;\nvar word = -2;\ntokenTypes.word = word;\nvar combinator$1 = -3;\ntokenTypes.combinator = combinator$1;\n\n(function (exports) {\n\n\texports.__esModule = true;\n\texports[\"default\"] = tokenize;\n\texports.FIELDS = void 0;\n\n\tvar t = _interopRequireWildcard(tokenTypes);\n\n\tvar _unescapable, _wordDelimiters;\n\n\tfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }\n\n\tfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") { return { \"default\": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (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; }\n\n\tvar unescapable = (_unescapable = {}, _unescapable[t.tab] = true, _unescapable[t.newline] = true, _unescapable[t.cr] = true, _unescapable[t.feed] = true, _unescapable);\n\tvar wordDelimiters = (_wordDelimiters = {}, _wordDelimiters[t.space] = true, _wordDelimiters[t.tab] = true, _wordDelimiters[t.newline] = true, _wordDelimiters[t.cr] = true, _wordDelimiters[t.feed] = true, _wordDelimiters[t.ampersand] = true, _wordDelimiters[t.asterisk] = true, _wordDelimiters[t.bang] = true, _wordDelimiters[t.comma] = true, _wordDelimiters[t.colon] = true, _wordDelimiters[t.semicolon] = true, _wordDelimiters[t.openParenthesis] = true, _wordDelimiters[t.closeParenthesis] = true, _wordDelimiters[t.openSquare] = true, _wordDelimiters[t.closeSquare] = true, _wordDelimiters[t.singleQuote] = true, _wordDelimiters[t.doubleQuote] = true, _wordDelimiters[t.plus] = true, _wordDelimiters[t.pipe] = true, _wordDelimiters[t.tilde] = true, _wordDelimiters[t.greaterThan] = true, _wordDelimiters[t.equals] = true, _wordDelimiters[t.dollar] = true, _wordDelimiters[t.caret] = true, _wordDelimiters[t.slash] = true, _wordDelimiters);\n\tvar hex = {};\n\tvar hexChars = \"0123456789abcdefABCDEF\";\n\n\tfor (var i = 0; i < hexChars.length; i++) {\n\t  hex[hexChars.charCodeAt(i)] = true;\n\t}\n\t/**\n\t *  Returns the last index of the bar css word\n\t * @param {string} css The string in which the word begins\n\t * @param {number} start The index into the string where word's first letter occurs\n\t */\n\n\n\tfunction consumeWord(css, start) {\n\t  var next = start;\n\t  var code;\n\n\t  do {\n\t    code = css.charCodeAt(next);\n\n\t    if (wordDelimiters[code]) {\n\t      return next - 1;\n\t    } else if (code === t.backslash) {\n\t      next = consumeEscape(css, next) + 1;\n\t    } else {\n\t      // All other characters are part of the word\n\t      next++;\n\t    }\n\t  } while (next < css.length);\n\n\t  return next - 1;\n\t}\n\t/**\n\t *  Returns the last index of the escape sequence\n\t * @param {string} css The string in which the sequence begins\n\t * @param {number} start The index into the string where escape character (`\\`) occurs.\n\t */\n\n\n\tfunction consumeEscape(css, start) {\n\t  var next = start;\n\t  var code = css.charCodeAt(next + 1);\n\n\t  if (unescapable[code]) ; else if (hex[code]) {\n\t    var hexDigits = 0; // consume up to 6 hex chars\n\n\t    do {\n\t      next++;\n\t      hexDigits++;\n\t      code = css.charCodeAt(next + 1);\n\t    } while (hex[code] && hexDigits < 6); // if fewer than 6 hex chars, a trailing space ends the escape\n\n\n\t    if (hexDigits < 6 && code === t.space) {\n\t      next++;\n\t    }\n\t  } else {\n\t    // the next char is part of the current word\n\t    next++;\n\t  }\n\n\t  return next;\n\t}\n\n\tvar FIELDS = {\n\t  TYPE: 0,\n\t  START_LINE: 1,\n\t  START_COL: 2,\n\t  END_LINE: 3,\n\t  END_COL: 4,\n\t  START_POS: 5,\n\t  END_POS: 6\n\t};\n\texports.FIELDS = FIELDS;\n\n\tfunction tokenize(input) {\n\t  var tokens = [];\n\t  var css = input.css.valueOf();\n\t  var _css = css,\n\t      length = _css.length;\n\t  var offset = -1;\n\t  var line = 1;\n\t  var start = 0;\n\t  var end = 0;\n\t  var code, content, endColumn, endLine, escaped, escapePos, last, lines, next, nextLine, nextOffset, quote, tokenType;\n\n\t  function unclosed(what, fix) {\n\t    if (input.safe) {\n\t      // fyi: this is never set to true.\n\t      css += fix;\n\t      next = css.length - 1;\n\t    } else {\n\t      throw input.error('Unclosed ' + what, line, start - offset, start);\n\t    }\n\t  }\n\n\t  while (start < length) {\n\t    code = css.charCodeAt(start);\n\n\t    if (code === t.newline) {\n\t      offset = start;\n\t      line += 1;\n\t    }\n\n\t    switch (code) {\n\t      case t.space:\n\t      case t.tab:\n\t      case t.newline:\n\t      case t.cr:\n\t      case t.feed:\n\t        next = start;\n\n\t        do {\n\t          next += 1;\n\t          code = css.charCodeAt(next);\n\n\t          if (code === t.newline) {\n\t            offset = next;\n\t            line += 1;\n\t          }\n\t        } while (code === t.space || code === t.newline || code === t.tab || code === t.cr || code === t.feed);\n\n\t        tokenType = t.space;\n\t        endLine = line;\n\t        endColumn = next - offset - 1;\n\t        end = next;\n\t        break;\n\n\t      case t.plus:\n\t      case t.greaterThan:\n\t      case t.tilde:\n\t      case t.pipe:\n\t        next = start;\n\n\t        do {\n\t          next += 1;\n\t          code = css.charCodeAt(next);\n\t        } while (code === t.plus || code === t.greaterThan || code === t.tilde || code === t.pipe);\n\n\t        tokenType = t.combinator;\n\t        endLine = line;\n\t        endColumn = start - offset;\n\t        end = next;\n\t        break;\n\t      // Consume these characters as single tokens.\n\n\t      case t.asterisk:\n\t      case t.ampersand:\n\t      case t.bang:\n\t      case t.comma:\n\t      case t.equals:\n\t      case t.dollar:\n\t      case t.caret:\n\t      case t.openSquare:\n\t      case t.closeSquare:\n\t      case t.colon:\n\t      case t.semicolon:\n\t      case t.openParenthesis:\n\t      case t.closeParenthesis:\n\t        next = start;\n\t        tokenType = code;\n\t        endLine = line;\n\t        endColumn = start - offset;\n\t        end = next + 1;\n\t        break;\n\n\t      case t.singleQuote:\n\t      case t.doubleQuote:\n\t        quote = code === t.singleQuote ? \"'\" : '\"';\n\t        next = start;\n\n\t        do {\n\t          escaped = false;\n\t          next = css.indexOf(quote, next + 1);\n\n\t          if (next === -1) {\n\t            unclosed('quote', quote);\n\t          }\n\n\t          escapePos = next;\n\n\t          while (css.charCodeAt(escapePos - 1) === t.backslash) {\n\t            escapePos -= 1;\n\t            escaped = !escaped;\n\t          }\n\t        } while (escaped);\n\n\t        tokenType = t.str;\n\t        endLine = line;\n\t        endColumn = start - offset;\n\t        end = next + 1;\n\t        break;\n\n\t      default:\n\t        if (code === t.slash && css.charCodeAt(start + 1) === t.asterisk) {\n\t          next = css.indexOf('*/', start + 2) + 1;\n\n\t          if (next === 0) {\n\t            unclosed('comment', '*/');\n\t          }\n\n\t          content = css.slice(start, next + 1);\n\t          lines = content.split('\\n');\n\t          last = lines.length - 1;\n\n\t          if (last > 0) {\n\t            nextLine = line + last;\n\t            nextOffset = next - lines[last].length;\n\t          } else {\n\t            nextLine = line;\n\t            nextOffset = offset;\n\t          }\n\n\t          tokenType = t.comment;\n\t          line = nextLine;\n\t          endLine = nextLine;\n\t          endColumn = next - nextOffset;\n\t        } else if (code === t.slash) {\n\t          next = start;\n\t          tokenType = code;\n\t          endLine = line;\n\t          endColumn = start - offset;\n\t          end = next + 1;\n\t        } else {\n\t          next = consumeWord(css, start);\n\t          tokenType = t.word;\n\t          endLine = line;\n\t          endColumn = next - offset;\n\t        }\n\n\t        end = next + 1;\n\t        break;\n\t    } // Ensure that the token structure remains consistent\n\n\n\t    tokens.push([tokenType, // [0] Token type\n\t    line, // [1] Starting line\n\t    start - offset, // [2] Starting column\n\t    endLine, // [3] Ending line\n\t    endColumn, // [4] Ending column\n\t    start, // [5] Start position / Source index\n\t    end // [6] End position\n\t    ]); // Reset offset for the next token\n\n\t    if (nextOffset) {\n\t      offset = nextOffset;\n\t      nextOffset = null;\n\t    }\n\n\t    start = end;\n\t  }\n\n\t  return tokens;\n\t}\n} (tokenize));\n\n(function (module, exports) {\n\n\texports.__esModule = true;\n\texports[\"default\"] = void 0;\n\n\tvar _root = _interopRequireDefault(root$2.exports);\n\n\tvar _selector = _interopRequireDefault(selector$1.exports);\n\n\tvar _className = _interopRequireDefault(className$1.exports);\n\n\tvar _comment = _interopRequireDefault(comment$2.exports);\n\n\tvar _id = _interopRequireDefault(id$1.exports);\n\n\tvar _tag = _interopRequireDefault(tag$1.exports);\n\n\tvar _string = _interopRequireDefault(string$1.exports);\n\n\tvar _pseudo = _interopRequireDefault(pseudo$1.exports);\n\n\tvar _attribute = _interopRequireWildcard(attribute$1);\n\n\tvar _universal = _interopRequireDefault(universal$1.exports);\n\n\tvar _combinator = _interopRequireDefault(combinator$2.exports);\n\n\tvar _nesting = _interopRequireDefault(nesting$1.exports);\n\n\tvar _sortAscending = _interopRequireDefault(sortAscending.exports);\n\n\tvar _tokenize = _interopRequireWildcard(tokenize);\n\n\tvar tokens = _interopRequireWildcard(tokenTypes);\n\n\tvar types$1 = _interopRequireWildcard(types);\n\n\tvar _util = util$1;\n\n\tvar _WHITESPACE_TOKENS, _Object$assign;\n\n\tfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }\n\n\tfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") { return { \"default\": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (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; }\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\n\tfunction _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); } }\n\n\tfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n\tvar WHITESPACE_TOKENS = (_WHITESPACE_TOKENS = {}, _WHITESPACE_TOKENS[tokens.space] = true, _WHITESPACE_TOKENS[tokens.cr] = true, _WHITESPACE_TOKENS[tokens.feed] = true, _WHITESPACE_TOKENS[tokens.newline] = true, _WHITESPACE_TOKENS[tokens.tab] = true, _WHITESPACE_TOKENS);\n\tvar WHITESPACE_EQUIV_TOKENS = Object.assign({}, WHITESPACE_TOKENS, (_Object$assign = {}, _Object$assign[tokens.comment] = true, _Object$assign));\n\n\tfunction tokenStart(token) {\n\t  return {\n\t    line: token[_tokenize.FIELDS.START_LINE],\n\t    column: token[_tokenize.FIELDS.START_COL]\n\t  };\n\t}\n\n\tfunction tokenEnd(token) {\n\t  return {\n\t    line: token[_tokenize.FIELDS.END_LINE],\n\t    column: token[_tokenize.FIELDS.END_COL]\n\t  };\n\t}\n\n\tfunction getSource(startLine, startColumn, endLine, endColumn) {\n\t  return {\n\t    start: {\n\t      line: startLine,\n\t      column: startColumn\n\t    },\n\t    end: {\n\t      line: endLine,\n\t      column: endColumn\n\t    }\n\t  };\n\t}\n\n\tfunction getTokenSource(token) {\n\t  return getSource(token[_tokenize.FIELDS.START_LINE], token[_tokenize.FIELDS.START_COL], token[_tokenize.FIELDS.END_LINE], token[_tokenize.FIELDS.END_COL]);\n\t}\n\n\tfunction getTokenSourceSpan(startToken, endToken) {\n\t  if (!startToken) {\n\t    return undefined;\n\t  }\n\n\t  return getSource(startToken[_tokenize.FIELDS.START_LINE], startToken[_tokenize.FIELDS.START_COL], endToken[_tokenize.FIELDS.END_LINE], endToken[_tokenize.FIELDS.END_COL]);\n\t}\n\n\tfunction unescapeProp(node, prop) {\n\t  var value = node[prop];\n\n\t  if (typeof value !== \"string\") {\n\t    return;\n\t  }\n\n\t  if (value.indexOf(\"\\\\\") !== -1) {\n\t    (0, _util.ensureObject)(node, 'raws');\n\t    node[prop] = (0, _util.unesc)(value);\n\n\t    if (node.raws[prop] === undefined) {\n\t      node.raws[prop] = value;\n\t    }\n\t  }\n\n\t  return node;\n\t}\n\n\tfunction indexesOf(array, item) {\n\t  var i = -1;\n\t  var indexes = [];\n\n\t  while ((i = array.indexOf(item, i + 1)) !== -1) {\n\t    indexes.push(i);\n\t  }\n\n\t  return indexes;\n\t}\n\n\tfunction uniqs() {\n\t  var list = Array.prototype.concat.apply([], arguments);\n\t  return list.filter(function (item, i) {\n\t    return i === list.indexOf(item);\n\t  });\n\t}\n\n\tvar Parser = /*#__PURE__*/function () {\n\t  function Parser(rule, options) {\n\t    if (options === void 0) {\n\t      options = {};\n\t    }\n\n\t    this.rule = rule;\n\t    this.options = Object.assign({\n\t      lossy: false,\n\t      safe: false\n\t    }, options);\n\t    this.position = 0;\n\t    this.css = typeof this.rule === 'string' ? this.rule : this.rule.selector;\n\t    this.tokens = (0, _tokenize[\"default\"])({\n\t      css: this.css,\n\t      error: this._errorGenerator(),\n\t      safe: this.options.safe\n\t    });\n\t    var rootSource = getTokenSourceSpan(this.tokens[0], this.tokens[this.tokens.length - 1]);\n\t    this.root = new _root[\"default\"]({\n\t      source: rootSource\n\t    });\n\t    this.root.errorGenerator = this._errorGenerator();\n\t    var selector = new _selector[\"default\"]({\n\t      source: {\n\t        start: {\n\t          line: 1,\n\t          column: 1\n\t        }\n\t      }\n\t    });\n\t    this.root.append(selector);\n\t    this.current = selector;\n\t    this.loop();\n\t  }\n\n\t  var _proto = Parser.prototype;\n\n\t  _proto._errorGenerator = function _errorGenerator() {\n\t    var _this = this;\n\n\t    return function (message, errorOptions) {\n\t      if (typeof _this.rule === 'string') {\n\t        return new Error(message);\n\t      }\n\n\t      return _this.rule.error(message, errorOptions);\n\t    };\n\t  };\n\n\t  _proto.attribute = function attribute() {\n\t    var attr = [];\n\t    var startingToken = this.currToken;\n\t    this.position++;\n\n\t    while (this.position < this.tokens.length && this.currToken[_tokenize.FIELDS.TYPE] !== tokens.closeSquare) {\n\t      attr.push(this.currToken);\n\t      this.position++;\n\t    }\n\n\t    if (this.currToken[_tokenize.FIELDS.TYPE] !== tokens.closeSquare) {\n\t      return this.expected('closing square bracket', this.currToken[_tokenize.FIELDS.START_POS]);\n\t    }\n\n\t    var len = attr.length;\n\t    var node = {\n\t      source: getSource(startingToken[1], startingToken[2], this.currToken[3], this.currToken[4]),\n\t      sourceIndex: startingToken[_tokenize.FIELDS.START_POS]\n\t    };\n\n\t    if (len === 1 && !~[tokens.word].indexOf(attr[0][_tokenize.FIELDS.TYPE])) {\n\t      return this.expected('attribute', attr[0][_tokenize.FIELDS.START_POS]);\n\t    }\n\n\t    var pos = 0;\n\t    var spaceBefore = '';\n\t    var commentBefore = '';\n\t    var lastAdded = null;\n\t    var spaceAfterMeaningfulToken = false;\n\n\t    while (pos < len) {\n\t      var token = attr[pos];\n\t      var content = this.content(token);\n\t      var next = attr[pos + 1];\n\n\t      switch (token[_tokenize.FIELDS.TYPE]) {\n\t        case tokens.space:\n\t          // if (\n\t          //     len === 1 ||\n\t          //     pos === 0 && this.content(next) === '|'\n\t          // ) {\n\t          //     return this.expected('attribute', token[TOKEN.START_POS], content);\n\t          // }\n\t          spaceAfterMeaningfulToken = true;\n\n\t          if (this.options.lossy) {\n\t            break;\n\t          }\n\n\t          if (lastAdded) {\n\t            (0, _util.ensureObject)(node, 'spaces', lastAdded);\n\t            var prevContent = node.spaces[lastAdded].after || '';\n\t            node.spaces[lastAdded].after = prevContent + content;\n\t            var existingComment = (0, _util.getProp)(node, 'raws', 'spaces', lastAdded, 'after') || null;\n\n\t            if (existingComment) {\n\t              node.raws.spaces[lastAdded].after = existingComment + content;\n\t            }\n\t          } else {\n\t            spaceBefore = spaceBefore + content;\n\t            commentBefore = commentBefore + content;\n\t          }\n\n\t          break;\n\n\t        case tokens.asterisk:\n\t          if (next[_tokenize.FIELDS.TYPE] === tokens.equals) {\n\t            node.operator = content;\n\t            lastAdded = 'operator';\n\t          } else if ((!node.namespace || lastAdded === \"namespace\" && !spaceAfterMeaningfulToken) && next) {\n\t            if (spaceBefore) {\n\t              (0, _util.ensureObject)(node, 'spaces', 'attribute');\n\t              node.spaces.attribute.before = spaceBefore;\n\t              spaceBefore = '';\n\t            }\n\n\t            if (commentBefore) {\n\t              (0, _util.ensureObject)(node, 'raws', 'spaces', 'attribute');\n\t              node.raws.spaces.attribute.before = spaceBefore;\n\t              commentBefore = '';\n\t            }\n\n\t            node.namespace = (node.namespace || \"\") + content;\n\t            var rawValue = (0, _util.getProp)(node, 'raws', 'namespace') || null;\n\n\t            if (rawValue) {\n\t              node.raws.namespace += content;\n\t            }\n\n\t            lastAdded = 'namespace';\n\t          }\n\n\t          spaceAfterMeaningfulToken = false;\n\t          break;\n\n\t        case tokens.dollar:\n\t          if (lastAdded === \"value\") {\n\t            var oldRawValue = (0, _util.getProp)(node, 'raws', 'value');\n\t            node.value += \"$\";\n\n\t            if (oldRawValue) {\n\t              node.raws.value = oldRawValue + \"$\";\n\t            }\n\n\t            break;\n\t          }\n\n\t        // Falls through\n\n\t        case tokens.caret:\n\t          if (next[_tokenize.FIELDS.TYPE] === tokens.equals) {\n\t            node.operator = content;\n\t            lastAdded = 'operator';\n\t          }\n\n\t          spaceAfterMeaningfulToken = false;\n\t          break;\n\n\t        case tokens.combinator:\n\t          if (content === '~' && next[_tokenize.FIELDS.TYPE] === tokens.equals) {\n\t            node.operator = content;\n\t            lastAdded = 'operator';\n\t          }\n\n\t          if (content !== '|') {\n\t            spaceAfterMeaningfulToken = false;\n\t            break;\n\t          }\n\n\t          if (next[_tokenize.FIELDS.TYPE] === tokens.equals) {\n\t            node.operator = content;\n\t            lastAdded = 'operator';\n\t          } else if (!node.namespace && !node.attribute) {\n\t            node.namespace = true;\n\t          }\n\n\t          spaceAfterMeaningfulToken = false;\n\t          break;\n\n\t        case tokens.word:\n\t          if (next && this.content(next) === '|' && attr[pos + 2] && attr[pos + 2][_tokenize.FIELDS.TYPE] !== tokens.equals && // this look-ahead probably fails with comment nodes involved.\n\t          !node.operator && !node.namespace) {\n\t            node.namespace = content;\n\t            lastAdded = 'namespace';\n\t          } else if (!node.attribute || lastAdded === \"attribute\" && !spaceAfterMeaningfulToken) {\n\t            if (spaceBefore) {\n\t              (0, _util.ensureObject)(node, 'spaces', 'attribute');\n\t              node.spaces.attribute.before = spaceBefore;\n\t              spaceBefore = '';\n\t            }\n\n\t            if (commentBefore) {\n\t              (0, _util.ensureObject)(node, 'raws', 'spaces', 'attribute');\n\t              node.raws.spaces.attribute.before = commentBefore;\n\t              commentBefore = '';\n\t            }\n\n\t            node.attribute = (node.attribute || \"\") + content;\n\n\t            var _rawValue = (0, _util.getProp)(node, 'raws', 'attribute') || null;\n\n\t            if (_rawValue) {\n\t              node.raws.attribute += content;\n\t            }\n\n\t            lastAdded = 'attribute';\n\t          } else if (!node.value && node.value !== \"\" || lastAdded === \"value\" && !spaceAfterMeaningfulToken) {\n\t            var _unescaped = (0, _util.unesc)(content);\n\n\t            var _oldRawValue = (0, _util.getProp)(node, 'raws', 'value') || '';\n\n\t            var oldValue = node.value || '';\n\t            node.value = oldValue + _unescaped;\n\t            node.quoteMark = null;\n\n\t            if (_unescaped !== content || _oldRawValue) {\n\t              (0, _util.ensureObject)(node, 'raws');\n\t              node.raws.value = (_oldRawValue || oldValue) + content;\n\t            }\n\n\t            lastAdded = 'value';\n\t          } else {\n\t            var insensitive = content === 'i' || content === \"I\";\n\n\t            if ((node.value || node.value === '') && (node.quoteMark || spaceAfterMeaningfulToken)) {\n\t              node.insensitive = insensitive;\n\n\t              if (!insensitive || content === \"I\") {\n\t                (0, _util.ensureObject)(node, 'raws');\n\t                node.raws.insensitiveFlag = content;\n\t              }\n\n\t              lastAdded = 'insensitive';\n\n\t              if (spaceBefore) {\n\t                (0, _util.ensureObject)(node, 'spaces', 'insensitive');\n\t                node.spaces.insensitive.before = spaceBefore;\n\t                spaceBefore = '';\n\t              }\n\n\t              if (commentBefore) {\n\t                (0, _util.ensureObject)(node, 'raws', 'spaces', 'insensitive');\n\t                node.raws.spaces.insensitive.before = commentBefore;\n\t                commentBefore = '';\n\t              }\n\t            } else if (node.value || node.value === '') {\n\t              lastAdded = 'value';\n\t              node.value += content;\n\n\t              if (node.raws.value) {\n\t                node.raws.value += content;\n\t              }\n\t            }\n\t          }\n\n\t          spaceAfterMeaningfulToken = false;\n\t          break;\n\n\t        case tokens.str:\n\t          if (!node.attribute || !node.operator) {\n\t            return this.error(\"Expected an attribute followed by an operator preceding the string.\", {\n\t              index: token[_tokenize.FIELDS.START_POS]\n\t            });\n\t          }\n\n\t          var _unescapeValue = (0, _attribute.unescapeValue)(content),\n\t              unescaped = _unescapeValue.unescaped,\n\t              quoteMark = _unescapeValue.quoteMark;\n\n\t          node.value = unescaped;\n\t          node.quoteMark = quoteMark;\n\t          lastAdded = 'value';\n\t          (0, _util.ensureObject)(node, 'raws');\n\t          node.raws.value = content;\n\t          spaceAfterMeaningfulToken = false;\n\t          break;\n\n\t        case tokens.equals:\n\t          if (!node.attribute) {\n\t            return this.expected('attribute', token[_tokenize.FIELDS.START_POS], content);\n\t          }\n\n\t          if (node.value) {\n\t            return this.error('Unexpected \"=\" found; an operator was already defined.', {\n\t              index: token[_tokenize.FIELDS.START_POS]\n\t            });\n\t          }\n\n\t          node.operator = node.operator ? node.operator + content : content;\n\t          lastAdded = 'operator';\n\t          spaceAfterMeaningfulToken = false;\n\t          break;\n\n\t        case tokens.comment:\n\t          if (lastAdded) {\n\t            if (spaceAfterMeaningfulToken || next && next[_tokenize.FIELDS.TYPE] === tokens.space || lastAdded === 'insensitive') {\n\t              var lastComment = (0, _util.getProp)(node, 'spaces', lastAdded, 'after') || '';\n\t              var rawLastComment = (0, _util.getProp)(node, 'raws', 'spaces', lastAdded, 'after') || lastComment;\n\t              (0, _util.ensureObject)(node, 'raws', 'spaces', lastAdded);\n\t              node.raws.spaces[lastAdded].after = rawLastComment + content;\n\t            } else {\n\t              var lastValue = node[lastAdded] || '';\n\t              var rawLastValue = (0, _util.getProp)(node, 'raws', lastAdded) || lastValue;\n\t              (0, _util.ensureObject)(node, 'raws');\n\t              node.raws[lastAdded] = rawLastValue + content;\n\t            }\n\t          } else {\n\t            commentBefore = commentBefore + content;\n\t          }\n\n\t          break;\n\n\t        default:\n\t          return this.error(\"Unexpected \\\"\" + content + \"\\\" found.\", {\n\t            index: token[_tokenize.FIELDS.START_POS]\n\t          });\n\t      }\n\n\t      pos++;\n\t    }\n\n\t    unescapeProp(node, \"attribute\");\n\t    unescapeProp(node, \"namespace\");\n\t    this.newNode(new _attribute[\"default\"](node));\n\t    this.position++;\n\t  }\n\t  /**\n\t   * return a node containing meaningless garbage up to (but not including) the specified token position.\n\t   * if the token position is negative, all remaining tokens are consumed.\n\t   *\n\t   * This returns an array containing a single string node if all whitespace,\n\t   * otherwise an array of comment nodes with space before and after.\n\t   *\n\t   * These tokens are not added to the current selector, the caller can add them or use them to amend\n\t   * a previous node's space metadata.\n\t   *\n\t   * In lossy mode, this returns only comments.\n\t   */\n\t  ;\n\n\t  _proto.parseWhitespaceEquivalentTokens = function parseWhitespaceEquivalentTokens(stopPosition) {\n\t    if (stopPosition < 0) {\n\t      stopPosition = this.tokens.length;\n\t    }\n\n\t    var startPosition = this.position;\n\t    var nodes = [];\n\t    var space = \"\";\n\t    var lastComment = undefined;\n\n\t    do {\n\t      if (WHITESPACE_TOKENS[this.currToken[_tokenize.FIELDS.TYPE]]) {\n\t        if (!this.options.lossy) {\n\t          space += this.content();\n\t        }\n\t      } else if (this.currToken[_tokenize.FIELDS.TYPE] === tokens.comment) {\n\t        var spaces = {};\n\n\t        if (space) {\n\t          spaces.before = space;\n\t          space = \"\";\n\t        }\n\n\t        lastComment = new _comment[\"default\"]({\n\t          value: this.content(),\n\t          source: getTokenSource(this.currToken),\n\t          sourceIndex: this.currToken[_tokenize.FIELDS.START_POS],\n\t          spaces: spaces\n\t        });\n\t        nodes.push(lastComment);\n\t      }\n\t    } while (++this.position < stopPosition);\n\n\t    if (space) {\n\t      if (lastComment) {\n\t        lastComment.spaces.after = space;\n\t      } else if (!this.options.lossy) {\n\t        var firstToken = this.tokens[startPosition];\n\t        var lastToken = this.tokens[this.position - 1];\n\t        nodes.push(new _string[\"default\"]({\n\t          value: '',\n\t          source: getSource(firstToken[_tokenize.FIELDS.START_LINE], firstToken[_tokenize.FIELDS.START_COL], lastToken[_tokenize.FIELDS.END_LINE], lastToken[_tokenize.FIELDS.END_COL]),\n\t          sourceIndex: firstToken[_tokenize.FIELDS.START_POS],\n\t          spaces: {\n\t            before: space,\n\t            after: ''\n\t          }\n\t        }));\n\t      }\n\t    }\n\n\t    return nodes;\n\t  }\n\t  /**\n\t   * \n\t   * @param {*} nodes \n\t   */\n\t  ;\n\n\t  _proto.convertWhitespaceNodesToSpace = function convertWhitespaceNodesToSpace(nodes, requiredSpace) {\n\t    var _this2 = this;\n\n\t    if (requiredSpace === void 0) {\n\t      requiredSpace = false;\n\t    }\n\n\t    var space = \"\";\n\t    var rawSpace = \"\";\n\t    nodes.forEach(function (n) {\n\t      var spaceBefore = _this2.lossySpace(n.spaces.before, requiredSpace);\n\n\t      var rawSpaceBefore = _this2.lossySpace(n.rawSpaceBefore, requiredSpace);\n\n\t      space += spaceBefore + _this2.lossySpace(n.spaces.after, requiredSpace && spaceBefore.length === 0);\n\t      rawSpace += spaceBefore + n.value + _this2.lossySpace(n.rawSpaceAfter, requiredSpace && rawSpaceBefore.length === 0);\n\t    });\n\n\t    if (rawSpace === space) {\n\t      rawSpace = undefined;\n\t    }\n\n\t    var result = {\n\t      space: space,\n\t      rawSpace: rawSpace\n\t    };\n\t    return result;\n\t  };\n\n\t  _proto.isNamedCombinator = function isNamedCombinator(position) {\n\t    if (position === void 0) {\n\t      position = this.position;\n\t    }\n\n\t    return this.tokens[position + 0] && this.tokens[position + 0][_tokenize.FIELDS.TYPE] === tokens.slash && this.tokens[position + 1] && this.tokens[position + 1][_tokenize.FIELDS.TYPE] === tokens.word && this.tokens[position + 2] && this.tokens[position + 2][_tokenize.FIELDS.TYPE] === tokens.slash;\n\t  };\n\n\t  _proto.namedCombinator = function namedCombinator() {\n\t    if (this.isNamedCombinator()) {\n\t      var nameRaw = this.content(this.tokens[this.position + 1]);\n\t      var name = (0, _util.unesc)(nameRaw).toLowerCase();\n\t      var raws = {};\n\n\t      if (name !== nameRaw) {\n\t        raws.value = \"/\" + nameRaw + \"/\";\n\t      }\n\n\t      var node = new _combinator[\"default\"]({\n\t        value: \"/\" + name + \"/\",\n\t        source: getSource(this.currToken[_tokenize.FIELDS.START_LINE], this.currToken[_tokenize.FIELDS.START_COL], this.tokens[this.position + 2][_tokenize.FIELDS.END_LINE], this.tokens[this.position + 2][_tokenize.FIELDS.END_COL]),\n\t        sourceIndex: this.currToken[_tokenize.FIELDS.START_POS],\n\t        raws: raws\n\t      });\n\t      this.position = this.position + 3;\n\t      return node;\n\t    } else {\n\t      this.unexpected();\n\t    }\n\t  };\n\n\t  _proto.combinator = function combinator() {\n\t    var _this3 = this;\n\n\t    if (this.content() === '|') {\n\t      return this.namespace();\n\t    } // We need to decide between a space that's a descendant combinator and meaningless whitespace at the end of a selector.\n\n\n\t    var nextSigTokenPos = this.locateNextMeaningfulToken(this.position);\n\n\t    if (nextSigTokenPos < 0 || this.tokens[nextSigTokenPos][_tokenize.FIELDS.TYPE] === tokens.comma) {\n\t      var nodes = this.parseWhitespaceEquivalentTokens(nextSigTokenPos);\n\n\t      if (nodes.length > 0) {\n\t        var last = this.current.last;\n\n\t        if (last) {\n\t          var _this$convertWhitespa = this.convertWhitespaceNodesToSpace(nodes),\n\t              space = _this$convertWhitespa.space,\n\t              rawSpace = _this$convertWhitespa.rawSpace;\n\n\t          if (rawSpace !== undefined) {\n\t            last.rawSpaceAfter += rawSpace;\n\t          }\n\n\t          last.spaces.after += space;\n\t        } else {\n\t          nodes.forEach(function (n) {\n\t            return _this3.newNode(n);\n\t          });\n\t        }\n\t      }\n\n\t      return;\n\t    }\n\n\t    var firstToken = this.currToken;\n\t    var spaceOrDescendantSelectorNodes = undefined;\n\n\t    if (nextSigTokenPos > this.position) {\n\t      spaceOrDescendantSelectorNodes = this.parseWhitespaceEquivalentTokens(nextSigTokenPos);\n\t    }\n\n\t    var node;\n\n\t    if (this.isNamedCombinator()) {\n\t      node = this.namedCombinator();\n\t    } else if (this.currToken[_tokenize.FIELDS.TYPE] === tokens.combinator) {\n\t      node = new _combinator[\"default\"]({\n\t        value: this.content(),\n\t        source: getTokenSource(this.currToken),\n\t        sourceIndex: this.currToken[_tokenize.FIELDS.START_POS]\n\t      });\n\t      this.position++;\n\t    } else if (WHITESPACE_TOKENS[this.currToken[_tokenize.FIELDS.TYPE]]) ; else if (!spaceOrDescendantSelectorNodes) {\n\t      this.unexpected();\n\t    }\n\n\t    if (node) {\n\t      if (spaceOrDescendantSelectorNodes) {\n\t        var _this$convertWhitespa2 = this.convertWhitespaceNodesToSpace(spaceOrDescendantSelectorNodes),\n\t            _space = _this$convertWhitespa2.space,\n\t            _rawSpace = _this$convertWhitespa2.rawSpace;\n\n\t        node.spaces.before = _space;\n\t        node.rawSpaceBefore = _rawSpace;\n\t      }\n\t    } else {\n\t      // descendant combinator\n\t      var _this$convertWhitespa3 = this.convertWhitespaceNodesToSpace(spaceOrDescendantSelectorNodes, true),\n\t          _space2 = _this$convertWhitespa3.space,\n\t          _rawSpace2 = _this$convertWhitespa3.rawSpace;\n\n\t      if (!_rawSpace2) {\n\t        _rawSpace2 = _space2;\n\t      }\n\n\t      var spaces = {};\n\t      var raws = {\n\t        spaces: {}\n\t      };\n\n\t      if (_space2.endsWith(' ') && _rawSpace2.endsWith(' ')) {\n\t        spaces.before = _space2.slice(0, _space2.length - 1);\n\t        raws.spaces.before = _rawSpace2.slice(0, _rawSpace2.length - 1);\n\t      } else if (_space2.startsWith(' ') && _rawSpace2.startsWith(' ')) {\n\t        spaces.after = _space2.slice(1);\n\t        raws.spaces.after = _rawSpace2.slice(1);\n\t      } else {\n\t        raws.value = _rawSpace2;\n\t      }\n\n\t      node = new _combinator[\"default\"]({\n\t        value: ' ',\n\t        source: getTokenSourceSpan(firstToken, this.tokens[this.position - 1]),\n\t        sourceIndex: firstToken[_tokenize.FIELDS.START_POS],\n\t        spaces: spaces,\n\t        raws: raws\n\t      });\n\t    }\n\n\t    if (this.currToken && this.currToken[_tokenize.FIELDS.TYPE] === tokens.space) {\n\t      node.spaces.after = this.optionalSpace(this.content());\n\t      this.position++;\n\t    }\n\n\t    return this.newNode(node);\n\t  };\n\n\t  _proto.comma = function comma() {\n\t    if (this.position === this.tokens.length - 1) {\n\t      this.root.trailingComma = true;\n\t      this.position++;\n\t      return;\n\t    }\n\n\t    this.current._inferEndPosition();\n\n\t    var selector = new _selector[\"default\"]({\n\t      source: {\n\t        start: tokenStart(this.tokens[this.position + 1])\n\t      }\n\t    });\n\t    this.current.parent.append(selector);\n\t    this.current = selector;\n\t    this.position++;\n\t  };\n\n\t  _proto.comment = function comment() {\n\t    var current = this.currToken;\n\t    this.newNode(new _comment[\"default\"]({\n\t      value: this.content(),\n\t      source: getTokenSource(current),\n\t      sourceIndex: current[_tokenize.FIELDS.START_POS]\n\t    }));\n\t    this.position++;\n\t  };\n\n\t  _proto.error = function error(message, opts) {\n\t    throw this.root.error(message, opts);\n\t  };\n\n\t  _proto.missingBackslash = function missingBackslash() {\n\t    return this.error('Expected a backslash preceding the semicolon.', {\n\t      index: this.currToken[_tokenize.FIELDS.START_POS]\n\t    });\n\t  };\n\n\t  _proto.missingParenthesis = function missingParenthesis() {\n\t    return this.expected('opening parenthesis', this.currToken[_tokenize.FIELDS.START_POS]);\n\t  };\n\n\t  _proto.missingSquareBracket = function missingSquareBracket() {\n\t    return this.expected('opening square bracket', this.currToken[_tokenize.FIELDS.START_POS]);\n\t  };\n\n\t  _proto.unexpected = function unexpected() {\n\t    return this.error(\"Unexpected '\" + this.content() + \"'. Escaping special characters with \\\\ may help.\", this.currToken[_tokenize.FIELDS.START_POS]);\n\t  };\n\n\t  _proto.namespace = function namespace() {\n\t    var before = this.prevToken && this.content(this.prevToken) || true;\n\n\t    if (this.nextToken[_tokenize.FIELDS.TYPE] === tokens.word) {\n\t      this.position++;\n\t      return this.word(before);\n\t    } else if (this.nextToken[_tokenize.FIELDS.TYPE] === tokens.asterisk) {\n\t      this.position++;\n\t      return this.universal(before);\n\t    }\n\t  };\n\n\t  _proto.nesting = function nesting() {\n\t    if (this.nextToken) {\n\t      var nextContent = this.content(this.nextToken);\n\n\t      if (nextContent === \"|\") {\n\t        this.position++;\n\t        return;\n\t      }\n\t    }\n\n\t    var current = this.currToken;\n\t    this.newNode(new _nesting[\"default\"]({\n\t      value: this.content(),\n\t      source: getTokenSource(current),\n\t      sourceIndex: current[_tokenize.FIELDS.START_POS]\n\t    }));\n\t    this.position++;\n\t  };\n\n\t  _proto.parentheses = function parentheses() {\n\t    var last = this.current.last;\n\t    var unbalanced = 1;\n\t    this.position++;\n\n\t    if (last && last.type === types$1.PSEUDO) {\n\t      var selector = new _selector[\"default\"]({\n\t        source: {\n\t          start: tokenStart(this.tokens[this.position - 1])\n\t        }\n\t      });\n\t      var cache = this.current;\n\t      last.append(selector);\n\t      this.current = selector;\n\n\t      while (this.position < this.tokens.length && unbalanced) {\n\t        if (this.currToken[_tokenize.FIELDS.TYPE] === tokens.openParenthesis) {\n\t          unbalanced++;\n\t        }\n\n\t        if (this.currToken[_tokenize.FIELDS.TYPE] === tokens.closeParenthesis) {\n\t          unbalanced--;\n\t        }\n\n\t        if (unbalanced) {\n\t          this.parse();\n\t        } else {\n\t          this.current.source.end = tokenEnd(this.currToken);\n\t          this.current.parent.source.end = tokenEnd(this.currToken);\n\t          this.position++;\n\t        }\n\t      }\n\n\t      this.current = cache;\n\t    } else {\n\t      // I think this case should be an error. It's used to implement a basic parse of media queries\n\t      // but I don't think it's a good idea.\n\t      var parenStart = this.currToken;\n\t      var parenValue = \"(\";\n\t      var parenEnd;\n\n\t      while (this.position < this.tokens.length && unbalanced) {\n\t        if (this.currToken[_tokenize.FIELDS.TYPE] === tokens.openParenthesis) {\n\t          unbalanced++;\n\t        }\n\n\t        if (this.currToken[_tokenize.FIELDS.TYPE] === tokens.closeParenthesis) {\n\t          unbalanced--;\n\t        }\n\n\t        parenEnd = this.currToken;\n\t        parenValue += this.parseParenthesisToken(this.currToken);\n\t        this.position++;\n\t      }\n\n\t      if (last) {\n\t        last.appendToPropertyAndEscape(\"value\", parenValue, parenValue);\n\t      } else {\n\t        this.newNode(new _string[\"default\"]({\n\t          value: parenValue,\n\t          source: getSource(parenStart[_tokenize.FIELDS.START_LINE], parenStart[_tokenize.FIELDS.START_COL], parenEnd[_tokenize.FIELDS.END_LINE], parenEnd[_tokenize.FIELDS.END_COL]),\n\t          sourceIndex: parenStart[_tokenize.FIELDS.START_POS]\n\t        }));\n\t      }\n\t    }\n\n\t    if (unbalanced) {\n\t      return this.expected('closing parenthesis', this.currToken[_tokenize.FIELDS.START_POS]);\n\t    }\n\t  };\n\n\t  _proto.pseudo = function pseudo() {\n\t    var _this4 = this;\n\n\t    var pseudoStr = '';\n\t    var startingToken = this.currToken;\n\n\t    while (this.currToken && this.currToken[_tokenize.FIELDS.TYPE] === tokens.colon) {\n\t      pseudoStr += this.content();\n\t      this.position++;\n\t    }\n\n\t    if (!this.currToken) {\n\t      return this.expected(['pseudo-class', 'pseudo-element'], this.position - 1);\n\t    }\n\n\t    if (this.currToken[_tokenize.FIELDS.TYPE] === tokens.word) {\n\t      this.splitWord(false, function (first, length) {\n\t        pseudoStr += first;\n\n\t        _this4.newNode(new _pseudo[\"default\"]({\n\t          value: pseudoStr,\n\t          source: getTokenSourceSpan(startingToken, _this4.currToken),\n\t          sourceIndex: startingToken[_tokenize.FIELDS.START_POS]\n\t        }));\n\n\t        if (length > 1 && _this4.nextToken && _this4.nextToken[_tokenize.FIELDS.TYPE] === tokens.openParenthesis) {\n\t          _this4.error('Misplaced parenthesis.', {\n\t            index: _this4.nextToken[_tokenize.FIELDS.START_POS]\n\t          });\n\t        }\n\t      });\n\t    } else {\n\t      return this.expected(['pseudo-class', 'pseudo-element'], this.currToken[_tokenize.FIELDS.START_POS]);\n\t    }\n\t  };\n\n\t  _proto.space = function space() {\n\t    var content = this.content(); // Handle space before and after the selector\n\n\t    if (this.position === 0 || this.prevToken[_tokenize.FIELDS.TYPE] === tokens.comma || this.prevToken[_tokenize.FIELDS.TYPE] === tokens.openParenthesis || this.current.nodes.every(function (node) {\n\t      return node.type === 'comment';\n\t    })) {\n\t      this.spaces = this.optionalSpace(content);\n\t      this.position++;\n\t    } else if (this.position === this.tokens.length - 1 || this.nextToken[_tokenize.FIELDS.TYPE] === tokens.comma || this.nextToken[_tokenize.FIELDS.TYPE] === tokens.closeParenthesis) {\n\t      this.current.last.spaces.after = this.optionalSpace(content);\n\t      this.position++;\n\t    } else {\n\t      this.combinator();\n\t    }\n\t  };\n\n\t  _proto.string = function string() {\n\t    var current = this.currToken;\n\t    this.newNode(new _string[\"default\"]({\n\t      value: this.content(),\n\t      source: getTokenSource(current),\n\t      sourceIndex: current[_tokenize.FIELDS.START_POS]\n\t    }));\n\t    this.position++;\n\t  };\n\n\t  _proto.universal = function universal(namespace) {\n\t    var nextToken = this.nextToken;\n\n\t    if (nextToken && this.content(nextToken) === '|') {\n\t      this.position++;\n\t      return this.namespace();\n\t    }\n\n\t    var current = this.currToken;\n\t    this.newNode(new _universal[\"default\"]({\n\t      value: this.content(),\n\t      source: getTokenSource(current),\n\t      sourceIndex: current[_tokenize.FIELDS.START_POS]\n\t    }), namespace);\n\t    this.position++;\n\t  };\n\n\t  _proto.splitWord = function splitWord(namespace, firstCallback) {\n\t    var _this5 = this;\n\n\t    var nextToken = this.nextToken;\n\t    var word = this.content();\n\n\t    while (nextToken && ~[tokens.dollar, tokens.caret, tokens.equals, tokens.word].indexOf(nextToken[_tokenize.FIELDS.TYPE])) {\n\t      this.position++;\n\t      var current = this.content();\n\t      word += current;\n\n\t      if (current.lastIndexOf('\\\\') === current.length - 1) {\n\t        var next = this.nextToken;\n\n\t        if (next && next[_tokenize.FIELDS.TYPE] === tokens.space) {\n\t          word += this.requiredSpace(this.content(next));\n\t          this.position++;\n\t        }\n\t      }\n\n\t      nextToken = this.nextToken;\n\t    }\n\n\t    var hasClass = indexesOf(word, '.').filter(function (i) {\n\t      // Allow escaped dot within class name\n\t      var escapedDot = word[i - 1] === '\\\\'; // Allow decimal numbers percent in @keyframes\n\n\t      var isKeyframesPercent = /^\\d+\\.\\d+%$/.test(word);\n\t      return !escapedDot && !isKeyframesPercent;\n\t    });\n\t    var hasId = indexesOf(word, '#').filter(function (i) {\n\t      return word[i - 1] !== '\\\\';\n\t    }); // Eliminate Sass interpolations from the list of id indexes\n\n\t    var interpolations = indexesOf(word, '#{');\n\n\t    if (interpolations.length) {\n\t      hasId = hasId.filter(function (hashIndex) {\n\t        return !~interpolations.indexOf(hashIndex);\n\t      });\n\t    }\n\n\t    var indices = (0, _sortAscending[\"default\"])(uniqs([0].concat(hasClass, hasId)));\n\t    indices.forEach(function (ind, i) {\n\t      var index = indices[i + 1] || word.length;\n\t      var value = word.slice(ind, index);\n\n\t      if (i === 0 && firstCallback) {\n\t        return firstCallback.call(_this5, value, indices.length);\n\t      }\n\n\t      var node;\n\t      var current = _this5.currToken;\n\t      var sourceIndex = current[_tokenize.FIELDS.START_POS] + indices[i];\n\t      var source = getSource(current[1], current[2] + ind, current[3], current[2] + (index - 1));\n\n\t      if (~hasClass.indexOf(ind)) {\n\t        var classNameOpts = {\n\t          value: value.slice(1),\n\t          source: source,\n\t          sourceIndex: sourceIndex\n\t        };\n\t        node = new _className[\"default\"](unescapeProp(classNameOpts, \"value\"));\n\t      } else if (~hasId.indexOf(ind)) {\n\t        var idOpts = {\n\t          value: value.slice(1),\n\t          source: source,\n\t          sourceIndex: sourceIndex\n\t        };\n\t        node = new _id[\"default\"](unescapeProp(idOpts, \"value\"));\n\t      } else {\n\t        var tagOpts = {\n\t          value: value,\n\t          source: source,\n\t          sourceIndex: sourceIndex\n\t        };\n\t        unescapeProp(tagOpts, \"value\");\n\t        node = new _tag[\"default\"](tagOpts);\n\t      }\n\n\t      _this5.newNode(node, namespace); // Ensure that the namespace is used only once\n\n\n\t      namespace = null;\n\t    });\n\t    this.position++;\n\t  };\n\n\t  _proto.word = function word(namespace) {\n\t    var nextToken = this.nextToken;\n\n\t    if (nextToken && this.content(nextToken) === '|') {\n\t      this.position++;\n\t      return this.namespace();\n\t    }\n\n\t    return this.splitWord(namespace);\n\t  };\n\n\t  _proto.loop = function loop() {\n\t    while (this.position < this.tokens.length) {\n\t      this.parse(true);\n\t    }\n\n\t    this.current._inferEndPosition();\n\n\t    return this.root;\n\t  };\n\n\t  _proto.parse = function parse(throwOnParenthesis) {\n\t    switch (this.currToken[_tokenize.FIELDS.TYPE]) {\n\t      case tokens.space:\n\t        this.space();\n\t        break;\n\n\t      case tokens.comment:\n\t        this.comment();\n\t        break;\n\n\t      case tokens.openParenthesis:\n\t        this.parentheses();\n\t        break;\n\n\t      case tokens.closeParenthesis:\n\t        if (throwOnParenthesis) {\n\t          this.missingParenthesis();\n\t        }\n\n\t        break;\n\n\t      case tokens.openSquare:\n\t        this.attribute();\n\t        break;\n\n\t      case tokens.dollar:\n\t      case tokens.caret:\n\t      case tokens.equals:\n\t      case tokens.word:\n\t        this.word();\n\t        break;\n\n\t      case tokens.colon:\n\t        this.pseudo();\n\t        break;\n\n\t      case tokens.comma:\n\t        this.comma();\n\t        break;\n\n\t      case tokens.asterisk:\n\t        this.universal();\n\t        break;\n\n\t      case tokens.ampersand:\n\t        this.nesting();\n\t        break;\n\n\t      case tokens.slash:\n\t      case tokens.combinator:\n\t        this.combinator();\n\t        break;\n\n\t      case tokens.str:\n\t        this.string();\n\t        break;\n\t      // These cases throw; no break needed.\n\n\t      case tokens.closeSquare:\n\t        this.missingSquareBracket();\n\n\t      case tokens.semicolon:\n\t        this.missingBackslash();\n\n\t      default:\n\t        this.unexpected();\n\t    }\n\t  }\n\t  /**\n\t   * Helpers\n\t   */\n\t  ;\n\n\t  _proto.expected = function expected(description, index, found) {\n\t    if (Array.isArray(description)) {\n\t      var last = description.pop();\n\t      description = description.join(', ') + \" or \" + last;\n\t    }\n\n\t    var an = /^[aeiou]/.test(description[0]) ? 'an' : 'a';\n\n\t    if (!found) {\n\t      return this.error(\"Expected \" + an + \" \" + description + \".\", {\n\t        index: index\n\t      });\n\t    }\n\n\t    return this.error(\"Expected \" + an + \" \" + description + \", found \\\"\" + found + \"\\\" instead.\", {\n\t      index: index\n\t    });\n\t  };\n\n\t  _proto.requiredSpace = function requiredSpace(space) {\n\t    return this.options.lossy ? ' ' : space;\n\t  };\n\n\t  _proto.optionalSpace = function optionalSpace(space) {\n\t    return this.options.lossy ? '' : space;\n\t  };\n\n\t  _proto.lossySpace = function lossySpace(space, required) {\n\t    if (this.options.lossy) {\n\t      return required ? ' ' : '';\n\t    } else {\n\t      return space;\n\t    }\n\t  };\n\n\t  _proto.parseParenthesisToken = function parseParenthesisToken(token) {\n\t    var content = this.content(token);\n\n\t    if (token[_tokenize.FIELDS.TYPE] === tokens.space) {\n\t      return this.requiredSpace(content);\n\t    } else {\n\t      return content;\n\t    }\n\t  };\n\n\t  _proto.newNode = function newNode(node, namespace) {\n\t    if (namespace) {\n\t      if (/^ +$/.test(namespace)) {\n\t        if (!this.options.lossy) {\n\t          this.spaces = (this.spaces || '') + namespace;\n\t        }\n\n\t        namespace = true;\n\t      }\n\n\t      node.namespace = namespace;\n\t      unescapeProp(node, \"namespace\");\n\t    }\n\n\t    if (this.spaces) {\n\t      node.spaces.before = this.spaces;\n\t      this.spaces = '';\n\t    }\n\n\t    return this.current.append(node);\n\t  };\n\n\t  _proto.content = function content(token) {\n\t    if (token === void 0) {\n\t      token = this.currToken;\n\t    }\n\n\t    return this.css.slice(token[_tokenize.FIELDS.START_POS], token[_tokenize.FIELDS.END_POS]);\n\t  };\n\n\t  /**\n\t   * returns the index of the next non-whitespace, non-comment token.\n\t   * returns -1 if no meaningful token is found.\n\t   */\n\t  _proto.locateNextMeaningfulToken = function locateNextMeaningfulToken(startPosition) {\n\t    if (startPosition === void 0) {\n\t      startPosition = this.position + 1;\n\t    }\n\n\t    var searchPosition = startPosition;\n\n\t    while (searchPosition < this.tokens.length) {\n\t      if (WHITESPACE_EQUIV_TOKENS[this.tokens[searchPosition][_tokenize.FIELDS.TYPE]]) {\n\t        searchPosition++;\n\t        continue;\n\t      } else {\n\t        return searchPosition;\n\t      }\n\t    }\n\n\t    return -1;\n\t  };\n\n\t  _createClass(Parser, [{\n\t    key: \"currToken\",\n\t    get: function get() {\n\t      return this.tokens[this.position];\n\t    }\n\t  }, {\n\t    key: \"nextToken\",\n\t    get: function get() {\n\t      return this.tokens[this.position + 1];\n\t    }\n\t  }, {\n\t    key: \"prevToken\",\n\t    get: function get() {\n\t      return this.tokens[this.position - 1];\n\t    }\n\t  }]);\n\n\t  return Parser;\n\t}();\n\n\texports[\"default\"] = Parser;\n\tmodule.exports = exports.default;\n} (parser$1, parser$1.exports));\n\n(function (module, exports) {\n\n\texports.__esModule = true;\n\texports[\"default\"] = void 0;\n\n\tvar _parser = _interopRequireDefault(parser$1.exports);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\n\tvar Processor = /*#__PURE__*/function () {\n\t  function Processor(func, options) {\n\t    this.func = func || function noop() {};\n\n\t    this.funcRes = null;\n\t    this.options = options;\n\t  }\n\n\t  var _proto = Processor.prototype;\n\n\t  _proto._shouldUpdateSelector = function _shouldUpdateSelector(rule, options) {\n\t    if (options === void 0) {\n\t      options = {};\n\t    }\n\n\t    var merged = Object.assign({}, this.options, options);\n\n\t    if (merged.updateSelector === false) {\n\t      return false;\n\t    } else {\n\t      return typeof rule !== \"string\";\n\t    }\n\t  };\n\n\t  _proto._isLossy = function _isLossy(options) {\n\t    if (options === void 0) {\n\t      options = {};\n\t    }\n\n\t    var merged = Object.assign({}, this.options, options);\n\n\t    if (merged.lossless === false) {\n\t      return true;\n\t    } else {\n\t      return false;\n\t    }\n\t  };\n\n\t  _proto._root = function _root(rule, options) {\n\t    if (options === void 0) {\n\t      options = {};\n\t    }\n\n\t    var parser = new _parser[\"default\"](rule, this._parseOptions(options));\n\t    return parser.root;\n\t  };\n\n\t  _proto._parseOptions = function _parseOptions(options) {\n\t    return {\n\t      lossy: this._isLossy(options)\n\t    };\n\t  };\n\n\t  _proto._run = function _run(rule, options) {\n\t    var _this = this;\n\n\t    if (options === void 0) {\n\t      options = {};\n\t    }\n\n\t    return new Promise(function (resolve, reject) {\n\t      try {\n\t        var root = _this._root(rule, options);\n\n\t        Promise.resolve(_this.func(root)).then(function (transform) {\n\t          var string = undefined;\n\n\t          if (_this._shouldUpdateSelector(rule, options)) {\n\t            string = root.toString();\n\t            rule.selector = string;\n\t          }\n\n\t          return {\n\t            transform: transform,\n\t            root: root,\n\t            string: string\n\t          };\n\t        }).then(resolve, reject);\n\t      } catch (e) {\n\t        reject(e);\n\t        return;\n\t      }\n\t    });\n\t  };\n\n\t  _proto._runSync = function _runSync(rule, options) {\n\t    if (options === void 0) {\n\t      options = {};\n\t    }\n\n\t    var root = this._root(rule, options);\n\n\t    var transform = this.func(root);\n\n\t    if (transform && typeof transform.then === \"function\") {\n\t      throw new Error(\"Selector processor returned a promise to a synchronous call.\");\n\t    }\n\n\t    var string = undefined;\n\n\t    if (options.updateSelector && typeof rule !== \"string\") {\n\t      string = root.toString();\n\t      rule.selector = string;\n\t    }\n\n\t    return {\n\t      transform: transform,\n\t      root: root,\n\t      string: string\n\t    };\n\t  }\n\t  /**\n\t   * Process rule into a selector AST.\n\t   *\n\t   * @param rule {postcss.Rule | string} The css selector to be processed\n\t   * @param options The options for processing\n\t   * @returns {Promise<parser.Root>} The AST of the selector after processing it.\n\t   */\n\t  ;\n\n\t  _proto.ast = function ast(rule, options) {\n\t    return this._run(rule, options).then(function (result) {\n\t      return result.root;\n\t    });\n\t  }\n\t  /**\n\t   * Process rule into a selector AST synchronously.\n\t   *\n\t   * @param rule {postcss.Rule | string} The css selector to be processed\n\t   * @param options The options for processing\n\t   * @returns {parser.Root} The AST of the selector after processing it.\n\t   */\n\t  ;\n\n\t  _proto.astSync = function astSync(rule, options) {\n\t    return this._runSync(rule, options).root;\n\t  }\n\t  /**\n\t   * Process a selector into a transformed value asynchronously\n\t   *\n\t   * @param rule {postcss.Rule | string} The css selector to be processed\n\t   * @param options The options for processing\n\t   * @returns {Promise<any>} The value returned by the processor.\n\t   */\n\t  ;\n\n\t  _proto.transform = function transform(rule, options) {\n\t    return this._run(rule, options).then(function (result) {\n\t      return result.transform;\n\t    });\n\t  }\n\t  /**\n\t   * Process a selector into a transformed value synchronously.\n\t   *\n\t   * @param rule {postcss.Rule | string} The css selector to be processed\n\t   * @param options The options for processing\n\t   * @returns {any} The value returned by the processor.\n\t   */\n\t  ;\n\n\t  _proto.transformSync = function transformSync(rule, options) {\n\t    return this._runSync(rule, options).transform;\n\t  }\n\t  /**\n\t   * Process a selector into a new selector string asynchronously.\n\t   *\n\t   * @param rule {postcss.Rule | string} The css selector to be processed\n\t   * @param options The options for processing\n\t   * @returns {string} the selector after processing.\n\t   */\n\t  ;\n\n\t  _proto.process = function process(rule, options) {\n\t    return this._run(rule, options).then(function (result) {\n\t      return result.string || result.root.toString();\n\t    });\n\t  }\n\t  /**\n\t   * Process a selector into a new selector string synchronously.\n\t   *\n\t   * @param rule {postcss.Rule | string} The css selector to be processed\n\t   * @param options The options for processing\n\t   * @returns {string} the selector after processing.\n\t   */\n\t  ;\n\n\t  _proto.processSync = function processSync(rule, options) {\n\t    var result = this._runSync(rule, options);\n\n\t    return result.string || result.root.toString();\n\t  };\n\n\t  return Processor;\n\t}();\n\n\texports[\"default\"] = Processor;\n\tmodule.exports = exports.default;\n} (processor, processor.exports));\n\nvar selectors = {};\n\nvar constructors = {};\n\nconstructors.__esModule = true;\nconstructors.universal = constructors.tag = constructors.string = constructors.selector = constructors.root = constructors.pseudo = constructors.nesting = constructors.id = constructors.comment = constructors.combinator = constructors.className = constructors.attribute = void 0;\n\nvar _attribute = _interopRequireDefault$5(attribute$1);\n\nvar _className = _interopRequireDefault$5(className$1.exports);\n\nvar _combinator = _interopRequireDefault$5(combinator$2.exports);\n\nvar _comment = _interopRequireDefault$5(comment$2.exports);\n\nvar _id = _interopRequireDefault$5(id$1.exports);\n\nvar _nesting = _interopRequireDefault$5(nesting$1.exports);\n\nvar _pseudo = _interopRequireDefault$5(pseudo$1.exports);\n\nvar _root = _interopRequireDefault$5(root$2.exports);\n\nvar _selector = _interopRequireDefault$5(selector$1.exports);\n\nvar _string = _interopRequireDefault$5(string$1.exports);\n\nvar _tag = _interopRequireDefault$5(tag$1.exports);\n\nvar _universal = _interopRequireDefault$5(universal$1.exports);\n\nfunction _interopRequireDefault$5(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nvar attribute = function attribute(opts) {\n  return new _attribute[\"default\"](opts);\n};\n\nconstructors.attribute = attribute;\n\nvar className = function className(opts) {\n  return new _className[\"default\"](opts);\n};\n\nconstructors.className = className;\n\nvar combinator = function combinator(opts) {\n  return new _combinator[\"default\"](opts);\n};\n\nconstructors.combinator = combinator;\n\nvar comment = function comment(opts) {\n  return new _comment[\"default\"](opts);\n};\n\nconstructors.comment = comment;\n\nvar id = function id(opts) {\n  return new _id[\"default\"](opts);\n};\n\nconstructors.id = id;\n\nvar nesting = function nesting(opts) {\n  return new _nesting[\"default\"](opts);\n};\n\nconstructors.nesting = nesting;\n\nvar pseudo = function pseudo(opts) {\n  return new _pseudo[\"default\"](opts);\n};\n\nconstructors.pseudo = pseudo;\n\nvar root$1 = function root(opts) {\n  return new _root[\"default\"](opts);\n};\n\nconstructors.root = root$1;\n\nvar selector = function selector(opts) {\n  return new _selector[\"default\"](opts);\n};\n\nconstructors.selector = selector;\n\nvar string = function string(opts) {\n  return new _string[\"default\"](opts);\n};\n\nconstructors.string = string;\n\nvar tag = function tag(opts) {\n  return new _tag[\"default\"](opts);\n};\n\nconstructors.tag = tag;\n\nvar universal = function universal(opts) {\n  return new _universal[\"default\"](opts);\n};\n\nconstructors.universal = universal;\n\nvar guards = {};\n\nguards.__esModule = true;\nguards.isNode = isNode;\nguards.isPseudoElement = isPseudoElement;\nguards.isPseudoClass = isPseudoClass;\nguards.isContainer = isContainer;\nguards.isNamespace = isNamespace;\nguards.isUniversal = guards.isTag = guards.isString = guards.isSelector = guards.isRoot = guards.isPseudo = guards.isNesting = guards.isIdentifier = guards.isComment = guards.isCombinator = guards.isClassName = guards.isAttribute = void 0;\n\nvar _types = types;\n\nvar _IS_TYPE;\n\nvar IS_TYPE = (_IS_TYPE = {}, _IS_TYPE[_types.ATTRIBUTE] = true, _IS_TYPE[_types.CLASS] = true, _IS_TYPE[_types.COMBINATOR] = true, _IS_TYPE[_types.COMMENT] = true, _IS_TYPE[_types.ID] = true, _IS_TYPE[_types.NESTING] = true, _IS_TYPE[_types.PSEUDO] = true, _IS_TYPE[_types.ROOT] = true, _IS_TYPE[_types.SELECTOR] = true, _IS_TYPE[_types.STRING] = true, _IS_TYPE[_types.TAG] = true, _IS_TYPE[_types.UNIVERSAL] = true, _IS_TYPE);\n\nfunction isNode(node) {\n  return typeof node === \"object\" && IS_TYPE[node.type];\n}\n\nfunction isNodeType(type, node) {\n  return isNode(node) && node.type === type;\n}\n\nvar isAttribute = isNodeType.bind(null, _types.ATTRIBUTE);\nguards.isAttribute = isAttribute;\nvar isClassName = isNodeType.bind(null, _types.CLASS);\nguards.isClassName = isClassName;\nvar isCombinator = isNodeType.bind(null, _types.COMBINATOR);\nguards.isCombinator = isCombinator;\nvar isComment = isNodeType.bind(null, _types.COMMENT);\nguards.isComment = isComment;\nvar isIdentifier = isNodeType.bind(null, _types.ID);\nguards.isIdentifier = isIdentifier;\nvar isNesting = isNodeType.bind(null, _types.NESTING);\nguards.isNesting = isNesting;\nvar isPseudo = isNodeType.bind(null, _types.PSEUDO);\nguards.isPseudo = isPseudo;\nvar isRoot = isNodeType.bind(null, _types.ROOT);\nguards.isRoot = isRoot;\nvar isSelector = isNodeType.bind(null, _types.SELECTOR);\nguards.isSelector = isSelector;\nvar isString = isNodeType.bind(null, _types.STRING);\nguards.isString = isString;\nvar isTag = isNodeType.bind(null, _types.TAG);\nguards.isTag = isTag;\nvar isUniversal = isNodeType.bind(null, _types.UNIVERSAL);\nguards.isUniversal = isUniversal;\n\nfunction isPseudoElement(node) {\n  return isPseudo(node) && node.value && (node.value.startsWith(\"::\") || node.value.toLowerCase() === \":before\" || node.value.toLowerCase() === \":after\");\n}\n\nfunction isPseudoClass(node) {\n  return isPseudo(node) && !isPseudoElement(node);\n}\n\nfunction isContainer(node) {\n  return !!(isNode(node) && node.walk);\n}\n\nfunction isNamespace(node) {\n  return isAttribute(node) || isTag(node);\n}\n\n(function (exports) {\n\n\texports.__esModule = true;\n\n\tvar _types = types;\n\n\tObject.keys(_types).forEach(function (key) {\n\t  if (key === \"default\" || key === \"__esModule\") return;\n\t  if (key in exports && exports[key] === _types[key]) return;\n\t  exports[key] = _types[key];\n\t});\n\n\tvar _constructors = constructors;\n\n\tObject.keys(_constructors).forEach(function (key) {\n\t  if (key === \"default\" || key === \"__esModule\") return;\n\t  if (key in exports && exports[key] === _constructors[key]) return;\n\t  exports[key] = _constructors[key];\n\t});\n\n\tvar _guards = guards;\n\n\tObject.keys(_guards).forEach(function (key) {\n\t  if (key === \"default\" || key === \"__esModule\") return;\n\t  if (key in exports && exports[key] === _guards[key]) return;\n\t  exports[key] = _guards[key];\n\t});\n} (selectors));\n\n(function (module, exports) {\n\n\texports.__esModule = true;\n\texports[\"default\"] = void 0;\n\n\tvar _processor = _interopRequireDefault(processor.exports);\n\n\tvar selectors$1 = _interopRequireWildcard(selectors);\n\n\tfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }\n\n\tfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") { return { \"default\": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (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; }\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\n\tvar parser = function parser(processor) {\n\t  return new _processor[\"default\"](processor);\n\t};\n\n\tObject.assign(parser, selectors$1);\n\tdelete parser.__esModule;\n\tvar _default = parser;\n\texports[\"default\"] = _default;\n\tmodule.exports = exports.default;\n} (dist, dist.exports));\n\nvar selectorParser$2 = /*@__PURE__*/getDefaultExportFromCjs(dist.exports);\n\nconst animationNameRE = /^(-\\w+-)?animation-name$/;\nconst animationRE = /^(-\\w+-)?animation$/;\nconst scopedPlugin = (id = '') => {\n    const keyframes = Object.create(null);\n    const shortId = id.replace(/^data-v-/, '');\n    return {\n        postcssPlugin: 'vue-sfc-scoped',\n        Rule(rule) {\n            processRule(id, rule);\n        },\n        AtRule(node) {\n            if (/-?keyframes$/.test(node.name) &&\n                !node.params.endsWith(`-${shortId}`)) {\n                // register keyframes\n                keyframes[node.params] = node.params = node.params + '-' + shortId;\n            }\n        },\n        OnceExit(root) {\n            if (Object.keys(keyframes).length) {\n                // If keyframes are found in this <style>, find and rewrite animation names\n                // in declarations.\n                // Caveat: this only works for keyframes and animation rules in the same\n                // <style> element.\n                // individual animation-name declaration\n                root.walkDecls(decl => {\n                    if (animationNameRE.test(decl.prop)) {\n                        decl.value = decl.value\n                            .split(',')\n                            .map(v => keyframes[v.trim()] || v.trim())\n                            .join(',');\n                    }\n                    // shorthand\n                    if (animationRE.test(decl.prop)) {\n                        decl.value = decl.value\n                            .split(',')\n                            .map(v => {\n                            const vals = v.trim().split(/\\s+/);\n                            const i = vals.findIndex(val => keyframes[val]);\n                            if (i !== -1) {\n                                vals.splice(i, 1, keyframes[vals[i]]);\n                                return vals.join(' ');\n                            }\n                            else {\n                                return v;\n                            }\n                        })\n                            .join(',');\n                    }\n                });\n            }\n        }\n    };\n};\nconst processedRules = new WeakSet();\nfunction processRule(id, rule) {\n    if (processedRules.has(rule) ||\n        (rule.parent &&\n            rule.parent.type === 'atrule' &&\n            /-?keyframes$/.test(rule.parent.name))) {\n        return;\n    }\n    processedRules.add(rule);\n    rule.selector = selectorParser$2(selectorRoot => {\n        selectorRoot.each(selector => {\n            rewriteSelector(id, selector, selectorRoot);\n        });\n    }).processSync(rule.selector);\n}\nfunction rewriteSelector(id, selector, selectorRoot, slotted = false) {\n    let node = null;\n    let shouldInject = true;\n    // find the last child node to insert attribute selector\n    selector.each(n => {\n        // DEPRECATED \">>>\" and \"/deep/\" combinator\n        if (n.type === 'combinator' &&\n            (n.value === '>>>' || n.value === '/deep/')) {\n            n.value = ' ';\n            n.spaces.before = n.spaces.after = '';\n            warn(`the >>> and /deep/ combinators have been deprecated. ` +\n                `Use :deep() instead.`);\n            return false;\n        }\n        if (n.type === 'pseudo') {\n            const { value } = n;\n            // deep: inject [id] attribute at the node before the ::v-deep\n            // combinator.\n            if (value === ':deep' || value === '::v-deep') {\n                if (n.nodes.length) {\n                    // .foo ::v-deep(.bar) -> .foo[xxxxxxx] .bar\n                    // replace the current node with ::v-deep's inner selector\n                    let last = n;\n                    n.nodes[0].each(ss => {\n                        selector.insertAfter(last, ss);\n                        last = ss;\n                    });\n                    // insert a space combinator before if it doesn't already have one\n                    const prev = selector.at(selector.index(n) - 1);\n                    if (!prev || !isSpaceCombinator(prev)) {\n                        selector.insertAfter(n, selectorParser$2.combinator({\n                            value: ' '\n                        }));\n                    }\n                    selector.removeChild(n);\n                }\n                else {\n                    // DEPRECATED usage\n                    // .foo ::v-deep .bar -> .foo[xxxxxxx] .bar\n                    warn(`::v-deep usage as a combinator has ` +\n                        `been deprecated. Use :deep(<inner-selector>) instead.`);\n                    const prev = selector.at(selector.index(n) - 1);\n                    if (prev && isSpaceCombinator(prev)) {\n                        selector.removeChild(prev);\n                    }\n                    selector.removeChild(n);\n                }\n                return false;\n            }\n            // slot: use selector inside `::v-slotted` and inject [id + '-s']\n            // instead.\n            // ::v-slotted(.foo) -> .foo[xxxxxxx-s]\n            if (value === ':slotted' || value === '::v-slotted') {\n                rewriteSelector(id, n.nodes[0], selectorRoot, true /* slotted */);\n                let last = n;\n                n.nodes[0].each(ss => {\n                    selector.insertAfter(last, ss);\n                    last = ss;\n                });\n                // selector.insertAfter(n, n.nodes[0])\n                selector.removeChild(n);\n                // since slotted attribute already scopes the selector there's no\n                // need for the non-slot attribute.\n                shouldInject = false;\n                return false;\n            }\n            // global: replace with inner selector and do not inject [id].\n            // ::v-global(.foo) -> .foo\n            if (value === ':global' || value === '::v-global') {\n                selectorRoot.insertAfter(selector, n.nodes[0]);\n                selectorRoot.removeChild(selector);\n                return false;\n            }\n        }\n        if (n.type !== 'pseudo' && n.type !== 'combinator') {\n            node = n;\n        }\n    });\n    if (node) {\n        node.spaces.after = '';\n    }\n    else {\n        // For deep selectors & standalone pseudo selectors,\n        // the attribute selectors are prepended rather than appended.\n        // So all leading spaces must be eliminated to avoid problems.\n        selector.first.spaces.before = '';\n    }\n    if (shouldInject) {\n        const idToAdd = slotted ? id + '-s' : id;\n        selector.insertAfter(\n        // If node is null it means we need to inject [id] at the start\n        // insertAfter can handle `null` here\n        node, selectorParser$2.attribute({\n            attribute: idToAdd,\n            value: idToAdd,\n            raws: {},\n            quoteMark: `\"`\n        }));\n    }\n}\nfunction isSpaceCombinator(node) {\n    return node.type === 'combinator' && /^\\s+$/.test(node.value);\n}\nscopedPlugin.postcss = true;\nvar scopedPlugin$1 = scopedPlugin;\n\nvar sourceMap = require$$0$2;\nvar SourceMapConsumer = sourceMap.SourceMapConsumer;\nvar SourceMapGenerator = sourceMap.SourceMapGenerator;\n\nvar mergeSourceMap = merge;\n\n/**\n * Merge old source map and new source map and return merged.\n * If old or new source map value is falsy, return another one as it is.\n *\n * @param {object|string} [oldMap] old source map object\n * @param {object|string} [newmap] new source map object\n * @return {object|undefined} merged source map object, or undefined when both old and new source map are undefined\n */\nfunction merge(oldMap, newMap) {\n  if (!oldMap) return newMap\n  if (!newMap) return oldMap\n\n  var oldMapConsumer = new SourceMapConsumer(oldMap);\n  var newMapConsumer = new SourceMapConsumer(newMap);\n  var mergedMapGenerator = new SourceMapGenerator();\n\n  // iterate on new map and overwrite original position of new map with one of old map\n  newMapConsumer.eachMapping(function(m) {\n    // pass when `originalLine` is null.\n    // It occurs in case that the node does not have origin in original code.\n    if (m.originalLine == null) return\n\n    var origPosInOldMap = oldMapConsumer.originalPositionFor({\n      line: m.originalLine,\n      column: m.originalColumn\n    });\n\n    if (origPosInOldMap.source == null) return\n\n    mergedMapGenerator.addMapping({\n      original: {\n        line: origPosInOldMap.line,\n        column: origPosInOldMap.column\n      },\n      generated: {\n        line: m.generatedLine,\n        column: m.generatedColumn\n      },\n      source: origPosInOldMap.source,\n      name: origPosInOldMap.name\n    });\n  });\n\n  var consumers = [oldMapConsumer, newMapConsumer];\n  consumers.forEach(function(consumer) {\n    consumer.sources.forEach(function(sourceFile) {\n      mergedMapGenerator._sources.add(sourceFile);\n      var sourceContent = consumer.sourceContentFor(sourceFile);\n      if (sourceContent != null) {\n        mergedMapGenerator.setSourceContent(sourceFile, sourceContent);\n      }\n    });\n  });\n\n  mergedMapGenerator._sourceRoot = oldMap.sourceRoot;\n  mergedMapGenerator._file = oldMap.file;\n\n  return JSON.parse(mergedMapGenerator.toString())\n}\n\nvar merge$1 = mergeSourceMap;\n\n// .scss/.sass processor\nconst scss = (source, map, options, load = require) => {\n    const nodeSass = load('sass');\n    const finalOptions = {\n        ...options,\n        data: getSource(source, options.filename, options.additionalData),\n        file: options.filename,\n        outFile: options.filename,\n        sourceMap: !!map\n    };\n    try {\n        const result = nodeSass.renderSync(finalOptions);\n        const dependencies = result.stats.includedFiles;\n        if (map) {\n            return {\n                code: result.css.toString(),\n                map: merge$1(map, JSON.parse(result.map.toString())),\n                errors: [],\n                dependencies\n            };\n        }\n        return { code: result.css.toString(), errors: [], dependencies };\n    }\n    catch (e) {\n        return { code: '', errors: [e], dependencies: [] };\n    }\n};\nconst sass = (source, map, options, load) => scss(source, map, {\n    ...options,\n    indentedSyntax: true\n}, load);\n// .less\nconst less = (source, map, options, load = require) => {\n    const nodeLess = load('less');\n    let result;\n    let error = null;\n    nodeLess.render(getSource(source, options.filename, options.additionalData), { ...options, syncImport: true }, (err, output) => {\n        error = err;\n        result = output;\n    });\n    if (error)\n        return { code: '', errors: [error], dependencies: [] };\n    const dependencies = result.imports;\n    if (map) {\n        return {\n            code: result.css.toString(),\n            map: merge$1(map, result.map),\n            errors: [],\n            dependencies: dependencies\n        };\n    }\n    return {\n        code: result.css.toString(),\n        errors: [],\n        dependencies: dependencies\n    };\n};\n// .styl\nconst styl = (source, map, options, load = require) => {\n    const nodeStylus = load('stylus');\n    try {\n        const ref = nodeStylus(source);\n        Object.keys(options).forEach(key => ref.set(key, options[key]));\n        if (map)\n            ref.set('sourcemap', { inline: false, comment: false });\n        const result = ref.render();\n        const dependencies = ref.deps();\n        if (map) {\n            return {\n                code: result,\n                map: merge$1(map, ref.sourcemap),\n                errors: [],\n                dependencies\n            };\n        }\n        return { code: result, errors: [], dependencies };\n    }\n    catch (e) {\n        return { code: '', errors: [e], dependencies: [] };\n    }\n};\nfunction getSource(source, filename, additionalData) {\n    if (!additionalData)\n        return source;\n    if (shared.isFunction(additionalData)) {\n        return additionalData(source, filename);\n    }\n    return additionalData + source;\n}\nconst processors = {\n    less,\n    sass,\n    scss,\n    styl,\n    stylus: styl\n};\n\nvar build = {exports: {}};\n\n/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match words composed of alphanumeric characters. */\nvar reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n/** Used to match Latin Unicode letters (excluding mathematical operators). */\nvar reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n    rsComboMarksRange = '\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe23',\n    rsComboSymbolsRange = '\\\\u20d0-\\\\u20f0',\n    rsDingbatRange = '\\\\u2700-\\\\u27bf',\n    rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n    rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n    rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n    rsPunctuationRange = '\\\\u2000-\\\\u206f',\n    rsSpaceRange = ' \\\\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',\n    rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n    rsVarRange = '\\\\ufe0e\\\\ufe0f',\n    rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n/** Used to compose unicode capture groups. */\nvar rsApos = \"['\\u2019]\",\n    rsAstral = '[' + rsAstralRange + ']',\n    rsBreak = '[' + rsBreakRange + ']',\n    rsCombo = '[' + rsComboMarksRange + rsComboSymbolsRange + ']',\n    rsDigits = '\\\\d+',\n    rsDingbat = '[' + rsDingbatRange + ']',\n    rsLower = '[' + rsLowerRange + ']',\n    rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n    rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n    rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n    rsNonAstral = '[^' + rsAstralRange + ']',\n    rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n    rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n    rsUpper = '[' + rsUpperRange + ']',\n    rsZWJ = '\\\\u200d';\n\n/** Used to compose unicode regexes. */\nvar rsLowerMisc = '(?:' + rsLower + '|' + rsMisc + ')',\n    rsUpperMisc = '(?:' + rsUpper + '|' + rsMisc + ')',\n    rsOptLowerContr = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n    rsOptUpperContr = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n    reOptMod = rsModifier + '?',\n    rsOptVar = '[' + rsVarRange + ']?',\n    rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n    rsSeq = rsOptVar + reOptMod + rsOptJoin,\n    rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,\n    rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n/** Used to match apostrophes. */\nvar reApos = RegExp(rsApos, 'g');\n\n/**\n * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n */\nvar reComboMark = RegExp(rsCombo, 'g');\n\n/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\nvar reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n/** Used to match complex or compound words. */\nvar reUnicodeWord = RegExp([\n  rsUpper + '?' + rsLower + '+' + rsOptLowerContr + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n  rsUpperMisc + '+' + rsOptUpperContr + '(?=' + [rsBreak, rsUpper + rsLowerMisc, '$'].join('|') + ')',\n  rsUpper + '?' + rsLowerMisc + '+' + rsOptLowerContr,\n  rsUpper + '+' + rsOptUpperContr,\n  rsDigits,\n  rsEmoji\n].join('|'), 'g');\n\n/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\nvar reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange  + rsComboMarksRange + rsComboSymbolsRange + rsVarRange + ']');\n\n/** Used to detect strings that need a more robust regexp to match words. */\nvar reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2,}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\n\n/** Used to map Latin Unicode letters to basic Latin letters. */\nvar deburredLetters = {\n  // Latin-1 Supplement block.\n  '\\xc0': 'A',  '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n  '\\xe0': 'a',  '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n  '\\xc7': 'C',  '\\xe7': 'c',\n  '\\xd0': 'D',  '\\xf0': 'd',\n  '\\xc8': 'E',  '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n  '\\xe8': 'e',  '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n  '\\xcc': 'I',  '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n  '\\xec': 'i',  '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n  '\\xd1': 'N',  '\\xf1': 'n',\n  '\\xd2': 'O',  '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n  '\\xf2': 'o',  '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n  '\\xd9': 'U',  '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n  '\\xf9': 'u',  '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n  '\\xdd': 'Y',  '\\xfd': 'y', '\\xff': 'y',\n  '\\xc6': 'Ae', '\\xe6': 'ae',\n  '\\xde': 'Th', '\\xfe': 'th',\n  '\\xdf': 'ss',\n  // Latin Extended-A block.\n  '\\u0100': 'A',  '\\u0102': 'A', '\\u0104': 'A',\n  '\\u0101': 'a',  '\\u0103': 'a', '\\u0105': 'a',\n  '\\u0106': 'C',  '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n  '\\u0107': 'c',  '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n  '\\u010e': 'D',  '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n  '\\u0112': 'E',  '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n  '\\u0113': 'e',  '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n  '\\u011c': 'G',  '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n  '\\u011d': 'g',  '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n  '\\u0124': 'H',  '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n  '\\u0128': 'I',  '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n  '\\u0129': 'i',  '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n  '\\u0134': 'J',  '\\u0135': 'j',\n  '\\u0136': 'K',  '\\u0137': 'k', '\\u0138': 'k',\n  '\\u0139': 'L',  '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n  '\\u013a': 'l',  '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n  '\\u0143': 'N',  '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n  '\\u0144': 'n',  '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n  '\\u014c': 'O',  '\\u014e': 'O', '\\u0150': 'O',\n  '\\u014d': 'o',  '\\u014f': 'o', '\\u0151': 'o',\n  '\\u0154': 'R',  '\\u0156': 'R', '\\u0158': 'R',\n  '\\u0155': 'r',  '\\u0157': 'r', '\\u0159': 'r',\n  '\\u015a': 'S',  '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n  '\\u015b': 's',  '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n  '\\u0162': 'T',  '\\u0164': 'T', '\\u0166': 'T',\n  '\\u0163': 't',  '\\u0165': 't', '\\u0167': 't',\n  '\\u0168': 'U',  '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n  '\\u0169': 'u',  '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n  '\\u0174': 'W',  '\\u0175': 'w',\n  '\\u0176': 'Y',  '\\u0177': 'y', '\\u0178': 'Y',\n  '\\u0179': 'Z',  '\\u017b': 'Z', '\\u017d': 'Z',\n  '\\u017a': 'z',  '\\u017c': 'z', '\\u017e': 'z',\n  '\\u0132': 'IJ', '\\u0133': 'ij',\n  '\\u0152': 'Oe', '\\u0153': 'oe',\n  '\\u0149': \"'n\", '\\u017f': 'ss'\n};\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof commonjsGlobal == 'object' && commonjsGlobal && commonjsGlobal.Object === Object && commonjsGlobal;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n *  the initial value.\n * @returns {*} Returns the accumulated value.\n */\nfunction arrayReduce(array, iteratee, accumulator, initAccum) {\n  var index = -1,\n      length = array ? array.length : 0;\n\n  if (initAccum && length) {\n    accumulator = array[++index];\n  }\n  while (++index < length) {\n    accumulator = iteratee(accumulator, array[index], index, array);\n  }\n  return accumulator;\n}\n\n/**\n * Converts an ASCII `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction asciiToArray(string) {\n  return string.split('');\n}\n\n/**\n * Splits an ASCII `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\nfunction asciiWords(string) {\n  return string.match(reAsciiWord) || [];\n}\n\n/**\n * The base implementation of `_.propertyOf` without support for deep paths.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyOf(object) {\n  return function(key) {\n    return object == null ? undefined : object[key];\n  };\n}\n\n/**\n * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n * letters to basic Latin letters.\n *\n * @private\n * @param {string} letter The matched letter to deburr.\n * @returns {string} Returns the deburred letter.\n */\nvar deburrLetter = basePropertyOf(deburredLetters);\n\n/**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\nfunction hasUnicode(string) {\n  return reHasUnicode.test(string);\n}\n\n/**\n * Checks if `string` contains a word composed of Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a word is found, else `false`.\n */\nfunction hasUnicodeWord(string) {\n  return reHasUnicodeWord.test(string);\n}\n\n/**\n * Converts `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction stringToArray(string) {\n  return hasUnicode(string)\n    ? unicodeToArray(string)\n    : asciiToArray(string);\n}\n\n/**\n * Converts a Unicode `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction unicodeToArray(string) {\n  return string.match(reUnicode) || [];\n}\n\n/**\n * Splits a Unicode `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\nfunction unicodeWords(string) {\n  return string.match(reUnicodeWord) || [];\n}\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar Symbol$1 = root.Symbol;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol$1 ? Symbol$1.prototype : undefined,\n    symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\nfunction baseSlice(array, start, end) {\n  var index = -1,\n      length = array.length;\n\n  if (start < 0) {\n    start = -start > length ? 0 : (length + start);\n  }\n  end = end > length ? length : end;\n  if (end < 0) {\n    end += length;\n  }\n  length = start > end ? 0 : ((end - start) >>> 0);\n  start >>>= 0;\n\n  var result = Array(length);\n  while (++index < length) {\n    result[index] = array[index + start];\n  }\n  return result;\n}\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n  // Exit early for strings to avoid a performance hit in some environments.\n  if (typeof value == 'string') {\n    return value;\n  }\n  if (isSymbol(value)) {\n    return symbolToString ? symbolToString.call(value) : '';\n  }\n  var result = (value + '');\n  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\n/**\n * Casts `array` to a slice if it's needed.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {number} start The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the cast slice.\n */\nfunction castSlice(array, start, end) {\n  var length = array.length;\n  end = end === undefined ? length : end;\n  return (!start && end >= length) ? array : baseSlice(array, start, end);\n}\n\n/**\n * Creates a function like `_.lowerFirst`.\n *\n * @private\n * @param {string} methodName The name of the `String` case method to use.\n * @returns {Function} Returns the new case function.\n */\nfunction createCaseFirst(methodName) {\n  return function(string) {\n    string = toString(string);\n\n    var strSymbols = hasUnicode(string)\n      ? stringToArray(string)\n      : undefined;\n\n    var chr = strSymbols\n      ? strSymbols[0]\n      : string.charAt(0);\n\n    var trailing = strSymbols\n      ? castSlice(strSymbols, 1).join('')\n      : string.slice(1);\n\n    return chr[methodName]() + trailing;\n  };\n}\n\n/**\n * Creates a function like `_.camelCase`.\n *\n * @private\n * @param {Function} callback The function to combine each word.\n * @returns {Function} Returns the new compounder function.\n */\nfunction createCompounder(callback) {\n  return function(string) {\n    return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n  };\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n  return typeof value == 'symbol' ||\n    (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n  return value == null ? '' : baseToString(value);\n}\n\n/**\n * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the camel cased string.\n * @example\n *\n * _.camelCase('Foo Bar');\n * // => 'fooBar'\n *\n * _.camelCase('--foo-bar--');\n * // => 'fooBar'\n *\n * _.camelCase('__FOO_BAR__');\n * // => 'fooBar'\n */\nvar camelCase = createCompounder(function(result, word, index) {\n  word = word.toLowerCase();\n  return result + (index ? capitalize(word) : word);\n});\n\n/**\n * Converts the first character of `string` to upper case and the remaining\n * to lower case.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to capitalize.\n * @returns {string} Returns the capitalized string.\n * @example\n *\n * _.capitalize('FRED');\n * // => 'Fred'\n */\nfunction capitalize(string) {\n  return upperFirst(toString(string).toLowerCase());\n}\n\n/**\n * Deburrs `string` by converting\n * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n * letters to basic Latin letters and removing\n * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to deburr.\n * @returns {string} Returns the deburred string.\n * @example\n *\n * _.deburr('déjà vu');\n * // => 'deja vu'\n */\nfunction deburr(string) {\n  string = toString(string);\n  return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n}\n\n/**\n * Converts the first character of `string` to upper case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.upperFirst('fred');\n * // => 'Fred'\n *\n * _.upperFirst('FRED');\n * // => 'FRED'\n */\nvar upperFirst = createCaseFirst('toUpperCase');\n\n/**\n * Splits `string` into an array of its words.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {RegExp|string} [pattern] The pattern to match words.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the words of `string`.\n * @example\n *\n * _.words('fred, barney, & pebbles');\n * // => ['fred', 'barney', 'pebbles']\n *\n * _.words('fred, barney, & pebbles', /[^, ]+/g);\n * // => ['fred', 'barney', '&', 'pebbles']\n */\nfunction words(string, pattern, guard) {\n  string = toString(string);\n  pattern = guard ? undefined : pattern;\n\n  if (pattern === undefined) {\n    return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);\n  }\n  return string.match(pattern) || [];\n}\n\nvar lodash_camelcase = camelCase;\n\nvar lib$3 = {};\n\nvar lib$2 = {exports: {}};\n\nvar parse$3 = {exports: {}};\n\nvar util = {};\n\nvar unicode$1 = {};\n\nObject.defineProperty(unicode$1,\"__esModule\",{value:true});unicode$1.Space_Separator=/[\\u1680\\u2000-\\u200A\\u202F\\u205F\\u3000]/;unicode$1.ID_Start=/[\\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\\u08B6-\\u08BD\\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\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\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-\\u1884\\u1887-\\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\\u1C80-\\u1C88\\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\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\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\\u2E2F\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309D-\\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-\\uA7AE\\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\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\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[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDF00-\\uDF19]|\\uD806[\\uDCA0-\\uDCDF\\uDCFF\\uDEC0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC00-\\uDC6E\\uDC80-\\uDD43]|[\\uD80C\\uD81C-\\uD820\\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\\uDFE0]|\\uD821[\\uDC00-\\uDFEC]|\\uD822[\\uDC00-\\uDEF2]|\\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\\uDD00-\\uDD43]|\\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]/;unicode$1.ID_Continue=/[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0300-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\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\\u08B6-\\u08BD\\u08D4-\\u08E1\\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\\u0C80-\\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\\u0D54-\\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\\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-\\u19D9\\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\\u1C80-\\u1C88\\u1CD0-\\u1CD2\\u1CD4-\\u1CF6\\u1CF8\\u1CF9\\u1D00-\\u1DF5\\u1DFB-\\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\\u203F\\u2040\\u2054\\u2071\\u207F\\u2090-\\u209C\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\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\\u2E2F\\u3005-\\u3007\\u3021-\\u302F\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u3099\\u309A\\u309D-\\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-\\uA7AE\\uA7B0-\\uA7B7\\uA7F7-\\uA827\\uA840-\\uA873\\uA880-\\uA8C5\\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\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\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\\uDE3E\\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[\\uDC00-\\uDC4A\\uDC50-\\uDC59\\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]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC36\\uDC38-\\uDC40\\uDC50-\\uDC59\\uDC72-\\uDC8F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC00-\\uDC6E\\uDC80-\\uDD43]|[\\uD80C\\uD81C-\\uD820\\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\\uDFE0]|\\uD821[\\uDC00-\\uDFEC]|\\uD822[\\uDC00-\\uDEF2]|\\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]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A]|\\uD83A[\\uDC00-\\uDCC4\\uDCD0-\\uDCD6\\uDD00-\\uDD4A\\uDD50-\\uDD59]|\\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]/;\n\nObject.defineProperty(util,'__esModule',{value:true});util.isSpaceSeparator=isSpaceSeparator;util.isIdStartChar=isIdStartChar;util.isIdContinueChar=isIdContinueChar;util.isDigit=isDigit;util.isHexDigit=isHexDigit;var _unicode=unicode$1;var unicode=_interopRequireWildcard(_unicode);function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj}else {var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key]=obj[key];}}newObj.default=obj;return newObj}}function isSpaceSeparator(c){return unicode.Space_Separator.test(c)}function isIdStartChar(c){return c>='a'&&c<='z'||c>='A'&&c<='Z'||c==='$'||c==='_'||unicode.ID_Start.test(c)}function isIdContinueChar(c){return c>='a'&&c<='z'||c>='A'&&c<='Z'||c>='0'&&c<='9'||c==='$'||c==='_'||c==='\\u200C'||c==='\\u200D'||unicode.ID_Continue.test(c)}function isDigit(c){return /[0-9]/.test(c)}function isHexDigit(c){return /[0-9A-Fa-f]/.test(c)}\n\n(function (module, exports) {\nObject.defineProperty(exports,'__esModule',{value:true});var _typeof=typeof Symbol==='function'&&typeof Symbol.iterator==='symbol'?function(obj){return typeof obj}:function(obj){return obj&&typeof Symbol==='function'&&obj.constructor===Symbol&&obj!==Symbol.prototype?'symbol':typeof obj};exports.default=parse;var _util=util;var util$1=_interopRequireWildcard(_util);function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj}else {var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key]=obj[key];}}newObj.default=obj;return newObj}}var source=void 0;var parseState=void 0;var stack=void 0;var pos=void 0;var line=void 0;var column=void 0;var token=void 0;var key=void 0;var root=void 0;function parse(text,reviver){source=String(text);parseState='start';stack=[];pos=0;line=1;column=0;token=undefined;key=undefined;root=undefined;do{token=lex();parseStates[parseState]();}while(token.type!=='eof');if(typeof reviver==='function'){return internalize({'':root},'',reviver)}return root}function internalize(holder,name,reviver){var value=holder[name];if(value!=null&&(typeof value==='undefined'?'undefined':_typeof(value))==='object'){for(var _key in value){var replacement=internalize(value,_key,reviver);if(replacement===undefined){delete value[_key];}else {value[_key]=replacement;}}}return reviver.call(holder,name,value)}var lexState=void 0;var buffer=void 0;var doubleQuote=void 0;var _sign=void 0;var c=void 0;function lex(){lexState='default';buffer='';doubleQuote=false;_sign=1;for(;;){c=peek();var _token=lexStates[lexState]();if(_token){return _token}}}function peek(){if(source[pos]){return String.fromCodePoint(source.codePointAt(pos))}}function read(){var c=peek();if(c==='\\n'){line++;column=0;}else if(c){column+=c.length;}else {column++;}if(c){pos+=c.length;}return c}var lexStates={default:function _default(){switch(c){case'\\t':case'\\x0B':case'\\f':case' ':case'\\xA0':case'\\uFEFF':case'\\n':case'\\r':case'\\u2028':case'\\u2029':read();return;case'/':read();lexState='comment';return;case undefined:read();return newToken('eof');}if(util$1.isSpaceSeparator(c)){read();return}return lexStates[parseState]()},comment:function comment(){switch(c){case'*':read();lexState='multiLineComment';return;case'/':read();lexState='singleLineComment';return;}throw invalidChar(read())},multiLineComment:function multiLineComment(){switch(c){case'*':read();lexState='multiLineCommentAsterisk';return;case undefined:throw invalidChar(read());}read();},multiLineCommentAsterisk:function multiLineCommentAsterisk(){switch(c){case'*':read();return;case'/':read();lexState='default';return;case undefined:throw invalidChar(read());}read();lexState='multiLineComment';},singleLineComment:function singleLineComment(){switch(c){case'\\n':case'\\r':case'\\u2028':case'\\u2029':read();lexState='default';return;case undefined:read();return newToken('eof');}read();},value:function value(){switch(c){case'{':case'[':return newToken('punctuator',read());case'n':read();literal('ull');return newToken('null',null);case't':read();literal('rue');return newToken('boolean',true);case'f':read();literal('alse');return newToken('boolean',false);case'-':case'+':if(read()==='-'){_sign=-1;}lexState='sign';return;case'.':buffer=read();lexState='decimalPointLeading';return;case'0':buffer=read();lexState='zero';return;case'1':case'2':case'3':case'4':case'5':case'6':case'7':case'8':case'9':buffer=read();lexState='decimalInteger';return;case'I':read();literal('nfinity');return newToken('numeric',Infinity);case'N':read();literal('aN');return newToken('numeric',NaN);case'\"':case'\\'':doubleQuote=read()==='\"';buffer='';lexState='string';return;}throw invalidChar(read())},identifierNameStartEscape:function identifierNameStartEscape(){if(c!=='u'){throw invalidChar(read())}read();var u=unicodeEscape();switch(u){case'$':case'_':break;default:if(!util$1.isIdStartChar(u)){throw invalidIdentifier()}break;}buffer+=u;lexState='identifierName';},identifierName:function identifierName(){switch(c){case'$':case'_':case'\\u200C':case'\\u200D':buffer+=read();return;case'\\\\':read();lexState='identifierNameEscape';return;}if(util$1.isIdContinueChar(c)){buffer+=read();return}return newToken('identifier',buffer)},identifierNameEscape:function identifierNameEscape(){if(c!=='u'){throw invalidChar(read())}read();var u=unicodeEscape();switch(u){case'$':case'_':case'\\u200C':case'\\u200D':break;default:if(!util$1.isIdContinueChar(u)){throw invalidIdentifier()}break;}buffer+=u;lexState='identifierName';},sign:function sign(){switch(c){case'.':buffer=read();lexState='decimalPointLeading';return;case'0':buffer=read();lexState='zero';return;case'1':case'2':case'3':case'4':case'5':case'6':case'7':case'8':case'9':buffer=read();lexState='decimalInteger';return;case'I':read();literal('nfinity');return newToken('numeric',_sign*Infinity);case'N':read();literal('aN');return newToken('numeric',NaN);}throw invalidChar(read())},zero:function zero(){switch(c){case'.':buffer+=read();lexState='decimalPoint';return;case'e':case'E':buffer+=read();lexState='decimalExponent';return;case'x':case'X':buffer+=read();lexState='hexadecimal';return;}return newToken('numeric',_sign*0)},decimalInteger:function decimalInteger(){switch(c){case'.':buffer+=read();lexState='decimalPoint';return;case'e':case'E':buffer+=read();lexState='decimalExponent';return;}if(util$1.isDigit(c)){buffer+=read();return}return newToken('numeric',_sign*Number(buffer))},decimalPointLeading:function decimalPointLeading(){if(util$1.isDigit(c)){buffer+=read();lexState='decimalFraction';return}throw invalidChar(read())},decimalPoint:function decimalPoint(){switch(c){case'e':case'E':buffer+=read();lexState='decimalExponent';return;}if(util$1.isDigit(c)){buffer+=read();lexState='decimalFraction';return}return newToken('numeric',_sign*Number(buffer))},decimalFraction:function decimalFraction(){switch(c){case'e':case'E':buffer+=read();lexState='decimalExponent';return;}if(util$1.isDigit(c)){buffer+=read();return}return newToken('numeric',_sign*Number(buffer))},decimalExponent:function decimalExponent(){switch(c){case'+':case'-':buffer+=read();lexState='decimalExponentSign';return;}if(util$1.isDigit(c)){buffer+=read();lexState='decimalExponentInteger';return}throw invalidChar(read())},decimalExponentSign:function decimalExponentSign(){if(util$1.isDigit(c)){buffer+=read();lexState='decimalExponentInteger';return}throw invalidChar(read())},decimalExponentInteger:function decimalExponentInteger(){if(util$1.isDigit(c)){buffer+=read();return}return newToken('numeric',_sign*Number(buffer))},hexadecimal:function hexadecimal(){if(util$1.isHexDigit(c)){buffer+=read();lexState='hexadecimalInteger';return}throw invalidChar(read())},hexadecimalInteger:function hexadecimalInteger(){if(util$1.isHexDigit(c)){buffer+=read();return}return newToken('numeric',_sign*Number(buffer))},string:function string(){switch(c){case'\\\\':read();buffer+=escape();return;case'\"':if(doubleQuote){read();return newToken('string',buffer)}buffer+=read();return;case'\\'':if(!doubleQuote){read();return newToken('string',buffer)}buffer+=read();return;case'\\n':case'\\r':throw invalidChar(read());case'\\u2028':case'\\u2029':separatorChar(c);break;case undefined:throw invalidChar(read());}buffer+=read();},start:function start(){switch(c){case'{':case'[':return newToken('punctuator',read());}lexState='value';},beforePropertyName:function beforePropertyName(){switch(c){case'$':case'_':buffer=read();lexState='identifierName';return;case'\\\\':read();lexState='identifierNameStartEscape';return;case'}':return newToken('punctuator',read());case'\"':case'\\'':doubleQuote=read()==='\"';lexState='string';return;}if(util$1.isIdStartChar(c)){buffer+=read();lexState='identifierName';return}throw invalidChar(read())},afterPropertyName:function afterPropertyName(){if(c===':'){return newToken('punctuator',read())}throw invalidChar(read())},beforePropertyValue:function beforePropertyValue(){lexState='value';},afterPropertyValue:function afterPropertyValue(){switch(c){case',':case'}':return newToken('punctuator',read());}throw invalidChar(read())},beforeArrayValue:function beforeArrayValue(){if(c===']'){return newToken('punctuator',read())}lexState='value';},afterArrayValue:function afterArrayValue(){switch(c){case',':case']':return newToken('punctuator',read());}throw invalidChar(read())},end:function end(){throw invalidChar(read())}};function newToken(type,value){return {type:type,value:value,line:line,column:column}}function literal(s){var _iteratorNormalCompletion=true;var _didIteratorError=false;var _iteratorError=undefined;try{for(var _iterator=s[Symbol.iterator](),_step;!(_iteratorNormalCompletion=(_step=_iterator.next()).done);_iteratorNormalCompletion=true){var _c=_step.value;var p=peek();if(p!==_c){throw invalidChar(read())}read();}}catch(err){_didIteratorError=true;_iteratorError=err;}finally{try{if(!_iteratorNormalCompletion&&_iterator.return){_iterator.return();}}finally{if(_didIteratorError){throw _iteratorError}}}}function escape(){var c=peek();switch(c){case'b':read();return '\\b';case'f':read();return '\\f';case'n':read();return '\\n';case'r':read();return '\\r';case't':read();return '\\t';case'v':read();return '\\x0B';case'0':read();if(util$1.isDigit(peek())){throw invalidChar(read())}return '\\0';case'x':read();return hexEscape();case'u':read();return unicodeEscape();case'\\n':case'\\u2028':case'\\u2029':read();return '';case'\\r':read();if(peek()==='\\n'){read();}return '';case'1':case'2':case'3':case'4':case'5':case'6':case'7':case'8':case'9':throw invalidChar(read());case undefined:throw invalidChar(read());}return read()}function hexEscape(){var buffer='';var c=peek();if(!util$1.isHexDigit(c)){throw invalidChar(read())}buffer+=read();c=peek();if(!util$1.isHexDigit(c)){throw invalidChar(read())}buffer+=read();return String.fromCodePoint(parseInt(buffer,16))}function unicodeEscape(){var buffer='';var count=4;while(count-->0){var _c2=peek();if(!util$1.isHexDigit(_c2)){throw invalidChar(read())}buffer+=read();}return String.fromCodePoint(parseInt(buffer,16))}var parseStates={start:function start(){if(token.type==='eof'){throw invalidEOF()}push();},beforePropertyName:function beforePropertyName(){switch(token.type){case'identifier':case'string':key=token.value;parseState='afterPropertyName';return;case'punctuator':pop();return;case'eof':throw invalidEOF();}},afterPropertyName:function afterPropertyName(){if(token.type==='eof'){throw invalidEOF()}parseState='beforePropertyValue';},beforePropertyValue:function beforePropertyValue(){if(token.type==='eof'){throw invalidEOF()}push();},beforeArrayValue:function beforeArrayValue(){if(token.type==='eof'){throw invalidEOF()}if(token.type==='punctuator'&&token.value===']'){pop();return}push();},afterPropertyValue:function afterPropertyValue(){if(token.type==='eof'){throw invalidEOF()}switch(token.value){case',':parseState='beforePropertyName';return;case'}':pop();}},afterArrayValue:function afterArrayValue(){if(token.type==='eof'){throw invalidEOF()}switch(token.value){case',':parseState='beforeArrayValue';return;case']':pop();}},end:function end(){}};function push(){var value=void 0;switch(token.type){case'punctuator':switch(token.value){case'{':value={};break;case'[':value=[];break;}break;case'null':case'boolean':case'numeric':case'string':value=token.value;break;}if(root===undefined){root=value;}else {var parent=stack[stack.length-1];if(Array.isArray(parent)){parent.push(value);}else {parent[key]=value;}}if(value!==null&&(typeof value==='undefined'?'undefined':_typeof(value))==='object'){stack.push(value);if(Array.isArray(value)){parseState='beforeArrayValue';}else {parseState='beforePropertyName';}}else {var current=stack[stack.length-1];if(current==null){parseState='end';}else if(Array.isArray(current)){parseState='afterArrayValue';}else {parseState='afterPropertyValue';}}}function pop(){stack.pop();var current=stack[stack.length-1];if(current==null){parseState='end';}else if(Array.isArray(current)){parseState='afterArrayValue';}else {parseState='afterPropertyValue';}}function invalidChar(c){if(c===undefined){return syntaxError('JSON5: invalid end of input at '+line+':'+column)}return syntaxError('JSON5: invalid character \\''+formatChar(c)+'\\' at '+line+':'+column)}function invalidEOF(){return syntaxError('JSON5: invalid end of input at '+line+':'+column)}function invalidIdentifier(){column-=5;return syntaxError('JSON5: invalid identifier character at '+line+':'+column)}function separatorChar(c){console.warn('JSON5: \\''+c+'\\' is not valid ECMAScript; consider escaping');}function formatChar(c){var replacements={'\\'':'\\\\\\'','\"':'\\\\\"','\\\\':'\\\\\\\\','\\b':'\\\\b','\\f':'\\\\f','\\n':'\\\\n','\\r':'\\\\r','\\t':'\\\\t','\\x0B':'\\\\v','\\0':'\\\\0','\\u2028':'\\\\u2028','\\u2029':'\\\\u2029'};if(replacements[c]){return replacements[c]}if(c<' '){var hexString=c.charCodeAt(0).toString(16);return '\\\\x'+('00'+hexString).substring(hexString.length)}return c}function syntaxError(message){var err=new SyntaxError(message);err.lineNumber=line;err.columnNumber=column;return err}module.exports=exports['default'];\n} (parse$3, parse$3.exports));\n\nvar stringify$3 = {exports: {}};\n\n(function (module, exports) {\nObject.defineProperty(exports,'__esModule',{value:true});var _typeof=typeof Symbol==='function'&&typeof Symbol.iterator==='symbol'?function(obj){return typeof obj}:function(obj){return obj&&typeof Symbol==='function'&&obj.constructor===Symbol&&obj!==Symbol.prototype?'symbol':typeof obj};exports.default=stringify;var _util=util;var util$1=_interopRequireWildcard(_util);function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj}else {var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key]=obj[key];}}newObj.default=obj;return newObj}}function stringify(value,replacer,space){var stack=[];var indent='';var propertyList=void 0;var replacerFunc=void 0;var gap='';var quote=void 0;if(replacer!=null&&(typeof replacer==='undefined'?'undefined':_typeof(replacer))==='object'&&!Array.isArray(replacer)){space=replacer.space;quote=replacer.quote;replacer=replacer.replacer;}if(typeof replacer==='function'){replacerFunc=replacer;}else if(Array.isArray(replacer)){propertyList=[];var _iteratorNormalCompletion=true;var _didIteratorError=false;var _iteratorError=undefined;try{for(var _iterator=replacer[Symbol.iterator](),_step;!(_iteratorNormalCompletion=(_step=_iterator.next()).done);_iteratorNormalCompletion=true){var v=_step.value;var item=void 0;if(typeof v==='string'){item=v;}else if(typeof v==='number'||v instanceof String||v instanceof Number){item=String(v);}if(item!==undefined&&propertyList.indexOf(item)<0){propertyList.push(item);}}}catch(err){_didIteratorError=true;_iteratorError=err;}finally{try{if(!_iteratorNormalCompletion&&_iterator.return){_iterator.return();}}finally{if(_didIteratorError){throw _iteratorError}}}}if(space instanceof Number){space=Number(space);}else if(space instanceof String){space=String(space);}if(typeof space==='number'){if(space>0){space=Math.min(10,Math.floor(space));gap='          '.substr(0,space);}}else if(typeof space==='string'){gap=space.substr(0,10);}return serializeProperty('',{'':value});function serializeProperty(key,holder){var value=holder[key];if(value!=null){if(typeof value.toJSON5==='function'){value=value.toJSON5(key);}else if(typeof value.toJSON==='function'){value=value.toJSON(key);}}if(replacerFunc){value=replacerFunc.call(holder,key,value);}if(value instanceof Number){value=Number(value);}else if(value instanceof String){value=String(value);}else if(value instanceof Boolean){value=value.valueOf();}switch(value){case null:return 'null';case true:return 'true';case false:return 'false';}if(typeof value==='string'){return quoteString(value)}if(typeof value==='number'){return String(value)}if((typeof value==='undefined'?'undefined':_typeof(value))==='object'){return Array.isArray(value)?serializeArray(value):serializeObject(value)}return undefined}function quoteString(value){var quotes={'\\'':0.1,'\"':0.2};var replacements={'\\'':'\\\\\\'','\"':'\\\\\"','\\\\':'\\\\\\\\','\\b':'\\\\b','\\f':'\\\\f','\\n':'\\\\n','\\r':'\\\\r','\\t':'\\\\t','\\x0B':'\\\\v','\\0':'\\\\0','\\u2028':'\\\\u2028','\\u2029':'\\\\u2029'};var product='';var _iteratorNormalCompletion2=true;var _didIteratorError2=false;var _iteratorError2=undefined;try{for(var _iterator2=value[Symbol.iterator](),_step2;!(_iteratorNormalCompletion2=(_step2=_iterator2.next()).done);_iteratorNormalCompletion2=true){var c=_step2.value;switch(c){case'\\'':case'\"':quotes[c]++;product+=c;continue;}if(replacements[c]){product+=replacements[c];continue}if(c<' '){var hexString=c.charCodeAt(0).toString(16);product+='\\\\x'+('00'+hexString).substring(hexString.length);continue}product+=c;}}catch(err){_didIteratorError2=true;_iteratorError2=err;}finally{try{if(!_iteratorNormalCompletion2&&_iterator2.return){_iterator2.return();}}finally{if(_didIteratorError2){throw _iteratorError2}}}var quoteChar=quote||Object.keys(quotes).reduce(function(a,b){return quotes[a]<quotes[b]?a:b});product=product.replace(new RegExp(quoteChar,'g'),replacements[quoteChar]);return quoteChar+product+quoteChar}function serializeObject(value){if(stack.indexOf(value)>=0){throw TypeError('Converting circular structure to JSON5')}stack.push(value);var stepback=indent;indent=indent+gap;var keys=propertyList||Object.keys(value);var partial=[];var _iteratorNormalCompletion3=true;var _didIteratorError3=false;var _iteratorError3=undefined;try{for(var _iterator3=keys[Symbol.iterator](),_step3;!(_iteratorNormalCompletion3=(_step3=_iterator3.next()).done);_iteratorNormalCompletion3=true){var key=_step3.value;var propertyString=serializeProperty(key,value);if(propertyString!==undefined){var member=serializeKey(key)+':';if(gap!==''){member+=' ';}member+=propertyString;partial.push(member);}}}catch(err){_didIteratorError3=true;_iteratorError3=err;}finally{try{if(!_iteratorNormalCompletion3&&_iterator3.return){_iterator3.return();}}finally{if(_didIteratorError3){throw _iteratorError3}}}var final=void 0;if(partial.length===0){final='{}';}else {var properties=void 0;if(gap===''){properties=partial.join(',');final='{'+properties+'}';}else {var separator=',\\n'+indent;properties=partial.join(separator);final='{\\n'+indent+properties+',\\n'+stepback+'}';}}stack.pop();indent=stepback;return final}function serializeKey(key){if(key.length===0){return quoteString(key)}var firstChar=String.fromCodePoint(key.codePointAt(0));if(!util$1.isIdStartChar(firstChar)){return quoteString(key)}for(var i=firstChar.length;i<key.length;i++){if(!util$1.isIdContinueChar(String.fromCodePoint(key.codePointAt(i)))){return quoteString(key)}}return key}function serializeArray(value){if(stack.indexOf(value)>=0){throw TypeError('Converting circular structure to JSON5')}stack.push(value);var stepback=indent;indent=indent+gap;var partial=[];for(var i=0;i<value.length;i++){var propertyString=serializeProperty(String(i),value);partial.push(propertyString!==undefined?propertyString:'null');}var final=void 0;if(partial.length===0){final='[]';}else {if(gap===''){var properties=partial.join(',');final='['+properties+']';}else {var separator=',\\n'+indent;var _properties=partial.join(separator);final='[\\n'+indent+_properties+',\\n'+stepback+']';}}stack.pop();indent=stepback;return final}}module.exports=exports['default'];\n} (stringify$3, stringify$3.exports));\n\n(function (module, exports) {\nObject.defineProperty(exports,'__esModule',{value:true});var _parse=parse$3.exports;var _parse2=_interopRequireDefault(_parse);var _stringify=stringify$3.exports;var _stringify2=_interopRequireDefault(_stringify);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}exports.default={parse:_parse2.default,stringify:_stringify2.default};module.exports=exports['default'];\n} (lib$2, lib$2.exports));\n\nconst JSON5 = lib$2.exports;\n\nconst specialValues = {\n  null: null,\n  true: true,\n  false: false,\n};\n\nfunction parseQuery$2(query) {\n  if (query.substr(0, 1) !== '?') {\n    throw new Error(\n      \"A valid query string passed to parseQuery should begin with '?'\"\n    );\n  }\n\n  query = query.substr(1);\n\n  if (!query) {\n    return {};\n  }\n\n  if (query.substr(0, 1) === '{' && query.substr(-1) === '}') {\n    return JSON5.parse(query);\n  }\n\n  const queryArgs = query.split(/[,&]/g);\n  const result = {};\n\n  queryArgs.forEach((arg) => {\n    const idx = arg.indexOf('=');\n\n    if (idx >= 0) {\n      let name = arg.substr(0, idx);\n      let value = decodeURIComponent(arg.substr(idx + 1));\n\n      if (specialValues.hasOwnProperty(value)) {\n        value = specialValues[value];\n      }\n\n      if (name.substr(-2) === '[]') {\n        name = decodeURIComponent(name.substr(0, name.length - 2));\n\n        if (!Array.isArray(result[name])) {\n          result[name] = [];\n        }\n\n        result[name].push(value);\n      } else {\n        name = decodeURIComponent(name);\n        result[name] = value;\n      }\n    } else {\n      if (arg.substr(0, 1) === '-') {\n        result[decodeURIComponent(arg.substr(1))] = false;\n      } else if (arg.substr(0, 1) === '+') {\n        result[decodeURIComponent(arg.substr(1))] = true;\n      } else {\n        result[decodeURIComponent(arg)] = true;\n      }\n    }\n  });\n\n  return result;\n}\n\nvar parseQuery_1 = parseQuery$2;\n\nconst parseQuery$1 = parseQuery_1;\n\nfunction getOptions$1(loaderContext) {\n  const query = loaderContext.query;\n\n  if (typeof query === 'string' && query !== '') {\n    return parseQuery$1(loaderContext.query);\n  }\n\n  if (!query || typeof query !== 'object') {\n    // Not object-like queries are not supported.\n    return null;\n  }\n\n  return query;\n}\n\nvar getOptions_1 = getOptions$1;\n\nconst path$3 = path$4;\n\nconst matchRelativePath = /^\\.\\.?[/\\\\]/;\n\nfunction isAbsolutePath(str) {\n  return path$3.posix.isAbsolute(str) || path$3.win32.isAbsolute(str);\n}\n\nfunction isRelativePath(str) {\n  return matchRelativePath.test(str);\n}\n\nfunction stringifyRequest$1(loaderContext, request) {\n  const splitted = request.split('!');\n  const context =\n    loaderContext.context ||\n    (loaderContext.options && loaderContext.options.context);\n\n  return JSON.stringify(\n    splitted\n      .map((part) => {\n        // First, separate singlePath from query, because the query might contain paths again\n        const splittedPart = part.match(/^(.*?)(\\?.*)/);\n        const query = splittedPart ? splittedPart[2] : '';\n        let singlePath = splittedPart ? splittedPart[1] : part;\n\n        if (isAbsolutePath(singlePath) && context) {\n          singlePath = path$3.relative(context, singlePath);\n\n          if (isAbsolutePath(singlePath)) {\n            // If singlePath still matches an absolute path, singlePath was on a different drive than context.\n            // In this case, we leave the path platform-specific without replacing any separators.\n            // @see https://github.com/webpack/loader-utils/pull/14\n            return singlePath + query;\n          }\n\n          if (isRelativePath(singlePath) === false) {\n            // Ensure that the relative path starts at least with ./ otherwise it would be a request into the modules directory (like node_modules).\n            singlePath = './' + singlePath;\n          }\n        }\n\n        return singlePath.replace(/\\\\/g, '/') + query;\n      })\n      .join('!')\n  );\n}\n\nvar stringifyRequest_1 = stringifyRequest$1;\n\nfunction getRemainingRequest$1(loaderContext) {\n  if (loaderContext.remainingRequest) {\n    return loaderContext.remainingRequest;\n  }\n\n  const request = loaderContext.loaders\n    .slice(loaderContext.loaderIndex + 1)\n    .map((obj) => obj.request)\n    .concat([loaderContext.resource]);\n\n  return request.join('!');\n}\n\nvar getRemainingRequest_1 = getRemainingRequest$1;\n\nfunction getCurrentRequest$1(loaderContext) {\n  if (loaderContext.currentRequest) {\n    return loaderContext.currentRequest;\n  }\n\n  const request = loaderContext.loaders\n    .slice(loaderContext.loaderIndex)\n    .map((obj) => obj.request)\n    .concat([loaderContext.resource]);\n\n  return request.join('!');\n}\n\nvar getCurrentRequest_1 = getCurrentRequest$1;\n\nconst path$2 = path$4;\n\nfunction isUrlRequest$1(url, root) {\n  // An URL is not an request if\n\n  // 1. It's an absolute url and it is not `windows` path like `C:\\dir\\file`\n  if (/^[a-z][a-z0-9+.-]*:/i.test(url) && !path$2.win32.isAbsolute(url)) {\n    return false;\n  }\n\n  // 2. It's a protocol-relative\n  if (/^\\/\\//.test(url)) {\n    return false;\n  }\n\n  // 3. It's some kind of url for a template\n  if (/^[{}[\\]#*;,'§$%&(=?`´^°<>]/.test(url)) {\n    return false;\n  }\n\n  // 4. It's also not an request if root isn't set and it's a root-relative url\n  if ((root === undefined || root === false) && /^\\//.test(url)) {\n    return false;\n  }\n\n  return true;\n}\n\nvar isUrlRequest_1 = isUrlRequest$1;\n\n// we can't use path.win32.isAbsolute because it also matches paths starting with a forward slash\nconst matchNativeWin32Path = /^[A-Z]:[/\\\\]|^\\\\\\\\/i;\n\nfunction urlToRequest$1(url, root) {\n  // Do not rewrite an empty url\n  if (url === '') {\n    return '';\n  }\n\n  const moduleRequestRegex = /^[^?]*~/;\n  let request;\n\n  if (matchNativeWin32Path.test(url)) {\n    // absolute windows path, keep it\n    request = url;\n  } else if (root !== undefined && root !== false && /^\\//.test(url)) {\n    // if root is set and the url is root-relative\n    switch (typeof root) {\n      // 1. root is a string: root is prefixed to the url\n      case 'string':\n        // special case: `~` roots convert to module request\n        if (moduleRequestRegex.test(root)) {\n          request = root.replace(/([^~/])$/, '$1/') + url.slice(1);\n        } else {\n          request = root + url;\n        }\n        break;\n      // 2. root is `true`: absolute paths are allowed\n      //    *nix only, windows-style absolute paths are always allowed as they doesn't start with a `/`\n      case 'boolean':\n        request = url;\n        break;\n      default:\n        throw new Error(\n          \"Unexpected parameters to loader-utils 'urlToRequest': url = \" +\n            url +\n            ', root = ' +\n            root +\n            '.'\n        );\n    }\n  } else if (/^\\.\\.?\\//.test(url)) {\n    // A relative url stays\n    request = url;\n  } else {\n    // every other url is threaded like a relative url\n    request = './' + url;\n  }\n\n  // A `~` makes the url an module\n  if (moduleRequestRegex.test(request)) {\n    request = request.replace(moduleRequestRegex, '');\n  }\n\n  return request;\n}\n\nvar urlToRequest_1 = urlToRequest$1;\n\nfunction parseString$1(str) {\n  try {\n    if (str[0] === '\"') {\n      return JSON.parse(str);\n    }\n\n    if (str[0] === \"'\" && str.substr(str.length - 1) === \"'\") {\n      return parseString$1(\n        str\n          .replace(/\\\\.|\"/g, (x) => (x === '\"' ? '\\\\\"' : x))\n          .replace(/^'|'$/g, '\"')\n      );\n    }\n\n    return JSON.parse('\"' + str + '\"');\n  } catch (e) {\n    return str;\n  }\n}\n\nvar parseString_1 = parseString$1;\n\n/*\r\n *  big.js v5.2.2\r\n *  A small, fast, easy-to-use library for arbitrary-precision decimal arithmetic.\r\n *  Copyright (c) 2018 Michael Mclaughlin <M8ch88l@gmail.com>\r\n *  https://github.com/MikeMcl/big.js/LICENCE\r\n */\r\n\r\n\r\n/************************************** EDITABLE DEFAULTS *****************************************/\r\n\r\n\r\n  // The default values below must be integers within the stated ranges.\r\n\r\n  /*\r\n   * The maximum number of decimal places (DP) of the results of operations involving division:\r\n   * div and sqrt, and pow with negative exponents.\r\n   */\r\nvar DP = 20,          // 0 to MAX_DP\r\n\r\n  /*\r\n   * The rounding mode (RM) used when rounding to the above decimal places.\r\n   *\r\n   *  0  Towards zero (i.e. truncate, no rounding).       (ROUND_DOWN)\r\n   *  1  To nearest neighbour. If equidistant, round up.  (ROUND_HALF_UP)\r\n   *  2  To nearest neighbour. If equidistant, to even.   (ROUND_HALF_EVEN)\r\n   *  3  Away from zero.                                  (ROUND_UP)\r\n   */\r\n  RM = 1,             // 0, 1, 2 or 3\r\n\r\n  // The maximum value of DP and Big.DP.\r\n  MAX_DP = 1E6,       // 0 to 1000000\r\n\r\n  // The maximum magnitude of the exponent argument to the pow method.\r\n  MAX_POWER = 1E6,    // 1 to 1000000\r\n\r\n  /*\r\n   * The negative exponent (NE) at and beneath which toString returns exponential notation.\r\n   * (JavaScript numbers: -7)\r\n   * -1000000 is the minimum recommended exponent value of a Big.\r\n   */\r\n  NE = -7,            // 0 to -1000000\r\n\r\n  /*\r\n   * The positive exponent (PE) at and above which toString returns exponential notation.\r\n   * (JavaScript numbers: 21)\r\n   * 1000000 is the maximum recommended exponent value of a Big.\r\n   * (This limit is not enforced or checked.)\r\n   */\r\n  PE = 21,            // 0 to 1000000\r\n\r\n\r\n/**************************************************************************************************/\r\n\r\n\r\n  // Error messages.\r\n  NAME = '[big.js] ',\r\n  INVALID = NAME + 'Invalid ',\r\n  INVALID_DP = INVALID + 'decimal places',\r\n  INVALID_RM = INVALID + 'rounding mode',\r\n  DIV_BY_ZERO = NAME + 'Division by zero',\r\n\r\n  // The shared prototype object.\r\n  P = {},\r\n  UNDEFINED = void 0,\r\n  NUMERIC = /^-?(\\d+(\\.\\d*)?|\\.\\d+)(e[+-]?\\d+)?$/i;\r\n\r\n\r\n/*\r\n * Create and return a Big constructor.\r\n *\r\n */\r\nfunction _Big_() {\r\n\r\n  /*\r\n   * The Big constructor and exported function.\r\n   * Create and return a new instance of a Big number object.\r\n   *\r\n   * n {number|string|Big} A numeric value.\r\n   */\r\n  function Big(n) {\r\n    var x = this;\r\n\r\n    // Enable constructor usage without new.\r\n    if (!(x instanceof Big)) return n === UNDEFINED ? _Big_() : new Big(n);\r\n\r\n    // Duplicate.\r\n    if (n instanceof Big) {\r\n      x.s = n.s;\r\n      x.e = n.e;\r\n      x.c = n.c.slice();\r\n    } else {\r\n      parse$2(x, n);\r\n    }\r\n\r\n    /*\r\n     * Retain a reference to this Big constructor, and shadow Big.prototype.constructor which\r\n     * points to Object.\r\n     */\r\n    x.constructor = Big;\r\n  }\r\n\r\n  Big.prototype = P;\r\n  Big.DP = DP;\r\n  Big.RM = RM;\r\n  Big.NE = NE;\r\n  Big.PE = PE;\r\n  Big.version = '5.2.2';\r\n\r\n  return Big;\r\n}\r\n\r\n\r\n/*\r\n * Parse the number or string value passed to a Big constructor.\r\n *\r\n * x {Big} A Big number instance.\r\n * n {number|string} A numeric value.\r\n */\r\nfunction parse$2(x, n) {\r\n  var e, i, nl;\r\n\r\n  // Minus zero?\r\n  if (n === 0 && 1 / n < 0) n = '-0';\r\n  else if (!NUMERIC.test(n += '')) throw Error(INVALID + 'number');\r\n\r\n  // Determine sign.\r\n  x.s = n.charAt(0) == '-' ? (n = n.slice(1), -1) : 1;\r\n\r\n  // Decimal point?\r\n  if ((e = n.indexOf('.')) > -1) n = n.replace('.', '');\r\n\r\n  // Exponential form?\r\n  if ((i = n.search(/e/i)) > 0) {\r\n\r\n    // Determine exponent.\r\n    if (e < 0) e = i;\r\n    e += +n.slice(i + 1);\r\n    n = n.substring(0, i);\r\n  } else if (e < 0) {\r\n\r\n    // Integer.\r\n    e = n.length;\r\n  }\r\n\r\n  nl = n.length;\r\n\r\n  // Determine leading zeros.\r\n  for (i = 0; i < nl && n.charAt(i) == '0';) ++i;\r\n\r\n  if (i == nl) {\r\n\r\n    // Zero.\r\n    x.c = [x.e = 0];\r\n  } else {\r\n\r\n    // Determine trailing zeros.\r\n    for (; nl > 0 && n.charAt(--nl) == '0';);\r\n    x.e = e - i - 1;\r\n    x.c = [];\r\n\r\n    // Convert string to array of digits without leading/trailing zeros.\r\n    for (e = 0; i <= nl;) x.c[e++] = +n.charAt(i++);\r\n  }\r\n\r\n  return x;\r\n}\r\n\r\n\r\n/*\r\n * Round Big x to a maximum of dp decimal places using rounding mode rm.\r\n * Called by stringify, P.div, P.round and P.sqrt.\r\n *\r\n * x {Big} The Big to round.\r\n * dp {number} Integer, 0 to MAX_DP inclusive.\r\n * rm {number} 0, 1, 2 or 3 (DOWN, HALF_UP, HALF_EVEN, UP)\r\n * [more] {boolean} Whether the result of division was truncated.\r\n */\r\nfunction round(x, dp, rm, more) {\r\n  var xc = x.c,\r\n    i = x.e + dp + 1;\r\n\r\n  if (i < xc.length) {\r\n    if (rm === 1) {\r\n\r\n      // xc[i] is the digit after the digit that may be rounded up.\r\n      more = xc[i] >= 5;\r\n    } else if (rm === 2) {\r\n      more = xc[i] > 5 || xc[i] == 5 &&\r\n        (more || i < 0 || xc[i + 1] !== UNDEFINED || xc[i - 1] & 1);\r\n    } else if (rm === 3) {\r\n      more = more || !!xc[0];\r\n    } else {\r\n      more = false;\r\n      if (rm !== 0) throw Error(INVALID_RM);\r\n    }\r\n\r\n    if (i < 1) {\r\n      xc.length = 1;\r\n\r\n      if (more) {\r\n\r\n        // 1, 0.1, 0.01, 0.001, 0.0001 etc.\r\n        x.e = -dp;\r\n        xc[0] = 1;\r\n      } else {\r\n\r\n        // Zero.\r\n        xc[0] = x.e = 0;\r\n      }\r\n    } else {\r\n\r\n      // Remove any digits after the required decimal places.\r\n      xc.length = i--;\r\n\r\n      // Round up?\r\n      if (more) {\r\n\r\n        // Rounding up may mean the previous digit has to be rounded up.\r\n        for (; ++xc[i] > 9;) {\r\n          xc[i] = 0;\r\n          if (!i--) {\r\n            ++x.e;\r\n            xc.unshift(1);\r\n          }\r\n        }\r\n      }\r\n\r\n      // Remove trailing zeros.\r\n      for (i = xc.length; !xc[--i];) xc.pop();\r\n    }\r\n  } else if (rm < 0 || rm > 3 || rm !== ~~rm) {\r\n    throw Error(INVALID_RM);\r\n  }\r\n\r\n  return x;\r\n}\r\n\r\n\r\n/*\r\n * Return a string representing the value of Big x in normal or exponential notation.\r\n * Handles P.toExponential, P.toFixed, P.toJSON, P.toPrecision, P.toString and P.valueOf.\r\n *\r\n * x {Big}\r\n * id? {number} Caller id.\r\n *         1 toExponential\r\n *         2 toFixed\r\n *         3 toPrecision\r\n *         4 valueOf\r\n * n? {number|undefined} Caller's argument.\r\n * k? {number|undefined}\r\n */\r\nfunction stringify$2(x, id, n, k) {\r\n  var e, s,\r\n    Big = x.constructor,\r\n    z = !x.c[0];\r\n\r\n  if (n !== UNDEFINED) {\r\n    if (n !== ~~n || n < (id == 3) || n > MAX_DP) {\r\n      throw Error(id == 3 ? INVALID + 'precision' : INVALID_DP);\r\n    }\r\n\r\n    x = new Big(x);\r\n\r\n    // The index of the digit that may be rounded up.\r\n    n = k - x.e;\r\n\r\n    // Round?\r\n    if (x.c.length > ++k) round(x, n, Big.RM);\r\n\r\n    // toFixed: recalculate k as x.e may have changed if value rounded up.\r\n    if (id == 2) k = x.e + n + 1;\r\n\r\n    // Append zeros?\r\n    for (; x.c.length < k;) x.c.push(0);\r\n  }\r\n\r\n  e = x.e;\r\n  s = x.c.join('');\r\n  n = s.length;\r\n\r\n  // Exponential notation?\r\n  if (id != 2 && (id == 1 || id == 3 && k <= e || e <= Big.NE || e >= Big.PE)) {\r\n    s = s.charAt(0) + (n > 1 ? '.' + s.slice(1) : '') + (e < 0 ? 'e' : 'e+') + e;\r\n\r\n  // Normal notation.\r\n  } else if (e < 0) {\r\n    for (; ++e;) s = '0' + s;\r\n    s = '0.' + s;\r\n  } else if (e > 0) {\r\n    if (++e > n) for (e -= n; e--;) s += '0';\r\n    else if (e < n) s = s.slice(0, e) + '.' + s.slice(e);\r\n  } else if (n > 1) {\r\n    s = s.charAt(0) + '.' + s.slice(1);\r\n  }\r\n\r\n  return x.s < 0 && (!z || id == 4) ? '-' + s : s;\r\n}\r\n\r\n\r\n// Prototype/instance methods\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the absolute value of this Big.\r\n */\r\nP.abs = function () {\r\n  var x = new this.constructor(this);\r\n  x.s = 1;\r\n  return x;\r\n};\r\n\r\n\r\n/*\r\n * Return 1 if the value of this Big is greater than the value of Big y,\r\n *       -1 if the value of this Big is less than the value of Big y, or\r\n *        0 if they have the same value.\r\n*/\r\nP.cmp = function (y) {\r\n  var isneg,\r\n    x = this,\r\n    xc = x.c,\r\n    yc = (y = new x.constructor(y)).c,\r\n    i = x.s,\r\n    j = y.s,\r\n    k = x.e,\r\n    l = y.e;\r\n\r\n  // Either zero?\r\n  if (!xc[0] || !yc[0]) return !xc[0] ? !yc[0] ? 0 : -j : i;\r\n\r\n  // Signs differ?\r\n  if (i != j) return i;\r\n\r\n  isneg = i < 0;\r\n\r\n  // Compare exponents.\r\n  if (k != l) return k > l ^ isneg ? 1 : -1;\r\n\r\n  j = (k = xc.length) < (l = yc.length) ? k : l;\r\n\r\n  // Compare digit by digit.\r\n  for (i = -1; ++i < j;) {\r\n    if (xc[i] != yc[i]) return xc[i] > yc[i] ^ isneg ? 1 : -1;\r\n  }\r\n\r\n  // Compare lengths.\r\n  return k == l ? 0 : k > l ^ isneg ? 1 : -1;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big divided by the value of Big y, rounded,\r\n * if necessary, to a maximum of Big.DP decimal places using rounding mode Big.RM.\r\n */\r\nP.div = function (y) {\r\n  var x = this,\r\n    Big = x.constructor,\r\n    a = x.c,                  // dividend\r\n    b = (y = new Big(y)).c,   // divisor\r\n    k = x.s == y.s ? 1 : -1,\r\n    dp = Big.DP;\r\n\r\n  if (dp !== ~~dp || dp < 0 || dp > MAX_DP) throw Error(INVALID_DP);\r\n\r\n  // Divisor is zero?\r\n  if (!b[0]) throw Error(DIV_BY_ZERO);\r\n\r\n  // Dividend is 0? Return +-0.\r\n  if (!a[0]) return new Big(k * 0);\r\n\r\n  var bl, bt, n, cmp, ri,\r\n    bz = b.slice(),\r\n    ai = bl = b.length,\r\n    al = a.length,\r\n    r = a.slice(0, bl),   // remainder\r\n    rl = r.length,\r\n    q = y,                // quotient\r\n    qc = q.c = [],\r\n    qi = 0,\r\n    d = dp + (q.e = x.e - y.e) + 1;    // number of digits of the result\r\n\r\n  q.s = k;\r\n  k = d < 0 ? 0 : d;\r\n\r\n  // Create version of divisor with leading zero.\r\n  bz.unshift(0);\r\n\r\n  // Add zeros to make remainder as long as divisor.\r\n  for (; rl++ < bl;) r.push(0);\r\n\r\n  do {\r\n\r\n    // n is how many times the divisor goes into current remainder.\r\n    for (n = 0; n < 10; n++) {\r\n\r\n      // Compare divisor and remainder.\r\n      if (bl != (rl = r.length)) {\r\n        cmp = bl > rl ? 1 : -1;\r\n      } else {\r\n        for (ri = -1, cmp = 0; ++ri < bl;) {\r\n          if (b[ri] != r[ri]) {\r\n            cmp = b[ri] > r[ri] ? 1 : -1;\r\n            break;\r\n          }\r\n        }\r\n      }\r\n\r\n      // If divisor < remainder, subtract divisor from remainder.\r\n      if (cmp < 0) {\r\n\r\n        // Remainder can't be more than 1 digit longer than divisor.\r\n        // Equalise lengths using divisor with extra leading zero?\r\n        for (bt = rl == bl ? b : bz; rl;) {\r\n          if (r[--rl] < bt[rl]) {\r\n            ri = rl;\r\n            for (; ri && !r[--ri];) r[ri] = 9;\r\n            --r[ri];\r\n            r[rl] += 10;\r\n          }\r\n          r[rl] -= bt[rl];\r\n        }\r\n\r\n        for (; !r[0];) r.shift();\r\n      } else {\r\n        break;\r\n      }\r\n    }\r\n\r\n    // Add the digit n to the result array.\r\n    qc[qi++] = cmp ? n : ++n;\r\n\r\n    // Update the remainder.\r\n    if (r[0] && cmp) r[rl] = a[ai] || 0;\r\n    else r = [a[ai]];\r\n\r\n  } while ((ai++ < al || r[0] !== UNDEFINED) && k--);\r\n\r\n  // Leading zero? Do not remove if result is simply zero (qi == 1).\r\n  if (!qc[0] && qi != 1) {\r\n\r\n    // There can't be more than one zero.\r\n    qc.shift();\r\n    q.e--;\r\n  }\r\n\r\n  // Round?\r\n  if (qi > d) round(q, dp, Big.RM, r[0] !== UNDEFINED);\r\n\r\n  return q;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Big is equal to the value of Big y, otherwise return false.\r\n */\r\nP.eq = function (y) {\r\n  return !this.cmp(y);\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Big is greater than the value of Big y, otherwise return\r\n * false.\r\n */\r\nP.gt = function (y) {\r\n  return this.cmp(y) > 0;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Big is greater than or equal to the value of Big y, otherwise\r\n * return false.\r\n */\r\nP.gte = function (y) {\r\n  return this.cmp(y) > -1;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Big is less than the value of Big y, otherwise return false.\r\n */\r\nP.lt = function (y) {\r\n  return this.cmp(y) < 0;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Big is less than or equal to the value of Big y, otherwise\r\n * return false.\r\n */\r\nP.lte = function (y) {\r\n  return this.cmp(y) < 1;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big minus the value of Big y.\r\n */\r\nP.minus = P.sub = function (y) {\r\n  var i, j, t, xlty,\r\n    x = this,\r\n    Big = x.constructor,\r\n    a = x.s,\r\n    b = (y = new Big(y)).s;\r\n\r\n  // Signs differ?\r\n  if (a != b) {\r\n    y.s = -b;\r\n    return x.plus(y);\r\n  }\r\n\r\n  var xc = x.c.slice(),\r\n    xe = x.e,\r\n    yc = y.c,\r\n    ye = y.e;\r\n\r\n  // Either zero?\r\n  if (!xc[0] || !yc[0]) {\r\n\r\n    // y is non-zero? x is non-zero? Or both are zero.\r\n    return yc[0] ? (y.s = -b, y) : new Big(xc[0] ? x : 0);\r\n  }\r\n\r\n  // Determine which is the bigger number. Prepend zeros to equalise exponents.\r\n  if (a = xe - ye) {\r\n\r\n    if (xlty = a < 0) {\r\n      a = -a;\r\n      t = xc;\r\n    } else {\r\n      ye = xe;\r\n      t = yc;\r\n    }\r\n\r\n    t.reverse();\r\n    for (b = a; b--;) t.push(0);\r\n    t.reverse();\r\n  } else {\r\n\r\n    // Exponents equal. Check digit by digit.\r\n    j = ((xlty = xc.length < yc.length) ? xc : yc).length;\r\n\r\n    for (a = b = 0; b < j; b++) {\r\n      if (xc[b] != yc[b]) {\r\n        xlty = xc[b] < yc[b];\r\n        break;\r\n      }\r\n    }\r\n  }\r\n\r\n  // x < y? Point xc to the array of the bigger number.\r\n  if (xlty) {\r\n    t = xc;\r\n    xc = yc;\r\n    yc = t;\r\n    y.s = -y.s;\r\n  }\r\n\r\n  /*\r\n   * Append zeros to xc if shorter. No need to add zeros to yc if shorter as subtraction only\r\n   * needs to start at yc.length.\r\n   */\r\n  if ((b = (j = yc.length) - (i = xc.length)) > 0) for (; b--;) xc[i++] = 0;\r\n\r\n  // Subtract yc from xc.\r\n  for (b = i; j > a;) {\r\n    if (xc[--j] < yc[j]) {\r\n      for (i = j; i && !xc[--i];) xc[i] = 9;\r\n      --xc[i];\r\n      xc[j] += 10;\r\n    }\r\n\r\n    xc[j] -= yc[j];\r\n  }\r\n\r\n  // Remove trailing zeros.\r\n  for (; xc[--b] === 0;) xc.pop();\r\n\r\n  // Remove leading zeros and adjust exponent accordingly.\r\n  for (; xc[0] === 0;) {\r\n    xc.shift();\r\n    --ye;\r\n  }\r\n\r\n  if (!xc[0]) {\r\n\r\n    // n - n = +0\r\n    y.s = 1;\r\n\r\n    // Result must be zero.\r\n    xc = [ye = 0];\r\n  }\r\n\r\n  y.c = xc;\r\n  y.e = ye;\r\n\r\n  return y;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big modulo the value of Big y.\r\n */\r\nP.mod = function (y) {\r\n  var ygtx,\r\n    x = this,\r\n    Big = x.constructor,\r\n    a = x.s,\r\n    b = (y = new Big(y)).s;\r\n\r\n  if (!y.c[0]) throw Error(DIV_BY_ZERO);\r\n\r\n  x.s = y.s = 1;\r\n  ygtx = y.cmp(x) == 1;\r\n  x.s = a;\r\n  y.s = b;\r\n\r\n  if (ygtx) return new Big(x);\r\n\r\n  a = Big.DP;\r\n  b = Big.RM;\r\n  Big.DP = Big.RM = 0;\r\n  x = x.div(y);\r\n  Big.DP = a;\r\n  Big.RM = b;\r\n\r\n  return this.minus(x.times(y));\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big plus the value of Big y.\r\n */\r\nP.plus = P.add = function (y) {\r\n  var t,\r\n    x = this,\r\n    Big = x.constructor,\r\n    a = x.s,\r\n    b = (y = new Big(y)).s;\r\n\r\n  // Signs differ?\r\n  if (a != b) {\r\n    y.s = -b;\r\n    return x.minus(y);\r\n  }\r\n\r\n  var xe = x.e,\r\n    xc = x.c,\r\n    ye = y.e,\r\n    yc = y.c;\r\n\r\n  // Either zero? y is non-zero? x is non-zero? Or both are zero.\r\n  if (!xc[0] || !yc[0]) return yc[0] ? y : new Big(xc[0] ? x : a * 0);\r\n\r\n  xc = xc.slice();\r\n\r\n  // Prepend zeros to equalise exponents.\r\n  // Note: reverse faster than unshifts.\r\n  if (a = xe - ye) {\r\n    if (a > 0) {\r\n      ye = xe;\r\n      t = yc;\r\n    } else {\r\n      a = -a;\r\n      t = xc;\r\n    }\r\n\r\n    t.reverse();\r\n    for (; a--;) t.push(0);\r\n    t.reverse();\r\n  }\r\n\r\n  // Point xc to the longer array.\r\n  if (xc.length - yc.length < 0) {\r\n    t = yc;\r\n    yc = xc;\r\n    xc = t;\r\n  }\r\n\r\n  a = yc.length;\r\n\r\n  // Only start adding at yc.length - 1 as the further digits of xc can be left as they are.\r\n  for (b = 0; a; xc[a] %= 10) b = (xc[--a] = xc[a] + yc[a] + b) / 10 | 0;\r\n\r\n  // No need to check for zero, as +x + +y != 0 && -x + -y != 0\r\n\r\n  if (b) {\r\n    xc.unshift(b);\r\n    ++ye;\r\n  }\r\n\r\n  // Remove trailing zeros.\r\n  for (a = xc.length; xc[--a] === 0;) xc.pop();\r\n\r\n  y.c = xc;\r\n  y.e = ye;\r\n\r\n  return y;\r\n};\r\n\r\n\r\n/*\r\n * Return a Big whose value is the value of this Big raised to the power n.\r\n * If n is negative, round to a maximum of Big.DP decimal places using rounding\r\n * mode Big.RM.\r\n *\r\n * n {number} Integer, -MAX_POWER to MAX_POWER inclusive.\r\n */\r\nP.pow = function (n) {\r\n  var x = this,\r\n    one = new x.constructor(1),\r\n    y = one,\r\n    isneg = n < 0;\r\n\r\n  if (n !== ~~n || n < -MAX_POWER || n > MAX_POWER) throw Error(INVALID + 'exponent');\r\n  if (isneg) n = -n;\r\n\r\n  for (;;) {\r\n    if (n & 1) y = y.times(x);\r\n    n >>= 1;\r\n    if (!n) break;\r\n    x = x.times(x);\r\n  }\r\n\r\n  return isneg ? one.div(y) : y;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big rounded using rounding mode rm\r\n * to a maximum of dp decimal places, or, if dp is negative, to an integer which is a\r\n * multiple of 10**-dp.\r\n * If dp is not specified, round to 0 decimal places.\r\n * If rm is not specified, use Big.RM.\r\n *\r\n * dp? {number} Integer, -MAX_DP to MAX_DP inclusive.\r\n * rm? 0, 1, 2 or 3 (ROUND_DOWN, ROUND_HALF_UP, ROUND_HALF_EVEN, ROUND_UP)\r\n */\r\nP.round = function (dp, rm) {\r\n  var Big = this.constructor;\r\n  if (dp === UNDEFINED) dp = 0;\r\n  else if (dp !== ~~dp || dp < -MAX_DP || dp > MAX_DP) throw Error(INVALID_DP);\r\n  return round(new Big(this), dp, rm === UNDEFINED ? Big.RM : rm);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the square root of the value of this Big, rounded, if\r\n * necessary, to a maximum of Big.DP decimal places using rounding mode Big.RM.\r\n */\r\nP.sqrt = function () {\r\n  var r, c, t,\r\n    x = this,\r\n    Big = x.constructor,\r\n    s = x.s,\r\n    e = x.e,\r\n    half = new Big(0.5);\r\n\r\n  // Zero?\r\n  if (!x.c[0]) return new Big(x);\r\n\r\n  // Negative?\r\n  if (s < 0) throw Error(NAME + 'No square root');\r\n\r\n  // Estimate.\r\n  s = Math.sqrt(x + '');\r\n\r\n  // Math.sqrt underflow/overflow?\r\n  // Re-estimate: pass x coefficient to Math.sqrt as integer, then adjust the result exponent.\r\n  if (s === 0 || s === 1 / 0) {\r\n    c = x.c.join('');\r\n    if (!(c.length + e & 1)) c += '0';\r\n    s = Math.sqrt(c);\r\n    e = ((e + 1) / 2 | 0) - (e < 0 || e & 1);\r\n    r = new Big((s == 1 / 0 ? '1e' : (s = s.toExponential()).slice(0, s.indexOf('e') + 1)) + e);\r\n  } else {\r\n    r = new Big(s);\r\n  }\r\n\r\n  e = r.e + (Big.DP += 4);\r\n\r\n  // Newton-Raphson iteration.\r\n  do {\r\n    t = r;\r\n    r = half.times(t.plus(x.div(t)));\r\n  } while (t.c.slice(0, e).join('') !== r.c.slice(0, e).join(''));\r\n\r\n  return round(r, Big.DP -= 4, Big.RM);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big times the value of Big y.\r\n */\r\nP.times = P.mul = function (y) {\r\n  var c,\r\n    x = this,\r\n    Big = x.constructor,\r\n    xc = x.c,\r\n    yc = (y = new Big(y)).c,\r\n    a = xc.length,\r\n    b = yc.length,\r\n    i = x.e,\r\n    j = y.e;\r\n\r\n  // Determine sign of result.\r\n  y.s = x.s == y.s ? 1 : -1;\r\n\r\n  // Return signed 0 if either 0.\r\n  if (!xc[0] || !yc[0]) return new Big(y.s * 0);\r\n\r\n  // Initialise exponent of result as x.e + y.e.\r\n  y.e = i + j;\r\n\r\n  // If array xc has fewer digits than yc, swap xc and yc, and lengths.\r\n  if (a < b) {\r\n    c = xc;\r\n    xc = yc;\r\n    yc = c;\r\n    j = a;\r\n    a = b;\r\n    b = j;\r\n  }\r\n\r\n  // Initialise coefficient array of result with zeros.\r\n  for (c = new Array(j = a + b); j--;) c[j] = 0;\r\n\r\n  // Multiply.\r\n\r\n  // i is initially xc.length.\r\n  for (i = b; i--;) {\r\n    b = 0;\r\n\r\n    // a is yc.length.\r\n    for (j = a + i; j > i;) {\r\n\r\n      // Current sum of products at this digit position, plus carry.\r\n      b = c[j] + yc[i] * xc[j - i - 1] + b;\r\n      c[j--] = b % 10;\r\n\r\n      // carry\r\n      b = b / 10 | 0;\r\n    }\r\n\r\n    c[j] = (c[j] + b) % 10;\r\n  }\r\n\r\n  // Increment result exponent if there is a final carry, otherwise remove leading zero.\r\n  if (b) ++y.e;\r\n  else c.shift();\r\n\r\n  // Remove trailing zeros.\r\n  for (i = c.length; !c[--i];) c.pop();\r\n  y.c = c;\r\n\r\n  return y;\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Big in exponential notation to dp fixed decimal\r\n * places and rounded using Big.RM.\r\n *\r\n * dp? {number} Integer, 0 to MAX_DP inclusive.\r\n */\r\nP.toExponential = function (dp) {\r\n  return stringify$2(this, 1, dp, dp);\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Big in normal notation to dp fixed decimal\r\n * places and rounded using Big.RM.\r\n *\r\n * dp? {number} Integer, 0 to MAX_DP inclusive.\r\n *\r\n * (-0).toFixed(0) is '0', but (-0.1).toFixed(0) is '-0'.\r\n * (-0).toFixed(1) is '0.0', but (-0.01).toFixed(1) is '-0.0'.\r\n */\r\nP.toFixed = function (dp) {\r\n  return stringify$2(this, 2, dp, this.e + dp);\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Big rounded to sd significant digits using\r\n * Big.RM. Use exponential notation if sd is less than the number of digits necessary to represent\r\n * the integer part of the value in normal notation.\r\n *\r\n * sd {number} Integer, 1 to MAX_DP inclusive.\r\n */\r\nP.toPrecision = function (sd) {\r\n  return stringify$2(this, 3, sd, sd - 1);\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Big.\r\n * Return exponential notation if this Big has a positive exponent equal to or greater than\r\n * Big.PE, or a negative exponent equal to or less than Big.NE.\r\n * Omit the sign for negative zero.\r\n */\r\nP.toString = function () {\r\n  return stringify$2(this);\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Big.\r\n * Return exponential notation if this Big has a positive exponent equal to or greater than\r\n * Big.PE, or a negative exponent equal to or less than Big.NE.\r\n * Include the sign for negative zero.\r\n */\r\nP.valueOf = P.toJSON = function () {\r\n  return stringify$2(this, 4);\r\n};\r\n\r\n\r\n// Export\r\n\r\n\r\nvar Big = _Big_();\n\nvar big = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tBig: Big,\n\tdefault: Big\n});\n\nvar require$$0 = /*@__PURE__*/getAugmentedNamespace(big);\n\nconst baseEncodeTables = {\n  26: 'abcdefghijklmnopqrstuvwxyz',\n  32: '123456789abcdefghjkmnpqrstuvwxyz', // no 0lio\n  36: '0123456789abcdefghijklmnopqrstuvwxyz',\n  49: 'abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ', // no lIO\n  52: 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',\n  58: '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ', // no 0lIO\n  62: '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',\n  64: '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_',\n};\n\nfunction encodeBufferToBase(buffer, base) {\n  const encodeTable = baseEncodeTables[base];\n  if (!encodeTable) {\n    throw new Error('Unknown encoding base' + base);\n  }\n\n  const readLength = buffer.length;\n  const Big = require$$0;\n\n  Big.RM = Big.DP = 0;\n  let b = new Big(0);\n\n  for (let i = readLength - 1; i >= 0; i--) {\n    b = b.times(256).plus(buffer[i]);\n  }\n\n  let output = '';\n  while (b.gt(0)) {\n    output = encodeTable[b.mod(base)] + output;\n    b = b.div(base);\n  }\n\n  Big.DP = 20;\n  Big.RM = 1;\n\n  return output;\n}\n\nfunction getHashDigest$2(buffer, hashType, digestType, maxLength) {\n  hashType = hashType || 'md5';\n  maxLength = maxLength || 9999;\n\n  const hash = require('crypto').createHash(hashType);\n\n  hash.update(buffer);\n\n  if (\n    digestType === 'base26' ||\n    digestType === 'base32' ||\n    digestType === 'base36' ||\n    digestType === 'base49' ||\n    digestType === 'base52' ||\n    digestType === 'base58' ||\n    digestType === 'base62' ||\n    digestType === 'base64'\n  ) {\n    return encodeBufferToBase(hash.digest(), digestType.substr(4)).substr(\n      0,\n      maxLength\n    );\n  } else {\n    return hash.digest(digestType || 'hex').substr(0, maxLength);\n  }\n}\n\nvar getHashDigest_1 = getHashDigest$2;\n\nvar emojisList$1 = [\n  \"🀄️\",\n  \"🃏\",\n  \"🅰️\",\n  \"🅱️\",\n  \"🅾️\",\n  \"🅿️\",\n  \"🆎\",\n  \"🆑\",\n  \"🆒\",\n  \"🆓\",\n  \"🆔\",\n  \"🆕\",\n  \"🆖\",\n  \"🆗\",\n  \"🆘\",\n  \"🆙\",\n  \"🆚\",\n  \"🇦🇨\",\n  \"🇦🇩\",\n  \"🇦🇪\",\n  \"🇦🇫\",\n  \"🇦🇬\",\n  \"🇦🇮\",\n  \"🇦🇱\",\n  \"🇦🇲\",\n  \"🇦🇴\",\n  \"🇦🇶\",\n  \"🇦🇷\",\n  \"🇦🇸\",\n  \"🇦🇹\",\n  \"🇦🇺\",\n  \"🇦🇼\",\n  \"🇦🇽\",\n  \"🇦🇿\",\n  \"🇦\",\n  \"🇧🇦\",\n  \"🇧🇧\",\n  \"🇧🇩\",\n  \"🇧🇪\",\n  \"🇧🇫\",\n  \"🇧🇬\",\n  \"🇧🇭\",\n  \"🇧🇮\",\n  \"🇧🇯\",\n  \"🇧🇱\",\n  \"🇧🇲\",\n  \"🇧🇳\",\n  \"🇧🇴\",\n  \"🇧🇶\",\n  \"🇧🇷\",\n  \"🇧🇸\",\n  \"🇧🇹\",\n  \"🇧🇻\",\n  \"🇧🇼\",\n  \"🇧🇾\",\n  \"🇧🇿\",\n  \"🇧\",\n  \"🇨🇦\",\n  \"🇨🇨\",\n  \"🇨🇩\",\n  \"🇨🇫\",\n  \"🇨🇬\",\n  \"🇨🇭\",\n  \"🇨🇮\",\n  \"🇨🇰\",\n  \"🇨🇱\",\n  \"🇨🇲\",\n  \"🇨🇳\",\n  \"🇨🇴\",\n  \"🇨🇵\",\n  \"🇨🇷\",\n  \"🇨🇺\",\n  \"🇨🇻\",\n  \"🇨🇼\",\n  \"🇨🇽\",\n  \"🇨🇾\",\n  \"🇨🇿\",\n  \"🇨\",\n  \"🇩🇪\",\n  \"🇩🇬\",\n  \"🇩🇯\",\n  \"🇩🇰\",\n  \"🇩🇲\",\n  \"🇩🇴\",\n  \"🇩🇿\",\n  \"🇩\",\n  \"🇪🇦\",\n  \"🇪🇨\",\n  \"🇪🇪\",\n  \"🇪🇬\",\n  \"🇪🇭\",\n  \"🇪🇷\",\n  \"🇪🇸\",\n  \"🇪🇹\",\n  \"🇪🇺\",\n  \"🇪\",\n  \"🇫🇮\",\n  \"🇫🇯\",\n  \"🇫🇰\",\n  \"🇫🇲\",\n  \"🇫🇴\",\n  \"🇫🇷\",\n  \"🇫\",\n  \"🇬🇦\",\n  \"🇬🇧\",\n  \"🇬🇩\",\n  \"🇬🇪\",\n  \"🇬🇫\",\n  \"🇬🇬\",\n  \"🇬🇭\",\n  \"🇬🇮\",\n  \"🇬🇱\",\n  \"🇬🇲\",\n  \"🇬🇳\",\n  \"🇬🇵\",\n  \"🇬🇶\",\n  \"🇬🇷\",\n  \"🇬🇸\",\n  \"🇬🇹\",\n  \"🇬🇺\",\n  \"🇬🇼\",\n  \"🇬🇾\",\n  \"🇬\",\n  \"🇭🇰\",\n  \"🇭🇲\",\n  \"🇭🇳\",\n  \"🇭🇷\",\n  \"🇭🇹\",\n  \"🇭🇺\",\n  \"🇭\",\n  \"🇮🇨\",\n  \"🇮🇩\",\n  \"🇮🇪\",\n  \"🇮🇱\",\n  \"🇮🇲\",\n  \"🇮🇳\",\n  \"🇮🇴\",\n  \"🇮🇶\",\n  \"🇮🇷\",\n  \"🇮🇸\",\n  \"🇮🇹\",\n  \"🇮\",\n  \"🇯🇪\",\n  \"🇯🇲\",\n  \"🇯🇴\",\n  \"🇯🇵\",\n  \"🇯\",\n  \"🇰🇪\",\n  \"🇰🇬\",\n  \"🇰🇭\",\n  \"🇰🇮\",\n  \"🇰🇲\",\n  \"🇰🇳\",\n  \"🇰🇵\",\n  \"🇰🇷\",\n  \"🇰🇼\",\n  \"🇰🇾\",\n  \"🇰🇿\",\n  \"🇰\",\n  \"🇱🇦\",\n  \"🇱🇧\",\n  \"🇱🇨\",\n  \"🇱🇮\",\n  \"🇱🇰\",\n  \"🇱🇷\",\n  \"🇱🇸\",\n  \"🇱🇹\",\n  \"🇱🇺\",\n  \"🇱🇻\",\n  \"🇱🇾\",\n  \"🇱\",\n  \"🇲🇦\",\n  \"🇲🇨\",\n  \"🇲🇩\",\n  \"🇲🇪\",\n  \"🇲🇫\",\n  \"🇲🇬\",\n  \"🇲🇭\",\n  \"🇲🇰\",\n  \"🇲🇱\",\n  \"🇲🇲\",\n  \"🇲🇳\",\n  \"🇲🇴\",\n  \"🇲🇵\",\n  \"🇲🇶\",\n  \"🇲🇷\",\n  \"🇲🇸\",\n  \"🇲🇹\",\n  \"🇲🇺\",\n  \"🇲🇻\",\n  \"🇲🇼\",\n  \"🇲🇽\",\n  \"🇲🇾\",\n  \"🇲🇿\",\n  \"🇲\",\n  \"🇳🇦\",\n  \"🇳🇨\",\n  \"🇳🇪\",\n  \"🇳🇫\",\n  \"🇳🇬\",\n  \"🇳🇮\",\n  \"🇳🇱\",\n  \"🇳🇴\",\n  \"🇳🇵\",\n  \"🇳🇷\",\n  \"🇳🇺\",\n  \"🇳🇿\",\n  \"🇳\",\n  \"🇴🇲\",\n  \"🇴\",\n  \"🇵🇦\",\n  \"🇵🇪\",\n  \"🇵🇫\",\n  \"🇵🇬\",\n  \"🇵🇭\",\n  \"🇵🇰\",\n  \"🇵🇱\",\n  \"🇵🇲\",\n  \"🇵🇳\",\n  \"🇵🇷\",\n  \"🇵🇸\",\n  \"🇵🇹\",\n  \"🇵🇼\",\n  \"🇵🇾\",\n  \"🇵\",\n  \"🇶🇦\",\n  \"🇶\",\n  \"🇷🇪\",\n  \"🇷🇴\",\n  \"🇷🇸\",\n  \"🇷🇺\",\n  \"🇷🇼\",\n  \"🇷\",\n  \"🇸🇦\",\n  \"🇸🇧\",\n  \"🇸🇨\",\n  \"🇸🇩\",\n  \"🇸🇪\",\n  \"🇸🇬\",\n  \"🇸🇭\",\n  \"🇸🇮\",\n  \"🇸🇯\",\n  \"🇸🇰\",\n  \"🇸🇱\",\n  \"🇸🇲\",\n  \"🇸🇳\",\n  \"🇸🇴\",\n  \"🇸🇷\",\n  \"🇸🇸\",\n  \"🇸🇹\",\n  \"🇸🇻\",\n  \"🇸🇽\",\n  \"🇸🇾\",\n  \"🇸🇿\",\n  \"🇸\",\n  \"🇹🇦\",\n  \"🇹🇨\",\n  \"🇹🇩\",\n  \"🇹🇫\",\n  \"🇹🇬\",\n  \"🇹🇭\",\n  \"🇹🇯\",\n  \"🇹🇰\",\n  \"🇹🇱\",\n  \"🇹🇲\",\n  \"🇹🇳\",\n  \"🇹🇴\",\n  \"🇹🇷\",\n  \"🇹🇹\",\n  \"🇹🇻\",\n  \"🇹🇼\",\n  \"🇹🇿\",\n  \"🇹\",\n  \"🇺🇦\",\n  \"🇺🇬\",\n  \"🇺🇲\",\n  \"🇺🇳\",\n  \"🇺🇸\",\n  \"🇺🇾\",\n  \"🇺🇿\",\n  \"🇺\",\n  \"🇻🇦\",\n  \"🇻🇨\",\n  \"🇻🇪\",\n  \"🇻🇬\",\n  \"🇻🇮\",\n  \"🇻🇳\",\n  \"🇻🇺\",\n  \"🇻\",\n  \"🇼🇫\",\n  \"🇼🇸\",\n  \"🇼\",\n  \"🇽🇰\",\n  \"🇽\",\n  \"🇾🇪\",\n  \"🇾🇹\",\n  \"🇾\",\n  \"🇿🇦\",\n  \"🇿🇲\",\n  \"🇿🇼\",\n  \"🇿\",\n  \"🈁\",\n  \"🈂️\",\n  \"🈚️\",\n  \"🈯️\",\n  \"🈲\",\n  \"🈳\",\n  \"🈴\",\n  \"🈵\",\n  \"🈶\",\n  \"🈷️\",\n  \"🈸\",\n  \"🈹\",\n  \"🈺\",\n  \"🉐\",\n  \"🉑\",\n  \"🌀\",\n  \"🌁\",\n  \"🌂\",\n  \"🌃\",\n  \"🌄\",\n  \"🌅\",\n  \"🌆\",\n  \"🌇\",\n  \"🌈\",\n  \"🌉\",\n  \"🌊\",\n  \"🌋\",\n  \"🌌\",\n  \"🌍\",\n  \"🌎\",\n  \"🌏\",\n  \"🌐\",\n  \"🌑\",\n  \"🌒\",\n  \"🌓\",\n  \"🌔\",\n  \"🌕\",\n  \"🌖\",\n  \"🌗\",\n  \"🌘\",\n  \"🌙\",\n  \"🌚\",\n  \"🌛\",\n  \"🌜\",\n  \"🌝\",\n  \"🌞\",\n  \"🌟\",\n  \"🌠\",\n  \"🌡️\",\n  \"🌤️\",\n  \"🌥️\",\n  \"🌦️\",\n  \"🌧️\",\n  \"🌨️\",\n  \"🌩️\",\n  \"🌪️\",\n  \"🌫️\",\n  \"🌬️\",\n  \"🌭\",\n  \"🌮\",\n  \"🌯\",\n  \"🌰\",\n  \"🌱\",\n  \"🌲\",\n  \"🌳\",\n  \"🌴\",\n  \"🌵\",\n  \"🌶️\",\n  \"🌷\",\n  \"🌸\",\n  \"🌹\",\n  \"🌺\",\n  \"🌻\",\n  \"🌼\",\n  \"🌽\",\n  \"🌾\",\n  \"🌿\",\n  \"🍀\",\n  \"🍁\",\n  \"🍂\",\n  \"🍃\",\n  \"🍄\",\n  \"🍅\",\n  \"🍆\",\n  \"🍇\",\n  \"🍈\",\n  \"🍉\",\n  \"🍊\",\n  \"🍋\",\n  \"🍌\",\n  \"🍍\",\n  \"🍎\",\n  \"🍏\",\n  \"🍐\",\n  \"🍑\",\n  \"🍒\",\n  \"🍓\",\n  \"🍔\",\n  \"🍕\",\n  \"🍖\",\n  \"🍗\",\n  \"🍘\",\n  \"🍙\",\n  \"🍚\",\n  \"🍛\",\n  \"🍜\",\n  \"🍝\",\n  \"🍞\",\n  \"🍟\",\n  \"🍠\",\n  \"🍡\",\n  \"🍢\",\n  \"🍣\",\n  \"🍤\",\n  \"🍥\",\n  \"🍦\",\n  \"🍧\",\n  \"🍨\",\n  \"🍩\",\n  \"🍪\",\n  \"🍫\",\n  \"🍬\",\n  \"🍭\",\n  \"🍮\",\n  \"🍯\",\n  \"🍰\",\n  \"🍱\",\n  \"🍲\",\n  \"🍳\",\n  \"🍴\",\n  \"🍵\",\n  \"🍶\",\n  \"🍷\",\n  \"🍸\",\n  \"🍹\",\n  \"🍺\",\n  \"🍻\",\n  \"🍼\",\n  \"🍽️\",\n  \"🍾\",\n  \"🍿\",\n  \"🎀\",\n  \"🎁\",\n  \"🎂\",\n  \"🎃\",\n  \"🎄\",\n  \"🎅🏻\",\n  \"🎅🏼\",\n  \"🎅🏽\",\n  \"🎅🏾\",\n  \"🎅🏿\",\n  \"🎅\",\n  \"🎆\",\n  \"🎇\",\n  \"🎈\",\n  \"🎉\",\n  \"🎊\",\n  \"🎋\",\n  \"🎌\",\n  \"🎍\",\n  \"🎎\",\n  \"🎏\",\n  \"🎐\",\n  \"🎑\",\n  \"🎒\",\n  \"🎓\",\n  \"🎖️\",\n  \"🎗️\",\n  \"🎙️\",\n  \"🎚️\",\n  \"🎛️\",\n  \"🎞️\",\n  \"🎟️\",\n  \"🎠\",\n  \"🎡\",\n  \"🎢\",\n  \"🎣\",\n  \"🎤\",\n  \"🎥\",\n  \"🎦\",\n  \"🎧\",\n  \"🎨\",\n  \"🎩\",\n  \"🎪\",\n  \"🎫\",\n  \"🎬\",\n  \"🎭\",\n  \"🎮\",\n  \"🎯\",\n  \"🎰\",\n  \"🎱\",\n  \"🎲\",\n  \"🎳\",\n  \"🎴\",\n  \"🎵\",\n  \"🎶\",\n  \"🎷\",\n  \"🎸\",\n  \"🎹\",\n  \"🎺\",\n  \"🎻\",\n  \"🎼\",\n  \"🎽\",\n  \"🎾\",\n  \"🎿\",\n  \"🏀\",\n  \"🏁\",\n  \"🏂🏻\",\n  \"🏂🏼\",\n  \"🏂🏽\",\n  \"🏂🏾\",\n  \"🏂🏿\",\n  \"🏂\",\n  \"🏃🏻‍♀️\",\n  \"🏃🏻‍♂️\",\n  \"🏃🏻\",\n  \"🏃🏼‍♀️\",\n  \"🏃🏼‍♂️\",\n  \"🏃🏼\",\n  \"🏃🏽‍♀️\",\n  \"🏃🏽‍♂️\",\n  \"🏃🏽\",\n  \"🏃🏾‍♀️\",\n  \"🏃🏾‍♂️\",\n  \"🏃🏾\",\n  \"🏃🏿‍♀️\",\n  \"🏃🏿‍♂️\",\n  \"🏃🏿\",\n  \"🏃‍♀️\",\n  \"🏃‍♂️\",\n  \"🏃\",\n  \"🏄🏻‍♀️\",\n  \"🏄🏻‍♂️\",\n  \"🏄🏻\",\n  \"🏄🏼‍♀️\",\n  \"🏄🏼‍♂️\",\n  \"🏄🏼\",\n  \"🏄🏽‍♀️\",\n  \"🏄🏽‍♂️\",\n  \"🏄🏽\",\n  \"🏄🏾‍♀️\",\n  \"🏄🏾‍♂️\",\n  \"🏄🏾\",\n  \"🏄🏿‍♀️\",\n  \"🏄🏿‍♂️\",\n  \"🏄🏿\",\n  \"🏄‍♀️\",\n  \"🏄‍♂️\",\n  \"🏄\",\n  \"🏅\",\n  \"🏆\",\n  \"🏇🏻\",\n  \"🏇🏼\",\n  \"🏇🏽\",\n  \"🏇🏾\",\n  \"🏇🏿\",\n  \"🏇\",\n  \"🏈\",\n  \"🏉\",\n  \"🏊🏻‍♀️\",\n  \"🏊🏻‍♂️\",\n  \"🏊🏻\",\n  \"🏊🏼‍♀️\",\n  \"🏊🏼‍♂️\",\n  \"🏊🏼\",\n  \"🏊🏽‍♀️\",\n  \"🏊🏽‍♂️\",\n  \"🏊🏽\",\n  \"🏊🏾‍♀️\",\n  \"🏊🏾‍♂️\",\n  \"🏊🏾\",\n  \"🏊🏿‍♀️\",\n  \"🏊🏿‍♂️\",\n  \"🏊🏿\",\n  \"🏊‍♀️\",\n  \"🏊‍♂️\",\n  \"🏊\",\n  \"🏋🏻‍♀️\",\n  \"🏋🏻‍♂️\",\n  \"🏋🏻\",\n  \"🏋🏼‍♀️\",\n  \"🏋🏼‍♂️\",\n  \"🏋🏼\",\n  \"🏋🏽‍♀️\",\n  \"🏋🏽‍♂️\",\n  \"🏋🏽\",\n  \"🏋🏾‍♀️\",\n  \"🏋🏾‍♂️\",\n  \"🏋🏾\",\n  \"🏋🏿‍♀️\",\n  \"🏋🏿‍♂️\",\n  \"🏋🏿\",\n  \"🏋️‍♀️\",\n  \"🏋️‍♂️\",\n  \"🏋️\",\n  \"🏌🏻‍♀️\",\n  \"🏌🏻‍♂️\",\n  \"🏌🏻\",\n  \"🏌🏼‍♀️\",\n  \"🏌🏼‍♂️\",\n  \"🏌🏼\",\n  \"🏌🏽‍♀️\",\n  \"🏌🏽‍♂️\",\n  \"🏌🏽\",\n  \"🏌🏾‍♀️\",\n  \"🏌🏾‍♂️\",\n  \"🏌🏾\",\n  \"🏌🏿‍♀️\",\n  \"🏌🏿‍♂️\",\n  \"🏌🏿\",\n  \"🏌️‍♀️\",\n  \"🏌️‍♂️\",\n  \"🏌️\",\n  \"🏍️\",\n  \"🏎️\",\n  \"🏏\",\n  \"🏐\",\n  \"🏑\",\n  \"🏒\",\n  \"🏓\",\n  \"🏔️\",\n  \"🏕️\",\n  \"🏖️\",\n  \"🏗️\",\n  \"🏘️\",\n  \"🏙️\",\n  \"🏚️\",\n  \"🏛️\",\n  \"🏜️\",\n  \"🏝️\",\n  \"🏞️\",\n  \"🏟️\",\n  \"🏠\",\n  \"🏡\",\n  \"🏢\",\n  \"🏣\",\n  \"🏤\",\n  \"🏥\",\n  \"🏦\",\n  \"🏧\",\n  \"🏨\",\n  \"🏩\",\n  \"🏪\",\n  \"🏫\",\n  \"🏬\",\n  \"🏭\",\n  \"🏮\",\n  \"🏯\",\n  \"🏰\",\n  \"🏳️‍🌈\",\n  \"🏳️\",\n  \"🏴‍☠️\",\n  \"🏴󠁧󠁢󠁥󠁮󠁧󠁿\",\n  \"🏴󠁧󠁢󠁳󠁣󠁴󠁿\",\n  \"🏴󠁧󠁢󠁷󠁬󠁳󠁿\",\n  \"🏴\",\n  \"🏵️\",\n  \"🏷️\",\n  \"🏸\",\n  \"🏹\",\n  \"🏺\",\n  \"🏻\",\n  \"🏼\",\n  \"🏽\",\n  \"🏾\",\n  \"🏿\",\n  \"🐀\",\n  \"🐁\",\n  \"🐂\",\n  \"🐃\",\n  \"🐄\",\n  \"🐅\",\n  \"🐆\",\n  \"🐇\",\n  \"🐈\",\n  \"🐉\",\n  \"🐊\",\n  \"🐋\",\n  \"🐌\",\n  \"🐍\",\n  \"🐎\",\n  \"🐏\",\n  \"🐐\",\n  \"🐑\",\n  \"🐒\",\n  \"🐓\",\n  \"🐔\",\n  \"🐕‍🦺\",\n  \"🐕\",\n  \"🐖\",\n  \"🐗\",\n  \"🐘\",\n  \"🐙\",\n  \"🐚\",\n  \"🐛\",\n  \"🐜\",\n  \"🐝\",\n  \"🐞\",\n  \"🐟\",\n  \"🐠\",\n  \"🐡\",\n  \"🐢\",\n  \"🐣\",\n  \"🐤\",\n  \"🐥\",\n  \"🐦\",\n  \"🐧\",\n  \"🐨\",\n  \"🐩\",\n  \"🐪\",\n  \"🐫\",\n  \"🐬\",\n  \"🐭\",\n  \"🐮\",\n  \"🐯\",\n  \"🐰\",\n  \"🐱\",\n  \"🐲\",\n  \"🐳\",\n  \"🐴\",\n  \"🐵\",\n  \"🐶\",\n  \"🐷\",\n  \"🐸\",\n  \"🐹\",\n  \"🐺\",\n  \"🐻\",\n  \"🐼\",\n  \"🐽\",\n  \"🐾\",\n  \"🐿️\",\n  \"👀\",\n  \"👁‍🗨\",\n  \"👁️\",\n  \"👂🏻\",\n  \"👂🏼\",\n  \"👂🏽\",\n  \"👂🏾\",\n  \"👂🏿\",\n  \"👂\",\n  \"👃🏻\",\n  \"👃🏼\",\n  \"👃🏽\",\n  \"👃🏾\",\n  \"👃🏿\",\n  \"👃\",\n  \"👄\",\n  \"👅\",\n  \"👆🏻\",\n  \"👆🏼\",\n  \"👆🏽\",\n  \"👆🏾\",\n  \"👆🏿\",\n  \"👆\",\n  \"👇🏻\",\n  \"👇🏼\",\n  \"👇🏽\",\n  \"👇🏾\",\n  \"👇🏿\",\n  \"👇\",\n  \"👈🏻\",\n  \"👈🏼\",\n  \"👈🏽\",\n  \"👈🏾\",\n  \"👈🏿\",\n  \"👈\",\n  \"👉🏻\",\n  \"👉🏼\",\n  \"👉🏽\",\n  \"👉🏾\",\n  \"👉🏿\",\n  \"👉\",\n  \"👊🏻\",\n  \"👊🏼\",\n  \"👊🏽\",\n  \"👊🏾\",\n  \"👊🏿\",\n  \"👊\",\n  \"👋🏻\",\n  \"👋🏼\",\n  \"👋🏽\",\n  \"👋🏾\",\n  \"👋🏿\",\n  \"👋\",\n  \"👌🏻\",\n  \"👌🏼\",\n  \"👌🏽\",\n  \"👌🏾\",\n  \"👌🏿\",\n  \"👌\",\n  \"👍🏻\",\n  \"👍🏼\",\n  \"👍🏽\",\n  \"👍🏾\",\n  \"👍🏿\",\n  \"👍\",\n  \"👎🏻\",\n  \"👎🏼\",\n  \"👎🏽\",\n  \"👎🏾\",\n  \"👎🏿\",\n  \"👎\",\n  \"👏🏻\",\n  \"👏🏼\",\n  \"👏🏽\",\n  \"👏🏾\",\n  \"👏🏿\",\n  \"👏\",\n  \"👐🏻\",\n  \"👐🏼\",\n  \"👐🏽\",\n  \"👐🏾\",\n  \"👐🏿\",\n  \"👐\",\n  \"👑\",\n  \"👒\",\n  \"👓\",\n  \"👔\",\n  \"👕\",\n  \"👖\",\n  \"👗\",\n  \"👘\",\n  \"👙\",\n  \"👚\",\n  \"👛\",\n  \"👜\",\n  \"👝\",\n  \"👞\",\n  \"👟\",\n  \"👠\",\n  \"👡\",\n  \"👢\",\n  \"👣\",\n  \"👤\",\n  \"👥\",\n  \"👦🏻\",\n  \"👦🏼\",\n  \"👦🏽\",\n  \"👦🏾\",\n  \"👦🏿\",\n  \"👦\",\n  \"👧🏻\",\n  \"👧🏼\",\n  \"👧🏽\",\n  \"👧🏾\",\n  \"👧🏿\",\n  \"👧\",\n  \"👨🏻‍🌾\",\n  \"👨🏻‍🍳\",\n  \"👨🏻‍🎓\",\n  \"👨🏻‍🎤\",\n  \"👨🏻‍🎨\",\n  \"👨🏻‍🏫\",\n  \"👨🏻‍🏭\",\n  \"👨🏻‍💻\",\n  \"👨🏻‍💼\",\n  \"👨🏻‍🔧\",\n  \"👨🏻‍🔬\",\n  \"👨🏻‍🚀\",\n  \"👨🏻‍🚒\",\n  \"👨🏻‍🦯\",\n  \"👨🏻‍🦰\",\n  \"👨🏻‍🦱\",\n  \"👨🏻‍🦲\",\n  \"👨🏻‍🦳\",\n  \"👨🏻‍🦼\",\n  \"👨🏻‍🦽\",\n  \"👨🏻‍⚕️\",\n  \"👨🏻‍⚖️\",\n  \"👨🏻‍✈️\",\n  \"👨🏻\",\n  \"👨🏼‍🌾\",\n  \"👨🏼‍🍳\",\n  \"👨🏼‍🎓\",\n  \"👨🏼‍🎤\",\n  \"👨🏼‍🎨\",\n  \"👨🏼‍🏫\",\n  \"👨🏼‍🏭\",\n  \"👨🏼‍💻\",\n  \"👨🏼‍💼\",\n  \"👨🏼‍🔧\",\n  \"👨🏼‍🔬\",\n  \"👨🏼‍🚀\",\n  \"👨🏼‍🚒\",\n  \"👨🏼‍🤝‍👨🏻\",\n  \"👨🏼‍🦯\",\n  \"👨🏼‍🦰\",\n  \"👨🏼‍🦱\",\n  \"👨🏼‍🦲\",\n  \"👨🏼‍🦳\",\n  \"👨🏼‍🦼\",\n  \"👨🏼‍🦽\",\n  \"👨🏼‍⚕️\",\n  \"👨🏼‍⚖️\",\n  \"👨🏼‍✈️\",\n  \"👨🏼\",\n  \"👨🏽‍🌾\",\n  \"👨🏽‍🍳\",\n  \"👨🏽‍🎓\",\n  \"👨🏽‍🎤\",\n  \"👨🏽‍🎨\",\n  \"👨🏽‍🏫\",\n  \"👨🏽‍🏭\",\n  \"👨🏽‍💻\",\n  \"👨🏽‍💼\",\n  \"👨🏽‍🔧\",\n  \"👨🏽‍🔬\",\n  \"👨🏽‍🚀\",\n  \"👨🏽‍🚒\",\n  \"👨🏽‍🤝‍👨🏻\",\n  \"👨🏽‍🤝‍👨🏼\",\n  \"👨🏽‍🦯\",\n  \"👨🏽‍🦰\",\n  \"👨🏽‍🦱\",\n  \"👨🏽‍🦲\",\n  \"👨🏽‍🦳\",\n  \"👨🏽‍🦼\",\n  \"👨🏽‍🦽\",\n  \"👨🏽‍⚕️\",\n  \"👨🏽‍⚖️\",\n  \"👨🏽‍✈️\",\n  \"👨🏽\",\n  \"👨🏾‍🌾\",\n  \"👨🏾‍🍳\",\n  \"👨🏾‍🎓\",\n  \"👨🏾‍🎤\",\n  \"👨🏾‍🎨\",\n  \"👨🏾‍🏫\",\n  \"👨🏾‍🏭\",\n  \"👨🏾‍💻\",\n  \"👨🏾‍💼\",\n  \"👨🏾‍🔧\",\n  \"👨🏾‍🔬\",\n  \"👨🏾‍🚀\",\n  \"👨🏾‍🚒\",\n  \"👨🏾‍🤝‍👨🏻\",\n  \"👨🏾‍🤝‍👨🏼\",\n  \"👨🏾‍🤝‍👨🏽\",\n  \"👨🏾‍🦯\",\n  \"👨🏾‍🦰\",\n  \"👨🏾‍🦱\",\n  \"👨🏾‍🦲\",\n  \"👨🏾‍🦳\",\n  \"👨🏾‍🦼\",\n  \"👨🏾‍🦽\",\n  \"👨🏾‍⚕️\",\n  \"👨🏾‍⚖️\",\n  \"👨🏾‍✈️\",\n  \"👨🏾\",\n  \"👨🏿‍🌾\",\n  \"👨🏿‍🍳\",\n  \"👨🏿‍🎓\",\n  \"👨🏿‍🎤\",\n  \"👨🏿‍🎨\",\n  \"👨🏿‍🏫\",\n  \"👨🏿‍🏭\",\n  \"👨🏿‍💻\",\n  \"👨🏿‍💼\",\n  \"👨🏿‍🔧\",\n  \"👨🏿‍🔬\",\n  \"👨🏿‍🚀\",\n  \"👨🏿‍🚒\",\n  \"👨🏿‍🤝‍👨🏻\",\n  \"👨🏿‍🤝‍👨🏼\",\n  \"👨🏿‍🤝‍👨🏽\",\n  \"👨🏿‍🤝‍👨🏾\",\n  \"👨🏿‍🦯\",\n  \"👨🏿‍🦰\",\n  \"👨🏿‍🦱\",\n  \"👨🏿‍🦲\",\n  \"👨🏿‍🦳\",\n  \"👨🏿‍🦼\",\n  \"👨🏿‍🦽\",\n  \"👨🏿‍⚕️\",\n  \"👨🏿‍⚖️\",\n  \"👨🏿‍✈️\",\n  \"👨🏿\",\n  \"👨‍🌾\",\n  \"👨‍🍳\",\n  \"👨‍🎓\",\n  \"👨‍🎤\",\n  \"👨‍🎨\",\n  \"👨‍🏫\",\n  \"👨‍🏭\",\n  \"👨‍👦‍👦\",\n  \"👨‍👦\",\n  \"👨‍👧‍👦\",\n  \"👨‍👧‍👧\",\n  \"👨‍👧\",\n  \"👨‍👨‍👦‍👦\",\n  \"👨‍👨‍👦\",\n  \"👨‍👨‍👧‍👦\",\n  \"👨‍👨‍👧‍👧\",\n  \"👨‍👨‍👧\",\n  \"👨‍👩‍👦‍👦\",\n  \"👨‍👩‍👦\",\n  \"👨‍👩‍👧‍👦\",\n  \"👨‍👩‍👧‍👧\",\n  \"👨‍👩‍👧\",\n  \"👨‍💻\",\n  \"👨‍💼\",\n  \"👨‍🔧\",\n  \"👨‍🔬\",\n  \"👨‍🚀\",\n  \"👨‍🚒\",\n  \"👨‍🦯\",\n  \"👨‍🦰\",\n  \"👨‍🦱\",\n  \"👨‍🦲\",\n  \"👨‍🦳\",\n  \"👨‍🦼\",\n  \"👨‍🦽\",\n  \"👨‍⚕️\",\n  \"👨‍⚖️\",\n  \"👨‍✈️\",\n  \"👨‍❤️‍👨\",\n  \"👨‍❤️‍💋‍👨\",\n  \"👨\",\n  \"👩🏻‍🌾\",\n  \"👩🏻‍🍳\",\n  \"👩🏻‍🎓\",\n  \"👩🏻‍🎤\",\n  \"👩🏻‍🎨\",\n  \"👩🏻‍🏫\",\n  \"👩🏻‍🏭\",\n  \"👩🏻‍💻\",\n  \"👩🏻‍💼\",\n  \"👩🏻‍🔧\",\n  \"👩🏻‍🔬\",\n  \"👩🏻‍🚀\",\n  \"👩🏻‍🚒\",\n  \"👩🏻‍🤝‍👨🏼\",\n  \"👩🏻‍🤝‍👨🏽\",\n  \"👩🏻‍🤝‍👨🏾\",\n  \"👩🏻‍🤝‍👨🏿\",\n  \"👩🏻‍🦯\",\n  \"👩🏻‍🦰\",\n  \"👩🏻‍🦱\",\n  \"👩🏻‍🦲\",\n  \"👩🏻‍🦳\",\n  \"👩🏻‍🦼\",\n  \"👩🏻‍🦽\",\n  \"👩🏻‍⚕️\",\n  \"👩🏻‍⚖️\",\n  \"👩🏻‍✈️\",\n  \"👩🏻\",\n  \"👩🏼‍🌾\",\n  \"👩🏼‍🍳\",\n  \"👩🏼‍🎓\",\n  \"👩🏼‍🎤\",\n  \"👩🏼‍🎨\",\n  \"👩🏼‍🏫\",\n  \"👩🏼‍🏭\",\n  \"👩🏼‍💻\",\n  \"👩🏼‍💼\",\n  \"👩🏼‍🔧\",\n  \"👩🏼‍🔬\",\n  \"👩🏼‍🚀\",\n  \"👩🏼‍🚒\",\n  \"👩🏼‍🤝‍👨🏻\",\n  \"👩🏼‍🤝‍👨🏽\",\n  \"👩🏼‍🤝‍👨🏾\",\n  \"👩🏼‍🤝‍👨🏿\",\n  \"👩🏼‍🤝‍👩🏻\",\n  \"👩🏼‍🦯\",\n  \"👩🏼‍🦰\",\n  \"👩🏼‍🦱\",\n  \"👩🏼‍🦲\",\n  \"👩🏼‍🦳\",\n  \"👩🏼‍🦼\",\n  \"👩🏼‍🦽\",\n  \"👩🏼‍⚕️\",\n  \"👩🏼‍⚖️\",\n  \"👩🏼‍✈️\",\n  \"👩🏼\",\n  \"👩🏽‍🌾\",\n  \"👩🏽‍🍳\",\n  \"👩🏽‍🎓\",\n  \"👩🏽‍🎤\",\n  \"👩🏽‍🎨\",\n  \"👩🏽‍🏫\",\n  \"👩🏽‍🏭\",\n  \"👩🏽‍💻\",\n  \"👩🏽‍💼\",\n  \"👩🏽‍🔧\",\n  \"👩🏽‍🔬\",\n  \"👩🏽‍🚀\",\n  \"👩🏽‍🚒\",\n  \"👩🏽‍🤝‍👨🏻\",\n  \"👩🏽‍🤝‍👨🏼\",\n  \"👩🏽‍🤝‍👨🏾\",\n  \"👩🏽‍🤝‍👨🏿\",\n  \"👩🏽‍🤝‍👩🏻\",\n  \"👩🏽‍🤝‍👩🏼\",\n  \"👩🏽‍🦯\",\n  \"👩🏽‍🦰\",\n  \"👩🏽‍🦱\",\n  \"👩🏽‍🦲\",\n  \"👩🏽‍🦳\",\n  \"👩🏽‍🦼\",\n  \"👩🏽‍🦽\",\n  \"👩🏽‍⚕️\",\n  \"👩🏽‍⚖️\",\n  \"👩🏽‍✈️\",\n  \"👩🏽\",\n  \"👩🏾‍🌾\",\n  \"👩🏾‍🍳\",\n  \"👩🏾‍🎓\",\n  \"👩🏾‍🎤\",\n  \"👩🏾‍🎨\",\n  \"👩🏾‍🏫\",\n  \"👩🏾‍🏭\",\n  \"👩🏾‍💻\",\n  \"👩🏾‍💼\",\n  \"👩🏾‍🔧\",\n  \"👩🏾‍🔬\",\n  \"👩🏾‍🚀\",\n  \"👩🏾‍🚒\",\n  \"👩🏾‍🤝‍👨🏻\",\n  \"👩🏾‍🤝‍👨🏼\",\n  \"👩🏾‍🤝‍👨🏽\",\n  \"👩🏾‍🤝‍👨🏿\",\n  \"👩🏾‍🤝‍👩🏻\",\n  \"👩🏾‍🤝‍👩🏼\",\n  \"👩🏾‍🤝‍👩🏽\",\n  \"👩🏾‍🦯\",\n  \"👩🏾‍🦰\",\n  \"👩🏾‍🦱\",\n  \"👩🏾‍🦲\",\n  \"👩🏾‍🦳\",\n  \"👩🏾‍🦼\",\n  \"👩🏾‍🦽\",\n  \"👩🏾‍⚕️\",\n  \"👩🏾‍⚖️\",\n  \"👩🏾‍✈️\",\n  \"👩🏾\",\n  \"👩🏿‍🌾\",\n  \"👩🏿‍🍳\",\n  \"👩🏿‍🎓\",\n  \"👩🏿‍🎤\",\n  \"👩🏿‍🎨\",\n  \"👩🏿‍🏫\",\n  \"👩🏿‍🏭\",\n  \"👩🏿‍💻\",\n  \"👩🏿‍💼\",\n  \"👩🏿‍🔧\",\n  \"👩🏿‍🔬\",\n  \"👩🏿‍🚀\",\n  \"👩🏿‍🚒\",\n  \"👩🏿‍🤝‍👨🏻\",\n  \"👩🏿‍🤝‍👨🏼\",\n  \"👩🏿‍🤝‍👨🏽\",\n  \"👩🏿‍🤝‍👨🏾\",\n  \"👩🏿‍🤝‍👩🏻\",\n  \"👩🏿‍🤝‍👩🏼\",\n  \"👩🏿‍🤝‍👩🏽\",\n  \"👩🏿‍🤝‍👩🏾\",\n  \"👩🏿‍🦯\",\n  \"👩🏿‍🦰\",\n  \"👩🏿‍🦱\",\n  \"👩🏿‍🦲\",\n  \"👩🏿‍🦳\",\n  \"👩🏿‍🦼\",\n  \"👩🏿‍🦽\",\n  \"👩🏿‍⚕️\",\n  \"👩🏿‍⚖️\",\n  \"👩🏿‍✈️\",\n  \"👩🏿\",\n  \"👩‍🌾\",\n  \"👩‍🍳\",\n  \"👩‍🎓\",\n  \"👩‍🎤\",\n  \"👩‍🎨\",\n  \"👩‍🏫\",\n  \"👩‍🏭\",\n  \"👩‍👦‍👦\",\n  \"👩‍👦\",\n  \"👩‍👧‍👦\",\n  \"👩‍👧‍👧\",\n  \"👩‍👧\",\n  \"👩‍👩‍👦‍👦\",\n  \"👩‍👩‍👦\",\n  \"👩‍👩‍👧‍👦\",\n  \"👩‍👩‍👧‍👧\",\n  \"👩‍👩‍👧\",\n  \"👩‍💻\",\n  \"👩‍💼\",\n  \"👩‍🔧\",\n  \"👩‍🔬\",\n  \"👩‍🚀\",\n  \"👩‍🚒\",\n  \"👩‍🦯\",\n  \"👩‍🦰\",\n  \"👩‍🦱\",\n  \"👩‍🦲\",\n  \"👩‍🦳\",\n  \"👩‍🦼\",\n  \"👩‍🦽\",\n  \"👩‍⚕️\",\n  \"👩‍⚖️\",\n  \"👩‍✈️\",\n  \"👩‍❤️‍👨\",\n  \"👩‍❤️‍👩\",\n  \"👩‍❤️‍💋‍👨\",\n  \"👩‍❤️‍💋‍👩\",\n  \"👩\",\n  \"👪\",\n  \"👫🏻\",\n  \"👫🏼\",\n  \"👫🏽\",\n  \"👫🏾\",\n  \"👫🏿\",\n  \"👫\",\n  \"👬🏻\",\n  \"👬🏼\",\n  \"👬🏽\",\n  \"👬🏾\",\n  \"👬🏿\",\n  \"👬\",\n  \"👭🏻\",\n  \"👭🏼\",\n  \"👭🏽\",\n  \"👭🏾\",\n  \"👭🏿\",\n  \"👭\",\n  \"👮🏻‍♀️\",\n  \"👮🏻‍♂️\",\n  \"👮🏻\",\n  \"👮🏼‍♀️\",\n  \"👮🏼‍♂️\",\n  \"👮🏼\",\n  \"👮🏽‍♀️\",\n  \"👮🏽‍♂️\",\n  \"👮🏽\",\n  \"👮🏾‍♀️\",\n  \"👮🏾‍♂️\",\n  \"👮🏾\",\n  \"👮🏿‍♀️\",\n  \"👮🏿‍♂️\",\n  \"👮🏿\",\n  \"👮‍♀️\",\n  \"👮‍♂️\",\n  \"👮\",\n  \"👯‍♀️\",\n  \"👯‍♂️\",\n  \"👯\",\n  \"👰🏻\",\n  \"👰🏼\",\n  \"👰🏽\",\n  \"👰🏾\",\n  \"👰🏿\",\n  \"👰\",\n  \"👱🏻‍♀️\",\n  \"👱🏻‍♂️\",\n  \"👱🏻\",\n  \"👱🏼‍♀️\",\n  \"👱🏼‍♂️\",\n  \"👱🏼\",\n  \"👱🏽‍♀️\",\n  \"👱🏽‍♂️\",\n  \"👱🏽\",\n  \"👱🏾‍♀️\",\n  \"👱🏾‍♂️\",\n  \"👱🏾\",\n  \"👱🏿‍♀️\",\n  \"👱🏿‍♂️\",\n  \"👱🏿\",\n  \"👱‍♀️\",\n  \"👱‍♂️\",\n  \"👱\",\n  \"👲🏻\",\n  \"👲🏼\",\n  \"👲🏽\",\n  \"👲🏾\",\n  \"👲🏿\",\n  \"👲\",\n  \"👳🏻‍♀️\",\n  \"👳🏻‍♂️\",\n  \"👳🏻\",\n  \"👳🏼‍♀️\",\n  \"👳🏼‍♂️\",\n  \"👳🏼\",\n  \"👳🏽‍♀️\",\n  \"👳🏽‍♂️\",\n  \"👳🏽\",\n  \"👳🏾‍♀️\",\n  \"👳🏾‍♂️\",\n  \"👳🏾\",\n  \"👳🏿‍♀️\",\n  \"👳🏿‍♂️\",\n  \"👳🏿\",\n  \"👳‍♀️\",\n  \"👳‍♂️\",\n  \"👳\",\n  \"👴🏻\",\n  \"👴🏼\",\n  \"👴🏽\",\n  \"👴🏾\",\n  \"👴🏿\",\n  \"👴\",\n  \"👵🏻\",\n  \"👵🏼\",\n  \"👵🏽\",\n  \"👵🏾\",\n  \"👵🏿\",\n  \"👵\",\n  \"👶🏻\",\n  \"👶🏼\",\n  \"👶🏽\",\n  \"👶🏾\",\n  \"👶🏿\",\n  \"👶\",\n  \"👷🏻‍♀️\",\n  \"👷🏻‍♂️\",\n  \"👷🏻\",\n  \"👷🏼‍♀️\",\n  \"👷🏼‍♂️\",\n  \"👷🏼\",\n  \"👷🏽‍♀️\",\n  \"👷🏽‍♂️\",\n  \"👷🏽\",\n  \"👷🏾‍♀️\",\n  \"👷🏾‍♂️\",\n  \"👷🏾\",\n  \"👷🏿‍♀️\",\n  \"👷🏿‍♂️\",\n  \"👷🏿\",\n  \"👷‍♀️\",\n  \"👷‍♂️\",\n  \"👷\",\n  \"👸🏻\",\n  \"👸🏼\",\n  \"👸🏽\",\n  \"👸🏾\",\n  \"👸🏿\",\n  \"👸\",\n  \"👹\",\n  \"👺\",\n  \"👻\",\n  \"👼🏻\",\n  \"👼🏼\",\n  \"👼🏽\",\n  \"👼🏾\",\n  \"👼🏿\",\n  \"👼\",\n  \"👽\",\n  \"👾\",\n  \"👿\",\n  \"💀\",\n  \"💁🏻‍♀️\",\n  \"💁🏻‍♂️\",\n  \"💁🏻\",\n  \"💁🏼‍♀️\",\n  \"💁🏼‍♂️\",\n  \"💁🏼\",\n  \"💁🏽‍♀️\",\n  \"💁🏽‍♂️\",\n  \"💁🏽\",\n  \"💁🏾‍♀️\",\n  \"💁🏾‍♂️\",\n  \"💁🏾\",\n  \"💁🏿‍♀️\",\n  \"💁🏿‍♂️\",\n  \"💁🏿\",\n  \"💁‍♀️\",\n  \"💁‍♂️\",\n  \"💁\",\n  \"💂🏻‍♀️\",\n  \"💂🏻‍♂️\",\n  \"💂🏻\",\n  \"💂🏼‍♀️\",\n  \"💂🏼‍♂️\",\n  \"💂🏼\",\n  \"💂🏽‍♀️\",\n  \"💂🏽‍♂️\",\n  \"💂🏽\",\n  \"💂🏾‍♀️\",\n  \"💂🏾‍♂️\",\n  \"💂🏾\",\n  \"💂🏿‍♀️\",\n  \"💂🏿‍♂️\",\n  \"💂🏿\",\n  \"💂‍♀️\",\n  \"💂‍♂️\",\n  \"💂\",\n  \"💃🏻\",\n  \"💃🏼\",\n  \"💃🏽\",\n  \"💃🏾\",\n  \"💃🏿\",\n  \"💃\",\n  \"💄\",\n  \"💅🏻\",\n  \"💅🏼\",\n  \"💅🏽\",\n  \"💅🏾\",\n  \"💅🏿\",\n  \"💅\",\n  \"💆🏻‍♀️\",\n  \"💆🏻‍♂️\",\n  \"💆🏻\",\n  \"💆🏼‍♀️\",\n  \"💆🏼‍♂️\",\n  \"💆🏼\",\n  \"💆🏽‍♀️\",\n  \"💆🏽‍♂️\",\n  \"💆🏽\",\n  \"💆🏾‍♀️\",\n  \"💆🏾‍♂️\",\n  \"💆🏾\",\n  \"💆🏿‍♀️\",\n  \"💆🏿‍♂️\",\n  \"💆🏿\",\n  \"💆‍♀️\",\n  \"💆‍♂️\",\n  \"💆\",\n  \"💇🏻‍♀️\",\n  \"💇🏻‍♂️\",\n  \"💇🏻\",\n  \"💇🏼‍♀️\",\n  \"💇🏼‍♂️\",\n  \"💇🏼\",\n  \"💇🏽‍♀️\",\n  \"💇🏽‍♂️\",\n  \"💇🏽\",\n  \"💇🏾‍♀️\",\n  \"💇🏾‍♂️\",\n  \"💇🏾\",\n  \"💇🏿‍♀️\",\n  \"💇🏿‍♂️\",\n  \"💇🏿\",\n  \"💇‍♀️\",\n  \"💇‍♂️\",\n  \"💇\",\n  \"💈\",\n  \"💉\",\n  \"💊\",\n  \"💋\",\n  \"💌\",\n  \"💍\",\n  \"💎\",\n  \"💏\",\n  \"💐\",\n  \"💑\",\n  \"💒\",\n  \"💓\",\n  \"💔\",\n  \"💕\",\n  \"💖\",\n  \"💗\",\n  \"💘\",\n  \"💙\",\n  \"💚\",\n  \"💛\",\n  \"💜\",\n  \"💝\",\n  \"💞\",\n  \"💟\",\n  \"💠\",\n  \"💡\",\n  \"💢\",\n  \"💣\",\n  \"💤\",\n  \"💥\",\n  \"💦\",\n  \"💧\",\n  \"💨\",\n  \"💩\",\n  \"💪🏻\",\n  \"💪🏼\",\n  \"💪🏽\",\n  \"💪🏾\",\n  \"💪🏿\",\n  \"💪\",\n  \"💫\",\n  \"💬\",\n  \"💭\",\n  \"💮\",\n  \"💯\",\n  \"💰\",\n  \"💱\",\n  \"💲\",\n  \"💳\",\n  \"💴\",\n  \"💵\",\n  \"💶\",\n  \"💷\",\n  \"💸\",\n  \"💹\",\n  \"💺\",\n  \"💻\",\n  \"💼\",\n  \"💽\",\n  \"💾\",\n  \"💿\",\n  \"📀\",\n  \"📁\",\n  \"📂\",\n  \"📃\",\n  \"📄\",\n  \"📅\",\n  \"📆\",\n  \"📇\",\n  \"📈\",\n  \"📉\",\n  \"📊\",\n  \"📋\",\n  \"📌\",\n  \"📍\",\n  \"📎\",\n  \"📏\",\n  \"📐\",\n  \"📑\",\n  \"📒\",\n  \"📓\",\n  \"📔\",\n  \"📕\",\n  \"📖\",\n  \"📗\",\n  \"📘\",\n  \"📙\",\n  \"📚\",\n  \"📛\",\n  \"📜\",\n  \"📝\",\n  \"📞\",\n  \"📟\",\n  \"📠\",\n  \"📡\",\n  \"📢\",\n  \"📣\",\n  \"📤\",\n  \"📥\",\n  \"📦\",\n  \"📧\",\n  \"📨\",\n  \"📩\",\n  \"📪\",\n  \"📫\",\n  \"📬\",\n  \"📭\",\n  \"📮\",\n  \"📯\",\n  \"📰\",\n  \"📱\",\n  \"📲\",\n  \"📳\",\n  \"📴\",\n  \"📵\",\n  \"📶\",\n  \"📷\",\n  \"📸\",\n  \"📹\",\n  \"📺\",\n  \"📻\",\n  \"📼\",\n  \"📽️\",\n  \"📿\",\n  \"🔀\",\n  \"🔁\",\n  \"🔂\",\n  \"🔃\",\n  \"🔄\",\n  \"🔅\",\n  \"🔆\",\n  \"🔇\",\n  \"🔈\",\n  \"🔉\",\n  \"🔊\",\n  \"🔋\",\n  \"🔌\",\n  \"🔍\",\n  \"🔎\",\n  \"🔏\",\n  \"🔐\",\n  \"🔑\",\n  \"🔒\",\n  \"🔓\",\n  \"🔔\",\n  \"🔕\",\n  \"🔖\",\n  \"🔗\",\n  \"🔘\",\n  \"🔙\",\n  \"🔚\",\n  \"🔛\",\n  \"🔜\",\n  \"🔝\",\n  \"🔞\",\n  \"🔟\",\n  \"🔠\",\n  \"🔡\",\n  \"🔢\",\n  \"🔣\",\n  \"🔤\",\n  \"🔥\",\n  \"🔦\",\n  \"🔧\",\n  \"🔨\",\n  \"🔩\",\n  \"🔪\",\n  \"🔫\",\n  \"🔬\",\n  \"🔭\",\n  \"🔮\",\n  \"🔯\",\n  \"🔰\",\n  \"🔱\",\n  \"🔲\",\n  \"🔳\",\n  \"🔴\",\n  \"🔵\",\n  \"🔶\",\n  \"🔷\",\n  \"🔸\",\n  \"🔹\",\n  \"🔺\",\n  \"🔻\",\n  \"🔼\",\n  \"🔽\",\n  \"🕉️\",\n  \"🕊️\",\n  \"🕋\",\n  \"🕌\",\n  \"🕍\",\n  \"🕎\",\n  \"🕐\",\n  \"🕑\",\n  \"🕒\",\n  \"🕓\",\n  \"🕔\",\n  \"🕕\",\n  \"🕖\",\n  \"🕗\",\n  \"🕘\",\n  \"🕙\",\n  \"🕚\",\n  \"🕛\",\n  \"🕜\",\n  \"🕝\",\n  \"🕞\",\n  \"🕟\",\n  \"🕠\",\n  \"🕡\",\n  \"🕢\",\n  \"🕣\",\n  \"🕤\",\n  \"🕥\",\n  \"🕦\",\n  \"🕧\",\n  \"🕯️\",\n  \"🕰️\",\n  \"🕳️\",\n  \"🕴🏻‍♀️\",\n  \"🕴🏻‍♂️\",\n  \"🕴🏻\",\n  \"🕴🏼‍♀️\",\n  \"🕴🏼‍♂️\",\n  \"🕴🏼\",\n  \"🕴🏽‍♀️\",\n  \"🕴🏽‍♂️\",\n  \"🕴🏽\",\n  \"🕴🏾‍♀️\",\n  \"🕴🏾‍♂️\",\n  \"🕴🏾\",\n  \"🕴🏿‍♀️\",\n  \"🕴🏿‍♂️\",\n  \"🕴🏿\",\n  \"🕴️‍♀️\",\n  \"🕴️‍♂️\",\n  \"🕴️\",\n  \"🕵🏻‍♀️\",\n  \"🕵🏻‍♂️\",\n  \"🕵🏻\",\n  \"🕵🏼‍♀️\",\n  \"🕵🏼‍♂️\",\n  \"🕵🏼\",\n  \"🕵🏽‍♀️\",\n  \"🕵🏽‍♂️\",\n  \"🕵🏽\",\n  \"🕵🏾‍♀️\",\n  \"🕵🏾‍♂️\",\n  \"🕵🏾\",\n  \"🕵🏿‍♀️\",\n  \"🕵🏿‍♂️\",\n  \"🕵🏿\",\n  \"🕵️‍♀️\",\n  \"🕵️‍♂️\",\n  \"🕵️\",\n  \"🕶️\",\n  \"🕷️\",\n  \"🕸️\",\n  \"🕹️\",\n  \"🕺🏻\",\n  \"🕺🏼\",\n  \"🕺🏽\",\n  \"🕺🏾\",\n  \"🕺🏿\",\n  \"🕺\",\n  \"🖇️\",\n  \"🖊️\",\n  \"🖋️\",\n  \"🖌️\",\n  \"🖍️\",\n  \"🖐🏻\",\n  \"🖐🏼\",\n  \"🖐🏽\",\n  \"🖐🏾\",\n  \"🖐🏿\",\n  \"🖐️\",\n  \"🖕🏻\",\n  \"🖕🏼\",\n  \"🖕🏽\",\n  \"🖕🏾\",\n  \"🖕🏿\",\n  \"🖕\",\n  \"🖖🏻\",\n  \"🖖🏼\",\n  \"🖖🏽\",\n  \"🖖🏾\",\n  \"🖖🏿\",\n  \"🖖\",\n  \"🖤\",\n  \"🖥️\",\n  \"🖨️\",\n  \"🖱️\",\n  \"🖲️\",\n  \"🖼️\",\n  \"🗂️\",\n  \"🗃️\",\n  \"🗄️\",\n  \"🗑️\",\n  \"🗒️\",\n  \"🗓️\",\n  \"🗜️\",\n  \"🗝️\",\n  \"🗞️\",\n  \"🗡️\",\n  \"🗣️\",\n  \"🗨️\",\n  \"🗯️\",\n  \"🗳️\",\n  \"🗺️\",\n  \"🗻\",\n  \"🗼\",\n  \"🗽\",\n  \"🗾\",\n  \"🗿\",\n  \"😀\",\n  \"😁\",\n  \"😂\",\n  \"😃\",\n  \"😄\",\n  \"😅\",\n  \"😆\",\n  \"😇\",\n  \"😈\",\n  \"😉\",\n  \"😊\",\n  \"😋\",\n  \"😌\",\n  \"😍\",\n  \"😎\",\n  \"😏\",\n  \"😐\",\n  \"😑\",\n  \"😒\",\n  \"😓\",\n  \"😔\",\n  \"😕\",\n  \"😖\",\n  \"😗\",\n  \"😘\",\n  \"😙\",\n  \"😚\",\n  \"😛\",\n  \"😜\",\n  \"😝\",\n  \"😞\",\n  \"😟\",\n  \"😠\",\n  \"😡\",\n  \"😢\",\n  \"😣\",\n  \"😤\",\n  \"😥\",\n  \"😦\",\n  \"😧\",\n  \"😨\",\n  \"😩\",\n  \"😪\",\n  \"😫\",\n  \"😬\",\n  \"😭\",\n  \"😮\",\n  \"😯\",\n  \"😰\",\n  \"😱\",\n  \"😲\",\n  \"😳\",\n  \"😴\",\n  \"😵\",\n  \"😶\",\n  \"😷\",\n  \"😸\",\n  \"😹\",\n  \"😺\",\n  \"😻\",\n  \"😼\",\n  \"😽\",\n  \"😾\",\n  \"😿\",\n  \"🙀\",\n  \"🙁\",\n  \"🙂\",\n  \"🙃\",\n  \"🙄\",\n  \"🙅🏻‍♀️\",\n  \"🙅🏻‍♂️\",\n  \"🙅🏻\",\n  \"🙅🏼‍♀️\",\n  \"🙅🏼‍♂️\",\n  \"🙅🏼\",\n  \"🙅🏽‍♀️\",\n  \"🙅🏽‍♂️\",\n  \"🙅🏽\",\n  \"🙅🏾‍♀️\",\n  \"🙅🏾‍♂️\",\n  \"🙅🏾\",\n  \"🙅🏿‍♀️\",\n  \"🙅🏿‍♂️\",\n  \"🙅🏿\",\n  \"🙅‍♀️\",\n  \"🙅‍♂️\",\n  \"🙅\",\n  \"🙆🏻‍♀️\",\n  \"🙆🏻‍♂️\",\n  \"🙆🏻\",\n  \"🙆🏼‍♀️\",\n  \"🙆🏼‍♂️\",\n  \"🙆🏼\",\n  \"🙆🏽‍♀️\",\n  \"🙆🏽‍♂️\",\n  \"🙆🏽\",\n  \"🙆🏾‍♀️\",\n  \"🙆🏾‍♂️\",\n  \"🙆🏾\",\n  \"🙆🏿‍♀️\",\n  \"🙆🏿‍♂️\",\n  \"🙆🏿\",\n  \"🙆‍♀️\",\n  \"🙆‍♂️\",\n  \"🙆\",\n  \"🙇🏻‍♀️\",\n  \"🙇🏻‍♂️\",\n  \"🙇🏻\",\n  \"🙇🏼‍♀️\",\n  \"🙇🏼‍♂️\",\n  \"🙇🏼\",\n  \"🙇🏽‍♀️\",\n  \"🙇🏽‍♂️\",\n  \"🙇🏽\",\n  \"🙇🏾‍♀️\",\n  \"🙇🏾‍♂️\",\n  \"🙇🏾\",\n  \"🙇🏿‍♀️\",\n  \"🙇🏿‍♂️\",\n  \"🙇🏿\",\n  \"🙇‍♀️\",\n  \"🙇‍♂️\",\n  \"🙇\",\n  \"🙈\",\n  \"🙉\",\n  \"🙊\",\n  \"🙋🏻‍♀️\",\n  \"🙋🏻‍♂️\",\n  \"🙋🏻\",\n  \"🙋🏼‍♀️\",\n  \"🙋🏼‍♂️\",\n  \"🙋🏼\",\n  \"🙋🏽‍♀️\",\n  \"🙋🏽‍♂️\",\n  \"🙋🏽\",\n  \"🙋🏾‍♀️\",\n  \"🙋🏾‍♂️\",\n  \"🙋🏾\",\n  \"🙋🏿‍♀️\",\n  \"🙋🏿‍♂️\",\n  \"🙋🏿\",\n  \"🙋‍♀️\",\n  \"🙋‍♂️\",\n  \"🙋\",\n  \"🙌🏻\",\n  \"🙌🏼\",\n  \"🙌🏽\",\n  \"🙌🏾\",\n  \"🙌🏿\",\n  \"🙌\",\n  \"🙍🏻‍♀️\",\n  \"🙍🏻‍♂️\",\n  \"🙍🏻\",\n  \"🙍🏼‍♀️\",\n  \"🙍🏼‍♂️\",\n  \"🙍🏼\",\n  \"🙍🏽‍♀️\",\n  \"🙍🏽‍♂️\",\n  \"🙍🏽\",\n  \"🙍🏾‍♀️\",\n  \"🙍🏾‍♂️\",\n  \"🙍🏾\",\n  \"🙍🏿‍♀️\",\n  \"🙍🏿‍♂️\",\n  \"🙍🏿\",\n  \"🙍‍♀️\",\n  \"🙍‍♂️\",\n  \"🙍\",\n  \"🙎🏻‍♀️\",\n  \"🙎🏻‍♂️\",\n  \"🙎🏻\",\n  \"🙎🏼‍♀️\",\n  \"🙎🏼‍♂️\",\n  \"🙎🏼\",\n  \"🙎🏽‍♀️\",\n  \"🙎🏽‍♂️\",\n  \"🙎🏽\",\n  \"🙎🏾‍♀️\",\n  \"🙎🏾‍♂️\",\n  \"🙎🏾\",\n  \"🙎🏿‍♀️\",\n  \"🙎🏿‍♂️\",\n  \"🙎🏿\",\n  \"🙎‍♀️\",\n  \"🙎‍♂️\",\n  \"🙎\",\n  \"🙏🏻\",\n  \"🙏🏼\",\n  \"🙏🏽\",\n  \"🙏🏾\",\n  \"🙏🏿\",\n  \"🙏\",\n  \"🚀\",\n  \"🚁\",\n  \"🚂\",\n  \"🚃\",\n  \"🚄\",\n  \"🚅\",\n  \"🚆\",\n  \"🚇\",\n  \"🚈\",\n  \"🚉\",\n  \"🚊\",\n  \"🚋\",\n  \"🚌\",\n  \"🚍\",\n  \"🚎\",\n  \"🚏\",\n  \"🚐\",\n  \"🚑\",\n  \"🚒\",\n  \"🚓\",\n  \"🚔\",\n  \"🚕\",\n  \"🚖\",\n  \"🚗\",\n  \"🚘\",\n  \"🚙\",\n  \"🚚\",\n  \"🚛\",\n  \"🚜\",\n  \"🚝\",\n  \"🚞\",\n  \"🚟\",\n  \"🚠\",\n  \"🚡\",\n  \"🚢\",\n  \"🚣🏻‍♀️\",\n  \"🚣🏻‍♂️\",\n  \"🚣🏻\",\n  \"🚣🏼‍♀️\",\n  \"🚣🏼‍♂️\",\n  \"🚣🏼\",\n  \"🚣🏽‍♀️\",\n  \"🚣🏽‍♂️\",\n  \"🚣🏽\",\n  \"🚣🏾‍♀️\",\n  \"🚣🏾‍♂️\",\n  \"🚣🏾\",\n  \"🚣🏿‍♀️\",\n  \"🚣🏿‍♂️\",\n  \"🚣🏿\",\n  \"🚣‍♀️\",\n  \"🚣‍♂️\",\n  \"🚣\",\n  \"🚤\",\n  \"🚥\",\n  \"🚦\",\n  \"🚧\",\n  \"🚨\",\n  \"🚩\",\n  \"🚪\",\n  \"🚫\",\n  \"🚬\",\n  \"🚭\",\n  \"🚮\",\n  \"🚯\",\n  \"🚰\",\n  \"🚱\",\n  \"🚲\",\n  \"🚳\",\n  \"🚴🏻‍♀️\",\n  \"🚴🏻‍♂️\",\n  \"🚴🏻\",\n  \"🚴🏼‍♀️\",\n  \"🚴🏼‍♂️\",\n  \"🚴🏼\",\n  \"🚴🏽‍♀️\",\n  \"🚴🏽‍♂️\",\n  \"🚴🏽\",\n  \"🚴🏾‍♀️\",\n  \"🚴🏾‍♂️\",\n  \"🚴🏾\",\n  \"🚴🏿‍♀️\",\n  \"🚴🏿‍♂️\",\n  \"🚴🏿\",\n  \"🚴‍♀️\",\n  \"🚴‍♂️\",\n  \"🚴\",\n  \"🚵🏻‍♀️\",\n  \"🚵🏻‍♂️\",\n  \"🚵🏻\",\n  \"🚵🏼‍♀️\",\n  \"🚵🏼‍♂️\",\n  \"🚵🏼\",\n  \"🚵🏽‍♀️\",\n  \"🚵🏽‍♂️\",\n  \"🚵🏽\",\n  \"🚵🏾‍♀️\",\n  \"🚵🏾‍♂️\",\n  \"🚵🏾\",\n  \"🚵🏿‍♀️\",\n  \"🚵🏿‍♂️\",\n  \"🚵🏿\",\n  \"🚵‍♀️\",\n  \"🚵‍♂️\",\n  \"🚵\",\n  \"🚶🏻‍♀️\",\n  \"🚶🏻‍♂️\",\n  \"🚶🏻\",\n  \"🚶🏼‍♀️\",\n  \"🚶🏼‍♂️\",\n  \"🚶🏼\",\n  \"🚶🏽‍♀️\",\n  \"🚶🏽‍♂️\",\n  \"🚶🏽\",\n  \"🚶🏾‍♀️\",\n  \"🚶🏾‍♂️\",\n  \"🚶🏾\",\n  \"🚶🏿‍♀️\",\n  \"🚶🏿‍♂️\",\n  \"🚶🏿\",\n  \"🚶‍♀️\",\n  \"🚶‍♂️\",\n  \"🚶\",\n  \"🚷\",\n  \"🚸\",\n  \"🚹\",\n  \"🚺\",\n  \"🚻\",\n  \"🚼\",\n  \"🚽\",\n  \"🚾\",\n  \"🚿\",\n  \"🛀🏻\",\n  \"🛀🏼\",\n  \"🛀🏽\",\n  \"🛀🏾\",\n  \"🛀🏿\",\n  \"🛀\",\n  \"🛁\",\n  \"🛂\",\n  \"🛃\",\n  \"🛄\",\n  \"🛅\",\n  \"🛋️\",\n  \"🛌🏻\",\n  \"🛌🏼\",\n  \"🛌🏽\",\n  \"🛌🏾\",\n  \"🛌🏿\",\n  \"🛌\",\n  \"🛍️\",\n  \"🛎️\",\n  \"🛏️\",\n  \"🛐\",\n  \"🛑\",\n  \"🛒\",\n  \"🛕\",\n  \"🛠️\",\n  \"🛡️\",\n  \"🛢️\",\n  \"🛣️\",\n  \"🛤️\",\n  \"🛥️\",\n  \"🛩️\",\n  \"🛫\",\n  \"🛬\",\n  \"🛰️\",\n  \"🛳️\",\n  \"🛴\",\n  \"🛵\",\n  \"🛶\",\n  \"🛷\",\n  \"🛸\",\n  \"🛹\",\n  \"🛺\",\n  \"🟠\",\n  \"🟡\",\n  \"🟢\",\n  \"🟣\",\n  \"🟤\",\n  \"🟥\",\n  \"🟦\",\n  \"🟧\",\n  \"🟨\",\n  \"🟩\",\n  \"🟪\",\n  \"🟫\",\n  \"🤍\",\n  \"🤎\",\n  \"🤏🏻\",\n  \"🤏🏼\",\n  \"🤏🏽\",\n  \"🤏🏾\",\n  \"🤏🏿\",\n  \"🤏\",\n  \"🤐\",\n  \"🤑\",\n  \"🤒\",\n  \"🤓\",\n  \"🤔\",\n  \"🤕\",\n  \"🤖\",\n  \"🤗\",\n  \"🤘🏻\",\n  \"🤘🏼\",\n  \"🤘🏽\",\n  \"🤘🏾\",\n  \"🤘🏿\",\n  \"🤘\",\n  \"🤙🏻\",\n  \"🤙🏼\",\n  \"🤙🏽\",\n  \"🤙🏾\",\n  \"🤙🏿\",\n  \"🤙\",\n  \"🤚🏻\",\n  \"🤚🏼\",\n  \"🤚🏽\",\n  \"🤚🏾\",\n  \"🤚🏿\",\n  \"🤚\",\n  \"🤛🏻\",\n  \"🤛🏼\",\n  \"🤛🏽\",\n  \"🤛🏾\",\n  \"🤛🏿\",\n  \"🤛\",\n  \"🤜🏻\",\n  \"🤜🏼\",\n  \"🤜🏽\",\n  \"🤜🏾\",\n  \"🤜🏿\",\n  \"🤜\",\n  \"🤝\",\n  \"🤞🏻\",\n  \"🤞🏼\",\n  \"🤞🏽\",\n  \"🤞🏾\",\n  \"🤞🏿\",\n  \"🤞\",\n  \"🤟🏻\",\n  \"🤟🏼\",\n  \"🤟🏽\",\n  \"🤟🏾\",\n  \"🤟🏿\",\n  \"🤟\",\n  \"🤠\",\n  \"🤡\",\n  \"🤢\",\n  \"🤣\",\n  \"🤤\",\n  \"🤥\",\n  \"🤦🏻‍♀️\",\n  \"🤦🏻‍♂️\",\n  \"🤦🏻\",\n  \"🤦🏼‍♀️\",\n  \"🤦🏼‍♂️\",\n  \"🤦🏼\",\n  \"🤦🏽‍♀️\",\n  \"🤦🏽‍♂️\",\n  \"🤦🏽\",\n  \"🤦🏾‍♀️\",\n  \"🤦🏾‍♂️\",\n  \"🤦🏾\",\n  \"🤦🏿‍♀️\",\n  \"🤦🏿‍♂️\",\n  \"🤦🏿\",\n  \"🤦‍♀️\",\n  \"🤦‍♂️\",\n  \"🤦\",\n  \"🤧\",\n  \"🤨\",\n  \"🤩\",\n  \"🤪\",\n  \"🤫\",\n  \"🤬\",\n  \"🤭\",\n  \"🤮\",\n  \"🤯\",\n  \"🤰🏻\",\n  \"🤰🏼\",\n  \"🤰🏽\",\n  \"🤰🏾\",\n  \"🤰🏿\",\n  \"🤰\",\n  \"🤱🏻\",\n  \"🤱🏼\",\n  \"🤱🏽\",\n  \"🤱🏾\",\n  \"🤱🏿\",\n  \"🤱\",\n  \"🤲🏻\",\n  \"🤲🏼\",\n  \"🤲🏽\",\n  \"🤲🏾\",\n  \"🤲🏿\",\n  \"🤲\",\n  \"🤳🏻\",\n  \"🤳🏼\",\n  \"🤳🏽\",\n  \"🤳🏾\",\n  \"🤳🏿\",\n  \"🤳\",\n  \"🤴🏻\",\n  \"🤴🏼\",\n  \"🤴🏽\",\n  \"🤴🏾\",\n  \"🤴🏿\",\n  \"🤴\",\n  \"🤵🏻‍♀️\",\n  \"🤵🏻‍♂️\",\n  \"🤵🏻\",\n  \"🤵🏼‍♀️\",\n  \"🤵🏼‍♂️\",\n  \"🤵🏼\",\n  \"🤵🏽‍♀️\",\n  \"🤵🏽‍♂️\",\n  \"🤵🏽\",\n  \"🤵🏾‍♀️\",\n  \"🤵🏾‍♂️\",\n  \"🤵🏾\",\n  \"🤵🏿‍♀️\",\n  \"🤵🏿‍♂️\",\n  \"🤵🏿\",\n  \"🤵‍♀️\",\n  \"🤵‍♂️\",\n  \"🤵\",\n  \"🤶🏻\",\n  \"🤶🏼\",\n  \"🤶🏽\",\n  \"🤶🏾\",\n  \"🤶🏿\",\n  \"🤶\",\n  \"🤷🏻‍♀️\",\n  \"🤷🏻‍♂️\",\n  \"🤷🏻\",\n  \"🤷🏼‍♀️\",\n  \"🤷🏼‍♂️\",\n  \"🤷🏼\",\n  \"🤷🏽‍♀️\",\n  \"🤷🏽‍♂️\",\n  \"🤷🏽\",\n  \"🤷🏾‍♀️\",\n  \"🤷🏾‍♂️\",\n  \"🤷🏾\",\n  \"🤷🏿‍♀️\",\n  \"🤷🏿‍♂️\",\n  \"🤷🏿\",\n  \"🤷‍♀️\",\n  \"🤷‍♂️\",\n  \"🤷\",\n  \"🤸🏻‍♀️\",\n  \"🤸🏻‍♂️\",\n  \"🤸🏻\",\n  \"🤸🏼‍♀️\",\n  \"🤸🏼‍♂️\",\n  \"🤸🏼\",\n  \"🤸🏽‍♀️\",\n  \"🤸🏽‍♂️\",\n  \"🤸🏽\",\n  \"🤸🏾‍♀️\",\n  \"🤸🏾‍♂️\",\n  \"🤸🏾\",\n  \"🤸🏿‍♀️\",\n  \"🤸🏿‍♂️\",\n  \"🤸🏿\",\n  \"🤸‍♀️\",\n  \"🤸‍♂️\",\n  \"🤸\",\n  \"🤹🏻‍♀️\",\n  \"🤹🏻‍♂️\",\n  \"🤹🏻\",\n  \"🤹🏼‍♀️\",\n  \"🤹🏼‍♂️\",\n  \"🤹🏼\",\n  \"🤹🏽‍♀️\",\n  \"🤹🏽‍♂️\",\n  \"🤹🏽\",\n  \"🤹🏾‍♀️\",\n  \"🤹🏾‍♂️\",\n  \"🤹🏾\",\n  \"🤹🏿‍♀️\",\n  \"🤹🏿‍♂️\",\n  \"🤹🏿\",\n  \"🤹‍♀️\",\n  \"🤹‍♂️\",\n  \"🤹\",\n  \"🤺\",\n  \"🤼‍♀️\",\n  \"🤼‍♂️\",\n  \"🤼\",\n  \"🤽🏻‍♀️\",\n  \"🤽🏻‍♂️\",\n  \"🤽🏻\",\n  \"🤽🏼‍♀️\",\n  \"🤽🏼‍♂️\",\n  \"🤽🏼\",\n  \"🤽🏽‍♀️\",\n  \"🤽🏽‍♂️\",\n  \"🤽🏽\",\n  \"🤽🏾‍♀️\",\n  \"🤽🏾‍♂️\",\n  \"🤽🏾\",\n  \"🤽🏿‍♀️\",\n  \"🤽🏿‍♂️\",\n  \"🤽🏿\",\n  \"🤽‍♀️\",\n  \"🤽‍♂️\",\n  \"🤽\",\n  \"🤾🏻‍♀️\",\n  \"🤾🏻‍♂️\",\n  \"🤾🏻\",\n  \"🤾🏼‍♀️\",\n  \"🤾🏼‍♂️\",\n  \"🤾🏼\",\n  \"🤾🏽‍♀️\",\n  \"🤾🏽‍♂️\",\n  \"🤾🏽\",\n  \"🤾🏾‍♀️\",\n  \"🤾🏾‍♂️\",\n  \"🤾🏾\",\n  \"🤾🏿‍♀️\",\n  \"🤾🏿‍♂️\",\n  \"🤾🏿\",\n  \"🤾‍♀️\",\n  \"🤾‍♂️\",\n  \"🤾\",\n  \"🤿\",\n  \"🥀\",\n  \"🥁\",\n  \"🥂\",\n  \"🥃\",\n  \"🥄\",\n  \"🥅\",\n  \"🥇\",\n  \"🥈\",\n  \"🥉\",\n  \"🥊\",\n  \"🥋\",\n  \"🥌\",\n  \"🥍\",\n  \"🥎\",\n  \"🥏\",\n  \"🥐\",\n  \"🥑\",\n  \"🥒\",\n  \"🥓\",\n  \"🥔\",\n  \"🥕\",\n  \"🥖\",\n  \"🥗\",\n  \"🥘\",\n  \"🥙\",\n  \"🥚\",\n  \"🥛\",\n  \"🥜\",\n  \"🥝\",\n  \"🥞\",\n  \"🥟\",\n  \"🥠\",\n  \"🥡\",\n  \"🥢\",\n  \"🥣\",\n  \"🥤\",\n  \"🥥\",\n  \"🥦\",\n  \"🥧\",\n  \"🥨\",\n  \"🥩\",\n  \"🥪\",\n  \"🥫\",\n  \"🥬\",\n  \"🥭\",\n  \"🥮\",\n  \"🥯\",\n  \"🥰\",\n  \"🥱\",\n  \"🥳\",\n  \"🥴\",\n  \"🥵\",\n  \"🥶\",\n  \"🥺\",\n  \"🥻\",\n  \"🥼\",\n  \"🥽\",\n  \"🥾\",\n  \"🥿\",\n  \"🦀\",\n  \"🦁\",\n  \"🦂\",\n  \"🦃\",\n  \"🦄\",\n  \"🦅\",\n  \"🦆\",\n  \"🦇\",\n  \"🦈\",\n  \"🦉\",\n  \"🦊\",\n  \"🦋\",\n  \"🦌\",\n  \"🦍\",\n  \"🦎\",\n  \"🦏\",\n  \"🦐\",\n  \"🦑\",\n  \"🦒\",\n  \"🦓\",\n  \"🦔\",\n  \"🦕\",\n  \"🦖\",\n  \"🦗\",\n  \"🦘\",\n  \"🦙\",\n  \"🦚\",\n  \"🦛\",\n  \"🦜\",\n  \"🦝\",\n  \"🦞\",\n  \"🦟\",\n  \"🦠\",\n  \"🦡\",\n  \"🦢\",\n  \"🦥\",\n  \"🦦\",\n  \"🦧\",\n  \"🦨\",\n  \"🦩\",\n  \"🦪\",\n  \"🦮\",\n  \"🦯\",\n  \"🦰\",\n  \"🦱\",\n  \"🦲\",\n  \"🦳\",\n  \"🦴\",\n  \"🦵🏻\",\n  \"🦵🏼\",\n  \"🦵🏽\",\n  \"🦵🏾\",\n  \"🦵🏿\",\n  \"🦵\",\n  \"🦶🏻\",\n  \"🦶🏼\",\n  \"🦶🏽\",\n  \"🦶🏾\",\n  \"🦶🏿\",\n  \"🦶\",\n  \"🦷\",\n  \"🦸🏻‍♀️\",\n  \"🦸🏻‍♂️\",\n  \"🦸🏻\",\n  \"🦸🏼‍♀️\",\n  \"🦸🏼‍♂️\",\n  \"🦸🏼\",\n  \"🦸🏽‍♀️\",\n  \"🦸🏽‍♂️\",\n  \"🦸🏽\",\n  \"🦸🏾‍♀️\",\n  \"🦸🏾‍♂️\",\n  \"🦸🏾\",\n  \"🦸🏿‍♀️\",\n  \"🦸🏿‍♂️\",\n  \"🦸🏿\",\n  \"🦸‍♀️\",\n  \"🦸‍♂️\",\n  \"🦸\",\n  \"🦹🏻‍♀️\",\n  \"🦹🏻‍♂️\",\n  \"🦹🏻\",\n  \"🦹🏼‍♀️\",\n  \"🦹🏼‍♂️\",\n  \"🦹🏼\",\n  \"🦹🏽‍♀️\",\n  \"🦹🏽‍♂️\",\n  \"🦹🏽\",\n  \"🦹🏾‍♀️\",\n  \"🦹🏾‍♂️\",\n  \"🦹🏾\",\n  \"🦹🏿‍♀️\",\n  \"🦹🏿‍♂️\",\n  \"🦹🏿\",\n  \"🦹‍♀️\",\n  \"🦹‍♂️\",\n  \"🦹\",\n  \"🦺\",\n  \"🦻🏻\",\n  \"🦻🏼\",\n  \"🦻🏽\",\n  \"🦻🏾\",\n  \"🦻🏿\",\n  \"🦻\",\n  \"🦼\",\n  \"🦽\",\n  \"🦾\",\n  \"🦿\",\n  \"🧀\",\n  \"🧁\",\n  \"🧂\",\n  \"🧃\",\n  \"🧄\",\n  \"🧅\",\n  \"🧆\",\n  \"🧇\",\n  \"🧈\",\n  \"🧉\",\n  \"🧊\",\n  \"🧍🏻‍♀️\",\n  \"🧍🏻‍♂️\",\n  \"🧍🏻\",\n  \"🧍🏼‍♀️\",\n  \"🧍🏼‍♂️\",\n  \"🧍🏼\",\n  \"🧍🏽‍♀️\",\n  \"🧍🏽‍♂️\",\n  \"🧍🏽\",\n  \"🧍🏾‍♀️\",\n  \"🧍🏾‍♂️\",\n  \"🧍🏾\",\n  \"🧍🏿‍♀️\",\n  \"🧍🏿‍♂️\",\n  \"🧍🏿\",\n  \"🧍‍♀️\",\n  \"🧍‍♂️\",\n  \"🧍\",\n  \"🧎🏻‍♀️\",\n  \"🧎🏻‍♂️\",\n  \"🧎🏻\",\n  \"🧎🏼‍♀️\",\n  \"🧎🏼‍♂️\",\n  \"🧎🏼\",\n  \"🧎🏽‍♀️\",\n  \"🧎🏽‍♂️\",\n  \"🧎🏽\",\n  \"🧎🏾‍♀️\",\n  \"🧎🏾‍♂️\",\n  \"🧎🏾\",\n  \"🧎🏿‍♀️\",\n  \"🧎🏿‍♂️\",\n  \"🧎🏿\",\n  \"🧎‍♀️\",\n  \"🧎‍♂️\",\n  \"🧎\",\n  \"🧏🏻‍♀️\",\n  \"🧏🏻‍♂️\",\n  \"🧏🏻\",\n  \"🧏🏼‍♀️\",\n  \"🧏🏼‍♂️\",\n  \"🧏🏼\",\n  \"🧏🏽‍♀️\",\n  \"🧏🏽‍♂️\",\n  \"🧏🏽\",\n  \"🧏🏾‍♀️\",\n  \"🧏🏾‍♂️\",\n  \"🧏🏾\",\n  \"🧏🏿‍♀️\",\n  \"🧏🏿‍♂️\",\n  \"🧏🏿\",\n  \"🧏‍♀️\",\n  \"🧏‍♂️\",\n  \"🧏\",\n  \"🧐\",\n  \"🧑🏻‍🤝‍🧑🏻\",\n  \"🧑🏻\",\n  \"🧑🏼‍🤝‍🧑🏻\",\n  \"🧑🏼‍🤝‍🧑🏼\",\n  \"🧑🏼\",\n  \"🧑🏽‍🤝‍🧑🏻\",\n  \"🧑🏽‍🤝‍🧑🏼\",\n  \"🧑🏽‍🤝‍🧑🏽\",\n  \"🧑🏽\",\n  \"🧑🏾‍🤝‍🧑🏻\",\n  \"🧑🏾‍🤝‍🧑🏼\",\n  \"🧑🏾‍🤝‍🧑🏽\",\n  \"🧑🏾‍🤝‍🧑🏾\",\n  \"🧑🏾\",\n  \"🧑🏿‍🤝‍🧑🏻\",\n  \"🧑🏿‍🤝‍🧑🏼\",\n  \"🧑🏿‍🤝‍🧑🏽\",\n  \"🧑🏿‍🤝‍🧑🏾\",\n  \"🧑🏿‍🤝‍🧑🏿\",\n  \"🧑🏿\",\n  \"🧑‍🤝‍🧑\",\n  \"🧑\",\n  \"🧒🏻\",\n  \"🧒🏼\",\n  \"🧒🏽\",\n  \"🧒🏾\",\n  \"🧒🏿\",\n  \"🧒\",\n  \"🧓🏻\",\n  \"🧓🏼\",\n  \"🧓🏽\",\n  \"🧓🏾\",\n  \"🧓🏿\",\n  \"🧓\",\n  \"🧔🏻\",\n  \"🧔🏼\",\n  \"🧔🏽\",\n  \"🧔🏾\",\n  \"🧔🏿\",\n  \"🧔\",\n  \"🧕🏻\",\n  \"🧕🏼\",\n  \"🧕🏽\",\n  \"🧕🏾\",\n  \"🧕🏿\",\n  \"🧕\",\n  \"🧖🏻‍♀️\",\n  \"🧖🏻‍♂️\",\n  \"🧖🏻\",\n  \"🧖🏼‍♀️\",\n  \"🧖🏼‍♂️\",\n  \"🧖🏼\",\n  \"🧖🏽‍♀️\",\n  \"🧖🏽‍♂️\",\n  \"🧖🏽\",\n  \"🧖🏾‍♀️\",\n  \"🧖🏾‍♂️\",\n  \"🧖🏾\",\n  \"🧖🏿‍♀️\",\n  \"🧖🏿‍♂️\",\n  \"🧖🏿\",\n  \"🧖‍♀️\",\n  \"🧖‍♂️\",\n  \"🧖\",\n  \"🧗🏻‍♀️\",\n  \"🧗🏻‍♂️\",\n  \"🧗🏻\",\n  \"🧗🏼‍♀️\",\n  \"🧗🏼‍♂️\",\n  \"🧗🏼\",\n  \"🧗🏽‍♀️\",\n  \"🧗🏽‍♂️\",\n  \"🧗🏽\",\n  \"🧗🏾‍♀️\",\n  \"🧗🏾‍♂️\",\n  \"🧗🏾\",\n  \"🧗🏿‍♀️\",\n  \"🧗🏿‍♂️\",\n  \"🧗🏿\",\n  \"🧗‍♀️\",\n  \"🧗‍♂️\",\n  \"🧗\",\n  \"🧘🏻‍♀️\",\n  \"🧘🏻‍♂️\",\n  \"🧘🏻\",\n  \"🧘🏼‍♀️\",\n  \"🧘🏼‍♂️\",\n  \"🧘🏼\",\n  \"🧘🏽‍♀️\",\n  \"🧘🏽‍♂️\",\n  \"🧘🏽\",\n  \"🧘🏾‍♀️\",\n  \"🧘🏾‍♂️\",\n  \"🧘🏾\",\n  \"🧘🏿‍♀️\",\n  \"🧘🏿‍♂️\",\n  \"🧘🏿\",\n  \"🧘‍♀️\",\n  \"🧘‍♂️\",\n  \"🧘\",\n  \"🧙🏻‍♀️\",\n  \"🧙🏻‍♂️\",\n  \"🧙🏻\",\n  \"🧙🏼‍♀️\",\n  \"🧙🏼‍♂️\",\n  \"🧙🏼\",\n  \"🧙🏽‍♀️\",\n  \"🧙🏽‍♂️\",\n  \"🧙🏽\",\n  \"🧙🏾‍♀️\",\n  \"🧙🏾‍♂️\",\n  \"🧙🏾\",\n  \"🧙🏿‍♀️\",\n  \"🧙🏿‍♂️\",\n  \"🧙🏿\",\n  \"🧙‍♀️\",\n  \"🧙‍♂️\",\n  \"🧙\",\n  \"🧚🏻‍♀️\",\n  \"🧚🏻‍♂️\",\n  \"🧚🏻\",\n  \"🧚🏼‍♀️\",\n  \"🧚🏼‍♂️\",\n  \"🧚🏼\",\n  \"🧚🏽‍♀️\",\n  \"🧚🏽‍♂️\",\n  \"🧚🏽\",\n  \"🧚🏾‍♀️\",\n  \"🧚🏾‍♂️\",\n  \"🧚🏾\",\n  \"🧚🏿‍♀️\",\n  \"🧚🏿‍♂️\",\n  \"🧚🏿\",\n  \"🧚‍♀️\",\n  \"🧚‍♂️\",\n  \"🧚\",\n  \"🧛🏻‍♀️\",\n  \"🧛🏻‍♂️\",\n  \"🧛🏻\",\n  \"🧛🏼‍♀️\",\n  \"🧛🏼‍♂️\",\n  \"🧛🏼\",\n  \"🧛🏽‍♀️\",\n  \"🧛🏽‍♂️\",\n  \"🧛🏽\",\n  \"🧛🏾‍♀️\",\n  \"🧛🏾‍♂️\",\n  \"🧛🏾\",\n  \"🧛🏿‍♀️\",\n  \"🧛🏿‍♂️\",\n  \"🧛🏿\",\n  \"🧛‍♀️\",\n  \"🧛‍♂️\",\n  \"🧛\",\n  \"🧜🏻‍♀️\",\n  \"🧜🏻‍♂️\",\n  \"🧜🏻\",\n  \"🧜🏼‍♀️\",\n  \"🧜🏼‍♂️\",\n  \"🧜🏼\",\n  \"🧜🏽‍♀️\",\n  \"🧜🏽‍♂️\",\n  \"🧜🏽\",\n  \"🧜🏾‍♀️\",\n  \"🧜🏾‍♂️\",\n  \"🧜🏾\",\n  \"🧜🏿‍♀️\",\n  \"🧜🏿‍♂️\",\n  \"🧜🏿\",\n  \"🧜‍♀️\",\n  \"🧜‍♂️\",\n  \"🧜\",\n  \"🧝🏻‍♀️\",\n  \"🧝🏻‍♂️\",\n  \"🧝🏻\",\n  \"🧝🏼‍♀️\",\n  \"🧝🏼‍♂️\",\n  \"🧝🏼\",\n  \"🧝🏽‍♀️\",\n  \"🧝🏽‍♂️\",\n  \"🧝🏽\",\n  \"🧝🏾‍♀️\",\n  \"🧝🏾‍♂️\",\n  \"🧝🏾\",\n  \"🧝🏿‍♀️\",\n  \"🧝🏿‍♂️\",\n  \"🧝🏿\",\n  \"🧝‍♀️\",\n  \"🧝‍♂️\",\n  \"🧝\",\n  \"🧞‍♀️\",\n  \"🧞‍♂️\",\n  \"🧞\",\n  \"🧟‍♀️\",\n  \"🧟‍♂️\",\n  \"🧟\",\n  \"🧠\",\n  \"🧡\",\n  \"🧢\",\n  \"🧣\",\n  \"🧤\",\n  \"🧥\",\n  \"🧦\",\n  \"🧧\",\n  \"🧨\",\n  \"🧩\",\n  \"🧪\",\n  \"🧫\",\n  \"🧬\",\n  \"🧭\",\n  \"🧮\",\n  \"🧯\",\n  \"🧰\",\n  \"🧱\",\n  \"🧲\",\n  \"🧳\",\n  \"🧴\",\n  \"🧵\",\n  \"🧶\",\n  \"🧷\",\n  \"🧸\",\n  \"🧹\",\n  \"🧺\",\n  \"🧻\",\n  \"🧼\",\n  \"🧽\",\n  \"🧾\",\n  \"🧿\",\n  \"🩰\",\n  \"🩱\",\n  \"🩲\",\n  \"🩳\",\n  \"🩸\",\n  \"🩹\",\n  \"🩺\",\n  \"🪀\",\n  \"🪁\",\n  \"🪂\",\n  \"🪐\",\n  \"🪑\",\n  \"🪒\",\n  \"🪓\",\n  \"🪔\",\n  \"🪕\",\n  \"‼️\",\n  \"⁉️\",\n  \"™️\",\n  \"ℹ️\",\n  \"↔️\",\n  \"↕️\",\n  \"↖️\",\n  \"↗️\",\n  \"↘️\",\n  \"↙️\",\n  \"↩️\",\n  \"↪️\",\n  \"#⃣\",\n  \"⌚️\",\n  \"⌛️\",\n  \"⌨️\",\n  \"⏏️\",\n  \"⏩\",\n  \"⏪\",\n  \"⏫\",\n  \"⏬\",\n  \"⏭️\",\n  \"⏮️\",\n  \"⏯️\",\n  \"⏰\",\n  \"⏱️\",\n  \"⏲️\",\n  \"⏳\",\n  \"⏸️\",\n  \"⏹️\",\n  \"⏺️\",\n  \"Ⓜ️\",\n  \"▪️\",\n  \"▫️\",\n  \"▶️\",\n  \"◀️\",\n  \"◻️\",\n  \"◼️\",\n  \"◽️\",\n  \"◾️\",\n  \"☀️\",\n  \"☁️\",\n  \"☂️\",\n  \"☃️\",\n  \"☄️\",\n  \"☎️\",\n  \"☑️\",\n  \"☔️\",\n  \"☕️\",\n  \"☘️\",\n  \"☝🏻\",\n  \"☝🏼\",\n  \"☝🏽\",\n  \"☝🏾\",\n  \"☝🏿\",\n  \"☝️\",\n  \"☠️\",\n  \"☢️\",\n  \"☣️\",\n  \"☦️\",\n  \"☪️\",\n  \"☮️\",\n  \"☯️\",\n  \"☸️\",\n  \"☹️\",\n  \"☺️\",\n  \"♀️\",\n  \"♂️\",\n  \"♈️\",\n  \"♉️\",\n  \"♊️\",\n  \"♋️\",\n  \"♌️\",\n  \"♍️\",\n  \"♎️\",\n  \"♏️\",\n  \"♐️\",\n  \"♑️\",\n  \"♒️\",\n  \"♓️\",\n  \"♟️\",\n  \"♠️\",\n  \"♣️\",\n  \"♥️\",\n  \"♦️\",\n  \"♨️\",\n  \"♻️\",\n  \"♾\",\n  \"♿️\",\n  \"⚒️\",\n  \"⚓️\",\n  \"⚔️\",\n  \"⚕️\",\n  \"⚖️\",\n  \"⚗️\",\n  \"⚙️\",\n  \"⚛️\",\n  \"⚜️\",\n  \"⚠️\",\n  \"⚡️\",\n  \"⚪️\",\n  \"⚫️\",\n  \"⚰️\",\n  \"⚱️\",\n  \"⚽️\",\n  \"⚾️\",\n  \"⛄️\",\n  \"⛅️\",\n  \"⛈️\",\n  \"⛎\",\n  \"⛏️\",\n  \"⛑️\",\n  \"⛓️\",\n  \"⛔️\",\n  \"⛩️\",\n  \"⛪️\",\n  \"⛰️\",\n  \"⛱️\",\n  \"⛲️\",\n  \"⛳️\",\n  \"⛴️\",\n  \"⛵️\",\n  \"⛷🏻\",\n  \"⛷🏼\",\n  \"⛷🏽\",\n  \"⛷🏾\",\n  \"⛷🏿\",\n  \"⛷️\",\n  \"⛸️\",\n  \"⛹🏻‍♀️\",\n  \"⛹🏻‍♂️\",\n  \"⛹🏻\",\n  \"⛹🏼‍♀️\",\n  \"⛹🏼‍♂️\",\n  \"⛹🏼\",\n  \"⛹🏽‍♀️\",\n  \"⛹🏽‍♂️\",\n  \"⛹🏽\",\n  \"⛹🏾‍♀️\",\n  \"⛹🏾‍♂️\",\n  \"⛹🏾\",\n  \"⛹🏿‍♀️\",\n  \"⛹🏿‍♂️\",\n  \"⛹🏿\",\n  \"⛹️‍♀️\",\n  \"⛹️‍♂️\",\n  \"⛹️\",\n  \"⛺️\",\n  \"⛽️\",\n  \"✂️\",\n  \"✅\",\n  \"✈️\",\n  \"✉️\",\n  \"✊🏻\",\n  \"✊🏼\",\n  \"✊🏽\",\n  \"✊🏾\",\n  \"✊🏿\",\n  \"✊\",\n  \"✋🏻\",\n  \"✋🏼\",\n  \"✋🏽\",\n  \"✋🏾\",\n  \"✋🏿\",\n  \"✋\",\n  \"✌🏻\",\n  \"✌🏼\",\n  \"✌🏽\",\n  \"✌🏾\",\n  \"✌🏿\",\n  \"✌️\",\n  \"✍🏻\",\n  \"✍🏼\",\n  \"✍🏽\",\n  \"✍🏾\",\n  \"✍🏿\",\n  \"✍️\",\n  \"✏️\",\n  \"✒️\",\n  \"✔️\",\n  \"✖️\",\n  \"✝️\",\n  \"✡️\",\n  \"✨\",\n  \"✳️\",\n  \"✴️\",\n  \"❄️\",\n  \"❇️\",\n  \"❌\",\n  \"❎\",\n  \"❓\",\n  \"❔\",\n  \"❕\",\n  \"❗️\",\n  \"❣️\",\n  \"❤️\",\n  \"➕\",\n  \"➖\",\n  \"➗\",\n  \"➡️\",\n  \"➰\",\n  \"➿\",\n  \"⤴️\",\n  \"⤵️\",\n  \"*⃣\",\n  \"⬅️\",\n  \"⬆️\",\n  \"⬇️\",\n  \"⬛️\",\n  \"⬜️\",\n  \"⭐️\",\n  \"⭕️\",\n  \"0⃣\",\n  \"〰️\",\n  \"〽️\",\n  \"1⃣\",\n  \"2⃣\",\n  \"㊗️\",\n  \"㊙️\",\n  \"3⃣\",\n  \"4⃣\",\n  \"5⃣\",\n  \"6⃣\",\n  \"7⃣\",\n  \"8⃣\",\n  \"9⃣\",\n  \"©️\",\n  \"®️\",\n  \"\"\n];\n\nconst path$1 = path$4;\nconst emojisList = emojisList$1;\nconst getHashDigest$1 = getHashDigest_1;\n\nconst emojiRegex = /[\\uD800-\\uDFFF]./;\nconst emojiList = emojisList.filter((emoji) => emojiRegex.test(emoji));\nconst emojiCache = {};\n\nfunction encodeStringToEmoji(content, length) {\n  if (emojiCache[content]) {\n    return emojiCache[content];\n  }\n\n  length = length || 1;\n\n  const emojis = [];\n\n  do {\n    if (!emojiList.length) {\n      throw new Error('Ran out of emoji');\n    }\n\n    const index = Math.floor(Math.random() * emojiList.length);\n\n    emojis.push(emojiList[index]);\n    emojiList.splice(index, 1);\n  } while (--length > 0);\n\n  const emojiEncoding = emojis.join('');\n\n  emojiCache[content] = emojiEncoding;\n\n  return emojiEncoding;\n}\n\nfunction interpolateName$2(loaderContext, name, options) {\n  let filename;\n\n  const hasQuery =\n    loaderContext.resourceQuery && loaderContext.resourceQuery.length > 1;\n\n  if (typeof name === 'function') {\n    filename = name(\n      loaderContext.resourcePath,\n      hasQuery ? loaderContext.resourceQuery : undefined\n    );\n  } else {\n    filename = name || '[hash].[ext]';\n  }\n\n  const context = options.context;\n  const content = options.content;\n  const regExp = options.regExp;\n\n  let ext = 'bin';\n  let basename = 'file';\n  let directory = '';\n  let folder = '';\n  let query = '';\n\n  if (loaderContext.resourcePath) {\n    const parsed = path$1.parse(loaderContext.resourcePath);\n    let resourcePath = loaderContext.resourcePath;\n\n    if (parsed.ext) {\n      ext = parsed.ext.substr(1);\n    }\n\n    if (parsed.dir) {\n      basename = parsed.name;\n      resourcePath = parsed.dir + path$1.sep;\n    }\n\n    if (typeof context !== 'undefined') {\n      directory = path$1\n        .relative(context, resourcePath + '_')\n        .replace(/\\\\/g, '/')\n        .replace(/\\.\\.(\\/)?/g, '_$1');\n      directory = directory.substr(0, directory.length - 1);\n    } else {\n      directory = resourcePath.replace(/\\\\/g, '/').replace(/\\.\\.(\\/)?/g, '_$1');\n    }\n\n    if (directory.length === 1) {\n      directory = '';\n    } else if (directory.length > 1) {\n      folder = path$1.basename(directory);\n    }\n  }\n\n  if (loaderContext.resourceQuery && loaderContext.resourceQuery.length > 1) {\n    query = loaderContext.resourceQuery;\n\n    const hashIdx = query.indexOf('#');\n\n    if (hashIdx >= 0) {\n      query = query.substr(0, hashIdx);\n    }\n  }\n\n  let url = filename;\n\n  if (content) {\n    // Match hash template\n    url = url\n      // `hash` and `contenthash` are same in `loader-utils` context\n      // let's keep `hash` for backward compatibility\n      .replace(\n        /\\[(?:([^:\\]]+):)?(?:hash|contenthash)(?::([a-z]+\\d*))?(?::(\\d+))?\\]/gi,\n        (all, hashType, digestType, maxLength) =>\n          getHashDigest$1(content, hashType, digestType, parseInt(maxLength, 10))\n      )\n      .replace(/\\[emoji(?::(\\d+))?\\]/gi, (all, length) =>\n        encodeStringToEmoji(content, parseInt(length, 10))\n      );\n  }\n\n  url = url\n    .replace(/\\[ext\\]/gi, () => ext)\n    .replace(/\\[name\\]/gi, () => basename)\n    .replace(/\\[path\\]/gi, () => directory)\n    .replace(/\\[folder\\]/gi, () => folder)\n    .replace(/\\[query\\]/gi, () => query);\n\n  if (regExp && loaderContext.resourcePath) {\n    const match = loaderContext.resourcePath.match(new RegExp(regExp));\n\n    match &&\n      match.forEach((matched, i) => {\n        url = url.replace(new RegExp('\\\\[' + i + '\\\\]', 'ig'), matched);\n      });\n  }\n\n  if (\n    typeof loaderContext.options === 'object' &&\n    typeof loaderContext.options.customInterpolateName === 'function'\n  ) {\n    url = loaderContext.options.customInterpolateName.call(\n      loaderContext,\n      url,\n      name,\n      options\n    );\n  }\n\n  return url;\n}\n\nvar interpolateName_1 = interpolateName$2;\n\nconst getOptions = getOptions_1;\nconst parseQuery = parseQuery_1;\nconst stringifyRequest = stringifyRequest_1;\nconst getRemainingRequest = getRemainingRequest_1;\nconst getCurrentRequest = getCurrentRequest_1;\nconst isUrlRequest = isUrlRequest_1;\nconst urlToRequest = urlToRequest_1;\nconst parseString = parseString_1;\nconst getHashDigest = getHashDigest_1;\nconst interpolateName$1 = interpolateName_1;\n\nlib$3.getOptions = getOptions;\nlib$3.parseQuery = parseQuery;\nlib$3.stringifyRequest = stringifyRequest;\nlib$3.getRemainingRequest = getRemainingRequest;\nlib$3.getCurrentRequest = getCurrentRequest;\nlib$3.isUrlRequest = isUrlRequest;\nlib$3.urlToRequest = urlToRequest;\nlib$3.parseString = parseString;\nlib$3.getHashDigest = getHashDigest;\nlib$3.interpolateName = interpolateName$1;\n\nvar interpolateName = lib$3.interpolateName;\nvar path = path$4;\n\n/**\n * @param  {string} pattern\n * @param  {object} options\n * @param  {string} options.context\n * @param  {string} options.hashPrefix\n * @return {function}\n */\nvar genericNames = function createGenerator(pattern, options) {\n  options = options || {};\n  var context =\n    options && typeof options.context === \"string\"\n      ? options.context\n      : process.cwd();\n  var hashPrefix =\n    options && typeof options.hashPrefix === \"string\" ? options.hashPrefix : \"\";\n\n  /**\n   * @param  {string} localName Usually a class name\n   * @param  {string} filepath  Absolute path\n   * @return {string}\n   */\n  return function generate(localName, filepath) {\n    var name = pattern.replace(/\\[local\\]/gi, localName);\n    var loaderContext = {\n      resourcePath: filepath\n    };\n\n    var loaderOptions = {\n      content:\n        hashPrefix +\n        path.relative(context, filepath).replace(/\\\\/g, \"/\") +\n        \"+\" +\n        localName,\n      context: context\n    };\n\n    var genericName = interpolateName(loaderContext, name, loaderOptions);\n    return genericName\n      .replace(new RegExp(\"[^a-zA-Z0-9\\\\-_\\u00A0-\\uFFFF]\", \"g\"), \"-\")\n      .replace(/^((-?[0-9])|--)/, \"_$1\");\n  };\n};\n\nvar unquote$1 = {};\n\nObject.defineProperty(unquote$1, \"__esModule\", {\n  value: true\n});\nunquote$1.default = unquote;\n// copied from https://github.com/lakenen/node-unquote\n\nvar reg = /['\"]/;\n\nfunction unquote(str) {\n  if (!str) {\n    return \"\";\n  }\n  if (reg.test(str.charAt(0))) {\n    str = str.substr(1);\n  }\n  if (reg.test(str.charAt(str.length - 1))) {\n    str = str.substr(0, str.length - 1);\n  }\n  return str;\n}\n\nvar parser = {};\n\nvar lib$1 = {};\n\nObject.defineProperty(lib$1, \"__esModule\", {\n  value: true\n});\nlib$1.replaceAll = replaceAll;\nvar matchConstName = /[$#]?[\\w-\\.]+/g;\n\nfunction replaceAll(replacements, text) {\n  var matches = void 0;\n  while (matches = matchConstName.exec(text)) {\n    var replacement = replacements[matches[0]];\n    if (replacement) {\n      text = text.slice(0, matches.index) + replacement + text.slice(matchConstName.lastIndex);\n      matchConstName.lastIndex -= matches[0].length - replacement.length;\n    }\n  }\n  return text;\n}\n\nlib$1.default = function (css, translations) {\n  css.walkDecls(function (decl) {\n    return decl.value = replaceAll(translations, decl.value);\n  });\n  css.walkAtRules('media', function (atRule) {\n    return atRule.params = replaceAll(translations, atRule.params);\n  });\n};\n\nObject.defineProperty(parser, \"__esModule\", {\n  value: true\n});\n\nvar _icssReplaceSymbols = lib$1;\n\nvar _icssReplaceSymbols2 = _interopRequireDefault$4(_icssReplaceSymbols);\n\nfunction _interopRequireDefault$4(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// Copied from https://github.com/css-modules/css-modules-loader-core\n\nconst importRegexp = /^:import\\((.+)\\)$/;\nclass Parser {\n  constructor(pathFetcher, trace) {\n    this.pathFetcher = pathFetcher;\n    this.plugin = this.plugin.bind(this);\n    this.exportTokens = {};\n    this.translations = {};\n    this.trace = trace;\n  }\n\n  plugin() {\n    const parser = this;\n    return {\n      postcssPlugin: \"css-modules-parser\",\n      OnceExit(css) {\n        return Promise.all(parser.fetchAllImports(css)).then(() => parser.linkImportedSymbols(css)).then(() => parser.extractExports(css));\n      }\n    };\n  }\n\n  fetchAllImports(css) {\n    let imports = [];\n    css.each(node => {\n      if (node.type == \"rule\" && node.selector.match(importRegexp)) {\n        imports.push(this.fetchImport(node, css.source.input.from, imports.length));\n      }\n    });\n    return imports;\n  }\n\n  linkImportedSymbols(css) {\n    (0, _icssReplaceSymbols2.default)(css, this.translations);\n  }\n\n  extractExports(css) {\n    css.each(node => {\n      if (node.type == \"rule\" && node.selector == \":export\") this.handleExport(node);\n    });\n  }\n\n  handleExport(exportNode) {\n    exportNode.each(decl => {\n      if (decl.type == \"decl\") {\n        Object.keys(this.translations).forEach(translation => {\n          decl.value = decl.value.replace(translation, this.translations[translation]);\n        });\n        this.exportTokens[decl.prop] = decl.value;\n      }\n    });\n    exportNode.remove();\n  }\n\n  fetchImport(importNode, relativeTo, depNr) {\n    let file = importNode.selector.match(importRegexp)[1],\n        depTrace = this.trace + String.fromCharCode(depNr);\n    return this.pathFetcher(file, relativeTo, depTrace).then(exports => {\n      importNode.each(decl => {\n        if (decl.type == \"decl\") {\n          this.translations[decl.prop] = exports[decl.value];\n        }\n      });\n      importNode.remove();\n    }, err => console.log(err));\n  }\n}\nparser.default = Parser;\n\nvar loader = {};\n\nObject.defineProperty(loader, \"__esModule\", {\n  value: true\n});\n\nvar _postcss$1 = require$$0$3;\n\nvar _postcss2$1 = _interopRequireDefault$3(_postcss$1);\n\nvar _fs$1 = require$$0$1;\n\nvar _fs2 = _interopRequireDefault$3(_fs$1);\n\nvar _path = path$4;\n\nvar _path2 = _interopRequireDefault$3(_path);\n\nvar _parser$1 = parser;\n\nvar _parser2$1 = _interopRequireDefault$3(_parser$1);\n\nfunction _interopRequireDefault$3(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// Copied from https://github.com/css-modules/css-modules-loader-core\n\nclass Core {\n  constructor(plugins) {\n    this.plugins = plugins || Core.defaultPlugins;\n  }\n\n  load(sourceString, sourcePath, trace, pathFetcher) {\n    let parser = new _parser2$1.default(pathFetcher, trace);\n\n    return (0, _postcss2$1.default)(this.plugins.concat([parser.plugin()])).process(sourceString, { from: \"/\" + sourcePath }).then(result => {\n      return {\n        injectableSource: result.css,\n        exportTokens: parser.exportTokens\n      };\n    });\n  }\n}\n\n// Sorts dependencies in the following way:\n// AAA comes before AA and A\n// AB comes after AA and before A\n// All Bs come after all As\n// This ensures that the files are always returned in the following order:\n// - In the order they were required, except\n// - After all their dependencies\nconst traceKeySorter = (a, b) => {\n  if (a.length < b.length) {\n    return a < b.substring(0, a.length) ? -1 : 1;\n  } else if (a.length > b.length) {\n    return a.substring(0, b.length) <= b ? -1 : 1;\n  } else {\n    return a < b ? -1 : 1;\n  }\n};\n\nclass FileSystemLoader {\n  constructor(root, plugins) {\n    this.root = root;\n    this.sources = {};\n    this.traces = {};\n    this.importNr = 0;\n    this.core = new Core(plugins);\n    this.tokensByFile = {};\n  }\n\n  fetch(_newPath, relativeTo, _trace) {\n    let newPath = _newPath.replace(/^[\"']|[\"']$/g, \"\"),\n        trace = _trace || String.fromCharCode(this.importNr++);\n    return new Promise((resolve, reject) => {\n      let relativeDir = _path2.default.dirname(relativeTo),\n          rootRelativePath = _path2.default.resolve(relativeDir, newPath),\n          fileRelativePath = _path2.default.resolve(_path2.default.join(this.root, relativeDir), newPath);\n\n      // if the path is not relative or absolute, try to resolve it in node_modules\n      if (newPath[0] !== \".\" && newPath[0] !== \"/\") {\n        try {\n          fileRelativePath = require.resolve(newPath);\n        } catch (e) {\n          // noop\n        }\n      }\n\n      const tokens = this.tokensByFile[fileRelativePath];\n      if (tokens) {\n        return resolve(tokens);\n      }\n\n      _fs2.default.readFile(fileRelativePath, \"utf-8\", (err, source) => {\n        if (err) reject(err);\n        this.core.load(source, rootRelativePath, trace, this.fetch.bind(this)).then(({ injectableSource, exportTokens }) => {\n          this.sources[fileRelativePath] = injectableSource;\n          this.traces[trace] = fileRelativePath;\n          this.tokensByFile[fileRelativePath] = exportTokens;\n          resolve(exportTokens);\n        }, reject);\n      });\n    });\n  }\n\n  get finalSource() {\n    const traces = this.traces;\n    const sources = this.sources;\n    let written = new Set();\n\n    return Object.keys(traces).sort(traceKeySorter).map(key => {\n      const filename = traces[key];\n      if (written.has(filename)) {\n        return null;\n      }\n      written.add(filename);\n\n      return sources[filename];\n    }).join(\"\");\n  }\n}\nloader.default = FileSystemLoader;\n\nvar generateScopedName$1 = {};\n\nfunction hash(str) {\n  var hash = 5381,\n      i    = str.length;\n\n  while(i) {\n    hash = (hash * 33) ^ str.charCodeAt(--i);\n  }\n\n  /* JavaScript does bitwise operations (like XOR, above) on 32-bit signed\n   * integers. Since we want the results to be always positive, convert the\n   * signed int to an unsigned by doing an unsigned bitshift. */\n  return hash >>> 0;\n}\n\nvar stringHash = hash;\n\nObject.defineProperty(generateScopedName$1, \"__esModule\", {\n  value: true\n});\ngenerateScopedName$1.default = generateScopedName;\n\nvar _stringHash = stringHash;\n\nvar _stringHash2 = _interopRequireDefault$2(_stringHash);\n\nfunction _interopRequireDefault$2(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction generateScopedName(name, filename, css) {\n  const i = css.indexOf(`.${name}`);\n  const lineNumber = css.substr(0, i).split(/[\\r\\n]/).length;\n  const hash = (0, _stringHash2.default)(css).toString(36).substr(0, 5);\n\n  return `_${name}_${hash}_${lineNumber}`;\n}\n\nvar saveJSON$1 = {};\n\nObject.defineProperty(saveJSON$1, \"__esModule\", {\n  value: true\n});\nsaveJSON$1.default = saveJSON;\n\nvar _fs = require$$0$1;\n\nfunction saveJSON(cssFile, json) {\n  return new Promise((resolve, reject) => {\n    (0, _fs.writeFile)(`${cssFile}.json`, JSON.stringify(json), e => e ? reject(e) : resolve(json));\n  });\n}\n\nvar behaviours$1 = {};\n\nvar src$4 = {exports: {}};\n\nvar openParentheses = \"(\".charCodeAt(0);\nvar closeParentheses = \")\".charCodeAt(0);\nvar singleQuote = \"'\".charCodeAt(0);\nvar doubleQuote = '\"'.charCodeAt(0);\nvar backslash = \"\\\\\".charCodeAt(0);\nvar slash = \"/\".charCodeAt(0);\nvar comma = \",\".charCodeAt(0);\nvar colon = \":\".charCodeAt(0);\nvar star = \"*\".charCodeAt(0);\nvar uLower = \"u\".charCodeAt(0);\nvar uUpper = \"U\".charCodeAt(0);\nvar plus = \"+\".charCodeAt(0);\nvar isUnicodeRange = /^[a-f0-9?-]+$/i;\n\nvar parse$1 = function(input) {\n  var tokens = [];\n  var value = input;\n\n  var next,\n    quote,\n    prev,\n    token,\n    escape,\n    escapePos,\n    whitespacePos,\n    parenthesesOpenPos;\n  var pos = 0;\n  var code = value.charCodeAt(pos);\n  var max = value.length;\n  var stack = [{ nodes: tokens }];\n  var balanced = 0;\n  var parent;\n\n  var name = \"\";\n  var before = \"\";\n  var after = \"\";\n\n  while (pos < max) {\n    // Whitespaces\n    if (code <= 32) {\n      next = pos;\n      do {\n        next += 1;\n        code = value.charCodeAt(next);\n      } while (code <= 32);\n      token = value.slice(pos, next);\n\n      prev = tokens[tokens.length - 1];\n      if (code === closeParentheses && balanced) {\n        after = token;\n      } else if (prev && prev.type === \"div\") {\n        prev.after = token;\n        prev.sourceEndIndex += token.length;\n      } else if (\n        code === comma ||\n        code === colon ||\n        (code === slash &&\n          value.charCodeAt(next + 1) !== star &&\n          (!parent ||\n            (parent && parent.type === \"function\" && parent.value !== \"calc\")))\n      ) {\n        before = token;\n      } else {\n        tokens.push({\n          type: \"space\",\n          sourceIndex: pos,\n          sourceEndIndex: next,\n          value: token\n        });\n      }\n\n      pos = next;\n\n      // Quotes\n    } else if (code === singleQuote || code === doubleQuote) {\n      next = pos;\n      quote = code === singleQuote ? \"'\" : '\"';\n      token = {\n        type: \"string\",\n        sourceIndex: pos,\n        quote: quote\n      };\n      do {\n        escape = false;\n        next = value.indexOf(quote, next + 1);\n        if (~next) {\n          escapePos = next;\n          while (value.charCodeAt(escapePos - 1) === backslash) {\n            escapePos -= 1;\n            escape = !escape;\n          }\n        } else {\n          value += quote;\n          next = value.length - 1;\n          token.unclosed = true;\n        }\n      } while (escape);\n      token.value = value.slice(pos + 1, next);\n      token.sourceEndIndex = token.unclosed ? next : next + 1;\n      tokens.push(token);\n      pos = next + 1;\n      code = value.charCodeAt(pos);\n\n      // Comments\n    } else if (code === slash && value.charCodeAt(pos + 1) === star) {\n      next = value.indexOf(\"*/\", pos);\n\n      token = {\n        type: \"comment\",\n        sourceIndex: pos,\n        sourceEndIndex: next + 2\n      };\n\n      if (next === -1) {\n        token.unclosed = true;\n        next = value.length;\n        token.sourceEndIndex = next;\n      }\n\n      token.value = value.slice(pos + 2, next);\n      tokens.push(token);\n\n      pos = next + 2;\n      code = value.charCodeAt(pos);\n\n      // Operation within calc\n    } else if (\n      (code === slash || code === star) &&\n      parent &&\n      parent.type === \"function\" &&\n      parent.value === \"calc\"\n    ) {\n      token = value[pos];\n      tokens.push({\n        type: \"word\",\n        sourceIndex: pos - before.length,\n        sourceEndIndex: pos + token.length,\n        value: token\n      });\n      pos += 1;\n      code = value.charCodeAt(pos);\n\n      // Dividers\n    } else if (code === slash || code === comma || code === colon) {\n      token = value[pos];\n\n      tokens.push({\n        type: \"div\",\n        sourceIndex: pos - before.length,\n        sourceEndIndex: pos + token.length,\n        value: token,\n        before: before,\n        after: \"\"\n      });\n      before = \"\";\n\n      pos += 1;\n      code = value.charCodeAt(pos);\n\n      // Open parentheses\n    } else if (openParentheses === code) {\n      // Whitespaces after open parentheses\n      next = pos;\n      do {\n        next += 1;\n        code = value.charCodeAt(next);\n      } while (code <= 32);\n      parenthesesOpenPos = pos;\n      token = {\n        type: \"function\",\n        sourceIndex: pos - name.length,\n        value: name,\n        before: value.slice(parenthesesOpenPos + 1, next)\n      };\n      pos = next;\n\n      if (name === \"url\" && code !== singleQuote && code !== doubleQuote) {\n        next -= 1;\n        do {\n          escape = false;\n          next = value.indexOf(\")\", next + 1);\n          if (~next) {\n            escapePos = next;\n            while (value.charCodeAt(escapePos - 1) === backslash) {\n              escapePos -= 1;\n              escape = !escape;\n            }\n          } else {\n            value += \")\";\n            next = value.length - 1;\n            token.unclosed = true;\n          }\n        } while (escape);\n        // Whitespaces before closed\n        whitespacePos = next;\n        do {\n          whitespacePos -= 1;\n          code = value.charCodeAt(whitespacePos);\n        } while (code <= 32);\n        if (parenthesesOpenPos < whitespacePos) {\n          if (pos !== whitespacePos + 1) {\n            token.nodes = [\n              {\n                type: \"word\",\n                sourceIndex: pos,\n                sourceEndIndex: whitespacePos + 1,\n                value: value.slice(pos, whitespacePos + 1)\n              }\n            ];\n          } else {\n            token.nodes = [];\n          }\n          if (token.unclosed && whitespacePos + 1 !== next) {\n            token.after = \"\";\n            token.nodes.push({\n              type: \"space\",\n              sourceIndex: whitespacePos + 1,\n              sourceEndIndex: next,\n              value: value.slice(whitespacePos + 1, next)\n            });\n          } else {\n            token.after = value.slice(whitespacePos + 1, next);\n            token.sourceEndIndex = next;\n          }\n        } else {\n          token.after = \"\";\n          token.nodes = [];\n        }\n        pos = next + 1;\n        token.sourceEndIndex = token.unclosed ? next : pos;\n        code = value.charCodeAt(pos);\n        tokens.push(token);\n      } else {\n        balanced += 1;\n        token.after = \"\";\n        token.sourceEndIndex = pos + 1;\n        tokens.push(token);\n        stack.push(token);\n        tokens = token.nodes = [];\n        parent = token;\n      }\n      name = \"\";\n\n      // Close parentheses\n    } else if (closeParentheses === code && balanced) {\n      pos += 1;\n      code = value.charCodeAt(pos);\n\n      parent.after = after;\n      parent.sourceEndIndex += after.length;\n      after = \"\";\n      balanced -= 1;\n      stack[stack.length - 1].sourceEndIndex = pos;\n      stack.pop();\n      parent = stack[balanced];\n      tokens = parent.nodes;\n\n      // Words\n    } else {\n      next = pos;\n      do {\n        if (code === backslash) {\n          next += 1;\n        }\n        next += 1;\n        code = value.charCodeAt(next);\n      } while (\n        next < max &&\n        !(\n          code <= 32 ||\n          code === singleQuote ||\n          code === doubleQuote ||\n          code === comma ||\n          code === colon ||\n          code === slash ||\n          code === openParentheses ||\n          (code === star &&\n            parent &&\n            parent.type === \"function\" &&\n            parent.value === \"calc\") ||\n          (code === slash &&\n            parent.type === \"function\" &&\n            parent.value === \"calc\") ||\n          (code === closeParentheses && balanced)\n        )\n      );\n      token = value.slice(pos, next);\n\n      if (openParentheses === code) {\n        name = token;\n      } else if (\n        (uLower === token.charCodeAt(0) || uUpper === token.charCodeAt(0)) &&\n        plus === token.charCodeAt(1) &&\n        isUnicodeRange.test(token.slice(2))\n      ) {\n        tokens.push({\n          type: \"unicode-range\",\n          sourceIndex: pos,\n          sourceEndIndex: next,\n          value: token\n        });\n      } else {\n        tokens.push({\n          type: \"word\",\n          sourceIndex: pos,\n          sourceEndIndex: next,\n          value: token\n        });\n      }\n\n      pos = next;\n    }\n  }\n\n  for (pos = stack.length - 1; pos; pos -= 1) {\n    stack[pos].unclosed = true;\n    stack[pos].sourceEndIndex = value.length;\n  }\n\n  return stack[0].nodes;\n};\n\nvar walk$2 = function walk(nodes, cb, bubble) {\n  var i, max, node, result;\n\n  for (i = 0, max = nodes.length; i < max; i += 1) {\n    node = nodes[i];\n    if (!bubble) {\n      result = cb(node, i, nodes);\n    }\n\n    if (\n      result !== false &&\n      node.type === \"function\" &&\n      Array.isArray(node.nodes)\n    ) {\n      walk(node.nodes, cb, bubble);\n    }\n\n    if (bubble) {\n      cb(node, i, nodes);\n    }\n  }\n};\n\nfunction stringifyNode(node, custom) {\n  var type = node.type;\n  var value = node.value;\n  var buf;\n  var customResult;\n\n  if (custom && (customResult = custom(node)) !== undefined) {\n    return customResult;\n  } else if (type === \"word\" || type === \"space\") {\n    return value;\n  } else if (type === \"string\") {\n    buf = node.quote || \"\";\n    return buf + value + (node.unclosed ? \"\" : buf);\n  } else if (type === \"comment\") {\n    return \"/*\" + value + (node.unclosed ? \"\" : \"*/\");\n  } else if (type === \"div\") {\n    return (node.before || \"\") + value + (node.after || \"\");\n  } else if (Array.isArray(node.nodes)) {\n    buf = stringify$1(node.nodes, custom);\n    if (type !== \"function\") {\n      return buf;\n    }\n    return (\n      value +\n      \"(\" +\n      (node.before || \"\") +\n      buf +\n      (node.after || \"\") +\n      (node.unclosed ? \"\" : \")\")\n    );\n  }\n  return value;\n}\n\nfunction stringify$1(nodes, custom) {\n  var result, i;\n\n  if (Array.isArray(nodes)) {\n    result = \"\";\n    for (i = nodes.length - 1; ~i; i -= 1) {\n      result = stringifyNode(nodes[i], custom) + result;\n    }\n    return result;\n  }\n  return stringifyNode(nodes, custom);\n}\n\nvar stringify_1 = stringify$1;\n\nvar unit;\nvar hasRequiredUnit;\n\nfunction requireUnit () {\n\tif (hasRequiredUnit) return unit;\n\thasRequiredUnit = 1;\n\tvar minus = \"-\".charCodeAt(0);\n\tvar plus = \"+\".charCodeAt(0);\n\tvar dot = \".\".charCodeAt(0);\n\tvar exp = \"e\".charCodeAt(0);\n\tvar EXP = \"E\".charCodeAt(0);\n\n\t// Check if three code points would start a number\n\t// https://www.w3.org/TR/css-syntax-3/#starts-with-a-number\n\tfunction likeNumber(value) {\n\t  var code = value.charCodeAt(0);\n\t  var nextCode;\n\n\t  if (code === plus || code === minus) {\n\t    nextCode = value.charCodeAt(1);\n\n\t    if (nextCode >= 48 && nextCode <= 57) {\n\t      return true;\n\t    }\n\n\t    var nextNextCode = value.charCodeAt(2);\n\n\t    if (nextCode === dot && nextNextCode >= 48 && nextNextCode <= 57) {\n\t      return true;\n\t    }\n\n\t    return false;\n\t  }\n\n\t  if (code === dot) {\n\t    nextCode = value.charCodeAt(1);\n\n\t    if (nextCode >= 48 && nextCode <= 57) {\n\t      return true;\n\t    }\n\n\t    return false;\n\t  }\n\n\t  if (code >= 48 && code <= 57) {\n\t    return true;\n\t  }\n\n\t  return false;\n\t}\n\n\t// Consume a number\n\t// https://www.w3.org/TR/css-syntax-3/#consume-number\n\tunit = function(value) {\n\t  var pos = 0;\n\t  var length = value.length;\n\t  var code;\n\t  var nextCode;\n\t  var nextNextCode;\n\n\t  if (length === 0 || !likeNumber(value)) {\n\t    return false;\n\t  }\n\n\t  code = value.charCodeAt(pos);\n\n\t  if (code === plus || code === minus) {\n\t    pos++;\n\t  }\n\n\t  while (pos < length) {\n\t    code = value.charCodeAt(pos);\n\n\t    if (code < 48 || code > 57) {\n\t      break;\n\t    }\n\n\t    pos += 1;\n\t  }\n\n\t  code = value.charCodeAt(pos);\n\t  nextCode = value.charCodeAt(pos + 1);\n\n\t  if (code === dot && nextCode >= 48 && nextCode <= 57) {\n\t    pos += 2;\n\n\t    while (pos < length) {\n\t      code = value.charCodeAt(pos);\n\n\t      if (code < 48 || code > 57) {\n\t        break;\n\t      }\n\n\t      pos += 1;\n\t    }\n\t  }\n\n\t  code = value.charCodeAt(pos);\n\t  nextCode = value.charCodeAt(pos + 1);\n\t  nextNextCode = value.charCodeAt(pos + 2);\n\n\t  if (\n\t    (code === exp || code === EXP) &&\n\t    ((nextCode >= 48 && nextCode <= 57) ||\n\t      ((nextCode === plus || nextCode === minus) &&\n\t        nextNextCode >= 48 &&\n\t        nextNextCode <= 57))\n\t  ) {\n\t    pos += nextCode === plus || nextCode === minus ? 3 : 2;\n\n\t    while (pos < length) {\n\t      code = value.charCodeAt(pos);\n\n\t      if (code < 48 || code > 57) {\n\t        break;\n\t      }\n\n\t      pos += 1;\n\t    }\n\t  }\n\n\t  return {\n\t    number: value.slice(0, pos),\n\t    unit: value.slice(pos)\n\t  };\n\t};\n\treturn unit;\n}\n\nvar parse = parse$1;\nvar walk$1 = walk$2;\nvar stringify = stringify_1;\n\nfunction ValueParser(value) {\n  if (this instanceof ValueParser) {\n    this.nodes = parse(value);\n    return this;\n  }\n  return new ValueParser(value);\n}\n\nValueParser.prototype.toString = function() {\n  return Array.isArray(this.nodes) ? stringify(this.nodes) : \"\";\n};\n\nValueParser.prototype.walk = function(cb, bubble) {\n  walk$1(this.nodes, cb, bubble);\n  return this;\n};\n\nValueParser.unit = requireUnit();\n\nValueParser.walk = walk$1;\n\nValueParser.stringify = stringify;\n\nvar lib = ValueParser;\n\nconst matchValueName = /[$]?[\\w-]+/g;\n\nconst replaceValueSymbols$2 = (value, replacements) => {\n  let matches;\n\n  while ((matches = matchValueName.exec(value))) {\n    const replacement = replacements[matches[0]];\n\n    if (replacement) {\n      value =\n        value.slice(0, matches.index) +\n        replacement +\n        value.slice(matchValueName.lastIndex);\n\n      matchValueName.lastIndex -= matches[0].length - replacement.length;\n    }\n  }\n\n  return value;\n};\n\nvar replaceValueSymbols_1 = replaceValueSymbols$2;\n\nconst replaceValueSymbols$1 = replaceValueSymbols_1;\n\nconst replaceSymbols$1 = (css, replacements) => {\n  css.walk((node) => {\n    if (node.type === \"decl\" && node.value) {\n      node.value = replaceValueSymbols$1(node.value.toString(), replacements);\n    } else if (node.type === \"rule\" && node.selector) {\n      node.selector = replaceValueSymbols$1(\n        node.selector.toString(),\n        replacements\n      );\n    } else if (node.type === \"atrule\" && node.params) {\n      node.params = replaceValueSymbols$1(node.params.toString(), replacements);\n    }\n  });\n};\n\nvar replaceSymbols_1 = replaceSymbols$1;\n\nconst importPattern = /^:import\\((\"[^\"]*\"|'[^']*'|[^\"']+)\\)$/;\nconst balancedQuotes = /^(\"[^\"]*\"|'[^']*'|[^\"']+)$/;\n\nconst getDeclsObject = (rule) => {\n  const object = {};\n\n  rule.walkDecls((decl) => {\n    const before = decl.raws.before ? decl.raws.before.trim() : \"\";\n\n    object[before + decl.prop] = decl.value;\n  });\n\n  return object;\n};\n/**\n *\n * @param {string} css\n * @param {boolean} removeRules\n * @param {'auto' | 'rule' | 'at-rule'} mode\n */\nconst extractICSS$2 = (css, removeRules = true, mode = \"auto\") => {\n  const icssImports = {};\n  const icssExports = {};\n\n  function addImports(node, path) {\n    const unquoted = path.replace(/'|\"/g, \"\");\n    icssImports[unquoted] = Object.assign(\n      icssImports[unquoted] || {},\n      getDeclsObject(node)\n    );\n\n    if (removeRules) {\n      node.remove();\n    }\n  }\n\n  function addExports(node) {\n    Object.assign(icssExports, getDeclsObject(node));\n    if (removeRules) {\n      node.remove();\n    }\n  }\n\n  css.each((node) => {\n    if (node.type === \"rule\" && mode !== \"at-rule\") {\n      if (node.selector.slice(0, 7) === \":import\") {\n        const matches = importPattern.exec(node.selector);\n\n        if (matches) {\n          addImports(node, matches[1]);\n        }\n      }\n\n      if (node.selector === \":export\") {\n        addExports(node);\n      }\n    }\n\n    if (node.type === \"atrule\" && mode !== \"rule\") {\n      if (node.name === \"icss-import\") {\n        const matches = balancedQuotes.exec(node.params);\n\n        if (matches) {\n          addImports(node, matches[1]);\n        }\n      }\n      if (node.name === \"icss-export\") {\n        addExports(node);\n      }\n    }\n  });\n\n  return { icssImports, icssExports };\n};\n\nvar extractICSS_1 = extractICSS$2;\n\nconst createImports = (imports, postcss, mode = \"rule\") => {\n  return Object.keys(imports).map((path) => {\n    const aliases = imports[path];\n    const declarations = Object.keys(aliases).map((key) =>\n      postcss.decl({\n        prop: key,\n        value: aliases[key],\n        raws: { before: \"\\n  \" },\n      })\n    );\n\n    const hasDeclarations = declarations.length > 0;\n\n    const rule =\n      mode === \"rule\"\n        ? postcss.rule({\n            selector: `:import('${path}')`,\n            raws: { after: hasDeclarations ? \"\\n\" : \"\" },\n          })\n        : postcss.atRule({\n            name: \"icss-import\",\n            params: `'${path}'`,\n            raws: { after: hasDeclarations ? \"\\n\" : \"\" },\n          });\n\n    if (hasDeclarations) {\n      rule.append(declarations);\n    }\n\n    return rule;\n  });\n};\n\nconst createExports = (exports, postcss, mode = \"rule\") => {\n  const declarations = Object.keys(exports).map((key) =>\n    postcss.decl({\n      prop: key,\n      value: exports[key],\n      raws: { before: \"\\n  \" },\n    })\n  );\n\n  if (declarations.length === 0) {\n    return [];\n  }\n  const rule =\n    mode === \"rule\"\n      ? postcss.rule({\n          selector: `:export`,\n          raws: { after: \"\\n\" },\n        })\n      : postcss.atRule({\n          name: \"icss-export\",\n          raws: { after: \"\\n\" },\n        });\n\n  rule.append(declarations);\n\n  return [rule];\n};\n\nconst createICSSRules$1 = (imports, exports, postcss, mode) => [\n  ...createImports(imports, postcss, mode),\n  ...createExports(exports, postcss, mode),\n];\n\nvar createICSSRules_1 = createICSSRules$1;\n\nconst replaceValueSymbols = replaceValueSymbols_1;\nconst replaceSymbols = replaceSymbols_1;\nconst extractICSS$1 = extractICSS_1;\nconst createICSSRules = createICSSRules_1;\n\nvar src$3 = {\n  replaceValueSymbols,\n  replaceSymbols,\n  extractICSS: extractICSS$1,\n  createICSSRules,\n};\n\nconst selectorParser$1 = dist.exports;\nconst valueParser = lib;\nconst { extractICSS } = src$3;\n\nconst isSpacing = (node) => node.type === \"combinator\" && node.value === \" \";\n\nfunction normalizeNodeArray(nodes) {\n  const array = [];\n\n  nodes.forEach((x) => {\n    if (Array.isArray(x)) {\n      normalizeNodeArray(x).forEach((item) => {\n        array.push(item);\n      });\n    } else if (x) {\n      array.push(x);\n    }\n  });\n\n  if (array.length > 0 && isSpacing(array[array.length - 1])) {\n    array.pop();\n  }\n  return array;\n}\n\nfunction localizeNode(rule, mode, localAliasMap) {\n  const transform = (node, context) => {\n    if (context.ignoreNextSpacing && !isSpacing(node)) {\n      throw new Error(\"Missing whitespace after \" + context.ignoreNextSpacing);\n    }\n\n    if (context.enforceNoSpacing && isSpacing(node)) {\n      throw new Error(\"Missing whitespace before \" + context.enforceNoSpacing);\n    }\n\n    let newNodes;\n\n    switch (node.type) {\n      case \"root\": {\n        let resultingGlobal;\n\n        context.hasPureGlobals = false;\n\n        newNodes = node.nodes.map((n) => {\n          const nContext = {\n            global: context.global,\n            lastWasSpacing: true,\n            hasLocals: false,\n            explicit: false,\n          };\n\n          n = transform(n, nContext);\n\n          if (typeof resultingGlobal === \"undefined\") {\n            resultingGlobal = nContext.global;\n          } else if (resultingGlobal !== nContext.global) {\n            throw new Error(\n              'Inconsistent rule global/local result in rule \"' +\n                node +\n                '\" (multiple selectors must result in the same mode for the rule)'\n            );\n          }\n\n          if (!nContext.hasLocals) {\n            context.hasPureGlobals = true;\n          }\n\n          return n;\n        });\n\n        context.global = resultingGlobal;\n\n        node.nodes = normalizeNodeArray(newNodes);\n        break;\n      }\n      case \"selector\": {\n        newNodes = node.map((childNode) => transform(childNode, context));\n\n        node = node.clone();\n        node.nodes = normalizeNodeArray(newNodes);\n        break;\n      }\n      case \"combinator\": {\n        if (isSpacing(node)) {\n          if (context.ignoreNextSpacing) {\n            context.ignoreNextSpacing = false;\n            context.lastWasSpacing = false;\n            context.enforceNoSpacing = false;\n            return null;\n          }\n          context.lastWasSpacing = true;\n          return node;\n        }\n        break;\n      }\n      case \"pseudo\": {\n        let childContext;\n        const isNested = !!node.length;\n        const isScoped = node.value === \":local\" || node.value === \":global\";\n        const isImportExport =\n          node.value === \":import\" || node.value === \":export\";\n\n        if (isImportExport) {\n          context.hasLocals = true;\n          // :local(.foo)\n        } else if (isNested) {\n          if (isScoped) {\n            if (node.nodes.length === 0) {\n              throw new Error(`${node.value}() can't be empty`);\n            }\n\n            if (context.inside) {\n              throw new Error(\n                `A ${node.value} is not allowed inside of a ${context.inside}(...)`\n              );\n            }\n\n            childContext = {\n              global: node.value === \":global\",\n              inside: node.value,\n              hasLocals: false,\n              explicit: true,\n            };\n\n            newNodes = node\n              .map((childNode) => transform(childNode, childContext))\n              .reduce((acc, next) => acc.concat(next.nodes), []);\n\n            if (newNodes.length) {\n              const { before, after } = node.spaces;\n\n              const first = newNodes[0];\n              const last = newNodes[newNodes.length - 1];\n\n              first.spaces = { before, after: first.spaces.after };\n              last.spaces = { before: last.spaces.before, after };\n            }\n\n            node = newNodes;\n\n            break;\n          } else {\n            childContext = {\n              global: context.global,\n              inside: context.inside,\n              lastWasSpacing: true,\n              hasLocals: false,\n              explicit: context.explicit,\n            };\n            newNodes = node.map((childNode) =>\n              transform(childNode, childContext)\n            );\n\n            node = node.clone();\n            node.nodes = normalizeNodeArray(newNodes);\n\n            if (childContext.hasLocals) {\n              context.hasLocals = true;\n            }\n          }\n          break;\n\n          //:local .foo .bar\n        } else if (isScoped) {\n          if (context.inside) {\n            throw new Error(\n              `A ${node.value} is not allowed inside of a ${context.inside}(...)`\n            );\n          }\n\n          const addBackSpacing = !!node.spaces.before;\n\n          context.ignoreNextSpacing = context.lastWasSpacing\n            ? node.value\n            : false;\n\n          context.enforceNoSpacing = context.lastWasSpacing\n            ? false\n            : node.value;\n\n          context.global = node.value === \":global\";\n          context.explicit = true;\n\n          // because this node has spacing that is lost when we remove it\n          // we make up for it by adding an extra combinator in since adding\n          // spacing on the parent selector doesn't work\n          return addBackSpacing\n            ? selectorParser$1.combinator({ value: \" \" })\n            : null;\n        }\n        break;\n      }\n      case \"id\":\n      case \"class\": {\n        if (!node.value) {\n          throw new Error(\"Invalid class or id selector syntax\");\n        }\n\n        if (context.global) {\n          break;\n        }\n\n        const isImportedValue = localAliasMap.has(node.value);\n        const isImportedWithExplicitScope = isImportedValue && context.explicit;\n\n        if (!isImportedValue || isImportedWithExplicitScope) {\n          const innerNode = node.clone();\n          innerNode.spaces = { before: \"\", after: \"\" };\n\n          node = selectorParser$1.pseudo({\n            value: \":local\",\n            nodes: [innerNode],\n            spaces: node.spaces,\n          });\n\n          context.hasLocals = true;\n        }\n\n        break;\n      }\n    }\n\n    context.lastWasSpacing = false;\n    context.ignoreNextSpacing = false;\n    context.enforceNoSpacing = false;\n\n    return node;\n  };\n\n  const rootContext = {\n    global: mode === \"global\",\n    hasPureGlobals: false,\n  };\n\n  rootContext.selector = selectorParser$1((root) => {\n    transform(root, rootContext);\n  }).processSync(rule, { updateSelector: false, lossless: true });\n\n  return rootContext;\n}\n\nfunction localizeDeclNode(node, context) {\n  switch (node.type) {\n    case \"word\":\n      if (context.localizeNextItem) {\n        if (!context.localAliasMap.has(node.value)) {\n          node.value = \":local(\" + node.value + \")\";\n          context.localizeNextItem = false;\n        }\n      }\n      break;\n\n    case \"function\":\n      if (\n        context.options &&\n        context.options.rewriteUrl &&\n        node.value.toLowerCase() === \"url\"\n      ) {\n        node.nodes.map((nestedNode) => {\n          if (nestedNode.type !== \"string\" && nestedNode.type !== \"word\") {\n            return;\n          }\n\n          let newUrl = context.options.rewriteUrl(\n            context.global,\n            nestedNode.value\n          );\n\n          switch (nestedNode.type) {\n            case \"string\":\n              if (nestedNode.quote === \"'\") {\n                newUrl = newUrl.replace(/(\\\\)/g, \"\\\\$1\").replace(/'/g, \"\\\\'\");\n              }\n\n              if (nestedNode.quote === '\"') {\n                newUrl = newUrl.replace(/(\\\\)/g, \"\\\\$1\").replace(/\"/g, '\\\\\"');\n              }\n\n              break;\n            case \"word\":\n              newUrl = newUrl.replace(/(\"|'|\\)|\\\\)/g, \"\\\\$1\");\n              break;\n          }\n\n          nestedNode.value = newUrl;\n        });\n      }\n      break;\n  }\n  return node;\n}\n\nfunction isWordAFunctionArgument(wordNode, functionNode) {\n  return functionNode\n    ? functionNode.nodes.some(\n        (functionNodeChild) =>\n          functionNodeChild.sourceIndex === wordNode.sourceIndex\n      )\n    : false;\n}\n\nfunction localizeDeclarationValues(localize, declaration, context) {\n  const valueNodes = valueParser(declaration.value);\n\n  valueNodes.walk((node, index, nodes) => {\n    const subContext = {\n      options: context.options,\n      global: context.global,\n      localizeNextItem: localize && !context.global,\n      localAliasMap: context.localAliasMap,\n    };\n    nodes[index] = localizeDeclNode(node, subContext);\n  });\n\n  declaration.value = valueNodes.toString();\n}\n\nfunction localizeDeclaration(declaration, context) {\n  const isAnimation = /animation$/i.test(declaration.prop);\n\n  if (isAnimation) {\n    const validIdent = /^-?[_a-z][_a-z0-9-]*$/i;\n\n    /*\n    The spec defines some keywords that you can use to describe properties such as the timing\n    function. These are still valid animation names, so as long as there is a property that accepts\n    a keyword, it is given priority. Only when all the properties that can take a keyword are\n    exhausted can the animation name be set to the keyword. I.e.\n  \n    animation: infinite infinite;\n  \n    The animation will repeat an infinite number of times from the first argument, and will have an\n    animation name of infinite from the second.\n    */\n    const animationKeywords = {\n      $alternate: 1,\n      \"$alternate-reverse\": 1,\n      $backwards: 1,\n      $both: 1,\n      $ease: 1,\n      \"$ease-in\": 1,\n      \"$ease-in-out\": 1,\n      \"$ease-out\": 1,\n      $forwards: 1,\n      $infinite: 1,\n      $linear: 1,\n      $none: Infinity, // No matter how many times you write none, it will never be an animation name\n      $normal: 1,\n      $paused: 1,\n      $reverse: 1,\n      $running: 1,\n      \"$step-end\": 1,\n      \"$step-start\": 1,\n      $initial: Infinity,\n      $inherit: Infinity,\n      $unset: Infinity,\n    };\n    let parsedAnimationKeywords = {};\n    let stepsFunctionNode = null;\n    const valueNodes = valueParser(declaration.value).walk((node) => {\n      /* If div-token appeared (represents as comma ','), a possibility of an animation-keywords should be reflesh. */\n      if (node.type === \"div\") {\n        parsedAnimationKeywords = {};\n      }\n      if (node.type === \"function\" && node.value.toLowerCase() === \"steps\") {\n        stepsFunctionNode = node;\n      }\n      const value =\n        node.type === \"word\" &&\n        !isWordAFunctionArgument(node, stepsFunctionNode)\n          ? node.value.toLowerCase()\n          : null;\n\n      let shouldParseAnimationName = false;\n\n      if (value && validIdent.test(value)) {\n        if (\"$\" + value in animationKeywords) {\n          parsedAnimationKeywords[\"$\" + value] =\n            \"$\" + value in parsedAnimationKeywords\n              ? parsedAnimationKeywords[\"$\" + value] + 1\n              : 0;\n\n          shouldParseAnimationName =\n            parsedAnimationKeywords[\"$\" + value] >=\n            animationKeywords[\"$\" + value];\n        } else {\n          shouldParseAnimationName = true;\n        }\n      }\n\n      const subContext = {\n        options: context.options,\n        global: context.global,\n        localizeNextItem: shouldParseAnimationName && !context.global,\n        localAliasMap: context.localAliasMap,\n      };\n      return localizeDeclNode(node, subContext);\n    });\n\n    declaration.value = valueNodes.toString();\n\n    return;\n  }\n\n  const isAnimationName = /animation(-name)?$/i.test(declaration.prop);\n\n  if (isAnimationName) {\n    return localizeDeclarationValues(true, declaration, context);\n  }\n\n  const hasUrl = /url\\(/i.test(declaration.value);\n\n  if (hasUrl) {\n    return localizeDeclarationValues(false, declaration, context);\n  }\n}\n\nsrc$4.exports = (options = {}) => {\n  if (\n    options &&\n    options.mode &&\n    options.mode !== \"global\" &&\n    options.mode !== \"local\" &&\n    options.mode !== \"pure\"\n  ) {\n    throw new Error(\n      'options.mode must be either \"global\", \"local\" or \"pure\" (default \"local\")'\n    );\n  }\n\n  const pureMode = options && options.mode === \"pure\";\n  const globalMode = options && options.mode === \"global\";\n\n  return {\n    postcssPlugin: \"postcss-modules-local-by-default\",\n    prepare() {\n      const localAliasMap = new Map();\n\n      return {\n        Once(root) {\n          const { icssImports } = extractICSS(root, false);\n\n          Object.keys(icssImports).forEach((key) => {\n            Object.keys(icssImports[key]).forEach((prop) => {\n              localAliasMap.set(prop, icssImports[key][prop]);\n            });\n          });\n\n          root.walkAtRules((atRule) => {\n            if (/keyframes$/i.test(atRule.name)) {\n              const globalMatch = /^\\s*:global\\s*\\((.+)\\)\\s*$/.exec(\n                atRule.params\n              );\n              const localMatch = /^\\s*:local\\s*\\((.+)\\)\\s*$/.exec(\n                atRule.params\n              );\n\n              let globalKeyframes = globalMode;\n\n              if (globalMatch) {\n                if (pureMode) {\n                  throw atRule.error(\n                    \"@keyframes :global(...) is not allowed in pure mode\"\n                  );\n                }\n                atRule.params = globalMatch[1];\n                globalKeyframes = true;\n              } else if (localMatch) {\n                atRule.params = localMatch[0];\n                globalKeyframes = false;\n              } else if (!globalMode) {\n                if (atRule.params && !localAliasMap.has(atRule.params)) {\n                  atRule.params = \":local(\" + atRule.params + \")\";\n                }\n              }\n\n              atRule.walkDecls((declaration) => {\n                localizeDeclaration(declaration, {\n                  localAliasMap,\n                  options: options,\n                  global: globalKeyframes,\n                });\n              });\n            } else if (atRule.nodes) {\n              atRule.nodes.forEach((declaration) => {\n                if (declaration.type === \"decl\") {\n                  localizeDeclaration(declaration, {\n                    localAliasMap,\n                    options: options,\n                    global: globalMode,\n                  });\n                }\n              });\n            }\n          });\n\n          root.walkRules((rule) => {\n            if (\n              rule.parent &&\n              rule.parent.type === \"atrule\" &&\n              /keyframes$/i.test(rule.parent.name)\n            ) {\n              // ignore keyframe rules\n              return;\n            }\n\n            const context = localizeNode(rule, options.mode, localAliasMap);\n\n            context.options = options;\n            context.localAliasMap = localAliasMap;\n\n            if (pureMode && context.hasPureGlobals) {\n              throw rule.error(\n                'Selector \"' +\n                  rule.selector +\n                  '\" is not pure ' +\n                  \"(pure selectors must contain at least one local class or id)\"\n              );\n            }\n\n            rule.selector = context.selector;\n\n            // Less-syntax mixins parse as rules with no nodes\n            if (rule.nodes) {\n              rule.nodes.forEach((declaration) =>\n                localizeDeclaration(declaration, context)\n              );\n            }\n          });\n        },\n      };\n    },\n  };\n};\nsrc$4.exports.postcss = true;\n\nvar src$2 = {exports: {}};\n\nconst PERMANENT_MARKER = 2;\nconst TEMPORARY_MARKER = 1;\n\nfunction createError(node, graph) {\n  const er = new Error(\"Nondeterministic import's order\");\n\n  const related = graph[node];\n  const relatedNode = related.find(\n    (relatedNode) => graph[relatedNode].indexOf(node) > -1\n  );\n\n  er.nodes = [node, relatedNode];\n\n  return er;\n}\n\nfunction walkGraph(node, graph, state, result, strict) {\n  if (state[node] === PERMANENT_MARKER) {\n    return;\n  }\n\n  if (state[node] === TEMPORARY_MARKER) {\n    if (strict) {\n      return createError(node, graph);\n    }\n\n    return;\n  }\n\n  state[node] = TEMPORARY_MARKER;\n\n  const children = graph[node];\n  const length = children.length;\n\n  for (let i = 0; i < length; ++i) {\n    const error = walkGraph(children[i], graph, state, result, strict);\n\n    if (error instanceof Error) {\n      return error;\n    }\n  }\n\n  state[node] = PERMANENT_MARKER;\n\n  result.push(node);\n}\n\nfunction topologicalSort$1(graph, strict) {\n  const result = [];\n  const state = {};\n\n  const nodes = Object.keys(graph);\n  const length = nodes.length;\n\n  for (let i = 0; i < length; ++i) {\n    const er = walkGraph(nodes[i], graph, state, result, strict);\n\n    if (er instanceof Error) {\n      return er;\n    }\n  }\n\n  return result;\n}\n\nvar topologicalSort_1 = topologicalSort$1;\n\nconst topologicalSort = topologicalSort_1;\n\nconst matchImports$1 = /^(.+?)\\s+from\\s+(?:\"([^\"]+)\"|'([^']+)'|(global))$/;\nconst icssImport = /^:import\\((?:\"([^\"]+)\"|'([^']+)')\\)/;\n\nconst VISITED_MARKER = 1;\n\n/**\n * :import('G') {}\n *\n * Rule\n *   composes: ... from 'A'\n *   composes: ... from 'B'\n\n * Rule\n *   composes: ... from 'A'\n *   composes: ... from 'A'\n *   composes: ... from 'C'\n *\n * Results in:\n *\n * graph: {\n *   G: [],\n *   A: [],\n *   B: ['A'],\n *   C: ['A'],\n * }\n */\nfunction addImportToGraph(importId, parentId, graph, visited) {\n  const siblingsId = parentId + \"_\" + \"siblings\";\n  const visitedId = parentId + \"_\" + importId;\n\n  if (visited[visitedId] !== VISITED_MARKER) {\n    if (!Array.isArray(visited[siblingsId])) {\n      visited[siblingsId] = [];\n    }\n\n    const siblings = visited[siblingsId];\n\n    if (Array.isArray(graph[importId])) {\n      graph[importId] = graph[importId].concat(siblings);\n    } else {\n      graph[importId] = siblings.slice();\n    }\n\n    visited[visitedId] = VISITED_MARKER;\n\n    siblings.push(importId);\n  }\n}\n\nsrc$2.exports = (options = {}) => {\n  let importIndex = 0;\n  const createImportedName =\n    typeof options.createImportedName !== \"function\"\n      ? (importName /*, path*/) =>\n          `i__imported_${importName.replace(/\\W/g, \"_\")}_${importIndex++}`\n      : options.createImportedName;\n  const failOnWrongOrder = options.failOnWrongOrder;\n\n  return {\n    postcssPlugin: \"postcss-modules-extract-imports\",\n    prepare() {\n      const graph = {};\n      const visited = {};\n      const existingImports = {};\n      const importDecls = {};\n      const imports = {};\n\n      return {\n        Once(root, postcss) {\n          // Check the existing imports order and save refs\n          root.walkRules((rule) => {\n            const matches = icssImport.exec(rule.selector);\n\n            if (matches) {\n              const [, /*match*/ doubleQuotePath, singleQuotePath] = matches;\n              const importPath = doubleQuotePath || singleQuotePath;\n\n              addImportToGraph(importPath, \"root\", graph, visited);\n\n              existingImports[importPath] = rule;\n            }\n          });\n\n          root.walkDecls(/^composes$/, (declaration) => {\n            const matches = declaration.value.match(matchImports$1);\n\n            if (!matches) {\n              return;\n            }\n\n            let tmpSymbols;\n            let [\n              ,\n              /*match*/ symbols,\n              doubleQuotePath,\n              singleQuotePath,\n              global,\n            ] = matches;\n\n            if (global) {\n              // Composing globals simply means changing these classes to wrap them in global(name)\n              tmpSymbols = symbols.split(/\\s+/).map((s) => `global(${s})`);\n            } else {\n              const importPath = doubleQuotePath || singleQuotePath;\n\n              let parent = declaration.parent;\n              let parentIndexes = \"\";\n\n              while (parent.type !== \"root\") {\n                parentIndexes =\n                  parent.parent.index(parent) + \"_\" + parentIndexes;\n                parent = parent.parent;\n              }\n\n              const { selector } = declaration.parent;\n              const parentRule = `_${parentIndexes}${selector}`;\n\n              addImportToGraph(importPath, parentRule, graph, visited);\n\n              importDecls[importPath] = declaration;\n              imports[importPath] = imports[importPath] || {};\n\n              tmpSymbols = symbols.split(/\\s+/).map((s) => {\n                if (!imports[importPath][s]) {\n                  imports[importPath][s] = createImportedName(s, importPath);\n                }\n\n                return imports[importPath][s];\n              });\n            }\n\n            declaration.value = tmpSymbols.join(\" \");\n          });\n\n          const importsOrder = topologicalSort(graph, failOnWrongOrder);\n\n          if (importsOrder instanceof Error) {\n            const importPath = importsOrder.nodes.find((importPath) =>\n              // eslint-disable-next-line no-prototype-builtins\n              importDecls.hasOwnProperty(importPath)\n            );\n            const decl = importDecls[importPath];\n\n            throw decl.error(\n              \"Failed to resolve order of composed modules \" +\n                importsOrder.nodes\n                  .map((importPath) => \"`\" + importPath + \"`\")\n                  .join(\", \") +\n                \".\",\n              {\n                plugin: \"postcss-modules-extract-imports\",\n                word: \"composes\",\n              }\n            );\n          }\n\n          let lastImportRule;\n\n          importsOrder.forEach((path) => {\n            const importedSymbols = imports[path];\n            let rule = existingImports[path];\n\n            if (!rule && importedSymbols) {\n              rule = postcss.rule({\n                selector: `:import(\"${path}\")`,\n                raws: { after: \"\\n\" },\n              });\n\n              if (lastImportRule) {\n                root.insertAfter(lastImportRule, rule);\n              } else {\n                root.prepend(rule);\n              }\n            }\n\n            lastImportRule = rule;\n\n            if (!importedSymbols) {\n              return;\n            }\n\n            Object.keys(importedSymbols).forEach((importedSymbol) => {\n              rule.append(\n                postcss.decl({\n                  value: importedSymbol,\n                  prop: importedSymbols[importedSymbol],\n                  raws: { before: \"\\n  \" },\n                })\n              );\n            });\n          });\n        },\n      };\n    },\n  };\n};\n\nsrc$2.exports.postcss = true;\n\nconst selectorParser = dist.exports;\n\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction getSingleLocalNamesForComposes(root) {\n  return root.nodes.map((node) => {\n    if (node.type !== \"selector\" || node.nodes.length !== 1) {\n      throw new Error(\n        `composition is only allowed when selector is single :local class name not in \"${root}\"`\n      );\n    }\n\n    node = node.nodes[0];\n\n    if (\n      node.type !== \"pseudo\" ||\n      node.value !== \":local\" ||\n      node.nodes.length !== 1\n    ) {\n      throw new Error(\n        'composition is only allowed when selector is single :local class name not in \"' +\n          root +\n          '\", \"' +\n          node +\n          '\" is weird'\n      );\n    }\n\n    node = node.first;\n\n    if (node.type !== \"selector\" || node.length !== 1) {\n      throw new Error(\n        'composition is only allowed when selector is single :local class name not in \"' +\n          root +\n          '\", \"' +\n          node +\n          '\" is weird'\n      );\n    }\n\n    node = node.first;\n\n    if (node.type !== \"class\") {\n      // 'id' is not possible, because you can't compose ids\n      throw new Error(\n        'composition is only allowed when selector is single :local class name not in \"' +\n          root +\n          '\", \"' +\n          node +\n          '\" is weird'\n      );\n    }\n\n    return node.value;\n  });\n}\n\nconst whitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\";\nconst unescapeRegExp = new RegExp(\n  \"\\\\\\\\([\\\\da-f]{1,6}\" + whitespace + \"?|(\" + whitespace + \")|.)\",\n  \"ig\"\n);\n\nfunction unescape(str) {\n  return str.replace(unescapeRegExp, (_, escaped, escapedWhitespace) => {\n    const high = \"0x\" + escaped - 0x10000;\n\n    // NaN means non-codepoint\n    // Workaround erroneous numeric interpretation of +\"0x\"\n    return high !== high || escapedWhitespace\n      ? escaped\n      : high < 0\n      ? // BMP codepoint\n        String.fromCharCode(high + 0x10000)\n      : // Supplemental Plane codepoint (surrogate pair)\n        String.fromCharCode((high >> 10) | 0xd800, (high & 0x3ff) | 0xdc00);\n  });\n}\n\nconst plugin = (options = {}) => {\n  const generateScopedName =\n    (options && options.generateScopedName) || plugin.generateScopedName;\n  const generateExportEntry =\n    (options && options.generateExportEntry) || plugin.generateExportEntry;\n  const exportGlobals = options && options.exportGlobals;\n\n  return {\n    postcssPlugin: \"postcss-modules-scope\",\n    Once(root, { rule }) {\n      const exports = Object.create(null);\n\n      function exportScopedName(name, rawName) {\n        const scopedName = generateScopedName(\n          rawName ? rawName : name,\n          root.source.input.from,\n          root.source.input.css\n        );\n        const exportEntry = generateExportEntry(\n          rawName ? rawName : name,\n          scopedName,\n          root.source.input.from,\n          root.source.input.css\n        );\n        const { key, value } = exportEntry;\n\n        exports[key] = exports[key] || [];\n\n        if (exports[key].indexOf(value) < 0) {\n          exports[key].push(value);\n        }\n\n        return scopedName;\n      }\n\n      function localizeNode(node) {\n        switch (node.type) {\n          case \"selector\":\n            node.nodes = node.map(localizeNode);\n            return node;\n          case \"class\":\n            return selectorParser.className({\n              value: exportScopedName(\n                node.value,\n                node.raws && node.raws.value ? node.raws.value : null\n              ),\n            });\n          case \"id\": {\n            return selectorParser.id({\n              value: exportScopedName(\n                node.value,\n                node.raws && node.raws.value ? node.raws.value : null\n              ),\n            });\n          }\n        }\n\n        throw new Error(\n          `${node.type} (\"${node}\") is not allowed in a :local block`\n        );\n      }\n\n      function traverseNode(node) {\n        switch (node.type) {\n          case \"pseudo\":\n            if (node.value === \":local\") {\n              if (node.nodes.length !== 1) {\n                throw new Error('Unexpected comma (\",\") in :local block');\n              }\n\n              const selector = localizeNode(node.first, node.spaces);\n              // move the spaces that were around the psuedo selector to the first\n              // non-container node\n              selector.first.spaces = node.spaces;\n\n              const nextNode = node.next();\n\n              if (\n                nextNode &&\n                nextNode.type === \"combinator\" &&\n                nextNode.value === \" \" &&\n                /\\\\[A-F0-9]{1,6}$/.test(selector.last.value)\n              ) {\n                selector.last.spaces.after = \" \";\n              }\n\n              node.replaceWith(selector);\n\n              return;\n            }\n          /* falls through */\n          case \"root\":\n          case \"selector\": {\n            node.each(traverseNode);\n            break;\n          }\n          case \"id\":\n          case \"class\":\n            if (exportGlobals) {\n              exports[node.value] = [node.value];\n            }\n            break;\n        }\n        return node;\n      }\n\n      // Find any :import and remember imported names\n      const importedNames = {};\n\n      root.walkRules(/^:import\\(.+\\)$/, (rule) => {\n        rule.walkDecls((decl) => {\n          importedNames[decl.prop] = true;\n        });\n      });\n\n      // Find any :local selectors\n      root.walkRules((rule) => {\n        let parsedSelector = selectorParser().astSync(rule);\n\n        rule.selector = traverseNode(parsedSelector.clone()).toString();\n\n        rule.walkDecls(/composes|compose-with/i, (decl) => {\n          const localNames = getSingleLocalNamesForComposes(parsedSelector);\n          const classes = decl.value.split(/\\s+/);\n\n          classes.forEach((className) => {\n            const global = /^global\\(([^)]+)\\)$/.exec(className);\n\n            if (global) {\n              localNames.forEach((exportedName) => {\n                exports[exportedName].push(global[1]);\n              });\n            } else if (hasOwnProperty.call(importedNames, className)) {\n              localNames.forEach((exportedName) => {\n                exports[exportedName].push(className);\n              });\n            } else if (hasOwnProperty.call(exports, className)) {\n              localNames.forEach((exportedName) => {\n                exports[className].forEach((item) => {\n                  exports[exportedName].push(item);\n                });\n              });\n            } else {\n              throw decl.error(\n                `referenced class name \"${className}\" in ${decl.prop} not found`\n              );\n            }\n          });\n\n          decl.remove();\n        });\n\n        // Find any :local values\n        rule.walkDecls((decl) => {\n          if (!/:local\\s*\\((.+?)\\)/.test(decl.value)) {\n            return;\n          }\n\n          let tokens = decl.value.split(/(,|'[^']*'|\"[^\"]*\")/);\n\n          tokens = tokens.map((token, idx) => {\n            if (idx === 0 || tokens[idx - 1] === \",\") {\n              let result = token;\n\n              const localMatch = /:local\\s*\\((.+?)\\)/.exec(token);\n\n              if (localMatch) {\n                const input = localMatch.input;\n                const matchPattern = localMatch[0];\n                const matchVal = localMatch[1];\n                const newVal = exportScopedName(matchVal);\n\n                result = input.replace(matchPattern, newVal);\n              } else {\n                return token;\n              }\n\n              return result;\n            } else {\n              return token;\n            }\n          });\n\n          decl.value = tokens.join(\"\");\n        });\n      });\n\n      // Find any :local keyframes\n      root.walkAtRules(/keyframes$/i, (atRule) => {\n        const localMatch = /^\\s*:local\\s*\\((.+?)\\)\\s*$/.exec(atRule.params);\n\n        if (!localMatch) {\n          return;\n        }\n\n        atRule.params = exportScopedName(localMatch[1]);\n      });\n\n      // If we found any :locals, insert an :export rule\n      const exportedNames = Object.keys(exports);\n\n      if (exportedNames.length > 0) {\n        const exportRule = rule({ selector: \":export\" });\n\n        exportedNames.forEach((exportedName) =>\n          exportRule.append({\n            prop: exportedName,\n            value: exports[exportedName].join(\" \"),\n            raws: { before: \"\\n  \" },\n          })\n        );\n\n        root.append(exportRule);\n      }\n    },\n  };\n};\n\nplugin.postcss = true;\n\nplugin.generateScopedName = function (name, path) {\n  const sanitisedPath = path\n    .replace(/\\.[^./\\\\]+$/, \"\")\n    .replace(/[\\W_]+/g, \"_\")\n    .replace(/^_|_$/g, \"\");\n\n  return `_${sanitisedPath}__${name}`.trim();\n};\n\nplugin.generateExportEntry = function (name, scopedName) {\n  return {\n    key: unescape(name),\n    value: unescape(scopedName),\n  };\n};\n\nvar src$1 = plugin;\n\nvar src = {exports: {}};\n\nconst ICSSUtils = src$3;\n\nconst matchImports = /^(.+?|\\([\\s\\S]+?\\))\\s+from\\s+(\"[^\"]*\"|'[^']*'|[\\w-]+)$/;\nconst matchValueDefinition = /(?:\\s+|^)([\\w-]+):?(.*?)$/;\nconst matchImport = /^([\\w-]+)(?:\\s+as\\s+([\\w-]+))?/;\n\nsrc.exports = (options) => {\n  let importIndex = 0;\n  const createImportedName =\n    (options && options.createImportedName) ||\n    ((importName /*, path*/) =>\n      `i__const_${importName.replace(/\\W/g, \"_\")}_${importIndex++}`);\n\n  return {\n    postcssPlugin: \"postcss-modules-values\",\n    prepare(result) {\n      const importAliases = [];\n      const definitions = {};\n\n      return {\n        Once(root, postcss) {\n          root.walkAtRules(/value/i, (atRule) => {\n            const matches = atRule.params.match(matchImports);\n\n            if (matches) {\n              let [, /*match*/ aliases, path] = matches;\n\n              // We can use constants for path names\n              if (definitions[path]) {\n                path = definitions[path];\n              }\n\n              const imports = aliases\n                .replace(/^\\(\\s*([\\s\\S]+)\\s*\\)$/, \"$1\")\n                .split(/\\s*,\\s*/)\n                .map((alias) => {\n                  const tokens = matchImport.exec(alias);\n\n                  if (tokens) {\n                    const [, /*match*/ theirName, myName = theirName] = tokens;\n                    const importedName = createImportedName(myName);\n                    definitions[myName] = importedName;\n                    return { theirName, importedName };\n                  } else {\n                    throw new Error(`@import statement \"${alias}\" is invalid!`);\n                  }\n                });\n\n              importAliases.push({ path, imports });\n\n              atRule.remove();\n\n              return;\n            }\n\n            if (atRule.params.indexOf(\"@value\") !== -1) {\n              result.warn(\"Invalid value definition: \" + atRule.params);\n            }\n\n            let [, key, value] = `${atRule.params}${atRule.raws.between}`.match(\n              matchValueDefinition\n            );\n\n            const normalizedValue = value.replace(/\\/\\*((?!\\*\\/).*?)\\*\\//g, \"\");\n\n            if (normalizedValue.length === 0) {\n              result.warn(\"Invalid value definition: \" + atRule.params);\n              atRule.remove();\n\n              return;\n            }\n\n            let isOnlySpace = /^\\s+$/.test(normalizedValue);\n\n            if (!isOnlySpace) {\n              value = value.trim();\n            }\n\n            // Add to the definitions, knowing that values can refer to each other\n            definitions[key] = ICSSUtils.replaceValueSymbols(\n              value,\n              definitions\n            );\n\n            atRule.remove();\n          });\n\n          /* If we have no definitions, don't continue */\n          if (!Object.keys(definitions).length) {\n            return;\n          }\n\n          /* Perform replacements */\n          ICSSUtils.replaceSymbols(root, definitions);\n\n          /* We want to export anything defined by now, but don't add it to the CSS yet or it well get picked up by the replacement stuff */\n          const exportDeclarations = Object.keys(definitions).map((key) =>\n            postcss.decl({\n              value: definitions[key],\n              prop: key,\n              raws: { before: \"\\n  \" },\n            })\n          );\n\n          /* Add export rules if any */\n          if (exportDeclarations.length > 0) {\n            const exportRule = postcss.rule({\n              selector: \":export\",\n              raws: { after: \"\\n\" },\n            });\n\n            exportRule.append(exportDeclarations);\n\n            root.prepend(exportRule);\n          }\n\n          /* Add import rules */\n          importAliases.reverse().forEach(({ path, imports }) => {\n            const importRule = postcss.rule({\n              selector: `:import(${path})`,\n              raws: { after: \"\\n\" },\n            });\n\n            imports.forEach(({ theirName, importedName }) => {\n              importRule.append({\n                value: theirName,\n                prop: importedName,\n                raws: { before: \"\\n  \" },\n              });\n            });\n\n            root.prepend(importRule);\n          });\n        },\n      };\n    },\n  };\n};\n\nsrc.exports.postcss = true;\n\nObject.defineProperty(behaviours$1, \"__esModule\", {\n  value: true\n});\nbehaviours$1.behaviours = undefined;\nbehaviours$1.getDefaultPlugins = getDefaultPlugins;\nbehaviours$1.isValidBehaviour = isValidBehaviour;\n\nvar _postcssModulesLocalByDefault = src$4.exports;\n\nvar _postcssModulesLocalByDefault2 = _interopRequireDefault$1(_postcssModulesLocalByDefault);\n\nvar _postcssModulesExtractImports = src$2.exports;\n\nvar _postcssModulesExtractImports2 = _interopRequireDefault$1(_postcssModulesExtractImports);\n\nvar _postcssModulesScope = src$1;\n\nvar _postcssModulesScope2 = _interopRequireDefault$1(_postcssModulesScope);\n\nvar _postcssModulesValues = src.exports;\n\nvar _postcssModulesValues2 = _interopRequireDefault$1(_postcssModulesValues);\n\nfunction _interopRequireDefault$1(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst behaviours = behaviours$1.behaviours = {\n  LOCAL: \"local\",\n  GLOBAL: \"global\"\n};\n\nfunction getDefaultPlugins({\n  behaviour,\n  generateScopedName,\n  exportGlobals\n}) {\n  const scope = (0, _postcssModulesScope2.default)({ generateScopedName, exportGlobals });\n\n  const plugins = {\n    [behaviours.LOCAL]: [_postcssModulesValues2.default, _postcssModulesLocalByDefault2.default, _postcssModulesExtractImports2.default, scope],\n    [behaviours.GLOBAL]: [_postcssModulesValues2.default, _postcssModulesExtractImports2.default, scope]\n  };\n\n  return plugins[behaviour];\n}\n\nfunction isValidBehaviour(behaviour) {\n  return Object.keys(behaviours).map(key => behaviours[key]).indexOf(behaviour) > -1;\n}\n\nvar _postcss = require$$0$3;\n\nvar _postcss2 = _interopRequireDefault(_postcss);\n\nvar _lodash = lodash_camelcase;\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _genericNames = genericNames;\n\nvar _genericNames2 = _interopRequireDefault(_genericNames);\n\nvar _unquote = unquote$1;\n\nvar _unquote2 = _interopRequireDefault(_unquote);\n\nvar _parser = parser;\n\nvar _parser2 = _interopRequireDefault(_parser);\n\nvar _loader = loader;\n\nvar _loader2 = _interopRequireDefault(_loader);\n\nvar _generateScopedName = generateScopedName$1;\n\nvar _generateScopedName2 = _interopRequireDefault(_generateScopedName);\n\nvar _saveJSON = saveJSON$1;\n\nvar _saveJSON2 = _interopRequireDefault(_saveJSON);\n\nvar _behaviours = behaviours$1;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step(\"next\", value); }, function (err) { step(\"throw\", err); }); } } return step(\"next\"); }); }; }\n\nconst PLUGIN_NAME = \"postcss-modules\";\n\nfunction getDefaultScopeBehaviour(opts) {\n  if (opts.scopeBehaviour && (0, _behaviours.isValidBehaviour)(opts.scopeBehaviour)) {\n    return opts.scopeBehaviour;\n  }\n\n  return _behaviours.behaviours.LOCAL;\n}\n\nfunction getScopedNameGenerator(opts) {\n  const scopedNameGenerator = opts.generateScopedName || _generateScopedName2.default;\n\n  if (typeof scopedNameGenerator === \"function\") return scopedNameGenerator;\n  return (0, _genericNames2.default)(scopedNameGenerator, {\n    context: process.cwd(),\n    hashPrefix: opts.hashPrefix\n  });\n}\n\nfunction getLoader(opts, plugins) {\n  const root = typeof opts.root === \"undefined\" ? \"/\" : opts.root;\n  return typeof opts.Loader === \"function\" ? new opts.Loader(root, plugins) : new _loader2.default(root, plugins);\n}\n\nfunction isGlobalModule(globalModules, inputFile) {\n  return globalModules.some(regex => inputFile.match(regex));\n}\n\nfunction getDefaultPluginsList(opts, inputFile) {\n  const globalModulesList = opts.globalModulePaths || null;\n  const exportGlobals = opts.exportGlobals || false;\n  const defaultBehaviour = getDefaultScopeBehaviour(opts);\n  const generateScopedName = getScopedNameGenerator(opts);\n\n  if (globalModulesList && isGlobalModule(globalModulesList, inputFile)) {\n    return (0, _behaviours.getDefaultPlugins)({\n      behaviour: _behaviours.behaviours.GLOBAL,\n      generateScopedName,\n      exportGlobals\n    });\n  }\n\n  return (0, _behaviours.getDefaultPlugins)({\n    behaviour: defaultBehaviour,\n    generateScopedName,\n    exportGlobals\n  });\n}\n\nfunction isOurPlugin(plugin) {\n  return plugin.postcssPlugin === PLUGIN_NAME;\n}\n\nfunction dashesCamelCase(string) {\n  return string.replace(/-+(\\w)/g, (_, firstLetter) => firstLetter.toUpperCase());\n}\n\nbuild.exports = (opts = {}) => {\n  return {\n    postcssPlugin: PLUGIN_NAME,\n    OnceExit(css, { result }) {\n      return _asyncToGenerator(function* () {\n        const getJSON = opts.getJSON || _saveJSON2.default;\n        const inputFile = css.source.input.file;\n        const pluginList = getDefaultPluginsList(opts, inputFile);\n        const resultPluginIndex = result.processor.plugins.findIndex(function (plugin) {\n          return isOurPlugin(plugin);\n        });\n        if (resultPluginIndex === -1) {\n          throw new Error('Plugin missing from options.');\n        }\n        const earlierPlugins = result.processor.plugins.slice(0, resultPluginIndex);\n        const loaderPlugins = [...earlierPlugins, ...pluginList];\n        const loader = getLoader(opts, loaderPlugins);\n        const fetcher = function fetcher(file, relativeTo, depTrace) {\n          const unquoteFile = (0, _unquote2.default)(file);\n          const resolvedResult = typeof opts.resolve === 'function' && opts.resolve(unquoteFile);\n          const resolvedFile = resolvedResult instanceof Promise ? resolvedResult : Promise.resolve(resolvedResult);\n\n          return resolvedFile.then(function (f) {\n            return loader.fetch.call(loader, `\"${f || unquoteFile}\"`, relativeTo, depTrace);\n          });\n        };\n        const parser = new _parser2.default(fetcher);\n\n        yield (0, _postcss2.default)([...pluginList, parser.plugin()]).process(css, {\n          from: inputFile\n        });\n\n        const out = loader.finalSource;\n        if (out) css.prepend(out);\n\n        if (opts.localsConvention) {\n          const isFunc = typeof opts.localsConvention === \"function\";\n\n          parser.exportTokens = Object.entries(parser.exportTokens).reduce(function (tokens, [className, value]) {\n            if (isFunc) {\n              tokens[opts.localsConvention(className, value, inputFile)] = value;\n\n              return tokens;\n            }\n\n            switch (opts.localsConvention) {\n              case \"camelCase\":\n                tokens[className] = value;\n                tokens[(0, _lodash2.default)(className)] = value;\n\n                break;\n              case \"camelCaseOnly\":\n                tokens[(0, _lodash2.default)(className)] = value;\n\n                break;\n              case \"dashes\":\n                tokens[className] = value;\n                tokens[dashesCamelCase(className)] = value;\n\n                break;\n              case \"dashesOnly\":\n                tokens[dashesCamelCase(className)] = value;\n\n                break;\n            }\n\n            return tokens;\n          }, {});\n        }\n\n        result.messages.push({\n          type: \"export\",\n          plugin: \"postcss-modules\",\n          exportTokens: parser.exportTokens\n        });\n\n        // getJSON may return a promise\n        return getJSON(css.source.input.file, parser.exportTokens, result.opts.to);\n      })();\n    }\n  };\n};\n\nbuild.exports.postcss = true;\n\nfunction compileStyle(options) {\n    return doCompileStyle({\n        ...options,\n        isAsync: false\n    });\n}\nfunction compileStyleAsync(options) {\n    return doCompileStyle({\n        ...options,\n        isAsync: true\n    });\n}\nfunction doCompileStyle(options) {\n    const { filename, id, scoped = false, trim = true, isProd = false, modules = false, modulesOptions = {}, preprocessLang, postcssOptions, postcssPlugins } = options;\n    const preprocessor = preprocessLang && processors[preprocessLang];\n    const preProcessedSource = preprocessor && preprocess(options, preprocessor);\n    const map = preProcessedSource\n        ? preProcessedSource.map\n        : options.inMap || options.map;\n    const source = preProcessedSource ? preProcessedSource.code : options.source;\n    const shortId = id.replace(/^data-v-/, '');\n    const longId = `data-v-${shortId}`;\n    const plugins = (postcssPlugins || []).slice();\n    plugins.unshift(cssVarsPlugin({ id: shortId, isProd }));\n    if (trim) {\n        plugins.push(trimPlugin$1());\n    }\n    if (scoped) {\n        plugins.push(scopedPlugin$1(longId));\n    }\n    let cssModules;\n    if (modules) {\n        if (!options.isAsync) {\n            throw new Error('[@vue/compiler-sfc] `modules` option can only be used with compileStyleAsync().');\n        }\n        plugins.push(build.exports({\n            ...modulesOptions,\n            getJSON: (_cssFileName, json) => {\n                cssModules = json;\n            }\n        }));\n    }\n    const postCSSOptions = {\n        ...postcssOptions,\n        to: filename,\n        from: filename\n    };\n    if (map) {\n        postCSSOptions.map = {\n            inline: false,\n            annotation: false,\n            prev: map\n        };\n    }\n    let result;\n    let code;\n    let outMap;\n    // stylus output include plain css. so need remove the repeat item\n    const dependencies = new Set(preProcessedSource ? preProcessedSource.dependencies : []);\n    // sass has filename self when provided filename option\n    dependencies.delete(filename);\n    const errors = [];\n    if (preProcessedSource && preProcessedSource.errors.length) {\n        errors.push(...preProcessedSource.errors);\n    }\n    const recordPlainCssDependencies = (messages) => {\n        messages.forEach(msg => {\n            if (msg.type === 'dependency') {\n                // postcss output path is absolute position path\n                dependencies.add(msg.file);\n            }\n        });\n        return dependencies;\n    };\n    try {\n        result = require$$0$3(plugins).process(source, postCSSOptions);\n        // In async mode, return a promise.\n        if (options.isAsync) {\n            return result\n                .then(result => ({\n                code: result.css || '',\n                map: result.map && result.map.toJSON(),\n                errors,\n                modules: cssModules,\n                rawResult: result,\n                dependencies: recordPlainCssDependencies(result.messages)\n            }))\n                .catch(error => ({\n                code: '',\n                map: undefined,\n                errors: [...errors, error],\n                rawResult: undefined,\n                dependencies\n            }));\n        }\n        recordPlainCssDependencies(result.messages);\n        // force synchronous transform (we know we only have sync plugins)\n        code = result.css;\n        outMap = result.map;\n    }\n    catch (e) {\n        errors.push(e);\n    }\n    return {\n        code: code || ``,\n        map: outMap && outMap.toJSON(),\n        errors,\n        rawResult: result,\n        dependencies\n    };\n}\nfunction preprocess(options, preprocessor) {\n    return preprocessor(options.source, options.inMap || options.map, {\n        filename: options.filename,\n        ...options.preprocessOptions\n    }, options.preprocessCustomRequire);\n}\n\n// API\nconst walk = estreeWalker.walk;\n\nexports.MagicString = MagicString;\nexports.babelParse = parser$2.parse;\nexports.extractIdentifiers = compilerCore.extractIdentifiers;\nexports.generateCodeFrame = compilerCore.generateCodeFrame;\nexports.isInDestructureAssignment = compilerCore.isInDestructureAssignment;\nexports.isStaticProperty = compilerCore.isStaticProperty;\nexports.walkIdentifiers = compilerCore.walkIdentifiers;\nexports.shouldTransformRef = reactivityTransform.shouldTransform;\nexports.transformRef = reactivityTransform.transform;\nexports.transformRefAST = reactivityTransform.transformAST;\nexports.compileScript = compileScript;\nexports.compileStyle = compileStyle;\nexports.compileStyleAsync = compileStyleAsync;\nexports.compileTemplate = compileTemplate;\nexports.parse = parse$4;\nexports.rewriteDefault = rewriteDefault;\nexports.walk = walk;\n/LICENSE\u0004CThe MIT License (MIT)\n\nCopyright (c) 2018-present, Yuxi (Evan) You\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QHZ1ZS9jb21waWxlci1zc3JAMy4yLjQ3",
    "content": "/package.json\u0002{\n  \"name\": \"@vue/compiler-ssr\",\n  \"version\": \"3.2.47\",\n  \"description\": \"@vue/compiler-ssr\",\n  \"main\": \"dist/compiler-ssr.cjs.js\",\n  \"types\": \"dist/compiler-ssr.d.ts\",\n  \"files\": [\n    \"dist\"\n  ],\n  \"buildOptions\": {\n    \"prod\": false,\n    \"formats\": [\n      \"cjs\"\n    ]\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/vuejs/core.git\",\n    \"directory\": \"packages/compiler-ssr\"\n  },\n  \"keywords\": [\n    \"vue\"\n  ],\n  \"author\": \"Evan You\",\n  \"license\": \"MIT\",\n  \"bugs\": {\n    \"url\": \"https://github.com/vuejs/core/issues\"\n  },\n  \"homepage\": \"https://github.com/vuejs/core/tree/main/packages/compiler-ssr#readme\",\n  \"dependencies\": {\n    \"@vue/shared\": \"3.2.47\",\n    \"@vue/compiler-dom\": \"3.2.47\"\n  }\n}\n/README.md\u0013# @vue/compiler-ssr/dist/compiler-ssr.cjs.jsک'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar compilerDom = require('@vue/compiler-dom');\nvar shared = require('@vue/shared');\n\nconst SSR_INTERPOLATE = Symbol(`ssrInterpolate`);\nconst SSR_RENDER_VNODE = Symbol(`ssrRenderVNode`);\nconst SSR_RENDER_COMPONENT = Symbol(`ssrRenderComponent`);\nconst SSR_RENDER_SLOT = Symbol(`ssrRenderSlot`);\nconst SSR_RENDER_SLOT_INNER = Symbol(`ssrRenderSlotInner`);\nconst SSR_RENDER_CLASS = Symbol(`ssrRenderClass`);\nconst SSR_RENDER_STYLE = Symbol(`ssrRenderStyle`);\nconst SSR_RENDER_ATTRS = Symbol(`ssrRenderAttrs`);\nconst SSR_RENDER_ATTR = Symbol(`ssrRenderAttr`);\nconst SSR_RENDER_DYNAMIC_ATTR = Symbol(`ssrRenderDynamicAttr`);\nconst SSR_RENDER_LIST = Symbol(`ssrRenderList`);\nconst SSR_INCLUDE_BOOLEAN_ATTR = Symbol(`ssrIncludeBooleanAttr`);\nconst SSR_LOOSE_EQUAL = Symbol(`ssrLooseEqual`);\nconst SSR_LOOSE_CONTAIN = Symbol(`ssrLooseContain`);\nconst SSR_RENDER_DYNAMIC_MODEL = Symbol(`ssrRenderDynamicModel`);\nconst SSR_GET_DYNAMIC_MODEL_PROPS = Symbol(`ssrGetDynamicModelProps`);\nconst SSR_RENDER_TELEPORT = Symbol(`ssrRenderTeleport`);\nconst SSR_RENDER_SUSPENSE = Symbol(`ssrRenderSuspense`);\nconst SSR_GET_DIRECTIVE_PROPS = Symbol(`ssrGetDirectiveProps`);\nconst ssrHelpers = {\n    [SSR_INTERPOLATE]: `ssrInterpolate`,\n    [SSR_RENDER_VNODE]: `ssrRenderVNode`,\n    [SSR_RENDER_COMPONENT]: `ssrRenderComponent`,\n    [SSR_RENDER_SLOT]: `ssrRenderSlot`,\n    [SSR_RENDER_SLOT_INNER]: `ssrRenderSlotInner`,\n    [SSR_RENDER_CLASS]: `ssrRenderClass`,\n    [SSR_RENDER_STYLE]: `ssrRenderStyle`,\n    [SSR_RENDER_ATTRS]: `ssrRenderAttrs`,\n    [SSR_RENDER_ATTR]: `ssrRenderAttr`,\n    [SSR_RENDER_DYNAMIC_ATTR]: `ssrRenderDynamicAttr`,\n    [SSR_RENDER_LIST]: `ssrRenderList`,\n    [SSR_INCLUDE_BOOLEAN_ATTR]: `ssrIncludeBooleanAttr`,\n    [SSR_LOOSE_EQUAL]: `ssrLooseEqual`,\n    [SSR_LOOSE_CONTAIN]: `ssrLooseContain`,\n    [SSR_RENDER_DYNAMIC_MODEL]: `ssrRenderDynamicModel`,\n    [SSR_GET_DYNAMIC_MODEL_PROPS]: `ssrGetDynamicModelProps`,\n    [SSR_RENDER_TELEPORT]: `ssrRenderTeleport`,\n    [SSR_RENDER_SUSPENSE]: `ssrRenderSuspense`,\n    [SSR_GET_DIRECTIVE_PROPS]: `ssrGetDirectiveProps`\n};\n// Note: these are helpers imported from @vue/server-renderer\n// make sure the names match!\ncompilerDom.registerRuntimeHelpers(ssrHelpers);\n\n// Plugin for the first transform pass, which simply constructs the AST node\nconst ssrTransformIf = compilerDom.createStructuralDirectiveTransform(/^(if|else|else-if)$/, compilerDom.processIf);\n// This is called during the 2nd transform pass to construct the SSR-specific\n// codegen nodes.\nfunction ssrProcessIf(node, context, disableNestedFragments = false) {\n    const [rootBranch] = node.branches;\n    const ifStatement = compilerDom.createIfStatement(rootBranch.condition, processIfBranch(rootBranch, context, disableNestedFragments));\n    context.pushStatement(ifStatement);\n    let currentIf = ifStatement;\n    for (let i = 1; i < node.branches.length; i++) {\n        const branch = node.branches[i];\n        const branchBlockStatement = processIfBranch(branch, context, disableNestedFragments);\n        if (branch.condition) {\n            // else-if\n            currentIf = currentIf.alternate = compilerDom.createIfStatement(branch.condition, branchBlockStatement);\n        }\n        else {\n            // else\n            currentIf.alternate = branchBlockStatement;\n        }\n    }\n    if (!currentIf.alternate) {\n        currentIf.alternate = compilerDom.createBlockStatement([\n            compilerDom.createCallExpression(`_push`, ['`<!---->`'])\n        ]);\n    }\n}\nfunction processIfBranch(branch, context, disableNestedFragments = false) {\n    const { children } = branch;\n    const needFragmentWrapper = !disableNestedFragments &&\n        (children.length !== 1 || children[0].type !== 1 /* NodeTypes.ELEMENT */) &&\n        // optimize away nested fragments when the only child is a ForNode\n        !(children.length === 1 && children[0].type === 11 /* NodeTypes.FOR */);\n    return processChildrenAsStatement(branch, context, needFragmentWrapper);\n}\n\n// Plugin for the first transform pass, which simply constructs the AST node\nconst ssrTransformFor = compilerDom.createStructuralDirectiveTransform('for', compilerDom.processFor);\n// This is called during the 2nd transform pass to construct the SSR-specific\n// codegen nodes.\nfunction ssrProcessFor(node, context, disableNestedFragments = false) {\n    const needFragmentWrapper = !disableNestedFragments &&\n        (node.children.length !== 1 || node.children[0].type !== 1 /* NodeTypes.ELEMENT */);\n    const renderLoop = compilerDom.createFunctionExpression(compilerDom.createForLoopParams(node.parseResult));\n    renderLoop.body = processChildrenAsStatement(node, context, needFragmentWrapper);\n    // v-for always renders a fragment unless explicitly disabled\n    if (!disableNestedFragments) {\n        context.pushStringPart(`<!--[-->`);\n    }\n    context.pushStatement(compilerDom.createCallExpression(context.helper(SSR_RENDER_LIST), [\n        node.source,\n        renderLoop\n    ]));\n    if (!disableNestedFragments) {\n        context.pushStringPart(`<!--]-->`);\n    }\n}\n\nconst ssrTransformSlotOutlet = (node, context) => {\n    if (compilerDom.isSlotOutlet(node)) {\n        const { slotName, slotProps } = compilerDom.processSlotOutlet(node, context);\n        const args = [\n            `_ctx.$slots`,\n            slotName,\n            slotProps || `{}`,\n            // fallback content placeholder. will be replaced in the process phase\n            `null`,\n            `_push`,\n            `_parent`\n        ];\n        // inject slot scope id if current template uses :slotted\n        if (context.scopeId && context.slotted !== false) {\n            args.push(`\"${context.scopeId}-s\"`);\n        }\n        let method = SSR_RENDER_SLOT;\n        // #3989\n        // check if this is a single slot inside a transition wrapper - since\n        // transition will unwrap the slot fragment into a single vnode at runtime,\n        // we need to avoid rendering the slot as a fragment.\n        const parent = context.parent;\n        if (parent &&\n            parent.type === 1 /* NodeTypes.ELEMENT */ &&\n            parent.tagType === 1 /* ElementTypes.COMPONENT */ &&\n            compilerDom.resolveComponentType(parent, context, true) === compilerDom.TRANSITION &&\n            parent.children.filter(c => c.type === 1 /* NodeTypes.ELEMENT */).length === 1) {\n            method = SSR_RENDER_SLOT_INNER;\n            if (!(context.scopeId && context.slotted !== false)) {\n                args.push('null');\n            }\n            args.push('true');\n        }\n        node.ssrCodegenNode = compilerDom.createCallExpression(context.helper(method), args);\n    }\n};\nfunction ssrProcessSlotOutlet(node, context) {\n    const renderCall = node.ssrCodegenNode;\n    // has fallback content\n    if (node.children.length) {\n        const fallbackRenderFn = compilerDom.createFunctionExpression([]);\n        fallbackRenderFn.body = processChildrenAsStatement(node, context);\n        // _renderSlot(slots, name, props, fallback, ...)\n        renderCall.arguments[3] = fallbackRenderFn;\n    }\n    // Forwarded <slot/>. Merge slot scope ids\n    if (context.withSlotScopeId) {\n        const slotScopeId = renderCall.arguments[6];\n        renderCall.arguments[6] = slotScopeId\n            ? `${slotScopeId} + _scopeId`\n            : `_scopeId`;\n    }\n    context.pushStatement(node.ssrCodegenNode);\n}\n\nfunction createSSRCompilerError(code, loc) {\n    return compilerDom.createCompilerError(code, loc, SSRErrorMessages);\n}\nconst SSRErrorMessages = {\n    [62 /* SSRErrorCodes.X_SSR_UNSAFE_ATTR_NAME */]: `Unsafe attribute name for SSR.`,\n    [63 /* SSRErrorCodes.X_SSR_NO_TELEPORT_TARGET */]: `Missing the 'to' prop on teleport element.`,\n    [64 /* SSRErrorCodes.X_SSR_INVALID_AST_NODE */]: `Invalid AST node during SSR transform.`\n};\n\n// Note: this is a 2nd-pass codegen transform.\nfunction ssrProcessTeleport(node, context) {\n    const targetProp = compilerDom.findProp(node, 'to');\n    if (!targetProp) {\n        context.onError(createSSRCompilerError(63 /* SSRErrorCodes.X_SSR_NO_TELEPORT_TARGET */, node.loc));\n        return;\n    }\n    let target;\n    if (targetProp.type === 6 /* NodeTypes.ATTRIBUTE */) {\n        target =\n            targetProp.value && compilerDom.createSimpleExpression(targetProp.value.content, true);\n    }\n    else {\n        target = targetProp.exp;\n    }\n    if (!target) {\n        context.onError(createSSRCompilerError(63 /* SSRErrorCodes.X_SSR_NO_TELEPORT_TARGET */, targetProp.loc));\n        return;\n    }\n    const disabledProp = compilerDom.findProp(node, 'disabled', false, true /* allow empty */);\n    const disabled = disabledProp\n        ? disabledProp.type === 6 /* NodeTypes.ATTRIBUTE */\n            ? `true`\n            : disabledProp.exp || `false`\n        : `false`;\n    const contentRenderFn = compilerDom.createFunctionExpression([`_push`], undefined, // Body is added later\n    true, // newline\n    false, // isSlot\n    node.loc);\n    contentRenderFn.body = processChildrenAsStatement(node, context);\n    context.pushStatement(compilerDom.createCallExpression(context.helper(SSR_RENDER_TELEPORT), [\n        `_push`,\n        contentRenderFn,\n        target,\n        disabled,\n        `_parent`\n    ]));\n}\n\nconst wipMap$2 = new WeakMap();\n// phase 1\nfunction ssrTransformSuspense(node, context) {\n    return () => {\n        if (node.children.length) {\n            const wipEntry = {\n                slotsExp: null,\n                wipSlots: []\n            };\n            wipMap$2.set(node, wipEntry);\n            wipEntry.slotsExp = compilerDom.buildSlots(node, context, (_props, children, loc) => {\n                const fn = compilerDom.createFunctionExpression([], undefined, // no return, assign body later\n                true, // newline\n                false, // suspense slots are not treated as normal slots\n                loc);\n                wipEntry.wipSlots.push({\n                    fn,\n                    children\n                });\n                return fn;\n            }).slots;\n        }\n    };\n}\n// phase 2\nfunction ssrProcessSuspense(node, context) {\n    // complete wip slots with ssr code\n    const wipEntry = wipMap$2.get(node);\n    if (!wipEntry) {\n        return;\n    }\n    const { slotsExp, wipSlots } = wipEntry;\n    for (let i = 0; i < wipSlots.length; i++) {\n        const slot = wipSlots[i];\n        slot.fn.body = processChildrenAsStatement(slot, context);\n    }\n    // _push(ssrRenderSuspense(slots))\n    context.pushStatement(compilerDom.createCallExpression(context.helper(SSR_RENDER_SUSPENSE), [\n        `_push`,\n        slotsExp\n    ]));\n}\n\n// for directives with children overwrite (e.g. v-html & v-text), we need to\n// store the raw children so that they can be added in the 2nd pass.\nconst rawChildrenMap = new WeakMap();\nconst ssrTransformElement = (node, context) => {\n    if (node.type !== 1 /* NodeTypes.ELEMENT */ ||\n        node.tagType !== 0 /* ElementTypes.ELEMENT */) {\n        return;\n    }\n    return function ssrPostTransformElement() {\n        // element\n        // generate the template literal representing the open tag.\n        const openTag = [`<${node.tag}`];\n        // some tags need to be passed to runtime for special checks\n        const needTagForRuntime = node.tag === 'textarea' || node.tag.indexOf('-') > 0;\n        // v-bind=\"obj\", v-bind:[key] and custom directives can potentially\n        // overwrite other static attrs and can affect final rendering result,\n        // so when they are present we need to bail out to full `renderAttrs`\n        const hasDynamicVBind = compilerDom.hasDynamicKeyVBind(node);\n        const hasCustomDir = node.props.some(p => p.type === 7 /* NodeTypes.DIRECTIVE */ && !shared.isBuiltInDirective(p.name));\n        const needMergeProps = hasDynamicVBind || hasCustomDir;\n        if (needMergeProps) {\n            const { props, directives } = compilerDom.buildProps(node, context, node.props, false /* isComponent */, false /* isDynamicComponent */, true /* ssr */);\n            if (props || directives.length) {\n                const mergedProps = buildSSRProps(props, directives, context);\n                const propsExp = compilerDom.createCallExpression(context.helper(SSR_RENDER_ATTRS), [mergedProps]);\n                if (node.tag === 'textarea') {\n                    const existingText = node.children[0];\n                    // If interpolation, this is dynamic <textarea> content, potentially\n                    // injected by v-model and takes higher priority than v-bind value\n                    if (!existingText || existingText.type !== 5 /* NodeTypes.INTERPOLATION */) {\n                        // <textarea> with dynamic v-bind. We don't know if the final props\n                        // will contain .value, so we will have to do something special:\n                        // assign the merged props to a temp variable, and check whether\n                        // it contains value (if yes, render is as children).\n                        const tempId = `_temp${context.temps++}`;\n                        propsExp.arguments = [\n                            compilerDom.createAssignmentExpression(compilerDom.createSimpleExpression(tempId, false), mergedProps)\n                        ];\n                        rawChildrenMap.set(node, compilerDom.createCallExpression(context.helper(SSR_INTERPOLATE), [\n                            compilerDom.createConditionalExpression(compilerDom.createSimpleExpression(`\"value\" in ${tempId}`, false), compilerDom.createSimpleExpression(`${tempId}.value`, false), compilerDom.createSimpleExpression(existingText ? existingText.content : ``, true), false)\n                        ]));\n                    }\n                }\n                else if (node.tag === 'input') {\n                    // <input v-bind=\"obj\" v-model>\n                    // we need to determine the props to render for the dynamic v-model\n                    // and merge it with the v-bind expression.\n                    const vModel = findVModel(node);\n                    if (vModel) {\n                        // 1. save the props (san v-model) in a temp variable\n                        const tempId = `_temp${context.temps++}`;\n                        const tempExp = compilerDom.createSimpleExpression(tempId, false);\n                        propsExp.arguments = [\n                            compilerDom.createSequenceExpression([\n                                compilerDom.createAssignmentExpression(tempExp, mergedProps),\n                                compilerDom.createCallExpression(context.helper(compilerDom.MERGE_PROPS), [\n                                    tempExp,\n                                    compilerDom.createCallExpression(context.helper(SSR_GET_DYNAMIC_MODEL_PROPS), [\n                                        tempExp,\n                                        vModel.exp // model\n                                    ])\n                                ])\n                            ])\n                        ];\n                    }\n                }\n                if (needTagForRuntime) {\n                    propsExp.arguments.push(`\"${node.tag}\"`);\n                }\n                openTag.push(propsExp);\n            }\n        }\n        // book keeping static/dynamic class merging.\n        let dynamicClassBinding = undefined;\n        let staticClassBinding = undefined;\n        // all style bindings are converted to dynamic by transformStyle.\n        // but we need to make sure to merge them.\n        let dynamicStyleBinding = undefined;\n        for (let i = 0; i < node.props.length; i++) {\n            const prop = node.props[i];\n            // ignore true-value/false-value on input\n            if (node.tag === 'input' && isTrueFalseValue(prop)) {\n                continue;\n            }\n            // special cases with children override\n            if (prop.type === 7 /* NodeTypes.DIRECTIVE */) {\n                if (prop.name === 'html' && prop.exp) {\n                    rawChildrenMap.set(node, prop.exp);\n                }\n                else if (prop.name === 'text' && prop.exp) {\n                    node.children = [compilerDom.createInterpolation(prop.exp, prop.loc)];\n                }\n                else if (prop.name === 'slot') {\n                    context.onError(compilerDom.createCompilerError(40 /* ErrorCodes.X_V_SLOT_MISPLACED */, prop.loc));\n                }\n                else if (isTextareaWithValue(node, prop) && prop.exp) {\n                    if (!needMergeProps) {\n                        node.children = [compilerDom.createInterpolation(prop.exp, prop.loc)];\n                    }\n                }\n                else if (!needMergeProps && prop.name !== 'on') {\n                    // Directive transforms.\n                    const directiveTransform = context.directiveTransforms[prop.name];\n                    if (directiveTransform) {\n                        const { props, ssrTagParts } = directiveTransform(prop, node, context);\n                        if (ssrTagParts) {\n                            openTag.push(...ssrTagParts);\n                        }\n                        for (let j = 0; j < props.length; j++) {\n                            const { key, value } = props[j];\n                            if (compilerDom.isStaticExp(key)) {\n                                let attrName = key.content;\n                                // static key attr\n                                if (attrName === 'key' || attrName === 'ref') {\n                                    continue;\n                                }\n                                if (attrName === 'class') {\n                                    openTag.push(` class=\"`, (dynamicClassBinding = compilerDom.createCallExpression(context.helper(SSR_RENDER_CLASS), [value])), `\"`);\n                                }\n                                else if (attrName === 'style') {\n                                    if (dynamicStyleBinding) {\n                                        // already has style binding, merge into it.\n                                        mergeCall(dynamicStyleBinding, value);\n                                    }\n                                    else {\n                                        openTag.push(` style=\"`, (dynamicStyleBinding = compilerDom.createCallExpression(context.helper(SSR_RENDER_STYLE), [value])), `\"`);\n                                    }\n                                }\n                                else {\n                                    attrName =\n                                        node.tag.indexOf('-') > 0\n                                            ? attrName // preserve raw name on custom elements\n                                            : shared.propsToAttrMap[attrName] || attrName.toLowerCase();\n                                    if (shared.isBooleanAttr(attrName)) {\n                                        openTag.push(compilerDom.createConditionalExpression(compilerDom.createCallExpression(context.helper(SSR_INCLUDE_BOOLEAN_ATTR), [value]), compilerDom.createSimpleExpression(' ' + attrName, true), compilerDom.createSimpleExpression('', true), false /* no newline */));\n                                    }\n                                    else if (shared.isSSRSafeAttrName(attrName)) {\n                                        openTag.push(compilerDom.createCallExpression(context.helper(SSR_RENDER_ATTR), [\n                                            key,\n                                            value\n                                        ]));\n                                    }\n                                    else {\n                                        context.onError(createSSRCompilerError(62 /* SSRErrorCodes.X_SSR_UNSAFE_ATTR_NAME */, key.loc));\n                                    }\n                                }\n                            }\n                            else {\n                                // dynamic key attr\n                                // this branch is only encountered for custom directive\n                                // transforms that returns properties with dynamic keys\n                                const args = [key, value];\n                                if (needTagForRuntime) {\n                                    args.push(`\"${node.tag}\"`);\n                                }\n                                openTag.push(compilerDom.createCallExpression(context.helper(SSR_RENDER_DYNAMIC_ATTR), args));\n                            }\n                        }\n                    }\n                }\n            }\n            else {\n                // special case: value on <textarea>\n                if (node.tag === 'textarea' && prop.name === 'value' && prop.value) {\n                    rawChildrenMap.set(node, shared.escapeHtml(prop.value.content));\n                }\n                else if (!needMergeProps) {\n                    if (prop.name === 'key' || prop.name === 'ref') {\n                        continue;\n                    }\n                    // static prop\n                    if (prop.name === 'class' && prop.value) {\n                        staticClassBinding = JSON.stringify(prop.value.content);\n                    }\n                    openTag.push(` ${prop.name}` +\n                        (prop.value ? `=\"${shared.escapeHtml(prop.value.content)}\"` : ``));\n                }\n            }\n        }\n        // handle co-existence of dynamic + static class bindings\n        if (dynamicClassBinding && staticClassBinding) {\n            mergeCall(dynamicClassBinding, staticClassBinding);\n            removeStaticBinding(openTag, 'class');\n        }\n        if (context.scopeId) {\n            openTag.push(` ${context.scopeId}`);\n        }\n        node.ssrCodegenNode = compilerDom.createTemplateLiteral(openTag);\n    };\n};\nfunction buildSSRProps(props, directives, context) {\n    let mergePropsArgs = [];\n    if (props) {\n        if (props.type === 14 /* NodeTypes.JS_CALL_EXPRESSION */) {\n            // already a mergeProps call\n            mergePropsArgs = props.arguments;\n        }\n        else {\n            mergePropsArgs.push(props);\n        }\n    }\n    if (directives.length) {\n        for (const dir of directives) {\n            mergePropsArgs.push(compilerDom.createCallExpression(context.helper(SSR_GET_DIRECTIVE_PROPS), [\n                `_ctx`,\n                ...compilerDom.buildDirectiveArgs(dir, context).elements\n            ]));\n        }\n    }\n    return mergePropsArgs.length > 1\n        ? compilerDom.createCallExpression(context.helper(compilerDom.MERGE_PROPS), mergePropsArgs)\n        : mergePropsArgs[0];\n}\nfunction isTrueFalseValue(prop) {\n    if (prop.type === 7 /* NodeTypes.DIRECTIVE */) {\n        return (prop.name === 'bind' &&\n            prop.arg &&\n            compilerDom.isStaticExp(prop.arg) &&\n            (prop.arg.content === 'true-value' || prop.arg.content === 'false-value'));\n    }\n    else {\n        return prop.name === 'true-value' || prop.name === 'false-value';\n    }\n}\nfunction isTextareaWithValue(node, prop) {\n    return !!(node.tag === 'textarea' &&\n        prop.name === 'bind' &&\n        compilerDom.isStaticArgOf(prop.arg, 'value'));\n}\nfunction mergeCall(call, arg) {\n    const existing = call.arguments[0];\n    if (existing.type === 17 /* NodeTypes.JS_ARRAY_EXPRESSION */) {\n        existing.elements.push(arg);\n    }\n    else {\n        call.arguments[0] = compilerDom.createArrayExpression([existing, arg]);\n    }\n}\nfunction removeStaticBinding(tag, binding) {\n    const regExp = new RegExp(`^ ${binding}=\".+\"$`);\n    const i = tag.findIndex(e => typeof e === 'string' && regExp.test(e));\n    if (i > -1) {\n        tag.splice(i, 1);\n    }\n}\nfunction findVModel(node) {\n    return node.props.find(p => p.type === 7 /* NodeTypes.DIRECTIVE */ && p.name === 'model' && p.exp);\n}\nfunction ssrProcessElement(node, context) {\n    const isVoidTag = context.options.isVoidTag || shared.NO;\n    const elementsToAdd = node.ssrCodegenNode.elements;\n    for (let j = 0; j < elementsToAdd.length; j++) {\n        context.pushStringPart(elementsToAdd[j]);\n    }\n    // Handle slot scopeId\n    if (context.withSlotScopeId) {\n        context.pushStringPart(compilerDom.createSimpleExpression(`_scopeId`, false));\n    }\n    // close open tag\n    context.pushStringPart(`>`);\n    const rawChildren = rawChildrenMap.get(node);\n    if (rawChildren) {\n        context.pushStringPart(rawChildren);\n    }\n    else if (node.children.length) {\n        processChildren(node, context);\n    }\n    if (!isVoidTag(node.tag)) {\n        // push closing tag\n        context.pushStringPart(`</${node.tag}>`);\n    }\n}\n\nconst wipMap$1 = new WeakMap();\n// phase 1: build props\nfunction ssrTransformTransitionGroup(node, context) {\n    return () => {\n        const tag = compilerDom.findProp(node, 'tag');\n        if (tag) {\n            const otherProps = node.props.filter(p => p !== tag);\n            const { props, directives } = compilerDom.buildProps(node, context, otherProps, true /* isComponent */, false /* isDynamicComponent */, true /* ssr (skip event listeners) */);\n            let propsExp = null;\n            if (props || directives.length) {\n                propsExp = compilerDom.createCallExpression(context.helper(SSR_RENDER_ATTRS), [\n                    buildSSRProps(props, directives, context)\n                ]);\n            }\n            wipMap$1.set(node, {\n                tag,\n                propsExp\n            });\n        }\n    };\n}\n// phase 2: process children\nfunction ssrProcessTransitionGroup(node, context) {\n    const entry = wipMap$1.get(node);\n    if (entry) {\n        const { tag, propsExp } = entry;\n        if (tag.type === 7 /* NodeTypes.DIRECTIVE */) {\n            // dynamic :tag\n            context.pushStringPart(`<`);\n            context.pushStringPart(tag.exp);\n            if (propsExp) {\n                context.pushStringPart(propsExp);\n            }\n            context.pushStringPart(`>`);\n            processChildren(node, context, false, \n            /**\n             * TransitionGroup has the special runtime behavior of flattening and\n             * concatenating all children into a single fragment (in order for them to\n             * be patched using the same key map) so we need to account for that here\n             * by disabling nested fragment wrappers from being generated.\n             */\n            true);\n            context.pushStringPart(`</`);\n            context.pushStringPart(tag.exp);\n            context.pushStringPart(`>`);\n        }\n        else {\n            // static tag\n            context.pushStringPart(`<${tag.value.content}`);\n            if (propsExp) {\n                context.pushStringPart(propsExp);\n            }\n            context.pushStringPart(`>`);\n            processChildren(node, context, false, true);\n            context.pushStringPart(`</${tag.value.content}>`);\n        }\n    }\n    else {\n        // fragment\n        processChildren(node, context, true, true);\n    }\n}\n\n// We need to construct the slot functions in the 1st pass to ensure proper\n// scope tracking, but the children of each slot cannot be processed until\n// the 2nd pass, so we store the WIP slot functions in a weakMap during the 1st\n// pass and complete them in the 2nd pass.\nconst wipMap = new WeakMap();\nconst WIP_SLOT = Symbol();\nconst componentTypeMap = new WeakMap();\n// ssr component transform is done in two phases:\n// In phase 1. we use `buildSlot` to analyze the children of the component into\n// WIP slot functions (it must be done in phase 1 because `buildSlot` relies on\n// the core transform context).\n// In phase 2. we convert the WIP slots from phase 1 into ssr-specific codegen\n// nodes.\nconst ssrTransformComponent = (node, context) => {\n    if (node.type !== 1 /* NodeTypes.ELEMENT */ ||\n        node.tagType !== 1 /* ElementTypes.COMPONENT */) {\n        return;\n    }\n    const component = compilerDom.resolveComponentType(node, context, true /* ssr */);\n    const isDynamicComponent = shared.isObject(component) && component.callee === compilerDom.RESOLVE_DYNAMIC_COMPONENT;\n    componentTypeMap.set(node, component);\n    if (shared.isSymbol(component)) {\n        if (component === compilerDom.SUSPENSE) {\n            return ssrTransformSuspense(node, context);\n        }\n        if (component === compilerDom.TRANSITION_GROUP) {\n            return ssrTransformTransitionGroup(node, context);\n        }\n        return; // other built-in components: fallthrough\n    }\n    // Build the fallback vnode-based branch for the component's slots.\n    // We need to clone the node into a fresh copy and use the buildSlots' logic\n    // to get access to the children of each slot. We then compile them with\n    // a child transform pipeline using vnode-based transforms (instead of ssr-\n    // based ones), and save the result branch (a ReturnStatement) in an array.\n    // The branch is retrieved when processing slots again in ssr mode.\n    const vnodeBranches = [];\n    const clonedNode = clone(node);\n    return function ssrPostTransformComponent() {\n        // Using the cloned node, build the normal VNode-based branches (for\n        // fallback in case the child is render-fn based). Store them in an array\n        // for later use.\n        if (clonedNode.children.length) {\n            compilerDom.buildSlots(clonedNode, context, (props, children) => {\n                vnodeBranches.push(createVNodeSlotBranch(props, children, context));\n                return compilerDom.createFunctionExpression(undefined);\n            });\n        }\n        let propsExp = `null`;\n        if (node.props.length) {\n            // note we are not passing ssr: true here because for components, v-on\n            // handlers should still be passed\n            const { props, directives } = compilerDom.buildProps(node, context, undefined, true, isDynamicComponent);\n            if (props || directives.length) {\n                propsExp = buildSSRProps(props, directives, context);\n            }\n        }\n        const wipEntries = [];\n        wipMap.set(node, wipEntries);\n        const buildSSRSlotFn = (props, children, loc) => {\n            const param0 = (props && compilerDom.stringifyExpression(props)) || `_`;\n            const fn = compilerDom.createFunctionExpression([param0, `_push`, `_parent`, `_scopeId`], undefined, // no return, assign body later\n            true, // newline\n            true, // isSlot\n            loc);\n            wipEntries.push({\n                type: WIP_SLOT,\n                fn,\n                children,\n                // also collect the corresponding vnode branch built earlier\n                vnodeBranch: vnodeBranches[wipEntries.length]\n            });\n            return fn;\n        };\n        const slots = node.children.length\n            ? compilerDom.buildSlots(node, context, buildSSRSlotFn).slots\n            : `null`;\n        if (typeof component !== 'string') {\n            // dynamic component that resolved to a `resolveDynamicComponent` call\n            // expression - since the resolved result may be a plain element (string)\n            // or a VNode, handle it with `renderVNode`.\n            node.ssrCodegenNode = compilerDom.createCallExpression(context.helper(SSR_RENDER_VNODE), [\n                `_push`,\n                compilerDom.createCallExpression(context.helper(compilerDom.CREATE_VNODE), [\n                    component,\n                    propsExp,\n                    slots\n                ]),\n                `_parent`\n            ]);\n        }\n        else {\n            node.ssrCodegenNode = compilerDom.createCallExpression(context.helper(SSR_RENDER_COMPONENT), [component, propsExp, slots, `_parent`]);\n        }\n    };\n};\nfunction ssrProcessComponent(node, context, parent) {\n    const component = componentTypeMap.get(node);\n    if (!node.ssrCodegenNode) {\n        // this is a built-in component that fell-through.\n        if (component === compilerDom.TELEPORT) {\n            return ssrProcessTeleport(node, context);\n        }\n        else if (component === compilerDom.SUSPENSE) {\n            return ssrProcessSuspense(node, context);\n        }\n        else if (component === compilerDom.TRANSITION_GROUP) {\n            return ssrProcessTransitionGroup(node, context);\n        }\n        else {\n            // real fall-through: Transition / KeepAlive\n            // just render its children.\n            // #5352: if is at root level of a slot, push an empty string.\n            // this does not affect the final output, but avoids all-comment slot\n            // content of being treated as empty by ssrRenderSlot().\n            if (parent.type === WIP_SLOT) {\n                context.pushStringPart(``);\n            }\n            // #5351: filter out comment children inside transition\n            if (component === compilerDom.TRANSITION) {\n                node.children = node.children.filter(c => c.type !== 3 /* NodeTypes.COMMENT */);\n            }\n            processChildren(node, context);\n        }\n    }\n    else {\n        // finish up slot function expressions from the 1st pass.\n        const wipEntries = wipMap.get(node) || [];\n        for (let i = 0; i < wipEntries.length; i++) {\n            const { fn, vnodeBranch } = wipEntries[i];\n            // For each slot, we generate two branches: one SSR-optimized branch and\n            // one normal vnode-based branch. The branches are taken based on the\n            // presence of the 2nd `_push` argument (which is only present if the slot\n            // is called by `_ssrRenderSlot`.\n            fn.body = compilerDom.createIfStatement(compilerDom.createSimpleExpression(`_push`, false), processChildrenAsStatement(wipEntries[i], context, false, true /* withSlotScopeId */), vnodeBranch);\n        }\n        // component is inside a slot, inherit slot scope Id\n        if (context.withSlotScopeId) {\n            node.ssrCodegenNode.arguments.push(`_scopeId`);\n        }\n        if (typeof component === 'string') {\n            // static component\n            context.pushStatement(compilerDom.createCallExpression(`_push`, [node.ssrCodegenNode]));\n        }\n        else {\n            // dynamic component (`resolveDynamicComponent` call)\n            // the codegen node is a `renderVNode` call\n            context.pushStatement(node.ssrCodegenNode);\n        }\n    }\n}\nconst rawOptionsMap = new WeakMap();\nconst [baseNodeTransforms, baseDirectiveTransforms] = compilerDom.getBaseTransformPreset(true);\nconst vnodeNodeTransforms = [...baseNodeTransforms, ...compilerDom.DOMNodeTransforms];\nconst vnodeDirectiveTransforms = {\n    ...baseDirectiveTransforms,\n    ...compilerDom.DOMDirectiveTransforms\n};\nfunction createVNodeSlotBranch(props, children, parentContext) {\n    // apply a sub-transform using vnode-based transforms.\n    const rawOptions = rawOptionsMap.get(parentContext.root);\n    const subOptions = {\n        ...rawOptions,\n        // overwrite with vnode-based transforms\n        nodeTransforms: [\n            ...vnodeNodeTransforms,\n            ...(rawOptions.nodeTransforms || [])\n        ],\n        directiveTransforms: {\n            ...vnodeDirectiveTransforms,\n            ...(rawOptions.directiveTransforms || {})\n        }\n    };\n    // wrap the children with a wrapper template for proper children treatment.\n    const wrapperNode = {\n        type: 1 /* NodeTypes.ELEMENT */,\n        ns: 0 /* Namespaces.HTML */,\n        tag: 'template',\n        tagType: 3 /* ElementTypes.TEMPLATE */,\n        isSelfClosing: false,\n        // important: provide v-slot=\"props\" on the wrapper for proper\n        // scope analysis\n        props: [\n            {\n                type: 7 /* NodeTypes.DIRECTIVE */,\n                name: 'slot',\n                exp: props,\n                arg: undefined,\n                modifiers: [],\n                loc: compilerDom.locStub\n            }\n        ],\n        children,\n        loc: compilerDom.locStub,\n        codegenNode: undefined\n    };\n    subTransform(wrapperNode, subOptions, parentContext);\n    return compilerDom.createReturnStatement(children);\n}\nfunction subTransform(node, options, parentContext) {\n    const childRoot = compilerDom.createRoot([node]);\n    const childContext = compilerDom.createTransformContext(childRoot, options);\n    // this sub transform is for vnode fallback branch so it should be handled\n    // like normal render functions\n    childContext.ssr = false;\n    // inherit parent scope analysis state\n    childContext.scopes = { ...parentContext.scopes };\n    childContext.identifiers = { ...parentContext.identifiers };\n    childContext.imports = parentContext.imports;\n    // traverse\n    compilerDom.traverseNode(childRoot, childContext);\n    ['helpers', 'components', 'directives'].forEach(key => {\n        childContext[key].forEach((value, helperKey) => {\n            if (key === 'helpers') {\n                const parentCount = parentContext.helpers.get(helperKey);\n                if (parentCount === undefined) {\n                    parentContext.helpers.set(helperKey, value);\n                }\n                else {\n                    parentContext.helpers.set(helperKey, value + parentCount);\n                }\n            }\n            else {\n                parentContext[key].add(value);\n            }\n        });\n    });\n    // imports/hoists are not merged because:\n    // - imports are only used for asset urls and should be consistent between\n    //   node/client branches\n    // - hoists are not enabled for the client branch here\n}\nfunction clone(v) {\n    if (shared.isArray(v)) {\n        return v.map(clone);\n    }\n    else if (shared.isObject(v)) {\n        const res = {};\n        for (const key in v) {\n            res[key] = clone(v[key]);\n        }\n        return res;\n    }\n    else {\n        return v;\n    }\n}\n\n// Because SSR codegen output is completely different from client-side output\n// (e.g. multiple elements can be concatenated into a single template literal\n// instead of each getting a corresponding call), we need to apply an extra\n// transform pass to convert the template AST into a fresh JS AST before\n// passing it to codegen.\nfunction ssrCodegenTransform(ast, options) {\n    const context = createSSRTransformContext(ast, options);\n    // inject SFC <style> CSS variables\n    // we do this instead of inlining the expression to ensure the vars are\n    // only resolved once per render\n    if (options.ssrCssVars) {\n        const cssContext = compilerDom.createTransformContext(compilerDom.createRoot([]), options);\n        const varsExp = compilerDom.processExpression(compilerDom.createSimpleExpression(options.ssrCssVars, false), cssContext);\n        context.body.push(compilerDom.createCompoundExpression([`const _cssVars = { style: `, varsExp, `}`]));\n        Array.from(cssContext.helpers.keys()).forEach(helper => {\n            ast.helpers.add(helper);\n        });\n    }\n    const isFragment = ast.children.length > 1 && ast.children.some(c => !compilerDom.isText(c));\n    processChildren(ast, context, isFragment);\n    ast.codegenNode = compilerDom.createBlockStatement(context.body);\n    // Finalize helpers.\n    // We need to separate helpers imported from 'vue' vs. '@vue/server-renderer'\n    ast.ssrHelpers = Array.from(new Set([\n        ...Array.from(ast.helpers).filter(h => h in ssrHelpers),\n        ...context.helpers\n    ]));\n    ast.helpers = new Set(Array.from(ast.helpers).filter(h => !(h in ssrHelpers)));\n}\nfunction createSSRTransformContext(root, options, helpers = new Set(), withSlotScopeId = false) {\n    const body = [];\n    let currentString = null;\n    return {\n        root,\n        options,\n        body,\n        helpers,\n        withSlotScopeId,\n        onError: options.onError ||\n            (e => {\n                throw e;\n            }),\n        helper(name) {\n            helpers.add(name);\n            return name;\n        },\n        pushStringPart(part) {\n            if (!currentString) {\n                const currentCall = compilerDom.createCallExpression(`_push`);\n                body.push(currentCall);\n                currentString = compilerDom.createTemplateLiteral([]);\n                currentCall.arguments.push(currentString);\n            }\n            const bufferedElements = currentString.elements;\n            const lastItem = bufferedElements[bufferedElements.length - 1];\n            if (shared.isString(part) && shared.isString(lastItem)) {\n                bufferedElements[bufferedElements.length - 1] += part;\n            }\n            else {\n                bufferedElements.push(part);\n            }\n        },\n        pushStatement(statement) {\n            // close current string\n            currentString = null;\n            body.push(statement);\n        }\n    };\n}\nfunction createChildContext(parent, withSlotScopeId = parent.withSlotScopeId) {\n    // ensure child inherits parent helpers\n    return createSSRTransformContext(parent.root, parent.options, parent.helpers, withSlotScopeId);\n}\nfunction processChildren(parent, context, asFragment = false, disableNestedFragments = false) {\n    if (asFragment) {\n        context.pushStringPart(`<!--[-->`);\n    }\n    const { children } = parent;\n    for (let i = 0; i < children.length; i++) {\n        const child = children[i];\n        switch (child.type) {\n            case 1 /* NodeTypes.ELEMENT */:\n                switch (child.tagType) {\n                    case 0 /* ElementTypes.ELEMENT */:\n                        ssrProcessElement(child, context);\n                        break;\n                    case 1 /* ElementTypes.COMPONENT */:\n                        ssrProcessComponent(child, context, parent);\n                        break;\n                    case 2 /* ElementTypes.SLOT */:\n                        ssrProcessSlotOutlet(child, context);\n                        break;\n                    case 3 /* ElementTypes.TEMPLATE */:\n                        // TODO\n                        break;\n                    default:\n                        context.onError(createSSRCompilerError(64 /* SSRErrorCodes.X_SSR_INVALID_AST_NODE */, child.loc));\n                        // make sure we exhaust all possible types\n                        const exhaustiveCheck = child;\n                        return exhaustiveCheck;\n                }\n                break;\n            case 2 /* NodeTypes.TEXT */:\n                context.pushStringPart(shared.escapeHtml(child.content));\n                break;\n            case 3 /* NodeTypes.COMMENT */:\n                // no need to escape comment here because the AST can only\n                // contain valid comments.\n                context.pushStringPart(`<!--${child.content}-->`);\n                break;\n            case 5 /* NodeTypes.INTERPOLATION */:\n                context.pushStringPart(compilerDom.createCallExpression(context.helper(SSR_INTERPOLATE), [child.content]));\n                break;\n            case 9 /* NodeTypes.IF */:\n                ssrProcessIf(child, context, disableNestedFragments);\n                break;\n            case 11 /* NodeTypes.FOR */:\n                ssrProcessFor(child, context, disableNestedFragments);\n                break;\n            case 10 /* NodeTypes.IF_BRANCH */:\n                // no-op - handled by ssrProcessIf\n                break;\n            case 12 /* NodeTypes.TEXT_CALL */:\n            case 8 /* NodeTypes.COMPOUND_EXPRESSION */:\n                // no-op - these two types can never appear as template child node since\n                // `transformText` is not used during SSR compile.\n                break;\n            default:\n                context.onError(createSSRCompilerError(64 /* SSRErrorCodes.X_SSR_INVALID_AST_NODE */, child.loc));\n                // make sure we exhaust all possible types\n                const exhaustiveCheck = child;\n                return exhaustiveCheck;\n        }\n    }\n    if (asFragment) {\n        context.pushStringPart(`<!--]-->`);\n    }\n}\nfunction processChildrenAsStatement(parent, parentContext, asFragment = false, withSlotScopeId = parentContext.withSlotScopeId) {\n    const childContext = createChildContext(parentContext, withSlotScopeId);\n    processChildren(parent, childContext, asFragment);\n    return compilerDom.createBlockStatement(childContext.body);\n}\n\nconst ssrTransformModel = (dir, node, context) => {\n    const model = dir.exp;\n    function checkDuplicatedValue() {\n        const value = compilerDom.findProp(node, 'value');\n        if (value) {\n            context.onError(compilerDom.createDOMCompilerError(58 /* DOMErrorCodes.X_V_MODEL_UNNECESSARY_VALUE */, value.loc));\n        }\n    }\n    if (node.tagType === 0 /* ElementTypes.ELEMENT */) {\n        const res = { props: [] };\n        const defaultProps = [\n            // default value binding for text type inputs\n            compilerDom.createObjectProperty(`value`, model)\n        ];\n        if (node.tag === 'input') {\n            const type = compilerDom.findProp(node, 'type');\n            if (type) {\n                const value = findValueBinding(node);\n                if (type.type === 7 /* NodeTypes.DIRECTIVE */) {\n                    // dynamic type\n                    res.ssrTagParts = [\n                        compilerDom.createCallExpression(context.helper(SSR_RENDER_DYNAMIC_MODEL), [\n                            type.exp,\n                            model,\n                            value\n                        ])\n                    ];\n                }\n                else if (type.value) {\n                    // static type\n                    switch (type.value.content) {\n                        case 'radio':\n                            res.props = [\n                                compilerDom.createObjectProperty(`checked`, compilerDom.createCallExpression(context.helper(SSR_LOOSE_EQUAL), [\n                                    model,\n                                    value\n                                ]))\n                            ];\n                            break;\n                        case 'checkbox':\n                            const trueValueBinding = compilerDom.findProp(node, 'true-value');\n                            if (trueValueBinding) {\n                                const trueValue = trueValueBinding.type === 6 /* NodeTypes.ATTRIBUTE */\n                                    ? JSON.stringify(trueValueBinding.value.content)\n                                    : trueValueBinding.exp;\n                                res.props = [\n                                    compilerDom.createObjectProperty(`checked`, compilerDom.createCallExpression(context.helper(SSR_LOOSE_EQUAL), [\n                                        model,\n                                        trueValue\n                                    ]))\n                                ];\n                            }\n                            else {\n                                res.props = [\n                                    compilerDom.createObjectProperty(`checked`, compilerDom.createConditionalExpression(compilerDom.createCallExpression(`Array.isArray`, [model]), compilerDom.createCallExpression(context.helper(SSR_LOOSE_CONTAIN), [\n                                        model,\n                                        value\n                                    ]), model))\n                                ];\n                            }\n                            break;\n                        case 'file':\n                            context.onError(compilerDom.createDOMCompilerError(57 /* DOMErrorCodes.X_V_MODEL_ON_FILE_INPUT_ELEMENT */, dir.loc));\n                            break;\n                        default:\n                            checkDuplicatedValue();\n                            res.props = defaultProps;\n                            break;\n                    }\n                }\n            }\n            else if (compilerDom.hasDynamicKeyVBind(node)) ;\n            else {\n                // text type\n                checkDuplicatedValue();\n                res.props = defaultProps;\n            }\n        }\n        else if (node.tag === 'textarea') {\n            checkDuplicatedValue();\n            node.children = [compilerDom.createInterpolation(model, model.loc)];\n        }\n        else if (node.tag === 'select') ;\n        else {\n            context.onError(compilerDom.createDOMCompilerError(55 /* DOMErrorCodes.X_V_MODEL_ON_INVALID_ELEMENT */, dir.loc));\n        }\n        return res;\n    }\n    else {\n        // component v-model\n        return compilerDom.transformModel(dir, node, context);\n    }\n};\nfunction findValueBinding(node) {\n    const valueBinding = compilerDom.findProp(node, 'value');\n    return valueBinding\n        ? valueBinding.type === 7 /* NodeTypes.DIRECTIVE */\n            ? valueBinding.exp\n            : compilerDom.createSimpleExpression(valueBinding.value.content, true)\n        : compilerDom.createSimpleExpression(`null`, false);\n}\n\nconst ssrTransformShow = (dir, node, context) => {\n    if (!dir.exp) {\n        context.onError(compilerDom.createDOMCompilerError(59 /* DOMErrorCodes.X_V_SHOW_NO_EXPRESSION */));\n    }\n    return {\n        props: [\n            compilerDom.createObjectProperty(`style`, compilerDom.createConditionalExpression(dir.exp, compilerDom.createSimpleExpression(`null`, false), compilerDom.createObjectExpression([\n                compilerDom.createObjectProperty(`display`, compilerDom.createSimpleExpression(`none`, true))\n            ]), false /* no newline */))\n        ]\n    };\n};\n\nconst filterChild = (node) => node.children.filter(n => n.type !== 3 /* NodeTypes.COMMENT */);\nconst hasSingleChild = (node) => filterChild(node).length === 1;\nconst ssrInjectFallthroughAttrs = (node, context) => {\n    // _attrs is provided as a function argument.\n    // mark it as a known identifier so that it doesn't get prefixed by\n    // transformExpression.\n    if (node.type === 0 /* NodeTypes.ROOT */) {\n        context.identifiers._attrs = 1;\n    }\n    if (node.type === 1 /* NodeTypes.ELEMENT */ &&\n        node.tagType === 1 /* ElementTypes.COMPONENT */ &&\n        (compilerDom.isBuiltInType(node.tag, 'Transition') ||\n            compilerDom.isBuiltInType(node.tag, 'KeepAlive'))) {\n        const rootChildren = filterChild(context.root);\n        if (rootChildren.length === 1 && rootChildren[0] === node) {\n            if (hasSingleChild(node)) {\n                injectFallthroughAttrs(node.children[0]);\n            }\n            return;\n        }\n    }\n    const parent = context.parent;\n    if (!parent || parent.type !== 0 /* NodeTypes.ROOT */) {\n        return;\n    }\n    if (node.type === 10 /* NodeTypes.IF_BRANCH */ && hasSingleChild(node)) {\n        // detect cases where the parent v-if is not the only root level node\n        let hasEncounteredIf = false;\n        for (const c of filterChild(parent)) {\n            if (c.type === 9 /* NodeTypes.IF */ ||\n                (c.type === 1 /* NodeTypes.ELEMENT */ && compilerDom.findDir(c, 'if'))) {\n                // multiple root v-if\n                if (hasEncounteredIf)\n                    return;\n                hasEncounteredIf = true;\n            }\n            else if (\n            // node before v-if\n            !hasEncounteredIf ||\n                // non else nodes\n                !(c.type === 1 /* NodeTypes.ELEMENT */ && compilerDom.findDir(c, /else/, true))) {\n                return;\n            }\n        }\n        injectFallthroughAttrs(node.children[0]);\n    }\n    else if (hasSingleChild(parent)) {\n        injectFallthroughAttrs(node);\n    }\n};\nfunction injectFallthroughAttrs(node) {\n    if (node.type === 1 /* NodeTypes.ELEMENT */ &&\n        (node.tagType === 0 /* ElementTypes.ELEMENT */ ||\n            node.tagType === 1 /* ElementTypes.COMPONENT */) &&\n        !compilerDom.findDir(node, 'for')) {\n        node.props.push({\n            type: 7 /* NodeTypes.DIRECTIVE */,\n            name: 'bind',\n            arg: undefined,\n            exp: compilerDom.createSimpleExpression(`_attrs`, false),\n            modifiers: [],\n            loc: compilerDom.locStub\n        });\n    }\n}\n\nconst ssrInjectCssVars = (node, context) => {\n    if (!context.ssrCssVars) {\n        return;\n    }\n    // _cssVars is initialized once per render function\n    // the code is injected in ssrCodegenTransform when creating the\n    // ssr transform context\n    if (node.type === 0 /* NodeTypes.ROOT */) {\n        context.identifiers._cssVars = 1;\n    }\n    const parent = context.parent;\n    if (!parent || parent.type !== 0 /* NodeTypes.ROOT */) {\n        return;\n    }\n    if (node.type === 10 /* NodeTypes.IF_BRANCH */) {\n        for (const child of node.children) {\n            injectCssVars(child);\n        }\n    }\n    else {\n        injectCssVars(node);\n    }\n};\nfunction injectCssVars(node) {\n    if (node.type === 1 /* NodeTypes.ELEMENT */ &&\n        (node.tagType === 0 /* ElementTypes.ELEMENT */ ||\n            node.tagType === 1 /* ElementTypes.COMPONENT */) &&\n        !compilerDom.findDir(node, 'for')) {\n        if (compilerDom.isBuiltInType(node.tag, 'Suspense')) {\n            for (const child of node.children) {\n                if (child.type === 1 /* NodeTypes.ELEMENT */ &&\n                    child.tagType === 3 /* ElementTypes.TEMPLATE */) {\n                    // suspense slot\n                    child.children.forEach(injectCssVars);\n                }\n                else {\n                    injectCssVars(child);\n                }\n            }\n        }\n        else {\n            node.props.push({\n                type: 7 /* NodeTypes.DIRECTIVE */,\n                name: 'bind',\n                arg: undefined,\n                exp: compilerDom.createSimpleExpression(`_cssVars`, false),\n                modifiers: [],\n                loc: compilerDom.locStub\n            });\n        }\n    }\n}\n\nfunction compile(template, options = {}) {\n    options = {\n        ...options,\n        // apply DOM-specific parsing options\n        ...compilerDom.parserOptions,\n        ssr: true,\n        inSSR: true,\n        scopeId: options.mode === 'function' ? null : options.scopeId,\n        // always prefix since compiler-ssr doesn't have size concern\n        prefixIdentifiers: true,\n        // disable optimizations that are unnecessary for ssr\n        cacheHandlers: false,\n        hoistStatic: false\n    };\n    const ast = compilerDom.baseParse(template, options);\n    // Save raw options for AST. This is needed when performing sub-transforms\n    // on slot vnode branches.\n    rawOptionsMap.set(ast, options);\n    compilerDom.transform(ast, {\n        ...options,\n        hoistStatic: false,\n        nodeTransforms: [\n            ssrTransformIf,\n            ssrTransformFor,\n            compilerDom.trackVForSlotScopes,\n            compilerDom.transformExpression,\n            ssrTransformSlotOutlet,\n            ssrInjectFallthroughAttrs,\n            ssrInjectCssVars,\n            ssrTransformElement,\n            ssrTransformComponent,\n            compilerDom.trackSlotScopes,\n            compilerDom.transformStyle,\n            ...(options.nodeTransforms || []) // user transforms\n        ],\n        directiveTransforms: {\n            // reusing core v-bind\n            bind: compilerDom.transformBind,\n            on: compilerDom.transformOn,\n            // model and show has dedicated SSR handling\n            model: ssrTransformModel,\n            show: ssrTransformShow,\n            // the following are ignored during SSR\n            // on: noopDirectiveTransform,\n            cloak: compilerDom.noopDirectiveTransform,\n            once: compilerDom.noopDirectiveTransform,\n            memo: compilerDom.noopDirectiveTransform,\n            ...(options.directiveTransforms || {}) // user transforms\n        }\n    });\n    // traverse the template AST and convert into SSR codegen AST\n    // by replacing ast.codegenNode.\n    ssrCodegenTransform(ast, options);\n    return compilerDom.generate(ast, options);\n}\n\nexports.compile = compile;\n/dist/compiler-ssr.d.tsimport { CodegenResult } from '@vue/compiler-dom';\r\nimport { CompilerOptions } from '@vue/compiler-dom';\r\n\r\nexport declare function compile(template: string, options?: CompilerOptions): CodegenResult;\r\n\r\nexport { }\r\n/LICENSE\u0004CThe MIT License (MIT)\n\nCopyright (c) 2018-present, Yuxi (Evan) You\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QHZ1ZS9yZWFjdGl2aXR5LXRyYW5zZm9ybUAzLjIuNDc=",
    "content": "/LICENSE\u0004CThe MIT License (MIT)\n\nCopyright (c) 2018-present, Yuxi (Evan) You\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n!/dist/reactivity-transform.cjs.js^\u0003'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar MagicString = require('magic-string');\nvar estreeWalker = require('estree-walker');\nvar compilerCore = require('@vue/compiler-core');\nvar parser = require('@babel/parser');\nvar shared = require('@vue/shared');\n\nconst CONVERT_SYMBOL = '$';\nconst ESCAPE_SYMBOL = '$$';\nconst IMPORT_SOURCE = 'vue/macros';\nconst shorthands = ['ref', 'computed', 'shallowRef', 'toRef', 'customRef'];\nconst transformCheckRE = /[^\\w]\\$(?:\\$|ref|computed|shallowRef)?\\s*(\\(|\\<)/;\nfunction shouldTransform(src) {\n    return transformCheckRE.test(src);\n}\nfunction transform(src, { filename, sourceMap, parserPlugins, importHelpersFrom = 'vue' } = {}) {\n    const plugins = parserPlugins || [];\n    if (filename) {\n        if (/\\.tsx?$/.test(filename)) {\n            plugins.push('typescript');\n        }\n        if (filename.endsWith('x')) {\n            plugins.push('jsx');\n        }\n    }\n    const ast = parser.parse(src, {\n        sourceType: 'module',\n        plugins\n    });\n    const s = new MagicString(src);\n    const res = transformAST(ast.program, s, 0);\n    // inject helper imports\n    if (res.importedHelpers.length) {\n        s.prepend(`import { ${res.importedHelpers\n            .map(h => `${h} as _${h}`)\n            .join(', ')} } from '${importHelpersFrom}'\\n`);\n    }\n    return {\n        ...res,\n        code: s.toString(),\n        map: sourceMap\n            ? s.generateMap({\n                source: filename,\n                hires: true,\n                includeContent: true\n            })\n            : null\n    };\n}\nfunction transformAST(ast, s, offset = 0, knownRefs, knownProps) {\n    // TODO remove when out of experimental\n    warnExperimental();\n    const userImports = Object.create(null);\n    for (const node of ast.body) {\n        if (node.type !== 'ImportDeclaration')\n            continue;\n        walkImportDeclaration(node);\n    }\n    // macro import handling\n    let convertSymbol;\n    let escapeSymbol;\n    for (const { local, imported, source, specifier } of Object.values(userImports)) {\n        if (source === IMPORT_SOURCE) {\n            if (imported === ESCAPE_SYMBOL) {\n                escapeSymbol = local;\n            }\n            else if (imported === CONVERT_SYMBOL) {\n                convertSymbol = local;\n            }\n            else if (imported !== local) {\n                error(`macro imports for ref-creating methods do not support aliasing.`, specifier);\n            }\n        }\n    }\n    // default symbol\n    if (!convertSymbol && !userImports[CONVERT_SYMBOL]) {\n        convertSymbol = CONVERT_SYMBOL;\n    }\n    if (!escapeSymbol && !userImports[ESCAPE_SYMBOL]) {\n        escapeSymbol = ESCAPE_SYMBOL;\n    }\n    const importedHelpers = new Set();\n    const rootScope = {};\n    const scopeStack = [rootScope];\n    let currentScope = rootScope;\n    let escapeScope; // inside $$()\n    const excludedIds = new WeakSet();\n    const parentStack = [];\n    const propsLocalToPublicMap = Object.create(null);\n    if (knownRefs) {\n        for (const key of knownRefs) {\n            rootScope[key] = {};\n        }\n    }\n    if (knownProps) {\n        for (const key in knownProps) {\n            const { local, isConst } = knownProps[key];\n            rootScope[local] = {\n                isProp: true,\n                isConst: !!isConst\n            };\n            propsLocalToPublicMap[local] = key;\n        }\n    }\n    function walkImportDeclaration(node) {\n        const source = node.source.value;\n        if (source === IMPORT_SOURCE) {\n            s.remove(node.start + offset, node.end + offset);\n        }\n        for (const specifier of node.specifiers) {\n            const local = specifier.local.name;\n            const imported = (specifier.type === 'ImportSpecifier' &&\n                specifier.imported.type === 'Identifier' &&\n                specifier.imported.name) ||\n                'default';\n            userImports[local] = {\n                source,\n                local,\n                imported,\n                specifier\n            };\n        }\n    }\n    function isRefCreationCall(callee) {\n        if (!convertSymbol || currentScope[convertSymbol] !== undefined) {\n            return false;\n        }\n        if (callee === convertSymbol) {\n            return convertSymbol;\n        }\n        if (callee[0] === '$' && shorthands.includes(callee.slice(1))) {\n            return callee;\n        }\n        return false;\n    }\n    function error(msg, node) {\n        const e = new Error(msg);\n        e.node = node;\n        throw e;\n    }\n    function helper(msg) {\n        importedHelpers.add(msg);\n        return `_${msg}`;\n    }\n    function registerBinding(id, binding) {\n        excludedIds.add(id);\n        if (currentScope) {\n            currentScope[id.name] = binding ? binding : false;\n        }\n        else {\n            error('registerBinding called without active scope, something is wrong.', id);\n        }\n    }\n    const registerRefBinding = (id, isConst = false) => registerBinding(id, { isConst });\n    let tempVarCount = 0;\n    function genTempVar() {\n        return `__$temp_${++tempVarCount}`;\n    }\n    function snip(node) {\n        return s.original.slice(node.start + offset, node.end + offset);\n    }\n    function walkScope(node, isRoot = false) {\n        for (const stmt of node.body) {\n            if (stmt.type === 'VariableDeclaration') {\n                walkVariableDeclaration(stmt, isRoot);\n            }\n            else if (stmt.type === 'FunctionDeclaration' ||\n                stmt.type === 'ClassDeclaration') {\n                if (stmt.declare || !stmt.id)\n                    continue;\n                registerBinding(stmt.id);\n            }\n            else if ((stmt.type === 'ForOfStatement' || stmt.type === 'ForInStatement') &&\n                stmt.left.type === 'VariableDeclaration') {\n                walkVariableDeclaration(stmt.left);\n            }\n            else if (stmt.type === 'ExportNamedDeclaration' &&\n                stmt.declaration &&\n                stmt.declaration.type === 'VariableDeclaration') {\n                walkVariableDeclaration(stmt.declaration, isRoot);\n            }\n            else if (stmt.type === 'LabeledStatement' &&\n                stmt.body.type === 'VariableDeclaration') {\n                walkVariableDeclaration(stmt.body, isRoot);\n            }\n        }\n    }\n    function walkVariableDeclaration(stmt, isRoot = false) {\n        if (stmt.declare) {\n            return;\n        }\n        for (const decl of stmt.declarations) {\n            let refCall;\n            const isCall = decl.init &&\n                decl.init.type === 'CallExpression' &&\n                decl.init.callee.type === 'Identifier';\n            if (isCall &&\n                (refCall = isRefCreationCall(decl.init.callee.name))) {\n                processRefDeclaration(refCall, decl.id, decl.init, stmt.kind === 'const');\n            }\n            else {\n                const isProps = isRoot && isCall && decl.init.callee.name === 'defineProps';\n                for (const id of compilerCore.extractIdentifiers(decl.id)) {\n                    if (isProps) {\n                        // for defineProps destructure, only exclude them since they\n                        // are already passed in as knownProps\n                        excludedIds.add(id);\n                    }\n                    else {\n                        registerBinding(id);\n                    }\n                }\n            }\n        }\n    }\n    function processRefDeclaration(method, id, call, isConst) {\n        excludedIds.add(call.callee);\n        if (method === convertSymbol) {\n            // $\n            // remove macro\n            s.remove(call.callee.start + offset, call.callee.end + offset);\n            if (id.type === 'Identifier') {\n                // single variable\n                registerRefBinding(id, isConst);\n            }\n            else if (id.type === 'ObjectPattern') {\n                processRefObjectPattern(id, call, isConst);\n            }\n            else if (id.type === 'ArrayPattern') {\n                processRefArrayPattern(id, call, isConst);\n            }\n        }\n        else {\n            // shorthands\n            if (id.type === 'Identifier') {\n                registerRefBinding(id, isConst);\n                // replace call\n                s.overwrite(call.start + offset, call.start + method.length + offset, helper(method.slice(1)));\n            }\n            else {\n                error(`${method}() cannot be used with destructure patterns.`, call);\n            }\n        }\n    }\n    function processRefObjectPattern(pattern, call, isConst, tempVar, path = []) {\n        if (!tempVar) {\n            tempVar = genTempVar();\n            // const { x } = $(useFoo()) --> const __$temp_1 = useFoo()\n            s.overwrite(pattern.start + offset, pattern.end + offset, tempVar);\n        }\n        let nameId;\n        for (const p of pattern.properties) {\n            let key;\n            let defaultValue;\n            if (p.type === 'ObjectProperty') {\n                if (p.key.start === p.value.start) {\n                    // shorthand { foo }\n                    nameId = p.key;\n                    if (p.value.type === 'Identifier') {\n                        // avoid shorthand value identifier from being processed\n                        excludedIds.add(p.value);\n                    }\n                    else if (p.value.type === 'AssignmentPattern' &&\n                        p.value.left.type === 'Identifier') {\n                        // { foo = 1 }\n                        excludedIds.add(p.value.left);\n                        defaultValue = p.value.right;\n                    }\n                }\n                else {\n                    key = p.computed ? p.key : p.key.name;\n                    if (p.value.type === 'Identifier') {\n                        // { foo: bar }\n                        nameId = p.value;\n                    }\n                    else if (p.value.type === 'ObjectPattern') {\n                        processRefObjectPattern(p.value, call, isConst, tempVar, [\n                            ...path,\n                            key\n                        ]);\n                    }\n                    else if (p.value.type === 'ArrayPattern') {\n                        processRefArrayPattern(p.value, call, isConst, tempVar, [\n                            ...path,\n                            key\n                        ]);\n                    }\n                    else if (p.value.type === 'AssignmentPattern') {\n                        if (p.value.left.type === 'Identifier') {\n                            // { foo: bar = 1 }\n                            nameId = p.value.left;\n                            defaultValue = p.value.right;\n                        }\n                        else if (p.value.left.type === 'ObjectPattern') {\n                            processRefObjectPattern(p.value.left, call, isConst, tempVar, [\n                                ...path,\n                                [key, p.value.right]\n                            ]);\n                        }\n                        else if (p.value.left.type === 'ArrayPattern') {\n                            processRefArrayPattern(p.value.left, call, isConst, tempVar, [\n                                ...path,\n                                [key, p.value.right]\n                            ]);\n                        }\n                        else ;\n                    }\n                }\n            }\n            else {\n                // rest element { ...foo }\n                error(`reactivity destructure does not support rest elements.`, p);\n            }\n            if (nameId) {\n                registerRefBinding(nameId, isConst);\n                // inject toRef() after original replaced pattern\n                const source = pathToString(tempVar, path);\n                const keyStr = shared.isString(key)\n                    ? `'${key}'`\n                    : key\n                        ? snip(key)\n                        : `'${nameId.name}'`;\n                const defaultStr = defaultValue ? `, ${snip(defaultValue)}` : ``;\n                s.appendLeft(call.end + offset, `,\\n  ${nameId.name} = ${helper('toRef')}(${source}, ${keyStr}${defaultStr})`);\n            }\n        }\n        if (nameId) {\n            s.appendLeft(call.end + offset, ';');\n        }\n    }\n    function processRefArrayPattern(pattern, call, isConst, tempVar, path = []) {\n        if (!tempVar) {\n            // const [x] = $(useFoo()) --> const __$temp_1 = useFoo()\n            tempVar = genTempVar();\n            s.overwrite(pattern.start + offset, pattern.end + offset, tempVar);\n        }\n        let nameId;\n        for (let i = 0; i < pattern.elements.length; i++) {\n            const e = pattern.elements[i];\n            if (!e)\n                continue;\n            let defaultValue;\n            if (e.type === 'Identifier') {\n                // [a] --> [__a]\n                nameId = e;\n            }\n            else if (e.type === 'AssignmentPattern') {\n                // [a = 1]\n                nameId = e.left;\n                defaultValue = e.right;\n            }\n            else if (e.type === 'RestElement') {\n                // [...a]\n                error(`reactivity destructure does not support rest elements.`, e);\n            }\n            else if (e.type === 'ObjectPattern') {\n                processRefObjectPattern(e, call, isConst, tempVar, [...path, i]);\n            }\n            else if (e.type === 'ArrayPattern') {\n                processRefArrayPattern(e, call, isConst, tempVar, [...path, i]);\n            }\n            if (nameId) {\n                registerRefBinding(nameId, isConst);\n                // inject toRef() after original replaced pattern\n                const source = pathToString(tempVar, path);\n                const defaultStr = defaultValue ? `, ${snip(defaultValue)}` : ``;\n                s.appendLeft(call.end + offset, `,\\n  ${nameId.name} = ${helper('toRef')}(${source}, ${i}${defaultStr})`);\n            }\n        }\n        if (nameId) {\n            s.appendLeft(call.end + offset, ';');\n        }\n    }\n    function pathToString(source, path) {\n        if (path.length) {\n            for (const seg of path) {\n                if (shared.isArray(seg)) {\n                    source = `(${source}${segToString(seg[0])} || ${snip(seg[1])})`;\n                }\n                else {\n                    source += segToString(seg);\n                }\n            }\n        }\n        return source;\n    }\n    function segToString(seg) {\n        if (typeof seg === 'number') {\n            return `[${seg}]`;\n        }\n        else if (typeof seg === 'string') {\n            return `.${seg}`;\n        }\n        else {\n            return snip(seg);\n        }\n    }\n    function rewriteId(scope, id, parent, parentStack) {\n        if (shared.hasOwn(scope, id.name)) {\n            const binding = scope[id.name];\n            if (binding) {\n                if (binding.isConst &&\n                    ((parent.type === 'AssignmentExpression' && id === parent.left) ||\n                        parent.type === 'UpdateExpression')) {\n                    error(`Assignment to constant variable.`, id);\n                }\n                const { isProp } = binding;\n                if (compilerCore.isStaticProperty(parent) && parent.shorthand) {\n                    // let binding used in a property shorthand\n                    // skip for destructure patterns\n                    if (!parent.inPattern ||\n                        compilerCore.isInDestructureAssignment(parent, parentStack)) {\n                        if (isProp) {\n                            if (escapeScope) {\n                                // prop binding in $$()\n                                // { prop } -> { prop: __props_prop }\n                                registerEscapedPropBinding(id);\n                                s.appendLeft(id.end + offset, `: __props_${propsLocalToPublicMap[id.name]}`);\n                            }\n                            else {\n                                // { prop } -> { prop: __props.prop }\n                                s.appendLeft(id.end + offset, `: ${shared.genPropsAccessExp(propsLocalToPublicMap[id.name])}`);\n                            }\n                        }\n                        else {\n                            // { foo } -> { foo: foo.value }\n                            s.appendLeft(id.end + offset, `: ${id.name}.value`);\n                        }\n                    }\n                }\n                else {\n                    if (isProp) {\n                        if (escapeScope) {\n                            // x --> __props_x\n                            registerEscapedPropBinding(id);\n                            s.overwrite(id.start + offset, id.end + offset, `__props_${propsLocalToPublicMap[id.name]}`);\n                        }\n                        else {\n                            // x --> __props.x\n                            s.overwrite(id.start + offset, id.end + offset, shared.genPropsAccessExp(propsLocalToPublicMap[id.name]));\n                        }\n                    }\n                    else {\n                        // x --> x.value\n                        s.appendLeft(id.end + offset, '.value');\n                    }\n                }\n            }\n            return true;\n        }\n        return false;\n    }\n    const propBindingRefs = {};\n    function registerEscapedPropBinding(id) {\n        if (!propBindingRefs.hasOwnProperty(id.name)) {\n            propBindingRefs[id.name] = true;\n            const publicKey = propsLocalToPublicMap[id.name];\n            s.prependRight(offset, `const __props_${publicKey} = ${helper(`toRef`)}(__props, '${publicKey}');\\n`);\n        }\n    }\n    // check root scope first\n    walkScope(ast, true);\n    estreeWalker.walk(ast, {\n        enter(node, parent) {\n            parent && parentStack.push(parent);\n            // function scopes\n            if (compilerCore.isFunctionType(node)) {\n                scopeStack.push((currentScope = {}));\n                compilerCore.walkFunctionParams(node, registerBinding);\n                if (node.body.type === 'BlockStatement') {\n                    walkScope(node.body);\n                }\n                return;\n            }\n            // catch param\n            if (node.type === 'CatchClause') {\n                scopeStack.push((currentScope = {}));\n                if (node.param && node.param.type === 'Identifier') {\n                    registerBinding(node.param);\n                }\n                walkScope(node.body);\n                return;\n            }\n            // non-function block scopes\n            if (node.type === 'BlockStatement' && !compilerCore.isFunctionType(parent)) {\n                scopeStack.push((currentScope = {}));\n                walkScope(node);\n                return;\n            }\n            // skip type nodes\n            if (parent &&\n                parent.type.startsWith('TS') &&\n                parent.type !== 'TSAsExpression' &&\n                parent.type !== 'TSNonNullExpression' &&\n                parent.type !== 'TSTypeAssertion') {\n                return this.skip();\n            }\n            if (node.type === 'Identifier') {\n                const binding = rootScope[node.name];\n                if (\n                // if inside $$(), skip unless this is a destructured prop binding\n                !(escapeScope && (!binding || !binding.isProp)) &&\n                    compilerCore.isReferencedIdentifier(node, parent, parentStack) &&\n                    !excludedIds.has(node)) {\n                    // walk up the scope chain to check if id should be appended .value\n                    let i = scopeStack.length;\n                    while (i--) {\n                        if (rewriteId(scopeStack[i], node, parent, parentStack)) {\n                            return;\n                        }\n                    }\n                }\n            }\n            if (node.type === 'CallExpression' && node.callee.type === 'Identifier') {\n                const callee = node.callee.name;\n                const refCall = isRefCreationCall(callee);\n                if (refCall && (!parent || parent.type !== 'VariableDeclarator')) {\n                    return error(`${refCall} can only be used as the initializer of ` +\n                        `a variable declaration.`, node);\n                }\n                if (escapeSymbol &&\n                    currentScope[escapeSymbol] === undefined &&\n                    callee === escapeSymbol) {\n                    escapeScope = node;\n                    s.remove(node.callee.start + offset, node.callee.end + offset);\n                    if ((parent === null || parent === void 0 ? void 0 : parent.type) === 'ExpressionStatement') {\n                        // edge case where the call expression is an expression statement\n                        // if its own - prepend semicolon to avoid it being parsed as\n                        // function invocation of previous line\n                        let i = (node.leadingComments\n                            ? node.leadingComments[0].start\n                            : node.start) + offset;\n                        while (i--) {\n                            const char = s.original.charAt(i);\n                            if (char === '\\n') {\n                                // only insert semi if it's actually the fisrt thign after\n                                // newline\n                                s.prependRight(node.start + offset, ';');\n                                break;\n                            }\n                            else if (!/\\s/.test(char)) {\n                                break;\n                            }\n                        }\n                    }\n                }\n                // TODO remove when out of experimental\n                if (callee === '$raw') {\n                    error(`$raw() has been replaced by $$(). ` +\n                        `See ${RFC_LINK} for latest updates.`, node);\n                }\n                if (callee === '$fromRef') {\n                    error(`$fromRef() has been replaced by $(). ` +\n                        `See ${RFC_LINK} for latest updates.`, node);\n                }\n            }\n        },\n        leave(node, parent) {\n            parent && parentStack.pop();\n            if ((node.type === 'BlockStatement' && !compilerCore.isFunctionType(parent)) ||\n                compilerCore.isFunctionType(node)) {\n                scopeStack.pop();\n                currentScope = scopeStack[scopeStack.length - 1] || null;\n            }\n            if (node === escapeScope) {\n                escapeScope = undefined;\n            }\n        }\n    });\n    return {\n        rootRefs: Object.keys(rootScope).filter(key => {\n            const binding = rootScope[key];\n            return binding && !binding.isProp;\n        }),\n        importedHelpers: [...importedHelpers]\n    };\n}\nconst RFC_LINK = `https://github.com/vuejs/rfcs/discussions/369`;\nconst hasWarned = {};\nfunction warnExperimental() {\n    // eslint-disable-next-line\n    if (typeof window !== 'undefined') {\n        return;\n    }\n    warnOnce(`Reactivity transform is an experimental feature.\\n` +\n        `Experimental features may change behavior between patch versions.\\n` +\n        `It is recommended to pin your vue dependencies to exact versions to avoid breakage.\\n` +\n        `You can follow the proposal's status at ${RFC_LINK}.`);\n}\nfunction warnOnce(msg) {\n    const isNodeProd = typeof process !== 'undefined' && process.env.NODE_ENV === 'production';\n    if (!isNodeProd && !false && !hasWarned[msg]) {\n        hasWarned[msg] = true;\n        warn(msg);\n    }\n}\nfunction warn(msg) {\n    console.warn(`\\x1b[1m\\x1b[33m[@vue/reactivity-transform]\\x1b[0m\\x1b[33m ${msg}\\x1b[0m\\n`);\n}\n\nexports.shouldTransform = shouldTransform;\nexports.transform = transform;\nexports.transformAST = transformAST;\n/README.md\u000b# @vue/reactivity-transform\n\n> ⚠️ This is experimental and currently only provided for testing and feedback. It may break during patches or even be removed. Use at your own risk!\n>\n> Follow https://github.com/vuejs/rfcs/discussions/369 for details and updates.\n\n## Basic Rules\n\n- Ref-creating APIs have `$`-prefixed versions that create reactive variables instead. They also do not need to be explicitly imported. These include:\n  - `ref`\n  - `computed`\n  - `shallowRef`\n  - `customRef`\n  - `toRef`\n- `$()` can be used to destructure an object into reactive variables, or turn existing refs into reactive variables\n- `$$()` to \"escape\" the transform, which allows access to underlying refs\n\n```js\nimport { watchEffect } from 'vue'\n\n// bind ref as a variable\nlet count = $ref(0)\n\nwatchEffect(() => {\n  // no need for .value\n  console.log(count)\n})\n\n// assignments are reactive\ncount++\n\n// get the actual ref\nconsole.log($$(count)) // { value: 1 }\n```\n\nMacros can be optionally imported to make it more explicit:\n\n```js\n// not necessary, but also works\nimport { $, $ref } from 'vue/macros'\n\nlet count = $ref(0)\nconst { x, y } = $(useMouse())\n```\n\n### Global Types\n\nTo enable types for the macros globally, include the following in a `.d.ts` file:\n\n```ts\n/// <reference types=\"vue/macros-global\" />\n```\n\n## API\n\nThis package is the lower-level transform that can be used standalone. Higher-level tooling (e.g. `@vitejs/plugin-vue` and `vue-loader`) will provide integration via options.\n\n### `shouldTransform`\n\nCan be used to do a cheap check to determine whether full transform should be performed.\n\n```js\nimport { shouldTransform } from '@vue/reactivity-transform'\n\nshouldTransform(`let a = ref(0)`) // false\nshouldTransform(`let a = $ref(0)`) // true\n```\n\n### `transform`\n\n```js\nimport { transform } from '@vue/reactivity-transform'\n\nconst src = `let a = $ref(0); a++`\nconst {\n  code, // import { ref as _ref } from 'vue'; let a = (ref(0)); a.value++\"\n  map\n} = transform(src, {\n  filename: 'foo.ts',\n  sourceMap: true,\n\n  // @babel/parser plugins to enable.\n  // 'typescript' and 'jsx' will be auto-inferred from filename if provided,\n  // so in most cases explicit parserPlugins are not necessary\n  parserPlugins: [\n    /* ... */\n  ]\n})\n```\n\n**Options**\n\n```ts\ninterface RefTransformOptions {\n  filename?: string\n  sourceMap?: boolean // default: false\n  parserPlugins?: ParserPlugin[]\n  importHelpersFrom?: string // default: \"vue\"\n}\n```\n\n### `transformAST`\n\nTransform with an existing Babel AST + MagicString instance. This is used internally by `@vue/compiler-sfc` to avoid double parse/transform cost.\n\n```js\nimport { transformAST } from '@vue/reactivity-transform'\nimport { parse } from '@babel/parser'\nimport MagicString from 'magic-string'\n\nconst src = `let a = $ref(0); a++`\nconst ast = parse(src, { sourceType: 'module' })\nconst s = new MagicString(src)\n\nconst {\n  rootRefs, // ['a']\n  importedHelpers // ['ref']\n} = transformAST(ast, s)\n\nconsole.log(s.toString()) // let a = _ref(0); a.value++\n```\n/dist/reactivity-transform.d.ts\u0005nimport { ImportDefaultSpecifier } from '@babel/types';\r\nimport { ImportNamespaceSpecifier } from '@babel/types';\r\nimport { ImportSpecifier } from '@babel/types';\r\nimport MagicString from 'magic-string';\r\nimport { ParserPlugin } from '@babel/parser';\r\nimport { Program } from '@babel/types';\r\nimport { SourceMap } from 'magic-string';\r\n\r\nexport declare interface ImportBinding {\r\n    local: string;\r\n    imported: string;\r\n    source: string;\r\n    specifier: ImportSpecifier | ImportDefaultSpecifier | ImportNamespaceSpecifier;\r\n}\r\n\r\nexport declare interface RefTransformOptions {\r\n    filename?: string;\r\n    sourceMap?: boolean;\r\n    parserPlugins?: ParserPlugin[];\r\n    importHelpersFrom?: string;\r\n}\r\n\r\nexport declare interface RefTransformResults {\r\n    code: string;\r\n    map: SourceMap | null;\r\n    rootRefs: string[];\r\n    importedHelpers: string[];\r\n}\r\n\r\nexport declare function shouldTransform(src: string): boolean;\r\n\r\nexport declare function transform(src: string, { filename, sourceMap, parserPlugins, importHelpersFrom }?: RefTransformOptions): RefTransformResults;\r\n\r\nexport declare function transformAST(ast: Program, s: MagicString, offset?: number, knownRefs?: string[], knownProps?: Record<string, // public prop key\r\n    {\r\n    local: string;\r\n    default?: any;\r\n    isConst?: boolean;\r\n}>): {\r\n    rootRefs: string[];\r\n    importedHelpers: string[];\r\n};\r\n\r\nexport { }\r\n/package.json\u0003{\n  \"name\": \"@vue/reactivity-transform\",\n  \"version\": \"3.2.47\",\n  \"description\": \"@vue/reactivity-transform\",\n  \"main\": \"dist/reactivity-transform.cjs.js\",\n  \"files\": [\n    \"dist\"\n  ],\n  \"buildOptions\": {\n    \"formats\": [\n      \"cjs\"\n    ],\n    \"prod\": false\n  },\n  \"types\": \"dist/reactivity-transform.d.ts\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/vuejs/core.git\",\n    \"directory\": \"packages/reactivity-transform\"\n  },\n  \"keywords\": [\n    \"vue\"\n  ],\n  \"author\": \"Evan You\",\n  \"license\": \"MIT\",\n  \"bugs\": {\n    \"url\": \"https://github.com/vuejs/core/issues\"\n  },\n  \"homepage\": \"https://github.com/vuejs/core/tree/dev/packages/reactivity-transform#readme\",\n  \"dependencies\": {\n    \"@babel/parser\": \"^7.16.4\",\n    \"@vue/compiler-core\": \"3.2.47\",\n    \"@vue/shared\": \"3.2.47\",\n    \"estree-walker\": \"^2.0.2\",\n    \"magic-string\": \"^0.25.7\"\n  },\n  \"devDependencies\": {\n    \"@babel/core\": \"^7.16.0\",\n    \"@babel/types\": \"^7.16.0\"\n  }\n}\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QHZ1ZS9yZWFjdGl2aXR5QDMuMi40Nw==",
    "content": "/dist/reactivity.esm-bundler.jsŧimport { extend, isArray, isMap, isIntegerKey, hasOwn, isSymbol, isObject, hasChanged, makeMap, capitalize, toRawType, def, isFunction, NOOP } from '@vue/shared';\n\nfunction warn(msg, ...args) {\n    console.warn(`[Vue warn] ${msg}`, ...args);\n}\n\nlet activeEffectScope;\nclass EffectScope {\n    constructor(detached = false) {\n        this.detached = detached;\n        /**\n         * @internal\n         */\n        this._active = true;\n        /**\n         * @internal\n         */\n        this.effects = [];\n        /**\n         * @internal\n         */\n        this.cleanups = [];\n        this.parent = activeEffectScope;\n        if (!detached && activeEffectScope) {\n            this.index =\n                (activeEffectScope.scopes || (activeEffectScope.scopes = [])).push(this) - 1;\n        }\n    }\n    get active() {\n        return this._active;\n    }\n    run(fn) {\n        if (this._active) {\n            const currentEffectScope = activeEffectScope;\n            try {\n                activeEffectScope = this;\n                return fn();\n            }\n            finally {\n                activeEffectScope = currentEffectScope;\n            }\n        }\n        else if ((process.env.NODE_ENV !== 'production')) {\n            warn(`cannot run an inactive effect scope.`);\n        }\n    }\n    /**\n     * This should only be called on non-detached scopes\n     * @internal\n     */\n    on() {\n        activeEffectScope = this;\n    }\n    /**\n     * This should only be called on non-detached scopes\n     * @internal\n     */\n    off() {\n        activeEffectScope = this.parent;\n    }\n    stop(fromParent) {\n        if (this._active) {\n            let i, l;\n            for (i = 0, l = this.effects.length; i < l; i++) {\n                this.effects[i].stop();\n            }\n            for (i = 0, l = this.cleanups.length; i < l; i++) {\n                this.cleanups[i]();\n            }\n            if (this.scopes) {\n                for (i = 0, l = this.scopes.length; i < l; i++) {\n                    this.scopes[i].stop(true);\n                }\n            }\n            // nested scope, dereference from parent to avoid memory leaks\n            if (!this.detached && this.parent && !fromParent) {\n                // optimized O(1) removal\n                const last = this.parent.scopes.pop();\n                if (last && last !== this) {\n                    this.parent.scopes[this.index] = last;\n                    last.index = this.index;\n                }\n            }\n            this.parent = undefined;\n            this._active = false;\n        }\n    }\n}\nfunction effectScope(detached) {\n    return new EffectScope(detached);\n}\nfunction recordEffectScope(effect, scope = activeEffectScope) {\n    if (scope && scope.active) {\n        scope.effects.push(effect);\n    }\n}\nfunction getCurrentScope() {\n    return activeEffectScope;\n}\nfunction onScopeDispose(fn) {\n    if (activeEffectScope) {\n        activeEffectScope.cleanups.push(fn);\n    }\n    else if ((process.env.NODE_ENV !== 'production')) {\n        warn(`onScopeDispose() is called when there is no active effect scope` +\n            ` to be associated with.`);\n    }\n}\n\nconst createDep = (effects) => {\n    const dep = new Set(effects);\n    dep.w = 0;\n    dep.n = 0;\n    return dep;\n};\nconst wasTracked = (dep) => (dep.w & trackOpBit) > 0;\nconst newTracked = (dep) => (dep.n & trackOpBit) > 0;\nconst initDepMarkers = ({ deps }) => {\n    if (deps.length) {\n        for (let i = 0; i < deps.length; i++) {\n            deps[i].w |= trackOpBit; // set was tracked\n        }\n    }\n};\nconst finalizeDepMarkers = (effect) => {\n    const { deps } = effect;\n    if (deps.length) {\n        let ptr = 0;\n        for (let i = 0; i < deps.length; i++) {\n            const dep = deps[i];\n            if (wasTracked(dep) && !newTracked(dep)) {\n                dep.delete(effect);\n            }\n            else {\n                deps[ptr++] = dep;\n            }\n            // clear bits\n            dep.w &= ~trackOpBit;\n            dep.n &= ~trackOpBit;\n        }\n        deps.length = ptr;\n    }\n};\n\nconst targetMap = new WeakMap();\n// The number of effects currently being tracked recursively.\nlet effectTrackDepth = 0;\nlet trackOpBit = 1;\n/**\n * The bitwise track markers support at most 30 levels of recursion.\n * This value is chosen to enable modern JS engines to use a SMI on all platforms.\n * When recursion depth is greater, fall back to using a full cleanup.\n */\nconst maxMarkerBits = 30;\nlet activeEffect;\nconst ITERATE_KEY = Symbol((process.env.NODE_ENV !== 'production') ? 'iterate' : '');\nconst MAP_KEY_ITERATE_KEY = Symbol((process.env.NODE_ENV !== 'production') ? 'Map key iterate' : '');\nclass ReactiveEffect {\n    constructor(fn, scheduler = null, scope) {\n        this.fn = fn;\n        this.scheduler = scheduler;\n        this.active = true;\n        this.deps = [];\n        this.parent = undefined;\n        recordEffectScope(this, scope);\n    }\n    run() {\n        if (!this.active) {\n            return this.fn();\n        }\n        let parent = activeEffect;\n        let lastShouldTrack = shouldTrack;\n        while (parent) {\n            if (parent === this) {\n                return;\n            }\n            parent = parent.parent;\n        }\n        try {\n            this.parent = activeEffect;\n            activeEffect = this;\n            shouldTrack = true;\n            trackOpBit = 1 << ++effectTrackDepth;\n            if (effectTrackDepth <= maxMarkerBits) {\n                initDepMarkers(this);\n            }\n            else {\n                cleanupEffect(this);\n            }\n            return this.fn();\n        }\n        finally {\n            if (effectTrackDepth <= maxMarkerBits) {\n                finalizeDepMarkers(this);\n            }\n            trackOpBit = 1 << --effectTrackDepth;\n            activeEffect = this.parent;\n            shouldTrack = lastShouldTrack;\n            this.parent = undefined;\n            if (this.deferStop) {\n                this.stop();\n            }\n        }\n    }\n    stop() {\n        // stopped while running itself - defer the cleanup\n        if (activeEffect === this) {\n            this.deferStop = true;\n        }\n        else if (this.active) {\n            cleanupEffect(this);\n            if (this.onStop) {\n                this.onStop();\n            }\n            this.active = false;\n        }\n    }\n}\nfunction cleanupEffect(effect) {\n    const { deps } = effect;\n    if (deps.length) {\n        for (let i = 0; i < deps.length; i++) {\n            deps[i].delete(effect);\n        }\n        deps.length = 0;\n    }\n}\nfunction effect(fn, options) {\n    if (fn.effect) {\n        fn = fn.effect.fn;\n    }\n    const _effect = new ReactiveEffect(fn);\n    if (options) {\n        extend(_effect, options);\n        if (options.scope)\n            recordEffectScope(_effect, options.scope);\n    }\n    if (!options || !options.lazy) {\n        _effect.run();\n    }\n    const runner = _effect.run.bind(_effect);\n    runner.effect = _effect;\n    return runner;\n}\nfunction stop(runner) {\n    runner.effect.stop();\n}\nlet shouldTrack = true;\nconst trackStack = [];\nfunction pauseTracking() {\n    trackStack.push(shouldTrack);\n    shouldTrack = false;\n}\nfunction enableTracking() {\n    trackStack.push(shouldTrack);\n    shouldTrack = true;\n}\nfunction resetTracking() {\n    const last = trackStack.pop();\n    shouldTrack = last === undefined ? true : last;\n}\nfunction track(target, type, key) {\n    if (shouldTrack && activeEffect) {\n        let depsMap = targetMap.get(target);\n        if (!depsMap) {\n            targetMap.set(target, (depsMap = new Map()));\n        }\n        let dep = depsMap.get(key);\n        if (!dep) {\n            depsMap.set(key, (dep = createDep()));\n        }\n        const eventInfo = (process.env.NODE_ENV !== 'production')\n            ? { effect: activeEffect, target, type, key }\n            : undefined;\n        trackEffects(dep, eventInfo);\n    }\n}\nfunction trackEffects(dep, debuggerEventExtraInfo) {\n    let shouldTrack = false;\n    if (effectTrackDepth <= maxMarkerBits) {\n        if (!newTracked(dep)) {\n            dep.n |= trackOpBit; // set newly tracked\n            shouldTrack = !wasTracked(dep);\n        }\n    }\n    else {\n        // Full cleanup mode.\n        shouldTrack = !dep.has(activeEffect);\n    }\n    if (shouldTrack) {\n        dep.add(activeEffect);\n        activeEffect.deps.push(dep);\n        if ((process.env.NODE_ENV !== 'production') && activeEffect.onTrack) {\n            activeEffect.onTrack(Object.assign({ effect: activeEffect }, debuggerEventExtraInfo));\n        }\n    }\n}\nfunction trigger(target, type, key, newValue, oldValue, oldTarget) {\n    const depsMap = targetMap.get(target);\n    if (!depsMap) {\n        // never been tracked\n        return;\n    }\n    let deps = [];\n    if (type === \"clear\" /* TriggerOpTypes.CLEAR */) {\n        // collection being cleared\n        // trigger all effects for target\n        deps = [...depsMap.values()];\n    }\n    else if (key === 'length' && isArray(target)) {\n        const newLength = Number(newValue);\n        depsMap.forEach((dep, key) => {\n            if (key === 'length' || key >= newLength) {\n                deps.push(dep);\n            }\n        });\n    }\n    else {\n        // schedule runs for SET | ADD | DELETE\n        if (key !== void 0) {\n            deps.push(depsMap.get(key));\n        }\n        // also run for iteration key on ADD | DELETE | Map.SET\n        switch (type) {\n            case \"add\" /* TriggerOpTypes.ADD */:\n                if (!isArray(target)) {\n                    deps.push(depsMap.get(ITERATE_KEY));\n                    if (isMap(target)) {\n                        deps.push(depsMap.get(MAP_KEY_ITERATE_KEY));\n                    }\n                }\n                else if (isIntegerKey(key)) {\n                    // new index added to array -> length changes\n                    deps.push(depsMap.get('length'));\n                }\n                break;\n            case \"delete\" /* TriggerOpTypes.DELETE */:\n                if (!isArray(target)) {\n                    deps.push(depsMap.get(ITERATE_KEY));\n                    if (isMap(target)) {\n                        deps.push(depsMap.get(MAP_KEY_ITERATE_KEY));\n                    }\n                }\n                break;\n            case \"set\" /* TriggerOpTypes.SET */:\n                if (isMap(target)) {\n                    deps.push(depsMap.get(ITERATE_KEY));\n                }\n                break;\n        }\n    }\n    const eventInfo = (process.env.NODE_ENV !== 'production')\n        ? { target, type, key, newValue, oldValue, oldTarget }\n        : undefined;\n    if (deps.length === 1) {\n        if (deps[0]) {\n            if ((process.env.NODE_ENV !== 'production')) {\n                triggerEffects(deps[0], eventInfo);\n            }\n            else {\n                triggerEffects(deps[0]);\n            }\n        }\n    }\n    else {\n        const effects = [];\n        for (const dep of deps) {\n            if (dep) {\n                effects.push(...dep);\n            }\n        }\n        if ((process.env.NODE_ENV !== 'production')) {\n            triggerEffects(createDep(effects), eventInfo);\n        }\n        else {\n            triggerEffects(createDep(effects));\n        }\n    }\n}\nfunction triggerEffects(dep, debuggerEventExtraInfo) {\n    // spread into array for stabilization\n    const effects = isArray(dep) ? dep : [...dep];\n    for (const effect of effects) {\n        if (effect.computed) {\n            triggerEffect(effect, debuggerEventExtraInfo);\n        }\n    }\n    for (const effect of effects) {\n        if (!effect.computed) {\n            triggerEffect(effect, debuggerEventExtraInfo);\n        }\n    }\n}\nfunction triggerEffect(effect, debuggerEventExtraInfo) {\n    if (effect !== activeEffect || effect.allowRecurse) {\n        if ((process.env.NODE_ENV !== 'production') && effect.onTrigger) {\n            effect.onTrigger(extend({ effect }, debuggerEventExtraInfo));\n        }\n        if (effect.scheduler) {\n            effect.scheduler();\n        }\n        else {\n            effect.run();\n        }\n    }\n}\nfunction getDepFromReactive(object, key) {\n    var _a;\n    return (_a = targetMap.get(object)) === null || _a === void 0 ? void 0 : _a.get(key);\n}\n\nconst isNonTrackableKeys = /*#__PURE__*/ makeMap(`__proto__,__v_isRef,__isVue`);\nconst builtInSymbols = new Set(\n/*#__PURE__*/\nObject.getOwnPropertyNames(Symbol)\n    // ios10.x Object.getOwnPropertyNames(Symbol) can enumerate 'arguments' and 'caller'\n    // but accessing them on Symbol leads to TypeError because Symbol is a strict mode\n    // function\n    .filter(key => key !== 'arguments' && key !== 'caller')\n    .map(key => Symbol[key])\n    .filter(isSymbol));\nconst get$1 = /*#__PURE__*/ createGetter();\nconst shallowGet = /*#__PURE__*/ createGetter(false, true);\nconst readonlyGet = /*#__PURE__*/ createGetter(true);\nconst shallowReadonlyGet = /*#__PURE__*/ createGetter(true, true);\nconst arrayInstrumentations = /*#__PURE__*/ createArrayInstrumentations();\nfunction createArrayInstrumentations() {\n    const instrumentations = {};\n    ['includes', 'indexOf', 'lastIndexOf'].forEach(key => {\n        instrumentations[key] = function (...args) {\n            const arr = toRaw(this);\n            for (let i = 0, l = this.length; i < l; i++) {\n                track(arr, \"get\" /* TrackOpTypes.GET */, i + '');\n            }\n            // we run the method using the original args first (which may be reactive)\n            const res = arr[key](...args);\n            if (res === -1 || res === false) {\n                // if that didn't work, run it again using raw values.\n                return arr[key](...args.map(toRaw));\n            }\n            else {\n                return res;\n            }\n        };\n    });\n    ['push', 'pop', 'shift', 'unshift', 'splice'].forEach(key => {\n        instrumentations[key] = function (...args) {\n            pauseTracking();\n            const res = toRaw(this)[key].apply(this, args);\n            resetTracking();\n            return res;\n        };\n    });\n    return instrumentations;\n}\nfunction hasOwnProperty(key) {\n    const obj = toRaw(this);\n    track(obj, \"has\" /* TrackOpTypes.HAS */, key);\n    return obj.hasOwnProperty(key);\n}\nfunction createGetter(isReadonly = false, shallow = false) {\n    return function get(target, key, receiver) {\n        if (key === \"__v_isReactive\" /* ReactiveFlags.IS_REACTIVE */) {\n            return !isReadonly;\n        }\n        else if (key === \"__v_isReadonly\" /* ReactiveFlags.IS_READONLY */) {\n            return isReadonly;\n        }\n        else if (key === \"__v_isShallow\" /* ReactiveFlags.IS_SHALLOW */) {\n            return shallow;\n        }\n        else if (key === \"__v_raw\" /* ReactiveFlags.RAW */ &&\n            receiver ===\n                (isReadonly\n                    ? shallow\n                        ? shallowReadonlyMap\n                        : readonlyMap\n                    : shallow\n                        ? shallowReactiveMap\n                        : reactiveMap).get(target)) {\n            return target;\n        }\n        const targetIsArray = isArray(target);\n        if (!isReadonly) {\n            if (targetIsArray && hasOwn(arrayInstrumentations, key)) {\n                return Reflect.get(arrayInstrumentations, key, receiver);\n            }\n            if (key === 'hasOwnProperty') {\n                return hasOwnProperty;\n            }\n        }\n        const res = Reflect.get(target, key, receiver);\n        if (isSymbol(key) ? builtInSymbols.has(key) : isNonTrackableKeys(key)) {\n            return res;\n        }\n        if (!isReadonly) {\n            track(target, \"get\" /* TrackOpTypes.GET */, key);\n        }\n        if (shallow) {\n            return res;\n        }\n        if (isRef(res)) {\n            // ref unwrapping - skip unwrap for Array + integer key.\n            return targetIsArray && isIntegerKey(key) ? res : res.value;\n        }\n        if (isObject(res)) {\n            // Convert returned value into a proxy as well. we do the isObject check\n            // here to avoid invalid value warning. Also need to lazy access readonly\n            // and reactive here to avoid circular dependency.\n            return isReadonly ? readonly(res) : reactive(res);\n        }\n        return res;\n    };\n}\nconst set$1 = /*#__PURE__*/ createSetter();\nconst shallowSet = /*#__PURE__*/ createSetter(true);\nfunction createSetter(shallow = false) {\n    return function set(target, key, value, receiver) {\n        let oldValue = target[key];\n        if (isReadonly(oldValue) && isRef(oldValue) && !isRef(value)) {\n            return false;\n        }\n        if (!shallow) {\n            if (!isShallow(value) && !isReadonly(value)) {\n                oldValue = toRaw(oldValue);\n                value = toRaw(value);\n            }\n            if (!isArray(target) && isRef(oldValue) && !isRef(value)) {\n                oldValue.value = value;\n                return true;\n            }\n        }\n        const hadKey = isArray(target) && isIntegerKey(key)\n            ? Number(key) < target.length\n            : hasOwn(target, key);\n        const result = Reflect.set(target, key, value, receiver);\n        // don't trigger if target is something up in the prototype chain of original\n        if (target === toRaw(receiver)) {\n            if (!hadKey) {\n                trigger(target, \"add\" /* TriggerOpTypes.ADD */, key, value);\n            }\n            else if (hasChanged(value, oldValue)) {\n                trigger(target, \"set\" /* TriggerOpTypes.SET */, key, value, oldValue);\n            }\n        }\n        return result;\n    };\n}\nfunction deleteProperty(target, key) {\n    const hadKey = hasOwn(target, key);\n    const oldValue = target[key];\n    const result = Reflect.deleteProperty(target, key);\n    if (result && hadKey) {\n        trigger(target, \"delete\" /* TriggerOpTypes.DELETE */, key, undefined, oldValue);\n    }\n    return result;\n}\nfunction has$1(target, key) {\n    const result = Reflect.has(target, key);\n    if (!isSymbol(key) || !builtInSymbols.has(key)) {\n        track(target, \"has\" /* TrackOpTypes.HAS */, key);\n    }\n    return result;\n}\nfunction ownKeys(target) {\n    track(target, \"iterate\" /* TrackOpTypes.ITERATE */, isArray(target) ? 'length' : ITERATE_KEY);\n    return Reflect.ownKeys(target);\n}\nconst mutableHandlers = {\n    get: get$1,\n    set: set$1,\n    deleteProperty,\n    has: has$1,\n    ownKeys\n};\nconst readonlyHandlers = {\n    get: readonlyGet,\n    set(target, key) {\n        if ((process.env.NODE_ENV !== 'production')) {\n            warn(`Set operation on key \"${String(key)}\" failed: target is readonly.`, target);\n        }\n        return true;\n    },\n    deleteProperty(target, key) {\n        if ((process.env.NODE_ENV !== 'production')) {\n            warn(`Delete operation on key \"${String(key)}\" failed: target is readonly.`, target);\n        }\n        return true;\n    }\n};\nconst shallowReactiveHandlers = /*#__PURE__*/ extend({}, mutableHandlers, {\n    get: shallowGet,\n    set: shallowSet\n});\n// Props handlers are special in the sense that it should not unwrap top-level\n// refs (in order to allow refs to be explicitly passed down), but should\n// retain the reactivity of the normal readonly object.\nconst shallowReadonlyHandlers = /*#__PURE__*/ extend({}, readonlyHandlers, {\n    get: shallowReadonlyGet\n});\n\nconst toShallow = (value) => value;\nconst getProto = (v) => Reflect.getPrototypeOf(v);\nfunction get(target, key, isReadonly = false, isShallow = false) {\n    // #1772: readonly(reactive(Map)) should return readonly + reactive version\n    // of the value\n    target = target[\"__v_raw\" /* ReactiveFlags.RAW */];\n    const rawTarget = toRaw(target);\n    const rawKey = toRaw(key);\n    if (!isReadonly) {\n        if (key !== rawKey) {\n            track(rawTarget, \"get\" /* TrackOpTypes.GET */, key);\n        }\n        track(rawTarget, \"get\" /* TrackOpTypes.GET */, rawKey);\n    }\n    const { has } = getProto(rawTarget);\n    const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive;\n    if (has.call(rawTarget, key)) {\n        return wrap(target.get(key));\n    }\n    else if (has.call(rawTarget, rawKey)) {\n        return wrap(target.get(rawKey));\n    }\n    else if (target !== rawTarget) {\n        // #3602 readonly(reactive(Map))\n        // ensure that the nested reactive `Map` can do tracking for itself\n        target.get(key);\n    }\n}\nfunction has(key, isReadonly = false) {\n    const target = this[\"__v_raw\" /* ReactiveFlags.RAW */];\n    const rawTarget = toRaw(target);\n    const rawKey = toRaw(key);\n    if (!isReadonly) {\n        if (key !== rawKey) {\n            track(rawTarget, \"has\" /* TrackOpTypes.HAS */, key);\n        }\n        track(rawTarget, \"has\" /* TrackOpTypes.HAS */, rawKey);\n    }\n    return key === rawKey\n        ? target.has(key)\n        : target.has(key) || target.has(rawKey);\n}\nfunction size(target, isReadonly = false) {\n    target = target[\"__v_raw\" /* ReactiveFlags.RAW */];\n    !isReadonly && track(toRaw(target), \"iterate\" /* TrackOpTypes.ITERATE */, ITERATE_KEY);\n    return Reflect.get(target, 'size', target);\n}\nfunction add(value) {\n    value = toRaw(value);\n    const target = toRaw(this);\n    const proto = getProto(target);\n    const hadKey = proto.has.call(target, value);\n    if (!hadKey) {\n        target.add(value);\n        trigger(target, \"add\" /* TriggerOpTypes.ADD */, value, value);\n    }\n    return this;\n}\nfunction set(key, value) {\n    value = toRaw(value);\n    const target = toRaw(this);\n    const { has, get } = getProto(target);\n    let hadKey = has.call(target, key);\n    if (!hadKey) {\n        key = toRaw(key);\n        hadKey = has.call(target, key);\n    }\n    else if ((process.env.NODE_ENV !== 'production')) {\n        checkIdentityKeys(target, has, key);\n    }\n    const oldValue = get.call(target, key);\n    target.set(key, value);\n    if (!hadKey) {\n        trigger(target, \"add\" /* TriggerOpTypes.ADD */, key, value);\n    }\n    else if (hasChanged(value, oldValue)) {\n        trigger(target, \"set\" /* TriggerOpTypes.SET */, key, value, oldValue);\n    }\n    return this;\n}\nfunction deleteEntry(key) {\n    const target = toRaw(this);\n    const { has, get } = getProto(target);\n    let hadKey = has.call(target, key);\n    if (!hadKey) {\n        key = toRaw(key);\n        hadKey = has.call(target, key);\n    }\n    else if ((process.env.NODE_ENV !== 'production')) {\n        checkIdentityKeys(target, has, key);\n    }\n    const oldValue = get ? get.call(target, key) : undefined;\n    // forward the operation before queueing reactions\n    const result = target.delete(key);\n    if (hadKey) {\n        trigger(target, \"delete\" /* TriggerOpTypes.DELETE */, key, undefined, oldValue);\n    }\n    return result;\n}\nfunction clear() {\n    const target = toRaw(this);\n    const hadItems = target.size !== 0;\n    const oldTarget = (process.env.NODE_ENV !== 'production')\n        ? isMap(target)\n            ? new Map(target)\n            : new Set(target)\n        : undefined;\n    // forward the operation before queueing reactions\n    const result = target.clear();\n    if (hadItems) {\n        trigger(target, \"clear\" /* TriggerOpTypes.CLEAR */, undefined, undefined, oldTarget);\n    }\n    return result;\n}\nfunction createForEach(isReadonly, isShallow) {\n    return function forEach(callback, thisArg) {\n        const observed = this;\n        const target = observed[\"__v_raw\" /* ReactiveFlags.RAW */];\n        const rawTarget = toRaw(target);\n        const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive;\n        !isReadonly && track(rawTarget, \"iterate\" /* TrackOpTypes.ITERATE */, ITERATE_KEY);\n        return target.forEach((value, key) => {\n            // important: make sure the callback is\n            // 1. invoked with the reactive map as `this` and 3rd arg\n            // 2. the value received should be a corresponding reactive/readonly.\n            return callback.call(thisArg, wrap(value), wrap(key), observed);\n        });\n    };\n}\nfunction createIterableMethod(method, isReadonly, isShallow) {\n    return function (...args) {\n        const target = this[\"__v_raw\" /* ReactiveFlags.RAW */];\n        const rawTarget = toRaw(target);\n        const targetIsMap = isMap(rawTarget);\n        const isPair = method === 'entries' || (method === Symbol.iterator && targetIsMap);\n        const isKeyOnly = method === 'keys' && targetIsMap;\n        const innerIterator = target[method](...args);\n        const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive;\n        !isReadonly &&\n            track(rawTarget, \"iterate\" /* TrackOpTypes.ITERATE */, isKeyOnly ? MAP_KEY_ITERATE_KEY : ITERATE_KEY);\n        // return a wrapped iterator which returns observed versions of the\n        // values emitted from the real iterator\n        return {\n            // iterator protocol\n            next() {\n                const { value, done } = innerIterator.next();\n                return done\n                    ? { value, done }\n                    : {\n                        value: isPair ? [wrap(value[0]), wrap(value[1])] : wrap(value),\n                        done\n                    };\n            },\n            // iterable protocol\n            [Symbol.iterator]() {\n                return this;\n            }\n        };\n    };\n}\nfunction createReadonlyMethod(type) {\n    return function (...args) {\n        if ((process.env.NODE_ENV !== 'production')) {\n            const key = args[0] ? `on key \"${args[0]}\" ` : ``;\n            console.warn(`${capitalize(type)} operation ${key}failed: target is readonly.`, toRaw(this));\n        }\n        return type === \"delete\" /* TriggerOpTypes.DELETE */ ? false : this;\n    };\n}\nfunction createInstrumentations() {\n    const mutableInstrumentations = {\n        get(key) {\n            return get(this, key);\n        },\n        get size() {\n            return size(this);\n        },\n        has,\n        add,\n        set,\n        delete: deleteEntry,\n        clear,\n        forEach: createForEach(false, false)\n    };\n    const shallowInstrumentations = {\n        get(key) {\n            return get(this, key, false, true);\n        },\n        get size() {\n            return size(this);\n        },\n        has,\n        add,\n        set,\n        delete: deleteEntry,\n        clear,\n        forEach: createForEach(false, true)\n    };\n    const readonlyInstrumentations = {\n        get(key) {\n            return get(this, key, true);\n        },\n        get size() {\n            return size(this, true);\n        },\n        has(key) {\n            return has.call(this, key, true);\n        },\n        add: createReadonlyMethod(\"add\" /* TriggerOpTypes.ADD */),\n        set: createReadonlyMethod(\"set\" /* TriggerOpTypes.SET */),\n        delete: createReadonlyMethod(\"delete\" /* TriggerOpTypes.DELETE */),\n        clear: createReadonlyMethod(\"clear\" /* TriggerOpTypes.CLEAR */),\n        forEach: createForEach(true, false)\n    };\n    const shallowReadonlyInstrumentations = {\n        get(key) {\n            return get(this, key, true, true);\n        },\n        get size() {\n            return size(this, true);\n        },\n        has(key) {\n            return has.call(this, key, true);\n        },\n        add: createReadonlyMethod(\"add\" /* TriggerOpTypes.ADD */),\n        set: createReadonlyMethod(\"set\" /* TriggerOpTypes.SET */),\n        delete: createReadonlyMethod(\"delete\" /* TriggerOpTypes.DELETE */),\n        clear: createReadonlyMethod(\"clear\" /* TriggerOpTypes.CLEAR */),\n        forEach: createForEach(true, true)\n    };\n    const iteratorMethods = ['keys', 'values', 'entries', Symbol.iterator];\n    iteratorMethods.forEach(method => {\n        mutableInstrumentations[method] = createIterableMethod(method, false, false);\n        readonlyInstrumentations[method] = createIterableMethod(method, true, false);\n        shallowInstrumentations[method] = createIterableMethod(method, false, true);\n        shallowReadonlyInstrumentations[method] = createIterableMethod(method, true, true);\n    });\n    return [\n        mutableInstrumentations,\n        readonlyInstrumentations,\n        shallowInstrumentations,\n        shallowReadonlyInstrumentations\n    ];\n}\nconst [mutableInstrumentations, readonlyInstrumentations, shallowInstrumentations, shallowReadonlyInstrumentations] = /* #__PURE__*/ createInstrumentations();\nfunction createInstrumentationGetter(isReadonly, shallow) {\n    const instrumentations = shallow\n        ? isReadonly\n            ? shallowReadonlyInstrumentations\n            : shallowInstrumentations\n        : isReadonly\n            ? readonlyInstrumentations\n            : mutableInstrumentations;\n    return (target, key, receiver) => {\n        if (key === \"__v_isReactive\" /* ReactiveFlags.IS_REACTIVE */) {\n            return !isReadonly;\n        }\n        else if (key === \"__v_isReadonly\" /* ReactiveFlags.IS_READONLY */) {\n            return isReadonly;\n        }\n        else if (key === \"__v_raw\" /* ReactiveFlags.RAW */) {\n            return target;\n        }\n        return Reflect.get(hasOwn(instrumentations, key) && key in target\n            ? instrumentations\n            : target, key, receiver);\n    };\n}\nconst mutableCollectionHandlers = {\n    get: /*#__PURE__*/ createInstrumentationGetter(false, false)\n};\nconst shallowCollectionHandlers = {\n    get: /*#__PURE__*/ createInstrumentationGetter(false, true)\n};\nconst readonlyCollectionHandlers = {\n    get: /*#__PURE__*/ createInstrumentationGetter(true, false)\n};\nconst shallowReadonlyCollectionHandlers = {\n    get: /*#__PURE__*/ createInstrumentationGetter(true, true)\n};\nfunction checkIdentityKeys(target, has, key) {\n    const rawKey = toRaw(key);\n    if (rawKey !== key && has.call(target, rawKey)) {\n        const type = toRawType(target);\n        console.warn(`Reactive ${type} contains both the raw and reactive ` +\n            `versions of the same object${type === `Map` ? ` as keys` : ``}, ` +\n            `which can lead to inconsistencies. ` +\n            `Avoid differentiating between the raw and reactive versions ` +\n            `of an object and only use the reactive version if possible.`);\n    }\n}\n\nconst reactiveMap = new WeakMap();\nconst shallowReactiveMap = new WeakMap();\nconst readonlyMap = new WeakMap();\nconst shallowReadonlyMap = new WeakMap();\nfunction targetTypeMap(rawType) {\n    switch (rawType) {\n        case 'Object':\n        case 'Array':\n            return 1 /* TargetType.COMMON */;\n        case 'Map':\n        case 'Set':\n        case 'WeakMap':\n        case 'WeakSet':\n            return 2 /* TargetType.COLLECTION */;\n        default:\n            return 0 /* TargetType.INVALID */;\n    }\n}\nfunction getTargetType(value) {\n    return value[\"__v_skip\" /* ReactiveFlags.SKIP */] || !Object.isExtensible(value)\n        ? 0 /* TargetType.INVALID */\n        : targetTypeMap(toRawType(value));\n}\nfunction reactive(target) {\n    // if trying to observe a readonly proxy, return the readonly version.\n    if (isReadonly(target)) {\n        return target;\n    }\n    return createReactiveObject(target, false, mutableHandlers, mutableCollectionHandlers, reactiveMap);\n}\n/**\n * Return a shallowly-reactive copy of the original object, where only the root\n * level properties are reactive. It also does not auto-unwrap refs (even at the\n * root level).\n */\nfunction shallowReactive(target) {\n    return createReactiveObject(target, false, shallowReactiveHandlers, shallowCollectionHandlers, shallowReactiveMap);\n}\n/**\n * Creates a readonly copy of the original object. Note the returned copy is not\n * made reactive, but `readonly` can be called on an already reactive object.\n */\nfunction readonly(target) {\n    return createReactiveObject(target, true, readonlyHandlers, readonlyCollectionHandlers, readonlyMap);\n}\n/**\n * Returns a reactive-copy of the original object, where only the root level\n * properties are readonly, and does NOT unwrap refs nor recursively convert\n * returned properties.\n * This is used for creating the props proxy object for stateful components.\n */\nfunction shallowReadonly(target) {\n    return createReactiveObject(target, true, shallowReadonlyHandlers, shallowReadonlyCollectionHandlers, shallowReadonlyMap);\n}\nfunction createReactiveObject(target, isReadonly, baseHandlers, collectionHandlers, proxyMap) {\n    if (!isObject(target)) {\n        if ((process.env.NODE_ENV !== 'production')) {\n            console.warn(`value cannot be made reactive: ${String(target)}`);\n        }\n        return target;\n    }\n    // target is already a Proxy, return it.\n    // exception: calling readonly() on a reactive object\n    if (target[\"__v_raw\" /* ReactiveFlags.RAW */] &&\n        !(isReadonly && target[\"__v_isReactive\" /* ReactiveFlags.IS_REACTIVE */])) {\n        return target;\n    }\n    // target already has corresponding Proxy\n    const existingProxy = proxyMap.get(target);\n    if (existingProxy) {\n        return existingProxy;\n    }\n    // only specific value types can be observed.\n    const targetType = getTargetType(target);\n    if (targetType === 0 /* TargetType.INVALID */) {\n        return target;\n    }\n    const proxy = new Proxy(target, targetType === 2 /* TargetType.COLLECTION */ ? collectionHandlers : baseHandlers);\n    proxyMap.set(target, proxy);\n    return proxy;\n}\nfunction isReactive(value) {\n    if (isReadonly(value)) {\n        return isReactive(value[\"__v_raw\" /* ReactiveFlags.RAW */]);\n    }\n    return !!(value && value[\"__v_isReactive\" /* ReactiveFlags.IS_REACTIVE */]);\n}\nfunction isReadonly(value) {\n    return !!(value && value[\"__v_isReadonly\" /* ReactiveFlags.IS_READONLY */]);\n}\nfunction isShallow(value) {\n    return !!(value && value[\"__v_isShallow\" /* ReactiveFlags.IS_SHALLOW */]);\n}\nfunction isProxy(value) {\n    return isReactive(value) || isReadonly(value);\n}\nfunction toRaw(observed) {\n    const raw = observed && observed[\"__v_raw\" /* ReactiveFlags.RAW */];\n    return raw ? toRaw(raw) : observed;\n}\nfunction markRaw(value) {\n    def(value, \"__v_skip\" /* ReactiveFlags.SKIP */, true);\n    return value;\n}\nconst toReactive = (value) => isObject(value) ? reactive(value) : value;\nconst toReadonly = (value) => isObject(value) ? readonly(value) : value;\n\nfunction trackRefValue(ref) {\n    if (shouldTrack && activeEffect) {\n        ref = toRaw(ref);\n        if ((process.env.NODE_ENV !== 'production')) {\n            trackEffects(ref.dep || (ref.dep = createDep()), {\n                target: ref,\n                type: \"get\" /* TrackOpTypes.GET */,\n                key: 'value'\n            });\n        }\n        else {\n            trackEffects(ref.dep || (ref.dep = createDep()));\n        }\n    }\n}\nfunction triggerRefValue(ref, newVal) {\n    ref = toRaw(ref);\n    const dep = ref.dep;\n    if (dep) {\n        if ((process.env.NODE_ENV !== 'production')) {\n            triggerEffects(dep, {\n                target: ref,\n                type: \"set\" /* TriggerOpTypes.SET */,\n                key: 'value',\n                newValue: newVal\n            });\n        }\n        else {\n            triggerEffects(dep);\n        }\n    }\n}\nfunction isRef(r) {\n    return !!(r && r.__v_isRef === true);\n}\nfunction ref(value) {\n    return createRef(value, false);\n}\nfunction shallowRef(value) {\n    return createRef(value, true);\n}\nfunction createRef(rawValue, shallow) {\n    if (isRef(rawValue)) {\n        return rawValue;\n    }\n    return new RefImpl(rawValue, shallow);\n}\nclass RefImpl {\n    constructor(value, __v_isShallow) {\n        this.__v_isShallow = __v_isShallow;\n        this.dep = undefined;\n        this.__v_isRef = true;\n        this._rawValue = __v_isShallow ? value : toRaw(value);\n        this._value = __v_isShallow ? value : toReactive(value);\n    }\n    get value() {\n        trackRefValue(this);\n        return this._value;\n    }\n    set value(newVal) {\n        const useDirectValue = this.__v_isShallow || isShallow(newVal) || isReadonly(newVal);\n        newVal = useDirectValue ? newVal : toRaw(newVal);\n        if (hasChanged(newVal, this._rawValue)) {\n            this._rawValue = newVal;\n            this._value = useDirectValue ? newVal : toReactive(newVal);\n            triggerRefValue(this, newVal);\n        }\n    }\n}\nfunction triggerRef(ref) {\n    triggerRefValue(ref, (process.env.NODE_ENV !== 'production') ? ref.value : void 0);\n}\nfunction unref(ref) {\n    return isRef(ref) ? ref.value : ref;\n}\nconst shallowUnwrapHandlers = {\n    get: (target, key, receiver) => unref(Reflect.get(target, key, receiver)),\n    set: (target, key, value, receiver) => {\n        const oldValue = target[key];\n        if (isRef(oldValue) && !isRef(value)) {\n            oldValue.value = value;\n            return true;\n        }\n        else {\n            return Reflect.set(target, key, value, receiver);\n        }\n    }\n};\nfunction proxyRefs(objectWithRefs) {\n    return isReactive(objectWithRefs)\n        ? objectWithRefs\n        : new Proxy(objectWithRefs, shallowUnwrapHandlers);\n}\nclass CustomRefImpl {\n    constructor(factory) {\n        this.dep = undefined;\n        this.__v_isRef = true;\n        const { get, set } = factory(() => trackRefValue(this), () => triggerRefValue(this));\n        this._get = get;\n        this._set = set;\n    }\n    get value() {\n        return this._get();\n    }\n    set value(newVal) {\n        this._set(newVal);\n    }\n}\nfunction customRef(factory) {\n    return new CustomRefImpl(factory);\n}\nfunction toRefs(object) {\n    if ((process.env.NODE_ENV !== 'production') && !isProxy(object)) {\n        console.warn(`toRefs() expects a reactive object but received a plain one.`);\n    }\n    const ret = isArray(object) ? new Array(object.length) : {};\n    for (const key in object) {\n        ret[key] = toRef(object, key);\n    }\n    return ret;\n}\nclass ObjectRefImpl {\n    constructor(_object, _key, _defaultValue) {\n        this._object = _object;\n        this._key = _key;\n        this._defaultValue = _defaultValue;\n        this.__v_isRef = true;\n    }\n    get value() {\n        const val = this._object[this._key];\n        return val === undefined ? this._defaultValue : val;\n    }\n    set value(newVal) {\n        this._object[this._key] = newVal;\n    }\n    get dep() {\n        return getDepFromReactive(toRaw(this._object), this._key);\n    }\n}\nfunction toRef(object, key, defaultValue) {\n    const val = object[key];\n    return isRef(val)\n        ? val\n        : new ObjectRefImpl(object, key, defaultValue);\n}\n\nvar _a$1;\nclass ComputedRefImpl {\n    constructor(getter, _setter, isReadonly, isSSR) {\n        this._setter = _setter;\n        this.dep = undefined;\n        this.__v_isRef = true;\n        this[_a$1] = false;\n        this._dirty = true;\n        this.effect = new ReactiveEffect(getter, () => {\n            if (!this._dirty) {\n                this._dirty = true;\n                triggerRefValue(this);\n            }\n        });\n        this.effect.computed = this;\n        this.effect.active = this._cacheable = !isSSR;\n        this[\"__v_isReadonly\" /* ReactiveFlags.IS_READONLY */] = isReadonly;\n    }\n    get value() {\n        // the computed ref may get wrapped by other proxies e.g. readonly() #3376\n        const self = toRaw(this);\n        trackRefValue(self);\n        if (self._dirty || !self._cacheable) {\n            self._dirty = false;\n            self._value = self.effect.run();\n        }\n        return self._value;\n    }\n    set value(newValue) {\n        this._setter(newValue);\n    }\n}\n_a$1 = \"__v_isReadonly\" /* ReactiveFlags.IS_READONLY */;\nfunction computed(getterOrOptions, debugOptions, isSSR = false) {\n    let getter;\n    let setter;\n    const onlyGetter = isFunction(getterOrOptions);\n    if (onlyGetter) {\n        getter = getterOrOptions;\n        setter = (process.env.NODE_ENV !== 'production')\n            ? () => {\n                console.warn('Write operation failed: computed value is readonly');\n            }\n            : NOOP;\n    }\n    else {\n        getter = getterOrOptions.get;\n        setter = getterOrOptions.set;\n    }\n    const cRef = new ComputedRefImpl(getter, setter, onlyGetter || !setter, isSSR);\n    if ((process.env.NODE_ENV !== 'production') && debugOptions && !isSSR) {\n        cRef.effect.onTrack = debugOptions.onTrack;\n        cRef.effect.onTrigger = debugOptions.onTrigger;\n    }\n    return cRef;\n}\n\nvar _a;\nconst tick = /*#__PURE__*/ Promise.resolve();\nconst queue = [];\nlet queued = false;\nconst scheduler = (fn) => {\n    queue.push(fn);\n    if (!queued) {\n        queued = true;\n        tick.then(flush);\n    }\n};\nconst flush = () => {\n    for (let i = 0; i < queue.length; i++) {\n        queue[i]();\n    }\n    queue.length = 0;\n    queued = false;\n};\nclass DeferredComputedRefImpl {\n    constructor(getter) {\n        this.dep = undefined;\n        this._dirty = true;\n        this.__v_isRef = true;\n        this[_a] = true;\n        let compareTarget;\n        let hasCompareTarget = false;\n        let scheduled = false;\n        this.effect = new ReactiveEffect(getter, (computedTrigger) => {\n            if (this.dep) {\n                if (computedTrigger) {\n                    compareTarget = this._value;\n                    hasCompareTarget = true;\n                }\n                else if (!scheduled) {\n                    const valueToCompare = hasCompareTarget ? compareTarget : this._value;\n                    scheduled = true;\n                    hasCompareTarget = false;\n                    scheduler(() => {\n                        if (this.effect.active && this._get() !== valueToCompare) {\n                            triggerRefValue(this);\n                        }\n                        scheduled = false;\n                    });\n                }\n                // chained upstream computeds are notified synchronously to ensure\n                // value invalidation in case of sync access; normal effects are\n                // deferred to be triggered in scheduler.\n                for (const e of this.dep) {\n                    if (e.computed instanceof DeferredComputedRefImpl) {\n                        e.scheduler(true /* computedTrigger */);\n                    }\n                }\n            }\n            this._dirty = true;\n        });\n        this.effect.computed = this;\n    }\n    _get() {\n        if (this._dirty) {\n            this._dirty = false;\n            return (this._value = this.effect.run());\n        }\n        return this._value;\n    }\n    get value() {\n        trackRefValue(this);\n        // the computed ref may get wrapped by other proxies e.g. readonly() #3376\n        return toRaw(this)._get();\n    }\n}\n_a = \"__v_isReadonly\" /* ReactiveFlags.IS_READONLY */;\nfunction deferredComputed(getter) {\n    return new DeferredComputedRefImpl(getter);\n}\n\nexport { EffectScope, ITERATE_KEY, ReactiveEffect, computed, customRef, deferredComputed, effect, effectScope, enableTracking, getCurrentScope, isProxy, isReactive, isReadonly, isRef, isShallow, markRaw, onScopeDispose, pauseTracking, proxyRefs, reactive, readonly, ref, resetTracking, shallowReactive, shallowReadonly, shallowRef, stop, toRaw, toRef, toRefs, track, trigger, triggerRef, unref };\n/README.md\u0004\u0019# @vue/reactivity\n\n## Usage Note\n\nThis package is inlined into Global & Browser ESM builds of user-facing renderers (e.g. `@vue/runtime-dom`), but also published as a package that can be used standalone. The standalone build should not be used alongside a pre-bundled build of a user-facing renderer, as they will have different internal storage for reactivity connections. A user-facing renderer should re-export all APIs from this package.\n\nFor full exposed APIs, see `src/index.ts`. You can also run `pnpm build reactivity --types` from repo root, which will generate an API report at `temp/reactivity.api.md`.\n\n## Credits\n\nThe implementation of this module is inspired by the following prior art in the JavaScript ecosystem:\n\n- [Meteor Tracker](https://docs.meteor.com/api/tracker.html)\n- [nx-js/observer-util](https://github.com/nx-js/observer-util)\n- [salesforce/observable-membrane](https://github.com/salesforce/observable-membrane)\n\n## Caveats\n\n- Built-in objects are not observed except for `Array`, `Map`, `WeakMap`, `Set` and `WeakSet`.\n/dist/reactivity.global.jsŶvar VueReactivity = (function (exports) {\n  'use strict';\n\n  /**\n   * Make a map and return a function for checking if a key\n   * is in that map.\n   * IMPORTANT: all calls of this function must be prefixed with\n   * \\/\\*#\\_\\_PURE\\_\\_\\*\\/\n   * So that rollup can tree-shake them if necessary.\n   */\n  function makeMap(str, expectsLowerCase) {\n      const map = Object.create(null);\n      const list = str.split(',');\n      for (let i = 0; i < list.length; i++) {\n          map[list[i]] = true;\n      }\n      return expectsLowerCase ? val => !!map[val.toLowerCase()] : val => !!map[val];\n  }\n\n  const extend = Object.assign;\n  const hasOwnProperty$1 = Object.prototype.hasOwnProperty;\n  const hasOwn = (val, key) => hasOwnProperty$1.call(val, key);\n  const isArray = Array.isArray;\n  const isMap = (val) => toTypeString(val) === '[object Map]';\n  const isFunction = (val) => typeof val === 'function';\n  const isString = (val) => typeof val === 'string';\n  const isSymbol = (val) => typeof val === 'symbol';\n  const isObject = (val) => val !== null && typeof val === 'object';\n  const objectToString = Object.prototype.toString;\n  const toTypeString = (value) => objectToString.call(value);\n  const toRawType = (value) => {\n      // extract \"RawType\" from strings like \"[object RawType]\"\n      return toTypeString(value).slice(8, -1);\n  };\n  const isIntegerKey = (key) => isString(key) &&\n      key !== 'NaN' &&\n      key[0] !== '-' &&\n      '' + parseInt(key, 10) === key;\n  const cacheStringFunction = (fn) => {\n      const cache = Object.create(null);\n      return ((str) => {\n          const hit = cache[str];\n          return hit || (cache[str] = fn(str));\n      });\n  };\n  /**\n   * @private\n   */\n  const capitalize = cacheStringFunction((str) => str.charAt(0).toUpperCase() + str.slice(1));\n  // compare whether a value has changed, accounting for NaN.\n  const hasChanged = (value, oldValue) => !Object.is(value, oldValue);\n  const def = (obj, key, value) => {\n      Object.defineProperty(obj, key, {\n          configurable: true,\n          enumerable: false,\n          value\n      });\n  };\n\n  function warn(msg, ...args) {\n      console.warn(`[Vue warn] ${msg}`, ...args);\n  }\n\n  let activeEffectScope;\n  class EffectScope {\n      constructor(detached = false) {\n          this.detached = detached;\n          /**\n           * @internal\n           */\n          this._active = true;\n          /**\n           * @internal\n           */\n          this.effects = [];\n          /**\n           * @internal\n           */\n          this.cleanups = [];\n          this.parent = activeEffectScope;\n          if (!detached && activeEffectScope) {\n              this.index =\n                  (activeEffectScope.scopes || (activeEffectScope.scopes = [])).push(this) - 1;\n          }\n      }\n      get active() {\n          return this._active;\n      }\n      run(fn) {\n          if (this._active) {\n              const currentEffectScope = activeEffectScope;\n              try {\n                  activeEffectScope = this;\n                  return fn();\n              }\n              finally {\n                  activeEffectScope = currentEffectScope;\n              }\n          }\n          else {\n              warn(`cannot run an inactive effect scope.`);\n          }\n      }\n      /**\n       * This should only be called on non-detached scopes\n       * @internal\n       */\n      on() {\n          activeEffectScope = this;\n      }\n      /**\n       * This should only be called on non-detached scopes\n       * @internal\n       */\n      off() {\n          activeEffectScope = this.parent;\n      }\n      stop(fromParent) {\n          if (this._active) {\n              let i, l;\n              for (i = 0, l = this.effects.length; i < l; i++) {\n                  this.effects[i].stop();\n              }\n              for (i = 0, l = this.cleanups.length; i < l; i++) {\n                  this.cleanups[i]();\n              }\n              if (this.scopes) {\n                  for (i = 0, l = this.scopes.length; i < l; i++) {\n                      this.scopes[i].stop(true);\n                  }\n              }\n              // nested scope, dereference from parent to avoid memory leaks\n              if (!this.detached && this.parent && !fromParent) {\n                  // optimized O(1) removal\n                  const last = this.parent.scopes.pop();\n                  if (last && last !== this) {\n                      this.parent.scopes[this.index] = last;\n                      last.index = this.index;\n                  }\n              }\n              this.parent = undefined;\n              this._active = false;\n          }\n      }\n  }\n  function effectScope(detached) {\n      return new EffectScope(detached);\n  }\n  function recordEffectScope(effect, scope = activeEffectScope) {\n      if (scope && scope.active) {\n          scope.effects.push(effect);\n      }\n  }\n  function getCurrentScope() {\n      return activeEffectScope;\n  }\n  function onScopeDispose(fn) {\n      if (activeEffectScope) {\n          activeEffectScope.cleanups.push(fn);\n      }\n      else {\n          warn(`onScopeDispose() is called when there is no active effect scope` +\n              ` to be associated with.`);\n      }\n  }\n\n  const createDep = (effects) => {\n      const dep = new Set(effects);\n      dep.w = 0;\n      dep.n = 0;\n      return dep;\n  };\n  const wasTracked = (dep) => (dep.w & trackOpBit) > 0;\n  const newTracked = (dep) => (dep.n & trackOpBit) > 0;\n  const initDepMarkers = ({ deps }) => {\n      if (deps.length) {\n          for (let i = 0; i < deps.length; i++) {\n              deps[i].w |= trackOpBit; // set was tracked\n          }\n      }\n  };\n  const finalizeDepMarkers = (effect) => {\n      const { deps } = effect;\n      if (deps.length) {\n          let ptr = 0;\n          for (let i = 0; i < deps.length; i++) {\n              const dep = deps[i];\n              if (wasTracked(dep) && !newTracked(dep)) {\n                  dep.delete(effect);\n              }\n              else {\n                  deps[ptr++] = dep;\n              }\n              // clear bits\n              dep.w &= ~trackOpBit;\n              dep.n &= ~trackOpBit;\n          }\n          deps.length = ptr;\n      }\n  };\n\n  const targetMap = new WeakMap();\n  // The number of effects currently being tracked recursively.\n  let effectTrackDepth = 0;\n  let trackOpBit = 1;\n  /**\n   * The bitwise track markers support at most 30 levels of recursion.\n   * This value is chosen to enable modern JS engines to use a SMI on all platforms.\n   * When recursion depth is greater, fall back to using a full cleanup.\n   */\n  const maxMarkerBits = 30;\n  let activeEffect;\n  const ITERATE_KEY = Symbol('iterate' );\n  const MAP_KEY_ITERATE_KEY = Symbol('Map key iterate' );\n  class ReactiveEffect {\n      constructor(fn, scheduler = null, scope) {\n          this.fn = fn;\n          this.scheduler = scheduler;\n          this.active = true;\n          this.deps = [];\n          this.parent = undefined;\n          recordEffectScope(this, scope);\n      }\n      run() {\n          if (!this.active) {\n              return this.fn();\n          }\n          let parent = activeEffect;\n          let lastShouldTrack = shouldTrack;\n          while (parent) {\n              if (parent === this) {\n                  return;\n              }\n              parent = parent.parent;\n          }\n          try {\n              this.parent = activeEffect;\n              activeEffect = this;\n              shouldTrack = true;\n              trackOpBit = 1 << ++effectTrackDepth;\n              if (effectTrackDepth <= maxMarkerBits) {\n                  initDepMarkers(this);\n              }\n              else {\n                  cleanupEffect(this);\n              }\n              return this.fn();\n          }\n          finally {\n              if (effectTrackDepth <= maxMarkerBits) {\n                  finalizeDepMarkers(this);\n              }\n              trackOpBit = 1 << --effectTrackDepth;\n              activeEffect = this.parent;\n              shouldTrack = lastShouldTrack;\n              this.parent = undefined;\n              if (this.deferStop) {\n                  this.stop();\n              }\n          }\n      }\n      stop() {\n          // stopped while running itself - defer the cleanup\n          if (activeEffect === this) {\n              this.deferStop = true;\n          }\n          else if (this.active) {\n              cleanupEffect(this);\n              if (this.onStop) {\n                  this.onStop();\n              }\n              this.active = false;\n          }\n      }\n  }\n  function cleanupEffect(effect) {\n      const { deps } = effect;\n      if (deps.length) {\n          for (let i = 0; i < deps.length; i++) {\n              deps[i].delete(effect);\n          }\n          deps.length = 0;\n      }\n  }\n  function effect(fn, options) {\n      if (fn.effect) {\n          fn = fn.effect.fn;\n      }\n      const _effect = new ReactiveEffect(fn);\n      if (options) {\n          extend(_effect, options);\n          if (options.scope)\n              recordEffectScope(_effect, options.scope);\n      }\n      if (!options || !options.lazy) {\n          _effect.run();\n      }\n      const runner = _effect.run.bind(_effect);\n      runner.effect = _effect;\n      return runner;\n  }\n  function stop(runner) {\n      runner.effect.stop();\n  }\n  let shouldTrack = true;\n  const trackStack = [];\n  function pauseTracking() {\n      trackStack.push(shouldTrack);\n      shouldTrack = false;\n  }\n  function enableTracking() {\n      trackStack.push(shouldTrack);\n      shouldTrack = true;\n  }\n  function resetTracking() {\n      const last = trackStack.pop();\n      shouldTrack = last === undefined ? true : last;\n  }\n  function track(target, type, key) {\n      if (shouldTrack && activeEffect) {\n          let depsMap = targetMap.get(target);\n          if (!depsMap) {\n              targetMap.set(target, (depsMap = new Map()));\n          }\n          let dep = depsMap.get(key);\n          if (!dep) {\n              depsMap.set(key, (dep = createDep()));\n          }\n          const eventInfo = { effect: activeEffect, target, type, key }\n              ;\n          trackEffects(dep, eventInfo);\n      }\n  }\n  function trackEffects(dep, debuggerEventExtraInfo) {\n      let shouldTrack = false;\n      if (effectTrackDepth <= maxMarkerBits) {\n          if (!newTracked(dep)) {\n              dep.n |= trackOpBit; // set newly tracked\n              shouldTrack = !wasTracked(dep);\n          }\n      }\n      else {\n          // Full cleanup mode.\n          shouldTrack = !dep.has(activeEffect);\n      }\n      if (shouldTrack) {\n          dep.add(activeEffect);\n          activeEffect.deps.push(dep);\n          if (activeEffect.onTrack) {\n              activeEffect.onTrack(Object.assign({ effect: activeEffect }, debuggerEventExtraInfo));\n          }\n      }\n  }\n  function trigger(target, type, key, newValue, oldValue, oldTarget) {\n      const depsMap = targetMap.get(target);\n      if (!depsMap) {\n          // never been tracked\n          return;\n      }\n      let deps = [];\n      if (type === \"clear\" /* TriggerOpTypes.CLEAR */) {\n          // collection being cleared\n          // trigger all effects for target\n          deps = [...depsMap.values()];\n      }\n      else if (key === 'length' && isArray(target)) {\n          const newLength = Number(newValue);\n          depsMap.forEach((dep, key) => {\n              if (key === 'length' || key >= newLength) {\n                  deps.push(dep);\n              }\n          });\n      }\n      else {\n          // schedule runs for SET | ADD | DELETE\n          if (key !== void 0) {\n              deps.push(depsMap.get(key));\n          }\n          // also run for iteration key on ADD | DELETE | Map.SET\n          switch (type) {\n              case \"add\" /* TriggerOpTypes.ADD */:\n                  if (!isArray(target)) {\n                      deps.push(depsMap.get(ITERATE_KEY));\n                      if (isMap(target)) {\n                          deps.push(depsMap.get(MAP_KEY_ITERATE_KEY));\n                      }\n                  }\n                  else if (isIntegerKey(key)) {\n                      // new index added to array -> length changes\n                      deps.push(depsMap.get('length'));\n                  }\n                  break;\n              case \"delete\" /* TriggerOpTypes.DELETE */:\n                  if (!isArray(target)) {\n                      deps.push(depsMap.get(ITERATE_KEY));\n                      if (isMap(target)) {\n                          deps.push(depsMap.get(MAP_KEY_ITERATE_KEY));\n                      }\n                  }\n                  break;\n              case \"set\" /* TriggerOpTypes.SET */:\n                  if (isMap(target)) {\n                      deps.push(depsMap.get(ITERATE_KEY));\n                  }\n                  break;\n          }\n      }\n      const eventInfo = { target, type, key, newValue, oldValue, oldTarget }\n          ;\n      if (deps.length === 1) {\n          if (deps[0]) {\n              {\n                  triggerEffects(deps[0], eventInfo);\n              }\n          }\n      }\n      else {\n          const effects = [];\n          for (const dep of deps) {\n              if (dep) {\n                  effects.push(...dep);\n              }\n          }\n          {\n              triggerEffects(createDep(effects), eventInfo);\n          }\n      }\n  }\n  function triggerEffects(dep, debuggerEventExtraInfo) {\n      // spread into array for stabilization\n      const effects = isArray(dep) ? dep : [...dep];\n      for (const effect of effects) {\n          if (effect.computed) {\n              triggerEffect(effect, debuggerEventExtraInfo);\n          }\n      }\n      for (const effect of effects) {\n          if (!effect.computed) {\n              triggerEffect(effect, debuggerEventExtraInfo);\n          }\n      }\n  }\n  function triggerEffect(effect, debuggerEventExtraInfo) {\n      if (effect !== activeEffect || effect.allowRecurse) {\n          if (effect.onTrigger) {\n              effect.onTrigger(extend({ effect }, debuggerEventExtraInfo));\n          }\n          if (effect.scheduler) {\n              effect.scheduler();\n          }\n          else {\n              effect.run();\n          }\n      }\n  }\n  function getDepFromReactive(object, key) {\n      var _a;\n      return (_a = targetMap.get(object)) === null || _a === void 0 ? void 0 : _a.get(key);\n  }\n\n  const isNonTrackableKeys = /*#__PURE__*/ makeMap(`__proto__,__v_isRef,__isVue`);\n  const builtInSymbols = new Set(\n  /*#__PURE__*/\n  Object.getOwnPropertyNames(Symbol)\n      // ios10.x Object.getOwnPropertyNames(Symbol) can enumerate 'arguments' and 'caller'\n      // but accessing them on Symbol leads to TypeError because Symbol is a strict mode\n      // function\n      .filter(key => key !== 'arguments' && key !== 'caller')\n      .map(key => Symbol[key])\n      .filter(isSymbol));\n  const get$1 = /*#__PURE__*/ createGetter();\n  const shallowGet = /*#__PURE__*/ createGetter(false, true);\n  const readonlyGet = /*#__PURE__*/ createGetter(true);\n  const shallowReadonlyGet = /*#__PURE__*/ createGetter(true, true);\n  const arrayInstrumentations = /*#__PURE__*/ createArrayInstrumentations();\n  function createArrayInstrumentations() {\n      const instrumentations = {};\n      ['includes', 'indexOf', 'lastIndexOf'].forEach(key => {\n          instrumentations[key] = function (...args) {\n              const arr = toRaw(this);\n              for (let i = 0, l = this.length; i < l; i++) {\n                  track(arr, \"get\" /* TrackOpTypes.GET */, i + '');\n              }\n              // we run the method using the original args first (which may be reactive)\n              const res = arr[key](...args);\n              if (res === -1 || res === false) {\n                  // if that didn't work, run it again using raw values.\n                  return arr[key](...args.map(toRaw));\n              }\n              else {\n                  return res;\n              }\n          };\n      });\n      ['push', 'pop', 'shift', 'unshift', 'splice'].forEach(key => {\n          instrumentations[key] = function (...args) {\n              pauseTracking();\n              const res = toRaw(this)[key].apply(this, args);\n              resetTracking();\n              return res;\n          };\n      });\n      return instrumentations;\n  }\n  function hasOwnProperty(key) {\n      const obj = toRaw(this);\n      track(obj, \"has\" /* TrackOpTypes.HAS */, key);\n      return obj.hasOwnProperty(key);\n  }\n  function createGetter(isReadonly = false, shallow = false) {\n      return function get(target, key, receiver) {\n          if (key === \"__v_isReactive\" /* ReactiveFlags.IS_REACTIVE */) {\n              return !isReadonly;\n          }\n          else if (key === \"__v_isReadonly\" /* ReactiveFlags.IS_READONLY */) {\n              return isReadonly;\n          }\n          else if (key === \"__v_isShallow\" /* ReactiveFlags.IS_SHALLOW */) {\n              return shallow;\n          }\n          else if (key === \"__v_raw\" /* ReactiveFlags.RAW */ &&\n              receiver ===\n                  (isReadonly\n                      ? shallow\n                          ? shallowReadonlyMap\n                          : readonlyMap\n                      : shallow\n                          ? shallowReactiveMap\n                          : reactiveMap).get(target)) {\n              return target;\n          }\n          const targetIsArray = isArray(target);\n          if (!isReadonly) {\n              if (targetIsArray && hasOwn(arrayInstrumentations, key)) {\n                  return Reflect.get(arrayInstrumentations, key, receiver);\n              }\n              if (key === 'hasOwnProperty') {\n                  return hasOwnProperty;\n              }\n          }\n          const res = Reflect.get(target, key, receiver);\n          if (isSymbol(key) ? builtInSymbols.has(key) : isNonTrackableKeys(key)) {\n              return res;\n          }\n          if (!isReadonly) {\n              track(target, \"get\" /* TrackOpTypes.GET */, key);\n          }\n          if (shallow) {\n              return res;\n          }\n          if (isRef(res)) {\n              // ref unwrapping - skip unwrap for Array + integer key.\n              return targetIsArray && isIntegerKey(key) ? res : res.value;\n          }\n          if (isObject(res)) {\n              // Convert returned value into a proxy as well. we do the isObject check\n              // here to avoid invalid value warning. Also need to lazy access readonly\n              // and reactive here to avoid circular dependency.\n              return isReadonly ? readonly(res) : reactive(res);\n          }\n          return res;\n      };\n  }\n  const set$1 = /*#__PURE__*/ createSetter();\n  const shallowSet = /*#__PURE__*/ createSetter(true);\n  function createSetter(shallow = false) {\n      return function set(target, key, value, receiver) {\n          let oldValue = target[key];\n          if (isReadonly(oldValue) && isRef(oldValue) && !isRef(value)) {\n              return false;\n          }\n          if (!shallow) {\n              if (!isShallow(value) && !isReadonly(value)) {\n                  oldValue = toRaw(oldValue);\n                  value = toRaw(value);\n              }\n              if (!isArray(target) && isRef(oldValue) && !isRef(value)) {\n                  oldValue.value = value;\n                  return true;\n              }\n          }\n          const hadKey = isArray(target) && isIntegerKey(key)\n              ? Number(key) < target.length\n              : hasOwn(target, key);\n          const result = Reflect.set(target, key, value, receiver);\n          // don't trigger if target is something up in the prototype chain of original\n          if (target === toRaw(receiver)) {\n              if (!hadKey) {\n                  trigger(target, \"add\" /* TriggerOpTypes.ADD */, key, value);\n              }\n              else if (hasChanged(value, oldValue)) {\n                  trigger(target, \"set\" /* TriggerOpTypes.SET */, key, value, oldValue);\n              }\n          }\n          return result;\n      };\n  }\n  function deleteProperty(target, key) {\n      const hadKey = hasOwn(target, key);\n      const oldValue = target[key];\n      const result = Reflect.deleteProperty(target, key);\n      if (result && hadKey) {\n          trigger(target, \"delete\" /* TriggerOpTypes.DELETE */, key, undefined, oldValue);\n      }\n      return result;\n  }\n  function has$1(target, key) {\n      const result = Reflect.has(target, key);\n      if (!isSymbol(key) || !builtInSymbols.has(key)) {\n          track(target, \"has\" /* TrackOpTypes.HAS */, key);\n      }\n      return result;\n  }\n  function ownKeys(target) {\n      track(target, \"iterate\" /* TrackOpTypes.ITERATE */, isArray(target) ? 'length' : ITERATE_KEY);\n      return Reflect.ownKeys(target);\n  }\n  const mutableHandlers = {\n      get: get$1,\n      set: set$1,\n      deleteProperty,\n      has: has$1,\n      ownKeys\n  };\n  const readonlyHandlers = {\n      get: readonlyGet,\n      set(target, key) {\n          {\n              warn(`Set operation on key \"${String(key)}\" failed: target is readonly.`, target);\n          }\n          return true;\n      },\n      deleteProperty(target, key) {\n          {\n              warn(`Delete operation on key \"${String(key)}\" failed: target is readonly.`, target);\n          }\n          return true;\n      }\n  };\n  const shallowReactiveHandlers = /*#__PURE__*/ extend({}, mutableHandlers, {\n      get: shallowGet,\n      set: shallowSet\n  });\n  // Props handlers are special in the sense that it should not unwrap top-level\n  // refs (in order to allow refs to be explicitly passed down), but should\n  // retain the reactivity of the normal readonly object.\n  const shallowReadonlyHandlers = /*#__PURE__*/ extend({}, readonlyHandlers, {\n      get: shallowReadonlyGet\n  });\n\n  const toShallow = (value) => value;\n  const getProto = (v) => Reflect.getPrototypeOf(v);\n  function get(target, key, isReadonly = false, isShallow = false) {\n      // #1772: readonly(reactive(Map)) should return readonly + reactive version\n      // of the value\n      target = target[\"__v_raw\" /* ReactiveFlags.RAW */];\n      const rawTarget = toRaw(target);\n      const rawKey = toRaw(key);\n      if (!isReadonly) {\n          if (key !== rawKey) {\n              track(rawTarget, \"get\" /* TrackOpTypes.GET */, key);\n          }\n          track(rawTarget, \"get\" /* TrackOpTypes.GET */, rawKey);\n      }\n      const { has } = getProto(rawTarget);\n      const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive;\n      if (has.call(rawTarget, key)) {\n          return wrap(target.get(key));\n      }\n      else if (has.call(rawTarget, rawKey)) {\n          return wrap(target.get(rawKey));\n      }\n      else if (target !== rawTarget) {\n          // #3602 readonly(reactive(Map))\n          // ensure that the nested reactive `Map` can do tracking for itself\n          target.get(key);\n      }\n  }\n  function has(key, isReadonly = false) {\n      const target = this[\"__v_raw\" /* ReactiveFlags.RAW */];\n      const rawTarget = toRaw(target);\n      const rawKey = toRaw(key);\n      if (!isReadonly) {\n          if (key !== rawKey) {\n              track(rawTarget, \"has\" /* TrackOpTypes.HAS */, key);\n          }\n          track(rawTarget, \"has\" /* TrackOpTypes.HAS */, rawKey);\n      }\n      return key === rawKey\n          ? target.has(key)\n          : target.has(key) || target.has(rawKey);\n  }\n  function size(target, isReadonly = false) {\n      target = target[\"__v_raw\" /* ReactiveFlags.RAW */];\n      !isReadonly && track(toRaw(target), \"iterate\" /* TrackOpTypes.ITERATE */, ITERATE_KEY);\n      return Reflect.get(target, 'size', target);\n  }\n  function add(value) {\n      value = toRaw(value);\n      const target = toRaw(this);\n      const proto = getProto(target);\n      const hadKey = proto.has.call(target, value);\n      if (!hadKey) {\n          target.add(value);\n          trigger(target, \"add\" /* TriggerOpTypes.ADD */, value, value);\n      }\n      return this;\n  }\n  function set(key, value) {\n      value = toRaw(value);\n      const target = toRaw(this);\n      const { has, get } = getProto(target);\n      let hadKey = has.call(target, key);\n      if (!hadKey) {\n          key = toRaw(key);\n          hadKey = has.call(target, key);\n      }\n      else {\n          checkIdentityKeys(target, has, key);\n      }\n      const oldValue = get.call(target, key);\n      target.set(key, value);\n      if (!hadKey) {\n          trigger(target, \"add\" /* TriggerOpTypes.ADD */, key, value);\n      }\n      else if (hasChanged(value, oldValue)) {\n          trigger(target, \"set\" /* TriggerOpTypes.SET */, key, value, oldValue);\n      }\n      return this;\n  }\n  function deleteEntry(key) {\n      const target = toRaw(this);\n      const { has, get } = getProto(target);\n      let hadKey = has.call(target, key);\n      if (!hadKey) {\n          key = toRaw(key);\n          hadKey = has.call(target, key);\n      }\n      else {\n          checkIdentityKeys(target, has, key);\n      }\n      const oldValue = get ? get.call(target, key) : undefined;\n      // forward the operation before queueing reactions\n      const result = target.delete(key);\n      if (hadKey) {\n          trigger(target, \"delete\" /* TriggerOpTypes.DELETE */, key, undefined, oldValue);\n      }\n      return result;\n  }\n  function clear() {\n      const target = toRaw(this);\n      const hadItems = target.size !== 0;\n      const oldTarget = isMap(target)\n              ? new Map(target)\n              : new Set(target)\n          ;\n      // forward the operation before queueing reactions\n      const result = target.clear();\n      if (hadItems) {\n          trigger(target, \"clear\" /* TriggerOpTypes.CLEAR */, undefined, undefined, oldTarget);\n      }\n      return result;\n  }\n  function createForEach(isReadonly, isShallow) {\n      return function forEach(callback, thisArg) {\n          const observed = this;\n          const target = observed[\"__v_raw\" /* ReactiveFlags.RAW */];\n          const rawTarget = toRaw(target);\n          const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive;\n          !isReadonly && track(rawTarget, \"iterate\" /* TrackOpTypes.ITERATE */, ITERATE_KEY);\n          return target.forEach((value, key) => {\n              // important: make sure the callback is\n              // 1. invoked with the reactive map as `this` and 3rd arg\n              // 2. the value received should be a corresponding reactive/readonly.\n              return callback.call(thisArg, wrap(value), wrap(key), observed);\n          });\n      };\n  }\n  function createIterableMethod(method, isReadonly, isShallow) {\n      return function (...args) {\n          const target = this[\"__v_raw\" /* ReactiveFlags.RAW */];\n          const rawTarget = toRaw(target);\n          const targetIsMap = isMap(rawTarget);\n          const isPair = method === 'entries' || (method === Symbol.iterator && targetIsMap);\n          const isKeyOnly = method === 'keys' && targetIsMap;\n          const innerIterator = target[method](...args);\n          const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive;\n          !isReadonly &&\n              track(rawTarget, \"iterate\" /* TrackOpTypes.ITERATE */, isKeyOnly ? MAP_KEY_ITERATE_KEY : ITERATE_KEY);\n          // return a wrapped iterator which returns observed versions of the\n          // values emitted from the real iterator\n          return {\n              // iterator protocol\n              next() {\n                  const { value, done } = innerIterator.next();\n                  return done\n                      ? { value, done }\n                      : {\n                          value: isPair ? [wrap(value[0]), wrap(value[1])] : wrap(value),\n                          done\n                      };\n              },\n              // iterable protocol\n              [Symbol.iterator]() {\n                  return this;\n              }\n          };\n      };\n  }\n  function createReadonlyMethod(type) {\n      return function (...args) {\n          {\n              const key = args[0] ? `on key \"${args[0]}\" ` : ``;\n              console.warn(`${capitalize(type)} operation ${key}failed: target is readonly.`, toRaw(this));\n          }\n          return type === \"delete\" /* TriggerOpTypes.DELETE */ ? false : this;\n      };\n  }\n  function createInstrumentations() {\n      const mutableInstrumentations = {\n          get(key) {\n              return get(this, key);\n          },\n          get size() {\n              return size(this);\n          },\n          has,\n          add,\n          set,\n          delete: deleteEntry,\n          clear,\n          forEach: createForEach(false, false)\n      };\n      const shallowInstrumentations = {\n          get(key) {\n              return get(this, key, false, true);\n          },\n          get size() {\n              return size(this);\n          },\n          has,\n          add,\n          set,\n          delete: deleteEntry,\n          clear,\n          forEach: createForEach(false, true)\n      };\n      const readonlyInstrumentations = {\n          get(key) {\n              return get(this, key, true);\n          },\n          get size() {\n              return size(this, true);\n          },\n          has(key) {\n              return has.call(this, key, true);\n          },\n          add: createReadonlyMethod(\"add\" /* TriggerOpTypes.ADD */),\n          set: createReadonlyMethod(\"set\" /* TriggerOpTypes.SET */),\n          delete: createReadonlyMethod(\"delete\" /* TriggerOpTypes.DELETE */),\n          clear: createReadonlyMethod(\"clear\" /* TriggerOpTypes.CLEAR */),\n          forEach: createForEach(true, false)\n      };\n      const shallowReadonlyInstrumentations = {\n          get(key) {\n              return get(this, key, true, true);\n          },\n          get size() {\n              return size(this, true);\n          },\n          has(key) {\n              return has.call(this, key, true);\n          },\n          add: createReadonlyMethod(\"add\" /* TriggerOpTypes.ADD */),\n          set: createReadonlyMethod(\"set\" /* TriggerOpTypes.SET */),\n          delete: createReadonlyMethod(\"delete\" /* TriggerOpTypes.DELETE */),\n          clear: createReadonlyMethod(\"clear\" /* TriggerOpTypes.CLEAR */),\n          forEach: createForEach(true, true)\n      };\n      const iteratorMethods = ['keys', 'values', 'entries', Symbol.iterator];\n      iteratorMethods.forEach(method => {\n          mutableInstrumentations[method] = createIterableMethod(method, false, false);\n          readonlyInstrumentations[method] = createIterableMethod(method, true, false);\n          shallowInstrumentations[method] = createIterableMethod(method, false, true);\n          shallowReadonlyInstrumentations[method] = createIterableMethod(method, true, true);\n      });\n      return [\n          mutableInstrumentations,\n          readonlyInstrumentations,\n          shallowInstrumentations,\n          shallowReadonlyInstrumentations\n      ];\n  }\n  const [mutableInstrumentations, readonlyInstrumentations, shallowInstrumentations, shallowReadonlyInstrumentations] = /* #__PURE__*/ createInstrumentations();\n  function createInstrumentationGetter(isReadonly, shallow) {\n      const instrumentations = shallow\n          ? isReadonly\n              ? shallowReadonlyInstrumentations\n              : shallowInstrumentations\n          : isReadonly\n              ? readonlyInstrumentations\n              : mutableInstrumentations;\n      return (target, key, receiver) => {\n          if (key === \"__v_isReactive\" /* ReactiveFlags.IS_REACTIVE */) {\n              return !isReadonly;\n          }\n          else if (key === \"__v_isReadonly\" /* ReactiveFlags.IS_READONLY */) {\n              return isReadonly;\n          }\n          else if (key === \"__v_raw\" /* ReactiveFlags.RAW */) {\n              return target;\n          }\n          return Reflect.get(hasOwn(instrumentations, key) && key in target\n              ? instrumentations\n              : target, key, receiver);\n      };\n  }\n  const mutableCollectionHandlers = {\n      get: /*#__PURE__*/ createInstrumentationGetter(false, false)\n  };\n  const shallowCollectionHandlers = {\n      get: /*#__PURE__*/ createInstrumentationGetter(false, true)\n  };\n  const readonlyCollectionHandlers = {\n      get: /*#__PURE__*/ createInstrumentationGetter(true, false)\n  };\n  const shallowReadonlyCollectionHandlers = {\n      get: /*#__PURE__*/ createInstrumentationGetter(true, true)\n  };\n  function checkIdentityKeys(target, has, key) {\n      const rawKey = toRaw(key);\n      if (rawKey !== key && has.call(target, rawKey)) {\n          const type = toRawType(target);\n          console.warn(`Reactive ${type} contains both the raw and reactive ` +\n              `versions of the same object${type === `Map` ? ` as keys` : ``}, ` +\n              `which can lead to inconsistencies. ` +\n              `Avoid differentiating between the raw and reactive versions ` +\n              `of an object and only use the reactive version if possible.`);\n      }\n  }\n\n  const reactiveMap = new WeakMap();\n  const shallowReactiveMap = new WeakMap();\n  const readonlyMap = new WeakMap();\n  const shallowReadonlyMap = new WeakMap();\n  function targetTypeMap(rawType) {\n      switch (rawType) {\n          case 'Object':\n          case 'Array':\n              return 1 /* TargetType.COMMON */;\n          case 'Map':\n          case 'Set':\n          case 'WeakMap':\n          case 'WeakSet':\n              return 2 /* TargetType.COLLECTION */;\n          default:\n              return 0 /* TargetType.INVALID */;\n      }\n  }\n  function getTargetType(value) {\n      return value[\"__v_skip\" /* ReactiveFlags.SKIP */] || !Object.isExtensible(value)\n          ? 0 /* TargetType.INVALID */\n          : targetTypeMap(toRawType(value));\n  }\n  function reactive(target) {\n      // if trying to observe a readonly proxy, return the readonly version.\n      if (isReadonly(target)) {\n          return target;\n      }\n      return createReactiveObject(target, false, mutableHandlers, mutableCollectionHandlers, reactiveMap);\n  }\n  /**\n   * Return a shallowly-reactive copy of the original object, where only the root\n   * level properties are reactive. It also does not auto-unwrap refs (even at the\n   * root level).\n   */\n  function shallowReactive(target) {\n      return createReactiveObject(target, false, shallowReactiveHandlers, shallowCollectionHandlers, shallowReactiveMap);\n  }\n  /**\n   * Creates a readonly copy of the original object. Note the returned copy is not\n   * made reactive, but `readonly` can be called on an already reactive object.\n   */\n  function readonly(target) {\n      return createReactiveObject(target, true, readonlyHandlers, readonlyCollectionHandlers, readonlyMap);\n  }\n  /**\n   * Returns a reactive-copy of the original object, where only the root level\n   * properties are readonly, and does NOT unwrap refs nor recursively convert\n   * returned properties.\n   * This is used for creating the props proxy object for stateful components.\n   */\n  function shallowReadonly(target) {\n      return createReactiveObject(target, true, shallowReadonlyHandlers, shallowReadonlyCollectionHandlers, shallowReadonlyMap);\n  }\n  function createReactiveObject(target, isReadonly, baseHandlers, collectionHandlers, proxyMap) {\n      if (!isObject(target)) {\n          {\n              console.warn(`value cannot be made reactive: ${String(target)}`);\n          }\n          return target;\n      }\n      // target is already a Proxy, return it.\n      // exception: calling readonly() on a reactive object\n      if (target[\"__v_raw\" /* ReactiveFlags.RAW */] &&\n          !(isReadonly && target[\"__v_isReactive\" /* ReactiveFlags.IS_REACTIVE */])) {\n          return target;\n      }\n      // target already has corresponding Proxy\n      const existingProxy = proxyMap.get(target);\n      if (existingProxy) {\n          return existingProxy;\n      }\n      // only specific value types can be observed.\n      const targetType = getTargetType(target);\n      if (targetType === 0 /* TargetType.INVALID */) {\n          return target;\n      }\n      const proxy = new Proxy(target, targetType === 2 /* TargetType.COLLECTION */ ? collectionHandlers : baseHandlers);\n      proxyMap.set(target, proxy);\n      return proxy;\n  }\n  function isReactive(value) {\n      if (isReadonly(value)) {\n          return isReactive(value[\"__v_raw\" /* ReactiveFlags.RAW */]);\n      }\n      return !!(value && value[\"__v_isReactive\" /* ReactiveFlags.IS_REACTIVE */]);\n  }\n  function isReadonly(value) {\n      return !!(value && value[\"__v_isReadonly\" /* ReactiveFlags.IS_READONLY */]);\n  }\n  function isShallow(value) {\n      return !!(value && value[\"__v_isShallow\" /* ReactiveFlags.IS_SHALLOW */]);\n  }\n  function isProxy(value) {\n      return isReactive(value) || isReadonly(value);\n  }\n  function toRaw(observed) {\n      const raw = observed && observed[\"__v_raw\" /* ReactiveFlags.RAW */];\n      return raw ? toRaw(raw) : observed;\n  }\n  function markRaw(value) {\n      def(value, \"__v_skip\" /* ReactiveFlags.SKIP */, true);\n      return value;\n  }\n  const toReactive = (value) => isObject(value) ? reactive(value) : value;\n  const toReadonly = (value) => isObject(value) ? readonly(value) : value;\n\n  function trackRefValue(ref) {\n      if (shouldTrack && activeEffect) {\n          ref = toRaw(ref);\n          {\n              trackEffects(ref.dep || (ref.dep = createDep()), {\n                  target: ref,\n                  type: \"get\" /* TrackOpTypes.GET */,\n                  key: 'value'\n              });\n          }\n      }\n  }\n  function triggerRefValue(ref, newVal) {\n      ref = toRaw(ref);\n      const dep = ref.dep;\n      if (dep) {\n          {\n              triggerEffects(dep, {\n                  target: ref,\n                  type: \"set\" /* TriggerOpTypes.SET */,\n                  key: 'value',\n                  newValue: newVal\n              });\n          }\n      }\n  }\n  function isRef(r) {\n      return !!(r && r.__v_isRef === true);\n  }\n  function ref(value) {\n      return createRef(value, false);\n  }\n  function shallowRef(value) {\n      return createRef(value, true);\n  }\n  function createRef(rawValue, shallow) {\n      if (isRef(rawValue)) {\n          return rawValue;\n      }\n      return new RefImpl(rawValue, shallow);\n  }\n  class RefImpl {\n      constructor(value, __v_isShallow) {\n          this.__v_isShallow = __v_isShallow;\n          this.dep = undefined;\n          this.__v_isRef = true;\n          this._rawValue = __v_isShallow ? value : toRaw(value);\n          this._value = __v_isShallow ? value : toReactive(value);\n      }\n      get value() {\n          trackRefValue(this);\n          return this._value;\n      }\n      set value(newVal) {\n          const useDirectValue = this.__v_isShallow || isShallow(newVal) || isReadonly(newVal);\n          newVal = useDirectValue ? newVal : toRaw(newVal);\n          if (hasChanged(newVal, this._rawValue)) {\n              this._rawValue = newVal;\n              this._value = useDirectValue ? newVal : toReactive(newVal);\n              triggerRefValue(this, newVal);\n          }\n      }\n  }\n  function triggerRef(ref) {\n      triggerRefValue(ref, ref.value );\n  }\n  function unref(ref) {\n      return isRef(ref) ? ref.value : ref;\n  }\n  const shallowUnwrapHandlers = {\n      get: (target, key, receiver) => unref(Reflect.get(target, key, receiver)),\n      set: (target, key, value, receiver) => {\n          const oldValue = target[key];\n          if (isRef(oldValue) && !isRef(value)) {\n              oldValue.value = value;\n              return true;\n          }\n          else {\n              return Reflect.set(target, key, value, receiver);\n          }\n      }\n  };\n  function proxyRefs(objectWithRefs) {\n      return isReactive(objectWithRefs)\n          ? objectWithRefs\n          : new Proxy(objectWithRefs, shallowUnwrapHandlers);\n  }\n  class CustomRefImpl {\n      constructor(factory) {\n          this.dep = undefined;\n          this.__v_isRef = true;\n          const { get, set } = factory(() => trackRefValue(this), () => triggerRefValue(this));\n          this._get = get;\n          this._set = set;\n      }\n      get value() {\n          return this._get();\n      }\n      set value(newVal) {\n          this._set(newVal);\n      }\n  }\n  function customRef(factory) {\n      return new CustomRefImpl(factory);\n  }\n  function toRefs(object) {\n      if (!isProxy(object)) {\n          console.warn(`toRefs() expects a reactive object but received a plain one.`);\n      }\n      const ret = isArray(object) ? new Array(object.length) : {};\n      for (const key in object) {\n          ret[key] = toRef(object, key);\n      }\n      return ret;\n  }\n  class ObjectRefImpl {\n      constructor(_object, _key, _defaultValue) {\n          this._object = _object;\n          this._key = _key;\n          this._defaultValue = _defaultValue;\n          this.__v_isRef = true;\n      }\n      get value() {\n          const val = this._object[this._key];\n          return val === undefined ? this._defaultValue : val;\n      }\n      set value(newVal) {\n          this._object[this._key] = newVal;\n      }\n      get dep() {\n          return getDepFromReactive(toRaw(this._object), this._key);\n      }\n  }\n  function toRef(object, key, defaultValue) {\n      const val = object[key];\n      return isRef(val)\n          ? val\n          : new ObjectRefImpl(object, key, defaultValue);\n  }\n\n  var _a$1;\n  class ComputedRefImpl {\n      constructor(getter, _setter, isReadonly, isSSR) {\n          this._setter = _setter;\n          this.dep = undefined;\n          this.__v_isRef = true;\n          this[_a$1] = false;\n          this._dirty = true;\n          this.effect = new ReactiveEffect(getter, () => {\n              if (!this._dirty) {\n                  this._dirty = true;\n                  triggerRefValue(this);\n              }\n          });\n          this.effect.computed = this;\n          this.effect.active = this._cacheable = !isSSR;\n          this[\"__v_isReadonly\" /* ReactiveFlags.IS_READONLY */] = isReadonly;\n      }\n      get value() {\n          // the computed ref may get wrapped by other proxies e.g. readonly() #3376\n          const self = toRaw(this);\n          trackRefValue(self);\n          if (self._dirty || !self._cacheable) {\n              self._dirty = false;\n              self._value = self.effect.run();\n          }\n          return self._value;\n      }\n      set value(newValue) {\n          this._setter(newValue);\n      }\n  }\n  _a$1 = \"__v_isReadonly\" /* ReactiveFlags.IS_READONLY */;\n  function computed(getterOrOptions, debugOptions, isSSR = false) {\n      let getter;\n      let setter;\n      const onlyGetter = isFunction(getterOrOptions);\n      if (onlyGetter) {\n          getter = getterOrOptions;\n          setter = () => {\n                  console.warn('Write operation failed: computed value is readonly');\n              }\n              ;\n      }\n      else {\n          getter = getterOrOptions.get;\n          setter = getterOrOptions.set;\n      }\n      const cRef = new ComputedRefImpl(getter, setter, onlyGetter || !setter, isSSR);\n      if (debugOptions && !isSSR) {\n          cRef.effect.onTrack = debugOptions.onTrack;\n          cRef.effect.onTrigger = debugOptions.onTrigger;\n      }\n      return cRef;\n  }\n\n  var _a;\n  const tick = /*#__PURE__*/ Promise.resolve();\n  const queue = [];\n  let queued = false;\n  const scheduler = (fn) => {\n      queue.push(fn);\n      if (!queued) {\n          queued = true;\n          tick.then(flush);\n      }\n  };\n  const flush = () => {\n      for (let i = 0; i < queue.length; i++) {\n          queue[i]();\n      }\n      queue.length = 0;\n      queued = false;\n  };\n  class DeferredComputedRefImpl {\n      constructor(getter) {\n          this.dep = undefined;\n          this._dirty = true;\n          this.__v_isRef = true;\n          this[_a] = true;\n          let compareTarget;\n          let hasCompareTarget = false;\n          let scheduled = false;\n          this.effect = new ReactiveEffect(getter, (computedTrigger) => {\n              if (this.dep) {\n                  if (computedTrigger) {\n                      compareTarget = this._value;\n                      hasCompareTarget = true;\n                  }\n                  else if (!scheduled) {\n                      const valueToCompare = hasCompareTarget ? compareTarget : this._value;\n                      scheduled = true;\n                      hasCompareTarget = false;\n                      scheduler(() => {\n                          if (this.effect.active && this._get() !== valueToCompare) {\n                              triggerRefValue(this);\n                          }\n                          scheduled = false;\n                      });\n                  }\n                  // chained upstream computeds are notified synchronously to ensure\n                  // value invalidation in case of sync access; normal effects are\n                  // deferred to be triggered in scheduler.\n                  for (const e of this.dep) {\n                      if (e.computed instanceof DeferredComputedRefImpl) {\n                          e.scheduler(true /* computedTrigger */);\n                      }\n                  }\n              }\n              this._dirty = true;\n          });\n          this.effect.computed = this;\n      }\n      _get() {\n          if (this._dirty) {\n              this._dirty = false;\n              return (this._value = this.effect.run());\n          }\n          return this._value;\n      }\n      get value() {\n          trackRefValue(this);\n          // the computed ref may get wrapped by other proxies e.g. readonly() #3376\n          return toRaw(this)._get();\n      }\n  }\n  _a = \"__v_isReadonly\" /* ReactiveFlags.IS_READONLY */;\n  function deferredComputed(getter) {\n      return new DeferredComputedRefImpl(getter);\n  }\n\n  exports.EffectScope = EffectScope;\n  exports.ITERATE_KEY = ITERATE_KEY;\n  exports.ReactiveEffect = ReactiveEffect;\n  exports.computed = computed;\n  exports.customRef = customRef;\n  exports.deferredComputed = deferredComputed;\n  exports.effect = effect;\n  exports.effectScope = effectScope;\n  exports.enableTracking = enableTracking;\n  exports.getCurrentScope = getCurrentScope;\n  exports.isProxy = isProxy;\n  exports.isReactive = isReactive;\n  exports.isReadonly = isReadonly;\n  exports.isRef = isRef;\n  exports.isShallow = isShallow;\n  exports.markRaw = markRaw;\n  exports.onScopeDispose = onScopeDispose;\n  exports.pauseTracking = pauseTracking;\n  exports.proxyRefs = proxyRefs;\n  exports.reactive = reactive;\n  exports.readonly = readonly;\n  exports.ref = ref;\n  exports.resetTracking = resetTracking;\n  exports.shallowReactive = shallowReactive;\n  exports.shallowReadonly = shallowReadonly;\n  exports.shallowRef = shallowRef;\n  exports.stop = stop;\n  exports.toRaw = toRaw;\n  exports.toRef = toRef;\n  exports.toRefs = toRefs;\n  exports.track = track;\n  exports.trigger = trigger;\n  exports.triggerRef = triggerRef;\n  exports.unref = unref;\n\n  Object.defineProperty(exports, '__esModule', { value: true });\n\n  return exports;\n\n})({});\n/LICENSE\u0004CThe MIT License (MIT)\n\nCopyright (c) 2018-present, Yuxi (Evan) You\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n/dist/reactivity.d.ts.import { IfAny } from '@vue/shared';\r\n\r\ndeclare type BaseTypes = string | number | boolean;\r\n\r\ndeclare type Builtin = Primitive | Function | Date | Error | RegExp;\r\n\r\ndeclare type CollectionTypes = IterableCollections | WeakCollections;\r\n\r\nexport declare function computed<T>(getter: ComputedGetter<T>, debugOptions?: DebuggerOptions): ComputedRef<T>;\r\n\r\nexport declare function computed<T>(options: WritableComputedOptions<T>, debugOptions?: DebuggerOptions): WritableComputedRef<T>;\r\n\r\nexport declare type ComputedGetter<T> = (...args: any[]) => T;\r\n\r\nexport declare interface ComputedRef<T = any> extends WritableComputedRef<T> {\r\n    readonly value: T;\r\n    [ComputedRefSymbol]: true;\r\n}\r\n\r\ndeclare class ComputedRefImpl<T> {\r\n    private readonly _setter;\r\n    dep?: Dep;\r\n    private _value;\r\n    readonly effect: ReactiveEffect<T>;\r\n    readonly __v_isRef = true;\r\n    readonly [ReactiveFlags.IS_READONLY]: boolean;\r\n    _dirty: boolean;\r\n    _cacheable: boolean;\r\n    constructor(getter: ComputedGetter<T>, _setter: ComputedSetter<T>, isReadonly: boolean, isSSR: boolean);\r\n    get value(): T;\r\n    set value(newValue: T);\r\n}\r\n\r\ndeclare const ComputedRefSymbol: unique symbol;\r\n\r\nexport declare type ComputedSetter<T> = (v: T) => void;\r\n\r\nexport declare function customRef<T>(factory: CustomRefFactory<T>): Ref<T>;\r\n\r\nexport declare type CustomRefFactory<T> = (track: () => void, trigger: () => void) => {\r\n    get: () => T;\r\n    set: (value: T) => void;\r\n};\r\n\r\nexport declare type DebuggerEvent = {\r\n    effect: ReactiveEffect;\r\n} & DebuggerEventExtraInfo;\r\n\r\nexport declare type DebuggerEventExtraInfo = {\r\n    target: object;\r\n    type: TrackOpTypes | TriggerOpTypes;\r\n    key: any;\r\n    newValue?: any;\r\n    oldValue?: any;\r\n    oldTarget?: Map<any, any> | Set<any>;\r\n};\r\n\r\nexport declare interface DebuggerOptions {\r\n    onTrack?: (event: DebuggerEvent) => void;\r\n    onTrigger?: (event: DebuggerEvent) => void;\r\n}\r\n\r\nexport declare type DeepReadonly<T> = T extends Builtin ? T : T extends Map<infer K, infer V> ? ReadonlyMap<DeepReadonly<K>, DeepReadonly<V>> : T extends ReadonlyMap<infer K, infer V> ? ReadonlyMap<DeepReadonly<K>, DeepReadonly<V>> : T extends WeakMap<infer K, infer V> ? WeakMap<DeepReadonly<K>, DeepReadonly<V>> : T extends Set<infer U> ? ReadonlySet<DeepReadonly<U>> : T extends ReadonlySet<infer U> ? ReadonlySet<DeepReadonly<U>> : T extends WeakSet<infer U> ? WeakSet<DeepReadonly<U>> : T extends Promise<infer U> ? Promise<DeepReadonly<U>> : T extends Ref<infer U> ? Readonly<Ref<DeepReadonly<U>>> : T extends {} ? {\r\n    readonly [K in keyof T]: DeepReadonly<T[K]>;\r\n} : Readonly<T>;\r\n\r\nexport declare function deferredComputed<T>(getter: () => T): ComputedRef<T>;\r\n\r\ndeclare type Dep = Set<ReactiveEffect> & TrackedMarkers;\r\n\r\nexport declare function effect<T = any>(fn: () => T, options?: ReactiveEffectOptions): ReactiveEffectRunner;\r\n\r\nexport declare type EffectScheduler = (...args: any[]) => any;\r\n\r\nexport declare class EffectScope {\r\n    detached: boolean;\r\n    /* Excluded from this release type: _active */\r\n    /* Excluded from this release type: effects */\r\n    /* Excluded from this release type: cleanups */\r\n    /* Excluded from this release type: parent */\r\n    /* Excluded from this release type: scopes */\r\n    /* Excluded from this release type: index */\r\n    constructor(detached?: boolean);\r\n    get active(): boolean;\r\n    run<T>(fn: () => T): T | undefined;\r\n    /* Excluded from this release type: on */\r\n    /* Excluded from this release type: off */\r\n    stop(fromParent?: boolean): void;\r\n}\r\n\r\nexport declare function effectScope(detached?: boolean): EffectScope;\r\n\r\nexport declare function enableTracking(): void;\r\n\r\nexport declare function getCurrentScope(): EffectScope | undefined;\r\n\r\nexport declare function isProxy(value: unknown): boolean;\r\n\r\nexport declare function isReactive(value: unknown): boolean;\r\n\r\nexport declare function isReadonly(value: unknown): boolean;\r\n\r\nexport declare function isRef<T>(r: Ref<T> | unknown): r is Ref<T>;\r\n\r\nexport declare function isShallow(value: unknown): boolean;\r\n\r\ndeclare type IterableCollections = Map<any, any> | Set<any>;\r\n\r\nexport declare const ITERATE_KEY: unique symbol;\r\n\r\nexport declare function markRaw<T extends object>(value: T): Raw<T>;\r\n\r\nexport declare function onScopeDispose(fn: () => void): void;\r\n\r\nexport declare function pauseTracking(): void;\r\n\r\ndeclare type Primitive = string | number | boolean | bigint | symbol | undefined | null;\r\n\r\nexport declare function proxyRefs<T extends object>(objectWithRefs: T): ShallowUnwrapRef<T>;\r\n\r\nexport declare type Raw<T> = T & {\r\n    [RawSymbol]?: true;\r\n};\r\n\r\ndeclare const RawSymbol: unique symbol;\r\n\r\n/**\r\n * Creates a reactive copy of the original object.\r\n *\r\n * The reactive conversion is \"deep\"—it affects all nested properties. In the\r\n * ES2015 Proxy based implementation, the returned proxy is **not** equal to the\r\n * original object. It is recommended to work exclusively with the reactive\r\n * proxy and avoid relying on the original object.\r\n *\r\n * A reactive object also automatically unwraps refs contained in it, so you\r\n * don't need to use `.value` when accessing and mutating their value:\r\n *\r\n * ```js\r\n * const count = ref(0)\r\n * const obj = reactive({\r\n *   count\r\n * })\r\n *\r\n * obj.count++\r\n * obj.count // -> 1\r\n * count.value // -> 1\r\n * ```\r\n */\r\nexport declare function reactive<T extends object>(target: T): UnwrapNestedRefs<T>;\r\n\r\nexport declare class ReactiveEffect<T = any> {\r\n    fn: () => T;\r\n    scheduler: EffectScheduler | null;\r\n    active: boolean;\r\n    deps: Dep[];\r\n    parent: ReactiveEffect | undefined;\r\n    /* Excluded from this release type: computed */\r\n    /* Excluded from this release type: allowRecurse */\r\n    /* Excluded from this release type: deferStop */\r\n    onStop?: () => void;\r\n    onTrack?: (event: DebuggerEvent) => void;\r\n    onTrigger?: (event: DebuggerEvent) => void;\r\n    constructor(fn: () => T, scheduler?: EffectScheduler | null, scope?: EffectScope);\r\n    run(): T | undefined;\r\n    stop(): void;\r\n}\r\n\r\nexport declare interface ReactiveEffectOptions extends DebuggerOptions {\r\n    lazy?: boolean;\r\n    scheduler?: EffectScheduler;\r\n    scope?: EffectScope;\r\n    allowRecurse?: boolean;\r\n    onStop?: () => void;\r\n}\r\n\r\nexport declare interface ReactiveEffectRunner<T = any> {\r\n    (): T;\r\n    effect: ReactiveEffect;\r\n}\r\n\r\nexport declare const enum ReactiveFlags {\r\n    SKIP = \"__v_skip\",\r\n    IS_REACTIVE = \"__v_isReactive\",\r\n    IS_READONLY = \"__v_isReadonly\",\r\n    IS_SHALLOW = \"__v_isShallow\",\r\n    RAW = \"__v_raw\"\r\n}\r\n\r\n/**\r\n * Creates a readonly copy of the original object. Note the returned copy is not\r\n * made reactive, but `readonly` can be called on an already reactive object.\r\n */\r\nexport declare function readonly<T extends object>(target: T): DeepReadonly<UnwrapNestedRefs<T>>;\r\n\r\nexport declare interface Ref<T = any> {\r\n    value: T;\r\n    /**\r\n     * Type differentiator only.\r\n     * We need this to be in public d.ts but don't want it to show up in IDE\r\n     * autocomplete, so we use a private Symbol instead.\r\n     */\r\n    [RefSymbol]: true;\r\n}\r\n\r\nexport declare function ref<T extends object>(value: T): [T] extends [Ref] ? T : Ref<UnwrapRef<T>>;\r\n\r\nexport declare function ref<T>(value: T): Ref<UnwrapRef<T>>;\r\n\r\nexport declare function ref<T = any>(): Ref<T | undefined>;\r\n\r\ndeclare const RefSymbol: unique symbol;\r\n\r\n/**\r\n * This is a special exported interface for other packages to declare\r\n * additional types that should bail out for ref unwrapping. For example\r\n * \\@vue/runtime-dom can declare it like so in its d.ts:\r\n *\r\n * ``` ts\r\n * declare module '@vue/reactivity' {\r\n *   export interface RefUnwrapBailTypes {\r\n *     runtimeDOMBailTypes: Node | Window\r\n *   }\r\n * }\r\n * ```\r\n *\r\n * Note that api-extractor somehow refuses to include `declare module`\r\n * augmentations in its generated d.ts, so we have to manually append them\r\n * to the final generated d.ts in our build process.\r\n */\r\nexport declare interface RefUnwrapBailTypes {\r\n}\r\n\r\nexport declare function resetTracking(): void;\r\n\r\nexport declare type ShallowReactive<T> = T & {\r\n    [ShallowReactiveMarker]?: true;\r\n};\r\n\r\n/**\r\n * Return a shallowly-reactive copy of the original object, where only the root\r\n * level properties are reactive. It also does not auto-unwrap refs (even at the\r\n * root level).\r\n */\r\nexport declare function shallowReactive<T extends object>(target: T): ShallowReactive<T>;\r\n\r\ndeclare const ShallowReactiveMarker: unique symbol;\r\n\r\n/**\r\n * Returns a reactive-copy of the original object, where only the root level\r\n * properties are readonly, and does NOT unwrap refs nor recursively convert\r\n * returned properties.\r\n * This is used for creating the props proxy object for stateful components.\r\n */\r\nexport declare function shallowReadonly<T extends object>(target: T): Readonly<T>;\r\n\r\nexport declare type ShallowRef<T = any> = Ref<T> & {\r\n    [ShallowRefMarker]?: true;\r\n};\r\n\r\nexport declare function shallowRef<T extends object>(value: T): T extends Ref ? T : ShallowRef<T>;\r\n\r\nexport declare function shallowRef<T>(value: T): ShallowRef<T>;\r\n\r\nexport declare function shallowRef<T = any>(): ShallowRef<T | undefined>;\r\n\r\ndeclare const ShallowRefMarker: unique symbol;\r\n\r\nexport declare type ShallowUnwrapRef<T> = {\r\n    [K in keyof T]: T[K] extends Ref<infer V> ? V : T[K] extends Ref<infer V> | undefined ? unknown extends V ? undefined : V | undefined : T[K];\r\n};\r\n\r\ndeclare function stop_2(runner: ReactiveEffectRunner): void;\r\nexport { stop_2 as stop }\r\n\r\nexport declare function toRaw<T>(observed: T): T;\r\n\r\nexport declare type ToRef<T> = IfAny<T, Ref<T>, [T] extends [Ref] ? T : Ref<T>>;\r\n\r\nexport declare function toRef<T extends object, K extends keyof T>(object: T, key: K): ToRef<T[K]>;\r\n\r\nexport declare function toRef<T extends object, K extends keyof T>(object: T, key: K, defaultValue: T[K]): ToRef<Exclude<T[K], undefined>>;\r\n\r\nexport declare type ToRefs<T = any> = {\r\n    [K in keyof T]: ToRef<T[K]>;\r\n};\r\n\r\nexport declare function toRefs<T extends object>(object: T): ToRefs<T>;\r\n\r\nexport declare function track(target: object, type: TrackOpTypes, key: unknown): void;\r\n\r\n/**\r\n * wasTracked and newTracked maintain the status for several levels of effect\r\n * tracking recursion. One bit per level is used to define whether the dependency\r\n * was/is tracked.\r\n */\r\ndeclare type TrackedMarkers = {\r\n    /**\r\n     * wasTracked\r\n     */\r\n    w: number;\r\n    /**\r\n     * newTracked\r\n     */\r\n    n: number;\r\n};\r\n\r\nexport declare const enum TrackOpTypes {\r\n    GET = \"get\",\r\n    HAS = \"has\",\r\n    ITERATE = \"iterate\"\r\n}\r\n\r\nexport declare function trigger(target: object, type: TriggerOpTypes, key?: unknown, newValue?: unknown, oldValue?: unknown, oldTarget?: Map<unknown, unknown> | Set<unknown>): void;\r\n\r\nexport declare const enum TriggerOpTypes {\r\n    SET = \"set\",\r\n    ADD = \"add\",\r\n    DELETE = \"delete\",\r\n    CLEAR = \"clear\"\r\n}\r\n\r\nexport declare function triggerRef(ref: Ref): void;\r\n\r\nexport declare function unref<T>(ref: T | Ref<T>): T;\r\n\r\nexport declare type UnwrapNestedRefs<T> = T extends Ref ? T : UnwrapRefSimple<T>;\r\n\r\nexport declare type UnwrapRef<T> = T extends ShallowRef<infer V> ? V : T extends Ref<infer V> ? UnwrapRefSimple<V> : UnwrapRefSimple<T>;\r\n\r\ndeclare type UnwrapRefSimple<T> = T extends Function | CollectionTypes | BaseTypes | Ref | RefUnwrapBailTypes[keyof RefUnwrapBailTypes] | {\r\n    [RawSymbol]?: true;\r\n} ? T : T extends ReadonlyArray<any> ? {\r\n    [K in keyof T]: UnwrapRefSimple<T[K]>;\r\n} : T extends object & {\r\n    [ShallowReactiveMarker]?: never;\r\n} ? {\r\n    [P in keyof T]: P extends symbol ? T[P] : UnwrapRef<T[P]>;\r\n} : T;\r\n\r\ndeclare type WeakCollections = WeakMap<any, any> | WeakSet<any>;\r\n\r\nexport declare interface WritableComputedOptions<T> {\r\n    get: ComputedGetter<T>;\r\n    set: ComputedSetter<T>;\r\n}\r\n\r\nexport declare interface WritableComputedRef<T> extends Ref<T> {\r\n    readonly effect: ReactiveEffect<T>;\r\n}\r\n\r\nexport { }\r\n/dist/reactivity.cjs.prod.jsŚ|'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar shared = require('@vue/shared');\n\nlet activeEffectScope;\nclass EffectScope {\n    constructor(detached = false) {\n        this.detached = detached;\n        /**\n         * @internal\n         */\n        this._active = true;\n        /**\n         * @internal\n         */\n        this.effects = [];\n        /**\n         * @internal\n         */\n        this.cleanups = [];\n        this.parent = activeEffectScope;\n        if (!detached && activeEffectScope) {\n            this.index =\n                (activeEffectScope.scopes || (activeEffectScope.scopes = [])).push(this) - 1;\n        }\n    }\n    get active() {\n        return this._active;\n    }\n    run(fn) {\n        if (this._active) {\n            const currentEffectScope = activeEffectScope;\n            try {\n                activeEffectScope = this;\n                return fn();\n            }\n            finally {\n                activeEffectScope = currentEffectScope;\n            }\n        }\n    }\n    /**\n     * This should only be called on non-detached scopes\n     * @internal\n     */\n    on() {\n        activeEffectScope = this;\n    }\n    /**\n     * This should only be called on non-detached scopes\n     * @internal\n     */\n    off() {\n        activeEffectScope = this.parent;\n    }\n    stop(fromParent) {\n        if (this._active) {\n            let i, l;\n            for (i = 0, l = this.effects.length; i < l; i++) {\n                this.effects[i].stop();\n            }\n            for (i = 0, l = this.cleanups.length; i < l; i++) {\n                this.cleanups[i]();\n            }\n            if (this.scopes) {\n                for (i = 0, l = this.scopes.length; i < l; i++) {\n                    this.scopes[i].stop(true);\n                }\n            }\n            // nested scope, dereference from parent to avoid memory leaks\n            if (!this.detached && this.parent && !fromParent) {\n                // optimized O(1) removal\n                const last = this.parent.scopes.pop();\n                if (last && last !== this) {\n                    this.parent.scopes[this.index] = last;\n                    last.index = this.index;\n                }\n            }\n            this.parent = undefined;\n            this._active = false;\n        }\n    }\n}\nfunction effectScope(detached) {\n    return new EffectScope(detached);\n}\nfunction recordEffectScope(effect, scope = activeEffectScope) {\n    if (scope && scope.active) {\n        scope.effects.push(effect);\n    }\n}\nfunction getCurrentScope() {\n    return activeEffectScope;\n}\nfunction onScopeDispose(fn) {\n    if (activeEffectScope) {\n        activeEffectScope.cleanups.push(fn);\n    }\n}\n\nconst createDep = (effects) => {\n    const dep = new Set(effects);\n    dep.w = 0;\n    dep.n = 0;\n    return dep;\n};\nconst wasTracked = (dep) => (dep.w & trackOpBit) > 0;\nconst newTracked = (dep) => (dep.n & trackOpBit) > 0;\nconst initDepMarkers = ({ deps }) => {\n    if (deps.length) {\n        for (let i = 0; i < deps.length; i++) {\n            deps[i].w |= trackOpBit; // set was tracked\n        }\n    }\n};\nconst finalizeDepMarkers = (effect) => {\n    const { deps } = effect;\n    if (deps.length) {\n        let ptr = 0;\n        for (let i = 0; i < deps.length; i++) {\n            const dep = deps[i];\n            if (wasTracked(dep) && !newTracked(dep)) {\n                dep.delete(effect);\n            }\n            else {\n                deps[ptr++] = dep;\n            }\n            // clear bits\n            dep.w &= ~trackOpBit;\n            dep.n &= ~trackOpBit;\n        }\n        deps.length = ptr;\n    }\n};\n\nconst targetMap = new WeakMap();\n// The number of effects currently being tracked recursively.\nlet effectTrackDepth = 0;\nlet trackOpBit = 1;\n/**\n * The bitwise track markers support at most 30 levels of recursion.\n * This value is chosen to enable modern JS engines to use a SMI on all platforms.\n * When recursion depth is greater, fall back to using a full cleanup.\n */\nconst maxMarkerBits = 30;\nlet activeEffect;\nconst ITERATE_KEY = Symbol('');\nconst MAP_KEY_ITERATE_KEY = Symbol('');\nclass ReactiveEffect {\n    constructor(fn, scheduler = null, scope) {\n        this.fn = fn;\n        this.scheduler = scheduler;\n        this.active = true;\n        this.deps = [];\n        this.parent = undefined;\n        recordEffectScope(this, scope);\n    }\n    run() {\n        if (!this.active) {\n            return this.fn();\n        }\n        let parent = activeEffect;\n        let lastShouldTrack = shouldTrack;\n        while (parent) {\n            if (parent === this) {\n                return;\n            }\n            parent = parent.parent;\n        }\n        try {\n            this.parent = activeEffect;\n            activeEffect = this;\n            shouldTrack = true;\n            trackOpBit = 1 << ++effectTrackDepth;\n            if (effectTrackDepth <= maxMarkerBits) {\n                initDepMarkers(this);\n            }\n            else {\n                cleanupEffect(this);\n            }\n            return this.fn();\n        }\n        finally {\n            if (effectTrackDepth <= maxMarkerBits) {\n                finalizeDepMarkers(this);\n            }\n            trackOpBit = 1 << --effectTrackDepth;\n            activeEffect = this.parent;\n            shouldTrack = lastShouldTrack;\n            this.parent = undefined;\n            if (this.deferStop) {\n                this.stop();\n            }\n        }\n    }\n    stop() {\n        // stopped while running itself - defer the cleanup\n        if (activeEffect === this) {\n            this.deferStop = true;\n        }\n        else if (this.active) {\n            cleanupEffect(this);\n            if (this.onStop) {\n                this.onStop();\n            }\n            this.active = false;\n        }\n    }\n}\nfunction cleanupEffect(effect) {\n    const { deps } = effect;\n    if (deps.length) {\n        for (let i = 0; i < deps.length; i++) {\n            deps[i].delete(effect);\n        }\n        deps.length = 0;\n    }\n}\nfunction effect(fn, options) {\n    if (fn.effect) {\n        fn = fn.effect.fn;\n    }\n    const _effect = new ReactiveEffect(fn);\n    if (options) {\n        shared.extend(_effect, options);\n        if (options.scope)\n            recordEffectScope(_effect, options.scope);\n    }\n    if (!options || !options.lazy) {\n        _effect.run();\n    }\n    const runner = _effect.run.bind(_effect);\n    runner.effect = _effect;\n    return runner;\n}\nfunction stop(runner) {\n    runner.effect.stop();\n}\nlet shouldTrack = true;\nconst trackStack = [];\nfunction pauseTracking() {\n    trackStack.push(shouldTrack);\n    shouldTrack = false;\n}\nfunction enableTracking() {\n    trackStack.push(shouldTrack);\n    shouldTrack = true;\n}\nfunction resetTracking() {\n    const last = trackStack.pop();\n    shouldTrack = last === undefined ? true : last;\n}\nfunction track(target, type, key) {\n    if (shouldTrack && activeEffect) {\n        let depsMap = targetMap.get(target);\n        if (!depsMap) {\n            targetMap.set(target, (depsMap = new Map()));\n        }\n        let dep = depsMap.get(key);\n        if (!dep) {\n            depsMap.set(key, (dep = createDep()));\n        }\n        trackEffects(dep);\n    }\n}\nfunction trackEffects(dep, debuggerEventExtraInfo) {\n    let shouldTrack = false;\n    if (effectTrackDepth <= maxMarkerBits) {\n        if (!newTracked(dep)) {\n            dep.n |= trackOpBit; // set newly tracked\n            shouldTrack = !wasTracked(dep);\n        }\n    }\n    else {\n        // Full cleanup mode.\n        shouldTrack = !dep.has(activeEffect);\n    }\n    if (shouldTrack) {\n        dep.add(activeEffect);\n        activeEffect.deps.push(dep);\n    }\n}\nfunction trigger(target, type, key, newValue, oldValue, oldTarget) {\n    const depsMap = targetMap.get(target);\n    if (!depsMap) {\n        // never been tracked\n        return;\n    }\n    let deps = [];\n    if (type === \"clear\" /* TriggerOpTypes.CLEAR */) {\n        // collection being cleared\n        // trigger all effects for target\n        deps = [...depsMap.values()];\n    }\n    else if (key === 'length' && shared.isArray(target)) {\n        const newLength = Number(newValue);\n        depsMap.forEach((dep, key) => {\n            if (key === 'length' || key >= newLength) {\n                deps.push(dep);\n            }\n        });\n    }\n    else {\n        // schedule runs for SET | ADD | DELETE\n        if (key !== void 0) {\n            deps.push(depsMap.get(key));\n        }\n        // also run for iteration key on ADD | DELETE | Map.SET\n        switch (type) {\n            case \"add\" /* TriggerOpTypes.ADD */:\n                if (!shared.isArray(target)) {\n                    deps.push(depsMap.get(ITERATE_KEY));\n                    if (shared.isMap(target)) {\n                        deps.push(depsMap.get(MAP_KEY_ITERATE_KEY));\n                    }\n                }\n                else if (shared.isIntegerKey(key)) {\n                    // new index added to array -> length changes\n                    deps.push(depsMap.get('length'));\n                }\n                break;\n            case \"delete\" /* TriggerOpTypes.DELETE */:\n                if (!shared.isArray(target)) {\n                    deps.push(depsMap.get(ITERATE_KEY));\n                    if (shared.isMap(target)) {\n                        deps.push(depsMap.get(MAP_KEY_ITERATE_KEY));\n                    }\n                }\n                break;\n            case \"set\" /* TriggerOpTypes.SET */:\n                if (shared.isMap(target)) {\n                    deps.push(depsMap.get(ITERATE_KEY));\n                }\n                break;\n        }\n    }\n    if (deps.length === 1) {\n        if (deps[0]) {\n            {\n                triggerEffects(deps[0]);\n            }\n        }\n    }\n    else {\n        const effects = [];\n        for (const dep of deps) {\n            if (dep) {\n                effects.push(...dep);\n            }\n        }\n        {\n            triggerEffects(createDep(effects));\n        }\n    }\n}\nfunction triggerEffects(dep, debuggerEventExtraInfo) {\n    // spread into array for stabilization\n    const effects = shared.isArray(dep) ? dep : [...dep];\n    for (const effect of effects) {\n        if (effect.computed) {\n            triggerEffect(effect);\n        }\n    }\n    for (const effect of effects) {\n        if (!effect.computed) {\n            triggerEffect(effect);\n        }\n    }\n}\nfunction triggerEffect(effect, debuggerEventExtraInfo) {\n    if (effect !== activeEffect || effect.allowRecurse) {\n        if (effect.scheduler) {\n            effect.scheduler();\n        }\n        else {\n            effect.run();\n        }\n    }\n}\nfunction getDepFromReactive(object, key) {\n    var _a;\n    return (_a = targetMap.get(object)) === null || _a === void 0 ? void 0 : _a.get(key);\n}\n\nconst isNonTrackableKeys = /*#__PURE__*/ shared.makeMap(`__proto__,__v_isRef,__isVue`);\nconst builtInSymbols = new Set(\n/*#__PURE__*/\nObject.getOwnPropertyNames(Symbol)\n    // ios10.x Object.getOwnPropertyNames(Symbol) can enumerate 'arguments' and 'caller'\n    // but accessing them on Symbol leads to TypeError because Symbol is a strict mode\n    // function\n    .filter(key => key !== 'arguments' && key !== 'caller')\n    .map(key => Symbol[key])\n    .filter(shared.isSymbol));\nconst get$1 = /*#__PURE__*/ createGetter();\nconst shallowGet = /*#__PURE__*/ createGetter(false, true);\nconst readonlyGet = /*#__PURE__*/ createGetter(true);\nconst shallowReadonlyGet = /*#__PURE__*/ createGetter(true, true);\nconst arrayInstrumentations = /*#__PURE__*/ createArrayInstrumentations();\nfunction createArrayInstrumentations() {\n    const instrumentations = {};\n    ['includes', 'indexOf', 'lastIndexOf'].forEach(key => {\n        instrumentations[key] = function (...args) {\n            const arr = toRaw(this);\n            for (let i = 0, l = this.length; i < l; i++) {\n                track(arr, \"get\" /* TrackOpTypes.GET */, i + '');\n            }\n            // we run the method using the original args first (which may be reactive)\n            const res = arr[key](...args);\n            if (res === -1 || res === false) {\n                // if that didn't work, run it again using raw values.\n                return arr[key](...args.map(toRaw));\n            }\n            else {\n                return res;\n            }\n        };\n    });\n    ['push', 'pop', 'shift', 'unshift', 'splice'].forEach(key => {\n        instrumentations[key] = function (...args) {\n            pauseTracking();\n            const res = toRaw(this)[key].apply(this, args);\n            resetTracking();\n            return res;\n        };\n    });\n    return instrumentations;\n}\nfunction hasOwnProperty(key) {\n    const obj = toRaw(this);\n    track(obj, \"has\" /* TrackOpTypes.HAS */, key);\n    return obj.hasOwnProperty(key);\n}\nfunction createGetter(isReadonly = false, shallow = false) {\n    return function get(target, key, receiver) {\n        if (key === \"__v_isReactive\" /* ReactiveFlags.IS_REACTIVE */) {\n            return !isReadonly;\n        }\n        else if (key === \"__v_isReadonly\" /* ReactiveFlags.IS_READONLY */) {\n            return isReadonly;\n        }\n        else if (key === \"__v_isShallow\" /* ReactiveFlags.IS_SHALLOW */) {\n            return shallow;\n        }\n        else if (key === \"__v_raw\" /* ReactiveFlags.RAW */ &&\n            receiver ===\n                (isReadonly\n                    ? shallow\n                        ? shallowReadonlyMap\n                        : readonlyMap\n                    : shallow\n                        ? shallowReactiveMap\n                        : reactiveMap).get(target)) {\n            return target;\n        }\n        const targetIsArray = shared.isArray(target);\n        if (!isReadonly) {\n            if (targetIsArray && shared.hasOwn(arrayInstrumentations, key)) {\n                return Reflect.get(arrayInstrumentations, key, receiver);\n            }\n            if (key === 'hasOwnProperty') {\n                return hasOwnProperty;\n            }\n        }\n        const res = Reflect.get(target, key, receiver);\n        if (shared.isSymbol(key) ? builtInSymbols.has(key) : isNonTrackableKeys(key)) {\n            return res;\n        }\n        if (!isReadonly) {\n            track(target, \"get\" /* TrackOpTypes.GET */, key);\n        }\n        if (shallow) {\n            return res;\n        }\n        if (isRef(res)) {\n            // ref unwrapping - skip unwrap for Array + integer key.\n            return targetIsArray && shared.isIntegerKey(key) ? res : res.value;\n        }\n        if (shared.isObject(res)) {\n            // Convert returned value into a proxy as well. we do the isObject check\n            // here to avoid invalid value warning. Also need to lazy access readonly\n            // and reactive here to avoid circular dependency.\n            return isReadonly ? readonly(res) : reactive(res);\n        }\n        return res;\n    };\n}\nconst set$1 = /*#__PURE__*/ createSetter();\nconst shallowSet = /*#__PURE__*/ createSetter(true);\nfunction createSetter(shallow = false) {\n    return function set(target, key, value, receiver) {\n        let oldValue = target[key];\n        if (isReadonly(oldValue) && isRef(oldValue) && !isRef(value)) {\n            return false;\n        }\n        if (!shallow) {\n            if (!isShallow(value) && !isReadonly(value)) {\n                oldValue = toRaw(oldValue);\n                value = toRaw(value);\n            }\n            if (!shared.isArray(target) && isRef(oldValue) && !isRef(value)) {\n                oldValue.value = value;\n                return true;\n            }\n        }\n        const hadKey = shared.isArray(target) && shared.isIntegerKey(key)\n            ? Number(key) < target.length\n            : shared.hasOwn(target, key);\n        const result = Reflect.set(target, key, value, receiver);\n        // don't trigger if target is something up in the prototype chain of original\n        if (target === toRaw(receiver)) {\n            if (!hadKey) {\n                trigger(target, \"add\" /* TriggerOpTypes.ADD */, key, value);\n            }\n            else if (shared.hasChanged(value, oldValue)) {\n                trigger(target, \"set\" /* TriggerOpTypes.SET */, key, value);\n            }\n        }\n        return result;\n    };\n}\nfunction deleteProperty(target, key) {\n    const hadKey = shared.hasOwn(target, key);\n    target[key];\n    const result = Reflect.deleteProperty(target, key);\n    if (result && hadKey) {\n        trigger(target, \"delete\" /* TriggerOpTypes.DELETE */, key, undefined);\n    }\n    return result;\n}\nfunction has$1(target, key) {\n    const result = Reflect.has(target, key);\n    if (!shared.isSymbol(key) || !builtInSymbols.has(key)) {\n        track(target, \"has\" /* TrackOpTypes.HAS */, key);\n    }\n    return result;\n}\nfunction ownKeys(target) {\n    track(target, \"iterate\" /* TrackOpTypes.ITERATE */, shared.isArray(target) ? 'length' : ITERATE_KEY);\n    return Reflect.ownKeys(target);\n}\nconst mutableHandlers = {\n    get: get$1,\n    set: set$1,\n    deleteProperty,\n    has: has$1,\n    ownKeys\n};\nconst readonlyHandlers = {\n    get: readonlyGet,\n    set(target, key) {\n        return true;\n    },\n    deleteProperty(target, key) {\n        return true;\n    }\n};\nconst shallowReactiveHandlers = /*#__PURE__*/ shared.extend({}, mutableHandlers, {\n    get: shallowGet,\n    set: shallowSet\n});\n// Props handlers are special in the sense that it should not unwrap top-level\n// refs (in order to allow refs to be explicitly passed down), but should\n// retain the reactivity of the normal readonly object.\nconst shallowReadonlyHandlers = /*#__PURE__*/ shared.extend({}, readonlyHandlers, {\n    get: shallowReadonlyGet\n});\n\nconst toShallow = (value) => value;\nconst getProto = (v) => Reflect.getPrototypeOf(v);\nfunction get(target, key, isReadonly = false, isShallow = false) {\n    // #1772: readonly(reactive(Map)) should return readonly + reactive version\n    // of the value\n    target = target[\"__v_raw\" /* ReactiveFlags.RAW */];\n    const rawTarget = toRaw(target);\n    const rawKey = toRaw(key);\n    if (!isReadonly) {\n        if (key !== rawKey) {\n            track(rawTarget, \"get\" /* TrackOpTypes.GET */, key);\n        }\n        track(rawTarget, \"get\" /* TrackOpTypes.GET */, rawKey);\n    }\n    const { has } = getProto(rawTarget);\n    const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive;\n    if (has.call(rawTarget, key)) {\n        return wrap(target.get(key));\n    }\n    else if (has.call(rawTarget, rawKey)) {\n        return wrap(target.get(rawKey));\n    }\n    else if (target !== rawTarget) {\n        // #3602 readonly(reactive(Map))\n        // ensure that the nested reactive `Map` can do tracking for itself\n        target.get(key);\n    }\n}\nfunction has(key, isReadonly = false) {\n    const target = this[\"__v_raw\" /* ReactiveFlags.RAW */];\n    const rawTarget = toRaw(target);\n    const rawKey = toRaw(key);\n    if (!isReadonly) {\n        if (key !== rawKey) {\n            track(rawTarget, \"has\" /* TrackOpTypes.HAS */, key);\n        }\n        track(rawTarget, \"has\" /* TrackOpTypes.HAS */, rawKey);\n    }\n    return key === rawKey\n        ? target.has(key)\n        : target.has(key) || target.has(rawKey);\n}\nfunction size(target, isReadonly = false) {\n    target = target[\"__v_raw\" /* ReactiveFlags.RAW */];\n    !isReadonly && track(toRaw(target), \"iterate\" /* TrackOpTypes.ITERATE */, ITERATE_KEY);\n    return Reflect.get(target, 'size', target);\n}\nfunction add(value) {\n    value = toRaw(value);\n    const target = toRaw(this);\n    const proto = getProto(target);\n    const hadKey = proto.has.call(target, value);\n    if (!hadKey) {\n        target.add(value);\n        trigger(target, \"add\" /* TriggerOpTypes.ADD */, value, value);\n    }\n    return this;\n}\nfunction set(key, value) {\n    value = toRaw(value);\n    const target = toRaw(this);\n    const { has, get } = getProto(target);\n    let hadKey = has.call(target, key);\n    if (!hadKey) {\n        key = toRaw(key);\n        hadKey = has.call(target, key);\n    }\n    const oldValue = get.call(target, key);\n    target.set(key, value);\n    if (!hadKey) {\n        trigger(target, \"add\" /* TriggerOpTypes.ADD */, key, value);\n    }\n    else if (shared.hasChanged(value, oldValue)) {\n        trigger(target, \"set\" /* TriggerOpTypes.SET */, key, value);\n    }\n    return this;\n}\nfunction deleteEntry(key) {\n    const target = toRaw(this);\n    const { has, get } = getProto(target);\n    let hadKey = has.call(target, key);\n    if (!hadKey) {\n        key = toRaw(key);\n        hadKey = has.call(target, key);\n    }\n    get ? get.call(target, key) : undefined;\n    // forward the operation before queueing reactions\n    const result = target.delete(key);\n    if (hadKey) {\n        trigger(target, \"delete\" /* TriggerOpTypes.DELETE */, key, undefined);\n    }\n    return result;\n}\nfunction clear() {\n    const target = toRaw(this);\n    const hadItems = target.size !== 0;\n    // forward the operation before queueing reactions\n    const result = target.clear();\n    if (hadItems) {\n        trigger(target, \"clear\" /* TriggerOpTypes.CLEAR */, undefined, undefined);\n    }\n    return result;\n}\nfunction createForEach(isReadonly, isShallow) {\n    return function forEach(callback, thisArg) {\n        const observed = this;\n        const target = observed[\"__v_raw\" /* ReactiveFlags.RAW */];\n        const rawTarget = toRaw(target);\n        const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive;\n        !isReadonly && track(rawTarget, \"iterate\" /* TrackOpTypes.ITERATE */, ITERATE_KEY);\n        return target.forEach((value, key) => {\n            // important: make sure the callback is\n            // 1. invoked with the reactive map as `this` and 3rd arg\n            // 2. the value received should be a corresponding reactive/readonly.\n            return callback.call(thisArg, wrap(value), wrap(key), observed);\n        });\n    };\n}\nfunction createIterableMethod(method, isReadonly, isShallow) {\n    return function (...args) {\n        const target = this[\"__v_raw\" /* ReactiveFlags.RAW */];\n        const rawTarget = toRaw(target);\n        const targetIsMap = shared.isMap(rawTarget);\n        const isPair = method === 'entries' || (method === Symbol.iterator && targetIsMap);\n        const isKeyOnly = method === 'keys' && targetIsMap;\n        const innerIterator = target[method](...args);\n        const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive;\n        !isReadonly &&\n            track(rawTarget, \"iterate\" /* TrackOpTypes.ITERATE */, isKeyOnly ? MAP_KEY_ITERATE_KEY : ITERATE_KEY);\n        // return a wrapped iterator which returns observed versions of the\n        // values emitted from the real iterator\n        return {\n            // iterator protocol\n            next() {\n                const { value, done } = innerIterator.next();\n                return done\n                    ? { value, done }\n                    : {\n                        value: isPair ? [wrap(value[0]), wrap(value[1])] : wrap(value),\n                        done\n                    };\n            },\n            // iterable protocol\n            [Symbol.iterator]() {\n                return this;\n            }\n        };\n    };\n}\nfunction createReadonlyMethod(type) {\n    return function (...args) {\n        return type === \"delete\" /* TriggerOpTypes.DELETE */ ? false : this;\n    };\n}\nfunction createInstrumentations() {\n    const mutableInstrumentations = {\n        get(key) {\n            return get(this, key);\n        },\n        get size() {\n            return size(this);\n        },\n        has,\n        add,\n        set,\n        delete: deleteEntry,\n        clear,\n        forEach: createForEach(false, false)\n    };\n    const shallowInstrumentations = {\n        get(key) {\n            return get(this, key, false, true);\n        },\n        get size() {\n            return size(this);\n        },\n        has,\n        add,\n        set,\n        delete: deleteEntry,\n        clear,\n        forEach: createForEach(false, true)\n    };\n    const readonlyInstrumentations = {\n        get(key) {\n            return get(this, key, true);\n        },\n        get size() {\n            return size(this, true);\n        },\n        has(key) {\n            return has.call(this, key, true);\n        },\n        add: createReadonlyMethod(\"add\" /* TriggerOpTypes.ADD */),\n        set: createReadonlyMethod(\"set\" /* TriggerOpTypes.SET */),\n        delete: createReadonlyMethod(\"delete\" /* TriggerOpTypes.DELETE */),\n        clear: createReadonlyMethod(\"clear\" /* TriggerOpTypes.CLEAR */),\n        forEach: createForEach(true, false)\n    };\n    const shallowReadonlyInstrumentations = {\n        get(key) {\n            return get(this, key, true, true);\n        },\n        get size() {\n            return size(this, true);\n        },\n        has(key) {\n            return has.call(this, key, true);\n        },\n        add: createReadonlyMethod(\"add\" /* TriggerOpTypes.ADD */),\n        set: createReadonlyMethod(\"set\" /* TriggerOpTypes.SET */),\n        delete: createReadonlyMethod(\"delete\" /* TriggerOpTypes.DELETE */),\n        clear: createReadonlyMethod(\"clear\" /* TriggerOpTypes.CLEAR */),\n        forEach: createForEach(true, true)\n    };\n    const iteratorMethods = ['keys', 'values', 'entries', Symbol.iterator];\n    iteratorMethods.forEach(method => {\n        mutableInstrumentations[method] = createIterableMethod(method, false, false);\n        readonlyInstrumentations[method] = createIterableMethod(method, true, false);\n        shallowInstrumentations[method] = createIterableMethod(method, false, true);\n        shallowReadonlyInstrumentations[method] = createIterableMethod(method, true, true);\n    });\n    return [\n        mutableInstrumentations,\n        readonlyInstrumentations,\n        shallowInstrumentations,\n        shallowReadonlyInstrumentations\n    ];\n}\nconst [mutableInstrumentations, readonlyInstrumentations, shallowInstrumentations, shallowReadonlyInstrumentations] = /* #__PURE__*/ createInstrumentations();\nfunction createInstrumentationGetter(isReadonly, shallow) {\n    const instrumentations = shallow\n        ? isReadonly\n            ? shallowReadonlyInstrumentations\n            : shallowInstrumentations\n        : isReadonly\n            ? readonlyInstrumentations\n            : mutableInstrumentations;\n    return (target, key, receiver) => {\n        if (key === \"__v_isReactive\" /* ReactiveFlags.IS_REACTIVE */) {\n            return !isReadonly;\n        }\n        else if (key === \"__v_isReadonly\" /* ReactiveFlags.IS_READONLY */) {\n            return isReadonly;\n        }\n        else if (key === \"__v_raw\" /* ReactiveFlags.RAW */) {\n            return target;\n        }\n        return Reflect.get(shared.hasOwn(instrumentations, key) && key in target\n            ? instrumentations\n            : target, key, receiver);\n    };\n}\nconst mutableCollectionHandlers = {\n    get: /*#__PURE__*/ createInstrumentationGetter(false, false)\n};\nconst shallowCollectionHandlers = {\n    get: /*#__PURE__*/ createInstrumentationGetter(false, true)\n};\nconst readonlyCollectionHandlers = {\n    get: /*#__PURE__*/ createInstrumentationGetter(true, false)\n};\nconst shallowReadonlyCollectionHandlers = {\n    get: /*#__PURE__*/ createInstrumentationGetter(true, true)\n};\n\nconst reactiveMap = new WeakMap();\nconst shallowReactiveMap = new WeakMap();\nconst readonlyMap = new WeakMap();\nconst shallowReadonlyMap = new WeakMap();\nfunction targetTypeMap(rawType) {\n    switch (rawType) {\n        case 'Object':\n        case 'Array':\n            return 1 /* TargetType.COMMON */;\n        case 'Map':\n        case 'Set':\n        case 'WeakMap':\n        case 'WeakSet':\n            return 2 /* TargetType.COLLECTION */;\n        default:\n            return 0 /* TargetType.INVALID */;\n    }\n}\nfunction getTargetType(value) {\n    return value[\"__v_skip\" /* ReactiveFlags.SKIP */] || !Object.isExtensible(value)\n        ? 0 /* TargetType.INVALID */\n        : targetTypeMap(shared.toRawType(value));\n}\nfunction reactive(target) {\n    // if trying to observe a readonly proxy, return the readonly version.\n    if (isReadonly(target)) {\n        return target;\n    }\n    return createReactiveObject(target, false, mutableHandlers, mutableCollectionHandlers, reactiveMap);\n}\n/**\n * Return a shallowly-reactive copy of the original object, where only the root\n * level properties are reactive. It also does not auto-unwrap refs (even at the\n * root level).\n */\nfunction shallowReactive(target) {\n    return createReactiveObject(target, false, shallowReactiveHandlers, shallowCollectionHandlers, shallowReactiveMap);\n}\n/**\n * Creates a readonly copy of the original object. Note the returned copy is not\n * made reactive, but `readonly` can be called on an already reactive object.\n */\nfunction readonly(target) {\n    return createReactiveObject(target, true, readonlyHandlers, readonlyCollectionHandlers, readonlyMap);\n}\n/**\n * Returns a reactive-copy of the original object, where only the root level\n * properties are readonly, and does NOT unwrap refs nor recursively convert\n * returned properties.\n * This is used for creating the props proxy object for stateful components.\n */\nfunction shallowReadonly(target) {\n    return createReactiveObject(target, true, shallowReadonlyHandlers, shallowReadonlyCollectionHandlers, shallowReadonlyMap);\n}\nfunction createReactiveObject(target, isReadonly, baseHandlers, collectionHandlers, proxyMap) {\n    if (!shared.isObject(target)) {\n        return target;\n    }\n    // target is already a Proxy, return it.\n    // exception: calling readonly() on a reactive object\n    if (target[\"__v_raw\" /* ReactiveFlags.RAW */] &&\n        !(isReadonly && target[\"__v_isReactive\" /* ReactiveFlags.IS_REACTIVE */])) {\n        return target;\n    }\n    // target already has corresponding Proxy\n    const existingProxy = proxyMap.get(target);\n    if (existingProxy) {\n        return existingProxy;\n    }\n    // only specific value types can be observed.\n    const targetType = getTargetType(target);\n    if (targetType === 0 /* TargetType.INVALID */) {\n        return target;\n    }\n    const proxy = new Proxy(target, targetType === 2 /* TargetType.COLLECTION */ ? collectionHandlers : baseHandlers);\n    proxyMap.set(target, proxy);\n    return proxy;\n}\nfunction isReactive(value) {\n    if (isReadonly(value)) {\n        return isReactive(value[\"__v_raw\" /* ReactiveFlags.RAW */]);\n    }\n    return !!(value && value[\"__v_isReactive\" /* ReactiveFlags.IS_REACTIVE */]);\n}\nfunction isReadonly(value) {\n    return !!(value && value[\"__v_isReadonly\" /* ReactiveFlags.IS_READONLY */]);\n}\nfunction isShallow(value) {\n    return !!(value && value[\"__v_isShallow\" /* ReactiveFlags.IS_SHALLOW */]);\n}\nfunction isProxy(value) {\n    return isReactive(value) || isReadonly(value);\n}\nfunction toRaw(observed) {\n    const raw = observed && observed[\"__v_raw\" /* ReactiveFlags.RAW */];\n    return raw ? toRaw(raw) : observed;\n}\nfunction markRaw(value) {\n    shared.def(value, \"__v_skip\" /* ReactiveFlags.SKIP */, true);\n    return value;\n}\nconst toReactive = (value) => shared.isObject(value) ? reactive(value) : value;\nconst toReadonly = (value) => shared.isObject(value) ? readonly(value) : value;\n\nfunction trackRefValue(ref) {\n    if (shouldTrack && activeEffect) {\n        ref = toRaw(ref);\n        {\n            trackEffects(ref.dep || (ref.dep = createDep()));\n        }\n    }\n}\nfunction triggerRefValue(ref, newVal) {\n    ref = toRaw(ref);\n    const dep = ref.dep;\n    if (dep) {\n        {\n            triggerEffects(dep);\n        }\n    }\n}\nfunction isRef(r) {\n    return !!(r && r.__v_isRef === true);\n}\nfunction ref(value) {\n    return createRef(value, false);\n}\nfunction shallowRef(value) {\n    return createRef(value, true);\n}\nfunction createRef(rawValue, shallow) {\n    if (isRef(rawValue)) {\n        return rawValue;\n    }\n    return new RefImpl(rawValue, shallow);\n}\nclass RefImpl {\n    constructor(value, __v_isShallow) {\n        this.__v_isShallow = __v_isShallow;\n        this.dep = undefined;\n        this.__v_isRef = true;\n        this._rawValue = __v_isShallow ? value : toRaw(value);\n        this._value = __v_isShallow ? value : toReactive(value);\n    }\n    get value() {\n        trackRefValue(this);\n        return this._value;\n    }\n    set value(newVal) {\n        const useDirectValue = this.__v_isShallow || isShallow(newVal) || isReadonly(newVal);\n        newVal = useDirectValue ? newVal : toRaw(newVal);\n        if (shared.hasChanged(newVal, this._rawValue)) {\n            this._rawValue = newVal;\n            this._value = useDirectValue ? newVal : toReactive(newVal);\n            triggerRefValue(this);\n        }\n    }\n}\nfunction triggerRef(ref) {\n    triggerRefValue(ref);\n}\nfunction unref(ref) {\n    return isRef(ref) ? ref.value : ref;\n}\nconst shallowUnwrapHandlers = {\n    get: (target, key, receiver) => unref(Reflect.get(target, key, receiver)),\n    set: (target, key, value, receiver) => {\n        const oldValue = target[key];\n        if (isRef(oldValue) && !isRef(value)) {\n            oldValue.value = value;\n            return true;\n        }\n        else {\n            return Reflect.set(target, key, value, receiver);\n        }\n    }\n};\nfunction proxyRefs(objectWithRefs) {\n    return isReactive(objectWithRefs)\n        ? objectWithRefs\n        : new Proxy(objectWithRefs, shallowUnwrapHandlers);\n}\nclass CustomRefImpl {\n    constructor(factory) {\n        this.dep = undefined;\n        this.__v_isRef = true;\n        const { get, set } = factory(() => trackRefValue(this), () => triggerRefValue(this));\n        this._get = get;\n        this._set = set;\n    }\n    get value() {\n        return this._get();\n    }\n    set value(newVal) {\n        this._set(newVal);\n    }\n}\nfunction customRef(factory) {\n    return new CustomRefImpl(factory);\n}\nfunction toRefs(object) {\n    const ret = shared.isArray(object) ? new Array(object.length) : {};\n    for (const key in object) {\n        ret[key] = toRef(object, key);\n    }\n    return ret;\n}\nclass ObjectRefImpl {\n    constructor(_object, _key, _defaultValue) {\n        this._object = _object;\n        this._key = _key;\n        this._defaultValue = _defaultValue;\n        this.__v_isRef = true;\n    }\n    get value() {\n        const val = this._object[this._key];\n        return val === undefined ? this._defaultValue : val;\n    }\n    set value(newVal) {\n        this._object[this._key] = newVal;\n    }\n    get dep() {\n        return getDepFromReactive(toRaw(this._object), this._key);\n    }\n}\nfunction toRef(object, key, defaultValue) {\n    const val = object[key];\n    return isRef(val)\n        ? val\n        : new ObjectRefImpl(object, key, defaultValue);\n}\n\nvar _a$1;\nclass ComputedRefImpl {\n    constructor(getter, _setter, isReadonly, isSSR) {\n        this._setter = _setter;\n        this.dep = undefined;\n        this.__v_isRef = true;\n        this[_a$1] = false;\n        this._dirty = true;\n        this.effect = new ReactiveEffect(getter, () => {\n            if (!this._dirty) {\n                this._dirty = true;\n                triggerRefValue(this);\n            }\n        });\n        this.effect.computed = this;\n        this.effect.active = this._cacheable = !isSSR;\n        this[\"__v_isReadonly\" /* ReactiveFlags.IS_READONLY */] = isReadonly;\n    }\n    get value() {\n        // the computed ref may get wrapped by other proxies e.g. readonly() #3376\n        const self = toRaw(this);\n        trackRefValue(self);\n        if (self._dirty || !self._cacheable) {\n            self._dirty = false;\n            self._value = self.effect.run();\n        }\n        return self._value;\n    }\n    set value(newValue) {\n        this._setter(newValue);\n    }\n}\n_a$1 = \"__v_isReadonly\" /* ReactiveFlags.IS_READONLY */;\nfunction computed(getterOrOptions, debugOptions, isSSR = false) {\n    let getter;\n    let setter;\n    const onlyGetter = shared.isFunction(getterOrOptions);\n    if (onlyGetter) {\n        getter = getterOrOptions;\n        setter = shared.NOOP;\n    }\n    else {\n        getter = getterOrOptions.get;\n        setter = getterOrOptions.set;\n    }\n    const cRef = new ComputedRefImpl(getter, setter, onlyGetter || !setter, isSSR);\n    return cRef;\n}\n\nvar _a;\nconst tick = /*#__PURE__*/ Promise.resolve();\nconst queue = [];\nlet queued = false;\nconst scheduler = (fn) => {\n    queue.push(fn);\n    if (!queued) {\n        queued = true;\n        tick.then(flush);\n    }\n};\nconst flush = () => {\n    for (let i = 0; i < queue.length; i++) {\n        queue[i]();\n    }\n    queue.length = 0;\n    queued = false;\n};\nclass DeferredComputedRefImpl {\n    constructor(getter) {\n        this.dep = undefined;\n        this._dirty = true;\n        this.__v_isRef = true;\n        this[_a] = true;\n        let compareTarget;\n        let hasCompareTarget = false;\n        let scheduled = false;\n        this.effect = new ReactiveEffect(getter, (computedTrigger) => {\n            if (this.dep) {\n                if (computedTrigger) {\n                    compareTarget = this._value;\n                    hasCompareTarget = true;\n                }\n                else if (!scheduled) {\n                    const valueToCompare = hasCompareTarget ? compareTarget : this._value;\n                    scheduled = true;\n                    hasCompareTarget = false;\n                    scheduler(() => {\n                        if (this.effect.active && this._get() !== valueToCompare) {\n                            triggerRefValue(this);\n                        }\n                        scheduled = false;\n                    });\n                }\n                // chained upstream computeds are notified synchronously to ensure\n                // value invalidation in case of sync access; normal effects are\n                // deferred to be triggered in scheduler.\n                for (const e of this.dep) {\n                    if (e.computed instanceof DeferredComputedRefImpl) {\n                        e.scheduler(true /* computedTrigger */);\n                    }\n                }\n            }\n            this._dirty = true;\n        });\n        this.effect.computed = this;\n    }\n    _get() {\n        if (this._dirty) {\n            this._dirty = false;\n            return (this._value = this.effect.run());\n        }\n        return this._value;\n    }\n    get value() {\n        trackRefValue(this);\n        // the computed ref may get wrapped by other proxies e.g. readonly() #3376\n        return toRaw(this)._get();\n    }\n}\n_a = \"__v_isReadonly\" /* ReactiveFlags.IS_READONLY */;\nfunction deferredComputed(getter) {\n    return new DeferredComputedRefImpl(getter);\n}\n\nexports.EffectScope = EffectScope;\nexports.ITERATE_KEY = ITERATE_KEY;\nexports.ReactiveEffect = ReactiveEffect;\nexports.computed = computed;\nexports.customRef = customRef;\nexports.deferredComputed = deferredComputed;\nexports.effect = effect;\nexports.effectScope = effectScope;\nexports.enableTracking = enableTracking;\nexports.getCurrentScope = getCurrentScope;\nexports.isProxy = isProxy;\nexports.isReactive = isReactive;\nexports.isReadonly = isReadonly;\nexports.isRef = isRef;\nexports.isShallow = isShallow;\nexports.markRaw = markRaw;\nexports.onScopeDispose = onScopeDispose;\nexports.pauseTracking = pauseTracking;\nexports.proxyRefs = proxyRefs;\nexports.reactive = reactive;\nexports.readonly = readonly;\nexports.ref = ref;\nexports.resetTracking = resetTracking;\nexports.shallowReactive = shallowReactive;\nexports.shallowReadonly = shallowReadonly;\nexports.shallowRef = shallowRef;\nexports.stop = stop;\nexports.toRaw = toRaw;\nexports.toRef = toRef;\nexports.toRefs = toRefs;\nexports.track = track;\nexports.trigger = trigger;\nexports.triggerRef = triggerRef;\nexports.unref = unref;\n/dist/reactivity.esm-browser.jsũ:/**\n * Make a map and return a function for checking if a key\n * is in that map.\n * IMPORTANT: all calls of this function must be prefixed with\n * \\/\\*#\\_\\_PURE\\_\\_\\*\\/\n * So that rollup can tree-shake them if necessary.\n */\nfunction makeMap(str, expectsLowerCase) {\n    const map = Object.create(null);\n    const list = str.split(',');\n    for (let i = 0; i < list.length; i++) {\n        map[list[i]] = true;\n    }\n    return expectsLowerCase ? val => !!map[val.toLowerCase()] : val => !!map[val];\n}\n\nconst extend = Object.assign;\nconst hasOwnProperty$1 = Object.prototype.hasOwnProperty;\nconst hasOwn = (val, key) => hasOwnProperty$1.call(val, key);\nconst isArray = Array.isArray;\nconst isMap = (val) => toTypeString(val) === '[object Map]';\nconst isFunction = (val) => typeof val === 'function';\nconst isString = (val) => typeof val === 'string';\nconst isSymbol = (val) => typeof val === 'symbol';\nconst isObject = (val) => val !== null && typeof val === 'object';\nconst objectToString = Object.prototype.toString;\nconst toTypeString = (value) => objectToString.call(value);\nconst toRawType = (value) => {\n    // extract \"RawType\" from strings like \"[object RawType]\"\n    return toTypeString(value).slice(8, -1);\n};\nconst isIntegerKey = (key) => isString(key) &&\n    key !== 'NaN' &&\n    key[0] !== '-' &&\n    '' + parseInt(key, 10) === key;\nconst cacheStringFunction = (fn) => {\n    const cache = Object.create(null);\n    return ((str) => {\n        const hit = cache[str];\n        return hit || (cache[str] = fn(str));\n    });\n};\n/**\n * @private\n */\nconst capitalize = cacheStringFunction((str) => str.charAt(0).toUpperCase() + str.slice(1));\n// compare whether a value has changed, accounting for NaN.\nconst hasChanged = (value, oldValue) => !Object.is(value, oldValue);\nconst def = (obj, key, value) => {\n    Object.defineProperty(obj, key, {\n        configurable: true,\n        enumerable: false,\n        value\n    });\n};\n\nfunction warn(msg, ...args) {\n    console.warn(`[Vue warn] ${msg}`, ...args);\n}\n\nlet activeEffectScope;\nclass EffectScope {\n    constructor(detached = false) {\n        this.detached = detached;\n        /**\n         * @internal\n         */\n        this._active = true;\n        /**\n         * @internal\n         */\n        this.effects = [];\n        /**\n         * @internal\n         */\n        this.cleanups = [];\n        this.parent = activeEffectScope;\n        if (!detached && activeEffectScope) {\n            this.index =\n                (activeEffectScope.scopes || (activeEffectScope.scopes = [])).push(this) - 1;\n        }\n    }\n    get active() {\n        return this._active;\n    }\n    run(fn) {\n        if (this._active) {\n            const currentEffectScope = activeEffectScope;\n            try {\n                activeEffectScope = this;\n                return fn();\n            }\n            finally {\n                activeEffectScope = currentEffectScope;\n            }\n        }\n        else {\n            warn(`cannot run an inactive effect scope.`);\n        }\n    }\n    /**\n     * This should only be called on non-detached scopes\n     * @internal\n     */\n    on() {\n        activeEffectScope = this;\n    }\n    /**\n     * This should only be called on non-detached scopes\n     * @internal\n     */\n    off() {\n        activeEffectScope = this.parent;\n    }\n    stop(fromParent) {\n        if (this._active) {\n            let i, l;\n            for (i = 0, l = this.effects.length; i < l; i++) {\n                this.effects[i].stop();\n            }\n            for (i = 0, l = this.cleanups.length; i < l; i++) {\n                this.cleanups[i]();\n            }\n            if (this.scopes) {\n                for (i = 0, l = this.scopes.length; i < l; i++) {\n                    this.scopes[i].stop(true);\n                }\n            }\n            // nested scope, dereference from parent to avoid memory leaks\n            if (!this.detached && this.parent && !fromParent) {\n                // optimized O(1) removal\n                const last = this.parent.scopes.pop();\n                if (last && last !== this) {\n                    this.parent.scopes[this.index] = last;\n                    last.index = this.index;\n                }\n            }\n            this.parent = undefined;\n            this._active = false;\n        }\n    }\n}\nfunction effectScope(detached) {\n    return new EffectScope(detached);\n}\nfunction recordEffectScope(effect, scope = activeEffectScope) {\n    if (scope && scope.active) {\n        scope.effects.push(effect);\n    }\n}\nfunction getCurrentScope() {\n    return activeEffectScope;\n}\nfunction onScopeDispose(fn) {\n    if (activeEffectScope) {\n        activeEffectScope.cleanups.push(fn);\n    }\n    else {\n        warn(`onScopeDispose() is called when there is no active effect scope` +\n            ` to be associated with.`);\n    }\n}\n\nconst createDep = (effects) => {\n    const dep = new Set(effects);\n    dep.w = 0;\n    dep.n = 0;\n    return dep;\n};\nconst wasTracked = (dep) => (dep.w & trackOpBit) > 0;\nconst newTracked = (dep) => (dep.n & trackOpBit) > 0;\nconst initDepMarkers = ({ deps }) => {\n    if (deps.length) {\n        for (let i = 0; i < deps.length; i++) {\n            deps[i].w |= trackOpBit; // set was tracked\n        }\n    }\n};\nconst finalizeDepMarkers = (effect) => {\n    const { deps } = effect;\n    if (deps.length) {\n        let ptr = 0;\n        for (let i = 0; i < deps.length; i++) {\n            const dep = deps[i];\n            if (wasTracked(dep) && !newTracked(dep)) {\n                dep.delete(effect);\n            }\n            else {\n                deps[ptr++] = dep;\n            }\n            // clear bits\n            dep.w &= ~trackOpBit;\n            dep.n &= ~trackOpBit;\n        }\n        deps.length = ptr;\n    }\n};\n\nconst targetMap = new WeakMap();\n// The number of effects currently being tracked recursively.\nlet effectTrackDepth = 0;\nlet trackOpBit = 1;\n/**\n * The bitwise track markers support at most 30 levels of recursion.\n * This value is chosen to enable modern JS engines to use a SMI on all platforms.\n * When recursion depth is greater, fall back to using a full cleanup.\n */\nconst maxMarkerBits = 30;\nlet activeEffect;\nconst ITERATE_KEY = Symbol('iterate' );\nconst MAP_KEY_ITERATE_KEY = Symbol('Map key iterate' );\nclass ReactiveEffect {\n    constructor(fn, scheduler = null, scope) {\n        this.fn = fn;\n        this.scheduler = scheduler;\n        this.active = true;\n        this.deps = [];\n        this.parent = undefined;\n        recordEffectScope(this, scope);\n    }\n    run() {\n        if (!this.active) {\n            return this.fn();\n        }\n        let parent = activeEffect;\n        let lastShouldTrack = shouldTrack;\n        while (parent) {\n            if (parent === this) {\n                return;\n            }\n            parent = parent.parent;\n        }\n        try {\n            this.parent = activeEffect;\n            activeEffect = this;\n            shouldTrack = true;\n            trackOpBit = 1 << ++effectTrackDepth;\n            if (effectTrackDepth <= maxMarkerBits) {\n                initDepMarkers(this);\n            }\n            else {\n                cleanupEffect(this);\n            }\n            return this.fn();\n        }\n        finally {\n            if (effectTrackDepth <= maxMarkerBits) {\n                finalizeDepMarkers(this);\n            }\n            trackOpBit = 1 << --effectTrackDepth;\n            activeEffect = this.parent;\n            shouldTrack = lastShouldTrack;\n            this.parent = undefined;\n            if (this.deferStop) {\n                this.stop();\n            }\n        }\n    }\n    stop() {\n        // stopped while running itself - defer the cleanup\n        if (activeEffect === this) {\n            this.deferStop = true;\n        }\n        else if (this.active) {\n            cleanupEffect(this);\n            if (this.onStop) {\n                this.onStop();\n            }\n            this.active = false;\n        }\n    }\n}\nfunction cleanupEffect(effect) {\n    const { deps } = effect;\n    if (deps.length) {\n        for (let i = 0; i < deps.length; i++) {\n            deps[i].delete(effect);\n        }\n        deps.length = 0;\n    }\n}\nfunction effect(fn, options) {\n    if (fn.effect) {\n        fn = fn.effect.fn;\n    }\n    const _effect = new ReactiveEffect(fn);\n    if (options) {\n        extend(_effect, options);\n        if (options.scope)\n            recordEffectScope(_effect, options.scope);\n    }\n    if (!options || !options.lazy) {\n        _effect.run();\n    }\n    const runner = _effect.run.bind(_effect);\n    runner.effect = _effect;\n    return runner;\n}\nfunction stop(runner) {\n    runner.effect.stop();\n}\nlet shouldTrack = true;\nconst trackStack = [];\nfunction pauseTracking() {\n    trackStack.push(shouldTrack);\n    shouldTrack = false;\n}\nfunction enableTracking() {\n    trackStack.push(shouldTrack);\n    shouldTrack = true;\n}\nfunction resetTracking() {\n    const last = trackStack.pop();\n    shouldTrack = last === undefined ? true : last;\n}\nfunction track(target, type, key) {\n    if (shouldTrack && activeEffect) {\n        let depsMap = targetMap.get(target);\n        if (!depsMap) {\n            targetMap.set(target, (depsMap = new Map()));\n        }\n        let dep = depsMap.get(key);\n        if (!dep) {\n            depsMap.set(key, (dep = createDep()));\n        }\n        const eventInfo = { effect: activeEffect, target, type, key }\n            ;\n        trackEffects(dep, eventInfo);\n    }\n}\nfunction trackEffects(dep, debuggerEventExtraInfo) {\n    let shouldTrack = false;\n    if (effectTrackDepth <= maxMarkerBits) {\n        if (!newTracked(dep)) {\n            dep.n |= trackOpBit; // set newly tracked\n            shouldTrack = !wasTracked(dep);\n        }\n    }\n    else {\n        // Full cleanup mode.\n        shouldTrack = !dep.has(activeEffect);\n    }\n    if (shouldTrack) {\n        dep.add(activeEffect);\n        activeEffect.deps.push(dep);\n        if (activeEffect.onTrack) {\n            activeEffect.onTrack(Object.assign({ effect: activeEffect }, debuggerEventExtraInfo));\n        }\n    }\n}\nfunction trigger(target, type, key, newValue, oldValue, oldTarget) {\n    const depsMap = targetMap.get(target);\n    if (!depsMap) {\n        // never been tracked\n        return;\n    }\n    let deps = [];\n    if (type === \"clear\" /* TriggerOpTypes.CLEAR */) {\n        // collection being cleared\n        // trigger all effects for target\n        deps = [...depsMap.values()];\n    }\n    else if (key === 'length' && isArray(target)) {\n        const newLength = Number(newValue);\n        depsMap.forEach((dep, key) => {\n            if (key === 'length' || key >= newLength) {\n                deps.push(dep);\n            }\n        });\n    }\n    else {\n        // schedule runs for SET | ADD | DELETE\n        if (key !== void 0) {\n            deps.push(depsMap.get(key));\n        }\n        // also run for iteration key on ADD | DELETE | Map.SET\n        switch (type) {\n            case \"add\" /* TriggerOpTypes.ADD */:\n                if (!isArray(target)) {\n                    deps.push(depsMap.get(ITERATE_KEY));\n                    if (isMap(target)) {\n                        deps.push(depsMap.get(MAP_KEY_ITERATE_KEY));\n                    }\n                }\n                else if (isIntegerKey(key)) {\n                    // new index added to array -> length changes\n                    deps.push(depsMap.get('length'));\n                }\n                break;\n            case \"delete\" /* TriggerOpTypes.DELETE */:\n                if (!isArray(target)) {\n                    deps.push(depsMap.get(ITERATE_KEY));\n                    if (isMap(target)) {\n                        deps.push(depsMap.get(MAP_KEY_ITERATE_KEY));\n                    }\n                }\n                break;\n            case \"set\" /* TriggerOpTypes.SET */:\n                if (isMap(target)) {\n                    deps.push(depsMap.get(ITERATE_KEY));\n                }\n                break;\n        }\n    }\n    const eventInfo = { target, type, key, newValue, oldValue, oldTarget }\n        ;\n    if (deps.length === 1) {\n        if (deps[0]) {\n            {\n                triggerEffects(deps[0], eventInfo);\n            }\n        }\n    }\n    else {\n        const effects = [];\n        for (const dep of deps) {\n            if (dep) {\n                effects.push(...dep);\n            }\n        }\n        {\n            triggerEffects(createDep(effects), eventInfo);\n        }\n    }\n}\nfunction triggerEffects(dep, debuggerEventExtraInfo) {\n    // spread into array for stabilization\n    const effects = isArray(dep) ? dep : [...dep];\n    for (const effect of effects) {\n        if (effect.computed) {\n            triggerEffect(effect, debuggerEventExtraInfo);\n        }\n    }\n    for (const effect of effects) {\n        if (!effect.computed) {\n            triggerEffect(effect, debuggerEventExtraInfo);\n        }\n    }\n}\nfunction triggerEffect(effect, debuggerEventExtraInfo) {\n    if (effect !== activeEffect || effect.allowRecurse) {\n        if (effect.onTrigger) {\n            effect.onTrigger(extend({ effect }, debuggerEventExtraInfo));\n        }\n        if (effect.scheduler) {\n            effect.scheduler();\n        }\n        else {\n            effect.run();\n        }\n    }\n}\nfunction getDepFromReactive(object, key) {\n    var _a;\n    return (_a = targetMap.get(object)) === null || _a === void 0 ? void 0 : _a.get(key);\n}\n\nconst isNonTrackableKeys = /*#__PURE__*/ makeMap(`__proto__,__v_isRef,__isVue`);\nconst builtInSymbols = new Set(\n/*#__PURE__*/\nObject.getOwnPropertyNames(Symbol)\n    // ios10.x Object.getOwnPropertyNames(Symbol) can enumerate 'arguments' and 'caller'\n    // but accessing them on Symbol leads to TypeError because Symbol is a strict mode\n    // function\n    .filter(key => key !== 'arguments' && key !== 'caller')\n    .map(key => Symbol[key])\n    .filter(isSymbol));\nconst get$1 = /*#__PURE__*/ createGetter();\nconst shallowGet = /*#__PURE__*/ createGetter(false, true);\nconst readonlyGet = /*#__PURE__*/ createGetter(true);\nconst shallowReadonlyGet = /*#__PURE__*/ createGetter(true, true);\nconst arrayInstrumentations = /*#__PURE__*/ createArrayInstrumentations();\nfunction createArrayInstrumentations() {\n    const instrumentations = {};\n    ['includes', 'indexOf', 'lastIndexOf'].forEach(key => {\n        instrumentations[key] = function (...args) {\n            const arr = toRaw(this);\n            for (let i = 0, l = this.length; i < l; i++) {\n                track(arr, \"get\" /* TrackOpTypes.GET */, i + '');\n            }\n            // we run the method using the original args first (which may be reactive)\n            const res = arr[key](...args);\n            if (res === -1 || res === false) {\n                // if that didn't work, run it again using raw values.\n                return arr[key](...args.map(toRaw));\n            }\n            else {\n                return res;\n            }\n        };\n    });\n    ['push', 'pop', 'shift', 'unshift', 'splice'].forEach(key => {\n        instrumentations[key] = function (...args) {\n            pauseTracking();\n            const res = toRaw(this)[key].apply(this, args);\n            resetTracking();\n            return res;\n        };\n    });\n    return instrumentations;\n}\nfunction hasOwnProperty(key) {\n    const obj = toRaw(this);\n    track(obj, \"has\" /* TrackOpTypes.HAS */, key);\n    return obj.hasOwnProperty(key);\n}\nfunction createGetter(isReadonly = false, shallow = false) {\n    return function get(target, key, receiver) {\n        if (key === \"__v_isReactive\" /* ReactiveFlags.IS_REACTIVE */) {\n            return !isReadonly;\n        }\n        else if (key === \"__v_isReadonly\" /* ReactiveFlags.IS_READONLY */) {\n            return isReadonly;\n        }\n        else if (key === \"__v_isShallow\" /* ReactiveFlags.IS_SHALLOW */) {\n            return shallow;\n        }\n        else if (key === \"__v_raw\" /* ReactiveFlags.RAW */ &&\n            receiver ===\n                (isReadonly\n                    ? shallow\n                        ? shallowReadonlyMap\n                        : readonlyMap\n                    : shallow\n                        ? shallowReactiveMap\n                        : reactiveMap).get(target)) {\n            return target;\n        }\n        const targetIsArray = isArray(target);\n        if (!isReadonly) {\n            if (targetIsArray && hasOwn(arrayInstrumentations, key)) {\n                return Reflect.get(arrayInstrumentations, key, receiver);\n            }\n            if (key === 'hasOwnProperty') {\n                return hasOwnProperty;\n            }\n        }\n        const res = Reflect.get(target, key, receiver);\n        if (isSymbol(key) ? builtInSymbols.has(key) : isNonTrackableKeys(key)) {\n            return res;\n        }\n        if (!isReadonly) {\n            track(target, \"get\" /* TrackOpTypes.GET */, key);\n        }\n        if (shallow) {\n            return res;\n        }\n        if (isRef(res)) {\n            // ref unwrapping - skip unwrap for Array + integer key.\n            return targetIsArray && isIntegerKey(key) ? res : res.value;\n        }\n        if (isObject(res)) {\n            // Convert returned value into a proxy as well. we do the isObject check\n            // here to avoid invalid value warning. Also need to lazy access readonly\n            // and reactive here to avoid circular dependency.\n            return isReadonly ? readonly(res) : reactive(res);\n        }\n        return res;\n    };\n}\nconst set$1 = /*#__PURE__*/ createSetter();\nconst shallowSet = /*#__PURE__*/ createSetter(true);\nfunction createSetter(shallow = false) {\n    return function set(target, key, value, receiver) {\n        let oldValue = target[key];\n        if (isReadonly(oldValue) && isRef(oldValue) && !isRef(value)) {\n            return false;\n        }\n        if (!shallow) {\n            if (!isShallow(value) && !isReadonly(value)) {\n                oldValue = toRaw(oldValue);\n                value = toRaw(value);\n            }\n            if (!isArray(target) && isRef(oldValue) && !isRef(value)) {\n                oldValue.value = value;\n                return true;\n            }\n        }\n        const hadKey = isArray(target) && isIntegerKey(key)\n            ? Number(key) < target.length\n            : hasOwn(target, key);\n        const result = Reflect.set(target, key, value, receiver);\n        // don't trigger if target is something up in the prototype chain of original\n        if (target === toRaw(receiver)) {\n            if (!hadKey) {\n                trigger(target, \"add\" /* TriggerOpTypes.ADD */, key, value);\n            }\n            else if (hasChanged(value, oldValue)) {\n                trigger(target, \"set\" /* TriggerOpTypes.SET */, key, value, oldValue);\n            }\n        }\n        return result;\n    };\n}\nfunction deleteProperty(target, key) {\n    const hadKey = hasOwn(target, key);\n    const oldValue = target[key];\n    const result = Reflect.deleteProperty(target, key);\n    if (result && hadKey) {\n        trigger(target, \"delete\" /* TriggerOpTypes.DELETE */, key, undefined, oldValue);\n    }\n    return result;\n}\nfunction has$1(target, key) {\n    const result = Reflect.has(target, key);\n    if (!isSymbol(key) || !builtInSymbols.has(key)) {\n        track(target, \"has\" /* TrackOpTypes.HAS */, key);\n    }\n    return result;\n}\nfunction ownKeys(target) {\n    track(target, \"iterate\" /* TrackOpTypes.ITERATE */, isArray(target) ? 'length' : ITERATE_KEY);\n    return Reflect.ownKeys(target);\n}\nconst mutableHandlers = {\n    get: get$1,\n    set: set$1,\n    deleteProperty,\n    has: has$1,\n    ownKeys\n};\nconst readonlyHandlers = {\n    get: readonlyGet,\n    set(target, key) {\n        {\n            warn(`Set operation on key \"${String(key)}\" failed: target is readonly.`, target);\n        }\n        return true;\n    },\n    deleteProperty(target, key) {\n        {\n            warn(`Delete operation on key \"${String(key)}\" failed: target is readonly.`, target);\n        }\n        return true;\n    }\n};\nconst shallowReactiveHandlers = /*#__PURE__*/ extend({}, mutableHandlers, {\n    get: shallowGet,\n    set: shallowSet\n});\n// Props handlers are special in the sense that it should not unwrap top-level\n// refs (in order to allow refs to be explicitly passed down), but should\n// retain the reactivity of the normal readonly object.\nconst shallowReadonlyHandlers = /*#__PURE__*/ extend({}, readonlyHandlers, {\n    get: shallowReadonlyGet\n});\n\nconst toShallow = (value) => value;\nconst getProto = (v) => Reflect.getPrototypeOf(v);\nfunction get(target, key, isReadonly = false, isShallow = false) {\n    // #1772: readonly(reactive(Map)) should return readonly + reactive version\n    // of the value\n    target = target[\"__v_raw\" /* ReactiveFlags.RAW */];\n    const rawTarget = toRaw(target);\n    const rawKey = toRaw(key);\n    if (!isReadonly) {\n        if (key !== rawKey) {\n            track(rawTarget, \"get\" /* TrackOpTypes.GET */, key);\n        }\n        track(rawTarget, \"get\" /* TrackOpTypes.GET */, rawKey);\n    }\n    const { has } = getProto(rawTarget);\n    const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive;\n    if (has.call(rawTarget, key)) {\n        return wrap(target.get(key));\n    }\n    else if (has.call(rawTarget, rawKey)) {\n        return wrap(target.get(rawKey));\n    }\n    else if (target !== rawTarget) {\n        // #3602 readonly(reactive(Map))\n        // ensure that the nested reactive `Map` can do tracking for itself\n        target.get(key);\n    }\n}\nfunction has(key, isReadonly = false) {\n    const target = this[\"__v_raw\" /* ReactiveFlags.RAW */];\n    const rawTarget = toRaw(target);\n    const rawKey = toRaw(key);\n    if (!isReadonly) {\n        if (key !== rawKey) {\n            track(rawTarget, \"has\" /* TrackOpTypes.HAS */, key);\n        }\n        track(rawTarget, \"has\" /* TrackOpTypes.HAS */, rawKey);\n    }\n    return key === rawKey\n        ? target.has(key)\n        : target.has(key) || target.has(rawKey);\n}\nfunction size(target, isReadonly = false) {\n    target = target[\"__v_raw\" /* ReactiveFlags.RAW */];\n    !isReadonly && track(toRaw(target), \"iterate\" /* TrackOpTypes.ITERATE */, ITERATE_KEY);\n    return Reflect.get(target, 'size', target);\n}\nfunction add(value) {\n    value = toRaw(value);\n    const target = toRaw(this);\n    const proto = getProto(target);\n    const hadKey = proto.has.call(target, value);\n    if (!hadKey) {\n        target.add(value);\n        trigger(target, \"add\" /* TriggerOpTypes.ADD */, value, value);\n    }\n    return this;\n}\nfunction set(key, value) {\n    value = toRaw(value);\n    const target = toRaw(this);\n    const { has, get } = getProto(target);\n    let hadKey = has.call(target, key);\n    if (!hadKey) {\n        key = toRaw(key);\n        hadKey = has.call(target, key);\n    }\n    else {\n        checkIdentityKeys(target, has, key);\n    }\n    const oldValue = get.call(target, key);\n    target.set(key, value);\n    if (!hadKey) {\n        trigger(target, \"add\" /* TriggerOpTypes.ADD */, key, value);\n    }\n    else if (hasChanged(value, oldValue)) {\n        trigger(target, \"set\" /* TriggerOpTypes.SET */, key, value, oldValue);\n    }\n    return this;\n}\nfunction deleteEntry(key) {\n    const target = toRaw(this);\n    const { has, get } = getProto(target);\n    let hadKey = has.call(target, key);\n    if (!hadKey) {\n        key = toRaw(key);\n        hadKey = has.call(target, key);\n    }\n    else {\n        checkIdentityKeys(target, has, key);\n    }\n    const oldValue = get ? get.call(target, key) : undefined;\n    // forward the operation before queueing reactions\n    const result = target.delete(key);\n    if (hadKey) {\n        trigger(target, \"delete\" /* TriggerOpTypes.DELETE */, key, undefined, oldValue);\n    }\n    return result;\n}\nfunction clear() {\n    const target = toRaw(this);\n    const hadItems = target.size !== 0;\n    const oldTarget = isMap(target)\n            ? new Map(target)\n            : new Set(target)\n        ;\n    // forward the operation before queueing reactions\n    const result = target.clear();\n    if (hadItems) {\n        trigger(target, \"clear\" /* TriggerOpTypes.CLEAR */, undefined, undefined, oldTarget);\n    }\n    return result;\n}\nfunction createForEach(isReadonly, isShallow) {\n    return function forEach(callback, thisArg) {\n        const observed = this;\n        const target = observed[\"__v_raw\" /* ReactiveFlags.RAW */];\n        const rawTarget = toRaw(target);\n        const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive;\n        !isReadonly && track(rawTarget, \"iterate\" /* TrackOpTypes.ITERATE */, ITERATE_KEY);\n        return target.forEach((value, key) => {\n            // important: make sure the callback is\n            // 1. invoked with the reactive map as `this` and 3rd arg\n            // 2. the value received should be a corresponding reactive/readonly.\n            return callback.call(thisArg, wrap(value), wrap(key), observed);\n        });\n    };\n}\nfunction createIterableMethod(method, isReadonly, isShallow) {\n    return function (...args) {\n        const target = this[\"__v_raw\" /* ReactiveFlags.RAW */];\n        const rawTarget = toRaw(target);\n        const targetIsMap = isMap(rawTarget);\n        const isPair = method === 'entries' || (method === Symbol.iterator && targetIsMap);\n        const isKeyOnly = method === 'keys' && targetIsMap;\n        const innerIterator = target[method](...args);\n        const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive;\n        !isReadonly &&\n            track(rawTarget, \"iterate\" /* TrackOpTypes.ITERATE */, isKeyOnly ? MAP_KEY_ITERATE_KEY : ITERATE_KEY);\n        // return a wrapped iterator which returns observed versions of the\n        // values emitted from the real iterator\n        return {\n            // iterator protocol\n            next() {\n                const { value, done } = innerIterator.next();\n                return done\n                    ? { value, done }\n                    : {\n                        value: isPair ? [wrap(value[0]), wrap(value[1])] : wrap(value),\n                        done\n                    };\n            },\n            // iterable protocol\n            [Symbol.iterator]() {\n                return this;\n            }\n        };\n    };\n}\nfunction createReadonlyMethod(type) {\n    return function (...args) {\n        {\n            const key = args[0] ? `on key \"${args[0]}\" ` : ``;\n            console.warn(`${capitalize(type)} operation ${key}failed: target is readonly.`, toRaw(this));\n        }\n        return type === \"delete\" /* TriggerOpTypes.DELETE */ ? false : this;\n    };\n}\nfunction createInstrumentations() {\n    const mutableInstrumentations = {\n        get(key) {\n            return get(this, key);\n        },\n        get size() {\n            return size(this);\n        },\n        has,\n        add,\n        set,\n        delete: deleteEntry,\n        clear,\n        forEach: createForEach(false, false)\n    };\n    const shallowInstrumentations = {\n        get(key) {\n            return get(this, key, false, true);\n        },\n        get size() {\n            return size(this);\n        },\n        has,\n        add,\n        set,\n        delete: deleteEntry,\n        clear,\n        forEach: createForEach(false, true)\n    };\n    const readonlyInstrumentations = {\n        get(key) {\n            return get(this, key, true);\n        },\n        get size() {\n            return size(this, true);\n        },\n        has(key) {\n            return has.call(this, key, true);\n        },\n        add: createReadonlyMethod(\"add\" /* TriggerOpTypes.ADD */),\n        set: createReadonlyMethod(\"set\" /* TriggerOpTypes.SET */),\n        delete: createReadonlyMethod(\"delete\" /* TriggerOpTypes.DELETE */),\n        clear: createReadonlyMethod(\"clear\" /* TriggerOpTypes.CLEAR */),\n        forEach: createForEach(true, false)\n    };\n    const shallowReadonlyInstrumentations = {\n        get(key) {\n            return get(this, key, true, true);\n        },\n        get size() {\n            return size(this, true);\n        },\n        has(key) {\n            return has.call(this, key, true);\n        },\n        add: createReadonlyMethod(\"add\" /* TriggerOpTypes.ADD */),\n        set: createReadonlyMethod(\"set\" /* TriggerOpTypes.SET */),\n        delete: createReadonlyMethod(\"delete\" /* TriggerOpTypes.DELETE */),\n        clear: createReadonlyMethod(\"clear\" /* TriggerOpTypes.CLEAR */),\n        forEach: createForEach(true, true)\n    };\n    const iteratorMethods = ['keys', 'values', 'entries', Symbol.iterator];\n    iteratorMethods.forEach(method => {\n        mutableInstrumentations[method] = createIterableMethod(method, false, false);\n        readonlyInstrumentations[method] = createIterableMethod(method, true, false);\n        shallowInstrumentations[method] = createIterableMethod(method, false, true);\n        shallowReadonlyInstrumentations[method] = createIterableMethod(method, true, true);\n    });\n    return [\n        mutableInstrumentations,\n        readonlyInstrumentations,\n        shallowInstrumentations,\n        shallowReadonlyInstrumentations\n    ];\n}\nconst [mutableInstrumentations, readonlyInstrumentations, shallowInstrumentations, shallowReadonlyInstrumentations] = /* #__PURE__*/ createInstrumentations();\nfunction createInstrumentationGetter(isReadonly, shallow) {\n    const instrumentations = shallow\n        ? isReadonly\n            ? shallowReadonlyInstrumentations\n            : shallowInstrumentations\n        : isReadonly\n            ? readonlyInstrumentations\n            : mutableInstrumentations;\n    return (target, key, receiver) => {\n        if (key === \"__v_isReactive\" /* ReactiveFlags.IS_REACTIVE */) {\n            return !isReadonly;\n        }\n        else if (key === \"__v_isReadonly\" /* ReactiveFlags.IS_READONLY */) {\n            return isReadonly;\n        }\n        else if (key === \"__v_raw\" /* ReactiveFlags.RAW */) {\n            return target;\n        }\n        return Reflect.get(hasOwn(instrumentations, key) && key in target\n            ? instrumentations\n            : target, key, receiver);\n    };\n}\nconst mutableCollectionHandlers = {\n    get: /*#__PURE__*/ createInstrumentationGetter(false, false)\n};\nconst shallowCollectionHandlers = {\n    get: /*#__PURE__*/ createInstrumentationGetter(false, true)\n};\nconst readonlyCollectionHandlers = {\n    get: /*#__PURE__*/ createInstrumentationGetter(true, false)\n};\nconst shallowReadonlyCollectionHandlers = {\n    get: /*#__PURE__*/ createInstrumentationGetter(true, true)\n};\nfunction checkIdentityKeys(target, has, key) {\n    const rawKey = toRaw(key);\n    if (rawKey !== key && has.call(target, rawKey)) {\n        const type = toRawType(target);\n        console.warn(`Reactive ${type} contains both the raw and reactive ` +\n            `versions of the same object${type === `Map` ? ` as keys` : ``}, ` +\n            `which can lead to inconsistencies. ` +\n            `Avoid differentiating between the raw and reactive versions ` +\n            `of an object and only use the reactive version if possible.`);\n    }\n}\n\nconst reactiveMap = new WeakMap();\nconst shallowReactiveMap = new WeakMap();\nconst readonlyMap = new WeakMap();\nconst shallowReadonlyMap = new WeakMap();\nfunction targetTypeMap(rawType) {\n    switch (rawType) {\n        case 'Object':\n        case 'Array':\n            return 1 /* TargetType.COMMON */;\n        case 'Map':\n        case 'Set':\n        case 'WeakMap':\n        case 'WeakSet':\n            return 2 /* TargetType.COLLECTION */;\n        default:\n            return 0 /* TargetType.INVALID */;\n    }\n}\nfunction getTargetType(value) {\n    return value[\"__v_skip\" /* ReactiveFlags.SKIP */] || !Object.isExtensible(value)\n        ? 0 /* TargetType.INVALID */\n        : targetTypeMap(toRawType(value));\n}\nfunction reactive(target) {\n    // if trying to observe a readonly proxy, return the readonly version.\n    if (isReadonly(target)) {\n        return target;\n    }\n    return createReactiveObject(target, false, mutableHandlers, mutableCollectionHandlers, reactiveMap);\n}\n/**\n * Return a shallowly-reactive copy of the original object, where only the root\n * level properties are reactive. It also does not auto-unwrap refs (even at the\n * root level).\n */\nfunction shallowReactive(target) {\n    return createReactiveObject(target, false, shallowReactiveHandlers, shallowCollectionHandlers, shallowReactiveMap);\n}\n/**\n * Creates a readonly copy of the original object. Note the returned copy is not\n * made reactive, but `readonly` can be called on an already reactive object.\n */\nfunction readonly(target) {\n    return createReactiveObject(target, true, readonlyHandlers, readonlyCollectionHandlers, readonlyMap);\n}\n/**\n * Returns a reactive-copy of the original object, where only the root level\n * properties are readonly, and does NOT unwrap refs nor recursively convert\n * returned properties.\n * This is used for creating the props proxy object for stateful components.\n */\nfunction shallowReadonly(target) {\n    return createReactiveObject(target, true, shallowReadonlyHandlers, shallowReadonlyCollectionHandlers, shallowReadonlyMap);\n}\nfunction createReactiveObject(target, isReadonly, baseHandlers, collectionHandlers, proxyMap) {\n    if (!isObject(target)) {\n        {\n            console.warn(`value cannot be made reactive: ${String(target)}`);\n        }\n        return target;\n    }\n    // target is already a Proxy, return it.\n    // exception: calling readonly() on a reactive object\n    if (target[\"__v_raw\" /* ReactiveFlags.RAW */] &&\n        !(isReadonly && target[\"__v_isReactive\" /* ReactiveFlags.IS_REACTIVE */])) {\n        return target;\n    }\n    // target already has corresponding Proxy\n    const existingProxy = proxyMap.get(target);\n    if (existingProxy) {\n        return existingProxy;\n    }\n    // only specific value types can be observed.\n    const targetType = getTargetType(target);\n    if (targetType === 0 /* TargetType.INVALID */) {\n        return target;\n    }\n    const proxy = new Proxy(target, targetType === 2 /* TargetType.COLLECTION */ ? collectionHandlers : baseHandlers);\n    proxyMap.set(target, proxy);\n    return proxy;\n}\nfunction isReactive(value) {\n    if (isReadonly(value)) {\n        return isReactive(value[\"__v_raw\" /* ReactiveFlags.RAW */]);\n    }\n    return !!(value && value[\"__v_isReactive\" /* ReactiveFlags.IS_REACTIVE */]);\n}\nfunction isReadonly(value) {\n    return !!(value && value[\"__v_isReadonly\" /* ReactiveFlags.IS_READONLY */]);\n}\nfunction isShallow(value) {\n    return !!(value && value[\"__v_isShallow\" /* ReactiveFlags.IS_SHALLOW */]);\n}\nfunction isProxy(value) {\n    return isReactive(value) || isReadonly(value);\n}\nfunction toRaw(observed) {\n    const raw = observed && observed[\"__v_raw\" /* ReactiveFlags.RAW */];\n    return raw ? toRaw(raw) : observed;\n}\nfunction markRaw(value) {\n    def(value, \"__v_skip\" /* ReactiveFlags.SKIP */, true);\n    return value;\n}\nconst toReactive = (value) => isObject(value) ? reactive(value) : value;\nconst toReadonly = (value) => isObject(value) ? readonly(value) : value;\n\nfunction trackRefValue(ref) {\n    if (shouldTrack && activeEffect) {\n        ref = toRaw(ref);\n        {\n            trackEffects(ref.dep || (ref.dep = createDep()), {\n                target: ref,\n                type: \"get\" /* TrackOpTypes.GET */,\n                key: 'value'\n            });\n        }\n    }\n}\nfunction triggerRefValue(ref, newVal) {\n    ref = toRaw(ref);\n    const dep = ref.dep;\n    if (dep) {\n        {\n            triggerEffects(dep, {\n                target: ref,\n                type: \"set\" /* TriggerOpTypes.SET */,\n                key: 'value',\n                newValue: newVal\n            });\n        }\n    }\n}\nfunction isRef(r) {\n    return !!(r && r.__v_isRef === true);\n}\nfunction ref(value) {\n    return createRef(value, false);\n}\nfunction shallowRef(value) {\n    return createRef(value, true);\n}\nfunction createRef(rawValue, shallow) {\n    if (isRef(rawValue)) {\n        return rawValue;\n    }\n    return new RefImpl(rawValue, shallow);\n}\nclass RefImpl {\n    constructor(value, __v_isShallow) {\n        this.__v_isShallow = __v_isShallow;\n        this.dep = undefined;\n        this.__v_isRef = true;\n        this._rawValue = __v_isShallow ? value : toRaw(value);\n        this._value = __v_isShallow ? value : toReactive(value);\n    }\n    get value() {\n        trackRefValue(this);\n        return this._value;\n    }\n    set value(newVal) {\n        const useDirectValue = this.__v_isShallow || isShallow(newVal) || isReadonly(newVal);\n        newVal = useDirectValue ? newVal : toRaw(newVal);\n        if (hasChanged(newVal, this._rawValue)) {\n            this._rawValue = newVal;\n            this._value = useDirectValue ? newVal : toReactive(newVal);\n            triggerRefValue(this, newVal);\n        }\n    }\n}\nfunction triggerRef(ref) {\n    triggerRefValue(ref, ref.value );\n}\nfunction unref(ref) {\n    return isRef(ref) ? ref.value : ref;\n}\nconst shallowUnwrapHandlers = {\n    get: (target, key, receiver) => unref(Reflect.get(target, key, receiver)),\n    set: (target, key, value, receiver) => {\n        const oldValue = target[key];\n        if (isRef(oldValue) && !isRef(value)) {\n            oldValue.value = value;\n            return true;\n        }\n        else {\n            return Reflect.set(target, key, value, receiver);\n        }\n    }\n};\nfunction proxyRefs(objectWithRefs) {\n    return isReactive(objectWithRefs)\n        ? objectWithRefs\n        : new Proxy(objectWithRefs, shallowUnwrapHandlers);\n}\nclass CustomRefImpl {\n    constructor(factory) {\n        this.dep = undefined;\n        this.__v_isRef = true;\n        const { get, set } = factory(() => trackRefValue(this), () => triggerRefValue(this));\n        this._get = get;\n        this._set = set;\n    }\n    get value() {\n        return this._get();\n    }\n    set value(newVal) {\n        this._set(newVal);\n    }\n}\nfunction customRef(factory) {\n    return new CustomRefImpl(factory);\n}\nfunction toRefs(object) {\n    if (!isProxy(object)) {\n        console.warn(`toRefs() expects a reactive object but received a plain one.`);\n    }\n    const ret = isArray(object) ? new Array(object.length) : {};\n    for (const key in object) {\n        ret[key] = toRef(object, key);\n    }\n    return ret;\n}\nclass ObjectRefImpl {\n    constructor(_object, _key, _defaultValue) {\n        this._object = _object;\n        this._key = _key;\n        this._defaultValue = _defaultValue;\n        this.__v_isRef = true;\n    }\n    get value() {\n        const val = this._object[this._key];\n        return val === undefined ? this._defaultValue : val;\n    }\n    set value(newVal) {\n        this._object[this._key] = newVal;\n    }\n    get dep() {\n        return getDepFromReactive(toRaw(this._object), this._key);\n    }\n}\nfunction toRef(object, key, defaultValue) {\n    const val = object[key];\n    return isRef(val)\n        ? val\n        : new ObjectRefImpl(object, key, defaultValue);\n}\n\nvar _a$1;\nclass ComputedRefImpl {\n    constructor(getter, _setter, isReadonly, isSSR) {\n        this._setter = _setter;\n        this.dep = undefined;\n        this.__v_isRef = true;\n        this[_a$1] = false;\n        this._dirty = true;\n        this.effect = new ReactiveEffect(getter, () => {\n            if (!this._dirty) {\n                this._dirty = true;\n                triggerRefValue(this);\n            }\n        });\n        this.effect.computed = this;\n        this.effect.active = this._cacheable = !isSSR;\n        this[\"__v_isReadonly\" /* ReactiveFlags.IS_READONLY */] = isReadonly;\n    }\n    get value() {\n        // the computed ref may get wrapped by other proxies e.g. readonly() #3376\n        const self = toRaw(this);\n        trackRefValue(self);\n        if (self._dirty || !self._cacheable) {\n            self._dirty = false;\n            self._value = self.effect.run();\n        }\n        return self._value;\n    }\n    set value(newValue) {\n        this._setter(newValue);\n    }\n}\n_a$1 = \"__v_isReadonly\" /* ReactiveFlags.IS_READONLY */;\nfunction computed(getterOrOptions, debugOptions, isSSR = false) {\n    let getter;\n    let setter;\n    const onlyGetter = isFunction(getterOrOptions);\n    if (onlyGetter) {\n        getter = getterOrOptions;\n        setter = () => {\n                console.warn('Write operation failed: computed value is readonly');\n            }\n            ;\n    }\n    else {\n        getter = getterOrOptions.get;\n        setter = getterOrOptions.set;\n    }\n    const cRef = new ComputedRefImpl(getter, setter, onlyGetter || !setter, isSSR);\n    if (debugOptions && !isSSR) {\n        cRef.effect.onTrack = debugOptions.onTrack;\n        cRef.effect.onTrigger = debugOptions.onTrigger;\n    }\n    return cRef;\n}\n\nvar _a;\nconst tick = /*#__PURE__*/ Promise.resolve();\nconst queue = [];\nlet queued = false;\nconst scheduler = (fn) => {\n    queue.push(fn);\n    if (!queued) {\n        queued = true;\n        tick.then(flush);\n    }\n};\nconst flush = () => {\n    for (let i = 0; i < queue.length; i++) {\n        queue[i]();\n    }\n    queue.length = 0;\n    queued = false;\n};\nclass DeferredComputedRefImpl {\n    constructor(getter) {\n        this.dep = undefined;\n        this._dirty = true;\n        this.__v_isRef = true;\n        this[_a] = true;\n        let compareTarget;\n        let hasCompareTarget = false;\n        let scheduled = false;\n        this.effect = new ReactiveEffect(getter, (computedTrigger) => {\n            if (this.dep) {\n                if (computedTrigger) {\n                    compareTarget = this._value;\n                    hasCompareTarget = true;\n                }\n                else if (!scheduled) {\n                    const valueToCompare = hasCompareTarget ? compareTarget : this._value;\n                    scheduled = true;\n                    hasCompareTarget = false;\n                    scheduler(() => {\n                        if (this.effect.active && this._get() !== valueToCompare) {\n                            triggerRefValue(this);\n                        }\n                        scheduled = false;\n                    });\n                }\n                // chained upstream computeds are notified synchronously to ensure\n                // value invalidation in case of sync access; normal effects are\n                // deferred to be triggered in scheduler.\n                for (const e of this.dep) {\n                    if (e.computed instanceof DeferredComputedRefImpl) {\n                        e.scheduler(true /* computedTrigger */);\n                    }\n                }\n            }\n            this._dirty = true;\n        });\n        this.effect.computed = this;\n    }\n    _get() {\n        if (this._dirty) {\n            this._dirty = false;\n            return (this._value = this.effect.run());\n        }\n        return this._value;\n    }\n    get value() {\n        trackRefValue(this);\n        // the computed ref may get wrapped by other proxies e.g. readonly() #3376\n        return toRaw(this)._get();\n    }\n}\n_a = \"__v_isReadonly\" /* ReactiveFlags.IS_READONLY */;\nfunction deferredComputed(getter) {\n    return new DeferredComputedRefImpl(getter);\n}\n\nexport { EffectScope, ITERATE_KEY, ReactiveEffect, computed, customRef, deferredComputed, effect, effectScope, enableTracking, getCurrentScope, isProxy, isReactive, isReadonly, isRef, isShallow, markRaw, onScopeDispose, pauseTracking, proxyRefs, reactive, readonly, ref, resetTracking, shallowReactive, shallowReadonly, shallowRef, stop, toRaw, toRef, toRefs, track, trigger, triggerRef, unref };\n/package.json\u0003{\n  \"name\": \"@vue/reactivity\",\n  \"version\": \"3.2.47\",\n  \"description\": \"@vue/reactivity\",\n  \"main\": \"index.js\",\n  \"module\": \"dist/reactivity.esm-bundler.js\",\n  \"types\": \"dist/reactivity.d.ts\",\n  \"unpkg\": \"dist/reactivity.global.js\",\n  \"jsdelivr\": \"dist/reactivity.global.js\",\n  \"files\": [\n    \"index.js\",\n    \"dist\"\n  ],\n  \"sideEffects\": false,\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/vuejs/core.git\",\n    \"directory\": \"packages/reactivity\"\n  },\n  \"buildOptions\": {\n    \"name\": \"VueReactivity\",\n    \"formats\": [\n      \"esm-bundler\",\n      \"esm-browser\",\n      \"cjs\",\n      \"global\"\n    ]\n  },\n  \"keywords\": [\n    \"vue\"\n  ],\n  \"author\": \"Evan You\",\n  \"license\": \"MIT\",\n  \"bugs\": {\n    \"url\": \"https://github.com/vuejs/core/issues\"\n  },\n  \"homepage\": \"https://github.com/vuejs/core/tree/main/packages/reactivity#readme\",\n  \"dependencies\": {\n    \"@vue/shared\": \"3.2.47\"\n  }\n}\n/index.jsĹ'use strict'\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./dist/reactivity.cjs.prod.js')\n} else {\n  module.exports = require('./dist/reactivity.cjs.js')\n}\n/dist/reactivity.cjs.jsŦ\r'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar shared = require('@vue/shared');\n\nfunction warn(msg, ...args) {\n    console.warn(`[Vue warn] ${msg}`, ...args);\n}\n\nlet activeEffectScope;\nclass EffectScope {\n    constructor(detached = false) {\n        this.detached = detached;\n        /**\n         * @internal\n         */\n        this._active = true;\n        /**\n         * @internal\n         */\n        this.effects = [];\n        /**\n         * @internal\n         */\n        this.cleanups = [];\n        this.parent = activeEffectScope;\n        if (!detached && activeEffectScope) {\n            this.index =\n                (activeEffectScope.scopes || (activeEffectScope.scopes = [])).push(this) - 1;\n        }\n    }\n    get active() {\n        return this._active;\n    }\n    run(fn) {\n        if (this._active) {\n            const currentEffectScope = activeEffectScope;\n            try {\n                activeEffectScope = this;\n                return fn();\n            }\n            finally {\n                activeEffectScope = currentEffectScope;\n            }\n        }\n        else {\n            warn(`cannot run an inactive effect scope.`);\n        }\n    }\n    /**\n     * This should only be called on non-detached scopes\n     * @internal\n     */\n    on() {\n        activeEffectScope = this;\n    }\n    /**\n     * This should only be called on non-detached scopes\n     * @internal\n     */\n    off() {\n        activeEffectScope = this.parent;\n    }\n    stop(fromParent) {\n        if (this._active) {\n            let i, l;\n            for (i = 0, l = this.effects.length; i < l; i++) {\n                this.effects[i].stop();\n            }\n            for (i = 0, l = this.cleanups.length; i < l; i++) {\n                this.cleanups[i]();\n            }\n            if (this.scopes) {\n                for (i = 0, l = this.scopes.length; i < l; i++) {\n                    this.scopes[i].stop(true);\n                }\n            }\n            // nested scope, dereference from parent to avoid memory leaks\n            if (!this.detached && this.parent && !fromParent) {\n                // optimized O(1) removal\n                const last = this.parent.scopes.pop();\n                if (last && last !== this) {\n                    this.parent.scopes[this.index] = last;\n                    last.index = this.index;\n                }\n            }\n            this.parent = undefined;\n            this._active = false;\n        }\n    }\n}\nfunction effectScope(detached) {\n    return new EffectScope(detached);\n}\nfunction recordEffectScope(effect, scope = activeEffectScope) {\n    if (scope && scope.active) {\n        scope.effects.push(effect);\n    }\n}\nfunction getCurrentScope() {\n    return activeEffectScope;\n}\nfunction onScopeDispose(fn) {\n    if (activeEffectScope) {\n        activeEffectScope.cleanups.push(fn);\n    }\n    else {\n        warn(`onScopeDispose() is called when there is no active effect scope` +\n            ` to be associated with.`);\n    }\n}\n\nconst createDep = (effects) => {\n    const dep = new Set(effects);\n    dep.w = 0;\n    dep.n = 0;\n    return dep;\n};\nconst wasTracked = (dep) => (dep.w & trackOpBit) > 0;\nconst newTracked = (dep) => (dep.n & trackOpBit) > 0;\nconst initDepMarkers = ({ deps }) => {\n    if (deps.length) {\n        for (let i = 0; i < deps.length; i++) {\n            deps[i].w |= trackOpBit; // set was tracked\n        }\n    }\n};\nconst finalizeDepMarkers = (effect) => {\n    const { deps } = effect;\n    if (deps.length) {\n        let ptr = 0;\n        for (let i = 0; i < deps.length; i++) {\n            const dep = deps[i];\n            if (wasTracked(dep) && !newTracked(dep)) {\n                dep.delete(effect);\n            }\n            else {\n                deps[ptr++] = dep;\n            }\n            // clear bits\n            dep.w &= ~trackOpBit;\n            dep.n &= ~trackOpBit;\n        }\n        deps.length = ptr;\n    }\n};\n\nconst targetMap = new WeakMap();\n// The number of effects currently being tracked recursively.\nlet effectTrackDepth = 0;\nlet trackOpBit = 1;\n/**\n * The bitwise track markers support at most 30 levels of recursion.\n * This value is chosen to enable modern JS engines to use a SMI on all platforms.\n * When recursion depth is greater, fall back to using a full cleanup.\n */\nconst maxMarkerBits = 30;\nlet activeEffect;\nconst ITERATE_KEY = Symbol('iterate' );\nconst MAP_KEY_ITERATE_KEY = Symbol('Map key iterate' );\nclass ReactiveEffect {\n    constructor(fn, scheduler = null, scope) {\n        this.fn = fn;\n        this.scheduler = scheduler;\n        this.active = true;\n        this.deps = [];\n        this.parent = undefined;\n        recordEffectScope(this, scope);\n    }\n    run() {\n        if (!this.active) {\n            return this.fn();\n        }\n        let parent = activeEffect;\n        let lastShouldTrack = shouldTrack;\n        while (parent) {\n            if (parent === this) {\n                return;\n            }\n            parent = parent.parent;\n        }\n        try {\n            this.parent = activeEffect;\n            activeEffect = this;\n            shouldTrack = true;\n            trackOpBit = 1 << ++effectTrackDepth;\n            if (effectTrackDepth <= maxMarkerBits) {\n                initDepMarkers(this);\n            }\n            else {\n                cleanupEffect(this);\n            }\n            return this.fn();\n        }\n        finally {\n            if (effectTrackDepth <= maxMarkerBits) {\n                finalizeDepMarkers(this);\n            }\n            trackOpBit = 1 << --effectTrackDepth;\n            activeEffect = this.parent;\n            shouldTrack = lastShouldTrack;\n            this.parent = undefined;\n            if (this.deferStop) {\n                this.stop();\n            }\n        }\n    }\n    stop() {\n        // stopped while running itself - defer the cleanup\n        if (activeEffect === this) {\n            this.deferStop = true;\n        }\n        else if (this.active) {\n            cleanupEffect(this);\n            if (this.onStop) {\n                this.onStop();\n            }\n            this.active = false;\n        }\n    }\n}\nfunction cleanupEffect(effect) {\n    const { deps } = effect;\n    if (deps.length) {\n        for (let i = 0; i < deps.length; i++) {\n            deps[i].delete(effect);\n        }\n        deps.length = 0;\n    }\n}\nfunction effect(fn, options) {\n    if (fn.effect) {\n        fn = fn.effect.fn;\n    }\n    const _effect = new ReactiveEffect(fn);\n    if (options) {\n        shared.extend(_effect, options);\n        if (options.scope)\n            recordEffectScope(_effect, options.scope);\n    }\n    if (!options || !options.lazy) {\n        _effect.run();\n    }\n    const runner = _effect.run.bind(_effect);\n    runner.effect = _effect;\n    return runner;\n}\nfunction stop(runner) {\n    runner.effect.stop();\n}\nlet shouldTrack = true;\nconst trackStack = [];\nfunction pauseTracking() {\n    trackStack.push(shouldTrack);\n    shouldTrack = false;\n}\nfunction enableTracking() {\n    trackStack.push(shouldTrack);\n    shouldTrack = true;\n}\nfunction resetTracking() {\n    const last = trackStack.pop();\n    shouldTrack = last === undefined ? true : last;\n}\nfunction track(target, type, key) {\n    if (shouldTrack && activeEffect) {\n        let depsMap = targetMap.get(target);\n        if (!depsMap) {\n            targetMap.set(target, (depsMap = new Map()));\n        }\n        let dep = depsMap.get(key);\n        if (!dep) {\n            depsMap.set(key, (dep = createDep()));\n        }\n        const eventInfo = { effect: activeEffect, target, type, key }\n            ;\n        trackEffects(dep, eventInfo);\n    }\n}\nfunction trackEffects(dep, debuggerEventExtraInfo) {\n    let shouldTrack = false;\n    if (effectTrackDepth <= maxMarkerBits) {\n        if (!newTracked(dep)) {\n            dep.n |= trackOpBit; // set newly tracked\n            shouldTrack = !wasTracked(dep);\n        }\n    }\n    else {\n        // Full cleanup mode.\n        shouldTrack = !dep.has(activeEffect);\n    }\n    if (shouldTrack) {\n        dep.add(activeEffect);\n        activeEffect.deps.push(dep);\n        if (activeEffect.onTrack) {\n            activeEffect.onTrack({\n                effect: activeEffect,\n                ...debuggerEventExtraInfo\n            });\n        }\n    }\n}\nfunction trigger(target, type, key, newValue, oldValue, oldTarget) {\n    const depsMap = targetMap.get(target);\n    if (!depsMap) {\n        // never been tracked\n        return;\n    }\n    let deps = [];\n    if (type === \"clear\" /* TriggerOpTypes.CLEAR */) {\n        // collection being cleared\n        // trigger all effects for target\n        deps = [...depsMap.values()];\n    }\n    else if (key === 'length' && shared.isArray(target)) {\n        const newLength = Number(newValue);\n        depsMap.forEach((dep, key) => {\n            if (key === 'length' || key >= newLength) {\n                deps.push(dep);\n            }\n        });\n    }\n    else {\n        // schedule runs for SET | ADD | DELETE\n        if (key !== void 0) {\n            deps.push(depsMap.get(key));\n        }\n        // also run for iteration key on ADD | DELETE | Map.SET\n        switch (type) {\n            case \"add\" /* TriggerOpTypes.ADD */:\n                if (!shared.isArray(target)) {\n                    deps.push(depsMap.get(ITERATE_KEY));\n                    if (shared.isMap(target)) {\n                        deps.push(depsMap.get(MAP_KEY_ITERATE_KEY));\n                    }\n                }\n                else if (shared.isIntegerKey(key)) {\n                    // new index added to array -> length changes\n                    deps.push(depsMap.get('length'));\n                }\n                break;\n            case \"delete\" /* TriggerOpTypes.DELETE */:\n                if (!shared.isArray(target)) {\n                    deps.push(depsMap.get(ITERATE_KEY));\n                    if (shared.isMap(target)) {\n                        deps.push(depsMap.get(MAP_KEY_ITERATE_KEY));\n                    }\n                }\n                break;\n            case \"set\" /* TriggerOpTypes.SET */:\n                if (shared.isMap(target)) {\n                    deps.push(depsMap.get(ITERATE_KEY));\n                }\n                break;\n        }\n    }\n    const eventInfo = { target, type, key, newValue, oldValue, oldTarget }\n        ;\n    if (deps.length === 1) {\n        if (deps[0]) {\n            {\n                triggerEffects(deps[0], eventInfo);\n            }\n        }\n    }\n    else {\n        const effects = [];\n        for (const dep of deps) {\n            if (dep) {\n                effects.push(...dep);\n            }\n        }\n        {\n            triggerEffects(createDep(effects), eventInfo);\n        }\n    }\n}\nfunction triggerEffects(dep, debuggerEventExtraInfo) {\n    // spread into array for stabilization\n    const effects = shared.isArray(dep) ? dep : [...dep];\n    for (const effect of effects) {\n        if (effect.computed) {\n            triggerEffect(effect, debuggerEventExtraInfo);\n        }\n    }\n    for (const effect of effects) {\n        if (!effect.computed) {\n            triggerEffect(effect, debuggerEventExtraInfo);\n        }\n    }\n}\nfunction triggerEffect(effect, debuggerEventExtraInfo) {\n    if (effect !== activeEffect || effect.allowRecurse) {\n        if (effect.onTrigger) {\n            effect.onTrigger(shared.extend({ effect }, debuggerEventExtraInfo));\n        }\n        if (effect.scheduler) {\n            effect.scheduler();\n        }\n        else {\n            effect.run();\n        }\n    }\n}\nfunction getDepFromReactive(object, key) {\n    var _a;\n    return (_a = targetMap.get(object)) === null || _a === void 0 ? void 0 : _a.get(key);\n}\n\nconst isNonTrackableKeys = /*#__PURE__*/ shared.makeMap(`__proto__,__v_isRef,__isVue`);\nconst builtInSymbols = new Set(\n/*#__PURE__*/\nObject.getOwnPropertyNames(Symbol)\n    // ios10.x Object.getOwnPropertyNames(Symbol) can enumerate 'arguments' and 'caller'\n    // but accessing them on Symbol leads to TypeError because Symbol is a strict mode\n    // function\n    .filter(key => key !== 'arguments' && key !== 'caller')\n    .map(key => Symbol[key])\n    .filter(shared.isSymbol));\nconst get$1 = /*#__PURE__*/ createGetter();\nconst shallowGet = /*#__PURE__*/ createGetter(false, true);\nconst readonlyGet = /*#__PURE__*/ createGetter(true);\nconst shallowReadonlyGet = /*#__PURE__*/ createGetter(true, true);\nconst arrayInstrumentations = /*#__PURE__*/ createArrayInstrumentations();\nfunction createArrayInstrumentations() {\n    const instrumentations = {};\n    ['includes', 'indexOf', 'lastIndexOf'].forEach(key => {\n        instrumentations[key] = function (...args) {\n            const arr = toRaw(this);\n            for (let i = 0, l = this.length; i < l; i++) {\n                track(arr, \"get\" /* TrackOpTypes.GET */, i + '');\n            }\n            // we run the method using the original args first (which may be reactive)\n            const res = arr[key](...args);\n            if (res === -1 || res === false) {\n                // if that didn't work, run it again using raw values.\n                return arr[key](...args.map(toRaw));\n            }\n            else {\n                return res;\n            }\n        };\n    });\n    ['push', 'pop', 'shift', 'unshift', 'splice'].forEach(key => {\n        instrumentations[key] = function (...args) {\n            pauseTracking();\n            const res = toRaw(this)[key].apply(this, args);\n            resetTracking();\n            return res;\n        };\n    });\n    return instrumentations;\n}\nfunction hasOwnProperty(key) {\n    const obj = toRaw(this);\n    track(obj, \"has\" /* TrackOpTypes.HAS */, key);\n    return obj.hasOwnProperty(key);\n}\nfunction createGetter(isReadonly = false, shallow = false) {\n    return function get(target, key, receiver) {\n        if (key === \"__v_isReactive\" /* ReactiveFlags.IS_REACTIVE */) {\n            return !isReadonly;\n        }\n        else if (key === \"__v_isReadonly\" /* ReactiveFlags.IS_READONLY */) {\n            return isReadonly;\n        }\n        else if (key === \"__v_isShallow\" /* ReactiveFlags.IS_SHALLOW */) {\n            return shallow;\n        }\n        else if (key === \"__v_raw\" /* ReactiveFlags.RAW */ &&\n            receiver ===\n                (isReadonly\n                    ? shallow\n                        ? shallowReadonlyMap\n                        : readonlyMap\n                    : shallow\n                        ? shallowReactiveMap\n                        : reactiveMap).get(target)) {\n            return target;\n        }\n        const targetIsArray = shared.isArray(target);\n        if (!isReadonly) {\n            if (targetIsArray && shared.hasOwn(arrayInstrumentations, key)) {\n                return Reflect.get(arrayInstrumentations, key, receiver);\n            }\n            if (key === 'hasOwnProperty') {\n                return hasOwnProperty;\n            }\n        }\n        const res = Reflect.get(target, key, receiver);\n        if (shared.isSymbol(key) ? builtInSymbols.has(key) : isNonTrackableKeys(key)) {\n            return res;\n        }\n        if (!isReadonly) {\n            track(target, \"get\" /* TrackOpTypes.GET */, key);\n        }\n        if (shallow) {\n            return res;\n        }\n        if (isRef(res)) {\n            // ref unwrapping - skip unwrap for Array + integer key.\n            return targetIsArray && shared.isIntegerKey(key) ? res : res.value;\n        }\n        if (shared.isObject(res)) {\n            // Convert returned value into a proxy as well. we do the isObject check\n            // here to avoid invalid value warning. Also need to lazy access readonly\n            // and reactive here to avoid circular dependency.\n            return isReadonly ? readonly(res) : reactive(res);\n        }\n        return res;\n    };\n}\nconst set$1 = /*#__PURE__*/ createSetter();\nconst shallowSet = /*#__PURE__*/ createSetter(true);\nfunction createSetter(shallow = false) {\n    return function set(target, key, value, receiver) {\n        let oldValue = target[key];\n        if (isReadonly(oldValue) && isRef(oldValue) && !isRef(value)) {\n            return false;\n        }\n        if (!shallow) {\n            if (!isShallow(value) && !isReadonly(value)) {\n                oldValue = toRaw(oldValue);\n                value = toRaw(value);\n            }\n            if (!shared.isArray(target) && isRef(oldValue) && !isRef(value)) {\n                oldValue.value = value;\n                return true;\n            }\n        }\n        const hadKey = shared.isArray(target) && shared.isIntegerKey(key)\n            ? Number(key) < target.length\n            : shared.hasOwn(target, key);\n        const result = Reflect.set(target, key, value, receiver);\n        // don't trigger if target is something up in the prototype chain of original\n        if (target === toRaw(receiver)) {\n            if (!hadKey) {\n                trigger(target, \"add\" /* TriggerOpTypes.ADD */, key, value);\n            }\n            else if (shared.hasChanged(value, oldValue)) {\n                trigger(target, \"set\" /* TriggerOpTypes.SET */, key, value, oldValue);\n            }\n        }\n        return result;\n    };\n}\nfunction deleteProperty(target, key) {\n    const hadKey = shared.hasOwn(target, key);\n    const oldValue = target[key];\n    const result = Reflect.deleteProperty(target, key);\n    if (result && hadKey) {\n        trigger(target, \"delete\" /* TriggerOpTypes.DELETE */, key, undefined, oldValue);\n    }\n    return result;\n}\nfunction has$1(target, key) {\n    const result = Reflect.has(target, key);\n    if (!shared.isSymbol(key) || !builtInSymbols.has(key)) {\n        track(target, \"has\" /* TrackOpTypes.HAS */, key);\n    }\n    return result;\n}\nfunction ownKeys(target) {\n    track(target, \"iterate\" /* TrackOpTypes.ITERATE */, shared.isArray(target) ? 'length' : ITERATE_KEY);\n    return Reflect.ownKeys(target);\n}\nconst mutableHandlers = {\n    get: get$1,\n    set: set$1,\n    deleteProperty,\n    has: has$1,\n    ownKeys\n};\nconst readonlyHandlers = {\n    get: readonlyGet,\n    set(target, key) {\n        {\n            warn(`Set operation on key \"${String(key)}\" failed: target is readonly.`, target);\n        }\n        return true;\n    },\n    deleteProperty(target, key) {\n        {\n            warn(`Delete operation on key \"${String(key)}\" failed: target is readonly.`, target);\n        }\n        return true;\n    }\n};\nconst shallowReactiveHandlers = /*#__PURE__*/ shared.extend({}, mutableHandlers, {\n    get: shallowGet,\n    set: shallowSet\n});\n// Props handlers are special in the sense that it should not unwrap top-level\n// refs (in order to allow refs to be explicitly passed down), but should\n// retain the reactivity of the normal readonly object.\nconst shallowReadonlyHandlers = /*#__PURE__*/ shared.extend({}, readonlyHandlers, {\n    get: shallowReadonlyGet\n});\n\nconst toShallow = (value) => value;\nconst getProto = (v) => Reflect.getPrototypeOf(v);\nfunction get(target, key, isReadonly = false, isShallow = false) {\n    // #1772: readonly(reactive(Map)) should return readonly + reactive version\n    // of the value\n    target = target[\"__v_raw\" /* ReactiveFlags.RAW */];\n    const rawTarget = toRaw(target);\n    const rawKey = toRaw(key);\n    if (!isReadonly) {\n        if (key !== rawKey) {\n            track(rawTarget, \"get\" /* TrackOpTypes.GET */, key);\n        }\n        track(rawTarget, \"get\" /* TrackOpTypes.GET */, rawKey);\n    }\n    const { has } = getProto(rawTarget);\n    const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive;\n    if (has.call(rawTarget, key)) {\n        return wrap(target.get(key));\n    }\n    else if (has.call(rawTarget, rawKey)) {\n        return wrap(target.get(rawKey));\n    }\n    else if (target !== rawTarget) {\n        // #3602 readonly(reactive(Map))\n        // ensure that the nested reactive `Map` can do tracking for itself\n        target.get(key);\n    }\n}\nfunction has(key, isReadonly = false) {\n    const target = this[\"__v_raw\" /* ReactiveFlags.RAW */];\n    const rawTarget = toRaw(target);\n    const rawKey = toRaw(key);\n    if (!isReadonly) {\n        if (key !== rawKey) {\n            track(rawTarget, \"has\" /* TrackOpTypes.HAS */, key);\n        }\n        track(rawTarget, \"has\" /* TrackOpTypes.HAS */, rawKey);\n    }\n    return key === rawKey\n        ? target.has(key)\n        : target.has(key) || target.has(rawKey);\n}\nfunction size(target, isReadonly = false) {\n    target = target[\"__v_raw\" /* ReactiveFlags.RAW */];\n    !isReadonly && track(toRaw(target), \"iterate\" /* TrackOpTypes.ITERATE */, ITERATE_KEY);\n    return Reflect.get(target, 'size', target);\n}\nfunction add(value) {\n    value = toRaw(value);\n    const target = toRaw(this);\n    const proto = getProto(target);\n    const hadKey = proto.has.call(target, value);\n    if (!hadKey) {\n        target.add(value);\n        trigger(target, \"add\" /* TriggerOpTypes.ADD */, value, value);\n    }\n    return this;\n}\nfunction set(key, value) {\n    value = toRaw(value);\n    const target = toRaw(this);\n    const { has, get } = getProto(target);\n    let hadKey = has.call(target, key);\n    if (!hadKey) {\n        key = toRaw(key);\n        hadKey = has.call(target, key);\n    }\n    else {\n        checkIdentityKeys(target, has, key);\n    }\n    const oldValue = get.call(target, key);\n    target.set(key, value);\n    if (!hadKey) {\n        trigger(target, \"add\" /* TriggerOpTypes.ADD */, key, value);\n    }\n    else if (shared.hasChanged(value, oldValue)) {\n        trigger(target, \"set\" /* TriggerOpTypes.SET */, key, value, oldValue);\n    }\n    return this;\n}\nfunction deleteEntry(key) {\n    const target = toRaw(this);\n    const { has, get } = getProto(target);\n    let hadKey = has.call(target, key);\n    if (!hadKey) {\n        key = toRaw(key);\n        hadKey = has.call(target, key);\n    }\n    else {\n        checkIdentityKeys(target, has, key);\n    }\n    const oldValue = get ? get.call(target, key) : undefined;\n    // forward the operation before queueing reactions\n    const result = target.delete(key);\n    if (hadKey) {\n        trigger(target, \"delete\" /* TriggerOpTypes.DELETE */, key, undefined, oldValue);\n    }\n    return result;\n}\nfunction clear() {\n    const target = toRaw(this);\n    const hadItems = target.size !== 0;\n    const oldTarget = shared.isMap(target)\n            ? new Map(target)\n            : new Set(target)\n        ;\n    // forward the operation before queueing reactions\n    const result = target.clear();\n    if (hadItems) {\n        trigger(target, \"clear\" /* TriggerOpTypes.CLEAR */, undefined, undefined, oldTarget);\n    }\n    return result;\n}\nfunction createForEach(isReadonly, isShallow) {\n    return function forEach(callback, thisArg) {\n        const observed = this;\n        const target = observed[\"__v_raw\" /* ReactiveFlags.RAW */];\n        const rawTarget = toRaw(target);\n        const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive;\n        !isReadonly && track(rawTarget, \"iterate\" /* TrackOpTypes.ITERATE */, ITERATE_KEY);\n        return target.forEach((value, key) => {\n            // important: make sure the callback is\n            // 1. invoked with the reactive map as `this` and 3rd arg\n            // 2. the value received should be a corresponding reactive/readonly.\n            return callback.call(thisArg, wrap(value), wrap(key), observed);\n        });\n    };\n}\nfunction createIterableMethod(method, isReadonly, isShallow) {\n    return function (...args) {\n        const target = this[\"__v_raw\" /* ReactiveFlags.RAW */];\n        const rawTarget = toRaw(target);\n        const targetIsMap = shared.isMap(rawTarget);\n        const isPair = method === 'entries' || (method === Symbol.iterator && targetIsMap);\n        const isKeyOnly = method === 'keys' && targetIsMap;\n        const innerIterator = target[method](...args);\n        const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive;\n        !isReadonly &&\n            track(rawTarget, \"iterate\" /* TrackOpTypes.ITERATE */, isKeyOnly ? MAP_KEY_ITERATE_KEY : ITERATE_KEY);\n        // return a wrapped iterator which returns observed versions of the\n        // values emitted from the real iterator\n        return {\n            // iterator protocol\n            next() {\n                const { value, done } = innerIterator.next();\n                return done\n                    ? { value, done }\n                    : {\n                        value: isPair ? [wrap(value[0]), wrap(value[1])] : wrap(value),\n                        done\n                    };\n            },\n            // iterable protocol\n            [Symbol.iterator]() {\n                return this;\n            }\n        };\n    };\n}\nfunction createReadonlyMethod(type) {\n    return function (...args) {\n        {\n            const key = args[0] ? `on key \"${args[0]}\" ` : ``;\n            console.warn(`${shared.capitalize(type)} operation ${key}failed: target is readonly.`, toRaw(this));\n        }\n        return type === \"delete\" /* TriggerOpTypes.DELETE */ ? false : this;\n    };\n}\nfunction createInstrumentations() {\n    const mutableInstrumentations = {\n        get(key) {\n            return get(this, key);\n        },\n        get size() {\n            return size(this);\n        },\n        has,\n        add,\n        set,\n        delete: deleteEntry,\n        clear,\n        forEach: createForEach(false, false)\n    };\n    const shallowInstrumentations = {\n        get(key) {\n            return get(this, key, false, true);\n        },\n        get size() {\n            return size(this);\n        },\n        has,\n        add,\n        set,\n        delete: deleteEntry,\n        clear,\n        forEach: createForEach(false, true)\n    };\n    const readonlyInstrumentations = {\n        get(key) {\n            return get(this, key, true);\n        },\n        get size() {\n            return size(this, true);\n        },\n        has(key) {\n            return has.call(this, key, true);\n        },\n        add: createReadonlyMethod(\"add\" /* TriggerOpTypes.ADD */),\n        set: createReadonlyMethod(\"set\" /* TriggerOpTypes.SET */),\n        delete: createReadonlyMethod(\"delete\" /* TriggerOpTypes.DELETE */),\n        clear: createReadonlyMethod(\"clear\" /* TriggerOpTypes.CLEAR */),\n        forEach: createForEach(true, false)\n    };\n    const shallowReadonlyInstrumentations = {\n        get(key) {\n            return get(this, key, true, true);\n        },\n        get size() {\n            return size(this, true);\n        },\n        has(key) {\n            return has.call(this, key, true);\n        },\n        add: createReadonlyMethod(\"add\" /* TriggerOpTypes.ADD */),\n        set: createReadonlyMethod(\"set\" /* TriggerOpTypes.SET */),\n        delete: createReadonlyMethod(\"delete\" /* TriggerOpTypes.DELETE */),\n        clear: createReadonlyMethod(\"clear\" /* TriggerOpTypes.CLEAR */),\n        forEach: createForEach(true, true)\n    };\n    const iteratorMethods = ['keys', 'values', 'entries', Symbol.iterator];\n    iteratorMethods.forEach(method => {\n        mutableInstrumentations[method] = createIterableMethod(method, false, false);\n        readonlyInstrumentations[method] = createIterableMethod(method, true, false);\n        shallowInstrumentations[method] = createIterableMethod(method, false, true);\n        shallowReadonlyInstrumentations[method] = createIterableMethod(method, true, true);\n    });\n    return [\n        mutableInstrumentations,\n        readonlyInstrumentations,\n        shallowInstrumentations,\n        shallowReadonlyInstrumentations\n    ];\n}\nconst [mutableInstrumentations, readonlyInstrumentations, shallowInstrumentations, shallowReadonlyInstrumentations] = /* #__PURE__*/ createInstrumentations();\nfunction createInstrumentationGetter(isReadonly, shallow) {\n    const instrumentations = shallow\n        ? isReadonly\n            ? shallowReadonlyInstrumentations\n            : shallowInstrumentations\n        : isReadonly\n            ? readonlyInstrumentations\n            : mutableInstrumentations;\n    return (target, key, receiver) => {\n        if (key === \"__v_isReactive\" /* ReactiveFlags.IS_REACTIVE */) {\n            return !isReadonly;\n        }\n        else if (key === \"__v_isReadonly\" /* ReactiveFlags.IS_READONLY */) {\n            return isReadonly;\n        }\n        else if (key === \"__v_raw\" /* ReactiveFlags.RAW */) {\n            return target;\n        }\n        return Reflect.get(shared.hasOwn(instrumentations, key) && key in target\n            ? instrumentations\n            : target, key, receiver);\n    };\n}\nconst mutableCollectionHandlers = {\n    get: /*#__PURE__*/ createInstrumentationGetter(false, false)\n};\nconst shallowCollectionHandlers = {\n    get: /*#__PURE__*/ createInstrumentationGetter(false, true)\n};\nconst readonlyCollectionHandlers = {\n    get: /*#__PURE__*/ createInstrumentationGetter(true, false)\n};\nconst shallowReadonlyCollectionHandlers = {\n    get: /*#__PURE__*/ createInstrumentationGetter(true, true)\n};\nfunction checkIdentityKeys(target, has, key) {\n    const rawKey = toRaw(key);\n    if (rawKey !== key && has.call(target, rawKey)) {\n        const type = shared.toRawType(target);\n        console.warn(`Reactive ${type} contains both the raw and reactive ` +\n            `versions of the same object${type === `Map` ? ` as keys` : ``}, ` +\n            `which can lead to inconsistencies. ` +\n            `Avoid differentiating between the raw and reactive versions ` +\n            `of an object and only use the reactive version if possible.`);\n    }\n}\n\nconst reactiveMap = new WeakMap();\nconst shallowReactiveMap = new WeakMap();\nconst readonlyMap = new WeakMap();\nconst shallowReadonlyMap = new WeakMap();\nfunction targetTypeMap(rawType) {\n    switch (rawType) {\n        case 'Object':\n        case 'Array':\n            return 1 /* TargetType.COMMON */;\n        case 'Map':\n        case 'Set':\n        case 'WeakMap':\n        case 'WeakSet':\n            return 2 /* TargetType.COLLECTION */;\n        default:\n            return 0 /* TargetType.INVALID */;\n    }\n}\nfunction getTargetType(value) {\n    return value[\"__v_skip\" /* ReactiveFlags.SKIP */] || !Object.isExtensible(value)\n        ? 0 /* TargetType.INVALID */\n        : targetTypeMap(shared.toRawType(value));\n}\nfunction reactive(target) {\n    // if trying to observe a readonly proxy, return the readonly version.\n    if (isReadonly(target)) {\n        return target;\n    }\n    return createReactiveObject(target, false, mutableHandlers, mutableCollectionHandlers, reactiveMap);\n}\n/**\n * Return a shallowly-reactive copy of the original object, where only the root\n * level properties are reactive. It also does not auto-unwrap refs (even at the\n * root level).\n */\nfunction shallowReactive(target) {\n    return createReactiveObject(target, false, shallowReactiveHandlers, shallowCollectionHandlers, shallowReactiveMap);\n}\n/**\n * Creates a readonly copy of the original object. Note the returned copy is not\n * made reactive, but `readonly` can be called on an already reactive object.\n */\nfunction readonly(target) {\n    return createReactiveObject(target, true, readonlyHandlers, readonlyCollectionHandlers, readonlyMap);\n}\n/**\n * Returns a reactive-copy of the original object, where only the root level\n * properties are readonly, and does NOT unwrap refs nor recursively convert\n * returned properties.\n * This is used for creating the props proxy object for stateful components.\n */\nfunction shallowReadonly(target) {\n    return createReactiveObject(target, true, shallowReadonlyHandlers, shallowReadonlyCollectionHandlers, shallowReadonlyMap);\n}\nfunction createReactiveObject(target, isReadonly, baseHandlers, collectionHandlers, proxyMap) {\n    if (!shared.isObject(target)) {\n        {\n            console.warn(`value cannot be made reactive: ${String(target)}`);\n        }\n        return target;\n    }\n    // target is already a Proxy, return it.\n    // exception: calling readonly() on a reactive object\n    if (target[\"__v_raw\" /* ReactiveFlags.RAW */] &&\n        !(isReadonly && target[\"__v_isReactive\" /* ReactiveFlags.IS_REACTIVE */])) {\n        return target;\n    }\n    // target already has corresponding Proxy\n    const existingProxy = proxyMap.get(target);\n    if (existingProxy) {\n        return existingProxy;\n    }\n    // only specific value types can be observed.\n    const targetType = getTargetType(target);\n    if (targetType === 0 /* TargetType.INVALID */) {\n        return target;\n    }\n    const proxy = new Proxy(target, targetType === 2 /* TargetType.COLLECTION */ ? collectionHandlers : baseHandlers);\n    proxyMap.set(target, proxy);\n    return proxy;\n}\nfunction isReactive(value) {\n    if (isReadonly(value)) {\n        return isReactive(value[\"__v_raw\" /* ReactiveFlags.RAW */]);\n    }\n    return !!(value && value[\"__v_isReactive\" /* ReactiveFlags.IS_REACTIVE */]);\n}\nfunction isReadonly(value) {\n    return !!(value && value[\"__v_isReadonly\" /* ReactiveFlags.IS_READONLY */]);\n}\nfunction isShallow(value) {\n    return !!(value && value[\"__v_isShallow\" /* ReactiveFlags.IS_SHALLOW */]);\n}\nfunction isProxy(value) {\n    return isReactive(value) || isReadonly(value);\n}\nfunction toRaw(observed) {\n    const raw = observed && observed[\"__v_raw\" /* ReactiveFlags.RAW */];\n    return raw ? toRaw(raw) : observed;\n}\nfunction markRaw(value) {\n    shared.def(value, \"__v_skip\" /* ReactiveFlags.SKIP */, true);\n    return value;\n}\nconst toReactive = (value) => shared.isObject(value) ? reactive(value) : value;\nconst toReadonly = (value) => shared.isObject(value) ? readonly(value) : value;\n\nfunction trackRefValue(ref) {\n    if (shouldTrack && activeEffect) {\n        ref = toRaw(ref);\n        {\n            trackEffects(ref.dep || (ref.dep = createDep()), {\n                target: ref,\n                type: \"get\" /* TrackOpTypes.GET */,\n                key: 'value'\n            });\n        }\n    }\n}\nfunction triggerRefValue(ref, newVal) {\n    ref = toRaw(ref);\n    const dep = ref.dep;\n    if (dep) {\n        {\n            triggerEffects(dep, {\n                target: ref,\n                type: \"set\" /* TriggerOpTypes.SET */,\n                key: 'value',\n                newValue: newVal\n            });\n        }\n    }\n}\nfunction isRef(r) {\n    return !!(r && r.__v_isRef === true);\n}\nfunction ref(value) {\n    return createRef(value, false);\n}\nfunction shallowRef(value) {\n    return createRef(value, true);\n}\nfunction createRef(rawValue, shallow) {\n    if (isRef(rawValue)) {\n        return rawValue;\n    }\n    return new RefImpl(rawValue, shallow);\n}\nclass RefImpl {\n    constructor(value, __v_isShallow) {\n        this.__v_isShallow = __v_isShallow;\n        this.dep = undefined;\n        this.__v_isRef = true;\n        this._rawValue = __v_isShallow ? value : toRaw(value);\n        this._value = __v_isShallow ? value : toReactive(value);\n    }\n    get value() {\n        trackRefValue(this);\n        return this._value;\n    }\n    set value(newVal) {\n        const useDirectValue = this.__v_isShallow || isShallow(newVal) || isReadonly(newVal);\n        newVal = useDirectValue ? newVal : toRaw(newVal);\n        if (shared.hasChanged(newVal, this._rawValue)) {\n            this._rawValue = newVal;\n            this._value = useDirectValue ? newVal : toReactive(newVal);\n            triggerRefValue(this, newVal);\n        }\n    }\n}\nfunction triggerRef(ref) {\n    triggerRefValue(ref, ref.value );\n}\nfunction unref(ref) {\n    return isRef(ref) ? ref.value : ref;\n}\nconst shallowUnwrapHandlers = {\n    get: (target, key, receiver) => unref(Reflect.get(target, key, receiver)),\n    set: (target, key, value, receiver) => {\n        const oldValue = target[key];\n        if (isRef(oldValue) && !isRef(value)) {\n            oldValue.value = value;\n            return true;\n        }\n        else {\n            return Reflect.set(target, key, value, receiver);\n        }\n    }\n};\nfunction proxyRefs(objectWithRefs) {\n    return isReactive(objectWithRefs)\n        ? objectWithRefs\n        : new Proxy(objectWithRefs, shallowUnwrapHandlers);\n}\nclass CustomRefImpl {\n    constructor(factory) {\n        this.dep = undefined;\n        this.__v_isRef = true;\n        const { get, set } = factory(() => trackRefValue(this), () => triggerRefValue(this));\n        this._get = get;\n        this._set = set;\n    }\n    get value() {\n        return this._get();\n    }\n    set value(newVal) {\n        this._set(newVal);\n    }\n}\nfunction customRef(factory) {\n    return new CustomRefImpl(factory);\n}\nfunction toRefs(object) {\n    if (!isProxy(object)) {\n        console.warn(`toRefs() expects a reactive object but received a plain one.`);\n    }\n    const ret = shared.isArray(object) ? new Array(object.length) : {};\n    for (const key in object) {\n        ret[key] = toRef(object, key);\n    }\n    return ret;\n}\nclass ObjectRefImpl {\n    constructor(_object, _key, _defaultValue) {\n        this._object = _object;\n        this._key = _key;\n        this._defaultValue = _defaultValue;\n        this.__v_isRef = true;\n    }\n    get value() {\n        const val = this._object[this._key];\n        return val === undefined ? this._defaultValue : val;\n    }\n    set value(newVal) {\n        this._object[this._key] = newVal;\n    }\n    get dep() {\n        return getDepFromReactive(toRaw(this._object), this._key);\n    }\n}\nfunction toRef(object, key, defaultValue) {\n    const val = object[key];\n    return isRef(val)\n        ? val\n        : new ObjectRefImpl(object, key, defaultValue);\n}\n\nvar _a$1;\nclass ComputedRefImpl {\n    constructor(getter, _setter, isReadonly, isSSR) {\n        this._setter = _setter;\n        this.dep = undefined;\n        this.__v_isRef = true;\n        this[_a$1] = false;\n        this._dirty = true;\n        this.effect = new ReactiveEffect(getter, () => {\n            if (!this._dirty) {\n                this._dirty = true;\n                triggerRefValue(this);\n            }\n        });\n        this.effect.computed = this;\n        this.effect.active = this._cacheable = !isSSR;\n        this[\"__v_isReadonly\" /* ReactiveFlags.IS_READONLY */] = isReadonly;\n    }\n    get value() {\n        // the computed ref may get wrapped by other proxies e.g. readonly() #3376\n        const self = toRaw(this);\n        trackRefValue(self);\n        if (self._dirty || !self._cacheable) {\n            self._dirty = false;\n            self._value = self.effect.run();\n        }\n        return self._value;\n    }\n    set value(newValue) {\n        this._setter(newValue);\n    }\n}\n_a$1 = \"__v_isReadonly\" /* ReactiveFlags.IS_READONLY */;\nfunction computed(getterOrOptions, debugOptions, isSSR = false) {\n    let getter;\n    let setter;\n    const onlyGetter = shared.isFunction(getterOrOptions);\n    if (onlyGetter) {\n        getter = getterOrOptions;\n        setter = () => {\n                console.warn('Write operation failed: computed value is readonly');\n            }\n            ;\n    }\n    else {\n        getter = getterOrOptions.get;\n        setter = getterOrOptions.set;\n    }\n    const cRef = new ComputedRefImpl(getter, setter, onlyGetter || !setter, isSSR);\n    if (debugOptions && !isSSR) {\n        cRef.effect.onTrack = debugOptions.onTrack;\n        cRef.effect.onTrigger = debugOptions.onTrigger;\n    }\n    return cRef;\n}\n\nvar _a;\nconst tick = /*#__PURE__*/ Promise.resolve();\nconst queue = [];\nlet queued = false;\nconst scheduler = (fn) => {\n    queue.push(fn);\n    if (!queued) {\n        queued = true;\n        tick.then(flush);\n    }\n};\nconst flush = () => {\n    for (let i = 0; i < queue.length; i++) {\n        queue[i]();\n    }\n    queue.length = 0;\n    queued = false;\n};\nclass DeferredComputedRefImpl {\n    constructor(getter) {\n        this.dep = undefined;\n        this._dirty = true;\n        this.__v_isRef = true;\n        this[_a] = true;\n        let compareTarget;\n        let hasCompareTarget = false;\n        let scheduled = false;\n        this.effect = new ReactiveEffect(getter, (computedTrigger) => {\n            if (this.dep) {\n                if (computedTrigger) {\n                    compareTarget = this._value;\n                    hasCompareTarget = true;\n                }\n                else if (!scheduled) {\n                    const valueToCompare = hasCompareTarget ? compareTarget : this._value;\n                    scheduled = true;\n                    hasCompareTarget = false;\n                    scheduler(() => {\n                        if (this.effect.active && this._get() !== valueToCompare) {\n                            triggerRefValue(this);\n                        }\n                        scheduled = false;\n                    });\n                }\n                // chained upstream computeds are notified synchronously to ensure\n                // value invalidation in case of sync access; normal effects are\n                // deferred to be triggered in scheduler.\n                for (const e of this.dep) {\n                    if (e.computed instanceof DeferredComputedRefImpl) {\n                        e.scheduler(true /* computedTrigger */);\n                    }\n                }\n            }\n            this._dirty = true;\n        });\n        this.effect.computed = this;\n    }\n    _get() {\n        if (this._dirty) {\n            this._dirty = false;\n            return (this._value = this.effect.run());\n        }\n        return this._value;\n    }\n    get value() {\n        trackRefValue(this);\n        // the computed ref may get wrapped by other proxies e.g. readonly() #3376\n        return toRaw(this)._get();\n    }\n}\n_a = \"__v_isReadonly\" /* ReactiveFlags.IS_READONLY */;\nfunction deferredComputed(getter) {\n    return new DeferredComputedRefImpl(getter);\n}\n\nexports.EffectScope = EffectScope;\nexports.ITERATE_KEY = ITERATE_KEY;\nexports.ReactiveEffect = ReactiveEffect;\nexports.computed = computed;\nexports.customRef = customRef;\nexports.deferredComputed = deferredComputed;\nexports.effect = effect;\nexports.effectScope = effectScope;\nexports.enableTracking = enableTracking;\nexports.getCurrentScope = getCurrentScope;\nexports.isProxy = isProxy;\nexports.isReactive = isReactive;\nexports.isReadonly = isReadonly;\nexports.isRef = isRef;\nexports.isShallow = isShallow;\nexports.markRaw = markRaw;\nexports.onScopeDispose = onScopeDispose;\nexports.pauseTracking = pauseTracking;\nexports.proxyRefs = proxyRefs;\nexports.reactive = reactive;\nexports.readonly = readonly;\nexports.ref = ref;\nexports.resetTracking = resetTracking;\nexports.shallowReactive = shallowReactive;\nexports.shallowReadonly = shallowReadonly;\nexports.shallowRef = shallowRef;\nexports.stop = stop;\nexports.toRaw = toRaw;\nexports.toRef = toRef;\nexports.toRefs = toRefs;\nexports.track = track;\nexports.trigger = trigger;\nexports.triggerRef = triggerRef;\nexports.unref = unref;\n$/dist/reactivity.esm-browser.prod.js/Sfunction t(t,e){const n=Object.create(null),s=t.split(\",\");for(let i=0;i<s.length;i++)n[s[i]]=!0;return e?t=>!!n[t.toLowerCase()]:t=>!!n[t]}const e=()=>{},n=Object.assign,s=Object.prototype.hasOwnProperty,i=(t,e)=>s.call(t,e),r=Array.isArray,c=t=>\"[object Map]\"===a(t),o=t=>\"symbol\"==typeof t,u=t=>null!==t&&\"object\"==typeof t,h=Object.prototype.toString,a=t=>h.call(t),l=t=>\"string\"==typeof t&&\"NaN\"!==t&&\"-\"!==t[0]&&\"\"+parseInt(t,10)===t,f=(t,e)=>!Object.is(t,e);let _;class d{constructor(t=!1){this.detached=t,this._active=!0,this.effects=[],this.cleanups=[],this.parent=_,!t&&_&&(this.index=(_.scopes||(_.scopes=[])).push(this)-1)}get active(){return this._active}run(t){if(this._active){const e=_;try{return _=this,t()}finally{_=e}}}on(){_=this}off(){_=this.parent}stop(t){if(this._active){let e,n;for(e=0,n=this.effects.length;e<n;e++)this.effects[e].stop();for(e=0,n=this.cleanups.length;e<n;e++)this.cleanups[e]();if(this.scopes)for(e=0,n=this.scopes.length;e<n;e++)this.scopes[e].stop(!0);if(!this.detached&&this.parent&&!t){const t=this.parent.scopes.pop();t&&t!==this&&(this.parent.scopes[this.index]=t,t.index=this.index)}this.parent=void 0,this._active=!1}}}function p(t){return new d(t)}function v(t,e=_){e&&e.active&&e.effects.push(t)}function g(){return _}function y(t){_&&_.cleanups.push(t)}const w=t=>{const e=new Set(t);return e.w=0,e.n=0,e},b=t=>(t.w&k)>0,R=t=>(t.n&k)>0,m=new WeakMap;let S=0,k=1;let O;const j=Symbol(\"\"),x=Symbol(\"\");class P{constructor(t,e=null,n){this.fn=t,this.scheduler=e,this.active=!0,this.deps=[],this.parent=void 0,v(this,n)}run(){if(!this.active)return this.fn();let t=O,e=W;for(;t;){if(t===this)return;t=t.parent}try{return this.parent=O,O=this,W=!0,k=1<<++S,S<=30?(({deps:t})=>{if(t.length)for(let e=0;e<t.length;e++)t[e].w|=k})(this):E(this),this.fn()}finally{S<=30&&(t=>{const{deps:e}=t;if(e.length){let n=0;for(let s=0;s<e.length;s++){const i=e[s];b(i)&&!R(i)?i.delete(t):e[n++]=i,i.w&=~k,i.n&=~k}e.length=n}})(this),k=1<<--S,O=this.parent,W=e,this.parent=void 0,this.deferStop&&this.stop()}}stop(){O===this?this.deferStop=!0:this.active&&(E(this),this.onStop&&this.onStop(),this.active=!1)}}function E(t){const{deps:e}=t;if(e.length){for(let n=0;n<e.length;n++)e[n].delete(t);e.length=0}}function M(t,e){t.effect&&(t=t.effect.fn);const s=new P(t);e&&(n(s,e),e.scope&&v(s,e.scope)),e&&e.lazy||s.run();const i=s.run.bind(s);return i.effect=s,i}function z(t){t.effect.stop()}let W=!0;const V=[];function N(){V.push(W),W=!1}function A(){V.push(W),W=!0}function I(){const t=V.pop();W=void 0===t||t}function K(t,e,n){if(W&&O){let e=m.get(t);e||m.set(t,e=new Map);let s=e.get(n);s||e.set(n,s=w()),C(s)}}function C(t,e){let n=!1;S<=30?R(t)||(t.n|=k,n=!b(t)):n=!t.has(O),n&&(t.add(O),O.deps.push(t))}function L(t,e,n,s,i,o){const u=m.get(t);if(!u)return;let h=[];if(\"clear\"===e)h=[...u.values()];else if(\"length\"===n&&r(t)){const t=Number(s);u.forEach(((e,n)=>{(\"length\"===n||n>=t)&&h.push(e)}))}else switch(void 0!==n&&h.push(u.get(n)),e){case\"add\":r(t)?l(n)&&h.push(u.get(\"length\")):(h.push(u.get(j)),c(t)&&h.push(u.get(x)));break;case\"delete\":r(t)||(h.push(u.get(j)),c(t)&&h.push(u.get(x)));break;case\"set\":c(t)&&h.push(u.get(j))}if(1===h.length)h[0]&&q(h[0]);else{const t=[];for(const e of h)e&&t.push(...e);q(w(t))}}function q(t,e){const n=r(t)?t:[...t];for(const s of n)s.computed&&B(s);for(const s of n)s.computed||B(s)}function B(t,e){(t!==O||t.allowRecurse)&&(t.scheduler?t.scheduler():t.run())}const D=t(\"__proto__,__v_isRef,__isVue\"),F=new Set(Object.getOwnPropertyNames(Symbol).filter((t=>\"arguments\"!==t&&\"caller\"!==t)).map((t=>Symbol[t])).filter(o)),G=Y(),H=Y(!1,!0),J=Y(!0),Q=Y(!0,!0),T=U();function U(){const t={};return[\"includes\",\"indexOf\",\"lastIndexOf\"].forEach((e=>{t[e]=function(...t){const n=Lt(this);for(let e=0,i=this.length;e<i;e++)K(n,0,e+\"\");const s=n[e](...t);return-1===s||!1===s?n[e](...t.map(Lt)):s}})),[\"push\",\"pop\",\"shift\",\"unshift\",\"splice\"].forEach((e=>{t[e]=function(...t){N();const n=Lt(this)[e].apply(this,t);return I(),n}})),t}function X(t){const e=Lt(this);return K(e,0,t),e.hasOwnProperty(t)}function Y(t=!1,e=!1){return function(n,s,c){if(\"__v_isReactive\"===s)return!t;if(\"__v_isReadonly\"===s)return t;if(\"__v_isShallow\"===s)return e;if(\"__v_raw\"===s&&c===(t?e?Pt:xt:e?jt:Ot).get(n))return n;const h=r(n);if(!t){if(h&&i(T,s))return Reflect.get(T,s,c);if(\"hasOwnProperty\"===s)return X}const a=Reflect.get(n,s,c);return(o(s)?F.has(s):D(s))?a:(t||K(n,0,s),e?a:Ht(a)?h&&l(s)?a:a.value:u(a)?t?Wt(a):Mt(a):a)}}function Z(t=!1){return function(e,n,s,c){let o=e[n];if(It(o)&&Ht(o)&&!Ht(s))return!1;if(!t&&(Kt(s)||It(s)||(o=Lt(o),s=Lt(s)),!r(e)&&Ht(o)&&!Ht(s)))return o.value=s,!0;const u=r(e)&&l(n)?Number(n)<e.length:i(e,n),h=Reflect.set(e,n,s,c);return e===Lt(c)&&(u?f(s,o)&&L(e,\"set\",n,s):L(e,\"add\",n,s)),h}}const $={get:G,set:Z(),deleteProperty:function(t,e){const n=i(t,e),s=Reflect.deleteProperty(t,e);return s&&n&&L(t,\"delete\",e,void 0),s},has:function(t,e){const n=Reflect.has(t,e);return o(e)&&F.has(e)||K(t,0,e),n},ownKeys:function(t){return K(t,0,r(t)?\"length\":j),Reflect.ownKeys(t)}},tt={get:J,set:(t,e)=>!0,deleteProperty:(t,e)=>!0},et=n({},$,{get:H,set:Z(!0)}),nt=n({},tt,{get:Q}),st=t=>t,it=t=>Reflect.getPrototypeOf(t);function rt(t,e,n=!1,s=!1){const i=Lt(t=t.__v_raw),r=Lt(e);n||(e!==r&&K(i,0,e),K(i,0,r));const{has:c}=it(i),o=s?st:n?Dt:Bt;return c.call(i,e)?o(t.get(e)):c.call(i,r)?o(t.get(r)):void(t!==i&&t.get(e))}function ct(t,e=!1){const n=this.__v_raw,s=Lt(n),i=Lt(t);return e||(t!==i&&K(s,0,t),K(s,0,i)),t===i?n.has(t):n.has(t)||n.has(i)}function ot(t,e=!1){return t=t.__v_raw,!e&&K(Lt(t),0,j),Reflect.get(t,\"size\",t)}function ut(t){t=Lt(t);const e=Lt(this);return it(e).has.call(e,t)||(e.add(t),L(e,\"add\",t,t)),this}function ht(t,e){e=Lt(e);const n=Lt(this),{has:s,get:i}=it(n);let r=s.call(n,t);r||(t=Lt(t),r=s.call(n,t));const c=i.call(n,t);return n.set(t,e),r?f(e,c)&&L(n,\"set\",t,e):L(n,\"add\",t,e),this}function at(t){const e=Lt(this),{has:n,get:s}=it(e);let i=n.call(e,t);i||(t=Lt(t),i=n.call(e,t)),s&&s.call(e,t);const r=e.delete(t);return i&&L(e,\"delete\",t,void 0),r}function lt(){const t=Lt(this),e=0!==t.size,n=t.clear();return e&&L(t,\"clear\",void 0,void 0),n}function ft(t,e){return function(n,s){const i=this,r=i.__v_raw,c=Lt(r),o=e?st:t?Dt:Bt;return!t&&K(c,0,j),r.forEach(((t,e)=>n.call(s,o(t),o(e),i)))}}function _t(t,e,n){return function(...s){const i=this.__v_raw,r=Lt(i),o=c(r),u=\"entries\"===t||t===Symbol.iterator&&o,h=\"keys\"===t&&o,a=i[t](...s),l=n?st:e?Dt:Bt;return!e&&K(r,0,h?x:j),{next(){const{value:t,done:e}=a.next();return e?{value:t,done:e}:{value:u?[l(t[0]),l(t[1])]:l(t),done:e}},[Symbol.iterator](){return this}}}}function dt(t){return function(...e){return\"delete\"!==t&&this}}function pt(){const t={get(t){return rt(this,t)},get size(){return ot(this)},has:ct,add:ut,set:ht,delete:at,clear:lt,forEach:ft(!1,!1)},e={get(t){return rt(this,t,!1,!0)},get size(){return ot(this)},has:ct,add:ut,set:ht,delete:at,clear:lt,forEach:ft(!1,!0)},n={get(t){return rt(this,t,!0)},get size(){return ot(this,!0)},has(t){return ct.call(this,t,!0)},add:dt(\"add\"),set:dt(\"set\"),delete:dt(\"delete\"),clear:dt(\"clear\"),forEach:ft(!0,!1)},s={get(t){return rt(this,t,!0,!0)},get size(){return ot(this,!0)},has(t){return ct.call(this,t,!0)},add:dt(\"add\"),set:dt(\"set\"),delete:dt(\"delete\"),clear:dt(\"clear\"),forEach:ft(!0,!0)};return[\"keys\",\"values\",\"entries\",Symbol.iterator].forEach((i=>{t[i]=_t(i,!1,!1),n[i]=_t(i,!0,!1),e[i]=_t(i,!1,!0),s[i]=_t(i,!0,!0)})),[t,n,e,s]}const[vt,gt,yt,wt]=pt();function bt(t,e){const n=e?t?wt:yt:t?gt:vt;return(e,s,r)=>\"__v_isReactive\"===s?!t:\"__v_isReadonly\"===s?t:\"__v_raw\"===s?e:Reflect.get(i(n,s)&&s in e?n:e,s,r)}const Rt={get:bt(!1,!1)},mt={get:bt(!1,!0)},St={get:bt(!0,!1)},kt={get:bt(!0,!0)},Ot=new WeakMap,jt=new WeakMap,xt=new WeakMap,Pt=new WeakMap;function Et(t){return t.__v_skip||!Object.isExtensible(t)?0:function(t){switch(t){case\"Object\":case\"Array\":return 1;case\"Map\":case\"Set\":case\"WeakMap\":case\"WeakSet\":return 2;default:return 0}}((t=>a(t).slice(8,-1))(t))}function Mt(t){return It(t)?t:Nt(t,!1,$,Rt,Ot)}function zt(t){return Nt(t,!1,et,mt,jt)}function Wt(t){return Nt(t,!0,tt,St,xt)}function Vt(t){return Nt(t,!0,nt,kt,Pt)}function Nt(t,e,n,s,i){if(!u(t))return t;if(t.__v_raw&&(!e||!t.__v_isReactive))return t;const r=i.get(t);if(r)return r;const c=Et(t);if(0===c)return t;const o=new Proxy(t,2===c?s:n);return i.set(t,o),o}function At(t){return It(t)?At(t.__v_raw):!(!t||!t.__v_isReactive)}function It(t){return!(!t||!t.__v_isReadonly)}function Kt(t){return!(!t||!t.__v_isShallow)}function Ct(t){return At(t)||It(t)}function Lt(t){const e=t&&t.__v_raw;return e?Lt(e):t}function qt(t){return((t,e,n)=>{Object.defineProperty(t,e,{configurable:!0,enumerable:!1,value:n})})(t,\"__v_skip\",!0),t}const Bt=t=>u(t)?Mt(t):t,Dt=t=>u(t)?Wt(t):t;function Ft(t){W&&O&&C((t=Lt(t)).dep||(t.dep=w()))}function Gt(t,e){const n=(t=Lt(t)).dep;n&&q(n)}function Ht(t){return!(!t||!0!==t.__v_isRef)}function Jt(t){return Tt(t,!1)}function Qt(t){return Tt(t,!0)}function Tt(t,e){return Ht(t)?t:new Ut(t,e)}class Ut{constructor(t,e){this.__v_isShallow=e,this.dep=void 0,this.__v_isRef=!0,this._rawValue=e?t:Lt(t),this._value=e?t:Bt(t)}get value(){return Ft(this),this._value}set value(t){const e=this.__v_isShallow||Kt(t)||It(t);t=e?t:Lt(t),f(t,this._rawValue)&&(this._rawValue=t,this._value=e?t:Bt(t),Gt(this))}}function Xt(t){Gt(t)}function Yt(t){return Ht(t)?t.value:t}const Zt={get:(t,e,n)=>Yt(Reflect.get(t,e,n)),set:(t,e,n,s)=>{const i=t[e];return Ht(i)&&!Ht(n)?(i.value=n,!0):Reflect.set(t,e,n,s)}};function $t(t){return At(t)?t:new Proxy(t,Zt)}class te{constructor(t){this.dep=void 0,this.__v_isRef=!0;const{get:e,set:n}=t((()=>Ft(this)),(()=>Gt(this)));this._get=e,this._set=n}get value(){return this._get()}set value(t){this._set(t)}}function ee(t){return new te(t)}function ne(t){const e=r(t)?new Array(t.length):{};for(const n in t)e[n]=ie(t,n);return e}class se{constructor(t,e,n){this._object=t,this._key=e,this._defaultValue=n,this.__v_isRef=!0}get value(){const t=this._object[this._key];return void 0===t?this._defaultValue:t}set value(t){this._object[this._key]=t}get dep(){return function(t,e){var n;return null===(n=m.get(t))||void 0===n?void 0:n.get(e)}(Lt(this._object),this._key)}}function ie(t,e,n){const s=t[e];return Ht(s)?s:new se(t,e,n)}var re,ce;class oe{constructor(t,e,n,s){this._setter=e,this.dep=void 0,this.__v_isRef=!0,this[re]=!1,this._dirty=!0,this.effect=new P(t,(()=>{this._dirty||(this._dirty=!0,Gt(this))})),this.effect.computed=this,this.effect.active=this._cacheable=!s,this.__v_isReadonly=n}get value(){const t=Lt(this);return Ft(t),!t._dirty&&t._cacheable||(t._dirty=!1,t._value=t.effect.run()),t._value}set value(t){this._setter(t)}}function ue(t,n,s=!1){let i,r;const c=\"function\"==typeof t;c?(i=t,r=e):(i=t.get,r=t.set);return new oe(i,r,c||!r,s)}re=\"__v_isReadonly\";const he=Promise.resolve(),ae=[];let le=!1;const fe=()=>{for(let t=0;t<ae.length;t++)ae[t]();ae.length=0,le=!1};class _e{constructor(t){let e;this.dep=void 0,this._dirty=!0,this.__v_isRef=!0,this[ce]=!0;let n=!1,s=!1;this.effect=new P(t,(t=>{if(this.dep){if(t)e=this._value,n=!0;else if(!s){const t=n?e:this._value;s=!0,n=!1,ae.push((()=>{this.effect.active&&this._get()!==t&&Gt(this),s=!1})),le||(le=!0,he.then(fe))}for(const t of this.dep)t.computed instanceof _e&&t.scheduler(!0)}this._dirty=!0})),this.effect.computed=this}_get(){return this._dirty?(this._dirty=!1,this._value=this.effect.run()):this._value}get value(){return Ft(this),Lt(this)._get()}}function de(t){return new _e(t)}ce=\"__v_isReadonly\";export{d as EffectScope,j as ITERATE_KEY,P as ReactiveEffect,ue as computed,ee as customRef,de as deferredComputed,M as effect,p as effectScope,A as enableTracking,g as getCurrentScope,Ct as isProxy,At as isReactive,It as isReadonly,Ht as isRef,Kt as isShallow,qt as markRaw,y as onScopeDispose,N as pauseTracking,$t as proxyRefs,Mt as reactive,Wt as readonly,Jt as ref,I as resetTracking,zt as shallowReactive,Vt as shallowReadonly,Qt as shallowRef,z as stop,Lt as toRaw,ie as toRef,ne as toRefs,K as track,L as trigger,Xt as triggerRef,Yt as unref};\n/dist/reactivity.global.prod.js/5var VueReactivity=function(t){\"use strict\";function e(t,e){const n=Object.create(null),s=t.split(\",\");for(let i=0;i<s.length;i++)n[s[i]]=!0;return e?t=>!!n[t.toLowerCase()]:t=>!!n[t]}const n=()=>{},s=Object.assign,i=Object.prototype.hasOwnProperty,r=(t,e)=>i.call(t,e),c=Array.isArray,o=t=>\"[object Map]\"===l(t),u=t=>\"symbol\"==typeof t,a=t=>null!==t&&\"object\"==typeof t,h=Object.prototype.toString,l=t=>h.call(t),f=t=>\"string\"==typeof t&&\"NaN\"!==t&&\"-\"!==t[0]&&\"\"+parseInt(t,10)===t,_=(t,e)=>!Object.is(t,e);let d;class p{constructor(t=!1){this.detached=t,this._active=!0,this.effects=[],this.cleanups=[],this.parent=d,!t&&d&&(this.index=(d.scopes||(d.scopes=[])).push(this)-1)}get active(){return this._active}run(t){if(this._active){const e=d;try{return d=this,t()}finally{d=e}}}on(){d=this}off(){d=this.parent}stop(t){if(this._active){let e,n;for(e=0,n=this.effects.length;e<n;e++)this.effects[e].stop();for(e=0,n=this.cleanups.length;e<n;e++)this.cleanups[e]();if(this.scopes)for(e=0,n=this.scopes.length;e<n;e++)this.scopes[e].stop(!0);if(!this.detached&&this.parent&&!t){const t=this.parent.scopes.pop();t&&t!==this&&(this.parent.scopes[this.index]=t,t.index=this.index)}this.parent=void 0,this._active=!1}}}function v(t,e=d){e&&e.active&&e.effects.push(t)}const g=t=>{const e=new Set(t);return e.w=0,e.n=0,e},y=t=>(t.w&m)>0,w=t=>(t.n&m)>0,R=new WeakMap;let b=0,m=1;let S;const k=Symbol(\"\"),O=Symbol(\"\");class j{constructor(t,e=null,n){this.fn=t,this.scheduler=e,this.active=!0,this.deps=[],this.parent=void 0,v(this,n)}run(){if(!this.active)return this.fn();let t=S,e=P;for(;t;){if(t===this)return;t=t.parent}try{return this.parent=S,S=this,P=!0,m=1<<++b,b<=30?(({deps:t})=>{if(t.length)for(let e=0;e<t.length;e++)t[e].w|=m})(this):E(this),this.fn()}finally{b<=30&&(t=>{const{deps:e}=t;if(e.length){let n=0;for(let s=0;s<e.length;s++){const i=e[s];y(i)&&!w(i)?i.delete(t):e[n++]=i,i.w&=~m,i.n&=~m}e.length=n}})(this),m=1<<--b,S=this.parent,P=e,this.parent=void 0,this.deferStop&&this.stop()}}stop(){S===this?this.deferStop=!0:this.active&&(E(this),this.onStop&&this.onStop(),this.active=!1)}}function E(t){const{deps:e}=t;if(e.length){for(let n=0;n<e.length;n++)e[n].delete(t);e.length=0}}let P=!0;const x=[];function M(){x.push(P),P=!1}function z(){const t=x.pop();P=void 0===t||t}function V(t,e,n){if(P&&S){let e=R.get(t);e||R.set(t,e=new Map);let s=e.get(n);s||e.set(n,s=g()),W(s)}}function W(t,e){let n=!1;b<=30?w(t)||(t.n|=m,n=!y(t)):n=!t.has(S),n&&(t.add(S),S.deps.push(t))}function A(t,e,n,s,i,r){const u=R.get(t);if(!u)return;let a=[];if(\"clear\"===e)a=[...u.values()];else if(\"length\"===n&&c(t)){const t=Number(s);u.forEach(((e,n)=>{(\"length\"===n||n>=t)&&a.push(e)}))}else switch(void 0!==n&&a.push(u.get(n)),e){case\"add\":c(t)?f(n)&&a.push(u.get(\"length\")):(a.push(u.get(k)),o(t)&&a.push(u.get(O)));break;case\"delete\":c(t)||(a.push(u.get(k)),o(t)&&a.push(u.get(O)));break;case\"set\":o(t)&&a.push(u.get(k))}if(1===a.length)a[0]&&N(a[0]);else{const t=[];for(const e of a)e&&t.push(...e);N(g(t))}}function N(t,e){const n=c(t)?t:[...t];for(const s of n)s.computed&&T(s);for(const s of n)s.computed||T(s)}function T(t,e){(t!==S||t.allowRecurse)&&(t.scheduler?t.scheduler():t.run())}const C=e(\"__proto__,__v_isRef,__isVue\"),I=new Set(Object.getOwnPropertyNames(Symbol).filter((t=>\"arguments\"!==t&&\"caller\"!==t)).map((t=>Symbol[t])).filter(u)),K=G(),D=G(!1,!0),L=G(!0),Y=G(!0,!0),q=B();function B(){const t={};return[\"includes\",\"indexOf\",\"lastIndexOf\"].forEach((e=>{t[e]=function(...t){const n=zt(this);for(let e=0,i=this.length;e<i;e++)V(n,0,e+\"\");const s=n[e](...t);return-1===s||!1===s?n[e](...t.map(zt)):s}})),[\"push\",\"pop\",\"shift\",\"unshift\",\"splice\"].forEach((e=>{t[e]=function(...t){M();const n=zt(this)[e].apply(this,t);return z(),n}})),t}function F(t){const e=zt(this);return V(e,0,t),e.hasOwnProperty(t)}function G(t=!1,e=!1){return function(n,s,i){if(\"__v_isReactive\"===s)return!t;if(\"__v_isReadonly\"===s)return t;if(\"__v_isShallow\"===s)return e;if(\"__v_raw\"===s&&i===(t?e?St:mt:e?bt:Rt).get(n))return n;const o=c(n);if(!t){if(o&&r(q,s))return Reflect.get(q,s,i);if(\"hasOwnProperty\"===s)return F}const h=Reflect.get(n,s,i);return(u(s)?I.has(s):C(s))?h:(t||V(n,0,s),e?h:Tt(h)?o&&f(s)?h:h.value:a(h)?t?jt(h):Ot(h):h)}}function H(t=!1){return function(e,n,s,i){let o=e[n];if(xt(o)&&Tt(o)&&!Tt(s))return!1;if(!t&&(Mt(s)||xt(s)||(o=zt(o),s=zt(s)),!c(e)&&Tt(o)&&!Tt(s)))return o.value=s,!0;const u=c(e)&&f(n)?Number(n)<e.length:r(e,n),a=Reflect.set(e,n,s,i);return e===zt(i)&&(u?_(s,o)&&A(e,\"set\",n,s):A(e,\"add\",n,s)),a}}const J={get:K,set:H(),deleteProperty:function(t,e){const n=r(t,e),s=Reflect.deleteProperty(t,e);return s&&n&&A(t,\"delete\",e,void 0),s},has:function(t,e){const n=Reflect.has(t,e);return u(e)&&I.has(e)||V(t,0,e),n},ownKeys:function(t){return V(t,0,c(t)?\"length\":k),Reflect.ownKeys(t)}},Q={get:L,set:(t,e)=>!0,deleteProperty:(t,e)=>!0},U=s({},J,{get:D,set:H(!0)}),X=s({},Q,{get:Y}),Z=t=>t,$=t=>Reflect.getPrototypeOf(t);function tt(t,e,n=!1,s=!1){const i=zt(t=t.__v_raw),r=zt(e);n||(e!==r&&V(i,0,e),V(i,0,r));const{has:c}=$(i),o=s?Z:n?Wt:Vt;return c.call(i,e)?o(t.get(e)):c.call(i,r)?o(t.get(r)):void(t!==i&&t.get(e))}function et(t,e=!1){const n=this.__v_raw,s=zt(n),i=zt(t);return e||(t!==i&&V(s,0,t),V(s,0,i)),t===i?n.has(t):n.has(t)||n.has(i)}function nt(t,e=!1){return t=t.__v_raw,!e&&V(zt(t),0,k),Reflect.get(t,\"size\",t)}function st(t){t=zt(t);const e=zt(this);return $(e).has.call(e,t)||(e.add(t),A(e,\"add\",t,t)),this}function it(t,e){e=zt(e);const n=zt(this),{has:s,get:i}=$(n);let r=s.call(n,t);r||(t=zt(t),r=s.call(n,t));const c=i.call(n,t);return n.set(t,e),r?_(e,c)&&A(n,\"set\",t,e):A(n,\"add\",t,e),this}function rt(t){const e=zt(this),{has:n,get:s}=$(e);let i=n.call(e,t);i||(t=zt(t),i=n.call(e,t)),s&&s.call(e,t);const r=e.delete(t);return i&&A(e,\"delete\",t,void 0),r}function ct(){const t=zt(this),e=0!==t.size,n=t.clear();return e&&A(t,\"clear\",void 0,void 0),n}function ot(t,e){return function(n,s){const i=this,r=i.__v_raw,c=zt(r),o=e?Z:t?Wt:Vt;return!t&&V(c,0,k),r.forEach(((t,e)=>n.call(s,o(t),o(e),i)))}}function ut(t,e,n){return function(...s){const i=this.__v_raw,r=zt(i),c=o(r),u=\"entries\"===t||t===Symbol.iterator&&c,a=\"keys\"===t&&c,h=i[t](...s),l=n?Z:e?Wt:Vt;return!e&&V(r,0,a?O:k),{next(){const{value:t,done:e}=h.next();return e?{value:t,done:e}:{value:u?[l(t[0]),l(t[1])]:l(t),done:e}},[Symbol.iterator](){return this}}}}function at(t){return function(...e){return\"delete\"!==t&&this}}function ht(){const t={get(t){return tt(this,t)},get size(){return nt(this)},has:et,add:st,set:it,delete:rt,clear:ct,forEach:ot(!1,!1)},e={get(t){return tt(this,t,!1,!0)},get size(){return nt(this)},has:et,add:st,set:it,delete:rt,clear:ct,forEach:ot(!1,!0)},n={get(t){return tt(this,t,!0)},get size(){return nt(this,!0)},has(t){return et.call(this,t,!0)},add:at(\"add\"),set:at(\"set\"),delete:at(\"delete\"),clear:at(\"clear\"),forEach:ot(!0,!1)},s={get(t){return tt(this,t,!0,!0)},get size(){return nt(this,!0)},has(t){return et.call(this,t,!0)},add:at(\"add\"),set:at(\"set\"),delete:at(\"delete\"),clear:at(\"clear\"),forEach:ot(!0,!0)};return[\"keys\",\"values\",\"entries\",Symbol.iterator].forEach((i=>{t[i]=ut(i,!1,!1),n[i]=ut(i,!0,!1),e[i]=ut(i,!1,!0),s[i]=ut(i,!0,!0)})),[t,n,e,s]}const[lt,ft,_t,dt]=ht();function pt(t,e){const n=e?t?dt:_t:t?ft:lt;return(e,s,i)=>\"__v_isReactive\"===s?!t:\"__v_isReadonly\"===s?t:\"__v_raw\"===s?e:Reflect.get(r(n,s)&&s in e?n:e,s,i)}const vt={get:pt(!1,!1)},gt={get:pt(!1,!0)},yt={get:pt(!0,!1)},wt={get:pt(!0,!0)},Rt=new WeakMap,bt=new WeakMap,mt=new WeakMap,St=new WeakMap;function kt(t){return t.__v_skip||!Object.isExtensible(t)?0:function(t){switch(t){case\"Object\":case\"Array\":return 1;case\"Map\":case\"Set\":case\"WeakMap\":case\"WeakSet\":return 2;default:return 0}}((t=>l(t).slice(8,-1))(t))}function Ot(t){return xt(t)?t:Et(t,!1,J,vt,Rt)}function jt(t){return Et(t,!0,Q,yt,mt)}function Et(t,e,n,s,i){if(!a(t))return t;if(t.__v_raw&&(!e||!t.__v_isReactive))return t;const r=i.get(t);if(r)return r;const c=kt(t);if(0===c)return t;const o=new Proxy(t,2===c?s:n);return i.set(t,o),o}function Pt(t){return xt(t)?Pt(t.__v_raw):!(!t||!t.__v_isReactive)}function xt(t){return!(!t||!t.__v_isReadonly)}function Mt(t){return!(!t||!t.__v_isShallow)}function zt(t){const e=t&&t.__v_raw;return e?zt(e):t}const Vt=t=>a(t)?Ot(t):t,Wt=t=>a(t)?jt(t):t;function At(t){P&&S&&W((t=zt(t)).dep||(t.dep=g()))}function Nt(t,e){const n=(t=zt(t)).dep;n&&N(n)}function Tt(t){return!(!t||!0!==t.__v_isRef)}function Ct(t,e){return Tt(t)?t:new It(t,e)}class It{constructor(t,e){this.__v_isShallow=e,this.dep=void 0,this.__v_isRef=!0,this._rawValue=e?t:zt(t),this._value=e?t:Vt(t)}get value(){return At(this),this._value}set value(t){const e=this.__v_isShallow||Mt(t)||xt(t);t=e?t:zt(t),_(t,this._rawValue)&&(this._rawValue=t,this._value=e?t:Vt(t),Nt(this))}}function Kt(t){return Tt(t)?t.value:t}const Dt={get:(t,e,n)=>Kt(Reflect.get(t,e,n)),set:(t,e,n,s)=>{const i=t[e];return Tt(i)&&!Tt(n)?(i.value=n,!0):Reflect.set(t,e,n,s)}};class Lt{constructor(t){this.dep=void 0,this.__v_isRef=!0;const{get:e,set:n}=t((()=>At(this)),(()=>Nt(this)));this._get=e,this._set=n}get value(){return this._get()}set value(t){this._set(t)}}class Yt{constructor(t,e,n){this._object=t,this._key=e,this._defaultValue=n,this.__v_isRef=!0}get value(){const t=this._object[this._key];return void 0===t?this._defaultValue:t}set value(t){this._object[this._key]=t}get dep(){return function(t,e){var n;return null===(n=R.get(t))||void 0===n?void 0:n.get(e)}(zt(this._object),this._key)}}function qt(t,e,n){const s=t[e];return Tt(s)?s:new Yt(t,e,n)}var Bt,Ft;class Gt{constructor(t,e,n,s){this._setter=e,this.dep=void 0,this.__v_isRef=!0,this[Bt]=!1,this._dirty=!0,this.effect=new j(t,(()=>{this._dirty||(this._dirty=!0,Nt(this))})),this.effect.computed=this,this.effect.active=this._cacheable=!s,this.__v_isReadonly=n}get value(){const t=zt(this);return At(t),!t._dirty&&t._cacheable||(t._dirty=!1,t._value=t.effect.run()),t._value}set value(t){this._setter(t)}}Bt=\"__v_isReadonly\";const Ht=Promise.resolve(),Jt=[];let Qt=!1;const Ut=()=>{for(let t=0;t<Jt.length;t++)Jt[t]();Jt.length=0,Qt=!1};class Xt{constructor(t){let e;this.dep=void 0,this._dirty=!0,this.__v_isRef=!0,this[Ft]=!0;let n=!1,s=!1;this.effect=new j(t,(t=>{if(this.dep){if(t)e=this._value,n=!0;else if(!s){const t=n?e:this._value;s=!0,n=!1,Jt.push((()=>{this.effect.active&&this._get()!==t&&Nt(this),s=!1})),Qt||(Qt=!0,Ht.then(Ut))}for(const t of this.dep)t.computed instanceof Xt&&t.scheduler(!0)}this._dirty=!0})),this.effect.computed=this}_get(){return this._dirty?(this._dirty=!1,this._value=this.effect.run()):this._value}get value(){return At(this),zt(this)._get()}}return Ft=\"__v_isReadonly\",t.EffectScope=p,t.ITERATE_KEY=k,t.ReactiveEffect=j,t.computed=function(t,e,s=!1){let i,r;const c=\"function\"==typeof t;return c?(i=t,r=n):(i=t.get,r=t.set),new Gt(i,r,c||!r,s)},t.customRef=function(t){return new Lt(t)},t.deferredComputed=function(t){return new Xt(t)},t.effect=function(t,e){t.effect&&(t=t.effect.fn);const n=new j(t);e&&(s(n,e),e.scope&&v(n,e.scope)),e&&e.lazy||n.run();const i=n.run.bind(n);return i.effect=n,i},t.effectScope=function(t){return new p(t)},t.enableTracking=function(){x.push(P),P=!0},t.getCurrentScope=function(){return d},t.isProxy=function(t){return Pt(t)||xt(t)},t.isReactive=Pt,t.isReadonly=xt,t.isRef=Tt,t.isShallow=Mt,t.markRaw=function(t){return((t,e,n)=>{Object.defineProperty(t,e,{configurable:!0,enumerable:!1,value:n})})(t,\"__v_skip\",!0),t},t.onScopeDispose=function(t){d&&d.cleanups.push(t)},t.pauseTracking=M,t.proxyRefs=function(t){return Pt(t)?t:new Proxy(t,Dt)},t.reactive=Ot,t.readonly=jt,t.ref=function(t){return Ct(t,!1)},t.resetTracking=z,t.shallowReactive=function(t){return Et(t,!1,U,gt,bt)},t.shallowReadonly=function(t){return Et(t,!0,X,wt,St)},t.shallowRef=function(t){return Ct(t,!0)},t.stop=function(t){t.effect.stop()},t.toRaw=zt,t.toRef=qt,t.toRefs=function(t){const e=c(t)?new Array(t.length):{};for(const n in t)e[n]=qt(t,n);return e},t.track=V,t.trigger=A,t.triggerRef=function(t){Nt(t)},t.unref=Kt,Object.defineProperty(t,\"__esModule\",{value:!0}),t}({});\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QHZ1ZS9ydW50aW1lLWRvbUAzLjIuNDc=",
    "content": "/README.md# @vue/runtime-dom\n\n``` js\nimport { h, createApp } from '@vue/runtime-dom'\n\nconst RootComponent = {\n  render() {\n    return h('div', 'hello world')\n  }\n}\n\ncreateApp(RootComponent).mount('#app')\n```\n/index.jsĻ'use strict'\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./dist/runtime-dom.cjs.prod.js')\n} else {\n  module.exports = require('./dist/runtime-dom.cjs.js')\n}\n/dist/runtime-dom.cjs.js'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar runtimeCore = require('@vue/runtime-core');\nvar shared = require('@vue/shared');\n\nconst svgNS = 'http://www.w3.org/2000/svg';\nconst doc = (typeof document !== 'undefined' ? document : null);\nconst templateContainer = doc && /*#__PURE__*/ doc.createElement('template');\nconst nodeOps = {\n    insert: (child, parent, anchor) => {\n        parent.insertBefore(child, anchor || null);\n    },\n    remove: child => {\n        const parent = child.parentNode;\n        if (parent) {\n            parent.removeChild(child);\n        }\n    },\n    createElement: (tag, isSVG, is, props) => {\n        const el = isSVG\n            ? doc.createElementNS(svgNS, tag)\n            : doc.createElement(tag, is ? { is } : undefined);\n        if (tag === 'select' && props && props.multiple != null) {\n            el.setAttribute('multiple', props.multiple);\n        }\n        return el;\n    },\n    createText: text => doc.createTextNode(text),\n    createComment: text => doc.createComment(text),\n    setText: (node, text) => {\n        node.nodeValue = text;\n    },\n    setElementText: (el, text) => {\n        el.textContent = text;\n    },\n    parentNode: node => node.parentNode,\n    nextSibling: node => node.nextSibling,\n    querySelector: selector => doc.querySelector(selector),\n    setScopeId(el, id) {\n        el.setAttribute(id, '');\n    },\n    // __UNSAFE__\n    // Reason: innerHTML.\n    // Static content here can only come from compiled templates.\n    // As long as the user only uses trusted templates, this is safe.\n    insertStaticContent(content, parent, anchor, isSVG, start, end) {\n        // <parent> before | first ... last | anchor </parent>\n        const before = anchor ? anchor.previousSibling : parent.lastChild;\n        // #5308 can only take cached path if:\n        // - has a single root node\n        // - nextSibling info is still available\n        if (start && (start === end || start.nextSibling)) {\n            // cached\n            while (true) {\n                parent.insertBefore(start.cloneNode(true), anchor);\n                if (start === end || !(start = start.nextSibling))\n                    break;\n            }\n        }\n        else {\n            // fresh insert\n            templateContainer.innerHTML = isSVG ? `<svg>${content}</svg>` : content;\n            const template = templateContainer.content;\n            if (isSVG) {\n                // remove outer svg wrapper\n                const wrapper = template.firstChild;\n                while (wrapper.firstChild) {\n                    template.appendChild(wrapper.firstChild);\n                }\n                template.removeChild(wrapper);\n            }\n            parent.insertBefore(template, anchor);\n        }\n        return [\n            // first\n            before ? before.nextSibling : parent.firstChild,\n            // last\n            anchor ? anchor.previousSibling : parent.lastChild\n        ];\n    }\n};\n\n// compiler should normalize class + :class bindings on the same element\n// into a single binding ['staticClass', dynamic]\nfunction patchClass(el, value, isSVG) {\n    // directly setting className should be faster than setAttribute in theory\n    // if this is an element during a transition, take the temporary transition\n    // classes into account.\n    const transitionClasses = el._vtc;\n    if (transitionClasses) {\n        value = (value ? [value, ...transitionClasses] : [...transitionClasses]).join(' ');\n    }\n    if (value == null) {\n        el.removeAttribute('class');\n    }\n    else if (isSVG) {\n        el.setAttribute('class', value);\n    }\n    else {\n        el.className = value;\n    }\n}\n\nfunction patchStyle(el, prev, next) {\n    const style = el.style;\n    const isCssString = shared.isString(next);\n    if (next && !isCssString) {\n        if (prev && !shared.isString(prev)) {\n            for (const key in prev) {\n                if (next[key] == null) {\n                    setStyle(style, key, '');\n                }\n            }\n        }\n        for (const key in next) {\n            setStyle(style, key, next[key]);\n        }\n    }\n    else {\n        const currentDisplay = style.display;\n        if (isCssString) {\n            if (prev !== next) {\n                style.cssText = next;\n            }\n        }\n        else if (prev) {\n            el.removeAttribute('style');\n        }\n        // indicates that the `display` of the element is controlled by `v-show`,\n        // so we always keep the current `display` value regardless of the `style`\n        // value, thus handing over control to `v-show`.\n        if ('_vod' in el) {\n            style.display = currentDisplay;\n        }\n    }\n}\nconst semicolonRE = /[^\\\\];\\s*$/;\nconst importantRE = /\\s*!important$/;\nfunction setStyle(style, name, val) {\n    if (shared.isArray(val)) {\n        val.forEach(v => setStyle(style, name, v));\n    }\n    else {\n        if (val == null)\n            val = '';\n        {\n            if (semicolonRE.test(val)) {\n                runtimeCore.warn(`Unexpected semicolon at the end of '${name}' style value: '${val}'`);\n            }\n        }\n        if (name.startsWith('--')) {\n            // custom property definition\n            style.setProperty(name, val);\n        }\n        else {\n            const prefixed = autoPrefix(style, name);\n            if (importantRE.test(val)) {\n                // !important\n                style.setProperty(shared.hyphenate(prefixed), val.replace(importantRE, ''), 'important');\n            }\n            else {\n                style[prefixed] = val;\n            }\n        }\n    }\n}\nconst prefixes = ['Webkit', 'Moz', 'ms'];\nconst prefixCache = {};\nfunction autoPrefix(style, rawName) {\n    const cached = prefixCache[rawName];\n    if (cached) {\n        return cached;\n    }\n    let name = runtimeCore.camelize(rawName);\n    if (name !== 'filter' && name in style) {\n        return (prefixCache[rawName] = name);\n    }\n    name = shared.capitalize(name);\n    for (let i = 0; i < prefixes.length; i++) {\n        const prefixed = prefixes[i] + name;\n        if (prefixed in style) {\n            return (prefixCache[rawName] = prefixed);\n        }\n    }\n    return rawName;\n}\n\nconst xlinkNS = 'http://www.w3.org/1999/xlink';\nfunction patchAttr(el, key, value, isSVG, instance) {\n    if (isSVG && key.startsWith('xlink:')) {\n        if (value == null) {\n            el.removeAttributeNS(xlinkNS, key.slice(6, key.length));\n        }\n        else {\n            el.setAttributeNS(xlinkNS, key, value);\n        }\n    }\n    else {\n        // note we are only checking boolean attributes that don't have a\n        // corresponding dom prop of the same name here.\n        const isBoolean = shared.isSpecialBooleanAttr(key);\n        if (value == null || (isBoolean && !shared.includeBooleanAttr(value))) {\n            el.removeAttribute(key);\n        }\n        else {\n            el.setAttribute(key, isBoolean ? '' : value);\n        }\n    }\n}\n\n// __UNSAFE__\n// functions. The user is responsible for using them with only trusted content.\nfunction patchDOMProp(el, key, value, \n// the following args are passed only due to potential innerHTML/textContent\n// overriding existing VNodes, in which case the old tree must be properly\n// unmounted.\nprevChildren, parentComponent, parentSuspense, unmountChildren) {\n    if (key === 'innerHTML' || key === 'textContent') {\n        if (prevChildren) {\n            unmountChildren(prevChildren, parentComponent, parentSuspense);\n        }\n        el[key] = value == null ? '' : value;\n        return;\n    }\n    if (key === 'value' &&\n        el.tagName !== 'PROGRESS' &&\n        // custom elements may use _value internally\n        !el.tagName.includes('-')) {\n        // store value as _value as well since\n        // non-string values will be stringified.\n        el._value = value;\n        const newValue = value == null ? '' : value;\n        if (el.value !== newValue ||\n            // #4956: always set for OPTION elements because its value falls back to\n            // textContent if no value attribute is present. And setting .value for\n            // OPTION has no side effect\n            el.tagName === 'OPTION') {\n            el.value = newValue;\n        }\n        if (value == null) {\n            el.removeAttribute(key);\n        }\n        return;\n    }\n    let needRemove = false;\n    if (value === '' || value == null) {\n        const type = typeof el[key];\n        if (type === 'boolean') {\n            // e.g. <select multiple> compiles to { multiple: '' }\n            value = shared.includeBooleanAttr(value);\n        }\n        else if (value == null && type === 'string') {\n            // e.g. <div :id=\"null\">\n            value = '';\n            needRemove = true;\n        }\n        else if (type === 'number') {\n            // e.g. <img :width=\"null\">\n            value = 0;\n            needRemove = true;\n        }\n    }\n    // some properties perform value validation and throw,\n    // some properties has getter, no setter, will error in 'use strict'\n    // eg. <select :type=\"null\"></select> <select :willValidate=\"null\"></select>\n    try {\n        el[key] = value;\n    }\n    catch (e) {\n        // do not warn if value is auto-coerced from nullish values\n        if (!needRemove) {\n            runtimeCore.warn(`Failed setting prop \"${key}\" on <${el.tagName.toLowerCase()}>: ` +\n                `value ${value} is invalid.`, e);\n        }\n    }\n    needRemove && el.removeAttribute(key);\n}\n\nfunction addEventListener(el, event, handler, options) {\n    el.addEventListener(event, handler, options);\n}\nfunction removeEventListener(el, event, handler, options) {\n    el.removeEventListener(event, handler, options);\n}\nfunction patchEvent(el, rawName, prevValue, nextValue, instance = null) {\n    // vei = vue event invokers\n    const invokers = el._vei || (el._vei = {});\n    const existingInvoker = invokers[rawName];\n    if (nextValue && existingInvoker) {\n        // patch\n        existingInvoker.value = nextValue;\n    }\n    else {\n        const [name, options] = parseName(rawName);\n        if (nextValue) {\n            // add\n            const invoker = (invokers[rawName] = createInvoker(nextValue, instance));\n            addEventListener(el, name, invoker, options);\n        }\n        else if (existingInvoker) {\n            // remove\n            removeEventListener(el, name, existingInvoker, options);\n            invokers[rawName] = undefined;\n        }\n    }\n}\nconst optionsModifierRE = /(?:Once|Passive|Capture)$/;\nfunction parseName(name) {\n    let options;\n    if (optionsModifierRE.test(name)) {\n        options = {};\n        let m;\n        while ((m = name.match(optionsModifierRE))) {\n            name = name.slice(0, name.length - m[0].length);\n            options[m[0].toLowerCase()] = true;\n        }\n    }\n    const event = name[2] === ':' ? name.slice(3) : shared.hyphenate(name.slice(2));\n    return [event, options];\n}\n// To avoid the overhead of repeatedly calling Date.now(), we cache\n// and use the same timestamp for all event listeners attached in the same tick.\nlet cachedNow = 0;\nconst p = /*#__PURE__*/ Promise.resolve();\nconst getNow = () => cachedNow || (p.then(() => (cachedNow = 0)), (cachedNow = Date.now()));\nfunction createInvoker(initialValue, instance) {\n    const invoker = (e) => {\n        // async edge case vuejs/vue#6566\n        // inner click event triggers patch, event handler\n        // attached to outer element during patch, and triggered again. This\n        // happens because browsers fire microtask ticks between event propagation.\n        // this no longer happens for templates in Vue 3, but could still be\n        // theoretically possible for hand-written render functions.\n        // the solution: we save the timestamp when a handler is attached,\n        // and also attach the timestamp to any event that was handled by vue\n        // for the first time (to avoid inconsistent event timestamp implementations\n        // or events fired from iframes, e.g. #2513)\n        // The handler would only fire if the event passed to it was fired\n        // AFTER it was attached.\n        if (!e._vts) {\n            e._vts = Date.now();\n        }\n        else if (e._vts <= invoker.attached) {\n            return;\n        }\n        runtimeCore.callWithAsyncErrorHandling(patchStopImmediatePropagation(e, invoker.value), instance, 5 /* ErrorCodes.NATIVE_EVENT_HANDLER */, [e]);\n    };\n    invoker.value = initialValue;\n    invoker.attached = getNow();\n    return invoker;\n}\nfunction patchStopImmediatePropagation(e, value) {\n    if (shared.isArray(value)) {\n        const originalStop = e.stopImmediatePropagation;\n        e.stopImmediatePropagation = () => {\n            originalStop.call(e);\n            e._stopped = true;\n        };\n        return value.map(fn => (e) => !e._stopped && fn && fn(e));\n    }\n    else {\n        return value;\n    }\n}\n\nconst nativeOnRE = /^on[a-z]/;\nconst patchProp = (el, key, prevValue, nextValue, isSVG = false, prevChildren, parentComponent, parentSuspense, unmountChildren) => {\n    if (key === 'class') {\n        patchClass(el, nextValue, isSVG);\n    }\n    else if (key === 'style') {\n        patchStyle(el, prevValue, nextValue);\n    }\n    else if (shared.isOn(key)) {\n        // ignore v-model listeners\n        if (!shared.isModelListener(key)) {\n            patchEvent(el, key, prevValue, nextValue, parentComponent);\n        }\n    }\n    else if (key[0] === '.'\n        ? ((key = key.slice(1)), true)\n        : key[0] === '^'\n            ? ((key = key.slice(1)), false)\n            : shouldSetAsProp(el, key, nextValue, isSVG)) {\n        patchDOMProp(el, key, nextValue, prevChildren, parentComponent, parentSuspense, unmountChildren);\n    }\n    else {\n        // special case for <input v-model type=\"checkbox\"> with\n        // :true-value & :false-value\n        // store value as dom properties since non-string values will be\n        // stringified.\n        if (key === 'true-value') {\n            el._trueValue = nextValue;\n        }\n        else if (key === 'false-value') {\n            el._falseValue = nextValue;\n        }\n        patchAttr(el, key, nextValue, isSVG);\n    }\n};\nfunction shouldSetAsProp(el, key, value, isSVG) {\n    if (isSVG) {\n        // most keys must be set as attribute on svg elements to work\n        // ...except innerHTML & textContent\n        if (key === 'innerHTML' || key === 'textContent') {\n            return true;\n        }\n        // or native onclick with function values\n        if (key in el && nativeOnRE.test(key) && shared.isFunction(value)) {\n            return true;\n        }\n        return false;\n    }\n    // these are enumerated attrs, however their corresponding DOM properties\n    // are actually booleans - this leads to setting it with a string \"false\"\n    // value leading it to be coerced to `true`, so we need to always treat\n    // them as attributes.\n    // Note that `contentEditable` doesn't have this problem: its DOM\n    // property is also enumerated string values.\n    if (key === 'spellcheck' || key === 'draggable' || key === 'translate') {\n        return false;\n    }\n    // #1787, #2840 form property on form elements is readonly and must be set as\n    // attribute.\n    if (key === 'form') {\n        return false;\n    }\n    // #1526 <input list> must be set as attribute\n    if (key === 'list' && el.tagName === 'INPUT') {\n        return false;\n    }\n    // #2766 <textarea type> must be set as attribute\n    if (key === 'type' && el.tagName === 'TEXTAREA') {\n        return false;\n    }\n    // native onclick with string value, must be set as attribute\n    if (nativeOnRE.test(key) && shared.isString(value)) {\n        return false;\n    }\n    return key in el;\n}\n\nfunction defineCustomElement(options, hydrate) {\n    const Comp = runtimeCore.defineComponent(options);\n    class VueCustomElement extends VueElement {\n        constructor(initialProps) {\n            super(Comp, initialProps, hydrate);\n        }\n    }\n    VueCustomElement.def = Comp;\n    return VueCustomElement;\n}\nconst defineSSRCustomElement = ((options) => {\n    // @ts-ignore\n    return defineCustomElement(options, hydrate);\n});\nconst BaseClass = (typeof HTMLElement !== 'undefined' ? HTMLElement : class {\n});\nclass VueElement extends BaseClass {\n    constructor(_def, _props = {}, hydrate) {\n        super();\n        this._def = _def;\n        this._props = _props;\n        /**\n         * @internal\n         */\n        this._instance = null;\n        this._connected = false;\n        this._resolved = false;\n        this._numberProps = null;\n        if (this.shadowRoot && hydrate) {\n            hydrate(this._createVNode(), this.shadowRoot);\n        }\n        else {\n            if (this.shadowRoot) {\n                runtimeCore.warn(`Custom element has pre-rendered declarative shadow root but is not ` +\n                    `defined as hydratable. Use \\`defineSSRCustomElement\\`.`);\n            }\n            this.attachShadow({ mode: 'open' });\n            if (!this._def.__asyncLoader) {\n                // for sync component defs we can immediately resolve props\n                this._resolveProps(this._def);\n            }\n        }\n    }\n    connectedCallback() {\n        this._connected = true;\n        if (!this._instance) {\n            if (this._resolved) {\n                this._update();\n            }\n            else {\n                this._resolveDef();\n            }\n        }\n    }\n    disconnectedCallback() {\n        this._connected = false;\n        runtimeCore.nextTick(() => {\n            if (!this._connected) {\n                render(null, this.shadowRoot);\n                this._instance = null;\n            }\n        });\n    }\n    /**\n     * resolve inner component definition (handle possible async component)\n     */\n    _resolveDef() {\n        this._resolved = true;\n        // set initial attrs\n        for (let i = 0; i < this.attributes.length; i++) {\n            this._setAttr(this.attributes[i].name);\n        }\n        // watch future attr changes\n        new MutationObserver(mutations => {\n            for (const m of mutations) {\n                this._setAttr(m.attributeName);\n            }\n        }).observe(this, { attributes: true });\n        const resolve = (def, isAsync = false) => {\n            const { props, styles } = def;\n            // cast Number-type props set before resolve\n            let numberProps;\n            if (props && !shared.isArray(props)) {\n                for (const key in props) {\n                    const opt = props[key];\n                    if (opt === Number || (opt && opt.type === Number)) {\n                        if (key in this._props) {\n                            this._props[key] = shared.toNumber(this._props[key]);\n                        }\n                        (numberProps || (numberProps = Object.create(null)))[shared.camelize(key)] = true;\n                    }\n                }\n            }\n            this._numberProps = numberProps;\n            if (isAsync) {\n                // defining getter/setters on prototype\n                // for sync defs, this already happened in the constructor\n                this._resolveProps(def);\n            }\n            // apply CSS\n            this._applyStyles(styles);\n            // initial render\n            this._update();\n        };\n        const asyncDef = this._def.__asyncLoader;\n        if (asyncDef) {\n            asyncDef().then(def => resolve(def, true));\n        }\n        else {\n            resolve(this._def);\n        }\n    }\n    _resolveProps(def) {\n        const { props } = def;\n        const declaredPropKeys = shared.isArray(props) ? props : Object.keys(props || {});\n        // check if there are props set pre-upgrade or connect\n        for (const key of Object.keys(this)) {\n            if (key[0] !== '_' && declaredPropKeys.includes(key)) {\n                this._setProp(key, this[key], true, false);\n            }\n        }\n        // defining getter/setters on prototype\n        for (const key of declaredPropKeys.map(shared.camelize)) {\n            Object.defineProperty(this, key, {\n                get() {\n                    return this._getProp(key);\n                },\n                set(val) {\n                    this._setProp(key, val);\n                }\n            });\n        }\n    }\n    _setAttr(key) {\n        let value = this.getAttribute(key);\n        const camelKey = shared.camelize(key);\n        if (this._numberProps && this._numberProps[camelKey]) {\n            value = shared.toNumber(value);\n        }\n        this._setProp(camelKey, value, false);\n    }\n    /**\n     * @internal\n     */\n    _getProp(key) {\n        return this._props[key];\n    }\n    /**\n     * @internal\n     */\n    _setProp(key, val, shouldReflect = true, shouldUpdate = true) {\n        if (val !== this._props[key]) {\n            this._props[key] = val;\n            if (shouldUpdate && this._instance) {\n                this._update();\n            }\n            // reflect\n            if (shouldReflect) {\n                if (val === true) {\n                    this.setAttribute(shared.hyphenate(key), '');\n                }\n                else if (typeof val === 'string' || typeof val === 'number') {\n                    this.setAttribute(shared.hyphenate(key), val + '');\n                }\n                else if (!val) {\n                    this.removeAttribute(shared.hyphenate(key));\n                }\n            }\n        }\n    }\n    _update() {\n        render(this._createVNode(), this.shadowRoot);\n    }\n    _createVNode() {\n        const vnode = runtimeCore.createVNode(this._def, shared.extend({}, this._props));\n        if (!this._instance) {\n            vnode.ce = instance => {\n                this._instance = instance;\n                instance.isCE = true;\n                // HMR\n                {\n                    instance.ceReload = newStyles => {\n                        // always reset styles\n                        if (this._styles) {\n                            this._styles.forEach(s => this.shadowRoot.removeChild(s));\n                            this._styles.length = 0;\n                        }\n                        this._applyStyles(newStyles);\n                        this._instance = null;\n                        this._update();\n                    };\n                }\n                const dispatch = (event, args) => {\n                    this.dispatchEvent(new CustomEvent(event, {\n                        detail: args\n                    }));\n                };\n                // intercept emit\n                instance.emit = (event, ...args) => {\n                    // dispatch both the raw and hyphenated versions of an event\n                    // to match Vue behavior\n                    dispatch(event, args);\n                    if (shared.hyphenate(event) !== event) {\n                        dispatch(shared.hyphenate(event), args);\n                    }\n                };\n                // locate nearest Vue custom element parent for provide/inject\n                let parent = this;\n                while ((parent =\n                    parent && (parent.parentNode || parent.host))) {\n                    if (parent instanceof VueElement) {\n                        instance.parent = parent._instance;\n                        instance.provides = parent._instance.provides;\n                        break;\n                    }\n                }\n            };\n        }\n        return vnode;\n    }\n    _applyStyles(styles) {\n        if (styles) {\n            styles.forEach(css => {\n                const s = document.createElement('style');\n                s.textContent = css;\n                this.shadowRoot.appendChild(s);\n                // record for HMR\n                {\n                    (this._styles || (this._styles = [])).push(s);\n                }\n            });\n        }\n    }\n}\n\nfunction useCssModule(name = '$style') {\n    /* istanbul ignore else */\n    {\n        const instance = runtimeCore.getCurrentInstance();\n        if (!instance) {\n            runtimeCore.warn(`useCssModule must be called inside setup()`);\n            return shared.EMPTY_OBJ;\n        }\n        const modules = instance.type.__cssModules;\n        if (!modules) {\n            runtimeCore.warn(`Current instance does not have CSS modules injected.`);\n            return shared.EMPTY_OBJ;\n        }\n        const mod = modules[name];\n        if (!mod) {\n            runtimeCore.warn(`Current instance does not have CSS module named \"${name}\".`);\n            return shared.EMPTY_OBJ;\n        }\n        return mod;\n    }\n}\n\n/**\n * Runtime helper for SFC's CSS variable injection feature.\n * @private\n */\nfunction useCssVars(getter) {\n    return;\n}\n\nconst TRANSITION = 'transition';\nconst ANIMATION = 'animation';\n// DOM Transition is a higher-order-component based on the platform-agnostic\n// base Transition component, with DOM-specific logic.\nconst Transition = (props, { slots }) => runtimeCore.h(runtimeCore.BaseTransition, resolveTransitionProps(props), slots);\nTransition.displayName = 'Transition';\nconst DOMTransitionPropsValidators = {\n    name: String,\n    type: String,\n    css: {\n        type: Boolean,\n        default: true\n    },\n    duration: [String, Number, Object],\n    enterFromClass: String,\n    enterActiveClass: String,\n    enterToClass: String,\n    appearFromClass: String,\n    appearActiveClass: String,\n    appearToClass: String,\n    leaveFromClass: String,\n    leaveActiveClass: String,\n    leaveToClass: String\n};\nconst TransitionPropsValidators = (Transition.props =\n    /*#__PURE__*/ shared.extend({}, runtimeCore.BaseTransition.props, DOMTransitionPropsValidators));\n/**\n * #3227 Incoming hooks may be merged into arrays when wrapping Transition\n * with custom HOCs.\n */\nconst callHook = (hook, args = []) => {\n    if (shared.isArray(hook)) {\n        hook.forEach(h => h(...args));\n    }\n    else if (hook) {\n        hook(...args);\n    }\n};\n/**\n * Check if a hook expects a callback (2nd arg), which means the user\n * intends to explicitly control the end of the transition.\n */\nconst hasExplicitCallback = (hook) => {\n    return hook\n        ? shared.isArray(hook)\n            ? hook.some(h => h.length > 1)\n            : hook.length > 1\n        : false;\n};\nfunction resolveTransitionProps(rawProps) {\n    const baseProps = {};\n    for (const key in rawProps) {\n        if (!(key in DOMTransitionPropsValidators)) {\n            baseProps[key] = rawProps[key];\n        }\n    }\n    if (rawProps.css === false) {\n        return baseProps;\n    }\n    const { name = 'v', type, duration, enterFromClass = `${name}-enter-from`, enterActiveClass = `${name}-enter-active`, enterToClass = `${name}-enter-to`, appearFromClass = enterFromClass, appearActiveClass = enterActiveClass, appearToClass = enterToClass, leaveFromClass = `${name}-leave-from`, leaveActiveClass = `${name}-leave-active`, leaveToClass = `${name}-leave-to` } = rawProps;\n    const durations = normalizeDuration(duration);\n    const enterDuration = durations && durations[0];\n    const leaveDuration = durations && durations[1];\n    const { onBeforeEnter, onEnter, onEnterCancelled, onLeave, onLeaveCancelled, onBeforeAppear = onBeforeEnter, onAppear = onEnter, onAppearCancelled = onEnterCancelled } = baseProps;\n    const finishEnter = (el, isAppear, done) => {\n        removeTransitionClass(el, isAppear ? appearToClass : enterToClass);\n        removeTransitionClass(el, isAppear ? appearActiveClass : enterActiveClass);\n        done && done();\n    };\n    const finishLeave = (el, done) => {\n        el._isLeaving = false;\n        removeTransitionClass(el, leaveFromClass);\n        removeTransitionClass(el, leaveToClass);\n        removeTransitionClass(el, leaveActiveClass);\n        done && done();\n    };\n    const makeEnterHook = (isAppear) => {\n        return (el, done) => {\n            const hook = isAppear ? onAppear : onEnter;\n            const resolve = () => finishEnter(el, isAppear, done);\n            callHook(hook, [el, resolve]);\n            nextFrame(() => {\n                removeTransitionClass(el, isAppear ? appearFromClass : enterFromClass);\n                addTransitionClass(el, isAppear ? appearToClass : enterToClass);\n                if (!hasExplicitCallback(hook)) {\n                    whenTransitionEnds(el, type, enterDuration, resolve);\n                }\n            });\n        };\n    };\n    return shared.extend(baseProps, {\n        onBeforeEnter(el) {\n            callHook(onBeforeEnter, [el]);\n            addTransitionClass(el, enterFromClass);\n            addTransitionClass(el, enterActiveClass);\n        },\n        onBeforeAppear(el) {\n            callHook(onBeforeAppear, [el]);\n            addTransitionClass(el, appearFromClass);\n            addTransitionClass(el, appearActiveClass);\n        },\n        onEnter: makeEnterHook(false),\n        onAppear: makeEnterHook(true),\n        onLeave(el, done) {\n            el._isLeaving = true;\n            const resolve = () => finishLeave(el, done);\n            addTransitionClass(el, leaveFromClass);\n            // force reflow so *-leave-from classes immediately take effect (#2593)\n            forceReflow();\n            addTransitionClass(el, leaveActiveClass);\n            nextFrame(() => {\n                if (!el._isLeaving) {\n                    // cancelled\n                    return;\n                }\n                removeTransitionClass(el, leaveFromClass);\n                addTransitionClass(el, leaveToClass);\n                if (!hasExplicitCallback(onLeave)) {\n                    whenTransitionEnds(el, type, leaveDuration, resolve);\n                }\n            });\n            callHook(onLeave, [el, resolve]);\n        },\n        onEnterCancelled(el) {\n            finishEnter(el, false);\n            callHook(onEnterCancelled, [el]);\n        },\n        onAppearCancelled(el) {\n            finishEnter(el, true);\n            callHook(onAppearCancelled, [el]);\n        },\n        onLeaveCancelled(el) {\n            finishLeave(el);\n            callHook(onLeaveCancelled, [el]);\n        }\n    });\n}\nfunction normalizeDuration(duration) {\n    if (duration == null) {\n        return null;\n    }\n    else if (shared.isObject(duration)) {\n        return [NumberOf(duration.enter), NumberOf(duration.leave)];\n    }\n    else {\n        const n = NumberOf(duration);\n        return [n, n];\n    }\n}\nfunction NumberOf(val) {\n    const res = shared.toNumber(val);\n    {\n        runtimeCore.assertNumber(res, '<transition> explicit duration');\n    }\n    return res;\n}\nfunction addTransitionClass(el, cls) {\n    cls.split(/\\s+/).forEach(c => c && el.classList.add(c));\n    (el._vtc ||\n        (el._vtc = new Set())).add(cls);\n}\nfunction removeTransitionClass(el, cls) {\n    cls.split(/\\s+/).forEach(c => c && el.classList.remove(c));\n    const { _vtc } = el;\n    if (_vtc) {\n        _vtc.delete(cls);\n        if (!_vtc.size) {\n            el._vtc = undefined;\n        }\n    }\n}\nfunction nextFrame(cb) {\n    requestAnimationFrame(() => {\n        requestAnimationFrame(cb);\n    });\n}\nlet endId = 0;\nfunction whenTransitionEnds(el, expectedType, explicitTimeout, resolve) {\n    const id = (el._endId = ++endId);\n    const resolveIfNotStale = () => {\n        if (id === el._endId) {\n            resolve();\n        }\n    };\n    if (explicitTimeout) {\n        return setTimeout(resolveIfNotStale, explicitTimeout);\n    }\n    const { type, timeout, propCount } = getTransitionInfo(el, expectedType);\n    if (!type) {\n        return resolve();\n    }\n    const endEvent = type + 'end';\n    let ended = 0;\n    const end = () => {\n        el.removeEventListener(endEvent, onEnd);\n        resolveIfNotStale();\n    };\n    const onEnd = (e) => {\n        if (e.target === el && ++ended >= propCount) {\n            end();\n        }\n    };\n    setTimeout(() => {\n        if (ended < propCount) {\n            end();\n        }\n    }, timeout + 1);\n    el.addEventListener(endEvent, onEnd);\n}\nfunction getTransitionInfo(el, expectedType) {\n    const styles = window.getComputedStyle(el);\n    // JSDOM may return undefined for transition properties\n    const getStyleProperties = (key) => (styles[key] || '').split(', ');\n    const transitionDelays = getStyleProperties(`${TRANSITION}Delay`);\n    const transitionDurations = getStyleProperties(`${TRANSITION}Duration`);\n    const transitionTimeout = getTimeout(transitionDelays, transitionDurations);\n    const animationDelays = getStyleProperties(`${ANIMATION}Delay`);\n    const animationDurations = getStyleProperties(`${ANIMATION}Duration`);\n    const animationTimeout = getTimeout(animationDelays, animationDurations);\n    let type = null;\n    let timeout = 0;\n    let propCount = 0;\n    /* istanbul ignore if */\n    if (expectedType === TRANSITION) {\n        if (transitionTimeout > 0) {\n            type = TRANSITION;\n            timeout = transitionTimeout;\n            propCount = transitionDurations.length;\n        }\n    }\n    else if (expectedType === ANIMATION) {\n        if (animationTimeout > 0) {\n            type = ANIMATION;\n            timeout = animationTimeout;\n            propCount = animationDurations.length;\n        }\n    }\n    else {\n        timeout = Math.max(transitionTimeout, animationTimeout);\n        type =\n            timeout > 0\n                ? transitionTimeout > animationTimeout\n                    ? TRANSITION\n                    : ANIMATION\n                : null;\n        propCount = type\n            ? type === TRANSITION\n                ? transitionDurations.length\n                : animationDurations.length\n            : 0;\n    }\n    const hasTransform = type === TRANSITION &&\n        /\\b(transform|all)(,|$)/.test(getStyleProperties(`${TRANSITION}Property`).toString());\n    return {\n        type,\n        timeout,\n        propCount,\n        hasTransform\n    };\n}\nfunction getTimeout(delays, durations) {\n    while (delays.length < durations.length) {\n        delays = delays.concat(delays);\n    }\n    return Math.max(...durations.map((d, i) => toMs(d) + toMs(delays[i])));\n}\n// Old versions of Chromium (below 61.0.3163.100) formats floating pointer\n// numbers in a locale-dependent way, using a comma instead of a dot.\n// If comma is not replaced with a dot, the input will be rounded down\n// (i.e. acting as a floor function) causing unexpected behaviors\nfunction toMs(s) {\n    return Number(s.slice(0, -1).replace(',', '.')) * 1000;\n}\n// synchronously force layout to put elements into a certain state\nfunction forceReflow() {\n    return document.body.offsetHeight;\n}\n\nconst positionMap = new WeakMap();\nconst newPositionMap = new WeakMap();\nconst TransitionGroupImpl = {\n    name: 'TransitionGroup',\n    props: /*#__PURE__*/ shared.extend({}, TransitionPropsValidators, {\n        tag: String,\n        moveClass: String\n    }),\n    setup(props, { slots }) {\n        const instance = runtimeCore.getCurrentInstance();\n        const state = runtimeCore.useTransitionState();\n        let prevChildren;\n        let children;\n        runtimeCore.onUpdated(() => {\n            // children is guaranteed to exist after initial render\n            if (!prevChildren.length) {\n                return;\n            }\n            const moveClass = props.moveClass || `${props.name || 'v'}-move`;\n            if (!hasCSSTransform(prevChildren[0].el, instance.vnode.el, moveClass)) {\n                return;\n            }\n            // we divide the work into three loops to avoid mixing DOM reads and writes\n            // in each iteration - which helps prevent layout thrashing.\n            prevChildren.forEach(callPendingCbs);\n            prevChildren.forEach(recordPosition);\n            const movedChildren = prevChildren.filter(applyTranslation);\n            // force reflow to put everything in position\n            forceReflow();\n            movedChildren.forEach(c => {\n                const el = c.el;\n                const style = el.style;\n                addTransitionClass(el, moveClass);\n                style.transform = style.webkitTransform = style.transitionDuration = '';\n                const cb = (el._moveCb = (e) => {\n                    if (e && e.target !== el) {\n                        return;\n                    }\n                    if (!e || /transform$/.test(e.propertyName)) {\n                        el.removeEventListener('transitionend', cb);\n                        el._moveCb = null;\n                        removeTransitionClass(el, moveClass);\n                    }\n                });\n                el.addEventListener('transitionend', cb);\n            });\n        });\n        return () => {\n            const rawProps = runtimeCore.toRaw(props);\n            const cssTransitionProps = resolveTransitionProps(rawProps);\n            let tag = rawProps.tag || runtimeCore.Fragment;\n            prevChildren = children;\n            children = slots.default ? runtimeCore.getTransitionRawChildren(slots.default()) : [];\n            for (let i = 0; i < children.length; i++) {\n                const child = children[i];\n                if (child.key != null) {\n                    runtimeCore.setTransitionHooks(child, runtimeCore.resolveTransitionHooks(child, cssTransitionProps, state, instance));\n                }\n                else {\n                    runtimeCore.warn(`<TransitionGroup> children must be keyed.`);\n                }\n            }\n            if (prevChildren) {\n                for (let i = 0; i < prevChildren.length; i++) {\n                    const child = prevChildren[i];\n                    runtimeCore.setTransitionHooks(child, runtimeCore.resolveTransitionHooks(child, cssTransitionProps, state, instance));\n                    positionMap.set(child, child.el.getBoundingClientRect());\n                }\n            }\n            return runtimeCore.createVNode(tag, null, children);\n        };\n    }\n};\n/**\n * TransitionGroup does not support \"mode\" so we need to remove it from the\n * props declarations, but direct delete operation is considered a side effect\n * and will make the entire transition feature non-tree-shakeable, so we do it\n * in a function and mark the function's invocation as pure.\n */\nconst removeMode = (props) => delete props.mode;\n/*#__PURE__*/ removeMode(TransitionGroupImpl.props);\nconst TransitionGroup = TransitionGroupImpl;\nfunction callPendingCbs(c) {\n    const el = c.el;\n    if (el._moveCb) {\n        el._moveCb();\n    }\n    if (el._enterCb) {\n        el._enterCb();\n    }\n}\nfunction recordPosition(c) {\n    newPositionMap.set(c, c.el.getBoundingClientRect());\n}\nfunction applyTranslation(c) {\n    const oldPos = positionMap.get(c);\n    const newPos = newPositionMap.get(c);\n    const dx = oldPos.left - newPos.left;\n    const dy = oldPos.top - newPos.top;\n    if (dx || dy) {\n        const s = c.el.style;\n        s.transform = s.webkitTransform = `translate(${dx}px,${dy}px)`;\n        s.transitionDuration = '0s';\n        return c;\n    }\n}\nfunction hasCSSTransform(el, root, moveClass) {\n    // Detect whether an element with the move class applied has\n    // CSS transitions. Since the element may be inside an entering\n    // transition at this very moment, we make a clone of it and remove\n    // all other transition classes applied to ensure only the move class\n    // is applied.\n    const clone = el.cloneNode();\n    if (el._vtc) {\n        el._vtc.forEach(cls => {\n            cls.split(/\\s+/).forEach(c => c && clone.classList.remove(c));\n        });\n    }\n    moveClass.split(/\\s+/).forEach(c => c && clone.classList.add(c));\n    clone.style.display = 'none';\n    const container = (root.nodeType === 1 ? root : root.parentNode);\n    container.appendChild(clone);\n    const { hasTransform } = getTransitionInfo(clone);\n    container.removeChild(clone);\n    return hasTransform;\n}\n\nconst getModelAssigner = (vnode) => {\n    const fn = vnode.props['onUpdate:modelValue'] ||\n        (false );\n    return shared.isArray(fn) ? value => shared.invokeArrayFns(fn, value) : fn;\n};\nfunction onCompositionStart(e) {\n    e.target.composing = true;\n}\nfunction onCompositionEnd(e) {\n    const target = e.target;\n    if (target.composing) {\n        target.composing = false;\n        target.dispatchEvent(new Event('input'));\n    }\n}\n// We are exporting the v-model runtime directly as vnode hooks so that it can\n// be tree-shaken in case v-model is never used.\nconst vModelText = {\n    created(el, { modifiers: { lazy, trim, number } }, vnode) {\n        el._assign = getModelAssigner(vnode);\n        const castToNumber = number || (vnode.props && vnode.props.type === 'number');\n        addEventListener(el, lazy ? 'change' : 'input', e => {\n            if (e.target.composing)\n                return;\n            let domValue = el.value;\n            if (trim) {\n                domValue = domValue.trim();\n            }\n            if (castToNumber) {\n                domValue = shared.looseToNumber(domValue);\n            }\n            el._assign(domValue);\n        });\n        if (trim) {\n            addEventListener(el, 'change', () => {\n                el.value = el.value.trim();\n            });\n        }\n        if (!lazy) {\n            addEventListener(el, 'compositionstart', onCompositionStart);\n            addEventListener(el, 'compositionend', onCompositionEnd);\n            // Safari < 10.2 & UIWebView doesn't fire compositionend when\n            // switching focus before confirming composition choice\n            // this also fixes the issue where some browsers e.g. iOS Chrome\n            // fires \"change\" instead of \"input\" on autocomplete.\n            addEventListener(el, 'change', onCompositionEnd);\n        }\n    },\n    // set value on mounted so it's after min/max for type=\"range\"\n    mounted(el, { value }) {\n        el.value = value == null ? '' : value;\n    },\n    beforeUpdate(el, { value, modifiers: { lazy, trim, number } }, vnode) {\n        el._assign = getModelAssigner(vnode);\n        // avoid clearing unresolved text. #2302\n        if (el.composing)\n            return;\n        if (document.activeElement === el && el.type !== 'range') {\n            if (lazy) {\n                return;\n            }\n            if (trim && el.value.trim() === value) {\n                return;\n            }\n            if ((number || el.type === 'number') &&\n                shared.looseToNumber(el.value) === value) {\n                return;\n            }\n        }\n        const newValue = value == null ? '' : value;\n        if (el.value !== newValue) {\n            el.value = newValue;\n        }\n    }\n};\nconst vModelCheckbox = {\n    // #4096 array checkboxes need to be deep traversed\n    deep: true,\n    created(el, _, vnode) {\n        el._assign = getModelAssigner(vnode);\n        addEventListener(el, 'change', () => {\n            const modelValue = el._modelValue;\n            const elementValue = getValue(el);\n            const checked = el.checked;\n            const assign = el._assign;\n            if (shared.isArray(modelValue)) {\n                const index = shared.looseIndexOf(modelValue, elementValue);\n                const found = index !== -1;\n                if (checked && !found) {\n                    assign(modelValue.concat(elementValue));\n                }\n                else if (!checked && found) {\n                    const filtered = [...modelValue];\n                    filtered.splice(index, 1);\n                    assign(filtered);\n                }\n            }\n            else if (shared.isSet(modelValue)) {\n                const cloned = new Set(modelValue);\n                if (checked) {\n                    cloned.add(elementValue);\n                }\n                else {\n                    cloned.delete(elementValue);\n                }\n                assign(cloned);\n            }\n            else {\n                assign(getCheckboxValue(el, checked));\n            }\n        });\n    },\n    // set initial checked on mount to wait for true-value/false-value\n    mounted: setChecked,\n    beforeUpdate(el, binding, vnode) {\n        el._assign = getModelAssigner(vnode);\n        setChecked(el, binding, vnode);\n    }\n};\nfunction setChecked(el, { value, oldValue }, vnode) {\n    el._modelValue = value;\n    if (shared.isArray(value)) {\n        el.checked = shared.looseIndexOf(value, vnode.props.value) > -1;\n    }\n    else if (shared.isSet(value)) {\n        el.checked = value.has(vnode.props.value);\n    }\n    else if (value !== oldValue) {\n        el.checked = shared.looseEqual(value, getCheckboxValue(el, true));\n    }\n}\nconst vModelRadio = {\n    created(el, { value }, vnode) {\n        el.checked = shared.looseEqual(value, vnode.props.value);\n        el._assign = getModelAssigner(vnode);\n        addEventListener(el, 'change', () => {\n            el._assign(getValue(el));\n        });\n    },\n    beforeUpdate(el, { value, oldValue }, vnode) {\n        el._assign = getModelAssigner(vnode);\n        if (value !== oldValue) {\n            el.checked = shared.looseEqual(value, vnode.props.value);\n        }\n    }\n};\nconst vModelSelect = {\n    // <select multiple> value need to be deep traversed\n    deep: true,\n    created(el, { value, modifiers: { number } }, vnode) {\n        const isSetModel = shared.isSet(value);\n        addEventListener(el, 'change', () => {\n            const selectedVal = Array.prototype.filter\n                .call(el.options, (o) => o.selected)\n                .map((o) => number ? shared.looseToNumber(getValue(o)) : getValue(o));\n            el._assign(el.multiple\n                ? isSetModel\n                    ? new Set(selectedVal)\n                    : selectedVal\n                : selectedVal[0]);\n        });\n        el._assign = getModelAssigner(vnode);\n    },\n    // set value in mounted & updated because <select> relies on its children\n    // <option>s.\n    mounted(el, { value }) {\n        setSelected(el, value);\n    },\n    beforeUpdate(el, _binding, vnode) {\n        el._assign = getModelAssigner(vnode);\n    },\n    updated(el, { value }) {\n        setSelected(el, value);\n    }\n};\nfunction setSelected(el, value) {\n    const isMultiple = el.multiple;\n    if (isMultiple && !shared.isArray(value) && !shared.isSet(value)) {\n        runtimeCore.warn(`<select multiple v-model> expects an Array or Set value for its binding, ` +\n                `but got ${Object.prototype.toString.call(value).slice(8, -1)}.`);\n        return;\n    }\n    for (let i = 0, l = el.options.length; i < l; i++) {\n        const option = el.options[i];\n        const optionValue = getValue(option);\n        if (isMultiple) {\n            if (shared.isArray(value)) {\n                option.selected = shared.looseIndexOf(value, optionValue) > -1;\n            }\n            else {\n                option.selected = value.has(optionValue);\n            }\n        }\n        else {\n            if (shared.looseEqual(getValue(option), value)) {\n                if (el.selectedIndex !== i)\n                    el.selectedIndex = i;\n                return;\n            }\n        }\n    }\n    if (!isMultiple && el.selectedIndex !== -1) {\n        el.selectedIndex = -1;\n    }\n}\n// retrieve raw value set via :value bindings\nfunction getValue(el) {\n    return '_value' in el ? el._value : el.value;\n}\n// retrieve raw value for true-value and false-value set via :true-value or :false-value bindings\nfunction getCheckboxValue(el, checked) {\n    const key = checked ? '_trueValue' : '_falseValue';\n    return key in el ? el[key] : checked;\n}\nconst vModelDynamic = {\n    created(el, binding, vnode) {\n        callModelHook(el, binding, vnode, null, 'created');\n    },\n    mounted(el, binding, vnode) {\n        callModelHook(el, binding, vnode, null, 'mounted');\n    },\n    beforeUpdate(el, binding, vnode, prevVNode) {\n        callModelHook(el, binding, vnode, prevVNode, 'beforeUpdate');\n    },\n    updated(el, binding, vnode, prevVNode) {\n        callModelHook(el, binding, vnode, prevVNode, 'updated');\n    }\n};\nfunction resolveDynamicModel(tagName, type) {\n    switch (tagName) {\n        case 'SELECT':\n            return vModelSelect;\n        case 'TEXTAREA':\n            return vModelText;\n        default:\n            switch (type) {\n                case 'checkbox':\n                    return vModelCheckbox;\n                case 'radio':\n                    return vModelRadio;\n                default:\n                    return vModelText;\n            }\n    }\n}\nfunction callModelHook(el, binding, vnode, prevVNode, hook) {\n    const modelToUse = resolveDynamicModel(el.tagName, vnode.props && vnode.props.type);\n    const fn = modelToUse[hook];\n    fn && fn(el, binding, vnode, prevVNode);\n}\n// SSR vnode transforms, only used when user includes client-oriented render\n// function in SSR\nfunction initVModelForSSR() {\n    vModelText.getSSRProps = ({ value }) => ({ value });\n    vModelRadio.getSSRProps = ({ value }, vnode) => {\n        if (vnode.props && shared.looseEqual(vnode.props.value, value)) {\n            return { checked: true };\n        }\n    };\n    vModelCheckbox.getSSRProps = ({ value }, vnode) => {\n        if (shared.isArray(value)) {\n            if (vnode.props && shared.looseIndexOf(value, vnode.props.value) > -1) {\n                return { checked: true };\n            }\n        }\n        else if (shared.isSet(value)) {\n            if (vnode.props && value.has(vnode.props.value)) {\n                return { checked: true };\n            }\n        }\n        else if (value) {\n            return { checked: true };\n        }\n    };\n    vModelDynamic.getSSRProps = (binding, vnode) => {\n        if (typeof vnode.type !== 'string') {\n            return;\n        }\n        const modelToUse = resolveDynamicModel(\n        // resolveDynamicModel expects an uppercase tag name, but vnode.type is lowercase\n        vnode.type.toUpperCase(), vnode.props && vnode.props.type);\n        if (modelToUse.getSSRProps) {\n            return modelToUse.getSSRProps(binding, vnode);\n        }\n    };\n}\n\nconst systemModifiers = ['ctrl', 'shift', 'alt', 'meta'];\nconst modifierGuards = {\n    stop: e => e.stopPropagation(),\n    prevent: e => e.preventDefault(),\n    self: e => e.target !== e.currentTarget,\n    ctrl: e => !e.ctrlKey,\n    shift: e => !e.shiftKey,\n    alt: e => !e.altKey,\n    meta: e => !e.metaKey,\n    left: e => 'button' in e && e.button !== 0,\n    middle: e => 'button' in e && e.button !== 1,\n    right: e => 'button' in e && e.button !== 2,\n    exact: (e, modifiers) => systemModifiers.some(m => e[`${m}Key`] && !modifiers.includes(m))\n};\n/**\n * @private\n */\nconst withModifiers = (fn, modifiers) => {\n    return (event, ...args) => {\n        for (let i = 0; i < modifiers.length; i++) {\n            const guard = modifierGuards[modifiers[i]];\n            if (guard && guard(event, modifiers))\n                return;\n        }\n        return fn(event, ...args);\n    };\n};\n// Kept for 2.x compat.\n// Note: IE11 compat for `spacebar` and `del` is removed for now.\nconst keyNames = {\n    esc: 'escape',\n    space: ' ',\n    up: 'arrow-up',\n    left: 'arrow-left',\n    right: 'arrow-right',\n    down: 'arrow-down',\n    delete: 'backspace'\n};\n/**\n * @private\n */\nconst withKeys = (fn, modifiers) => {\n    return (event) => {\n        if (!('key' in event)) {\n            return;\n        }\n        const eventKey = shared.hyphenate(event.key);\n        if (modifiers.some(k => k === eventKey || keyNames[k] === eventKey)) {\n            return fn(event);\n        }\n    };\n};\n\nconst vShow = {\n    beforeMount(el, { value }, { transition }) {\n        el._vod = el.style.display === 'none' ? '' : el.style.display;\n        if (transition && value) {\n            transition.beforeEnter(el);\n        }\n        else {\n            setDisplay(el, value);\n        }\n    },\n    mounted(el, { value }, { transition }) {\n        if (transition && value) {\n            transition.enter(el);\n        }\n    },\n    updated(el, { value, oldValue }, { transition }) {\n        if (!value === !oldValue)\n            return;\n        if (transition) {\n            if (value) {\n                transition.beforeEnter(el);\n                setDisplay(el, true);\n                transition.enter(el);\n            }\n            else {\n                transition.leave(el, () => {\n                    setDisplay(el, false);\n                });\n            }\n        }\n        else {\n            setDisplay(el, value);\n        }\n    },\n    beforeUnmount(el, { value }) {\n        setDisplay(el, value);\n    }\n};\nfunction setDisplay(el, value) {\n    el.style.display = value ? el._vod : 'none';\n}\n// SSR vnode transforms, only used when user includes client-oriented render\n// function in SSR\nfunction initVShowForSSR() {\n    vShow.getSSRProps = ({ value }) => {\n        if (!value) {\n            return { style: { display: 'none' } };\n        }\n    };\n}\n\nconst rendererOptions = /*#__PURE__*/ shared.extend({ patchProp }, nodeOps);\n// lazy create the renderer - this makes core renderer logic tree-shakable\n// in case the user only imports reactivity utilities from Vue.\nlet renderer;\nlet enabledHydration = false;\nfunction ensureRenderer() {\n    return (renderer ||\n        (renderer = runtimeCore.createRenderer(rendererOptions)));\n}\nfunction ensureHydrationRenderer() {\n    renderer = enabledHydration\n        ? renderer\n        : runtimeCore.createHydrationRenderer(rendererOptions);\n    enabledHydration = true;\n    return renderer;\n}\n// use explicit type casts here to avoid import() calls in rolled-up d.ts\nconst render = ((...args) => {\n    ensureRenderer().render(...args);\n});\nconst hydrate = ((...args) => {\n    ensureHydrationRenderer().hydrate(...args);\n});\nconst createApp = ((...args) => {\n    const app = ensureRenderer().createApp(...args);\n    {\n        injectNativeTagCheck(app);\n        injectCompilerOptionsCheck(app);\n    }\n    const { mount } = app;\n    app.mount = (containerOrSelector) => {\n        const container = normalizeContainer(containerOrSelector);\n        if (!container)\n            return;\n        const component = app._component;\n        if (!shared.isFunction(component) && !component.render && !component.template) {\n            // __UNSAFE__\n            // Reason: potential execution of JS expressions in in-DOM template.\n            // The user must make sure the in-DOM template is trusted. If it's\n            // rendered by the server, the template should not contain any user data.\n            component.template = container.innerHTML;\n        }\n        // clear content before mounting\n        container.innerHTML = '';\n        const proxy = mount(container, false, container instanceof SVGElement);\n        if (container instanceof Element) {\n            container.removeAttribute('v-cloak');\n            container.setAttribute('data-v-app', '');\n        }\n        return proxy;\n    };\n    return app;\n});\nconst createSSRApp = ((...args) => {\n    const app = ensureHydrationRenderer().createApp(...args);\n    {\n        injectNativeTagCheck(app);\n        injectCompilerOptionsCheck(app);\n    }\n    const { mount } = app;\n    app.mount = (containerOrSelector) => {\n        const container = normalizeContainer(containerOrSelector);\n        if (container) {\n            return mount(container, true, container instanceof SVGElement);\n        }\n    };\n    return app;\n});\nfunction injectNativeTagCheck(app) {\n    // Inject `isNativeTag`\n    // this is used for component name validation (dev only)\n    Object.defineProperty(app.config, 'isNativeTag', {\n        value: (tag) => shared.isHTMLTag(tag) || shared.isSVGTag(tag),\n        writable: false\n    });\n}\n// dev only\nfunction injectCompilerOptionsCheck(app) {\n    if (runtimeCore.isRuntimeOnly()) {\n        const isCustomElement = app.config.isCustomElement;\n        Object.defineProperty(app.config, 'isCustomElement', {\n            get() {\n                return isCustomElement;\n            },\n            set() {\n                runtimeCore.warn(`The \\`isCustomElement\\` config option is deprecated. Use ` +\n                    `\\`compilerOptions.isCustomElement\\` instead.`);\n            }\n        });\n        const compilerOptions = app.config.compilerOptions;\n        const msg = `The \\`compilerOptions\\` config option is only respected when using ` +\n            `a build of Vue.js that includes the runtime compiler (aka \"full build\"). ` +\n            `Since you are using the runtime-only build, \\`compilerOptions\\` ` +\n            `must be passed to \\`@vue/compiler-dom\\` in the build setup instead.\\n` +\n            `- For vue-loader: pass it via vue-loader's \\`compilerOptions\\` loader option.\\n` +\n            `- For vue-cli: see https://cli.vuejs.org/guide/webpack.html#modifying-options-of-a-loader\\n` +\n            `- For vite: pass it via @vitejs/plugin-vue options. See https://github.com/vitejs/vite/tree/main/packages/plugin-vue#example-for-passing-options-to-vuecompiler-dom`;\n        Object.defineProperty(app.config, 'compilerOptions', {\n            get() {\n                runtimeCore.warn(msg);\n                return compilerOptions;\n            },\n            set() {\n                runtimeCore.warn(msg);\n            }\n        });\n    }\n}\nfunction normalizeContainer(container) {\n    if (shared.isString(container)) {\n        const res = document.querySelector(container);\n        if (!res) {\n            runtimeCore.warn(`Failed to mount app: mount target selector \"${container}\" returned null.`);\n        }\n        return res;\n    }\n    if (window.ShadowRoot &&\n        container instanceof window.ShadowRoot &&\n        container.mode === 'closed') {\n        runtimeCore.warn(`mounting on a ShadowRoot with \\`{mode: \"closed\"}\\` may lead to unpredictable bugs`);\n    }\n    return container;\n}\nlet ssrDirectiveInitialized = false;\n/**\n * @internal\n */\nconst initDirectivesForSSR = () => {\n        if (!ssrDirectiveInitialized) {\n            ssrDirectiveInitialized = true;\n            initVModelForSSR();\n            initVShowForSSR();\n        }\n    }\n    ;\n\nexports.Transition = Transition;\nexports.TransitionGroup = TransitionGroup;\nexports.VueElement = VueElement;\nexports.createApp = createApp;\nexports.createSSRApp = createSSRApp;\nexports.defineCustomElement = defineCustomElement;\nexports.defineSSRCustomElement = defineSSRCustomElement;\nexports.hydrate = hydrate;\nexports.initDirectivesForSSR = initDirectivesForSSR;\nexports.render = render;\nexports.useCssModule = useCssModule;\nexports.useCssVars = useCssVars;\nexports.vModelCheckbox = vModelCheckbox;\nexports.vModelDynamic = vModelDynamic;\nexports.vModelRadio = vModelRadio;\nexports.vModelSelect = vModelSelect;\nexports.vModelText = vModelText;\nexports.vShow = vShow;\nexports.withKeys = withKeys;\nexports.withModifiers = withModifiers;\nObject.keys(runtimeCore).forEach(function(k) {\n  if (k !== 'default') exports[k] = runtimeCore[k];\n});\n/dist/runtime-dom.global.js\u0000\u0006var VueRuntimeDOM = (function (exports) {\n  'use strict';\n\n  /**\n   * Make a map and return a function for checking if a key\n   * is in that map.\n   * IMPORTANT: all calls of this function must be prefixed with\n   * \\/\\*#\\_\\_PURE\\_\\_\\*\\/\n   * So that rollup can tree-shake them if necessary.\n   */\n  function makeMap(str, expectsLowerCase) {\n      const map = Object.create(null);\n      const list = str.split(',');\n      for (let i = 0; i < list.length; i++) {\n          map[list[i]] = true;\n      }\n      return expectsLowerCase ? val => !!map[val.toLowerCase()] : val => !!map[val];\n  }\n\n  const GLOBALS_WHITE_LISTED = 'Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,' +\n      'decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,' +\n      'Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt';\n  const isGloballyWhitelisted = /*#__PURE__*/ makeMap(GLOBALS_WHITE_LISTED);\n\n  function normalizeStyle(value) {\n      if (isArray(value)) {\n          const res = {};\n          for (let i = 0; i < value.length; i++) {\n              const item = value[i];\n              const normalized = isString(item)\n                  ? parseStringStyle(item)\n                  : normalizeStyle(item);\n              if (normalized) {\n                  for (const key in normalized) {\n                      res[key] = normalized[key];\n                  }\n              }\n          }\n          return res;\n      }\n      else if (isString(value)) {\n          return value;\n      }\n      else if (isObject(value)) {\n          return value;\n      }\n  }\n  const listDelimiterRE = /;(?![^(]*\\))/g;\n  const propertyDelimiterRE = /:([^]+)/;\n  const styleCommentRE = /\\/\\*.*?\\*\\//gs;\n  function parseStringStyle(cssText) {\n      const ret = {};\n      cssText\n          .replace(styleCommentRE, '')\n          .split(listDelimiterRE)\n          .forEach(item => {\n          if (item) {\n              const tmp = item.split(propertyDelimiterRE);\n              tmp.length > 1 && (ret[tmp[0].trim()] = tmp[1].trim());\n          }\n      });\n      return ret;\n  }\n  function normalizeClass(value) {\n      let res = '';\n      if (isString(value)) {\n          res = value;\n      }\n      else if (isArray(value)) {\n          for (let i = 0; i < value.length; i++) {\n              const normalized = normalizeClass(value[i]);\n              if (normalized) {\n                  res += normalized + ' ';\n              }\n          }\n      }\n      else if (isObject(value)) {\n          for (const name in value) {\n              if (value[name]) {\n                  res += name + ' ';\n              }\n          }\n      }\n      return res.trim();\n  }\n  function normalizeProps(props) {\n      if (!props)\n          return null;\n      let { class: klass, style } = props;\n      if (klass && !isString(klass)) {\n          props.class = normalizeClass(klass);\n      }\n      if (style) {\n          props.style = normalizeStyle(style);\n      }\n      return props;\n  }\n\n  // These tag configs are shared between compiler-dom and runtime-dom, so they\n  // https://developer.mozilla.org/en-US/docs/Web/HTML/Element\n  const HTML_TAGS = 'html,body,base,head,link,meta,style,title,address,article,aside,footer,' +\n      'header,hgroup,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,' +\n      'figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,' +\n      'data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,' +\n      'time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,' +\n      'canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,' +\n      'th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,' +\n      'option,output,progress,select,textarea,details,dialog,menu,' +\n      'summary,template,blockquote,iframe,tfoot';\n  // https://developer.mozilla.org/en-US/docs/Web/SVG/Element\n  const SVG_TAGS = 'svg,animate,animateMotion,animateTransform,circle,clipPath,color-profile,' +\n      'defs,desc,discard,ellipse,feBlend,feColorMatrix,feComponentTransfer,' +\n      'feComposite,feConvolveMatrix,feDiffuseLighting,feDisplacementMap,' +\n      'feDistantLight,feDropShadow,feFlood,feFuncA,feFuncB,feFuncG,feFuncR,' +\n      'feGaussianBlur,feImage,feMerge,feMergeNode,feMorphology,feOffset,' +\n      'fePointLight,feSpecularLighting,feSpotLight,feTile,feTurbulence,filter,' +\n      'foreignObject,g,hatch,hatchpath,image,line,linearGradient,marker,mask,' +\n      'mesh,meshgradient,meshpatch,meshrow,metadata,mpath,path,pattern,' +\n      'polygon,polyline,radialGradient,rect,set,solidcolor,stop,switch,symbol,' +\n      'text,textPath,title,tspan,unknown,use,view';\n  /**\n   * Compiler only.\n   * Do NOT use in runtime code paths unless behind `true` flag.\n   */\n  const isHTMLTag = /*#__PURE__*/ makeMap(HTML_TAGS);\n  /**\n   * Compiler only.\n   * Do NOT use in runtime code paths unless behind `true` flag.\n   */\n  const isSVGTag = /*#__PURE__*/ makeMap(SVG_TAGS);\n\n  /**\n   * On the client we only need to offer special cases for boolean attributes that\n   * have different names from their corresponding dom properties:\n   * - itemscope -> N/A\n   * - allowfullscreen -> allowFullscreen\n   * - formnovalidate -> formNoValidate\n   * - ismap -> isMap\n   * - nomodule -> noModule\n   * - novalidate -> noValidate\n   * - readonly -> readOnly\n   */\n  const specialBooleanAttrs = `itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly`;\n  const isSpecialBooleanAttr = /*#__PURE__*/ makeMap(specialBooleanAttrs);\n  /**\n   * Boolean attributes should be included if the value is truthy or ''.\n   * e.g. `<select multiple>` compiles to `{ multiple: '' }`\n   */\n  function includeBooleanAttr(value) {\n      return !!value || value === '';\n  }\n\n  function looseCompareArrays(a, b) {\n      if (a.length !== b.length)\n          return false;\n      let equal = true;\n      for (let i = 0; equal && i < a.length; i++) {\n          equal = looseEqual(a[i], b[i]);\n      }\n      return equal;\n  }\n  function looseEqual(a, b) {\n      if (a === b)\n          return true;\n      let aValidType = isDate(a);\n      let bValidType = isDate(b);\n      if (aValidType || bValidType) {\n          return aValidType && bValidType ? a.getTime() === b.getTime() : false;\n      }\n      aValidType = isSymbol(a);\n      bValidType = isSymbol(b);\n      if (aValidType || bValidType) {\n          return a === b;\n      }\n      aValidType = isArray(a);\n      bValidType = isArray(b);\n      if (aValidType || bValidType) {\n          return aValidType && bValidType ? looseCompareArrays(a, b) : false;\n      }\n      aValidType = isObject(a);\n      bValidType = isObject(b);\n      if (aValidType || bValidType) {\n          /* istanbul ignore if: this if will probably never be called */\n          if (!aValidType || !bValidType) {\n              return false;\n          }\n          const aKeysCount = Object.keys(a).length;\n          const bKeysCount = Object.keys(b).length;\n          if (aKeysCount !== bKeysCount) {\n              return false;\n          }\n          for (const key in a) {\n              const aHasKey = a.hasOwnProperty(key);\n              const bHasKey = b.hasOwnProperty(key);\n              if ((aHasKey && !bHasKey) ||\n                  (!aHasKey && bHasKey) ||\n                  !looseEqual(a[key], b[key])) {\n                  return false;\n              }\n          }\n      }\n      return String(a) === String(b);\n  }\n  function looseIndexOf(arr, val) {\n      return arr.findIndex(item => looseEqual(item, val));\n  }\n\n  /**\n   * For converting {{ interpolation }} values to displayed strings.\n   * @private\n   */\n  const toDisplayString = (val) => {\n      return isString(val)\n          ? val\n          : val == null\n              ? ''\n              : isArray(val) ||\n                  (isObject(val) &&\n                      (val.toString === objectToString || !isFunction(val.toString)))\n                  ? JSON.stringify(val, replacer, 2)\n                  : String(val);\n  };\n  const replacer = (_key, val) => {\n      // can't use isRef here since @vue/shared has no deps\n      if (val && val.__v_isRef) {\n          return replacer(_key, val.value);\n      }\n      else if (isMap(val)) {\n          return {\n              [`Map(${val.size})`]: [...val.entries()].reduce((entries, [key, val]) => {\n                  entries[`${key} =>`] = val;\n                  return entries;\n              }, {})\n          };\n      }\n      else if (isSet(val)) {\n          return {\n              [`Set(${val.size})`]: [...val.values()]\n          };\n      }\n      else if (isObject(val) && !isArray(val) && !isPlainObject(val)) {\n          return String(val);\n      }\n      return val;\n  };\n\n  const EMPTY_OBJ = Object.freeze({})\n      ;\n  const EMPTY_ARR = Object.freeze([]) ;\n  const NOOP = () => { };\n  /**\n   * Always return false.\n   */\n  const NO = () => false;\n  const onRE = /^on[^a-z]/;\n  const isOn = (key) => onRE.test(key);\n  const isModelListener = (key) => key.startsWith('onUpdate:');\n  const extend = Object.assign;\n  const remove = (arr, el) => {\n      const i = arr.indexOf(el);\n      if (i > -1) {\n          arr.splice(i, 1);\n      }\n  };\n  const hasOwnProperty$1 = Object.prototype.hasOwnProperty;\n  const hasOwn = (val, key) => hasOwnProperty$1.call(val, key);\n  const isArray = Array.isArray;\n  const isMap = (val) => toTypeString(val) === '[object Map]';\n  const isSet = (val) => toTypeString(val) === '[object Set]';\n  const isDate = (val) => toTypeString(val) === '[object Date]';\n  const isRegExp = (val) => toTypeString(val) === '[object RegExp]';\n  const isFunction = (val) => typeof val === 'function';\n  const isString = (val) => typeof val === 'string';\n  const isSymbol = (val) => typeof val === 'symbol';\n  const isObject = (val) => val !== null && typeof val === 'object';\n  const isPromise = (val) => {\n      return isObject(val) && isFunction(val.then) && isFunction(val.catch);\n  };\n  const objectToString = Object.prototype.toString;\n  const toTypeString = (value) => objectToString.call(value);\n  const toRawType = (value) => {\n      // extract \"RawType\" from strings like \"[object RawType]\"\n      return toTypeString(value).slice(8, -1);\n  };\n  const isPlainObject = (val) => toTypeString(val) === '[object Object]';\n  const isIntegerKey = (key) => isString(key) &&\n      key !== 'NaN' &&\n      key[0] !== '-' &&\n      '' + parseInt(key, 10) === key;\n  const isReservedProp = /*#__PURE__*/ makeMap(\n  // the leading comma is intentional so empty string \"\" is also included\n  ',key,ref,ref_for,ref_key,' +\n      'onVnodeBeforeMount,onVnodeMounted,' +\n      'onVnodeBeforeUpdate,onVnodeUpdated,' +\n      'onVnodeBeforeUnmount,onVnodeUnmounted');\n  const isBuiltInDirective = /*#__PURE__*/ makeMap('bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo');\n  const cacheStringFunction = (fn) => {\n      const cache = Object.create(null);\n      return ((str) => {\n          const hit = cache[str];\n          return hit || (cache[str] = fn(str));\n      });\n  };\n  const camelizeRE = /-(\\w)/g;\n  /**\n   * @private\n   */\n  const camelize = cacheStringFunction((str) => {\n      return str.replace(camelizeRE, (_, c) => (c ? c.toUpperCase() : ''));\n  });\n  const hyphenateRE = /\\B([A-Z])/g;\n  /**\n   * @private\n   */\n  const hyphenate = cacheStringFunction((str) => str.replace(hyphenateRE, '-$1').toLowerCase());\n  /**\n   * @private\n   */\n  const capitalize = cacheStringFunction((str) => str.charAt(0).toUpperCase() + str.slice(1));\n  /**\n   * @private\n   */\n  const toHandlerKey = cacheStringFunction((str) => str ? `on${capitalize(str)}` : ``);\n  // compare whether a value has changed, accounting for NaN.\n  const hasChanged = (value, oldValue) => !Object.is(value, oldValue);\n  const invokeArrayFns = (fns, arg) => {\n      for (let i = 0; i < fns.length; i++) {\n          fns[i](arg);\n      }\n  };\n  const def = (obj, key, value) => {\n      Object.defineProperty(obj, key, {\n          configurable: true,\n          enumerable: false,\n          value\n      });\n  };\n  /**\n   * \"123-foo\" will be parsed to 123\n   * This is used for the .number modifier in v-model\n   */\n  const looseToNumber = (val) => {\n      const n = parseFloat(val);\n      return isNaN(n) ? val : n;\n  };\n  /**\n   * Only conerces number-like strings\n   * \"123-foo\" will be returned as-is\n   */\n  const toNumber = (val) => {\n      const n = isString(val) ? Number(val) : NaN;\n      return isNaN(n) ? val : n;\n  };\n  let _globalThis;\n  const getGlobalThis = () => {\n      return (_globalThis ||\n          (_globalThis =\n              typeof globalThis !== 'undefined'\n                  ? globalThis\n                  : typeof self !== 'undefined'\n                      ? self\n                      : typeof window !== 'undefined'\n                          ? window\n                          : typeof global !== 'undefined'\n                              ? global\n                              : {}));\n  };\n\n  function warn$1(msg, ...args) {\n      console.warn(`[Vue warn] ${msg}`, ...args);\n  }\n\n  let activeEffectScope;\n  class EffectScope {\n      constructor(detached = false) {\n          this.detached = detached;\n          /**\n           * @internal\n           */\n          this._active = true;\n          /**\n           * @internal\n           */\n          this.effects = [];\n          /**\n           * @internal\n           */\n          this.cleanups = [];\n          this.parent = activeEffectScope;\n          if (!detached && activeEffectScope) {\n              this.index =\n                  (activeEffectScope.scopes || (activeEffectScope.scopes = [])).push(this) - 1;\n          }\n      }\n      get active() {\n          return this._active;\n      }\n      run(fn) {\n          if (this._active) {\n              const currentEffectScope = activeEffectScope;\n              try {\n                  activeEffectScope = this;\n                  return fn();\n              }\n              finally {\n                  activeEffectScope = currentEffectScope;\n              }\n          }\n          else {\n              warn$1(`cannot run an inactive effect scope.`);\n          }\n      }\n      /**\n       * This should only be called on non-detached scopes\n       * @internal\n       */\n      on() {\n          activeEffectScope = this;\n      }\n      /**\n       * This should only be called on non-detached scopes\n       * @internal\n       */\n      off() {\n          activeEffectScope = this.parent;\n      }\n      stop(fromParent) {\n          if (this._active) {\n              let i, l;\n              for (i = 0, l = this.effects.length; i < l; i++) {\n                  this.effects[i].stop();\n              }\n              for (i = 0, l = this.cleanups.length; i < l; i++) {\n                  this.cleanups[i]();\n              }\n              if (this.scopes) {\n                  for (i = 0, l = this.scopes.length; i < l; i++) {\n                      this.scopes[i].stop(true);\n                  }\n              }\n              // nested scope, dereference from parent to avoid memory leaks\n              if (!this.detached && this.parent && !fromParent) {\n                  // optimized O(1) removal\n                  const last = this.parent.scopes.pop();\n                  if (last && last !== this) {\n                      this.parent.scopes[this.index] = last;\n                      last.index = this.index;\n                  }\n              }\n              this.parent = undefined;\n              this._active = false;\n          }\n      }\n  }\n  function effectScope(detached) {\n      return new EffectScope(detached);\n  }\n  function recordEffectScope(effect, scope = activeEffectScope) {\n      if (scope && scope.active) {\n          scope.effects.push(effect);\n      }\n  }\n  function getCurrentScope() {\n      return activeEffectScope;\n  }\n  function onScopeDispose(fn) {\n      if (activeEffectScope) {\n          activeEffectScope.cleanups.push(fn);\n      }\n      else {\n          warn$1(`onScopeDispose() is called when there is no active effect scope` +\n              ` to be associated with.`);\n      }\n  }\n\n  const createDep = (effects) => {\n      const dep = new Set(effects);\n      dep.w = 0;\n      dep.n = 0;\n      return dep;\n  };\n  const wasTracked = (dep) => (dep.w & trackOpBit) > 0;\n  const newTracked = (dep) => (dep.n & trackOpBit) > 0;\n  const initDepMarkers = ({ deps }) => {\n      if (deps.length) {\n          for (let i = 0; i < deps.length; i++) {\n              deps[i].w |= trackOpBit; // set was tracked\n          }\n      }\n  };\n  const finalizeDepMarkers = (effect) => {\n      const { deps } = effect;\n      if (deps.length) {\n          let ptr = 0;\n          for (let i = 0; i < deps.length; i++) {\n              const dep = deps[i];\n              if (wasTracked(dep) && !newTracked(dep)) {\n                  dep.delete(effect);\n              }\n              else {\n                  deps[ptr++] = dep;\n              }\n              // clear bits\n              dep.w &= ~trackOpBit;\n              dep.n &= ~trackOpBit;\n          }\n          deps.length = ptr;\n      }\n  };\n\n  const targetMap = new WeakMap();\n  // The number of effects currently being tracked recursively.\n  let effectTrackDepth = 0;\n  let trackOpBit = 1;\n  /**\n   * The bitwise track markers support at most 30 levels of recursion.\n   * This value is chosen to enable modern JS engines to use a SMI on all platforms.\n   * When recursion depth is greater, fall back to using a full cleanup.\n   */\n  const maxMarkerBits = 30;\n  let activeEffect;\n  const ITERATE_KEY = Symbol('iterate' );\n  const MAP_KEY_ITERATE_KEY = Symbol('Map key iterate' );\n  class ReactiveEffect {\n      constructor(fn, scheduler = null, scope) {\n          this.fn = fn;\n          this.scheduler = scheduler;\n          this.active = true;\n          this.deps = [];\n          this.parent = undefined;\n          recordEffectScope(this, scope);\n      }\n      run() {\n          if (!this.active) {\n              return this.fn();\n          }\n          let parent = activeEffect;\n          let lastShouldTrack = shouldTrack;\n          while (parent) {\n              if (parent === this) {\n                  return;\n              }\n              parent = parent.parent;\n          }\n          try {\n              this.parent = activeEffect;\n              activeEffect = this;\n              shouldTrack = true;\n              trackOpBit = 1 << ++effectTrackDepth;\n              if (effectTrackDepth <= maxMarkerBits) {\n                  initDepMarkers(this);\n              }\n              else {\n                  cleanupEffect(this);\n              }\n              return this.fn();\n          }\n          finally {\n              if (effectTrackDepth <= maxMarkerBits) {\n                  finalizeDepMarkers(this);\n              }\n              trackOpBit = 1 << --effectTrackDepth;\n              activeEffect = this.parent;\n              shouldTrack = lastShouldTrack;\n              this.parent = undefined;\n              if (this.deferStop) {\n                  this.stop();\n              }\n          }\n      }\n      stop() {\n          // stopped while running itself - defer the cleanup\n          if (activeEffect === this) {\n              this.deferStop = true;\n          }\n          else if (this.active) {\n              cleanupEffect(this);\n              if (this.onStop) {\n                  this.onStop();\n              }\n              this.active = false;\n          }\n      }\n  }\n  function cleanupEffect(effect) {\n      const { deps } = effect;\n      if (deps.length) {\n          for (let i = 0; i < deps.length; i++) {\n              deps[i].delete(effect);\n          }\n          deps.length = 0;\n      }\n  }\n  function effect(fn, options) {\n      if (fn.effect) {\n          fn = fn.effect.fn;\n      }\n      const _effect = new ReactiveEffect(fn);\n      if (options) {\n          extend(_effect, options);\n          if (options.scope)\n              recordEffectScope(_effect, options.scope);\n      }\n      if (!options || !options.lazy) {\n          _effect.run();\n      }\n      const runner = _effect.run.bind(_effect);\n      runner.effect = _effect;\n      return runner;\n  }\n  function stop(runner) {\n      runner.effect.stop();\n  }\n  let shouldTrack = true;\n  const trackStack = [];\n  function pauseTracking() {\n      trackStack.push(shouldTrack);\n      shouldTrack = false;\n  }\n  function resetTracking() {\n      const last = trackStack.pop();\n      shouldTrack = last === undefined ? true : last;\n  }\n  function track(target, type, key) {\n      if (shouldTrack && activeEffect) {\n          let depsMap = targetMap.get(target);\n          if (!depsMap) {\n              targetMap.set(target, (depsMap = new Map()));\n          }\n          let dep = depsMap.get(key);\n          if (!dep) {\n              depsMap.set(key, (dep = createDep()));\n          }\n          const eventInfo = { effect: activeEffect, target, type, key }\n              ;\n          trackEffects(dep, eventInfo);\n      }\n  }\n  function trackEffects(dep, debuggerEventExtraInfo) {\n      let shouldTrack = false;\n      if (effectTrackDepth <= maxMarkerBits) {\n          if (!newTracked(dep)) {\n              dep.n |= trackOpBit; // set newly tracked\n              shouldTrack = !wasTracked(dep);\n          }\n      }\n      else {\n          // Full cleanup mode.\n          shouldTrack = !dep.has(activeEffect);\n      }\n      if (shouldTrack) {\n          dep.add(activeEffect);\n          activeEffect.deps.push(dep);\n          if (activeEffect.onTrack) {\n              activeEffect.onTrack(Object.assign({ effect: activeEffect }, debuggerEventExtraInfo));\n          }\n      }\n  }\n  function trigger(target, type, key, newValue, oldValue, oldTarget) {\n      const depsMap = targetMap.get(target);\n      if (!depsMap) {\n          // never been tracked\n          return;\n      }\n      let deps = [];\n      if (type === \"clear\" /* TriggerOpTypes.CLEAR */) {\n          // collection being cleared\n          // trigger all effects for target\n          deps = [...depsMap.values()];\n      }\n      else if (key === 'length' && isArray(target)) {\n          const newLength = Number(newValue);\n          depsMap.forEach((dep, key) => {\n              if (key === 'length' || key >= newLength) {\n                  deps.push(dep);\n              }\n          });\n      }\n      else {\n          // schedule runs for SET | ADD | DELETE\n          if (key !== void 0) {\n              deps.push(depsMap.get(key));\n          }\n          // also run for iteration key on ADD | DELETE | Map.SET\n          switch (type) {\n              case \"add\" /* TriggerOpTypes.ADD */:\n                  if (!isArray(target)) {\n                      deps.push(depsMap.get(ITERATE_KEY));\n                      if (isMap(target)) {\n                          deps.push(depsMap.get(MAP_KEY_ITERATE_KEY));\n                      }\n                  }\n                  else if (isIntegerKey(key)) {\n                      // new index added to array -> length changes\n                      deps.push(depsMap.get('length'));\n                  }\n                  break;\n              case \"delete\" /* TriggerOpTypes.DELETE */:\n                  if (!isArray(target)) {\n                      deps.push(depsMap.get(ITERATE_KEY));\n                      if (isMap(target)) {\n                          deps.push(depsMap.get(MAP_KEY_ITERATE_KEY));\n                      }\n                  }\n                  break;\n              case \"set\" /* TriggerOpTypes.SET */:\n                  if (isMap(target)) {\n                      deps.push(depsMap.get(ITERATE_KEY));\n                  }\n                  break;\n          }\n      }\n      const eventInfo = { target, type, key, newValue, oldValue, oldTarget }\n          ;\n      if (deps.length === 1) {\n          if (deps[0]) {\n              {\n                  triggerEffects(deps[0], eventInfo);\n              }\n          }\n      }\n      else {\n          const effects = [];\n          for (const dep of deps) {\n              if (dep) {\n                  effects.push(...dep);\n              }\n          }\n          {\n              triggerEffects(createDep(effects), eventInfo);\n          }\n      }\n  }\n  function triggerEffects(dep, debuggerEventExtraInfo) {\n      // spread into array for stabilization\n      const effects = isArray(dep) ? dep : [...dep];\n      for (const effect of effects) {\n          if (effect.computed) {\n              triggerEffect(effect, debuggerEventExtraInfo);\n          }\n      }\n      for (const effect of effects) {\n          if (!effect.computed) {\n              triggerEffect(effect, debuggerEventExtraInfo);\n          }\n      }\n  }\n  function triggerEffect(effect, debuggerEventExtraInfo) {\n      if (effect !== activeEffect || effect.allowRecurse) {\n          if (effect.onTrigger) {\n              effect.onTrigger(extend({ effect }, debuggerEventExtraInfo));\n          }\n          if (effect.scheduler) {\n              effect.scheduler();\n          }\n          else {\n              effect.run();\n          }\n      }\n  }\n  function getDepFromReactive(object, key) {\n      var _a;\n      return (_a = targetMap.get(object)) === null || _a === void 0 ? void 0 : _a.get(key);\n  }\n\n  const isNonTrackableKeys = /*#__PURE__*/ makeMap(`__proto__,__v_isRef,__isVue`);\n  const builtInSymbols = new Set(\n  /*#__PURE__*/\n  Object.getOwnPropertyNames(Symbol)\n      // ios10.x Object.getOwnPropertyNames(Symbol) can enumerate 'arguments' and 'caller'\n      // but accessing them on Symbol leads to TypeError because Symbol is a strict mode\n      // function\n      .filter(key => key !== 'arguments' && key !== 'caller')\n      .map(key => Symbol[key])\n      .filter(isSymbol));\n  const get$1 = /*#__PURE__*/ createGetter();\n  const shallowGet = /*#__PURE__*/ createGetter(false, true);\n  const readonlyGet = /*#__PURE__*/ createGetter(true);\n  const shallowReadonlyGet = /*#__PURE__*/ createGetter(true, true);\n  const arrayInstrumentations = /*#__PURE__*/ createArrayInstrumentations();\n  function createArrayInstrumentations() {\n      const instrumentations = {};\n      ['includes', 'indexOf', 'lastIndexOf'].forEach(key => {\n          instrumentations[key] = function (...args) {\n              const arr = toRaw(this);\n              for (let i = 0, l = this.length; i < l; i++) {\n                  track(arr, \"get\" /* TrackOpTypes.GET */, i + '');\n              }\n              // we run the method using the original args first (which may be reactive)\n              const res = arr[key](...args);\n              if (res === -1 || res === false) {\n                  // if that didn't work, run it again using raw values.\n                  return arr[key](...args.map(toRaw));\n              }\n              else {\n                  return res;\n              }\n          };\n      });\n      ['push', 'pop', 'shift', 'unshift', 'splice'].forEach(key => {\n          instrumentations[key] = function (...args) {\n              pauseTracking();\n              const res = toRaw(this)[key].apply(this, args);\n              resetTracking();\n              return res;\n          };\n      });\n      return instrumentations;\n  }\n  function hasOwnProperty(key) {\n      const obj = toRaw(this);\n      track(obj, \"has\" /* TrackOpTypes.HAS */, key);\n      return obj.hasOwnProperty(key);\n  }\n  function createGetter(isReadonly = false, shallow = false) {\n      return function get(target, key, receiver) {\n          if (key === \"__v_isReactive\" /* ReactiveFlags.IS_REACTIVE */) {\n              return !isReadonly;\n          }\n          else if (key === \"__v_isReadonly\" /* ReactiveFlags.IS_READONLY */) {\n              return isReadonly;\n          }\n          else if (key === \"__v_isShallow\" /* ReactiveFlags.IS_SHALLOW */) {\n              return shallow;\n          }\n          else if (key === \"__v_raw\" /* ReactiveFlags.RAW */ &&\n              receiver ===\n                  (isReadonly\n                      ? shallow\n                          ? shallowReadonlyMap\n                          : readonlyMap\n                      : shallow\n                          ? shallowReactiveMap\n                          : reactiveMap).get(target)) {\n              return target;\n          }\n          const targetIsArray = isArray(target);\n          if (!isReadonly) {\n              if (targetIsArray && hasOwn(arrayInstrumentations, key)) {\n                  return Reflect.get(arrayInstrumentations, key, receiver);\n              }\n              if (key === 'hasOwnProperty') {\n                  return hasOwnProperty;\n              }\n          }\n          const res = Reflect.get(target, key, receiver);\n          if (isSymbol(key) ? builtInSymbols.has(key) : isNonTrackableKeys(key)) {\n              return res;\n          }\n          if (!isReadonly) {\n              track(target, \"get\" /* TrackOpTypes.GET */, key);\n          }\n          if (shallow) {\n              return res;\n          }\n          if (isRef(res)) {\n              // ref unwrapping - skip unwrap for Array + integer key.\n              return targetIsArray && isIntegerKey(key) ? res : res.value;\n          }\n          if (isObject(res)) {\n              // Convert returned value into a proxy as well. we do the isObject check\n              // here to avoid invalid value warning. Also need to lazy access readonly\n              // and reactive here to avoid circular dependency.\n              return isReadonly ? readonly(res) : reactive(res);\n          }\n          return res;\n      };\n  }\n  const set$1 = /*#__PURE__*/ createSetter();\n  const shallowSet = /*#__PURE__*/ createSetter(true);\n  function createSetter(shallow = false) {\n      return function set(target, key, value, receiver) {\n          let oldValue = target[key];\n          if (isReadonly(oldValue) && isRef(oldValue) && !isRef(value)) {\n              return false;\n          }\n          if (!shallow) {\n              if (!isShallow(value) && !isReadonly(value)) {\n                  oldValue = toRaw(oldValue);\n                  value = toRaw(value);\n              }\n              if (!isArray(target) && isRef(oldValue) && !isRef(value)) {\n                  oldValue.value = value;\n                  return true;\n              }\n          }\n          const hadKey = isArray(target) && isIntegerKey(key)\n              ? Number(key) < target.length\n              : hasOwn(target, key);\n          const result = Reflect.set(target, key, value, receiver);\n          // don't trigger if target is something up in the prototype chain of original\n          if (target === toRaw(receiver)) {\n              if (!hadKey) {\n                  trigger(target, \"add\" /* TriggerOpTypes.ADD */, key, value);\n              }\n              else if (hasChanged(value, oldValue)) {\n                  trigger(target, \"set\" /* TriggerOpTypes.SET */, key, value, oldValue);\n              }\n          }\n          return result;\n      };\n  }\n  function deleteProperty(target, key) {\n      const hadKey = hasOwn(target, key);\n      const oldValue = target[key];\n      const result = Reflect.deleteProperty(target, key);\n      if (result && hadKey) {\n          trigger(target, \"delete\" /* TriggerOpTypes.DELETE */, key, undefined, oldValue);\n      }\n      return result;\n  }\n  function has$1(target, key) {\n      const result = Reflect.has(target, key);\n      if (!isSymbol(key) || !builtInSymbols.has(key)) {\n          track(target, \"has\" /* TrackOpTypes.HAS */, key);\n      }\n      return result;\n  }\n  function ownKeys(target) {\n      track(target, \"iterate\" /* TrackOpTypes.ITERATE */, isArray(target) ? 'length' : ITERATE_KEY);\n      return Reflect.ownKeys(target);\n  }\n  const mutableHandlers = {\n      get: get$1,\n      set: set$1,\n      deleteProperty,\n      has: has$1,\n      ownKeys\n  };\n  const readonlyHandlers = {\n      get: readonlyGet,\n      set(target, key) {\n          {\n              warn$1(`Set operation on key \"${String(key)}\" failed: target is readonly.`, target);\n          }\n          return true;\n      },\n      deleteProperty(target, key) {\n          {\n              warn$1(`Delete operation on key \"${String(key)}\" failed: target is readonly.`, target);\n          }\n          return true;\n      }\n  };\n  const shallowReactiveHandlers = /*#__PURE__*/ extend({}, mutableHandlers, {\n      get: shallowGet,\n      set: shallowSet\n  });\n  // Props handlers are special in the sense that it should not unwrap top-level\n  // refs (in order to allow refs to be explicitly passed down), but should\n  // retain the reactivity of the normal readonly object.\n  const shallowReadonlyHandlers = /*#__PURE__*/ extend({}, readonlyHandlers, {\n      get: shallowReadonlyGet\n  });\n\n  const toShallow = (value) => value;\n  const getProto = (v) => Reflect.getPrototypeOf(v);\n  function get(target, key, isReadonly = false, isShallow = false) {\n      // #1772: readonly(reactive(Map)) should return readonly + reactive version\n      // of the value\n      target = target[\"__v_raw\" /* ReactiveFlags.RAW */];\n      const rawTarget = toRaw(target);\n      const rawKey = toRaw(key);\n      if (!isReadonly) {\n          if (key !== rawKey) {\n              track(rawTarget, \"get\" /* TrackOpTypes.GET */, key);\n          }\n          track(rawTarget, \"get\" /* TrackOpTypes.GET */, rawKey);\n      }\n      const { has } = getProto(rawTarget);\n      const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive;\n      if (has.call(rawTarget, key)) {\n          return wrap(target.get(key));\n      }\n      else if (has.call(rawTarget, rawKey)) {\n          return wrap(target.get(rawKey));\n      }\n      else if (target !== rawTarget) {\n          // #3602 readonly(reactive(Map))\n          // ensure that the nested reactive `Map` can do tracking for itself\n          target.get(key);\n      }\n  }\n  function has(key, isReadonly = false) {\n      const target = this[\"__v_raw\" /* ReactiveFlags.RAW */];\n      const rawTarget = toRaw(target);\n      const rawKey = toRaw(key);\n      if (!isReadonly) {\n          if (key !== rawKey) {\n              track(rawTarget, \"has\" /* TrackOpTypes.HAS */, key);\n          }\n          track(rawTarget, \"has\" /* TrackOpTypes.HAS */, rawKey);\n      }\n      return key === rawKey\n          ? target.has(key)\n          : target.has(key) || target.has(rawKey);\n  }\n  function size(target, isReadonly = false) {\n      target = target[\"__v_raw\" /* ReactiveFlags.RAW */];\n      !isReadonly && track(toRaw(target), \"iterate\" /* TrackOpTypes.ITERATE */, ITERATE_KEY);\n      return Reflect.get(target, 'size', target);\n  }\n  function add(value) {\n      value = toRaw(value);\n      const target = toRaw(this);\n      const proto = getProto(target);\n      const hadKey = proto.has.call(target, value);\n      if (!hadKey) {\n          target.add(value);\n          trigger(target, \"add\" /* TriggerOpTypes.ADD */, value, value);\n      }\n      return this;\n  }\n  function set(key, value) {\n      value = toRaw(value);\n      const target = toRaw(this);\n      const { has, get } = getProto(target);\n      let hadKey = has.call(target, key);\n      if (!hadKey) {\n          key = toRaw(key);\n          hadKey = has.call(target, key);\n      }\n      else {\n          checkIdentityKeys(target, has, key);\n      }\n      const oldValue = get.call(target, key);\n      target.set(key, value);\n      if (!hadKey) {\n          trigger(target, \"add\" /* TriggerOpTypes.ADD */, key, value);\n      }\n      else if (hasChanged(value, oldValue)) {\n          trigger(target, \"set\" /* TriggerOpTypes.SET */, key, value, oldValue);\n      }\n      return this;\n  }\n  function deleteEntry(key) {\n      const target = toRaw(this);\n      const { has, get } = getProto(target);\n      let hadKey = has.call(target, key);\n      if (!hadKey) {\n          key = toRaw(key);\n          hadKey = has.call(target, key);\n      }\n      else {\n          checkIdentityKeys(target, has, key);\n      }\n      const oldValue = get ? get.call(target, key) : undefined;\n      // forward the operation before queueing reactions\n      const result = target.delete(key);\n      if (hadKey) {\n          trigger(target, \"delete\" /* TriggerOpTypes.DELETE */, key, undefined, oldValue);\n      }\n      return result;\n  }\n  function clear() {\n      const target = toRaw(this);\n      const hadItems = target.size !== 0;\n      const oldTarget = isMap(target)\n              ? new Map(target)\n              : new Set(target)\n          ;\n      // forward the operation before queueing reactions\n      const result = target.clear();\n      if (hadItems) {\n          trigger(target, \"clear\" /* TriggerOpTypes.CLEAR */, undefined, undefined, oldTarget);\n      }\n      return result;\n  }\n  function createForEach(isReadonly, isShallow) {\n      return function forEach(callback, thisArg) {\n          const observed = this;\n          const target = observed[\"__v_raw\" /* ReactiveFlags.RAW */];\n          const rawTarget = toRaw(target);\n          const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive;\n          !isReadonly && track(rawTarget, \"iterate\" /* TrackOpTypes.ITERATE */, ITERATE_KEY);\n          return target.forEach((value, key) => {\n              // important: make sure the callback is\n              // 1. invoked with the reactive map as `this` and 3rd arg\n              // 2. the value received should be a corresponding reactive/readonly.\n              return callback.call(thisArg, wrap(value), wrap(key), observed);\n          });\n      };\n  }\n  function createIterableMethod(method, isReadonly, isShallow) {\n      return function (...args) {\n          const target = this[\"__v_raw\" /* ReactiveFlags.RAW */];\n          const rawTarget = toRaw(target);\n          const targetIsMap = isMap(rawTarget);\n          const isPair = method === 'entries' || (method === Symbol.iterator && targetIsMap);\n          const isKeyOnly = method === 'keys' && targetIsMap;\n          const innerIterator = target[method](...args);\n          const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive;\n          !isReadonly &&\n              track(rawTarget, \"iterate\" /* TrackOpTypes.ITERATE */, isKeyOnly ? MAP_KEY_ITERATE_KEY : ITERATE_KEY);\n          // return a wrapped iterator which returns observed versions of the\n          // values emitted from the real iterator\n          return {\n              // iterator protocol\n              next() {\n                  const { value, done } = innerIterator.next();\n                  return done\n                      ? { value, done }\n                      : {\n                          value: isPair ? [wrap(value[0]), wrap(value[1])] : wrap(value),\n                          done\n                      };\n              },\n              // iterable protocol\n              [Symbol.iterator]() {\n                  return this;\n              }\n          };\n      };\n  }\n  function createReadonlyMethod(type) {\n      return function (...args) {\n          {\n              const key = args[0] ? `on key \"${args[0]}\" ` : ``;\n              console.warn(`${capitalize(type)} operation ${key}failed: target is readonly.`, toRaw(this));\n          }\n          return type === \"delete\" /* TriggerOpTypes.DELETE */ ? false : this;\n      };\n  }\n  function createInstrumentations() {\n      const mutableInstrumentations = {\n          get(key) {\n              return get(this, key);\n          },\n          get size() {\n              return size(this);\n          },\n          has,\n          add,\n          set,\n          delete: deleteEntry,\n          clear,\n          forEach: createForEach(false, false)\n      };\n      const shallowInstrumentations = {\n          get(key) {\n              return get(this, key, false, true);\n          },\n          get size() {\n              return size(this);\n          },\n          has,\n          add,\n          set,\n          delete: deleteEntry,\n          clear,\n          forEach: createForEach(false, true)\n      };\n      const readonlyInstrumentations = {\n          get(key) {\n              return get(this, key, true);\n          },\n          get size() {\n              return size(this, true);\n          },\n          has(key) {\n              return has.call(this, key, true);\n          },\n          add: createReadonlyMethod(\"add\" /* TriggerOpTypes.ADD */),\n          set: createReadonlyMethod(\"set\" /* TriggerOpTypes.SET */),\n          delete: createReadonlyMethod(\"delete\" /* TriggerOpTypes.DELETE */),\n          clear: createReadonlyMethod(\"clear\" /* TriggerOpTypes.CLEAR */),\n          forEach: createForEach(true, false)\n      };\n      const shallowReadonlyInstrumentations = {\n          get(key) {\n              return get(this, key, true, true);\n          },\n          get size() {\n              return size(this, true);\n          },\n          has(key) {\n              return has.call(this, key, true);\n          },\n          add: createReadonlyMethod(\"add\" /* TriggerOpTypes.ADD */),\n          set: createReadonlyMethod(\"set\" /* TriggerOpTypes.SET */),\n          delete: createReadonlyMethod(\"delete\" /* TriggerOpTypes.DELETE */),\n          clear: createReadonlyMethod(\"clear\" /* TriggerOpTypes.CLEAR */),\n          forEach: createForEach(true, true)\n      };\n      const iteratorMethods = ['keys', 'values', 'entries', Symbol.iterator];\n      iteratorMethods.forEach(method => {\n          mutableInstrumentations[method] = createIterableMethod(method, false, false);\n          readonlyInstrumentations[method] = createIterableMethod(method, true, false);\n          shallowInstrumentations[method] = createIterableMethod(method, false, true);\n          shallowReadonlyInstrumentations[method] = createIterableMethod(method, true, true);\n      });\n      return [\n          mutableInstrumentations,\n          readonlyInstrumentations,\n          shallowInstrumentations,\n          shallowReadonlyInstrumentations\n      ];\n  }\n  const [mutableInstrumentations, readonlyInstrumentations, shallowInstrumentations, shallowReadonlyInstrumentations] = /* #__PURE__*/ createInstrumentations();\n  function createInstrumentationGetter(isReadonly, shallow) {\n      const instrumentations = shallow\n          ? isReadonly\n              ? shallowReadonlyInstrumentations\n              : shallowInstrumentations\n          : isReadonly\n              ? readonlyInstrumentations\n              : mutableInstrumentations;\n      return (target, key, receiver) => {\n          if (key === \"__v_isReactive\" /* ReactiveFlags.IS_REACTIVE */) {\n              return !isReadonly;\n          }\n          else if (key === \"__v_isReadonly\" /* ReactiveFlags.IS_READONLY */) {\n              return isReadonly;\n          }\n          else if (key === \"__v_raw\" /* ReactiveFlags.RAW */) {\n              return target;\n          }\n          return Reflect.get(hasOwn(instrumentations, key) && key in target\n              ? instrumentations\n              : target, key, receiver);\n      };\n  }\n  const mutableCollectionHandlers = {\n      get: /*#__PURE__*/ createInstrumentationGetter(false, false)\n  };\n  const shallowCollectionHandlers = {\n      get: /*#__PURE__*/ createInstrumentationGetter(false, true)\n  };\n  const readonlyCollectionHandlers = {\n      get: /*#__PURE__*/ createInstrumentationGetter(true, false)\n  };\n  const shallowReadonlyCollectionHandlers = {\n      get: /*#__PURE__*/ createInstrumentationGetter(true, true)\n  };\n  function checkIdentityKeys(target, has, key) {\n      const rawKey = toRaw(key);\n      if (rawKey !== key && has.call(target, rawKey)) {\n          const type = toRawType(target);\n          console.warn(`Reactive ${type} contains both the raw and reactive ` +\n              `versions of the same object${type === `Map` ? ` as keys` : ``}, ` +\n              `which can lead to inconsistencies. ` +\n              `Avoid differentiating between the raw and reactive versions ` +\n              `of an object and only use the reactive version if possible.`);\n      }\n  }\n\n  const reactiveMap = new WeakMap();\n  const shallowReactiveMap = new WeakMap();\n  const readonlyMap = new WeakMap();\n  const shallowReadonlyMap = new WeakMap();\n  function targetTypeMap(rawType) {\n      switch (rawType) {\n          case 'Object':\n          case 'Array':\n              return 1 /* TargetType.COMMON */;\n          case 'Map':\n          case 'Set':\n          case 'WeakMap':\n          case 'WeakSet':\n              return 2 /* TargetType.COLLECTION */;\n          default:\n              return 0 /* TargetType.INVALID */;\n      }\n  }\n  function getTargetType(value) {\n      return value[\"__v_skip\" /* ReactiveFlags.SKIP */] || !Object.isExtensible(value)\n          ? 0 /* TargetType.INVALID */\n          : targetTypeMap(toRawType(value));\n  }\n  function reactive(target) {\n      // if trying to observe a readonly proxy, return the readonly version.\n      if (isReadonly(target)) {\n          return target;\n      }\n      return createReactiveObject(target, false, mutableHandlers, mutableCollectionHandlers, reactiveMap);\n  }\n  /**\n   * Return a shallowly-reactive copy of the original object, where only the root\n   * level properties are reactive. It also does not auto-unwrap refs (even at the\n   * root level).\n   */\n  function shallowReactive(target) {\n      return createReactiveObject(target, false, shallowReactiveHandlers, shallowCollectionHandlers, shallowReactiveMap);\n  }\n  /**\n   * Creates a readonly copy of the original object. Note the returned copy is not\n   * made reactive, but `readonly` can be called on an already reactive object.\n   */\n  function readonly(target) {\n      return createReactiveObject(target, true, readonlyHandlers, readonlyCollectionHandlers, readonlyMap);\n  }\n  /**\n   * Returns a reactive-copy of the original object, where only the root level\n   * properties are readonly, and does NOT unwrap refs nor recursively convert\n   * returned properties.\n   * This is used for creating the props proxy object for stateful components.\n   */\n  function shallowReadonly(target) {\n      return createReactiveObject(target, true, shallowReadonlyHandlers, shallowReadonlyCollectionHandlers, shallowReadonlyMap);\n  }\n  function createReactiveObject(target, isReadonly, baseHandlers, collectionHandlers, proxyMap) {\n      if (!isObject(target)) {\n          {\n              console.warn(`value cannot be made reactive: ${String(target)}`);\n          }\n          return target;\n      }\n      // target is already a Proxy, return it.\n      // exception: calling readonly() on a reactive object\n      if (target[\"__v_raw\" /* ReactiveFlags.RAW */] &&\n          !(isReadonly && target[\"__v_isReactive\" /* ReactiveFlags.IS_REACTIVE */])) {\n          return target;\n      }\n      // target already has corresponding Proxy\n      const existingProxy = proxyMap.get(target);\n      if (existingProxy) {\n          return existingProxy;\n      }\n      // only specific value types can be observed.\n      const targetType = getTargetType(target);\n      if (targetType === 0 /* TargetType.INVALID */) {\n          return target;\n      }\n      const proxy = new Proxy(target, targetType === 2 /* TargetType.COLLECTION */ ? collectionHandlers : baseHandlers);\n      proxyMap.set(target, proxy);\n      return proxy;\n  }\n  function isReactive(value) {\n      if (isReadonly(value)) {\n          return isReactive(value[\"__v_raw\" /* ReactiveFlags.RAW */]);\n      }\n      return !!(value && value[\"__v_isReactive\" /* ReactiveFlags.IS_REACTIVE */]);\n  }\n  function isReadonly(value) {\n      return !!(value && value[\"__v_isReadonly\" /* ReactiveFlags.IS_READONLY */]);\n  }\n  function isShallow(value) {\n      return !!(value && value[\"__v_isShallow\" /* ReactiveFlags.IS_SHALLOW */]);\n  }\n  function isProxy(value) {\n      return isReactive(value) || isReadonly(value);\n  }\n  function toRaw(observed) {\n      const raw = observed && observed[\"__v_raw\" /* ReactiveFlags.RAW */];\n      return raw ? toRaw(raw) : observed;\n  }\n  function markRaw(value) {\n      def(value, \"__v_skip\" /* ReactiveFlags.SKIP */, true);\n      return value;\n  }\n  const toReactive = (value) => isObject(value) ? reactive(value) : value;\n  const toReadonly = (value) => isObject(value) ? readonly(value) : value;\n\n  function trackRefValue(ref) {\n      if (shouldTrack && activeEffect) {\n          ref = toRaw(ref);\n          {\n              trackEffects(ref.dep || (ref.dep = createDep()), {\n                  target: ref,\n                  type: \"get\" /* TrackOpTypes.GET */,\n                  key: 'value'\n              });\n          }\n      }\n  }\n  function triggerRefValue(ref, newVal) {\n      ref = toRaw(ref);\n      const dep = ref.dep;\n      if (dep) {\n          {\n              triggerEffects(dep, {\n                  target: ref,\n                  type: \"set\" /* TriggerOpTypes.SET */,\n                  key: 'value',\n                  newValue: newVal\n              });\n          }\n      }\n  }\n  function isRef(r) {\n      return !!(r && r.__v_isRef === true);\n  }\n  function ref(value) {\n      return createRef(value, false);\n  }\n  function shallowRef(value) {\n      return createRef(value, true);\n  }\n  function createRef(rawValue, shallow) {\n      if (isRef(rawValue)) {\n          return rawValue;\n      }\n      return new RefImpl(rawValue, shallow);\n  }\n  class RefImpl {\n      constructor(value, __v_isShallow) {\n          this.__v_isShallow = __v_isShallow;\n          this.dep = undefined;\n          this.__v_isRef = true;\n          this._rawValue = __v_isShallow ? value : toRaw(value);\n          this._value = __v_isShallow ? value : toReactive(value);\n      }\n      get value() {\n          trackRefValue(this);\n          return this._value;\n      }\n      set value(newVal) {\n          const useDirectValue = this.__v_isShallow || isShallow(newVal) || isReadonly(newVal);\n          newVal = useDirectValue ? newVal : toRaw(newVal);\n          if (hasChanged(newVal, this._rawValue)) {\n              this._rawValue = newVal;\n              this._value = useDirectValue ? newVal : toReactive(newVal);\n              triggerRefValue(this, newVal);\n          }\n      }\n  }\n  function triggerRef(ref) {\n      triggerRefValue(ref, ref.value );\n  }\n  function unref(ref) {\n      return isRef(ref) ? ref.value : ref;\n  }\n  const shallowUnwrapHandlers = {\n      get: (target, key, receiver) => unref(Reflect.get(target, key, receiver)),\n      set: (target, key, value, receiver) => {\n          const oldValue = target[key];\n          if (isRef(oldValue) && !isRef(value)) {\n              oldValue.value = value;\n              return true;\n          }\n          else {\n              return Reflect.set(target, key, value, receiver);\n          }\n      }\n  };\n  function proxyRefs(objectWithRefs) {\n      return isReactive(objectWithRefs)\n          ? objectWithRefs\n          : new Proxy(objectWithRefs, shallowUnwrapHandlers);\n  }\n  class CustomRefImpl {\n      constructor(factory) {\n          this.dep = undefined;\n          this.__v_isRef = true;\n          const { get, set } = factory(() => trackRefValue(this), () => triggerRefValue(this));\n          this._get = get;\n          this._set = set;\n      }\n      get value() {\n          return this._get();\n      }\n      set value(newVal) {\n          this._set(newVal);\n      }\n  }\n  function customRef(factory) {\n      return new CustomRefImpl(factory);\n  }\n  function toRefs(object) {\n      if (!isProxy(object)) {\n          console.warn(`toRefs() expects a reactive object but received a plain one.`);\n      }\n      const ret = isArray(object) ? new Array(object.length) : {};\n      for (const key in object) {\n          ret[key] = toRef(object, key);\n      }\n      return ret;\n  }\n  class ObjectRefImpl {\n      constructor(_object, _key, _defaultValue) {\n          this._object = _object;\n          this._key = _key;\n          this._defaultValue = _defaultValue;\n          this.__v_isRef = true;\n      }\n      get value() {\n          const val = this._object[this._key];\n          return val === undefined ? this._defaultValue : val;\n      }\n      set value(newVal) {\n          this._object[this._key] = newVal;\n      }\n      get dep() {\n          return getDepFromReactive(toRaw(this._object), this._key);\n      }\n  }\n  function toRef(object, key, defaultValue) {\n      const val = object[key];\n      return isRef(val)\n          ? val\n          : new ObjectRefImpl(object, key, defaultValue);\n  }\n\n  var _a;\n  class ComputedRefImpl {\n      constructor(getter, _setter, isReadonly, isSSR) {\n          this._setter = _setter;\n          this.dep = undefined;\n          this.__v_isRef = true;\n          this[_a] = false;\n          this._dirty = true;\n          this.effect = new ReactiveEffect(getter, () => {\n              if (!this._dirty) {\n                  this._dirty = true;\n                  triggerRefValue(this);\n              }\n          });\n          this.effect.computed = this;\n          this.effect.active = this._cacheable = !isSSR;\n          this[\"__v_isReadonly\" /* ReactiveFlags.IS_READONLY */] = isReadonly;\n      }\n      get value() {\n          // the computed ref may get wrapped by other proxies e.g. readonly() #3376\n          const self = toRaw(this);\n          trackRefValue(self);\n          if (self._dirty || !self._cacheable) {\n              self._dirty = false;\n              self._value = self.effect.run();\n          }\n          return self._value;\n      }\n      set value(newValue) {\n          this._setter(newValue);\n      }\n  }\n  _a = \"__v_isReadonly\" /* ReactiveFlags.IS_READONLY */;\n  function computed$1(getterOrOptions, debugOptions, isSSR = false) {\n      let getter;\n      let setter;\n      const onlyGetter = isFunction(getterOrOptions);\n      if (onlyGetter) {\n          getter = getterOrOptions;\n          setter = () => {\n                  console.warn('Write operation failed: computed value is readonly');\n              }\n              ;\n      }\n      else {\n          getter = getterOrOptions.get;\n          setter = getterOrOptions.set;\n      }\n      const cRef = new ComputedRefImpl(getter, setter, onlyGetter || !setter, isSSR);\n      if (debugOptions && !isSSR) {\n          cRef.effect.onTrack = debugOptions.onTrack;\n          cRef.effect.onTrigger = debugOptions.onTrigger;\n      }\n      return cRef;\n  }\n\n  const stack = [];\n  function pushWarningContext(vnode) {\n      stack.push(vnode);\n  }\n  function popWarningContext() {\n      stack.pop();\n  }\n  function warn(msg, ...args) {\n      // avoid props formatting or warn handler tracking deps that might be mutated\n      // during patch, leading to infinite recursion.\n      pauseTracking();\n      const instance = stack.length ? stack[stack.length - 1].component : null;\n      const appWarnHandler = instance && instance.appContext.config.warnHandler;\n      const trace = getComponentTrace();\n      if (appWarnHandler) {\n          callWithErrorHandling(appWarnHandler, instance, 11 /* ErrorCodes.APP_WARN_HANDLER */, [\n              msg + args.join(''),\n              instance && instance.proxy,\n              trace\n                  .map(({ vnode }) => `at <${formatComponentName(instance, vnode.type)}>`)\n                  .join('\\n'),\n              trace\n          ]);\n      }\n      else {\n          const warnArgs = [`[Vue warn]: ${msg}`, ...args];\n          /* istanbul ignore if */\n          if (trace.length &&\n              // avoid spamming console during tests\n              !false) {\n              warnArgs.push(`\\n`, ...formatTrace(trace));\n          }\n          console.warn(...warnArgs);\n      }\n      resetTracking();\n  }\n  function getComponentTrace() {\n      let currentVNode = stack[stack.length - 1];\n      if (!currentVNode) {\n          return [];\n      }\n      // we can't just use the stack because it will be incomplete during updates\n      // that did not start from the root. Re-construct the parent chain using\n      // instance parent pointers.\n      const normalizedStack = [];\n      while (currentVNode) {\n          const last = normalizedStack[0];\n          if (last && last.vnode === currentVNode) {\n              last.recurseCount++;\n          }\n          else {\n              normalizedStack.push({\n                  vnode: currentVNode,\n                  recurseCount: 0\n              });\n          }\n          const parentInstance = currentVNode.component && currentVNode.component.parent;\n          currentVNode = parentInstance && parentInstance.vnode;\n      }\n      return normalizedStack;\n  }\n  /* istanbul ignore next */\n  function formatTrace(trace) {\n      const logs = [];\n      trace.forEach((entry, i) => {\n          logs.push(...(i === 0 ? [] : [`\\n`]), ...formatTraceEntry(entry));\n      });\n      return logs;\n  }\n  function formatTraceEntry({ vnode, recurseCount }) {\n      const postfix = recurseCount > 0 ? `... (${recurseCount} recursive calls)` : ``;\n      const isRoot = vnode.component ? vnode.component.parent == null : false;\n      const open = ` at <${formatComponentName(vnode.component, vnode.type, isRoot)}`;\n      const close = `>` + postfix;\n      return vnode.props\n          ? [open, ...formatProps(vnode.props), close]\n          : [open + close];\n  }\n  /* istanbul ignore next */\n  function formatProps(props) {\n      const res = [];\n      const keys = Object.keys(props);\n      keys.slice(0, 3).forEach(key => {\n          res.push(...formatProp(key, props[key]));\n      });\n      if (keys.length > 3) {\n          res.push(` ...`);\n      }\n      return res;\n  }\n  /* istanbul ignore next */\n  function formatProp(key, value, raw) {\n      if (isString(value)) {\n          value = JSON.stringify(value);\n          return raw ? value : [`${key}=${value}`];\n      }\n      else if (typeof value === 'number' ||\n          typeof value === 'boolean' ||\n          value == null) {\n          return raw ? value : [`${key}=${value}`];\n      }\n      else if (isRef(value)) {\n          value = formatProp(key, toRaw(value.value), true);\n          return raw ? value : [`${key}=Ref<`, value, `>`];\n      }\n      else if (isFunction(value)) {\n          return [`${key}=fn${value.name ? `<${value.name}>` : ``}`];\n      }\n      else {\n          value = toRaw(value);\n          return raw ? value : [`${key}=`, value];\n      }\n  }\n  /**\n   * @internal\n   */\n  function assertNumber(val, type) {\n      if (val === undefined) {\n          return;\n      }\n      else if (typeof val !== 'number') {\n          warn(`${type} is not a valid number - ` + `got ${JSON.stringify(val)}.`);\n      }\n      else if (isNaN(val)) {\n          warn(`${type} is NaN - ` + 'the duration expression might be incorrect.');\n      }\n  }\n\n  const ErrorTypeStrings = {\n      [\"sp\" /* LifecycleHooks.SERVER_PREFETCH */]: 'serverPrefetch hook',\n      [\"bc\" /* LifecycleHooks.BEFORE_CREATE */]: 'beforeCreate hook',\n      [\"c\" /* LifecycleHooks.CREATED */]: 'created hook',\n      [\"bm\" /* LifecycleHooks.BEFORE_MOUNT */]: 'beforeMount hook',\n      [\"m\" /* LifecycleHooks.MOUNTED */]: 'mounted hook',\n      [\"bu\" /* LifecycleHooks.BEFORE_UPDATE */]: 'beforeUpdate hook',\n      [\"u\" /* LifecycleHooks.UPDATED */]: 'updated',\n      [\"bum\" /* LifecycleHooks.BEFORE_UNMOUNT */]: 'beforeUnmount hook',\n      [\"um\" /* LifecycleHooks.UNMOUNTED */]: 'unmounted hook',\n      [\"a\" /* LifecycleHooks.ACTIVATED */]: 'activated hook',\n      [\"da\" /* LifecycleHooks.DEACTIVATED */]: 'deactivated hook',\n      [\"ec\" /* LifecycleHooks.ERROR_CAPTURED */]: 'errorCaptured hook',\n      [\"rtc\" /* LifecycleHooks.RENDER_TRACKED */]: 'renderTracked hook',\n      [\"rtg\" /* LifecycleHooks.RENDER_TRIGGERED */]: 'renderTriggered hook',\n      [0 /* ErrorCodes.SETUP_FUNCTION */]: 'setup function',\n      [1 /* ErrorCodes.RENDER_FUNCTION */]: 'render function',\n      [2 /* ErrorCodes.WATCH_GETTER */]: 'watcher getter',\n      [3 /* ErrorCodes.WATCH_CALLBACK */]: 'watcher callback',\n      [4 /* ErrorCodes.WATCH_CLEANUP */]: 'watcher cleanup function',\n      [5 /* ErrorCodes.NATIVE_EVENT_HANDLER */]: 'native event handler',\n      [6 /* ErrorCodes.COMPONENT_EVENT_HANDLER */]: 'component event handler',\n      [7 /* ErrorCodes.VNODE_HOOK */]: 'vnode hook',\n      [8 /* ErrorCodes.DIRECTIVE_HOOK */]: 'directive hook',\n      [9 /* ErrorCodes.TRANSITION_HOOK */]: 'transition hook',\n      [10 /* ErrorCodes.APP_ERROR_HANDLER */]: 'app errorHandler',\n      [11 /* ErrorCodes.APP_WARN_HANDLER */]: 'app warnHandler',\n      [12 /* ErrorCodes.FUNCTION_REF */]: 'ref function',\n      [13 /* ErrorCodes.ASYNC_COMPONENT_LOADER */]: 'async component loader',\n      [14 /* ErrorCodes.SCHEDULER */]: 'scheduler flush. This is likely a Vue internals bug. ' +\n          'Please open an issue at https://new-issue.vuejs.org/?repo=vuejs/core'\n  };\n  function callWithErrorHandling(fn, instance, type, args) {\n      let res;\n      try {\n          res = args ? fn(...args) : fn();\n      }\n      catch (err) {\n          handleError(err, instance, type);\n      }\n      return res;\n  }\n  function callWithAsyncErrorHandling(fn, instance, type, args) {\n      if (isFunction(fn)) {\n          const res = callWithErrorHandling(fn, instance, type, args);\n          if (res && isPromise(res)) {\n              res.catch(err => {\n                  handleError(err, instance, type);\n              });\n          }\n          return res;\n      }\n      const values = [];\n      for (let i = 0; i < fn.length; i++) {\n          values.push(callWithAsyncErrorHandling(fn[i], instance, type, args));\n      }\n      return values;\n  }\n  function handleError(err, instance, type, throwInDev = true) {\n      const contextVNode = instance ? instance.vnode : null;\n      if (instance) {\n          let cur = instance.parent;\n          // the exposed instance is the render proxy to keep it consistent with 2.x\n          const exposedInstance = instance.proxy;\n          // in production the hook receives only the error code\n          const errorInfo = ErrorTypeStrings[type] ;\n          while (cur) {\n              const errorCapturedHooks = cur.ec;\n              if (errorCapturedHooks) {\n                  for (let i = 0; i < errorCapturedHooks.length; i++) {\n                      if (errorCapturedHooks[i](err, exposedInstance, errorInfo) === false) {\n                          return;\n                      }\n                  }\n              }\n              cur = cur.parent;\n          }\n          // app-level handling\n          const appErrorHandler = instance.appContext.config.errorHandler;\n          if (appErrorHandler) {\n              callWithErrorHandling(appErrorHandler, null, 10 /* ErrorCodes.APP_ERROR_HANDLER */, [err, exposedInstance, errorInfo]);\n              return;\n          }\n      }\n      logError(err, type, contextVNode, throwInDev);\n  }\n  function logError(err, type, contextVNode, throwInDev = true) {\n      {\n          const info = ErrorTypeStrings[type];\n          if (contextVNode) {\n              pushWarningContext(contextVNode);\n          }\n          warn(`Unhandled error${info ? ` during execution of ${info}` : ``}`);\n          if (contextVNode) {\n              popWarningContext();\n          }\n          // crash in dev by default so it's more noticeable\n          if (throwInDev) {\n              throw err;\n          }\n          else {\n              console.error(err);\n          }\n      }\n  }\n\n  let isFlushing = false;\n  let isFlushPending = false;\n  const queue = [];\n  let flushIndex = 0;\n  const pendingPostFlushCbs = [];\n  let activePostFlushCbs = null;\n  let postFlushIndex = 0;\n  const resolvedPromise = /*#__PURE__*/ Promise.resolve();\n  let currentFlushPromise = null;\n  const RECURSION_LIMIT = 100;\n  function nextTick(fn) {\n      const p = currentFlushPromise || resolvedPromise;\n      return fn ? p.then(this ? fn.bind(this) : fn) : p;\n  }\n  // #2768\n  // Use binary-search to find a suitable position in the queue,\n  // so that the queue maintains the increasing order of job's id,\n  // which can prevent the job from being skipped and also can avoid repeated patching.\n  function findInsertionIndex(id) {\n      // the start index should be `flushIndex + 1`\n      let start = flushIndex + 1;\n      let end = queue.length;\n      while (start < end) {\n          const middle = (start + end) >>> 1;\n          const middleJobId = getId(queue[middle]);\n          middleJobId < id ? (start = middle + 1) : (end = middle);\n      }\n      return start;\n  }\n  function queueJob(job) {\n      // the dedupe search uses the startIndex argument of Array.includes()\n      // by default the search index includes the current job that is being run\n      // so it cannot recursively trigger itself again.\n      // if the job is a watch() callback, the search will start with a +1 index to\n      // allow it recursively trigger itself - it is the user's responsibility to\n      // ensure it doesn't end up in an infinite loop.\n      if (!queue.length ||\n          !queue.includes(job, isFlushing && job.allowRecurse ? flushIndex + 1 : flushIndex)) {\n          if (job.id == null) {\n              queue.push(job);\n          }\n          else {\n              queue.splice(findInsertionIndex(job.id), 0, job);\n          }\n          queueFlush();\n      }\n  }\n  function queueFlush() {\n      if (!isFlushing && !isFlushPending) {\n          isFlushPending = true;\n          currentFlushPromise = resolvedPromise.then(flushJobs);\n      }\n  }\n  function invalidateJob(job) {\n      const i = queue.indexOf(job);\n      if (i > flushIndex) {\n          queue.splice(i, 1);\n      }\n  }\n  function queuePostFlushCb(cb) {\n      if (!isArray(cb)) {\n          if (!activePostFlushCbs ||\n              !activePostFlushCbs.includes(cb, cb.allowRecurse ? postFlushIndex + 1 : postFlushIndex)) {\n              pendingPostFlushCbs.push(cb);\n          }\n      }\n      else {\n          // if cb is an array, it is a component lifecycle hook which can only be\n          // triggered by a job, which is already deduped in the main queue, so\n          // we can skip duplicate check here to improve perf\n          pendingPostFlushCbs.push(...cb);\n      }\n      queueFlush();\n  }\n  function flushPreFlushCbs(seen, \n  // if currently flushing, skip the current job itself\n  i = isFlushing ? flushIndex + 1 : 0) {\n      {\n          seen = seen || new Map();\n      }\n      for (; i < queue.length; i++) {\n          const cb = queue[i];\n          if (cb && cb.pre) {\n              if (checkRecursiveUpdates(seen, cb)) {\n                  continue;\n              }\n              queue.splice(i, 1);\n              i--;\n              cb();\n          }\n      }\n  }\n  function flushPostFlushCbs(seen) {\n      if (pendingPostFlushCbs.length) {\n          const deduped = [...new Set(pendingPostFlushCbs)];\n          pendingPostFlushCbs.length = 0;\n          // #1947 already has active queue, nested flushPostFlushCbs call\n          if (activePostFlushCbs) {\n              activePostFlushCbs.push(...deduped);\n              return;\n          }\n          activePostFlushCbs = deduped;\n          {\n              seen = seen || new Map();\n          }\n          activePostFlushCbs.sort((a, b) => getId(a) - getId(b));\n          for (postFlushIndex = 0; postFlushIndex < activePostFlushCbs.length; postFlushIndex++) {\n              if (checkRecursiveUpdates(seen, activePostFlushCbs[postFlushIndex])) {\n                  continue;\n              }\n              activePostFlushCbs[postFlushIndex]();\n          }\n          activePostFlushCbs = null;\n          postFlushIndex = 0;\n      }\n  }\n  const getId = (job) => job.id == null ? Infinity : job.id;\n  const comparator = (a, b) => {\n      const diff = getId(a) - getId(b);\n      if (diff === 0) {\n          if (a.pre && !b.pre)\n              return -1;\n          if (b.pre && !a.pre)\n              return 1;\n      }\n      return diff;\n  };\n  function flushJobs(seen) {\n      isFlushPending = false;\n      isFlushing = true;\n      {\n          seen = seen || new Map();\n      }\n      // Sort queue before flush.\n      // This ensures that:\n      // 1. Components are updated from parent to child. (because parent is always\n      //    created before the child so its render effect will have smaller\n      //    priority number)\n      // 2. If a component is unmounted during a parent component's update,\n      //    its update can be skipped.\n      queue.sort(comparator);\n      // conditional usage of checkRecursiveUpdate must be determined out of\n      // try ... catch block since Rollup by default de-optimizes treeshaking\n      // inside try-catch. This can leave all warning code unshaked. Although\n      // they would get eventually shaken by a minifier like terser, some minifiers\n      // would fail to do that (e.g. https://github.com/evanw/esbuild/issues/1610)\n      const check = (job) => checkRecursiveUpdates(seen, job)\n          ;\n      try {\n          for (flushIndex = 0; flushIndex < queue.length; flushIndex++) {\n              const job = queue[flushIndex];\n              if (job && job.active !== false) {\n                  if (true && check(job)) {\n                      continue;\n                  }\n                  // console.log(`running:`, job.id)\n                  callWithErrorHandling(job, null, 14 /* ErrorCodes.SCHEDULER */);\n              }\n          }\n      }\n      finally {\n          flushIndex = 0;\n          queue.length = 0;\n          flushPostFlushCbs(seen);\n          isFlushing = false;\n          currentFlushPromise = null;\n          // some postFlushCb queued jobs!\n          // keep flushing until it drains.\n          if (queue.length || pendingPostFlushCbs.length) {\n              flushJobs(seen);\n          }\n      }\n  }\n  function checkRecursiveUpdates(seen, fn) {\n      if (!seen.has(fn)) {\n          seen.set(fn, 1);\n      }\n      else {\n          const count = seen.get(fn);\n          if (count > RECURSION_LIMIT) {\n              const instance = fn.ownerInstance;\n              const componentName = instance && getComponentName(instance.type);\n              warn(`Maximum recursive updates exceeded${componentName ? ` in component <${componentName}>` : ``}. ` +\n                  `This means you have a reactive effect that is mutating its own ` +\n                  `dependencies and thus recursively triggering itself. Possible sources ` +\n                  `include component template, render function, updated hook or ` +\n                  `watcher source function.`);\n              return true;\n          }\n          else {\n              seen.set(fn, count + 1);\n          }\n      }\n  }\n\n  /* eslint-disable no-restricted-globals */\n  let isHmrUpdating = false;\n  const hmrDirtyComponents = new Set();\n  // Expose the HMR runtime on the global object\n  // This makes it entirely tree-shakable without polluting the exports and makes\n  // it easier to be used in toolings like vue-loader\n  // Note: for a component to be eligible for HMR it also needs the __hmrId option\n  // to be set so that its instances can be registered / removed.\n  {\n      getGlobalThis().__VUE_HMR_RUNTIME__ = {\n          createRecord: tryWrap(createRecord),\n          rerender: tryWrap(rerender),\n          reload: tryWrap(reload)\n      };\n  }\n  const map = new Map();\n  function registerHMR(instance) {\n      const id = instance.type.__hmrId;\n      let record = map.get(id);\n      if (!record) {\n          createRecord(id, instance.type);\n          record = map.get(id);\n      }\n      record.instances.add(instance);\n  }\n  function unregisterHMR(instance) {\n      map.get(instance.type.__hmrId).instances.delete(instance);\n  }\n  function createRecord(id, initialDef) {\n      if (map.has(id)) {\n          return false;\n      }\n      map.set(id, {\n          initialDef: normalizeClassComponent(initialDef),\n          instances: new Set()\n      });\n      return true;\n  }\n  function normalizeClassComponent(component) {\n      return isClassComponent(component) ? component.__vccOpts : component;\n  }\n  function rerender(id, newRender) {\n      const record = map.get(id);\n      if (!record) {\n          return;\n      }\n      // update initial record (for not-yet-rendered component)\n      record.initialDef.render = newRender;\n      [...record.instances].forEach(instance => {\n          if (newRender) {\n              instance.render = newRender;\n              normalizeClassComponent(instance.type).render = newRender;\n          }\n          instance.renderCache = [];\n          // this flag forces child components with slot content to update\n          isHmrUpdating = true;\n          instance.update();\n          isHmrUpdating = false;\n      });\n  }\n  function reload(id, newComp) {\n      const record = map.get(id);\n      if (!record)\n          return;\n      newComp = normalizeClassComponent(newComp);\n      // update initial def (for not-yet-rendered components)\n      updateComponentDef(record.initialDef, newComp);\n      // create a snapshot which avoids the set being mutated during updates\n      const instances = [...record.instances];\n      for (const instance of instances) {\n          const oldComp = normalizeClassComponent(instance.type);\n          if (!hmrDirtyComponents.has(oldComp)) {\n              // 1. Update existing comp definition to match new one\n              if (oldComp !== record.initialDef) {\n                  updateComponentDef(oldComp, newComp);\n              }\n              // 2. mark definition dirty. This forces the renderer to replace the\n              // component on patch.\n              hmrDirtyComponents.add(oldComp);\n          }\n          // 3. invalidate options resolution cache\n          instance.appContext.optionsCache.delete(instance.type);\n          // 4. actually update\n          if (instance.ceReload) {\n              // custom element\n              hmrDirtyComponents.add(oldComp);\n              instance.ceReload(newComp.styles);\n              hmrDirtyComponents.delete(oldComp);\n          }\n          else if (instance.parent) {\n              // 4. Force the parent instance to re-render. This will cause all updated\n              // components to be unmounted and re-mounted. Queue the update so that we\n              // don't end up forcing the same parent to re-render multiple times.\n              queueJob(instance.parent.update);\n          }\n          else if (instance.appContext.reload) {\n              // root instance mounted via createApp() has a reload method\n              instance.appContext.reload();\n          }\n          else if (typeof window !== 'undefined') {\n              // root instance inside tree created via raw render(). Force reload.\n              window.location.reload();\n          }\n          else {\n              console.warn('[HMR] Root or manually mounted instance modified. Full reload required.');\n          }\n      }\n      // 5. make sure to cleanup dirty hmr components after update\n      queuePostFlushCb(() => {\n          for (const instance of instances) {\n              hmrDirtyComponents.delete(normalizeClassComponent(instance.type));\n          }\n      });\n  }\n  function updateComponentDef(oldComp, newComp) {\n      extend(oldComp, newComp);\n      for (const key in oldComp) {\n          if (key !== '__file' && !(key in newComp)) {\n              delete oldComp[key];\n          }\n      }\n  }\n  function tryWrap(fn) {\n      return (id, arg) => {\n          try {\n              return fn(id, arg);\n          }\n          catch (e) {\n              console.error(e);\n              console.warn(`[HMR] Something went wrong during Vue component hot-reload. ` +\n                  `Full reload required.`);\n          }\n      };\n  }\n\n  exports.devtools = void 0;\n  let buffer = [];\n  let devtoolsNotInstalled = false;\n  function emit$1(event, ...args) {\n      if (exports.devtools) {\n          exports.devtools.emit(event, ...args);\n      }\n      else if (!devtoolsNotInstalled) {\n          buffer.push({ event, args });\n      }\n  }\n  function setDevtoolsHook(hook, target) {\n      var _a, _b;\n      exports.devtools = hook;\n      if (exports.devtools) {\n          exports.devtools.enabled = true;\n          buffer.forEach(({ event, args }) => exports.devtools.emit(event, ...args));\n          buffer = [];\n      }\n      else if (\n      // handle late devtools injection - only do this if we are in an actual\n      // browser environment to avoid the timer handle stalling test runner exit\n      // (#4815)\n      typeof window !== 'undefined' &&\n          // some envs mock window but not fully\n          window.HTMLElement &&\n          // also exclude jsdom\n          !((_b = (_a = window.navigator) === null || _a === void 0 ? void 0 : _a.userAgent) === null || _b === void 0 ? void 0 : _b.includes('jsdom'))) {\n          const replay = (target.__VUE_DEVTOOLS_HOOK_REPLAY__ =\n              target.__VUE_DEVTOOLS_HOOK_REPLAY__ || []);\n          replay.push((newHook) => {\n              setDevtoolsHook(newHook, target);\n          });\n          // clear buffer after 3s - the user probably doesn't have devtools installed\n          // at all, and keeping the buffer will cause memory leaks (#4738)\n          setTimeout(() => {\n              if (!exports.devtools) {\n                  target.__VUE_DEVTOOLS_HOOK_REPLAY__ = null;\n                  devtoolsNotInstalled = true;\n                  buffer = [];\n              }\n          }, 3000);\n      }\n      else {\n          // non-browser env, assume not installed\n          devtoolsNotInstalled = true;\n          buffer = [];\n      }\n  }\n  function devtoolsInitApp(app, version) {\n      emit$1(\"app:init\" /* DevtoolsHooks.APP_INIT */, app, version, {\n          Fragment,\n          Text,\n          Comment,\n          Static\n      });\n  }\n  function devtoolsUnmountApp(app) {\n      emit$1(\"app:unmount\" /* DevtoolsHooks.APP_UNMOUNT */, app);\n  }\n  const devtoolsComponentAdded = /*#__PURE__*/ createDevtoolsComponentHook(\"component:added\" /* DevtoolsHooks.COMPONENT_ADDED */);\n  const devtoolsComponentUpdated = \n  /*#__PURE__*/ createDevtoolsComponentHook(\"component:updated\" /* DevtoolsHooks.COMPONENT_UPDATED */);\n  const _devtoolsComponentRemoved = /*#__PURE__*/ createDevtoolsComponentHook(\"component:removed\" /* DevtoolsHooks.COMPONENT_REMOVED */);\n  const devtoolsComponentRemoved = (component) => {\n      if (exports.devtools &&\n          typeof exports.devtools.cleanupBuffer === 'function' &&\n          // remove the component if it wasn't buffered\n          !exports.devtools.cleanupBuffer(component)) {\n          _devtoolsComponentRemoved(component);\n      }\n  };\n  function createDevtoolsComponentHook(hook) {\n      return (component) => {\n          emit$1(hook, component.appContext.app, component.uid, component.parent ? component.parent.uid : undefined, component);\n      };\n  }\n  const devtoolsPerfStart = /*#__PURE__*/ createDevtoolsPerformanceHook(\"perf:start\" /* DevtoolsHooks.PERFORMANCE_START */);\n  const devtoolsPerfEnd = /*#__PURE__*/ createDevtoolsPerformanceHook(\"perf:end\" /* DevtoolsHooks.PERFORMANCE_END */);\n  function createDevtoolsPerformanceHook(hook) {\n      return (component, type, time) => {\n          emit$1(hook, component.appContext.app, component.uid, component, type, time);\n      };\n  }\n  function devtoolsComponentEmit(component, event, params) {\n      emit$1(\"component:emit\" /* DevtoolsHooks.COMPONENT_EMIT */, component.appContext.app, component, event, params);\n  }\n\n  function emit(instance, event, ...rawArgs) {\n      if (instance.isUnmounted)\n          return;\n      const props = instance.vnode.props || EMPTY_OBJ;\n      {\n          const { emitsOptions, propsOptions: [propsOptions] } = instance;\n          if (emitsOptions) {\n              if (!(event in emitsOptions) &&\n                  !(false )) {\n                  if (!propsOptions || !(toHandlerKey(event) in propsOptions)) {\n                      warn(`Component emitted event \"${event}\" but it is neither declared in ` +\n                          `the emits option nor as an \"${toHandlerKey(event)}\" prop.`);\n                  }\n              }\n              else {\n                  const validator = emitsOptions[event];\n                  if (isFunction(validator)) {\n                      const isValid = validator(...rawArgs);\n                      if (!isValid) {\n                          warn(`Invalid event arguments: event validation failed for event \"${event}\".`);\n                      }\n                  }\n              }\n          }\n      }\n      let args = rawArgs;\n      const isModelListener = event.startsWith('update:');\n      // for v-model update:xxx events, apply modifiers on args\n      const modelArg = isModelListener && event.slice(7);\n      if (modelArg && modelArg in props) {\n          const modifiersKey = `${modelArg === 'modelValue' ? 'model' : modelArg}Modifiers`;\n          const { number, trim } = props[modifiersKey] || EMPTY_OBJ;\n          if (trim) {\n              args = rawArgs.map(a => (isString(a) ? a.trim() : a));\n          }\n          if (number) {\n              args = rawArgs.map(looseToNumber);\n          }\n      }\n      {\n          devtoolsComponentEmit(instance, event, args);\n      }\n      {\n          const lowerCaseEvent = event.toLowerCase();\n          if (lowerCaseEvent !== event && props[toHandlerKey(lowerCaseEvent)]) {\n              warn(`Event \"${lowerCaseEvent}\" is emitted in component ` +\n                  `${formatComponentName(instance, instance.type)} but the handler is registered for \"${event}\". ` +\n                  `Note that HTML attributes are case-insensitive and you cannot use ` +\n                  `v-on to listen to camelCase events when using in-DOM templates. ` +\n                  `You should probably use \"${hyphenate(event)}\" instead of \"${event}\".`);\n          }\n      }\n      let handlerName;\n      let handler = props[(handlerName = toHandlerKey(event))] ||\n          // also try camelCase event handler (#2249)\n          props[(handlerName = toHandlerKey(camelize(event)))];\n      // for v-model update:xxx events, also trigger kebab-case equivalent\n      // for props passed via kebab-case\n      if (!handler && isModelListener) {\n          handler = props[(handlerName = toHandlerKey(hyphenate(event)))];\n      }\n      if (handler) {\n          callWithAsyncErrorHandling(handler, instance, 6 /* ErrorCodes.COMPONENT_EVENT_HANDLER */, args);\n      }\n      const onceHandler = props[handlerName + `Once`];\n      if (onceHandler) {\n          if (!instance.emitted) {\n              instance.emitted = {};\n          }\n          else if (instance.emitted[handlerName]) {\n              return;\n          }\n          instance.emitted[handlerName] = true;\n          callWithAsyncErrorHandling(onceHandler, instance, 6 /* ErrorCodes.COMPONENT_EVENT_HANDLER */, args);\n      }\n  }\n  function normalizeEmitsOptions(comp, appContext, asMixin = false) {\n      const cache = appContext.emitsCache;\n      const cached = cache.get(comp);\n      if (cached !== undefined) {\n          return cached;\n      }\n      const raw = comp.emits;\n      let normalized = {};\n      // apply mixin/extends props\n      let hasExtends = false;\n      if (!isFunction(comp)) {\n          const extendEmits = (raw) => {\n              const normalizedFromExtend = normalizeEmitsOptions(raw, appContext, true);\n              if (normalizedFromExtend) {\n                  hasExtends = true;\n                  extend(normalized, normalizedFromExtend);\n              }\n          };\n          if (!asMixin && appContext.mixins.length) {\n              appContext.mixins.forEach(extendEmits);\n          }\n          if (comp.extends) {\n              extendEmits(comp.extends);\n          }\n          if (comp.mixins) {\n              comp.mixins.forEach(extendEmits);\n          }\n      }\n      if (!raw && !hasExtends) {\n          if (isObject(comp)) {\n              cache.set(comp, null);\n          }\n          return null;\n      }\n      if (isArray(raw)) {\n          raw.forEach(key => (normalized[key] = null));\n      }\n      else {\n          extend(normalized, raw);\n      }\n      if (isObject(comp)) {\n          cache.set(comp, normalized);\n      }\n      return normalized;\n  }\n  // Check if an incoming prop key is a declared emit event listener.\n  // e.g. With `emits: { click: null }`, props named `onClick` and `onclick` are\n  // both considered matched listeners.\n  function isEmitListener(options, key) {\n      if (!options || !isOn(key)) {\n          return false;\n      }\n      key = key.slice(2).replace(/Once$/, '');\n      return (hasOwn(options, key[0].toLowerCase() + key.slice(1)) ||\n          hasOwn(options, hyphenate(key)) ||\n          hasOwn(options, key));\n  }\n\n  /**\n   * mark the current rendering instance for asset resolution (e.g.\n   * resolveComponent, resolveDirective) during render\n   */\n  let currentRenderingInstance = null;\n  let currentScopeId = null;\n  /**\n   * Note: rendering calls maybe nested. The function returns the parent rendering\n   * instance if present, which should be restored after the render is done:\n   *\n   * ```js\n   * const prev = setCurrentRenderingInstance(i)\n   * // ...render\n   * setCurrentRenderingInstance(prev)\n   * ```\n   */\n  function setCurrentRenderingInstance(instance) {\n      const prev = currentRenderingInstance;\n      currentRenderingInstance = instance;\n      currentScopeId = (instance && instance.type.__scopeId) || null;\n      return prev;\n  }\n  /**\n   * Set scope id when creating hoisted vnodes.\n   * @private compiler helper\n   */\n  function pushScopeId(id) {\n      currentScopeId = id;\n  }\n  /**\n   * Technically we no longer need this after 3.0.8 but we need to keep the same\n   * API for backwards compat w/ code generated by compilers.\n   * @private\n   */\n  function popScopeId() {\n      currentScopeId = null;\n  }\n  /**\n   * Only for backwards compat\n   * @private\n   */\n  const withScopeId = (_id) => withCtx;\n  /**\n   * Wrap a slot function to memoize current rendering instance\n   * @private compiler helper\n   */\n  function withCtx(fn, ctx = currentRenderingInstance, isNonScopedSlot // false only\n  ) {\n      if (!ctx)\n          return fn;\n      // already normalized\n      if (fn._n) {\n          return fn;\n      }\n      const renderFnWithContext = (...args) => {\n          // If a user calls a compiled slot inside a template expression (#1745), it\n          // can mess up block tracking, so by default we disable block tracking and\n          // force bail out when invoking a compiled slot (indicated by the ._d flag).\n          // This isn't necessary if rendering a compiled `<slot>`, so we flip the\n          // ._d flag off when invoking the wrapped fn inside `renderSlot`.\n          if (renderFnWithContext._d) {\n              setBlockTracking(-1);\n          }\n          const prevInstance = setCurrentRenderingInstance(ctx);\n          let res;\n          try {\n              res = fn(...args);\n          }\n          finally {\n              setCurrentRenderingInstance(prevInstance);\n              if (renderFnWithContext._d) {\n                  setBlockTracking(1);\n              }\n          }\n          {\n              devtoolsComponentUpdated(ctx);\n          }\n          return res;\n      };\n      // mark normalized to avoid duplicated wrapping\n      renderFnWithContext._n = true;\n      // mark this as compiled by default\n      // this is used in vnode.ts -> normalizeChildren() to set the slot\n      // rendering flag.\n      renderFnWithContext._c = true;\n      // disable block tracking by default\n      renderFnWithContext._d = true;\n      return renderFnWithContext;\n  }\n\n  /**\n   * dev only flag to track whether $attrs was used during render.\n   * If $attrs was used during render then the warning for failed attrs\n   * fallthrough can be suppressed.\n   */\n  let accessedAttrs = false;\n  function markAttrsAccessed() {\n      accessedAttrs = true;\n  }\n  function renderComponentRoot(instance) {\n      const { type: Component, vnode, proxy, withProxy, props, propsOptions: [propsOptions], slots, attrs, emit, render, renderCache, data, setupState, ctx, inheritAttrs } = instance;\n      let result;\n      let fallthroughAttrs;\n      const prev = setCurrentRenderingInstance(instance);\n      {\n          accessedAttrs = false;\n      }\n      try {\n          if (vnode.shapeFlag & 4 /* ShapeFlags.STATEFUL_COMPONENT */) {\n              // withProxy is a proxy with a different `has` trap only for\n              // runtime-compiled render functions using `with` block.\n              const proxyToUse = withProxy || proxy;\n              result = normalizeVNode(render.call(proxyToUse, proxyToUse, renderCache, props, setupState, data, ctx));\n              fallthroughAttrs = attrs;\n          }\n          else {\n              // functional\n              const render = Component;\n              // in dev, mark attrs accessed if optional props (attrs === props)\n              if (true && attrs === props) {\n                  markAttrsAccessed();\n              }\n              result = normalizeVNode(render.length > 1\n                  ? render(props, true\n                      ? {\n                          get attrs() {\n                              markAttrsAccessed();\n                              return attrs;\n                          },\n                          slots,\n                          emit\n                      }\n                      : { attrs, slots, emit })\n                  : render(props, null /* we know it doesn't need it */));\n              fallthroughAttrs = Component.props\n                  ? attrs\n                  : getFunctionalFallthrough(attrs);\n          }\n      }\n      catch (err) {\n          blockStack.length = 0;\n          handleError(err, instance, 1 /* ErrorCodes.RENDER_FUNCTION */);\n          result = createVNode(Comment);\n      }\n      // attr merging\n      // in dev mode, comments are preserved, and it's possible for a template\n      // to have comments along side the root element which makes it a fragment\n      let root = result;\n      let setRoot = undefined;\n      if (result.patchFlag > 0 &&\n          result.patchFlag & 2048 /* PatchFlags.DEV_ROOT_FRAGMENT */) {\n          [root, setRoot] = getChildRoot(result);\n      }\n      if (fallthroughAttrs && inheritAttrs !== false) {\n          const keys = Object.keys(fallthroughAttrs);\n          const { shapeFlag } = root;\n          if (keys.length) {\n              if (shapeFlag & (1 /* ShapeFlags.ELEMENT */ | 6 /* ShapeFlags.COMPONENT */)) {\n                  if (propsOptions && keys.some(isModelListener)) {\n                      // If a v-model listener (onUpdate:xxx) has a corresponding declared\n                      // prop, it indicates this component expects to handle v-model and\n                      // it should not fallthrough.\n                      // related: #1543, #1643, #1989\n                      fallthroughAttrs = filterModelListeners(fallthroughAttrs, propsOptions);\n                  }\n                  root = cloneVNode(root, fallthroughAttrs);\n              }\n              else if (!accessedAttrs && root.type !== Comment) {\n                  const allAttrs = Object.keys(attrs);\n                  const eventAttrs = [];\n                  const extraAttrs = [];\n                  for (let i = 0, l = allAttrs.length; i < l; i++) {\n                      const key = allAttrs[i];\n                      if (isOn(key)) {\n                          // ignore v-model handlers when they fail to fallthrough\n                          if (!isModelListener(key)) {\n                              // remove `on`, lowercase first letter to reflect event casing\n                              // accurately\n                              eventAttrs.push(key[2].toLowerCase() + key.slice(3));\n                          }\n                      }\n                      else {\n                          extraAttrs.push(key);\n                      }\n                  }\n                  if (extraAttrs.length) {\n                      warn(`Extraneous non-props attributes (` +\n                          `${extraAttrs.join(', ')}) ` +\n                          `were passed to component but could not be automatically inherited ` +\n                          `because component renders fragment or text root nodes.`);\n                  }\n                  if (eventAttrs.length) {\n                      warn(`Extraneous non-emits event listeners (` +\n                          `${eventAttrs.join(', ')}) ` +\n                          `were passed to component but could not be automatically inherited ` +\n                          `because component renders fragment or text root nodes. ` +\n                          `If the listener is intended to be a component custom event listener only, ` +\n                          `declare it using the \"emits\" option.`);\n                  }\n              }\n          }\n      }\n      // inherit directives\n      if (vnode.dirs) {\n          if (!isElementRoot(root)) {\n              warn(`Runtime directive used on component with non-element root node. ` +\n                  `The directives will not function as intended.`);\n          }\n          // clone before mutating since the root may be a hoisted vnode\n          root = cloneVNode(root);\n          root.dirs = root.dirs ? root.dirs.concat(vnode.dirs) : vnode.dirs;\n      }\n      // inherit transition data\n      if (vnode.transition) {\n          if (!isElementRoot(root)) {\n              warn(`Component inside <Transition> renders non-element root node ` +\n                  `that cannot be animated.`);\n          }\n          root.transition = vnode.transition;\n      }\n      if (setRoot) {\n          setRoot(root);\n      }\n      else {\n          result = root;\n      }\n      setCurrentRenderingInstance(prev);\n      return result;\n  }\n  /**\n   * dev only\n   * In dev mode, template root level comments are rendered, which turns the\n   * template into a fragment root, but we need to locate the single element\n   * root for attrs and scope id processing.\n   */\n  const getChildRoot = (vnode) => {\n      const rawChildren = vnode.children;\n      const dynamicChildren = vnode.dynamicChildren;\n      const childRoot = filterSingleRoot(rawChildren);\n      if (!childRoot) {\n          return [vnode, undefined];\n      }\n      const index = rawChildren.indexOf(childRoot);\n      const dynamicIndex = dynamicChildren ? dynamicChildren.indexOf(childRoot) : -1;\n      const setRoot = (updatedRoot) => {\n          rawChildren[index] = updatedRoot;\n          if (dynamicChildren) {\n              if (dynamicIndex > -1) {\n                  dynamicChildren[dynamicIndex] = updatedRoot;\n              }\n              else if (updatedRoot.patchFlag > 0) {\n                  vnode.dynamicChildren = [...dynamicChildren, updatedRoot];\n              }\n          }\n      };\n      return [normalizeVNode(childRoot), setRoot];\n  };\n  function filterSingleRoot(children) {\n      let singleRoot;\n      for (let i = 0; i < children.length; i++) {\n          const child = children[i];\n          if (isVNode(child)) {\n              // ignore user comment\n              if (child.type !== Comment || child.children === 'v-if') {\n                  if (singleRoot) {\n                      // has more than 1 non-comment child, return now\n                      return;\n                  }\n                  else {\n                      singleRoot = child;\n                  }\n              }\n          }\n          else {\n              return;\n          }\n      }\n      return singleRoot;\n  }\n  const getFunctionalFallthrough = (attrs) => {\n      let res;\n      for (const key in attrs) {\n          if (key === 'class' || key === 'style' || isOn(key)) {\n              (res || (res = {}))[key] = attrs[key];\n          }\n      }\n      return res;\n  };\n  const filterModelListeners = (attrs, props) => {\n      const res = {};\n      for (const key in attrs) {\n          if (!isModelListener(key) || !(key.slice(9) in props)) {\n              res[key] = attrs[key];\n          }\n      }\n      return res;\n  };\n  const isElementRoot = (vnode) => {\n      return (vnode.shapeFlag & (6 /* ShapeFlags.COMPONENT */ | 1 /* ShapeFlags.ELEMENT */) ||\n          vnode.type === Comment // potential v-if branch switch\n      );\n  };\n  function shouldUpdateComponent(prevVNode, nextVNode, optimized) {\n      const { props: prevProps, children: prevChildren, component } = prevVNode;\n      const { props: nextProps, children: nextChildren, patchFlag } = nextVNode;\n      const emits = component.emitsOptions;\n      // Parent component's render function was hot-updated. Since this may have\n      // caused the child component's slots content to have changed, we need to\n      // force the child to update as well.\n      if ((prevChildren || nextChildren) && isHmrUpdating) {\n          return true;\n      }\n      // force child update for runtime directive or transition on component vnode.\n      if (nextVNode.dirs || nextVNode.transition) {\n          return true;\n      }\n      if (optimized && patchFlag >= 0) {\n          if (patchFlag & 1024 /* PatchFlags.DYNAMIC_SLOTS */) {\n              // slot content that references values that might have changed,\n              // e.g. in a v-for\n              return true;\n          }\n          if (patchFlag & 16 /* PatchFlags.FULL_PROPS */) {\n              if (!prevProps) {\n                  return !!nextProps;\n              }\n              // presence of this flag indicates props are always non-null\n              return hasPropsChanged(prevProps, nextProps, emits);\n          }\n          else if (patchFlag & 8 /* PatchFlags.PROPS */) {\n              const dynamicProps = nextVNode.dynamicProps;\n              for (let i = 0; i < dynamicProps.length; i++) {\n                  const key = dynamicProps[i];\n                  if (nextProps[key] !== prevProps[key] &&\n                      !isEmitListener(emits, key)) {\n                      return true;\n                  }\n              }\n          }\n      }\n      else {\n          // this path is only taken by manually written render functions\n          // so presence of any children leads to a forced update\n          if (prevChildren || nextChildren) {\n              if (!nextChildren || !nextChildren.$stable) {\n                  return true;\n              }\n          }\n          if (prevProps === nextProps) {\n              return false;\n          }\n          if (!prevProps) {\n              return !!nextProps;\n          }\n          if (!nextProps) {\n              return true;\n          }\n          return hasPropsChanged(prevProps, nextProps, emits);\n      }\n      return false;\n  }\n  function hasPropsChanged(prevProps, nextProps, emitsOptions) {\n      const nextKeys = Object.keys(nextProps);\n      if (nextKeys.length !== Object.keys(prevProps).length) {\n          return true;\n      }\n      for (let i = 0; i < nextKeys.length; i++) {\n          const key = nextKeys[i];\n          if (nextProps[key] !== prevProps[key] &&\n              !isEmitListener(emitsOptions, key)) {\n              return true;\n          }\n      }\n      return false;\n  }\n  function updateHOCHostEl({ vnode, parent }, el // HostNode\n  ) {\n      while (parent && parent.subTree === vnode) {\n          (vnode = parent.vnode).el = el;\n          parent = parent.parent;\n      }\n  }\n\n  const isSuspense = (type) => type.__isSuspense;\n  // Suspense exposes a component-like API, and is treated like a component\n  // in the compiler, but internally it's a special built-in type that hooks\n  // directly into the renderer.\n  const SuspenseImpl = {\n      name: 'Suspense',\n      // In order to make Suspense tree-shakable, we need to avoid importing it\n      // directly in the renderer. The renderer checks for the __isSuspense flag\n      // on a vnode's type and calls the `process` method, passing in renderer\n      // internals.\n      __isSuspense: true,\n      process(n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized, \n      // platform-specific impl passed from renderer\n      rendererInternals) {\n          if (n1 == null) {\n              mountSuspense(n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized, rendererInternals);\n          }\n          else {\n              patchSuspense(n1, n2, container, anchor, parentComponent, isSVG, slotScopeIds, optimized, rendererInternals);\n          }\n      },\n      hydrate: hydrateSuspense,\n      create: createSuspenseBoundary,\n      normalize: normalizeSuspenseChildren\n  };\n  // Force-casted public typing for h and TSX props inference\n  const Suspense = (SuspenseImpl\n      );\n  function triggerEvent(vnode, name) {\n      const eventListener = vnode.props && vnode.props[name];\n      if (isFunction(eventListener)) {\n          eventListener();\n      }\n  }\n  function mountSuspense(vnode, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized, rendererInternals) {\n      const { p: patch, o: { createElement } } = rendererInternals;\n      const hiddenContainer = createElement('div');\n      const suspense = (vnode.suspense = createSuspenseBoundary(vnode, parentSuspense, parentComponent, container, hiddenContainer, anchor, isSVG, slotScopeIds, optimized, rendererInternals));\n      // start mounting the content subtree in an off-dom container\n      patch(null, (suspense.pendingBranch = vnode.ssContent), hiddenContainer, null, parentComponent, suspense, isSVG, slotScopeIds);\n      // now check if we have encountered any async deps\n      if (suspense.deps > 0) {\n          // has async\n          // invoke @fallback event\n          triggerEvent(vnode, 'onPending');\n          triggerEvent(vnode, 'onFallback');\n          // mount the fallback tree\n          patch(null, vnode.ssFallback, container, anchor, parentComponent, null, // fallback tree will not have suspense context\n          isSVG, slotScopeIds);\n          setActiveBranch(suspense, vnode.ssFallback);\n      }\n      else {\n          // Suspense has no async deps. Just resolve.\n          suspense.resolve();\n      }\n  }\n  function patchSuspense(n1, n2, container, anchor, parentComponent, isSVG, slotScopeIds, optimized, { p: patch, um: unmount, o: { createElement } }) {\n      const suspense = (n2.suspense = n1.suspense);\n      suspense.vnode = n2;\n      n2.el = n1.el;\n      const newBranch = n2.ssContent;\n      const newFallback = n2.ssFallback;\n      const { activeBranch, pendingBranch, isInFallback, isHydrating } = suspense;\n      if (pendingBranch) {\n          suspense.pendingBranch = newBranch;\n          if (isSameVNodeType(newBranch, pendingBranch)) {\n              // same root type but content may have changed.\n              patch(pendingBranch, newBranch, suspense.hiddenContainer, null, parentComponent, suspense, isSVG, slotScopeIds, optimized);\n              if (suspense.deps <= 0) {\n                  suspense.resolve();\n              }\n              else if (isInFallback) {\n                  patch(activeBranch, newFallback, container, anchor, parentComponent, null, // fallback tree will not have suspense context\n                  isSVG, slotScopeIds, optimized);\n                  setActiveBranch(suspense, newFallback);\n              }\n          }\n          else {\n              // toggled before pending tree is resolved\n              suspense.pendingId++;\n              if (isHydrating) {\n                  // if toggled before hydration is finished, the current DOM tree is\n                  // no longer valid. set it as the active branch so it will be unmounted\n                  // when resolved\n                  suspense.isHydrating = false;\n                  suspense.activeBranch = pendingBranch;\n              }\n              else {\n                  unmount(pendingBranch, parentComponent, suspense);\n              }\n              // increment pending ID. this is used to invalidate async callbacks\n              // reset suspense state\n              suspense.deps = 0;\n              // discard effects from pending branch\n              suspense.effects.length = 0;\n              // discard previous container\n              suspense.hiddenContainer = createElement('div');\n              if (isInFallback) {\n                  // already in fallback state\n                  patch(null, newBranch, suspense.hiddenContainer, null, parentComponent, suspense, isSVG, slotScopeIds, optimized);\n                  if (suspense.deps <= 0) {\n                      suspense.resolve();\n                  }\n                  else {\n                      patch(activeBranch, newFallback, container, anchor, parentComponent, null, // fallback tree will not have suspense context\n                      isSVG, slotScopeIds, optimized);\n                      setActiveBranch(suspense, newFallback);\n                  }\n              }\n              else if (activeBranch && isSameVNodeType(newBranch, activeBranch)) {\n                  // toggled \"back\" to current active branch\n                  patch(activeBranch, newBranch, container, anchor, parentComponent, suspense, isSVG, slotScopeIds, optimized);\n                  // force resolve\n                  suspense.resolve(true);\n              }\n              else {\n                  // switched to a 3rd branch\n                  patch(null, newBranch, suspense.hiddenContainer, null, parentComponent, suspense, isSVG, slotScopeIds, optimized);\n                  if (suspense.deps <= 0) {\n                      suspense.resolve();\n                  }\n              }\n          }\n      }\n      else {\n          if (activeBranch && isSameVNodeType(newBranch, activeBranch)) {\n              // root did not change, just normal patch\n              patch(activeBranch, newBranch, container, anchor, parentComponent, suspense, isSVG, slotScopeIds, optimized);\n              setActiveBranch(suspense, newBranch);\n          }\n          else {\n              // root node toggled\n              // invoke @pending event\n              triggerEvent(n2, 'onPending');\n              // mount pending branch in off-dom container\n              suspense.pendingBranch = newBranch;\n              suspense.pendingId++;\n              patch(null, newBranch, suspense.hiddenContainer, null, parentComponent, suspense, isSVG, slotScopeIds, optimized);\n              if (suspense.deps <= 0) {\n                  // incoming branch has no async deps, resolve now.\n                  suspense.resolve();\n              }\n              else {\n                  const { timeout, pendingId } = suspense;\n                  if (timeout > 0) {\n                      setTimeout(() => {\n                          if (suspense.pendingId === pendingId) {\n                              suspense.fallback(newFallback);\n                          }\n                      }, timeout);\n                  }\n                  else if (timeout === 0) {\n                      suspense.fallback(newFallback);\n                  }\n              }\n          }\n      }\n  }\n  let hasWarned = false;\n  function createSuspenseBoundary(vnode, parent, parentComponent, container, hiddenContainer, anchor, isSVG, slotScopeIds, optimized, rendererInternals, isHydrating = false) {\n      /* istanbul ignore if */\n      if (!hasWarned) {\n          hasWarned = true;\n          // @ts-ignore `console.info` cannot be null error\n          console[console.info ? 'info' : 'log'](`<Suspense> is an experimental feature and its API will likely change.`);\n      }\n      const { p: patch, m: move, um: unmount, n: next, o: { parentNode, remove } } = rendererInternals;\n      const timeout = vnode.props ? toNumber(vnode.props.timeout) : undefined;\n      {\n          assertNumber(timeout, `Suspense timeout`);\n      }\n      const suspense = {\n          vnode,\n          parent,\n          parentComponent,\n          isSVG,\n          container,\n          hiddenContainer,\n          anchor,\n          deps: 0,\n          pendingId: 0,\n          timeout: typeof timeout === 'number' ? timeout : -1,\n          activeBranch: null,\n          pendingBranch: null,\n          isInFallback: true,\n          isHydrating,\n          isUnmounted: false,\n          effects: [],\n          resolve(resume = false) {\n              {\n                  if (!resume && !suspense.pendingBranch) {\n                      throw new Error(`suspense.resolve() is called without a pending branch.`);\n                  }\n                  if (suspense.isUnmounted) {\n                      throw new Error(`suspense.resolve() is called on an already unmounted suspense boundary.`);\n                  }\n              }\n              const { vnode, activeBranch, pendingBranch, pendingId, effects, parentComponent, container } = suspense;\n              if (suspense.isHydrating) {\n                  suspense.isHydrating = false;\n              }\n              else if (!resume) {\n                  const delayEnter = activeBranch &&\n                      pendingBranch.transition &&\n                      pendingBranch.transition.mode === 'out-in';\n                  if (delayEnter) {\n                      activeBranch.transition.afterLeave = () => {\n                          if (pendingId === suspense.pendingId) {\n                              move(pendingBranch, container, anchor, 0 /* MoveType.ENTER */);\n                          }\n                      };\n                  }\n                  // this is initial anchor on mount\n                  let { anchor } = suspense;\n                  // unmount current active tree\n                  if (activeBranch) {\n                      // if the fallback tree was mounted, it may have been moved\n                      // as part of a parent suspense. get the latest anchor for insertion\n                      anchor = next(activeBranch);\n                      unmount(activeBranch, parentComponent, suspense, true);\n                  }\n                  if (!delayEnter) {\n                      // move content from off-dom container to actual container\n                      move(pendingBranch, container, anchor, 0 /* MoveType.ENTER */);\n                  }\n              }\n              setActiveBranch(suspense, pendingBranch);\n              suspense.pendingBranch = null;\n              suspense.isInFallback = false;\n              // flush buffered effects\n              // check if there is a pending parent suspense\n              let parent = suspense.parent;\n              let hasUnresolvedAncestor = false;\n              while (parent) {\n                  if (parent.pendingBranch) {\n                      // found a pending parent suspense, merge buffered post jobs\n                      // into that parent\n                      parent.effects.push(...effects);\n                      hasUnresolvedAncestor = true;\n                      break;\n                  }\n                  parent = parent.parent;\n              }\n              // no pending parent suspense, flush all jobs\n              if (!hasUnresolvedAncestor) {\n                  queuePostFlushCb(effects);\n              }\n              suspense.effects = [];\n              // invoke @resolve event\n              triggerEvent(vnode, 'onResolve');\n          },\n          fallback(fallbackVNode) {\n              if (!suspense.pendingBranch) {\n                  return;\n              }\n              const { vnode, activeBranch, parentComponent, container, isSVG } = suspense;\n              // invoke @fallback event\n              triggerEvent(vnode, 'onFallback');\n              const anchor = next(activeBranch);\n              const mountFallback = () => {\n                  if (!suspense.isInFallback) {\n                      return;\n                  }\n                  // mount the fallback tree\n                  patch(null, fallbackVNode, container, anchor, parentComponent, null, // fallback tree will not have suspense context\n                  isSVG, slotScopeIds, optimized);\n                  setActiveBranch(suspense, fallbackVNode);\n              };\n              const delayEnter = fallbackVNode.transition && fallbackVNode.transition.mode === 'out-in';\n              if (delayEnter) {\n                  activeBranch.transition.afterLeave = mountFallback;\n              }\n              suspense.isInFallback = true;\n              // unmount current active branch\n              unmount(activeBranch, parentComponent, null, // no suspense so unmount hooks fire now\n              true // shouldRemove\n              );\n              if (!delayEnter) {\n                  mountFallback();\n              }\n          },\n          move(container, anchor, type) {\n              suspense.activeBranch &&\n                  move(suspense.activeBranch, container, anchor, type);\n              suspense.container = container;\n          },\n          next() {\n              return suspense.activeBranch && next(suspense.activeBranch);\n          },\n          registerDep(instance, setupRenderEffect) {\n              const isInPendingSuspense = !!suspense.pendingBranch;\n              if (isInPendingSuspense) {\n                  suspense.deps++;\n              }\n              const hydratedEl = instance.vnode.el;\n              instance\n                  .asyncDep.catch(err => {\n                  handleError(err, instance, 0 /* ErrorCodes.SETUP_FUNCTION */);\n              })\n                  .then(asyncSetupResult => {\n                  // retry when the setup() promise resolves.\n                  // component may have been unmounted before resolve.\n                  if (instance.isUnmounted ||\n                      suspense.isUnmounted ||\n                      suspense.pendingId !== instance.suspenseId) {\n                      return;\n                  }\n                  // retry from this component\n                  instance.asyncResolved = true;\n                  const { vnode } = instance;\n                  {\n                      pushWarningContext(vnode);\n                  }\n                  handleSetupResult(instance, asyncSetupResult, false);\n                  if (hydratedEl) {\n                      // vnode may have been replaced if an update happened before the\n                      // async dep is resolved.\n                      vnode.el = hydratedEl;\n                  }\n                  const placeholder = !hydratedEl && instance.subTree.el;\n                  setupRenderEffect(instance, vnode, \n                  // component may have been moved before resolve.\n                  // if this is not a hydration, instance.subTree will be the comment\n                  // placeholder.\n                  parentNode(hydratedEl || instance.subTree.el), \n                  // anchor will not be used if this is hydration, so only need to\n                  // consider the comment placeholder case.\n                  hydratedEl ? null : next(instance.subTree), suspense, isSVG, optimized);\n                  if (placeholder) {\n                      remove(placeholder);\n                  }\n                  updateHOCHostEl(instance, vnode.el);\n                  {\n                      popWarningContext();\n                  }\n                  // only decrease deps count if suspense is not already resolved\n                  if (isInPendingSuspense && --suspense.deps === 0) {\n                      suspense.resolve();\n                  }\n              });\n          },\n          unmount(parentSuspense, doRemove) {\n              suspense.isUnmounted = true;\n              if (suspense.activeBranch) {\n                  unmount(suspense.activeBranch, parentComponent, parentSuspense, doRemove);\n              }\n              if (suspense.pendingBranch) {\n                  unmount(suspense.pendingBranch, parentComponent, parentSuspense, doRemove);\n              }\n          }\n      };\n      return suspense;\n  }\n  function hydrateSuspense(node, vnode, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized, rendererInternals, hydrateNode) {\n      /* eslint-disable no-restricted-globals */\n      const suspense = (vnode.suspense = createSuspenseBoundary(vnode, parentSuspense, parentComponent, node.parentNode, document.createElement('div'), null, isSVG, slotScopeIds, optimized, rendererInternals, true /* hydrating */));\n      // there are two possible scenarios for server-rendered suspense:\n      // - success: ssr content should be fully resolved\n      // - failure: ssr content should be the fallback branch.\n      // however, on the client we don't really know if it has failed or not\n      // attempt to hydrate the DOM assuming it has succeeded, but we still\n      // need to construct a suspense boundary first\n      const result = hydrateNode(node, (suspense.pendingBranch = vnode.ssContent), parentComponent, suspense, slotScopeIds, optimized);\n      if (suspense.deps === 0) {\n          suspense.resolve();\n      }\n      return result;\n      /* eslint-enable no-restricted-globals */\n  }\n  function normalizeSuspenseChildren(vnode) {\n      const { shapeFlag, children } = vnode;\n      const isSlotChildren = shapeFlag & 32 /* ShapeFlags.SLOTS_CHILDREN */;\n      vnode.ssContent = normalizeSuspenseSlot(isSlotChildren ? children.default : children);\n      vnode.ssFallback = isSlotChildren\n          ? normalizeSuspenseSlot(children.fallback)\n          : createVNode(Comment);\n  }\n  function normalizeSuspenseSlot(s) {\n      let block;\n      if (isFunction(s)) {\n          const trackBlock = isBlockTreeEnabled && s._c;\n          if (trackBlock) {\n              // disableTracking: false\n              // allow block tracking for compiled slots\n              // (see ./componentRenderContext.ts)\n              s._d = false;\n              openBlock();\n          }\n          s = s();\n          if (trackBlock) {\n              s._d = true;\n              block = currentBlock;\n              closeBlock();\n          }\n      }\n      if (isArray(s)) {\n          const singleChild = filterSingleRoot(s);\n          if (!singleChild) {\n              warn(`<Suspense> slots expect a single root node.`);\n          }\n          s = singleChild;\n      }\n      s = normalizeVNode(s);\n      if (block && !s.dynamicChildren) {\n          s.dynamicChildren = block.filter(c => c !== s);\n      }\n      return s;\n  }\n  function queueEffectWithSuspense(fn, suspense) {\n      if (suspense && suspense.pendingBranch) {\n          if (isArray(fn)) {\n              suspense.effects.push(...fn);\n          }\n          else {\n              suspense.effects.push(fn);\n          }\n      }\n      else {\n          queuePostFlushCb(fn);\n      }\n  }\n  function setActiveBranch(suspense, branch) {\n      suspense.activeBranch = branch;\n      const { vnode, parentComponent } = suspense;\n      const el = (vnode.el = branch.el);\n      // in case suspense is the root node of a component,\n      // recursively update the HOC el\n      if (parentComponent && parentComponent.subTree === vnode) {\n          parentComponent.vnode.el = el;\n          updateHOCHostEl(parentComponent, el);\n      }\n  }\n\n  function provide(key, value) {\n      if (!currentInstance) {\n          {\n              warn(`provide() can only be used inside setup().`);\n          }\n      }\n      else {\n          let provides = currentInstance.provides;\n          // by default an instance inherits its parent's provides object\n          // but when it needs to provide values of its own, it creates its\n          // own provides object using parent provides object as prototype.\n          // this way in `inject` we can simply look up injections from direct\n          // parent and let the prototype chain do the work.\n          const parentProvides = currentInstance.parent && currentInstance.parent.provides;\n          if (parentProvides === provides) {\n              provides = currentInstance.provides = Object.create(parentProvides);\n          }\n          // TS doesn't allow symbol as index type\n          provides[key] = value;\n      }\n  }\n  function inject(key, defaultValue, treatDefaultAsFactory = false) {\n      // fallback to `currentRenderingInstance` so that this can be called in\n      // a functional component\n      const instance = currentInstance || currentRenderingInstance;\n      if (instance) {\n          // #2400\n          // to support `app.use` plugins,\n          // fallback to appContext's `provides` if the instance is at root\n          const provides = instance.parent == null\n              ? instance.vnode.appContext && instance.vnode.appContext.provides\n              : instance.parent.provides;\n          if (provides && key in provides) {\n              // TS doesn't allow symbol as index type\n              return provides[key];\n          }\n          else if (arguments.length > 1) {\n              return treatDefaultAsFactory && isFunction(defaultValue)\n                  ? defaultValue.call(instance.proxy)\n                  : defaultValue;\n          }\n          else {\n              warn(`injection \"${String(key)}\" not found.`);\n          }\n      }\n      else {\n          warn(`inject() can only be used inside setup() or functional components.`);\n      }\n  }\n\n  // Simple effect.\n  function watchEffect(effect, options) {\n      return doWatch(effect, null, options);\n  }\n  function watchPostEffect(effect, options) {\n      return doWatch(effect, null, Object.assign(Object.assign({}, options), { flush: 'post' }) );\n  }\n  function watchSyncEffect(effect, options) {\n      return doWatch(effect, null, Object.assign(Object.assign({}, options), { flush: 'sync' }) );\n  }\n  // initial value for watchers to trigger on undefined initial values\n  const INITIAL_WATCHER_VALUE = {};\n  // implementation\n  function watch(source, cb, options) {\n      if (!isFunction(cb)) {\n          warn(`\\`watch(fn, options?)\\` signature has been moved to a separate API. ` +\n              `Use \\`watchEffect(fn, options?)\\` instead. \\`watch\\` now only ` +\n              `supports \\`watch(source, cb, options?) signature.`);\n      }\n      return doWatch(source, cb, options);\n  }\n  function doWatch(source, cb, { immediate, deep, flush, onTrack, onTrigger } = EMPTY_OBJ) {\n      if (!cb) {\n          if (immediate !== undefined) {\n              warn(`watch() \"immediate\" option is only respected when using the ` +\n                  `watch(source, callback, options?) signature.`);\n          }\n          if (deep !== undefined) {\n              warn(`watch() \"deep\" option is only respected when using the ` +\n                  `watch(source, callback, options?) signature.`);\n          }\n      }\n      const warnInvalidSource = (s) => {\n          warn(`Invalid watch source: `, s, `A watch source can only be a getter/effect function, a ref, ` +\n              `a reactive object, or an array of these types.`);\n      };\n      const instance = getCurrentScope() === (currentInstance === null || currentInstance === void 0 ? void 0 : currentInstance.scope) ? currentInstance : null;\n      // const instance = currentInstance\n      let getter;\n      let forceTrigger = false;\n      let isMultiSource = false;\n      if (isRef(source)) {\n          getter = () => source.value;\n          forceTrigger = isShallow(source);\n      }\n      else if (isReactive(source)) {\n          getter = () => source;\n          deep = true;\n      }\n      else if (isArray(source)) {\n          isMultiSource = true;\n          forceTrigger = source.some(s => isReactive(s) || isShallow(s));\n          getter = () => source.map(s => {\n              if (isRef(s)) {\n                  return s.value;\n              }\n              else if (isReactive(s)) {\n                  return traverse(s);\n              }\n              else if (isFunction(s)) {\n                  return callWithErrorHandling(s, instance, 2 /* ErrorCodes.WATCH_GETTER */);\n              }\n              else {\n                  warnInvalidSource(s);\n              }\n          });\n      }\n      else if (isFunction(source)) {\n          if (cb) {\n              // getter with cb\n              getter = () => callWithErrorHandling(source, instance, 2 /* ErrorCodes.WATCH_GETTER */);\n          }\n          else {\n              // no cb -> simple effect\n              getter = () => {\n                  if (instance && instance.isUnmounted) {\n                      return;\n                  }\n                  if (cleanup) {\n                      cleanup();\n                  }\n                  return callWithAsyncErrorHandling(source, instance, 3 /* ErrorCodes.WATCH_CALLBACK */, [onCleanup]);\n              };\n          }\n      }\n      else {\n          getter = NOOP;\n          warnInvalidSource(source);\n      }\n      if (cb && deep) {\n          const baseGetter = getter;\n          getter = () => traverse(baseGetter());\n      }\n      let cleanup;\n      let onCleanup = (fn) => {\n          cleanup = effect.onStop = () => {\n              callWithErrorHandling(fn, instance, 4 /* ErrorCodes.WATCH_CLEANUP */);\n          };\n      };\n      let oldValue = isMultiSource\n          ? new Array(source.length).fill(INITIAL_WATCHER_VALUE)\n          : INITIAL_WATCHER_VALUE;\n      const job = () => {\n          if (!effect.active) {\n              return;\n          }\n          if (cb) {\n              // watch(source, cb)\n              const newValue = effect.run();\n              if (deep ||\n                  forceTrigger ||\n                  (isMultiSource\n                      ? newValue.some((v, i) => hasChanged(v, oldValue[i]))\n                      : hasChanged(newValue, oldValue)) ||\n                  (false  )) {\n                  // cleanup before running cb again\n                  if (cleanup) {\n                      cleanup();\n                  }\n                  callWithAsyncErrorHandling(cb, instance, 3 /* ErrorCodes.WATCH_CALLBACK */, [\n                      newValue,\n                      // pass undefined as the old value when it's changed for the first time\n                      oldValue === INITIAL_WATCHER_VALUE\n                          ? undefined\n                          : isMultiSource && oldValue[0] === INITIAL_WATCHER_VALUE\n                              ? []\n                              : oldValue,\n                      onCleanup\n                  ]);\n                  oldValue = newValue;\n              }\n          }\n          else {\n              // watchEffect\n              effect.run();\n          }\n      };\n      // important: mark the job as a watcher callback so that scheduler knows\n      // it is allowed to self-trigger (#1727)\n      job.allowRecurse = !!cb;\n      let scheduler;\n      if (flush === 'sync') {\n          scheduler = job; // the scheduler function gets called directly\n      }\n      else if (flush === 'post') {\n          scheduler = () => queuePostRenderEffect(job, instance && instance.suspense);\n      }\n      else {\n          // default: 'pre'\n          job.pre = true;\n          if (instance)\n              job.id = instance.uid;\n          scheduler = () => queueJob(job);\n      }\n      const effect = new ReactiveEffect(getter, scheduler);\n      {\n          effect.onTrack = onTrack;\n          effect.onTrigger = onTrigger;\n      }\n      // initial run\n      if (cb) {\n          if (immediate) {\n              job();\n          }\n          else {\n              oldValue = effect.run();\n          }\n      }\n      else if (flush === 'post') {\n          queuePostRenderEffect(effect.run.bind(effect), instance && instance.suspense);\n      }\n      else {\n          effect.run();\n      }\n      const unwatch = () => {\n          effect.stop();\n          if (instance && instance.scope) {\n              remove(instance.scope.effects, effect);\n          }\n      };\n      return unwatch;\n  }\n  // this.$watch\n  function instanceWatch(source, value, options) {\n      const publicThis = this.proxy;\n      const getter = isString(source)\n          ? source.includes('.')\n              ? createPathGetter(publicThis, source)\n              : () => publicThis[source]\n          : source.bind(publicThis, publicThis);\n      let cb;\n      if (isFunction(value)) {\n          cb = value;\n      }\n      else {\n          cb = value.handler;\n          options = value;\n      }\n      const cur = currentInstance;\n      setCurrentInstance(this);\n      const res = doWatch(getter, cb.bind(publicThis), options);\n      if (cur) {\n          setCurrentInstance(cur);\n      }\n      else {\n          unsetCurrentInstance();\n      }\n      return res;\n  }\n  function createPathGetter(ctx, path) {\n      const segments = path.split('.');\n      return () => {\n          let cur = ctx;\n          for (let i = 0; i < segments.length && cur; i++) {\n              cur = cur[segments[i]];\n          }\n          return cur;\n      };\n  }\n  function traverse(value, seen) {\n      if (!isObject(value) || value[\"__v_skip\" /* ReactiveFlags.SKIP */]) {\n          return value;\n      }\n      seen = seen || new Set();\n      if (seen.has(value)) {\n          return value;\n      }\n      seen.add(value);\n      if (isRef(value)) {\n          traverse(value.value, seen);\n      }\n      else if (isArray(value)) {\n          for (let i = 0; i < value.length; i++) {\n              traverse(value[i], seen);\n          }\n      }\n      else if (isSet(value) || isMap(value)) {\n          value.forEach((v) => {\n              traverse(v, seen);\n          });\n      }\n      else if (isPlainObject(value)) {\n          for (const key in value) {\n              traverse(value[key], seen);\n          }\n      }\n      return value;\n  }\n\n  function useTransitionState() {\n      const state = {\n          isMounted: false,\n          isLeaving: false,\n          isUnmounting: false,\n          leavingVNodes: new Map()\n      };\n      onMounted(() => {\n          state.isMounted = true;\n      });\n      onBeforeUnmount(() => {\n          state.isUnmounting = true;\n      });\n      return state;\n  }\n  const TransitionHookValidator = [Function, Array];\n  const BaseTransitionImpl = {\n      name: `BaseTransition`,\n      props: {\n          mode: String,\n          appear: Boolean,\n          persisted: Boolean,\n          // enter\n          onBeforeEnter: TransitionHookValidator,\n          onEnter: TransitionHookValidator,\n          onAfterEnter: TransitionHookValidator,\n          onEnterCancelled: TransitionHookValidator,\n          // leave\n          onBeforeLeave: TransitionHookValidator,\n          onLeave: TransitionHookValidator,\n          onAfterLeave: TransitionHookValidator,\n          onLeaveCancelled: TransitionHookValidator,\n          // appear\n          onBeforeAppear: TransitionHookValidator,\n          onAppear: TransitionHookValidator,\n          onAfterAppear: TransitionHookValidator,\n          onAppearCancelled: TransitionHookValidator\n      },\n      setup(props, { slots }) {\n          const instance = getCurrentInstance();\n          const state = useTransitionState();\n          let prevTransitionKey;\n          return () => {\n              const children = slots.default && getTransitionRawChildren(slots.default(), true);\n              if (!children || !children.length) {\n                  return;\n              }\n              let child = children[0];\n              if (children.length > 1) {\n                  let hasFound = false;\n                  // locate first non-comment child\n                  for (const c of children) {\n                      if (c.type !== Comment) {\n                          if (hasFound) {\n                              // warn more than one non-comment child\n                              warn('<transition> can only be used on a single element or component. ' +\n                                  'Use <transition-group> for lists.');\n                              break;\n                          }\n                          child = c;\n                          hasFound = true;\n                      }\n                  }\n              }\n              // there's no need to track reactivity for these props so use the raw\n              // props for a bit better perf\n              const rawProps = toRaw(props);\n              const { mode } = rawProps;\n              // check mode\n              if (mode &&\n                  mode !== 'in-out' &&\n                  mode !== 'out-in' &&\n                  mode !== 'default') {\n                  warn(`invalid <transition> mode: ${mode}`);\n              }\n              if (state.isLeaving) {\n                  return emptyPlaceholder(child);\n              }\n              // in the case of <transition><keep-alive/></transition>, we need to\n              // compare the type of the kept-alive children.\n              const innerChild = getKeepAliveChild(child);\n              if (!innerChild) {\n                  return emptyPlaceholder(child);\n              }\n              const enterHooks = resolveTransitionHooks(innerChild, rawProps, state, instance);\n              setTransitionHooks(innerChild, enterHooks);\n              const oldChild = instance.subTree;\n              const oldInnerChild = oldChild && getKeepAliveChild(oldChild);\n              let transitionKeyChanged = false;\n              const { getTransitionKey } = innerChild.type;\n              if (getTransitionKey) {\n                  const key = getTransitionKey();\n                  if (prevTransitionKey === undefined) {\n                      prevTransitionKey = key;\n                  }\n                  else if (key !== prevTransitionKey) {\n                      prevTransitionKey = key;\n                      transitionKeyChanged = true;\n                  }\n              }\n              // handle mode\n              if (oldInnerChild &&\n                  oldInnerChild.type !== Comment &&\n                  (!isSameVNodeType(innerChild, oldInnerChild) || transitionKeyChanged)) {\n                  const leavingHooks = resolveTransitionHooks(oldInnerChild, rawProps, state, instance);\n                  // update old tree's hooks in case of dynamic transition\n                  setTransitionHooks(oldInnerChild, leavingHooks);\n                  // switching between different views\n                  if (mode === 'out-in') {\n                      state.isLeaving = true;\n                      // return placeholder node and queue update when leave finishes\n                      leavingHooks.afterLeave = () => {\n                          state.isLeaving = false;\n                          // #6835\n                          // it also needs to be updated when active is undefined\n                          if (instance.update.active !== false) {\n                              instance.update();\n                          }\n                      };\n                      return emptyPlaceholder(child);\n                  }\n                  else if (mode === 'in-out' && innerChild.type !== Comment) {\n                      leavingHooks.delayLeave = (el, earlyRemove, delayedLeave) => {\n                          const leavingVNodesCache = getLeavingNodesForType(state, oldInnerChild);\n                          leavingVNodesCache[String(oldInnerChild.key)] = oldInnerChild;\n                          // early removal callback\n                          el._leaveCb = () => {\n                              earlyRemove();\n                              el._leaveCb = undefined;\n                              delete enterHooks.delayedLeave;\n                          };\n                          enterHooks.delayedLeave = delayedLeave;\n                      };\n                  }\n              }\n              return child;\n          };\n      }\n  };\n  // export the public type for h/tsx inference\n  // also to avoid inline import() in generated d.ts files\n  const BaseTransition = BaseTransitionImpl;\n  function getLeavingNodesForType(state, vnode) {\n      const { leavingVNodes } = state;\n      let leavingVNodesCache = leavingVNodes.get(vnode.type);\n      if (!leavingVNodesCache) {\n          leavingVNodesCache = Object.create(null);\n          leavingVNodes.set(vnode.type, leavingVNodesCache);\n      }\n      return leavingVNodesCache;\n  }\n  // The transition hooks are attached to the vnode as vnode.transition\n  // and will be called at appropriate timing in the renderer.\n  function resolveTransitionHooks(vnode, props, state, instance) {\n      const { appear, mode, persisted = false, onBeforeEnter, onEnter, onAfterEnter, onEnterCancelled, onBeforeLeave, onLeave, onAfterLeave, onLeaveCancelled, onBeforeAppear, onAppear, onAfterAppear, onAppearCancelled } = props;\n      const key = String(vnode.key);\n      const leavingVNodesCache = getLeavingNodesForType(state, vnode);\n      const callHook = (hook, args) => {\n          hook &&\n              callWithAsyncErrorHandling(hook, instance, 9 /* ErrorCodes.TRANSITION_HOOK */, args);\n      };\n      const callAsyncHook = (hook, args) => {\n          const done = args[1];\n          callHook(hook, args);\n          if (isArray(hook)) {\n              if (hook.every(hook => hook.length <= 1))\n                  done();\n          }\n          else if (hook.length <= 1) {\n              done();\n          }\n      };\n      const hooks = {\n          mode,\n          persisted,\n          beforeEnter(el) {\n              let hook = onBeforeEnter;\n              if (!state.isMounted) {\n                  if (appear) {\n                      hook = onBeforeAppear || onBeforeEnter;\n                  }\n                  else {\n                      return;\n                  }\n              }\n              // for same element (v-show)\n              if (el._leaveCb) {\n                  el._leaveCb(true /* cancelled */);\n              }\n              // for toggled element with same key (v-if)\n              const leavingVNode = leavingVNodesCache[key];\n              if (leavingVNode &&\n                  isSameVNodeType(vnode, leavingVNode) &&\n                  leavingVNode.el._leaveCb) {\n                  // force early removal (not cancelled)\n                  leavingVNode.el._leaveCb();\n              }\n              callHook(hook, [el]);\n          },\n          enter(el) {\n              let hook = onEnter;\n              let afterHook = onAfterEnter;\n              let cancelHook = onEnterCancelled;\n              if (!state.isMounted) {\n                  if (appear) {\n                      hook = onAppear || onEnter;\n                      afterHook = onAfterAppear || onAfterEnter;\n                      cancelHook = onAppearCancelled || onEnterCancelled;\n                  }\n                  else {\n                      return;\n                  }\n              }\n              let called = false;\n              const done = (el._enterCb = (cancelled) => {\n                  if (called)\n                      return;\n                  called = true;\n                  if (cancelled) {\n                      callHook(cancelHook, [el]);\n                  }\n                  else {\n                      callHook(afterHook, [el]);\n                  }\n                  if (hooks.delayedLeave) {\n                      hooks.delayedLeave();\n                  }\n                  el._enterCb = undefined;\n              });\n              if (hook) {\n                  callAsyncHook(hook, [el, done]);\n              }\n              else {\n                  done();\n              }\n          },\n          leave(el, remove) {\n              const key = String(vnode.key);\n              if (el._enterCb) {\n                  el._enterCb(true /* cancelled */);\n              }\n              if (state.isUnmounting) {\n                  return remove();\n              }\n              callHook(onBeforeLeave, [el]);\n              let called = false;\n              const done = (el._leaveCb = (cancelled) => {\n                  if (called)\n                      return;\n                  called = true;\n                  remove();\n                  if (cancelled) {\n                      callHook(onLeaveCancelled, [el]);\n                  }\n                  else {\n                      callHook(onAfterLeave, [el]);\n                  }\n                  el._leaveCb = undefined;\n                  if (leavingVNodesCache[key] === vnode) {\n                      delete leavingVNodesCache[key];\n                  }\n              });\n              leavingVNodesCache[key] = vnode;\n              if (onLeave) {\n                  callAsyncHook(onLeave, [el, done]);\n              }\n              else {\n                  done();\n              }\n          },\n          clone(vnode) {\n              return resolveTransitionHooks(vnode, props, state, instance);\n          }\n      };\n      return hooks;\n  }\n  // the placeholder really only handles one special case: KeepAlive\n  // in the case of a KeepAlive in a leave phase we need to return a KeepAlive\n  // placeholder with empty content to avoid the KeepAlive instance from being\n  // unmounted.\n  function emptyPlaceholder(vnode) {\n      if (isKeepAlive(vnode)) {\n          vnode = cloneVNode(vnode);\n          vnode.children = null;\n          return vnode;\n      }\n  }\n  function getKeepAliveChild(vnode) {\n      return isKeepAlive(vnode)\n          ? vnode.children\n              ? vnode.children[0]\n              : undefined\n          : vnode;\n  }\n  function setTransitionHooks(vnode, hooks) {\n      if (vnode.shapeFlag & 6 /* ShapeFlags.COMPONENT */ && vnode.component) {\n          setTransitionHooks(vnode.component.subTree, hooks);\n      }\n      else if (vnode.shapeFlag & 128 /* ShapeFlags.SUSPENSE */) {\n          vnode.ssContent.transition = hooks.clone(vnode.ssContent);\n          vnode.ssFallback.transition = hooks.clone(vnode.ssFallback);\n      }\n      else {\n          vnode.transition = hooks;\n      }\n  }\n  function getTransitionRawChildren(children, keepComment = false, parentKey) {\n      let ret = [];\n      let keyedFragmentCount = 0;\n      for (let i = 0; i < children.length; i++) {\n          let child = children[i];\n          // #5360 inherit parent key in case of <template v-for>\n          const key = parentKey == null\n              ? child.key\n              : String(parentKey) + String(child.key != null ? child.key : i);\n          // handle fragment children case, e.g. v-for\n          if (child.type === Fragment) {\n              if (child.patchFlag & 128 /* PatchFlags.KEYED_FRAGMENT */)\n                  keyedFragmentCount++;\n              ret = ret.concat(getTransitionRawChildren(child.children, keepComment, key));\n          }\n          // comment placeholders should be skipped, e.g. v-if\n          else if (keepComment || child.type !== Comment) {\n              ret.push(key != null ? cloneVNode(child, { key }) : child);\n          }\n      }\n      // #1126 if a transition children list contains multiple sub fragments, these\n      // fragments will be merged into a flat children array. Since each v-for\n      // fragment may contain different static bindings inside, we need to de-op\n      // these children to force full diffs to ensure correct behavior.\n      if (keyedFragmentCount > 1) {\n          for (let i = 0; i < ret.length; i++) {\n              ret[i].patchFlag = -2 /* PatchFlags.BAIL */;\n          }\n      }\n      return ret;\n  }\n\n  // implementation, close to no-op\n  function defineComponent(options) {\n      return isFunction(options) ? { setup: options, name: options.name } : options;\n  }\n\n  const isAsyncWrapper = (i) => !!i.type.__asyncLoader;\n  function defineAsyncComponent(source) {\n      if (isFunction(source)) {\n          source = { loader: source };\n      }\n      const { loader, loadingComponent, errorComponent, delay = 200, timeout, // undefined = never times out\n      suspensible = true, onError: userOnError } = source;\n      let pendingRequest = null;\n      let resolvedComp;\n      let retries = 0;\n      const retry = () => {\n          retries++;\n          pendingRequest = null;\n          return load();\n      };\n      const load = () => {\n          let thisRequest;\n          return (pendingRequest ||\n              (thisRequest = pendingRequest =\n                  loader()\n                      .catch(err => {\n                      err = err instanceof Error ? err : new Error(String(err));\n                      if (userOnError) {\n                          return new Promise((resolve, reject) => {\n                              const userRetry = () => resolve(retry());\n                              const userFail = () => reject(err);\n                              userOnError(err, userRetry, userFail, retries + 1);\n                          });\n                      }\n                      else {\n                          throw err;\n                      }\n                  })\n                      .then((comp) => {\n                      if (thisRequest !== pendingRequest && pendingRequest) {\n                          return pendingRequest;\n                      }\n                      if (!comp) {\n                          warn(`Async component loader resolved to undefined. ` +\n                              `If you are using retry(), make sure to return its return value.`);\n                      }\n                      // interop module default\n                      if (comp &&\n                          (comp.__esModule || comp[Symbol.toStringTag] === 'Module')) {\n                          comp = comp.default;\n                      }\n                      if (comp && !isObject(comp) && !isFunction(comp)) {\n                          throw new Error(`Invalid async component load result: ${comp}`);\n                      }\n                      resolvedComp = comp;\n                      return comp;\n                  })));\n      };\n      return defineComponent({\n          name: 'AsyncComponentWrapper',\n          __asyncLoader: load,\n          get __asyncResolved() {\n              return resolvedComp;\n          },\n          setup() {\n              const instance = currentInstance;\n              // already resolved\n              if (resolvedComp) {\n                  return () => createInnerComp(resolvedComp, instance);\n              }\n              const onError = (err) => {\n                  pendingRequest = null;\n                  handleError(err, instance, 13 /* ErrorCodes.ASYNC_COMPONENT_LOADER */, !errorComponent /* do not throw in dev if user provided error component */);\n              };\n              // suspense-controlled or SSR.\n              if ((suspensible && instance.suspense) ||\n                  (false )) {\n                  return load()\n                      .then(comp => {\n                      return () => createInnerComp(comp, instance);\n                  })\n                      .catch(err => {\n                      onError(err);\n                      return () => errorComponent\n                          ? createVNode(errorComponent, {\n                              error: err\n                          })\n                          : null;\n                  });\n              }\n              const loaded = ref(false);\n              const error = ref();\n              const delayed = ref(!!delay);\n              if (delay) {\n                  setTimeout(() => {\n                      delayed.value = false;\n                  }, delay);\n              }\n              if (timeout != null) {\n                  setTimeout(() => {\n                      if (!loaded.value && !error.value) {\n                          const err = new Error(`Async component timed out after ${timeout}ms.`);\n                          onError(err);\n                          error.value = err;\n                      }\n                  }, timeout);\n              }\n              load()\n                  .then(() => {\n                  loaded.value = true;\n                  if (instance.parent && isKeepAlive(instance.parent.vnode)) {\n                      // parent is keep-alive, force update so the loaded component's\n                      // name is taken into account\n                      queueJob(instance.parent.update);\n                  }\n              })\n                  .catch(err => {\n                  onError(err);\n                  error.value = err;\n              });\n              return () => {\n                  if (loaded.value && resolvedComp) {\n                      return createInnerComp(resolvedComp, instance);\n                  }\n                  else if (error.value && errorComponent) {\n                      return createVNode(errorComponent, {\n                          error: error.value\n                      });\n                  }\n                  else if (loadingComponent && !delayed.value) {\n                      return createVNode(loadingComponent);\n                  }\n              };\n          }\n      });\n  }\n  function createInnerComp(comp, parent) {\n      const { ref, props, children, ce } = parent.vnode;\n      const vnode = createVNode(comp, props, children);\n      // ensure inner component inherits the async wrapper's ref owner\n      vnode.ref = ref;\n      // pass the custom element callback on to the inner comp\n      // and remove it from the async wrapper\n      vnode.ce = ce;\n      delete parent.vnode.ce;\n      return vnode;\n  }\n\n  const isKeepAlive = (vnode) => vnode.type.__isKeepAlive;\n  const KeepAliveImpl = {\n      name: `KeepAlive`,\n      // Marker for special handling inside the renderer. We are not using a ===\n      // check directly on KeepAlive in the renderer, because importing it directly\n      // would prevent it from being tree-shaken.\n      __isKeepAlive: true,\n      props: {\n          include: [String, RegExp, Array],\n          exclude: [String, RegExp, Array],\n          max: [String, Number]\n      },\n      setup(props, { slots }) {\n          const instance = getCurrentInstance();\n          // KeepAlive communicates with the instantiated renderer via the\n          // ctx where the renderer passes in its internals,\n          // and the KeepAlive instance exposes activate/deactivate implementations.\n          // The whole point of this is to avoid importing KeepAlive directly in the\n          // renderer to facilitate tree-shaking.\n          const sharedContext = instance.ctx;\n          const cache = new Map();\n          const keys = new Set();\n          let current = null;\n          {\n              instance.__v_cache = cache;\n          }\n          const parentSuspense = instance.suspense;\n          const { renderer: { p: patch, m: move, um: _unmount, o: { createElement } } } = sharedContext;\n          const storageContainer = createElement('div');\n          sharedContext.activate = (vnode, container, anchor, isSVG, optimized) => {\n              const instance = vnode.component;\n              move(vnode, container, anchor, 0 /* MoveType.ENTER */, parentSuspense);\n              // in case props have changed\n              patch(instance.vnode, vnode, container, anchor, instance, parentSuspense, isSVG, vnode.slotScopeIds, optimized);\n              queuePostRenderEffect(() => {\n                  instance.isDeactivated = false;\n                  if (instance.a) {\n                      invokeArrayFns(instance.a);\n                  }\n                  const vnodeHook = vnode.props && vnode.props.onVnodeMounted;\n                  if (vnodeHook) {\n                      invokeVNodeHook(vnodeHook, instance.parent, vnode);\n                  }\n              }, parentSuspense);\n              {\n                  // Update components tree\n                  devtoolsComponentAdded(instance);\n              }\n          };\n          sharedContext.deactivate = (vnode) => {\n              const instance = vnode.component;\n              move(vnode, storageContainer, null, 1 /* MoveType.LEAVE */, parentSuspense);\n              queuePostRenderEffect(() => {\n                  if (instance.da) {\n                      invokeArrayFns(instance.da);\n                  }\n                  const vnodeHook = vnode.props && vnode.props.onVnodeUnmounted;\n                  if (vnodeHook) {\n                      invokeVNodeHook(vnodeHook, instance.parent, vnode);\n                  }\n                  instance.isDeactivated = true;\n              }, parentSuspense);\n              {\n                  // Update components tree\n                  devtoolsComponentAdded(instance);\n              }\n          };\n          function unmount(vnode) {\n              // reset the shapeFlag so it can be properly unmounted\n              resetShapeFlag(vnode);\n              _unmount(vnode, instance, parentSuspense, true);\n          }\n          function pruneCache(filter) {\n              cache.forEach((vnode, key) => {\n                  const name = getComponentName(vnode.type);\n                  if (name && (!filter || !filter(name))) {\n                      pruneCacheEntry(key);\n                  }\n              });\n          }\n          function pruneCacheEntry(key) {\n              const cached = cache.get(key);\n              if (!current || !isSameVNodeType(cached, current)) {\n                  unmount(cached);\n              }\n              else if (current) {\n                  // current active instance should no longer be kept-alive.\n                  // we can't unmount it now but it might be later, so reset its flag now.\n                  resetShapeFlag(current);\n              }\n              cache.delete(key);\n              keys.delete(key);\n          }\n          // prune cache on include/exclude prop change\n          watch(() => [props.include, props.exclude], ([include, exclude]) => {\n              include && pruneCache(name => matches(include, name));\n              exclude && pruneCache(name => !matches(exclude, name));\n          }, \n          // prune post-render after `current` has been updated\n          { flush: 'post', deep: true });\n          // cache sub tree after render\n          let pendingCacheKey = null;\n          const cacheSubtree = () => {\n              // fix #1621, the pendingCacheKey could be 0\n              if (pendingCacheKey != null) {\n                  cache.set(pendingCacheKey, getInnerChild(instance.subTree));\n              }\n          };\n          onMounted(cacheSubtree);\n          onUpdated(cacheSubtree);\n          onBeforeUnmount(() => {\n              cache.forEach(cached => {\n                  const { subTree, suspense } = instance;\n                  const vnode = getInnerChild(subTree);\n                  if (cached.type === vnode.type && cached.key === vnode.key) {\n                      // current instance will be unmounted as part of keep-alive's unmount\n                      resetShapeFlag(vnode);\n                      // but invoke its deactivated hook here\n                      const da = vnode.component.da;\n                      da && queuePostRenderEffect(da, suspense);\n                      return;\n                  }\n                  unmount(cached);\n              });\n          });\n          return () => {\n              pendingCacheKey = null;\n              if (!slots.default) {\n                  return null;\n              }\n              const children = slots.default();\n              const rawVNode = children[0];\n              if (children.length > 1) {\n                  {\n                      warn(`KeepAlive should contain exactly one component child.`);\n                  }\n                  current = null;\n                  return children;\n              }\n              else if (!isVNode(rawVNode) ||\n                  (!(rawVNode.shapeFlag & 4 /* ShapeFlags.STATEFUL_COMPONENT */) &&\n                      !(rawVNode.shapeFlag & 128 /* ShapeFlags.SUSPENSE */))) {\n                  current = null;\n                  return rawVNode;\n              }\n              let vnode = getInnerChild(rawVNode);\n              const comp = vnode.type;\n              // for async components, name check should be based in its loaded\n              // inner component if available\n              const name = getComponentName(isAsyncWrapper(vnode)\n                  ? vnode.type.__asyncResolved || {}\n                  : comp);\n              const { include, exclude, max } = props;\n              if ((include && (!name || !matches(include, name))) ||\n                  (exclude && name && matches(exclude, name))) {\n                  current = vnode;\n                  return rawVNode;\n              }\n              const key = vnode.key == null ? comp : vnode.key;\n              const cachedVNode = cache.get(key);\n              // clone vnode if it's reused because we are going to mutate it\n              if (vnode.el) {\n                  vnode = cloneVNode(vnode);\n                  if (rawVNode.shapeFlag & 128 /* ShapeFlags.SUSPENSE */) {\n                      rawVNode.ssContent = vnode;\n                  }\n              }\n              // #1513 it's possible for the returned vnode to be cloned due to attr\n              // fallthrough or scopeId, so the vnode here may not be the final vnode\n              // that is mounted. Instead of caching it directly, we store the pending\n              // key and cache `instance.subTree` (the normalized vnode) in\n              // beforeMount/beforeUpdate hooks.\n              pendingCacheKey = key;\n              if (cachedVNode) {\n                  // copy over mounted state\n                  vnode.el = cachedVNode.el;\n                  vnode.component = cachedVNode.component;\n                  if (vnode.transition) {\n                      // recursively update transition hooks on subTree\n                      setTransitionHooks(vnode, vnode.transition);\n                  }\n                  // avoid vnode being mounted as fresh\n                  vnode.shapeFlag |= 512 /* ShapeFlags.COMPONENT_KEPT_ALIVE */;\n                  // make this key the freshest\n                  keys.delete(key);\n                  keys.add(key);\n              }\n              else {\n                  keys.add(key);\n                  // prune oldest entry\n                  if (max && keys.size > parseInt(max, 10)) {\n                      pruneCacheEntry(keys.values().next().value);\n                  }\n              }\n              // avoid vnode being unmounted\n              vnode.shapeFlag |= 256 /* ShapeFlags.COMPONENT_SHOULD_KEEP_ALIVE */;\n              current = vnode;\n              return isSuspense(rawVNode.type) ? rawVNode : vnode;\n          };\n      }\n  };\n  // export the public type for h/tsx inference\n  // also to avoid inline import() in generated d.ts files\n  const KeepAlive = KeepAliveImpl;\n  function matches(pattern, name) {\n      if (isArray(pattern)) {\n          return pattern.some((p) => matches(p, name));\n      }\n      else if (isString(pattern)) {\n          return pattern.split(',').includes(name);\n      }\n      else if (isRegExp(pattern)) {\n          return pattern.test(name);\n      }\n      /* istanbul ignore next */\n      return false;\n  }\n  function onActivated(hook, target) {\n      registerKeepAliveHook(hook, \"a\" /* LifecycleHooks.ACTIVATED */, target);\n  }\n  function onDeactivated(hook, target) {\n      registerKeepAliveHook(hook, \"da\" /* LifecycleHooks.DEACTIVATED */, target);\n  }\n  function registerKeepAliveHook(hook, type, target = currentInstance) {\n      // cache the deactivate branch check wrapper for injected hooks so the same\n      // hook can be properly deduped by the scheduler. \"__wdc\" stands for \"with\n      // deactivation check\".\n      const wrappedHook = hook.__wdc ||\n          (hook.__wdc = () => {\n              // only fire the hook if the target instance is NOT in a deactivated branch.\n              let current = target;\n              while (current) {\n                  if (current.isDeactivated) {\n                      return;\n                  }\n                  current = current.parent;\n              }\n              return hook();\n          });\n      injectHook(type, wrappedHook, target);\n      // In addition to registering it on the target instance, we walk up the parent\n      // chain and register it on all ancestor instances that are keep-alive roots.\n      // This avoids the need to walk the entire component tree when invoking these\n      // hooks, and more importantly, avoids the need to track child components in\n      // arrays.\n      if (target) {\n          let current = target.parent;\n          while (current && current.parent) {\n              if (isKeepAlive(current.parent.vnode)) {\n                  injectToKeepAliveRoot(wrappedHook, type, target, current);\n              }\n              current = current.parent;\n          }\n      }\n  }\n  function injectToKeepAliveRoot(hook, type, target, keepAliveRoot) {\n      // injectHook wraps the original for error handling, so make sure to remove\n      // the wrapped version.\n      const injected = injectHook(type, hook, keepAliveRoot, true /* prepend */);\n      onUnmounted(() => {\n          remove(keepAliveRoot[type], injected);\n      }, target);\n  }\n  function resetShapeFlag(vnode) {\n      // bitwise operations to remove keep alive flags\n      vnode.shapeFlag &= ~256 /* ShapeFlags.COMPONENT_SHOULD_KEEP_ALIVE */;\n      vnode.shapeFlag &= ~512 /* ShapeFlags.COMPONENT_KEPT_ALIVE */;\n  }\n  function getInnerChild(vnode) {\n      return vnode.shapeFlag & 128 /* ShapeFlags.SUSPENSE */ ? vnode.ssContent : vnode;\n  }\n\n  function injectHook(type, hook, target = currentInstance, prepend = false) {\n      if (target) {\n          const hooks = target[type] || (target[type] = []);\n          // cache the error handling wrapper for injected hooks so the same hook\n          // can be properly deduped by the scheduler. \"__weh\" stands for \"with error\n          // handling\".\n          const wrappedHook = hook.__weh ||\n              (hook.__weh = (...args) => {\n                  if (target.isUnmounted) {\n                      return;\n                  }\n                  // disable tracking inside all lifecycle hooks\n                  // since they can potentially be called inside effects.\n                  pauseTracking();\n                  // Set currentInstance during hook invocation.\n                  // This assumes the hook does not synchronously trigger other hooks, which\n                  // can only be false when the user does something really funky.\n                  setCurrentInstance(target);\n                  const res = callWithAsyncErrorHandling(hook, target, type, args);\n                  unsetCurrentInstance();\n                  resetTracking();\n                  return res;\n              });\n          if (prepend) {\n              hooks.unshift(wrappedHook);\n          }\n          else {\n              hooks.push(wrappedHook);\n          }\n          return wrappedHook;\n      }\n      else {\n          const apiName = toHandlerKey(ErrorTypeStrings[type].replace(/ hook$/, ''));\n          warn(`${apiName} is called when there is no active component instance to be ` +\n              `associated with. ` +\n              `Lifecycle injection APIs can only be used during execution of setup().` +\n              (` If you are using async setup(), make sure to register lifecycle ` +\n                      `hooks before the first await statement.`\n                  ));\n      }\n  }\n  const createHook = (lifecycle) => (hook, target = currentInstance) => \n  // post-create lifecycle registrations are noops during SSR (except for serverPrefetch)\n  (!isInSSRComponentSetup || lifecycle === \"sp\" /* LifecycleHooks.SERVER_PREFETCH */) &&\n      injectHook(lifecycle, (...args) => hook(...args), target);\n  const onBeforeMount = createHook(\"bm\" /* LifecycleHooks.BEFORE_MOUNT */);\n  const onMounted = createHook(\"m\" /* LifecycleHooks.MOUNTED */);\n  const onBeforeUpdate = createHook(\"bu\" /* LifecycleHooks.BEFORE_UPDATE */);\n  const onUpdated = createHook(\"u\" /* LifecycleHooks.UPDATED */);\n  const onBeforeUnmount = createHook(\"bum\" /* LifecycleHooks.BEFORE_UNMOUNT */);\n  const onUnmounted = createHook(\"um\" /* LifecycleHooks.UNMOUNTED */);\n  const onServerPrefetch = createHook(\"sp\" /* LifecycleHooks.SERVER_PREFETCH */);\n  const onRenderTriggered = createHook(\"rtg\" /* LifecycleHooks.RENDER_TRIGGERED */);\n  const onRenderTracked = createHook(\"rtc\" /* LifecycleHooks.RENDER_TRACKED */);\n  function onErrorCaptured(hook, target = currentInstance) {\n      injectHook(\"ec\" /* LifecycleHooks.ERROR_CAPTURED */, hook, target);\n  }\n\n  /**\n  Runtime helper for applying directives to a vnode. Example usage:\n\n  const comp = resolveComponent('comp')\n  const foo = resolveDirective('foo')\n  const bar = resolveDirective('bar')\n\n  return withDirectives(h(comp), [\n    [foo, this.x],\n    [bar, this.y]\n  ])\n  */\n  function validateDirectiveName(name) {\n      if (isBuiltInDirective(name)) {\n          warn('Do not use built-in directive ids as custom directive id: ' + name);\n      }\n  }\n  /**\n   * Adds directives to a VNode.\n   */\n  function withDirectives(vnode, directives) {\n      const internalInstance = currentRenderingInstance;\n      if (internalInstance === null) {\n          warn(`withDirectives can only be used inside render functions.`);\n          return vnode;\n      }\n      const instance = getExposeProxy(internalInstance) ||\n          internalInstance.proxy;\n      const bindings = vnode.dirs || (vnode.dirs = []);\n      for (let i = 0; i < directives.length; i++) {\n          let [dir, value, arg, modifiers = EMPTY_OBJ] = directives[i];\n          if (dir) {\n              if (isFunction(dir)) {\n                  dir = {\n                      mounted: dir,\n                      updated: dir\n                  };\n              }\n              if (dir.deep) {\n                  traverse(value);\n              }\n              bindings.push({\n                  dir,\n                  instance,\n                  value,\n                  oldValue: void 0,\n                  arg,\n                  modifiers\n              });\n          }\n      }\n      return vnode;\n  }\n  function invokeDirectiveHook(vnode, prevVNode, instance, name) {\n      const bindings = vnode.dirs;\n      const oldBindings = prevVNode && prevVNode.dirs;\n      for (let i = 0; i < bindings.length; i++) {\n          const binding = bindings[i];\n          if (oldBindings) {\n              binding.oldValue = oldBindings[i].value;\n          }\n          let hook = binding.dir[name];\n          if (hook) {\n              // disable tracking inside all lifecycle hooks\n              // since they can potentially be called inside effects.\n              pauseTracking();\n              callWithAsyncErrorHandling(hook, instance, 8 /* ErrorCodes.DIRECTIVE_HOOK */, [\n                  vnode.el,\n                  binding,\n                  vnode,\n                  prevVNode\n              ]);\n              resetTracking();\n          }\n      }\n  }\n\n  const COMPONENTS = 'components';\n  const DIRECTIVES = 'directives';\n  /**\n   * @private\n   */\n  function resolveComponent(name, maybeSelfReference) {\n      return resolveAsset(COMPONENTS, name, true, maybeSelfReference) || name;\n  }\n  const NULL_DYNAMIC_COMPONENT = Symbol();\n  /**\n   * @private\n   */\n  function resolveDynamicComponent(component) {\n      if (isString(component)) {\n          return resolveAsset(COMPONENTS, component, false) || component;\n      }\n      else {\n          // invalid types will fallthrough to createVNode and raise warning\n          return (component || NULL_DYNAMIC_COMPONENT);\n      }\n  }\n  /**\n   * @private\n   */\n  function resolveDirective(name) {\n      return resolveAsset(DIRECTIVES, name);\n  }\n  // implementation\n  function resolveAsset(type, name, warnMissing = true, maybeSelfReference = false) {\n      const instance = currentRenderingInstance || currentInstance;\n      if (instance) {\n          const Component = instance.type;\n          // explicit self name has highest priority\n          if (type === COMPONENTS) {\n              const selfName = getComponentName(Component, false /* do not include inferred name to avoid breaking existing code */);\n              if (selfName &&\n                  (selfName === name ||\n                      selfName === camelize(name) ||\n                      selfName === capitalize(camelize(name)))) {\n                  return Component;\n              }\n          }\n          const res = \n          // local registration\n          // check instance[type] first which is resolved for options API\n          resolve(instance[type] || Component[type], name) ||\n              // global registration\n              resolve(instance.appContext[type], name);\n          if (!res && maybeSelfReference) {\n              // fallback to implicit self-reference\n              return Component;\n          }\n          if (warnMissing && !res) {\n              const extra = type === COMPONENTS\n                  ? `\\nIf this is a native custom element, make sure to exclude it from ` +\n                      `component resolution via compilerOptions.isCustomElement.`\n                  : ``;\n              warn(`Failed to resolve ${type.slice(0, -1)}: ${name}${extra}`);\n          }\n          return res;\n      }\n      else {\n          warn(`resolve${capitalize(type.slice(0, -1))} ` +\n              `can only be used in render() or setup().`);\n      }\n  }\n  function resolve(registry, name) {\n      return (registry &&\n          (registry[name] ||\n              registry[camelize(name)] ||\n              registry[capitalize(camelize(name))]));\n  }\n\n  /**\n   * Actual implementation\n   */\n  function renderList(source, renderItem, cache, index) {\n      let ret;\n      const cached = (cache && cache[index]);\n      if (isArray(source) || isString(source)) {\n          ret = new Array(source.length);\n          for (let i = 0, l = source.length; i < l; i++) {\n              ret[i] = renderItem(source[i], i, undefined, cached && cached[i]);\n          }\n      }\n      else if (typeof source === 'number') {\n          if (!Number.isInteger(source)) {\n              warn(`The v-for range expect an integer value but got ${source}.`);\n          }\n          ret = new Array(source);\n          for (let i = 0; i < source; i++) {\n              ret[i] = renderItem(i + 1, i, undefined, cached && cached[i]);\n          }\n      }\n      else if (isObject(source)) {\n          if (source[Symbol.iterator]) {\n              ret = Array.from(source, (item, i) => renderItem(item, i, undefined, cached && cached[i]));\n          }\n          else {\n              const keys = Object.keys(source);\n              ret = new Array(keys.length);\n              for (let i = 0, l = keys.length; i < l; i++) {\n                  const key = keys[i];\n                  ret[i] = renderItem(source[key], key, i, cached && cached[i]);\n              }\n          }\n      }\n      else {\n          ret = [];\n      }\n      if (cache) {\n          cache[index] = ret;\n      }\n      return ret;\n  }\n\n  /**\n   * Compiler runtime helper for creating dynamic slots object\n   * @private\n   */\n  function createSlots(slots, dynamicSlots) {\n      for (let i = 0; i < dynamicSlots.length; i++) {\n          const slot = dynamicSlots[i];\n          // array of dynamic slot generated by <template v-for=\"...\" #[...]>\n          if (isArray(slot)) {\n              for (let j = 0; j < slot.length; j++) {\n                  slots[slot[j].name] = slot[j].fn;\n              }\n          }\n          else if (slot) {\n              // conditional single slot generated by <template v-if=\"...\" #foo>\n              slots[slot.name] = slot.key\n                  ? (...args) => {\n                      const res = slot.fn(...args);\n                      // attach branch key so each conditional branch is considered a\n                      // different fragment\n                      if (res)\n                          res.key = slot.key;\n                      return res;\n                  }\n                  : slot.fn;\n          }\n      }\n      return slots;\n  }\n\n  /**\n   * Compiler runtime helper for rendering `<slot/>`\n   * @private\n   */\n  function renderSlot(slots, name, props = {}, \n  // this is not a user-facing function, so the fallback is always generated by\n  // the compiler and guaranteed to be a function returning an array\n  fallback, noSlotted) {\n      if (currentRenderingInstance.isCE ||\n          (currentRenderingInstance.parent &&\n              isAsyncWrapper(currentRenderingInstance.parent) &&\n              currentRenderingInstance.parent.isCE)) {\n          if (name !== 'default')\n              props.name = name;\n          return createVNode('slot', props, fallback && fallback());\n      }\n      let slot = slots[name];\n      if (slot && slot.length > 1) {\n          warn(`SSR-optimized slot function detected in a non-SSR-optimized render ` +\n              `function. You need to mark this component with $dynamic-slots in the ` +\n              `parent template.`);\n          slot = () => [];\n      }\n      // a compiled slot disables block tracking by default to avoid manual\n      // invocation interfering with template-based block tracking, but in\n      // `renderSlot` we can be sure that it's template-based so we can force\n      // enable it.\n      if (slot && slot._c) {\n          slot._d = false;\n      }\n      openBlock();\n      const validSlotContent = slot && ensureValidVNode(slot(props));\n      const rendered = createBlock(Fragment, {\n          key: props.key ||\n              // slot content array of a dynamic conditional slot may have a branch\n              // key attached in the `createSlots` helper, respect that\n              (validSlotContent && validSlotContent.key) ||\n              `_${name}`\n      }, validSlotContent || (fallback ? fallback() : []), validSlotContent && slots._ === 1 /* SlotFlags.STABLE */\n          ? 64 /* PatchFlags.STABLE_FRAGMENT */\n          : -2 /* PatchFlags.BAIL */);\n      if (!noSlotted && rendered.scopeId) {\n          rendered.slotScopeIds = [rendered.scopeId + '-s'];\n      }\n      if (slot && slot._c) {\n          slot._d = true;\n      }\n      return rendered;\n  }\n  function ensureValidVNode(vnodes) {\n      return vnodes.some(child => {\n          if (!isVNode(child))\n              return true;\n          if (child.type === Comment)\n              return false;\n          if (child.type === Fragment &&\n              !ensureValidVNode(child.children))\n              return false;\n          return true;\n      })\n          ? vnodes\n          : null;\n  }\n\n  /**\n   * For prefixing keys in v-on=\"obj\" with \"on\"\n   * @private\n   */\n  function toHandlers(obj, preserveCaseIfNecessary) {\n      const ret = {};\n      if (!isObject(obj)) {\n          warn(`v-on with no argument expects an object value.`);\n          return ret;\n      }\n      for (const key in obj) {\n          ret[preserveCaseIfNecessary && /[A-Z]/.test(key)\n              ? `on:${key}`\n              : toHandlerKey(key)] = obj[key];\n      }\n      return ret;\n  }\n\n  /**\n   * #2437 In Vue 3, functional components do not have a public instance proxy but\n   * they exist in the internal parent chain. For code that relies on traversing\n   * public $parent chains, skip functional ones and go to the parent instead.\n   */\n  const getPublicInstance = (i) => {\n      if (!i)\n          return null;\n      if (isStatefulComponent(i))\n          return getExposeProxy(i) || i.proxy;\n      return getPublicInstance(i.parent);\n  };\n  const publicPropertiesMap = \n  // Move PURE marker to new line to workaround compiler discarding it\n  // due to type annotation\n  /*#__PURE__*/ extend(Object.create(null), {\n      $: i => i,\n      $el: i => i.vnode.el,\n      $data: i => i.data,\n      $props: i => (shallowReadonly(i.props) ),\n      $attrs: i => (shallowReadonly(i.attrs) ),\n      $slots: i => (shallowReadonly(i.slots) ),\n      $refs: i => (shallowReadonly(i.refs) ),\n      $parent: i => getPublicInstance(i.parent),\n      $root: i => getPublicInstance(i.root),\n      $emit: i => i.emit,\n      $options: i => (resolveMergedOptions(i) ),\n      $forceUpdate: i => i.f || (i.f = () => queueJob(i.update)),\n      $nextTick: i => i.n || (i.n = nextTick.bind(i.proxy)),\n      $watch: i => (instanceWatch.bind(i) )\n  });\n  const isReservedPrefix = (key) => key === '_' || key === '$';\n  const hasSetupBinding = (state, key) => state !== EMPTY_OBJ && !state.__isScriptSetup && hasOwn(state, key);\n  const PublicInstanceProxyHandlers = {\n      get({ _: instance }, key) {\n          const { ctx, setupState, data, props, accessCache, type, appContext } = instance;\n          // for internal formatters to know that this is a Vue instance\n          if (key === '__isVue') {\n              return true;\n          }\n          // data / props / ctx\n          // This getter gets called for every property access on the render context\n          // during render and is a major hotspot. The most expensive part of this\n          // is the multiple hasOwn() calls. It's much faster to do a simple property\n          // access on a plain object, so we use an accessCache object (with null\n          // prototype) to memoize what access type a key corresponds to.\n          let normalizedProps;\n          if (key[0] !== '$') {\n              const n = accessCache[key];\n              if (n !== undefined) {\n                  switch (n) {\n                      case 1 /* AccessTypes.SETUP */:\n                          return setupState[key];\n                      case 2 /* AccessTypes.DATA */:\n                          return data[key];\n                      case 4 /* AccessTypes.CONTEXT */:\n                          return ctx[key];\n                      case 3 /* AccessTypes.PROPS */:\n                          return props[key];\n                      // default: just fallthrough\n                  }\n              }\n              else if (hasSetupBinding(setupState, key)) {\n                  accessCache[key] = 1 /* AccessTypes.SETUP */;\n                  return setupState[key];\n              }\n              else if (data !== EMPTY_OBJ && hasOwn(data, key)) {\n                  accessCache[key] = 2 /* AccessTypes.DATA */;\n                  return data[key];\n              }\n              else if (\n              // only cache other properties when instance has declared (thus stable)\n              // props\n              (normalizedProps = instance.propsOptions[0]) &&\n                  hasOwn(normalizedProps, key)) {\n                  accessCache[key] = 3 /* AccessTypes.PROPS */;\n                  return props[key];\n              }\n              else if (ctx !== EMPTY_OBJ && hasOwn(ctx, key)) {\n                  accessCache[key] = 4 /* AccessTypes.CONTEXT */;\n                  return ctx[key];\n              }\n              else if (shouldCacheAccess) {\n                  accessCache[key] = 0 /* AccessTypes.OTHER */;\n              }\n          }\n          const publicGetter = publicPropertiesMap[key];\n          let cssModule, globalProperties;\n          // public $xxx properties\n          if (publicGetter) {\n              if (key === '$attrs') {\n                  track(instance, \"get\" /* TrackOpTypes.GET */, key);\n                  markAttrsAccessed();\n              }\n              return publicGetter(instance);\n          }\n          else if (\n          // css module (injected by vue-loader)\n          (cssModule = type.__cssModules) &&\n              (cssModule = cssModule[key])) {\n              return cssModule;\n          }\n          else if (ctx !== EMPTY_OBJ && hasOwn(ctx, key)) {\n              // user may set custom properties to `this` that start with `$`\n              accessCache[key] = 4 /* AccessTypes.CONTEXT */;\n              return ctx[key];\n          }\n          else if (\n          // global properties\n          ((globalProperties = appContext.config.globalProperties),\n              hasOwn(globalProperties, key))) {\n              {\n                  return globalProperties[key];\n              }\n          }\n          else if (currentRenderingInstance &&\n              (!isString(key) ||\n                  // #1091 avoid internal isRef/isVNode checks on component instance leading\n                  // to infinite warning loop\n                  key.indexOf('__v') !== 0)) {\n              if (data !== EMPTY_OBJ && isReservedPrefix(key[0]) && hasOwn(data, key)) {\n                  warn(`Property ${JSON.stringify(key)} must be accessed via $data because it starts with a reserved ` +\n                      `character (\"$\" or \"_\") and is not proxied on the render context.`);\n              }\n              else if (instance === currentRenderingInstance) {\n                  warn(`Property ${JSON.stringify(key)} was accessed during render ` +\n                      `but is not defined on instance.`);\n              }\n          }\n      },\n      set({ _: instance }, key, value) {\n          const { data, setupState, ctx } = instance;\n          if (hasSetupBinding(setupState, key)) {\n              setupState[key] = value;\n              return true;\n          }\n          else if (setupState.__isScriptSetup &&\n              hasOwn(setupState, key)) {\n              warn(`Cannot mutate <script setup> binding \"${key}\" from Options API.`);\n              return false;\n          }\n          else if (data !== EMPTY_OBJ && hasOwn(data, key)) {\n              data[key] = value;\n              return true;\n          }\n          else if (hasOwn(instance.props, key)) {\n              warn(`Attempting to mutate prop \"${key}\". Props are readonly.`);\n              return false;\n          }\n          if (key[0] === '$' && key.slice(1) in instance) {\n              warn(`Attempting to mutate public property \"${key}\". ` +\n                      `Properties starting with $ are reserved and readonly.`);\n              return false;\n          }\n          else {\n              if (key in instance.appContext.config.globalProperties) {\n                  Object.defineProperty(ctx, key, {\n                      enumerable: true,\n                      configurable: true,\n                      value\n                  });\n              }\n              else {\n                  ctx[key] = value;\n              }\n          }\n          return true;\n      },\n      has({ _: { data, setupState, accessCache, ctx, appContext, propsOptions } }, key) {\n          let normalizedProps;\n          return (!!accessCache[key] ||\n              (data !== EMPTY_OBJ && hasOwn(data, key)) ||\n              hasSetupBinding(setupState, key) ||\n              ((normalizedProps = propsOptions[0]) && hasOwn(normalizedProps, key)) ||\n              hasOwn(ctx, key) ||\n              hasOwn(publicPropertiesMap, key) ||\n              hasOwn(appContext.config.globalProperties, key));\n      },\n      defineProperty(target, key, descriptor) {\n          if (descriptor.get != null) {\n              // invalidate key cache of a getter based property #5417\n              target._.accessCache[key] = 0;\n          }\n          else if (hasOwn(descriptor, 'value')) {\n              this.set(target, key, descriptor.value, null);\n          }\n          return Reflect.defineProperty(target, key, descriptor);\n      }\n  };\n  {\n      PublicInstanceProxyHandlers.ownKeys = (target) => {\n          warn(`Avoid app logic that relies on enumerating keys on a component instance. ` +\n              `The keys will be empty in production mode to avoid performance overhead.`);\n          return Reflect.ownKeys(target);\n      };\n  }\n  const RuntimeCompiledPublicInstanceProxyHandlers = /*#__PURE__*/ extend({}, PublicInstanceProxyHandlers, {\n      get(target, key) {\n          // fast path for unscopables when using `with` block\n          if (key === Symbol.unscopables) {\n              return;\n          }\n          return PublicInstanceProxyHandlers.get(target, key, target);\n      },\n      has(_, key) {\n          const has = key[0] !== '_' && !isGloballyWhitelisted(key);\n          if (!has && PublicInstanceProxyHandlers.has(_, key)) {\n              warn(`Property ${JSON.stringify(key)} should not start with _ which is a reserved prefix for Vue internals.`);\n          }\n          return has;\n      }\n  });\n  // dev only\n  // In dev mode, the proxy target exposes the same properties as seen on `this`\n  // for easier console inspection. In prod mode it will be an empty object so\n  // these properties definitions can be skipped.\n  function createDevRenderContext(instance) {\n      const target = {};\n      // expose internal instance for proxy handlers\n      Object.defineProperty(target, `_`, {\n          configurable: true,\n          enumerable: false,\n          get: () => instance\n      });\n      // expose public properties\n      Object.keys(publicPropertiesMap).forEach(key => {\n          Object.defineProperty(target, key, {\n              configurable: true,\n              enumerable: false,\n              get: () => publicPropertiesMap[key](instance),\n              // intercepted by the proxy so no need for implementation,\n              // but needed to prevent set errors\n              set: NOOP\n          });\n      });\n      return target;\n  }\n  // dev only\n  function exposePropsOnRenderContext(instance) {\n      const { ctx, propsOptions: [propsOptions] } = instance;\n      if (propsOptions) {\n          Object.keys(propsOptions).forEach(key => {\n              Object.defineProperty(ctx, key, {\n                  enumerable: true,\n                  configurable: true,\n                  get: () => instance.props[key],\n                  set: NOOP\n              });\n          });\n      }\n  }\n  // dev only\n  function exposeSetupStateOnRenderContext(instance) {\n      const { ctx, setupState } = instance;\n      Object.keys(toRaw(setupState)).forEach(key => {\n          if (!setupState.__isScriptSetup) {\n              if (isReservedPrefix(key[0])) {\n                  warn(`setup() return property ${JSON.stringify(key)} should not start with \"$\" or \"_\" ` +\n                      `which are reserved prefixes for Vue internals.`);\n                  return;\n              }\n              Object.defineProperty(ctx, key, {\n                  enumerable: true,\n                  configurable: true,\n                  get: () => setupState[key],\n                  set: NOOP\n              });\n          }\n      });\n  }\n\n  function createDuplicateChecker() {\n      const cache = Object.create(null);\n      return (type, key) => {\n          if (cache[key]) {\n              warn(`${type} property \"${key}\" is already defined in ${cache[key]}.`);\n          }\n          else {\n              cache[key] = type;\n          }\n      };\n  }\n  let shouldCacheAccess = true;\n  function applyOptions(instance) {\n      const options = resolveMergedOptions(instance);\n      const publicThis = instance.proxy;\n      const ctx = instance.ctx;\n      // do not cache property access on public proxy during state initialization\n      shouldCacheAccess = false;\n      // call beforeCreate first before accessing other options since\n      // the hook may mutate resolved options (#2791)\n      if (options.beforeCreate) {\n          callHook$1(options.beforeCreate, instance, \"bc\" /* LifecycleHooks.BEFORE_CREATE */);\n      }\n      const { \n      // state\n      data: dataOptions, computed: computedOptions, methods, watch: watchOptions, provide: provideOptions, inject: injectOptions, \n      // lifecycle\n      created, beforeMount, mounted, beforeUpdate, updated, activated, deactivated, beforeDestroy, beforeUnmount, destroyed, unmounted, render, renderTracked, renderTriggered, errorCaptured, serverPrefetch, \n      // public API\n      expose, inheritAttrs, \n      // assets\n      components, directives, filters } = options;\n      const checkDuplicateProperties = createDuplicateChecker() ;\n      {\n          const [propsOptions] = instance.propsOptions;\n          if (propsOptions) {\n              for (const key in propsOptions) {\n                  checkDuplicateProperties(\"Props\" /* OptionTypes.PROPS */, key);\n              }\n          }\n      }\n      // options initialization order (to be consistent with Vue 2):\n      // - props (already done outside of this function)\n      // - inject\n      // - methods\n      // - data (deferred since it relies on `this` access)\n      // - computed\n      // - watch (deferred since it relies on `this` access)\n      if (injectOptions) {\n          resolveInjections(injectOptions, ctx, checkDuplicateProperties, instance.appContext.config.unwrapInjectedRef);\n      }\n      if (methods) {\n          for (const key in methods) {\n              const methodHandler = methods[key];\n              if (isFunction(methodHandler)) {\n                  // In dev mode, we use the `createRenderContext` function to define\n                  // methods to the proxy target, and those are read-only but\n                  // reconfigurable, so it needs to be redefined here\n                  {\n                      Object.defineProperty(ctx, key, {\n                          value: methodHandler.bind(publicThis),\n                          configurable: true,\n                          enumerable: true,\n                          writable: true\n                      });\n                  }\n                  {\n                      checkDuplicateProperties(\"Methods\" /* OptionTypes.METHODS */, key);\n                  }\n              }\n              else {\n                  warn(`Method \"${key}\" has type \"${typeof methodHandler}\" in the component definition. ` +\n                      `Did you reference the function correctly?`);\n              }\n          }\n      }\n      if (dataOptions) {\n          if (!isFunction(dataOptions)) {\n              warn(`The data option must be a function. ` +\n                  `Plain object usage is no longer supported.`);\n          }\n          const data = dataOptions.call(publicThis, publicThis);\n          if (isPromise(data)) {\n              warn(`data() returned a Promise - note data() cannot be async; If you ` +\n                  `intend to perform data fetching before component renders, use ` +\n                  `async setup() + <Suspense>.`);\n          }\n          if (!isObject(data)) {\n              warn(`data() should return an object.`);\n          }\n          else {\n              instance.data = reactive(data);\n              {\n                  for (const key in data) {\n                      checkDuplicateProperties(\"Data\" /* OptionTypes.DATA */, key);\n                      // expose data on ctx during dev\n                      if (!isReservedPrefix(key[0])) {\n                          Object.defineProperty(ctx, key, {\n                              configurable: true,\n                              enumerable: true,\n                              get: () => data[key],\n                              set: NOOP\n                          });\n                      }\n                  }\n              }\n          }\n      }\n      // state initialization complete at this point - start caching access\n      shouldCacheAccess = true;\n      if (computedOptions) {\n          for (const key in computedOptions) {\n              const opt = computedOptions[key];\n              const get = isFunction(opt)\n                  ? opt.bind(publicThis, publicThis)\n                  : isFunction(opt.get)\n                      ? opt.get.bind(publicThis, publicThis)\n                      : NOOP;\n              if (get === NOOP) {\n                  warn(`Computed property \"${key}\" has no getter.`);\n              }\n              const set = !isFunction(opt) && isFunction(opt.set)\n                  ? opt.set.bind(publicThis)\n                  : () => {\n                          warn(`Write operation failed: computed property \"${key}\" is readonly.`);\n                      }\n                      ;\n              const c = computed({\n                  get,\n                  set\n              });\n              Object.defineProperty(ctx, key, {\n                  enumerable: true,\n                  configurable: true,\n                  get: () => c.value,\n                  set: v => (c.value = v)\n              });\n              {\n                  checkDuplicateProperties(\"Computed\" /* OptionTypes.COMPUTED */, key);\n              }\n          }\n      }\n      if (watchOptions) {\n          for (const key in watchOptions) {\n              createWatcher(watchOptions[key], ctx, publicThis, key);\n          }\n      }\n      if (provideOptions) {\n          const provides = isFunction(provideOptions)\n              ? provideOptions.call(publicThis)\n              : provideOptions;\n          Reflect.ownKeys(provides).forEach(key => {\n              provide(key, provides[key]);\n          });\n      }\n      if (created) {\n          callHook$1(created, instance, \"c\" /* LifecycleHooks.CREATED */);\n      }\n      function registerLifecycleHook(register, hook) {\n          if (isArray(hook)) {\n              hook.forEach(_hook => register(_hook.bind(publicThis)));\n          }\n          else if (hook) {\n              register(hook.bind(publicThis));\n          }\n      }\n      registerLifecycleHook(onBeforeMount, beforeMount);\n      registerLifecycleHook(onMounted, mounted);\n      registerLifecycleHook(onBeforeUpdate, beforeUpdate);\n      registerLifecycleHook(onUpdated, updated);\n      registerLifecycleHook(onActivated, activated);\n      registerLifecycleHook(onDeactivated, deactivated);\n      registerLifecycleHook(onErrorCaptured, errorCaptured);\n      registerLifecycleHook(onRenderTracked, renderTracked);\n      registerLifecycleHook(onRenderTriggered, renderTriggered);\n      registerLifecycleHook(onBeforeUnmount, beforeUnmount);\n      registerLifecycleHook(onUnmounted, unmounted);\n      registerLifecycleHook(onServerPrefetch, serverPrefetch);\n      if (isArray(expose)) {\n          if (expose.length) {\n              const exposed = instance.exposed || (instance.exposed = {});\n              expose.forEach(key => {\n                  Object.defineProperty(exposed, key, {\n                      get: () => publicThis[key],\n                      set: val => (publicThis[key] = val)\n                  });\n              });\n          }\n          else if (!instance.exposed) {\n              instance.exposed = {};\n          }\n      }\n      // options that are handled when creating the instance but also need to be\n      // applied from mixins\n      if (render && instance.render === NOOP) {\n          instance.render = render;\n      }\n      if (inheritAttrs != null) {\n          instance.inheritAttrs = inheritAttrs;\n      }\n      // asset options.\n      if (components)\n          instance.components = components;\n      if (directives)\n          instance.directives = directives;\n  }\n  function resolveInjections(injectOptions, ctx, checkDuplicateProperties = NOOP, unwrapRef = false) {\n      if (isArray(injectOptions)) {\n          injectOptions = normalizeInject(injectOptions);\n      }\n      for (const key in injectOptions) {\n          const opt = injectOptions[key];\n          let injected;\n          if (isObject(opt)) {\n              if ('default' in opt) {\n                  injected = inject(opt.from || key, opt.default, true /* treat default function as factory */);\n              }\n              else {\n                  injected = inject(opt.from || key);\n              }\n          }\n          else {\n              injected = inject(opt);\n          }\n          if (isRef(injected)) {\n              // TODO remove the check in 3.3\n              if (unwrapRef) {\n                  Object.defineProperty(ctx, key, {\n                      enumerable: true,\n                      configurable: true,\n                      get: () => injected.value,\n                      set: v => (injected.value = v)\n                  });\n              }\n              else {\n                  {\n                      warn(`injected property \"${key}\" is a ref and will be auto-unwrapped ` +\n                          `and no longer needs \\`.value\\` in the next minor release. ` +\n                          `To opt-in to the new behavior now, ` +\n                          `set \\`app.config.unwrapInjectedRef = true\\` (this config is ` +\n                          `temporary and will not be needed in the future.)`);\n                  }\n                  ctx[key] = injected;\n              }\n          }\n          else {\n              ctx[key] = injected;\n          }\n          {\n              checkDuplicateProperties(\"Inject\" /* OptionTypes.INJECT */, key);\n          }\n      }\n  }\n  function callHook$1(hook, instance, type) {\n      callWithAsyncErrorHandling(isArray(hook)\n          ? hook.map(h => h.bind(instance.proxy))\n          : hook.bind(instance.proxy), instance, type);\n  }\n  function createWatcher(raw, ctx, publicThis, key) {\n      const getter = key.includes('.')\n          ? createPathGetter(publicThis, key)\n          : () => publicThis[key];\n      if (isString(raw)) {\n          const handler = ctx[raw];\n          if (isFunction(handler)) {\n              watch(getter, handler);\n          }\n          else {\n              warn(`Invalid watch handler specified by key \"${raw}\"`, handler);\n          }\n      }\n      else if (isFunction(raw)) {\n          watch(getter, raw.bind(publicThis));\n      }\n      else if (isObject(raw)) {\n          if (isArray(raw)) {\n              raw.forEach(r => createWatcher(r, ctx, publicThis, key));\n          }\n          else {\n              const handler = isFunction(raw.handler)\n                  ? raw.handler.bind(publicThis)\n                  : ctx[raw.handler];\n              if (isFunction(handler)) {\n                  watch(getter, handler, raw);\n              }\n              else {\n                  warn(`Invalid watch handler specified by key \"${raw.handler}\"`, handler);\n              }\n          }\n      }\n      else {\n          warn(`Invalid watch option: \"${key}\"`, raw);\n      }\n  }\n  /**\n   * Resolve merged options and cache it on the component.\n   * This is done only once per-component since the merging does not involve\n   * instances.\n   */\n  function resolveMergedOptions(instance) {\n      const base = instance.type;\n      const { mixins, extends: extendsOptions } = base;\n      const { mixins: globalMixins, optionsCache: cache, config: { optionMergeStrategies } } = instance.appContext;\n      const cached = cache.get(base);\n      let resolved;\n      if (cached) {\n          resolved = cached;\n      }\n      else if (!globalMixins.length && !mixins && !extendsOptions) {\n          {\n              resolved = base;\n          }\n      }\n      else {\n          resolved = {};\n          if (globalMixins.length) {\n              globalMixins.forEach(m => mergeOptions(resolved, m, optionMergeStrategies, true));\n          }\n          mergeOptions(resolved, base, optionMergeStrategies);\n      }\n      if (isObject(base)) {\n          cache.set(base, resolved);\n      }\n      return resolved;\n  }\n  function mergeOptions(to, from, strats, asMixin = false) {\n      const { mixins, extends: extendsOptions } = from;\n      if (extendsOptions) {\n          mergeOptions(to, extendsOptions, strats, true);\n      }\n      if (mixins) {\n          mixins.forEach((m) => mergeOptions(to, m, strats, true));\n      }\n      for (const key in from) {\n          if (asMixin && key === 'expose') {\n              warn(`\"expose\" option is ignored when declared in mixins or extends. ` +\n                      `It should only be declared in the base component itself.`);\n          }\n          else {\n              const strat = internalOptionMergeStrats[key] || (strats && strats[key]);\n              to[key] = strat ? strat(to[key], from[key]) : from[key];\n          }\n      }\n      return to;\n  }\n  const internalOptionMergeStrats = {\n      data: mergeDataFn,\n      props: mergeObjectOptions,\n      emits: mergeObjectOptions,\n      // objects\n      methods: mergeObjectOptions,\n      computed: mergeObjectOptions,\n      // lifecycle\n      beforeCreate: mergeAsArray,\n      created: mergeAsArray,\n      beforeMount: mergeAsArray,\n      mounted: mergeAsArray,\n      beforeUpdate: mergeAsArray,\n      updated: mergeAsArray,\n      beforeDestroy: mergeAsArray,\n      beforeUnmount: mergeAsArray,\n      destroyed: mergeAsArray,\n      unmounted: mergeAsArray,\n      activated: mergeAsArray,\n      deactivated: mergeAsArray,\n      errorCaptured: mergeAsArray,\n      serverPrefetch: mergeAsArray,\n      // assets\n      components: mergeObjectOptions,\n      directives: mergeObjectOptions,\n      // watch\n      watch: mergeWatchOptions,\n      // provide / inject\n      provide: mergeDataFn,\n      inject: mergeInject\n  };\n  function mergeDataFn(to, from) {\n      if (!from) {\n          return to;\n      }\n      if (!to) {\n          return from;\n      }\n      return function mergedDataFn() {\n          return (extend)(isFunction(to) ? to.call(this, this) : to, isFunction(from) ? from.call(this, this) : from);\n      };\n  }\n  function mergeInject(to, from) {\n      return mergeObjectOptions(normalizeInject(to), normalizeInject(from));\n  }\n  function normalizeInject(raw) {\n      if (isArray(raw)) {\n          const res = {};\n          for (let i = 0; i < raw.length; i++) {\n              res[raw[i]] = raw[i];\n          }\n          return res;\n      }\n      return raw;\n  }\n  function mergeAsArray(to, from) {\n      return to ? [...new Set([].concat(to, from))] : from;\n  }\n  function mergeObjectOptions(to, from) {\n      return to ? extend(extend(Object.create(null), to), from) : from;\n  }\n  function mergeWatchOptions(to, from) {\n      if (!to)\n          return from;\n      if (!from)\n          return to;\n      const merged = extend(Object.create(null), to);\n      for (const key in from) {\n          merged[key] = mergeAsArray(to[key], from[key]);\n      }\n      return merged;\n  }\n\n  function initProps(instance, rawProps, isStateful, // result of bitwise flag comparison\n  isSSR = false) {\n      const props = {};\n      const attrs = {};\n      def(attrs, InternalObjectKey, 1);\n      instance.propsDefaults = Object.create(null);\n      setFullProps(instance, rawProps, props, attrs);\n      // ensure all declared prop keys are present\n      for (const key in instance.propsOptions[0]) {\n          if (!(key in props)) {\n              props[key] = undefined;\n          }\n      }\n      // validation\n      {\n          validateProps(rawProps || {}, props, instance);\n      }\n      if (isStateful) {\n          // stateful\n          instance.props = isSSR ? props : shallowReactive(props);\n      }\n      else {\n          if (!instance.type.props) {\n              // functional w/ optional props, props === attrs\n              instance.props = attrs;\n          }\n          else {\n              // functional w/ declared props\n              instance.props = props;\n          }\n      }\n      instance.attrs = attrs;\n  }\n  function isInHmrContext(instance) {\n      while (instance) {\n          if (instance.type.__hmrId)\n              return true;\n          instance = instance.parent;\n      }\n  }\n  function updateProps(instance, rawProps, rawPrevProps, optimized) {\n      const { props, attrs, vnode: { patchFlag } } = instance;\n      const rawCurrentProps = toRaw(props);\n      const [options] = instance.propsOptions;\n      let hasAttrsChanged = false;\n      if (\n      // always force full diff in dev\n      // - #1942 if hmr is enabled with sfc component\n      // - vite#872 non-sfc component used by sfc component\n      !(isInHmrContext(instance)) &&\n          (optimized || patchFlag > 0) &&\n          !(patchFlag & 16 /* PatchFlags.FULL_PROPS */)) {\n          if (patchFlag & 8 /* PatchFlags.PROPS */) {\n              // Compiler-generated props & no keys change, just set the updated\n              // the props.\n              const propsToUpdate = instance.vnode.dynamicProps;\n              for (let i = 0; i < propsToUpdate.length; i++) {\n                  let key = propsToUpdate[i];\n                  // skip if the prop key is a declared emit event listener\n                  if (isEmitListener(instance.emitsOptions, key)) {\n                      continue;\n                  }\n                  // PROPS flag guarantees rawProps to be non-null\n                  const value = rawProps[key];\n                  if (options) {\n                      // attr / props separation was done on init and will be consistent\n                      // in this code path, so just check if attrs have it.\n                      if (hasOwn(attrs, key)) {\n                          if (value !== attrs[key]) {\n                              attrs[key] = value;\n                              hasAttrsChanged = true;\n                          }\n                      }\n                      else {\n                          const camelizedKey = camelize(key);\n                          props[camelizedKey] = resolvePropValue(options, rawCurrentProps, camelizedKey, value, instance, false /* isAbsent */);\n                      }\n                  }\n                  else {\n                      if (value !== attrs[key]) {\n                          attrs[key] = value;\n                          hasAttrsChanged = true;\n                      }\n                  }\n              }\n          }\n      }\n      else {\n          // full props update.\n          if (setFullProps(instance, rawProps, props, attrs)) {\n              hasAttrsChanged = true;\n          }\n          // in case of dynamic props, check if we need to delete keys from\n          // the props object\n          let kebabKey;\n          for (const key in rawCurrentProps) {\n              if (!rawProps ||\n                  // for camelCase\n                  (!hasOwn(rawProps, key) &&\n                      // it's possible the original props was passed in as kebab-case\n                      // and converted to camelCase (#955)\n                      ((kebabKey = hyphenate(key)) === key || !hasOwn(rawProps, kebabKey)))) {\n                  if (options) {\n                      if (rawPrevProps &&\n                          // for camelCase\n                          (rawPrevProps[key] !== undefined ||\n                              // for kebab-case\n                              rawPrevProps[kebabKey] !== undefined)) {\n                          props[key] = resolvePropValue(options, rawCurrentProps, key, undefined, instance, true /* isAbsent */);\n                      }\n                  }\n                  else {\n                      delete props[key];\n                  }\n              }\n          }\n          // in the case of functional component w/o props declaration, props and\n          // attrs point to the same object so it should already have been updated.\n          if (attrs !== rawCurrentProps) {\n              for (const key in attrs) {\n                  if (!rawProps ||\n                      (!hasOwn(rawProps, key) &&\n                          (!false ))) {\n                      delete attrs[key];\n                      hasAttrsChanged = true;\n                  }\n              }\n          }\n      }\n      // trigger updates for $attrs in case it's used in component slots\n      if (hasAttrsChanged) {\n          trigger(instance, \"set\" /* TriggerOpTypes.SET */, '$attrs');\n      }\n      {\n          validateProps(rawProps || {}, props, instance);\n      }\n  }\n  function setFullProps(instance, rawProps, props, attrs) {\n      const [options, needCastKeys] = instance.propsOptions;\n      let hasAttrsChanged = false;\n      let rawCastValues;\n      if (rawProps) {\n          for (let key in rawProps) {\n              // key, ref are reserved and never passed down\n              if (isReservedProp(key)) {\n                  continue;\n              }\n              const value = rawProps[key];\n              // prop option names are camelized during normalization, so to support\n              // kebab -> camel conversion here we need to camelize the key.\n              let camelKey;\n              if (options && hasOwn(options, (camelKey = camelize(key)))) {\n                  if (!needCastKeys || !needCastKeys.includes(camelKey)) {\n                      props[camelKey] = value;\n                  }\n                  else {\n                      (rawCastValues || (rawCastValues = {}))[camelKey] = value;\n                  }\n              }\n              else if (!isEmitListener(instance.emitsOptions, key)) {\n                  if (!(key in attrs) || value !== attrs[key]) {\n                      attrs[key] = value;\n                      hasAttrsChanged = true;\n                  }\n              }\n          }\n      }\n      if (needCastKeys) {\n          const rawCurrentProps = toRaw(props);\n          const castValues = rawCastValues || EMPTY_OBJ;\n          for (let i = 0; i < needCastKeys.length; i++) {\n              const key = needCastKeys[i];\n              props[key] = resolvePropValue(options, rawCurrentProps, key, castValues[key], instance, !hasOwn(castValues, key));\n          }\n      }\n      return hasAttrsChanged;\n  }\n  function resolvePropValue(options, props, key, value, instance, isAbsent) {\n      const opt = options[key];\n      if (opt != null) {\n          const hasDefault = hasOwn(opt, 'default');\n          // default values\n          if (hasDefault && value === undefined) {\n              const defaultValue = opt.default;\n              if (opt.type !== Function && isFunction(defaultValue)) {\n                  const { propsDefaults } = instance;\n                  if (key in propsDefaults) {\n                      value = propsDefaults[key];\n                  }\n                  else {\n                      setCurrentInstance(instance);\n                      value = propsDefaults[key] = defaultValue.call(null, props);\n                      unsetCurrentInstance();\n                  }\n              }\n              else {\n                  value = defaultValue;\n              }\n          }\n          // boolean casting\n          if (opt[0 /* BooleanFlags.shouldCast */]) {\n              if (isAbsent && !hasDefault) {\n                  value = false;\n              }\n              else if (opt[1 /* BooleanFlags.shouldCastTrue */] &&\n                  (value === '' || value === hyphenate(key))) {\n                  value = true;\n              }\n          }\n      }\n      return value;\n  }\n  function normalizePropsOptions(comp, appContext, asMixin = false) {\n      const cache = appContext.propsCache;\n      const cached = cache.get(comp);\n      if (cached) {\n          return cached;\n      }\n      const raw = comp.props;\n      const normalized = {};\n      const needCastKeys = [];\n      // apply mixin/extends props\n      let hasExtends = false;\n      if (!isFunction(comp)) {\n          const extendProps = (raw) => {\n              hasExtends = true;\n              const [props, keys] = normalizePropsOptions(raw, appContext, true);\n              extend(normalized, props);\n              if (keys)\n                  needCastKeys.push(...keys);\n          };\n          if (!asMixin && appContext.mixins.length) {\n              appContext.mixins.forEach(extendProps);\n          }\n          if (comp.extends) {\n              extendProps(comp.extends);\n          }\n          if (comp.mixins) {\n              comp.mixins.forEach(extendProps);\n          }\n      }\n      if (!raw && !hasExtends) {\n          if (isObject(comp)) {\n              cache.set(comp, EMPTY_ARR);\n          }\n          return EMPTY_ARR;\n      }\n      if (isArray(raw)) {\n          for (let i = 0; i < raw.length; i++) {\n              if (!isString(raw[i])) {\n                  warn(`props must be strings when using array syntax.`, raw[i]);\n              }\n              const normalizedKey = camelize(raw[i]);\n              if (validatePropName(normalizedKey)) {\n                  normalized[normalizedKey] = EMPTY_OBJ;\n              }\n          }\n      }\n      else if (raw) {\n          if (!isObject(raw)) {\n              warn(`invalid props options`, raw);\n          }\n          for (const key in raw) {\n              const normalizedKey = camelize(key);\n              if (validatePropName(normalizedKey)) {\n                  const opt = raw[key];\n                  const prop = (normalized[normalizedKey] =\n                      isArray(opt) || isFunction(opt) ? { type: opt } : Object.assign({}, opt));\n                  if (prop) {\n                      const booleanIndex = getTypeIndex(Boolean, prop.type);\n                      const stringIndex = getTypeIndex(String, prop.type);\n                      prop[0 /* BooleanFlags.shouldCast */] = booleanIndex > -1;\n                      prop[1 /* BooleanFlags.shouldCastTrue */] =\n                          stringIndex < 0 || booleanIndex < stringIndex;\n                      // if the prop needs boolean casting or default value\n                      if (booleanIndex > -1 || hasOwn(prop, 'default')) {\n                          needCastKeys.push(normalizedKey);\n                      }\n                  }\n              }\n          }\n      }\n      const res = [normalized, needCastKeys];\n      if (isObject(comp)) {\n          cache.set(comp, res);\n      }\n      return res;\n  }\n  function validatePropName(key) {\n      if (key[0] !== '$') {\n          return true;\n      }\n      else {\n          warn(`Invalid prop name: \"${key}\" is a reserved property.`);\n      }\n      return false;\n  }\n  // use function string name to check type constructors\n  // so that it works across vms / iframes.\n  function getType(ctor) {\n      const match = ctor && ctor.toString().match(/^\\s*(function|class) (\\w+)/);\n      return match ? match[2] : ctor === null ? 'null' : '';\n  }\n  function isSameType(a, b) {\n      return getType(a) === getType(b);\n  }\n  function getTypeIndex(type, expectedTypes) {\n      if (isArray(expectedTypes)) {\n          return expectedTypes.findIndex(t => isSameType(t, type));\n      }\n      else if (isFunction(expectedTypes)) {\n          return isSameType(expectedTypes, type) ? 0 : -1;\n      }\n      return -1;\n  }\n  /**\n   * dev only\n   */\n  function validateProps(rawProps, props, instance) {\n      const resolvedValues = toRaw(props);\n      const options = instance.propsOptions[0];\n      for (const key in options) {\n          let opt = options[key];\n          if (opt == null)\n              continue;\n          validateProp(key, resolvedValues[key], opt, !hasOwn(rawProps, key) && !hasOwn(rawProps, hyphenate(key)));\n      }\n  }\n  /**\n   * dev only\n   */\n  function validateProp(name, value, prop, isAbsent) {\n      const { type, required, validator } = prop;\n      // required!\n      if (required && isAbsent) {\n          warn('Missing required prop: \"' + name + '\"');\n          return;\n      }\n      // missing but optional\n      if (value == null && !prop.required) {\n          return;\n      }\n      // type check\n      if (type != null && type !== true) {\n          let isValid = false;\n          const types = isArray(type) ? type : [type];\n          const expectedTypes = [];\n          // value is valid as long as one of the specified types match\n          for (let i = 0; i < types.length && !isValid; i++) {\n              const { valid, expectedType } = assertType(value, types[i]);\n              expectedTypes.push(expectedType || '');\n              isValid = valid;\n          }\n          if (!isValid) {\n              warn(getInvalidTypeMessage(name, value, expectedTypes));\n              return;\n          }\n      }\n      // custom validator\n      if (validator && !validator(value)) {\n          warn('Invalid prop: custom validator check failed for prop \"' + name + '\".');\n      }\n  }\n  const isSimpleType = /*#__PURE__*/ makeMap('String,Number,Boolean,Function,Symbol,BigInt');\n  /**\n   * dev only\n   */\n  function assertType(value, type) {\n      let valid;\n      const expectedType = getType(type);\n      if (isSimpleType(expectedType)) {\n          const t = typeof value;\n          valid = t === expectedType.toLowerCase();\n          // for primitive wrapper objects\n          if (!valid && t === 'object') {\n              valid = value instanceof type;\n          }\n      }\n      else if (expectedType === 'Object') {\n          valid = isObject(value);\n      }\n      else if (expectedType === 'Array') {\n          valid = isArray(value);\n      }\n      else if (expectedType === 'null') {\n          valid = value === null;\n      }\n      else {\n          valid = value instanceof type;\n      }\n      return {\n          valid,\n          expectedType\n      };\n  }\n  /**\n   * dev only\n   */\n  function getInvalidTypeMessage(name, value, expectedTypes) {\n      let message = `Invalid prop: type check failed for prop \"${name}\".` +\n          ` Expected ${expectedTypes.map(capitalize).join(' | ')}`;\n      const expectedType = expectedTypes[0];\n      const receivedType = toRawType(value);\n      const expectedValue = styleValue(value, expectedType);\n      const receivedValue = styleValue(value, receivedType);\n      // check if we need to specify expected value\n      if (expectedTypes.length === 1 &&\n          isExplicable(expectedType) &&\n          !isBoolean(expectedType, receivedType)) {\n          message += ` with value ${expectedValue}`;\n      }\n      message += `, got ${receivedType} `;\n      // check if we need to specify received value\n      if (isExplicable(receivedType)) {\n          message += `with value ${receivedValue}.`;\n      }\n      return message;\n  }\n  /**\n   * dev only\n   */\n  function styleValue(value, type) {\n      if (type === 'String') {\n          return `\"${value}\"`;\n      }\n      else if (type === 'Number') {\n          return `${Number(value)}`;\n      }\n      else {\n          return `${value}`;\n      }\n  }\n  /**\n   * dev only\n   */\n  function isExplicable(type) {\n      const explicitTypes = ['string', 'number', 'boolean'];\n      return explicitTypes.some(elem => type.toLowerCase() === elem);\n  }\n  /**\n   * dev only\n   */\n  function isBoolean(...args) {\n      return args.some(elem => elem.toLowerCase() === 'boolean');\n  }\n\n  const isInternalKey = (key) => key[0] === '_' || key === '$stable';\n  const normalizeSlotValue = (value) => isArray(value)\n      ? value.map(normalizeVNode)\n      : [normalizeVNode(value)];\n  const normalizeSlot = (key, rawSlot, ctx) => {\n      if (rawSlot._n) {\n          // already normalized - #5353\n          return rawSlot;\n      }\n      const normalized = withCtx((...args) => {\n          if (true && currentInstance) {\n              warn(`Slot \"${key}\" invoked outside of the render function: ` +\n                  `this will not track dependencies used in the slot. ` +\n                  `Invoke the slot function inside the render function instead.`);\n          }\n          return normalizeSlotValue(rawSlot(...args));\n      }, ctx);\n      normalized._c = false;\n      return normalized;\n  };\n  const normalizeObjectSlots = (rawSlots, slots, instance) => {\n      const ctx = rawSlots._ctx;\n      for (const key in rawSlots) {\n          if (isInternalKey(key))\n              continue;\n          const value = rawSlots[key];\n          if (isFunction(value)) {\n              slots[key] = normalizeSlot(key, value, ctx);\n          }\n          else if (value != null) {\n              {\n                  warn(`Non-function value encountered for slot \"${key}\". ` +\n                      `Prefer function slots for better performance.`);\n              }\n              const normalized = normalizeSlotValue(value);\n              slots[key] = () => normalized;\n          }\n      }\n  };\n  const normalizeVNodeSlots = (instance, children) => {\n      if (!isKeepAlive(instance.vnode) &&\n          !(false )) {\n          warn(`Non-function value encountered for default slot. ` +\n              `Prefer function slots for better performance.`);\n      }\n      const normalized = normalizeSlotValue(children);\n      instance.slots.default = () => normalized;\n  };\n  const initSlots = (instance, children) => {\n      if (instance.vnode.shapeFlag & 32 /* ShapeFlags.SLOTS_CHILDREN */) {\n          const type = children._;\n          if (type) {\n              // users can get the shallow readonly version of the slots object through `this.$slots`,\n              // we should avoid the proxy object polluting the slots of the internal instance\n              instance.slots = toRaw(children);\n              // make compiler marker non-enumerable\n              def(children, '_', type);\n          }\n          else {\n              normalizeObjectSlots(children, (instance.slots = {}));\n          }\n      }\n      else {\n          instance.slots = {};\n          if (children) {\n              normalizeVNodeSlots(instance, children);\n          }\n      }\n      def(instance.slots, InternalObjectKey, 1);\n  };\n  const updateSlots = (instance, children, optimized) => {\n      const { vnode, slots } = instance;\n      let needDeletionCheck = true;\n      let deletionComparisonTarget = EMPTY_OBJ;\n      if (vnode.shapeFlag & 32 /* ShapeFlags.SLOTS_CHILDREN */) {\n          const type = children._;\n          if (type) {\n              // compiled slots.\n              if (isHmrUpdating) {\n                  // Parent was HMR updated so slot content may have changed.\n                  // force update slots and mark instance for hmr as well\n                  extend(slots, children);\n              }\n              else if (optimized && type === 1 /* SlotFlags.STABLE */) {\n                  // compiled AND stable.\n                  // no need to update, and skip stale slots removal.\n                  needDeletionCheck = false;\n              }\n              else {\n                  // compiled but dynamic (v-if/v-for on slots) - update slots, but skip\n                  // normalization.\n                  extend(slots, children);\n                  // #2893\n                  // when rendering the optimized slots by manually written render function,\n                  // we need to delete the `slots._` flag if necessary to make subsequent updates reliable,\n                  // i.e. let the `renderSlot` create the bailed Fragment\n                  if (!optimized && type === 1 /* SlotFlags.STABLE */) {\n                      delete slots._;\n                  }\n              }\n          }\n          else {\n              needDeletionCheck = !children.$stable;\n              normalizeObjectSlots(children, slots);\n          }\n          deletionComparisonTarget = children;\n      }\n      else if (children) {\n          // non slot object children (direct value) passed to a component\n          normalizeVNodeSlots(instance, children);\n          deletionComparisonTarget = { default: 1 };\n      }\n      // delete stale slots\n      if (needDeletionCheck) {\n          for (const key in slots) {\n              if (!isInternalKey(key) && !(key in deletionComparisonTarget)) {\n                  delete slots[key];\n              }\n          }\n      }\n  };\n\n  function createAppContext() {\n      return {\n          app: null,\n          config: {\n              isNativeTag: NO,\n              performance: false,\n              globalProperties: {},\n              optionMergeStrategies: {},\n              errorHandler: undefined,\n              warnHandler: undefined,\n              compilerOptions: {}\n          },\n          mixins: [],\n          components: {},\n          directives: {},\n          provides: Object.create(null),\n          optionsCache: new WeakMap(),\n          propsCache: new WeakMap(),\n          emitsCache: new WeakMap()\n      };\n  }\n  let uid$1 = 0;\n  function createAppAPI(render, hydrate) {\n      return function createApp(rootComponent, rootProps = null) {\n          if (!isFunction(rootComponent)) {\n              rootComponent = Object.assign({}, rootComponent);\n          }\n          if (rootProps != null && !isObject(rootProps)) {\n              warn(`root props passed to app.mount() must be an object.`);\n              rootProps = null;\n          }\n          const context = createAppContext();\n          const installedPlugins = new Set();\n          let isMounted = false;\n          const app = (context.app = {\n              _uid: uid$1++,\n              _component: rootComponent,\n              _props: rootProps,\n              _container: null,\n              _context: context,\n              _instance: null,\n              version,\n              get config() {\n                  return context.config;\n              },\n              set config(v) {\n                  {\n                      warn(`app.config cannot be replaced. Modify individual options instead.`);\n                  }\n              },\n              use(plugin, ...options) {\n                  if (installedPlugins.has(plugin)) {\n                      warn(`Plugin has already been applied to target app.`);\n                  }\n                  else if (plugin && isFunction(plugin.install)) {\n                      installedPlugins.add(plugin);\n                      plugin.install(app, ...options);\n                  }\n                  else if (isFunction(plugin)) {\n                      installedPlugins.add(plugin);\n                      plugin(app, ...options);\n                  }\n                  else {\n                      warn(`A plugin must either be a function or an object with an \"install\" ` +\n                          `function.`);\n                  }\n                  return app;\n              },\n              mixin(mixin) {\n                  {\n                      if (!context.mixins.includes(mixin)) {\n                          context.mixins.push(mixin);\n                      }\n                      else {\n                          warn('Mixin has already been applied to target app' +\n                              (mixin.name ? `: ${mixin.name}` : ''));\n                      }\n                  }\n                  return app;\n              },\n              component(name, component) {\n                  {\n                      validateComponentName(name, context.config);\n                  }\n                  if (!component) {\n                      return context.components[name];\n                  }\n                  if (context.components[name]) {\n                      warn(`Component \"${name}\" has already been registered in target app.`);\n                  }\n                  context.components[name] = component;\n                  return app;\n              },\n              directive(name, directive) {\n                  {\n                      validateDirectiveName(name);\n                  }\n                  if (!directive) {\n                      return context.directives[name];\n                  }\n                  if (context.directives[name]) {\n                      warn(`Directive \"${name}\" has already been registered in target app.`);\n                  }\n                  context.directives[name] = directive;\n                  return app;\n              },\n              mount(rootContainer, isHydrate, isSVG) {\n                  if (!isMounted) {\n                      // #5571\n                      if (rootContainer.__vue_app__) {\n                          warn(`There is already an app instance mounted on the host container.\\n` +\n                              ` If you want to mount another app on the same host container,` +\n                              ` you need to unmount the previous app by calling \\`app.unmount()\\` first.`);\n                      }\n                      const vnode = createVNode(rootComponent, rootProps);\n                      // store app context on the root VNode.\n                      // this will be set on the root instance on initial mount.\n                      vnode.appContext = context;\n                      // HMR root reload\n                      {\n                          context.reload = () => {\n                              render(cloneVNode(vnode), rootContainer, isSVG);\n                          };\n                      }\n                      if (isHydrate && hydrate) {\n                          hydrate(vnode, rootContainer);\n                      }\n                      else {\n                          render(vnode, rootContainer, isSVG);\n                      }\n                      isMounted = true;\n                      app._container = rootContainer;\n                      rootContainer.__vue_app__ = app;\n                      {\n                          app._instance = vnode.component;\n                          devtoolsInitApp(app, version);\n                      }\n                      return getExposeProxy(vnode.component) || vnode.component.proxy;\n                  }\n                  else {\n                      warn(`App has already been mounted.\\n` +\n                          `If you want to remount the same app, move your app creation logic ` +\n                          `into a factory function and create fresh app instances for each ` +\n                          `mount - e.g. \\`const createMyApp = () => createApp(App)\\``);\n                  }\n              },\n              unmount() {\n                  if (isMounted) {\n                      render(null, app._container);\n                      {\n                          app._instance = null;\n                          devtoolsUnmountApp(app);\n                      }\n                      delete app._container.__vue_app__;\n                  }\n                  else {\n                      warn(`Cannot unmount an app that is not mounted.`);\n                  }\n              },\n              provide(key, value) {\n                  if (key in context.provides) {\n                      warn(`App already provides property with key \"${String(key)}\". ` +\n                          `It will be overwritten with the new value.`);\n                  }\n                  context.provides[key] = value;\n                  return app;\n              }\n          });\n          return app;\n      };\n  }\n\n  /**\n   * Function for handling a template ref\n   */\n  function setRef(rawRef, oldRawRef, parentSuspense, vnode, isUnmount = false) {\n      if (isArray(rawRef)) {\n          rawRef.forEach((r, i) => setRef(r, oldRawRef && (isArray(oldRawRef) ? oldRawRef[i] : oldRawRef), parentSuspense, vnode, isUnmount));\n          return;\n      }\n      if (isAsyncWrapper(vnode) && !isUnmount) {\n          // when mounting async components, nothing needs to be done,\n          // because the template ref is forwarded to inner component\n          return;\n      }\n      const refValue = vnode.shapeFlag & 4 /* ShapeFlags.STATEFUL_COMPONENT */\n          ? getExposeProxy(vnode.component) || vnode.component.proxy\n          : vnode.el;\n      const value = isUnmount ? null : refValue;\n      const { i: owner, r: ref } = rawRef;\n      if (!owner) {\n          warn(`Missing ref owner context. ref cannot be used on hoisted vnodes. ` +\n              `A vnode with ref must be created inside the render function.`);\n          return;\n      }\n      const oldRef = oldRawRef && oldRawRef.r;\n      const refs = owner.refs === EMPTY_OBJ ? (owner.refs = {}) : owner.refs;\n      const setupState = owner.setupState;\n      // dynamic ref changed. unset old ref\n      if (oldRef != null && oldRef !== ref) {\n          if (isString(oldRef)) {\n              refs[oldRef] = null;\n              if (hasOwn(setupState, oldRef)) {\n                  setupState[oldRef] = null;\n              }\n          }\n          else if (isRef(oldRef)) {\n              oldRef.value = null;\n          }\n      }\n      if (isFunction(ref)) {\n          callWithErrorHandling(ref, owner, 12 /* ErrorCodes.FUNCTION_REF */, [value, refs]);\n      }\n      else {\n          const _isString = isString(ref);\n          const _isRef = isRef(ref);\n          if (_isString || _isRef) {\n              const doSet = () => {\n                  if (rawRef.f) {\n                      const existing = _isString\n                          ? hasOwn(setupState, ref)\n                              ? setupState[ref]\n                              : refs[ref]\n                          : ref.value;\n                      if (isUnmount) {\n                          isArray(existing) && remove(existing, refValue);\n                      }\n                      else {\n                          if (!isArray(existing)) {\n                              if (_isString) {\n                                  refs[ref] = [refValue];\n                                  if (hasOwn(setupState, ref)) {\n                                      setupState[ref] = refs[ref];\n                                  }\n                              }\n                              else {\n                                  ref.value = [refValue];\n                                  if (rawRef.k)\n                                      refs[rawRef.k] = ref.value;\n                              }\n                          }\n                          else if (!existing.includes(refValue)) {\n                              existing.push(refValue);\n                          }\n                      }\n                  }\n                  else if (_isString) {\n                      refs[ref] = value;\n                      if (hasOwn(setupState, ref)) {\n                          setupState[ref] = value;\n                      }\n                  }\n                  else if (_isRef) {\n                      ref.value = value;\n                      if (rawRef.k)\n                          refs[rawRef.k] = value;\n                  }\n                  else {\n                      warn('Invalid template ref type:', ref, `(${typeof ref})`);\n                  }\n              };\n              if (value) {\n                  doSet.id = -1;\n                  queuePostRenderEffect(doSet, parentSuspense);\n              }\n              else {\n                  doSet();\n              }\n          }\n          else {\n              warn('Invalid template ref type:', ref, `(${typeof ref})`);\n          }\n      }\n  }\n\n  let hasMismatch = false;\n  const isSVGContainer = (container) => /svg/.test(container.namespaceURI) && container.tagName !== 'foreignObject';\n  const isComment = (node) => node.nodeType === 8 /* DOMNodeTypes.COMMENT */;\n  // Note: hydration is DOM-specific\n  // But we have to place it in core due to tight coupling with core - splitting\n  // it out creates a ton of unnecessary complexity.\n  // Hydration also depends on some renderer internal logic which needs to be\n  // passed in via arguments.\n  function createHydrationFunctions(rendererInternals) {\n      const { mt: mountComponent, p: patch, o: { patchProp, createText, nextSibling, parentNode, remove, insert, createComment } } = rendererInternals;\n      const hydrate = (vnode, container) => {\n          if (!container.hasChildNodes()) {\n              warn(`Attempting to hydrate existing markup but container is empty. ` +\n                      `Performing full mount instead.`);\n              patch(null, vnode, container);\n              flushPostFlushCbs();\n              container._vnode = vnode;\n              return;\n          }\n          hasMismatch = false;\n          hydrateNode(container.firstChild, vnode, null, null, null);\n          flushPostFlushCbs();\n          container._vnode = vnode;\n          if (hasMismatch && !false) {\n              // this error should show up in production\n              console.error(`Hydration completed but contains mismatches.`);\n          }\n      };\n      const hydrateNode = (node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized = false) => {\n          const isFragmentStart = isComment(node) && node.data === '[';\n          const onMismatch = () => handleMismatch(node, vnode, parentComponent, parentSuspense, slotScopeIds, isFragmentStart);\n          const { type, ref, shapeFlag, patchFlag } = vnode;\n          let domType = node.nodeType;\n          vnode.el = node;\n          if (patchFlag === -2 /* PatchFlags.BAIL */) {\n              optimized = false;\n              vnode.dynamicChildren = null;\n          }\n          let nextNode = null;\n          switch (type) {\n              case Text:\n                  if (domType !== 3 /* DOMNodeTypes.TEXT */) {\n                      // #5728 empty text node inside a slot can cause hydration failure\n                      // because the server rendered HTML won't contain a text node\n                      if (vnode.children === '') {\n                          insert((vnode.el = createText('')), parentNode(node), node);\n                          nextNode = node;\n                      }\n                      else {\n                          nextNode = onMismatch();\n                      }\n                  }\n                  else {\n                      if (node.data !== vnode.children) {\n                          hasMismatch = true;\n                          warn(`Hydration text mismatch:` +\n                                  `\\n- Client: ${JSON.stringify(node.data)}` +\n                                  `\\n- Server: ${JSON.stringify(vnode.children)}`);\n                          node.data = vnode.children;\n                      }\n                      nextNode = nextSibling(node);\n                  }\n                  break;\n              case Comment:\n                  if (domType !== 8 /* DOMNodeTypes.COMMENT */ || isFragmentStart) {\n                      nextNode = onMismatch();\n                  }\n                  else {\n                      nextNode = nextSibling(node);\n                  }\n                  break;\n              case Static:\n                  if (isFragmentStart) {\n                      // entire template is static but SSRed as a fragment\n                      node = nextSibling(node);\n                      domType = node.nodeType;\n                  }\n                  if (domType === 1 /* DOMNodeTypes.ELEMENT */ || domType === 3 /* DOMNodeTypes.TEXT */) {\n                      // determine anchor, adopt content\n                      nextNode = node;\n                      // if the static vnode has its content stripped during build,\n                      // adopt it from the server-rendered HTML.\n                      const needToAdoptContent = !vnode.children.length;\n                      for (let i = 0; i < vnode.staticCount; i++) {\n                          if (needToAdoptContent)\n                              vnode.children +=\n                                  nextNode.nodeType === 1 /* DOMNodeTypes.ELEMENT */\n                                      ? nextNode.outerHTML\n                                      : nextNode.data;\n                          if (i === vnode.staticCount - 1) {\n                              vnode.anchor = nextNode;\n                          }\n                          nextNode = nextSibling(nextNode);\n                      }\n                      return isFragmentStart ? nextSibling(nextNode) : nextNode;\n                  }\n                  else {\n                      onMismatch();\n                  }\n                  break;\n              case Fragment:\n                  if (!isFragmentStart) {\n                      nextNode = onMismatch();\n                  }\n                  else {\n                      nextNode = hydrateFragment(node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized);\n                  }\n                  break;\n              default:\n                  if (shapeFlag & 1 /* ShapeFlags.ELEMENT */) {\n                      if (domType !== 1 /* DOMNodeTypes.ELEMENT */ ||\n                          vnode.type.toLowerCase() !==\n                              node.tagName.toLowerCase()) {\n                          nextNode = onMismatch();\n                      }\n                      else {\n                          nextNode = hydrateElement(node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized);\n                      }\n                  }\n                  else if (shapeFlag & 6 /* ShapeFlags.COMPONENT */) {\n                      // when setting up the render effect, if the initial vnode already\n                      // has .el set, the component will perform hydration instead of mount\n                      // on its sub-tree.\n                      vnode.slotScopeIds = slotScopeIds;\n                      const container = parentNode(node);\n                      mountComponent(vnode, container, null, parentComponent, parentSuspense, isSVGContainer(container), optimized);\n                      // component may be async, so in the case of fragments we cannot rely\n                      // on component's rendered output to determine the end of the fragment\n                      // instead, we do a lookahead to find the end anchor node.\n                      nextNode = isFragmentStart\n                          ? locateClosingAsyncAnchor(node)\n                          : nextSibling(node);\n                      // #4293 teleport as component root\n                      if (nextNode &&\n                          isComment(nextNode) &&\n                          nextNode.data === 'teleport end') {\n                          nextNode = nextSibling(nextNode);\n                      }\n                      // #3787\n                      // if component is async, it may get moved / unmounted before its\n                      // inner component is loaded, so we need to give it a placeholder\n                      // vnode that matches its adopted DOM.\n                      if (isAsyncWrapper(vnode)) {\n                          let subTree;\n                          if (isFragmentStart) {\n                              subTree = createVNode(Fragment);\n                              subTree.anchor = nextNode\n                                  ? nextNode.previousSibling\n                                  : container.lastChild;\n                          }\n                          else {\n                              subTree =\n                                  node.nodeType === 3 ? createTextVNode('') : createVNode('div');\n                          }\n                          subTree.el = node;\n                          vnode.component.subTree = subTree;\n                      }\n                  }\n                  else if (shapeFlag & 64 /* ShapeFlags.TELEPORT */) {\n                      if (domType !== 8 /* DOMNodeTypes.COMMENT */) {\n                          nextNode = onMismatch();\n                      }\n                      else {\n                          nextNode = vnode.type.hydrate(node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized, rendererInternals, hydrateChildren);\n                      }\n                  }\n                  else if (shapeFlag & 128 /* ShapeFlags.SUSPENSE */) {\n                      nextNode = vnode.type.hydrate(node, vnode, parentComponent, parentSuspense, isSVGContainer(parentNode(node)), slotScopeIds, optimized, rendererInternals, hydrateNode);\n                  }\n                  else {\n                      warn('Invalid HostVNode type:', type, `(${typeof type})`);\n                  }\n          }\n          if (ref != null) {\n              setRef(ref, null, parentSuspense, vnode);\n          }\n          return nextNode;\n      };\n      const hydrateElement = (el, vnode, parentComponent, parentSuspense, slotScopeIds, optimized) => {\n          optimized = optimized || !!vnode.dynamicChildren;\n          const { type, props, patchFlag, shapeFlag, dirs } = vnode;\n          // #4006 for form elements with non-string v-model value bindings\n          // e.g. <option :value=\"obj\">, <input type=\"checkbox\" :true-value=\"1\">\n          const forcePatchValue = (type === 'input' && dirs) || type === 'option';\n          // skip props & children if this is hoisted static nodes\n          // #5405 in dev, always hydrate children for HMR\n          {\n              if (dirs) {\n                  invokeDirectiveHook(vnode, null, parentComponent, 'created');\n              }\n              // props\n              if (props) {\n                  if (forcePatchValue ||\n                      !optimized ||\n                      patchFlag & (16 /* PatchFlags.FULL_PROPS */ | 32 /* PatchFlags.HYDRATE_EVENTS */)) {\n                      for (const key in props) {\n                          if ((forcePatchValue && key.endsWith('value')) ||\n                              (isOn(key) && !isReservedProp(key))) {\n                              patchProp(el, key, null, props[key], false, undefined, parentComponent);\n                          }\n                      }\n                  }\n                  else if (props.onClick) {\n                      // Fast path for click listeners (which is most often) to avoid\n                      // iterating through props.\n                      patchProp(el, 'onClick', null, props.onClick, false, undefined, parentComponent);\n                  }\n              }\n              // vnode / directive hooks\n              let vnodeHooks;\n              if ((vnodeHooks = props && props.onVnodeBeforeMount)) {\n                  invokeVNodeHook(vnodeHooks, parentComponent, vnode);\n              }\n              if (dirs) {\n                  invokeDirectiveHook(vnode, null, parentComponent, 'beforeMount');\n              }\n              if ((vnodeHooks = props && props.onVnodeMounted) || dirs) {\n                  queueEffectWithSuspense(() => {\n                      vnodeHooks && invokeVNodeHook(vnodeHooks, parentComponent, vnode);\n                      dirs && invokeDirectiveHook(vnode, null, parentComponent, 'mounted');\n                  }, parentSuspense);\n              }\n              // children\n              if (shapeFlag & 16 /* ShapeFlags.ARRAY_CHILDREN */ &&\n                  // skip if element has innerHTML / textContent\n                  !(props && (props.innerHTML || props.textContent))) {\n                  let next = hydrateChildren(el.firstChild, vnode, el, parentComponent, parentSuspense, slotScopeIds, optimized);\n                  let hasWarned = false;\n                  while (next) {\n                      hasMismatch = true;\n                      if (!hasWarned) {\n                          warn(`Hydration children mismatch in <${vnode.type}>: ` +\n                              `server rendered element contains more child nodes than client vdom.`);\n                          hasWarned = true;\n                      }\n                      // The SSRed DOM contains more nodes than it should. Remove them.\n                      const cur = next;\n                      next = next.nextSibling;\n                      remove(cur);\n                  }\n              }\n              else if (shapeFlag & 8 /* ShapeFlags.TEXT_CHILDREN */) {\n                  if (el.textContent !== vnode.children) {\n                      hasMismatch = true;\n                      warn(`Hydration text content mismatch in <${vnode.type}>:\\n` +\n                              `- Client: ${el.textContent}\\n` +\n                              `- Server: ${vnode.children}`);\n                      el.textContent = vnode.children;\n                  }\n              }\n          }\n          return el.nextSibling;\n      };\n      const hydrateChildren = (node, parentVNode, container, parentComponent, parentSuspense, slotScopeIds, optimized) => {\n          optimized = optimized || !!parentVNode.dynamicChildren;\n          const children = parentVNode.children;\n          const l = children.length;\n          let hasWarned = false;\n          for (let i = 0; i < l; i++) {\n              const vnode = optimized\n                  ? children[i]\n                  : (children[i] = normalizeVNode(children[i]));\n              if (node) {\n                  node = hydrateNode(node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized);\n              }\n              else if (vnode.type === Text && !vnode.children) {\n                  continue;\n              }\n              else {\n                  hasMismatch = true;\n                  if (!hasWarned) {\n                      warn(`Hydration children mismatch in <${container.tagName.toLowerCase()}>: ` +\n                          `server rendered element contains fewer child nodes than client vdom.`);\n                      hasWarned = true;\n                  }\n                  // the SSRed DOM didn't contain enough nodes. Mount the missing ones.\n                  patch(null, vnode, container, null, parentComponent, parentSuspense, isSVGContainer(container), slotScopeIds);\n              }\n          }\n          return node;\n      };\n      const hydrateFragment = (node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized) => {\n          const { slotScopeIds: fragmentSlotScopeIds } = vnode;\n          if (fragmentSlotScopeIds) {\n              slotScopeIds = slotScopeIds\n                  ? slotScopeIds.concat(fragmentSlotScopeIds)\n                  : fragmentSlotScopeIds;\n          }\n          const container = parentNode(node);\n          const next = hydrateChildren(nextSibling(node), vnode, container, parentComponent, parentSuspense, slotScopeIds, optimized);\n          if (next && isComment(next) && next.data === ']') {\n              return nextSibling((vnode.anchor = next));\n          }\n          else {\n              // fragment didn't hydrate successfully, since we didn't get a end anchor\n              // back. This should have led to node/children mismatch warnings.\n              hasMismatch = true;\n              // since the anchor is missing, we need to create one and insert it\n              insert((vnode.anchor = createComment(`]`)), container, next);\n              return next;\n          }\n      };\n      const handleMismatch = (node, vnode, parentComponent, parentSuspense, slotScopeIds, isFragment) => {\n          hasMismatch = true;\n          warn(`Hydration node mismatch:\\n- Client vnode:`, vnode.type, `\\n- Server rendered DOM:`, node, node.nodeType === 3 /* DOMNodeTypes.TEXT */\n                  ? `(text)`\n                  : isComment(node) && node.data === '['\n                      ? `(start of fragment)`\n                      : ``);\n          vnode.el = null;\n          if (isFragment) {\n              // remove excessive fragment nodes\n              const end = locateClosingAsyncAnchor(node);\n              while (true) {\n                  const next = nextSibling(node);\n                  if (next && next !== end) {\n                      remove(next);\n                  }\n                  else {\n                      break;\n                  }\n              }\n          }\n          const next = nextSibling(node);\n          const container = parentNode(node);\n          remove(node);\n          patch(null, vnode, container, next, parentComponent, parentSuspense, isSVGContainer(container), slotScopeIds);\n          return next;\n      };\n      const locateClosingAsyncAnchor = (node) => {\n          let match = 0;\n          while (node) {\n              node = nextSibling(node);\n              if (node && isComment(node)) {\n                  if (node.data === '[')\n                      match++;\n                  if (node.data === ']') {\n                      if (match === 0) {\n                          return nextSibling(node);\n                      }\n                      else {\n                          match--;\n                      }\n                  }\n              }\n          }\n          return node;\n      };\n      return [hydrate, hydrateNode];\n  }\n\n  /* eslint-disable no-restricted-globals */\n  let supported;\n  let perf;\n  function startMeasure(instance, type) {\n      if (instance.appContext.config.performance && isSupported()) {\n          perf.mark(`vue-${type}-${instance.uid}`);\n      }\n      {\n          devtoolsPerfStart(instance, type, isSupported() ? perf.now() : Date.now());\n      }\n  }\n  function endMeasure(instance, type) {\n      if (instance.appContext.config.performance && isSupported()) {\n          const startTag = `vue-${type}-${instance.uid}`;\n          const endTag = startTag + `:end`;\n          perf.mark(endTag);\n          perf.measure(`<${formatComponentName(instance, instance.type)}> ${type}`, startTag, endTag);\n          perf.clearMarks(startTag);\n          perf.clearMarks(endTag);\n      }\n      {\n          devtoolsPerfEnd(instance, type, isSupported() ? perf.now() : Date.now());\n      }\n  }\n  function isSupported() {\n      if (supported !== undefined) {\n          return supported;\n      }\n      if (typeof window !== 'undefined' && window.performance) {\n          supported = true;\n          perf = window.performance;\n      }\n      else {\n          supported = false;\n      }\n      return supported;\n  }\n\n  const queuePostRenderEffect = queueEffectWithSuspense\n      ;\n  /**\n   * The createRenderer function accepts two generic arguments:\n   * HostNode and HostElement, corresponding to Node and Element types in the\n   * host environment. For example, for runtime-dom, HostNode would be the DOM\n   * `Node` interface and HostElement would be the DOM `Element` interface.\n   *\n   * Custom renderers can pass in the platform specific types like this:\n   *\n   * ``` js\n   * const { render, createApp } = createRenderer<Node, Element>({\n   *   patchProp,\n   *   ...nodeOps\n   * })\n   * ```\n   */\n  function createRenderer(options) {\n      return baseCreateRenderer(options);\n  }\n  // Separate API for creating hydration-enabled renderer.\n  // Hydration logic is only used when calling this function, making it\n  // tree-shakable.\n  function createHydrationRenderer(options) {\n      return baseCreateRenderer(options, createHydrationFunctions);\n  }\n  // implementation\n  function baseCreateRenderer(options, createHydrationFns) {\n      const target = getGlobalThis();\n      target.__VUE__ = true;\n      {\n          setDevtoolsHook(target.__VUE_DEVTOOLS_GLOBAL_HOOK__, target);\n      }\n      const { insert: hostInsert, remove: hostRemove, patchProp: hostPatchProp, createElement: hostCreateElement, createText: hostCreateText, createComment: hostCreateComment, setText: hostSetText, setElementText: hostSetElementText, parentNode: hostParentNode, nextSibling: hostNextSibling, setScopeId: hostSetScopeId = NOOP, insertStaticContent: hostInsertStaticContent } = options;\n      // Note: functions inside this closure should use `const xxx = () => {}`\n      // style in order to prevent being inlined by minifiers.\n      const patch = (n1, n2, container, anchor = null, parentComponent = null, parentSuspense = null, isSVG = false, slotScopeIds = null, optimized = isHmrUpdating ? false : !!n2.dynamicChildren) => {\n          if (n1 === n2) {\n              return;\n          }\n          // patching & not same type, unmount old tree\n          if (n1 && !isSameVNodeType(n1, n2)) {\n              anchor = getNextHostNode(n1);\n              unmount(n1, parentComponent, parentSuspense, true);\n              n1 = null;\n          }\n          if (n2.patchFlag === -2 /* PatchFlags.BAIL */) {\n              optimized = false;\n              n2.dynamicChildren = null;\n          }\n          const { type, ref, shapeFlag } = n2;\n          switch (type) {\n              case Text:\n                  processText(n1, n2, container, anchor);\n                  break;\n              case Comment:\n                  processCommentNode(n1, n2, container, anchor);\n                  break;\n              case Static:\n                  if (n1 == null) {\n                      mountStaticNode(n2, container, anchor, isSVG);\n                  }\n                  else {\n                      patchStaticNode(n1, n2, container, isSVG);\n                  }\n                  break;\n              case Fragment:\n                  processFragment(n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\n                  break;\n              default:\n                  if (shapeFlag & 1 /* ShapeFlags.ELEMENT */) {\n                      processElement(n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\n                  }\n                  else if (shapeFlag & 6 /* ShapeFlags.COMPONENT */) {\n                      processComponent(n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\n                  }\n                  else if (shapeFlag & 64 /* ShapeFlags.TELEPORT */) {\n                      type.process(n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized, internals);\n                  }\n                  else if (shapeFlag & 128 /* ShapeFlags.SUSPENSE */) {\n                      type.process(n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized, internals);\n                  }\n                  else {\n                      warn('Invalid VNode type:', type, `(${typeof type})`);\n                  }\n          }\n          // set ref\n          if (ref != null && parentComponent) {\n              setRef(ref, n1 && n1.ref, parentSuspense, n2 || n1, !n2);\n          }\n      };\n      const processText = (n1, n2, container, anchor) => {\n          if (n1 == null) {\n              hostInsert((n2.el = hostCreateText(n2.children)), container, anchor);\n          }\n          else {\n              const el = (n2.el = n1.el);\n              if (n2.children !== n1.children) {\n                  hostSetText(el, n2.children);\n              }\n          }\n      };\n      const processCommentNode = (n1, n2, container, anchor) => {\n          if (n1 == null) {\n              hostInsert((n2.el = hostCreateComment(n2.children || '')), container, anchor);\n          }\n          else {\n              // there's no support for dynamic comments\n              n2.el = n1.el;\n          }\n      };\n      const mountStaticNode = (n2, container, anchor, isSVG) => {\n          [n2.el, n2.anchor] = hostInsertStaticContent(n2.children, container, anchor, isSVG, n2.el, n2.anchor);\n      };\n      /**\n       * Dev / HMR only\n       */\n      const patchStaticNode = (n1, n2, container, isSVG) => {\n          // static nodes are only patched during dev for HMR\n          if (n2.children !== n1.children) {\n              const anchor = hostNextSibling(n1.anchor);\n              // remove existing\n              removeStaticNode(n1);\n              [n2.el, n2.anchor] = hostInsertStaticContent(n2.children, container, anchor, isSVG);\n          }\n          else {\n              n2.el = n1.el;\n              n2.anchor = n1.anchor;\n          }\n      };\n      const moveStaticNode = ({ el, anchor }, container, nextSibling) => {\n          let next;\n          while (el && el !== anchor) {\n              next = hostNextSibling(el);\n              hostInsert(el, container, nextSibling);\n              el = next;\n          }\n          hostInsert(anchor, container, nextSibling);\n      };\n      const removeStaticNode = ({ el, anchor }) => {\n          let next;\n          while (el && el !== anchor) {\n              next = hostNextSibling(el);\n              hostRemove(el);\n              el = next;\n          }\n          hostRemove(anchor);\n      };\n      const processElement = (n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized) => {\n          isSVG = isSVG || n2.type === 'svg';\n          if (n1 == null) {\n              mountElement(n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\n          }\n          else {\n              patchElement(n1, n2, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\n          }\n      };\n      const mountElement = (vnode, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized) => {\n          let el;\n          let vnodeHook;\n          const { type, props, shapeFlag, transition, dirs } = vnode;\n          el = vnode.el = hostCreateElement(vnode.type, isSVG, props && props.is, props);\n          // mount children first, since some props may rely on child content\n          // being already rendered, e.g. `<select value>`\n          if (shapeFlag & 8 /* ShapeFlags.TEXT_CHILDREN */) {\n              hostSetElementText(el, vnode.children);\n          }\n          else if (shapeFlag & 16 /* ShapeFlags.ARRAY_CHILDREN */) {\n              mountChildren(vnode.children, el, null, parentComponent, parentSuspense, isSVG && type !== 'foreignObject', slotScopeIds, optimized);\n          }\n          if (dirs) {\n              invokeDirectiveHook(vnode, null, parentComponent, 'created');\n          }\n          // scopeId\n          setScopeId(el, vnode, vnode.scopeId, slotScopeIds, parentComponent);\n          // props\n          if (props) {\n              for (const key in props) {\n                  if (key !== 'value' && !isReservedProp(key)) {\n                      hostPatchProp(el, key, null, props[key], isSVG, vnode.children, parentComponent, parentSuspense, unmountChildren);\n                  }\n              }\n              /**\n               * Special case for setting value on DOM elements:\n               * - it can be order-sensitive (e.g. should be set *after* min/max, #2325, #4024)\n               * - it needs to be forced (#1471)\n               * #2353 proposes adding another renderer option to configure this, but\n               * the properties affects are so finite it is worth special casing it\n               * here to reduce the complexity. (Special casing it also should not\n               * affect non-DOM renderers)\n               */\n              if ('value' in props) {\n                  hostPatchProp(el, 'value', null, props.value);\n              }\n              if ((vnodeHook = props.onVnodeBeforeMount)) {\n                  invokeVNodeHook(vnodeHook, parentComponent, vnode);\n              }\n          }\n          {\n              Object.defineProperty(el, '__vnode', {\n                  value: vnode,\n                  enumerable: false\n              });\n              Object.defineProperty(el, '__vueParentComponent', {\n                  value: parentComponent,\n                  enumerable: false\n              });\n          }\n          if (dirs) {\n              invokeDirectiveHook(vnode, null, parentComponent, 'beforeMount');\n          }\n          // #1583 For inside suspense + suspense not resolved case, enter hook should call when suspense resolved\n          // #1689 For inside suspense + suspense resolved case, just call it\n          const needCallTransitionHooks = (!parentSuspense || (parentSuspense && !parentSuspense.pendingBranch)) &&\n              transition &&\n              !transition.persisted;\n          if (needCallTransitionHooks) {\n              transition.beforeEnter(el);\n          }\n          hostInsert(el, container, anchor);\n          if ((vnodeHook = props && props.onVnodeMounted) ||\n              needCallTransitionHooks ||\n              dirs) {\n              queuePostRenderEffect(() => {\n                  vnodeHook && invokeVNodeHook(vnodeHook, parentComponent, vnode);\n                  needCallTransitionHooks && transition.enter(el);\n                  dirs && invokeDirectiveHook(vnode, null, parentComponent, 'mounted');\n              }, parentSuspense);\n          }\n      };\n      const setScopeId = (el, vnode, scopeId, slotScopeIds, parentComponent) => {\n          if (scopeId) {\n              hostSetScopeId(el, scopeId);\n          }\n          if (slotScopeIds) {\n              for (let i = 0; i < slotScopeIds.length; i++) {\n                  hostSetScopeId(el, slotScopeIds[i]);\n              }\n          }\n          if (parentComponent) {\n              let subTree = parentComponent.subTree;\n              if (subTree.patchFlag > 0 &&\n                  subTree.patchFlag & 2048 /* PatchFlags.DEV_ROOT_FRAGMENT */) {\n                  subTree =\n                      filterSingleRoot(subTree.children) || subTree;\n              }\n              if (vnode === subTree) {\n                  const parentVNode = parentComponent.vnode;\n                  setScopeId(el, parentVNode, parentVNode.scopeId, parentVNode.slotScopeIds, parentComponent.parent);\n              }\n          }\n      };\n      const mountChildren = (children, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized, start = 0) => {\n          for (let i = start; i < children.length; i++) {\n              const child = (children[i] = optimized\n                  ? cloneIfMounted(children[i])\n                  : normalizeVNode(children[i]));\n              patch(null, child, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\n          }\n      };\n      const patchElement = (n1, n2, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized) => {\n          const el = (n2.el = n1.el);\n          let { patchFlag, dynamicChildren, dirs } = n2;\n          // #1426 take the old vnode's patch flag into account since user may clone a\n          // compiler-generated vnode, which de-opts to FULL_PROPS\n          patchFlag |= n1.patchFlag & 16 /* PatchFlags.FULL_PROPS */;\n          const oldProps = n1.props || EMPTY_OBJ;\n          const newProps = n2.props || EMPTY_OBJ;\n          let vnodeHook;\n          // disable recurse in beforeUpdate hooks\n          parentComponent && toggleRecurse(parentComponent, false);\n          if ((vnodeHook = newProps.onVnodeBeforeUpdate)) {\n              invokeVNodeHook(vnodeHook, parentComponent, n2, n1);\n          }\n          if (dirs) {\n              invokeDirectiveHook(n2, n1, parentComponent, 'beforeUpdate');\n          }\n          parentComponent && toggleRecurse(parentComponent, true);\n          if (isHmrUpdating) {\n              // HMR updated, force full diff\n              patchFlag = 0;\n              optimized = false;\n              dynamicChildren = null;\n          }\n          const areChildrenSVG = isSVG && n2.type !== 'foreignObject';\n          if (dynamicChildren) {\n              patchBlockChildren(n1.dynamicChildren, dynamicChildren, el, parentComponent, parentSuspense, areChildrenSVG, slotScopeIds);\n              if (parentComponent && parentComponent.type.__hmrId) {\n                  traverseStaticChildren(n1, n2);\n              }\n          }\n          else if (!optimized) {\n              // full diff\n              patchChildren(n1, n2, el, null, parentComponent, parentSuspense, areChildrenSVG, slotScopeIds, false);\n          }\n          if (patchFlag > 0) {\n              // the presence of a patchFlag means this element's render code was\n              // generated by the compiler and can take the fast path.\n              // in this path old node and new node are guaranteed to have the same shape\n              // (i.e. at the exact same position in the source template)\n              if (patchFlag & 16 /* PatchFlags.FULL_PROPS */) {\n                  // element props contain dynamic keys, full diff needed\n                  patchProps(el, n2, oldProps, newProps, parentComponent, parentSuspense, isSVG);\n              }\n              else {\n                  // class\n                  // this flag is matched when the element has dynamic class bindings.\n                  if (patchFlag & 2 /* PatchFlags.CLASS */) {\n                      if (oldProps.class !== newProps.class) {\n                          hostPatchProp(el, 'class', null, newProps.class, isSVG);\n                      }\n                  }\n                  // style\n                  // this flag is matched when the element has dynamic style bindings\n                  if (patchFlag & 4 /* PatchFlags.STYLE */) {\n                      hostPatchProp(el, 'style', oldProps.style, newProps.style, isSVG);\n                  }\n                  // props\n                  // This flag is matched when the element has dynamic prop/attr bindings\n                  // other than class and style. The keys of dynamic prop/attrs are saved for\n                  // faster iteration.\n                  // Note dynamic keys like :[foo]=\"bar\" will cause this optimization to\n                  // bail out and go through a full diff because we need to unset the old key\n                  if (patchFlag & 8 /* PatchFlags.PROPS */) {\n                      // if the flag is present then dynamicProps must be non-null\n                      const propsToUpdate = n2.dynamicProps;\n                      for (let i = 0; i < propsToUpdate.length; i++) {\n                          const key = propsToUpdate[i];\n                          const prev = oldProps[key];\n                          const next = newProps[key];\n                          // #1471 force patch value\n                          if (next !== prev || key === 'value') {\n                              hostPatchProp(el, key, prev, next, isSVG, n1.children, parentComponent, parentSuspense, unmountChildren);\n                          }\n                      }\n                  }\n              }\n              // text\n              // This flag is matched when the element has only dynamic text children.\n              if (patchFlag & 1 /* PatchFlags.TEXT */) {\n                  if (n1.children !== n2.children) {\n                      hostSetElementText(el, n2.children);\n                  }\n              }\n          }\n          else if (!optimized && dynamicChildren == null) {\n              // unoptimized, full diff\n              patchProps(el, n2, oldProps, newProps, parentComponent, parentSuspense, isSVG);\n          }\n          if ((vnodeHook = newProps.onVnodeUpdated) || dirs) {\n              queuePostRenderEffect(() => {\n                  vnodeHook && invokeVNodeHook(vnodeHook, parentComponent, n2, n1);\n                  dirs && invokeDirectiveHook(n2, n1, parentComponent, 'updated');\n              }, parentSuspense);\n          }\n      };\n      // The fast path for blocks.\n      const patchBlockChildren = (oldChildren, newChildren, fallbackContainer, parentComponent, parentSuspense, isSVG, slotScopeIds) => {\n          for (let i = 0; i < newChildren.length; i++) {\n              const oldVNode = oldChildren[i];\n              const newVNode = newChildren[i];\n              // Determine the container (parent element) for the patch.\n              const container = \n              // oldVNode may be an errored async setup() component inside Suspense\n              // which will not have a mounted element\n              oldVNode.el &&\n                  // - In the case of a Fragment, we need to provide the actual parent\n                  // of the Fragment itself so it can move its children.\n                  (oldVNode.type === Fragment ||\n                      // - In the case of different nodes, there is going to be a replacement\n                      // which also requires the correct parent container\n                      !isSameVNodeType(oldVNode, newVNode) ||\n                      // - In the case of a component, it could contain anything.\n                      oldVNode.shapeFlag & (6 /* ShapeFlags.COMPONENT */ | 64 /* ShapeFlags.TELEPORT */))\n                  ? hostParentNode(oldVNode.el)\n                  : // In other cases, the parent container is not actually used so we\n                      // just pass the block element here to avoid a DOM parentNode call.\n                      fallbackContainer;\n              patch(oldVNode, newVNode, container, null, parentComponent, parentSuspense, isSVG, slotScopeIds, true);\n          }\n      };\n      const patchProps = (el, vnode, oldProps, newProps, parentComponent, parentSuspense, isSVG) => {\n          if (oldProps !== newProps) {\n              if (oldProps !== EMPTY_OBJ) {\n                  for (const key in oldProps) {\n                      if (!isReservedProp(key) && !(key in newProps)) {\n                          hostPatchProp(el, key, oldProps[key], null, isSVG, vnode.children, parentComponent, parentSuspense, unmountChildren);\n                      }\n                  }\n              }\n              for (const key in newProps) {\n                  // empty string is not valid prop\n                  if (isReservedProp(key))\n                      continue;\n                  const next = newProps[key];\n                  const prev = oldProps[key];\n                  // defer patching value\n                  if (next !== prev && key !== 'value') {\n                      hostPatchProp(el, key, prev, next, isSVG, vnode.children, parentComponent, parentSuspense, unmountChildren);\n                  }\n              }\n              if ('value' in newProps) {\n                  hostPatchProp(el, 'value', oldProps.value, newProps.value);\n              }\n          }\n      };\n      const processFragment = (n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized) => {\n          const fragmentStartAnchor = (n2.el = n1 ? n1.el : hostCreateText(''));\n          const fragmentEndAnchor = (n2.anchor = n1 ? n1.anchor : hostCreateText(''));\n          let { patchFlag, dynamicChildren, slotScopeIds: fragmentSlotScopeIds } = n2;\n          if (// #5523 dev root fragment may inherit directives\n              (isHmrUpdating || patchFlag & 2048 /* PatchFlags.DEV_ROOT_FRAGMENT */)) {\n              // HMR updated / Dev root fragment (w/ comments), force full diff\n              patchFlag = 0;\n              optimized = false;\n              dynamicChildren = null;\n          }\n          // check if this is a slot fragment with :slotted scope ids\n          if (fragmentSlotScopeIds) {\n              slotScopeIds = slotScopeIds\n                  ? slotScopeIds.concat(fragmentSlotScopeIds)\n                  : fragmentSlotScopeIds;\n          }\n          if (n1 == null) {\n              hostInsert(fragmentStartAnchor, container, anchor);\n              hostInsert(fragmentEndAnchor, container, anchor);\n              // a fragment can only have array children\n              // since they are either generated by the compiler, or implicitly created\n              // from arrays.\n              mountChildren(n2.children, container, fragmentEndAnchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\n          }\n          else {\n              if (patchFlag > 0 &&\n                  patchFlag & 64 /* PatchFlags.STABLE_FRAGMENT */ &&\n                  dynamicChildren &&\n                  // #2715 the previous fragment could've been a BAILed one as a result\n                  // of renderSlot() with no valid children\n                  n1.dynamicChildren) {\n                  // a stable fragment (template root or <template v-for>) doesn't need to\n                  // patch children order, but it may contain dynamicChildren.\n                  patchBlockChildren(n1.dynamicChildren, dynamicChildren, container, parentComponent, parentSuspense, isSVG, slotScopeIds);\n                  if (parentComponent && parentComponent.type.__hmrId) {\n                      traverseStaticChildren(n1, n2);\n                  }\n                  else if (\n                  // #2080 if the stable fragment has a key, it's a <template v-for> that may\n                  //  get moved around. Make sure all root level vnodes inherit el.\n                  // #2134 or if it's a component root, it may also get moved around\n                  // as the component is being moved.\n                  n2.key != null ||\n                      (parentComponent && n2 === parentComponent.subTree)) {\n                      traverseStaticChildren(n1, n2, true /* shallow */);\n                  }\n              }\n              else {\n                  // keyed / unkeyed, or manual fragments.\n                  // for keyed & unkeyed, since they are compiler generated from v-for,\n                  // each child is guaranteed to be a block so the fragment will never\n                  // have dynamicChildren.\n                  patchChildren(n1, n2, container, fragmentEndAnchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\n              }\n          }\n      };\n      const processComponent = (n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized) => {\n          n2.slotScopeIds = slotScopeIds;\n          if (n1 == null) {\n              if (n2.shapeFlag & 512 /* ShapeFlags.COMPONENT_KEPT_ALIVE */) {\n                  parentComponent.ctx.activate(n2, container, anchor, isSVG, optimized);\n              }\n              else {\n                  mountComponent(n2, container, anchor, parentComponent, parentSuspense, isSVG, optimized);\n              }\n          }\n          else {\n              updateComponent(n1, n2, optimized);\n          }\n      };\n      const mountComponent = (initialVNode, container, anchor, parentComponent, parentSuspense, isSVG, optimized) => {\n          const instance = (initialVNode.component = createComponentInstance(initialVNode, parentComponent, parentSuspense));\n          if (instance.type.__hmrId) {\n              registerHMR(instance);\n          }\n          {\n              pushWarningContext(initialVNode);\n              startMeasure(instance, `mount`);\n          }\n          // inject renderer internals for keepAlive\n          if (isKeepAlive(initialVNode)) {\n              instance.ctx.renderer = internals;\n          }\n          // resolve props and slots for setup context\n          {\n              {\n                  startMeasure(instance, `init`);\n              }\n              setupComponent(instance);\n              {\n                  endMeasure(instance, `init`);\n              }\n          }\n          // setup() is async. This component relies on async logic to be resolved\n          // before proceeding\n          if (instance.asyncDep) {\n              parentSuspense && parentSuspense.registerDep(instance, setupRenderEffect);\n              // Give it a placeholder if this is not hydration\n              // TODO handle self-defined fallback\n              if (!initialVNode.el) {\n                  const placeholder = (instance.subTree = createVNode(Comment));\n                  processCommentNode(null, placeholder, container, anchor);\n              }\n              return;\n          }\n          setupRenderEffect(instance, initialVNode, container, anchor, parentSuspense, isSVG, optimized);\n          {\n              popWarningContext();\n              endMeasure(instance, `mount`);\n          }\n      };\n      const updateComponent = (n1, n2, optimized) => {\n          const instance = (n2.component = n1.component);\n          if (shouldUpdateComponent(n1, n2, optimized)) {\n              if (instance.asyncDep &&\n                  !instance.asyncResolved) {\n                  // async & still pending - just update props and slots\n                  // since the component's reactive effect for render isn't set-up yet\n                  {\n                      pushWarningContext(n2);\n                  }\n                  updateComponentPreRender(instance, n2, optimized);\n                  {\n                      popWarningContext();\n                  }\n                  return;\n              }\n              else {\n                  // normal update\n                  instance.next = n2;\n                  // in case the child component is also queued, remove it to avoid\n                  // double updating the same child component in the same flush.\n                  invalidateJob(instance.update);\n                  // instance.update is the reactive effect.\n                  instance.update();\n              }\n          }\n          else {\n              // no update needed. just copy over properties\n              n2.el = n1.el;\n              instance.vnode = n2;\n          }\n      };\n      const setupRenderEffect = (instance, initialVNode, container, anchor, parentSuspense, isSVG, optimized) => {\n          const componentUpdateFn = () => {\n              if (!instance.isMounted) {\n                  let vnodeHook;\n                  const { el, props } = initialVNode;\n                  const { bm, m, parent } = instance;\n                  const isAsyncWrapperVNode = isAsyncWrapper(initialVNode);\n                  toggleRecurse(instance, false);\n                  // beforeMount hook\n                  if (bm) {\n                      invokeArrayFns(bm);\n                  }\n                  // onVnodeBeforeMount\n                  if (!isAsyncWrapperVNode &&\n                      (vnodeHook = props && props.onVnodeBeforeMount)) {\n                      invokeVNodeHook(vnodeHook, parent, initialVNode);\n                  }\n                  toggleRecurse(instance, true);\n                  if (el && hydrateNode) {\n                      // vnode has adopted host node - perform hydration instead of mount.\n                      const hydrateSubTree = () => {\n                          {\n                              startMeasure(instance, `render`);\n                          }\n                          instance.subTree = renderComponentRoot(instance);\n                          {\n                              endMeasure(instance, `render`);\n                          }\n                          {\n                              startMeasure(instance, `hydrate`);\n                          }\n                          hydrateNode(el, instance.subTree, instance, parentSuspense, null);\n                          {\n                              endMeasure(instance, `hydrate`);\n                          }\n                      };\n                      if (isAsyncWrapperVNode) {\n                          initialVNode.type.__asyncLoader().then(\n                          // note: we are moving the render call into an async callback,\n                          // which means it won't track dependencies - but it's ok because\n                          // a server-rendered async wrapper is already in resolved state\n                          // and it will never need to change.\n                          () => !instance.isUnmounted && hydrateSubTree());\n                      }\n                      else {\n                          hydrateSubTree();\n                      }\n                  }\n                  else {\n                      {\n                          startMeasure(instance, `render`);\n                      }\n                      const subTree = (instance.subTree = renderComponentRoot(instance));\n                      {\n                          endMeasure(instance, `render`);\n                      }\n                      {\n                          startMeasure(instance, `patch`);\n                      }\n                      patch(null, subTree, container, anchor, instance, parentSuspense, isSVG);\n                      {\n                          endMeasure(instance, `patch`);\n                      }\n                      initialVNode.el = subTree.el;\n                  }\n                  // mounted hook\n                  if (m) {\n                      queuePostRenderEffect(m, parentSuspense);\n                  }\n                  // onVnodeMounted\n                  if (!isAsyncWrapperVNode &&\n                      (vnodeHook = props && props.onVnodeMounted)) {\n                      const scopedInitialVNode = initialVNode;\n                      queuePostRenderEffect(() => invokeVNodeHook(vnodeHook, parent, scopedInitialVNode), parentSuspense);\n                  }\n                  // activated hook for keep-alive roots.\n                  // #1742 activated hook must be accessed after first render\n                  // since the hook may be injected by a child keep-alive\n                  if (initialVNode.shapeFlag & 256 /* ShapeFlags.COMPONENT_SHOULD_KEEP_ALIVE */ ||\n                      (parent &&\n                          isAsyncWrapper(parent.vnode) &&\n                          parent.vnode.shapeFlag & 256 /* ShapeFlags.COMPONENT_SHOULD_KEEP_ALIVE */)) {\n                      instance.a && queuePostRenderEffect(instance.a, parentSuspense);\n                  }\n                  instance.isMounted = true;\n                  {\n                      devtoolsComponentAdded(instance);\n                  }\n                  // #2458: deference mount-only object parameters to prevent memleaks\n                  initialVNode = container = anchor = null;\n              }\n              else {\n                  // updateComponent\n                  // This is triggered by mutation of component's own state (next: null)\n                  // OR parent calling processComponent (next: VNode)\n                  let { next, bu, u, parent, vnode } = instance;\n                  let originNext = next;\n                  let vnodeHook;\n                  {\n                      pushWarningContext(next || instance.vnode);\n                  }\n                  // Disallow component effect recursion during pre-lifecycle hooks.\n                  toggleRecurse(instance, false);\n                  if (next) {\n                      next.el = vnode.el;\n                      updateComponentPreRender(instance, next, optimized);\n                  }\n                  else {\n                      next = vnode;\n                  }\n                  // beforeUpdate hook\n                  if (bu) {\n                      invokeArrayFns(bu);\n                  }\n                  // onVnodeBeforeUpdate\n                  if ((vnodeHook = next.props && next.props.onVnodeBeforeUpdate)) {\n                      invokeVNodeHook(vnodeHook, parent, next, vnode);\n                  }\n                  toggleRecurse(instance, true);\n                  // render\n                  {\n                      startMeasure(instance, `render`);\n                  }\n                  const nextTree = renderComponentRoot(instance);\n                  {\n                      endMeasure(instance, `render`);\n                  }\n                  const prevTree = instance.subTree;\n                  instance.subTree = nextTree;\n                  {\n                      startMeasure(instance, `patch`);\n                  }\n                  patch(prevTree, nextTree, \n                  // parent may have changed if it's in a teleport\n                  hostParentNode(prevTree.el), \n                  // anchor may have changed if it's in a fragment\n                  getNextHostNode(prevTree), instance, parentSuspense, isSVG);\n                  {\n                      endMeasure(instance, `patch`);\n                  }\n                  next.el = nextTree.el;\n                  if (originNext === null) {\n                      // self-triggered update. In case of HOC, update parent component\n                      // vnode el. HOC is indicated by parent instance's subTree pointing\n                      // to child component's vnode\n                      updateHOCHostEl(instance, nextTree.el);\n                  }\n                  // updated hook\n                  if (u) {\n                      queuePostRenderEffect(u, parentSuspense);\n                  }\n                  // onVnodeUpdated\n                  if ((vnodeHook = next.props && next.props.onVnodeUpdated)) {\n                      queuePostRenderEffect(() => invokeVNodeHook(vnodeHook, parent, next, vnode), parentSuspense);\n                  }\n                  {\n                      devtoolsComponentUpdated(instance);\n                  }\n                  {\n                      popWarningContext();\n                  }\n              }\n          };\n          // create reactive effect for rendering\n          const effect = (instance.effect = new ReactiveEffect(componentUpdateFn, () => queueJob(update), instance.scope // track it in component's effect scope\n          ));\n          const update = (instance.update = () => effect.run());\n          update.id = instance.uid;\n          // allowRecurse\n          // #1801, #2043 component render effects should allow recursive updates\n          toggleRecurse(instance, true);\n          {\n              effect.onTrack = instance.rtc\n                  ? e => invokeArrayFns(instance.rtc, e)\n                  : void 0;\n              effect.onTrigger = instance.rtg\n                  ? e => invokeArrayFns(instance.rtg, e)\n                  : void 0;\n              update.ownerInstance = instance;\n          }\n          update();\n      };\n      const updateComponentPreRender = (instance, nextVNode, optimized) => {\n          nextVNode.component = instance;\n          const prevProps = instance.vnode.props;\n          instance.vnode = nextVNode;\n          instance.next = null;\n          updateProps(instance, nextVNode.props, prevProps, optimized);\n          updateSlots(instance, nextVNode.children, optimized);\n          pauseTracking();\n          // props update may have triggered pre-flush watchers.\n          // flush them before the render update.\n          flushPreFlushCbs();\n          resetTracking();\n      };\n      const patchChildren = (n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized = false) => {\n          const c1 = n1 && n1.children;\n          const prevShapeFlag = n1 ? n1.shapeFlag : 0;\n          const c2 = n2.children;\n          const { patchFlag, shapeFlag } = n2;\n          // fast path\n          if (patchFlag > 0) {\n              if (patchFlag & 128 /* PatchFlags.KEYED_FRAGMENT */) {\n                  // this could be either fully-keyed or mixed (some keyed some not)\n                  // presence of patchFlag means children are guaranteed to be arrays\n                  patchKeyedChildren(c1, c2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\n                  return;\n              }\n              else if (patchFlag & 256 /* PatchFlags.UNKEYED_FRAGMENT */) {\n                  // unkeyed\n                  patchUnkeyedChildren(c1, c2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\n                  return;\n              }\n          }\n          // children has 3 possibilities: text, array or no children.\n          if (shapeFlag & 8 /* ShapeFlags.TEXT_CHILDREN */) {\n              // text children fast path\n              if (prevShapeFlag & 16 /* ShapeFlags.ARRAY_CHILDREN */) {\n                  unmountChildren(c1, parentComponent, parentSuspense);\n              }\n              if (c2 !== c1) {\n                  hostSetElementText(container, c2);\n              }\n          }\n          else {\n              if (prevShapeFlag & 16 /* ShapeFlags.ARRAY_CHILDREN */) {\n                  // prev children was array\n                  if (shapeFlag & 16 /* ShapeFlags.ARRAY_CHILDREN */) {\n                      // two arrays, cannot assume anything, do full diff\n                      patchKeyedChildren(c1, c2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\n                  }\n                  else {\n                      // no new children, just unmount old\n                      unmountChildren(c1, parentComponent, parentSuspense, true);\n                  }\n              }\n              else {\n                  // prev children was text OR null\n                  // new children is array OR null\n                  if (prevShapeFlag & 8 /* ShapeFlags.TEXT_CHILDREN */) {\n                      hostSetElementText(container, '');\n                  }\n                  // mount new if array\n                  if (shapeFlag & 16 /* ShapeFlags.ARRAY_CHILDREN */) {\n                      mountChildren(c2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\n                  }\n              }\n          }\n      };\n      const patchUnkeyedChildren = (c1, c2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized) => {\n          c1 = c1 || EMPTY_ARR;\n          c2 = c2 || EMPTY_ARR;\n          const oldLength = c1.length;\n          const newLength = c2.length;\n          const commonLength = Math.min(oldLength, newLength);\n          let i;\n          for (i = 0; i < commonLength; i++) {\n              const nextChild = (c2[i] = optimized\n                  ? cloneIfMounted(c2[i])\n                  : normalizeVNode(c2[i]));\n              patch(c1[i], nextChild, container, null, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\n          }\n          if (oldLength > newLength) {\n              // remove old\n              unmountChildren(c1, parentComponent, parentSuspense, true, false, commonLength);\n          }\n          else {\n              // mount new\n              mountChildren(c2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized, commonLength);\n          }\n      };\n      // can be all-keyed or mixed\n      const patchKeyedChildren = (c1, c2, container, parentAnchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized) => {\n          let i = 0;\n          const l2 = c2.length;\n          let e1 = c1.length - 1; // prev ending index\n          let e2 = l2 - 1; // next ending index\n          // 1. sync from start\n          // (a b) c\n          // (a b) d e\n          while (i <= e1 && i <= e2) {\n              const n1 = c1[i];\n              const n2 = (c2[i] = optimized\n                  ? cloneIfMounted(c2[i])\n                  : normalizeVNode(c2[i]));\n              if (isSameVNodeType(n1, n2)) {\n                  patch(n1, n2, container, null, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\n              }\n              else {\n                  break;\n              }\n              i++;\n          }\n          // 2. sync from end\n          // a (b c)\n          // d e (b c)\n          while (i <= e1 && i <= e2) {\n              const n1 = c1[e1];\n              const n2 = (c2[e2] = optimized\n                  ? cloneIfMounted(c2[e2])\n                  : normalizeVNode(c2[e2]));\n              if (isSameVNodeType(n1, n2)) {\n                  patch(n1, n2, container, null, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\n              }\n              else {\n                  break;\n              }\n              e1--;\n              e2--;\n          }\n          // 3. common sequence + mount\n          // (a b)\n          // (a b) c\n          // i = 2, e1 = 1, e2 = 2\n          // (a b)\n          // c (a b)\n          // i = 0, e1 = -1, e2 = 0\n          if (i > e1) {\n              if (i <= e2) {\n                  const nextPos = e2 + 1;\n                  const anchor = nextPos < l2 ? c2[nextPos].el : parentAnchor;\n                  while (i <= e2) {\n                      patch(null, (c2[i] = optimized\n                          ? cloneIfMounted(c2[i])\n                          : normalizeVNode(c2[i])), container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\n                      i++;\n                  }\n              }\n          }\n          // 4. common sequence + unmount\n          // (a b) c\n          // (a b)\n          // i = 2, e1 = 2, e2 = 1\n          // a (b c)\n          // (b c)\n          // i = 0, e1 = 0, e2 = -1\n          else if (i > e2) {\n              while (i <= e1) {\n                  unmount(c1[i], parentComponent, parentSuspense, true);\n                  i++;\n              }\n          }\n          // 5. unknown sequence\n          // [i ... e1 + 1]: a b [c d e] f g\n          // [i ... e2 + 1]: a b [e d c h] f g\n          // i = 2, e1 = 4, e2 = 5\n          else {\n              const s1 = i; // prev starting index\n              const s2 = i; // next starting index\n              // 5.1 build key:index map for newChildren\n              const keyToNewIndexMap = new Map();\n              for (i = s2; i <= e2; i++) {\n                  const nextChild = (c2[i] = optimized\n                      ? cloneIfMounted(c2[i])\n                      : normalizeVNode(c2[i]));\n                  if (nextChild.key != null) {\n                      if (keyToNewIndexMap.has(nextChild.key)) {\n                          warn(`Duplicate keys found during update:`, JSON.stringify(nextChild.key), `Make sure keys are unique.`);\n                      }\n                      keyToNewIndexMap.set(nextChild.key, i);\n                  }\n              }\n              // 5.2 loop through old children left to be patched and try to patch\n              // matching nodes & remove nodes that are no longer present\n              let j;\n              let patched = 0;\n              const toBePatched = e2 - s2 + 1;\n              let moved = false;\n              // used to track whether any node has moved\n              let maxNewIndexSoFar = 0;\n              // works as Map<newIndex, oldIndex>\n              // Note that oldIndex is offset by +1\n              // and oldIndex = 0 is a special value indicating the new node has\n              // no corresponding old node.\n              // used for determining longest stable subsequence\n              const newIndexToOldIndexMap = new Array(toBePatched);\n              for (i = 0; i < toBePatched; i++)\n                  newIndexToOldIndexMap[i] = 0;\n              for (i = s1; i <= e1; i++) {\n                  const prevChild = c1[i];\n                  if (patched >= toBePatched) {\n                      // all new children have been patched so this can only be a removal\n                      unmount(prevChild, parentComponent, parentSuspense, true);\n                      continue;\n                  }\n                  let newIndex;\n                  if (prevChild.key != null) {\n                      newIndex = keyToNewIndexMap.get(prevChild.key);\n                  }\n                  else {\n                      // key-less node, try to locate a key-less node of the same type\n                      for (j = s2; j <= e2; j++) {\n                          if (newIndexToOldIndexMap[j - s2] === 0 &&\n                              isSameVNodeType(prevChild, c2[j])) {\n                              newIndex = j;\n                              break;\n                          }\n                      }\n                  }\n                  if (newIndex === undefined) {\n                      unmount(prevChild, parentComponent, parentSuspense, true);\n                  }\n                  else {\n                      newIndexToOldIndexMap[newIndex - s2] = i + 1;\n                      if (newIndex >= maxNewIndexSoFar) {\n                          maxNewIndexSoFar = newIndex;\n                      }\n                      else {\n                          moved = true;\n                      }\n                      patch(prevChild, c2[newIndex], container, null, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\n                      patched++;\n                  }\n              }\n              // 5.3 move and mount\n              // generate longest stable subsequence only when nodes have moved\n              const increasingNewIndexSequence = moved\n                  ? getSequence(newIndexToOldIndexMap)\n                  : EMPTY_ARR;\n              j = increasingNewIndexSequence.length - 1;\n              // looping backwards so that we can use last patched node as anchor\n              for (i = toBePatched - 1; i >= 0; i--) {\n                  const nextIndex = s2 + i;\n                  const nextChild = c2[nextIndex];\n                  const anchor = nextIndex + 1 < l2 ? c2[nextIndex + 1].el : parentAnchor;\n                  if (newIndexToOldIndexMap[i] === 0) {\n                      // mount new\n                      patch(null, nextChild, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\n                  }\n                  else if (moved) {\n                      // move if:\n                      // There is no stable subsequence (e.g. a reverse)\n                      // OR current node is not among the stable sequence\n                      if (j < 0 || i !== increasingNewIndexSequence[j]) {\n                          move(nextChild, container, anchor, 2 /* MoveType.REORDER */);\n                      }\n                      else {\n                          j--;\n                      }\n                  }\n              }\n          }\n      };\n      const move = (vnode, container, anchor, moveType, parentSuspense = null) => {\n          const { el, type, transition, children, shapeFlag } = vnode;\n          if (shapeFlag & 6 /* ShapeFlags.COMPONENT */) {\n              move(vnode.component.subTree, container, anchor, moveType);\n              return;\n          }\n          if (shapeFlag & 128 /* ShapeFlags.SUSPENSE */) {\n              vnode.suspense.move(container, anchor, moveType);\n              return;\n          }\n          if (shapeFlag & 64 /* ShapeFlags.TELEPORT */) {\n              type.move(vnode, container, anchor, internals);\n              return;\n          }\n          if (type === Fragment) {\n              hostInsert(el, container, anchor);\n              for (let i = 0; i < children.length; i++) {\n                  move(children[i], container, anchor, moveType);\n              }\n              hostInsert(vnode.anchor, container, anchor);\n              return;\n          }\n          if (type === Static) {\n              moveStaticNode(vnode, container, anchor);\n              return;\n          }\n          // single nodes\n          const needTransition = moveType !== 2 /* MoveType.REORDER */ &&\n              shapeFlag & 1 /* ShapeFlags.ELEMENT */ &&\n              transition;\n          if (needTransition) {\n              if (moveType === 0 /* MoveType.ENTER */) {\n                  transition.beforeEnter(el);\n                  hostInsert(el, container, anchor);\n                  queuePostRenderEffect(() => transition.enter(el), parentSuspense);\n              }\n              else {\n                  const { leave, delayLeave, afterLeave } = transition;\n                  const remove = () => hostInsert(el, container, anchor);\n                  const performLeave = () => {\n                      leave(el, () => {\n                          remove();\n                          afterLeave && afterLeave();\n                      });\n                  };\n                  if (delayLeave) {\n                      delayLeave(el, remove, performLeave);\n                  }\n                  else {\n                      performLeave();\n                  }\n              }\n          }\n          else {\n              hostInsert(el, container, anchor);\n          }\n      };\n      const unmount = (vnode, parentComponent, parentSuspense, doRemove = false, optimized = false) => {\n          const { type, props, ref, children, dynamicChildren, shapeFlag, patchFlag, dirs } = vnode;\n          // unset ref\n          if (ref != null) {\n              setRef(ref, null, parentSuspense, vnode, true);\n          }\n          if (shapeFlag & 256 /* ShapeFlags.COMPONENT_SHOULD_KEEP_ALIVE */) {\n              parentComponent.ctx.deactivate(vnode);\n              return;\n          }\n          const shouldInvokeDirs = shapeFlag & 1 /* ShapeFlags.ELEMENT */ && dirs;\n          const shouldInvokeVnodeHook = !isAsyncWrapper(vnode);\n          let vnodeHook;\n          if (shouldInvokeVnodeHook &&\n              (vnodeHook = props && props.onVnodeBeforeUnmount)) {\n              invokeVNodeHook(vnodeHook, parentComponent, vnode);\n          }\n          if (shapeFlag & 6 /* ShapeFlags.COMPONENT */) {\n              unmountComponent(vnode.component, parentSuspense, doRemove);\n          }\n          else {\n              if (shapeFlag & 128 /* ShapeFlags.SUSPENSE */) {\n                  vnode.suspense.unmount(parentSuspense, doRemove);\n                  return;\n              }\n              if (shouldInvokeDirs) {\n                  invokeDirectiveHook(vnode, null, parentComponent, 'beforeUnmount');\n              }\n              if (shapeFlag & 64 /* ShapeFlags.TELEPORT */) {\n                  vnode.type.remove(vnode, parentComponent, parentSuspense, optimized, internals, doRemove);\n              }\n              else if (dynamicChildren &&\n                  // #1153: fast path should not be taken for non-stable (v-for) fragments\n                  (type !== Fragment ||\n                      (patchFlag > 0 && patchFlag & 64 /* PatchFlags.STABLE_FRAGMENT */))) {\n                  // fast path for block nodes: only need to unmount dynamic children.\n                  unmountChildren(dynamicChildren, parentComponent, parentSuspense, false, true);\n              }\n              else if ((type === Fragment &&\n                  patchFlag &\n                      (128 /* PatchFlags.KEYED_FRAGMENT */ | 256 /* PatchFlags.UNKEYED_FRAGMENT */)) ||\n                  (!optimized && shapeFlag & 16 /* ShapeFlags.ARRAY_CHILDREN */)) {\n                  unmountChildren(children, parentComponent, parentSuspense);\n              }\n              if (doRemove) {\n                  remove(vnode);\n              }\n          }\n          if ((shouldInvokeVnodeHook &&\n              (vnodeHook = props && props.onVnodeUnmounted)) ||\n              shouldInvokeDirs) {\n              queuePostRenderEffect(() => {\n                  vnodeHook && invokeVNodeHook(vnodeHook, parentComponent, vnode);\n                  shouldInvokeDirs &&\n                      invokeDirectiveHook(vnode, null, parentComponent, 'unmounted');\n              }, parentSuspense);\n          }\n      };\n      const remove = vnode => {\n          const { type, el, anchor, transition } = vnode;\n          if (type === Fragment) {\n              if (vnode.patchFlag > 0 &&\n                  vnode.patchFlag & 2048 /* PatchFlags.DEV_ROOT_FRAGMENT */ &&\n                  transition &&\n                  !transition.persisted) {\n                  vnode.children.forEach(child => {\n                      if (child.type === Comment) {\n                          hostRemove(child.el);\n                      }\n                      else {\n                          remove(child);\n                      }\n                  });\n              }\n              else {\n                  removeFragment(el, anchor);\n              }\n              return;\n          }\n          if (type === Static) {\n              removeStaticNode(vnode);\n              return;\n          }\n          const performRemove = () => {\n              hostRemove(el);\n              if (transition && !transition.persisted && transition.afterLeave) {\n                  transition.afterLeave();\n              }\n          };\n          if (vnode.shapeFlag & 1 /* ShapeFlags.ELEMENT */ &&\n              transition &&\n              !transition.persisted) {\n              const { leave, delayLeave } = transition;\n              const performLeave = () => leave(el, performRemove);\n              if (delayLeave) {\n                  delayLeave(vnode.el, performRemove, performLeave);\n              }\n              else {\n                  performLeave();\n              }\n          }\n          else {\n              performRemove();\n          }\n      };\n      const removeFragment = (cur, end) => {\n          // For fragments, directly remove all contained DOM nodes.\n          // (fragment child nodes cannot have transition)\n          let next;\n          while (cur !== end) {\n              next = hostNextSibling(cur);\n              hostRemove(cur);\n              cur = next;\n          }\n          hostRemove(end);\n      };\n      const unmountComponent = (instance, parentSuspense, doRemove) => {\n          if (instance.type.__hmrId) {\n              unregisterHMR(instance);\n          }\n          const { bum, scope, update, subTree, um } = instance;\n          // beforeUnmount hook\n          if (bum) {\n              invokeArrayFns(bum);\n          }\n          // stop effects in component scope\n          scope.stop();\n          // update may be null if a component is unmounted before its async\n          // setup has resolved.\n          if (update) {\n              // so that scheduler will no longer invoke it\n              update.active = false;\n              unmount(subTree, instance, parentSuspense, doRemove);\n          }\n          // unmounted hook\n          if (um) {\n              queuePostRenderEffect(um, parentSuspense);\n          }\n          queuePostRenderEffect(() => {\n              instance.isUnmounted = true;\n          }, parentSuspense);\n          // A component with async dep inside a pending suspense is unmounted before\n          // its async dep resolves. This should remove the dep from the suspense, and\n          // cause the suspense to resolve immediately if that was the last dep.\n          if (parentSuspense &&\n              parentSuspense.pendingBranch &&\n              !parentSuspense.isUnmounted &&\n              instance.asyncDep &&\n              !instance.asyncResolved &&\n              instance.suspenseId === parentSuspense.pendingId) {\n              parentSuspense.deps--;\n              if (parentSuspense.deps === 0) {\n                  parentSuspense.resolve();\n              }\n          }\n          {\n              devtoolsComponentRemoved(instance);\n          }\n      };\n      const unmountChildren = (children, parentComponent, parentSuspense, doRemove = false, optimized = false, start = 0) => {\n          for (let i = start; i < children.length; i++) {\n              unmount(children[i], parentComponent, parentSuspense, doRemove, optimized);\n          }\n      };\n      const getNextHostNode = vnode => {\n          if (vnode.shapeFlag & 6 /* ShapeFlags.COMPONENT */) {\n              return getNextHostNode(vnode.component.subTree);\n          }\n          if (vnode.shapeFlag & 128 /* ShapeFlags.SUSPENSE */) {\n              return vnode.suspense.next();\n          }\n          return hostNextSibling((vnode.anchor || vnode.el));\n      };\n      const render = (vnode, container, isSVG) => {\n          if (vnode == null) {\n              if (container._vnode) {\n                  unmount(container._vnode, null, null, true);\n              }\n          }\n          else {\n              patch(container._vnode || null, vnode, container, null, null, null, isSVG);\n          }\n          flushPreFlushCbs();\n          flushPostFlushCbs();\n          container._vnode = vnode;\n      };\n      const internals = {\n          p: patch,\n          um: unmount,\n          m: move,\n          r: remove,\n          mt: mountComponent,\n          mc: mountChildren,\n          pc: patchChildren,\n          pbc: patchBlockChildren,\n          n: getNextHostNode,\n          o: options\n      };\n      let hydrate;\n      let hydrateNode;\n      if (createHydrationFns) {\n          [hydrate, hydrateNode] = createHydrationFns(internals);\n      }\n      return {\n          render,\n          hydrate,\n          createApp: createAppAPI(render, hydrate)\n      };\n  }\n  function toggleRecurse({ effect, update }, allowed) {\n      effect.allowRecurse = update.allowRecurse = allowed;\n  }\n  /**\n   * #1156\n   * When a component is HMR-enabled, we need to make sure that all static nodes\n   * inside a block also inherit the DOM element from the previous tree so that\n   * HMR updates (which are full updates) can retrieve the element for patching.\n   *\n   * #2080\n   * Inside keyed `template` fragment static children, if a fragment is moved,\n   * the children will always be moved. Therefore, in order to ensure correct move\n   * position, el should be inherited from previous nodes.\n   */\n  function traverseStaticChildren(n1, n2, shallow = false) {\n      const ch1 = n1.children;\n      const ch2 = n2.children;\n      if (isArray(ch1) && isArray(ch2)) {\n          for (let i = 0; i < ch1.length; i++) {\n              // this is only called in the optimized path so array children are\n              // guaranteed to be vnodes\n              const c1 = ch1[i];\n              let c2 = ch2[i];\n              if (c2.shapeFlag & 1 /* ShapeFlags.ELEMENT */ && !c2.dynamicChildren) {\n                  if (c2.patchFlag <= 0 || c2.patchFlag === 32 /* PatchFlags.HYDRATE_EVENTS */) {\n                      c2 = ch2[i] = cloneIfMounted(ch2[i]);\n                      c2.el = c1.el;\n                  }\n                  if (!shallow)\n                      traverseStaticChildren(c1, c2);\n              }\n              // #6852 also inherit for text nodes\n              if (c2.type === Text) {\n                  c2.el = c1.el;\n              }\n              // also inherit for comment nodes, but not placeholders (e.g. v-if which\n              // would have received .el during block patch)\n              if (c2.type === Comment && !c2.el) {\n                  c2.el = c1.el;\n              }\n          }\n      }\n  }\n  // https://en.wikipedia.org/wiki/Longest_increasing_subsequence\n  function getSequence(arr) {\n      const p = arr.slice();\n      const result = [0];\n      let i, j, u, v, c;\n      const len = arr.length;\n      for (i = 0; i < len; i++) {\n          const arrI = arr[i];\n          if (arrI !== 0) {\n              j = result[result.length - 1];\n              if (arr[j] < arrI) {\n                  p[i] = j;\n                  result.push(i);\n                  continue;\n              }\n              u = 0;\n              v = result.length - 1;\n              while (u < v) {\n                  c = (u + v) >> 1;\n                  if (arr[result[c]] < arrI) {\n                      u = c + 1;\n                  }\n                  else {\n                      v = c;\n                  }\n              }\n              if (arrI < arr[result[u]]) {\n                  if (u > 0) {\n                      p[i] = result[u - 1];\n                  }\n                  result[u] = i;\n              }\n          }\n      }\n      u = result.length;\n      v = result[u - 1];\n      while (u-- > 0) {\n          result[u] = v;\n          v = p[v];\n      }\n      return result;\n  }\n\n  const isTeleport = (type) => type.__isTeleport;\n  const isTeleportDisabled = (props) => props && (props.disabled || props.disabled === '');\n  const isTargetSVG = (target) => typeof SVGElement !== 'undefined' && target instanceof SVGElement;\n  const resolveTarget = (props, select) => {\n      const targetSelector = props && props.to;\n      if (isString(targetSelector)) {\n          if (!select) {\n              warn(`Current renderer does not support string target for Teleports. ` +\n                      `(missing querySelector renderer option)`);\n              return null;\n          }\n          else {\n              const target = select(targetSelector);\n              if (!target) {\n                  warn(`Failed to locate Teleport target with selector \"${targetSelector}\". ` +\n                          `Note the target element must exist before the component is mounted - ` +\n                          `i.e. the target cannot be rendered by the component itself, and ` +\n                          `ideally should be outside of the entire Vue component tree.`);\n              }\n              return target;\n          }\n      }\n      else {\n          if (!targetSelector && !isTeleportDisabled(props)) {\n              warn(`Invalid Teleport target: ${targetSelector}`);\n          }\n          return targetSelector;\n      }\n  };\n  const TeleportImpl = {\n      __isTeleport: true,\n      process(n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized, internals) {\n          const { mc: mountChildren, pc: patchChildren, pbc: patchBlockChildren, o: { insert, querySelector, createText, createComment } } = internals;\n          const disabled = isTeleportDisabled(n2.props);\n          let { shapeFlag, children, dynamicChildren } = n2;\n          // #3302\n          // HMR updated, force full diff\n          if (isHmrUpdating) {\n              optimized = false;\n              dynamicChildren = null;\n          }\n          if (n1 == null) {\n              // insert anchors in the main view\n              const placeholder = (n2.el = createComment('teleport start')\n                  );\n              const mainAnchor = (n2.anchor = createComment('teleport end')\n                  );\n              insert(placeholder, container, anchor);\n              insert(mainAnchor, container, anchor);\n              const target = (n2.target = resolveTarget(n2.props, querySelector));\n              const targetAnchor = (n2.targetAnchor = createText(''));\n              if (target) {\n                  insert(targetAnchor, target);\n                  // #2652 we could be teleporting from a non-SVG tree into an SVG tree\n                  isSVG = isSVG || isTargetSVG(target);\n              }\n              else if (!disabled) {\n                  warn('Invalid Teleport target on mount:', target, `(${typeof target})`);\n              }\n              const mount = (container, anchor) => {\n                  // Teleport *always* has Array children. This is enforced in both the\n                  // compiler and vnode children normalization.\n                  if (shapeFlag & 16 /* ShapeFlags.ARRAY_CHILDREN */) {\n                      mountChildren(children, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\n                  }\n              };\n              if (disabled) {\n                  mount(container, mainAnchor);\n              }\n              else if (target) {\n                  mount(target, targetAnchor);\n              }\n          }\n          else {\n              // update content\n              n2.el = n1.el;\n              const mainAnchor = (n2.anchor = n1.anchor);\n              const target = (n2.target = n1.target);\n              const targetAnchor = (n2.targetAnchor = n1.targetAnchor);\n              const wasDisabled = isTeleportDisabled(n1.props);\n              const currentContainer = wasDisabled ? container : target;\n              const currentAnchor = wasDisabled ? mainAnchor : targetAnchor;\n              isSVG = isSVG || isTargetSVG(target);\n              if (dynamicChildren) {\n                  // fast path when the teleport happens to be a block root\n                  patchBlockChildren(n1.dynamicChildren, dynamicChildren, currentContainer, parentComponent, parentSuspense, isSVG, slotScopeIds);\n                  // even in block tree mode we need to make sure all root-level nodes\n                  // in the teleport inherit previous DOM references so that they can\n                  // be moved in future patches.\n                  traverseStaticChildren(n1, n2, true);\n              }\n              else if (!optimized) {\n                  patchChildren(n1, n2, currentContainer, currentAnchor, parentComponent, parentSuspense, isSVG, slotScopeIds, false);\n              }\n              if (disabled) {\n                  if (!wasDisabled) {\n                      // enabled -> disabled\n                      // move into main container\n                      moveTeleport(n2, container, mainAnchor, internals, 1 /* TeleportMoveTypes.TOGGLE */);\n                  }\n              }\n              else {\n                  // target changed\n                  if ((n2.props && n2.props.to) !== (n1.props && n1.props.to)) {\n                      const nextTarget = (n2.target = resolveTarget(n2.props, querySelector));\n                      if (nextTarget) {\n                          moveTeleport(n2, nextTarget, null, internals, 0 /* TeleportMoveTypes.TARGET_CHANGE */);\n                      }\n                      else {\n                          warn('Invalid Teleport target on update:', target, `(${typeof target})`);\n                      }\n                  }\n                  else if (wasDisabled) {\n                      // disabled -> enabled\n                      // move into teleport target\n                      moveTeleport(n2, target, targetAnchor, internals, 1 /* TeleportMoveTypes.TOGGLE */);\n                  }\n              }\n          }\n          updateCssVars(n2);\n      },\n      remove(vnode, parentComponent, parentSuspense, optimized, { um: unmount, o: { remove: hostRemove } }, doRemove) {\n          const { shapeFlag, children, anchor, targetAnchor, target, props } = vnode;\n          if (target) {\n              hostRemove(targetAnchor);\n          }\n          // an unmounted teleport should always remove its children if not disabled\n          if (doRemove || !isTeleportDisabled(props)) {\n              hostRemove(anchor);\n              if (shapeFlag & 16 /* ShapeFlags.ARRAY_CHILDREN */) {\n                  for (let i = 0; i < children.length; i++) {\n                      const child = children[i];\n                      unmount(child, parentComponent, parentSuspense, true, !!child.dynamicChildren);\n                  }\n              }\n          }\n      },\n      move: moveTeleport,\n      hydrate: hydrateTeleport\n  };\n  function moveTeleport(vnode, container, parentAnchor, { o: { insert }, m: move }, moveType = 2 /* TeleportMoveTypes.REORDER */) {\n      // move target anchor if this is a target change.\n      if (moveType === 0 /* TeleportMoveTypes.TARGET_CHANGE */) {\n          insert(vnode.targetAnchor, container, parentAnchor);\n      }\n      const { el, anchor, shapeFlag, children, props } = vnode;\n      const isReorder = moveType === 2 /* TeleportMoveTypes.REORDER */;\n      // move main view anchor if this is a re-order.\n      if (isReorder) {\n          insert(el, container, parentAnchor);\n      }\n      // if this is a re-order and teleport is enabled (content is in target)\n      // do not move children. So the opposite is: only move children if this\n      // is not a reorder, or the teleport is disabled\n      if (!isReorder || isTeleportDisabled(props)) {\n          // Teleport has either Array children or no children.\n          if (shapeFlag & 16 /* ShapeFlags.ARRAY_CHILDREN */) {\n              for (let i = 0; i < children.length; i++) {\n                  move(children[i], container, parentAnchor, 2 /* MoveType.REORDER */);\n              }\n          }\n      }\n      // move main view anchor if this is a re-order.\n      if (isReorder) {\n          insert(anchor, container, parentAnchor);\n      }\n  }\n  function hydrateTeleport(node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized, { o: { nextSibling, parentNode, querySelector } }, hydrateChildren) {\n      const target = (vnode.target = resolveTarget(vnode.props, querySelector));\n      if (target) {\n          // if multiple teleports rendered to the same target element, we need to\n          // pick up from where the last teleport finished instead of the first node\n          const targetNode = target._lpa || target.firstChild;\n          if (vnode.shapeFlag & 16 /* ShapeFlags.ARRAY_CHILDREN */) {\n              if (isTeleportDisabled(vnode.props)) {\n                  vnode.anchor = hydrateChildren(nextSibling(node), vnode, parentNode(node), parentComponent, parentSuspense, slotScopeIds, optimized);\n                  vnode.targetAnchor = targetNode;\n              }\n              else {\n                  vnode.anchor = nextSibling(node);\n                  // lookahead until we find the target anchor\n                  // we cannot rely on return value of hydrateChildren() because there\n                  // could be nested teleports\n                  let targetAnchor = targetNode;\n                  while (targetAnchor) {\n                      targetAnchor = nextSibling(targetAnchor);\n                      if (targetAnchor &&\n                          targetAnchor.nodeType === 8 &&\n                          targetAnchor.data === 'teleport anchor') {\n                          vnode.targetAnchor = targetAnchor;\n                          target._lpa =\n                              vnode.targetAnchor && nextSibling(vnode.targetAnchor);\n                          break;\n                      }\n                  }\n                  hydrateChildren(targetNode, vnode, target, parentComponent, parentSuspense, slotScopeIds, optimized);\n              }\n          }\n          updateCssVars(vnode);\n      }\n      return vnode.anchor && nextSibling(vnode.anchor);\n  }\n  // Force-casted public typing for h and TSX props inference\n  const Teleport = TeleportImpl;\n  function updateCssVars(vnode) {\n      // presence of .ut method indicates owner component uses css vars.\n      // code path here can assume browser environment.\n      const ctx = vnode.ctx;\n      if (ctx && ctx.ut) {\n          let node = vnode.children[0].el;\n          while (node !== vnode.targetAnchor) {\n              if (node.nodeType === 1)\n                  node.setAttribute('data-v-owner', ctx.uid);\n              node = node.nextSibling;\n          }\n          ctx.ut();\n      }\n  }\n\n  const Fragment = Symbol('Fragment' );\n  const Text = Symbol('Text' );\n  const Comment = Symbol('Comment' );\n  const Static = Symbol('Static' );\n  // Since v-if and v-for are the two possible ways node structure can dynamically\n  // change, once we consider v-if branches and each v-for fragment a block, we\n  // can divide a template into nested blocks, and within each block the node\n  // structure would be stable. This allows us to skip most children diffing\n  // and only worry about the dynamic nodes (indicated by patch flags).\n  const blockStack = [];\n  let currentBlock = null;\n  /**\n   * Open a block.\n   * This must be called before `createBlock`. It cannot be part of `createBlock`\n   * because the children of the block are evaluated before `createBlock` itself\n   * is called. The generated code typically looks like this:\n   *\n   * ```js\n   * function render() {\n   *   return (openBlock(),createBlock('div', null, [...]))\n   * }\n   * ```\n   * disableTracking is true when creating a v-for fragment block, since a v-for\n   * fragment always diffs its children.\n   *\n   * @private\n   */\n  function openBlock(disableTracking = false) {\n      blockStack.push((currentBlock = disableTracking ? null : []));\n  }\n  function closeBlock() {\n      blockStack.pop();\n      currentBlock = blockStack[blockStack.length - 1] || null;\n  }\n  // Whether we should be tracking dynamic child nodes inside a block.\n  // Only tracks when this value is > 0\n  // We are not using a simple boolean because this value may need to be\n  // incremented/decremented by nested usage of v-once (see below)\n  let isBlockTreeEnabled = 1;\n  /**\n   * Block tracking sometimes needs to be disabled, for example during the\n   * creation of a tree that needs to be cached by v-once. The compiler generates\n   * code like this:\n   *\n   * ``` js\n   * _cache[1] || (\n   *   setBlockTracking(-1),\n   *   _cache[1] = createVNode(...),\n   *   setBlockTracking(1),\n   *   _cache[1]\n   * )\n   * ```\n   *\n   * @private\n   */\n  function setBlockTracking(value) {\n      isBlockTreeEnabled += value;\n  }\n  function setupBlock(vnode) {\n      // save current block children on the block vnode\n      vnode.dynamicChildren =\n          isBlockTreeEnabled > 0 ? currentBlock || EMPTY_ARR : null;\n      // close block\n      closeBlock();\n      // a block is always going to be patched, so track it as a child of its\n      // parent block\n      if (isBlockTreeEnabled > 0 && currentBlock) {\n          currentBlock.push(vnode);\n      }\n      return vnode;\n  }\n  /**\n   * @private\n   */\n  function createElementBlock(type, props, children, patchFlag, dynamicProps, shapeFlag) {\n      return setupBlock(createBaseVNode(type, props, children, patchFlag, dynamicProps, shapeFlag, true /* isBlock */));\n  }\n  /**\n   * Create a block root vnode. Takes the same exact arguments as `createVNode`.\n   * A block root keeps track of dynamic nodes within the block in the\n   * `dynamicChildren` array.\n   *\n   * @private\n   */\n  function createBlock(type, props, children, patchFlag, dynamicProps) {\n      return setupBlock(createVNode(type, props, children, patchFlag, dynamicProps, true /* isBlock: prevent a block from tracking itself */));\n  }\n  function isVNode(value) {\n      return value ? value.__v_isVNode === true : false;\n  }\n  function isSameVNodeType(n1, n2) {\n      if (n2.shapeFlag & 6 /* ShapeFlags.COMPONENT */ &&\n          hmrDirtyComponents.has(n2.type)) {\n          // #7042, ensure the vnode being unmounted during HMR\n          // bitwise operations to remove keep alive flags\n          n1.shapeFlag &= ~256 /* ShapeFlags.COMPONENT_SHOULD_KEEP_ALIVE */;\n          n2.shapeFlag &= ~512 /* ShapeFlags.COMPONENT_KEPT_ALIVE */;\n          // HMR only: if the component has been hot-updated, force a reload.\n          return false;\n      }\n      return n1.type === n2.type && n1.key === n2.key;\n  }\n  let vnodeArgsTransformer;\n  /**\n   * Internal API for registering an arguments transform for createVNode\n   * used for creating stubs in the test-utils\n   * It is *internal* but needs to be exposed for test-utils to pick up proper\n   * typings\n   */\n  function transformVNodeArgs(transformer) {\n      vnodeArgsTransformer = transformer;\n  }\n  const createVNodeWithArgsTransform = (...args) => {\n      return _createVNode(...(vnodeArgsTransformer\n          ? vnodeArgsTransformer(args, currentRenderingInstance)\n          : args));\n  };\n  const InternalObjectKey = `__vInternal`;\n  const normalizeKey = ({ key }) => key != null ? key : null;\n  const normalizeRef = ({ ref, ref_key, ref_for }) => {\n      return (ref != null\n          ? isString(ref) || isRef(ref) || isFunction(ref)\n              ? { i: currentRenderingInstance, r: ref, k: ref_key, f: !!ref_for }\n              : ref\n          : null);\n  };\n  function createBaseVNode(type, props = null, children = null, patchFlag = 0, dynamicProps = null, shapeFlag = type === Fragment ? 0 : 1 /* ShapeFlags.ELEMENT */, isBlockNode = false, needFullChildrenNormalization = false) {\n      const vnode = {\n          __v_isVNode: true,\n          __v_skip: true,\n          type,\n          props,\n          key: props && normalizeKey(props),\n          ref: props && normalizeRef(props),\n          scopeId: currentScopeId,\n          slotScopeIds: null,\n          children,\n          component: null,\n          suspense: null,\n          ssContent: null,\n          ssFallback: null,\n          dirs: null,\n          transition: null,\n          el: null,\n          anchor: null,\n          target: null,\n          targetAnchor: null,\n          staticCount: 0,\n          shapeFlag,\n          patchFlag,\n          dynamicProps,\n          dynamicChildren: null,\n          appContext: null,\n          ctx: currentRenderingInstance\n      };\n      if (needFullChildrenNormalization) {\n          normalizeChildren(vnode, children);\n          // normalize suspense children\n          if (shapeFlag & 128 /* ShapeFlags.SUSPENSE */) {\n              type.normalize(vnode);\n          }\n      }\n      else if (children) {\n          // compiled element vnode - if children is passed, only possible types are\n          // string or Array.\n          vnode.shapeFlag |= isString(children)\n              ? 8 /* ShapeFlags.TEXT_CHILDREN */\n              : 16 /* ShapeFlags.ARRAY_CHILDREN */;\n      }\n      // validate key\n      if (vnode.key !== vnode.key) {\n          warn(`VNode created with invalid key (NaN). VNode type:`, vnode.type);\n      }\n      // track vnode for block tree\n      if (isBlockTreeEnabled > 0 &&\n          // avoid a block node from tracking itself\n          !isBlockNode &&\n          // has current parent block\n          currentBlock &&\n          // presence of a patch flag indicates this node needs patching on updates.\n          // component nodes also should always be patched, because even if the\n          // component doesn't need to update, it needs to persist the instance on to\n          // the next vnode so that it can be properly unmounted later.\n          (vnode.patchFlag > 0 || shapeFlag & 6 /* ShapeFlags.COMPONENT */) &&\n          // the EVENTS flag is only for hydration and if it is the only flag, the\n          // vnode should not be considered dynamic due to handler caching.\n          vnode.patchFlag !== 32 /* PatchFlags.HYDRATE_EVENTS */) {\n          currentBlock.push(vnode);\n      }\n      return vnode;\n  }\n  const createVNode = (createVNodeWithArgsTransform );\n  function _createVNode(type, props = null, children = null, patchFlag = 0, dynamicProps = null, isBlockNode = false) {\n      if (!type || type === NULL_DYNAMIC_COMPONENT) {\n          if (!type) {\n              warn(`Invalid vnode type when creating vnode: ${type}.`);\n          }\n          type = Comment;\n      }\n      if (isVNode(type)) {\n          // createVNode receiving an existing vnode. This happens in cases like\n          // <component :is=\"vnode\"/>\n          // #2078 make sure to merge refs during the clone instead of overwriting it\n          const cloned = cloneVNode(type, props, true /* mergeRef: true */);\n          if (children) {\n              normalizeChildren(cloned, children);\n          }\n          if (isBlockTreeEnabled > 0 && !isBlockNode && currentBlock) {\n              if (cloned.shapeFlag & 6 /* ShapeFlags.COMPONENT */) {\n                  currentBlock[currentBlock.indexOf(type)] = cloned;\n              }\n              else {\n                  currentBlock.push(cloned);\n              }\n          }\n          cloned.patchFlag |= -2 /* PatchFlags.BAIL */;\n          return cloned;\n      }\n      // class component normalization.\n      if (isClassComponent(type)) {\n          type = type.__vccOpts;\n      }\n      // class & style normalization.\n      if (props) {\n          // for reactive or proxy objects, we need to clone it to enable mutation.\n          props = guardReactiveProps(props);\n          let { class: klass, style } = props;\n          if (klass && !isString(klass)) {\n              props.class = normalizeClass(klass);\n          }\n          if (isObject(style)) {\n              // reactive state objects need to be cloned since they are likely to be\n              // mutated\n              if (isProxy(style) && !isArray(style)) {\n                  style = extend({}, style);\n              }\n              props.style = normalizeStyle(style);\n          }\n      }\n      // encode the vnode type information into a bitmap\n      const shapeFlag = isString(type)\n          ? 1 /* ShapeFlags.ELEMENT */\n          : isSuspense(type)\n              ? 128 /* ShapeFlags.SUSPENSE */\n              : isTeleport(type)\n                  ? 64 /* ShapeFlags.TELEPORT */\n                  : isObject(type)\n                      ? 4 /* ShapeFlags.STATEFUL_COMPONENT */\n                      : isFunction(type)\n                          ? 2 /* ShapeFlags.FUNCTIONAL_COMPONENT */\n                          : 0;\n      if (shapeFlag & 4 /* ShapeFlags.STATEFUL_COMPONENT */ && isProxy(type)) {\n          type = toRaw(type);\n          warn(`Vue received a Component which was made a reactive object. This can ` +\n              `lead to unnecessary performance overhead, and should be avoided by ` +\n              `marking the component with \\`markRaw\\` or using \\`shallowRef\\` ` +\n              `instead of \\`ref\\`.`, `\\nComponent that was made reactive: `, type);\n      }\n      return createBaseVNode(type, props, children, patchFlag, dynamicProps, shapeFlag, isBlockNode, true);\n  }\n  function guardReactiveProps(props) {\n      if (!props)\n          return null;\n      return isProxy(props) || InternalObjectKey in props\n          ? extend({}, props)\n          : props;\n  }\n  function cloneVNode(vnode, extraProps, mergeRef = false) {\n      // This is intentionally NOT using spread or extend to avoid the runtime\n      // key enumeration cost.\n      const { props, ref, patchFlag, children } = vnode;\n      const mergedProps = extraProps ? mergeProps(props || {}, extraProps) : props;\n      const cloned = {\n          __v_isVNode: true,\n          __v_skip: true,\n          type: vnode.type,\n          props: mergedProps,\n          key: mergedProps && normalizeKey(mergedProps),\n          ref: extraProps && extraProps.ref\n              ? // #2078 in the case of <component :is=\"vnode\" ref=\"extra\"/>\n                  // if the vnode itself already has a ref, cloneVNode will need to merge\n                  // the refs so the single vnode can be set on multiple refs\n                  mergeRef && ref\n                      ? isArray(ref)\n                          ? ref.concat(normalizeRef(extraProps))\n                          : [ref, normalizeRef(extraProps)]\n                      : normalizeRef(extraProps)\n              : ref,\n          scopeId: vnode.scopeId,\n          slotScopeIds: vnode.slotScopeIds,\n          children: patchFlag === -1 /* PatchFlags.HOISTED */ && isArray(children)\n              ? children.map(deepCloneVNode)\n              : children,\n          target: vnode.target,\n          targetAnchor: vnode.targetAnchor,\n          staticCount: vnode.staticCount,\n          shapeFlag: vnode.shapeFlag,\n          // if the vnode is cloned with extra props, we can no longer assume its\n          // existing patch flag to be reliable and need to add the FULL_PROPS flag.\n          // note: preserve flag for fragments since they use the flag for children\n          // fast paths only.\n          patchFlag: extraProps && vnode.type !== Fragment\n              ? patchFlag === -1 // hoisted node\n                  ? 16 /* PatchFlags.FULL_PROPS */\n                  : patchFlag | 16 /* PatchFlags.FULL_PROPS */\n              : patchFlag,\n          dynamicProps: vnode.dynamicProps,\n          dynamicChildren: vnode.dynamicChildren,\n          appContext: vnode.appContext,\n          dirs: vnode.dirs,\n          transition: vnode.transition,\n          // These should technically only be non-null on mounted VNodes. However,\n          // they *should* be copied for kept-alive vnodes. So we just always copy\n          // them since them being non-null during a mount doesn't affect the logic as\n          // they will simply be overwritten.\n          component: vnode.component,\n          suspense: vnode.suspense,\n          ssContent: vnode.ssContent && cloneVNode(vnode.ssContent),\n          ssFallback: vnode.ssFallback && cloneVNode(vnode.ssFallback),\n          el: vnode.el,\n          anchor: vnode.anchor,\n          ctx: vnode.ctx,\n          ce: vnode.ce\n      };\n      return cloned;\n  }\n  /**\n   * Dev only, for HMR of hoisted vnodes reused in v-for\n   * https://github.com/vitejs/vite/issues/2022\n   */\n  function deepCloneVNode(vnode) {\n      const cloned = cloneVNode(vnode);\n      if (isArray(vnode.children)) {\n          cloned.children = vnode.children.map(deepCloneVNode);\n      }\n      return cloned;\n  }\n  /**\n   * @private\n   */\n  function createTextVNode(text = ' ', flag = 0) {\n      return createVNode(Text, null, text, flag);\n  }\n  /**\n   * @private\n   */\n  function createStaticVNode(content, numberOfNodes) {\n      // A static vnode can contain multiple stringified elements, and the number\n      // of elements is necessary for hydration.\n      const vnode = createVNode(Static, null, content);\n      vnode.staticCount = numberOfNodes;\n      return vnode;\n  }\n  /**\n   * @private\n   */\n  function createCommentVNode(text = '', \n  // when used as the v-else branch, the comment node must be created as a\n  // block to ensure correct updates.\n  asBlock = false) {\n      return asBlock\n          ? (openBlock(), createBlock(Comment, null, text))\n          : createVNode(Comment, null, text);\n  }\n  function normalizeVNode(child) {\n      if (child == null || typeof child === 'boolean') {\n          // empty placeholder\n          return createVNode(Comment);\n      }\n      else if (isArray(child)) {\n          // fragment\n          return createVNode(Fragment, null, \n          // #3666, avoid reference pollution when reusing vnode\n          child.slice());\n      }\n      else if (typeof child === 'object') {\n          // already vnode, this should be the most common since compiled templates\n          // always produce all-vnode children arrays\n          return cloneIfMounted(child);\n      }\n      else {\n          // strings and numbers\n          return createVNode(Text, null, String(child));\n      }\n  }\n  // optimized normalization for template-compiled render fns\n  function cloneIfMounted(child) {\n      return (child.el === null && child.patchFlag !== -1 /* PatchFlags.HOISTED */) ||\n          child.memo\n          ? child\n          : cloneVNode(child);\n  }\n  function normalizeChildren(vnode, children) {\n      let type = 0;\n      const { shapeFlag } = vnode;\n      if (children == null) {\n          children = null;\n      }\n      else if (isArray(children)) {\n          type = 16 /* ShapeFlags.ARRAY_CHILDREN */;\n      }\n      else if (typeof children === 'object') {\n          if (shapeFlag & (1 /* ShapeFlags.ELEMENT */ | 64 /* ShapeFlags.TELEPORT */)) {\n              // Normalize slot to plain children for plain element and Teleport\n              const slot = children.default;\n              if (slot) {\n                  // _c marker is added by withCtx() indicating this is a compiled slot\n                  slot._c && (slot._d = false);\n                  normalizeChildren(vnode, slot());\n                  slot._c && (slot._d = true);\n              }\n              return;\n          }\n          else {\n              type = 32 /* ShapeFlags.SLOTS_CHILDREN */;\n              const slotFlag = children._;\n              if (!slotFlag && !(InternalObjectKey in children)) {\n                  children._ctx = currentRenderingInstance;\n              }\n              else if (slotFlag === 3 /* SlotFlags.FORWARDED */ && currentRenderingInstance) {\n                  // a child component receives forwarded slots from the parent.\n                  // its slot type is determined by its parent's slot type.\n                  if (currentRenderingInstance.slots._ === 1 /* SlotFlags.STABLE */) {\n                      children._ = 1 /* SlotFlags.STABLE */;\n                  }\n                  else {\n                      children._ = 2 /* SlotFlags.DYNAMIC */;\n                      vnode.patchFlag |= 1024 /* PatchFlags.DYNAMIC_SLOTS */;\n                  }\n              }\n          }\n      }\n      else if (isFunction(children)) {\n          children = { default: children, _ctx: currentRenderingInstance };\n          type = 32 /* ShapeFlags.SLOTS_CHILDREN */;\n      }\n      else {\n          children = String(children);\n          // force teleport children to array so it can be moved around\n          if (shapeFlag & 64 /* ShapeFlags.TELEPORT */) {\n              type = 16 /* ShapeFlags.ARRAY_CHILDREN */;\n              children = [createTextVNode(children)];\n          }\n          else {\n              type = 8 /* ShapeFlags.TEXT_CHILDREN */;\n          }\n      }\n      vnode.children = children;\n      vnode.shapeFlag |= type;\n  }\n  function mergeProps(...args) {\n      const ret = {};\n      for (let i = 0; i < args.length; i++) {\n          const toMerge = args[i];\n          for (const key in toMerge) {\n              if (key === 'class') {\n                  if (ret.class !== toMerge.class) {\n                      ret.class = normalizeClass([ret.class, toMerge.class]);\n                  }\n              }\n              else if (key === 'style') {\n                  ret.style = normalizeStyle([ret.style, toMerge.style]);\n              }\n              else if (isOn(key)) {\n                  const existing = ret[key];\n                  const incoming = toMerge[key];\n                  if (incoming &&\n                      existing !== incoming &&\n                      !(isArray(existing) && existing.includes(incoming))) {\n                      ret[key] = existing\n                          ? [].concat(existing, incoming)\n                          : incoming;\n                  }\n              }\n              else if (key !== '') {\n                  ret[key] = toMerge[key];\n              }\n          }\n      }\n      return ret;\n  }\n  function invokeVNodeHook(hook, instance, vnode, prevVNode = null) {\n      callWithAsyncErrorHandling(hook, instance, 7 /* ErrorCodes.VNODE_HOOK */, [\n          vnode,\n          prevVNode\n      ]);\n  }\n\n  const emptyAppContext = createAppContext();\n  let uid = 0;\n  function createComponentInstance(vnode, parent, suspense) {\n      const type = vnode.type;\n      // inherit parent app context - or - if root, adopt from root vnode\n      const appContext = (parent ? parent.appContext : vnode.appContext) || emptyAppContext;\n      const instance = {\n          uid: uid++,\n          vnode,\n          type,\n          parent,\n          appContext,\n          root: null,\n          next: null,\n          subTree: null,\n          effect: null,\n          update: null,\n          scope: new EffectScope(true /* detached */),\n          render: null,\n          proxy: null,\n          exposed: null,\n          exposeProxy: null,\n          withProxy: null,\n          provides: parent ? parent.provides : Object.create(appContext.provides),\n          accessCache: null,\n          renderCache: [],\n          // local resolved assets\n          components: null,\n          directives: null,\n          // resolved props and emits options\n          propsOptions: normalizePropsOptions(type, appContext),\n          emitsOptions: normalizeEmitsOptions(type, appContext),\n          // emit\n          emit: null,\n          emitted: null,\n          // props default value\n          propsDefaults: EMPTY_OBJ,\n          // inheritAttrs\n          inheritAttrs: type.inheritAttrs,\n          // state\n          ctx: EMPTY_OBJ,\n          data: EMPTY_OBJ,\n          props: EMPTY_OBJ,\n          attrs: EMPTY_OBJ,\n          slots: EMPTY_OBJ,\n          refs: EMPTY_OBJ,\n          setupState: EMPTY_OBJ,\n          setupContext: null,\n          // suspense related\n          suspense,\n          suspenseId: suspense ? suspense.pendingId : 0,\n          asyncDep: null,\n          asyncResolved: false,\n          // lifecycle hooks\n          // not using enums here because it results in computed properties\n          isMounted: false,\n          isUnmounted: false,\n          isDeactivated: false,\n          bc: null,\n          c: null,\n          bm: null,\n          m: null,\n          bu: null,\n          u: null,\n          um: null,\n          bum: null,\n          da: null,\n          a: null,\n          rtg: null,\n          rtc: null,\n          ec: null,\n          sp: null\n      };\n      {\n          instance.ctx = createDevRenderContext(instance);\n      }\n      instance.root = parent ? parent.root : instance;\n      instance.emit = emit.bind(null, instance);\n      // apply custom element special handling\n      if (vnode.ce) {\n          vnode.ce(instance);\n      }\n      return instance;\n  }\n  let currentInstance = null;\n  const getCurrentInstance = () => currentInstance || currentRenderingInstance;\n  const setCurrentInstance = (instance) => {\n      currentInstance = instance;\n      instance.scope.on();\n  };\n  const unsetCurrentInstance = () => {\n      currentInstance && currentInstance.scope.off();\n      currentInstance = null;\n  };\n  const isBuiltInTag = /*#__PURE__*/ makeMap('slot,component');\n  function validateComponentName(name, config) {\n      const appIsNativeTag = config.isNativeTag || NO;\n      if (isBuiltInTag(name) || appIsNativeTag(name)) {\n          warn('Do not use built-in or reserved HTML elements as component id: ' + name);\n      }\n  }\n  function isStatefulComponent(instance) {\n      return instance.vnode.shapeFlag & 4 /* ShapeFlags.STATEFUL_COMPONENT */;\n  }\n  let isInSSRComponentSetup = false;\n  function setupComponent(instance, isSSR = false) {\n      isInSSRComponentSetup = isSSR;\n      const { props, children } = instance.vnode;\n      const isStateful = isStatefulComponent(instance);\n      initProps(instance, props, isStateful, isSSR);\n      initSlots(instance, children);\n      const setupResult = isStateful\n          ? setupStatefulComponent(instance, isSSR)\n          : undefined;\n      isInSSRComponentSetup = false;\n      return setupResult;\n  }\n  function setupStatefulComponent(instance, isSSR) {\n      var _a;\n      const Component = instance.type;\n      {\n          if (Component.name) {\n              validateComponentName(Component.name, instance.appContext.config);\n          }\n          if (Component.components) {\n              const names = Object.keys(Component.components);\n              for (let i = 0; i < names.length; i++) {\n                  validateComponentName(names[i], instance.appContext.config);\n              }\n          }\n          if (Component.directives) {\n              const names = Object.keys(Component.directives);\n              for (let i = 0; i < names.length; i++) {\n                  validateDirectiveName(names[i]);\n              }\n          }\n          if (Component.compilerOptions && isRuntimeOnly()) {\n              warn(`\"compilerOptions\" is only supported when using a build of Vue that ` +\n                  `includes the runtime compiler. Since you are using a runtime-only ` +\n                  `build, the options should be passed via your build tool config instead.`);\n          }\n      }\n      // 0. create render proxy property access cache\n      instance.accessCache = Object.create(null);\n      // 1. create public instance / render proxy\n      // also mark it raw so it's never observed\n      instance.proxy = markRaw(new Proxy(instance.ctx, PublicInstanceProxyHandlers));\n      {\n          exposePropsOnRenderContext(instance);\n      }\n      // 2. call setup()\n      const { setup } = Component;\n      if (setup) {\n          const setupContext = (instance.setupContext =\n              setup.length > 1 ? createSetupContext(instance) : null);\n          setCurrentInstance(instance);\n          pauseTracking();\n          const setupResult = callWithErrorHandling(setup, instance, 0 /* ErrorCodes.SETUP_FUNCTION */, [shallowReadonly(instance.props) , setupContext]);\n          resetTracking();\n          unsetCurrentInstance();\n          if (isPromise(setupResult)) {\n              setupResult.then(unsetCurrentInstance, unsetCurrentInstance);\n              if (isSSR) {\n                  // return the promise so server-renderer can wait on it\n                  return setupResult\n                      .then((resolvedResult) => {\n                      handleSetupResult(instance, resolvedResult, isSSR);\n                  })\n                      .catch(e => {\n                      handleError(e, instance, 0 /* ErrorCodes.SETUP_FUNCTION */);\n                  });\n              }\n              else {\n                  // async setup returned Promise.\n                  // bail here and wait for re-entry.\n                  instance.asyncDep = setupResult;\n                  if (!instance.suspense) {\n                      const name = (_a = Component.name) !== null && _a !== void 0 ? _a : 'Anonymous';\n                      warn(`Component <${name}>: setup function returned a promise, but no ` +\n                          `<Suspense> boundary was found in the parent component tree. ` +\n                          `A component with async setup() must be nested in a <Suspense> ` +\n                          `in order to be rendered.`);\n                  }\n              }\n          }\n          else {\n              handleSetupResult(instance, setupResult, isSSR);\n          }\n      }\n      else {\n          finishComponentSetup(instance, isSSR);\n      }\n  }\n  function handleSetupResult(instance, setupResult, isSSR) {\n      if (isFunction(setupResult)) {\n          // setup returned an inline render function\n          {\n              instance.render = setupResult;\n          }\n      }\n      else if (isObject(setupResult)) {\n          if (isVNode(setupResult)) {\n              warn(`setup() should not return VNodes directly - ` +\n                  `return a render function instead.`);\n          }\n          // setup returned bindings.\n          // assuming a render function compiled from template is present.\n          {\n              instance.devtoolsRawSetupState = setupResult;\n          }\n          instance.setupState = proxyRefs(setupResult);\n          {\n              exposeSetupStateOnRenderContext(instance);\n          }\n      }\n      else if (setupResult !== undefined) {\n          warn(`setup() should return an object. Received: ${setupResult === null ? 'null' : typeof setupResult}`);\n      }\n      finishComponentSetup(instance, isSSR);\n  }\n  let compile;\n  let installWithProxy;\n  /**\n   * For runtime-dom to register the compiler.\n   * Note the exported method uses any to avoid d.ts relying on the compiler types.\n   */\n  function registerRuntimeCompiler(_compile) {\n      compile = _compile;\n      installWithProxy = i => {\n          if (i.render._rc) {\n              i.withProxy = new Proxy(i.ctx, RuntimeCompiledPublicInstanceProxyHandlers);\n          }\n      };\n  }\n  // dev only\n  const isRuntimeOnly = () => !compile;\n  function finishComponentSetup(instance, isSSR, skipOptions) {\n      const Component = instance.type;\n      // template / render function normalization\n      // could be already set when returned from setup()\n      if (!instance.render) {\n          // only do on-the-fly compile if not in SSR - SSR on-the-fly compilation\n          // is done by server-renderer\n          if (!isSSR && compile && !Component.render) {\n              const template = Component.template ||\n                  resolveMergedOptions(instance).template;\n              if (template) {\n                  {\n                      startMeasure(instance, `compile`);\n                  }\n                  const { isCustomElement, compilerOptions } = instance.appContext.config;\n                  const { delimiters, compilerOptions: componentCompilerOptions } = Component;\n                  const finalCompilerOptions = extend(extend({\n                      isCustomElement,\n                      delimiters\n                  }, compilerOptions), componentCompilerOptions);\n                  Component.render = compile(template, finalCompilerOptions);\n                  {\n                      endMeasure(instance, `compile`);\n                  }\n              }\n          }\n          instance.render = (Component.render || NOOP);\n          // for runtime-compiled render functions using `with` blocks, the render\n          // proxy used needs a different `has` handler which is more performant and\n          // also only allows a whitelist of globals to fallthrough.\n          if (installWithProxy) {\n              installWithProxy(instance);\n          }\n      }\n      // support for 2.x options\n      {\n          setCurrentInstance(instance);\n          pauseTracking();\n          applyOptions(instance);\n          resetTracking();\n          unsetCurrentInstance();\n      }\n      // warn missing template/render\n      // the runtime compilation of template in SSR is done by server-render\n      if (!Component.render && instance.render === NOOP && !isSSR) {\n          /* istanbul ignore if */\n          if (!compile && Component.template) {\n              warn(`Component provided template option but ` +\n                  `runtime compilation is not supported in this build of Vue.` +\n                  (` Use \"vue.global.js\" instead.`\n                              ) /* should not happen */);\n          }\n          else {\n              warn(`Component is missing template or render function.`);\n          }\n      }\n  }\n  function createAttrsProxy(instance) {\n      return new Proxy(instance.attrs, {\n              get(target, key) {\n                  markAttrsAccessed();\n                  track(instance, \"get\" /* TrackOpTypes.GET */, '$attrs');\n                  return target[key];\n              },\n              set() {\n                  warn(`setupContext.attrs is readonly.`);\n                  return false;\n              },\n              deleteProperty() {\n                  warn(`setupContext.attrs is readonly.`);\n                  return false;\n              }\n          }\n          );\n  }\n  function createSetupContext(instance) {\n      const expose = exposed => {\n          {\n              if (instance.exposed) {\n                  warn(`expose() should be called only once per setup().`);\n              }\n              if (exposed != null) {\n                  let exposedType = typeof exposed;\n                  if (exposedType === 'object') {\n                      if (isArray(exposed)) {\n                          exposedType = 'array';\n                      }\n                      else if (isRef(exposed)) {\n                          exposedType = 'ref';\n                      }\n                  }\n                  if (exposedType !== 'object') {\n                      warn(`expose() should be passed a plain object, received ${exposedType}.`);\n                  }\n              }\n          }\n          instance.exposed = exposed || {};\n      };\n      let attrs;\n      {\n          // We use getters in dev in case libs like test-utils overwrite instance\n          // properties (overwrites should not be done in prod)\n          return Object.freeze({\n              get attrs() {\n                  return attrs || (attrs = createAttrsProxy(instance));\n              },\n              get slots() {\n                  return shallowReadonly(instance.slots);\n              },\n              get emit() {\n                  return (event, ...args) => instance.emit(event, ...args);\n              },\n              expose\n          });\n      }\n  }\n  function getExposeProxy(instance) {\n      if (instance.exposed) {\n          return (instance.exposeProxy ||\n              (instance.exposeProxy = new Proxy(proxyRefs(markRaw(instance.exposed)), {\n                  get(target, key) {\n                      if (key in target) {\n                          return target[key];\n                      }\n                      else if (key in publicPropertiesMap) {\n                          return publicPropertiesMap[key](instance);\n                      }\n                  },\n                  has(target, key) {\n                      return key in target || key in publicPropertiesMap;\n                  }\n              })));\n      }\n  }\n  const classifyRE = /(?:^|[-_])(\\w)/g;\n  const classify = (str) => str.replace(classifyRE, c => c.toUpperCase()).replace(/[-_]/g, '');\n  function getComponentName(Component, includeInferred = true) {\n      return isFunction(Component)\n          ? Component.displayName || Component.name\n          : Component.name || (includeInferred && Component.__name);\n  }\n  /* istanbul ignore next */\n  function formatComponentName(instance, Component, isRoot = false) {\n      let name = getComponentName(Component);\n      if (!name && Component.__file) {\n          const match = Component.__file.match(/([^/\\\\]+)\\.\\w+$/);\n          if (match) {\n              name = match[1];\n          }\n      }\n      if (!name && instance && instance.parent) {\n          // try to infer the name based on reverse resolution\n          const inferFromRegistry = (registry) => {\n              for (const key in registry) {\n                  if (registry[key] === Component) {\n                      return key;\n                  }\n              }\n          };\n          name =\n              inferFromRegistry(instance.components ||\n                  instance.parent.type.components) || inferFromRegistry(instance.appContext.components);\n      }\n      return name ? classify(name) : isRoot ? `App` : `Anonymous`;\n  }\n  function isClassComponent(value) {\n      return isFunction(value) && '__vccOpts' in value;\n  }\n\n  const computed = ((getterOrOptions, debugOptions) => {\n      // @ts-ignore\n      return computed$1(getterOrOptions, debugOptions, isInSSRComponentSetup);\n  });\n\n  // dev only\n  const warnRuntimeUsage = (method) => warn(`${method}() is a compiler-hint helper that is only usable inside ` +\n      `<script setup> of a single file component. Its arguments should be ` +\n      `compiled away and passing it at runtime has no effect.`);\n  // implementation\n  function defineProps() {\n      {\n          warnRuntimeUsage(`defineProps`);\n      }\n      return null;\n  }\n  // implementation\n  function defineEmits() {\n      {\n          warnRuntimeUsage(`defineEmits`);\n      }\n      return null;\n  }\n  /**\n   * Vue `<script setup>` compiler macro for declaring a component's exposed\n   * instance properties when it is accessed by a parent component via template\n   * refs.\n   *\n   * `<script setup>` components are closed by default - i.e. variables inside\n   * the `<script setup>` scope is not exposed to parent unless explicitly exposed\n   * via `defineExpose`.\n   *\n   * This is only usable inside `<script setup>`, is compiled away in the\n   * output and should **not** be actually called at runtime.\n   */\n  function defineExpose(exposed) {\n      {\n          warnRuntimeUsage(`defineExpose`);\n      }\n  }\n  /**\n   * Vue `<script setup>` compiler macro for providing props default values when\n   * using type-based `defineProps` declaration.\n   *\n   * Example usage:\n   * ```ts\n   * withDefaults(defineProps<{\n   *   size?: number\n   *   labels?: string[]\n   * }>(), {\n   *   size: 3,\n   *   labels: () => ['default label']\n   * })\n   * ```\n   *\n   * This is only usable inside `<script setup>`, is compiled away in the output\n   * and should **not** be actually called at runtime.\n   */\n  function withDefaults(props, defaults) {\n      {\n          warnRuntimeUsage(`withDefaults`);\n      }\n      return null;\n  }\n  function useSlots() {\n      return getContext().slots;\n  }\n  function useAttrs() {\n      return getContext().attrs;\n  }\n  function getContext() {\n      const i = getCurrentInstance();\n      if (!i) {\n          warn(`useContext() called without active instance.`);\n      }\n      return i.setupContext || (i.setupContext = createSetupContext(i));\n  }\n  /**\n   * Runtime helper for merging default declarations. Imported by compiled code\n   * only.\n   * @internal\n   */\n  function mergeDefaults(raw, defaults) {\n      const props = isArray(raw)\n          ? raw.reduce((normalized, p) => ((normalized[p] = {}), normalized), {})\n          : raw;\n      for (const key in defaults) {\n          const opt = props[key];\n          if (opt) {\n              if (isArray(opt) || isFunction(opt)) {\n                  props[key] = { type: opt, default: defaults[key] };\n              }\n              else {\n                  opt.default = defaults[key];\n              }\n          }\n          else if (opt === null) {\n              props[key] = { default: defaults[key] };\n          }\n          else {\n              warn(`props default key \"${key}\" has no corresponding declaration.`);\n          }\n      }\n      return props;\n  }\n  /**\n   * Used to create a proxy for the rest element when destructuring props with\n   * defineProps().\n   * @internal\n   */\n  function createPropsRestProxy(props, excludedKeys) {\n      const ret = {};\n      for (const key in props) {\n          if (!excludedKeys.includes(key)) {\n              Object.defineProperty(ret, key, {\n                  enumerable: true,\n                  get: () => props[key]\n              });\n          }\n      }\n      return ret;\n  }\n  /**\n   * `<script setup>` helper for persisting the current instance context over\n   * async/await flows.\n   *\n   * `@vue/compiler-sfc` converts the following:\n   *\n   * ```ts\n   * const x = await foo()\n   * ```\n   *\n   * into:\n   *\n   * ```ts\n   * let __temp, __restore\n   * const x = (([__temp, __restore] = withAsyncContext(() => foo())),__temp=await __temp,__restore(),__temp)\n   * ```\n   * @internal\n   */\n  function withAsyncContext(getAwaitable) {\n      const ctx = getCurrentInstance();\n      if (!ctx) {\n          warn(`withAsyncContext called without active current instance. ` +\n              `This is likely a bug.`);\n      }\n      let awaitable = getAwaitable();\n      unsetCurrentInstance();\n      if (isPromise(awaitable)) {\n          awaitable = awaitable.catch(e => {\n              setCurrentInstance(ctx);\n              throw e;\n          });\n      }\n      return [awaitable, () => setCurrentInstance(ctx)];\n  }\n\n  // Actual implementation\n  function h(type, propsOrChildren, children) {\n      const l = arguments.length;\n      if (l === 2) {\n          if (isObject(propsOrChildren) && !isArray(propsOrChildren)) {\n              // single vnode without props\n              if (isVNode(propsOrChildren)) {\n                  return createVNode(type, null, [propsOrChildren]);\n              }\n              // props without children\n              return createVNode(type, propsOrChildren);\n          }\n          else {\n              // omit props\n              return createVNode(type, null, propsOrChildren);\n          }\n      }\n      else {\n          if (l > 3) {\n              children = Array.prototype.slice.call(arguments, 2);\n          }\n          else if (l === 3 && isVNode(children)) {\n              children = [children];\n          }\n          return createVNode(type, propsOrChildren, children);\n      }\n  }\n\n  const ssrContextKey = Symbol(`ssrContext` );\n  const useSSRContext = () => {\n      {\n          warn(`useSSRContext() is not supported in the global build.`);\n      }\n  };\n\n  function initCustomFormatter() {\n      /* eslint-disable no-restricted-globals */\n      if (typeof window === 'undefined') {\n          return;\n      }\n      const vueStyle = { style: 'color:#3ba776' };\n      const numberStyle = { style: 'color:#0b1bc9' };\n      const stringStyle = { style: 'color:#b62e24' };\n      const keywordStyle = { style: 'color:#9d288c' };\n      // custom formatter for Chrome\n      // https://www.mattzeunert.com/2016/02/19/custom-chrome-devtools-object-formatters.html\n      const formatter = {\n          header(obj) {\n              // TODO also format ComponentPublicInstance & ctx.slots/attrs in setup\n              if (!isObject(obj)) {\n                  return null;\n              }\n              if (obj.__isVue) {\n                  return ['div', vueStyle, `VueInstance`];\n              }\n              else if (isRef(obj)) {\n                  return [\n                      'div',\n                      {},\n                      ['span', vueStyle, genRefFlag(obj)],\n                      '<',\n                      formatValue(obj.value),\n                      `>`\n                  ];\n              }\n              else if (isReactive(obj)) {\n                  return [\n                      'div',\n                      {},\n                      ['span', vueStyle, isShallow(obj) ? 'ShallowReactive' : 'Reactive'],\n                      '<',\n                      formatValue(obj),\n                      `>${isReadonly(obj) ? ` (readonly)` : ``}`\n                  ];\n              }\n              else if (isReadonly(obj)) {\n                  return [\n                      'div',\n                      {},\n                      ['span', vueStyle, isShallow(obj) ? 'ShallowReadonly' : 'Readonly'],\n                      '<',\n                      formatValue(obj),\n                      '>'\n                  ];\n              }\n              return null;\n          },\n          hasBody(obj) {\n              return obj && obj.__isVue;\n          },\n          body(obj) {\n              if (obj && obj.__isVue) {\n                  return [\n                      'div',\n                      {},\n                      ...formatInstance(obj.$)\n                  ];\n              }\n          }\n      };\n      function formatInstance(instance) {\n          const blocks = [];\n          if (instance.type.props && instance.props) {\n              blocks.push(createInstanceBlock('props', toRaw(instance.props)));\n          }\n          if (instance.setupState !== EMPTY_OBJ) {\n              blocks.push(createInstanceBlock('setup', instance.setupState));\n          }\n          if (instance.data !== EMPTY_OBJ) {\n              blocks.push(createInstanceBlock('data', toRaw(instance.data)));\n          }\n          const computed = extractKeys(instance, 'computed');\n          if (computed) {\n              blocks.push(createInstanceBlock('computed', computed));\n          }\n          const injected = extractKeys(instance, 'inject');\n          if (injected) {\n              blocks.push(createInstanceBlock('injected', injected));\n          }\n          blocks.push([\n              'div',\n              {},\n              [\n                  'span',\n                  {\n                      style: keywordStyle.style + ';opacity:0.66'\n                  },\n                  '$ (internal): '\n              ],\n              ['object', { object: instance }]\n          ]);\n          return blocks;\n      }\n      function createInstanceBlock(type, target) {\n          target = extend({}, target);\n          if (!Object.keys(target).length) {\n              return ['span', {}];\n          }\n          return [\n              'div',\n              { style: 'line-height:1.25em;margin-bottom:0.6em' },\n              [\n                  'div',\n                  {\n                      style: 'color:#476582'\n                  },\n                  type\n              ],\n              [\n                  'div',\n                  {\n                      style: 'padding-left:1.25em'\n                  },\n                  ...Object.keys(target).map(key => {\n                      return [\n                          'div',\n                          {},\n                          ['span', keywordStyle, key + ': '],\n                          formatValue(target[key], false)\n                      ];\n                  })\n              ]\n          ];\n      }\n      function formatValue(v, asRaw = true) {\n          if (typeof v === 'number') {\n              return ['span', numberStyle, v];\n          }\n          else if (typeof v === 'string') {\n              return ['span', stringStyle, JSON.stringify(v)];\n          }\n          else if (typeof v === 'boolean') {\n              return ['span', keywordStyle, v];\n          }\n          else if (isObject(v)) {\n              return ['object', { object: asRaw ? toRaw(v) : v }];\n          }\n          else {\n              return ['span', stringStyle, String(v)];\n          }\n      }\n      function extractKeys(instance, type) {\n          const Comp = instance.type;\n          if (isFunction(Comp)) {\n              return;\n          }\n          const extracted = {};\n          for (const key in instance.ctx) {\n              if (isKeyOfType(Comp, key, type)) {\n                  extracted[key] = instance.ctx[key];\n              }\n          }\n          return extracted;\n      }\n      function isKeyOfType(Comp, key, type) {\n          const opts = Comp[type];\n          if ((isArray(opts) && opts.includes(key)) ||\n              (isObject(opts) && key in opts)) {\n              return true;\n          }\n          if (Comp.extends && isKeyOfType(Comp.extends, key, type)) {\n              return true;\n          }\n          if (Comp.mixins && Comp.mixins.some(m => isKeyOfType(m, key, type))) {\n              return true;\n          }\n      }\n      function genRefFlag(v) {\n          if (isShallow(v)) {\n              return `ShallowRef`;\n          }\n          if (v.effect) {\n              return `ComputedRef`;\n          }\n          return `Ref`;\n      }\n      if (window.devtoolsFormatters) {\n          window.devtoolsFormatters.push(formatter);\n      }\n      else {\n          window.devtoolsFormatters = [formatter];\n      }\n  }\n\n  function withMemo(memo, render, cache, index) {\n      const cached = cache[index];\n      if (cached && isMemoSame(cached, memo)) {\n          return cached;\n      }\n      const ret = render();\n      // shallow clone\n      ret.memo = memo.slice();\n      return (cache[index] = ret);\n  }\n  function isMemoSame(cached, memo) {\n      const prev = cached.memo;\n      if (prev.length != memo.length) {\n          return false;\n      }\n      for (let i = 0; i < prev.length; i++) {\n          if (hasChanged(prev[i], memo[i])) {\n              return false;\n          }\n      }\n      // make sure to let parent block track it when returning cached\n      if (isBlockTreeEnabled > 0 && currentBlock) {\n          currentBlock.push(cached);\n      }\n      return true;\n  }\n\n  // Core API ------------------------------------------------------------------\n  const version = \"3.2.47\";\n  /**\n   * SSR utils for \\@vue/server-renderer. Only exposed in ssr-possible builds.\n   * @internal\n   */\n  const ssrUtils = (null);\n  /**\n   * @internal only exposed in compat builds\n   */\n  const resolveFilter = null;\n  /**\n   * @internal only exposed in compat builds.\n   */\n  const compatUtils = (null);\n\n  const svgNS = 'http://www.w3.org/2000/svg';\n  const doc = (typeof document !== 'undefined' ? document : null);\n  const templateContainer = doc && /*#__PURE__*/ doc.createElement('template');\n  const nodeOps = {\n      insert: (child, parent, anchor) => {\n          parent.insertBefore(child, anchor || null);\n      },\n      remove: child => {\n          const parent = child.parentNode;\n          if (parent) {\n              parent.removeChild(child);\n          }\n      },\n      createElement: (tag, isSVG, is, props) => {\n          const el = isSVG\n              ? doc.createElementNS(svgNS, tag)\n              : doc.createElement(tag, is ? { is } : undefined);\n          if (tag === 'select' && props && props.multiple != null) {\n              el.setAttribute('multiple', props.multiple);\n          }\n          return el;\n      },\n      createText: text => doc.createTextNode(text),\n      createComment: text => doc.createComment(text),\n      setText: (node, text) => {\n          node.nodeValue = text;\n      },\n      setElementText: (el, text) => {\n          el.textContent = text;\n      },\n      parentNode: node => node.parentNode,\n      nextSibling: node => node.nextSibling,\n      querySelector: selector => doc.querySelector(selector),\n      setScopeId(el, id) {\n          el.setAttribute(id, '');\n      },\n      // __UNSAFE__\n      // Reason: innerHTML.\n      // Static content here can only come from compiled templates.\n      // As long as the user only uses trusted templates, this is safe.\n      insertStaticContent(content, parent, anchor, isSVG, start, end) {\n          // <parent> before | first ... last | anchor </parent>\n          const before = anchor ? anchor.previousSibling : parent.lastChild;\n          // #5308 can only take cached path if:\n          // - has a single root node\n          // - nextSibling info is still available\n          if (start && (start === end || start.nextSibling)) {\n              // cached\n              while (true) {\n                  parent.insertBefore(start.cloneNode(true), anchor);\n                  if (start === end || !(start = start.nextSibling))\n                      break;\n              }\n          }\n          else {\n              // fresh insert\n              templateContainer.innerHTML = isSVG ? `<svg>${content}</svg>` : content;\n              const template = templateContainer.content;\n              if (isSVG) {\n                  // remove outer svg wrapper\n                  const wrapper = template.firstChild;\n                  while (wrapper.firstChild) {\n                      template.appendChild(wrapper.firstChild);\n                  }\n                  template.removeChild(wrapper);\n              }\n              parent.insertBefore(template, anchor);\n          }\n          return [\n              // first\n              before ? before.nextSibling : parent.firstChild,\n              // last\n              anchor ? anchor.previousSibling : parent.lastChild\n          ];\n      }\n  };\n\n  // compiler should normalize class + :class bindings on the same element\n  // into a single binding ['staticClass', dynamic]\n  function patchClass(el, value, isSVG) {\n      // directly setting className should be faster than setAttribute in theory\n      // if this is an element during a transition, take the temporary transition\n      // classes into account.\n      const transitionClasses = el._vtc;\n      if (transitionClasses) {\n          value = (value ? [value, ...transitionClasses] : [...transitionClasses]).join(' ');\n      }\n      if (value == null) {\n          el.removeAttribute('class');\n      }\n      else if (isSVG) {\n          el.setAttribute('class', value);\n      }\n      else {\n          el.className = value;\n      }\n  }\n\n  function patchStyle(el, prev, next) {\n      const style = el.style;\n      const isCssString = isString(next);\n      if (next && !isCssString) {\n          if (prev && !isString(prev)) {\n              for (const key in prev) {\n                  if (next[key] == null) {\n                      setStyle(style, key, '');\n                  }\n              }\n          }\n          for (const key in next) {\n              setStyle(style, key, next[key]);\n          }\n      }\n      else {\n          const currentDisplay = style.display;\n          if (isCssString) {\n              if (prev !== next) {\n                  style.cssText = next;\n              }\n          }\n          else if (prev) {\n              el.removeAttribute('style');\n          }\n          // indicates that the `display` of the element is controlled by `v-show`,\n          // so we always keep the current `display` value regardless of the `style`\n          // value, thus handing over control to `v-show`.\n          if ('_vod' in el) {\n              style.display = currentDisplay;\n          }\n      }\n  }\n  const semicolonRE = /[^\\\\];\\s*$/;\n  const importantRE = /\\s*!important$/;\n  function setStyle(style, name, val) {\n      if (isArray(val)) {\n          val.forEach(v => setStyle(style, name, v));\n      }\n      else {\n          if (val == null)\n              val = '';\n          {\n              if (semicolonRE.test(val)) {\n                  warn(`Unexpected semicolon at the end of '${name}' style value: '${val}'`);\n              }\n          }\n          if (name.startsWith('--')) {\n              // custom property definition\n              style.setProperty(name, val);\n          }\n          else {\n              const prefixed = autoPrefix(style, name);\n              if (importantRE.test(val)) {\n                  // !important\n                  style.setProperty(hyphenate(prefixed), val.replace(importantRE, ''), 'important');\n              }\n              else {\n                  style[prefixed] = val;\n              }\n          }\n      }\n  }\n  const prefixes = ['Webkit', 'Moz', 'ms'];\n  const prefixCache = {};\n  function autoPrefix(style, rawName) {\n      const cached = prefixCache[rawName];\n      if (cached) {\n          return cached;\n      }\n      let name = camelize(rawName);\n      if (name !== 'filter' && name in style) {\n          return (prefixCache[rawName] = name);\n      }\n      name = capitalize(name);\n      for (let i = 0; i < prefixes.length; i++) {\n          const prefixed = prefixes[i] + name;\n          if (prefixed in style) {\n              return (prefixCache[rawName] = prefixed);\n          }\n      }\n      return rawName;\n  }\n\n  const xlinkNS = 'http://www.w3.org/1999/xlink';\n  function patchAttr(el, key, value, isSVG, instance) {\n      if (isSVG && key.startsWith('xlink:')) {\n          if (value == null) {\n              el.removeAttributeNS(xlinkNS, key.slice(6, key.length));\n          }\n          else {\n              el.setAttributeNS(xlinkNS, key, value);\n          }\n      }\n      else {\n          // note we are only checking boolean attributes that don't have a\n          // corresponding dom prop of the same name here.\n          const isBoolean = isSpecialBooleanAttr(key);\n          if (value == null || (isBoolean && !includeBooleanAttr(value))) {\n              el.removeAttribute(key);\n          }\n          else {\n              el.setAttribute(key, isBoolean ? '' : value);\n          }\n      }\n  }\n\n  // __UNSAFE__\n  // functions. The user is responsible for using them with only trusted content.\n  function patchDOMProp(el, key, value, \n  // the following args are passed only due to potential innerHTML/textContent\n  // overriding existing VNodes, in which case the old tree must be properly\n  // unmounted.\n  prevChildren, parentComponent, parentSuspense, unmountChildren) {\n      if (key === 'innerHTML' || key === 'textContent') {\n          if (prevChildren) {\n              unmountChildren(prevChildren, parentComponent, parentSuspense);\n          }\n          el[key] = value == null ? '' : value;\n          return;\n      }\n      if (key === 'value' &&\n          el.tagName !== 'PROGRESS' &&\n          // custom elements may use _value internally\n          !el.tagName.includes('-')) {\n          // store value as _value as well since\n          // non-string values will be stringified.\n          el._value = value;\n          const newValue = value == null ? '' : value;\n          if (el.value !== newValue ||\n              // #4956: always set for OPTION elements because its value falls back to\n              // textContent if no value attribute is present. And setting .value for\n              // OPTION has no side effect\n              el.tagName === 'OPTION') {\n              el.value = newValue;\n          }\n          if (value == null) {\n              el.removeAttribute(key);\n          }\n          return;\n      }\n      let needRemove = false;\n      if (value === '' || value == null) {\n          const type = typeof el[key];\n          if (type === 'boolean') {\n              // e.g. <select multiple> compiles to { multiple: '' }\n              value = includeBooleanAttr(value);\n          }\n          else if (value == null && type === 'string') {\n              // e.g. <div :id=\"null\">\n              value = '';\n              needRemove = true;\n          }\n          else if (type === 'number') {\n              // e.g. <img :width=\"null\">\n              value = 0;\n              needRemove = true;\n          }\n      }\n      // some properties perform value validation and throw,\n      // some properties has getter, no setter, will error in 'use strict'\n      // eg. <select :type=\"null\"></select> <select :willValidate=\"null\"></select>\n      try {\n          el[key] = value;\n      }\n      catch (e) {\n          // do not warn if value is auto-coerced from nullish values\n          if (!needRemove) {\n              warn(`Failed setting prop \"${key}\" on <${el.tagName.toLowerCase()}>: ` +\n                  `value ${value} is invalid.`, e);\n          }\n      }\n      needRemove && el.removeAttribute(key);\n  }\n\n  function addEventListener(el, event, handler, options) {\n      el.addEventListener(event, handler, options);\n  }\n  function removeEventListener(el, event, handler, options) {\n      el.removeEventListener(event, handler, options);\n  }\n  function patchEvent(el, rawName, prevValue, nextValue, instance = null) {\n      // vei = vue event invokers\n      const invokers = el._vei || (el._vei = {});\n      const existingInvoker = invokers[rawName];\n      if (nextValue && existingInvoker) {\n          // patch\n          existingInvoker.value = nextValue;\n      }\n      else {\n          const [name, options] = parseName(rawName);\n          if (nextValue) {\n              // add\n              const invoker = (invokers[rawName] = createInvoker(nextValue, instance));\n              addEventListener(el, name, invoker, options);\n          }\n          else if (existingInvoker) {\n              // remove\n              removeEventListener(el, name, existingInvoker, options);\n              invokers[rawName] = undefined;\n          }\n      }\n  }\n  const optionsModifierRE = /(?:Once|Passive|Capture)$/;\n  function parseName(name) {\n      let options;\n      if (optionsModifierRE.test(name)) {\n          options = {};\n          let m;\n          while ((m = name.match(optionsModifierRE))) {\n              name = name.slice(0, name.length - m[0].length);\n              options[m[0].toLowerCase()] = true;\n          }\n      }\n      const event = name[2] === ':' ? name.slice(3) : hyphenate(name.slice(2));\n      return [event, options];\n  }\n  // To avoid the overhead of repeatedly calling Date.now(), we cache\n  // and use the same timestamp for all event listeners attached in the same tick.\n  let cachedNow = 0;\n  const p = /*#__PURE__*/ Promise.resolve();\n  const getNow = () => cachedNow || (p.then(() => (cachedNow = 0)), (cachedNow = Date.now()));\n  function createInvoker(initialValue, instance) {\n      const invoker = (e) => {\n          // async edge case vuejs/vue#6566\n          // inner click event triggers patch, event handler\n          // attached to outer element during patch, and triggered again. This\n          // happens because browsers fire microtask ticks between event propagation.\n          // this no longer happens for templates in Vue 3, but could still be\n          // theoretically possible for hand-written render functions.\n          // the solution: we save the timestamp when a handler is attached,\n          // and also attach the timestamp to any event that was handled by vue\n          // for the first time (to avoid inconsistent event timestamp implementations\n          // or events fired from iframes, e.g. #2513)\n          // The handler would only fire if the event passed to it was fired\n          // AFTER it was attached.\n          if (!e._vts) {\n              e._vts = Date.now();\n          }\n          else if (e._vts <= invoker.attached) {\n              return;\n          }\n          callWithAsyncErrorHandling(patchStopImmediatePropagation(e, invoker.value), instance, 5 /* ErrorCodes.NATIVE_EVENT_HANDLER */, [e]);\n      };\n      invoker.value = initialValue;\n      invoker.attached = getNow();\n      return invoker;\n  }\n  function patchStopImmediatePropagation(e, value) {\n      if (isArray(value)) {\n          const originalStop = e.stopImmediatePropagation;\n          e.stopImmediatePropagation = () => {\n              originalStop.call(e);\n              e._stopped = true;\n          };\n          return value.map(fn => (e) => !e._stopped && fn && fn(e));\n      }\n      else {\n          return value;\n      }\n  }\n\n  const nativeOnRE = /^on[a-z]/;\n  const patchProp = (el, key, prevValue, nextValue, isSVG = false, prevChildren, parentComponent, parentSuspense, unmountChildren) => {\n      if (key === 'class') {\n          patchClass(el, nextValue, isSVG);\n      }\n      else if (key === 'style') {\n          patchStyle(el, prevValue, nextValue);\n      }\n      else if (isOn(key)) {\n          // ignore v-model listeners\n          if (!isModelListener(key)) {\n              patchEvent(el, key, prevValue, nextValue, parentComponent);\n          }\n      }\n      else if (key[0] === '.'\n          ? ((key = key.slice(1)), true)\n          : key[0] === '^'\n              ? ((key = key.slice(1)), false)\n              : shouldSetAsProp(el, key, nextValue, isSVG)) {\n          patchDOMProp(el, key, nextValue, prevChildren, parentComponent, parentSuspense, unmountChildren);\n      }\n      else {\n          // special case for <input v-model type=\"checkbox\"> with\n          // :true-value & :false-value\n          // store value as dom properties since non-string values will be\n          // stringified.\n          if (key === 'true-value') {\n              el._trueValue = nextValue;\n          }\n          else if (key === 'false-value') {\n              el._falseValue = nextValue;\n          }\n          patchAttr(el, key, nextValue, isSVG);\n      }\n  };\n  function shouldSetAsProp(el, key, value, isSVG) {\n      if (isSVG) {\n          // most keys must be set as attribute on svg elements to work\n          // ...except innerHTML & textContent\n          if (key === 'innerHTML' || key === 'textContent') {\n              return true;\n          }\n          // or native onclick with function values\n          if (key in el && nativeOnRE.test(key) && isFunction(value)) {\n              return true;\n          }\n          return false;\n      }\n      // these are enumerated attrs, however their corresponding DOM properties\n      // are actually booleans - this leads to setting it with a string \"false\"\n      // value leading it to be coerced to `true`, so we need to always treat\n      // them as attributes.\n      // Note that `contentEditable` doesn't have this problem: its DOM\n      // property is also enumerated string values.\n      if (key === 'spellcheck' || key === 'draggable' || key === 'translate') {\n          return false;\n      }\n      // #1787, #2840 form property on form elements is readonly and must be set as\n      // attribute.\n      if (key === 'form') {\n          return false;\n      }\n      // #1526 <input list> must be set as attribute\n      if (key === 'list' && el.tagName === 'INPUT') {\n          return false;\n      }\n      // #2766 <textarea type> must be set as attribute\n      if (key === 'type' && el.tagName === 'TEXTAREA') {\n          return false;\n      }\n      // native onclick with string value, must be set as attribute\n      if (nativeOnRE.test(key) && isString(value)) {\n          return false;\n      }\n      return key in el;\n  }\n\n  function defineCustomElement(options, hydrate) {\n      const Comp = defineComponent(options);\n      class VueCustomElement extends VueElement {\n          constructor(initialProps) {\n              super(Comp, initialProps, hydrate);\n          }\n      }\n      VueCustomElement.def = Comp;\n      return VueCustomElement;\n  }\n  const defineSSRCustomElement = ((options) => {\n      // @ts-ignore\n      return defineCustomElement(options, hydrate);\n  });\n  const BaseClass = (typeof HTMLElement !== 'undefined' ? HTMLElement : class {\n  });\n  class VueElement extends BaseClass {\n      constructor(_def, _props = {}, hydrate) {\n          super();\n          this._def = _def;\n          this._props = _props;\n          /**\n           * @internal\n           */\n          this._instance = null;\n          this._connected = false;\n          this._resolved = false;\n          this._numberProps = null;\n          if (this.shadowRoot && hydrate) {\n              hydrate(this._createVNode(), this.shadowRoot);\n          }\n          else {\n              if (this.shadowRoot) {\n                  warn(`Custom element has pre-rendered declarative shadow root but is not ` +\n                      `defined as hydratable. Use \\`defineSSRCustomElement\\`.`);\n              }\n              this.attachShadow({ mode: 'open' });\n              if (!this._def.__asyncLoader) {\n                  // for sync component defs we can immediately resolve props\n                  this._resolveProps(this._def);\n              }\n          }\n      }\n      connectedCallback() {\n          this._connected = true;\n          if (!this._instance) {\n              if (this._resolved) {\n                  this._update();\n              }\n              else {\n                  this._resolveDef();\n              }\n          }\n      }\n      disconnectedCallback() {\n          this._connected = false;\n          nextTick(() => {\n              if (!this._connected) {\n                  render(null, this.shadowRoot);\n                  this._instance = null;\n              }\n          });\n      }\n      /**\n       * resolve inner component definition (handle possible async component)\n       */\n      _resolveDef() {\n          this._resolved = true;\n          // set initial attrs\n          for (let i = 0; i < this.attributes.length; i++) {\n              this._setAttr(this.attributes[i].name);\n          }\n          // watch future attr changes\n          new MutationObserver(mutations => {\n              for (const m of mutations) {\n                  this._setAttr(m.attributeName);\n              }\n          }).observe(this, { attributes: true });\n          const resolve = (def, isAsync = false) => {\n              const { props, styles } = def;\n              // cast Number-type props set before resolve\n              let numberProps;\n              if (props && !isArray(props)) {\n                  for (const key in props) {\n                      const opt = props[key];\n                      if (opt === Number || (opt && opt.type === Number)) {\n                          if (key in this._props) {\n                              this._props[key] = toNumber(this._props[key]);\n                          }\n                          (numberProps || (numberProps = Object.create(null)))[camelize(key)] = true;\n                      }\n                  }\n              }\n              this._numberProps = numberProps;\n              if (isAsync) {\n                  // defining getter/setters on prototype\n                  // for sync defs, this already happened in the constructor\n                  this._resolveProps(def);\n              }\n              // apply CSS\n              this._applyStyles(styles);\n              // initial render\n              this._update();\n          };\n          const asyncDef = this._def.__asyncLoader;\n          if (asyncDef) {\n              asyncDef().then(def => resolve(def, true));\n          }\n          else {\n              resolve(this._def);\n          }\n      }\n      _resolveProps(def) {\n          const { props } = def;\n          const declaredPropKeys = isArray(props) ? props : Object.keys(props || {});\n          // check if there are props set pre-upgrade or connect\n          for (const key of Object.keys(this)) {\n              if (key[0] !== '_' && declaredPropKeys.includes(key)) {\n                  this._setProp(key, this[key], true, false);\n              }\n          }\n          // defining getter/setters on prototype\n          for (const key of declaredPropKeys.map(camelize)) {\n              Object.defineProperty(this, key, {\n                  get() {\n                      return this._getProp(key);\n                  },\n                  set(val) {\n                      this._setProp(key, val);\n                  }\n              });\n          }\n      }\n      _setAttr(key) {\n          let value = this.getAttribute(key);\n          const camelKey = camelize(key);\n          if (this._numberProps && this._numberProps[camelKey]) {\n              value = toNumber(value);\n          }\n          this._setProp(camelKey, value, false);\n      }\n      /**\n       * @internal\n       */\n      _getProp(key) {\n          return this._props[key];\n      }\n      /**\n       * @internal\n       */\n      _setProp(key, val, shouldReflect = true, shouldUpdate = true) {\n          if (val !== this._props[key]) {\n              this._props[key] = val;\n              if (shouldUpdate && this._instance) {\n                  this._update();\n              }\n              // reflect\n              if (shouldReflect) {\n                  if (val === true) {\n                      this.setAttribute(hyphenate(key), '');\n                  }\n                  else if (typeof val === 'string' || typeof val === 'number') {\n                      this.setAttribute(hyphenate(key), val + '');\n                  }\n                  else if (!val) {\n                      this.removeAttribute(hyphenate(key));\n                  }\n              }\n          }\n      }\n      _update() {\n          render(this._createVNode(), this.shadowRoot);\n      }\n      _createVNode() {\n          const vnode = createVNode(this._def, extend({}, this._props));\n          if (!this._instance) {\n              vnode.ce = instance => {\n                  this._instance = instance;\n                  instance.isCE = true;\n                  // HMR\n                  {\n                      instance.ceReload = newStyles => {\n                          // always reset styles\n                          if (this._styles) {\n                              this._styles.forEach(s => this.shadowRoot.removeChild(s));\n                              this._styles.length = 0;\n                          }\n                          this._applyStyles(newStyles);\n                          this._instance = null;\n                          this._update();\n                      };\n                  }\n                  const dispatch = (event, args) => {\n                      this.dispatchEvent(new CustomEvent(event, {\n                          detail: args\n                      }));\n                  };\n                  // intercept emit\n                  instance.emit = (event, ...args) => {\n                      // dispatch both the raw and hyphenated versions of an event\n                      // to match Vue behavior\n                      dispatch(event, args);\n                      if (hyphenate(event) !== event) {\n                          dispatch(hyphenate(event), args);\n                      }\n                  };\n                  // locate nearest Vue custom element parent for provide/inject\n                  let parent = this;\n                  while ((parent =\n                      parent && (parent.parentNode || parent.host))) {\n                      if (parent instanceof VueElement) {\n                          instance.parent = parent._instance;\n                          instance.provides = parent._instance.provides;\n                          break;\n                      }\n                  }\n              };\n          }\n          return vnode;\n      }\n      _applyStyles(styles) {\n          if (styles) {\n              styles.forEach(css => {\n                  const s = document.createElement('style');\n                  s.textContent = css;\n                  this.shadowRoot.appendChild(s);\n                  // record for HMR\n                  {\n                      (this._styles || (this._styles = [])).push(s);\n                  }\n              });\n          }\n      }\n  }\n\n  function useCssModule(name = '$style') {\n      /* istanbul ignore else */\n      {\n          {\n              warn(`useCssModule() is not supported in the global build.`);\n          }\n          return EMPTY_OBJ;\n      }\n  }\n\n  /**\n   * Runtime helper for SFC's CSS variable injection feature.\n   * @private\n   */\n  function useCssVars(getter) {\n      const instance = getCurrentInstance();\n      /* istanbul ignore next */\n      if (!instance) {\n          warn(`useCssVars is called without current active component instance.`);\n          return;\n      }\n      const updateTeleports = (instance.ut = (vars = getter(instance.proxy)) => {\n          Array.from(document.querySelectorAll(`[data-v-owner=\"${instance.uid}\"]`)).forEach(node => setVarsOnNode(node, vars));\n      });\n      const setVars = () => {\n          const vars = getter(instance.proxy);\n          setVarsOnVNode(instance.subTree, vars);\n          updateTeleports(vars);\n      };\n      watchPostEffect(setVars);\n      onMounted(() => {\n          const ob = new MutationObserver(setVars);\n          ob.observe(instance.subTree.el.parentNode, { childList: true });\n          onUnmounted(() => ob.disconnect());\n      });\n  }\n  function setVarsOnVNode(vnode, vars) {\n      if (vnode.shapeFlag & 128 /* ShapeFlags.SUSPENSE */) {\n          const suspense = vnode.suspense;\n          vnode = suspense.activeBranch;\n          if (suspense.pendingBranch && !suspense.isHydrating) {\n              suspense.effects.push(() => {\n                  setVarsOnVNode(suspense.activeBranch, vars);\n              });\n          }\n      }\n      // drill down HOCs until it's a non-component vnode\n      while (vnode.component) {\n          vnode = vnode.component.subTree;\n      }\n      if (vnode.shapeFlag & 1 /* ShapeFlags.ELEMENT */ && vnode.el) {\n          setVarsOnNode(vnode.el, vars);\n      }\n      else if (vnode.type === Fragment) {\n          vnode.children.forEach(c => setVarsOnVNode(c, vars));\n      }\n      else if (vnode.type === Static) {\n          let { el, anchor } = vnode;\n          while (el) {\n              setVarsOnNode(el, vars);\n              if (el === anchor)\n                  break;\n              el = el.nextSibling;\n          }\n      }\n  }\n  function setVarsOnNode(el, vars) {\n      if (el.nodeType === 1) {\n          const style = el.style;\n          for (const key in vars) {\n              style.setProperty(`--${key}`, vars[key]);\n          }\n      }\n  }\n\n  const TRANSITION = 'transition';\n  const ANIMATION = 'animation';\n  // DOM Transition is a higher-order-component based on the platform-agnostic\n  // base Transition component, with DOM-specific logic.\n  const Transition = (props, { slots }) => h(BaseTransition, resolveTransitionProps(props), slots);\n  Transition.displayName = 'Transition';\n  const DOMTransitionPropsValidators = {\n      name: String,\n      type: String,\n      css: {\n          type: Boolean,\n          default: true\n      },\n      duration: [String, Number, Object],\n      enterFromClass: String,\n      enterActiveClass: String,\n      enterToClass: String,\n      appearFromClass: String,\n      appearActiveClass: String,\n      appearToClass: String,\n      leaveFromClass: String,\n      leaveActiveClass: String,\n      leaveToClass: String\n  };\n  const TransitionPropsValidators = (Transition.props =\n      /*#__PURE__*/ extend({}, BaseTransition.props, DOMTransitionPropsValidators));\n  /**\n   * #3227 Incoming hooks may be merged into arrays when wrapping Transition\n   * with custom HOCs.\n   */\n  const callHook = (hook, args = []) => {\n      if (isArray(hook)) {\n          hook.forEach(h => h(...args));\n      }\n      else if (hook) {\n          hook(...args);\n      }\n  };\n  /**\n   * Check if a hook expects a callback (2nd arg), which means the user\n   * intends to explicitly control the end of the transition.\n   */\n  const hasExplicitCallback = (hook) => {\n      return hook\n          ? isArray(hook)\n              ? hook.some(h => h.length > 1)\n              : hook.length > 1\n          : false;\n  };\n  function resolveTransitionProps(rawProps) {\n      const baseProps = {};\n      for (const key in rawProps) {\n          if (!(key in DOMTransitionPropsValidators)) {\n              baseProps[key] = rawProps[key];\n          }\n      }\n      if (rawProps.css === false) {\n          return baseProps;\n      }\n      const { name = 'v', type, duration, enterFromClass = `${name}-enter-from`, enterActiveClass = `${name}-enter-active`, enterToClass = `${name}-enter-to`, appearFromClass = enterFromClass, appearActiveClass = enterActiveClass, appearToClass = enterToClass, leaveFromClass = `${name}-leave-from`, leaveActiveClass = `${name}-leave-active`, leaveToClass = `${name}-leave-to` } = rawProps;\n      const durations = normalizeDuration(duration);\n      const enterDuration = durations && durations[0];\n      const leaveDuration = durations && durations[1];\n      const { onBeforeEnter, onEnter, onEnterCancelled, onLeave, onLeaveCancelled, onBeforeAppear = onBeforeEnter, onAppear = onEnter, onAppearCancelled = onEnterCancelled } = baseProps;\n      const finishEnter = (el, isAppear, done) => {\n          removeTransitionClass(el, isAppear ? appearToClass : enterToClass);\n          removeTransitionClass(el, isAppear ? appearActiveClass : enterActiveClass);\n          done && done();\n      };\n      const finishLeave = (el, done) => {\n          el._isLeaving = false;\n          removeTransitionClass(el, leaveFromClass);\n          removeTransitionClass(el, leaveToClass);\n          removeTransitionClass(el, leaveActiveClass);\n          done && done();\n      };\n      const makeEnterHook = (isAppear) => {\n          return (el, done) => {\n              const hook = isAppear ? onAppear : onEnter;\n              const resolve = () => finishEnter(el, isAppear, done);\n              callHook(hook, [el, resolve]);\n              nextFrame(() => {\n                  removeTransitionClass(el, isAppear ? appearFromClass : enterFromClass);\n                  addTransitionClass(el, isAppear ? appearToClass : enterToClass);\n                  if (!hasExplicitCallback(hook)) {\n                      whenTransitionEnds(el, type, enterDuration, resolve);\n                  }\n              });\n          };\n      };\n      return extend(baseProps, {\n          onBeforeEnter(el) {\n              callHook(onBeforeEnter, [el]);\n              addTransitionClass(el, enterFromClass);\n              addTransitionClass(el, enterActiveClass);\n          },\n          onBeforeAppear(el) {\n              callHook(onBeforeAppear, [el]);\n              addTransitionClass(el, appearFromClass);\n              addTransitionClass(el, appearActiveClass);\n          },\n          onEnter: makeEnterHook(false),\n          onAppear: makeEnterHook(true),\n          onLeave(el, done) {\n              el._isLeaving = true;\n              const resolve = () => finishLeave(el, done);\n              addTransitionClass(el, leaveFromClass);\n              // force reflow so *-leave-from classes immediately take effect (#2593)\n              forceReflow();\n              addTransitionClass(el, leaveActiveClass);\n              nextFrame(() => {\n                  if (!el._isLeaving) {\n                      // cancelled\n                      return;\n                  }\n                  removeTransitionClass(el, leaveFromClass);\n                  addTransitionClass(el, leaveToClass);\n                  if (!hasExplicitCallback(onLeave)) {\n                      whenTransitionEnds(el, type, leaveDuration, resolve);\n                  }\n              });\n              callHook(onLeave, [el, resolve]);\n          },\n          onEnterCancelled(el) {\n              finishEnter(el, false);\n              callHook(onEnterCancelled, [el]);\n          },\n          onAppearCancelled(el) {\n              finishEnter(el, true);\n              callHook(onAppearCancelled, [el]);\n          },\n          onLeaveCancelled(el) {\n              finishLeave(el);\n              callHook(onLeaveCancelled, [el]);\n          }\n      });\n  }\n  function normalizeDuration(duration) {\n      if (duration == null) {\n          return null;\n      }\n      else if (isObject(duration)) {\n          return [NumberOf(duration.enter), NumberOf(duration.leave)];\n      }\n      else {\n          const n = NumberOf(duration);\n          return [n, n];\n      }\n  }\n  function NumberOf(val) {\n      const res = toNumber(val);\n      {\n          assertNumber(res, '<transition> explicit duration');\n      }\n      return res;\n  }\n  function addTransitionClass(el, cls) {\n      cls.split(/\\s+/).forEach(c => c && el.classList.add(c));\n      (el._vtc ||\n          (el._vtc = new Set())).add(cls);\n  }\n  function removeTransitionClass(el, cls) {\n      cls.split(/\\s+/).forEach(c => c && el.classList.remove(c));\n      const { _vtc } = el;\n      if (_vtc) {\n          _vtc.delete(cls);\n          if (!_vtc.size) {\n              el._vtc = undefined;\n          }\n      }\n  }\n  function nextFrame(cb) {\n      requestAnimationFrame(() => {\n          requestAnimationFrame(cb);\n      });\n  }\n  let endId = 0;\n  function whenTransitionEnds(el, expectedType, explicitTimeout, resolve) {\n      const id = (el._endId = ++endId);\n      const resolveIfNotStale = () => {\n          if (id === el._endId) {\n              resolve();\n          }\n      };\n      if (explicitTimeout) {\n          return setTimeout(resolveIfNotStale, explicitTimeout);\n      }\n      const { type, timeout, propCount } = getTransitionInfo(el, expectedType);\n      if (!type) {\n          return resolve();\n      }\n      const endEvent = type + 'end';\n      let ended = 0;\n      const end = () => {\n          el.removeEventListener(endEvent, onEnd);\n          resolveIfNotStale();\n      };\n      const onEnd = (e) => {\n          if (e.target === el && ++ended >= propCount) {\n              end();\n          }\n      };\n      setTimeout(() => {\n          if (ended < propCount) {\n              end();\n          }\n      }, timeout + 1);\n      el.addEventListener(endEvent, onEnd);\n  }\n  function getTransitionInfo(el, expectedType) {\n      const styles = window.getComputedStyle(el);\n      // JSDOM may return undefined for transition properties\n      const getStyleProperties = (key) => (styles[key] || '').split(', ');\n      const transitionDelays = getStyleProperties(`${TRANSITION}Delay`);\n      const transitionDurations = getStyleProperties(`${TRANSITION}Duration`);\n      const transitionTimeout = getTimeout(transitionDelays, transitionDurations);\n      const animationDelays = getStyleProperties(`${ANIMATION}Delay`);\n      const animationDurations = getStyleProperties(`${ANIMATION}Duration`);\n      const animationTimeout = getTimeout(animationDelays, animationDurations);\n      let type = null;\n      let timeout = 0;\n      let propCount = 0;\n      /* istanbul ignore if */\n      if (expectedType === TRANSITION) {\n          if (transitionTimeout > 0) {\n              type = TRANSITION;\n              timeout = transitionTimeout;\n              propCount = transitionDurations.length;\n          }\n      }\n      else if (expectedType === ANIMATION) {\n          if (animationTimeout > 0) {\n              type = ANIMATION;\n              timeout = animationTimeout;\n              propCount = animationDurations.length;\n          }\n      }\n      else {\n          timeout = Math.max(transitionTimeout, animationTimeout);\n          type =\n              timeout > 0\n                  ? transitionTimeout > animationTimeout\n                      ? TRANSITION\n                      : ANIMATION\n                  : null;\n          propCount = type\n              ? type === TRANSITION\n                  ? transitionDurations.length\n                  : animationDurations.length\n              : 0;\n      }\n      const hasTransform = type === TRANSITION &&\n          /\\b(transform|all)(,|$)/.test(getStyleProperties(`${TRANSITION}Property`).toString());\n      return {\n          type,\n          timeout,\n          propCount,\n          hasTransform\n      };\n  }\n  function getTimeout(delays, durations) {\n      while (delays.length < durations.length) {\n          delays = delays.concat(delays);\n      }\n      return Math.max(...durations.map((d, i) => toMs(d) + toMs(delays[i])));\n  }\n  // Old versions of Chromium (below 61.0.3163.100) formats floating pointer\n  // numbers in a locale-dependent way, using a comma instead of a dot.\n  // If comma is not replaced with a dot, the input will be rounded down\n  // (i.e. acting as a floor function) causing unexpected behaviors\n  function toMs(s) {\n      return Number(s.slice(0, -1).replace(',', '.')) * 1000;\n  }\n  // synchronously force layout to put elements into a certain state\n  function forceReflow() {\n      return document.body.offsetHeight;\n  }\n\n  const positionMap = new WeakMap();\n  const newPositionMap = new WeakMap();\n  const TransitionGroupImpl = {\n      name: 'TransitionGroup',\n      props: /*#__PURE__*/ extend({}, TransitionPropsValidators, {\n          tag: String,\n          moveClass: String\n      }),\n      setup(props, { slots }) {\n          const instance = getCurrentInstance();\n          const state = useTransitionState();\n          let prevChildren;\n          let children;\n          onUpdated(() => {\n              // children is guaranteed to exist after initial render\n              if (!prevChildren.length) {\n                  return;\n              }\n              const moveClass = props.moveClass || `${props.name || 'v'}-move`;\n              if (!hasCSSTransform(prevChildren[0].el, instance.vnode.el, moveClass)) {\n                  return;\n              }\n              // we divide the work into three loops to avoid mixing DOM reads and writes\n              // in each iteration - which helps prevent layout thrashing.\n              prevChildren.forEach(callPendingCbs);\n              prevChildren.forEach(recordPosition);\n              const movedChildren = prevChildren.filter(applyTranslation);\n              // force reflow to put everything in position\n              forceReflow();\n              movedChildren.forEach(c => {\n                  const el = c.el;\n                  const style = el.style;\n                  addTransitionClass(el, moveClass);\n                  style.transform = style.webkitTransform = style.transitionDuration = '';\n                  const cb = (el._moveCb = (e) => {\n                      if (e && e.target !== el) {\n                          return;\n                      }\n                      if (!e || /transform$/.test(e.propertyName)) {\n                          el.removeEventListener('transitionend', cb);\n                          el._moveCb = null;\n                          removeTransitionClass(el, moveClass);\n                      }\n                  });\n                  el.addEventListener('transitionend', cb);\n              });\n          });\n          return () => {\n              const rawProps = toRaw(props);\n              const cssTransitionProps = resolveTransitionProps(rawProps);\n              let tag = rawProps.tag || Fragment;\n              prevChildren = children;\n              children = slots.default ? getTransitionRawChildren(slots.default()) : [];\n              for (let i = 0; i < children.length; i++) {\n                  const child = children[i];\n                  if (child.key != null) {\n                      setTransitionHooks(child, resolveTransitionHooks(child, cssTransitionProps, state, instance));\n                  }\n                  else {\n                      warn(`<TransitionGroup> children must be keyed.`);\n                  }\n              }\n              if (prevChildren) {\n                  for (let i = 0; i < prevChildren.length; i++) {\n                      const child = prevChildren[i];\n                      setTransitionHooks(child, resolveTransitionHooks(child, cssTransitionProps, state, instance));\n                      positionMap.set(child, child.el.getBoundingClientRect());\n                  }\n              }\n              return createVNode(tag, null, children);\n          };\n      }\n  };\n  /**\n   * TransitionGroup does not support \"mode\" so we need to remove it from the\n   * props declarations, but direct delete operation is considered a side effect\n   * and will make the entire transition feature non-tree-shakeable, so we do it\n   * in a function and mark the function's invocation as pure.\n   */\n  const removeMode = (props) => delete props.mode;\n  /*#__PURE__*/ removeMode(TransitionGroupImpl.props);\n  const TransitionGroup = TransitionGroupImpl;\n  function callPendingCbs(c) {\n      const el = c.el;\n      if (el._moveCb) {\n          el._moveCb();\n      }\n      if (el._enterCb) {\n          el._enterCb();\n      }\n  }\n  function recordPosition(c) {\n      newPositionMap.set(c, c.el.getBoundingClientRect());\n  }\n  function applyTranslation(c) {\n      const oldPos = positionMap.get(c);\n      const newPos = newPositionMap.get(c);\n      const dx = oldPos.left - newPos.left;\n      const dy = oldPos.top - newPos.top;\n      if (dx || dy) {\n          const s = c.el.style;\n          s.transform = s.webkitTransform = `translate(${dx}px,${dy}px)`;\n          s.transitionDuration = '0s';\n          return c;\n      }\n  }\n  function hasCSSTransform(el, root, moveClass) {\n      // Detect whether an element with the move class applied has\n      // CSS transitions. Since the element may be inside an entering\n      // transition at this very moment, we make a clone of it and remove\n      // all other transition classes applied to ensure only the move class\n      // is applied.\n      const clone = el.cloneNode();\n      if (el._vtc) {\n          el._vtc.forEach(cls => {\n              cls.split(/\\s+/).forEach(c => c && clone.classList.remove(c));\n          });\n      }\n      moveClass.split(/\\s+/).forEach(c => c && clone.classList.add(c));\n      clone.style.display = 'none';\n      const container = (root.nodeType === 1 ? root : root.parentNode);\n      container.appendChild(clone);\n      const { hasTransform } = getTransitionInfo(clone);\n      container.removeChild(clone);\n      return hasTransform;\n  }\n\n  const getModelAssigner = (vnode) => {\n      const fn = vnode.props['onUpdate:modelValue'] ||\n          (false );\n      return isArray(fn) ? value => invokeArrayFns(fn, value) : fn;\n  };\n  function onCompositionStart(e) {\n      e.target.composing = true;\n  }\n  function onCompositionEnd(e) {\n      const target = e.target;\n      if (target.composing) {\n          target.composing = false;\n          target.dispatchEvent(new Event('input'));\n      }\n  }\n  // We are exporting the v-model runtime directly as vnode hooks so that it can\n  // be tree-shaken in case v-model is never used.\n  const vModelText = {\n      created(el, { modifiers: { lazy, trim, number } }, vnode) {\n          el._assign = getModelAssigner(vnode);\n          const castToNumber = number || (vnode.props && vnode.props.type === 'number');\n          addEventListener(el, lazy ? 'change' : 'input', e => {\n              if (e.target.composing)\n                  return;\n              let domValue = el.value;\n              if (trim) {\n                  domValue = domValue.trim();\n              }\n              if (castToNumber) {\n                  domValue = looseToNumber(domValue);\n              }\n              el._assign(domValue);\n          });\n          if (trim) {\n              addEventListener(el, 'change', () => {\n                  el.value = el.value.trim();\n              });\n          }\n          if (!lazy) {\n              addEventListener(el, 'compositionstart', onCompositionStart);\n              addEventListener(el, 'compositionend', onCompositionEnd);\n              // Safari < 10.2 & UIWebView doesn't fire compositionend when\n              // switching focus before confirming composition choice\n              // this also fixes the issue where some browsers e.g. iOS Chrome\n              // fires \"change\" instead of \"input\" on autocomplete.\n              addEventListener(el, 'change', onCompositionEnd);\n          }\n      },\n      // set value on mounted so it's after min/max for type=\"range\"\n      mounted(el, { value }) {\n          el.value = value == null ? '' : value;\n      },\n      beforeUpdate(el, { value, modifiers: { lazy, trim, number } }, vnode) {\n          el._assign = getModelAssigner(vnode);\n          // avoid clearing unresolved text. #2302\n          if (el.composing)\n              return;\n          if (document.activeElement === el && el.type !== 'range') {\n              if (lazy) {\n                  return;\n              }\n              if (trim && el.value.trim() === value) {\n                  return;\n              }\n              if ((number || el.type === 'number') &&\n                  looseToNumber(el.value) === value) {\n                  return;\n              }\n          }\n          const newValue = value == null ? '' : value;\n          if (el.value !== newValue) {\n              el.value = newValue;\n          }\n      }\n  };\n  const vModelCheckbox = {\n      // #4096 array checkboxes need to be deep traversed\n      deep: true,\n      created(el, _, vnode) {\n          el._assign = getModelAssigner(vnode);\n          addEventListener(el, 'change', () => {\n              const modelValue = el._modelValue;\n              const elementValue = getValue(el);\n              const checked = el.checked;\n              const assign = el._assign;\n              if (isArray(modelValue)) {\n                  const index = looseIndexOf(modelValue, elementValue);\n                  const found = index !== -1;\n                  if (checked && !found) {\n                      assign(modelValue.concat(elementValue));\n                  }\n                  else if (!checked && found) {\n                      const filtered = [...modelValue];\n                      filtered.splice(index, 1);\n                      assign(filtered);\n                  }\n              }\n              else if (isSet(modelValue)) {\n                  const cloned = new Set(modelValue);\n                  if (checked) {\n                      cloned.add(elementValue);\n                  }\n                  else {\n                      cloned.delete(elementValue);\n                  }\n                  assign(cloned);\n              }\n              else {\n                  assign(getCheckboxValue(el, checked));\n              }\n          });\n      },\n      // set initial checked on mount to wait for true-value/false-value\n      mounted: setChecked,\n      beforeUpdate(el, binding, vnode) {\n          el._assign = getModelAssigner(vnode);\n          setChecked(el, binding, vnode);\n      }\n  };\n  function setChecked(el, { value, oldValue }, vnode) {\n      el._modelValue = value;\n      if (isArray(value)) {\n          el.checked = looseIndexOf(value, vnode.props.value) > -1;\n      }\n      else if (isSet(value)) {\n          el.checked = value.has(vnode.props.value);\n      }\n      else if (value !== oldValue) {\n          el.checked = looseEqual(value, getCheckboxValue(el, true));\n      }\n  }\n  const vModelRadio = {\n      created(el, { value }, vnode) {\n          el.checked = looseEqual(value, vnode.props.value);\n          el._assign = getModelAssigner(vnode);\n          addEventListener(el, 'change', () => {\n              el._assign(getValue(el));\n          });\n      },\n      beforeUpdate(el, { value, oldValue }, vnode) {\n          el._assign = getModelAssigner(vnode);\n          if (value !== oldValue) {\n              el.checked = looseEqual(value, vnode.props.value);\n          }\n      }\n  };\n  const vModelSelect = {\n      // <select multiple> value need to be deep traversed\n      deep: true,\n      created(el, { value, modifiers: { number } }, vnode) {\n          const isSetModel = isSet(value);\n          addEventListener(el, 'change', () => {\n              const selectedVal = Array.prototype.filter\n                  .call(el.options, (o) => o.selected)\n                  .map((o) => number ? looseToNumber(getValue(o)) : getValue(o));\n              el._assign(el.multiple\n                  ? isSetModel\n                      ? new Set(selectedVal)\n                      : selectedVal\n                  : selectedVal[0]);\n          });\n          el._assign = getModelAssigner(vnode);\n      },\n      // set value in mounted & updated because <select> relies on its children\n      // <option>s.\n      mounted(el, { value }) {\n          setSelected(el, value);\n      },\n      beforeUpdate(el, _binding, vnode) {\n          el._assign = getModelAssigner(vnode);\n      },\n      updated(el, { value }) {\n          setSelected(el, value);\n      }\n  };\n  function setSelected(el, value) {\n      const isMultiple = el.multiple;\n      if (isMultiple && !isArray(value) && !isSet(value)) {\n          warn(`<select multiple v-model> expects an Array or Set value for its binding, ` +\n                  `but got ${Object.prototype.toString.call(value).slice(8, -1)}.`);\n          return;\n      }\n      for (let i = 0, l = el.options.length; i < l; i++) {\n          const option = el.options[i];\n          const optionValue = getValue(option);\n          if (isMultiple) {\n              if (isArray(value)) {\n                  option.selected = looseIndexOf(value, optionValue) > -1;\n              }\n              else {\n                  option.selected = value.has(optionValue);\n              }\n          }\n          else {\n              if (looseEqual(getValue(option), value)) {\n                  if (el.selectedIndex !== i)\n                      el.selectedIndex = i;\n                  return;\n              }\n          }\n      }\n      if (!isMultiple && el.selectedIndex !== -1) {\n          el.selectedIndex = -1;\n      }\n  }\n  // retrieve raw value set via :value bindings\n  function getValue(el) {\n      return '_value' in el ? el._value : el.value;\n  }\n  // retrieve raw value for true-value and false-value set via :true-value or :false-value bindings\n  function getCheckboxValue(el, checked) {\n      const key = checked ? '_trueValue' : '_falseValue';\n      return key in el ? el[key] : checked;\n  }\n  const vModelDynamic = {\n      created(el, binding, vnode) {\n          callModelHook(el, binding, vnode, null, 'created');\n      },\n      mounted(el, binding, vnode) {\n          callModelHook(el, binding, vnode, null, 'mounted');\n      },\n      beforeUpdate(el, binding, vnode, prevVNode) {\n          callModelHook(el, binding, vnode, prevVNode, 'beforeUpdate');\n      },\n      updated(el, binding, vnode, prevVNode) {\n          callModelHook(el, binding, vnode, prevVNode, 'updated');\n      }\n  };\n  function resolveDynamicModel(tagName, type) {\n      switch (tagName) {\n          case 'SELECT':\n              return vModelSelect;\n          case 'TEXTAREA':\n              return vModelText;\n          default:\n              switch (type) {\n                  case 'checkbox':\n                      return vModelCheckbox;\n                  case 'radio':\n                      return vModelRadio;\n                  default:\n                      return vModelText;\n              }\n      }\n  }\n  function callModelHook(el, binding, vnode, prevVNode, hook) {\n      const modelToUse = resolveDynamicModel(el.tagName, vnode.props && vnode.props.type);\n      const fn = modelToUse[hook];\n      fn && fn(el, binding, vnode, prevVNode);\n  }\n\n  const systemModifiers = ['ctrl', 'shift', 'alt', 'meta'];\n  const modifierGuards = {\n      stop: e => e.stopPropagation(),\n      prevent: e => e.preventDefault(),\n      self: e => e.target !== e.currentTarget,\n      ctrl: e => !e.ctrlKey,\n      shift: e => !e.shiftKey,\n      alt: e => !e.altKey,\n      meta: e => !e.metaKey,\n      left: e => 'button' in e && e.button !== 0,\n      middle: e => 'button' in e && e.button !== 1,\n      right: e => 'button' in e && e.button !== 2,\n      exact: (e, modifiers) => systemModifiers.some(m => e[`${m}Key`] && !modifiers.includes(m))\n  };\n  /**\n   * @private\n   */\n  const withModifiers = (fn, modifiers) => {\n      return (event, ...args) => {\n          for (let i = 0; i < modifiers.length; i++) {\n              const guard = modifierGuards[modifiers[i]];\n              if (guard && guard(event, modifiers))\n                  return;\n          }\n          return fn(event, ...args);\n      };\n  };\n  // Kept for 2.x compat.\n  // Note: IE11 compat for `spacebar` and `del` is removed for now.\n  const keyNames = {\n      esc: 'escape',\n      space: ' ',\n      up: 'arrow-up',\n      left: 'arrow-left',\n      right: 'arrow-right',\n      down: 'arrow-down',\n      delete: 'backspace'\n  };\n  /**\n   * @private\n   */\n  const withKeys = (fn, modifiers) => {\n      return (event) => {\n          if (!('key' in event)) {\n              return;\n          }\n          const eventKey = hyphenate(event.key);\n          if (modifiers.some(k => k === eventKey || keyNames[k] === eventKey)) {\n              return fn(event);\n          }\n      };\n  };\n\n  const vShow = {\n      beforeMount(el, { value }, { transition }) {\n          el._vod = el.style.display === 'none' ? '' : el.style.display;\n          if (transition && value) {\n              transition.beforeEnter(el);\n          }\n          else {\n              setDisplay(el, value);\n          }\n      },\n      mounted(el, { value }, { transition }) {\n          if (transition && value) {\n              transition.enter(el);\n          }\n      },\n      updated(el, { value, oldValue }, { transition }) {\n          if (!value === !oldValue)\n              return;\n          if (transition) {\n              if (value) {\n                  transition.beforeEnter(el);\n                  setDisplay(el, true);\n                  transition.enter(el);\n              }\n              else {\n                  transition.leave(el, () => {\n                      setDisplay(el, false);\n                  });\n              }\n          }\n          else {\n              setDisplay(el, value);\n          }\n      },\n      beforeUnmount(el, { value }) {\n          setDisplay(el, value);\n      }\n  };\n  function setDisplay(el, value) {\n      el.style.display = value ? el._vod : 'none';\n  }\n\n  const rendererOptions = /*#__PURE__*/ extend({ patchProp }, nodeOps);\n  // lazy create the renderer - this makes core renderer logic tree-shakable\n  // in case the user only imports reactivity utilities from Vue.\n  let renderer;\n  let enabledHydration = false;\n  function ensureRenderer() {\n      return (renderer ||\n          (renderer = createRenderer(rendererOptions)));\n  }\n  function ensureHydrationRenderer() {\n      renderer = enabledHydration\n          ? renderer\n          : createHydrationRenderer(rendererOptions);\n      enabledHydration = true;\n      return renderer;\n  }\n  // use explicit type casts here to avoid import() calls in rolled-up d.ts\n  const render = ((...args) => {\n      ensureRenderer().render(...args);\n  });\n  const hydrate = ((...args) => {\n      ensureHydrationRenderer().hydrate(...args);\n  });\n  const createApp = ((...args) => {\n      const app = ensureRenderer().createApp(...args);\n      {\n          injectNativeTagCheck(app);\n          injectCompilerOptionsCheck(app);\n      }\n      const { mount } = app;\n      app.mount = (containerOrSelector) => {\n          const container = normalizeContainer(containerOrSelector);\n          if (!container)\n              return;\n          const component = app._component;\n          if (!isFunction(component) && !component.render && !component.template) {\n              // __UNSAFE__\n              // Reason: potential execution of JS expressions in in-DOM template.\n              // The user must make sure the in-DOM template is trusted. If it's\n              // rendered by the server, the template should not contain any user data.\n              component.template = container.innerHTML;\n          }\n          // clear content before mounting\n          container.innerHTML = '';\n          const proxy = mount(container, false, container instanceof SVGElement);\n          if (container instanceof Element) {\n              container.removeAttribute('v-cloak');\n              container.setAttribute('data-v-app', '');\n          }\n          return proxy;\n      };\n      return app;\n  });\n  const createSSRApp = ((...args) => {\n      const app = ensureHydrationRenderer().createApp(...args);\n      {\n          injectNativeTagCheck(app);\n          injectCompilerOptionsCheck(app);\n      }\n      const { mount } = app;\n      app.mount = (containerOrSelector) => {\n          const container = normalizeContainer(containerOrSelector);\n          if (container) {\n              return mount(container, true, container instanceof SVGElement);\n          }\n      };\n      return app;\n  });\n  function injectNativeTagCheck(app) {\n      // Inject `isNativeTag`\n      // this is used for component name validation (dev only)\n      Object.defineProperty(app.config, 'isNativeTag', {\n          value: (tag) => isHTMLTag(tag) || isSVGTag(tag),\n          writable: false\n      });\n  }\n  // dev only\n  function injectCompilerOptionsCheck(app) {\n      if (isRuntimeOnly()) {\n          const isCustomElement = app.config.isCustomElement;\n          Object.defineProperty(app.config, 'isCustomElement', {\n              get() {\n                  return isCustomElement;\n              },\n              set() {\n                  warn(`The \\`isCustomElement\\` config option is deprecated. Use ` +\n                      `\\`compilerOptions.isCustomElement\\` instead.`);\n              }\n          });\n          const compilerOptions = app.config.compilerOptions;\n          const msg = `The \\`compilerOptions\\` config option is only respected when using ` +\n              `a build of Vue.js that includes the runtime compiler (aka \"full build\"). ` +\n              `Since you are using the runtime-only build, \\`compilerOptions\\` ` +\n              `must be passed to \\`@vue/compiler-dom\\` in the build setup instead.\\n` +\n              `- For vue-loader: pass it via vue-loader's \\`compilerOptions\\` loader option.\\n` +\n              `- For vue-cli: see https://cli.vuejs.org/guide/webpack.html#modifying-options-of-a-loader\\n` +\n              `- For vite: pass it via @vitejs/plugin-vue options. See https://github.com/vitejs/vite/tree/main/packages/plugin-vue#example-for-passing-options-to-vuecompiler-dom`;\n          Object.defineProperty(app.config, 'compilerOptions', {\n              get() {\n                  warn(msg);\n                  return compilerOptions;\n              },\n              set() {\n                  warn(msg);\n              }\n          });\n      }\n  }\n  function normalizeContainer(container) {\n      if (isString(container)) {\n          const res = document.querySelector(container);\n          if (!res) {\n              warn(`Failed to mount app: mount target selector \"${container}\" returned null.`);\n          }\n          return res;\n      }\n      if (window.ShadowRoot &&\n          container instanceof window.ShadowRoot &&\n          container.mode === 'closed') {\n          warn(`mounting on a ShadowRoot with \\`{mode: \"closed\"}\\` may lead to unpredictable bugs`);\n      }\n      return container;\n  }\n  /**\n   * @internal\n   */\n  const initDirectivesForSSR = NOOP;\n\n  exports.BaseTransition = BaseTransition;\n  exports.Comment = Comment;\n  exports.EffectScope = EffectScope;\n  exports.Fragment = Fragment;\n  exports.KeepAlive = KeepAlive;\n  exports.ReactiveEffect = ReactiveEffect;\n  exports.Static = Static;\n  exports.Suspense = Suspense;\n  exports.Teleport = Teleport;\n  exports.Text = Text;\n  exports.Transition = Transition;\n  exports.TransitionGroup = TransitionGroup;\n  exports.VueElement = VueElement;\n  exports.assertNumber = assertNumber;\n  exports.callWithAsyncErrorHandling = callWithAsyncErrorHandling;\n  exports.callWithErrorHandling = callWithErrorHandling;\n  exports.camelize = camelize;\n  exports.capitalize = capitalize;\n  exports.cloneVNode = cloneVNode;\n  exports.compatUtils = compatUtils;\n  exports.computed = computed;\n  exports.createApp = createApp;\n  exports.createBlock = createBlock;\n  exports.createCommentVNode = createCommentVNode;\n  exports.createElementBlock = createElementBlock;\n  exports.createElementVNode = createBaseVNode;\n  exports.createHydrationRenderer = createHydrationRenderer;\n  exports.createPropsRestProxy = createPropsRestProxy;\n  exports.createRenderer = createRenderer;\n  exports.createSSRApp = createSSRApp;\n  exports.createSlots = createSlots;\n  exports.createStaticVNode = createStaticVNode;\n  exports.createTextVNode = createTextVNode;\n  exports.createVNode = createVNode;\n  exports.customRef = customRef;\n  exports.defineAsyncComponent = defineAsyncComponent;\n  exports.defineComponent = defineComponent;\n  exports.defineCustomElement = defineCustomElement;\n  exports.defineEmits = defineEmits;\n  exports.defineExpose = defineExpose;\n  exports.defineProps = defineProps;\n  exports.defineSSRCustomElement = defineSSRCustomElement;\n  exports.effect = effect;\n  exports.effectScope = effectScope;\n  exports.getCurrentInstance = getCurrentInstance;\n  exports.getCurrentScope = getCurrentScope;\n  exports.getTransitionRawChildren = getTransitionRawChildren;\n  exports.guardReactiveProps = guardReactiveProps;\n  exports.h = h;\n  exports.handleError = handleError;\n  exports.hydrate = hydrate;\n  exports.initCustomFormatter = initCustomFormatter;\n  exports.initDirectivesForSSR = initDirectivesForSSR;\n  exports.inject = inject;\n  exports.isMemoSame = isMemoSame;\n  exports.isProxy = isProxy;\n  exports.isReactive = isReactive;\n  exports.isReadonly = isReadonly;\n  exports.isRef = isRef;\n  exports.isRuntimeOnly = isRuntimeOnly;\n  exports.isShallow = isShallow;\n  exports.isVNode = isVNode;\n  exports.markRaw = markRaw;\n  exports.mergeDefaults = mergeDefaults;\n  exports.mergeProps = mergeProps;\n  exports.nextTick = nextTick;\n  exports.normalizeClass = normalizeClass;\n  exports.normalizeProps = normalizeProps;\n  exports.normalizeStyle = normalizeStyle;\n  exports.onActivated = onActivated;\n  exports.onBeforeMount = onBeforeMount;\n  exports.onBeforeUnmount = onBeforeUnmount;\n  exports.onBeforeUpdate = onBeforeUpdate;\n  exports.onDeactivated = onDeactivated;\n  exports.onErrorCaptured = onErrorCaptured;\n  exports.onMounted = onMounted;\n  exports.onRenderTracked = onRenderTracked;\n  exports.onRenderTriggered = onRenderTriggered;\n  exports.onScopeDispose = onScopeDispose;\n  exports.onServerPrefetch = onServerPrefetch;\n  exports.onUnmounted = onUnmounted;\n  exports.onUpdated = onUpdated;\n  exports.openBlock = openBlock;\n  exports.popScopeId = popScopeId;\n  exports.provide = provide;\n  exports.proxyRefs = proxyRefs;\n  exports.pushScopeId = pushScopeId;\n  exports.queuePostFlushCb = queuePostFlushCb;\n  exports.reactive = reactive;\n  exports.readonly = readonly;\n  exports.ref = ref;\n  exports.registerRuntimeCompiler = registerRuntimeCompiler;\n  exports.render = render;\n  exports.renderList = renderList;\n  exports.renderSlot = renderSlot;\n  exports.resolveComponent = resolveComponent;\n  exports.resolveDirective = resolveDirective;\n  exports.resolveDynamicComponent = resolveDynamicComponent;\n  exports.resolveFilter = resolveFilter;\n  exports.resolveTransitionHooks = resolveTransitionHooks;\n  exports.setBlockTracking = setBlockTracking;\n  exports.setDevtoolsHook = setDevtoolsHook;\n  exports.setTransitionHooks = setTransitionHooks;\n  exports.shallowReactive = shallowReactive;\n  exports.shallowReadonly = shallowReadonly;\n  exports.shallowRef = shallowRef;\n  exports.ssrContextKey = ssrContextKey;\n  exports.ssrUtils = ssrUtils;\n  exports.stop = stop;\n  exports.toDisplayString = toDisplayString;\n  exports.toHandlerKey = toHandlerKey;\n  exports.toHandlers = toHandlers;\n  exports.toRaw = toRaw;\n  exports.toRef = toRef;\n  exports.toRefs = toRefs;\n  exports.transformVNodeArgs = transformVNodeArgs;\n  exports.triggerRef = triggerRef;\n  exports.unref = unref;\n  exports.useAttrs = useAttrs;\n  exports.useCssModule = useCssModule;\n  exports.useCssVars = useCssVars;\n  exports.useSSRContext = useSSRContext;\n  exports.useSlots = useSlots;\n  exports.useTransitionState = useTransitionState;\n  exports.vModelCheckbox = vModelCheckbox;\n  exports.vModelDynamic = vModelDynamic;\n  exports.vModelRadio = vModelRadio;\n  exports.vModelSelect = vModelSelect;\n  exports.vModelText = vModelText;\n  exports.vShow = vShow;\n  exports.version = version;\n  exports.warn = warn;\n  exports.watch = watch;\n  exports.watchEffect = watchEffect;\n  exports.watchPostEffect = watchPostEffect;\n  exports.watchSyncEffect = watchSyncEffect;\n  exports.withAsyncContext = withAsyncContext;\n  exports.withCtx = withCtx;\n  exports.withDefaults = withDefaults;\n  exports.withDirectives = withDirectives;\n  exports.withKeys = withKeys;\n  exports.withMemo = withMemo;\n  exports.withModifiers = withModifiers;\n  exports.withScopeId = withScopeId;\n\n  Object.defineProperty(exports, '__esModule', { value: true });\n\n  return exports;\n\n})({});\n/dist/runtime-dom.cjs.prod.jsӵ'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar runtimeCore = require('@vue/runtime-core');\nvar shared = require('@vue/shared');\n\nconst svgNS = 'http://www.w3.org/2000/svg';\nconst doc = (typeof document !== 'undefined' ? document : null);\nconst templateContainer = doc && /*#__PURE__*/ doc.createElement('template');\nconst nodeOps = {\n    insert: (child, parent, anchor) => {\n        parent.insertBefore(child, anchor || null);\n    },\n    remove: child => {\n        const parent = child.parentNode;\n        if (parent) {\n            parent.removeChild(child);\n        }\n    },\n    createElement: (tag, isSVG, is, props) => {\n        const el = isSVG\n            ? doc.createElementNS(svgNS, tag)\n            : doc.createElement(tag, is ? { is } : undefined);\n        if (tag === 'select' && props && props.multiple != null) {\n            el.setAttribute('multiple', props.multiple);\n        }\n        return el;\n    },\n    createText: text => doc.createTextNode(text),\n    createComment: text => doc.createComment(text),\n    setText: (node, text) => {\n        node.nodeValue = text;\n    },\n    setElementText: (el, text) => {\n        el.textContent = text;\n    },\n    parentNode: node => node.parentNode,\n    nextSibling: node => node.nextSibling,\n    querySelector: selector => doc.querySelector(selector),\n    setScopeId(el, id) {\n        el.setAttribute(id, '');\n    },\n    // __UNSAFE__\n    // Reason: innerHTML.\n    // Static content here can only come from compiled templates.\n    // As long as the user only uses trusted templates, this is safe.\n    insertStaticContent(content, parent, anchor, isSVG, start, end) {\n        // <parent> before | first ... last | anchor </parent>\n        const before = anchor ? anchor.previousSibling : parent.lastChild;\n        // #5308 can only take cached path if:\n        // - has a single root node\n        // - nextSibling info is still available\n        if (start && (start === end || start.nextSibling)) {\n            // cached\n            while (true) {\n                parent.insertBefore(start.cloneNode(true), anchor);\n                if (start === end || !(start = start.nextSibling))\n                    break;\n            }\n        }\n        else {\n            // fresh insert\n            templateContainer.innerHTML = isSVG ? `<svg>${content}</svg>` : content;\n            const template = templateContainer.content;\n            if (isSVG) {\n                // remove outer svg wrapper\n                const wrapper = template.firstChild;\n                while (wrapper.firstChild) {\n                    template.appendChild(wrapper.firstChild);\n                }\n                template.removeChild(wrapper);\n            }\n            parent.insertBefore(template, anchor);\n        }\n        return [\n            // first\n            before ? before.nextSibling : parent.firstChild,\n            // last\n            anchor ? anchor.previousSibling : parent.lastChild\n        ];\n    }\n};\n\n// compiler should normalize class + :class bindings on the same element\n// into a single binding ['staticClass', dynamic]\nfunction patchClass(el, value, isSVG) {\n    // directly setting className should be faster than setAttribute in theory\n    // if this is an element during a transition, take the temporary transition\n    // classes into account.\n    const transitionClasses = el._vtc;\n    if (transitionClasses) {\n        value = (value ? [value, ...transitionClasses] : [...transitionClasses]).join(' ');\n    }\n    if (value == null) {\n        el.removeAttribute('class');\n    }\n    else if (isSVG) {\n        el.setAttribute('class', value);\n    }\n    else {\n        el.className = value;\n    }\n}\n\nfunction patchStyle(el, prev, next) {\n    const style = el.style;\n    const isCssString = shared.isString(next);\n    if (next && !isCssString) {\n        if (prev && !shared.isString(prev)) {\n            for (const key in prev) {\n                if (next[key] == null) {\n                    setStyle(style, key, '');\n                }\n            }\n        }\n        for (const key in next) {\n            setStyle(style, key, next[key]);\n        }\n    }\n    else {\n        const currentDisplay = style.display;\n        if (isCssString) {\n            if (prev !== next) {\n                style.cssText = next;\n            }\n        }\n        else if (prev) {\n            el.removeAttribute('style');\n        }\n        // indicates that the `display` of the element is controlled by `v-show`,\n        // so we always keep the current `display` value regardless of the `style`\n        // value, thus handing over control to `v-show`.\n        if ('_vod' in el) {\n            style.display = currentDisplay;\n        }\n    }\n}\nconst importantRE = /\\s*!important$/;\nfunction setStyle(style, name, val) {\n    if (shared.isArray(val)) {\n        val.forEach(v => setStyle(style, name, v));\n    }\n    else {\n        if (val == null)\n            val = '';\n        if (name.startsWith('--')) {\n            // custom property definition\n            style.setProperty(name, val);\n        }\n        else {\n            const prefixed = autoPrefix(style, name);\n            if (importantRE.test(val)) {\n                // !important\n                style.setProperty(shared.hyphenate(prefixed), val.replace(importantRE, ''), 'important');\n            }\n            else {\n                style[prefixed] = val;\n            }\n        }\n    }\n}\nconst prefixes = ['Webkit', 'Moz', 'ms'];\nconst prefixCache = {};\nfunction autoPrefix(style, rawName) {\n    const cached = prefixCache[rawName];\n    if (cached) {\n        return cached;\n    }\n    let name = runtimeCore.camelize(rawName);\n    if (name !== 'filter' && name in style) {\n        return (prefixCache[rawName] = name);\n    }\n    name = shared.capitalize(name);\n    for (let i = 0; i < prefixes.length; i++) {\n        const prefixed = prefixes[i] + name;\n        if (prefixed in style) {\n            return (prefixCache[rawName] = prefixed);\n        }\n    }\n    return rawName;\n}\n\nconst xlinkNS = 'http://www.w3.org/1999/xlink';\nfunction patchAttr(el, key, value, isSVG, instance) {\n    if (isSVG && key.startsWith('xlink:')) {\n        if (value == null) {\n            el.removeAttributeNS(xlinkNS, key.slice(6, key.length));\n        }\n        else {\n            el.setAttributeNS(xlinkNS, key, value);\n        }\n    }\n    else {\n        // note we are only checking boolean attributes that don't have a\n        // corresponding dom prop of the same name here.\n        const isBoolean = shared.isSpecialBooleanAttr(key);\n        if (value == null || (isBoolean && !shared.includeBooleanAttr(value))) {\n            el.removeAttribute(key);\n        }\n        else {\n            el.setAttribute(key, isBoolean ? '' : value);\n        }\n    }\n}\n\n// __UNSAFE__\n// functions. The user is responsible for using them with only trusted content.\nfunction patchDOMProp(el, key, value, \n// the following args are passed only due to potential innerHTML/textContent\n// overriding existing VNodes, in which case the old tree must be properly\n// unmounted.\nprevChildren, parentComponent, parentSuspense, unmountChildren) {\n    if (key === 'innerHTML' || key === 'textContent') {\n        if (prevChildren) {\n            unmountChildren(prevChildren, parentComponent, parentSuspense);\n        }\n        el[key] = value == null ? '' : value;\n        return;\n    }\n    if (key === 'value' &&\n        el.tagName !== 'PROGRESS' &&\n        // custom elements may use _value internally\n        !el.tagName.includes('-')) {\n        // store value as _value as well since\n        // non-string values will be stringified.\n        el._value = value;\n        const newValue = value == null ? '' : value;\n        if (el.value !== newValue ||\n            // #4956: always set for OPTION elements because its value falls back to\n            // textContent if no value attribute is present. And setting .value for\n            // OPTION has no side effect\n            el.tagName === 'OPTION') {\n            el.value = newValue;\n        }\n        if (value == null) {\n            el.removeAttribute(key);\n        }\n        return;\n    }\n    let needRemove = false;\n    if (value === '' || value == null) {\n        const type = typeof el[key];\n        if (type === 'boolean') {\n            // e.g. <select multiple> compiles to { multiple: '' }\n            value = shared.includeBooleanAttr(value);\n        }\n        else if (value == null && type === 'string') {\n            // e.g. <div :id=\"null\">\n            value = '';\n            needRemove = true;\n        }\n        else if (type === 'number') {\n            // e.g. <img :width=\"null\">\n            value = 0;\n            needRemove = true;\n        }\n    }\n    // some properties perform value validation and throw,\n    // some properties has getter, no setter, will error in 'use strict'\n    // eg. <select :type=\"null\"></select> <select :willValidate=\"null\"></select>\n    try {\n        el[key] = value;\n    }\n    catch (e) {\n    }\n    needRemove && el.removeAttribute(key);\n}\n\nfunction addEventListener(el, event, handler, options) {\n    el.addEventListener(event, handler, options);\n}\nfunction removeEventListener(el, event, handler, options) {\n    el.removeEventListener(event, handler, options);\n}\nfunction patchEvent(el, rawName, prevValue, nextValue, instance = null) {\n    // vei = vue event invokers\n    const invokers = el._vei || (el._vei = {});\n    const existingInvoker = invokers[rawName];\n    if (nextValue && existingInvoker) {\n        // patch\n        existingInvoker.value = nextValue;\n    }\n    else {\n        const [name, options] = parseName(rawName);\n        if (nextValue) {\n            // add\n            const invoker = (invokers[rawName] = createInvoker(nextValue, instance));\n            addEventListener(el, name, invoker, options);\n        }\n        else if (existingInvoker) {\n            // remove\n            removeEventListener(el, name, existingInvoker, options);\n            invokers[rawName] = undefined;\n        }\n    }\n}\nconst optionsModifierRE = /(?:Once|Passive|Capture)$/;\nfunction parseName(name) {\n    let options;\n    if (optionsModifierRE.test(name)) {\n        options = {};\n        let m;\n        while ((m = name.match(optionsModifierRE))) {\n            name = name.slice(0, name.length - m[0].length);\n            options[m[0].toLowerCase()] = true;\n        }\n    }\n    const event = name[2] === ':' ? name.slice(3) : shared.hyphenate(name.slice(2));\n    return [event, options];\n}\n// To avoid the overhead of repeatedly calling Date.now(), we cache\n// and use the same timestamp for all event listeners attached in the same tick.\nlet cachedNow = 0;\nconst p = /*#__PURE__*/ Promise.resolve();\nconst getNow = () => cachedNow || (p.then(() => (cachedNow = 0)), (cachedNow = Date.now()));\nfunction createInvoker(initialValue, instance) {\n    const invoker = (e) => {\n        // async edge case vuejs/vue#6566\n        // inner click event triggers patch, event handler\n        // attached to outer element during patch, and triggered again. This\n        // happens because browsers fire microtask ticks between event propagation.\n        // this no longer happens for templates in Vue 3, but could still be\n        // theoretically possible for hand-written render functions.\n        // the solution: we save the timestamp when a handler is attached,\n        // and also attach the timestamp to any event that was handled by vue\n        // for the first time (to avoid inconsistent event timestamp implementations\n        // or events fired from iframes, e.g. #2513)\n        // The handler would only fire if the event passed to it was fired\n        // AFTER it was attached.\n        if (!e._vts) {\n            e._vts = Date.now();\n        }\n        else if (e._vts <= invoker.attached) {\n            return;\n        }\n        runtimeCore.callWithAsyncErrorHandling(patchStopImmediatePropagation(e, invoker.value), instance, 5 /* ErrorCodes.NATIVE_EVENT_HANDLER */, [e]);\n    };\n    invoker.value = initialValue;\n    invoker.attached = getNow();\n    return invoker;\n}\nfunction patchStopImmediatePropagation(e, value) {\n    if (shared.isArray(value)) {\n        const originalStop = e.stopImmediatePropagation;\n        e.stopImmediatePropagation = () => {\n            originalStop.call(e);\n            e._stopped = true;\n        };\n        return value.map(fn => (e) => !e._stopped && fn && fn(e));\n    }\n    else {\n        return value;\n    }\n}\n\nconst nativeOnRE = /^on[a-z]/;\nconst patchProp = (el, key, prevValue, nextValue, isSVG = false, prevChildren, parentComponent, parentSuspense, unmountChildren) => {\n    if (key === 'class') {\n        patchClass(el, nextValue, isSVG);\n    }\n    else if (key === 'style') {\n        patchStyle(el, prevValue, nextValue);\n    }\n    else if (shared.isOn(key)) {\n        // ignore v-model listeners\n        if (!shared.isModelListener(key)) {\n            patchEvent(el, key, prevValue, nextValue, parentComponent);\n        }\n    }\n    else if (key[0] === '.'\n        ? ((key = key.slice(1)), true)\n        : key[0] === '^'\n            ? ((key = key.slice(1)), false)\n            : shouldSetAsProp(el, key, nextValue, isSVG)) {\n        patchDOMProp(el, key, nextValue, prevChildren, parentComponent, parentSuspense, unmountChildren);\n    }\n    else {\n        // special case for <input v-model type=\"checkbox\"> with\n        // :true-value & :false-value\n        // store value as dom properties since non-string values will be\n        // stringified.\n        if (key === 'true-value') {\n            el._trueValue = nextValue;\n        }\n        else if (key === 'false-value') {\n            el._falseValue = nextValue;\n        }\n        patchAttr(el, key, nextValue, isSVG);\n    }\n};\nfunction shouldSetAsProp(el, key, value, isSVG) {\n    if (isSVG) {\n        // most keys must be set as attribute on svg elements to work\n        // ...except innerHTML & textContent\n        if (key === 'innerHTML' || key === 'textContent') {\n            return true;\n        }\n        // or native onclick with function values\n        if (key in el && nativeOnRE.test(key) && shared.isFunction(value)) {\n            return true;\n        }\n        return false;\n    }\n    // these are enumerated attrs, however their corresponding DOM properties\n    // are actually booleans - this leads to setting it with a string \"false\"\n    // value leading it to be coerced to `true`, so we need to always treat\n    // them as attributes.\n    // Note that `contentEditable` doesn't have this problem: its DOM\n    // property is also enumerated string values.\n    if (key === 'spellcheck' || key === 'draggable' || key === 'translate') {\n        return false;\n    }\n    // #1787, #2840 form property on form elements is readonly and must be set as\n    // attribute.\n    if (key === 'form') {\n        return false;\n    }\n    // #1526 <input list> must be set as attribute\n    if (key === 'list' && el.tagName === 'INPUT') {\n        return false;\n    }\n    // #2766 <textarea type> must be set as attribute\n    if (key === 'type' && el.tagName === 'TEXTAREA') {\n        return false;\n    }\n    // native onclick with string value, must be set as attribute\n    if (nativeOnRE.test(key) && shared.isString(value)) {\n        return false;\n    }\n    return key in el;\n}\n\nfunction defineCustomElement(options, hydrate) {\n    const Comp = runtimeCore.defineComponent(options);\n    class VueCustomElement extends VueElement {\n        constructor(initialProps) {\n            super(Comp, initialProps, hydrate);\n        }\n    }\n    VueCustomElement.def = Comp;\n    return VueCustomElement;\n}\nconst defineSSRCustomElement = ((options) => {\n    // @ts-ignore\n    return defineCustomElement(options, hydrate);\n});\nconst BaseClass = (typeof HTMLElement !== 'undefined' ? HTMLElement : class {\n});\nclass VueElement extends BaseClass {\n    constructor(_def, _props = {}, hydrate) {\n        super();\n        this._def = _def;\n        this._props = _props;\n        /**\n         * @internal\n         */\n        this._instance = null;\n        this._connected = false;\n        this._resolved = false;\n        this._numberProps = null;\n        if (this.shadowRoot && hydrate) {\n            hydrate(this._createVNode(), this.shadowRoot);\n        }\n        else {\n            this.attachShadow({ mode: 'open' });\n            if (!this._def.__asyncLoader) {\n                // for sync component defs we can immediately resolve props\n                this._resolveProps(this._def);\n            }\n        }\n    }\n    connectedCallback() {\n        this._connected = true;\n        if (!this._instance) {\n            if (this._resolved) {\n                this._update();\n            }\n            else {\n                this._resolveDef();\n            }\n        }\n    }\n    disconnectedCallback() {\n        this._connected = false;\n        runtimeCore.nextTick(() => {\n            if (!this._connected) {\n                render(null, this.shadowRoot);\n                this._instance = null;\n            }\n        });\n    }\n    /**\n     * resolve inner component definition (handle possible async component)\n     */\n    _resolveDef() {\n        this._resolved = true;\n        // set initial attrs\n        for (let i = 0; i < this.attributes.length; i++) {\n            this._setAttr(this.attributes[i].name);\n        }\n        // watch future attr changes\n        new MutationObserver(mutations => {\n            for (const m of mutations) {\n                this._setAttr(m.attributeName);\n            }\n        }).observe(this, { attributes: true });\n        const resolve = (def, isAsync = false) => {\n            const { props, styles } = def;\n            // cast Number-type props set before resolve\n            let numberProps;\n            if (props && !shared.isArray(props)) {\n                for (const key in props) {\n                    const opt = props[key];\n                    if (opt === Number || (opt && opt.type === Number)) {\n                        if (key in this._props) {\n                            this._props[key] = shared.toNumber(this._props[key]);\n                        }\n                        (numberProps || (numberProps = Object.create(null)))[shared.camelize(key)] = true;\n                    }\n                }\n            }\n            this._numberProps = numberProps;\n            if (isAsync) {\n                // defining getter/setters on prototype\n                // for sync defs, this already happened in the constructor\n                this._resolveProps(def);\n            }\n            // apply CSS\n            this._applyStyles(styles);\n            // initial render\n            this._update();\n        };\n        const asyncDef = this._def.__asyncLoader;\n        if (asyncDef) {\n            asyncDef().then(def => resolve(def, true));\n        }\n        else {\n            resolve(this._def);\n        }\n    }\n    _resolveProps(def) {\n        const { props } = def;\n        const declaredPropKeys = shared.isArray(props) ? props : Object.keys(props || {});\n        // check if there are props set pre-upgrade or connect\n        for (const key of Object.keys(this)) {\n            if (key[0] !== '_' && declaredPropKeys.includes(key)) {\n                this._setProp(key, this[key], true, false);\n            }\n        }\n        // defining getter/setters on prototype\n        for (const key of declaredPropKeys.map(shared.camelize)) {\n            Object.defineProperty(this, key, {\n                get() {\n                    return this._getProp(key);\n                },\n                set(val) {\n                    this._setProp(key, val);\n                }\n            });\n        }\n    }\n    _setAttr(key) {\n        let value = this.getAttribute(key);\n        const camelKey = shared.camelize(key);\n        if (this._numberProps && this._numberProps[camelKey]) {\n            value = shared.toNumber(value);\n        }\n        this._setProp(camelKey, value, false);\n    }\n    /**\n     * @internal\n     */\n    _getProp(key) {\n        return this._props[key];\n    }\n    /**\n     * @internal\n     */\n    _setProp(key, val, shouldReflect = true, shouldUpdate = true) {\n        if (val !== this._props[key]) {\n            this._props[key] = val;\n            if (shouldUpdate && this._instance) {\n                this._update();\n            }\n            // reflect\n            if (shouldReflect) {\n                if (val === true) {\n                    this.setAttribute(shared.hyphenate(key), '');\n                }\n                else if (typeof val === 'string' || typeof val === 'number') {\n                    this.setAttribute(shared.hyphenate(key), val + '');\n                }\n                else if (!val) {\n                    this.removeAttribute(shared.hyphenate(key));\n                }\n            }\n        }\n    }\n    _update() {\n        render(this._createVNode(), this.shadowRoot);\n    }\n    _createVNode() {\n        const vnode = runtimeCore.createVNode(this._def, shared.extend({}, this._props));\n        if (!this._instance) {\n            vnode.ce = instance => {\n                this._instance = instance;\n                instance.isCE = true;\n                const dispatch = (event, args) => {\n                    this.dispatchEvent(new CustomEvent(event, {\n                        detail: args\n                    }));\n                };\n                // intercept emit\n                instance.emit = (event, ...args) => {\n                    // dispatch both the raw and hyphenated versions of an event\n                    // to match Vue behavior\n                    dispatch(event, args);\n                    if (shared.hyphenate(event) !== event) {\n                        dispatch(shared.hyphenate(event), args);\n                    }\n                };\n                // locate nearest Vue custom element parent for provide/inject\n                let parent = this;\n                while ((parent =\n                    parent && (parent.parentNode || parent.host))) {\n                    if (parent instanceof VueElement) {\n                        instance.parent = parent._instance;\n                        instance.provides = parent._instance.provides;\n                        break;\n                    }\n                }\n            };\n        }\n        return vnode;\n    }\n    _applyStyles(styles) {\n        if (styles) {\n            styles.forEach(css => {\n                const s = document.createElement('style');\n                s.textContent = css;\n                this.shadowRoot.appendChild(s);\n            });\n        }\n    }\n}\n\nfunction useCssModule(name = '$style') {\n    /* istanbul ignore else */\n    {\n        const instance = runtimeCore.getCurrentInstance();\n        if (!instance) {\n            return shared.EMPTY_OBJ;\n        }\n        const modules = instance.type.__cssModules;\n        if (!modules) {\n            return shared.EMPTY_OBJ;\n        }\n        const mod = modules[name];\n        if (!mod) {\n            return shared.EMPTY_OBJ;\n        }\n        return mod;\n    }\n}\n\n/**\n * Runtime helper for SFC's CSS variable injection feature.\n * @private\n */\nfunction useCssVars(getter) {\n    return;\n}\n\nconst TRANSITION = 'transition';\nconst ANIMATION = 'animation';\n// DOM Transition is a higher-order-component based on the platform-agnostic\n// base Transition component, with DOM-specific logic.\nconst Transition = (props, { slots }) => runtimeCore.h(runtimeCore.BaseTransition, resolveTransitionProps(props), slots);\nTransition.displayName = 'Transition';\nconst DOMTransitionPropsValidators = {\n    name: String,\n    type: String,\n    css: {\n        type: Boolean,\n        default: true\n    },\n    duration: [String, Number, Object],\n    enterFromClass: String,\n    enterActiveClass: String,\n    enterToClass: String,\n    appearFromClass: String,\n    appearActiveClass: String,\n    appearToClass: String,\n    leaveFromClass: String,\n    leaveActiveClass: String,\n    leaveToClass: String\n};\nconst TransitionPropsValidators = (Transition.props =\n    /*#__PURE__*/ shared.extend({}, runtimeCore.BaseTransition.props, DOMTransitionPropsValidators));\n/**\n * #3227 Incoming hooks may be merged into arrays when wrapping Transition\n * with custom HOCs.\n */\nconst callHook = (hook, args = []) => {\n    if (shared.isArray(hook)) {\n        hook.forEach(h => h(...args));\n    }\n    else if (hook) {\n        hook(...args);\n    }\n};\n/**\n * Check if a hook expects a callback (2nd arg), which means the user\n * intends to explicitly control the end of the transition.\n */\nconst hasExplicitCallback = (hook) => {\n    return hook\n        ? shared.isArray(hook)\n            ? hook.some(h => h.length > 1)\n            : hook.length > 1\n        : false;\n};\nfunction resolveTransitionProps(rawProps) {\n    const baseProps = {};\n    for (const key in rawProps) {\n        if (!(key in DOMTransitionPropsValidators)) {\n            baseProps[key] = rawProps[key];\n        }\n    }\n    if (rawProps.css === false) {\n        return baseProps;\n    }\n    const { name = 'v', type, duration, enterFromClass = `${name}-enter-from`, enterActiveClass = `${name}-enter-active`, enterToClass = `${name}-enter-to`, appearFromClass = enterFromClass, appearActiveClass = enterActiveClass, appearToClass = enterToClass, leaveFromClass = `${name}-leave-from`, leaveActiveClass = `${name}-leave-active`, leaveToClass = `${name}-leave-to` } = rawProps;\n    const durations = normalizeDuration(duration);\n    const enterDuration = durations && durations[0];\n    const leaveDuration = durations && durations[1];\n    const { onBeforeEnter, onEnter, onEnterCancelled, onLeave, onLeaveCancelled, onBeforeAppear = onBeforeEnter, onAppear = onEnter, onAppearCancelled = onEnterCancelled } = baseProps;\n    const finishEnter = (el, isAppear, done) => {\n        removeTransitionClass(el, isAppear ? appearToClass : enterToClass);\n        removeTransitionClass(el, isAppear ? appearActiveClass : enterActiveClass);\n        done && done();\n    };\n    const finishLeave = (el, done) => {\n        el._isLeaving = false;\n        removeTransitionClass(el, leaveFromClass);\n        removeTransitionClass(el, leaveToClass);\n        removeTransitionClass(el, leaveActiveClass);\n        done && done();\n    };\n    const makeEnterHook = (isAppear) => {\n        return (el, done) => {\n            const hook = isAppear ? onAppear : onEnter;\n            const resolve = () => finishEnter(el, isAppear, done);\n            callHook(hook, [el, resolve]);\n            nextFrame(() => {\n                removeTransitionClass(el, isAppear ? appearFromClass : enterFromClass);\n                addTransitionClass(el, isAppear ? appearToClass : enterToClass);\n                if (!hasExplicitCallback(hook)) {\n                    whenTransitionEnds(el, type, enterDuration, resolve);\n                }\n            });\n        };\n    };\n    return shared.extend(baseProps, {\n        onBeforeEnter(el) {\n            callHook(onBeforeEnter, [el]);\n            addTransitionClass(el, enterFromClass);\n            addTransitionClass(el, enterActiveClass);\n        },\n        onBeforeAppear(el) {\n            callHook(onBeforeAppear, [el]);\n            addTransitionClass(el, appearFromClass);\n            addTransitionClass(el, appearActiveClass);\n        },\n        onEnter: makeEnterHook(false),\n        onAppear: makeEnterHook(true),\n        onLeave(el, done) {\n            el._isLeaving = true;\n            const resolve = () => finishLeave(el, done);\n            addTransitionClass(el, leaveFromClass);\n            // force reflow so *-leave-from classes immediately take effect (#2593)\n            forceReflow();\n            addTransitionClass(el, leaveActiveClass);\n            nextFrame(() => {\n                if (!el._isLeaving) {\n                    // cancelled\n                    return;\n                }\n                removeTransitionClass(el, leaveFromClass);\n                addTransitionClass(el, leaveToClass);\n                if (!hasExplicitCallback(onLeave)) {\n                    whenTransitionEnds(el, type, leaveDuration, resolve);\n                }\n            });\n            callHook(onLeave, [el, resolve]);\n        },\n        onEnterCancelled(el) {\n            finishEnter(el, false);\n            callHook(onEnterCancelled, [el]);\n        },\n        onAppearCancelled(el) {\n            finishEnter(el, true);\n            callHook(onAppearCancelled, [el]);\n        },\n        onLeaveCancelled(el) {\n            finishLeave(el);\n            callHook(onLeaveCancelled, [el]);\n        }\n    });\n}\nfunction normalizeDuration(duration) {\n    if (duration == null) {\n        return null;\n    }\n    else if (shared.isObject(duration)) {\n        return [NumberOf(duration.enter), NumberOf(duration.leave)];\n    }\n    else {\n        const n = NumberOf(duration);\n        return [n, n];\n    }\n}\nfunction NumberOf(val) {\n    const res = shared.toNumber(val);\n    return res;\n}\nfunction addTransitionClass(el, cls) {\n    cls.split(/\\s+/).forEach(c => c && el.classList.add(c));\n    (el._vtc ||\n        (el._vtc = new Set())).add(cls);\n}\nfunction removeTransitionClass(el, cls) {\n    cls.split(/\\s+/).forEach(c => c && el.classList.remove(c));\n    const { _vtc } = el;\n    if (_vtc) {\n        _vtc.delete(cls);\n        if (!_vtc.size) {\n            el._vtc = undefined;\n        }\n    }\n}\nfunction nextFrame(cb) {\n    requestAnimationFrame(() => {\n        requestAnimationFrame(cb);\n    });\n}\nlet endId = 0;\nfunction whenTransitionEnds(el, expectedType, explicitTimeout, resolve) {\n    const id = (el._endId = ++endId);\n    const resolveIfNotStale = () => {\n        if (id === el._endId) {\n            resolve();\n        }\n    };\n    if (explicitTimeout) {\n        return setTimeout(resolveIfNotStale, explicitTimeout);\n    }\n    const { type, timeout, propCount } = getTransitionInfo(el, expectedType);\n    if (!type) {\n        return resolve();\n    }\n    const endEvent = type + 'end';\n    let ended = 0;\n    const end = () => {\n        el.removeEventListener(endEvent, onEnd);\n        resolveIfNotStale();\n    };\n    const onEnd = (e) => {\n        if (e.target === el && ++ended >= propCount) {\n            end();\n        }\n    };\n    setTimeout(() => {\n        if (ended < propCount) {\n            end();\n        }\n    }, timeout + 1);\n    el.addEventListener(endEvent, onEnd);\n}\nfunction getTransitionInfo(el, expectedType) {\n    const styles = window.getComputedStyle(el);\n    // JSDOM may return undefined for transition properties\n    const getStyleProperties = (key) => (styles[key] || '').split(', ');\n    const transitionDelays = getStyleProperties(`${TRANSITION}Delay`);\n    const transitionDurations = getStyleProperties(`${TRANSITION}Duration`);\n    const transitionTimeout = getTimeout(transitionDelays, transitionDurations);\n    const animationDelays = getStyleProperties(`${ANIMATION}Delay`);\n    const animationDurations = getStyleProperties(`${ANIMATION}Duration`);\n    const animationTimeout = getTimeout(animationDelays, animationDurations);\n    let type = null;\n    let timeout = 0;\n    let propCount = 0;\n    /* istanbul ignore if */\n    if (expectedType === TRANSITION) {\n        if (transitionTimeout > 0) {\n            type = TRANSITION;\n            timeout = transitionTimeout;\n            propCount = transitionDurations.length;\n        }\n    }\n    else if (expectedType === ANIMATION) {\n        if (animationTimeout > 0) {\n            type = ANIMATION;\n            timeout = animationTimeout;\n            propCount = animationDurations.length;\n        }\n    }\n    else {\n        timeout = Math.max(transitionTimeout, animationTimeout);\n        type =\n            timeout > 0\n                ? transitionTimeout > animationTimeout\n                    ? TRANSITION\n                    : ANIMATION\n                : null;\n        propCount = type\n            ? type === TRANSITION\n                ? transitionDurations.length\n                : animationDurations.length\n            : 0;\n    }\n    const hasTransform = type === TRANSITION &&\n        /\\b(transform|all)(,|$)/.test(getStyleProperties(`${TRANSITION}Property`).toString());\n    return {\n        type,\n        timeout,\n        propCount,\n        hasTransform\n    };\n}\nfunction getTimeout(delays, durations) {\n    while (delays.length < durations.length) {\n        delays = delays.concat(delays);\n    }\n    return Math.max(...durations.map((d, i) => toMs(d) + toMs(delays[i])));\n}\n// Old versions of Chromium (below 61.0.3163.100) formats floating pointer\n// numbers in a locale-dependent way, using a comma instead of a dot.\n// If comma is not replaced with a dot, the input will be rounded down\n// (i.e. acting as a floor function) causing unexpected behaviors\nfunction toMs(s) {\n    return Number(s.slice(0, -1).replace(',', '.')) * 1000;\n}\n// synchronously force layout to put elements into a certain state\nfunction forceReflow() {\n    return document.body.offsetHeight;\n}\n\nconst positionMap = new WeakMap();\nconst newPositionMap = new WeakMap();\nconst TransitionGroupImpl = {\n    name: 'TransitionGroup',\n    props: /*#__PURE__*/ shared.extend({}, TransitionPropsValidators, {\n        tag: String,\n        moveClass: String\n    }),\n    setup(props, { slots }) {\n        const instance = runtimeCore.getCurrentInstance();\n        const state = runtimeCore.useTransitionState();\n        let prevChildren;\n        let children;\n        runtimeCore.onUpdated(() => {\n            // children is guaranteed to exist after initial render\n            if (!prevChildren.length) {\n                return;\n            }\n            const moveClass = props.moveClass || `${props.name || 'v'}-move`;\n            if (!hasCSSTransform(prevChildren[0].el, instance.vnode.el, moveClass)) {\n                return;\n            }\n            // we divide the work into three loops to avoid mixing DOM reads and writes\n            // in each iteration - which helps prevent layout thrashing.\n            prevChildren.forEach(callPendingCbs);\n            prevChildren.forEach(recordPosition);\n            const movedChildren = prevChildren.filter(applyTranslation);\n            // force reflow to put everything in position\n            forceReflow();\n            movedChildren.forEach(c => {\n                const el = c.el;\n                const style = el.style;\n                addTransitionClass(el, moveClass);\n                style.transform = style.webkitTransform = style.transitionDuration = '';\n                const cb = (el._moveCb = (e) => {\n                    if (e && e.target !== el) {\n                        return;\n                    }\n                    if (!e || /transform$/.test(e.propertyName)) {\n                        el.removeEventListener('transitionend', cb);\n                        el._moveCb = null;\n                        removeTransitionClass(el, moveClass);\n                    }\n                });\n                el.addEventListener('transitionend', cb);\n            });\n        });\n        return () => {\n            const rawProps = runtimeCore.toRaw(props);\n            const cssTransitionProps = resolveTransitionProps(rawProps);\n            let tag = rawProps.tag || runtimeCore.Fragment;\n            prevChildren = children;\n            children = slots.default ? runtimeCore.getTransitionRawChildren(slots.default()) : [];\n            for (let i = 0; i < children.length; i++) {\n                const child = children[i];\n                if (child.key != null) {\n                    runtimeCore.setTransitionHooks(child, runtimeCore.resolveTransitionHooks(child, cssTransitionProps, state, instance));\n                }\n            }\n            if (prevChildren) {\n                for (let i = 0; i < prevChildren.length; i++) {\n                    const child = prevChildren[i];\n                    runtimeCore.setTransitionHooks(child, runtimeCore.resolveTransitionHooks(child, cssTransitionProps, state, instance));\n                    positionMap.set(child, child.el.getBoundingClientRect());\n                }\n            }\n            return runtimeCore.createVNode(tag, null, children);\n        };\n    }\n};\n/**\n * TransitionGroup does not support \"mode\" so we need to remove it from the\n * props declarations, but direct delete operation is considered a side effect\n * and will make the entire transition feature non-tree-shakeable, so we do it\n * in a function and mark the function's invocation as pure.\n */\nconst removeMode = (props) => delete props.mode;\n/*#__PURE__*/ removeMode(TransitionGroupImpl.props);\nconst TransitionGroup = TransitionGroupImpl;\nfunction callPendingCbs(c) {\n    const el = c.el;\n    if (el._moveCb) {\n        el._moveCb();\n    }\n    if (el._enterCb) {\n        el._enterCb();\n    }\n}\nfunction recordPosition(c) {\n    newPositionMap.set(c, c.el.getBoundingClientRect());\n}\nfunction applyTranslation(c) {\n    const oldPos = positionMap.get(c);\n    const newPos = newPositionMap.get(c);\n    const dx = oldPos.left - newPos.left;\n    const dy = oldPos.top - newPos.top;\n    if (dx || dy) {\n        const s = c.el.style;\n        s.transform = s.webkitTransform = `translate(${dx}px,${dy}px)`;\n        s.transitionDuration = '0s';\n        return c;\n    }\n}\nfunction hasCSSTransform(el, root, moveClass) {\n    // Detect whether an element with the move class applied has\n    // CSS transitions. Since the element may be inside an entering\n    // transition at this very moment, we make a clone of it and remove\n    // all other transition classes applied to ensure only the move class\n    // is applied.\n    const clone = el.cloneNode();\n    if (el._vtc) {\n        el._vtc.forEach(cls => {\n            cls.split(/\\s+/).forEach(c => c && clone.classList.remove(c));\n        });\n    }\n    moveClass.split(/\\s+/).forEach(c => c && clone.classList.add(c));\n    clone.style.display = 'none';\n    const container = (root.nodeType === 1 ? root : root.parentNode);\n    container.appendChild(clone);\n    const { hasTransform } = getTransitionInfo(clone);\n    container.removeChild(clone);\n    return hasTransform;\n}\n\nconst getModelAssigner = (vnode) => {\n    const fn = vnode.props['onUpdate:modelValue'] ||\n        (false );\n    return shared.isArray(fn) ? value => shared.invokeArrayFns(fn, value) : fn;\n};\nfunction onCompositionStart(e) {\n    e.target.composing = true;\n}\nfunction onCompositionEnd(e) {\n    const target = e.target;\n    if (target.composing) {\n        target.composing = false;\n        target.dispatchEvent(new Event('input'));\n    }\n}\n// We are exporting the v-model runtime directly as vnode hooks so that it can\n// be tree-shaken in case v-model is never used.\nconst vModelText = {\n    created(el, { modifiers: { lazy, trim, number } }, vnode) {\n        el._assign = getModelAssigner(vnode);\n        const castToNumber = number || (vnode.props && vnode.props.type === 'number');\n        addEventListener(el, lazy ? 'change' : 'input', e => {\n            if (e.target.composing)\n                return;\n            let domValue = el.value;\n            if (trim) {\n                domValue = domValue.trim();\n            }\n            if (castToNumber) {\n                domValue = shared.looseToNumber(domValue);\n            }\n            el._assign(domValue);\n        });\n        if (trim) {\n            addEventListener(el, 'change', () => {\n                el.value = el.value.trim();\n            });\n        }\n        if (!lazy) {\n            addEventListener(el, 'compositionstart', onCompositionStart);\n            addEventListener(el, 'compositionend', onCompositionEnd);\n            // Safari < 10.2 & UIWebView doesn't fire compositionend when\n            // switching focus before confirming composition choice\n            // this also fixes the issue where some browsers e.g. iOS Chrome\n            // fires \"change\" instead of \"input\" on autocomplete.\n            addEventListener(el, 'change', onCompositionEnd);\n        }\n    },\n    // set value on mounted so it's after min/max for type=\"range\"\n    mounted(el, { value }) {\n        el.value = value == null ? '' : value;\n    },\n    beforeUpdate(el, { value, modifiers: { lazy, trim, number } }, vnode) {\n        el._assign = getModelAssigner(vnode);\n        // avoid clearing unresolved text. #2302\n        if (el.composing)\n            return;\n        if (document.activeElement === el && el.type !== 'range') {\n            if (lazy) {\n                return;\n            }\n            if (trim && el.value.trim() === value) {\n                return;\n            }\n            if ((number || el.type === 'number') &&\n                shared.looseToNumber(el.value) === value) {\n                return;\n            }\n        }\n        const newValue = value == null ? '' : value;\n        if (el.value !== newValue) {\n            el.value = newValue;\n        }\n    }\n};\nconst vModelCheckbox = {\n    // #4096 array checkboxes need to be deep traversed\n    deep: true,\n    created(el, _, vnode) {\n        el._assign = getModelAssigner(vnode);\n        addEventListener(el, 'change', () => {\n            const modelValue = el._modelValue;\n            const elementValue = getValue(el);\n            const checked = el.checked;\n            const assign = el._assign;\n            if (shared.isArray(modelValue)) {\n                const index = shared.looseIndexOf(modelValue, elementValue);\n                const found = index !== -1;\n                if (checked && !found) {\n                    assign(modelValue.concat(elementValue));\n                }\n                else if (!checked && found) {\n                    const filtered = [...modelValue];\n                    filtered.splice(index, 1);\n                    assign(filtered);\n                }\n            }\n            else if (shared.isSet(modelValue)) {\n                const cloned = new Set(modelValue);\n                if (checked) {\n                    cloned.add(elementValue);\n                }\n                else {\n                    cloned.delete(elementValue);\n                }\n                assign(cloned);\n            }\n            else {\n                assign(getCheckboxValue(el, checked));\n            }\n        });\n    },\n    // set initial checked on mount to wait for true-value/false-value\n    mounted: setChecked,\n    beforeUpdate(el, binding, vnode) {\n        el._assign = getModelAssigner(vnode);\n        setChecked(el, binding, vnode);\n    }\n};\nfunction setChecked(el, { value, oldValue }, vnode) {\n    el._modelValue = value;\n    if (shared.isArray(value)) {\n        el.checked = shared.looseIndexOf(value, vnode.props.value) > -1;\n    }\n    else if (shared.isSet(value)) {\n        el.checked = value.has(vnode.props.value);\n    }\n    else if (value !== oldValue) {\n        el.checked = shared.looseEqual(value, getCheckboxValue(el, true));\n    }\n}\nconst vModelRadio = {\n    created(el, { value }, vnode) {\n        el.checked = shared.looseEqual(value, vnode.props.value);\n        el._assign = getModelAssigner(vnode);\n        addEventListener(el, 'change', () => {\n            el._assign(getValue(el));\n        });\n    },\n    beforeUpdate(el, { value, oldValue }, vnode) {\n        el._assign = getModelAssigner(vnode);\n        if (value !== oldValue) {\n            el.checked = shared.looseEqual(value, vnode.props.value);\n        }\n    }\n};\nconst vModelSelect = {\n    // <select multiple> value need to be deep traversed\n    deep: true,\n    created(el, { value, modifiers: { number } }, vnode) {\n        const isSetModel = shared.isSet(value);\n        addEventListener(el, 'change', () => {\n            const selectedVal = Array.prototype.filter\n                .call(el.options, (o) => o.selected)\n                .map((o) => number ? shared.looseToNumber(getValue(o)) : getValue(o));\n            el._assign(el.multiple\n                ? isSetModel\n                    ? new Set(selectedVal)\n                    : selectedVal\n                : selectedVal[0]);\n        });\n        el._assign = getModelAssigner(vnode);\n    },\n    // set value in mounted & updated because <select> relies on its children\n    // <option>s.\n    mounted(el, { value }) {\n        setSelected(el, value);\n    },\n    beforeUpdate(el, _binding, vnode) {\n        el._assign = getModelAssigner(vnode);\n    },\n    updated(el, { value }) {\n        setSelected(el, value);\n    }\n};\nfunction setSelected(el, value) {\n    const isMultiple = el.multiple;\n    if (isMultiple && !shared.isArray(value) && !shared.isSet(value)) {\n        return;\n    }\n    for (let i = 0, l = el.options.length; i < l; i++) {\n        const option = el.options[i];\n        const optionValue = getValue(option);\n        if (isMultiple) {\n            if (shared.isArray(value)) {\n                option.selected = shared.looseIndexOf(value, optionValue) > -1;\n            }\n            else {\n                option.selected = value.has(optionValue);\n            }\n        }\n        else {\n            if (shared.looseEqual(getValue(option), value)) {\n                if (el.selectedIndex !== i)\n                    el.selectedIndex = i;\n                return;\n            }\n        }\n    }\n    if (!isMultiple && el.selectedIndex !== -1) {\n        el.selectedIndex = -1;\n    }\n}\n// retrieve raw value set via :value bindings\nfunction getValue(el) {\n    return '_value' in el ? el._value : el.value;\n}\n// retrieve raw value for true-value and false-value set via :true-value or :false-value bindings\nfunction getCheckboxValue(el, checked) {\n    const key = checked ? '_trueValue' : '_falseValue';\n    return key in el ? el[key] : checked;\n}\nconst vModelDynamic = {\n    created(el, binding, vnode) {\n        callModelHook(el, binding, vnode, null, 'created');\n    },\n    mounted(el, binding, vnode) {\n        callModelHook(el, binding, vnode, null, 'mounted');\n    },\n    beforeUpdate(el, binding, vnode, prevVNode) {\n        callModelHook(el, binding, vnode, prevVNode, 'beforeUpdate');\n    },\n    updated(el, binding, vnode, prevVNode) {\n        callModelHook(el, binding, vnode, prevVNode, 'updated');\n    }\n};\nfunction resolveDynamicModel(tagName, type) {\n    switch (tagName) {\n        case 'SELECT':\n            return vModelSelect;\n        case 'TEXTAREA':\n            return vModelText;\n        default:\n            switch (type) {\n                case 'checkbox':\n                    return vModelCheckbox;\n                case 'radio':\n                    return vModelRadio;\n                default:\n                    return vModelText;\n            }\n    }\n}\nfunction callModelHook(el, binding, vnode, prevVNode, hook) {\n    const modelToUse = resolveDynamicModel(el.tagName, vnode.props && vnode.props.type);\n    const fn = modelToUse[hook];\n    fn && fn(el, binding, vnode, prevVNode);\n}\n// SSR vnode transforms, only used when user includes client-oriented render\n// function in SSR\nfunction initVModelForSSR() {\n    vModelText.getSSRProps = ({ value }) => ({ value });\n    vModelRadio.getSSRProps = ({ value }, vnode) => {\n        if (vnode.props && shared.looseEqual(vnode.props.value, value)) {\n            return { checked: true };\n        }\n    };\n    vModelCheckbox.getSSRProps = ({ value }, vnode) => {\n        if (shared.isArray(value)) {\n            if (vnode.props && shared.looseIndexOf(value, vnode.props.value) > -1) {\n                return { checked: true };\n            }\n        }\n        else if (shared.isSet(value)) {\n            if (vnode.props && value.has(vnode.props.value)) {\n                return { checked: true };\n            }\n        }\n        else if (value) {\n            return { checked: true };\n        }\n    };\n    vModelDynamic.getSSRProps = (binding, vnode) => {\n        if (typeof vnode.type !== 'string') {\n            return;\n        }\n        const modelToUse = resolveDynamicModel(\n        // resolveDynamicModel expects an uppercase tag name, but vnode.type is lowercase\n        vnode.type.toUpperCase(), vnode.props && vnode.props.type);\n        if (modelToUse.getSSRProps) {\n            return modelToUse.getSSRProps(binding, vnode);\n        }\n    };\n}\n\nconst systemModifiers = ['ctrl', 'shift', 'alt', 'meta'];\nconst modifierGuards = {\n    stop: e => e.stopPropagation(),\n    prevent: e => e.preventDefault(),\n    self: e => e.target !== e.currentTarget,\n    ctrl: e => !e.ctrlKey,\n    shift: e => !e.shiftKey,\n    alt: e => !e.altKey,\n    meta: e => !e.metaKey,\n    left: e => 'button' in e && e.button !== 0,\n    middle: e => 'button' in e && e.button !== 1,\n    right: e => 'button' in e && e.button !== 2,\n    exact: (e, modifiers) => systemModifiers.some(m => e[`${m}Key`] && !modifiers.includes(m))\n};\n/**\n * @private\n */\nconst withModifiers = (fn, modifiers) => {\n    return (event, ...args) => {\n        for (let i = 0; i < modifiers.length; i++) {\n            const guard = modifierGuards[modifiers[i]];\n            if (guard && guard(event, modifiers))\n                return;\n        }\n        return fn(event, ...args);\n    };\n};\n// Kept for 2.x compat.\n// Note: IE11 compat for `spacebar` and `del` is removed for now.\nconst keyNames = {\n    esc: 'escape',\n    space: ' ',\n    up: 'arrow-up',\n    left: 'arrow-left',\n    right: 'arrow-right',\n    down: 'arrow-down',\n    delete: 'backspace'\n};\n/**\n * @private\n */\nconst withKeys = (fn, modifiers) => {\n    return (event) => {\n        if (!('key' in event)) {\n            return;\n        }\n        const eventKey = shared.hyphenate(event.key);\n        if (modifiers.some(k => k === eventKey || keyNames[k] === eventKey)) {\n            return fn(event);\n        }\n    };\n};\n\nconst vShow = {\n    beforeMount(el, { value }, { transition }) {\n        el._vod = el.style.display === 'none' ? '' : el.style.display;\n        if (transition && value) {\n            transition.beforeEnter(el);\n        }\n        else {\n            setDisplay(el, value);\n        }\n    },\n    mounted(el, { value }, { transition }) {\n        if (transition && value) {\n            transition.enter(el);\n        }\n    },\n    updated(el, { value, oldValue }, { transition }) {\n        if (!value === !oldValue)\n            return;\n        if (transition) {\n            if (value) {\n                transition.beforeEnter(el);\n                setDisplay(el, true);\n                transition.enter(el);\n            }\n            else {\n                transition.leave(el, () => {\n                    setDisplay(el, false);\n                });\n            }\n        }\n        else {\n            setDisplay(el, value);\n        }\n    },\n    beforeUnmount(el, { value }) {\n        setDisplay(el, value);\n    }\n};\nfunction setDisplay(el, value) {\n    el.style.display = value ? el._vod : 'none';\n}\n// SSR vnode transforms, only used when user includes client-oriented render\n// function in SSR\nfunction initVShowForSSR() {\n    vShow.getSSRProps = ({ value }) => {\n        if (!value) {\n            return { style: { display: 'none' } };\n        }\n    };\n}\n\nconst rendererOptions = /*#__PURE__*/ shared.extend({ patchProp }, nodeOps);\n// lazy create the renderer - this makes core renderer logic tree-shakable\n// in case the user only imports reactivity utilities from Vue.\nlet renderer;\nlet enabledHydration = false;\nfunction ensureRenderer() {\n    return (renderer ||\n        (renderer = runtimeCore.createRenderer(rendererOptions)));\n}\nfunction ensureHydrationRenderer() {\n    renderer = enabledHydration\n        ? renderer\n        : runtimeCore.createHydrationRenderer(rendererOptions);\n    enabledHydration = true;\n    return renderer;\n}\n// use explicit type casts here to avoid import() calls in rolled-up d.ts\nconst render = ((...args) => {\n    ensureRenderer().render(...args);\n});\nconst hydrate = ((...args) => {\n    ensureHydrationRenderer().hydrate(...args);\n});\nconst createApp = ((...args) => {\n    const app = ensureRenderer().createApp(...args);\n    const { mount } = app;\n    app.mount = (containerOrSelector) => {\n        const container = normalizeContainer(containerOrSelector);\n        if (!container)\n            return;\n        const component = app._component;\n        if (!shared.isFunction(component) && !component.render && !component.template) {\n            // __UNSAFE__\n            // Reason: potential execution of JS expressions in in-DOM template.\n            // The user must make sure the in-DOM template is trusted. If it's\n            // rendered by the server, the template should not contain any user data.\n            component.template = container.innerHTML;\n        }\n        // clear content before mounting\n        container.innerHTML = '';\n        const proxy = mount(container, false, container instanceof SVGElement);\n        if (container instanceof Element) {\n            container.removeAttribute('v-cloak');\n            container.setAttribute('data-v-app', '');\n        }\n        return proxy;\n    };\n    return app;\n});\nconst createSSRApp = ((...args) => {\n    const app = ensureHydrationRenderer().createApp(...args);\n    const { mount } = app;\n    app.mount = (containerOrSelector) => {\n        const container = normalizeContainer(containerOrSelector);\n        if (container) {\n            return mount(container, true, container instanceof SVGElement);\n        }\n    };\n    return app;\n});\nfunction normalizeContainer(container) {\n    if (shared.isString(container)) {\n        const res = document.querySelector(container);\n        return res;\n    }\n    return container;\n}\nlet ssrDirectiveInitialized = false;\n/**\n * @internal\n */\nconst initDirectivesForSSR = () => {\n        if (!ssrDirectiveInitialized) {\n            ssrDirectiveInitialized = true;\n            initVModelForSSR();\n            initVShowForSSR();\n        }\n    }\n    ;\n\nexports.Transition = Transition;\nexports.TransitionGroup = TransitionGroup;\nexports.VueElement = VueElement;\nexports.createApp = createApp;\nexports.createSSRApp = createSSRApp;\nexports.defineCustomElement = defineCustomElement;\nexports.defineSSRCustomElement = defineSSRCustomElement;\nexports.hydrate = hydrate;\nexports.initDirectivesForSSR = initDirectivesForSSR;\nexports.render = render;\nexports.useCssModule = useCssModule;\nexports.useCssVars = useCssVars;\nexports.vModelCheckbox = vModelCheckbox;\nexports.vModelDynamic = vModelDynamic;\nexports.vModelRadio = vModelRadio;\nexports.vModelSelect = vModelSelect;\nexports.vModelText = vModelText;\nexports.vShow = vShow;\nexports.withKeys = withKeys;\nexports.withModifiers = withModifiers;\nObject.keys(runtimeCore).forEach(function(k) {\n  if (k !== 'default') exports[k] = runtimeCore[k];\n});\n /dist/runtime-dom.global.prod.js\u0000\u0001H{var VueRuntimeDOM=function(e){\"use strict\";function t(e,t){const n=Object.create(null),o=e.split(\",\");for(let r=0;r<o.length;r++)n[o[r]]=!0;return t?e=>!!n[e.toLowerCase()]:e=>!!n[e]}const n=t(\"Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt\");function o(e){if(k(e)){const t={};for(let n=0;n<e.length;n++){const r=e[n],s=R(r)?l(r):o(r);if(s)for(const e in s)t[e]=s[e]}return t}return R(e)||P(e)?e:void 0}const r=/;(?![^(]*\\))/g,s=/:([^]+)/,i=/\\/\\*.*?\\*\\//gs;function l(e){const t={};return e.replace(i,\"\").split(r).forEach((e=>{if(e){const n=e.split(s);n.length>1&&(t[n[0].trim()]=n[1].trim())}})),t}function c(e){let t=\"\";if(R(e))t=e;else if(k(e))for(let n=0;n<e.length;n++){const o=c(e[n]);o&&(t+=o+\" \")}else if(P(e))for(const n in e)e[n]&&(t+=n+\" \");return t.trim()}const a=t(\"itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly\");function u(e){return!!e||\"\"===e}function f(e,t){if(e===t)return!0;let n=T(e),o=T(t);if(n||o)return!(!n||!o)&&e.getTime()===t.getTime();if(n=O(e),o=O(t),n||o)return e===t;if(n=k(e),o=k(t),n||o)return!(!n||!o)&&function(e,t){if(e.length!==t.length)return!1;let n=!0;for(let o=0;n&&o<e.length;o++)n=f(e[o],t[o]);return n}(e,t);if(n=P(e),o=P(t),n||o){if(!n||!o)return!1;if(Object.keys(e).length!==Object.keys(t).length)return!1;for(const n in e){const o=e.hasOwnProperty(n),r=t.hasOwnProperty(n);if(o&&!r||!o&&r||!f(e[n],t[n]))return!1}}return String(e)===String(t)}function p(e,t){return e.findIndex((e=>f(e,t)))}const d=(e,t)=>t&&t.__v_isRef?d(e,t.value):E(t)?{[`Map(${t.size})`]:[...t.entries()].reduce(((e,[t,n])=>(e[`${t} =>`]=n,e)),{})}:A(t)?{[`Set(${t.size})`]:[...t.values()]}:!P(t)||k(t)||V(t)?t:String(t),h={},v=[],m=()=>{},g=()=>!1,_=/^on[^a-z]/,y=e=>_.test(e),b=e=>e.startsWith(\"onUpdate:\"),C=Object.assign,x=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},w=Object.prototype.hasOwnProperty,S=(e,t)=>w.call(e,t),k=Array.isArray,E=e=>\"[object Map]\"===L(e),A=e=>\"[object Set]\"===L(e),T=e=>\"[object Date]\"===L(e),F=e=>\"function\"==typeof e,R=e=>\"string\"==typeof e,O=e=>\"symbol\"==typeof e,P=e=>null!==e&&\"object\"==typeof e,M=e=>P(e)&&F(e.then)&&F(e.catch),N=Object.prototype.toString,L=e=>N.call(e),V=e=>\"[object Object]\"===L(e),B=e=>R(e)&&\"NaN\"!==e&&\"-\"!==e[0]&&\"\"+parseInt(e,10)===e,I=t(\",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted\"),j=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},U=/-(\\w)/g,$=j((e=>e.replace(U,((e,t)=>t?t.toUpperCase():\"\")))),D=/\\B([A-Z])/g,H=j((e=>e.replace(D,\"-$1\").toLowerCase())),z=j((e=>e.charAt(0).toUpperCase()+e.slice(1))),W=j((e=>e?`on${z(e)}`:\"\")),K=(e,t)=>!Object.is(e,t),q=(e,t)=>{for(let n=0;n<e.length;n++)e[n](t)},G=(e,t,n)=>{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value:n})},Y=e=>{const t=parseFloat(e);return isNaN(t)?e:t},J=e=>{const t=R(e)?Number(e):NaN;return isNaN(t)?e:t};let X;let Z;class Q{constructor(e=!1){this.detached=e,this._active=!0,this.effects=[],this.cleanups=[],this.parent=Z,!e&&Z&&(this.index=(Z.scopes||(Z.scopes=[])).push(this)-1)}get active(){return this._active}run(e){if(this._active){const t=Z;try{return Z=this,e()}finally{Z=t}}}on(){Z=this}off(){Z=this.parent}stop(e){if(this._active){let t,n;for(t=0,n=this.effects.length;t<n;t++)this.effects[t].stop();for(t=0,n=this.cleanups.length;t<n;t++)this.cleanups[t]();if(this.scopes)for(t=0,n=this.scopes.length;t<n;t++)this.scopes[t].stop(!0);if(!this.detached&&this.parent&&!e){const e=this.parent.scopes.pop();e&&e!==this&&(this.parent.scopes[this.index]=e,e.index=this.index)}this.parent=void 0,this._active=!1}}}function ee(e,t=Z){t&&t.active&&t.effects.push(e)}function te(){return Z}const ne=e=>{const t=new Set(e);return t.w=0,t.n=0,t},oe=e=>(e.w&le)>0,re=e=>(e.n&le)>0,se=new WeakMap;let ie=0,le=1;let ce;const ae=Symbol(\"\"),ue=Symbol(\"\");class fe{constructor(e,t=null,n){this.fn=e,this.scheduler=t,this.active=!0,this.deps=[],this.parent=void 0,ee(this,n)}run(){if(!this.active)return this.fn();let e=ce,t=de;for(;e;){if(e===this)return;e=e.parent}try{return this.parent=ce,ce=this,de=!0,le=1<<++ie,ie<=30?(({deps:e})=>{if(e.length)for(let t=0;t<e.length;t++)e[t].w|=le})(this):pe(this),this.fn()}finally{ie<=30&&(e=>{const{deps:t}=e;if(t.length){let n=0;for(let o=0;o<t.length;o++){const r=t[o];oe(r)&&!re(r)?r.delete(e):t[n++]=r,r.w&=~le,r.n&=~le}t.length=n}})(this),le=1<<--ie,ce=this.parent,de=t,this.parent=void 0,this.deferStop&&this.stop()}}stop(){ce===this?this.deferStop=!0:this.active&&(pe(this),this.onStop&&this.onStop(),this.active=!1)}}function pe(e){const{deps:t}=e;if(t.length){for(let n=0;n<t.length;n++)t[n].delete(e);t.length=0}}let de=!0;const he=[];function ve(){he.push(de),de=!1}function me(){const e=he.pop();de=void 0===e||e}function ge(e,t,n){if(de&&ce){let t=se.get(e);t||se.set(e,t=new Map);let o=t.get(n);o||t.set(n,o=ne()),_e(o)}}function _e(e,t){let n=!1;ie<=30?re(e)||(e.n|=le,n=!oe(e)):n=!e.has(ce),n&&(e.add(ce),ce.deps.push(e))}function ye(e,t,n,o,r,s){const i=se.get(e);if(!i)return;let l=[];if(\"clear\"===t)l=[...i.values()];else if(\"length\"===n&&k(e)){const e=Number(o);i.forEach(((t,n)=>{(\"length\"===n||n>=e)&&l.push(t)}))}else switch(void 0!==n&&l.push(i.get(n)),t){case\"add\":k(e)?B(n)&&l.push(i.get(\"length\")):(l.push(i.get(ae)),E(e)&&l.push(i.get(ue)));break;case\"delete\":k(e)||(l.push(i.get(ae)),E(e)&&l.push(i.get(ue)));break;case\"set\":E(e)&&l.push(i.get(ae))}if(1===l.length)l[0]&&be(l[0]);else{const e=[];for(const t of l)t&&e.push(...t);be(ne(e))}}function be(e,t){const n=k(e)?e:[...e];for(const o of n)o.computed&&Ce(o);for(const o of n)o.computed||Ce(o)}function Ce(e,t){(e!==ce||e.allowRecurse)&&(e.scheduler?e.scheduler():e.run())}const xe=t(\"__proto__,__v_isRef,__isVue\"),we=new Set(Object.getOwnPropertyNames(Symbol).filter((e=>\"arguments\"!==e&&\"caller\"!==e)).map((e=>Symbol[e])).filter(O)),Se=Oe(),ke=Oe(!1,!0),Ee=Oe(!0),Ae=Oe(!0,!0),Te=Fe();function Fe(){const e={};return[\"includes\",\"indexOf\",\"lastIndexOf\"].forEach((t=>{e[t]=function(...e){const n=_t(this);for(let t=0,r=this.length;t<r;t++)ge(n,0,t+\"\");const o=n[t](...e);return-1===o||!1===o?n[t](...e.map(_t)):o}})),[\"push\",\"pop\",\"shift\",\"unshift\",\"splice\"].forEach((t=>{e[t]=function(...e){ve();const n=_t(this)[t].apply(this,e);return me(),n}})),e}function Re(e){const t=_t(this);return ge(t,0,e),t.hasOwnProperty(e)}function Oe(e=!1,t=!1){return function(n,o,r){if(\"__v_isReactive\"===o)return!e;if(\"__v_isReadonly\"===o)return e;if(\"__v_isShallow\"===o)return t;if(\"__v_raw\"===o&&r===(e?t?ct:lt:t?it:st).get(n))return n;const s=k(n);if(!e){if(s&&S(Te,o))return Reflect.get(Te,o,r);if(\"hasOwnProperty\"===o)return Re}const i=Reflect.get(n,o,r);return(O(o)?we.has(o):xe(o))?i:(e||ge(n,0,o),t?i:St(i)?s&&B(o)?i:i.value:P(i)?e?pt(i):ut(i):i)}}function Pe(e=!1){return function(t,n,o,r){let s=t[n];if(vt(s)&&St(s)&&!St(o))return!1;if(!e&&(mt(o)||vt(o)||(s=_t(s),o=_t(o)),!k(t)&&St(s)&&!St(o)))return s.value=o,!0;const i=k(t)&&B(n)?Number(n)<t.length:S(t,n),l=Reflect.set(t,n,o,r);return t===_t(r)&&(i?K(o,s)&&ye(t,\"set\",n,o):ye(t,\"add\",n,o)),l}}const Me={get:Se,set:Pe(),deleteProperty:function(e,t){const n=S(e,t),o=Reflect.deleteProperty(e,t);return o&&n&&ye(e,\"delete\",t,void 0),o},has:function(e,t){const n=Reflect.has(e,t);return O(t)&&we.has(t)||ge(e,0,t),n},ownKeys:function(e){return ge(e,0,k(e)?\"length\":ae),Reflect.ownKeys(e)}},Ne={get:Ee,set:(e,t)=>!0,deleteProperty:(e,t)=>!0},Le=C({},Me,{get:ke,set:Pe(!0)}),Ve=C({},Ne,{get:Ae}),Be=e=>e,Ie=e=>Reflect.getPrototypeOf(e);function je(e,t,n=!1,o=!1){const r=_t(e=e.__v_raw),s=_t(t);n||(t!==s&&ge(r,0,t),ge(r,0,s));const{has:i}=Ie(r),l=o?Be:n?Ct:bt;return i.call(r,t)?l(e.get(t)):i.call(r,s)?l(e.get(s)):void(e!==r&&e.get(t))}function Ue(e,t=!1){const n=this.__v_raw,o=_t(n),r=_t(e);return t||(e!==r&&ge(o,0,e),ge(o,0,r)),e===r?n.has(e):n.has(e)||n.has(r)}function $e(e,t=!1){return e=e.__v_raw,!t&&ge(_t(e),0,ae),Reflect.get(e,\"size\",e)}function De(e){e=_t(e);const t=_t(this);return Ie(t).has.call(t,e)||(t.add(e),ye(t,\"add\",e,e)),this}function He(e,t){t=_t(t);const n=_t(this),{has:o,get:r}=Ie(n);let s=o.call(n,e);s||(e=_t(e),s=o.call(n,e));const i=r.call(n,e);return n.set(e,t),s?K(t,i)&&ye(n,\"set\",e,t):ye(n,\"add\",e,t),this}function ze(e){const t=_t(this),{has:n,get:o}=Ie(t);let r=n.call(t,e);r||(e=_t(e),r=n.call(t,e)),o&&o.call(t,e);const s=t.delete(e);return r&&ye(t,\"delete\",e,void 0),s}function We(){const e=_t(this),t=0!==e.size,n=e.clear();return t&&ye(e,\"clear\",void 0,void 0),n}function Ke(e,t){return function(n,o){const r=this,s=r.__v_raw,i=_t(s),l=t?Be:e?Ct:bt;return!e&&ge(i,0,ae),s.forEach(((e,t)=>n.call(o,l(e),l(t),r)))}}function qe(e,t,n){return function(...o){const r=this.__v_raw,s=_t(r),i=E(s),l=\"entries\"===e||e===Symbol.iterator&&i,c=\"keys\"===e&&i,a=r[e](...o),u=n?Be:t?Ct:bt;return!t&&ge(s,0,c?ue:ae),{next(){const{value:e,done:t}=a.next();return t?{value:e,done:t}:{value:l?[u(e[0]),u(e[1])]:u(e),done:t}},[Symbol.iterator](){return this}}}}function Ge(e){return function(...t){return\"delete\"!==e&&this}}function Ye(){const e={get(e){return je(this,e)},get size(){return $e(this)},has:Ue,add:De,set:He,delete:ze,clear:We,forEach:Ke(!1,!1)},t={get(e){return je(this,e,!1,!0)},get size(){return $e(this)},has:Ue,add:De,set:He,delete:ze,clear:We,forEach:Ke(!1,!0)},n={get(e){return je(this,e,!0)},get size(){return $e(this,!0)},has(e){return Ue.call(this,e,!0)},add:Ge(\"add\"),set:Ge(\"set\"),delete:Ge(\"delete\"),clear:Ge(\"clear\"),forEach:Ke(!0,!1)},o={get(e){return je(this,e,!0,!0)},get size(){return $e(this,!0)},has(e){return Ue.call(this,e,!0)},add:Ge(\"add\"),set:Ge(\"set\"),delete:Ge(\"delete\"),clear:Ge(\"clear\"),forEach:Ke(!0,!0)};return[\"keys\",\"values\",\"entries\",Symbol.iterator].forEach((r=>{e[r]=qe(r,!1,!1),n[r]=qe(r,!0,!1),t[r]=qe(r,!1,!0),o[r]=qe(r,!0,!0)})),[e,n,t,o]}const[Je,Xe,Ze,Qe]=Ye();function et(e,t){const n=t?e?Qe:Ze:e?Xe:Je;return(t,o,r)=>\"__v_isReactive\"===o?!e:\"__v_isReadonly\"===o?e:\"__v_raw\"===o?t:Reflect.get(S(n,o)&&o in t?n:t,o,r)}const tt={get:et(!1,!1)},nt={get:et(!1,!0)},ot={get:et(!0,!1)},rt={get:et(!0,!0)},st=new WeakMap,it=new WeakMap,lt=new WeakMap,ct=new WeakMap;function at(e){return e.__v_skip||!Object.isExtensible(e)?0:function(e){switch(e){case\"Object\":case\"Array\":return 1;case\"Map\":case\"Set\":case\"WeakMap\":case\"WeakSet\":return 2;default:return 0}}((e=>L(e).slice(8,-1))(e))}function ut(e){return vt(e)?e:dt(e,!1,Me,tt,st)}function ft(e){return dt(e,!1,Le,nt,it)}function pt(e){return dt(e,!0,Ne,ot,lt)}function dt(e,t,n,o,r){if(!P(e))return e;if(e.__v_raw&&(!t||!e.__v_isReactive))return e;const s=r.get(e);if(s)return s;const i=at(e);if(0===i)return e;const l=new Proxy(e,2===i?o:n);return r.set(e,l),l}function ht(e){return vt(e)?ht(e.__v_raw):!(!e||!e.__v_isReactive)}function vt(e){return!(!e||!e.__v_isReadonly)}function mt(e){return!(!e||!e.__v_isShallow)}function gt(e){return ht(e)||vt(e)}function _t(e){const t=e&&e.__v_raw;return t?_t(t):e}function yt(e){return G(e,\"__v_skip\",!0),e}const bt=e=>P(e)?ut(e):e,Ct=e=>P(e)?pt(e):e;function xt(e){de&&ce&&_e((e=_t(e)).dep||(e.dep=ne()))}function wt(e,t){const n=(e=_t(e)).dep;n&&be(n)}function St(e){return!(!e||!0!==e.__v_isRef)}function kt(e){return Et(e,!1)}function Et(e,t){return St(e)?e:new At(e,t)}class At{constructor(e,t){this.__v_isShallow=t,this.dep=void 0,this.__v_isRef=!0,this._rawValue=t?e:_t(e),this._value=t?e:bt(e)}get value(){return xt(this),this._value}set value(e){const t=this.__v_isShallow||mt(e)||vt(e);e=t?e:_t(e),K(e,this._rawValue)&&(this._rawValue=e,this._value=t?e:bt(e),wt(this))}}function Tt(e){return St(e)?e.value:e}const Ft={get:(e,t,n)=>Tt(Reflect.get(e,t,n)),set:(e,t,n,o)=>{const r=e[t];return St(r)&&!St(n)?(r.value=n,!0):Reflect.set(e,t,n,o)}};function Rt(e){return ht(e)?e:new Proxy(e,Ft)}class Ot{constructor(e){this.dep=void 0,this.__v_isRef=!0;const{get:t,set:n}=e((()=>xt(this)),(()=>wt(this)));this._get=t,this._set=n}get value(){return this._get()}set value(e){this._set(e)}}class Pt{constructor(e,t,n){this._object=e,this._key=t,this._defaultValue=n,this.__v_isRef=!0}get value(){const e=this._object[this._key];return void 0===e?this._defaultValue:e}set value(e){this._object[this._key]=e}get dep(){return function(e,t){var n;return null===(n=se.get(e))||void 0===n?void 0:n.get(t)}(_t(this._object),this._key)}}function Mt(e,t,n){const o=e[t];return St(o)?o:new Pt(e,t,n)}var Nt;class Lt{constructor(e,t,n,o){this._setter=t,this.dep=void 0,this.__v_isRef=!0,this[Nt]=!1,this._dirty=!0,this.effect=new fe(e,(()=>{this._dirty||(this._dirty=!0,wt(this))})),this.effect.computed=this,this.effect.active=this._cacheable=!o,this.__v_isReadonly=n}get value(){const e=_t(this);return xt(e),!e._dirty&&e._cacheable||(e._dirty=!1,e._value=e.effect.run()),e._value}set value(e){this._setter(e)}}function Vt(e,t,n,o){let r;try{r=o?e(...o):e()}catch(s){It(s,t,n)}return r}function Bt(e,t,n,o){if(F(e)){const r=Vt(e,t,n,o);return r&&M(r)&&r.catch((e=>{It(e,t,n)})),r}const r=[];for(let s=0;s<e.length;s++)r.push(Bt(e[s],t,n,o));return r}function It(e,t,n,o=!0){if(t){let o=t.parent;const r=t.proxy,s=n;for(;o;){const t=o.ec;if(t)for(let n=0;n<t.length;n++)if(!1===t[n](e,r,s))return;o=o.parent}const i=t.appContext.config.errorHandler;if(i)return void Vt(i,null,10,[e,r,s])}!function(e,t,n,o=!0){console.error(e)}(e,0,0,o)}Nt=\"__v_isReadonly\";let jt=!1,Ut=!1;const $t=[];let Dt=0;const Ht=[];let zt=null,Wt=0;const Kt=Promise.resolve();let qt=null;function Gt(e){const t=qt||Kt;return e?t.then(this?e.bind(this):e):t}function Yt(e){$t.length&&$t.includes(e,jt&&e.allowRecurse?Dt+1:Dt)||(null==e.id?$t.push(e):$t.splice(function(e){let t=Dt+1,n=$t.length;for(;t<n;){const o=t+n>>>1;en($t[o])<e?t=o+1:n=o}return t}(e.id),0,e),Jt())}function Jt(){jt||Ut||(Ut=!0,qt=Kt.then(nn))}function Xt(e){k(e)?Ht.push(...e):zt&&zt.includes(e,e.allowRecurse?Wt+1:Wt)||Ht.push(e),Jt()}function Zt(e,t=(jt?Dt+1:0)){for(;t<$t.length;t++){const e=$t[t];e&&e.pre&&($t.splice(t,1),t--,e())}}function Qt(e){if(Ht.length){const e=[...new Set(Ht)];if(Ht.length=0,zt)return void zt.push(...e);for(zt=e,zt.sort(((e,t)=>en(e)-en(t))),Wt=0;Wt<zt.length;Wt++)zt[Wt]();zt=null,Wt=0}}const en=e=>null==e.id?1/0:e.id,tn=(e,t)=>{const n=en(e)-en(t);if(0===n){if(e.pre&&!t.pre)return-1;if(t.pre&&!e.pre)return 1}return n};function nn(e){Ut=!1,jt=!0,$t.sort(tn);try{for(Dt=0;Dt<$t.length;Dt++){const e=$t[Dt];e&&!1!==e.active&&Vt(e,null,14)}}finally{Dt=0,$t.length=0,Qt(),jt=!1,qt=null,($t.length||Ht.length)&&nn()}}e.devtools=void 0;let on=[];function rn(e,t,...n){if(e.isUnmounted)return;const o=e.vnode.props||h;let r=n;const s=t.startsWith(\"update:\"),i=s&&t.slice(7);if(i&&i in o){const e=`${\"modelValue\"===i?\"model\":i}Modifiers`,{number:t,trim:s}=o[e]||h;s&&(r=n.map((e=>R(e)?e.trim():e))),t&&(r=n.map(Y))}let l,c=o[l=W(t)]||o[l=W($(t))];!c&&s&&(c=o[l=W(H(t))]),c&&Bt(c,e,6,r);const a=o[l+\"Once\"];if(a){if(e.emitted){if(e.emitted[l])return}else e.emitted={};e.emitted[l]=!0,Bt(a,e,6,r)}}function sn(e,t,n=!1){const o=t.emitsCache,r=o.get(e);if(void 0!==r)return r;const s=e.emits;let i={},l=!1;if(!F(e)){const o=e=>{const n=sn(e,t,!0);n&&(l=!0,C(i,n))};!n&&t.mixins.length&&t.mixins.forEach(o),e.extends&&o(e.extends),e.mixins&&e.mixins.forEach(o)}return s||l?(k(s)?s.forEach((e=>i[e]=null)):C(i,s),P(e)&&o.set(e,i),i):(P(e)&&o.set(e,null),null)}function ln(e,t){return!(!e||!y(t))&&(t=t.slice(2).replace(/Once$/,\"\"),S(e,t[0].toLowerCase()+t.slice(1))||S(e,H(t))||S(e,t))}let cn=null,an=null;function un(e){const t=cn;return cn=e,an=e&&e.type.__scopeId||null,t}function fn(e,t=cn,n){if(!t)return e;if(e._n)return e;const o=(...n)=>{o._d&&xr(-1);const r=un(t);let s;try{s=e(...n)}finally{un(r),o._d&&xr(1)}return s};return o._n=!0,o._c=!0,o._d=!0,o}function pn(e){const{type:t,vnode:n,proxy:o,withProxy:r,props:s,propsOptions:[i],slots:l,attrs:c,emit:a,render:u,renderCache:f,data:p,setupState:d,ctx:h,inheritAttrs:v}=e;let m,g;const _=un(e);try{if(4&n.shapeFlag){const e=r||o;m=Lr(u.call(e,e,f,s,d,p,h)),g=c}else{const e=t;0,m=Lr(e(s,e.length>1?{attrs:c,slots:l,emit:a}:null)),g=t.props?c:dn(c)}}catch(C){gr.length=0,It(C,e,1),m=Or(vr)}let y=m;if(g&&!1!==v){const e=Object.keys(g),{shapeFlag:t}=y;e.length&&7&t&&(i&&e.some(b)&&(g=hn(g,i)),y=Mr(y,g))}return n.dirs&&(y=Mr(y),y.dirs=y.dirs?y.dirs.concat(n.dirs):n.dirs),n.transition&&(y.transition=n.transition),m=y,un(_),m}const dn=e=>{let t;for(const n in e)(\"class\"===n||\"style\"===n||y(n))&&((t||(t={}))[n]=e[n]);return t},hn=(e,t)=>{const n={};for(const o in e)b(o)&&o.slice(9)in t||(n[o]=e[o]);return n};function vn(e,t,n){const o=Object.keys(t);if(o.length!==Object.keys(e).length)return!0;for(let r=0;r<o.length;r++){const s=o[r];if(t[s]!==e[s]&&!ln(n,s))return!0}return!1}function mn({vnode:e,parent:t},n){for(;t&&t.subTree===e;)(e=t.vnode).el=n,t=t.parent}const gn=e=>e.__isSuspense,_n={name:\"Suspense\",__isSuspense:!0,process(e,t,n,o,r,s,i,l,c,a){null==e?function(e,t,n,o,r,s,i,l,c){const{p:a,o:{createElement:u}}=c,f=u(\"div\"),p=e.suspense=bn(e,r,o,t,f,n,s,i,l,c);a(null,p.pendingBranch=e.ssContent,f,null,o,p,s,i),p.deps>0?(yn(e,\"onPending\"),yn(e,\"onFallback\"),a(null,e.ssFallback,t,n,o,null,s,i),wn(p,e.ssFallback)):p.resolve()}(t,n,o,r,s,i,l,c,a):function(e,t,n,o,r,s,i,l,{p:c,um:a,o:{createElement:u}}){const f=t.suspense=e.suspense;f.vnode=t,t.el=e.el;const p=t.ssContent,d=t.ssFallback,{activeBranch:h,pendingBranch:v,isInFallback:m,isHydrating:g}=f;if(v)f.pendingBranch=p,Er(p,v)?(c(v,p,f.hiddenContainer,null,r,f,s,i,l),f.deps<=0?f.resolve():m&&(c(h,d,n,o,r,null,s,i,l),wn(f,d))):(f.pendingId++,g?(f.isHydrating=!1,f.activeBranch=v):a(v,r,f),f.deps=0,f.effects.length=0,f.hiddenContainer=u(\"div\"),m?(c(null,p,f.hiddenContainer,null,r,f,s,i,l),f.deps<=0?f.resolve():(c(h,d,n,o,r,null,s,i,l),wn(f,d))):h&&Er(p,h)?(c(h,p,n,o,r,f,s,i,l),f.resolve(!0)):(c(null,p,f.hiddenContainer,null,r,f,s,i,l),f.deps<=0&&f.resolve()));else if(h&&Er(p,h))c(h,p,n,o,r,f,s,i,l),wn(f,p);else if(yn(t,\"onPending\"),f.pendingBranch=p,f.pendingId++,c(null,p,f.hiddenContainer,null,r,f,s,i,l),f.deps<=0)f.resolve();else{const{timeout:e,pendingId:t}=f;e>0?setTimeout((()=>{f.pendingId===t&&f.fallback(d)}),e):0===e&&f.fallback(d)}}(e,t,n,o,r,i,l,c,a)},hydrate:function(e,t,n,o,r,s,i,l,c){const a=t.suspense=bn(t,o,n,e.parentNode,document.createElement(\"div\"),null,r,s,i,l,!0),u=c(e,a.pendingBranch=t.ssContent,n,a,s,i);0===a.deps&&a.resolve();return u},create:bn,normalize:function(e){const{shapeFlag:t,children:n}=e,o=32&t;e.ssContent=Cn(o?n.default:n),e.ssFallback=o?Cn(n.fallback):Or(vr)}};function yn(e,t){const n=e.props&&e.props[t];F(n)&&n()}function bn(e,t,n,o,r,s,i,l,c,a,u=!1){const{p:f,m:p,um:d,n:h,o:{parentNode:v,remove:m}}=a,g=e.props?J(e.props.timeout):void 0,_={vnode:e,parent:t,parentComponent:n,isSVG:i,container:o,hiddenContainer:r,anchor:s,deps:0,pendingId:0,timeout:\"number\"==typeof g?g:-1,activeBranch:null,pendingBranch:null,isInFallback:!0,isHydrating:u,isUnmounted:!1,effects:[],resolve(e=!1){const{vnode:t,activeBranch:n,pendingBranch:o,pendingId:r,effects:s,parentComponent:i,container:l}=_;if(_.isHydrating)_.isHydrating=!1;else if(!e){const e=n&&o.transition&&\"out-in\"===o.transition.mode;e&&(n.transition.afterLeave=()=>{r===_.pendingId&&p(o,l,t,0)});let{anchor:t}=_;n&&(t=h(n),d(n,i,_,!0)),e||p(o,l,t,0)}wn(_,o),_.pendingBranch=null,_.isInFallback=!1;let c=_.parent,a=!1;for(;c;){if(c.pendingBranch){c.effects.push(...s),a=!0;break}c=c.parent}a||Xt(s),_.effects=[],yn(t,\"onResolve\")},fallback(e){if(!_.pendingBranch)return;const{vnode:t,activeBranch:n,parentComponent:o,container:r,isSVG:s}=_;yn(t,\"onFallback\");const i=h(n),a=()=>{_.isInFallback&&(f(null,e,r,i,o,null,s,l,c),wn(_,e))},u=e.transition&&\"out-in\"===e.transition.mode;u&&(n.transition.afterLeave=a),_.isInFallback=!0,d(n,o,null,!0),u||a()},move(e,t,n){_.activeBranch&&p(_.activeBranch,e,t,n),_.container=e},next:()=>_.activeBranch&&h(_.activeBranch),registerDep(e,t){const n=!!_.pendingBranch;n&&_.deps++;const o=e.vnode.el;e.asyncDep.catch((t=>{It(t,e,0)})).then((r=>{if(e.isUnmounted||_.isUnmounted||_.pendingId!==e.suspenseId)return;e.asyncResolved=!0;const{vnode:s}=e;Jr(e,r,!1),o&&(s.el=o);const l=!o&&e.subTree.el;t(e,s,v(o||e.subTree.el),o?null:h(e.subTree),_,i,c),l&&m(l),mn(e,s.el),n&&0==--_.deps&&_.resolve()}))},unmount(e,t){_.isUnmounted=!0,_.activeBranch&&d(_.activeBranch,n,e,t),_.pendingBranch&&d(_.pendingBranch,n,e,t)}};return _}function Cn(e){let t;if(F(e)){const n=Cr&&e._c;n&&(e._d=!1,yr()),e=e(),n&&(e._d=!0,t=_r,br())}if(k(e)){const t=function(e){let t;for(let n=0;n<e.length;n++){const o=e[n];if(!kr(o))return;if(o.type!==vr||\"v-if\"===o.children){if(t)return;t=o}}return t}(e);e=t}return e=Lr(e),t&&!e.dynamicChildren&&(e.dynamicChildren=t.filter((t=>t!==e))),e}function xn(e,t){t&&t.pendingBranch?k(e)?t.effects.push(...e):t.effects.push(e):Xt(e)}function wn(e,t){e.activeBranch=t;const{vnode:n,parentComponent:o}=e,r=n.el=t.el;o&&o.subTree===n&&(o.vnode.el=r,mn(o,r))}function Sn(e,t){if(Dr){let n=Dr.provides;const o=Dr.parent&&Dr.parent.provides;o===n&&(n=Dr.provides=Object.create(o)),n[e]=t}else;}function kn(e,t,n=!1){const o=Dr||cn;if(o){const r=null==o.parent?o.vnode.appContext&&o.vnode.appContext.provides:o.parent.provides;if(r&&e in r)return r[e];if(arguments.length>1)return n&&F(t)?t.call(o.proxy):t}}function En(e,t){return Fn(e,null,{flush:\"post\"})}const An={};function Tn(e,t,n){return Fn(e,t,n)}function Fn(e,t,{immediate:n,deep:o,flush:r}=h){const s=te()===(null==Dr?void 0:Dr.scope)?Dr:null;let i,l,c=!1,a=!1;if(St(e)?(i=()=>e.value,c=mt(e)):ht(e)?(i=()=>e,o=!0):k(e)?(a=!0,c=e.some((e=>ht(e)||mt(e))),i=()=>e.map((e=>St(e)?e.value:ht(e)?Pn(e):F(e)?Vt(e,s,2):void 0))):i=F(e)?t?()=>Vt(e,s,2):()=>{if(!s||!s.isUnmounted)return l&&l(),Bt(e,s,3,[u])}:m,t&&o){const e=i;i=()=>Pn(e())}let u=e=>{l=v.onStop=()=>{Vt(e,s,4)}},f=a?new Array(e.length).fill(An):An;const p=()=>{if(v.active)if(t){const e=v.run();(o||c||(a?e.some(((e,t)=>K(e,f[t]))):K(e,f)))&&(l&&l(),Bt(t,s,3,[e,f===An?void 0:a&&f[0]===An?[]:f,u]),f=e)}else v.run()};let d;p.allowRecurse=!!t,\"sync\"===r?d=p:\"post\"===r?d=()=>tr(p,s&&s.suspense):(p.pre=!0,s&&(p.id=s.uid),d=()=>Yt(p));const v=new fe(i,d);t?n?p():f=v.run():\"post\"===r?tr(v.run.bind(v),s&&s.suspense):v.run();return()=>{v.stop(),s&&s.scope&&x(s.scope.effects,v)}}function Rn(e,t,n){const o=this.proxy,r=R(e)?e.includes(\".\")?On(o,e):()=>o[e]:e.bind(o,o);let s;F(t)?s=t:(s=t.handler,n=t);const i=Dr;zr(this);const l=Fn(r,s.bind(o),n);return i?zr(i):Wr(),l}function On(e,t){const n=t.split(\".\");return()=>{let t=e;for(let e=0;e<n.length&&t;e++)t=t[n[e]];return t}}function Pn(e,t){if(!P(e)||e.__v_skip)return e;if((t=t||new Set).has(e))return e;if(t.add(e),St(e))Pn(e.value,t);else if(k(e))for(let n=0;n<e.length;n++)Pn(e[n],t);else if(A(e)||E(e))e.forEach((e=>{Pn(e,t)}));else if(V(e))for(const n in e)Pn(e[n],t);return e}function Mn(){const e={isMounted:!1,isLeaving:!1,isUnmounting:!1,leavingVNodes:new Map};return oo((()=>{e.isMounted=!0})),io((()=>{e.isUnmounting=!0})),e}const Nn=[Function,Array],Ln={name:\"BaseTransition\",props:{mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:Nn,onEnter:Nn,onAfterEnter:Nn,onEnterCancelled:Nn,onBeforeLeave:Nn,onLeave:Nn,onAfterLeave:Nn,onLeaveCancelled:Nn,onBeforeAppear:Nn,onAppear:Nn,onAfterAppear:Nn,onAppearCancelled:Nn},setup(e,{slots:t}){const n=Hr(),o=Mn();let r;return()=>{const s=t.default&&$n(t.default(),!0);if(!s||!s.length)return;let i=s[0];if(s.length>1)for(const e of s)if(e.type!==vr){i=e;break}const l=_t(e),{mode:c}=l;if(o.isLeaving)return In(i);const a=jn(i);if(!a)return In(i);const u=Bn(a,l,o,n);Un(a,u);const f=n.subTree,p=f&&jn(f);let d=!1;const{getTransitionKey:h}=a.type;if(h){const e=h();void 0===r?r=e:e!==r&&(r=e,d=!0)}if(p&&p.type!==vr&&(!Er(a,p)||d)){const e=Bn(p,l,o,n);if(Un(p,e),\"out-in\"===c)return o.isLeaving=!0,e.afterLeave=()=>{o.isLeaving=!1,!1!==n.update.active&&n.update()},In(i);\"in-out\"===c&&a.type!==vr&&(e.delayLeave=(e,t,n)=>{Vn(o,p)[String(p.key)]=p,e._leaveCb=()=>{t(),e._leaveCb=void 0,delete u.delayedLeave},u.delayedLeave=n})}return i}}};function Vn(e,t){const{leavingVNodes:n}=e;let o=n.get(t.type);return o||(o=Object.create(null),n.set(t.type,o)),o}function Bn(e,t,n,o){const{appear:r,mode:s,persisted:i=!1,onBeforeEnter:l,onEnter:c,onAfterEnter:a,onEnterCancelled:u,onBeforeLeave:f,onLeave:p,onAfterLeave:d,onLeaveCancelled:h,onBeforeAppear:v,onAppear:m,onAfterAppear:g,onAppearCancelled:_}=t,y=String(e.key),b=Vn(n,e),C=(e,t)=>{e&&Bt(e,o,9,t)},x=(e,t)=>{const n=t[1];C(e,t),k(e)?e.every((e=>e.length<=1))&&n():e.length<=1&&n()},w={mode:s,persisted:i,beforeEnter(t){let o=l;if(!n.isMounted){if(!r)return;o=v||l}t._leaveCb&&t._leaveCb(!0);const s=b[y];s&&Er(e,s)&&s.el._leaveCb&&s.el._leaveCb(),C(o,[t])},enter(e){let t=c,o=a,s=u;if(!n.isMounted){if(!r)return;t=m||c,o=g||a,s=_||u}let i=!1;const l=e._enterCb=t=>{i||(i=!0,C(t?s:o,[e]),w.delayedLeave&&w.delayedLeave(),e._enterCb=void 0)};t?x(t,[e,l]):l()},leave(t,o){const r=String(e.key);if(t._enterCb&&t._enterCb(!0),n.isUnmounting)return o();C(f,[t]);let s=!1;const i=t._leaveCb=n=>{s||(s=!0,o(),C(n?h:d,[t]),t._leaveCb=void 0,b[r]===e&&delete b[r])};b[r]=e,p?x(p,[t,i]):i()},clone:e=>Bn(e,t,n,o)};return w}function In(e){if(Wn(e))return(e=Mr(e)).children=null,e}function jn(e){return Wn(e)?e.children?e.children[0]:void 0:e}function Un(e,t){6&e.shapeFlag&&e.component?Un(e.component.subTree,t):128&e.shapeFlag?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function $n(e,t=!1,n){let o=[],r=0;for(let s=0;s<e.length;s++){let i=e[s];const l=null==n?i.key:String(n)+String(null!=i.key?i.key:s);i.type===dr?(128&i.patchFlag&&r++,o=o.concat($n(i.children,t,l))):(t||i.type!==vr)&&o.push(null!=l?Mr(i,{key:l}):i)}if(r>1)for(let s=0;s<o.length;s++)o[s].patchFlag=-2;return o}function Dn(e){return F(e)?{setup:e,name:e.name}:e}const Hn=e=>!!e.type.__asyncLoader;function zn(e,t){const{ref:n,props:o,children:r,ce:s}=t.vnode,i=Or(e,o,r);return i.ref=n,i.ce=s,delete t.vnode.ce,i}const Wn=e=>e.type.__isKeepAlive,Kn={name:\"KeepAlive\",__isKeepAlive:!0,props:{include:[String,RegExp,Array],exclude:[String,RegExp,Array],max:[String,Number]},setup(e,{slots:t}){const n=Hr(),o=n.ctx,r=new Map,s=new Set;let i=null;const l=n.suspense,{renderer:{p:c,m:a,um:u,o:{createElement:f}}}=o,p=f(\"div\");function d(e){Zn(e),u(e,n,l,!0)}function h(e){r.forEach(((t,n)=>{const o=es(t.type);!o||e&&e(o)||v(n)}))}function v(e){const t=r.get(e);i&&Er(t,i)?i&&Zn(i):d(t),r.delete(e),s.delete(e)}o.activate=(e,t,n,o,r)=>{const s=e.component;a(e,t,n,0,l),c(s.vnode,e,t,n,s,l,o,e.slotScopeIds,r),tr((()=>{s.isDeactivated=!1,s.a&&q(s.a);const t=e.props&&e.props.onVnodeMounted;t&&jr(t,s.parent,e)}),l)},o.deactivate=e=>{const t=e.component;a(e,p,null,1,l),tr((()=>{t.da&&q(t.da);const n=e.props&&e.props.onVnodeUnmounted;n&&jr(n,t.parent,e),t.isDeactivated=!0}),l)},Tn((()=>[e.include,e.exclude]),(([e,t])=>{e&&h((t=>qn(e,t))),t&&h((e=>!qn(t,e)))}),{flush:\"post\",deep:!0});let m=null;const g=()=>{null!=m&&r.set(m,Qn(n.subTree))};return oo(g),so(g),io((()=>{r.forEach((e=>{const{subTree:t,suspense:o}=n,r=Qn(t);if(e.type!==r.type||e.key!==r.key)d(e);else{Zn(r);const e=r.component.da;e&&tr(e,o)}}))})),()=>{if(m=null,!t.default)return null;const n=t.default(),o=n[0];if(n.length>1)return i=null,n;if(!(kr(o)&&(4&o.shapeFlag||128&o.shapeFlag)))return i=null,o;let l=Qn(o);const c=l.type,a=es(Hn(l)?l.type.__asyncResolved||{}:c),{include:u,exclude:f,max:p}=e;if(u&&(!a||!qn(u,a))||f&&a&&qn(f,a))return i=l,o;const d=null==l.key?c:l.key,h=r.get(d);return l.el&&(l=Mr(l),128&o.shapeFlag&&(o.ssContent=l)),m=d,h?(l.el=h.el,l.component=h.component,l.transition&&Un(l,l.transition),l.shapeFlag|=512,s.delete(d),s.add(d)):(s.add(d),p&&s.size>parseInt(p,10)&&v(s.values().next().value)),l.shapeFlag|=256,i=l,gn(o.type)?o:l}}};function qn(e,t){return k(e)?e.some((e=>qn(e,t))):R(e)?e.split(\",\").includes(t):\"[object RegExp]\"===L(e)&&e.test(t)}function Gn(e,t){Jn(e,\"a\",t)}function Yn(e,t){Jn(e,\"da\",t)}function Jn(e,t,n=Dr){const o=e.__wdc||(e.__wdc=()=>{let t=n;for(;t;){if(t.isDeactivated)return;t=t.parent}return e()});if(eo(t,o,n),n){let e=n.parent;for(;e&&e.parent;)Wn(e.parent.vnode)&&Xn(o,t,n,e),e=e.parent}}function Xn(e,t,n,o){const r=eo(t,e,o,!0);lo((()=>{x(o[t],r)}),n)}function Zn(e){e.shapeFlag&=-257,e.shapeFlag&=-513}function Qn(e){return 128&e.shapeFlag?e.ssContent:e}function eo(e,t,n=Dr,o=!1){if(n){const r=n[e]||(n[e]=[]),s=t.__weh||(t.__weh=(...o)=>{if(n.isUnmounted)return;ve(),zr(n);const r=Bt(t,n,e,o);return Wr(),me(),r});return o?r.unshift(s):r.push(s),s}}const to=e=>(t,n=Dr)=>(!Yr||\"sp\"===e)&&eo(e,((...e)=>t(...e)),n),no=to(\"bm\"),oo=to(\"m\"),ro=to(\"bu\"),so=to(\"u\"),io=to(\"bum\"),lo=to(\"um\"),co=to(\"sp\"),ao=to(\"rtg\"),uo=to(\"rtc\");function fo(e,t=Dr){eo(\"ec\",e,t)}function po(e,t,n,o){const r=e.dirs,s=t&&t.dirs;for(let i=0;i<r.length;i++){const l=r[i];s&&(l.oldValue=s[i].value);let c=l.dir[o];c&&(ve(),Bt(c,n,8,[e.el,l,e,t]),me())}}const ho=\"components\";const vo=Symbol();function mo(e,t,n=!0,o=!1){const r=cn||Dr;if(r){const n=r.type;if(e===ho){const e=es(n,!1);if(e&&(e===t||e===$(t)||e===z($(t))))return n}const s=go(r[e]||n[e],t)||go(r.appContext[e],t);return!s&&o?n:s}}function go(e,t){return e&&(e[t]||e[$(t)]||e[z($(t))])}function _o(e){return e.some((e=>!kr(e)||e.type!==vr&&!(e.type===dr&&!_o(e.children))))?e:null}const yo=e=>e?Kr(e)?Qr(e)||e.proxy:yo(e.parent):null,bo=C(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>yo(e.parent),$root:e=>yo(e.root),$emit:e=>e.emit,$options:e=>To(e),$forceUpdate:e=>e.f||(e.f=()=>Yt(e.update)),$nextTick:e=>e.n||(e.n=Gt.bind(e.proxy)),$watch:e=>Rn.bind(e)}),Co=(e,t)=>e!==h&&!e.__isScriptSetup&&S(e,t),xo={get({_:e},t){const{ctx:n,setupState:o,data:r,props:s,accessCache:i,type:l,appContext:c}=e;let a;if(\"$\"!==t[0]){const l=i[t];if(void 0!==l)switch(l){case 1:return o[t];case 2:return r[t];case 4:return n[t];case 3:return s[t]}else{if(Co(o,t))return i[t]=1,o[t];if(r!==h&&S(r,t))return i[t]=2,r[t];if((a=e.propsOptions[0])&&S(a,t))return i[t]=3,s[t];if(n!==h&&S(n,t))return i[t]=4,n[t];So&&(i[t]=0)}}const u=bo[t];let f,p;return u?(\"$attrs\"===t&&ge(e,0,t),u(e)):(f=l.__cssModules)&&(f=f[t])?f:n!==h&&S(n,t)?(i[t]=4,n[t]):(p=c.config.globalProperties,S(p,t)?p[t]:void 0)},set({_:e},t,n){const{data:o,setupState:r,ctx:s}=e;return Co(r,t)?(r[t]=n,!0):o!==h&&S(o,t)?(o[t]=n,!0):!S(e.props,t)&&((\"$\"!==t[0]||!(t.slice(1)in e))&&(s[t]=n,!0))},has({_:{data:e,setupState:t,accessCache:n,ctx:o,appContext:r,propsOptions:s}},i){let l;return!!n[i]||e!==h&&S(e,i)||Co(t,i)||(l=s[0])&&S(l,i)||S(o,i)||S(bo,i)||S(r.config.globalProperties,i)},defineProperty(e,t,n){return null!=n.get?e._.accessCache[t]=0:S(n,\"value\")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}},wo=C({},xo,{get(e,t){if(t!==Symbol.unscopables)return xo.get(e,t,e)},has:(e,t)=>\"_\"!==t[0]&&!n(t)});let So=!0;function ko(e){const t=To(e),n=e.proxy,o=e.ctx;So=!1,t.beforeCreate&&Eo(t.beforeCreate,e,\"bc\");const{data:r,computed:s,methods:i,watch:l,provide:c,inject:a,created:u,beforeMount:f,mounted:p,beforeUpdate:d,updated:h,activated:v,deactivated:g,beforeUnmount:_,unmounted:y,render:b,renderTracked:C,renderTriggered:x,errorCaptured:w,serverPrefetch:S,expose:E,inheritAttrs:A,components:T,directives:R}=t;if(a&&function(e,t,n=m,o=!1){k(e)&&(e=Po(e));for(const r in e){const n=e[r];let s;s=P(n)?\"default\"in n?kn(n.from||r,n.default,!0):kn(n.from||r):kn(n),St(s)&&o?Object.defineProperty(t,r,{enumerable:!0,configurable:!0,get:()=>s.value,set:e=>s.value=e}):t[r]=s}}(a,o,null,e.appContext.config.unwrapInjectedRef),i)for(const m in i){const e=i[m];F(e)&&(o[m]=e.bind(n))}if(r){const t=r.call(n,n);P(t)&&(e.data=ut(t))}if(So=!0,s)for(const k in s){const e=s[k],t=F(e)?e.bind(n,n):F(e.get)?e.get.bind(n,n):m,r=!F(e)&&F(e.set)?e.set.bind(n):m,i=ts({get:t,set:r});Object.defineProperty(o,k,{enumerable:!0,configurable:!0,get:()=>i.value,set:e=>i.value=e})}if(l)for(const m in l)Ao(l[m],o,n,m);if(c){const e=F(c)?c.call(n):c;Reflect.ownKeys(e).forEach((t=>{Sn(t,e[t])}))}function O(e,t){k(t)?t.forEach((t=>e(t.bind(n)))):t&&e(t.bind(n))}if(u&&Eo(u,e,\"c\"),O(no,f),O(oo,p),O(ro,d),O(so,h),O(Gn,v),O(Yn,g),O(fo,w),O(uo,C),O(ao,x),O(io,_),O(lo,y),O(co,S),k(E))if(E.length){const t=e.exposed||(e.exposed={});E.forEach((e=>{Object.defineProperty(t,e,{get:()=>n[e],set:t=>n[e]=t})}))}else e.exposed||(e.exposed={});b&&e.render===m&&(e.render=b),null!=A&&(e.inheritAttrs=A),T&&(e.components=T),R&&(e.directives=R)}function Eo(e,t,n){Bt(k(e)?e.map((e=>e.bind(t.proxy))):e.bind(t.proxy),t,n)}function Ao(e,t,n,o){const r=o.includes(\".\")?On(n,o):()=>n[o];if(R(e)){const n=t[e];F(n)&&Tn(r,n)}else if(F(e))Tn(r,e.bind(n));else if(P(e))if(k(e))e.forEach((e=>Ao(e,t,n,o)));else{const o=F(e.handler)?e.handler.bind(n):t[e.handler];F(o)&&Tn(r,o,e)}}function To(e){const t=e.type,{mixins:n,extends:o}=t,{mixins:r,optionsCache:s,config:{optionMergeStrategies:i}}=e.appContext,l=s.get(t);let c;return l?c=l:r.length||n||o?(c={},r.length&&r.forEach((e=>Fo(c,e,i,!0))),Fo(c,t,i)):c=t,P(t)&&s.set(t,c),c}function Fo(e,t,n,o=!1){const{mixins:r,extends:s}=t;s&&Fo(e,s,n,!0),r&&r.forEach((t=>Fo(e,t,n,!0)));for(const i in t)if(o&&\"expose\"===i);else{const o=Ro[i]||n&&n[i];e[i]=o?o(e[i],t[i]):t[i]}return e}const Ro={data:Oo,props:No,emits:No,methods:No,computed:No,beforeCreate:Mo,created:Mo,beforeMount:Mo,mounted:Mo,beforeUpdate:Mo,updated:Mo,beforeDestroy:Mo,beforeUnmount:Mo,destroyed:Mo,unmounted:Mo,activated:Mo,deactivated:Mo,errorCaptured:Mo,serverPrefetch:Mo,components:No,directives:No,watch:function(e,t){if(!e)return t;if(!t)return e;const n=C(Object.create(null),e);for(const o in t)n[o]=Mo(e[o],t[o]);return n},provide:Oo,inject:function(e,t){return No(Po(e),Po(t))}};function Oo(e,t){return t?e?function(){return C(F(e)?e.call(this,this):e,F(t)?t.call(this,this):t)}:t:e}function Po(e){if(k(e)){const t={};for(let n=0;n<e.length;n++)t[e[n]]=e[n];return t}return e}function Mo(e,t){return e?[...new Set([].concat(e,t))]:t}function No(e,t){return e?C(C(Object.create(null),e),t):t}function Lo(e,t,n,o){const[r,s]=e.propsOptions;let i,l=!1;if(t)for(let c in t){if(I(c))continue;const a=t[c];let u;r&&S(r,u=$(c))?s&&s.includes(u)?(i||(i={}))[u]=a:n[u]=a:ln(e.emitsOptions,c)||c in o&&a===o[c]||(o[c]=a,l=!0)}if(s){const t=_t(n),o=i||h;for(let i=0;i<s.length;i++){const l=s[i];n[l]=Vo(r,t,l,o[l],e,!S(o,l))}}return l}function Vo(e,t,n,o,r,s){const i=e[n];if(null!=i){const e=S(i,\"default\");if(e&&void 0===o){const e=i.default;if(i.type!==Function&&F(e)){const{propsDefaults:s}=r;n in s?o=s[n]:(zr(r),o=s[n]=e.call(null,t),Wr())}else o=e}i[0]&&(s&&!e?o=!1:!i[1]||\"\"!==o&&o!==H(n)||(o=!0))}return o}function Bo(e,t,n=!1){const o=t.propsCache,r=o.get(e);if(r)return r;const s=e.props,i={},l=[];let c=!1;if(!F(e)){const o=e=>{c=!0;const[n,o]=Bo(e,t,!0);C(i,n),o&&l.push(...o)};!n&&t.mixins.length&&t.mixins.forEach(o),e.extends&&o(e.extends),e.mixins&&e.mixins.forEach(o)}if(!s&&!c)return P(e)&&o.set(e,v),v;if(k(s))for(let u=0;u<s.length;u++){const e=$(s[u]);Io(e)&&(i[e]=h)}else if(s)for(const u in s){const e=$(u);if(Io(e)){const t=s[u],n=i[e]=k(t)||F(t)?{type:t}:Object.assign({},t);if(n){const t=$o(Boolean,n.type),o=$o(String,n.type);n[0]=t>-1,n[1]=o<0||t<o,(t>-1||S(n,\"default\"))&&l.push(e)}}}const a=[i,l];return P(e)&&o.set(e,a),a}function Io(e){return\"$\"!==e[0]}function jo(e){const t=e&&e.toString().match(/^\\s*(function|class) (\\w+)/);return t?t[2]:null===e?\"null\":\"\"}function Uo(e,t){return jo(e)===jo(t)}function $o(e,t){return k(t)?t.findIndex((t=>Uo(t,e))):F(t)&&Uo(t,e)?0:-1}const Do=e=>\"_\"===e[0]||\"$stable\"===e,Ho=e=>k(e)?e.map(Lr):[Lr(e)],zo=(e,t,n)=>{if(t._n)return t;const o=fn(((...e)=>Ho(t(...e))),n);return o._c=!1,o},Wo=(e,t,n)=>{const o=e._ctx;for(const r in e){if(Do(r))continue;const n=e[r];if(F(n))t[r]=zo(0,n,o);else if(null!=n){const e=Ho(n);t[r]=()=>e}}},Ko=(e,t)=>{const n=Ho(t);e.slots.default=()=>n};function qo(){return{app:null,config:{isNativeTag:g,performance:!1,globalProperties:{},optionMergeStrategies:{},errorHandler:void 0,warnHandler:void 0,compilerOptions:{}},mixins:[],components:{},directives:{},provides:Object.create(null),optionsCache:new WeakMap,propsCache:new WeakMap,emitsCache:new WeakMap}}let Go=0;function Yo(e,t){return function(n,o=null){F(n)||(n=Object.assign({},n)),null==o||P(o)||(o=null);const r=qo(),s=new Set;let i=!1;const l=r.app={_uid:Go++,_component:n,_props:o,_container:null,_context:r,_instance:null,version:is,get config(){return r.config},set config(e){},use:(e,...t)=>(s.has(e)||(e&&F(e.install)?(s.add(e),e.install(l,...t)):F(e)&&(s.add(e),e(l,...t))),l),mixin:e=>(r.mixins.includes(e)||r.mixins.push(e),l),component:(e,t)=>t?(r.components[e]=t,l):r.components[e],directive:(e,t)=>t?(r.directives[e]=t,l):r.directives[e],mount(s,c,a){if(!i){const u=Or(n,o);return u.appContext=r,c&&t?t(u,s):e(u,s,a),i=!0,l._container=s,s.__vue_app__=l,Qr(u.component)||u.component.proxy}},unmount(){i&&(e(null,l._container),delete l._container.__vue_app__)},provide:(e,t)=>(r.provides[e]=t,l)};return l}}function Jo(e,t,n,o,r=!1){if(k(e))return void e.forEach(((e,s)=>Jo(e,t&&(k(t)?t[s]:t),n,o,r)));if(Hn(o)&&!r)return;const s=4&o.shapeFlag?Qr(o.component)||o.component.proxy:o.el,i=r?null:s,{i:l,r:c}=e,a=t&&t.r,u=l.refs===h?l.refs={}:l.refs,f=l.setupState;if(null!=a&&a!==c&&(R(a)?(u[a]=null,S(f,a)&&(f[a]=null)):St(a)&&(a.value=null)),F(c))Vt(c,l,12,[i,u]);else{const t=R(c),o=St(c);if(t||o){const l=()=>{if(e.f){const n=t?S(f,c)?f[c]:u[c]:c.value;r?k(n)&&x(n,s):k(n)?n.includes(s)||n.push(s):t?(u[c]=[s],S(f,c)&&(f[c]=u[c])):(c.value=[s],e.k&&(u[e.k]=c.value))}else t?(u[c]=i,S(f,c)&&(f[c]=i)):o&&(c.value=i,e.k&&(u[e.k]=i))};i?(l.id=-1,tr(l,n)):l()}}}let Xo=!1;const Zo=e=>/svg/.test(e.namespaceURI)&&\"foreignObject\"!==e.tagName,Qo=e=>8===e.nodeType;function er(e){const{mt:t,p:n,o:{patchProp:o,createText:r,nextSibling:s,parentNode:i,remove:l,insert:c,createComment:a}}=e,u=(n,o,l,a,m,g=!1)=>{const _=Qo(n)&&\"[\"===n.data,y=()=>h(n,o,l,a,m,_),{type:b,ref:C,shapeFlag:x,patchFlag:w}=o;let S=n.nodeType;o.el=n,-2===w&&(g=!1,o.dynamicChildren=null);let k=null;switch(b){case hr:3!==S?\"\"===o.children?(c(o.el=r(\"\"),i(n),n),k=n):k=y():(n.data!==o.children&&(Xo=!0,n.data=o.children),k=s(n));break;case vr:k=8!==S||_?y():s(n);break;case mr:if(_&&(S=(n=s(n)).nodeType),1===S||3===S){k=n;const e=!o.children.length;for(let t=0;t<o.staticCount;t++)e&&(o.children+=1===k.nodeType?k.outerHTML:k.data),t===o.staticCount-1&&(o.anchor=k),k=s(k);return _?s(k):k}y();break;case dr:k=_?d(n,o,l,a,m,g):y();break;default:if(1&x)k=1!==S||o.type.toLowerCase()!==n.tagName.toLowerCase()?y():f(n,o,l,a,m,g);else if(6&x){o.slotScopeIds=m;const e=i(n);if(t(o,e,null,l,a,Zo(e),g),k=_?v(n):s(n),k&&Qo(k)&&\"teleport end\"===k.data&&(k=s(k)),Hn(o)){let t;_?(t=Or(dr),t.anchor=k?k.previousSibling:e.lastChild):t=3===n.nodeType?Nr(\"\"):Or(\"div\"),t.el=n,o.component.subTree=t}}else 64&x?k=8!==S?y():o.type.hydrate(n,o,l,a,m,g,e,p):128&x&&(k=o.type.hydrate(n,o,l,a,Zo(i(n)),m,g,e,u))}return null!=C&&Jo(C,null,a,o),k},f=(e,t,n,r,s,i)=>{i=i||!!t.dynamicChildren;const{type:c,props:a,patchFlag:u,shapeFlag:f,dirs:d}=t,h=\"input\"===c&&d||\"option\"===c;if(h||-1!==u){if(d&&po(t,null,n,\"created\"),a)if(h||!i||48&u)for(const t in a)(h&&t.endsWith(\"value\")||y(t)&&!I(t))&&o(e,t,null,a[t],!1,void 0,n);else a.onClick&&o(e,\"onClick\",null,a.onClick,!1,void 0,n);let c;if((c=a&&a.onVnodeBeforeMount)&&jr(c,n,t),d&&po(t,null,n,\"beforeMount\"),((c=a&&a.onVnodeMounted)||d)&&xn((()=>{c&&jr(c,n,t),d&&po(t,null,n,\"mounted\")}),r),16&f&&(!a||!a.innerHTML&&!a.textContent)){let o=p(e.firstChild,t,e,n,r,s,i);for(;o;){Xo=!0;const e=o;o=o.nextSibling,l(e)}}else 8&f&&e.textContent!==t.children&&(Xo=!0,e.textContent=t.children)}return e.nextSibling},p=(e,t,o,r,s,i,l)=>{l=l||!!t.dynamicChildren;const c=t.children,a=c.length;for(let f=0;f<a;f++){const t=l?c[f]:c[f]=Lr(c[f]);if(e)e=u(e,t,r,s,i,l);else{if(t.type===hr&&!t.children)continue;Xo=!0,n(null,t,o,null,r,s,Zo(o),i)}}return e},d=(e,t,n,o,r,l)=>{const{slotScopeIds:u}=t;u&&(r=r?r.concat(u):u);const f=i(e),d=p(s(e),t,f,n,o,r,l);return d&&Qo(d)&&\"]\"===d.data?s(t.anchor=d):(Xo=!0,c(t.anchor=a(\"]\"),f,d),d)},h=(e,t,o,r,c,a)=>{if(Xo=!0,t.el=null,a){const t=v(e);for(;;){const n=s(e);if(!n||n===t)break;l(n)}}const u=s(e),f=i(e);return l(e),n(null,t,f,u,o,r,Zo(f),c),u},v=e=>{let t=0;for(;e;)if((e=s(e))&&Qo(e)&&(\"[\"===e.data&&t++,\"]\"===e.data)){if(0===t)return s(e);t--}return e};return[(e,t)=>{if(!t.hasChildNodes())return n(null,e,t),Qt(),void(t._vnode=e);Xo=!1,u(t.firstChild,e,null,null,null),Qt(),t._vnode=e,Xo&&console.error(\"Hydration completed but contains mismatches.\")},u]}const tr=xn;function nr(e){return rr(e)}function or(e){return rr(e,er)}function rr(e,t){(X||(X=\"undefined\"!=typeof globalThis?globalThis:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:{})).__VUE__=!0;const{insert:n,remove:o,patchProp:r,createElement:s,createText:i,createComment:l,setText:c,setElementText:a,parentNode:u,nextSibling:f,setScopeId:p=m,insertStaticContent:d}=e,g=(e,t,n,o=null,r=null,s=null,i=!1,l=null,c=!!t.dynamicChildren)=>{if(e===t)return;e&&!Er(e,t)&&(o=Z(e),z(e,r,s,!0),e=null),-2===t.patchFlag&&(c=!1,t.dynamicChildren=null);const{type:a,ref:u,shapeFlag:f}=t;switch(a){case hr:_(e,t,n,o);break;case vr:y(e,t,n,o);break;case mr:null==e&&b(t,n,o,i);break;case dr:R(e,t,n,o,r,s,i,l,c);break;default:1&f?x(e,t,n,o,r,s,i,l,c):6&f?O(e,t,n,o,r,s,i,l,c):(64&f||128&f)&&a.process(e,t,n,o,r,s,i,l,c,te)}null!=u&&r&&Jo(u,e&&e.ref,s,t||e,!t)},_=(e,t,o,r)=>{if(null==e)n(t.el=i(t.children),o,r);else{const n=t.el=e.el;t.children!==e.children&&c(n,t.children)}},y=(e,t,o,r)=>{null==e?n(t.el=l(t.children||\"\"),o,r):t.el=e.el},b=(e,t,n,o)=>{[e.el,e.anchor]=d(e.children,t,n,o,e.el,e.anchor)},x=(e,t,n,o,r,s,i,l,c)=>{i=i||\"svg\"===t.type,null==e?w(t,n,o,r,s,i,l,c):A(e,t,r,s,i,l,c)},w=(e,t,o,i,l,c,u,f)=>{let p,d;const{type:h,props:v,shapeFlag:m,transition:g,dirs:_}=e;if(p=e.el=s(e.type,c,v&&v.is,v),8&m?a(p,e.children):16&m&&E(e.children,p,null,i,l,c&&\"foreignObject\"!==h,u,f),_&&po(e,null,i,\"created\"),k(p,e,e.scopeId,u,i),v){for(const t in v)\"value\"===t||I(t)||r(p,t,null,v[t],c,e.children,i,l,J);\"value\"in v&&r(p,\"value\",null,v.value),(d=v.onVnodeBeforeMount)&&jr(d,i,e)}_&&po(e,null,i,\"beforeMount\");const y=(!l||l&&!l.pendingBranch)&&g&&!g.persisted;y&&g.beforeEnter(p),n(p,t,o),((d=v&&v.onVnodeMounted)||y||_)&&tr((()=>{d&&jr(d,i,e),y&&g.enter(p),_&&po(e,null,i,\"mounted\")}),l)},k=(e,t,n,o,r)=>{if(n&&p(e,n),o)for(let s=0;s<o.length;s++)p(e,o[s]);if(r){if(t===r.subTree){const t=r.vnode;k(e,t,t.scopeId,t.slotScopeIds,r.parent)}}},E=(e,t,n,o,r,s,i,l,c=0)=>{for(let a=c;a<e.length;a++){const c=e[a]=l?Vr(e[a]):Lr(e[a]);g(null,c,t,n,o,r,s,i,l)}},A=(e,t,n,o,s,i,l)=>{const c=t.el=e.el;let{patchFlag:u,dynamicChildren:f,dirs:p}=t;u|=16&e.patchFlag;const d=e.props||h,v=t.props||h;let m;n&&sr(n,!1),(m=v.onVnodeBeforeUpdate)&&jr(m,n,t,e),p&&po(t,e,n,\"beforeUpdate\"),n&&sr(n,!0);const g=s&&\"foreignObject\"!==t.type;if(f?T(e.dynamicChildren,f,c,n,o,g,i):l||B(e,t,c,null,n,o,g,i,!1),u>0){if(16&u)F(c,t,d,v,n,o,s);else if(2&u&&d.class!==v.class&&r(c,\"class\",null,v.class,s),4&u&&r(c,\"style\",d.style,v.style,s),8&u){const i=t.dynamicProps;for(let t=0;t<i.length;t++){const l=i[t],a=d[l],u=v[l];u===a&&\"value\"!==l||r(c,l,a,u,s,e.children,n,o,J)}}1&u&&e.children!==t.children&&a(c,t.children)}else l||null!=f||F(c,t,d,v,n,o,s);((m=v.onVnodeUpdated)||p)&&tr((()=>{m&&jr(m,n,t,e),p&&po(t,e,n,\"updated\")}),o)},T=(e,t,n,o,r,s,i)=>{for(let l=0;l<t.length;l++){const c=e[l],a=t[l],f=c.el&&(c.type===dr||!Er(c,a)||70&c.shapeFlag)?u(c.el):n;g(c,a,f,null,o,r,s,i,!0)}},F=(e,t,n,o,s,i,l)=>{if(n!==o){if(n!==h)for(const c in n)I(c)||c in o||r(e,c,n[c],null,l,t.children,s,i,J);for(const c in o){if(I(c))continue;const a=o[c],u=n[c];a!==u&&\"value\"!==c&&r(e,c,u,a,l,t.children,s,i,J)}\"value\"in o&&r(e,\"value\",n.value,o.value)}},R=(e,t,o,r,s,l,c,a,u)=>{const f=t.el=e?e.el:i(\"\"),p=t.anchor=e?e.anchor:i(\"\");let{patchFlag:d,dynamicChildren:h,slotScopeIds:v}=t;v&&(a=a?a.concat(v):v),null==e?(n(f,o,r),n(p,o,r),E(t.children,o,p,s,l,c,a,u)):d>0&&64&d&&h&&e.dynamicChildren?(T(e.dynamicChildren,h,o,s,l,c,a),(null!=t.key||s&&t===s.subTree)&&ir(e,t,!0)):B(e,t,o,p,s,l,c,a,u)},O=(e,t,n,o,r,s,i,l,c)=>{t.slotScopeIds=l,null==e?512&t.shapeFlag?r.ctx.activate(t,n,o,i,c):P(t,n,o,r,s,i,c):N(e,t,c)},P=(e,t,n,o,r,s,i)=>{const l=e.component=function(e,t,n){const o=e.type,r=(t?t.appContext:e.appContext)||Ur,s={uid:$r++,vnode:e,type:o,parent:t,appContext:r,root:null,next:null,subTree:null,effect:null,update:null,scope:new Q(!0),render:null,proxy:null,exposed:null,exposeProxy:null,withProxy:null,provides:t?t.provides:Object.create(r.provides),accessCache:null,renderCache:[],components:null,directives:null,propsOptions:Bo(o,r),emitsOptions:sn(o,r),emit:null,emitted:null,propsDefaults:h,inheritAttrs:o.inheritAttrs,ctx:h,data:h,props:h,attrs:h,slots:h,refs:h,setupState:h,setupContext:null,suspense:n,suspenseId:n?n.pendingId:0,asyncDep:null,asyncResolved:!1,isMounted:!1,isUnmounted:!1,isDeactivated:!1,bc:null,c:null,bm:null,m:null,bu:null,u:null,um:null,bum:null,da:null,a:null,rtg:null,rtc:null,ec:null,sp:null};s.ctx={_:s},s.root=t?t.root:s,s.emit=rn.bind(null,s),e.ce&&e.ce(s);return s}(e,o,r);if(Wn(e)&&(l.ctx.renderer=te),function(e,t=!1){Yr=t;const{props:n,children:o}=e.vnode,r=Kr(e);(function(e,t,n,o=!1){const r={},s={};G(s,Ar,1),e.propsDefaults=Object.create(null),Lo(e,t,r,s);for(const i in e.propsOptions[0])i in r||(r[i]=void 0);e.props=n?o?r:ft(r):e.type.props?r:s,e.attrs=s})(e,n,r,t),((e,t)=>{if(32&e.vnode.shapeFlag){const n=t._;n?(e.slots=_t(t),G(t,\"_\",n)):Wo(t,e.slots={})}else e.slots={},t&&Ko(e,t);G(e.slots,Ar,1)})(e,o);const s=r?function(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=yt(new Proxy(e.ctx,xo));const{setup:o}=n;if(o){const n=e.setupContext=o.length>1?Zr(e):null;zr(e),ve();const r=Vt(o,e,0,[e.props,n]);if(me(),Wr(),M(r)){if(r.then(Wr,Wr),t)return r.then((n=>{Jr(e,n,t)})).catch((t=>{It(t,e,0)}));e.asyncDep=r}else Jr(e,r,t)}else Xr(e,t)}(e,t):void 0;Yr=!1}(l),l.asyncDep){if(r&&r.registerDep(l,L),!e.el){const e=l.subTree=Or(vr);y(null,e,t,n)}}else L(l,e,t,n,r,s,i)},N=(e,t,n)=>{const o=t.component=e.component;if(function(e,t,n){const{props:o,children:r,component:s}=e,{props:i,children:l,patchFlag:c}=t,a=s.emitsOptions;if(t.dirs||t.transition)return!0;if(!(n&&c>=0))return!(!r&&!l||l&&l.$stable)||o!==i&&(o?!i||vn(o,i,a):!!i);if(1024&c)return!0;if(16&c)return o?vn(o,i,a):!!i;if(8&c){const e=t.dynamicProps;for(let t=0;t<e.length;t++){const n=e[t];if(i[n]!==o[n]&&!ln(a,n))return!0}}return!1}(e,t,n)){if(o.asyncDep&&!o.asyncResolved)return void V(o,t,n);o.next=t,function(e){const t=$t.indexOf(e);t>Dt&&$t.splice(t,1)}(o.update),o.update()}else t.el=e.el,o.vnode=t},L=(e,t,n,o,r,s,i)=>{const l=e.effect=new fe((()=>{if(e.isMounted){let t,{next:n,bu:o,u:l,parent:c,vnode:a}=e,f=n;sr(e,!1),n?(n.el=a.el,V(e,n,i)):n=a,o&&q(o),(t=n.props&&n.props.onVnodeBeforeUpdate)&&jr(t,c,n,a),sr(e,!0);const p=pn(e),d=e.subTree;e.subTree=p,g(d,p,u(d.el),Z(d),e,r,s),n.el=p.el,null===f&&mn(e,p.el),l&&tr(l,r),(t=n.props&&n.props.onVnodeUpdated)&&tr((()=>jr(t,c,n,a)),r)}else{let i;const{el:l,props:c}=t,{bm:a,m:u,parent:f}=e,p=Hn(t);if(sr(e,!1),a&&q(a),!p&&(i=c&&c.onVnodeBeforeMount)&&jr(i,f,t),sr(e,!0),l&&oe){const n=()=>{e.subTree=pn(e),oe(l,e.subTree,e,r,null)};p?t.type.__asyncLoader().then((()=>!e.isUnmounted&&n())):n()}else{const i=e.subTree=pn(e);g(null,i,n,o,e,r,s),t.el=i.el}if(u&&tr(u,r),!p&&(i=c&&c.onVnodeMounted)){const e=t;tr((()=>jr(i,f,e)),r)}(256&t.shapeFlag||f&&Hn(f.vnode)&&256&f.vnode.shapeFlag)&&e.a&&tr(e.a,r),e.isMounted=!0,t=n=o=null}}),(()=>Yt(c)),e.scope),c=e.update=()=>l.run();c.id=e.uid,sr(e,!0),c()},V=(e,t,n)=>{t.component=e;const o=e.vnode.props;e.vnode=t,e.next=null,function(e,t,n,o){const{props:r,attrs:s,vnode:{patchFlag:i}}=e,l=_t(r),[c]=e.propsOptions;let a=!1;if(!(o||i>0)||16&i){let o;Lo(e,t,r,s)&&(a=!0);for(const s in l)t&&(S(t,s)||(o=H(s))!==s&&S(t,o))||(c?!n||void 0===n[s]&&void 0===n[o]||(r[s]=Vo(c,l,s,void 0,e,!0)):delete r[s]);if(s!==l)for(const e in s)t&&S(t,e)||(delete s[e],a=!0)}else if(8&i){const n=e.vnode.dynamicProps;for(let o=0;o<n.length;o++){let i=n[o];if(ln(e.emitsOptions,i))continue;const u=t[i];if(c)if(S(s,i))u!==s[i]&&(s[i]=u,a=!0);else{const t=$(i);r[t]=Vo(c,l,t,u,e,!1)}else u!==s[i]&&(s[i]=u,a=!0)}}a&&ye(e,\"set\",\"$attrs\")}(e,t.props,o,n),((e,t,n)=>{const{vnode:o,slots:r}=e;let s=!0,i=h;if(32&o.shapeFlag){const e=t._;e?n&&1===e?s=!1:(C(r,t),n||1!==e||delete r._):(s=!t.$stable,Wo(t,r)),i=t}else t&&(Ko(e,t),i={default:1});if(s)for(const l in r)Do(l)||l in i||delete r[l]})(e,t.children,n),ve(),Zt(),me()},B=(e,t,n,o,r,s,i,l,c=!1)=>{const u=e&&e.children,f=e?e.shapeFlag:0,p=t.children,{patchFlag:d,shapeFlag:h}=t;if(d>0){if(128&d)return void U(u,p,n,o,r,s,i,l,c);if(256&d)return void j(u,p,n,o,r,s,i,l,c)}8&h?(16&f&&J(u,r,s),p!==u&&a(n,p)):16&f?16&h?U(u,p,n,o,r,s,i,l,c):J(u,r,s,!0):(8&f&&a(n,\"\"),16&h&&E(p,n,o,r,s,i,l,c))},j=(e,t,n,o,r,s,i,l,c)=>{const a=(e=e||v).length,u=(t=t||v).length,f=Math.min(a,u);let p;for(p=0;p<f;p++){const o=t[p]=c?Vr(t[p]):Lr(t[p]);g(e[p],o,n,null,r,s,i,l,c)}a>u?J(e,r,s,!0,!1,f):E(t,n,o,r,s,i,l,c,f)},U=(e,t,n,o,r,s,i,l,c)=>{let a=0;const u=t.length;let f=e.length-1,p=u-1;for(;a<=f&&a<=p;){const o=e[a],u=t[a]=c?Vr(t[a]):Lr(t[a]);if(!Er(o,u))break;g(o,u,n,null,r,s,i,l,c),a++}for(;a<=f&&a<=p;){const o=e[f],a=t[p]=c?Vr(t[p]):Lr(t[p]);if(!Er(o,a))break;g(o,a,n,null,r,s,i,l,c),f--,p--}if(a>f){if(a<=p){const e=p+1,f=e<u?t[e].el:o;for(;a<=p;)g(null,t[a]=c?Vr(t[a]):Lr(t[a]),n,f,r,s,i,l,c),a++}}else if(a>p)for(;a<=f;)z(e[a],r,s,!0),a++;else{const d=a,h=a,m=new Map;for(a=h;a<=p;a++){const e=t[a]=c?Vr(t[a]):Lr(t[a]);null!=e.key&&m.set(e.key,a)}let _,y=0;const b=p-h+1;let C=!1,x=0;const w=new Array(b);for(a=0;a<b;a++)w[a]=0;for(a=d;a<=f;a++){const o=e[a];if(y>=b){z(o,r,s,!0);continue}let u;if(null!=o.key)u=m.get(o.key);else for(_=h;_<=p;_++)if(0===w[_-h]&&Er(o,t[_])){u=_;break}void 0===u?z(o,r,s,!0):(w[u-h]=a+1,u>=x?x=u:C=!0,g(o,t[u],n,null,r,s,i,l,c),y++)}const S=C?function(e){const t=e.slice(),n=[0];let o,r,s,i,l;const c=e.length;for(o=0;o<c;o++){const c=e[o];if(0!==c){if(r=n[n.length-1],e[r]<c){t[o]=r,n.push(o);continue}for(s=0,i=n.length-1;s<i;)l=s+i>>1,e[n[l]]<c?s=l+1:i=l;c<e[n[s]]&&(s>0&&(t[o]=n[s-1]),n[s]=o)}}s=n.length,i=n[s-1];for(;s-- >0;)n[s]=i,i=t[i];return n}(w):v;for(_=S.length-1,a=b-1;a>=0;a--){const e=h+a,f=t[e],p=e+1<u?t[e+1].el:o;0===w[a]?g(null,f,n,p,r,s,i,l,c):C&&(_<0||a!==S[_]?D(f,n,p,2):_--)}}},D=(e,t,o,r,s=null)=>{const{el:i,type:l,transition:c,children:a,shapeFlag:u}=e;if(6&u)return void D(e.component.subTree,t,o,r);if(128&u)return void e.suspense.move(t,o,r);if(64&u)return void l.move(e,t,o,te);if(l===dr){n(i,t,o);for(let e=0;e<a.length;e++)D(a[e],t,o,r);return void n(e.anchor,t,o)}if(l===mr)return void(({el:e,anchor:t},o,r)=>{let s;for(;e&&e!==t;)s=f(e),n(e,o,r),e=s;n(t,o,r)})(e,t,o);if(2!==r&&1&u&&c)if(0===r)c.beforeEnter(i),n(i,t,o),tr((()=>c.enter(i)),s);else{const{leave:e,delayLeave:r,afterLeave:s}=c,l=()=>n(i,t,o),a=()=>{e(i,(()=>{l(),s&&s()}))};r?r(i,l,a):a()}else n(i,t,o)},z=(e,t,n,o=!1,r=!1)=>{const{type:s,props:i,ref:l,children:c,dynamicChildren:a,shapeFlag:u,patchFlag:f,dirs:p}=e;if(null!=l&&Jo(l,null,n,e,!0),256&u)return void t.ctx.deactivate(e);const d=1&u&&p,h=!Hn(e);let v;if(h&&(v=i&&i.onVnodeBeforeUnmount)&&jr(v,t,e),6&u)Y(e.component,n,o);else{if(128&u)return void e.suspense.unmount(n,o);d&&po(e,null,t,\"beforeUnmount\"),64&u?e.type.remove(e,t,n,r,te,o):a&&(s!==dr||f>0&&64&f)?J(a,t,n,!1,!0):(s===dr&&384&f||!r&&16&u)&&J(c,t,n),o&&W(e)}(h&&(v=i&&i.onVnodeUnmounted)||d)&&tr((()=>{v&&jr(v,t,e),d&&po(e,null,t,\"unmounted\")}),n)},W=e=>{const{type:t,el:n,anchor:r,transition:s}=e;if(t===dr)return void K(n,r);if(t===mr)return void(({el:e,anchor:t})=>{let n;for(;e&&e!==t;)n=f(e),o(e),e=n;o(t)})(e);const i=()=>{o(n),s&&!s.persisted&&s.afterLeave&&s.afterLeave()};if(1&e.shapeFlag&&s&&!s.persisted){const{leave:t,delayLeave:o}=s,r=()=>t(n,i);o?o(e.el,i,r):r()}else i()},K=(e,t)=>{let n;for(;e!==t;)n=f(e),o(e),e=n;o(t)},Y=(e,t,n)=>{const{bum:o,scope:r,update:s,subTree:i,um:l}=e;o&&q(o),r.stop(),s&&(s.active=!1,z(i,e,t,n)),l&&tr(l,t),tr((()=>{e.isUnmounted=!0}),t),t&&t.pendingBranch&&!t.isUnmounted&&e.asyncDep&&!e.asyncResolved&&e.suspenseId===t.pendingId&&(t.deps--,0===t.deps&&t.resolve())},J=(e,t,n,o=!1,r=!1,s=0)=>{for(let i=s;i<e.length;i++)z(e[i],t,n,o,r)},Z=e=>6&e.shapeFlag?Z(e.component.subTree):128&e.shapeFlag?e.suspense.next():f(e.anchor||e.el),ee=(e,t,n)=>{null==e?t._vnode&&z(t._vnode,null,null,!0):g(t._vnode||null,e,t,null,null,null,n),Zt(),Qt(),t._vnode=e},te={p:g,um:z,m:D,r:W,mt:P,mc:E,pc:B,pbc:T,n:Z,o:e};let ne,oe;return t&&([ne,oe]=t(te)),{render:ee,hydrate:ne,createApp:Yo(ee,ne)}}function sr({effect:e,update:t},n){e.allowRecurse=t.allowRecurse=n}function ir(e,t,n=!1){const o=e.children,r=t.children;if(k(o)&&k(r))for(let s=0;s<o.length;s++){const e=o[s];let t=r[s];1&t.shapeFlag&&!t.dynamicChildren&&((t.patchFlag<=0||32===t.patchFlag)&&(t=r[s]=Vr(r[s]),t.el=e.el),n||ir(e,t)),t.type===hr&&(t.el=e.el)}}const lr=e=>e&&(e.disabled||\"\"===e.disabled),cr=e=>\"undefined\"!=typeof SVGElement&&e instanceof SVGElement,ar=(e,t)=>{const n=e&&e.to;if(R(n)){if(t){return t(n)}return null}return n};function ur(e,t,n,{o:{insert:o},m:r},s=2){0===s&&o(e.targetAnchor,t,n);const{el:i,anchor:l,shapeFlag:c,children:a,props:u}=e,f=2===s;if(f&&o(i,t,n),(!f||lr(u))&&16&c)for(let p=0;p<a.length;p++)r(a[p],t,n,2);f&&o(l,t,n)}const fr={__isTeleport:!0,process(e,t,n,o,r,s,i,l,c,a){const{mc:u,pc:f,pbc:p,o:{insert:d,querySelector:h,createText:v}}=a,m=lr(t.props);let{shapeFlag:g,children:_,dynamicChildren:y}=t;if(null==e){const e=t.el=v(\"\"),a=t.anchor=v(\"\");d(e,n,o),d(a,n,o);const f=t.target=ar(t.props,h),p=t.targetAnchor=v(\"\");f&&(d(p,f),i=i||cr(f));const y=(e,t)=>{16&g&&u(_,e,t,r,s,i,l,c)};m?y(n,a):f&&y(f,p)}else{t.el=e.el;const o=t.anchor=e.anchor,u=t.target=e.target,d=t.targetAnchor=e.targetAnchor,v=lr(e.props),g=v?n:u,_=v?o:d;if(i=i||cr(u),y?(p(e.dynamicChildren,y,g,r,s,i,l),ir(e,t,!0)):c||f(e,t,g,_,r,s,i,l,!1),m)v||ur(t,n,o,a,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const e=t.target=ar(t.props,h);e&&ur(t,e,null,a,0)}else v&&ur(t,u,d,a,1)}pr(t)},remove(e,t,n,o,{um:r,o:{remove:s}},i){const{shapeFlag:l,children:c,anchor:a,targetAnchor:u,target:f,props:p}=e;if(f&&s(u),(i||!lr(p))&&(s(a),16&l))for(let d=0;d<c.length;d++){const e=c[d];r(e,t,n,!0,!!e.dynamicChildren)}},move:ur,hydrate:function(e,t,n,o,r,s,{o:{nextSibling:i,parentNode:l,querySelector:c}},a){const u=t.target=ar(t.props,c);if(u){const c=u._lpa||u.firstChild;if(16&t.shapeFlag)if(lr(t.props))t.anchor=a(i(e),t,l(e),n,o,r,s),t.targetAnchor=c;else{t.anchor=i(e);let l=c;for(;l;)if(l=i(l),l&&8===l.nodeType&&\"teleport anchor\"===l.data){t.targetAnchor=l,u._lpa=t.targetAnchor&&i(t.targetAnchor);break}a(c,t,u,n,o,r,s)}pr(t)}return t.anchor&&i(t.anchor)}};function pr(e){const t=e.ctx;if(t&&t.ut){let n=e.children[0].el;for(;n!==e.targetAnchor;)1===n.nodeType&&n.setAttribute(\"data-v-owner\",t.uid),n=n.nextSibling;t.ut()}}const dr=Symbol(void 0),hr=Symbol(void 0),vr=Symbol(void 0),mr=Symbol(void 0),gr=[];let _r=null;function yr(e=!1){gr.push(_r=e?null:[])}function br(){gr.pop(),_r=gr[gr.length-1]||null}let Cr=1;function xr(e){Cr+=e}function wr(e){return e.dynamicChildren=Cr>0?_r||v:null,br(),Cr>0&&_r&&_r.push(e),e}function Sr(e,t,n,o,r){return wr(Or(e,t,n,o,r,!0))}function kr(e){return!!e&&!0===e.__v_isVNode}function Er(e,t){return e.type===t.type&&e.key===t.key}const Ar=\"__vInternal\",Tr=({key:e})=>null!=e?e:null,Fr=({ref:e,ref_key:t,ref_for:n})=>null!=e?R(e)||St(e)||F(e)?{i:cn,r:e,k:t,f:!!n}:e:null;function Rr(e,t=null,n=null,o=0,r=null,s=(e===dr?0:1),i=!1,l=!1){const c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&Tr(t),ref:t&&Fr(t),scopeId:an,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:s,patchFlag:o,dynamicProps:r,dynamicChildren:null,appContext:null,ctx:cn};return l?(Br(c,n),128&s&&e.normalize(c)):n&&(c.shapeFlag|=R(n)?8:16),Cr>0&&!i&&_r&&(c.patchFlag>0||6&s)&&32!==c.patchFlag&&_r.push(c),c}const Or=function(e,t=null,n=null,r=0,s=null,i=!1){e&&e!==vo||(e=vr);if(kr(e)){const o=Mr(e,t,!0);return n&&Br(o,n),Cr>0&&!i&&_r&&(6&o.shapeFlag?_r[_r.indexOf(e)]=o:_r.push(o)),o.patchFlag|=-2,o}l=e,F(l)&&\"__vccOpts\"in l&&(e=e.__vccOpts);var l;if(t){t=Pr(t);let{class:e,style:n}=t;e&&!R(e)&&(t.class=c(e)),P(n)&&(gt(n)&&!k(n)&&(n=C({},n)),t.style=o(n))}const a=R(e)?1:gn(e)?128:(e=>e.__isTeleport)(e)?64:P(e)?4:F(e)?2:0;return Rr(e,t,n,r,s,a,i,!0)};function Pr(e){return e?gt(e)||Ar in e?C({},e):e:null}function Mr(e,t,n=!1){const{props:o,ref:r,patchFlag:s,children:i}=e,l=t?Ir(o||{},t):o;return{__v_isVNode:!0,__v_skip:!0,type:e.type,props:l,key:l&&Tr(l),ref:t&&t.ref?n&&r?k(r)?r.concat(Fr(t)):[r,Fr(t)]:Fr(t):r,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:i,target:e.target,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==dr?-1===s?16:16|s:s,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:e.transition,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&Mr(e.ssContent),ssFallback:e.ssFallback&&Mr(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce}}function Nr(e=\" \",t=0){return Or(hr,null,e,t)}function Lr(e){return null==e||\"boolean\"==typeof e?Or(vr):k(e)?Or(dr,null,e.slice()):\"object\"==typeof e?Vr(e):Or(hr,null,String(e))}function Vr(e){return null===e.el&&-1!==e.patchFlag||e.memo?e:Mr(e)}function Br(e,t){let n=0;const{shapeFlag:o}=e;if(null==t)t=null;else if(k(t))n=16;else if(\"object\"==typeof t){if(65&o){const n=t.default;return void(n&&(n._c&&(n._d=!1),Br(e,n()),n._c&&(n._d=!0)))}{n=32;const o=t._;o||Ar in t?3===o&&cn&&(1===cn.slots._?t._=1:(t._=2,e.patchFlag|=1024)):t._ctx=cn}}else F(t)?(t={default:t,_ctx:cn},n=32):(t=String(t),64&o?(n=16,t=[Nr(t)]):n=8);e.children=t,e.shapeFlag|=n}function Ir(...e){const t={};for(let n=0;n<e.length;n++){const r=e[n];for(const e in r)if(\"class\"===e)t.class!==r.class&&(t.class=c([t.class,r.class]));else if(\"style\"===e)t.style=o([t.style,r.style]);else if(y(e)){const n=t[e],o=r[e];!o||n===o||k(n)&&n.includes(o)||(t[e]=n?[].concat(n,o):o)}else\"\"!==e&&(t[e]=r[e])}return t}function jr(e,t,n,o=null){Bt(e,t,7,[n,o])}const Ur=qo();let $r=0;let Dr=null;const Hr=()=>Dr||cn,zr=e=>{Dr=e,e.scope.on()},Wr=()=>{Dr&&Dr.scope.off(),Dr=null};function Kr(e){return 4&e.vnode.shapeFlag}let qr,Gr,Yr=!1;function Jr(e,t,n){F(t)?e.render=t:P(t)&&(e.setupState=Rt(t)),Xr(e,n)}function Xr(e,t,n){const o=e.type;if(!e.render){if(!t&&qr&&!o.render){const t=o.template||To(e).template;if(t){const{isCustomElement:n,compilerOptions:r}=e.appContext.config,{delimiters:s,compilerOptions:i}=o,l=C(C({isCustomElement:n,delimiters:s},r),i);o.render=qr(t,l)}}e.render=o.render||m,Gr&&Gr(e)}zr(e),ve(),ko(e),me(),Wr()}function Zr(e){const t=t=>{e.exposed=t||{}};let n;return{get attrs(){return n||(n=function(e){return new Proxy(e.attrs,{get:(t,n)=>(ge(e,0,\"$attrs\"),t[n])})}(e))},slots:e.slots,emit:e.emit,expose:t}}function Qr(e){if(e.exposed)return e.exposeProxy||(e.exposeProxy=new Proxy(Rt(yt(e.exposed)),{get:(t,n)=>n in t?t[n]:n in bo?bo[n](e):void 0,has:(e,t)=>t in e||t in bo}))}function es(e,t=!0){return F(e)?e.displayName||e.name:e.name||t&&e.__name}const ts=(e,t)=>function(e,t,n=!1){let o,r;const s=F(e);return s?(o=e,r=m):(o=e.get,r=e.set),new Lt(o,r,s||!r,n)}(e,0,Yr);function ns(){const e=Hr();return e.setupContext||(e.setupContext=Zr(e))}function os(e,t,n){const o=arguments.length;return 2===o?P(t)&&!k(t)?kr(t)?Or(e,null,[t]):Or(e,t):Or(e,null,t):(o>3?n=Array.prototype.slice.call(arguments,2):3===o&&kr(n)&&(n=[n]),Or(e,t,n))}const rs=Symbol(\"\");function ss(e,t){const n=e.memo;if(n.length!=t.length)return!1;for(let o=0;o<n.length;o++)if(K(n[o],t[o]))return!1;return Cr>0&&_r&&_r.push(e),!0}const is=\"3.2.47\",ls=\"undefined\"!=typeof document?document:null,cs=ls&&ls.createElement(\"template\"),as={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,o)=>{const r=t?ls.createElementNS(\"http://www.w3.org/2000/svg\",e):ls.createElement(e,n?{is:n}:void 0);return\"select\"===e&&o&&null!=o.multiple&&r.setAttribute(\"multiple\",o.multiple),r},createText:e=>ls.createTextNode(e),createComment:e=>ls.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>ls.querySelector(e),setScopeId(e,t){e.setAttribute(t,\"\")},insertStaticContent(e,t,n,o,r,s){const i=n?n.previousSibling:t.lastChild;if(r&&(r===s||r.nextSibling))for(;t.insertBefore(r.cloneNode(!0),n),r!==s&&(r=r.nextSibling););else{cs.innerHTML=o?`<svg>${e}</svg>`:e;const r=cs.content;if(o){const e=r.firstChild;for(;e.firstChild;)r.appendChild(e.firstChild);r.removeChild(e)}t.insertBefore(r,n)}return[i?i.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}};const us=/\\s*!important$/;function fs(e,t,n){if(k(n))n.forEach((n=>fs(e,t,n)));else if(null==n&&(n=\"\"),t.startsWith(\"--\"))e.setProperty(t,n);else{const o=function(e,t){const n=ds[t];if(n)return n;let o=$(t);if(\"filter\"!==o&&o in e)return ds[t]=o;o=z(o);for(let r=0;r<ps.length;r++){const n=ps[r]+o;if(n in e)return ds[t]=n}return t}(e,t);us.test(n)?e.setProperty(H(o),n.replace(us,\"\"),\"important\"):e[o]=n}}const ps=[\"Webkit\",\"Moz\",\"ms\"],ds={};const hs=\"http://www.w3.org/1999/xlink\";function vs(e,t,n,o){e.addEventListener(t,n,o)}function ms(e,t,n,o,r=null){const s=e._vei||(e._vei={}),i=s[t];if(o&&i)i.value=o;else{const[n,l]=function(e){let t;if(gs.test(e)){let n;for(t={};n=e.match(gs);)e=e.slice(0,e.length-n[0].length),t[n[0].toLowerCase()]=!0}return[\":\"===e[2]?e.slice(3):H(e.slice(2)),t]}(t);if(o){const i=s[t]=function(e,t){const n=e=>{if(e._vts){if(e._vts<=n.attached)return}else e._vts=Date.now();Bt(function(e,t){if(k(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map((e=>t=>!t._stopped&&e&&e(t)))}return t}(e,n.value),t,5,[e])};return n.value=e,n.attached=(()=>_s||(ys.then((()=>_s=0)),_s=Date.now()))(),n}(o,r);vs(e,n,i,l)}else i&&(!function(e,t,n,o){e.removeEventListener(t,n,o)}(e,n,i,l),s[t]=void 0)}}const gs=/(?:Once|Passive|Capture)$/;let _s=0;const ys=Promise.resolve();const bs=/^on[a-z]/;function Cs(e,t){const n=Dn(e);class o extends ws{constructor(e){super(n,e,t)}}return o.def=n,o}const xs=\"undefined\"!=typeof HTMLElement?HTMLElement:class{};class ws extends xs{constructor(e,t={},n){super(),this._def=e,this._props=t,this._instance=null,this._connected=!1,this._resolved=!1,this._numberProps=null,this.shadowRoot&&n?n(this._createVNode(),this.shadowRoot):(this.attachShadow({mode:\"open\"}),this._def.__asyncLoader||this._resolveProps(this._def))}connectedCallback(){this._connected=!0,this._instance||(this._resolved?this._update():this._resolveDef())}disconnectedCallback(){this._connected=!1,Gt((()=>{this._connected||(bi(null,this.shadowRoot),this._instance=null)}))}_resolveDef(){this._resolved=!0;for(let n=0;n<this.attributes.length;n++)this._setAttr(this.attributes[n].name);new MutationObserver((e=>{for(const t of e)this._setAttr(t.attributeName)})).observe(this,{attributes:!0});const e=(e,t=!1)=>{const{props:n,styles:o}=e;let r;if(n&&!k(n))for(const s in n){const e=n[s];(e===Number||e&&e.type===Number)&&(s in this._props&&(this._props[s]=J(this._props[s])),(r||(r=Object.create(null)))[$(s)]=!0)}this._numberProps=r,t&&this._resolveProps(e),this._applyStyles(o),this._update()},t=this._def.__asyncLoader;t?t().then((t=>e(t,!0))):e(this._def)}_resolveProps(e){const{props:t}=e,n=k(t)?t:Object.keys(t||{});for(const o of Object.keys(this))\"_\"!==o[0]&&n.includes(o)&&this._setProp(o,this[o],!0,!1);for(const o of n.map($))Object.defineProperty(this,o,{get(){return this._getProp(o)},set(e){this._setProp(o,e)}})}_setAttr(e){let t=this.getAttribute(e);const n=$(e);this._numberProps&&this._numberProps[n]&&(t=J(t)),this._setProp(n,t,!1)}_getProp(e){return this._props[e]}_setProp(e,t,n=!0,o=!0){t!==this._props[e]&&(this._props[e]=t,o&&this._instance&&this._update(),n&&(!0===t?this.setAttribute(H(e),\"\"):\"string\"==typeof t||\"number\"==typeof t?this.setAttribute(H(e),t+\"\"):t||this.removeAttribute(H(e))))}_update(){bi(this._createVNode(),this.shadowRoot)}_createVNode(){const e=Or(this._def,C({},this._props));return this._instance||(e.ce=e=>{this._instance=e,e.isCE=!0;const t=(e,t)=>{this.dispatchEvent(new CustomEvent(e,{detail:t}))};e.emit=(e,...n)=>{t(e,n),H(e)!==e&&t(H(e),n)};let n=this;for(;n=n&&(n.parentNode||n.host);)if(n instanceof ws){e.parent=n._instance,e.provides=n._instance.provides;break}}),e}_applyStyles(e){e&&e.forEach((e=>{const t=document.createElement(\"style\");t.textContent=e,this.shadowRoot.appendChild(t)}))}}function Ss(e,t){if(128&e.shapeFlag){const n=e.suspense;e=n.activeBranch,n.pendingBranch&&!n.isHydrating&&n.effects.push((()=>{Ss(n.activeBranch,t)}))}for(;e.component;)e=e.component.subTree;if(1&e.shapeFlag&&e.el)ks(e.el,t);else if(e.type===dr)e.children.forEach((e=>Ss(e,t)));else if(e.type===mr){let{el:n,anchor:o}=e;for(;n&&(ks(n,t),n!==o);)n=n.nextSibling}}function ks(e,t){if(1===e.nodeType){const n=e.style;for(const e in t)n.setProperty(`--${e}`,t[e])}}const Es=\"transition\",As=\"animation\",Ts=(e,{slots:t})=>os(Ln,Ms(e),t);Ts.displayName=\"Transition\";const Fs={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},Rs=Ts.props=C({},Ln.props,Fs),Os=(e,t=[])=>{k(e)?e.forEach((e=>e(...t))):e&&e(...t)},Ps=e=>!!e&&(k(e)?e.some((e=>e.length>1)):e.length>1);function Ms(e){const t={};for(const C in e)C in Fs||(t[C]=e[C]);if(!1===e.css)return t;const{name:n=\"v\",type:o,duration:r,enterFromClass:s=`${n}-enter-from`,enterActiveClass:i=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:c=s,appearActiveClass:a=i,appearToClass:u=l,leaveFromClass:f=`${n}-leave-from`,leaveActiveClass:p=`${n}-leave-active`,leaveToClass:d=`${n}-leave-to`}=e,h=function(e){if(null==e)return null;if(P(e))return[Ns(e.enter),Ns(e.leave)];{const t=Ns(e);return[t,t]}}(r),v=h&&h[0],m=h&&h[1],{onBeforeEnter:g,onEnter:_,onEnterCancelled:y,onLeave:b,onLeaveCancelled:x,onBeforeAppear:w=g,onAppear:S=_,onAppearCancelled:k=y}=t,E=(e,t,n)=>{Vs(e,t?u:l),Vs(e,t?a:i),n&&n()},A=(e,t)=>{e._isLeaving=!1,Vs(e,f),Vs(e,d),Vs(e,p),t&&t()},T=e=>(t,n)=>{const r=e?S:_,i=()=>E(t,e,n);Os(r,[t,i]),Bs((()=>{Vs(t,e?c:s),Ls(t,e?u:l),Ps(r)||js(t,o,v,i)}))};return C(t,{onBeforeEnter(e){Os(g,[e]),Ls(e,s),Ls(e,i)},onBeforeAppear(e){Os(w,[e]),Ls(e,c),Ls(e,a)},onEnter:T(!1),onAppear:T(!0),onLeave(e,t){e._isLeaving=!0;const n=()=>A(e,t);Ls(e,f),Hs(),Ls(e,p),Bs((()=>{e._isLeaving&&(Vs(e,f),Ls(e,d),Ps(b)||js(e,o,m,n))})),Os(b,[e,n])},onEnterCancelled(e){E(e,!1),Os(y,[e])},onAppearCancelled(e){E(e,!0),Os(k,[e])},onLeaveCancelled(e){A(e),Os(x,[e])}})}function Ns(e){return J(e)}function Ls(e,t){t.split(/\\s+/).forEach((t=>t&&e.classList.add(t))),(e._vtc||(e._vtc=new Set)).add(t)}function Vs(e,t){t.split(/\\s+/).forEach((t=>t&&e.classList.remove(t)));const{_vtc:n}=e;n&&(n.delete(t),n.size||(e._vtc=void 0))}function Bs(e){requestAnimationFrame((()=>{requestAnimationFrame(e)}))}let Is=0;function js(e,t,n,o){const r=e._endId=++Is,s=()=>{r===e._endId&&o()};if(n)return setTimeout(s,n);const{type:i,timeout:l,propCount:c}=Us(e,t);if(!i)return o();const a=i+\"end\";let u=0;const f=()=>{e.removeEventListener(a,p),s()},p=t=>{t.target===e&&++u>=c&&f()};setTimeout((()=>{u<c&&f()}),l+1),e.addEventListener(a,p)}function Us(e,t){const n=window.getComputedStyle(e),o=e=>(n[e]||\"\").split(\", \"),r=o(\"transitionDelay\"),s=o(\"transitionDuration\"),i=$s(r,s),l=o(\"animationDelay\"),c=o(\"animationDuration\"),a=$s(l,c);let u=null,f=0,p=0;t===Es?i>0&&(u=Es,f=i,p=s.length):t===As?a>0&&(u=As,f=a,p=c.length):(f=Math.max(i,a),u=f>0?i>a?Es:As:null,p=u?u===Es?s.length:c.length:0);return{type:u,timeout:f,propCount:p,hasTransform:u===Es&&/\\b(transform|all)(,|$)/.test(o(\"transitionProperty\").toString())}}function $s(e,t){for(;e.length<t.length;)e=e.concat(e);return Math.max(...t.map(((t,n)=>Ds(t)+Ds(e[n]))))}function Ds(e){return 1e3*Number(e.slice(0,-1).replace(\",\",\".\"))}function Hs(){return document.body.offsetHeight}const zs=new WeakMap,Ws=new WeakMap,Ks={name:\"TransitionGroup\",props:C({},Rs,{tag:String,moveClass:String}),setup(e,{slots:t}){const n=Hr(),o=Mn();let r,s;return so((()=>{if(!r.length)return;const t=e.moveClass||`${e.name||\"v\"}-move`;if(!function(e,t,n){const o=e.cloneNode();e._vtc&&e._vtc.forEach((e=>{e.split(/\\s+/).forEach((e=>e&&o.classList.remove(e)))}));n.split(/\\s+/).forEach((e=>e&&o.classList.add(e))),o.style.display=\"none\";const r=1===t.nodeType?t:t.parentNode;r.appendChild(o);const{hasTransform:s}=Us(o);return r.removeChild(o),s}(r[0].el,n.vnode.el,t))return;r.forEach(Gs),r.forEach(Ys);const o=r.filter(Js);Hs(),o.forEach((e=>{const n=e.el,o=n.style;Ls(n,t),o.transform=o.webkitTransform=o.transitionDuration=\"\";const r=n._moveCb=e=>{e&&e.target!==n||e&&!/transform$/.test(e.propertyName)||(n.removeEventListener(\"transitionend\",r),n._moveCb=null,Vs(n,t))};n.addEventListener(\"transitionend\",r)}))})),()=>{const i=_t(e),l=Ms(i);let c=i.tag||dr;r=s,s=t.default?$n(t.default()):[];for(let e=0;e<s.length;e++){const t=s[e];null!=t.key&&Un(t,Bn(t,l,o,n))}if(r)for(let e=0;e<r.length;e++){const t=r[e];Un(t,Bn(t,l,o,n)),zs.set(t,t.el.getBoundingClientRect())}return Or(c,null,s)}}},qs=Ks;function Gs(e){const t=e.el;t._moveCb&&t._moveCb(),t._enterCb&&t._enterCb()}function Ys(e){Ws.set(e,e.el.getBoundingClientRect())}function Js(e){const t=zs.get(e),n=Ws.get(e),o=t.left-n.left,r=t.top-n.top;if(o||r){const t=e.el.style;return t.transform=t.webkitTransform=`translate(${o}px,${r}px)`,t.transitionDuration=\"0s\",e}}const Xs=e=>{const t=e.props[\"onUpdate:modelValue\"]||!1;return k(t)?e=>q(t,e):t};function Zs(e){e.target.composing=!0}function Qs(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event(\"input\")))}const ei={created(e,{modifiers:{lazy:t,trim:n,number:o}},r){e._assign=Xs(r);const s=o||r.props&&\"number\"===r.props.type;vs(e,t?\"change\":\"input\",(t=>{if(t.target.composing)return;let o=e.value;n&&(o=o.trim()),s&&(o=Y(o)),e._assign(o)})),n&&vs(e,\"change\",(()=>{e.value=e.value.trim()})),t||(vs(e,\"compositionstart\",Zs),vs(e,\"compositionend\",Qs),vs(e,\"change\",Qs))},mounted(e,{value:t}){e.value=null==t?\"\":t},beforeUpdate(e,{value:t,modifiers:{lazy:n,trim:o,number:r}},s){if(e._assign=Xs(s),e.composing)return;if(document.activeElement===e&&\"range\"!==e.type){if(n)return;if(o&&e.value.trim()===t)return;if((r||\"number\"===e.type)&&Y(e.value)===t)return}const i=null==t?\"\":t;e.value!==i&&(e.value=i)}},ti={deep:!0,created(e,t,n){e._assign=Xs(n),vs(e,\"change\",(()=>{const t=e._modelValue,n=ii(e),o=e.checked,r=e._assign;if(k(t)){const e=p(t,n),s=-1!==e;if(o&&!s)r(t.concat(n));else if(!o&&s){const n=[...t];n.splice(e,1),r(n)}}else if(A(t)){const e=new Set(t);o?e.add(n):e.delete(n),r(e)}else r(li(e,o))}))},mounted:ni,beforeUpdate(e,t,n){e._assign=Xs(n),ni(e,t,n)}};function ni(e,{value:t,oldValue:n},o){e._modelValue=t,k(t)?e.checked=p(t,o.props.value)>-1:A(t)?e.checked=t.has(o.props.value):t!==n&&(e.checked=f(t,li(e,!0)))}const oi={created(e,{value:t},n){e.checked=f(t,n.props.value),e._assign=Xs(n),vs(e,\"change\",(()=>{e._assign(ii(e))}))},beforeUpdate(e,{value:t,oldValue:n},o){e._assign=Xs(o),t!==n&&(e.checked=f(t,o.props.value))}},ri={deep:!0,created(e,{value:t,modifiers:{number:n}},o){const r=A(t);vs(e,\"change\",(()=>{const t=Array.prototype.filter.call(e.options,(e=>e.selected)).map((e=>n?Y(ii(e)):ii(e)));e._assign(e.multiple?r?new Set(t):t:t[0])})),e._assign=Xs(o)},mounted(e,{value:t}){si(e,t)},beforeUpdate(e,t,n){e._assign=Xs(n)},updated(e,{value:t}){si(e,t)}};function si(e,t){const n=e.multiple;if(!n||k(t)||A(t)){for(let o=0,r=e.options.length;o<r;o++){const r=e.options[o],s=ii(r);if(n)r.selected=k(t)?p(t,s)>-1:t.has(s);else if(f(ii(r),t))return void(e.selectedIndex!==o&&(e.selectedIndex=o))}n||-1===e.selectedIndex||(e.selectedIndex=-1)}}function ii(e){return\"_value\"in e?e._value:e.value}function li(e,t){const n=t?\"_trueValue\":\"_falseValue\";return n in e?e[n]:t}const ci={created(e,t,n){ai(e,t,n,null,\"created\")},mounted(e,t,n){ai(e,t,n,null,\"mounted\")},beforeUpdate(e,t,n,o){ai(e,t,n,o,\"beforeUpdate\")},updated(e,t,n,o){ai(e,t,n,o,\"updated\")}};function ai(e,t,n,o,r){const s=function(e,t){switch(e){case\"SELECT\":return ri;case\"TEXTAREA\":return ei;default:switch(t){case\"checkbox\":return ti;case\"radio\":return oi;default:return ei}}}(e.tagName,n.props&&n.props.type)[r];s&&s(e,t,n,o)}const ui=[\"ctrl\",\"shift\",\"alt\",\"meta\"],fi={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>\"button\"in e&&0!==e.button,middle:e=>\"button\"in e&&1!==e.button,right:e=>\"button\"in e&&2!==e.button,exact:(e,t)=>ui.some((n=>e[`${n}Key`]&&!t.includes(n)))},pi={esc:\"escape\",space:\" \",up:\"arrow-up\",left:\"arrow-left\",right:\"arrow-right\",down:\"arrow-down\",delete:\"backspace\"},di={beforeMount(e,{value:t},{transition:n}){e._vod=\"none\"===e.style.display?\"\":e.style.display,n&&t?n.beforeEnter(e):hi(e,t)},mounted(e,{value:t},{transition:n}){n&&t&&n.enter(e)},updated(e,{value:t,oldValue:n},{transition:o}){!t!=!n&&(o?t?(o.beforeEnter(e),hi(e,!0),o.enter(e)):o.leave(e,(()=>{hi(e,!1)})):hi(e,t))},beforeUnmount(e,{value:t}){hi(e,t)}};function hi(e,t){e.style.display=t?e._vod:\"none\"}const vi=C({patchProp:(e,t,n,o,r=!1,s,i,l,c)=>{\"class\"===t?function(e,t,n){const o=e._vtc;o&&(t=(t?[t,...o]:[...o]).join(\" \")),null==t?e.removeAttribute(\"class\"):n?e.setAttribute(\"class\",t):e.className=t}(e,o,r):\"style\"===t?function(e,t,n){const o=e.style,r=R(n);if(n&&!r){if(t&&!R(t))for(const e in t)null==n[e]&&fs(o,e,\"\");for(const e in n)fs(o,e,n[e])}else{const s=o.display;r?t!==n&&(o.cssText=n):t&&e.removeAttribute(\"style\"),\"_vod\"in e&&(o.display=s)}}(e,n,o):y(t)?b(t)||ms(e,t,0,o,i):(\".\"===t[0]?(t=t.slice(1),1):\"^\"===t[0]?(t=t.slice(1),0):function(e,t,n,o){if(o)return\"innerHTML\"===t||\"textContent\"===t||!!(t in e&&bs.test(t)&&F(n));if(\"spellcheck\"===t||\"draggable\"===t||\"translate\"===t)return!1;if(\"form\"===t)return!1;if(\"list\"===t&&\"INPUT\"===e.tagName)return!1;if(\"type\"===t&&\"TEXTAREA\"===e.tagName)return!1;if(bs.test(t)&&R(n))return!1;return t in e}(e,t,o,r))?function(e,t,n,o,r,s,i){if(\"innerHTML\"===t||\"textContent\"===t)return o&&i(o,r,s),void(e[t]=null==n?\"\":n);if(\"value\"===t&&\"PROGRESS\"!==e.tagName&&!e.tagName.includes(\"-\")){e._value=n;const o=null==n?\"\":n;return e.value===o&&\"OPTION\"!==e.tagName||(e.value=o),void(null==n&&e.removeAttribute(t))}let l=!1;if(\"\"===n||null==n){const o=typeof e[t];\"boolean\"===o?n=u(n):null==n&&\"string\"===o?(n=\"\",l=!0):\"number\"===o&&(n=0,l=!0)}try{e[t]=n}catch(c){}l&&e.removeAttribute(t)}(e,t,o,s,i,l,c):(\"true-value\"===t?e._trueValue=o:\"false-value\"===t&&(e._falseValue=o),function(e,t,n,o,r){if(o&&t.startsWith(\"xlink:\"))null==n?e.removeAttributeNS(hs,t.slice(6,t.length)):e.setAttributeNS(hs,t,n);else{const o=a(t);null==n||o&&!u(n)?e.removeAttribute(t):e.setAttribute(t,o?\"\":n)}}(e,t,o,r))}},as);let mi,gi=!1;function _i(){return mi||(mi=nr(vi))}function yi(){return mi=gi?mi:or(vi),gi=!0,mi}const bi=(...e)=>{_i().render(...e)},Ci=(...e)=>{yi().hydrate(...e)};function xi(e){if(R(e)){return document.querySelector(e)}return e}const wi=m;return e.BaseTransition=Ln,e.Comment=vr,e.EffectScope=Q,e.Fragment=dr,e.KeepAlive=Kn,e.ReactiveEffect=fe,e.Static=mr,e.Suspense=_n,e.Teleport=fr,e.Text=hr,e.Transition=Ts,e.TransitionGroup=qs,e.VueElement=ws,e.assertNumber=function(e,t){},e.callWithAsyncErrorHandling=Bt,e.callWithErrorHandling=Vt,e.camelize=$,e.capitalize=z,e.cloneVNode=Mr,e.compatUtils=null,e.computed=ts,e.createApp=(...e)=>{const t=_i().createApp(...e),{mount:n}=t;return t.mount=e=>{const o=xi(e);if(!o)return;const r=t._component;F(r)||r.render||r.template||(r.template=o.innerHTML),o.innerHTML=\"\";const s=n(o,!1,o instanceof SVGElement);return o instanceof Element&&(o.removeAttribute(\"v-cloak\"),o.setAttribute(\"data-v-app\",\"\")),s},t},e.createBlock=Sr,e.createCommentVNode=function(e=\"\",t=!1){return t?(yr(),Sr(vr,null,e)):Or(vr,null,e)},e.createElementBlock=function(e,t,n,o,r,s){return wr(Rr(e,t,n,o,r,s,!0))},e.createElementVNode=Rr,e.createHydrationRenderer=or,e.createPropsRestProxy=function(e,t){const n={};for(const o in e)t.includes(o)||Object.defineProperty(n,o,{enumerable:!0,get:()=>e[o]});return n},e.createRenderer=nr,e.createSSRApp=(...e)=>{const t=yi().createApp(...e),{mount:n}=t;return t.mount=e=>{const t=xi(e);if(t)return n(t,!0,t instanceof SVGElement)},t},e.createSlots=function(e,t){for(let n=0;n<t.length;n++){const o=t[n];if(k(o))for(let t=0;t<o.length;t++)e[o[t].name]=o[t].fn;else o&&(e[o.name]=o.key?(...e)=>{const t=o.fn(...e);return t&&(t.key=o.key),t}:o.fn)}return e},e.createStaticVNode=function(e,t){const n=Or(mr,null,e);return n.staticCount=t,n},e.createTextVNode=Nr,e.createVNode=Or,e.customRef=function(e){return new Ot(e)},e.defineAsyncComponent=function(e){F(e)&&(e={loader:e});const{loader:t,loadingComponent:n,errorComponent:o,delay:r=200,timeout:s,suspensible:i=!0,onError:l}=e;let c,a=null,u=0;const f=()=>{let e;return a||(e=a=t().catch((e=>{if(e=e instanceof Error?e:new Error(String(e)),l)return new Promise(((t,n)=>{l(e,(()=>t((u++,a=null,f()))),(()=>n(e)),u+1)}));throw e})).then((t=>e!==a&&a?a:(t&&(t.__esModule||\"Module\"===t[Symbol.toStringTag])&&(t=t.default),c=t,t))))};return Dn({name:\"AsyncComponentWrapper\",__asyncLoader:f,get __asyncResolved(){return c},setup(){const e=Dr;if(c)return()=>zn(c,e);const t=t=>{a=null,It(t,e,13,!o)};if(i&&e.suspense)return f().then((t=>()=>zn(t,e))).catch((e=>(t(e),()=>o?Or(o,{error:e}):null)));const l=kt(!1),u=kt(),p=kt(!!r);return r&&setTimeout((()=>{p.value=!1}),r),null!=s&&setTimeout((()=>{if(!l.value&&!u.value){const e=new Error(`Async component timed out after ${s}ms.`);t(e),u.value=e}}),s),f().then((()=>{l.value=!0,e.parent&&Wn(e.parent.vnode)&&Yt(e.parent.update)})).catch((e=>{t(e),u.value=e})),()=>l.value&&c?zn(c,e):u.value&&o?Or(o,{error:u.value}):n&&!p.value?Or(n):void 0}})},e.defineComponent=Dn,e.defineCustomElement=Cs,e.defineEmits=function(){return null},e.defineExpose=function(e){},e.defineProps=function(){return null},e.defineSSRCustomElement=e=>Cs(e,Ci),e.effect=function(e,t){e.effect&&(e=e.effect.fn);const n=new fe(e);t&&(C(n,t),t.scope&&ee(n,t.scope)),t&&t.lazy||n.run();const o=n.run.bind(n);return o.effect=n,o},e.effectScope=function(e){return new Q(e)},e.getCurrentInstance=Hr,e.getCurrentScope=te,e.getTransitionRawChildren=$n,e.guardReactiveProps=Pr,e.h=os,e.handleError=It,e.hydrate=Ci,e.initCustomFormatter=function(){},e.initDirectivesForSSR=wi,e.inject=kn,e.isMemoSame=ss,e.isProxy=gt,e.isReactive=ht,e.isReadonly=vt,e.isRef=St,e.isRuntimeOnly=()=>!qr,e.isShallow=mt,e.isVNode=kr,e.markRaw=yt,e.mergeDefaults=function(e,t){const n=k(e)?e.reduce(((e,t)=>(e[t]={},e)),{}):e;for(const o in t){const e=n[o];e?k(e)||F(e)?n[o]={type:e,default:t[o]}:e.default=t[o]:null===e&&(n[o]={default:t[o]})}return n},e.mergeProps=Ir,e.nextTick=Gt,e.normalizeClass=c,e.normalizeProps=function(e){if(!e)return null;let{class:t,style:n}=e;return t&&!R(t)&&(e.class=c(t)),n&&(e.style=o(n)),e},e.normalizeStyle=o,e.onActivated=Gn,e.onBeforeMount=no,e.onBeforeUnmount=io,e.onBeforeUpdate=ro,e.onDeactivated=Yn,e.onErrorCaptured=fo,e.onMounted=oo,e.onRenderTracked=uo,e.onRenderTriggered=ao,e.onScopeDispose=function(e){Z&&Z.cleanups.push(e)},e.onServerPrefetch=co,e.onUnmounted=lo,e.onUpdated=so,e.openBlock=yr,e.popScopeId=function(){an=null},e.provide=Sn,e.proxyRefs=Rt,e.pushScopeId=function(e){an=e},e.queuePostFlushCb=Xt,e.reactive=ut,e.readonly=pt,e.ref=kt,e.registerRuntimeCompiler=function(e){qr=e,Gr=e=>{e.render._rc&&(e.withProxy=new Proxy(e.ctx,wo))}},e.render=bi,e.renderList=function(e,t,n,o){let r;const s=n&&n[o];if(k(e)||R(e)){r=new Array(e.length);for(let n=0,o=e.length;n<o;n++)r[n]=t(e[n],n,void 0,s&&s[n])}else if(\"number\"==typeof e){r=new Array(e);for(let n=0;n<e;n++)r[n]=t(n+1,n,void 0,s&&s[n])}else if(P(e))if(e[Symbol.iterator])r=Array.from(e,((e,n)=>t(e,n,void 0,s&&s[n])));else{const n=Object.keys(e);r=new Array(n.length);for(let o=0,i=n.length;o<i;o++){const i=n[o];r[o]=t(e[i],i,o,s&&s[o])}}else r=[];return n&&(n[o]=r),r},e.renderSlot=function(e,t,n={},o,r){if(cn.isCE||cn.parent&&Hn(cn.parent)&&cn.parent.isCE)return\"default\"!==t&&(n.name=t),Or(\"slot\",n,o&&o());let s=e[t];s&&s._c&&(s._d=!1),yr();const i=s&&_o(s(n)),l=Sr(dr,{key:n.key||i&&i.key||`_${t}`},i||(o?o():[]),i&&1===e._?64:-2);return!r&&l.scopeId&&(l.slotScopeIds=[l.scopeId+\"-s\"]),s&&s._c&&(s._d=!0),l},e.resolveComponent=function(e,t){return mo(ho,e,!0,t)||e},e.resolveDirective=function(e){return mo(\"directives\",e)},e.resolveDynamicComponent=function(e){return R(e)?mo(ho,e,!1)||e:e||vo},e.resolveFilter=null,e.resolveTransitionHooks=Bn,e.setBlockTracking=xr,e.setDevtoolsHook=function t(n,o){var r,s;if(e.devtools=n,e.devtools)e.devtools.enabled=!0,on.forEach((({event:t,args:n})=>e.devtools.emit(t,...n))),on=[];else if(\"undefined\"!=typeof window&&window.HTMLElement&&!(null===(s=null===(r=window.navigator)||void 0===r?void 0:r.userAgent)||void 0===s?void 0:s.includes(\"jsdom\"))){(o.__VUE_DEVTOOLS_HOOK_REPLAY__=o.__VUE_DEVTOOLS_HOOK_REPLAY__||[]).push((e=>{t(e,o)})),setTimeout((()=>{e.devtools||(o.__VUE_DEVTOOLS_HOOK_REPLAY__=null,on=[])}),3e3)}else on=[]},e.setTransitionHooks=Un,e.shallowReactive=ft,e.shallowReadonly=function(e){return dt(e,!0,Ve,rt,ct)},e.shallowRef=function(e){return Et(e,!0)},e.ssrContextKey=rs,e.ssrUtils=null,e.stop=function(e){e.effect.stop()},e.toDisplayString=e=>R(e)?e:null==e?\"\":k(e)||P(e)&&(e.toString===N||!F(e.toString))?JSON.stringify(e,d,2):String(e),e.toHandlerKey=W,e.toHandlers=function(e,t){const n={};for(const o in e)n[t&&/[A-Z]/.test(o)?`on:${o}`:W(o)]=e[o];return n},e.toRaw=_t,e.toRef=Mt,e.toRefs=function(e){const t=k(e)?new Array(e.length):{};for(const n in e)t[n]=Mt(e,n);return t},e.transformVNodeArgs=function(e){},e.triggerRef=function(e){wt(e)},e.unref=Tt,e.useAttrs=function(){return ns().attrs},e.useCssModule=function(e=\"$style\"){return h},e.useCssVars=function(e){const t=Hr();if(!t)return;const n=t.ut=(n=e(t.proxy))=>{Array.from(document.querySelectorAll(`[data-v-owner=\"${t.uid}\"]`)).forEach((e=>ks(e,n)))},o=()=>{const o=e(t.proxy);Ss(t.subTree,o),n(o)};En(o),oo((()=>{const e=new MutationObserver(o);e.observe(t.subTree.el.parentNode,{childList:!0}),lo((()=>e.disconnect()))}))},e.useSSRContext=()=>{},e.useSlots=function(){return ns().slots},e.useTransitionState=Mn,e.vModelCheckbox=ti,e.vModelDynamic=ci,e.vModelRadio=oi,e.vModelSelect=ri,e.vModelText=ei,e.vShow=di,e.version=is,e.warn=function(e,...t){},e.watch=Tn,e.watchEffect=function(e,t){return Fn(e,null,t)},e.watchPostEffect=En,e.watchSyncEffect=function(e,t){return Fn(e,null,{flush:\"sync\"})},e.withAsyncContext=function(e){const t=Hr();let n=e();return Wr(),M(n)&&(n=n.catch((e=>{throw zr(t),e}))),[n,()=>zr(t)]},e.withCtx=fn,e.withDefaults=function(e,t){return null},e.withDirectives=function(e,t){const n=cn;if(null===n)return e;const o=Qr(n)||n.proxy,r=e.dirs||(e.dirs=[]);for(let s=0;s<t.length;s++){let[e,n,i,l=h]=t[s];e&&(F(e)&&(e={mounted:e,updated:e}),e.deep&&Pn(n),r.push({dir:e,instance:o,value:n,oldValue:void 0,arg:i,modifiers:l}))}return e},e.withKeys=(e,t)=>n=>{if(!(\"key\"in n))return;const o=H(n.key);return t.some((e=>e===o||pi[e]===o))?e(n):void 0},e.withMemo=function(e,t,n,o){const r=n[o];if(r&&ss(r,e))return r;const s=t();return s.memo=e.slice(),n[o]=s},e.withModifiers=(e,t)=>(n,...o)=>{for(let e=0;e<t.length;e++){const o=fi[t[e]];if(o&&o(n,t))return}return e(n,...o)},e.withScopeId=e=>fn,Object.defineProperty(e,\"__esModule\",{value:!0}),e}({});\n%/dist/runtime-dom.esm-browser.prod.js\u0000\u0001J@function e(e,t){const n=Object.create(null),o=e.split(\",\");for(let r=0;r<o.length;r++)n[o[r]]=!0;return t?e=>!!n[e.toLowerCase()]:e=>!!n[e]}const t=e(\"Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt\");function n(e){if(E(e)){const t={};for(let o=0;o<e.length;o++){const r=e[o],s=P(r)?i(r):n(r);if(s)for(const e in s)t[e]=s[e]}return t}return P(e)||N(e)?e:void 0}const o=/;(?![^(]*\\))/g,r=/:([^]+)/,s=/\\/\\*.*?\\*\\//gs;function i(e){const t={};return e.replace(s,\"\").split(o).forEach((e=>{if(e){const n=e.split(r);n.length>1&&(t[n[0].trim()]=n[1].trim())}})),t}function l(e){let t=\"\";if(P(e))t=e;else if(E(e))for(let n=0;n<e.length;n++){const o=l(e[n]);o&&(t+=o+\" \")}else if(N(e))for(const n in e)e[n]&&(t+=n+\" \");return t.trim()}function c(e){if(!e)return null;let{class:t,style:o}=e;return t&&!P(t)&&(e.class=l(t)),o&&(e.style=n(o)),e}const a=e(\"itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly\");function u(e){return!!e||\"\"===e}function f(e,t){if(e===t)return!0;let n=T(e),o=T(t);if(n||o)return!(!n||!o)&&e.getTime()===t.getTime();if(n=L(e),o=L(t),n||o)return e===t;if(n=E(e),o=E(t),n||o)return!(!n||!o)&&function(e,t){if(e.length!==t.length)return!1;let n=!0;for(let o=0;n&&o<e.length;o++)n=f(e[o],t[o]);return n}(e,t);if(n=N(e),o=N(t),n||o){if(!n||!o)return!1;if(Object.keys(e).length!==Object.keys(t).length)return!1;for(const n in e){const o=e.hasOwnProperty(n),r=t.hasOwnProperty(n);if(o&&!r||!o&&r||!f(e[n],t[n]))return!1}}return String(e)===String(t)}function p(e,t){return e.findIndex((e=>f(e,t)))}const d=e=>P(e)?e:null==e?\"\":E(e)||N(e)&&(e.toString===I||!O(e.toString))?JSON.stringify(e,h,2):String(e),h=(e,t)=>t&&t.__v_isRef?h(e,t.value):A(t)?{[`Map(${t.size})`]:[...t.entries()].reduce(((e,[t,n])=>(e[`${t} =>`]=n,e)),{})}:F(t)?{[`Set(${t.size})`]:[...t.values()]}:!N(t)||E(t)||B(t)?t:String(t),v={},g=[],m=()=>{},_=()=>!1,y=/^on[^a-z]/,b=e=>y.test(e),C=e=>e.startsWith(\"onUpdate:\"),x=Object.assign,w=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},S=Object.prototype.hasOwnProperty,k=(e,t)=>S.call(e,t),E=Array.isArray,A=e=>\"[object Map]\"===M(e),F=e=>\"[object Set]\"===M(e),T=e=>\"[object Date]\"===M(e),O=e=>\"function\"==typeof e,P=e=>\"string\"==typeof e,L=e=>\"symbol\"==typeof e,N=e=>null!==e&&\"object\"==typeof e,R=e=>N(e)&&O(e.then)&&O(e.catch),I=Object.prototype.toString,M=e=>I.call(e),B=e=>\"[object Object]\"===M(e),V=e=>P(e)&&\"NaN\"!==e&&\"-\"!==e[0]&&\"\"+parseInt(e,10)===e,j=e(\",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted\"),U=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},$=/-(\\w)/g,D=U((e=>e.replace($,((e,t)=>t?t.toUpperCase():\"\")))),H=/\\B([A-Z])/g,W=U((e=>e.replace(H,\"-$1\").toLowerCase())),z=U((e=>e.charAt(0).toUpperCase()+e.slice(1))),K=U((e=>e?`on${z(e)}`:\"\")),q=(e,t)=>!Object.is(e,t),G=(e,t)=>{for(let n=0;n<e.length;n++)e[n](t)},Y=(e,t,n)=>{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value:n})},J=e=>{const t=parseFloat(e);return isNaN(t)?e:t},X=e=>{const t=P(e)?Number(e):NaN;return isNaN(t)?e:t};let Z;let Q;class ee{constructor(e=!1){this.detached=e,this._active=!0,this.effects=[],this.cleanups=[],this.parent=Q,!e&&Q&&(this.index=(Q.scopes||(Q.scopes=[])).push(this)-1)}get active(){return this._active}run(e){if(this._active){const t=Q;try{return Q=this,e()}finally{Q=t}}}on(){Q=this}off(){Q=this.parent}stop(e){if(this._active){let t,n;for(t=0,n=this.effects.length;t<n;t++)this.effects[t].stop();for(t=0,n=this.cleanups.length;t<n;t++)this.cleanups[t]();if(this.scopes)for(t=0,n=this.scopes.length;t<n;t++)this.scopes[t].stop(!0);if(!this.detached&&this.parent&&!e){const e=this.parent.scopes.pop();e&&e!==this&&(this.parent.scopes[this.index]=e,e.index=this.index)}this.parent=void 0,this._active=!1}}}function te(e){return new ee(e)}function ne(e,t=Q){t&&t.active&&t.effects.push(e)}function oe(){return Q}function re(e){Q&&Q.cleanups.push(e)}const se=e=>{const t=new Set(e);return t.w=0,t.n=0,t},ie=e=>(e.w&ue)>0,le=e=>(e.n&ue)>0,ce=new WeakMap;let ae=0,ue=1;let fe;const pe=Symbol(\"\"),de=Symbol(\"\");class he{constructor(e,t=null,n){this.fn=e,this.scheduler=t,this.active=!0,this.deps=[],this.parent=void 0,ne(this,n)}run(){if(!this.active)return this.fn();let e=fe,t=_e;for(;e;){if(e===this)return;e=e.parent}try{return this.parent=fe,fe=this,_e=!0,ue=1<<++ae,ae<=30?(({deps:e})=>{if(e.length)for(let t=0;t<e.length;t++)e[t].w|=ue})(this):ve(this),this.fn()}finally{ae<=30&&(e=>{const{deps:t}=e;if(t.length){let n=0;for(let o=0;o<t.length;o++){const r=t[o];ie(r)&&!le(r)?r.delete(e):t[n++]=r,r.w&=~ue,r.n&=~ue}t.length=n}})(this),ue=1<<--ae,fe=this.parent,_e=t,this.parent=void 0,this.deferStop&&this.stop()}}stop(){fe===this?this.deferStop=!0:this.active&&(ve(this),this.onStop&&this.onStop(),this.active=!1)}}function ve(e){const{deps:t}=e;if(t.length){for(let n=0;n<t.length;n++)t[n].delete(e);t.length=0}}function ge(e,t){e.effect&&(e=e.effect.fn);const n=new he(e);t&&(x(n,t),t.scope&&ne(n,t.scope)),t&&t.lazy||n.run();const o=n.run.bind(n);return o.effect=n,o}function me(e){e.effect.stop()}let _e=!0;const ye=[];function be(){ye.push(_e),_e=!1}function Ce(){const e=ye.pop();_e=void 0===e||e}function xe(e,t,n){if(_e&&fe){let t=ce.get(e);t||ce.set(e,t=new Map);let o=t.get(n);o||t.set(n,o=se()),we(o)}}function we(e,t){let n=!1;ae<=30?le(e)||(e.n|=ue,n=!ie(e)):n=!e.has(fe),n&&(e.add(fe),fe.deps.push(e))}function Se(e,t,n,o,r,s){const i=ce.get(e);if(!i)return;let l=[];if(\"clear\"===t)l=[...i.values()];else if(\"length\"===n&&E(e)){const e=Number(o);i.forEach(((t,n)=>{(\"length\"===n||n>=e)&&l.push(t)}))}else switch(void 0!==n&&l.push(i.get(n)),t){case\"add\":E(e)?V(n)&&l.push(i.get(\"length\")):(l.push(i.get(pe)),A(e)&&l.push(i.get(de)));break;case\"delete\":E(e)||(l.push(i.get(pe)),A(e)&&l.push(i.get(de)));break;case\"set\":A(e)&&l.push(i.get(pe))}if(1===l.length)l[0]&&ke(l[0]);else{const e=[];for(const t of l)t&&e.push(...t);ke(se(e))}}function ke(e,t){const n=E(e)?e:[...e];for(const o of n)o.computed&&Ee(o);for(const o of n)o.computed||Ee(o)}function Ee(e,t){(e!==fe||e.allowRecurse)&&(e.scheduler?e.scheduler():e.run())}const Ae=e(\"__proto__,__v_isRef,__isVue\"),Fe=new Set(Object.getOwnPropertyNames(Symbol).filter((e=>\"arguments\"!==e&&\"caller\"!==e)).map((e=>Symbol[e])).filter(L)),Te=Me(),Oe=Me(!1,!0),Pe=Me(!0),Le=Me(!0,!0),Ne=Re();function Re(){const e={};return[\"includes\",\"indexOf\",\"lastIndexOf\"].forEach((t=>{e[t]=function(...e){const n=St(this);for(let t=0,r=this.length;t<r;t++)xe(n,0,t+\"\");const o=n[t](...e);return-1===o||!1===o?n[t](...e.map(St)):o}})),[\"push\",\"pop\",\"shift\",\"unshift\",\"splice\"].forEach((t=>{e[t]=function(...e){be();const n=St(this)[t].apply(this,e);return Ce(),n}})),e}function Ie(e){const t=St(this);return xe(t,0,e),t.hasOwnProperty(e)}function Me(e=!1,t=!1){return function(n,o,r){if(\"__v_isReactive\"===o)return!e;if(\"__v_isReadonly\"===o)return e;if(\"__v_isShallow\"===o)return t;if(\"__v_raw\"===o&&r===(e?t?dt:pt:t?ft:ut).get(n))return n;const s=E(n);if(!e){if(s&&k(Ne,o))return Reflect.get(Ne,o,r);if(\"hasOwnProperty\"===o)return Ie}const i=Reflect.get(n,o,r);return(L(o)?Fe.has(o):Ae(o))?i:(e||xe(n,0,o),t?i:Ot(i)?s&&V(o)?i:i.value:N(i)?e?mt(i):vt(i):i)}}function Be(e=!1){return function(t,n,o,r){let s=t[n];if(Ct(s)&&Ot(s)&&!Ot(o))return!1;if(!e&&(xt(o)||Ct(o)||(s=St(s),o=St(o)),!E(t)&&Ot(s)&&!Ot(o)))return s.value=o,!0;const i=E(t)&&V(n)?Number(n)<t.length:k(t,n),l=Reflect.set(t,n,o,r);return t===St(r)&&(i?q(o,s)&&Se(t,\"set\",n,o):Se(t,\"add\",n,o)),l}}const Ve={get:Te,set:Be(),deleteProperty:function(e,t){const n=k(e,t),o=Reflect.deleteProperty(e,t);return o&&n&&Se(e,\"delete\",t,void 0),o},has:function(e,t){const n=Reflect.has(e,t);return L(t)&&Fe.has(t)||xe(e,0,t),n},ownKeys:function(e){return xe(e,0,E(e)?\"length\":pe),Reflect.ownKeys(e)}},je={get:Pe,set:(e,t)=>!0,deleteProperty:(e,t)=>!0},Ue=x({},Ve,{get:Oe,set:Be(!0)}),$e=x({},je,{get:Le}),De=e=>e,He=e=>Reflect.getPrototypeOf(e);function We(e,t,n=!1,o=!1){const r=St(e=e.__v_raw),s=St(t);n||(t!==s&&xe(r,0,t),xe(r,0,s));const{has:i}=He(r),l=o?De:n?At:Et;return i.call(r,t)?l(e.get(t)):i.call(r,s)?l(e.get(s)):void(e!==r&&e.get(t))}function ze(e,t=!1){const n=this.__v_raw,o=St(n),r=St(e);return t||(e!==r&&xe(o,0,e),xe(o,0,r)),e===r?n.has(e):n.has(e)||n.has(r)}function Ke(e,t=!1){return e=e.__v_raw,!t&&xe(St(e),0,pe),Reflect.get(e,\"size\",e)}function qe(e){e=St(e);const t=St(this);return He(t).has.call(t,e)||(t.add(e),Se(t,\"add\",e,e)),this}function Ge(e,t){t=St(t);const n=St(this),{has:o,get:r}=He(n);let s=o.call(n,e);s||(e=St(e),s=o.call(n,e));const i=r.call(n,e);return n.set(e,t),s?q(t,i)&&Se(n,\"set\",e,t):Se(n,\"add\",e,t),this}function Ye(e){const t=St(this),{has:n,get:o}=He(t);let r=n.call(t,e);r||(e=St(e),r=n.call(t,e)),o&&o.call(t,e);const s=t.delete(e);return r&&Se(t,\"delete\",e,void 0),s}function Je(){const e=St(this),t=0!==e.size,n=e.clear();return t&&Se(e,\"clear\",void 0,void 0),n}function Xe(e,t){return function(n,o){const r=this,s=r.__v_raw,i=St(s),l=t?De:e?At:Et;return!e&&xe(i,0,pe),s.forEach(((e,t)=>n.call(o,l(e),l(t),r)))}}function Ze(e,t,n){return function(...o){const r=this.__v_raw,s=St(r),i=A(s),l=\"entries\"===e||e===Symbol.iterator&&i,c=\"keys\"===e&&i,a=r[e](...o),u=n?De:t?At:Et;return!t&&xe(s,0,c?de:pe),{next(){const{value:e,done:t}=a.next();return t?{value:e,done:t}:{value:l?[u(e[0]),u(e[1])]:u(e),done:t}},[Symbol.iterator](){return this}}}}function Qe(e){return function(...t){return\"delete\"!==e&&this}}function et(){const e={get(e){return We(this,e)},get size(){return Ke(this)},has:ze,add:qe,set:Ge,delete:Ye,clear:Je,forEach:Xe(!1,!1)},t={get(e){return We(this,e,!1,!0)},get size(){return Ke(this)},has:ze,add:qe,set:Ge,delete:Ye,clear:Je,forEach:Xe(!1,!0)},n={get(e){return We(this,e,!0)},get size(){return Ke(this,!0)},has(e){return ze.call(this,e,!0)},add:Qe(\"add\"),set:Qe(\"set\"),delete:Qe(\"delete\"),clear:Qe(\"clear\"),forEach:Xe(!0,!1)},o={get(e){return We(this,e,!0,!0)},get size(){return Ke(this,!0)},has(e){return ze.call(this,e,!0)},add:Qe(\"add\"),set:Qe(\"set\"),delete:Qe(\"delete\"),clear:Qe(\"clear\"),forEach:Xe(!0,!0)};return[\"keys\",\"values\",\"entries\",Symbol.iterator].forEach((r=>{e[r]=Ze(r,!1,!1),n[r]=Ze(r,!0,!1),t[r]=Ze(r,!1,!0),o[r]=Ze(r,!0,!0)})),[e,n,t,o]}const[tt,nt,ot,rt]=et();function st(e,t){const n=t?e?rt:ot:e?nt:tt;return(t,o,r)=>\"__v_isReactive\"===o?!e:\"__v_isReadonly\"===o?e:\"__v_raw\"===o?t:Reflect.get(k(n,o)&&o in t?n:t,o,r)}const it={get:st(!1,!1)},lt={get:st(!1,!0)},ct={get:st(!0,!1)},at={get:st(!0,!0)},ut=new WeakMap,ft=new WeakMap,pt=new WeakMap,dt=new WeakMap;function ht(e){return e.__v_skip||!Object.isExtensible(e)?0:function(e){switch(e){case\"Object\":case\"Array\":return 1;case\"Map\":case\"Set\":case\"WeakMap\":case\"WeakSet\":return 2;default:return 0}}((e=>M(e).slice(8,-1))(e))}function vt(e){return Ct(e)?e:yt(e,!1,Ve,it,ut)}function gt(e){return yt(e,!1,Ue,lt,ft)}function mt(e){return yt(e,!0,je,ct,pt)}function _t(e){return yt(e,!0,$e,at,dt)}function yt(e,t,n,o,r){if(!N(e))return e;if(e.__v_raw&&(!t||!e.__v_isReactive))return e;const s=r.get(e);if(s)return s;const i=ht(e);if(0===i)return e;const l=new Proxy(e,2===i?o:n);return r.set(e,l),l}function bt(e){return Ct(e)?bt(e.__v_raw):!(!e||!e.__v_isReactive)}function Ct(e){return!(!e||!e.__v_isReadonly)}function xt(e){return!(!e||!e.__v_isShallow)}function wt(e){return bt(e)||Ct(e)}function St(e){const t=e&&e.__v_raw;return t?St(t):e}function kt(e){return Y(e,\"__v_skip\",!0),e}const Et=e=>N(e)?vt(e):e,At=e=>N(e)?mt(e):e;function Ft(e){_e&&fe&&we((e=St(e)).dep||(e.dep=se()))}function Tt(e,t){const n=(e=St(e)).dep;n&&ke(n)}function Ot(e){return!(!e||!0!==e.__v_isRef)}function Pt(e){return Nt(e,!1)}function Lt(e){return Nt(e,!0)}function Nt(e,t){return Ot(e)?e:new Rt(e,t)}class Rt{constructor(e,t){this.__v_isShallow=t,this.dep=void 0,this.__v_isRef=!0,this._rawValue=t?e:St(e),this._value=t?e:Et(e)}get value(){return Ft(this),this._value}set value(e){const t=this.__v_isShallow||xt(e)||Ct(e);e=t?e:St(e),q(e,this._rawValue)&&(this._rawValue=e,this._value=t?e:Et(e),Tt(this))}}function It(e){Tt(e)}function Mt(e){return Ot(e)?e.value:e}const Bt={get:(e,t,n)=>Mt(Reflect.get(e,t,n)),set:(e,t,n,o)=>{const r=e[t];return Ot(r)&&!Ot(n)?(r.value=n,!0):Reflect.set(e,t,n,o)}};function Vt(e){return bt(e)?e:new Proxy(e,Bt)}class jt{constructor(e){this.dep=void 0,this.__v_isRef=!0;const{get:t,set:n}=e((()=>Ft(this)),(()=>Tt(this)));this._get=t,this._set=n}get value(){return this._get()}set value(e){this._set(e)}}function Ut(e){return new jt(e)}function $t(e){const t=E(e)?new Array(e.length):{};for(const n in e)t[n]=Ht(e,n);return t}class Dt{constructor(e,t,n){this._object=e,this._key=t,this._defaultValue=n,this.__v_isRef=!0}get value(){const e=this._object[this._key];return void 0===e?this._defaultValue:e}set value(e){this._object[this._key]=e}get dep(){return function(e,t){var n;return null===(n=ce.get(e))||void 0===n?void 0:n.get(t)}(St(this._object),this._key)}}function Ht(e,t,n){const o=e[t];return Ot(o)?o:new Dt(e,t,n)}var Wt;class zt{constructor(e,t,n,o){this._setter=t,this.dep=void 0,this.__v_isRef=!0,this[Wt]=!1,this._dirty=!0,this.effect=new he(e,(()=>{this._dirty||(this._dirty=!0,Tt(this))})),this.effect.computed=this,this.effect.active=this._cacheable=!o,this.__v_isReadonly=n}get value(){const e=St(this);return Ft(e),!e._dirty&&e._cacheable||(e._dirty=!1,e._value=e.effect.run()),e._value}set value(e){this._setter(e)}}function Kt(e,...t){}function qt(e,t){}function Gt(e,t,n,o){let r;try{r=o?e(...o):e()}catch(s){Jt(s,t,n)}return r}function Yt(e,t,n,o){if(O(e)){const r=Gt(e,t,n,o);return r&&R(r)&&r.catch((e=>{Jt(e,t,n)})),r}const r=[];for(let s=0;s<e.length;s++)r.push(Yt(e[s],t,n,o));return r}function Jt(e,t,n,o=!0){if(t){let o=t.parent;const r=t.proxy,s=n;for(;o;){const t=o.ec;if(t)for(let n=0;n<t.length;n++)if(!1===t[n](e,r,s))return;o=o.parent}const i=t.appContext.config.errorHandler;if(i)return void Gt(i,null,10,[e,r,s])}!function(e,t,n,o=!0){console.error(e)}(e,0,0,o)}Wt=\"__v_isReadonly\";let Xt=!1,Zt=!1;const Qt=[];let en=0;const tn=[];let nn=null,on=0;const rn=Promise.resolve();let sn=null;function ln(e){const t=sn||rn;return e?t.then(this?e.bind(this):e):t}function cn(e){Qt.length&&Qt.includes(e,Xt&&e.allowRecurse?en+1:en)||(null==e.id?Qt.push(e):Qt.splice(function(e){let t=en+1,n=Qt.length;for(;t<n;){const o=t+n>>>1;dn(Qt[o])<e?t=o+1:n=o}return t}(e.id),0,e),an())}function an(){Xt||Zt||(Zt=!0,sn=rn.then(vn))}function un(e){E(e)?tn.push(...e):nn&&nn.includes(e,e.allowRecurse?on+1:on)||tn.push(e),an()}function fn(e,t=(Xt?en+1:0)){for(;t<Qt.length;t++){const e=Qt[t];e&&e.pre&&(Qt.splice(t,1),t--,e())}}function pn(e){if(tn.length){const e=[...new Set(tn)];if(tn.length=0,nn)return void nn.push(...e);for(nn=e,nn.sort(((e,t)=>dn(e)-dn(t))),on=0;on<nn.length;on++)nn[on]();nn=null,on=0}}const dn=e=>null==e.id?1/0:e.id,hn=(e,t)=>{const n=dn(e)-dn(t);if(0===n){if(e.pre&&!t.pre)return-1;if(t.pre&&!e.pre)return 1}return n};function vn(e){Zt=!1,Xt=!0,Qt.sort(hn);try{for(en=0;en<Qt.length;en++){const e=Qt[en];e&&!1!==e.active&&Gt(e,null,14)}}finally{en=0,Qt.length=0,pn(),Xt=!1,sn=null,(Qt.length||tn.length)&&vn()}}let gn,mn=[];function _n(e,t){var n,o;if(gn=e,gn)gn.enabled=!0,mn.forEach((({event:e,args:t})=>gn.emit(e,...t))),mn=[];else if(\"undefined\"!=typeof window&&window.HTMLElement&&!(null===(o=null===(n=window.navigator)||void 0===n?void 0:n.userAgent)||void 0===o?void 0:o.includes(\"jsdom\"))){(t.__VUE_DEVTOOLS_HOOK_REPLAY__=t.__VUE_DEVTOOLS_HOOK_REPLAY__||[]).push((e=>{_n(e,t)})),setTimeout((()=>{gn||(t.__VUE_DEVTOOLS_HOOK_REPLAY__=null,mn=[])}),3e3)}else mn=[]}function yn(e,t,...n){if(e.isUnmounted)return;const o=e.vnode.props||v;let r=n;const s=t.startsWith(\"update:\"),i=s&&t.slice(7);if(i&&i in o){const e=`${\"modelValue\"===i?\"model\":i}Modifiers`,{number:t,trim:s}=o[e]||v;s&&(r=n.map((e=>P(e)?e.trim():e))),t&&(r=n.map(J))}let l,c=o[l=K(t)]||o[l=K(D(t))];!c&&s&&(c=o[l=K(W(t))]),c&&Yt(c,e,6,r);const a=o[l+\"Once\"];if(a){if(e.emitted){if(e.emitted[l])return}else e.emitted={};e.emitted[l]=!0,Yt(a,e,6,r)}}function bn(e,t,n=!1){const o=t.emitsCache,r=o.get(e);if(void 0!==r)return r;const s=e.emits;let i={},l=!1;if(!O(e)){const o=e=>{const n=bn(e,t,!0);n&&(l=!0,x(i,n))};!n&&t.mixins.length&&t.mixins.forEach(o),e.extends&&o(e.extends),e.mixins&&e.mixins.forEach(o)}return s||l?(E(s)?s.forEach((e=>i[e]=null)):x(i,s),N(e)&&o.set(e,i),i):(N(e)&&o.set(e,null),null)}function Cn(e,t){return!(!e||!b(t))&&(t=t.slice(2).replace(/Once$/,\"\"),k(e,t[0].toLowerCase()+t.slice(1))||k(e,W(t))||k(e,t))}let xn=null,wn=null;function Sn(e){const t=xn;return xn=e,wn=e&&e.type.__scopeId||null,t}function kn(e){wn=e}function En(){wn=null}const An=e=>Fn;function Fn(e,t=xn,n){if(!t)return e;if(e._n)return e;const o=(...n)=>{o._d&&Yr(-1);const r=Sn(t);let s;try{s=e(...n)}finally{Sn(r),o._d&&Yr(1)}return s};return o._n=!0,o._c=!0,o._d=!0,o}function Tn(e){const{type:t,vnode:n,proxy:o,withProxy:r,props:s,propsOptions:[i],slots:l,attrs:c,emit:a,render:u,renderCache:f,data:p,setupState:d,ctx:h,inheritAttrs:v}=e;let g,m;const _=Sn(e);try{if(4&n.shapeFlag){const e=r||o;g=ps(u.call(e,e,f,s,d,p,h)),m=c}else{const e=t;0,g=ps(e(s,e.length>1?{attrs:c,slots:l,emit:a}:null)),m=t.props?c:On(c)}}catch(b){Wr.length=0,Jt(b,e,1),g=is(Dr)}let y=g;if(m&&!1!==v){const e=Object.keys(m),{shapeFlag:t}=y;e.length&&7&t&&(i&&e.some(C)&&(m=Pn(m,i)),y=cs(y,m))}return n.dirs&&(y=cs(y),y.dirs=y.dirs?y.dirs.concat(n.dirs):n.dirs),n.transition&&(y.transition=n.transition),g=y,Sn(_),g}const On=e=>{let t;for(const n in e)(\"class\"===n||\"style\"===n||b(n))&&((t||(t={}))[n]=e[n]);return t},Pn=(e,t)=>{const n={};for(const o in e)C(o)&&o.slice(9)in t||(n[o]=e[o]);return n};function Ln(e,t,n){const o=Object.keys(t);if(o.length!==Object.keys(e).length)return!0;for(let r=0;r<o.length;r++){const s=o[r];if(t[s]!==e[s]&&!Cn(n,s))return!0}return!1}function Nn({vnode:e,parent:t},n){for(;t&&t.subTree===e;)(e=t.vnode).el=n,t=t.parent}const Rn=e=>e.__isSuspense,In={name:\"Suspense\",__isSuspense:!0,process(e,t,n,o,r,s,i,l,c,a){null==e?function(e,t,n,o,r,s,i,l,c){const{p:a,o:{createElement:u}}=c,f=u(\"div\"),p=e.suspense=Bn(e,r,o,t,f,n,s,i,l,c);a(null,p.pendingBranch=e.ssContent,f,null,o,p,s,i),p.deps>0?(Mn(e,\"onPending\"),Mn(e,\"onFallback\"),a(null,e.ssFallback,t,n,o,null,s,i),Un(p,e.ssFallback)):p.resolve()}(t,n,o,r,s,i,l,c,a):function(e,t,n,o,r,s,i,l,{p:c,um:a,o:{createElement:u}}){const f=t.suspense=e.suspense;f.vnode=t,t.el=e.el;const p=t.ssContent,d=t.ssFallback,{activeBranch:h,pendingBranch:v,isInFallback:g,isHydrating:m}=f;if(v)f.pendingBranch=p,es(p,v)?(c(v,p,f.hiddenContainer,null,r,f,s,i,l),f.deps<=0?f.resolve():g&&(c(h,d,n,o,r,null,s,i,l),Un(f,d))):(f.pendingId++,m?(f.isHydrating=!1,f.activeBranch=v):a(v,r,f),f.deps=0,f.effects.length=0,f.hiddenContainer=u(\"div\"),g?(c(null,p,f.hiddenContainer,null,r,f,s,i,l),f.deps<=0?f.resolve():(c(h,d,n,o,r,null,s,i,l),Un(f,d))):h&&es(p,h)?(c(h,p,n,o,r,f,s,i,l),f.resolve(!0)):(c(null,p,f.hiddenContainer,null,r,f,s,i,l),f.deps<=0&&f.resolve()));else if(h&&es(p,h))c(h,p,n,o,r,f,s,i,l),Un(f,p);else if(Mn(t,\"onPending\"),f.pendingBranch=p,f.pendingId++,c(null,p,f.hiddenContainer,null,r,f,s,i,l),f.deps<=0)f.resolve();else{const{timeout:e,pendingId:t}=f;e>0?setTimeout((()=>{f.pendingId===t&&f.fallback(d)}),e):0===e&&f.fallback(d)}}(e,t,n,o,r,i,l,c,a)},hydrate:function(e,t,n,o,r,s,i,l,c){const a=t.suspense=Bn(t,o,n,e.parentNode,document.createElement(\"div\"),null,r,s,i,l,!0),u=c(e,a.pendingBranch=t.ssContent,n,a,s,i);0===a.deps&&a.resolve();return u},create:Bn,normalize:function(e){const{shapeFlag:t,children:n}=e,o=32&t;e.ssContent=Vn(o?n.default:n),e.ssFallback=o?Vn(n.fallback):is(Dr)}};function Mn(e,t){const n=e.props&&e.props[t];O(n)&&n()}function Bn(e,t,n,o,r,s,i,l,c,a,u=!1){const{p:f,m:p,um:d,n:h,o:{parentNode:v,remove:g}}=a,m=e.props?X(e.props.timeout):void 0,_={vnode:e,parent:t,parentComponent:n,isSVG:i,container:o,hiddenContainer:r,anchor:s,deps:0,pendingId:0,timeout:\"number\"==typeof m?m:-1,activeBranch:null,pendingBranch:null,isInFallback:!0,isHydrating:u,isUnmounted:!1,effects:[],resolve(e=!1){const{vnode:t,activeBranch:n,pendingBranch:o,pendingId:r,effects:s,parentComponent:i,container:l}=_;if(_.isHydrating)_.isHydrating=!1;else if(!e){const e=n&&o.transition&&\"out-in\"===o.transition.mode;e&&(n.transition.afterLeave=()=>{r===_.pendingId&&p(o,l,t,0)});let{anchor:t}=_;n&&(t=h(n),d(n,i,_,!0)),e||p(o,l,t,0)}Un(_,o),_.pendingBranch=null,_.isInFallback=!1;let c=_.parent,a=!1;for(;c;){if(c.pendingBranch){c.effects.push(...s),a=!0;break}c=c.parent}a||un(s),_.effects=[],Mn(t,\"onResolve\")},fallback(e){if(!_.pendingBranch)return;const{vnode:t,activeBranch:n,parentComponent:o,container:r,isSVG:s}=_;Mn(t,\"onFallback\");const i=h(n),a=()=>{_.isInFallback&&(f(null,e,r,i,o,null,s,l,c),Un(_,e))},u=e.transition&&\"out-in\"===e.transition.mode;u&&(n.transition.afterLeave=a),_.isInFallback=!0,d(n,o,null,!0),u||a()},move(e,t,n){_.activeBranch&&p(_.activeBranch,e,t,n),_.container=e},next:()=>_.activeBranch&&h(_.activeBranch),registerDep(e,t){const n=!!_.pendingBranch;n&&_.deps++;const o=e.vnode.el;e.asyncDep.catch((t=>{Jt(t,e,0)})).then((r=>{if(e.isUnmounted||_.isUnmounted||_.pendingId!==e.suspenseId)return;e.asyncResolved=!0;const{vnode:s}=e;As(e,r,!1),o&&(s.el=o);const l=!o&&e.subTree.el;t(e,s,v(o||e.subTree.el),o?null:h(e.subTree),_,i,c),l&&g(l),Nn(e,s.el),n&&0==--_.deps&&_.resolve()}))},unmount(e,t){_.isUnmounted=!0,_.activeBranch&&d(_.activeBranch,n,e,t),_.pendingBranch&&d(_.pendingBranch,n,e,t)}};return _}function Vn(e){let t;if(O(e)){const n=Gr&&e._c;n&&(e._d=!1,Kr()),e=e(),n&&(e._d=!0,t=zr,qr())}if(E(e)){const t=function(e){let t;for(let n=0;n<e.length;n++){const o=e[n];if(!Qr(o))return;if(o.type!==Dr||\"v-if\"===o.children){if(t)return;t=o}}return t}(e);e=t}return e=ps(e),t&&!e.dynamicChildren&&(e.dynamicChildren=t.filter((t=>t!==e))),e}function jn(e,t){t&&t.pendingBranch?E(e)?t.effects.push(...e):t.effects.push(e):un(e)}function Un(e,t){e.activeBranch=t;const{vnode:n,parentComponent:o}=e,r=n.el=t.el;o&&o.subTree===n&&(o.vnode.el=r,Nn(o,r))}function $n(e,t){if(ys){let n=ys.provides;const o=ys.parent&&ys.parent.provides;o===n&&(n=ys.provides=Object.create(o)),n[e]=t}else;}function Dn(e,t,n=!1){const o=ys||xn;if(o){const r=null==o.parent?o.vnode.appContext&&o.vnode.appContext.provides:o.parent.provides;if(r&&e in r)return r[e];if(arguments.length>1)return n&&O(t)?t.call(o.proxy):t}}function Hn(e,t){return Gn(e,null,t)}function Wn(e,t){return Gn(e,null,{flush:\"post\"})}function zn(e,t){return Gn(e,null,{flush:\"sync\"})}const Kn={};function qn(e,t,n){return Gn(e,t,n)}function Gn(e,t,{immediate:n,deep:o,flush:r}=v){const s=oe()===(null==ys?void 0:ys.scope)?ys:null;let i,l,c=!1,a=!1;if(Ot(e)?(i=()=>e.value,c=xt(e)):bt(e)?(i=()=>e,o=!0):E(e)?(a=!0,c=e.some((e=>bt(e)||xt(e))),i=()=>e.map((e=>Ot(e)?e.value:bt(e)?Xn(e):O(e)?Gt(e,s,2):void 0))):i=O(e)?t?()=>Gt(e,s,2):()=>{if(!s||!s.isUnmounted)return l&&l(),Yt(e,s,3,[u])}:m,t&&o){const e=i;i=()=>Xn(e())}let u=e=>{l=h.onStop=()=>{Gt(e,s,4)}},f=a?new Array(e.length).fill(Kn):Kn;const p=()=>{if(h.active)if(t){const e=h.run();(o||c||(a?e.some(((e,t)=>q(e,f[t]))):q(e,f)))&&(l&&l(),Yt(t,s,3,[e,f===Kn?void 0:a&&f[0]===Kn?[]:f,u]),f=e)}else h.run()};let d;p.allowRecurse=!!t,\"sync\"===r?d=p:\"post\"===r?d=()=>Fr(p,s&&s.suspense):(p.pre=!0,s&&(p.id=s.uid),d=()=>cn(p));const h=new he(i,d);t?n?p():f=h.run():\"post\"===r?Fr(h.run.bind(h),s&&s.suspense):h.run();return()=>{h.stop(),s&&s.scope&&w(s.scope.effects,h)}}function Yn(e,t,n){const o=this.proxy,r=P(e)?e.includes(\".\")?Jn(o,e):()=>o[e]:e.bind(o,o);let s;O(t)?s=t:(s=t.handler,n=t);const i=ys;Cs(this);const l=Gn(r,s.bind(o),n);return i?Cs(i):xs(),l}function Jn(e,t){const n=t.split(\".\");return()=>{let t=e;for(let e=0;e<n.length&&t;e++)t=t[n[e]];return t}}function Xn(e,t){if(!N(e)||e.__v_skip)return e;if((t=t||new Set).has(e))return e;if(t.add(e),Ot(e))Xn(e.value,t);else if(E(e))for(let n=0;n<e.length;n++)Xn(e[n],t);else if(F(e)||A(e))e.forEach((e=>{Xn(e,t)}));else if(B(e))for(const n in e)Xn(e[n],t);return e}function Zn(){const e={isMounted:!1,isLeaving:!1,isUnmounting:!1,leavingVNodes:new Map};return So((()=>{e.isMounted=!0})),Ao((()=>{e.isUnmounting=!0})),e}const Qn=[Function,Array],eo={name:\"BaseTransition\",props:{mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:Qn,onEnter:Qn,onAfterEnter:Qn,onEnterCancelled:Qn,onBeforeLeave:Qn,onLeave:Qn,onAfterLeave:Qn,onLeaveCancelled:Qn,onBeforeAppear:Qn,onAppear:Qn,onAfterAppear:Qn,onAppearCancelled:Qn},setup(e,{slots:t}){const n=bs(),o=Zn();let r;return()=>{const s=t.default&&io(t.default(),!0);if(!s||!s.length)return;let i=s[0];if(s.length>1)for(const e of s)if(e.type!==Dr){i=e;break}const l=St(e),{mode:c}=l;if(o.isLeaving)return oo(i);const a=ro(i);if(!a)return oo(i);const u=no(a,l,o,n);so(a,u);const f=n.subTree,p=f&&ro(f);let d=!1;const{getTransitionKey:h}=a.type;if(h){const e=h();void 0===r?r=e:e!==r&&(r=e,d=!0)}if(p&&p.type!==Dr&&(!es(a,p)||d)){const e=no(p,l,o,n);if(so(p,e),\"out-in\"===c)return o.isLeaving=!0,e.afterLeave=()=>{o.isLeaving=!1,!1!==n.update.active&&n.update()},oo(i);\"in-out\"===c&&a.type!==Dr&&(e.delayLeave=(e,t,n)=>{to(o,p)[String(p.key)]=p,e._leaveCb=()=>{t(),e._leaveCb=void 0,delete u.delayedLeave},u.delayedLeave=n})}return i}}};function to(e,t){const{leavingVNodes:n}=e;let o=n.get(t.type);return o||(o=Object.create(null),n.set(t.type,o)),o}function no(e,t,n,o){const{appear:r,mode:s,persisted:i=!1,onBeforeEnter:l,onEnter:c,onAfterEnter:a,onEnterCancelled:u,onBeforeLeave:f,onLeave:p,onAfterLeave:d,onLeaveCancelled:h,onBeforeAppear:v,onAppear:g,onAfterAppear:m,onAppearCancelled:_}=t,y=String(e.key),b=to(n,e),C=(e,t)=>{e&&Yt(e,o,9,t)},x=(e,t)=>{const n=t[1];C(e,t),E(e)?e.every((e=>e.length<=1))&&n():e.length<=1&&n()},w={mode:s,persisted:i,beforeEnter(t){let o=l;if(!n.isMounted){if(!r)return;o=v||l}t._leaveCb&&t._leaveCb(!0);const s=b[y];s&&es(e,s)&&s.el._leaveCb&&s.el._leaveCb(),C(o,[t])},enter(e){let t=c,o=a,s=u;if(!n.isMounted){if(!r)return;t=g||c,o=m||a,s=_||u}let i=!1;const l=e._enterCb=t=>{i||(i=!0,C(t?s:o,[e]),w.delayedLeave&&w.delayedLeave(),e._enterCb=void 0)};t?x(t,[e,l]):l()},leave(t,o){const r=String(e.key);if(t._enterCb&&t._enterCb(!0),n.isUnmounting)return o();C(f,[t]);let s=!1;const i=t._leaveCb=n=>{s||(s=!0,o(),C(n?h:d,[t]),t._leaveCb=void 0,b[r]===e&&delete b[r])};b[r]=e,p?x(p,[t,i]):i()},clone:e=>no(e,t,n,o)};return w}function oo(e){if(fo(e))return(e=cs(e)).children=null,e}function ro(e){return fo(e)?e.children?e.children[0]:void 0:e}function so(e,t){6&e.shapeFlag&&e.component?so(e.component.subTree,t):128&e.shapeFlag?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function io(e,t=!1,n){let o=[],r=0;for(let s=0;s<e.length;s++){let i=e[s];const l=null==n?i.key:String(n)+String(null!=i.key?i.key:s);i.type===Ur?(128&i.patchFlag&&r++,o=o.concat(io(i.children,t,l))):(t||i.type!==Dr)&&o.push(null!=l?cs(i,{key:l}):i)}if(r>1)for(let s=0;s<o.length;s++)o[s].patchFlag=-2;return o}function lo(e){return O(e)?{setup:e,name:e.name}:e}const co=e=>!!e.type.__asyncLoader;function ao(e){O(e)&&(e={loader:e});const{loader:t,loadingComponent:n,errorComponent:o,delay:r=200,timeout:s,suspensible:i=!0,onError:l}=e;let c,a=null,u=0;const f=()=>{let e;return a||(e=a=t().catch((e=>{if(e=e instanceof Error?e:new Error(String(e)),l)return new Promise(((t,n)=>{l(e,(()=>t((u++,a=null,f()))),(()=>n(e)),u+1)}));throw e})).then((t=>e!==a&&a?a:(t&&(t.__esModule||\"Module\"===t[Symbol.toStringTag])&&(t=t.default),c=t,t))))};return lo({name:\"AsyncComponentWrapper\",__asyncLoader:f,get __asyncResolved(){return c},setup(){const e=ys;if(c)return()=>uo(c,e);const t=t=>{a=null,Jt(t,e,13,!o)};if(i&&e.suspense)return f().then((t=>()=>uo(t,e))).catch((e=>(t(e),()=>o?is(o,{error:e}):null)));const l=Pt(!1),u=Pt(),p=Pt(!!r);return r&&setTimeout((()=>{p.value=!1}),r),null!=s&&setTimeout((()=>{if(!l.value&&!u.value){const e=new Error(`Async component timed out after ${s}ms.`);t(e),u.value=e}}),s),f().then((()=>{l.value=!0,e.parent&&fo(e.parent.vnode)&&cn(e.parent.update)})).catch((e=>{t(e),u.value=e})),()=>l.value&&c?uo(c,e):u.value&&o?is(o,{error:u.value}):n&&!p.value?is(n):void 0}})}function uo(e,t){const{ref:n,props:o,children:r,ce:s}=t.vnode,i=is(e,o,r);return i.ref=n,i.ce=s,delete t.vnode.ce,i}const fo=e=>e.type.__isKeepAlive,po={name:\"KeepAlive\",__isKeepAlive:!0,props:{include:[String,RegExp,Array],exclude:[String,RegExp,Array],max:[String,Number]},setup(e,{slots:t}){const n=bs(),o=n.ctx,r=new Map,s=new Set;let i=null;const l=n.suspense,{renderer:{p:c,m:a,um:u,o:{createElement:f}}}=o,p=f(\"div\");function d(e){yo(e),u(e,n,l,!0)}function h(e){r.forEach(((t,n)=>{const o=Ns(t.type);!o||e&&e(o)||v(n)}))}function v(e){const t=r.get(e);i&&es(t,i)?i&&yo(i):d(t),r.delete(e),s.delete(e)}o.activate=(e,t,n,o,r)=>{const s=e.component;a(e,t,n,0,l),c(s.vnode,e,t,n,s,l,o,e.slotScopeIds,r),Fr((()=>{s.isDeactivated=!1,s.a&&G(s.a);const t=e.props&&e.props.onVnodeMounted;t&&gs(t,s.parent,e)}),l)},o.deactivate=e=>{const t=e.component;a(e,p,null,1,l),Fr((()=>{t.da&&G(t.da);const n=e.props&&e.props.onVnodeUnmounted;n&&gs(n,t.parent,e),t.isDeactivated=!0}),l)},qn((()=>[e.include,e.exclude]),(([e,t])=>{e&&h((t=>ho(e,t))),t&&h((e=>!ho(t,e)))}),{flush:\"post\",deep:!0});let g=null;const m=()=>{null!=g&&r.set(g,bo(n.subTree))};return So(m),Eo(m),Ao((()=>{r.forEach((e=>{const{subTree:t,suspense:o}=n,r=bo(t);if(e.type!==r.type||e.key!==r.key)d(e);else{yo(r);const e=r.component.da;e&&Fr(e,o)}}))})),()=>{if(g=null,!t.default)return null;const n=t.default(),o=n[0];if(n.length>1)return i=null,n;if(!(Qr(o)&&(4&o.shapeFlag||128&o.shapeFlag)))return i=null,o;let l=bo(o);const c=l.type,a=Ns(co(l)?l.type.__asyncResolved||{}:c),{include:u,exclude:f,max:p}=e;if(u&&(!a||!ho(u,a))||f&&a&&ho(f,a))return i=l,o;const d=null==l.key?c:l.key,h=r.get(d);return l.el&&(l=cs(l),128&o.shapeFlag&&(o.ssContent=l)),g=d,h?(l.el=h.el,l.component=h.component,l.transition&&so(l,l.transition),l.shapeFlag|=512,s.delete(d),s.add(d)):(s.add(d),p&&s.size>parseInt(p,10)&&v(s.values().next().value)),l.shapeFlag|=256,i=l,Rn(o.type)?o:l}}};function ho(e,t){return E(e)?e.some((e=>ho(e,t))):P(e)?e.split(\",\").includes(t):\"[object RegExp]\"===M(e)&&e.test(t)}function vo(e,t){mo(e,\"a\",t)}function go(e,t){mo(e,\"da\",t)}function mo(e,t,n=ys){const o=e.__wdc||(e.__wdc=()=>{let t=n;for(;t;){if(t.isDeactivated)return;t=t.parent}return e()});if(Co(t,o,n),n){let e=n.parent;for(;e&&e.parent;)fo(e.parent.vnode)&&_o(o,t,n,e),e=e.parent}}function _o(e,t,n,o){const r=Co(t,e,o,!0);Fo((()=>{w(o[t],r)}),n)}function yo(e){e.shapeFlag&=-257,e.shapeFlag&=-513}function bo(e){return 128&e.shapeFlag?e.ssContent:e}function Co(e,t,n=ys,o=!1){if(n){const r=n[e]||(n[e]=[]),s=t.__weh||(t.__weh=(...o)=>{if(n.isUnmounted)return;be(),Cs(n);const r=Yt(t,n,e,o);return xs(),Ce(),r});return o?r.unshift(s):r.push(s),s}}const xo=e=>(t,n=ys)=>(!Es||\"sp\"===e)&&Co(e,((...e)=>t(...e)),n),wo=xo(\"bm\"),So=xo(\"m\"),ko=xo(\"bu\"),Eo=xo(\"u\"),Ao=xo(\"bum\"),Fo=xo(\"um\"),To=xo(\"sp\"),Oo=xo(\"rtg\"),Po=xo(\"rtc\");function Lo(e,t=ys){Co(\"ec\",e,t)}function No(e,t){const n=xn;if(null===n)return e;const o=Ls(n)||n.proxy,r=e.dirs||(e.dirs=[]);for(let s=0;s<t.length;s++){let[e,n,i,l=v]=t[s];e&&(O(e)&&(e={mounted:e,updated:e}),e.deep&&Xn(n),r.push({dir:e,instance:o,value:n,oldValue:void 0,arg:i,modifiers:l}))}return e}function Ro(e,t,n,o){const r=e.dirs,s=t&&t.dirs;for(let i=0;i<r.length;i++){const l=r[i];s&&(l.oldValue=s[i].value);let c=l.dir[o];c&&(be(),Yt(c,n,8,[e.el,l,e,t]),Ce())}}function Io(e,t){return jo(\"components\",e,!0,t)||e}const Mo=Symbol();function Bo(e){return P(e)?jo(\"components\",e,!1)||e:e||Mo}function Vo(e){return jo(\"directives\",e)}function jo(e,t,n=!0,o=!1){const r=xn||ys;if(r){const n=r.type;if(\"components\"===e){const e=Ns(n,!1);if(e&&(e===t||e===D(t)||e===z(D(t))))return n}const s=Uo(r[e]||n[e],t)||Uo(r.appContext[e],t);return!s&&o?n:s}}function Uo(e,t){return e&&(e[t]||e[D(t)]||e[z(D(t))])}function $o(e,t,n,o){let r;const s=n&&n[o];if(E(e)||P(e)){r=new Array(e.length);for(let n=0,o=e.length;n<o;n++)r[n]=t(e[n],n,void 0,s&&s[n])}else if(\"number\"==typeof e){r=new Array(e);for(let n=0;n<e;n++)r[n]=t(n+1,n,void 0,s&&s[n])}else if(N(e))if(e[Symbol.iterator])r=Array.from(e,((e,n)=>t(e,n,void 0,s&&s[n])));else{const n=Object.keys(e);r=new Array(n.length);for(let o=0,i=n.length;o<i;o++){const i=n[o];r[o]=t(e[i],i,o,s&&s[o])}}else r=[];return n&&(n[o]=r),r}function Do(e,t){for(let n=0;n<t.length;n++){const o=t[n];if(E(o))for(let t=0;t<o.length;t++)e[o[t].name]=o[t].fn;else o&&(e[o.name]=o.key?(...e)=>{const t=o.fn(...e);return t&&(t.key=o.key),t}:o.fn)}return e}function Ho(e,t,n={},o,r){if(xn.isCE||xn.parent&&co(xn.parent)&&xn.parent.isCE)return\"default\"!==t&&(n.name=t),is(\"slot\",n,o&&o());let s=e[t];s&&s._c&&(s._d=!1),Kr();const i=s&&Wo(s(n)),l=Zr(Ur,{key:n.key||i&&i.key||`_${t}`},i||(o?o():[]),i&&1===e._?64:-2);return!r&&l.scopeId&&(l.slotScopeIds=[l.scopeId+\"-s\"]),s&&s._c&&(s._d=!0),l}function Wo(e){return e.some((e=>!Qr(e)||e.type!==Dr&&!(e.type===Ur&&!Wo(e.children))))?e:null}function zo(e,t){const n={};for(const o in e)n[t&&/[A-Z]/.test(o)?`on:${o}`:K(o)]=e[o];return n}const Ko=e=>e?ws(e)?Ls(e)||e.proxy:Ko(e.parent):null,qo=x(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>Ko(e.parent),$root:e=>Ko(e.root),$emit:e=>e.emit,$options:e=>tr(e),$forceUpdate:e=>e.f||(e.f=()=>cn(e.update)),$nextTick:e=>e.n||(e.n=ln.bind(e.proxy)),$watch:e=>Yn.bind(e)}),Go=(e,t)=>e!==v&&!e.__isScriptSetup&&k(e,t),Yo={get({_:e},t){const{ctx:n,setupState:o,data:r,props:s,accessCache:i,type:l,appContext:c}=e;let a;if(\"$\"!==t[0]){const l=i[t];if(void 0!==l)switch(l){case 1:return o[t];case 2:return r[t];case 4:return n[t];case 3:return s[t]}else{if(Go(o,t))return i[t]=1,o[t];if(r!==v&&k(r,t))return i[t]=2,r[t];if((a=e.propsOptions[0])&&k(a,t))return i[t]=3,s[t];if(n!==v&&k(n,t))return i[t]=4,n[t];Xo&&(i[t]=0)}}const u=qo[t];let f,p;return u?(\"$attrs\"===t&&xe(e,0,t),u(e)):(f=l.__cssModules)&&(f=f[t])?f:n!==v&&k(n,t)?(i[t]=4,n[t]):(p=c.config.globalProperties,k(p,t)?p[t]:void 0)},set({_:e},t,n){const{data:o,setupState:r,ctx:s}=e;return Go(r,t)?(r[t]=n,!0):o!==v&&k(o,t)?(o[t]=n,!0):!k(e.props,t)&&((\"$\"!==t[0]||!(t.slice(1)in e))&&(s[t]=n,!0))},has({_:{data:e,setupState:t,accessCache:n,ctx:o,appContext:r,propsOptions:s}},i){let l;return!!n[i]||e!==v&&k(e,i)||Go(t,i)||(l=s[0])&&k(l,i)||k(o,i)||k(qo,i)||k(r.config.globalProperties,i)},defineProperty(e,t,n){return null!=n.get?e._.accessCache[t]=0:k(n,\"value\")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}},Jo=x({},Yo,{get(e,t){if(t!==Symbol.unscopables)return Yo.get(e,t,e)},has:(e,n)=>\"_\"!==n[0]&&!t(n)});let Xo=!0;function Zo(e){const t=tr(e),n=e.proxy,o=e.ctx;Xo=!1,t.beforeCreate&&Qo(t.beforeCreate,e,\"bc\");const{data:r,computed:s,methods:i,watch:l,provide:c,inject:a,created:u,beforeMount:f,mounted:p,beforeUpdate:d,updated:h,activated:v,deactivated:g,beforeUnmount:_,unmounted:y,render:b,renderTracked:C,renderTriggered:x,errorCaptured:w,serverPrefetch:S,expose:k,inheritAttrs:A,components:F,directives:T}=t;if(a&&function(e,t,n=m,o=!1){E(e)&&(e=sr(e));for(const r in e){const n=e[r];let s;s=N(n)?\"default\"in n?Dn(n.from||r,n.default,!0):Dn(n.from||r):Dn(n),Ot(s)&&o?Object.defineProperty(t,r,{enumerable:!0,configurable:!0,get:()=>s.value,set:e=>s.value=e}):t[r]=s}}(a,o,null,e.appContext.config.unwrapInjectedRef),i)for(const m in i){const e=i[m];O(e)&&(o[m]=e.bind(n))}if(r){const t=r.call(n,n);N(t)&&(e.data=vt(t))}if(Xo=!0,s)for(const E in s){const e=s[E],t=O(e)?e.bind(n,n):O(e.get)?e.get.bind(n,n):m,r=!O(e)&&O(e.set)?e.set.bind(n):m,i=Rs({get:t,set:r});Object.defineProperty(o,E,{enumerable:!0,configurable:!0,get:()=>i.value,set:e=>i.value=e})}if(l)for(const m in l)er(l[m],o,n,m);if(c){const e=O(c)?c.call(n):c;Reflect.ownKeys(e).forEach((t=>{$n(t,e[t])}))}function P(e,t){E(t)?t.forEach((t=>e(t.bind(n)))):t&&e(t.bind(n))}if(u&&Qo(u,e,\"c\"),P(wo,f),P(So,p),P(ko,d),P(Eo,h),P(vo,v),P(go,g),P(Lo,w),P(Po,C),P(Oo,x),P(Ao,_),P(Fo,y),P(To,S),E(k))if(k.length){const t=e.exposed||(e.exposed={});k.forEach((e=>{Object.defineProperty(t,e,{get:()=>n[e],set:t=>n[e]=t})}))}else e.exposed||(e.exposed={});b&&e.render===m&&(e.render=b),null!=A&&(e.inheritAttrs=A),F&&(e.components=F),T&&(e.directives=T)}function Qo(e,t,n){Yt(E(e)?e.map((e=>e.bind(t.proxy))):e.bind(t.proxy),t,n)}function er(e,t,n,o){const r=o.includes(\".\")?Jn(n,o):()=>n[o];if(P(e)){const n=t[e];O(n)&&qn(r,n)}else if(O(e))qn(r,e.bind(n));else if(N(e))if(E(e))e.forEach((e=>er(e,t,n,o)));else{const o=O(e.handler)?e.handler.bind(n):t[e.handler];O(o)&&qn(r,o,e)}}function tr(e){const t=e.type,{mixins:n,extends:o}=t,{mixins:r,optionsCache:s,config:{optionMergeStrategies:i}}=e.appContext,l=s.get(t);let c;return l?c=l:r.length||n||o?(c={},r.length&&r.forEach((e=>nr(c,e,i,!0))),nr(c,t,i)):c=t,N(t)&&s.set(t,c),c}function nr(e,t,n,o=!1){const{mixins:r,extends:s}=t;s&&nr(e,s,n,!0),r&&r.forEach((t=>nr(e,t,n,!0)));for(const i in t)if(o&&\"expose\"===i);else{const o=or[i]||n&&n[i];e[i]=o?o(e[i],t[i]):t[i]}return e}const or={data:rr,props:lr,emits:lr,methods:lr,computed:lr,beforeCreate:ir,created:ir,beforeMount:ir,mounted:ir,beforeUpdate:ir,updated:ir,beforeDestroy:ir,beforeUnmount:ir,destroyed:ir,unmounted:ir,activated:ir,deactivated:ir,errorCaptured:ir,serverPrefetch:ir,components:lr,directives:lr,watch:function(e,t){if(!e)return t;if(!t)return e;const n=x(Object.create(null),e);for(const o in t)n[o]=ir(e[o],t[o]);return n},provide:rr,inject:function(e,t){return lr(sr(e),sr(t))}};function rr(e,t){return t?e?function(){return x(O(e)?e.call(this,this):e,O(t)?t.call(this,this):t)}:t:e}function sr(e){if(E(e)){const t={};for(let n=0;n<e.length;n++)t[e[n]]=e[n];return t}return e}function ir(e,t){return e?[...new Set([].concat(e,t))]:t}function lr(e,t){return e?x(x(Object.create(null),e),t):t}function cr(e,t,n,o){const[r,s]=e.propsOptions;let i,l=!1;if(t)for(let c in t){if(j(c))continue;const a=t[c];let u;r&&k(r,u=D(c))?s&&s.includes(u)?(i||(i={}))[u]=a:n[u]=a:Cn(e.emitsOptions,c)||c in o&&a===o[c]||(o[c]=a,l=!0)}if(s){const t=St(n),o=i||v;for(let i=0;i<s.length;i++){const l=s[i];n[l]=ar(r,t,l,o[l],e,!k(o,l))}}return l}function ar(e,t,n,o,r,s){const i=e[n];if(null!=i){const e=k(i,\"default\");if(e&&void 0===o){const e=i.default;if(i.type!==Function&&O(e)){const{propsDefaults:s}=r;n in s?o=s[n]:(Cs(r),o=s[n]=e.call(null,t),xs())}else o=e}i[0]&&(s&&!e?o=!1:!i[1]||\"\"!==o&&o!==W(n)||(o=!0))}return o}function ur(e,t,n=!1){const o=t.propsCache,r=o.get(e);if(r)return r;const s=e.props,i={},l=[];let c=!1;if(!O(e)){const o=e=>{c=!0;const[n,o]=ur(e,t,!0);x(i,n),o&&l.push(...o)};!n&&t.mixins.length&&t.mixins.forEach(o),e.extends&&o(e.extends),e.mixins&&e.mixins.forEach(o)}if(!s&&!c)return N(e)&&o.set(e,g),g;if(E(s))for(let u=0;u<s.length;u++){const e=D(s[u]);fr(e)&&(i[e]=v)}else if(s)for(const u in s){const e=D(u);if(fr(e)){const t=s[u],n=i[e]=E(t)||O(t)?{type:t}:Object.assign({},t);if(n){const t=hr(Boolean,n.type),o=hr(String,n.type);n[0]=t>-1,n[1]=o<0||t<o,(t>-1||k(n,\"default\"))&&l.push(e)}}}const a=[i,l];return N(e)&&o.set(e,a),a}function fr(e){return\"$\"!==e[0]}function pr(e){const t=e&&e.toString().match(/^\\s*(function|class) (\\w+)/);return t?t[2]:null===e?\"null\":\"\"}function dr(e,t){return pr(e)===pr(t)}function hr(e,t){return E(t)?t.findIndex((t=>dr(t,e))):O(t)&&dr(t,e)?0:-1}const vr=e=>\"_\"===e[0]||\"$stable\"===e,gr=e=>E(e)?e.map(ps):[ps(e)],mr=(e,t,n)=>{if(t._n)return t;const o=Fn(((...e)=>gr(t(...e))),n);return o._c=!1,o},_r=(e,t,n)=>{const o=e._ctx;for(const r in e){if(vr(r))continue;const n=e[r];if(O(n))t[r]=mr(0,n,o);else if(null!=n){const e=gr(n);t[r]=()=>e}}},yr=(e,t)=>{const n=gr(t);e.slots.default=()=>n};function br(){return{app:null,config:{isNativeTag:_,performance:!1,globalProperties:{},optionMergeStrategies:{},errorHandler:void 0,warnHandler:void 0,compilerOptions:{}},mixins:[],components:{},directives:{},provides:Object.create(null),optionsCache:new WeakMap,propsCache:new WeakMap,emitsCache:new WeakMap}}let Cr=0;function xr(e,t){return function(n,o=null){O(n)||(n=Object.assign({},n)),null==o||N(o)||(o=null);const r=br(),s=new Set;let i=!1;const l=r.app={_uid:Cr++,_component:n,_props:o,_container:null,_context:r,_instance:null,version:Xs,get config(){return r.config},set config(e){},use:(e,...t)=>(s.has(e)||(e&&O(e.install)?(s.add(e),e.install(l,...t)):O(e)&&(s.add(e),e(l,...t))),l),mixin:e=>(r.mixins.includes(e)||r.mixins.push(e),l),component:(e,t)=>t?(r.components[e]=t,l):r.components[e],directive:(e,t)=>t?(r.directives[e]=t,l):r.directives[e],mount(s,c,a){if(!i){const u=is(n,o);return u.appContext=r,c&&t?t(u,s):e(u,s,a),i=!0,l._container=s,s.__vue_app__=l,Ls(u.component)||u.component.proxy}},unmount(){i&&(e(null,l._container),delete l._container.__vue_app__)},provide:(e,t)=>(r.provides[e]=t,l)};return l}}function wr(e,t,n,o,r=!1){if(E(e))return void e.forEach(((e,s)=>wr(e,t&&(E(t)?t[s]:t),n,o,r)));if(co(o)&&!r)return;const s=4&o.shapeFlag?Ls(o.component)||o.component.proxy:o.el,i=r?null:s,{i:l,r:c}=e,a=t&&t.r,u=l.refs===v?l.refs={}:l.refs,f=l.setupState;if(null!=a&&a!==c&&(P(a)?(u[a]=null,k(f,a)&&(f[a]=null)):Ot(a)&&(a.value=null)),O(c))Gt(c,l,12,[i,u]);else{const t=P(c),o=Ot(c);if(t||o){const l=()=>{if(e.f){const n=t?k(f,c)?f[c]:u[c]:c.value;r?E(n)&&w(n,s):E(n)?n.includes(s)||n.push(s):t?(u[c]=[s],k(f,c)&&(f[c]=u[c])):(c.value=[s],e.k&&(u[e.k]=c.value))}else t?(u[c]=i,k(f,c)&&(f[c]=i)):o&&(c.value=i,e.k&&(u[e.k]=i))};i?(l.id=-1,Fr(l,n)):l()}}}let Sr=!1;const kr=e=>/svg/.test(e.namespaceURI)&&\"foreignObject\"!==e.tagName,Er=e=>8===e.nodeType;function Ar(e){const{mt:t,p:n,o:{patchProp:o,createText:r,nextSibling:s,parentNode:i,remove:l,insert:c,createComment:a}}=e,u=(n,o,l,a,g,m=!1)=>{const _=Er(n)&&\"[\"===n.data,y=()=>h(n,o,l,a,g,_),{type:b,ref:C,shapeFlag:x,patchFlag:w}=o;let S=n.nodeType;o.el=n,-2===w&&(m=!1,o.dynamicChildren=null);let k=null;switch(b){case $r:3!==S?\"\"===o.children?(c(o.el=r(\"\"),i(n),n),k=n):k=y():(n.data!==o.children&&(Sr=!0,n.data=o.children),k=s(n));break;case Dr:k=8!==S||_?y():s(n);break;case Hr:if(_&&(S=(n=s(n)).nodeType),1===S||3===S){k=n;const e=!o.children.length;for(let t=0;t<o.staticCount;t++)e&&(o.children+=1===k.nodeType?k.outerHTML:k.data),t===o.staticCount-1&&(o.anchor=k),k=s(k);return _?s(k):k}y();break;case Ur:k=_?d(n,o,l,a,g,m):y();break;default:if(1&x)k=1!==S||o.type.toLowerCase()!==n.tagName.toLowerCase()?y():f(n,o,l,a,g,m);else if(6&x){o.slotScopeIds=g;const e=i(n);if(t(o,e,null,l,a,kr(e),m),k=_?v(n):s(n),k&&Er(k)&&\"teleport end\"===k.data&&(k=s(k)),co(o)){let t;_?(t=is(Ur),t.anchor=k?k.previousSibling:e.lastChild):t=3===n.nodeType?as(\"\"):is(\"div\"),t.el=n,o.component.subTree=t}}else 64&x?k=8!==S?y():o.type.hydrate(n,o,l,a,g,m,e,p):128&x&&(k=o.type.hydrate(n,o,l,a,kr(i(n)),g,m,e,u))}return null!=C&&wr(C,null,a,o),k},f=(e,t,n,r,s,i)=>{i=i||!!t.dynamicChildren;const{type:c,props:a,patchFlag:u,shapeFlag:f,dirs:d}=t,h=\"input\"===c&&d||\"option\"===c;if(h||-1!==u){if(d&&Ro(t,null,n,\"created\"),a)if(h||!i||48&u)for(const t in a)(h&&t.endsWith(\"value\")||b(t)&&!j(t))&&o(e,t,null,a[t],!1,void 0,n);else a.onClick&&o(e,\"onClick\",null,a.onClick,!1,void 0,n);let c;if((c=a&&a.onVnodeBeforeMount)&&gs(c,n,t),d&&Ro(t,null,n,\"beforeMount\"),((c=a&&a.onVnodeMounted)||d)&&jn((()=>{c&&gs(c,n,t),d&&Ro(t,null,n,\"mounted\")}),r),16&f&&(!a||!a.innerHTML&&!a.textContent)){let o=p(e.firstChild,t,e,n,r,s,i);for(;o;){Sr=!0;const e=o;o=o.nextSibling,l(e)}}else 8&f&&e.textContent!==t.children&&(Sr=!0,e.textContent=t.children)}return e.nextSibling},p=(e,t,o,r,s,i,l)=>{l=l||!!t.dynamicChildren;const c=t.children,a=c.length;for(let f=0;f<a;f++){const t=l?c[f]:c[f]=ps(c[f]);if(e)e=u(e,t,r,s,i,l);else{if(t.type===$r&&!t.children)continue;Sr=!0,n(null,t,o,null,r,s,kr(o),i)}}return e},d=(e,t,n,o,r,l)=>{const{slotScopeIds:u}=t;u&&(r=r?r.concat(u):u);const f=i(e),d=p(s(e),t,f,n,o,r,l);return d&&Er(d)&&\"]\"===d.data?s(t.anchor=d):(Sr=!0,c(t.anchor=a(\"]\"),f,d),d)},h=(e,t,o,r,c,a)=>{if(Sr=!0,t.el=null,a){const t=v(e);for(;;){const n=s(e);if(!n||n===t)break;l(n)}}const u=s(e),f=i(e);return l(e),n(null,t,f,u,o,r,kr(f),c),u},v=e=>{let t=0;for(;e;)if((e=s(e))&&Er(e)&&(\"[\"===e.data&&t++,\"]\"===e.data)){if(0===t)return s(e);t--}return e};return[(e,t)=>{if(!t.hasChildNodes())return n(null,e,t),pn(),void(t._vnode=e);Sr=!1,u(t.firstChild,e,null,null,null),pn(),t._vnode=e,Sr&&console.error(\"Hydration completed but contains mismatches.\")},u]}const Fr=jn;function Tr(e){return Pr(e)}function Or(e){return Pr(e,Ar)}function Pr(e,t){(Z||(Z=\"undefined\"!=typeof globalThis?globalThis:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:{})).__VUE__=!0;const{insert:n,remove:o,patchProp:r,createElement:s,createText:i,createComment:l,setText:c,setElementText:a,parentNode:u,nextSibling:f,setScopeId:p=m,insertStaticContent:d}=e,h=(e,t,n,o=null,r=null,s=null,i=!1,l=null,c=!!t.dynamicChildren)=>{if(e===t)return;e&&!es(e,t)&&(o=X(e),H(e,r,s,!0),e=null),-2===t.patchFlag&&(c=!1,t.dynamicChildren=null);const{type:a,ref:u,shapeFlag:f}=t;switch(a){case $r:_(e,t,n,o);break;case Dr:y(e,t,n,o);break;case Hr:null==e&&b(t,n,o,i);break;case Ur:O(e,t,n,o,r,s,i,l,c);break;default:1&f?C(e,t,n,o,r,s,i,l,c):6&f?P(e,t,n,o,r,s,i,l,c):(64&f||128&f)&&a.process(e,t,n,o,r,s,i,l,c,te)}null!=u&&r&&wr(u,e&&e.ref,s,t||e,!t)},_=(e,t,o,r)=>{if(null==e)n(t.el=i(t.children),o,r);else{const n=t.el=e.el;t.children!==e.children&&c(n,t.children)}},y=(e,t,o,r)=>{null==e?n(t.el=l(t.children||\"\"),o,r):t.el=e.el},b=(e,t,n,o)=>{[e.el,e.anchor]=d(e.children,t,n,o,e.el,e.anchor)},C=(e,t,n,o,r,s,i,l,c)=>{i=i||\"svg\"===t.type,null==e?w(t,n,o,r,s,i,l,c):A(e,t,r,s,i,l,c)},w=(e,t,o,i,l,c,u,f)=>{let p,d;const{type:h,props:v,shapeFlag:g,transition:m,dirs:_}=e;if(p=e.el=s(e.type,c,v&&v.is,v),8&g?a(p,e.children):16&g&&E(e.children,p,null,i,l,c&&\"foreignObject\"!==h,u,f),_&&Ro(e,null,i,\"created\"),S(p,e,e.scopeId,u,i),v){for(const t in v)\"value\"===t||j(t)||r(p,t,null,v[t],c,e.children,i,l,J);\"value\"in v&&r(p,\"value\",null,v.value),(d=v.onVnodeBeforeMount)&&gs(d,i,e)}_&&Ro(e,null,i,\"beforeMount\");const y=(!l||l&&!l.pendingBranch)&&m&&!m.persisted;y&&m.beforeEnter(p),n(p,t,o),((d=v&&v.onVnodeMounted)||y||_)&&Fr((()=>{d&&gs(d,i,e),y&&m.enter(p),_&&Ro(e,null,i,\"mounted\")}),l)},S=(e,t,n,o,r)=>{if(n&&p(e,n),o)for(let s=0;s<o.length;s++)p(e,o[s]);if(r){if(t===r.subTree){const t=r.vnode;S(e,t,t.scopeId,t.slotScopeIds,r.parent)}}},E=(e,t,n,o,r,s,i,l,c=0)=>{for(let a=c;a<e.length;a++){const c=e[a]=l?ds(e[a]):ps(e[a]);h(null,c,t,n,o,r,s,i,l)}},A=(e,t,n,o,s,i,l)=>{const c=t.el=e.el;let{patchFlag:u,dynamicChildren:f,dirs:p}=t;u|=16&e.patchFlag;const d=e.props||v,h=t.props||v;let g;n&&Lr(n,!1),(g=h.onVnodeBeforeUpdate)&&gs(g,n,t,e),p&&Ro(t,e,n,\"beforeUpdate\"),n&&Lr(n,!0);const m=s&&\"foreignObject\"!==t.type;if(f?F(e.dynamicChildren,f,c,n,o,m,i):l||B(e,t,c,null,n,o,m,i,!1),u>0){if(16&u)T(c,t,d,h,n,o,s);else if(2&u&&d.class!==h.class&&r(c,\"class\",null,h.class,s),4&u&&r(c,\"style\",d.style,h.style,s),8&u){const i=t.dynamicProps;for(let t=0;t<i.length;t++){const l=i[t],a=d[l],u=h[l];u===a&&\"value\"!==l||r(c,l,a,u,s,e.children,n,o,J)}}1&u&&e.children!==t.children&&a(c,t.children)}else l||null!=f||T(c,t,d,h,n,o,s);((g=h.onVnodeUpdated)||p)&&Fr((()=>{g&&gs(g,n,t,e),p&&Ro(t,e,n,\"updated\")}),o)},F=(e,t,n,o,r,s,i)=>{for(let l=0;l<t.length;l++){const c=e[l],a=t[l],f=c.el&&(c.type===Ur||!es(c,a)||70&c.shapeFlag)?u(c.el):n;h(c,a,f,null,o,r,s,i,!0)}},T=(e,t,n,o,s,i,l)=>{if(n!==o){if(n!==v)for(const c in n)j(c)||c in o||r(e,c,n[c],null,l,t.children,s,i,J);for(const c in o){if(j(c))continue;const a=o[c],u=n[c];a!==u&&\"value\"!==c&&r(e,c,u,a,l,t.children,s,i,J)}\"value\"in o&&r(e,\"value\",n.value,o.value)}},O=(e,t,o,r,s,l,c,a,u)=>{const f=t.el=e?e.el:i(\"\"),p=t.anchor=e?e.anchor:i(\"\");let{patchFlag:d,dynamicChildren:h,slotScopeIds:v}=t;v&&(a=a?a.concat(v):v),null==e?(n(f,o,r),n(p,o,r),E(t.children,o,p,s,l,c,a,u)):d>0&&64&d&&h&&e.dynamicChildren?(F(e.dynamicChildren,h,o,s,l,c,a),(null!=t.key||s&&t===s.subTree)&&Nr(e,t,!0)):B(e,t,o,p,s,l,c,a,u)},P=(e,t,n,o,r,s,i,l,c)=>{t.slotScopeIds=l,null==e?512&t.shapeFlag?r.ctx.activate(t,n,o,i,c):L(t,n,o,r,s,i,c):N(e,t,c)},L=(e,t,n,o,r,s,i)=>{const l=e.component=function(e,t,n){const o=e.type,r=(t?t.appContext:e.appContext)||ms,s={uid:_s++,vnode:e,type:o,parent:t,appContext:r,root:null,next:null,subTree:null,effect:null,update:null,scope:new ee(!0),render:null,proxy:null,exposed:null,exposeProxy:null,withProxy:null,provides:t?t.provides:Object.create(r.provides),accessCache:null,renderCache:[],components:null,directives:null,propsOptions:ur(o,r),emitsOptions:bn(o,r),emit:null,emitted:null,propsDefaults:v,inheritAttrs:o.inheritAttrs,ctx:v,data:v,props:v,attrs:v,slots:v,refs:v,setupState:v,setupContext:null,suspense:n,suspenseId:n?n.pendingId:0,asyncDep:null,asyncResolved:!1,isMounted:!1,isUnmounted:!1,isDeactivated:!1,bc:null,c:null,bm:null,m:null,bu:null,u:null,um:null,bum:null,da:null,a:null,rtg:null,rtc:null,ec:null,sp:null};s.ctx={_:s},s.root=t?t.root:s,s.emit=yn.bind(null,s),e.ce&&e.ce(s);return s}(e,o,r);if(fo(e)&&(l.ctx.renderer=te),function(e,t=!1){Es=t;const{props:n,children:o}=e.vnode,r=ws(e);(function(e,t,n,o=!1){const r={},s={};Y(s,ns,1),e.propsDefaults=Object.create(null),cr(e,t,r,s);for(const i in e.propsOptions[0])i in r||(r[i]=void 0);e.props=n?o?r:gt(r):e.type.props?r:s,e.attrs=s})(e,n,r,t),((e,t)=>{if(32&e.vnode.shapeFlag){const n=t._;n?(e.slots=St(t),Y(t,\"_\",n)):_r(t,e.slots={})}else e.slots={},t&&yr(e,t);Y(e.slots,ns,1)})(e,o);const s=r?function(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=kt(new Proxy(e.ctx,Yo));const{setup:o}=n;if(o){const n=e.setupContext=o.length>1?Ps(e):null;Cs(e),be();const r=Gt(o,e,0,[e.props,n]);if(Ce(),xs(),R(r)){if(r.then(xs,xs),t)return r.then((n=>{As(e,n,t)})).catch((t=>{Jt(t,e,0)}));e.asyncDep=r}else As(e,r,t)}else Os(e,t)}(e,t):void 0;Es=!1}(l),l.asyncDep){if(r&&r.registerDep(l,I),!e.el){const e=l.subTree=is(Dr);y(null,e,t,n)}}else I(l,e,t,n,r,s,i)},N=(e,t,n)=>{const o=t.component=e.component;if(function(e,t,n){const{props:o,children:r,component:s}=e,{props:i,children:l,patchFlag:c}=t,a=s.emitsOptions;if(t.dirs||t.transition)return!0;if(!(n&&c>=0))return!(!r&&!l||l&&l.$stable)||o!==i&&(o?!i||Ln(o,i,a):!!i);if(1024&c)return!0;if(16&c)return o?Ln(o,i,a):!!i;if(8&c){const e=t.dynamicProps;for(let t=0;t<e.length;t++){const n=e[t];if(i[n]!==o[n]&&!Cn(a,n))return!0}}return!1}(e,t,n)){if(o.asyncDep&&!o.asyncResolved)return void M(o,t,n);o.next=t,function(e){const t=Qt.indexOf(e);t>en&&Qt.splice(t,1)}(o.update),o.update()}else t.el=e.el,o.vnode=t},I=(e,t,n,o,r,s,i)=>{const l=e.effect=new he((()=>{if(e.isMounted){let t,{next:n,bu:o,u:l,parent:c,vnode:a}=e,f=n;Lr(e,!1),n?(n.el=a.el,M(e,n,i)):n=a,o&&G(o),(t=n.props&&n.props.onVnodeBeforeUpdate)&&gs(t,c,n,a),Lr(e,!0);const p=Tn(e),d=e.subTree;e.subTree=p,h(d,p,u(d.el),X(d),e,r,s),n.el=p.el,null===f&&Nn(e,p.el),l&&Fr(l,r),(t=n.props&&n.props.onVnodeUpdated)&&Fr((()=>gs(t,c,n,a)),r)}else{let i;const{el:l,props:c}=t,{bm:a,m:u,parent:f}=e,p=co(t);if(Lr(e,!1),a&&G(a),!p&&(i=c&&c.onVnodeBeforeMount)&&gs(i,f,t),Lr(e,!0),l&&oe){const n=()=>{e.subTree=Tn(e),oe(l,e.subTree,e,r,null)};p?t.type.__asyncLoader().then((()=>!e.isUnmounted&&n())):n()}else{const i=e.subTree=Tn(e);h(null,i,n,o,e,r,s),t.el=i.el}if(u&&Fr(u,r),!p&&(i=c&&c.onVnodeMounted)){const e=t;Fr((()=>gs(i,f,e)),r)}(256&t.shapeFlag||f&&co(f.vnode)&&256&f.vnode.shapeFlag)&&e.a&&Fr(e.a,r),e.isMounted=!0,t=n=o=null}}),(()=>cn(c)),e.scope),c=e.update=()=>l.run();c.id=e.uid,Lr(e,!0),c()},M=(e,t,n)=>{t.component=e;const o=e.vnode.props;e.vnode=t,e.next=null,function(e,t,n,o){const{props:r,attrs:s,vnode:{patchFlag:i}}=e,l=St(r),[c]=e.propsOptions;let a=!1;if(!(o||i>0)||16&i){let o;cr(e,t,r,s)&&(a=!0);for(const s in l)t&&(k(t,s)||(o=W(s))!==s&&k(t,o))||(c?!n||void 0===n[s]&&void 0===n[o]||(r[s]=ar(c,l,s,void 0,e,!0)):delete r[s]);if(s!==l)for(const e in s)t&&k(t,e)||(delete s[e],a=!0)}else if(8&i){const n=e.vnode.dynamicProps;for(let o=0;o<n.length;o++){let i=n[o];if(Cn(e.emitsOptions,i))continue;const u=t[i];if(c)if(k(s,i))u!==s[i]&&(s[i]=u,a=!0);else{const t=D(i);r[t]=ar(c,l,t,u,e,!1)}else u!==s[i]&&(s[i]=u,a=!0)}}a&&Se(e,\"set\",\"$attrs\")}(e,t.props,o,n),((e,t,n)=>{const{vnode:o,slots:r}=e;let s=!0,i=v;if(32&o.shapeFlag){const e=t._;e?n&&1===e?s=!1:(x(r,t),n||1!==e||delete r._):(s=!t.$stable,_r(t,r)),i=t}else t&&(yr(e,t),i={default:1});if(s)for(const l in r)vr(l)||l in i||delete r[l]})(e,t.children,n),be(),fn(),Ce()},B=(e,t,n,o,r,s,i,l,c=!1)=>{const u=e&&e.children,f=e?e.shapeFlag:0,p=t.children,{patchFlag:d,shapeFlag:h}=t;if(d>0){if(128&d)return void U(u,p,n,o,r,s,i,l,c);if(256&d)return void V(u,p,n,o,r,s,i,l,c)}8&h?(16&f&&J(u,r,s),p!==u&&a(n,p)):16&f?16&h?U(u,p,n,o,r,s,i,l,c):J(u,r,s,!0):(8&f&&a(n,\"\"),16&h&&E(p,n,o,r,s,i,l,c))},V=(e,t,n,o,r,s,i,l,c)=>{const a=(e=e||g).length,u=(t=t||g).length,f=Math.min(a,u);let p;for(p=0;p<f;p++){const o=t[p]=c?ds(t[p]):ps(t[p]);h(e[p],o,n,null,r,s,i,l,c)}a>u?J(e,r,s,!0,!1,f):E(t,n,o,r,s,i,l,c,f)},U=(e,t,n,o,r,s,i,l,c)=>{let a=0;const u=t.length;let f=e.length-1,p=u-1;for(;a<=f&&a<=p;){const o=e[a],u=t[a]=c?ds(t[a]):ps(t[a]);if(!es(o,u))break;h(o,u,n,null,r,s,i,l,c),a++}for(;a<=f&&a<=p;){const o=e[f],a=t[p]=c?ds(t[p]):ps(t[p]);if(!es(o,a))break;h(o,a,n,null,r,s,i,l,c),f--,p--}if(a>f){if(a<=p){const e=p+1,f=e<u?t[e].el:o;for(;a<=p;)h(null,t[a]=c?ds(t[a]):ps(t[a]),n,f,r,s,i,l,c),a++}}else if(a>p)for(;a<=f;)H(e[a],r,s,!0),a++;else{const d=a,v=a,m=new Map;for(a=v;a<=p;a++){const e=t[a]=c?ds(t[a]):ps(t[a]);null!=e.key&&m.set(e.key,a)}let _,y=0;const b=p-v+1;let C=!1,x=0;const w=new Array(b);for(a=0;a<b;a++)w[a]=0;for(a=d;a<=f;a++){const o=e[a];if(y>=b){H(o,r,s,!0);continue}let u;if(null!=o.key)u=m.get(o.key);else for(_=v;_<=p;_++)if(0===w[_-v]&&es(o,t[_])){u=_;break}void 0===u?H(o,r,s,!0):(w[u-v]=a+1,u>=x?x=u:C=!0,h(o,t[u],n,null,r,s,i,l,c),y++)}const S=C?function(e){const t=e.slice(),n=[0];let o,r,s,i,l;const c=e.length;for(o=0;o<c;o++){const c=e[o];if(0!==c){if(r=n[n.length-1],e[r]<c){t[o]=r,n.push(o);continue}for(s=0,i=n.length-1;s<i;)l=s+i>>1,e[n[l]]<c?s=l+1:i=l;c<e[n[s]]&&(s>0&&(t[o]=n[s-1]),n[s]=o)}}s=n.length,i=n[s-1];for(;s-- >0;)n[s]=i,i=t[i];return n}(w):g;for(_=S.length-1,a=b-1;a>=0;a--){const e=v+a,f=t[e],p=e+1<u?t[e+1].el:o;0===w[a]?h(null,f,n,p,r,s,i,l,c):C&&(_<0||a!==S[_]?$(f,n,p,2):_--)}}},$=(e,t,o,r,s=null)=>{const{el:i,type:l,transition:c,children:a,shapeFlag:u}=e;if(6&u)return void $(e.component.subTree,t,o,r);if(128&u)return void e.suspense.move(t,o,r);if(64&u)return void l.move(e,t,o,te);if(l===Ur){n(i,t,o);for(let e=0;e<a.length;e++)$(a[e],t,o,r);return void n(e.anchor,t,o)}if(l===Hr)return void(({el:e,anchor:t},o,r)=>{let s;for(;e&&e!==t;)s=f(e),n(e,o,r),e=s;n(t,o,r)})(e,t,o);if(2!==r&&1&u&&c)if(0===r)c.beforeEnter(i),n(i,t,o),Fr((()=>c.enter(i)),s);else{const{leave:e,delayLeave:r,afterLeave:s}=c,l=()=>n(i,t,o),a=()=>{e(i,(()=>{l(),s&&s()}))};r?r(i,l,a):a()}else n(i,t,o)},H=(e,t,n,o=!1,r=!1)=>{const{type:s,props:i,ref:l,children:c,dynamicChildren:a,shapeFlag:u,patchFlag:f,dirs:p}=e;if(null!=l&&wr(l,null,n,e,!0),256&u)return void t.ctx.deactivate(e);const d=1&u&&p,h=!co(e);let v;if(h&&(v=i&&i.onVnodeBeforeUnmount)&&gs(v,t,e),6&u)q(e.component,n,o);else{if(128&u)return void e.suspense.unmount(n,o);d&&Ro(e,null,t,\"beforeUnmount\"),64&u?e.type.remove(e,t,n,r,te,o):a&&(s!==Ur||f>0&&64&f)?J(a,t,n,!1,!0):(s===Ur&&384&f||!r&&16&u)&&J(c,t,n),o&&z(e)}(h&&(v=i&&i.onVnodeUnmounted)||d)&&Fr((()=>{v&&gs(v,t,e),d&&Ro(e,null,t,\"unmounted\")}),n)},z=e=>{const{type:t,el:n,anchor:r,transition:s}=e;if(t===Ur)return void K(n,r);if(t===Hr)return void(({el:e,anchor:t})=>{let n;for(;e&&e!==t;)n=f(e),o(e),e=n;o(t)})(e);const i=()=>{o(n),s&&!s.persisted&&s.afterLeave&&s.afterLeave()};if(1&e.shapeFlag&&s&&!s.persisted){const{leave:t,delayLeave:o}=s,r=()=>t(n,i);o?o(e.el,i,r):r()}else i()},K=(e,t)=>{let n;for(;e!==t;)n=f(e),o(e),e=n;o(t)},q=(e,t,n)=>{const{bum:o,scope:r,update:s,subTree:i,um:l}=e;o&&G(o),r.stop(),s&&(s.active=!1,H(i,e,t,n)),l&&Fr(l,t),Fr((()=>{e.isUnmounted=!0}),t),t&&t.pendingBranch&&!t.isUnmounted&&e.asyncDep&&!e.asyncResolved&&e.suspenseId===t.pendingId&&(t.deps--,0===t.deps&&t.resolve())},J=(e,t,n,o=!1,r=!1,s=0)=>{for(let i=s;i<e.length;i++)H(e[i],t,n,o,r)},X=e=>6&e.shapeFlag?X(e.component.subTree):128&e.shapeFlag?e.suspense.next():f(e.anchor||e.el),Q=(e,t,n)=>{null==e?t._vnode&&H(t._vnode,null,null,!0):h(t._vnode||null,e,t,null,null,null,n),fn(),pn(),t._vnode=e},te={p:h,um:H,m:$,r:z,mt:L,mc:E,pc:B,pbc:F,n:X,o:e};let ne,oe;return t&&([ne,oe]=t(te)),{render:Q,hydrate:ne,createApp:xr(Q,ne)}}function Lr({effect:e,update:t},n){e.allowRecurse=t.allowRecurse=n}function Nr(e,t,n=!1){const o=e.children,r=t.children;if(E(o)&&E(r))for(let s=0;s<o.length;s++){const e=o[s];let t=r[s];1&t.shapeFlag&&!t.dynamicChildren&&((t.patchFlag<=0||32===t.patchFlag)&&(t=r[s]=ds(r[s]),t.el=e.el),n||Nr(e,t)),t.type===$r&&(t.el=e.el)}}const Rr=e=>e&&(e.disabled||\"\"===e.disabled),Ir=e=>\"undefined\"!=typeof SVGElement&&e instanceof SVGElement,Mr=(e,t)=>{const n=e&&e.to;if(P(n)){if(t){return t(n)}return null}return n};function Br(e,t,n,{o:{insert:o},m:r},s=2){0===s&&o(e.targetAnchor,t,n);const{el:i,anchor:l,shapeFlag:c,children:a,props:u}=e,f=2===s;if(f&&o(i,t,n),(!f||Rr(u))&&16&c)for(let p=0;p<a.length;p++)r(a[p],t,n,2);f&&o(l,t,n)}const Vr={__isTeleport:!0,process(e,t,n,o,r,s,i,l,c,a){const{mc:u,pc:f,pbc:p,o:{insert:d,querySelector:h,createText:v}}=a,g=Rr(t.props);let{shapeFlag:m,children:_,dynamicChildren:y}=t;if(null==e){const e=t.el=v(\"\"),a=t.anchor=v(\"\");d(e,n,o),d(a,n,o);const f=t.target=Mr(t.props,h),p=t.targetAnchor=v(\"\");f&&(d(p,f),i=i||Ir(f));const y=(e,t)=>{16&m&&u(_,e,t,r,s,i,l,c)};g?y(n,a):f&&y(f,p)}else{t.el=e.el;const o=t.anchor=e.anchor,u=t.target=e.target,d=t.targetAnchor=e.targetAnchor,v=Rr(e.props),m=v?n:u,_=v?o:d;if(i=i||Ir(u),y?(p(e.dynamicChildren,y,m,r,s,i,l),Nr(e,t,!0)):c||f(e,t,m,_,r,s,i,l,!1),g)v||Br(t,n,o,a,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const e=t.target=Mr(t.props,h);e&&Br(t,e,null,a,0)}else v&&Br(t,u,d,a,1)}jr(t)},remove(e,t,n,o,{um:r,o:{remove:s}},i){const{shapeFlag:l,children:c,anchor:a,targetAnchor:u,target:f,props:p}=e;if(f&&s(u),(i||!Rr(p))&&(s(a),16&l))for(let d=0;d<c.length;d++){const e=c[d];r(e,t,n,!0,!!e.dynamicChildren)}},move:Br,hydrate:function(e,t,n,o,r,s,{o:{nextSibling:i,parentNode:l,querySelector:c}},a){const u=t.target=Mr(t.props,c);if(u){const c=u._lpa||u.firstChild;if(16&t.shapeFlag)if(Rr(t.props))t.anchor=a(i(e),t,l(e),n,o,r,s),t.targetAnchor=c;else{t.anchor=i(e);let l=c;for(;l;)if(l=i(l),l&&8===l.nodeType&&\"teleport anchor\"===l.data){t.targetAnchor=l,u._lpa=t.targetAnchor&&i(t.targetAnchor);break}a(c,t,u,n,o,r,s)}jr(t)}return t.anchor&&i(t.anchor)}};function jr(e){const t=e.ctx;if(t&&t.ut){let n=e.children[0].el;for(;n!==e.targetAnchor;)1===n.nodeType&&n.setAttribute(\"data-v-owner\",t.uid),n=n.nextSibling;t.ut()}}const Ur=Symbol(void 0),$r=Symbol(void 0),Dr=Symbol(void 0),Hr=Symbol(void 0),Wr=[];let zr=null;function Kr(e=!1){Wr.push(zr=e?null:[])}function qr(){Wr.pop(),zr=Wr[Wr.length-1]||null}let Gr=1;function Yr(e){Gr+=e}function Jr(e){return e.dynamicChildren=Gr>0?zr||g:null,qr(),Gr>0&&zr&&zr.push(e),e}function Xr(e,t,n,o,r,s){return Jr(ss(e,t,n,o,r,s,!0))}function Zr(e,t,n,o,r){return Jr(is(e,t,n,o,r,!0))}function Qr(e){return!!e&&!0===e.__v_isVNode}function es(e,t){return e.type===t.type&&e.key===t.key}function ts(e){}const ns=\"__vInternal\",os=({key:e})=>null!=e?e:null,rs=({ref:e,ref_key:t,ref_for:n})=>null!=e?P(e)||Ot(e)||O(e)?{i:xn,r:e,k:t,f:!!n}:e:null;function ss(e,t=null,n=null,o=0,r=null,s=(e===Ur?0:1),i=!1,l=!1){const c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&os(t),ref:t&&rs(t),scopeId:wn,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:s,patchFlag:o,dynamicProps:r,dynamicChildren:null,appContext:null,ctx:xn};return l?(hs(c,n),128&s&&e.normalize(c)):n&&(c.shapeFlag|=P(n)?8:16),Gr>0&&!i&&zr&&(c.patchFlag>0||6&s)&&32!==c.patchFlag&&zr.push(c),c}const is=function(e,t=null,o=null,r=0,s=null,i=!1){e&&e!==Mo||(e=Dr);if(Qr(e)){const n=cs(e,t,!0);return o&&hs(n,o),Gr>0&&!i&&zr&&(6&n.shapeFlag?zr[zr.indexOf(e)]=n:zr.push(n)),n.patchFlag|=-2,n}c=e,O(c)&&\"__vccOpts\"in c&&(e=e.__vccOpts);var c;if(t){t=ls(t);let{class:e,style:o}=t;e&&!P(e)&&(t.class=l(e)),N(o)&&(wt(o)&&!E(o)&&(o=x({},o)),t.style=n(o))}const a=P(e)?1:Rn(e)?128:(e=>e.__isTeleport)(e)?64:N(e)?4:O(e)?2:0;return ss(e,t,o,r,s,a,i,!0)};function ls(e){return e?wt(e)||ns in e?x({},e):e:null}function cs(e,t,n=!1){const{props:o,ref:r,patchFlag:s,children:i}=e,l=t?vs(o||{},t):o;return{__v_isVNode:!0,__v_skip:!0,type:e.type,props:l,key:l&&os(l),ref:t&&t.ref?n&&r?E(r)?r.concat(rs(t)):[r,rs(t)]:rs(t):r,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:i,target:e.target,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==Ur?-1===s?16:16|s:s,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:e.transition,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&cs(e.ssContent),ssFallback:e.ssFallback&&cs(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce}}function as(e=\" \",t=0){return is($r,null,e,t)}function us(e,t){const n=is(Hr,null,e);return n.staticCount=t,n}function fs(e=\"\",t=!1){return t?(Kr(),Zr(Dr,null,e)):is(Dr,null,e)}function ps(e){return null==e||\"boolean\"==typeof e?is(Dr):E(e)?is(Ur,null,e.slice()):\"object\"==typeof e?ds(e):is($r,null,String(e))}function ds(e){return null===e.el&&-1!==e.patchFlag||e.memo?e:cs(e)}function hs(e,t){let n=0;const{shapeFlag:o}=e;if(null==t)t=null;else if(E(t))n=16;else if(\"object\"==typeof t){if(65&o){const n=t.default;return void(n&&(n._c&&(n._d=!1),hs(e,n()),n._c&&(n._d=!0)))}{n=32;const o=t._;o||ns in t?3===o&&xn&&(1===xn.slots._?t._=1:(t._=2,e.patchFlag|=1024)):t._ctx=xn}}else O(t)?(t={default:t,_ctx:xn},n=32):(t=String(t),64&o?(n=16,t=[as(t)]):n=8);e.children=t,e.shapeFlag|=n}function vs(...e){const t={};for(let o=0;o<e.length;o++){const r=e[o];for(const e in r)if(\"class\"===e)t.class!==r.class&&(t.class=l([t.class,r.class]));else if(\"style\"===e)t.style=n([t.style,r.style]);else if(b(e)){const n=t[e],o=r[e];!o||n===o||E(n)&&n.includes(o)||(t[e]=n?[].concat(n,o):o)}else\"\"!==e&&(t[e]=r[e])}return t}function gs(e,t,n,o=null){Yt(e,t,7,[n,o])}const ms=br();let _s=0;let ys=null;const bs=()=>ys||xn,Cs=e=>{ys=e,e.scope.on()},xs=()=>{ys&&ys.scope.off(),ys=null};function ws(e){return 4&e.vnode.shapeFlag}let Ss,ks,Es=!1;function As(e,t,n){O(t)?e.render=t:N(t)&&(e.setupState=Vt(t)),Os(e,n)}function Fs(e){Ss=e,ks=e=>{e.render._rc&&(e.withProxy=new Proxy(e.ctx,Jo))}}const Ts=()=>!Ss;function Os(e,t,n){const o=e.type;if(!e.render){if(!t&&Ss&&!o.render){const t=o.template||tr(e).template;if(t){const{isCustomElement:n,compilerOptions:r}=e.appContext.config,{delimiters:s,compilerOptions:i}=o,l=x(x({isCustomElement:n,delimiters:s},r),i);o.render=Ss(t,l)}}e.render=o.render||m,ks&&ks(e)}Cs(e),be(),Zo(e),Ce(),xs()}function Ps(e){const t=t=>{e.exposed=t||{}};let n;return{get attrs(){return n||(n=function(e){return new Proxy(e.attrs,{get:(t,n)=>(xe(e,0,\"$attrs\"),t[n])})}(e))},slots:e.slots,emit:e.emit,expose:t}}function Ls(e){if(e.exposed)return e.exposeProxy||(e.exposeProxy=new Proxy(Vt(kt(e.exposed)),{get:(t,n)=>n in t?t[n]:n in qo?qo[n](e):void 0,has:(e,t)=>t in e||t in qo}))}function Ns(e,t=!0){return O(e)?e.displayName||e.name:e.name||t&&e.__name}const Rs=(e,t)=>function(e,t,n=!1){let o,r;const s=O(e);return s?(o=e,r=m):(o=e.get,r=e.set),new zt(o,r,s||!r,n)}(e,0,Es);function Is(){return null}function Ms(){return null}function Bs(e){}function Vs(e,t){return null}function js(){return $s().slots}function Us(){return $s().attrs}function $s(){const e=bs();return e.setupContext||(e.setupContext=Ps(e))}function Ds(e,t){const n=E(e)?e.reduce(((e,t)=>(e[t]={},e)),{}):e;for(const o in t){const e=n[o];e?E(e)||O(e)?n[o]={type:e,default:t[o]}:e.default=t[o]:null===e&&(n[o]={default:t[o]})}return n}function Hs(e,t){const n={};for(const o in e)t.includes(o)||Object.defineProperty(n,o,{enumerable:!0,get:()=>e[o]});return n}function Ws(e){const t=bs();let n=e();return xs(),R(n)&&(n=n.catch((e=>{throw Cs(t),e}))),[n,()=>Cs(t)]}function zs(e,t,n){const o=arguments.length;return 2===o?N(t)&&!E(t)?Qr(t)?is(e,null,[t]):is(e,t):is(e,null,t):(o>3?n=Array.prototype.slice.call(arguments,2):3===o&&Qr(n)&&(n=[n]),is(e,t,n))}const Ks=Symbol(\"\"),qs=()=>Dn(Ks);function Gs(){}function Ys(e,t,n,o){const r=n[o];if(r&&Js(r,e))return r;const s=t();return s.memo=e.slice(),n[o]=s}function Js(e,t){const n=e.memo;if(n.length!=t.length)return!1;for(let o=0;o<n.length;o++)if(q(n[o],t[o]))return!1;return Gr>0&&zr&&zr.push(e),!0}const Xs=\"3.2.47\",Zs=null,Qs=null,ei=null,ti=\"undefined\"!=typeof document?document:null,ni=ti&&ti.createElement(\"template\"),oi={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,o)=>{const r=t?ti.createElementNS(\"http://www.w3.org/2000/svg\",e):ti.createElement(e,n?{is:n}:void 0);return\"select\"===e&&o&&null!=o.multiple&&r.setAttribute(\"multiple\",o.multiple),r},createText:e=>ti.createTextNode(e),createComment:e=>ti.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>ti.querySelector(e),setScopeId(e,t){e.setAttribute(t,\"\")},insertStaticContent(e,t,n,o,r,s){const i=n?n.previousSibling:t.lastChild;if(r&&(r===s||r.nextSibling))for(;t.insertBefore(r.cloneNode(!0),n),r!==s&&(r=r.nextSibling););else{ni.innerHTML=o?`<svg>${e}</svg>`:e;const r=ni.content;if(o){const e=r.firstChild;for(;e.firstChild;)r.appendChild(e.firstChild);r.removeChild(e)}t.insertBefore(r,n)}return[i?i.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}};const ri=/\\s*!important$/;function si(e,t,n){if(E(n))n.forEach((n=>si(e,t,n)));else if(null==n&&(n=\"\"),t.startsWith(\"--\"))e.setProperty(t,n);else{const o=function(e,t){const n=li[t];if(n)return n;let o=D(t);if(\"filter\"!==o&&o in e)return li[t]=o;o=z(o);for(let r=0;r<ii.length;r++){const n=ii[r]+o;if(n in e)return li[t]=n}return t}(e,t);ri.test(n)?e.setProperty(W(o),n.replace(ri,\"\"),\"important\"):e[o]=n}}const ii=[\"Webkit\",\"Moz\",\"ms\"],li={};const ci=\"http://www.w3.org/1999/xlink\";function ai(e,t,n,o){e.addEventListener(t,n,o)}function ui(e,t,n,o,r=null){const s=e._vei||(e._vei={}),i=s[t];if(o&&i)i.value=o;else{const[n,l]=function(e){let t;if(fi.test(e)){let n;for(t={};n=e.match(fi);)e=e.slice(0,e.length-n[0].length),t[n[0].toLowerCase()]=!0}return[\":\"===e[2]?e.slice(3):W(e.slice(2)),t]}(t);if(o){const i=s[t]=function(e,t){const n=e=>{if(e._vts){if(e._vts<=n.attached)return}else e._vts=Date.now();Yt(function(e,t){if(E(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map((e=>t=>!t._stopped&&e&&e(t)))}return t}(e,n.value),t,5,[e])};return n.value=e,n.attached=(()=>pi||(di.then((()=>pi=0)),pi=Date.now()))(),n}(o,r);ai(e,n,i,l)}else i&&(!function(e,t,n,o){e.removeEventListener(t,n,o)}(e,n,i,l),s[t]=void 0)}}const fi=/(?:Once|Passive|Capture)$/;let pi=0;const di=Promise.resolve();const hi=/^on[a-z]/;function vi(e,t){const n=lo(e);class o extends _i{constructor(e){super(n,e,t)}}return o.def=n,o}const gi=e=>vi(e,_l),mi=\"undefined\"!=typeof HTMLElement?HTMLElement:class{};class _i extends mi{constructor(e,t={},n){super(),this._def=e,this._props=t,this._instance=null,this._connected=!1,this._resolved=!1,this._numberProps=null,this.shadowRoot&&n?n(this._createVNode(),this.shadowRoot):(this.attachShadow({mode:\"open\"}),this._def.__asyncLoader||this._resolveProps(this._def))}connectedCallback(){this._connected=!0,this._instance||(this._resolved?this._update():this._resolveDef())}disconnectedCallback(){this._connected=!1,ln((()=>{this._connected||(ml(null,this.shadowRoot),this._instance=null)}))}_resolveDef(){this._resolved=!0;for(let n=0;n<this.attributes.length;n++)this._setAttr(this.attributes[n].name);new MutationObserver((e=>{for(const t of e)this._setAttr(t.attributeName)})).observe(this,{attributes:!0});const e=(e,t=!1)=>{const{props:n,styles:o}=e;let r;if(n&&!E(n))for(const s in n){const e=n[s];(e===Number||e&&e.type===Number)&&(s in this._props&&(this._props[s]=X(this._props[s])),(r||(r=Object.create(null)))[D(s)]=!0)}this._numberProps=r,t&&this._resolveProps(e),this._applyStyles(o),this._update()},t=this._def.__asyncLoader;t?t().then((t=>e(t,!0))):e(this._def)}_resolveProps(e){const{props:t}=e,n=E(t)?t:Object.keys(t||{});for(const o of Object.keys(this))\"_\"!==o[0]&&n.includes(o)&&this._setProp(o,this[o],!0,!1);for(const o of n.map(D))Object.defineProperty(this,o,{get(){return this._getProp(o)},set(e){this._setProp(o,e)}})}_setAttr(e){let t=this.getAttribute(e);const n=D(e);this._numberProps&&this._numberProps[n]&&(t=X(t)),this._setProp(n,t,!1)}_getProp(e){return this._props[e]}_setProp(e,t,n=!0,o=!0){t!==this._props[e]&&(this._props[e]=t,o&&this._instance&&this._update(),n&&(!0===t?this.setAttribute(W(e),\"\"):\"string\"==typeof t||\"number\"==typeof t?this.setAttribute(W(e),t+\"\"):t||this.removeAttribute(W(e))))}_update(){ml(this._createVNode(),this.shadowRoot)}_createVNode(){const e=is(this._def,x({},this._props));return this._instance||(e.ce=e=>{this._instance=e,e.isCE=!0;const t=(e,t)=>{this.dispatchEvent(new CustomEvent(e,{detail:t}))};e.emit=(e,...n)=>{t(e,n),W(e)!==e&&t(W(e),n)};let n=this;for(;n=n&&(n.parentNode||n.host);)if(n instanceof _i){e.parent=n._instance,e.provides=n._instance.provides;break}}),e}_applyStyles(e){e&&e.forEach((e=>{const t=document.createElement(\"style\");t.textContent=e,this.shadowRoot.appendChild(t)}))}}function yi(e=\"$style\"){{const t=bs();if(!t)return v;const n=t.type.__cssModules;if(!n)return v;const o=n[e];return o||v}}function bi(e){const t=bs();if(!t)return;const n=t.ut=(n=e(t.proxy))=>{Array.from(document.querySelectorAll(`[data-v-owner=\"${t.uid}\"]`)).forEach((e=>xi(e,n)))},o=()=>{const o=e(t.proxy);Ci(t.subTree,o),n(o)};Wn(o),So((()=>{const e=new MutationObserver(o);e.observe(t.subTree.el.parentNode,{childList:!0}),Fo((()=>e.disconnect()))}))}function Ci(e,t){if(128&e.shapeFlag){const n=e.suspense;e=n.activeBranch,n.pendingBranch&&!n.isHydrating&&n.effects.push((()=>{Ci(n.activeBranch,t)}))}for(;e.component;)e=e.component.subTree;if(1&e.shapeFlag&&e.el)xi(e.el,t);else if(e.type===Ur)e.children.forEach((e=>Ci(e,t)));else if(e.type===Hr){let{el:n,anchor:o}=e;for(;n&&(xi(n,t),n!==o);)n=n.nextSibling}}function xi(e,t){if(1===e.nodeType){const n=e.style;for(const e in t)n.setProperty(`--${e}`,t[e])}}const wi=(e,{slots:t})=>zs(eo,Fi(e),t);wi.displayName=\"Transition\";const Si={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},ki=wi.props=x({},eo.props,Si),Ei=(e,t=[])=>{E(e)?e.forEach((e=>e(...t))):e&&e(...t)},Ai=e=>!!e&&(E(e)?e.some((e=>e.length>1)):e.length>1);function Fi(e){const t={};for(const x in e)x in Si||(t[x]=e[x]);if(!1===e.css)return t;const{name:n=\"v\",type:o,duration:r,enterFromClass:s=`${n}-enter-from`,enterActiveClass:i=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:c=s,appearActiveClass:a=i,appearToClass:u=l,leaveFromClass:f=`${n}-leave-from`,leaveActiveClass:p=`${n}-leave-active`,leaveToClass:d=`${n}-leave-to`}=e,h=function(e){if(null==e)return null;if(N(e))return[Ti(e.enter),Ti(e.leave)];{const t=Ti(e);return[t,t]}}(r),v=h&&h[0],g=h&&h[1],{onBeforeEnter:m,onEnter:_,onEnterCancelled:y,onLeave:b,onLeaveCancelled:C,onBeforeAppear:w=m,onAppear:S=_,onAppearCancelled:k=y}=t,E=(e,t,n)=>{Pi(e,t?u:l),Pi(e,t?a:i),n&&n()},A=(e,t)=>{e._isLeaving=!1,Pi(e,f),Pi(e,d),Pi(e,p),t&&t()},F=e=>(t,n)=>{const r=e?S:_,i=()=>E(t,e,n);Ei(r,[t,i]),Li((()=>{Pi(t,e?c:s),Oi(t,e?u:l),Ai(r)||Ri(t,o,v,i)}))};return x(t,{onBeforeEnter(e){Ei(m,[e]),Oi(e,s),Oi(e,i)},onBeforeAppear(e){Ei(w,[e]),Oi(e,c),Oi(e,a)},onEnter:F(!1),onAppear:F(!0),onLeave(e,t){e._isLeaving=!0;const n=()=>A(e,t);Oi(e,f),Vi(),Oi(e,p),Li((()=>{e._isLeaving&&(Pi(e,f),Oi(e,d),Ai(b)||Ri(e,o,g,n))})),Ei(b,[e,n])},onEnterCancelled(e){E(e,!1),Ei(y,[e])},onAppearCancelled(e){E(e,!0),Ei(k,[e])},onLeaveCancelled(e){A(e),Ei(C,[e])}})}function Ti(e){return X(e)}function Oi(e,t){t.split(/\\s+/).forEach((t=>t&&e.classList.add(t))),(e._vtc||(e._vtc=new Set)).add(t)}function Pi(e,t){t.split(/\\s+/).forEach((t=>t&&e.classList.remove(t)));const{_vtc:n}=e;n&&(n.delete(t),n.size||(e._vtc=void 0))}function Li(e){requestAnimationFrame((()=>{requestAnimationFrame(e)}))}let Ni=0;function Ri(e,t,n,o){const r=e._endId=++Ni,s=()=>{r===e._endId&&o()};if(n)return setTimeout(s,n);const{type:i,timeout:l,propCount:c}=Ii(e,t);if(!i)return o();const a=i+\"end\";let u=0;const f=()=>{e.removeEventListener(a,p),s()},p=t=>{t.target===e&&++u>=c&&f()};setTimeout((()=>{u<c&&f()}),l+1),e.addEventListener(a,p)}function Ii(e,t){const n=window.getComputedStyle(e),o=e=>(n[e]||\"\").split(\", \"),r=o(\"transitionDelay\"),s=o(\"transitionDuration\"),i=Mi(r,s),l=o(\"animationDelay\"),c=o(\"animationDuration\"),a=Mi(l,c);let u=null,f=0,p=0;\"transition\"===t?i>0&&(u=\"transition\",f=i,p=s.length):\"animation\"===t?a>0&&(u=\"animation\",f=a,p=c.length):(f=Math.max(i,a),u=f>0?i>a?\"transition\":\"animation\":null,p=u?\"transition\"===u?s.length:c.length:0);return{type:u,timeout:f,propCount:p,hasTransform:\"transition\"===u&&/\\b(transform|all)(,|$)/.test(o(\"transitionProperty\").toString())}}function Mi(e,t){for(;e.length<t.length;)e=e.concat(e);return Math.max(...t.map(((t,n)=>Bi(t)+Bi(e[n]))))}function Bi(e){return 1e3*Number(e.slice(0,-1).replace(\",\",\".\"))}function Vi(){return document.body.offsetHeight}const ji=new WeakMap,Ui=new WeakMap,$i={name:\"TransitionGroup\",props:x({},ki,{tag:String,moveClass:String}),setup(e,{slots:t}){const n=bs(),o=Zn();let r,s;return Eo((()=>{if(!r.length)return;const t=e.moveClass||`${e.name||\"v\"}-move`;if(!function(e,t,n){const o=e.cloneNode();e._vtc&&e._vtc.forEach((e=>{e.split(/\\s+/).forEach((e=>e&&o.classList.remove(e)))}));n.split(/\\s+/).forEach((e=>e&&o.classList.add(e))),o.style.display=\"none\";const r=1===t.nodeType?t:t.parentNode;r.appendChild(o);const{hasTransform:s}=Ii(o);return r.removeChild(o),s}(r[0].el,n.vnode.el,t))return;r.forEach(Hi),r.forEach(Wi);const o=r.filter(zi);Vi(),o.forEach((e=>{const n=e.el,o=n.style;Oi(n,t),o.transform=o.webkitTransform=o.transitionDuration=\"\";const r=n._moveCb=e=>{e&&e.target!==n||e&&!/transform$/.test(e.propertyName)||(n.removeEventListener(\"transitionend\",r),n._moveCb=null,Pi(n,t))};n.addEventListener(\"transitionend\",r)}))})),()=>{const i=St(e),l=Fi(i);let c=i.tag||Ur;r=s,s=t.default?io(t.default()):[];for(let e=0;e<s.length;e++){const t=s[e];null!=t.key&&so(t,no(t,l,o,n))}if(r)for(let e=0;e<r.length;e++){const t=r[e];so(t,no(t,l,o,n)),ji.set(t,t.el.getBoundingClientRect())}return is(c,null,s)}}},Di=$i;function Hi(e){const t=e.el;t._moveCb&&t._moveCb(),t._enterCb&&t._enterCb()}function Wi(e){Ui.set(e,e.el.getBoundingClientRect())}function zi(e){const t=ji.get(e),n=Ui.get(e),o=t.left-n.left,r=t.top-n.top;if(o||r){const t=e.el.style;return t.transform=t.webkitTransform=`translate(${o}px,${r}px)`,t.transitionDuration=\"0s\",e}}const Ki=e=>{const t=e.props[\"onUpdate:modelValue\"]||!1;return E(t)?e=>G(t,e):t};function qi(e){e.target.composing=!0}function Gi(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event(\"input\")))}const Yi={created(e,{modifiers:{lazy:t,trim:n,number:o}},r){e._assign=Ki(r);const s=o||r.props&&\"number\"===r.props.type;ai(e,t?\"change\":\"input\",(t=>{if(t.target.composing)return;let o=e.value;n&&(o=o.trim()),s&&(o=J(o)),e._assign(o)})),n&&ai(e,\"change\",(()=>{e.value=e.value.trim()})),t||(ai(e,\"compositionstart\",qi),ai(e,\"compositionend\",Gi),ai(e,\"change\",Gi))},mounted(e,{value:t}){e.value=null==t?\"\":t},beforeUpdate(e,{value:t,modifiers:{lazy:n,trim:o,number:r}},s){if(e._assign=Ki(s),e.composing)return;if(document.activeElement===e&&\"range\"!==e.type){if(n)return;if(o&&e.value.trim()===t)return;if((r||\"number\"===e.type)&&J(e.value)===t)return}const i=null==t?\"\":t;e.value!==i&&(e.value=i)}},Ji={deep:!0,created(e,t,n){e._assign=Ki(n),ai(e,\"change\",(()=>{const t=e._modelValue,n=tl(e),o=e.checked,r=e._assign;if(E(t)){const e=p(t,n),s=-1!==e;if(o&&!s)r(t.concat(n));else if(!o&&s){const n=[...t];n.splice(e,1),r(n)}}else if(F(t)){const e=new Set(t);o?e.add(n):e.delete(n),r(e)}else r(nl(e,o))}))},mounted:Xi,beforeUpdate(e,t,n){e._assign=Ki(n),Xi(e,t,n)}};function Xi(e,{value:t,oldValue:n},o){e._modelValue=t,E(t)?e.checked=p(t,o.props.value)>-1:F(t)?e.checked=t.has(o.props.value):t!==n&&(e.checked=f(t,nl(e,!0)))}const Zi={created(e,{value:t},n){e.checked=f(t,n.props.value),e._assign=Ki(n),ai(e,\"change\",(()=>{e._assign(tl(e))}))},beforeUpdate(e,{value:t,oldValue:n},o){e._assign=Ki(o),t!==n&&(e.checked=f(t,o.props.value))}},Qi={deep:!0,created(e,{value:t,modifiers:{number:n}},o){const r=F(t);ai(e,\"change\",(()=>{const t=Array.prototype.filter.call(e.options,(e=>e.selected)).map((e=>n?J(tl(e)):tl(e)));e._assign(e.multiple?r?new Set(t):t:t[0])})),e._assign=Ki(o)},mounted(e,{value:t}){el(e,t)},beforeUpdate(e,t,n){e._assign=Ki(n)},updated(e,{value:t}){el(e,t)}};function el(e,t){const n=e.multiple;if(!n||E(t)||F(t)){for(let o=0,r=e.options.length;o<r;o++){const r=e.options[o],s=tl(r);if(n)r.selected=E(t)?p(t,s)>-1:t.has(s);else if(f(tl(r),t))return void(e.selectedIndex!==o&&(e.selectedIndex=o))}n||-1===e.selectedIndex||(e.selectedIndex=-1)}}function tl(e){return\"_value\"in e?e._value:e.value}function nl(e,t){const n=t?\"_trueValue\":\"_falseValue\";return n in e?e[n]:t}const ol={created(e,t,n){rl(e,t,n,null,\"created\")},mounted(e,t,n){rl(e,t,n,null,\"mounted\")},beforeUpdate(e,t,n,o){rl(e,t,n,o,\"beforeUpdate\")},updated(e,t,n,o){rl(e,t,n,o,\"updated\")}};function rl(e,t,n,o,r){const s=function(e,t){switch(e){case\"SELECT\":return Qi;case\"TEXTAREA\":return Yi;default:switch(t){case\"checkbox\":return Ji;case\"radio\":return Zi;default:return Yi}}}(e.tagName,n.props&&n.props.type)[r];s&&s(e,t,n,o)}const sl=[\"ctrl\",\"shift\",\"alt\",\"meta\"],il={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>\"button\"in e&&0!==e.button,middle:e=>\"button\"in e&&1!==e.button,right:e=>\"button\"in e&&2!==e.button,exact:(e,t)=>sl.some((n=>e[`${n}Key`]&&!t.includes(n)))},ll=(e,t)=>(n,...o)=>{for(let e=0;e<t.length;e++){const o=il[t[e]];if(o&&o(n,t))return}return e(n,...o)},cl={esc:\"escape\",space:\" \",up:\"arrow-up\",left:\"arrow-left\",right:\"arrow-right\",down:\"arrow-down\",delete:\"backspace\"},al=(e,t)=>n=>{if(!(\"key\"in n))return;const o=W(n.key);return t.some((e=>e===o||cl[e]===o))?e(n):void 0},ul={beforeMount(e,{value:t},{transition:n}){e._vod=\"none\"===e.style.display?\"\":e.style.display,n&&t?n.beforeEnter(e):fl(e,t)},mounted(e,{value:t},{transition:n}){n&&t&&n.enter(e)},updated(e,{value:t,oldValue:n},{transition:o}){!t!=!n&&(o?t?(o.beforeEnter(e),fl(e,!0),o.enter(e)):o.leave(e,(()=>{fl(e,!1)})):fl(e,t))},beforeUnmount(e,{value:t}){fl(e,t)}};function fl(e,t){e.style.display=t?e._vod:\"none\"}const pl=x({patchProp:(e,t,n,o,r=!1,s,i,l,c)=>{\"class\"===t?function(e,t,n){const o=e._vtc;o&&(t=(t?[t,...o]:[...o]).join(\" \")),null==t?e.removeAttribute(\"class\"):n?e.setAttribute(\"class\",t):e.className=t}(e,o,r):\"style\"===t?function(e,t,n){const o=e.style,r=P(n);if(n&&!r){if(t&&!P(t))for(const e in t)null==n[e]&&si(o,e,\"\");for(const e in n)si(o,e,n[e])}else{const s=o.display;r?t!==n&&(o.cssText=n):t&&e.removeAttribute(\"style\"),\"_vod\"in e&&(o.display=s)}}(e,n,o):b(t)?C(t)||ui(e,t,0,o,i):(\".\"===t[0]?(t=t.slice(1),1):\"^\"===t[0]?(t=t.slice(1),0):function(e,t,n,o){if(o)return\"innerHTML\"===t||\"textContent\"===t||!!(t in e&&hi.test(t)&&O(n));if(\"spellcheck\"===t||\"draggable\"===t||\"translate\"===t)return!1;if(\"form\"===t)return!1;if(\"list\"===t&&\"INPUT\"===e.tagName)return!1;if(\"type\"===t&&\"TEXTAREA\"===e.tagName)return!1;if(hi.test(t)&&P(n))return!1;return t in e}(e,t,o,r))?function(e,t,n,o,r,s,i){if(\"innerHTML\"===t||\"textContent\"===t)return o&&i(o,r,s),void(e[t]=null==n?\"\":n);if(\"value\"===t&&\"PROGRESS\"!==e.tagName&&!e.tagName.includes(\"-\")){e._value=n;const o=null==n?\"\":n;return e.value===o&&\"OPTION\"!==e.tagName||(e.value=o),void(null==n&&e.removeAttribute(t))}let l=!1;if(\"\"===n||null==n){const o=typeof e[t];\"boolean\"===o?n=u(n):null==n&&\"string\"===o?(n=\"\",l=!0):\"number\"===o&&(n=0,l=!0)}try{e[t]=n}catch(c){}l&&e.removeAttribute(t)}(e,t,o,s,i,l,c):(\"true-value\"===t?e._trueValue=o:\"false-value\"===t&&(e._falseValue=o),function(e,t,n,o,r){if(o&&t.startsWith(\"xlink:\"))null==n?e.removeAttributeNS(ci,t.slice(6,t.length)):e.setAttributeNS(ci,t,n);else{const o=a(t);null==n||o&&!u(n)?e.removeAttribute(t):e.setAttribute(t,o?\"\":n)}}(e,t,o,r))}},oi);let dl,hl=!1;function vl(){return dl||(dl=Tr(pl))}function gl(){return dl=hl?dl:Or(pl),hl=!0,dl}const ml=(...e)=>{vl().render(...e)},_l=(...e)=>{gl().hydrate(...e)},yl=(...e)=>{const t=vl().createApp(...e),{mount:n}=t;return t.mount=e=>{const o=Cl(e);if(!o)return;const r=t._component;O(r)||r.render||r.template||(r.template=o.innerHTML),o.innerHTML=\"\";const s=n(o,!1,o instanceof SVGElement);return o instanceof Element&&(o.removeAttribute(\"v-cloak\"),o.setAttribute(\"data-v-app\",\"\")),s},t},bl=(...e)=>{const t=gl().createApp(...e),{mount:n}=t;return t.mount=e=>{const t=Cl(e);if(t)return n(t,!0,t instanceof SVGElement)},t};function Cl(e){if(P(e)){return document.querySelector(e)}return e}const xl=m;export{eo as BaseTransition,Dr as Comment,ee as EffectScope,Ur as Fragment,po as KeepAlive,he as ReactiveEffect,Hr as Static,In as Suspense,Vr as Teleport,$r as Text,wi as Transition,Di as TransitionGroup,_i as VueElement,qt as assertNumber,Yt as callWithAsyncErrorHandling,Gt as callWithErrorHandling,D as camelize,z as capitalize,cs as cloneVNode,ei as compatUtils,Rs as computed,yl as createApp,Zr as createBlock,fs as createCommentVNode,Xr as createElementBlock,ss as createElementVNode,Or as createHydrationRenderer,Hs as createPropsRestProxy,Tr as createRenderer,bl as createSSRApp,Do as createSlots,us as createStaticVNode,as as createTextVNode,is as createVNode,Ut as customRef,ao as defineAsyncComponent,lo as defineComponent,vi as defineCustomElement,Ms as defineEmits,Bs as defineExpose,Is as defineProps,gi as defineSSRCustomElement,gn as devtools,ge as effect,te as effectScope,bs as getCurrentInstance,oe as getCurrentScope,io as getTransitionRawChildren,ls as guardReactiveProps,zs as h,Jt as handleError,_l as hydrate,Gs as initCustomFormatter,xl as initDirectivesForSSR,Dn as inject,Js as isMemoSame,wt as isProxy,bt as isReactive,Ct as isReadonly,Ot as isRef,Ts as isRuntimeOnly,xt as isShallow,Qr as isVNode,kt as markRaw,Ds as mergeDefaults,vs as mergeProps,ln as nextTick,l as normalizeClass,c as normalizeProps,n as normalizeStyle,vo as onActivated,wo as onBeforeMount,Ao as onBeforeUnmount,ko as onBeforeUpdate,go as onDeactivated,Lo as onErrorCaptured,So as onMounted,Po as onRenderTracked,Oo as onRenderTriggered,re as onScopeDispose,To as onServerPrefetch,Fo as onUnmounted,Eo as onUpdated,Kr as openBlock,En as popScopeId,$n as provide,Vt as proxyRefs,kn as pushScopeId,un as queuePostFlushCb,vt as reactive,mt as readonly,Pt as ref,Fs as registerRuntimeCompiler,ml as render,$o as renderList,Ho as renderSlot,Io as resolveComponent,Vo as resolveDirective,Bo as resolveDynamicComponent,Qs as resolveFilter,no as resolveTransitionHooks,Yr as setBlockTracking,_n as setDevtoolsHook,so as setTransitionHooks,gt as shallowReactive,_t as shallowReadonly,Lt as shallowRef,Ks as ssrContextKey,Zs as ssrUtils,me as stop,d as toDisplayString,K as toHandlerKey,zo as toHandlers,St as toRaw,Ht as toRef,$t as toRefs,ts as transformVNodeArgs,It as triggerRef,Mt as unref,Us as useAttrs,yi as useCssModule,bi as useCssVars,qs as useSSRContext,js as useSlots,Zn as useTransitionState,Ji as vModelCheckbox,ol as vModelDynamic,Zi as vModelRadio,Qi as vModelSelect,Yi as vModelText,ul as vShow,Xs as version,Kt as warn,qn as watch,Hn as watchEffect,Wn as watchPostEffect,zn as watchSyncEffect,Ws as withAsyncContext,Fn as withCtx,Vs as withDefaults,No as withDirectives,al as withKeys,Ys as withMemo,ll as withModifiers,An as withScopeId};\n/package.json\u0003{\n  \"name\": \"@vue/runtime-dom\",\n  \"version\": \"3.2.47\",\n  \"description\": \"@vue/runtime-dom\",\n  \"main\": \"index.js\",\n  \"module\": \"dist/runtime-dom.esm-bundler.js\",\n  \"types\": \"dist/runtime-dom.d.ts\",\n  \"unpkg\": \"dist/runtime-dom.global.js\",\n  \"files\": [\n    \"index.js\",\n    \"dist\"\n  ],\n  \"sideEffects\": false,\n  \"buildOptions\": {\n    \"name\": \"VueRuntimeDOM\",\n    \"formats\": [\n      \"esm-bundler\",\n      \"esm-browser\",\n      \"cjs\",\n      \"global\"\n    ]\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/vuejs/core.git\",\n    \"directory\": \"packages/runtime-dom\"\n  },\n  \"keywords\": [\n    \"vue\"\n  ],\n  \"author\": \"Evan You\",\n  \"license\": \"MIT\",\n  \"bugs\": {\n    \"url\": \"https://github.com/vuejs/core/issues\"\n  },\n  \"homepage\": \"https://github.com/vuejs/core/tree/main/packages/runtime-dom#readme\",\n  \"dependencies\": {\n    \"@vue/shared\": \"3.2.47\",\n    \"@vue/runtime-core\": \"3.2.47\",\n    \"csstype\": \"^2.6.8\"\n  }\n}\n/dist/runtime-dom.d.tsŬ\u000bimport { BaseTransitionProps } from '@vue/runtime-core';\r\nimport { ComponentInjectOptions } from '@vue/runtime-core';\r\nimport { ComponentInternalInstance } from '@vue/runtime-core';\r\nimport { ComponentOptionsMixin } from '@vue/runtime-core';\r\nimport { ComponentOptionsWithArrayProps } from '@vue/runtime-core';\r\nimport { ComponentOptionsWithObjectProps } from '@vue/runtime-core';\r\nimport { ComponentOptionsWithoutProps } from '@vue/runtime-core';\r\nimport { ComponentPropsOptions } from '@vue/runtime-core';\r\nimport { ComponentPublicInstance } from '@vue/runtime-core';\r\nimport { ComputedOptions } from '@vue/runtime-core';\r\nimport { ConcreteComponent } from '@vue/runtime-core';\r\nimport { CreateAppFunction } from '@vue/runtime-core';\r\nimport { EmitsOptions } from '@vue/runtime-core';\r\nimport { ExtractPropTypes } from '@vue/runtime-core';\r\nimport { FunctionalComponent } from '@vue/runtime-core';\r\nimport { MethodOptions } from '@vue/runtime-core';\r\nimport { ObjectDirective } from '@vue/runtime-core';\r\nimport { RenderFunction } from '@vue/runtime-core';\r\nimport { RootHydrateFunction } from '@vue/runtime-core';\r\nimport { RootRenderFunction } from '@vue/runtime-core';\r\nimport { SetupContext } from '@vue/runtime-core';\r\n\r\ndeclare const ANIMATION = \"animation\";\r\n\r\ndeclare type AnimationTypes = typeof TRANSITION | typeof ANIMATION;\r\n\r\ndeclare type AssignerFn = (value: any) => void;\r\n\r\ndeclare const BaseClass: {\r\n    new (): HTMLElement;\r\n    prototype: HTMLElement;\r\n};\r\n\r\nexport declare const createApp: CreateAppFunction<Element>;\r\n\r\nexport declare const createSSRApp: CreateAppFunction<Element>;\r\n\r\nexport declare function defineCustomElement<Props, RawBindings = object>(setup: (props: Readonly<Props>, ctx: SetupContext) => RawBindings | RenderFunction): VueElementConstructor<Props>;\r\n\r\nexport declare function defineCustomElement<Props = {}, RawBindings = {}, D = {}, C extends ComputedOptions = {}, M extends MethodOptions = {}, Mixin extends ComponentOptionsMixin = ComponentOptionsMixin, Extends extends ComponentOptionsMixin = ComponentOptionsMixin, E extends EmitsOptions = EmitsOptions, EE extends string = string, I extends ComponentInjectOptions = {}, II extends string = string>(options: ComponentOptionsWithoutProps<Props, RawBindings, D, C, M, Mixin, Extends, E, EE, I, II> & {\r\n    styles?: string[];\r\n}): VueElementConstructor<Props>;\r\n\r\nexport declare function defineCustomElement<PropNames extends string, RawBindings, D, C extends ComputedOptions = {}, M extends MethodOptions = {}, Mixin extends ComponentOptionsMixin = ComponentOptionsMixin, Extends extends ComponentOptionsMixin = ComponentOptionsMixin, E extends EmitsOptions = Record<string, any>, EE extends string = string, I extends ComponentInjectOptions = {}, II extends string = string>(options: ComponentOptionsWithArrayProps<PropNames, RawBindings, D, C, M, Mixin, Extends, E, EE, I, II> & {\r\n    styles?: string[];\r\n}): VueElementConstructor<{\r\n    [K in PropNames]: any;\r\n}>;\r\n\r\nexport declare function defineCustomElement<PropsOptions extends Readonly<ComponentPropsOptions>, RawBindings, D, C extends ComputedOptions = {}, M extends MethodOptions = {}, Mixin extends ComponentOptionsMixin = ComponentOptionsMixin, Extends extends ComponentOptionsMixin = ComponentOptionsMixin, E extends EmitsOptions = Record<string, any>, EE extends string = string, I extends ComponentInjectOptions = {}, II extends string = string>(options: ComponentOptionsWithObjectProps<PropsOptions, RawBindings, D, C, M, Mixin, Extends, E, EE, I, II> & {\r\n    styles?: string[];\r\n}): VueElementConstructor<ExtractPropTypes<PropsOptions>>;\r\n\r\nexport declare function defineCustomElement(options: {\r\n    new (...args: any[]): ComponentPublicInstance;\r\n}): VueElementConstructor;\r\n\r\nexport declare const defineSSRCustomElement: typeof defineCustomElement;\r\n\r\nexport declare const hydrate: RootHydrateFunction;\r\n\r\n/* Excluded from this release type: initDirectivesForSSR */\r\n\r\ndeclare type InnerComponentDef = ConcreteComponent & {\r\n    styles?: string[];\r\n};\r\n\r\ndeclare type ModelDirective<T> = ObjectDirective<T & {\r\n    _assign: AssignerFn;\r\n}>;\r\n\r\nexport declare const render: RootRenderFunction<Element | ShadowRoot>;\r\n\r\ndeclare const TRANSITION = \"transition\";\r\n\r\nexport declare const Transition: FunctionalComponent<TransitionProps>;\r\n\r\nexport declare const TransitionGroup: new () => {\r\n    $props: TransitionGroupProps;\r\n};\r\n\r\nexport declare type TransitionGroupProps = Omit<TransitionProps, 'mode'> & {\r\n    tag?: string;\r\n    moveClass?: string;\r\n};\r\n\r\nexport declare interface TransitionProps extends BaseTransitionProps<Element> {\r\n    name?: string;\r\n    type?: AnimationTypes;\r\n    css?: boolean;\r\n    duration?: number | {\r\n        enter: number;\r\n        leave: number;\r\n    };\r\n    enterFromClass?: string;\r\n    enterActiveClass?: string;\r\n    enterToClass?: string;\r\n    appearFromClass?: string;\r\n    appearActiveClass?: string;\r\n    appearToClass?: string;\r\n    leaveFromClass?: string;\r\n    leaveActiveClass?: string;\r\n    leaveToClass?: string;\r\n}\r\n\r\nexport declare function useCssModule(name?: string): Record<string, string>;\r\n\r\n/**\r\n * Runtime helper for SFC's CSS variable injection feature.\r\n * @private\r\n */\r\nexport declare function useCssVars(getter: (ctx: any) => Record<string, string>): void;\r\n\r\nexport declare const vModelCheckbox: ModelDirective<HTMLInputElement>;\r\n\r\nexport declare const vModelDynamic: ObjectDirective<HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement>;\r\n\r\nexport declare const vModelRadio: ModelDirective<HTMLInputElement>;\r\n\r\nexport declare const vModelSelect: ModelDirective<HTMLSelectElement>;\r\n\r\nexport declare const vModelText: ModelDirective<HTMLInputElement | HTMLTextAreaElement>;\r\n\r\nexport declare const vShow: ObjectDirective<VShowElement>;\r\n\r\ndeclare interface VShowElement extends HTMLElement {\r\n    _vod: string;\r\n}\r\n\r\nexport declare class VueElement extends BaseClass {\r\n    private _def;\r\n    private _props;\r\n    /* Excluded from this release type: _instance */\r\n    private _connected;\r\n    private _resolved;\r\n    private _numberProps;\r\n    private _styles?;\r\n    constructor(_def: InnerComponentDef, _props?: Record<string, any>, hydrate?: RootHydrateFunction);\r\n    connectedCallback(): void;\r\n    disconnectedCallback(): void;\r\n    /**\r\n     * resolve inner component definition (handle possible async component)\r\n     */\r\n    private _resolveDef;\r\n    private _resolveProps;\r\n    protected _setAttr(key: string): void;\r\n    /* Excluded from this release type: _getProp */\r\n    /* Excluded from this release type: _setProp */\r\n    private _update;\r\n    private _createVNode;\r\n    private _applyStyles;\r\n}\r\n\r\nexport declare type VueElementConstructor<P = {}> = {\r\n    new (initialProps?: Record<string, any>): VueElement & P;\r\n};\r\n\r\n/**\r\n * @private\r\n */\r\nexport declare const withKeys: (fn: Function, modifiers: string[]) => (event: KeyboardEvent) => any;\r\n\r\n/**\r\n * @private\r\n */\r\nexport declare const withModifiers: (fn: Function, modifiers: string[]) => (event: Event, ...args: unknown[]) => any;\r\n\r\n\r\nexport * from \"@vue/runtime-core\";\r\n\r\nexport { }\r\n\n// Note: this file is auto concatenated to the end of the bundled d.ts during\n// build.\n\n// This code is based on react definition in DefinitelyTyped published under the MIT license.\n//      Repository: https://github.com/DefinitelyTyped/DefinitelyTyped\n//      Path in the repository: types/react/index.d.ts\n//\n// Copyrights of original definition are:\n//      AssureSign <http://www.assuresign.com>\n//      Microsoft <https://microsoft.com>\n//                 John Reilly <https://github.com/johnnyreilly>\n//      Benoit Benezech <https://github.com/bbenezech>\n//      Patricio Zavolinsky <https://github.com/pzavolinsky>\n//      Digiguru <https://github.com/digiguru>\n//      Eric Anderson <https://github.com/ericanderson>\n//      Dovydas Navickas <https://github.com/DovydasNavickas>\n//                 Josh Rutherford <https://github.com/theruther4d>\n//                 Guilherme Hübner <https://github.com/guilhermehubner>\n//                 Ferdy Budhidharma <https://github.com/ferdaber>\n//                 Johann Rakotoharisoa <https://github.com/jrakotoharisoa>\n//                 Olivier Pascal <https://github.com/pascaloliv>\n//                 Martin Hochel <https://github.com/hotell>\n//                 Frank Li <https://github.com/franklixuefei>\n//                 Jessica Franco <https://github.com/Jessidhia>\n//                 Saransh Kataria <https://github.com/saranshkataria>\n//                 Kanitkorn Sujautra <https://github.com/lukyth>\n//                 Sebastian Silbermann <https://github.com/eps1lon>\n\nimport { VNode } from '@vue/runtime-core'\nimport * as CSS from 'csstype'\n\nexport interface CSSProperties\n  extends CSS.Properties<string | number>,\n    CSS.PropertiesHyphen<string | number> {\n  /**\n   * The index signature was removed to enable closed typing for style\n   * using CSSType. You're able to use type assertion or module augmentation\n   * to add properties or an index signature of your own.\n   *\n   * For examples and more information, visit:\n   * https://github.com/frenic/csstype#what-should-i-do-when-i-get-type-errors\n   */\n  [v: `--${string}`]: string | number | undefined\n}\n\ntype Booleanish = boolean | 'true' | 'false'\ntype Numberish = number | string\n\n// All the WAI-ARIA 1.1 attributes from https://www.w3.org/TR/wai-aria-1.1/\ninterface AriaAttributes {\n  /** Identifies the currently active element when DOM focus is on a composite widget, textbox, group, or application. */\n  'aria-activedescendant'?: string\n  /** Indicates whether assistive technologies will present all, or only parts of, the changed region based on the change notifications defined by the aria-relevant attribute. */\n  'aria-atomic'?: Booleanish\n  /**\n   * Indicates whether inputting text could trigger display of one or more predictions of the user's intended value for an input and specifies how predictions would be\n   * presented if they are made.\n   */\n  'aria-autocomplete'?: 'none' | 'inline' | 'list' | 'both'\n  /** Indicates an element is being modified and that assistive technologies MAY want to wait until the modifications are complete before exposing them to the user. */\n  'aria-busy'?: Booleanish\n  /**\n   * Indicates the current \"checked\" state of checkboxes, radio buttons, and other widgets.\n   * @see aria-pressed @see aria-selected.\n   */\n  'aria-checked'?: Booleanish | 'mixed'\n  /**\n   * Defines the total number of columns in a table, grid, or treegrid.\n   * @see aria-colindex.\n   */\n  'aria-colcount'?: Numberish\n  /**\n   * Defines an element's column index or position with respect to the total number of columns within a table, grid, or treegrid.\n   * @see aria-colcount @see aria-colspan.\n   */\n  'aria-colindex'?: Numberish\n  /**\n   * Defines the number of columns spanned by a cell or gridcell within a table, grid, or treegrid.\n   * @see aria-colindex @see aria-rowspan.\n   */\n  'aria-colspan'?: Numberish\n  /**\n   * Identifies the element (or elements) whose contents or presence are controlled by the current element.\n   * @see aria-owns.\n   */\n  'aria-controls'?: string\n  /** Indicates the element that represents the current item within a container or set of related elements. */\n  'aria-current'?: Booleanish | 'page' | 'step' | 'location' | 'date' | 'time'\n  /**\n   * Identifies the element (or elements) that describes the object.\n   * @see aria-labelledby\n   */\n  'aria-describedby'?: string\n  /**\n   * Identifies the element that provides a detailed, extended description for the object.\n   * @see aria-describedby.\n   */\n  'aria-details'?: string\n  /**\n   * Indicates that the element is perceivable but disabled, so it is not editable or otherwise operable.\n   * @see aria-hidden @see aria-readonly.\n   */\n  'aria-disabled'?: Booleanish\n  /**\n   * Indicates what functions can be performed when a dragged object is released on the drop target.\n   * @deprecated in ARIA 1.1\n   */\n  'aria-dropeffect'?: 'none' | 'copy' | 'execute' | 'link' | 'move' | 'popup'\n  /**\n   * Identifies the element that provides an error message for the object.\n   * @see aria-invalid @see aria-describedby.\n   */\n  'aria-errormessage'?: string\n  /** Indicates whether the element, or another grouping element it controls, is currently expanded or collapsed. */\n  'aria-expanded'?: Booleanish\n  /**\n   * Identifies the next element (or elements) in an alternate reading order of content which, at the user's discretion,\n   * allows assistive technology to override the general default of reading in document source order.\n   */\n  'aria-flowto'?: string\n  /**\n   * Indicates an element's \"grabbed\" state in a drag-and-drop operation.\n   * @deprecated in ARIA 1.1\n   */\n  'aria-grabbed'?: Booleanish\n  /** Indicates the availability and type of interactive popup element, such as menu or dialog, that can be triggered by an element. */\n  'aria-haspopup'?: Booleanish | 'menu' | 'listbox' | 'tree' | 'grid' | 'dialog'\n  /**\n   * Indicates whether the element is exposed to an accessibility API.\n   * @see aria-disabled.\n   */\n  'aria-hidden'?: Booleanish\n  /**\n   * Indicates the entered value does not conform to the format expected by the application.\n   * @see aria-errormessage.\n   */\n  'aria-invalid'?: Booleanish | 'grammar' | 'spelling'\n  /** Indicates keyboard shortcuts that an author has implemented to activate or give focus to an element. */\n  'aria-keyshortcuts'?: string\n  /**\n   * Defines a string value that labels the current element.\n   * @see aria-labelledby.\n   */\n  'aria-label'?: string\n  /**\n   * Identifies the element (or elements) that labels the current element.\n   * @see aria-describedby.\n   */\n  'aria-labelledby'?: string\n  /** Defines the hierarchical level of an element within a structure. */\n  'aria-level'?: Numberish\n  /** Indicates that an element will be updated, and describes the types of updates the user agents, assistive technologies, and user can expect from the live region. */\n  'aria-live'?: 'off' | 'assertive' | 'polite'\n  /** Indicates whether an element is modal when displayed. */\n  'aria-modal'?: Booleanish\n  /** Indicates whether a text box accepts multiple lines of input or only a single line. */\n  'aria-multiline'?: Booleanish\n  /** Indicates that the user may select more than one item from the current selectable descendants. */\n  'aria-multiselectable'?: Booleanish\n  /** Indicates whether the element's orientation is horizontal, vertical, or unknown/ambiguous. */\n  'aria-orientation'?: 'horizontal' | 'vertical'\n  /**\n   * Identifies an element (or elements) in order to define a visual, functional, or contextual parent/child relationship\n   * between DOM elements where the DOM hierarchy cannot be used to represent the relationship.\n   * @see aria-controls.\n   */\n  'aria-owns'?: string\n  /**\n   * Defines a short hint (a word or short phrase) intended to aid the user with data entry when the control has no value.\n   * A hint could be a sample value or a brief description of the expected format.\n   */\n  'aria-placeholder'?: string\n  /**\n   * Defines an element's number or position in the current set of listitems or treeitems. Not required if all elements in the set are present in the DOM.\n   * @see aria-setsize.\n   */\n  'aria-posinset'?: Numberish\n  /**\n   * Indicates the current \"pressed\" state of toggle buttons.\n   * @see aria-checked @see aria-selected.\n   */\n  'aria-pressed'?: Booleanish | 'mixed'\n  /**\n   * Indicates that the element is not editable, but is otherwise operable.\n   * @see aria-disabled.\n   */\n  'aria-readonly'?: Booleanish\n  /**\n   * Indicates what notifications the user agent will trigger when the accessibility tree within a live region is modified.\n   * @see aria-atomic.\n   */\n  'aria-relevant'?: 'additions' | 'additions text' | 'all' | 'removals' | 'text'\n  /** Indicates that user input is required on the element before a form may be submitted. */\n  'aria-required'?: Booleanish\n  /** Defines a human-readable, author-localized description for the role of an element. */\n  'aria-roledescription'?: string\n  /**\n   * Defines the total number of rows in a table, grid, or treegrid.\n   * @see aria-rowindex.\n   */\n  'aria-rowcount'?: Numberish\n  /**\n   * Defines an element's row index or position with respect to the total number of rows within a table, grid, or treegrid.\n   * @see aria-rowcount @see aria-rowspan.\n   */\n  'aria-rowindex'?: Numberish\n  /**\n   * Defines the number of rows spanned by a cell or gridcell within a table, grid, or treegrid.\n   * @see aria-rowindex @see aria-colspan.\n   */\n  'aria-rowspan'?: Numberish\n  /**\n   * Indicates the current \"selected\" state of various widgets.\n   * @see aria-checked @see aria-pressed.\n   */\n  'aria-selected'?: Booleanish\n  /**\n   * Defines the number of items in the current set of listitems or treeitems. Not required if all elements in the set are present in the DOM.\n   * @see aria-posinset.\n   */\n  'aria-setsize'?: Numberish\n  /** Indicates if items in a table or grid are sorted in ascending or descending order. */\n  'aria-sort'?: 'none' | 'ascending' | 'descending' | 'other'\n  /** Defines the maximum allowed value for a range widget. */\n  'aria-valuemax'?: Numberish\n  /** Defines the minimum allowed value for a range widget. */\n  'aria-valuemin'?: Numberish\n  /**\n   * Defines the current value for a range widget.\n   * @see aria-valuetext.\n   */\n  'aria-valuenow'?: Numberish\n  /** Defines the human readable text alternative of aria-valuenow for a range widget. */\n  'aria-valuetext'?: string\n}\n\n// Vue's style normalization supports nested arrays\nexport type StyleValue = string | CSSProperties | Array<StyleValue>\n\nexport interface HTMLAttributes extends AriaAttributes, EventHandlers<Events> {\n  innerHTML?: string\n\n  class?: any\n  style?: StyleValue\n\n  // Standard HTML Attributes\n  accesskey?: string\n  contenteditable?: Booleanish | 'inherit'\n  contextmenu?: string\n  dir?: string\n  draggable?: Booleanish\n  hidden?: Booleanish\n  id?: string\n  lang?: string\n  placeholder?: string\n  spellcheck?: Booleanish\n  tabindex?: Numberish\n  title?: string\n  translate?: 'yes' | 'no'\n\n  // Unknown\n  radiogroup?: string // <command>, <menuitem>\n\n  // WAI-ARIA\n  role?: string\n\n  // RDFa Attributes\n  about?: string\n  datatype?: string\n  inlist?: any\n  prefix?: string\n  property?: string\n  resource?: string\n  typeof?: string\n  vocab?: string\n\n  // Non-standard Attributes\n  autocapitalize?: string\n  autocorrect?: string\n  autosave?: string\n  color?: string\n  itemprop?: string\n  itemscope?: Booleanish\n  itemtype?: string\n  itemid?: string\n  itemref?: string\n  results?: Numberish\n  security?: string\n  unselectable?: 'on' | 'off'\n\n  // Living Standard\n  /**\n   * Hints at the type of data that might be entered by the user while editing the element or its contents\n   * @see https://html.spec.whatwg.org/multipage/interaction.html#input-modalities:-the-inputmode-attribute\n   */\n  inputmode?:\n    | 'none'\n    | 'text'\n    | 'tel'\n    | 'url'\n    | 'email'\n    | 'numeric'\n    | 'decimal'\n    | 'search'\n  /**\n   * Specify that a standard HTML element should behave like a defined custom built-in element\n   * @see https://html.spec.whatwg.org/multipage/custom-elements.html#attr-is\n   */\n  is?: string\n}\n\ntype HTMLAttributeReferrerPolicy =\n  | ''\n  | 'no-referrer'\n  | 'no-referrer-when-downgrade'\n  | 'origin'\n  | 'origin-when-cross-origin'\n  | 'same-origin'\n  | 'strict-origin'\n  | 'strict-origin-when-cross-origin'\n  | 'unsafe-url'\n\nexport interface AnchorHTMLAttributes extends HTMLAttributes {\n  download?: any\n  href?: string\n  hreflang?: string\n  media?: string\n  ping?: string\n  rel?: string\n  target?: string\n  type?: string\n  referrerpolicy?: HTMLAttributeReferrerPolicy\n}\n\nexport interface AreaHTMLAttributes extends HTMLAttributes {\n  alt?: string\n  coords?: string\n  download?: any\n  href?: string\n  hreflang?: string\n  media?: string\n  referrerpolicy?: HTMLAttributeReferrerPolicy\n  rel?: string\n  shape?: string\n  target?: string\n}\n\nexport interface AudioHTMLAttributes extends MediaHTMLAttributes {}\n\nexport interface BaseHTMLAttributes extends HTMLAttributes {\n  href?: string\n  target?: string\n}\n\nexport interface BlockquoteHTMLAttributes extends HTMLAttributes {\n  cite?: string\n}\n\nexport interface ButtonHTMLAttributes extends HTMLAttributes {\n  autofocus?: Booleanish\n  disabled?: Booleanish\n  form?: string\n  formaction?: string\n  formenctype?: string\n  formmethod?: string\n  formnovalidate?: Booleanish\n  formtarget?: string\n  name?: string\n  type?: 'submit' | 'reset' | 'button'\n  value?: string | string[] | number\n}\n\nexport interface CanvasHTMLAttributes extends HTMLAttributes {\n  height?: Numberish\n  width?: Numberish\n}\n\nexport interface ColHTMLAttributes extends HTMLAttributes {\n  span?: Numberish\n  width?: Numberish\n}\n\nexport interface ColgroupHTMLAttributes extends HTMLAttributes {\n  span?: Numberish\n}\n\nexport interface DataHTMLAttributes extends HTMLAttributes {\n  value?: string | string[] | number\n}\n\nexport interface DetailsHTMLAttributes extends HTMLAttributes {\n  open?: Booleanish\n}\n\nexport interface DelHTMLAttributes extends HTMLAttributes {\n  cite?: string\n  datetime?: string\n}\n\nexport interface DialogHTMLAttributes extends HTMLAttributes {\n  open?: Booleanish\n}\n\nexport interface EmbedHTMLAttributes extends HTMLAttributes {\n  height?: Numberish\n  src?: string\n  type?: string\n  width?: Numberish\n}\n\nexport interface FieldsetHTMLAttributes extends HTMLAttributes {\n  disabled?: Booleanish\n  form?: string\n  name?: string\n}\n\nexport interface FormHTMLAttributes extends HTMLAttributes {\n  acceptcharset?: string\n  action?: string\n  autocomplete?: string\n  enctype?: string\n  method?: string\n  name?: string\n  novalidate?: Booleanish\n  target?: string\n}\n\nexport interface HtmlHTMLAttributes extends HTMLAttributes {\n  manifest?: string\n}\n\nexport interface IframeHTMLAttributes extends HTMLAttributes {\n  allow?: string\n  allowfullscreen?: Booleanish\n  allowtransparency?: Booleanish\n  frameborder?: Numberish\n  height?: Numberish\n  marginheight?: Numberish\n  marginwidth?: Numberish\n  name?: string\n  referrerpolicy?: HTMLAttributeReferrerPolicy\n  sandbox?: string\n  scrolling?: string\n  seamless?: Booleanish\n  src?: string\n  srcdoc?: string\n  width?: Numberish\n}\n\nexport interface ImgHTMLAttributes extends HTMLAttributes {\n  alt?: string\n  crossorigin?: 'anonymous' | 'use-credentials' | ''\n  decoding?: 'async' | 'auto' | 'sync'\n  height?: Numberish\n  referrerpolicy?: HTMLAttributeReferrerPolicy\n  sizes?: string\n  src?: string\n  srcset?: string\n  usemap?: string\n  width?: Numberish\n}\n\nexport interface InsHTMLAttributes extends HTMLAttributes {\n  cite?: string\n  datetime?: string\n}\n\nexport interface InputHTMLAttributes extends HTMLAttributes {\n  accept?: string\n  alt?: string\n  autocomplete?: string\n  autofocus?: Booleanish\n  capture?: boolean | 'user' | 'environment' // https://www.w3.org/tr/html-media-capture/#the-capture-attribute\n  checked?: Booleanish | any[] | Set<any> // for IDE v-model multi-checkbox support\n  crossorigin?: string\n  disabled?: Booleanish\n  form?: string\n  formaction?: string\n  formenctype?: string\n  formmethod?: string\n  formnovalidate?: Booleanish\n  formtarget?: string\n  height?: Numberish\n  indeterminate?: boolean\n  list?: string\n  max?: Numberish\n  maxlength?: Numberish\n  min?: Numberish\n  minlength?: Numberish\n  multiple?: Booleanish\n  name?: string\n  pattern?: string\n  placeholder?: string\n  readonly?: Booleanish\n  required?: Booleanish\n  size?: Numberish\n  src?: string\n  step?: Numberish\n  type?: string\n  value?: any // we support :value to be bound to anything w/ v-model\n  width?: Numberish\n}\n\nexport interface KeygenHTMLAttributes extends HTMLAttributes {\n  autofocus?: Booleanish\n  challenge?: string\n  disabled?: Booleanish\n  form?: string\n  keytype?: string\n  keyparams?: string\n  name?: string\n}\n\nexport interface LabelHTMLAttributes extends HTMLAttributes {\n  for?: string\n  form?: string\n}\n\nexport interface LiHTMLAttributes extends HTMLAttributes {\n  value?: string | string[] | number\n}\n\nexport interface LinkHTMLAttributes extends HTMLAttributes {\n  as?: string\n  crossorigin?: string\n  href?: string\n  hreflang?: string\n  integrity?: string\n  media?: string\n  referrerpolicy?: HTMLAttributeReferrerPolicy\n  rel?: string\n  sizes?: string\n  type?: string\n}\n\nexport interface MapHTMLAttributes extends HTMLAttributes {\n  name?: string\n}\n\nexport interface MenuHTMLAttributes extends HTMLAttributes {\n  type?: string\n}\n\nexport interface MediaHTMLAttributes extends HTMLAttributes {\n  autoplay?: Booleanish\n  controls?: Booleanish\n  controlslist?: string\n  crossorigin?: string\n  loop?: Booleanish\n  mediagroup?: string\n  muted?: Booleanish\n  playsinline?: Booleanish\n  preload?: string\n  src?: string\n}\n\nexport interface MetaHTMLAttributes extends HTMLAttributes {\n  charset?: string\n  content?: string\n  httpequiv?: string\n  name?: string\n}\n\nexport interface MeterHTMLAttributes extends HTMLAttributes {\n  form?: string\n  high?: Numberish\n  low?: Numberish\n  max?: Numberish\n  min?: Numberish\n  optimum?: Numberish\n  value?: string | string[] | number\n}\n\nexport interface QuoteHTMLAttributes extends HTMLAttributes {\n  cite?: string\n}\n\nexport interface ObjectHTMLAttributes extends HTMLAttributes {\n  classid?: string\n  data?: string\n  form?: string\n  height?: Numberish\n  name?: string\n  type?: string\n  usemap?: string\n  width?: Numberish\n  wmode?: string\n}\n\nexport interface OlHTMLAttributes extends HTMLAttributes {\n  reversed?: Booleanish\n  start?: Numberish\n  type?: '1' | 'a' | 'A' | 'i' | 'I'\n}\n\nexport interface OptgroupHTMLAttributes extends HTMLAttributes {\n  disabled?: Booleanish\n  label?: string\n}\n\nexport interface OptionHTMLAttributes extends HTMLAttributes {\n  disabled?: Booleanish\n  label?: string\n  selected?: Booleanish\n  value?: any // we support :value to be bound to anything w/ v-model\n}\n\nexport interface OutputHTMLAttributes extends HTMLAttributes {\n  for?: string\n  form?: string\n  name?: string\n}\n\nexport interface ParamHTMLAttributes extends HTMLAttributes {\n  name?: string\n  value?: string | string[] | number\n}\n\nexport interface ProgressHTMLAttributes extends HTMLAttributes {\n  max?: Numberish\n  value?: string | string[] | number\n}\n\nexport interface ScriptHTMLAttributes extends HTMLAttributes {\n  async?: Booleanish\n  charset?: string\n  crossorigin?: string\n  defer?: Booleanish\n  integrity?: string\n  nomodule?: Booleanish\n  referrerpolicy?: HTMLAttributeReferrerPolicy\n  nonce?: string\n  src?: string\n  type?: string\n}\n\nexport interface SelectHTMLAttributes extends HTMLAttributes {\n  autocomplete?: string\n  autofocus?: Booleanish\n  disabled?: Booleanish\n  form?: string\n  multiple?: Booleanish\n  name?: string\n  required?: Booleanish\n  size?: Numberish\n  value?: any // we support :value to be bound to anything w/ v-model\n}\n\nexport interface SourceHTMLAttributes extends HTMLAttributes {\n  media?: string\n  sizes?: string\n  src?: string\n  srcset?: string\n  type?: string\n}\n\nexport interface StyleHTMLAttributes extends HTMLAttributes {\n  media?: string\n  nonce?: string\n  scoped?: Booleanish\n  type?: string\n}\n\nexport interface TableHTMLAttributes extends HTMLAttributes {\n  cellpadding?: Numberish\n  cellspacing?: Numberish\n  summary?: string\n}\n\nexport interface TextareaHTMLAttributes extends HTMLAttributes {\n  autocomplete?: string\n  autofocus?: Booleanish\n  cols?: Numberish\n  dirname?: string\n  disabled?: Booleanish\n  form?: string\n  maxlength?: Numberish\n  minlength?: Numberish\n  name?: string\n  placeholder?: string\n  readonly?: boolean\n  required?: Booleanish\n  rows?: Numberish\n  value?: string | string[] | number\n  wrap?: string\n}\n\nexport interface TdHTMLAttributes extends HTMLAttributes {\n  align?: 'left' | 'center' | 'right' | 'justify' | 'char'\n  colspan?: Numberish\n  headers?: string\n  rowspan?: Numberish\n  scope?: string\n  valign?: 'top' | 'middle' | 'bottom' | 'baseline'\n}\n\nexport interface ThHTMLAttributes extends HTMLAttributes {\n  align?: 'left' | 'center' | 'right' | 'justify' | 'char'\n  colspan?: Numberish\n  headers?: string\n  rowspan?: Numberish\n  scope?: string\n}\n\nexport interface TimeHTMLAttributes extends HTMLAttributes {\n  datetime?: string\n}\n\nexport interface TrackHTMLAttributes extends HTMLAttributes {\n  default?: Booleanish\n  kind?: string\n  label?: string\n  src?: string\n  srclang?: string\n}\n\nexport interface VideoHTMLAttributes extends MediaHTMLAttributes {\n  height?: Numberish\n  playsinline?: Booleanish\n  poster?: string\n  width?: Numberish\n  disablePictureInPicture?: Booleanish\n}\n\nexport interface WebViewHTMLAttributes extends HTMLAttributes {\n  allowfullscreen?: Booleanish\n  allowpopups?: Booleanish\n  autoFocus?: Booleanish\n  autosize?: Booleanish\n  blinkfeatures?: string\n  disableblinkfeatures?: string\n  disableguestresize?: Booleanish\n  disablewebsecurity?: Booleanish\n  guestinstance?: string\n  httpreferrer?: string\n  nodeintegration?: Booleanish\n  partition?: string\n  plugins?: Booleanish\n  preload?: string\n  src?: string\n  useragent?: string\n  webpreferences?: string\n}\n\nexport interface SVGAttributes extends AriaAttributes, EventHandlers<Events> {\n  innerHTML?: string\n\n  /**\n   * SVG Styling Attributes\n   * @see https://www.w3.org/TR/SVG/styling.html#ElementSpecificStyling\n   */\n  class?: any\n  style?: string | CSSProperties\n\n  color?: string\n  height?: Numberish\n  id?: string\n  lang?: string\n  max?: Numberish\n  media?: string\n  method?: string\n  min?: Numberish\n  name?: string\n  target?: string\n  type?: string\n  width?: Numberish\n\n  // Other HTML properties supported by SVG elements in browsers\n  role?: string\n  tabindex?: Numberish\n\n  // SVG Specific attributes\n  'accent-height'?: Numberish\n  accumulate?: 'none' | 'sum'\n  additive?: 'replace' | 'sum'\n  'alignment-baseline'?:\n    | 'auto'\n    | 'baseline'\n    | 'before-edge'\n    | 'text-before-edge'\n    | 'middle'\n    | 'central'\n    | 'after-edge'\n    | 'text-after-edge'\n    | 'ideographic'\n    | 'alphabetic'\n    | 'hanging'\n    | 'mathematical'\n    | 'inherit'\n  allowReorder?: 'no' | 'yes'\n  alphabetic?: Numberish\n  amplitude?: Numberish\n  'arabic-form'?: 'initial' | 'medial' | 'terminal' | 'isolated'\n  ascent?: Numberish\n  attributeName?: string\n  attributeType?: string\n  autoReverse?: Numberish\n  azimuth?: Numberish\n  baseFrequency?: Numberish\n  'baseline-shift'?: Numberish\n  baseProfile?: Numberish\n  bbox?: Numberish\n  begin?: Numberish\n  bias?: Numberish\n  by?: Numberish\n  calcMode?: Numberish\n  'cap-height'?: Numberish\n  clip?: Numberish\n  'clip-path'?: string\n  clipPathUnits?: Numberish\n  'clip-rule'?: Numberish\n  'color-interpolation'?: Numberish\n  'color-interpolation-filters'?: 'auto' | 'sRGB' | 'linearRGB' | 'inherit'\n  'color-profile'?: Numberish\n  'color-rendering'?: Numberish\n  contentScriptType?: Numberish\n  contentStyleType?: Numberish\n  cursor?: Numberish\n  cx?: Numberish\n  cy?: Numberish\n  d?: string\n  decelerate?: Numberish\n  descent?: Numberish\n  diffuseConstant?: Numberish\n  direction?: Numberish\n  display?: Numberish\n  divisor?: Numberish\n  'dominant-baseline'?: Numberish\n  dur?: Numberish\n  dx?: Numberish\n  dy?: Numberish\n  edgeMode?: Numberish\n  elevation?: Numberish\n  'enable-background'?: Numberish\n  end?: Numberish\n  exponent?: Numberish\n  externalResourcesRequired?: Numberish\n  fill?: string\n  'fill-opacity'?: Numberish\n  'fill-rule'?: 'nonzero' | 'evenodd' | 'inherit'\n  filter?: string\n  filterRes?: Numberish\n  filterUnits?: Numberish\n  'flood-color'?: Numberish\n  'flood-opacity'?: Numberish\n  focusable?: Numberish\n  'font-family'?: string\n  'font-size'?: Numberish\n  'font-size-adjust'?: Numberish\n  'font-stretch'?: Numberish\n  'font-style'?: Numberish\n  'font-variant'?: Numberish\n  'font-weight'?: Numberish\n  format?: Numberish\n  from?: Numberish\n  fx?: Numberish\n  fy?: Numberish\n  g1?: Numberish\n  g2?: Numberish\n  'glyph-name'?: Numberish\n  'glyph-orientation-horizontal'?: Numberish\n  'glyph-orientation-vertical'?: Numberish\n  glyphRef?: Numberish\n  gradientTransform?: string\n  gradientUnits?: string\n  hanging?: Numberish\n  'horiz-adv-x'?: Numberish\n  'horiz-origin-x'?: Numberish\n  href?: string\n  ideographic?: Numberish\n  'image-rendering'?: Numberish\n  in2?: Numberish\n  in?: string\n  intercept?: Numberish\n  k1?: Numberish\n  k2?: Numberish\n  k3?: Numberish\n  k4?: Numberish\n  k?: Numberish\n  kernelMatrix?: Numberish\n  kernelUnitLength?: Numberish\n  kerning?: Numberish\n  keyPoints?: Numberish\n  keySplines?: Numberish\n  keyTimes?: Numberish\n  lengthAdjust?: Numberish\n  'letter-spacing'?: Numberish\n  'lighting-color'?: Numberish\n  limitingConeAngle?: Numberish\n  local?: Numberish\n  'marker-end'?: string\n  markerHeight?: Numberish\n  'marker-mid'?: string\n  'marker-start'?: string\n  markerUnits?: Numberish\n  markerWidth?: Numberish\n  mask?: string\n  maskContentUnits?: Numberish\n  maskUnits?: Numberish\n  mathematical?: Numberish\n  mode?: Numberish\n  numOctaves?: Numberish\n  offset?: Numberish\n  opacity?: Numberish\n  operator?: Numberish\n  order?: Numberish\n  orient?: Numberish\n  orientation?: Numberish\n  origin?: Numberish\n  overflow?: Numberish\n  'overline-position'?: Numberish\n  'overline-thickness'?: Numberish\n  'paint-order'?: Numberish\n  'panose-1'?: Numberish\n  pathLength?: Numberish\n  patternContentUnits?: string\n  patternTransform?: Numberish\n  patternUnits?: string\n  'pointer-events'?: Numberish\n  points?: string\n  pointsAtX?: Numberish\n  pointsAtY?: Numberish\n  pointsAtZ?: Numberish\n  preserveAlpha?: Numberish\n  preserveAspectRatio?: string\n  primitiveUnits?: Numberish\n  r?: Numberish\n  radius?: Numberish\n  refX?: Numberish\n  refY?: Numberish\n  renderingIntent?: Numberish\n  repeatCount?: Numberish\n  repeatDur?: Numberish\n  requiredExtensions?: Numberish\n  requiredFeatures?: Numberish\n  restart?: Numberish\n  result?: string\n  rotate?: Numberish\n  rx?: Numberish\n  ry?: Numberish\n  scale?: Numberish\n  seed?: Numberish\n  'shape-rendering'?: Numberish\n  slope?: Numberish\n  spacing?: Numberish\n  specularConstant?: Numberish\n  specularExponent?: Numberish\n  speed?: Numberish\n  spreadMethod?: string\n  startOffset?: Numberish\n  stdDeviation?: Numberish\n  stemh?: Numberish\n  stemv?: Numberish\n  stitchTiles?: Numberish\n  'stop-color'?: string\n  'stop-opacity'?: Numberish\n  'strikethrough-position'?: Numberish\n  'strikethrough-thickness'?: Numberish\n  string?: Numberish\n  stroke?: string\n  'stroke-dasharray'?: Numberish\n  'stroke-dashoffset'?: Numberish\n  'stroke-linecap'?: 'butt' | 'round' | 'square' | 'inherit'\n  'stroke-linejoin'?: 'miter' | 'round' | 'bevel' | 'inherit'\n  'stroke-miterlimit'?: Numberish\n  'stroke-opacity'?: Numberish\n  'stroke-width'?: Numberish\n  surfaceScale?: Numberish\n  systemLanguage?: Numberish\n  tableValues?: Numberish\n  targetX?: Numberish\n  targetY?: Numberish\n  'text-anchor'?: string\n  'text-decoration'?: Numberish\n  textLength?: Numberish\n  'text-rendering'?: Numberish\n  to?: Numberish\n  transform?: string\n  u1?: Numberish\n  u2?: Numberish\n  'underline-position'?: Numberish\n  'underline-thickness'?: Numberish\n  unicode?: Numberish\n  'unicode-bidi'?: Numberish\n  'unicode-range'?: Numberish\n  'unitsPer-em'?: Numberish\n  'v-alphabetic'?: Numberish\n  values?: string\n  'vector-effect'?: Numberish\n  version?: string\n  'vert-adv-y'?: Numberish\n  'vert-origin-x'?: Numberish\n  'vert-origin-y'?: Numberish\n  'v-hanging'?: Numberish\n  'v-ideographic'?: Numberish\n  viewBox?: string\n  viewTarget?: Numberish\n  visibility?: Numberish\n  'v-mathematical'?: Numberish\n  widths?: Numberish\n  'word-spacing'?: Numberish\n  'writing-mode'?: Numberish\n  x1?: Numberish\n  x2?: Numberish\n  x?: Numberish\n  xChannelSelector?: string\n  'x-height'?: Numberish\n  xlinkActuate?: string\n  xlinkArcrole?: string\n  xlinkHref?: string\n  xlinkRole?: string\n  xlinkShow?: string\n  xlinkTitle?: string\n  xlinkType?: string\n  xmlns?: string\n  y1?: Numberish\n  y2?: Numberish\n  y?: Numberish\n  yChannelSelector?: string\n  z?: Numberish\n  zoomAndPan?: string\n}\n\ninterface IntrinsicElementAttributes {\n  a: AnchorHTMLAttributes\n  abbr: HTMLAttributes\n  address: HTMLAttributes\n  area: AreaHTMLAttributes\n  article: HTMLAttributes\n  aside: HTMLAttributes\n  audio: AudioHTMLAttributes\n  b: HTMLAttributes\n  base: BaseHTMLAttributes\n  bdi: HTMLAttributes\n  bdo: HTMLAttributes\n  blockquote: BlockquoteHTMLAttributes\n  body: HTMLAttributes\n  br: HTMLAttributes\n  button: ButtonHTMLAttributes\n  canvas: CanvasHTMLAttributes\n  caption: HTMLAttributes\n  cite: HTMLAttributes\n  code: HTMLAttributes\n  col: ColHTMLAttributes\n  colgroup: ColgroupHTMLAttributes\n  data: DataHTMLAttributes\n  datalist: HTMLAttributes\n  dd: HTMLAttributes\n  del: DelHTMLAttributes\n  details: DetailsHTMLAttributes\n  dfn: HTMLAttributes\n  dialog: DialogHTMLAttributes\n  div: HTMLAttributes\n  dl: HTMLAttributes\n  dt: HTMLAttributes\n  em: HTMLAttributes\n  embed: EmbedHTMLAttributes\n  fieldset: FieldsetHTMLAttributes\n  figcaption: HTMLAttributes\n  figure: HTMLAttributes\n  footer: HTMLAttributes\n  form: FormHTMLAttributes\n  h1: HTMLAttributes\n  h2: HTMLAttributes\n  h3: HTMLAttributes\n  h4: HTMLAttributes\n  h5: HTMLAttributes\n  h6: HTMLAttributes\n  head: HTMLAttributes\n  header: HTMLAttributes\n  hgroup: HTMLAttributes\n  hr: HTMLAttributes\n  html: HtmlHTMLAttributes\n  i: HTMLAttributes\n  iframe: IframeHTMLAttributes\n  img: ImgHTMLAttributes\n  input: InputHTMLAttributes\n  ins: InsHTMLAttributes\n  kbd: HTMLAttributes\n  keygen: KeygenHTMLAttributes\n  label: LabelHTMLAttributes\n  legend: HTMLAttributes\n  li: LiHTMLAttributes\n  link: LinkHTMLAttributes\n  main: HTMLAttributes\n  map: MapHTMLAttributes\n  mark: HTMLAttributes\n  menu: MenuHTMLAttributes\n  meta: MetaHTMLAttributes\n  meter: MeterHTMLAttributes\n  nav: HTMLAttributes\n  noindex: HTMLAttributes\n  noscript: HTMLAttributes\n  object: ObjectHTMLAttributes\n  ol: OlHTMLAttributes\n  optgroup: OptgroupHTMLAttributes\n  option: OptionHTMLAttributes\n  output: OutputHTMLAttributes\n  p: HTMLAttributes\n  param: ParamHTMLAttributes\n  picture: HTMLAttributes\n  pre: HTMLAttributes\n  progress: ProgressHTMLAttributes\n  q: QuoteHTMLAttributes\n  rp: HTMLAttributes\n  rt: HTMLAttributes\n  ruby: HTMLAttributes\n  s: HTMLAttributes\n  samp: HTMLAttributes\n  script: ScriptHTMLAttributes\n  section: HTMLAttributes\n  select: SelectHTMLAttributes\n  small: HTMLAttributes\n  source: SourceHTMLAttributes\n  span: HTMLAttributes\n  strong: HTMLAttributes\n  style: StyleHTMLAttributes\n  sub: HTMLAttributes\n  summary: HTMLAttributes\n  sup: HTMLAttributes\n  table: TableHTMLAttributes\n  template: HTMLAttributes\n  tbody: HTMLAttributes\n  td: TdHTMLAttributes\n  textarea: TextareaHTMLAttributes\n  tfoot: HTMLAttributes\n  th: ThHTMLAttributes\n  thead: HTMLAttributes\n  time: TimeHTMLAttributes\n  title: HTMLAttributes\n  tr: HTMLAttributes\n  track: TrackHTMLAttributes\n  u: HTMLAttributes\n  ul: HTMLAttributes\n  var: HTMLAttributes\n  video: VideoHTMLAttributes\n  wbr: HTMLAttributes\n  webview: WebViewHTMLAttributes\n\n  // SVG\n  svg: SVGAttributes\n\n  animate: SVGAttributes\n  animateMotion: SVGAttributes\n  animateTransform: SVGAttributes\n  circle: SVGAttributes\n  clipPath: SVGAttributes\n  defs: SVGAttributes\n  desc: SVGAttributes\n  ellipse: SVGAttributes\n  feBlend: SVGAttributes\n  feColorMatrix: SVGAttributes\n  feComponentTransfer: SVGAttributes\n  feComposite: SVGAttributes\n  feConvolveMatrix: SVGAttributes\n  feDiffuseLighting: SVGAttributes\n  feDisplacementMap: SVGAttributes\n  feDistantLight: SVGAttributes\n  feDropShadow: SVGAttributes\n  feFlood: SVGAttributes\n  feFuncA: SVGAttributes\n  feFuncB: SVGAttributes\n  feFuncG: SVGAttributes\n  feFuncR: SVGAttributes\n  feGaussianBlur: SVGAttributes\n  feImage: SVGAttributes\n  feMerge: SVGAttributes\n  feMergeNode: SVGAttributes\n  feMorphology: SVGAttributes\n  feOffset: SVGAttributes\n  fePointLight: SVGAttributes\n  feSpecularLighting: SVGAttributes\n  feSpotLight: SVGAttributes\n  feTile: SVGAttributes\n  feTurbulence: SVGAttributes\n  filter: SVGAttributes\n  foreignObject: SVGAttributes\n  g: SVGAttributes\n  image: SVGAttributes\n  line: SVGAttributes\n  linearGradient: SVGAttributes\n  marker: SVGAttributes\n  mask: SVGAttributes\n  metadata: SVGAttributes\n  mpath: SVGAttributes\n  path: SVGAttributes\n  pattern: SVGAttributes\n  polygon: SVGAttributes\n  polyline: SVGAttributes\n  radialGradient: SVGAttributes\n  rect: SVGAttributes\n  stop: SVGAttributes\n  switch: SVGAttributes\n  symbol: SVGAttributes\n  text: SVGAttributes\n  textPath: SVGAttributes\n  tspan: SVGAttributes\n  use: SVGAttributes\n  view: SVGAttributes\n}\n\nexport interface Events {\n  // clipboard events\n  onCopy: ClipboardEvent\n  onCut: ClipboardEvent\n  onPaste: ClipboardEvent\n\n  // composition events\n  onCompositionend: CompositionEvent\n  onCompositionstart: CompositionEvent\n  onCompositionupdate: CompositionEvent\n\n  // drag drop events\n  onDrag: DragEvent\n  onDragend: DragEvent\n  onDragenter: DragEvent\n  onDragexit: DragEvent\n  onDragleave: DragEvent\n  onDragover: DragEvent\n  onDragstart: DragEvent\n  onDrop: DragEvent\n\n  // focus events\n  onFocus: FocusEvent\n  onFocusin: FocusEvent\n  onFocusout: FocusEvent\n  onBlur: FocusEvent\n\n  // form events\n  onChange: Event\n  onBeforeinput: Event\n  onInput: Event\n  onReset: Event\n  onSubmit: Event\n  onInvalid: Event\n\n  // image events\n  onLoad: Event\n  onError: Event\n\n  // keyboard events\n  onKeydown: KeyboardEvent\n  onKeypress: KeyboardEvent\n  onKeyup: KeyboardEvent\n\n  // mouse events\n  onAuxclick: MouseEvent\n  onClick: MouseEvent\n  onContextmenu: MouseEvent\n  onDblclick: MouseEvent\n  onMousedown: MouseEvent\n  onMouseenter: MouseEvent\n  onMouseleave: MouseEvent\n  onMousemove: MouseEvent\n  onMouseout: MouseEvent\n  onMouseover: MouseEvent\n  onMouseup: MouseEvent\n\n  // media events\n  onAbort: Event\n  onCanplay: Event\n  onCanplaythrough: Event\n  onDurationchange: Event\n  onEmptied: Event\n  onEncrypted: Event\n  onEnded: Event\n  onLoadeddata: Event\n  onLoadedmetadata: Event\n  onLoadstart: Event\n  onPause: Event\n  onPlay: Event\n  onPlaying: Event\n  onProgress: Event\n  onRatechange: Event\n  onSeeked: Event\n  onSeeking: Event\n  onStalled: Event\n  onSuspend: Event\n  onTimeupdate: Event\n  onVolumechange: Event\n  onWaiting: Event\n\n  // selection events\n  onSelect: Event\n\n  // UI events\n  onScroll: UIEvent\n\n  // touch events\n  onTouchcancel: TouchEvent\n  onTouchend: TouchEvent\n  onTouchmove: TouchEvent\n  onTouchstart: TouchEvent\n\n  // pointer events\n  onPointerdown: PointerEvent\n  onPointermove: PointerEvent\n  onPointerup: PointerEvent\n  onPointercancel: PointerEvent\n  onPointerenter: PointerEvent\n  onPointerleave: PointerEvent\n  onPointerover: PointerEvent\n  onPointerout: PointerEvent\n\n  // wheel events\n  onWheel: WheelEvent\n\n  // animation events\n  onAnimationstart: AnimationEvent\n  onAnimationend: AnimationEvent\n  onAnimationiteration: AnimationEvent\n\n  // transition events\n  onTransitionend: TransitionEvent\n  onTransitionstart: TransitionEvent\n}\n\ntype EventHandlers<E> = {\n  [K in keyof E]?: E[K] extends (...args: any) => any\n    ? E[K]\n    : (payload: E[K]) => void\n}\n\n// use namespace import to avoid collision with generated types which use\n// named imports.\nimport * as RuntimeCore from '@vue/runtime-core'\n\ntype ReservedProps = {\n  key?: string | number | symbol\n  ref?: RuntimeCore.VNodeRef\n  ref_for?: boolean\n  ref_key?: string\n}\n\ntype ElementAttrs<T> = T & ReservedProps\n\ntype NativeElements = {\n  [K in keyof IntrinsicElementAttributes]: ElementAttrs<\n    IntrinsicElementAttributes[K]\n  >\n}\n\ndeclare global {\n  namespace JSX {\n    interface Element extends VNode {}\n    interface ElementClass {\n      $props: {}\n    }\n    interface ElementAttributesProperty {\n      $props: {}\n    }\n    interface IntrinsicElements extends NativeElements {\n      // allow arbitrary elements\n      // @ts-ignore suppress ts:2374 = Duplicate string index signature.\n      [name: string]: any\n    }\n    interface IntrinsicAttributes extends ReservedProps {}\n  }\n}\n\n// suppress ts:2669\nexport {}\n\n// Note: this file is auto concatenated to the end of the bundled d.ts during\n// build.\n\ndeclare module '@vue/reactivity' {\n  export interface RefUnwrapBailTypes {\n    runtimeDOMBailTypes: Node | Window\n  }\n}\n /dist/runtime-dom.esm-bundler.js\timport { warn, camelize, callWithAsyncErrorHandling, defineComponent, nextTick, createVNode, getCurrentInstance, watchPostEffect, onMounted, onUnmounted, Fragment, Static, h, BaseTransition, assertNumber, useTransitionState, onUpdated, toRaw, getTransitionRawChildren, setTransitionHooks, resolveTransitionHooks, isRuntimeOnly, createRenderer, createHydrationRenderer } from '@vue/runtime-core';\nexport * from '@vue/runtime-core';\nimport { isString, isArray, hyphenate, capitalize, isSpecialBooleanAttr, includeBooleanAttr, isOn, isModelListener, isFunction, camelize as camelize$1, toNumber, extend, EMPTY_OBJ, isObject, looseToNumber, looseIndexOf, isSet, looseEqual, invokeArrayFns, isHTMLTag, isSVGTag } from '@vue/shared';\n\nconst svgNS = 'http://www.w3.org/2000/svg';\nconst doc = (typeof document !== 'undefined' ? document : null);\nconst templateContainer = doc && /*#__PURE__*/ doc.createElement('template');\nconst nodeOps = {\n    insert: (child, parent, anchor) => {\n        parent.insertBefore(child, anchor || null);\n    },\n    remove: child => {\n        const parent = child.parentNode;\n        if (parent) {\n            parent.removeChild(child);\n        }\n    },\n    createElement: (tag, isSVG, is, props) => {\n        const el = isSVG\n            ? doc.createElementNS(svgNS, tag)\n            : doc.createElement(tag, is ? { is } : undefined);\n        if (tag === 'select' && props && props.multiple != null) {\n            el.setAttribute('multiple', props.multiple);\n        }\n        return el;\n    },\n    createText: text => doc.createTextNode(text),\n    createComment: text => doc.createComment(text),\n    setText: (node, text) => {\n        node.nodeValue = text;\n    },\n    setElementText: (el, text) => {\n        el.textContent = text;\n    },\n    parentNode: node => node.parentNode,\n    nextSibling: node => node.nextSibling,\n    querySelector: selector => doc.querySelector(selector),\n    setScopeId(el, id) {\n        el.setAttribute(id, '');\n    },\n    // __UNSAFE__\n    // Reason: innerHTML.\n    // Static content here can only come from compiled templates.\n    // As long as the user only uses trusted templates, this is safe.\n    insertStaticContent(content, parent, anchor, isSVG, start, end) {\n        // <parent> before | first ... last | anchor </parent>\n        const before = anchor ? anchor.previousSibling : parent.lastChild;\n        // #5308 can only take cached path if:\n        // - has a single root node\n        // - nextSibling info is still available\n        if (start && (start === end || start.nextSibling)) {\n            // cached\n            while (true) {\n                parent.insertBefore(start.cloneNode(true), anchor);\n                if (start === end || !(start = start.nextSibling))\n                    break;\n            }\n        }\n        else {\n            // fresh insert\n            templateContainer.innerHTML = isSVG ? `<svg>${content}</svg>` : content;\n            const template = templateContainer.content;\n            if (isSVG) {\n                // remove outer svg wrapper\n                const wrapper = template.firstChild;\n                while (wrapper.firstChild) {\n                    template.appendChild(wrapper.firstChild);\n                }\n                template.removeChild(wrapper);\n            }\n            parent.insertBefore(template, anchor);\n        }\n        return [\n            // first\n            before ? before.nextSibling : parent.firstChild,\n            // last\n            anchor ? anchor.previousSibling : parent.lastChild\n        ];\n    }\n};\n\n// compiler should normalize class + :class bindings on the same element\n// into a single binding ['staticClass', dynamic]\nfunction patchClass(el, value, isSVG) {\n    // directly setting className should be faster than setAttribute in theory\n    // if this is an element during a transition, take the temporary transition\n    // classes into account.\n    const transitionClasses = el._vtc;\n    if (transitionClasses) {\n        value = (value ? [value, ...transitionClasses] : [...transitionClasses]).join(' ');\n    }\n    if (value == null) {\n        el.removeAttribute('class');\n    }\n    else if (isSVG) {\n        el.setAttribute('class', value);\n    }\n    else {\n        el.className = value;\n    }\n}\n\nfunction patchStyle(el, prev, next) {\n    const style = el.style;\n    const isCssString = isString(next);\n    if (next && !isCssString) {\n        if (prev && !isString(prev)) {\n            for (const key in prev) {\n                if (next[key] == null) {\n                    setStyle(style, key, '');\n                }\n            }\n        }\n        for (const key in next) {\n            setStyle(style, key, next[key]);\n        }\n    }\n    else {\n        const currentDisplay = style.display;\n        if (isCssString) {\n            if (prev !== next) {\n                style.cssText = next;\n            }\n        }\n        else if (prev) {\n            el.removeAttribute('style');\n        }\n        // indicates that the `display` of the element is controlled by `v-show`,\n        // so we always keep the current `display` value regardless of the `style`\n        // value, thus handing over control to `v-show`.\n        if ('_vod' in el) {\n            style.display = currentDisplay;\n        }\n    }\n}\nconst semicolonRE = /[^\\\\];\\s*$/;\nconst importantRE = /\\s*!important$/;\nfunction setStyle(style, name, val) {\n    if (isArray(val)) {\n        val.forEach(v => setStyle(style, name, v));\n    }\n    else {\n        if (val == null)\n            val = '';\n        if ((process.env.NODE_ENV !== 'production')) {\n            if (semicolonRE.test(val)) {\n                warn(`Unexpected semicolon at the end of '${name}' style value: '${val}'`);\n            }\n        }\n        if (name.startsWith('--')) {\n            // custom property definition\n            style.setProperty(name, val);\n        }\n        else {\n            const prefixed = autoPrefix(style, name);\n            if (importantRE.test(val)) {\n                // !important\n                style.setProperty(hyphenate(prefixed), val.replace(importantRE, ''), 'important');\n            }\n            else {\n                style[prefixed] = val;\n            }\n        }\n    }\n}\nconst prefixes = ['Webkit', 'Moz', 'ms'];\nconst prefixCache = {};\nfunction autoPrefix(style, rawName) {\n    const cached = prefixCache[rawName];\n    if (cached) {\n        return cached;\n    }\n    let name = camelize(rawName);\n    if (name !== 'filter' && name in style) {\n        return (prefixCache[rawName] = name);\n    }\n    name = capitalize(name);\n    for (let i = 0; i < prefixes.length; i++) {\n        const prefixed = prefixes[i] + name;\n        if (prefixed in style) {\n            return (prefixCache[rawName] = prefixed);\n        }\n    }\n    return rawName;\n}\n\nconst xlinkNS = 'http://www.w3.org/1999/xlink';\nfunction patchAttr(el, key, value, isSVG, instance) {\n    if (isSVG && key.startsWith('xlink:')) {\n        if (value == null) {\n            el.removeAttributeNS(xlinkNS, key.slice(6, key.length));\n        }\n        else {\n            el.setAttributeNS(xlinkNS, key, value);\n        }\n    }\n    else {\n        // note we are only checking boolean attributes that don't have a\n        // corresponding dom prop of the same name here.\n        const isBoolean = isSpecialBooleanAttr(key);\n        if (value == null || (isBoolean && !includeBooleanAttr(value))) {\n            el.removeAttribute(key);\n        }\n        else {\n            el.setAttribute(key, isBoolean ? '' : value);\n        }\n    }\n}\n\n// __UNSAFE__\n// functions. The user is responsible for using them with only trusted content.\nfunction patchDOMProp(el, key, value, \n// the following args are passed only due to potential innerHTML/textContent\n// overriding existing VNodes, in which case the old tree must be properly\n// unmounted.\nprevChildren, parentComponent, parentSuspense, unmountChildren) {\n    if (key === 'innerHTML' || key === 'textContent') {\n        if (prevChildren) {\n            unmountChildren(prevChildren, parentComponent, parentSuspense);\n        }\n        el[key] = value == null ? '' : value;\n        return;\n    }\n    if (key === 'value' &&\n        el.tagName !== 'PROGRESS' &&\n        // custom elements may use _value internally\n        !el.tagName.includes('-')) {\n        // store value as _value as well since\n        // non-string values will be stringified.\n        el._value = value;\n        const newValue = value == null ? '' : value;\n        if (el.value !== newValue ||\n            // #4956: always set for OPTION elements because its value falls back to\n            // textContent if no value attribute is present. And setting .value for\n            // OPTION has no side effect\n            el.tagName === 'OPTION') {\n            el.value = newValue;\n        }\n        if (value == null) {\n            el.removeAttribute(key);\n        }\n        return;\n    }\n    let needRemove = false;\n    if (value === '' || value == null) {\n        const type = typeof el[key];\n        if (type === 'boolean') {\n            // e.g. <select multiple> compiles to { multiple: '' }\n            value = includeBooleanAttr(value);\n        }\n        else if (value == null && type === 'string') {\n            // e.g. <div :id=\"null\">\n            value = '';\n            needRemove = true;\n        }\n        else if (type === 'number') {\n            // e.g. <img :width=\"null\">\n            value = 0;\n            needRemove = true;\n        }\n    }\n    // some properties perform value validation and throw,\n    // some properties has getter, no setter, will error in 'use strict'\n    // eg. <select :type=\"null\"></select> <select :willValidate=\"null\"></select>\n    try {\n        el[key] = value;\n    }\n    catch (e) {\n        // do not warn if value is auto-coerced from nullish values\n        if ((process.env.NODE_ENV !== 'production') && !needRemove) {\n            warn(`Failed setting prop \"${key}\" on <${el.tagName.toLowerCase()}>: ` +\n                `value ${value} is invalid.`, e);\n        }\n    }\n    needRemove && el.removeAttribute(key);\n}\n\nfunction addEventListener(el, event, handler, options) {\n    el.addEventListener(event, handler, options);\n}\nfunction removeEventListener(el, event, handler, options) {\n    el.removeEventListener(event, handler, options);\n}\nfunction patchEvent(el, rawName, prevValue, nextValue, instance = null) {\n    // vei = vue event invokers\n    const invokers = el._vei || (el._vei = {});\n    const existingInvoker = invokers[rawName];\n    if (nextValue && existingInvoker) {\n        // patch\n        existingInvoker.value = nextValue;\n    }\n    else {\n        const [name, options] = parseName(rawName);\n        if (nextValue) {\n            // add\n            const invoker = (invokers[rawName] = createInvoker(nextValue, instance));\n            addEventListener(el, name, invoker, options);\n        }\n        else if (existingInvoker) {\n            // remove\n            removeEventListener(el, name, existingInvoker, options);\n            invokers[rawName] = undefined;\n        }\n    }\n}\nconst optionsModifierRE = /(?:Once|Passive|Capture)$/;\nfunction parseName(name) {\n    let options;\n    if (optionsModifierRE.test(name)) {\n        options = {};\n        let m;\n        while ((m = name.match(optionsModifierRE))) {\n            name = name.slice(0, name.length - m[0].length);\n            options[m[0].toLowerCase()] = true;\n        }\n    }\n    const event = name[2] === ':' ? name.slice(3) : hyphenate(name.slice(2));\n    return [event, options];\n}\n// To avoid the overhead of repeatedly calling Date.now(), we cache\n// and use the same timestamp for all event listeners attached in the same tick.\nlet cachedNow = 0;\nconst p = /*#__PURE__*/ Promise.resolve();\nconst getNow = () => cachedNow || (p.then(() => (cachedNow = 0)), (cachedNow = Date.now()));\nfunction createInvoker(initialValue, instance) {\n    const invoker = (e) => {\n        // async edge case vuejs/vue#6566\n        // inner click event triggers patch, event handler\n        // attached to outer element during patch, and triggered again. This\n        // happens because browsers fire microtask ticks between event propagation.\n        // this no longer happens for templates in Vue 3, but could still be\n        // theoretically possible for hand-written render functions.\n        // the solution: we save the timestamp when a handler is attached,\n        // and also attach the timestamp to any event that was handled by vue\n        // for the first time (to avoid inconsistent event timestamp implementations\n        // or events fired from iframes, e.g. #2513)\n        // The handler would only fire if the event passed to it was fired\n        // AFTER it was attached.\n        if (!e._vts) {\n            e._vts = Date.now();\n        }\n        else if (e._vts <= invoker.attached) {\n            return;\n        }\n        callWithAsyncErrorHandling(patchStopImmediatePropagation(e, invoker.value), instance, 5 /* ErrorCodes.NATIVE_EVENT_HANDLER */, [e]);\n    };\n    invoker.value = initialValue;\n    invoker.attached = getNow();\n    return invoker;\n}\nfunction patchStopImmediatePropagation(e, value) {\n    if (isArray(value)) {\n        const originalStop = e.stopImmediatePropagation;\n        e.stopImmediatePropagation = () => {\n            originalStop.call(e);\n            e._stopped = true;\n        };\n        return value.map(fn => (e) => !e._stopped && fn && fn(e));\n    }\n    else {\n        return value;\n    }\n}\n\nconst nativeOnRE = /^on[a-z]/;\nconst patchProp = (el, key, prevValue, nextValue, isSVG = false, prevChildren, parentComponent, parentSuspense, unmountChildren) => {\n    if (key === 'class') {\n        patchClass(el, nextValue, isSVG);\n    }\n    else if (key === 'style') {\n        patchStyle(el, prevValue, nextValue);\n    }\n    else if (isOn(key)) {\n        // ignore v-model listeners\n        if (!isModelListener(key)) {\n            patchEvent(el, key, prevValue, nextValue, parentComponent);\n        }\n    }\n    else if (key[0] === '.'\n        ? ((key = key.slice(1)), true)\n        : key[0] === '^'\n            ? ((key = key.slice(1)), false)\n            : shouldSetAsProp(el, key, nextValue, isSVG)) {\n        patchDOMProp(el, key, nextValue, prevChildren, parentComponent, parentSuspense, unmountChildren);\n    }\n    else {\n        // special case for <input v-model type=\"checkbox\"> with\n        // :true-value & :false-value\n        // store value as dom properties since non-string values will be\n        // stringified.\n        if (key === 'true-value') {\n            el._trueValue = nextValue;\n        }\n        else if (key === 'false-value') {\n            el._falseValue = nextValue;\n        }\n        patchAttr(el, key, nextValue, isSVG);\n    }\n};\nfunction shouldSetAsProp(el, key, value, isSVG) {\n    if (isSVG) {\n        // most keys must be set as attribute on svg elements to work\n        // ...except innerHTML & textContent\n        if (key === 'innerHTML' || key === 'textContent') {\n            return true;\n        }\n        // or native onclick with function values\n        if (key in el && nativeOnRE.test(key) && isFunction(value)) {\n            return true;\n        }\n        return false;\n    }\n    // these are enumerated attrs, however their corresponding DOM properties\n    // are actually booleans - this leads to setting it with a string \"false\"\n    // value leading it to be coerced to `true`, so we need to always treat\n    // them as attributes.\n    // Note that `contentEditable` doesn't have this problem: its DOM\n    // property is also enumerated string values.\n    if (key === 'spellcheck' || key === 'draggable' || key === 'translate') {\n        return false;\n    }\n    // #1787, #2840 form property on form elements is readonly and must be set as\n    // attribute.\n    if (key === 'form') {\n        return false;\n    }\n    // #1526 <input list> must be set as attribute\n    if (key === 'list' && el.tagName === 'INPUT') {\n        return false;\n    }\n    // #2766 <textarea type> must be set as attribute\n    if (key === 'type' && el.tagName === 'TEXTAREA') {\n        return false;\n    }\n    // native onclick with string value, must be set as attribute\n    if (nativeOnRE.test(key) && isString(value)) {\n        return false;\n    }\n    return key in el;\n}\n\nfunction defineCustomElement(options, hydrate) {\n    const Comp = defineComponent(options);\n    class VueCustomElement extends VueElement {\n        constructor(initialProps) {\n            super(Comp, initialProps, hydrate);\n        }\n    }\n    VueCustomElement.def = Comp;\n    return VueCustomElement;\n}\nconst defineSSRCustomElement = ((options) => {\n    // @ts-ignore\n    return defineCustomElement(options, hydrate);\n});\nconst BaseClass = (typeof HTMLElement !== 'undefined' ? HTMLElement : class {\n});\nclass VueElement extends BaseClass {\n    constructor(_def, _props = {}, hydrate) {\n        super();\n        this._def = _def;\n        this._props = _props;\n        /**\n         * @internal\n         */\n        this._instance = null;\n        this._connected = false;\n        this._resolved = false;\n        this._numberProps = null;\n        if (this.shadowRoot && hydrate) {\n            hydrate(this._createVNode(), this.shadowRoot);\n        }\n        else {\n            if ((process.env.NODE_ENV !== 'production') && this.shadowRoot) {\n                warn(`Custom element has pre-rendered declarative shadow root but is not ` +\n                    `defined as hydratable. Use \\`defineSSRCustomElement\\`.`);\n            }\n            this.attachShadow({ mode: 'open' });\n            if (!this._def.__asyncLoader) {\n                // for sync component defs we can immediately resolve props\n                this._resolveProps(this._def);\n            }\n        }\n    }\n    connectedCallback() {\n        this._connected = true;\n        if (!this._instance) {\n            if (this._resolved) {\n                this._update();\n            }\n            else {\n                this._resolveDef();\n            }\n        }\n    }\n    disconnectedCallback() {\n        this._connected = false;\n        nextTick(() => {\n            if (!this._connected) {\n                render(null, this.shadowRoot);\n                this._instance = null;\n            }\n        });\n    }\n    /**\n     * resolve inner component definition (handle possible async component)\n     */\n    _resolveDef() {\n        this._resolved = true;\n        // set initial attrs\n        for (let i = 0; i < this.attributes.length; i++) {\n            this._setAttr(this.attributes[i].name);\n        }\n        // watch future attr changes\n        new MutationObserver(mutations => {\n            for (const m of mutations) {\n                this._setAttr(m.attributeName);\n            }\n        }).observe(this, { attributes: true });\n        const resolve = (def, isAsync = false) => {\n            const { props, styles } = def;\n            // cast Number-type props set before resolve\n            let numberProps;\n            if (props && !isArray(props)) {\n                for (const key in props) {\n                    const opt = props[key];\n                    if (opt === Number || (opt && opt.type === Number)) {\n                        if (key in this._props) {\n                            this._props[key] = toNumber(this._props[key]);\n                        }\n                        (numberProps || (numberProps = Object.create(null)))[camelize$1(key)] = true;\n                    }\n                }\n            }\n            this._numberProps = numberProps;\n            if (isAsync) {\n                // defining getter/setters on prototype\n                // for sync defs, this already happened in the constructor\n                this._resolveProps(def);\n            }\n            // apply CSS\n            this._applyStyles(styles);\n            // initial render\n            this._update();\n        };\n        const asyncDef = this._def.__asyncLoader;\n        if (asyncDef) {\n            asyncDef().then(def => resolve(def, true));\n        }\n        else {\n            resolve(this._def);\n        }\n    }\n    _resolveProps(def) {\n        const { props } = def;\n        const declaredPropKeys = isArray(props) ? props : Object.keys(props || {});\n        // check if there are props set pre-upgrade or connect\n        for (const key of Object.keys(this)) {\n            if (key[0] !== '_' && declaredPropKeys.includes(key)) {\n                this._setProp(key, this[key], true, false);\n            }\n        }\n        // defining getter/setters on prototype\n        for (const key of declaredPropKeys.map(camelize$1)) {\n            Object.defineProperty(this, key, {\n                get() {\n                    return this._getProp(key);\n                },\n                set(val) {\n                    this._setProp(key, val);\n                }\n            });\n        }\n    }\n    _setAttr(key) {\n        let value = this.getAttribute(key);\n        const camelKey = camelize$1(key);\n        if (this._numberProps && this._numberProps[camelKey]) {\n            value = toNumber(value);\n        }\n        this._setProp(camelKey, value, false);\n    }\n    /**\n     * @internal\n     */\n    _getProp(key) {\n        return this._props[key];\n    }\n    /**\n     * @internal\n     */\n    _setProp(key, val, shouldReflect = true, shouldUpdate = true) {\n        if (val !== this._props[key]) {\n            this._props[key] = val;\n            if (shouldUpdate && this._instance) {\n                this._update();\n            }\n            // reflect\n            if (shouldReflect) {\n                if (val === true) {\n                    this.setAttribute(hyphenate(key), '');\n                }\n                else if (typeof val === 'string' || typeof val === 'number') {\n                    this.setAttribute(hyphenate(key), val + '');\n                }\n                else if (!val) {\n                    this.removeAttribute(hyphenate(key));\n                }\n            }\n        }\n    }\n    _update() {\n        render(this._createVNode(), this.shadowRoot);\n    }\n    _createVNode() {\n        const vnode = createVNode(this._def, extend({}, this._props));\n        if (!this._instance) {\n            vnode.ce = instance => {\n                this._instance = instance;\n                instance.isCE = true;\n                // HMR\n                if ((process.env.NODE_ENV !== 'production')) {\n                    instance.ceReload = newStyles => {\n                        // always reset styles\n                        if (this._styles) {\n                            this._styles.forEach(s => this.shadowRoot.removeChild(s));\n                            this._styles.length = 0;\n                        }\n                        this._applyStyles(newStyles);\n                        this._instance = null;\n                        this._update();\n                    };\n                }\n                const dispatch = (event, args) => {\n                    this.dispatchEvent(new CustomEvent(event, {\n                        detail: args\n                    }));\n                };\n                // intercept emit\n                instance.emit = (event, ...args) => {\n                    // dispatch both the raw and hyphenated versions of an event\n                    // to match Vue behavior\n                    dispatch(event, args);\n                    if (hyphenate(event) !== event) {\n                        dispatch(hyphenate(event), args);\n                    }\n                };\n                // locate nearest Vue custom element parent for provide/inject\n                let parent = this;\n                while ((parent =\n                    parent && (parent.parentNode || parent.host))) {\n                    if (parent instanceof VueElement) {\n                        instance.parent = parent._instance;\n                        instance.provides = parent._instance.provides;\n                        break;\n                    }\n                }\n            };\n        }\n        return vnode;\n    }\n    _applyStyles(styles) {\n        if (styles) {\n            styles.forEach(css => {\n                const s = document.createElement('style');\n                s.textContent = css;\n                this.shadowRoot.appendChild(s);\n                // record for HMR\n                if ((process.env.NODE_ENV !== 'production')) {\n                    (this._styles || (this._styles = [])).push(s);\n                }\n            });\n        }\n    }\n}\n\nfunction useCssModule(name = '$style') {\n    /* istanbul ignore else */\n    {\n        const instance = getCurrentInstance();\n        if (!instance) {\n            (process.env.NODE_ENV !== 'production') && warn(`useCssModule must be called inside setup()`);\n            return EMPTY_OBJ;\n        }\n        const modules = instance.type.__cssModules;\n        if (!modules) {\n            (process.env.NODE_ENV !== 'production') && warn(`Current instance does not have CSS modules injected.`);\n            return EMPTY_OBJ;\n        }\n        const mod = modules[name];\n        if (!mod) {\n            (process.env.NODE_ENV !== 'production') &&\n                warn(`Current instance does not have CSS module named \"${name}\".`);\n            return EMPTY_OBJ;\n        }\n        return mod;\n    }\n}\n\n/**\n * Runtime helper for SFC's CSS variable injection feature.\n * @private\n */\nfunction useCssVars(getter) {\n    const instance = getCurrentInstance();\n    /* istanbul ignore next */\n    if (!instance) {\n        (process.env.NODE_ENV !== 'production') &&\n            warn(`useCssVars is called without current active component instance.`);\n        return;\n    }\n    const updateTeleports = (instance.ut = (vars = getter(instance.proxy)) => {\n        Array.from(document.querySelectorAll(`[data-v-owner=\"${instance.uid}\"]`)).forEach(node => setVarsOnNode(node, vars));\n    });\n    const setVars = () => {\n        const vars = getter(instance.proxy);\n        setVarsOnVNode(instance.subTree, vars);\n        updateTeleports(vars);\n    };\n    watchPostEffect(setVars);\n    onMounted(() => {\n        const ob = new MutationObserver(setVars);\n        ob.observe(instance.subTree.el.parentNode, { childList: true });\n        onUnmounted(() => ob.disconnect());\n    });\n}\nfunction setVarsOnVNode(vnode, vars) {\n    if (vnode.shapeFlag & 128 /* ShapeFlags.SUSPENSE */) {\n        const suspense = vnode.suspense;\n        vnode = suspense.activeBranch;\n        if (suspense.pendingBranch && !suspense.isHydrating) {\n            suspense.effects.push(() => {\n                setVarsOnVNode(suspense.activeBranch, vars);\n            });\n        }\n    }\n    // drill down HOCs until it's a non-component vnode\n    while (vnode.component) {\n        vnode = vnode.component.subTree;\n    }\n    if (vnode.shapeFlag & 1 /* ShapeFlags.ELEMENT */ && vnode.el) {\n        setVarsOnNode(vnode.el, vars);\n    }\n    else if (vnode.type === Fragment) {\n        vnode.children.forEach(c => setVarsOnVNode(c, vars));\n    }\n    else if (vnode.type === Static) {\n        let { el, anchor } = vnode;\n        while (el) {\n            setVarsOnNode(el, vars);\n            if (el === anchor)\n                break;\n            el = el.nextSibling;\n        }\n    }\n}\nfunction setVarsOnNode(el, vars) {\n    if (el.nodeType === 1) {\n        const style = el.style;\n        for (const key in vars) {\n            style.setProperty(`--${key}`, vars[key]);\n        }\n    }\n}\n\nconst TRANSITION = 'transition';\nconst ANIMATION = 'animation';\n// DOM Transition is a higher-order-component based on the platform-agnostic\n// base Transition component, with DOM-specific logic.\nconst Transition = (props, { slots }) => h(BaseTransition, resolveTransitionProps(props), slots);\nTransition.displayName = 'Transition';\nconst DOMTransitionPropsValidators = {\n    name: String,\n    type: String,\n    css: {\n        type: Boolean,\n        default: true\n    },\n    duration: [String, Number, Object],\n    enterFromClass: String,\n    enterActiveClass: String,\n    enterToClass: String,\n    appearFromClass: String,\n    appearActiveClass: String,\n    appearToClass: String,\n    leaveFromClass: String,\n    leaveActiveClass: String,\n    leaveToClass: String\n};\nconst TransitionPropsValidators = (Transition.props =\n    /*#__PURE__*/ extend({}, BaseTransition.props, DOMTransitionPropsValidators));\n/**\n * #3227 Incoming hooks may be merged into arrays when wrapping Transition\n * with custom HOCs.\n */\nconst callHook = (hook, args = []) => {\n    if (isArray(hook)) {\n        hook.forEach(h => h(...args));\n    }\n    else if (hook) {\n        hook(...args);\n    }\n};\n/**\n * Check if a hook expects a callback (2nd arg), which means the user\n * intends to explicitly control the end of the transition.\n */\nconst hasExplicitCallback = (hook) => {\n    return hook\n        ? isArray(hook)\n            ? hook.some(h => h.length > 1)\n            : hook.length > 1\n        : false;\n};\nfunction resolveTransitionProps(rawProps) {\n    const baseProps = {};\n    for (const key in rawProps) {\n        if (!(key in DOMTransitionPropsValidators)) {\n            baseProps[key] = rawProps[key];\n        }\n    }\n    if (rawProps.css === false) {\n        return baseProps;\n    }\n    const { name = 'v', type, duration, enterFromClass = `${name}-enter-from`, enterActiveClass = `${name}-enter-active`, enterToClass = `${name}-enter-to`, appearFromClass = enterFromClass, appearActiveClass = enterActiveClass, appearToClass = enterToClass, leaveFromClass = `${name}-leave-from`, leaveActiveClass = `${name}-leave-active`, leaveToClass = `${name}-leave-to` } = rawProps;\n    const durations = normalizeDuration(duration);\n    const enterDuration = durations && durations[0];\n    const leaveDuration = durations && durations[1];\n    const { onBeforeEnter, onEnter, onEnterCancelled, onLeave, onLeaveCancelled, onBeforeAppear = onBeforeEnter, onAppear = onEnter, onAppearCancelled = onEnterCancelled } = baseProps;\n    const finishEnter = (el, isAppear, done) => {\n        removeTransitionClass(el, isAppear ? appearToClass : enterToClass);\n        removeTransitionClass(el, isAppear ? appearActiveClass : enterActiveClass);\n        done && done();\n    };\n    const finishLeave = (el, done) => {\n        el._isLeaving = false;\n        removeTransitionClass(el, leaveFromClass);\n        removeTransitionClass(el, leaveToClass);\n        removeTransitionClass(el, leaveActiveClass);\n        done && done();\n    };\n    const makeEnterHook = (isAppear) => {\n        return (el, done) => {\n            const hook = isAppear ? onAppear : onEnter;\n            const resolve = () => finishEnter(el, isAppear, done);\n            callHook(hook, [el, resolve]);\n            nextFrame(() => {\n                removeTransitionClass(el, isAppear ? appearFromClass : enterFromClass);\n                addTransitionClass(el, isAppear ? appearToClass : enterToClass);\n                if (!hasExplicitCallback(hook)) {\n                    whenTransitionEnds(el, type, enterDuration, resolve);\n                }\n            });\n        };\n    };\n    return extend(baseProps, {\n        onBeforeEnter(el) {\n            callHook(onBeforeEnter, [el]);\n            addTransitionClass(el, enterFromClass);\n            addTransitionClass(el, enterActiveClass);\n        },\n        onBeforeAppear(el) {\n            callHook(onBeforeAppear, [el]);\n            addTransitionClass(el, appearFromClass);\n            addTransitionClass(el, appearActiveClass);\n        },\n        onEnter: makeEnterHook(false),\n        onAppear: makeEnterHook(true),\n        onLeave(el, done) {\n            el._isLeaving = true;\n            const resolve = () => finishLeave(el, done);\n            addTransitionClass(el, leaveFromClass);\n            // force reflow so *-leave-from classes immediately take effect (#2593)\n            forceReflow();\n            addTransitionClass(el, leaveActiveClass);\n            nextFrame(() => {\n                if (!el._isLeaving) {\n                    // cancelled\n                    return;\n                }\n                removeTransitionClass(el, leaveFromClass);\n                addTransitionClass(el, leaveToClass);\n                if (!hasExplicitCallback(onLeave)) {\n                    whenTransitionEnds(el, type, leaveDuration, resolve);\n                }\n            });\n            callHook(onLeave, [el, resolve]);\n        },\n        onEnterCancelled(el) {\n            finishEnter(el, false);\n            callHook(onEnterCancelled, [el]);\n        },\n        onAppearCancelled(el) {\n            finishEnter(el, true);\n            callHook(onAppearCancelled, [el]);\n        },\n        onLeaveCancelled(el) {\n            finishLeave(el);\n            callHook(onLeaveCancelled, [el]);\n        }\n    });\n}\nfunction normalizeDuration(duration) {\n    if (duration == null) {\n        return null;\n    }\n    else if (isObject(duration)) {\n        return [NumberOf(duration.enter), NumberOf(duration.leave)];\n    }\n    else {\n        const n = NumberOf(duration);\n        return [n, n];\n    }\n}\nfunction NumberOf(val) {\n    const res = toNumber(val);\n    if ((process.env.NODE_ENV !== 'production')) {\n        assertNumber(res, '<transition> explicit duration');\n    }\n    return res;\n}\nfunction addTransitionClass(el, cls) {\n    cls.split(/\\s+/).forEach(c => c && el.classList.add(c));\n    (el._vtc ||\n        (el._vtc = new Set())).add(cls);\n}\nfunction removeTransitionClass(el, cls) {\n    cls.split(/\\s+/).forEach(c => c && el.classList.remove(c));\n    const { _vtc } = el;\n    if (_vtc) {\n        _vtc.delete(cls);\n        if (!_vtc.size) {\n            el._vtc = undefined;\n        }\n    }\n}\nfunction nextFrame(cb) {\n    requestAnimationFrame(() => {\n        requestAnimationFrame(cb);\n    });\n}\nlet endId = 0;\nfunction whenTransitionEnds(el, expectedType, explicitTimeout, resolve) {\n    const id = (el._endId = ++endId);\n    const resolveIfNotStale = () => {\n        if (id === el._endId) {\n            resolve();\n        }\n    };\n    if (explicitTimeout) {\n        return setTimeout(resolveIfNotStale, explicitTimeout);\n    }\n    const { type, timeout, propCount } = getTransitionInfo(el, expectedType);\n    if (!type) {\n        return resolve();\n    }\n    const endEvent = type + 'end';\n    let ended = 0;\n    const end = () => {\n        el.removeEventListener(endEvent, onEnd);\n        resolveIfNotStale();\n    };\n    const onEnd = (e) => {\n        if (e.target === el && ++ended >= propCount) {\n            end();\n        }\n    };\n    setTimeout(() => {\n        if (ended < propCount) {\n            end();\n        }\n    }, timeout + 1);\n    el.addEventListener(endEvent, onEnd);\n}\nfunction getTransitionInfo(el, expectedType) {\n    const styles = window.getComputedStyle(el);\n    // JSDOM may return undefined for transition properties\n    const getStyleProperties = (key) => (styles[key] || '').split(', ');\n    const transitionDelays = getStyleProperties(`${TRANSITION}Delay`);\n    const transitionDurations = getStyleProperties(`${TRANSITION}Duration`);\n    const transitionTimeout = getTimeout(transitionDelays, transitionDurations);\n    const animationDelays = getStyleProperties(`${ANIMATION}Delay`);\n    const animationDurations = getStyleProperties(`${ANIMATION}Duration`);\n    const animationTimeout = getTimeout(animationDelays, animationDurations);\n    let type = null;\n    let timeout = 0;\n    let propCount = 0;\n    /* istanbul ignore if */\n    if (expectedType === TRANSITION) {\n        if (transitionTimeout > 0) {\n            type = TRANSITION;\n            timeout = transitionTimeout;\n            propCount = transitionDurations.length;\n        }\n    }\n    else if (expectedType === ANIMATION) {\n        if (animationTimeout > 0) {\n            type = ANIMATION;\n            timeout = animationTimeout;\n            propCount = animationDurations.length;\n        }\n    }\n    else {\n        timeout = Math.max(transitionTimeout, animationTimeout);\n        type =\n            timeout > 0\n                ? transitionTimeout > animationTimeout\n                    ? TRANSITION\n                    : ANIMATION\n                : null;\n        propCount = type\n            ? type === TRANSITION\n                ? transitionDurations.length\n                : animationDurations.length\n            : 0;\n    }\n    const hasTransform = type === TRANSITION &&\n        /\\b(transform|all)(,|$)/.test(getStyleProperties(`${TRANSITION}Property`).toString());\n    return {\n        type,\n        timeout,\n        propCount,\n        hasTransform\n    };\n}\nfunction getTimeout(delays, durations) {\n    while (delays.length < durations.length) {\n        delays = delays.concat(delays);\n    }\n    return Math.max(...durations.map((d, i) => toMs(d) + toMs(delays[i])));\n}\n// Old versions of Chromium (below 61.0.3163.100) formats floating pointer\n// numbers in a locale-dependent way, using a comma instead of a dot.\n// If comma is not replaced with a dot, the input will be rounded down\n// (i.e. acting as a floor function) causing unexpected behaviors\nfunction toMs(s) {\n    return Number(s.slice(0, -1).replace(',', '.')) * 1000;\n}\n// synchronously force layout to put elements into a certain state\nfunction forceReflow() {\n    return document.body.offsetHeight;\n}\n\nconst positionMap = new WeakMap();\nconst newPositionMap = new WeakMap();\nconst TransitionGroupImpl = {\n    name: 'TransitionGroup',\n    props: /*#__PURE__*/ extend({}, TransitionPropsValidators, {\n        tag: String,\n        moveClass: String\n    }),\n    setup(props, { slots }) {\n        const instance = getCurrentInstance();\n        const state = useTransitionState();\n        let prevChildren;\n        let children;\n        onUpdated(() => {\n            // children is guaranteed to exist after initial render\n            if (!prevChildren.length) {\n                return;\n            }\n            const moveClass = props.moveClass || `${props.name || 'v'}-move`;\n            if (!hasCSSTransform(prevChildren[0].el, instance.vnode.el, moveClass)) {\n                return;\n            }\n            // we divide the work into three loops to avoid mixing DOM reads and writes\n            // in each iteration - which helps prevent layout thrashing.\n            prevChildren.forEach(callPendingCbs);\n            prevChildren.forEach(recordPosition);\n            const movedChildren = prevChildren.filter(applyTranslation);\n            // force reflow to put everything in position\n            forceReflow();\n            movedChildren.forEach(c => {\n                const el = c.el;\n                const style = el.style;\n                addTransitionClass(el, moveClass);\n                style.transform = style.webkitTransform = style.transitionDuration = '';\n                const cb = (el._moveCb = (e) => {\n                    if (e && e.target !== el) {\n                        return;\n                    }\n                    if (!e || /transform$/.test(e.propertyName)) {\n                        el.removeEventListener('transitionend', cb);\n                        el._moveCb = null;\n                        removeTransitionClass(el, moveClass);\n                    }\n                });\n                el.addEventListener('transitionend', cb);\n            });\n        });\n        return () => {\n            const rawProps = toRaw(props);\n            const cssTransitionProps = resolveTransitionProps(rawProps);\n            let tag = rawProps.tag || Fragment;\n            prevChildren = children;\n            children = slots.default ? getTransitionRawChildren(slots.default()) : [];\n            for (let i = 0; i < children.length; i++) {\n                const child = children[i];\n                if (child.key != null) {\n                    setTransitionHooks(child, resolveTransitionHooks(child, cssTransitionProps, state, instance));\n                }\n                else if ((process.env.NODE_ENV !== 'production')) {\n                    warn(`<TransitionGroup> children must be keyed.`);\n                }\n            }\n            if (prevChildren) {\n                for (let i = 0; i < prevChildren.length; i++) {\n                    const child = prevChildren[i];\n                    setTransitionHooks(child, resolveTransitionHooks(child, cssTransitionProps, state, instance));\n                    positionMap.set(child, child.el.getBoundingClientRect());\n                }\n            }\n            return createVNode(tag, null, children);\n        };\n    }\n};\n/**\n * TransitionGroup does not support \"mode\" so we need to remove it from the\n * props declarations, but direct delete operation is considered a side effect\n * and will make the entire transition feature non-tree-shakeable, so we do it\n * in a function and mark the function's invocation as pure.\n */\nconst removeMode = (props) => delete props.mode;\n/*#__PURE__*/ removeMode(TransitionGroupImpl.props);\nconst TransitionGroup = TransitionGroupImpl;\nfunction callPendingCbs(c) {\n    const el = c.el;\n    if (el._moveCb) {\n        el._moveCb();\n    }\n    if (el._enterCb) {\n        el._enterCb();\n    }\n}\nfunction recordPosition(c) {\n    newPositionMap.set(c, c.el.getBoundingClientRect());\n}\nfunction applyTranslation(c) {\n    const oldPos = positionMap.get(c);\n    const newPos = newPositionMap.get(c);\n    const dx = oldPos.left - newPos.left;\n    const dy = oldPos.top - newPos.top;\n    if (dx || dy) {\n        const s = c.el.style;\n        s.transform = s.webkitTransform = `translate(${dx}px,${dy}px)`;\n        s.transitionDuration = '0s';\n        return c;\n    }\n}\nfunction hasCSSTransform(el, root, moveClass) {\n    // Detect whether an element with the move class applied has\n    // CSS transitions. Since the element may be inside an entering\n    // transition at this very moment, we make a clone of it and remove\n    // all other transition classes applied to ensure only the move class\n    // is applied.\n    const clone = el.cloneNode();\n    if (el._vtc) {\n        el._vtc.forEach(cls => {\n            cls.split(/\\s+/).forEach(c => c && clone.classList.remove(c));\n        });\n    }\n    moveClass.split(/\\s+/).forEach(c => c && clone.classList.add(c));\n    clone.style.display = 'none';\n    const container = (root.nodeType === 1 ? root : root.parentNode);\n    container.appendChild(clone);\n    const { hasTransform } = getTransitionInfo(clone);\n    container.removeChild(clone);\n    return hasTransform;\n}\n\nconst getModelAssigner = (vnode) => {\n    const fn = vnode.props['onUpdate:modelValue'] ||\n        (false );\n    return isArray(fn) ? value => invokeArrayFns(fn, value) : fn;\n};\nfunction onCompositionStart(e) {\n    e.target.composing = true;\n}\nfunction onCompositionEnd(e) {\n    const target = e.target;\n    if (target.composing) {\n        target.composing = false;\n        target.dispatchEvent(new Event('input'));\n    }\n}\n// We are exporting the v-model runtime directly as vnode hooks so that it can\n// be tree-shaken in case v-model is never used.\nconst vModelText = {\n    created(el, { modifiers: { lazy, trim, number } }, vnode) {\n        el._assign = getModelAssigner(vnode);\n        const castToNumber = number || (vnode.props && vnode.props.type === 'number');\n        addEventListener(el, lazy ? 'change' : 'input', e => {\n            if (e.target.composing)\n                return;\n            let domValue = el.value;\n            if (trim) {\n                domValue = domValue.trim();\n            }\n            if (castToNumber) {\n                domValue = looseToNumber(domValue);\n            }\n            el._assign(domValue);\n        });\n        if (trim) {\n            addEventListener(el, 'change', () => {\n                el.value = el.value.trim();\n            });\n        }\n        if (!lazy) {\n            addEventListener(el, 'compositionstart', onCompositionStart);\n            addEventListener(el, 'compositionend', onCompositionEnd);\n            // Safari < 10.2 & UIWebView doesn't fire compositionend when\n            // switching focus before confirming composition choice\n            // this also fixes the issue where some browsers e.g. iOS Chrome\n            // fires \"change\" instead of \"input\" on autocomplete.\n            addEventListener(el, 'change', onCompositionEnd);\n        }\n    },\n    // set value on mounted so it's after min/max for type=\"range\"\n    mounted(el, { value }) {\n        el.value = value == null ? '' : value;\n    },\n    beforeUpdate(el, { value, modifiers: { lazy, trim, number } }, vnode) {\n        el._assign = getModelAssigner(vnode);\n        // avoid clearing unresolved text. #2302\n        if (el.composing)\n            return;\n        if (document.activeElement === el && el.type !== 'range') {\n            if (lazy) {\n                return;\n            }\n            if (trim && el.value.trim() === value) {\n                return;\n            }\n            if ((number || el.type === 'number') &&\n                looseToNumber(el.value) === value) {\n                return;\n            }\n        }\n        const newValue = value == null ? '' : value;\n        if (el.value !== newValue) {\n            el.value = newValue;\n        }\n    }\n};\nconst vModelCheckbox = {\n    // #4096 array checkboxes need to be deep traversed\n    deep: true,\n    created(el, _, vnode) {\n        el._assign = getModelAssigner(vnode);\n        addEventListener(el, 'change', () => {\n            const modelValue = el._modelValue;\n            const elementValue = getValue(el);\n            const checked = el.checked;\n            const assign = el._assign;\n            if (isArray(modelValue)) {\n                const index = looseIndexOf(modelValue, elementValue);\n                const found = index !== -1;\n                if (checked && !found) {\n                    assign(modelValue.concat(elementValue));\n                }\n                else if (!checked && found) {\n                    const filtered = [...modelValue];\n                    filtered.splice(index, 1);\n                    assign(filtered);\n                }\n            }\n            else if (isSet(modelValue)) {\n                const cloned = new Set(modelValue);\n                if (checked) {\n                    cloned.add(elementValue);\n                }\n                else {\n                    cloned.delete(elementValue);\n                }\n                assign(cloned);\n            }\n            else {\n                assign(getCheckboxValue(el, checked));\n            }\n        });\n    },\n    // set initial checked on mount to wait for true-value/false-value\n    mounted: setChecked,\n    beforeUpdate(el, binding, vnode) {\n        el._assign = getModelAssigner(vnode);\n        setChecked(el, binding, vnode);\n    }\n};\nfunction setChecked(el, { value, oldValue }, vnode) {\n    el._modelValue = value;\n    if (isArray(value)) {\n        el.checked = looseIndexOf(value, vnode.props.value) > -1;\n    }\n    else if (isSet(value)) {\n        el.checked = value.has(vnode.props.value);\n    }\n    else if (value !== oldValue) {\n        el.checked = looseEqual(value, getCheckboxValue(el, true));\n    }\n}\nconst vModelRadio = {\n    created(el, { value }, vnode) {\n        el.checked = looseEqual(value, vnode.props.value);\n        el._assign = getModelAssigner(vnode);\n        addEventListener(el, 'change', () => {\n            el._assign(getValue(el));\n        });\n    },\n    beforeUpdate(el, { value, oldValue }, vnode) {\n        el._assign = getModelAssigner(vnode);\n        if (value !== oldValue) {\n            el.checked = looseEqual(value, vnode.props.value);\n        }\n    }\n};\nconst vModelSelect = {\n    // <select multiple> value need to be deep traversed\n    deep: true,\n    created(el, { value, modifiers: { number } }, vnode) {\n        const isSetModel = isSet(value);\n        addEventListener(el, 'change', () => {\n            const selectedVal = Array.prototype.filter\n                .call(el.options, (o) => o.selected)\n                .map((o) => number ? looseToNumber(getValue(o)) : getValue(o));\n            el._assign(el.multiple\n                ? isSetModel\n                    ? new Set(selectedVal)\n                    : selectedVal\n                : selectedVal[0]);\n        });\n        el._assign = getModelAssigner(vnode);\n    },\n    // set value in mounted & updated because <select> relies on its children\n    // <option>s.\n    mounted(el, { value }) {\n        setSelected(el, value);\n    },\n    beforeUpdate(el, _binding, vnode) {\n        el._assign = getModelAssigner(vnode);\n    },\n    updated(el, { value }) {\n        setSelected(el, value);\n    }\n};\nfunction setSelected(el, value) {\n    const isMultiple = el.multiple;\n    if (isMultiple && !isArray(value) && !isSet(value)) {\n        (process.env.NODE_ENV !== 'production') &&\n            warn(`<select multiple v-model> expects an Array or Set value for its binding, ` +\n                `but got ${Object.prototype.toString.call(value).slice(8, -1)}.`);\n        return;\n    }\n    for (let i = 0, l = el.options.length; i < l; i++) {\n        const option = el.options[i];\n        const optionValue = getValue(option);\n        if (isMultiple) {\n            if (isArray(value)) {\n                option.selected = looseIndexOf(value, optionValue) > -1;\n            }\n            else {\n                option.selected = value.has(optionValue);\n            }\n        }\n        else {\n            if (looseEqual(getValue(option), value)) {\n                if (el.selectedIndex !== i)\n                    el.selectedIndex = i;\n                return;\n            }\n        }\n    }\n    if (!isMultiple && el.selectedIndex !== -1) {\n        el.selectedIndex = -1;\n    }\n}\n// retrieve raw value set via :value bindings\nfunction getValue(el) {\n    return '_value' in el ? el._value : el.value;\n}\n// retrieve raw value for true-value and false-value set via :true-value or :false-value bindings\nfunction getCheckboxValue(el, checked) {\n    const key = checked ? '_trueValue' : '_falseValue';\n    return key in el ? el[key] : checked;\n}\nconst vModelDynamic = {\n    created(el, binding, vnode) {\n        callModelHook(el, binding, vnode, null, 'created');\n    },\n    mounted(el, binding, vnode) {\n        callModelHook(el, binding, vnode, null, 'mounted');\n    },\n    beforeUpdate(el, binding, vnode, prevVNode) {\n        callModelHook(el, binding, vnode, prevVNode, 'beforeUpdate');\n    },\n    updated(el, binding, vnode, prevVNode) {\n        callModelHook(el, binding, vnode, prevVNode, 'updated');\n    }\n};\nfunction resolveDynamicModel(tagName, type) {\n    switch (tagName) {\n        case 'SELECT':\n            return vModelSelect;\n        case 'TEXTAREA':\n            return vModelText;\n        default:\n            switch (type) {\n                case 'checkbox':\n                    return vModelCheckbox;\n                case 'radio':\n                    return vModelRadio;\n                default:\n                    return vModelText;\n            }\n    }\n}\nfunction callModelHook(el, binding, vnode, prevVNode, hook) {\n    const modelToUse = resolveDynamicModel(el.tagName, vnode.props && vnode.props.type);\n    const fn = modelToUse[hook];\n    fn && fn(el, binding, vnode, prevVNode);\n}\n// SSR vnode transforms, only used when user includes client-oriented render\n// function in SSR\nfunction initVModelForSSR() {\n    vModelText.getSSRProps = ({ value }) => ({ value });\n    vModelRadio.getSSRProps = ({ value }, vnode) => {\n        if (vnode.props && looseEqual(vnode.props.value, value)) {\n            return { checked: true };\n        }\n    };\n    vModelCheckbox.getSSRProps = ({ value }, vnode) => {\n        if (isArray(value)) {\n            if (vnode.props && looseIndexOf(value, vnode.props.value) > -1) {\n                return { checked: true };\n            }\n        }\n        else if (isSet(value)) {\n            if (vnode.props && value.has(vnode.props.value)) {\n                return { checked: true };\n            }\n        }\n        else if (value) {\n            return { checked: true };\n        }\n    };\n    vModelDynamic.getSSRProps = (binding, vnode) => {\n        if (typeof vnode.type !== 'string') {\n            return;\n        }\n        const modelToUse = resolveDynamicModel(\n        // resolveDynamicModel expects an uppercase tag name, but vnode.type is lowercase\n        vnode.type.toUpperCase(), vnode.props && vnode.props.type);\n        if (modelToUse.getSSRProps) {\n            return modelToUse.getSSRProps(binding, vnode);\n        }\n    };\n}\n\nconst systemModifiers = ['ctrl', 'shift', 'alt', 'meta'];\nconst modifierGuards = {\n    stop: e => e.stopPropagation(),\n    prevent: e => e.preventDefault(),\n    self: e => e.target !== e.currentTarget,\n    ctrl: e => !e.ctrlKey,\n    shift: e => !e.shiftKey,\n    alt: e => !e.altKey,\n    meta: e => !e.metaKey,\n    left: e => 'button' in e && e.button !== 0,\n    middle: e => 'button' in e && e.button !== 1,\n    right: e => 'button' in e && e.button !== 2,\n    exact: (e, modifiers) => systemModifiers.some(m => e[`${m}Key`] && !modifiers.includes(m))\n};\n/**\n * @private\n */\nconst withModifiers = (fn, modifiers) => {\n    return (event, ...args) => {\n        for (let i = 0; i < modifiers.length; i++) {\n            const guard = modifierGuards[modifiers[i]];\n            if (guard && guard(event, modifiers))\n                return;\n        }\n        return fn(event, ...args);\n    };\n};\n// Kept for 2.x compat.\n// Note: IE11 compat for `spacebar` and `del` is removed for now.\nconst keyNames = {\n    esc: 'escape',\n    space: ' ',\n    up: 'arrow-up',\n    left: 'arrow-left',\n    right: 'arrow-right',\n    down: 'arrow-down',\n    delete: 'backspace'\n};\n/**\n * @private\n */\nconst withKeys = (fn, modifiers) => {\n    return (event) => {\n        if (!('key' in event)) {\n            return;\n        }\n        const eventKey = hyphenate(event.key);\n        if (modifiers.some(k => k === eventKey || keyNames[k] === eventKey)) {\n            return fn(event);\n        }\n    };\n};\n\nconst vShow = {\n    beforeMount(el, { value }, { transition }) {\n        el._vod = el.style.display === 'none' ? '' : el.style.display;\n        if (transition && value) {\n            transition.beforeEnter(el);\n        }\n        else {\n            setDisplay(el, value);\n        }\n    },\n    mounted(el, { value }, { transition }) {\n        if (transition && value) {\n            transition.enter(el);\n        }\n    },\n    updated(el, { value, oldValue }, { transition }) {\n        if (!value === !oldValue)\n            return;\n        if (transition) {\n            if (value) {\n                transition.beforeEnter(el);\n                setDisplay(el, true);\n                transition.enter(el);\n            }\n            else {\n                transition.leave(el, () => {\n                    setDisplay(el, false);\n                });\n            }\n        }\n        else {\n            setDisplay(el, value);\n        }\n    },\n    beforeUnmount(el, { value }) {\n        setDisplay(el, value);\n    }\n};\nfunction setDisplay(el, value) {\n    el.style.display = value ? el._vod : 'none';\n}\n// SSR vnode transforms, only used when user includes client-oriented render\n// function in SSR\nfunction initVShowForSSR() {\n    vShow.getSSRProps = ({ value }) => {\n        if (!value) {\n            return { style: { display: 'none' } };\n        }\n    };\n}\n\nconst rendererOptions = /*#__PURE__*/ extend({ patchProp }, nodeOps);\n// lazy create the renderer - this makes core renderer logic tree-shakable\n// in case the user only imports reactivity utilities from Vue.\nlet renderer;\nlet enabledHydration = false;\nfunction ensureRenderer() {\n    return (renderer ||\n        (renderer = createRenderer(rendererOptions)));\n}\nfunction ensureHydrationRenderer() {\n    renderer = enabledHydration\n        ? renderer\n        : createHydrationRenderer(rendererOptions);\n    enabledHydration = true;\n    return renderer;\n}\n// use explicit type casts here to avoid import() calls in rolled-up d.ts\nconst render = ((...args) => {\n    ensureRenderer().render(...args);\n});\nconst hydrate = ((...args) => {\n    ensureHydrationRenderer().hydrate(...args);\n});\nconst createApp = ((...args) => {\n    const app = ensureRenderer().createApp(...args);\n    if ((process.env.NODE_ENV !== 'production')) {\n        injectNativeTagCheck(app);\n        injectCompilerOptionsCheck(app);\n    }\n    const { mount } = app;\n    app.mount = (containerOrSelector) => {\n        const container = normalizeContainer(containerOrSelector);\n        if (!container)\n            return;\n        const component = app._component;\n        if (!isFunction(component) && !component.render && !component.template) {\n            // __UNSAFE__\n            // Reason: potential execution of JS expressions in in-DOM template.\n            // The user must make sure the in-DOM template is trusted. If it's\n            // rendered by the server, the template should not contain any user data.\n            component.template = container.innerHTML;\n        }\n        // clear content before mounting\n        container.innerHTML = '';\n        const proxy = mount(container, false, container instanceof SVGElement);\n        if (container instanceof Element) {\n            container.removeAttribute('v-cloak');\n            container.setAttribute('data-v-app', '');\n        }\n        return proxy;\n    };\n    return app;\n});\nconst createSSRApp = ((...args) => {\n    const app = ensureHydrationRenderer().createApp(...args);\n    if ((process.env.NODE_ENV !== 'production')) {\n        injectNativeTagCheck(app);\n        injectCompilerOptionsCheck(app);\n    }\n    const { mount } = app;\n    app.mount = (containerOrSelector) => {\n        const container = normalizeContainer(containerOrSelector);\n        if (container) {\n            return mount(container, true, container instanceof SVGElement);\n        }\n    };\n    return app;\n});\nfunction injectNativeTagCheck(app) {\n    // Inject `isNativeTag`\n    // this is used for component name validation (dev only)\n    Object.defineProperty(app.config, 'isNativeTag', {\n        value: (tag) => isHTMLTag(tag) || isSVGTag(tag),\n        writable: false\n    });\n}\n// dev only\nfunction injectCompilerOptionsCheck(app) {\n    if (isRuntimeOnly()) {\n        const isCustomElement = app.config.isCustomElement;\n        Object.defineProperty(app.config, 'isCustomElement', {\n            get() {\n                return isCustomElement;\n            },\n            set() {\n                warn(`The \\`isCustomElement\\` config option is deprecated. Use ` +\n                    `\\`compilerOptions.isCustomElement\\` instead.`);\n            }\n        });\n        const compilerOptions = app.config.compilerOptions;\n        const msg = `The \\`compilerOptions\\` config option is only respected when using ` +\n            `a build of Vue.js that includes the runtime compiler (aka \"full build\"). ` +\n            `Since you are using the runtime-only build, \\`compilerOptions\\` ` +\n            `must be passed to \\`@vue/compiler-dom\\` in the build setup instead.\\n` +\n            `- For vue-loader: pass it via vue-loader's \\`compilerOptions\\` loader option.\\n` +\n            `- For vue-cli: see https://cli.vuejs.org/guide/webpack.html#modifying-options-of-a-loader\\n` +\n            `- For vite: pass it via @vitejs/plugin-vue options. See https://github.com/vitejs/vite/tree/main/packages/plugin-vue#example-for-passing-options-to-vuecompiler-dom`;\n        Object.defineProperty(app.config, 'compilerOptions', {\n            get() {\n                warn(msg);\n                return compilerOptions;\n            },\n            set() {\n                warn(msg);\n            }\n        });\n    }\n}\nfunction normalizeContainer(container) {\n    if (isString(container)) {\n        const res = document.querySelector(container);\n        if ((process.env.NODE_ENV !== 'production') && !res) {\n            warn(`Failed to mount app: mount target selector \"${container}\" returned null.`);\n        }\n        return res;\n    }\n    if ((process.env.NODE_ENV !== 'production') &&\n        window.ShadowRoot &&\n        container instanceof window.ShadowRoot &&\n        container.mode === 'closed') {\n        warn(`mounting on a ShadowRoot with \\`{mode: \"closed\"}\\` may lead to unpredictable bugs`);\n    }\n    return container;\n}\nlet ssrDirectiveInitialized = false;\n/**\n * @internal\n */\nconst initDirectivesForSSR = () => {\n        if (!ssrDirectiveInitialized) {\n            ssrDirectiveInitialized = true;\n            initVModelForSSR();\n            initVShowForSSR();\n        }\n    }\n    ;\n\nexport { Transition, TransitionGroup, VueElement, createApp, createSSRApp, defineCustomElement, defineSSRCustomElement, hydrate, initDirectivesForSSR, render, useCssModule, useCssVars, vModelCheckbox, vModelDynamic, vModelRadio, vModelSelect, vModelText, vShow, withKeys, withModifiers };\n/LICENSE\u0004CThe MIT License (MIT)\n\nCopyright (c) 2018-present, Yuxi (Evan) You\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n /dist/runtime-dom.esm-browser.js\u0000\u0006=/**\n * Make a map and return a function for checking if a key\n * is in that map.\n * IMPORTANT: all calls of this function must be prefixed with\n * \\/\\*#\\_\\_PURE\\_\\_\\*\\/\n * So that rollup can tree-shake them if necessary.\n */\nfunction makeMap(str, expectsLowerCase) {\n    const map = Object.create(null);\n    const list = str.split(',');\n    for (let i = 0; i < list.length; i++) {\n        map[list[i]] = true;\n    }\n    return expectsLowerCase ? val => !!map[val.toLowerCase()] : val => !!map[val];\n}\n\nconst GLOBALS_WHITE_LISTED = 'Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,' +\n    'decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,' +\n    'Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt';\nconst isGloballyWhitelisted = /*#__PURE__*/ makeMap(GLOBALS_WHITE_LISTED);\n\nfunction normalizeStyle(value) {\n    if (isArray(value)) {\n        const res = {};\n        for (let i = 0; i < value.length; i++) {\n            const item = value[i];\n            const normalized = isString(item)\n                ? parseStringStyle(item)\n                : normalizeStyle(item);\n            if (normalized) {\n                for (const key in normalized) {\n                    res[key] = normalized[key];\n                }\n            }\n        }\n        return res;\n    }\n    else if (isString(value)) {\n        return value;\n    }\n    else if (isObject(value)) {\n        return value;\n    }\n}\nconst listDelimiterRE = /;(?![^(]*\\))/g;\nconst propertyDelimiterRE = /:([^]+)/;\nconst styleCommentRE = /\\/\\*.*?\\*\\//gs;\nfunction parseStringStyle(cssText) {\n    const ret = {};\n    cssText\n        .replace(styleCommentRE, '')\n        .split(listDelimiterRE)\n        .forEach(item => {\n        if (item) {\n            const tmp = item.split(propertyDelimiterRE);\n            tmp.length > 1 && (ret[tmp[0].trim()] = tmp[1].trim());\n        }\n    });\n    return ret;\n}\nfunction normalizeClass(value) {\n    let res = '';\n    if (isString(value)) {\n        res = value;\n    }\n    else if (isArray(value)) {\n        for (let i = 0; i < value.length; i++) {\n            const normalized = normalizeClass(value[i]);\n            if (normalized) {\n                res += normalized + ' ';\n            }\n        }\n    }\n    else if (isObject(value)) {\n        for (const name in value) {\n            if (value[name]) {\n                res += name + ' ';\n            }\n        }\n    }\n    return res.trim();\n}\nfunction normalizeProps(props) {\n    if (!props)\n        return null;\n    let { class: klass, style } = props;\n    if (klass && !isString(klass)) {\n        props.class = normalizeClass(klass);\n    }\n    if (style) {\n        props.style = normalizeStyle(style);\n    }\n    return props;\n}\n\n// These tag configs are shared between compiler-dom and runtime-dom, so they\n// https://developer.mozilla.org/en-US/docs/Web/HTML/Element\nconst HTML_TAGS = 'html,body,base,head,link,meta,style,title,address,article,aside,footer,' +\n    'header,hgroup,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,' +\n    'figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,' +\n    'data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,' +\n    'time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,' +\n    'canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,' +\n    'th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,' +\n    'option,output,progress,select,textarea,details,dialog,menu,' +\n    'summary,template,blockquote,iframe,tfoot';\n// https://developer.mozilla.org/en-US/docs/Web/SVG/Element\nconst SVG_TAGS = 'svg,animate,animateMotion,animateTransform,circle,clipPath,color-profile,' +\n    'defs,desc,discard,ellipse,feBlend,feColorMatrix,feComponentTransfer,' +\n    'feComposite,feConvolveMatrix,feDiffuseLighting,feDisplacementMap,' +\n    'feDistantLight,feDropShadow,feFlood,feFuncA,feFuncB,feFuncG,feFuncR,' +\n    'feGaussianBlur,feImage,feMerge,feMergeNode,feMorphology,feOffset,' +\n    'fePointLight,feSpecularLighting,feSpotLight,feTile,feTurbulence,filter,' +\n    'foreignObject,g,hatch,hatchpath,image,line,linearGradient,marker,mask,' +\n    'mesh,meshgradient,meshpatch,meshrow,metadata,mpath,path,pattern,' +\n    'polygon,polyline,radialGradient,rect,set,solidcolor,stop,switch,symbol,' +\n    'text,textPath,title,tspan,unknown,use,view';\n/**\n * Compiler only.\n * Do NOT use in runtime code paths unless behind `true` flag.\n */\nconst isHTMLTag = /*#__PURE__*/ makeMap(HTML_TAGS);\n/**\n * Compiler only.\n * Do NOT use in runtime code paths unless behind `true` flag.\n */\nconst isSVGTag = /*#__PURE__*/ makeMap(SVG_TAGS);\n\n/**\n * On the client we only need to offer special cases for boolean attributes that\n * have different names from their corresponding dom properties:\n * - itemscope -> N/A\n * - allowfullscreen -> allowFullscreen\n * - formnovalidate -> formNoValidate\n * - ismap -> isMap\n * - nomodule -> noModule\n * - novalidate -> noValidate\n * - readonly -> readOnly\n */\nconst specialBooleanAttrs = `itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly`;\nconst isSpecialBooleanAttr = /*#__PURE__*/ makeMap(specialBooleanAttrs);\n/**\n * Boolean attributes should be included if the value is truthy or ''.\n * e.g. `<select multiple>` compiles to `{ multiple: '' }`\n */\nfunction includeBooleanAttr(value) {\n    return !!value || value === '';\n}\n\nfunction looseCompareArrays(a, b) {\n    if (a.length !== b.length)\n        return false;\n    let equal = true;\n    for (let i = 0; equal && i < a.length; i++) {\n        equal = looseEqual(a[i], b[i]);\n    }\n    return equal;\n}\nfunction looseEqual(a, b) {\n    if (a === b)\n        return true;\n    let aValidType = isDate(a);\n    let bValidType = isDate(b);\n    if (aValidType || bValidType) {\n        return aValidType && bValidType ? a.getTime() === b.getTime() : false;\n    }\n    aValidType = isSymbol(a);\n    bValidType = isSymbol(b);\n    if (aValidType || bValidType) {\n        return a === b;\n    }\n    aValidType = isArray(a);\n    bValidType = isArray(b);\n    if (aValidType || bValidType) {\n        return aValidType && bValidType ? looseCompareArrays(a, b) : false;\n    }\n    aValidType = isObject(a);\n    bValidType = isObject(b);\n    if (aValidType || bValidType) {\n        /* istanbul ignore if: this if will probably never be called */\n        if (!aValidType || !bValidType) {\n            return false;\n        }\n        const aKeysCount = Object.keys(a).length;\n        const bKeysCount = Object.keys(b).length;\n        if (aKeysCount !== bKeysCount) {\n            return false;\n        }\n        for (const key in a) {\n            const aHasKey = a.hasOwnProperty(key);\n            const bHasKey = b.hasOwnProperty(key);\n            if ((aHasKey && !bHasKey) ||\n                (!aHasKey && bHasKey) ||\n                !looseEqual(a[key], b[key])) {\n                return false;\n            }\n        }\n    }\n    return String(a) === String(b);\n}\nfunction looseIndexOf(arr, val) {\n    return arr.findIndex(item => looseEqual(item, val));\n}\n\n/**\n * For converting {{ interpolation }} values to displayed strings.\n * @private\n */\nconst toDisplayString = (val) => {\n    return isString(val)\n        ? val\n        : val == null\n            ? ''\n            : isArray(val) ||\n                (isObject(val) &&\n                    (val.toString === objectToString || !isFunction(val.toString)))\n                ? JSON.stringify(val, replacer, 2)\n                : String(val);\n};\nconst replacer = (_key, val) => {\n    // can't use isRef here since @vue/shared has no deps\n    if (val && val.__v_isRef) {\n        return replacer(_key, val.value);\n    }\n    else if (isMap(val)) {\n        return {\n            [`Map(${val.size})`]: [...val.entries()].reduce((entries, [key, val]) => {\n                entries[`${key} =>`] = val;\n                return entries;\n            }, {})\n        };\n    }\n    else if (isSet(val)) {\n        return {\n            [`Set(${val.size})`]: [...val.values()]\n        };\n    }\n    else if (isObject(val) && !isArray(val) && !isPlainObject(val)) {\n        return String(val);\n    }\n    return val;\n};\n\nconst EMPTY_OBJ = Object.freeze({})\n    ;\nconst EMPTY_ARR = Object.freeze([]) ;\nconst NOOP = () => { };\n/**\n * Always return false.\n */\nconst NO = () => false;\nconst onRE = /^on[^a-z]/;\nconst isOn = (key) => onRE.test(key);\nconst isModelListener = (key) => key.startsWith('onUpdate:');\nconst extend = Object.assign;\nconst remove = (arr, el) => {\n    const i = arr.indexOf(el);\n    if (i > -1) {\n        arr.splice(i, 1);\n    }\n};\nconst hasOwnProperty$1 = Object.prototype.hasOwnProperty;\nconst hasOwn = (val, key) => hasOwnProperty$1.call(val, key);\nconst isArray = Array.isArray;\nconst isMap = (val) => toTypeString(val) === '[object Map]';\nconst isSet = (val) => toTypeString(val) === '[object Set]';\nconst isDate = (val) => toTypeString(val) === '[object Date]';\nconst isRegExp = (val) => toTypeString(val) === '[object RegExp]';\nconst isFunction = (val) => typeof val === 'function';\nconst isString = (val) => typeof val === 'string';\nconst isSymbol = (val) => typeof val === 'symbol';\nconst isObject = (val) => val !== null && typeof val === 'object';\nconst isPromise = (val) => {\n    return isObject(val) && isFunction(val.then) && isFunction(val.catch);\n};\nconst objectToString = Object.prototype.toString;\nconst toTypeString = (value) => objectToString.call(value);\nconst toRawType = (value) => {\n    // extract \"RawType\" from strings like \"[object RawType]\"\n    return toTypeString(value).slice(8, -1);\n};\nconst isPlainObject = (val) => toTypeString(val) === '[object Object]';\nconst isIntegerKey = (key) => isString(key) &&\n    key !== 'NaN' &&\n    key[0] !== '-' &&\n    '' + parseInt(key, 10) === key;\nconst isReservedProp = /*#__PURE__*/ makeMap(\n// the leading comma is intentional so empty string \"\" is also included\n',key,ref,ref_for,ref_key,' +\n    'onVnodeBeforeMount,onVnodeMounted,' +\n    'onVnodeBeforeUpdate,onVnodeUpdated,' +\n    'onVnodeBeforeUnmount,onVnodeUnmounted');\nconst isBuiltInDirective = /*#__PURE__*/ makeMap('bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo');\nconst cacheStringFunction = (fn) => {\n    const cache = Object.create(null);\n    return ((str) => {\n        const hit = cache[str];\n        return hit || (cache[str] = fn(str));\n    });\n};\nconst camelizeRE = /-(\\w)/g;\n/**\n * @private\n */\nconst camelize = cacheStringFunction((str) => {\n    return str.replace(camelizeRE, (_, c) => (c ? c.toUpperCase() : ''));\n});\nconst hyphenateRE = /\\B([A-Z])/g;\n/**\n * @private\n */\nconst hyphenate = cacheStringFunction((str) => str.replace(hyphenateRE, '-$1').toLowerCase());\n/**\n * @private\n */\nconst capitalize = cacheStringFunction((str) => str.charAt(0).toUpperCase() + str.slice(1));\n/**\n * @private\n */\nconst toHandlerKey = cacheStringFunction((str) => str ? `on${capitalize(str)}` : ``);\n// compare whether a value has changed, accounting for NaN.\nconst hasChanged = (value, oldValue) => !Object.is(value, oldValue);\nconst invokeArrayFns = (fns, arg) => {\n    for (let i = 0; i < fns.length; i++) {\n        fns[i](arg);\n    }\n};\nconst def = (obj, key, value) => {\n    Object.defineProperty(obj, key, {\n        configurable: true,\n        enumerable: false,\n        value\n    });\n};\n/**\n * \"123-foo\" will be parsed to 123\n * This is used for the .number modifier in v-model\n */\nconst looseToNumber = (val) => {\n    const n = parseFloat(val);\n    return isNaN(n) ? val : n;\n};\n/**\n * Only conerces number-like strings\n * \"123-foo\" will be returned as-is\n */\nconst toNumber = (val) => {\n    const n = isString(val) ? Number(val) : NaN;\n    return isNaN(n) ? val : n;\n};\nlet _globalThis;\nconst getGlobalThis = () => {\n    return (_globalThis ||\n        (_globalThis =\n            typeof globalThis !== 'undefined'\n                ? globalThis\n                : typeof self !== 'undefined'\n                    ? self\n                    : typeof window !== 'undefined'\n                        ? window\n                        : typeof global !== 'undefined'\n                            ? global\n                            : {}));\n};\n\nfunction warn$1(msg, ...args) {\n    console.warn(`[Vue warn] ${msg}`, ...args);\n}\n\nlet activeEffectScope;\nclass EffectScope {\n    constructor(detached = false) {\n        this.detached = detached;\n        /**\n         * @internal\n         */\n        this._active = true;\n        /**\n         * @internal\n         */\n        this.effects = [];\n        /**\n         * @internal\n         */\n        this.cleanups = [];\n        this.parent = activeEffectScope;\n        if (!detached && activeEffectScope) {\n            this.index =\n                (activeEffectScope.scopes || (activeEffectScope.scopes = [])).push(this) - 1;\n        }\n    }\n    get active() {\n        return this._active;\n    }\n    run(fn) {\n        if (this._active) {\n            const currentEffectScope = activeEffectScope;\n            try {\n                activeEffectScope = this;\n                return fn();\n            }\n            finally {\n                activeEffectScope = currentEffectScope;\n            }\n        }\n        else {\n            warn$1(`cannot run an inactive effect scope.`);\n        }\n    }\n    /**\n     * This should only be called on non-detached scopes\n     * @internal\n     */\n    on() {\n        activeEffectScope = this;\n    }\n    /**\n     * This should only be called on non-detached scopes\n     * @internal\n     */\n    off() {\n        activeEffectScope = this.parent;\n    }\n    stop(fromParent) {\n        if (this._active) {\n            let i, l;\n            for (i = 0, l = this.effects.length; i < l; i++) {\n                this.effects[i].stop();\n            }\n            for (i = 0, l = this.cleanups.length; i < l; i++) {\n                this.cleanups[i]();\n            }\n            if (this.scopes) {\n                for (i = 0, l = this.scopes.length; i < l; i++) {\n                    this.scopes[i].stop(true);\n                }\n            }\n            // nested scope, dereference from parent to avoid memory leaks\n            if (!this.detached && this.parent && !fromParent) {\n                // optimized O(1) removal\n                const last = this.parent.scopes.pop();\n                if (last && last !== this) {\n                    this.parent.scopes[this.index] = last;\n                    last.index = this.index;\n                }\n            }\n            this.parent = undefined;\n            this._active = false;\n        }\n    }\n}\nfunction effectScope(detached) {\n    return new EffectScope(detached);\n}\nfunction recordEffectScope(effect, scope = activeEffectScope) {\n    if (scope && scope.active) {\n        scope.effects.push(effect);\n    }\n}\nfunction getCurrentScope() {\n    return activeEffectScope;\n}\nfunction onScopeDispose(fn) {\n    if (activeEffectScope) {\n        activeEffectScope.cleanups.push(fn);\n    }\n    else {\n        warn$1(`onScopeDispose() is called when there is no active effect scope` +\n            ` to be associated with.`);\n    }\n}\n\nconst createDep = (effects) => {\n    const dep = new Set(effects);\n    dep.w = 0;\n    dep.n = 0;\n    return dep;\n};\nconst wasTracked = (dep) => (dep.w & trackOpBit) > 0;\nconst newTracked = (dep) => (dep.n & trackOpBit) > 0;\nconst initDepMarkers = ({ deps }) => {\n    if (deps.length) {\n        for (let i = 0; i < deps.length; i++) {\n            deps[i].w |= trackOpBit; // set was tracked\n        }\n    }\n};\nconst finalizeDepMarkers = (effect) => {\n    const { deps } = effect;\n    if (deps.length) {\n        let ptr = 0;\n        for (let i = 0; i < deps.length; i++) {\n            const dep = deps[i];\n            if (wasTracked(dep) && !newTracked(dep)) {\n                dep.delete(effect);\n            }\n            else {\n                deps[ptr++] = dep;\n            }\n            // clear bits\n            dep.w &= ~trackOpBit;\n            dep.n &= ~trackOpBit;\n        }\n        deps.length = ptr;\n    }\n};\n\nconst targetMap = new WeakMap();\n// The number of effects currently being tracked recursively.\nlet effectTrackDepth = 0;\nlet trackOpBit = 1;\n/**\n * The bitwise track markers support at most 30 levels of recursion.\n * This value is chosen to enable modern JS engines to use a SMI on all platforms.\n * When recursion depth is greater, fall back to using a full cleanup.\n */\nconst maxMarkerBits = 30;\nlet activeEffect;\nconst ITERATE_KEY = Symbol('iterate' );\nconst MAP_KEY_ITERATE_KEY = Symbol('Map key iterate' );\nclass ReactiveEffect {\n    constructor(fn, scheduler = null, scope) {\n        this.fn = fn;\n        this.scheduler = scheduler;\n        this.active = true;\n        this.deps = [];\n        this.parent = undefined;\n        recordEffectScope(this, scope);\n    }\n    run() {\n        if (!this.active) {\n            return this.fn();\n        }\n        let parent = activeEffect;\n        let lastShouldTrack = shouldTrack;\n        while (parent) {\n            if (parent === this) {\n                return;\n            }\n            parent = parent.parent;\n        }\n        try {\n            this.parent = activeEffect;\n            activeEffect = this;\n            shouldTrack = true;\n            trackOpBit = 1 << ++effectTrackDepth;\n            if (effectTrackDepth <= maxMarkerBits) {\n                initDepMarkers(this);\n            }\n            else {\n                cleanupEffect(this);\n            }\n            return this.fn();\n        }\n        finally {\n            if (effectTrackDepth <= maxMarkerBits) {\n                finalizeDepMarkers(this);\n            }\n            trackOpBit = 1 << --effectTrackDepth;\n            activeEffect = this.parent;\n            shouldTrack = lastShouldTrack;\n            this.parent = undefined;\n            if (this.deferStop) {\n                this.stop();\n            }\n        }\n    }\n    stop() {\n        // stopped while running itself - defer the cleanup\n        if (activeEffect === this) {\n            this.deferStop = true;\n        }\n        else if (this.active) {\n            cleanupEffect(this);\n            if (this.onStop) {\n                this.onStop();\n            }\n            this.active = false;\n        }\n    }\n}\nfunction cleanupEffect(effect) {\n    const { deps } = effect;\n    if (deps.length) {\n        for (let i = 0; i < deps.length; i++) {\n            deps[i].delete(effect);\n        }\n        deps.length = 0;\n    }\n}\nfunction effect(fn, options) {\n    if (fn.effect) {\n        fn = fn.effect.fn;\n    }\n    const _effect = new ReactiveEffect(fn);\n    if (options) {\n        extend(_effect, options);\n        if (options.scope)\n            recordEffectScope(_effect, options.scope);\n    }\n    if (!options || !options.lazy) {\n        _effect.run();\n    }\n    const runner = _effect.run.bind(_effect);\n    runner.effect = _effect;\n    return runner;\n}\nfunction stop(runner) {\n    runner.effect.stop();\n}\nlet shouldTrack = true;\nconst trackStack = [];\nfunction pauseTracking() {\n    trackStack.push(shouldTrack);\n    shouldTrack = false;\n}\nfunction resetTracking() {\n    const last = trackStack.pop();\n    shouldTrack = last === undefined ? true : last;\n}\nfunction track(target, type, key) {\n    if (shouldTrack && activeEffect) {\n        let depsMap = targetMap.get(target);\n        if (!depsMap) {\n            targetMap.set(target, (depsMap = new Map()));\n        }\n        let dep = depsMap.get(key);\n        if (!dep) {\n            depsMap.set(key, (dep = createDep()));\n        }\n        const eventInfo = { effect: activeEffect, target, type, key }\n            ;\n        trackEffects(dep, eventInfo);\n    }\n}\nfunction trackEffects(dep, debuggerEventExtraInfo) {\n    let shouldTrack = false;\n    if (effectTrackDepth <= maxMarkerBits) {\n        if (!newTracked(dep)) {\n            dep.n |= trackOpBit; // set newly tracked\n            shouldTrack = !wasTracked(dep);\n        }\n    }\n    else {\n        // Full cleanup mode.\n        shouldTrack = !dep.has(activeEffect);\n    }\n    if (shouldTrack) {\n        dep.add(activeEffect);\n        activeEffect.deps.push(dep);\n        if (activeEffect.onTrack) {\n            activeEffect.onTrack(Object.assign({ effect: activeEffect }, debuggerEventExtraInfo));\n        }\n    }\n}\nfunction trigger(target, type, key, newValue, oldValue, oldTarget) {\n    const depsMap = targetMap.get(target);\n    if (!depsMap) {\n        // never been tracked\n        return;\n    }\n    let deps = [];\n    if (type === \"clear\" /* TriggerOpTypes.CLEAR */) {\n        // collection being cleared\n        // trigger all effects for target\n        deps = [...depsMap.values()];\n    }\n    else if (key === 'length' && isArray(target)) {\n        const newLength = Number(newValue);\n        depsMap.forEach((dep, key) => {\n            if (key === 'length' || key >= newLength) {\n                deps.push(dep);\n            }\n        });\n    }\n    else {\n        // schedule runs for SET | ADD | DELETE\n        if (key !== void 0) {\n            deps.push(depsMap.get(key));\n        }\n        // also run for iteration key on ADD | DELETE | Map.SET\n        switch (type) {\n            case \"add\" /* TriggerOpTypes.ADD */:\n                if (!isArray(target)) {\n                    deps.push(depsMap.get(ITERATE_KEY));\n                    if (isMap(target)) {\n                        deps.push(depsMap.get(MAP_KEY_ITERATE_KEY));\n                    }\n                }\n                else if (isIntegerKey(key)) {\n                    // new index added to array -> length changes\n                    deps.push(depsMap.get('length'));\n                }\n                break;\n            case \"delete\" /* TriggerOpTypes.DELETE */:\n                if (!isArray(target)) {\n                    deps.push(depsMap.get(ITERATE_KEY));\n                    if (isMap(target)) {\n                        deps.push(depsMap.get(MAP_KEY_ITERATE_KEY));\n                    }\n                }\n                break;\n            case \"set\" /* TriggerOpTypes.SET */:\n                if (isMap(target)) {\n                    deps.push(depsMap.get(ITERATE_KEY));\n                }\n                break;\n        }\n    }\n    const eventInfo = { target, type, key, newValue, oldValue, oldTarget }\n        ;\n    if (deps.length === 1) {\n        if (deps[0]) {\n            {\n                triggerEffects(deps[0], eventInfo);\n            }\n        }\n    }\n    else {\n        const effects = [];\n        for (const dep of deps) {\n            if (dep) {\n                effects.push(...dep);\n            }\n        }\n        {\n            triggerEffects(createDep(effects), eventInfo);\n        }\n    }\n}\nfunction triggerEffects(dep, debuggerEventExtraInfo) {\n    // spread into array for stabilization\n    const effects = isArray(dep) ? dep : [...dep];\n    for (const effect of effects) {\n        if (effect.computed) {\n            triggerEffect(effect, debuggerEventExtraInfo);\n        }\n    }\n    for (const effect of effects) {\n        if (!effect.computed) {\n            triggerEffect(effect, debuggerEventExtraInfo);\n        }\n    }\n}\nfunction triggerEffect(effect, debuggerEventExtraInfo) {\n    if (effect !== activeEffect || effect.allowRecurse) {\n        if (effect.onTrigger) {\n            effect.onTrigger(extend({ effect }, debuggerEventExtraInfo));\n        }\n        if (effect.scheduler) {\n            effect.scheduler();\n        }\n        else {\n            effect.run();\n        }\n    }\n}\nfunction getDepFromReactive(object, key) {\n    var _a;\n    return (_a = targetMap.get(object)) === null || _a === void 0 ? void 0 : _a.get(key);\n}\n\nconst isNonTrackableKeys = /*#__PURE__*/ makeMap(`__proto__,__v_isRef,__isVue`);\nconst builtInSymbols = new Set(\n/*#__PURE__*/\nObject.getOwnPropertyNames(Symbol)\n    // ios10.x Object.getOwnPropertyNames(Symbol) can enumerate 'arguments' and 'caller'\n    // but accessing them on Symbol leads to TypeError because Symbol is a strict mode\n    // function\n    .filter(key => key !== 'arguments' && key !== 'caller')\n    .map(key => Symbol[key])\n    .filter(isSymbol));\nconst get$1 = /*#__PURE__*/ createGetter();\nconst shallowGet = /*#__PURE__*/ createGetter(false, true);\nconst readonlyGet = /*#__PURE__*/ createGetter(true);\nconst shallowReadonlyGet = /*#__PURE__*/ createGetter(true, true);\nconst arrayInstrumentations = /*#__PURE__*/ createArrayInstrumentations();\nfunction createArrayInstrumentations() {\n    const instrumentations = {};\n    ['includes', 'indexOf', 'lastIndexOf'].forEach(key => {\n        instrumentations[key] = function (...args) {\n            const arr = toRaw(this);\n            for (let i = 0, l = this.length; i < l; i++) {\n                track(arr, \"get\" /* TrackOpTypes.GET */, i + '');\n            }\n            // we run the method using the original args first (which may be reactive)\n            const res = arr[key](...args);\n            if (res === -1 || res === false) {\n                // if that didn't work, run it again using raw values.\n                return arr[key](...args.map(toRaw));\n            }\n            else {\n                return res;\n            }\n        };\n    });\n    ['push', 'pop', 'shift', 'unshift', 'splice'].forEach(key => {\n        instrumentations[key] = function (...args) {\n            pauseTracking();\n            const res = toRaw(this)[key].apply(this, args);\n            resetTracking();\n            return res;\n        };\n    });\n    return instrumentations;\n}\nfunction hasOwnProperty(key) {\n    const obj = toRaw(this);\n    track(obj, \"has\" /* TrackOpTypes.HAS */, key);\n    return obj.hasOwnProperty(key);\n}\nfunction createGetter(isReadonly = false, shallow = false) {\n    return function get(target, key, receiver) {\n        if (key === \"__v_isReactive\" /* ReactiveFlags.IS_REACTIVE */) {\n            return !isReadonly;\n        }\n        else if (key === \"__v_isReadonly\" /* ReactiveFlags.IS_READONLY */) {\n            return isReadonly;\n        }\n        else if (key === \"__v_isShallow\" /* ReactiveFlags.IS_SHALLOW */) {\n            return shallow;\n        }\n        else if (key === \"__v_raw\" /* ReactiveFlags.RAW */ &&\n            receiver ===\n                (isReadonly\n                    ? shallow\n                        ? shallowReadonlyMap\n                        : readonlyMap\n                    : shallow\n                        ? shallowReactiveMap\n                        : reactiveMap).get(target)) {\n            return target;\n        }\n        const targetIsArray = isArray(target);\n        if (!isReadonly) {\n            if (targetIsArray && hasOwn(arrayInstrumentations, key)) {\n                return Reflect.get(arrayInstrumentations, key, receiver);\n            }\n            if (key === 'hasOwnProperty') {\n                return hasOwnProperty;\n            }\n        }\n        const res = Reflect.get(target, key, receiver);\n        if (isSymbol(key) ? builtInSymbols.has(key) : isNonTrackableKeys(key)) {\n            return res;\n        }\n        if (!isReadonly) {\n            track(target, \"get\" /* TrackOpTypes.GET */, key);\n        }\n        if (shallow) {\n            return res;\n        }\n        if (isRef(res)) {\n            // ref unwrapping - skip unwrap for Array + integer key.\n            return targetIsArray && isIntegerKey(key) ? res : res.value;\n        }\n        if (isObject(res)) {\n            // Convert returned value into a proxy as well. we do the isObject check\n            // here to avoid invalid value warning. Also need to lazy access readonly\n            // and reactive here to avoid circular dependency.\n            return isReadonly ? readonly(res) : reactive(res);\n        }\n        return res;\n    };\n}\nconst set$1 = /*#__PURE__*/ createSetter();\nconst shallowSet = /*#__PURE__*/ createSetter(true);\nfunction createSetter(shallow = false) {\n    return function set(target, key, value, receiver) {\n        let oldValue = target[key];\n        if (isReadonly(oldValue) && isRef(oldValue) && !isRef(value)) {\n            return false;\n        }\n        if (!shallow) {\n            if (!isShallow(value) && !isReadonly(value)) {\n                oldValue = toRaw(oldValue);\n                value = toRaw(value);\n            }\n            if (!isArray(target) && isRef(oldValue) && !isRef(value)) {\n                oldValue.value = value;\n                return true;\n            }\n        }\n        const hadKey = isArray(target) && isIntegerKey(key)\n            ? Number(key) < target.length\n            : hasOwn(target, key);\n        const result = Reflect.set(target, key, value, receiver);\n        // don't trigger if target is something up in the prototype chain of original\n        if (target === toRaw(receiver)) {\n            if (!hadKey) {\n                trigger(target, \"add\" /* TriggerOpTypes.ADD */, key, value);\n            }\n            else if (hasChanged(value, oldValue)) {\n                trigger(target, \"set\" /* TriggerOpTypes.SET */, key, value, oldValue);\n            }\n        }\n        return result;\n    };\n}\nfunction deleteProperty(target, key) {\n    const hadKey = hasOwn(target, key);\n    const oldValue = target[key];\n    const result = Reflect.deleteProperty(target, key);\n    if (result && hadKey) {\n        trigger(target, \"delete\" /* TriggerOpTypes.DELETE */, key, undefined, oldValue);\n    }\n    return result;\n}\nfunction has$1(target, key) {\n    const result = Reflect.has(target, key);\n    if (!isSymbol(key) || !builtInSymbols.has(key)) {\n        track(target, \"has\" /* TrackOpTypes.HAS */, key);\n    }\n    return result;\n}\nfunction ownKeys(target) {\n    track(target, \"iterate\" /* TrackOpTypes.ITERATE */, isArray(target) ? 'length' : ITERATE_KEY);\n    return Reflect.ownKeys(target);\n}\nconst mutableHandlers = {\n    get: get$1,\n    set: set$1,\n    deleteProperty,\n    has: has$1,\n    ownKeys\n};\nconst readonlyHandlers = {\n    get: readonlyGet,\n    set(target, key) {\n        {\n            warn$1(`Set operation on key \"${String(key)}\" failed: target is readonly.`, target);\n        }\n        return true;\n    },\n    deleteProperty(target, key) {\n        {\n            warn$1(`Delete operation on key \"${String(key)}\" failed: target is readonly.`, target);\n        }\n        return true;\n    }\n};\nconst shallowReactiveHandlers = /*#__PURE__*/ extend({}, mutableHandlers, {\n    get: shallowGet,\n    set: shallowSet\n});\n// Props handlers are special in the sense that it should not unwrap top-level\n// refs (in order to allow refs to be explicitly passed down), but should\n// retain the reactivity of the normal readonly object.\nconst shallowReadonlyHandlers = /*#__PURE__*/ extend({}, readonlyHandlers, {\n    get: shallowReadonlyGet\n});\n\nconst toShallow = (value) => value;\nconst getProto = (v) => Reflect.getPrototypeOf(v);\nfunction get(target, key, isReadonly = false, isShallow = false) {\n    // #1772: readonly(reactive(Map)) should return readonly + reactive version\n    // of the value\n    target = target[\"__v_raw\" /* ReactiveFlags.RAW */];\n    const rawTarget = toRaw(target);\n    const rawKey = toRaw(key);\n    if (!isReadonly) {\n        if (key !== rawKey) {\n            track(rawTarget, \"get\" /* TrackOpTypes.GET */, key);\n        }\n        track(rawTarget, \"get\" /* TrackOpTypes.GET */, rawKey);\n    }\n    const { has } = getProto(rawTarget);\n    const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive;\n    if (has.call(rawTarget, key)) {\n        return wrap(target.get(key));\n    }\n    else if (has.call(rawTarget, rawKey)) {\n        return wrap(target.get(rawKey));\n    }\n    else if (target !== rawTarget) {\n        // #3602 readonly(reactive(Map))\n        // ensure that the nested reactive `Map` can do tracking for itself\n        target.get(key);\n    }\n}\nfunction has(key, isReadonly = false) {\n    const target = this[\"__v_raw\" /* ReactiveFlags.RAW */];\n    const rawTarget = toRaw(target);\n    const rawKey = toRaw(key);\n    if (!isReadonly) {\n        if (key !== rawKey) {\n            track(rawTarget, \"has\" /* TrackOpTypes.HAS */, key);\n        }\n        track(rawTarget, \"has\" /* TrackOpTypes.HAS */, rawKey);\n    }\n    return key === rawKey\n        ? target.has(key)\n        : target.has(key) || target.has(rawKey);\n}\nfunction size(target, isReadonly = false) {\n    target = target[\"__v_raw\" /* ReactiveFlags.RAW */];\n    !isReadonly && track(toRaw(target), \"iterate\" /* TrackOpTypes.ITERATE */, ITERATE_KEY);\n    return Reflect.get(target, 'size', target);\n}\nfunction add(value) {\n    value = toRaw(value);\n    const target = toRaw(this);\n    const proto = getProto(target);\n    const hadKey = proto.has.call(target, value);\n    if (!hadKey) {\n        target.add(value);\n        trigger(target, \"add\" /* TriggerOpTypes.ADD */, value, value);\n    }\n    return this;\n}\nfunction set(key, value) {\n    value = toRaw(value);\n    const target = toRaw(this);\n    const { has, get } = getProto(target);\n    let hadKey = has.call(target, key);\n    if (!hadKey) {\n        key = toRaw(key);\n        hadKey = has.call(target, key);\n    }\n    else {\n        checkIdentityKeys(target, has, key);\n    }\n    const oldValue = get.call(target, key);\n    target.set(key, value);\n    if (!hadKey) {\n        trigger(target, \"add\" /* TriggerOpTypes.ADD */, key, value);\n    }\n    else if (hasChanged(value, oldValue)) {\n        trigger(target, \"set\" /* TriggerOpTypes.SET */, key, value, oldValue);\n    }\n    return this;\n}\nfunction deleteEntry(key) {\n    const target = toRaw(this);\n    const { has, get } = getProto(target);\n    let hadKey = has.call(target, key);\n    if (!hadKey) {\n        key = toRaw(key);\n        hadKey = has.call(target, key);\n    }\n    else {\n        checkIdentityKeys(target, has, key);\n    }\n    const oldValue = get ? get.call(target, key) : undefined;\n    // forward the operation before queueing reactions\n    const result = target.delete(key);\n    if (hadKey) {\n        trigger(target, \"delete\" /* TriggerOpTypes.DELETE */, key, undefined, oldValue);\n    }\n    return result;\n}\nfunction clear() {\n    const target = toRaw(this);\n    const hadItems = target.size !== 0;\n    const oldTarget = isMap(target)\n            ? new Map(target)\n            : new Set(target)\n        ;\n    // forward the operation before queueing reactions\n    const result = target.clear();\n    if (hadItems) {\n        trigger(target, \"clear\" /* TriggerOpTypes.CLEAR */, undefined, undefined, oldTarget);\n    }\n    return result;\n}\nfunction createForEach(isReadonly, isShallow) {\n    return function forEach(callback, thisArg) {\n        const observed = this;\n        const target = observed[\"__v_raw\" /* ReactiveFlags.RAW */];\n        const rawTarget = toRaw(target);\n        const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive;\n        !isReadonly && track(rawTarget, \"iterate\" /* TrackOpTypes.ITERATE */, ITERATE_KEY);\n        return target.forEach((value, key) => {\n            // important: make sure the callback is\n            // 1. invoked with the reactive map as `this` and 3rd arg\n            // 2. the value received should be a corresponding reactive/readonly.\n            return callback.call(thisArg, wrap(value), wrap(key), observed);\n        });\n    };\n}\nfunction createIterableMethod(method, isReadonly, isShallow) {\n    return function (...args) {\n        const target = this[\"__v_raw\" /* ReactiveFlags.RAW */];\n        const rawTarget = toRaw(target);\n        const targetIsMap = isMap(rawTarget);\n        const isPair = method === 'entries' || (method === Symbol.iterator && targetIsMap);\n        const isKeyOnly = method === 'keys' && targetIsMap;\n        const innerIterator = target[method](...args);\n        const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive;\n        !isReadonly &&\n            track(rawTarget, \"iterate\" /* TrackOpTypes.ITERATE */, isKeyOnly ? MAP_KEY_ITERATE_KEY : ITERATE_KEY);\n        // return a wrapped iterator which returns observed versions of the\n        // values emitted from the real iterator\n        return {\n            // iterator protocol\n            next() {\n                const { value, done } = innerIterator.next();\n                return done\n                    ? { value, done }\n                    : {\n                        value: isPair ? [wrap(value[0]), wrap(value[1])] : wrap(value),\n                        done\n                    };\n            },\n            // iterable protocol\n            [Symbol.iterator]() {\n                return this;\n            }\n        };\n    };\n}\nfunction createReadonlyMethod(type) {\n    return function (...args) {\n        {\n            const key = args[0] ? `on key \"${args[0]}\" ` : ``;\n            console.warn(`${capitalize(type)} operation ${key}failed: target is readonly.`, toRaw(this));\n        }\n        return type === \"delete\" /* TriggerOpTypes.DELETE */ ? false : this;\n    };\n}\nfunction createInstrumentations() {\n    const mutableInstrumentations = {\n        get(key) {\n            return get(this, key);\n        },\n        get size() {\n            return size(this);\n        },\n        has,\n        add,\n        set,\n        delete: deleteEntry,\n        clear,\n        forEach: createForEach(false, false)\n    };\n    const shallowInstrumentations = {\n        get(key) {\n            return get(this, key, false, true);\n        },\n        get size() {\n            return size(this);\n        },\n        has,\n        add,\n        set,\n        delete: deleteEntry,\n        clear,\n        forEach: createForEach(false, true)\n    };\n    const readonlyInstrumentations = {\n        get(key) {\n            return get(this, key, true);\n        },\n        get size() {\n            return size(this, true);\n        },\n        has(key) {\n            return has.call(this, key, true);\n        },\n        add: createReadonlyMethod(\"add\" /* TriggerOpTypes.ADD */),\n        set: createReadonlyMethod(\"set\" /* TriggerOpTypes.SET */),\n        delete: createReadonlyMethod(\"delete\" /* TriggerOpTypes.DELETE */),\n        clear: createReadonlyMethod(\"clear\" /* TriggerOpTypes.CLEAR */),\n        forEach: createForEach(true, false)\n    };\n    const shallowReadonlyInstrumentations = {\n        get(key) {\n            return get(this, key, true, true);\n        },\n        get size() {\n            return size(this, true);\n        },\n        has(key) {\n            return has.call(this, key, true);\n        },\n        add: createReadonlyMethod(\"add\" /* TriggerOpTypes.ADD */),\n        set: createReadonlyMethod(\"set\" /* TriggerOpTypes.SET */),\n        delete: createReadonlyMethod(\"delete\" /* TriggerOpTypes.DELETE */),\n        clear: createReadonlyMethod(\"clear\" /* TriggerOpTypes.CLEAR */),\n        forEach: createForEach(true, true)\n    };\n    const iteratorMethods = ['keys', 'values', 'entries', Symbol.iterator];\n    iteratorMethods.forEach(method => {\n        mutableInstrumentations[method] = createIterableMethod(method, false, false);\n        readonlyInstrumentations[method] = createIterableMethod(method, true, false);\n        shallowInstrumentations[method] = createIterableMethod(method, false, true);\n        shallowReadonlyInstrumentations[method] = createIterableMethod(method, true, true);\n    });\n    return [\n        mutableInstrumentations,\n        readonlyInstrumentations,\n        shallowInstrumentations,\n        shallowReadonlyInstrumentations\n    ];\n}\nconst [mutableInstrumentations, readonlyInstrumentations, shallowInstrumentations, shallowReadonlyInstrumentations] = /* #__PURE__*/ createInstrumentations();\nfunction createInstrumentationGetter(isReadonly, shallow) {\n    const instrumentations = shallow\n        ? isReadonly\n            ? shallowReadonlyInstrumentations\n            : shallowInstrumentations\n        : isReadonly\n            ? readonlyInstrumentations\n            : mutableInstrumentations;\n    return (target, key, receiver) => {\n        if (key === \"__v_isReactive\" /* ReactiveFlags.IS_REACTIVE */) {\n            return !isReadonly;\n        }\n        else if (key === \"__v_isReadonly\" /* ReactiveFlags.IS_READONLY */) {\n            return isReadonly;\n        }\n        else if (key === \"__v_raw\" /* ReactiveFlags.RAW */) {\n            return target;\n        }\n        return Reflect.get(hasOwn(instrumentations, key) && key in target\n            ? instrumentations\n            : target, key, receiver);\n    };\n}\nconst mutableCollectionHandlers = {\n    get: /*#__PURE__*/ createInstrumentationGetter(false, false)\n};\nconst shallowCollectionHandlers = {\n    get: /*#__PURE__*/ createInstrumentationGetter(false, true)\n};\nconst readonlyCollectionHandlers = {\n    get: /*#__PURE__*/ createInstrumentationGetter(true, false)\n};\nconst shallowReadonlyCollectionHandlers = {\n    get: /*#__PURE__*/ createInstrumentationGetter(true, true)\n};\nfunction checkIdentityKeys(target, has, key) {\n    const rawKey = toRaw(key);\n    if (rawKey !== key && has.call(target, rawKey)) {\n        const type = toRawType(target);\n        console.warn(`Reactive ${type} contains both the raw and reactive ` +\n            `versions of the same object${type === `Map` ? ` as keys` : ``}, ` +\n            `which can lead to inconsistencies. ` +\n            `Avoid differentiating between the raw and reactive versions ` +\n            `of an object and only use the reactive version if possible.`);\n    }\n}\n\nconst reactiveMap = new WeakMap();\nconst shallowReactiveMap = new WeakMap();\nconst readonlyMap = new WeakMap();\nconst shallowReadonlyMap = new WeakMap();\nfunction targetTypeMap(rawType) {\n    switch (rawType) {\n        case 'Object':\n        case 'Array':\n            return 1 /* TargetType.COMMON */;\n        case 'Map':\n        case 'Set':\n        case 'WeakMap':\n        case 'WeakSet':\n            return 2 /* TargetType.COLLECTION */;\n        default:\n            return 0 /* TargetType.INVALID */;\n    }\n}\nfunction getTargetType(value) {\n    return value[\"__v_skip\" /* ReactiveFlags.SKIP */] || !Object.isExtensible(value)\n        ? 0 /* TargetType.INVALID */\n        : targetTypeMap(toRawType(value));\n}\nfunction reactive(target) {\n    // if trying to observe a readonly proxy, return the readonly version.\n    if (isReadonly(target)) {\n        return target;\n    }\n    return createReactiveObject(target, false, mutableHandlers, mutableCollectionHandlers, reactiveMap);\n}\n/**\n * Return a shallowly-reactive copy of the original object, where only the root\n * level properties are reactive. It also does not auto-unwrap refs (even at the\n * root level).\n */\nfunction shallowReactive(target) {\n    return createReactiveObject(target, false, shallowReactiveHandlers, shallowCollectionHandlers, shallowReactiveMap);\n}\n/**\n * Creates a readonly copy of the original object. Note the returned copy is not\n * made reactive, but `readonly` can be called on an already reactive object.\n */\nfunction readonly(target) {\n    return createReactiveObject(target, true, readonlyHandlers, readonlyCollectionHandlers, readonlyMap);\n}\n/**\n * Returns a reactive-copy of the original object, where only the root level\n * properties are readonly, and does NOT unwrap refs nor recursively convert\n * returned properties.\n * This is used for creating the props proxy object for stateful components.\n */\nfunction shallowReadonly(target) {\n    return createReactiveObject(target, true, shallowReadonlyHandlers, shallowReadonlyCollectionHandlers, shallowReadonlyMap);\n}\nfunction createReactiveObject(target, isReadonly, baseHandlers, collectionHandlers, proxyMap) {\n    if (!isObject(target)) {\n        {\n            console.warn(`value cannot be made reactive: ${String(target)}`);\n        }\n        return target;\n    }\n    // target is already a Proxy, return it.\n    // exception: calling readonly() on a reactive object\n    if (target[\"__v_raw\" /* ReactiveFlags.RAW */] &&\n        !(isReadonly && target[\"__v_isReactive\" /* ReactiveFlags.IS_REACTIVE */])) {\n        return target;\n    }\n    // target already has corresponding Proxy\n    const existingProxy = proxyMap.get(target);\n    if (existingProxy) {\n        return existingProxy;\n    }\n    // only specific value types can be observed.\n    const targetType = getTargetType(target);\n    if (targetType === 0 /* TargetType.INVALID */) {\n        return target;\n    }\n    const proxy = new Proxy(target, targetType === 2 /* TargetType.COLLECTION */ ? collectionHandlers : baseHandlers);\n    proxyMap.set(target, proxy);\n    return proxy;\n}\nfunction isReactive(value) {\n    if (isReadonly(value)) {\n        return isReactive(value[\"__v_raw\" /* ReactiveFlags.RAW */]);\n    }\n    return !!(value && value[\"__v_isReactive\" /* ReactiveFlags.IS_REACTIVE */]);\n}\nfunction isReadonly(value) {\n    return !!(value && value[\"__v_isReadonly\" /* ReactiveFlags.IS_READONLY */]);\n}\nfunction isShallow(value) {\n    return !!(value && value[\"__v_isShallow\" /* ReactiveFlags.IS_SHALLOW */]);\n}\nfunction isProxy(value) {\n    return isReactive(value) || isReadonly(value);\n}\nfunction toRaw(observed) {\n    const raw = observed && observed[\"__v_raw\" /* ReactiveFlags.RAW */];\n    return raw ? toRaw(raw) : observed;\n}\nfunction markRaw(value) {\n    def(value, \"__v_skip\" /* ReactiveFlags.SKIP */, true);\n    return value;\n}\nconst toReactive = (value) => isObject(value) ? reactive(value) : value;\nconst toReadonly = (value) => isObject(value) ? readonly(value) : value;\n\nfunction trackRefValue(ref) {\n    if (shouldTrack && activeEffect) {\n        ref = toRaw(ref);\n        {\n            trackEffects(ref.dep || (ref.dep = createDep()), {\n                target: ref,\n                type: \"get\" /* TrackOpTypes.GET */,\n                key: 'value'\n            });\n        }\n    }\n}\nfunction triggerRefValue(ref, newVal) {\n    ref = toRaw(ref);\n    const dep = ref.dep;\n    if (dep) {\n        {\n            triggerEffects(dep, {\n                target: ref,\n                type: \"set\" /* TriggerOpTypes.SET */,\n                key: 'value',\n                newValue: newVal\n            });\n        }\n    }\n}\nfunction isRef(r) {\n    return !!(r && r.__v_isRef === true);\n}\nfunction ref(value) {\n    return createRef(value, false);\n}\nfunction shallowRef(value) {\n    return createRef(value, true);\n}\nfunction createRef(rawValue, shallow) {\n    if (isRef(rawValue)) {\n        return rawValue;\n    }\n    return new RefImpl(rawValue, shallow);\n}\nclass RefImpl {\n    constructor(value, __v_isShallow) {\n        this.__v_isShallow = __v_isShallow;\n        this.dep = undefined;\n        this.__v_isRef = true;\n        this._rawValue = __v_isShallow ? value : toRaw(value);\n        this._value = __v_isShallow ? value : toReactive(value);\n    }\n    get value() {\n        trackRefValue(this);\n        return this._value;\n    }\n    set value(newVal) {\n        const useDirectValue = this.__v_isShallow || isShallow(newVal) || isReadonly(newVal);\n        newVal = useDirectValue ? newVal : toRaw(newVal);\n        if (hasChanged(newVal, this._rawValue)) {\n            this._rawValue = newVal;\n            this._value = useDirectValue ? newVal : toReactive(newVal);\n            triggerRefValue(this, newVal);\n        }\n    }\n}\nfunction triggerRef(ref) {\n    triggerRefValue(ref, ref.value );\n}\nfunction unref(ref) {\n    return isRef(ref) ? ref.value : ref;\n}\nconst shallowUnwrapHandlers = {\n    get: (target, key, receiver) => unref(Reflect.get(target, key, receiver)),\n    set: (target, key, value, receiver) => {\n        const oldValue = target[key];\n        if (isRef(oldValue) && !isRef(value)) {\n            oldValue.value = value;\n            return true;\n        }\n        else {\n            return Reflect.set(target, key, value, receiver);\n        }\n    }\n};\nfunction proxyRefs(objectWithRefs) {\n    return isReactive(objectWithRefs)\n        ? objectWithRefs\n        : new Proxy(objectWithRefs, shallowUnwrapHandlers);\n}\nclass CustomRefImpl {\n    constructor(factory) {\n        this.dep = undefined;\n        this.__v_isRef = true;\n        const { get, set } = factory(() => trackRefValue(this), () => triggerRefValue(this));\n        this._get = get;\n        this._set = set;\n    }\n    get value() {\n        return this._get();\n    }\n    set value(newVal) {\n        this._set(newVal);\n    }\n}\nfunction customRef(factory) {\n    return new CustomRefImpl(factory);\n}\nfunction toRefs(object) {\n    if (!isProxy(object)) {\n        console.warn(`toRefs() expects a reactive object but received a plain one.`);\n    }\n    const ret = isArray(object) ? new Array(object.length) : {};\n    for (const key in object) {\n        ret[key] = toRef(object, key);\n    }\n    return ret;\n}\nclass ObjectRefImpl {\n    constructor(_object, _key, _defaultValue) {\n        this._object = _object;\n        this._key = _key;\n        this._defaultValue = _defaultValue;\n        this.__v_isRef = true;\n    }\n    get value() {\n        const val = this._object[this._key];\n        return val === undefined ? this._defaultValue : val;\n    }\n    set value(newVal) {\n        this._object[this._key] = newVal;\n    }\n    get dep() {\n        return getDepFromReactive(toRaw(this._object), this._key);\n    }\n}\nfunction toRef(object, key, defaultValue) {\n    const val = object[key];\n    return isRef(val)\n        ? val\n        : new ObjectRefImpl(object, key, defaultValue);\n}\n\nvar _a;\nclass ComputedRefImpl {\n    constructor(getter, _setter, isReadonly, isSSR) {\n        this._setter = _setter;\n        this.dep = undefined;\n        this.__v_isRef = true;\n        this[_a] = false;\n        this._dirty = true;\n        this.effect = new ReactiveEffect(getter, () => {\n            if (!this._dirty) {\n                this._dirty = true;\n                triggerRefValue(this);\n            }\n        });\n        this.effect.computed = this;\n        this.effect.active = this._cacheable = !isSSR;\n        this[\"__v_isReadonly\" /* ReactiveFlags.IS_READONLY */] = isReadonly;\n    }\n    get value() {\n        // the computed ref may get wrapped by other proxies e.g. readonly() #3376\n        const self = toRaw(this);\n        trackRefValue(self);\n        if (self._dirty || !self._cacheable) {\n            self._dirty = false;\n            self._value = self.effect.run();\n        }\n        return self._value;\n    }\n    set value(newValue) {\n        this._setter(newValue);\n    }\n}\n_a = \"__v_isReadonly\" /* ReactiveFlags.IS_READONLY */;\nfunction computed$1(getterOrOptions, debugOptions, isSSR = false) {\n    let getter;\n    let setter;\n    const onlyGetter = isFunction(getterOrOptions);\n    if (onlyGetter) {\n        getter = getterOrOptions;\n        setter = () => {\n                console.warn('Write operation failed: computed value is readonly');\n            }\n            ;\n    }\n    else {\n        getter = getterOrOptions.get;\n        setter = getterOrOptions.set;\n    }\n    const cRef = new ComputedRefImpl(getter, setter, onlyGetter || !setter, isSSR);\n    if (debugOptions && !isSSR) {\n        cRef.effect.onTrack = debugOptions.onTrack;\n        cRef.effect.onTrigger = debugOptions.onTrigger;\n    }\n    return cRef;\n}\n\nconst stack = [];\nfunction pushWarningContext(vnode) {\n    stack.push(vnode);\n}\nfunction popWarningContext() {\n    stack.pop();\n}\nfunction warn(msg, ...args) {\n    // avoid props formatting or warn handler tracking deps that might be mutated\n    // during patch, leading to infinite recursion.\n    pauseTracking();\n    const instance = stack.length ? stack[stack.length - 1].component : null;\n    const appWarnHandler = instance && instance.appContext.config.warnHandler;\n    const trace = getComponentTrace();\n    if (appWarnHandler) {\n        callWithErrorHandling(appWarnHandler, instance, 11 /* ErrorCodes.APP_WARN_HANDLER */, [\n            msg + args.join(''),\n            instance && instance.proxy,\n            trace\n                .map(({ vnode }) => `at <${formatComponentName(instance, vnode.type)}>`)\n                .join('\\n'),\n            trace\n        ]);\n    }\n    else {\n        const warnArgs = [`[Vue warn]: ${msg}`, ...args];\n        /* istanbul ignore if */\n        if (trace.length &&\n            // avoid spamming console during tests\n            !false) {\n            warnArgs.push(`\\n`, ...formatTrace(trace));\n        }\n        console.warn(...warnArgs);\n    }\n    resetTracking();\n}\nfunction getComponentTrace() {\n    let currentVNode = stack[stack.length - 1];\n    if (!currentVNode) {\n        return [];\n    }\n    // we can't just use the stack because it will be incomplete during updates\n    // that did not start from the root. Re-construct the parent chain using\n    // instance parent pointers.\n    const normalizedStack = [];\n    while (currentVNode) {\n        const last = normalizedStack[0];\n        if (last && last.vnode === currentVNode) {\n            last.recurseCount++;\n        }\n        else {\n            normalizedStack.push({\n                vnode: currentVNode,\n                recurseCount: 0\n            });\n        }\n        const parentInstance = currentVNode.component && currentVNode.component.parent;\n        currentVNode = parentInstance && parentInstance.vnode;\n    }\n    return normalizedStack;\n}\n/* istanbul ignore next */\nfunction formatTrace(trace) {\n    const logs = [];\n    trace.forEach((entry, i) => {\n        logs.push(...(i === 0 ? [] : [`\\n`]), ...formatTraceEntry(entry));\n    });\n    return logs;\n}\nfunction formatTraceEntry({ vnode, recurseCount }) {\n    const postfix = recurseCount > 0 ? `... (${recurseCount} recursive calls)` : ``;\n    const isRoot = vnode.component ? vnode.component.parent == null : false;\n    const open = ` at <${formatComponentName(vnode.component, vnode.type, isRoot)}`;\n    const close = `>` + postfix;\n    return vnode.props\n        ? [open, ...formatProps(vnode.props), close]\n        : [open + close];\n}\n/* istanbul ignore next */\nfunction formatProps(props) {\n    const res = [];\n    const keys = Object.keys(props);\n    keys.slice(0, 3).forEach(key => {\n        res.push(...formatProp(key, props[key]));\n    });\n    if (keys.length > 3) {\n        res.push(` ...`);\n    }\n    return res;\n}\n/* istanbul ignore next */\nfunction formatProp(key, value, raw) {\n    if (isString(value)) {\n        value = JSON.stringify(value);\n        return raw ? value : [`${key}=${value}`];\n    }\n    else if (typeof value === 'number' ||\n        typeof value === 'boolean' ||\n        value == null) {\n        return raw ? value : [`${key}=${value}`];\n    }\n    else if (isRef(value)) {\n        value = formatProp(key, toRaw(value.value), true);\n        return raw ? value : [`${key}=Ref<`, value, `>`];\n    }\n    else if (isFunction(value)) {\n        return [`${key}=fn${value.name ? `<${value.name}>` : ``}`];\n    }\n    else {\n        value = toRaw(value);\n        return raw ? value : [`${key}=`, value];\n    }\n}\n/**\n * @internal\n */\nfunction assertNumber(val, type) {\n    if (val === undefined) {\n        return;\n    }\n    else if (typeof val !== 'number') {\n        warn(`${type} is not a valid number - ` + `got ${JSON.stringify(val)}.`);\n    }\n    else if (isNaN(val)) {\n        warn(`${type} is NaN - ` + 'the duration expression might be incorrect.');\n    }\n}\n\nconst ErrorTypeStrings = {\n    [\"sp\" /* LifecycleHooks.SERVER_PREFETCH */]: 'serverPrefetch hook',\n    [\"bc\" /* LifecycleHooks.BEFORE_CREATE */]: 'beforeCreate hook',\n    [\"c\" /* LifecycleHooks.CREATED */]: 'created hook',\n    [\"bm\" /* LifecycleHooks.BEFORE_MOUNT */]: 'beforeMount hook',\n    [\"m\" /* LifecycleHooks.MOUNTED */]: 'mounted hook',\n    [\"bu\" /* LifecycleHooks.BEFORE_UPDATE */]: 'beforeUpdate hook',\n    [\"u\" /* LifecycleHooks.UPDATED */]: 'updated',\n    [\"bum\" /* LifecycleHooks.BEFORE_UNMOUNT */]: 'beforeUnmount hook',\n    [\"um\" /* LifecycleHooks.UNMOUNTED */]: 'unmounted hook',\n    [\"a\" /* LifecycleHooks.ACTIVATED */]: 'activated hook',\n    [\"da\" /* LifecycleHooks.DEACTIVATED */]: 'deactivated hook',\n    [\"ec\" /* LifecycleHooks.ERROR_CAPTURED */]: 'errorCaptured hook',\n    [\"rtc\" /* LifecycleHooks.RENDER_TRACKED */]: 'renderTracked hook',\n    [\"rtg\" /* LifecycleHooks.RENDER_TRIGGERED */]: 'renderTriggered hook',\n    [0 /* ErrorCodes.SETUP_FUNCTION */]: 'setup function',\n    [1 /* ErrorCodes.RENDER_FUNCTION */]: 'render function',\n    [2 /* ErrorCodes.WATCH_GETTER */]: 'watcher getter',\n    [3 /* ErrorCodes.WATCH_CALLBACK */]: 'watcher callback',\n    [4 /* ErrorCodes.WATCH_CLEANUP */]: 'watcher cleanup function',\n    [5 /* ErrorCodes.NATIVE_EVENT_HANDLER */]: 'native event handler',\n    [6 /* ErrorCodes.COMPONENT_EVENT_HANDLER */]: 'component event handler',\n    [7 /* ErrorCodes.VNODE_HOOK */]: 'vnode hook',\n    [8 /* ErrorCodes.DIRECTIVE_HOOK */]: 'directive hook',\n    [9 /* ErrorCodes.TRANSITION_HOOK */]: 'transition hook',\n    [10 /* ErrorCodes.APP_ERROR_HANDLER */]: 'app errorHandler',\n    [11 /* ErrorCodes.APP_WARN_HANDLER */]: 'app warnHandler',\n    [12 /* ErrorCodes.FUNCTION_REF */]: 'ref function',\n    [13 /* ErrorCodes.ASYNC_COMPONENT_LOADER */]: 'async component loader',\n    [14 /* ErrorCodes.SCHEDULER */]: 'scheduler flush. This is likely a Vue internals bug. ' +\n        'Please open an issue at https://new-issue.vuejs.org/?repo=vuejs/core'\n};\nfunction callWithErrorHandling(fn, instance, type, args) {\n    let res;\n    try {\n        res = args ? fn(...args) : fn();\n    }\n    catch (err) {\n        handleError(err, instance, type);\n    }\n    return res;\n}\nfunction callWithAsyncErrorHandling(fn, instance, type, args) {\n    if (isFunction(fn)) {\n        const res = callWithErrorHandling(fn, instance, type, args);\n        if (res && isPromise(res)) {\n            res.catch(err => {\n                handleError(err, instance, type);\n            });\n        }\n        return res;\n    }\n    const values = [];\n    for (let i = 0; i < fn.length; i++) {\n        values.push(callWithAsyncErrorHandling(fn[i], instance, type, args));\n    }\n    return values;\n}\nfunction handleError(err, instance, type, throwInDev = true) {\n    const contextVNode = instance ? instance.vnode : null;\n    if (instance) {\n        let cur = instance.parent;\n        // the exposed instance is the render proxy to keep it consistent with 2.x\n        const exposedInstance = instance.proxy;\n        // in production the hook receives only the error code\n        const errorInfo = ErrorTypeStrings[type] ;\n        while (cur) {\n            const errorCapturedHooks = cur.ec;\n            if (errorCapturedHooks) {\n                for (let i = 0; i < errorCapturedHooks.length; i++) {\n                    if (errorCapturedHooks[i](err, exposedInstance, errorInfo) === false) {\n                        return;\n                    }\n                }\n            }\n            cur = cur.parent;\n        }\n        // app-level handling\n        const appErrorHandler = instance.appContext.config.errorHandler;\n        if (appErrorHandler) {\n            callWithErrorHandling(appErrorHandler, null, 10 /* ErrorCodes.APP_ERROR_HANDLER */, [err, exposedInstance, errorInfo]);\n            return;\n        }\n    }\n    logError(err, type, contextVNode, throwInDev);\n}\nfunction logError(err, type, contextVNode, throwInDev = true) {\n    {\n        const info = ErrorTypeStrings[type];\n        if (contextVNode) {\n            pushWarningContext(contextVNode);\n        }\n        warn(`Unhandled error${info ? ` during execution of ${info}` : ``}`);\n        if (contextVNode) {\n            popWarningContext();\n        }\n        // crash in dev by default so it's more noticeable\n        if (throwInDev) {\n            throw err;\n        }\n        else {\n            console.error(err);\n        }\n    }\n}\n\nlet isFlushing = false;\nlet isFlushPending = false;\nconst queue = [];\nlet flushIndex = 0;\nconst pendingPostFlushCbs = [];\nlet activePostFlushCbs = null;\nlet postFlushIndex = 0;\nconst resolvedPromise = /*#__PURE__*/ Promise.resolve();\nlet currentFlushPromise = null;\nconst RECURSION_LIMIT = 100;\nfunction nextTick(fn) {\n    const p = currentFlushPromise || resolvedPromise;\n    return fn ? p.then(this ? fn.bind(this) : fn) : p;\n}\n// #2768\n// Use binary-search to find a suitable position in the queue,\n// so that the queue maintains the increasing order of job's id,\n// which can prevent the job from being skipped and also can avoid repeated patching.\nfunction findInsertionIndex(id) {\n    // the start index should be `flushIndex + 1`\n    let start = flushIndex + 1;\n    let end = queue.length;\n    while (start < end) {\n        const middle = (start + end) >>> 1;\n        const middleJobId = getId(queue[middle]);\n        middleJobId < id ? (start = middle + 1) : (end = middle);\n    }\n    return start;\n}\nfunction queueJob(job) {\n    // the dedupe search uses the startIndex argument of Array.includes()\n    // by default the search index includes the current job that is being run\n    // so it cannot recursively trigger itself again.\n    // if the job is a watch() callback, the search will start with a +1 index to\n    // allow it recursively trigger itself - it is the user's responsibility to\n    // ensure it doesn't end up in an infinite loop.\n    if (!queue.length ||\n        !queue.includes(job, isFlushing && job.allowRecurse ? flushIndex + 1 : flushIndex)) {\n        if (job.id == null) {\n            queue.push(job);\n        }\n        else {\n            queue.splice(findInsertionIndex(job.id), 0, job);\n        }\n        queueFlush();\n    }\n}\nfunction queueFlush() {\n    if (!isFlushing && !isFlushPending) {\n        isFlushPending = true;\n        currentFlushPromise = resolvedPromise.then(flushJobs);\n    }\n}\nfunction invalidateJob(job) {\n    const i = queue.indexOf(job);\n    if (i > flushIndex) {\n        queue.splice(i, 1);\n    }\n}\nfunction queuePostFlushCb(cb) {\n    if (!isArray(cb)) {\n        if (!activePostFlushCbs ||\n            !activePostFlushCbs.includes(cb, cb.allowRecurse ? postFlushIndex + 1 : postFlushIndex)) {\n            pendingPostFlushCbs.push(cb);\n        }\n    }\n    else {\n        // if cb is an array, it is a component lifecycle hook which can only be\n        // triggered by a job, which is already deduped in the main queue, so\n        // we can skip duplicate check here to improve perf\n        pendingPostFlushCbs.push(...cb);\n    }\n    queueFlush();\n}\nfunction flushPreFlushCbs(seen, \n// if currently flushing, skip the current job itself\ni = isFlushing ? flushIndex + 1 : 0) {\n    {\n        seen = seen || new Map();\n    }\n    for (; i < queue.length; i++) {\n        const cb = queue[i];\n        if (cb && cb.pre) {\n            if (checkRecursiveUpdates(seen, cb)) {\n                continue;\n            }\n            queue.splice(i, 1);\n            i--;\n            cb();\n        }\n    }\n}\nfunction flushPostFlushCbs(seen) {\n    if (pendingPostFlushCbs.length) {\n        const deduped = [...new Set(pendingPostFlushCbs)];\n        pendingPostFlushCbs.length = 0;\n        // #1947 already has active queue, nested flushPostFlushCbs call\n        if (activePostFlushCbs) {\n            activePostFlushCbs.push(...deduped);\n            return;\n        }\n        activePostFlushCbs = deduped;\n        {\n            seen = seen || new Map();\n        }\n        activePostFlushCbs.sort((a, b) => getId(a) - getId(b));\n        for (postFlushIndex = 0; postFlushIndex < activePostFlushCbs.length; postFlushIndex++) {\n            if (checkRecursiveUpdates(seen, activePostFlushCbs[postFlushIndex])) {\n                continue;\n            }\n            activePostFlushCbs[postFlushIndex]();\n        }\n        activePostFlushCbs = null;\n        postFlushIndex = 0;\n    }\n}\nconst getId = (job) => job.id == null ? Infinity : job.id;\nconst comparator = (a, b) => {\n    const diff = getId(a) - getId(b);\n    if (diff === 0) {\n        if (a.pre && !b.pre)\n            return -1;\n        if (b.pre && !a.pre)\n            return 1;\n    }\n    return diff;\n};\nfunction flushJobs(seen) {\n    isFlushPending = false;\n    isFlushing = true;\n    {\n        seen = seen || new Map();\n    }\n    // Sort queue before flush.\n    // This ensures that:\n    // 1. Components are updated from parent to child. (because parent is always\n    //    created before the child so its render effect will have smaller\n    //    priority number)\n    // 2. If a component is unmounted during a parent component's update,\n    //    its update can be skipped.\n    queue.sort(comparator);\n    // conditional usage of checkRecursiveUpdate must be determined out of\n    // try ... catch block since Rollup by default de-optimizes treeshaking\n    // inside try-catch. This can leave all warning code unshaked. Although\n    // they would get eventually shaken by a minifier like terser, some minifiers\n    // would fail to do that (e.g. https://github.com/evanw/esbuild/issues/1610)\n    const check = (job) => checkRecursiveUpdates(seen, job)\n        ;\n    try {\n        for (flushIndex = 0; flushIndex < queue.length; flushIndex++) {\n            const job = queue[flushIndex];\n            if (job && job.active !== false) {\n                if (true && check(job)) {\n                    continue;\n                }\n                // console.log(`running:`, job.id)\n                callWithErrorHandling(job, null, 14 /* ErrorCodes.SCHEDULER */);\n            }\n        }\n    }\n    finally {\n        flushIndex = 0;\n        queue.length = 0;\n        flushPostFlushCbs(seen);\n        isFlushing = false;\n        currentFlushPromise = null;\n        // some postFlushCb queued jobs!\n        // keep flushing until it drains.\n        if (queue.length || pendingPostFlushCbs.length) {\n            flushJobs(seen);\n        }\n    }\n}\nfunction checkRecursiveUpdates(seen, fn) {\n    if (!seen.has(fn)) {\n        seen.set(fn, 1);\n    }\n    else {\n        const count = seen.get(fn);\n        if (count > RECURSION_LIMIT) {\n            const instance = fn.ownerInstance;\n            const componentName = instance && getComponentName(instance.type);\n            warn(`Maximum recursive updates exceeded${componentName ? ` in component <${componentName}>` : ``}. ` +\n                `This means you have a reactive effect that is mutating its own ` +\n                `dependencies and thus recursively triggering itself. Possible sources ` +\n                `include component template, render function, updated hook or ` +\n                `watcher source function.`);\n            return true;\n        }\n        else {\n            seen.set(fn, count + 1);\n        }\n    }\n}\n\n/* eslint-disable no-restricted-globals */\nlet isHmrUpdating = false;\nconst hmrDirtyComponents = new Set();\n// Expose the HMR runtime on the global object\n// This makes it entirely tree-shakable without polluting the exports and makes\n// it easier to be used in toolings like vue-loader\n// Note: for a component to be eligible for HMR it also needs the __hmrId option\n// to be set so that its instances can be registered / removed.\n{\n    getGlobalThis().__VUE_HMR_RUNTIME__ = {\n        createRecord: tryWrap(createRecord),\n        rerender: tryWrap(rerender),\n        reload: tryWrap(reload)\n    };\n}\nconst map = new Map();\nfunction registerHMR(instance) {\n    const id = instance.type.__hmrId;\n    let record = map.get(id);\n    if (!record) {\n        createRecord(id, instance.type);\n        record = map.get(id);\n    }\n    record.instances.add(instance);\n}\nfunction unregisterHMR(instance) {\n    map.get(instance.type.__hmrId).instances.delete(instance);\n}\nfunction createRecord(id, initialDef) {\n    if (map.has(id)) {\n        return false;\n    }\n    map.set(id, {\n        initialDef: normalizeClassComponent(initialDef),\n        instances: new Set()\n    });\n    return true;\n}\nfunction normalizeClassComponent(component) {\n    return isClassComponent(component) ? component.__vccOpts : component;\n}\nfunction rerender(id, newRender) {\n    const record = map.get(id);\n    if (!record) {\n        return;\n    }\n    // update initial record (for not-yet-rendered component)\n    record.initialDef.render = newRender;\n    [...record.instances].forEach(instance => {\n        if (newRender) {\n            instance.render = newRender;\n            normalizeClassComponent(instance.type).render = newRender;\n        }\n        instance.renderCache = [];\n        // this flag forces child components with slot content to update\n        isHmrUpdating = true;\n        instance.update();\n        isHmrUpdating = false;\n    });\n}\nfunction reload(id, newComp) {\n    const record = map.get(id);\n    if (!record)\n        return;\n    newComp = normalizeClassComponent(newComp);\n    // update initial def (for not-yet-rendered components)\n    updateComponentDef(record.initialDef, newComp);\n    // create a snapshot which avoids the set being mutated during updates\n    const instances = [...record.instances];\n    for (const instance of instances) {\n        const oldComp = normalizeClassComponent(instance.type);\n        if (!hmrDirtyComponents.has(oldComp)) {\n            // 1. Update existing comp definition to match new one\n            if (oldComp !== record.initialDef) {\n                updateComponentDef(oldComp, newComp);\n            }\n            // 2. mark definition dirty. This forces the renderer to replace the\n            // component on patch.\n            hmrDirtyComponents.add(oldComp);\n        }\n        // 3. invalidate options resolution cache\n        instance.appContext.optionsCache.delete(instance.type);\n        // 4. actually update\n        if (instance.ceReload) {\n            // custom element\n            hmrDirtyComponents.add(oldComp);\n            instance.ceReload(newComp.styles);\n            hmrDirtyComponents.delete(oldComp);\n        }\n        else if (instance.parent) {\n            // 4. Force the parent instance to re-render. This will cause all updated\n            // components to be unmounted and re-mounted. Queue the update so that we\n            // don't end up forcing the same parent to re-render multiple times.\n            queueJob(instance.parent.update);\n        }\n        else if (instance.appContext.reload) {\n            // root instance mounted via createApp() has a reload method\n            instance.appContext.reload();\n        }\n        else if (typeof window !== 'undefined') {\n            // root instance inside tree created via raw render(). Force reload.\n            window.location.reload();\n        }\n        else {\n            console.warn('[HMR] Root or manually mounted instance modified. Full reload required.');\n        }\n    }\n    // 5. make sure to cleanup dirty hmr components after update\n    queuePostFlushCb(() => {\n        for (const instance of instances) {\n            hmrDirtyComponents.delete(normalizeClassComponent(instance.type));\n        }\n    });\n}\nfunction updateComponentDef(oldComp, newComp) {\n    extend(oldComp, newComp);\n    for (const key in oldComp) {\n        if (key !== '__file' && !(key in newComp)) {\n            delete oldComp[key];\n        }\n    }\n}\nfunction tryWrap(fn) {\n    return (id, arg) => {\n        try {\n            return fn(id, arg);\n        }\n        catch (e) {\n            console.error(e);\n            console.warn(`[HMR] Something went wrong during Vue component hot-reload. ` +\n                `Full reload required.`);\n        }\n    };\n}\n\nlet devtools;\nlet buffer = [];\nlet devtoolsNotInstalled = false;\nfunction emit$1(event, ...args) {\n    if (devtools) {\n        devtools.emit(event, ...args);\n    }\n    else if (!devtoolsNotInstalled) {\n        buffer.push({ event, args });\n    }\n}\nfunction setDevtoolsHook(hook, target) {\n    var _a, _b;\n    devtools = hook;\n    if (devtools) {\n        devtools.enabled = true;\n        buffer.forEach(({ event, args }) => devtools.emit(event, ...args));\n        buffer = [];\n    }\n    else if (\n    // handle late devtools injection - only do this if we are in an actual\n    // browser environment to avoid the timer handle stalling test runner exit\n    // (#4815)\n    typeof window !== 'undefined' &&\n        // some envs mock window but not fully\n        window.HTMLElement &&\n        // also exclude jsdom\n        !((_b = (_a = window.navigator) === null || _a === void 0 ? void 0 : _a.userAgent) === null || _b === void 0 ? void 0 : _b.includes('jsdom'))) {\n        const replay = (target.__VUE_DEVTOOLS_HOOK_REPLAY__ =\n            target.__VUE_DEVTOOLS_HOOK_REPLAY__ || []);\n        replay.push((newHook) => {\n            setDevtoolsHook(newHook, target);\n        });\n        // clear buffer after 3s - the user probably doesn't have devtools installed\n        // at all, and keeping the buffer will cause memory leaks (#4738)\n        setTimeout(() => {\n            if (!devtools) {\n                target.__VUE_DEVTOOLS_HOOK_REPLAY__ = null;\n                devtoolsNotInstalled = true;\n                buffer = [];\n            }\n        }, 3000);\n    }\n    else {\n        // non-browser env, assume not installed\n        devtoolsNotInstalled = true;\n        buffer = [];\n    }\n}\nfunction devtoolsInitApp(app, version) {\n    emit$1(\"app:init\" /* DevtoolsHooks.APP_INIT */, app, version, {\n        Fragment,\n        Text,\n        Comment,\n        Static\n    });\n}\nfunction devtoolsUnmountApp(app) {\n    emit$1(\"app:unmount\" /* DevtoolsHooks.APP_UNMOUNT */, app);\n}\nconst devtoolsComponentAdded = /*#__PURE__*/ createDevtoolsComponentHook(\"component:added\" /* DevtoolsHooks.COMPONENT_ADDED */);\nconst devtoolsComponentUpdated = \n/*#__PURE__*/ createDevtoolsComponentHook(\"component:updated\" /* DevtoolsHooks.COMPONENT_UPDATED */);\nconst _devtoolsComponentRemoved = /*#__PURE__*/ createDevtoolsComponentHook(\"component:removed\" /* DevtoolsHooks.COMPONENT_REMOVED */);\nconst devtoolsComponentRemoved = (component) => {\n    if (devtools &&\n        typeof devtools.cleanupBuffer === 'function' &&\n        // remove the component if it wasn't buffered\n        !devtools.cleanupBuffer(component)) {\n        _devtoolsComponentRemoved(component);\n    }\n};\nfunction createDevtoolsComponentHook(hook) {\n    return (component) => {\n        emit$1(hook, component.appContext.app, component.uid, component.parent ? component.parent.uid : undefined, component);\n    };\n}\nconst devtoolsPerfStart = /*#__PURE__*/ createDevtoolsPerformanceHook(\"perf:start\" /* DevtoolsHooks.PERFORMANCE_START */);\nconst devtoolsPerfEnd = /*#__PURE__*/ createDevtoolsPerformanceHook(\"perf:end\" /* DevtoolsHooks.PERFORMANCE_END */);\nfunction createDevtoolsPerformanceHook(hook) {\n    return (component, type, time) => {\n        emit$1(hook, component.appContext.app, component.uid, component, type, time);\n    };\n}\nfunction devtoolsComponentEmit(component, event, params) {\n    emit$1(\"component:emit\" /* DevtoolsHooks.COMPONENT_EMIT */, component.appContext.app, component, event, params);\n}\n\nfunction emit(instance, event, ...rawArgs) {\n    if (instance.isUnmounted)\n        return;\n    const props = instance.vnode.props || EMPTY_OBJ;\n    {\n        const { emitsOptions, propsOptions: [propsOptions] } = instance;\n        if (emitsOptions) {\n            if (!(event in emitsOptions) &&\n                !(false )) {\n                if (!propsOptions || !(toHandlerKey(event) in propsOptions)) {\n                    warn(`Component emitted event \"${event}\" but it is neither declared in ` +\n                        `the emits option nor as an \"${toHandlerKey(event)}\" prop.`);\n                }\n            }\n            else {\n                const validator = emitsOptions[event];\n                if (isFunction(validator)) {\n                    const isValid = validator(...rawArgs);\n                    if (!isValid) {\n                        warn(`Invalid event arguments: event validation failed for event \"${event}\".`);\n                    }\n                }\n            }\n        }\n    }\n    let args = rawArgs;\n    const isModelListener = event.startsWith('update:');\n    // for v-model update:xxx events, apply modifiers on args\n    const modelArg = isModelListener && event.slice(7);\n    if (modelArg && modelArg in props) {\n        const modifiersKey = `${modelArg === 'modelValue' ? 'model' : modelArg}Modifiers`;\n        const { number, trim } = props[modifiersKey] || EMPTY_OBJ;\n        if (trim) {\n            args = rawArgs.map(a => (isString(a) ? a.trim() : a));\n        }\n        if (number) {\n            args = rawArgs.map(looseToNumber);\n        }\n    }\n    {\n        devtoolsComponentEmit(instance, event, args);\n    }\n    {\n        const lowerCaseEvent = event.toLowerCase();\n        if (lowerCaseEvent !== event && props[toHandlerKey(lowerCaseEvent)]) {\n            warn(`Event \"${lowerCaseEvent}\" is emitted in component ` +\n                `${formatComponentName(instance, instance.type)} but the handler is registered for \"${event}\". ` +\n                `Note that HTML attributes are case-insensitive and you cannot use ` +\n                `v-on to listen to camelCase events when using in-DOM templates. ` +\n                `You should probably use \"${hyphenate(event)}\" instead of \"${event}\".`);\n        }\n    }\n    let handlerName;\n    let handler = props[(handlerName = toHandlerKey(event))] ||\n        // also try camelCase event handler (#2249)\n        props[(handlerName = toHandlerKey(camelize(event)))];\n    // for v-model update:xxx events, also trigger kebab-case equivalent\n    // for props passed via kebab-case\n    if (!handler && isModelListener) {\n        handler = props[(handlerName = toHandlerKey(hyphenate(event)))];\n    }\n    if (handler) {\n        callWithAsyncErrorHandling(handler, instance, 6 /* ErrorCodes.COMPONENT_EVENT_HANDLER */, args);\n    }\n    const onceHandler = props[handlerName + `Once`];\n    if (onceHandler) {\n        if (!instance.emitted) {\n            instance.emitted = {};\n        }\n        else if (instance.emitted[handlerName]) {\n            return;\n        }\n        instance.emitted[handlerName] = true;\n        callWithAsyncErrorHandling(onceHandler, instance, 6 /* ErrorCodes.COMPONENT_EVENT_HANDLER */, args);\n    }\n}\nfunction normalizeEmitsOptions(comp, appContext, asMixin = false) {\n    const cache = appContext.emitsCache;\n    const cached = cache.get(comp);\n    if (cached !== undefined) {\n        return cached;\n    }\n    const raw = comp.emits;\n    let normalized = {};\n    // apply mixin/extends props\n    let hasExtends = false;\n    if (!isFunction(comp)) {\n        const extendEmits = (raw) => {\n            const normalizedFromExtend = normalizeEmitsOptions(raw, appContext, true);\n            if (normalizedFromExtend) {\n                hasExtends = true;\n                extend(normalized, normalizedFromExtend);\n            }\n        };\n        if (!asMixin && appContext.mixins.length) {\n            appContext.mixins.forEach(extendEmits);\n        }\n        if (comp.extends) {\n            extendEmits(comp.extends);\n        }\n        if (comp.mixins) {\n            comp.mixins.forEach(extendEmits);\n        }\n    }\n    if (!raw && !hasExtends) {\n        if (isObject(comp)) {\n            cache.set(comp, null);\n        }\n        return null;\n    }\n    if (isArray(raw)) {\n        raw.forEach(key => (normalized[key] = null));\n    }\n    else {\n        extend(normalized, raw);\n    }\n    if (isObject(comp)) {\n        cache.set(comp, normalized);\n    }\n    return normalized;\n}\n// Check if an incoming prop key is a declared emit event listener.\n// e.g. With `emits: { click: null }`, props named `onClick` and `onclick` are\n// both considered matched listeners.\nfunction isEmitListener(options, key) {\n    if (!options || !isOn(key)) {\n        return false;\n    }\n    key = key.slice(2).replace(/Once$/, '');\n    return (hasOwn(options, key[0].toLowerCase() + key.slice(1)) ||\n        hasOwn(options, hyphenate(key)) ||\n        hasOwn(options, key));\n}\n\n/**\n * mark the current rendering instance for asset resolution (e.g.\n * resolveComponent, resolveDirective) during render\n */\nlet currentRenderingInstance = null;\nlet currentScopeId = null;\n/**\n * Note: rendering calls maybe nested. The function returns the parent rendering\n * instance if present, which should be restored after the render is done:\n *\n * ```js\n * const prev = setCurrentRenderingInstance(i)\n * // ...render\n * setCurrentRenderingInstance(prev)\n * ```\n */\nfunction setCurrentRenderingInstance(instance) {\n    const prev = currentRenderingInstance;\n    currentRenderingInstance = instance;\n    currentScopeId = (instance && instance.type.__scopeId) || null;\n    return prev;\n}\n/**\n * Set scope id when creating hoisted vnodes.\n * @private compiler helper\n */\nfunction pushScopeId(id) {\n    currentScopeId = id;\n}\n/**\n * Technically we no longer need this after 3.0.8 but we need to keep the same\n * API for backwards compat w/ code generated by compilers.\n * @private\n */\nfunction popScopeId() {\n    currentScopeId = null;\n}\n/**\n * Only for backwards compat\n * @private\n */\nconst withScopeId = (_id) => withCtx;\n/**\n * Wrap a slot function to memoize current rendering instance\n * @private compiler helper\n */\nfunction withCtx(fn, ctx = currentRenderingInstance, isNonScopedSlot // false only\n) {\n    if (!ctx)\n        return fn;\n    // already normalized\n    if (fn._n) {\n        return fn;\n    }\n    const renderFnWithContext = (...args) => {\n        // If a user calls a compiled slot inside a template expression (#1745), it\n        // can mess up block tracking, so by default we disable block tracking and\n        // force bail out when invoking a compiled slot (indicated by the ._d flag).\n        // This isn't necessary if rendering a compiled `<slot>`, so we flip the\n        // ._d flag off when invoking the wrapped fn inside `renderSlot`.\n        if (renderFnWithContext._d) {\n            setBlockTracking(-1);\n        }\n        const prevInstance = setCurrentRenderingInstance(ctx);\n        let res;\n        try {\n            res = fn(...args);\n        }\n        finally {\n            setCurrentRenderingInstance(prevInstance);\n            if (renderFnWithContext._d) {\n                setBlockTracking(1);\n            }\n        }\n        {\n            devtoolsComponentUpdated(ctx);\n        }\n        return res;\n    };\n    // mark normalized to avoid duplicated wrapping\n    renderFnWithContext._n = true;\n    // mark this as compiled by default\n    // this is used in vnode.ts -> normalizeChildren() to set the slot\n    // rendering flag.\n    renderFnWithContext._c = true;\n    // disable block tracking by default\n    renderFnWithContext._d = true;\n    return renderFnWithContext;\n}\n\n/**\n * dev only flag to track whether $attrs was used during render.\n * If $attrs was used during render then the warning for failed attrs\n * fallthrough can be suppressed.\n */\nlet accessedAttrs = false;\nfunction markAttrsAccessed() {\n    accessedAttrs = true;\n}\nfunction renderComponentRoot(instance) {\n    const { type: Component, vnode, proxy, withProxy, props, propsOptions: [propsOptions], slots, attrs, emit, render, renderCache, data, setupState, ctx, inheritAttrs } = instance;\n    let result;\n    let fallthroughAttrs;\n    const prev = setCurrentRenderingInstance(instance);\n    {\n        accessedAttrs = false;\n    }\n    try {\n        if (vnode.shapeFlag & 4 /* ShapeFlags.STATEFUL_COMPONENT */) {\n            // withProxy is a proxy with a different `has` trap only for\n            // runtime-compiled render functions using `with` block.\n            const proxyToUse = withProxy || proxy;\n            result = normalizeVNode(render.call(proxyToUse, proxyToUse, renderCache, props, setupState, data, ctx));\n            fallthroughAttrs = attrs;\n        }\n        else {\n            // functional\n            const render = Component;\n            // in dev, mark attrs accessed if optional props (attrs === props)\n            if (true && attrs === props) {\n                markAttrsAccessed();\n            }\n            result = normalizeVNode(render.length > 1\n                ? render(props, true\n                    ? {\n                        get attrs() {\n                            markAttrsAccessed();\n                            return attrs;\n                        },\n                        slots,\n                        emit\n                    }\n                    : { attrs, slots, emit })\n                : render(props, null /* we know it doesn't need it */));\n            fallthroughAttrs = Component.props\n                ? attrs\n                : getFunctionalFallthrough(attrs);\n        }\n    }\n    catch (err) {\n        blockStack.length = 0;\n        handleError(err, instance, 1 /* ErrorCodes.RENDER_FUNCTION */);\n        result = createVNode(Comment);\n    }\n    // attr merging\n    // in dev mode, comments are preserved, and it's possible for a template\n    // to have comments along side the root element which makes it a fragment\n    let root = result;\n    let setRoot = undefined;\n    if (result.patchFlag > 0 &&\n        result.patchFlag & 2048 /* PatchFlags.DEV_ROOT_FRAGMENT */) {\n        [root, setRoot] = getChildRoot(result);\n    }\n    if (fallthroughAttrs && inheritAttrs !== false) {\n        const keys = Object.keys(fallthroughAttrs);\n        const { shapeFlag } = root;\n        if (keys.length) {\n            if (shapeFlag & (1 /* ShapeFlags.ELEMENT */ | 6 /* ShapeFlags.COMPONENT */)) {\n                if (propsOptions && keys.some(isModelListener)) {\n                    // If a v-model listener (onUpdate:xxx) has a corresponding declared\n                    // prop, it indicates this component expects to handle v-model and\n                    // it should not fallthrough.\n                    // related: #1543, #1643, #1989\n                    fallthroughAttrs = filterModelListeners(fallthroughAttrs, propsOptions);\n                }\n                root = cloneVNode(root, fallthroughAttrs);\n            }\n            else if (!accessedAttrs && root.type !== Comment) {\n                const allAttrs = Object.keys(attrs);\n                const eventAttrs = [];\n                const extraAttrs = [];\n                for (let i = 0, l = allAttrs.length; i < l; i++) {\n                    const key = allAttrs[i];\n                    if (isOn(key)) {\n                        // ignore v-model handlers when they fail to fallthrough\n                        if (!isModelListener(key)) {\n                            // remove `on`, lowercase first letter to reflect event casing\n                            // accurately\n                            eventAttrs.push(key[2].toLowerCase() + key.slice(3));\n                        }\n                    }\n                    else {\n                        extraAttrs.push(key);\n                    }\n                }\n                if (extraAttrs.length) {\n                    warn(`Extraneous non-props attributes (` +\n                        `${extraAttrs.join(', ')}) ` +\n                        `were passed to component but could not be automatically inherited ` +\n                        `because component renders fragment or text root nodes.`);\n                }\n                if (eventAttrs.length) {\n                    warn(`Extraneous non-emits event listeners (` +\n                        `${eventAttrs.join(', ')}) ` +\n                        `were passed to component but could not be automatically inherited ` +\n                        `because component renders fragment or text root nodes. ` +\n                        `If the listener is intended to be a component custom event listener only, ` +\n                        `declare it using the \"emits\" option.`);\n                }\n            }\n        }\n    }\n    // inherit directives\n    if (vnode.dirs) {\n        if (!isElementRoot(root)) {\n            warn(`Runtime directive used on component with non-element root node. ` +\n                `The directives will not function as intended.`);\n        }\n        // clone before mutating since the root may be a hoisted vnode\n        root = cloneVNode(root);\n        root.dirs = root.dirs ? root.dirs.concat(vnode.dirs) : vnode.dirs;\n    }\n    // inherit transition data\n    if (vnode.transition) {\n        if (!isElementRoot(root)) {\n            warn(`Component inside <Transition> renders non-element root node ` +\n                `that cannot be animated.`);\n        }\n        root.transition = vnode.transition;\n    }\n    if (setRoot) {\n        setRoot(root);\n    }\n    else {\n        result = root;\n    }\n    setCurrentRenderingInstance(prev);\n    return result;\n}\n/**\n * dev only\n * In dev mode, template root level comments are rendered, which turns the\n * template into a fragment root, but we need to locate the single element\n * root for attrs and scope id processing.\n */\nconst getChildRoot = (vnode) => {\n    const rawChildren = vnode.children;\n    const dynamicChildren = vnode.dynamicChildren;\n    const childRoot = filterSingleRoot(rawChildren);\n    if (!childRoot) {\n        return [vnode, undefined];\n    }\n    const index = rawChildren.indexOf(childRoot);\n    const dynamicIndex = dynamicChildren ? dynamicChildren.indexOf(childRoot) : -1;\n    const setRoot = (updatedRoot) => {\n        rawChildren[index] = updatedRoot;\n        if (dynamicChildren) {\n            if (dynamicIndex > -1) {\n                dynamicChildren[dynamicIndex] = updatedRoot;\n            }\n            else if (updatedRoot.patchFlag > 0) {\n                vnode.dynamicChildren = [...dynamicChildren, updatedRoot];\n            }\n        }\n    };\n    return [normalizeVNode(childRoot), setRoot];\n};\nfunction filterSingleRoot(children) {\n    let singleRoot;\n    for (let i = 0; i < children.length; i++) {\n        const child = children[i];\n        if (isVNode(child)) {\n            // ignore user comment\n            if (child.type !== Comment || child.children === 'v-if') {\n                if (singleRoot) {\n                    // has more than 1 non-comment child, return now\n                    return;\n                }\n                else {\n                    singleRoot = child;\n                }\n            }\n        }\n        else {\n            return;\n        }\n    }\n    return singleRoot;\n}\nconst getFunctionalFallthrough = (attrs) => {\n    let res;\n    for (const key in attrs) {\n        if (key === 'class' || key === 'style' || isOn(key)) {\n            (res || (res = {}))[key] = attrs[key];\n        }\n    }\n    return res;\n};\nconst filterModelListeners = (attrs, props) => {\n    const res = {};\n    for (const key in attrs) {\n        if (!isModelListener(key) || !(key.slice(9) in props)) {\n            res[key] = attrs[key];\n        }\n    }\n    return res;\n};\nconst isElementRoot = (vnode) => {\n    return (vnode.shapeFlag & (6 /* ShapeFlags.COMPONENT */ | 1 /* ShapeFlags.ELEMENT */) ||\n        vnode.type === Comment // potential v-if branch switch\n    );\n};\nfunction shouldUpdateComponent(prevVNode, nextVNode, optimized) {\n    const { props: prevProps, children: prevChildren, component } = prevVNode;\n    const { props: nextProps, children: nextChildren, patchFlag } = nextVNode;\n    const emits = component.emitsOptions;\n    // Parent component's render function was hot-updated. Since this may have\n    // caused the child component's slots content to have changed, we need to\n    // force the child to update as well.\n    if ((prevChildren || nextChildren) && isHmrUpdating) {\n        return true;\n    }\n    // force child update for runtime directive or transition on component vnode.\n    if (nextVNode.dirs || nextVNode.transition) {\n        return true;\n    }\n    if (optimized && patchFlag >= 0) {\n        if (patchFlag & 1024 /* PatchFlags.DYNAMIC_SLOTS */) {\n            // slot content that references values that might have changed,\n            // e.g. in a v-for\n            return true;\n        }\n        if (patchFlag & 16 /* PatchFlags.FULL_PROPS */) {\n            if (!prevProps) {\n                return !!nextProps;\n            }\n            // presence of this flag indicates props are always non-null\n            return hasPropsChanged(prevProps, nextProps, emits);\n        }\n        else if (patchFlag & 8 /* PatchFlags.PROPS */) {\n            const dynamicProps = nextVNode.dynamicProps;\n            for (let i = 0; i < dynamicProps.length; i++) {\n                const key = dynamicProps[i];\n                if (nextProps[key] !== prevProps[key] &&\n                    !isEmitListener(emits, key)) {\n                    return true;\n                }\n            }\n        }\n    }\n    else {\n        // this path is only taken by manually written render functions\n        // so presence of any children leads to a forced update\n        if (prevChildren || nextChildren) {\n            if (!nextChildren || !nextChildren.$stable) {\n                return true;\n            }\n        }\n        if (prevProps === nextProps) {\n            return false;\n        }\n        if (!prevProps) {\n            return !!nextProps;\n        }\n        if (!nextProps) {\n            return true;\n        }\n        return hasPropsChanged(prevProps, nextProps, emits);\n    }\n    return false;\n}\nfunction hasPropsChanged(prevProps, nextProps, emitsOptions) {\n    const nextKeys = Object.keys(nextProps);\n    if (nextKeys.length !== Object.keys(prevProps).length) {\n        return true;\n    }\n    for (let i = 0; i < nextKeys.length; i++) {\n        const key = nextKeys[i];\n        if (nextProps[key] !== prevProps[key] &&\n            !isEmitListener(emitsOptions, key)) {\n            return true;\n        }\n    }\n    return false;\n}\nfunction updateHOCHostEl({ vnode, parent }, el // HostNode\n) {\n    while (parent && parent.subTree === vnode) {\n        (vnode = parent.vnode).el = el;\n        parent = parent.parent;\n    }\n}\n\nconst isSuspense = (type) => type.__isSuspense;\n// Suspense exposes a component-like API, and is treated like a component\n// in the compiler, but internally it's a special built-in type that hooks\n// directly into the renderer.\nconst SuspenseImpl = {\n    name: 'Suspense',\n    // In order to make Suspense tree-shakable, we need to avoid importing it\n    // directly in the renderer. The renderer checks for the __isSuspense flag\n    // on a vnode's type and calls the `process` method, passing in renderer\n    // internals.\n    __isSuspense: true,\n    process(n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized, \n    // platform-specific impl passed from renderer\n    rendererInternals) {\n        if (n1 == null) {\n            mountSuspense(n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized, rendererInternals);\n        }\n        else {\n            patchSuspense(n1, n2, container, anchor, parentComponent, isSVG, slotScopeIds, optimized, rendererInternals);\n        }\n    },\n    hydrate: hydrateSuspense,\n    create: createSuspenseBoundary,\n    normalize: normalizeSuspenseChildren\n};\n// Force-casted public typing for h and TSX props inference\nconst Suspense = (SuspenseImpl\n    );\nfunction triggerEvent(vnode, name) {\n    const eventListener = vnode.props && vnode.props[name];\n    if (isFunction(eventListener)) {\n        eventListener();\n    }\n}\nfunction mountSuspense(vnode, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized, rendererInternals) {\n    const { p: patch, o: { createElement } } = rendererInternals;\n    const hiddenContainer = createElement('div');\n    const suspense = (vnode.suspense = createSuspenseBoundary(vnode, parentSuspense, parentComponent, container, hiddenContainer, anchor, isSVG, slotScopeIds, optimized, rendererInternals));\n    // start mounting the content subtree in an off-dom container\n    patch(null, (suspense.pendingBranch = vnode.ssContent), hiddenContainer, null, parentComponent, suspense, isSVG, slotScopeIds);\n    // now check if we have encountered any async deps\n    if (suspense.deps > 0) {\n        // has async\n        // invoke @fallback event\n        triggerEvent(vnode, 'onPending');\n        triggerEvent(vnode, 'onFallback');\n        // mount the fallback tree\n        patch(null, vnode.ssFallback, container, anchor, parentComponent, null, // fallback tree will not have suspense context\n        isSVG, slotScopeIds);\n        setActiveBranch(suspense, vnode.ssFallback);\n    }\n    else {\n        // Suspense has no async deps. Just resolve.\n        suspense.resolve();\n    }\n}\nfunction patchSuspense(n1, n2, container, anchor, parentComponent, isSVG, slotScopeIds, optimized, { p: patch, um: unmount, o: { createElement } }) {\n    const suspense = (n2.suspense = n1.suspense);\n    suspense.vnode = n2;\n    n2.el = n1.el;\n    const newBranch = n2.ssContent;\n    const newFallback = n2.ssFallback;\n    const { activeBranch, pendingBranch, isInFallback, isHydrating } = suspense;\n    if (pendingBranch) {\n        suspense.pendingBranch = newBranch;\n        if (isSameVNodeType(newBranch, pendingBranch)) {\n            // same root type but content may have changed.\n            patch(pendingBranch, newBranch, suspense.hiddenContainer, null, parentComponent, suspense, isSVG, slotScopeIds, optimized);\n            if (suspense.deps <= 0) {\n                suspense.resolve();\n            }\n            else if (isInFallback) {\n                patch(activeBranch, newFallback, container, anchor, parentComponent, null, // fallback tree will not have suspense context\n                isSVG, slotScopeIds, optimized);\n                setActiveBranch(suspense, newFallback);\n            }\n        }\n        else {\n            // toggled before pending tree is resolved\n            suspense.pendingId++;\n            if (isHydrating) {\n                // if toggled before hydration is finished, the current DOM tree is\n                // no longer valid. set it as the active branch so it will be unmounted\n                // when resolved\n                suspense.isHydrating = false;\n                suspense.activeBranch = pendingBranch;\n            }\n            else {\n                unmount(pendingBranch, parentComponent, suspense);\n            }\n            // increment pending ID. this is used to invalidate async callbacks\n            // reset suspense state\n            suspense.deps = 0;\n            // discard effects from pending branch\n            suspense.effects.length = 0;\n            // discard previous container\n            suspense.hiddenContainer = createElement('div');\n            if (isInFallback) {\n                // already in fallback state\n                patch(null, newBranch, suspense.hiddenContainer, null, parentComponent, suspense, isSVG, slotScopeIds, optimized);\n                if (suspense.deps <= 0) {\n                    suspense.resolve();\n                }\n                else {\n                    patch(activeBranch, newFallback, container, anchor, parentComponent, null, // fallback tree will not have suspense context\n                    isSVG, slotScopeIds, optimized);\n                    setActiveBranch(suspense, newFallback);\n                }\n            }\n            else if (activeBranch && isSameVNodeType(newBranch, activeBranch)) {\n                // toggled \"back\" to current active branch\n                patch(activeBranch, newBranch, container, anchor, parentComponent, suspense, isSVG, slotScopeIds, optimized);\n                // force resolve\n                suspense.resolve(true);\n            }\n            else {\n                // switched to a 3rd branch\n                patch(null, newBranch, suspense.hiddenContainer, null, parentComponent, suspense, isSVG, slotScopeIds, optimized);\n                if (suspense.deps <= 0) {\n                    suspense.resolve();\n                }\n            }\n        }\n    }\n    else {\n        if (activeBranch && isSameVNodeType(newBranch, activeBranch)) {\n            // root did not change, just normal patch\n            patch(activeBranch, newBranch, container, anchor, parentComponent, suspense, isSVG, slotScopeIds, optimized);\n            setActiveBranch(suspense, newBranch);\n        }\n        else {\n            // root node toggled\n            // invoke @pending event\n            triggerEvent(n2, 'onPending');\n            // mount pending branch in off-dom container\n            suspense.pendingBranch = newBranch;\n            suspense.pendingId++;\n            patch(null, newBranch, suspense.hiddenContainer, null, parentComponent, suspense, isSVG, slotScopeIds, optimized);\n            if (suspense.deps <= 0) {\n                // incoming branch has no async deps, resolve now.\n                suspense.resolve();\n            }\n            else {\n                const { timeout, pendingId } = suspense;\n                if (timeout > 0) {\n                    setTimeout(() => {\n                        if (suspense.pendingId === pendingId) {\n                            suspense.fallback(newFallback);\n                        }\n                    }, timeout);\n                }\n                else if (timeout === 0) {\n                    suspense.fallback(newFallback);\n                }\n            }\n        }\n    }\n}\nlet hasWarned = false;\nfunction createSuspenseBoundary(vnode, parent, parentComponent, container, hiddenContainer, anchor, isSVG, slotScopeIds, optimized, rendererInternals, isHydrating = false) {\n    /* istanbul ignore if */\n    if (!hasWarned) {\n        hasWarned = true;\n        // @ts-ignore `console.info` cannot be null error\n        console[console.info ? 'info' : 'log'](`<Suspense> is an experimental feature and its API will likely change.`);\n    }\n    const { p: patch, m: move, um: unmount, n: next, o: { parentNode, remove } } = rendererInternals;\n    const timeout = vnode.props ? toNumber(vnode.props.timeout) : undefined;\n    {\n        assertNumber(timeout, `Suspense timeout`);\n    }\n    const suspense = {\n        vnode,\n        parent,\n        parentComponent,\n        isSVG,\n        container,\n        hiddenContainer,\n        anchor,\n        deps: 0,\n        pendingId: 0,\n        timeout: typeof timeout === 'number' ? timeout : -1,\n        activeBranch: null,\n        pendingBranch: null,\n        isInFallback: true,\n        isHydrating,\n        isUnmounted: false,\n        effects: [],\n        resolve(resume = false) {\n            {\n                if (!resume && !suspense.pendingBranch) {\n                    throw new Error(`suspense.resolve() is called without a pending branch.`);\n                }\n                if (suspense.isUnmounted) {\n                    throw new Error(`suspense.resolve() is called on an already unmounted suspense boundary.`);\n                }\n            }\n            const { vnode, activeBranch, pendingBranch, pendingId, effects, parentComponent, container } = suspense;\n            if (suspense.isHydrating) {\n                suspense.isHydrating = false;\n            }\n            else if (!resume) {\n                const delayEnter = activeBranch &&\n                    pendingBranch.transition &&\n                    pendingBranch.transition.mode === 'out-in';\n                if (delayEnter) {\n                    activeBranch.transition.afterLeave = () => {\n                        if (pendingId === suspense.pendingId) {\n                            move(pendingBranch, container, anchor, 0 /* MoveType.ENTER */);\n                        }\n                    };\n                }\n                // this is initial anchor on mount\n                let { anchor } = suspense;\n                // unmount current active tree\n                if (activeBranch) {\n                    // if the fallback tree was mounted, it may have been moved\n                    // as part of a parent suspense. get the latest anchor for insertion\n                    anchor = next(activeBranch);\n                    unmount(activeBranch, parentComponent, suspense, true);\n                }\n                if (!delayEnter) {\n                    // move content from off-dom container to actual container\n                    move(pendingBranch, container, anchor, 0 /* MoveType.ENTER */);\n                }\n            }\n            setActiveBranch(suspense, pendingBranch);\n            suspense.pendingBranch = null;\n            suspense.isInFallback = false;\n            // flush buffered effects\n            // check if there is a pending parent suspense\n            let parent = suspense.parent;\n            let hasUnresolvedAncestor = false;\n            while (parent) {\n                if (parent.pendingBranch) {\n                    // found a pending parent suspense, merge buffered post jobs\n                    // into that parent\n                    parent.effects.push(...effects);\n                    hasUnresolvedAncestor = true;\n                    break;\n                }\n                parent = parent.parent;\n            }\n            // no pending parent suspense, flush all jobs\n            if (!hasUnresolvedAncestor) {\n                queuePostFlushCb(effects);\n            }\n            suspense.effects = [];\n            // invoke @resolve event\n            triggerEvent(vnode, 'onResolve');\n        },\n        fallback(fallbackVNode) {\n            if (!suspense.pendingBranch) {\n                return;\n            }\n            const { vnode, activeBranch, parentComponent, container, isSVG } = suspense;\n            // invoke @fallback event\n            triggerEvent(vnode, 'onFallback');\n            const anchor = next(activeBranch);\n            const mountFallback = () => {\n                if (!suspense.isInFallback) {\n                    return;\n                }\n                // mount the fallback tree\n                patch(null, fallbackVNode, container, anchor, parentComponent, null, // fallback tree will not have suspense context\n                isSVG, slotScopeIds, optimized);\n                setActiveBranch(suspense, fallbackVNode);\n            };\n            const delayEnter = fallbackVNode.transition && fallbackVNode.transition.mode === 'out-in';\n            if (delayEnter) {\n                activeBranch.transition.afterLeave = mountFallback;\n            }\n            suspense.isInFallback = true;\n            // unmount current active branch\n            unmount(activeBranch, parentComponent, null, // no suspense so unmount hooks fire now\n            true // shouldRemove\n            );\n            if (!delayEnter) {\n                mountFallback();\n            }\n        },\n        move(container, anchor, type) {\n            suspense.activeBranch &&\n                move(suspense.activeBranch, container, anchor, type);\n            suspense.container = container;\n        },\n        next() {\n            return suspense.activeBranch && next(suspense.activeBranch);\n        },\n        registerDep(instance, setupRenderEffect) {\n            const isInPendingSuspense = !!suspense.pendingBranch;\n            if (isInPendingSuspense) {\n                suspense.deps++;\n            }\n            const hydratedEl = instance.vnode.el;\n            instance\n                .asyncDep.catch(err => {\n                handleError(err, instance, 0 /* ErrorCodes.SETUP_FUNCTION */);\n            })\n                .then(asyncSetupResult => {\n                // retry when the setup() promise resolves.\n                // component may have been unmounted before resolve.\n                if (instance.isUnmounted ||\n                    suspense.isUnmounted ||\n                    suspense.pendingId !== instance.suspenseId) {\n                    return;\n                }\n                // retry from this component\n                instance.asyncResolved = true;\n                const { vnode } = instance;\n                {\n                    pushWarningContext(vnode);\n                }\n                handleSetupResult(instance, asyncSetupResult, false);\n                if (hydratedEl) {\n                    // vnode may have been replaced if an update happened before the\n                    // async dep is resolved.\n                    vnode.el = hydratedEl;\n                }\n                const placeholder = !hydratedEl && instance.subTree.el;\n                setupRenderEffect(instance, vnode, \n                // component may have been moved before resolve.\n                // if this is not a hydration, instance.subTree will be the comment\n                // placeholder.\n                parentNode(hydratedEl || instance.subTree.el), \n                // anchor will not be used if this is hydration, so only need to\n                // consider the comment placeholder case.\n                hydratedEl ? null : next(instance.subTree), suspense, isSVG, optimized);\n                if (placeholder) {\n                    remove(placeholder);\n                }\n                updateHOCHostEl(instance, vnode.el);\n                {\n                    popWarningContext();\n                }\n                // only decrease deps count if suspense is not already resolved\n                if (isInPendingSuspense && --suspense.deps === 0) {\n                    suspense.resolve();\n                }\n            });\n        },\n        unmount(parentSuspense, doRemove) {\n            suspense.isUnmounted = true;\n            if (suspense.activeBranch) {\n                unmount(suspense.activeBranch, parentComponent, parentSuspense, doRemove);\n            }\n            if (suspense.pendingBranch) {\n                unmount(suspense.pendingBranch, parentComponent, parentSuspense, doRemove);\n            }\n        }\n    };\n    return suspense;\n}\nfunction hydrateSuspense(node, vnode, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized, rendererInternals, hydrateNode) {\n    /* eslint-disable no-restricted-globals */\n    const suspense = (vnode.suspense = createSuspenseBoundary(vnode, parentSuspense, parentComponent, node.parentNode, document.createElement('div'), null, isSVG, slotScopeIds, optimized, rendererInternals, true /* hydrating */));\n    // there are two possible scenarios for server-rendered suspense:\n    // - success: ssr content should be fully resolved\n    // - failure: ssr content should be the fallback branch.\n    // however, on the client we don't really know if it has failed or not\n    // attempt to hydrate the DOM assuming it has succeeded, but we still\n    // need to construct a suspense boundary first\n    const result = hydrateNode(node, (suspense.pendingBranch = vnode.ssContent), parentComponent, suspense, slotScopeIds, optimized);\n    if (suspense.deps === 0) {\n        suspense.resolve();\n    }\n    return result;\n    /* eslint-enable no-restricted-globals */\n}\nfunction normalizeSuspenseChildren(vnode) {\n    const { shapeFlag, children } = vnode;\n    const isSlotChildren = shapeFlag & 32 /* ShapeFlags.SLOTS_CHILDREN */;\n    vnode.ssContent = normalizeSuspenseSlot(isSlotChildren ? children.default : children);\n    vnode.ssFallback = isSlotChildren\n        ? normalizeSuspenseSlot(children.fallback)\n        : createVNode(Comment);\n}\nfunction normalizeSuspenseSlot(s) {\n    let block;\n    if (isFunction(s)) {\n        const trackBlock = isBlockTreeEnabled && s._c;\n        if (trackBlock) {\n            // disableTracking: false\n            // allow block tracking for compiled slots\n            // (see ./componentRenderContext.ts)\n            s._d = false;\n            openBlock();\n        }\n        s = s();\n        if (trackBlock) {\n            s._d = true;\n            block = currentBlock;\n            closeBlock();\n        }\n    }\n    if (isArray(s)) {\n        const singleChild = filterSingleRoot(s);\n        if (!singleChild) {\n            warn(`<Suspense> slots expect a single root node.`);\n        }\n        s = singleChild;\n    }\n    s = normalizeVNode(s);\n    if (block && !s.dynamicChildren) {\n        s.dynamicChildren = block.filter(c => c !== s);\n    }\n    return s;\n}\nfunction queueEffectWithSuspense(fn, suspense) {\n    if (suspense && suspense.pendingBranch) {\n        if (isArray(fn)) {\n            suspense.effects.push(...fn);\n        }\n        else {\n            suspense.effects.push(fn);\n        }\n    }\n    else {\n        queuePostFlushCb(fn);\n    }\n}\nfunction setActiveBranch(suspense, branch) {\n    suspense.activeBranch = branch;\n    const { vnode, parentComponent } = suspense;\n    const el = (vnode.el = branch.el);\n    // in case suspense is the root node of a component,\n    // recursively update the HOC el\n    if (parentComponent && parentComponent.subTree === vnode) {\n        parentComponent.vnode.el = el;\n        updateHOCHostEl(parentComponent, el);\n    }\n}\n\nfunction provide(key, value) {\n    if (!currentInstance) {\n        {\n            warn(`provide() can only be used inside setup().`);\n        }\n    }\n    else {\n        let provides = currentInstance.provides;\n        // by default an instance inherits its parent's provides object\n        // but when it needs to provide values of its own, it creates its\n        // own provides object using parent provides object as prototype.\n        // this way in `inject` we can simply look up injections from direct\n        // parent and let the prototype chain do the work.\n        const parentProvides = currentInstance.parent && currentInstance.parent.provides;\n        if (parentProvides === provides) {\n            provides = currentInstance.provides = Object.create(parentProvides);\n        }\n        // TS doesn't allow symbol as index type\n        provides[key] = value;\n    }\n}\nfunction inject(key, defaultValue, treatDefaultAsFactory = false) {\n    // fallback to `currentRenderingInstance` so that this can be called in\n    // a functional component\n    const instance = currentInstance || currentRenderingInstance;\n    if (instance) {\n        // #2400\n        // to support `app.use` plugins,\n        // fallback to appContext's `provides` if the instance is at root\n        const provides = instance.parent == null\n            ? instance.vnode.appContext && instance.vnode.appContext.provides\n            : instance.parent.provides;\n        if (provides && key in provides) {\n            // TS doesn't allow symbol as index type\n            return provides[key];\n        }\n        else if (arguments.length > 1) {\n            return treatDefaultAsFactory && isFunction(defaultValue)\n                ? defaultValue.call(instance.proxy)\n                : defaultValue;\n        }\n        else {\n            warn(`injection \"${String(key)}\" not found.`);\n        }\n    }\n    else {\n        warn(`inject() can only be used inside setup() or functional components.`);\n    }\n}\n\n// Simple effect.\nfunction watchEffect(effect, options) {\n    return doWatch(effect, null, options);\n}\nfunction watchPostEffect(effect, options) {\n    return doWatch(effect, null, Object.assign(Object.assign({}, options), { flush: 'post' }) );\n}\nfunction watchSyncEffect(effect, options) {\n    return doWatch(effect, null, Object.assign(Object.assign({}, options), { flush: 'sync' }) );\n}\n// initial value for watchers to trigger on undefined initial values\nconst INITIAL_WATCHER_VALUE = {};\n// implementation\nfunction watch(source, cb, options) {\n    if (!isFunction(cb)) {\n        warn(`\\`watch(fn, options?)\\` signature has been moved to a separate API. ` +\n            `Use \\`watchEffect(fn, options?)\\` instead. \\`watch\\` now only ` +\n            `supports \\`watch(source, cb, options?) signature.`);\n    }\n    return doWatch(source, cb, options);\n}\nfunction doWatch(source, cb, { immediate, deep, flush, onTrack, onTrigger } = EMPTY_OBJ) {\n    if (!cb) {\n        if (immediate !== undefined) {\n            warn(`watch() \"immediate\" option is only respected when using the ` +\n                `watch(source, callback, options?) signature.`);\n        }\n        if (deep !== undefined) {\n            warn(`watch() \"deep\" option is only respected when using the ` +\n                `watch(source, callback, options?) signature.`);\n        }\n    }\n    const warnInvalidSource = (s) => {\n        warn(`Invalid watch source: `, s, `A watch source can only be a getter/effect function, a ref, ` +\n            `a reactive object, or an array of these types.`);\n    };\n    const instance = getCurrentScope() === (currentInstance === null || currentInstance === void 0 ? void 0 : currentInstance.scope) ? currentInstance : null;\n    // const instance = currentInstance\n    let getter;\n    let forceTrigger = false;\n    let isMultiSource = false;\n    if (isRef(source)) {\n        getter = () => source.value;\n        forceTrigger = isShallow(source);\n    }\n    else if (isReactive(source)) {\n        getter = () => source;\n        deep = true;\n    }\n    else if (isArray(source)) {\n        isMultiSource = true;\n        forceTrigger = source.some(s => isReactive(s) || isShallow(s));\n        getter = () => source.map(s => {\n            if (isRef(s)) {\n                return s.value;\n            }\n            else if (isReactive(s)) {\n                return traverse(s);\n            }\n            else if (isFunction(s)) {\n                return callWithErrorHandling(s, instance, 2 /* ErrorCodes.WATCH_GETTER */);\n            }\n            else {\n                warnInvalidSource(s);\n            }\n        });\n    }\n    else if (isFunction(source)) {\n        if (cb) {\n            // getter with cb\n            getter = () => callWithErrorHandling(source, instance, 2 /* ErrorCodes.WATCH_GETTER */);\n        }\n        else {\n            // no cb -> simple effect\n            getter = () => {\n                if (instance && instance.isUnmounted) {\n                    return;\n                }\n                if (cleanup) {\n                    cleanup();\n                }\n                return callWithAsyncErrorHandling(source, instance, 3 /* ErrorCodes.WATCH_CALLBACK */, [onCleanup]);\n            };\n        }\n    }\n    else {\n        getter = NOOP;\n        warnInvalidSource(source);\n    }\n    if (cb && deep) {\n        const baseGetter = getter;\n        getter = () => traverse(baseGetter());\n    }\n    let cleanup;\n    let onCleanup = (fn) => {\n        cleanup = effect.onStop = () => {\n            callWithErrorHandling(fn, instance, 4 /* ErrorCodes.WATCH_CLEANUP */);\n        };\n    };\n    let oldValue = isMultiSource\n        ? new Array(source.length).fill(INITIAL_WATCHER_VALUE)\n        : INITIAL_WATCHER_VALUE;\n    const job = () => {\n        if (!effect.active) {\n            return;\n        }\n        if (cb) {\n            // watch(source, cb)\n            const newValue = effect.run();\n            if (deep ||\n                forceTrigger ||\n                (isMultiSource\n                    ? newValue.some((v, i) => hasChanged(v, oldValue[i]))\n                    : hasChanged(newValue, oldValue)) ||\n                (false  )) {\n                // cleanup before running cb again\n                if (cleanup) {\n                    cleanup();\n                }\n                callWithAsyncErrorHandling(cb, instance, 3 /* ErrorCodes.WATCH_CALLBACK */, [\n                    newValue,\n                    // pass undefined as the old value when it's changed for the first time\n                    oldValue === INITIAL_WATCHER_VALUE\n                        ? undefined\n                        : isMultiSource && oldValue[0] === INITIAL_WATCHER_VALUE\n                            ? []\n                            : oldValue,\n                    onCleanup\n                ]);\n                oldValue = newValue;\n            }\n        }\n        else {\n            // watchEffect\n            effect.run();\n        }\n    };\n    // important: mark the job as a watcher callback so that scheduler knows\n    // it is allowed to self-trigger (#1727)\n    job.allowRecurse = !!cb;\n    let scheduler;\n    if (flush === 'sync') {\n        scheduler = job; // the scheduler function gets called directly\n    }\n    else if (flush === 'post') {\n        scheduler = () => queuePostRenderEffect(job, instance && instance.suspense);\n    }\n    else {\n        // default: 'pre'\n        job.pre = true;\n        if (instance)\n            job.id = instance.uid;\n        scheduler = () => queueJob(job);\n    }\n    const effect = new ReactiveEffect(getter, scheduler);\n    {\n        effect.onTrack = onTrack;\n        effect.onTrigger = onTrigger;\n    }\n    // initial run\n    if (cb) {\n        if (immediate) {\n            job();\n        }\n        else {\n            oldValue = effect.run();\n        }\n    }\n    else if (flush === 'post') {\n        queuePostRenderEffect(effect.run.bind(effect), instance && instance.suspense);\n    }\n    else {\n        effect.run();\n    }\n    const unwatch = () => {\n        effect.stop();\n        if (instance && instance.scope) {\n            remove(instance.scope.effects, effect);\n        }\n    };\n    return unwatch;\n}\n// this.$watch\nfunction instanceWatch(source, value, options) {\n    const publicThis = this.proxy;\n    const getter = isString(source)\n        ? source.includes('.')\n            ? createPathGetter(publicThis, source)\n            : () => publicThis[source]\n        : source.bind(publicThis, publicThis);\n    let cb;\n    if (isFunction(value)) {\n        cb = value;\n    }\n    else {\n        cb = value.handler;\n        options = value;\n    }\n    const cur = currentInstance;\n    setCurrentInstance(this);\n    const res = doWatch(getter, cb.bind(publicThis), options);\n    if (cur) {\n        setCurrentInstance(cur);\n    }\n    else {\n        unsetCurrentInstance();\n    }\n    return res;\n}\nfunction createPathGetter(ctx, path) {\n    const segments = path.split('.');\n    return () => {\n        let cur = ctx;\n        for (let i = 0; i < segments.length && cur; i++) {\n            cur = cur[segments[i]];\n        }\n        return cur;\n    };\n}\nfunction traverse(value, seen) {\n    if (!isObject(value) || value[\"__v_skip\" /* ReactiveFlags.SKIP */]) {\n        return value;\n    }\n    seen = seen || new Set();\n    if (seen.has(value)) {\n        return value;\n    }\n    seen.add(value);\n    if (isRef(value)) {\n        traverse(value.value, seen);\n    }\n    else if (isArray(value)) {\n        for (let i = 0; i < value.length; i++) {\n            traverse(value[i], seen);\n        }\n    }\n    else if (isSet(value) || isMap(value)) {\n        value.forEach((v) => {\n            traverse(v, seen);\n        });\n    }\n    else if (isPlainObject(value)) {\n        for (const key in value) {\n            traverse(value[key], seen);\n        }\n    }\n    return value;\n}\n\nfunction useTransitionState() {\n    const state = {\n        isMounted: false,\n        isLeaving: false,\n        isUnmounting: false,\n        leavingVNodes: new Map()\n    };\n    onMounted(() => {\n        state.isMounted = true;\n    });\n    onBeforeUnmount(() => {\n        state.isUnmounting = true;\n    });\n    return state;\n}\nconst TransitionHookValidator = [Function, Array];\nconst BaseTransitionImpl = {\n    name: `BaseTransition`,\n    props: {\n        mode: String,\n        appear: Boolean,\n        persisted: Boolean,\n        // enter\n        onBeforeEnter: TransitionHookValidator,\n        onEnter: TransitionHookValidator,\n        onAfterEnter: TransitionHookValidator,\n        onEnterCancelled: TransitionHookValidator,\n        // leave\n        onBeforeLeave: TransitionHookValidator,\n        onLeave: TransitionHookValidator,\n        onAfterLeave: TransitionHookValidator,\n        onLeaveCancelled: TransitionHookValidator,\n        // appear\n        onBeforeAppear: TransitionHookValidator,\n        onAppear: TransitionHookValidator,\n        onAfterAppear: TransitionHookValidator,\n        onAppearCancelled: TransitionHookValidator\n    },\n    setup(props, { slots }) {\n        const instance = getCurrentInstance();\n        const state = useTransitionState();\n        let prevTransitionKey;\n        return () => {\n            const children = slots.default && getTransitionRawChildren(slots.default(), true);\n            if (!children || !children.length) {\n                return;\n            }\n            let child = children[0];\n            if (children.length > 1) {\n                let hasFound = false;\n                // locate first non-comment child\n                for (const c of children) {\n                    if (c.type !== Comment) {\n                        if (hasFound) {\n                            // warn more than one non-comment child\n                            warn('<transition> can only be used on a single element or component. ' +\n                                'Use <transition-group> for lists.');\n                            break;\n                        }\n                        child = c;\n                        hasFound = true;\n                    }\n                }\n            }\n            // there's no need to track reactivity for these props so use the raw\n            // props for a bit better perf\n            const rawProps = toRaw(props);\n            const { mode } = rawProps;\n            // check mode\n            if (mode &&\n                mode !== 'in-out' &&\n                mode !== 'out-in' &&\n                mode !== 'default') {\n                warn(`invalid <transition> mode: ${mode}`);\n            }\n            if (state.isLeaving) {\n                return emptyPlaceholder(child);\n            }\n            // in the case of <transition><keep-alive/></transition>, we need to\n            // compare the type of the kept-alive children.\n            const innerChild = getKeepAliveChild(child);\n            if (!innerChild) {\n                return emptyPlaceholder(child);\n            }\n            const enterHooks = resolveTransitionHooks(innerChild, rawProps, state, instance);\n            setTransitionHooks(innerChild, enterHooks);\n            const oldChild = instance.subTree;\n            const oldInnerChild = oldChild && getKeepAliveChild(oldChild);\n            let transitionKeyChanged = false;\n            const { getTransitionKey } = innerChild.type;\n            if (getTransitionKey) {\n                const key = getTransitionKey();\n                if (prevTransitionKey === undefined) {\n                    prevTransitionKey = key;\n                }\n                else if (key !== prevTransitionKey) {\n                    prevTransitionKey = key;\n                    transitionKeyChanged = true;\n                }\n            }\n            // handle mode\n            if (oldInnerChild &&\n                oldInnerChild.type !== Comment &&\n                (!isSameVNodeType(innerChild, oldInnerChild) || transitionKeyChanged)) {\n                const leavingHooks = resolveTransitionHooks(oldInnerChild, rawProps, state, instance);\n                // update old tree's hooks in case of dynamic transition\n                setTransitionHooks(oldInnerChild, leavingHooks);\n                // switching between different views\n                if (mode === 'out-in') {\n                    state.isLeaving = true;\n                    // return placeholder node and queue update when leave finishes\n                    leavingHooks.afterLeave = () => {\n                        state.isLeaving = false;\n                        // #6835\n                        // it also needs to be updated when active is undefined\n                        if (instance.update.active !== false) {\n                            instance.update();\n                        }\n                    };\n                    return emptyPlaceholder(child);\n                }\n                else if (mode === 'in-out' && innerChild.type !== Comment) {\n                    leavingHooks.delayLeave = (el, earlyRemove, delayedLeave) => {\n                        const leavingVNodesCache = getLeavingNodesForType(state, oldInnerChild);\n                        leavingVNodesCache[String(oldInnerChild.key)] = oldInnerChild;\n                        // early removal callback\n                        el._leaveCb = () => {\n                            earlyRemove();\n                            el._leaveCb = undefined;\n                            delete enterHooks.delayedLeave;\n                        };\n                        enterHooks.delayedLeave = delayedLeave;\n                    };\n                }\n            }\n            return child;\n        };\n    }\n};\n// export the public type for h/tsx inference\n// also to avoid inline import() in generated d.ts files\nconst BaseTransition = BaseTransitionImpl;\nfunction getLeavingNodesForType(state, vnode) {\n    const { leavingVNodes } = state;\n    let leavingVNodesCache = leavingVNodes.get(vnode.type);\n    if (!leavingVNodesCache) {\n        leavingVNodesCache = Object.create(null);\n        leavingVNodes.set(vnode.type, leavingVNodesCache);\n    }\n    return leavingVNodesCache;\n}\n// The transition hooks are attached to the vnode as vnode.transition\n// and will be called at appropriate timing in the renderer.\nfunction resolveTransitionHooks(vnode, props, state, instance) {\n    const { appear, mode, persisted = false, onBeforeEnter, onEnter, onAfterEnter, onEnterCancelled, onBeforeLeave, onLeave, onAfterLeave, onLeaveCancelled, onBeforeAppear, onAppear, onAfterAppear, onAppearCancelled } = props;\n    const key = String(vnode.key);\n    const leavingVNodesCache = getLeavingNodesForType(state, vnode);\n    const callHook = (hook, args) => {\n        hook &&\n            callWithAsyncErrorHandling(hook, instance, 9 /* ErrorCodes.TRANSITION_HOOK */, args);\n    };\n    const callAsyncHook = (hook, args) => {\n        const done = args[1];\n        callHook(hook, args);\n        if (isArray(hook)) {\n            if (hook.every(hook => hook.length <= 1))\n                done();\n        }\n        else if (hook.length <= 1) {\n            done();\n        }\n    };\n    const hooks = {\n        mode,\n        persisted,\n        beforeEnter(el) {\n            let hook = onBeforeEnter;\n            if (!state.isMounted) {\n                if (appear) {\n                    hook = onBeforeAppear || onBeforeEnter;\n                }\n                else {\n                    return;\n                }\n            }\n            // for same element (v-show)\n            if (el._leaveCb) {\n                el._leaveCb(true /* cancelled */);\n            }\n            // for toggled element with same key (v-if)\n            const leavingVNode = leavingVNodesCache[key];\n            if (leavingVNode &&\n                isSameVNodeType(vnode, leavingVNode) &&\n                leavingVNode.el._leaveCb) {\n                // force early removal (not cancelled)\n                leavingVNode.el._leaveCb();\n            }\n            callHook(hook, [el]);\n        },\n        enter(el) {\n            let hook = onEnter;\n            let afterHook = onAfterEnter;\n            let cancelHook = onEnterCancelled;\n            if (!state.isMounted) {\n                if (appear) {\n                    hook = onAppear || onEnter;\n                    afterHook = onAfterAppear || onAfterEnter;\n                    cancelHook = onAppearCancelled || onEnterCancelled;\n                }\n                else {\n                    return;\n                }\n            }\n            let called = false;\n            const done = (el._enterCb = (cancelled) => {\n                if (called)\n                    return;\n                called = true;\n                if (cancelled) {\n                    callHook(cancelHook, [el]);\n                }\n                else {\n                    callHook(afterHook, [el]);\n                }\n                if (hooks.delayedLeave) {\n                    hooks.delayedLeave();\n                }\n                el._enterCb = undefined;\n            });\n            if (hook) {\n                callAsyncHook(hook, [el, done]);\n            }\n            else {\n                done();\n            }\n        },\n        leave(el, remove) {\n            const key = String(vnode.key);\n            if (el._enterCb) {\n                el._enterCb(true /* cancelled */);\n            }\n            if (state.isUnmounting) {\n                return remove();\n            }\n            callHook(onBeforeLeave, [el]);\n            let called = false;\n            const done = (el._leaveCb = (cancelled) => {\n                if (called)\n                    return;\n                called = true;\n                remove();\n                if (cancelled) {\n                    callHook(onLeaveCancelled, [el]);\n                }\n                else {\n                    callHook(onAfterLeave, [el]);\n                }\n                el._leaveCb = undefined;\n                if (leavingVNodesCache[key] === vnode) {\n                    delete leavingVNodesCache[key];\n                }\n            });\n            leavingVNodesCache[key] = vnode;\n            if (onLeave) {\n                callAsyncHook(onLeave, [el, done]);\n            }\n            else {\n                done();\n            }\n        },\n        clone(vnode) {\n            return resolveTransitionHooks(vnode, props, state, instance);\n        }\n    };\n    return hooks;\n}\n// the placeholder really only handles one special case: KeepAlive\n// in the case of a KeepAlive in a leave phase we need to return a KeepAlive\n// placeholder with empty content to avoid the KeepAlive instance from being\n// unmounted.\nfunction emptyPlaceholder(vnode) {\n    if (isKeepAlive(vnode)) {\n        vnode = cloneVNode(vnode);\n        vnode.children = null;\n        return vnode;\n    }\n}\nfunction getKeepAliveChild(vnode) {\n    return isKeepAlive(vnode)\n        ? vnode.children\n            ? vnode.children[0]\n            : undefined\n        : vnode;\n}\nfunction setTransitionHooks(vnode, hooks) {\n    if (vnode.shapeFlag & 6 /* ShapeFlags.COMPONENT */ && vnode.component) {\n        setTransitionHooks(vnode.component.subTree, hooks);\n    }\n    else if (vnode.shapeFlag & 128 /* ShapeFlags.SUSPENSE */) {\n        vnode.ssContent.transition = hooks.clone(vnode.ssContent);\n        vnode.ssFallback.transition = hooks.clone(vnode.ssFallback);\n    }\n    else {\n        vnode.transition = hooks;\n    }\n}\nfunction getTransitionRawChildren(children, keepComment = false, parentKey) {\n    let ret = [];\n    let keyedFragmentCount = 0;\n    for (let i = 0; i < children.length; i++) {\n        let child = children[i];\n        // #5360 inherit parent key in case of <template v-for>\n        const key = parentKey == null\n            ? child.key\n            : String(parentKey) + String(child.key != null ? child.key : i);\n        // handle fragment children case, e.g. v-for\n        if (child.type === Fragment) {\n            if (child.patchFlag & 128 /* PatchFlags.KEYED_FRAGMENT */)\n                keyedFragmentCount++;\n            ret = ret.concat(getTransitionRawChildren(child.children, keepComment, key));\n        }\n        // comment placeholders should be skipped, e.g. v-if\n        else if (keepComment || child.type !== Comment) {\n            ret.push(key != null ? cloneVNode(child, { key }) : child);\n        }\n    }\n    // #1126 if a transition children list contains multiple sub fragments, these\n    // fragments will be merged into a flat children array. Since each v-for\n    // fragment may contain different static bindings inside, we need to de-op\n    // these children to force full diffs to ensure correct behavior.\n    if (keyedFragmentCount > 1) {\n        for (let i = 0; i < ret.length; i++) {\n            ret[i].patchFlag = -2 /* PatchFlags.BAIL */;\n        }\n    }\n    return ret;\n}\n\n// implementation, close to no-op\nfunction defineComponent(options) {\n    return isFunction(options) ? { setup: options, name: options.name } : options;\n}\n\nconst isAsyncWrapper = (i) => !!i.type.__asyncLoader;\nfunction defineAsyncComponent(source) {\n    if (isFunction(source)) {\n        source = { loader: source };\n    }\n    const { loader, loadingComponent, errorComponent, delay = 200, timeout, // undefined = never times out\n    suspensible = true, onError: userOnError } = source;\n    let pendingRequest = null;\n    let resolvedComp;\n    let retries = 0;\n    const retry = () => {\n        retries++;\n        pendingRequest = null;\n        return load();\n    };\n    const load = () => {\n        let thisRequest;\n        return (pendingRequest ||\n            (thisRequest = pendingRequest =\n                loader()\n                    .catch(err => {\n                    err = err instanceof Error ? err : new Error(String(err));\n                    if (userOnError) {\n                        return new Promise((resolve, reject) => {\n                            const userRetry = () => resolve(retry());\n                            const userFail = () => reject(err);\n                            userOnError(err, userRetry, userFail, retries + 1);\n                        });\n                    }\n                    else {\n                        throw err;\n                    }\n                })\n                    .then((comp) => {\n                    if (thisRequest !== pendingRequest && pendingRequest) {\n                        return pendingRequest;\n                    }\n                    if (!comp) {\n                        warn(`Async component loader resolved to undefined. ` +\n                            `If you are using retry(), make sure to return its return value.`);\n                    }\n                    // interop module default\n                    if (comp &&\n                        (comp.__esModule || comp[Symbol.toStringTag] === 'Module')) {\n                        comp = comp.default;\n                    }\n                    if (comp && !isObject(comp) && !isFunction(comp)) {\n                        throw new Error(`Invalid async component load result: ${comp}`);\n                    }\n                    resolvedComp = comp;\n                    return comp;\n                })));\n    };\n    return defineComponent({\n        name: 'AsyncComponentWrapper',\n        __asyncLoader: load,\n        get __asyncResolved() {\n            return resolvedComp;\n        },\n        setup() {\n            const instance = currentInstance;\n            // already resolved\n            if (resolvedComp) {\n                return () => createInnerComp(resolvedComp, instance);\n            }\n            const onError = (err) => {\n                pendingRequest = null;\n                handleError(err, instance, 13 /* ErrorCodes.ASYNC_COMPONENT_LOADER */, !errorComponent /* do not throw in dev if user provided error component */);\n            };\n            // suspense-controlled or SSR.\n            if ((suspensible && instance.suspense) ||\n                (false )) {\n                return load()\n                    .then(comp => {\n                    return () => createInnerComp(comp, instance);\n                })\n                    .catch(err => {\n                    onError(err);\n                    return () => errorComponent\n                        ? createVNode(errorComponent, {\n                            error: err\n                        })\n                        : null;\n                });\n            }\n            const loaded = ref(false);\n            const error = ref();\n            const delayed = ref(!!delay);\n            if (delay) {\n                setTimeout(() => {\n                    delayed.value = false;\n                }, delay);\n            }\n            if (timeout != null) {\n                setTimeout(() => {\n                    if (!loaded.value && !error.value) {\n                        const err = new Error(`Async component timed out after ${timeout}ms.`);\n                        onError(err);\n                        error.value = err;\n                    }\n                }, timeout);\n            }\n            load()\n                .then(() => {\n                loaded.value = true;\n                if (instance.parent && isKeepAlive(instance.parent.vnode)) {\n                    // parent is keep-alive, force update so the loaded component's\n                    // name is taken into account\n                    queueJob(instance.parent.update);\n                }\n            })\n                .catch(err => {\n                onError(err);\n                error.value = err;\n            });\n            return () => {\n                if (loaded.value && resolvedComp) {\n                    return createInnerComp(resolvedComp, instance);\n                }\n                else if (error.value && errorComponent) {\n                    return createVNode(errorComponent, {\n                        error: error.value\n                    });\n                }\n                else if (loadingComponent && !delayed.value) {\n                    return createVNode(loadingComponent);\n                }\n            };\n        }\n    });\n}\nfunction createInnerComp(comp, parent) {\n    const { ref, props, children, ce } = parent.vnode;\n    const vnode = createVNode(comp, props, children);\n    // ensure inner component inherits the async wrapper's ref owner\n    vnode.ref = ref;\n    // pass the custom element callback on to the inner comp\n    // and remove it from the async wrapper\n    vnode.ce = ce;\n    delete parent.vnode.ce;\n    return vnode;\n}\n\nconst isKeepAlive = (vnode) => vnode.type.__isKeepAlive;\nconst KeepAliveImpl = {\n    name: `KeepAlive`,\n    // Marker for special handling inside the renderer. We are not using a ===\n    // check directly on KeepAlive in the renderer, because importing it directly\n    // would prevent it from being tree-shaken.\n    __isKeepAlive: true,\n    props: {\n        include: [String, RegExp, Array],\n        exclude: [String, RegExp, Array],\n        max: [String, Number]\n    },\n    setup(props, { slots }) {\n        const instance = getCurrentInstance();\n        // KeepAlive communicates with the instantiated renderer via the\n        // ctx where the renderer passes in its internals,\n        // and the KeepAlive instance exposes activate/deactivate implementations.\n        // The whole point of this is to avoid importing KeepAlive directly in the\n        // renderer to facilitate tree-shaking.\n        const sharedContext = instance.ctx;\n        const cache = new Map();\n        const keys = new Set();\n        let current = null;\n        {\n            instance.__v_cache = cache;\n        }\n        const parentSuspense = instance.suspense;\n        const { renderer: { p: patch, m: move, um: _unmount, o: { createElement } } } = sharedContext;\n        const storageContainer = createElement('div');\n        sharedContext.activate = (vnode, container, anchor, isSVG, optimized) => {\n            const instance = vnode.component;\n            move(vnode, container, anchor, 0 /* MoveType.ENTER */, parentSuspense);\n            // in case props have changed\n            patch(instance.vnode, vnode, container, anchor, instance, parentSuspense, isSVG, vnode.slotScopeIds, optimized);\n            queuePostRenderEffect(() => {\n                instance.isDeactivated = false;\n                if (instance.a) {\n                    invokeArrayFns(instance.a);\n                }\n                const vnodeHook = vnode.props && vnode.props.onVnodeMounted;\n                if (vnodeHook) {\n                    invokeVNodeHook(vnodeHook, instance.parent, vnode);\n                }\n            }, parentSuspense);\n            {\n                // Update components tree\n                devtoolsComponentAdded(instance);\n            }\n        };\n        sharedContext.deactivate = (vnode) => {\n            const instance = vnode.component;\n            move(vnode, storageContainer, null, 1 /* MoveType.LEAVE */, parentSuspense);\n            queuePostRenderEffect(() => {\n                if (instance.da) {\n                    invokeArrayFns(instance.da);\n                }\n                const vnodeHook = vnode.props && vnode.props.onVnodeUnmounted;\n                if (vnodeHook) {\n                    invokeVNodeHook(vnodeHook, instance.parent, vnode);\n                }\n                instance.isDeactivated = true;\n            }, parentSuspense);\n            {\n                // Update components tree\n                devtoolsComponentAdded(instance);\n            }\n        };\n        function unmount(vnode) {\n            // reset the shapeFlag so it can be properly unmounted\n            resetShapeFlag(vnode);\n            _unmount(vnode, instance, parentSuspense, true);\n        }\n        function pruneCache(filter) {\n            cache.forEach((vnode, key) => {\n                const name = getComponentName(vnode.type);\n                if (name && (!filter || !filter(name))) {\n                    pruneCacheEntry(key);\n                }\n            });\n        }\n        function pruneCacheEntry(key) {\n            const cached = cache.get(key);\n            if (!current || !isSameVNodeType(cached, current)) {\n                unmount(cached);\n            }\n            else if (current) {\n                // current active instance should no longer be kept-alive.\n                // we can't unmount it now but it might be later, so reset its flag now.\n                resetShapeFlag(current);\n            }\n            cache.delete(key);\n            keys.delete(key);\n        }\n        // prune cache on include/exclude prop change\n        watch(() => [props.include, props.exclude], ([include, exclude]) => {\n            include && pruneCache(name => matches(include, name));\n            exclude && pruneCache(name => !matches(exclude, name));\n        }, \n        // prune post-render after `current` has been updated\n        { flush: 'post', deep: true });\n        // cache sub tree after render\n        let pendingCacheKey = null;\n        const cacheSubtree = () => {\n            // fix #1621, the pendingCacheKey could be 0\n            if (pendingCacheKey != null) {\n                cache.set(pendingCacheKey, getInnerChild(instance.subTree));\n            }\n        };\n        onMounted(cacheSubtree);\n        onUpdated(cacheSubtree);\n        onBeforeUnmount(() => {\n            cache.forEach(cached => {\n                const { subTree, suspense } = instance;\n                const vnode = getInnerChild(subTree);\n                if (cached.type === vnode.type && cached.key === vnode.key) {\n                    // current instance will be unmounted as part of keep-alive's unmount\n                    resetShapeFlag(vnode);\n                    // but invoke its deactivated hook here\n                    const da = vnode.component.da;\n                    da && queuePostRenderEffect(da, suspense);\n                    return;\n                }\n                unmount(cached);\n            });\n        });\n        return () => {\n            pendingCacheKey = null;\n            if (!slots.default) {\n                return null;\n            }\n            const children = slots.default();\n            const rawVNode = children[0];\n            if (children.length > 1) {\n                {\n                    warn(`KeepAlive should contain exactly one component child.`);\n                }\n                current = null;\n                return children;\n            }\n            else if (!isVNode(rawVNode) ||\n                (!(rawVNode.shapeFlag & 4 /* ShapeFlags.STATEFUL_COMPONENT */) &&\n                    !(rawVNode.shapeFlag & 128 /* ShapeFlags.SUSPENSE */))) {\n                current = null;\n                return rawVNode;\n            }\n            let vnode = getInnerChild(rawVNode);\n            const comp = vnode.type;\n            // for async components, name check should be based in its loaded\n            // inner component if available\n            const name = getComponentName(isAsyncWrapper(vnode)\n                ? vnode.type.__asyncResolved || {}\n                : comp);\n            const { include, exclude, max } = props;\n            if ((include && (!name || !matches(include, name))) ||\n                (exclude && name && matches(exclude, name))) {\n                current = vnode;\n                return rawVNode;\n            }\n            const key = vnode.key == null ? comp : vnode.key;\n            const cachedVNode = cache.get(key);\n            // clone vnode if it's reused because we are going to mutate it\n            if (vnode.el) {\n                vnode = cloneVNode(vnode);\n                if (rawVNode.shapeFlag & 128 /* ShapeFlags.SUSPENSE */) {\n                    rawVNode.ssContent = vnode;\n                }\n            }\n            // #1513 it's possible for the returned vnode to be cloned due to attr\n            // fallthrough or scopeId, so the vnode here may not be the final vnode\n            // that is mounted. Instead of caching it directly, we store the pending\n            // key and cache `instance.subTree` (the normalized vnode) in\n            // beforeMount/beforeUpdate hooks.\n            pendingCacheKey = key;\n            if (cachedVNode) {\n                // copy over mounted state\n                vnode.el = cachedVNode.el;\n                vnode.component = cachedVNode.component;\n                if (vnode.transition) {\n                    // recursively update transition hooks on subTree\n                    setTransitionHooks(vnode, vnode.transition);\n                }\n                // avoid vnode being mounted as fresh\n                vnode.shapeFlag |= 512 /* ShapeFlags.COMPONENT_KEPT_ALIVE */;\n                // make this key the freshest\n                keys.delete(key);\n                keys.add(key);\n            }\n            else {\n                keys.add(key);\n                // prune oldest entry\n                if (max && keys.size > parseInt(max, 10)) {\n                    pruneCacheEntry(keys.values().next().value);\n                }\n            }\n            // avoid vnode being unmounted\n            vnode.shapeFlag |= 256 /* ShapeFlags.COMPONENT_SHOULD_KEEP_ALIVE */;\n            current = vnode;\n            return isSuspense(rawVNode.type) ? rawVNode : vnode;\n        };\n    }\n};\n// export the public type for h/tsx inference\n// also to avoid inline import() in generated d.ts files\nconst KeepAlive = KeepAliveImpl;\nfunction matches(pattern, name) {\n    if (isArray(pattern)) {\n        return pattern.some((p) => matches(p, name));\n    }\n    else if (isString(pattern)) {\n        return pattern.split(',').includes(name);\n    }\n    else if (isRegExp(pattern)) {\n        return pattern.test(name);\n    }\n    /* istanbul ignore next */\n    return false;\n}\nfunction onActivated(hook, target) {\n    registerKeepAliveHook(hook, \"a\" /* LifecycleHooks.ACTIVATED */, target);\n}\nfunction onDeactivated(hook, target) {\n    registerKeepAliveHook(hook, \"da\" /* LifecycleHooks.DEACTIVATED */, target);\n}\nfunction registerKeepAliveHook(hook, type, target = currentInstance) {\n    // cache the deactivate branch check wrapper for injected hooks so the same\n    // hook can be properly deduped by the scheduler. \"__wdc\" stands for \"with\n    // deactivation check\".\n    const wrappedHook = hook.__wdc ||\n        (hook.__wdc = () => {\n            // only fire the hook if the target instance is NOT in a deactivated branch.\n            let current = target;\n            while (current) {\n                if (current.isDeactivated) {\n                    return;\n                }\n                current = current.parent;\n            }\n            return hook();\n        });\n    injectHook(type, wrappedHook, target);\n    // In addition to registering it on the target instance, we walk up the parent\n    // chain and register it on all ancestor instances that are keep-alive roots.\n    // This avoids the need to walk the entire component tree when invoking these\n    // hooks, and more importantly, avoids the need to track child components in\n    // arrays.\n    if (target) {\n        let current = target.parent;\n        while (current && current.parent) {\n            if (isKeepAlive(current.parent.vnode)) {\n                injectToKeepAliveRoot(wrappedHook, type, target, current);\n            }\n            current = current.parent;\n        }\n    }\n}\nfunction injectToKeepAliveRoot(hook, type, target, keepAliveRoot) {\n    // injectHook wraps the original for error handling, so make sure to remove\n    // the wrapped version.\n    const injected = injectHook(type, hook, keepAliveRoot, true /* prepend */);\n    onUnmounted(() => {\n        remove(keepAliveRoot[type], injected);\n    }, target);\n}\nfunction resetShapeFlag(vnode) {\n    // bitwise operations to remove keep alive flags\n    vnode.shapeFlag &= ~256 /* ShapeFlags.COMPONENT_SHOULD_KEEP_ALIVE */;\n    vnode.shapeFlag &= ~512 /* ShapeFlags.COMPONENT_KEPT_ALIVE */;\n}\nfunction getInnerChild(vnode) {\n    return vnode.shapeFlag & 128 /* ShapeFlags.SUSPENSE */ ? vnode.ssContent : vnode;\n}\n\nfunction injectHook(type, hook, target = currentInstance, prepend = false) {\n    if (target) {\n        const hooks = target[type] || (target[type] = []);\n        // cache the error handling wrapper for injected hooks so the same hook\n        // can be properly deduped by the scheduler. \"__weh\" stands for \"with error\n        // handling\".\n        const wrappedHook = hook.__weh ||\n            (hook.__weh = (...args) => {\n                if (target.isUnmounted) {\n                    return;\n                }\n                // disable tracking inside all lifecycle hooks\n                // since they can potentially be called inside effects.\n                pauseTracking();\n                // Set currentInstance during hook invocation.\n                // This assumes the hook does not synchronously trigger other hooks, which\n                // can only be false when the user does something really funky.\n                setCurrentInstance(target);\n                const res = callWithAsyncErrorHandling(hook, target, type, args);\n                unsetCurrentInstance();\n                resetTracking();\n                return res;\n            });\n        if (prepend) {\n            hooks.unshift(wrappedHook);\n        }\n        else {\n            hooks.push(wrappedHook);\n        }\n        return wrappedHook;\n    }\n    else {\n        const apiName = toHandlerKey(ErrorTypeStrings[type].replace(/ hook$/, ''));\n        warn(`${apiName} is called when there is no active component instance to be ` +\n            `associated with. ` +\n            `Lifecycle injection APIs can only be used during execution of setup().` +\n            (` If you are using async setup(), make sure to register lifecycle ` +\n                    `hooks before the first await statement.`\n                ));\n    }\n}\nconst createHook = (lifecycle) => (hook, target = currentInstance) => \n// post-create lifecycle registrations are noops during SSR (except for serverPrefetch)\n(!isInSSRComponentSetup || lifecycle === \"sp\" /* LifecycleHooks.SERVER_PREFETCH */) &&\n    injectHook(lifecycle, (...args) => hook(...args), target);\nconst onBeforeMount = createHook(\"bm\" /* LifecycleHooks.BEFORE_MOUNT */);\nconst onMounted = createHook(\"m\" /* LifecycleHooks.MOUNTED */);\nconst onBeforeUpdate = createHook(\"bu\" /* LifecycleHooks.BEFORE_UPDATE */);\nconst onUpdated = createHook(\"u\" /* LifecycleHooks.UPDATED */);\nconst onBeforeUnmount = createHook(\"bum\" /* LifecycleHooks.BEFORE_UNMOUNT */);\nconst onUnmounted = createHook(\"um\" /* LifecycleHooks.UNMOUNTED */);\nconst onServerPrefetch = createHook(\"sp\" /* LifecycleHooks.SERVER_PREFETCH */);\nconst onRenderTriggered = createHook(\"rtg\" /* LifecycleHooks.RENDER_TRIGGERED */);\nconst onRenderTracked = createHook(\"rtc\" /* LifecycleHooks.RENDER_TRACKED */);\nfunction onErrorCaptured(hook, target = currentInstance) {\n    injectHook(\"ec\" /* LifecycleHooks.ERROR_CAPTURED */, hook, target);\n}\n\n/**\nRuntime helper for applying directives to a vnode. Example usage:\n\nconst comp = resolveComponent('comp')\nconst foo = resolveDirective('foo')\nconst bar = resolveDirective('bar')\n\nreturn withDirectives(h(comp), [\n  [foo, this.x],\n  [bar, this.y]\n])\n*/\nfunction validateDirectiveName(name) {\n    if (isBuiltInDirective(name)) {\n        warn('Do not use built-in directive ids as custom directive id: ' + name);\n    }\n}\n/**\n * Adds directives to a VNode.\n */\nfunction withDirectives(vnode, directives) {\n    const internalInstance = currentRenderingInstance;\n    if (internalInstance === null) {\n        warn(`withDirectives can only be used inside render functions.`);\n        return vnode;\n    }\n    const instance = getExposeProxy(internalInstance) ||\n        internalInstance.proxy;\n    const bindings = vnode.dirs || (vnode.dirs = []);\n    for (let i = 0; i < directives.length; i++) {\n        let [dir, value, arg, modifiers = EMPTY_OBJ] = directives[i];\n        if (dir) {\n            if (isFunction(dir)) {\n                dir = {\n                    mounted: dir,\n                    updated: dir\n                };\n            }\n            if (dir.deep) {\n                traverse(value);\n            }\n            bindings.push({\n                dir,\n                instance,\n                value,\n                oldValue: void 0,\n                arg,\n                modifiers\n            });\n        }\n    }\n    return vnode;\n}\nfunction invokeDirectiveHook(vnode, prevVNode, instance, name) {\n    const bindings = vnode.dirs;\n    const oldBindings = prevVNode && prevVNode.dirs;\n    for (let i = 0; i < bindings.length; i++) {\n        const binding = bindings[i];\n        if (oldBindings) {\n            binding.oldValue = oldBindings[i].value;\n        }\n        let hook = binding.dir[name];\n        if (hook) {\n            // disable tracking inside all lifecycle hooks\n            // since they can potentially be called inside effects.\n            pauseTracking();\n            callWithAsyncErrorHandling(hook, instance, 8 /* ErrorCodes.DIRECTIVE_HOOK */, [\n                vnode.el,\n                binding,\n                vnode,\n                prevVNode\n            ]);\n            resetTracking();\n        }\n    }\n}\n\nconst COMPONENTS = 'components';\nconst DIRECTIVES = 'directives';\n/**\n * @private\n */\nfunction resolveComponent(name, maybeSelfReference) {\n    return resolveAsset(COMPONENTS, name, true, maybeSelfReference) || name;\n}\nconst NULL_DYNAMIC_COMPONENT = Symbol();\n/**\n * @private\n */\nfunction resolveDynamicComponent(component) {\n    if (isString(component)) {\n        return resolveAsset(COMPONENTS, component, false) || component;\n    }\n    else {\n        // invalid types will fallthrough to createVNode and raise warning\n        return (component || NULL_DYNAMIC_COMPONENT);\n    }\n}\n/**\n * @private\n */\nfunction resolveDirective(name) {\n    return resolveAsset(DIRECTIVES, name);\n}\n// implementation\nfunction resolveAsset(type, name, warnMissing = true, maybeSelfReference = false) {\n    const instance = currentRenderingInstance || currentInstance;\n    if (instance) {\n        const Component = instance.type;\n        // explicit self name has highest priority\n        if (type === COMPONENTS) {\n            const selfName = getComponentName(Component, false /* do not include inferred name to avoid breaking existing code */);\n            if (selfName &&\n                (selfName === name ||\n                    selfName === camelize(name) ||\n                    selfName === capitalize(camelize(name)))) {\n                return Component;\n            }\n        }\n        const res = \n        // local registration\n        // check instance[type] first which is resolved for options API\n        resolve(instance[type] || Component[type], name) ||\n            // global registration\n            resolve(instance.appContext[type], name);\n        if (!res && maybeSelfReference) {\n            // fallback to implicit self-reference\n            return Component;\n        }\n        if (warnMissing && !res) {\n            const extra = type === COMPONENTS\n                ? `\\nIf this is a native custom element, make sure to exclude it from ` +\n                    `component resolution via compilerOptions.isCustomElement.`\n                : ``;\n            warn(`Failed to resolve ${type.slice(0, -1)}: ${name}${extra}`);\n        }\n        return res;\n    }\n    else {\n        warn(`resolve${capitalize(type.slice(0, -1))} ` +\n            `can only be used in render() or setup().`);\n    }\n}\nfunction resolve(registry, name) {\n    return (registry &&\n        (registry[name] ||\n            registry[camelize(name)] ||\n            registry[capitalize(camelize(name))]));\n}\n\n/**\n * Actual implementation\n */\nfunction renderList(source, renderItem, cache, index) {\n    let ret;\n    const cached = (cache && cache[index]);\n    if (isArray(source) || isString(source)) {\n        ret = new Array(source.length);\n        for (let i = 0, l = source.length; i < l; i++) {\n            ret[i] = renderItem(source[i], i, undefined, cached && cached[i]);\n        }\n    }\n    else if (typeof source === 'number') {\n        if (!Number.isInteger(source)) {\n            warn(`The v-for range expect an integer value but got ${source}.`);\n        }\n        ret = new Array(source);\n        for (let i = 0; i < source; i++) {\n            ret[i] = renderItem(i + 1, i, undefined, cached && cached[i]);\n        }\n    }\n    else if (isObject(source)) {\n        if (source[Symbol.iterator]) {\n            ret = Array.from(source, (item, i) => renderItem(item, i, undefined, cached && cached[i]));\n        }\n        else {\n            const keys = Object.keys(source);\n            ret = new Array(keys.length);\n            for (let i = 0, l = keys.length; i < l; i++) {\n                const key = keys[i];\n                ret[i] = renderItem(source[key], key, i, cached && cached[i]);\n            }\n        }\n    }\n    else {\n        ret = [];\n    }\n    if (cache) {\n        cache[index] = ret;\n    }\n    return ret;\n}\n\n/**\n * Compiler runtime helper for creating dynamic slots object\n * @private\n */\nfunction createSlots(slots, dynamicSlots) {\n    for (let i = 0; i < dynamicSlots.length; i++) {\n        const slot = dynamicSlots[i];\n        // array of dynamic slot generated by <template v-for=\"...\" #[...]>\n        if (isArray(slot)) {\n            for (let j = 0; j < slot.length; j++) {\n                slots[slot[j].name] = slot[j].fn;\n            }\n        }\n        else if (slot) {\n            // conditional single slot generated by <template v-if=\"...\" #foo>\n            slots[slot.name] = slot.key\n                ? (...args) => {\n                    const res = slot.fn(...args);\n                    // attach branch key so each conditional branch is considered a\n                    // different fragment\n                    if (res)\n                        res.key = slot.key;\n                    return res;\n                }\n                : slot.fn;\n        }\n    }\n    return slots;\n}\n\n/**\n * Compiler runtime helper for rendering `<slot/>`\n * @private\n */\nfunction renderSlot(slots, name, props = {}, \n// this is not a user-facing function, so the fallback is always generated by\n// the compiler and guaranteed to be a function returning an array\nfallback, noSlotted) {\n    if (currentRenderingInstance.isCE ||\n        (currentRenderingInstance.parent &&\n            isAsyncWrapper(currentRenderingInstance.parent) &&\n            currentRenderingInstance.parent.isCE)) {\n        if (name !== 'default')\n            props.name = name;\n        return createVNode('slot', props, fallback && fallback());\n    }\n    let slot = slots[name];\n    if (slot && slot.length > 1) {\n        warn(`SSR-optimized slot function detected in a non-SSR-optimized render ` +\n            `function. You need to mark this component with $dynamic-slots in the ` +\n            `parent template.`);\n        slot = () => [];\n    }\n    // a compiled slot disables block tracking by default to avoid manual\n    // invocation interfering with template-based block tracking, but in\n    // `renderSlot` we can be sure that it's template-based so we can force\n    // enable it.\n    if (slot && slot._c) {\n        slot._d = false;\n    }\n    openBlock();\n    const validSlotContent = slot && ensureValidVNode(slot(props));\n    const rendered = createBlock(Fragment, {\n        key: props.key ||\n            // slot content array of a dynamic conditional slot may have a branch\n            // key attached in the `createSlots` helper, respect that\n            (validSlotContent && validSlotContent.key) ||\n            `_${name}`\n    }, validSlotContent || (fallback ? fallback() : []), validSlotContent && slots._ === 1 /* SlotFlags.STABLE */\n        ? 64 /* PatchFlags.STABLE_FRAGMENT */\n        : -2 /* PatchFlags.BAIL */);\n    if (!noSlotted && rendered.scopeId) {\n        rendered.slotScopeIds = [rendered.scopeId + '-s'];\n    }\n    if (slot && slot._c) {\n        slot._d = true;\n    }\n    return rendered;\n}\nfunction ensureValidVNode(vnodes) {\n    return vnodes.some(child => {\n        if (!isVNode(child))\n            return true;\n        if (child.type === Comment)\n            return false;\n        if (child.type === Fragment &&\n            !ensureValidVNode(child.children))\n            return false;\n        return true;\n    })\n        ? vnodes\n        : null;\n}\n\n/**\n * For prefixing keys in v-on=\"obj\" with \"on\"\n * @private\n */\nfunction toHandlers(obj, preserveCaseIfNecessary) {\n    const ret = {};\n    if (!isObject(obj)) {\n        warn(`v-on with no argument expects an object value.`);\n        return ret;\n    }\n    for (const key in obj) {\n        ret[preserveCaseIfNecessary && /[A-Z]/.test(key)\n            ? `on:${key}`\n            : toHandlerKey(key)] = obj[key];\n    }\n    return ret;\n}\n\n/**\n * #2437 In Vue 3, functional components do not have a public instance proxy but\n * they exist in the internal parent chain. For code that relies on traversing\n * public $parent chains, skip functional ones and go to the parent instead.\n */\nconst getPublicInstance = (i) => {\n    if (!i)\n        return null;\n    if (isStatefulComponent(i))\n        return getExposeProxy(i) || i.proxy;\n    return getPublicInstance(i.parent);\n};\nconst publicPropertiesMap = \n// Move PURE marker to new line to workaround compiler discarding it\n// due to type annotation\n/*#__PURE__*/ extend(Object.create(null), {\n    $: i => i,\n    $el: i => i.vnode.el,\n    $data: i => i.data,\n    $props: i => (shallowReadonly(i.props) ),\n    $attrs: i => (shallowReadonly(i.attrs) ),\n    $slots: i => (shallowReadonly(i.slots) ),\n    $refs: i => (shallowReadonly(i.refs) ),\n    $parent: i => getPublicInstance(i.parent),\n    $root: i => getPublicInstance(i.root),\n    $emit: i => i.emit,\n    $options: i => (resolveMergedOptions(i) ),\n    $forceUpdate: i => i.f || (i.f = () => queueJob(i.update)),\n    $nextTick: i => i.n || (i.n = nextTick.bind(i.proxy)),\n    $watch: i => (instanceWatch.bind(i) )\n});\nconst isReservedPrefix = (key) => key === '_' || key === '$';\nconst hasSetupBinding = (state, key) => state !== EMPTY_OBJ && !state.__isScriptSetup && hasOwn(state, key);\nconst PublicInstanceProxyHandlers = {\n    get({ _: instance }, key) {\n        const { ctx, setupState, data, props, accessCache, type, appContext } = instance;\n        // for internal formatters to know that this is a Vue instance\n        if (key === '__isVue') {\n            return true;\n        }\n        // data / props / ctx\n        // This getter gets called for every property access on the render context\n        // during render and is a major hotspot. The most expensive part of this\n        // is the multiple hasOwn() calls. It's much faster to do a simple property\n        // access on a plain object, so we use an accessCache object (with null\n        // prototype) to memoize what access type a key corresponds to.\n        let normalizedProps;\n        if (key[0] !== '$') {\n            const n = accessCache[key];\n            if (n !== undefined) {\n                switch (n) {\n                    case 1 /* AccessTypes.SETUP */:\n                        return setupState[key];\n                    case 2 /* AccessTypes.DATA */:\n                        return data[key];\n                    case 4 /* AccessTypes.CONTEXT */:\n                        return ctx[key];\n                    case 3 /* AccessTypes.PROPS */:\n                        return props[key];\n                    // default: just fallthrough\n                }\n            }\n            else if (hasSetupBinding(setupState, key)) {\n                accessCache[key] = 1 /* AccessTypes.SETUP */;\n                return setupState[key];\n            }\n            else if (data !== EMPTY_OBJ && hasOwn(data, key)) {\n                accessCache[key] = 2 /* AccessTypes.DATA */;\n                return data[key];\n            }\n            else if (\n            // only cache other properties when instance has declared (thus stable)\n            // props\n            (normalizedProps = instance.propsOptions[0]) &&\n                hasOwn(normalizedProps, key)) {\n                accessCache[key] = 3 /* AccessTypes.PROPS */;\n                return props[key];\n            }\n            else if (ctx !== EMPTY_OBJ && hasOwn(ctx, key)) {\n                accessCache[key] = 4 /* AccessTypes.CONTEXT */;\n                return ctx[key];\n            }\n            else if (shouldCacheAccess) {\n                accessCache[key] = 0 /* AccessTypes.OTHER */;\n            }\n        }\n        const publicGetter = publicPropertiesMap[key];\n        let cssModule, globalProperties;\n        // public $xxx properties\n        if (publicGetter) {\n            if (key === '$attrs') {\n                track(instance, \"get\" /* TrackOpTypes.GET */, key);\n                markAttrsAccessed();\n            }\n            return publicGetter(instance);\n        }\n        else if (\n        // css module (injected by vue-loader)\n        (cssModule = type.__cssModules) &&\n            (cssModule = cssModule[key])) {\n            return cssModule;\n        }\n        else if (ctx !== EMPTY_OBJ && hasOwn(ctx, key)) {\n            // user may set custom properties to `this` that start with `$`\n            accessCache[key] = 4 /* AccessTypes.CONTEXT */;\n            return ctx[key];\n        }\n        else if (\n        // global properties\n        ((globalProperties = appContext.config.globalProperties),\n            hasOwn(globalProperties, key))) {\n            {\n                return globalProperties[key];\n            }\n        }\n        else if (currentRenderingInstance &&\n            (!isString(key) ||\n                // #1091 avoid internal isRef/isVNode checks on component instance leading\n                // to infinite warning loop\n                key.indexOf('__v') !== 0)) {\n            if (data !== EMPTY_OBJ && isReservedPrefix(key[0]) && hasOwn(data, key)) {\n                warn(`Property ${JSON.stringify(key)} must be accessed via $data because it starts with a reserved ` +\n                    `character (\"$\" or \"_\") and is not proxied on the render context.`);\n            }\n            else if (instance === currentRenderingInstance) {\n                warn(`Property ${JSON.stringify(key)} was accessed during render ` +\n                    `but is not defined on instance.`);\n            }\n        }\n    },\n    set({ _: instance }, key, value) {\n        const { data, setupState, ctx } = instance;\n        if (hasSetupBinding(setupState, key)) {\n            setupState[key] = value;\n            return true;\n        }\n        else if (setupState.__isScriptSetup &&\n            hasOwn(setupState, key)) {\n            warn(`Cannot mutate <script setup> binding \"${key}\" from Options API.`);\n            return false;\n        }\n        else if (data !== EMPTY_OBJ && hasOwn(data, key)) {\n            data[key] = value;\n            return true;\n        }\n        else if (hasOwn(instance.props, key)) {\n            warn(`Attempting to mutate prop \"${key}\". Props are readonly.`);\n            return false;\n        }\n        if (key[0] === '$' && key.slice(1) in instance) {\n            warn(`Attempting to mutate public property \"${key}\". ` +\n                    `Properties starting with $ are reserved and readonly.`);\n            return false;\n        }\n        else {\n            if (key in instance.appContext.config.globalProperties) {\n                Object.defineProperty(ctx, key, {\n                    enumerable: true,\n                    configurable: true,\n                    value\n                });\n            }\n            else {\n                ctx[key] = value;\n            }\n        }\n        return true;\n    },\n    has({ _: { data, setupState, accessCache, ctx, appContext, propsOptions } }, key) {\n        let normalizedProps;\n        return (!!accessCache[key] ||\n            (data !== EMPTY_OBJ && hasOwn(data, key)) ||\n            hasSetupBinding(setupState, key) ||\n            ((normalizedProps = propsOptions[0]) && hasOwn(normalizedProps, key)) ||\n            hasOwn(ctx, key) ||\n            hasOwn(publicPropertiesMap, key) ||\n            hasOwn(appContext.config.globalProperties, key));\n    },\n    defineProperty(target, key, descriptor) {\n        if (descriptor.get != null) {\n            // invalidate key cache of a getter based property #5417\n            target._.accessCache[key] = 0;\n        }\n        else if (hasOwn(descriptor, 'value')) {\n            this.set(target, key, descriptor.value, null);\n        }\n        return Reflect.defineProperty(target, key, descriptor);\n    }\n};\n{\n    PublicInstanceProxyHandlers.ownKeys = (target) => {\n        warn(`Avoid app logic that relies on enumerating keys on a component instance. ` +\n            `The keys will be empty in production mode to avoid performance overhead.`);\n        return Reflect.ownKeys(target);\n    };\n}\nconst RuntimeCompiledPublicInstanceProxyHandlers = /*#__PURE__*/ extend({}, PublicInstanceProxyHandlers, {\n    get(target, key) {\n        // fast path for unscopables when using `with` block\n        if (key === Symbol.unscopables) {\n            return;\n        }\n        return PublicInstanceProxyHandlers.get(target, key, target);\n    },\n    has(_, key) {\n        const has = key[0] !== '_' && !isGloballyWhitelisted(key);\n        if (!has && PublicInstanceProxyHandlers.has(_, key)) {\n            warn(`Property ${JSON.stringify(key)} should not start with _ which is a reserved prefix for Vue internals.`);\n        }\n        return has;\n    }\n});\n// dev only\n// In dev mode, the proxy target exposes the same properties as seen on `this`\n// for easier console inspection. In prod mode it will be an empty object so\n// these properties definitions can be skipped.\nfunction createDevRenderContext(instance) {\n    const target = {};\n    // expose internal instance for proxy handlers\n    Object.defineProperty(target, `_`, {\n        configurable: true,\n        enumerable: false,\n        get: () => instance\n    });\n    // expose public properties\n    Object.keys(publicPropertiesMap).forEach(key => {\n        Object.defineProperty(target, key, {\n            configurable: true,\n            enumerable: false,\n            get: () => publicPropertiesMap[key](instance),\n            // intercepted by the proxy so no need for implementation,\n            // but needed to prevent set errors\n            set: NOOP\n        });\n    });\n    return target;\n}\n// dev only\nfunction exposePropsOnRenderContext(instance) {\n    const { ctx, propsOptions: [propsOptions] } = instance;\n    if (propsOptions) {\n        Object.keys(propsOptions).forEach(key => {\n            Object.defineProperty(ctx, key, {\n                enumerable: true,\n                configurable: true,\n                get: () => instance.props[key],\n                set: NOOP\n            });\n        });\n    }\n}\n// dev only\nfunction exposeSetupStateOnRenderContext(instance) {\n    const { ctx, setupState } = instance;\n    Object.keys(toRaw(setupState)).forEach(key => {\n        if (!setupState.__isScriptSetup) {\n            if (isReservedPrefix(key[0])) {\n                warn(`setup() return property ${JSON.stringify(key)} should not start with \"$\" or \"_\" ` +\n                    `which are reserved prefixes for Vue internals.`);\n                return;\n            }\n            Object.defineProperty(ctx, key, {\n                enumerable: true,\n                configurable: true,\n                get: () => setupState[key],\n                set: NOOP\n            });\n        }\n    });\n}\n\nfunction createDuplicateChecker() {\n    const cache = Object.create(null);\n    return (type, key) => {\n        if (cache[key]) {\n            warn(`${type} property \"${key}\" is already defined in ${cache[key]}.`);\n        }\n        else {\n            cache[key] = type;\n        }\n    };\n}\nlet shouldCacheAccess = true;\nfunction applyOptions(instance) {\n    const options = resolveMergedOptions(instance);\n    const publicThis = instance.proxy;\n    const ctx = instance.ctx;\n    // do not cache property access on public proxy during state initialization\n    shouldCacheAccess = false;\n    // call beforeCreate first before accessing other options since\n    // the hook may mutate resolved options (#2791)\n    if (options.beforeCreate) {\n        callHook$1(options.beforeCreate, instance, \"bc\" /* LifecycleHooks.BEFORE_CREATE */);\n    }\n    const { \n    // state\n    data: dataOptions, computed: computedOptions, methods, watch: watchOptions, provide: provideOptions, inject: injectOptions, \n    // lifecycle\n    created, beforeMount, mounted, beforeUpdate, updated, activated, deactivated, beforeDestroy, beforeUnmount, destroyed, unmounted, render, renderTracked, renderTriggered, errorCaptured, serverPrefetch, \n    // public API\n    expose, inheritAttrs, \n    // assets\n    components, directives, filters } = options;\n    const checkDuplicateProperties = createDuplicateChecker() ;\n    {\n        const [propsOptions] = instance.propsOptions;\n        if (propsOptions) {\n            for (const key in propsOptions) {\n                checkDuplicateProperties(\"Props\" /* OptionTypes.PROPS */, key);\n            }\n        }\n    }\n    // options initialization order (to be consistent with Vue 2):\n    // - props (already done outside of this function)\n    // - inject\n    // - methods\n    // - data (deferred since it relies on `this` access)\n    // - computed\n    // - watch (deferred since it relies on `this` access)\n    if (injectOptions) {\n        resolveInjections(injectOptions, ctx, checkDuplicateProperties, instance.appContext.config.unwrapInjectedRef);\n    }\n    if (methods) {\n        for (const key in methods) {\n            const methodHandler = methods[key];\n            if (isFunction(methodHandler)) {\n                // In dev mode, we use the `createRenderContext` function to define\n                // methods to the proxy target, and those are read-only but\n                // reconfigurable, so it needs to be redefined here\n                {\n                    Object.defineProperty(ctx, key, {\n                        value: methodHandler.bind(publicThis),\n                        configurable: true,\n                        enumerable: true,\n                        writable: true\n                    });\n                }\n                {\n                    checkDuplicateProperties(\"Methods\" /* OptionTypes.METHODS */, key);\n                }\n            }\n            else {\n                warn(`Method \"${key}\" has type \"${typeof methodHandler}\" in the component definition. ` +\n                    `Did you reference the function correctly?`);\n            }\n        }\n    }\n    if (dataOptions) {\n        if (!isFunction(dataOptions)) {\n            warn(`The data option must be a function. ` +\n                `Plain object usage is no longer supported.`);\n        }\n        const data = dataOptions.call(publicThis, publicThis);\n        if (isPromise(data)) {\n            warn(`data() returned a Promise - note data() cannot be async; If you ` +\n                `intend to perform data fetching before component renders, use ` +\n                `async setup() + <Suspense>.`);\n        }\n        if (!isObject(data)) {\n            warn(`data() should return an object.`);\n        }\n        else {\n            instance.data = reactive(data);\n            {\n                for (const key in data) {\n                    checkDuplicateProperties(\"Data\" /* OptionTypes.DATA */, key);\n                    // expose data on ctx during dev\n                    if (!isReservedPrefix(key[0])) {\n                        Object.defineProperty(ctx, key, {\n                            configurable: true,\n                            enumerable: true,\n                            get: () => data[key],\n                            set: NOOP\n                        });\n                    }\n                }\n            }\n        }\n    }\n    // state initialization complete at this point - start caching access\n    shouldCacheAccess = true;\n    if (computedOptions) {\n        for (const key in computedOptions) {\n            const opt = computedOptions[key];\n            const get = isFunction(opt)\n                ? opt.bind(publicThis, publicThis)\n                : isFunction(opt.get)\n                    ? opt.get.bind(publicThis, publicThis)\n                    : NOOP;\n            if (get === NOOP) {\n                warn(`Computed property \"${key}\" has no getter.`);\n            }\n            const set = !isFunction(opt) && isFunction(opt.set)\n                ? opt.set.bind(publicThis)\n                : () => {\n                        warn(`Write operation failed: computed property \"${key}\" is readonly.`);\n                    }\n                    ;\n            const c = computed({\n                get,\n                set\n            });\n            Object.defineProperty(ctx, key, {\n                enumerable: true,\n                configurable: true,\n                get: () => c.value,\n                set: v => (c.value = v)\n            });\n            {\n                checkDuplicateProperties(\"Computed\" /* OptionTypes.COMPUTED */, key);\n            }\n        }\n    }\n    if (watchOptions) {\n        for (const key in watchOptions) {\n            createWatcher(watchOptions[key], ctx, publicThis, key);\n        }\n    }\n    if (provideOptions) {\n        const provides = isFunction(provideOptions)\n            ? provideOptions.call(publicThis)\n            : provideOptions;\n        Reflect.ownKeys(provides).forEach(key => {\n            provide(key, provides[key]);\n        });\n    }\n    if (created) {\n        callHook$1(created, instance, \"c\" /* LifecycleHooks.CREATED */);\n    }\n    function registerLifecycleHook(register, hook) {\n        if (isArray(hook)) {\n            hook.forEach(_hook => register(_hook.bind(publicThis)));\n        }\n        else if (hook) {\n            register(hook.bind(publicThis));\n        }\n    }\n    registerLifecycleHook(onBeforeMount, beforeMount);\n    registerLifecycleHook(onMounted, mounted);\n    registerLifecycleHook(onBeforeUpdate, beforeUpdate);\n    registerLifecycleHook(onUpdated, updated);\n    registerLifecycleHook(onActivated, activated);\n    registerLifecycleHook(onDeactivated, deactivated);\n    registerLifecycleHook(onErrorCaptured, errorCaptured);\n    registerLifecycleHook(onRenderTracked, renderTracked);\n    registerLifecycleHook(onRenderTriggered, renderTriggered);\n    registerLifecycleHook(onBeforeUnmount, beforeUnmount);\n    registerLifecycleHook(onUnmounted, unmounted);\n    registerLifecycleHook(onServerPrefetch, serverPrefetch);\n    if (isArray(expose)) {\n        if (expose.length) {\n            const exposed = instance.exposed || (instance.exposed = {});\n            expose.forEach(key => {\n                Object.defineProperty(exposed, key, {\n                    get: () => publicThis[key],\n                    set: val => (publicThis[key] = val)\n                });\n            });\n        }\n        else if (!instance.exposed) {\n            instance.exposed = {};\n        }\n    }\n    // options that are handled when creating the instance but also need to be\n    // applied from mixins\n    if (render && instance.render === NOOP) {\n        instance.render = render;\n    }\n    if (inheritAttrs != null) {\n        instance.inheritAttrs = inheritAttrs;\n    }\n    // asset options.\n    if (components)\n        instance.components = components;\n    if (directives)\n        instance.directives = directives;\n}\nfunction resolveInjections(injectOptions, ctx, checkDuplicateProperties = NOOP, unwrapRef = false) {\n    if (isArray(injectOptions)) {\n        injectOptions = normalizeInject(injectOptions);\n    }\n    for (const key in injectOptions) {\n        const opt = injectOptions[key];\n        let injected;\n        if (isObject(opt)) {\n            if ('default' in opt) {\n                injected = inject(opt.from || key, opt.default, true /* treat default function as factory */);\n            }\n            else {\n                injected = inject(opt.from || key);\n            }\n        }\n        else {\n            injected = inject(opt);\n        }\n        if (isRef(injected)) {\n            // TODO remove the check in 3.3\n            if (unwrapRef) {\n                Object.defineProperty(ctx, key, {\n                    enumerable: true,\n                    configurable: true,\n                    get: () => injected.value,\n                    set: v => (injected.value = v)\n                });\n            }\n            else {\n                {\n                    warn(`injected property \"${key}\" is a ref and will be auto-unwrapped ` +\n                        `and no longer needs \\`.value\\` in the next minor release. ` +\n                        `To opt-in to the new behavior now, ` +\n                        `set \\`app.config.unwrapInjectedRef = true\\` (this config is ` +\n                        `temporary and will not be needed in the future.)`);\n                }\n                ctx[key] = injected;\n            }\n        }\n        else {\n            ctx[key] = injected;\n        }\n        {\n            checkDuplicateProperties(\"Inject\" /* OptionTypes.INJECT */, key);\n        }\n    }\n}\nfunction callHook$1(hook, instance, type) {\n    callWithAsyncErrorHandling(isArray(hook)\n        ? hook.map(h => h.bind(instance.proxy))\n        : hook.bind(instance.proxy), instance, type);\n}\nfunction createWatcher(raw, ctx, publicThis, key) {\n    const getter = key.includes('.')\n        ? createPathGetter(publicThis, key)\n        : () => publicThis[key];\n    if (isString(raw)) {\n        const handler = ctx[raw];\n        if (isFunction(handler)) {\n            watch(getter, handler);\n        }\n        else {\n            warn(`Invalid watch handler specified by key \"${raw}\"`, handler);\n        }\n    }\n    else if (isFunction(raw)) {\n        watch(getter, raw.bind(publicThis));\n    }\n    else if (isObject(raw)) {\n        if (isArray(raw)) {\n            raw.forEach(r => createWatcher(r, ctx, publicThis, key));\n        }\n        else {\n            const handler = isFunction(raw.handler)\n                ? raw.handler.bind(publicThis)\n                : ctx[raw.handler];\n            if (isFunction(handler)) {\n                watch(getter, handler, raw);\n            }\n            else {\n                warn(`Invalid watch handler specified by key \"${raw.handler}\"`, handler);\n            }\n        }\n    }\n    else {\n        warn(`Invalid watch option: \"${key}\"`, raw);\n    }\n}\n/**\n * Resolve merged options and cache it on the component.\n * This is done only once per-component since the merging does not involve\n * instances.\n */\nfunction resolveMergedOptions(instance) {\n    const base = instance.type;\n    const { mixins, extends: extendsOptions } = base;\n    const { mixins: globalMixins, optionsCache: cache, config: { optionMergeStrategies } } = instance.appContext;\n    const cached = cache.get(base);\n    let resolved;\n    if (cached) {\n        resolved = cached;\n    }\n    else if (!globalMixins.length && !mixins && !extendsOptions) {\n        {\n            resolved = base;\n        }\n    }\n    else {\n        resolved = {};\n        if (globalMixins.length) {\n            globalMixins.forEach(m => mergeOptions(resolved, m, optionMergeStrategies, true));\n        }\n        mergeOptions(resolved, base, optionMergeStrategies);\n    }\n    if (isObject(base)) {\n        cache.set(base, resolved);\n    }\n    return resolved;\n}\nfunction mergeOptions(to, from, strats, asMixin = false) {\n    const { mixins, extends: extendsOptions } = from;\n    if (extendsOptions) {\n        mergeOptions(to, extendsOptions, strats, true);\n    }\n    if (mixins) {\n        mixins.forEach((m) => mergeOptions(to, m, strats, true));\n    }\n    for (const key in from) {\n        if (asMixin && key === 'expose') {\n            warn(`\"expose\" option is ignored when declared in mixins or extends. ` +\n                    `It should only be declared in the base component itself.`);\n        }\n        else {\n            const strat = internalOptionMergeStrats[key] || (strats && strats[key]);\n            to[key] = strat ? strat(to[key], from[key]) : from[key];\n        }\n    }\n    return to;\n}\nconst internalOptionMergeStrats = {\n    data: mergeDataFn,\n    props: mergeObjectOptions,\n    emits: mergeObjectOptions,\n    // objects\n    methods: mergeObjectOptions,\n    computed: mergeObjectOptions,\n    // lifecycle\n    beforeCreate: mergeAsArray,\n    created: mergeAsArray,\n    beforeMount: mergeAsArray,\n    mounted: mergeAsArray,\n    beforeUpdate: mergeAsArray,\n    updated: mergeAsArray,\n    beforeDestroy: mergeAsArray,\n    beforeUnmount: mergeAsArray,\n    destroyed: mergeAsArray,\n    unmounted: mergeAsArray,\n    activated: mergeAsArray,\n    deactivated: mergeAsArray,\n    errorCaptured: mergeAsArray,\n    serverPrefetch: mergeAsArray,\n    // assets\n    components: mergeObjectOptions,\n    directives: mergeObjectOptions,\n    // watch\n    watch: mergeWatchOptions,\n    // provide / inject\n    provide: mergeDataFn,\n    inject: mergeInject\n};\nfunction mergeDataFn(to, from) {\n    if (!from) {\n        return to;\n    }\n    if (!to) {\n        return from;\n    }\n    return function mergedDataFn() {\n        return (extend)(isFunction(to) ? to.call(this, this) : to, isFunction(from) ? from.call(this, this) : from);\n    };\n}\nfunction mergeInject(to, from) {\n    return mergeObjectOptions(normalizeInject(to), normalizeInject(from));\n}\nfunction normalizeInject(raw) {\n    if (isArray(raw)) {\n        const res = {};\n        for (let i = 0; i < raw.length; i++) {\n            res[raw[i]] = raw[i];\n        }\n        return res;\n    }\n    return raw;\n}\nfunction mergeAsArray(to, from) {\n    return to ? [...new Set([].concat(to, from))] : from;\n}\nfunction mergeObjectOptions(to, from) {\n    return to ? extend(extend(Object.create(null), to), from) : from;\n}\nfunction mergeWatchOptions(to, from) {\n    if (!to)\n        return from;\n    if (!from)\n        return to;\n    const merged = extend(Object.create(null), to);\n    for (const key in from) {\n        merged[key] = mergeAsArray(to[key], from[key]);\n    }\n    return merged;\n}\n\nfunction initProps(instance, rawProps, isStateful, // result of bitwise flag comparison\nisSSR = false) {\n    const props = {};\n    const attrs = {};\n    def(attrs, InternalObjectKey, 1);\n    instance.propsDefaults = Object.create(null);\n    setFullProps(instance, rawProps, props, attrs);\n    // ensure all declared prop keys are present\n    for (const key in instance.propsOptions[0]) {\n        if (!(key in props)) {\n            props[key] = undefined;\n        }\n    }\n    // validation\n    {\n        validateProps(rawProps || {}, props, instance);\n    }\n    if (isStateful) {\n        // stateful\n        instance.props = isSSR ? props : shallowReactive(props);\n    }\n    else {\n        if (!instance.type.props) {\n            // functional w/ optional props, props === attrs\n            instance.props = attrs;\n        }\n        else {\n            // functional w/ declared props\n            instance.props = props;\n        }\n    }\n    instance.attrs = attrs;\n}\nfunction isInHmrContext(instance) {\n    while (instance) {\n        if (instance.type.__hmrId)\n            return true;\n        instance = instance.parent;\n    }\n}\nfunction updateProps(instance, rawProps, rawPrevProps, optimized) {\n    const { props, attrs, vnode: { patchFlag } } = instance;\n    const rawCurrentProps = toRaw(props);\n    const [options] = instance.propsOptions;\n    let hasAttrsChanged = false;\n    if (\n    // always force full diff in dev\n    // - #1942 if hmr is enabled with sfc component\n    // - vite#872 non-sfc component used by sfc component\n    !(isInHmrContext(instance)) &&\n        (optimized || patchFlag > 0) &&\n        !(patchFlag & 16 /* PatchFlags.FULL_PROPS */)) {\n        if (patchFlag & 8 /* PatchFlags.PROPS */) {\n            // Compiler-generated props & no keys change, just set the updated\n            // the props.\n            const propsToUpdate = instance.vnode.dynamicProps;\n            for (let i = 0; i < propsToUpdate.length; i++) {\n                let key = propsToUpdate[i];\n                // skip if the prop key is a declared emit event listener\n                if (isEmitListener(instance.emitsOptions, key)) {\n                    continue;\n                }\n                // PROPS flag guarantees rawProps to be non-null\n                const value = rawProps[key];\n                if (options) {\n                    // attr / props separation was done on init and will be consistent\n                    // in this code path, so just check if attrs have it.\n                    if (hasOwn(attrs, key)) {\n                        if (value !== attrs[key]) {\n                            attrs[key] = value;\n                            hasAttrsChanged = true;\n                        }\n                    }\n                    else {\n                        const camelizedKey = camelize(key);\n                        props[camelizedKey] = resolvePropValue(options, rawCurrentProps, camelizedKey, value, instance, false /* isAbsent */);\n                    }\n                }\n                else {\n                    if (value !== attrs[key]) {\n                        attrs[key] = value;\n                        hasAttrsChanged = true;\n                    }\n                }\n            }\n        }\n    }\n    else {\n        // full props update.\n        if (setFullProps(instance, rawProps, props, attrs)) {\n            hasAttrsChanged = true;\n        }\n        // in case of dynamic props, check if we need to delete keys from\n        // the props object\n        let kebabKey;\n        for (const key in rawCurrentProps) {\n            if (!rawProps ||\n                // for camelCase\n                (!hasOwn(rawProps, key) &&\n                    // it's possible the original props was passed in as kebab-case\n                    // and converted to camelCase (#955)\n                    ((kebabKey = hyphenate(key)) === key || !hasOwn(rawProps, kebabKey)))) {\n                if (options) {\n                    if (rawPrevProps &&\n                        // for camelCase\n                        (rawPrevProps[key] !== undefined ||\n                            // for kebab-case\n                            rawPrevProps[kebabKey] !== undefined)) {\n                        props[key] = resolvePropValue(options, rawCurrentProps, key, undefined, instance, true /* isAbsent */);\n                    }\n                }\n                else {\n                    delete props[key];\n                }\n            }\n        }\n        // in the case of functional component w/o props declaration, props and\n        // attrs point to the same object so it should already have been updated.\n        if (attrs !== rawCurrentProps) {\n            for (const key in attrs) {\n                if (!rawProps ||\n                    (!hasOwn(rawProps, key) &&\n                        (!false ))) {\n                    delete attrs[key];\n                    hasAttrsChanged = true;\n                }\n            }\n        }\n    }\n    // trigger updates for $attrs in case it's used in component slots\n    if (hasAttrsChanged) {\n        trigger(instance, \"set\" /* TriggerOpTypes.SET */, '$attrs');\n    }\n    {\n        validateProps(rawProps || {}, props, instance);\n    }\n}\nfunction setFullProps(instance, rawProps, props, attrs) {\n    const [options, needCastKeys] = instance.propsOptions;\n    let hasAttrsChanged = false;\n    let rawCastValues;\n    if (rawProps) {\n        for (let key in rawProps) {\n            // key, ref are reserved and never passed down\n            if (isReservedProp(key)) {\n                continue;\n            }\n            const value = rawProps[key];\n            // prop option names are camelized during normalization, so to support\n            // kebab -> camel conversion here we need to camelize the key.\n            let camelKey;\n            if (options && hasOwn(options, (camelKey = camelize(key)))) {\n                if (!needCastKeys || !needCastKeys.includes(camelKey)) {\n                    props[camelKey] = value;\n                }\n                else {\n                    (rawCastValues || (rawCastValues = {}))[camelKey] = value;\n                }\n            }\n            else if (!isEmitListener(instance.emitsOptions, key)) {\n                if (!(key in attrs) || value !== attrs[key]) {\n                    attrs[key] = value;\n                    hasAttrsChanged = true;\n                }\n            }\n        }\n    }\n    if (needCastKeys) {\n        const rawCurrentProps = toRaw(props);\n        const castValues = rawCastValues || EMPTY_OBJ;\n        for (let i = 0; i < needCastKeys.length; i++) {\n            const key = needCastKeys[i];\n            props[key] = resolvePropValue(options, rawCurrentProps, key, castValues[key], instance, !hasOwn(castValues, key));\n        }\n    }\n    return hasAttrsChanged;\n}\nfunction resolvePropValue(options, props, key, value, instance, isAbsent) {\n    const opt = options[key];\n    if (opt != null) {\n        const hasDefault = hasOwn(opt, 'default');\n        // default values\n        if (hasDefault && value === undefined) {\n            const defaultValue = opt.default;\n            if (opt.type !== Function && isFunction(defaultValue)) {\n                const { propsDefaults } = instance;\n                if (key in propsDefaults) {\n                    value = propsDefaults[key];\n                }\n                else {\n                    setCurrentInstance(instance);\n                    value = propsDefaults[key] = defaultValue.call(null, props);\n                    unsetCurrentInstance();\n                }\n            }\n            else {\n                value = defaultValue;\n            }\n        }\n        // boolean casting\n        if (opt[0 /* BooleanFlags.shouldCast */]) {\n            if (isAbsent && !hasDefault) {\n                value = false;\n            }\n            else if (opt[1 /* BooleanFlags.shouldCastTrue */] &&\n                (value === '' || value === hyphenate(key))) {\n                value = true;\n            }\n        }\n    }\n    return value;\n}\nfunction normalizePropsOptions(comp, appContext, asMixin = false) {\n    const cache = appContext.propsCache;\n    const cached = cache.get(comp);\n    if (cached) {\n        return cached;\n    }\n    const raw = comp.props;\n    const normalized = {};\n    const needCastKeys = [];\n    // apply mixin/extends props\n    let hasExtends = false;\n    if (!isFunction(comp)) {\n        const extendProps = (raw) => {\n            hasExtends = true;\n            const [props, keys] = normalizePropsOptions(raw, appContext, true);\n            extend(normalized, props);\n            if (keys)\n                needCastKeys.push(...keys);\n        };\n        if (!asMixin && appContext.mixins.length) {\n            appContext.mixins.forEach(extendProps);\n        }\n        if (comp.extends) {\n            extendProps(comp.extends);\n        }\n        if (comp.mixins) {\n            comp.mixins.forEach(extendProps);\n        }\n    }\n    if (!raw && !hasExtends) {\n        if (isObject(comp)) {\n            cache.set(comp, EMPTY_ARR);\n        }\n        return EMPTY_ARR;\n    }\n    if (isArray(raw)) {\n        for (let i = 0; i < raw.length; i++) {\n            if (!isString(raw[i])) {\n                warn(`props must be strings when using array syntax.`, raw[i]);\n            }\n            const normalizedKey = camelize(raw[i]);\n            if (validatePropName(normalizedKey)) {\n                normalized[normalizedKey] = EMPTY_OBJ;\n            }\n        }\n    }\n    else if (raw) {\n        if (!isObject(raw)) {\n            warn(`invalid props options`, raw);\n        }\n        for (const key in raw) {\n            const normalizedKey = camelize(key);\n            if (validatePropName(normalizedKey)) {\n                const opt = raw[key];\n                const prop = (normalized[normalizedKey] =\n                    isArray(opt) || isFunction(opt) ? { type: opt } : Object.assign({}, opt));\n                if (prop) {\n                    const booleanIndex = getTypeIndex(Boolean, prop.type);\n                    const stringIndex = getTypeIndex(String, prop.type);\n                    prop[0 /* BooleanFlags.shouldCast */] = booleanIndex > -1;\n                    prop[1 /* BooleanFlags.shouldCastTrue */] =\n                        stringIndex < 0 || booleanIndex < stringIndex;\n                    // if the prop needs boolean casting or default value\n                    if (booleanIndex > -1 || hasOwn(prop, 'default')) {\n                        needCastKeys.push(normalizedKey);\n                    }\n                }\n            }\n        }\n    }\n    const res = [normalized, needCastKeys];\n    if (isObject(comp)) {\n        cache.set(comp, res);\n    }\n    return res;\n}\nfunction validatePropName(key) {\n    if (key[0] !== '$') {\n        return true;\n    }\n    else {\n        warn(`Invalid prop name: \"${key}\" is a reserved property.`);\n    }\n    return false;\n}\n// use function string name to check type constructors\n// so that it works across vms / iframes.\nfunction getType(ctor) {\n    const match = ctor && ctor.toString().match(/^\\s*(function|class) (\\w+)/);\n    return match ? match[2] : ctor === null ? 'null' : '';\n}\nfunction isSameType(a, b) {\n    return getType(a) === getType(b);\n}\nfunction getTypeIndex(type, expectedTypes) {\n    if (isArray(expectedTypes)) {\n        return expectedTypes.findIndex(t => isSameType(t, type));\n    }\n    else if (isFunction(expectedTypes)) {\n        return isSameType(expectedTypes, type) ? 0 : -1;\n    }\n    return -1;\n}\n/**\n * dev only\n */\nfunction validateProps(rawProps, props, instance) {\n    const resolvedValues = toRaw(props);\n    const options = instance.propsOptions[0];\n    for (const key in options) {\n        let opt = options[key];\n        if (opt == null)\n            continue;\n        validateProp(key, resolvedValues[key], opt, !hasOwn(rawProps, key) && !hasOwn(rawProps, hyphenate(key)));\n    }\n}\n/**\n * dev only\n */\nfunction validateProp(name, value, prop, isAbsent) {\n    const { type, required, validator } = prop;\n    // required!\n    if (required && isAbsent) {\n        warn('Missing required prop: \"' + name + '\"');\n        return;\n    }\n    // missing but optional\n    if (value == null && !prop.required) {\n        return;\n    }\n    // type check\n    if (type != null && type !== true) {\n        let isValid = false;\n        const types = isArray(type) ? type : [type];\n        const expectedTypes = [];\n        // value is valid as long as one of the specified types match\n        for (let i = 0; i < types.length && !isValid; i++) {\n            const { valid, expectedType } = assertType(value, types[i]);\n            expectedTypes.push(expectedType || '');\n            isValid = valid;\n        }\n        if (!isValid) {\n            warn(getInvalidTypeMessage(name, value, expectedTypes));\n            return;\n        }\n    }\n    // custom validator\n    if (validator && !validator(value)) {\n        warn('Invalid prop: custom validator check failed for prop \"' + name + '\".');\n    }\n}\nconst isSimpleType = /*#__PURE__*/ makeMap('String,Number,Boolean,Function,Symbol,BigInt');\n/**\n * dev only\n */\nfunction assertType(value, type) {\n    let valid;\n    const expectedType = getType(type);\n    if (isSimpleType(expectedType)) {\n        const t = typeof value;\n        valid = t === expectedType.toLowerCase();\n        // for primitive wrapper objects\n        if (!valid && t === 'object') {\n            valid = value instanceof type;\n        }\n    }\n    else if (expectedType === 'Object') {\n        valid = isObject(value);\n    }\n    else if (expectedType === 'Array') {\n        valid = isArray(value);\n    }\n    else if (expectedType === 'null') {\n        valid = value === null;\n    }\n    else {\n        valid = value instanceof type;\n    }\n    return {\n        valid,\n        expectedType\n    };\n}\n/**\n * dev only\n */\nfunction getInvalidTypeMessage(name, value, expectedTypes) {\n    let message = `Invalid prop: type check failed for prop \"${name}\".` +\n        ` Expected ${expectedTypes.map(capitalize).join(' | ')}`;\n    const expectedType = expectedTypes[0];\n    const receivedType = toRawType(value);\n    const expectedValue = styleValue(value, expectedType);\n    const receivedValue = styleValue(value, receivedType);\n    // check if we need to specify expected value\n    if (expectedTypes.length === 1 &&\n        isExplicable(expectedType) &&\n        !isBoolean(expectedType, receivedType)) {\n        message += ` with value ${expectedValue}`;\n    }\n    message += `, got ${receivedType} `;\n    // check if we need to specify received value\n    if (isExplicable(receivedType)) {\n        message += `with value ${receivedValue}.`;\n    }\n    return message;\n}\n/**\n * dev only\n */\nfunction styleValue(value, type) {\n    if (type === 'String') {\n        return `\"${value}\"`;\n    }\n    else if (type === 'Number') {\n        return `${Number(value)}`;\n    }\n    else {\n        return `${value}`;\n    }\n}\n/**\n * dev only\n */\nfunction isExplicable(type) {\n    const explicitTypes = ['string', 'number', 'boolean'];\n    return explicitTypes.some(elem => type.toLowerCase() === elem);\n}\n/**\n * dev only\n */\nfunction isBoolean(...args) {\n    return args.some(elem => elem.toLowerCase() === 'boolean');\n}\n\nconst isInternalKey = (key) => key[0] === '_' || key === '$stable';\nconst normalizeSlotValue = (value) => isArray(value)\n    ? value.map(normalizeVNode)\n    : [normalizeVNode(value)];\nconst normalizeSlot = (key, rawSlot, ctx) => {\n    if (rawSlot._n) {\n        // already normalized - #5353\n        return rawSlot;\n    }\n    const normalized = withCtx((...args) => {\n        if (true && currentInstance) {\n            warn(`Slot \"${key}\" invoked outside of the render function: ` +\n                `this will not track dependencies used in the slot. ` +\n                `Invoke the slot function inside the render function instead.`);\n        }\n        return normalizeSlotValue(rawSlot(...args));\n    }, ctx);\n    normalized._c = false;\n    return normalized;\n};\nconst normalizeObjectSlots = (rawSlots, slots, instance) => {\n    const ctx = rawSlots._ctx;\n    for (const key in rawSlots) {\n        if (isInternalKey(key))\n            continue;\n        const value = rawSlots[key];\n        if (isFunction(value)) {\n            slots[key] = normalizeSlot(key, value, ctx);\n        }\n        else if (value != null) {\n            {\n                warn(`Non-function value encountered for slot \"${key}\". ` +\n                    `Prefer function slots for better performance.`);\n            }\n            const normalized = normalizeSlotValue(value);\n            slots[key] = () => normalized;\n        }\n    }\n};\nconst normalizeVNodeSlots = (instance, children) => {\n    if (!isKeepAlive(instance.vnode) &&\n        !(false )) {\n        warn(`Non-function value encountered for default slot. ` +\n            `Prefer function slots for better performance.`);\n    }\n    const normalized = normalizeSlotValue(children);\n    instance.slots.default = () => normalized;\n};\nconst initSlots = (instance, children) => {\n    if (instance.vnode.shapeFlag & 32 /* ShapeFlags.SLOTS_CHILDREN */) {\n        const type = children._;\n        if (type) {\n            // users can get the shallow readonly version of the slots object through `this.$slots`,\n            // we should avoid the proxy object polluting the slots of the internal instance\n            instance.slots = toRaw(children);\n            // make compiler marker non-enumerable\n            def(children, '_', type);\n        }\n        else {\n            normalizeObjectSlots(children, (instance.slots = {}));\n        }\n    }\n    else {\n        instance.slots = {};\n        if (children) {\n            normalizeVNodeSlots(instance, children);\n        }\n    }\n    def(instance.slots, InternalObjectKey, 1);\n};\nconst updateSlots = (instance, children, optimized) => {\n    const { vnode, slots } = instance;\n    let needDeletionCheck = true;\n    let deletionComparisonTarget = EMPTY_OBJ;\n    if (vnode.shapeFlag & 32 /* ShapeFlags.SLOTS_CHILDREN */) {\n        const type = children._;\n        if (type) {\n            // compiled slots.\n            if (isHmrUpdating) {\n                // Parent was HMR updated so slot content may have changed.\n                // force update slots and mark instance for hmr as well\n                extend(slots, children);\n            }\n            else if (optimized && type === 1 /* SlotFlags.STABLE */) {\n                // compiled AND stable.\n                // no need to update, and skip stale slots removal.\n                needDeletionCheck = false;\n            }\n            else {\n                // compiled but dynamic (v-if/v-for on slots) - update slots, but skip\n                // normalization.\n                extend(slots, children);\n                // #2893\n                // when rendering the optimized slots by manually written render function,\n                // we need to delete the `slots._` flag if necessary to make subsequent updates reliable,\n                // i.e. let the `renderSlot` create the bailed Fragment\n                if (!optimized && type === 1 /* SlotFlags.STABLE */) {\n                    delete slots._;\n                }\n            }\n        }\n        else {\n            needDeletionCheck = !children.$stable;\n            normalizeObjectSlots(children, slots);\n        }\n        deletionComparisonTarget = children;\n    }\n    else if (children) {\n        // non slot object children (direct value) passed to a component\n        normalizeVNodeSlots(instance, children);\n        deletionComparisonTarget = { default: 1 };\n    }\n    // delete stale slots\n    if (needDeletionCheck) {\n        for (const key in slots) {\n            if (!isInternalKey(key) && !(key in deletionComparisonTarget)) {\n                delete slots[key];\n            }\n        }\n    }\n};\n\nfunction createAppContext() {\n    return {\n        app: null,\n        config: {\n            isNativeTag: NO,\n            performance: false,\n            globalProperties: {},\n            optionMergeStrategies: {},\n            errorHandler: undefined,\n            warnHandler: undefined,\n            compilerOptions: {}\n        },\n        mixins: [],\n        components: {},\n        directives: {},\n        provides: Object.create(null),\n        optionsCache: new WeakMap(),\n        propsCache: new WeakMap(),\n        emitsCache: new WeakMap()\n    };\n}\nlet uid$1 = 0;\nfunction createAppAPI(render, hydrate) {\n    return function createApp(rootComponent, rootProps = null) {\n        if (!isFunction(rootComponent)) {\n            rootComponent = Object.assign({}, rootComponent);\n        }\n        if (rootProps != null && !isObject(rootProps)) {\n            warn(`root props passed to app.mount() must be an object.`);\n            rootProps = null;\n        }\n        const context = createAppContext();\n        const installedPlugins = new Set();\n        let isMounted = false;\n        const app = (context.app = {\n            _uid: uid$1++,\n            _component: rootComponent,\n            _props: rootProps,\n            _container: null,\n            _context: context,\n            _instance: null,\n            version,\n            get config() {\n                return context.config;\n            },\n            set config(v) {\n                {\n                    warn(`app.config cannot be replaced. Modify individual options instead.`);\n                }\n            },\n            use(plugin, ...options) {\n                if (installedPlugins.has(plugin)) {\n                    warn(`Plugin has already been applied to target app.`);\n                }\n                else if (plugin && isFunction(plugin.install)) {\n                    installedPlugins.add(plugin);\n                    plugin.install(app, ...options);\n                }\n                else if (isFunction(plugin)) {\n                    installedPlugins.add(plugin);\n                    plugin(app, ...options);\n                }\n                else {\n                    warn(`A plugin must either be a function or an object with an \"install\" ` +\n                        `function.`);\n                }\n                return app;\n            },\n            mixin(mixin) {\n                {\n                    if (!context.mixins.includes(mixin)) {\n                        context.mixins.push(mixin);\n                    }\n                    else {\n                        warn('Mixin has already been applied to target app' +\n                            (mixin.name ? `: ${mixin.name}` : ''));\n                    }\n                }\n                return app;\n            },\n            component(name, component) {\n                {\n                    validateComponentName(name, context.config);\n                }\n                if (!component) {\n                    return context.components[name];\n                }\n                if (context.components[name]) {\n                    warn(`Component \"${name}\" has already been registered in target app.`);\n                }\n                context.components[name] = component;\n                return app;\n            },\n            directive(name, directive) {\n                {\n                    validateDirectiveName(name);\n                }\n                if (!directive) {\n                    return context.directives[name];\n                }\n                if (context.directives[name]) {\n                    warn(`Directive \"${name}\" has already been registered in target app.`);\n                }\n                context.directives[name] = directive;\n                return app;\n            },\n            mount(rootContainer, isHydrate, isSVG) {\n                if (!isMounted) {\n                    // #5571\n                    if (rootContainer.__vue_app__) {\n                        warn(`There is already an app instance mounted on the host container.\\n` +\n                            ` If you want to mount another app on the same host container,` +\n                            ` you need to unmount the previous app by calling \\`app.unmount()\\` first.`);\n                    }\n                    const vnode = createVNode(rootComponent, rootProps);\n                    // store app context on the root VNode.\n                    // this will be set on the root instance on initial mount.\n                    vnode.appContext = context;\n                    // HMR root reload\n                    {\n                        context.reload = () => {\n                            render(cloneVNode(vnode), rootContainer, isSVG);\n                        };\n                    }\n                    if (isHydrate && hydrate) {\n                        hydrate(vnode, rootContainer);\n                    }\n                    else {\n                        render(vnode, rootContainer, isSVG);\n                    }\n                    isMounted = true;\n                    app._container = rootContainer;\n                    rootContainer.__vue_app__ = app;\n                    {\n                        app._instance = vnode.component;\n                        devtoolsInitApp(app, version);\n                    }\n                    return getExposeProxy(vnode.component) || vnode.component.proxy;\n                }\n                else {\n                    warn(`App has already been mounted.\\n` +\n                        `If you want to remount the same app, move your app creation logic ` +\n                        `into a factory function and create fresh app instances for each ` +\n                        `mount - e.g. \\`const createMyApp = () => createApp(App)\\``);\n                }\n            },\n            unmount() {\n                if (isMounted) {\n                    render(null, app._container);\n                    {\n                        app._instance = null;\n                        devtoolsUnmountApp(app);\n                    }\n                    delete app._container.__vue_app__;\n                }\n                else {\n                    warn(`Cannot unmount an app that is not mounted.`);\n                }\n            },\n            provide(key, value) {\n                if (key in context.provides) {\n                    warn(`App already provides property with key \"${String(key)}\". ` +\n                        `It will be overwritten with the new value.`);\n                }\n                context.provides[key] = value;\n                return app;\n            }\n        });\n        return app;\n    };\n}\n\n/**\n * Function for handling a template ref\n */\nfunction setRef(rawRef, oldRawRef, parentSuspense, vnode, isUnmount = false) {\n    if (isArray(rawRef)) {\n        rawRef.forEach((r, i) => setRef(r, oldRawRef && (isArray(oldRawRef) ? oldRawRef[i] : oldRawRef), parentSuspense, vnode, isUnmount));\n        return;\n    }\n    if (isAsyncWrapper(vnode) && !isUnmount) {\n        // when mounting async components, nothing needs to be done,\n        // because the template ref is forwarded to inner component\n        return;\n    }\n    const refValue = vnode.shapeFlag & 4 /* ShapeFlags.STATEFUL_COMPONENT */\n        ? getExposeProxy(vnode.component) || vnode.component.proxy\n        : vnode.el;\n    const value = isUnmount ? null : refValue;\n    const { i: owner, r: ref } = rawRef;\n    if (!owner) {\n        warn(`Missing ref owner context. ref cannot be used on hoisted vnodes. ` +\n            `A vnode with ref must be created inside the render function.`);\n        return;\n    }\n    const oldRef = oldRawRef && oldRawRef.r;\n    const refs = owner.refs === EMPTY_OBJ ? (owner.refs = {}) : owner.refs;\n    const setupState = owner.setupState;\n    // dynamic ref changed. unset old ref\n    if (oldRef != null && oldRef !== ref) {\n        if (isString(oldRef)) {\n            refs[oldRef] = null;\n            if (hasOwn(setupState, oldRef)) {\n                setupState[oldRef] = null;\n            }\n        }\n        else if (isRef(oldRef)) {\n            oldRef.value = null;\n        }\n    }\n    if (isFunction(ref)) {\n        callWithErrorHandling(ref, owner, 12 /* ErrorCodes.FUNCTION_REF */, [value, refs]);\n    }\n    else {\n        const _isString = isString(ref);\n        const _isRef = isRef(ref);\n        if (_isString || _isRef) {\n            const doSet = () => {\n                if (rawRef.f) {\n                    const existing = _isString\n                        ? hasOwn(setupState, ref)\n                            ? setupState[ref]\n                            : refs[ref]\n                        : ref.value;\n                    if (isUnmount) {\n                        isArray(existing) && remove(existing, refValue);\n                    }\n                    else {\n                        if (!isArray(existing)) {\n                            if (_isString) {\n                                refs[ref] = [refValue];\n                                if (hasOwn(setupState, ref)) {\n                                    setupState[ref] = refs[ref];\n                                }\n                            }\n                            else {\n                                ref.value = [refValue];\n                                if (rawRef.k)\n                                    refs[rawRef.k] = ref.value;\n                            }\n                        }\n                        else if (!existing.includes(refValue)) {\n                            existing.push(refValue);\n                        }\n                    }\n                }\n                else if (_isString) {\n                    refs[ref] = value;\n                    if (hasOwn(setupState, ref)) {\n                        setupState[ref] = value;\n                    }\n                }\n                else if (_isRef) {\n                    ref.value = value;\n                    if (rawRef.k)\n                        refs[rawRef.k] = value;\n                }\n                else {\n                    warn('Invalid template ref type:', ref, `(${typeof ref})`);\n                }\n            };\n            if (value) {\n                doSet.id = -1;\n                queuePostRenderEffect(doSet, parentSuspense);\n            }\n            else {\n                doSet();\n            }\n        }\n        else {\n            warn('Invalid template ref type:', ref, `(${typeof ref})`);\n        }\n    }\n}\n\nlet hasMismatch = false;\nconst isSVGContainer = (container) => /svg/.test(container.namespaceURI) && container.tagName !== 'foreignObject';\nconst isComment = (node) => node.nodeType === 8 /* DOMNodeTypes.COMMENT */;\n// Note: hydration is DOM-specific\n// But we have to place it in core due to tight coupling with core - splitting\n// it out creates a ton of unnecessary complexity.\n// Hydration also depends on some renderer internal logic which needs to be\n// passed in via arguments.\nfunction createHydrationFunctions(rendererInternals) {\n    const { mt: mountComponent, p: patch, o: { patchProp, createText, nextSibling, parentNode, remove, insert, createComment } } = rendererInternals;\n    const hydrate = (vnode, container) => {\n        if (!container.hasChildNodes()) {\n            warn(`Attempting to hydrate existing markup but container is empty. ` +\n                    `Performing full mount instead.`);\n            patch(null, vnode, container);\n            flushPostFlushCbs();\n            container._vnode = vnode;\n            return;\n        }\n        hasMismatch = false;\n        hydrateNode(container.firstChild, vnode, null, null, null);\n        flushPostFlushCbs();\n        container._vnode = vnode;\n        if (hasMismatch && !false) {\n            // this error should show up in production\n            console.error(`Hydration completed but contains mismatches.`);\n        }\n    };\n    const hydrateNode = (node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized = false) => {\n        const isFragmentStart = isComment(node) && node.data === '[';\n        const onMismatch = () => handleMismatch(node, vnode, parentComponent, parentSuspense, slotScopeIds, isFragmentStart);\n        const { type, ref, shapeFlag, patchFlag } = vnode;\n        let domType = node.nodeType;\n        vnode.el = node;\n        if (patchFlag === -2 /* PatchFlags.BAIL */) {\n            optimized = false;\n            vnode.dynamicChildren = null;\n        }\n        let nextNode = null;\n        switch (type) {\n            case Text:\n                if (domType !== 3 /* DOMNodeTypes.TEXT */) {\n                    // #5728 empty text node inside a slot can cause hydration failure\n                    // because the server rendered HTML won't contain a text node\n                    if (vnode.children === '') {\n                        insert((vnode.el = createText('')), parentNode(node), node);\n                        nextNode = node;\n                    }\n                    else {\n                        nextNode = onMismatch();\n                    }\n                }\n                else {\n                    if (node.data !== vnode.children) {\n                        hasMismatch = true;\n                        warn(`Hydration text mismatch:` +\n                                `\\n- Client: ${JSON.stringify(node.data)}` +\n                                `\\n- Server: ${JSON.stringify(vnode.children)}`);\n                        node.data = vnode.children;\n                    }\n                    nextNode = nextSibling(node);\n                }\n                break;\n            case Comment:\n                if (domType !== 8 /* DOMNodeTypes.COMMENT */ || isFragmentStart) {\n                    nextNode = onMismatch();\n                }\n                else {\n                    nextNode = nextSibling(node);\n                }\n                break;\n            case Static:\n                if (isFragmentStart) {\n                    // entire template is static but SSRed as a fragment\n                    node = nextSibling(node);\n                    domType = node.nodeType;\n                }\n                if (domType === 1 /* DOMNodeTypes.ELEMENT */ || domType === 3 /* DOMNodeTypes.TEXT */) {\n                    // determine anchor, adopt content\n                    nextNode = node;\n                    // if the static vnode has its content stripped during build,\n                    // adopt it from the server-rendered HTML.\n                    const needToAdoptContent = !vnode.children.length;\n                    for (let i = 0; i < vnode.staticCount; i++) {\n                        if (needToAdoptContent)\n                            vnode.children +=\n                                nextNode.nodeType === 1 /* DOMNodeTypes.ELEMENT */\n                                    ? nextNode.outerHTML\n                                    : nextNode.data;\n                        if (i === vnode.staticCount - 1) {\n                            vnode.anchor = nextNode;\n                        }\n                        nextNode = nextSibling(nextNode);\n                    }\n                    return isFragmentStart ? nextSibling(nextNode) : nextNode;\n                }\n                else {\n                    onMismatch();\n                }\n                break;\n            case Fragment:\n                if (!isFragmentStart) {\n                    nextNode = onMismatch();\n                }\n                else {\n                    nextNode = hydrateFragment(node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized);\n                }\n                break;\n            default:\n                if (shapeFlag & 1 /* ShapeFlags.ELEMENT */) {\n                    if (domType !== 1 /* DOMNodeTypes.ELEMENT */ ||\n                        vnode.type.toLowerCase() !==\n                            node.tagName.toLowerCase()) {\n                        nextNode = onMismatch();\n                    }\n                    else {\n                        nextNode = hydrateElement(node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized);\n                    }\n                }\n                else if (shapeFlag & 6 /* ShapeFlags.COMPONENT */) {\n                    // when setting up the render effect, if the initial vnode already\n                    // has .el set, the component will perform hydration instead of mount\n                    // on its sub-tree.\n                    vnode.slotScopeIds = slotScopeIds;\n                    const container = parentNode(node);\n                    mountComponent(vnode, container, null, parentComponent, parentSuspense, isSVGContainer(container), optimized);\n                    // component may be async, so in the case of fragments we cannot rely\n                    // on component's rendered output to determine the end of the fragment\n                    // instead, we do a lookahead to find the end anchor node.\n                    nextNode = isFragmentStart\n                        ? locateClosingAsyncAnchor(node)\n                        : nextSibling(node);\n                    // #4293 teleport as component root\n                    if (nextNode &&\n                        isComment(nextNode) &&\n                        nextNode.data === 'teleport end') {\n                        nextNode = nextSibling(nextNode);\n                    }\n                    // #3787\n                    // if component is async, it may get moved / unmounted before its\n                    // inner component is loaded, so we need to give it a placeholder\n                    // vnode that matches its adopted DOM.\n                    if (isAsyncWrapper(vnode)) {\n                        let subTree;\n                        if (isFragmentStart) {\n                            subTree = createVNode(Fragment);\n                            subTree.anchor = nextNode\n                                ? nextNode.previousSibling\n                                : container.lastChild;\n                        }\n                        else {\n                            subTree =\n                                node.nodeType === 3 ? createTextVNode('') : createVNode('div');\n                        }\n                        subTree.el = node;\n                        vnode.component.subTree = subTree;\n                    }\n                }\n                else if (shapeFlag & 64 /* ShapeFlags.TELEPORT */) {\n                    if (domType !== 8 /* DOMNodeTypes.COMMENT */) {\n                        nextNode = onMismatch();\n                    }\n                    else {\n                        nextNode = vnode.type.hydrate(node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized, rendererInternals, hydrateChildren);\n                    }\n                }\n                else if (shapeFlag & 128 /* ShapeFlags.SUSPENSE */) {\n                    nextNode = vnode.type.hydrate(node, vnode, parentComponent, parentSuspense, isSVGContainer(parentNode(node)), slotScopeIds, optimized, rendererInternals, hydrateNode);\n                }\n                else {\n                    warn('Invalid HostVNode type:', type, `(${typeof type})`);\n                }\n        }\n        if (ref != null) {\n            setRef(ref, null, parentSuspense, vnode);\n        }\n        return nextNode;\n    };\n    const hydrateElement = (el, vnode, parentComponent, parentSuspense, slotScopeIds, optimized) => {\n        optimized = optimized || !!vnode.dynamicChildren;\n        const { type, props, patchFlag, shapeFlag, dirs } = vnode;\n        // #4006 for form elements with non-string v-model value bindings\n        // e.g. <option :value=\"obj\">, <input type=\"checkbox\" :true-value=\"1\">\n        const forcePatchValue = (type === 'input' && dirs) || type === 'option';\n        // skip props & children if this is hoisted static nodes\n        // #5405 in dev, always hydrate children for HMR\n        {\n            if (dirs) {\n                invokeDirectiveHook(vnode, null, parentComponent, 'created');\n            }\n            // props\n            if (props) {\n                if (forcePatchValue ||\n                    !optimized ||\n                    patchFlag & (16 /* PatchFlags.FULL_PROPS */ | 32 /* PatchFlags.HYDRATE_EVENTS */)) {\n                    for (const key in props) {\n                        if ((forcePatchValue && key.endsWith('value')) ||\n                            (isOn(key) && !isReservedProp(key))) {\n                            patchProp(el, key, null, props[key], false, undefined, parentComponent);\n                        }\n                    }\n                }\n                else if (props.onClick) {\n                    // Fast path for click listeners (which is most often) to avoid\n                    // iterating through props.\n                    patchProp(el, 'onClick', null, props.onClick, false, undefined, parentComponent);\n                }\n            }\n            // vnode / directive hooks\n            let vnodeHooks;\n            if ((vnodeHooks = props && props.onVnodeBeforeMount)) {\n                invokeVNodeHook(vnodeHooks, parentComponent, vnode);\n            }\n            if (dirs) {\n                invokeDirectiveHook(vnode, null, parentComponent, 'beforeMount');\n            }\n            if ((vnodeHooks = props && props.onVnodeMounted) || dirs) {\n                queueEffectWithSuspense(() => {\n                    vnodeHooks && invokeVNodeHook(vnodeHooks, parentComponent, vnode);\n                    dirs && invokeDirectiveHook(vnode, null, parentComponent, 'mounted');\n                }, parentSuspense);\n            }\n            // children\n            if (shapeFlag & 16 /* ShapeFlags.ARRAY_CHILDREN */ &&\n                // skip if element has innerHTML / textContent\n                !(props && (props.innerHTML || props.textContent))) {\n                let next = hydrateChildren(el.firstChild, vnode, el, parentComponent, parentSuspense, slotScopeIds, optimized);\n                let hasWarned = false;\n                while (next) {\n                    hasMismatch = true;\n                    if (!hasWarned) {\n                        warn(`Hydration children mismatch in <${vnode.type}>: ` +\n                            `server rendered element contains more child nodes than client vdom.`);\n                        hasWarned = true;\n                    }\n                    // The SSRed DOM contains more nodes than it should. Remove them.\n                    const cur = next;\n                    next = next.nextSibling;\n                    remove(cur);\n                }\n            }\n            else if (shapeFlag & 8 /* ShapeFlags.TEXT_CHILDREN */) {\n                if (el.textContent !== vnode.children) {\n                    hasMismatch = true;\n                    warn(`Hydration text content mismatch in <${vnode.type}>:\\n` +\n                            `- Client: ${el.textContent}\\n` +\n                            `- Server: ${vnode.children}`);\n                    el.textContent = vnode.children;\n                }\n            }\n        }\n        return el.nextSibling;\n    };\n    const hydrateChildren = (node, parentVNode, container, parentComponent, parentSuspense, slotScopeIds, optimized) => {\n        optimized = optimized || !!parentVNode.dynamicChildren;\n        const children = parentVNode.children;\n        const l = children.length;\n        let hasWarned = false;\n        for (let i = 0; i < l; i++) {\n            const vnode = optimized\n                ? children[i]\n                : (children[i] = normalizeVNode(children[i]));\n            if (node) {\n                node = hydrateNode(node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized);\n            }\n            else if (vnode.type === Text && !vnode.children) {\n                continue;\n            }\n            else {\n                hasMismatch = true;\n                if (!hasWarned) {\n                    warn(`Hydration children mismatch in <${container.tagName.toLowerCase()}>: ` +\n                        `server rendered element contains fewer child nodes than client vdom.`);\n                    hasWarned = true;\n                }\n                // the SSRed DOM didn't contain enough nodes. Mount the missing ones.\n                patch(null, vnode, container, null, parentComponent, parentSuspense, isSVGContainer(container), slotScopeIds);\n            }\n        }\n        return node;\n    };\n    const hydrateFragment = (node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized) => {\n        const { slotScopeIds: fragmentSlotScopeIds } = vnode;\n        if (fragmentSlotScopeIds) {\n            slotScopeIds = slotScopeIds\n                ? slotScopeIds.concat(fragmentSlotScopeIds)\n                : fragmentSlotScopeIds;\n        }\n        const container = parentNode(node);\n        const next = hydrateChildren(nextSibling(node), vnode, container, parentComponent, parentSuspense, slotScopeIds, optimized);\n        if (next && isComment(next) && next.data === ']') {\n            return nextSibling((vnode.anchor = next));\n        }\n        else {\n            // fragment didn't hydrate successfully, since we didn't get a end anchor\n            // back. This should have led to node/children mismatch warnings.\n            hasMismatch = true;\n            // since the anchor is missing, we need to create one and insert it\n            insert((vnode.anchor = createComment(`]`)), container, next);\n            return next;\n        }\n    };\n    const handleMismatch = (node, vnode, parentComponent, parentSuspense, slotScopeIds, isFragment) => {\n        hasMismatch = true;\n        warn(`Hydration node mismatch:\\n- Client vnode:`, vnode.type, `\\n- Server rendered DOM:`, node, node.nodeType === 3 /* DOMNodeTypes.TEXT */\n                ? `(text)`\n                : isComment(node) && node.data === '['\n                    ? `(start of fragment)`\n                    : ``);\n        vnode.el = null;\n        if (isFragment) {\n            // remove excessive fragment nodes\n            const end = locateClosingAsyncAnchor(node);\n            while (true) {\n                const next = nextSibling(node);\n                if (next && next !== end) {\n                    remove(next);\n                }\n                else {\n                    break;\n                }\n            }\n        }\n        const next = nextSibling(node);\n        const container = parentNode(node);\n        remove(node);\n        patch(null, vnode, container, next, parentComponent, parentSuspense, isSVGContainer(container), slotScopeIds);\n        return next;\n    };\n    const locateClosingAsyncAnchor = (node) => {\n        let match = 0;\n        while (node) {\n            node = nextSibling(node);\n            if (node && isComment(node)) {\n                if (node.data === '[')\n                    match++;\n                if (node.data === ']') {\n                    if (match === 0) {\n                        return nextSibling(node);\n                    }\n                    else {\n                        match--;\n                    }\n                }\n            }\n        }\n        return node;\n    };\n    return [hydrate, hydrateNode];\n}\n\n/* eslint-disable no-restricted-globals */\nlet supported;\nlet perf;\nfunction startMeasure(instance, type) {\n    if (instance.appContext.config.performance && isSupported()) {\n        perf.mark(`vue-${type}-${instance.uid}`);\n    }\n    {\n        devtoolsPerfStart(instance, type, isSupported() ? perf.now() : Date.now());\n    }\n}\nfunction endMeasure(instance, type) {\n    if (instance.appContext.config.performance && isSupported()) {\n        const startTag = `vue-${type}-${instance.uid}`;\n        const endTag = startTag + `:end`;\n        perf.mark(endTag);\n        perf.measure(`<${formatComponentName(instance, instance.type)}> ${type}`, startTag, endTag);\n        perf.clearMarks(startTag);\n        perf.clearMarks(endTag);\n    }\n    {\n        devtoolsPerfEnd(instance, type, isSupported() ? perf.now() : Date.now());\n    }\n}\nfunction isSupported() {\n    if (supported !== undefined) {\n        return supported;\n    }\n    if (typeof window !== 'undefined' && window.performance) {\n        supported = true;\n        perf = window.performance;\n    }\n    else {\n        supported = false;\n    }\n    return supported;\n}\n\nconst queuePostRenderEffect = queueEffectWithSuspense\n    ;\n/**\n * The createRenderer function accepts two generic arguments:\n * HostNode and HostElement, corresponding to Node and Element types in the\n * host environment. For example, for runtime-dom, HostNode would be the DOM\n * `Node` interface and HostElement would be the DOM `Element` interface.\n *\n * Custom renderers can pass in the platform specific types like this:\n *\n * ``` js\n * const { render, createApp } = createRenderer<Node, Element>({\n *   patchProp,\n *   ...nodeOps\n * })\n * ```\n */\nfunction createRenderer(options) {\n    return baseCreateRenderer(options);\n}\n// Separate API for creating hydration-enabled renderer.\n// Hydration logic is only used when calling this function, making it\n// tree-shakable.\nfunction createHydrationRenderer(options) {\n    return baseCreateRenderer(options, createHydrationFunctions);\n}\n// implementation\nfunction baseCreateRenderer(options, createHydrationFns) {\n    const target = getGlobalThis();\n    target.__VUE__ = true;\n    {\n        setDevtoolsHook(target.__VUE_DEVTOOLS_GLOBAL_HOOK__, target);\n    }\n    const { insert: hostInsert, remove: hostRemove, patchProp: hostPatchProp, createElement: hostCreateElement, createText: hostCreateText, createComment: hostCreateComment, setText: hostSetText, setElementText: hostSetElementText, parentNode: hostParentNode, nextSibling: hostNextSibling, setScopeId: hostSetScopeId = NOOP, insertStaticContent: hostInsertStaticContent } = options;\n    // Note: functions inside this closure should use `const xxx = () => {}`\n    // style in order to prevent being inlined by minifiers.\n    const patch = (n1, n2, container, anchor = null, parentComponent = null, parentSuspense = null, isSVG = false, slotScopeIds = null, optimized = isHmrUpdating ? false : !!n2.dynamicChildren) => {\n        if (n1 === n2) {\n            return;\n        }\n        // patching & not same type, unmount old tree\n        if (n1 && !isSameVNodeType(n1, n2)) {\n            anchor = getNextHostNode(n1);\n            unmount(n1, parentComponent, parentSuspense, true);\n            n1 = null;\n        }\n        if (n2.patchFlag === -2 /* PatchFlags.BAIL */) {\n            optimized = false;\n            n2.dynamicChildren = null;\n        }\n        const { type, ref, shapeFlag } = n2;\n        switch (type) {\n            case Text:\n                processText(n1, n2, container, anchor);\n                break;\n            case Comment:\n                processCommentNode(n1, n2, container, anchor);\n                break;\n            case Static:\n                if (n1 == null) {\n                    mountStaticNode(n2, container, anchor, isSVG);\n                }\n                else {\n                    patchStaticNode(n1, n2, container, isSVG);\n                }\n                break;\n            case Fragment:\n                processFragment(n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\n                break;\n            default:\n                if (shapeFlag & 1 /* ShapeFlags.ELEMENT */) {\n                    processElement(n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\n                }\n                else if (shapeFlag & 6 /* ShapeFlags.COMPONENT */) {\n                    processComponent(n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\n                }\n                else if (shapeFlag & 64 /* ShapeFlags.TELEPORT */) {\n                    type.process(n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized, internals);\n                }\n                else if (shapeFlag & 128 /* ShapeFlags.SUSPENSE */) {\n                    type.process(n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized, internals);\n                }\n                else {\n                    warn('Invalid VNode type:', type, `(${typeof type})`);\n                }\n        }\n        // set ref\n        if (ref != null && parentComponent) {\n            setRef(ref, n1 && n1.ref, parentSuspense, n2 || n1, !n2);\n        }\n    };\n    const processText = (n1, n2, container, anchor) => {\n        if (n1 == null) {\n            hostInsert((n2.el = hostCreateText(n2.children)), container, anchor);\n        }\n        else {\n            const el = (n2.el = n1.el);\n            if (n2.children !== n1.children) {\n                hostSetText(el, n2.children);\n            }\n        }\n    };\n    const processCommentNode = (n1, n2, container, anchor) => {\n        if (n1 == null) {\n            hostInsert((n2.el = hostCreateComment(n2.children || '')), container, anchor);\n        }\n        else {\n            // there's no support for dynamic comments\n            n2.el = n1.el;\n        }\n    };\n    const mountStaticNode = (n2, container, anchor, isSVG) => {\n        [n2.el, n2.anchor] = hostInsertStaticContent(n2.children, container, anchor, isSVG, n2.el, n2.anchor);\n    };\n    /**\n     * Dev / HMR only\n     */\n    const patchStaticNode = (n1, n2, container, isSVG) => {\n        // static nodes are only patched during dev for HMR\n        if (n2.children !== n1.children) {\n            const anchor = hostNextSibling(n1.anchor);\n            // remove existing\n            removeStaticNode(n1);\n            [n2.el, n2.anchor] = hostInsertStaticContent(n2.children, container, anchor, isSVG);\n        }\n        else {\n            n2.el = n1.el;\n            n2.anchor = n1.anchor;\n        }\n    };\n    const moveStaticNode = ({ el, anchor }, container, nextSibling) => {\n        let next;\n        while (el && el !== anchor) {\n            next = hostNextSibling(el);\n            hostInsert(el, container, nextSibling);\n            el = next;\n        }\n        hostInsert(anchor, container, nextSibling);\n    };\n    const removeStaticNode = ({ el, anchor }) => {\n        let next;\n        while (el && el !== anchor) {\n            next = hostNextSibling(el);\n            hostRemove(el);\n            el = next;\n        }\n        hostRemove(anchor);\n    };\n    const processElement = (n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized) => {\n        isSVG = isSVG || n2.type === 'svg';\n        if (n1 == null) {\n            mountElement(n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\n        }\n        else {\n            patchElement(n1, n2, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\n        }\n    };\n    const mountElement = (vnode, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized) => {\n        let el;\n        let vnodeHook;\n        const { type, props, shapeFlag, transition, dirs } = vnode;\n        el = vnode.el = hostCreateElement(vnode.type, isSVG, props && props.is, props);\n        // mount children first, since some props may rely on child content\n        // being already rendered, e.g. `<select value>`\n        if (shapeFlag & 8 /* ShapeFlags.TEXT_CHILDREN */) {\n            hostSetElementText(el, vnode.children);\n        }\n        else if (shapeFlag & 16 /* ShapeFlags.ARRAY_CHILDREN */) {\n            mountChildren(vnode.children, el, null, parentComponent, parentSuspense, isSVG && type !== 'foreignObject', slotScopeIds, optimized);\n        }\n        if (dirs) {\n            invokeDirectiveHook(vnode, null, parentComponent, 'created');\n        }\n        // scopeId\n        setScopeId(el, vnode, vnode.scopeId, slotScopeIds, parentComponent);\n        // props\n        if (props) {\n            for (const key in props) {\n                if (key !== 'value' && !isReservedProp(key)) {\n                    hostPatchProp(el, key, null, props[key], isSVG, vnode.children, parentComponent, parentSuspense, unmountChildren);\n                }\n            }\n            /**\n             * Special case for setting value on DOM elements:\n             * - it can be order-sensitive (e.g. should be set *after* min/max, #2325, #4024)\n             * - it needs to be forced (#1471)\n             * #2353 proposes adding another renderer option to configure this, but\n             * the properties affects are so finite it is worth special casing it\n             * here to reduce the complexity. (Special casing it also should not\n             * affect non-DOM renderers)\n             */\n            if ('value' in props) {\n                hostPatchProp(el, 'value', null, props.value);\n            }\n            if ((vnodeHook = props.onVnodeBeforeMount)) {\n                invokeVNodeHook(vnodeHook, parentComponent, vnode);\n            }\n        }\n        {\n            Object.defineProperty(el, '__vnode', {\n                value: vnode,\n                enumerable: false\n            });\n            Object.defineProperty(el, '__vueParentComponent', {\n                value: parentComponent,\n                enumerable: false\n            });\n        }\n        if (dirs) {\n            invokeDirectiveHook(vnode, null, parentComponent, 'beforeMount');\n        }\n        // #1583 For inside suspense + suspense not resolved case, enter hook should call when suspense resolved\n        // #1689 For inside suspense + suspense resolved case, just call it\n        const needCallTransitionHooks = (!parentSuspense || (parentSuspense && !parentSuspense.pendingBranch)) &&\n            transition &&\n            !transition.persisted;\n        if (needCallTransitionHooks) {\n            transition.beforeEnter(el);\n        }\n        hostInsert(el, container, anchor);\n        if ((vnodeHook = props && props.onVnodeMounted) ||\n            needCallTransitionHooks ||\n            dirs) {\n            queuePostRenderEffect(() => {\n                vnodeHook && invokeVNodeHook(vnodeHook, parentComponent, vnode);\n                needCallTransitionHooks && transition.enter(el);\n                dirs && invokeDirectiveHook(vnode, null, parentComponent, 'mounted');\n            }, parentSuspense);\n        }\n    };\n    const setScopeId = (el, vnode, scopeId, slotScopeIds, parentComponent) => {\n        if (scopeId) {\n            hostSetScopeId(el, scopeId);\n        }\n        if (slotScopeIds) {\n            for (let i = 0; i < slotScopeIds.length; i++) {\n                hostSetScopeId(el, slotScopeIds[i]);\n            }\n        }\n        if (parentComponent) {\n            let subTree = parentComponent.subTree;\n            if (subTree.patchFlag > 0 &&\n                subTree.patchFlag & 2048 /* PatchFlags.DEV_ROOT_FRAGMENT */) {\n                subTree =\n                    filterSingleRoot(subTree.children) || subTree;\n            }\n            if (vnode === subTree) {\n                const parentVNode = parentComponent.vnode;\n                setScopeId(el, parentVNode, parentVNode.scopeId, parentVNode.slotScopeIds, parentComponent.parent);\n            }\n        }\n    };\n    const mountChildren = (children, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized, start = 0) => {\n        for (let i = start; i < children.length; i++) {\n            const child = (children[i] = optimized\n                ? cloneIfMounted(children[i])\n                : normalizeVNode(children[i]));\n            patch(null, child, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\n        }\n    };\n    const patchElement = (n1, n2, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized) => {\n        const el = (n2.el = n1.el);\n        let { patchFlag, dynamicChildren, dirs } = n2;\n        // #1426 take the old vnode's patch flag into account since user may clone a\n        // compiler-generated vnode, which de-opts to FULL_PROPS\n        patchFlag |= n1.patchFlag & 16 /* PatchFlags.FULL_PROPS */;\n        const oldProps = n1.props || EMPTY_OBJ;\n        const newProps = n2.props || EMPTY_OBJ;\n        let vnodeHook;\n        // disable recurse in beforeUpdate hooks\n        parentComponent && toggleRecurse(parentComponent, false);\n        if ((vnodeHook = newProps.onVnodeBeforeUpdate)) {\n            invokeVNodeHook(vnodeHook, parentComponent, n2, n1);\n        }\n        if (dirs) {\n            invokeDirectiveHook(n2, n1, parentComponent, 'beforeUpdate');\n        }\n        parentComponent && toggleRecurse(parentComponent, true);\n        if (isHmrUpdating) {\n            // HMR updated, force full diff\n            patchFlag = 0;\n            optimized = false;\n            dynamicChildren = null;\n        }\n        const areChildrenSVG = isSVG && n2.type !== 'foreignObject';\n        if (dynamicChildren) {\n            patchBlockChildren(n1.dynamicChildren, dynamicChildren, el, parentComponent, parentSuspense, areChildrenSVG, slotScopeIds);\n            if (parentComponent && parentComponent.type.__hmrId) {\n                traverseStaticChildren(n1, n2);\n            }\n        }\n        else if (!optimized) {\n            // full diff\n            patchChildren(n1, n2, el, null, parentComponent, parentSuspense, areChildrenSVG, slotScopeIds, false);\n        }\n        if (patchFlag > 0) {\n            // the presence of a patchFlag means this element's render code was\n            // generated by the compiler and can take the fast path.\n            // in this path old node and new node are guaranteed to have the same shape\n            // (i.e. at the exact same position in the source template)\n            if (patchFlag & 16 /* PatchFlags.FULL_PROPS */) {\n                // element props contain dynamic keys, full diff needed\n                patchProps(el, n2, oldProps, newProps, parentComponent, parentSuspense, isSVG);\n            }\n            else {\n                // class\n                // this flag is matched when the element has dynamic class bindings.\n                if (patchFlag & 2 /* PatchFlags.CLASS */) {\n                    if (oldProps.class !== newProps.class) {\n                        hostPatchProp(el, 'class', null, newProps.class, isSVG);\n                    }\n                }\n                // style\n                // this flag is matched when the element has dynamic style bindings\n                if (patchFlag & 4 /* PatchFlags.STYLE */) {\n                    hostPatchProp(el, 'style', oldProps.style, newProps.style, isSVG);\n                }\n                // props\n                // This flag is matched when the element has dynamic prop/attr bindings\n                // other than class and style. The keys of dynamic prop/attrs are saved for\n                // faster iteration.\n                // Note dynamic keys like :[foo]=\"bar\" will cause this optimization to\n                // bail out and go through a full diff because we need to unset the old key\n                if (patchFlag & 8 /* PatchFlags.PROPS */) {\n                    // if the flag is present then dynamicProps must be non-null\n                    const propsToUpdate = n2.dynamicProps;\n                    for (let i = 0; i < propsToUpdate.length; i++) {\n                        const key = propsToUpdate[i];\n                        const prev = oldProps[key];\n                        const next = newProps[key];\n                        // #1471 force patch value\n                        if (next !== prev || key === 'value') {\n                            hostPatchProp(el, key, prev, next, isSVG, n1.children, parentComponent, parentSuspense, unmountChildren);\n                        }\n                    }\n                }\n            }\n            // text\n            // This flag is matched when the element has only dynamic text children.\n            if (patchFlag & 1 /* PatchFlags.TEXT */) {\n                if (n1.children !== n2.children) {\n                    hostSetElementText(el, n2.children);\n                }\n            }\n        }\n        else if (!optimized && dynamicChildren == null) {\n            // unoptimized, full diff\n            patchProps(el, n2, oldProps, newProps, parentComponent, parentSuspense, isSVG);\n        }\n        if ((vnodeHook = newProps.onVnodeUpdated) || dirs) {\n            queuePostRenderEffect(() => {\n                vnodeHook && invokeVNodeHook(vnodeHook, parentComponent, n2, n1);\n                dirs && invokeDirectiveHook(n2, n1, parentComponent, 'updated');\n            }, parentSuspense);\n        }\n    };\n    // The fast path for blocks.\n    const patchBlockChildren = (oldChildren, newChildren, fallbackContainer, parentComponent, parentSuspense, isSVG, slotScopeIds) => {\n        for (let i = 0; i < newChildren.length; i++) {\n            const oldVNode = oldChildren[i];\n            const newVNode = newChildren[i];\n            // Determine the container (parent element) for the patch.\n            const container = \n            // oldVNode may be an errored async setup() component inside Suspense\n            // which will not have a mounted element\n            oldVNode.el &&\n                // - In the case of a Fragment, we need to provide the actual parent\n                // of the Fragment itself so it can move its children.\n                (oldVNode.type === Fragment ||\n                    // - In the case of different nodes, there is going to be a replacement\n                    // which also requires the correct parent container\n                    !isSameVNodeType(oldVNode, newVNode) ||\n                    // - In the case of a component, it could contain anything.\n                    oldVNode.shapeFlag & (6 /* ShapeFlags.COMPONENT */ | 64 /* ShapeFlags.TELEPORT */))\n                ? hostParentNode(oldVNode.el)\n                : // In other cases, the parent container is not actually used so we\n                    // just pass the block element here to avoid a DOM parentNode call.\n                    fallbackContainer;\n            patch(oldVNode, newVNode, container, null, parentComponent, parentSuspense, isSVG, slotScopeIds, true);\n        }\n    };\n    const patchProps = (el, vnode, oldProps, newProps, parentComponent, parentSuspense, isSVG) => {\n        if (oldProps !== newProps) {\n            if (oldProps !== EMPTY_OBJ) {\n                for (const key in oldProps) {\n                    if (!isReservedProp(key) && !(key in newProps)) {\n                        hostPatchProp(el, key, oldProps[key], null, isSVG, vnode.children, parentComponent, parentSuspense, unmountChildren);\n                    }\n                }\n            }\n            for (const key in newProps) {\n                // empty string is not valid prop\n                if (isReservedProp(key))\n                    continue;\n                const next = newProps[key];\n                const prev = oldProps[key];\n                // defer patching value\n                if (next !== prev && key !== 'value') {\n                    hostPatchProp(el, key, prev, next, isSVG, vnode.children, parentComponent, parentSuspense, unmountChildren);\n                }\n            }\n            if ('value' in newProps) {\n                hostPatchProp(el, 'value', oldProps.value, newProps.value);\n            }\n        }\n    };\n    const processFragment = (n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized) => {\n        const fragmentStartAnchor = (n2.el = n1 ? n1.el : hostCreateText(''));\n        const fragmentEndAnchor = (n2.anchor = n1 ? n1.anchor : hostCreateText(''));\n        let { patchFlag, dynamicChildren, slotScopeIds: fragmentSlotScopeIds } = n2;\n        if (// #5523 dev root fragment may inherit directives\n            (isHmrUpdating || patchFlag & 2048 /* PatchFlags.DEV_ROOT_FRAGMENT */)) {\n            // HMR updated / Dev root fragment (w/ comments), force full diff\n            patchFlag = 0;\n            optimized = false;\n            dynamicChildren = null;\n        }\n        // check if this is a slot fragment with :slotted scope ids\n        if (fragmentSlotScopeIds) {\n            slotScopeIds = slotScopeIds\n                ? slotScopeIds.concat(fragmentSlotScopeIds)\n                : fragmentSlotScopeIds;\n        }\n        if (n1 == null) {\n            hostInsert(fragmentStartAnchor, container, anchor);\n            hostInsert(fragmentEndAnchor, container, anchor);\n            // a fragment can only have array children\n            // since they are either generated by the compiler, or implicitly created\n            // from arrays.\n            mountChildren(n2.children, container, fragmentEndAnchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\n        }\n        else {\n            if (patchFlag > 0 &&\n                patchFlag & 64 /* PatchFlags.STABLE_FRAGMENT */ &&\n                dynamicChildren &&\n                // #2715 the previous fragment could've been a BAILed one as a result\n                // of renderSlot() with no valid children\n                n1.dynamicChildren) {\n                // a stable fragment (template root or <template v-for>) doesn't need to\n                // patch children order, but it may contain dynamicChildren.\n                patchBlockChildren(n1.dynamicChildren, dynamicChildren, container, parentComponent, parentSuspense, isSVG, slotScopeIds);\n                if (parentComponent && parentComponent.type.__hmrId) {\n                    traverseStaticChildren(n1, n2);\n                }\n                else if (\n                // #2080 if the stable fragment has a key, it's a <template v-for> that may\n                //  get moved around. Make sure all root level vnodes inherit el.\n                // #2134 or if it's a component root, it may also get moved around\n                // as the component is being moved.\n                n2.key != null ||\n                    (parentComponent && n2 === parentComponent.subTree)) {\n                    traverseStaticChildren(n1, n2, true /* shallow */);\n                }\n            }\n            else {\n                // keyed / unkeyed, or manual fragments.\n                // for keyed & unkeyed, since they are compiler generated from v-for,\n                // each child is guaranteed to be a block so the fragment will never\n                // have dynamicChildren.\n                patchChildren(n1, n2, container, fragmentEndAnchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\n            }\n        }\n    };\n    const processComponent = (n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized) => {\n        n2.slotScopeIds = slotScopeIds;\n        if (n1 == null) {\n            if (n2.shapeFlag & 512 /* ShapeFlags.COMPONENT_KEPT_ALIVE */) {\n                parentComponent.ctx.activate(n2, container, anchor, isSVG, optimized);\n            }\n            else {\n                mountComponent(n2, container, anchor, parentComponent, parentSuspense, isSVG, optimized);\n            }\n        }\n        else {\n            updateComponent(n1, n2, optimized);\n        }\n    };\n    const mountComponent = (initialVNode, container, anchor, parentComponent, parentSuspense, isSVG, optimized) => {\n        const instance = (initialVNode.component = createComponentInstance(initialVNode, parentComponent, parentSuspense));\n        if (instance.type.__hmrId) {\n            registerHMR(instance);\n        }\n        {\n            pushWarningContext(initialVNode);\n            startMeasure(instance, `mount`);\n        }\n        // inject renderer internals for keepAlive\n        if (isKeepAlive(initialVNode)) {\n            instance.ctx.renderer = internals;\n        }\n        // resolve props and slots for setup context\n        {\n            {\n                startMeasure(instance, `init`);\n            }\n            setupComponent(instance);\n            {\n                endMeasure(instance, `init`);\n            }\n        }\n        // setup() is async. This component relies on async logic to be resolved\n        // before proceeding\n        if (instance.asyncDep) {\n            parentSuspense && parentSuspense.registerDep(instance, setupRenderEffect);\n            // Give it a placeholder if this is not hydration\n            // TODO handle self-defined fallback\n            if (!initialVNode.el) {\n                const placeholder = (instance.subTree = createVNode(Comment));\n                processCommentNode(null, placeholder, container, anchor);\n            }\n            return;\n        }\n        setupRenderEffect(instance, initialVNode, container, anchor, parentSuspense, isSVG, optimized);\n        {\n            popWarningContext();\n            endMeasure(instance, `mount`);\n        }\n    };\n    const updateComponent = (n1, n2, optimized) => {\n        const instance = (n2.component = n1.component);\n        if (shouldUpdateComponent(n1, n2, optimized)) {\n            if (instance.asyncDep &&\n                !instance.asyncResolved) {\n                // async & still pending - just update props and slots\n                // since the component's reactive effect for render isn't set-up yet\n                {\n                    pushWarningContext(n2);\n                }\n                updateComponentPreRender(instance, n2, optimized);\n                {\n                    popWarningContext();\n                }\n                return;\n            }\n            else {\n                // normal update\n                instance.next = n2;\n                // in case the child component is also queued, remove it to avoid\n                // double updating the same child component in the same flush.\n                invalidateJob(instance.update);\n                // instance.update is the reactive effect.\n                instance.update();\n            }\n        }\n        else {\n            // no update needed. just copy over properties\n            n2.el = n1.el;\n            instance.vnode = n2;\n        }\n    };\n    const setupRenderEffect = (instance, initialVNode, container, anchor, parentSuspense, isSVG, optimized) => {\n        const componentUpdateFn = () => {\n            if (!instance.isMounted) {\n                let vnodeHook;\n                const { el, props } = initialVNode;\n                const { bm, m, parent } = instance;\n                const isAsyncWrapperVNode = isAsyncWrapper(initialVNode);\n                toggleRecurse(instance, false);\n                // beforeMount hook\n                if (bm) {\n                    invokeArrayFns(bm);\n                }\n                // onVnodeBeforeMount\n                if (!isAsyncWrapperVNode &&\n                    (vnodeHook = props && props.onVnodeBeforeMount)) {\n                    invokeVNodeHook(vnodeHook, parent, initialVNode);\n                }\n                toggleRecurse(instance, true);\n                if (el && hydrateNode) {\n                    // vnode has adopted host node - perform hydration instead of mount.\n                    const hydrateSubTree = () => {\n                        {\n                            startMeasure(instance, `render`);\n                        }\n                        instance.subTree = renderComponentRoot(instance);\n                        {\n                            endMeasure(instance, `render`);\n                        }\n                        {\n                            startMeasure(instance, `hydrate`);\n                        }\n                        hydrateNode(el, instance.subTree, instance, parentSuspense, null);\n                        {\n                            endMeasure(instance, `hydrate`);\n                        }\n                    };\n                    if (isAsyncWrapperVNode) {\n                        initialVNode.type.__asyncLoader().then(\n                        // note: we are moving the render call into an async callback,\n                        // which means it won't track dependencies - but it's ok because\n                        // a server-rendered async wrapper is already in resolved state\n                        // and it will never need to change.\n                        () => !instance.isUnmounted && hydrateSubTree());\n                    }\n                    else {\n                        hydrateSubTree();\n                    }\n                }\n                else {\n                    {\n                        startMeasure(instance, `render`);\n                    }\n                    const subTree = (instance.subTree = renderComponentRoot(instance));\n                    {\n                        endMeasure(instance, `render`);\n                    }\n                    {\n                        startMeasure(instance, `patch`);\n                    }\n                    patch(null, subTree, container, anchor, instance, parentSuspense, isSVG);\n                    {\n                        endMeasure(instance, `patch`);\n                    }\n                    initialVNode.el = subTree.el;\n                }\n                // mounted hook\n                if (m) {\n                    queuePostRenderEffect(m, parentSuspense);\n                }\n                // onVnodeMounted\n                if (!isAsyncWrapperVNode &&\n                    (vnodeHook = props && props.onVnodeMounted)) {\n                    const scopedInitialVNode = initialVNode;\n                    queuePostRenderEffect(() => invokeVNodeHook(vnodeHook, parent, scopedInitialVNode), parentSuspense);\n                }\n                // activated hook for keep-alive roots.\n                // #1742 activated hook must be accessed after first render\n                // since the hook may be injected by a child keep-alive\n                if (initialVNode.shapeFlag & 256 /* ShapeFlags.COMPONENT_SHOULD_KEEP_ALIVE */ ||\n                    (parent &&\n                        isAsyncWrapper(parent.vnode) &&\n                        parent.vnode.shapeFlag & 256 /* ShapeFlags.COMPONENT_SHOULD_KEEP_ALIVE */)) {\n                    instance.a && queuePostRenderEffect(instance.a, parentSuspense);\n                }\n                instance.isMounted = true;\n                {\n                    devtoolsComponentAdded(instance);\n                }\n                // #2458: deference mount-only object parameters to prevent memleaks\n                initialVNode = container = anchor = null;\n            }\n            else {\n                // updateComponent\n                // This is triggered by mutation of component's own state (next: null)\n                // OR parent calling processComponent (next: VNode)\n                let { next, bu, u, parent, vnode } = instance;\n                let originNext = next;\n                let vnodeHook;\n                {\n                    pushWarningContext(next || instance.vnode);\n                }\n                // Disallow component effect recursion during pre-lifecycle hooks.\n                toggleRecurse(instance, false);\n                if (next) {\n                    next.el = vnode.el;\n                    updateComponentPreRender(instance, next, optimized);\n                }\n                else {\n                    next = vnode;\n                }\n                // beforeUpdate hook\n                if (bu) {\n                    invokeArrayFns(bu);\n                }\n                // onVnodeBeforeUpdate\n                if ((vnodeHook = next.props && next.props.onVnodeBeforeUpdate)) {\n                    invokeVNodeHook(vnodeHook, parent, next, vnode);\n                }\n                toggleRecurse(instance, true);\n                // render\n                {\n                    startMeasure(instance, `render`);\n                }\n                const nextTree = renderComponentRoot(instance);\n                {\n                    endMeasure(instance, `render`);\n                }\n                const prevTree = instance.subTree;\n                instance.subTree = nextTree;\n                {\n                    startMeasure(instance, `patch`);\n                }\n                patch(prevTree, nextTree, \n                // parent may have changed if it's in a teleport\n                hostParentNode(prevTree.el), \n                // anchor may have changed if it's in a fragment\n                getNextHostNode(prevTree), instance, parentSuspense, isSVG);\n                {\n                    endMeasure(instance, `patch`);\n                }\n                next.el = nextTree.el;\n                if (originNext === null) {\n                    // self-triggered update. In case of HOC, update parent component\n                    // vnode el. HOC is indicated by parent instance's subTree pointing\n                    // to child component's vnode\n                    updateHOCHostEl(instance, nextTree.el);\n                }\n                // updated hook\n                if (u) {\n                    queuePostRenderEffect(u, parentSuspense);\n                }\n                // onVnodeUpdated\n                if ((vnodeHook = next.props && next.props.onVnodeUpdated)) {\n                    queuePostRenderEffect(() => invokeVNodeHook(vnodeHook, parent, next, vnode), parentSuspense);\n                }\n                {\n                    devtoolsComponentUpdated(instance);\n                }\n                {\n                    popWarningContext();\n                }\n            }\n        };\n        // create reactive effect for rendering\n        const effect = (instance.effect = new ReactiveEffect(componentUpdateFn, () => queueJob(update), instance.scope // track it in component's effect scope\n        ));\n        const update = (instance.update = () => effect.run());\n        update.id = instance.uid;\n        // allowRecurse\n        // #1801, #2043 component render effects should allow recursive updates\n        toggleRecurse(instance, true);\n        {\n            effect.onTrack = instance.rtc\n                ? e => invokeArrayFns(instance.rtc, e)\n                : void 0;\n            effect.onTrigger = instance.rtg\n                ? e => invokeArrayFns(instance.rtg, e)\n                : void 0;\n            update.ownerInstance = instance;\n        }\n        update();\n    };\n    const updateComponentPreRender = (instance, nextVNode, optimized) => {\n        nextVNode.component = instance;\n        const prevProps = instance.vnode.props;\n        instance.vnode = nextVNode;\n        instance.next = null;\n        updateProps(instance, nextVNode.props, prevProps, optimized);\n        updateSlots(instance, nextVNode.children, optimized);\n        pauseTracking();\n        // props update may have triggered pre-flush watchers.\n        // flush them before the render update.\n        flushPreFlushCbs();\n        resetTracking();\n    };\n    const patchChildren = (n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized = false) => {\n        const c1 = n1 && n1.children;\n        const prevShapeFlag = n1 ? n1.shapeFlag : 0;\n        const c2 = n2.children;\n        const { patchFlag, shapeFlag } = n2;\n        // fast path\n        if (patchFlag > 0) {\n            if (patchFlag & 128 /* PatchFlags.KEYED_FRAGMENT */) {\n                // this could be either fully-keyed or mixed (some keyed some not)\n                // presence of patchFlag means children are guaranteed to be arrays\n                patchKeyedChildren(c1, c2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\n                return;\n            }\n            else if (patchFlag & 256 /* PatchFlags.UNKEYED_FRAGMENT */) {\n                // unkeyed\n                patchUnkeyedChildren(c1, c2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\n                return;\n            }\n        }\n        // children has 3 possibilities: text, array or no children.\n        if (shapeFlag & 8 /* ShapeFlags.TEXT_CHILDREN */) {\n            // text children fast path\n            if (prevShapeFlag & 16 /* ShapeFlags.ARRAY_CHILDREN */) {\n                unmountChildren(c1, parentComponent, parentSuspense);\n            }\n            if (c2 !== c1) {\n                hostSetElementText(container, c2);\n            }\n        }\n        else {\n            if (prevShapeFlag & 16 /* ShapeFlags.ARRAY_CHILDREN */) {\n                // prev children was array\n                if (shapeFlag & 16 /* ShapeFlags.ARRAY_CHILDREN */) {\n                    // two arrays, cannot assume anything, do full diff\n                    patchKeyedChildren(c1, c2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\n                }\n                else {\n                    // no new children, just unmount old\n                    unmountChildren(c1, parentComponent, parentSuspense, true);\n                }\n            }\n            else {\n                // prev children was text OR null\n                // new children is array OR null\n                if (prevShapeFlag & 8 /* ShapeFlags.TEXT_CHILDREN */) {\n                    hostSetElementText(container, '');\n                }\n                // mount new if array\n                if (shapeFlag & 16 /* ShapeFlags.ARRAY_CHILDREN */) {\n                    mountChildren(c2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\n                }\n            }\n        }\n    };\n    const patchUnkeyedChildren = (c1, c2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized) => {\n        c1 = c1 || EMPTY_ARR;\n        c2 = c2 || EMPTY_ARR;\n        const oldLength = c1.length;\n        const newLength = c2.length;\n        const commonLength = Math.min(oldLength, newLength);\n        let i;\n        for (i = 0; i < commonLength; i++) {\n            const nextChild = (c2[i] = optimized\n                ? cloneIfMounted(c2[i])\n                : normalizeVNode(c2[i]));\n            patch(c1[i], nextChild, container, null, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\n        }\n        if (oldLength > newLength) {\n            // remove old\n            unmountChildren(c1, parentComponent, parentSuspense, true, false, commonLength);\n        }\n        else {\n            // mount new\n            mountChildren(c2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized, commonLength);\n        }\n    };\n    // can be all-keyed or mixed\n    const patchKeyedChildren = (c1, c2, container, parentAnchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized) => {\n        let i = 0;\n        const l2 = c2.length;\n        let e1 = c1.length - 1; // prev ending index\n        let e2 = l2 - 1; // next ending index\n        // 1. sync from start\n        // (a b) c\n        // (a b) d e\n        while (i <= e1 && i <= e2) {\n            const n1 = c1[i];\n            const n2 = (c2[i] = optimized\n                ? cloneIfMounted(c2[i])\n                : normalizeVNode(c2[i]));\n            if (isSameVNodeType(n1, n2)) {\n                patch(n1, n2, container, null, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\n            }\n            else {\n                break;\n            }\n            i++;\n        }\n        // 2. sync from end\n        // a (b c)\n        // d e (b c)\n        while (i <= e1 && i <= e2) {\n            const n1 = c1[e1];\n            const n2 = (c2[e2] = optimized\n                ? cloneIfMounted(c2[e2])\n                : normalizeVNode(c2[e2]));\n            if (isSameVNodeType(n1, n2)) {\n                patch(n1, n2, container, null, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\n            }\n            else {\n                break;\n            }\n            e1--;\n            e2--;\n        }\n        // 3. common sequence + mount\n        // (a b)\n        // (a b) c\n        // i = 2, e1 = 1, e2 = 2\n        // (a b)\n        // c (a b)\n        // i = 0, e1 = -1, e2 = 0\n        if (i > e1) {\n            if (i <= e2) {\n                const nextPos = e2 + 1;\n                const anchor = nextPos < l2 ? c2[nextPos].el : parentAnchor;\n                while (i <= e2) {\n                    patch(null, (c2[i] = optimized\n                        ? cloneIfMounted(c2[i])\n                        : normalizeVNode(c2[i])), container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\n                    i++;\n                }\n            }\n        }\n        // 4. common sequence + unmount\n        // (a b) c\n        // (a b)\n        // i = 2, e1 = 2, e2 = 1\n        // a (b c)\n        // (b c)\n        // i = 0, e1 = 0, e2 = -1\n        else if (i > e2) {\n            while (i <= e1) {\n                unmount(c1[i], parentComponent, parentSuspense, true);\n                i++;\n            }\n        }\n        // 5. unknown sequence\n        // [i ... e1 + 1]: a b [c d e] f g\n        // [i ... e2 + 1]: a b [e d c h] f g\n        // i = 2, e1 = 4, e2 = 5\n        else {\n            const s1 = i; // prev starting index\n            const s2 = i; // next starting index\n            // 5.1 build key:index map for newChildren\n            const keyToNewIndexMap = new Map();\n            for (i = s2; i <= e2; i++) {\n                const nextChild = (c2[i] = optimized\n                    ? cloneIfMounted(c2[i])\n                    : normalizeVNode(c2[i]));\n                if (nextChild.key != null) {\n                    if (keyToNewIndexMap.has(nextChild.key)) {\n                        warn(`Duplicate keys found during update:`, JSON.stringify(nextChild.key), `Make sure keys are unique.`);\n                    }\n                    keyToNewIndexMap.set(nextChild.key, i);\n                }\n            }\n            // 5.2 loop through old children left to be patched and try to patch\n            // matching nodes & remove nodes that are no longer present\n            let j;\n            let patched = 0;\n            const toBePatched = e2 - s2 + 1;\n            let moved = false;\n            // used to track whether any node has moved\n            let maxNewIndexSoFar = 0;\n            // works as Map<newIndex, oldIndex>\n            // Note that oldIndex is offset by +1\n            // and oldIndex = 0 is a special value indicating the new node has\n            // no corresponding old node.\n            // used for determining longest stable subsequence\n            const newIndexToOldIndexMap = new Array(toBePatched);\n            for (i = 0; i < toBePatched; i++)\n                newIndexToOldIndexMap[i] = 0;\n            for (i = s1; i <= e1; i++) {\n                const prevChild = c1[i];\n                if (patched >= toBePatched) {\n                    // all new children have been patched so this can only be a removal\n                    unmount(prevChild, parentComponent, parentSuspense, true);\n                    continue;\n                }\n                let newIndex;\n                if (prevChild.key != null) {\n                    newIndex = keyToNewIndexMap.get(prevChild.key);\n                }\n                else {\n                    // key-less node, try to locate a key-less node of the same type\n                    for (j = s2; j <= e2; j++) {\n                        if (newIndexToOldIndexMap[j - s2] === 0 &&\n                            isSameVNodeType(prevChild, c2[j])) {\n                            newIndex = j;\n                            break;\n                        }\n                    }\n                }\n                if (newIndex === undefined) {\n                    unmount(prevChild, parentComponent, parentSuspense, true);\n                }\n                else {\n                    newIndexToOldIndexMap[newIndex - s2] = i + 1;\n                    if (newIndex >= maxNewIndexSoFar) {\n                        maxNewIndexSoFar = newIndex;\n                    }\n                    else {\n                        moved = true;\n                    }\n                    patch(prevChild, c2[newIndex], container, null, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\n                    patched++;\n                }\n            }\n            // 5.3 move and mount\n            // generate longest stable subsequence only when nodes have moved\n            const increasingNewIndexSequence = moved\n                ? getSequence(newIndexToOldIndexMap)\n                : EMPTY_ARR;\n            j = increasingNewIndexSequence.length - 1;\n            // looping backwards so that we can use last patched node as anchor\n            for (i = toBePatched - 1; i >= 0; i--) {\n                const nextIndex = s2 + i;\n                const nextChild = c2[nextIndex];\n                const anchor = nextIndex + 1 < l2 ? c2[nextIndex + 1].el : parentAnchor;\n                if (newIndexToOldIndexMap[i] === 0) {\n                    // mount new\n                    patch(null, nextChild, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\n                }\n                else if (moved) {\n                    // move if:\n                    // There is no stable subsequence (e.g. a reverse)\n                    // OR current node is not among the stable sequence\n                    if (j < 0 || i !== increasingNewIndexSequence[j]) {\n                        move(nextChild, container, anchor, 2 /* MoveType.REORDER */);\n                    }\n                    else {\n                        j--;\n                    }\n                }\n            }\n        }\n    };\n    const move = (vnode, container, anchor, moveType, parentSuspense = null) => {\n        const { el, type, transition, children, shapeFlag } = vnode;\n        if (shapeFlag & 6 /* ShapeFlags.COMPONENT */) {\n            move(vnode.component.subTree, container, anchor, moveType);\n            return;\n        }\n        if (shapeFlag & 128 /* ShapeFlags.SUSPENSE */) {\n            vnode.suspense.move(container, anchor, moveType);\n            return;\n        }\n        if (shapeFlag & 64 /* ShapeFlags.TELEPORT */) {\n            type.move(vnode, container, anchor, internals);\n            return;\n        }\n        if (type === Fragment) {\n            hostInsert(el, container, anchor);\n            for (let i = 0; i < children.length; i++) {\n                move(children[i], container, anchor, moveType);\n            }\n            hostInsert(vnode.anchor, container, anchor);\n            return;\n        }\n        if (type === Static) {\n            moveStaticNode(vnode, container, anchor);\n            return;\n        }\n        // single nodes\n        const needTransition = moveType !== 2 /* MoveType.REORDER */ &&\n            shapeFlag & 1 /* ShapeFlags.ELEMENT */ &&\n            transition;\n        if (needTransition) {\n            if (moveType === 0 /* MoveType.ENTER */) {\n                transition.beforeEnter(el);\n                hostInsert(el, container, anchor);\n                queuePostRenderEffect(() => transition.enter(el), parentSuspense);\n            }\n            else {\n                const { leave, delayLeave, afterLeave } = transition;\n                const remove = () => hostInsert(el, container, anchor);\n                const performLeave = () => {\n                    leave(el, () => {\n                        remove();\n                        afterLeave && afterLeave();\n                    });\n                };\n                if (delayLeave) {\n                    delayLeave(el, remove, performLeave);\n                }\n                else {\n                    performLeave();\n                }\n            }\n        }\n        else {\n            hostInsert(el, container, anchor);\n        }\n    };\n    const unmount = (vnode, parentComponent, parentSuspense, doRemove = false, optimized = false) => {\n        const { type, props, ref, children, dynamicChildren, shapeFlag, patchFlag, dirs } = vnode;\n        // unset ref\n        if (ref != null) {\n            setRef(ref, null, parentSuspense, vnode, true);\n        }\n        if (shapeFlag & 256 /* ShapeFlags.COMPONENT_SHOULD_KEEP_ALIVE */) {\n            parentComponent.ctx.deactivate(vnode);\n            return;\n        }\n        const shouldInvokeDirs = shapeFlag & 1 /* ShapeFlags.ELEMENT */ && dirs;\n        const shouldInvokeVnodeHook = !isAsyncWrapper(vnode);\n        let vnodeHook;\n        if (shouldInvokeVnodeHook &&\n            (vnodeHook = props && props.onVnodeBeforeUnmount)) {\n            invokeVNodeHook(vnodeHook, parentComponent, vnode);\n        }\n        if (shapeFlag & 6 /* ShapeFlags.COMPONENT */) {\n            unmountComponent(vnode.component, parentSuspense, doRemove);\n        }\n        else {\n            if (shapeFlag & 128 /* ShapeFlags.SUSPENSE */) {\n                vnode.suspense.unmount(parentSuspense, doRemove);\n                return;\n            }\n            if (shouldInvokeDirs) {\n                invokeDirectiveHook(vnode, null, parentComponent, 'beforeUnmount');\n            }\n            if (shapeFlag & 64 /* ShapeFlags.TELEPORT */) {\n                vnode.type.remove(vnode, parentComponent, parentSuspense, optimized, internals, doRemove);\n            }\n            else if (dynamicChildren &&\n                // #1153: fast path should not be taken for non-stable (v-for) fragments\n                (type !== Fragment ||\n                    (patchFlag > 0 && patchFlag & 64 /* PatchFlags.STABLE_FRAGMENT */))) {\n                // fast path for block nodes: only need to unmount dynamic children.\n                unmountChildren(dynamicChildren, parentComponent, parentSuspense, false, true);\n            }\n            else if ((type === Fragment &&\n                patchFlag &\n                    (128 /* PatchFlags.KEYED_FRAGMENT */ | 256 /* PatchFlags.UNKEYED_FRAGMENT */)) ||\n                (!optimized && shapeFlag & 16 /* ShapeFlags.ARRAY_CHILDREN */)) {\n                unmountChildren(children, parentComponent, parentSuspense);\n            }\n            if (doRemove) {\n                remove(vnode);\n            }\n        }\n        if ((shouldInvokeVnodeHook &&\n            (vnodeHook = props && props.onVnodeUnmounted)) ||\n            shouldInvokeDirs) {\n            queuePostRenderEffect(() => {\n                vnodeHook && invokeVNodeHook(vnodeHook, parentComponent, vnode);\n                shouldInvokeDirs &&\n                    invokeDirectiveHook(vnode, null, parentComponent, 'unmounted');\n            }, parentSuspense);\n        }\n    };\n    const remove = vnode => {\n        const { type, el, anchor, transition } = vnode;\n        if (type === Fragment) {\n            if (vnode.patchFlag > 0 &&\n                vnode.patchFlag & 2048 /* PatchFlags.DEV_ROOT_FRAGMENT */ &&\n                transition &&\n                !transition.persisted) {\n                vnode.children.forEach(child => {\n                    if (child.type === Comment) {\n                        hostRemove(child.el);\n                    }\n                    else {\n                        remove(child);\n                    }\n                });\n            }\n            else {\n                removeFragment(el, anchor);\n            }\n            return;\n        }\n        if (type === Static) {\n            removeStaticNode(vnode);\n            return;\n        }\n        const performRemove = () => {\n            hostRemove(el);\n            if (transition && !transition.persisted && transition.afterLeave) {\n                transition.afterLeave();\n            }\n        };\n        if (vnode.shapeFlag & 1 /* ShapeFlags.ELEMENT */ &&\n            transition &&\n            !transition.persisted) {\n            const { leave, delayLeave } = transition;\n            const performLeave = () => leave(el, performRemove);\n            if (delayLeave) {\n                delayLeave(vnode.el, performRemove, performLeave);\n            }\n            else {\n                performLeave();\n            }\n        }\n        else {\n            performRemove();\n        }\n    };\n    const removeFragment = (cur, end) => {\n        // For fragments, directly remove all contained DOM nodes.\n        // (fragment child nodes cannot have transition)\n        let next;\n        while (cur !== end) {\n            next = hostNextSibling(cur);\n            hostRemove(cur);\n            cur = next;\n        }\n        hostRemove(end);\n    };\n    const unmountComponent = (instance, parentSuspense, doRemove) => {\n        if (instance.type.__hmrId) {\n            unregisterHMR(instance);\n        }\n        const { bum, scope, update, subTree, um } = instance;\n        // beforeUnmount hook\n        if (bum) {\n            invokeArrayFns(bum);\n        }\n        // stop effects in component scope\n        scope.stop();\n        // update may be null if a component is unmounted before its async\n        // setup has resolved.\n        if (update) {\n            // so that scheduler will no longer invoke it\n            update.active = false;\n            unmount(subTree, instance, parentSuspense, doRemove);\n        }\n        // unmounted hook\n        if (um) {\n            queuePostRenderEffect(um, parentSuspense);\n        }\n        queuePostRenderEffect(() => {\n            instance.isUnmounted = true;\n        }, parentSuspense);\n        // A component with async dep inside a pending suspense is unmounted before\n        // its async dep resolves. This should remove the dep from the suspense, and\n        // cause the suspense to resolve immediately if that was the last dep.\n        if (parentSuspense &&\n            parentSuspense.pendingBranch &&\n            !parentSuspense.isUnmounted &&\n            instance.asyncDep &&\n            !instance.asyncResolved &&\n            instance.suspenseId === parentSuspense.pendingId) {\n            parentSuspense.deps--;\n            if (parentSuspense.deps === 0) {\n                parentSuspense.resolve();\n            }\n        }\n        {\n            devtoolsComponentRemoved(instance);\n        }\n    };\n    const unmountChildren = (children, parentComponent, parentSuspense, doRemove = false, optimized = false, start = 0) => {\n        for (let i = start; i < children.length; i++) {\n            unmount(children[i], parentComponent, parentSuspense, doRemove, optimized);\n        }\n    };\n    const getNextHostNode = vnode => {\n        if (vnode.shapeFlag & 6 /* ShapeFlags.COMPONENT */) {\n            return getNextHostNode(vnode.component.subTree);\n        }\n        if (vnode.shapeFlag & 128 /* ShapeFlags.SUSPENSE */) {\n            return vnode.suspense.next();\n        }\n        return hostNextSibling((vnode.anchor || vnode.el));\n    };\n    const render = (vnode, container, isSVG) => {\n        if (vnode == null) {\n            if (container._vnode) {\n                unmount(container._vnode, null, null, true);\n            }\n        }\n        else {\n            patch(container._vnode || null, vnode, container, null, null, null, isSVG);\n        }\n        flushPreFlushCbs();\n        flushPostFlushCbs();\n        container._vnode = vnode;\n    };\n    const internals = {\n        p: patch,\n        um: unmount,\n        m: move,\n        r: remove,\n        mt: mountComponent,\n        mc: mountChildren,\n        pc: patchChildren,\n        pbc: patchBlockChildren,\n        n: getNextHostNode,\n        o: options\n    };\n    let hydrate;\n    let hydrateNode;\n    if (createHydrationFns) {\n        [hydrate, hydrateNode] = createHydrationFns(internals);\n    }\n    return {\n        render,\n        hydrate,\n        createApp: createAppAPI(render, hydrate)\n    };\n}\nfunction toggleRecurse({ effect, update }, allowed) {\n    effect.allowRecurse = update.allowRecurse = allowed;\n}\n/**\n * #1156\n * When a component is HMR-enabled, we need to make sure that all static nodes\n * inside a block also inherit the DOM element from the previous tree so that\n * HMR updates (which are full updates) can retrieve the element for patching.\n *\n * #2080\n * Inside keyed `template` fragment static children, if a fragment is moved,\n * the children will always be moved. Therefore, in order to ensure correct move\n * position, el should be inherited from previous nodes.\n */\nfunction traverseStaticChildren(n1, n2, shallow = false) {\n    const ch1 = n1.children;\n    const ch2 = n2.children;\n    if (isArray(ch1) && isArray(ch2)) {\n        for (let i = 0; i < ch1.length; i++) {\n            // this is only called in the optimized path so array children are\n            // guaranteed to be vnodes\n            const c1 = ch1[i];\n            let c2 = ch2[i];\n            if (c2.shapeFlag & 1 /* ShapeFlags.ELEMENT */ && !c2.dynamicChildren) {\n                if (c2.patchFlag <= 0 || c2.patchFlag === 32 /* PatchFlags.HYDRATE_EVENTS */) {\n                    c2 = ch2[i] = cloneIfMounted(ch2[i]);\n                    c2.el = c1.el;\n                }\n                if (!shallow)\n                    traverseStaticChildren(c1, c2);\n            }\n            // #6852 also inherit for text nodes\n            if (c2.type === Text) {\n                c2.el = c1.el;\n            }\n            // also inherit for comment nodes, but not placeholders (e.g. v-if which\n            // would have received .el during block patch)\n            if (c2.type === Comment && !c2.el) {\n                c2.el = c1.el;\n            }\n        }\n    }\n}\n// https://en.wikipedia.org/wiki/Longest_increasing_subsequence\nfunction getSequence(arr) {\n    const p = arr.slice();\n    const result = [0];\n    let i, j, u, v, c;\n    const len = arr.length;\n    for (i = 0; i < len; i++) {\n        const arrI = arr[i];\n        if (arrI !== 0) {\n            j = result[result.length - 1];\n            if (arr[j] < arrI) {\n                p[i] = j;\n                result.push(i);\n                continue;\n            }\n            u = 0;\n            v = result.length - 1;\n            while (u < v) {\n                c = (u + v) >> 1;\n                if (arr[result[c]] < arrI) {\n                    u = c + 1;\n                }\n                else {\n                    v = c;\n                }\n            }\n            if (arrI < arr[result[u]]) {\n                if (u > 0) {\n                    p[i] = result[u - 1];\n                }\n                result[u] = i;\n            }\n        }\n    }\n    u = result.length;\n    v = result[u - 1];\n    while (u-- > 0) {\n        result[u] = v;\n        v = p[v];\n    }\n    return result;\n}\n\nconst isTeleport = (type) => type.__isTeleport;\nconst isTeleportDisabled = (props) => props && (props.disabled || props.disabled === '');\nconst isTargetSVG = (target) => typeof SVGElement !== 'undefined' && target instanceof SVGElement;\nconst resolveTarget = (props, select) => {\n    const targetSelector = props && props.to;\n    if (isString(targetSelector)) {\n        if (!select) {\n            warn(`Current renderer does not support string target for Teleports. ` +\n                    `(missing querySelector renderer option)`);\n            return null;\n        }\n        else {\n            const target = select(targetSelector);\n            if (!target) {\n                warn(`Failed to locate Teleport target with selector \"${targetSelector}\". ` +\n                        `Note the target element must exist before the component is mounted - ` +\n                        `i.e. the target cannot be rendered by the component itself, and ` +\n                        `ideally should be outside of the entire Vue component tree.`);\n            }\n            return target;\n        }\n    }\n    else {\n        if (!targetSelector && !isTeleportDisabled(props)) {\n            warn(`Invalid Teleport target: ${targetSelector}`);\n        }\n        return targetSelector;\n    }\n};\nconst TeleportImpl = {\n    __isTeleport: true,\n    process(n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized, internals) {\n        const { mc: mountChildren, pc: patchChildren, pbc: patchBlockChildren, o: { insert, querySelector, createText, createComment } } = internals;\n        const disabled = isTeleportDisabled(n2.props);\n        let { shapeFlag, children, dynamicChildren } = n2;\n        // #3302\n        // HMR updated, force full diff\n        if (isHmrUpdating) {\n            optimized = false;\n            dynamicChildren = null;\n        }\n        if (n1 == null) {\n            // insert anchors in the main view\n            const placeholder = (n2.el = createComment('teleport start')\n                );\n            const mainAnchor = (n2.anchor = createComment('teleport end')\n                );\n            insert(placeholder, container, anchor);\n            insert(mainAnchor, container, anchor);\n            const target = (n2.target = resolveTarget(n2.props, querySelector));\n            const targetAnchor = (n2.targetAnchor = createText(''));\n            if (target) {\n                insert(targetAnchor, target);\n                // #2652 we could be teleporting from a non-SVG tree into an SVG tree\n                isSVG = isSVG || isTargetSVG(target);\n            }\n            else if (!disabled) {\n                warn('Invalid Teleport target on mount:', target, `(${typeof target})`);\n            }\n            const mount = (container, anchor) => {\n                // Teleport *always* has Array children. This is enforced in both the\n                // compiler and vnode children normalization.\n                if (shapeFlag & 16 /* ShapeFlags.ARRAY_CHILDREN */) {\n                    mountChildren(children, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\n                }\n            };\n            if (disabled) {\n                mount(container, mainAnchor);\n            }\n            else if (target) {\n                mount(target, targetAnchor);\n            }\n        }\n        else {\n            // update content\n            n2.el = n1.el;\n            const mainAnchor = (n2.anchor = n1.anchor);\n            const target = (n2.target = n1.target);\n            const targetAnchor = (n2.targetAnchor = n1.targetAnchor);\n            const wasDisabled = isTeleportDisabled(n1.props);\n            const currentContainer = wasDisabled ? container : target;\n            const currentAnchor = wasDisabled ? mainAnchor : targetAnchor;\n            isSVG = isSVG || isTargetSVG(target);\n            if (dynamicChildren) {\n                // fast path when the teleport happens to be a block root\n                patchBlockChildren(n1.dynamicChildren, dynamicChildren, currentContainer, parentComponent, parentSuspense, isSVG, slotScopeIds);\n                // even in block tree mode we need to make sure all root-level nodes\n                // in the teleport inherit previous DOM references so that they can\n                // be moved in future patches.\n                traverseStaticChildren(n1, n2, true);\n            }\n            else if (!optimized) {\n                patchChildren(n1, n2, currentContainer, currentAnchor, parentComponent, parentSuspense, isSVG, slotScopeIds, false);\n            }\n            if (disabled) {\n                if (!wasDisabled) {\n                    // enabled -> disabled\n                    // move into main container\n                    moveTeleport(n2, container, mainAnchor, internals, 1 /* TeleportMoveTypes.TOGGLE */);\n                }\n            }\n            else {\n                // target changed\n                if ((n2.props && n2.props.to) !== (n1.props && n1.props.to)) {\n                    const nextTarget = (n2.target = resolveTarget(n2.props, querySelector));\n                    if (nextTarget) {\n                        moveTeleport(n2, nextTarget, null, internals, 0 /* TeleportMoveTypes.TARGET_CHANGE */);\n                    }\n                    else {\n                        warn('Invalid Teleport target on update:', target, `(${typeof target})`);\n                    }\n                }\n                else if (wasDisabled) {\n                    // disabled -> enabled\n                    // move into teleport target\n                    moveTeleport(n2, target, targetAnchor, internals, 1 /* TeleportMoveTypes.TOGGLE */);\n                }\n            }\n        }\n        updateCssVars(n2);\n    },\n    remove(vnode, parentComponent, parentSuspense, optimized, { um: unmount, o: { remove: hostRemove } }, doRemove) {\n        const { shapeFlag, children, anchor, targetAnchor, target, props } = vnode;\n        if (target) {\n            hostRemove(targetAnchor);\n        }\n        // an unmounted teleport should always remove its children if not disabled\n        if (doRemove || !isTeleportDisabled(props)) {\n            hostRemove(anchor);\n            if (shapeFlag & 16 /* ShapeFlags.ARRAY_CHILDREN */) {\n                for (let i = 0; i < children.length; i++) {\n                    const child = children[i];\n                    unmount(child, parentComponent, parentSuspense, true, !!child.dynamicChildren);\n                }\n            }\n        }\n    },\n    move: moveTeleport,\n    hydrate: hydrateTeleport\n};\nfunction moveTeleport(vnode, container, parentAnchor, { o: { insert }, m: move }, moveType = 2 /* TeleportMoveTypes.REORDER */) {\n    // move target anchor if this is a target change.\n    if (moveType === 0 /* TeleportMoveTypes.TARGET_CHANGE */) {\n        insert(vnode.targetAnchor, container, parentAnchor);\n    }\n    const { el, anchor, shapeFlag, children, props } = vnode;\n    const isReorder = moveType === 2 /* TeleportMoveTypes.REORDER */;\n    // move main view anchor if this is a re-order.\n    if (isReorder) {\n        insert(el, container, parentAnchor);\n    }\n    // if this is a re-order and teleport is enabled (content is in target)\n    // do not move children. So the opposite is: only move children if this\n    // is not a reorder, or the teleport is disabled\n    if (!isReorder || isTeleportDisabled(props)) {\n        // Teleport has either Array children or no children.\n        if (shapeFlag & 16 /* ShapeFlags.ARRAY_CHILDREN */) {\n            for (let i = 0; i < children.length; i++) {\n                move(children[i], container, parentAnchor, 2 /* MoveType.REORDER */);\n            }\n        }\n    }\n    // move main view anchor if this is a re-order.\n    if (isReorder) {\n        insert(anchor, container, parentAnchor);\n    }\n}\nfunction hydrateTeleport(node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized, { o: { nextSibling, parentNode, querySelector } }, hydrateChildren) {\n    const target = (vnode.target = resolveTarget(vnode.props, querySelector));\n    if (target) {\n        // if multiple teleports rendered to the same target element, we need to\n        // pick up from where the last teleport finished instead of the first node\n        const targetNode = target._lpa || target.firstChild;\n        if (vnode.shapeFlag & 16 /* ShapeFlags.ARRAY_CHILDREN */) {\n            if (isTeleportDisabled(vnode.props)) {\n                vnode.anchor = hydrateChildren(nextSibling(node), vnode, parentNode(node), parentComponent, parentSuspense, slotScopeIds, optimized);\n                vnode.targetAnchor = targetNode;\n            }\n            else {\n                vnode.anchor = nextSibling(node);\n                // lookahead until we find the target anchor\n                // we cannot rely on return value of hydrateChildren() because there\n                // could be nested teleports\n                let targetAnchor = targetNode;\n                while (targetAnchor) {\n                    targetAnchor = nextSibling(targetAnchor);\n                    if (targetAnchor &&\n                        targetAnchor.nodeType === 8 &&\n                        targetAnchor.data === 'teleport anchor') {\n                        vnode.targetAnchor = targetAnchor;\n                        target._lpa =\n                            vnode.targetAnchor && nextSibling(vnode.targetAnchor);\n                        break;\n                    }\n                }\n                hydrateChildren(targetNode, vnode, target, parentComponent, parentSuspense, slotScopeIds, optimized);\n            }\n        }\n        updateCssVars(vnode);\n    }\n    return vnode.anchor && nextSibling(vnode.anchor);\n}\n// Force-casted public typing for h and TSX props inference\nconst Teleport = TeleportImpl;\nfunction updateCssVars(vnode) {\n    // presence of .ut method indicates owner component uses css vars.\n    // code path here can assume browser environment.\n    const ctx = vnode.ctx;\n    if (ctx && ctx.ut) {\n        let node = vnode.children[0].el;\n        while (node !== vnode.targetAnchor) {\n            if (node.nodeType === 1)\n                node.setAttribute('data-v-owner', ctx.uid);\n            node = node.nextSibling;\n        }\n        ctx.ut();\n    }\n}\n\nconst Fragment = Symbol('Fragment' );\nconst Text = Symbol('Text' );\nconst Comment = Symbol('Comment' );\nconst Static = Symbol('Static' );\n// Since v-if and v-for are the two possible ways node structure can dynamically\n// change, once we consider v-if branches and each v-for fragment a block, we\n// can divide a template into nested blocks, and within each block the node\n// structure would be stable. This allows us to skip most children diffing\n// and only worry about the dynamic nodes (indicated by patch flags).\nconst blockStack = [];\nlet currentBlock = null;\n/**\n * Open a block.\n * This must be called before `createBlock`. It cannot be part of `createBlock`\n * because the children of the block are evaluated before `createBlock` itself\n * is called. The generated code typically looks like this:\n *\n * ```js\n * function render() {\n *   return (openBlock(),createBlock('div', null, [...]))\n * }\n * ```\n * disableTracking is true when creating a v-for fragment block, since a v-for\n * fragment always diffs its children.\n *\n * @private\n */\nfunction openBlock(disableTracking = false) {\n    blockStack.push((currentBlock = disableTracking ? null : []));\n}\nfunction closeBlock() {\n    blockStack.pop();\n    currentBlock = blockStack[blockStack.length - 1] || null;\n}\n// Whether we should be tracking dynamic child nodes inside a block.\n// Only tracks when this value is > 0\n// We are not using a simple boolean because this value may need to be\n// incremented/decremented by nested usage of v-once (see below)\nlet isBlockTreeEnabled = 1;\n/**\n * Block tracking sometimes needs to be disabled, for example during the\n * creation of a tree that needs to be cached by v-once. The compiler generates\n * code like this:\n *\n * ``` js\n * _cache[1] || (\n *   setBlockTracking(-1),\n *   _cache[1] = createVNode(...),\n *   setBlockTracking(1),\n *   _cache[1]\n * )\n * ```\n *\n * @private\n */\nfunction setBlockTracking(value) {\n    isBlockTreeEnabled += value;\n}\nfunction setupBlock(vnode) {\n    // save current block children on the block vnode\n    vnode.dynamicChildren =\n        isBlockTreeEnabled > 0 ? currentBlock || EMPTY_ARR : null;\n    // close block\n    closeBlock();\n    // a block is always going to be patched, so track it as a child of its\n    // parent block\n    if (isBlockTreeEnabled > 0 && currentBlock) {\n        currentBlock.push(vnode);\n    }\n    return vnode;\n}\n/**\n * @private\n */\nfunction createElementBlock(type, props, children, patchFlag, dynamicProps, shapeFlag) {\n    return setupBlock(createBaseVNode(type, props, children, patchFlag, dynamicProps, shapeFlag, true /* isBlock */));\n}\n/**\n * Create a block root vnode. Takes the same exact arguments as `createVNode`.\n * A block root keeps track of dynamic nodes within the block in the\n * `dynamicChildren` array.\n *\n * @private\n */\nfunction createBlock(type, props, children, patchFlag, dynamicProps) {\n    return setupBlock(createVNode(type, props, children, patchFlag, dynamicProps, true /* isBlock: prevent a block from tracking itself */));\n}\nfunction isVNode(value) {\n    return value ? value.__v_isVNode === true : false;\n}\nfunction isSameVNodeType(n1, n2) {\n    if (n2.shapeFlag & 6 /* ShapeFlags.COMPONENT */ &&\n        hmrDirtyComponents.has(n2.type)) {\n        // #7042, ensure the vnode being unmounted during HMR\n        // bitwise operations to remove keep alive flags\n        n1.shapeFlag &= ~256 /* ShapeFlags.COMPONENT_SHOULD_KEEP_ALIVE */;\n        n2.shapeFlag &= ~512 /* ShapeFlags.COMPONENT_KEPT_ALIVE */;\n        // HMR only: if the component has been hot-updated, force a reload.\n        return false;\n    }\n    return n1.type === n2.type && n1.key === n2.key;\n}\nlet vnodeArgsTransformer;\n/**\n * Internal API for registering an arguments transform for createVNode\n * used for creating stubs in the test-utils\n * It is *internal* but needs to be exposed for test-utils to pick up proper\n * typings\n */\nfunction transformVNodeArgs(transformer) {\n    vnodeArgsTransformer = transformer;\n}\nconst createVNodeWithArgsTransform = (...args) => {\n    return _createVNode(...(vnodeArgsTransformer\n        ? vnodeArgsTransformer(args, currentRenderingInstance)\n        : args));\n};\nconst InternalObjectKey = `__vInternal`;\nconst normalizeKey = ({ key }) => key != null ? key : null;\nconst normalizeRef = ({ ref, ref_key, ref_for }) => {\n    return (ref != null\n        ? isString(ref) || isRef(ref) || isFunction(ref)\n            ? { i: currentRenderingInstance, r: ref, k: ref_key, f: !!ref_for }\n            : ref\n        : null);\n};\nfunction createBaseVNode(type, props = null, children = null, patchFlag = 0, dynamicProps = null, shapeFlag = type === Fragment ? 0 : 1 /* ShapeFlags.ELEMENT */, isBlockNode = false, needFullChildrenNormalization = false) {\n    const vnode = {\n        __v_isVNode: true,\n        __v_skip: true,\n        type,\n        props,\n        key: props && normalizeKey(props),\n        ref: props && normalizeRef(props),\n        scopeId: currentScopeId,\n        slotScopeIds: null,\n        children,\n        component: null,\n        suspense: null,\n        ssContent: null,\n        ssFallback: null,\n        dirs: null,\n        transition: null,\n        el: null,\n        anchor: null,\n        target: null,\n        targetAnchor: null,\n        staticCount: 0,\n        shapeFlag,\n        patchFlag,\n        dynamicProps,\n        dynamicChildren: null,\n        appContext: null,\n        ctx: currentRenderingInstance\n    };\n    if (needFullChildrenNormalization) {\n        normalizeChildren(vnode, children);\n        // normalize suspense children\n        if (shapeFlag & 128 /* ShapeFlags.SUSPENSE */) {\n            type.normalize(vnode);\n        }\n    }\n    else if (children) {\n        // compiled element vnode - if children is passed, only possible types are\n        // string or Array.\n        vnode.shapeFlag |= isString(children)\n            ? 8 /* ShapeFlags.TEXT_CHILDREN */\n            : 16 /* ShapeFlags.ARRAY_CHILDREN */;\n    }\n    // validate key\n    if (vnode.key !== vnode.key) {\n        warn(`VNode created with invalid key (NaN). VNode type:`, vnode.type);\n    }\n    // track vnode for block tree\n    if (isBlockTreeEnabled > 0 &&\n        // avoid a block node from tracking itself\n        !isBlockNode &&\n        // has current parent block\n        currentBlock &&\n        // presence of a patch flag indicates this node needs patching on updates.\n        // component nodes also should always be patched, because even if the\n        // component doesn't need to update, it needs to persist the instance on to\n        // the next vnode so that it can be properly unmounted later.\n        (vnode.patchFlag > 0 || shapeFlag & 6 /* ShapeFlags.COMPONENT */) &&\n        // the EVENTS flag is only for hydration and if it is the only flag, the\n        // vnode should not be considered dynamic due to handler caching.\n        vnode.patchFlag !== 32 /* PatchFlags.HYDRATE_EVENTS */) {\n        currentBlock.push(vnode);\n    }\n    return vnode;\n}\nconst createVNode = (createVNodeWithArgsTransform );\nfunction _createVNode(type, props = null, children = null, patchFlag = 0, dynamicProps = null, isBlockNode = false) {\n    if (!type || type === NULL_DYNAMIC_COMPONENT) {\n        if (!type) {\n            warn(`Invalid vnode type when creating vnode: ${type}.`);\n        }\n        type = Comment;\n    }\n    if (isVNode(type)) {\n        // createVNode receiving an existing vnode. This happens in cases like\n        // <component :is=\"vnode\"/>\n        // #2078 make sure to merge refs during the clone instead of overwriting it\n        const cloned = cloneVNode(type, props, true /* mergeRef: true */);\n        if (children) {\n            normalizeChildren(cloned, children);\n        }\n        if (isBlockTreeEnabled > 0 && !isBlockNode && currentBlock) {\n            if (cloned.shapeFlag & 6 /* ShapeFlags.COMPONENT */) {\n                currentBlock[currentBlock.indexOf(type)] = cloned;\n            }\n            else {\n                currentBlock.push(cloned);\n            }\n        }\n        cloned.patchFlag |= -2 /* PatchFlags.BAIL */;\n        return cloned;\n    }\n    // class component normalization.\n    if (isClassComponent(type)) {\n        type = type.__vccOpts;\n    }\n    // class & style normalization.\n    if (props) {\n        // for reactive or proxy objects, we need to clone it to enable mutation.\n        props = guardReactiveProps(props);\n        let { class: klass, style } = props;\n        if (klass && !isString(klass)) {\n            props.class = normalizeClass(klass);\n        }\n        if (isObject(style)) {\n            // reactive state objects need to be cloned since they are likely to be\n            // mutated\n            if (isProxy(style) && !isArray(style)) {\n                style = extend({}, style);\n            }\n            props.style = normalizeStyle(style);\n        }\n    }\n    // encode the vnode type information into a bitmap\n    const shapeFlag = isString(type)\n        ? 1 /* ShapeFlags.ELEMENT */\n        : isSuspense(type)\n            ? 128 /* ShapeFlags.SUSPENSE */\n            : isTeleport(type)\n                ? 64 /* ShapeFlags.TELEPORT */\n                : isObject(type)\n                    ? 4 /* ShapeFlags.STATEFUL_COMPONENT */\n                    : isFunction(type)\n                        ? 2 /* ShapeFlags.FUNCTIONAL_COMPONENT */\n                        : 0;\n    if (shapeFlag & 4 /* ShapeFlags.STATEFUL_COMPONENT */ && isProxy(type)) {\n        type = toRaw(type);\n        warn(`Vue received a Component which was made a reactive object. This can ` +\n            `lead to unnecessary performance overhead, and should be avoided by ` +\n            `marking the component with \\`markRaw\\` or using \\`shallowRef\\` ` +\n            `instead of \\`ref\\`.`, `\\nComponent that was made reactive: `, type);\n    }\n    return createBaseVNode(type, props, children, patchFlag, dynamicProps, shapeFlag, isBlockNode, true);\n}\nfunction guardReactiveProps(props) {\n    if (!props)\n        return null;\n    return isProxy(props) || InternalObjectKey in props\n        ? extend({}, props)\n        : props;\n}\nfunction cloneVNode(vnode, extraProps, mergeRef = false) {\n    // This is intentionally NOT using spread or extend to avoid the runtime\n    // key enumeration cost.\n    const { props, ref, patchFlag, children } = vnode;\n    const mergedProps = extraProps ? mergeProps(props || {}, extraProps) : props;\n    const cloned = {\n        __v_isVNode: true,\n        __v_skip: true,\n        type: vnode.type,\n        props: mergedProps,\n        key: mergedProps && normalizeKey(mergedProps),\n        ref: extraProps && extraProps.ref\n            ? // #2078 in the case of <component :is=\"vnode\" ref=\"extra\"/>\n                // if the vnode itself already has a ref, cloneVNode will need to merge\n                // the refs so the single vnode can be set on multiple refs\n                mergeRef && ref\n                    ? isArray(ref)\n                        ? ref.concat(normalizeRef(extraProps))\n                        : [ref, normalizeRef(extraProps)]\n                    : normalizeRef(extraProps)\n            : ref,\n        scopeId: vnode.scopeId,\n        slotScopeIds: vnode.slotScopeIds,\n        children: patchFlag === -1 /* PatchFlags.HOISTED */ && isArray(children)\n            ? children.map(deepCloneVNode)\n            : children,\n        target: vnode.target,\n        targetAnchor: vnode.targetAnchor,\n        staticCount: vnode.staticCount,\n        shapeFlag: vnode.shapeFlag,\n        // if the vnode is cloned with extra props, we can no longer assume its\n        // existing patch flag to be reliable and need to add the FULL_PROPS flag.\n        // note: preserve flag for fragments since they use the flag for children\n        // fast paths only.\n        patchFlag: extraProps && vnode.type !== Fragment\n            ? patchFlag === -1 // hoisted node\n                ? 16 /* PatchFlags.FULL_PROPS */\n                : patchFlag | 16 /* PatchFlags.FULL_PROPS */\n            : patchFlag,\n        dynamicProps: vnode.dynamicProps,\n        dynamicChildren: vnode.dynamicChildren,\n        appContext: vnode.appContext,\n        dirs: vnode.dirs,\n        transition: vnode.transition,\n        // These should technically only be non-null on mounted VNodes. However,\n        // they *should* be copied for kept-alive vnodes. So we just always copy\n        // them since them being non-null during a mount doesn't affect the logic as\n        // they will simply be overwritten.\n        component: vnode.component,\n        suspense: vnode.suspense,\n        ssContent: vnode.ssContent && cloneVNode(vnode.ssContent),\n        ssFallback: vnode.ssFallback && cloneVNode(vnode.ssFallback),\n        el: vnode.el,\n        anchor: vnode.anchor,\n        ctx: vnode.ctx,\n        ce: vnode.ce\n    };\n    return cloned;\n}\n/**\n * Dev only, for HMR of hoisted vnodes reused in v-for\n * https://github.com/vitejs/vite/issues/2022\n */\nfunction deepCloneVNode(vnode) {\n    const cloned = cloneVNode(vnode);\n    if (isArray(vnode.children)) {\n        cloned.children = vnode.children.map(deepCloneVNode);\n    }\n    return cloned;\n}\n/**\n * @private\n */\nfunction createTextVNode(text = ' ', flag = 0) {\n    return createVNode(Text, null, text, flag);\n}\n/**\n * @private\n */\nfunction createStaticVNode(content, numberOfNodes) {\n    // A static vnode can contain multiple stringified elements, and the number\n    // of elements is necessary for hydration.\n    const vnode = createVNode(Static, null, content);\n    vnode.staticCount = numberOfNodes;\n    return vnode;\n}\n/**\n * @private\n */\nfunction createCommentVNode(text = '', \n// when used as the v-else branch, the comment node must be created as a\n// block to ensure correct updates.\nasBlock = false) {\n    return asBlock\n        ? (openBlock(), createBlock(Comment, null, text))\n        : createVNode(Comment, null, text);\n}\nfunction normalizeVNode(child) {\n    if (child == null || typeof child === 'boolean') {\n        // empty placeholder\n        return createVNode(Comment);\n    }\n    else if (isArray(child)) {\n        // fragment\n        return createVNode(Fragment, null, \n        // #3666, avoid reference pollution when reusing vnode\n        child.slice());\n    }\n    else if (typeof child === 'object') {\n        // already vnode, this should be the most common since compiled templates\n        // always produce all-vnode children arrays\n        return cloneIfMounted(child);\n    }\n    else {\n        // strings and numbers\n        return createVNode(Text, null, String(child));\n    }\n}\n// optimized normalization for template-compiled render fns\nfunction cloneIfMounted(child) {\n    return (child.el === null && child.patchFlag !== -1 /* PatchFlags.HOISTED */) ||\n        child.memo\n        ? child\n        : cloneVNode(child);\n}\nfunction normalizeChildren(vnode, children) {\n    let type = 0;\n    const { shapeFlag } = vnode;\n    if (children == null) {\n        children = null;\n    }\n    else if (isArray(children)) {\n        type = 16 /* ShapeFlags.ARRAY_CHILDREN */;\n    }\n    else if (typeof children === 'object') {\n        if (shapeFlag & (1 /* ShapeFlags.ELEMENT */ | 64 /* ShapeFlags.TELEPORT */)) {\n            // Normalize slot to plain children for plain element and Teleport\n            const slot = children.default;\n            if (slot) {\n                // _c marker is added by withCtx() indicating this is a compiled slot\n                slot._c && (slot._d = false);\n                normalizeChildren(vnode, slot());\n                slot._c && (slot._d = true);\n            }\n            return;\n        }\n        else {\n            type = 32 /* ShapeFlags.SLOTS_CHILDREN */;\n            const slotFlag = children._;\n            if (!slotFlag && !(InternalObjectKey in children)) {\n                children._ctx = currentRenderingInstance;\n            }\n            else if (slotFlag === 3 /* SlotFlags.FORWARDED */ && currentRenderingInstance) {\n                // a child component receives forwarded slots from the parent.\n                // its slot type is determined by its parent's slot type.\n                if (currentRenderingInstance.slots._ === 1 /* SlotFlags.STABLE */) {\n                    children._ = 1 /* SlotFlags.STABLE */;\n                }\n                else {\n                    children._ = 2 /* SlotFlags.DYNAMIC */;\n                    vnode.patchFlag |= 1024 /* PatchFlags.DYNAMIC_SLOTS */;\n                }\n            }\n        }\n    }\n    else if (isFunction(children)) {\n        children = { default: children, _ctx: currentRenderingInstance };\n        type = 32 /* ShapeFlags.SLOTS_CHILDREN */;\n    }\n    else {\n        children = String(children);\n        // force teleport children to array so it can be moved around\n        if (shapeFlag & 64 /* ShapeFlags.TELEPORT */) {\n            type = 16 /* ShapeFlags.ARRAY_CHILDREN */;\n            children = [createTextVNode(children)];\n        }\n        else {\n            type = 8 /* ShapeFlags.TEXT_CHILDREN */;\n        }\n    }\n    vnode.children = children;\n    vnode.shapeFlag |= type;\n}\nfunction mergeProps(...args) {\n    const ret = {};\n    for (let i = 0; i < args.length; i++) {\n        const toMerge = args[i];\n        for (const key in toMerge) {\n            if (key === 'class') {\n                if (ret.class !== toMerge.class) {\n                    ret.class = normalizeClass([ret.class, toMerge.class]);\n                }\n            }\n            else if (key === 'style') {\n                ret.style = normalizeStyle([ret.style, toMerge.style]);\n            }\n            else if (isOn(key)) {\n                const existing = ret[key];\n                const incoming = toMerge[key];\n                if (incoming &&\n                    existing !== incoming &&\n                    !(isArray(existing) && existing.includes(incoming))) {\n                    ret[key] = existing\n                        ? [].concat(existing, incoming)\n                        : incoming;\n                }\n            }\n            else if (key !== '') {\n                ret[key] = toMerge[key];\n            }\n        }\n    }\n    return ret;\n}\nfunction invokeVNodeHook(hook, instance, vnode, prevVNode = null) {\n    callWithAsyncErrorHandling(hook, instance, 7 /* ErrorCodes.VNODE_HOOK */, [\n        vnode,\n        prevVNode\n    ]);\n}\n\nconst emptyAppContext = createAppContext();\nlet uid = 0;\nfunction createComponentInstance(vnode, parent, suspense) {\n    const type = vnode.type;\n    // inherit parent app context - or - if root, adopt from root vnode\n    const appContext = (parent ? parent.appContext : vnode.appContext) || emptyAppContext;\n    const instance = {\n        uid: uid++,\n        vnode,\n        type,\n        parent,\n        appContext,\n        root: null,\n        next: null,\n        subTree: null,\n        effect: null,\n        update: null,\n        scope: new EffectScope(true /* detached */),\n        render: null,\n        proxy: null,\n        exposed: null,\n        exposeProxy: null,\n        withProxy: null,\n        provides: parent ? parent.provides : Object.create(appContext.provides),\n        accessCache: null,\n        renderCache: [],\n        // local resolved assets\n        components: null,\n        directives: null,\n        // resolved props and emits options\n        propsOptions: normalizePropsOptions(type, appContext),\n        emitsOptions: normalizeEmitsOptions(type, appContext),\n        // emit\n        emit: null,\n        emitted: null,\n        // props default value\n        propsDefaults: EMPTY_OBJ,\n        // inheritAttrs\n        inheritAttrs: type.inheritAttrs,\n        // state\n        ctx: EMPTY_OBJ,\n        data: EMPTY_OBJ,\n        props: EMPTY_OBJ,\n        attrs: EMPTY_OBJ,\n        slots: EMPTY_OBJ,\n        refs: EMPTY_OBJ,\n        setupState: EMPTY_OBJ,\n        setupContext: null,\n        // suspense related\n        suspense,\n        suspenseId: suspense ? suspense.pendingId : 0,\n        asyncDep: null,\n        asyncResolved: false,\n        // lifecycle hooks\n        // not using enums here because it results in computed properties\n        isMounted: false,\n        isUnmounted: false,\n        isDeactivated: false,\n        bc: null,\n        c: null,\n        bm: null,\n        m: null,\n        bu: null,\n        u: null,\n        um: null,\n        bum: null,\n        da: null,\n        a: null,\n        rtg: null,\n        rtc: null,\n        ec: null,\n        sp: null\n    };\n    {\n        instance.ctx = createDevRenderContext(instance);\n    }\n    instance.root = parent ? parent.root : instance;\n    instance.emit = emit.bind(null, instance);\n    // apply custom element special handling\n    if (vnode.ce) {\n        vnode.ce(instance);\n    }\n    return instance;\n}\nlet currentInstance = null;\nconst getCurrentInstance = () => currentInstance || currentRenderingInstance;\nconst setCurrentInstance = (instance) => {\n    currentInstance = instance;\n    instance.scope.on();\n};\nconst unsetCurrentInstance = () => {\n    currentInstance && currentInstance.scope.off();\n    currentInstance = null;\n};\nconst isBuiltInTag = /*#__PURE__*/ makeMap('slot,component');\nfunction validateComponentName(name, config) {\n    const appIsNativeTag = config.isNativeTag || NO;\n    if (isBuiltInTag(name) || appIsNativeTag(name)) {\n        warn('Do not use built-in or reserved HTML elements as component id: ' + name);\n    }\n}\nfunction isStatefulComponent(instance) {\n    return instance.vnode.shapeFlag & 4 /* ShapeFlags.STATEFUL_COMPONENT */;\n}\nlet isInSSRComponentSetup = false;\nfunction setupComponent(instance, isSSR = false) {\n    isInSSRComponentSetup = isSSR;\n    const { props, children } = instance.vnode;\n    const isStateful = isStatefulComponent(instance);\n    initProps(instance, props, isStateful, isSSR);\n    initSlots(instance, children);\n    const setupResult = isStateful\n        ? setupStatefulComponent(instance, isSSR)\n        : undefined;\n    isInSSRComponentSetup = false;\n    return setupResult;\n}\nfunction setupStatefulComponent(instance, isSSR) {\n    var _a;\n    const Component = instance.type;\n    {\n        if (Component.name) {\n            validateComponentName(Component.name, instance.appContext.config);\n        }\n        if (Component.components) {\n            const names = Object.keys(Component.components);\n            for (let i = 0; i < names.length; i++) {\n                validateComponentName(names[i], instance.appContext.config);\n            }\n        }\n        if (Component.directives) {\n            const names = Object.keys(Component.directives);\n            for (let i = 0; i < names.length; i++) {\n                validateDirectiveName(names[i]);\n            }\n        }\n        if (Component.compilerOptions && isRuntimeOnly()) {\n            warn(`\"compilerOptions\" is only supported when using a build of Vue that ` +\n                `includes the runtime compiler. Since you are using a runtime-only ` +\n                `build, the options should be passed via your build tool config instead.`);\n        }\n    }\n    // 0. create render proxy property access cache\n    instance.accessCache = Object.create(null);\n    // 1. create public instance / render proxy\n    // also mark it raw so it's never observed\n    instance.proxy = markRaw(new Proxy(instance.ctx, PublicInstanceProxyHandlers));\n    {\n        exposePropsOnRenderContext(instance);\n    }\n    // 2. call setup()\n    const { setup } = Component;\n    if (setup) {\n        const setupContext = (instance.setupContext =\n            setup.length > 1 ? createSetupContext(instance) : null);\n        setCurrentInstance(instance);\n        pauseTracking();\n        const setupResult = callWithErrorHandling(setup, instance, 0 /* ErrorCodes.SETUP_FUNCTION */, [shallowReadonly(instance.props) , setupContext]);\n        resetTracking();\n        unsetCurrentInstance();\n        if (isPromise(setupResult)) {\n            setupResult.then(unsetCurrentInstance, unsetCurrentInstance);\n            if (isSSR) {\n                // return the promise so server-renderer can wait on it\n                return setupResult\n                    .then((resolvedResult) => {\n                    handleSetupResult(instance, resolvedResult, isSSR);\n                })\n                    .catch(e => {\n                    handleError(e, instance, 0 /* ErrorCodes.SETUP_FUNCTION */);\n                });\n            }\n            else {\n                // async setup returned Promise.\n                // bail here and wait for re-entry.\n                instance.asyncDep = setupResult;\n                if (!instance.suspense) {\n                    const name = (_a = Component.name) !== null && _a !== void 0 ? _a : 'Anonymous';\n                    warn(`Component <${name}>: setup function returned a promise, but no ` +\n                        `<Suspense> boundary was found in the parent component tree. ` +\n                        `A component with async setup() must be nested in a <Suspense> ` +\n                        `in order to be rendered.`);\n                }\n            }\n        }\n        else {\n            handleSetupResult(instance, setupResult, isSSR);\n        }\n    }\n    else {\n        finishComponentSetup(instance, isSSR);\n    }\n}\nfunction handleSetupResult(instance, setupResult, isSSR) {\n    if (isFunction(setupResult)) {\n        // setup returned an inline render function\n        {\n            instance.render = setupResult;\n        }\n    }\n    else if (isObject(setupResult)) {\n        if (isVNode(setupResult)) {\n            warn(`setup() should not return VNodes directly - ` +\n                `return a render function instead.`);\n        }\n        // setup returned bindings.\n        // assuming a render function compiled from template is present.\n        {\n            instance.devtoolsRawSetupState = setupResult;\n        }\n        instance.setupState = proxyRefs(setupResult);\n        {\n            exposeSetupStateOnRenderContext(instance);\n        }\n    }\n    else if (setupResult !== undefined) {\n        warn(`setup() should return an object. Received: ${setupResult === null ? 'null' : typeof setupResult}`);\n    }\n    finishComponentSetup(instance, isSSR);\n}\nlet compile;\nlet installWithProxy;\n/**\n * For runtime-dom to register the compiler.\n * Note the exported method uses any to avoid d.ts relying on the compiler types.\n */\nfunction registerRuntimeCompiler(_compile) {\n    compile = _compile;\n    installWithProxy = i => {\n        if (i.render._rc) {\n            i.withProxy = new Proxy(i.ctx, RuntimeCompiledPublicInstanceProxyHandlers);\n        }\n    };\n}\n// dev only\nconst isRuntimeOnly = () => !compile;\nfunction finishComponentSetup(instance, isSSR, skipOptions) {\n    const Component = instance.type;\n    // template / render function normalization\n    // could be already set when returned from setup()\n    if (!instance.render) {\n        // only do on-the-fly compile if not in SSR - SSR on-the-fly compilation\n        // is done by server-renderer\n        if (!isSSR && compile && !Component.render) {\n            const template = Component.template ||\n                resolveMergedOptions(instance).template;\n            if (template) {\n                {\n                    startMeasure(instance, `compile`);\n                }\n                const { isCustomElement, compilerOptions } = instance.appContext.config;\n                const { delimiters, compilerOptions: componentCompilerOptions } = Component;\n                const finalCompilerOptions = extend(extend({\n                    isCustomElement,\n                    delimiters\n                }, compilerOptions), componentCompilerOptions);\n                Component.render = compile(template, finalCompilerOptions);\n                {\n                    endMeasure(instance, `compile`);\n                }\n            }\n        }\n        instance.render = (Component.render || NOOP);\n        // for runtime-compiled render functions using `with` blocks, the render\n        // proxy used needs a different `has` handler which is more performant and\n        // also only allows a whitelist of globals to fallthrough.\n        if (installWithProxy) {\n            installWithProxy(instance);\n        }\n    }\n    // support for 2.x options\n    {\n        setCurrentInstance(instance);\n        pauseTracking();\n        applyOptions(instance);\n        resetTracking();\n        unsetCurrentInstance();\n    }\n    // warn missing template/render\n    // the runtime compilation of template in SSR is done by server-render\n    if (!Component.render && instance.render === NOOP && !isSSR) {\n        /* istanbul ignore if */\n        if (!compile && Component.template) {\n            warn(`Component provided template option but ` +\n                `runtime compilation is not supported in this build of Vue.` +\n                (` Use \"vue.esm-browser.js\" instead.`\n                        ) /* should not happen */);\n        }\n        else {\n            warn(`Component is missing template or render function.`);\n        }\n    }\n}\nfunction createAttrsProxy(instance) {\n    return new Proxy(instance.attrs, {\n            get(target, key) {\n                markAttrsAccessed();\n                track(instance, \"get\" /* TrackOpTypes.GET */, '$attrs');\n                return target[key];\n            },\n            set() {\n                warn(`setupContext.attrs is readonly.`);\n                return false;\n            },\n            deleteProperty() {\n                warn(`setupContext.attrs is readonly.`);\n                return false;\n            }\n        }\n        );\n}\nfunction createSetupContext(instance) {\n    const expose = exposed => {\n        {\n            if (instance.exposed) {\n                warn(`expose() should be called only once per setup().`);\n            }\n            if (exposed != null) {\n                let exposedType = typeof exposed;\n                if (exposedType === 'object') {\n                    if (isArray(exposed)) {\n                        exposedType = 'array';\n                    }\n                    else if (isRef(exposed)) {\n                        exposedType = 'ref';\n                    }\n                }\n                if (exposedType !== 'object') {\n                    warn(`expose() should be passed a plain object, received ${exposedType}.`);\n                }\n            }\n        }\n        instance.exposed = exposed || {};\n    };\n    let attrs;\n    {\n        // We use getters in dev in case libs like test-utils overwrite instance\n        // properties (overwrites should not be done in prod)\n        return Object.freeze({\n            get attrs() {\n                return attrs || (attrs = createAttrsProxy(instance));\n            },\n            get slots() {\n                return shallowReadonly(instance.slots);\n            },\n            get emit() {\n                return (event, ...args) => instance.emit(event, ...args);\n            },\n            expose\n        });\n    }\n}\nfunction getExposeProxy(instance) {\n    if (instance.exposed) {\n        return (instance.exposeProxy ||\n            (instance.exposeProxy = new Proxy(proxyRefs(markRaw(instance.exposed)), {\n                get(target, key) {\n                    if (key in target) {\n                        return target[key];\n                    }\n                    else if (key in publicPropertiesMap) {\n                        return publicPropertiesMap[key](instance);\n                    }\n                },\n                has(target, key) {\n                    return key in target || key in publicPropertiesMap;\n                }\n            })));\n    }\n}\nconst classifyRE = /(?:^|[-_])(\\w)/g;\nconst classify = (str) => str.replace(classifyRE, c => c.toUpperCase()).replace(/[-_]/g, '');\nfunction getComponentName(Component, includeInferred = true) {\n    return isFunction(Component)\n        ? Component.displayName || Component.name\n        : Component.name || (includeInferred && Component.__name);\n}\n/* istanbul ignore next */\nfunction formatComponentName(instance, Component, isRoot = false) {\n    let name = getComponentName(Component);\n    if (!name && Component.__file) {\n        const match = Component.__file.match(/([^/\\\\]+)\\.\\w+$/);\n        if (match) {\n            name = match[1];\n        }\n    }\n    if (!name && instance && instance.parent) {\n        // try to infer the name based on reverse resolution\n        const inferFromRegistry = (registry) => {\n            for (const key in registry) {\n                if (registry[key] === Component) {\n                    return key;\n                }\n            }\n        };\n        name =\n            inferFromRegistry(instance.components ||\n                instance.parent.type.components) || inferFromRegistry(instance.appContext.components);\n    }\n    return name ? classify(name) : isRoot ? `App` : `Anonymous`;\n}\nfunction isClassComponent(value) {\n    return isFunction(value) && '__vccOpts' in value;\n}\n\nconst computed = ((getterOrOptions, debugOptions) => {\n    // @ts-ignore\n    return computed$1(getterOrOptions, debugOptions, isInSSRComponentSetup);\n});\n\n// dev only\nconst warnRuntimeUsage = (method) => warn(`${method}() is a compiler-hint helper that is only usable inside ` +\n    `<script setup> of a single file component. Its arguments should be ` +\n    `compiled away and passing it at runtime has no effect.`);\n// implementation\nfunction defineProps() {\n    {\n        warnRuntimeUsage(`defineProps`);\n    }\n    return null;\n}\n// implementation\nfunction defineEmits() {\n    {\n        warnRuntimeUsage(`defineEmits`);\n    }\n    return null;\n}\n/**\n * Vue `<script setup>` compiler macro for declaring a component's exposed\n * instance properties when it is accessed by a parent component via template\n * refs.\n *\n * `<script setup>` components are closed by default - i.e. variables inside\n * the `<script setup>` scope is not exposed to parent unless explicitly exposed\n * via `defineExpose`.\n *\n * This is only usable inside `<script setup>`, is compiled away in the\n * output and should **not** be actually called at runtime.\n */\nfunction defineExpose(exposed) {\n    {\n        warnRuntimeUsage(`defineExpose`);\n    }\n}\n/**\n * Vue `<script setup>` compiler macro for providing props default values when\n * using type-based `defineProps` declaration.\n *\n * Example usage:\n * ```ts\n * withDefaults(defineProps<{\n *   size?: number\n *   labels?: string[]\n * }>(), {\n *   size: 3,\n *   labels: () => ['default label']\n * })\n * ```\n *\n * This is only usable inside `<script setup>`, is compiled away in the output\n * and should **not** be actually called at runtime.\n */\nfunction withDefaults(props, defaults) {\n    {\n        warnRuntimeUsage(`withDefaults`);\n    }\n    return null;\n}\nfunction useSlots() {\n    return getContext().slots;\n}\nfunction useAttrs() {\n    return getContext().attrs;\n}\nfunction getContext() {\n    const i = getCurrentInstance();\n    if (!i) {\n        warn(`useContext() called without active instance.`);\n    }\n    return i.setupContext || (i.setupContext = createSetupContext(i));\n}\n/**\n * Runtime helper for merging default declarations. Imported by compiled code\n * only.\n * @internal\n */\nfunction mergeDefaults(raw, defaults) {\n    const props = isArray(raw)\n        ? raw.reduce((normalized, p) => ((normalized[p] = {}), normalized), {})\n        : raw;\n    for (const key in defaults) {\n        const opt = props[key];\n        if (opt) {\n            if (isArray(opt) || isFunction(opt)) {\n                props[key] = { type: opt, default: defaults[key] };\n            }\n            else {\n                opt.default = defaults[key];\n            }\n        }\n        else if (opt === null) {\n            props[key] = { default: defaults[key] };\n        }\n        else {\n            warn(`props default key \"${key}\" has no corresponding declaration.`);\n        }\n    }\n    return props;\n}\n/**\n * Used to create a proxy for the rest element when destructuring props with\n * defineProps().\n * @internal\n */\nfunction createPropsRestProxy(props, excludedKeys) {\n    const ret = {};\n    for (const key in props) {\n        if (!excludedKeys.includes(key)) {\n            Object.defineProperty(ret, key, {\n                enumerable: true,\n                get: () => props[key]\n            });\n        }\n    }\n    return ret;\n}\n/**\n * `<script setup>` helper for persisting the current instance context over\n * async/await flows.\n *\n * `@vue/compiler-sfc` converts the following:\n *\n * ```ts\n * const x = await foo()\n * ```\n *\n * into:\n *\n * ```ts\n * let __temp, __restore\n * const x = (([__temp, __restore] = withAsyncContext(() => foo())),__temp=await __temp,__restore(),__temp)\n * ```\n * @internal\n */\nfunction withAsyncContext(getAwaitable) {\n    const ctx = getCurrentInstance();\n    if (!ctx) {\n        warn(`withAsyncContext called without active current instance. ` +\n            `This is likely a bug.`);\n    }\n    let awaitable = getAwaitable();\n    unsetCurrentInstance();\n    if (isPromise(awaitable)) {\n        awaitable = awaitable.catch(e => {\n            setCurrentInstance(ctx);\n            throw e;\n        });\n    }\n    return [awaitable, () => setCurrentInstance(ctx)];\n}\n\n// Actual implementation\nfunction h(type, propsOrChildren, children) {\n    const l = arguments.length;\n    if (l === 2) {\n        if (isObject(propsOrChildren) && !isArray(propsOrChildren)) {\n            // single vnode without props\n            if (isVNode(propsOrChildren)) {\n                return createVNode(type, null, [propsOrChildren]);\n            }\n            // props without children\n            return createVNode(type, propsOrChildren);\n        }\n        else {\n            // omit props\n            return createVNode(type, null, propsOrChildren);\n        }\n    }\n    else {\n        if (l > 3) {\n            children = Array.prototype.slice.call(arguments, 2);\n        }\n        else if (l === 3 && isVNode(children)) {\n            children = [children];\n        }\n        return createVNode(type, propsOrChildren, children);\n    }\n}\n\nconst ssrContextKey = Symbol(`ssrContext` );\nconst useSSRContext = () => {\n    {\n        const ctx = inject(ssrContextKey);\n        if (!ctx) {\n            warn(`Server rendering context not provided. Make sure to only call ` +\n                    `useSSRContext() conditionally in the server build.`);\n        }\n        return ctx;\n    }\n};\n\nfunction initCustomFormatter() {\n    /* eslint-disable no-restricted-globals */\n    if (typeof window === 'undefined') {\n        return;\n    }\n    const vueStyle = { style: 'color:#3ba776' };\n    const numberStyle = { style: 'color:#0b1bc9' };\n    const stringStyle = { style: 'color:#b62e24' };\n    const keywordStyle = { style: 'color:#9d288c' };\n    // custom formatter for Chrome\n    // https://www.mattzeunert.com/2016/02/19/custom-chrome-devtools-object-formatters.html\n    const formatter = {\n        header(obj) {\n            // TODO also format ComponentPublicInstance & ctx.slots/attrs in setup\n            if (!isObject(obj)) {\n                return null;\n            }\n            if (obj.__isVue) {\n                return ['div', vueStyle, `VueInstance`];\n            }\n            else if (isRef(obj)) {\n                return [\n                    'div',\n                    {},\n                    ['span', vueStyle, genRefFlag(obj)],\n                    '<',\n                    formatValue(obj.value),\n                    `>`\n                ];\n            }\n            else if (isReactive(obj)) {\n                return [\n                    'div',\n                    {},\n                    ['span', vueStyle, isShallow(obj) ? 'ShallowReactive' : 'Reactive'],\n                    '<',\n                    formatValue(obj),\n                    `>${isReadonly(obj) ? ` (readonly)` : ``}`\n                ];\n            }\n            else if (isReadonly(obj)) {\n                return [\n                    'div',\n                    {},\n                    ['span', vueStyle, isShallow(obj) ? 'ShallowReadonly' : 'Readonly'],\n                    '<',\n                    formatValue(obj),\n                    '>'\n                ];\n            }\n            return null;\n        },\n        hasBody(obj) {\n            return obj && obj.__isVue;\n        },\n        body(obj) {\n            if (obj && obj.__isVue) {\n                return [\n                    'div',\n                    {},\n                    ...formatInstance(obj.$)\n                ];\n            }\n        }\n    };\n    function formatInstance(instance) {\n        const blocks = [];\n        if (instance.type.props && instance.props) {\n            blocks.push(createInstanceBlock('props', toRaw(instance.props)));\n        }\n        if (instance.setupState !== EMPTY_OBJ) {\n            blocks.push(createInstanceBlock('setup', instance.setupState));\n        }\n        if (instance.data !== EMPTY_OBJ) {\n            blocks.push(createInstanceBlock('data', toRaw(instance.data)));\n        }\n        const computed = extractKeys(instance, 'computed');\n        if (computed) {\n            blocks.push(createInstanceBlock('computed', computed));\n        }\n        const injected = extractKeys(instance, 'inject');\n        if (injected) {\n            blocks.push(createInstanceBlock('injected', injected));\n        }\n        blocks.push([\n            'div',\n            {},\n            [\n                'span',\n                {\n                    style: keywordStyle.style + ';opacity:0.66'\n                },\n                '$ (internal): '\n            ],\n            ['object', { object: instance }]\n        ]);\n        return blocks;\n    }\n    function createInstanceBlock(type, target) {\n        target = extend({}, target);\n        if (!Object.keys(target).length) {\n            return ['span', {}];\n        }\n        return [\n            'div',\n            { style: 'line-height:1.25em;margin-bottom:0.6em' },\n            [\n                'div',\n                {\n                    style: 'color:#476582'\n                },\n                type\n            ],\n            [\n                'div',\n                {\n                    style: 'padding-left:1.25em'\n                },\n                ...Object.keys(target).map(key => {\n                    return [\n                        'div',\n                        {},\n                        ['span', keywordStyle, key + ': '],\n                        formatValue(target[key], false)\n                    ];\n                })\n            ]\n        ];\n    }\n    function formatValue(v, asRaw = true) {\n        if (typeof v === 'number') {\n            return ['span', numberStyle, v];\n        }\n        else if (typeof v === 'string') {\n            return ['span', stringStyle, JSON.stringify(v)];\n        }\n        else if (typeof v === 'boolean') {\n            return ['span', keywordStyle, v];\n        }\n        else if (isObject(v)) {\n            return ['object', { object: asRaw ? toRaw(v) : v }];\n        }\n        else {\n            return ['span', stringStyle, String(v)];\n        }\n    }\n    function extractKeys(instance, type) {\n        const Comp = instance.type;\n        if (isFunction(Comp)) {\n            return;\n        }\n        const extracted = {};\n        for (const key in instance.ctx) {\n            if (isKeyOfType(Comp, key, type)) {\n                extracted[key] = instance.ctx[key];\n            }\n        }\n        return extracted;\n    }\n    function isKeyOfType(Comp, key, type) {\n        const opts = Comp[type];\n        if ((isArray(opts) && opts.includes(key)) ||\n            (isObject(opts) && key in opts)) {\n            return true;\n        }\n        if (Comp.extends && isKeyOfType(Comp.extends, key, type)) {\n            return true;\n        }\n        if (Comp.mixins && Comp.mixins.some(m => isKeyOfType(m, key, type))) {\n            return true;\n        }\n    }\n    function genRefFlag(v) {\n        if (isShallow(v)) {\n            return `ShallowRef`;\n        }\n        if (v.effect) {\n            return `ComputedRef`;\n        }\n        return `Ref`;\n    }\n    if (window.devtoolsFormatters) {\n        window.devtoolsFormatters.push(formatter);\n    }\n    else {\n        window.devtoolsFormatters = [formatter];\n    }\n}\n\nfunction withMemo(memo, render, cache, index) {\n    const cached = cache[index];\n    if (cached && isMemoSame(cached, memo)) {\n        return cached;\n    }\n    const ret = render();\n    // shallow clone\n    ret.memo = memo.slice();\n    return (cache[index] = ret);\n}\nfunction isMemoSame(cached, memo) {\n    const prev = cached.memo;\n    if (prev.length != memo.length) {\n        return false;\n    }\n    for (let i = 0; i < prev.length; i++) {\n        if (hasChanged(prev[i], memo[i])) {\n            return false;\n        }\n    }\n    // make sure to let parent block track it when returning cached\n    if (isBlockTreeEnabled > 0 && currentBlock) {\n        currentBlock.push(cached);\n    }\n    return true;\n}\n\n// Core API ------------------------------------------------------------------\nconst version = \"3.2.47\";\n/**\n * SSR utils for \\@vue/server-renderer. Only exposed in ssr-possible builds.\n * @internal\n */\nconst ssrUtils = (null);\n/**\n * @internal only exposed in compat builds\n */\nconst resolveFilter = null;\n/**\n * @internal only exposed in compat builds.\n */\nconst compatUtils = (null);\n\nconst svgNS = 'http://www.w3.org/2000/svg';\nconst doc = (typeof document !== 'undefined' ? document : null);\nconst templateContainer = doc && /*#__PURE__*/ doc.createElement('template');\nconst nodeOps = {\n    insert: (child, parent, anchor) => {\n        parent.insertBefore(child, anchor || null);\n    },\n    remove: child => {\n        const parent = child.parentNode;\n        if (parent) {\n            parent.removeChild(child);\n        }\n    },\n    createElement: (tag, isSVG, is, props) => {\n        const el = isSVG\n            ? doc.createElementNS(svgNS, tag)\n            : doc.createElement(tag, is ? { is } : undefined);\n        if (tag === 'select' && props && props.multiple != null) {\n            el.setAttribute('multiple', props.multiple);\n        }\n        return el;\n    },\n    createText: text => doc.createTextNode(text),\n    createComment: text => doc.createComment(text),\n    setText: (node, text) => {\n        node.nodeValue = text;\n    },\n    setElementText: (el, text) => {\n        el.textContent = text;\n    },\n    parentNode: node => node.parentNode,\n    nextSibling: node => node.nextSibling,\n    querySelector: selector => doc.querySelector(selector),\n    setScopeId(el, id) {\n        el.setAttribute(id, '');\n    },\n    // __UNSAFE__\n    // Reason: innerHTML.\n    // Static content here can only come from compiled templates.\n    // As long as the user only uses trusted templates, this is safe.\n    insertStaticContent(content, parent, anchor, isSVG, start, end) {\n        // <parent> before | first ... last | anchor </parent>\n        const before = anchor ? anchor.previousSibling : parent.lastChild;\n        // #5308 can only take cached path if:\n        // - has a single root node\n        // - nextSibling info is still available\n        if (start && (start === end || start.nextSibling)) {\n            // cached\n            while (true) {\n                parent.insertBefore(start.cloneNode(true), anchor);\n                if (start === end || !(start = start.nextSibling))\n                    break;\n            }\n        }\n        else {\n            // fresh insert\n            templateContainer.innerHTML = isSVG ? `<svg>${content}</svg>` : content;\n            const template = templateContainer.content;\n            if (isSVG) {\n                // remove outer svg wrapper\n                const wrapper = template.firstChild;\n                while (wrapper.firstChild) {\n                    template.appendChild(wrapper.firstChild);\n                }\n                template.removeChild(wrapper);\n            }\n            parent.insertBefore(template, anchor);\n        }\n        return [\n            // first\n            before ? before.nextSibling : parent.firstChild,\n            // last\n            anchor ? anchor.previousSibling : parent.lastChild\n        ];\n    }\n};\n\n// compiler should normalize class + :class bindings on the same element\n// into a single binding ['staticClass', dynamic]\nfunction patchClass(el, value, isSVG) {\n    // directly setting className should be faster than setAttribute in theory\n    // if this is an element during a transition, take the temporary transition\n    // classes into account.\n    const transitionClasses = el._vtc;\n    if (transitionClasses) {\n        value = (value ? [value, ...transitionClasses] : [...transitionClasses]).join(' ');\n    }\n    if (value == null) {\n        el.removeAttribute('class');\n    }\n    else if (isSVG) {\n        el.setAttribute('class', value);\n    }\n    else {\n        el.className = value;\n    }\n}\n\nfunction patchStyle(el, prev, next) {\n    const style = el.style;\n    const isCssString = isString(next);\n    if (next && !isCssString) {\n        if (prev && !isString(prev)) {\n            for (const key in prev) {\n                if (next[key] == null) {\n                    setStyle(style, key, '');\n                }\n            }\n        }\n        for (const key in next) {\n            setStyle(style, key, next[key]);\n        }\n    }\n    else {\n        const currentDisplay = style.display;\n        if (isCssString) {\n            if (prev !== next) {\n                style.cssText = next;\n            }\n        }\n        else if (prev) {\n            el.removeAttribute('style');\n        }\n        // indicates that the `display` of the element is controlled by `v-show`,\n        // so we always keep the current `display` value regardless of the `style`\n        // value, thus handing over control to `v-show`.\n        if ('_vod' in el) {\n            style.display = currentDisplay;\n        }\n    }\n}\nconst semicolonRE = /[^\\\\];\\s*$/;\nconst importantRE = /\\s*!important$/;\nfunction setStyle(style, name, val) {\n    if (isArray(val)) {\n        val.forEach(v => setStyle(style, name, v));\n    }\n    else {\n        if (val == null)\n            val = '';\n        {\n            if (semicolonRE.test(val)) {\n                warn(`Unexpected semicolon at the end of '${name}' style value: '${val}'`);\n            }\n        }\n        if (name.startsWith('--')) {\n            // custom property definition\n            style.setProperty(name, val);\n        }\n        else {\n            const prefixed = autoPrefix(style, name);\n            if (importantRE.test(val)) {\n                // !important\n                style.setProperty(hyphenate(prefixed), val.replace(importantRE, ''), 'important');\n            }\n            else {\n                style[prefixed] = val;\n            }\n        }\n    }\n}\nconst prefixes = ['Webkit', 'Moz', 'ms'];\nconst prefixCache = {};\nfunction autoPrefix(style, rawName) {\n    const cached = prefixCache[rawName];\n    if (cached) {\n        return cached;\n    }\n    let name = camelize(rawName);\n    if (name !== 'filter' && name in style) {\n        return (prefixCache[rawName] = name);\n    }\n    name = capitalize(name);\n    for (let i = 0; i < prefixes.length; i++) {\n        const prefixed = prefixes[i] + name;\n        if (prefixed in style) {\n            return (prefixCache[rawName] = prefixed);\n        }\n    }\n    return rawName;\n}\n\nconst xlinkNS = 'http://www.w3.org/1999/xlink';\nfunction patchAttr(el, key, value, isSVG, instance) {\n    if (isSVG && key.startsWith('xlink:')) {\n        if (value == null) {\n            el.removeAttributeNS(xlinkNS, key.slice(6, key.length));\n        }\n        else {\n            el.setAttributeNS(xlinkNS, key, value);\n        }\n    }\n    else {\n        // note we are only checking boolean attributes that don't have a\n        // corresponding dom prop of the same name here.\n        const isBoolean = isSpecialBooleanAttr(key);\n        if (value == null || (isBoolean && !includeBooleanAttr(value))) {\n            el.removeAttribute(key);\n        }\n        else {\n            el.setAttribute(key, isBoolean ? '' : value);\n        }\n    }\n}\n\n// __UNSAFE__\n// functions. The user is responsible for using them with only trusted content.\nfunction patchDOMProp(el, key, value, \n// the following args are passed only due to potential innerHTML/textContent\n// overriding existing VNodes, in which case the old tree must be properly\n// unmounted.\nprevChildren, parentComponent, parentSuspense, unmountChildren) {\n    if (key === 'innerHTML' || key === 'textContent') {\n        if (prevChildren) {\n            unmountChildren(prevChildren, parentComponent, parentSuspense);\n        }\n        el[key] = value == null ? '' : value;\n        return;\n    }\n    if (key === 'value' &&\n        el.tagName !== 'PROGRESS' &&\n        // custom elements may use _value internally\n        !el.tagName.includes('-')) {\n        // store value as _value as well since\n        // non-string values will be stringified.\n        el._value = value;\n        const newValue = value == null ? '' : value;\n        if (el.value !== newValue ||\n            // #4956: always set for OPTION elements because its value falls back to\n            // textContent if no value attribute is present. And setting .value for\n            // OPTION has no side effect\n            el.tagName === 'OPTION') {\n            el.value = newValue;\n        }\n        if (value == null) {\n            el.removeAttribute(key);\n        }\n        return;\n    }\n    let needRemove = false;\n    if (value === '' || value == null) {\n        const type = typeof el[key];\n        if (type === 'boolean') {\n            // e.g. <select multiple> compiles to { multiple: '' }\n            value = includeBooleanAttr(value);\n        }\n        else if (value == null && type === 'string') {\n            // e.g. <div :id=\"null\">\n            value = '';\n            needRemove = true;\n        }\n        else if (type === 'number') {\n            // e.g. <img :width=\"null\">\n            value = 0;\n            needRemove = true;\n        }\n    }\n    // some properties perform value validation and throw,\n    // some properties has getter, no setter, will error in 'use strict'\n    // eg. <select :type=\"null\"></select> <select :willValidate=\"null\"></select>\n    try {\n        el[key] = value;\n    }\n    catch (e) {\n        // do not warn if value is auto-coerced from nullish values\n        if (!needRemove) {\n            warn(`Failed setting prop \"${key}\" on <${el.tagName.toLowerCase()}>: ` +\n                `value ${value} is invalid.`, e);\n        }\n    }\n    needRemove && el.removeAttribute(key);\n}\n\nfunction addEventListener(el, event, handler, options) {\n    el.addEventListener(event, handler, options);\n}\nfunction removeEventListener(el, event, handler, options) {\n    el.removeEventListener(event, handler, options);\n}\nfunction patchEvent(el, rawName, prevValue, nextValue, instance = null) {\n    // vei = vue event invokers\n    const invokers = el._vei || (el._vei = {});\n    const existingInvoker = invokers[rawName];\n    if (nextValue && existingInvoker) {\n        // patch\n        existingInvoker.value = nextValue;\n    }\n    else {\n        const [name, options] = parseName(rawName);\n        if (nextValue) {\n            // add\n            const invoker = (invokers[rawName] = createInvoker(nextValue, instance));\n            addEventListener(el, name, invoker, options);\n        }\n        else if (existingInvoker) {\n            // remove\n            removeEventListener(el, name, existingInvoker, options);\n            invokers[rawName] = undefined;\n        }\n    }\n}\nconst optionsModifierRE = /(?:Once|Passive|Capture)$/;\nfunction parseName(name) {\n    let options;\n    if (optionsModifierRE.test(name)) {\n        options = {};\n        let m;\n        while ((m = name.match(optionsModifierRE))) {\n            name = name.slice(0, name.length - m[0].length);\n            options[m[0].toLowerCase()] = true;\n        }\n    }\n    const event = name[2] === ':' ? name.slice(3) : hyphenate(name.slice(2));\n    return [event, options];\n}\n// To avoid the overhead of repeatedly calling Date.now(), we cache\n// and use the same timestamp for all event listeners attached in the same tick.\nlet cachedNow = 0;\nconst p = /*#__PURE__*/ Promise.resolve();\nconst getNow = () => cachedNow || (p.then(() => (cachedNow = 0)), (cachedNow = Date.now()));\nfunction createInvoker(initialValue, instance) {\n    const invoker = (e) => {\n        // async edge case vuejs/vue#6566\n        // inner click event triggers patch, event handler\n        // attached to outer element during patch, and triggered again. This\n        // happens because browsers fire microtask ticks between event propagation.\n        // this no longer happens for templates in Vue 3, but could still be\n        // theoretically possible for hand-written render functions.\n        // the solution: we save the timestamp when a handler is attached,\n        // and also attach the timestamp to any event that was handled by vue\n        // for the first time (to avoid inconsistent event timestamp implementations\n        // or events fired from iframes, e.g. #2513)\n        // The handler would only fire if the event passed to it was fired\n        // AFTER it was attached.\n        if (!e._vts) {\n            e._vts = Date.now();\n        }\n        else if (e._vts <= invoker.attached) {\n            return;\n        }\n        callWithAsyncErrorHandling(patchStopImmediatePropagation(e, invoker.value), instance, 5 /* ErrorCodes.NATIVE_EVENT_HANDLER */, [e]);\n    };\n    invoker.value = initialValue;\n    invoker.attached = getNow();\n    return invoker;\n}\nfunction patchStopImmediatePropagation(e, value) {\n    if (isArray(value)) {\n        const originalStop = e.stopImmediatePropagation;\n        e.stopImmediatePropagation = () => {\n            originalStop.call(e);\n            e._stopped = true;\n        };\n        return value.map(fn => (e) => !e._stopped && fn && fn(e));\n    }\n    else {\n        return value;\n    }\n}\n\nconst nativeOnRE = /^on[a-z]/;\nconst patchProp = (el, key, prevValue, nextValue, isSVG = false, prevChildren, parentComponent, parentSuspense, unmountChildren) => {\n    if (key === 'class') {\n        patchClass(el, nextValue, isSVG);\n    }\n    else if (key === 'style') {\n        patchStyle(el, prevValue, nextValue);\n    }\n    else if (isOn(key)) {\n        // ignore v-model listeners\n        if (!isModelListener(key)) {\n            patchEvent(el, key, prevValue, nextValue, parentComponent);\n        }\n    }\n    else if (key[0] === '.'\n        ? ((key = key.slice(1)), true)\n        : key[0] === '^'\n            ? ((key = key.slice(1)), false)\n            : shouldSetAsProp(el, key, nextValue, isSVG)) {\n        patchDOMProp(el, key, nextValue, prevChildren, parentComponent, parentSuspense, unmountChildren);\n    }\n    else {\n        // special case for <input v-model type=\"checkbox\"> with\n        // :true-value & :false-value\n        // store value as dom properties since non-string values will be\n        // stringified.\n        if (key === 'true-value') {\n            el._trueValue = nextValue;\n        }\n        else if (key === 'false-value') {\n            el._falseValue = nextValue;\n        }\n        patchAttr(el, key, nextValue, isSVG);\n    }\n};\nfunction shouldSetAsProp(el, key, value, isSVG) {\n    if (isSVG) {\n        // most keys must be set as attribute on svg elements to work\n        // ...except innerHTML & textContent\n        if (key === 'innerHTML' || key === 'textContent') {\n            return true;\n        }\n        // or native onclick with function values\n        if (key in el && nativeOnRE.test(key) && isFunction(value)) {\n            return true;\n        }\n        return false;\n    }\n    // these are enumerated attrs, however their corresponding DOM properties\n    // are actually booleans - this leads to setting it with a string \"false\"\n    // value leading it to be coerced to `true`, so we need to always treat\n    // them as attributes.\n    // Note that `contentEditable` doesn't have this problem: its DOM\n    // property is also enumerated string values.\n    if (key === 'spellcheck' || key === 'draggable' || key === 'translate') {\n        return false;\n    }\n    // #1787, #2840 form property on form elements is readonly and must be set as\n    // attribute.\n    if (key === 'form') {\n        return false;\n    }\n    // #1526 <input list> must be set as attribute\n    if (key === 'list' && el.tagName === 'INPUT') {\n        return false;\n    }\n    // #2766 <textarea type> must be set as attribute\n    if (key === 'type' && el.tagName === 'TEXTAREA') {\n        return false;\n    }\n    // native onclick with string value, must be set as attribute\n    if (nativeOnRE.test(key) && isString(value)) {\n        return false;\n    }\n    return key in el;\n}\n\nfunction defineCustomElement(options, hydrate) {\n    const Comp = defineComponent(options);\n    class VueCustomElement extends VueElement {\n        constructor(initialProps) {\n            super(Comp, initialProps, hydrate);\n        }\n    }\n    VueCustomElement.def = Comp;\n    return VueCustomElement;\n}\nconst defineSSRCustomElement = ((options) => {\n    // @ts-ignore\n    return defineCustomElement(options, hydrate);\n});\nconst BaseClass = (typeof HTMLElement !== 'undefined' ? HTMLElement : class {\n});\nclass VueElement extends BaseClass {\n    constructor(_def, _props = {}, hydrate) {\n        super();\n        this._def = _def;\n        this._props = _props;\n        /**\n         * @internal\n         */\n        this._instance = null;\n        this._connected = false;\n        this._resolved = false;\n        this._numberProps = null;\n        if (this.shadowRoot && hydrate) {\n            hydrate(this._createVNode(), this.shadowRoot);\n        }\n        else {\n            if (this.shadowRoot) {\n                warn(`Custom element has pre-rendered declarative shadow root but is not ` +\n                    `defined as hydratable. Use \\`defineSSRCustomElement\\`.`);\n            }\n            this.attachShadow({ mode: 'open' });\n            if (!this._def.__asyncLoader) {\n                // for sync component defs we can immediately resolve props\n                this._resolveProps(this._def);\n            }\n        }\n    }\n    connectedCallback() {\n        this._connected = true;\n        if (!this._instance) {\n            if (this._resolved) {\n                this._update();\n            }\n            else {\n                this._resolveDef();\n            }\n        }\n    }\n    disconnectedCallback() {\n        this._connected = false;\n        nextTick(() => {\n            if (!this._connected) {\n                render(null, this.shadowRoot);\n                this._instance = null;\n            }\n        });\n    }\n    /**\n     * resolve inner component definition (handle possible async component)\n     */\n    _resolveDef() {\n        this._resolved = true;\n        // set initial attrs\n        for (let i = 0; i < this.attributes.length; i++) {\n            this._setAttr(this.attributes[i].name);\n        }\n        // watch future attr changes\n        new MutationObserver(mutations => {\n            for (const m of mutations) {\n                this._setAttr(m.attributeName);\n            }\n        }).observe(this, { attributes: true });\n        const resolve = (def, isAsync = false) => {\n            const { props, styles } = def;\n            // cast Number-type props set before resolve\n            let numberProps;\n            if (props && !isArray(props)) {\n                for (const key in props) {\n                    const opt = props[key];\n                    if (opt === Number || (opt && opt.type === Number)) {\n                        if (key in this._props) {\n                            this._props[key] = toNumber(this._props[key]);\n                        }\n                        (numberProps || (numberProps = Object.create(null)))[camelize(key)] = true;\n                    }\n                }\n            }\n            this._numberProps = numberProps;\n            if (isAsync) {\n                // defining getter/setters on prototype\n                // for sync defs, this already happened in the constructor\n                this._resolveProps(def);\n            }\n            // apply CSS\n            this._applyStyles(styles);\n            // initial render\n            this._update();\n        };\n        const asyncDef = this._def.__asyncLoader;\n        if (asyncDef) {\n            asyncDef().then(def => resolve(def, true));\n        }\n        else {\n            resolve(this._def);\n        }\n    }\n    _resolveProps(def) {\n        const { props } = def;\n        const declaredPropKeys = isArray(props) ? props : Object.keys(props || {});\n        // check if there are props set pre-upgrade or connect\n        for (const key of Object.keys(this)) {\n            if (key[0] !== '_' && declaredPropKeys.includes(key)) {\n                this._setProp(key, this[key], true, false);\n            }\n        }\n        // defining getter/setters on prototype\n        for (const key of declaredPropKeys.map(camelize)) {\n            Object.defineProperty(this, key, {\n                get() {\n                    return this._getProp(key);\n                },\n                set(val) {\n                    this._setProp(key, val);\n                }\n            });\n        }\n    }\n    _setAttr(key) {\n        let value = this.getAttribute(key);\n        const camelKey = camelize(key);\n        if (this._numberProps && this._numberProps[camelKey]) {\n            value = toNumber(value);\n        }\n        this._setProp(camelKey, value, false);\n    }\n    /**\n     * @internal\n     */\n    _getProp(key) {\n        return this._props[key];\n    }\n    /**\n     * @internal\n     */\n    _setProp(key, val, shouldReflect = true, shouldUpdate = true) {\n        if (val !== this._props[key]) {\n            this._props[key] = val;\n            if (shouldUpdate && this._instance) {\n                this._update();\n            }\n            // reflect\n            if (shouldReflect) {\n                if (val === true) {\n                    this.setAttribute(hyphenate(key), '');\n                }\n                else if (typeof val === 'string' || typeof val === 'number') {\n                    this.setAttribute(hyphenate(key), val + '');\n                }\n                else if (!val) {\n                    this.removeAttribute(hyphenate(key));\n                }\n            }\n        }\n    }\n    _update() {\n        render(this._createVNode(), this.shadowRoot);\n    }\n    _createVNode() {\n        const vnode = createVNode(this._def, extend({}, this._props));\n        if (!this._instance) {\n            vnode.ce = instance => {\n                this._instance = instance;\n                instance.isCE = true;\n                // HMR\n                {\n                    instance.ceReload = newStyles => {\n                        // always reset styles\n                        if (this._styles) {\n                            this._styles.forEach(s => this.shadowRoot.removeChild(s));\n                            this._styles.length = 0;\n                        }\n                        this._applyStyles(newStyles);\n                        this._instance = null;\n                        this._update();\n                    };\n                }\n                const dispatch = (event, args) => {\n                    this.dispatchEvent(new CustomEvent(event, {\n                        detail: args\n                    }));\n                };\n                // intercept emit\n                instance.emit = (event, ...args) => {\n                    // dispatch both the raw and hyphenated versions of an event\n                    // to match Vue behavior\n                    dispatch(event, args);\n                    if (hyphenate(event) !== event) {\n                        dispatch(hyphenate(event), args);\n                    }\n                };\n                // locate nearest Vue custom element parent for provide/inject\n                let parent = this;\n                while ((parent =\n                    parent && (parent.parentNode || parent.host))) {\n                    if (parent instanceof VueElement) {\n                        instance.parent = parent._instance;\n                        instance.provides = parent._instance.provides;\n                        break;\n                    }\n                }\n            };\n        }\n        return vnode;\n    }\n    _applyStyles(styles) {\n        if (styles) {\n            styles.forEach(css => {\n                const s = document.createElement('style');\n                s.textContent = css;\n                this.shadowRoot.appendChild(s);\n                // record for HMR\n                {\n                    (this._styles || (this._styles = [])).push(s);\n                }\n            });\n        }\n    }\n}\n\nfunction useCssModule(name = '$style') {\n    /* istanbul ignore else */\n    {\n        const instance = getCurrentInstance();\n        if (!instance) {\n            warn(`useCssModule must be called inside setup()`);\n            return EMPTY_OBJ;\n        }\n        const modules = instance.type.__cssModules;\n        if (!modules) {\n            warn(`Current instance does not have CSS modules injected.`);\n            return EMPTY_OBJ;\n        }\n        const mod = modules[name];\n        if (!mod) {\n            warn(`Current instance does not have CSS module named \"${name}\".`);\n            return EMPTY_OBJ;\n        }\n        return mod;\n    }\n}\n\n/**\n * Runtime helper for SFC's CSS variable injection feature.\n * @private\n */\nfunction useCssVars(getter) {\n    const instance = getCurrentInstance();\n    /* istanbul ignore next */\n    if (!instance) {\n        warn(`useCssVars is called without current active component instance.`);\n        return;\n    }\n    const updateTeleports = (instance.ut = (vars = getter(instance.proxy)) => {\n        Array.from(document.querySelectorAll(`[data-v-owner=\"${instance.uid}\"]`)).forEach(node => setVarsOnNode(node, vars));\n    });\n    const setVars = () => {\n        const vars = getter(instance.proxy);\n        setVarsOnVNode(instance.subTree, vars);\n        updateTeleports(vars);\n    };\n    watchPostEffect(setVars);\n    onMounted(() => {\n        const ob = new MutationObserver(setVars);\n        ob.observe(instance.subTree.el.parentNode, { childList: true });\n        onUnmounted(() => ob.disconnect());\n    });\n}\nfunction setVarsOnVNode(vnode, vars) {\n    if (vnode.shapeFlag & 128 /* ShapeFlags.SUSPENSE */) {\n        const suspense = vnode.suspense;\n        vnode = suspense.activeBranch;\n        if (suspense.pendingBranch && !suspense.isHydrating) {\n            suspense.effects.push(() => {\n                setVarsOnVNode(suspense.activeBranch, vars);\n            });\n        }\n    }\n    // drill down HOCs until it's a non-component vnode\n    while (vnode.component) {\n        vnode = vnode.component.subTree;\n    }\n    if (vnode.shapeFlag & 1 /* ShapeFlags.ELEMENT */ && vnode.el) {\n        setVarsOnNode(vnode.el, vars);\n    }\n    else if (vnode.type === Fragment) {\n        vnode.children.forEach(c => setVarsOnVNode(c, vars));\n    }\n    else if (vnode.type === Static) {\n        let { el, anchor } = vnode;\n        while (el) {\n            setVarsOnNode(el, vars);\n            if (el === anchor)\n                break;\n            el = el.nextSibling;\n        }\n    }\n}\nfunction setVarsOnNode(el, vars) {\n    if (el.nodeType === 1) {\n        const style = el.style;\n        for (const key in vars) {\n            style.setProperty(`--${key}`, vars[key]);\n        }\n    }\n}\n\nconst TRANSITION = 'transition';\nconst ANIMATION = 'animation';\n// DOM Transition is a higher-order-component based on the platform-agnostic\n// base Transition component, with DOM-specific logic.\nconst Transition = (props, { slots }) => h(BaseTransition, resolveTransitionProps(props), slots);\nTransition.displayName = 'Transition';\nconst DOMTransitionPropsValidators = {\n    name: String,\n    type: String,\n    css: {\n        type: Boolean,\n        default: true\n    },\n    duration: [String, Number, Object],\n    enterFromClass: String,\n    enterActiveClass: String,\n    enterToClass: String,\n    appearFromClass: String,\n    appearActiveClass: String,\n    appearToClass: String,\n    leaveFromClass: String,\n    leaveActiveClass: String,\n    leaveToClass: String\n};\nconst TransitionPropsValidators = (Transition.props =\n    /*#__PURE__*/ extend({}, BaseTransition.props, DOMTransitionPropsValidators));\n/**\n * #3227 Incoming hooks may be merged into arrays when wrapping Transition\n * with custom HOCs.\n */\nconst callHook = (hook, args = []) => {\n    if (isArray(hook)) {\n        hook.forEach(h => h(...args));\n    }\n    else if (hook) {\n        hook(...args);\n    }\n};\n/**\n * Check if a hook expects a callback (2nd arg), which means the user\n * intends to explicitly control the end of the transition.\n */\nconst hasExplicitCallback = (hook) => {\n    return hook\n        ? isArray(hook)\n            ? hook.some(h => h.length > 1)\n            : hook.length > 1\n        : false;\n};\nfunction resolveTransitionProps(rawProps) {\n    const baseProps = {};\n    for (const key in rawProps) {\n        if (!(key in DOMTransitionPropsValidators)) {\n            baseProps[key] = rawProps[key];\n        }\n    }\n    if (rawProps.css === false) {\n        return baseProps;\n    }\n    const { name = 'v', type, duration, enterFromClass = `${name}-enter-from`, enterActiveClass = `${name}-enter-active`, enterToClass = `${name}-enter-to`, appearFromClass = enterFromClass, appearActiveClass = enterActiveClass, appearToClass = enterToClass, leaveFromClass = `${name}-leave-from`, leaveActiveClass = `${name}-leave-active`, leaveToClass = `${name}-leave-to` } = rawProps;\n    const durations = normalizeDuration(duration);\n    const enterDuration = durations && durations[0];\n    const leaveDuration = durations && durations[1];\n    const { onBeforeEnter, onEnter, onEnterCancelled, onLeave, onLeaveCancelled, onBeforeAppear = onBeforeEnter, onAppear = onEnter, onAppearCancelled = onEnterCancelled } = baseProps;\n    const finishEnter = (el, isAppear, done) => {\n        removeTransitionClass(el, isAppear ? appearToClass : enterToClass);\n        removeTransitionClass(el, isAppear ? appearActiveClass : enterActiveClass);\n        done && done();\n    };\n    const finishLeave = (el, done) => {\n        el._isLeaving = false;\n        removeTransitionClass(el, leaveFromClass);\n        removeTransitionClass(el, leaveToClass);\n        removeTransitionClass(el, leaveActiveClass);\n        done && done();\n    };\n    const makeEnterHook = (isAppear) => {\n        return (el, done) => {\n            const hook = isAppear ? onAppear : onEnter;\n            const resolve = () => finishEnter(el, isAppear, done);\n            callHook(hook, [el, resolve]);\n            nextFrame(() => {\n                removeTransitionClass(el, isAppear ? appearFromClass : enterFromClass);\n                addTransitionClass(el, isAppear ? appearToClass : enterToClass);\n                if (!hasExplicitCallback(hook)) {\n                    whenTransitionEnds(el, type, enterDuration, resolve);\n                }\n            });\n        };\n    };\n    return extend(baseProps, {\n        onBeforeEnter(el) {\n            callHook(onBeforeEnter, [el]);\n            addTransitionClass(el, enterFromClass);\n            addTransitionClass(el, enterActiveClass);\n        },\n        onBeforeAppear(el) {\n            callHook(onBeforeAppear, [el]);\n            addTransitionClass(el, appearFromClass);\n            addTransitionClass(el, appearActiveClass);\n        },\n        onEnter: makeEnterHook(false),\n        onAppear: makeEnterHook(true),\n        onLeave(el, done) {\n            el._isLeaving = true;\n            const resolve = () => finishLeave(el, done);\n            addTransitionClass(el, leaveFromClass);\n            // force reflow so *-leave-from classes immediately take effect (#2593)\n            forceReflow();\n            addTransitionClass(el, leaveActiveClass);\n            nextFrame(() => {\n                if (!el._isLeaving) {\n                    // cancelled\n                    return;\n                }\n                removeTransitionClass(el, leaveFromClass);\n                addTransitionClass(el, leaveToClass);\n                if (!hasExplicitCallback(onLeave)) {\n                    whenTransitionEnds(el, type, leaveDuration, resolve);\n                }\n            });\n            callHook(onLeave, [el, resolve]);\n        },\n        onEnterCancelled(el) {\n            finishEnter(el, false);\n            callHook(onEnterCancelled, [el]);\n        },\n        onAppearCancelled(el) {\n            finishEnter(el, true);\n            callHook(onAppearCancelled, [el]);\n        },\n        onLeaveCancelled(el) {\n            finishLeave(el);\n            callHook(onLeaveCancelled, [el]);\n        }\n    });\n}\nfunction normalizeDuration(duration) {\n    if (duration == null) {\n        return null;\n    }\n    else if (isObject(duration)) {\n        return [NumberOf(duration.enter), NumberOf(duration.leave)];\n    }\n    else {\n        const n = NumberOf(duration);\n        return [n, n];\n    }\n}\nfunction NumberOf(val) {\n    const res = toNumber(val);\n    {\n        assertNumber(res, '<transition> explicit duration');\n    }\n    return res;\n}\nfunction addTransitionClass(el, cls) {\n    cls.split(/\\s+/).forEach(c => c && el.classList.add(c));\n    (el._vtc ||\n        (el._vtc = new Set())).add(cls);\n}\nfunction removeTransitionClass(el, cls) {\n    cls.split(/\\s+/).forEach(c => c && el.classList.remove(c));\n    const { _vtc } = el;\n    if (_vtc) {\n        _vtc.delete(cls);\n        if (!_vtc.size) {\n            el._vtc = undefined;\n        }\n    }\n}\nfunction nextFrame(cb) {\n    requestAnimationFrame(() => {\n        requestAnimationFrame(cb);\n    });\n}\nlet endId = 0;\nfunction whenTransitionEnds(el, expectedType, explicitTimeout, resolve) {\n    const id = (el._endId = ++endId);\n    const resolveIfNotStale = () => {\n        if (id === el._endId) {\n            resolve();\n        }\n    };\n    if (explicitTimeout) {\n        return setTimeout(resolveIfNotStale, explicitTimeout);\n    }\n    const { type, timeout, propCount } = getTransitionInfo(el, expectedType);\n    if (!type) {\n        return resolve();\n    }\n    const endEvent = type + 'end';\n    let ended = 0;\n    const end = () => {\n        el.removeEventListener(endEvent, onEnd);\n        resolveIfNotStale();\n    };\n    const onEnd = (e) => {\n        if (e.target === el && ++ended >= propCount) {\n            end();\n        }\n    };\n    setTimeout(() => {\n        if (ended < propCount) {\n            end();\n        }\n    }, timeout + 1);\n    el.addEventListener(endEvent, onEnd);\n}\nfunction getTransitionInfo(el, expectedType) {\n    const styles = window.getComputedStyle(el);\n    // JSDOM may return undefined for transition properties\n    const getStyleProperties = (key) => (styles[key] || '').split(', ');\n    const transitionDelays = getStyleProperties(`${TRANSITION}Delay`);\n    const transitionDurations = getStyleProperties(`${TRANSITION}Duration`);\n    const transitionTimeout = getTimeout(transitionDelays, transitionDurations);\n    const animationDelays = getStyleProperties(`${ANIMATION}Delay`);\n    const animationDurations = getStyleProperties(`${ANIMATION}Duration`);\n    const animationTimeout = getTimeout(animationDelays, animationDurations);\n    let type = null;\n    let timeout = 0;\n    let propCount = 0;\n    /* istanbul ignore if */\n    if (expectedType === TRANSITION) {\n        if (transitionTimeout > 0) {\n            type = TRANSITION;\n            timeout = transitionTimeout;\n            propCount = transitionDurations.length;\n        }\n    }\n    else if (expectedType === ANIMATION) {\n        if (animationTimeout > 0) {\n            type = ANIMATION;\n            timeout = animationTimeout;\n            propCount = animationDurations.length;\n        }\n    }\n    else {\n        timeout = Math.max(transitionTimeout, animationTimeout);\n        type =\n            timeout > 0\n                ? transitionTimeout > animationTimeout\n                    ? TRANSITION\n                    : ANIMATION\n                : null;\n        propCount = type\n            ? type === TRANSITION\n                ? transitionDurations.length\n                : animationDurations.length\n            : 0;\n    }\n    const hasTransform = type === TRANSITION &&\n        /\\b(transform|all)(,|$)/.test(getStyleProperties(`${TRANSITION}Property`).toString());\n    return {\n        type,\n        timeout,\n        propCount,\n        hasTransform\n    };\n}\nfunction getTimeout(delays, durations) {\n    while (delays.length < durations.length) {\n        delays = delays.concat(delays);\n    }\n    return Math.max(...durations.map((d, i) => toMs(d) + toMs(delays[i])));\n}\n// Old versions of Chromium (below 61.0.3163.100) formats floating pointer\n// numbers in a locale-dependent way, using a comma instead of a dot.\n// If comma is not replaced with a dot, the input will be rounded down\n// (i.e. acting as a floor function) causing unexpected behaviors\nfunction toMs(s) {\n    return Number(s.slice(0, -1).replace(',', '.')) * 1000;\n}\n// synchronously force layout to put elements into a certain state\nfunction forceReflow() {\n    return document.body.offsetHeight;\n}\n\nconst positionMap = new WeakMap();\nconst newPositionMap = new WeakMap();\nconst TransitionGroupImpl = {\n    name: 'TransitionGroup',\n    props: /*#__PURE__*/ extend({}, TransitionPropsValidators, {\n        tag: String,\n        moveClass: String\n    }),\n    setup(props, { slots }) {\n        const instance = getCurrentInstance();\n        const state = useTransitionState();\n        let prevChildren;\n        let children;\n        onUpdated(() => {\n            // children is guaranteed to exist after initial render\n            if (!prevChildren.length) {\n                return;\n            }\n            const moveClass = props.moveClass || `${props.name || 'v'}-move`;\n            if (!hasCSSTransform(prevChildren[0].el, instance.vnode.el, moveClass)) {\n                return;\n            }\n            // we divide the work into three loops to avoid mixing DOM reads and writes\n            // in each iteration - which helps prevent layout thrashing.\n            prevChildren.forEach(callPendingCbs);\n            prevChildren.forEach(recordPosition);\n            const movedChildren = prevChildren.filter(applyTranslation);\n            // force reflow to put everything in position\n            forceReflow();\n            movedChildren.forEach(c => {\n                const el = c.el;\n                const style = el.style;\n                addTransitionClass(el, moveClass);\n                style.transform = style.webkitTransform = style.transitionDuration = '';\n                const cb = (el._moveCb = (e) => {\n                    if (e && e.target !== el) {\n                        return;\n                    }\n                    if (!e || /transform$/.test(e.propertyName)) {\n                        el.removeEventListener('transitionend', cb);\n                        el._moveCb = null;\n                        removeTransitionClass(el, moveClass);\n                    }\n                });\n                el.addEventListener('transitionend', cb);\n            });\n        });\n        return () => {\n            const rawProps = toRaw(props);\n            const cssTransitionProps = resolveTransitionProps(rawProps);\n            let tag = rawProps.tag || Fragment;\n            prevChildren = children;\n            children = slots.default ? getTransitionRawChildren(slots.default()) : [];\n            for (let i = 0; i < children.length; i++) {\n                const child = children[i];\n                if (child.key != null) {\n                    setTransitionHooks(child, resolveTransitionHooks(child, cssTransitionProps, state, instance));\n                }\n                else {\n                    warn(`<TransitionGroup> children must be keyed.`);\n                }\n            }\n            if (prevChildren) {\n                for (let i = 0; i < prevChildren.length; i++) {\n                    const child = prevChildren[i];\n                    setTransitionHooks(child, resolveTransitionHooks(child, cssTransitionProps, state, instance));\n                    positionMap.set(child, child.el.getBoundingClientRect());\n                }\n            }\n            return createVNode(tag, null, children);\n        };\n    }\n};\n/**\n * TransitionGroup does not support \"mode\" so we need to remove it from the\n * props declarations, but direct delete operation is considered a side effect\n * and will make the entire transition feature non-tree-shakeable, so we do it\n * in a function and mark the function's invocation as pure.\n */\nconst removeMode = (props) => delete props.mode;\n/*#__PURE__*/ removeMode(TransitionGroupImpl.props);\nconst TransitionGroup = TransitionGroupImpl;\nfunction callPendingCbs(c) {\n    const el = c.el;\n    if (el._moveCb) {\n        el._moveCb();\n    }\n    if (el._enterCb) {\n        el._enterCb();\n    }\n}\nfunction recordPosition(c) {\n    newPositionMap.set(c, c.el.getBoundingClientRect());\n}\nfunction applyTranslation(c) {\n    const oldPos = positionMap.get(c);\n    const newPos = newPositionMap.get(c);\n    const dx = oldPos.left - newPos.left;\n    const dy = oldPos.top - newPos.top;\n    if (dx || dy) {\n        const s = c.el.style;\n        s.transform = s.webkitTransform = `translate(${dx}px,${dy}px)`;\n        s.transitionDuration = '0s';\n        return c;\n    }\n}\nfunction hasCSSTransform(el, root, moveClass) {\n    // Detect whether an element with the move class applied has\n    // CSS transitions. Since the element may be inside an entering\n    // transition at this very moment, we make a clone of it and remove\n    // all other transition classes applied to ensure only the move class\n    // is applied.\n    const clone = el.cloneNode();\n    if (el._vtc) {\n        el._vtc.forEach(cls => {\n            cls.split(/\\s+/).forEach(c => c && clone.classList.remove(c));\n        });\n    }\n    moveClass.split(/\\s+/).forEach(c => c && clone.classList.add(c));\n    clone.style.display = 'none';\n    const container = (root.nodeType === 1 ? root : root.parentNode);\n    container.appendChild(clone);\n    const { hasTransform } = getTransitionInfo(clone);\n    container.removeChild(clone);\n    return hasTransform;\n}\n\nconst getModelAssigner = (vnode) => {\n    const fn = vnode.props['onUpdate:modelValue'] ||\n        (false );\n    return isArray(fn) ? value => invokeArrayFns(fn, value) : fn;\n};\nfunction onCompositionStart(e) {\n    e.target.composing = true;\n}\nfunction onCompositionEnd(e) {\n    const target = e.target;\n    if (target.composing) {\n        target.composing = false;\n        target.dispatchEvent(new Event('input'));\n    }\n}\n// We are exporting the v-model runtime directly as vnode hooks so that it can\n// be tree-shaken in case v-model is never used.\nconst vModelText = {\n    created(el, { modifiers: { lazy, trim, number } }, vnode) {\n        el._assign = getModelAssigner(vnode);\n        const castToNumber = number || (vnode.props && vnode.props.type === 'number');\n        addEventListener(el, lazy ? 'change' : 'input', e => {\n            if (e.target.composing)\n                return;\n            let domValue = el.value;\n            if (trim) {\n                domValue = domValue.trim();\n            }\n            if (castToNumber) {\n                domValue = looseToNumber(domValue);\n            }\n            el._assign(domValue);\n        });\n        if (trim) {\n            addEventListener(el, 'change', () => {\n                el.value = el.value.trim();\n            });\n        }\n        if (!lazy) {\n            addEventListener(el, 'compositionstart', onCompositionStart);\n            addEventListener(el, 'compositionend', onCompositionEnd);\n            // Safari < 10.2 & UIWebView doesn't fire compositionend when\n            // switching focus before confirming composition choice\n            // this also fixes the issue where some browsers e.g. iOS Chrome\n            // fires \"change\" instead of \"input\" on autocomplete.\n            addEventListener(el, 'change', onCompositionEnd);\n        }\n    },\n    // set value on mounted so it's after min/max for type=\"range\"\n    mounted(el, { value }) {\n        el.value = value == null ? '' : value;\n    },\n    beforeUpdate(el, { value, modifiers: { lazy, trim, number } }, vnode) {\n        el._assign = getModelAssigner(vnode);\n        // avoid clearing unresolved text. #2302\n        if (el.composing)\n            return;\n        if (document.activeElement === el && el.type !== 'range') {\n            if (lazy) {\n                return;\n            }\n            if (trim && el.value.trim() === value) {\n                return;\n            }\n            if ((number || el.type === 'number') &&\n                looseToNumber(el.value) === value) {\n                return;\n            }\n        }\n        const newValue = value == null ? '' : value;\n        if (el.value !== newValue) {\n            el.value = newValue;\n        }\n    }\n};\nconst vModelCheckbox = {\n    // #4096 array checkboxes need to be deep traversed\n    deep: true,\n    created(el, _, vnode) {\n        el._assign = getModelAssigner(vnode);\n        addEventListener(el, 'change', () => {\n            const modelValue = el._modelValue;\n            const elementValue = getValue(el);\n            const checked = el.checked;\n            const assign = el._assign;\n            if (isArray(modelValue)) {\n                const index = looseIndexOf(modelValue, elementValue);\n                const found = index !== -1;\n                if (checked && !found) {\n                    assign(modelValue.concat(elementValue));\n                }\n                else if (!checked && found) {\n                    const filtered = [...modelValue];\n                    filtered.splice(index, 1);\n                    assign(filtered);\n                }\n            }\n            else if (isSet(modelValue)) {\n                const cloned = new Set(modelValue);\n                if (checked) {\n                    cloned.add(elementValue);\n                }\n                else {\n                    cloned.delete(elementValue);\n                }\n                assign(cloned);\n            }\n            else {\n                assign(getCheckboxValue(el, checked));\n            }\n        });\n    },\n    // set initial checked on mount to wait for true-value/false-value\n    mounted: setChecked,\n    beforeUpdate(el, binding, vnode) {\n        el._assign = getModelAssigner(vnode);\n        setChecked(el, binding, vnode);\n    }\n};\nfunction setChecked(el, { value, oldValue }, vnode) {\n    el._modelValue = value;\n    if (isArray(value)) {\n        el.checked = looseIndexOf(value, vnode.props.value) > -1;\n    }\n    else if (isSet(value)) {\n        el.checked = value.has(vnode.props.value);\n    }\n    else if (value !== oldValue) {\n        el.checked = looseEqual(value, getCheckboxValue(el, true));\n    }\n}\nconst vModelRadio = {\n    created(el, { value }, vnode) {\n        el.checked = looseEqual(value, vnode.props.value);\n        el._assign = getModelAssigner(vnode);\n        addEventListener(el, 'change', () => {\n            el._assign(getValue(el));\n        });\n    },\n    beforeUpdate(el, { value, oldValue }, vnode) {\n        el._assign = getModelAssigner(vnode);\n        if (value !== oldValue) {\n            el.checked = looseEqual(value, vnode.props.value);\n        }\n    }\n};\nconst vModelSelect = {\n    // <select multiple> value need to be deep traversed\n    deep: true,\n    created(el, { value, modifiers: { number } }, vnode) {\n        const isSetModel = isSet(value);\n        addEventListener(el, 'change', () => {\n            const selectedVal = Array.prototype.filter\n                .call(el.options, (o) => o.selected)\n                .map((o) => number ? looseToNumber(getValue(o)) : getValue(o));\n            el._assign(el.multiple\n                ? isSetModel\n                    ? new Set(selectedVal)\n                    : selectedVal\n                : selectedVal[0]);\n        });\n        el._assign = getModelAssigner(vnode);\n    },\n    // set value in mounted & updated because <select> relies on its children\n    // <option>s.\n    mounted(el, { value }) {\n        setSelected(el, value);\n    },\n    beforeUpdate(el, _binding, vnode) {\n        el._assign = getModelAssigner(vnode);\n    },\n    updated(el, { value }) {\n        setSelected(el, value);\n    }\n};\nfunction setSelected(el, value) {\n    const isMultiple = el.multiple;\n    if (isMultiple && !isArray(value) && !isSet(value)) {\n        warn(`<select multiple v-model> expects an Array or Set value for its binding, ` +\n                `but got ${Object.prototype.toString.call(value).slice(8, -1)}.`);\n        return;\n    }\n    for (let i = 0, l = el.options.length; i < l; i++) {\n        const option = el.options[i];\n        const optionValue = getValue(option);\n        if (isMultiple) {\n            if (isArray(value)) {\n                option.selected = looseIndexOf(value, optionValue) > -1;\n            }\n            else {\n                option.selected = value.has(optionValue);\n            }\n        }\n        else {\n            if (looseEqual(getValue(option), value)) {\n                if (el.selectedIndex !== i)\n                    el.selectedIndex = i;\n                return;\n            }\n        }\n    }\n    if (!isMultiple && el.selectedIndex !== -1) {\n        el.selectedIndex = -1;\n    }\n}\n// retrieve raw value set via :value bindings\nfunction getValue(el) {\n    return '_value' in el ? el._value : el.value;\n}\n// retrieve raw value for true-value and false-value set via :true-value or :false-value bindings\nfunction getCheckboxValue(el, checked) {\n    const key = checked ? '_trueValue' : '_falseValue';\n    return key in el ? el[key] : checked;\n}\nconst vModelDynamic = {\n    created(el, binding, vnode) {\n        callModelHook(el, binding, vnode, null, 'created');\n    },\n    mounted(el, binding, vnode) {\n        callModelHook(el, binding, vnode, null, 'mounted');\n    },\n    beforeUpdate(el, binding, vnode, prevVNode) {\n        callModelHook(el, binding, vnode, prevVNode, 'beforeUpdate');\n    },\n    updated(el, binding, vnode, prevVNode) {\n        callModelHook(el, binding, vnode, prevVNode, 'updated');\n    }\n};\nfunction resolveDynamicModel(tagName, type) {\n    switch (tagName) {\n        case 'SELECT':\n            return vModelSelect;\n        case 'TEXTAREA':\n            return vModelText;\n        default:\n            switch (type) {\n                case 'checkbox':\n                    return vModelCheckbox;\n                case 'radio':\n                    return vModelRadio;\n                default:\n                    return vModelText;\n            }\n    }\n}\nfunction callModelHook(el, binding, vnode, prevVNode, hook) {\n    const modelToUse = resolveDynamicModel(el.tagName, vnode.props && vnode.props.type);\n    const fn = modelToUse[hook];\n    fn && fn(el, binding, vnode, prevVNode);\n}\n\nconst systemModifiers = ['ctrl', 'shift', 'alt', 'meta'];\nconst modifierGuards = {\n    stop: e => e.stopPropagation(),\n    prevent: e => e.preventDefault(),\n    self: e => e.target !== e.currentTarget,\n    ctrl: e => !e.ctrlKey,\n    shift: e => !e.shiftKey,\n    alt: e => !e.altKey,\n    meta: e => !e.metaKey,\n    left: e => 'button' in e && e.button !== 0,\n    middle: e => 'button' in e && e.button !== 1,\n    right: e => 'button' in e && e.button !== 2,\n    exact: (e, modifiers) => systemModifiers.some(m => e[`${m}Key`] && !modifiers.includes(m))\n};\n/**\n * @private\n */\nconst withModifiers = (fn, modifiers) => {\n    return (event, ...args) => {\n        for (let i = 0; i < modifiers.length; i++) {\n            const guard = modifierGuards[modifiers[i]];\n            if (guard && guard(event, modifiers))\n                return;\n        }\n        return fn(event, ...args);\n    };\n};\n// Kept for 2.x compat.\n// Note: IE11 compat for `spacebar` and `del` is removed for now.\nconst keyNames = {\n    esc: 'escape',\n    space: ' ',\n    up: 'arrow-up',\n    left: 'arrow-left',\n    right: 'arrow-right',\n    down: 'arrow-down',\n    delete: 'backspace'\n};\n/**\n * @private\n */\nconst withKeys = (fn, modifiers) => {\n    return (event) => {\n        if (!('key' in event)) {\n            return;\n        }\n        const eventKey = hyphenate(event.key);\n        if (modifiers.some(k => k === eventKey || keyNames[k] === eventKey)) {\n            return fn(event);\n        }\n    };\n};\n\nconst vShow = {\n    beforeMount(el, { value }, { transition }) {\n        el._vod = el.style.display === 'none' ? '' : el.style.display;\n        if (transition && value) {\n            transition.beforeEnter(el);\n        }\n        else {\n            setDisplay(el, value);\n        }\n    },\n    mounted(el, { value }, { transition }) {\n        if (transition && value) {\n            transition.enter(el);\n        }\n    },\n    updated(el, { value, oldValue }, { transition }) {\n        if (!value === !oldValue)\n            return;\n        if (transition) {\n            if (value) {\n                transition.beforeEnter(el);\n                setDisplay(el, true);\n                transition.enter(el);\n            }\n            else {\n                transition.leave(el, () => {\n                    setDisplay(el, false);\n                });\n            }\n        }\n        else {\n            setDisplay(el, value);\n        }\n    },\n    beforeUnmount(el, { value }) {\n        setDisplay(el, value);\n    }\n};\nfunction setDisplay(el, value) {\n    el.style.display = value ? el._vod : 'none';\n}\n\nconst rendererOptions = /*#__PURE__*/ extend({ patchProp }, nodeOps);\n// lazy create the renderer - this makes core renderer logic tree-shakable\n// in case the user only imports reactivity utilities from Vue.\nlet renderer;\nlet enabledHydration = false;\nfunction ensureRenderer() {\n    return (renderer ||\n        (renderer = createRenderer(rendererOptions)));\n}\nfunction ensureHydrationRenderer() {\n    renderer = enabledHydration\n        ? renderer\n        : createHydrationRenderer(rendererOptions);\n    enabledHydration = true;\n    return renderer;\n}\n// use explicit type casts here to avoid import() calls in rolled-up d.ts\nconst render = ((...args) => {\n    ensureRenderer().render(...args);\n});\nconst hydrate = ((...args) => {\n    ensureHydrationRenderer().hydrate(...args);\n});\nconst createApp = ((...args) => {\n    const app = ensureRenderer().createApp(...args);\n    {\n        injectNativeTagCheck(app);\n        injectCompilerOptionsCheck(app);\n    }\n    const { mount } = app;\n    app.mount = (containerOrSelector) => {\n        const container = normalizeContainer(containerOrSelector);\n        if (!container)\n            return;\n        const component = app._component;\n        if (!isFunction(component) && !component.render && !component.template) {\n            // __UNSAFE__\n            // Reason: potential execution of JS expressions in in-DOM template.\n            // The user must make sure the in-DOM template is trusted. If it's\n            // rendered by the server, the template should not contain any user data.\n            component.template = container.innerHTML;\n        }\n        // clear content before mounting\n        container.innerHTML = '';\n        const proxy = mount(container, false, container instanceof SVGElement);\n        if (container instanceof Element) {\n            container.removeAttribute('v-cloak');\n            container.setAttribute('data-v-app', '');\n        }\n        return proxy;\n    };\n    return app;\n});\nconst createSSRApp = ((...args) => {\n    const app = ensureHydrationRenderer().createApp(...args);\n    {\n        injectNativeTagCheck(app);\n        injectCompilerOptionsCheck(app);\n    }\n    const { mount } = app;\n    app.mount = (containerOrSelector) => {\n        const container = normalizeContainer(containerOrSelector);\n        if (container) {\n            return mount(container, true, container instanceof SVGElement);\n        }\n    };\n    return app;\n});\nfunction injectNativeTagCheck(app) {\n    // Inject `isNativeTag`\n    // this is used for component name validation (dev only)\n    Object.defineProperty(app.config, 'isNativeTag', {\n        value: (tag) => isHTMLTag(tag) || isSVGTag(tag),\n        writable: false\n    });\n}\n// dev only\nfunction injectCompilerOptionsCheck(app) {\n    if (isRuntimeOnly()) {\n        const isCustomElement = app.config.isCustomElement;\n        Object.defineProperty(app.config, 'isCustomElement', {\n            get() {\n                return isCustomElement;\n            },\n            set() {\n                warn(`The \\`isCustomElement\\` config option is deprecated. Use ` +\n                    `\\`compilerOptions.isCustomElement\\` instead.`);\n            }\n        });\n        const compilerOptions = app.config.compilerOptions;\n        const msg = `The \\`compilerOptions\\` config option is only respected when using ` +\n            `a build of Vue.js that includes the runtime compiler (aka \"full build\"). ` +\n            `Since you are using the runtime-only build, \\`compilerOptions\\` ` +\n            `must be passed to \\`@vue/compiler-dom\\` in the build setup instead.\\n` +\n            `- For vue-loader: pass it via vue-loader's \\`compilerOptions\\` loader option.\\n` +\n            `- For vue-cli: see https://cli.vuejs.org/guide/webpack.html#modifying-options-of-a-loader\\n` +\n            `- For vite: pass it via @vitejs/plugin-vue options. See https://github.com/vitejs/vite/tree/main/packages/plugin-vue#example-for-passing-options-to-vuecompiler-dom`;\n        Object.defineProperty(app.config, 'compilerOptions', {\n            get() {\n                warn(msg);\n                return compilerOptions;\n            },\n            set() {\n                warn(msg);\n            }\n        });\n    }\n}\nfunction normalizeContainer(container) {\n    if (isString(container)) {\n        const res = document.querySelector(container);\n        if (!res) {\n            warn(`Failed to mount app: mount target selector \"${container}\" returned null.`);\n        }\n        return res;\n    }\n    if (window.ShadowRoot &&\n        container instanceof window.ShadowRoot &&\n        container.mode === 'closed') {\n        warn(`mounting on a ShadowRoot with \\`{mode: \"closed\"}\\` may lead to unpredictable bugs`);\n    }\n    return container;\n}\n/**\n * @internal\n */\nconst initDirectivesForSSR = NOOP;\n\nexport { BaseTransition, Comment, EffectScope, Fragment, KeepAlive, ReactiveEffect, Static, Suspense, Teleport, Text, Transition, TransitionGroup, VueElement, assertNumber, callWithAsyncErrorHandling, callWithErrorHandling, camelize, capitalize, cloneVNode, compatUtils, computed, createApp, createBlock, createCommentVNode, createElementBlock, createBaseVNode as createElementVNode, createHydrationRenderer, createPropsRestProxy, createRenderer, createSSRApp, createSlots, createStaticVNode, createTextVNode, createVNode, customRef, defineAsyncComponent, defineComponent, defineCustomElement, defineEmits, defineExpose, defineProps, defineSSRCustomElement, devtools, effect, effectScope, getCurrentInstance, getCurrentScope, getTransitionRawChildren, guardReactiveProps, h, handleError, hydrate, initCustomFormatter, initDirectivesForSSR, inject, isMemoSame, isProxy, isReactive, isReadonly, isRef, isRuntimeOnly, isShallow, isVNode, markRaw, mergeDefaults, mergeProps, nextTick, normalizeClass, normalizeProps, normalizeStyle, onActivated, onBeforeMount, onBeforeUnmount, onBeforeUpdate, onDeactivated, onErrorCaptured, onMounted, onRenderTracked, onRenderTriggered, onScopeDispose, onServerPrefetch, onUnmounted, onUpdated, openBlock, popScopeId, provide, proxyRefs, pushScopeId, queuePostFlushCb, reactive, readonly, ref, registerRuntimeCompiler, render, renderList, renderSlot, resolveComponent, resolveDirective, resolveDynamicComponent, resolveFilter, resolveTransitionHooks, setBlockTracking, setDevtoolsHook, setTransitionHooks, shallowReactive, shallowReadonly, shallowRef, ssrContextKey, ssrUtils, stop, toDisplayString, toHandlerKey, toHandlers, toRaw, toRef, toRefs, transformVNodeArgs, triggerRef, unref, useAttrs, useCssModule, useCssVars, useSSRContext, useSlots, useTransitionState, vModelCheckbox, vModelDynamic, vModelRadio, vModelSelect, vModelText, vShow, version, warn, watch, watchEffect, watchPostEffect, watchSyncEffect, withAsyncContext, withCtx, withDefaults, withDirectives, withKeys, withMemo, withModifiers, withScopeId };\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QHZ1ZS9zZXJ2ZXItcmVuZGVyZXJAMy4yLjQ3",
    "content": "/dist/server-renderer.cjs.jsŘg'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar Vue = require('vue');\nvar shared = require('@vue/shared');\nvar compilerSsr = require('@vue/compiler-ssr');\n\nfunction _interopNamespaceDefault(e) {\n  var n = Object.create(null);\n  if (e) {\n    for (var k in e) {\n      n[k] = e[k];\n    }\n  }\n  n.default = e;\n  return Object.freeze(n);\n}\n\nvar Vue__namespace = /*#__PURE__*/_interopNamespaceDefault(Vue);\n\n// leading comma for empty string \"\"\nconst shouldIgnoreProp = shared.makeMap(`,key,ref,innerHTML,textContent,ref_key,ref_for`);\nfunction ssrRenderAttrs(props, tag) {\n    let ret = '';\n    for (const key in props) {\n        if (shouldIgnoreProp(key) ||\n            shared.isOn(key) ||\n            (tag === 'textarea' && key === 'value')) {\n            continue;\n        }\n        const value = props[key];\n        if (key === 'class') {\n            ret += ` class=\"${ssrRenderClass(value)}\"`;\n        }\n        else if (key === 'style') {\n            ret += ` style=\"${ssrRenderStyle(value)}\"`;\n        }\n        else {\n            ret += ssrRenderDynamicAttr(key, value, tag);\n        }\n    }\n    return ret;\n}\n// render an attr with dynamic (unknown) key.\nfunction ssrRenderDynamicAttr(key, value, tag) {\n    if (!isRenderableValue(value)) {\n        return ``;\n    }\n    const attrKey = tag && (tag.indexOf('-') > 0 || shared.isSVGTag(tag))\n        ? key // preserve raw name on custom elements and svg\n        : shared.propsToAttrMap[key] || key.toLowerCase();\n    if (shared.isBooleanAttr(attrKey)) {\n        return shared.includeBooleanAttr(value) ? ` ${attrKey}` : ``;\n    }\n    else if (shared.isSSRSafeAttrName(attrKey)) {\n        return value === '' ? ` ${attrKey}` : ` ${attrKey}=\"${shared.escapeHtml(value)}\"`;\n    }\n    else {\n        console.warn(`[@vue/server-renderer] Skipped rendering unsafe attribute name: ${attrKey}`);\n        return ``;\n    }\n}\n// Render a v-bind attr with static key. The key is pre-processed at compile\n// time and we only need to check and escape value.\nfunction ssrRenderAttr(key, value) {\n    if (!isRenderableValue(value)) {\n        return ``;\n    }\n    return ` ${key}=\"${shared.escapeHtml(value)}\"`;\n}\nfunction isRenderableValue(value) {\n    if (value == null) {\n        return false;\n    }\n    const type = typeof value;\n    return type === 'string' || type === 'number' || type === 'boolean';\n}\nfunction ssrRenderClass(raw) {\n    return shared.escapeHtml(shared.normalizeClass(raw));\n}\nfunction ssrRenderStyle(raw) {\n    if (!raw) {\n        return '';\n    }\n    if (shared.isString(raw)) {\n        return shared.escapeHtml(raw);\n    }\n    const styles = shared.normalizeStyle(raw);\n    return shared.escapeHtml(shared.stringifyStyle(styles));\n}\n\nfunction ssrRenderComponent(comp, props = null, children = null, parentComponent = null, slotScopeId) {\n    return renderComponentVNode(Vue.createVNode(comp, props, children), parentComponent, slotScopeId);\n}\n\nfunction ssrRenderSlot(slots, slotName, slotProps, fallbackRenderFn, push, parentComponent, slotScopeId) {\n    // template-compiled slots are always rendered as fragments\n    push(`<!--[-->`);\n    ssrRenderSlotInner(slots, slotName, slotProps, fallbackRenderFn, push, parentComponent, slotScopeId);\n    push(`<!--]-->`);\n}\nfunction ssrRenderSlotInner(slots, slotName, slotProps, fallbackRenderFn, push, parentComponent, slotScopeId, transition) {\n    const slotFn = slots[slotName];\n    if (slotFn) {\n        const slotBuffer = [];\n        const bufferedPush = (item) => {\n            slotBuffer.push(item);\n        };\n        const ret = slotFn(slotProps, bufferedPush, parentComponent, slotScopeId ? ' ' + slotScopeId : '');\n        if (shared.isArray(ret)) {\n            // normal slot\n            renderVNodeChildren(push, ret, parentComponent, slotScopeId);\n        }\n        else {\n            // ssr slot.\n            // check if the slot renders all comments, in which case use the fallback\n            let isEmptySlot = true;\n            if (transition) {\n                isEmptySlot = false;\n            }\n            else {\n                for (let i = 0; i < slotBuffer.length; i++) {\n                    if (!isComment(slotBuffer[i])) {\n                        isEmptySlot = false;\n                        break;\n                    }\n                }\n            }\n            if (isEmptySlot) {\n                if (fallbackRenderFn) {\n                    fallbackRenderFn();\n                }\n            }\n            else {\n                for (let i = 0; i < slotBuffer.length; i++) {\n                    push(slotBuffer[i]);\n                }\n            }\n        }\n    }\n    else if (fallbackRenderFn) {\n        fallbackRenderFn();\n    }\n}\nconst commentTestRE = /^<!--.*-->$/s;\nconst commentRE = /<!--[^]*?-->/gm;\nfunction isComment(item) {\n    if (typeof item !== 'string' || !commentTestRE.test(item))\n        return false;\n    // if item is '<!---->' or '<!--[-->' or '<!--]-->', return true directly\n    if (item.length <= 8)\n        return true;\n    return !item.replace(commentRE, '').trim();\n}\n\nfunction ssrRenderTeleport(parentPush, contentRenderFn, target, disabled, parentComponent) {\n    parentPush('<!--teleport start-->');\n    const context = parentComponent.appContext.provides[Vue.ssrContextKey];\n    const teleportBuffers = context.__teleportBuffers || (context.__teleportBuffers = {});\n    const targetBuffer = teleportBuffers[target] || (teleportBuffers[target] = []);\n    // record current index of the target buffer to handle nested teleports\n    // since the parent needs to be rendered before the child\n    const bufferIndex = targetBuffer.length;\n    let teleportContent;\n    if (disabled) {\n        contentRenderFn(parentPush);\n        teleportContent = `<!--teleport anchor-->`;\n    }\n    else {\n        const { getBuffer, push } = createBuffer();\n        contentRenderFn(push);\n        push(`<!--teleport anchor-->`);\n        teleportContent = getBuffer();\n    }\n    targetBuffer.splice(bufferIndex, 0, teleportContent);\n    parentPush('<!--teleport end-->');\n}\n\nfunction ssrInterpolate(value) {\n    return shared.escapeHtml(shared.toDisplayString(value));\n}\n\nlet shouldTrack = true;\nconst trackStack = [];\nfunction pauseTracking() {\n    trackStack.push(shouldTrack);\n    shouldTrack = false;\n}\nfunction resetTracking() {\n    const last = trackStack.pop();\n    shouldTrack = last === undefined ? true : last;\n}\n\nfunction toRaw(observed) {\n    const raw = observed && observed[\"__v_raw\" /* ReactiveFlags.RAW */];\n    return raw ? toRaw(raw) : observed;\n}\n\nfunction isRef(r) {\n    return !!(r && r.__v_isRef === true);\n}\n\nconst stack = [];\nfunction pushWarningContext(vnode) {\n    stack.push(vnode);\n}\nfunction popWarningContext() {\n    stack.pop();\n}\nfunction warn(msg, ...args) {\n    // avoid props formatting or warn handler tracking deps that might be mutated\n    // during patch, leading to infinite recursion.\n    pauseTracking();\n    const instance = stack.length ? stack[stack.length - 1].component : null;\n    const appWarnHandler = instance && instance.appContext.config.warnHandler;\n    const trace = getComponentTrace();\n    if (appWarnHandler) {\n        callWithErrorHandling(appWarnHandler, instance, 11 /* ErrorCodes.APP_WARN_HANDLER */, [\n            msg + args.join(''),\n            instance && instance.proxy,\n            trace\n                .map(({ vnode }) => `at <${formatComponentName(instance, vnode.type)}>`)\n                .join('\\n'),\n            trace\n        ]);\n    }\n    else {\n        const warnArgs = [`[Vue warn]: ${msg}`, ...args];\n        /* istanbul ignore if */\n        if (trace.length &&\n            // avoid spamming console during tests\n            !false) {\n            warnArgs.push(`\\n`, ...formatTrace(trace));\n        }\n        console.warn(...warnArgs);\n    }\n    resetTracking();\n}\nfunction getComponentTrace() {\n    let currentVNode = stack[stack.length - 1];\n    if (!currentVNode) {\n        return [];\n    }\n    // we can't just use the stack because it will be incomplete during updates\n    // that did not start from the root. Re-construct the parent chain using\n    // instance parent pointers.\n    const normalizedStack = [];\n    while (currentVNode) {\n        const last = normalizedStack[0];\n        if (last && last.vnode === currentVNode) {\n            last.recurseCount++;\n        }\n        else {\n            normalizedStack.push({\n                vnode: currentVNode,\n                recurseCount: 0\n            });\n        }\n        const parentInstance = currentVNode.component && currentVNode.component.parent;\n        currentVNode = parentInstance && parentInstance.vnode;\n    }\n    return normalizedStack;\n}\n/* istanbul ignore next */\nfunction formatTrace(trace) {\n    const logs = [];\n    trace.forEach((entry, i) => {\n        logs.push(...(i === 0 ? [] : [`\\n`]), ...formatTraceEntry(entry));\n    });\n    return logs;\n}\nfunction formatTraceEntry({ vnode, recurseCount }) {\n    const postfix = recurseCount > 0 ? `... (${recurseCount} recursive calls)` : ``;\n    const isRoot = vnode.component ? vnode.component.parent == null : false;\n    const open = ` at <${formatComponentName(vnode.component, vnode.type, isRoot)}`;\n    const close = `>` + postfix;\n    return vnode.props\n        ? [open, ...formatProps(vnode.props), close]\n        : [open + close];\n}\n/* istanbul ignore next */\nfunction formatProps(props) {\n    const res = [];\n    const keys = Object.keys(props);\n    keys.slice(0, 3).forEach(key => {\n        res.push(...formatProp(key, props[key]));\n    });\n    if (keys.length > 3) {\n        res.push(` ...`);\n    }\n    return res;\n}\n/* istanbul ignore next */\nfunction formatProp(key, value, raw) {\n    if (shared.isString(value)) {\n        value = JSON.stringify(value);\n        return raw ? value : [`${key}=${value}`];\n    }\n    else if (typeof value === 'number' ||\n        typeof value === 'boolean' ||\n        value == null) {\n        return raw ? value : [`${key}=${value}`];\n    }\n    else if (isRef(value)) {\n        value = formatProp(key, toRaw(value.value), true);\n        return raw ? value : [`${key}=Ref<`, value, `>`];\n    }\n    else if (shared.isFunction(value)) {\n        return [`${key}=fn${value.name ? `<${value.name}>` : ``}`];\n    }\n    else {\n        value = toRaw(value);\n        return raw ? value : [`${key}=`, value];\n    }\n}\n\nconst ErrorTypeStrings = {\n    [\"sp\" /* LifecycleHooks.SERVER_PREFETCH */]: 'serverPrefetch hook',\n    [\"bc\" /* LifecycleHooks.BEFORE_CREATE */]: 'beforeCreate hook',\n    [\"c\" /* LifecycleHooks.CREATED */]: 'created hook',\n    [\"bm\" /* LifecycleHooks.BEFORE_MOUNT */]: 'beforeMount hook',\n    [\"m\" /* LifecycleHooks.MOUNTED */]: 'mounted hook',\n    [\"bu\" /* LifecycleHooks.BEFORE_UPDATE */]: 'beforeUpdate hook',\n    [\"u\" /* LifecycleHooks.UPDATED */]: 'updated',\n    [\"bum\" /* LifecycleHooks.BEFORE_UNMOUNT */]: 'beforeUnmount hook',\n    [\"um\" /* LifecycleHooks.UNMOUNTED */]: 'unmounted hook',\n    [\"a\" /* LifecycleHooks.ACTIVATED */]: 'activated hook',\n    [\"da\" /* LifecycleHooks.DEACTIVATED */]: 'deactivated hook',\n    [\"ec\" /* LifecycleHooks.ERROR_CAPTURED */]: 'errorCaptured hook',\n    [\"rtc\" /* LifecycleHooks.RENDER_TRACKED */]: 'renderTracked hook',\n    [\"rtg\" /* LifecycleHooks.RENDER_TRIGGERED */]: 'renderTriggered hook',\n    [0 /* ErrorCodes.SETUP_FUNCTION */]: 'setup function',\n    [1 /* ErrorCodes.RENDER_FUNCTION */]: 'render function',\n    [2 /* ErrorCodes.WATCH_GETTER */]: 'watcher getter',\n    [3 /* ErrorCodes.WATCH_CALLBACK */]: 'watcher callback',\n    [4 /* ErrorCodes.WATCH_CLEANUP */]: 'watcher cleanup function',\n    [5 /* ErrorCodes.NATIVE_EVENT_HANDLER */]: 'native event handler',\n    [6 /* ErrorCodes.COMPONENT_EVENT_HANDLER */]: 'component event handler',\n    [7 /* ErrorCodes.VNODE_HOOK */]: 'vnode hook',\n    [8 /* ErrorCodes.DIRECTIVE_HOOK */]: 'directive hook',\n    [9 /* ErrorCodes.TRANSITION_HOOK */]: 'transition hook',\n    [10 /* ErrorCodes.APP_ERROR_HANDLER */]: 'app errorHandler',\n    [11 /* ErrorCodes.APP_WARN_HANDLER */]: 'app warnHandler',\n    [12 /* ErrorCodes.FUNCTION_REF */]: 'ref function',\n    [13 /* ErrorCodes.ASYNC_COMPONENT_LOADER */]: 'async component loader',\n    [14 /* ErrorCodes.SCHEDULER */]: 'scheduler flush. This is likely a Vue internals bug. ' +\n        'Please open an issue at https://new-issue.vuejs.org/?repo=vuejs/core'\n};\nfunction callWithErrorHandling(fn, instance, type, args) {\n    let res;\n    try {\n        res = args ? fn(...args) : fn();\n    }\n    catch (err) {\n        handleError(err, instance, type);\n    }\n    return res;\n}\nfunction handleError(err, instance, type, throwInDev = true) {\n    const contextVNode = instance ? instance.vnode : null;\n    if (instance) {\n        let cur = instance.parent;\n        // the exposed instance is the render proxy to keep it consistent with 2.x\n        const exposedInstance = instance.proxy;\n        // in production the hook receives only the error code\n        const errorInfo = ErrorTypeStrings[type] ;\n        while (cur) {\n            const errorCapturedHooks = cur.ec;\n            if (errorCapturedHooks) {\n                for (let i = 0; i < errorCapturedHooks.length; i++) {\n                    if (errorCapturedHooks[i](err, exposedInstance, errorInfo) === false) {\n                        return;\n                    }\n                }\n            }\n            cur = cur.parent;\n        }\n        // app-level handling\n        const appErrorHandler = instance.appContext.config.errorHandler;\n        if (appErrorHandler) {\n            callWithErrorHandling(appErrorHandler, null, 10 /* ErrorCodes.APP_ERROR_HANDLER */, [err, exposedInstance, errorInfo]);\n            return;\n        }\n    }\n    logError(err, type, contextVNode, throwInDev);\n}\nfunction logError(err, type, contextVNode, throwInDev = true) {\n    {\n        const info = ErrorTypeStrings[type];\n        if (contextVNode) {\n            pushWarningContext(contextVNode);\n        }\n        warn(`Unhandled error${info ? ` during execution of ${info}` : ``}`);\n        if (contextVNode) {\n            popWarningContext();\n        }\n        // crash in dev by default so it's more noticeable\n        if (throwInDev) {\n            throw err;\n        }\n        else {\n            console.error(err);\n        }\n    }\n}\n\nconst classifyRE = /(?:^|[-_])(\\w)/g;\nconst classify = (str) => str.replace(classifyRE, c => c.toUpperCase()).replace(/[-_]/g, '');\nfunction getComponentName(Component, includeInferred = true) {\n    return shared.isFunction(Component)\n        ? Component.displayName || Component.name\n        : Component.name || (includeInferred && Component.__name);\n}\n/* istanbul ignore next */\nfunction formatComponentName(instance, Component, isRoot = false) {\n    let name = getComponentName(Component);\n    if (!name && Component.__file) {\n        const match = Component.__file.match(/([^/\\\\]+)\\.\\w+$/);\n        if (match) {\n            name = match[1];\n        }\n    }\n    if (!name && instance && instance.parent) {\n        // try to infer the name based on reverse resolution\n        const inferFromRegistry = (registry) => {\n            for (const key in registry) {\n                if (registry[key] === Component) {\n                    return key;\n                }\n            }\n        };\n        name =\n            inferFromRegistry(instance.components ||\n                instance.parent.type.components) || inferFromRegistry(instance.appContext.components);\n    }\n    return name ? classify(name) : isRoot ? `App` : `Anonymous`;\n}\n\nfunction ssrRenderList(source, renderItem) {\n    if (shared.isArray(source) || shared.isString(source)) {\n        for (let i = 0, l = source.length; i < l; i++) {\n            renderItem(source[i], i);\n        }\n    }\n    else if (typeof source === 'number') {\n        if (!Number.isInteger(source)) {\n            warn(`The v-for range expect an integer value but got ${source}.`);\n            return;\n        }\n        for (let i = 0; i < source; i++) {\n            renderItem(i + 1, i);\n        }\n    }\n    else if (shared.isObject(source)) {\n        if (source[Symbol.iterator]) {\n            const arr = Array.from(source);\n            for (let i = 0, l = arr.length; i < l; i++) {\n                renderItem(arr[i], i);\n            }\n        }\n        else {\n            const keys = Object.keys(source);\n            for (let i = 0, l = keys.length; i < l; i++) {\n                const key = keys[i];\n                renderItem(source[key], key, i);\n            }\n        }\n    }\n}\n\nasync function ssrRenderSuspense(push, { default: renderContent }) {\n    if (renderContent) {\n        renderContent();\n    }\n    else {\n        push(`<!---->`);\n    }\n}\n\nfunction ssrGetDirectiveProps(instance, dir, value, arg, modifiers = {}) {\n    if (typeof dir !== 'function' && dir.getSSRProps) {\n        return (dir.getSSRProps({\n            dir,\n            instance,\n            value,\n            oldValue: undefined,\n            arg,\n            modifiers\n        }, null) || {});\n    }\n    return {};\n}\n\nconst ssrLooseEqual = shared.looseEqual;\nfunction ssrLooseContain(arr, value) {\n    return shared.looseIndexOf(arr, value) > -1;\n}\n// for <input :type=\"type\" v-model=\"model\" value=\"value\">\nfunction ssrRenderDynamicModel(type, model, value) {\n    switch (type) {\n        case 'radio':\n            return shared.looseEqual(model, value) ? ' checked' : '';\n        case 'checkbox':\n            return (shared.isArray(model) ? ssrLooseContain(model, value) : model)\n                ? ' checked'\n                : '';\n        default:\n            // text types\n            return ssrRenderAttr('value', model);\n    }\n}\n// for <input v-bind=\"obj\" v-model=\"model\">\nfunction ssrGetDynamicModelProps(existingProps = {}, model) {\n    const { type, value } = existingProps;\n    switch (type) {\n        case 'radio':\n            return shared.looseEqual(model, value) ? { checked: true } : null;\n        case 'checkbox':\n            return (shared.isArray(model) ? ssrLooseContain(model, value) : model)\n                ? { checked: true }\n                : null;\n        default:\n            // text types\n            return { value: model };\n    }\n}\n\n// internal runtime helpers\n\nvar helpers = /*#__PURE__*/Object.freeze({\n  __proto__: null,\n  ssrGetDirectiveProps: ssrGetDirectiveProps,\n  ssrGetDynamicModelProps: ssrGetDynamicModelProps,\n  ssrIncludeBooleanAttr: shared.includeBooleanAttr,\n  ssrInterpolate: ssrInterpolate,\n  ssrLooseContain: ssrLooseContain,\n  ssrLooseEqual: ssrLooseEqual,\n  ssrRenderAttr: ssrRenderAttr,\n  ssrRenderAttrs: ssrRenderAttrs,\n  ssrRenderClass: ssrRenderClass,\n  ssrRenderComponent: ssrRenderComponent,\n  ssrRenderDynamicAttr: ssrRenderDynamicAttr,\n  ssrRenderDynamicModel: ssrRenderDynamicModel,\n  ssrRenderList: ssrRenderList,\n  ssrRenderSlot: ssrRenderSlot,\n  ssrRenderSlotInner: ssrRenderSlotInner,\n  ssrRenderStyle: ssrRenderStyle,\n  ssrRenderSuspense: ssrRenderSuspense,\n  ssrRenderTeleport: ssrRenderTeleport,\n  ssrRenderVNode: renderVNode\n});\n\nconst compileCache = Object.create(null);\nfunction ssrCompile(template, instance) {\n    // TODO: This is copied from runtime-core/src/component.ts and should probably be refactored\n    const Component = instance.type;\n    const { isCustomElement, compilerOptions } = instance.appContext.config;\n    const { delimiters, compilerOptions: componentCompilerOptions } = Component;\n    const finalCompilerOptions = shared.extend(shared.extend({\n        isCustomElement,\n        delimiters\n    }, compilerOptions), componentCompilerOptions);\n    finalCompilerOptions.isCustomElement =\n        finalCompilerOptions.isCustomElement || shared.NO;\n    finalCompilerOptions.isNativeTag = finalCompilerOptions.isNativeTag || shared.NO;\n    const cacheKey = JSON.stringify({\n        template,\n        compilerOptions: finalCompilerOptions\n    }, (key, value) => {\n        return shared.isFunction(value) ? value.toString() : value;\n    });\n    const cached = compileCache[cacheKey];\n    if (cached) {\n        return cached;\n    }\n    finalCompilerOptions.onError = (err) => {\n        {\n            const message = `[@vue/server-renderer] Template compilation error: ${err.message}`;\n            const codeFrame = err.loc &&\n                shared.generateCodeFrame(template, err.loc.start.offset, err.loc.end.offset);\n            Vue.warn(codeFrame ? `${message}\\n${codeFrame}` : message);\n        }\n    };\n    const { code } = compilerSsr.compile(template, finalCompilerOptions);\n    const requireMap = {\n        vue: Vue__namespace,\n        'vue/server-renderer': helpers\n    };\n    const fakeRequire = (id) => requireMap[id];\n    return (compileCache[cacheKey] = Function('require', code)(fakeRequire));\n}\n\nconst { createComponentInstance, setCurrentRenderingInstance, setupComponent, renderComponentRoot, normalizeVNode } = Vue.ssrUtils;\n// Each component has a buffer array.\n// A buffer array can contain one of the following:\n// - plain string\n// - A resolved buffer (recursive arrays of strings that can be unrolled\n//   synchronously)\n// - An async buffer (a Promise that resolves to a resolved buffer)\nfunction createBuffer() {\n    let appendable = false;\n    const buffer = [];\n    return {\n        getBuffer() {\n            // Return static buffer and await on items during unroll stage\n            return buffer;\n        },\n        push(item) {\n            const isStringItem = shared.isString(item);\n            if (appendable && isStringItem) {\n                buffer[buffer.length - 1] += item;\n            }\n            else {\n                buffer.push(item);\n            }\n            appendable = isStringItem;\n            if (shared.isPromise(item) || (shared.isArray(item) && item.hasAsync)) {\n                // promise, or child buffer with async, mark as async.\n                // this allows skipping unnecessary await ticks during unroll stage\n                buffer.hasAsync = true;\n            }\n        }\n    };\n}\nfunction renderComponentVNode(vnode, parentComponent = null, slotScopeId) {\n    const instance = createComponentInstance(vnode, parentComponent, null);\n    const res = setupComponent(instance, true /* isSSR */);\n    const hasAsyncSetup = shared.isPromise(res);\n    const prefetches = instance.sp; /* LifecycleHooks.SERVER_PREFETCH */\n    if (hasAsyncSetup || prefetches) {\n        let p = hasAsyncSetup\n            ? res\n            : Promise.resolve();\n        if (prefetches) {\n            p = p\n                .then(() => Promise.all(prefetches.map(prefetch => prefetch.call(instance.proxy))))\n                // Note: error display is already done by the wrapped lifecycle hook function.\n                .catch(() => { });\n        }\n        return p.then(() => renderComponentSubTree(instance, slotScopeId));\n    }\n    else {\n        return renderComponentSubTree(instance, slotScopeId);\n    }\n}\nfunction renderComponentSubTree(instance, slotScopeId) {\n    const comp = instance.type;\n    const { getBuffer, push } = createBuffer();\n    if (shared.isFunction(comp)) {\n        let root = renderComponentRoot(instance);\n        // #5817 scope ID attrs not falling through if functional component doesn't\n        // have props\n        if (!comp.props) {\n            for (const key in instance.attrs) {\n                if (key.startsWith(`data-v-`)) {\n                    (root.props || (root.props = {}))[key] = ``;\n                }\n            }\n        }\n        renderVNode(push, (instance.subTree = root), instance, slotScopeId);\n    }\n    else {\n        if ((!instance.render || instance.render === shared.NOOP) &&\n            !instance.ssrRender &&\n            !comp.ssrRender &&\n            shared.isString(comp.template)) {\n            comp.ssrRender = ssrCompile(comp.template, instance);\n        }\n        // perf: enable caching of computed getters during render\n        // since there cannot be state mutations during render.\n        for (const e of instance.scope.effects) {\n            if (e.computed)\n                e.computed._cacheable = true;\n        }\n        const ssrRender = instance.ssrRender || comp.ssrRender;\n        if (ssrRender) {\n            // optimized\n            // resolve fallthrough attrs\n            let attrs = instance.inheritAttrs !== false ? instance.attrs : undefined;\n            let hasCloned = false;\n            let cur = instance;\n            while (true) {\n                const scopeId = cur.vnode.scopeId;\n                if (scopeId) {\n                    if (!hasCloned) {\n                        attrs = { ...attrs };\n                        hasCloned = true;\n                    }\n                    attrs[scopeId] = '';\n                }\n                const parent = cur.parent;\n                if (parent && parent.subTree && parent.subTree === cur.vnode) {\n                    // parent is a non-SSR compiled component and is rendering this\n                    // component as root. inherit its scopeId if present.\n                    cur = parent;\n                }\n                else {\n                    break;\n                }\n            }\n            if (slotScopeId) {\n                if (!hasCloned)\n                    attrs = { ...attrs };\n                attrs[slotScopeId.trim()] = '';\n            }\n            // set current rendering instance for asset resolution\n            const prev = setCurrentRenderingInstance(instance);\n            try {\n                ssrRender(instance.proxy, push, instance, attrs, \n                // compiler-optimized bindings\n                instance.props, instance.setupState, instance.data, instance.ctx);\n            }\n            finally {\n                setCurrentRenderingInstance(prev);\n            }\n        }\n        else if (instance.render && instance.render !== shared.NOOP) {\n            renderVNode(push, (instance.subTree = renderComponentRoot(instance)), instance, slotScopeId);\n        }\n        else {\n            const componentName = comp.name || comp.__file || `<Anonymous>`;\n            Vue.warn(`Component ${componentName} is missing template or render function.`);\n            push(`<!---->`);\n        }\n    }\n    return getBuffer();\n}\nfunction renderVNode(push, vnode, parentComponent, slotScopeId) {\n    const { type, shapeFlag, children } = vnode;\n    switch (type) {\n        case Vue.Text:\n            push(shared.escapeHtml(children));\n            break;\n        case Vue.Comment:\n            push(children ? `<!--${shared.escapeHtmlComment(children)}-->` : `<!---->`);\n            break;\n        case Vue.Static:\n            push(children);\n            break;\n        case Vue.Fragment:\n            if (vnode.slotScopeIds) {\n                slotScopeId =\n                    (slotScopeId ? slotScopeId + ' ' : '') + vnode.slotScopeIds.join(' ');\n            }\n            push(`<!--[-->`); // open\n            renderVNodeChildren(push, children, parentComponent, slotScopeId);\n            push(`<!--]-->`); // close\n            break;\n        default:\n            if (shapeFlag & 1 /* ShapeFlags.ELEMENT */) {\n                renderElementVNode(push, vnode, parentComponent, slotScopeId);\n            }\n            else if (shapeFlag & 6 /* ShapeFlags.COMPONENT */) {\n                push(renderComponentVNode(vnode, parentComponent, slotScopeId));\n            }\n            else if (shapeFlag & 64 /* ShapeFlags.TELEPORT */) {\n                renderTeleportVNode(push, vnode, parentComponent, slotScopeId);\n            }\n            else if (shapeFlag & 128 /* ShapeFlags.SUSPENSE */) {\n                renderVNode(push, vnode.ssContent, parentComponent, slotScopeId);\n            }\n            else {\n                Vue.warn('[@vue/server-renderer] Invalid VNode type:', type, `(${typeof type})`);\n            }\n    }\n}\nfunction renderVNodeChildren(push, children, parentComponent, slotScopeId) {\n    for (let i = 0; i < children.length; i++) {\n        renderVNode(push, normalizeVNode(children[i]), parentComponent, slotScopeId);\n    }\n}\nfunction renderElementVNode(push, vnode, parentComponent, slotScopeId) {\n    const tag = vnode.type;\n    let { props, children, shapeFlag, scopeId, dirs } = vnode;\n    let openTag = `<${tag}`;\n    if (dirs) {\n        props = applySSRDirectives(vnode, props, dirs);\n    }\n    if (props) {\n        openTag += ssrRenderAttrs(props, tag);\n    }\n    if (scopeId) {\n        openTag += ` ${scopeId}`;\n    }\n    // inherit parent chain scope id if this is the root node\n    let curParent = parentComponent;\n    let curVnode = vnode;\n    while (curParent && curVnode === curParent.subTree) {\n        curVnode = curParent.vnode;\n        if (curVnode.scopeId) {\n            openTag += ` ${curVnode.scopeId}`;\n        }\n        curParent = curParent.parent;\n    }\n    if (slotScopeId) {\n        openTag += ` ${slotScopeId}`;\n    }\n    push(openTag + `>`);\n    if (!shared.isVoidTag(tag)) {\n        let hasChildrenOverride = false;\n        if (props) {\n            if (props.innerHTML) {\n                hasChildrenOverride = true;\n                push(props.innerHTML);\n            }\n            else if (props.textContent) {\n                hasChildrenOverride = true;\n                push(shared.escapeHtml(props.textContent));\n            }\n            else if (tag === 'textarea' && props.value) {\n                hasChildrenOverride = true;\n                push(shared.escapeHtml(props.value));\n            }\n        }\n        if (!hasChildrenOverride) {\n            if (shapeFlag & 8 /* ShapeFlags.TEXT_CHILDREN */) {\n                push(shared.escapeHtml(children));\n            }\n            else if (shapeFlag & 16 /* ShapeFlags.ARRAY_CHILDREN */) {\n                renderVNodeChildren(push, children, parentComponent, slotScopeId);\n            }\n        }\n        push(`</${tag}>`);\n    }\n}\nfunction applySSRDirectives(vnode, rawProps, dirs) {\n    const toMerge = [];\n    for (let i = 0; i < dirs.length; i++) {\n        const binding = dirs[i];\n        const { dir: { getSSRProps } } = binding;\n        if (getSSRProps) {\n            const props = getSSRProps(binding, vnode);\n            if (props)\n                toMerge.push(props);\n        }\n    }\n    return Vue.mergeProps(rawProps || {}, ...toMerge);\n}\nfunction renderTeleportVNode(push, vnode, parentComponent, slotScopeId) {\n    const target = vnode.props && vnode.props.to;\n    const disabled = vnode.props && vnode.props.disabled;\n    if (!target) {\n        if (!disabled) {\n            Vue.warn(`[@vue/server-renderer] Teleport is missing target prop.`);\n        }\n        return [];\n    }\n    if (!shared.isString(target)) {\n        Vue.warn(`[@vue/server-renderer] Teleport target must be a query selector string.`);\n        return [];\n    }\n    ssrRenderTeleport(push, push => {\n        renderVNodeChildren(push, vnode.children, parentComponent, slotScopeId);\n    }, target, disabled || disabled === '', parentComponent);\n}\n\nconst { isVNode: isVNode$1 } = Vue.ssrUtils;\nasync function unrollBuffer$1(buffer) {\n    if (buffer.hasAsync) {\n        let ret = '';\n        for (let i = 0; i < buffer.length; i++) {\n            let item = buffer[i];\n            if (shared.isPromise(item)) {\n                item = await item;\n            }\n            if (shared.isString(item)) {\n                ret += item;\n            }\n            else {\n                ret += await unrollBuffer$1(item);\n            }\n        }\n        return ret;\n    }\n    else {\n        // sync buffer can be more efficiently unrolled without unnecessary await\n        // ticks\n        return unrollBufferSync$1(buffer);\n    }\n}\nfunction unrollBufferSync$1(buffer) {\n    let ret = '';\n    for (let i = 0; i < buffer.length; i++) {\n        let item = buffer[i];\n        if (shared.isString(item)) {\n            ret += item;\n        }\n        else {\n            // since this is a sync buffer, child buffers are never promises\n            ret += unrollBufferSync$1(item);\n        }\n    }\n    return ret;\n}\nasync function renderToString(input, context = {}) {\n    if (isVNode$1(input)) {\n        // raw vnode, wrap with app (for context)\n        return renderToString(Vue.createApp({ render: () => input }), context);\n    }\n    // rendering an app\n    const vnode = Vue.createVNode(input._component, input._props);\n    vnode.appContext = input._context;\n    // provide the ssr context to the tree\n    input.provide(Vue.ssrContextKey, context);\n    const buffer = await renderComponentVNode(vnode);\n    const result = await unrollBuffer$1(buffer);\n    await resolveTeleports(context);\n    if (context.__watcherHandles) {\n        for (const unwatch of context.__watcherHandles) {\n            unwatch();\n        }\n    }\n    return result;\n}\nasync function resolveTeleports(context) {\n    if (context.__teleportBuffers) {\n        context.teleports = context.teleports || {};\n        for (const key in context.__teleportBuffers) {\n            // note: it's OK to await sequentially here because the Promises were\n            // created eagerly in parallel.\n            context.teleports[key] = await unrollBuffer$1(await Promise.all([context.__teleportBuffers[key]]));\n        }\n    }\n}\n\nconst { isVNode } = Vue.ssrUtils;\nasync function unrollBuffer(buffer, stream) {\n    if (buffer.hasAsync) {\n        for (let i = 0; i < buffer.length; i++) {\n            let item = buffer[i];\n            if (shared.isPromise(item)) {\n                item = await item;\n            }\n            if (shared.isString(item)) {\n                stream.push(item);\n            }\n            else {\n                await unrollBuffer(item, stream);\n            }\n        }\n    }\n    else {\n        // sync buffer can be more efficiently unrolled without unnecessary await\n        // ticks\n        unrollBufferSync(buffer, stream);\n    }\n}\nfunction unrollBufferSync(buffer, stream) {\n    for (let i = 0; i < buffer.length; i++) {\n        let item = buffer[i];\n        if (shared.isString(item)) {\n            stream.push(item);\n        }\n        else {\n            // since this is a sync buffer, child buffers are never promises\n            unrollBufferSync(item, stream);\n        }\n    }\n}\nfunction renderToSimpleStream(input, context, stream) {\n    if (isVNode(input)) {\n        // raw vnode, wrap with app (for context)\n        return renderToSimpleStream(Vue.createApp({ render: () => input }), context, stream);\n    }\n    // rendering an app\n    const vnode = Vue.createVNode(input._component, input._props);\n    vnode.appContext = input._context;\n    // provide the ssr context to the tree\n    input.provide(Vue.ssrContextKey, context);\n    Promise.resolve(renderComponentVNode(vnode))\n        .then(buffer => unrollBuffer(buffer, stream))\n        .then(() => resolveTeleports(context))\n        .then(() => {\n        if (context.__watcherHandles) {\n            for (const unwatch of context.__watcherHandles) {\n                unwatch();\n            }\n        }\n    })\n        .then(() => stream.push(null))\n        .catch(error => {\n        stream.destroy(error);\n    });\n    return stream;\n}\n/**\n * @deprecated\n */\nfunction renderToStream(input, context = {}) {\n    console.warn(`[@vue/server-renderer] renderToStream is deprecated - use renderToNodeStream instead.`);\n    return renderToNodeStream(input, context);\n}\nfunction renderToNodeStream(input, context = {}) {\n    const stream = new (require('stream').Readable)({ read() { } })\n        ;\n    if (!stream) {\n        throw new Error(`ESM build of renderToStream() does not support renderToNodeStream(). ` +\n            `Use pipeToNodeWritable() with an existing Node.js Writable stream ` +\n            `instance instead.`);\n    }\n    return renderToSimpleStream(input, context, stream);\n}\nfunction pipeToNodeWritable(input, context = {}, writable) {\n    renderToSimpleStream(input, context, {\n        push(content) {\n            if (content != null) {\n                writable.write(content);\n            }\n            else {\n                writable.end();\n            }\n        },\n        destroy(err) {\n            writable.destroy(err);\n        }\n    });\n}\nfunction renderToWebStream(input, context = {}) {\n    if (typeof ReadableStream !== 'function') {\n        throw new Error(`ReadableStream constructor is not available in the global scope. ` +\n            `If the target environment does support web streams, consider using ` +\n            `pipeToWebWritable() with an existing WritableStream instance instead.`);\n    }\n    const encoder = new TextEncoder();\n    let cancelled = false;\n    return new ReadableStream({\n        start(controller) {\n            renderToSimpleStream(input, context, {\n                push(content) {\n                    if (cancelled)\n                        return;\n                    if (content != null) {\n                        controller.enqueue(encoder.encode(content));\n                    }\n                    else {\n                        controller.close();\n                    }\n                },\n                destroy(err) {\n                    controller.error(err);\n                }\n            });\n        },\n        cancel() {\n            cancelled = true;\n        }\n    });\n}\nfunction pipeToWebWritable(input, context = {}, writable) {\n    const writer = writable.getWriter();\n    const encoder = new TextEncoder();\n    // #4287 CloudFlare workers do not implement `ready` property\n    let hasReady = false;\n    try {\n        hasReady = shared.isPromise(writer.ready);\n    }\n    catch (e) { }\n    renderToSimpleStream(input, context, {\n        async push(content) {\n            if (hasReady) {\n                await writer.ready;\n            }\n            if (content != null) {\n                return writer.write(encoder.encode(content));\n            }\n            else {\n                return writer.close();\n            }\n        },\n        destroy(err) {\n            // TODO better error handling?\n            console.log(err);\n            writer.close();\n        }\n    });\n}\n\nVue.initDirectivesForSSR();\n\nexports.ssrIncludeBooleanAttr = shared.includeBooleanAttr;\nexports.pipeToNodeWritable = pipeToNodeWritable;\nexports.pipeToWebWritable = pipeToWebWritable;\nexports.renderToNodeStream = renderToNodeStream;\nexports.renderToSimpleStream = renderToSimpleStream;\nexports.renderToStream = renderToStream;\nexports.renderToString = renderToString;\nexports.renderToWebStream = renderToWebStream;\nexports.ssrGetDirectiveProps = ssrGetDirectiveProps;\nexports.ssrGetDynamicModelProps = ssrGetDynamicModelProps;\nexports.ssrInterpolate = ssrInterpolate;\nexports.ssrLooseContain = ssrLooseContain;\nexports.ssrLooseEqual = ssrLooseEqual;\nexports.ssrRenderAttr = ssrRenderAttr;\nexports.ssrRenderAttrs = ssrRenderAttrs;\nexports.ssrRenderClass = ssrRenderClass;\nexports.ssrRenderComponent = ssrRenderComponent;\nexports.ssrRenderDynamicAttr = ssrRenderDynamicAttr;\nexports.ssrRenderDynamicModel = ssrRenderDynamicModel;\nexports.ssrRenderList = ssrRenderList;\nexports.ssrRenderSlot = ssrRenderSlot;\nexports.ssrRenderSlotInner = ssrRenderSlotInner;\nexports.ssrRenderStyle = ssrRenderStyle;\nexports.ssrRenderSuspense = ssrRenderSuspense;\nexports.ssrRenderTeleport = ssrRenderTeleport;\nexports.ssrRenderVNode = renderVNode;\n/index.js'use strict'\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./dist/server-renderer.cjs.prod.js')\n} else {\n  module.exports = require('./dist/server-renderer.cjs.js')\n}\n/README.md\u000f)# @vue/server-renderer\n\n**Note: as of 3.2.13+, this package is included as a dependency of the main `vue` package and can be accessed as `vue/server-renderer`. This means you no longer need to explicitly install this package and ensure its version match that of `vue`'s. Just use the `vue/server-renderer` deep import instead.**\n\n## Basic API\n\n### `renderToString`\n\n**Signature**\n\n```ts\nfunction renderToString(\n  input: App | VNode,\n  context?: SSRContext\n): Promise<string>\n```\n\n**Usage**\n\n```js\nconst { createSSRApp } = require('vue')\nconst { renderToString } = require('@vue/server-renderer')\n\nconst app = createSSRApp({\n  data: () => ({ msg: 'hello' }),\n  template: `<div>{{ msg }}</div>`\n})\n\n;(async () => {\n  const html = await renderToString(app)\n  console.log(html)\n})()\n```\n\n### Handling Teleports\n\nIf the rendered app contains teleports, the teleported content will not be part of the rendered string. Instead, they are exposed under the `teleports` property of the ssr context object:\n\n```js\nconst ctx = {}\nconst html = await renderToString(app, ctx)\n\nconsole.log(ctx.teleports) // { '#teleported': 'teleported content' }\n```\n\n## Streaming API\n\n### `renderToNodeStream`\n\nRenders input as a [Node.js Readable stream](https://nodejs.org/api/stream.html#stream_class_stream_readable).\n\n**Signature**\n\n```ts\nfunction renderToNodeStream(input: App | VNode, context?: SSRContext): Readable\n```\n\n**Usage**\n\n```js\n// inside a Node.js http handler\nrenderToNodeStream(app).pipe(res)\n```\n\n**Note:** This method is not supported in the ESM build of `@vue/server-renderer`, which is decoupled from Node.js environments. Use `pipeToNodeWritable` instead.\n\n### `pipeToNodeWritable`\n\nRender and pipe to an existing [Node.js Writable stream](https://nodejs.org/api/stream.html#stream_writable_streams) instance.\n\n**Signature**\n\n```ts\nfunction pipeToNodeWritable(\n  input: App | VNode,\n  context: SSRContext = {},\n  writable: Writable\n): void\n```\n\n**Usage**\n\n```js\n// inside a Node.js http handler\npipeToNodeWritable(app, {}, res)\n```\n\n### `renderToWebStream`\n\nRenders input as a [Web ReadableStream](https://developer.mozilla.org/en-US/docs/Web/API/Streams_API).\n\n**Signature**\n\n```ts\nfunction renderToWebStream(\n  input: App | VNode,\n  context?: SSRContext\n): ReadableStream\n```\n\n**Usage**\n\n```js\n// inside an environment with ReadableStream support\nreturn new Response(renderToWebStream(app))\n```\n\n**Note:** in environments that do not expose `ReadableStream` constructor in the global scope, `pipeToWebWritable` should be used instead.\n\n### `pipeToWebWritable`\n\nRender and pipe to an existing [Web WritableStream](https://developer.mozilla.org/en-US/docs/Web/API/WritableStream) instance.\n\n**Signature**\n\n```ts\nfunction pipeToWebWritable(\n  input: App | VNode,\n  context: SSRContext = {},\n  writable: WritableStream\n): void\n```\n\n**Usage**\n\nThis is typically used in combination with [`TransformStream`](https://developer.mozilla.org/en-US/docs/Web/API/TransformStream):\n\n```js\n// TransformStream is available in environments such as CloudFlare workers.\n// in Node.js, TransformStream needs to be explicitly imported from 'stream/web'\nconst { readable, writable } = new TransformStream()\npipeToWebWritable(app, {}, writable)\n\nreturn new Response(readable)\n```\n\n### `renderToSimpleStream`\n\nRenders input in streaming mode using a simple readable interface.\n\n**Signature**\n\n```ts\nfunction renderToSimpleStream(\n  input: App | VNode,\n  context: SSRContext,\n  options: SimpleReadable\n): SimpleReadable\n\ninterface SimpleReadable {\n  push(content: string | null): void\n  destroy(err: any): void\n}\n```\n\n**Usage**\n\n```js\nlet res = ''\n\nrenderToSimpleStream(\n  app,\n  {},\n  {\n    push(chunk) {\n      if (chunk === null) {\n        // done\n        console(`render complete: ${res}`)\n      } else {\n        res += chunk\n      }\n    },\n    destroy(err) {\n      // error encountered\n    }\n  }\n)\n```\n/package.json\u0003{\n  \"name\": \"@vue/server-renderer\",\n  \"version\": \"3.2.47\",\n  \"description\": \"@vue/server-renderer\",\n  \"main\": \"index.js\",\n  \"module\": \"dist/server-renderer.esm-bundler.js\",\n  \"types\": \"dist/server-renderer.d.ts\",\n  \"files\": [\n    \"index.js\",\n    \"dist\"\n  ],\n  \"buildOptions\": {\n    \"name\": \"VueServerRenderer\",\n    \"formats\": [\n      \"esm-bundler\",\n      \"esm-browser\",\n      \"cjs\"\n    ]\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/vuejs/core.git\",\n    \"directory\": \"packages/server-renderer\"\n  },\n  \"keywords\": [\n    \"vue\"\n  ],\n  \"author\": \"Evan You\",\n  \"license\": \"MIT\",\n  \"bugs\": {\n    \"url\": \"https://github.com/vuejs/core/issues\"\n  },\n  \"homepage\": \"https://github.com/vuejs/core/tree/main/packages/server-renderer#readme\",\n  \"peerDependencies\": {\n    \"vue\": \"3.2.47\"\n  },\n  \"dependencies\": {\n    \"@vue/shared\": \"3.2.47\",\n    \"@vue/compiler-ssr\": \"3.2.47\"\n  }\n}\n/dist/server-renderer.d.ts\u0011/// <reference types=\"node\" />\r\n\r\nimport { App } from 'vue';\r\nimport { Component } from 'vue';\r\nimport { ComponentInternalInstance } from 'vue';\r\nimport { ComponentPublicInstance } from '@vue/runtime-core';\r\nimport { Directive } from '@vue/runtime-core';\r\nimport { Readable } from 'stream';\r\nimport { Slots } from 'vue';\r\nimport { includeBooleanAttr as ssrIncludeBooleanAttr } from '@vue/shared';\r\nimport { VNode } from 'vue';\r\nimport { Writable } from 'stream';\r\n\r\nexport declare function pipeToNodeWritable(input: App | VNode, context: SSRContext | undefined, writable: Writable): void;\r\n\r\nexport declare function pipeToWebWritable(input: App | VNode, context: SSRContext | undefined, writable: WritableStream): void;\r\n\r\ndeclare type Props = Record<string, unknown>;\r\n\r\ndeclare type PushFn = (item: SSRBufferItem) => void;\r\n\r\nexport declare function renderToNodeStream(input: App | VNode, context?: SSRContext): Readable;\r\n\r\nexport declare function renderToSimpleStream<T extends SimpleReadable>(input: App | VNode, context: SSRContext, stream: T): T;\r\n\r\n/**\r\n * @deprecated\r\n */\r\nexport declare function renderToStream(input: App | VNode, context?: SSRContext): Readable;\r\n\r\nexport declare function renderToString(input: App | VNode, context?: SSRContext): Promise<string>;\r\n\r\nexport declare function renderToWebStream(input: App | VNode, context?: SSRContext): ReadableStream;\r\n\r\nexport declare interface SimpleReadable {\r\n    push(chunk: string | null): void;\r\n    destroy(err: any): void;\r\n}\r\n\r\ndeclare type SSRBuffer = SSRBufferItem[] & {\r\n    hasAsync?: boolean;\r\n};\r\n\r\ndeclare type SSRBufferItem = string | SSRBuffer | Promise<SSRBuffer>;\r\n\r\nexport declare type SSRContext = {\r\n    [key: string]: any;\r\n    teleports?: Record<string, string>;\r\n    /* Excluded from this release type: __teleportBuffers */\r\n    /* Excluded from this release type: __watcherHandles */\r\n};\r\n\r\nexport declare function ssrGetDirectiveProps(instance: ComponentPublicInstance, dir: Directive, value?: any, arg?: string, modifiers?: Record<string, boolean>): Record<string, any>;\r\n\r\nexport declare function ssrGetDynamicModelProps(existingProps: any, model: unknown): {\r\n    checked: boolean;\r\n    value?: undefined;\r\n} | {\r\n    value: unknown;\r\n    checked?: undefined;\r\n} | null;\r\n\r\nexport { ssrIncludeBooleanAttr }\r\n\r\nexport declare function ssrInterpolate(value: unknown): string;\r\n\r\nexport declare function ssrLooseContain(arr: unknown[], value: unknown): boolean;\r\n\r\nexport declare const ssrLooseEqual: (a: unknown, b: unknown) => boolean;\r\n\r\nexport declare function ssrRenderAttr(key: string, value: unknown): string;\r\n\r\nexport declare function ssrRenderAttrs(props: Record<string, unknown>, tag?: string): string;\r\n\r\nexport declare function ssrRenderClass(raw: unknown): string;\r\n\r\nexport declare function ssrRenderComponent(comp: Component, props?: Props | null, children?: Slots | SSRSlots | null, parentComponent?: ComponentInternalInstance | null, slotScopeId?: string): SSRBuffer | Promise<SSRBuffer>;\r\n\r\nexport declare function ssrRenderDynamicAttr(key: string, value: unknown, tag?: string): string;\r\n\r\nexport declare function ssrRenderDynamicModel(type: unknown, model: unknown, value: unknown): string;\r\n\r\nexport declare function ssrRenderList(source: unknown, renderItem: (value: unknown, key: string | number, index?: number) => void): void;\r\n\r\nexport declare function ssrRenderSlot(slots: Slots | SSRSlots, slotName: string, slotProps: Props, fallbackRenderFn: (() => void) | null, push: PushFn, parentComponent: ComponentInternalInstance, slotScopeId?: string): void;\r\n\r\nexport declare function ssrRenderSlotInner(slots: Slots | SSRSlots, slotName: string, slotProps: Props, fallbackRenderFn: (() => void) | null, push: PushFn, parentComponent: ComponentInternalInstance, slotScopeId?: string, transition?: boolean): void;\r\n\r\nexport declare function ssrRenderStyle(raw: unknown): string;\r\n\r\nexport declare function ssrRenderSuspense(push: PushFn, { default: renderContent }: Record<string, (() => void) | undefined>): Promise<void>;\r\n\r\nexport declare function ssrRenderTeleport(parentPush: PushFn, contentRenderFn: (push: PushFn) => void, target: string, disabled: boolean, parentComponent: ComponentInternalInstance): void;\r\n\r\nexport declare function ssrRenderVNode(push: PushFn, vnode: VNode, parentComponent: ComponentInternalInstance, slotScopeId?: string): void;\r\n\r\ndeclare type SSRSlot = (props: Props, push: PushFn, parentComponent: ComponentInternalInstance | null, scopeId: string | null) => void;\r\n\r\ndeclare type SSRSlots = Record<string, SSRSlot>;\r\n\r\nexport { }\r\n)/dist/server-renderer.esm-browser.prod.js1function e(e,t){const n=Object.create(null),r=e.split(\",\");for(let o=0;o<r.length;o++)n[r[o]]=!0;return t?e=>!!n[e.toLowerCase()]:e=>!!n[e]}function t(e){if($(e)){const n={};for(let r=0;r<e.length;r++){const o=e[r],l=N(o)?s(o):t(o);if(l)for(const e in l)n[e]=l[e]}return n}return N(e)||U(e)?e:void 0}const n=/;(?![^(]*\\))/g,r=/:([^]+)/,o=/\\/\\*.*?\\*\\//gs;function s(e){const t={};return e.replace(o,\"\").split(n).forEach((e=>{if(e){const n=e.split(r);n.length>1&&(t[n[0].trim()]=n[1].trim())}})),t}function l(e){let t=\"\";if(N(e))t=e;else if($(e))for(let n=0;n<e.length;n++){const r=l(e[n]);r&&(t+=r+\" \")}else if(U(e))for(const n in e)e[n]&&(t+=n+\" \");return t.trim()}const i=e(\"svg,animate,animateMotion,animateTransform,circle,clipPath,color-profile,defs,desc,discard,ellipse,feBlend,feColorMatrix,feComponentTransfer,feComposite,feConvolveMatrix,feDiffuseLighting,feDisplacementMap,feDistantLight,feDropShadow,feFlood,feFuncA,feFuncB,feFuncG,feFuncR,feGaussianBlur,feImage,feMerge,feMergeNode,feMorphology,feOffset,fePointLight,feSpecularLighting,feSpotLight,feTile,feTurbulence,filter,foreignObject,g,hatch,hatchpath,image,line,linearGradient,marker,mask,mesh,meshgradient,meshpatch,meshrow,metadata,mpath,path,pattern,polygon,polyline,radialGradient,rect,set,solidcolor,stop,switch,symbol,text,textPath,title,tspan,unknown,use,view\"),c=e(\"area,base,br,col,embed,hr,img,input,link,meta,param,source,track,wbr\"),u=\"itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly\",a=e(u),f=e(u+\",async,autofocus,autoplay,controls,default,defer,disabled,hidden,loop,open,required,reversed,scoped,seamless,checked,muted,multiple,selected\");function p(e){return!!e||\"\"===e}const d=/[>/=\"'\\u0009\\u000a\\u000c\\u0020]/,h={};const g={acceptCharset:\"accept-charset\",className:\"class\",htmlFor:\"for\",httpEquiv:\"http-equiv\"},m=/[\"'&<>]/;function v(e){const t=\"\"+e,n=m.exec(t);if(!n)return t;let r,o,s=\"\",l=0;for(o=n.index;o<t.length;o++){switch(t.charCodeAt(o)){case 34:r=\"&quot;\";break;case 38:r=\"&amp;\";break;case 39:r=\"&#39;\";break;case 60:r=\"&lt;\";break;case 62:r=\"&gt;\";break;default:continue}l!==o&&(s+=t.slice(l,o)),l=o+1,s+=r}return l!==o?s+t.slice(l,o):s}const y=/^-?>|<!--|-->|--!>|<!-$/g;function _(e,t){if(e===t)return!0;let n=A(e),r=A(t);if(n||r)return!(!n||!r)&&e.getTime()===t.getTime();if(n=V(e),r=V(t),n||r)return e===t;if(n=$(e),r=$(t),n||r)return!(!n||!r)&&function(e,t){if(e.length!==t.length)return!1;let n=!0;for(let r=0;n&&r<e.length;r++)n=_(e[r],t[r]);return n}(e,t);if(n=U(e),r=U(t),n||r){if(!n||!r)return!1;if(Object.keys(e).length!==Object.keys(t).length)return!1;for(const n in e){const r=e.hasOwnProperty(n),o=t.hasOwnProperty(n);if(r&&!o||!r&&o||!_(e[n],t[n]))return!1}}return String(e)===String(t)}const b=(e,t)=>t&&t.__v_isRef?b(e,t.value):M(t)?{[`Map(${t.size})`]:[...t.entries()].reduce(((e,[t,n])=>(e[`${t} =>`]=n,e)),{})}:j(t)?{[`Set(${t.size})`]:[...t.values()]}:!U(t)||$(t)||D(t)?t:String(t),x={},w=[],S=()=>{},C=()=>!1,k=/^on[^a-z]/,O=e=>k.test(e),P=e=>e.startsWith(\"onUpdate:\"),R=Object.assign,T=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},F=Object.prototype.hasOwnProperty,E=(e,t)=>F.call(e,t),$=Array.isArray,M=e=>\"[object Map]\"===W(e),j=e=>\"[object Set]\"===W(e),A=e=>\"[object Date]\"===W(e),I=e=>\"function\"==typeof e,N=e=>\"string\"==typeof e,V=e=>\"symbol\"==typeof e,U=e=>null!==e&&\"object\"==typeof e,B=e=>U(e)&&I(e.then)&&I(e.catch),L=Object.prototype.toString,W=e=>L.call(e),D=e=>\"[object Object]\"===W(e),H=e=>N(e)&&\"NaN\"!==e&&\"-\"!==e[0]&&\"\"+parseInt(e,10)===e,z=e(\",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted\"),q=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},G=/-(\\w)/g,K=q((e=>e.replace(G,((e,t)=>t?t.toUpperCase():\"\")))),J=/\\B([A-Z])/g,X=q((e=>e.replace(J,\"-$1\").toLowerCase())),Z=q((e=>e.charAt(0).toUpperCase()+e.slice(1))),Q=q((e=>e?`on${Z(e)}`:\"\")),Y=(e,t)=>!Object.is(e,t),ee=(e,t)=>{for(let n=0;n<e.length;n++)e[n](t)},te=(e,t,n)=>{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value:n})},ne=e=>{const t=parseFloat(e);return isNaN(t)?e:t};let re;let oe;class se{constructor(e=!1){this.detached=e,this._active=!0,this.effects=[],this.cleanups=[],this.parent=oe,!e&&oe&&(this.index=(oe.scopes||(oe.scopes=[])).push(this)-1)}get active(){return this._active}run(e){if(this._active){const t=oe;try{return oe=this,e()}finally{oe=t}}}on(){oe=this}off(){oe=this.parent}stop(e){if(this._active){let t,n;for(t=0,n=this.effects.length;t<n;t++)this.effects[t].stop();for(t=0,n=this.cleanups.length;t<n;t++)this.cleanups[t]();if(this.scopes)for(t=0,n=this.scopes.length;t<n;t++)this.scopes[t].stop(!0);if(!this.detached&&this.parent&&!e){const e=this.parent.scopes.pop();e&&e!==this&&(this.parent.scopes[this.index]=e,e.index=this.index)}this.parent=void 0,this._active=!1}}}const le=e=>{const t=new Set(e);return t.w=0,t.n=0,t},ie=e=>(e.w&fe)>0,ce=e=>(e.n&fe)>0,ue=new WeakMap;let ae=0,fe=1;let pe;const de=Symbol(\"\"),he=Symbol(\"\");class ge{constructor(e,t=null,n){this.fn=e,this.scheduler=t,this.active=!0,this.deps=[],this.parent=void 0,function(e,t=oe){t&&t.active&&t.effects.push(e)}(this,n)}run(){if(!this.active)return this.fn();let e=pe,t=ve;for(;e;){if(e===this)return;e=e.parent}try{return this.parent=pe,pe=this,ve=!0,fe=1<<++ae,ae<=30?(({deps:e})=>{if(e.length)for(let t=0;t<e.length;t++)e[t].w|=fe})(this):me(this),this.fn()}finally{ae<=30&&(e=>{const{deps:t}=e;if(t.length){let n=0;for(let r=0;r<t.length;r++){const o=t[r];ie(o)&&!ce(o)?o.delete(e):t[n++]=o,o.w&=~fe,o.n&=~fe}t.length=n}})(this),fe=1<<--ae,pe=this.parent,ve=t,this.parent=void 0,this.deferStop&&this.stop()}}stop(){pe===this?this.deferStop=!0:this.active&&(me(this),this.onStop&&this.onStop(),this.active=!1)}}function me(e){const{deps:t}=e;if(t.length){for(let n=0;n<t.length;n++)t[n].delete(e);t.length=0}}let ve=!0;const ye=[];function _e(){ye.push(ve),ve=!1}function be(){const e=ye.pop();ve=void 0===e||e}function xe(e,t,n){if(ve&&pe){let t=ue.get(e);t||ue.set(e,t=new Map);let r=t.get(n);r||t.set(n,r=le()),we(r)}}function we(e,t){let n=!1;ae<=30?ce(e)||(e.n|=fe,n=!ie(e)):n=!e.has(pe),n&&(e.add(pe),pe.deps.push(e))}function Se(e,t,n,r,o,s){const l=ue.get(e);if(!l)return;let i=[];if(\"clear\"===t)i=[...l.values()];else if(\"length\"===n&&$(e)){const e=Number(r);l.forEach(((t,n)=>{(\"length\"===n||n>=e)&&i.push(t)}))}else switch(void 0!==n&&i.push(l.get(n)),t){case\"add\":$(e)?H(n)&&i.push(l.get(\"length\")):(i.push(l.get(de)),M(e)&&i.push(l.get(he)));break;case\"delete\":$(e)||(i.push(l.get(de)),M(e)&&i.push(l.get(he)));break;case\"set\":M(e)&&i.push(l.get(de))}if(1===i.length)i[0]&&Ce(i[0]);else{const e=[];for(const t of i)t&&e.push(...t);Ce(le(e))}}function Ce(e,t){const n=$(e)?e:[...e];for(const r of n)r.computed&&ke(r);for(const r of n)r.computed||ke(r)}function ke(e,t){(e!==pe||e.allowRecurse)&&(e.scheduler?e.scheduler():e.run())}const Oe=e(\"__proto__,__v_isRef,__isVue\"),Pe=new Set(Object.getOwnPropertyNames(Symbol).filter((e=>\"arguments\"!==e&&\"caller\"!==e)).map((e=>Symbol[e])).filter(V)),Re=je(),Te=je(!1,!0),Fe=je(!0),Ee=$e();function $e(){const e={};return[\"includes\",\"indexOf\",\"lastIndexOf\"].forEach((t=>{e[t]=function(...e){const n=yt(this);for(let t=0,o=this.length;t<o;t++)xe(n,0,t+\"\");const r=n[t](...e);return-1===r||!1===r?n[t](...e.map(yt)):r}})),[\"push\",\"pop\",\"shift\",\"unshift\",\"splice\"].forEach((t=>{e[t]=function(...e){_e();const n=yt(this)[t].apply(this,e);return be(),n}})),e}function Me(e){const t=yt(this);return xe(t,0,e),t.hasOwnProperty(e)}function je(e=!1,t=!1){return function(n,r,o){if(\"__v_isReactive\"===r)return!e;if(\"__v_isReadonly\"===r)return e;if(\"__v_isShallow\"===r)return t;if(\"__v_raw\"===r&&o===(e?t?ut:ct:t?it:lt).get(n))return n;const s=$(n);if(!e){if(s&&E(Ee,r))return Reflect.get(Ee,r,o);if(\"hasOwnProperty\"===r)return Me}const l=Reflect.get(n,r,o);return(V(r)?Pe.has(r):Oe(r))?l:(e||xe(n,0,r),t?l:wt(l)?s&&H(r)?l:l.value:U(l)?e?pt(l):ft(l):l)}}function Ae(e=!1){return function(t,n,r,o){let s=t[n];if(gt(s)&&wt(s)&&!wt(r))return!1;if(!e&&(mt(r)||gt(r)||(s=yt(s),r=yt(r)),!$(t)&&wt(s)&&!wt(r)))return s.value=r,!0;const l=$(t)&&H(n)?Number(n)<t.length:E(t,n),i=Reflect.set(t,n,r,o);return t===yt(o)&&(l?Y(r,s)&&Se(t,\"set\",n,r):Se(t,\"add\",n,r)),i}}const Ie={get:Re,set:Ae(),deleteProperty:function(e,t){const n=E(e,t),r=Reflect.deleteProperty(e,t);return r&&n&&Se(e,\"delete\",t,void 0),r},has:function(e,t){const n=Reflect.has(e,t);return V(t)&&Pe.has(t)||xe(e,0,t),n},ownKeys:function(e){return xe(e,0,$(e)?\"length\":de),Reflect.ownKeys(e)}},Ne={get:Fe,set:(e,t)=>!0,deleteProperty:(e,t)=>!0},Ve=R({},Ie,{get:Te,set:Ae(!0)}),Ue=e=>e,Be=e=>Reflect.getPrototypeOf(e);function Le(e,t,n=!1,r=!1){const o=yt(e=e.__v_raw),s=yt(t);n||(t!==s&&xe(o,0,t),xe(o,0,s));const{has:l}=Be(o),i=r?Ue:n?xt:bt;return l.call(o,t)?i(e.get(t)):l.call(o,s)?i(e.get(s)):void(e!==o&&e.get(t))}function We(e,t=!1){const n=this.__v_raw,r=yt(n),o=yt(e);return t||(e!==o&&xe(r,0,e),xe(r,0,o)),e===o?n.has(e):n.has(e)||n.has(o)}function De(e,t=!1){return e=e.__v_raw,!t&&xe(yt(e),0,de),Reflect.get(e,\"size\",e)}function He(e){e=yt(e);const t=yt(this);return Be(t).has.call(t,e)||(t.add(e),Se(t,\"add\",e,e)),this}function ze(e,t){t=yt(t);const n=yt(this),{has:r,get:o}=Be(n);let s=r.call(n,e);s||(e=yt(e),s=r.call(n,e));const l=o.call(n,e);return n.set(e,t),s?Y(t,l)&&Se(n,\"set\",e,t):Se(n,\"add\",e,t),this}function qe(e){const t=yt(this),{has:n,get:r}=Be(t);let o=n.call(t,e);o||(e=yt(e),o=n.call(t,e)),r&&r.call(t,e);const s=t.delete(e);return o&&Se(t,\"delete\",e,void 0),s}function Ge(){const e=yt(this),t=0!==e.size,n=e.clear();return t&&Se(e,\"clear\",void 0,void 0),n}function Ke(e,t){return function(n,r){const o=this,s=o.__v_raw,l=yt(s),i=t?Ue:e?xt:bt;return!e&&xe(l,0,de),s.forEach(((e,t)=>n.call(r,i(e),i(t),o)))}}function Je(e,t,n){return function(...r){const o=this.__v_raw,s=yt(o),l=M(s),i=\"entries\"===e||e===Symbol.iterator&&l,c=\"keys\"===e&&l,u=o[e](...r),a=n?Ue:t?xt:bt;return!t&&xe(s,0,c?he:de),{next(){const{value:e,done:t}=u.next();return t?{value:e,done:t}:{value:i?[a(e[0]),a(e[1])]:a(e),done:t}},[Symbol.iterator](){return this}}}}function Xe(e){return function(...t){return\"delete\"!==e&&this}}function Ze(){const e={get(e){return Le(this,e)},get size(){return De(this)},has:We,add:He,set:ze,delete:qe,clear:Ge,forEach:Ke(!1,!1)},t={get(e){return Le(this,e,!1,!0)},get size(){return De(this)},has:We,add:He,set:ze,delete:qe,clear:Ge,forEach:Ke(!1,!0)},n={get(e){return Le(this,e,!0)},get size(){return De(this,!0)},has(e){return We.call(this,e,!0)},add:Xe(\"add\"),set:Xe(\"set\"),delete:Xe(\"delete\"),clear:Xe(\"clear\"),forEach:Ke(!0,!1)},r={get(e){return Le(this,e,!0,!0)},get size(){return De(this,!0)},has(e){return We.call(this,e,!0)},add:Xe(\"add\"),set:Xe(\"set\"),delete:Xe(\"delete\"),clear:Xe(\"clear\"),forEach:Ke(!0,!0)};return[\"keys\",\"values\",\"entries\",Symbol.iterator].forEach((o=>{e[o]=Je(o,!1,!1),n[o]=Je(o,!0,!1),t[o]=Je(o,!1,!0),r[o]=Je(o,!0,!0)})),[e,n,t,r]}const[Qe,Ye,et,tt]=Ze();function nt(e,t){const n=t?e?tt:et:e?Ye:Qe;return(t,r,o)=>\"__v_isReactive\"===r?!e:\"__v_isReadonly\"===r?e:\"__v_raw\"===r?t:Reflect.get(E(n,r)&&r in t?n:t,r,o)}const rt={get:nt(!1,!1)},ot={get:nt(!1,!0)},st={get:nt(!0,!1)},lt=new WeakMap,it=new WeakMap,ct=new WeakMap,ut=new WeakMap;function at(e){return e.__v_skip||!Object.isExtensible(e)?0:function(e){switch(e){case\"Object\":case\"Array\":return 1;case\"Map\":case\"Set\":case\"WeakMap\":case\"WeakSet\":return 2;default:return 0}}((e=>W(e).slice(8,-1))(e))}function ft(e){return gt(e)?e:dt(e,!1,Ie,rt,lt)}function pt(e){return dt(e,!0,Ne,st,ct)}function dt(e,t,n,r,o){if(!U(e))return e;if(e.__v_raw&&(!t||!e.__v_isReactive))return e;const s=o.get(e);if(s)return s;const l=at(e);if(0===l)return e;const i=new Proxy(e,2===l?r:n);return o.set(e,i),i}function ht(e){return gt(e)?ht(e.__v_raw):!(!e||!e.__v_isReactive)}function gt(e){return!(!e||!e.__v_isReadonly)}function mt(e){return!(!e||!e.__v_isShallow)}function vt(e){return ht(e)||gt(e)}function yt(e){const t=e&&e.__v_raw;return t?yt(t):e}function _t(e){return te(e,\"__v_skip\",!0),e}const bt=e=>U(e)?ft(e):e,xt=e=>U(e)?pt(e):e;function wt(e){return!(!e||!0!==e.__v_isRef)}const St={get:(e,t,n)=>{return wt(r=Reflect.get(e,t,n))?r.value:r;var r},set:(e,t,n,r)=>{const o=e[t];return wt(o)&&!wt(n)?(o.value=n,!0):Reflect.set(e,t,n,r)}};function Ct(e){return ht(e)?e:new Proxy(e,St)}var kt;class Ot{constructor(e,t,n,r){this._setter=t,this.dep=void 0,this.__v_isRef=!0,this[kt]=!1,this._dirty=!0,this.effect=new ge(e,(()=>{this._dirty||(this._dirty=!0,function(e,t){const n=(e=yt(e)).dep;n&&Ce(n)}(this))})),this.effect.computed=this,this.effect.active=this._cacheable=!r,this.__v_isReadonly=n}get value(){const e=yt(this);var t;return t=e,ve&&pe&&we((t=yt(t)).dep||(t.dep=le())),!e._dirty&&e._cacheable||(e._dirty=!1,e._value=e.effect.run()),e._value}set value(e){this._setter(e)}}function Pt(e,t,n,r){let o;try{o=r?e(...r):e()}catch(s){Tt(s,t,n)}return o}function Rt(e,t,n,r){if(I(e)){const o=Pt(e,t,n,r);return o&&B(o)&&o.catch((e=>{Tt(e,t,n)})),o}const o=[];for(let s=0;s<e.length;s++)o.push(Rt(e[s],t,n,r));return o}function Tt(e,t,n,r=!0){if(t){let r=t.parent;const o=t.proxy,s=n;for(;r;){const t=r.ec;if(t)for(let n=0;n<t.length;n++)if(!1===t[n](e,o,s))return;r=r.parent}const l=t.appContext.config.errorHandler;if(l)return void Pt(l,null,10,[e,o,s])}!function(e,t,n,r=!0){console.error(e)}(e,0,0,r)}kt=\"__v_isReadonly\";let Ft=!1,Et=!1;const $t=[];let Mt=0;const jt=[];let At=null,It=0;const Nt=Promise.resolve();let Vt=null;function Ut(e){const t=Vt||Nt;return e?t.then(this?e.bind(this):e):t}function Bt(e){$t.length&&$t.includes(e,Ft&&e.allowRecurse?Mt+1:Mt)||(null==e.id?$t.push(e):$t.splice(function(e){let t=Mt+1,n=$t.length;for(;t<n;){const r=t+n>>>1;Ht($t[r])<e?t=r+1:n=r}return t}(e.id),0,e),Lt())}function Lt(){Ft||Et||(Et=!0,Vt=Nt.then(qt))}function Wt(e,t=(Ft?Mt+1:0)){for(;t<$t.length;t++){const e=$t[t];e&&e.pre&&($t.splice(t,1),t--,e())}}function Dt(e){if(jt.length){const e=[...new Set(jt)];if(jt.length=0,At)return void At.push(...e);for(At=e,At.sort(((e,t)=>Ht(e)-Ht(t))),It=0;It<At.length;It++)At[It]();At=null,It=0}}const Ht=e=>null==e.id?1/0:e.id,zt=(e,t)=>{const n=Ht(e)-Ht(t);if(0===n){if(e.pre&&!t.pre)return-1;if(t.pre&&!e.pre)return 1}return n};function qt(e){Et=!1,Ft=!0,$t.sort(zt);try{for(Mt=0;Mt<$t.length;Mt++){const e=$t[Mt];e&&!1!==e.active&&Pt(e,null,14)}}finally{Mt=0,$t.length=0,Dt(),Ft=!1,Vt=null,($t.length||jt.length)&&qt()}}function Gt(e,t,...n){if(e.isUnmounted)return;const r=e.vnode.props||x;let o=n;const s=t.startsWith(\"update:\"),l=s&&t.slice(7);if(l&&l in r){const e=`${\"modelValue\"===l?\"model\":l}Modifiers`,{number:t,trim:s}=r[e]||x;s&&(o=n.map((e=>N(e)?e.trim():e))),t&&(o=n.map(ne))}let i,c=r[i=Q(t)]||r[i=Q(K(t))];!c&&s&&(c=r[i=Q(X(t))]),c&&Rt(c,e,6,o);const u=r[i+\"Once\"];if(u){if(e.emitted){if(e.emitted[i])return}else e.emitted={};e.emitted[i]=!0,Rt(u,e,6,o)}}function Kt(e,t,n=!1){const r=t.emitsCache,o=r.get(e);if(void 0!==o)return o;const s=e.emits;let l={},i=!1;if(!I(e)){const r=e=>{const n=Kt(e,t,!0);n&&(i=!0,R(l,n))};!n&&t.mixins.length&&t.mixins.forEach(r),e.extends&&r(e.extends),e.mixins&&e.mixins.forEach(r)}return s||i?($(s)?s.forEach((e=>l[e]=null)):R(l,s),U(e)&&r.set(e,l),l):(U(e)&&r.set(e,null),null)}function Jt(e,t){return!(!e||!O(t))&&(t=t.slice(2).replace(/Once$/,\"\"),E(e,t[0].toLowerCase()+t.slice(1))||E(e,X(t))||E(e,t))}let Xt=null,Zt=null;function Qt(e){const t=Xt;return Xt=e,Zt=e&&e.type.__scopeId||null,t}function Yt(e){const{type:t,vnode:n,proxy:r,withProxy:o,props:s,propsOptions:[l],slots:i,attrs:c,emit:u,render:a,renderCache:f,data:p,setupState:d,ctx:h,inheritAttrs:g}=e;let m,v;const y=Qt(e);try{if(4&n.shapeFlag){const e=o||r;m=Pr(a.call(e,e,f,s,d,p,h)),v=c}else{const e=t;0,m=Pr(e(s,e.length>1?{attrs:c,slots:i,emit:u}:null)),v=t.props?c:en(c)}}catch(b){Tt(b,e,1),m=Cr(gr)}let _=m;if(v&&!1!==g){const e=Object.keys(v),{shapeFlag:t}=_;e.length&&7&t&&(l&&e.some(P)&&(v=tn(v,l)),_=kr(_,v))}return n.dirs&&(_=kr(_),_.dirs=_.dirs?_.dirs.concat(n.dirs):n.dirs),n.transition&&(_.transition=n.transition),m=_,Qt(y),m}const en=e=>{let t;for(const n in e)(\"class\"===n||\"style\"===n||O(n))&&((t||(t={}))[n]=e[n]);return t},tn=(e,t)=>{const n={};for(const r in e)P(r)&&r.slice(9)in t||(n[r]=e[r]);return n};function nn(e,t,n){const r=Object.keys(t);if(r.length!==Object.keys(e).length)return!0;for(let o=0;o<r.length;o++){const s=r[o];if(t[s]!==e[s]&&!Jt(n,s))return!0}return!1}function rn(e,t,n=!1){const r=Ar||Xt;if(r){const o=null==r.parent?r.vnode.appContext&&r.vnode.appContext.provides:r.parent.provides;if(o&&e in o)return o[e];if(arguments.length>1)return n&&I(t)?t.call(r.proxy):t}}const on={};function sn(e,t,n){return ln(e,t,n)}function ln(e,t,{immediate:n,deep:r,flush:o}=x){const s=oe===(null==Ar?void 0:Ar.scope)?Ar:null;let l,i,c=!1,u=!1;if(wt(e)?(l=()=>e.value,c=mt(e)):ht(e)?(l=()=>e,r=!0):$(e)?(u=!0,c=e.some((e=>ht(e)||mt(e))),l=()=>e.map((e=>wt(e)?e.value:ht(e)?an(e):I(e)?Pt(e,s,2):void 0))):l=I(e)?t?()=>Pt(e,s,2):()=>{if(!s||!s.isUnmounted)return i&&i(),Rt(e,s,3,[f])}:S,t&&r){const e=l;l=()=>an(e())}let a,f=e=>{i=g.onStop=()=>{Pt(e,s,4)}};if(Ur){if(f=S,t?n&&Rt(t,s,3,[l(),u?[]:void 0,f]):l(),\"sync\"!==o)return S;{const e=qr();a=e.__watcherHandles||(e.__watcherHandles=[])}}let p=u?new Array(e.length).fill(on):on;const d=()=>{if(g.active)if(t){const e=g.run();(r||c||(u?e.some(((e,t)=>Y(e,p[t]))):Y(e,p)))&&(i&&i(),Rt(t,s,3,[e,p===on?void 0:u&&p[0]===on?[]:p,f]),p=e)}else g.run()};let h;d.allowRecurse=!!t,\"sync\"===o?h=d:\"post\"===o?h=()=>ur(d,s&&s.suspense):(d.pre=!0,s&&(d.id=s.uid),h=()=>Bt(d));const g=new ge(l,h);t?n?d():p=g.run():\"post\"===o?ur(g.run.bind(g),s&&s.suspense):g.run();const m=()=>{g.stop(),s&&s.scope&&T(s.scope.effects,g)};return a&&a.push(m),m}function cn(e,t,n){const r=this.proxy,o=N(e)?e.includes(\".\")?un(r,e):()=>r[e]:e.bind(r,r);let s;I(t)?s=t:(s=t.handler,n=t);const l=Ar;Ir(this);const i=ln(o,s.bind(r),n);return l?Ir(l):Nr(),i}function un(e,t){const n=t.split(\".\");return()=>{let t=e;for(let e=0;e<n.length&&t;e++)t=t[n[e]];return t}}function an(e,t){if(!U(e)||e.__v_skip)return e;if((t=t||new Set).has(e))return e;if(t.add(e),wt(e))an(e.value,t);else if($(e))for(let n=0;n<e.length;n++)an(e[n],t);else if(j(e)||M(e))e.forEach((e=>{an(e,t)}));else if(D(e))for(const n in e)an(e[n],t);return e}const fn=e=>!!e.type.__asyncLoader,pn=e=>e.type.__isKeepAlive;function dn(e,t){gn(e,\"a\",t)}function hn(e,t){gn(e,\"da\",t)}function gn(e,t,n=Ar){const r=e.__wdc||(e.__wdc=()=>{let t=n;for(;t;){if(t.isDeactivated)return;t=t.parent}return e()});if(vn(t,r,n),n){let e=n.parent;for(;e&&e.parent;)pn(e.parent.vnode)&&mn(r,t,n,e),e=e.parent}}function mn(e,t,n,r){const o=vn(t,e,r,!0);Cn((()=>{T(r[t],o)}),n)}function vn(e,t,n=Ar,r=!1){if(n){const o=n[e]||(n[e]=[]),s=t.__weh||(t.__weh=(...r)=>{if(n.isUnmounted)return;_e(),Ir(n);const o=Rt(t,n,e,r);return Nr(),be(),o});return r?o.unshift(s):o.push(s),s}}const yn=e=>(t,n=Ar)=>(!Ur||\"sp\"===e)&&vn(e,((...e)=>t(...e)),n),_n=yn(\"bm\"),bn=yn(\"m\"),xn=yn(\"bu\"),wn=yn(\"u\"),Sn=yn(\"bum\"),Cn=yn(\"um\"),kn=yn(\"sp\"),On=yn(\"rtg\"),Pn=yn(\"rtc\");function Rn(e,t=Ar){vn(\"ec\",e,t)}function Tn(e,t,n,r){const o=e.dirs,s=t&&t.dirs;for(let l=0;l<o.length;l++){const i=o[l];s&&(i.oldValue=s[l].value);let c=i.dir[r];c&&(_e(),Rt(c,n,8,[e.el,i,e,t]),be())}}const Fn=Symbol(),En=e=>e?Vr(e)?Dr(e)||e.proxy:En(e.parent):null,$n=R(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>En(e.parent),$root:e=>En(e.root),$emit:e=>e.emit,$options:e=>Un(e),$forceUpdate:e=>e.f||(e.f=()=>Bt(e.update)),$nextTick:e=>e.n||(e.n=Ut.bind(e.proxy)),$watch:e=>cn.bind(e)}),Mn=(e,t)=>e!==x&&!e.__isScriptSetup&&E(e,t),jn={get({_:e},t){const{ctx:n,setupState:r,data:o,props:s,accessCache:l,type:i,appContext:c}=e;let u;if(\"$\"!==t[0]){const i=l[t];if(void 0!==i)switch(i){case 1:return r[t];case 2:return o[t];case 4:return n[t];case 3:return s[t]}else{if(Mn(r,t))return l[t]=1,r[t];if(o!==x&&E(o,t))return l[t]=2,o[t];if((u=e.propsOptions[0])&&E(u,t))return l[t]=3,s[t];if(n!==x&&E(n,t))return l[t]=4,n[t];An&&(l[t]=0)}}const a=$n[t];let f,p;return a?(\"$attrs\"===t&&xe(e,0,t),a(e)):(f=i.__cssModules)&&(f=f[t])?f:n!==x&&E(n,t)?(l[t]=4,n[t]):(p=c.config.globalProperties,E(p,t)?p[t]:void 0)},set({_:e},t,n){const{data:r,setupState:o,ctx:s}=e;return Mn(o,t)?(o[t]=n,!0):r!==x&&E(r,t)?(r[t]=n,!0):!E(e.props,t)&&((\"$\"!==t[0]||!(t.slice(1)in e))&&(s[t]=n,!0))},has({_:{data:e,setupState:t,accessCache:n,ctx:r,appContext:o,propsOptions:s}},l){let i;return!!n[l]||e!==x&&E(e,l)||Mn(t,l)||(i=s[0])&&E(i,l)||E(r,l)||E($n,l)||E(o.config.globalProperties,l)},defineProperty(e,t,n){return null!=n.get?e._.accessCache[t]=0:E(n,\"value\")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};let An=!0;function In(e){const t=Un(e),n=e.proxy,r=e.ctx;An=!1,t.beforeCreate&&Nn(t.beforeCreate,e,\"bc\");const{data:o,computed:s,methods:l,watch:i,provide:c,inject:u,created:a,beforeMount:f,mounted:p,beforeUpdate:d,updated:h,activated:g,deactivated:m,beforeUnmount:v,unmounted:y,render:_,renderTracked:b,renderTriggered:x,errorCaptured:w,serverPrefetch:C,expose:k,inheritAttrs:O,components:P,directives:R}=t;if(u&&function(e,t,n=S,r=!1){$(e)&&(e=Dn(e));for(const o in e){const n=e[o];let s;s=U(n)?\"default\"in n?rn(n.from||o,n.default,!0):rn(n.from||o):rn(n),wt(s)&&r?Object.defineProperty(t,o,{enumerable:!0,configurable:!0,get:()=>s.value,set:e=>s.value=e}):t[o]=s}}(u,r,null,e.appContext.config.unwrapInjectedRef),l)for(const S in l){const e=l[S];I(e)&&(r[S]=e.bind(n))}if(o){const t=o.call(n,n);U(t)&&(e.data=ft(t))}if(An=!0,s)for(const F in s){const e=s[F],t=I(e)?e.bind(n,n):I(e.get)?e.get.bind(n,n):S,o=!I(e)&&I(e.set)?e.set.bind(n):S,l=Hr({get:t,set:o});Object.defineProperty(r,F,{enumerable:!0,configurable:!0,get:()=>l.value,set:e=>l.value=e})}if(i)for(const S in i)Vn(i[S],r,n,S);if(c){const e=I(c)?c.call(n):c;Reflect.ownKeys(e).forEach((t=>{!function(e,t){if(Ar){let n=Ar.provides;const r=Ar.parent&&Ar.parent.provides;r===n&&(n=Ar.provides=Object.create(r)),n[e]=t}}(t,e[t])}))}function T(e,t){$(t)?t.forEach((t=>e(t.bind(n)))):t&&e(t.bind(n))}if(a&&Nn(a,e,\"c\"),T(_n,f),T(bn,p),T(xn,d),T(wn,h),T(dn,g),T(hn,m),T(Rn,w),T(Pn,b),T(On,x),T(Sn,v),T(Cn,y),T(kn,C),$(k))if(k.length){const t=e.exposed||(e.exposed={});k.forEach((e=>{Object.defineProperty(t,e,{get:()=>n[e],set:t=>n[e]=t})}))}else e.exposed||(e.exposed={});_&&e.render===S&&(e.render=_),null!=O&&(e.inheritAttrs=O),P&&(e.components=P),R&&(e.directives=R)}function Nn(e,t,n){Rt($(e)?e.map((e=>e.bind(t.proxy))):e.bind(t.proxy),t,n)}function Vn(e,t,n,r){const o=r.includes(\".\")?un(n,r):()=>n[r];if(N(e)){const n=t[e];I(n)&&sn(o,n)}else if(I(e))sn(o,e.bind(n));else if(U(e))if($(e))e.forEach((e=>Vn(e,t,n,r)));else{const r=I(e.handler)?e.handler.bind(n):t[e.handler];I(r)&&sn(o,r,e)}}function Un(e){const t=e.type,{mixins:n,extends:r}=t,{mixins:o,optionsCache:s,config:{optionMergeStrategies:l}}=e.appContext,i=s.get(t);let c;return i?c=i:o.length||n||r?(c={},o.length&&o.forEach((e=>Bn(c,e,l,!0))),Bn(c,t,l)):c=t,U(t)&&s.set(t,c),c}function Bn(e,t,n,r=!1){const{mixins:o,extends:s}=t;s&&Bn(e,s,n,!0),o&&o.forEach((t=>Bn(e,t,n,!0)));for(const l in t)if(r&&\"expose\"===l);else{const r=Ln[l]||n&&n[l];e[l]=r?r(e[l],t[l]):t[l]}return e}const Ln={data:Wn,props:zn,emits:zn,methods:zn,computed:zn,beforeCreate:Hn,created:Hn,beforeMount:Hn,mounted:Hn,beforeUpdate:Hn,updated:Hn,beforeDestroy:Hn,beforeUnmount:Hn,destroyed:Hn,unmounted:Hn,activated:Hn,deactivated:Hn,errorCaptured:Hn,serverPrefetch:Hn,components:zn,directives:zn,watch:function(e,t){if(!e)return t;if(!t)return e;const n=R(Object.create(null),e);for(const r in t)n[r]=Hn(e[r],t[r]);return n},provide:Wn,inject:function(e,t){return zn(Dn(e),Dn(t))}};function Wn(e,t){return t?e?function(){return R(I(e)?e.call(this,this):e,I(t)?t.call(this,this):t)}:t:e}function Dn(e){if($(e)){const t={};for(let n=0;n<e.length;n++)t[e[n]]=e[n];return t}return e}function Hn(e,t){return e?[...new Set([].concat(e,t))]:t}function zn(e,t){return e?R(R(Object.create(null),e),t):t}function qn(e,t,n,r=!1){const o={},s={};te(s,xr,1),e.propsDefaults=Object.create(null),Gn(e,t,o,s);for(const l in e.propsOptions[0])l in o||(o[l]=void 0);e.props=n?r?o:dt(o,!1,Ve,ot,it):e.type.props?o:s,e.attrs=s}function Gn(e,t,n,r){const[o,s]=e.propsOptions;let l,i=!1;if(t)for(let c in t){if(z(c))continue;const u=t[c];let a;o&&E(o,a=K(c))?s&&s.includes(a)?(l||(l={}))[a]=u:n[a]=u:Jt(e.emitsOptions,c)||c in r&&u===r[c]||(r[c]=u,i=!0)}if(s){const t=yt(n),r=l||x;for(let l=0;l<s.length;l++){const i=s[l];n[i]=Kn(o,t,i,r[i],e,!E(r,i))}}return i}function Kn(e,t,n,r,o,s){const l=e[n];if(null!=l){const e=E(l,\"default\");if(e&&void 0===r){const e=l.default;if(l.type!==Function&&I(e)){const{propsDefaults:s}=o;n in s?r=s[n]:(Ir(o),r=s[n]=e.call(null,t),Nr())}else r=e}l[0]&&(s&&!e?r=!1:!l[1]||\"\"!==r&&r!==X(n)||(r=!0))}return r}function Jn(e,t,n=!1){const r=t.propsCache,o=r.get(e);if(o)return o;const s=e.props,l={},i=[];let c=!1;if(!I(e)){const r=e=>{c=!0;const[n,r]=Jn(e,t,!0);R(l,n),r&&i.push(...r)};!n&&t.mixins.length&&t.mixins.forEach(r),e.extends&&r(e.extends),e.mixins&&e.mixins.forEach(r)}if(!s&&!c)return U(e)&&r.set(e,w),w;if($(s))for(let a=0;a<s.length;a++){const e=K(s[a]);Xn(e)&&(l[e]=x)}else if(s)for(const a in s){const e=K(a);if(Xn(e)){const t=s[a],n=l[e]=$(t)||I(t)?{type:t}:{...t};if(n){const t=Yn(Boolean,n.type),r=Yn(String,n.type);n[0]=t>-1,n[1]=r<0||t<r,(t>-1||E(n,\"default\"))&&i.push(e)}}}const u=[l,i];return U(e)&&r.set(e,u),u}function Xn(e){return\"$\"!==e[0]}function Zn(e){const t=e&&e.toString().match(/^\\s*(function|class) (\\w+)/);return t?t[2]:null===e?\"null\":\"\"}function Qn(e,t){return Zn(e)===Zn(t)}function Yn(e,t){return $(t)?t.findIndex((t=>Qn(t,e))):I(t)&&Qn(t,e)?0:-1}const er=e=>\"_\"===e[0]||\"$stable\"===e,tr=e=>$(e)?e.map(Pr):[Pr(e)],nr=(e,t,n)=>{if(t._n)return t;const r=function(e,t=Xt,n){if(!t)return e;if(e._n)return e;const r=(...n)=>{r._d&&yr(-1);const o=Qt(t);let s;try{s=e(...n)}finally{Qt(o),r._d&&yr(1)}return s};return r._n=!0,r._c=!0,r._d=!0,r}(((...e)=>tr(t(...e))),n);return r._c=!1,r},rr=(e,t,n)=>{const r=e._ctx;for(const o in e){if(er(o))continue;const n=e[o];if(I(n))t[o]=nr(0,n,r);else if(null!=n){const e=tr(n);t[o]=()=>e}}},or=(e,t)=>{const n=tr(t);e.slots.default=()=>n};function sr(){return{app:null,config:{isNativeTag:C,performance:!1,globalProperties:{},optionMergeStrategies:{},errorHandler:void 0,warnHandler:void 0,compilerOptions:{}},mixins:[],components:{},directives:{},provides:Object.create(null),optionsCache:new WeakMap,propsCache:new WeakMap,emitsCache:new WeakMap}}let lr=0;function ir(e,t){return function(n,r=null){I(n)||(n={...n}),null==r||U(r)||(r=null);const o=sr(),s=new Set;let l=!1;const i=o.app={_uid:lr++,_component:n,_props:r,_container:null,_context:o,_instance:null,version:Gr,get config(){return o.config},set config(e){},use:(e,...t)=>(s.has(e)||(e&&I(e.install)?(s.add(e),e.install(i,...t)):I(e)&&(s.add(e),e(i,...t))),i),mixin:e=>(o.mixins.includes(e)||o.mixins.push(e),i),component:(e,t)=>t?(o.components[e]=t,i):o.components[e],directive:(e,t)=>t?(o.directives[e]=t,i):o.directives[e],mount(s,c,u){if(!l){const a=Cr(n,r);return a.appContext=o,c&&t?t(a,s):e(a,s,u),l=!0,i._container=s,s.__vue_app__=i,Dr(a.component)||a.component.proxy}},unmount(){l&&(e(null,i._container),delete i._container.__vue_app__)},provide:(e,t)=>(o.provides[e]=t,i)};return i}}function cr(e,t,n,r,o=!1){if($(e))return void e.forEach(((e,s)=>cr(e,t&&($(t)?t[s]:t),n,r,o)));if(fn(r)&&!o)return;const s=4&r.shapeFlag?Dr(r.component)||r.component.proxy:r.el,l=o?null:s,{i:i,r:c}=e,u=t&&t.r,a=i.refs===x?i.refs={}:i.refs,f=i.setupState;if(null!=u&&u!==c&&(N(u)?(a[u]=null,E(f,u)&&(f[u]=null)):wt(u)&&(u.value=null)),I(c))Pt(c,i,12,[l,a]);else{const t=N(c),r=wt(c);if(t||r){const i=()=>{if(e.f){const n=t?E(f,c)?f[c]:a[c]:c.value;o?$(n)&&T(n,s):$(n)?n.includes(s)||n.push(s):t?(a[c]=[s],E(f,c)&&(f[c]=a[c])):(c.value=[s],e.k&&(a[e.k]=c.value))}else t?(a[c]=l,E(f,c)&&(f[c]=l)):r&&(c.value=l,e.k&&(a[e.k]=l))};l?(i.id=-1,ur(i,n)):i()}}}const ur=function(e,t){var n;t&&t.pendingBranch?$(e)?t.effects.push(...e):t.effects.push(e):($(n=e)?jt.push(...n):At&&At.includes(n,n.allowRecurse?It+1:It)||jt.push(n),Lt())};function ar(e){return function(e,t){(re||(re=\"undefined\"!=typeof globalThis?globalThis:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:{})).__VUE__=!0;const{insert:n,remove:r,patchProp:o,createElement:s,createText:l,createComment:i,setText:c,setElementText:u,parentNode:a,nextSibling:f,setScopeId:p=S,insertStaticContent:d}=e,h=(e,t,n,r=null,o=null,s=null,l=!1,i=null,c=!!t.dynamicChildren)=>{if(e===t)return;e&&!br(e,t)&&(r=J(e),W(e,o,s,!0),e=null),-2===t.patchFlag&&(c=!1,t.dynamicChildren=null);const{type:u,ref:a,shapeFlag:f}=t;switch(u){case hr:g(e,t,n,r);break;case gr:m(e,t,n,r);break;case mr:null==e&&v(t,n,r,l);break;case dr:$(e,t,n,r,o,s,l,i,c);break;default:1&f?b(e,t,n,r,o,s,l,i,c):6&f?M(e,t,n,r,o,s,l,i,c):(64&f||128&f)&&u.process(e,t,n,r,o,s,l,i,c,Q)}null!=a&&o&&cr(a,e&&e.ref,s,t||e,!t)},g=(e,t,r,o)=>{if(null==e)n(t.el=l(t.children),r,o);else{const n=t.el=e.el;t.children!==e.children&&c(n,t.children)}},m=(e,t,r,o)=>{null==e?n(t.el=i(t.children||\"\"),r,o):t.el=e.el},v=(e,t,n,r)=>{[e.el,e.anchor]=d(e.children,t,n,r,e.el,e.anchor)},y=({el:e,anchor:t},r,o)=>{let s;for(;e&&e!==t;)s=f(e),n(e,r,o),e=s;n(t,r,o)},_=({el:e,anchor:t})=>{let n;for(;e&&e!==t;)n=f(e),r(e),e=n;r(t)},b=(e,t,n,r,o,s,l,i,c)=>{l=l||\"svg\"===t.type,null==e?C(t,n,r,o,s,l,i,c):P(e,t,o,s,l,i,c)},C=(e,t,r,l,i,c,a,f)=>{let p,d;const{type:h,props:g,shapeFlag:m,transition:v,dirs:y}=e;if(p=e.el=s(e.type,c,g&&g.is,g),8&m?u(p,e.children):16&m&&O(e.children,p,null,l,i,c&&\"foreignObject\"!==h,a,f),y&&Tn(e,null,l,\"created\"),k(p,e,e.scopeId,a,l),g){for(const t in g)\"value\"===t||z(t)||o(p,t,null,g[t],c,e.children,l,i,G);\"value\"in g&&o(p,\"value\",null,g.value),(d=g.onVnodeBeforeMount)&&Er(d,l,e)}y&&Tn(e,null,l,\"beforeMount\");const _=(!i||i&&!i.pendingBranch)&&v&&!v.persisted;_&&v.beforeEnter(p),n(p,t,r),((d=g&&g.onVnodeMounted)||_||y)&&ur((()=>{d&&Er(d,l,e),_&&v.enter(p),y&&Tn(e,null,l,\"mounted\")}),i)},k=(e,t,n,r,o)=>{if(n&&p(e,n),r)for(let s=0;s<r.length;s++)p(e,r[s]);if(o){if(t===o.subTree){const t=o.vnode;k(e,t,t.scopeId,t.slotScopeIds,o.parent)}}},O=(e,t,n,r,o,s,l,i,c=0)=>{for(let u=c;u<e.length;u++){const c=e[u]=i?Rr(e[u]):Pr(e[u]);h(null,c,t,n,r,o,s,l,i)}},P=(e,t,n,r,s,l,i)=>{const c=t.el=e.el;let{patchFlag:a,dynamicChildren:f,dirs:p}=t;a|=16&e.patchFlag;const d=e.props||x,h=t.props||x;let g;n&&fr(n,!1),(g=h.onVnodeBeforeUpdate)&&Er(g,n,t,e),p&&Tn(t,e,n,\"beforeUpdate\"),n&&fr(n,!0);const m=s&&\"foreignObject\"!==t.type;if(f?T(e.dynamicChildren,f,c,n,r,m,l):i||V(e,t,c,null,n,r,m,l,!1),a>0){if(16&a)F(c,t,d,h,n,r,s);else if(2&a&&d.class!==h.class&&o(c,\"class\",null,h.class,s),4&a&&o(c,\"style\",d.style,h.style,s),8&a){const l=t.dynamicProps;for(let t=0;t<l.length;t++){const i=l[t],u=d[i],a=h[i];a===u&&\"value\"!==i||o(c,i,u,a,s,e.children,n,r,G)}}1&a&&e.children!==t.children&&u(c,t.children)}else i||null!=f||F(c,t,d,h,n,r,s);((g=h.onVnodeUpdated)||p)&&ur((()=>{g&&Er(g,n,t,e),p&&Tn(t,e,n,\"updated\")}),r)},T=(e,t,n,r,o,s,l)=>{for(let i=0;i<t.length;i++){const c=e[i],u=t[i],f=c.el&&(c.type===dr||!br(c,u)||70&c.shapeFlag)?a(c.el):n;h(c,u,f,null,r,o,s,l,!0)}},F=(e,t,n,r,s,l,i)=>{if(n!==r){if(n!==x)for(const c in n)z(c)||c in r||o(e,c,n[c],null,i,t.children,s,l,G);for(const c in r){if(z(c))continue;const u=r[c],a=n[c];u!==a&&\"value\"!==c&&o(e,c,a,u,i,t.children,s,l,G)}\"value\"in r&&o(e,\"value\",n.value,r.value)}},$=(e,t,r,o,s,i,c,u,a)=>{const f=t.el=e?e.el:l(\"\"),p=t.anchor=e?e.anchor:l(\"\");let{patchFlag:d,dynamicChildren:h,slotScopeIds:g}=t;g&&(u=u?u.concat(g):g),null==e?(n(f,r,o),n(p,r,o),O(t.children,r,p,s,i,c,u,a)):d>0&&64&d&&h&&e.dynamicChildren?(T(e.dynamicChildren,h,r,s,i,c,u),(null!=t.key||s&&t===s.subTree)&&pr(e,t,!0)):V(e,t,r,p,s,i,c,u,a)},M=(e,t,n,r,o,s,l,i,c)=>{t.slotScopeIds=i,null==e?512&t.shapeFlag?o.ctx.activate(t,n,r,l,c):j(t,n,r,o,s,l,c):A(e,t,c)},j=(e,t,n,r,o,s,l)=>{const i=e.component=jr(e,r,o);if(pn(e)&&(i.ctx.renderer=Q),Br(i),i.asyncDep){if(o&&o.registerDep(i,I),!e.el){const e=i.subTree=Cr(gr);m(null,e,t,n)}}else I(i,e,t,n,o,s,l)},A=(e,t,n)=>{const r=t.component=e.component;if(function(e,t,n){const{props:r,children:o,component:s}=e,{props:l,children:i,patchFlag:c}=t,u=s.emitsOptions;if(t.dirs||t.transition)return!0;if(!(n&&c>=0))return!(!o&&!i||i&&i.$stable)||r!==l&&(r?!l||nn(r,l,u):!!l);if(1024&c)return!0;if(16&c)return r?nn(r,l,u):!!l;if(8&c){const e=t.dynamicProps;for(let t=0;t<e.length;t++){const n=e[t];if(l[n]!==r[n]&&!Jt(u,n))return!0}}return!1}(e,t,n)){if(r.asyncDep&&!r.asyncResolved)return void N(r,t,n);r.next=t,function(e){const t=$t.indexOf(e);t>Mt&&$t.splice(t,1)}(r.update),r.update()}else t.el=e.el,r.vnode=t},I=(e,t,n,r,o,s,l)=>{const i=()=>{if(e.isMounted){let t,{next:n,bu:r,u:i,parent:c,vnode:u}=e,f=n;fr(e,!1),n?(n.el=u.el,N(e,n,l)):n=u,r&&ee(r),(t=n.props&&n.props.onVnodeBeforeUpdate)&&Er(t,c,n,u),fr(e,!0);const p=Yt(e),d=e.subTree;e.subTree=p,h(d,p,a(d.el),J(d),e,o,s),n.el=p.el,null===f&&function({vnode:e,parent:t},n){for(;t&&t.subTree===e;)(e=t.vnode).el=n,t=t.parent}(e,p.el),i&&ur(i,o),(t=n.props&&n.props.onVnodeUpdated)&&ur((()=>Er(t,c,n,u)),o)}else{let l;const{el:i,props:c}=t,{bm:u,m:a,parent:f}=e,p=fn(t);if(fr(e,!1),u&&ee(u),!p&&(l=c&&c.onVnodeBeforeMount)&&Er(l,f,t),fr(e,!0),i&&te){const n=()=>{e.subTree=Yt(e),te(i,e.subTree,e,o,null)};p?t.type.__asyncLoader().then((()=>!e.isUnmounted&&n())):n()}else{const l=e.subTree=Yt(e);h(null,l,n,r,e,o,s),t.el=l.el}if(a&&ur(a,o),!p&&(l=c&&c.onVnodeMounted)){const e=t;ur((()=>Er(l,f,e)),o)}(256&t.shapeFlag||f&&fn(f.vnode)&&256&f.vnode.shapeFlag)&&e.a&&ur(e.a,o),e.isMounted=!0,t=n=r=null}},c=e.effect=new ge(i,(()=>Bt(u)),e.scope),u=e.update=()=>c.run();u.id=e.uid,fr(e,!0),u()},N=(e,t,n)=>{t.component=e;const r=e.vnode.props;e.vnode=t,e.next=null,function(e,t,n,r){const{props:o,attrs:s,vnode:{patchFlag:l}}=e,i=yt(o),[c]=e.propsOptions;let u=!1;if(!(r||l>0)||16&l){let r;Gn(e,t,o,s)&&(u=!0);for(const s in i)t&&(E(t,s)||(r=X(s))!==s&&E(t,r))||(c?!n||void 0===n[s]&&void 0===n[r]||(o[s]=Kn(c,i,s,void 0,e,!0)):delete o[s]);if(s!==i)for(const e in s)t&&E(t,e)||(delete s[e],u=!0)}else if(8&l){const n=e.vnode.dynamicProps;for(let r=0;r<n.length;r++){let l=n[r];if(Jt(e.emitsOptions,l))continue;const a=t[l];if(c)if(E(s,l))a!==s[l]&&(s[l]=a,u=!0);else{const t=K(l);o[t]=Kn(c,i,t,a,e,!1)}else a!==s[l]&&(s[l]=a,u=!0)}}u&&Se(e,\"set\",\"$attrs\")}(e,t.props,r,n),((e,t,n)=>{const{vnode:r,slots:o}=e;let s=!0,l=x;if(32&r.shapeFlag){const e=t._;e?n&&1===e?s=!1:(R(o,t),n||1!==e||delete o._):(s=!t.$stable,rr(t,o)),l=t}else t&&(or(e,t),l={default:1});if(s)for(const i in o)er(i)||i in l||delete o[i]})(e,t.children,n),_e(),Wt(),be()},V=(e,t,n,r,o,s,l,i,c=!1)=>{const a=e&&e.children,f=e?e.shapeFlag:0,p=t.children,{patchFlag:d,shapeFlag:h}=t;if(d>0){if(128&d)return void B(a,p,n,r,o,s,l,i,c);if(256&d)return void U(a,p,n,r,o,s,l,i,c)}8&h?(16&f&&G(a,o,s),p!==a&&u(n,p)):16&f?16&h?B(a,p,n,r,o,s,l,i,c):G(a,o,s,!0):(8&f&&u(n,\"\"),16&h&&O(p,n,r,o,s,l,i,c))},U=(e,t,n,r,o,s,l,i,c)=>{const u=(e=e||w).length,a=(t=t||w).length,f=Math.min(u,a);let p;for(p=0;p<f;p++){const r=t[p]=c?Rr(t[p]):Pr(t[p]);h(e[p],r,n,null,o,s,l,i,c)}u>a?G(e,o,s,!0,!1,f):O(t,n,r,o,s,l,i,c,f)},B=(e,t,n,r,o,s,l,i,c)=>{let u=0;const a=t.length;let f=e.length-1,p=a-1;for(;u<=f&&u<=p;){const r=e[u],a=t[u]=c?Rr(t[u]):Pr(t[u]);if(!br(r,a))break;h(r,a,n,null,o,s,l,i,c),u++}for(;u<=f&&u<=p;){const r=e[f],u=t[p]=c?Rr(t[p]):Pr(t[p]);if(!br(r,u))break;h(r,u,n,null,o,s,l,i,c),f--,p--}if(u>f){if(u<=p){const e=p+1,f=e<a?t[e].el:r;for(;u<=p;)h(null,t[u]=c?Rr(t[u]):Pr(t[u]),n,f,o,s,l,i,c),u++}}else if(u>p)for(;u<=f;)W(e[u],o,s,!0),u++;else{const d=u,g=u,m=new Map;for(u=g;u<=p;u++){const e=t[u]=c?Rr(t[u]):Pr(t[u]);null!=e.key&&m.set(e.key,u)}let v,y=0;const _=p-g+1;let b=!1,x=0;const S=new Array(_);for(u=0;u<_;u++)S[u]=0;for(u=d;u<=f;u++){const r=e[u];if(y>=_){W(r,o,s,!0);continue}let a;if(null!=r.key)a=m.get(r.key);else for(v=g;v<=p;v++)if(0===S[v-g]&&br(r,t[v])){a=v;break}void 0===a?W(r,o,s,!0):(S[a-g]=u+1,a>=x?x=a:b=!0,h(r,t[a],n,null,o,s,l,i,c),y++)}const C=b?function(e){const t=e.slice(),n=[0];let r,o,s,l,i;const c=e.length;for(r=0;r<c;r++){const c=e[r];if(0!==c){if(o=n[n.length-1],e[o]<c){t[r]=o,n.push(r);continue}for(s=0,l=n.length-1;s<l;)i=s+l>>1,e[n[i]]<c?s=i+1:l=i;c<e[n[s]]&&(s>0&&(t[r]=n[s-1]),n[s]=r)}}s=n.length,l=n[s-1];for(;s-- >0;)n[s]=l,l=t[l];return n}(S):w;for(v=C.length-1,u=_-1;u>=0;u--){const e=g+u,f=t[e],p=e+1<a?t[e+1].el:r;0===S[u]?h(null,f,n,p,o,s,l,i,c):b&&(v<0||u!==C[v]?L(f,n,p,2):v--)}}},L=(e,t,r,o,s=null)=>{const{el:l,type:i,transition:c,children:u,shapeFlag:a}=e;if(6&a)return void L(e.component.subTree,t,r,o);if(128&a)return void e.suspense.move(t,r,o);if(64&a)return void i.move(e,t,r,Q);if(i===dr){n(l,t,r);for(let e=0;e<u.length;e++)L(u[e],t,r,o);return void n(e.anchor,t,r)}if(i===mr)return void y(e,t,r);if(2!==o&&1&a&&c)if(0===o)c.beforeEnter(l),n(l,t,r),ur((()=>c.enter(l)),s);else{const{leave:e,delayLeave:o,afterLeave:s}=c,i=()=>n(l,t,r),u=()=>{e(l,(()=>{i(),s&&s()}))};o?o(l,i,u):u()}else n(l,t,r)},W=(e,t,n,r=!1,o=!1)=>{const{type:s,props:l,ref:i,children:c,dynamicChildren:u,shapeFlag:a,patchFlag:f,dirs:p}=e;if(null!=i&&cr(i,null,n,e,!0),256&a)return void t.ctx.deactivate(e);const d=1&a&&p,h=!fn(e);let g;if(h&&(g=l&&l.onVnodeBeforeUnmount)&&Er(g,t,e),6&a)q(e.component,n,r);else{if(128&a)return void e.suspense.unmount(n,r);d&&Tn(e,null,t,\"beforeUnmount\"),64&a?e.type.remove(e,t,n,o,Q,r):u&&(s!==dr||f>0&&64&f)?G(u,t,n,!1,!0):(s===dr&&384&f||!o&&16&a)&&G(c,t,n),r&&D(e)}(h&&(g=l&&l.onVnodeUnmounted)||d)&&ur((()=>{g&&Er(g,t,e),d&&Tn(e,null,t,\"unmounted\")}),n)},D=e=>{const{type:t,el:n,anchor:o,transition:s}=e;if(t===dr)return void H(n,o);if(t===mr)return void _(e);const l=()=>{r(n),s&&!s.persisted&&s.afterLeave&&s.afterLeave()};if(1&e.shapeFlag&&s&&!s.persisted){const{leave:t,delayLeave:r}=s,o=()=>t(n,l);r?r(e.el,l,o):o()}else l()},H=(e,t)=>{let n;for(;e!==t;)n=f(e),r(e),e=n;r(t)},q=(e,t,n)=>{const{bum:r,scope:o,update:s,subTree:l,um:i}=e;r&&ee(r),o.stop(),s&&(s.active=!1,W(l,e,t,n)),i&&ur(i,t),ur((()=>{e.isUnmounted=!0}),t),t&&t.pendingBranch&&!t.isUnmounted&&e.asyncDep&&!e.asyncResolved&&e.suspenseId===t.pendingId&&(t.deps--,0===t.deps&&t.resolve())},G=(e,t,n,r=!1,o=!1,s=0)=>{for(let l=s;l<e.length;l++)W(e[l],t,n,r,o)},J=e=>6&e.shapeFlag?J(e.component.subTree):128&e.shapeFlag?e.suspense.next():f(e.anchor||e.el),Z=(e,t,n)=>{null==e?t._vnode&&W(t._vnode,null,null,!0):h(t._vnode||null,e,t,null,null,null,n),Wt(),Dt(),t._vnode=e},Q={p:h,um:W,m:L,r:D,mt:j,mc:O,pc:V,pbc:T,n:J,o:e};let Y,te;t&&([Y,te]=t(Q));return{render:Z,hydrate:Y,createApp:ir(Z,Y)}}(e)}function fr({effect:e,update:t},n){e.allowRecurse=t.allowRecurse=n}function pr(e,t,n=!1){const r=e.children,o=t.children;if($(r)&&$(o))for(let s=0;s<r.length;s++){const e=r[s];let t=o[s];1&t.shapeFlag&&!t.dynamicChildren&&((t.patchFlag<=0||32===t.patchFlag)&&(t=o[s]=Rr(o[s]),t.el=e.el),n||pr(e,t)),t.type===hr&&(t.el=e.el)}}const dr=Symbol(void 0),hr=Symbol(void 0),gr=Symbol(void 0),mr=Symbol(void 0);let vr=1;function yr(e){vr+=e}function _r(e){return!!e&&!0===e.__v_isVNode}function br(e,t){return e.type===t.type&&e.key===t.key}const xr=\"__vInternal\",wr=({key:e})=>null!=e?e:null,Sr=({ref:e,ref_key:t,ref_for:n})=>null!=e?N(e)||wt(e)||I(e)?{i:Xt,r:e,k:t,f:!!n}:e:null;const Cr=function(e,n=null,r=null,o=0,s=null,i=!1){e&&e!==Fn||(e=gr);if(_r(e)){const t=kr(e,n,!0);return r&&Tr(t,r),t.patchFlag|=-2,t}c=e,I(c)&&\"__vccOpts\"in c&&(e=e.__vccOpts);var c;if(n){n=function(e){return e?vt(e)||xr in e?R({},e):e:null}(n);let{class:e,style:r}=n;e&&!N(e)&&(n.class=l(e)),U(r)&&(vt(r)&&!$(r)&&(r=R({},r)),n.style=t(r))}const u=N(e)?1:(e=>e.__isSuspense)(e)?128:(e=>e.__isTeleport)(e)?64:U(e)?4:I(e)?2:0;return function(e,t=null,n=null,r=0,o=null,s=(e===dr?0:1),l=!1,i=!1){const c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&wr(t),ref:t&&Sr(t),scopeId:Zt,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:s,patchFlag:r,dynamicProps:o,dynamicChildren:null,appContext:null,ctx:Xt};return i?(Tr(c,n),128&s&&e.normalize(c)):n&&(c.shapeFlag|=N(n)?8:16),c}(e,n,r,o,s,u,i,!0)};function kr(e,t,n=!1){const{props:r,ref:o,patchFlag:s,children:l}=e,i=t?Fr(r||{},t):r;return{__v_isVNode:!0,__v_skip:!0,type:e.type,props:i,key:i&&wr(i),ref:t&&t.ref?n&&o?$(o)?o.concat(Sr(t)):[o,Sr(t)]:Sr(t):o,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:l,target:e.target,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==dr?-1===s?16:16|s:s,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:e.transition,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&kr(e.ssContent),ssFallback:e.ssFallback&&kr(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce}}function Or(e=\" \",t=0){return Cr(hr,null,e,t)}function Pr(e){return null==e||\"boolean\"==typeof e?Cr(gr):$(e)?Cr(dr,null,e.slice()):\"object\"==typeof e?Rr(e):Cr(hr,null,String(e))}function Rr(e){return null===e.el&&-1!==e.patchFlag||e.memo?e:kr(e)}function Tr(e,t){let n=0;const{shapeFlag:r}=e;if(null==t)t=null;else if($(t))n=16;else if(\"object\"==typeof t){if(65&r){const n=t.default;return void(n&&(n._c&&(n._d=!1),Tr(e,n()),n._c&&(n._d=!0)))}{n=32;const r=t._;r||xr in t?3===r&&Xt&&(1===Xt.slots._?t._=1:(t._=2,e.patchFlag|=1024)):t._ctx=Xt}}else I(t)?(t={default:t,_ctx:Xt},n=32):(t=String(t),64&r?(n=16,t=[Or(t)]):n=8);e.children=t,e.shapeFlag|=n}function Fr(...e){const n={};for(let r=0;r<e.length;r++){const o=e[r];for(const e in o)if(\"class\"===e)n.class!==o.class&&(n.class=l([n.class,o.class]));else if(\"style\"===e)n.style=t([n.style,o.style]);else if(O(e)){const t=n[e],r=o[e];!r||t===r||$(t)&&t.includes(r)||(n[e]=t?[].concat(t,r):r)}else\"\"!==e&&(n[e]=o[e])}return n}function Er(e,t,n,r=null){Rt(e,t,7,[n,r])}const $r=sr();let Mr=0;function jr(e,t,n){const r=e.type,o=(t?t.appContext:e.appContext)||$r,s={uid:Mr++,vnode:e,type:r,parent:t,appContext:o,root:null,next:null,subTree:null,effect:null,update:null,scope:new se(!0),render:null,proxy:null,exposed:null,exposeProxy:null,withProxy:null,provides:t?t.provides:Object.create(o.provides),accessCache:null,renderCache:[],components:null,directives:null,propsOptions:Jn(r,o),emitsOptions:Kt(r,o),emit:null,emitted:null,propsDefaults:x,inheritAttrs:r.inheritAttrs,ctx:x,data:x,props:x,attrs:x,slots:x,refs:x,setupState:x,setupContext:null,suspense:n,suspenseId:n?n.pendingId:0,asyncDep:null,asyncResolved:!1,isMounted:!1,isUnmounted:!1,isDeactivated:!1,bc:null,c:null,bm:null,m:null,bu:null,u:null,um:null,bum:null,da:null,a:null,rtg:null,rtc:null,ec:null,sp:null};return s.ctx={_:s},s.root=t?t.root:s,s.emit=Gt.bind(null,s),e.ce&&e.ce(s),s}let Ar=null;const Ir=e=>{Ar=e,e.scope.on()},Nr=()=>{Ar&&Ar.scope.off(),Ar=null};function Vr(e){return 4&e.vnode.shapeFlag}let Ur=!1;function Br(e,t=!1){Ur=t;const{props:n,children:r}=e.vnode,o=Vr(e);qn(e,n,o,t),((e,t)=>{if(32&e.vnode.shapeFlag){const n=t._;n?(e.slots=yt(t),te(t,\"_\",n)):rr(t,e.slots={})}else e.slots={},t&&or(e,t);te(e.slots,xr,1)})(e,r);const s=o?function(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=_t(new Proxy(e.ctx,jn));const{setup:r}=n;if(r){const n=e.setupContext=r.length>1?function(e){const t=t=>{e.exposed=t||{}};let n;return{get attrs(){return n||(n=function(e){return new Proxy(e.attrs,{get:(t,n)=>(xe(e,0,\"$attrs\"),t[n])})}(e))},slots:e.slots,emit:e.emit,expose:t}}(e):null;Ir(e),_e();const o=Pt(r,e,0,[e.props,n]);if(be(),Nr(),B(o)){if(o.then(Nr,Nr),t)return o.then((n=>{Lr(e,n,t)})).catch((t=>{Tt(t,e,0)}));e.asyncDep=o}else Lr(e,o,t)}else Wr(e,t)}(e,t):void 0;return Ur=!1,s}function Lr(e,t,n){I(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:U(t)&&(e.setupState=Ct(t)),Wr(e,n)}function Wr(e,t,n){const r=e.type;e.render||(e.render=r.render||S),Ir(e),_e(),In(e),be(),Nr()}function Dr(e){if(e.exposed)return e.exposeProxy||(e.exposeProxy=new Proxy(Ct(_t(e.exposed)),{get:(t,n)=>n in t?t[n]:n in $n?$n[n](e):void 0,has:(e,t)=>t in e||t in $n}))}const Hr=(e,t)=>function(e,t,n=!1){let r,o;const s=I(e);return s?(r=e,o=S):(r=e.get,o=e.set),new Ot(r,o,s||!o,n)}(e,0,Ur),zr=Symbol(\"\"),qr=()=>rn(zr),Gr=\"3.2.47\",Kr={createComponentInstance:jr,setupComponent:Br,renderComponentRoot:Yt,setCurrentRenderingInstance:Qt,isVNode:_r,normalizeVNode:Pr},Jr=\"undefined\"!=typeof document?document:null,Xr=Jr&&Jr.createElement(\"template\"),Zr={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,r)=>{const o=t?Jr.createElementNS(\"http://www.w3.org/2000/svg\",e):Jr.createElement(e,n?{is:n}:void 0);return\"select\"===e&&r&&null!=r.multiple&&o.setAttribute(\"multiple\",r.multiple),o},createText:e=>Jr.createTextNode(e),createComment:e=>Jr.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Jr.querySelector(e),setScopeId(e,t){e.setAttribute(t,\"\")},insertStaticContent(e,t,n,r,o,s){const l=n?n.previousSibling:t.lastChild;if(o&&(o===s||o.nextSibling))for(;t.insertBefore(o.cloneNode(!0),n),o!==s&&(o=o.nextSibling););else{Xr.innerHTML=r?`<svg>${e}</svg>`:e;const o=Xr.content;if(r){const e=o.firstChild;for(;e.firstChild;)o.appendChild(e.firstChild);o.removeChild(e)}t.insertBefore(o,n)}return[l?l.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}};const Qr=/\\s*!important$/;function Yr(e,t,n){if($(n))n.forEach((n=>Yr(e,t,n)));else if(null==n&&(n=\"\"),t.startsWith(\"--\"))e.setProperty(t,n);else{const r=function(e,t){const n=to[t];if(n)return n;let r=K(t);if(\"filter\"!==r&&r in e)return to[t]=r;r=Z(r);for(let o=0;o<eo.length;o++){const n=eo[o]+r;if(n in e)return to[t]=n}return t}(e,t);Qr.test(n)?e.setProperty(X(r),n.replace(Qr,\"\"),\"important\"):e[r]=n}}const eo=[\"Webkit\",\"Moz\",\"ms\"],to={};const no=\"http://www.w3.org/1999/xlink\";function ro(e,t,n,r){e.addEventListener(t,n,r)}function oo(e,t,n,r,o=null){const s=e._vei||(e._vei={}),l=s[t];if(r&&l)l.value=r;else{const[n,i]=function(e){let t;if(so.test(e)){let n;for(t={};n=e.match(so);)e=e.slice(0,e.length-n[0].length),t[n[0].toLowerCase()]=!0}return[\":\"===e[2]?e.slice(3):X(e.slice(2)),t]}(t);if(r){const l=s[t]=function(e,t){const n=e=>{if(e._vts){if(e._vts<=n.attached)return}else e._vts=Date.now();Rt(function(e,t){if($(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map((e=>t=>!t._stopped&&e&&e(t)))}return t}(e,n.value),t,5,[e])};return n.value=e,n.attached=(()=>lo||(io.then((()=>lo=0)),lo=Date.now()))(),n}(r,o);ro(e,n,l,i)}else l&&(!function(e,t,n,r){e.removeEventListener(t,n,r)}(e,n,l,i),s[t]=void 0)}}const so=/(?:Once|Passive|Capture)$/;let lo=0;const io=Promise.resolve();const co=/^on[a-z]/;const uo=e=>{const t=e.props[\"onUpdate:modelValue\"]||!1;return $(t)?e=>ee(t,e):t};function ao(e){e.target.composing=!0}function fo(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event(\"input\")))}const po={created(e,{modifiers:{lazy:t,trim:n,number:r}},o){e._assign=uo(o);const s=r||o.props&&\"number\"===o.props.type;ro(e,t?\"change\":\"input\",(t=>{if(t.target.composing)return;let r=e.value;n&&(r=r.trim()),s&&(r=ne(r)),e._assign(r)})),n&&ro(e,\"change\",(()=>{e.value=e.value.trim()})),t||(ro(e,\"compositionstart\",ao),ro(e,\"compositionend\",fo),ro(e,\"change\",fo))},mounted(e,{value:t}){e.value=null==t?\"\":t},beforeUpdate(e,{value:t,modifiers:{lazy:n,trim:r,number:o}},s){if(e._assign=uo(s),e.composing)return;if(document.activeElement===e&&\"range\"!==e.type){if(n)return;if(r&&e.value.trim()===t)return;if((o||\"number\"===e.type)&&ne(e.value)===t)return}const l=null==t?\"\":t;e.value!==l&&(e.value=l)}};const ho={beforeMount(e,{value:t},{transition:n}){e._vod=\"none\"===e.style.display?\"\":e.style.display,n&&t?n.beforeEnter(e):go(e,t)},mounted(e,{value:t},{transition:n}){n&&t&&n.enter(e)},updated(e,{value:t,oldValue:n},{transition:r}){!t!=!n&&(r?t?(r.beforeEnter(e),go(e,!0),r.enter(e)):r.leave(e,(()=>{go(e,!1)})):go(e,t))},beforeUnmount(e,{value:t}){go(e,t)}};function go(e,t){e.style.display=t?e._vod:\"none\"}const mo=R({patchProp:(e,t,n,r,o=!1,s,l,i,c)=>{\"class\"===t?function(e,t,n){const r=e._vtc;r&&(t=(t?[t,...r]:[...r]).join(\" \")),null==t?e.removeAttribute(\"class\"):n?e.setAttribute(\"class\",t):e.className=t}(e,r,o):\"style\"===t?function(e,t,n){const r=e.style,o=N(n);if(n&&!o){if(t&&!N(t))for(const e in t)null==n[e]&&Yr(r,e,\"\");for(const e in n)Yr(r,e,n[e])}else{const s=r.display;o?t!==n&&(r.cssText=n):t&&e.removeAttribute(\"style\"),\"_vod\"in e&&(r.display=s)}}(e,n,r):O(t)?P(t)||oo(e,t,0,r,l):(\".\"===t[0]?(t=t.slice(1),1):\"^\"===t[0]?(t=t.slice(1),0):function(e,t,n,r){if(r)return\"innerHTML\"===t||\"textContent\"===t||!!(t in e&&co.test(t)&&I(n));if(\"spellcheck\"===t||\"draggable\"===t||\"translate\"===t)return!1;if(\"form\"===t)return!1;if(\"list\"===t&&\"INPUT\"===e.tagName)return!1;if(\"type\"===t&&\"TEXTAREA\"===e.tagName)return!1;if(co.test(t)&&N(n))return!1;return t in e}(e,t,r,o))?function(e,t,n,r,o,s,l){if(\"innerHTML\"===t||\"textContent\"===t)return r&&l(r,o,s),void(e[t]=null==n?\"\":n);if(\"value\"===t&&\"PROGRESS\"!==e.tagName&&!e.tagName.includes(\"-\")){e._value=n;const r=null==n?\"\":n;return e.value===r&&\"OPTION\"!==e.tagName||(e.value=r),void(null==n&&e.removeAttribute(t))}let i=!1;if(\"\"===n||null==n){const r=typeof e[t];\"boolean\"===r?n=p(n):null==n&&\"string\"===r?(n=\"\",i=!0):\"number\"===r&&(n=0,i=!0)}try{e[t]=n}catch(c){}i&&e.removeAttribute(t)}(e,t,r,s,l,i,c):(\"true-value\"===t?e._trueValue=r:\"false-value\"===t&&(e._falseValue=r),function(e,t,n,r,o){if(r&&t.startsWith(\"xlink:\"))null==n?e.removeAttributeNS(no,t.slice(6,t.length)):e.setAttributeNS(no,t,n);else{const r=a(t);null==n||r&&!p(n)?e.removeAttribute(t):e.setAttribute(t,r?\"\":n)}}(e,t,r,o))}},Zr);let vo;const yo=(...e)=>{const t=(vo||(vo=ar(mo))).createApp(...e),{mount:n}=t;return t.mount=e=>{const r=function(e){if(N(e)){return document.querySelector(e)}return e}(e);if(!r)return;const o=t._component;I(o)||o.render||o.template||(o.template=r.innerHTML),r.innerHTML=\"\";const s=n(r,!1,r instanceof SVGElement);return r instanceof Element&&(r.removeAttribute(\"v-cloak\"),r.setAttribute(\"data-v-app\",\"\")),s},t};let _o=!1;const bo=e(\",key,ref,innerHTML,textContent,ref_key,ref_for\");function xo(e,t){let n=\"\";for(const r in e){if(bo(r)||O(r)||\"textarea\"===t&&\"value\"===r)continue;const o=e[r];n+=\"class\"===r?` class=\"${ko(o)}\"`:\"style\"===r?` style=\"${Oo(o)}\"`:wo(r,o,t)}return n}function wo(e,t,n){if(!Co(t))return\"\";const r=n&&(n.indexOf(\"-\")>0||i(n))?e:g[e]||e.toLowerCase();return f(r)?p(t)?` ${r}`:\"\":function(e){if(h.hasOwnProperty(e))return h[e];const t=d.test(e);return t&&console.error(`unsafe attribute name: ${e}`),h[e]=!t}(r)?\"\"===t?` ${r}`:` ${r}=\"${v(t)}\"`:(console.warn(`[@vue/server-renderer] Skipped rendering unsafe attribute name: ${r}`),\"\")}function So(e,t){return Co(t)?` ${e}=\"${v(t)}\"`:\"\"}function Co(e){if(null==e)return!1;const t=typeof e;return\"string\"===t||\"number\"===t||\"boolean\"===t}function ko(e){return v(l(e))}function Oo(e){if(!e)return\"\";if(N(e))return v(e);return v(function(e){let t=\"\";if(!e||N(e))return t;for(const n in e){const r=e[n],o=n.startsWith(\"--\")?n:X(n);(N(r)||\"number\"==typeof r)&&(t+=`${o}:${r};`)}return t}(t(e)))}function Po(e,t=null,n=null,r=null,o){return Ko(Cr(e,t,n),r,o)}function Ro(e,t,n,r,o,s,l){o(\"\\x3c!--[--\\x3e\"),To(e,t,n,r,o,s,l),o(\"\\x3c!--]--\\x3e\")}function To(e,t,n,r,o,s,l,i){const c=e[t];if(c){const e=[],t=c(n,(t=>{e.push(t)}),s,l?\" \"+l:\"\");if($(t))Zo(o,t,s,l);else{let t=!0;if(i)t=!1;else for(let n=0;n<e.length;n++)if(!$o(e[n])){t=!1;break}if(t)r&&r();else for(let n=0;n<e.length;n++)o(e[n])}}else r&&r()}const Fo=/^<!--.*-->$/s,Eo=/<!--[^]*?-->/gm;function $o(e){return!(\"string\"!=typeof e||!Fo.test(e))&&(e.length<=8||!e.replace(Eo,\"\").trim())}function Mo(e,t,n,r,o){e(\"\\x3c!--teleport start--\\x3e\");const s=o.appContext.provides[zr],l=s.__teleportBuffers||(s.__teleportBuffers={}),i=l[n]||(l[n]=[]),c=i.length;let u;if(r)t(e),u=\"\\x3c!--teleport anchor--\\x3e\";else{const{getBuffer:e,push:n}=Go();t(n),n(\"\\x3c!--teleport anchor--\\x3e\"),u=e()}i.splice(c,0,u),e(\"\\x3c!--teleport end--\\x3e\")}function jo(e){return v(N(t=e)?t:null==t?\"\":$(t)||U(t)&&(t.toString===L||!I(t.toString))?JSON.stringify(t,b,2):String(t));var t}function Ao(e,t){if($(e)||N(e))for(let n=0,r=e.length;n<r;n++)t(e[n],n);else if(\"number\"==typeof e)for(let n=0;n<e;n++)t(n+1,n);else if(U(e))if(e[Symbol.iterator]){const n=Array.from(e);for(let e=0,r=n.length;e<r;e++)t(n[e],e)}else{const n=Object.keys(e);for(let r=0,o=n.length;r<o;r++){const o=n[r];t(e[o],o,r)}}}async function Io(e,{default:t}){t?t():e(\"\\x3c!----\\x3e\")}function No(e,t,n,r,o={}){return\"function\"!=typeof t&&t.getSSRProps&&t.getSSRProps({dir:t,instance:e,value:n,oldValue:void 0,arg:r,modifiers:o},null)||{}}const Vo=_;function Uo(e,t){return function(e,t){return e.findIndex((e=>_(e,t)))}(e,t)>-1}function Bo(e,t,n){switch(e){case\"radio\":return _(t,n)?\" checked\":\"\";case\"checkbox\":return($(t)?Uo(t,n):t)?\" checked\":\"\";default:return So(\"value\",t)}}function Lo(e={},t){const{type:n,value:r}=e;switch(n){case\"radio\":return _(t,r)?{checked:!0}:null;case\"checkbox\":return($(t)?Uo(t,r):t)?{checked:!0}:null;default:return{value:t}}}const{createComponentInstance:Wo,setCurrentRenderingInstance:Do,setupComponent:Ho,renderComponentRoot:zo,normalizeVNode:qo}=Kr;function Go(){let e=!1;const t=[];return{getBuffer:()=>t,push(n){const r=N(n);e&&r?t[t.length-1]+=n:t.push(n),e=r,(B(n)||$(n)&&n.hasAsync)&&(t.hasAsync=!0)}}}function Ko(e,t=null,n){const r=Wo(e,t,null),o=Ho(r,!0),s=B(o),l=r.sp;if(s||l){let e=s?o:Promise.resolve();return l&&(e=e.then((()=>Promise.all(l.map((e=>e.call(r.proxy)))))).catch((()=>{}))),e.then((()=>Jo(r,n)))}return Jo(r,n)}function Jo(e,t){const n=e.type,{getBuffer:r,push:o}=Go();if(I(n)){let r=zo(e);if(!n.props)for(const t in e.attrs)t.startsWith(\"data-v-\")&&((r.props||(r.props={}))[t]=\"\");Xo(o,e.subTree=r,e,t)}else{e.render&&e.render!==S||e.ssrRender||n.ssrRender||!N(n.template)||(n.ssrRender=function(e,t){throw new Error(\"On-the-fly template compilation is not supported in the ESM build of @vue/server-renderer. All templates must be pre-compiled into render functions.\")}());for(const t of e.scope.effects)t.computed&&(t.computed._cacheable=!0);const r=e.ssrRender||n.ssrRender;if(r){let n=!1!==e.inheritAttrs?e.attrs:void 0,s=!1,l=e;for(;;){const e=l.vnode.scopeId;e&&(s||(n={...n},s=!0),n[e]=\"\");const t=l.parent;if(!t||!t.subTree||t.subTree!==l.vnode)break;l=t}t&&(s||(n={...n}),n[t.trim()]=\"\");const i=Do(e);try{r(e.proxy,o,e,n,e.props,e.setupState,e.data,e.ctx)}finally{Do(i)}}else e.render&&e.render!==S?Xo(o,e.subTree=zo(e),e,t):o(\"\\x3c!----\\x3e\")}return r()}function Xo(e,t,n,r){const{type:o,shapeFlag:s,children:l}=t;switch(o){case hr:e(v(l));break;case gr:e(l?`\\x3c!--${i=l,i.replace(y,\"\")}--\\x3e`:\"\\x3c!----\\x3e\");break;case mr:e(l);break;case dr:t.slotScopeIds&&(r=(r?r+\" \":\"\")+t.slotScopeIds.join(\" \")),e(\"\\x3c!--[--\\x3e\"),Zo(e,l,n,r),e(\"\\x3c!--]--\\x3e\");break;default:1&s?function(e,t,n,r){const o=t.type;let{props:s,children:l,shapeFlag:i,scopeId:u,dirs:a}=t,f=`<${o}`;a&&(s=function(e,t,n){const r=[];for(let o=0;o<n.length;o++){const t=n[o],{dir:{getSSRProps:s}}=t;if(s){const n=s(t,e);n&&r.push(n)}}return Fr(t||{},...r)}(t,s,a));s&&(f+=xo(s,o));u&&(f+=` ${u}`);let p=n,d=t;for(;p&&d===p.subTree;)d=p.vnode,d.scopeId&&(f+=` ${d.scopeId}`),p=p.parent;r&&(f+=` ${r}`);if(e(f+\">\"),!c(o)){let t=!1;s&&(s.innerHTML?(t=!0,e(s.innerHTML)):s.textContent?(t=!0,e(v(s.textContent))):\"textarea\"===o&&s.value&&(t=!0,e(v(s.value)))),t||(8&i?e(v(l)):16&i&&Zo(e,l,n,r)),e(`</${o}>`)}}(e,t,n,r):6&s?e(Ko(t,n,r)):64&s?function(e,t,n,r){const o=t.props&&t.props.to,s=t.props&&t.props.disabled;if(!o)return[];if(!N(o))return[];Mo(e,(e=>{Zo(e,t.children,n,r)}),o,s||\"\"===s,n)}(e,t,n,r):128&s&&Xo(e,t.ssContent,n,r)}var i}function Zo(e,t,n,r){for(let o=0;o<t.length;o++)Xo(e,qo(t[o]),n,r)}const{isVNode:Qo}=Kr;async function Yo(e){if(e.hasAsync){let t=\"\";for(let n=0;n<e.length;n++){let r=e[n];B(r)&&(r=await r),N(r)?t+=r:t+=await Yo(r)}return t}return es(e)}function es(e){let t=\"\";for(let n=0;n<e.length;n++){let r=e[n];N(r)?t+=r:t+=es(r)}return t}async function ts(e,t={}){if(Qo(e))return ts(yo({render:()=>e}),t);const n=Cr(e._component,e._props);n.appContext=e._context,e.provide(zr,t);const r=await Ko(n),o=await Yo(r);if(await ns(t),t.__watcherHandles)for(const s of t.__watcherHandles)s();return o}async function ns(e){if(e.__teleportBuffers){e.teleports=e.teleports||{};for(const t in e.__teleportBuffers)e.teleports[t]=await Yo(await Promise.all([e.__teleportBuffers[t]]))}}const{isVNode:rs}=Kr;async function os(e,t){if(e.hasAsync)for(let n=0;n<e.length;n++){let r=e[n];B(r)&&(r=await r),N(r)?t.push(r):await os(r,t)}else ss(e,t)}function ss(e,t){for(let n=0;n<e.length;n++){let r=e[n];N(r)?t.push(r):ss(r,t)}}function ls(e,t,n){if(rs(e))return ls(yo({render:()=>e}),t,n);const r=Cr(e._component,e._props);return r.appContext=e._context,e.provide(zr,t),Promise.resolve(Ko(r)).then((e=>os(e,n))).then((()=>ns(t))).then((()=>{if(t.__watcherHandles)for(const e of t.__watcherHandles)e()})).then((()=>n.push(null))).catch((e=>{n.destroy(e)})),n}function is(e,t={}){return console.warn(\"[@vue/server-renderer] renderToStream is deprecated - use renderToNodeStream instead.\"),cs(e,t)}function cs(e,t={}){throw new Error(\"ESM build of renderToStream() does not support renderToNodeStream(). Use pipeToNodeWritable() with an existing Node.js Writable stream instance instead.\")}function us(e,t={},n){ls(e,t,{push(e){null!=e?n.write(e):n.end()},destroy(e){n.destroy(e)}})}function as(e,t={}){if(\"function\"!=typeof ReadableStream)throw new Error(\"ReadableStream constructor is not available in the global scope. If the target environment does support web streams, consider using pipeToWebWritable() with an existing WritableStream instance instead.\");const n=new TextEncoder;let r=!1;return new ReadableStream({start(o){ls(e,t,{push(e){r||(null!=e?o.enqueue(n.encode(e)):o.close())},destroy(e){o.error(e)}})},cancel(){r=!0}})}function fs(e,t={},n){const r=n.getWriter(),o=new TextEncoder;let s=!1;try{s=B(r.ready)}catch(l){}ls(e,t,{push:async e=>(s&&await r.ready,null!=e?r.write(o.encode(e)):r.close()),destroy(e){console.log(e),r.close()}})}_o||(_o=!0,po.getSSRProps=({value:e})=>({value:e}),ho.getSSRProps=({value:e})=>{if(!e)return{style:{display:\"none\"}}});export{us as pipeToNodeWritable,fs as pipeToWebWritable,cs as renderToNodeStream,ls as renderToSimpleStream,is as renderToStream,ts as renderToString,as as renderToWebStream,No as ssrGetDirectiveProps,Lo as ssrGetDynamicModelProps,p as ssrIncludeBooleanAttr,jo as ssrInterpolate,Uo as ssrLooseContain,Vo as ssrLooseEqual,So as ssrRenderAttr,xo as ssrRenderAttrs,ko as ssrRenderClass,Po as ssrRenderComponent,wo as ssrRenderDynamicAttr,Bo as ssrRenderDynamicModel,Ao as ssrRenderList,Ro as ssrRenderSlot,To as ssrRenderSlotInner,Oo as ssrRenderStyle,Io as ssrRenderSuspense,Mo as ssrRenderTeleport,Xo as ssrRenderVNode};\n$/dist/server-renderer.esm-browser.js\u0000\u0004w/**\n * Make a map and return a function for checking if a key\n * is in that map.\n * IMPORTANT: all calls of this function must be prefixed with\n * \\/\\*#\\_\\_PURE\\_\\_\\*\\/\n * So that rollup can tree-shake them if necessary.\n */\nfunction makeMap(str, expectsLowerCase) {\n    const map = Object.create(null);\n    const list = str.split(',');\n    for (let i = 0; i < list.length; i++) {\n        map[list[i]] = true;\n    }\n    return expectsLowerCase ? val => !!map[val.toLowerCase()] : val => !!map[val];\n}\n\nfunction normalizeStyle(value) {\n    if (isArray(value)) {\n        const res = {};\n        for (let i = 0; i < value.length; i++) {\n            const item = value[i];\n            const normalized = isString(item)\n                ? parseStringStyle(item)\n                : normalizeStyle(item);\n            if (normalized) {\n                for (const key in normalized) {\n                    res[key] = normalized[key];\n                }\n            }\n        }\n        return res;\n    }\n    else if (isString(value)) {\n        return value;\n    }\n    else if (isObject(value)) {\n        return value;\n    }\n}\nconst listDelimiterRE = /;(?![^(]*\\))/g;\nconst propertyDelimiterRE = /:([^]+)/;\nconst styleCommentRE = /\\/\\*.*?\\*\\//gs;\nfunction parseStringStyle(cssText) {\n    const ret = {};\n    cssText\n        .replace(styleCommentRE, '')\n        .split(listDelimiterRE)\n        .forEach(item => {\n        if (item) {\n            const tmp = item.split(propertyDelimiterRE);\n            tmp.length > 1 && (ret[tmp[0].trim()] = tmp[1].trim());\n        }\n    });\n    return ret;\n}\nfunction stringifyStyle(styles) {\n    let ret = '';\n    if (!styles || isString(styles)) {\n        return ret;\n    }\n    for (const key in styles) {\n        const value = styles[key];\n        const normalizedKey = key.startsWith(`--`) ? key : hyphenate(key);\n        if (isString(value) || typeof value === 'number') {\n            // only render valid values\n            ret += `${normalizedKey}:${value};`;\n        }\n    }\n    return ret;\n}\nfunction normalizeClass(value) {\n    let res = '';\n    if (isString(value)) {\n        res = value;\n    }\n    else if (isArray(value)) {\n        for (let i = 0; i < value.length; i++) {\n            const normalized = normalizeClass(value[i]);\n            if (normalized) {\n                res += normalized + ' ';\n            }\n        }\n    }\n    else if (isObject(value)) {\n        for (const name in value) {\n            if (value[name]) {\n                res += name + ' ';\n            }\n        }\n    }\n    return res.trim();\n}\n\n// These tag configs are shared between compiler-dom and runtime-dom, so they\n// https://developer.mozilla.org/en-US/docs/Web/HTML/Element\nconst HTML_TAGS = 'html,body,base,head,link,meta,style,title,address,article,aside,footer,' +\n    'header,hgroup,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,' +\n    'figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,' +\n    'data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,' +\n    'time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,' +\n    'canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,' +\n    'th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,' +\n    'option,output,progress,select,textarea,details,dialog,menu,' +\n    'summary,template,blockquote,iframe,tfoot';\n// https://developer.mozilla.org/en-US/docs/Web/SVG/Element\nconst SVG_TAGS = 'svg,animate,animateMotion,animateTransform,circle,clipPath,color-profile,' +\n    'defs,desc,discard,ellipse,feBlend,feColorMatrix,feComponentTransfer,' +\n    'feComposite,feConvolveMatrix,feDiffuseLighting,feDisplacementMap,' +\n    'feDistantLight,feDropShadow,feFlood,feFuncA,feFuncB,feFuncG,feFuncR,' +\n    'feGaussianBlur,feImage,feMerge,feMergeNode,feMorphology,feOffset,' +\n    'fePointLight,feSpecularLighting,feSpotLight,feTile,feTurbulence,filter,' +\n    'foreignObject,g,hatch,hatchpath,image,line,linearGradient,marker,mask,' +\n    'mesh,meshgradient,meshpatch,meshrow,metadata,mpath,path,pattern,' +\n    'polygon,polyline,radialGradient,rect,set,solidcolor,stop,switch,symbol,' +\n    'text,textPath,title,tspan,unknown,use,view';\nconst VOID_TAGS = 'area,base,br,col,embed,hr,img,input,link,meta,param,source,track,wbr';\n/**\n * Compiler only.\n * Do NOT use in runtime code paths unless behind `true` flag.\n */\nconst isHTMLTag = /*#__PURE__*/ makeMap(HTML_TAGS);\n/**\n * Compiler only.\n * Do NOT use in runtime code paths unless behind `true` flag.\n */\nconst isSVGTag = /*#__PURE__*/ makeMap(SVG_TAGS);\n/**\n * Compiler only.\n * Do NOT use in runtime code paths unless behind `true` flag.\n */\nconst isVoidTag = /*#__PURE__*/ makeMap(VOID_TAGS);\n\n/**\n * On the client we only need to offer special cases for boolean attributes that\n * have different names from their corresponding dom properties:\n * - itemscope -> N/A\n * - allowfullscreen -> allowFullscreen\n * - formnovalidate -> formNoValidate\n * - ismap -> isMap\n * - nomodule -> noModule\n * - novalidate -> noValidate\n * - readonly -> readOnly\n */\nconst specialBooleanAttrs = `itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly`;\nconst isSpecialBooleanAttr = /*#__PURE__*/ makeMap(specialBooleanAttrs);\n/**\n * The full list is needed during SSR to produce the correct initial markup.\n */\nconst isBooleanAttr = /*#__PURE__*/ makeMap(specialBooleanAttrs +\n    `,async,autofocus,autoplay,controls,default,defer,disabled,hidden,` +\n    `loop,open,required,reversed,scoped,seamless,` +\n    `checked,muted,multiple,selected`);\n/**\n * Boolean attributes should be included if the value is truthy or ''.\n * e.g. `<select multiple>` compiles to `{ multiple: '' }`\n */\nfunction includeBooleanAttr(value) {\n    return !!value || value === '';\n}\nconst unsafeAttrCharRE = /[>/=\"'\\u0009\\u000a\\u000c\\u0020]/;\nconst attrValidationCache = {};\nfunction isSSRSafeAttrName(name) {\n    if (attrValidationCache.hasOwnProperty(name)) {\n        return attrValidationCache[name];\n    }\n    const isUnsafe = unsafeAttrCharRE.test(name);\n    if (isUnsafe) {\n        console.error(`unsafe attribute name: ${name}`);\n    }\n    return (attrValidationCache[name] = !isUnsafe);\n}\nconst propsToAttrMap = {\n    acceptCharset: 'accept-charset',\n    className: 'class',\n    htmlFor: 'for',\n    httpEquiv: 'http-equiv'\n};\n\nconst escapeRE = /[\"'&<>]/;\nfunction escapeHtml(string) {\n    const str = '' + string;\n    const match = escapeRE.exec(str);\n    if (!match) {\n        return str;\n    }\n    let html = '';\n    let escaped;\n    let index;\n    let lastIndex = 0;\n    for (index = match.index; index < str.length; index++) {\n        switch (str.charCodeAt(index)) {\n            case 34: // \"\n                escaped = '&quot;';\n                break;\n            case 38: // &\n                escaped = '&amp;';\n                break;\n            case 39: // '\n                escaped = '&#39;';\n                break;\n            case 60: // <\n                escaped = '&lt;';\n                break;\n            case 62: // >\n                escaped = '&gt;';\n                break;\n            default:\n                continue;\n        }\n        if (lastIndex !== index) {\n            html += str.slice(lastIndex, index);\n        }\n        lastIndex = index + 1;\n        html += escaped;\n    }\n    return lastIndex !== index ? html + str.slice(lastIndex, index) : html;\n}\n// https://www.w3.org/TR/html52/syntax.html#comments\nconst commentStripRE = /^-?>|<!--|-->|--!>|<!-$/g;\nfunction escapeHtmlComment(src) {\n    return src.replace(commentStripRE, '');\n}\n\nfunction looseCompareArrays(a, b) {\n    if (a.length !== b.length)\n        return false;\n    let equal = true;\n    for (let i = 0; equal && i < a.length; i++) {\n        equal = looseEqual(a[i], b[i]);\n    }\n    return equal;\n}\nfunction looseEqual(a, b) {\n    if (a === b)\n        return true;\n    let aValidType = isDate(a);\n    let bValidType = isDate(b);\n    if (aValidType || bValidType) {\n        return aValidType && bValidType ? a.getTime() === b.getTime() : false;\n    }\n    aValidType = isSymbol(a);\n    bValidType = isSymbol(b);\n    if (aValidType || bValidType) {\n        return a === b;\n    }\n    aValidType = isArray(a);\n    bValidType = isArray(b);\n    if (aValidType || bValidType) {\n        return aValidType && bValidType ? looseCompareArrays(a, b) : false;\n    }\n    aValidType = isObject(a);\n    bValidType = isObject(b);\n    if (aValidType || bValidType) {\n        /* istanbul ignore if: this if will probably never be called */\n        if (!aValidType || !bValidType) {\n            return false;\n        }\n        const aKeysCount = Object.keys(a).length;\n        const bKeysCount = Object.keys(b).length;\n        if (aKeysCount !== bKeysCount) {\n            return false;\n        }\n        for (const key in a) {\n            const aHasKey = a.hasOwnProperty(key);\n            const bHasKey = b.hasOwnProperty(key);\n            if ((aHasKey && !bHasKey) ||\n                (!aHasKey && bHasKey) ||\n                !looseEqual(a[key], b[key])) {\n                return false;\n            }\n        }\n    }\n    return String(a) === String(b);\n}\nfunction looseIndexOf(arr, val) {\n    return arr.findIndex(item => looseEqual(item, val));\n}\n\n/**\n * For converting {{ interpolation }} values to displayed strings.\n * @private\n */\nconst toDisplayString = (val) => {\n    return isString(val)\n        ? val\n        : val == null\n            ? ''\n            : isArray(val) ||\n                (isObject(val) &&\n                    (val.toString === objectToString || !isFunction(val.toString)))\n                ? JSON.stringify(val, replacer, 2)\n                : String(val);\n};\nconst replacer = (_key, val) => {\n    // can't use isRef here since @vue/shared has no deps\n    if (val && val.__v_isRef) {\n        return replacer(_key, val.value);\n    }\n    else if (isMap(val)) {\n        return {\n            [`Map(${val.size})`]: [...val.entries()].reduce((entries, [key, val]) => {\n                entries[`${key} =>`] = val;\n                return entries;\n            }, {})\n        };\n    }\n    else if (isSet(val)) {\n        return {\n            [`Set(${val.size})`]: [...val.values()]\n        };\n    }\n    else if (isObject(val) && !isArray(val) && !isPlainObject(val)) {\n        return String(val);\n    }\n    return val;\n};\n\nconst EMPTY_OBJ = Object.freeze({})\n    ;\nconst EMPTY_ARR = Object.freeze([]) ;\nconst NOOP = () => { };\n/**\n * Always return false.\n */\nconst NO = () => false;\nconst onRE = /^on[^a-z]/;\nconst isOn = (key) => onRE.test(key);\nconst isModelListener = (key) => key.startsWith('onUpdate:');\nconst extend = Object.assign;\nconst remove = (arr, el) => {\n    const i = arr.indexOf(el);\n    if (i > -1) {\n        arr.splice(i, 1);\n    }\n};\nconst hasOwnProperty$1 = Object.prototype.hasOwnProperty;\nconst hasOwn = (val, key) => hasOwnProperty$1.call(val, key);\nconst isArray = Array.isArray;\nconst isMap = (val) => toTypeString(val) === '[object Map]';\nconst isSet = (val) => toTypeString(val) === '[object Set]';\nconst isDate = (val) => toTypeString(val) === '[object Date]';\nconst isFunction = (val) => typeof val === 'function';\nconst isString = (val) => typeof val === 'string';\nconst isSymbol = (val) => typeof val === 'symbol';\nconst isObject = (val) => val !== null && typeof val === 'object';\nconst isPromise = (val) => {\n    return isObject(val) && isFunction(val.then) && isFunction(val.catch);\n};\nconst objectToString = Object.prototype.toString;\nconst toTypeString = (value) => objectToString.call(value);\nconst toRawType = (value) => {\n    // extract \"RawType\" from strings like \"[object RawType]\"\n    return toTypeString(value).slice(8, -1);\n};\nconst isPlainObject = (val) => toTypeString(val) === '[object Object]';\nconst isIntegerKey = (key) => isString(key) &&\n    key !== 'NaN' &&\n    key[0] !== '-' &&\n    '' + parseInt(key, 10) === key;\nconst isReservedProp = /*#__PURE__*/ makeMap(\n// the leading comma is intentional so empty string \"\" is also included\n',key,ref,ref_for,ref_key,' +\n    'onVnodeBeforeMount,onVnodeMounted,' +\n    'onVnodeBeforeUpdate,onVnodeUpdated,' +\n    'onVnodeBeforeUnmount,onVnodeUnmounted');\nconst isBuiltInDirective = /*#__PURE__*/ makeMap('bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo');\nconst cacheStringFunction = (fn) => {\n    const cache = Object.create(null);\n    return ((str) => {\n        const hit = cache[str];\n        return hit || (cache[str] = fn(str));\n    });\n};\nconst camelizeRE = /-(\\w)/g;\n/**\n * @private\n */\nconst camelize = cacheStringFunction((str) => {\n    return str.replace(camelizeRE, (_, c) => (c ? c.toUpperCase() : ''));\n});\nconst hyphenateRE = /\\B([A-Z])/g;\n/**\n * @private\n */\nconst hyphenate = cacheStringFunction((str) => str.replace(hyphenateRE, '-$1').toLowerCase());\n/**\n * @private\n */\nconst capitalize = cacheStringFunction((str) => str.charAt(0).toUpperCase() + str.slice(1));\n/**\n * @private\n */\nconst toHandlerKey = cacheStringFunction((str) => str ? `on${capitalize(str)}` : ``);\n// compare whether a value has changed, accounting for NaN.\nconst hasChanged = (value, oldValue) => !Object.is(value, oldValue);\nconst invokeArrayFns = (fns, arg) => {\n    for (let i = 0; i < fns.length; i++) {\n        fns[i](arg);\n    }\n};\nconst def = (obj, key, value) => {\n    Object.defineProperty(obj, key, {\n        configurable: true,\n        enumerable: false,\n        value\n    });\n};\n/**\n * \"123-foo\" will be parsed to 123\n * This is used for the .number modifier in v-model\n */\nconst looseToNumber = (val) => {\n    const n = parseFloat(val);\n    return isNaN(n) ? val : n;\n};\nlet _globalThis;\nconst getGlobalThis = () => {\n    return (_globalThis ||\n        (_globalThis =\n            typeof globalThis !== 'undefined'\n                ? globalThis\n                : typeof self !== 'undefined'\n                    ? self\n                    : typeof window !== 'undefined'\n                        ? window\n                        : typeof global !== 'undefined'\n                            ? global\n                            : {}));\n};\n\nfunction warn$1(msg, ...args) {\n    console.warn(`[Vue warn] ${msg}`, ...args);\n}\n\nlet activeEffectScope;\nclass EffectScope {\n    constructor(detached = false) {\n        this.detached = detached;\n        /**\n         * @internal\n         */\n        this._active = true;\n        /**\n         * @internal\n         */\n        this.effects = [];\n        /**\n         * @internal\n         */\n        this.cleanups = [];\n        this.parent = activeEffectScope;\n        if (!detached && activeEffectScope) {\n            this.index =\n                (activeEffectScope.scopes || (activeEffectScope.scopes = [])).push(this) - 1;\n        }\n    }\n    get active() {\n        return this._active;\n    }\n    run(fn) {\n        if (this._active) {\n            const currentEffectScope = activeEffectScope;\n            try {\n                activeEffectScope = this;\n                return fn();\n            }\n            finally {\n                activeEffectScope = currentEffectScope;\n            }\n        }\n        else {\n            warn$1(`cannot run an inactive effect scope.`);\n        }\n    }\n    /**\n     * This should only be called on non-detached scopes\n     * @internal\n     */\n    on() {\n        activeEffectScope = this;\n    }\n    /**\n     * This should only be called on non-detached scopes\n     * @internal\n     */\n    off() {\n        activeEffectScope = this.parent;\n    }\n    stop(fromParent) {\n        if (this._active) {\n            let i, l;\n            for (i = 0, l = this.effects.length; i < l; i++) {\n                this.effects[i].stop();\n            }\n            for (i = 0, l = this.cleanups.length; i < l; i++) {\n                this.cleanups[i]();\n            }\n            if (this.scopes) {\n                for (i = 0, l = this.scopes.length; i < l; i++) {\n                    this.scopes[i].stop(true);\n                }\n            }\n            // nested scope, dereference from parent to avoid memory leaks\n            if (!this.detached && this.parent && !fromParent) {\n                // optimized O(1) removal\n                const last = this.parent.scopes.pop();\n                if (last && last !== this) {\n                    this.parent.scopes[this.index] = last;\n                    last.index = this.index;\n                }\n            }\n            this.parent = undefined;\n            this._active = false;\n        }\n    }\n}\nfunction recordEffectScope(effect, scope = activeEffectScope) {\n    if (scope && scope.active) {\n        scope.effects.push(effect);\n    }\n}\nfunction getCurrentScope() {\n    return activeEffectScope;\n}\n\nconst createDep = (effects) => {\n    const dep = new Set(effects);\n    dep.w = 0;\n    dep.n = 0;\n    return dep;\n};\nconst wasTracked = (dep) => (dep.w & trackOpBit) > 0;\nconst newTracked = (dep) => (dep.n & trackOpBit) > 0;\nconst initDepMarkers = ({ deps }) => {\n    if (deps.length) {\n        for (let i = 0; i < deps.length; i++) {\n            deps[i].w |= trackOpBit; // set was tracked\n        }\n    }\n};\nconst finalizeDepMarkers = (effect) => {\n    const { deps } = effect;\n    if (deps.length) {\n        let ptr = 0;\n        for (let i = 0; i < deps.length; i++) {\n            const dep = deps[i];\n            if (wasTracked(dep) && !newTracked(dep)) {\n                dep.delete(effect);\n            }\n            else {\n                deps[ptr++] = dep;\n            }\n            // clear bits\n            dep.w &= ~trackOpBit;\n            dep.n &= ~trackOpBit;\n        }\n        deps.length = ptr;\n    }\n};\n\nconst targetMap = new WeakMap();\n// The number of effects currently being tracked recursively.\nlet effectTrackDepth = 0;\nlet trackOpBit = 1;\n/**\n * The bitwise track markers support at most 30 levels of recursion.\n * This value is chosen to enable modern JS engines to use a SMI on all platforms.\n * When recursion depth is greater, fall back to using a full cleanup.\n */\nconst maxMarkerBits = 30;\nlet activeEffect;\nconst ITERATE_KEY = Symbol('iterate' );\nconst MAP_KEY_ITERATE_KEY = Symbol('Map key iterate' );\nclass ReactiveEffect {\n    constructor(fn, scheduler = null, scope) {\n        this.fn = fn;\n        this.scheduler = scheduler;\n        this.active = true;\n        this.deps = [];\n        this.parent = undefined;\n        recordEffectScope(this, scope);\n    }\n    run() {\n        if (!this.active) {\n            return this.fn();\n        }\n        let parent = activeEffect;\n        let lastShouldTrack = shouldTrack;\n        while (parent) {\n            if (parent === this) {\n                return;\n            }\n            parent = parent.parent;\n        }\n        try {\n            this.parent = activeEffect;\n            activeEffect = this;\n            shouldTrack = true;\n            trackOpBit = 1 << ++effectTrackDepth;\n            if (effectTrackDepth <= maxMarkerBits) {\n                initDepMarkers(this);\n            }\n            else {\n                cleanupEffect(this);\n            }\n            return this.fn();\n        }\n        finally {\n            if (effectTrackDepth <= maxMarkerBits) {\n                finalizeDepMarkers(this);\n            }\n            trackOpBit = 1 << --effectTrackDepth;\n            activeEffect = this.parent;\n            shouldTrack = lastShouldTrack;\n            this.parent = undefined;\n            if (this.deferStop) {\n                this.stop();\n            }\n        }\n    }\n    stop() {\n        // stopped while running itself - defer the cleanup\n        if (activeEffect === this) {\n            this.deferStop = true;\n        }\n        else if (this.active) {\n            cleanupEffect(this);\n            if (this.onStop) {\n                this.onStop();\n            }\n            this.active = false;\n        }\n    }\n}\nfunction cleanupEffect(effect) {\n    const { deps } = effect;\n    if (deps.length) {\n        for (let i = 0; i < deps.length; i++) {\n            deps[i].delete(effect);\n        }\n        deps.length = 0;\n    }\n}\nlet shouldTrack = true;\nconst trackStack = [];\nfunction pauseTracking() {\n    trackStack.push(shouldTrack);\n    shouldTrack = false;\n}\nfunction resetTracking() {\n    const last = trackStack.pop();\n    shouldTrack = last === undefined ? true : last;\n}\nfunction track(target, type, key) {\n    if (shouldTrack && activeEffect) {\n        let depsMap = targetMap.get(target);\n        if (!depsMap) {\n            targetMap.set(target, (depsMap = new Map()));\n        }\n        let dep = depsMap.get(key);\n        if (!dep) {\n            depsMap.set(key, (dep = createDep()));\n        }\n        const eventInfo = { effect: activeEffect, target, type, key }\n            ;\n        trackEffects(dep, eventInfo);\n    }\n}\nfunction trackEffects(dep, debuggerEventExtraInfo) {\n    let shouldTrack = false;\n    if (effectTrackDepth <= maxMarkerBits) {\n        if (!newTracked(dep)) {\n            dep.n |= trackOpBit; // set newly tracked\n            shouldTrack = !wasTracked(dep);\n        }\n    }\n    else {\n        // Full cleanup mode.\n        shouldTrack = !dep.has(activeEffect);\n    }\n    if (shouldTrack) {\n        dep.add(activeEffect);\n        activeEffect.deps.push(dep);\n        if (activeEffect.onTrack) {\n            activeEffect.onTrack({\n                effect: activeEffect,\n                ...debuggerEventExtraInfo\n            });\n        }\n    }\n}\nfunction trigger(target, type, key, newValue, oldValue, oldTarget) {\n    const depsMap = targetMap.get(target);\n    if (!depsMap) {\n        // never been tracked\n        return;\n    }\n    let deps = [];\n    if (type === \"clear\" /* TriggerOpTypes.CLEAR */) {\n        // collection being cleared\n        // trigger all effects for target\n        deps = [...depsMap.values()];\n    }\n    else if (key === 'length' && isArray(target)) {\n        const newLength = Number(newValue);\n        depsMap.forEach((dep, key) => {\n            if (key === 'length' || key >= newLength) {\n                deps.push(dep);\n            }\n        });\n    }\n    else {\n        // schedule runs for SET | ADD | DELETE\n        if (key !== void 0) {\n            deps.push(depsMap.get(key));\n        }\n        // also run for iteration key on ADD | DELETE | Map.SET\n        switch (type) {\n            case \"add\" /* TriggerOpTypes.ADD */:\n                if (!isArray(target)) {\n                    deps.push(depsMap.get(ITERATE_KEY));\n                    if (isMap(target)) {\n                        deps.push(depsMap.get(MAP_KEY_ITERATE_KEY));\n                    }\n                }\n                else if (isIntegerKey(key)) {\n                    // new index added to array -> length changes\n                    deps.push(depsMap.get('length'));\n                }\n                break;\n            case \"delete\" /* TriggerOpTypes.DELETE */:\n                if (!isArray(target)) {\n                    deps.push(depsMap.get(ITERATE_KEY));\n                    if (isMap(target)) {\n                        deps.push(depsMap.get(MAP_KEY_ITERATE_KEY));\n                    }\n                }\n                break;\n            case \"set\" /* TriggerOpTypes.SET */:\n                if (isMap(target)) {\n                    deps.push(depsMap.get(ITERATE_KEY));\n                }\n                break;\n        }\n    }\n    const eventInfo = { target, type, key, newValue, oldValue, oldTarget }\n        ;\n    if (deps.length === 1) {\n        if (deps[0]) {\n            {\n                triggerEffects(deps[0], eventInfo);\n            }\n        }\n    }\n    else {\n        const effects = [];\n        for (const dep of deps) {\n            if (dep) {\n                effects.push(...dep);\n            }\n        }\n        {\n            triggerEffects(createDep(effects), eventInfo);\n        }\n    }\n}\nfunction triggerEffects(dep, debuggerEventExtraInfo) {\n    // spread into array for stabilization\n    const effects = isArray(dep) ? dep : [...dep];\n    for (const effect of effects) {\n        if (effect.computed) {\n            triggerEffect(effect, debuggerEventExtraInfo);\n        }\n    }\n    for (const effect of effects) {\n        if (!effect.computed) {\n            triggerEffect(effect, debuggerEventExtraInfo);\n        }\n    }\n}\nfunction triggerEffect(effect, debuggerEventExtraInfo) {\n    if (effect !== activeEffect || effect.allowRecurse) {\n        if (effect.onTrigger) {\n            effect.onTrigger(extend({ effect }, debuggerEventExtraInfo));\n        }\n        if (effect.scheduler) {\n            effect.scheduler();\n        }\n        else {\n            effect.run();\n        }\n    }\n}\n\nconst isNonTrackableKeys = /*#__PURE__*/ makeMap(`__proto__,__v_isRef,__isVue`);\nconst builtInSymbols = new Set(\n/*#__PURE__*/\nObject.getOwnPropertyNames(Symbol)\n    // ios10.x Object.getOwnPropertyNames(Symbol) can enumerate 'arguments' and 'caller'\n    // but accessing them on Symbol leads to TypeError because Symbol is a strict mode\n    // function\n    .filter(key => key !== 'arguments' && key !== 'caller')\n    .map(key => Symbol[key])\n    .filter(isSymbol));\nconst get$1 = /*#__PURE__*/ createGetter();\nconst shallowGet = /*#__PURE__*/ createGetter(false, true);\nconst readonlyGet = /*#__PURE__*/ createGetter(true);\nconst shallowReadonlyGet = /*#__PURE__*/ createGetter(true, true);\nconst arrayInstrumentations = /*#__PURE__*/ createArrayInstrumentations();\nfunction createArrayInstrumentations() {\n    const instrumentations = {};\n    ['includes', 'indexOf', 'lastIndexOf'].forEach(key => {\n        instrumentations[key] = function (...args) {\n            const arr = toRaw(this);\n            for (let i = 0, l = this.length; i < l; i++) {\n                track(arr, \"get\" /* TrackOpTypes.GET */, i + '');\n            }\n            // we run the method using the original args first (which may be reactive)\n            const res = arr[key](...args);\n            if (res === -1 || res === false) {\n                // if that didn't work, run it again using raw values.\n                return arr[key](...args.map(toRaw));\n            }\n            else {\n                return res;\n            }\n        };\n    });\n    ['push', 'pop', 'shift', 'unshift', 'splice'].forEach(key => {\n        instrumentations[key] = function (...args) {\n            pauseTracking();\n            const res = toRaw(this)[key].apply(this, args);\n            resetTracking();\n            return res;\n        };\n    });\n    return instrumentations;\n}\nfunction hasOwnProperty(key) {\n    const obj = toRaw(this);\n    track(obj, \"has\" /* TrackOpTypes.HAS */, key);\n    return obj.hasOwnProperty(key);\n}\nfunction createGetter(isReadonly = false, shallow = false) {\n    return function get(target, key, receiver) {\n        if (key === \"__v_isReactive\" /* ReactiveFlags.IS_REACTIVE */) {\n            return !isReadonly;\n        }\n        else if (key === \"__v_isReadonly\" /* ReactiveFlags.IS_READONLY */) {\n            return isReadonly;\n        }\n        else if (key === \"__v_isShallow\" /* ReactiveFlags.IS_SHALLOW */) {\n            return shallow;\n        }\n        else if (key === \"__v_raw\" /* ReactiveFlags.RAW */ &&\n            receiver ===\n                (isReadonly\n                    ? shallow\n                        ? shallowReadonlyMap\n                        : readonlyMap\n                    : shallow\n                        ? shallowReactiveMap\n                        : reactiveMap).get(target)) {\n            return target;\n        }\n        const targetIsArray = isArray(target);\n        if (!isReadonly) {\n            if (targetIsArray && hasOwn(arrayInstrumentations, key)) {\n                return Reflect.get(arrayInstrumentations, key, receiver);\n            }\n            if (key === 'hasOwnProperty') {\n                return hasOwnProperty;\n            }\n        }\n        const res = Reflect.get(target, key, receiver);\n        if (isSymbol(key) ? builtInSymbols.has(key) : isNonTrackableKeys(key)) {\n            return res;\n        }\n        if (!isReadonly) {\n            track(target, \"get\" /* TrackOpTypes.GET */, key);\n        }\n        if (shallow) {\n            return res;\n        }\n        if (isRef(res)) {\n            // ref unwrapping - skip unwrap for Array + integer key.\n            return targetIsArray && isIntegerKey(key) ? res : res.value;\n        }\n        if (isObject(res)) {\n            // Convert returned value into a proxy as well. we do the isObject check\n            // here to avoid invalid value warning. Also need to lazy access readonly\n            // and reactive here to avoid circular dependency.\n            return isReadonly ? readonly(res) : reactive(res);\n        }\n        return res;\n    };\n}\nconst set$1 = /*#__PURE__*/ createSetter();\nconst shallowSet = /*#__PURE__*/ createSetter(true);\nfunction createSetter(shallow = false) {\n    return function set(target, key, value, receiver) {\n        let oldValue = target[key];\n        if (isReadonly(oldValue) && isRef(oldValue) && !isRef(value)) {\n            return false;\n        }\n        if (!shallow) {\n            if (!isShallow(value) && !isReadonly(value)) {\n                oldValue = toRaw(oldValue);\n                value = toRaw(value);\n            }\n            if (!isArray(target) && isRef(oldValue) && !isRef(value)) {\n                oldValue.value = value;\n                return true;\n            }\n        }\n        const hadKey = isArray(target) && isIntegerKey(key)\n            ? Number(key) < target.length\n            : hasOwn(target, key);\n        const result = Reflect.set(target, key, value, receiver);\n        // don't trigger if target is something up in the prototype chain of original\n        if (target === toRaw(receiver)) {\n            if (!hadKey) {\n                trigger(target, \"add\" /* TriggerOpTypes.ADD */, key, value);\n            }\n            else if (hasChanged(value, oldValue)) {\n                trigger(target, \"set\" /* TriggerOpTypes.SET */, key, value, oldValue);\n            }\n        }\n        return result;\n    };\n}\nfunction deleteProperty(target, key) {\n    const hadKey = hasOwn(target, key);\n    const oldValue = target[key];\n    const result = Reflect.deleteProperty(target, key);\n    if (result && hadKey) {\n        trigger(target, \"delete\" /* TriggerOpTypes.DELETE */, key, undefined, oldValue);\n    }\n    return result;\n}\nfunction has$1(target, key) {\n    const result = Reflect.has(target, key);\n    if (!isSymbol(key) || !builtInSymbols.has(key)) {\n        track(target, \"has\" /* TrackOpTypes.HAS */, key);\n    }\n    return result;\n}\nfunction ownKeys(target) {\n    track(target, \"iterate\" /* TrackOpTypes.ITERATE */, isArray(target) ? 'length' : ITERATE_KEY);\n    return Reflect.ownKeys(target);\n}\nconst mutableHandlers = {\n    get: get$1,\n    set: set$1,\n    deleteProperty,\n    has: has$1,\n    ownKeys\n};\nconst readonlyHandlers = {\n    get: readonlyGet,\n    set(target, key) {\n        {\n            warn$1(`Set operation on key \"${String(key)}\" failed: target is readonly.`, target);\n        }\n        return true;\n    },\n    deleteProperty(target, key) {\n        {\n            warn$1(`Delete operation on key \"${String(key)}\" failed: target is readonly.`, target);\n        }\n        return true;\n    }\n};\nconst shallowReactiveHandlers = /*#__PURE__*/ extend({}, mutableHandlers, {\n    get: shallowGet,\n    set: shallowSet\n});\n// Props handlers are special in the sense that it should not unwrap top-level\n// refs (in order to allow refs to be explicitly passed down), but should\n// retain the reactivity of the normal readonly object.\nconst shallowReadonlyHandlers = /*#__PURE__*/ extend({}, readonlyHandlers, {\n    get: shallowReadonlyGet\n});\n\nconst toShallow = (value) => value;\nconst getProto = (v) => Reflect.getPrototypeOf(v);\nfunction get(target, key, isReadonly = false, isShallow = false) {\n    // #1772: readonly(reactive(Map)) should return readonly + reactive version\n    // of the value\n    target = target[\"__v_raw\" /* ReactiveFlags.RAW */];\n    const rawTarget = toRaw(target);\n    const rawKey = toRaw(key);\n    if (!isReadonly) {\n        if (key !== rawKey) {\n            track(rawTarget, \"get\" /* TrackOpTypes.GET */, key);\n        }\n        track(rawTarget, \"get\" /* TrackOpTypes.GET */, rawKey);\n    }\n    const { has } = getProto(rawTarget);\n    const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive;\n    if (has.call(rawTarget, key)) {\n        return wrap(target.get(key));\n    }\n    else if (has.call(rawTarget, rawKey)) {\n        return wrap(target.get(rawKey));\n    }\n    else if (target !== rawTarget) {\n        // #3602 readonly(reactive(Map))\n        // ensure that the nested reactive `Map` can do tracking for itself\n        target.get(key);\n    }\n}\nfunction has(key, isReadonly = false) {\n    const target = this[\"__v_raw\" /* ReactiveFlags.RAW */];\n    const rawTarget = toRaw(target);\n    const rawKey = toRaw(key);\n    if (!isReadonly) {\n        if (key !== rawKey) {\n            track(rawTarget, \"has\" /* TrackOpTypes.HAS */, key);\n        }\n        track(rawTarget, \"has\" /* TrackOpTypes.HAS */, rawKey);\n    }\n    return key === rawKey\n        ? target.has(key)\n        : target.has(key) || target.has(rawKey);\n}\nfunction size(target, isReadonly = false) {\n    target = target[\"__v_raw\" /* ReactiveFlags.RAW */];\n    !isReadonly && track(toRaw(target), \"iterate\" /* TrackOpTypes.ITERATE */, ITERATE_KEY);\n    return Reflect.get(target, 'size', target);\n}\nfunction add(value) {\n    value = toRaw(value);\n    const target = toRaw(this);\n    const proto = getProto(target);\n    const hadKey = proto.has.call(target, value);\n    if (!hadKey) {\n        target.add(value);\n        trigger(target, \"add\" /* TriggerOpTypes.ADD */, value, value);\n    }\n    return this;\n}\nfunction set(key, value) {\n    value = toRaw(value);\n    const target = toRaw(this);\n    const { has, get } = getProto(target);\n    let hadKey = has.call(target, key);\n    if (!hadKey) {\n        key = toRaw(key);\n        hadKey = has.call(target, key);\n    }\n    else {\n        checkIdentityKeys(target, has, key);\n    }\n    const oldValue = get.call(target, key);\n    target.set(key, value);\n    if (!hadKey) {\n        trigger(target, \"add\" /* TriggerOpTypes.ADD */, key, value);\n    }\n    else if (hasChanged(value, oldValue)) {\n        trigger(target, \"set\" /* TriggerOpTypes.SET */, key, value, oldValue);\n    }\n    return this;\n}\nfunction deleteEntry(key) {\n    const target = toRaw(this);\n    const { has, get } = getProto(target);\n    let hadKey = has.call(target, key);\n    if (!hadKey) {\n        key = toRaw(key);\n        hadKey = has.call(target, key);\n    }\n    else {\n        checkIdentityKeys(target, has, key);\n    }\n    const oldValue = get ? get.call(target, key) : undefined;\n    // forward the operation before queueing reactions\n    const result = target.delete(key);\n    if (hadKey) {\n        trigger(target, \"delete\" /* TriggerOpTypes.DELETE */, key, undefined, oldValue);\n    }\n    return result;\n}\nfunction clear() {\n    const target = toRaw(this);\n    const hadItems = target.size !== 0;\n    const oldTarget = isMap(target)\n            ? new Map(target)\n            : new Set(target)\n        ;\n    // forward the operation before queueing reactions\n    const result = target.clear();\n    if (hadItems) {\n        trigger(target, \"clear\" /* TriggerOpTypes.CLEAR */, undefined, undefined, oldTarget);\n    }\n    return result;\n}\nfunction createForEach(isReadonly, isShallow) {\n    return function forEach(callback, thisArg) {\n        const observed = this;\n        const target = observed[\"__v_raw\" /* ReactiveFlags.RAW */];\n        const rawTarget = toRaw(target);\n        const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive;\n        !isReadonly && track(rawTarget, \"iterate\" /* TrackOpTypes.ITERATE */, ITERATE_KEY);\n        return target.forEach((value, key) => {\n            // important: make sure the callback is\n            // 1. invoked with the reactive map as `this` and 3rd arg\n            // 2. the value received should be a corresponding reactive/readonly.\n            return callback.call(thisArg, wrap(value), wrap(key), observed);\n        });\n    };\n}\nfunction createIterableMethod(method, isReadonly, isShallow) {\n    return function (...args) {\n        const target = this[\"__v_raw\" /* ReactiveFlags.RAW */];\n        const rawTarget = toRaw(target);\n        const targetIsMap = isMap(rawTarget);\n        const isPair = method === 'entries' || (method === Symbol.iterator && targetIsMap);\n        const isKeyOnly = method === 'keys' && targetIsMap;\n        const innerIterator = target[method](...args);\n        const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive;\n        !isReadonly &&\n            track(rawTarget, \"iterate\" /* TrackOpTypes.ITERATE */, isKeyOnly ? MAP_KEY_ITERATE_KEY : ITERATE_KEY);\n        // return a wrapped iterator which returns observed versions of the\n        // values emitted from the real iterator\n        return {\n            // iterator protocol\n            next() {\n                const { value, done } = innerIterator.next();\n                return done\n                    ? { value, done }\n                    : {\n                        value: isPair ? [wrap(value[0]), wrap(value[1])] : wrap(value),\n                        done\n                    };\n            },\n            // iterable protocol\n            [Symbol.iterator]() {\n                return this;\n            }\n        };\n    };\n}\nfunction createReadonlyMethod(type) {\n    return function (...args) {\n        {\n            const key = args[0] ? `on key \"${args[0]}\" ` : ``;\n            console.warn(`${capitalize(type)} operation ${key}failed: target is readonly.`, toRaw(this));\n        }\n        return type === \"delete\" /* TriggerOpTypes.DELETE */ ? false : this;\n    };\n}\nfunction createInstrumentations() {\n    const mutableInstrumentations = {\n        get(key) {\n            return get(this, key);\n        },\n        get size() {\n            return size(this);\n        },\n        has,\n        add,\n        set,\n        delete: deleteEntry,\n        clear,\n        forEach: createForEach(false, false)\n    };\n    const shallowInstrumentations = {\n        get(key) {\n            return get(this, key, false, true);\n        },\n        get size() {\n            return size(this);\n        },\n        has,\n        add,\n        set,\n        delete: deleteEntry,\n        clear,\n        forEach: createForEach(false, true)\n    };\n    const readonlyInstrumentations = {\n        get(key) {\n            return get(this, key, true);\n        },\n        get size() {\n            return size(this, true);\n        },\n        has(key) {\n            return has.call(this, key, true);\n        },\n        add: createReadonlyMethod(\"add\" /* TriggerOpTypes.ADD */),\n        set: createReadonlyMethod(\"set\" /* TriggerOpTypes.SET */),\n        delete: createReadonlyMethod(\"delete\" /* TriggerOpTypes.DELETE */),\n        clear: createReadonlyMethod(\"clear\" /* TriggerOpTypes.CLEAR */),\n        forEach: createForEach(true, false)\n    };\n    const shallowReadonlyInstrumentations = {\n        get(key) {\n            return get(this, key, true, true);\n        },\n        get size() {\n            return size(this, true);\n        },\n        has(key) {\n            return has.call(this, key, true);\n        },\n        add: createReadonlyMethod(\"add\" /* TriggerOpTypes.ADD */),\n        set: createReadonlyMethod(\"set\" /* TriggerOpTypes.SET */),\n        delete: createReadonlyMethod(\"delete\" /* TriggerOpTypes.DELETE */),\n        clear: createReadonlyMethod(\"clear\" /* TriggerOpTypes.CLEAR */),\n        forEach: createForEach(true, true)\n    };\n    const iteratorMethods = ['keys', 'values', 'entries', Symbol.iterator];\n    iteratorMethods.forEach(method => {\n        mutableInstrumentations[method] = createIterableMethod(method, false, false);\n        readonlyInstrumentations[method] = createIterableMethod(method, true, false);\n        shallowInstrumentations[method] = createIterableMethod(method, false, true);\n        shallowReadonlyInstrumentations[method] = createIterableMethod(method, true, true);\n    });\n    return [\n        mutableInstrumentations,\n        readonlyInstrumentations,\n        shallowInstrumentations,\n        shallowReadonlyInstrumentations\n    ];\n}\nconst [mutableInstrumentations, readonlyInstrumentations, shallowInstrumentations, shallowReadonlyInstrumentations] = /* #__PURE__*/ createInstrumentations();\nfunction createInstrumentationGetter(isReadonly, shallow) {\n    const instrumentations = shallow\n        ? isReadonly\n            ? shallowReadonlyInstrumentations\n            : shallowInstrumentations\n        : isReadonly\n            ? readonlyInstrumentations\n            : mutableInstrumentations;\n    return (target, key, receiver) => {\n        if (key === \"__v_isReactive\" /* ReactiveFlags.IS_REACTIVE */) {\n            return !isReadonly;\n        }\n        else if (key === \"__v_isReadonly\" /* ReactiveFlags.IS_READONLY */) {\n            return isReadonly;\n        }\n        else if (key === \"__v_raw\" /* ReactiveFlags.RAW */) {\n            return target;\n        }\n        return Reflect.get(hasOwn(instrumentations, key) && key in target\n            ? instrumentations\n            : target, key, receiver);\n    };\n}\nconst mutableCollectionHandlers = {\n    get: /*#__PURE__*/ createInstrumentationGetter(false, false)\n};\nconst shallowCollectionHandlers = {\n    get: /*#__PURE__*/ createInstrumentationGetter(false, true)\n};\nconst readonlyCollectionHandlers = {\n    get: /*#__PURE__*/ createInstrumentationGetter(true, false)\n};\nconst shallowReadonlyCollectionHandlers = {\n    get: /*#__PURE__*/ createInstrumentationGetter(true, true)\n};\nfunction checkIdentityKeys(target, has, key) {\n    const rawKey = toRaw(key);\n    if (rawKey !== key && has.call(target, rawKey)) {\n        const type = toRawType(target);\n        console.warn(`Reactive ${type} contains both the raw and reactive ` +\n            `versions of the same object${type === `Map` ? ` as keys` : ``}, ` +\n            `which can lead to inconsistencies. ` +\n            `Avoid differentiating between the raw and reactive versions ` +\n            `of an object and only use the reactive version if possible.`);\n    }\n}\n\nconst reactiveMap = new WeakMap();\nconst shallowReactiveMap = new WeakMap();\nconst readonlyMap = new WeakMap();\nconst shallowReadonlyMap = new WeakMap();\nfunction targetTypeMap(rawType) {\n    switch (rawType) {\n        case 'Object':\n        case 'Array':\n            return 1 /* TargetType.COMMON */;\n        case 'Map':\n        case 'Set':\n        case 'WeakMap':\n        case 'WeakSet':\n            return 2 /* TargetType.COLLECTION */;\n        default:\n            return 0 /* TargetType.INVALID */;\n    }\n}\nfunction getTargetType(value) {\n    return value[\"__v_skip\" /* ReactiveFlags.SKIP */] || !Object.isExtensible(value)\n        ? 0 /* TargetType.INVALID */\n        : targetTypeMap(toRawType(value));\n}\nfunction reactive(target) {\n    // if trying to observe a readonly proxy, return the readonly version.\n    if (isReadonly(target)) {\n        return target;\n    }\n    return createReactiveObject(target, false, mutableHandlers, mutableCollectionHandlers, reactiveMap);\n}\n/**\n * Return a shallowly-reactive copy of the original object, where only the root\n * level properties are reactive. It also does not auto-unwrap refs (even at the\n * root level).\n */\nfunction shallowReactive(target) {\n    return createReactiveObject(target, false, shallowReactiveHandlers, shallowCollectionHandlers, shallowReactiveMap);\n}\n/**\n * Creates a readonly copy of the original object. Note the returned copy is not\n * made reactive, but `readonly` can be called on an already reactive object.\n */\nfunction readonly(target) {\n    return createReactiveObject(target, true, readonlyHandlers, readonlyCollectionHandlers, readonlyMap);\n}\n/**\n * Returns a reactive-copy of the original object, where only the root level\n * properties are readonly, and does NOT unwrap refs nor recursively convert\n * returned properties.\n * This is used for creating the props proxy object for stateful components.\n */\nfunction shallowReadonly(target) {\n    return createReactiveObject(target, true, shallowReadonlyHandlers, shallowReadonlyCollectionHandlers, shallowReadonlyMap);\n}\nfunction createReactiveObject(target, isReadonly, baseHandlers, collectionHandlers, proxyMap) {\n    if (!isObject(target)) {\n        {\n            console.warn(`value cannot be made reactive: ${String(target)}`);\n        }\n        return target;\n    }\n    // target is already a Proxy, return it.\n    // exception: calling readonly() on a reactive object\n    if (target[\"__v_raw\" /* ReactiveFlags.RAW */] &&\n        !(isReadonly && target[\"__v_isReactive\" /* ReactiveFlags.IS_REACTIVE */])) {\n        return target;\n    }\n    // target already has corresponding Proxy\n    const existingProxy = proxyMap.get(target);\n    if (existingProxy) {\n        return existingProxy;\n    }\n    // only specific value types can be observed.\n    const targetType = getTargetType(target);\n    if (targetType === 0 /* TargetType.INVALID */) {\n        return target;\n    }\n    const proxy = new Proxy(target, targetType === 2 /* TargetType.COLLECTION */ ? collectionHandlers : baseHandlers);\n    proxyMap.set(target, proxy);\n    return proxy;\n}\nfunction isReactive(value) {\n    if (isReadonly(value)) {\n        return isReactive(value[\"__v_raw\" /* ReactiveFlags.RAW */]);\n    }\n    return !!(value && value[\"__v_isReactive\" /* ReactiveFlags.IS_REACTIVE */]);\n}\nfunction isReadonly(value) {\n    return !!(value && value[\"__v_isReadonly\" /* ReactiveFlags.IS_READONLY */]);\n}\nfunction isShallow(value) {\n    return !!(value && value[\"__v_isShallow\" /* ReactiveFlags.IS_SHALLOW */]);\n}\nfunction isProxy(value) {\n    return isReactive(value) || isReadonly(value);\n}\nfunction toRaw(observed) {\n    const raw = observed && observed[\"__v_raw\" /* ReactiveFlags.RAW */];\n    return raw ? toRaw(raw) : observed;\n}\nfunction markRaw(value) {\n    def(value, \"__v_skip\" /* ReactiveFlags.SKIP */, true);\n    return value;\n}\nconst toReactive = (value) => isObject(value) ? reactive(value) : value;\nconst toReadonly = (value) => isObject(value) ? readonly(value) : value;\n\nfunction trackRefValue(ref) {\n    if (shouldTrack && activeEffect) {\n        ref = toRaw(ref);\n        {\n            trackEffects(ref.dep || (ref.dep = createDep()), {\n                target: ref,\n                type: \"get\" /* TrackOpTypes.GET */,\n                key: 'value'\n            });\n        }\n    }\n}\nfunction triggerRefValue(ref, newVal) {\n    ref = toRaw(ref);\n    const dep = ref.dep;\n    if (dep) {\n        {\n            triggerEffects(dep, {\n                target: ref,\n                type: \"set\" /* TriggerOpTypes.SET */,\n                key: 'value',\n                newValue: newVal\n            });\n        }\n    }\n}\nfunction isRef(r) {\n    return !!(r && r.__v_isRef === true);\n}\nfunction unref(ref) {\n    return isRef(ref) ? ref.value : ref;\n}\nconst shallowUnwrapHandlers = {\n    get: (target, key, receiver) => unref(Reflect.get(target, key, receiver)),\n    set: (target, key, value, receiver) => {\n        const oldValue = target[key];\n        if (isRef(oldValue) && !isRef(value)) {\n            oldValue.value = value;\n            return true;\n        }\n        else {\n            return Reflect.set(target, key, value, receiver);\n        }\n    }\n};\nfunction proxyRefs(objectWithRefs) {\n    return isReactive(objectWithRefs)\n        ? objectWithRefs\n        : new Proxy(objectWithRefs, shallowUnwrapHandlers);\n}\n\nvar _a;\nclass ComputedRefImpl {\n    constructor(getter, _setter, isReadonly, isSSR) {\n        this._setter = _setter;\n        this.dep = undefined;\n        this.__v_isRef = true;\n        this[_a] = false;\n        this._dirty = true;\n        this.effect = new ReactiveEffect(getter, () => {\n            if (!this._dirty) {\n                this._dirty = true;\n                triggerRefValue(this);\n            }\n        });\n        this.effect.computed = this;\n        this.effect.active = this._cacheable = !isSSR;\n        this[\"__v_isReadonly\" /* ReactiveFlags.IS_READONLY */] = isReadonly;\n    }\n    get value() {\n        // the computed ref may get wrapped by other proxies e.g. readonly() #3376\n        const self = toRaw(this);\n        trackRefValue(self);\n        if (self._dirty || !self._cacheable) {\n            self._dirty = false;\n            self._value = self.effect.run();\n        }\n        return self._value;\n    }\n    set value(newValue) {\n        this._setter(newValue);\n    }\n}\n_a = \"__v_isReadonly\" /* ReactiveFlags.IS_READONLY */;\nfunction computed$1(getterOrOptions, debugOptions, isSSR = false) {\n    let getter;\n    let setter;\n    const onlyGetter = isFunction(getterOrOptions);\n    if (onlyGetter) {\n        getter = getterOrOptions;\n        setter = () => {\n                console.warn('Write operation failed: computed value is readonly');\n            }\n            ;\n    }\n    else {\n        getter = getterOrOptions.get;\n        setter = getterOrOptions.set;\n    }\n    const cRef = new ComputedRefImpl(getter, setter, onlyGetter || !setter, isSSR);\n    if (debugOptions && !isSSR) {\n        cRef.effect.onTrack = debugOptions.onTrack;\n        cRef.effect.onTrigger = debugOptions.onTrigger;\n    }\n    return cRef;\n}\n\nconst stack = [];\nfunction pushWarningContext(vnode) {\n    stack.push(vnode);\n}\nfunction popWarningContext() {\n    stack.pop();\n}\nfunction warn(msg, ...args) {\n    // avoid props formatting or warn handler tracking deps that might be mutated\n    // during patch, leading to infinite recursion.\n    pauseTracking();\n    const instance = stack.length ? stack[stack.length - 1].component : null;\n    const appWarnHandler = instance && instance.appContext.config.warnHandler;\n    const trace = getComponentTrace();\n    if (appWarnHandler) {\n        callWithErrorHandling(appWarnHandler, instance, 11 /* ErrorCodes.APP_WARN_HANDLER */, [\n            msg + args.join(''),\n            instance && instance.proxy,\n            trace\n                .map(({ vnode }) => `at <${formatComponentName(instance, vnode.type)}>`)\n                .join('\\n'),\n            trace\n        ]);\n    }\n    else {\n        const warnArgs = [`[Vue warn]: ${msg}`, ...args];\n        /* istanbul ignore if */\n        if (trace.length &&\n            // avoid spamming console during tests\n            !false) {\n            warnArgs.push(`\\n`, ...formatTrace(trace));\n        }\n        console.warn(...warnArgs);\n    }\n    resetTracking();\n}\nfunction getComponentTrace() {\n    let currentVNode = stack[stack.length - 1];\n    if (!currentVNode) {\n        return [];\n    }\n    // we can't just use the stack because it will be incomplete during updates\n    // that did not start from the root. Re-construct the parent chain using\n    // instance parent pointers.\n    const normalizedStack = [];\n    while (currentVNode) {\n        const last = normalizedStack[0];\n        if (last && last.vnode === currentVNode) {\n            last.recurseCount++;\n        }\n        else {\n            normalizedStack.push({\n                vnode: currentVNode,\n                recurseCount: 0\n            });\n        }\n        const parentInstance = currentVNode.component && currentVNode.component.parent;\n        currentVNode = parentInstance && parentInstance.vnode;\n    }\n    return normalizedStack;\n}\n/* istanbul ignore next */\nfunction formatTrace(trace) {\n    const logs = [];\n    trace.forEach((entry, i) => {\n        logs.push(...(i === 0 ? [] : [`\\n`]), ...formatTraceEntry(entry));\n    });\n    return logs;\n}\nfunction formatTraceEntry({ vnode, recurseCount }) {\n    const postfix = recurseCount > 0 ? `... (${recurseCount} recursive calls)` : ``;\n    const isRoot = vnode.component ? vnode.component.parent == null : false;\n    const open = ` at <${formatComponentName(vnode.component, vnode.type, isRoot)}`;\n    const close = `>` + postfix;\n    return vnode.props\n        ? [open, ...formatProps(vnode.props), close]\n        : [open + close];\n}\n/* istanbul ignore next */\nfunction formatProps(props) {\n    const res = [];\n    const keys = Object.keys(props);\n    keys.slice(0, 3).forEach(key => {\n        res.push(...formatProp(key, props[key]));\n    });\n    if (keys.length > 3) {\n        res.push(` ...`);\n    }\n    return res;\n}\n/* istanbul ignore next */\nfunction formatProp(key, value, raw) {\n    if (isString(value)) {\n        value = JSON.stringify(value);\n        return raw ? value : [`${key}=${value}`];\n    }\n    else if (typeof value === 'number' ||\n        typeof value === 'boolean' ||\n        value == null) {\n        return raw ? value : [`${key}=${value}`];\n    }\n    else if (isRef(value)) {\n        value = formatProp(key, toRaw(value.value), true);\n        return raw ? value : [`${key}=Ref<`, value, `>`];\n    }\n    else if (isFunction(value)) {\n        return [`${key}=fn${value.name ? `<${value.name}>` : ``}`];\n    }\n    else {\n        value = toRaw(value);\n        return raw ? value : [`${key}=`, value];\n    }\n}\n\nconst ErrorTypeStrings = {\n    [\"sp\" /* LifecycleHooks.SERVER_PREFETCH */]: 'serverPrefetch hook',\n    [\"bc\" /* LifecycleHooks.BEFORE_CREATE */]: 'beforeCreate hook',\n    [\"c\" /* LifecycleHooks.CREATED */]: 'created hook',\n    [\"bm\" /* LifecycleHooks.BEFORE_MOUNT */]: 'beforeMount hook',\n    [\"m\" /* LifecycleHooks.MOUNTED */]: 'mounted hook',\n    [\"bu\" /* LifecycleHooks.BEFORE_UPDATE */]: 'beforeUpdate hook',\n    [\"u\" /* LifecycleHooks.UPDATED */]: 'updated',\n    [\"bum\" /* LifecycleHooks.BEFORE_UNMOUNT */]: 'beforeUnmount hook',\n    [\"um\" /* LifecycleHooks.UNMOUNTED */]: 'unmounted hook',\n    [\"a\" /* LifecycleHooks.ACTIVATED */]: 'activated hook',\n    [\"da\" /* LifecycleHooks.DEACTIVATED */]: 'deactivated hook',\n    [\"ec\" /* LifecycleHooks.ERROR_CAPTURED */]: 'errorCaptured hook',\n    [\"rtc\" /* LifecycleHooks.RENDER_TRACKED */]: 'renderTracked hook',\n    [\"rtg\" /* LifecycleHooks.RENDER_TRIGGERED */]: 'renderTriggered hook',\n    [0 /* ErrorCodes.SETUP_FUNCTION */]: 'setup function',\n    [1 /* ErrorCodes.RENDER_FUNCTION */]: 'render function',\n    [2 /* ErrorCodes.WATCH_GETTER */]: 'watcher getter',\n    [3 /* ErrorCodes.WATCH_CALLBACK */]: 'watcher callback',\n    [4 /* ErrorCodes.WATCH_CLEANUP */]: 'watcher cleanup function',\n    [5 /* ErrorCodes.NATIVE_EVENT_HANDLER */]: 'native event handler',\n    [6 /* ErrorCodes.COMPONENT_EVENT_HANDLER */]: 'component event handler',\n    [7 /* ErrorCodes.VNODE_HOOK */]: 'vnode hook',\n    [8 /* ErrorCodes.DIRECTIVE_HOOK */]: 'directive hook',\n    [9 /* ErrorCodes.TRANSITION_HOOK */]: 'transition hook',\n    [10 /* ErrorCodes.APP_ERROR_HANDLER */]: 'app errorHandler',\n    [11 /* ErrorCodes.APP_WARN_HANDLER */]: 'app warnHandler',\n    [12 /* ErrorCodes.FUNCTION_REF */]: 'ref function',\n    [13 /* ErrorCodes.ASYNC_COMPONENT_LOADER */]: 'async component loader',\n    [14 /* ErrorCodes.SCHEDULER */]: 'scheduler flush. This is likely a Vue internals bug. ' +\n        'Please open an issue at https://new-issue.vuejs.org/?repo=vuejs/core'\n};\nfunction callWithErrorHandling(fn, instance, type, args) {\n    let res;\n    try {\n        res = args ? fn(...args) : fn();\n    }\n    catch (err) {\n        handleError(err, instance, type);\n    }\n    return res;\n}\nfunction callWithAsyncErrorHandling(fn, instance, type, args) {\n    if (isFunction(fn)) {\n        const res = callWithErrorHandling(fn, instance, type, args);\n        if (res && isPromise(res)) {\n            res.catch(err => {\n                handleError(err, instance, type);\n            });\n        }\n        return res;\n    }\n    const values = [];\n    for (let i = 0; i < fn.length; i++) {\n        values.push(callWithAsyncErrorHandling(fn[i], instance, type, args));\n    }\n    return values;\n}\nfunction handleError(err, instance, type, throwInDev = true) {\n    const contextVNode = instance ? instance.vnode : null;\n    if (instance) {\n        let cur = instance.parent;\n        // the exposed instance is the render proxy to keep it consistent with 2.x\n        const exposedInstance = instance.proxy;\n        // in production the hook receives only the error code\n        const errorInfo = ErrorTypeStrings[type] ;\n        while (cur) {\n            const errorCapturedHooks = cur.ec;\n            if (errorCapturedHooks) {\n                for (let i = 0; i < errorCapturedHooks.length; i++) {\n                    if (errorCapturedHooks[i](err, exposedInstance, errorInfo) === false) {\n                        return;\n                    }\n                }\n            }\n            cur = cur.parent;\n        }\n        // app-level handling\n        const appErrorHandler = instance.appContext.config.errorHandler;\n        if (appErrorHandler) {\n            callWithErrorHandling(appErrorHandler, null, 10 /* ErrorCodes.APP_ERROR_HANDLER */, [err, exposedInstance, errorInfo]);\n            return;\n        }\n    }\n    logError(err, type, contextVNode, throwInDev);\n}\nfunction logError(err, type, contextVNode, throwInDev = true) {\n    {\n        const info = ErrorTypeStrings[type];\n        if (contextVNode) {\n            pushWarningContext(contextVNode);\n        }\n        warn(`Unhandled error${info ? ` during execution of ${info}` : ``}`);\n        if (contextVNode) {\n            popWarningContext();\n        }\n        // crash in dev by default so it's more noticeable\n        if (throwInDev) {\n            throw err;\n        }\n        else {\n            console.error(err);\n        }\n    }\n}\n\nlet isFlushing = false;\nlet isFlushPending = false;\nconst queue = [];\nlet flushIndex = 0;\nconst pendingPostFlushCbs = [];\nlet activePostFlushCbs = null;\nlet postFlushIndex = 0;\nconst resolvedPromise = /*#__PURE__*/ Promise.resolve();\nlet currentFlushPromise = null;\nconst RECURSION_LIMIT = 100;\nfunction nextTick(fn) {\n    const p = currentFlushPromise || resolvedPromise;\n    return fn ? p.then(this ? fn.bind(this) : fn) : p;\n}\n// #2768\n// Use binary-search to find a suitable position in the queue,\n// so that the queue maintains the increasing order of job's id,\n// which can prevent the job from being skipped and also can avoid repeated patching.\nfunction findInsertionIndex(id) {\n    // the start index should be `flushIndex + 1`\n    let start = flushIndex + 1;\n    let end = queue.length;\n    while (start < end) {\n        const middle = (start + end) >>> 1;\n        const middleJobId = getId(queue[middle]);\n        middleJobId < id ? (start = middle + 1) : (end = middle);\n    }\n    return start;\n}\nfunction queueJob(job) {\n    // the dedupe search uses the startIndex argument of Array.includes()\n    // by default the search index includes the current job that is being run\n    // so it cannot recursively trigger itself again.\n    // if the job is a watch() callback, the search will start with a +1 index to\n    // allow it recursively trigger itself - it is the user's responsibility to\n    // ensure it doesn't end up in an infinite loop.\n    if (!queue.length ||\n        !queue.includes(job, isFlushing && job.allowRecurse ? flushIndex + 1 : flushIndex)) {\n        if (job.id == null) {\n            queue.push(job);\n        }\n        else {\n            queue.splice(findInsertionIndex(job.id), 0, job);\n        }\n        queueFlush();\n    }\n}\nfunction queueFlush() {\n    if (!isFlushing && !isFlushPending) {\n        isFlushPending = true;\n        currentFlushPromise = resolvedPromise.then(flushJobs);\n    }\n}\nfunction invalidateJob(job) {\n    const i = queue.indexOf(job);\n    if (i > flushIndex) {\n        queue.splice(i, 1);\n    }\n}\nfunction queuePostFlushCb(cb) {\n    if (!isArray(cb)) {\n        if (!activePostFlushCbs ||\n            !activePostFlushCbs.includes(cb, cb.allowRecurse ? postFlushIndex + 1 : postFlushIndex)) {\n            pendingPostFlushCbs.push(cb);\n        }\n    }\n    else {\n        // if cb is an array, it is a component lifecycle hook which can only be\n        // triggered by a job, which is already deduped in the main queue, so\n        // we can skip duplicate check here to improve perf\n        pendingPostFlushCbs.push(...cb);\n    }\n    queueFlush();\n}\nfunction flushPreFlushCbs(seen, \n// if currently flushing, skip the current job itself\ni = isFlushing ? flushIndex + 1 : 0) {\n    {\n        seen = seen || new Map();\n    }\n    for (; i < queue.length; i++) {\n        const cb = queue[i];\n        if (cb && cb.pre) {\n            if (checkRecursiveUpdates(seen, cb)) {\n                continue;\n            }\n            queue.splice(i, 1);\n            i--;\n            cb();\n        }\n    }\n}\nfunction flushPostFlushCbs(seen) {\n    if (pendingPostFlushCbs.length) {\n        const deduped = [...new Set(pendingPostFlushCbs)];\n        pendingPostFlushCbs.length = 0;\n        // #1947 already has active queue, nested flushPostFlushCbs call\n        if (activePostFlushCbs) {\n            activePostFlushCbs.push(...deduped);\n            return;\n        }\n        activePostFlushCbs = deduped;\n        {\n            seen = seen || new Map();\n        }\n        activePostFlushCbs.sort((a, b) => getId(a) - getId(b));\n        for (postFlushIndex = 0; postFlushIndex < activePostFlushCbs.length; postFlushIndex++) {\n            if (checkRecursiveUpdates(seen, activePostFlushCbs[postFlushIndex])) {\n                continue;\n            }\n            activePostFlushCbs[postFlushIndex]();\n        }\n        activePostFlushCbs = null;\n        postFlushIndex = 0;\n    }\n}\nconst getId = (job) => job.id == null ? Infinity : job.id;\nconst comparator = (a, b) => {\n    const diff = getId(a) - getId(b);\n    if (diff === 0) {\n        if (a.pre && !b.pre)\n            return -1;\n        if (b.pre && !a.pre)\n            return 1;\n    }\n    return diff;\n};\nfunction flushJobs(seen) {\n    isFlushPending = false;\n    isFlushing = true;\n    {\n        seen = seen || new Map();\n    }\n    // Sort queue before flush.\n    // This ensures that:\n    // 1. Components are updated from parent to child. (because parent is always\n    //    created before the child so its render effect will have smaller\n    //    priority number)\n    // 2. If a component is unmounted during a parent component's update,\n    //    its update can be skipped.\n    queue.sort(comparator);\n    // conditional usage of checkRecursiveUpdate must be determined out of\n    // try ... catch block since Rollup by default de-optimizes treeshaking\n    // inside try-catch. This can leave all warning code unshaked. Although\n    // they would get eventually shaken by a minifier like terser, some minifiers\n    // would fail to do that (e.g. https://github.com/evanw/esbuild/issues/1610)\n    const check = (job) => checkRecursiveUpdates(seen, job)\n        ;\n    try {\n        for (flushIndex = 0; flushIndex < queue.length; flushIndex++) {\n            const job = queue[flushIndex];\n            if (job && job.active !== false) {\n                if (true && check(job)) {\n                    continue;\n                }\n                // console.log(`running:`, job.id)\n                callWithErrorHandling(job, null, 14 /* ErrorCodes.SCHEDULER */);\n            }\n        }\n    }\n    finally {\n        flushIndex = 0;\n        queue.length = 0;\n        flushPostFlushCbs(seen);\n        isFlushing = false;\n        currentFlushPromise = null;\n        // some postFlushCb queued jobs!\n        // keep flushing until it drains.\n        if (queue.length || pendingPostFlushCbs.length) {\n            flushJobs(seen);\n        }\n    }\n}\nfunction checkRecursiveUpdates(seen, fn) {\n    if (!seen.has(fn)) {\n        seen.set(fn, 1);\n    }\n    else {\n        const count = seen.get(fn);\n        if (count > RECURSION_LIMIT) {\n            const instance = fn.ownerInstance;\n            const componentName = instance && getComponentName(instance.type);\n            warn(`Maximum recursive updates exceeded${componentName ? ` in component <${componentName}>` : ``}. ` +\n                `This means you have a reactive effect that is mutating its own ` +\n                `dependencies and thus recursively triggering itself. Possible sources ` +\n                `include component template, render function, updated hook or ` +\n                `watcher source function.`);\n            return true;\n        }\n        else {\n            seen.set(fn, count + 1);\n        }\n    }\n}\n\n/* eslint-disable no-restricted-globals */\nlet isHmrUpdating = false;\nconst hmrDirtyComponents = new Set();\n// Expose the HMR runtime on the global object\n// This makes it entirely tree-shakable without polluting the exports and makes\n// it easier to be used in toolings like vue-loader\n// Note: for a component to be eligible for HMR it also needs the __hmrId option\n// to be set so that its instances can be registered / removed.\n{\n    getGlobalThis().__VUE_HMR_RUNTIME__ = {\n        createRecord: tryWrap(createRecord),\n        rerender: tryWrap(rerender),\n        reload: tryWrap(reload)\n    };\n}\nconst map = new Map();\nfunction registerHMR(instance) {\n    const id = instance.type.__hmrId;\n    let record = map.get(id);\n    if (!record) {\n        createRecord(id, instance.type);\n        record = map.get(id);\n    }\n    record.instances.add(instance);\n}\nfunction unregisterHMR(instance) {\n    map.get(instance.type.__hmrId).instances.delete(instance);\n}\nfunction createRecord(id, initialDef) {\n    if (map.has(id)) {\n        return false;\n    }\n    map.set(id, {\n        initialDef: normalizeClassComponent(initialDef),\n        instances: new Set()\n    });\n    return true;\n}\nfunction normalizeClassComponent(component) {\n    return isClassComponent(component) ? component.__vccOpts : component;\n}\nfunction rerender(id, newRender) {\n    const record = map.get(id);\n    if (!record) {\n        return;\n    }\n    // update initial record (for not-yet-rendered component)\n    record.initialDef.render = newRender;\n    [...record.instances].forEach(instance => {\n        if (newRender) {\n            instance.render = newRender;\n            normalizeClassComponent(instance.type).render = newRender;\n        }\n        instance.renderCache = [];\n        // this flag forces child components with slot content to update\n        isHmrUpdating = true;\n        instance.update();\n        isHmrUpdating = false;\n    });\n}\nfunction reload(id, newComp) {\n    const record = map.get(id);\n    if (!record)\n        return;\n    newComp = normalizeClassComponent(newComp);\n    // update initial def (for not-yet-rendered components)\n    updateComponentDef(record.initialDef, newComp);\n    // create a snapshot which avoids the set being mutated during updates\n    const instances = [...record.instances];\n    for (const instance of instances) {\n        const oldComp = normalizeClassComponent(instance.type);\n        if (!hmrDirtyComponents.has(oldComp)) {\n            // 1. Update existing comp definition to match new one\n            if (oldComp !== record.initialDef) {\n                updateComponentDef(oldComp, newComp);\n            }\n            // 2. mark definition dirty. This forces the renderer to replace the\n            // component on patch.\n            hmrDirtyComponents.add(oldComp);\n        }\n        // 3. invalidate options resolution cache\n        instance.appContext.optionsCache.delete(instance.type);\n        // 4. actually update\n        if (instance.ceReload) {\n            // custom element\n            hmrDirtyComponents.add(oldComp);\n            instance.ceReload(newComp.styles);\n            hmrDirtyComponents.delete(oldComp);\n        }\n        else if (instance.parent) {\n            // 4. Force the parent instance to re-render. This will cause all updated\n            // components to be unmounted and re-mounted. Queue the update so that we\n            // don't end up forcing the same parent to re-render multiple times.\n            queueJob(instance.parent.update);\n        }\n        else if (instance.appContext.reload) {\n            // root instance mounted via createApp() has a reload method\n            instance.appContext.reload();\n        }\n        else if (typeof window !== 'undefined') {\n            // root instance inside tree created via raw render(). Force reload.\n            window.location.reload();\n        }\n        else {\n            console.warn('[HMR] Root or manually mounted instance modified. Full reload required.');\n        }\n    }\n    // 5. make sure to cleanup dirty hmr components after update\n    queuePostFlushCb(() => {\n        for (const instance of instances) {\n            hmrDirtyComponents.delete(normalizeClassComponent(instance.type));\n        }\n    });\n}\nfunction updateComponentDef(oldComp, newComp) {\n    extend(oldComp, newComp);\n    for (const key in oldComp) {\n        if (key !== '__file' && !(key in newComp)) {\n            delete oldComp[key];\n        }\n    }\n}\nfunction tryWrap(fn) {\n    return (id, arg) => {\n        try {\n            return fn(id, arg);\n        }\n        catch (e) {\n            console.error(e);\n            console.warn(`[HMR] Something went wrong during Vue component hot-reload. ` +\n                `Full reload required.`);\n        }\n    };\n}\n\nlet devtools;\nlet buffer = [];\nlet devtoolsNotInstalled = false;\nfunction emit$1(event, ...args) {\n    if (devtools) {\n        devtools.emit(event, ...args);\n    }\n    else if (!devtoolsNotInstalled) {\n        buffer.push({ event, args });\n    }\n}\nfunction setDevtoolsHook(hook, target) {\n    var _a, _b;\n    devtools = hook;\n    if (devtools) {\n        devtools.enabled = true;\n        buffer.forEach(({ event, args }) => devtools.emit(event, ...args));\n        buffer = [];\n    }\n    else if (\n    // handle late devtools injection - only do this if we are in an actual\n    // browser environment to avoid the timer handle stalling test runner exit\n    // (#4815)\n    typeof window !== 'undefined' &&\n        // some envs mock window but not fully\n        window.HTMLElement &&\n        // also exclude jsdom\n        !((_b = (_a = window.navigator) === null || _a === void 0 ? void 0 : _a.userAgent) === null || _b === void 0 ? void 0 : _b.includes('jsdom'))) {\n        const replay = (target.__VUE_DEVTOOLS_HOOK_REPLAY__ =\n            target.__VUE_DEVTOOLS_HOOK_REPLAY__ || []);\n        replay.push((newHook) => {\n            setDevtoolsHook(newHook, target);\n        });\n        // clear buffer after 3s - the user probably doesn't have devtools installed\n        // at all, and keeping the buffer will cause memory leaks (#4738)\n        setTimeout(() => {\n            if (!devtools) {\n                target.__VUE_DEVTOOLS_HOOK_REPLAY__ = null;\n                devtoolsNotInstalled = true;\n                buffer = [];\n            }\n        }, 3000);\n    }\n    else {\n        // non-browser env, assume not installed\n        devtoolsNotInstalled = true;\n        buffer = [];\n    }\n}\nfunction devtoolsInitApp(app, version) {\n    emit$1(\"app:init\" /* DevtoolsHooks.APP_INIT */, app, version, {\n        Fragment,\n        Text,\n        Comment,\n        Static\n    });\n}\nfunction devtoolsUnmountApp(app) {\n    emit$1(\"app:unmount\" /* DevtoolsHooks.APP_UNMOUNT */, app);\n}\nconst devtoolsComponentAdded = /*#__PURE__*/ createDevtoolsComponentHook(\"component:added\" /* DevtoolsHooks.COMPONENT_ADDED */);\nconst devtoolsComponentUpdated = \n/*#__PURE__*/ createDevtoolsComponentHook(\"component:updated\" /* DevtoolsHooks.COMPONENT_UPDATED */);\nconst _devtoolsComponentRemoved = /*#__PURE__*/ createDevtoolsComponentHook(\"component:removed\" /* DevtoolsHooks.COMPONENT_REMOVED */);\nconst devtoolsComponentRemoved = (component) => {\n    if (devtools &&\n        typeof devtools.cleanupBuffer === 'function' &&\n        // remove the component if it wasn't buffered\n        !devtools.cleanupBuffer(component)) {\n        _devtoolsComponentRemoved(component);\n    }\n};\nfunction createDevtoolsComponentHook(hook) {\n    return (component) => {\n        emit$1(hook, component.appContext.app, component.uid, component.parent ? component.parent.uid : undefined, component);\n    };\n}\nconst devtoolsPerfStart = /*#__PURE__*/ createDevtoolsPerformanceHook(\"perf:start\" /* DevtoolsHooks.PERFORMANCE_START */);\nconst devtoolsPerfEnd = /*#__PURE__*/ createDevtoolsPerformanceHook(\"perf:end\" /* DevtoolsHooks.PERFORMANCE_END */);\nfunction createDevtoolsPerformanceHook(hook) {\n    return (component, type, time) => {\n        emit$1(hook, component.appContext.app, component.uid, component, type, time);\n    };\n}\nfunction devtoolsComponentEmit(component, event, params) {\n    emit$1(\"component:emit\" /* DevtoolsHooks.COMPONENT_EMIT */, component.appContext.app, component, event, params);\n}\n\nfunction emit(instance, event, ...rawArgs) {\n    if (instance.isUnmounted)\n        return;\n    const props = instance.vnode.props || EMPTY_OBJ;\n    {\n        const { emitsOptions, propsOptions: [propsOptions] } = instance;\n        if (emitsOptions) {\n            if (!(event in emitsOptions) &&\n                !(false )) {\n                if (!propsOptions || !(toHandlerKey(event) in propsOptions)) {\n                    warn(`Component emitted event \"${event}\" but it is neither declared in ` +\n                        `the emits option nor as an \"${toHandlerKey(event)}\" prop.`);\n                }\n            }\n            else {\n                const validator = emitsOptions[event];\n                if (isFunction(validator)) {\n                    const isValid = validator(...rawArgs);\n                    if (!isValid) {\n                        warn(`Invalid event arguments: event validation failed for event \"${event}\".`);\n                    }\n                }\n            }\n        }\n    }\n    let args = rawArgs;\n    const isModelListener = event.startsWith('update:');\n    // for v-model update:xxx events, apply modifiers on args\n    const modelArg = isModelListener && event.slice(7);\n    if (modelArg && modelArg in props) {\n        const modifiersKey = `${modelArg === 'modelValue' ? 'model' : modelArg}Modifiers`;\n        const { number, trim } = props[modifiersKey] || EMPTY_OBJ;\n        if (trim) {\n            args = rawArgs.map(a => (isString(a) ? a.trim() : a));\n        }\n        if (number) {\n            args = rawArgs.map(looseToNumber);\n        }\n    }\n    {\n        devtoolsComponentEmit(instance, event, args);\n    }\n    {\n        const lowerCaseEvent = event.toLowerCase();\n        if (lowerCaseEvent !== event && props[toHandlerKey(lowerCaseEvent)]) {\n            warn(`Event \"${lowerCaseEvent}\" is emitted in component ` +\n                `${formatComponentName(instance, instance.type)} but the handler is registered for \"${event}\". ` +\n                `Note that HTML attributes are case-insensitive and you cannot use ` +\n                `v-on to listen to camelCase events when using in-DOM templates. ` +\n                `You should probably use \"${hyphenate(event)}\" instead of \"${event}\".`);\n        }\n    }\n    let handlerName;\n    let handler = props[(handlerName = toHandlerKey(event))] ||\n        // also try camelCase event handler (#2249)\n        props[(handlerName = toHandlerKey(camelize(event)))];\n    // for v-model update:xxx events, also trigger kebab-case equivalent\n    // for props passed via kebab-case\n    if (!handler && isModelListener) {\n        handler = props[(handlerName = toHandlerKey(hyphenate(event)))];\n    }\n    if (handler) {\n        callWithAsyncErrorHandling(handler, instance, 6 /* ErrorCodes.COMPONENT_EVENT_HANDLER */, args);\n    }\n    const onceHandler = props[handlerName + `Once`];\n    if (onceHandler) {\n        if (!instance.emitted) {\n            instance.emitted = {};\n        }\n        else if (instance.emitted[handlerName]) {\n            return;\n        }\n        instance.emitted[handlerName] = true;\n        callWithAsyncErrorHandling(onceHandler, instance, 6 /* ErrorCodes.COMPONENT_EVENT_HANDLER */, args);\n    }\n}\nfunction normalizeEmitsOptions(comp, appContext, asMixin = false) {\n    const cache = appContext.emitsCache;\n    const cached = cache.get(comp);\n    if (cached !== undefined) {\n        return cached;\n    }\n    const raw = comp.emits;\n    let normalized = {};\n    // apply mixin/extends props\n    let hasExtends = false;\n    if (!isFunction(comp)) {\n        const extendEmits = (raw) => {\n            const normalizedFromExtend = normalizeEmitsOptions(raw, appContext, true);\n            if (normalizedFromExtend) {\n                hasExtends = true;\n                extend(normalized, normalizedFromExtend);\n            }\n        };\n        if (!asMixin && appContext.mixins.length) {\n            appContext.mixins.forEach(extendEmits);\n        }\n        if (comp.extends) {\n            extendEmits(comp.extends);\n        }\n        if (comp.mixins) {\n            comp.mixins.forEach(extendEmits);\n        }\n    }\n    if (!raw && !hasExtends) {\n        if (isObject(comp)) {\n            cache.set(comp, null);\n        }\n        return null;\n    }\n    if (isArray(raw)) {\n        raw.forEach(key => (normalized[key] = null));\n    }\n    else {\n        extend(normalized, raw);\n    }\n    if (isObject(comp)) {\n        cache.set(comp, normalized);\n    }\n    return normalized;\n}\n// Check if an incoming prop key is a declared emit event listener.\n// e.g. With `emits: { click: null }`, props named `onClick` and `onclick` are\n// both considered matched listeners.\nfunction isEmitListener(options, key) {\n    if (!options || !isOn(key)) {\n        return false;\n    }\n    key = key.slice(2).replace(/Once$/, '');\n    return (hasOwn(options, key[0].toLowerCase() + key.slice(1)) ||\n        hasOwn(options, hyphenate(key)) ||\n        hasOwn(options, key));\n}\n\n/**\n * mark the current rendering instance for asset resolution (e.g.\n * resolveComponent, resolveDirective) during render\n */\nlet currentRenderingInstance = null;\nlet currentScopeId = null;\n/**\n * Note: rendering calls maybe nested. The function returns the parent rendering\n * instance if present, which should be restored after the render is done:\n *\n * ```js\n * const prev = setCurrentRenderingInstance(i)\n * // ...render\n * setCurrentRenderingInstance(prev)\n * ```\n */\nfunction setCurrentRenderingInstance$1(instance) {\n    const prev = currentRenderingInstance;\n    currentRenderingInstance = instance;\n    currentScopeId = (instance && instance.type.__scopeId) || null;\n    return prev;\n}\n/**\n * Wrap a slot function to memoize current rendering instance\n * @private compiler helper\n */\nfunction withCtx(fn, ctx = currentRenderingInstance, isNonScopedSlot // false only\n) {\n    if (!ctx)\n        return fn;\n    // already normalized\n    if (fn._n) {\n        return fn;\n    }\n    const renderFnWithContext = (...args) => {\n        // If a user calls a compiled slot inside a template expression (#1745), it\n        // can mess up block tracking, so by default we disable block tracking and\n        // force bail out when invoking a compiled slot (indicated by the ._d flag).\n        // This isn't necessary if rendering a compiled `<slot>`, so we flip the\n        // ._d flag off when invoking the wrapped fn inside `renderSlot`.\n        if (renderFnWithContext._d) {\n            setBlockTracking(-1);\n        }\n        const prevInstance = setCurrentRenderingInstance$1(ctx);\n        let res;\n        try {\n            res = fn(...args);\n        }\n        finally {\n            setCurrentRenderingInstance$1(prevInstance);\n            if (renderFnWithContext._d) {\n                setBlockTracking(1);\n            }\n        }\n        {\n            devtoolsComponentUpdated(ctx);\n        }\n        return res;\n    };\n    // mark normalized to avoid duplicated wrapping\n    renderFnWithContext._n = true;\n    // mark this as compiled by default\n    // this is used in vnode.ts -> normalizeChildren() to set the slot\n    // rendering flag.\n    renderFnWithContext._c = true;\n    // disable block tracking by default\n    renderFnWithContext._d = true;\n    return renderFnWithContext;\n}\n\n/**\n * dev only flag to track whether $attrs was used during render.\n * If $attrs was used during render then the warning for failed attrs\n * fallthrough can be suppressed.\n */\nlet accessedAttrs = false;\nfunction markAttrsAccessed() {\n    accessedAttrs = true;\n}\nfunction renderComponentRoot$1(instance) {\n    const { type: Component, vnode, proxy, withProxy, props, propsOptions: [propsOptions], slots, attrs, emit, render, renderCache, data, setupState, ctx, inheritAttrs } = instance;\n    let result;\n    let fallthroughAttrs;\n    const prev = setCurrentRenderingInstance$1(instance);\n    {\n        accessedAttrs = false;\n    }\n    try {\n        if (vnode.shapeFlag & 4 /* ShapeFlags.STATEFUL_COMPONENT */) {\n            // withProxy is a proxy with a different `has` trap only for\n            // runtime-compiled render functions using `with` block.\n            const proxyToUse = withProxy || proxy;\n            result = normalizeVNode$1(render.call(proxyToUse, proxyToUse, renderCache, props, setupState, data, ctx));\n            fallthroughAttrs = attrs;\n        }\n        else {\n            // functional\n            const render = Component;\n            // in dev, mark attrs accessed if optional props (attrs === props)\n            if (true && attrs === props) {\n                markAttrsAccessed();\n            }\n            result = normalizeVNode$1(render.length > 1\n                ? render(props, true\n                    ? {\n                        get attrs() {\n                            markAttrsAccessed();\n                            return attrs;\n                        },\n                        slots,\n                        emit\n                    }\n                    : { attrs, slots, emit })\n                : render(props, null /* we know it doesn't need it */));\n            fallthroughAttrs = Component.props\n                ? attrs\n                : getFunctionalFallthrough(attrs);\n        }\n    }\n    catch (err) {\n        handleError(err, instance, 1 /* ErrorCodes.RENDER_FUNCTION */);\n        result = createVNode(Comment);\n    }\n    // attr merging\n    // in dev mode, comments are preserved, and it's possible for a template\n    // to have comments along side the root element which makes it a fragment\n    let root = result;\n    let setRoot = undefined;\n    if (result.patchFlag > 0 &&\n        result.patchFlag & 2048 /* PatchFlags.DEV_ROOT_FRAGMENT */) {\n        [root, setRoot] = getChildRoot(result);\n    }\n    if (fallthroughAttrs && inheritAttrs !== false) {\n        const keys = Object.keys(fallthroughAttrs);\n        const { shapeFlag } = root;\n        if (keys.length) {\n            if (shapeFlag & (1 /* ShapeFlags.ELEMENT */ | 6 /* ShapeFlags.COMPONENT */)) {\n                if (propsOptions && keys.some(isModelListener)) {\n                    // If a v-model listener (onUpdate:xxx) has a corresponding declared\n                    // prop, it indicates this component expects to handle v-model and\n                    // it should not fallthrough.\n                    // related: #1543, #1643, #1989\n                    fallthroughAttrs = filterModelListeners(fallthroughAttrs, propsOptions);\n                }\n                root = cloneVNode(root, fallthroughAttrs);\n            }\n            else if (!accessedAttrs && root.type !== Comment) {\n                const allAttrs = Object.keys(attrs);\n                const eventAttrs = [];\n                const extraAttrs = [];\n                for (let i = 0, l = allAttrs.length; i < l; i++) {\n                    const key = allAttrs[i];\n                    if (isOn(key)) {\n                        // ignore v-model handlers when they fail to fallthrough\n                        if (!isModelListener(key)) {\n                            // remove `on`, lowercase first letter to reflect event casing\n                            // accurately\n                            eventAttrs.push(key[2].toLowerCase() + key.slice(3));\n                        }\n                    }\n                    else {\n                        extraAttrs.push(key);\n                    }\n                }\n                if (extraAttrs.length) {\n                    warn(`Extraneous non-props attributes (` +\n                        `${extraAttrs.join(', ')}) ` +\n                        `were passed to component but could not be automatically inherited ` +\n                        `because component renders fragment or text root nodes.`);\n                }\n                if (eventAttrs.length) {\n                    warn(`Extraneous non-emits event listeners (` +\n                        `${eventAttrs.join(', ')}) ` +\n                        `were passed to component but could not be automatically inherited ` +\n                        `because component renders fragment or text root nodes. ` +\n                        `If the listener is intended to be a component custom event listener only, ` +\n                        `declare it using the \"emits\" option.`);\n                }\n            }\n        }\n    }\n    // inherit directives\n    if (vnode.dirs) {\n        if (!isElementRoot(root)) {\n            warn(`Runtime directive used on component with non-element root node. ` +\n                `The directives will not function as intended.`);\n        }\n        // clone before mutating since the root may be a hoisted vnode\n        root = cloneVNode(root);\n        root.dirs = root.dirs ? root.dirs.concat(vnode.dirs) : vnode.dirs;\n    }\n    // inherit transition data\n    if (vnode.transition) {\n        if (!isElementRoot(root)) {\n            warn(`Component inside <Transition> renders non-element root node ` +\n                `that cannot be animated.`);\n        }\n        root.transition = vnode.transition;\n    }\n    if (setRoot) {\n        setRoot(root);\n    }\n    else {\n        result = root;\n    }\n    setCurrentRenderingInstance$1(prev);\n    return result;\n}\n/**\n * dev only\n * In dev mode, template root level comments are rendered, which turns the\n * template into a fragment root, but we need to locate the single element\n * root for attrs and scope id processing.\n */\nconst getChildRoot = (vnode) => {\n    const rawChildren = vnode.children;\n    const dynamicChildren = vnode.dynamicChildren;\n    const childRoot = filterSingleRoot(rawChildren);\n    if (!childRoot) {\n        return [vnode, undefined];\n    }\n    const index = rawChildren.indexOf(childRoot);\n    const dynamicIndex = dynamicChildren ? dynamicChildren.indexOf(childRoot) : -1;\n    const setRoot = (updatedRoot) => {\n        rawChildren[index] = updatedRoot;\n        if (dynamicChildren) {\n            if (dynamicIndex > -1) {\n                dynamicChildren[dynamicIndex] = updatedRoot;\n            }\n            else if (updatedRoot.patchFlag > 0) {\n                vnode.dynamicChildren = [...dynamicChildren, updatedRoot];\n            }\n        }\n    };\n    return [normalizeVNode$1(childRoot), setRoot];\n};\nfunction filterSingleRoot(children) {\n    let singleRoot;\n    for (let i = 0; i < children.length; i++) {\n        const child = children[i];\n        if (isVNode$2(child)) {\n            // ignore user comment\n            if (child.type !== Comment || child.children === 'v-if') {\n                if (singleRoot) {\n                    // has more than 1 non-comment child, return now\n                    return;\n                }\n                else {\n                    singleRoot = child;\n                }\n            }\n        }\n        else {\n            return;\n        }\n    }\n    return singleRoot;\n}\nconst getFunctionalFallthrough = (attrs) => {\n    let res;\n    for (const key in attrs) {\n        if (key === 'class' || key === 'style' || isOn(key)) {\n            (res || (res = {}))[key] = attrs[key];\n        }\n    }\n    return res;\n};\nconst filterModelListeners = (attrs, props) => {\n    const res = {};\n    for (const key in attrs) {\n        if (!isModelListener(key) || !(key.slice(9) in props)) {\n            res[key] = attrs[key];\n        }\n    }\n    return res;\n};\nconst isElementRoot = (vnode) => {\n    return (vnode.shapeFlag & (6 /* ShapeFlags.COMPONENT */ | 1 /* ShapeFlags.ELEMENT */) ||\n        vnode.type === Comment // potential v-if branch switch\n    );\n};\nfunction shouldUpdateComponent(prevVNode, nextVNode, optimized) {\n    const { props: prevProps, children: prevChildren, component } = prevVNode;\n    const { props: nextProps, children: nextChildren, patchFlag } = nextVNode;\n    const emits = component.emitsOptions;\n    // Parent component's render function was hot-updated. Since this may have\n    // caused the child component's slots content to have changed, we need to\n    // force the child to update as well.\n    if ((prevChildren || nextChildren) && isHmrUpdating) {\n        return true;\n    }\n    // force child update for runtime directive or transition on component vnode.\n    if (nextVNode.dirs || nextVNode.transition) {\n        return true;\n    }\n    if (optimized && patchFlag >= 0) {\n        if (patchFlag & 1024 /* PatchFlags.DYNAMIC_SLOTS */) {\n            // slot content that references values that might have changed,\n            // e.g. in a v-for\n            return true;\n        }\n        if (patchFlag & 16 /* PatchFlags.FULL_PROPS */) {\n            if (!prevProps) {\n                return !!nextProps;\n            }\n            // presence of this flag indicates props are always non-null\n            return hasPropsChanged(prevProps, nextProps, emits);\n        }\n        else if (patchFlag & 8 /* PatchFlags.PROPS */) {\n            const dynamicProps = nextVNode.dynamicProps;\n            for (let i = 0; i < dynamicProps.length; i++) {\n                const key = dynamicProps[i];\n                if (nextProps[key] !== prevProps[key] &&\n                    !isEmitListener(emits, key)) {\n                    return true;\n                }\n            }\n        }\n    }\n    else {\n        // this path is only taken by manually written render functions\n        // so presence of any children leads to a forced update\n        if (prevChildren || nextChildren) {\n            if (!nextChildren || !nextChildren.$stable) {\n                return true;\n            }\n        }\n        if (prevProps === nextProps) {\n            return false;\n        }\n        if (!prevProps) {\n            return !!nextProps;\n        }\n        if (!nextProps) {\n            return true;\n        }\n        return hasPropsChanged(prevProps, nextProps, emits);\n    }\n    return false;\n}\nfunction hasPropsChanged(prevProps, nextProps, emitsOptions) {\n    const nextKeys = Object.keys(nextProps);\n    if (nextKeys.length !== Object.keys(prevProps).length) {\n        return true;\n    }\n    for (let i = 0; i < nextKeys.length; i++) {\n        const key = nextKeys[i];\n        if (nextProps[key] !== prevProps[key] &&\n            !isEmitListener(emitsOptions, key)) {\n            return true;\n        }\n    }\n    return false;\n}\nfunction updateHOCHostEl({ vnode, parent }, el // HostNode\n) {\n    while (parent && parent.subTree === vnode) {\n        (vnode = parent.vnode).el = el;\n        parent = parent.parent;\n    }\n}\n\nconst isSuspense = (type) => type.__isSuspense;\nfunction queueEffectWithSuspense(fn, suspense) {\n    if (suspense && suspense.pendingBranch) {\n        if (isArray(fn)) {\n            suspense.effects.push(...fn);\n        }\n        else {\n            suspense.effects.push(fn);\n        }\n    }\n    else {\n        queuePostFlushCb(fn);\n    }\n}\n\nfunction provide(key, value) {\n    if (!currentInstance) {\n        {\n            warn(`provide() can only be used inside setup().`);\n        }\n    }\n    else {\n        let provides = currentInstance.provides;\n        // by default an instance inherits its parent's provides object\n        // but when it needs to provide values of its own, it creates its\n        // own provides object using parent provides object as prototype.\n        // this way in `inject` we can simply look up injections from direct\n        // parent and let the prototype chain do the work.\n        const parentProvides = currentInstance.parent && currentInstance.parent.provides;\n        if (parentProvides === provides) {\n            provides = currentInstance.provides = Object.create(parentProvides);\n        }\n        // TS doesn't allow symbol as index type\n        provides[key] = value;\n    }\n}\nfunction inject(key, defaultValue, treatDefaultAsFactory = false) {\n    // fallback to `currentRenderingInstance` so that this can be called in\n    // a functional component\n    const instance = currentInstance || currentRenderingInstance;\n    if (instance) {\n        // #2400\n        // to support `app.use` plugins,\n        // fallback to appContext's `provides` if the instance is at root\n        const provides = instance.parent == null\n            ? instance.vnode.appContext && instance.vnode.appContext.provides\n            : instance.parent.provides;\n        if (provides && key in provides) {\n            // TS doesn't allow symbol as index type\n            return provides[key];\n        }\n        else if (arguments.length > 1) {\n            return treatDefaultAsFactory && isFunction(defaultValue)\n                ? defaultValue.call(instance.proxy)\n                : defaultValue;\n        }\n        else {\n            warn(`injection \"${String(key)}\" not found.`);\n        }\n    }\n    else {\n        warn(`inject() can only be used inside setup() or functional components.`);\n    }\n}\n\n// initial value for watchers to trigger on undefined initial values\nconst INITIAL_WATCHER_VALUE = {};\n// implementation\nfunction watch(source, cb, options) {\n    if (!isFunction(cb)) {\n        warn(`\\`watch(fn, options?)\\` signature has been moved to a separate API. ` +\n            `Use \\`watchEffect(fn, options?)\\` instead. \\`watch\\` now only ` +\n            `supports \\`watch(source, cb, options?) signature.`);\n    }\n    return doWatch(source, cb, options);\n}\nfunction doWatch(source, cb, { immediate, deep, flush, onTrack, onTrigger } = EMPTY_OBJ) {\n    if (!cb) {\n        if (immediate !== undefined) {\n            warn(`watch() \"immediate\" option is only respected when using the ` +\n                `watch(source, callback, options?) signature.`);\n        }\n        if (deep !== undefined) {\n            warn(`watch() \"deep\" option is only respected when using the ` +\n                `watch(source, callback, options?) signature.`);\n        }\n    }\n    const warnInvalidSource = (s) => {\n        warn(`Invalid watch source: `, s, `A watch source can only be a getter/effect function, a ref, ` +\n            `a reactive object, or an array of these types.`);\n    };\n    const instance = getCurrentScope() === (currentInstance === null || currentInstance === void 0 ? void 0 : currentInstance.scope) ? currentInstance : null;\n    // const instance = currentInstance\n    let getter;\n    let forceTrigger = false;\n    let isMultiSource = false;\n    if (isRef(source)) {\n        getter = () => source.value;\n        forceTrigger = isShallow(source);\n    }\n    else if (isReactive(source)) {\n        getter = () => source;\n        deep = true;\n    }\n    else if (isArray(source)) {\n        isMultiSource = true;\n        forceTrigger = source.some(s => isReactive(s) || isShallow(s));\n        getter = () => source.map(s => {\n            if (isRef(s)) {\n                return s.value;\n            }\n            else if (isReactive(s)) {\n                return traverse(s);\n            }\n            else if (isFunction(s)) {\n                return callWithErrorHandling(s, instance, 2 /* ErrorCodes.WATCH_GETTER */);\n            }\n            else {\n                warnInvalidSource(s);\n            }\n        });\n    }\n    else if (isFunction(source)) {\n        if (cb) {\n            // getter with cb\n            getter = () => callWithErrorHandling(source, instance, 2 /* ErrorCodes.WATCH_GETTER */);\n        }\n        else {\n            // no cb -> simple effect\n            getter = () => {\n                if (instance && instance.isUnmounted) {\n                    return;\n                }\n                if (cleanup) {\n                    cleanup();\n                }\n                return callWithAsyncErrorHandling(source, instance, 3 /* ErrorCodes.WATCH_CALLBACK */, [onCleanup]);\n            };\n        }\n    }\n    else {\n        getter = NOOP;\n        warnInvalidSource(source);\n    }\n    if (cb && deep) {\n        const baseGetter = getter;\n        getter = () => traverse(baseGetter());\n    }\n    let cleanup;\n    let onCleanup = (fn) => {\n        cleanup = effect.onStop = () => {\n            callWithErrorHandling(fn, instance, 4 /* ErrorCodes.WATCH_CLEANUP */);\n        };\n    };\n    // in SSR there is no need to setup an actual effect, and it should be noop\n    // unless it's eager or sync flush\n    let ssrCleanup;\n    if (isInSSRComponentSetup) {\n        // we will also not call the invalidate callback (+ runner is not set up)\n        onCleanup = NOOP;\n        if (!cb) {\n            getter();\n        }\n        else if (immediate) {\n            callWithAsyncErrorHandling(cb, instance, 3 /* ErrorCodes.WATCH_CALLBACK */, [\n                getter(),\n                isMultiSource ? [] : undefined,\n                onCleanup\n            ]);\n        }\n        if (flush === 'sync') {\n            const ctx = useSSRContext();\n            ssrCleanup = ctx.__watcherHandles || (ctx.__watcherHandles = []);\n        }\n        else {\n            return NOOP;\n        }\n    }\n    let oldValue = isMultiSource\n        ? new Array(source.length).fill(INITIAL_WATCHER_VALUE)\n        : INITIAL_WATCHER_VALUE;\n    const job = () => {\n        if (!effect.active) {\n            return;\n        }\n        if (cb) {\n            // watch(source, cb)\n            const newValue = effect.run();\n            if (deep ||\n                forceTrigger ||\n                (isMultiSource\n                    ? newValue.some((v, i) => hasChanged(v, oldValue[i]))\n                    : hasChanged(newValue, oldValue)) ||\n                (false  )) {\n                // cleanup before running cb again\n                if (cleanup) {\n                    cleanup();\n                }\n                callWithAsyncErrorHandling(cb, instance, 3 /* ErrorCodes.WATCH_CALLBACK */, [\n                    newValue,\n                    // pass undefined as the old value when it's changed for the first time\n                    oldValue === INITIAL_WATCHER_VALUE\n                        ? undefined\n                        : isMultiSource && oldValue[0] === INITIAL_WATCHER_VALUE\n                            ? []\n                            : oldValue,\n                    onCleanup\n                ]);\n                oldValue = newValue;\n            }\n        }\n        else {\n            // watchEffect\n            effect.run();\n        }\n    };\n    // important: mark the job as a watcher callback so that scheduler knows\n    // it is allowed to self-trigger (#1727)\n    job.allowRecurse = !!cb;\n    let scheduler;\n    if (flush === 'sync') {\n        scheduler = job; // the scheduler function gets called directly\n    }\n    else if (flush === 'post') {\n        scheduler = () => queuePostRenderEffect(job, instance && instance.suspense);\n    }\n    else {\n        // default: 'pre'\n        job.pre = true;\n        if (instance)\n            job.id = instance.uid;\n        scheduler = () => queueJob(job);\n    }\n    const effect = new ReactiveEffect(getter, scheduler);\n    {\n        effect.onTrack = onTrack;\n        effect.onTrigger = onTrigger;\n    }\n    // initial run\n    if (cb) {\n        if (immediate) {\n            job();\n        }\n        else {\n            oldValue = effect.run();\n        }\n    }\n    else if (flush === 'post') {\n        queuePostRenderEffect(effect.run.bind(effect), instance && instance.suspense);\n    }\n    else {\n        effect.run();\n    }\n    const unwatch = () => {\n        effect.stop();\n        if (instance && instance.scope) {\n            remove(instance.scope.effects, effect);\n        }\n    };\n    if (ssrCleanup)\n        ssrCleanup.push(unwatch);\n    return unwatch;\n}\n// this.$watch\nfunction instanceWatch(source, value, options) {\n    const publicThis = this.proxy;\n    const getter = isString(source)\n        ? source.includes('.')\n            ? createPathGetter(publicThis, source)\n            : () => publicThis[source]\n        : source.bind(publicThis, publicThis);\n    let cb;\n    if (isFunction(value)) {\n        cb = value;\n    }\n    else {\n        cb = value.handler;\n        options = value;\n    }\n    const cur = currentInstance;\n    setCurrentInstance(this);\n    const res = doWatch(getter, cb.bind(publicThis), options);\n    if (cur) {\n        setCurrentInstance(cur);\n    }\n    else {\n        unsetCurrentInstance();\n    }\n    return res;\n}\nfunction createPathGetter(ctx, path) {\n    const segments = path.split('.');\n    return () => {\n        let cur = ctx;\n        for (let i = 0; i < segments.length && cur; i++) {\n            cur = cur[segments[i]];\n        }\n        return cur;\n    };\n}\nfunction traverse(value, seen) {\n    if (!isObject(value) || value[\"__v_skip\" /* ReactiveFlags.SKIP */]) {\n        return value;\n    }\n    seen = seen || new Set();\n    if (seen.has(value)) {\n        return value;\n    }\n    seen.add(value);\n    if (isRef(value)) {\n        traverse(value.value, seen);\n    }\n    else if (isArray(value)) {\n        for (let i = 0; i < value.length; i++) {\n            traverse(value[i], seen);\n        }\n    }\n    else if (isSet(value) || isMap(value)) {\n        value.forEach((v) => {\n            traverse(v, seen);\n        });\n    }\n    else if (isPlainObject(value)) {\n        for (const key in value) {\n            traverse(value[key], seen);\n        }\n    }\n    return value;\n}\n\nconst isAsyncWrapper = (i) => !!i.type.__asyncLoader;\n\nconst isKeepAlive = (vnode) => vnode.type.__isKeepAlive;\nfunction onActivated(hook, target) {\n    registerKeepAliveHook(hook, \"a\" /* LifecycleHooks.ACTIVATED */, target);\n}\nfunction onDeactivated(hook, target) {\n    registerKeepAliveHook(hook, \"da\" /* LifecycleHooks.DEACTIVATED */, target);\n}\nfunction registerKeepAliveHook(hook, type, target = currentInstance) {\n    // cache the deactivate branch check wrapper for injected hooks so the same\n    // hook can be properly deduped by the scheduler. \"__wdc\" stands for \"with\n    // deactivation check\".\n    const wrappedHook = hook.__wdc ||\n        (hook.__wdc = () => {\n            // only fire the hook if the target instance is NOT in a deactivated branch.\n            let current = target;\n            while (current) {\n                if (current.isDeactivated) {\n                    return;\n                }\n                current = current.parent;\n            }\n            return hook();\n        });\n    injectHook(type, wrappedHook, target);\n    // In addition to registering it on the target instance, we walk up the parent\n    // chain and register it on all ancestor instances that are keep-alive roots.\n    // This avoids the need to walk the entire component tree when invoking these\n    // hooks, and more importantly, avoids the need to track child components in\n    // arrays.\n    if (target) {\n        let current = target.parent;\n        while (current && current.parent) {\n            if (isKeepAlive(current.parent.vnode)) {\n                injectToKeepAliveRoot(wrappedHook, type, target, current);\n            }\n            current = current.parent;\n        }\n    }\n}\nfunction injectToKeepAliveRoot(hook, type, target, keepAliveRoot) {\n    // injectHook wraps the original for error handling, so make sure to remove\n    // the wrapped version.\n    const injected = injectHook(type, hook, keepAliveRoot, true /* prepend */);\n    onUnmounted(() => {\n        remove(keepAliveRoot[type], injected);\n    }, target);\n}\n\nfunction injectHook(type, hook, target = currentInstance, prepend = false) {\n    if (target) {\n        const hooks = target[type] || (target[type] = []);\n        // cache the error handling wrapper for injected hooks so the same hook\n        // can be properly deduped by the scheduler. \"__weh\" stands for \"with error\n        // handling\".\n        const wrappedHook = hook.__weh ||\n            (hook.__weh = (...args) => {\n                if (target.isUnmounted) {\n                    return;\n                }\n                // disable tracking inside all lifecycle hooks\n                // since they can potentially be called inside effects.\n                pauseTracking();\n                // Set currentInstance during hook invocation.\n                // This assumes the hook does not synchronously trigger other hooks, which\n                // can only be false when the user does something really funky.\n                setCurrentInstance(target);\n                const res = callWithAsyncErrorHandling(hook, target, type, args);\n                unsetCurrentInstance();\n                resetTracking();\n                return res;\n            });\n        if (prepend) {\n            hooks.unshift(wrappedHook);\n        }\n        else {\n            hooks.push(wrappedHook);\n        }\n        return wrappedHook;\n    }\n    else {\n        const apiName = toHandlerKey(ErrorTypeStrings[type].replace(/ hook$/, ''));\n        warn(`${apiName} is called when there is no active component instance to be ` +\n            `associated with. ` +\n            `Lifecycle injection APIs can only be used during execution of setup().` +\n            (` If you are using async setup(), make sure to register lifecycle ` +\n                    `hooks before the first await statement.`\n                ));\n    }\n}\nconst createHook = (lifecycle) => (hook, target = currentInstance) => \n// post-create lifecycle registrations are noops during SSR (except for serverPrefetch)\n(!isInSSRComponentSetup || lifecycle === \"sp\" /* LifecycleHooks.SERVER_PREFETCH */) &&\n    injectHook(lifecycle, (...args) => hook(...args), target);\nconst onBeforeMount = createHook(\"bm\" /* LifecycleHooks.BEFORE_MOUNT */);\nconst onMounted = createHook(\"m\" /* LifecycleHooks.MOUNTED */);\nconst onBeforeUpdate = createHook(\"bu\" /* LifecycleHooks.BEFORE_UPDATE */);\nconst onUpdated = createHook(\"u\" /* LifecycleHooks.UPDATED */);\nconst onBeforeUnmount = createHook(\"bum\" /* LifecycleHooks.BEFORE_UNMOUNT */);\nconst onUnmounted = createHook(\"um\" /* LifecycleHooks.UNMOUNTED */);\nconst onServerPrefetch = createHook(\"sp\" /* LifecycleHooks.SERVER_PREFETCH */);\nconst onRenderTriggered = createHook(\"rtg\" /* LifecycleHooks.RENDER_TRIGGERED */);\nconst onRenderTracked = createHook(\"rtc\" /* LifecycleHooks.RENDER_TRACKED */);\nfunction onErrorCaptured(hook, target = currentInstance) {\n    injectHook(\"ec\" /* LifecycleHooks.ERROR_CAPTURED */, hook, target);\n}\n\n/**\nRuntime helper for applying directives to a vnode. Example usage:\n\nconst comp = resolveComponent('comp')\nconst foo = resolveDirective('foo')\nconst bar = resolveDirective('bar')\n\nreturn withDirectives(h(comp), [\n  [foo, this.x],\n  [bar, this.y]\n])\n*/\nfunction validateDirectiveName(name) {\n    if (isBuiltInDirective(name)) {\n        warn('Do not use built-in directive ids as custom directive id: ' + name);\n    }\n}\nfunction invokeDirectiveHook(vnode, prevVNode, instance, name) {\n    const bindings = vnode.dirs;\n    const oldBindings = prevVNode && prevVNode.dirs;\n    for (let i = 0; i < bindings.length; i++) {\n        const binding = bindings[i];\n        if (oldBindings) {\n            binding.oldValue = oldBindings[i].value;\n        }\n        let hook = binding.dir[name];\n        if (hook) {\n            // disable tracking inside all lifecycle hooks\n            // since they can potentially be called inside effects.\n            pauseTracking();\n            callWithAsyncErrorHandling(hook, instance, 8 /* ErrorCodes.DIRECTIVE_HOOK */, [\n                vnode.el,\n                binding,\n                vnode,\n                prevVNode\n            ]);\n            resetTracking();\n        }\n    }\n}\n\nconst NULL_DYNAMIC_COMPONENT = Symbol();\n\n/**\n * #2437 In Vue 3, functional components do not have a public instance proxy but\n * they exist in the internal parent chain. For code that relies on traversing\n * public $parent chains, skip functional ones and go to the parent instead.\n */\nconst getPublicInstance = (i) => {\n    if (!i)\n        return null;\n    if (isStatefulComponent(i))\n        return getExposeProxy(i) || i.proxy;\n    return getPublicInstance(i.parent);\n};\nconst publicPropertiesMap = \n// Move PURE marker to new line to workaround compiler discarding it\n// due to type annotation\n/*#__PURE__*/ extend(Object.create(null), {\n    $: i => i,\n    $el: i => i.vnode.el,\n    $data: i => i.data,\n    $props: i => (shallowReadonly(i.props) ),\n    $attrs: i => (shallowReadonly(i.attrs) ),\n    $slots: i => (shallowReadonly(i.slots) ),\n    $refs: i => (shallowReadonly(i.refs) ),\n    $parent: i => getPublicInstance(i.parent),\n    $root: i => getPublicInstance(i.root),\n    $emit: i => i.emit,\n    $options: i => (resolveMergedOptions(i) ),\n    $forceUpdate: i => i.f || (i.f = () => queueJob(i.update)),\n    $nextTick: i => i.n || (i.n = nextTick.bind(i.proxy)),\n    $watch: i => (instanceWatch.bind(i) )\n});\nconst isReservedPrefix = (key) => key === '_' || key === '$';\nconst hasSetupBinding = (state, key) => state !== EMPTY_OBJ && !state.__isScriptSetup && hasOwn(state, key);\nconst PublicInstanceProxyHandlers = {\n    get({ _: instance }, key) {\n        const { ctx, setupState, data, props, accessCache, type, appContext } = instance;\n        // for internal formatters to know that this is a Vue instance\n        if (key === '__isVue') {\n            return true;\n        }\n        // data / props / ctx\n        // This getter gets called for every property access on the render context\n        // during render and is a major hotspot. The most expensive part of this\n        // is the multiple hasOwn() calls. It's much faster to do a simple property\n        // access on a plain object, so we use an accessCache object (with null\n        // prototype) to memoize what access type a key corresponds to.\n        let normalizedProps;\n        if (key[0] !== '$') {\n            const n = accessCache[key];\n            if (n !== undefined) {\n                switch (n) {\n                    case 1 /* AccessTypes.SETUP */:\n                        return setupState[key];\n                    case 2 /* AccessTypes.DATA */:\n                        return data[key];\n                    case 4 /* AccessTypes.CONTEXT */:\n                        return ctx[key];\n                    case 3 /* AccessTypes.PROPS */:\n                        return props[key];\n                    // default: just fallthrough\n                }\n            }\n            else if (hasSetupBinding(setupState, key)) {\n                accessCache[key] = 1 /* AccessTypes.SETUP */;\n                return setupState[key];\n            }\n            else if (data !== EMPTY_OBJ && hasOwn(data, key)) {\n                accessCache[key] = 2 /* AccessTypes.DATA */;\n                return data[key];\n            }\n            else if (\n            // only cache other properties when instance has declared (thus stable)\n            // props\n            (normalizedProps = instance.propsOptions[0]) &&\n                hasOwn(normalizedProps, key)) {\n                accessCache[key] = 3 /* AccessTypes.PROPS */;\n                return props[key];\n            }\n            else if (ctx !== EMPTY_OBJ && hasOwn(ctx, key)) {\n                accessCache[key] = 4 /* AccessTypes.CONTEXT */;\n                return ctx[key];\n            }\n            else if (shouldCacheAccess) {\n                accessCache[key] = 0 /* AccessTypes.OTHER */;\n            }\n        }\n        const publicGetter = publicPropertiesMap[key];\n        let cssModule, globalProperties;\n        // public $xxx properties\n        if (publicGetter) {\n            if (key === '$attrs') {\n                track(instance, \"get\" /* TrackOpTypes.GET */, key);\n                markAttrsAccessed();\n            }\n            return publicGetter(instance);\n        }\n        else if (\n        // css module (injected by vue-loader)\n        (cssModule = type.__cssModules) &&\n            (cssModule = cssModule[key])) {\n            return cssModule;\n        }\n        else if (ctx !== EMPTY_OBJ && hasOwn(ctx, key)) {\n            // user may set custom properties to `this` that start with `$`\n            accessCache[key] = 4 /* AccessTypes.CONTEXT */;\n            return ctx[key];\n        }\n        else if (\n        // global properties\n        ((globalProperties = appContext.config.globalProperties),\n            hasOwn(globalProperties, key))) {\n            {\n                return globalProperties[key];\n            }\n        }\n        else if (currentRenderingInstance &&\n            (!isString(key) ||\n                // #1091 avoid internal isRef/isVNode checks on component instance leading\n                // to infinite warning loop\n                key.indexOf('__v') !== 0)) {\n            if (data !== EMPTY_OBJ && isReservedPrefix(key[0]) && hasOwn(data, key)) {\n                warn(`Property ${JSON.stringify(key)} must be accessed via $data because it starts with a reserved ` +\n                    `character (\"$\" or \"_\") and is not proxied on the render context.`);\n            }\n            else if (instance === currentRenderingInstance) {\n                warn(`Property ${JSON.stringify(key)} was accessed during render ` +\n                    `but is not defined on instance.`);\n            }\n        }\n    },\n    set({ _: instance }, key, value) {\n        const { data, setupState, ctx } = instance;\n        if (hasSetupBinding(setupState, key)) {\n            setupState[key] = value;\n            return true;\n        }\n        else if (setupState.__isScriptSetup &&\n            hasOwn(setupState, key)) {\n            warn(`Cannot mutate <script setup> binding \"${key}\" from Options API.`);\n            return false;\n        }\n        else if (data !== EMPTY_OBJ && hasOwn(data, key)) {\n            data[key] = value;\n            return true;\n        }\n        else if (hasOwn(instance.props, key)) {\n            warn(`Attempting to mutate prop \"${key}\". Props are readonly.`);\n            return false;\n        }\n        if (key[0] === '$' && key.slice(1) in instance) {\n            warn(`Attempting to mutate public property \"${key}\". ` +\n                    `Properties starting with $ are reserved and readonly.`);\n            return false;\n        }\n        else {\n            if (key in instance.appContext.config.globalProperties) {\n                Object.defineProperty(ctx, key, {\n                    enumerable: true,\n                    configurable: true,\n                    value\n                });\n            }\n            else {\n                ctx[key] = value;\n            }\n        }\n        return true;\n    },\n    has({ _: { data, setupState, accessCache, ctx, appContext, propsOptions } }, key) {\n        let normalizedProps;\n        return (!!accessCache[key] ||\n            (data !== EMPTY_OBJ && hasOwn(data, key)) ||\n            hasSetupBinding(setupState, key) ||\n            ((normalizedProps = propsOptions[0]) && hasOwn(normalizedProps, key)) ||\n            hasOwn(ctx, key) ||\n            hasOwn(publicPropertiesMap, key) ||\n            hasOwn(appContext.config.globalProperties, key));\n    },\n    defineProperty(target, key, descriptor) {\n        if (descriptor.get != null) {\n            // invalidate key cache of a getter based property #5417\n            target._.accessCache[key] = 0;\n        }\n        else if (hasOwn(descriptor, 'value')) {\n            this.set(target, key, descriptor.value, null);\n        }\n        return Reflect.defineProperty(target, key, descriptor);\n    }\n};\n{\n    PublicInstanceProxyHandlers.ownKeys = (target) => {\n        warn(`Avoid app logic that relies on enumerating keys on a component instance. ` +\n            `The keys will be empty in production mode to avoid performance overhead.`);\n        return Reflect.ownKeys(target);\n    };\n}\n// dev only\n// In dev mode, the proxy target exposes the same properties as seen on `this`\n// for easier console inspection. In prod mode it will be an empty object so\n// these properties definitions can be skipped.\nfunction createDevRenderContext(instance) {\n    const target = {};\n    // expose internal instance for proxy handlers\n    Object.defineProperty(target, `_`, {\n        configurable: true,\n        enumerable: false,\n        get: () => instance\n    });\n    // expose public properties\n    Object.keys(publicPropertiesMap).forEach(key => {\n        Object.defineProperty(target, key, {\n            configurable: true,\n            enumerable: false,\n            get: () => publicPropertiesMap[key](instance),\n            // intercepted by the proxy so no need for implementation,\n            // but needed to prevent set errors\n            set: NOOP\n        });\n    });\n    return target;\n}\n// dev only\nfunction exposePropsOnRenderContext(instance) {\n    const { ctx, propsOptions: [propsOptions] } = instance;\n    if (propsOptions) {\n        Object.keys(propsOptions).forEach(key => {\n            Object.defineProperty(ctx, key, {\n                enumerable: true,\n                configurable: true,\n                get: () => instance.props[key],\n                set: NOOP\n            });\n        });\n    }\n}\n// dev only\nfunction exposeSetupStateOnRenderContext(instance) {\n    const { ctx, setupState } = instance;\n    Object.keys(toRaw(setupState)).forEach(key => {\n        if (!setupState.__isScriptSetup) {\n            if (isReservedPrefix(key[0])) {\n                warn(`setup() return property ${JSON.stringify(key)} should not start with \"$\" or \"_\" ` +\n                    `which are reserved prefixes for Vue internals.`);\n                return;\n            }\n            Object.defineProperty(ctx, key, {\n                enumerable: true,\n                configurable: true,\n                get: () => setupState[key],\n                set: NOOP\n            });\n        }\n    });\n}\n\nfunction createDuplicateChecker() {\n    const cache = Object.create(null);\n    return (type, key) => {\n        if (cache[key]) {\n            warn(`${type} property \"${key}\" is already defined in ${cache[key]}.`);\n        }\n        else {\n            cache[key] = type;\n        }\n    };\n}\nlet shouldCacheAccess = true;\nfunction applyOptions(instance) {\n    const options = resolveMergedOptions(instance);\n    const publicThis = instance.proxy;\n    const ctx = instance.ctx;\n    // do not cache property access on public proxy during state initialization\n    shouldCacheAccess = false;\n    // call beforeCreate first before accessing other options since\n    // the hook may mutate resolved options (#2791)\n    if (options.beforeCreate) {\n        callHook(options.beforeCreate, instance, \"bc\" /* LifecycleHooks.BEFORE_CREATE */);\n    }\n    const { \n    // state\n    data: dataOptions, computed: computedOptions, methods, watch: watchOptions, provide: provideOptions, inject: injectOptions, \n    // lifecycle\n    created, beforeMount, mounted, beforeUpdate, updated, activated, deactivated, beforeDestroy, beforeUnmount, destroyed, unmounted, render, renderTracked, renderTriggered, errorCaptured, serverPrefetch, \n    // public API\n    expose, inheritAttrs, \n    // assets\n    components, directives, filters } = options;\n    const checkDuplicateProperties = createDuplicateChecker() ;\n    {\n        const [propsOptions] = instance.propsOptions;\n        if (propsOptions) {\n            for (const key in propsOptions) {\n                checkDuplicateProperties(\"Props\" /* OptionTypes.PROPS */, key);\n            }\n        }\n    }\n    // options initialization order (to be consistent with Vue 2):\n    // - props (already done outside of this function)\n    // - inject\n    // - methods\n    // - data (deferred since it relies on `this` access)\n    // - computed\n    // - watch (deferred since it relies on `this` access)\n    if (injectOptions) {\n        resolveInjections(injectOptions, ctx, checkDuplicateProperties, instance.appContext.config.unwrapInjectedRef);\n    }\n    if (methods) {\n        for (const key in methods) {\n            const methodHandler = methods[key];\n            if (isFunction(methodHandler)) {\n                // In dev mode, we use the `createRenderContext` function to define\n                // methods to the proxy target, and those are read-only but\n                // reconfigurable, so it needs to be redefined here\n                {\n                    Object.defineProperty(ctx, key, {\n                        value: methodHandler.bind(publicThis),\n                        configurable: true,\n                        enumerable: true,\n                        writable: true\n                    });\n                }\n                {\n                    checkDuplicateProperties(\"Methods\" /* OptionTypes.METHODS */, key);\n                }\n            }\n            else {\n                warn(`Method \"${key}\" has type \"${typeof methodHandler}\" in the component definition. ` +\n                    `Did you reference the function correctly?`);\n            }\n        }\n    }\n    if (dataOptions) {\n        if (!isFunction(dataOptions)) {\n            warn(`The data option must be a function. ` +\n                `Plain object usage is no longer supported.`);\n        }\n        const data = dataOptions.call(publicThis, publicThis);\n        if (isPromise(data)) {\n            warn(`data() returned a Promise - note data() cannot be async; If you ` +\n                `intend to perform data fetching before component renders, use ` +\n                `async setup() + <Suspense>.`);\n        }\n        if (!isObject(data)) {\n            warn(`data() should return an object.`);\n        }\n        else {\n            instance.data = reactive(data);\n            {\n                for (const key in data) {\n                    checkDuplicateProperties(\"Data\" /* OptionTypes.DATA */, key);\n                    // expose data on ctx during dev\n                    if (!isReservedPrefix(key[0])) {\n                        Object.defineProperty(ctx, key, {\n                            configurable: true,\n                            enumerable: true,\n                            get: () => data[key],\n                            set: NOOP\n                        });\n                    }\n                }\n            }\n        }\n    }\n    // state initialization complete at this point - start caching access\n    shouldCacheAccess = true;\n    if (computedOptions) {\n        for (const key in computedOptions) {\n            const opt = computedOptions[key];\n            const get = isFunction(opt)\n                ? opt.bind(publicThis, publicThis)\n                : isFunction(opt.get)\n                    ? opt.get.bind(publicThis, publicThis)\n                    : NOOP;\n            if (get === NOOP) {\n                warn(`Computed property \"${key}\" has no getter.`);\n            }\n            const set = !isFunction(opt) && isFunction(opt.set)\n                ? opt.set.bind(publicThis)\n                : () => {\n                        warn(`Write operation failed: computed property \"${key}\" is readonly.`);\n                    }\n                    ;\n            const c = computed({\n                get,\n                set\n            });\n            Object.defineProperty(ctx, key, {\n                enumerable: true,\n                configurable: true,\n                get: () => c.value,\n                set: v => (c.value = v)\n            });\n            {\n                checkDuplicateProperties(\"Computed\" /* OptionTypes.COMPUTED */, key);\n            }\n        }\n    }\n    if (watchOptions) {\n        for (const key in watchOptions) {\n            createWatcher(watchOptions[key], ctx, publicThis, key);\n        }\n    }\n    if (provideOptions) {\n        const provides = isFunction(provideOptions)\n            ? provideOptions.call(publicThis)\n            : provideOptions;\n        Reflect.ownKeys(provides).forEach(key => {\n            provide(key, provides[key]);\n        });\n    }\n    if (created) {\n        callHook(created, instance, \"c\" /* LifecycleHooks.CREATED */);\n    }\n    function registerLifecycleHook(register, hook) {\n        if (isArray(hook)) {\n            hook.forEach(_hook => register(_hook.bind(publicThis)));\n        }\n        else if (hook) {\n            register(hook.bind(publicThis));\n        }\n    }\n    registerLifecycleHook(onBeforeMount, beforeMount);\n    registerLifecycleHook(onMounted, mounted);\n    registerLifecycleHook(onBeforeUpdate, beforeUpdate);\n    registerLifecycleHook(onUpdated, updated);\n    registerLifecycleHook(onActivated, activated);\n    registerLifecycleHook(onDeactivated, deactivated);\n    registerLifecycleHook(onErrorCaptured, errorCaptured);\n    registerLifecycleHook(onRenderTracked, renderTracked);\n    registerLifecycleHook(onRenderTriggered, renderTriggered);\n    registerLifecycleHook(onBeforeUnmount, beforeUnmount);\n    registerLifecycleHook(onUnmounted, unmounted);\n    registerLifecycleHook(onServerPrefetch, serverPrefetch);\n    if (isArray(expose)) {\n        if (expose.length) {\n            const exposed = instance.exposed || (instance.exposed = {});\n            expose.forEach(key => {\n                Object.defineProperty(exposed, key, {\n                    get: () => publicThis[key],\n                    set: val => (publicThis[key] = val)\n                });\n            });\n        }\n        else if (!instance.exposed) {\n            instance.exposed = {};\n        }\n    }\n    // options that are handled when creating the instance but also need to be\n    // applied from mixins\n    if (render && instance.render === NOOP) {\n        instance.render = render;\n    }\n    if (inheritAttrs != null) {\n        instance.inheritAttrs = inheritAttrs;\n    }\n    // asset options.\n    if (components)\n        instance.components = components;\n    if (directives)\n        instance.directives = directives;\n}\nfunction resolveInjections(injectOptions, ctx, checkDuplicateProperties = NOOP, unwrapRef = false) {\n    if (isArray(injectOptions)) {\n        injectOptions = normalizeInject(injectOptions);\n    }\n    for (const key in injectOptions) {\n        const opt = injectOptions[key];\n        let injected;\n        if (isObject(opt)) {\n            if ('default' in opt) {\n                injected = inject(opt.from || key, opt.default, true /* treat default function as factory */);\n            }\n            else {\n                injected = inject(opt.from || key);\n            }\n        }\n        else {\n            injected = inject(opt);\n        }\n        if (isRef(injected)) {\n            // TODO remove the check in 3.3\n            if (unwrapRef) {\n                Object.defineProperty(ctx, key, {\n                    enumerable: true,\n                    configurable: true,\n                    get: () => injected.value,\n                    set: v => (injected.value = v)\n                });\n            }\n            else {\n                {\n                    warn(`injected property \"${key}\" is a ref and will be auto-unwrapped ` +\n                        `and no longer needs \\`.value\\` in the next minor release. ` +\n                        `To opt-in to the new behavior now, ` +\n                        `set \\`app.config.unwrapInjectedRef = true\\` (this config is ` +\n                        `temporary and will not be needed in the future.)`);\n                }\n                ctx[key] = injected;\n            }\n        }\n        else {\n            ctx[key] = injected;\n        }\n        {\n            checkDuplicateProperties(\"Inject\" /* OptionTypes.INJECT */, key);\n        }\n    }\n}\nfunction callHook(hook, instance, type) {\n    callWithAsyncErrorHandling(isArray(hook)\n        ? hook.map(h => h.bind(instance.proxy))\n        : hook.bind(instance.proxy), instance, type);\n}\nfunction createWatcher(raw, ctx, publicThis, key) {\n    const getter = key.includes('.')\n        ? createPathGetter(publicThis, key)\n        : () => publicThis[key];\n    if (isString(raw)) {\n        const handler = ctx[raw];\n        if (isFunction(handler)) {\n            watch(getter, handler);\n        }\n        else {\n            warn(`Invalid watch handler specified by key \"${raw}\"`, handler);\n        }\n    }\n    else if (isFunction(raw)) {\n        watch(getter, raw.bind(publicThis));\n    }\n    else if (isObject(raw)) {\n        if (isArray(raw)) {\n            raw.forEach(r => createWatcher(r, ctx, publicThis, key));\n        }\n        else {\n            const handler = isFunction(raw.handler)\n                ? raw.handler.bind(publicThis)\n                : ctx[raw.handler];\n            if (isFunction(handler)) {\n                watch(getter, handler, raw);\n            }\n            else {\n                warn(`Invalid watch handler specified by key \"${raw.handler}\"`, handler);\n            }\n        }\n    }\n    else {\n        warn(`Invalid watch option: \"${key}\"`, raw);\n    }\n}\n/**\n * Resolve merged options and cache it on the component.\n * This is done only once per-component since the merging does not involve\n * instances.\n */\nfunction resolveMergedOptions(instance) {\n    const base = instance.type;\n    const { mixins, extends: extendsOptions } = base;\n    const { mixins: globalMixins, optionsCache: cache, config: { optionMergeStrategies } } = instance.appContext;\n    const cached = cache.get(base);\n    let resolved;\n    if (cached) {\n        resolved = cached;\n    }\n    else if (!globalMixins.length && !mixins && !extendsOptions) {\n        {\n            resolved = base;\n        }\n    }\n    else {\n        resolved = {};\n        if (globalMixins.length) {\n            globalMixins.forEach(m => mergeOptions(resolved, m, optionMergeStrategies, true));\n        }\n        mergeOptions(resolved, base, optionMergeStrategies);\n    }\n    if (isObject(base)) {\n        cache.set(base, resolved);\n    }\n    return resolved;\n}\nfunction mergeOptions(to, from, strats, asMixin = false) {\n    const { mixins, extends: extendsOptions } = from;\n    if (extendsOptions) {\n        mergeOptions(to, extendsOptions, strats, true);\n    }\n    if (mixins) {\n        mixins.forEach((m) => mergeOptions(to, m, strats, true));\n    }\n    for (const key in from) {\n        if (asMixin && key === 'expose') {\n            warn(`\"expose\" option is ignored when declared in mixins or extends. ` +\n                    `It should only be declared in the base component itself.`);\n        }\n        else {\n            const strat = internalOptionMergeStrats[key] || (strats && strats[key]);\n            to[key] = strat ? strat(to[key], from[key]) : from[key];\n        }\n    }\n    return to;\n}\nconst internalOptionMergeStrats = {\n    data: mergeDataFn,\n    props: mergeObjectOptions,\n    emits: mergeObjectOptions,\n    // objects\n    methods: mergeObjectOptions,\n    computed: mergeObjectOptions,\n    // lifecycle\n    beforeCreate: mergeAsArray,\n    created: mergeAsArray,\n    beforeMount: mergeAsArray,\n    mounted: mergeAsArray,\n    beforeUpdate: mergeAsArray,\n    updated: mergeAsArray,\n    beforeDestroy: mergeAsArray,\n    beforeUnmount: mergeAsArray,\n    destroyed: mergeAsArray,\n    unmounted: mergeAsArray,\n    activated: mergeAsArray,\n    deactivated: mergeAsArray,\n    errorCaptured: mergeAsArray,\n    serverPrefetch: mergeAsArray,\n    // assets\n    components: mergeObjectOptions,\n    directives: mergeObjectOptions,\n    // watch\n    watch: mergeWatchOptions,\n    // provide / inject\n    provide: mergeDataFn,\n    inject: mergeInject\n};\nfunction mergeDataFn(to, from) {\n    if (!from) {\n        return to;\n    }\n    if (!to) {\n        return from;\n    }\n    return function mergedDataFn() {\n        return (extend)(isFunction(to) ? to.call(this, this) : to, isFunction(from) ? from.call(this, this) : from);\n    };\n}\nfunction mergeInject(to, from) {\n    return mergeObjectOptions(normalizeInject(to), normalizeInject(from));\n}\nfunction normalizeInject(raw) {\n    if (isArray(raw)) {\n        const res = {};\n        for (let i = 0; i < raw.length; i++) {\n            res[raw[i]] = raw[i];\n        }\n        return res;\n    }\n    return raw;\n}\nfunction mergeAsArray(to, from) {\n    return to ? [...new Set([].concat(to, from))] : from;\n}\nfunction mergeObjectOptions(to, from) {\n    return to ? extend(extend(Object.create(null), to), from) : from;\n}\nfunction mergeWatchOptions(to, from) {\n    if (!to)\n        return from;\n    if (!from)\n        return to;\n    const merged = extend(Object.create(null), to);\n    for (const key in from) {\n        merged[key] = mergeAsArray(to[key], from[key]);\n    }\n    return merged;\n}\n\nfunction initProps(instance, rawProps, isStateful, // result of bitwise flag comparison\nisSSR = false) {\n    const props = {};\n    const attrs = {};\n    def(attrs, InternalObjectKey, 1);\n    instance.propsDefaults = Object.create(null);\n    setFullProps(instance, rawProps, props, attrs);\n    // ensure all declared prop keys are present\n    for (const key in instance.propsOptions[0]) {\n        if (!(key in props)) {\n            props[key] = undefined;\n        }\n    }\n    // validation\n    {\n        validateProps(rawProps || {}, props, instance);\n    }\n    if (isStateful) {\n        // stateful\n        instance.props = isSSR ? props : shallowReactive(props);\n    }\n    else {\n        if (!instance.type.props) {\n            // functional w/ optional props, props === attrs\n            instance.props = attrs;\n        }\n        else {\n            // functional w/ declared props\n            instance.props = props;\n        }\n    }\n    instance.attrs = attrs;\n}\nfunction isInHmrContext(instance) {\n    while (instance) {\n        if (instance.type.__hmrId)\n            return true;\n        instance = instance.parent;\n    }\n}\nfunction updateProps(instance, rawProps, rawPrevProps, optimized) {\n    const { props, attrs, vnode: { patchFlag } } = instance;\n    const rawCurrentProps = toRaw(props);\n    const [options] = instance.propsOptions;\n    let hasAttrsChanged = false;\n    if (\n    // always force full diff in dev\n    // - #1942 if hmr is enabled with sfc component\n    // - vite#872 non-sfc component used by sfc component\n    !(isInHmrContext(instance)) &&\n        (optimized || patchFlag > 0) &&\n        !(patchFlag & 16 /* PatchFlags.FULL_PROPS */)) {\n        if (patchFlag & 8 /* PatchFlags.PROPS */) {\n            // Compiler-generated props & no keys change, just set the updated\n            // the props.\n            const propsToUpdate = instance.vnode.dynamicProps;\n            for (let i = 0; i < propsToUpdate.length; i++) {\n                let key = propsToUpdate[i];\n                // skip if the prop key is a declared emit event listener\n                if (isEmitListener(instance.emitsOptions, key)) {\n                    continue;\n                }\n                // PROPS flag guarantees rawProps to be non-null\n                const value = rawProps[key];\n                if (options) {\n                    // attr / props separation was done on init and will be consistent\n                    // in this code path, so just check if attrs have it.\n                    if (hasOwn(attrs, key)) {\n                        if (value !== attrs[key]) {\n                            attrs[key] = value;\n                            hasAttrsChanged = true;\n                        }\n                    }\n                    else {\n                        const camelizedKey = camelize(key);\n                        props[camelizedKey] = resolvePropValue(options, rawCurrentProps, camelizedKey, value, instance, false /* isAbsent */);\n                    }\n                }\n                else {\n                    if (value !== attrs[key]) {\n                        attrs[key] = value;\n                        hasAttrsChanged = true;\n                    }\n                }\n            }\n        }\n    }\n    else {\n        // full props update.\n        if (setFullProps(instance, rawProps, props, attrs)) {\n            hasAttrsChanged = true;\n        }\n        // in case of dynamic props, check if we need to delete keys from\n        // the props object\n        let kebabKey;\n        for (const key in rawCurrentProps) {\n            if (!rawProps ||\n                // for camelCase\n                (!hasOwn(rawProps, key) &&\n                    // it's possible the original props was passed in as kebab-case\n                    // and converted to camelCase (#955)\n                    ((kebabKey = hyphenate(key)) === key || !hasOwn(rawProps, kebabKey)))) {\n                if (options) {\n                    if (rawPrevProps &&\n                        // for camelCase\n                        (rawPrevProps[key] !== undefined ||\n                            // for kebab-case\n                            rawPrevProps[kebabKey] !== undefined)) {\n                        props[key] = resolvePropValue(options, rawCurrentProps, key, undefined, instance, true /* isAbsent */);\n                    }\n                }\n                else {\n                    delete props[key];\n                }\n            }\n        }\n        // in the case of functional component w/o props declaration, props and\n        // attrs point to the same object so it should already have been updated.\n        if (attrs !== rawCurrentProps) {\n            for (const key in attrs) {\n                if (!rawProps ||\n                    (!hasOwn(rawProps, key) &&\n                        (!false ))) {\n                    delete attrs[key];\n                    hasAttrsChanged = true;\n                }\n            }\n        }\n    }\n    // trigger updates for $attrs in case it's used in component slots\n    if (hasAttrsChanged) {\n        trigger(instance, \"set\" /* TriggerOpTypes.SET */, '$attrs');\n    }\n    {\n        validateProps(rawProps || {}, props, instance);\n    }\n}\nfunction setFullProps(instance, rawProps, props, attrs) {\n    const [options, needCastKeys] = instance.propsOptions;\n    let hasAttrsChanged = false;\n    let rawCastValues;\n    if (rawProps) {\n        for (let key in rawProps) {\n            // key, ref are reserved and never passed down\n            if (isReservedProp(key)) {\n                continue;\n            }\n            const value = rawProps[key];\n            // prop option names are camelized during normalization, so to support\n            // kebab -> camel conversion here we need to camelize the key.\n            let camelKey;\n            if (options && hasOwn(options, (camelKey = camelize(key)))) {\n                if (!needCastKeys || !needCastKeys.includes(camelKey)) {\n                    props[camelKey] = value;\n                }\n                else {\n                    (rawCastValues || (rawCastValues = {}))[camelKey] = value;\n                }\n            }\n            else if (!isEmitListener(instance.emitsOptions, key)) {\n                if (!(key in attrs) || value !== attrs[key]) {\n                    attrs[key] = value;\n                    hasAttrsChanged = true;\n                }\n            }\n        }\n    }\n    if (needCastKeys) {\n        const rawCurrentProps = toRaw(props);\n        const castValues = rawCastValues || EMPTY_OBJ;\n        for (let i = 0; i < needCastKeys.length; i++) {\n            const key = needCastKeys[i];\n            props[key] = resolvePropValue(options, rawCurrentProps, key, castValues[key], instance, !hasOwn(castValues, key));\n        }\n    }\n    return hasAttrsChanged;\n}\nfunction resolvePropValue(options, props, key, value, instance, isAbsent) {\n    const opt = options[key];\n    if (opt != null) {\n        const hasDefault = hasOwn(opt, 'default');\n        // default values\n        if (hasDefault && value === undefined) {\n            const defaultValue = opt.default;\n            if (opt.type !== Function && isFunction(defaultValue)) {\n                const { propsDefaults } = instance;\n                if (key in propsDefaults) {\n                    value = propsDefaults[key];\n                }\n                else {\n                    setCurrentInstance(instance);\n                    value = propsDefaults[key] = defaultValue.call(null, props);\n                    unsetCurrentInstance();\n                }\n            }\n            else {\n                value = defaultValue;\n            }\n        }\n        // boolean casting\n        if (opt[0 /* BooleanFlags.shouldCast */]) {\n            if (isAbsent && !hasDefault) {\n                value = false;\n            }\n            else if (opt[1 /* BooleanFlags.shouldCastTrue */] &&\n                (value === '' || value === hyphenate(key))) {\n                value = true;\n            }\n        }\n    }\n    return value;\n}\nfunction normalizePropsOptions(comp, appContext, asMixin = false) {\n    const cache = appContext.propsCache;\n    const cached = cache.get(comp);\n    if (cached) {\n        return cached;\n    }\n    const raw = comp.props;\n    const normalized = {};\n    const needCastKeys = [];\n    // apply mixin/extends props\n    let hasExtends = false;\n    if (!isFunction(comp)) {\n        const extendProps = (raw) => {\n            hasExtends = true;\n            const [props, keys] = normalizePropsOptions(raw, appContext, true);\n            extend(normalized, props);\n            if (keys)\n                needCastKeys.push(...keys);\n        };\n        if (!asMixin && appContext.mixins.length) {\n            appContext.mixins.forEach(extendProps);\n        }\n        if (comp.extends) {\n            extendProps(comp.extends);\n        }\n        if (comp.mixins) {\n            comp.mixins.forEach(extendProps);\n        }\n    }\n    if (!raw && !hasExtends) {\n        if (isObject(comp)) {\n            cache.set(comp, EMPTY_ARR);\n        }\n        return EMPTY_ARR;\n    }\n    if (isArray(raw)) {\n        for (let i = 0; i < raw.length; i++) {\n            if (!isString(raw[i])) {\n                warn(`props must be strings when using array syntax.`, raw[i]);\n            }\n            const normalizedKey = camelize(raw[i]);\n            if (validatePropName(normalizedKey)) {\n                normalized[normalizedKey] = EMPTY_OBJ;\n            }\n        }\n    }\n    else if (raw) {\n        if (!isObject(raw)) {\n            warn(`invalid props options`, raw);\n        }\n        for (const key in raw) {\n            const normalizedKey = camelize(key);\n            if (validatePropName(normalizedKey)) {\n                const opt = raw[key];\n                const prop = (normalized[normalizedKey] =\n                    isArray(opt) || isFunction(opt) ? { type: opt } : { ...opt });\n                if (prop) {\n                    const booleanIndex = getTypeIndex(Boolean, prop.type);\n                    const stringIndex = getTypeIndex(String, prop.type);\n                    prop[0 /* BooleanFlags.shouldCast */] = booleanIndex > -1;\n                    prop[1 /* BooleanFlags.shouldCastTrue */] =\n                        stringIndex < 0 || booleanIndex < stringIndex;\n                    // if the prop needs boolean casting or default value\n                    if (booleanIndex > -1 || hasOwn(prop, 'default')) {\n                        needCastKeys.push(normalizedKey);\n                    }\n                }\n            }\n        }\n    }\n    const res = [normalized, needCastKeys];\n    if (isObject(comp)) {\n        cache.set(comp, res);\n    }\n    return res;\n}\nfunction validatePropName(key) {\n    if (key[0] !== '$') {\n        return true;\n    }\n    else {\n        warn(`Invalid prop name: \"${key}\" is a reserved property.`);\n    }\n    return false;\n}\n// use function string name to check type constructors\n// so that it works across vms / iframes.\nfunction getType(ctor) {\n    const match = ctor && ctor.toString().match(/^\\s*(function|class) (\\w+)/);\n    return match ? match[2] : ctor === null ? 'null' : '';\n}\nfunction isSameType(a, b) {\n    return getType(a) === getType(b);\n}\nfunction getTypeIndex(type, expectedTypes) {\n    if (isArray(expectedTypes)) {\n        return expectedTypes.findIndex(t => isSameType(t, type));\n    }\n    else if (isFunction(expectedTypes)) {\n        return isSameType(expectedTypes, type) ? 0 : -1;\n    }\n    return -1;\n}\n/**\n * dev only\n */\nfunction validateProps(rawProps, props, instance) {\n    const resolvedValues = toRaw(props);\n    const options = instance.propsOptions[0];\n    for (const key in options) {\n        let opt = options[key];\n        if (opt == null)\n            continue;\n        validateProp(key, resolvedValues[key], opt, !hasOwn(rawProps, key) && !hasOwn(rawProps, hyphenate(key)));\n    }\n}\n/**\n * dev only\n */\nfunction validateProp(name, value, prop, isAbsent) {\n    const { type, required, validator } = prop;\n    // required!\n    if (required && isAbsent) {\n        warn('Missing required prop: \"' + name + '\"');\n        return;\n    }\n    // missing but optional\n    if (value == null && !prop.required) {\n        return;\n    }\n    // type check\n    if (type != null && type !== true) {\n        let isValid = false;\n        const types = isArray(type) ? type : [type];\n        const expectedTypes = [];\n        // value is valid as long as one of the specified types match\n        for (let i = 0; i < types.length && !isValid; i++) {\n            const { valid, expectedType } = assertType(value, types[i]);\n            expectedTypes.push(expectedType || '');\n            isValid = valid;\n        }\n        if (!isValid) {\n            warn(getInvalidTypeMessage(name, value, expectedTypes));\n            return;\n        }\n    }\n    // custom validator\n    if (validator && !validator(value)) {\n        warn('Invalid prop: custom validator check failed for prop \"' + name + '\".');\n    }\n}\nconst isSimpleType = /*#__PURE__*/ makeMap('String,Number,Boolean,Function,Symbol,BigInt');\n/**\n * dev only\n */\nfunction assertType(value, type) {\n    let valid;\n    const expectedType = getType(type);\n    if (isSimpleType(expectedType)) {\n        const t = typeof value;\n        valid = t === expectedType.toLowerCase();\n        // for primitive wrapper objects\n        if (!valid && t === 'object') {\n            valid = value instanceof type;\n        }\n    }\n    else if (expectedType === 'Object') {\n        valid = isObject(value);\n    }\n    else if (expectedType === 'Array') {\n        valid = isArray(value);\n    }\n    else if (expectedType === 'null') {\n        valid = value === null;\n    }\n    else {\n        valid = value instanceof type;\n    }\n    return {\n        valid,\n        expectedType\n    };\n}\n/**\n * dev only\n */\nfunction getInvalidTypeMessage(name, value, expectedTypes) {\n    let message = `Invalid prop: type check failed for prop \"${name}\".` +\n        ` Expected ${expectedTypes.map(capitalize).join(' | ')}`;\n    const expectedType = expectedTypes[0];\n    const receivedType = toRawType(value);\n    const expectedValue = styleValue(value, expectedType);\n    const receivedValue = styleValue(value, receivedType);\n    // check if we need to specify expected value\n    if (expectedTypes.length === 1 &&\n        isExplicable(expectedType) &&\n        !isBoolean(expectedType, receivedType)) {\n        message += ` with value ${expectedValue}`;\n    }\n    message += `, got ${receivedType} `;\n    // check if we need to specify received value\n    if (isExplicable(receivedType)) {\n        message += `with value ${receivedValue}.`;\n    }\n    return message;\n}\n/**\n * dev only\n */\nfunction styleValue(value, type) {\n    if (type === 'String') {\n        return `\"${value}\"`;\n    }\n    else if (type === 'Number') {\n        return `${Number(value)}`;\n    }\n    else {\n        return `${value}`;\n    }\n}\n/**\n * dev only\n */\nfunction isExplicable(type) {\n    const explicitTypes = ['string', 'number', 'boolean'];\n    return explicitTypes.some(elem => type.toLowerCase() === elem);\n}\n/**\n * dev only\n */\nfunction isBoolean(...args) {\n    return args.some(elem => elem.toLowerCase() === 'boolean');\n}\n\nconst isInternalKey = (key) => key[0] === '_' || key === '$stable';\nconst normalizeSlotValue = (value) => isArray(value)\n    ? value.map(normalizeVNode$1)\n    : [normalizeVNode$1(value)];\nconst normalizeSlot = (key, rawSlot, ctx) => {\n    if (rawSlot._n) {\n        // already normalized - #5353\n        return rawSlot;\n    }\n    const normalized = withCtx((...args) => {\n        if (true && currentInstance) {\n            warn(`Slot \"${key}\" invoked outside of the render function: ` +\n                `this will not track dependencies used in the slot. ` +\n                `Invoke the slot function inside the render function instead.`);\n        }\n        return normalizeSlotValue(rawSlot(...args));\n    }, ctx);\n    normalized._c = false;\n    return normalized;\n};\nconst normalizeObjectSlots = (rawSlots, slots, instance) => {\n    const ctx = rawSlots._ctx;\n    for (const key in rawSlots) {\n        if (isInternalKey(key))\n            continue;\n        const value = rawSlots[key];\n        if (isFunction(value)) {\n            slots[key] = normalizeSlot(key, value, ctx);\n        }\n        else if (value != null) {\n            {\n                warn(`Non-function value encountered for slot \"${key}\". ` +\n                    `Prefer function slots for better performance.`);\n            }\n            const normalized = normalizeSlotValue(value);\n            slots[key] = () => normalized;\n        }\n    }\n};\nconst normalizeVNodeSlots = (instance, children) => {\n    if (!isKeepAlive(instance.vnode) &&\n        !(false )) {\n        warn(`Non-function value encountered for default slot. ` +\n            `Prefer function slots for better performance.`);\n    }\n    const normalized = normalizeSlotValue(children);\n    instance.slots.default = () => normalized;\n};\nconst initSlots = (instance, children) => {\n    if (instance.vnode.shapeFlag & 32 /* ShapeFlags.SLOTS_CHILDREN */) {\n        const type = children._;\n        if (type) {\n            // users can get the shallow readonly version of the slots object through `this.$slots`,\n            // we should avoid the proxy object polluting the slots of the internal instance\n            instance.slots = toRaw(children);\n            // make compiler marker non-enumerable\n            def(children, '_', type);\n        }\n        else {\n            normalizeObjectSlots(children, (instance.slots = {}));\n        }\n    }\n    else {\n        instance.slots = {};\n        if (children) {\n            normalizeVNodeSlots(instance, children);\n        }\n    }\n    def(instance.slots, InternalObjectKey, 1);\n};\nconst updateSlots = (instance, children, optimized) => {\n    const { vnode, slots } = instance;\n    let needDeletionCheck = true;\n    let deletionComparisonTarget = EMPTY_OBJ;\n    if (vnode.shapeFlag & 32 /* ShapeFlags.SLOTS_CHILDREN */) {\n        const type = children._;\n        if (type) {\n            // compiled slots.\n            if (isHmrUpdating) {\n                // Parent was HMR updated so slot content may have changed.\n                // force update slots and mark instance for hmr as well\n                extend(slots, children);\n            }\n            else if (optimized && type === 1 /* SlotFlags.STABLE */) {\n                // compiled AND stable.\n                // no need to update, and skip stale slots removal.\n                needDeletionCheck = false;\n            }\n            else {\n                // compiled but dynamic (v-if/v-for on slots) - update slots, but skip\n                // normalization.\n                extend(slots, children);\n                // #2893\n                // when rendering the optimized slots by manually written render function,\n                // we need to delete the `slots._` flag if necessary to make subsequent updates reliable,\n                // i.e. let the `renderSlot` create the bailed Fragment\n                if (!optimized && type === 1 /* SlotFlags.STABLE */) {\n                    delete slots._;\n                }\n            }\n        }\n        else {\n            needDeletionCheck = !children.$stable;\n            normalizeObjectSlots(children, slots);\n        }\n        deletionComparisonTarget = children;\n    }\n    else if (children) {\n        // non slot object children (direct value) passed to a component\n        normalizeVNodeSlots(instance, children);\n        deletionComparisonTarget = { default: 1 };\n    }\n    // delete stale slots\n    if (needDeletionCheck) {\n        for (const key in slots) {\n            if (!isInternalKey(key) && !(key in deletionComparisonTarget)) {\n                delete slots[key];\n            }\n        }\n    }\n};\n\nfunction createAppContext() {\n    return {\n        app: null,\n        config: {\n            isNativeTag: NO,\n            performance: false,\n            globalProperties: {},\n            optionMergeStrategies: {},\n            errorHandler: undefined,\n            warnHandler: undefined,\n            compilerOptions: {}\n        },\n        mixins: [],\n        components: {},\n        directives: {},\n        provides: Object.create(null),\n        optionsCache: new WeakMap(),\n        propsCache: new WeakMap(),\n        emitsCache: new WeakMap()\n    };\n}\nlet uid$1 = 0;\nfunction createAppAPI(render, hydrate) {\n    return function createApp(rootComponent, rootProps = null) {\n        if (!isFunction(rootComponent)) {\n            rootComponent = { ...rootComponent };\n        }\n        if (rootProps != null && !isObject(rootProps)) {\n            warn(`root props passed to app.mount() must be an object.`);\n            rootProps = null;\n        }\n        const context = createAppContext();\n        const installedPlugins = new Set();\n        let isMounted = false;\n        const app = (context.app = {\n            _uid: uid$1++,\n            _component: rootComponent,\n            _props: rootProps,\n            _container: null,\n            _context: context,\n            _instance: null,\n            version,\n            get config() {\n                return context.config;\n            },\n            set config(v) {\n                {\n                    warn(`app.config cannot be replaced. Modify individual options instead.`);\n                }\n            },\n            use(plugin, ...options) {\n                if (installedPlugins.has(plugin)) {\n                    warn(`Plugin has already been applied to target app.`);\n                }\n                else if (plugin && isFunction(plugin.install)) {\n                    installedPlugins.add(plugin);\n                    plugin.install(app, ...options);\n                }\n                else if (isFunction(plugin)) {\n                    installedPlugins.add(plugin);\n                    plugin(app, ...options);\n                }\n                else {\n                    warn(`A plugin must either be a function or an object with an \"install\" ` +\n                        `function.`);\n                }\n                return app;\n            },\n            mixin(mixin) {\n                {\n                    if (!context.mixins.includes(mixin)) {\n                        context.mixins.push(mixin);\n                    }\n                    else {\n                        warn('Mixin has already been applied to target app' +\n                            (mixin.name ? `: ${mixin.name}` : ''));\n                    }\n                }\n                return app;\n            },\n            component(name, component) {\n                {\n                    validateComponentName(name, context.config);\n                }\n                if (!component) {\n                    return context.components[name];\n                }\n                if (context.components[name]) {\n                    warn(`Component \"${name}\" has already been registered in target app.`);\n                }\n                context.components[name] = component;\n                return app;\n            },\n            directive(name, directive) {\n                {\n                    validateDirectiveName(name);\n                }\n                if (!directive) {\n                    return context.directives[name];\n                }\n                if (context.directives[name]) {\n                    warn(`Directive \"${name}\" has already been registered in target app.`);\n                }\n                context.directives[name] = directive;\n                return app;\n            },\n            mount(rootContainer, isHydrate, isSVG) {\n                if (!isMounted) {\n                    // #5571\n                    if (rootContainer.__vue_app__) {\n                        warn(`There is already an app instance mounted on the host container.\\n` +\n                            ` If you want to mount another app on the same host container,` +\n                            ` you need to unmount the previous app by calling \\`app.unmount()\\` first.`);\n                    }\n                    const vnode = createVNode(rootComponent, rootProps);\n                    // store app context on the root VNode.\n                    // this will be set on the root instance on initial mount.\n                    vnode.appContext = context;\n                    // HMR root reload\n                    {\n                        context.reload = () => {\n                            render(cloneVNode(vnode), rootContainer, isSVG);\n                        };\n                    }\n                    if (isHydrate && hydrate) {\n                        hydrate(vnode, rootContainer);\n                    }\n                    else {\n                        render(vnode, rootContainer, isSVG);\n                    }\n                    isMounted = true;\n                    app._container = rootContainer;\n                    rootContainer.__vue_app__ = app;\n                    {\n                        app._instance = vnode.component;\n                        devtoolsInitApp(app, version);\n                    }\n                    return getExposeProxy(vnode.component) || vnode.component.proxy;\n                }\n                else {\n                    warn(`App has already been mounted.\\n` +\n                        `If you want to remount the same app, move your app creation logic ` +\n                        `into a factory function and create fresh app instances for each ` +\n                        `mount - e.g. \\`const createMyApp = () => createApp(App)\\``);\n                }\n            },\n            unmount() {\n                if (isMounted) {\n                    render(null, app._container);\n                    {\n                        app._instance = null;\n                        devtoolsUnmountApp(app);\n                    }\n                    delete app._container.__vue_app__;\n                }\n                else {\n                    warn(`Cannot unmount an app that is not mounted.`);\n                }\n            },\n            provide(key, value) {\n                if (key in context.provides) {\n                    warn(`App already provides property with key \"${String(key)}\". ` +\n                        `It will be overwritten with the new value.`);\n                }\n                context.provides[key] = value;\n                return app;\n            }\n        });\n        return app;\n    };\n}\n\n/**\n * Function for handling a template ref\n */\nfunction setRef(rawRef, oldRawRef, parentSuspense, vnode, isUnmount = false) {\n    if (isArray(rawRef)) {\n        rawRef.forEach((r, i) => setRef(r, oldRawRef && (isArray(oldRawRef) ? oldRawRef[i] : oldRawRef), parentSuspense, vnode, isUnmount));\n        return;\n    }\n    if (isAsyncWrapper(vnode) && !isUnmount) {\n        // when mounting async components, nothing needs to be done,\n        // because the template ref is forwarded to inner component\n        return;\n    }\n    const refValue = vnode.shapeFlag & 4 /* ShapeFlags.STATEFUL_COMPONENT */\n        ? getExposeProxy(vnode.component) || vnode.component.proxy\n        : vnode.el;\n    const value = isUnmount ? null : refValue;\n    const { i: owner, r: ref } = rawRef;\n    if (!owner) {\n        warn(`Missing ref owner context. ref cannot be used on hoisted vnodes. ` +\n            `A vnode with ref must be created inside the render function.`);\n        return;\n    }\n    const oldRef = oldRawRef && oldRawRef.r;\n    const refs = owner.refs === EMPTY_OBJ ? (owner.refs = {}) : owner.refs;\n    const setupState = owner.setupState;\n    // dynamic ref changed. unset old ref\n    if (oldRef != null && oldRef !== ref) {\n        if (isString(oldRef)) {\n            refs[oldRef] = null;\n            if (hasOwn(setupState, oldRef)) {\n                setupState[oldRef] = null;\n            }\n        }\n        else if (isRef(oldRef)) {\n            oldRef.value = null;\n        }\n    }\n    if (isFunction(ref)) {\n        callWithErrorHandling(ref, owner, 12 /* ErrorCodes.FUNCTION_REF */, [value, refs]);\n    }\n    else {\n        const _isString = isString(ref);\n        const _isRef = isRef(ref);\n        if (_isString || _isRef) {\n            const doSet = () => {\n                if (rawRef.f) {\n                    const existing = _isString\n                        ? hasOwn(setupState, ref)\n                            ? setupState[ref]\n                            : refs[ref]\n                        : ref.value;\n                    if (isUnmount) {\n                        isArray(existing) && remove(existing, refValue);\n                    }\n                    else {\n                        if (!isArray(existing)) {\n                            if (_isString) {\n                                refs[ref] = [refValue];\n                                if (hasOwn(setupState, ref)) {\n                                    setupState[ref] = refs[ref];\n                                }\n                            }\n                            else {\n                                ref.value = [refValue];\n                                if (rawRef.k)\n                                    refs[rawRef.k] = ref.value;\n                            }\n                        }\n                        else if (!existing.includes(refValue)) {\n                            existing.push(refValue);\n                        }\n                    }\n                }\n                else if (_isString) {\n                    refs[ref] = value;\n                    if (hasOwn(setupState, ref)) {\n                        setupState[ref] = value;\n                    }\n                }\n                else if (_isRef) {\n                    ref.value = value;\n                    if (rawRef.k)\n                        refs[rawRef.k] = value;\n                }\n                else {\n                    warn('Invalid template ref type:', ref, `(${typeof ref})`);\n                }\n            };\n            if (value) {\n                doSet.id = -1;\n                queuePostRenderEffect(doSet, parentSuspense);\n            }\n            else {\n                doSet();\n            }\n        }\n        else {\n            warn('Invalid template ref type:', ref, `(${typeof ref})`);\n        }\n    }\n}\n\n/* eslint-disable no-restricted-globals */\nlet supported;\nlet perf;\nfunction startMeasure(instance, type) {\n    if (instance.appContext.config.performance && isSupported()) {\n        perf.mark(`vue-${type}-${instance.uid}`);\n    }\n    {\n        devtoolsPerfStart(instance, type, isSupported() ? perf.now() : Date.now());\n    }\n}\nfunction endMeasure(instance, type) {\n    if (instance.appContext.config.performance && isSupported()) {\n        const startTag = `vue-${type}-${instance.uid}`;\n        const endTag = startTag + `:end`;\n        perf.mark(endTag);\n        perf.measure(`<${formatComponentName(instance, instance.type)}> ${type}`, startTag, endTag);\n        perf.clearMarks(startTag);\n        perf.clearMarks(endTag);\n    }\n    {\n        devtoolsPerfEnd(instance, type, isSupported() ? perf.now() : Date.now());\n    }\n}\nfunction isSupported() {\n    if (supported !== undefined) {\n        return supported;\n    }\n    if (typeof window !== 'undefined' && window.performance) {\n        supported = true;\n        perf = window.performance;\n    }\n    else {\n        supported = false;\n    }\n    return supported;\n}\n\nconst queuePostRenderEffect = queueEffectWithSuspense\n    ;\n/**\n * The createRenderer function accepts two generic arguments:\n * HostNode and HostElement, corresponding to Node and Element types in the\n * host environment. For example, for runtime-dom, HostNode would be the DOM\n * `Node` interface and HostElement would be the DOM `Element` interface.\n *\n * Custom renderers can pass in the platform specific types like this:\n *\n * ``` js\n * const { render, createApp } = createRenderer<Node, Element>({\n *   patchProp,\n *   ...nodeOps\n * })\n * ```\n */\nfunction createRenderer(options) {\n    return baseCreateRenderer(options);\n}\n// implementation\nfunction baseCreateRenderer(options, createHydrationFns) {\n    const target = getGlobalThis();\n    target.__VUE__ = true;\n    {\n        setDevtoolsHook(target.__VUE_DEVTOOLS_GLOBAL_HOOK__, target);\n    }\n    const { insert: hostInsert, remove: hostRemove, patchProp: hostPatchProp, createElement: hostCreateElement, createText: hostCreateText, createComment: hostCreateComment, setText: hostSetText, setElementText: hostSetElementText, parentNode: hostParentNode, nextSibling: hostNextSibling, setScopeId: hostSetScopeId = NOOP, insertStaticContent: hostInsertStaticContent } = options;\n    // Note: functions inside this closure should use `const xxx = () => {}`\n    // style in order to prevent being inlined by minifiers.\n    const patch = (n1, n2, container, anchor = null, parentComponent = null, parentSuspense = null, isSVG = false, slotScopeIds = null, optimized = isHmrUpdating ? false : !!n2.dynamicChildren) => {\n        if (n1 === n2) {\n            return;\n        }\n        // patching & not same type, unmount old tree\n        if (n1 && !isSameVNodeType(n1, n2)) {\n            anchor = getNextHostNode(n1);\n            unmount(n1, parentComponent, parentSuspense, true);\n            n1 = null;\n        }\n        if (n2.patchFlag === -2 /* PatchFlags.BAIL */) {\n            optimized = false;\n            n2.dynamicChildren = null;\n        }\n        const { type, ref, shapeFlag } = n2;\n        switch (type) {\n            case Text:\n                processText(n1, n2, container, anchor);\n                break;\n            case Comment:\n                processCommentNode(n1, n2, container, anchor);\n                break;\n            case Static:\n                if (n1 == null) {\n                    mountStaticNode(n2, container, anchor, isSVG);\n                }\n                else {\n                    patchStaticNode(n1, n2, container, isSVG);\n                }\n                break;\n            case Fragment:\n                processFragment(n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\n                break;\n            default:\n                if (shapeFlag & 1 /* ShapeFlags.ELEMENT */) {\n                    processElement(n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\n                }\n                else if (shapeFlag & 6 /* ShapeFlags.COMPONENT */) {\n                    processComponent(n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\n                }\n                else if (shapeFlag & 64 /* ShapeFlags.TELEPORT */) {\n                    type.process(n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized, internals);\n                }\n                else if (shapeFlag & 128 /* ShapeFlags.SUSPENSE */) {\n                    type.process(n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized, internals);\n                }\n                else {\n                    warn('Invalid VNode type:', type, `(${typeof type})`);\n                }\n        }\n        // set ref\n        if (ref != null && parentComponent) {\n            setRef(ref, n1 && n1.ref, parentSuspense, n2 || n1, !n2);\n        }\n    };\n    const processText = (n1, n2, container, anchor) => {\n        if (n1 == null) {\n            hostInsert((n2.el = hostCreateText(n2.children)), container, anchor);\n        }\n        else {\n            const el = (n2.el = n1.el);\n            if (n2.children !== n1.children) {\n                hostSetText(el, n2.children);\n            }\n        }\n    };\n    const processCommentNode = (n1, n2, container, anchor) => {\n        if (n1 == null) {\n            hostInsert((n2.el = hostCreateComment(n2.children || '')), container, anchor);\n        }\n        else {\n            // there's no support for dynamic comments\n            n2.el = n1.el;\n        }\n    };\n    const mountStaticNode = (n2, container, anchor, isSVG) => {\n        [n2.el, n2.anchor] = hostInsertStaticContent(n2.children, container, anchor, isSVG, n2.el, n2.anchor);\n    };\n    /**\n     * Dev / HMR only\n     */\n    const patchStaticNode = (n1, n2, container, isSVG) => {\n        // static nodes are only patched during dev for HMR\n        if (n2.children !== n1.children) {\n            const anchor = hostNextSibling(n1.anchor);\n            // remove existing\n            removeStaticNode(n1);\n            [n2.el, n2.anchor] = hostInsertStaticContent(n2.children, container, anchor, isSVG);\n        }\n        else {\n            n2.el = n1.el;\n            n2.anchor = n1.anchor;\n        }\n    };\n    const moveStaticNode = ({ el, anchor }, container, nextSibling) => {\n        let next;\n        while (el && el !== anchor) {\n            next = hostNextSibling(el);\n            hostInsert(el, container, nextSibling);\n            el = next;\n        }\n        hostInsert(anchor, container, nextSibling);\n    };\n    const removeStaticNode = ({ el, anchor }) => {\n        let next;\n        while (el && el !== anchor) {\n            next = hostNextSibling(el);\n            hostRemove(el);\n            el = next;\n        }\n        hostRemove(anchor);\n    };\n    const processElement = (n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized) => {\n        isSVG = isSVG || n2.type === 'svg';\n        if (n1 == null) {\n            mountElement(n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\n        }\n        else {\n            patchElement(n1, n2, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\n        }\n    };\n    const mountElement = (vnode, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized) => {\n        let el;\n        let vnodeHook;\n        const { type, props, shapeFlag, transition, dirs } = vnode;\n        el = vnode.el = hostCreateElement(vnode.type, isSVG, props && props.is, props);\n        // mount children first, since some props may rely on child content\n        // being already rendered, e.g. `<select value>`\n        if (shapeFlag & 8 /* ShapeFlags.TEXT_CHILDREN */) {\n            hostSetElementText(el, vnode.children);\n        }\n        else if (shapeFlag & 16 /* ShapeFlags.ARRAY_CHILDREN */) {\n            mountChildren(vnode.children, el, null, parentComponent, parentSuspense, isSVG && type !== 'foreignObject', slotScopeIds, optimized);\n        }\n        if (dirs) {\n            invokeDirectiveHook(vnode, null, parentComponent, 'created');\n        }\n        // scopeId\n        setScopeId(el, vnode, vnode.scopeId, slotScopeIds, parentComponent);\n        // props\n        if (props) {\n            for (const key in props) {\n                if (key !== 'value' && !isReservedProp(key)) {\n                    hostPatchProp(el, key, null, props[key], isSVG, vnode.children, parentComponent, parentSuspense, unmountChildren);\n                }\n            }\n            /**\n             * Special case for setting value on DOM elements:\n             * - it can be order-sensitive (e.g. should be set *after* min/max, #2325, #4024)\n             * - it needs to be forced (#1471)\n             * #2353 proposes adding another renderer option to configure this, but\n             * the properties affects are so finite it is worth special casing it\n             * here to reduce the complexity. (Special casing it also should not\n             * affect non-DOM renderers)\n             */\n            if ('value' in props) {\n                hostPatchProp(el, 'value', null, props.value);\n            }\n            if ((vnodeHook = props.onVnodeBeforeMount)) {\n                invokeVNodeHook(vnodeHook, parentComponent, vnode);\n            }\n        }\n        {\n            Object.defineProperty(el, '__vnode', {\n                value: vnode,\n                enumerable: false\n            });\n            Object.defineProperty(el, '__vueParentComponent', {\n                value: parentComponent,\n                enumerable: false\n            });\n        }\n        if (dirs) {\n            invokeDirectiveHook(vnode, null, parentComponent, 'beforeMount');\n        }\n        // #1583 For inside suspense + suspense not resolved case, enter hook should call when suspense resolved\n        // #1689 For inside suspense + suspense resolved case, just call it\n        const needCallTransitionHooks = (!parentSuspense || (parentSuspense && !parentSuspense.pendingBranch)) &&\n            transition &&\n            !transition.persisted;\n        if (needCallTransitionHooks) {\n            transition.beforeEnter(el);\n        }\n        hostInsert(el, container, anchor);\n        if ((vnodeHook = props && props.onVnodeMounted) ||\n            needCallTransitionHooks ||\n            dirs) {\n            queuePostRenderEffect(() => {\n                vnodeHook && invokeVNodeHook(vnodeHook, parentComponent, vnode);\n                needCallTransitionHooks && transition.enter(el);\n                dirs && invokeDirectiveHook(vnode, null, parentComponent, 'mounted');\n            }, parentSuspense);\n        }\n    };\n    const setScopeId = (el, vnode, scopeId, slotScopeIds, parentComponent) => {\n        if (scopeId) {\n            hostSetScopeId(el, scopeId);\n        }\n        if (slotScopeIds) {\n            for (let i = 0; i < slotScopeIds.length; i++) {\n                hostSetScopeId(el, slotScopeIds[i]);\n            }\n        }\n        if (parentComponent) {\n            let subTree = parentComponent.subTree;\n            if (subTree.patchFlag > 0 &&\n                subTree.patchFlag & 2048 /* PatchFlags.DEV_ROOT_FRAGMENT */) {\n                subTree =\n                    filterSingleRoot(subTree.children) || subTree;\n            }\n            if (vnode === subTree) {\n                const parentVNode = parentComponent.vnode;\n                setScopeId(el, parentVNode, parentVNode.scopeId, parentVNode.slotScopeIds, parentComponent.parent);\n            }\n        }\n    };\n    const mountChildren = (children, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized, start = 0) => {\n        for (let i = start; i < children.length; i++) {\n            const child = (children[i] = optimized\n                ? cloneIfMounted(children[i])\n                : normalizeVNode$1(children[i]));\n            patch(null, child, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\n        }\n    };\n    const patchElement = (n1, n2, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized) => {\n        const el = (n2.el = n1.el);\n        let { patchFlag, dynamicChildren, dirs } = n2;\n        // #1426 take the old vnode's patch flag into account since user may clone a\n        // compiler-generated vnode, which de-opts to FULL_PROPS\n        patchFlag |= n1.patchFlag & 16 /* PatchFlags.FULL_PROPS */;\n        const oldProps = n1.props || EMPTY_OBJ;\n        const newProps = n2.props || EMPTY_OBJ;\n        let vnodeHook;\n        // disable recurse in beforeUpdate hooks\n        parentComponent && toggleRecurse(parentComponent, false);\n        if ((vnodeHook = newProps.onVnodeBeforeUpdate)) {\n            invokeVNodeHook(vnodeHook, parentComponent, n2, n1);\n        }\n        if (dirs) {\n            invokeDirectiveHook(n2, n1, parentComponent, 'beforeUpdate');\n        }\n        parentComponent && toggleRecurse(parentComponent, true);\n        if (isHmrUpdating) {\n            // HMR updated, force full diff\n            patchFlag = 0;\n            optimized = false;\n            dynamicChildren = null;\n        }\n        const areChildrenSVG = isSVG && n2.type !== 'foreignObject';\n        if (dynamicChildren) {\n            patchBlockChildren(n1.dynamicChildren, dynamicChildren, el, parentComponent, parentSuspense, areChildrenSVG, slotScopeIds);\n            if (parentComponent && parentComponent.type.__hmrId) {\n                traverseStaticChildren(n1, n2);\n            }\n        }\n        else if (!optimized) {\n            // full diff\n            patchChildren(n1, n2, el, null, parentComponent, parentSuspense, areChildrenSVG, slotScopeIds, false);\n        }\n        if (patchFlag > 0) {\n            // the presence of a patchFlag means this element's render code was\n            // generated by the compiler and can take the fast path.\n            // in this path old node and new node are guaranteed to have the same shape\n            // (i.e. at the exact same position in the source template)\n            if (patchFlag & 16 /* PatchFlags.FULL_PROPS */) {\n                // element props contain dynamic keys, full diff needed\n                patchProps(el, n2, oldProps, newProps, parentComponent, parentSuspense, isSVG);\n            }\n            else {\n                // class\n                // this flag is matched when the element has dynamic class bindings.\n                if (patchFlag & 2 /* PatchFlags.CLASS */) {\n                    if (oldProps.class !== newProps.class) {\n                        hostPatchProp(el, 'class', null, newProps.class, isSVG);\n                    }\n                }\n                // style\n                // this flag is matched when the element has dynamic style bindings\n                if (patchFlag & 4 /* PatchFlags.STYLE */) {\n                    hostPatchProp(el, 'style', oldProps.style, newProps.style, isSVG);\n                }\n                // props\n                // This flag is matched when the element has dynamic prop/attr bindings\n                // other than class and style. The keys of dynamic prop/attrs are saved for\n                // faster iteration.\n                // Note dynamic keys like :[foo]=\"bar\" will cause this optimization to\n                // bail out and go through a full diff because we need to unset the old key\n                if (patchFlag & 8 /* PatchFlags.PROPS */) {\n                    // if the flag is present then dynamicProps must be non-null\n                    const propsToUpdate = n2.dynamicProps;\n                    for (let i = 0; i < propsToUpdate.length; i++) {\n                        const key = propsToUpdate[i];\n                        const prev = oldProps[key];\n                        const next = newProps[key];\n                        // #1471 force patch value\n                        if (next !== prev || key === 'value') {\n                            hostPatchProp(el, key, prev, next, isSVG, n1.children, parentComponent, parentSuspense, unmountChildren);\n                        }\n                    }\n                }\n            }\n            // text\n            // This flag is matched when the element has only dynamic text children.\n            if (patchFlag & 1 /* PatchFlags.TEXT */) {\n                if (n1.children !== n2.children) {\n                    hostSetElementText(el, n2.children);\n                }\n            }\n        }\n        else if (!optimized && dynamicChildren == null) {\n            // unoptimized, full diff\n            patchProps(el, n2, oldProps, newProps, parentComponent, parentSuspense, isSVG);\n        }\n        if ((vnodeHook = newProps.onVnodeUpdated) || dirs) {\n            queuePostRenderEffect(() => {\n                vnodeHook && invokeVNodeHook(vnodeHook, parentComponent, n2, n1);\n                dirs && invokeDirectiveHook(n2, n1, parentComponent, 'updated');\n            }, parentSuspense);\n        }\n    };\n    // The fast path for blocks.\n    const patchBlockChildren = (oldChildren, newChildren, fallbackContainer, parentComponent, parentSuspense, isSVG, slotScopeIds) => {\n        for (let i = 0; i < newChildren.length; i++) {\n            const oldVNode = oldChildren[i];\n            const newVNode = newChildren[i];\n            // Determine the container (parent element) for the patch.\n            const container = \n            // oldVNode may be an errored async setup() component inside Suspense\n            // which will not have a mounted element\n            oldVNode.el &&\n                // - In the case of a Fragment, we need to provide the actual parent\n                // of the Fragment itself so it can move its children.\n                (oldVNode.type === Fragment ||\n                    // - In the case of different nodes, there is going to be a replacement\n                    // which also requires the correct parent container\n                    !isSameVNodeType(oldVNode, newVNode) ||\n                    // - In the case of a component, it could contain anything.\n                    oldVNode.shapeFlag & (6 /* ShapeFlags.COMPONENT */ | 64 /* ShapeFlags.TELEPORT */))\n                ? hostParentNode(oldVNode.el)\n                : // In other cases, the parent container is not actually used so we\n                    // just pass the block element here to avoid a DOM parentNode call.\n                    fallbackContainer;\n            patch(oldVNode, newVNode, container, null, parentComponent, parentSuspense, isSVG, slotScopeIds, true);\n        }\n    };\n    const patchProps = (el, vnode, oldProps, newProps, parentComponent, parentSuspense, isSVG) => {\n        if (oldProps !== newProps) {\n            if (oldProps !== EMPTY_OBJ) {\n                for (const key in oldProps) {\n                    if (!isReservedProp(key) && !(key in newProps)) {\n                        hostPatchProp(el, key, oldProps[key], null, isSVG, vnode.children, parentComponent, parentSuspense, unmountChildren);\n                    }\n                }\n            }\n            for (const key in newProps) {\n                // empty string is not valid prop\n                if (isReservedProp(key))\n                    continue;\n                const next = newProps[key];\n                const prev = oldProps[key];\n                // defer patching value\n                if (next !== prev && key !== 'value') {\n                    hostPatchProp(el, key, prev, next, isSVG, vnode.children, parentComponent, parentSuspense, unmountChildren);\n                }\n            }\n            if ('value' in newProps) {\n                hostPatchProp(el, 'value', oldProps.value, newProps.value);\n            }\n        }\n    };\n    const processFragment = (n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized) => {\n        const fragmentStartAnchor = (n2.el = n1 ? n1.el : hostCreateText(''));\n        const fragmentEndAnchor = (n2.anchor = n1 ? n1.anchor : hostCreateText(''));\n        let { patchFlag, dynamicChildren, slotScopeIds: fragmentSlotScopeIds } = n2;\n        if (// #5523 dev root fragment may inherit directives\n            (isHmrUpdating || patchFlag & 2048 /* PatchFlags.DEV_ROOT_FRAGMENT */)) {\n            // HMR updated / Dev root fragment (w/ comments), force full diff\n            patchFlag = 0;\n            optimized = false;\n            dynamicChildren = null;\n        }\n        // check if this is a slot fragment with :slotted scope ids\n        if (fragmentSlotScopeIds) {\n            slotScopeIds = slotScopeIds\n                ? slotScopeIds.concat(fragmentSlotScopeIds)\n                : fragmentSlotScopeIds;\n        }\n        if (n1 == null) {\n            hostInsert(fragmentStartAnchor, container, anchor);\n            hostInsert(fragmentEndAnchor, container, anchor);\n            // a fragment can only have array children\n            // since they are either generated by the compiler, or implicitly created\n            // from arrays.\n            mountChildren(n2.children, container, fragmentEndAnchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\n        }\n        else {\n            if (patchFlag > 0 &&\n                patchFlag & 64 /* PatchFlags.STABLE_FRAGMENT */ &&\n                dynamicChildren &&\n                // #2715 the previous fragment could've been a BAILed one as a result\n                // of renderSlot() with no valid children\n                n1.dynamicChildren) {\n                // a stable fragment (template root or <template v-for>) doesn't need to\n                // patch children order, but it may contain dynamicChildren.\n                patchBlockChildren(n1.dynamicChildren, dynamicChildren, container, parentComponent, parentSuspense, isSVG, slotScopeIds);\n                if (parentComponent && parentComponent.type.__hmrId) {\n                    traverseStaticChildren(n1, n2);\n                }\n                else if (\n                // #2080 if the stable fragment has a key, it's a <template v-for> that may\n                //  get moved around. Make sure all root level vnodes inherit el.\n                // #2134 or if it's a component root, it may also get moved around\n                // as the component is being moved.\n                n2.key != null ||\n                    (parentComponent && n2 === parentComponent.subTree)) {\n                    traverseStaticChildren(n1, n2, true /* shallow */);\n                }\n            }\n            else {\n                // keyed / unkeyed, or manual fragments.\n                // for keyed & unkeyed, since they are compiler generated from v-for,\n                // each child is guaranteed to be a block so the fragment will never\n                // have dynamicChildren.\n                patchChildren(n1, n2, container, fragmentEndAnchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\n            }\n        }\n    };\n    const processComponent = (n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized) => {\n        n2.slotScopeIds = slotScopeIds;\n        if (n1 == null) {\n            if (n2.shapeFlag & 512 /* ShapeFlags.COMPONENT_KEPT_ALIVE */) {\n                parentComponent.ctx.activate(n2, container, anchor, isSVG, optimized);\n            }\n            else {\n                mountComponent(n2, container, anchor, parentComponent, parentSuspense, isSVG, optimized);\n            }\n        }\n        else {\n            updateComponent(n1, n2, optimized);\n        }\n    };\n    const mountComponent = (initialVNode, container, anchor, parentComponent, parentSuspense, isSVG, optimized) => {\n        const instance = (initialVNode.component = createComponentInstance$1(initialVNode, parentComponent, parentSuspense));\n        if (instance.type.__hmrId) {\n            registerHMR(instance);\n        }\n        {\n            pushWarningContext(initialVNode);\n            startMeasure(instance, `mount`);\n        }\n        // inject renderer internals for keepAlive\n        if (isKeepAlive(initialVNode)) {\n            instance.ctx.renderer = internals;\n        }\n        // resolve props and slots for setup context\n        {\n            {\n                startMeasure(instance, `init`);\n            }\n            setupComponent$1(instance);\n            {\n                endMeasure(instance, `init`);\n            }\n        }\n        // setup() is async. This component relies on async logic to be resolved\n        // before proceeding\n        if (instance.asyncDep) {\n            parentSuspense && parentSuspense.registerDep(instance, setupRenderEffect);\n            // Give it a placeholder if this is not hydration\n            // TODO handle self-defined fallback\n            if (!initialVNode.el) {\n                const placeholder = (instance.subTree = createVNode(Comment));\n                processCommentNode(null, placeholder, container, anchor);\n            }\n            return;\n        }\n        setupRenderEffect(instance, initialVNode, container, anchor, parentSuspense, isSVG, optimized);\n        {\n            popWarningContext();\n            endMeasure(instance, `mount`);\n        }\n    };\n    const updateComponent = (n1, n2, optimized) => {\n        const instance = (n2.component = n1.component);\n        if (shouldUpdateComponent(n1, n2, optimized)) {\n            if (instance.asyncDep &&\n                !instance.asyncResolved) {\n                // async & still pending - just update props and slots\n                // since the component's reactive effect for render isn't set-up yet\n                {\n                    pushWarningContext(n2);\n                }\n                updateComponentPreRender(instance, n2, optimized);\n                {\n                    popWarningContext();\n                }\n                return;\n            }\n            else {\n                // normal update\n                instance.next = n2;\n                // in case the child component is also queued, remove it to avoid\n                // double updating the same child component in the same flush.\n                invalidateJob(instance.update);\n                // instance.update is the reactive effect.\n                instance.update();\n            }\n        }\n        else {\n            // no update needed. just copy over properties\n            n2.el = n1.el;\n            instance.vnode = n2;\n        }\n    };\n    const setupRenderEffect = (instance, initialVNode, container, anchor, parentSuspense, isSVG, optimized) => {\n        const componentUpdateFn = () => {\n            if (!instance.isMounted) {\n                let vnodeHook;\n                const { el, props } = initialVNode;\n                const { bm, m, parent } = instance;\n                const isAsyncWrapperVNode = isAsyncWrapper(initialVNode);\n                toggleRecurse(instance, false);\n                // beforeMount hook\n                if (bm) {\n                    invokeArrayFns(bm);\n                }\n                // onVnodeBeforeMount\n                if (!isAsyncWrapperVNode &&\n                    (vnodeHook = props && props.onVnodeBeforeMount)) {\n                    invokeVNodeHook(vnodeHook, parent, initialVNode);\n                }\n                toggleRecurse(instance, true);\n                if (el && hydrateNode) {\n                    // vnode has adopted host node - perform hydration instead of mount.\n                    const hydrateSubTree = () => {\n                        {\n                            startMeasure(instance, `render`);\n                        }\n                        instance.subTree = renderComponentRoot$1(instance);\n                        {\n                            endMeasure(instance, `render`);\n                        }\n                        {\n                            startMeasure(instance, `hydrate`);\n                        }\n                        hydrateNode(el, instance.subTree, instance, parentSuspense, null);\n                        {\n                            endMeasure(instance, `hydrate`);\n                        }\n                    };\n                    if (isAsyncWrapperVNode) {\n                        initialVNode.type.__asyncLoader().then(\n                        // note: we are moving the render call into an async callback,\n                        // which means it won't track dependencies - but it's ok because\n                        // a server-rendered async wrapper is already in resolved state\n                        // and it will never need to change.\n                        () => !instance.isUnmounted && hydrateSubTree());\n                    }\n                    else {\n                        hydrateSubTree();\n                    }\n                }\n                else {\n                    {\n                        startMeasure(instance, `render`);\n                    }\n                    const subTree = (instance.subTree = renderComponentRoot$1(instance));\n                    {\n                        endMeasure(instance, `render`);\n                    }\n                    {\n                        startMeasure(instance, `patch`);\n                    }\n                    patch(null, subTree, container, anchor, instance, parentSuspense, isSVG);\n                    {\n                        endMeasure(instance, `patch`);\n                    }\n                    initialVNode.el = subTree.el;\n                }\n                // mounted hook\n                if (m) {\n                    queuePostRenderEffect(m, parentSuspense);\n                }\n                // onVnodeMounted\n                if (!isAsyncWrapperVNode &&\n                    (vnodeHook = props && props.onVnodeMounted)) {\n                    const scopedInitialVNode = initialVNode;\n                    queuePostRenderEffect(() => invokeVNodeHook(vnodeHook, parent, scopedInitialVNode), parentSuspense);\n                }\n                // activated hook for keep-alive roots.\n                // #1742 activated hook must be accessed after first render\n                // since the hook may be injected by a child keep-alive\n                if (initialVNode.shapeFlag & 256 /* ShapeFlags.COMPONENT_SHOULD_KEEP_ALIVE */ ||\n                    (parent &&\n                        isAsyncWrapper(parent.vnode) &&\n                        parent.vnode.shapeFlag & 256 /* ShapeFlags.COMPONENT_SHOULD_KEEP_ALIVE */)) {\n                    instance.a && queuePostRenderEffect(instance.a, parentSuspense);\n                }\n                instance.isMounted = true;\n                {\n                    devtoolsComponentAdded(instance);\n                }\n                // #2458: deference mount-only object parameters to prevent memleaks\n                initialVNode = container = anchor = null;\n            }\n            else {\n                // updateComponent\n                // This is triggered by mutation of component's own state (next: null)\n                // OR parent calling processComponent (next: VNode)\n                let { next, bu, u, parent, vnode } = instance;\n                let originNext = next;\n                let vnodeHook;\n                {\n                    pushWarningContext(next || instance.vnode);\n                }\n                // Disallow component effect recursion during pre-lifecycle hooks.\n                toggleRecurse(instance, false);\n                if (next) {\n                    next.el = vnode.el;\n                    updateComponentPreRender(instance, next, optimized);\n                }\n                else {\n                    next = vnode;\n                }\n                // beforeUpdate hook\n                if (bu) {\n                    invokeArrayFns(bu);\n                }\n                // onVnodeBeforeUpdate\n                if ((vnodeHook = next.props && next.props.onVnodeBeforeUpdate)) {\n                    invokeVNodeHook(vnodeHook, parent, next, vnode);\n                }\n                toggleRecurse(instance, true);\n                // render\n                {\n                    startMeasure(instance, `render`);\n                }\n                const nextTree = renderComponentRoot$1(instance);\n                {\n                    endMeasure(instance, `render`);\n                }\n                const prevTree = instance.subTree;\n                instance.subTree = nextTree;\n                {\n                    startMeasure(instance, `patch`);\n                }\n                patch(prevTree, nextTree, \n                // parent may have changed if it's in a teleport\n                hostParentNode(prevTree.el), \n                // anchor may have changed if it's in a fragment\n                getNextHostNode(prevTree), instance, parentSuspense, isSVG);\n                {\n                    endMeasure(instance, `patch`);\n                }\n                next.el = nextTree.el;\n                if (originNext === null) {\n                    // self-triggered update. In case of HOC, update parent component\n                    // vnode el. HOC is indicated by parent instance's subTree pointing\n                    // to child component's vnode\n                    updateHOCHostEl(instance, nextTree.el);\n                }\n                // updated hook\n                if (u) {\n                    queuePostRenderEffect(u, parentSuspense);\n                }\n                // onVnodeUpdated\n                if ((vnodeHook = next.props && next.props.onVnodeUpdated)) {\n                    queuePostRenderEffect(() => invokeVNodeHook(vnodeHook, parent, next, vnode), parentSuspense);\n                }\n                {\n                    devtoolsComponentUpdated(instance);\n                }\n                {\n                    popWarningContext();\n                }\n            }\n        };\n        // create reactive effect for rendering\n        const effect = (instance.effect = new ReactiveEffect(componentUpdateFn, () => queueJob(update), instance.scope // track it in component's effect scope\n        ));\n        const update = (instance.update = () => effect.run());\n        update.id = instance.uid;\n        // allowRecurse\n        // #1801, #2043 component render effects should allow recursive updates\n        toggleRecurse(instance, true);\n        {\n            effect.onTrack = instance.rtc\n                ? e => invokeArrayFns(instance.rtc, e)\n                : void 0;\n            effect.onTrigger = instance.rtg\n                ? e => invokeArrayFns(instance.rtg, e)\n                : void 0;\n            update.ownerInstance = instance;\n        }\n        update();\n    };\n    const updateComponentPreRender = (instance, nextVNode, optimized) => {\n        nextVNode.component = instance;\n        const prevProps = instance.vnode.props;\n        instance.vnode = nextVNode;\n        instance.next = null;\n        updateProps(instance, nextVNode.props, prevProps, optimized);\n        updateSlots(instance, nextVNode.children, optimized);\n        pauseTracking();\n        // props update may have triggered pre-flush watchers.\n        // flush them before the render update.\n        flushPreFlushCbs();\n        resetTracking();\n    };\n    const patchChildren = (n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized = false) => {\n        const c1 = n1 && n1.children;\n        const prevShapeFlag = n1 ? n1.shapeFlag : 0;\n        const c2 = n2.children;\n        const { patchFlag, shapeFlag } = n2;\n        // fast path\n        if (patchFlag > 0) {\n            if (patchFlag & 128 /* PatchFlags.KEYED_FRAGMENT */) {\n                // this could be either fully-keyed or mixed (some keyed some not)\n                // presence of patchFlag means children are guaranteed to be arrays\n                patchKeyedChildren(c1, c2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\n                return;\n            }\n            else if (patchFlag & 256 /* PatchFlags.UNKEYED_FRAGMENT */) {\n                // unkeyed\n                patchUnkeyedChildren(c1, c2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\n                return;\n            }\n        }\n        // children has 3 possibilities: text, array or no children.\n        if (shapeFlag & 8 /* ShapeFlags.TEXT_CHILDREN */) {\n            // text children fast path\n            if (prevShapeFlag & 16 /* ShapeFlags.ARRAY_CHILDREN */) {\n                unmountChildren(c1, parentComponent, parentSuspense);\n            }\n            if (c2 !== c1) {\n                hostSetElementText(container, c2);\n            }\n        }\n        else {\n            if (prevShapeFlag & 16 /* ShapeFlags.ARRAY_CHILDREN */) {\n                // prev children was array\n                if (shapeFlag & 16 /* ShapeFlags.ARRAY_CHILDREN */) {\n                    // two arrays, cannot assume anything, do full diff\n                    patchKeyedChildren(c1, c2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\n                }\n                else {\n                    // no new children, just unmount old\n                    unmountChildren(c1, parentComponent, parentSuspense, true);\n                }\n            }\n            else {\n                // prev children was text OR null\n                // new children is array OR null\n                if (prevShapeFlag & 8 /* ShapeFlags.TEXT_CHILDREN */) {\n                    hostSetElementText(container, '');\n                }\n                // mount new if array\n                if (shapeFlag & 16 /* ShapeFlags.ARRAY_CHILDREN */) {\n                    mountChildren(c2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\n                }\n            }\n        }\n    };\n    const patchUnkeyedChildren = (c1, c2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized) => {\n        c1 = c1 || EMPTY_ARR;\n        c2 = c2 || EMPTY_ARR;\n        const oldLength = c1.length;\n        const newLength = c2.length;\n        const commonLength = Math.min(oldLength, newLength);\n        let i;\n        for (i = 0; i < commonLength; i++) {\n            const nextChild = (c2[i] = optimized\n                ? cloneIfMounted(c2[i])\n                : normalizeVNode$1(c2[i]));\n            patch(c1[i], nextChild, container, null, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\n        }\n        if (oldLength > newLength) {\n            // remove old\n            unmountChildren(c1, parentComponent, parentSuspense, true, false, commonLength);\n        }\n        else {\n            // mount new\n            mountChildren(c2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized, commonLength);\n        }\n    };\n    // can be all-keyed or mixed\n    const patchKeyedChildren = (c1, c2, container, parentAnchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized) => {\n        let i = 0;\n        const l2 = c2.length;\n        let e1 = c1.length - 1; // prev ending index\n        let e2 = l2 - 1; // next ending index\n        // 1. sync from start\n        // (a b) c\n        // (a b) d e\n        while (i <= e1 && i <= e2) {\n            const n1 = c1[i];\n            const n2 = (c2[i] = optimized\n                ? cloneIfMounted(c2[i])\n                : normalizeVNode$1(c2[i]));\n            if (isSameVNodeType(n1, n2)) {\n                patch(n1, n2, container, null, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\n            }\n            else {\n                break;\n            }\n            i++;\n        }\n        // 2. sync from end\n        // a (b c)\n        // d e (b c)\n        while (i <= e1 && i <= e2) {\n            const n1 = c1[e1];\n            const n2 = (c2[e2] = optimized\n                ? cloneIfMounted(c2[e2])\n                : normalizeVNode$1(c2[e2]));\n            if (isSameVNodeType(n1, n2)) {\n                patch(n1, n2, container, null, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\n            }\n            else {\n                break;\n            }\n            e1--;\n            e2--;\n        }\n        // 3. common sequence + mount\n        // (a b)\n        // (a b) c\n        // i = 2, e1 = 1, e2 = 2\n        // (a b)\n        // c (a b)\n        // i = 0, e1 = -1, e2 = 0\n        if (i > e1) {\n            if (i <= e2) {\n                const nextPos = e2 + 1;\n                const anchor = nextPos < l2 ? c2[nextPos].el : parentAnchor;\n                while (i <= e2) {\n                    patch(null, (c2[i] = optimized\n                        ? cloneIfMounted(c2[i])\n                        : normalizeVNode$1(c2[i])), container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\n                    i++;\n                }\n            }\n        }\n        // 4. common sequence + unmount\n        // (a b) c\n        // (a b)\n        // i = 2, e1 = 2, e2 = 1\n        // a (b c)\n        // (b c)\n        // i = 0, e1 = 0, e2 = -1\n        else if (i > e2) {\n            while (i <= e1) {\n                unmount(c1[i], parentComponent, parentSuspense, true);\n                i++;\n            }\n        }\n        // 5. unknown sequence\n        // [i ... e1 + 1]: a b [c d e] f g\n        // [i ... e2 + 1]: a b [e d c h] f g\n        // i = 2, e1 = 4, e2 = 5\n        else {\n            const s1 = i; // prev starting index\n            const s2 = i; // next starting index\n            // 5.1 build key:index map for newChildren\n            const keyToNewIndexMap = new Map();\n            for (i = s2; i <= e2; i++) {\n                const nextChild = (c2[i] = optimized\n                    ? cloneIfMounted(c2[i])\n                    : normalizeVNode$1(c2[i]));\n                if (nextChild.key != null) {\n                    if (keyToNewIndexMap.has(nextChild.key)) {\n                        warn(`Duplicate keys found during update:`, JSON.stringify(nextChild.key), `Make sure keys are unique.`);\n                    }\n                    keyToNewIndexMap.set(nextChild.key, i);\n                }\n            }\n            // 5.2 loop through old children left to be patched and try to patch\n            // matching nodes & remove nodes that are no longer present\n            let j;\n            let patched = 0;\n            const toBePatched = e2 - s2 + 1;\n            let moved = false;\n            // used to track whether any node has moved\n            let maxNewIndexSoFar = 0;\n            // works as Map<newIndex, oldIndex>\n            // Note that oldIndex is offset by +1\n            // and oldIndex = 0 is a special value indicating the new node has\n            // no corresponding old node.\n            // used for determining longest stable subsequence\n            const newIndexToOldIndexMap = new Array(toBePatched);\n            for (i = 0; i < toBePatched; i++)\n                newIndexToOldIndexMap[i] = 0;\n            for (i = s1; i <= e1; i++) {\n                const prevChild = c1[i];\n                if (patched >= toBePatched) {\n                    // all new children have been patched so this can only be a removal\n                    unmount(prevChild, parentComponent, parentSuspense, true);\n                    continue;\n                }\n                let newIndex;\n                if (prevChild.key != null) {\n                    newIndex = keyToNewIndexMap.get(prevChild.key);\n                }\n                else {\n                    // key-less node, try to locate a key-less node of the same type\n                    for (j = s2; j <= e2; j++) {\n                        if (newIndexToOldIndexMap[j - s2] === 0 &&\n                            isSameVNodeType(prevChild, c2[j])) {\n                            newIndex = j;\n                            break;\n                        }\n                    }\n                }\n                if (newIndex === undefined) {\n                    unmount(prevChild, parentComponent, parentSuspense, true);\n                }\n                else {\n                    newIndexToOldIndexMap[newIndex - s2] = i + 1;\n                    if (newIndex >= maxNewIndexSoFar) {\n                        maxNewIndexSoFar = newIndex;\n                    }\n                    else {\n                        moved = true;\n                    }\n                    patch(prevChild, c2[newIndex], container, null, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\n                    patched++;\n                }\n            }\n            // 5.3 move and mount\n            // generate longest stable subsequence only when nodes have moved\n            const increasingNewIndexSequence = moved\n                ? getSequence(newIndexToOldIndexMap)\n                : EMPTY_ARR;\n            j = increasingNewIndexSequence.length - 1;\n            // looping backwards so that we can use last patched node as anchor\n            for (i = toBePatched - 1; i >= 0; i--) {\n                const nextIndex = s2 + i;\n                const nextChild = c2[nextIndex];\n                const anchor = nextIndex + 1 < l2 ? c2[nextIndex + 1].el : parentAnchor;\n                if (newIndexToOldIndexMap[i] === 0) {\n                    // mount new\n                    patch(null, nextChild, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\n                }\n                else if (moved) {\n                    // move if:\n                    // There is no stable subsequence (e.g. a reverse)\n                    // OR current node is not among the stable sequence\n                    if (j < 0 || i !== increasingNewIndexSequence[j]) {\n                        move(nextChild, container, anchor, 2 /* MoveType.REORDER */);\n                    }\n                    else {\n                        j--;\n                    }\n                }\n            }\n        }\n    };\n    const move = (vnode, container, anchor, moveType, parentSuspense = null) => {\n        const { el, type, transition, children, shapeFlag } = vnode;\n        if (shapeFlag & 6 /* ShapeFlags.COMPONENT */) {\n            move(vnode.component.subTree, container, anchor, moveType);\n            return;\n        }\n        if (shapeFlag & 128 /* ShapeFlags.SUSPENSE */) {\n            vnode.suspense.move(container, anchor, moveType);\n            return;\n        }\n        if (shapeFlag & 64 /* ShapeFlags.TELEPORT */) {\n            type.move(vnode, container, anchor, internals);\n            return;\n        }\n        if (type === Fragment) {\n            hostInsert(el, container, anchor);\n            for (let i = 0; i < children.length; i++) {\n                move(children[i], container, anchor, moveType);\n            }\n            hostInsert(vnode.anchor, container, anchor);\n            return;\n        }\n        if (type === Static) {\n            moveStaticNode(vnode, container, anchor);\n            return;\n        }\n        // single nodes\n        const needTransition = moveType !== 2 /* MoveType.REORDER */ &&\n            shapeFlag & 1 /* ShapeFlags.ELEMENT */ &&\n            transition;\n        if (needTransition) {\n            if (moveType === 0 /* MoveType.ENTER */) {\n                transition.beforeEnter(el);\n                hostInsert(el, container, anchor);\n                queuePostRenderEffect(() => transition.enter(el), parentSuspense);\n            }\n            else {\n                const { leave, delayLeave, afterLeave } = transition;\n                const remove = () => hostInsert(el, container, anchor);\n                const performLeave = () => {\n                    leave(el, () => {\n                        remove();\n                        afterLeave && afterLeave();\n                    });\n                };\n                if (delayLeave) {\n                    delayLeave(el, remove, performLeave);\n                }\n                else {\n                    performLeave();\n                }\n            }\n        }\n        else {\n            hostInsert(el, container, anchor);\n        }\n    };\n    const unmount = (vnode, parentComponent, parentSuspense, doRemove = false, optimized = false) => {\n        const { type, props, ref, children, dynamicChildren, shapeFlag, patchFlag, dirs } = vnode;\n        // unset ref\n        if (ref != null) {\n            setRef(ref, null, parentSuspense, vnode, true);\n        }\n        if (shapeFlag & 256 /* ShapeFlags.COMPONENT_SHOULD_KEEP_ALIVE */) {\n            parentComponent.ctx.deactivate(vnode);\n            return;\n        }\n        const shouldInvokeDirs = shapeFlag & 1 /* ShapeFlags.ELEMENT */ && dirs;\n        const shouldInvokeVnodeHook = !isAsyncWrapper(vnode);\n        let vnodeHook;\n        if (shouldInvokeVnodeHook &&\n            (vnodeHook = props && props.onVnodeBeforeUnmount)) {\n            invokeVNodeHook(vnodeHook, parentComponent, vnode);\n        }\n        if (shapeFlag & 6 /* ShapeFlags.COMPONENT */) {\n            unmountComponent(vnode.component, parentSuspense, doRemove);\n        }\n        else {\n            if (shapeFlag & 128 /* ShapeFlags.SUSPENSE */) {\n                vnode.suspense.unmount(parentSuspense, doRemove);\n                return;\n            }\n            if (shouldInvokeDirs) {\n                invokeDirectiveHook(vnode, null, parentComponent, 'beforeUnmount');\n            }\n            if (shapeFlag & 64 /* ShapeFlags.TELEPORT */) {\n                vnode.type.remove(vnode, parentComponent, parentSuspense, optimized, internals, doRemove);\n            }\n            else if (dynamicChildren &&\n                // #1153: fast path should not be taken for non-stable (v-for) fragments\n                (type !== Fragment ||\n                    (patchFlag > 0 && patchFlag & 64 /* PatchFlags.STABLE_FRAGMENT */))) {\n                // fast path for block nodes: only need to unmount dynamic children.\n                unmountChildren(dynamicChildren, parentComponent, parentSuspense, false, true);\n            }\n            else if ((type === Fragment &&\n                patchFlag &\n                    (128 /* PatchFlags.KEYED_FRAGMENT */ | 256 /* PatchFlags.UNKEYED_FRAGMENT */)) ||\n                (!optimized && shapeFlag & 16 /* ShapeFlags.ARRAY_CHILDREN */)) {\n                unmountChildren(children, parentComponent, parentSuspense);\n            }\n            if (doRemove) {\n                remove(vnode);\n            }\n        }\n        if ((shouldInvokeVnodeHook &&\n            (vnodeHook = props && props.onVnodeUnmounted)) ||\n            shouldInvokeDirs) {\n            queuePostRenderEffect(() => {\n                vnodeHook && invokeVNodeHook(vnodeHook, parentComponent, vnode);\n                shouldInvokeDirs &&\n                    invokeDirectiveHook(vnode, null, parentComponent, 'unmounted');\n            }, parentSuspense);\n        }\n    };\n    const remove = vnode => {\n        const { type, el, anchor, transition } = vnode;\n        if (type === Fragment) {\n            if (vnode.patchFlag > 0 &&\n                vnode.patchFlag & 2048 /* PatchFlags.DEV_ROOT_FRAGMENT */ &&\n                transition &&\n                !transition.persisted) {\n                vnode.children.forEach(child => {\n                    if (child.type === Comment) {\n                        hostRemove(child.el);\n                    }\n                    else {\n                        remove(child);\n                    }\n                });\n            }\n            else {\n                removeFragment(el, anchor);\n            }\n            return;\n        }\n        if (type === Static) {\n            removeStaticNode(vnode);\n            return;\n        }\n        const performRemove = () => {\n            hostRemove(el);\n            if (transition && !transition.persisted && transition.afterLeave) {\n                transition.afterLeave();\n            }\n        };\n        if (vnode.shapeFlag & 1 /* ShapeFlags.ELEMENT */ &&\n            transition &&\n            !transition.persisted) {\n            const { leave, delayLeave } = transition;\n            const performLeave = () => leave(el, performRemove);\n            if (delayLeave) {\n                delayLeave(vnode.el, performRemove, performLeave);\n            }\n            else {\n                performLeave();\n            }\n        }\n        else {\n            performRemove();\n        }\n    };\n    const removeFragment = (cur, end) => {\n        // For fragments, directly remove all contained DOM nodes.\n        // (fragment child nodes cannot have transition)\n        let next;\n        while (cur !== end) {\n            next = hostNextSibling(cur);\n            hostRemove(cur);\n            cur = next;\n        }\n        hostRemove(end);\n    };\n    const unmountComponent = (instance, parentSuspense, doRemove) => {\n        if (instance.type.__hmrId) {\n            unregisterHMR(instance);\n        }\n        const { bum, scope, update, subTree, um } = instance;\n        // beforeUnmount hook\n        if (bum) {\n            invokeArrayFns(bum);\n        }\n        // stop effects in component scope\n        scope.stop();\n        // update may be null if a component is unmounted before its async\n        // setup has resolved.\n        if (update) {\n            // so that scheduler will no longer invoke it\n            update.active = false;\n            unmount(subTree, instance, parentSuspense, doRemove);\n        }\n        // unmounted hook\n        if (um) {\n            queuePostRenderEffect(um, parentSuspense);\n        }\n        queuePostRenderEffect(() => {\n            instance.isUnmounted = true;\n        }, parentSuspense);\n        // A component with async dep inside a pending suspense is unmounted before\n        // its async dep resolves. This should remove the dep from the suspense, and\n        // cause the suspense to resolve immediately if that was the last dep.\n        if (parentSuspense &&\n            parentSuspense.pendingBranch &&\n            !parentSuspense.isUnmounted &&\n            instance.asyncDep &&\n            !instance.asyncResolved &&\n            instance.suspenseId === parentSuspense.pendingId) {\n            parentSuspense.deps--;\n            if (parentSuspense.deps === 0) {\n                parentSuspense.resolve();\n            }\n        }\n        {\n            devtoolsComponentRemoved(instance);\n        }\n    };\n    const unmountChildren = (children, parentComponent, parentSuspense, doRemove = false, optimized = false, start = 0) => {\n        for (let i = start; i < children.length; i++) {\n            unmount(children[i], parentComponent, parentSuspense, doRemove, optimized);\n        }\n    };\n    const getNextHostNode = vnode => {\n        if (vnode.shapeFlag & 6 /* ShapeFlags.COMPONENT */) {\n            return getNextHostNode(vnode.component.subTree);\n        }\n        if (vnode.shapeFlag & 128 /* ShapeFlags.SUSPENSE */) {\n            return vnode.suspense.next();\n        }\n        return hostNextSibling((vnode.anchor || vnode.el));\n    };\n    const render = (vnode, container, isSVG) => {\n        if (vnode == null) {\n            if (container._vnode) {\n                unmount(container._vnode, null, null, true);\n            }\n        }\n        else {\n            patch(container._vnode || null, vnode, container, null, null, null, isSVG);\n        }\n        flushPreFlushCbs();\n        flushPostFlushCbs();\n        container._vnode = vnode;\n    };\n    const internals = {\n        p: patch,\n        um: unmount,\n        m: move,\n        r: remove,\n        mt: mountComponent,\n        mc: mountChildren,\n        pc: patchChildren,\n        pbc: patchBlockChildren,\n        n: getNextHostNode,\n        o: options\n    };\n    let hydrate;\n    let hydrateNode;\n    if (createHydrationFns) {\n        [hydrate, hydrateNode] = createHydrationFns(internals);\n    }\n    return {\n        render,\n        hydrate,\n        createApp: createAppAPI(render, hydrate)\n    };\n}\nfunction toggleRecurse({ effect, update }, allowed) {\n    effect.allowRecurse = update.allowRecurse = allowed;\n}\n/**\n * #1156\n * When a component is HMR-enabled, we need to make sure that all static nodes\n * inside a block also inherit the DOM element from the previous tree so that\n * HMR updates (which are full updates) can retrieve the element for patching.\n *\n * #2080\n * Inside keyed `template` fragment static children, if a fragment is moved,\n * the children will always be moved. Therefore, in order to ensure correct move\n * position, el should be inherited from previous nodes.\n */\nfunction traverseStaticChildren(n1, n2, shallow = false) {\n    const ch1 = n1.children;\n    const ch2 = n2.children;\n    if (isArray(ch1) && isArray(ch2)) {\n        for (let i = 0; i < ch1.length; i++) {\n            // this is only called in the optimized path so array children are\n            // guaranteed to be vnodes\n            const c1 = ch1[i];\n            let c2 = ch2[i];\n            if (c2.shapeFlag & 1 /* ShapeFlags.ELEMENT */ && !c2.dynamicChildren) {\n                if (c2.patchFlag <= 0 || c2.patchFlag === 32 /* PatchFlags.HYDRATE_EVENTS */) {\n                    c2 = ch2[i] = cloneIfMounted(ch2[i]);\n                    c2.el = c1.el;\n                }\n                if (!shallow)\n                    traverseStaticChildren(c1, c2);\n            }\n            // #6852 also inherit for text nodes\n            if (c2.type === Text) {\n                c2.el = c1.el;\n            }\n            // also inherit for comment nodes, but not placeholders (e.g. v-if which\n            // would have received .el during block patch)\n            if (c2.type === Comment && !c2.el) {\n                c2.el = c1.el;\n            }\n        }\n    }\n}\n// https://en.wikipedia.org/wiki/Longest_increasing_subsequence\nfunction getSequence(arr) {\n    const p = arr.slice();\n    const result = [0];\n    let i, j, u, v, c;\n    const len = arr.length;\n    for (i = 0; i < len; i++) {\n        const arrI = arr[i];\n        if (arrI !== 0) {\n            j = result[result.length - 1];\n            if (arr[j] < arrI) {\n                p[i] = j;\n                result.push(i);\n                continue;\n            }\n            u = 0;\n            v = result.length - 1;\n            while (u < v) {\n                c = (u + v) >> 1;\n                if (arr[result[c]] < arrI) {\n                    u = c + 1;\n                }\n                else {\n                    v = c;\n                }\n            }\n            if (arrI < arr[result[u]]) {\n                if (u > 0) {\n                    p[i] = result[u - 1];\n                }\n                result[u] = i;\n            }\n        }\n    }\n    u = result.length;\n    v = result[u - 1];\n    while (u-- > 0) {\n        result[u] = v;\n        v = p[v];\n    }\n    return result;\n}\n\nconst isTeleport = (type) => type.__isTeleport;\n\nconst Fragment = Symbol('Fragment' );\nconst Text = Symbol('Text' );\nconst Comment = Symbol('Comment' );\nconst Static = Symbol('Static' );\nlet currentBlock = null;\n// Whether we should be tracking dynamic child nodes inside a block.\n// Only tracks when this value is > 0\n// We are not using a simple boolean because this value may need to be\n// incremented/decremented by nested usage of v-once (see below)\nlet isBlockTreeEnabled = 1;\n/**\n * Block tracking sometimes needs to be disabled, for example during the\n * creation of a tree that needs to be cached by v-once. The compiler generates\n * code like this:\n *\n * ``` js\n * _cache[1] || (\n *   setBlockTracking(-1),\n *   _cache[1] = createVNode(...),\n *   setBlockTracking(1),\n *   _cache[1]\n * )\n * ```\n *\n * @private\n */\nfunction setBlockTracking(value) {\n    isBlockTreeEnabled += value;\n}\nfunction isVNode$2(value) {\n    return value ? value.__v_isVNode === true : false;\n}\nfunction isSameVNodeType(n1, n2) {\n    if (n2.shapeFlag & 6 /* ShapeFlags.COMPONENT */ &&\n        hmrDirtyComponents.has(n2.type)) {\n        // #7042, ensure the vnode being unmounted during HMR\n        // bitwise operations to remove keep alive flags\n        n1.shapeFlag &= ~256 /* ShapeFlags.COMPONENT_SHOULD_KEEP_ALIVE */;\n        n2.shapeFlag &= ~512 /* ShapeFlags.COMPONENT_KEPT_ALIVE */;\n        // HMR only: if the component has been hot-updated, force a reload.\n        return false;\n    }\n    return n1.type === n2.type && n1.key === n2.key;\n}\nconst createVNodeWithArgsTransform = (...args) => {\n    return _createVNode(...(args));\n};\nconst InternalObjectKey = `__vInternal`;\nconst normalizeKey = ({ key }) => key != null ? key : null;\nconst normalizeRef = ({ ref, ref_key, ref_for }) => {\n    return (ref != null\n        ? isString(ref) || isRef(ref) || isFunction(ref)\n            ? { i: currentRenderingInstance, r: ref, k: ref_key, f: !!ref_for }\n            : ref\n        : null);\n};\nfunction createBaseVNode(type, props = null, children = null, patchFlag = 0, dynamicProps = null, shapeFlag = type === Fragment ? 0 : 1 /* ShapeFlags.ELEMENT */, isBlockNode = false, needFullChildrenNormalization = false) {\n    const vnode = {\n        __v_isVNode: true,\n        __v_skip: true,\n        type,\n        props,\n        key: props && normalizeKey(props),\n        ref: props && normalizeRef(props),\n        scopeId: currentScopeId,\n        slotScopeIds: null,\n        children,\n        component: null,\n        suspense: null,\n        ssContent: null,\n        ssFallback: null,\n        dirs: null,\n        transition: null,\n        el: null,\n        anchor: null,\n        target: null,\n        targetAnchor: null,\n        staticCount: 0,\n        shapeFlag,\n        patchFlag,\n        dynamicProps,\n        dynamicChildren: null,\n        appContext: null,\n        ctx: currentRenderingInstance\n    };\n    if (needFullChildrenNormalization) {\n        normalizeChildren(vnode, children);\n        // normalize suspense children\n        if (shapeFlag & 128 /* ShapeFlags.SUSPENSE */) {\n            type.normalize(vnode);\n        }\n    }\n    else if (children) {\n        // compiled element vnode - if children is passed, only possible types are\n        // string or Array.\n        vnode.shapeFlag |= isString(children)\n            ? 8 /* ShapeFlags.TEXT_CHILDREN */\n            : 16 /* ShapeFlags.ARRAY_CHILDREN */;\n    }\n    // validate key\n    if (vnode.key !== vnode.key) {\n        warn(`VNode created with invalid key (NaN). VNode type:`, vnode.type);\n    }\n    // track vnode for block tree\n    if (isBlockTreeEnabled > 0 &&\n        // avoid a block node from tracking itself\n        !isBlockNode &&\n        // has current parent block\n        currentBlock &&\n        // presence of a patch flag indicates this node needs patching on updates.\n        // component nodes also should always be patched, because even if the\n        // component doesn't need to update, it needs to persist the instance on to\n        // the next vnode so that it can be properly unmounted later.\n        (vnode.patchFlag > 0 || shapeFlag & 6 /* ShapeFlags.COMPONENT */) &&\n        // the EVENTS flag is only for hydration and if it is the only flag, the\n        // vnode should not be considered dynamic due to handler caching.\n        vnode.patchFlag !== 32 /* PatchFlags.HYDRATE_EVENTS */) {\n        currentBlock.push(vnode);\n    }\n    return vnode;\n}\nconst createVNode = (createVNodeWithArgsTransform );\nfunction _createVNode(type, props = null, children = null, patchFlag = 0, dynamicProps = null, isBlockNode = false) {\n    if (!type || type === NULL_DYNAMIC_COMPONENT) {\n        if (!type) {\n            warn(`Invalid vnode type when creating vnode: ${type}.`);\n        }\n        type = Comment;\n    }\n    if (isVNode$2(type)) {\n        // createVNode receiving an existing vnode. This happens in cases like\n        // <component :is=\"vnode\"/>\n        // #2078 make sure to merge refs during the clone instead of overwriting it\n        const cloned = cloneVNode(type, props, true /* mergeRef: true */);\n        if (children) {\n            normalizeChildren(cloned, children);\n        }\n        if (isBlockTreeEnabled > 0 && !isBlockNode && currentBlock) {\n            if (cloned.shapeFlag & 6 /* ShapeFlags.COMPONENT */) {\n                currentBlock[currentBlock.indexOf(type)] = cloned;\n            }\n            else {\n                currentBlock.push(cloned);\n            }\n        }\n        cloned.patchFlag |= -2 /* PatchFlags.BAIL */;\n        return cloned;\n    }\n    // class component normalization.\n    if (isClassComponent(type)) {\n        type = type.__vccOpts;\n    }\n    // class & style normalization.\n    if (props) {\n        // for reactive or proxy objects, we need to clone it to enable mutation.\n        props = guardReactiveProps(props);\n        let { class: klass, style } = props;\n        if (klass && !isString(klass)) {\n            props.class = normalizeClass(klass);\n        }\n        if (isObject(style)) {\n            // reactive state objects need to be cloned since they are likely to be\n            // mutated\n            if (isProxy(style) && !isArray(style)) {\n                style = extend({}, style);\n            }\n            props.style = normalizeStyle(style);\n        }\n    }\n    // encode the vnode type information into a bitmap\n    const shapeFlag = isString(type)\n        ? 1 /* ShapeFlags.ELEMENT */\n        : isSuspense(type)\n            ? 128 /* ShapeFlags.SUSPENSE */\n            : isTeleport(type)\n                ? 64 /* ShapeFlags.TELEPORT */\n                : isObject(type)\n                    ? 4 /* ShapeFlags.STATEFUL_COMPONENT */\n                    : isFunction(type)\n                        ? 2 /* ShapeFlags.FUNCTIONAL_COMPONENT */\n                        : 0;\n    if (shapeFlag & 4 /* ShapeFlags.STATEFUL_COMPONENT */ && isProxy(type)) {\n        type = toRaw(type);\n        warn(`Vue received a Component which was made a reactive object. This can ` +\n            `lead to unnecessary performance overhead, and should be avoided by ` +\n            `marking the component with \\`markRaw\\` or using \\`shallowRef\\` ` +\n            `instead of \\`ref\\`.`, `\\nComponent that was made reactive: `, type);\n    }\n    return createBaseVNode(type, props, children, patchFlag, dynamicProps, shapeFlag, isBlockNode, true);\n}\nfunction guardReactiveProps(props) {\n    if (!props)\n        return null;\n    return isProxy(props) || InternalObjectKey in props\n        ? extend({}, props)\n        : props;\n}\nfunction cloneVNode(vnode, extraProps, mergeRef = false) {\n    // This is intentionally NOT using spread or extend to avoid the runtime\n    // key enumeration cost.\n    const { props, ref, patchFlag, children } = vnode;\n    const mergedProps = extraProps ? mergeProps(props || {}, extraProps) : props;\n    const cloned = {\n        __v_isVNode: true,\n        __v_skip: true,\n        type: vnode.type,\n        props: mergedProps,\n        key: mergedProps && normalizeKey(mergedProps),\n        ref: extraProps && extraProps.ref\n            ? // #2078 in the case of <component :is=\"vnode\" ref=\"extra\"/>\n                // if the vnode itself already has a ref, cloneVNode will need to merge\n                // the refs so the single vnode can be set on multiple refs\n                mergeRef && ref\n                    ? isArray(ref)\n                        ? ref.concat(normalizeRef(extraProps))\n                        : [ref, normalizeRef(extraProps)]\n                    : normalizeRef(extraProps)\n            : ref,\n        scopeId: vnode.scopeId,\n        slotScopeIds: vnode.slotScopeIds,\n        children: patchFlag === -1 /* PatchFlags.HOISTED */ && isArray(children)\n            ? children.map(deepCloneVNode)\n            : children,\n        target: vnode.target,\n        targetAnchor: vnode.targetAnchor,\n        staticCount: vnode.staticCount,\n        shapeFlag: vnode.shapeFlag,\n        // if the vnode is cloned with extra props, we can no longer assume its\n        // existing patch flag to be reliable and need to add the FULL_PROPS flag.\n        // note: preserve flag for fragments since they use the flag for children\n        // fast paths only.\n        patchFlag: extraProps && vnode.type !== Fragment\n            ? patchFlag === -1 // hoisted node\n                ? 16 /* PatchFlags.FULL_PROPS */\n                : patchFlag | 16 /* PatchFlags.FULL_PROPS */\n            : patchFlag,\n        dynamicProps: vnode.dynamicProps,\n        dynamicChildren: vnode.dynamicChildren,\n        appContext: vnode.appContext,\n        dirs: vnode.dirs,\n        transition: vnode.transition,\n        // These should technically only be non-null on mounted VNodes. However,\n        // they *should* be copied for kept-alive vnodes. So we just always copy\n        // them since them being non-null during a mount doesn't affect the logic as\n        // they will simply be overwritten.\n        component: vnode.component,\n        suspense: vnode.suspense,\n        ssContent: vnode.ssContent && cloneVNode(vnode.ssContent),\n        ssFallback: vnode.ssFallback && cloneVNode(vnode.ssFallback),\n        el: vnode.el,\n        anchor: vnode.anchor,\n        ctx: vnode.ctx,\n        ce: vnode.ce\n    };\n    return cloned;\n}\n/**\n * Dev only, for HMR of hoisted vnodes reused in v-for\n * https://github.com/vitejs/vite/issues/2022\n */\nfunction deepCloneVNode(vnode) {\n    const cloned = cloneVNode(vnode);\n    if (isArray(vnode.children)) {\n        cloned.children = vnode.children.map(deepCloneVNode);\n    }\n    return cloned;\n}\n/**\n * @private\n */\nfunction createTextVNode(text = ' ', flag = 0) {\n    return createVNode(Text, null, text, flag);\n}\nfunction normalizeVNode$1(child) {\n    if (child == null || typeof child === 'boolean') {\n        // empty placeholder\n        return createVNode(Comment);\n    }\n    else if (isArray(child)) {\n        // fragment\n        return createVNode(Fragment, null, \n        // #3666, avoid reference pollution when reusing vnode\n        child.slice());\n    }\n    else if (typeof child === 'object') {\n        // already vnode, this should be the most common since compiled templates\n        // always produce all-vnode children arrays\n        return cloneIfMounted(child);\n    }\n    else {\n        // strings and numbers\n        return createVNode(Text, null, String(child));\n    }\n}\n// optimized normalization for template-compiled render fns\nfunction cloneIfMounted(child) {\n    return (child.el === null && child.patchFlag !== -1 /* PatchFlags.HOISTED */) ||\n        child.memo\n        ? child\n        : cloneVNode(child);\n}\nfunction normalizeChildren(vnode, children) {\n    let type = 0;\n    const { shapeFlag } = vnode;\n    if (children == null) {\n        children = null;\n    }\n    else if (isArray(children)) {\n        type = 16 /* ShapeFlags.ARRAY_CHILDREN */;\n    }\n    else if (typeof children === 'object') {\n        if (shapeFlag & (1 /* ShapeFlags.ELEMENT */ | 64 /* ShapeFlags.TELEPORT */)) {\n            // Normalize slot to plain children for plain element and Teleport\n            const slot = children.default;\n            if (slot) {\n                // _c marker is added by withCtx() indicating this is a compiled slot\n                slot._c && (slot._d = false);\n                normalizeChildren(vnode, slot());\n                slot._c && (slot._d = true);\n            }\n            return;\n        }\n        else {\n            type = 32 /* ShapeFlags.SLOTS_CHILDREN */;\n            const slotFlag = children._;\n            if (!slotFlag && !(InternalObjectKey in children)) {\n                children._ctx = currentRenderingInstance;\n            }\n            else if (slotFlag === 3 /* SlotFlags.FORWARDED */ && currentRenderingInstance) {\n                // a child component receives forwarded slots from the parent.\n                // its slot type is determined by its parent's slot type.\n                if (currentRenderingInstance.slots._ === 1 /* SlotFlags.STABLE */) {\n                    children._ = 1 /* SlotFlags.STABLE */;\n                }\n                else {\n                    children._ = 2 /* SlotFlags.DYNAMIC */;\n                    vnode.patchFlag |= 1024 /* PatchFlags.DYNAMIC_SLOTS */;\n                }\n            }\n        }\n    }\n    else if (isFunction(children)) {\n        children = { default: children, _ctx: currentRenderingInstance };\n        type = 32 /* ShapeFlags.SLOTS_CHILDREN */;\n    }\n    else {\n        children = String(children);\n        // force teleport children to array so it can be moved around\n        if (shapeFlag & 64 /* ShapeFlags.TELEPORT */) {\n            type = 16 /* ShapeFlags.ARRAY_CHILDREN */;\n            children = [createTextVNode(children)];\n        }\n        else {\n            type = 8 /* ShapeFlags.TEXT_CHILDREN */;\n        }\n    }\n    vnode.children = children;\n    vnode.shapeFlag |= type;\n}\nfunction mergeProps(...args) {\n    const ret = {};\n    for (let i = 0; i < args.length; i++) {\n        const toMerge = args[i];\n        for (const key in toMerge) {\n            if (key === 'class') {\n                if (ret.class !== toMerge.class) {\n                    ret.class = normalizeClass([ret.class, toMerge.class]);\n                }\n            }\n            else if (key === 'style') {\n                ret.style = normalizeStyle([ret.style, toMerge.style]);\n            }\n            else if (isOn(key)) {\n                const existing = ret[key];\n                const incoming = toMerge[key];\n                if (incoming &&\n                    existing !== incoming &&\n                    !(isArray(existing) && existing.includes(incoming))) {\n                    ret[key] = existing\n                        ? [].concat(existing, incoming)\n                        : incoming;\n                }\n            }\n            else if (key !== '') {\n                ret[key] = toMerge[key];\n            }\n        }\n    }\n    return ret;\n}\nfunction invokeVNodeHook(hook, instance, vnode, prevVNode = null) {\n    callWithAsyncErrorHandling(hook, instance, 7 /* ErrorCodes.VNODE_HOOK */, [\n        vnode,\n        prevVNode\n    ]);\n}\n\nconst emptyAppContext = createAppContext();\nlet uid = 0;\nfunction createComponentInstance$1(vnode, parent, suspense) {\n    const type = vnode.type;\n    // inherit parent app context - or - if root, adopt from root vnode\n    const appContext = (parent ? parent.appContext : vnode.appContext) || emptyAppContext;\n    const instance = {\n        uid: uid++,\n        vnode,\n        type,\n        parent,\n        appContext,\n        root: null,\n        next: null,\n        subTree: null,\n        effect: null,\n        update: null,\n        scope: new EffectScope(true /* detached */),\n        render: null,\n        proxy: null,\n        exposed: null,\n        exposeProxy: null,\n        withProxy: null,\n        provides: parent ? parent.provides : Object.create(appContext.provides),\n        accessCache: null,\n        renderCache: [],\n        // local resolved assets\n        components: null,\n        directives: null,\n        // resolved props and emits options\n        propsOptions: normalizePropsOptions(type, appContext),\n        emitsOptions: normalizeEmitsOptions(type, appContext),\n        // emit\n        emit: null,\n        emitted: null,\n        // props default value\n        propsDefaults: EMPTY_OBJ,\n        // inheritAttrs\n        inheritAttrs: type.inheritAttrs,\n        // state\n        ctx: EMPTY_OBJ,\n        data: EMPTY_OBJ,\n        props: EMPTY_OBJ,\n        attrs: EMPTY_OBJ,\n        slots: EMPTY_OBJ,\n        refs: EMPTY_OBJ,\n        setupState: EMPTY_OBJ,\n        setupContext: null,\n        // suspense related\n        suspense,\n        suspenseId: suspense ? suspense.pendingId : 0,\n        asyncDep: null,\n        asyncResolved: false,\n        // lifecycle hooks\n        // not using enums here because it results in computed properties\n        isMounted: false,\n        isUnmounted: false,\n        isDeactivated: false,\n        bc: null,\n        c: null,\n        bm: null,\n        m: null,\n        bu: null,\n        u: null,\n        um: null,\n        bum: null,\n        da: null,\n        a: null,\n        rtg: null,\n        rtc: null,\n        ec: null,\n        sp: null\n    };\n    {\n        instance.ctx = createDevRenderContext(instance);\n    }\n    instance.root = parent ? parent.root : instance;\n    instance.emit = emit.bind(null, instance);\n    // apply custom element special handling\n    if (vnode.ce) {\n        vnode.ce(instance);\n    }\n    return instance;\n}\nlet currentInstance = null;\nconst setCurrentInstance = (instance) => {\n    currentInstance = instance;\n    instance.scope.on();\n};\nconst unsetCurrentInstance = () => {\n    currentInstance && currentInstance.scope.off();\n    currentInstance = null;\n};\nconst isBuiltInTag = /*#__PURE__*/ makeMap('slot,component');\nfunction validateComponentName(name, config) {\n    const appIsNativeTag = config.isNativeTag || NO;\n    if (isBuiltInTag(name) || appIsNativeTag(name)) {\n        warn('Do not use built-in or reserved HTML elements as component id: ' + name);\n    }\n}\nfunction isStatefulComponent(instance) {\n    return instance.vnode.shapeFlag & 4 /* ShapeFlags.STATEFUL_COMPONENT */;\n}\nlet isInSSRComponentSetup = false;\nfunction setupComponent$1(instance, isSSR = false) {\n    isInSSRComponentSetup = isSSR;\n    const { props, children } = instance.vnode;\n    const isStateful = isStatefulComponent(instance);\n    initProps(instance, props, isStateful, isSSR);\n    initSlots(instance, children);\n    const setupResult = isStateful\n        ? setupStatefulComponent(instance, isSSR)\n        : undefined;\n    isInSSRComponentSetup = false;\n    return setupResult;\n}\nfunction setupStatefulComponent(instance, isSSR) {\n    var _a;\n    const Component = instance.type;\n    {\n        if (Component.name) {\n            validateComponentName(Component.name, instance.appContext.config);\n        }\n        if (Component.components) {\n            const names = Object.keys(Component.components);\n            for (let i = 0; i < names.length; i++) {\n                validateComponentName(names[i], instance.appContext.config);\n            }\n        }\n        if (Component.directives) {\n            const names = Object.keys(Component.directives);\n            for (let i = 0; i < names.length; i++) {\n                validateDirectiveName(names[i]);\n            }\n        }\n        if (Component.compilerOptions && isRuntimeOnly()) {\n            warn(`\"compilerOptions\" is only supported when using a build of Vue that ` +\n                `includes the runtime compiler. Since you are using a runtime-only ` +\n                `build, the options should be passed via your build tool config instead.`);\n        }\n    }\n    // 0. create render proxy property access cache\n    instance.accessCache = Object.create(null);\n    // 1. create public instance / render proxy\n    // also mark it raw so it's never observed\n    instance.proxy = markRaw(new Proxy(instance.ctx, PublicInstanceProxyHandlers));\n    {\n        exposePropsOnRenderContext(instance);\n    }\n    // 2. call setup()\n    const { setup } = Component;\n    if (setup) {\n        const setupContext = (instance.setupContext =\n            setup.length > 1 ? createSetupContext(instance) : null);\n        setCurrentInstance(instance);\n        pauseTracking();\n        const setupResult = callWithErrorHandling(setup, instance, 0 /* ErrorCodes.SETUP_FUNCTION */, [shallowReadonly(instance.props) , setupContext]);\n        resetTracking();\n        unsetCurrentInstance();\n        if (isPromise(setupResult)) {\n            setupResult.then(unsetCurrentInstance, unsetCurrentInstance);\n            if (isSSR) {\n                // return the promise so server-renderer can wait on it\n                return setupResult\n                    .then((resolvedResult) => {\n                    handleSetupResult(instance, resolvedResult, isSSR);\n                })\n                    .catch(e => {\n                    handleError(e, instance, 0 /* ErrorCodes.SETUP_FUNCTION */);\n                });\n            }\n            else {\n                // async setup returned Promise.\n                // bail here and wait for re-entry.\n                instance.asyncDep = setupResult;\n                if (!instance.suspense) {\n                    const name = (_a = Component.name) !== null && _a !== void 0 ? _a : 'Anonymous';\n                    warn(`Component <${name}>: setup function returned a promise, but no ` +\n                        `<Suspense> boundary was found in the parent component tree. ` +\n                        `A component with async setup() must be nested in a <Suspense> ` +\n                        `in order to be rendered.`);\n                }\n            }\n        }\n        else {\n            handleSetupResult(instance, setupResult, isSSR);\n        }\n    }\n    else {\n        finishComponentSetup(instance, isSSR);\n    }\n}\nfunction handleSetupResult(instance, setupResult, isSSR) {\n    if (isFunction(setupResult)) {\n        // setup returned an inline render function\n        if (instance.type.__ssrInlineRender) {\n            // when the function's name is `ssrRender` (compiled by SFC inline mode),\n            // set it as ssrRender instead.\n            instance.ssrRender = setupResult;\n        }\n        else {\n            instance.render = setupResult;\n        }\n    }\n    else if (isObject(setupResult)) {\n        if (isVNode$2(setupResult)) {\n            warn(`setup() should not return VNodes directly - ` +\n                `return a render function instead.`);\n        }\n        // setup returned bindings.\n        // assuming a render function compiled from template is present.\n        {\n            instance.devtoolsRawSetupState = setupResult;\n        }\n        instance.setupState = proxyRefs(setupResult);\n        {\n            exposeSetupStateOnRenderContext(instance);\n        }\n    }\n    else if (setupResult !== undefined) {\n        warn(`setup() should return an object. Received: ${setupResult === null ? 'null' : typeof setupResult}`);\n    }\n    finishComponentSetup(instance, isSSR);\n}\nlet compile;\n// dev only\nconst isRuntimeOnly = () => !compile;\nfunction finishComponentSetup(instance, isSSR, skipOptions) {\n    const Component = instance.type;\n    // template / render function normalization\n    // could be already set when returned from setup()\n    if (!instance.render) {\n        // only do on-the-fly compile if not in SSR - SSR on-the-fly compilation\n        // is done by server-renderer\n        if (!isSSR && compile && !Component.render) {\n            const template = Component.template ||\n                resolveMergedOptions(instance).template;\n            if (template) {\n                {\n                    startMeasure(instance, `compile`);\n                }\n                const { isCustomElement, compilerOptions } = instance.appContext.config;\n                const { delimiters, compilerOptions: componentCompilerOptions } = Component;\n                const finalCompilerOptions = extend(extend({\n                    isCustomElement,\n                    delimiters\n                }, compilerOptions), componentCompilerOptions);\n                Component.render = compile(template, finalCompilerOptions);\n                {\n                    endMeasure(instance, `compile`);\n                }\n            }\n        }\n        instance.render = (Component.render || NOOP);\n    }\n    // support for 2.x options\n    {\n        setCurrentInstance(instance);\n        pauseTracking();\n        applyOptions(instance);\n        resetTracking();\n        unsetCurrentInstance();\n    }\n    // warn missing template/render\n    // the runtime compilation of template in SSR is done by server-render\n    if (!Component.render && instance.render === NOOP && !isSSR) {\n        /* istanbul ignore if */\n        if (Component.template) {\n            warn(`Component provided template option but ` +\n                `runtime compilation is not supported in this build of Vue.` +\n                (` Use \"vue.esm-browser.js\" instead.`\n                        ) /* should not happen */);\n        }\n        else {\n            warn(`Component is missing template or render function.`);\n        }\n    }\n}\nfunction createAttrsProxy(instance) {\n    return new Proxy(instance.attrs, {\n            get(target, key) {\n                markAttrsAccessed();\n                track(instance, \"get\" /* TrackOpTypes.GET */, '$attrs');\n                return target[key];\n            },\n            set() {\n                warn(`setupContext.attrs is readonly.`);\n                return false;\n            },\n            deleteProperty() {\n                warn(`setupContext.attrs is readonly.`);\n                return false;\n            }\n        }\n        );\n}\nfunction createSetupContext(instance) {\n    const expose = exposed => {\n        {\n            if (instance.exposed) {\n                warn(`expose() should be called only once per setup().`);\n            }\n            if (exposed != null) {\n                let exposedType = typeof exposed;\n                if (exposedType === 'object') {\n                    if (isArray(exposed)) {\n                        exposedType = 'array';\n                    }\n                    else if (isRef(exposed)) {\n                        exposedType = 'ref';\n                    }\n                }\n                if (exposedType !== 'object') {\n                    warn(`expose() should be passed a plain object, received ${exposedType}.`);\n                }\n            }\n        }\n        instance.exposed = exposed || {};\n    };\n    let attrs;\n    {\n        // We use getters in dev in case libs like test-utils overwrite instance\n        // properties (overwrites should not be done in prod)\n        return Object.freeze({\n            get attrs() {\n                return attrs || (attrs = createAttrsProxy(instance));\n            },\n            get slots() {\n                return shallowReadonly(instance.slots);\n            },\n            get emit() {\n                return (event, ...args) => instance.emit(event, ...args);\n            },\n            expose\n        });\n    }\n}\nfunction getExposeProxy(instance) {\n    if (instance.exposed) {\n        return (instance.exposeProxy ||\n            (instance.exposeProxy = new Proxy(proxyRefs(markRaw(instance.exposed)), {\n                get(target, key) {\n                    if (key in target) {\n                        return target[key];\n                    }\n                    else if (key in publicPropertiesMap) {\n                        return publicPropertiesMap[key](instance);\n                    }\n                },\n                has(target, key) {\n                    return key in target || key in publicPropertiesMap;\n                }\n            })));\n    }\n}\nconst classifyRE = /(?:^|[-_])(\\w)/g;\nconst classify = (str) => str.replace(classifyRE, c => c.toUpperCase()).replace(/[-_]/g, '');\nfunction getComponentName(Component, includeInferred = true) {\n    return isFunction(Component)\n        ? Component.displayName || Component.name\n        : Component.name || (includeInferred && Component.__name);\n}\n/* istanbul ignore next */\nfunction formatComponentName(instance, Component, isRoot = false) {\n    let name = getComponentName(Component);\n    if (!name && Component.__file) {\n        const match = Component.__file.match(/([^/\\\\]+)\\.\\w+$/);\n        if (match) {\n            name = match[1];\n        }\n    }\n    if (!name && instance && instance.parent) {\n        // try to infer the name based on reverse resolution\n        const inferFromRegistry = (registry) => {\n            for (const key in registry) {\n                if (registry[key] === Component) {\n                    return key;\n                }\n            }\n        };\n        name =\n            inferFromRegistry(instance.components ||\n                instance.parent.type.components) || inferFromRegistry(instance.appContext.components);\n    }\n    return name ? classify(name) : isRoot ? `App` : `Anonymous`;\n}\nfunction isClassComponent(value) {\n    return isFunction(value) && '__vccOpts' in value;\n}\n\nconst computed = ((getterOrOptions, debugOptions) => {\n    // @ts-ignore\n    return computed$1(getterOrOptions, debugOptions, isInSSRComponentSetup);\n});\n\nconst ssrContextKey = Symbol(`ssrContext` );\nconst useSSRContext = () => {\n    {\n        const ctx = inject(ssrContextKey);\n        if (!ctx) {\n            warn(`Server rendering context not provided. Make sure to only call ` +\n                    `useSSRContext() conditionally in the server build.`);\n        }\n        return ctx;\n    }\n};\n\n// Core API ------------------------------------------------------------------\nconst version = \"3.2.47\";\nconst _ssrUtils = {\n    createComponentInstance: createComponentInstance$1,\n    setupComponent: setupComponent$1,\n    renderComponentRoot: renderComponentRoot$1,\n    setCurrentRenderingInstance: setCurrentRenderingInstance$1,\n    isVNode: isVNode$2,\n    normalizeVNode: normalizeVNode$1\n};\n/**\n * SSR utils for \\@vue/server-renderer. Only exposed in ssr-possible builds.\n * @internal\n */\nconst ssrUtils = (_ssrUtils );\n\nconst svgNS = 'http://www.w3.org/2000/svg';\nconst doc = (typeof document !== 'undefined' ? document : null);\nconst templateContainer = doc && /*#__PURE__*/ doc.createElement('template');\nconst nodeOps = {\n    insert: (child, parent, anchor) => {\n        parent.insertBefore(child, anchor || null);\n    },\n    remove: child => {\n        const parent = child.parentNode;\n        if (parent) {\n            parent.removeChild(child);\n        }\n    },\n    createElement: (tag, isSVG, is, props) => {\n        const el = isSVG\n            ? doc.createElementNS(svgNS, tag)\n            : doc.createElement(tag, is ? { is } : undefined);\n        if (tag === 'select' && props && props.multiple != null) {\n            el.setAttribute('multiple', props.multiple);\n        }\n        return el;\n    },\n    createText: text => doc.createTextNode(text),\n    createComment: text => doc.createComment(text),\n    setText: (node, text) => {\n        node.nodeValue = text;\n    },\n    setElementText: (el, text) => {\n        el.textContent = text;\n    },\n    parentNode: node => node.parentNode,\n    nextSibling: node => node.nextSibling,\n    querySelector: selector => doc.querySelector(selector),\n    setScopeId(el, id) {\n        el.setAttribute(id, '');\n    },\n    // __UNSAFE__\n    // Reason: innerHTML.\n    // Static content here can only come from compiled templates.\n    // As long as the user only uses trusted templates, this is safe.\n    insertStaticContent(content, parent, anchor, isSVG, start, end) {\n        // <parent> before | first ... last | anchor </parent>\n        const before = anchor ? anchor.previousSibling : parent.lastChild;\n        // #5308 can only take cached path if:\n        // - has a single root node\n        // - nextSibling info is still available\n        if (start && (start === end || start.nextSibling)) {\n            // cached\n            while (true) {\n                parent.insertBefore(start.cloneNode(true), anchor);\n                if (start === end || !(start = start.nextSibling))\n                    break;\n            }\n        }\n        else {\n            // fresh insert\n            templateContainer.innerHTML = isSVG ? `<svg>${content}</svg>` : content;\n            const template = templateContainer.content;\n            if (isSVG) {\n                // remove outer svg wrapper\n                const wrapper = template.firstChild;\n                while (wrapper.firstChild) {\n                    template.appendChild(wrapper.firstChild);\n                }\n                template.removeChild(wrapper);\n            }\n            parent.insertBefore(template, anchor);\n        }\n        return [\n            // first\n            before ? before.nextSibling : parent.firstChild,\n            // last\n            anchor ? anchor.previousSibling : parent.lastChild\n        ];\n    }\n};\n\n// compiler should normalize class + :class bindings on the same element\n// into a single binding ['staticClass', dynamic]\nfunction patchClass(el, value, isSVG) {\n    // directly setting className should be faster than setAttribute in theory\n    // if this is an element during a transition, take the temporary transition\n    // classes into account.\n    const transitionClasses = el._vtc;\n    if (transitionClasses) {\n        value = (value ? [value, ...transitionClasses] : [...transitionClasses]).join(' ');\n    }\n    if (value == null) {\n        el.removeAttribute('class');\n    }\n    else if (isSVG) {\n        el.setAttribute('class', value);\n    }\n    else {\n        el.className = value;\n    }\n}\n\nfunction patchStyle(el, prev, next) {\n    const style = el.style;\n    const isCssString = isString(next);\n    if (next && !isCssString) {\n        if (prev && !isString(prev)) {\n            for (const key in prev) {\n                if (next[key] == null) {\n                    setStyle(style, key, '');\n                }\n            }\n        }\n        for (const key in next) {\n            setStyle(style, key, next[key]);\n        }\n    }\n    else {\n        const currentDisplay = style.display;\n        if (isCssString) {\n            if (prev !== next) {\n                style.cssText = next;\n            }\n        }\n        else if (prev) {\n            el.removeAttribute('style');\n        }\n        // indicates that the `display` of the element is controlled by `v-show`,\n        // so we always keep the current `display` value regardless of the `style`\n        // value, thus handing over control to `v-show`.\n        if ('_vod' in el) {\n            style.display = currentDisplay;\n        }\n    }\n}\nconst semicolonRE = /[^\\\\];\\s*$/;\nconst importantRE = /\\s*!important$/;\nfunction setStyle(style, name, val) {\n    if (isArray(val)) {\n        val.forEach(v => setStyle(style, name, v));\n    }\n    else {\n        if (val == null)\n            val = '';\n        {\n            if (semicolonRE.test(val)) {\n                warn(`Unexpected semicolon at the end of '${name}' style value: '${val}'`);\n            }\n        }\n        if (name.startsWith('--')) {\n            // custom property definition\n            style.setProperty(name, val);\n        }\n        else {\n            const prefixed = autoPrefix(style, name);\n            if (importantRE.test(val)) {\n                // !important\n                style.setProperty(hyphenate(prefixed), val.replace(importantRE, ''), 'important');\n            }\n            else {\n                style[prefixed] = val;\n            }\n        }\n    }\n}\nconst prefixes = ['Webkit', 'Moz', 'ms'];\nconst prefixCache = {};\nfunction autoPrefix(style, rawName) {\n    const cached = prefixCache[rawName];\n    if (cached) {\n        return cached;\n    }\n    let name = camelize(rawName);\n    if (name !== 'filter' && name in style) {\n        return (prefixCache[rawName] = name);\n    }\n    name = capitalize(name);\n    for (let i = 0; i < prefixes.length; i++) {\n        const prefixed = prefixes[i] + name;\n        if (prefixed in style) {\n            return (prefixCache[rawName] = prefixed);\n        }\n    }\n    return rawName;\n}\n\nconst xlinkNS = 'http://www.w3.org/1999/xlink';\nfunction patchAttr(el, key, value, isSVG, instance) {\n    if (isSVG && key.startsWith('xlink:')) {\n        if (value == null) {\n            el.removeAttributeNS(xlinkNS, key.slice(6, key.length));\n        }\n        else {\n            el.setAttributeNS(xlinkNS, key, value);\n        }\n    }\n    else {\n        // note we are only checking boolean attributes that don't have a\n        // corresponding dom prop of the same name here.\n        const isBoolean = isSpecialBooleanAttr(key);\n        if (value == null || (isBoolean && !includeBooleanAttr(value))) {\n            el.removeAttribute(key);\n        }\n        else {\n            el.setAttribute(key, isBoolean ? '' : value);\n        }\n    }\n}\n\n// __UNSAFE__\n// functions. The user is responsible for using them with only trusted content.\nfunction patchDOMProp(el, key, value, \n// the following args are passed only due to potential innerHTML/textContent\n// overriding existing VNodes, in which case the old tree must be properly\n// unmounted.\nprevChildren, parentComponent, parentSuspense, unmountChildren) {\n    if (key === 'innerHTML' || key === 'textContent') {\n        if (prevChildren) {\n            unmountChildren(prevChildren, parentComponent, parentSuspense);\n        }\n        el[key] = value == null ? '' : value;\n        return;\n    }\n    if (key === 'value' &&\n        el.tagName !== 'PROGRESS' &&\n        // custom elements may use _value internally\n        !el.tagName.includes('-')) {\n        // store value as _value as well since\n        // non-string values will be stringified.\n        el._value = value;\n        const newValue = value == null ? '' : value;\n        if (el.value !== newValue ||\n            // #4956: always set for OPTION elements because its value falls back to\n            // textContent if no value attribute is present. And setting .value for\n            // OPTION has no side effect\n            el.tagName === 'OPTION') {\n            el.value = newValue;\n        }\n        if (value == null) {\n            el.removeAttribute(key);\n        }\n        return;\n    }\n    let needRemove = false;\n    if (value === '' || value == null) {\n        const type = typeof el[key];\n        if (type === 'boolean') {\n            // e.g. <select multiple> compiles to { multiple: '' }\n            value = includeBooleanAttr(value);\n        }\n        else if (value == null && type === 'string') {\n            // e.g. <div :id=\"null\">\n            value = '';\n            needRemove = true;\n        }\n        else if (type === 'number') {\n            // e.g. <img :width=\"null\">\n            value = 0;\n            needRemove = true;\n        }\n    }\n    // some properties perform value validation and throw,\n    // some properties has getter, no setter, will error in 'use strict'\n    // eg. <select :type=\"null\"></select> <select :willValidate=\"null\"></select>\n    try {\n        el[key] = value;\n    }\n    catch (e) {\n        // do not warn if value is auto-coerced from nullish values\n        if (!needRemove) {\n            warn(`Failed setting prop \"${key}\" on <${el.tagName.toLowerCase()}>: ` +\n                `value ${value} is invalid.`, e);\n        }\n    }\n    needRemove && el.removeAttribute(key);\n}\n\nfunction addEventListener(el, event, handler, options) {\n    el.addEventListener(event, handler, options);\n}\nfunction removeEventListener(el, event, handler, options) {\n    el.removeEventListener(event, handler, options);\n}\nfunction patchEvent(el, rawName, prevValue, nextValue, instance = null) {\n    // vei = vue event invokers\n    const invokers = el._vei || (el._vei = {});\n    const existingInvoker = invokers[rawName];\n    if (nextValue && existingInvoker) {\n        // patch\n        existingInvoker.value = nextValue;\n    }\n    else {\n        const [name, options] = parseName(rawName);\n        if (nextValue) {\n            // add\n            const invoker = (invokers[rawName] = createInvoker(nextValue, instance));\n            addEventListener(el, name, invoker, options);\n        }\n        else if (existingInvoker) {\n            // remove\n            removeEventListener(el, name, existingInvoker, options);\n            invokers[rawName] = undefined;\n        }\n    }\n}\nconst optionsModifierRE = /(?:Once|Passive|Capture)$/;\nfunction parseName(name) {\n    let options;\n    if (optionsModifierRE.test(name)) {\n        options = {};\n        let m;\n        while ((m = name.match(optionsModifierRE))) {\n            name = name.slice(0, name.length - m[0].length);\n            options[m[0].toLowerCase()] = true;\n        }\n    }\n    const event = name[2] === ':' ? name.slice(3) : hyphenate(name.slice(2));\n    return [event, options];\n}\n// To avoid the overhead of repeatedly calling Date.now(), we cache\n// and use the same timestamp for all event listeners attached in the same tick.\nlet cachedNow = 0;\nconst p = /*#__PURE__*/ Promise.resolve();\nconst getNow = () => cachedNow || (p.then(() => (cachedNow = 0)), (cachedNow = Date.now()));\nfunction createInvoker(initialValue, instance) {\n    const invoker = (e) => {\n        // async edge case vuejs/vue#6566\n        // inner click event triggers patch, event handler\n        // attached to outer element during patch, and triggered again. This\n        // happens because browsers fire microtask ticks between event propagation.\n        // this no longer happens for templates in Vue 3, but could still be\n        // theoretically possible for hand-written render functions.\n        // the solution: we save the timestamp when a handler is attached,\n        // and also attach the timestamp to any event that was handled by vue\n        // for the first time (to avoid inconsistent event timestamp implementations\n        // or events fired from iframes, e.g. #2513)\n        // The handler would only fire if the event passed to it was fired\n        // AFTER it was attached.\n        if (!e._vts) {\n            e._vts = Date.now();\n        }\n        else if (e._vts <= invoker.attached) {\n            return;\n        }\n        callWithAsyncErrorHandling(patchStopImmediatePropagation(e, invoker.value), instance, 5 /* ErrorCodes.NATIVE_EVENT_HANDLER */, [e]);\n    };\n    invoker.value = initialValue;\n    invoker.attached = getNow();\n    return invoker;\n}\nfunction patchStopImmediatePropagation(e, value) {\n    if (isArray(value)) {\n        const originalStop = e.stopImmediatePropagation;\n        e.stopImmediatePropagation = () => {\n            originalStop.call(e);\n            e._stopped = true;\n        };\n        return value.map(fn => (e) => !e._stopped && fn && fn(e));\n    }\n    else {\n        return value;\n    }\n}\n\nconst nativeOnRE = /^on[a-z]/;\nconst patchProp = (el, key, prevValue, nextValue, isSVG = false, prevChildren, parentComponent, parentSuspense, unmountChildren) => {\n    if (key === 'class') {\n        patchClass(el, nextValue, isSVG);\n    }\n    else if (key === 'style') {\n        patchStyle(el, prevValue, nextValue);\n    }\n    else if (isOn(key)) {\n        // ignore v-model listeners\n        if (!isModelListener(key)) {\n            patchEvent(el, key, prevValue, nextValue, parentComponent);\n        }\n    }\n    else if (key[0] === '.'\n        ? ((key = key.slice(1)), true)\n        : key[0] === '^'\n            ? ((key = key.slice(1)), false)\n            : shouldSetAsProp(el, key, nextValue, isSVG)) {\n        patchDOMProp(el, key, nextValue, prevChildren, parentComponent, parentSuspense, unmountChildren);\n    }\n    else {\n        // special case for <input v-model type=\"checkbox\"> with\n        // :true-value & :false-value\n        // store value as dom properties since non-string values will be\n        // stringified.\n        if (key === 'true-value') {\n            el._trueValue = nextValue;\n        }\n        else if (key === 'false-value') {\n            el._falseValue = nextValue;\n        }\n        patchAttr(el, key, nextValue, isSVG);\n    }\n};\nfunction shouldSetAsProp(el, key, value, isSVG) {\n    if (isSVG) {\n        // most keys must be set as attribute on svg elements to work\n        // ...except innerHTML & textContent\n        if (key === 'innerHTML' || key === 'textContent') {\n            return true;\n        }\n        // or native onclick with function values\n        if (key in el && nativeOnRE.test(key) && isFunction(value)) {\n            return true;\n        }\n        return false;\n    }\n    // these are enumerated attrs, however their corresponding DOM properties\n    // are actually booleans - this leads to setting it with a string \"false\"\n    // value leading it to be coerced to `true`, so we need to always treat\n    // them as attributes.\n    // Note that `contentEditable` doesn't have this problem: its DOM\n    // property is also enumerated string values.\n    if (key === 'spellcheck' || key === 'draggable' || key === 'translate') {\n        return false;\n    }\n    // #1787, #2840 form property on form elements is readonly and must be set as\n    // attribute.\n    if (key === 'form') {\n        return false;\n    }\n    // #1526 <input list> must be set as attribute\n    if (key === 'list' && el.tagName === 'INPUT') {\n        return false;\n    }\n    // #2766 <textarea type> must be set as attribute\n    if (key === 'type' && el.tagName === 'TEXTAREA') {\n        return false;\n    }\n    // native onclick with string value, must be set as attribute\n    if (nativeOnRE.test(key) && isString(value)) {\n        return false;\n    }\n    return key in el;\n}\n\nconst getModelAssigner = (vnode) => {\n    const fn = vnode.props['onUpdate:modelValue'] ||\n        (false );\n    return isArray(fn) ? value => invokeArrayFns(fn, value) : fn;\n};\nfunction onCompositionStart(e) {\n    e.target.composing = true;\n}\nfunction onCompositionEnd(e) {\n    const target = e.target;\n    if (target.composing) {\n        target.composing = false;\n        target.dispatchEvent(new Event('input'));\n    }\n}\n// We are exporting the v-model runtime directly as vnode hooks so that it can\n// be tree-shaken in case v-model is never used.\nconst vModelText = {\n    created(el, { modifiers: { lazy, trim, number } }, vnode) {\n        el._assign = getModelAssigner(vnode);\n        const castToNumber = number || (vnode.props && vnode.props.type === 'number');\n        addEventListener(el, lazy ? 'change' : 'input', e => {\n            if (e.target.composing)\n                return;\n            let domValue = el.value;\n            if (trim) {\n                domValue = domValue.trim();\n            }\n            if (castToNumber) {\n                domValue = looseToNumber(domValue);\n            }\n            el._assign(domValue);\n        });\n        if (trim) {\n            addEventListener(el, 'change', () => {\n                el.value = el.value.trim();\n            });\n        }\n        if (!lazy) {\n            addEventListener(el, 'compositionstart', onCompositionStart);\n            addEventListener(el, 'compositionend', onCompositionEnd);\n            // Safari < 10.2 & UIWebView doesn't fire compositionend when\n            // switching focus before confirming composition choice\n            // this also fixes the issue where some browsers e.g. iOS Chrome\n            // fires \"change\" instead of \"input\" on autocomplete.\n            addEventListener(el, 'change', onCompositionEnd);\n        }\n    },\n    // set value on mounted so it's after min/max for type=\"range\"\n    mounted(el, { value }) {\n        el.value = value == null ? '' : value;\n    },\n    beforeUpdate(el, { value, modifiers: { lazy, trim, number } }, vnode) {\n        el._assign = getModelAssigner(vnode);\n        // avoid clearing unresolved text. #2302\n        if (el.composing)\n            return;\n        if (document.activeElement === el && el.type !== 'range') {\n            if (lazy) {\n                return;\n            }\n            if (trim && el.value.trim() === value) {\n                return;\n            }\n            if ((number || el.type === 'number') &&\n                looseToNumber(el.value) === value) {\n                return;\n            }\n        }\n        const newValue = value == null ? '' : value;\n        if (el.value !== newValue) {\n            el.value = newValue;\n        }\n    }\n};\n// SSR vnode transforms, only used when user includes client-oriented render\n// function in SSR\nfunction initVModelForSSR() {\n    vModelText.getSSRProps = ({ value }) => ({ value });\n}\n\nconst vShow = {\n    beforeMount(el, { value }, { transition }) {\n        el._vod = el.style.display === 'none' ? '' : el.style.display;\n        if (transition && value) {\n            transition.beforeEnter(el);\n        }\n        else {\n            setDisplay(el, value);\n        }\n    },\n    mounted(el, { value }, { transition }) {\n        if (transition && value) {\n            transition.enter(el);\n        }\n    },\n    updated(el, { value, oldValue }, { transition }) {\n        if (!value === !oldValue)\n            return;\n        if (transition) {\n            if (value) {\n                transition.beforeEnter(el);\n                setDisplay(el, true);\n                transition.enter(el);\n            }\n            else {\n                transition.leave(el, () => {\n                    setDisplay(el, false);\n                });\n            }\n        }\n        else {\n            setDisplay(el, value);\n        }\n    },\n    beforeUnmount(el, { value }) {\n        setDisplay(el, value);\n    }\n};\nfunction setDisplay(el, value) {\n    el.style.display = value ? el._vod : 'none';\n}\n// SSR vnode transforms, only used when user includes client-oriented render\n// function in SSR\nfunction initVShowForSSR() {\n    vShow.getSSRProps = ({ value }) => {\n        if (!value) {\n            return { style: { display: 'none' } };\n        }\n    };\n}\n\nconst rendererOptions = /*#__PURE__*/ extend({ patchProp }, nodeOps);\n// lazy create the renderer - this makes core renderer logic tree-shakable\n// in case the user only imports reactivity utilities from Vue.\nlet renderer;\nfunction ensureRenderer() {\n    return (renderer ||\n        (renderer = createRenderer(rendererOptions)));\n}\nconst createApp = ((...args) => {\n    const app = ensureRenderer().createApp(...args);\n    {\n        injectNativeTagCheck(app);\n        injectCompilerOptionsCheck(app);\n    }\n    const { mount } = app;\n    app.mount = (containerOrSelector) => {\n        const container = normalizeContainer(containerOrSelector);\n        if (!container)\n            return;\n        const component = app._component;\n        if (!isFunction(component) && !component.render && !component.template) {\n            // __UNSAFE__\n            // Reason: potential execution of JS expressions in in-DOM template.\n            // The user must make sure the in-DOM template is trusted. If it's\n            // rendered by the server, the template should not contain any user data.\n            component.template = container.innerHTML;\n        }\n        // clear content before mounting\n        container.innerHTML = '';\n        const proxy = mount(container, false, container instanceof SVGElement);\n        if (container instanceof Element) {\n            container.removeAttribute('v-cloak');\n            container.setAttribute('data-v-app', '');\n        }\n        return proxy;\n    };\n    return app;\n});\nfunction injectNativeTagCheck(app) {\n    // Inject `isNativeTag`\n    // this is used for component name validation (dev only)\n    Object.defineProperty(app.config, 'isNativeTag', {\n        value: (tag) => isHTMLTag(tag) || isSVGTag(tag),\n        writable: false\n    });\n}\n// dev only\nfunction injectCompilerOptionsCheck(app) {\n    {\n        const isCustomElement = app.config.isCustomElement;\n        Object.defineProperty(app.config, 'isCustomElement', {\n            get() {\n                return isCustomElement;\n            },\n            set() {\n                warn(`The \\`isCustomElement\\` config option is deprecated. Use ` +\n                    `\\`compilerOptions.isCustomElement\\` instead.`);\n            }\n        });\n        const compilerOptions = app.config.compilerOptions;\n        const msg = `The \\`compilerOptions\\` config option is only respected when using ` +\n            `a build of Vue.js that includes the runtime compiler (aka \"full build\"). ` +\n            `Since you are using the runtime-only build, \\`compilerOptions\\` ` +\n            `must be passed to \\`@vue/compiler-dom\\` in the build setup instead.\\n` +\n            `- For vue-loader: pass it via vue-loader's \\`compilerOptions\\` loader option.\\n` +\n            `- For vue-cli: see https://cli.vuejs.org/guide/webpack.html#modifying-options-of-a-loader\\n` +\n            `- For vite: pass it via @vitejs/plugin-vue options. See https://github.com/vitejs/vite/tree/main/packages/plugin-vue#example-for-passing-options-to-vuecompiler-dom`;\n        Object.defineProperty(app.config, 'compilerOptions', {\n            get() {\n                warn(msg);\n                return compilerOptions;\n            },\n            set() {\n                warn(msg);\n            }\n        });\n    }\n}\nfunction normalizeContainer(container) {\n    if (isString(container)) {\n        const res = document.querySelector(container);\n        if (!res) {\n            warn(`Failed to mount app: mount target selector \"${container}\" returned null.`);\n        }\n        return res;\n    }\n    if (window.ShadowRoot &&\n        container instanceof window.ShadowRoot &&\n        container.mode === 'closed') {\n        warn(`mounting on a ShadowRoot with \\`{mode: \"closed\"}\\` may lead to unpredictable bugs`);\n    }\n    return container;\n}\nlet ssrDirectiveInitialized = false;\n/**\n * @internal\n */\nconst initDirectivesForSSR = () => {\n        if (!ssrDirectiveInitialized) {\n            ssrDirectiveInitialized = true;\n            initVModelForSSR();\n            initVShowForSSR();\n        }\n    }\n    ;\n\n// leading comma for empty string \"\"\nconst shouldIgnoreProp = makeMap(`,key,ref,innerHTML,textContent,ref_key,ref_for`);\nfunction ssrRenderAttrs(props, tag) {\n    let ret = '';\n    for (const key in props) {\n        if (shouldIgnoreProp(key) ||\n            isOn(key) ||\n            (tag === 'textarea' && key === 'value')) {\n            continue;\n        }\n        const value = props[key];\n        if (key === 'class') {\n            ret += ` class=\"${ssrRenderClass(value)}\"`;\n        }\n        else if (key === 'style') {\n            ret += ` style=\"${ssrRenderStyle(value)}\"`;\n        }\n        else {\n            ret += ssrRenderDynamicAttr(key, value, tag);\n        }\n    }\n    return ret;\n}\n// render an attr with dynamic (unknown) key.\nfunction ssrRenderDynamicAttr(key, value, tag) {\n    if (!isRenderableValue(value)) {\n        return ``;\n    }\n    const attrKey = tag && (tag.indexOf('-') > 0 || isSVGTag(tag))\n        ? key // preserve raw name on custom elements and svg\n        : propsToAttrMap[key] || key.toLowerCase();\n    if (isBooleanAttr(attrKey)) {\n        return includeBooleanAttr(value) ? ` ${attrKey}` : ``;\n    }\n    else if (isSSRSafeAttrName(attrKey)) {\n        return value === '' ? ` ${attrKey}` : ` ${attrKey}=\"${escapeHtml(value)}\"`;\n    }\n    else {\n        console.warn(`[@vue/server-renderer] Skipped rendering unsafe attribute name: ${attrKey}`);\n        return ``;\n    }\n}\n// Render a v-bind attr with static key. The key is pre-processed at compile\n// time and we only need to check and escape value.\nfunction ssrRenderAttr(key, value) {\n    if (!isRenderableValue(value)) {\n        return ``;\n    }\n    return ` ${key}=\"${escapeHtml(value)}\"`;\n}\nfunction isRenderableValue(value) {\n    if (value == null) {\n        return false;\n    }\n    const type = typeof value;\n    return type === 'string' || type === 'number' || type === 'boolean';\n}\nfunction ssrRenderClass(raw) {\n    return escapeHtml(normalizeClass(raw));\n}\nfunction ssrRenderStyle(raw) {\n    if (!raw) {\n        return '';\n    }\n    if (isString(raw)) {\n        return escapeHtml(raw);\n    }\n    const styles = normalizeStyle(raw);\n    return escapeHtml(stringifyStyle(styles));\n}\n\nfunction ssrRenderComponent(comp, props = null, children = null, parentComponent = null, slotScopeId) {\n    return renderComponentVNode(createVNode(comp, props, children), parentComponent, slotScopeId);\n}\n\nfunction ssrRenderSlot(slots, slotName, slotProps, fallbackRenderFn, push, parentComponent, slotScopeId) {\n    // template-compiled slots are always rendered as fragments\n    push(`<!--[-->`);\n    ssrRenderSlotInner(slots, slotName, slotProps, fallbackRenderFn, push, parentComponent, slotScopeId);\n    push(`<!--]-->`);\n}\nfunction ssrRenderSlotInner(slots, slotName, slotProps, fallbackRenderFn, push, parentComponent, slotScopeId, transition) {\n    const slotFn = slots[slotName];\n    if (slotFn) {\n        const slotBuffer = [];\n        const bufferedPush = (item) => {\n            slotBuffer.push(item);\n        };\n        const ret = slotFn(slotProps, bufferedPush, parentComponent, slotScopeId ? ' ' + slotScopeId : '');\n        if (isArray(ret)) {\n            // normal slot\n            renderVNodeChildren(push, ret, parentComponent, slotScopeId);\n        }\n        else {\n            // ssr slot.\n            // check if the slot renders all comments, in which case use the fallback\n            let isEmptySlot = true;\n            if (transition) {\n                isEmptySlot = false;\n            }\n            else {\n                for (let i = 0; i < slotBuffer.length; i++) {\n                    if (!isComment(slotBuffer[i])) {\n                        isEmptySlot = false;\n                        break;\n                    }\n                }\n            }\n            if (isEmptySlot) {\n                if (fallbackRenderFn) {\n                    fallbackRenderFn();\n                }\n            }\n            else {\n                for (let i = 0; i < slotBuffer.length; i++) {\n                    push(slotBuffer[i]);\n                }\n            }\n        }\n    }\n    else if (fallbackRenderFn) {\n        fallbackRenderFn();\n    }\n}\nconst commentTestRE = /^<!--.*-->$/s;\nconst commentRE = /<!--[^]*?-->/gm;\nfunction isComment(item) {\n    if (typeof item !== 'string' || !commentTestRE.test(item))\n        return false;\n    // if item is '<!---->' or '<!--[-->' or '<!--]-->', return true directly\n    if (item.length <= 8)\n        return true;\n    return !item.replace(commentRE, '').trim();\n}\n\nfunction ssrRenderTeleport(parentPush, contentRenderFn, target, disabled, parentComponent) {\n    parentPush('<!--teleport start-->');\n    const context = parentComponent.appContext.provides[ssrContextKey];\n    const teleportBuffers = context.__teleportBuffers || (context.__teleportBuffers = {});\n    const targetBuffer = teleportBuffers[target] || (teleportBuffers[target] = []);\n    // record current index of the target buffer to handle nested teleports\n    // since the parent needs to be rendered before the child\n    const bufferIndex = targetBuffer.length;\n    let teleportContent;\n    if (disabled) {\n        contentRenderFn(parentPush);\n        teleportContent = `<!--teleport anchor-->`;\n    }\n    else {\n        const { getBuffer, push } = createBuffer();\n        contentRenderFn(push);\n        push(`<!--teleport anchor-->`);\n        teleportContent = getBuffer();\n    }\n    targetBuffer.splice(bufferIndex, 0, teleportContent);\n    parentPush('<!--teleport end-->');\n}\n\nfunction ssrInterpolate(value) {\n    return escapeHtml(toDisplayString(value));\n}\n\nfunction ssrRenderList(source, renderItem) {\n    if (isArray(source) || isString(source)) {\n        for (let i = 0, l = source.length; i < l; i++) {\n            renderItem(source[i], i);\n        }\n    }\n    else if (typeof source === 'number') {\n        if (!Number.isInteger(source)) {\n            warn(`The v-for range expect an integer value but got ${source}.`);\n            return;\n        }\n        for (let i = 0; i < source; i++) {\n            renderItem(i + 1, i);\n        }\n    }\n    else if (isObject(source)) {\n        if (source[Symbol.iterator]) {\n            const arr = Array.from(source);\n            for (let i = 0, l = arr.length; i < l; i++) {\n                renderItem(arr[i], i);\n            }\n        }\n        else {\n            const keys = Object.keys(source);\n            for (let i = 0, l = keys.length; i < l; i++) {\n                const key = keys[i];\n                renderItem(source[key], key, i);\n            }\n        }\n    }\n}\n\nasync function ssrRenderSuspense(push, { default: renderContent }) {\n    if (renderContent) {\n        renderContent();\n    }\n    else {\n        push(`<!---->`);\n    }\n}\n\nfunction ssrGetDirectiveProps(instance, dir, value, arg, modifiers = {}) {\n    if (typeof dir !== 'function' && dir.getSSRProps) {\n        return (dir.getSSRProps({\n            dir,\n            instance,\n            value,\n            oldValue: undefined,\n            arg,\n            modifiers\n        }, null) || {});\n    }\n    return {};\n}\n\nconst ssrLooseEqual = looseEqual;\nfunction ssrLooseContain(arr, value) {\n    return looseIndexOf(arr, value) > -1;\n}\n// for <input :type=\"type\" v-model=\"model\" value=\"value\">\nfunction ssrRenderDynamicModel(type, model, value) {\n    switch (type) {\n        case 'radio':\n            return looseEqual(model, value) ? ' checked' : '';\n        case 'checkbox':\n            return (isArray(model) ? ssrLooseContain(model, value) : model)\n                ? ' checked'\n                : '';\n        default:\n            // text types\n            return ssrRenderAttr('value', model);\n    }\n}\n// for <input v-bind=\"obj\" v-model=\"model\">\nfunction ssrGetDynamicModelProps(existingProps = {}, model) {\n    const { type, value } = existingProps;\n    switch (type) {\n        case 'radio':\n            return looseEqual(model, value) ? { checked: true } : null;\n        case 'checkbox':\n            return (isArray(model) ? ssrLooseContain(model, value) : model)\n                ? { checked: true }\n                : null;\n        default:\n            // text types\n            return { value: model };\n    }\n}\n\nfunction ssrCompile(template, instance) {\n    // TODO: this branch should now work in ESM builds, enable it in a minor\n    {\n        throw new Error(`On-the-fly template compilation is not supported in the ESM build of ` +\n            `@vue/server-renderer. All templates must be pre-compiled into ` +\n            `render functions.`);\n    }\n}\n\nconst { createComponentInstance, setCurrentRenderingInstance, setupComponent, renderComponentRoot, normalizeVNode } = ssrUtils;\n// Each component has a buffer array.\n// A buffer array can contain one of the following:\n// - plain string\n// - A resolved buffer (recursive arrays of strings that can be unrolled\n//   synchronously)\n// - An async buffer (a Promise that resolves to a resolved buffer)\nfunction createBuffer() {\n    let appendable = false;\n    const buffer = [];\n    return {\n        getBuffer() {\n            // Return static buffer and await on items during unroll stage\n            return buffer;\n        },\n        push(item) {\n            const isStringItem = isString(item);\n            if (appendable && isStringItem) {\n                buffer[buffer.length - 1] += item;\n            }\n            else {\n                buffer.push(item);\n            }\n            appendable = isStringItem;\n            if (isPromise(item) || (isArray(item) && item.hasAsync)) {\n                // promise, or child buffer with async, mark as async.\n                // this allows skipping unnecessary await ticks during unroll stage\n                buffer.hasAsync = true;\n            }\n        }\n    };\n}\nfunction renderComponentVNode(vnode, parentComponent = null, slotScopeId) {\n    const instance = createComponentInstance(vnode, parentComponent, null);\n    const res = setupComponent(instance, true /* isSSR */);\n    const hasAsyncSetup = isPromise(res);\n    const prefetches = instance.sp; /* LifecycleHooks.SERVER_PREFETCH */\n    if (hasAsyncSetup || prefetches) {\n        let p = hasAsyncSetup\n            ? res\n            : Promise.resolve();\n        if (prefetches) {\n            p = p\n                .then(() => Promise.all(prefetches.map(prefetch => prefetch.call(instance.proxy))))\n                // Note: error display is already done by the wrapped lifecycle hook function.\n                .catch(() => { });\n        }\n        return p.then(() => renderComponentSubTree(instance, slotScopeId));\n    }\n    else {\n        return renderComponentSubTree(instance, slotScopeId);\n    }\n}\nfunction renderComponentSubTree(instance, slotScopeId) {\n    const comp = instance.type;\n    const { getBuffer, push } = createBuffer();\n    if (isFunction(comp)) {\n        let root = renderComponentRoot(instance);\n        // #5817 scope ID attrs not falling through if functional component doesn't\n        // have props\n        if (!comp.props) {\n            for (const key in instance.attrs) {\n                if (key.startsWith(`data-v-`)) {\n                    (root.props || (root.props = {}))[key] = ``;\n                }\n            }\n        }\n        renderVNode(push, (instance.subTree = root), instance, slotScopeId);\n    }\n    else {\n        if ((!instance.render || instance.render === NOOP) &&\n            !instance.ssrRender &&\n            !comp.ssrRender &&\n            isString(comp.template)) {\n            comp.ssrRender = ssrCompile(comp.template);\n        }\n        // perf: enable caching of computed getters during render\n        // since there cannot be state mutations during render.\n        for (const e of instance.scope.effects) {\n            if (e.computed)\n                e.computed._cacheable = true;\n        }\n        const ssrRender = instance.ssrRender || comp.ssrRender;\n        if (ssrRender) {\n            // optimized\n            // resolve fallthrough attrs\n            let attrs = instance.inheritAttrs !== false ? instance.attrs : undefined;\n            let hasCloned = false;\n            let cur = instance;\n            while (true) {\n                const scopeId = cur.vnode.scopeId;\n                if (scopeId) {\n                    if (!hasCloned) {\n                        attrs = { ...attrs };\n                        hasCloned = true;\n                    }\n                    attrs[scopeId] = '';\n                }\n                const parent = cur.parent;\n                if (parent && parent.subTree && parent.subTree === cur.vnode) {\n                    // parent is a non-SSR compiled component and is rendering this\n                    // component as root. inherit its scopeId if present.\n                    cur = parent;\n                }\n                else {\n                    break;\n                }\n            }\n            if (slotScopeId) {\n                if (!hasCloned)\n                    attrs = { ...attrs };\n                attrs[slotScopeId.trim()] = '';\n            }\n            // set current rendering instance for asset resolution\n            const prev = setCurrentRenderingInstance(instance);\n            try {\n                ssrRender(instance.proxy, push, instance, attrs, \n                // compiler-optimized bindings\n                instance.props, instance.setupState, instance.data, instance.ctx);\n            }\n            finally {\n                setCurrentRenderingInstance(prev);\n            }\n        }\n        else if (instance.render && instance.render !== NOOP) {\n            renderVNode(push, (instance.subTree = renderComponentRoot(instance)), instance, slotScopeId);\n        }\n        else {\n            const componentName = comp.name || comp.__file || `<Anonymous>`;\n            warn(`Component ${componentName} is missing template or render function.`);\n            push(`<!---->`);\n        }\n    }\n    return getBuffer();\n}\nfunction renderVNode(push, vnode, parentComponent, slotScopeId) {\n    const { type, shapeFlag, children } = vnode;\n    switch (type) {\n        case Text:\n            push(escapeHtml(children));\n            break;\n        case Comment:\n            push(children ? `<!--${escapeHtmlComment(children)}-->` : `<!---->`);\n            break;\n        case Static:\n            push(children);\n            break;\n        case Fragment:\n            if (vnode.slotScopeIds) {\n                slotScopeId =\n                    (slotScopeId ? slotScopeId + ' ' : '') + vnode.slotScopeIds.join(' ');\n            }\n            push(`<!--[-->`); // open\n            renderVNodeChildren(push, children, parentComponent, slotScopeId);\n            push(`<!--]-->`); // close\n            break;\n        default:\n            if (shapeFlag & 1 /* ShapeFlags.ELEMENT */) {\n                renderElementVNode(push, vnode, parentComponent, slotScopeId);\n            }\n            else if (shapeFlag & 6 /* ShapeFlags.COMPONENT */) {\n                push(renderComponentVNode(vnode, parentComponent, slotScopeId));\n            }\n            else if (shapeFlag & 64 /* ShapeFlags.TELEPORT */) {\n                renderTeleportVNode(push, vnode, parentComponent, slotScopeId);\n            }\n            else if (shapeFlag & 128 /* ShapeFlags.SUSPENSE */) {\n                renderVNode(push, vnode.ssContent, parentComponent, slotScopeId);\n            }\n            else {\n                warn('[@vue/server-renderer] Invalid VNode type:', type, `(${typeof type})`);\n            }\n    }\n}\nfunction renderVNodeChildren(push, children, parentComponent, slotScopeId) {\n    for (let i = 0; i < children.length; i++) {\n        renderVNode(push, normalizeVNode(children[i]), parentComponent, slotScopeId);\n    }\n}\nfunction renderElementVNode(push, vnode, parentComponent, slotScopeId) {\n    const tag = vnode.type;\n    let { props, children, shapeFlag, scopeId, dirs } = vnode;\n    let openTag = `<${tag}`;\n    if (dirs) {\n        props = applySSRDirectives(vnode, props, dirs);\n    }\n    if (props) {\n        openTag += ssrRenderAttrs(props, tag);\n    }\n    if (scopeId) {\n        openTag += ` ${scopeId}`;\n    }\n    // inherit parent chain scope id if this is the root node\n    let curParent = parentComponent;\n    let curVnode = vnode;\n    while (curParent && curVnode === curParent.subTree) {\n        curVnode = curParent.vnode;\n        if (curVnode.scopeId) {\n            openTag += ` ${curVnode.scopeId}`;\n        }\n        curParent = curParent.parent;\n    }\n    if (slotScopeId) {\n        openTag += ` ${slotScopeId}`;\n    }\n    push(openTag + `>`);\n    if (!isVoidTag(tag)) {\n        let hasChildrenOverride = false;\n        if (props) {\n            if (props.innerHTML) {\n                hasChildrenOverride = true;\n                push(props.innerHTML);\n            }\n            else if (props.textContent) {\n                hasChildrenOverride = true;\n                push(escapeHtml(props.textContent));\n            }\n            else if (tag === 'textarea' && props.value) {\n                hasChildrenOverride = true;\n                push(escapeHtml(props.value));\n            }\n        }\n        if (!hasChildrenOverride) {\n            if (shapeFlag & 8 /* ShapeFlags.TEXT_CHILDREN */) {\n                push(escapeHtml(children));\n            }\n            else if (shapeFlag & 16 /* ShapeFlags.ARRAY_CHILDREN */) {\n                renderVNodeChildren(push, children, parentComponent, slotScopeId);\n            }\n        }\n        push(`</${tag}>`);\n    }\n}\nfunction applySSRDirectives(vnode, rawProps, dirs) {\n    const toMerge = [];\n    for (let i = 0; i < dirs.length; i++) {\n        const binding = dirs[i];\n        const { dir: { getSSRProps } } = binding;\n        if (getSSRProps) {\n            const props = getSSRProps(binding, vnode);\n            if (props)\n                toMerge.push(props);\n        }\n    }\n    return mergeProps(rawProps || {}, ...toMerge);\n}\nfunction renderTeleportVNode(push, vnode, parentComponent, slotScopeId) {\n    const target = vnode.props && vnode.props.to;\n    const disabled = vnode.props && vnode.props.disabled;\n    if (!target) {\n        if (!disabled) {\n            warn(`[@vue/server-renderer] Teleport is missing target prop.`);\n        }\n        return [];\n    }\n    if (!isString(target)) {\n        warn(`[@vue/server-renderer] Teleport target must be a query selector string.`);\n        return [];\n    }\n    ssrRenderTeleport(push, push => {\n        renderVNodeChildren(push, vnode.children, parentComponent, slotScopeId);\n    }, target, disabled || disabled === '', parentComponent);\n}\n\nconst { isVNode: isVNode$1 } = ssrUtils;\nasync function unrollBuffer$1(buffer) {\n    if (buffer.hasAsync) {\n        let ret = '';\n        for (let i = 0; i < buffer.length; i++) {\n            let item = buffer[i];\n            if (isPromise(item)) {\n                item = await item;\n            }\n            if (isString(item)) {\n                ret += item;\n            }\n            else {\n                ret += await unrollBuffer$1(item);\n            }\n        }\n        return ret;\n    }\n    else {\n        // sync buffer can be more efficiently unrolled without unnecessary await\n        // ticks\n        return unrollBufferSync$1(buffer);\n    }\n}\nfunction unrollBufferSync$1(buffer) {\n    let ret = '';\n    for (let i = 0; i < buffer.length; i++) {\n        let item = buffer[i];\n        if (isString(item)) {\n            ret += item;\n        }\n        else {\n            // since this is a sync buffer, child buffers are never promises\n            ret += unrollBufferSync$1(item);\n        }\n    }\n    return ret;\n}\nasync function renderToString(input, context = {}) {\n    if (isVNode$1(input)) {\n        // raw vnode, wrap with app (for context)\n        return renderToString(createApp({ render: () => input }), context);\n    }\n    // rendering an app\n    const vnode = createVNode(input._component, input._props);\n    vnode.appContext = input._context;\n    // provide the ssr context to the tree\n    input.provide(ssrContextKey, context);\n    const buffer = await renderComponentVNode(vnode);\n    const result = await unrollBuffer$1(buffer);\n    await resolveTeleports(context);\n    if (context.__watcherHandles) {\n        for (const unwatch of context.__watcherHandles) {\n            unwatch();\n        }\n    }\n    return result;\n}\nasync function resolveTeleports(context) {\n    if (context.__teleportBuffers) {\n        context.teleports = context.teleports || {};\n        for (const key in context.__teleportBuffers) {\n            // note: it's OK to await sequentially here because the Promises were\n            // created eagerly in parallel.\n            context.teleports[key] = await unrollBuffer$1(await Promise.all([context.__teleportBuffers[key]]));\n        }\n    }\n}\n\nconst { isVNode } = ssrUtils;\nasync function unrollBuffer(buffer, stream) {\n    if (buffer.hasAsync) {\n        for (let i = 0; i < buffer.length; i++) {\n            let item = buffer[i];\n            if (isPromise(item)) {\n                item = await item;\n            }\n            if (isString(item)) {\n                stream.push(item);\n            }\n            else {\n                await unrollBuffer(item, stream);\n            }\n        }\n    }\n    else {\n        // sync buffer can be more efficiently unrolled without unnecessary await\n        // ticks\n        unrollBufferSync(buffer, stream);\n    }\n}\nfunction unrollBufferSync(buffer, stream) {\n    for (let i = 0; i < buffer.length; i++) {\n        let item = buffer[i];\n        if (isString(item)) {\n            stream.push(item);\n        }\n        else {\n            // since this is a sync buffer, child buffers are never promises\n            unrollBufferSync(item, stream);\n        }\n    }\n}\nfunction renderToSimpleStream(input, context, stream) {\n    if (isVNode(input)) {\n        // raw vnode, wrap with app (for context)\n        return renderToSimpleStream(createApp({ render: () => input }), context, stream);\n    }\n    // rendering an app\n    const vnode = createVNode(input._component, input._props);\n    vnode.appContext = input._context;\n    // provide the ssr context to the tree\n    input.provide(ssrContextKey, context);\n    Promise.resolve(renderComponentVNode(vnode))\n        .then(buffer => unrollBuffer(buffer, stream))\n        .then(() => resolveTeleports(context))\n        .then(() => {\n        if (context.__watcherHandles) {\n            for (const unwatch of context.__watcherHandles) {\n                unwatch();\n            }\n        }\n    })\n        .then(() => stream.push(null))\n        .catch(error => {\n        stream.destroy(error);\n    });\n    return stream;\n}\n/**\n * @deprecated\n */\nfunction renderToStream(input, context = {}) {\n    console.warn(`[@vue/server-renderer] renderToStream is deprecated - use renderToNodeStream instead.`);\n    return renderToNodeStream(input, context);\n}\nfunction renderToNodeStream(input, context = {}) {\n    {\n        throw new Error(`ESM build of renderToStream() does not support renderToNodeStream(). ` +\n            `Use pipeToNodeWritable() with an existing Node.js Writable stream ` +\n            `instance instead.`);\n    }\n}\nfunction pipeToNodeWritable(input, context = {}, writable) {\n    renderToSimpleStream(input, context, {\n        push(content) {\n            if (content != null) {\n                writable.write(content);\n            }\n            else {\n                writable.end();\n            }\n        },\n        destroy(err) {\n            writable.destroy(err);\n        }\n    });\n}\nfunction renderToWebStream(input, context = {}) {\n    if (typeof ReadableStream !== 'function') {\n        throw new Error(`ReadableStream constructor is not available in the global scope. ` +\n            `If the target environment does support web streams, consider using ` +\n            `pipeToWebWritable() with an existing WritableStream instance instead.`);\n    }\n    const encoder = new TextEncoder();\n    let cancelled = false;\n    return new ReadableStream({\n        start(controller) {\n            renderToSimpleStream(input, context, {\n                push(content) {\n                    if (cancelled)\n                        return;\n                    if (content != null) {\n                        controller.enqueue(encoder.encode(content));\n                    }\n                    else {\n                        controller.close();\n                    }\n                },\n                destroy(err) {\n                    controller.error(err);\n                }\n            });\n        },\n        cancel() {\n            cancelled = true;\n        }\n    });\n}\nfunction pipeToWebWritable(input, context = {}, writable) {\n    const writer = writable.getWriter();\n    const encoder = new TextEncoder();\n    // #4287 CloudFlare workers do not implement `ready` property\n    let hasReady = false;\n    try {\n        hasReady = isPromise(writer.ready);\n    }\n    catch (e) { }\n    renderToSimpleStream(input, context, {\n        async push(content) {\n            if (hasReady) {\n                await writer.ready;\n            }\n            if (content != null) {\n                return writer.write(encoder.encode(content));\n            }\n            else {\n                return writer.close();\n            }\n        },\n        destroy(err) {\n            // TODO better error handling?\n            console.log(err);\n            writer.close();\n        }\n    });\n}\n\ninitDirectivesForSSR();\n\nexport { pipeToNodeWritable, pipeToWebWritable, renderToNodeStream, renderToSimpleStream, renderToStream, renderToString, renderToWebStream, ssrGetDirectiveProps, ssrGetDynamicModelProps, includeBooleanAttr as ssrIncludeBooleanAttr, ssrInterpolate, ssrLooseContain, ssrLooseEqual, ssrRenderAttr, ssrRenderAttrs, ssrRenderClass, ssrRenderComponent, ssrRenderDynamicAttr, ssrRenderDynamicModel, ssrRenderList, ssrRenderSlot, ssrRenderSlotInner, ssrRenderStyle, ssrRenderSuspense, ssrRenderTeleport, renderVNode as ssrRenderVNode };\n/LICENSE\u0004CThe MIT License (MIT)\n\nCopyright (c) 2018-present, Yuxi (Evan) You\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n!/dist/server-renderer.cjs.prod.jsrJ'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar Vue = require('vue');\nvar shared = require('@vue/shared');\nvar compilerSsr = require('@vue/compiler-ssr');\n\nfunction _interopNamespaceDefault(e) {\n  var n = Object.create(null);\n  if (e) {\n    for (var k in e) {\n      n[k] = e[k];\n    }\n  }\n  n.default = e;\n  return Object.freeze(n);\n}\n\nvar Vue__namespace = /*#__PURE__*/_interopNamespaceDefault(Vue);\n\n// leading comma for empty string \"\"\nconst shouldIgnoreProp = shared.makeMap(`,key,ref,innerHTML,textContent,ref_key,ref_for`);\nfunction ssrRenderAttrs(props, tag) {\n    let ret = '';\n    for (const key in props) {\n        if (shouldIgnoreProp(key) ||\n            shared.isOn(key) ||\n            (tag === 'textarea' && key === 'value')) {\n            continue;\n        }\n        const value = props[key];\n        if (key === 'class') {\n            ret += ` class=\"${ssrRenderClass(value)}\"`;\n        }\n        else if (key === 'style') {\n            ret += ` style=\"${ssrRenderStyle(value)}\"`;\n        }\n        else {\n            ret += ssrRenderDynamicAttr(key, value, tag);\n        }\n    }\n    return ret;\n}\n// render an attr with dynamic (unknown) key.\nfunction ssrRenderDynamicAttr(key, value, tag) {\n    if (!isRenderableValue(value)) {\n        return ``;\n    }\n    const attrKey = tag && (tag.indexOf('-') > 0 || shared.isSVGTag(tag))\n        ? key // preserve raw name on custom elements and svg\n        : shared.propsToAttrMap[key] || key.toLowerCase();\n    if (shared.isBooleanAttr(attrKey)) {\n        return shared.includeBooleanAttr(value) ? ` ${attrKey}` : ``;\n    }\n    else if (shared.isSSRSafeAttrName(attrKey)) {\n        return value === '' ? ` ${attrKey}` : ` ${attrKey}=\"${shared.escapeHtml(value)}\"`;\n    }\n    else {\n        console.warn(`[@vue/server-renderer] Skipped rendering unsafe attribute name: ${attrKey}`);\n        return ``;\n    }\n}\n// Render a v-bind attr with static key. The key is pre-processed at compile\n// time and we only need to check and escape value.\nfunction ssrRenderAttr(key, value) {\n    if (!isRenderableValue(value)) {\n        return ``;\n    }\n    return ` ${key}=\"${shared.escapeHtml(value)}\"`;\n}\nfunction isRenderableValue(value) {\n    if (value == null) {\n        return false;\n    }\n    const type = typeof value;\n    return type === 'string' || type === 'number' || type === 'boolean';\n}\nfunction ssrRenderClass(raw) {\n    return shared.escapeHtml(shared.normalizeClass(raw));\n}\nfunction ssrRenderStyle(raw) {\n    if (!raw) {\n        return '';\n    }\n    if (shared.isString(raw)) {\n        return shared.escapeHtml(raw);\n    }\n    const styles = shared.normalizeStyle(raw);\n    return shared.escapeHtml(shared.stringifyStyle(styles));\n}\n\nfunction ssrRenderComponent(comp, props = null, children = null, parentComponent = null, slotScopeId) {\n    return renderComponentVNode(Vue.createVNode(comp, props, children), parentComponent, slotScopeId);\n}\n\nfunction ssrRenderSlot(slots, slotName, slotProps, fallbackRenderFn, push, parentComponent, slotScopeId) {\n    // template-compiled slots are always rendered as fragments\n    push(`<!--[-->`);\n    ssrRenderSlotInner(slots, slotName, slotProps, fallbackRenderFn, push, parentComponent, slotScopeId);\n    push(`<!--]-->`);\n}\nfunction ssrRenderSlotInner(slots, slotName, slotProps, fallbackRenderFn, push, parentComponent, slotScopeId, transition) {\n    const slotFn = slots[slotName];\n    if (slotFn) {\n        const slotBuffer = [];\n        const bufferedPush = (item) => {\n            slotBuffer.push(item);\n        };\n        const ret = slotFn(slotProps, bufferedPush, parentComponent, slotScopeId ? ' ' + slotScopeId : '');\n        if (shared.isArray(ret)) {\n            // normal slot\n            renderVNodeChildren(push, ret, parentComponent, slotScopeId);\n        }\n        else {\n            // ssr slot.\n            // check if the slot renders all comments, in which case use the fallback\n            let isEmptySlot = true;\n            if (transition) {\n                isEmptySlot = false;\n            }\n            else {\n                for (let i = 0; i < slotBuffer.length; i++) {\n                    if (!isComment(slotBuffer[i])) {\n                        isEmptySlot = false;\n                        break;\n                    }\n                }\n            }\n            if (isEmptySlot) {\n                if (fallbackRenderFn) {\n                    fallbackRenderFn();\n                }\n            }\n            else {\n                for (let i = 0; i < slotBuffer.length; i++) {\n                    push(slotBuffer[i]);\n                }\n            }\n        }\n    }\n    else if (fallbackRenderFn) {\n        fallbackRenderFn();\n    }\n}\nconst commentTestRE = /^<!--.*-->$/s;\nconst commentRE = /<!--[^]*?-->/gm;\nfunction isComment(item) {\n    if (typeof item !== 'string' || !commentTestRE.test(item))\n        return false;\n    // if item is '<!---->' or '<!--[-->' or '<!--]-->', return true directly\n    if (item.length <= 8)\n        return true;\n    return !item.replace(commentRE, '').trim();\n}\n\nfunction ssrRenderTeleport(parentPush, contentRenderFn, target, disabled, parentComponent) {\n    parentPush('<!--teleport start-->');\n    const context = parentComponent.appContext.provides[Vue.ssrContextKey];\n    const teleportBuffers = context.__teleportBuffers || (context.__teleportBuffers = {});\n    const targetBuffer = teleportBuffers[target] || (teleportBuffers[target] = []);\n    // record current index of the target buffer to handle nested teleports\n    // since the parent needs to be rendered before the child\n    const bufferIndex = targetBuffer.length;\n    let teleportContent;\n    if (disabled) {\n        contentRenderFn(parentPush);\n        teleportContent = `<!--teleport anchor-->`;\n    }\n    else {\n        const { getBuffer, push } = createBuffer();\n        contentRenderFn(push);\n        push(`<!--teleport anchor-->`);\n        teleportContent = getBuffer();\n    }\n    targetBuffer.splice(bufferIndex, 0, teleportContent);\n    parentPush('<!--teleport end-->');\n}\n\nfunction ssrInterpolate(value) {\n    return shared.escapeHtml(shared.toDisplayString(value));\n}\n\nfunction ssrRenderList(source, renderItem) {\n    if (shared.isArray(source) || shared.isString(source)) {\n        for (let i = 0, l = source.length; i < l; i++) {\n            renderItem(source[i], i);\n        }\n    }\n    else if (typeof source === 'number') {\n        for (let i = 0; i < source; i++) {\n            renderItem(i + 1, i);\n        }\n    }\n    else if (shared.isObject(source)) {\n        if (source[Symbol.iterator]) {\n            const arr = Array.from(source);\n            for (let i = 0, l = arr.length; i < l; i++) {\n                renderItem(arr[i], i);\n            }\n        }\n        else {\n            const keys = Object.keys(source);\n            for (let i = 0, l = keys.length; i < l; i++) {\n                const key = keys[i];\n                renderItem(source[key], key, i);\n            }\n        }\n    }\n}\n\nasync function ssrRenderSuspense(push, { default: renderContent }) {\n    if (renderContent) {\n        renderContent();\n    }\n    else {\n        push(`<!---->`);\n    }\n}\n\nfunction ssrGetDirectiveProps(instance, dir, value, arg, modifiers = {}) {\n    if (typeof dir !== 'function' && dir.getSSRProps) {\n        return (dir.getSSRProps({\n            dir,\n            instance,\n            value,\n            oldValue: undefined,\n            arg,\n            modifiers\n        }, null) || {});\n    }\n    return {};\n}\n\nconst ssrLooseEqual = shared.looseEqual;\nfunction ssrLooseContain(arr, value) {\n    return shared.looseIndexOf(arr, value) > -1;\n}\n// for <input :type=\"type\" v-model=\"model\" value=\"value\">\nfunction ssrRenderDynamicModel(type, model, value) {\n    switch (type) {\n        case 'radio':\n            return shared.looseEqual(model, value) ? ' checked' : '';\n        case 'checkbox':\n            return (shared.isArray(model) ? ssrLooseContain(model, value) : model)\n                ? ' checked'\n                : '';\n        default:\n            // text types\n            return ssrRenderAttr('value', model);\n    }\n}\n// for <input v-bind=\"obj\" v-model=\"model\">\nfunction ssrGetDynamicModelProps(existingProps = {}, model) {\n    const { type, value } = existingProps;\n    switch (type) {\n        case 'radio':\n            return shared.looseEqual(model, value) ? { checked: true } : null;\n        case 'checkbox':\n            return (shared.isArray(model) ? ssrLooseContain(model, value) : model)\n                ? { checked: true }\n                : null;\n        default:\n            // text types\n            return { value: model };\n    }\n}\n\n// internal runtime helpers\n\nvar helpers = /*#__PURE__*/Object.freeze({\n  __proto__: null,\n  ssrGetDirectiveProps: ssrGetDirectiveProps,\n  ssrGetDynamicModelProps: ssrGetDynamicModelProps,\n  ssrIncludeBooleanAttr: shared.includeBooleanAttr,\n  ssrInterpolate: ssrInterpolate,\n  ssrLooseContain: ssrLooseContain,\n  ssrLooseEqual: ssrLooseEqual,\n  ssrRenderAttr: ssrRenderAttr,\n  ssrRenderAttrs: ssrRenderAttrs,\n  ssrRenderClass: ssrRenderClass,\n  ssrRenderComponent: ssrRenderComponent,\n  ssrRenderDynamicAttr: ssrRenderDynamicAttr,\n  ssrRenderDynamicModel: ssrRenderDynamicModel,\n  ssrRenderList: ssrRenderList,\n  ssrRenderSlot: ssrRenderSlot,\n  ssrRenderSlotInner: ssrRenderSlotInner,\n  ssrRenderStyle: ssrRenderStyle,\n  ssrRenderSuspense: ssrRenderSuspense,\n  ssrRenderTeleport: ssrRenderTeleport,\n  ssrRenderVNode: renderVNode\n});\n\nconst compileCache = Object.create(null);\nfunction ssrCompile(template, instance) {\n    // TODO: This is copied from runtime-core/src/component.ts and should probably be refactored\n    const Component = instance.type;\n    const { isCustomElement, compilerOptions } = instance.appContext.config;\n    const { delimiters, compilerOptions: componentCompilerOptions } = Component;\n    const finalCompilerOptions = shared.extend(shared.extend({\n        isCustomElement,\n        delimiters\n    }, compilerOptions), componentCompilerOptions);\n    finalCompilerOptions.isCustomElement =\n        finalCompilerOptions.isCustomElement || shared.NO;\n    finalCompilerOptions.isNativeTag = finalCompilerOptions.isNativeTag || shared.NO;\n    const cacheKey = JSON.stringify({\n        template,\n        compilerOptions: finalCompilerOptions\n    }, (key, value) => {\n        return shared.isFunction(value) ? value.toString() : value;\n    });\n    const cached = compileCache[cacheKey];\n    if (cached) {\n        return cached;\n    }\n    finalCompilerOptions.onError = (err) => {\n        {\n            throw err;\n        }\n    };\n    const { code } = compilerSsr.compile(template, finalCompilerOptions);\n    const requireMap = {\n        vue: Vue__namespace,\n        'vue/server-renderer': helpers\n    };\n    const fakeRequire = (id) => requireMap[id];\n    return (compileCache[cacheKey] = Function('require', code)(fakeRequire));\n}\n\nconst { createComponentInstance, setCurrentRenderingInstance, setupComponent, renderComponentRoot, normalizeVNode } = Vue.ssrUtils;\n// Each component has a buffer array.\n// A buffer array can contain one of the following:\n// - plain string\n// - A resolved buffer (recursive arrays of strings that can be unrolled\n//   synchronously)\n// - An async buffer (a Promise that resolves to a resolved buffer)\nfunction createBuffer() {\n    let appendable = false;\n    const buffer = [];\n    return {\n        getBuffer() {\n            // Return static buffer and await on items during unroll stage\n            return buffer;\n        },\n        push(item) {\n            const isStringItem = shared.isString(item);\n            if (appendable && isStringItem) {\n                buffer[buffer.length - 1] += item;\n            }\n            else {\n                buffer.push(item);\n            }\n            appendable = isStringItem;\n            if (shared.isPromise(item) || (shared.isArray(item) && item.hasAsync)) {\n                // promise, or child buffer with async, mark as async.\n                // this allows skipping unnecessary await ticks during unroll stage\n                buffer.hasAsync = true;\n            }\n        }\n    };\n}\nfunction renderComponentVNode(vnode, parentComponent = null, slotScopeId) {\n    const instance = createComponentInstance(vnode, parentComponent, null);\n    const res = setupComponent(instance, true /* isSSR */);\n    const hasAsyncSetup = shared.isPromise(res);\n    const prefetches = instance.sp; /* LifecycleHooks.SERVER_PREFETCH */\n    if (hasAsyncSetup || prefetches) {\n        let p = hasAsyncSetup\n            ? res\n            : Promise.resolve();\n        if (prefetches) {\n            p = p\n                .then(() => Promise.all(prefetches.map(prefetch => prefetch.call(instance.proxy))))\n                // Note: error display is already done by the wrapped lifecycle hook function.\n                .catch(() => { });\n        }\n        return p.then(() => renderComponentSubTree(instance, slotScopeId));\n    }\n    else {\n        return renderComponentSubTree(instance, slotScopeId);\n    }\n}\nfunction renderComponentSubTree(instance, slotScopeId) {\n    const comp = instance.type;\n    const { getBuffer, push } = createBuffer();\n    if (shared.isFunction(comp)) {\n        let root = renderComponentRoot(instance);\n        // #5817 scope ID attrs not falling through if functional component doesn't\n        // have props\n        if (!comp.props) {\n            for (const key in instance.attrs) {\n                if (key.startsWith(`data-v-`)) {\n                    (root.props || (root.props = {}))[key] = ``;\n                }\n            }\n        }\n        renderVNode(push, (instance.subTree = root), instance, slotScopeId);\n    }\n    else {\n        if ((!instance.render || instance.render === shared.NOOP) &&\n            !instance.ssrRender &&\n            !comp.ssrRender &&\n            shared.isString(comp.template)) {\n            comp.ssrRender = ssrCompile(comp.template, instance);\n        }\n        // perf: enable caching of computed getters during render\n        // since there cannot be state mutations during render.\n        for (const e of instance.scope.effects) {\n            if (e.computed)\n                e.computed._cacheable = true;\n        }\n        const ssrRender = instance.ssrRender || comp.ssrRender;\n        if (ssrRender) {\n            // optimized\n            // resolve fallthrough attrs\n            let attrs = instance.inheritAttrs !== false ? instance.attrs : undefined;\n            let hasCloned = false;\n            let cur = instance;\n            while (true) {\n                const scopeId = cur.vnode.scopeId;\n                if (scopeId) {\n                    if (!hasCloned) {\n                        attrs = { ...attrs };\n                        hasCloned = true;\n                    }\n                    attrs[scopeId] = '';\n                }\n                const parent = cur.parent;\n                if (parent && parent.subTree && parent.subTree === cur.vnode) {\n                    // parent is a non-SSR compiled component and is rendering this\n                    // component as root. inherit its scopeId if present.\n                    cur = parent;\n                }\n                else {\n                    break;\n                }\n            }\n            if (slotScopeId) {\n                if (!hasCloned)\n                    attrs = { ...attrs };\n                attrs[slotScopeId.trim()] = '';\n            }\n            // set current rendering instance for asset resolution\n            const prev = setCurrentRenderingInstance(instance);\n            try {\n                ssrRender(instance.proxy, push, instance, attrs, \n                // compiler-optimized bindings\n                instance.props, instance.setupState, instance.data, instance.ctx);\n            }\n            finally {\n                setCurrentRenderingInstance(prev);\n            }\n        }\n        else if (instance.render && instance.render !== shared.NOOP) {\n            renderVNode(push, (instance.subTree = renderComponentRoot(instance)), instance, slotScopeId);\n        }\n        else {\n            const componentName = comp.name || comp.__file || `<Anonymous>`;\n            Vue.warn(`Component ${componentName} is missing template or render function.`);\n            push(`<!---->`);\n        }\n    }\n    return getBuffer();\n}\nfunction renderVNode(push, vnode, parentComponent, slotScopeId) {\n    const { type, shapeFlag, children } = vnode;\n    switch (type) {\n        case Vue.Text:\n            push(shared.escapeHtml(children));\n            break;\n        case Vue.Comment:\n            push(children ? `<!--${shared.escapeHtmlComment(children)}-->` : `<!---->`);\n            break;\n        case Vue.Static:\n            push(children);\n            break;\n        case Vue.Fragment:\n            if (vnode.slotScopeIds) {\n                slotScopeId =\n                    (slotScopeId ? slotScopeId + ' ' : '') + vnode.slotScopeIds.join(' ');\n            }\n            push(`<!--[-->`); // open\n            renderVNodeChildren(push, children, parentComponent, slotScopeId);\n            push(`<!--]-->`); // close\n            break;\n        default:\n            if (shapeFlag & 1 /* ShapeFlags.ELEMENT */) {\n                renderElementVNode(push, vnode, parentComponent, slotScopeId);\n            }\n            else if (shapeFlag & 6 /* ShapeFlags.COMPONENT */) {\n                push(renderComponentVNode(vnode, parentComponent, slotScopeId));\n            }\n            else if (shapeFlag & 64 /* ShapeFlags.TELEPORT */) {\n                renderTeleportVNode(push, vnode, parentComponent, slotScopeId);\n            }\n            else if (shapeFlag & 128 /* ShapeFlags.SUSPENSE */) {\n                renderVNode(push, vnode.ssContent, parentComponent, slotScopeId);\n            }\n            else {\n                Vue.warn('[@vue/server-renderer] Invalid VNode type:', type, `(${typeof type})`);\n            }\n    }\n}\nfunction renderVNodeChildren(push, children, parentComponent, slotScopeId) {\n    for (let i = 0; i < children.length; i++) {\n        renderVNode(push, normalizeVNode(children[i]), parentComponent, slotScopeId);\n    }\n}\nfunction renderElementVNode(push, vnode, parentComponent, slotScopeId) {\n    const tag = vnode.type;\n    let { props, children, shapeFlag, scopeId, dirs } = vnode;\n    let openTag = `<${tag}`;\n    if (dirs) {\n        props = applySSRDirectives(vnode, props, dirs);\n    }\n    if (props) {\n        openTag += ssrRenderAttrs(props, tag);\n    }\n    if (scopeId) {\n        openTag += ` ${scopeId}`;\n    }\n    // inherit parent chain scope id if this is the root node\n    let curParent = parentComponent;\n    let curVnode = vnode;\n    while (curParent && curVnode === curParent.subTree) {\n        curVnode = curParent.vnode;\n        if (curVnode.scopeId) {\n            openTag += ` ${curVnode.scopeId}`;\n        }\n        curParent = curParent.parent;\n    }\n    if (slotScopeId) {\n        openTag += ` ${slotScopeId}`;\n    }\n    push(openTag + `>`);\n    if (!shared.isVoidTag(tag)) {\n        let hasChildrenOverride = false;\n        if (props) {\n            if (props.innerHTML) {\n                hasChildrenOverride = true;\n                push(props.innerHTML);\n            }\n            else if (props.textContent) {\n                hasChildrenOverride = true;\n                push(shared.escapeHtml(props.textContent));\n            }\n            else if (tag === 'textarea' && props.value) {\n                hasChildrenOverride = true;\n                push(shared.escapeHtml(props.value));\n            }\n        }\n        if (!hasChildrenOverride) {\n            if (shapeFlag & 8 /* ShapeFlags.TEXT_CHILDREN */) {\n                push(shared.escapeHtml(children));\n            }\n            else if (shapeFlag & 16 /* ShapeFlags.ARRAY_CHILDREN */) {\n                renderVNodeChildren(push, children, parentComponent, slotScopeId);\n            }\n        }\n        push(`</${tag}>`);\n    }\n}\nfunction applySSRDirectives(vnode, rawProps, dirs) {\n    const toMerge = [];\n    for (let i = 0; i < dirs.length; i++) {\n        const binding = dirs[i];\n        const { dir: { getSSRProps } } = binding;\n        if (getSSRProps) {\n            const props = getSSRProps(binding, vnode);\n            if (props)\n                toMerge.push(props);\n        }\n    }\n    return Vue.mergeProps(rawProps || {}, ...toMerge);\n}\nfunction renderTeleportVNode(push, vnode, parentComponent, slotScopeId) {\n    const target = vnode.props && vnode.props.to;\n    const disabled = vnode.props && vnode.props.disabled;\n    if (!target) {\n        if (!disabled) {\n            Vue.warn(`[@vue/server-renderer] Teleport is missing target prop.`);\n        }\n        return [];\n    }\n    if (!shared.isString(target)) {\n        Vue.warn(`[@vue/server-renderer] Teleport target must be a query selector string.`);\n        return [];\n    }\n    ssrRenderTeleport(push, push => {\n        renderVNodeChildren(push, vnode.children, parentComponent, slotScopeId);\n    }, target, disabled || disabled === '', parentComponent);\n}\n\nconst { isVNode: isVNode$1 } = Vue.ssrUtils;\nasync function unrollBuffer$1(buffer) {\n    if (buffer.hasAsync) {\n        let ret = '';\n        for (let i = 0; i < buffer.length; i++) {\n            let item = buffer[i];\n            if (shared.isPromise(item)) {\n                item = await item;\n            }\n            if (shared.isString(item)) {\n                ret += item;\n            }\n            else {\n                ret += await unrollBuffer$1(item);\n            }\n        }\n        return ret;\n    }\n    else {\n        // sync buffer can be more efficiently unrolled without unnecessary await\n        // ticks\n        return unrollBufferSync$1(buffer);\n    }\n}\nfunction unrollBufferSync$1(buffer) {\n    let ret = '';\n    for (let i = 0; i < buffer.length; i++) {\n        let item = buffer[i];\n        if (shared.isString(item)) {\n            ret += item;\n        }\n        else {\n            // since this is a sync buffer, child buffers are never promises\n            ret += unrollBufferSync$1(item);\n        }\n    }\n    return ret;\n}\nasync function renderToString(input, context = {}) {\n    if (isVNode$1(input)) {\n        // raw vnode, wrap with app (for context)\n        return renderToString(Vue.createApp({ render: () => input }), context);\n    }\n    // rendering an app\n    const vnode = Vue.createVNode(input._component, input._props);\n    vnode.appContext = input._context;\n    // provide the ssr context to the tree\n    input.provide(Vue.ssrContextKey, context);\n    const buffer = await renderComponentVNode(vnode);\n    const result = await unrollBuffer$1(buffer);\n    await resolveTeleports(context);\n    if (context.__watcherHandles) {\n        for (const unwatch of context.__watcherHandles) {\n            unwatch();\n        }\n    }\n    return result;\n}\nasync function resolveTeleports(context) {\n    if (context.__teleportBuffers) {\n        context.teleports = context.teleports || {};\n        for (const key in context.__teleportBuffers) {\n            // note: it's OK to await sequentially here because the Promises were\n            // created eagerly in parallel.\n            context.teleports[key] = await unrollBuffer$1(await Promise.all([context.__teleportBuffers[key]]));\n        }\n    }\n}\n\nconst { isVNode } = Vue.ssrUtils;\nasync function unrollBuffer(buffer, stream) {\n    if (buffer.hasAsync) {\n        for (let i = 0; i < buffer.length; i++) {\n            let item = buffer[i];\n            if (shared.isPromise(item)) {\n                item = await item;\n            }\n            if (shared.isString(item)) {\n                stream.push(item);\n            }\n            else {\n                await unrollBuffer(item, stream);\n            }\n        }\n    }\n    else {\n        // sync buffer can be more efficiently unrolled without unnecessary await\n        // ticks\n        unrollBufferSync(buffer, stream);\n    }\n}\nfunction unrollBufferSync(buffer, stream) {\n    for (let i = 0; i < buffer.length; i++) {\n        let item = buffer[i];\n        if (shared.isString(item)) {\n            stream.push(item);\n        }\n        else {\n            // since this is a sync buffer, child buffers are never promises\n            unrollBufferSync(item, stream);\n        }\n    }\n}\nfunction renderToSimpleStream(input, context, stream) {\n    if (isVNode(input)) {\n        // raw vnode, wrap with app (for context)\n        return renderToSimpleStream(Vue.createApp({ render: () => input }), context, stream);\n    }\n    // rendering an app\n    const vnode = Vue.createVNode(input._component, input._props);\n    vnode.appContext = input._context;\n    // provide the ssr context to the tree\n    input.provide(Vue.ssrContextKey, context);\n    Promise.resolve(renderComponentVNode(vnode))\n        .then(buffer => unrollBuffer(buffer, stream))\n        .then(() => resolveTeleports(context))\n        .then(() => {\n        if (context.__watcherHandles) {\n            for (const unwatch of context.__watcherHandles) {\n                unwatch();\n            }\n        }\n    })\n        .then(() => stream.push(null))\n        .catch(error => {\n        stream.destroy(error);\n    });\n    return stream;\n}\n/**\n * @deprecated\n */\nfunction renderToStream(input, context = {}) {\n    console.warn(`[@vue/server-renderer] renderToStream is deprecated - use renderToNodeStream instead.`);\n    return renderToNodeStream(input, context);\n}\nfunction renderToNodeStream(input, context = {}) {\n    const stream = new (require('stream').Readable)({ read() { } })\n        ;\n    if (!stream) {\n        throw new Error(`ESM build of renderToStream() does not support renderToNodeStream(). ` +\n            `Use pipeToNodeWritable() with an existing Node.js Writable stream ` +\n            `instance instead.`);\n    }\n    return renderToSimpleStream(input, context, stream);\n}\nfunction pipeToNodeWritable(input, context = {}, writable) {\n    renderToSimpleStream(input, context, {\n        push(content) {\n            if (content != null) {\n                writable.write(content);\n            }\n            else {\n                writable.end();\n            }\n        },\n        destroy(err) {\n            writable.destroy(err);\n        }\n    });\n}\nfunction renderToWebStream(input, context = {}) {\n    if (typeof ReadableStream !== 'function') {\n        throw new Error(`ReadableStream constructor is not available in the global scope. ` +\n            `If the target environment does support web streams, consider using ` +\n            `pipeToWebWritable() with an existing WritableStream instance instead.`);\n    }\n    const encoder = new TextEncoder();\n    let cancelled = false;\n    return new ReadableStream({\n        start(controller) {\n            renderToSimpleStream(input, context, {\n                push(content) {\n                    if (cancelled)\n                        return;\n                    if (content != null) {\n                        controller.enqueue(encoder.encode(content));\n                    }\n                    else {\n                        controller.close();\n                    }\n                },\n                destroy(err) {\n                    controller.error(err);\n                }\n            });\n        },\n        cancel() {\n            cancelled = true;\n        }\n    });\n}\nfunction pipeToWebWritable(input, context = {}, writable) {\n    const writer = writable.getWriter();\n    const encoder = new TextEncoder();\n    // #4287 CloudFlare workers do not implement `ready` property\n    let hasReady = false;\n    try {\n        hasReady = shared.isPromise(writer.ready);\n    }\n    catch (e) { }\n    renderToSimpleStream(input, context, {\n        async push(content) {\n            if (hasReady) {\n                await writer.ready;\n            }\n            if (content != null) {\n                return writer.write(encoder.encode(content));\n            }\n            else {\n                return writer.close();\n            }\n        },\n        destroy(err) {\n            // TODO better error handling?\n            console.log(err);\n            writer.close();\n        }\n    });\n}\n\nVue.initDirectivesForSSR();\n\nexports.ssrIncludeBooleanAttr = shared.includeBooleanAttr;\nexports.pipeToNodeWritable = pipeToNodeWritable;\nexports.pipeToWebWritable = pipeToWebWritable;\nexports.renderToNodeStream = renderToNodeStream;\nexports.renderToSimpleStream = renderToSimpleStream;\nexports.renderToStream = renderToStream;\nexports.renderToString = renderToString;\nexports.renderToWebStream = renderToWebStream;\nexports.ssrGetDirectiveProps = ssrGetDirectiveProps;\nexports.ssrGetDynamicModelProps = ssrGetDynamicModelProps;\nexports.ssrInterpolate = ssrInterpolate;\nexports.ssrLooseContain = ssrLooseContain;\nexports.ssrLooseEqual = ssrLooseEqual;\nexports.ssrRenderAttr = ssrRenderAttr;\nexports.ssrRenderAttrs = ssrRenderAttrs;\nexports.ssrRenderClass = ssrRenderClass;\nexports.ssrRenderComponent = ssrRenderComponent;\nexports.ssrRenderDynamicAttr = ssrRenderDynamicAttr;\nexports.ssrRenderDynamicModel = ssrRenderDynamicModel;\nexports.ssrRenderList = ssrRenderList;\nexports.ssrRenderSlot = ssrRenderSlot;\nexports.ssrRenderSlotInner = ssrRenderSlotInner;\nexports.ssrRenderStyle = ssrRenderStyle;\nexports.ssrRenderSuspense = ssrRenderSuspense;\nexports.ssrRenderTeleport = ssrRenderTeleport;\nexports.ssrRenderVNode = renderVNode;\n$/dist/server-renderer.esm-bundler.jsŌimport { createVNode, ssrContextKey, warn as warn$1, Fragment, Static, Comment, Text, mergeProps, ssrUtils, createApp, initDirectivesForSSR } from 'vue';\nimport { makeMap, isOn, isSVGTag, propsToAttrMap, isBooleanAttr, includeBooleanAttr, isSSRSafeAttrName, escapeHtml, normalizeClass, isString, normalizeStyle, stringifyStyle, isArray, toDisplayString, isFunction, isObject, looseEqual, looseIndexOf, isPromise, NOOP, escapeHtmlComment, isVoidTag } from '@vue/shared';\nexport { includeBooleanAttr as ssrIncludeBooleanAttr } from '@vue/shared';\n\n// leading comma for empty string \"\"\nconst shouldIgnoreProp = makeMap(`,key,ref,innerHTML,textContent,ref_key,ref_for`);\nfunction ssrRenderAttrs(props, tag) {\n    let ret = '';\n    for (const key in props) {\n        if (shouldIgnoreProp(key) ||\n            isOn(key) ||\n            (tag === 'textarea' && key === 'value')) {\n            continue;\n        }\n        const value = props[key];\n        if (key === 'class') {\n            ret += ` class=\"${ssrRenderClass(value)}\"`;\n        }\n        else if (key === 'style') {\n            ret += ` style=\"${ssrRenderStyle(value)}\"`;\n        }\n        else {\n            ret += ssrRenderDynamicAttr(key, value, tag);\n        }\n    }\n    return ret;\n}\n// render an attr with dynamic (unknown) key.\nfunction ssrRenderDynamicAttr(key, value, tag) {\n    if (!isRenderableValue(value)) {\n        return ``;\n    }\n    const attrKey = tag && (tag.indexOf('-') > 0 || isSVGTag(tag))\n        ? key // preserve raw name on custom elements and svg\n        : propsToAttrMap[key] || key.toLowerCase();\n    if (isBooleanAttr(attrKey)) {\n        return includeBooleanAttr(value) ? ` ${attrKey}` : ``;\n    }\n    else if (isSSRSafeAttrName(attrKey)) {\n        return value === '' ? ` ${attrKey}` : ` ${attrKey}=\"${escapeHtml(value)}\"`;\n    }\n    else {\n        console.warn(`[@vue/server-renderer] Skipped rendering unsafe attribute name: ${attrKey}`);\n        return ``;\n    }\n}\n// Render a v-bind attr with static key. The key is pre-processed at compile\n// time and we only need to check and escape value.\nfunction ssrRenderAttr(key, value) {\n    if (!isRenderableValue(value)) {\n        return ``;\n    }\n    return ` ${key}=\"${escapeHtml(value)}\"`;\n}\nfunction isRenderableValue(value) {\n    if (value == null) {\n        return false;\n    }\n    const type = typeof value;\n    return type === 'string' || type === 'number' || type === 'boolean';\n}\nfunction ssrRenderClass(raw) {\n    return escapeHtml(normalizeClass(raw));\n}\nfunction ssrRenderStyle(raw) {\n    if (!raw) {\n        return '';\n    }\n    if (isString(raw)) {\n        return escapeHtml(raw);\n    }\n    const styles = normalizeStyle(raw);\n    return escapeHtml(stringifyStyle(styles));\n}\n\nfunction ssrRenderComponent(comp, props = null, children = null, parentComponent = null, slotScopeId) {\n    return renderComponentVNode(createVNode(comp, props, children), parentComponent, slotScopeId);\n}\n\nfunction ssrRenderSlot(slots, slotName, slotProps, fallbackRenderFn, push, parentComponent, slotScopeId) {\n    // template-compiled slots are always rendered as fragments\n    push(`<!--[-->`);\n    ssrRenderSlotInner(slots, slotName, slotProps, fallbackRenderFn, push, parentComponent, slotScopeId);\n    push(`<!--]-->`);\n}\nfunction ssrRenderSlotInner(slots, slotName, slotProps, fallbackRenderFn, push, parentComponent, slotScopeId, transition) {\n    const slotFn = slots[slotName];\n    if (slotFn) {\n        const slotBuffer = [];\n        const bufferedPush = (item) => {\n            slotBuffer.push(item);\n        };\n        const ret = slotFn(slotProps, bufferedPush, parentComponent, slotScopeId ? ' ' + slotScopeId : '');\n        if (isArray(ret)) {\n            // normal slot\n            renderVNodeChildren(push, ret, parentComponent, slotScopeId);\n        }\n        else {\n            // ssr slot.\n            // check if the slot renders all comments, in which case use the fallback\n            let isEmptySlot = true;\n            if (transition) {\n                isEmptySlot = false;\n            }\n            else {\n                for (let i = 0; i < slotBuffer.length; i++) {\n                    if (!isComment(slotBuffer[i])) {\n                        isEmptySlot = false;\n                        break;\n                    }\n                }\n            }\n            if (isEmptySlot) {\n                if (fallbackRenderFn) {\n                    fallbackRenderFn();\n                }\n            }\n            else {\n                for (let i = 0; i < slotBuffer.length; i++) {\n                    push(slotBuffer[i]);\n                }\n            }\n        }\n    }\n    else if (fallbackRenderFn) {\n        fallbackRenderFn();\n    }\n}\nconst commentTestRE = /^<!--.*-->$/s;\nconst commentRE = /<!--[^]*?-->/gm;\nfunction isComment(item) {\n    if (typeof item !== 'string' || !commentTestRE.test(item))\n        return false;\n    // if item is '<!---->' or '<!--[-->' or '<!--]-->', return true directly\n    if (item.length <= 8)\n        return true;\n    return !item.replace(commentRE, '').trim();\n}\n\nfunction ssrRenderTeleport(parentPush, contentRenderFn, target, disabled, parentComponent) {\n    parentPush('<!--teleport start-->');\n    const context = parentComponent.appContext.provides[ssrContextKey];\n    const teleportBuffers = context.__teleportBuffers || (context.__teleportBuffers = {});\n    const targetBuffer = teleportBuffers[target] || (teleportBuffers[target] = []);\n    // record current index of the target buffer to handle nested teleports\n    // since the parent needs to be rendered before the child\n    const bufferIndex = targetBuffer.length;\n    let teleportContent;\n    if (disabled) {\n        contentRenderFn(parentPush);\n        teleportContent = `<!--teleport anchor-->`;\n    }\n    else {\n        const { getBuffer, push } = createBuffer();\n        contentRenderFn(push);\n        push(`<!--teleport anchor-->`);\n        teleportContent = getBuffer();\n    }\n    targetBuffer.splice(bufferIndex, 0, teleportContent);\n    parentPush('<!--teleport end-->');\n}\n\nfunction ssrInterpolate(value) {\n    return escapeHtml(toDisplayString(value));\n}\n\nSymbol((process.env.NODE_ENV !== 'production') ? 'iterate' : '');\nSymbol((process.env.NODE_ENV !== 'production') ? 'Map key iterate' : '');\nlet shouldTrack = true;\nconst trackStack = [];\nfunction pauseTracking() {\n    trackStack.push(shouldTrack);\n    shouldTrack = false;\n}\nfunction resetTracking() {\n    const last = trackStack.pop();\n    shouldTrack = last === undefined ? true : last;\n}\n\nfunction toRaw(observed) {\n    const raw = observed && observed[\"__v_raw\" /* ReactiveFlags.RAW */];\n    return raw ? toRaw(raw) : observed;\n}\n\nfunction isRef(r) {\n    return !!(r && r.__v_isRef === true);\n}\n\nconst stack = [];\nfunction pushWarningContext(vnode) {\n    stack.push(vnode);\n}\nfunction popWarningContext() {\n    stack.pop();\n}\nfunction warn(msg, ...args) {\n    if (!(process.env.NODE_ENV !== 'production'))\n        return;\n    // avoid props formatting or warn handler tracking deps that might be mutated\n    // during patch, leading to infinite recursion.\n    pauseTracking();\n    const instance = stack.length ? stack[stack.length - 1].component : null;\n    const appWarnHandler = instance && instance.appContext.config.warnHandler;\n    const trace = getComponentTrace();\n    if (appWarnHandler) {\n        callWithErrorHandling(appWarnHandler, instance, 11 /* ErrorCodes.APP_WARN_HANDLER */, [\n            msg + args.join(''),\n            instance && instance.proxy,\n            trace\n                .map(({ vnode }) => `at <${formatComponentName(instance, vnode.type)}>`)\n                .join('\\n'),\n            trace\n        ]);\n    }\n    else {\n        const warnArgs = [`[Vue warn]: ${msg}`, ...args];\n        /* istanbul ignore if */\n        if (trace.length &&\n            // avoid spamming console during tests\n            !false) {\n            warnArgs.push(`\\n`, ...formatTrace(trace));\n        }\n        console.warn(...warnArgs);\n    }\n    resetTracking();\n}\nfunction getComponentTrace() {\n    let currentVNode = stack[stack.length - 1];\n    if (!currentVNode) {\n        return [];\n    }\n    // we can't just use the stack because it will be incomplete during updates\n    // that did not start from the root. Re-construct the parent chain using\n    // instance parent pointers.\n    const normalizedStack = [];\n    while (currentVNode) {\n        const last = normalizedStack[0];\n        if (last && last.vnode === currentVNode) {\n            last.recurseCount++;\n        }\n        else {\n            normalizedStack.push({\n                vnode: currentVNode,\n                recurseCount: 0\n            });\n        }\n        const parentInstance = currentVNode.component && currentVNode.component.parent;\n        currentVNode = parentInstance && parentInstance.vnode;\n    }\n    return normalizedStack;\n}\n/* istanbul ignore next */\nfunction formatTrace(trace) {\n    const logs = [];\n    trace.forEach((entry, i) => {\n        logs.push(...(i === 0 ? [] : [`\\n`]), ...formatTraceEntry(entry));\n    });\n    return logs;\n}\nfunction formatTraceEntry({ vnode, recurseCount }) {\n    const postfix = recurseCount > 0 ? `... (${recurseCount} recursive calls)` : ``;\n    const isRoot = vnode.component ? vnode.component.parent == null : false;\n    const open = ` at <${formatComponentName(vnode.component, vnode.type, isRoot)}`;\n    const close = `>` + postfix;\n    return vnode.props\n        ? [open, ...formatProps(vnode.props), close]\n        : [open + close];\n}\n/* istanbul ignore next */\nfunction formatProps(props) {\n    const res = [];\n    const keys = Object.keys(props);\n    keys.slice(0, 3).forEach(key => {\n        res.push(...formatProp(key, props[key]));\n    });\n    if (keys.length > 3) {\n        res.push(` ...`);\n    }\n    return res;\n}\n/* istanbul ignore next */\nfunction formatProp(key, value, raw) {\n    if (isString(value)) {\n        value = JSON.stringify(value);\n        return raw ? value : [`${key}=${value}`];\n    }\n    else if (typeof value === 'number' ||\n        typeof value === 'boolean' ||\n        value == null) {\n        return raw ? value : [`${key}=${value}`];\n    }\n    else if (isRef(value)) {\n        value = formatProp(key, toRaw(value.value), true);\n        return raw ? value : [`${key}=Ref<`, value, `>`];\n    }\n    else if (isFunction(value)) {\n        return [`${key}=fn${value.name ? `<${value.name}>` : ``}`];\n    }\n    else {\n        value = toRaw(value);\n        return raw ? value : [`${key}=`, value];\n    }\n}\n\nconst ErrorTypeStrings = {\n    [\"sp\" /* LifecycleHooks.SERVER_PREFETCH */]: 'serverPrefetch hook',\n    [\"bc\" /* LifecycleHooks.BEFORE_CREATE */]: 'beforeCreate hook',\n    [\"c\" /* LifecycleHooks.CREATED */]: 'created hook',\n    [\"bm\" /* LifecycleHooks.BEFORE_MOUNT */]: 'beforeMount hook',\n    [\"m\" /* LifecycleHooks.MOUNTED */]: 'mounted hook',\n    [\"bu\" /* LifecycleHooks.BEFORE_UPDATE */]: 'beforeUpdate hook',\n    [\"u\" /* LifecycleHooks.UPDATED */]: 'updated',\n    [\"bum\" /* LifecycleHooks.BEFORE_UNMOUNT */]: 'beforeUnmount hook',\n    [\"um\" /* LifecycleHooks.UNMOUNTED */]: 'unmounted hook',\n    [\"a\" /* LifecycleHooks.ACTIVATED */]: 'activated hook',\n    [\"da\" /* LifecycleHooks.DEACTIVATED */]: 'deactivated hook',\n    [\"ec\" /* LifecycleHooks.ERROR_CAPTURED */]: 'errorCaptured hook',\n    [\"rtc\" /* LifecycleHooks.RENDER_TRACKED */]: 'renderTracked hook',\n    [\"rtg\" /* LifecycleHooks.RENDER_TRIGGERED */]: 'renderTriggered hook',\n    [0 /* ErrorCodes.SETUP_FUNCTION */]: 'setup function',\n    [1 /* ErrorCodes.RENDER_FUNCTION */]: 'render function',\n    [2 /* ErrorCodes.WATCH_GETTER */]: 'watcher getter',\n    [3 /* ErrorCodes.WATCH_CALLBACK */]: 'watcher callback',\n    [4 /* ErrorCodes.WATCH_CLEANUP */]: 'watcher cleanup function',\n    [5 /* ErrorCodes.NATIVE_EVENT_HANDLER */]: 'native event handler',\n    [6 /* ErrorCodes.COMPONENT_EVENT_HANDLER */]: 'component event handler',\n    [7 /* ErrorCodes.VNODE_HOOK */]: 'vnode hook',\n    [8 /* ErrorCodes.DIRECTIVE_HOOK */]: 'directive hook',\n    [9 /* ErrorCodes.TRANSITION_HOOK */]: 'transition hook',\n    [10 /* ErrorCodes.APP_ERROR_HANDLER */]: 'app errorHandler',\n    [11 /* ErrorCodes.APP_WARN_HANDLER */]: 'app warnHandler',\n    [12 /* ErrorCodes.FUNCTION_REF */]: 'ref function',\n    [13 /* ErrorCodes.ASYNC_COMPONENT_LOADER */]: 'async component loader',\n    [14 /* ErrorCodes.SCHEDULER */]: 'scheduler flush. This is likely a Vue internals bug. ' +\n        'Please open an issue at https://new-issue.vuejs.org/?repo=vuejs/core'\n};\nfunction callWithErrorHandling(fn, instance, type, args) {\n    let res;\n    try {\n        res = args ? fn(...args) : fn();\n    }\n    catch (err) {\n        handleError(err, instance, type);\n    }\n    return res;\n}\nfunction handleError(err, instance, type, throwInDev = true) {\n    const contextVNode = instance ? instance.vnode : null;\n    if (instance) {\n        let cur = instance.parent;\n        // the exposed instance is the render proxy to keep it consistent with 2.x\n        const exposedInstance = instance.proxy;\n        // in production the hook receives only the error code\n        const errorInfo = (process.env.NODE_ENV !== 'production') ? ErrorTypeStrings[type] : type;\n        while (cur) {\n            const errorCapturedHooks = cur.ec;\n            if (errorCapturedHooks) {\n                for (let i = 0; i < errorCapturedHooks.length; i++) {\n                    if (errorCapturedHooks[i](err, exposedInstance, errorInfo) === false) {\n                        return;\n                    }\n                }\n            }\n            cur = cur.parent;\n        }\n        // app-level handling\n        const appErrorHandler = instance.appContext.config.errorHandler;\n        if (appErrorHandler) {\n            callWithErrorHandling(appErrorHandler, null, 10 /* ErrorCodes.APP_ERROR_HANDLER */, [err, exposedInstance, errorInfo]);\n            return;\n        }\n    }\n    logError(err, type, contextVNode, throwInDev);\n}\nfunction logError(err, type, contextVNode, throwInDev = true) {\n    if ((process.env.NODE_ENV !== 'production')) {\n        const info = ErrorTypeStrings[type];\n        if (contextVNode) {\n            pushWarningContext(contextVNode);\n        }\n        warn(`Unhandled error${info ? ` during execution of ${info}` : ``}`);\n        if (contextVNode) {\n            popWarningContext();\n        }\n        // crash in dev by default so it's more noticeable\n        if (throwInDev) {\n            throw err;\n        }\n        else {\n            console.error(err);\n        }\n    }\n    else {\n        // recover in prod to reduce the impact on end-user\n        console.error(err);\n    }\n}\n\nconst classifyRE = /(?:^|[-_])(\\w)/g;\nconst classify = (str) => str.replace(classifyRE, c => c.toUpperCase()).replace(/[-_]/g, '');\nfunction getComponentName(Component, includeInferred = true) {\n    return isFunction(Component)\n        ? Component.displayName || Component.name\n        : Component.name || (includeInferred && Component.__name);\n}\n/* istanbul ignore next */\nfunction formatComponentName(instance, Component, isRoot = false) {\n    let name = getComponentName(Component);\n    if (!name && Component.__file) {\n        const match = Component.__file.match(/([^/\\\\]+)\\.\\w+$/);\n        if (match) {\n            name = match[1];\n        }\n    }\n    if (!name && instance && instance.parent) {\n        // try to infer the name based on reverse resolution\n        const inferFromRegistry = (registry) => {\n            for (const key in registry) {\n                if (registry[key] === Component) {\n                    return key;\n                }\n            }\n        };\n        name =\n            inferFromRegistry(instance.components ||\n                instance.parent.type.components) || inferFromRegistry(instance.appContext.components);\n    }\n    return name ? classify(name) : isRoot ? `App` : `Anonymous`;\n}\n\nfunction ssrRenderList(source, renderItem) {\n    if (isArray(source) || isString(source)) {\n        for (let i = 0, l = source.length; i < l; i++) {\n            renderItem(source[i], i);\n        }\n    }\n    else if (typeof source === 'number') {\n        if ((process.env.NODE_ENV !== 'production') && !Number.isInteger(source)) {\n            warn(`The v-for range expect an integer value but got ${source}.`);\n            return;\n        }\n        for (let i = 0; i < source; i++) {\n            renderItem(i + 1, i);\n        }\n    }\n    else if (isObject(source)) {\n        if (source[Symbol.iterator]) {\n            const arr = Array.from(source);\n            for (let i = 0, l = arr.length; i < l; i++) {\n                renderItem(arr[i], i);\n            }\n        }\n        else {\n            const keys = Object.keys(source);\n            for (let i = 0, l = keys.length; i < l; i++) {\n                const key = keys[i];\n                renderItem(source[key], key, i);\n            }\n        }\n    }\n}\n\nasync function ssrRenderSuspense(push, { default: renderContent }) {\n    if (renderContent) {\n        renderContent();\n    }\n    else {\n        push(`<!---->`);\n    }\n}\n\nfunction ssrGetDirectiveProps(instance, dir, value, arg, modifiers = {}) {\n    if (typeof dir !== 'function' && dir.getSSRProps) {\n        return (dir.getSSRProps({\n            dir,\n            instance,\n            value,\n            oldValue: undefined,\n            arg,\n            modifiers\n        }, null) || {});\n    }\n    return {};\n}\n\nconst ssrLooseEqual = looseEqual;\nfunction ssrLooseContain(arr, value) {\n    return looseIndexOf(arr, value) > -1;\n}\n// for <input :type=\"type\" v-model=\"model\" value=\"value\">\nfunction ssrRenderDynamicModel(type, model, value) {\n    switch (type) {\n        case 'radio':\n            return looseEqual(model, value) ? ' checked' : '';\n        case 'checkbox':\n            return (isArray(model) ? ssrLooseContain(model, value) : model)\n                ? ' checked'\n                : '';\n        default:\n            // text types\n            return ssrRenderAttr('value', model);\n    }\n}\n// for <input v-bind=\"obj\" v-model=\"model\">\nfunction ssrGetDynamicModelProps(existingProps = {}, model) {\n    const { type, value } = existingProps;\n    switch (type) {\n        case 'radio':\n            return looseEqual(model, value) ? { checked: true } : null;\n        case 'checkbox':\n            return (isArray(model) ? ssrLooseContain(model, value) : model)\n                ? { checked: true }\n                : null;\n        default:\n            // text types\n            return { value: model };\n    }\n}\n\nfunction ssrCompile(template, instance) {\n    // TODO: this branch should now work in ESM builds, enable it in a minor\n    {\n        throw new Error(`On-the-fly template compilation is not supported in the ESM build of ` +\n            `@vue/server-renderer. All templates must be pre-compiled into ` +\n            `render functions.`);\n    }\n}\n\nconst { createComponentInstance, setCurrentRenderingInstance, setupComponent, renderComponentRoot, normalizeVNode } = ssrUtils;\n// Each component has a buffer array.\n// A buffer array can contain one of the following:\n// - plain string\n// - A resolved buffer (recursive arrays of strings that can be unrolled\n//   synchronously)\n// - An async buffer (a Promise that resolves to a resolved buffer)\nfunction createBuffer() {\n    let appendable = false;\n    const buffer = [];\n    return {\n        getBuffer() {\n            // Return static buffer and await on items during unroll stage\n            return buffer;\n        },\n        push(item) {\n            const isStringItem = isString(item);\n            if (appendable && isStringItem) {\n                buffer[buffer.length - 1] += item;\n            }\n            else {\n                buffer.push(item);\n            }\n            appendable = isStringItem;\n            if (isPromise(item) || (isArray(item) && item.hasAsync)) {\n                // promise, or child buffer with async, mark as async.\n                // this allows skipping unnecessary await ticks during unroll stage\n                buffer.hasAsync = true;\n            }\n        }\n    };\n}\nfunction renderComponentVNode(vnode, parentComponent = null, slotScopeId) {\n    const instance = createComponentInstance(vnode, parentComponent, null);\n    const res = setupComponent(instance, true /* isSSR */);\n    const hasAsyncSetup = isPromise(res);\n    const prefetches = instance.sp; /* LifecycleHooks.SERVER_PREFETCH */\n    if (hasAsyncSetup || prefetches) {\n        let p = hasAsyncSetup\n            ? res\n            : Promise.resolve();\n        if (prefetches) {\n            p = p\n                .then(() => Promise.all(prefetches.map(prefetch => prefetch.call(instance.proxy))))\n                // Note: error display is already done by the wrapped lifecycle hook function.\n                .catch(() => { });\n        }\n        return p.then(() => renderComponentSubTree(instance, slotScopeId));\n    }\n    else {\n        return renderComponentSubTree(instance, slotScopeId);\n    }\n}\nfunction renderComponentSubTree(instance, slotScopeId) {\n    const comp = instance.type;\n    const { getBuffer, push } = createBuffer();\n    if (isFunction(comp)) {\n        let root = renderComponentRoot(instance);\n        // #5817 scope ID attrs not falling through if functional component doesn't\n        // have props\n        if (!comp.props) {\n            for (const key in instance.attrs) {\n                if (key.startsWith(`data-v-`)) {\n                    (root.props || (root.props = {}))[key] = ``;\n                }\n            }\n        }\n        renderVNode(push, (instance.subTree = root), instance, slotScopeId);\n    }\n    else {\n        if ((!instance.render || instance.render === NOOP) &&\n            !instance.ssrRender &&\n            !comp.ssrRender &&\n            isString(comp.template)) {\n            comp.ssrRender = ssrCompile(comp.template);\n        }\n        // perf: enable caching of computed getters during render\n        // since there cannot be state mutations during render.\n        for (const e of instance.scope.effects) {\n            if (e.computed)\n                e.computed._cacheable = true;\n        }\n        const ssrRender = instance.ssrRender || comp.ssrRender;\n        if (ssrRender) {\n            // optimized\n            // resolve fallthrough attrs\n            let attrs = instance.inheritAttrs !== false ? instance.attrs : undefined;\n            let hasCloned = false;\n            let cur = instance;\n            while (true) {\n                const scopeId = cur.vnode.scopeId;\n                if (scopeId) {\n                    if (!hasCloned) {\n                        attrs = { ...attrs };\n                        hasCloned = true;\n                    }\n                    attrs[scopeId] = '';\n                }\n                const parent = cur.parent;\n                if (parent && parent.subTree && parent.subTree === cur.vnode) {\n                    // parent is a non-SSR compiled component and is rendering this\n                    // component as root. inherit its scopeId if present.\n                    cur = parent;\n                }\n                else {\n                    break;\n                }\n            }\n            if (slotScopeId) {\n                if (!hasCloned)\n                    attrs = { ...attrs };\n                attrs[slotScopeId.trim()] = '';\n            }\n            // set current rendering instance for asset resolution\n            const prev = setCurrentRenderingInstance(instance);\n            try {\n                ssrRender(instance.proxy, push, instance, attrs, \n                // compiler-optimized bindings\n                instance.props, instance.setupState, instance.data, instance.ctx);\n            }\n            finally {\n                setCurrentRenderingInstance(prev);\n            }\n        }\n        else if (instance.render && instance.render !== NOOP) {\n            renderVNode(push, (instance.subTree = renderComponentRoot(instance)), instance, slotScopeId);\n        }\n        else {\n            const componentName = comp.name || comp.__file || `<Anonymous>`;\n            warn$1(`Component ${componentName} is missing template or render function.`);\n            push(`<!---->`);\n        }\n    }\n    return getBuffer();\n}\nfunction renderVNode(push, vnode, parentComponent, slotScopeId) {\n    const { type, shapeFlag, children } = vnode;\n    switch (type) {\n        case Text:\n            push(escapeHtml(children));\n            break;\n        case Comment:\n            push(children ? `<!--${escapeHtmlComment(children)}-->` : `<!---->`);\n            break;\n        case Static:\n            push(children);\n            break;\n        case Fragment:\n            if (vnode.slotScopeIds) {\n                slotScopeId =\n                    (slotScopeId ? slotScopeId + ' ' : '') + vnode.slotScopeIds.join(' ');\n            }\n            push(`<!--[-->`); // open\n            renderVNodeChildren(push, children, parentComponent, slotScopeId);\n            push(`<!--]-->`); // close\n            break;\n        default:\n            if (shapeFlag & 1 /* ShapeFlags.ELEMENT */) {\n                renderElementVNode(push, vnode, parentComponent, slotScopeId);\n            }\n            else if (shapeFlag & 6 /* ShapeFlags.COMPONENT */) {\n                push(renderComponentVNode(vnode, parentComponent, slotScopeId));\n            }\n            else if (shapeFlag & 64 /* ShapeFlags.TELEPORT */) {\n                renderTeleportVNode(push, vnode, parentComponent, slotScopeId);\n            }\n            else if (shapeFlag & 128 /* ShapeFlags.SUSPENSE */) {\n                renderVNode(push, vnode.ssContent, parentComponent, slotScopeId);\n            }\n            else {\n                warn$1('[@vue/server-renderer] Invalid VNode type:', type, `(${typeof type})`);\n            }\n    }\n}\nfunction renderVNodeChildren(push, children, parentComponent, slotScopeId) {\n    for (let i = 0; i < children.length; i++) {\n        renderVNode(push, normalizeVNode(children[i]), parentComponent, slotScopeId);\n    }\n}\nfunction renderElementVNode(push, vnode, parentComponent, slotScopeId) {\n    const tag = vnode.type;\n    let { props, children, shapeFlag, scopeId, dirs } = vnode;\n    let openTag = `<${tag}`;\n    if (dirs) {\n        props = applySSRDirectives(vnode, props, dirs);\n    }\n    if (props) {\n        openTag += ssrRenderAttrs(props, tag);\n    }\n    if (scopeId) {\n        openTag += ` ${scopeId}`;\n    }\n    // inherit parent chain scope id if this is the root node\n    let curParent = parentComponent;\n    let curVnode = vnode;\n    while (curParent && curVnode === curParent.subTree) {\n        curVnode = curParent.vnode;\n        if (curVnode.scopeId) {\n            openTag += ` ${curVnode.scopeId}`;\n        }\n        curParent = curParent.parent;\n    }\n    if (slotScopeId) {\n        openTag += ` ${slotScopeId}`;\n    }\n    push(openTag + `>`);\n    if (!isVoidTag(tag)) {\n        let hasChildrenOverride = false;\n        if (props) {\n            if (props.innerHTML) {\n                hasChildrenOverride = true;\n                push(props.innerHTML);\n            }\n            else if (props.textContent) {\n                hasChildrenOverride = true;\n                push(escapeHtml(props.textContent));\n            }\n            else if (tag === 'textarea' && props.value) {\n                hasChildrenOverride = true;\n                push(escapeHtml(props.value));\n            }\n        }\n        if (!hasChildrenOverride) {\n            if (shapeFlag & 8 /* ShapeFlags.TEXT_CHILDREN */) {\n                push(escapeHtml(children));\n            }\n            else if (shapeFlag & 16 /* ShapeFlags.ARRAY_CHILDREN */) {\n                renderVNodeChildren(push, children, parentComponent, slotScopeId);\n            }\n        }\n        push(`</${tag}>`);\n    }\n}\nfunction applySSRDirectives(vnode, rawProps, dirs) {\n    const toMerge = [];\n    for (let i = 0; i < dirs.length; i++) {\n        const binding = dirs[i];\n        const { dir: { getSSRProps } } = binding;\n        if (getSSRProps) {\n            const props = getSSRProps(binding, vnode);\n            if (props)\n                toMerge.push(props);\n        }\n    }\n    return mergeProps(rawProps || {}, ...toMerge);\n}\nfunction renderTeleportVNode(push, vnode, parentComponent, slotScopeId) {\n    const target = vnode.props && vnode.props.to;\n    const disabled = vnode.props && vnode.props.disabled;\n    if (!target) {\n        if (!disabled) {\n            warn$1(`[@vue/server-renderer] Teleport is missing target prop.`);\n        }\n        return [];\n    }\n    if (!isString(target)) {\n        warn$1(`[@vue/server-renderer] Teleport target must be a query selector string.`);\n        return [];\n    }\n    ssrRenderTeleport(push, push => {\n        renderVNodeChildren(push, vnode.children, parentComponent, slotScopeId);\n    }, target, disabled || disabled === '', parentComponent);\n}\n\nconst { isVNode: isVNode$1 } = ssrUtils;\nasync function unrollBuffer$1(buffer) {\n    if (buffer.hasAsync) {\n        let ret = '';\n        for (let i = 0; i < buffer.length; i++) {\n            let item = buffer[i];\n            if (isPromise(item)) {\n                item = await item;\n            }\n            if (isString(item)) {\n                ret += item;\n            }\n            else {\n                ret += await unrollBuffer$1(item);\n            }\n        }\n        return ret;\n    }\n    else {\n        // sync buffer can be more efficiently unrolled without unnecessary await\n        // ticks\n        return unrollBufferSync$1(buffer);\n    }\n}\nfunction unrollBufferSync$1(buffer) {\n    let ret = '';\n    for (let i = 0; i < buffer.length; i++) {\n        let item = buffer[i];\n        if (isString(item)) {\n            ret += item;\n        }\n        else {\n            // since this is a sync buffer, child buffers are never promises\n            ret += unrollBufferSync$1(item);\n        }\n    }\n    return ret;\n}\nasync function renderToString(input, context = {}) {\n    if (isVNode$1(input)) {\n        // raw vnode, wrap with app (for context)\n        return renderToString(createApp({ render: () => input }), context);\n    }\n    // rendering an app\n    const vnode = createVNode(input._component, input._props);\n    vnode.appContext = input._context;\n    // provide the ssr context to the tree\n    input.provide(ssrContextKey, context);\n    const buffer = await renderComponentVNode(vnode);\n    const result = await unrollBuffer$1(buffer);\n    await resolveTeleports(context);\n    if (context.__watcherHandles) {\n        for (const unwatch of context.__watcherHandles) {\n            unwatch();\n        }\n    }\n    return result;\n}\nasync function resolveTeleports(context) {\n    if (context.__teleportBuffers) {\n        context.teleports = context.teleports || {};\n        for (const key in context.__teleportBuffers) {\n            // note: it's OK to await sequentially here because the Promises were\n            // created eagerly in parallel.\n            context.teleports[key] = await unrollBuffer$1(await Promise.all([context.__teleportBuffers[key]]));\n        }\n    }\n}\n\nconst { isVNode } = ssrUtils;\nasync function unrollBuffer(buffer, stream) {\n    if (buffer.hasAsync) {\n        for (let i = 0; i < buffer.length; i++) {\n            let item = buffer[i];\n            if (isPromise(item)) {\n                item = await item;\n            }\n            if (isString(item)) {\n                stream.push(item);\n            }\n            else {\n                await unrollBuffer(item, stream);\n            }\n        }\n    }\n    else {\n        // sync buffer can be more efficiently unrolled without unnecessary await\n        // ticks\n        unrollBufferSync(buffer, stream);\n    }\n}\nfunction unrollBufferSync(buffer, stream) {\n    for (let i = 0; i < buffer.length; i++) {\n        let item = buffer[i];\n        if (isString(item)) {\n            stream.push(item);\n        }\n        else {\n            // since this is a sync buffer, child buffers are never promises\n            unrollBufferSync(item, stream);\n        }\n    }\n}\nfunction renderToSimpleStream(input, context, stream) {\n    if (isVNode(input)) {\n        // raw vnode, wrap with app (for context)\n        return renderToSimpleStream(createApp({ render: () => input }), context, stream);\n    }\n    // rendering an app\n    const vnode = createVNode(input._component, input._props);\n    vnode.appContext = input._context;\n    // provide the ssr context to the tree\n    input.provide(ssrContextKey, context);\n    Promise.resolve(renderComponentVNode(vnode))\n        .then(buffer => unrollBuffer(buffer, stream))\n        .then(() => resolveTeleports(context))\n        .then(() => {\n        if (context.__watcherHandles) {\n            for (const unwatch of context.__watcherHandles) {\n                unwatch();\n            }\n        }\n    })\n        .then(() => stream.push(null))\n        .catch(error => {\n        stream.destroy(error);\n    });\n    return stream;\n}\n/**\n * @deprecated\n */\nfunction renderToStream(input, context = {}) {\n    console.warn(`[@vue/server-renderer] renderToStream is deprecated - use renderToNodeStream instead.`);\n    return renderToNodeStream(input, context);\n}\nfunction renderToNodeStream(input, context = {}) {\n    {\n        throw new Error(`ESM build of renderToStream() does not support renderToNodeStream(). ` +\n            `Use pipeToNodeWritable() with an existing Node.js Writable stream ` +\n            `instance instead.`);\n    }\n}\nfunction pipeToNodeWritable(input, context = {}, writable) {\n    renderToSimpleStream(input, context, {\n        push(content) {\n            if (content != null) {\n                writable.write(content);\n            }\n            else {\n                writable.end();\n            }\n        },\n        destroy(err) {\n            writable.destroy(err);\n        }\n    });\n}\nfunction renderToWebStream(input, context = {}) {\n    if (typeof ReadableStream !== 'function') {\n        throw new Error(`ReadableStream constructor is not available in the global scope. ` +\n            `If the target environment does support web streams, consider using ` +\n            `pipeToWebWritable() with an existing WritableStream instance instead.`);\n    }\n    const encoder = new TextEncoder();\n    let cancelled = false;\n    return new ReadableStream({\n        start(controller) {\n            renderToSimpleStream(input, context, {\n                push(content) {\n                    if (cancelled)\n                        return;\n                    if (content != null) {\n                        controller.enqueue(encoder.encode(content));\n                    }\n                    else {\n                        controller.close();\n                    }\n                },\n                destroy(err) {\n                    controller.error(err);\n                }\n            });\n        },\n        cancel() {\n            cancelled = true;\n        }\n    });\n}\nfunction pipeToWebWritable(input, context = {}, writable) {\n    const writer = writable.getWriter();\n    const encoder = new TextEncoder();\n    // #4287 CloudFlare workers do not implement `ready` property\n    let hasReady = false;\n    try {\n        hasReady = isPromise(writer.ready);\n    }\n    catch (e) { }\n    renderToSimpleStream(input, context, {\n        async push(content) {\n            if (hasReady) {\n                await writer.ready;\n            }\n            if (content != null) {\n                return writer.write(encoder.encode(content));\n            }\n            else {\n                return writer.close();\n            }\n        },\n        destroy(err) {\n            // TODO better error handling?\n            console.log(err);\n            writer.close();\n        }\n    });\n}\n\ninitDirectivesForSSR();\n\nexport { pipeToNodeWritable, pipeToWebWritable, renderToNodeStream, renderToSimpleStream, renderToStream, renderToString, renderToWebStream, ssrGetDirectiveProps, ssrGetDynamicModelProps, ssrInterpolate, ssrLooseContain, ssrLooseEqual, ssrRenderAttr, ssrRenderAttrs, ssrRenderClass, ssrRenderComponent, ssrRenderDynamicAttr, ssrRenderDynamicModel, ssrRenderList, ssrRenderSlot, ssrRenderSlotInner, ssrRenderStyle, ssrRenderSuspense, ssrRenderTeleport, renderVNode as ssrRenderVNode };\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QHZ1ZS9zaGFyZWRAMy4yLjQ3",
    "content": "/package.json\u0002{\n  \"name\": \"@vue/shared\",\n  \"version\": \"3.2.47\",\n  \"description\": \"internal utils shared across @vue packages\",\n  \"main\": \"index.js\",\n  \"module\": \"dist/shared.esm-bundler.js\",\n  \"types\": \"dist/shared.d.ts\",\n  \"files\": [\n    \"index.js\",\n    \"dist\"\n  ],\n  \"sideEffects\": false,\n  \"buildOptions\": {\n    \"formats\": [\n      \"esm-bundler\",\n      \"cjs\"\n    ]\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/vuejs/core.git\",\n    \"directory\": \"packages/shared\"\n  },\n  \"keywords\": [\n    \"vue\"\n  ],\n  \"author\": \"Evan You\",\n  \"license\": \"MIT\",\n  \"bugs\": {\n    \"url\": \"https://github.com/vuejs/core/issues\"\n  },\n  \"homepage\": \"https://github.com/vuejs/core/tree/main/packages/shared#readme\"\n}\n/dist/shared.cjs.jsa'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n/**\n * Make a map and return a function for checking if a key\n * is in that map.\n * IMPORTANT: all calls of this function must be prefixed with\n * \\/\\*#\\_\\_PURE\\_\\_\\*\\/\n * So that rollup can tree-shake them if necessary.\n */\nfunction makeMap(str, expectsLowerCase) {\n    const map = Object.create(null);\n    const list = str.split(',');\n    for (let i = 0; i < list.length; i++) {\n        map[list[i]] = true;\n    }\n    return expectsLowerCase ? val => !!map[val.toLowerCase()] : val => !!map[val];\n}\n\n/**\n * dev only flag -> name mapping\n */\nconst PatchFlagNames = {\n    [1 /* PatchFlags.TEXT */]: `TEXT`,\n    [2 /* PatchFlags.CLASS */]: `CLASS`,\n    [4 /* PatchFlags.STYLE */]: `STYLE`,\n    [8 /* PatchFlags.PROPS */]: `PROPS`,\n    [16 /* PatchFlags.FULL_PROPS */]: `FULL_PROPS`,\n    [32 /* PatchFlags.HYDRATE_EVENTS */]: `HYDRATE_EVENTS`,\n    [64 /* PatchFlags.STABLE_FRAGMENT */]: `STABLE_FRAGMENT`,\n    [128 /* PatchFlags.KEYED_FRAGMENT */]: `KEYED_FRAGMENT`,\n    [256 /* PatchFlags.UNKEYED_FRAGMENT */]: `UNKEYED_FRAGMENT`,\n    [512 /* PatchFlags.NEED_PATCH */]: `NEED_PATCH`,\n    [1024 /* PatchFlags.DYNAMIC_SLOTS */]: `DYNAMIC_SLOTS`,\n    [2048 /* PatchFlags.DEV_ROOT_FRAGMENT */]: `DEV_ROOT_FRAGMENT`,\n    [-1 /* PatchFlags.HOISTED */]: `HOISTED`,\n    [-2 /* PatchFlags.BAIL */]: `BAIL`\n};\n\n/**\n * Dev only\n */\nconst slotFlagsText = {\n    [1 /* SlotFlags.STABLE */]: 'STABLE',\n    [2 /* SlotFlags.DYNAMIC */]: 'DYNAMIC',\n    [3 /* SlotFlags.FORWARDED */]: 'FORWARDED'\n};\n\nconst GLOBALS_WHITE_LISTED = 'Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,' +\n    'decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,' +\n    'Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt';\nconst isGloballyWhitelisted = /*#__PURE__*/ makeMap(GLOBALS_WHITE_LISTED);\n\nconst range = 2;\nfunction generateCodeFrame(source, start = 0, end = source.length) {\n    // Split the content into individual lines but capture the newline sequence\n    // that separated each line. This is important because the actual sequence is\n    // needed to properly take into account the full line length for offset\n    // comparison\n    let lines = source.split(/(\\r?\\n)/);\n    // Separate the lines and newline sequences into separate arrays for easier referencing\n    const newlineSequences = lines.filter((_, idx) => idx % 2 === 1);\n    lines = lines.filter((_, idx) => idx % 2 === 0);\n    let count = 0;\n    const res = [];\n    for (let i = 0; i < lines.length; i++) {\n        count +=\n            lines[i].length +\n                ((newlineSequences[i] && newlineSequences[i].length) || 0);\n        if (count >= start) {\n            for (let j = i - range; j <= i + range || end > count; j++) {\n                if (j < 0 || j >= lines.length)\n                    continue;\n                const line = j + 1;\n                res.push(`${line}${' '.repeat(Math.max(3 - String(line).length, 0))}|  ${lines[j]}`);\n                const lineLength = lines[j].length;\n                const newLineSeqLength = (newlineSequences[j] && newlineSequences[j].length) || 0;\n                if (j === i) {\n                    // push underline\n                    const pad = start - (count - (lineLength + newLineSeqLength));\n                    const length = Math.max(1, end > count ? lineLength - pad : end - start);\n                    res.push(`   |  ` + ' '.repeat(pad) + '^'.repeat(length));\n                }\n                else if (j > i) {\n                    if (end > count) {\n                        const length = Math.max(Math.min(end - count, lineLength), 1);\n                        res.push(`   |  ` + '^'.repeat(length));\n                    }\n                    count += lineLength + newLineSeqLength;\n                }\n            }\n            break;\n        }\n    }\n    return res.join('\\n');\n}\n\nfunction normalizeStyle(value) {\n    if (isArray(value)) {\n        const res = {};\n        for (let i = 0; i < value.length; i++) {\n            const item = value[i];\n            const normalized = isString(item)\n                ? parseStringStyle(item)\n                : normalizeStyle(item);\n            if (normalized) {\n                for (const key in normalized) {\n                    res[key] = normalized[key];\n                }\n            }\n        }\n        return res;\n    }\n    else if (isString(value)) {\n        return value;\n    }\n    else if (isObject(value)) {\n        return value;\n    }\n}\nconst listDelimiterRE = /;(?![^(]*\\))/g;\nconst propertyDelimiterRE = /:([^]+)/;\nconst styleCommentRE = /\\/\\*.*?\\*\\//gs;\nfunction parseStringStyle(cssText) {\n    const ret = {};\n    cssText\n        .replace(styleCommentRE, '')\n        .split(listDelimiterRE)\n        .forEach(item => {\n        if (item) {\n            const tmp = item.split(propertyDelimiterRE);\n            tmp.length > 1 && (ret[tmp[0].trim()] = tmp[1].trim());\n        }\n    });\n    return ret;\n}\nfunction stringifyStyle(styles) {\n    let ret = '';\n    if (!styles || isString(styles)) {\n        return ret;\n    }\n    for (const key in styles) {\n        const value = styles[key];\n        const normalizedKey = key.startsWith(`--`) ? key : hyphenate(key);\n        if (isString(value) || typeof value === 'number') {\n            // only render valid values\n            ret += `${normalizedKey}:${value};`;\n        }\n    }\n    return ret;\n}\nfunction normalizeClass(value) {\n    let res = '';\n    if (isString(value)) {\n        res = value;\n    }\n    else if (isArray(value)) {\n        for (let i = 0; i < value.length; i++) {\n            const normalized = normalizeClass(value[i]);\n            if (normalized) {\n                res += normalized + ' ';\n            }\n        }\n    }\n    else if (isObject(value)) {\n        for (const name in value) {\n            if (value[name]) {\n                res += name + ' ';\n            }\n        }\n    }\n    return res.trim();\n}\nfunction normalizeProps(props) {\n    if (!props)\n        return null;\n    let { class: klass, style } = props;\n    if (klass && !isString(klass)) {\n        props.class = normalizeClass(klass);\n    }\n    if (style) {\n        props.style = normalizeStyle(style);\n    }\n    return props;\n}\n\n// These tag configs are shared between compiler-dom and runtime-dom, so they\n// https://developer.mozilla.org/en-US/docs/Web/HTML/Element\nconst HTML_TAGS = 'html,body,base,head,link,meta,style,title,address,article,aside,footer,' +\n    'header,hgroup,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,' +\n    'figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,' +\n    'data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,' +\n    'time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,' +\n    'canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,' +\n    'th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,' +\n    'option,output,progress,select,textarea,details,dialog,menu,' +\n    'summary,template,blockquote,iframe,tfoot';\n// https://developer.mozilla.org/en-US/docs/Web/SVG/Element\nconst SVG_TAGS = 'svg,animate,animateMotion,animateTransform,circle,clipPath,color-profile,' +\n    'defs,desc,discard,ellipse,feBlend,feColorMatrix,feComponentTransfer,' +\n    'feComposite,feConvolveMatrix,feDiffuseLighting,feDisplacementMap,' +\n    'feDistantLight,feDropShadow,feFlood,feFuncA,feFuncB,feFuncG,feFuncR,' +\n    'feGaussianBlur,feImage,feMerge,feMergeNode,feMorphology,feOffset,' +\n    'fePointLight,feSpecularLighting,feSpotLight,feTile,feTurbulence,filter,' +\n    'foreignObject,g,hatch,hatchpath,image,line,linearGradient,marker,mask,' +\n    'mesh,meshgradient,meshpatch,meshrow,metadata,mpath,path,pattern,' +\n    'polygon,polyline,radialGradient,rect,set,solidcolor,stop,switch,symbol,' +\n    'text,textPath,title,tspan,unknown,use,view';\nconst VOID_TAGS = 'area,base,br,col,embed,hr,img,input,link,meta,param,source,track,wbr';\n/**\n * Compiler only.\n * Do NOT use in runtime code paths unless behind `true` flag.\n */\nconst isHTMLTag = /*#__PURE__*/ makeMap(HTML_TAGS);\n/**\n * Compiler only.\n * Do NOT use in runtime code paths unless behind `true` flag.\n */\nconst isSVGTag = /*#__PURE__*/ makeMap(SVG_TAGS);\n/**\n * Compiler only.\n * Do NOT use in runtime code paths unless behind `true` flag.\n */\nconst isVoidTag = /*#__PURE__*/ makeMap(VOID_TAGS);\n\n/**\n * On the client we only need to offer special cases for boolean attributes that\n * have different names from their corresponding dom properties:\n * - itemscope -> N/A\n * - allowfullscreen -> allowFullscreen\n * - formnovalidate -> formNoValidate\n * - ismap -> isMap\n * - nomodule -> noModule\n * - novalidate -> noValidate\n * - readonly -> readOnly\n */\nconst specialBooleanAttrs = `itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly`;\nconst isSpecialBooleanAttr = /*#__PURE__*/ makeMap(specialBooleanAttrs);\n/**\n * The full list is needed during SSR to produce the correct initial markup.\n */\nconst isBooleanAttr = /*#__PURE__*/ makeMap(specialBooleanAttrs +\n    `,async,autofocus,autoplay,controls,default,defer,disabled,hidden,` +\n    `loop,open,required,reversed,scoped,seamless,` +\n    `checked,muted,multiple,selected`);\n/**\n * Boolean attributes should be included if the value is truthy or ''.\n * e.g. `<select multiple>` compiles to `{ multiple: '' }`\n */\nfunction includeBooleanAttr(value) {\n    return !!value || value === '';\n}\nconst unsafeAttrCharRE = /[>/=\"'\\u0009\\u000a\\u000c\\u0020]/;\nconst attrValidationCache = {};\nfunction isSSRSafeAttrName(name) {\n    if (attrValidationCache.hasOwnProperty(name)) {\n        return attrValidationCache[name];\n    }\n    const isUnsafe = unsafeAttrCharRE.test(name);\n    if (isUnsafe) {\n        console.error(`unsafe attribute name: ${name}`);\n    }\n    return (attrValidationCache[name] = !isUnsafe);\n}\nconst propsToAttrMap = {\n    acceptCharset: 'accept-charset',\n    className: 'class',\n    htmlFor: 'for',\n    httpEquiv: 'http-equiv'\n};\n/**\n * Known attributes, this is used for stringification of runtime static nodes\n * so that we don't stringify bindings that cannot be set from HTML.\n * Don't also forget to allow `data-*` and `aria-*`!\n * Generated from https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes\n */\nconst isKnownHtmlAttr = /*#__PURE__*/ makeMap(`accept,accept-charset,accesskey,action,align,allow,alt,async,` +\n    `autocapitalize,autocomplete,autofocus,autoplay,background,bgcolor,` +\n    `border,buffered,capture,challenge,charset,checked,cite,class,code,` +\n    `codebase,color,cols,colspan,content,contenteditable,contextmenu,controls,` +\n    `coords,crossorigin,csp,data,datetime,decoding,default,defer,dir,dirname,` +\n    `disabled,download,draggable,dropzone,enctype,enterkeyhint,for,form,` +\n    `formaction,formenctype,formmethod,formnovalidate,formtarget,headers,` +\n    `height,hidden,high,href,hreflang,http-equiv,icon,id,importance,integrity,` +\n    `ismap,itemprop,keytype,kind,label,lang,language,loading,list,loop,low,` +\n    `manifest,max,maxlength,minlength,media,min,multiple,muted,name,novalidate,` +\n    `open,optimum,pattern,ping,placeholder,poster,preload,radiogroup,readonly,` +\n    `referrerpolicy,rel,required,reversed,rows,rowspan,sandbox,scope,scoped,` +\n    `selected,shape,size,sizes,slot,span,spellcheck,src,srcdoc,srclang,srcset,` +\n    `start,step,style,summary,tabindex,target,title,translate,type,usemap,` +\n    `value,width,wrap`);\n/**\n * Generated from https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute\n */\nconst isKnownSvgAttr = /*#__PURE__*/ makeMap(`xmlns,accent-height,accumulate,additive,alignment-baseline,alphabetic,amplitude,` +\n    `arabic-form,ascent,attributeName,attributeType,azimuth,baseFrequency,` +\n    `baseline-shift,baseProfile,bbox,begin,bias,by,calcMode,cap-height,class,` +\n    `clip,clipPathUnits,clip-path,clip-rule,color,color-interpolation,` +\n    `color-interpolation-filters,color-profile,color-rendering,` +\n    `contentScriptType,contentStyleType,crossorigin,cursor,cx,cy,d,decelerate,` +\n    `descent,diffuseConstant,direction,display,divisor,dominant-baseline,dur,dx,` +\n    `dy,edgeMode,elevation,enable-background,end,exponent,fill,fill-opacity,` +\n    `fill-rule,filter,filterRes,filterUnits,flood-color,flood-opacity,` +\n    `font-family,font-size,font-size-adjust,font-stretch,font-style,` +\n    `font-variant,font-weight,format,from,fr,fx,fy,g1,g2,glyph-name,` +\n    `glyph-orientation-horizontal,glyph-orientation-vertical,glyphRef,` +\n    `gradientTransform,gradientUnits,hanging,height,href,hreflang,horiz-adv-x,` +\n    `horiz-origin-x,id,ideographic,image-rendering,in,in2,intercept,k,k1,k2,k3,` +\n    `k4,kernelMatrix,kernelUnitLength,kerning,keyPoints,keySplines,keyTimes,` +\n    `lang,lengthAdjust,letter-spacing,lighting-color,limitingConeAngle,local,` +\n    `marker-end,marker-mid,marker-start,markerHeight,markerUnits,markerWidth,` +\n    `mask,maskContentUnits,maskUnits,mathematical,max,media,method,min,mode,` +\n    `name,numOctaves,offset,opacity,operator,order,orient,orientation,origin,` +\n    `overflow,overline-position,overline-thickness,panose-1,paint-order,path,` +\n    `pathLength,patternContentUnits,patternTransform,patternUnits,ping,` +\n    `pointer-events,points,pointsAtX,pointsAtY,pointsAtZ,preserveAlpha,` +\n    `preserveAspectRatio,primitiveUnits,r,radius,referrerPolicy,refX,refY,rel,` +\n    `rendering-intent,repeatCount,repeatDur,requiredExtensions,requiredFeatures,` +\n    `restart,result,rotate,rx,ry,scale,seed,shape-rendering,slope,spacing,` +\n    `specularConstant,specularExponent,speed,spreadMethod,startOffset,` +\n    `stdDeviation,stemh,stemv,stitchTiles,stop-color,stop-opacity,` +\n    `strikethrough-position,strikethrough-thickness,string,stroke,` +\n    `stroke-dasharray,stroke-dashoffset,stroke-linecap,stroke-linejoin,` +\n    `stroke-miterlimit,stroke-opacity,stroke-width,style,surfaceScale,` +\n    `systemLanguage,tabindex,tableValues,target,targetX,targetY,text-anchor,` +\n    `text-decoration,text-rendering,textLength,to,transform,transform-origin,` +\n    `type,u1,u2,underline-position,underline-thickness,unicode,unicode-bidi,` +\n    `unicode-range,units-per-em,v-alphabetic,v-hanging,v-ideographic,` +\n    `v-mathematical,values,vector-effect,version,vert-adv-y,vert-origin-x,` +\n    `vert-origin-y,viewBox,viewTarget,visibility,width,widths,word-spacing,` +\n    `writing-mode,x,x-height,x1,x2,xChannelSelector,xlink:actuate,xlink:arcrole,` +\n    `xlink:href,xlink:role,xlink:show,xlink:title,xlink:type,xml:base,xml:lang,` +\n    `xml:space,y,y1,y2,yChannelSelector,z,zoomAndPan`);\n\nconst escapeRE = /[\"'&<>]/;\nfunction escapeHtml(string) {\n    const str = '' + string;\n    const match = escapeRE.exec(str);\n    if (!match) {\n        return str;\n    }\n    let html = '';\n    let escaped;\n    let index;\n    let lastIndex = 0;\n    for (index = match.index; index < str.length; index++) {\n        switch (str.charCodeAt(index)) {\n            case 34: // \"\n                escaped = '&quot;';\n                break;\n            case 38: // &\n                escaped = '&amp;';\n                break;\n            case 39: // '\n                escaped = '&#39;';\n                break;\n            case 60: // <\n                escaped = '&lt;';\n                break;\n            case 62: // >\n                escaped = '&gt;';\n                break;\n            default:\n                continue;\n        }\n        if (lastIndex !== index) {\n            html += str.slice(lastIndex, index);\n        }\n        lastIndex = index + 1;\n        html += escaped;\n    }\n    return lastIndex !== index ? html + str.slice(lastIndex, index) : html;\n}\n// https://www.w3.org/TR/html52/syntax.html#comments\nconst commentStripRE = /^-?>|<!--|-->|--!>|<!-$/g;\nfunction escapeHtmlComment(src) {\n    return src.replace(commentStripRE, '');\n}\n\nfunction looseCompareArrays(a, b) {\n    if (a.length !== b.length)\n        return false;\n    let equal = true;\n    for (let i = 0; equal && i < a.length; i++) {\n        equal = looseEqual(a[i], b[i]);\n    }\n    return equal;\n}\nfunction looseEqual(a, b) {\n    if (a === b)\n        return true;\n    let aValidType = isDate(a);\n    let bValidType = isDate(b);\n    if (aValidType || bValidType) {\n        return aValidType && bValidType ? a.getTime() === b.getTime() : false;\n    }\n    aValidType = isSymbol(a);\n    bValidType = isSymbol(b);\n    if (aValidType || bValidType) {\n        return a === b;\n    }\n    aValidType = isArray(a);\n    bValidType = isArray(b);\n    if (aValidType || bValidType) {\n        return aValidType && bValidType ? looseCompareArrays(a, b) : false;\n    }\n    aValidType = isObject(a);\n    bValidType = isObject(b);\n    if (aValidType || bValidType) {\n        /* istanbul ignore if: this if will probably never be called */\n        if (!aValidType || !bValidType) {\n            return false;\n        }\n        const aKeysCount = Object.keys(a).length;\n        const bKeysCount = Object.keys(b).length;\n        if (aKeysCount !== bKeysCount) {\n            return false;\n        }\n        for (const key in a) {\n            const aHasKey = a.hasOwnProperty(key);\n            const bHasKey = b.hasOwnProperty(key);\n            if ((aHasKey && !bHasKey) ||\n                (!aHasKey && bHasKey) ||\n                !looseEqual(a[key], b[key])) {\n                return false;\n            }\n        }\n    }\n    return String(a) === String(b);\n}\nfunction looseIndexOf(arr, val) {\n    return arr.findIndex(item => looseEqual(item, val));\n}\n\n/**\n * For converting {{ interpolation }} values to displayed strings.\n * @private\n */\nconst toDisplayString = (val) => {\n    return isString(val)\n        ? val\n        : val == null\n            ? ''\n            : isArray(val) ||\n                (isObject(val) &&\n                    (val.toString === objectToString || !isFunction(val.toString)))\n                ? JSON.stringify(val, replacer, 2)\n                : String(val);\n};\nconst replacer = (_key, val) => {\n    // can't use isRef here since @vue/shared has no deps\n    if (val && val.__v_isRef) {\n        return replacer(_key, val.value);\n    }\n    else if (isMap(val)) {\n        return {\n            [`Map(${val.size})`]: [...val.entries()].reduce((entries, [key, val]) => {\n                entries[`${key} =>`] = val;\n                return entries;\n            }, {})\n        };\n    }\n    else if (isSet(val)) {\n        return {\n            [`Set(${val.size})`]: [...val.values()]\n        };\n    }\n    else if (isObject(val) && !isArray(val) && !isPlainObject(val)) {\n        return String(val);\n    }\n    return val;\n};\n\nconst EMPTY_OBJ = Object.freeze({})\n    ;\nconst EMPTY_ARR = Object.freeze([]) ;\nconst NOOP = () => { };\n/**\n * Always return false.\n */\nconst NO = () => false;\nconst onRE = /^on[^a-z]/;\nconst isOn = (key) => onRE.test(key);\nconst isModelListener = (key) => key.startsWith('onUpdate:');\nconst extend = Object.assign;\nconst remove = (arr, el) => {\n    const i = arr.indexOf(el);\n    if (i > -1) {\n        arr.splice(i, 1);\n    }\n};\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\nconst hasOwn = (val, key) => hasOwnProperty.call(val, key);\nconst isArray = Array.isArray;\nconst isMap = (val) => toTypeString(val) === '[object Map]';\nconst isSet = (val) => toTypeString(val) === '[object Set]';\nconst isDate = (val) => toTypeString(val) === '[object Date]';\nconst isRegExp = (val) => toTypeString(val) === '[object RegExp]';\nconst isFunction = (val) => typeof val === 'function';\nconst isString = (val) => typeof val === 'string';\nconst isSymbol = (val) => typeof val === 'symbol';\nconst isObject = (val) => val !== null && typeof val === 'object';\nconst isPromise = (val) => {\n    return isObject(val) && isFunction(val.then) && isFunction(val.catch);\n};\nconst objectToString = Object.prototype.toString;\nconst toTypeString = (value) => objectToString.call(value);\nconst toRawType = (value) => {\n    // extract \"RawType\" from strings like \"[object RawType]\"\n    return toTypeString(value).slice(8, -1);\n};\nconst isPlainObject = (val) => toTypeString(val) === '[object Object]';\nconst isIntegerKey = (key) => isString(key) &&\n    key !== 'NaN' &&\n    key[0] !== '-' &&\n    '' + parseInt(key, 10) === key;\nconst isReservedProp = /*#__PURE__*/ makeMap(\n// the leading comma is intentional so empty string \"\" is also included\n',key,ref,ref_for,ref_key,' +\n    'onVnodeBeforeMount,onVnodeMounted,' +\n    'onVnodeBeforeUpdate,onVnodeUpdated,' +\n    'onVnodeBeforeUnmount,onVnodeUnmounted');\nconst isBuiltInDirective = /*#__PURE__*/ makeMap('bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo');\nconst cacheStringFunction = (fn) => {\n    const cache = Object.create(null);\n    return ((str) => {\n        const hit = cache[str];\n        return hit || (cache[str] = fn(str));\n    });\n};\nconst camelizeRE = /-(\\w)/g;\n/**\n * @private\n */\nconst camelize = cacheStringFunction((str) => {\n    return str.replace(camelizeRE, (_, c) => (c ? c.toUpperCase() : ''));\n});\nconst hyphenateRE = /\\B([A-Z])/g;\n/**\n * @private\n */\nconst hyphenate = cacheStringFunction((str) => str.replace(hyphenateRE, '-$1').toLowerCase());\n/**\n * @private\n */\nconst capitalize = cacheStringFunction((str) => str.charAt(0).toUpperCase() + str.slice(1));\n/**\n * @private\n */\nconst toHandlerKey = cacheStringFunction((str) => str ? `on${capitalize(str)}` : ``);\n// compare whether a value has changed, accounting for NaN.\nconst hasChanged = (value, oldValue) => !Object.is(value, oldValue);\nconst invokeArrayFns = (fns, arg) => {\n    for (let i = 0; i < fns.length; i++) {\n        fns[i](arg);\n    }\n};\nconst def = (obj, key, value) => {\n    Object.defineProperty(obj, key, {\n        configurable: true,\n        enumerable: false,\n        value\n    });\n};\n/**\n * \"123-foo\" will be parsed to 123\n * This is used for the .number modifier in v-model\n */\nconst looseToNumber = (val) => {\n    const n = parseFloat(val);\n    return isNaN(n) ? val : n;\n};\n/**\n * Only conerces number-like strings\n * \"123-foo\" will be returned as-is\n */\nconst toNumber = (val) => {\n    const n = isString(val) ? Number(val) : NaN;\n    return isNaN(n) ? val : n;\n};\nlet _globalThis;\nconst getGlobalThis = () => {\n    return (_globalThis ||\n        (_globalThis =\n            typeof globalThis !== 'undefined'\n                ? globalThis\n                : typeof self !== 'undefined'\n                    ? self\n                    : typeof window !== 'undefined'\n                        ? window\n                        : typeof global !== 'undefined'\n                            ? global\n                            : {}));\n};\nconst identRE = /^[_$a-zA-Z\\xA0-\\uFFFF][_$a-zA-Z0-9\\xA0-\\uFFFF]*$/;\nfunction genPropsAccessExp(name) {\n    return identRE.test(name)\n        ? `__props.${name}`\n        : `__props[${JSON.stringify(name)}]`;\n}\n\nexports.EMPTY_ARR = EMPTY_ARR;\nexports.EMPTY_OBJ = EMPTY_OBJ;\nexports.NO = NO;\nexports.NOOP = NOOP;\nexports.PatchFlagNames = PatchFlagNames;\nexports.camelize = camelize;\nexports.capitalize = capitalize;\nexports.def = def;\nexports.escapeHtml = escapeHtml;\nexports.escapeHtmlComment = escapeHtmlComment;\nexports.extend = extend;\nexports.genPropsAccessExp = genPropsAccessExp;\nexports.generateCodeFrame = generateCodeFrame;\nexports.getGlobalThis = getGlobalThis;\nexports.hasChanged = hasChanged;\nexports.hasOwn = hasOwn;\nexports.hyphenate = hyphenate;\nexports.includeBooleanAttr = includeBooleanAttr;\nexports.invokeArrayFns = invokeArrayFns;\nexports.isArray = isArray;\nexports.isBooleanAttr = isBooleanAttr;\nexports.isBuiltInDirective = isBuiltInDirective;\nexports.isDate = isDate;\nexports.isFunction = isFunction;\nexports.isGloballyWhitelisted = isGloballyWhitelisted;\nexports.isHTMLTag = isHTMLTag;\nexports.isIntegerKey = isIntegerKey;\nexports.isKnownHtmlAttr = isKnownHtmlAttr;\nexports.isKnownSvgAttr = isKnownSvgAttr;\nexports.isMap = isMap;\nexports.isModelListener = isModelListener;\nexports.isObject = isObject;\nexports.isOn = isOn;\nexports.isPlainObject = isPlainObject;\nexports.isPromise = isPromise;\nexports.isRegExp = isRegExp;\nexports.isReservedProp = isReservedProp;\nexports.isSSRSafeAttrName = isSSRSafeAttrName;\nexports.isSVGTag = isSVGTag;\nexports.isSet = isSet;\nexports.isSpecialBooleanAttr = isSpecialBooleanAttr;\nexports.isString = isString;\nexports.isSymbol = isSymbol;\nexports.isVoidTag = isVoidTag;\nexports.looseEqual = looseEqual;\nexports.looseIndexOf = looseIndexOf;\nexports.looseToNumber = looseToNumber;\nexports.makeMap = makeMap;\nexports.normalizeClass = normalizeClass;\nexports.normalizeProps = normalizeProps;\nexports.normalizeStyle = normalizeStyle;\nexports.objectToString = objectToString;\nexports.parseStringStyle = parseStringStyle;\nexports.propsToAttrMap = propsToAttrMap;\nexports.remove = remove;\nexports.slotFlagsText = slotFlagsText;\nexports.stringifyStyle = stringifyStyle;\nexports.toDisplayString = toDisplayString;\nexports.toHandlerKey = toHandlerKey;\nexports.toNumber = toNumber;\nexports.toRawType = toRawType;\nexports.toTypeString = toTypeString;\n/LICENSE\u0004CThe MIT License (MIT)\n\nCopyright (c) 2018-present, Yuxi (Evan) You\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n/index.jsı'use strict'\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./dist/shared.cjs.prod.js')\n} else {\n  module.exports = require('./dist/shared.cjs.js')\n}\n/README.mdW# @vue/shared\n\nInternal utility functions and constants shared across `@vue` packages.\n/dist/shared.cjs.prod.jsa{'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n/**\n * Make a map and return a function for checking if a key\n * is in that map.\n * IMPORTANT: all calls of this function must be prefixed with\n * \\/\\*#\\_\\_PURE\\_\\_\\*\\/\n * So that rollup can tree-shake them if necessary.\n */\nfunction makeMap(str, expectsLowerCase) {\n    const map = Object.create(null);\n    const list = str.split(',');\n    for (let i = 0; i < list.length; i++) {\n        map[list[i]] = true;\n    }\n    return expectsLowerCase ? val => !!map[val.toLowerCase()] : val => !!map[val];\n}\n\n/**\n * dev only flag -> name mapping\n */\nconst PatchFlagNames = {\n    [1 /* PatchFlags.TEXT */]: `TEXT`,\n    [2 /* PatchFlags.CLASS */]: `CLASS`,\n    [4 /* PatchFlags.STYLE */]: `STYLE`,\n    [8 /* PatchFlags.PROPS */]: `PROPS`,\n    [16 /* PatchFlags.FULL_PROPS */]: `FULL_PROPS`,\n    [32 /* PatchFlags.HYDRATE_EVENTS */]: `HYDRATE_EVENTS`,\n    [64 /* PatchFlags.STABLE_FRAGMENT */]: `STABLE_FRAGMENT`,\n    [128 /* PatchFlags.KEYED_FRAGMENT */]: `KEYED_FRAGMENT`,\n    [256 /* PatchFlags.UNKEYED_FRAGMENT */]: `UNKEYED_FRAGMENT`,\n    [512 /* PatchFlags.NEED_PATCH */]: `NEED_PATCH`,\n    [1024 /* PatchFlags.DYNAMIC_SLOTS */]: `DYNAMIC_SLOTS`,\n    [2048 /* PatchFlags.DEV_ROOT_FRAGMENT */]: `DEV_ROOT_FRAGMENT`,\n    [-1 /* PatchFlags.HOISTED */]: `HOISTED`,\n    [-2 /* PatchFlags.BAIL */]: `BAIL`\n};\n\n/**\n * Dev only\n */\nconst slotFlagsText = {\n    [1 /* SlotFlags.STABLE */]: 'STABLE',\n    [2 /* SlotFlags.DYNAMIC */]: 'DYNAMIC',\n    [3 /* SlotFlags.FORWARDED */]: 'FORWARDED'\n};\n\nconst GLOBALS_WHITE_LISTED = 'Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,' +\n    'decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,' +\n    'Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt';\nconst isGloballyWhitelisted = /*#__PURE__*/ makeMap(GLOBALS_WHITE_LISTED);\n\nconst range = 2;\nfunction generateCodeFrame(source, start = 0, end = source.length) {\n    // Split the content into individual lines but capture the newline sequence\n    // that separated each line. This is important because the actual sequence is\n    // needed to properly take into account the full line length for offset\n    // comparison\n    let lines = source.split(/(\\r?\\n)/);\n    // Separate the lines and newline sequences into separate arrays for easier referencing\n    const newlineSequences = lines.filter((_, idx) => idx % 2 === 1);\n    lines = lines.filter((_, idx) => idx % 2 === 0);\n    let count = 0;\n    const res = [];\n    for (let i = 0; i < lines.length; i++) {\n        count +=\n            lines[i].length +\n                ((newlineSequences[i] && newlineSequences[i].length) || 0);\n        if (count >= start) {\n            for (let j = i - range; j <= i + range || end > count; j++) {\n                if (j < 0 || j >= lines.length)\n                    continue;\n                const line = j + 1;\n                res.push(`${line}${' '.repeat(Math.max(3 - String(line).length, 0))}|  ${lines[j]}`);\n                const lineLength = lines[j].length;\n                const newLineSeqLength = (newlineSequences[j] && newlineSequences[j].length) || 0;\n                if (j === i) {\n                    // push underline\n                    const pad = start - (count - (lineLength + newLineSeqLength));\n                    const length = Math.max(1, end > count ? lineLength - pad : end - start);\n                    res.push(`   |  ` + ' '.repeat(pad) + '^'.repeat(length));\n                }\n                else if (j > i) {\n                    if (end > count) {\n                        const length = Math.max(Math.min(end - count, lineLength), 1);\n                        res.push(`   |  ` + '^'.repeat(length));\n                    }\n                    count += lineLength + newLineSeqLength;\n                }\n            }\n            break;\n        }\n    }\n    return res.join('\\n');\n}\n\nfunction normalizeStyle(value) {\n    if (isArray(value)) {\n        const res = {};\n        for (let i = 0; i < value.length; i++) {\n            const item = value[i];\n            const normalized = isString(item)\n                ? parseStringStyle(item)\n                : normalizeStyle(item);\n            if (normalized) {\n                for (const key in normalized) {\n                    res[key] = normalized[key];\n                }\n            }\n        }\n        return res;\n    }\n    else if (isString(value)) {\n        return value;\n    }\n    else if (isObject(value)) {\n        return value;\n    }\n}\nconst listDelimiterRE = /;(?![^(]*\\))/g;\nconst propertyDelimiterRE = /:([^]+)/;\nconst styleCommentRE = /\\/\\*.*?\\*\\//gs;\nfunction parseStringStyle(cssText) {\n    const ret = {};\n    cssText\n        .replace(styleCommentRE, '')\n        .split(listDelimiterRE)\n        .forEach(item => {\n        if (item) {\n            const tmp = item.split(propertyDelimiterRE);\n            tmp.length > 1 && (ret[tmp[0].trim()] = tmp[1].trim());\n        }\n    });\n    return ret;\n}\nfunction stringifyStyle(styles) {\n    let ret = '';\n    if (!styles || isString(styles)) {\n        return ret;\n    }\n    for (const key in styles) {\n        const value = styles[key];\n        const normalizedKey = key.startsWith(`--`) ? key : hyphenate(key);\n        if (isString(value) || typeof value === 'number') {\n            // only render valid values\n            ret += `${normalizedKey}:${value};`;\n        }\n    }\n    return ret;\n}\nfunction normalizeClass(value) {\n    let res = '';\n    if (isString(value)) {\n        res = value;\n    }\n    else if (isArray(value)) {\n        for (let i = 0; i < value.length; i++) {\n            const normalized = normalizeClass(value[i]);\n            if (normalized) {\n                res += normalized + ' ';\n            }\n        }\n    }\n    else if (isObject(value)) {\n        for (const name in value) {\n            if (value[name]) {\n                res += name + ' ';\n            }\n        }\n    }\n    return res.trim();\n}\nfunction normalizeProps(props) {\n    if (!props)\n        return null;\n    let { class: klass, style } = props;\n    if (klass && !isString(klass)) {\n        props.class = normalizeClass(klass);\n    }\n    if (style) {\n        props.style = normalizeStyle(style);\n    }\n    return props;\n}\n\n// These tag configs are shared between compiler-dom and runtime-dom, so they\n// https://developer.mozilla.org/en-US/docs/Web/HTML/Element\nconst HTML_TAGS = 'html,body,base,head,link,meta,style,title,address,article,aside,footer,' +\n    'header,hgroup,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,' +\n    'figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,' +\n    'data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,' +\n    'time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,' +\n    'canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,' +\n    'th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,' +\n    'option,output,progress,select,textarea,details,dialog,menu,' +\n    'summary,template,blockquote,iframe,tfoot';\n// https://developer.mozilla.org/en-US/docs/Web/SVG/Element\nconst SVG_TAGS = 'svg,animate,animateMotion,animateTransform,circle,clipPath,color-profile,' +\n    'defs,desc,discard,ellipse,feBlend,feColorMatrix,feComponentTransfer,' +\n    'feComposite,feConvolveMatrix,feDiffuseLighting,feDisplacementMap,' +\n    'feDistantLight,feDropShadow,feFlood,feFuncA,feFuncB,feFuncG,feFuncR,' +\n    'feGaussianBlur,feImage,feMerge,feMergeNode,feMorphology,feOffset,' +\n    'fePointLight,feSpecularLighting,feSpotLight,feTile,feTurbulence,filter,' +\n    'foreignObject,g,hatch,hatchpath,image,line,linearGradient,marker,mask,' +\n    'mesh,meshgradient,meshpatch,meshrow,metadata,mpath,path,pattern,' +\n    'polygon,polyline,radialGradient,rect,set,solidcolor,stop,switch,symbol,' +\n    'text,textPath,title,tspan,unknown,use,view';\nconst VOID_TAGS = 'area,base,br,col,embed,hr,img,input,link,meta,param,source,track,wbr';\n/**\n * Compiler only.\n * Do NOT use in runtime code paths unless behind `false` flag.\n */\nconst isHTMLTag = /*#__PURE__*/ makeMap(HTML_TAGS);\n/**\n * Compiler only.\n * Do NOT use in runtime code paths unless behind `false` flag.\n */\nconst isSVGTag = /*#__PURE__*/ makeMap(SVG_TAGS);\n/**\n * Compiler only.\n * Do NOT use in runtime code paths unless behind `false` flag.\n */\nconst isVoidTag = /*#__PURE__*/ makeMap(VOID_TAGS);\n\n/**\n * On the client we only need to offer special cases for boolean attributes that\n * have different names from their corresponding dom properties:\n * - itemscope -> N/A\n * - allowfullscreen -> allowFullscreen\n * - formnovalidate -> formNoValidate\n * - ismap -> isMap\n * - nomodule -> noModule\n * - novalidate -> noValidate\n * - readonly -> readOnly\n */\nconst specialBooleanAttrs = `itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly`;\nconst isSpecialBooleanAttr = /*#__PURE__*/ makeMap(specialBooleanAttrs);\n/**\n * The full list is needed during SSR to produce the correct initial markup.\n */\nconst isBooleanAttr = /*#__PURE__*/ makeMap(specialBooleanAttrs +\n    `,async,autofocus,autoplay,controls,default,defer,disabled,hidden,` +\n    `loop,open,required,reversed,scoped,seamless,` +\n    `checked,muted,multiple,selected`);\n/**\n * Boolean attributes should be included if the value is truthy or ''.\n * e.g. `<select multiple>` compiles to `{ multiple: '' }`\n */\nfunction includeBooleanAttr(value) {\n    return !!value || value === '';\n}\nconst unsafeAttrCharRE = /[>/=\"'\\u0009\\u000a\\u000c\\u0020]/;\nconst attrValidationCache = {};\nfunction isSSRSafeAttrName(name) {\n    if (attrValidationCache.hasOwnProperty(name)) {\n        return attrValidationCache[name];\n    }\n    const isUnsafe = unsafeAttrCharRE.test(name);\n    if (isUnsafe) {\n        console.error(`unsafe attribute name: ${name}`);\n    }\n    return (attrValidationCache[name] = !isUnsafe);\n}\nconst propsToAttrMap = {\n    acceptCharset: 'accept-charset',\n    className: 'class',\n    htmlFor: 'for',\n    httpEquiv: 'http-equiv'\n};\n/**\n * Known attributes, this is used for stringification of runtime static nodes\n * so that we don't stringify bindings that cannot be set from HTML.\n * Don't also forget to allow `data-*` and `aria-*`!\n * Generated from https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes\n */\nconst isKnownHtmlAttr = /*#__PURE__*/ makeMap(`accept,accept-charset,accesskey,action,align,allow,alt,async,` +\n    `autocapitalize,autocomplete,autofocus,autoplay,background,bgcolor,` +\n    `border,buffered,capture,challenge,charset,checked,cite,class,code,` +\n    `codebase,color,cols,colspan,content,contenteditable,contextmenu,controls,` +\n    `coords,crossorigin,csp,data,datetime,decoding,default,defer,dir,dirname,` +\n    `disabled,download,draggable,dropzone,enctype,enterkeyhint,for,form,` +\n    `formaction,formenctype,formmethod,formnovalidate,formtarget,headers,` +\n    `height,hidden,high,href,hreflang,http-equiv,icon,id,importance,integrity,` +\n    `ismap,itemprop,keytype,kind,label,lang,language,loading,list,loop,low,` +\n    `manifest,max,maxlength,minlength,media,min,multiple,muted,name,novalidate,` +\n    `open,optimum,pattern,ping,placeholder,poster,preload,radiogroup,readonly,` +\n    `referrerpolicy,rel,required,reversed,rows,rowspan,sandbox,scope,scoped,` +\n    `selected,shape,size,sizes,slot,span,spellcheck,src,srcdoc,srclang,srcset,` +\n    `start,step,style,summary,tabindex,target,title,translate,type,usemap,` +\n    `value,width,wrap`);\n/**\n * Generated from https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute\n */\nconst isKnownSvgAttr = /*#__PURE__*/ makeMap(`xmlns,accent-height,accumulate,additive,alignment-baseline,alphabetic,amplitude,` +\n    `arabic-form,ascent,attributeName,attributeType,azimuth,baseFrequency,` +\n    `baseline-shift,baseProfile,bbox,begin,bias,by,calcMode,cap-height,class,` +\n    `clip,clipPathUnits,clip-path,clip-rule,color,color-interpolation,` +\n    `color-interpolation-filters,color-profile,color-rendering,` +\n    `contentScriptType,contentStyleType,crossorigin,cursor,cx,cy,d,decelerate,` +\n    `descent,diffuseConstant,direction,display,divisor,dominant-baseline,dur,dx,` +\n    `dy,edgeMode,elevation,enable-background,end,exponent,fill,fill-opacity,` +\n    `fill-rule,filter,filterRes,filterUnits,flood-color,flood-opacity,` +\n    `font-family,font-size,font-size-adjust,font-stretch,font-style,` +\n    `font-variant,font-weight,format,from,fr,fx,fy,g1,g2,glyph-name,` +\n    `glyph-orientation-horizontal,glyph-orientation-vertical,glyphRef,` +\n    `gradientTransform,gradientUnits,hanging,height,href,hreflang,horiz-adv-x,` +\n    `horiz-origin-x,id,ideographic,image-rendering,in,in2,intercept,k,k1,k2,k3,` +\n    `k4,kernelMatrix,kernelUnitLength,kerning,keyPoints,keySplines,keyTimes,` +\n    `lang,lengthAdjust,letter-spacing,lighting-color,limitingConeAngle,local,` +\n    `marker-end,marker-mid,marker-start,markerHeight,markerUnits,markerWidth,` +\n    `mask,maskContentUnits,maskUnits,mathematical,max,media,method,min,mode,` +\n    `name,numOctaves,offset,opacity,operator,order,orient,orientation,origin,` +\n    `overflow,overline-position,overline-thickness,panose-1,paint-order,path,` +\n    `pathLength,patternContentUnits,patternTransform,patternUnits,ping,` +\n    `pointer-events,points,pointsAtX,pointsAtY,pointsAtZ,preserveAlpha,` +\n    `preserveAspectRatio,primitiveUnits,r,radius,referrerPolicy,refX,refY,rel,` +\n    `rendering-intent,repeatCount,repeatDur,requiredExtensions,requiredFeatures,` +\n    `restart,result,rotate,rx,ry,scale,seed,shape-rendering,slope,spacing,` +\n    `specularConstant,specularExponent,speed,spreadMethod,startOffset,` +\n    `stdDeviation,stemh,stemv,stitchTiles,stop-color,stop-opacity,` +\n    `strikethrough-position,strikethrough-thickness,string,stroke,` +\n    `stroke-dasharray,stroke-dashoffset,stroke-linecap,stroke-linejoin,` +\n    `stroke-miterlimit,stroke-opacity,stroke-width,style,surfaceScale,` +\n    `systemLanguage,tabindex,tableValues,target,targetX,targetY,text-anchor,` +\n    `text-decoration,text-rendering,textLength,to,transform,transform-origin,` +\n    `type,u1,u2,underline-position,underline-thickness,unicode,unicode-bidi,` +\n    `unicode-range,units-per-em,v-alphabetic,v-hanging,v-ideographic,` +\n    `v-mathematical,values,vector-effect,version,vert-adv-y,vert-origin-x,` +\n    `vert-origin-y,viewBox,viewTarget,visibility,width,widths,word-spacing,` +\n    `writing-mode,x,x-height,x1,x2,xChannelSelector,xlink:actuate,xlink:arcrole,` +\n    `xlink:href,xlink:role,xlink:show,xlink:title,xlink:type,xml:base,xml:lang,` +\n    `xml:space,y,y1,y2,yChannelSelector,z,zoomAndPan`);\n\nconst escapeRE = /[\"'&<>]/;\nfunction escapeHtml(string) {\n    const str = '' + string;\n    const match = escapeRE.exec(str);\n    if (!match) {\n        return str;\n    }\n    let html = '';\n    let escaped;\n    let index;\n    let lastIndex = 0;\n    for (index = match.index; index < str.length; index++) {\n        switch (str.charCodeAt(index)) {\n            case 34: // \"\n                escaped = '&quot;';\n                break;\n            case 38: // &\n                escaped = '&amp;';\n                break;\n            case 39: // '\n                escaped = '&#39;';\n                break;\n            case 60: // <\n                escaped = '&lt;';\n                break;\n            case 62: // >\n                escaped = '&gt;';\n                break;\n            default:\n                continue;\n        }\n        if (lastIndex !== index) {\n            html += str.slice(lastIndex, index);\n        }\n        lastIndex = index + 1;\n        html += escaped;\n    }\n    return lastIndex !== index ? html + str.slice(lastIndex, index) : html;\n}\n// https://www.w3.org/TR/html52/syntax.html#comments\nconst commentStripRE = /^-?>|<!--|-->|--!>|<!-$/g;\nfunction escapeHtmlComment(src) {\n    return src.replace(commentStripRE, '');\n}\n\nfunction looseCompareArrays(a, b) {\n    if (a.length !== b.length)\n        return false;\n    let equal = true;\n    for (let i = 0; equal && i < a.length; i++) {\n        equal = looseEqual(a[i], b[i]);\n    }\n    return equal;\n}\nfunction looseEqual(a, b) {\n    if (a === b)\n        return true;\n    let aValidType = isDate(a);\n    let bValidType = isDate(b);\n    if (aValidType || bValidType) {\n        return aValidType && bValidType ? a.getTime() === b.getTime() : false;\n    }\n    aValidType = isSymbol(a);\n    bValidType = isSymbol(b);\n    if (aValidType || bValidType) {\n        return a === b;\n    }\n    aValidType = isArray(a);\n    bValidType = isArray(b);\n    if (aValidType || bValidType) {\n        return aValidType && bValidType ? looseCompareArrays(a, b) : false;\n    }\n    aValidType = isObject(a);\n    bValidType = isObject(b);\n    if (aValidType || bValidType) {\n        /* istanbul ignore if: this if will probably never be called */\n        if (!aValidType || !bValidType) {\n            return false;\n        }\n        const aKeysCount = Object.keys(a).length;\n        const bKeysCount = Object.keys(b).length;\n        if (aKeysCount !== bKeysCount) {\n            return false;\n        }\n        for (const key in a) {\n            const aHasKey = a.hasOwnProperty(key);\n            const bHasKey = b.hasOwnProperty(key);\n            if ((aHasKey && !bHasKey) ||\n                (!aHasKey && bHasKey) ||\n                !looseEqual(a[key], b[key])) {\n                return false;\n            }\n        }\n    }\n    return String(a) === String(b);\n}\nfunction looseIndexOf(arr, val) {\n    return arr.findIndex(item => looseEqual(item, val));\n}\n\n/**\n * For converting {{ interpolation }} values to displayed strings.\n * @private\n */\nconst toDisplayString = (val) => {\n    return isString(val)\n        ? val\n        : val == null\n            ? ''\n            : isArray(val) ||\n                (isObject(val) &&\n                    (val.toString === objectToString || !isFunction(val.toString)))\n                ? JSON.stringify(val, replacer, 2)\n                : String(val);\n};\nconst replacer = (_key, val) => {\n    // can't use isRef here since @vue/shared has no deps\n    if (val && val.__v_isRef) {\n        return replacer(_key, val.value);\n    }\n    else if (isMap(val)) {\n        return {\n            [`Map(${val.size})`]: [...val.entries()].reduce((entries, [key, val]) => {\n                entries[`${key} =>`] = val;\n                return entries;\n            }, {})\n        };\n    }\n    else if (isSet(val)) {\n        return {\n            [`Set(${val.size})`]: [...val.values()]\n        };\n    }\n    else if (isObject(val) && !isArray(val) && !isPlainObject(val)) {\n        return String(val);\n    }\n    return val;\n};\n\nconst EMPTY_OBJ = {};\nconst EMPTY_ARR = [];\nconst NOOP = () => { };\n/**\n * Always return false.\n */\nconst NO = () => false;\nconst onRE = /^on[^a-z]/;\nconst isOn = (key) => onRE.test(key);\nconst isModelListener = (key) => key.startsWith('onUpdate:');\nconst extend = Object.assign;\nconst remove = (arr, el) => {\n    const i = arr.indexOf(el);\n    if (i > -1) {\n        arr.splice(i, 1);\n    }\n};\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\nconst hasOwn = (val, key) => hasOwnProperty.call(val, key);\nconst isArray = Array.isArray;\nconst isMap = (val) => toTypeString(val) === '[object Map]';\nconst isSet = (val) => toTypeString(val) === '[object Set]';\nconst isDate = (val) => toTypeString(val) === '[object Date]';\nconst isRegExp = (val) => toTypeString(val) === '[object RegExp]';\nconst isFunction = (val) => typeof val === 'function';\nconst isString = (val) => typeof val === 'string';\nconst isSymbol = (val) => typeof val === 'symbol';\nconst isObject = (val) => val !== null && typeof val === 'object';\nconst isPromise = (val) => {\n    return isObject(val) && isFunction(val.then) && isFunction(val.catch);\n};\nconst objectToString = Object.prototype.toString;\nconst toTypeString = (value) => objectToString.call(value);\nconst toRawType = (value) => {\n    // extract \"RawType\" from strings like \"[object RawType]\"\n    return toTypeString(value).slice(8, -1);\n};\nconst isPlainObject = (val) => toTypeString(val) === '[object Object]';\nconst isIntegerKey = (key) => isString(key) &&\n    key !== 'NaN' &&\n    key[0] !== '-' &&\n    '' + parseInt(key, 10) === key;\nconst isReservedProp = /*#__PURE__*/ makeMap(\n// the leading comma is intentional so empty string \"\" is also included\n',key,ref,ref_for,ref_key,' +\n    'onVnodeBeforeMount,onVnodeMounted,' +\n    'onVnodeBeforeUpdate,onVnodeUpdated,' +\n    'onVnodeBeforeUnmount,onVnodeUnmounted');\nconst isBuiltInDirective = /*#__PURE__*/ makeMap('bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo');\nconst cacheStringFunction = (fn) => {\n    const cache = Object.create(null);\n    return ((str) => {\n        const hit = cache[str];\n        return hit || (cache[str] = fn(str));\n    });\n};\nconst camelizeRE = /-(\\w)/g;\n/**\n * @private\n */\nconst camelize = cacheStringFunction((str) => {\n    return str.replace(camelizeRE, (_, c) => (c ? c.toUpperCase() : ''));\n});\nconst hyphenateRE = /\\B([A-Z])/g;\n/**\n * @private\n */\nconst hyphenate = cacheStringFunction((str) => str.replace(hyphenateRE, '-$1').toLowerCase());\n/**\n * @private\n */\nconst capitalize = cacheStringFunction((str) => str.charAt(0).toUpperCase() + str.slice(1));\n/**\n * @private\n */\nconst toHandlerKey = cacheStringFunction((str) => str ? `on${capitalize(str)}` : ``);\n// compare whether a value has changed, accounting for NaN.\nconst hasChanged = (value, oldValue) => !Object.is(value, oldValue);\nconst invokeArrayFns = (fns, arg) => {\n    for (let i = 0; i < fns.length; i++) {\n        fns[i](arg);\n    }\n};\nconst def = (obj, key, value) => {\n    Object.defineProperty(obj, key, {\n        configurable: true,\n        enumerable: false,\n        value\n    });\n};\n/**\n * \"123-foo\" will be parsed to 123\n * This is used for the .number modifier in v-model\n */\nconst looseToNumber = (val) => {\n    const n = parseFloat(val);\n    return isNaN(n) ? val : n;\n};\n/**\n * Only conerces number-like strings\n * \"123-foo\" will be returned as-is\n */\nconst toNumber = (val) => {\n    const n = isString(val) ? Number(val) : NaN;\n    return isNaN(n) ? val : n;\n};\nlet _globalThis;\nconst getGlobalThis = () => {\n    return (_globalThis ||\n        (_globalThis =\n            typeof globalThis !== 'undefined'\n                ? globalThis\n                : typeof self !== 'undefined'\n                    ? self\n                    : typeof window !== 'undefined'\n                        ? window\n                        : typeof global !== 'undefined'\n                            ? global\n                            : {}));\n};\nconst identRE = /^[_$a-zA-Z\\xA0-\\uFFFF][_$a-zA-Z0-9\\xA0-\\uFFFF]*$/;\nfunction genPropsAccessExp(name) {\n    return identRE.test(name)\n        ? `__props.${name}`\n        : `__props[${JSON.stringify(name)}]`;\n}\n\nexports.EMPTY_ARR = EMPTY_ARR;\nexports.EMPTY_OBJ = EMPTY_OBJ;\nexports.NO = NO;\nexports.NOOP = NOOP;\nexports.PatchFlagNames = PatchFlagNames;\nexports.camelize = camelize;\nexports.capitalize = capitalize;\nexports.def = def;\nexports.escapeHtml = escapeHtml;\nexports.escapeHtmlComment = escapeHtmlComment;\nexports.extend = extend;\nexports.genPropsAccessExp = genPropsAccessExp;\nexports.generateCodeFrame = generateCodeFrame;\nexports.getGlobalThis = getGlobalThis;\nexports.hasChanged = hasChanged;\nexports.hasOwn = hasOwn;\nexports.hyphenate = hyphenate;\nexports.includeBooleanAttr = includeBooleanAttr;\nexports.invokeArrayFns = invokeArrayFns;\nexports.isArray = isArray;\nexports.isBooleanAttr = isBooleanAttr;\nexports.isBuiltInDirective = isBuiltInDirective;\nexports.isDate = isDate;\nexports.isFunction = isFunction;\nexports.isGloballyWhitelisted = isGloballyWhitelisted;\nexports.isHTMLTag = isHTMLTag;\nexports.isIntegerKey = isIntegerKey;\nexports.isKnownHtmlAttr = isKnownHtmlAttr;\nexports.isKnownSvgAttr = isKnownSvgAttr;\nexports.isMap = isMap;\nexports.isModelListener = isModelListener;\nexports.isObject = isObject;\nexports.isOn = isOn;\nexports.isPlainObject = isPlainObject;\nexports.isPromise = isPromise;\nexports.isRegExp = isRegExp;\nexports.isReservedProp = isReservedProp;\nexports.isSSRSafeAttrName = isSSRSafeAttrName;\nexports.isSVGTag = isSVGTag;\nexports.isSet = isSet;\nexports.isSpecialBooleanAttr = isSpecialBooleanAttr;\nexports.isString = isString;\nexports.isSymbol = isSymbol;\nexports.isVoidTag = isVoidTag;\nexports.looseEqual = looseEqual;\nexports.looseIndexOf = looseIndexOf;\nexports.looseToNumber = looseToNumber;\nexports.makeMap = makeMap;\nexports.normalizeClass = normalizeClass;\nexports.normalizeProps = normalizeProps;\nexports.normalizeStyle = normalizeStyle;\nexports.objectToString = objectToString;\nexports.parseStringStyle = parseStringStyle;\nexports.propsToAttrMap = propsToAttrMap;\nexports.remove = remove;\nexports.slotFlagsText = slotFlagsText;\nexports.stringifyStyle = stringifyStyle;\nexports.toDisplayString = toDisplayString;\nexports.toHandlerKey = toHandlerKey;\nexports.toNumber = toNumber;\nexports.toRawType = toRawType;\nexports.toTypeString = toTypeString;\n/dist/shared.esm-bundler.js\\/**\n * Make a map and return a function for checking if a key\n * is in that map.\n * IMPORTANT: all calls of this function must be prefixed with\n * \\/\\*#\\_\\_PURE\\_\\_\\*\\/\n * So that rollup can tree-shake them if necessary.\n */\nfunction makeMap(str, expectsLowerCase) {\n    const map = Object.create(null);\n    const list = str.split(',');\n    for (let i = 0; i < list.length; i++) {\n        map[list[i]] = true;\n    }\n    return expectsLowerCase ? val => !!map[val.toLowerCase()] : val => !!map[val];\n}\n\n/**\n * dev only flag -> name mapping\n */\nconst PatchFlagNames = {\n    [1 /* PatchFlags.TEXT */]: `TEXT`,\n    [2 /* PatchFlags.CLASS */]: `CLASS`,\n    [4 /* PatchFlags.STYLE */]: `STYLE`,\n    [8 /* PatchFlags.PROPS */]: `PROPS`,\n    [16 /* PatchFlags.FULL_PROPS */]: `FULL_PROPS`,\n    [32 /* PatchFlags.HYDRATE_EVENTS */]: `HYDRATE_EVENTS`,\n    [64 /* PatchFlags.STABLE_FRAGMENT */]: `STABLE_FRAGMENT`,\n    [128 /* PatchFlags.KEYED_FRAGMENT */]: `KEYED_FRAGMENT`,\n    [256 /* PatchFlags.UNKEYED_FRAGMENT */]: `UNKEYED_FRAGMENT`,\n    [512 /* PatchFlags.NEED_PATCH */]: `NEED_PATCH`,\n    [1024 /* PatchFlags.DYNAMIC_SLOTS */]: `DYNAMIC_SLOTS`,\n    [2048 /* PatchFlags.DEV_ROOT_FRAGMENT */]: `DEV_ROOT_FRAGMENT`,\n    [-1 /* PatchFlags.HOISTED */]: `HOISTED`,\n    [-2 /* PatchFlags.BAIL */]: `BAIL`\n};\n\n/**\n * Dev only\n */\nconst slotFlagsText = {\n    [1 /* SlotFlags.STABLE */]: 'STABLE',\n    [2 /* SlotFlags.DYNAMIC */]: 'DYNAMIC',\n    [3 /* SlotFlags.FORWARDED */]: 'FORWARDED'\n};\n\nconst GLOBALS_WHITE_LISTED = 'Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,' +\n    'decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,' +\n    'Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt';\nconst isGloballyWhitelisted = /*#__PURE__*/ makeMap(GLOBALS_WHITE_LISTED);\n\nconst range = 2;\nfunction generateCodeFrame(source, start = 0, end = source.length) {\n    // Split the content into individual lines but capture the newline sequence\n    // that separated each line. This is important because the actual sequence is\n    // needed to properly take into account the full line length for offset\n    // comparison\n    let lines = source.split(/(\\r?\\n)/);\n    // Separate the lines and newline sequences into separate arrays for easier referencing\n    const newlineSequences = lines.filter((_, idx) => idx % 2 === 1);\n    lines = lines.filter((_, idx) => idx % 2 === 0);\n    let count = 0;\n    const res = [];\n    for (let i = 0; i < lines.length; i++) {\n        count +=\n            lines[i].length +\n                ((newlineSequences[i] && newlineSequences[i].length) || 0);\n        if (count >= start) {\n            for (let j = i - range; j <= i + range || end > count; j++) {\n                if (j < 0 || j >= lines.length)\n                    continue;\n                const line = j + 1;\n                res.push(`${line}${' '.repeat(Math.max(3 - String(line).length, 0))}|  ${lines[j]}`);\n                const lineLength = lines[j].length;\n                const newLineSeqLength = (newlineSequences[j] && newlineSequences[j].length) || 0;\n                if (j === i) {\n                    // push underline\n                    const pad = start - (count - (lineLength + newLineSeqLength));\n                    const length = Math.max(1, end > count ? lineLength - pad : end - start);\n                    res.push(`   |  ` + ' '.repeat(pad) + '^'.repeat(length));\n                }\n                else if (j > i) {\n                    if (end > count) {\n                        const length = Math.max(Math.min(end - count, lineLength), 1);\n                        res.push(`   |  ` + '^'.repeat(length));\n                    }\n                    count += lineLength + newLineSeqLength;\n                }\n            }\n            break;\n        }\n    }\n    return res.join('\\n');\n}\n\nfunction normalizeStyle(value) {\n    if (isArray(value)) {\n        const res = {};\n        for (let i = 0; i < value.length; i++) {\n            const item = value[i];\n            const normalized = isString(item)\n                ? parseStringStyle(item)\n                : normalizeStyle(item);\n            if (normalized) {\n                for (const key in normalized) {\n                    res[key] = normalized[key];\n                }\n            }\n        }\n        return res;\n    }\n    else if (isString(value)) {\n        return value;\n    }\n    else if (isObject(value)) {\n        return value;\n    }\n}\nconst listDelimiterRE = /;(?![^(]*\\))/g;\nconst propertyDelimiterRE = /:([^]+)/;\nconst styleCommentRE = /\\/\\*.*?\\*\\//gs;\nfunction parseStringStyle(cssText) {\n    const ret = {};\n    cssText\n        .replace(styleCommentRE, '')\n        .split(listDelimiterRE)\n        .forEach(item => {\n        if (item) {\n            const tmp = item.split(propertyDelimiterRE);\n            tmp.length > 1 && (ret[tmp[0].trim()] = tmp[1].trim());\n        }\n    });\n    return ret;\n}\nfunction stringifyStyle(styles) {\n    let ret = '';\n    if (!styles || isString(styles)) {\n        return ret;\n    }\n    for (const key in styles) {\n        const value = styles[key];\n        const normalizedKey = key.startsWith(`--`) ? key : hyphenate(key);\n        if (isString(value) || typeof value === 'number') {\n            // only render valid values\n            ret += `${normalizedKey}:${value};`;\n        }\n    }\n    return ret;\n}\nfunction normalizeClass(value) {\n    let res = '';\n    if (isString(value)) {\n        res = value;\n    }\n    else if (isArray(value)) {\n        for (let i = 0; i < value.length; i++) {\n            const normalized = normalizeClass(value[i]);\n            if (normalized) {\n                res += normalized + ' ';\n            }\n        }\n    }\n    else if (isObject(value)) {\n        for (const name in value) {\n            if (value[name]) {\n                res += name + ' ';\n            }\n        }\n    }\n    return res.trim();\n}\nfunction normalizeProps(props) {\n    if (!props)\n        return null;\n    let { class: klass, style } = props;\n    if (klass && !isString(klass)) {\n        props.class = normalizeClass(klass);\n    }\n    if (style) {\n        props.style = normalizeStyle(style);\n    }\n    return props;\n}\n\n// These tag configs are shared between compiler-dom and runtime-dom, so they\n// https://developer.mozilla.org/en-US/docs/Web/HTML/Element\nconst HTML_TAGS = 'html,body,base,head,link,meta,style,title,address,article,aside,footer,' +\n    'header,hgroup,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,' +\n    'figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,' +\n    'data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,' +\n    'time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,' +\n    'canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,' +\n    'th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,' +\n    'option,output,progress,select,textarea,details,dialog,menu,' +\n    'summary,template,blockquote,iframe,tfoot';\n// https://developer.mozilla.org/en-US/docs/Web/SVG/Element\nconst SVG_TAGS = 'svg,animate,animateMotion,animateTransform,circle,clipPath,color-profile,' +\n    'defs,desc,discard,ellipse,feBlend,feColorMatrix,feComponentTransfer,' +\n    'feComposite,feConvolveMatrix,feDiffuseLighting,feDisplacementMap,' +\n    'feDistantLight,feDropShadow,feFlood,feFuncA,feFuncB,feFuncG,feFuncR,' +\n    'feGaussianBlur,feImage,feMerge,feMergeNode,feMorphology,feOffset,' +\n    'fePointLight,feSpecularLighting,feSpotLight,feTile,feTurbulence,filter,' +\n    'foreignObject,g,hatch,hatchpath,image,line,linearGradient,marker,mask,' +\n    'mesh,meshgradient,meshpatch,meshrow,metadata,mpath,path,pattern,' +\n    'polygon,polyline,radialGradient,rect,set,solidcolor,stop,switch,symbol,' +\n    'text,textPath,title,tspan,unknown,use,view';\nconst VOID_TAGS = 'area,base,br,col,embed,hr,img,input,link,meta,param,source,track,wbr';\n/**\n * Compiler only.\n * Do NOT use in runtime code paths unless behind `(process.env.NODE_ENV !== 'production')` flag.\n */\nconst isHTMLTag = /*#__PURE__*/ makeMap(HTML_TAGS);\n/**\n * Compiler only.\n * Do NOT use in runtime code paths unless behind `(process.env.NODE_ENV !== 'production')` flag.\n */\nconst isSVGTag = /*#__PURE__*/ makeMap(SVG_TAGS);\n/**\n * Compiler only.\n * Do NOT use in runtime code paths unless behind `(process.env.NODE_ENV !== 'production')` flag.\n */\nconst isVoidTag = /*#__PURE__*/ makeMap(VOID_TAGS);\n\n/**\n * On the client we only need to offer special cases for boolean attributes that\n * have different names from their corresponding dom properties:\n * - itemscope -> N/A\n * - allowfullscreen -> allowFullscreen\n * - formnovalidate -> formNoValidate\n * - ismap -> isMap\n * - nomodule -> noModule\n * - novalidate -> noValidate\n * - readonly -> readOnly\n */\nconst specialBooleanAttrs = `itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly`;\nconst isSpecialBooleanAttr = /*#__PURE__*/ makeMap(specialBooleanAttrs);\n/**\n * The full list is needed during SSR to produce the correct initial markup.\n */\nconst isBooleanAttr = /*#__PURE__*/ makeMap(specialBooleanAttrs +\n    `,async,autofocus,autoplay,controls,default,defer,disabled,hidden,` +\n    `loop,open,required,reversed,scoped,seamless,` +\n    `checked,muted,multiple,selected`);\n/**\n * Boolean attributes should be included if the value is truthy or ''.\n * e.g. `<select multiple>` compiles to `{ multiple: '' }`\n */\nfunction includeBooleanAttr(value) {\n    return !!value || value === '';\n}\nconst unsafeAttrCharRE = /[>/=\"'\\u0009\\u000a\\u000c\\u0020]/;\nconst attrValidationCache = {};\nfunction isSSRSafeAttrName(name) {\n    if (attrValidationCache.hasOwnProperty(name)) {\n        return attrValidationCache[name];\n    }\n    const isUnsafe = unsafeAttrCharRE.test(name);\n    if (isUnsafe) {\n        console.error(`unsafe attribute name: ${name}`);\n    }\n    return (attrValidationCache[name] = !isUnsafe);\n}\nconst propsToAttrMap = {\n    acceptCharset: 'accept-charset',\n    className: 'class',\n    htmlFor: 'for',\n    httpEquiv: 'http-equiv'\n};\n/**\n * Known attributes, this is used for stringification of runtime static nodes\n * so that we don't stringify bindings that cannot be set from HTML.\n * Don't also forget to allow `data-*` and `aria-*`!\n * Generated from https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes\n */\nconst isKnownHtmlAttr = /*#__PURE__*/ makeMap(`accept,accept-charset,accesskey,action,align,allow,alt,async,` +\n    `autocapitalize,autocomplete,autofocus,autoplay,background,bgcolor,` +\n    `border,buffered,capture,challenge,charset,checked,cite,class,code,` +\n    `codebase,color,cols,colspan,content,contenteditable,contextmenu,controls,` +\n    `coords,crossorigin,csp,data,datetime,decoding,default,defer,dir,dirname,` +\n    `disabled,download,draggable,dropzone,enctype,enterkeyhint,for,form,` +\n    `formaction,formenctype,formmethod,formnovalidate,formtarget,headers,` +\n    `height,hidden,high,href,hreflang,http-equiv,icon,id,importance,integrity,` +\n    `ismap,itemprop,keytype,kind,label,lang,language,loading,list,loop,low,` +\n    `manifest,max,maxlength,minlength,media,min,multiple,muted,name,novalidate,` +\n    `open,optimum,pattern,ping,placeholder,poster,preload,radiogroup,readonly,` +\n    `referrerpolicy,rel,required,reversed,rows,rowspan,sandbox,scope,scoped,` +\n    `selected,shape,size,sizes,slot,span,spellcheck,src,srcdoc,srclang,srcset,` +\n    `start,step,style,summary,tabindex,target,title,translate,type,usemap,` +\n    `value,width,wrap`);\n/**\n * Generated from https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute\n */\nconst isKnownSvgAttr = /*#__PURE__*/ makeMap(`xmlns,accent-height,accumulate,additive,alignment-baseline,alphabetic,amplitude,` +\n    `arabic-form,ascent,attributeName,attributeType,azimuth,baseFrequency,` +\n    `baseline-shift,baseProfile,bbox,begin,bias,by,calcMode,cap-height,class,` +\n    `clip,clipPathUnits,clip-path,clip-rule,color,color-interpolation,` +\n    `color-interpolation-filters,color-profile,color-rendering,` +\n    `contentScriptType,contentStyleType,crossorigin,cursor,cx,cy,d,decelerate,` +\n    `descent,diffuseConstant,direction,display,divisor,dominant-baseline,dur,dx,` +\n    `dy,edgeMode,elevation,enable-background,end,exponent,fill,fill-opacity,` +\n    `fill-rule,filter,filterRes,filterUnits,flood-color,flood-opacity,` +\n    `font-family,font-size,font-size-adjust,font-stretch,font-style,` +\n    `font-variant,font-weight,format,from,fr,fx,fy,g1,g2,glyph-name,` +\n    `glyph-orientation-horizontal,glyph-orientation-vertical,glyphRef,` +\n    `gradientTransform,gradientUnits,hanging,height,href,hreflang,horiz-adv-x,` +\n    `horiz-origin-x,id,ideographic,image-rendering,in,in2,intercept,k,k1,k2,k3,` +\n    `k4,kernelMatrix,kernelUnitLength,kerning,keyPoints,keySplines,keyTimes,` +\n    `lang,lengthAdjust,letter-spacing,lighting-color,limitingConeAngle,local,` +\n    `marker-end,marker-mid,marker-start,markerHeight,markerUnits,markerWidth,` +\n    `mask,maskContentUnits,maskUnits,mathematical,max,media,method,min,mode,` +\n    `name,numOctaves,offset,opacity,operator,order,orient,orientation,origin,` +\n    `overflow,overline-position,overline-thickness,panose-1,paint-order,path,` +\n    `pathLength,patternContentUnits,patternTransform,patternUnits,ping,` +\n    `pointer-events,points,pointsAtX,pointsAtY,pointsAtZ,preserveAlpha,` +\n    `preserveAspectRatio,primitiveUnits,r,radius,referrerPolicy,refX,refY,rel,` +\n    `rendering-intent,repeatCount,repeatDur,requiredExtensions,requiredFeatures,` +\n    `restart,result,rotate,rx,ry,scale,seed,shape-rendering,slope,spacing,` +\n    `specularConstant,specularExponent,speed,spreadMethod,startOffset,` +\n    `stdDeviation,stemh,stemv,stitchTiles,stop-color,stop-opacity,` +\n    `strikethrough-position,strikethrough-thickness,string,stroke,` +\n    `stroke-dasharray,stroke-dashoffset,stroke-linecap,stroke-linejoin,` +\n    `stroke-miterlimit,stroke-opacity,stroke-width,style,surfaceScale,` +\n    `systemLanguage,tabindex,tableValues,target,targetX,targetY,text-anchor,` +\n    `text-decoration,text-rendering,textLength,to,transform,transform-origin,` +\n    `type,u1,u2,underline-position,underline-thickness,unicode,unicode-bidi,` +\n    `unicode-range,units-per-em,v-alphabetic,v-hanging,v-ideographic,` +\n    `v-mathematical,values,vector-effect,version,vert-adv-y,vert-origin-x,` +\n    `vert-origin-y,viewBox,viewTarget,visibility,width,widths,word-spacing,` +\n    `writing-mode,x,x-height,x1,x2,xChannelSelector,xlink:actuate,xlink:arcrole,` +\n    `xlink:href,xlink:role,xlink:show,xlink:title,xlink:type,xml:base,xml:lang,` +\n    `xml:space,y,y1,y2,yChannelSelector,z,zoomAndPan`);\n\nconst escapeRE = /[\"'&<>]/;\nfunction escapeHtml(string) {\n    const str = '' + string;\n    const match = escapeRE.exec(str);\n    if (!match) {\n        return str;\n    }\n    let html = '';\n    let escaped;\n    let index;\n    let lastIndex = 0;\n    for (index = match.index; index < str.length; index++) {\n        switch (str.charCodeAt(index)) {\n            case 34: // \"\n                escaped = '&quot;';\n                break;\n            case 38: // &\n                escaped = '&amp;';\n                break;\n            case 39: // '\n                escaped = '&#39;';\n                break;\n            case 60: // <\n                escaped = '&lt;';\n                break;\n            case 62: // >\n                escaped = '&gt;';\n                break;\n            default:\n                continue;\n        }\n        if (lastIndex !== index) {\n            html += str.slice(lastIndex, index);\n        }\n        lastIndex = index + 1;\n        html += escaped;\n    }\n    return lastIndex !== index ? html + str.slice(lastIndex, index) : html;\n}\n// https://www.w3.org/TR/html52/syntax.html#comments\nconst commentStripRE = /^-?>|<!--|-->|--!>|<!-$/g;\nfunction escapeHtmlComment(src) {\n    return src.replace(commentStripRE, '');\n}\n\nfunction looseCompareArrays(a, b) {\n    if (a.length !== b.length)\n        return false;\n    let equal = true;\n    for (let i = 0; equal && i < a.length; i++) {\n        equal = looseEqual(a[i], b[i]);\n    }\n    return equal;\n}\nfunction looseEqual(a, b) {\n    if (a === b)\n        return true;\n    let aValidType = isDate(a);\n    let bValidType = isDate(b);\n    if (aValidType || bValidType) {\n        return aValidType && bValidType ? a.getTime() === b.getTime() : false;\n    }\n    aValidType = isSymbol(a);\n    bValidType = isSymbol(b);\n    if (aValidType || bValidType) {\n        return a === b;\n    }\n    aValidType = isArray(a);\n    bValidType = isArray(b);\n    if (aValidType || bValidType) {\n        return aValidType && bValidType ? looseCompareArrays(a, b) : false;\n    }\n    aValidType = isObject(a);\n    bValidType = isObject(b);\n    if (aValidType || bValidType) {\n        /* istanbul ignore if: this if will probably never be called */\n        if (!aValidType || !bValidType) {\n            return false;\n        }\n        const aKeysCount = Object.keys(a).length;\n        const bKeysCount = Object.keys(b).length;\n        if (aKeysCount !== bKeysCount) {\n            return false;\n        }\n        for (const key in a) {\n            const aHasKey = a.hasOwnProperty(key);\n            const bHasKey = b.hasOwnProperty(key);\n            if ((aHasKey && !bHasKey) ||\n                (!aHasKey && bHasKey) ||\n                !looseEqual(a[key], b[key])) {\n                return false;\n            }\n        }\n    }\n    return String(a) === String(b);\n}\nfunction looseIndexOf(arr, val) {\n    return arr.findIndex(item => looseEqual(item, val));\n}\n\n/**\n * For converting {{ interpolation }} values to displayed strings.\n * @private\n */\nconst toDisplayString = (val) => {\n    return isString(val)\n        ? val\n        : val == null\n            ? ''\n            : isArray(val) ||\n                (isObject(val) &&\n                    (val.toString === objectToString || !isFunction(val.toString)))\n                ? JSON.stringify(val, replacer, 2)\n                : String(val);\n};\nconst replacer = (_key, val) => {\n    // can't use isRef here since @vue/shared has no deps\n    if (val && val.__v_isRef) {\n        return replacer(_key, val.value);\n    }\n    else if (isMap(val)) {\n        return {\n            [`Map(${val.size})`]: [...val.entries()].reduce((entries, [key, val]) => {\n                entries[`${key} =>`] = val;\n                return entries;\n            }, {})\n        };\n    }\n    else if (isSet(val)) {\n        return {\n            [`Set(${val.size})`]: [...val.values()]\n        };\n    }\n    else if (isObject(val) && !isArray(val) && !isPlainObject(val)) {\n        return String(val);\n    }\n    return val;\n};\n\nconst EMPTY_OBJ = (process.env.NODE_ENV !== 'production')\n    ? Object.freeze({})\n    : {};\nconst EMPTY_ARR = (process.env.NODE_ENV !== 'production') ? Object.freeze([]) : [];\nconst NOOP = () => { };\n/**\n * Always return false.\n */\nconst NO = () => false;\nconst onRE = /^on[^a-z]/;\nconst isOn = (key) => onRE.test(key);\nconst isModelListener = (key) => key.startsWith('onUpdate:');\nconst extend = Object.assign;\nconst remove = (arr, el) => {\n    const i = arr.indexOf(el);\n    if (i > -1) {\n        arr.splice(i, 1);\n    }\n};\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\nconst hasOwn = (val, key) => hasOwnProperty.call(val, key);\nconst isArray = Array.isArray;\nconst isMap = (val) => toTypeString(val) === '[object Map]';\nconst isSet = (val) => toTypeString(val) === '[object Set]';\nconst isDate = (val) => toTypeString(val) === '[object Date]';\nconst isRegExp = (val) => toTypeString(val) === '[object RegExp]';\nconst isFunction = (val) => typeof val === 'function';\nconst isString = (val) => typeof val === 'string';\nconst isSymbol = (val) => typeof val === 'symbol';\nconst isObject = (val) => val !== null && typeof val === 'object';\nconst isPromise = (val) => {\n    return isObject(val) && isFunction(val.then) && isFunction(val.catch);\n};\nconst objectToString = Object.prototype.toString;\nconst toTypeString = (value) => objectToString.call(value);\nconst toRawType = (value) => {\n    // extract \"RawType\" from strings like \"[object RawType]\"\n    return toTypeString(value).slice(8, -1);\n};\nconst isPlainObject = (val) => toTypeString(val) === '[object Object]';\nconst isIntegerKey = (key) => isString(key) &&\n    key !== 'NaN' &&\n    key[0] !== '-' &&\n    '' + parseInt(key, 10) === key;\nconst isReservedProp = /*#__PURE__*/ makeMap(\n// the leading comma is intentional so empty string \"\" is also included\n',key,ref,ref_for,ref_key,' +\n    'onVnodeBeforeMount,onVnodeMounted,' +\n    'onVnodeBeforeUpdate,onVnodeUpdated,' +\n    'onVnodeBeforeUnmount,onVnodeUnmounted');\nconst isBuiltInDirective = /*#__PURE__*/ makeMap('bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo');\nconst cacheStringFunction = (fn) => {\n    const cache = Object.create(null);\n    return ((str) => {\n        const hit = cache[str];\n        return hit || (cache[str] = fn(str));\n    });\n};\nconst camelizeRE = /-(\\w)/g;\n/**\n * @private\n */\nconst camelize = cacheStringFunction((str) => {\n    return str.replace(camelizeRE, (_, c) => (c ? c.toUpperCase() : ''));\n});\nconst hyphenateRE = /\\B([A-Z])/g;\n/**\n * @private\n */\nconst hyphenate = cacheStringFunction((str) => str.replace(hyphenateRE, '-$1').toLowerCase());\n/**\n * @private\n */\nconst capitalize = cacheStringFunction((str) => str.charAt(0).toUpperCase() + str.slice(1));\n/**\n * @private\n */\nconst toHandlerKey = cacheStringFunction((str) => str ? `on${capitalize(str)}` : ``);\n// compare whether a value has changed, accounting for NaN.\nconst hasChanged = (value, oldValue) => !Object.is(value, oldValue);\nconst invokeArrayFns = (fns, arg) => {\n    for (let i = 0; i < fns.length; i++) {\n        fns[i](arg);\n    }\n};\nconst def = (obj, key, value) => {\n    Object.defineProperty(obj, key, {\n        configurable: true,\n        enumerable: false,\n        value\n    });\n};\n/**\n * \"123-foo\" will be parsed to 123\n * This is used for the .number modifier in v-model\n */\nconst looseToNumber = (val) => {\n    const n = parseFloat(val);\n    return isNaN(n) ? val : n;\n};\n/**\n * Only conerces number-like strings\n * \"123-foo\" will be returned as-is\n */\nconst toNumber = (val) => {\n    const n = isString(val) ? Number(val) : NaN;\n    return isNaN(n) ? val : n;\n};\nlet _globalThis;\nconst getGlobalThis = () => {\n    return (_globalThis ||\n        (_globalThis =\n            typeof globalThis !== 'undefined'\n                ? globalThis\n                : typeof self !== 'undefined'\n                    ? self\n                    : typeof window !== 'undefined'\n                        ? window\n                        : typeof global !== 'undefined'\n                            ? global\n                            : {}));\n};\nconst identRE = /^[_$a-zA-Z\\xA0-\\uFFFF][_$a-zA-Z0-9\\xA0-\\uFFFF]*$/;\nfunction genPropsAccessExp(name) {\n    return identRE.test(name)\n        ? `__props.${name}`\n        : `__props[${JSON.stringify(name)}]`;\n}\n\nexport { EMPTY_ARR, EMPTY_OBJ, NO, NOOP, PatchFlagNames, camelize, capitalize, def, escapeHtml, escapeHtmlComment, extend, genPropsAccessExp, generateCodeFrame, getGlobalThis, hasChanged, hasOwn, hyphenate, includeBooleanAttr, invokeArrayFns, isArray, isBooleanAttr, isBuiltInDirective, isDate, isFunction, isGloballyWhitelisted, isHTMLTag, isIntegerKey, isKnownHtmlAttr, isKnownSvgAttr, isMap, isModelListener, isObject, isOn, isPlainObject, isPromise, isRegExp, isReservedProp, isSSRSafeAttrName, isSVGTag, isSet, isSpecialBooleanAttr, isString, isSymbol, isVoidTag, looseEqual, looseIndexOf, looseToNumber, makeMap, normalizeClass, normalizeProps, normalizeStyle, objectToString, parseStringStyle, propsToAttrMap, remove, slotFlagsText, stringifyStyle, toDisplayString, toHandlerKey, toNumber, toRawType, toTypeString };\n/dist/shared.d.ts./**\r\n * @private\r\n */\r\nexport declare const camelize: (str: string) => string;\r\n\r\n/**\r\n * @private\r\n */\r\nexport declare const capitalize: (str: string) => string;\r\n\r\nexport declare const def: (obj: object, key: string | symbol, value: any) => void;\r\n\r\nexport declare const EMPTY_ARR: readonly never[];\r\n\r\nexport declare const EMPTY_OBJ: {\r\n    readonly [key: string]: any;\r\n};\r\n\r\nexport declare function escapeHtml(string: unknown): string;\r\n\r\nexport declare function escapeHtmlComment(src: string): string;\r\n\r\nexport declare const extend: {\r\n    <T extends {}, U>(target: T, source: U): T & U;\r\n    <T_1 extends {}, U_1, V>(target: T_1, source1: U_1, source2: V): T_1 & U_1 & V;\r\n    <T_2 extends {}, U_2, V_1, W>(target: T_2, source1: U_2, source2: V_1, source3: W): T_2 & U_2 & V_1 & W;\r\n    (target: object, ...sources: any[]): any;\r\n};\r\n\r\nexport declare function generateCodeFrame(source: string, start?: number, end?: number): string;\r\n\r\nexport declare function genPropsAccessExp(name: string): string;\r\n\r\nexport declare const getGlobalThis: () => any;\r\n\r\nexport declare const hasChanged: (value: any, oldValue: any) => boolean;\r\n\r\nexport declare const hasOwn: (val: object, key: string | symbol) => key is never;\r\n\r\n/**\r\n * @private\r\n */\r\nexport declare const hyphenate: (str: string) => string;\r\n\r\nexport declare type IfAny<T, Y, N> = 0 extends 1 & T ? Y : N;\r\n\r\n/**\r\n * Boolean attributes should be included if the value is truthy or ''.\r\n * e.g. `<select multiple>` compiles to `{ multiple: '' }`\r\n */\r\nexport declare function includeBooleanAttr(value: unknown): boolean;\r\n\r\nexport declare const invokeArrayFns: (fns: Function[], arg?: any) => void;\r\n\r\nexport declare const isArray: (arg: any) => arg is any[];\r\n\r\n/**\r\n * The full list is needed during SSR to produce the correct initial markup.\r\n */\r\nexport declare const isBooleanAttr: (key: string) => boolean;\r\n\r\nexport declare const isBuiltInDirective: (key: string) => boolean;\r\n\r\nexport declare const isDate: (val: unknown) => val is Date;\r\n\r\nexport declare const isFunction: (val: unknown) => val is Function;\r\n\r\nexport declare const isGloballyWhitelisted: (key: string) => boolean;\r\n\r\n/**\r\n * Compiler only.\r\n * Do NOT use in runtime code paths unless behind `__DEV__` flag.\r\n */\r\nexport declare const isHTMLTag: (key: string) => boolean;\r\n\r\nexport declare const isIntegerKey: (key: unknown) => boolean;\r\n\r\n/**\r\n * Known attributes, this is used for stringification of runtime static nodes\r\n * so that we don't stringify bindings that cannot be set from HTML.\r\n * Don't also forget to allow `data-*` and `aria-*`!\r\n * Generated from https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes\r\n */\r\nexport declare const isKnownHtmlAttr: (key: string) => boolean;\r\n\r\n/**\r\n * Generated from https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute\r\n */\r\nexport declare const isKnownSvgAttr: (key: string) => boolean;\r\n\r\nexport declare const isMap: (val: unknown) => val is Map<any, any>;\r\n\r\nexport declare const isModelListener: (key: string) => boolean;\r\n\r\nexport declare const isObject: (val: unknown) => val is Record<any, any>;\r\n\r\nexport declare const isOn: (key: string) => boolean;\r\n\r\nexport declare const isPlainObject: (val: unknown) => val is object;\r\n\r\nexport declare const isPromise: <T = any>(val: unknown) => val is Promise<T>;\r\n\r\nexport declare const isRegExp: (val: unknown) => val is RegExp;\r\n\r\nexport declare const isReservedProp: (key: string) => boolean;\r\n\r\nexport declare const isSet: (val: unknown) => val is Set<any>;\r\n\r\nexport declare const isSpecialBooleanAttr: (key: string) => boolean;\r\n\r\nexport declare function isSSRSafeAttrName(name: string): boolean;\r\n\r\nexport declare const isString: (val: unknown) => val is string;\r\n\r\n/**\r\n * Compiler only.\r\n * Do NOT use in runtime code paths unless behind `__DEV__` flag.\r\n */\r\nexport declare const isSVGTag: (key: string) => boolean;\r\n\r\nexport declare const isSymbol: (val: unknown) => val is symbol;\r\n\r\n/**\r\n * Compiler only.\r\n * Do NOT use in runtime code paths unless behind `__DEV__` flag.\r\n */\r\nexport declare const isVoidTag: (key: string) => boolean;\r\n\r\nexport declare function looseEqual(a: any, b: any): boolean;\r\n\r\nexport declare function looseIndexOf(arr: any[], val: any): number;\r\n\r\nexport declare type LooseRequired<T> = {\r\n    [P in keyof (T & Required<T>)]: T[P];\r\n};\r\n\r\n/**\r\n * \"123-foo\" will be parsed to 123\r\n * This is used for the .number modifier in v-model\r\n */\r\nexport declare const looseToNumber: (val: any) => any;\r\n\r\n/**\r\n * Make a map and return a function for checking if a key\r\n * is in that map.\r\n * IMPORTANT: all calls of this function must be prefixed with\r\n * \\/\\*#\\_\\_PURE\\_\\_\\*\\/\r\n * So that rollup can tree-shake them if necessary.\r\n */\r\nexport declare function makeMap(str: string, expectsLowerCase?: boolean): (key: string) => boolean;\r\n\r\n/**\r\n * Always return false.\r\n */\r\nexport declare const NO: () => boolean;\r\n\r\nexport declare const NOOP: () => void;\r\n\r\nexport declare function normalizeClass(value: unknown): string;\r\n\r\nexport declare type NormalizedStyle = Record<string, string | number>;\r\n\r\nexport declare function normalizeProps(props: Record<string, any> | null): Record<string, any> | null;\r\n\r\nexport declare function normalizeStyle(value: unknown): NormalizedStyle | string | undefined;\r\n\r\nexport declare const objectToString: () => string;\r\n\r\nexport declare function parseStringStyle(cssText: string): NormalizedStyle;\r\n\r\n/**\r\n * dev only flag -> name mapping\r\n */\r\nexport declare const PatchFlagNames: {\r\n    [x: number]: string;\r\n};\r\n\r\n/**\r\n * Patch flags are optimization hints generated by the compiler.\r\n * when a block with dynamicChildren is encountered during diff, the algorithm\r\n * enters \"optimized mode\". In this mode, we know that the vdom is produced by\r\n * a render function generated by the compiler, so the algorithm only needs to\r\n * handle updates explicitly marked by these patch flags.\r\n *\r\n * Patch flags can be combined using the | bitwise operator and can be checked\r\n * using the & operator, e.g.\r\n *\r\n * ```js\r\n * const flag = TEXT | CLASS\r\n * if (flag & TEXT) { ... }\r\n * ```\r\n *\r\n * Check the `patchElement` function in '../../runtime-core/src/renderer.ts' to see how the\r\n * flags are handled during diff.\r\n */\r\nexport declare const enum PatchFlags {\r\n    /**\r\n     * Indicates an element with dynamic textContent (children fast path)\r\n     */\r\n    TEXT = 1,\r\n    /**\r\n     * Indicates an element with dynamic class binding.\r\n     */\r\n    CLASS = 2,\r\n    /**\r\n     * Indicates an element with dynamic style\r\n     * The compiler pre-compiles static string styles into static objects\r\n     * + detects and hoists inline static objects\r\n     * e.g. `style=\"color: red\"` and `:style=\"{ color: 'red' }\"` both get hoisted\r\n     * as:\r\n     * ```js\r\n     * const style = { color: 'red' }\r\n     * render() { return e('div', { style }) }\r\n     * ```\r\n     */\r\n    STYLE = 4,\r\n    /**\r\n     * Indicates an element that has non-class/style dynamic props.\r\n     * Can also be on a component that has any dynamic props (includes\r\n     * class/style). when this flag is present, the vnode also has a dynamicProps\r\n     * array that contains the keys of the props that may change so the runtime\r\n     * can diff them faster (without having to worry about removed props)\r\n     */\r\n    PROPS = 8,\r\n    /**\r\n     * Indicates an element with props with dynamic keys. When keys change, a full\r\n     * diff is always needed to remove the old key. This flag is mutually\r\n     * exclusive with CLASS, STYLE and PROPS.\r\n     */\r\n    FULL_PROPS = 16,\r\n    /**\r\n     * Indicates an element with event listeners (which need to be attached\r\n     * during hydration)\r\n     */\r\n    HYDRATE_EVENTS = 32,\r\n    /**\r\n     * Indicates a fragment whose children order doesn't change.\r\n     */\r\n    STABLE_FRAGMENT = 64,\r\n    /**\r\n     * Indicates a fragment with keyed or partially keyed children\r\n     */\r\n    KEYED_FRAGMENT = 128,\r\n    /**\r\n     * Indicates a fragment with unkeyed children.\r\n     */\r\n    UNKEYED_FRAGMENT = 256,\r\n    /**\r\n     * Indicates an element that only needs non-props patching, e.g. ref or\r\n     * directives (onVnodeXXX hooks). since every patched vnode checks for refs\r\n     * and onVnodeXXX hooks, it simply marks the vnode so that a parent block\r\n     * will track it.\r\n     */\r\n    NEED_PATCH = 512,\r\n    /**\r\n     * Indicates a component with dynamic slots (e.g. slot that references a v-for\r\n     * iterated value, or dynamic slot names).\r\n     * Components with this flag are always force updated.\r\n     */\r\n    DYNAMIC_SLOTS = 1024,\r\n    /**\r\n     * Indicates a fragment that was created only because the user has placed\r\n     * comments at the root level of a template. This is a dev-only flag since\r\n     * comments are stripped in production.\r\n     */\r\n    DEV_ROOT_FRAGMENT = 2048,\r\n    /**\r\n     * SPECIAL FLAGS -------------------------------------------------------------\r\n     * Special flags are negative integers. They are never matched against using\r\n     * bitwise operators (bitwise matching should only happen in branches where\r\n     * patchFlag > 0), and are mutually exclusive. When checking for a special\r\n     * flag, simply check patchFlag === FLAG.\r\n     */\r\n    /**\r\n     * Indicates a hoisted static vnode. This is a hint for hydration to skip\r\n     * the entire sub tree since static content never needs to be updated.\r\n     */\r\n    HOISTED = -1,\r\n    /**\r\n     * A special flag that indicates that the diffing algorithm should bail out\r\n     * of optimized mode. For example, on block fragments created by renderSlot()\r\n     * when encountering non-compiler generated slots (i.e. manually written\r\n     * render functions, which should always be fully diffed)\r\n     * OR manually cloneVNodes\r\n     */\r\n    BAIL = -2\r\n}\r\n\r\nexport declare const propsToAttrMap: Record<string, string | undefined>;\r\n\r\nexport declare const remove: <T>(arr: T[], el: T) => void;\r\n\r\nexport declare const enum ShapeFlags {\r\n    ELEMENT = 1,\r\n    FUNCTIONAL_COMPONENT = 2,\r\n    STATEFUL_COMPONENT = 4,\r\n    TEXT_CHILDREN = 8,\r\n    ARRAY_CHILDREN = 16,\r\n    SLOTS_CHILDREN = 32,\r\n    TELEPORT = 64,\r\n    SUSPENSE = 128,\r\n    COMPONENT_SHOULD_KEEP_ALIVE = 256,\r\n    COMPONENT_KEPT_ALIVE = 512,\r\n    COMPONENT = 6\r\n}\r\n\r\nexport declare const enum SlotFlags {\r\n    /**\r\n     * Stable slots that only reference slot props or context state. The slot\r\n     * can fully capture its own dependencies so when passed down the parent won't\r\n     * need to force the child to update.\r\n     */\r\n    STABLE = 1,\r\n    /**\r\n     * Slots that reference scope variables (v-for or an outer slot prop), or\r\n     * has conditional structure (v-if, v-for). The parent will need to force\r\n     * the child to update because the slot does not fully capture its dependencies.\r\n     */\r\n    DYNAMIC = 2,\r\n    /**\r\n     * `<slot/>` being forwarded into a child component. Whether the parent needs\r\n     * to update the child is dependent on what kind of slots the parent itself\r\n     * received. This has to be refined at runtime, when the child's vnode\r\n     * is being created (in `normalizeChildren`)\r\n     */\r\n    FORWARDED = 3\r\n}\r\n\r\n/**\r\n * Dev only\r\n */\r\nexport declare const slotFlagsText: {\r\n    1: string;\r\n    2: string;\r\n    3: string;\r\n};\r\n\r\nexport declare function stringifyStyle(styles: NormalizedStyle | string | undefined): string;\r\n\r\n/**\r\n * For converting {{ interpolation }} values to displayed strings.\r\n * @private\r\n */\r\nexport declare const toDisplayString: (val: unknown) => string;\r\n\r\n/**\r\n * @private\r\n */\r\nexport declare const toHandlerKey: (str: string) => string;\r\n\r\n/**\r\n * Only conerces number-like strings\r\n * \"123-foo\" will be returned as-is\r\n */\r\nexport declare const toNumber: (val: any) => any;\r\n\r\nexport declare const toRawType: (value: unknown) => string;\r\n\r\nexport declare const toTypeString: (value: unknown) => string;\r\n\r\nexport declare type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends (k: infer I) => void ? I : never;\r\n\r\nexport { }\r\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QHZ1ZXByZXNzL21hcmtkb3duQDIuMC4wLWJldGEuNTM=",
    "content": "/LICENSE\u0004CThe MIT License (MIT)\n\nCopyright (c) 2018-present, Yuxi (Evan) You\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n/package.json\u0006{\n  \"name\": \"@vuepress/markdown\",\n  \"version\": \"2.0.0-beta.53\",\n  \"description\": \"Markdown package of VuePress\",\n  \"keywords\": [\n    \"vuepress\",\n    \"markdown\"\n  ],\n  \"homepage\": \"https://github.com/vuepress\",\n  \"bugs\": {\n    \"url\": \"https://github.com/vuepress/vuepress-next/issues\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/vuepress/vuepress-next.git\"\n  },\n  \"license\": \"MIT\",\n  \"author\": \"meteorlxy\",\n  \"type\": \"module\",\n  \"exports\": {\n    \".\": \"./dist/index.js\",\n    \"./package.json\": \"./package.json\"\n  },\n  \"main\": \"./dist/index.js\",\n  \"types\": \"./dist/index.d.ts\",\n  \"files\": [\n    \"dist\"\n  ],\n  \"dependencies\": {\n    \"@mdit-vue/plugin-component\": \"^0.11.1\",\n    \"@mdit-vue/plugin-frontmatter\": \"^0.11.1\",\n    \"@mdit-vue/plugin-headers\": \"^0.11.1\",\n    \"@mdit-vue/plugin-sfc\": \"^0.11.1\",\n    \"@mdit-vue/plugin-title\": \"^0.11.1\",\n    \"@mdit-vue/plugin-toc\": \"^0.11.1\",\n    \"@mdit-vue/shared\": \"^0.11.0\",\n    \"@mdit-vue/types\": \"^0.11.0\",\n    \"@types/markdown-it\": \"^12.2.3\",\n    \"@types/markdown-it-emoji\": \"^2.0.2\",\n    \"@vuepress/shared\": \"2.0.0-beta.53\",\n    \"@vuepress/utils\": \"2.0.0-beta.53\",\n    \"markdown-it\": \"^13.0.1\",\n    \"markdown-it-anchor\": \"^8.6.5\",\n    \"markdown-it-emoji\": \"^2.0.2\",\n    \"mdurl\": \"^1.0.1\"\n  },\n  \"devDependencies\": {\n    \"@types/mdurl\": \"^1.0.2\"\n  },\n  \"publishConfig\": {\n    \"access\": \"public\"\n  },\n  \"tsup\": {\n    \"clean\": true,\n    \"dts\": \"./src/index.ts\",\n    \"entry\": [\n      \"./src/index.ts\"\n    ],\n    \"format\": [\n      \"esm\"\n    ],\n    \"outDir\": \"./dist\",\n    \"sourcemap\": false,\n    \"target\": \"es2020\",\n    \"tsconfig\": \"../tsconfig.dts.json\"\n  },\n  \"scripts\": {\n    \"build\": \"tsup\",\n    \"clean\": \"rimraf dist\"\n  }\n}/dist/index.js>=var __defProp = Object.defineProperty;\nvar __export = (target, all) => {\n  for (var name in all)\n    __defProp(target, name, { get: all[name], enumerable: true });\n};\n\n// src/markdown.ts\nimport { slugify as defaultSlugify } from \"@mdit-vue/shared\";\nimport MarkdownIt from \"markdown-it\";\n\n// src/plugins.ts\nimport {\n  componentPlugin\n} from \"@mdit-vue/plugin-component\";\nimport {\n  frontmatterPlugin\n} from \"@mdit-vue/plugin-frontmatter\";\nimport {\n  headersPlugin\n} from \"@mdit-vue/plugin-headers\";\nimport { sfcPlugin } from \"@mdit-vue/plugin-sfc\";\nimport { titlePlugin } from \"@mdit-vue/plugin-title\";\nimport { tocPlugin } from \"@mdit-vue/plugin-toc\";\n\n// src/plugins/anchorPlugin.ts\nimport { default as anchorPlugin } from \"markdown-it-anchor\";\n\n// src/plugins/assetsPlugin/resolveLink.ts\nimport { path } from \"@vuepress/utils\";\nimport { decode } from \"mdurl\";\nvar resolveLink = (link, relativePathPrefix, env) => {\n  let resolvedLink = decode(link);\n  if (/^\\.{1,2}\\//.test(link) && env.filePathRelative) {\n    resolvedLink = `${relativePathPrefix}/${path.join(\n      path.dirname(env.filePathRelative),\n      resolvedLink\n    )}`;\n  }\n  return resolvedLink;\n};\n\n// src/plugins/assetsPlugin/assetsPlugin.ts\nvar assetsPlugin = (md, { relativePathPrefix = \"@source\" } = {}) => {\n  const rawImageRule = md.renderer.rules.image;\n  md.renderer.rules.image = (tokens, idx, options, env, self) => {\n    const token = tokens[idx];\n    const link = token.attrGet(\"src\");\n    if (link) {\n      token.attrSet(\"src\", resolveLink(link, relativePathPrefix, env));\n    }\n    return rawImageRule(tokens, idx, options, env, self);\n  };\n  const createHtmlRule = (rawHtmlRule) => (tokens, idx, options, env, self) => {\n    tokens[idx].content = tokens[idx].content.replace(\n      /(<img\\b.*?src=\")([^\"]*)(\")/gs,\n      (_, prefix, src, suffix) => `${prefix}${resolveLink(\n        src.trim(),\n        relativePathPrefix,\n        env\n      )}${suffix}`\n    ).replace(\n      /(<img\\b.*?srcset=\")([^\"]*)(\")/gs,\n      (_, prefix, srcset, suffix) => `${prefix}${srcset.split(\",\").map(\n        (item) => item.trim().replace(\n          /^([^ ]*?)([ \\n].*)?$/,\n          (_2, url, descriptor = \"\") => `${resolveLink(\n            url.trim(),\n            relativePathPrefix,\n            env\n          )}${descriptor.replace(/[ \\n]+/g, \" \").trimEnd()}`\n        )\n      ).join(\", \")}${suffix}`\n    );\n    return rawHtmlRule(tokens, idx, options, env, self);\n  };\n  const rawHtmlBlockRule = md.renderer.rules.html_block;\n  const rawHtmlInlineRule = md.renderer.rules.html_inline;\n  md.renderer.rules.html_block = createHtmlRule(rawHtmlBlockRule);\n  md.renderer.rules.html_inline = createHtmlRule(rawHtmlInlineRule);\n};\n\n// src/plugins/codePlugin/resolveHighlightLines.ts\nvar resolveHighlightLines = (info) => {\n  const match = info.match(/{([\\d,-]+)}/);\n  if (match === null) {\n    return null;\n  }\n  return match[1].split(\",\").map((item) => {\n    const range = item.split(\"-\");\n    if (range.length === 1) {\n      range.push(range[0]);\n    }\n    return range.map((str) => Number.parseInt(str, 10));\n  });\n};\nvar isHighlightLine = (lineNumber, ranges) => ranges.some(([start, end]) => lineNumber >= start && lineNumber <= end);\n\n// src/plugins/codePlugin/languages.ts\nvar languages_exports = {};\n__export(languages_exports, {\n  languageBash: () => languageBash,\n  languageCsharp: () => languageCsharp,\n  languageDocker: () => languageDocker,\n  languageFsharp: () => languageFsharp,\n  languageJavascript: () => languageJavascript,\n  languageKotlin: () => languageKotlin,\n  languageMarkdown: () => languageMarkdown,\n  languagePython: () => languagePython,\n  languageRuby: () => languageRuby,\n  languageRust: () => languageRust,\n  languageStylus: () => languageStylus,\n  languageTypescript: () => languageTypescript,\n  languageYaml: () => languageYaml\n});\nvar languageBash = {\n  name: \"bash\",\n  ext: \"sh\",\n  aliases: [\"bash\", \"sh\", \"shell\", \"zsh\"]\n};\nvar languageCsharp = {\n  name: \"csharp\",\n  ext: \"cs\",\n  aliases: [\"cs\", \"csharp\"]\n};\nvar languageDocker = {\n  name: \"docker\",\n  ext: \"docker\",\n  aliases: [\"docker\", \"dockerfile\"]\n};\nvar languageFsharp = {\n  name: \"fsharp\",\n  ext: \"fs\",\n  aliases: [\"fs\", \"fsharp\"]\n};\nvar languageJavascript = {\n  name: \"javascript\",\n  ext: \"js\",\n  aliases: [\"javascript\", \"js\"]\n};\nvar languageKotlin = {\n  name: \"kotlin\",\n  ext: \"kt\",\n  aliases: [\"kotlin\", \"kt\"]\n};\nvar languageMarkdown = {\n  name: \"markdown\",\n  ext: \"md\",\n  aliases: [\"markdown\", \"md\"]\n};\nvar languagePython = {\n  name: \"python\",\n  ext: \"py\",\n  aliases: [\"py\", \"python\"]\n};\nvar languageRuby = {\n  name: \"ruby\",\n  ext: \"rb\",\n  aliases: [\"rb\", \"ruby\"]\n};\nvar languageRust = {\n  name: \"rust\",\n  ext: \"rs\",\n  aliases: [\"rs\", \"rust\"]\n};\nvar languageStylus = {\n  name: \"stylus\",\n  ext: \"styl\",\n  aliases: [\"styl\", \"stylus\"]\n};\nvar languageTypescript = {\n  name: \"typescript\",\n  ext: \"ts\",\n  aliases: [\"ts\", \"typescript\"]\n};\nvar languageYaml = {\n  name: \"yaml\",\n  ext: \"yml\",\n  aliases: [\"yaml\", \"yml\"]\n};\n\n// src/plugins/codePlugin/resolveLanguage.ts\nvar languagesMap;\nvar getLanguagesMap = () => {\n  if (!languagesMap) {\n    languagesMap = Object.values(languages_exports).reduce((result, item) => {\n      item.aliases.forEach((alias) => {\n        result[alias] = item;\n      });\n      return result;\n    }, {});\n  }\n  return languagesMap;\n};\nvar resolveLanguage = (info) => {\n  const alias = info.match(/^([^ :[{]+)/)?.[1] || \"text\";\n  return getLanguagesMap()[alias] ?? {\n    name: alias,\n    ext: alias,\n    aliases: [alias]\n  };\n};\n\n// src/plugins/codePlugin/resolveLineNumbers.ts\nvar resolveLineNumbers = (info) => {\n  if (/:line-numbers\\b/.test(info)) {\n    return true;\n  }\n  if (/:no-line-numbers\\b/.test(info)) {\n    return false;\n  }\n  return null;\n};\n\n// src/plugins/codePlugin/resolveVPre.ts\nvar resolveVPre = (info) => {\n  if (/:v-pre\\b/.test(info)) {\n    return true;\n  }\n  if (/:no-v-pre\\b/.test(info)) {\n    return false;\n  }\n  return null;\n};\n\n// src/plugins/codePlugin/codePlugin.ts\nvar codePlugin = (md, {\n  highlightLines = true,\n  lineNumbers = true,\n  preWrapper = true,\n  vPre: { block: vPreBlock = true, inline: vPreInline = true } = {}\n} = {}) => {\n  md.renderer.rules.fence = (tokens, idx, options, env, slf) => {\n    const token = tokens[idx];\n    const info = token.info ? md.utils.unescapeAll(token.info).trim() : \"\";\n    const language = resolveLanguage(info);\n    const languageClass = `${options.langPrefix}${language.name}`;\n    const code = options.highlight?.(token.content, language.name, \"\") || md.utils.escapeHtml(token.content);\n    let result = code.startsWith(\"<pre\") ? code : `<pre class=\"${languageClass}\"><code>${code}</code></pre>`;\n    const useVPre = resolveVPre(info) ?? vPreBlock;\n    if (useVPre) {\n      result = `<pre v-pre${result.slice(\"<pre\".length)}`;\n    }\n    if (!preWrapper) {\n      return result;\n    }\n    const lines = code.split(\"\\n\").slice(0, -1);\n    const highlightLinesRanges = highlightLines ? resolveHighlightLines(info) : null;\n    if (highlightLinesRanges) {\n      const highlightLinesCode = lines.map((_, index) => {\n        if (isHighlightLine(index + 1, highlightLinesRanges)) {\n          return '<div class=\"highlight-line\">&nbsp;</div>';\n        }\n        return \"<br>\";\n      }).join(\"\");\n      result = `${result}<div class=\"highlight-lines\">${highlightLinesCode}</div>`;\n    }\n    const useLineNumbers = resolveLineNumbers(info) ?? (typeof lineNumbers === \"number\" ? lines.length >= lineNumbers : lineNumbers);\n    if (useLineNumbers) {\n      const lineNumbersCode = lines.map(() => `<div class=\"line-number\"></div>`).join(\"\");\n      result = `${result}<div class=\"line-numbers\" aria-hidden=\"true\">${lineNumbersCode}</div>`;\n    }\n    result = `<div class=\"${languageClass}${useLineNumbers ? \" line-numbers-mode\" : \"\"}\" data-ext=\"${language.ext}\">${result}</div>`;\n    return result;\n  };\n  if (vPreInline) {\n    const rawInlineCodeRule = md.renderer.rules.code_inline;\n    md.renderer.rules.code_inline = (tokens, idx, options, env, slf) => {\n      const result = rawInlineCodeRule(tokens, idx, options, env, slf);\n      return `<code v-pre${result.slice(\"<code\".length)}`;\n    };\n  }\n};\n\n// src/plugins/emojiPlugin.ts\nimport emojiPlugin from \"markdown-it-emoji\";\n\n// src/plugins/importCodePlugin/createImportCodeBlockRule.ts\nimport { path as path2 } from \"@vuepress/utils\";\nvar MIN_LENGTH = 9;\nvar START_CODES = [64, 91, 99, 111, 100, 101];\nvar SYNTAX_RE = /^@\\[code(?:{(?:(\\d+)?-(\\d+)?)})?(?: ([^\\]]+))?\\]\\(([^)]*)\\)/;\nvar createImportCodeBlockRule = ({ handleImportPath = (str) => str }) => (state, startLine, endLine, silent) => {\n  if (state.sCount[startLine] - state.blkIndent >= 4) {\n    return false;\n  }\n  const pos = state.bMarks[startLine] + state.tShift[startLine];\n  const max = state.eMarks[startLine];\n  if (pos + MIN_LENGTH > max)\n    return false;\n  for (let i = 0; i < START_CODES.length; i += 1) {\n    if (state.src.charCodeAt(pos + i) !== START_CODES[i]) {\n      return false;\n    }\n  }\n  const match = state.src.slice(pos, max).match(SYNTAX_RE);\n  if (!match)\n    return false;\n  if (silent)\n    return true;\n  const [, lineStart, lineEnd, info, importPath] = match;\n  const meta = {\n    importPath: handleImportPath(importPath),\n    lineStart: lineStart ? Number.parseInt(lineStart, 10) : 0,\n    lineEnd: lineEnd ? Number.parseInt(lineEnd, 10) : void 0\n  };\n  const token = state.push(\"import_code\", \"code\", 0);\n  token.info = info ?? path2.extname(meta.importPath).slice(1);\n  token.markup = \"```\";\n  token.map = [startLine, startLine + 1];\n  token.meta = meta;\n  state.line = startLine + 1;\n  return true;\n};\n\n// src/plugins/importCodePlugin/resolveImportCode.ts\nimport { fs, path as path3 } from \"@vuepress/utils\";\nvar resolveImportCode = ({ importPath, lineStart, lineEnd }, { filePath }) => {\n  let importFilePath = importPath;\n  if (!path3.isAbsolute(importPath)) {\n    if (!filePath) {\n      return {\n        importFilePath: null,\n        importCode: \"Error when resolving path\"\n      };\n    }\n    importFilePath = path3.resolve(filePath, \"..\", importPath);\n  }\n  if (!fs.existsSync(importFilePath)) {\n    return {\n      importFilePath,\n      importCode: \"File not found\"\n    };\n  }\n  const fileContent = fs.readFileSync(importFilePath).toString();\n  return {\n    importFilePath,\n    importCode: fileContent.split(\"\\n\").slice(lineStart ? lineStart - 1 : lineStart, lineEnd).join(\"\\n\").replace(/\\n?$/, \"\\n\")\n  };\n};\n\n// src/plugins/importCodePlugin/importCodePlugin.ts\nvar importCodePlugin = (md, options = {}) => {\n  md.block.ruler.before(\n    \"fence\",\n    \"import_code\",\n    createImportCodeBlockRule(options),\n    {\n      alt: [\"paragraph\", \"reference\", \"blockquote\", \"list\"]\n    }\n  );\n  md.renderer.rules.import_code = (tokens, idx, options2, env, slf) => {\n    const token = tokens[idx];\n    const { importFilePath, importCode } = resolveImportCode(token.meta, env);\n    token.content = importCode;\n    if (importFilePath) {\n      const importedFiles = env.importedFiles || (env.importedFiles = []);\n      importedFiles.push(importFilePath);\n    }\n    return md.renderer.rules.fence(tokens, idx, options2, env, slf);\n  };\n};\n\n// src/plugins/linksPlugin/linksPlugin.ts\nimport { isLinkExternal } from \"@vuepress/shared\";\n\n// src/plugins/linksPlugin/resolvePaths.ts\nimport { removeLeadingSlash } from \"@vuepress/shared\";\nimport { path as path4 } from \"@vuepress/utils\";\nvar resolvePaths = (rawPath, base, filePathRelative) => {\n  let absolutePath;\n  let relativePath;\n  if (rawPath.startsWith(\"/\")) {\n    if (rawPath.endsWith(\".md\")) {\n      absolutePath = path4.join(base, rawPath);\n      relativePath = removeLeadingSlash(rawPath);\n    } else {\n      absolutePath = rawPath;\n      relativePath = path4.relative(base, absolutePath);\n    }\n  } else {\n    if (filePathRelative) {\n      relativePath = path4.join(\n        path4.dirname(encodeURI(filePathRelative)),\n        rawPath\n      );\n      absolutePath = path4.join(base, relativePath);\n    } else {\n      relativePath = rawPath.replace(/^(?:\\.\\/)?(.*)$/, \"$1\");\n      absolutePath = relativePath;\n    }\n  }\n  return {\n    absolutePath,\n    relativePath\n  };\n};\n\n// src/plugins/linksPlugin/linksPlugin.ts\nvar linksPlugin = (md, options = {}) => {\n  const internalTag = options.internalTag || \"RouterLink\";\n  const externalAttrs = {\n    target: \"_blank\",\n    rel: \"noopener noreferrer\",\n    ...options.externalAttrs\n  };\n  let hasOpenInternalLink = false;\n  const handleLinkOpen = (tokens, idx, env) => {\n    const token = tokens[idx];\n    const hrefIndex = token.attrIndex(\"href\");\n    if (hrefIndex < 0) {\n      return;\n    }\n    const hrefAttr = token.attrs[hrefIndex];\n    const hrefLink = hrefAttr[1];\n    const { base = \"/\", filePathRelative = null } = env;\n    if (isLinkExternal(hrefLink, base)) {\n      Object.entries(externalAttrs).forEach(\n        ([key, val]) => token.attrSet(key, val)\n      );\n      return;\n    }\n    const internalLinkMatch = hrefLink.match(\n      /^((?:.*)(?:\\/|\\.md|\\.html))(#.*)?$/\n    );\n    if (!internalLinkMatch) {\n      return;\n    }\n    const rawPath = internalLinkMatch[1];\n    const rawHash = internalLinkMatch[2] || \"\";\n    const { relativePath, absolutePath } = resolvePaths(\n      rawPath,\n      base,\n      filePathRelative\n    );\n    const normalizedPath = absolutePath.replace(new RegExp(`^${base}`), \"/\").replace(/(^|\\/)(README|index).md$/i, \"$1\").replace(/\\.md$/, \".html\");\n    if (internalTag === \"RouterLink\") {\n      token.tag = internalTag;\n      hrefAttr[0] = \"to\";\n      hasOpenInternalLink = true;\n    }\n    hrefAttr[1] = `${normalizedPath}${rawHash}`;\n    const links = env.links || (env.links = []);\n    links.push({\n      raw: hrefLink,\n      relative: relativePath,\n      absolute: absolutePath\n    });\n  };\n  md.renderer.rules.link_open = (tokens, idx, options2, env, self) => {\n    handleLinkOpen(tokens, idx, env);\n    return self.renderToken(tokens, idx, options2);\n  };\n  md.renderer.rules.link_close = (tokens, idx, options2, env, self) => {\n    if (hasOpenInternalLink) {\n      hasOpenInternalLink = false;\n      tokens[idx].tag = internalTag;\n    }\n    return self.renderToken(tokens, idx, options2);\n  };\n};\n\n// src/markdown.ts\nvar createMarkdown = ({\n  anchor,\n  assets,\n  code,\n  component,\n  emoji,\n  frontmatter,\n  headers,\n  title,\n  importCode,\n  links,\n  sfc,\n  slugify = defaultSlugify,\n  toc,\n  ...markdownItOptions\n} = {}) => {\n  const md = MarkdownIt({\n    ...markdownItOptions,\n    html: true\n  });\n  if (anchor !== false) {\n    md.use(anchorPlugin, {\n      level: [1, 2, 3, 4, 5, 6],\n      slugify,\n      permalink: anchorPlugin.permalink.ariaHidden({\n        class: \"header-anchor\",\n        symbol: \"#\",\n        space: true,\n        placement: \"before\"\n      }),\n      ...anchor\n    });\n  }\n  if (assets !== false) {\n    md.use(assetsPlugin, assets);\n  }\n  if (code !== false) {\n    md.use(codePlugin, code);\n  }\n  if (component !== false) {\n    md.use(componentPlugin);\n  }\n  if (emoji !== false) {\n    md.use(emojiPlugin, emoji);\n  }\n  if (frontmatter !== false) {\n    md.use(frontmatterPlugin, {\n      ...frontmatter,\n      grayMatterOptions: {\n        excerpt: true,\n        excerpt_separator: \"<!-- more -->\",\n        ...frontmatter?.grayMatterOptions\n      }\n    });\n  }\n  if (headers !== false) {\n    md.use(headersPlugin, {\n      level: [2, 3],\n      slugify,\n      ...headers\n    });\n  }\n  if (importCode !== false) {\n    md.use(importCodePlugin, importCode);\n  }\n  if (links !== false) {\n    md.use(linksPlugin, links);\n  }\n  if (sfc !== false) {\n    md.use(sfcPlugin, sfc);\n  }\n  if (toc !== false) {\n    md.use(tocPlugin, {\n      level: [2, 3],\n      slugify,\n      linkTag: \"router-link\",\n      ...toc\n    });\n  }\n  if (title !== false) {\n    md.use(titlePlugin);\n  }\n  return md;\n};\nexport {\n  anchorPlugin,\n  assetsPlugin,\n  codePlugin,\n  componentPlugin,\n  createMarkdown,\n  emojiPlugin,\n  frontmatterPlugin,\n  headersPlugin,\n  importCodePlugin,\n  linksPlugin,\n  sfcPlugin,\n  titlePlugin,\n  tocPlugin\n};\n/dist/index.d.ts\u0016\timport { SfcPluginOptions } from '@mdit-vue/plugin-sfc';\nexport { MarkdownSfcBlocks, SfcPluginOptions, sfcPlugin } from '@mdit-vue/plugin-sfc';\nimport { MarkdownItEnv } from '@mdit-vue/types';\nimport { PageHeader, PageFrontmatter } from '@vuepress/shared';\nimport MarkdownIt, { PluginWithOptions } from 'markdown-it';\nimport { FrontmatterPluginOptions } from '@mdit-vue/plugin-frontmatter';\nexport { FrontmatterPluginOptions, frontmatterPlugin } from '@mdit-vue/plugin-frontmatter';\nimport { HeadersPluginOptions } from '@mdit-vue/plugin-headers';\nexport { HeadersPluginOptions, headersPlugin } from '@mdit-vue/plugin-headers';\nimport { TocPluginOptions } from '@mdit-vue/plugin-toc';\nexport { TocPluginOptions, tocPlugin } from '@mdit-vue/plugin-toc';\nimport anchorPlugin from 'markdown-it-anchor';\nexport { default as anchorPlugin } from 'markdown-it-anchor';\nimport emojiPlugin from 'markdown-it-emoji';\nexport { default as emojiPlugin } from 'markdown-it-emoji';\nexport { ComponentPluginOptions, componentPlugin } from '@mdit-vue/plugin-component';\nexport { titlePlugin } from '@mdit-vue/plugin-title';\n\ndeclare type AnchorPluginOptions = anchorPlugin.AnchorOptions;\n\ninterface AssetsPluginOptions {\n    /**\n     * Prefix to add to relative assets links\n     */\n    relativePathPrefix?: string;\n}\n/**\n * Plugin to handle assets links\n */\ndeclare const assetsPlugin: PluginWithOptions<AssetsPluginOptions>;\n\ninterface CodePluginOptions {\n    /**\n     * Enable highlight lines or not\n     */\n    highlightLines?: boolean;\n    /**\n     * Enable line numbers or not\n     *\n     * - A `boolean` value is to enable line numbers or not.\n     * - A `number` value is the minimum number of lines to enable line numbers\n     */\n    lineNumbers?: boolean | number;\n    /**\n     * Wrap the `<pre>` tag with an extra `<div>` or not. Do not disable it unless you\n     * understand what's it for\n     *\n     * - Required for `highlightLines`\n     * - Required for `lineNumbers`\n     * - Required for language display of default theme\n     */\n    preWrapper?: boolean;\n    /**\n     * Add `v-pre` directive or not\n     */\n    vPre?: {\n        /**\n         * Add `v-pre` directive to `<pre>` tag of code block or not\n         */\n        block?: boolean;\n        /**\n         * Add `v-pre` directive to `<code>` tag of inline code or not\n         */\n        inline?: boolean;\n    };\n}\n/**\n * Code plugin\n */\ndeclare const codePlugin: PluginWithOptions<CodePluginOptions>;\n\ndeclare type EmojiPluginOptions = emojiPlugin.Options;\n\ninterface ImportCodePluginOptions {\n    /**\n     * A function to handle the import path\n     */\n    handleImportPath?: (str: string) => string;\n}\ndeclare const importCodePlugin: PluginWithOptions<ImportCodePluginOptions>;\n\ninterface LinksPluginOptions {\n    /**\n     * Tag for internal links\n     *\n     * @default 'RouterLink'\n     */\n    internalTag?: 'a' | 'RouterLink';\n    /**\n     * Additional attributes for external links\n     *\n     * @default\n     * ```js\n     * ({\n     *   target: '_blank',\n     *   rel: 'noopener noreferrer',\n     * })\n     * ```\n     */\n    externalAttrs?: Record<string, string>;\n}\n/**\n * Process links in markdown file\n *\n * - internal links: convert them into `<RouterLink>`\n * - external links: add extra attrs and external icon\n */\ndeclare const linksPlugin: PluginWithOptions<LinksPluginOptions>;\n\ndeclare type Markdown = MarkdownIt;\n\ninterface MarkdownOptions extends MarkdownIt.Options {\n    anchor?: false | AnchorPluginOptions;\n    assets?: false | AssetsPluginOptions;\n    code?: false | CodePluginOptions;\n    component?: false;\n    emoji?: false | EmojiPluginOptions;\n    frontmatter?: false | FrontmatterPluginOptions;\n    headers?: false | HeadersPluginOptions;\n    title?: false;\n    importCode?: false | ImportCodePluginOptions;\n    links?: false | LinksPluginOptions;\n    sfc?: false | SfcPluginOptions;\n    slugify?: MarkdownSlugifyFunction;\n    toc?: false | TocPluginOptions;\n}\n/**\n * Headers in markdown file\n */\ndeclare type MarkdownHeader = PageHeader;\n/**\n * Internal links in markdown file\n *\n * Used for file existence check\n */\ninterface MarkdownLink {\n    raw: string;\n    relative: string;\n    absolute: string;\n}\n/**\n * The `env` object to be passed to markdown-it render function\n *\n * Input some meta data for markdown file parsing and rendering\n *\n * Output some resources from the markdown file\n */\ninterface MarkdownEnv extends MarkdownItEnv {\n    /**\n     * Base / publicPath of current site\n     */\n    base?: string;\n    /**\n     * Absolute file path of the markdown file\n     */\n    filePath?: string | null;\n    /**\n     * Relative file path of the markdown file\n     */\n    filePathRelative?: string | null;\n    /**\n     * Frontmatter of the markdown file\n     */\n    frontmatter?: PageFrontmatter;\n    /**\n     * Imported file that extracted by importCodePlugin\n     */\n    importedFiles?: string[];\n    /**\n     * Links that extracted by linksPlugin\n     */\n    links?: MarkdownLink[];\n}\n/**\n * Type of `slugify` function\n */\ndeclare type MarkdownSlugifyFunction = (str: string) => string;\n\n/**\n * Create vuepress customized markdown-it instance\n */\ndeclare const createMarkdown: ({ anchor, assets, code, component, emoji, frontmatter, headers, title, importCode, links, sfc, slugify, toc, ...markdownItOptions }?: MarkdownOptions) => Markdown;\n\nexport { AnchorPluginOptions, AssetsPluginOptions, CodePluginOptions, EmojiPluginOptions, ImportCodePluginOptions, LinksPluginOptions, Markdown, MarkdownEnv, MarkdownHeader, MarkdownLink, MarkdownOptions, MarkdownSlugifyFunction, assetsPlugin, codePlugin, createMarkdown, importCodePlugin, linksPlugin };\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QHZ1ZXByZXNzL2J1bmRsZXItdml0ZUAyLjAuMC1iZXRhLjUz",
    "content": "/dist/index.d.ts\u0001import { Bundler } from '@vuepress/core';\nimport { Options } from '@vitejs/plugin-vue';\nimport { InlineConfig } from 'vite';\n\n/**\n * Options for bundler-vite\n */\ninterface ViteBundlerOptions {\n    viteOptions?: InlineConfig;\n    vuePluginOptions?: Options;\n}\n\ndeclare const viteBundler: (options?: ViteBundlerOptions) => Bundler;\n\nexport { ViteBundlerOptions, viteBundler as default, viteBundler };\n/dist/index.js4// src/build/build.ts\nimport { chalk, debug, fs as fs3, importFile, withSpinner } from \"@vuepress/utils\";\nimport { build as viteBuild } from \"vite\";\n\n// src/resolveViteConfig.ts\nimport { default as vuePlugin } from \"@vitejs/plugin-vue\";\nimport { mergeConfig } from \"vite\";\n\n// src/plugins/constantsReplacementPlugin.ts\nvar pageComponentFileRegexp = /\\.html\\.vue($|\\?)/;\nvar vueTemplateRegexp = /<template>[\\s\\S]*<\\/template>/;\nvar jsStringBreaker = \"\\u200B\";\nvar vueTemplateBreaker = \"<wbr>\";\nvar constantsReplacementPlugin = (app) => {\n  const pagesDirPrefix = `${app.dir.temp(\"pages\")}/`;\n  let constantsRegexp;\n  const replaceConstants = (code, breaker) => code.replace(\n    constantsRegexp,\n    (constant) => `${constant[0]}${breaker}${constant.slice(1)}`\n  );\n  return {\n    name: \"vuepress:constants-replacement\",\n    enforce: \"pre\",\n    configResolved(resolvedConfig) {\n      const constants = [\"process.env\"];\n      if (app.env.isBuild) {\n        constants.push(\"import.meta\");\n        if (resolvedConfig.define) {\n          constants.push(...Object.keys(resolvedConfig.define));\n        }\n      }\n      constantsRegexp = new RegExp(\n        `\\\\b(${constants.map((item) => item.replace(/[-[\\]/{}()*+?.\\\\^$|]/g, \"\\\\$&\")).join(\"|\")})`,\n        \"g\"\n      );\n    },\n    transform(code, id) {\n      if (!id.startsWith(pagesDirPrefix))\n        return;\n      if (!pageComponentFileRegexp.test(id)) {\n        return replaceConstants(code, jsStringBreaker);\n      }\n      const match = code.match(vueTemplateRegexp);\n      if (match === null)\n        return;\n      return code.substring(0, match.index) + replaceConstants(match[0], vueTemplateBreaker) + code.substring(match.index + match[0].length);\n    }\n  };\n};\n\n// src/plugins/mainPlugin.ts\nimport { fs } from \"@vuepress/utils\";\nimport autoprefixer from \"autoprefixer\";\nimport history from \"connect-history-api-fallback\";\nimport postcssrc from \"postcss-load-config\";\nvar mainPlugin = ({\n  app,\n  isBuild,\n  isServer\n}) => ({\n  name: \"vuepress:main\",\n  config: async () => {\n    if (!isBuild) {\n      await app.writeTemp(\n        \"vite-root/index.html\",\n        fs.readFileSync(app.options.templateDev).toString().replace(\n          /<\\/body>/,\n          `<script type=\"module\">\nimport '@vuepress/client/app'\n<\\/script>\n</body>`\n        )\n      );\n    }\n    const clientPackages = [\n      \"@vuepress/client\",\n      ...app.pluginApi.plugins.filter(({ name }) => name !== \"user-config\").map(({ name }) => name)\n    ];\n    let postcssPlugins;\n    try {\n      const postcssConfigResult = await postcssrc();\n      postcssPlugins = postcssConfigResult.plugins;\n    } catch (error) {\n      postcssPlugins = [autoprefixer];\n    }\n    return {\n      root: app.dir.temp(\"vite-root\"),\n      base: app.options.base,\n      mode: !isBuild || app.env.isDebug ? \"development\" : \"production\",\n      define: await resolveDefine({ app, isBuild, isServer }),\n      publicDir: app.dir.public(),\n      cacheDir: app.dir.cache(),\n      resolve: {\n        alias: await resolveAlias({ app, isServer })\n      },\n      css: {\n        postcss: {\n          plugins: isServer ? [] : postcssPlugins\n        },\n        preprocessorOptions: {\n          scss: { charset: false }\n        }\n      },\n      server: {\n        host: app.options.host,\n        port: app.options.port,\n        open: app.options.open\n      },\n      build: {\n        ssr: isServer,\n        outDir: isServer ? app.dir.temp(\".server\") : app.dir.dest(),\n        emptyOutDir: false,\n        cssCodeSplit: false,\n        rollupOptions: {\n          input: app.dir.client(\n            fs.readJsonSync(app.dir.client(\"package.json\")).exports[\"./app\"]\n          ),\n          output: {\n            ...isServer ? {\n              entryFileNames: `[name].[hash].mjs`\n            } : {}\n          },\n          preserveEntrySignatures: \"allow-extension\"\n        },\n        minify: isServer ? false : !app.env.isDebug\n      },\n      optimizeDeps: {\n        exclude: clientPackages\n      },\n      ssr: {\n        format: \"esm\",\n        noExternal: clientPackages\n      }\n    };\n  },\n  generateBundle(_, bundle) {\n    if (isServer) {\n      Object.keys(bundle).forEach((key) => {\n        if (bundle[key].type === \"asset\") {\n          delete bundle[key];\n        }\n      });\n    }\n  },\n  configureServer(server) {\n    return () => {\n      server.middlewares.use(\n        history({\n          rewrites: [\n            {\n              from: /\\.html$/,\n              to: \"/index.html\"\n            }\n          ]\n        })\n      );\n    };\n  }\n});\nvar resolveAlias = async ({\n  app,\n  isServer\n}) => {\n  const alias = {\n    \"@internal\": app.dir.temp(\"internal\"),\n    \"@temp\": app.dir.temp(),\n    \"@source\": app.dir.source()\n  };\n  const aliasResult = await app.pluginApi.hooks.alias.process(app, isServer);\n  aliasResult.forEach(\n    (aliasObject) => Object.entries(aliasObject).forEach(([key, value]) => {\n      alias[key] = value;\n    })\n  );\n  return [\n    ...Object.keys(alias).map((item) => ({\n      find: item,\n      replacement: alias[item]\n    })),\n    ...isServer ? [] : [\n      {\n        find: /^vue$/,\n        replacement: \"vue/dist/vue.runtime.esm-bundler.js\"\n      },\n      {\n        find: /^vue-router$/,\n        replacement: \"vue-router/dist/vue-router.esm-bundler.js\"\n      }\n    ]\n  ];\n};\nvar resolveDefine = async ({\n  app,\n  isBuild,\n  isServer\n}) => {\n  const define = {\n    __VUEPRESS_VERSION__: JSON.stringify(app.version),\n    __VUEPRESS_DEV__: JSON.stringify(!isBuild),\n    __VUEPRESS_SSR__: JSON.stringify(isServer),\n    __VUE_OPTIONS_API__: JSON.stringify(true),\n    __VUE_PROD_DEVTOOLS__: JSON.stringify(app.env.isDebug)\n  };\n  if (app.env.isDebug) {\n    define[\"process.env.NODE_ENV\"] = JSON.stringify(\"development\");\n  }\n  const defineResult = await app.pluginApi.hooks.define.process(app, isServer);\n  defineResult.forEach(\n    (defineObject) => Object.entries(defineObject).forEach(([key, value]) => {\n      define[key] = JSON.stringify(value);\n    })\n  );\n  return define;\n};\n\n// src/plugins/vuepressPlugin.ts\nvar vuepressPlugin = ({\n  app,\n  isBuild,\n  isServer\n}) => [\n  constantsReplacementPlugin(app),\n  mainPlugin({\n    app,\n    isBuild,\n    isServer\n  })\n];\n\n// src/resolveViteConfig.ts\nvar resolveViteConfig = async ({\n  app,\n  options,\n  isBuild,\n  isServer\n}) => mergeConfig(\n  {\n    clearScreen: false,\n    configFile: false,\n    logLevel: !isBuild || app.env.isDebug ? \"info\" : \"warn\",\n    esbuild: {\n      charset: \"utf8\"\n    },\n    plugins: [\n      vuePlugin(options.vuePluginOptions),\n      vuepressPlugin({ app, isBuild, isServer })\n    ]\n  },\n  options.viteOptions ?? {}\n);\n\n// src/build/renderPage.ts\nimport { fs as fs2, renderHead } from \"@vuepress/utils\";\nimport { ssrContextKey } from \"vue\";\n\n// src/build/renderPagePrefetchLinks.ts\nvar renderPagePrefetchLinks = ({\n  app,\n  outputEntryChunk,\n  pageChunkFiles\n}) => {\n  const shouldPrefetch = app.options.shouldPrefetch;\n  if (shouldPrefetch === false) {\n    return \"\";\n  }\n  const prefetchFiles = outputEntryChunk.dynamicImports.filter(\n    (item) => !pageChunkFiles.some((file) => file === item)\n  );\n  return prefetchFiles.map((item) => {\n    const type = item.endsWith(\".js\") ? \"script\" : item.endsWith(\".css\") ? \"style\" : \"\";\n    if (shouldPrefetch !== true && !shouldPrefetch(item, type)) {\n      return \"\";\n    }\n    return `<link rel=\"prefetch\" href=\"${app.options.base}${item}\" as=\"${type}\" />`;\n  }).join(\"\");\n};\n\n// src/build/renderPagePreloadLinks.ts\nvar renderPagePreloadLinks = ({\n  app,\n  outputEntryChunk,\n  pageChunkFiles\n}) => {\n  const shouldPreload = app.options.shouldPreload;\n  if (shouldPreload === false) {\n    return \"\";\n  }\n  const preloadFiles = Array.from(\n    /* @__PURE__ */ new Set([\n      outputEntryChunk.fileName,\n      ...outputEntryChunk.imports,\n      ...pageChunkFiles\n    ])\n  );\n  return preloadFiles.map((item) => {\n    const type = item.endsWith(\".js\") ? \"script\" : item.endsWith(\".css\") ? \"style\" : \"\";\n    if (shouldPreload === true && type !== \"script\" && type !== \"style\") {\n      return \"\";\n    }\n    if (shouldPreload !== true && !shouldPreload(item, type)) {\n      return \"\";\n    }\n    if (type === \"script\") {\n      return `<link rel=\"modulepreload\" href=\"${app.options.base}${item}\">`;\n    }\n    return `<link rel=\"preload\" href=\"${app.options.base}${item}\"${type !== \"\" ? ` as=\"${type}\"` : \"\"}>`;\n  }).join(\"\");\n};\n\n// src/build/renderPageScripts.ts\nvar renderPageScripts = ({\n  app,\n  outputEntryChunk\n}) => `<script type=\"module\" src=\"${app.options.base}${outputEntryChunk.fileName}\" defer><\\/script>`;\n\n// src/build/renderPageStyles.ts\nvar renderPageStyles = ({\n  app,\n  outputCssAsset\n}) => outputCssAsset ? [\n  `<link rel=\"preload\" href=\"${app.options.base}${outputCssAsset.fileName}\" as=\"style\" />`,\n  `<link rel=\"stylesheet\" href=\"${app.options.base}${outputCssAsset.fileName}\" />`\n].join(\"\") : \"\";\n\n// src/build/resolvePageChunkFiles.ts\nvar resolvePageChunkFiles = ({\n  page,\n  output\n}) => output.filter(\n  (item) => item.type === \"chunk\" && (item.facadeModuleId === page.componentFilePath || item.facadeModuleId === page.dataFilePath)\n).flatMap(({ fileName, imports, dynamicImports }) => [\n  fileName,\n  ...imports,\n  ...dynamicImports\n]);\n\n// src/build/renderPage.ts\nvar renderPage = async ({\n  app,\n  page,\n  vueApp,\n  vueRouter,\n  renderToString,\n  ssrTemplate,\n  output,\n  outputEntryChunk,\n  outputCssAsset\n}) => {\n  await vueRouter.push(page.path);\n  await vueRouter.isReady();\n  delete vueApp._context.provides[ssrContextKey];\n  const ssrContext = {\n    lang: \"en\",\n    head: []\n  };\n  const pageRendered = await renderToString(vueApp, ssrContext);\n  const pageChunkFiles = resolvePageChunkFiles({ page, output });\n  const html = ssrTemplate.replace(\"{{ version }}\", app.version).replace(\"{{ lang }}\", ssrContext.lang).replace(\n    \"<!--vuepress-ssr-head-->\",\n    ssrContext.head.map(renderHead).join(\"\")\n  ).replace(\n    \"<!--vuepress-ssr-resources-->\",\n    `${renderPagePreloadLinks({\n      app,\n      outputEntryChunk,\n      pageChunkFiles\n    })}${renderPagePrefetchLinks({\n      app,\n      outputEntryChunk,\n      pageChunkFiles\n    })}`\n  ).replace(\n    \"<!--vuepress-ssr-styles-->\",\n    renderPageStyles({ app, outputCssAsset })\n  ).replace(\"<!--vuepress-ssr-app-->\", () => pageRendered).replace(\n    \"<!--vuepress-ssr-scripts-->\",\n    renderPageScripts({ app, outputEntryChunk })\n  );\n  await fs2.outputFile(page.htmlFilePath, html);\n};\n\n// src/build/build.ts\nvar log = debug(\"vuepress:bundler-vite/build\");\nvar build = async (options, app) => {\n  await app.pluginApi.hooks.extendsBundlerOptions.process(options, app);\n  log(\"compiling start\");\n  let clientOutput;\n  let serverOutput;\n  await withSpinner(\"Compiling with vite\")(async () => {\n    const clientConfig = await resolveViteConfig({\n      app,\n      options,\n      isBuild: true,\n      isServer: false\n    });\n    const serverConfig = await resolveViteConfig({\n      app,\n      options,\n      isBuild: true,\n      isServer: true\n    });\n    [clientOutput, serverOutput] = await Promise.all([\n      viteBuild(clientConfig),\n      viteBuild(serverConfig)\n    ]);\n  });\n  log(\"compiling finish\");\n  await withSpinner(`Rendering ${app.pages.length} pages`)(async (spinner) => {\n    const ssrTemplate = (await fs3.readFile(app.options.templateBuild)).toString();\n    const clientEntryChunk = clientOutput.output.find(\n      (item) => item.type === \"chunk\" && item.isEntry\n    );\n    const clientCssAsset = clientOutput.output.find(\n      (item) => item.type === \"asset\" && item.fileName.endsWith(\".css\")\n    );\n    const serverEntryChunk = serverOutput.output.find(\n      (item) => item.type === \"chunk\" && item.isEntry\n    );\n    const serverEntryPath = app.dir.temp(\".server\", serverEntryChunk.fileName);\n    const { createVueApp } = await importFile(serverEntryPath);\n    const { app: vueApp, router: vueRouter } = await createVueApp();\n    const { renderToString } = await import(\"vue/server-renderer\");\n    for (const page of app.pages) {\n      if (spinner)\n        spinner.text = `Rendering pages ${chalk.magenta(page.path)}`;\n      await renderPage({\n        app,\n        page,\n        vueApp,\n        vueRouter,\n        renderToString,\n        ssrTemplate,\n        output: clientOutput.output,\n        outputEntryChunk: clientEntryChunk,\n        outputCssAsset: clientCssAsset\n      });\n    }\n  });\n  if (!app.env.isDebug) {\n    await fs3.remove(app.dir.temp(\".server\"));\n  }\n};\n\n// src/dev.ts\nimport { createRequire } from \"module\";\nimport { chalk as chalk2, fs as fs4 } from \"@vuepress/utils\";\nimport { createServer } from \"vite\";\nvar require2 = createRequire(import.meta.url);\nvar dev = async (options, app) => {\n  await app.pluginApi.hooks.extendsBundlerOptions.process(options, app);\n  const viteConfig = await resolveViteConfig({\n    app,\n    options,\n    isBuild: false,\n    isServer: false\n  });\n  const server = await createServer(viteConfig);\n  await server.listen();\n  const viteVersion = fs4.readJsonSync(\n    require2.resolve(\"vite/package.json\")\n  ).version;\n  server.config.logger.info(\n    chalk2.cyan(`\n  vite v${viteVersion}`) + chalk2.green(` dev server running at:\n`),\n    {\n      clear: !server.config.logger.hasWarned\n    }\n  );\n  server.printUrls();\n  return server.close.bind(server);\n};\n\n// src/viteBundler.ts\nvar viteBundler = (options = {}) => ({\n  name: \"@vuepress/bundler-vite\",\n  dev: (app) => dev(options, app),\n  build: (app) => build(options, app)\n});\n\n// src/index.ts\nvar src_default = viteBundler;\nexport {\n  src_default as default,\n  viteBundler\n};\n/LICENSE\u0004CThe MIT License (MIT)\n\nCopyright (c) 2018-present, Yuxi (Evan) You\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n/package.json\u0005{\n  \"name\": \"@vuepress/bundler-vite\",\n  \"version\": \"2.0.0-beta.53\",\n  \"description\": \"Bundler vite package of VuePress\",\n  \"keywords\": [\n    \"vuepress-bundler\",\n    \"vuepress\",\n    \"bundler\",\n    \"vite\"\n  ],\n  \"homepage\": \"https://github.com/vuepress\",\n  \"bugs\": {\n    \"url\": \"https://github.com/vuepress/vuepress-next/issues\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/vuepress/vuepress-next.git\"\n  },\n  \"license\": \"MIT\",\n  \"author\": \"meteorlxy\",\n  \"type\": \"module\",\n  \"exports\": {\n    \".\": \"./dist/index.js\",\n    \"./package.json\": \"./package.json\"\n  },\n  \"main\": \"./dist/index.js\",\n  \"types\": \"./dist/index.d.ts\",\n  \"files\": [\n    \"dist\"\n  ],\n  \"dependencies\": {\n    \"@vitejs/plugin-vue\": \"^3.1.2\",\n    \"@vuepress/client\": \"2.0.0-beta.53\",\n    \"@vuepress/core\": \"2.0.0-beta.53\",\n    \"@vuepress/shared\": \"2.0.0-beta.53\",\n    \"@vuepress/utils\": \"2.0.0-beta.53\",\n    \"autoprefixer\": \"^10.4.12\",\n    \"connect-history-api-fallback\": \"^2.0.0\",\n    \"postcss\": \"^8.4.18\",\n    \"postcss-load-config\": \"^4.0.1\",\n    \"rollup\": \"^2.79.1\",\n    \"vite\": \"~3.1.8\",\n    \"vue\": \"^3.2.41\",\n    \"vue-router\": \"^4.1.6\"\n  },\n  \"publishConfig\": {\n    \"access\": \"public\"\n  },\n  \"tsup\": {\n    \"clean\": true,\n    \"dts\": \"./src/index.ts\",\n    \"entry\": [\n      \"./src/index.ts\"\n    ],\n    \"format\": [\n      \"esm\"\n    ],\n    \"outDir\": \"./dist\",\n    \"sourcemap\": false,\n    \"target\": \"es2020\",\n    \"tsconfig\": \"../tsconfig.dts.json\"\n  },\n  \"scripts\": {\n    \"build\": \"tsup\",\n    \"clean\": \"rimraf dist\"\n  }\n}"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QHZ1ZXByZXNzL2NsaUAyLjAuMC1iZXRhLjUz",
    "content": "/dist/index.jsQ4// src/commands/build/createBuild.ts\nimport process6 from \"process\";\nimport { createBuildApp } from \"@vuepress/core\";\nimport { debug, formatMs, fs as fs5, logger as logger3, withSpinner } from \"@vuepress/utils\";\n\n// src/config/defineUserConfig.ts\nvar defineUserConfig = (config) => config;\n\n// src/config/loadUserConfig.ts\nimport { pathToFileURL } from \"url\";\nimport { fs, hash, importFileDefault, path } from \"@vuepress/utils\";\nimport { build } from \"esbuild\";\nvar loadUserConfig = async (userConfigPath) => {\n  if (!userConfigPath) {\n    return {\n      userConfig: {},\n      userConfigDependencies: []\n    };\n  }\n  const dirnameVarName = \"__vite_injected_original_dirname\";\n  const filenameVarName = \"__vite_injected_original_filename\";\n  const importMetaUrlVarName = \"__vite_injected_original_import_meta_url\";\n  const result = await build({\n    absWorkingDir: process.cwd(),\n    entryPoints: [userConfigPath],\n    outfile: \"out.js\",\n    write: false,\n    target: [\"node14.18\", \"node16\"],\n    platform: \"node\",\n    bundle: true,\n    format: \"esm\",\n    sourcemap: \"inline\",\n    metafile: true,\n    define: {\n      \"__dirname\": dirnameVarName,\n      \"__filename\": filenameVarName,\n      \"import.meta.url\": importMetaUrlVarName\n    },\n    plugins: [\n      {\n        name: \"externalize-deps\",\n        setup(build2) {\n          build2.onResolve({ filter: /.*/ }, ({ path: id }) => {\n            if (id[0] !== \".\" && !path.isAbsolute(id)) {\n              return {\n                external: true\n              };\n            }\n            return null;\n          });\n        }\n      },\n      {\n        name: \"inject-file-scope-variables\",\n        setup(build2) {\n          build2.onLoad({ filter: /\\.[cm]?[jt]s$/ }, async (args) => {\n            const contents = await fs.readFile(args.path, \"utf8\");\n            const injectValues = `const ${dirnameVarName} = ${JSON.stringify(\n              path.dirname(args.path)\n            )};const ${filenameVarName} = ${JSON.stringify(args.path)};const ${importMetaUrlVarName} = ${JSON.stringify(\n              pathToFileURL(args.path).href\n            )};`;\n            return {\n              loader: args.path.endsWith(\"ts\") ? \"ts\" : \"js\",\n              contents: injectValues + contents\n            };\n          });\n        }\n      }\n    ]\n  });\n  const { text } = result.outputFiles[0];\n  const tempFilePath = `${userConfigPath}.${hash(text)}.mjs`;\n  let userConfig;\n  try {\n    await fs.writeFile(tempFilePath, text);\n    userConfig = await importFileDefault(tempFilePath);\n  } finally {\n    await fs.rm(tempFilePath);\n  }\n  return {\n    userConfig,\n    userConfigDependencies: Object.keys(result.metafile?.inputs ?? {})\n  };\n};\n\n// src/config/resolveAppConfig.ts\nimport { ensureEndingSlash, ensureLeadingSlash } from \"@vuepress/shared\";\nimport { chalk, isChildPath, logger } from \"@vuepress/utils\";\nvar resolveAppConfig = ({\n  defaultAppConfig,\n  cliAppConfig,\n  userConfig\n}) => {\n  const appConfig = {\n    ...defaultAppConfig,\n    ...userConfig,\n    ...cliAppConfig\n  };\n  if (appConfig.bundler === void 0 || appConfig.theme === void 0) {\n    logger.error(\n      `${chalk.magenta(\"bundler\")} and ${chalk.magenta(\"theme\")} are required`\n    );\n    return null;\n  }\n  if (appConfig.base && !(appConfig.base.startsWith(\"/\") && appConfig.base.endsWith(\"/\"))) {\n    const rawBase = appConfig.base;\n    appConfig.base = ensureLeadingSlash(ensureEndingSlash(rawBase));\n    logger.warn(\n      `${chalk.magenta(\"base\")} should start and end with a slash (/), so it has been normalized from ${chalk.magenta(rawBase)} to ${chalk.magenta(appConfig.base)}`\n    );\n  }\n  if (appConfig.dest && isChildPath(appConfig.source, appConfig.dest)) {\n    logger.warn(\n      `${chalk.magenta(\"dest\")} directory would be emptied during build, so we fallback it to the default directory for the safety of your source files`\n    );\n    delete appConfig.dest;\n  }\n  return appConfig;\n};\n\n// src/config/resolveCliAppConfig.ts\nimport process2 from \"process\";\nimport { path as path2 } from \"@vuepress/utils\";\nvar OPTIONS_COMMON = [\"debug\", \"open\", \"port\", \"host\"];\nvar OPTIONS_DIRECTORY = [\"cache\", \"dest\", \"temp\"];\nvar resolveCliAppConfig = (sourceDir, commandOptions, cwd = process2.cwd()) => {\n  const source = path2.resolve(cwd, sourceDir);\n  const appConfig = {\n    source\n  };\n  OPTIONS_COMMON.forEach((name) => {\n    if (commandOptions[name] !== void 0) {\n      appConfig[name] = commandOptions[name];\n    }\n  });\n  OPTIONS_DIRECTORY.forEach((name) => {\n    if (commandOptions[name] !== void 0) {\n      appConfig[name] = path2.resolve(cwd, commandOptions[name]);\n    }\n  });\n  return appConfig;\n};\n\n// src/config/resolveUserConfigConventionalPath.ts\nimport process3 from \"process\";\nimport { fs as fs2, path as path3 } from \"@vuepress/utils\";\nvar resolveUserConfigConventionalPath = (source, cwd = process3.cwd()) => [\n  path3.resolve(cwd, \"vuepress.config.ts\"),\n  path3.resolve(cwd, \"vuepress.config.js\"),\n  path3.resolve(cwd, \"vuepress.config.mjs\"),\n  path3.resolve(source, \".vuepress/config.ts\"),\n  path3.resolve(source, \".vuepress/config.js\"),\n  path3.resolve(source, \".vuepress/config.mjs\")\n].find((item) => fs2.pathExistsSync(item));\n\n// src/config/resolveUserConfigPath.ts\nimport process4 from \"process\";\nimport { chalk as chalk2, fs as fs3, logger as logger2, path as path4 } from \"@vuepress/utils\";\nvar resolveUserConfigPath = (config, cwd = process4.cwd()) => {\n  const configPath = path4.resolve(cwd, config);\n  if (!fs3.pathExistsSync(configPath)) {\n    throw logger2.createError(\n      `config file does not exist: ${chalk2.magenta(config)}`\n    );\n  }\n  return configPath;\n};\n\n// src/config/transformUserConfigToPlugin.ts\nimport process5 from \"process\";\nimport { fs as fs4, path as path5 } from \"@vuepress/utils\";\nvar transformUserConfigToPlugin = (userConfig, source, cwd = process5.cwd()) => {\n  const userConfigPlugin = {\n    name: \"user-config\",\n    ...userConfig\n  };\n  if (userConfigPlugin.clientConfigFile === void 0) {\n    userConfigPlugin.clientConfigFile = [\n      path5.resolve(cwd, \"vuepress.client.ts\"),\n      path5.resolve(cwd, \"vuepress.client.js\"),\n      path5.resolve(cwd, \"vuepress.client.mjs\"),\n      path5.resolve(source, \".vuepress/client.ts\"),\n      path5.resolve(source, \".vuepress/client.js\"),\n      path5.resolve(source, \".vuepress/client.mjs\")\n    ].find((item) => fs4.pathExistsSync(item));\n  }\n  return userConfigPlugin;\n};\n\n// src/commands/build/createBuild.ts\nvar log = debug(\"vuepress:cli/build\");\nvar createBuild = (defaultAppConfig) => async (sourceDir = \".\", commandOptions = {}) => {\n  const start = Date.now();\n  log(`commandOptions:`, commandOptions);\n  if (process6.env.NODE_ENV === void 0) {\n    process6.env.NODE_ENV = \"production\";\n  }\n  const cliAppConfig = resolveCliAppConfig(sourceDir, commandOptions);\n  const userConfigPath = commandOptions.config ? resolveUserConfigPath(commandOptions.config) : resolveUserConfigConventionalPath(cliAppConfig.source);\n  log(`userConfigPath:`, userConfigPath);\n  const { userConfig } = await loadUserConfig(userConfigPath);\n  const appConfig = resolveAppConfig({\n    defaultAppConfig,\n    cliAppConfig,\n    userConfig\n  });\n  if (appConfig === null) {\n    return;\n  }\n  const app = createBuildApp(appConfig);\n  app.use(transformUserConfigToPlugin(userConfig, cliAppConfig.source));\n  if (commandOptions.cleanTemp === true) {\n    await withSpinner(\"Cleaning temp\")(() => {\n      return fs5.remove(app.dir.temp());\n    });\n  }\n  if (commandOptions.cleanCache === true) {\n    await withSpinner(\"Cleaning cache\")(() => {\n      return fs5.remove(app.dir.cache());\n    });\n  }\n  await fs5.emptyDir(app.dir.dest());\n  await withSpinner(\"Initializing and preparing data\")(async () => {\n    await app.init();\n    await app.prepare();\n  });\n  await app.build();\n  await app.pluginApi.hooks.onGenerated.process(app);\n  logger3.success(\n    `VuePress build completed in ${formatMs(Date.now() - start)}!`\n  );\n};\n\n// src/commands/dev/createDev.ts\nimport process8 from \"process\";\nimport { createDevApp } from \"@vuepress/core\";\nimport { debug as debug2, fs as fs6, logger as logger6, withSpinner as withSpinner2 } from \"@vuepress/utils\";\n\n// src/commands/dev/watchPageFiles.ts\nimport { chalk as chalk3, logger as logger4 } from \"@vuepress/utils\";\nimport chokidar from \"chokidar\";\n\n// src/commands/dev/handlePageAdd.ts\nimport {\n  createPage,\n  preparePageComponent,\n  preparePageData,\n  preparePagesComponents,\n  preparePagesData,\n  preparePagesRoutes\n} from \"@vuepress/core\";\nvar handlePageAdd = async (app, filePath) => {\n  const pageIndex = app.pages.findIndex((page2) => page2.filePath === filePath);\n  if (pageIndex !== -1) {\n    return null;\n  }\n  const page = await createPage(app, {\n    filePath\n  });\n  app.pages.push(page);\n  await preparePageComponent(app, page);\n  await preparePageData(app, page);\n  await preparePagesComponents(app);\n  await preparePagesData(app);\n  await preparePagesRoutes(app);\n  return page;\n};\n\n// src/commands/dev/handlePageChange.ts\nimport {\n  createPage as createPage2,\n  preparePageComponent as preparePageComponent2,\n  preparePageData as preparePageData2,\n  preparePagesComponents as preparePagesComponents2,\n  preparePagesData as preparePagesData2,\n  preparePagesRoutes as preparePagesRoutes2\n} from \"@vuepress/core\";\nvar handlePageChange = async (app, filePath) => {\n  const pageIndex = app.pages.findIndex((page) => page.filePath === filePath);\n  if (pageIndex === -1) {\n    return null;\n  }\n  const pageOld = app.pages[pageIndex];\n  const pageNew = await createPage2(app, {\n    filePath\n  });\n  app.pages.splice(pageIndex, 1, pageNew);\n  await preparePageComponent2(app, pageNew);\n  await preparePageData2(app, pageNew);\n  const isPathChanged = pageOld.path !== pageNew.path;\n  const isRouteMetaChanged = JSON.stringify(pageOld.routeMeta) !== JSON.stringify(pageNew.routeMeta);\n  if (isPathChanged) {\n    await preparePagesComponents2(app);\n    await preparePagesData2(app);\n  }\n  if (isPathChanged || isRouteMetaChanged) {\n    await preparePagesRoutes2(app);\n  }\n  return [pageOld, pageNew];\n};\n\n// src/commands/dev/handlePageUnlink.ts\nimport {\n  preparePagesComponents as preparePagesComponents3,\n  preparePagesData as preparePagesData3,\n  preparePagesRoutes as preparePagesRoutes3\n} from \"@vuepress/core\";\nvar handlePageUnlink = async (app, filePath) => {\n  const pageIndex = app.pages.findIndex((page2) => page2.filePath === filePath);\n  if (pageIndex === -1) {\n    return null;\n  }\n  const page = app.pages[pageIndex];\n  app.pages.splice(pageIndex, 1);\n  await preparePagesComponents3(app);\n  await preparePagesData3(app);\n  await preparePagesRoutes3(app);\n  return page;\n};\n\n// src/commands/dev/pageDepsHelper.ts\nvar createPageDepsHelper = () => {\n  const store = /* @__PURE__ */ new Map();\n  return {\n    add: ({ deps, filePathRelative }) => {\n      const depsAdded = [];\n      if (filePathRelative) {\n        deps.forEach((item) => {\n          if (!store.has(item)) {\n            store.set(item, /* @__PURE__ */ new Set());\n            depsAdded.push(item);\n          }\n          store.get(item)?.add(filePathRelative);\n        });\n      }\n      return depsAdded;\n    },\n    remove: ({ deps, filePathRelative }) => {\n      const depsRemoved = [];\n      if (filePathRelative) {\n        deps.forEach((item) => {\n          const pagePathsSet = store.get(item);\n          pagePathsSet?.delete(filePathRelative);\n          if (pagePathsSet?.size === 0) {\n            store.delete(item);\n            depsRemoved.push(item);\n          }\n        });\n      }\n      return depsRemoved;\n    },\n    get: (dep) => {\n      const pagePathsSet = store.get(dep);\n      return pagePathsSet ? [...pagePathsSet] : [];\n    }\n  };\n};\n\n// src/commands/dev/watchPageFiles.ts\nvar watchPageFiles = (app) => {\n  const depsWatcher = chokidar.watch([], {\n    disableGlobbing: true,\n    ignoreInitial: true\n  });\n  const depsHelper = createPageDepsHelper();\n  const addDeps = (page) => {\n    const depsToAdd = depsHelper.add(page);\n    depsWatcher.add(depsToAdd);\n  };\n  const removeDeps = (page) => {\n    const depsToRemove = depsHelper.remove(page);\n    depsWatcher.unwatch(depsToRemove);\n  };\n  const depsListener = async (dep) => {\n    const pagePaths = depsHelper.get(dep);\n    if (!pagePaths)\n      return;\n    for (const filePathRelative of pagePaths) {\n      logger4.info(\n        `dependency of page ${chalk3.magenta(filePathRelative)} is modified`\n      );\n      await handlePageChange(app, app.dir.source(filePathRelative));\n    }\n  };\n  depsWatcher.on(\"add\", depsListener);\n  depsWatcher.on(\"change\", depsListener);\n  depsWatcher.on(\"unlink\", depsListener);\n  app.pages.forEach((page) => addDeps(page));\n  const pagesWatcher = chokidar.watch(app.options.pagePatterns, {\n    cwd: app.dir.source(),\n    ignoreInitial: true\n  });\n  pagesWatcher.on(\"add\", async (filePathRelative) => {\n    logger4.info(`page ${chalk3.magenta(filePathRelative)} is created`);\n    const page = await handlePageAdd(app, app.dir.source(filePathRelative));\n    if (page === null)\n      return;\n    addDeps(page);\n  });\n  pagesWatcher.on(\"change\", async (filePathRelative) => {\n    logger4.info(`page ${chalk3.magenta(filePathRelative)} is modified`);\n    const result = await handlePageChange(app, app.dir.source(filePathRelative));\n    if (result === null)\n      return;\n    const [pageOld, pageNew] = result;\n    removeDeps(pageOld);\n    addDeps(pageNew);\n  });\n  pagesWatcher.on(\"unlink\", async (filePathRelative) => {\n    logger4.info(`page ${chalk3.magenta(filePathRelative)} is removed`);\n    const page = await handlePageUnlink(app, app.dir.source(filePathRelative));\n    if (page === null)\n      return;\n    removeDeps(page);\n  });\n  return [pagesWatcher, depsWatcher];\n};\n\n// src/commands/dev/watchUserConfigFile.ts\nimport process7 from \"process\";\nimport { chalk as chalk4, logger as logger5 } from \"@vuepress/utils\";\nimport chokidar2 from \"chokidar\";\nvar watchUserConfigFile = ({\n  userConfigPath,\n  userConfigDependencies,\n  restart\n}) => {\n  const cwd = process7.cwd();\n  const configWatcher = chokidar2.watch(userConfigPath, {\n    cwd,\n    ignoreInitial: true\n  });\n  configWatcher.on(\"change\", (configFile) => {\n    logger5.info(`config ${chalk4.magenta(configFile)} is modified`);\n    restart();\n  });\n  const depsWatcher = chokidar2.watch(userConfigDependencies, {\n    cwd,\n    ignoreInitial: true\n  });\n  depsWatcher.on(\"change\", (depFile) => {\n    logger5.info(`config dependency ${chalk4.magenta(depFile)} is modified`);\n    restart();\n  });\n  return [configWatcher, depsWatcher];\n};\n\n// src/commands/dev/createDev.ts\nvar log2 = debug2(\"vuepress:cli/dev\");\nvar createDev = (defaultAppConfig) => {\n  const dev = async (sourceDir = \".\", commandOptions = {}) => {\n    log2(`commandOptions:`, commandOptions);\n    if (process8.env.NODE_ENV === void 0) {\n      process8.env.NODE_ENV = \"development\";\n    }\n    const cliAppConfig = resolveCliAppConfig(sourceDir, commandOptions);\n    const userConfigPath = commandOptions.config ? resolveUserConfigPath(commandOptions.config) : resolveUserConfigConventionalPath(cliAppConfig.source);\n    log2(`userConfigPath:`, userConfigPath);\n    const { userConfig, userConfigDependencies } = await loadUserConfig(\n      userConfigPath\n    );\n    const appConfig = resolveAppConfig({\n      defaultAppConfig,\n      cliAppConfig,\n      userConfig\n    });\n    if (appConfig === null) {\n      return;\n    }\n    const app = createDevApp(appConfig);\n    app.use(transformUserConfigToPlugin(userConfig, cliAppConfig.source));\n    if (commandOptions.cleanTemp === true) {\n      await withSpinner2(\"Cleaning temp\")(() => {\n        return fs6.remove(app.dir.temp());\n      });\n    }\n    if (commandOptions.cleanCache === true) {\n      await withSpinner2(\"Cleaning cache\")(() => {\n        return fs6.remove(app.dir.cache());\n      });\n    }\n    await withSpinner2(\"Initializing and preparing data\")(async () => {\n      await app.init();\n      await app.prepare();\n    });\n    const close = await app.dev();\n    if (commandOptions.watch === false) {\n      return;\n    }\n    const watchers = [];\n    const restart = async () => {\n      await Promise.all([\n        ...watchers.map((item) => item.close()),\n        close()\n      ]);\n      await dev(sourceDir, {\n        ...commandOptions,\n        cleanCache: false,\n        cleanTemp: false\n      });\n      logger6.tip(`dev server has restarted, please refresh your browser`);\n    };\n    watchers.push(...watchPageFiles(app));\n    if (userConfigPath) {\n      watchers.push(\n        ...watchUserConfigFile({\n          userConfigPath,\n          userConfigDependencies,\n          restart\n        })\n      );\n    }\n    await app.pluginApi.hooks.onWatched.process(app, watchers, restart);\n  };\n  return dev;\n};\n\n// src/commands/info.ts\nimport { ora } from \"@vuepress/utils\";\nimport envinfo from \"envinfo\";\nvar info = async () => {\n  const spinner = ora();\n  spinner.start(\"Collecting Environment Info\");\n  const result = await envinfo.run(\n    {\n      System: [\"OS\", \"CPU\", \"Memory\", \"Shell\"],\n      Binaries: [\"Node\", \"Yarn\", \"npm\"],\n      Utilities: [\"Git\"],\n      Browsers: [\"Chrome\", \"Edge\", \"Firefox\", \"Safari\"],\n      npmPackages: [\n        \"@vuepress/bundler-vite\",\n        \"@vuepress/bundler-webpack\",\n        \"@vuepress/cli\",\n        \"@vuepress/client\",\n        \"@vuepress/core\",\n        \"@vuepress/markdown\",\n        \"@vuepress/plugin-active-header-links\",\n        \"@vuepress/plugin-back-to-top\",\n        \"@vuepress/plugin-container\",\n        \"@vuepress/plugin-docsearch\",\n        \"@vuepress/plugin-external-link-icon\",\n        \"@vuepress/plugin-git\",\n        \"@vuepress/plugin-google-analytics\",\n        \"@vuepress/plugin-medium-zoom\",\n        \"@vuepress/plugin-nprogress\",\n        \"@vuepress/plugin-palette\",\n        \"@vuepress/plugin-prismjs\",\n        \"@vuepress/plugin-pwa\",\n        \"@vuepress/plugin-pwa-popup\",\n        \"@vuepress/plugin-register-components\",\n        \"@vuepress/plugin-search\",\n        \"@vuepress/plugin-shiki\",\n        \"@vuepress/plugin-theme-data\",\n        \"@vuepress/plugin-toc\",\n        \"@vuepress/shared\",\n        \"@vuepress/theme-default\",\n        \"@vuepress/utils\",\n        \"vuepress\",\n        \"vuepress-vite\",\n        \"vuepress-webpack\",\n        \"vue\",\n        \"vue-router\",\n        \"vue-loader\"\n      ]\n    },\n    {\n      showNotFound: true,\n      duplicates: true,\n      fullTree: true\n    }\n  );\n  spinner.stop();\n  console.info(result);\n};\n\n// src/cli.ts\nimport { createRequire } from \"module\";\nimport process9 from \"process\";\nimport { chalk as chalk5 } from \"@vuepress/utils\";\nimport { cac } from \"cac\";\nvar require2 = createRequire(import.meta.url);\nvar cli = (defaultAppConfig = {}) => {\n  const program = cac(\"vuepress\");\n  const versionCli = require2(\"../package.json\").version;\n  const versionCore = require2(\"@vuepress/core/package.json\").version;\n  program.version(`core@${versionCore} vuepress/cli@${versionCli}`);\n  program.help();\n  program.command(\"dev [sourceDir]\", \"Start development server\").option(\"-c, --config <config>\", \"Set path to config file\").option(\"-p, --port <port>\", \"Use specified port (default: 8080)\").option(\"-t, --temp <temp>\", \"Set the directory of the temporary files\").option(\"--host <host>\", \"Use specified host (default: 0.0.0.0)\").option(\"--cache <cache>\", \"Set the directory of the cache files\").option(\"--clean-temp\", \"Clean the temporary files before dev\").option(\"--clean-cache\", \"Clean the cache files before dev\").option(\"--open\", \"Open browser when ready\").option(\"--debug\", \"Enable debug mode\").option(\"--no-watch\", \"Disable watching page and config files\").action(createDev(defaultAppConfig));\n  program.command(\"build [sourceDir]\", \"Build to static site\").option(\"-c, --config <config>\", \"Set path to config file\").option(\n    \"-d, --dest <dest>\",\n    \"Set the directory build output (default: .vuepress/dist)\"\n  ).option(\"-t, --temp <temp>\", \"Set the directory of the temporary files\").option(\"--cache <cache>\", \"Set the directory of the cache files\").option(\"--clean-temp\", \"Clean the temporary files before build\").option(\"--clean-cache\", \"Clean the cache files before build\").option(\"--debug\", \"Enable debug mode\").action(createBuild(defaultAppConfig));\n  program.command(\"info\", \"Display environment information\").action(info);\n  program.parse(process9.argv, { run: false });\n  if (program.matchedCommand) {\n    program.runMatchedCommand().catch((err) => {\n      console.error(chalk5.red(err.stack));\n      process9.exit(1);\n    });\n  } else {\n    program.outputHelp();\n  }\n};\nexport {\n  cli,\n  createBuild,\n  createDev,\n  defineUserConfig,\n  handlePageAdd,\n  handlePageChange,\n  handlePageUnlink,\n  info,\n  loadUserConfig,\n  resolveAppConfig,\n  resolveCliAppConfig,\n  resolveUserConfigConventionalPath,\n  resolveUserConfigPath,\n  transformUserConfigToPlugin,\n  watchPageFiles,\n  watchUserConfigFile\n};\n/package.json\u0005w{\n  \"name\": \"@vuepress/cli\",\n  \"version\": \"2.0.0-beta.53\",\n  \"description\": \"CLI package of VuePress\",\n  \"keywords\": [\n    \"vuepress\",\n    \"cli\"\n  ],\n  \"homepage\": \"https://github.com/vuepress\",\n  \"bugs\": {\n    \"url\": \"https://github.com/vuepress/vuepress-next/issues\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/vuepress/vuepress-next.git\"\n  },\n  \"license\": \"MIT\",\n  \"author\": \"meteorlxy\",\n  \"type\": \"module\",\n  \"exports\": {\n    \".\": \"./dist/index.js\",\n    \"./bin\": \"./dist/vuepress.js\",\n    \"./package.json\": \"./package.json\"\n  },\n  \"main\": \"./dist/index.js\",\n  \"types\": \"./dist/index.d.ts\",\n  \"bin\": {\n    \"vuepress-cli\": \"./bin/vuepress.js\"\n  },\n  \"files\": [\n    \"bin\",\n    \"dist\"\n  ],\n  \"dependencies\": {\n    \"@vuepress/core\": \"2.0.0-beta.53\",\n    \"@vuepress/shared\": \"2.0.0-beta.53\",\n    \"@vuepress/utils\": \"2.0.0-beta.53\",\n    \"cac\": \"^6.7.14\",\n    \"chokidar\": \"^3.5.3\",\n    \"envinfo\": \"^7.8.1\",\n    \"esbuild\": \"^0.15.12\"\n  },\n  \"devDependencies\": {\n    \"@types/envinfo\": \"^7.8.1\"\n  },\n  \"publishConfig\": {\n    \"access\": \"public\"\n  },\n  \"tsup\": {\n    \"clean\": true,\n    \"dts\": \"./src/index.ts\",\n    \"entry\": [\n      \"./src/index.ts\"\n    ],\n    \"format\": [\n      \"esm\"\n    ],\n    \"outDir\": \"./dist\",\n    \"sourcemap\": false,\n    \"target\": \"es2020\",\n    \"tsconfig\": \"../tsconfig.dts.json\"\n  },\n  \"scripts\": {\n    \"build\": \"tsup\",\n    \"clean\": \"rimraf dist\"\n  }\n}/LICENSE\u0004CThe MIT License (MIT)\n\nCopyright (c) 2018-present, Yuxi (Evan) You\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n/bin/vuepress.jsC#!/usr/bin/env node\n\nimport { cli } from '../dist/index.js'\n\ncli()\n/dist/index.d.ts\u000f\rimport { AppConfig, App, Page, PluginObject } from '@vuepress/core';\nimport { FSWatcher } from 'chokidar';\n\n/**\n * Type of `dev` command function\n */\ndeclare type BuildCommand = (sourceDir?: string, commandOptions?: BuildCommandOptions) => Promise<void>;\n/**\n * CLI options of `build` command\n */\ninterface BuildCommandOptions {\n    dest?: string;\n    temp?: string;\n    cache?: string;\n    debug?: boolean;\n    config?: string;\n    cleanTemp?: boolean;\n    cleanCache?: boolean;\n}\n\ndeclare const createBuild: (defaultAppConfig: Partial<AppConfig>) => BuildCommand;\n\n/**\n * Type of `dev` command function\n */\ndeclare type DevCommand = (sourceDir?: string, commandOptions?: DevCommandOptions) => Promise<void>;\n/**\n * CLI options of `dev` command\n */\ninterface DevCommandOptions {\n    port?: number;\n    host?: string;\n    temp?: string;\n    cache?: string;\n    debug?: boolean;\n    open?: boolean;\n    config?: string;\n    cleanTemp?: boolean;\n    cleanCache?: boolean;\n    watch?: boolean;\n}\n\ndeclare const createDev: (defaultAppConfig: Partial<AppConfig>) => DevCommand;\n\n/**\n * Event handler for page add event\n *\n * Returns the added page\n */\ndeclare const handlePageAdd: (app: App, filePath: string) => Promise<Page | null>;\n\n/**\n * Event handler for page change event\n *\n * Returns the old page and the new page tuple\n */\ndeclare const handlePageChange: (app: App, filePath: string) => Promise<[Page, Page] | null>;\n\n/**\n * Event handler for page unlink event\n *\n * Returns the removed page\n */\ndeclare const handlePageUnlink: (app: App, filePath: string) => Promise<Page | null>;\n\n/**\n * Watch page files and deps, return file watchers\n */\ndeclare const watchPageFiles: (app: App) => FSWatcher[];\n\ndeclare const watchUserConfigFile: ({ userConfigPath, userConfigDependencies, restart, }: {\n    userConfigPath: string;\n    userConfigDependencies: string[];\n    restart: () => Promise<void>;\n}) => FSWatcher[];\n\ndeclare const info: () => Promise<void>;\n\n/**\n * User config type of vuepress\n *\n * It will be transformed to `AppConfig` by cli\n */\ndeclare type UserConfig = Partial<AppConfig> & Omit<PluginObject, 'name' | 'multiple'>;\n\ndeclare const defineUserConfig: (config: UserConfig) => UserConfig;\n\n/**\n * Load user config file\n */\ndeclare const loadUserConfig: (userConfigPath?: string) => Promise<{\n    userConfig: UserConfig;\n    userConfigDependencies: string[];\n}>;\n\n/**\n * Resolve app config according to:\n *\n * - default options\n * - cli options\n * - user config file\n */\ndeclare const resolveAppConfig: ({ defaultAppConfig, cliAppConfig, userConfig, }: {\n    defaultAppConfig: Partial<AppConfig>;\n    cliAppConfig: Partial<AppConfig>;\n    userConfig: Partial<AppConfig>;\n}) => AppConfig | null;\n\n/**\n * Resolve app config according to command options of cli\n */\ndeclare const resolveCliAppConfig: (sourceDir: string, commandOptions: Partial<AppConfig>, cwd?: string) => Partial<AppConfig> & Pick<AppConfig, 'source'>;\n\n/**\n * Resolve conventional user config file path\n */\ndeclare const resolveUserConfigConventionalPath: (source: string, cwd?: string) => string | undefined;\n\n/**\n * Resolve file path of user config\n */\ndeclare const resolveUserConfigPath: (config: string, cwd?: string) => string;\n\n/**\n * Transform user config to a vuepress plugin\n */\ndeclare const transformUserConfigToPlugin: (userConfig: UserConfig, source: string, cwd?: string) => PluginObject;\n\n/**\n * Vuepress cli\n */\ndeclare const cli: (defaultAppConfig?: Partial<AppConfig>) => void;\n\nexport { BuildCommand, BuildCommandOptions, DevCommand, DevCommandOptions, UserConfig, cli, createBuild, createDev, defineUserConfig, handlePageAdd, handlePageChange, handlePageUnlink, info, loadUserConfig, resolveAppConfig, resolveCliAppConfig, resolveUserConfigConventionalPath, resolveUserConfigPath, transformUserConfigToPlugin, watchPageFiles, watchUserConfigFile };\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QHZ1ZXByZXNzL2NsaWVudEAyLjAuMC1iZXRhLjUz",
    "content": "/templates/dev.html<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-width,initial-scale=1\">\n  </head>\n  <body>\n    <div id=\"app\"></div>\n  </body>\n</html>\n/LICENSE\u0004CThe MIT License (MIT)\n\nCopyright (c) 2018-present, Yuxi (Evan) You\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n/dist/index.d.ts\u001fimport { PageData, PageFrontmatter, HeadConfig, SiteData } from '@vuepress/shared';\nexport { PageData, PageFrontmatter, PageHeader, SiteData } from '@vuepress/shared';\nimport * as vue from 'vue';\nimport { Ref, ComputedRef, InjectionKey, App, Component } from 'vue';\nimport { Router, RouteMeta } from 'vue-router';\n\ndeclare const ClientOnly: vue.DefineComponent<{}, () => vue.VNode<vue.RendererNode, vue.RendererElement, {\n    [key: string]: any;\n}>[] | null | undefined, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly<vue.ExtractPropTypes<{}>>, {}>;\n\n/**\n * Markdown rendered content\n */\ndeclare const Content: vue.DefineComponent<{\n    pageKey: {\n        type: StringConstructor;\n        required: false;\n        default: string;\n    };\n}, () => vue.VNode<vue.RendererNode, vue.RendererElement, {\n    [key: string]: any;\n}>, unknown, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly<vue.ExtractPropTypes<{\n    pageKey: {\n        type: StringConstructor;\n        required: false;\n        default: string;\n    };\n}>>, {\n    pageKey: string;\n}>;\n\n/**\n * Global Layout\n */\ndeclare const Vuepress: vue.DefineComponent<{}, () => vue.VNode<vue.RendererNode, vue.RendererElement, {\n    [key: string]: any;\n}>, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly<vue.ExtractPropTypes<{}>>, {}>;\n\n/**\n * Ref wrapper of `PageData`\n */\ndeclare type PageDataRef<T extends Record<any, any> = Record<never, never>> = Ref<PageData<T>>;\n/**\n * Empty page data to be used as the fallback value\n */\ndeclare const pageDataEmpty: PageData<Record<never, never>, Record<string, unknown>>;\n/**\n * Global page data ref\n */\ndeclare const pageData: PageDataRef;\n/**\n * Returns the ref of the data of current page\n */\ndeclare const usePageData: <T extends Record<any, any> = Record<never, never>>() => PageDataRef<T>;\n\n/**\n * Ref wrapper of `PageFrontmatter`\n */\ndeclare type PageFrontmatterRef<T extends Record<any, any> = Record<string, unknown>> = ComputedRef<PageFrontmatter<T>>;\n/**\n * Injection key for page frontmatter\n */\ndeclare const pageFrontmatterSymbol: InjectionKey<PageFrontmatterRef>;\n/**\n * Returns the ref of the frontmatter of current page\n */\ndeclare const usePageFrontmatter: <T extends Record<any, any> = Record<string, unknown>>() => PageFrontmatterRef<T>;\n\n/**\n * Page head config, which would be used for generate html tags in `<head>`\n */\ndeclare type PageHead = HeadConfig[];\n/**\n * Ref wrapper of `PageHead`\n */\ndeclare type PageHeadRef = ComputedRef<PageHead>;\n/**\n * Injection key for page head\n */\ndeclare const pageHeadSymbol: InjectionKey<PageHeadRef>;\n/**\n * Returns the ref of the head config of current page\n */\ndeclare const usePageHead: () => PageHeadRef;\n\n/**\n * Page head title, which would be used as the content of `head > title` tag\n */\ndeclare type PageHeadTitle = string;\n/**\n * Ref wrapper of `PageHeadTitle`\n */\ndeclare type PageHeadTitleRef = ComputedRef<PageHeadTitle>;\n/**\n * Injection key for page head title\n */\ndeclare const pageHeadTitleSymbol: InjectionKey<PageHeadTitleRef>;\n/**\n * Returns the ref of the head title of current page\n */\ndeclare const usePageHeadTitle: () => PageHeadTitleRef;\n\n/**\n * Page language\n */\ndeclare type PageLang = string;\n/**\n * Ref wrapper of `PageLang`\n */\ndeclare type PageLangRef = ComputedRef<PageLang>;\n/**\n * Injection key for page language\n */\ndeclare const pageLangSymbol: InjectionKey<PageLangRef>;\n/**\n * Returns the ref of the language of current page\n */\ndeclare const usePageLang: () => PageLangRef;\n\n/**\n * Data resolvers of all pages\n *\n * The key is page key, and the value is an async function that\n * returns the page data\n */\ndeclare type PagesData = Record<string, (() => Promise<PageData>) | undefined>;\n/**\n * Ref wrapper of `PagesData`\n */\ndeclare type PagesDataRef = Ref<PagesData>;\n/**\n * Global pages data ref\n */\ndeclare const pagesData: PagesDataRef;\n/**\n * Returns the ref of data resolvers of all pages\n */\ndeclare const usePagesData: () => PagesDataRef;\n\n/**\n * Route locale path\n */\ndeclare type RouteLocale = string;\n/**\n * Ref wrapper of `RouteLocale`\n */\ndeclare type RouteLocaleRef = ComputedRef<RouteLocale>;\n/**\n * Injection key for page route locale path\n */\ndeclare const routeLocaleSymbol: InjectionKey<RouteLocaleRef>;\n/**\n * Returns the ref of the route locale path of current page\n */\ndeclare const useRouteLocale: () => RouteLocaleRef;\n\n/**\n * Ref wrapper of `SiteData`\n */\ndeclare type SiteDataRef = Ref<SiteData>;\n/**\n * Global site data ref\n */\ndeclare const siteData: SiteDataRef;\n/**\n * Returns the ref of the site data\n */\ndeclare const useSiteData: () => SiteDataRef;\n\n/**\n * Site data of current locale\n */\ndeclare type SiteLocaleData = SiteData;\n/**\n * Ref wrapper of `SiteLocaleData`\n */\ndeclare type SiteLocaleDataRef = ComputedRef<SiteLocaleData>;\n/**\n * Injection key for site locale data\n */\ndeclare const siteLocaleDataSymbol: InjectionKey<SiteLocaleDataRef>;\n/**\n * Returns the ref of the site data of current locale\n */\ndeclare const useSiteLocaleData: () => SiteLocaleDataRef;\n\n/**\n * A util function to force update `<head>` of current page\n */\ndeclare type UpdateHead = () => void;\n/**\n * Injection key for `updateHead` util\n */\ndeclare const updateHeadSymbol: InjectionKey<UpdateHead>;\n/**\n * Returns the `updateHead` util\n */\ndeclare const useUpdateHead: () => UpdateHead;\n\n/**\n * Configure vuepress client\n */\ninterface ClientConfig {\n    /**\n     * An enhance function to be called after vue app instance and\n     * vue-router instance has been created\n     */\n    enhance?: (context: {\n        app: App;\n        router: Router;\n        siteData: SiteDataRef;\n    }) => void | Promise<void>;\n    /**\n     * A function to be called inside the setup function of vue app\n     */\n    setup?: () => void;\n    /**\n     * Layout components\n     */\n    layouts?: Record<string, Component>;\n    /**\n     * Components to be placed directly into the root node of vue app\n     */\n    rootComponents?: Component[];\n}\n\ndeclare type CreateVueAppFunction = () => Promise<{\n    app: App;\n    router: Router;\n}>;\n\ndeclare type PageRouteItem = [\n    name: string,\n    path: string,\n    meta: RouteMeta,\n    redirects: string[]\n];\n\n/**\n * A helper function to help you define vuepress client config file\n */\ndeclare const defineClientConfig: (clientConfig?: ClientConfig) => ClientConfig;\n\n/**\n * Resolver methods to get global computed\n *\n * Users can override corresponding method for advanced customization\n */\ndeclare const resolvers: {\n    resolvePageData: (pageKey: string) => Promise<PageData>;\n    resolvePageFrontmatter: (pageData: PageData) => PageFrontmatter;\n    resolvePageHead: (headTitle: PageHeadTitle, frontmatter: PageFrontmatter, siteLocale: SiteLocaleData) => PageHead;\n    resolvePageHeadTitle: (page: PageData, siteLocale: SiteLocaleData) => PageHeadTitle;\n    resolvePageLang: (pageData: PageData) => PageLang;\n    resolveRouteLocale: (locales: SiteData['locales'], routePath: string) => RouteLocale;\n    resolveSiteLocaleData: (site: SiteData, routeLocale: RouteLocale) => SiteLocaleData;\n};\n\n/**\n * Prefix url with site base\n */\ndeclare const withBase: (url: string) => string;\n\nexport { ClientConfig, ClientOnly, Content, CreateVueAppFunction, PageDataRef, PageFrontmatterRef, PageHead, PageHeadRef, PageHeadTitle, PageHeadTitleRef, PageLang, PageLangRef, PageRouteItem, PagesData, PagesDataRef, RouteLocale, RouteLocaleRef, SiteDataRef, SiteLocaleData, SiteLocaleDataRef, UpdateHead, Vuepress, defineClientConfig, pageData, pageDataEmpty, pageFrontmatterSymbol, pageHeadSymbol, pageHeadTitleSymbol, pageLangSymbol, pagesData, resolvers, routeLocaleSymbol, siteData, siteLocaleDataSymbol, updateHeadSymbol, usePageData, usePageFrontmatter, usePageHead, usePageHeadTitle, usePageLang, usePagesData, useRouteLocale, useSiteData, useSiteLocaleData, useUpdateHead, withBase };\n/dist/setupDevtools-EXVHPMXB.js\n// src/setupDevtools.ts\nimport { setupDevtoolsPlugin } from \"@vue/devtools-api\";\nimport { watch } from \"vue\";\nvar PLUGIN_ID = \"org.vuejs.vuepress\";\nvar PLUGIN_LABEL = \"VuePress\";\nvar PLUGIN_COMPONENT_STATE_TYPE = PLUGIN_LABEL;\nvar INSPECTOR_ID = PLUGIN_ID;\nvar INSPECTOR_LABEL = PLUGIN_LABEL;\nvar INSPECTOR_GLOBAL_COMPUTED_ID = \"global-computed\";\nvar INSPECTOR_GLOBAL_COMPUTED_LABEL = \"Global Computed\";\nvar setupDevtools = (app, globalComputed) => {\n  setupDevtoolsPlugin(\n    {\n      app,\n      id: PLUGIN_ID,\n      label: PLUGIN_LABEL,\n      packageName: \"@vuepress/client\",\n      homepage: \"https://v2.vuepress.vuejs.org\",\n      logo: \"https://v2.vuepress.vuejs.org/images/hero.png\",\n      componentStateTypes: [PLUGIN_COMPONENT_STATE_TYPE]\n    },\n    (api) => {\n      const globalComputedEntries = Object.entries(globalComputed);\n      const globalComputedKeys = Object.keys(globalComputed);\n      const globalComputedValues = Object.values(globalComputed);\n      api.on.inspectComponent((payload) => {\n        payload.instanceData.state.push(\n          ...globalComputedEntries.map(([name, item]) => ({\n            type: PLUGIN_COMPONENT_STATE_TYPE,\n            editable: false,\n            key: name,\n            value: item.value\n          }))\n        );\n      });\n      api.addInspector({\n        id: INSPECTOR_ID,\n        label: INSPECTOR_LABEL,\n        icon: \"article\"\n      });\n      api.on.getInspectorTree((payload) => {\n        if (payload.inspectorId !== INSPECTOR_ID)\n          return;\n        payload.rootNodes = [\n          {\n            id: INSPECTOR_GLOBAL_COMPUTED_ID,\n            label: INSPECTOR_GLOBAL_COMPUTED_LABEL,\n            children: globalComputedKeys.map((name) => ({\n              id: name,\n              label: name\n            }))\n          }\n        ];\n      });\n      api.on.getInspectorState((payload) => {\n        if (payload.inspectorId !== INSPECTOR_ID)\n          return;\n        if (payload.nodeId === INSPECTOR_GLOBAL_COMPUTED_ID) {\n          payload.state = {\n            [INSPECTOR_GLOBAL_COMPUTED_LABEL]: globalComputedEntries.map(\n              ([name, item]) => ({\n                key: name,\n                value: item.value\n              })\n            )\n          };\n        }\n        if (globalComputedKeys.includes(payload.nodeId)) {\n          payload.state = {\n            [INSPECTOR_GLOBAL_COMPUTED_LABEL]: [\n              {\n                key: payload.nodeId,\n                value: globalComputed[payload.nodeId].value\n              }\n            ]\n          };\n        }\n      });\n      watch(globalComputedValues, () => {\n        api.notifyComponentUpdate();\n        api.sendInspectorState(INSPECTOR_ID);\n      });\n    }\n  );\n};\nexport {\n  setupDevtools\n};\n/dist/chunk-X6HE2CCA.js\u001d\u001f// src/composables/pagesData.ts\nimport { pagesData as pagesDataRaw } from \"@internal/pagesData\";\nimport { ref } from \"vue\";\nvar pagesData = ref(pagesDataRaw);\nvar usePagesData = () => pagesData;\n\n// src/composables/pageData.ts\nimport { readonly, ref as ref2 } from \"vue\";\nvar pageDataEmpty = readonly({\n  key: \"\",\n  path: \"\",\n  title: \"\",\n  lang: \"\",\n  frontmatter: {},\n  excerpt: \"\",\n  headers: []\n});\nvar pageData = ref2(pageDataEmpty);\nvar usePageData = () => pageData;\nif (__VUEPRESS_DEV__ && (import.meta.webpackHot || import.meta.hot)) {\n  __VUE_HMR_RUNTIME__.updatePageData = (data) => {\n    pagesData.value[data.key] = () => Promise.resolve(data);\n    if (data.key === pageData.value.key) {\n      pageData.value = data;\n    }\n  };\n}\n\n// src/composables/pageFrontmatter.ts\nimport { inject } from \"vue\";\nvar pageFrontmatterSymbol = Symbol(\n  __VUEPRESS_DEV__ ? \"pageFrontmatter\" : \"\"\n);\nvar usePageFrontmatter = () => {\n  const pageFrontmatter = inject(pageFrontmatterSymbol);\n  if (!pageFrontmatter) {\n    throw new Error(\"usePageFrontmatter() is called without provider.\");\n  }\n  return pageFrontmatter;\n};\n\n// src/composables/pageHead.ts\nimport { inject as inject2 } from \"vue\";\nvar pageHeadSymbol = Symbol(\n  __VUEPRESS_DEV__ ? \"pageHead\" : \"\"\n);\nvar usePageHead = () => {\n  const pageHead = inject2(pageHeadSymbol);\n  if (!pageHead) {\n    throw new Error(\"usePageHead() is called without provider.\");\n  }\n  return pageHead;\n};\n\n// src/composables/pageHeadTitle.ts\nimport { inject as inject3 } from \"vue\";\nvar pageHeadTitleSymbol = Symbol(\n  __VUEPRESS_DEV__ ? \"pageHeadTitle\" : \"\"\n);\nvar usePageHeadTitle = () => {\n  const pageHeadTitle = inject3(pageHeadTitleSymbol);\n  if (!pageHeadTitle) {\n    throw new Error(\"usePageHeadTitle() is called without provider.\");\n  }\n  return pageHeadTitle;\n};\n\n// src/composables/pageLang.ts\nimport { inject as inject4 } from \"vue\";\nvar pageLangSymbol = Symbol(\n  __VUEPRESS_DEV__ ? \"pageLang\" : \"\"\n);\nvar usePageLang = () => {\n  const pageLang = inject4(pageLangSymbol);\n  if (!pageLang) {\n    throw new Error(\"usePageLang() is called without provider.\");\n  }\n  return pageLang;\n};\n\n// src/composables/routeLocale.ts\nimport { inject as inject5 } from \"vue\";\nvar routeLocaleSymbol = Symbol(\n  __VUEPRESS_DEV__ ? \"routeLocale\" : \"\"\n);\nvar useRouteLocale = () => {\n  const routeLocale = inject5(routeLocaleSymbol);\n  if (!routeLocale) {\n    throw new Error(\"useRouteLocale() is called without provider.\");\n  }\n  return routeLocale;\n};\n\n// src/composables/siteData.ts\nimport { siteData as siteDataRaw } from \"@internal/siteData\";\nimport { ref as ref3 } from \"vue\";\nvar siteData = ref3(siteDataRaw);\nvar useSiteData = () => siteData;\nif (__VUEPRESS_DEV__ && (import.meta.webpackHot || import.meta.hot)) {\n  __VUE_HMR_RUNTIME__.updateSiteData = (data) => {\n    siteData.value = data;\n  };\n}\n\n// src/composables/siteLocaleData.ts\nimport { inject as inject6 } from \"vue\";\nvar siteLocaleDataSymbol = Symbol(\n  __VUEPRESS_DEV__ ? \"siteLocaleData\" : \"\"\n);\nvar useSiteLocaleData = () => {\n  const siteLocaleData = inject6(siteLocaleDataSymbol);\n  if (!siteLocaleData) {\n    throw new Error(\"useSiteLocaleData() is called without provider.\");\n  }\n  return siteLocaleData;\n};\n\n// src/composables/updateHead.ts\nimport { inject as inject7 } from \"vue\";\nvar updateHeadSymbol = Symbol(\n  __VUEPRESS_DEV__ ? \"updateHead\" : \"\"\n);\nvar useUpdateHead = () => {\n  const updateHead = inject7(updateHeadSymbol);\n  if (!updateHead) {\n    throw new Error(\"useUpdateHead() is called without provider.\");\n  }\n  return updateHead;\n};\n\n// src/resolvers.ts\nimport {\n  dedupeHead,\n  isArray,\n  isString,\n  resolveLocalePath\n} from \"@vuepress/shared\";\nimport { reactive } from \"vue\";\nvar resolvers = reactive({\n  resolvePageData: async (pageKey) => {\n    const pageDataResolver = pagesData.value[pageKey];\n    const pageData2 = await pageDataResolver?.();\n    return pageData2 ?? pageDataEmpty;\n  },\n  resolvePageFrontmatter: (pageData2) => pageData2.frontmatter,\n  resolvePageHead: (headTitle, frontmatter, siteLocale) => {\n    const description = isString(frontmatter.description) ? frontmatter.description : siteLocale.description;\n    const head = [\n      ...isArray(frontmatter.head) ? frontmatter.head : [],\n      ...siteLocale.head,\n      [\"title\", {}, headTitle],\n      [\"meta\", { name: \"description\", content: description }]\n    ];\n    return dedupeHead(head);\n  },\n  resolvePageHeadTitle: (page, siteLocale) => `${page.title ? `${page.title}` : ``}${siteLocale.title ? ` | ${siteLocale.title}` : ``}`,\n  resolvePageLang: (pageData2) => pageData2.lang || \"en\",\n  resolveRouteLocale: (locales, routePath) => resolveLocalePath(locales, routePath),\n  resolveSiteLocaleData: (site, routeLocale) => ({\n    ...site,\n    ...site.locales[routeLocale]\n  })\n});\n\n// src/components/ClientOnly.ts\nimport { defineComponent, onMounted, ref as ref4 } from \"vue\";\nvar ClientOnly = defineComponent({\n  name: \"ClientOnly\",\n  setup(_, ctx) {\n    const isMounted = ref4(false);\n    onMounted(() => {\n      isMounted.value = true;\n    });\n    return () => isMounted.value ? ctx.slots.default?.() : null;\n  }\n});\n\n// src/components/Content.ts\nimport { pagesComponents } from \"@internal/pagesComponents\";\nimport { computed, defineComponent as defineComponent2, h } from \"vue\";\nvar Content = defineComponent2({\n  name: \"Content\",\n  props: {\n    pageKey: {\n      type: String,\n      required: false,\n      default: \"\"\n    }\n  },\n  setup(props) {\n    const page = usePageData();\n    const pageComponent = computed(\n      () => pagesComponents[props.pageKey || page.value.key]\n    );\n    return () => pageComponent.value ? h(pageComponent.value) : h(\n      \"div\",\n      __VUEPRESS_DEV__ ? \"Page does not exist. This is a fallback content.\" : \"404 Not Found\"\n    );\n  }\n});\n\n// src/components/Vuepress.ts\nimport { clientConfigs } from \"@internal/clientConfigs\";\nimport { isString as isString2 } from \"@vuepress/shared\";\nimport { computed as computed2, defineComponent as defineComponent3, h as h2 } from \"vue\";\nvar LAYOUT_NAME_DEFAULT = \"Layout\";\nvar LAYOUT_NAME_NOT_FOUND = \"NotFound\";\nvar layouts = clientConfigs.reduce(\n  (prev, item) => ({\n    ...prev,\n    ...item.layouts\n  }),\n  {}\n);\nvar Vuepress = defineComponent3({\n  name: \"Vuepress\",\n  setup() {\n    const page = usePageData();\n    const layoutComponent = computed2(() => {\n      let layoutName;\n      if (page.value.path) {\n        const frontmatterLayout = page.value.frontmatter.layout;\n        if (isString2(frontmatterLayout)) {\n          layoutName = frontmatterLayout;\n        } else {\n          layoutName = LAYOUT_NAME_DEFAULT;\n        }\n      } else {\n        layoutName = LAYOUT_NAME_NOT_FOUND;\n      }\n      return layouts[layoutName];\n    });\n    return () => h2(layoutComponent.value);\n  }\n});\n\n// src/withBase.ts\nimport { isLinkHttp, removeLeadingSlash } from \"@vuepress/shared\";\nvar withBase = (url) => {\n  if (isLinkHttp(url))\n    return url;\n  const base = useSiteData().value.base;\n  return `${base}${removeLeadingSlash(url)}`;\n};\n\nexport {\n  pagesData,\n  usePagesData,\n  pageDataEmpty,\n  pageData,\n  usePageData,\n  pageFrontmatterSymbol,\n  usePageFrontmatter,\n  pageHeadSymbol,\n  usePageHead,\n  pageHeadTitleSymbol,\n  usePageHeadTitle,\n  pageLangSymbol,\n  usePageLang,\n  routeLocaleSymbol,\n  useRouteLocale,\n  siteData,\n  useSiteData,\n  siteLocaleDataSymbol,\n  useSiteLocaleData,\n  updateHeadSymbol,\n  useUpdateHead,\n  resolvers,\n  ClientOnly,\n  Content,\n  Vuepress,\n  withBase\n};\n/templates/build.html\u0001<!DOCTYPE html>\n<html lang=\"{{ lang }}\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-width,initial-scale=1\">\n    <meta name=\"generator\" content=\"VuePress {{ version }}\">\n    <!--vuepress-ssr-head-->\n    <!--vuepress-ssr-styles-->\n    <!--vuepress-ssr-resources-->\n  </head>\n  <body>\n    <div id=\"app\"><!--vuepress-ssr-app--></div>\n    <!--vuepress-ssr-scripts-->\n  </body>\n</html>\n/types.d.ts\u0001\ndeclare const __VUEPRESS_VERSION__: string\ndeclare const __VUEPRESS_DEV__: boolean\ndeclare const __VUEPRESS_SSR__: boolean\ndeclare const __VUE_HMR_RUNTIME__: Record<string, any>\ndeclare const __VUE_OPTIONS_API__: boolean\ndeclare const __VUE_PROD_DEVTOOLS__: boolean\n/dist/index.js\u0004\u0019import {\n  ClientOnly,\n  Content,\n  Vuepress,\n  pageData,\n  pageDataEmpty,\n  pageFrontmatterSymbol,\n  pageHeadSymbol,\n  pageHeadTitleSymbol,\n  pageLangSymbol,\n  pagesData,\n  resolvers,\n  routeLocaleSymbol,\n  siteData,\n  siteLocaleDataSymbol,\n  updateHeadSymbol,\n  usePageData,\n  usePageFrontmatter,\n  usePageHead,\n  usePageHeadTitle,\n  usePageLang,\n  usePagesData,\n  useRouteLocale,\n  useSiteData,\n  useSiteLocaleData,\n  useUpdateHead,\n  withBase\n} from \"./chunk-X6HE2CCA.js\";\n\n// src/helpers/defineClientConfig.ts\nvar defineClientConfig = (clientConfig = {}) => clientConfig;\nexport {\n  ClientOnly,\n  Content,\n  Vuepress,\n  defineClientConfig,\n  pageData,\n  pageDataEmpty,\n  pageFrontmatterSymbol,\n  pageHeadSymbol,\n  pageHeadTitleSymbol,\n  pageLangSymbol,\n  pagesData,\n  resolvers,\n  routeLocaleSymbol,\n  siteData,\n  siteLocaleDataSymbol,\n  updateHeadSymbol,\n  usePageData,\n  usePageFrontmatter,\n  usePageHead,\n  usePageHeadTitle,\n  usePageLang,\n  usePagesData,\n  useRouteLocale,\n  useSiteData,\n  useSiteLocaleData,\n  useUpdateHead,\n  withBase\n};\n/dist/app.js\u001cimport {\n  ClientOnly,\n  Content,\n  Vuepress,\n  pageData,\n  pageFrontmatterSymbol,\n  pageHeadSymbol,\n  pageHeadTitleSymbol,\n  pageLangSymbol,\n  resolvers,\n  routeLocaleSymbol,\n  siteData,\n  siteLocaleDataSymbol,\n  updateHeadSymbol,\n  usePageHead,\n  usePageLang,\n  withBase\n} from \"./chunk-X6HE2CCA.js\";\n\n// src/app.ts\nimport { clientConfigs } from \"@internal/clientConfigs\";\nimport { createApp, createSSRApp, h } from \"vue\";\nimport { RouterView } from \"vue-router\";\n\n// src/router.ts\nimport { pagesComponents } from \"@internal/pagesComponents\";\nimport { removeEndingSlash } from \"@vuepress/shared\";\nimport {\n  createMemoryHistory,\n  createRouter,\n  createWebHistory,\n  START_LOCATION\n} from \"vue-router\";\n\n// src/routes.ts\nimport { pagesRoutes } from \"@internal/pagesRoutes\";\nvar createRoutes = () => pagesRoutes.reduce(\n  (result, [name, path, meta, redirects]) => {\n    result.push(\n      {\n        name,\n        path,\n        component: Vuepress,\n        meta\n      },\n      ...redirects.map((item) => ({\n        path: item,\n        redirect: path\n      }))\n    );\n    return result;\n  },\n  [\n    {\n      name: \"404\",\n      path: \"/:catchAll(.*)\",\n      component: Vuepress\n    }\n  ]\n);\n\n// src/router.ts\nvar historyCreator = __VUEPRESS_SSR__ ? createMemoryHistory : createWebHistory;\nvar createVueRouter = () => {\n  const router = createRouter({\n    history: historyCreator(removeEndingSlash(siteData.value.base)),\n    routes: createRoutes(),\n    scrollBehavior: (to, from, savedPosition) => {\n      if (savedPosition)\n        return savedPosition;\n      if (to.hash)\n        return { el: to.hash };\n      return { top: 0 };\n    }\n  });\n  router.beforeResolve(async (to, from) => {\n    if (to.path !== from.path || from === START_LOCATION) {\n      ;\n      [pageData.value] = await Promise.all([\n        resolvers.resolvePageData(to.name),\n        pagesComponents[to.name]?.__asyncLoader()\n      ]);\n    }\n  });\n  return router;\n};\n\n// src/setupGlobalComponents.ts\nvar setupGlobalComponents = (app) => {\n  app.component(\"ClientOnly\", ClientOnly);\n  app.component(\"Content\", Content);\n};\n\n// src/setupGlobalComputed.ts\nimport { computed } from \"vue\";\nvar setupGlobalComputed = (app, router) => {\n  const routeLocale = computed(\n    () => resolvers.resolveRouteLocale(\n      siteData.value.locales,\n      router.currentRoute.value.path\n    )\n  );\n  const siteLocaleData = computed(\n    () => resolvers.resolveSiteLocaleData(siteData.value, routeLocale.value)\n  );\n  const pageFrontmatter = computed(\n    () => resolvers.resolvePageFrontmatter(pageData.value)\n  );\n  const pageHeadTitle = computed(\n    () => resolvers.resolvePageHeadTitle(pageData.value, siteLocaleData.value)\n  );\n  const pageHead = computed(\n    () => resolvers.resolvePageHead(\n      pageHeadTitle.value,\n      pageFrontmatter.value,\n      siteLocaleData.value\n    )\n  );\n  const pageLang = computed(() => resolvers.resolvePageLang(pageData.value));\n  app.provide(routeLocaleSymbol, routeLocale);\n  app.provide(siteLocaleDataSymbol, siteLocaleData);\n  app.provide(pageFrontmatterSymbol, pageFrontmatter);\n  app.provide(pageHeadTitleSymbol, pageHeadTitle);\n  app.provide(pageHeadSymbol, pageHead);\n  app.provide(pageLangSymbol, pageLang);\n  Object.defineProperties(app.config.globalProperties, {\n    $frontmatter: { get: () => pageFrontmatter.value },\n    $head: { get: () => pageHead.value },\n    $headTitle: { get: () => pageHeadTitle.value },\n    $lang: { get: () => pageLang.value },\n    $page: { get: () => pageData.value },\n    $routeLocale: { get: () => routeLocale.value },\n    $site: { get: () => siteData.value },\n    $siteLocale: { get: () => siteLocaleData.value },\n    $withBase: { get: () => withBase }\n  });\n  return {\n    pageData,\n    pageFrontmatter,\n    pageHead,\n    pageHeadTitle,\n    pageLang,\n    routeLocale,\n    siteData,\n    siteLocaleData\n  };\n};\n\n// src/setupUpdateHead.ts\nimport { isPlainObject, isString } from \"@vuepress/shared\";\nimport { onMounted, provide, ref, useSSRContext, watch } from \"vue\";\nimport { useRoute } from \"vue-router\";\nvar setupUpdateHead = () => {\n  const route = useRoute();\n  const head = usePageHead();\n  const lang = usePageLang();\n  if (__VUEPRESS_SSR__) {\n    const ssrContext = useSSRContext();\n    if (ssrContext) {\n      ssrContext.head = head.value;\n      ssrContext.lang = lang.value;\n    }\n    return;\n  }\n  const headTags = ref([]);\n  const loadHead = () => {\n    head.value.forEach((item) => {\n      const tag = queryHeadTag(item);\n      if (tag) {\n        headTags.value.push(tag);\n      }\n    });\n  };\n  const updateHead = () => {\n    document.documentElement.lang = lang.value;\n    headTags.value.forEach((item) => {\n      if (item.parentNode === document.head) {\n        document.head.removeChild(item);\n      }\n    });\n    headTags.value.splice(0, headTags.value.length);\n    head.value.forEach((item) => {\n      const tag = createHeadTag(item);\n      if (tag !== null) {\n        document.head.appendChild(tag);\n        headTags.value.push(tag);\n      }\n    });\n  };\n  provide(updateHeadSymbol, updateHead);\n  onMounted(() => {\n    loadHead();\n    updateHead();\n    watch(\n      () => __VUEPRESS_DEV__ ? head.value : route.path,\n      () => updateHead()\n    );\n  });\n};\nvar queryHeadTag = ([\n  tagName,\n  attrs,\n  content = \"\"\n]) => {\n  const attrsSelector = Object.entries(attrs).map(([key, value]) => {\n    if (isString(value)) {\n      return `[${key}=\"${value}\"]`;\n    }\n    if (value === true) {\n      return `[${key}]`;\n    }\n    return \"\";\n  }).join(\"\");\n  const selector = `head > ${tagName}${attrsSelector}`;\n  const tags = Array.from(document.querySelectorAll(selector));\n  const matchedTag = tags.find((item) => item.innerText === content);\n  return matchedTag || null;\n};\nvar createHeadTag = ([\n  tagName,\n  attrs,\n  content\n]) => {\n  if (!isString(tagName)) {\n    return null;\n  }\n  const tag = document.createElement(tagName);\n  if (isPlainObject(attrs)) {\n    Object.entries(attrs).forEach(([key, value]) => {\n      if (isString(value)) {\n        tag.setAttribute(key, value);\n      } else if (value === true) {\n        tag.setAttribute(key, \"\");\n      }\n    });\n  }\n  if (isString(content)) {\n    tag.appendChild(document.createTextNode(content));\n  }\n  return tag;\n};\n\n// src/app.ts\nvar appCreator = __VUEPRESS_DEV__ ? createApp : createSSRApp;\nvar createVueApp = async () => {\n  const app = appCreator({\n    name: \"VuepressApp\",\n    setup() {\n      setupUpdateHead();\n      for (const clientConfig of clientConfigs) {\n        clientConfig.setup?.();\n      }\n      return () => [\n        h(RouterView),\n        ...clientConfigs.flatMap(\n          ({ rootComponents = [] }) => rootComponents.map((component) => h(component))\n        )\n      ];\n    }\n  });\n  const router = createVueRouter();\n  setupGlobalComponents(app);\n  const globalComputed = setupGlobalComputed(app, router);\n  if (__VUEPRESS_DEV__ || __VUE_PROD_DEVTOOLS__) {\n    const { setupDevtools } = await import(\"./setupDevtools-EXVHPMXB.js\");\n    setupDevtools(app, globalComputed);\n  }\n  for (const clientConfig of clientConfigs) {\n    await clientConfig.enhance?.({ app, router, siteData });\n  }\n  app.use(router);\n  return {\n    app,\n    router\n  };\n};\nif (!__VUEPRESS_SSR__) {\n  createVueApp().then(({ app, router }) => {\n    router.isReady().then(() => {\n      app.mount(\"#app\");\n    });\n  });\n}\nexport {\n  createVueApp\n};\n/package.json\u0006\u0013{\n  \"name\": \"@vuepress/client\",\n  \"version\": \"2.0.0-beta.53\",\n  \"description\": \"Client package of VuePress\",\n  \"keywords\": [\n    \"vuepress\",\n    \"client\"\n  ],\n  \"homepage\": \"https://github.com/vuepress\",\n  \"bugs\": {\n    \"url\": \"https://github.com/vuepress/vuepress-next/issues\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/vuepress/vuepress-next.git\"\n  },\n  \"license\": \"MIT\",\n  \"author\": \"meteorlxy\",\n  \"type\": \"module\",\n  \"exports\": {\n    \".\": \"./dist/index.js\",\n    \"./app\": \"./dist/app.js\",\n    \"./package.json\": \"./package.json\",\n    \"./templates/*\": \"./templates/*\",\n    \"./types\": \"./types.d.ts\"\n  },\n  \"main\": \"./dist/index.js\",\n  \"module\": \"./dist/index.js\",\n  \"types\": \"./dist/index.d.ts\",\n  \"files\": [\n    \"dist\",\n    \"templates\",\n    \"types.d.ts\"\n  ],\n  \"dependencies\": {\n    \"@vue/devtools-api\": \"^6.4.5\",\n    \"@vuepress/shared\": \"2.0.0-beta.53\",\n    \"vue\": \"^3.2.41\",\n    \"vue-router\": \"^4.1.6\"\n  },\n  \"publishConfig\": {\n    \"access\": \"public\"\n  },\n  \"tsup\": {\n    \"clean\": true,\n    \"dts\": \"./src/index.ts\",\n    \"entry\": [\n      \"./src/app.ts\",\n      \"./src/index.ts\"\n    ],\n    \"external\": [\n      \"@internal/clientConfigs\",\n      \"@internal/layoutComponents\",\n      \"@internal/pagesComponents\",\n      \"@internal/pagesData\",\n      \"@internal/pagesRoutes\",\n      \"@internal/siteData\"\n    ],\n    \"format\": [\n      \"esm\"\n    ],\n    \"outDir\": \"./dist\",\n    \"sourcemap\": false,\n    \"target\": \"es2020\",\n    \"tsconfig\": \"./tsconfig.dts.json\"\n  },\n  \"scripts\": {\n    \"build\": \"tsup\",\n    \"clean\": \"rimraf dist\"\n  }\n}"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QHZ1ZXByZXNzL2NvcmVAMi4wLjAtYmV0YS41Mw==",
    "content": "/LICENSE\u0004CThe MIT License (MIT)\n\nCopyright (c) 2018-present, Yuxi (Evan) You\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n/package.json\u0004{\n  \"name\": \"@vuepress/core\",\n  \"version\": \"2.0.0-beta.53\",\n  \"description\": \"Core package of VuePress\",\n  \"keywords\": [\n    \"vuepress\",\n    \"core\"\n  ],\n  \"homepage\": \"https://github.com/vuepress\",\n  \"bugs\": {\n    \"url\": \"https://github.com/vuepress/vuepress-next/issues\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/vuepress/vuepress-next.git\"\n  },\n  \"license\": \"MIT\",\n  \"author\": \"meteorlxy\",\n  \"type\": \"module\",\n  \"exports\": {\n    \".\": \"./dist/index.js\",\n    \"./package.json\": \"./package.json\"\n  },\n  \"main\": \"./dist/index.js\",\n  \"types\": \"./dist/index.d.ts\",\n  \"files\": [\n    \"dist\"\n  ],\n  \"dependencies\": {\n    \"@vuepress/client\": \"2.0.0-beta.53\",\n    \"@vuepress/markdown\": \"2.0.0-beta.53\",\n    \"@vuepress/shared\": \"2.0.0-beta.53\",\n    \"@vuepress/utils\": \"2.0.0-beta.53\",\n    \"vue\": \"^3.2.41\"\n  },\n  \"publishConfig\": {\n    \"access\": \"public\"\n  },\n  \"tsup\": {\n    \"clean\": true,\n    \"dts\": \"./src/index.ts\",\n    \"entry\": [\n      \"./src/index.ts\"\n    ],\n    \"format\": [\n      \"esm\"\n    ],\n    \"outDir\": \"./dist\",\n    \"sourcemap\": false,\n    \"target\": \"es2020\",\n    \"tsconfig\": \"../tsconfig.dts.json\"\n  },\n  \"scripts\": {\n    \"build\": \"tsup\",\n    \"clean\": \"rimraf dist\"\n  }\n}/dist/index.jsi// src/app/prepare/prepareClientConfigs.ts\nvar prepareClientConfigs = async (app) => {\n  const clientConfigFiles = await app.pluginApi.hooks.clientConfigFile.process(\n    app\n  );\n  const content = `${clientConfigFiles.map((filePath, index) => `import clientConfig${index} from '${filePath}'`).join(\"\\n\")}\n\nexport const clientConfigs = [\n${clientConfigFiles.map((_, index) => `  clientConfig${index},`).join(\"\\n\")}\n]\n`;\n  await app.writeTemp(\"internal/clientConfigs.js\", content);\n};\n\n// src/app/prepare/preparePageComponent.ts\nvar preparePageComponent = async (app, page) => {\n  await app.writeTemp(\n    page.componentFilePathRelative,\n    [\n      `${page.sfcBlocks.template?.tagOpen}<div>${page.sfcBlocks.template?.contentStripped}</div>${page.sfcBlocks.template?.tagClose}\n`,\n      page.sfcBlocks.script?.content,\n      page.sfcBlocks.scriptSetup?.content,\n      ...page.sfcBlocks.styles.map((item) => item.content),\n      ...page.sfcBlocks.customBlocks.map((item) => item.content)\n    ].join(\"\\n\")\n  );\n};\n\n// src/app/prepare/preparePageData.ts\nvar HMR_CODE = `\nif (import.meta.webpackHot) {\n  import.meta.webpackHot.accept()\n  if (__VUE_HMR_RUNTIME__.updatePageData) {\n    __VUE_HMR_RUNTIME__.updatePageData(data)\n  }\n}\n\nif (import.meta.hot) {\n  import.meta.hot.accept(({ data }) => {\n    __VUE_HMR_RUNTIME__.updatePageData(data)\n  })\n}\n`;\nvar preparePageData = async (app, page) => {\n  let content = `export const data = JSON.parse(${JSON.stringify(\n    JSON.stringify(page.data)\n  )})\n`;\n  if (app.env.isDev) {\n    content += HMR_CODE;\n  }\n  await app.writeTemp(page.dataFilePathRelative, content);\n};\n\n// src/app/prepare/preparePagesComponents.ts\nvar preparePagesComponents = async (app) => {\n  const content = `import { defineAsyncComponent } from 'vue'\n\nexport const pagesComponents = {${app.pages.map(\n    ({ key, path: path9, componentFilePath, componentFileChunkName }) => `\n  // path: ${path9}\n  ${JSON.stringify(key)}: defineAsyncComponent(() => import(${componentFileChunkName ? `/* webpackChunkName: \"${componentFileChunkName}\" */` : \"\"}${JSON.stringify(componentFilePath)})),`\n  ).join(\"\")}\n}\n`;\n  await app.writeTemp(\"internal/pagesComponents.js\", content);\n};\n\n// src/app/prepare/preparePagesData.ts\nvar preparePagesData = async (app) => {\n  const content = `export const pagesData = {${app.pages.map(\n    ({ key, path: path9, dataFilePath, dataFileChunkName }) => `\n  // path: ${path9}\n  ${JSON.stringify(key)}: () => import(${dataFileChunkName ? `/* webpackChunkName: \"${dataFileChunkName}\" */` : \"\"}${JSON.stringify(dataFilePath)}).then(({ data }) => data),`\n  ).join(\"\")}\n}\n`;\n  await app.writeTemp(\"internal/pagesData.js\", content);\n};\n\n// src/app/prepare/preparePagesRoutes.ts\nimport { ensureLeadingSlash } from \"@vuepress/shared\";\nvar resolvePageRouteItem = ({\n  key,\n  path: path9,\n  pathInferred,\n  filePathRelative,\n  routeMeta\n}) => {\n  const redirectsSet = /* @__PURE__ */ new Set();\n  redirectsSet.add(decodeURI(path9));\n  if (path9.endsWith(\"/\")) {\n    redirectsSet.add(path9 + \"index.html\");\n  } else {\n    redirectsSet.add(path9.replace(/.html$/, \"\"));\n  }\n  if (pathInferred !== null) {\n    redirectsSet.add(pathInferred);\n    redirectsSet.add(encodeURI(pathInferred));\n  }\n  if (filePathRelative !== null) {\n    const filenamePath = ensureLeadingSlash(filePathRelative);\n    redirectsSet.add(filenamePath);\n    redirectsSet.add(encodeURI(filenamePath));\n  }\n  redirectsSet.delete(path9);\n  return [key, path9, routeMeta, [...redirectsSet]];\n};\nvar preparePagesRoutes = async (app) => {\n  const routeItems = app.pages.map(resolvePageRouteItem);\n  const content = `export const pagesRoutes = [${routeItems.map((routeItem) => `\n  ${JSON.stringify(routeItem)},`).join(\"\")}\n]\n`;\n  await app.writeTemp(\"internal/pagesRoutes.js\", content);\n};\n\n// src/app/prepare/prepareSiteData.ts\nvar HMR_CODE2 = `\nif (import.meta.webpackHot) {\n  import.meta.webpackHot.accept()\n  if (__VUE_HMR_RUNTIME__.updateSiteData) {\n    __VUE_HMR_RUNTIME__.updateSiteData(siteData)\n  }\n}\n\nif (import.meta.hot) {\n  import.meta.hot.accept(({ siteData }) => {\n    __VUE_HMR_RUNTIME__.updateSiteData(siteData)\n  })\n}\n`;\nvar prepareSiteData = async (app) => {\n  let content = `export const siteData = JSON.parse(${JSON.stringify(\n    JSON.stringify(app.siteData)\n  )})\n`;\n  if (app.env.isDev) {\n    content += HMR_CODE2;\n  }\n  await app.writeTemp(\"internal/siteData.js\", content);\n};\n\n// src/app/appInit.ts\nimport { debug as debug3 } from \"@vuepress/utils\";\n\n// src/app/resolveAppMarkdown.ts\nimport { createMarkdown } from \"@vuepress/markdown\";\nvar resolveAppMarkdown = async (app) => {\n  await app.pluginApi.hooks.extendsMarkdownOptions.process(\n    app.options.markdown,\n    app\n  );\n  const markdown = createMarkdown(app.options.markdown);\n  await app.pluginApi.hooks.extendsMarkdown.process(markdown, app);\n  return markdown;\n};\n\n// src/app/resolveAppPages.ts\nimport { debug as debug2, globby } from \"@vuepress/utils\";\n\n// src/page/inferPagePath.ts\nimport { ensureLeadingSlash as ensureLeadingSlash2, resolveLocalePath } from \"@vuepress/shared\";\nvar inferPagePath = ({\n  app,\n  filePathRelative\n}) => {\n  if (!filePathRelative) {\n    return {\n      pathInferred: null,\n      pathLocale: \"/\"\n    };\n  }\n  const pathInferred = ensureLeadingSlash2(filePathRelative).replace(/\\.md$/, \".html\").replace(/\\/(README|index).html$/i, \"/\");\n  const pathLocale = resolveLocalePath(app.siteData.locales, pathInferred);\n  return {\n    pathInferred,\n    pathLocale\n  };\n};\n\n// src/page/renderPageContent.ts\nvar renderPageContent = async ({\n  app,\n  content,\n  filePath,\n  filePathRelative,\n  options\n}) => {\n  const markdownEnv = {\n    base: app.options.base,\n    filePath,\n    filePathRelative,\n    frontmatter: { ...options.frontmatter }\n  };\n  const contentRendered = app.markdown.render(content, markdownEnv);\n  const {\n    excerpt = \"\",\n    frontmatter = {},\n    headers = [],\n    importedFiles = [],\n    links = [],\n    sfcBlocks = {\n      template: null,\n      script: null,\n      scriptSetup: null,\n      scripts: [],\n      styles: [],\n      customBlocks: []\n    },\n    title = \"\"\n  } = markdownEnv;\n  return {\n    contentRendered,\n    deps: importedFiles,\n    excerpt,\n    frontmatter,\n    headers,\n    links,\n    sfcBlocks,\n    title: frontmatter.title ?? title\n  };\n};\n\n// src/page/resolvePageComponentInfo.ts\nimport { path } from \"@vuepress/utils\";\nvar resolvePageComponentInfo = async ({\n  app,\n  htmlFilePathRelative,\n  key\n}) => {\n  const componentFilePathRelative = path.join(\n    \"pages\",\n    `${htmlFilePathRelative}.vue`\n  );\n  const componentFilePath = app.dir.temp(componentFilePathRelative);\n  const componentFileChunkName = key;\n  return {\n    componentFilePath,\n    componentFilePathRelative,\n    componentFileChunkName\n  };\n};\n\n// src/page/resolvePageDataInfo.ts\nimport { path as path2 } from \"@vuepress/utils\";\nvar resolvePageDataInfo = ({\n  app,\n  htmlFilePathRelative,\n  key\n}) => {\n  const dataFilePathRelative = path2.join(\"pages\", `${htmlFilePathRelative}.js`);\n  const dataFilePath = app.dir.temp(dataFilePathRelative);\n  const dataFileChunkName = key;\n  return {\n    dataFilePath,\n    dataFilePathRelative,\n    dataFileChunkName\n  };\n};\n\n// src/page/resolvePageDate.ts\nimport { formatDateString, isString } from \"@vuepress/shared\";\nimport { path as path3 } from \"@vuepress/utils\";\nvar FILENAME_DATE_RE = /^(\\d{4})-(\\d{1,2})(?:-(\\d{1,2}))?-(.*)$/;\nvar DIRNAME_DATE_RE = /(\\d{4})\\/(\\d{1,2})(?:\\/(\\d{1,2}))?(\\/|$)/;\nvar DEFAULT_DATE = \"0000-00-00\";\nvar resolvePageDate = ({\n  frontmatter,\n  filePathRelative\n}) => {\n  if (frontmatter.date instanceof Date) {\n    return formatDateString(\n      [\n        frontmatter.date.getUTCFullYear(),\n        frontmatter.date.getUTCMonth() + 1,\n        frontmatter.date.getUTCDate()\n      ].join(\"-\"),\n      DEFAULT_DATE\n    );\n  }\n  if (isString(frontmatter.date)) {\n    return formatDateString(frontmatter.date, DEFAULT_DATE);\n  }\n  if (filePathRelative === null) {\n    return DEFAULT_DATE;\n  }\n  const filename = path3.parse(filePathRelative).name;\n  if (filename) {\n    const matches = filename.match(FILENAME_DATE_RE);\n    if (matches) {\n      return formatDateString(\n        `${matches[1]}-${matches[2]}-${matches[3] ?? \"01\"}`,\n        DEFAULT_DATE\n      );\n    }\n  }\n  const dirname = path3.dirname(filePathRelative);\n  if (dirname !== \".\") {\n    const matches = dirname.match(DIRNAME_DATE_RE);\n    if (matches) {\n      return formatDateString(\n        `${matches[1]}-${matches[2]}-${matches[3] ?? \"01\"}`,\n        DEFAULT_DATE\n      );\n    }\n  }\n  return DEFAULT_DATE;\n};\n\n// src/page/resolvePageFileContent.ts\nimport { debug, fs } from \"@vuepress/utils\";\nvar log = debug(\"vuepress:core/page\");\nvar resolvePageFileContent = async ({\n  filePath,\n  options\n}) => {\n  if (filePath) {\n    try {\n      const content = await fs.readFile(filePath, \"utf-8\");\n      return content;\n    } catch (e) {\n      log(e instanceof Error ? e.message : e);\n    }\n  }\n  return options.content ?? \"\";\n};\n\n// src/page/resolvePageFilePath.ts\nimport { logger, path as path4 } from \"@vuepress/utils\";\nvar resolvePageFilePath = ({\n  app,\n  options\n}) => {\n  if (!options.filePath) {\n    return {\n      filePath: null,\n      filePathRelative: null\n    };\n  }\n  if (!path4.isAbsolute(options.filePath)) {\n    throw logger.createError(\n      `filePath is not absolute file path: ${options.filePath}}`\n    );\n  }\n  return {\n    filePath: options.filePath,\n    filePathRelative: path4.relative(app.dir.source(), options.filePath)\n  };\n};\n\n// src/page/resolvePageHtmlInfo.ts\nimport { removeLeadingSlash } from \"@vuepress/shared\";\nvar resolvePageHtmlInfo = ({\n  app,\n  path: pagePath\n}) => {\n  const htmlFilePathRelative = removeLeadingSlash(\n    decodeURI(pagePath.replace(/\\/$/, \"/index.html\"))\n  );\n  const htmlFilePath = app.dir.dest(htmlFilePathRelative);\n  return {\n    htmlFilePath,\n    htmlFilePathRelative\n  };\n};\n\n// src/page/resolvePageKey.ts\nimport { hash } from \"@vuepress/utils\";\nvar resolvePageKey = ({ path: path9 }) => `v-${hash(path9)}`;\n\n// src/page/resolvePageLang.ts\nimport { isString as isString2 } from \"@vuepress/shared\";\nvar resolvePageLang = ({\n  app,\n  frontmatter,\n  pathLocale\n}) => {\n  if (isString2(frontmatter.lang) && frontmatter.lang) {\n    return frontmatter.lang;\n  }\n  return app.siteData.locales[pathLocale]?.lang ?? app.siteData.lang;\n};\n\n// src/page/resolvePagePath.ts\nimport { ensureEndingSlash } from \"@vuepress/shared\";\nimport { logger as logger2 } from \"@vuepress/utils\";\nvar resolvePagePath = ({\n  permalink,\n  pathInferred,\n  options\n}) => {\n  let pagePath = options.path || permalink || pathInferred;\n  if (!pagePath) {\n    throw logger2.createError(\n      `page path is empty, page options: ${JSON.stringify(options, null, 2)}`\n    );\n  }\n  if (!pagePath.endsWith(\".html\")) {\n    pagePath = ensureEndingSlash(pagePath);\n  }\n  return encodeURI(pagePath);\n};\n\n// src/page/resolvePagePermalink.ts\nimport { ensureLeadingSlash as ensureLeadingSlash3, isString as isString3 } from \"@vuepress/shared\";\nimport { path as path5 } from \"@vuepress/utils\";\nvar resolvePagePermalink = ({\n  app,\n  frontmatter,\n  slug,\n  date,\n  pathInferred,\n  pathLocale\n}) => {\n  if (isString3(frontmatter.permalink)) {\n    return frontmatter.permalink;\n  }\n  const permalinkPattern = getPermalinkPattern({ app, frontmatter });\n  if (permalinkPattern === null) {\n    return null;\n  }\n  const [year, month, day] = date.split(\"-\");\n  const link = path5.join(\n    pathLocale,\n    permalinkPattern.replace(/:year/, year).replace(/:month/, month).replace(/:day/, day).replace(/:slug/, slug).replace(/:raw/, pathInferred?.replace(/^\\//, \"\") ?? \"\")\n  );\n  return ensureLeadingSlash3(link);\n};\nvar getPermalinkPattern = ({\n  app,\n  frontmatter\n}) => {\n  if (frontmatter.permalinkPattern === null) {\n    return null;\n  }\n  if (isString3(frontmatter.permalinkPattern)) {\n    return frontmatter.permalinkPattern;\n  }\n  return app.options.permalinkPattern;\n};\n\n// src/page/resolvePageRouteMeta.ts\nvar resolvePageRouteMeta = ({\n  frontmatter\n}) => frontmatter.routeMeta ?? {};\n\n// src/page/resolvePageSlug.ts\nimport { path as path6 } from \"@vuepress/utils\";\nvar DATE_RE = /(\\d{4}-\\d{1,2}(-\\d{1,2})?)-(.*)/;\nvar resolvePageSlug = ({\n  filePathRelative\n}) => {\n  if (!filePathRelative) {\n    return \"\";\n  }\n  const filename = path6.parse(filePathRelative).name;\n  const match = filename.match(DATE_RE);\n  return match ? match[3] : filename;\n};\n\n// src/page/createPage.ts\nvar createPage = async (app, options) => {\n  await app.pluginApi.hooks.extendsPageOptions.process(options, app);\n  const { filePath, filePathRelative } = resolvePageFilePath({\n    app,\n    options\n  });\n  const content = await resolvePageFileContent({ filePath, options });\n  const {\n    contentRendered,\n    deps,\n    excerpt,\n    frontmatter,\n    headers,\n    links,\n    sfcBlocks,\n    title\n  } = await renderPageContent({\n    app,\n    content,\n    filePath,\n    filePathRelative,\n    options\n  });\n  const routeMeta = resolvePageRouteMeta({ frontmatter });\n  const slug = resolvePageSlug({ filePathRelative });\n  const date = resolvePageDate({ frontmatter, filePathRelative });\n  const { pathInferred, pathLocale } = inferPagePath({ app, filePathRelative });\n  const lang = resolvePageLang({ app, frontmatter, pathLocale });\n  const permalink = resolvePagePermalink({\n    app,\n    frontmatter,\n    slug,\n    date,\n    pathInferred,\n    pathLocale\n  });\n  const path9 = resolvePagePath({ permalink, pathInferred, options });\n  const key = resolvePageKey({ path: path9 });\n  const { htmlFilePath, htmlFilePathRelative } = resolvePageHtmlInfo({\n    app,\n    path: path9\n  });\n  const {\n    componentFilePath,\n    componentFilePathRelative,\n    componentFileChunkName\n  } = await resolvePageComponentInfo({\n    app,\n    htmlFilePathRelative,\n    key\n  });\n  const { dataFilePath, dataFilePathRelative, dataFileChunkName } = resolvePageDataInfo({ app, htmlFilePathRelative, key });\n  const page = {\n    data: {\n      key,\n      path: path9,\n      title,\n      lang,\n      frontmatter,\n      excerpt,\n      headers\n    },\n    key,\n    path: path9,\n    title,\n    lang,\n    frontmatter,\n    excerpt,\n    headers,\n    content,\n    contentRendered,\n    date,\n    deps,\n    links,\n    pathInferred,\n    pathLocale,\n    permalink,\n    routeMeta,\n    sfcBlocks,\n    slug,\n    filePath,\n    filePathRelative,\n    componentFilePath,\n    componentFilePathRelative,\n    componentFileChunkName,\n    dataFilePath,\n    dataFilePathRelative,\n    dataFileChunkName,\n    htmlFilePath,\n    htmlFilePathRelative\n  };\n  await app.pluginApi.hooks.extendsPage.process(page, app);\n  return page;\n};\n\n// src/app/resolveAppPages.ts\nvar log2 = debug2(\"vuepress:core/app\");\nvar resolveAppPages = async (app) => {\n  log2(\"resolveAppPages start\");\n  const pageFilePaths = await globby(app.options.pagePatterns, {\n    absolute: true,\n    cwd: app.dir.source()\n  });\n  const pages = await Promise.all(\n    pageFilePaths.map((filePath) => createPage(app, { filePath }))\n  );\n  if (!pages.some((page) => page.path === \"/404.html\")) {\n    pages.push(\n      await createPage(app, {\n        path: \"/404.html\",\n        frontmatter: {\n          layout: \"NotFound\"\n        }\n      })\n    );\n  }\n  log2(\"resolveAppPages finish\");\n  return pages;\n};\n\n// src/app/appInit.ts\nvar log3 = debug3(\"vuepress:core/app\");\nvar appInit = async (app) => {\n  log3(\"init start\");\n  app.pluginApi.registerHooks();\n  app.markdown = await resolveAppMarkdown(app);\n  app.pages = await resolveAppPages(app);\n  await app.pluginApi.hooks.onInitialized.process(app);\n  log3(\"init finish\");\n};\n\n// src/app/appPrepare.ts\nimport { debug as debug4 } from \"@vuepress/utils\";\nvar log4 = debug4(\"vuepress:core/app\");\nvar appPrepare = async (app) => {\n  log4(\"prepare start\");\n  for (const page of app.pages) {\n    await preparePageComponent(app, page);\n  }\n  await preparePagesComponents(app);\n  for (const page of app.pages) {\n    await preparePageData(app, page);\n  }\n  await preparePagesData(app);\n  await preparePagesRoutes(app);\n  await prepareSiteData(app);\n  await prepareClientConfigs(app);\n  await app.pluginApi.hooks.onPrepared.process(app);\n  log4(\"prepare finish\");\n};\n\n// src/app/appUse.ts\nimport { chalk, debug as debug5, warn } from \"@vuepress/utils\";\n\n// src/app/resolvePluginObject.ts\nimport { isFunction } from \"@vuepress/shared\";\nvar resolvePluginObject = (app, plugin) => isFunction(plugin) ? plugin(app) : plugin;\n\n// src/app/appUse.ts\nvar log5 = debug5(\"vuepress:core/app\");\nvar appUse = (app, rawPlugin) => {\n  const pluginObject = resolvePluginObject(app, rawPlugin);\n  if (!pluginObject.name) {\n    warn(`an anonymous plugin or theme was detected and ignored`);\n    return app;\n  }\n  log5(`use plugin ${chalk.magenta(pluginObject.name)}`);\n  if (pluginObject.multiple !== true) {\n    const duplicateIndex = app.pluginApi.plugins.findIndex(\n      ({ name }) => name === pluginObject.name\n    );\n    if (duplicateIndex !== -1) {\n      app.pluginApi.plugins.splice(duplicateIndex, 1);\n      warn(\n        `plugin ${chalk.magenta(\n          pluginObject.name\n        )} has been used multiple times, only the last one will take effect`\n      );\n    }\n  }\n  app.pluginApi.plugins.push(pluginObject);\n  return app;\n};\n\n// src/pluginApi/createHookQueue.ts\nimport { chalk as chalk2, debug as debug6, logger as logger3 } from \"@vuepress/utils\";\nvar log6 = debug6(\"vuepress:core/plugin-api\");\nvar createHookQueue = (name) => {\n  const items = [];\n  const hookQueue = {\n    name,\n    items,\n    add: (item) => {\n      items.push(item);\n    },\n    process: async (...args) => {\n      const results = [];\n      for (const item of items) {\n        log6(\n          `process ${chalk2.magenta(name)} from ${chalk2.magenta(\n            item.pluginName\n          )}`\n        );\n        try {\n          const result = await item.hook(...args);\n          if (result !== void 0) {\n            results.push(result);\n          }\n        } catch (e) {\n          logger3.error(\n            `error in hook ${chalk2.magenta(name)} from ${chalk2.magenta(\n              item.pluginName\n            )}`\n          );\n          throw e;\n        }\n      }\n      return results;\n    }\n  };\n  return hookQueue;\n};\n\n// src/pluginApi/createPluginApiHooks.ts\nvar createPluginApiHooks = () => ({\n  onInitialized: createHookQueue(\"onInitialized\"),\n  onPrepared: createHookQueue(\"onPrepared\"),\n  onWatched: createHookQueue(\"onWatched\"),\n  onGenerated: createHookQueue(\"onGenerated\"),\n  extendsMarkdownOptions: createHookQueue(\"extendsMarkdownOptions\"),\n  extendsMarkdown: createHookQueue(\"extendsMarkdown\"),\n  extendsPageOptions: createHookQueue(\"extendsPageOptions\"),\n  extendsPage: createHookQueue(\"extendsPage\"),\n  extendsBundlerOptions: createHookQueue(\"extendsBundlerOptions\"),\n  clientConfigFile: createHookQueue(\"clientConfigFile\"),\n  alias: createHookQueue(\"alias\"),\n  define: createHookQueue(\"define\")\n});\n\n// src/pluginApi/normalizeAliasDefineHook.ts\nimport { isFunction as isFunction2 } from \"@vuepress/shared\";\nvar normalizeAliasDefineHook = (hook) => async (app, isServer) => isFunction2(hook) ? hook(app, isServer) : hook;\n\n// src/pluginApi/normalizeClientConfigFileHook.ts\nimport { isFunction as isFunction3 } from \"@vuepress/shared\";\nimport { fs as fs2, logger as logger4 } from \"@vuepress/utils\";\nvar normalizeClientConfigFileHook = (hook) => async (app) => {\n  const clientConfigFileResult = isFunction3(hook) ? await hook(app) : hook;\n  const isExisted = await fs2.pathExists(clientConfigFileResult);\n  if (!isExisted) {\n    throw logger4.createError(\n      `client config file does not exist: ${clientConfigFileResult}`\n    );\n  }\n  return clientConfigFileResult;\n};\n\n// src/pluginApi/createPluginApiRegisterHooks.ts\nvar createPluginApiRegisterHooks = (plugins, hooks) => () => {\n  plugins.forEach(\n    ({\n      name: pluginName,\n      multiple,\n      alias,\n      define,\n      clientConfigFile,\n      ...commonHooks\n    }) => {\n      if (alias) {\n        hooks.alias.add({\n          pluginName,\n          hook: normalizeAliasDefineHook(alias)\n        });\n      }\n      if (define) {\n        hooks.define.add({\n          pluginName,\n          hook: normalizeAliasDefineHook(define)\n        });\n      }\n      if (clientConfigFile) {\n        hooks.clientConfigFile.add({\n          pluginName,\n          hook: normalizeClientConfigFileHook(clientConfigFile)\n        });\n      }\n      Object.keys(commonHooks).forEach((key) => {\n        if (hooks[key] && commonHooks[key]) {\n          hooks[key].add({\n            pluginName,\n            hook: commonHooks[key]\n          });\n        }\n      });\n    }\n  );\n};\n\n// src/pluginApi/createPluginApi.ts\nvar createPluginApi = () => {\n  const plugins = [];\n  const hooks = createPluginApiHooks();\n  const registerHooks = createPluginApiRegisterHooks(plugins, hooks);\n  return {\n    plugins,\n    hooks,\n    registerHooks\n  };\n};\n\n// src/app/resolveAppDir.ts\nimport { createRequire } from \"module\";\nimport { path as path7 } from \"@vuepress/utils\";\nvar require2 = createRequire(import.meta.url);\nvar createAppDirFunction = (baseDir) => {\n  return (...args) => path7.resolve(baseDir, ...args);\n};\nvar resolveAppDir = (options) => {\n  const cache = createAppDirFunction(options.cache);\n  const temp = createAppDirFunction(options.temp);\n  const source = createAppDirFunction(options.source);\n  const dest = createAppDirFunction(options.dest);\n  const publicDir = createAppDirFunction(options.public);\n  const client = createAppDirFunction(\n    path7.resolve(require2.resolve(\"@vuepress/client/package.json\"), \"..\")\n  );\n  return {\n    cache,\n    temp,\n    source,\n    dest,\n    client,\n    public: publicDir\n  };\n};\n\n// src/app/resolveAppEnv.ts\nvar resolveAppEnv = (options, isBuild) => ({\n  isBuild,\n  isDev: !isBuild,\n  isDebug: options.debug\n});\n\n// src/app/resolveAppOptions.ts\nimport { createRequire as createRequire2 } from \"module\";\nimport { path as path8 } from \"@vuepress/utils\";\nvar require3 = createRequire2(import.meta.url);\nvar resolveAppOptions = ({\n  base = \"/\",\n  lang = \"en-US\",\n  title = \"\",\n  description = \"\",\n  head = [],\n  locales = {},\n  source,\n  dest = path8.resolve(source, \".vuepress/dist\"),\n  temp = path8.resolve(source, \".vuepress/.temp\"),\n  cache = path8.resolve(source, \".vuepress/.cache\"),\n  public: publicDir = path8.resolve(source, \".vuepress/public\"),\n  host = \"0.0.0.0\",\n  port = 8080,\n  open = false,\n  templateDev = path8.normalize(\n    require3.resolve(\"@vuepress/client/templates/dev.html\")\n  ),\n  shouldPreload = true,\n  shouldPrefetch = true,\n  templateBuild = path8.normalize(\n    require3.resolve(\"@vuepress/client/templates/build.html\")\n  ),\n  bundler,\n  debug: debug7 = false,\n  markdown = {},\n  pagePatterns = [\"**/*.md\", \"!.vuepress\", \"!node_modules\"],\n  permalinkPattern = null,\n  plugins = [],\n  theme\n}) => ({\n  base,\n  lang,\n  title,\n  description,\n  head,\n  locales,\n  source,\n  dest,\n  temp,\n  cache,\n  public: publicDir,\n  host,\n  port,\n  open,\n  templateDev,\n  shouldPreload,\n  shouldPrefetch,\n  templateBuild,\n  bundler,\n  debug: debug7,\n  markdown,\n  pagePatterns,\n  permalinkPattern,\n  plugins,\n  theme\n});\n\n// src/app/resolveAppSiteData.ts\nvar resolveAppSiteData = (options) => ({\n  base: options.base,\n  lang: options.lang,\n  title: options.title,\n  description: options.description,\n  head: options.head,\n  locales: options.locales\n});\n\n// src/app/resolveAppVersion.ts\nimport { createRequire as createRequire3 } from \"module\";\nimport { fs as fs3 } from \"@vuepress/utils\";\nvar require4 = createRequire3(import.meta.url);\nvar resolveAppVersion = () => {\n  const pkgJson = fs3.readJsonSync(\n    require4.resolve(\"@vuepress/core/package.json\")\n  );\n  return pkgJson.version;\n};\n\n// src/app/resolveAppWriteTemp.ts\nimport { fs as fs4 } from \"@vuepress/utils\";\nvar resolveAppWriteTemp = (dir) => {\n  const tempCache = /* @__PURE__ */ new Map();\n  const writeTemp = async (file, content) => {\n    const filePath = dir.temp(file);\n    const contentCached = tempCache.get(filePath);\n    if (contentCached !== content) {\n      await fs4.outputFile(filePath, content);\n      tempCache.set(filePath, content);\n    }\n    return filePath;\n  };\n  return writeTemp;\n};\n\n// src/app/resolveThemeInfo.ts\nvar resolveThemeInfo = (app, theme) => {\n  const themeObject = resolvePluginObject(app, theme);\n  const themeInfo = {\n    plugins: [...themeObject.plugins ?? [], themeObject],\n    templateBuild: themeObject.templateBuild,\n    templateDev: themeObject.templateDev\n  };\n  if (!themeObject.extends) {\n    return themeInfo;\n  }\n  const parentThemeInfo = resolveThemeInfo(app, themeObject.extends);\n  return {\n    plugins: [...parentThemeInfo.plugins, ...themeInfo.plugins],\n    templateBuild: themeObject.templateBuild ?? parentThemeInfo.templateBuild,\n    templateDev: themeObject.templateDev ?? parentThemeInfo.templateDev\n  };\n};\n\n// src/app/setupAppThemeAndPlugins.ts\nvar setupAppThemeAndPlugins = (app, config) => {\n  const themeInfo = resolveThemeInfo(app, app.options.theme);\n  app.options.templateDev = config.templateDev ?? themeInfo.templateDev ?? app.options.templateDev;\n  app.options.templateBuild = config.templateBuild ?? themeInfo.templateBuild ?? app.options.templateBuild;\n  [...themeInfo.plugins, ...app.options.plugins].flat().forEach((plugin) => app.use(plugin));\n};\n\n// src/app/createBaseApp.ts\nvar createBaseApp = (config, isBuild = false) => {\n  const options = resolveAppOptions(config);\n  const dir = resolveAppDir(options);\n  const env = resolveAppEnv(options, isBuild);\n  const pluginApi = createPluginApi();\n  const siteData = resolveAppSiteData(options);\n  const version = resolveAppVersion();\n  const writeTemp = resolveAppWriteTemp(dir);\n  const app = {\n    options,\n    siteData,\n    version,\n    dir,\n    env,\n    pluginApi,\n    writeTemp,\n    use: (plugin) => appUse(app, plugin),\n    init: () => appInit(app),\n    prepare: () => appPrepare(app)\n  };\n  setupAppThemeAndPlugins(app, config);\n  return app;\n};\n\n// src/app/createBuildApp.ts\nvar createBuildApp = (config) => {\n  const app = createBaseApp(config, true);\n  app.build = () => app.options.bundler.build(app);\n  return app;\n};\n\n// src/app/createDevApp.ts\nvar createDevApp = (config) => {\n  const app = createBaseApp(config, false);\n  app.dev = () => app.options.bundler.dev(app);\n  return app;\n};\nexport {\n  appInit,\n  appPrepare,\n  appUse,\n  createAppDirFunction,\n  createBaseApp,\n  createBuildApp,\n  createDevApp,\n  createHookQueue,\n  createPage,\n  createPluginApi,\n  createPluginApiHooks,\n  createPluginApiRegisterHooks,\n  inferPagePath,\n  normalizeAliasDefineHook,\n  normalizeClientConfigFileHook,\n  prepareClientConfigs,\n  preparePageComponent,\n  preparePageData,\n  preparePagesComponents,\n  preparePagesData,\n  preparePagesRoutes,\n  prepareSiteData,\n  renderPageContent,\n  resolveAppDir,\n  resolveAppEnv,\n  resolveAppOptions,\n  resolveAppPages,\n  resolveAppSiteData,\n  resolveAppVersion,\n  resolveAppWriteTemp,\n  resolvePageComponentInfo,\n  resolvePageDataInfo,\n  resolvePageDate,\n  resolvePageFileContent,\n  resolvePageFilePath,\n  resolvePageHtmlInfo,\n  resolvePageKey,\n  resolvePageLang,\n  resolvePagePath,\n  resolvePagePermalink,\n  resolvePageRouteMeta,\n  resolvePageSlug,\n  resolvePluginObject,\n  resolveThemeInfo\n};\n/dist/index.d.tsSimport { MarkdownLink, MarkdownSfcBlocks, MarkdownOptions, Markdown, MarkdownHeader } from '@vuepress/markdown';\nimport { PageBase, PageData, PageFrontmatter, SiteData } from '@vuepress/shared';\nexport { HeadAttrsConfig, HeadConfig, HeadTag, HeadTagEmpty, HeadTagNonEmpty, LocaleConfig, LocaleData, PageData, PageFrontmatter, PageHeader, SiteData, SiteLocaleConfig } from '@vuepress/shared';\n\n/**\n * Vuepress bundler\n *\n * It provides abilities to:\n * - dev: run dev server for development\n * - build: bundle assets for deployment\n */\ninterface Bundler {\n    name: string;\n    dev: (app: App) => Promise<() => Promise<void>>;\n    build: (app: App) => Promise<void>;\n}\n\n/**\n * Vuepress Page\n */\ndeclare type Page<ExtraPageData extends Record<any, any> = Record<never, never>, ExtraPageFrontmatter extends Record<any, any> = Record<string, unknown>, ExtraPageFields extends Record<any, any> = Record<never, never>> = PageBase<ExtraPageFrontmatter> & ExtraPageFields & {\n    /**\n     * Data of the page, which will be available in client code\n     */\n    data: PageData<ExtraPageData, ExtraPageFrontmatter>;\n    /**\n     * Raw Content of the page\n     */\n    content: string;\n    /**\n     * Rendered content of the page\n     */\n    contentRendered: string;\n    /**\n     * Date of the page, in 'yyyy-MM-dd' format\n     *\n     * @example '2020-09-09'\n     */\n    date: string;\n    /**\n     * Dependencies of the page\n     */\n    deps: string[];\n    /**\n     * Links of the page\n     */\n    links: MarkdownLink[];\n    /**\n     * Path of the page that inferred from file path\n     *\n     * If the page does not come from a file, it would be `null`\n     *\n     * @example '/guide/index.html'\n     */\n    pathInferred: string | null;\n    /**\n     * Locale path prefix of the page\n     *\n     * @example '/getting-started.html' -> '/'\n     * @example '/en/getting-started.html' -> '/en/'\n     * @example '/zh/getting-started.html' -> '/zh/'\n     */\n    pathLocale: string;\n    /**\n     * Permalink of the page\n     *\n     * If the page does not have a permalink, it would be `null`\n     */\n    permalink: string | null;\n    /**\n     * Custom data to be attached to the page route record of vue-router\n     *\n     * @see https://router.vuejs.org/api/#meta\n     */\n    routeMeta: Record<string, unknown>;\n    /**\n     * Extracted sfc blocks of the page\n     */\n    sfcBlocks: MarkdownSfcBlocks;\n    /**\n     * Slug of the page\n     */\n    slug: string;\n    /**\n     * Source file path\n     *\n     * If the page does not come from a file, it would be `null`\n     */\n    filePath: string | null;\n    /**\n     * Source file path relative to source directory\n     *\n     * If the page does not come from a file, it would be `null`\n     */\n    filePathRelative: string | null;\n    /**\n     * Component file path\n     */\n    componentFilePath: string;\n    /**\n     * Component file path relative to temp directory\n     */\n    componentFilePathRelative: string;\n    /**\n     * Component file chunk name\n     *\n     * Only take effect in webpack\n     */\n    componentFileChunkName: string;\n    /**\n     * Page data file path\n     */\n    dataFilePath: string;\n    /**\n     * Page data file path relative to temp directory\n     */\n    dataFilePathRelative: string;\n    /**\n     * Page data file chunk name\n     *\n     * Only take effect in webpack\n     */\n    dataFileChunkName: string;\n    /**\n     * Rendered html file path\n     */\n    htmlFilePath: string;\n    /**\n     * Rendered html file path relative to dest directory\n     */\n    htmlFilePathRelative: string;\n};\n/**\n * Options to create vuepress page\n */\ninterface PageOptions {\n    /**\n     * If `filePath` is not set, this option will be used as the raw\n     * markdown content of the page.\n     *\n     * If `filePath` is set, this option will be ignored, while the\n     * content of the file will be used.\n     */\n    content?: string;\n    /**\n     * Absolute file path of the markdown source file.\n     */\n    filePath?: string;\n    /**\n     * Default frontmatter of the page, which could be overridden by\n     * the frontmatter of the markdown content.\n     */\n    frontmatter?: PageFrontmatter;\n    /**\n     * If this option is set, it will be used as the final route path\n     * of the page, ignoring the relative path and permalink.\n     */\n    path?: string;\n}\n\ndeclare type PromiseOrNot<T> = Promise<T> | T;\ndeclare type Closable = {\n    close(): void;\n};\ndeclare type Hook<Exposed, Normalized = Exposed, Result = Normalized extends (...args: any) => infer U ? U extends Promise<infer V> ? V : U : void> = {\n    exposed: Exposed;\n    normalized: Normalized;\n    result: Result;\n};\ndeclare type LifeCycleHook<T extends unknown[] = []> = Hook<(app: App, ...args: T) => PromiseOrNot<void>>;\ndeclare type ExtendsHook<T> = Hook<(extendable: T, app: App) => PromiseOrNot<void>>;\ndeclare type ClientConfigFileHook = Hook<string | ((app: App) => PromiseOrNot<string>), (app: App) => Promise<string>>;\ndeclare type AliasDefineHook = Hook<Record<string, any> | ((app: App, isServer: boolean) => PromiseOrNot<Record<string, any>>), (app: App, isServer: boolean) => Promise<Record<string, any>>>;\n/**\n * List of hooks\n */\ninterface Hooks {\n    onInitialized: LifeCycleHook;\n    onPrepared: LifeCycleHook;\n    onWatched: LifeCycleHook<[watchers: Closable[], restart: () => Promise<void>]>;\n    onGenerated: LifeCycleHook;\n    extendsMarkdownOptions: ExtendsHook<MarkdownOptions>;\n    extendsMarkdown: ExtendsHook<Markdown>;\n    extendsPageOptions: ExtendsHook<PageOptions>;\n    extendsPage: ExtendsHook<Page>;\n    extendsBundlerOptions: ExtendsHook<any>;\n    clientConfigFile: ClientConfigFileHook;\n    alias: AliasDefineHook;\n    define: AliasDefineHook;\n}\n/**\n * Name of hooks\n */\ndeclare type HooksName = keyof Hooks;\n/**\n * Exposed hooks API that can be accessed by a plugin\n */\ndeclare type HooksExposed = {\n    [K in HooksName]: Hooks[K]['exposed'];\n};\n/**\n * Normalized hooks\n */\ndeclare type HooksNormalized = {\n    [K in HooksName]: Hooks[K]['normalized'];\n};\n/**\n * Result of hooks\n */\ndeclare type HooksResult = {\n    [K in HooksName]: Hooks[K]['result'];\n};\n/**\n * Hook item\n */\ninterface HookItem<T extends HooksName> {\n    pluginName: string;\n    hook: HooksNormalized[T];\n}\n/**\n * Hook items queue\n */\ninterface HookQueue<T extends HooksName> {\n    name: T;\n    items: HookItem<T>[];\n    add: (item: HookItem<T>) => void;\n    process: (...args: Parameters<HooksNormalized[T]>) => Promise<HooksResult[T][]>;\n}\n\n/**\n * Vuepress plugin system\n */\ninterface PluginApi {\n    /**\n     * Plugins that have been used\n     */\n    plugins: PluginObject[];\n    /**\n     * All available hooks\n     */\n    hooks: {\n        [K in HooksName]: HookQueue<K>;\n    };\n    /**\n     * Register hooks of plugins\n     *\n     * Should be invoked before applying a hook\n     */\n    registerHooks: () => void;\n}\n\n/**\n * Vuepress plugin\n *\n * A plugin should be rather:\n * - an object (`PluginObject`)\n * - a function that returns an object (`PluginFunction`)\n *\n * A plugin package should have a `Plugin` as the default export\n */\ndeclare type Plugin<T extends PluginObject = PluginObject> = T | PluginFunction<T>;\n/**\n * Vuepress plugin function\n *\n * It accepts plugin options and vuepress app, returns plugin object\n */\ndeclare type PluginFunction<T extends PluginObject = PluginObject> = (app: App) => T;\n/**\n * Vuepress plugin object\n */\ninterface PluginObject extends Partial<HooksExposed> {\n    name: string;\n    multiple?: boolean;\n}\n/**\n * Config field for plugins\n */\ndeclare type PluginConfig = (Plugin | Plugin[])[];\n\n/**\n * Vuepress theme\n *\n * Theme is a special type of plugin, it should be rather:\n * - an object (`ThemeObject`)\n * - a function that returns an object (`ThemeFunction`)\n *\n * A theme package should have a `Theme` as the default export\n */\ndeclare type Theme = Plugin<ThemeObject>;\n/**\n * Vuepress theme function\n */\ndeclare type ThemeFunction = PluginFunction<ThemeObject>;\n/**\n * Vuepress theme object\n */\ninterface ThemeObject extends Omit<PluginObject, 'multiple'> {\n    /**\n     * Extended parent theme\n     */\n    extends?: Theme;\n    /**\n     * Allow using plugins in theme\n     */\n    plugins?: PluginConfig;\n    /**\n     * Allow overriding default templateBuild\n     */\n    templateBuild?: string;\n    /**\n     * Allow overriding default templateDev\n     */\n    templateDev?: string;\n}\n/**\n * Resolved theme info\n */\ninterface ThemeInfo {\n    /**\n     * Plugins, including theme itself and plugins used by theme\n     */\n    plugins: PluginConfig;\n    /**\n     * Default build template\n     */\n    templateBuild?: string;\n    /**\n     * Default dev template\n     */\n    templateDev?: string;\n}\n\n/**\n * Vuepress app common config that shared between dev and build\n */\ninterface AppConfigCommon extends Partial<SiteData> {\n    source: string;\n    dest?: string;\n    temp?: string;\n    cache?: string;\n    public?: string;\n    debug?: boolean;\n    markdown?: MarkdownOptions;\n    pagePatterns?: string[];\n    permalinkPattern?: string | null;\n    bundler: Bundler;\n    theme: Theme;\n    plugins?: PluginConfig;\n}\n/**\n * Vuepress app config for dev\n */\ninterface AppConfigDev {\n    /**\n     * Specify the host to use for the dev server\n     *\n     * @default '0.0.0.0'\n     */\n    host?: string;\n    /**\n     * Specify the port to use for the dev server\n     *\n     * @default 8080\n     */\n    port?: number;\n    /**\n     * Whether to open the browser after dev-server had been started\n     *\n     * @default false\n     */\n    open?: boolean;\n    /**\n     * Specify the path of the HTML template to be used for dev\n     *\n     * @default '@vuepress/client/templates/dev.html'\n     */\n    templateDev?: string;\n}\n/**\n * Vuepress app config for build\n */\ninterface AppConfigBuild {\n    /**\n     * Determine what resource files should be preloaded. Use boolean value to\n     * totally enable / disable.\n     *\n     * @default true\n     */\n    shouldPreload?: ((file: string, type: string) => boolean) | boolean;\n    /**\n     * Determine what resource files should be prefetched. Use boolean value to\n     * totally enable / disable.\n     *\n     * @default false\n     */\n    shouldPrefetch?: ((file: string, type: string) => boolean) | boolean;\n    /**\n     * Specify the path of the HTML template to be used for build\n     *\n     * @default '@vuepress/client/templates/build.html'\n     */\n    templateBuild?: string;\n}\n/**\n * Vuepress app config\n */\ndeclare type AppConfig = AppConfigCommon & AppConfigDev & AppConfigBuild;\n/**\n * Vuepress app options\n */\ndeclare type AppOptions = Required<AppConfig>;\n\n/**\n * Directory util function\n */\ndeclare type AppDirFunction = (...args: string[]) => string;\n/**\n * Directory utils\n */\ninterface AppDir {\n    cache: AppDirFunction;\n    temp: AppDirFunction;\n    source: AppDirFunction;\n    dest: AppDirFunction;\n    public: AppDirFunction;\n    client: AppDirFunction;\n}\n/**\n * Environment flags\n */\ninterface AppEnv {\n    /**\n     * Is running in build mode or not\n     */\n    isBuild: boolean;\n    /**\n     * Is running in dev mode or not\n     */\n    isDev: boolean;\n    /**\n     * Is debug mode enabled or not\n     */\n    isDebug: boolean;\n}\n/**\n * Write temp file util\n */\ndeclare type AppWriteTemp = (file: string, content: string) => Promise<string>;\n\n/**\n * Vuepress app\n */\ninterface App {\n    /**\n     * Directory utils\n     */\n    dir: AppDir;\n    /**\n     * Environment flags\n     */\n    env: AppEnv;\n    /**\n     * Options that filled all optional fields with a default value\n     */\n    options: AppOptions;\n    /**\n     * Plugin system\n     */\n    pluginApi: PluginApi;\n    /**\n     * Site data, which will be used in client side\n     */\n    siteData: SiteData;\n    /**\n     * Version of vuepress core\n     */\n    version: string;\n    /**\n     * Write temp file\n     */\n    writeTemp: AppWriteTemp;\n    /**\n     * Use a plugin\n     */\n    use: (plugin: Plugin) => this;\n    /**\n     * Initialize app.\n     *\n     * - Theme and plugin will be loaded.\n     * - Layouts and pages will be resolved.\n     */\n    init: () => Promise<void>;\n    /**\n     * Prepare data for client and write temp files.\n     *\n     * Should be called after `app.init()`.\n     */\n    prepare: () => Promise<void>;\n    /**\n     * Markdown-it instance.\n     *\n     * Only available after initialization\n     */\n    markdown: Markdown;\n    /**\n     * Page objects.\n     *\n     * Only available after initialization\n     */\n    pages: Page[];\n}\n/**\n * Vuepress dev app\n */\ninterface DevApp extends App {\n    /**\n     * Start dev server\n     *\n     * Should be called after `app.prepare()`.\n     */\n    dev: () => ReturnType<Bundler['dev']>;\n}\n/**\n * Vuepress build app\n */\ninterface BuildApp extends App {\n    /**\n     * Build static files\n     *\n     * Should be called after `app.prepare()`.\n     */\n    build: () => ReturnType<Bundler['build']>;\n}\n\n/**\n * Generate client configs temp file\n */\ndeclare const prepareClientConfigs: (app: App) => Promise<void>;\n\n/**\n * Generate page component temp file of a single page\n */\ndeclare const preparePageComponent: (app: App, page: Page) => Promise<void>;\n\n/**\n * Generate page data temp file of a single page\n */\ndeclare const preparePageData: (app: App, page: Page) => Promise<void>;\n\n/**\n * Generate page key to page component map temp file\n */\ndeclare const preparePagesComponents: (app: App) => Promise<void>;\n\n/**\n * Generate page path to page data map temp file\n */\ndeclare const preparePagesData: (app: App) => Promise<void>;\n\n/**\n * Generate routes temp file\n */\ndeclare const preparePagesRoutes: (app: App) => Promise<void>;\n\n/**\n * Generate site data temp file\n */\ndeclare const prepareSiteData: (app: App) => Promise<void>;\n\n/**\n * Initialize a vuepress app\n *\n * Plugins should be used before initialization.\n */\ndeclare const appInit: (app: App) => Promise<void>;\n\n/**\n * Prepare files for development or build\n *\n * - page components\n * - routes\n * - site data\n * - other files that generated by plugins\n */\ndeclare const appPrepare: (app: App) => Promise<void>;\n\ndeclare const appUse: (app: App, rawPlugin: Plugin) => App;\n\n/**\n * Create vuepress app\n */\ndeclare const createBaseApp: (config: AppConfig, isBuild?: boolean) => App;\n\n/**\n * Create vuepress build app\n */\ndeclare const createBuildApp: (config: AppConfig) => BuildApp;\n\n/**\n * Create vuepress dev app\n */\ndeclare const createDevApp: (config: AppConfig) => DevApp;\n\n/**\n * Create directory util function\n */\ndeclare const createAppDirFunction: (baseDir: string) => AppDirFunction;\n/**\n * Resolve directory utils for vuepress app\n */\ndeclare const resolveAppDir: (options: AppOptions) => AppDir;\n\n/**\n * Resolve environment flags for vuepress app\n */\ndeclare const resolveAppEnv: (options: AppOptions, isBuild: boolean) => AppEnv;\n\n/**\n * Create app options with default values\n */\ndeclare const resolveAppOptions: ({ base, lang, title, description, head, locales, source, dest, temp, cache, public: publicDir, host, port, open, templateDev, shouldPreload, shouldPrefetch, templateBuild, bundler, debug, markdown, pagePatterns, permalinkPattern, plugins, theme, }: AppConfig) => AppOptions;\n\n/**\n * Resolve pages for vuepress app\n */\ndeclare const resolveAppPages: (app: App) => Promise<Page[]>;\n\n/**\n * Resolve site data for vuepress app\n *\n * Site data will also be used in client\n */\ndeclare const resolveAppSiteData: (options: AppOptions) => SiteData;\n\n/**\n * Resolve version of vuepress app\n */\ndeclare const resolveAppVersion: () => string;\n\n/**\n * Resolve write temp file util for vuepress app\n */\ndeclare const resolveAppWriteTemp: (dir: AppDir) => AppWriteTemp;\n\n/**\n * Resolve a plugin object according to name / path / module and config\n */\ndeclare const resolvePluginObject: <T extends PluginObject = PluginObject>(app: App, plugin: Plugin<T>) => T;\n\n/**\n * Resolve theme info and its parent theme info\n */\ndeclare const resolveThemeInfo: (app: App, theme: Theme) => ThemeInfo;\n\ndeclare const createPage: (app: App, options: PageOptions) => Promise<Page>;\n\n/**\n * Infer page path according to file path\n */\ndeclare const inferPagePath: ({ app, filePathRelative, }: {\n    app: App;\n    filePathRelative: string | null;\n}) => {\n    pathInferred: string | null;\n    pathLocale: string;\n};\n\n/**\n * Render page content and extract related info\n */\ndeclare const renderPageContent: ({ app, content, filePath, filePathRelative, options, }: {\n    app: App;\n    content: string;\n    filePath: string | null;\n    filePathRelative: string | null;\n    options: PageOptions;\n}) => Promise<{\n    contentRendered: string;\n    deps: string[];\n    excerpt: string;\n    frontmatter: PageFrontmatter;\n    headers: MarkdownHeader[];\n    links: MarkdownLink[];\n    sfcBlocks: MarkdownSfcBlocks;\n    title: string;\n}>;\n\n/**\n * Resolve page component and related info\n */\ndeclare const resolvePageComponentInfo: ({ app, htmlFilePathRelative, key, }: {\n    app: App;\n    htmlFilePathRelative: string;\n    key: string;\n}) => Promise<{\n    componentFilePath: string;\n    componentFilePathRelative: string;\n    componentFileChunkName: string;\n}>;\n\n/**\n * Resolve page data file path\n */\ndeclare const resolvePageDataInfo: ({ app, htmlFilePathRelative, key, }: {\n    app: App;\n    htmlFilePathRelative: string;\n    key: string;\n}) => {\n    dataFilePath: string;\n    dataFilePathRelative: string;\n    dataFileChunkName: string;\n};\n\n/**\n * Resolve page date according to frontmatter or file path\n *\n * It will be resolved as 'yyyy-MM-dd' format\n */\ndeclare const resolvePageDate: ({ frontmatter, filePathRelative, }: {\n    frontmatter: PageFrontmatter;\n    filePathRelative: string | null;\n}) => string;\n\n/**\n * Resolve page file content according to filePath or options content\n */\ndeclare const resolvePageFileContent: ({ filePath, options, }: {\n    filePath: string | null;\n    options: PageOptions;\n}) => Promise<string>;\n\n/**\n * Resolve absolute and relative path of page file\n */\ndeclare const resolvePageFilePath: ({ app, options, }: {\n    app: App;\n    options: PageOptions;\n}) => {\n    filePath: string | null;\n    filePathRelative: string | null;\n};\n\n/**\n * Resolve page rendered html file path\n */\ndeclare const resolvePageHtmlInfo: ({ app, path: pagePath, }: {\n    app: App;\n    path: string;\n}) => {\n    htmlFilePath: string;\n    htmlFilePathRelative: string;\n};\n\n/**\n * Resolve page key to identify the page\n */\ndeclare const resolvePageKey: ({ path }: {\n    path: string;\n}) => string;\n\n/**\n * Resolve language of page\n */\ndeclare const resolvePageLang: ({ app, frontmatter, pathLocale, }: {\n    app: App;\n    frontmatter: PageFrontmatter;\n    pathLocale: string;\n}) => string;\n\n/**\n * Resolve the final route path of a page\n */\ndeclare const resolvePagePath: ({ permalink, pathInferred, options, }: {\n    permalink: string | null;\n    pathInferred: string | null;\n    options: PageOptions;\n}) => string;\n\n/**\n * Resolve page permalink from frontmatter / options / pattern\n */\ndeclare const resolvePagePermalink: ({ app, frontmatter, slug, date, pathInferred, pathLocale, }: {\n    app: App;\n    frontmatter: PageFrontmatter;\n    slug: string;\n    date: string;\n    pathInferred: string | null;\n    pathLocale: string;\n}) => string | null;\n\n/**\n * Resolve page route meta\n */\ndeclare const resolvePageRouteMeta: ({ frontmatter, }: {\n    frontmatter: PageFrontmatter;\n}) => Record<string, unknown>;\n\n/**\n * Resolve page slug from filename\n */\ndeclare const resolvePageSlug: ({ filePathRelative, }: {\n    filePathRelative: string | null;\n}) => string;\n\n/**\n * Create hook queue for plugin system\n */\ndeclare const createHookQueue: <T extends keyof Hooks>(name: T) => HookQueue<T>;\n\ndeclare const createPluginApi: () => PluginApi;\n\ndeclare const createPluginApiHooks: () => PluginApi['hooks'];\n\ndeclare const createPluginApiRegisterHooks: (plugins: PluginApi['plugins'], hooks: PluginApi['hooks']) => PluginApi['registerHooks'];\n\n/**\n * Normalize alias and define hook\n */\ndeclare const normalizeAliasDefineHook: (hook: AliasDefineHook['exposed']) => AliasDefineHook['normalized'];\n\n/**\n * Normalize hook for client config file\n */\ndeclare const normalizeClientConfigFileHook: (hook: ClientConfigFileHook['exposed']) => ClientConfigFileHook['normalized'];\n\nexport { AliasDefineHook, App, AppConfig, AppConfigBuild, AppConfigCommon, AppConfigDev, AppDir, AppDirFunction, AppEnv, AppOptions, AppWriteTemp, BuildApp, Bundler, ClientConfigFileHook, DevApp, ExtendsHook, Hook, HookItem, HookQueue, Hooks, HooksExposed, HooksName, HooksNormalized, HooksResult, LifeCycleHook, Page, PageOptions, Plugin, PluginApi, PluginConfig, PluginFunction, PluginObject, Theme, ThemeFunction, ThemeInfo, ThemeObject, appInit, appPrepare, appUse, createAppDirFunction, createBaseApp, createBuildApp, createDevApp, createHookQueue, createPage, createPluginApi, createPluginApiHooks, createPluginApiRegisterHooks, inferPagePath, normalizeAliasDefineHook, normalizeClientConfigFileHook, prepareClientConfigs, preparePageComponent, preparePageData, preparePagesComponents, preparePagesData, preparePagesRoutes, prepareSiteData, renderPageContent, resolveAppDir, resolveAppEnv, resolveAppOptions, resolveAppPages, resolveAppSiteData, resolveAppVersion, resolveAppWriteTemp, resolvePageComponentInfo, resolvePageDataInfo, resolvePageDate, resolvePageFileContent, resolvePageFilePath, resolvePageHtmlInfo, resolvePageKey, resolvePageLang, resolvePagePath, resolvePagePermalink, resolvePageRouteMeta, resolvePageSlug, resolvePluginObject, resolveThemeInfo };\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QHZ1ZXByZXNzL3BsdWdpbi1hY3RpdmUtaGVhZGVyLWxpbmtzQDIuMC4wLWJldGEuNTM=",
    "content": "/lib/node/index.d.tsĞimport { activeHeaderLinksPlugin } from './activeHeaderLinksPlugin.js';\nexport * from './activeHeaderLinksPlugin.js';\nexport default activeHeaderLinksPlugin;\n /lib/client/composables/index.js+export * from './useActiveHeaderLinks.js';\n\"/lib/client/composables/index.d.ts+export * from './useActiveHeaderLinks.js';\n/package.json\u0004r{\n  \"name\": \"@vuepress/plugin-active-header-links\",\n  \"version\": \"2.0.0-beta.53\",\n  \"description\": \"VuePress plugin - active header links\",\n  \"keywords\": [\n    \"vuepress-plugin\",\n    \"vuepress\",\n    \"plugin\",\n    \"active\",\n    \"links\"\n  ],\n  \"homepage\": \"https://github.com/vuepress\",\n  \"bugs\": {\n    \"url\": \"https://github.com/vuepress/vuepress-next/issues\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/vuepress/vuepress-next.git\"\n  },\n  \"license\": \"MIT\",\n  \"author\": \"meteorlxy\",\n  \"type\": \"module\",\n  \"exports\": {\n    \".\": \"./lib/node/index.js\",\n    \"./client\": \"./lib/client/index.js\",\n    \"./package.json\": \"./package.json\"\n  },\n  \"main\": \"./lib/node/index.js\",\n  \"types\": \"./lib/node/index.d.ts\",\n  \"files\": [\n    \"lib\"\n  ],\n  \"dependencies\": {\n    \"@vuepress/client\": \"2.0.0-beta.53\",\n    \"@vuepress/core\": \"2.0.0-beta.53\",\n    \"@vuepress/utils\": \"2.0.0-beta.53\",\n    \"ts-debounce\": \"^4.0.0\",\n    \"vue\": \"^3.2.41\",\n    \"vue-router\": \"^4.1.6\"\n  },\n  \"publishConfig\": {\n    \"access\": \"public\"\n  },\n  \"scripts\": {\n    \"build\": \"tsc -b tsconfig.build.json\",\n    \"clean\": \"rimraf lib *.tsbuildinfo\"\n  }\n}1/lib/client/composables/useActiveHeaderLinks.d.ts\u0001+export interface UseActiveHeaderLinksOptions {\n    headerLinkSelector: string;\n    headerAnchorSelector: string;\n    delay: number;\n    offset?: number;\n}\nexport declare const useActiveHeaderLinks: ({ headerLinkSelector, headerAnchorSelector, delay, offset, }: UseActiveHeaderLinksOptions) => void;\n&/lib/node/activeHeaderLinksPlugin.d.ts\u0003import type { Plugin } from '@vuepress/core';\n/**\n * Options for @vuepress/plugin-active-header-links\n */\nexport interface ActiveHeaderLinksPluginOptions {\n    /**\n     * Selector of header link\n     *\n     * If a header anchor does not have a corresponding header link,\n     * this plugin won't change the route hash to that anchor when\n     * scrolling to it.\n     *\n     * @default 'a.sidebar-item'\n     */\n    headerLinkSelector?: string;\n    /**\n     * Selector of header anchor\n     *\n     * @default '.header-anchor'\n     */\n    headerAnchorSelector?: string;\n    /**\n     * The delay of the debounced scroll event listener (in millisecond)\n     *\n     * @default 200\n     */\n    delay?: number;\n    /**\n     * Pixel offset when a header anchor to be determined as active\n     *\n     * @default 5\n     */\n    offset?: number;\n}\nexport declare const activeHeaderLinksPlugin: ({ headerLinkSelector, headerAnchorSelector, delay, offset, }?: ActiveHeaderLinksPluginOptions) => Plugin;\n/lib/client/config.js\u0002+import { defineClientConfig } from '@vuepress/client';\nimport { useActiveHeaderLinks } from './composables/index.js';\nconst headerLinkSelector = __AHL_HEADER_LINK_SELECTOR__;\nconst headerAnchorSelector = __AHL_HEADER_ANCHOR_SELECTOR__;\nconst delay = __AHL_DELAY__;\nconst offset = __AHL_OFFSET__;\nexport default defineClientConfig({\n    setup() {\n        if (__VUEPRESS_SSR__)\n            return;\n        useActiveHeaderLinks({\n            headerLinkSelector,\n            headerAnchorSelector,\n            delay,\n            offset,\n        });\n    },\n});\n/LICENSE\u0004CThe MIT License (MIT)\n\nCopyright (c) 2018-present, Yuxi (Evan) You\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n/lib/client/index.js(export * from './composables/index.js';\n//lib/client/composables/useActiveHeaderLinks.js\u0010Dimport { debounce } from 'ts-debounce';\nimport { onBeforeUnmount, onMounted } from 'vue';\nimport { useRouter } from 'vue-router';\nexport const useActiveHeaderLinks = ({ headerLinkSelector, headerAnchorSelector, delay, offset = 5, }) => {\n    const router = useRouter();\n    const setActiveRouteHash = () => {\n        // get current scrollTop\n        const scrollTop = Math.max(window.scrollY, document.documentElement.scrollTop, document.body.scrollTop);\n        // check if we are at page top\n        const isAtPageTop = Math.abs(scrollTop - 0) < offset;\n        // replace current route hash with empty string when scrolling back to the top\n        if (isAtPageTop) {\n            updateHash(router, '');\n            return;\n        }\n        // get current scrollBottom\n        const scrollBottom = window.innerHeight + scrollTop;\n        // get the total scroll length of current page\n        const scrollHeight = Math.max(document.documentElement.scrollHeight, document.body.scrollHeight);\n        // check if we have reached page bottom\n        // notice the `scrollBottom` might not be exactly equal to `scrollHeight`, so we add offset here\n        const isAtPageBottom = Math.abs(scrollHeight - scrollBottom) < offset;\n        // get all header links\n        const headerLinks = Array.from(document.querySelectorAll(headerLinkSelector));\n        // get all header anchors\n        const headerAnchors = Array.from(document.querySelectorAll(headerAnchorSelector));\n        // filter anchors that do not have corresponding links\n        const existedHeaderAnchors = headerAnchors.filter((anchor) => headerLinks.some((link) => link.hash === anchor.hash));\n        for (let i = 0; i < existedHeaderAnchors.length; i++) {\n            const anchor = existedHeaderAnchors[i];\n            const nextAnchor = existedHeaderAnchors[i + 1];\n            // notice the `scrollTop` might not be exactly equal to `offsetTop` after clicking the anchor\n            // so we add offset\n            // if has scrolled past this anchor\n            const hasPassedCurrentAnchor = scrollTop >= (anchor.parentElement?.offsetTop ?? 0) - offset;\n            // if has not scrolled past next anchor\n            const hasNotPassedNextAnchor = !nextAnchor ||\n                scrollTop < (nextAnchor.parentElement?.offsetTop ?? 0) - offset;\n            // if this anchor is the active anchor\n            const isActive = hasPassedCurrentAnchor && hasNotPassedNextAnchor;\n            // continue to find the active anchor\n            if (!isActive)\n                continue;\n            const routeHash = decodeURIComponent(router.currentRoute.value.hash);\n            const anchorHash = decodeURIComponent(anchor.hash);\n            // if the active anchor hash is current route hash, do nothing\n            if (routeHash === anchorHash)\n                return;\n            // check if anchor is at the bottom of the page to keep hash consistent\n            if (isAtPageBottom) {\n                for (let j = i + 1; j < existedHeaderAnchors.length; j++) {\n                    // if current route hash is below the active hash, do nothing\n                    if (routeHash === decodeURIComponent(existedHeaderAnchors[j].hash)) {\n                        return;\n                    }\n                }\n            }\n            // replace current route hash with the active anchor hash\n            updateHash(router, anchorHash);\n            return;\n        }\n    };\n    const onScroll = debounce(setActiveRouteHash, delay);\n    onMounted(() => {\n        window.addEventListener('scroll', onScroll);\n    });\n    onBeforeUnmount(() => {\n        window.removeEventListener('scroll', onScroll);\n    });\n};\n/**\n * Update current hash and do not trigger `scrollBehavior`\n */\nconst updateHash = async (router, hash) => {\n    // temporarily disable `scrollBehavior`\n    // restore it after navigation\n    const { scrollBehavior } = router.options;\n    router.options.scrollBehavior = undefined;\n    await router\n        .replace({\n        query: router.currentRoute.value.query,\n        hash,\n        force: true,\n    })\n        .finally(() => (router.options.scrollBehavior = scrollBehavior));\n};\n/lib/client/index.d.ts(export * from './composables/index.js';\n/lib/node/index.jsĞimport { activeHeaderLinksPlugin } from './activeHeaderLinksPlugin.js';\nexport * from './activeHeaderLinksPlugin.js';\nexport default activeHeaderLinksPlugin;\n$/lib/node/activeHeaderLinksPlugin.js\u0002Kimport { getDirname, path } from '@vuepress/utils';\nconst __dirname = getDirname(import.meta.url);\nexport const activeHeaderLinksPlugin = ({ headerLinkSelector = 'a.sidebar-item', headerAnchorSelector = '.header-anchor', delay = 200, offset = 5, } = {}) => ({\n    name: '@vuepress/plugin-active-header-links',\n    clientConfigFile: path.resolve(__dirname, '../client/config.js'),\n    define: {\n        __AHL_HEADER_LINK_SELECTOR__: headerLinkSelector,\n        __AHL_HEADER_ANCHOR_SELECTOR__: headerAnchorSelector,\n        __AHL_DELAY__: delay,\n        __AHL_OFFSET__: offset,\n    },\n});\n/lib/client/config.d.tsZdeclare const _default: import(\"@vuepress/client\").ClientConfig;\nexport default _default;\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QHZ1ZXByZXNzL3BsdWdpbi1jb250YWluZXJAMi4wLjAtYmV0YS41Mw==",
    "content": "/LICENSE\u0004CThe MIT License (MIT)\n\nCopyright (c) 2018-present, Yuxi (Evan) You\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n/package.json\u0004{\n  \"name\": \"@vuepress/plugin-container\",\n  \"version\": \"2.0.0-beta.53\",\n  \"description\": \"VuePress plugin - markdown container\",\n  \"keywords\": [\n    \"vuepress-plugin\",\n    \"vuepress\",\n    \"plugin\",\n    \"markdown\",\n    \"container\"\n  ],\n  \"homepage\": \"https://github.com/vuepress\",\n  \"bugs\": {\n    \"url\": \"https://github.com/vuepress/vuepress-next/issues\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/vuepress/vuepress-next.git\"\n  },\n  \"license\": \"MIT\",\n  \"author\": \"meteorlxy\",\n  \"type\": \"module\",\n  \"exports\": {\n    \".\": \"./lib/node/index.js\",\n    \"./package.json\": \"./package.json\"\n  },\n  \"main\": \"./lib/node/index.js\",\n  \"types\": \"./lib/node/index.d.ts\",\n  \"files\": [\n    \"lib\"\n  ],\n  \"dependencies\": {\n    \"@types/markdown-it\": \"^12.2.3\",\n    \"@vuepress/core\": \"2.0.0-beta.53\",\n    \"@vuepress/markdown\": \"2.0.0-beta.53\",\n    \"@vuepress/shared\": \"2.0.0-beta.53\",\n    \"@vuepress/utils\": \"2.0.0-beta.53\",\n    \"markdown-it\": \"^13.0.1\",\n    \"markdown-it-container\": \"^3.0.0\"\n  },\n  \"publishConfig\": {\n    \"access\": \"public\"\n  },\n  \"scripts\": {\n    \"build\": \"tsc -b tsconfig.build.json\",\n    \"clean\": \"rimraf lib *.tsbuildinfo\"\n  }\n}/lib/node/containerPlugin.d.ts\bimport type { Plugin } from '@vuepress/core';\nimport type { MarkdownEnv } from '@vuepress/markdown';\nimport type { LocaleConfig } from '@vuepress/shared';\nimport type Renderer from 'markdown-it/lib/renderer.js';\nimport type Token from 'markdown-it/lib/token.js';\n/**\n * Options for markdown-it-container\n */\nexport interface MarkdownItContainerOptions {\n    /**\n     * The marker of the container syntax\n     *\n     * @default ':'\n     * @see https://github.com/markdown-it/markdown-it-container#api\n     */\n    marker?: string;\n    /**\n     * Renderer function for opening / closing tokens\n     *\n     * @see https://github.com/markdown-it/markdown-it-container#api\n     */\n    render?: MarkdownItContainerRenderFunction;\n    /**\n     * Function to validate tail after opening marker, should return `true` on success\n     */\n    validate?: (params: string) => boolean;\n}\nexport declare type MarkdownItContainerRenderFunction = (tokens: Token[], index: number, options: any, env: MarkdownEnv, self: Renderer) => string;\nexport declare type RenderPlaceFunction = (info: string) => string;\n/**\n * Options for @vuepress/plugin-container\n */\nexport interface ContainerPluginOptions extends MarkdownItContainerOptions {\n    /**\n     * The type of the container\n     *\n     * It would be used as the `name` of the container\n     *\n     * @see https://github.com/markdown-it/markdown-it-container#api\n     */\n    type: string;\n    /**\n     * Locales config for container\n     */\n    locales?: LocaleConfig<{\n        /**\n         * Default info of the container\n         *\n         * If this option is not specified, the default info will fallback to the\n         * uppercase of the `type` option\n         */\n        defaultInfo: string;\n    }>;\n    /**\n     * A function to render the starting tag of the container.\n     *\n     * This option will not take effect if you don't specify the `after` option.\n     */\n    before?: RenderPlaceFunction;\n    /**\n     * A function to render the ending tag of the container.\n     *\n     * This option will not take effect if you don't specify the `before` option.\n     */\n    after?: RenderPlaceFunction;\n}\nexport declare const containerPlugin: ({ type, after, before, locales, validate, marker, render, }: ContainerPluginOptions) => Plugin;\n/lib/node/containerPlugin.js\njimport { ensureLeadingSlash, resolveLocalePath } from '@vuepress/shared';\nimport { chalk, logger } from '@vuepress/utils';\nimport container from 'markdown-it-container';\nexport const containerPlugin = ({ \n// plugin options\ntype, after, before, locales, \n// raw options for markdown-it-container\nvalidate, marker, render, }) => {\n    const plugin = {\n        name: '@vuepress/plugin-container',\n        multiple: true,\n    };\n    // `type` option is required\n    if (!type) {\n        logger.warn(`[${plugin.name}] ${chalk.magenta('type')} option is required`);\n        return plugin;\n    }\n    // if `render` option is not specified\n    // use `before` and `after` to generate render function\n    if (!render) {\n        let renderBefore;\n        let renderAfter;\n        if (before !== undefined && after !== undefined) {\n            // user defined\n            renderBefore = before;\n            renderAfter = after;\n        }\n        else {\n            // fallback\n            renderBefore = (info) => `<div class=\"custom-container ${type}\">${info ? `<p class=\"custom-container-title\">${info}</p>` : ''}\\n`;\n            renderAfter = () => '</div>\\n';\n        }\n        // token info stack\n        const infoStack = [];\n        render = (tokens, index, opts, env) => {\n            const token = tokens[index];\n            if (token.nesting === 1) {\n                // `before` tag\n                // resolve info (title)\n                let info = token.info.trim().slice(type.length).trim();\n                if (!info && locales) {\n                    // locale\n                    const { filePathRelative } = env;\n                    const relativePath = ensureLeadingSlash(filePathRelative ?? '');\n                    const localePath = resolveLocalePath(locales, relativePath);\n                    const localeData = locales[localePath] ?? {};\n                    if (localeData.defaultInfo) {\n                        info = localeData.defaultInfo;\n                    }\n                    else {\n                        info = type.toUpperCase();\n                    }\n                }\n                // push the info to stack\n                infoStack.push(info);\n                // render\n                return renderBefore(info);\n            }\n            else {\n                // `after` tag\n                // pop the info from stack\n                const info = infoStack.pop() || '';\n                // render\n                return renderAfter(info);\n            }\n        };\n    }\n    // use markdown-it-container\n    plugin.extendsMarkdown = (md) => {\n        md.use(container, type, { render, validate, marker });\n    };\n    return plugin;\n};\n/lib/node/index.d.ts~import { containerPlugin } from './containerPlugin.js';\nexport * from './containerPlugin.js';\nexport default containerPlugin;\n/lib/node/index.js~import { containerPlugin } from './containerPlugin.js';\nexport * from './containerPlugin.js';\nexport default containerPlugin;\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QHZ1ZXByZXNzL3BsdWdpbi1wYWxldHRlQDIuMC4wLWJldGEuNTM=",
    "content": "/lib/node/prepareStyleFile.js\u0001`import { fs } from '@vuepress/utils';\nexport const prepareStyleFile = async (app, { userStyleFile, tempStyleFile, importCode, }) => {\n    const userStyle = app.dir.source(userStyleFile);\n    let content = '';\n    if (await fs.pathExists(userStyle)) {\n        content += importCode(userStyle);\n    }\n    return app.writeTemp(tempStyleFile, content);\n};\n/lib/node/preparePaletteFile.js\u0001pimport { fs } from '@vuepress/utils';\nexport const preparePaletteFile = async (app, { userPaletteFile, tempPaletteFile, importCode, }) => {\n    const userPalette = app.dir.source(userPaletteFile);\n    let content = '';\n    if (await fs.pathExists(userPalette)) {\n        content += importCode(userPalette);\n    }\n    return app.writeTemp(tempPaletteFile, content);\n};\n/lib/node/palettePlugin.js\t\u0012import chokidar from 'chokidar';\nimport { preparePaletteFile } from './preparePaletteFile.js';\nimport { prepareStyleFile } from './prepareStyleFile.js';\nimport { presetOptions } from './presetOptions.js';\nexport const palettePlugin = ({ preset = 'css', userPaletteFile = presetOptions[preset].userPaletteFile, tempPaletteFile = presetOptions[preset].tempPaletteFile, userStyleFile = presetOptions[preset].userStyleFile, tempStyleFile = presetOptions[preset].tempStyleFile, importCode = presetOptions[preset].importCode, } = {}) => ({\n    name: '@vuepress/plugin-palette',\n    alias: (app) => ({\n        '@vuepress/plugin-palette/palette': app.dir.temp(tempPaletteFile),\n        '@vuepress/plugin-palette/style': app.dir.temp(tempStyleFile),\n    }),\n    onPrepared: async (app) => {\n        await Promise.all([\n            preparePaletteFile(app, {\n                userPaletteFile,\n                tempPaletteFile,\n                importCode,\n            }),\n            prepareStyleFile(app, {\n                userStyleFile,\n                tempStyleFile,\n                importCode,\n            }),\n        ]);\n    },\n    onWatched: (app, watchers) => {\n        const paletteWatcher = chokidar.watch(userPaletteFile, {\n            cwd: app.dir.source(),\n            ignoreInitial: true,\n        });\n        paletteWatcher.on('add', () => {\n            preparePaletteFile(app, {\n                userPaletteFile,\n                tempPaletteFile,\n                importCode,\n            });\n        });\n        paletteWatcher.on('unlink', () => {\n            preparePaletteFile(app, {\n                userPaletteFile,\n                tempPaletteFile,\n                importCode,\n            });\n        });\n        watchers.push(paletteWatcher);\n        const styleWatcher = chokidar.watch(userStyleFile, {\n            cwd: app.dir.source(),\n            ignoreInitial: true,\n        });\n        styleWatcher.on('add', () => {\n            prepareStyleFile(app, {\n                userStyleFile,\n                tempStyleFile,\n                importCode,\n            });\n        });\n        styleWatcher.on('unlink', () => {\n            prepareStyleFile(app, {\n                userStyleFile,\n                tempStyleFile,\n                importCode,\n            });\n        });\n        watchers.push(styleWatcher);\n    },\n});\n/lib/node/index.jsimport { palettePlugin } from './palettePlugin.js';\nexport * from './palettePlugin.js';\nexport * from './preparePaletteFile.js';\nexport * from './prepareStyleFile.js';\nexport * from './presetOptions.js';\nexport default palettePlugin;\n/LICENSE\u0004CThe MIT License (MIT)\n\nCopyright (c) 2018-present, Yuxi (Evan) You\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n!/lib/node/preparePaletteFile.d.ts\u0001Bimport type { App } from '@vuepress/core';\nimport type { PalettePluginOptions } from './palettePlugin.js';\nexport declare const preparePaletteFile: (app: App, { userPaletteFile, tempPaletteFile, importCode, }: Pick<Required<PalettePluginOptions>, 'userPaletteFile' | 'tempPaletteFile' | 'importCode'>) => Promise<string>;\n/lib/node/presetOptions.js\u0004/**\n * Default options for different palette preset\n */\nexport const presetOptions = {\n    css: {\n        userPaletteFile: '.vuepress/styles/palette.css',\n        tempPaletteFile: 'styles/palette.css',\n        userStyleFile: '.vuepress/styles/index.css',\n        tempStyleFile: 'styles/index.css',\n        importCode: (filePath) => `@import '${filePath}';\\n`,\n    },\n    sass: {\n        userPaletteFile: '.vuepress/styles/palette.scss',\n        tempPaletteFile: 'styles/palette.scss',\n        userStyleFile: '.vuepress/styles/index.scss',\n        tempStyleFile: 'styles/index.scss',\n        importCode: (filePath) => `@forward 'file:///${filePath}';\\n`,\n    },\n    less: {\n        userPaletteFile: '.vuepress/styles/palette.less',\n        tempPaletteFile: 'styles/palette.less',\n        userStyleFile: '.vuepress/styles/index.less',\n        tempStyleFile: 'styles/index.less',\n        importCode: (filePath) => `@import '${filePath}';\\n`,\n    },\n    stylus: {\n        userPaletteFile: '.vuepress/styles/palette.styl',\n        tempPaletteFile: 'styles/palette.styl',\n        userStyleFile: '.vuepress/styles/index.styl',\n        tempStyleFile: 'styles/index.styl',\n        importCode: (filePath) => `@require '${filePath}';\\n`,\n    },\n};\n/package.json\u0004\u0005{\n  \"name\": \"@vuepress/plugin-palette\",\n  \"version\": \"2.0.0-beta.53\",\n  \"description\": \"VuePress plugin - palette\",\n  \"keywords\": [\n    \"vuepress-plugin\",\n    \"vuepress\",\n    \"plugin\",\n    \"palette\",\n    \"style\",\n    \"css\",\n    \"sass\",\n    \"less\",\n    \"stylus\"\n  ],\n  \"homepage\": \"https://github.com/vuepress\",\n  \"bugs\": {\n    \"url\": \"https://github.com/vuepress/vuepress-next/issues\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/vuepress/vuepress-next.git\"\n  },\n  \"license\": \"MIT\",\n  \"author\": \"meteorlxy\",\n  \"type\": \"module\",\n  \"exports\": {\n    \".\": \"./lib/node/index.js\",\n    \"./package.json\": \"./package.json\"\n  },\n  \"main\": \"./lib/node/index.js\",\n  \"types\": \"./lib/node/index.d.ts\",\n  \"files\": [\n    \"lib\"\n  ],\n  \"dependencies\": {\n    \"@vuepress/core\": \"2.0.0-beta.53\",\n    \"@vuepress/utils\": \"2.0.0-beta.53\",\n    \"chokidar\": \"^3.5.3\"\n  },\n  \"publishConfig\": {\n    \"access\": \"public\"\n  },\n  \"scripts\": {\n    \"build\": \"tsc -b tsconfig.build.json\",\n    \"clean\": \"rimraf lib *.tsbuildinfo\"\n  }\n}/lib/node/prepareStyleFile.d.ts\u00018import type { App } from '@vuepress/core';\nimport type { PalettePluginOptions } from './palettePlugin.js';\nexport declare const prepareStyleFile: (app: App, { userStyleFile, tempStyleFile, importCode, }: Pick<Required<PalettePluginOptions>, 'userStyleFile' | 'tempStyleFile' | 'importCode'>) => Promise<string>;\n/lib/node/index.d.tsimport { palettePlugin } from './palettePlugin.js';\nexport * from './palettePlugin.js';\nexport * from './preparePaletteFile.js';\nexport * from './prepareStyleFile.js';\nexport * from './presetOptions.js';\nexport default palettePlugin;\n/lib/node/palettePlugin.d.ts\u0003import type { Plugin } from '@vuepress/core';\n/**\n * Options of @vuepress/plugin-palette\n */\nexport interface PalettePluginOptions {\n    /**\n     * Preset of the palette\n     *\n     * @default 'css'\n     */\n    preset?: 'css' | 'sass' | 'less' | 'stylus';\n    /**\n     * File path of the user palette file, relative to source directory\n     */\n    userPaletteFile?: string;\n    /**\n     * File path of the generated palette temp file, relative to temp directory\n     */\n    tempPaletteFile?: string;\n    /**\n     * File path of the user style file, relative to source directory\n     */\n    userStyleFile?: string;\n    /**\n     * File path of the generated style temp file, relative to temp directory\n     */\n    tempStyleFile?: string;\n    /**\n     * Function to generate import code\n     */\n    importCode?: (filePath: string) => string;\n}\nexport declare const palettePlugin: ({ preset, userPaletteFile, tempPaletteFile, userStyleFile, tempStyleFile, importCode, }?: PalettePluginOptions) => Plugin;\n/lib/node/presetOptions.d.tsimport type { PalettePluginOptions } from './palettePlugin.js';\n/**\n * Default options for different palette preset\n */\nexport declare const presetOptions: Record<Required<PalettePluginOptions>['preset'], Omit<Required<PalettePluginOptions>, 'preset'>>;\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QHZ1ZXByZXNzL3BsdWdpbi1wcmlzbWpzQDIuMC4wLWJldGEuNTM=",
    "content": "/lib/node/resolveHighlighter.js\u0004\u001dimport Prism from 'prismjs';\nimport { loadLanguages } from './loadLanguages.js';\nconst languageNameMap = {\n    html: 'markup',\n    vue: 'markup',\n};\n// documentation language of corresponding language\nconst docLangMap = {\n    csharp: 'xml-doc',\n    fsharp: 'xml-doc',\n    java: 'javadoc',\n    javascript: 'jsdoc',\n    php: 'phpdoc',\n    typescript: 'jsdoc',\n};\n/**\n * Resolve syntax highlighter for corresponding language\n */\nexport const resolveHighlighter = (language) => {\n    // get the languages that need to be loaded\n    const lang = languageNameMap[language] || language;\n    const langsToLoad = [lang];\n    // doc language of current language\n    if (docLangMap[lang]) {\n        langsToLoad.push(docLangMap[lang]);\n    }\n    // try to load languages\n    loadLanguages(langsToLoad);\n    // return null if current language could not be loaded\n    // the doc language is not required so we don't check it here\n    if (!Prism.languages[lang]) {\n        return null;\n    }\n    return (code) => Prism.highlight(code, Prism.languages[lang], lang);\n};\n/lib/node/prismjsPlugin.d.ts\u0001import type { Plugin } from '@vuepress/core';\n/**\n * Options of @vuepress/plugin-prismjs\n */\nexport interface PrismjsPluginOptions {\n    /**\n     * Languages to preload\n     *\n     * Workaround for prismjs language reloading issue\n     *\n     * @default ['markdown', 'jsdoc', 'yaml']\n     * @see https://github.com/PrismJS/prism/issues/2716\n     */\n    preloadLanguages?: string[];\n}\nexport declare const prismjsPlugin: ({ preloadLanguages, }?: PrismjsPluginOptions) => Plugin;\n/LICENSE\u0004CThe MIT License (MIT)\n\nCopyright (c) 2018-present, Yuxi (Evan) You\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n!/lib/node/resolveHighlighter.d.tsexport declare type Highlighter = (code: string) => string;\n/**\n * Resolve syntax highlighter for corresponding language\n */\nexport declare const resolveHighlighter: (language: string) => Highlighter | null;\n/lib/node/loadLanguages.d.tsCexport declare const loadLanguages: (languages: string[]) => void;\n/lib/node/loadLanguages.js\u0001]import Prism from 'prismjs';\nimport rawLoadLanguages from 'prismjs/components/index.js';\n// prevent warning messages\nrawLoadLanguages.silent = true;\nexport const loadLanguages = (languages) => {\n    const langsToLoad = languages.filter((item) => !Prism.languages[item]);\n    if (langsToLoad.length) {\n        rawLoadLanguages(langsToLoad);\n    }\n};\n/lib/node/index.jsimport { prismjsPlugin } from './prismjsPlugin.js';\nexport * from './loadLanguages.js';\nexport * from './prismjsPlugin.js';\nexport * from './resolveHighlighter.js';\nexport default prismjsPlugin;\n/package.json\u0003{\n  \"name\": \"@vuepress/plugin-prismjs\",\n  \"version\": \"2.0.0-beta.53\",\n  \"description\": \"VuePress plugin - prismjs\",\n  \"keywords\": [\n    \"vuepress-plugin\",\n    \"vuepress\",\n    \"plugin\",\n    \"prismjs\",\n    \"highlight\"\n  ],\n  \"homepage\": \"https://github.com/vuepress\",\n  \"bugs\": {\n    \"url\": \"https://github.com/vuepress/vuepress-next/issues\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/vuepress/vuepress-next.git\"\n  },\n  \"license\": \"MIT\",\n  \"author\": \"meteorlxy\",\n  \"type\": \"module\",\n  \"exports\": {\n    \".\": \"./lib/node/index.js\",\n    \"./package.json\": \"./package.json\"\n  },\n  \"main\": \"./lib/node/index.js\",\n  \"types\": \"./lib/node/index.d.ts\",\n  \"files\": [\n    \"lib\"\n  ],\n  \"dependencies\": {\n    \"@vuepress/core\": \"2.0.0-beta.53\",\n    \"prismjs\": \"^1.29.0\"\n  },\n  \"devDependencies\": {\n    \"@types/prismjs\": \"^1.26.0\"\n  },\n  \"publishConfig\": {\n    \"access\": \"public\"\n  },\n  \"scripts\": {\n    \"build\": \"tsc -b tsconfig.build.json\",\n    \"clean\": \"rimraf lib *.tsbuildinfo\"\n  }\n}/lib/node/index.d.tsimport { prismjsPlugin } from './prismjsPlugin.js';\nexport * from './loadLanguages.js';\nexport * from './prismjsPlugin.js';\nexport * from './resolveHighlighter.js';\nexport default prismjsPlugin;\n/lib/node/prismjsPlugin.js\u0002&import { loadLanguages } from './loadLanguages.js';\nimport { resolveHighlighter } from './resolveHighlighter.js';\nexport const prismjsPlugin = ({ preloadLanguages = ['markdown', 'jsdoc', 'yaml'], } = {}) => ({\n    name: '@vuepress/plugin-prismjs',\n    extendsMarkdown(md) {\n        if (preloadLanguages?.length !== 0) {\n            loadLanguages(preloadLanguages);\n        }\n        md.options.highlight = (code, lang) => {\n            const highlighter = resolveHighlighter(lang);\n            return highlighter?.(code) || '';\n        };\n    },\n});\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QHZ1ZXByZXNzL3NoYXJlZEAyLjAuMC1iZXRhLjUz",
    "content": "/LICENSE\u0004CThe MIT License (MIT)\n\nCopyright (c) 2018-present, Yuxi (Evan) You\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n/dist/index.d.ts\u001bCimport { MarkdownItHeader } from '@mdit-vue/types';\nexport { isArray, isFunction, isString } from '@vue/shared';\n\n/**\n * Config for `<head>` tags\n */\ndeclare type HeadConfig = [HeadTagEmpty, HeadAttrsConfig] | [HeadTagNonEmpty, HeadAttrsConfig, string];\n/**\n * Allowed tags in `<head>`\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/head\n */\ndeclare type HeadTag = HeadTagNonEmpty | HeadTagEmpty;\n/**\n * Non-empty tags in `<head>`\n */\ndeclare type HeadTagNonEmpty = 'title' | 'style' | 'script' | 'noscript' | 'template';\n/**\n * Empty tags in `<head>`\n */\ndeclare type HeadTagEmpty = 'base' | 'link' | 'meta' | 'script';\n/**\n * Attributes to be set for tags in `<head>`\n */\ndeclare type HeadAttrsConfig = Record<string, string | boolean>;\n\n/**\n * Locales config, a key-value object\n *\n * - Key is the locale path (prefix)\n * - Value is the locales data\n *\n * @remark suffix `Config` means this is for user config\n */\ndeclare type LocaleConfig<T extends LocaleData = LocaleData> = Record<string, Partial<T>>;\n/**\n * Locales data\n */\ndeclare type LocaleData = Record<never, never>;\n\n/**\n * Base type of vuepress page\n */\ndeclare type PageBase<ExtraPageFrontmatter extends Record<any, any> = Record<string, unknown>> = {\n    /**\n     * Identifier of the page\n     *\n     * Will also be used as the component name\n     *\n     * @example 'v-foobar'\n     */\n    key: string;\n    /**\n     * Route path of the page\n     *\n     * Firstly inferred from the file path\n     *\n     * Might be overridden by permalink\n     *\n     * @example '/guide/index.html'\n     * @example '/2020/02/02/hello-world.html'\n     */\n    path: string;\n    /**\n     * Title of the page\n     */\n    title: string;\n    /**\n     * Language of the page\n     */\n    lang: string;\n    /**\n     * Front matter of the page\n     */\n    frontmatter: PageFrontmatter<ExtraPageFrontmatter>;\n    /**\n     * Excerpt of the page\n     */\n    excerpt: string;\n    /**\n     * Headers of the page\n     */\n    headers: PageHeader[];\n};\n/**\n * Vuepress page data\n */\ndeclare type PageData<ExtraPageData extends Record<any, any> = Record<never, never>, ExtraPageFrontmatter extends Record<any, any> = Record<string, unknown>> = PageBase<ExtraPageFrontmatter> & ExtraPageData;\n/**\n * Vuepress page frontmatter\n *\n * Notice that frontmatter is parsed from yaml or other languages,\n * so we cannot guarantee the type safety\n */\ndeclare type PageFrontmatter<T extends Record<any, any> = Record<string, unknown>> = Partial<T> & {\n    date?: string | Date;\n    description?: string;\n    head?: HeadConfig[];\n    lang?: string;\n    layout?: string;\n    permalink?: string;\n    permalinkPattern?: string | null;\n    routeMeta?: Record<string, unknown>;\n    title?: string;\n};\n/**\n * Vuepress page header\n */\ndeclare type PageHeader = MarkdownItHeader;\n\n/**\n * Vuepress site data\n */\ninterface SiteData extends SiteLocaleData {\n    /**\n     * The base URL the site will be deployed at\n     *\n     * It should always start and end with a slash\n     *\n     * @default '/'\n     */\n    base: '/' | `/${string}/`;\n    /**\n     * Specify locales for i18n support\n     *\n     * It will override the root-level site data in different subpath\n     *\n     * @example\n     * {\n     *   '/en/': {\n     *     lang: 'en-US',\n     *     title: 'Hello',\n     *     description: 'This will take effect under /en/ subpath',\n     *   },\n     *   '/zh/': {\n     *     lang: 'zh-CN',\n     *     title: '你好',\n     *     description: '它将会在 /zh/ 子路径下生效',\n     *   }\n     * }\n     */\n    locales: SiteLocaleConfig;\n}\n/**\n * Locales data of vuepress site\n *\n * If they are set in the root of site data, they will be used\n * as the default value\n *\n * If they are set in the `locales` of site data, they will be\n * used for specific locale\n */\ninterface SiteLocaleData {\n    /**\n     * Language for the site\n     *\n     * @default 'en-US'\n     */\n    lang: string;\n    /**\n     * Title for the site\n     *\n     * @default ''\n     */\n    title: string;\n    /**\n     * Description for the site\n     *\n     * @default ''\n     */\n    description: string;\n    /**\n     * Head config\n     *\n     * Descibe the tags to be appended into the `<head>` tag\n     *\n     * @default []\n     *\n     * @example ['link', { rel: 'icon', href: '/logo.png' }]\n     * @example ['style', { type: 'text/css' }, 'p { color: red; }']\n     */\n    head: HeadConfig[];\n}\n/**\n * Site locale config\n */\ndeclare type SiteLocaleConfig = LocaleConfig<SiteLocaleData>;\n\n/**\n * Context for SSR\n */\ninterface VuepressSSRContext {\n    lang: string;\n    head: HeadConfig[];\n}\n\n/**\n * Dedupe head config with identifier\n *\n * Items that appear earlier have higher priority\n */\ndeclare const dedupeHead: (head: HeadConfig[]) => HeadConfig[];\n\n/**\n * Ensure a url string to have leading slash /\n */\ndeclare const ensureLeadingSlash: (str: string) => string;\n\n/**\n * Ensure a url string to have ending slash /\n */\ndeclare const ensureEndingSlash: (str: string) => string;\n\n/**\n * Format a date string to `yyyy-MM-dd`\n */\ndeclare const formatDateString: (str: string, defaultDateString?: string) => string;\n\n/**\n * Determine a link is external or not\n */\ndeclare const isLinkExternal: (link: string, base?: string) => boolean;\n\n/**\n * Determine a link is ftp link or not\n */\ndeclare const isLinkFtp: (link: string) => boolean;\n\n/**\n * Determine a link is http link or not\n *\n * - http://github.com\n * - https://github.com\n * - //github.com\n */\ndeclare const isLinkHttp: (link: string) => boolean;\n\n/**\n * Determine a link is a mailto: address or not\n */\ndeclare const isLinkMailto: (link: string) => boolean;\n\n/**\n * Determine a link is a tel: address or not\n */\ndeclare const isLinkTel: (link: string) => boolean;\n\n/**\n * Check if a value is plain object, with generic type support\n */\ndeclare const isPlainObject: <T extends Record<any, any> = Record<any, any>>(val: unknown) => val is T;\n\n/**\n * Remove ending slash / from a string\n */\ndeclare const removeEndingSlash: (str: string) => string;\n\n/**\n * Remove leading slash / from a string\n */\ndeclare const removeLeadingSlash: (str: string) => string;\n\n/**\n * Resolve identifier of a tag, to avoid duplicated tags in `<head>`\n */\ndeclare const resolveHeadIdentifier: ([tag, attrs, content,]: HeadConfig) => string;\n\n/**\n * Resolve the matched locale path of route path\n */\ndeclare const resolveLocalePath: (locales: LocaleConfig, routePath: string) => string;\n\ndeclare const resolveRoutePathFromUrl: (url: string, base?: string) => string;\n\nexport { HeadAttrsConfig, HeadConfig, HeadTag, HeadTagEmpty, HeadTagNonEmpty, LocaleConfig, LocaleData, PageBase, PageData, PageFrontmatter, PageHeader, SiteData, SiteLocaleConfig, SiteLocaleData, VuepressSSRContext, dedupeHead, ensureEndingSlash, ensureLeadingSlash, formatDateString, isLinkExternal, isLinkFtp, isLinkHttp, isLinkMailto, isLinkTel, isPlainObject, removeEndingSlash, removeLeadingSlash, resolveHeadIdentifier, resolveLocalePath, resolveRoutePathFromUrl };\n/dist/index.js\f// src/utils/index.ts\nimport { isArray, isFunction, isString } from \"@vue/shared\";\n\n// src/utils/resolveHeadIdentifier.ts\nvar resolveHeadIdentifier = ([\n  tag,\n  attrs,\n  content\n]) => {\n  if (tag === \"meta\" && attrs.name) {\n    return `${tag}.${attrs.name}`;\n  }\n  if ([\"title\", \"base\"].includes(tag)) {\n    return tag;\n  }\n  if (tag === \"template\" && attrs.id) {\n    return `${tag}.${attrs.id}`;\n  }\n  return JSON.stringify([tag, attrs, content]);\n};\n\n// src/utils/dedupeHead.ts\nvar dedupeHead = (head) => {\n  const identifierSet = /* @__PURE__ */ new Set();\n  const result = [];\n  head.forEach((item) => {\n    const identifier = resolveHeadIdentifier(item);\n    if (!identifierSet.has(identifier)) {\n      identifierSet.add(identifier);\n      result.push(item);\n    }\n  });\n  return result;\n};\n\n// src/utils/ensureLeadingSlash.ts\nvar ensureLeadingSlash = (str) => str.replace(/^\\/?/, \"/\");\n\n// src/utils/ensureEndingSlash.ts\nvar ensureEndingSlash = (str) => /(\\.html|\\/)$/.test(str) ? str : str + \"/\";\n\n// src/utils/formatDateString.ts\nvar formatDateString = (str, defaultDateString = \"\") => {\n  const dateMatch = str.match(/\\b(\\d{4})-(\\d{1,2})-(\\d{1,2})\\b/);\n  if (dateMatch === null) {\n    return defaultDateString;\n  }\n  const [, yearStr, monthStr, dayStr] = dateMatch;\n  return [yearStr, monthStr.padStart(2, \"0\"), dayStr.padStart(2, \"0\")].join(\"-\");\n};\n\n// src/utils/isLinkFtp.ts\nvar isLinkFtp = (link) => link.startsWith(\"ftp://\");\n\n// src/utils/isLinkHttp.ts\nvar isLinkHttp = (link) => /^(https?:)?\\/\\//.test(link);\n\n// src/utils/isLinkExternal.ts\nvar markdownLinkRegexp = /.md((\\?|#).*)?$/;\nvar isLinkExternal = (link, base = \"/\") => {\n  if (isLinkHttp(link) || isLinkFtp(link)) {\n    return true;\n  }\n  if (link.startsWith(\"/\") && !link.startsWith(base) && !markdownLinkRegexp.test(link)) {\n    return true;\n  }\n  return false;\n};\n\n// src/utils/isLinkMailto.ts\nvar isLinkMailto = (link) => /^mailto:/.test(link);\n\n// src/utils/isLinkTel.ts\nvar isLinkTel = (link) => /^tel:/.test(link);\n\n// src/utils/isPlainObject.ts\nvar isPlainObject = (val) => Object.prototype.toString.call(val) === \"[object Object]\";\n\n// src/utils/removeEndingSlash.ts\nvar removeEndingSlash = (str) => str.replace(/\\/$/, \"\");\n\n// src/utils/removeLeadingSlash.ts\nvar removeLeadingSlash = (str) => str.replace(/^\\//, \"\");\n\n// src/utils/resolveLocalePath.ts\nvar resolveLocalePath = (locales, routePath) => {\n  const localePaths = Object.keys(locales).sort((a, b) => {\n    const levelDelta = b.split(\"/\").length - a.split(\"/\").length;\n    if (levelDelta !== 0) {\n      return levelDelta;\n    }\n    return b.length - a.length;\n  });\n  for (const localePath of localePaths) {\n    if (routePath.startsWith(localePath)) {\n      return localePath;\n    }\n  }\n  return \"/\";\n};\n\n// src/utils/resolveRoutePathFromUrl.ts\nvar resolveRoutePathFromUrl = (url, base = \"/\") => url.replace(/^(https?:)?\\/\\/[^/]*/, \"\").replace(new RegExp(`^${base}`), \"/\");\nexport {\n  dedupeHead,\n  ensureEndingSlash,\n  ensureLeadingSlash,\n  formatDateString,\n  isArray,\n  isFunction,\n  isLinkExternal,\n  isLinkFtp,\n  isLinkHttp,\n  isLinkMailto,\n  isLinkTel,\n  isPlainObject,\n  isString,\n  removeEndingSlash,\n  removeLeadingSlash,\n  resolveHeadIdentifier,\n  resolveLocalePath,\n  resolveRoutePathFromUrl\n};\n/package.json\u0004{\n  \"name\": \"@vuepress/shared\",\n  \"version\": \"2.0.0-beta.53\",\n  \"description\": \"Utils that shared between VuePress node and client\",\n  \"keywords\": [\n    \"vuepress\",\n    \"shared\",\n    \"utils\"\n  ],\n  \"homepage\": \"https://github.com/vuepress\",\n  \"bugs\": {\n    \"url\": \"https://github.com/vuepress/vuepress-next/issues\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/vuepress/vuepress-next.git\"\n  },\n  \"license\": \"MIT\",\n  \"author\": \"meteorlxy\",\n  \"type\": \"module\",\n  \"exports\": {\n    \".\": \"./dist/index.js\",\n    \"./package.json\": \"./package.json\"\n  },\n  \"main\": \"./dist/index.js\",\n  \"module\": \"./dist/index.js\",\n  \"types\": \"./dist/index.d.ts\",\n  \"files\": [\n    \"dist\"\n  ],\n  \"dependencies\": {\n    \"@mdit-vue/types\": \"^0.11.0\",\n    \"@vue/shared\": \"^3.2.41\"\n  },\n  \"publishConfig\": {\n    \"access\": \"public\"\n  },\n  \"tsup\": {\n    \"clean\": true,\n    \"dts\": \"./src/index.ts\",\n    \"entry\": [\n      \"./src/index.ts\"\n    ],\n    \"format\": [\n      \"esm\"\n    ],\n    \"outDir\": \"./dist\",\n    \"sourcemap\": false,\n    \"target\": \"es2020\",\n    \"tsconfig\": \"../tsconfig.dts.json\"\n  },\n  \"scripts\": {\n    \"build\": \"tsup\",\n    \"clean\": \"rimraf dist\"\n  }\n}"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QHZ1ZXByZXNzL3V0aWxzQDIuMC4wLWJldGEuNTM=",
    "content": "/dist/index.js\u000b// src/index.ts\nimport chalk2 from \"chalk\";\nimport debug from \"debug\";\nimport fs from \"fs-extra\";\nimport { globby } from \"globby\";\nimport hash from \"hash-sum\";\nimport ora2 from \"ora\";\nimport path3 from \"upath\";\n\n// src/getDirname.ts\nimport { fileURLToPath } from \"url\";\nimport path from \"upath\";\nvar getDirname = (importMetaUrl) => path.dirname(fileURLToPath(importMetaUrl));\n\n// src/importFile.ts\nimport { pathToFileURL } from \"url\";\nvar importFile = (filePath) => import(pathToFileURL(filePath).toString());\nvar importFileDefault = (filePath) => importFile(filePath).then((m) => m.default);\n\n// src/formatMs.ts\nvar formatMs = (ms) => {\n  if (ms < 1e3)\n    return `${ms}ms`;\n  return `${(ms / 1e3).toFixed(2)}s`;\n};\n\n// src/isChildPath.ts\nimport path2 from \"upath\";\nvar isChildPath = (child, parent) => {\n  const childPath = path2.normalize(child);\n  const parentPath = path2.normalize(parent);\n  if (!path2.win32.isAbsolute(childPath) || !path2.win32.isAbsolute(parentPath)) {\n    return false;\n  }\n  const relativePath = path2.relative(parentPath, childPath);\n  return relativePath === \"\" || !relativePath.startsWith(\"..\");\n};\n\n// src/logger.ts\nimport chalk from \"chalk\";\nvar info = (...args) => {\n  console.log(chalk.cyan(\"info\"), ...args);\n};\nvar tip = (...args) => {\n  console.log(chalk.blue(\"tip\"), ...args);\n};\nvar success = (...args) => {\n  console.log(chalk.green(\"success\"), ...args);\n};\nvar warn = (...args) => {\n  console.warn(chalk.yellow(\"warning\"), ...args);\n};\nvar error = (...args) => {\n  console.error(chalk.red(\"error\"), ...args);\n};\nvar createError = (message) => {\n  error(message);\n  return new Error(message);\n};\nvar logger = {\n  info,\n  tip,\n  success,\n  warn,\n  error,\n  createError\n};\n\n// src/renderHeadAttrs.ts\nvar renderHeadAttrs = (attrs) => Object.entries(attrs).filter((item) => item[1] !== false).map(\n  ([key, value]) => value === true ? ` ${key}` : ` ${key}=\"${attrs[key]}\"`\n).join(\"\");\n\n// src/renderHead.ts\nvar renderHead = ([\n  tag,\n  attrs,\n  innerHTML = \"\"\n]) => {\n  const openTag = `<${tag}${renderHeadAttrs(attrs)}>`;\n  if (tag === \"link\" || tag === \"meta\" || tag === \"base\") {\n    return openTag;\n  }\n  return `${openTag}${innerHTML}</${tag}>`;\n};\n\n// src/withSpinner.ts\nimport process from \"process\";\nimport ora from \"ora\";\nvar withSpinner = (msg) => async (target) => {\n  if (process.env.DEBUG) {\n    return target();\n  }\n  const start = Date.now();\n  const spinner = ora();\n  try {\n    spinner.start(msg);\n    const result = await target(spinner);\n    spinner.succeed(`${msg} - done in ${formatMs(Date.now() - start)}`);\n    return result;\n  } catch (e) {\n    spinner.fail(`${msg} - failed in ${formatMs(Date.now() - start)}`);\n    throw e;\n  }\n};\nexport {\n  chalk2 as chalk,\n  createError,\n  debug,\n  error,\n  formatMs,\n  fs,\n  getDirname,\n  globby,\n  hash,\n  importFile,\n  importFileDefault,\n  info,\n  isChildPath,\n  logger,\n  ora2 as ora,\n  path3 as path,\n  renderHead,\n  renderHeadAttrs,\n  success,\n  tip,\n  warn,\n  withSpinner\n};\n/package.json\u00052{\n  \"name\": \"@vuepress/utils\",\n  \"version\": \"2.0.0-beta.53\",\n  \"description\": \"Utils package of VuePress\",\n  \"keywords\": [\n    \"vuepress\",\n    \"utils\"\n  ],\n  \"homepage\": \"https://github.com/vuepress\",\n  \"bugs\": {\n    \"url\": \"https://github.com/vuepress/vuepress-next/issues\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/vuepress/vuepress-next.git\"\n  },\n  \"license\": \"MIT\",\n  \"author\": \"meteorlxy\",\n  \"type\": \"module\",\n  \"exports\": {\n    \".\": \"./dist/index.js\",\n    \"./package.json\": \"./package.json\"\n  },\n  \"main\": \"./dist/index.js\",\n  \"types\": \"./dist/index.d.ts\",\n  \"files\": [\n    \"dist\"\n  ],\n  \"dependencies\": {\n    \"@types/debug\": \"^4.1.7\",\n    \"@types/fs-extra\": \"^9.0.13\",\n    \"@types/hash-sum\": \"^1.0.0\",\n    \"@vuepress/shared\": \"2.0.0-beta.53\",\n    \"chalk\": \"^5.1.2\",\n    \"debug\": \"^4.3.4\",\n    \"fs-extra\": \"^10.1.0\",\n    \"globby\": \"^13.1.2\",\n    \"hash-sum\": \"^2.0.0\",\n    \"ora\": \"^6.1.2\",\n    \"upath\": \"^2.0.1\"\n  },\n  \"publishConfig\": {\n    \"access\": \"public\"\n  },\n  \"tsup\": {\n    \"clean\": true,\n    \"dts\": \"./src/index.ts\",\n    \"entry\": [\n      \"./src/index.ts\"\n    ],\n    \"format\": [\n      \"esm\"\n    ],\n    \"outDir\": \"./dist\",\n    \"sourcemap\": false,\n    \"target\": \"es2020\",\n    \"tsconfig\": \"../tsconfig.dts.json\"\n  },\n  \"scripts\": {\n    \"build\": \"tsup\",\n    \"clean\": \"rimraf dist\"\n  }\n}/dist/index.d.ts\b@export { default as chalk } from 'chalk';\nexport { default as debug } from 'debug';\nexport { default as fs } from 'fs-extra';\nexport { globby } from 'globby';\nexport { default as hash } from 'hash-sum';\nimport { Ora } from 'ora';\nexport { default as ora } from 'ora';\nexport { default as path } from 'upath';\nimport { HeadConfig, HeadAttrsConfig } from '@vuepress/shared';\n\ndeclare const getDirname: (importMetaUrl: string) => string;\n\n/**\n * A helper for dynamically importing a file path\n *\n * We need to use `pathToFileURL` to transform file path wo compat with windows\n */\ndeclare const importFile: <T>(filePath: string) => Promise<T>;\n/**\n * A wrapper of `importFile` and returns the default export\n */\ndeclare const importFileDefault: <T>(filePath: string) => Promise<T>;\n\n/**\n * Format millisecond\n */\ndeclare const formatMs: (ms: number) => string;\n\n/**\n * Check if `child` is a sub path of `parent` or not. Return `true` if\n * they are the same path\n */\ndeclare const isChildPath: (child: string, parent: string) => boolean;\n\ndeclare const info: (...args: any[]) => void;\ndeclare const tip: (...args: any[]) => void;\ndeclare const success: (...args: any[]) => void;\ndeclare const warn: (...args: any[]) => void;\ndeclare const error: (...args: any[]) => void;\ndeclare const createError: (message?: string | undefined) => Error;\ndeclare const logger: {\n    info: (...args: any[]) => void;\n    tip: (...args: any[]) => void;\n    success: (...args: any[]) => void;\n    warn: (...args: any[]) => void;\n    error: (...args: any[]) => void;\n    createError: (message?: string | undefined) => Error;\n};\n\n/**\n * Render head config to string\n */\ndeclare const renderHead: ([tag, attrs, innerHTML,]: HeadConfig) => string;\n\n/**\n * Render head attrs config to string\n */\ndeclare const renderHeadAttrs: (attrs: HeadAttrsConfig) => string;\n\ndeclare const withSpinner: (msg: string) => <T>(target: (spinner?: Ora) => Promise<T>) => Promise<T>;\n\nexport { createError, error, formatMs, getDirname, importFile, importFileDefault, info, isChildPath, logger, renderHead, renderHeadAttrs, success, tip, warn, withSpinner };\n/LICENSE\u0004CThe MIT License (MIT)\n\nCopyright (c) 2018-present, Yuxi (Evan) You\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QHZ1ZXVzZS9zaGFyZWRAOS45LjA=",
    "content": "/index.iife.js\u001cvar VueDemi = (function (VueDemi, Vue, VueCompositionAPI) {\n  if (VueDemi.install) {\n    return VueDemi\n  }\n  if (!Vue) {\n    console.error('[vue-demi] no Vue instance found, please be sure to import `vue` before `vue-demi`.')\n    return VueDemi\n  }\n\n  // Vue 2.7\n  if (Vue.version.slice(0, 4) === '2.7.') {\n    for (var key in Vue) {\n      VueDemi[key] = Vue[key]\n    }\n    VueDemi.isVue2 = true\n    VueDemi.isVue3 = false\n    VueDemi.install = function () {}\n    VueDemi.Vue = Vue\n    VueDemi.Vue2 = Vue\n    VueDemi.version = Vue.version\n    VueDemi.warn = Vue.util.warn\n    function createApp(rootComponent, rootProps) {\n      var vm\n      var provide = {}\n      var app = {\n        config: Vue.config,\n        use: Vue.use.bind(Vue),\n        mixin: Vue.mixin.bind(Vue),\n        component: Vue.component.bind(Vue),\n        provide: function (key, value) {\n          provide[key] = value\n          return this\n        },\n        directive: function (name, dir) {\n          if (dir) {\n            Vue.directive(name, dir)\n            return app\n          } else {\n            return Vue.directive(name)\n          }\n        },\n        mount: function (el, hydrating) {\n          if (!vm) {\n            vm = new Vue(Object.assign({ propsData: rootProps }, rootComponent, { provide: Object.assign(provide, rootComponent.provide) }))\n            vm.$mount(el, hydrating)\n            return vm\n          } else {\n            return vm\n          }\n        },\n        unmount: function () {\n          if (vm) {\n            vm.$destroy()\n            vm = undefined\n          }\n        },\n      }\n      return app\n    }\n    VueDemi.createApp = createApp\n  }\n  // Vue 2.6.x\n  else if (Vue.version.slice(0, 2) === '2.') {\n    if (VueCompositionAPI) {\n      for (var key in VueCompositionAPI) {\n        VueDemi[key] = VueCompositionAPI[key]\n      }\n      VueDemi.isVue2 = true\n      VueDemi.isVue3 = false\n      VueDemi.install = function () {}\n      VueDemi.Vue = Vue\n      VueDemi.Vue2 = Vue\n      VueDemi.version = Vue.version\n    } else {\n      console.error('[vue-demi] no VueCompositionAPI instance found, please be sure to import `@vue/composition-api` before `vue-demi`.')\n    }\n  }\n  // Vue 3\n  else if (Vue.version.slice(0, 2) === '3.') {\n    for (var key in Vue) {\n      VueDemi[key] = Vue[key]\n    }\n    VueDemi.isVue2 = false\n    VueDemi.isVue3 = true\n    VueDemi.install = function () {}\n    VueDemi.Vue = Vue\n    VueDemi.Vue2 = undefined\n    VueDemi.version = Vue.version\n    VueDemi.set = function (target, key, val) {\n      if (Array.isArray(target)) {\n        target.length = Math.max(target.length, key)\n        target.splice(key, 1, val)\n        return val\n      }\n      target[key] = val\n      return val\n    }\n    VueDemi.del = function (target, key) {\n      if (Array.isArray(target)) {\n        target.splice(key, 1)\n        return\n      }\n      delete target[key]\n    }\n  } else {\n    console.error('[vue-demi] Vue version ' + Vue.version + ' is unsupported.')\n  }\n  return VueDemi\n})(\n  (this.VueDemi = this.VueDemi || (typeof VueDemi !== 'undefined' ? VueDemi : {})),\n  this.Vue || (typeof Vue !== 'undefined' ? Vue : undefined),\n  this.VueCompositionAPI || (typeof VueCompositionAPI !== 'undefined' ? VueCompositionAPI : undefined)\n);\n;\n;(function (exports, vueDemi) {\n  'use strict';\n\n  var __defProp$9 = Object.defineProperty;\n  var __defProps$6 = Object.defineProperties;\n  var __getOwnPropDescs$6 = Object.getOwnPropertyDescriptors;\n  var __getOwnPropSymbols$b = Object.getOwnPropertySymbols;\n  var __hasOwnProp$b = Object.prototype.hasOwnProperty;\n  var __propIsEnum$b = Object.prototype.propertyIsEnumerable;\n  var __defNormalProp$9 = (obj, key, value) => key in obj ? __defProp$9(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\n  var __spreadValues$9 = (a, b) => {\n    for (var prop in b || (b = {}))\n      if (__hasOwnProp$b.call(b, prop))\n        __defNormalProp$9(a, prop, b[prop]);\n    if (__getOwnPropSymbols$b)\n      for (var prop of __getOwnPropSymbols$b(b)) {\n        if (__propIsEnum$b.call(b, prop))\n          __defNormalProp$9(a, prop, b[prop]);\n      }\n    return a;\n  };\n  var __spreadProps$6 = (a, b) => __defProps$6(a, __getOwnPropDescs$6(b));\n  function computedEager(fn, options) {\n    var _a;\n    const result = vueDemi.shallowRef();\n    vueDemi.watchEffect(() => {\n      result.value = fn();\n    }, __spreadProps$6(__spreadValues$9({}, options), {\n      flush: (_a = options == null ? void 0 : options.flush) != null ? _a : \"sync\"\n    }));\n    return vueDemi.readonly(result);\n  }\n\n  var _a;\n  const isClient = typeof window !== \"undefined\";\n  const isDef = (val) => typeof val !== \"undefined\";\n  const assert = (condition, ...infos) => {\n    if (!condition)\n      console.warn(...infos);\n  };\n  const toString = Object.prototype.toString;\n  const isBoolean = (val) => typeof val === \"boolean\";\n  const isFunction = (val) => typeof val === \"function\";\n  const isNumber = (val) => typeof val === \"number\";\n  const isString = (val) => typeof val === \"string\";\n  const isObject = (val) => toString.call(val) === \"[object Object]\";\n  const isWindow = (val) => typeof window !== \"undefined\" && toString.call(val) === \"[object Window]\";\n  const now = () => Date.now();\n  const timestamp = () => +Date.now();\n  const clamp = (n, min, max) => Math.min(max, Math.max(min, n));\n  const noop = () => {\n  };\n  const rand = (min, max) => {\n    min = Math.ceil(min);\n    max = Math.floor(max);\n    return Math.floor(Math.random() * (max - min + 1)) + min;\n  };\n  const isIOS = isClient && ((_a = window == null ? void 0 : window.navigator) == null ? void 0 : _a.userAgent) && /iP(ad|hone|od)/.test(window.navigator.userAgent);\n  const hasOwn = (val, key) => Object.prototype.hasOwnProperty.call(val, key);\n\n  function resolveUnref(r) {\n    return typeof r === \"function\" ? r() : vueDemi.unref(r);\n  }\n\n  function createFilterWrapper(filter, fn) {\n    function wrapper(...args) {\n      filter(() => fn.apply(this, args), { fn, thisArg: this, args });\n    }\n    return wrapper;\n  }\n  const bypassFilter = (invoke) => {\n    return invoke();\n  };\n  function debounceFilter(ms, options = {}) {\n    let timer;\n    let maxTimer;\n    const filter = (invoke) => {\n      const duration = resolveUnref(ms);\n      const maxDuration = resolveUnref(options.maxWait);\n      if (timer)\n        clearTimeout(timer);\n      if (duration <= 0 || maxDuration !== void 0 && maxDuration <= 0) {\n        if (maxTimer) {\n          clearTimeout(maxTimer);\n          maxTimer = null;\n        }\n        return invoke();\n      }\n      if (maxDuration && !maxTimer) {\n        maxTimer = setTimeout(() => {\n          if (timer)\n            clearTimeout(timer);\n          maxTimer = null;\n          invoke();\n        }, maxDuration);\n      }\n      timer = setTimeout(() => {\n        if (maxTimer)\n          clearTimeout(maxTimer);\n        maxTimer = null;\n        invoke();\n      }, duration);\n    };\n    return filter;\n  }\n  function throttleFilter(ms, trailing = true, leading = true) {\n    let lastExec = 0;\n    let timer;\n    let isLeading = true;\n    const clear = () => {\n      if (timer) {\n        clearTimeout(timer);\n        timer = void 0;\n      }\n    };\n    const filter = (invoke) => {\n      const duration = resolveUnref(ms);\n      const elapsed = Date.now() - lastExec;\n      clear();\n      if (duration <= 0) {\n        lastExec = Date.now();\n        return invoke();\n      }\n      if (elapsed > duration && (leading || !isLeading)) {\n        lastExec = Date.now();\n        invoke();\n      } else if (trailing) {\n        timer = setTimeout(() => {\n          lastExec = Date.now();\n          isLeading = true;\n          clear();\n          invoke();\n        }, duration - elapsed);\n      }\n      if (!leading && !timer)\n        timer = setTimeout(() => isLeading = true, duration);\n      isLeading = false;\n    };\n    return filter;\n  }\n  function pausableFilter(extendFilter = bypassFilter) {\n    const isActive = vueDemi.ref(true);\n    function pause() {\n      isActive.value = false;\n    }\n    function resume() {\n      isActive.value = true;\n    }\n    const eventFilter = (...args) => {\n      if (isActive.value)\n        extendFilter(...args);\n    };\n    return { isActive, pause, resume, eventFilter };\n  }\n\n  function __onlyVue3(name = \"this function\") {\n    if (vueDemi.isVue3)\n      return;\n    throw new Error(`[VueUse] ${name} is only works on Vue 3.`);\n  }\n  function __onlyVue27Plus(name = \"this function\") {\n    if (vueDemi.isVue3 || vueDemi.version.startsWith(\"2.7.\"))\n      return;\n    throw new Error(`[VueUse] ${name} is only works on Vue 2.7 or above.`);\n  }\n  const directiveHooks = {\n    mounted: vueDemi.isVue3 ? \"mounted\" : \"inserted\",\n    updated: vueDemi.isVue3 ? \"updated\" : \"componentUpdated\",\n    unmounted: vueDemi.isVue3 ? \"unmounted\" : \"unbind\"\n  };\n\n  function promiseTimeout(ms, throwOnTimeout = false, reason = \"Timeout\") {\n    return new Promise((resolve, reject) => {\n      if (throwOnTimeout)\n        setTimeout(() => reject(reason), ms);\n      else\n        setTimeout(resolve, ms);\n    });\n  }\n  function identity(arg) {\n    return arg;\n  }\n  function createSingletonPromise(fn) {\n    let _promise;\n    function wrapper() {\n      if (!_promise)\n        _promise = fn();\n      return _promise;\n    }\n    wrapper.reset = async () => {\n      const _prev = _promise;\n      _promise = void 0;\n      if (_prev)\n        await _prev;\n    };\n    return wrapper;\n  }\n  function invoke(fn) {\n    return fn();\n  }\n  function containsProp(obj, ...props) {\n    return props.some((k) => k in obj);\n  }\n  function increaseWithUnit(target, delta) {\n    var _a;\n    if (typeof target === \"number\")\n      return target + delta;\n    const value = ((_a = target.match(/^-?[0-9]+\\.?[0-9]*/)) == null ? void 0 : _a[0]) || \"\";\n    const unit = target.slice(value.length);\n    const result = parseFloat(value) + delta;\n    if (Number.isNaN(result))\n      return target;\n    return result + unit;\n  }\n  function objectPick(obj, keys, omitUndefined = false) {\n    return keys.reduce((n, k) => {\n      if (k in obj) {\n        if (!omitUndefined || obj[k] !== void 0)\n          n[k] = obj[k];\n      }\n      return n;\n    }, {});\n  }\n\n  function computedWithControl(source, fn) {\n    let v = void 0;\n    let track;\n    let trigger;\n    const dirty = vueDemi.ref(true);\n    const update = () => {\n      dirty.value = true;\n      trigger();\n    };\n    vueDemi.watch(source, update, { flush: \"sync\" });\n    const get = isFunction(fn) ? fn : fn.get;\n    const set = isFunction(fn) ? void 0 : fn.set;\n    const result = vueDemi.customRef((_track, _trigger) => {\n      track = _track;\n      trigger = _trigger;\n      return {\n        get() {\n          if (dirty.value) {\n            v = get();\n            dirty.value = false;\n          }\n          track();\n          return v;\n        },\n        set(v2) {\n          set == null ? void 0 : set(v2);\n        }\n      };\n    });\n    if (Object.isExtensible(result))\n      result.trigger = update;\n    return result;\n  }\n\n  function tryOnScopeDispose(fn) {\n    if (vueDemi.getCurrentScope()) {\n      vueDemi.onScopeDispose(fn);\n      return true;\n    }\n    return false;\n  }\n\n  function createEventHook() {\n    const fns = [];\n    const off = (fn) => {\n      const index = fns.indexOf(fn);\n      if (index !== -1)\n        fns.splice(index, 1);\n    };\n    const on = (fn) => {\n      fns.push(fn);\n      const offFn = () => off(fn);\n      tryOnScopeDispose(offFn);\n      return {\n        off: offFn\n      };\n    };\n    const trigger = (param) => {\n      fns.forEach((fn) => fn(param));\n    };\n    return {\n      on,\n      off,\n      trigger\n    };\n  }\n\n  function createGlobalState(stateFactory) {\n    let initialized = false;\n    let state;\n    const scope = vueDemi.effectScope(true);\n    return () => {\n      if (!initialized) {\n        state = scope.run(stateFactory);\n        initialized = true;\n      }\n      return state;\n    };\n  }\n\n  function createInjectionState(composable) {\n    const key = Symbol(\"InjectionState\");\n    const useProvidingState = (...args) => {\n      vueDemi.provide(key, composable(...args));\n    };\n    const useInjectedState = () => vueDemi.inject(key);\n    return [useProvidingState, useInjectedState];\n  }\n\n  function createSharedComposable(composable) {\n    let subscribers = 0;\n    let state;\n    let scope;\n    const dispose = () => {\n      subscribers -= 1;\n      if (scope && subscribers <= 0) {\n        scope.stop();\n        state = void 0;\n        scope = void 0;\n      }\n    };\n    return (...args) => {\n      subscribers += 1;\n      if (!state) {\n        scope = vueDemi.effectScope(true);\n        state = scope.run(() => composable(...args));\n      }\n      tryOnScopeDispose(dispose);\n      return state;\n    };\n  }\n\n  function extendRef(ref, extend, { enumerable = false, unwrap = true } = {}) {\n    __onlyVue27Plus();\n    for (const [key, value] of Object.entries(extend)) {\n      if (key === \"value\")\n        continue;\n      if (vueDemi.isRef(value) && unwrap) {\n        Object.defineProperty(ref, key, {\n          get() {\n            return value.value;\n          },\n          set(v) {\n            value.value = v;\n          },\n          enumerable\n        });\n      } else {\n        Object.defineProperty(ref, key, { value, enumerable });\n      }\n    }\n    return ref;\n  }\n\n  function get(obj, key) {\n    if (key == null)\n      return vueDemi.unref(obj);\n    return vueDemi.unref(obj)[key];\n  }\n\n  function isDefined(v) {\n    return vueDemi.unref(v) != null;\n  }\n\n  var __defProp$8 = Object.defineProperty;\n  var __getOwnPropSymbols$a = Object.getOwnPropertySymbols;\n  var __hasOwnProp$a = Object.prototype.hasOwnProperty;\n  var __propIsEnum$a = Object.prototype.propertyIsEnumerable;\n  var __defNormalProp$8 = (obj, key, value) => key in obj ? __defProp$8(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\n  var __spreadValues$8 = (a, b) => {\n    for (var prop in b || (b = {}))\n      if (__hasOwnProp$a.call(b, prop))\n        __defNormalProp$8(a, prop, b[prop]);\n    if (__getOwnPropSymbols$a)\n      for (var prop of __getOwnPropSymbols$a(b)) {\n        if (__propIsEnum$a.call(b, prop))\n          __defNormalProp$8(a, prop, b[prop]);\n      }\n    return a;\n  };\n  function makeDestructurable(obj, arr) {\n    if (typeof Symbol !== \"undefined\") {\n      const clone = __spreadValues$8({}, obj);\n      Object.defineProperty(clone, Symbol.iterator, {\n        enumerable: false,\n        value() {\n          let index = 0;\n          return {\n            next: () => ({\n              value: arr[index++],\n              done: index > arr.length\n            })\n          };\n        }\n      });\n      return clone;\n    } else {\n      return Object.assign([...arr], obj);\n    }\n  }\n\n  function reactify(fn, options) {\n    const unrefFn = (options == null ? void 0 : options.computedGetter) === false ? vueDemi.unref : resolveUnref;\n    return function(...args) {\n      return vueDemi.computed(() => fn.apply(this, args.map((i) => unrefFn(i))));\n    };\n  }\n\n  function reactifyObject(obj, optionsOrKeys = {}) {\n    let keys = [];\n    let options;\n    if (Array.isArray(optionsOrKeys)) {\n      keys = optionsOrKeys;\n    } else {\n      options = optionsOrKeys;\n      const { includeOwnProperties = true } = optionsOrKeys;\n      keys.push(...Object.keys(obj));\n      if (includeOwnProperties)\n        keys.push(...Object.getOwnPropertyNames(obj));\n    }\n    return Object.fromEntries(keys.map((key) => {\n      const value = obj[key];\n      return [\n        key,\n        typeof value === \"function\" ? reactify(value.bind(obj), options) : value\n      ];\n    }));\n  }\n\n  function toReactive(objectRef) {\n    if (!vueDemi.isRef(objectRef))\n      return vueDemi.reactive(objectRef);\n    const proxy = new Proxy({}, {\n      get(_, p, receiver) {\n        return vueDemi.unref(Reflect.get(objectRef.value, p, receiver));\n      },\n      set(_, p, value) {\n        if (vueDemi.isRef(objectRef.value[p]) && !vueDemi.isRef(value))\n          objectRef.value[p].value = value;\n        else\n          objectRef.value[p] = value;\n        return true;\n      },\n      deleteProperty(_, p) {\n        return Reflect.deleteProperty(objectRef.value, p);\n      },\n      has(_, p) {\n        return Reflect.has(objectRef.value, p);\n      },\n      ownKeys() {\n        return Object.keys(objectRef.value);\n      },\n      getOwnPropertyDescriptor() {\n        return {\n          enumerable: true,\n          configurable: true\n        };\n      }\n    });\n    return vueDemi.reactive(proxy);\n  }\n\n  function reactiveComputed(fn) {\n    return toReactive(vueDemi.computed(fn));\n  }\n\n  function reactiveOmit(obj, ...keys) {\n    const flatKeys = keys.flat();\n    return reactiveComputed(() => Object.fromEntries(Object.entries(vueDemi.toRefs(obj)).filter((e) => !flatKeys.includes(e[0]))));\n  }\n\n  function reactivePick(obj, ...keys) {\n    const flatKeys = keys.flat();\n    return vueDemi.reactive(Object.fromEntries(flatKeys.map((k) => [k, vueDemi.toRef(obj, k)])));\n  }\n\n  function refAutoReset(defaultValue, afterMs = 1e4) {\n    return vueDemi.customRef((track, trigger) => {\n      let value = defaultValue;\n      let timer;\n      const resetAfter = () => setTimeout(() => {\n        value = defaultValue;\n        trigger();\n      }, resolveUnref(afterMs));\n      tryOnScopeDispose(() => {\n        clearTimeout(timer);\n      });\n      return {\n        get() {\n          track();\n          return value;\n        },\n        set(newValue) {\n          value = newValue;\n          trigger();\n          clearTimeout(timer);\n          timer = resetAfter();\n        }\n      };\n    });\n  }\n\n  function useDebounceFn(fn, ms = 200, options = {}) {\n    return createFilterWrapper(debounceFilter(ms, options), fn);\n  }\n\n  function refDebounced(value, ms = 200, options = {}) {\n    const debounced = vueDemi.ref(value.value);\n    const updater = useDebounceFn(() => {\n      debounced.value = value.value;\n    }, ms, options);\n    vueDemi.watch(value, () => updater());\n    return debounced;\n  }\n\n  function refDefault(source, defaultValue) {\n    return vueDemi.computed({\n      get() {\n        var _a;\n        return (_a = source.value) != null ? _a : defaultValue;\n      },\n      set(value) {\n        source.value = value;\n      }\n    });\n  }\n\n  function useThrottleFn(fn, ms = 200, trailing = false, leading = true) {\n    return createFilterWrapper(throttleFilter(ms, trailing, leading), fn);\n  }\n\n  function refThrottled(value, delay = 200, trailing = true, leading = true) {\n    if (delay <= 0)\n      return value;\n    const throttled = vueDemi.ref(value.value);\n    const updater = useThrottleFn(() => {\n      throttled.value = value.value;\n    }, delay, trailing, leading);\n    vueDemi.watch(value, () => updater());\n    return throttled;\n  }\n\n  function refWithControl(initial, options = {}) {\n    let source = initial;\n    let track;\n    let trigger;\n    const ref = vueDemi.customRef((_track, _trigger) => {\n      track = _track;\n      trigger = _trigger;\n      return {\n        get() {\n          return get();\n        },\n        set(v) {\n          set(v);\n        }\n      };\n    });\n    function get(tracking = true) {\n      if (tracking)\n        track();\n      return source;\n    }\n    function set(value, triggering = true) {\n      var _a, _b;\n      if (value === source)\n        return;\n      const old = source;\n      if (((_a = options.onBeforeChange) == null ? void 0 : _a.call(options, value, old)) === false)\n        return;\n      source = value;\n      (_b = options.onChanged) == null ? void 0 : _b.call(options, value, old);\n      if (triggering)\n        trigger();\n    }\n    const untrackedGet = () => get(false);\n    const silentSet = (v) => set(v, false);\n    const peek = () => get(false);\n    const lay = (v) => set(v, false);\n    return extendRef(ref, {\n      get,\n      set,\n      untrackedGet,\n      silentSet,\n      peek,\n      lay\n    }, { enumerable: true });\n  }\n  const controlledRef = refWithControl;\n\n  function resolveRef(r) {\n    return typeof r === \"function\" ? vueDemi.computed(r) : vueDemi.ref(r);\n  }\n\n  function set(...args) {\n    if (args.length === 2) {\n      const [ref, value] = args;\n      ref.value = value;\n    }\n    if (args.length === 3) {\n      if (vueDemi.isVue2) {\n        vueDemi.set(...args);\n      } else {\n        const [target, key, value] = args;\n        target[key] = value;\n      }\n    }\n  }\n\n  function syncRef(left, right, options = {}) {\n    var _a, _b;\n    const {\n      flush = \"sync\",\n      deep = false,\n      immediate = true,\n      direction = \"both\",\n      transform = {}\n    } = options;\n    let watchLeft;\n    let watchRight;\n    const transformLTR = (_a = transform.ltr) != null ? _a : (v) => v;\n    const transformRTL = (_b = transform.rtl) != null ? _b : (v) => v;\n    if (direction === \"both\" || direction === \"ltr\") {\n      watchLeft = vueDemi.watch(left, (newValue) => right.value = transformLTR(newValue), { flush, deep, immediate });\n    }\n    if (direction === \"both\" || direction === \"rtl\") {\n      watchRight = vueDemi.watch(right, (newValue) => left.value = transformRTL(newValue), { flush, deep, immediate });\n    }\n    return () => {\n      watchLeft == null ? void 0 : watchLeft();\n      watchRight == null ? void 0 : watchRight();\n    };\n  }\n\n  function syncRefs(source, targets, options = {}) {\n    const {\n      flush = \"sync\",\n      deep = false,\n      immediate = true\n    } = options;\n    if (!Array.isArray(targets))\n      targets = [targets];\n    return vueDemi.watch(source, (newValue) => targets.forEach((target) => target.value = newValue), { flush, deep, immediate });\n  }\n\n  var __defProp$7 = Object.defineProperty;\n  var __defProps$5 = Object.defineProperties;\n  var __getOwnPropDescs$5 = Object.getOwnPropertyDescriptors;\n  var __getOwnPropSymbols$9 = Object.getOwnPropertySymbols;\n  var __hasOwnProp$9 = Object.prototype.hasOwnProperty;\n  var __propIsEnum$9 = Object.prototype.propertyIsEnumerable;\n  var __defNormalProp$7 = (obj, key, value) => key in obj ? __defProp$7(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\n  var __spreadValues$7 = (a, b) => {\n    for (var prop in b || (b = {}))\n      if (__hasOwnProp$9.call(b, prop))\n        __defNormalProp$7(a, prop, b[prop]);\n    if (__getOwnPropSymbols$9)\n      for (var prop of __getOwnPropSymbols$9(b)) {\n        if (__propIsEnum$9.call(b, prop))\n          __defNormalProp$7(a, prop, b[prop]);\n      }\n    return a;\n  };\n  var __spreadProps$5 = (a, b) => __defProps$5(a, __getOwnPropDescs$5(b));\n  function toRefs(objectRef) {\n    if (!vueDemi.isRef(objectRef))\n      return vueDemi.toRefs(objectRef);\n    const result = Array.isArray(objectRef.value) ? new Array(objectRef.value.length) : {};\n    for (const key in objectRef.value) {\n      result[key] = vueDemi.customRef(() => ({\n        get() {\n          return objectRef.value[key];\n        },\n        set(v) {\n          if (Array.isArray(objectRef.value)) {\n            const copy = [...objectRef.value];\n            copy[key] = v;\n            objectRef.value = copy;\n          } else {\n            const newObject = __spreadProps$5(__spreadValues$7({}, objectRef.value), { [key]: v });\n            Object.setPrototypeOf(newObject, objectRef.value);\n            objectRef.value = newObject;\n          }\n        }\n      }));\n    }\n    return result;\n  }\n\n  function tryOnBeforeMount(fn, sync = true) {\n    if (vueDemi.getCurrentInstance())\n      vueDemi.onBeforeMount(fn);\n    else if (sync)\n      fn();\n    else\n      vueDemi.nextTick(fn);\n  }\n\n  function tryOnBeforeUnmount(fn) {\n    if (vueDemi.getCurrentInstance())\n      vueDemi.onBeforeUnmount(fn);\n  }\n\n  function tryOnMounted(fn, sync = true) {\n    if (vueDemi.getCurrentInstance())\n      vueDemi.onMounted(fn);\n    else if (sync)\n      fn();\n    else\n      vueDemi.nextTick(fn);\n  }\n\n  function tryOnUnmounted(fn) {\n    if (vueDemi.getCurrentInstance())\n      vueDemi.onUnmounted(fn);\n  }\n\n  function createUntil(r, isNot = false) {\n    function toMatch(condition, { flush = \"sync\", deep = false, timeout, throwOnTimeout } = {}) {\n      let stop = null;\n      const watcher = new Promise((resolve) => {\n        stop = vueDemi.watch(r, (v) => {\n          if (condition(v) !== isNot) {\n            stop == null ? void 0 : stop();\n            resolve(v);\n          }\n        }, {\n          flush,\n          deep,\n          immediate: true\n        });\n      });\n      const promises = [watcher];\n      if (timeout != null) {\n        promises.push(promiseTimeout(timeout, throwOnTimeout).then(() => resolveUnref(r)).finally(() => stop == null ? void 0 : stop()));\n      }\n      return Promise.race(promises);\n    }\n    function toBe(value, options) {\n      if (!vueDemi.isRef(value))\n        return toMatch((v) => v === value, options);\n      const { flush = \"sync\", deep = false, timeout, throwOnTimeout } = options != null ? options : {};\n      let stop = null;\n      const watcher = new Promise((resolve) => {\n        stop = vueDemi.watch([r, value], ([v1, v2]) => {\n          if (isNot !== (v1 === v2)) {\n            stop == null ? void 0 : stop();\n            resolve(v1);\n          }\n        }, {\n          flush,\n          deep,\n          immediate: true\n        });\n      });\n      const promises = [watcher];\n      if (timeout != null) {\n        promises.push(promiseTimeout(timeout, throwOnTimeout).then(() => resolveUnref(r)).finally(() => {\n          stop == null ? void 0 : stop();\n          return resolveUnref(r);\n        }));\n      }\n      return Promise.race(promises);\n    }\n    function toBeTruthy(options) {\n      return toMatch((v) => Boolean(v), options);\n    }\n    function toBeNull(options) {\n      return toBe(null, options);\n    }\n    function toBeUndefined(options) {\n      return toBe(void 0, options);\n    }\n    function toBeNaN(options) {\n      return toMatch(Number.isNaN, options);\n    }\n    function toContains(value, options) {\n      return toMatch((v) => {\n        const array = Array.from(v);\n        return array.includes(value) || array.includes(resolveUnref(value));\n      }, options);\n    }\n    function changed(options) {\n      return changedTimes(1, options);\n    }\n    function changedTimes(n = 1, options) {\n      let count = -1;\n      return toMatch(() => {\n        count += 1;\n        return count >= n;\n      }, options);\n    }\n    if (Array.isArray(resolveUnref(r))) {\n      const instance = {\n        toMatch,\n        toContains,\n        changed,\n        changedTimes,\n        get not() {\n          return createUntil(r, !isNot);\n        }\n      };\n      return instance;\n    } else {\n      const instance = {\n        toMatch,\n        toBe,\n        toBeTruthy,\n        toBeNull,\n        toBeNaN,\n        toBeUndefined,\n        changed,\n        changedTimes,\n        get not() {\n          return createUntil(r, !isNot);\n        }\n      };\n      return instance;\n    }\n  }\n  function until(r) {\n    return createUntil(r);\n  }\n\n  function useArrayEvery(list, fn) {\n    return vueDemi.computed(() => resolveUnref(list).every((element, index, array) => fn(resolveUnref(element), index, array)));\n  }\n\n  function useArrayFilter(list, fn) {\n    return vueDemi.computed(() => resolveUnref(list).map((i) => resolveUnref(i)).filter(fn));\n  }\n\n  function useArrayFind(list, fn) {\n    return vueDemi.computed(() => resolveUnref(resolveUnref(list).find((element, index, array) => fn(resolveUnref(element), index, array))));\n  }\n\n  function useArrayFindIndex(list, fn) {\n    return vueDemi.computed(() => resolveUnref(list).findIndex((element, index, array) => fn(resolveUnref(element), index, array)));\n  }\n\n  function useArrayJoin(list, separator) {\n    return vueDemi.computed(() => resolveUnref(list).map((i) => resolveUnref(i)).join(resolveUnref(separator)));\n  }\n\n  function useArrayMap(list, fn) {\n    return vueDemi.computed(() => resolveUnref(list).map((i) => resolveUnref(i)).map(fn));\n  }\n\n  function useArrayReduce(list, reducer, ...args) {\n    const reduceCallback = (sum, value, index) => reducer(resolveUnref(sum), resolveUnref(value), index);\n    return vueDemi.computed(() => {\n      const resolved = resolveUnref(list);\n      return args.length ? resolved.reduce(reduceCallback, resolveUnref(args[0])) : resolved.reduce(reduceCallback);\n    });\n  }\n\n  function useArraySome(list, fn) {\n    return vueDemi.computed(() => resolveUnref(list).some((element, index, array) => fn(resolveUnref(element), index, array)));\n  }\n\n  function useCounter(initialValue = 0, options = {}) {\n    const count = vueDemi.ref(initialValue);\n    const {\n      max = Infinity,\n      min = -Infinity\n    } = options;\n    const inc = (delta = 1) => count.value = Math.min(max, count.value + delta);\n    const dec = (delta = 1) => count.value = Math.max(min, count.value - delta);\n    const get = () => count.value;\n    const set = (val) => count.value = Math.max(min, Math.min(max, val));\n    const reset = (val = initialValue) => {\n      initialValue = val;\n      return set(val);\n    };\n    return { count, inc, dec, get, set, reset };\n  }\n\n  const REGEX_PARSE = /^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/;\n  const REGEX_FORMAT = /\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a{1,2}|A{1,2}|m{1,2}|s{1,2}|Z{1,2}|SSS/g;\n  const defaultMeridiem = (hours, minutes, isLowercase, hasPeriod) => {\n    let m = hours < 12 ? \"AM\" : \"PM\";\n    if (hasPeriod)\n      m = m.split(\"\").reduce((acc, curr) => acc += `${curr}.`, \"\");\n    return isLowercase ? m.toLowerCase() : m;\n  };\n  const formatDate = (date, formatStr, options = {}) => {\n    var _a;\n    const years = date.getFullYear();\n    const month = date.getMonth();\n    const days = date.getDate();\n    const hours = date.getHours();\n    const minutes = date.getMinutes();\n    const seconds = date.getSeconds();\n    const milliseconds = date.getMilliseconds();\n    const day = date.getDay();\n    const meridiem = (_a = options.customMeridiem) != null ? _a : defaultMeridiem;\n    const matches = {\n      YY: () => String(years).slice(-2),\n      YYYY: () => years,\n      M: () => month + 1,\n      MM: () => `${month + 1}`.padStart(2, \"0\"),\n      MMM: () => date.toLocaleDateString(options.locales, { month: \"short\" }),\n      MMMM: () => date.toLocaleDateString(options.locales, { month: \"long\" }),\n      D: () => String(days),\n      DD: () => `${days}`.padStart(2, \"0\"),\n      H: () => String(hours),\n      HH: () => `${hours}`.padStart(2, \"0\"),\n      h: () => `${hours % 12 || 12}`.padStart(1, \"0\"),\n      hh: () => `${hours % 12 || 12}`.padStart(2, \"0\"),\n      m: () => String(minutes),\n      mm: () => `${minutes}`.padStart(2, \"0\"),\n      s: () => String(seconds),\n      ss: () => `${seconds}`.padStart(2, \"0\"),\n      SSS: () => `${milliseconds}`.padStart(3, \"0\"),\n      d: () => day,\n      dd: () => date.toLocaleDateString(options.locales, { weekday: \"narrow\" }),\n      ddd: () => date.toLocaleDateString(options.locales, { weekday: \"short\" }),\n      dddd: () => date.toLocaleDateString(options.locales, { weekday: \"long\" }),\n      A: () => meridiem(hours, minutes),\n      AA: () => meridiem(hours, minutes, false, true),\n      a: () => meridiem(hours, minutes, true),\n      aa: () => meridiem(hours, minutes, true, true)\n    };\n    return formatStr.replace(REGEX_FORMAT, (match, $1) => $1 || matches[match]());\n  };\n  const normalizeDate = (date) => {\n    if (date === null)\n      return new Date(NaN);\n    if (date === void 0)\n      return new Date();\n    if (date instanceof Date)\n      return new Date(date);\n    if (typeof date === \"string\" && !/Z$/i.test(date)) {\n      const d = date.match(REGEX_PARSE);\n      if (d) {\n        const m = d[2] - 1 || 0;\n        const ms = (d[7] || \"0\").substring(0, 3);\n        return new Date(d[1], m, d[3] || 1, d[4] || 0, d[5] || 0, d[6] || 0, ms);\n      }\n    }\n    return new Date(date);\n  };\n  function useDateFormat(date, formatStr = \"HH:mm:ss\", options = {}) {\n    return vueDemi.computed(() => formatDate(normalizeDate(resolveUnref(date)), resolveUnref(formatStr), options));\n  }\n\n  function useIntervalFn(cb, interval = 1e3, options = {}) {\n    const {\n      immediate = true,\n      immediateCallback = false\n    } = options;\n    let timer = null;\n    const isActive = vueDemi.ref(false);\n    function clean() {\n      if (timer) {\n        clearInterval(timer);\n        timer = null;\n      }\n    }\n    function pause() {\n      isActive.value = false;\n      clean();\n    }\n    function resume() {\n      if (vueDemi.unref(interval) <= 0)\n        return;\n      isActive.value = true;\n      if (immediateCallback)\n        cb();\n      clean();\n      timer = setInterval(cb, resolveUnref(interval));\n    }\n    if (immediate && isClient)\n      resume();\n    if (vueDemi.isRef(interval) || isFunction(interval)) {\n      const stopWatch = vueDemi.watch(interval, () => {\n        if (isActive.value && isClient)\n          resume();\n      });\n      tryOnScopeDispose(stopWatch);\n    }\n    tryOnScopeDispose(pause);\n    return {\n      isActive,\n      pause,\n      resume\n    };\n  }\n\n  var __defProp$6 = Object.defineProperty;\n  var __getOwnPropSymbols$8 = Object.getOwnPropertySymbols;\n  var __hasOwnProp$8 = Object.prototype.hasOwnProperty;\n  var __propIsEnum$8 = Object.prototype.propertyIsEnumerable;\n  var __defNormalProp$6 = (obj, key, value) => key in obj ? __defProp$6(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\n  var __spreadValues$6 = (a, b) => {\n    for (var prop in b || (b = {}))\n      if (__hasOwnProp$8.call(b, prop))\n        __defNormalProp$6(a, prop, b[prop]);\n    if (__getOwnPropSymbols$8)\n      for (var prop of __getOwnPropSymbols$8(b)) {\n        if (__propIsEnum$8.call(b, prop))\n          __defNormalProp$6(a, prop, b[prop]);\n      }\n    return a;\n  };\n  function useInterval(interval = 1e3, options = {}) {\n    const {\n      controls: exposeControls = false,\n      immediate = true,\n      callback\n    } = options;\n    const counter = vueDemi.ref(0);\n    const update = () => counter.value += 1;\n    const controls = useIntervalFn(callback ? () => {\n      update();\n      callback(counter.value);\n    } : update, interval, { immediate });\n    if (exposeControls) {\n      return __spreadValues$6({\n        counter\n      }, controls);\n    } else {\n      return counter;\n    }\n  }\n\n  function useLastChanged(source, options = {}) {\n    var _a;\n    const ms = vueDemi.ref((_a = options.initialValue) != null ? _a : null);\n    vueDemi.watch(source, () => ms.value = timestamp(), options);\n    return ms;\n  }\n\n  function useTimeoutFn(cb, interval, options = {}) {\n    const {\n      immediate = true\n    } = options;\n    const isPending = vueDemi.ref(false);\n    let timer = null;\n    function clear() {\n      if (timer) {\n        clearTimeout(timer);\n        timer = null;\n      }\n    }\n    function stop() {\n      isPending.value = false;\n      clear();\n    }\n    function start(...args) {\n      clear();\n      isPending.value = true;\n      timer = setTimeout(() => {\n        isPending.value = false;\n        timer = null;\n        cb(...args);\n      }, resolveUnref(interval));\n    }\n    if (immediate) {\n      isPending.value = true;\n      if (isClient)\n        start();\n    }\n    tryOnScopeDispose(stop);\n    return {\n      isPending,\n      start,\n      stop\n    };\n  }\n\n  var __defProp$5 = Object.defineProperty;\n  var __getOwnPropSymbols$7 = Object.getOwnPropertySymbols;\n  var __hasOwnProp$7 = Object.prototype.hasOwnProperty;\n  var __propIsEnum$7 = Object.prototype.propertyIsEnumerable;\n  var __defNormalProp$5 = (obj, key, value) => key in obj ? __defProp$5(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\n  var __spreadValues$5 = (a, b) => {\n    for (var prop in b || (b = {}))\n      if (__hasOwnProp$7.call(b, prop))\n        __defNormalProp$5(a, prop, b[prop]);\n    if (__getOwnPropSymbols$7)\n      for (var prop of __getOwnPropSymbols$7(b)) {\n        if (__propIsEnum$7.call(b, prop))\n          __defNormalProp$5(a, prop, b[prop]);\n      }\n    return a;\n  };\n  function useTimeout(interval = 1e3, options = {}) {\n    const {\n      controls: exposeControls = false,\n      callback\n    } = options;\n    const controls = useTimeoutFn(callback != null ? callback : noop, interval, options);\n    const ready = vueDemi.computed(() => !controls.isPending.value);\n    if (exposeControls) {\n      return __spreadValues$5({\n        ready\n      }, controls);\n    } else {\n      return ready;\n    }\n  }\n\n  function useToNumber(value, options = {}) {\n    const {\n      method = \"parseFloat\",\n      radix,\n      nanToZero\n    } = options;\n    return vueDemi.computed(() => {\n      let resolved = resolveUnref(value);\n      if (typeof resolved === \"string\")\n        resolved = Number[method](resolved, radix);\n      if (nanToZero && isNaN(resolved))\n        resolved = 0;\n      return resolved;\n    });\n  }\n\n  function useToString(value) {\n    return vueDemi.computed(() => `${resolveUnref(value)}`);\n  }\n\n  function useToggle(initialValue = false, options = {}) {\n    const {\n      truthyValue = true,\n      falsyValue = false\n    } = options;\n    const valueIsRef = vueDemi.isRef(initialValue);\n    const _value = vueDemi.ref(initialValue);\n    function toggle(value) {\n      if (arguments.length) {\n        _value.value = value;\n        return _value.value;\n      } else {\n        const truthy = resolveUnref(truthyValue);\n        _value.value = _value.value === truthy ? resolveUnref(falsyValue) : truthy;\n        return _value.value;\n      }\n    }\n    if (valueIsRef)\n      return toggle;\n    else\n      return [_value, toggle];\n  }\n\n  function watchArray(source, cb, options) {\n    let oldList = (options == null ? void 0 : options.immediate) ? [] : [\n      ...source instanceof Function ? source() : Array.isArray(source) ? source : vueDemi.unref(source)\n    ];\n    return vueDemi.watch(source, (newList, _, onCleanup) => {\n      const oldListRemains = new Array(oldList.length);\n      const added = [];\n      for (const obj of newList) {\n        let found = false;\n        for (let i = 0; i < oldList.length; i++) {\n          if (!oldListRemains[i] && obj === oldList[i]) {\n            oldListRemains[i] = true;\n            found = true;\n            break;\n          }\n        }\n        if (!found)\n          added.push(obj);\n      }\n      const removed = oldList.filter((_2, i) => !oldListRemains[i]);\n      cb(newList, oldList, added, removed, onCleanup);\n      oldList = [...newList];\n    }, options);\n  }\n\n  var __getOwnPropSymbols$6 = Object.getOwnPropertySymbols;\n  var __hasOwnProp$6 = Object.prototype.hasOwnProperty;\n  var __propIsEnum$6 = Object.prototype.propertyIsEnumerable;\n  var __objRest$5 = (source, exclude) => {\n    var target = {};\n    for (var prop in source)\n      if (__hasOwnProp$6.call(source, prop) && exclude.indexOf(prop) < 0)\n        target[prop] = source[prop];\n    if (source != null && __getOwnPropSymbols$6)\n      for (var prop of __getOwnPropSymbols$6(source)) {\n        if (exclude.indexOf(prop) < 0 && __propIsEnum$6.call(source, prop))\n          target[prop] = source[prop];\n      }\n    return target;\n  };\n  function watchWithFilter(source, cb, options = {}) {\n    const _a = options, {\n      eventFilter = bypassFilter\n    } = _a, watchOptions = __objRest$5(_a, [\n      \"eventFilter\"\n    ]);\n    return vueDemi.watch(source, createFilterWrapper(eventFilter, cb), watchOptions);\n  }\n\n  var __getOwnPropSymbols$5 = Object.getOwnPropertySymbols;\n  var __hasOwnProp$5 = Object.prototype.hasOwnProperty;\n  var __propIsEnum$5 = Object.prototype.propertyIsEnumerable;\n  var __objRest$4 = (source, exclude) => {\n    var target = {};\n    for (var prop in source)\n      if (__hasOwnProp$5.call(source, prop) && exclude.indexOf(prop) < 0)\n        target[prop] = source[prop];\n    if (source != null && __getOwnPropSymbols$5)\n      for (var prop of __getOwnPropSymbols$5(source)) {\n        if (exclude.indexOf(prop) < 0 && __propIsEnum$5.call(source, prop))\n          target[prop] = source[prop];\n      }\n    return target;\n  };\n  function watchAtMost(source, cb, options) {\n    const _a = options, {\n      count\n    } = _a, watchOptions = __objRest$4(_a, [\n      \"count\"\n    ]);\n    const current = vueDemi.ref(0);\n    const stop = watchWithFilter(source, (...args) => {\n      current.value += 1;\n      if (current.value >= resolveUnref(count))\n        vueDemi.nextTick(() => stop());\n      cb(...args);\n    }, watchOptions);\n    return { count: current, stop };\n  }\n\n  var __defProp$4 = Object.defineProperty;\n  var __defProps$4 = Object.defineProperties;\n  var __getOwnPropDescs$4 = Object.getOwnPropertyDescriptors;\n  var __getOwnPropSymbols$4 = Object.getOwnPropertySymbols;\n  var __hasOwnProp$4 = Object.prototype.hasOwnProperty;\n  var __propIsEnum$4 = Object.prototype.propertyIsEnumerable;\n  var __defNormalProp$4 = (obj, key, value) => key in obj ? __defProp$4(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\n  var __spreadValues$4 = (a, b) => {\n    for (var prop in b || (b = {}))\n      if (__hasOwnProp$4.call(b, prop))\n        __defNormalProp$4(a, prop, b[prop]);\n    if (__getOwnPropSymbols$4)\n      for (var prop of __getOwnPropSymbols$4(b)) {\n        if (__propIsEnum$4.call(b, prop))\n          __defNormalProp$4(a, prop, b[prop]);\n      }\n    return a;\n  };\n  var __spreadProps$4 = (a, b) => __defProps$4(a, __getOwnPropDescs$4(b));\n  var __objRest$3 = (source, exclude) => {\n    var target = {};\n    for (var prop in source)\n      if (__hasOwnProp$4.call(source, prop) && exclude.indexOf(prop) < 0)\n        target[prop] = source[prop];\n    if (source != null && __getOwnPropSymbols$4)\n      for (var prop of __getOwnPropSymbols$4(source)) {\n        if (exclude.indexOf(prop) < 0 && __propIsEnum$4.call(source, prop))\n          target[prop] = source[prop];\n      }\n    return target;\n  };\n  function watchDebounced(source, cb, options = {}) {\n    const _a = options, {\n      debounce = 0,\n      maxWait = void 0\n    } = _a, watchOptions = __objRest$3(_a, [\n      \"debounce\",\n      \"maxWait\"\n    ]);\n    return watchWithFilter(source, cb, __spreadProps$4(__spreadValues$4({}, watchOptions), {\n      eventFilter: debounceFilter(debounce, { maxWait })\n    }));\n  }\n\n  var __defProp$3 = Object.defineProperty;\n  var __defProps$3 = Object.defineProperties;\n  var __getOwnPropDescs$3 = Object.getOwnPropertyDescriptors;\n  var __getOwnPropSymbols$3 = Object.getOwnPropertySymbols;\n  var __hasOwnProp$3 = Object.prototype.hasOwnProperty;\n  var __propIsEnum$3 = Object.prototype.propertyIsEnumerable;\n  var __defNormalProp$3 = (obj, key, value) => key in obj ? __defProp$3(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\n  var __spreadValues$3 = (a, b) => {\n    for (var prop in b || (b = {}))\n      if (__hasOwnProp$3.call(b, prop))\n        __defNormalProp$3(a, prop, b[prop]);\n    if (__getOwnPropSymbols$3)\n      for (var prop of __getOwnPropSymbols$3(b)) {\n        if (__propIsEnum$3.call(b, prop))\n          __defNormalProp$3(a, prop, b[prop]);\n      }\n    return a;\n  };\n  var __spreadProps$3 = (a, b) => __defProps$3(a, __getOwnPropDescs$3(b));\n  var __objRest$2 = (source, exclude) => {\n    var target = {};\n    for (var prop in source)\n      if (__hasOwnProp$3.call(source, prop) && exclude.indexOf(prop) < 0)\n        target[prop] = source[prop];\n    if (source != null && __getOwnPropSymbols$3)\n      for (var prop of __getOwnPropSymbols$3(source)) {\n        if (exclude.indexOf(prop) < 0 && __propIsEnum$3.call(source, prop))\n          target[prop] = source[prop];\n      }\n    return target;\n  };\n  function watchIgnorable(source, cb, options = {}) {\n    const _a = options, {\n      eventFilter = bypassFilter\n    } = _a, watchOptions = __objRest$2(_a, [\n      \"eventFilter\"\n    ]);\n    const filteredCb = createFilterWrapper(eventFilter, cb);\n    let ignoreUpdates;\n    let ignorePrevAsyncUpdates;\n    let stop;\n    if (watchOptions.flush === \"sync\") {\n      const ignore = vueDemi.ref(false);\n      ignorePrevAsyncUpdates = () => {\n      };\n      ignoreUpdates = (updater) => {\n        ignore.value = true;\n        updater();\n        ignore.value = false;\n      };\n      stop = vueDemi.watch(source, (...args) => {\n        if (!ignore.value)\n          filteredCb(...args);\n      }, watchOptions);\n    } else {\n      const disposables = [];\n      const ignoreCounter = vueDemi.ref(0);\n      const syncCounter = vueDemi.ref(0);\n      ignorePrevAsyncUpdates = () => {\n        ignoreCounter.value = syncCounter.value;\n      };\n      disposables.push(vueDemi.watch(source, () => {\n        syncCounter.value++;\n      }, __spreadProps$3(__spreadValues$3({}, watchOptions), { flush: \"sync\" })));\n      ignoreUpdates = (updater) => {\n        const syncCounterPrev = syncCounter.value;\n        updater();\n        ignoreCounter.value += syncCounter.value - syncCounterPrev;\n      };\n      disposables.push(vueDemi.watch(source, (...args) => {\n        const ignore = ignoreCounter.value > 0 && ignoreCounter.value === syncCounter.value;\n        ignoreCounter.value = 0;\n        syncCounter.value = 0;\n        if (ignore)\n          return;\n        filteredCb(...args);\n      }, watchOptions));\n      stop = () => {\n        disposables.forEach((fn) => fn());\n      };\n    }\n    return { stop, ignoreUpdates, ignorePrevAsyncUpdates };\n  }\n\n  function watchOnce(source, cb, options) {\n    const stop = vueDemi.watch(source, (...args) => {\n      vueDemi.nextTick(() => stop());\n      return cb(...args);\n    }, options);\n  }\n\n  var __defProp$2 = Object.defineProperty;\n  var __defProps$2 = Object.defineProperties;\n  var __getOwnPropDescs$2 = Object.getOwnPropertyDescriptors;\n  var __getOwnPropSymbols$2 = Object.getOwnPropertySymbols;\n  var __hasOwnProp$2 = Object.prototype.hasOwnProperty;\n  var __propIsEnum$2 = Object.prototype.propertyIsEnumerable;\n  var __defNormalProp$2 = (obj, key, value) => key in obj ? __defProp$2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\n  var __spreadValues$2 = (a, b) => {\n    for (var prop in b || (b = {}))\n      if (__hasOwnProp$2.call(b, prop))\n        __defNormalProp$2(a, prop, b[prop]);\n    if (__getOwnPropSymbols$2)\n      for (var prop of __getOwnPropSymbols$2(b)) {\n        if (__propIsEnum$2.call(b, prop))\n          __defNormalProp$2(a, prop, b[prop]);\n      }\n    return a;\n  };\n  var __spreadProps$2 = (a, b) => __defProps$2(a, __getOwnPropDescs$2(b));\n  var __objRest$1 = (source, exclude) => {\n    var target = {};\n    for (var prop in source)\n      if (__hasOwnProp$2.call(source, prop) && exclude.indexOf(prop) < 0)\n        target[prop] = source[prop];\n    if (source != null && __getOwnPropSymbols$2)\n      for (var prop of __getOwnPropSymbols$2(source)) {\n        if (exclude.indexOf(prop) < 0 && __propIsEnum$2.call(source, prop))\n          target[prop] = source[prop];\n      }\n    return target;\n  };\n  function watchPausable(source, cb, options = {}) {\n    const _a = options, {\n      eventFilter: filter\n    } = _a, watchOptions = __objRest$1(_a, [\n      \"eventFilter\"\n    ]);\n    const { eventFilter, pause, resume, isActive } = pausableFilter(filter);\n    const stop = watchWithFilter(source, cb, __spreadProps$2(__spreadValues$2({}, watchOptions), {\n      eventFilter\n    }));\n    return { stop, pause, resume, isActive };\n  }\n\n  var __defProp$1 = Object.defineProperty;\n  var __defProps$1 = Object.defineProperties;\n  var __getOwnPropDescs$1 = Object.getOwnPropertyDescriptors;\n  var __getOwnPropSymbols$1 = Object.getOwnPropertySymbols;\n  var __hasOwnProp$1 = Object.prototype.hasOwnProperty;\n  var __propIsEnum$1 = Object.prototype.propertyIsEnumerable;\n  var __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\n  var __spreadValues$1 = (a, b) => {\n    for (var prop in b || (b = {}))\n      if (__hasOwnProp$1.call(b, prop))\n        __defNormalProp$1(a, prop, b[prop]);\n    if (__getOwnPropSymbols$1)\n      for (var prop of __getOwnPropSymbols$1(b)) {\n        if (__propIsEnum$1.call(b, prop))\n          __defNormalProp$1(a, prop, b[prop]);\n      }\n    return a;\n  };\n  var __spreadProps$1 = (a, b) => __defProps$1(a, __getOwnPropDescs$1(b));\n  var __objRest = (source, exclude) => {\n    var target = {};\n    for (var prop in source)\n      if (__hasOwnProp$1.call(source, prop) && exclude.indexOf(prop) < 0)\n        target[prop] = source[prop];\n    if (source != null && __getOwnPropSymbols$1)\n      for (var prop of __getOwnPropSymbols$1(source)) {\n        if (exclude.indexOf(prop) < 0 && __propIsEnum$1.call(source, prop))\n          target[prop] = source[prop];\n      }\n    return target;\n  };\n  function watchThrottled(source, cb, options = {}) {\n    const _a = options, {\n      throttle = 0,\n      trailing = true,\n      leading = true\n    } = _a, watchOptions = __objRest(_a, [\n      \"throttle\",\n      \"trailing\",\n      \"leading\"\n    ]);\n    return watchWithFilter(source, cb, __spreadProps$1(__spreadValues$1({}, watchOptions), {\n      eventFilter: throttleFilter(throttle, trailing, leading)\n    }));\n  }\n\n  var __defProp = Object.defineProperty;\n  var __defProps = Object.defineProperties;\n  var __getOwnPropDescs = Object.getOwnPropertyDescriptors;\n  var __getOwnPropSymbols = Object.getOwnPropertySymbols;\n  var __hasOwnProp = Object.prototype.hasOwnProperty;\n  var __propIsEnum = Object.prototype.propertyIsEnumerable;\n  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\n  var __spreadValues = (a, b) => {\n    for (var prop in b || (b = {}))\n      if (__hasOwnProp.call(b, prop))\n        __defNormalProp(a, prop, b[prop]);\n    if (__getOwnPropSymbols)\n      for (var prop of __getOwnPropSymbols(b)) {\n        if (__propIsEnum.call(b, prop))\n          __defNormalProp(a, prop, b[prop]);\n      }\n    return a;\n  };\n  var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\n  function watchTriggerable(source, cb, options = {}) {\n    let cleanupFn;\n    function onEffect() {\n      if (!cleanupFn)\n        return;\n      const fn = cleanupFn;\n      cleanupFn = void 0;\n      fn();\n    }\n    function onCleanup(callback) {\n      cleanupFn = callback;\n    }\n    const _cb = (value, oldValue) => {\n      onEffect();\n      return cb(value, oldValue, onCleanup);\n    };\n    const res = watchIgnorable(source, _cb, options);\n    const { ignoreUpdates } = res;\n    const trigger = () => {\n      let res2;\n      ignoreUpdates(() => {\n        res2 = _cb(getWatchSources(source), getOldValue(source));\n      });\n      return res2;\n    };\n    return __spreadProps(__spreadValues({}, res), {\n      trigger\n    });\n  }\n  function getWatchSources(sources) {\n    if (vueDemi.isReactive(sources))\n      return sources;\n    if (Array.isArray(sources))\n      return sources.map((item) => getOneWatchSource(item));\n    return getOneWatchSource(sources);\n  }\n  function getOneWatchSource(source) {\n    return typeof source === \"function\" ? source() : vueDemi.unref(source);\n  }\n  function getOldValue(source) {\n    return Array.isArray(source) ? source.map(() => void 0) : void 0;\n  }\n\n  function whenever(source, cb, options) {\n    return vueDemi.watch(source, (v, ov, onInvalidate) => {\n      if (v)\n        cb(v, ov, onInvalidate);\n    }, options);\n  }\n\n  exports.__onlyVue27Plus = __onlyVue27Plus;\n  exports.__onlyVue3 = __onlyVue3;\n  exports.assert = assert;\n  exports.autoResetRef = refAutoReset;\n  exports.bypassFilter = bypassFilter;\n  exports.clamp = clamp;\n  exports.computedEager = computedEager;\n  exports.computedWithControl = computedWithControl;\n  exports.containsProp = containsProp;\n  exports.controlledComputed = computedWithControl;\n  exports.controlledRef = controlledRef;\n  exports.createEventHook = createEventHook;\n  exports.createFilterWrapper = createFilterWrapper;\n  exports.createGlobalState = createGlobalState;\n  exports.createInjectionState = createInjectionState;\n  exports.createReactiveFn = reactify;\n  exports.createSharedComposable = createSharedComposable;\n  exports.createSingletonPromise = createSingletonPromise;\n  exports.debounceFilter = debounceFilter;\n  exports.debouncedRef = refDebounced;\n  exports.debouncedWatch = watchDebounced;\n  exports.directiveHooks = directiveHooks;\n  exports.eagerComputed = computedEager;\n  exports.extendRef = extendRef;\n  exports.formatDate = formatDate;\n  exports.get = get;\n  exports.hasOwn = hasOwn;\n  exports.identity = identity;\n  exports.ignorableWatch = watchIgnorable;\n  exports.increaseWithUnit = increaseWithUnit;\n  exports.invoke = invoke;\n  exports.isBoolean = isBoolean;\n  exports.isClient = isClient;\n  exports.isDef = isDef;\n  exports.isDefined = isDefined;\n  exports.isFunction = isFunction;\n  exports.isIOS = isIOS;\n  exports.isNumber = isNumber;\n  exports.isObject = isObject;\n  exports.isString = isString;\n  exports.isWindow = isWindow;\n  exports.makeDestructurable = makeDestructurable;\n  exports.noop = noop;\n  exports.normalizeDate = normalizeDate;\n  exports.now = now;\n  exports.objectPick = objectPick;\n  exports.pausableFilter = pausableFilter;\n  exports.pausableWatch = watchPausable;\n  exports.promiseTimeout = promiseTimeout;\n  exports.rand = rand;\n  exports.reactify = reactify;\n  exports.reactifyObject = reactifyObject;\n  exports.reactiveComputed = reactiveComputed;\n  exports.reactiveOmit = reactiveOmit;\n  exports.reactivePick = reactivePick;\n  exports.refAutoReset = refAutoReset;\n  exports.refDebounced = refDebounced;\n  exports.refDefault = refDefault;\n  exports.refThrottled = refThrottled;\n  exports.refWithControl = refWithControl;\n  exports.resolveRef = resolveRef;\n  exports.resolveUnref = resolveUnref;\n  exports.set = set;\n  exports.syncRef = syncRef;\n  exports.syncRefs = syncRefs;\n  exports.throttleFilter = throttleFilter;\n  exports.throttledRef = refThrottled;\n  exports.throttledWatch = watchThrottled;\n  exports.timestamp = timestamp;\n  exports.toReactive = toReactive;\n  exports.toRefs = toRefs;\n  exports.tryOnBeforeMount = tryOnBeforeMount;\n  exports.tryOnBeforeUnmount = tryOnBeforeUnmount;\n  exports.tryOnMounted = tryOnMounted;\n  exports.tryOnScopeDispose = tryOnScopeDispose;\n  exports.tryOnUnmounted = tryOnUnmounted;\n  exports.until = until;\n  exports.useArrayEvery = useArrayEvery;\n  exports.useArrayFilter = useArrayFilter;\n  exports.useArrayFind = useArrayFind;\n  exports.useArrayFindIndex = useArrayFindIndex;\n  exports.useArrayJoin = useArrayJoin;\n  exports.useArrayMap = useArrayMap;\n  exports.useArrayReduce = useArrayReduce;\n  exports.useArraySome = useArraySome;\n  exports.useCounter = useCounter;\n  exports.useDateFormat = useDateFormat;\n  exports.useDebounce = refDebounced;\n  exports.useDebounceFn = useDebounceFn;\n  exports.useInterval = useInterval;\n  exports.useIntervalFn = useIntervalFn;\n  exports.useLastChanged = useLastChanged;\n  exports.useThrottle = refThrottled;\n  exports.useThrottleFn = useThrottleFn;\n  exports.useTimeout = useTimeout;\n  exports.useTimeoutFn = useTimeoutFn;\n  exports.useToNumber = useToNumber;\n  exports.useToString = useToString;\n  exports.useToggle = useToggle;\n  exports.watchArray = watchArray;\n  exports.watchAtMost = watchAtMost;\n  exports.watchDebounced = watchDebounced;\n  exports.watchIgnorable = watchIgnorable;\n  exports.watchOnce = watchOnce;\n  exports.watchPausable = watchPausable;\n  exports.watchThrottled = watchThrottled;\n  exports.watchTriggerable = watchTriggerable;\n  exports.watchWithFilter = watchWithFilter;\n  exports.whenever = whenever;\n\n})(this.VueUse = this.VueUse || {}, VueDemi);\n/index.iife.min.js^Kvar VueDemi=function(o,i,F){if(o.install)return o;if(!i)return console.error(\"[vue-demi] no Vue instance found, please be sure to import `vue` before `vue-demi`.\"),o;if(i.version.slice(0,4)===\"2.7.\"){let O=function(w,A){var g,C={},N={config:i.config,use:i.use.bind(i),mixin:i.mixin.bind(i),component:i.component.bind(i),provide:function(b,$){return C[b]=$,this},directive:function(b,$){return $?(i.directive(b,$),N):i.directive(b)},mount:function(b,$){return g||(g=new i(Object.assign({propsData:A},w,{provide:Object.assign(C,w.provide)})),g.$mount(b,$),g)},unmount:function(){g&&(g.$destroy(),g=void 0)}};return N};var zt=O;for(var P in i)o[P]=i[P];o.isVue2=!0,o.isVue3=!1,o.install=function(){},o.Vue=i,o.Vue2=i,o.version=i.version,o.warn=i.util.warn,o.createApp=O}else if(i.version.slice(0,2)===\"2.\")if(F){for(var P in F)o[P]=F[P];o.isVue2=!0,o.isVue3=!1,o.install=function(){},o.Vue=i,o.Vue2=i,o.version=i.version}else console.error(\"[vue-demi] no VueCompositionAPI instance found, please be sure to import `@vue/composition-api` before `vue-demi`.\");else if(i.version.slice(0,2)===\"3.\"){for(var P in i)o[P]=i[P];o.isVue2=!1,o.isVue3=!0,o.install=function(){},o.Vue=i,o.Vue2=void 0,o.version=i.version,o.set=function(O,w,A){return Array.isArray(O)?(O.length=Math.max(O.length,w),O.splice(w,1,A),A):(O[w]=A,A)},o.del=function(O,w){if(Array.isArray(O)){O.splice(w,1);return}delete O[w]}}else console.error(\"[vue-demi] Vue version \"+i.version+\" is unsupported.\");return o}(this.VueDemi=this.VueDemi||(typeof VueDemi!=\"undefined\"?VueDemi:{}),this.Vue||(typeof Vue!=\"undefined\"?Vue:void 0),this.VueCompositionAPI||(typeof VueCompositionAPI!=\"undefined\"?VueCompositionAPI:void 0));(function(o,i){\"use strict\";var F=Object.defineProperty,P=Object.defineProperties,zt=Object.getOwnPropertyDescriptors,O=Object.getOwnPropertySymbols,w=Object.prototype.hasOwnProperty,A=Object.prototype.propertyIsEnumerable,g=(t,e,r)=>e in t?F(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r,C=(t,e)=>{for(var r in e||(e={}))w.call(e,r)&&g(t,r,e[r]);if(O)for(var r of O(e))A.call(e,r)&&g(t,r,e[r]);return t},N=(t,e)=>P(t,zt(e));function b(t,e){var r;const n=i.shallowRef();return i.watchEffect(()=>{n.value=t()},N(C({},e),{flush:(r=e==null?void 0:e.flush)!=null?r:\"sync\"})),i.readonly(n)}var $;const E=typeof window!=\"undefined\",Zt=t=>typeof t!=\"undefined\",Jt=(t,...e)=>{t||console.warn(...e)},D=Object.prototype.toString,Xt=t=>typeof t==\"boolean\",W=t=>typeof t==\"function\",qt=t=>typeof t==\"number\",Kt=t=>typeof t==\"string\",Qt=t=>D.call(t)===\"[object Object]\",Vt=t=>typeof window!=\"undefined\"&&D.call(t)===\"[object Window]\",Dt=()=>Date.now(),x=()=>+Date.now(),xt=(t,e,r)=>Math.min(r,Math.max(e,t)),tt=()=>{},te=(t,e)=>(t=Math.ceil(t),e=Math.floor(e),Math.floor(Math.random()*(e-t+1))+t),ee=E&&(($=window==null?void 0:window.navigator)==null?void 0:$.userAgent)&&/iP(ad|hone|od)/.test(window.navigator.userAgent),re=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);function y(t){return typeof t==\"function\"?t():i.unref(t)}function M(t,e){function r(...n){t(()=>e.apply(this,n),{fn:e,thisArg:this,args:n})}return r}const U=t=>t();function G(t,e={}){let r,n;return l=>{const c=y(t),u=y(e.maxWait);if(r&&clearTimeout(r),c<=0||u!==void 0&&u<=0)return n&&(clearTimeout(n),n=null),l();u&&!n&&(n=setTimeout(()=>{r&&clearTimeout(r),n=null,l()},u)),r=setTimeout(()=>{n&&clearTimeout(n),n=null,l()},c)}}function z(t,e=!0,r=!0){let n=0,a,l=!0;const c=()=>{a&&(clearTimeout(a),a=void 0)};return d=>{const _=y(t),s=Date.now()-n;if(c(),_<=0)return n=Date.now(),d();s>_&&(r||!l)?(n=Date.now(),d()):e&&(a=setTimeout(()=>{n=Date.now(),l=!0,c(),d()},_-s)),!r&&!a&&(a=setTimeout(()=>l=!0,_)),l=!1}}function et(t=U){const e=i.ref(!0);function r(){e.value=!1}function n(){e.value=!0}return{isActive:e,pause:r,resume:n,eventFilter:(...l)=>{e.value&&t(...l)}}}function ne(t=\"this function\"){if(!i.isVue3)throw new Error(`[VueUse] ${t} is only works on Vue 3.`)}function rt(t=\"this function\"){if(!(i.isVue3||i.version.startsWith(\"2.7.\")))throw new Error(`[VueUse] ${t} is only works on Vue 2.7 or above.`)}const oe={mounted:i.isVue3?\"mounted\":\"inserted\",updated:i.isVue3?\"updated\":\"componentUpdated\",unmounted:i.isVue3?\"unmounted\":\"unbind\"};function Z(t,e=!1,r=\"Timeout\"){return new Promise((n,a)=>{setTimeout(e?()=>a(r):n,t)})}function ae(t){return t}function ie(t){let e;function r(){return e||(e=t()),e}return r.reset=async()=>{const n=e;e=void 0,n&&await n},r}function le(t){return t()}function ce(t,...e){return e.some(r=>r in t)}function ue(t,e){var r;if(typeof t==\"number\")return t+e;const n=((r=t.match(/^-?[0-9]+\\.?[0-9]*/))==null?void 0:r[0])||\"\",a=t.slice(n.length),l=parseFloat(n)+e;return Number.isNaN(l)?t:l+a}function se(t,e,r=!1){return e.reduce((n,a)=>(a in t&&(!r||t[a]!==void 0)&&(n[a]=t[a]),n),{})}function nt(t,e){let r,n,a;const l=i.ref(!0),c=()=>{l.value=!0,a()};i.watch(t,c,{flush:\"sync\"});const u=W(e)?e:e.get,d=W(e)?void 0:e.set,_=i.customRef((s,f)=>(n=s,a=f,{get(){return l.value&&(r=u(),l.value=!1),n(),r},set(p){d==null||d(p)}}));return Object.isExtensible(_)&&(_.trigger=c),_}function j(t){return i.getCurrentScope()?(i.onScopeDispose(t),!0):!1}function fe(){const t=[],e=a=>{const l=t.indexOf(a);l!==-1&&t.splice(l,1)};return{on:a=>{t.push(a);const l=()=>e(a);return j(l),{off:l}},off:e,trigger:a=>{t.forEach(l=>l(a))}}}function de(t){let e=!1,r;const n=i.effectScope(!0);return()=>(e||(r=n.run(t),e=!0),r)}function pe(t){const e=Symbol(\"InjectionState\");return[(...a)=>{i.provide(e,t(...a))},()=>i.inject(e)]}function ye(t){let e=0,r,n;const a=()=>{e-=1,n&&e<=0&&(n.stop(),r=void 0,n=void 0)};return(...l)=>(e+=1,r||(n=i.effectScope(!0),r=n.run(()=>t(...l))),j(a),r)}function ot(t,e,{enumerable:r=!1,unwrap:n=!0}={}){rt();for(const[a,l]of Object.entries(e))a!==\"value\"&&(i.isRef(l)&&n?Object.defineProperty(t,a,{get(){return l.value},set(c){l.value=c},enumerable:r}):Object.defineProperty(t,a,{value:l,enumerable:r}));return t}function _e(t,e){return e==null?i.unref(t):i.unref(t)[e]}function ve(t){return i.unref(t)!=null}var he=Object.defineProperty,at=Object.getOwnPropertySymbols,Oe=Object.prototype.hasOwnProperty,we=Object.prototype.propertyIsEnumerable,it=(t,e,r)=>e in t?he(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r,ge=(t,e)=>{for(var r in e||(e={}))Oe.call(e,r)&&it(t,r,e[r]);if(at)for(var r of at(e))we.call(e,r)&&it(t,r,e[r]);return t};function Pe(t,e){if(typeof Symbol!=\"undefined\"){const r=ge({},t);return Object.defineProperty(r,Symbol.iterator,{enumerable:!1,value(){let n=0;return{next:()=>({value:e[n++],done:n>e.length})}}}),r}else return Object.assign([...e],t)}function J(t,e){const r=(e==null?void 0:e.computedGetter)===!1?i.unref:y;return function(...n){return i.computed(()=>t.apply(this,n.map(a=>r(a))))}}function me(t,e={}){let r=[],n;if(Array.isArray(e))r=e;else{n=e;const{includeOwnProperties:a=!0}=e;r.push(...Object.keys(t)),a&&r.push(...Object.getOwnPropertyNames(t))}return Object.fromEntries(r.map(a=>{const l=t[a];return[a,typeof l==\"function\"?J(l.bind(t),n):l]}))}function lt(t){if(!i.isRef(t))return i.reactive(t);const e=new Proxy({},{get(r,n,a){return i.unref(Reflect.get(t.value,n,a))},set(r,n,a){return i.isRef(t.value[n])&&!i.isRef(a)?t.value[n].value=a:t.value[n]=a,!0},deleteProperty(r,n){return Reflect.deleteProperty(t.value,n)},has(r,n){return Reflect.has(t.value,n)},ownKeys(){return Object.keys(t.value)},getOwnPropertyDescriptor(){return{enumerable:!0,configurable:!0}}});return i.reactive(e)}function ct(t){return lt(i.computed(t))}function be(t,...e){const r=e.flat();return ct(()=>Object.fromEntries(Object.entries(i.toRefs(t)).filter(n=>!r.includes(n[0]))))}function $e(t,...e){const r=e.flat();return i.reactive(Object.fromEntries(r.map(n=>[n,i.toRef(t,n)])))}function ut(t,e=1e4){return i.customRef((r,n)=>{let a=t,l;const c=()=>setTimeout(()=>{a=t,n()},y(e));return j(()=>{clearTimeout(l)}),{get(){return r(),a},set(u){a=u,n(),clearTimeout(l),l=c()}}})}function st(t,e=200,r={}){return M(G(e,r),t)}function X(t,e=200,r={}){const n=i.ref(t.value),a=st(()=>{n.value=t.value},e,r);return i.watch(t,()=>a()),n}function Se(t,e){return i.computed({get(){var r;return(r=t.value)!=null?r:e},set(r){t.value=r}})}function ft(t,e=200,r=!1,n=!0){return M(z(e,r,n),t)}function q(t,e=200,r=!0,n=!0){if(e<=0)return t;const a=i.ref(t.value),l=ft(()=>{a.value=t.value},e,r,n);return i.watch(t,()=>l()),a}function dt(t,e={}){let r=t,n,a;const l=i.customRef((p,h)=>(n=p,a=h,{get(){return c()},set(v){u(v)}}));function c(p=!0){return p&&n(),r}function u(p,h=!0){var v,S;if(p===r)return;const m=r;((v=e.onBeforeChange)==null?void 0:v.call(e,p,m))!==!1&&(r=p,(S=e.onChanged)==null||S.call(e,p,m),h&&a())}return ot(l,{get:c,set:u,untrackedGet:()=>c(!1),silentSet:p=>u(p,!1),peek:()=>c(!1),lay:p=>u(p,!1)},{enumerable:!0})}const Ae=dt;function je(t){return typeof t==\"function\"?i.computed(t):i.ref(t)}function Ie(...t){if(t.length===2){const[e,r]=t;e.value=r}if(t.length===3)if(i.isVue2)i.set(...t);else{const[e,r,n]=t;e[r]=n}}function Te(t,e,r={}){var n,a;const{flush:l=\"sync\",deep:c=!1,immediate:u=!0,direction:d=\"both\",transform:_={}}=r;let s,f;const p=(n=_.ltr)!=null?n:v=>v,h=(a=_.rtl)!=null?a:v=>v;return(d===\"both\"||d===\"ltr\")&&(s=i.watch(t,v=>e.value=p(v),{flush:l,deep:c,immediate:u})),(d===\"both\"||d===\"rtl\")&&(f=i.watch(e,v=>t.value=h(v),{flush:l,deep:c,immediate:u})),()=>{s==null||s(),f==null||f()}}function Fe(t,e,r={}){const{flush:n=\"sync\",deep:a=!1,immediate:l=!0}=r;return Array.isArray(e)||(e=[e]),i.watch(t,c=>e.forEach(u=>u.value=c),{flush:n,deep:a,immediate:l})}var Ee=Object.defineProperty,Me=Object.defineProperties,Re=Object.getOwnPropertyDescriptors,pt=Object.getOwnPropertySymbols,Ce=Object.prototype.hasOwnProperty,Ne=Object.prototype.propertyIsEnumerable,yt=(t,e,r)=>e in t?Ee(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r,We=(t,e)=>{for(var r in e||(e={}))Ce.call(e,r)&&yt(t,r,e[r]);if(pt)for(var r of pt(e))Ne.call(e,r)&&yt(t,r,e[r]);return t},Ue=(t,e)=>Me(t,Re(e));function Be(t){if(!i.isRef(t))return i.toRefs(t);const e=Array.isArray(t.value)?new Array(t.value.length):{};for(const r in t.value)e[r]=i.customRef(()=>({get(){return t.value[r]},set(n){if(Array.isArray(t.value)){const a=[...t.value];a[r]=n,t.value=a}else{const a=Ue(We({},t.value),{[r]:n});Object.setPrototypeOf(a,t.value),t.value=a}}}));return e}function Le(t,e=!0){i.getCurrentInstance()?i.onBeforeMount(t):e?t():i.nextTick(t)}function He(t){i.getCurrentInstance()&&i.onBeforeUnmount(t)}function Ye(t,e=!0){i.getCurrentInstance()?i.onMounted(t):e?t():i.nextTick(t)}function ke(t){i.getCurrentInstance()&&i.onUnmounted(t)}function K(t,e=!1){function r(f,{flush:p=\"sync\",deep:h=!1,timeout:v,throwOnTimeout:S}={}){let m=null;const V=[new Promise(k=>{m=i.watch(t,T=>{f(T)!==e&&(m==null||m(),k(T))},{flush:p,deep:h,immediate:!0})})];return v!=null&&V.push(Z(v,S).then(()=>y(t)).finally(()=>m==null?void 0:m())),Promise.race(V)}function n(f,p){if(!i.isRef(f))return r(T=>T===f,p);const{flush:h=\"sync\",deep:v=!1,timeout:S,throwOnTimeout:m}=p??{};let I=null;const k=[new Promise(T=>{I=i.watch([t,f],([Gt,cn])=>{e!==(Gt===cn)&&(I==null||I(),T(Gt))},{flush:h,deep:v,immediate:!0})})];return S!=null&&k.push(Z(S,m).then(()=>y(t)).finally(()=>(I==null||I(),y(t)))),Promise.race(k)}function a(f){return r(p=>Boolean(p),f)}function l(f){return n(null,f)}function c(f){return n(void 0,f)}function u(f){return r(Number.isNaN,f)}function d(f,p){return r(h=>{const v=Array.from(h);return v.includes(f)||v.includes(y(f))},p)}function _(f){return s(1,f)}function s(f=1,p){let h=-1;return r(()=>(h+=1,h>=f),p)}return Array.isArray(y(t))?{toMatch:r,toContains:d,changed:_,changedTimes:s,get not(){return K(t,!e)}}:{toMatch:r,toBe:n,toBeTruthy:a,toBeNull:l,toBeNaN:u,toBeUndefined:c,changed:_,changedTimes:s,get not(){return K(t,!e)}}}function Ge(t){return K(t)}function ze(t,e){return i.computed(()=>y(t).every((r,n,a)=>e(y(r),n,a)))}function Ze(t,e){return i.computed(()=>y(t).map(r=>y(r)).filter(e))}function Je(t,e){return i.computed(()=>y(y(t).find((r,n,a)=>e(y(r),n,a))))}function Xe(t,e){return i.computed(()=>y(t).findIndex((r,n,a)=>e(y(r),n,a)))}function qe(t,e){return i.computed(()=>y(t).map(r=>y(r)).join(y(e)))}function Ke(t,e){return i.computed(()=>y(t).map(r=>y(r)).map(e))}function Qe(t,e,...r){const n=(a,l,c)=>e(y(a),y(l),c);return i.computed(()=>{const a=y(t);return r.length?a.reduce(n,y(r[0])):a.reduce(n)})}function Ve(t,e){return i.computed(()=>y(t).some((r,n,a)=>e(y(r),n,a)))}function De(t=0,e={}){const r=i.ref(t),{max:n=1/0,min:a=-1/0}=e,l=(s=1)=>r.value=Math.min(n,r.value+s),c=(s=1)=>r.value=Math.max(a,r.value-s),u=()=>r.value,d=s=>r.value=Math.max(a,Math.min(n,s));return{count:r,inc:l,dec:c,get:u,set:d,reset:(s=t)=>(t=s,d(s))}}const xe=/^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/,tr=/\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a{1,2}|A{1,2}|m{1,2}|s{1,2}|Z{1,2}|SSS/g,er=(t,e,r,n)=>{let a=t<12?\"AM\":\"PM\";return n&&(a=a.split(\"\").reduce((l,c)=>l+=`${c}.`,\"\")),r?a.toLowerCase():a},_t=(t,e,r={})=>{var n;const a=t.getFullYear(),l=t.getMonth(),c=t.getDate(),u=t.getHours(),d=t.getMinutes(),_=t.getSeconds(),s=t.getMilliseconds(),f=t.getDay(),p=(n=r.customMeridiem)!=null?n:er,h={YY:()=>String(a).slice(-2),YYYY:()=>a,M:()=>l+1,MM:()=>`${l+1}`.padStart(2,\"0\"),MMM:()=>t.toLocaleDateString(r.locales,{month:\"short\"}),MMMM:()=>t.toLocaleDateString(r.locales,{month:\"long\"}),D:()=>String(c),DD:()=>`${c}`.padStart(2,\"0\"),H:()=>String(u),HH:()=>`${u}`.padStart(2,\"0\"),h:()=>`${u%12||12}`.padStart(1,\"0\"),hh:()=>`${u%12||12}`.padStart(2,\"0\"),m:()=>String(d),mm:()=>`${d}`.padStart(2,\"0\"),s:()=>String(_),ss:()=>`${_}`.padStart(2,\"0\"),SSS:()=>`${s}`.padStart(3,\"0\"),d:()=>f,dd:()=>t.toLocaleDateString(r.locales,{weekday:\"narrow\"}),ddd:()=>t.toLocaleDateString(r.locales,{weekday:\"short\"}),dddd:()=>t.toLocaleDateString(r.locales,{weekday:\"long\"}),A:()=>p(u,d),AA:()=>p(u,d,!1,!0),a:()=>p(u,d,!0),aa:()=>p(u,d,!0,!0)};return e.replace(tr,(v,S)=>S||h[v]())},vt=t=>{if(t===null)return new Date(NaN);if(t===void 0)return new Date;if(t instanceof Date)return new Date(t);if(typeof t==\"string\"&&!/Z$/i.test(t)){const e=t.match(xe);if(e){const r=e[2]-1||0,n=(e[7]||\"0\").substring(0,3);return new Date(e[1],r,e[3]||1,e[4]||0,e[5]||0,e[6]||0,n)}}return new Date(t)};function rr(t,e=\"HH:mm:ss\",r={}){return i.computed(()=>_t(vt(y(t)),y(e),r))}function ht(t,e=1e3,r={}){const{immediate:n=!0,immediateCallback:a=!1}=r;let l=null;const c=i.ref(!1);function u(){l&&(clearInterval(l),l=null)}function d(){c.value=!1,u()}function _(){i.unref(e)<=0||(c.value=!0,a&&t(),u(),l=setInterval(t,y(e)))}if(n&&E&&_(),i.isRef(e)||W(e)){const s=i.watch(e,()=>{c.value&&E&&_()});j(s)}return j(d),{isActive:c,pause:d,resume:_}}var nr=Object.defineProperty,Ot=Object.getOwnPropertySymbols,or=Object.prototype.hasOwnProperty,ar=Object.prototype.propertyIsEnumerable,wt=(t,e,r)=>e in t?nr(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r,ir=(t,e)=>{for(var r in e||(e={}))or.call(e,r)&&wt(t,r,e[r]);if(Ot)for(var r of Ot(e))ar.call(e,r)&&wt(t,r,e[r]);return t};function lr(t=1e3,e={}){const{controls:r=!1,immediate:n=!0,callback:a}=e,l=i.ref(0),c=()=>l.value+=1,u=ht(a?()=>{c(),a(l.value)}:c,t,{immediate:n});return r?ir({counter:l},u):l}function cr(t,e={}){var r;const n=i.ref((r=e.initialValue)!=null?r:null);return i.watch(t,()=>n.value=x(),e),n}function gt(t,e,r={}){const{immediate:n=!0}=r,a=i.ref(!1);let l=null;function c(){l&&(clearTimeout(l),l=null)}function u(){a.value=!1,c()}function d(..._){c(),a.value=!0,l=setTimeout(()=>{a.value=!1,l=null,t(..._)},y(e))}return n&&(a.value=!0,E&&d()),j(u),{isPending:a,start:d,stop:u}}var ur=Object.defineProperty,Pt=Object.getOwnPropertySymbols,sr=Object.prototype.hasOwnProperty,fr=Object.prototype.propertyIsEnumerable,mt=(t,e,r)=>e in t?ur(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r,dr=(t,e)=>{for(var r in e||(e={}))sr.call(e,r)&&mt(t,r,e[r]);if(Pt)for(var r of Pt(e))fr.call(e,r)&&mt(t,r,e[r]);return t};function pr(t=1e3,e={}){const{controls:r=!1,callback:n}=e,a=gt(n??tt,t,e),l=i.computed(()=>!a.isPending.value);return r?dr({ready:l},a):l}function yr(t,e={}){const{method:r=\"parseFloat\",radix:n,nanToZero:a}=e;return i.computed(()=>{let l=y(t);return typeof l==\"string\"&&(l=Number[r](l,n)),a&&isNaN(l)&&(l=0),l})}function _r(t){return i.computed(()=>`${y(t)}`)}function vr(t=!1,e={}){const{truthyValue:r=!0,falsyValue:n=!1}=e,a=i.isRef(t),l=i.ref(t);function c(u){if(arguments.length)return l.value=u,l.value;{const d=y(r);return l.value=l.value===d?y(n):d,l.value}}return a?c:[l,c]}function hr(t,e,r){let n=(r==null?void 0:r.immediate)?[]:[...t instanceof Function?t():Array.isArray(t)?t:i.unref(t)];return i.watch(t,(a,l,c)=>{const u=new Array(n.length),d=[];for(const s of a){let f=!1;for(let p=0;p<n.length;p++)if(!u[p]&&s===n[p]){u[p]=!0,f=!0;break}f||d.push(s)}const _=n.filter((s,f)=>!u[f]);e(a,n,d,_,c),n=[...a]},r)}var bt=Object.getOwnPropertySymbols,Or=Object.prototype.hasOwnProperty,wr=Object.prototype.propertyIsEnumerable,gr=(t,e)=>{var r={};for(var n in t)Or.call(t,n)&&e.indexOf(n)<0&&(r[n]=t[n]);if(t!=null&&bt)for(var n of bt(t))e.indexOf(n)<0&&wr.call(t,n)&&(r[n]=t[n]);return r};function R(t,e,r={}){const n=r,{eventFilter:a=U}=n,l=gr(n,[\"eventFilter\"]);return i.watch(t,M(a,e),l)}var $t=Object.getOwnPropertySymbols,Pr=Object.prototype.hasOwnProperty,mr=Object.prototype.propertyIsEnumerable,br=(t,e)=>{var r={};for(var n in t)Pr.call(t,n)&&e.indexOf(n)<0&&(r[n]=t[n]);if(t!=null&&$t)for(var n of $t(t))e.indexOf(n)<0&&mr.call(t,n)&&(r[n]=t[n]);return r};function $r(t,e,r){const n=r,{count:a}=n,l=br(n,[\"count\"]),c=i.ref(0),u=R(t,(...d)=>{c.value+=1,c.value>=y(a)&&i.nextTick(()=>u()),e(...d)},l);return{count:c,stop:u}}var Sr=Object.defineProperty,Ar=Object.defineProperties,jr=Object.getOwnPropertyDescriptors,B=Object.getOwnPropertySymbols,St=Object.prototype.hasOwnProperty,At=Object.prototype.propertyIsEnumerable,jt=(t,e,r)=>e in t?Sr(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r,Ir=(t,e)=>{for(var r in e||(e={}))St.call(e,r)&&jt(t,r,e[r]);if(B)for(var r of B(e))At.call(e,r)&&jt(t,r,e[r]);return t},Tr=(t,e)=>Ar(t,jr(e)),Fr=(t,e)=>{var r={};for(var n in t)St.call(t,n)&&e.indexOf(n)<0&&(r[n]=t[n]);if(t!=null&&B)for(var n of B(t))e.indexOf(n)<0&&At.call(t,n)&&(r[n]=t[n]);return r};function It(t,e,r={}){const n=r,{debounce:a=0,maxWait:l=void 0}=n,c=Fr(n,[\"debounce\",\"maxWait\"]);return R(t,e,Tr(Ir({},c),{eventFilter:G(a,{maxWait:l})}))}var Er=Object.defineProperty,Mr=Object.defineProperties,Rr=Object.getOwnPropertyDescriptors,L=Object.getOwnPropertySymbols,Tt=Object.prototype.hasOwnProperty,Ft=Object.prototype.propertyIsEnumerable,Et=(t,e,r)=>e in t?Er(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r,Cr=(t,e)=>{for(var r in e||(e={}))Tt.call(e,r)&&Et(t,r,e[r]);if(L)for(var r of L(e))Ft.call(e,r)&&Et(t,r,e[r]);return t},Nr=(t,e)=>Mr(t,Rr(e)),Wr=(t,e)=>{var r={};for(var n in t)Tt.call(t,n)&&e.indexOf(n)<0&&(r[n]=t[n]);if(t!=null&&L)for(var n of L(t))e.indexOf(n)<0&&Ft.call(t,n)&&(r[n]=t[n]);return r};function Q(t,e,r={}){const n=r,{eventFilter:a=U}=n,l=Wr(n,[\"eventFilter\"]),c=M(a,e);let u,d,_;if(l.flush===\"sync\"){const s=i.ref(!1);d=()=>{},u=f=>{s.value=!0,f(),s.value=!1},_=i.watch(t,(...f)=>{s.value||c(...f)},l)}else{const s=[],f=i.ref(0),p=i.ref(0);d=()=>{f.value=p.value},s.push(i.watch(t,()=>{p.value++},Nr(Cr({},l),{flush:\"sync\"}))),u=h=>{const v=p.value;h(),f.value+=p.value-v},s.push(i.watch(t,(...h)=>{const v=f.value>0&&f.value===p.value;f.value=0,p.value=0,!v&&c(...h)},l)),_=()=>{s.forEach(h=>h())}}return{stop:_,ignoreUpdates:u,ignorePrevAsyncUpdates:d}}function Ur(t,e,r){const n=i.watch(t,(...a)=>(i.nextTick(()=>n()),e(...a)),r)}var Br=Object.defineProperty,Lr=Object.defineProperties,Hr=Object.getOwnPropertyDescriptors,H=Object.getOwnPropertySymbols,Mt=Object.prototype.hasOwnProperty,Rt=Object.prototype.propertyIsEnumerable,Ct=(t,e,r)=>e in t?Br(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r,Yr=(t,e)=>{for(var r in e||(e={}))Mt.call(e,r)&&Ct(t,r,e[r]);if(H)for(var r of H(e))Rt.call(e,r)&&Ct(t,r,e[r]);return t},kr=(t,e)=>Lr(t,Hr(e)),Gr=(t,e)=>{var r={};for(var n in t)Mt.call(t,n)&&e.indexOf(n)<0&&(r[n]=t[n]);if(t!=null&&H)for(var n of H(t))e.indexOf(n)<0&&Rt.call(t,n)&&(r[n]=t[n]);return r};function Nt(t,e,r={}){const n=r,{eventFilter:a}=n,l=Gr(n,[\"eventFilter\"]),{eventFilter:c,pause:u,resume:d,isActive:_}=et(a);return{stop:R(t,e,kr(Yr({},l),{eventFilter:c})),pause:u,resume:d,isActive:_}}var zr=Object.defineProperty,Zr=Object.defineProperties,Jr=Object.getOwnPropertyDescriptors,Y=Object.getOwnPropertySymbols,Wt=Object.prototype.hasOwnProperty,Ut=Object.prototype.propertyIsEnumerable,Bt=(t,e,r)=>e in t?zr(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r,Xr=(t,e)=>{for(var r in e||(e={}))Wt.call(e,r)&&Bt(t,r,e[r]);if(Y)for(var r of Y(e))Ut.call(e,r)&&Bt(t,r,e[r]);return t},qr=(t,e)=>Zr(t,Jr(e)),Kr=(t,e)=>{var r={};for(var n in t)Wt.call(t,n)&&e.indexOf(n)<0&&(r[n]=t[n]);if(t!=null&&Y)for(var n of Y(t))e.indexOf(n)<0&&Ut.call(t,n)&&(r[n]=t[n]);return r};function Lt(t,e,r={}){const n=r,{throttle:a=0,trailing:l=!0,leading:c=!0}=n,u=Kr(n,[\"throttle\",\"trailing\",\"leading\"]);return R(t,e,qr(Xr({},u),{eventFilter:z(a,l,c)}))}var Qr=Object.defineProperty,Vr=Object.defineProperties,Dr=Object.getOwnPropertyDescriptors,Ht=Object.getOwnPropertySymbols,xr=Object.prototype.hasOwnProperty,tn=Object.prototype.propertyIsEnumerable,Yt=(t,e,r)=>e in t?Qr(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r,en=(t,e)=>{for(var r in e||(e={}))xr.call(e,r)&&Yt(t,r,e[r]);if(Ht)for(var r of Ht(e))tn.call(e,r)&&Yt(t,r,e[r]);return t},rn=(t,e)=>Vr(t,Dr(e));function nn(t,e,r={}){let n;function a(){if(!n)return;const s=n;n=void 0,s()}function l(s){n=s}const c=(s,f)=>(a(),e(s,f,l)),u=Q(t,c,r),{ignoreUpdates:d}=u,_=()=>{let s;return d(()=>{s=c(on(t),an(t))}),s};return rn(en({},u),{trigger:_})}function on(t){return i.isReactive(t)?t:Array.isArray(t)?t.map(e=>kt(e)):kt(t)}function kt(t){return typeof t==\"function\"?t():i.unref(t)}function an(t){return Array.isArray(t)?t.map(()=>{}):void 0}function ln(t,e,r){return i.watch(t,(n,a,l)=>{n&&e(n,a,l)},r)}o.__onlyVue27Plus=rt,o.__onlyVue3=ne,o.assert=Jt,o.autoResetRef=ut,o.bypassFilter=U,o.clamp=xt,o.computedEager=b,o.computedWithControl=nt,o.containsProp=ce,o.controlledComputed=nt,o.controlledRef=Ae,o.createEventHook=fe,o.createFilterWrapper=M,o.createGlobalState=de,o.createInjectionState=pe,o.createReactiveFn=J,o.createSharedComposable=ye,o.createSingletonPromise=ie,o.debounceFilter=G,o.debouncedRef=X,o.debouncedWatch=It,o.directiveHooks=oe,o.eagerComputed=b,o.extendRef=ot,o.formatDate=_t,o.get=_e,o.hasOwn=re,o.identity=ae,o.ignorableWatch=Q,o.increaseWithUnit=ue,o.invoke=le,o.isBoolean=Xt,o.isClient=E,o.isDef=Zt,o.isDefined=ve,o.isFunction=W,o.isIOS=ee,o.isNumber=qt,o.isObject=Qt,o.isString=Kt,o.isWindow=Vt,o.makeDestructurable=Pe,o.noop=tt,o.normalizeDate=vt,o.now=Dt,o.objectPick=se,o.pausableFilter=et,o.pausableWatch=Nt,o.promiseTimeout=Z,o.rand=te,o.reactify=J,o.reactifyObject=me,o.reactiveComputed=ct,o.reactiveOmit=be,o.reactivePick=$e,o.refAutoReset=ut,o.refDebounced=X,o.refDefault=Se,o.refThrottled=q,o.refWithControl=dt,o.resolveRef=je,o.resolveUnref=y,o.set=Ie,o.syncRef=Te,o.syncRefs=Fe,o.throttleFilter=z,o.throttledRef=q,o.throttledWatch=Lt,o.timestamp=x,o.toReactive=lt,o.toRefs=Be,o.tryOnBeforeMount=Le,o.tryOnBeforeUnmount=He,o.tryOnMounted=Ye,o.tryOnScopeDispose=j,o.tryOnUnmounted=ke,o.until=Ge,o.useArrayEvery=ze,o.useArrayFilter=Ze,o.useArrayFind=Je,o.useArrayFindIndex=Xe,o.useArrayJoin=qe,o.useArrayMap=Ke,o.useArrayReduce=Qe,o.useArraySome=Ve,o.useCounter=De,o.useDateFormat=rr,o.useDebounce=X,o.useDebounceFn=st,o.useInterval=lr,o.useIntervalFn=ht,o.useLastChanged=cr,o.useThrottle=q,o.useThrottleFn=ft,o.useTimeout=pr,o.useTimeoutFn=gt,o.useToNumber=yr,o.useToString=_r,o.useToggle=vr,o.watchArray=hr,o.watchAtMost=$r,o.watchDebounced=It,o.watchIgnorable=Q,o.watchOnce=Ur,o.watchPausable=Nt,o.watchThrottled=Lt,o.watchTriggerable=nn,o.watchWithFilter=R,o.whenever=ln})(this.VueUse=this.VueUse||{},VueDemi);\n/package.json\u0003w{\n  \"name\": \"@vueuse/shared\",\n  \"version\": \"9.9.0\",\n  \"author\": \"Anthony Fu <https://github.com/antfu>\",\n  \"license\": \"MIT\",\n  \"funding\": \"https://github.com/sponsors/antfu\",\n  \"homepage\": \"https://github.com/vueuse/vueuse/tree/main/packages/shared#readme\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/vueuse/vueuse.git\",\n    \"directory\": \"packages/shared\"\n  },\n  \"bugs\": {\n    \"url\": \"https://github.com/vueuse/vueuse/issues\"\n  },\n  \"keywords\": [\n    \"vue\",\n    \"vue-use\",\n    \"utils\"\n  ],\n  \"sideEffects\": false,\n  \"exports\": {\n    \".\": {\n      \"types\": \"./index.d.ts\",\n      \"require\": \"./index.cjs\",\n      \"import\": \"./index.mjs\"\n    },\n    \"./*\": \"./*\"\n  },\n  \"main\": \"./index.cjs\",\n  \"module\": \"./index.mjs\",\n  \"unpkg\": \"./index.iife.min.js\",\n  \"jsdelivr\": \"./index.iife.min.js\",\n  \"types\": \"./index.d.ts\",\n  \"dependencies\": {\n    \"vue-demi\": \"*\"\n  }\n}\n/index.cjs\u0004'use strict';\n\nvar vueDemi = require('vue-demi');\n\nvar __defProp$9 = Object.defineProperty;\nvar __defProps$6 = Object.defineProperties;\nvar __getOwnPropDescs$6 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$b = Object.getOwnPropertySymbols;\nvar __hasOwnProp$b = Object.prototype.hasOwnProperty;\nvar __propIsEnum$b = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$9 = (obj, key, value) => key in obj ? __defProp$9(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$9 = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$b.call(b, prop))\n      __defNormalProp$9(a, prop, b[prop]);\n  if (__getOwnPropSymbols$b)\n    for (var prop of __getOwnPropSymbols$b(b)) {\n      if (__propIsEnum$b.call(b, prop))\n        __defNormalProp$9(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps$6 = (a, b) => __defProps$6(a, __getOwnPropDescs$6(b));\nfunction computedEager(fn, options) {\n  var _a;\n  const result = vueDemi.shallowRef();\n  vueDemi.watchEffect(() => {\n    result.value = fn();\n  }, __spreadProps$6(__spreadValues$9({}, options), {\n    flush: (_a = options == null ? void 0 : options.flush) != null ? _a : \"sync\"\n  }));\n  return vueDemi.readonly(result);\n}\n\nvar _a;\nconst isClient = typeof window !== \"undefined\";\nconst isDef = (val) => typeof val !== \"undefined\";\nconst assert = (condition, ...infos) => {\n  if (!condition)\n    console.warn(...infos);\n};\nconst toString = Object.prototype.toString;\nconst isBoolean = (val) => typeof val === \"boolean\";\nconst isFunction = (val) => typeof val === \"function\";\nconst isNumber = (val) => typeof val === \"number\";\nconst isString = (val) => typeof val === \"string\";\nconst isObject = (val) => toString.call(val) === \"[object Object]\";\nconst isWindow = (val) => typeof window !== \"undefined\" && toString.call(val) === \"[object Window]\";\nconst now = () => Date.now();\nconst timestamp = () => +Date.now();\nconst clamp = (n, min, max) => Math.min(max, Math.max(min, n));\nconst noop = () => {\n};\nconst rand = (min, max) => {\n  min = Math.ceil(min);\n  max = Math.floor(max);\n  return Math.floor(Math.random() * (max - min + 1)) + min;\n};\nconst isIOS = isClient && ((_a = window == null ? void 0 : window.navigator) == null ? void 0 : _a.userAgent) && /iP(ad|hone|od)/.test(window.navigator.userAgent);\nconst hasOwn = (val, key) => Object.prototype.hasOwnProperty.call(val, key);\n\nfunction resolveUnref(r) {\n  return typeof r === \"function\" ? r() : vueDemi.unref(r);\n}\n\nfunction createFilterWrapper(filter, fn) {\n  function wrapper(...args) {\n    filter(() => fn.apply(this, args), { fn, thisArg: this, args });\n  }\n  return wrapper;\n}\nconst bypassFilter = (invoke) => {\n  return invoke();\n};\nfunction debounceFilter(ms, options = {}) {\n  let timer;\n  let maxTimer;\n  const filter = (invoke) => {\n    const duration = resolveUnref(ms);\n    const maxDuration = resolveUnref(options.maxWait);\n    if (timer)\n      clearTimeout(timer);\n    if (duration <= 0 || maxDuration !== void 0 && maxDuration <= 0) {\n      if (maxTimer) {\n        clearTimeout(maxTimer);\n        maxTimer = null;\n      }\n      return invoke();\n    }\n    if (maxDuration && !maxTimer) {\n      maxTimer = setTimeout(() => {\n        if (timer)\n          clearTimeout(timer);\n        maxTimer = null;\n        invoke();\n      }, maxDuration);\n    }\n    timer = setTimeout(() => {\n      if (maxTimer)\n        clearTimeout(maxTimer);\n      maxTimer = null;\n      invoke();\n    }, duration);\n  };\n  return filter;\n}\nfunction throttleFilter(ms, trailing = true, leading = true) {\n  let lastExec = 0;\n  let timer;\n  let isLeading = true;\n  const clear = () => {\n    if (timer) {\n      clearTimeout(timer);\n      timer = void 0;\n    }\n  };\n  const filter = (invoke) => {\n    const duration = resolveUnref(ms);\n    const elapsed = Date.now() - lastExec;\n    clear();\n    if (duration <= 0) {\n      lastExec = Date.now();\n      return invoke();\n    }\n    if (elapsed > duration && (leading || !isLeading)) {\n      lastExec = Date.now();\n      invoke();\n    } else if (trailing) {\n      timer = setTimeout(() => {\n        lastExec = Date.now();\n        isLeading = true;\n        clear();\n        invoke();\n      }, duration - elapsed);\n    }\n    if (!leading && !timer)\n      timer = setTimeout(() => isLeading = true, duration);\n    isLeading = false;\n  };\n  return filter;\n}\nfunction pausableFilter(extendFilter = bypassFilter) {\n  const isActive = vueDemi.ref(true);\n  function pause() {\n    isActive.value = false;\n  }\n  function resume() {\n    isActive.value = true;\n  }\n  const eventFilter = (...args) => {\n    if (isActive.value)\n      extendFilter(...args);\n  };\n  return { isActive, pause, resume, eventFilter };\n}\n\nfunction __onlyVue3(name = \"this function\") {\n  if (vueDemi.isVue3)\n    return;\n  throw new Error(`[VueUse] ${name} is only works on Vue 3.`);\n}\nfunction __onlyVue27Plus(name = \"this function\") {\n  if (vueDemi.isVue3 || vueDemi.version.startsWith(\"2.7.\"))\n    return;\n  throw new Error(`[VueUse] ${name} is only works on Vue 2.7 or above.`);\n}\nconst directiveHooks = {\n  mounted: vueDemi.isVue3 ? \"mounted\" : \"inserted\",\n  updated: vueDemi.isVue3 ? \"updated\" : \"componentUpdated\",\n  unmounted: vueDemi.isVue3 ? \"unmounted\" : \"unbind\"\n};\n\nfunction promiseTimeout(ms, throwOnTimeout = false, reason = \"Timeout\") {\n  return new Promise((resolve, reject) => {\n    if (throwOnTimeout)\n      setTimeout(() => reject(reason), ms);\n    else\n      setTimeout(resolve, ms);\n  });\n}\nfunction identity(arg) {\n  return arg;\n}\nfunction createSingletonPromise(fn) {\n  let _promise;\n  function wrapper() {\n    if (!_promise)\n      _promise = fn();\n    return _promise;\n  }\n  wrapper.reset = async () => {\n    const _prev = _promise;\n    _promise = void 0;\n    if (_prev)\n      await _prev;\n  };\n  return wrapper;\n}\nfunction invoke(fn) {\n  return fn();\n}\nfunction containsProp(obj, ...props) {\n  return props.some((k) => k in obj);\n}\nfunction increaseWithUnit(target, delta) {\n  var _a;\n  if (typeof target === \"number\")\n    return target + delta;\n  const value = ((_a = target.match(/^-?[0-9]+\\.?[0-9]*/)) == null ? void 0 : _a[0]) || \"\";\n  const unit = target.slice(value.length);\n  const result = parseFloat(value) + delta;\n  if (Number.isNaN(result))\n    return target;\n  return result + unit;\n}\nfunction objectPick(obj, keys, omitUndefined = false) {\n  return keys.reduce((n, k) => {\n    if (k in obj) {\n      if (!omitUndefined || obj[k] !== void 0)\n        n[k] = obj[k];\n    }\n    return n;\n  }, {});\n}\n\nfunction computedWithControl(source, fn) {\n  let v = void 0;\n  let track;\n  let trigger;\n  const dirty = vueDemi.ref(true);\n  const update = () => {\n    dirty.value = true;\n    trigger();\n  };\n  vueDemi.watch(source, update, { flush: \"sync\" });\n  const get = isFunction(fn) ? fn : fn.get;\n  const set = isFunction(fn) ? void 0 : fn.set;\n  const result = vueDemi.customRef((_track, _trigger) => {\n    track = _track;\n    trigger = _trigger;\n    return {\n      get() {\n        if (dirty.value) {\n          v = get();\n          dirty.value = false;\n        }\n        track();\n        return v;\n      },\n      set(v2) {\n        set == null ? void 0 : set(v2);\n      }\n    };\n  });\n  if (Object.isExtensible(result))\n    result.trigger = update;\n  return result;\n}\n\nfunction tryOnScopeDispose(fn) {\n  if (vueDemi.getCurrentScope()) {\n    vueDemi.onScopeDispose(fn);\n    return true;\n  }\n  return false;\n}\n\nfunction createEventHook() {\n  const fns = [];\n  const off = (fn) => {\n    const index = fns.indexOf(fn);\n    if (index !== -1)\n      fns.splice(index, 1);\n  };\n  const on = (fn) => {\n    fns.push(fn);\n    const offFn = () => off(fn);\n    tryOnScopeDispose(offFn);\n    return {\n      off: offFn\n    };\n  };\n  const trigger = (param) => {\n    fns.forEach((fn) => fn(param));\n  };\n  return {\n    on,\n    off,\n    trigger\n  };\n}\n\nfunction createGlobalState(stateFactory) {\n  let initialized = false;\n  let state;\n  const scope = vueDemi.effectScope(true);\n  return () => {\n    if (!initialized) {\n      state = scope.run(stateFactory);\n      initialized = true;\n    }\n    return state;\n  };\n}\n\nfunction createInjectionState(composable) {\n  const key = Symbol(\"InjectionState\");\n  const useProvidingState = (...args) => {\n    vueDemi.provide(key, composable(...args));\n  };\n  const useInjectedState = () => vueDemi.inject(key);\n  return [useProvidingState, useInjectedState];\n}\n\nfunction createSharedComposable(composable) {\n  let subscribers = 0;\n  let state;\n  let scope;\n  const dispose = () => {\n    subscribers -= 1;\n    if (scope && subscribers <= 0) {\n      scope.stop();\n      state = void 0;\n      scope = void 0;\n    }\n  };\n  return (...args) => {\n    subscribers += 1;\n    if (!state) {\n      scope = vueDemi.effectScope(true);\n      state = scope.run(() => composable(...args));\n    }\n    tryOnScopeDispose(dispose);\n    return state;\n  };\n}\n\nfunction extendRef(ref, extend, { enumerable = false, unwrap = true } = {}) {\n  __onlyVue27Plus();\n  for (const [key, value] of Object.entries(extend)) {\n    if (key === \"value\")\n      continue;\n    if (vueDemi.isRef(value) && unwrap) {\n      Object.defineProperty(ref, key, {\n        get() {\n          return value.value;\n        },\n        set(v) {\n          value.value = v;\n        },\n        enumerable\n      });\n    } else {\n      Object.defineProperty(ref, key, { value, enumerable });\n    }\n  }\n  return ref;\n}\n\nfunction get(obj, key) {\n  if (key == null)\n    return vueDemi.unref(obj);\n  return vueDemi.unref(obj)[key];\n}\n\nfunction isDefined(v) {\n  return vueDemi.unref(v) != null;\n}\n\nvar __defProp$8 = Object.defineProperty;\nvar __getOwnPropSymbols$a = Object.getOwnPropertySymbols;\nvar __hasOwnProp$a = Object.prototype.hasOwnProperty;\nvar __propIsEnum$a = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$8 = (obj, key, value) => key in obj ? __defProp$8(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$8 = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$a.call(b, prop))\n      __defNormalProp$8(a, prop, b[prop]);\n  if (__getOwnPropSymbols$a)\n    for (var prop of __getOwnPropSymbols$a(b)) {\n      if (__propIsEnum$a.call(b, prop))\n        __defNormalProp$8(a, prop, b[prop]);\n    }\n  return a;\n};\nfunction makeDestructurable(obj, arr) {\n  if (typeof Symbol !== \"undefined\") {\n    const clone = __spreadValues$8({}, obj);\n    Object.defineProperty(clone, Symbol.iterator, {\n      enumerable: false,\n      value() {\n        let index = 0;\n        return {\n          next: () => ({\n            value: arr[index++],\n            done: index > arr.length\n          })\n        };\n      }\n    });\n    return clone;\n  } else {\n    return Object.assign([...arr], obj);\n  }\n}\n\nfunction reactify(fn, options) {\n  const unrefFn = (options == null ? void 0 : options.computedGetter) === false ? vueDemi.unref : resolveUnref;\n  return function(...args) {\n    return vueDemi.computed(() => fn.apply(this, args.map((i) => unrefFn(i))));\n  };\n}\n\nfunction reactifyObject(obj, optionsOrKeys = {}) {\n  let keys = [];\n  let options;\n  if (Array.isArray(optionsOrKeys)) {\n    keys = optionsOrKeys;\n  } else {\n    options = optionsOrKeys;\n    const { includeOwnProperties = true } = optionsOrKeys;\n    keys.push(...Object.keys(obj));\n    if (includeOwnProperties)\n      keys.push(...Object.getOwnPropertyNames(obj));\n  }\n  return Object.fromEntries(keys.map((key) => {\n    const value = obj[key];\n    return [\n      key,\n      typeof value === \"function\" ? reactify(value.bind(obj), options) : value\n    ];\n  }));\n}\n\nfunction toReactive(objectRef) {\n  if (!vueDemi.isRef(objectRef))\n    return vueDemi.reactive(objectRef);\n  const proxy = new Proxy({}, {\n    get(_, p, receiver) {\n      return vueDemi.unref(Reflect.get(objectRef.value, p, receiver));\n    },\n    set(_, p, value) {\n      if (vueDemi.isRef(objectRef.value[p]) && !vueDemi.isRef(value))\n        objectRef.value[p].value = value;\n      else\n        objectRef.value[p] = value;\n      return true;\n    },\n    deleteProperty(_, p) {\n      return Reflect.deleteProperty(objectRef.value, p);\n    },\n    has(_, p) {\n      return Reflect.has(objectRef.value, p);\n    },\n    ownKeys() {\n      return Object.keys(objectRef.value);\n    },\n    getOwnPropertyDescriptor() {\n      return {\n        enumerable: true,\n        configurable: true\n      };\n    }\n  });\n  return vueDemi.reactive(proxy);\n}\n\nfunction reactiveComputed(fn) {\n  return toReactive(vueDemi.computed(fn));\n}\n\nfunction reactiveOmit(obj, ...keys) {\n  const flatKeys = keys.flat();\n  return reactiveComputed(() => Object.fromEntries(Object.entries(vueDemi.toRefs(obj)).filter((e) => !flatKeys.includes(e[0]))));\n}\n\nfunction reactivePick(obj, ...keys) {\n  const flatKeys = keys.flat();\n  return vueDemi.reactive(Object.fromEntries(flatKeys.map((k) => [k, vueDemi.toRef(obj, k)])));\n}\n\nfunction refAutoReset(defaultValue, afterMs = 1e4) {\n  return vueDemi.customRef((track, trigger) => {\n    let value = defaultValue;\n    let timer;\n    const resetAfter = () => setTimeout(() => {\n      value = defaultValue;\n      trigger();\n    }, resolveUnref(afterMs));\n    tryOnScopeDispose(() => {\n      clearTimeout(timer);\n    });\n    return {\n      get() {\n        track();\n        return value;\n      },\n      set(newValue) {\n        value = newValue;\n        trigger();\n        clearTimeout(timer);\n        timer = resetAfter();\n      }\n    };\n  });\n}\n\nfunction useDebounceFn(fn, ms = 200, options = {}) {\n  return createFilterWrapper(debounceFilter(ms, options), fn);\n}\n\nfunction refDebounced(value, ms = 200, options = {}) {\n  const debounced = vueDemi.ref(value.value);\n  const updater = useDebounceFn(() => {\n    debounced.value = value.value;\n  }, ms, options);\n  vueDemi.watch(value, () => updater());\n  return debounced;\n}\n\nfunction refDefault(source, defaultValue) {\n  return vueDemi.computed({\n    get() {\n      var _a;\n      return (_a = source.value) != null ? _a : defaultValue;\n    },\n    set(value) {\n      source.value = value;\n    }\n  });\n}\n\nfunction useThrottleFn(fn, ms = 200, trailing = false, leading = true) {\n  return createFilterWrapper(throttleFilter(ms, trailing, leading), fn);\n}\n\nfunction refThrottled(value, delay = 200, trailing = true, leading = true) {\n  if (delay <= 0)\n    return value;\n  const throttled = vueDemi.ref(value.value);\n  const updater = useThrottleFn(() => {\n    throttled.value = value.value;\n  }, delay, trailing, leading);\n  vueDemi.watch(value, () => updater());\n  return throttled;\n}\n\nfunction refWithControl(initial, options = {}) {\n  let source = initial;\n  let track;\n  let trigger;\n  const ref = vueDemi.customRef((_track, _trigger) => {\n    track = _track;\n    trigger = _trigger;\n    return {\n      get() {\n        return get();\n      },\n      set(v) {\n        set(v);\n      }\n    };\n  });\n  function get(tracking = true) {\n    if (tracking)\n      track();\n    return source;\n  }\n  function set(value, triggering = true) {\n    var _a, _b;\n    if (value === source)\n      return;\n    const old = source;\n    if (((_a = options.onBeforeChange) == null ? void 0 : _a.call(options, value, old)) === false)\n      return;\n    source = value;\n    (_b = options.onChanged) == null ? void 0 : _b.call(options, value, old);\n    if (triggering)\n      trigger();\n  }\n  const untrackedGet = () => get(false);\n  const silentSet = (v) => set(v, false);\n  const peek = () => get(false);\n  const lay = (v) => set(v, false);\n  return extendRef(ref, {\n    get,\n    set,\n    untrackedGet,\n    silentSet,\n    peek,\n    lay\n  }, { enumerable: true });\n}\nconst controlledRef = refWithControl;\n\nfunction resolveRef(r) {\n  return typeof r === \"function\" ? vueDemi.computed(r) : vueDemi.ref(r);\n}\n\nfunction set(...args) {\n  if (args.length === 2) {\n    const [ref, value] = args;\n    ref.value = value;\n  }\n  if (args.length === 3) {\n    if (vueDemi.isVue2) {\n      vueDemi.set(...args);\n    } else {\n      const [target, key, value] = args;\n      target[key] = value;\n    }\n  }\n}\n\nfunction syncRef(left, right, options = {}) {\n  var _a, _b;\n  const {\n    flush = \"sync\",\n    deep = false,\n    immediate = true,\n    direction = \"both\",\n    transform = {}\n  } = options;\n  let watchLeft;\n  let watchRight;\n  const transformLTR = (_a = transform.ltr) != null ? _a : (v) => v;\n  const transformRTL = (_b = transform.rtl) != null ? _b : (v) => v;\n  if (direction === \"both\" || direction === \"ltr\") {\n    watchLeft = vueDemi.watch(left, (newValue) => right.value = transformLTR(newValue), { flush, deep, immediate });\n  }\n  if (direction === \"both\" || direction === \"rtl\") {\n    watchRight = vueDemi.watch(right, (newValue) => left.value = transformRTL(newValue), { flush, deep, immediate });\n  }\n  return () => {\n    watchLeft == null ? void 0 : watchLeft();\n    watchRight == null ? void 0 : watchRight();\n  };\n}\n\nfunction syncRefs(source, targets, options = {}) {\n  const {\n    flush = \"sync\",\n    deep = false,\n    immediate = true\n  } = options;\n  if (!Array.isArray(targets))\n    targets = [targets];\n  return vueDemi.watch(source, (newValue) => targets.forEach((target) => target.value = newValue), { flush, deep, immediate });\n}\n\nvar __defProp$7 = Object.defineProperty;\nvar __defProps$5 = Object.defineProperties;\nvar __getOwnPropDescs$5 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$9 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$9 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$9 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$7 = (obj, key, value) => key in obj ? __defProp$7(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$7 = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$9.call(b, prop))\n      __defNormalProp$7(a, prop, b[prop]);\n  if (__getOwnPropSymbols$9)\n    for (var prop of __getOwnPropSymbols$9(b)) {\n      if (__propIsEnum$9.call(b, prop))\n        __defNormalProp$7(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps$5 = (a, b) => __defProps$5(a, __getOwnPropDescs$5(b));\nfunction toRefs(objectRef) {\n  if (!vueDemi.isRef(objectRef))\n    return vueDemi.toRefs(objectRef);\n  const result = Array.isArray(objectRef.value) ? new Array(objectRef.value.length) : {};\n  for (const key in objectRef.value) {\n    result[key] = vueDemi.customRef(() => ({\n      get() {\n        return objectRef.value[key];\n      },\n      set(v) {\n        if (Array.isArray(objectRef.value)) {\n          const copy = [...objectRef.value];\n          copy[key] = v;\n          objectRef.value = copy;\n        } else {\n          const newObject = __spreadProps$5(__spreadValues$7({}, objectRef.value), { [key]: v });\n          Object.setPrototypeOf(newObject, objectRef.value);\n          objectRef.value = newObject;\n        }\n      }\n    }));\n  }\n  return result;\n}\n\nfunction tryOnBeforeMount(fn, sync = true) {\n  if (vueDemi.getCurrentInstance())\n    vueDemi.onBeforeMount(fn);\n  else if (sync)\n    fn();\n  else\n    vueDemi.nextTick(fn);\n}\n\nfunction tryOnBeforeUnmount(fn) {\n  if (vueDemi.getCurrentInstance())\n    vueDemi.onBeforeUnmount(fn);\n}\n\nfunction tryOnMounted(fn, sync = true) {\n  if (vueDemi.getCurrentInstance())\n    vueDemi.onMounted(fn);\n  else if (sync)\n    fn();\n  else\n    vueDemi.nextTick(fn);\n}\n\nfunction tryOnUnmounted(fn) {\n  if (vueDemi.getCurrentInstance())\n    vueDemi.onUnmounted(fn);\n}\n\nfunction createUntil(r, isNot = false) {\n  function toMatch(condition, { flush = \"sync\", deep = false, timeout, throwOnTimeout } = {}) {\n    let stop = null;\n    const watcher = new Promise((resolve) => {\n      stop = vueDemi.watch(r, (v) => {\n        if (condition(v) !== isNot) {\n          stop == null ? void 0 : stop();\n          resolve(v);\n        }\n      }, {\n        flush,\n        deep,\n        immediate: true\n      });\n    });\n    const promises = [watcher];\n    if (timeout != null) {\n      promises.push(promiseTimeout(timeout, throwOnTimeout).then(() => resolveUnref(r)).finally(() => stop == null ? void 0 : stop()));\n    }\n    return Promise.race(promises);\n  }\n  function toBe(value, options) {\n    if (!vueDemi.isRef(value))\n      return toMatch((v) => v === value, options);\n    const { flush = \"sync\", deep = false, timeout, throwOnTimeout } = options != null ? options : {};\n    let stop = null;\n    const watcher = new Promise((resolve) => {\n      stop = vueDemi.watch([r, value], ([v1, v2]) => {\n        if (isNot !== (v1 === v2)) {\n          stop == null ? void 0 : stop();\n          resolve(v1);\n        }\n      }, {\n        flush,\n        deep,\n        immediate: true\n      });\n    });\n    const promises = [watcher];\n    if (timeout != null) {\n      promises.push(promiseTimeout(timeout, throwOnTimeout).then(() => resolveUnref(r)).finally(() => {\n        stop == null ? void 0 : stop();\n        return resolveUnref(r);\n      }));\n    }\n    return Promise.race(promises);\n  }\n  function toBeTruthy(options) {\n    return toMatch((v) => Boolean(v), options);\n  }\n  function toBeNull(options) {\n    return toBe(null, options);\n  }\n  function toBeUndefined(options) {\n    return toBe(void 0, options);\n  }\n  function toBeNaN(options) {\n    return toMatch(Number.isNaN, options);\n  }\n  function toContains(value, options) {\n    return toMatch((v) => {\n      const array = Array.from(v);\n      return array.includes(value) || array.includes(resolveUnref(value));\n    }, options);\n  }\n  function changed(options) {\n    return changedTimes(1, options);\n  }\n  function changedTimes(n = 1, options) {\n    let count = -1;\n    return toMatch(() => {\n      count += 1;\n      return count >= n;\n    }, options);\n  }\n  if (Array.isArray(resolveUnref(r))) {\n    const instance = {\n      toMatch,\n      toContains,\n      changed,\n      changedTimes,\n      get not() {\n        return createUntil(r, !isNot);\n      }\n    };\n    return instance;\n  } else {\n    const instance = {\n      toMatch,\n      toBe,\n      toBeTruthy,\n      toBeNull,\n      toBeNaN,\n      toBeUndefined,\n      changed,\n      changedTimes,\n      get not() {\n        return createUntil(r, !isNot);\n      }\n    };\n    return instance;\n  }\n}\nfunction until(r) {\n  return createUntil(r);\n}\n\nfunction useArrayEvery(list, fn) {\n  return vueDemi.computed(() => resolveUnref(list).every((element, index, array) => fn(resolveUnref(element), index, array)));\n}\n\nfunction useArrayFilter(list, fn) {\n  return vueDemi.computed(() => resolveUnref(list).map((i) => resolveUnref(i)).filter(fn));\n}\n\nfunction useArrayFind(list, fn) {\n  return vueDemi.computed(() => resolveUnref(resolveUnref(list).find((element, index, array) => fn(resolveUnref(element), index, array))));\n}\n\nfunction useArrayFindIndex(list, fn) {\n  return vueDemi.computed(() => resolveUnref(list).findIndex((element, index, array) => fn(resolveUnref(element), index, array)));\n}\n\nfunction useArrayJoin(list, separator) {\n  return vueDemi.computed(() => resolveUnref(list).map((i) => resolveUnref(i)).join(resolveUnref(separator)));\n}\n\nfunction useArrayMap(list, fn) {\n  return vueDemi.computed(() => resolveUnref(list).map((i) => resolveUnref(i)).map(fn));\n}\n\nfunction useArrayReduce(list, reducer, ...args) {\n  const reduceCallback = (sum, value, index) => reducer(resolveUnref(sum), resolveUnref(value), index);\n  return vueDemi.computed(() => {\n    const resolved = resolveUnref(list);\n    return args.length ? resolved.reduce(reduceCallback, resolveUnref(args[0])) : resolved.reduce(reduceCallback);\n  });\n}\n\nfunction useArraySome(list, fn) {\n  return vueDemi.computed(() => resolveUnref(list).some((element, index, array) => fn(resolveUnref(element), index, array)));\n}\n\nfunction useCounter(initialValue = 0, options = {}) {\n  const count = vueDemi.ref(initialValue);\n  const {\n    max = Infinity,\n    min = -Infinity\n  } = options;\n  const inc = (delta = 1) => count.value = Math.min(max, count.value + delta);\n  const dec = (delta = 1) => count.value = Math.max(min, count.value - delta);\n  const get = () => count.value;\n  const set = (val) => count.value = Math.max(min, Math.min(max, val));\n  const reset = (val = initialValue) => {\n    initialValue = val;\n    return set(val);\n  };\n  return { count, inc, dec, get, set, reset };\n}\n\nconst REGEX_PARSE = /^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/;\nconst REGEX_FORMAT = /\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a{1,2}|A{1,2}|m{1,2}|s{1,2}|Z{1,2}|SSS/g;\nconst defaultMeridiem = (hours, minutes, isLowercase, hasPeriod) => {\n  let m = hours < 12 ? \"AM\" : \"PM\";\n  if (hasPeriod)\n    m = m.split(\"\").reduce((acc, curr) => acc += `${curr}.`, \"\");\n  return isLowercase ? m.toLowerCase() : m;\n};\nconst formatDate = (date, formatStr, options = {}) => {\n  var _a;\n  const years = date.getFullYear();\n  const month = date.getMonth();\n  const days = date.getDate();\n  const hours = date.getHours();\n  const minutes = date.getMinutes();\n  const seconds = date.getSeconds();\n  const milliseconds = date.getMilliseconds();\n  const day = date.getDay();\n  const meridiem = (_a = options.customMeridiem) != null ? _a : defaultMeridiem;\n  const matches = {\n    YY: () => String(years).slice(-2),\n    YYYY: () => years,\n    M: () => month + 1,\n    MM: () => `${month + 1}`.padStart(2, \"0\"),\n    MMM: () => date.toLocaleDateString(options.locales, { month: \"short\" }),\n    MMMM: () => date.toLocaleDateString(options.locales, { month: \"long\" }),\n    D: () => String(days),\n    DD: () => `${days}`.padStart(2, \"0\"),\n    H: () => String(hours),\n    HH: () => `${hours}`.padStart(2, \"0\"),\n    h: () => `${hours % 12 || 12}`.padStart(1, \"0\"),\n    hh: () => `${hours % 12 || 12}`.padStart(2, \"0\"),\n    m: () => String(minutes),\n    mm: () => `${minutes}`.padStart(2, \"0\"),\n    s: () => String(seconds),\n    ss: () => `${seconds}`.padStart(2, \"0\"),\n    SSS: () => `${milliseconds}`.padStart(3, \"0\"),\n    d: () => day,\n    dd: () => date.toLocaleDateString(options.locales, { weekday: \"narrow\" }),\n    ddd: () => date.toLocaleDateString(options.locales, { weekday: \"short\" }),\n    dddd: () => date.toLocaleDateString(options.locales, { weekday: \"long\" }),\n    A: () => meridiem(hours, minutes),\n    AA: () => meridiem(hours, minutes, false, true),\n    a: () => meridiem(hours, minutes, true),\n    aa: () => meridiem(hours, minutes, true, true)\n  };\n  return formatStr.replace(REGEX_FORMAT, (match, $1) => $1 || matches[match]());\n};\nconst normalizeDate = (date) => {\n  if (date === null)\n    return new Date(NaN);\n  if (date === void 0)\n    return new Date();\n  if (date instanceof Date)\n    return new Date(date);\n  if (typeof date === \"string\" && !/Z$/i.test(date)) {\n    const d = date.match(REGEX_PARSE);\n    if (d) {\n      const m = d[2] - 1 || 0;\n      const ms = (d[7] || \"0\").substring(0, 3);\n      return new Date(d[1], m, d[3] || 1, d[4] || 0, d[5] || 0, d[6] || 0, ms);\n    }\n  }\n  return new Date(date);\n};\nfunction useDateFormat(date, formatStr = \"HH:mm:ss\", options = {}) {\n  return vueDemi.computed(() => formatDate(normalizeDate(resolveUnref(date)), resolveUnref(formatStr), options));\n}\n\nfunction useIntervalFn(cb, interval = 1e3, options = {}) {\n  const {\n    immediate = true,\n    immediateCallback = false\n  } = options;\n  let timer = null;\n  const isActive = vueDemi.ref(false);\n  function clean() {\n    if (timer) {\n      clearInterval(timer);\n      timer = null;\n    }\n  }\n  function pause() {\n    isActive.value = false;\n    clean();\n  }\n  function resume() {\n    if (vueDemi.unref(interval) <= 0)\n      return;\n    isActive.value = true;\n    if (immediateCallback)\n      cb();\n    clean();\n    timer = setInterval(cb, resolveUnref(interval));\n  }\n  if (immediate && isClient)\n    resume();\n  if (vueDemi.isRef(interval) || isFunction(interval)) {\n    const stopWatch = vueDemi.watch(interval, () => {\n      if (isActive.value && isClient)\n        resume();\n    });\n    tryOnScopeDispose(stopWatch);\n  }\n  tryOnScopeDispose(pause);\n  return {\n    isActive,\n    pause,\n    resume\n  };\n}\n\nvar __defProp$6 = Object.defineProperty;\nvar __getOwnPropSymbols$8 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$8 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$8 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$6 = (obj, key, value) => key in obj ? __defProp$6(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$6 = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$8.call(b, prop))\n      __defNormalProp$6(a, prop, b[prop]);\n  if (__getOwnPropSymbols$8)\n    for (var prop of __getOwnPropSymbols$8(b)) {\n      if (__propIsEnum$8.call(b, prop))\n        __defNormalProp$6(a, prop, b[prop]);\n    }\n  return a;\n};\nfunction useInterval(interval = 1e3, options = {}) {\n  const {\n    controls: exposeControls = false,\n    immediate = true,\n    callback\n  } = options;\n  const counter = vueDemi.ref(0);\n  const update = () => counter.value += 1;\n  const controls = useIntervalFn(callback ? () => {\n    update();\n    callback(counter.value);\n  } : update, interval, { immediate });\n  if (exposeControls) {\n    return __spreadValues$6({\n      counter\n    }, controls);\n  } else {\n    return counter;\n  }\n}\n\nfunction useLastChanged(source, options = {}) {\n  var _a;\n  const ms = vueDemi.ref((_a = options.initialValue) != null ? _a : null);\n  vueDemi.watch(source, () => ms.value = timestamp(), options);\n  return ms;\n}\n\nfunction useTimeoutFn(cb, interval, options = {}) {\n  const {\n    immediate = true\n  } = options;\n  const isPending = vueDemi.ref(false);\n  let timer = null;\n  function clear() {\n    if (timer) {\n      clearTimeout(timer);\n      timer = null;\n    }\n  }\n  function stop() {\n    isPending.value = false;\n    clear();\n  }\n  function start(...args) {\n    clear();\n    isPending.value = true;\n    timer = setTimeout(() => {\n      isPending.value = false;\n      timer = null;\n      cb(...args);\n    }, resolveUnref(interval));\n  }\n  if (immediate) {\n    isPending.value = true;\n    if (isClient)\n      start();\n  }\n  tryOnScopeDispose(stop);\n  return {\n    isPending,\n    start,\n    stop\n  };\n}\n\nvar __defProp$5 = Object.defineProperty;\nvar __getOwnPropSymbols$7 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$7 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$7 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$5 = (obj, key, value) => key in obj ? __defProp$5(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$5 = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$7.call(b, prop))\n      __defNormalProp$5(a, prop, b[prop]);\n  if (__getOwnPropSymbols$7)\n    for (var prop of __getOwnPropSymbols$7(b)) {\n      if (__propIsEnum$7.call(b, prop))\n        __defNormalProp$5(a, prop, b[prop]);\n    }\n  return a;\n};\nfunction useTimeout(interval = 1e3, options = {}) {\n  const {\n    controls: exposeControls = false,\n    callback\n  } = options;\n  const controls = useTimeoutFn(callback != null ? callback : noop, interval, options);\n  const ready = vueDemi.computed(() => !controls.isPending.value);\n  if (exposeControls) {\n    return __spreadValues$5({\n      ready\n    }, controls);\n  } else {\n    return ready;\n  }\n}\n\nfunction useToNumber(value, options = {}) {\n  const {\n    method = \"parseFloat\",\n    radix,\n    nanToZero\n  } = options;\n  return vueDemi.computed(() => {\n    let resolved = resolveUnref(value);\n    if (typeof resolved === \"string\")\n      resolved = Number[method](resolved, radix);\n    if (nanToZero && isNaN(resolved))\n      resolved = 0;\n    return resolved;\n  });\n}\n\nfunction useToString(value) {\n  return vueDemi.computed(() => `${resolveUnref(value)}`);\n}\n\nfunction useToggle(initialValue = false, options = {}) {\n  const {\n    truthyValue = true,\n    falsyValue = false\n  } = options;\n  const valueIsRef = vueDemi.isRef(initialValue);\n  const _value = vueDemi.ref(initialValue);\n  function toggle(value) {\n    if (arguments.length) {\n      _value.value = value;\n      return _value.value;\n    } else {\n      const truthy = resolveUnref(truthyValue);\n      _value.value = _value.value === truthy ? resolveUnref(falsyValue) : truthy;\n      return _value.value;\n    }\n  }\n  if (valueIsRef)\n    return toggle;\n  else\n    return [_value, toggle];\n}\n\nfunction watchArray(source, cb, options) {\n  let oldList = (options == null ? void 0 : options.immediate) ? [] : [\n    ...source instanceof Function ? source() : Array.isArray(source) ? source : vueDemi.unref(source)\n  ];\n  return vueDemi.watch(source, (newList, _, onCleanup) => {\n    const oldListRemains = new Array(oldList.length);\n    const added = [];\n    for (const obj of newList) {\n      let found = false;\n      for (let i = 0; i < oldList.length; i++) {\n        if (!oldListRemains[i] && obj === oldList[i]) {\n          oldListRemains[i] = true;\n          found = true;\n          break;\n        }\n      }\n      if (!found)\n        added.push(obj);\n    }\n    const removed = oldList.filter((_2, i) => !oldListRemains[i]);\n    cb(newList, oldList, added, removed, onCleanup);\n    oldList = [...newList];\n  }, options);\n}\n\nvar __getOwnPropSymbols$6 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$6 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$6 = Object.prototype.propertyIsEnumerable;\nvar __objRest$5 = (source, exclude) => {\n  var target = {};\n  for (var prop in source)\n    if (__hasOwnProp$6.call(source, prop) && exclude.indexOf(prop) < 0)\n      target[prop] = source[prop];\n  if (source != null && __getOwnPropSymbols$6)\n    for (var prop of __getOwnPropSymbols$6(source)) {\n      if (exclude.indexOf(prop) < 0 && __propIsEnum$6.call(source, prop))\n        target[prop] = source[prop];\n    }\n  return target;\n};\nfunction watchWithFilter(source, cb, options = {}) {\n  const _a = options, {\n    eventFilter = bypassFilter\n  } = _a, watchOptions = __objRest$5(_a, [\n    \"eventFilter\"\n  ]);\n  return vueDemi.watch(source, createFilterWrapper(eventFilter, cb), watchOptions);\n}\n\nvar __getOwnPropSymbols$5 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$5 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$5 = Object.prototype.propertyIsEnumerable;\nvar __objRest$4 = (source, exclude) => {\n  var target = {};\n  for (var prop in source)\n    if (__hasOwnProp$5.call(source, prop) && exclude.indexOf(prop) < 0)\n      target[prop] = source[prop];\n  if (source != null && __getOwnPropSymbols$5)\n    for (var prop of __getOwnPropSymbols$5(source)) {\n      if (exclude.indexOf(prop) < 0 && __propIsEnum$5.call(source, prop))\n        target[prop] = source[prop];\n    }\n  return target;\n};\nfunction watchAtMost(source, cb, options) {\n  const _a = options, {\n    count\n  } = _a, watchOptions = __objRest$4(_a, [\n    \"count\"\n  ]);\n  const current = vueDemi.ref(0);\n  const stop = watchWithFilter(source, (...args) => {\n    current.value += 1;\n    if (current.value >= resolveUnref(count))\n      vueDemi.nextTick(() => stop());\n    cb(...args);\n  }, watchOptions);\n  return { count: current, stop };\n}\n\nvar __defProp$4 = Object.defineProperty;\nvar __defProps$4 = Object.defineProperties;\nvar __getOwnPropDescs$4 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$4 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$4 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$4 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$4 = (obj, key, value) => key in obj ? __defProp$4(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$4 = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$4.call(b, prop))\n      __defNormalProp$4(a, prop, b[prop]);\n  if (__getOwnPropSymbols$4)\n    for (var prop of __getOwnPropSymbols$4(b)) {\n      if (__propIsEnum$4.call(b, prop))\n        __defNormalProp$4(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps$4 = (a, b) => __defProps$4(a, __getOwnPropDescs$4(b));\nvar __objRest$3 = (source, exclude) => {\n  var target = {};\n  for (var prop in source)\n    if (__hasOwnProp$4.call(source, prop) && exclude.indexOf(prop) < 0)\n      target[prop] = source[prop];\n  if (source != null && __getOwnPropSymbols$4)\n    for (var prop of __getOwnPropSymbols$4(source)) {\n      if (exclude.indexOf(prop) < 0 && __propIsEnum$4.call(source, prop))\n        target[prop] = source[prop];\n    }\n  return target;\n};\nfunction watchDebounced(source, cb, options = {}) {\n  const _a = options, {\n    debounce = 0,\n    maxWait = void 0\n  } = _a, watchOptions = __objRest$3(_a, [\n    \"debounce\",\n    \"maxWait\"\n  ]);\n  return watchWithFilter(source, cb, __spreadProps$4(__spreadValues$4({}, watchOptions), {\n    eventFilter: debounceFilter(debounce, { maxWait })\n  }));\n}\n\nvar __defProp$3 = Object.defineProperty;\nvar __defProps$3 = Object.defineProperties;\nvar __getOwnPropDescs$3 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$3 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$3 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$3 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$3 = (obj, key, value) => key in obj ? __defProp$3(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$3 = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$3.call(b, prop))\n      __defNormalProp$3(a, prop, b[prop]);\n  if (__getOwnPropSymbols$3)\n    for (var prop of __getOwnPropSymbols$3(b)) {\n      if (__propIsEnum$3.call(b, prop))\n        __defNormalProp$3(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps$3 = (a, b) => __defProps$3(a, __getOwnPropDescs$3(b));\nvar __objRest$2 = (source, exclude) => {\n  var target = {};\n  for (var prop in source)\n    if (__hasOwnProp$3.call(source, prop) && exclude.indexOf(prop) < 0)\n      target[prop] = source[prop];\n  if (source != null && __getOwnPropSymbols$3)\n    for (var prop of __getOwnPropSymbols$3(source)) {\n      if (exclude.indexOf(prop) < 0 && __propIsEnum$3.call(source, prop))\n        target[prop] = source[prop];\n    }\n  return target;\n};\nfunction watchIgnorable(source, cb, options = {}) {\n  const _a = options, {\n    eventFilter = bypassFilter\n  } = _a, watchOptions = __objRest$2(_a, [\n    \"eventFilter\"\n  ]);\n  const filteredCb = createFilterWrapper(eventFilter, cb);\n  let ignoreUpdates;\n  let ignorePrevAsyncUpdates;\n  let stop;\n  if (watchOptions.flush === \"sync\") {\n    const ignore = vueDemi.ref(false);\n    ignorePrevAsyncUpdates = () => {\n    };\n    ignoreUpdates = (updater) => {\n      ignore.value = true;\n      updater();\n      ignore.value = false;\n    };\n    stop = vueDemi.watch(source, (...args) => {\n      if (!ignore.value)\n        filteredCb(...args);\n    }, watchOptions);\n  } else {\n    const disposables = [];\n    const ignoreCounter = vueDemi.ref(0);\n    const syncCounter = vueDemi.ref(0);\n    ignorePrevAsyncUpdates = () => {\n      ignoreCounter.value = syncCounter.value;\n    };\n    disposables.push(vueDemi.watch(source, () => {\n      syncCounter.value++;\n    }, __spreadProps$3(__spreadValues$3({}, watchOptions), { flush: \"sync\" })));\n    ignoreUpdates = (updater) => {\n      const syncCounterPrev = syncCounter.value;\n      updater();\n      ignoreCounter.value += syncCounter.value - syncCounterPrev;\n    };\n    disposables.push(vueDemi.watch(source, (...args) => {\n      const ignore = ignoreCounter.value > 0 && ignoreCounter.value === syncCounter.value;\n      ignoreCounter.value = 0;\n      syncCounter.value = 0;\n      if (ignore)\n        return;\n      filteredCb(...args);\n    }, watchOptions));\n    stop = () => {\n      disposables.forEach((fn) => fn());\n    };\n  }\n  return { stop, ignoreUpdates, ignorePrevAsyncUpdates };\n}\n\nfunction watchOnce(source, cb, options) {\n  const stop = vueDemi.watch(source, (...args) => {\n    vueDemi.nextTick(() => stop());\n    return cb(...args);\n  }, options);\n}\n\nvar __defProp$2 = Object.defineProperty;\nvar __defProps$2 = Object.defineProperties;\nvar __getOwnPropDescs$2 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$2 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$2 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$2 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$2 = (obj, key, value) => key in obj ? __defProp$2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$2 = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$2.call(b, prop))\n      __defNormalProp$2(a, prop, b[prop]);\n  if (__getOwnPropSymbols$2)\n    for (var prop of __getOwnPropSymbols$2(b)) {\n      if (__propIsEnum$2.call(b, prop))\n        __defNormalProp$2(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps$2 = (a, b) => __defProps$2(a, __getOwnPropDescs$2(b));\nvar __objRest$1 = (source, exclude) => {\n  var target = {};\n  for (var prop in source)\n    if (__hasOwnProp$2.call(source, prop) && exclude.indexOf(prop) < 0)\n      target[prop] = source[prop];\n  if (source != null && __getOwnPropSymbols$2)\n    for (var prop of __getOwnPropSymbols$2(source)) {\n      if (exclude.indexOf(prop) < 0 && __propIsEnum$2.call(source, prop))\n        target[prop] = source[prop];\n    }\n  return target;\n};\nfunction watchPausable(source, cb, options = {}) {\n  const _a = options, {\n    eventFilter: filter\n  } = _a, watchOptions = __objRest$1(_a, [\n    \"eventFilter\"\n  ]);\n  const { eventFilter, pause, resume, isActive } = pausableFilter(filter);\n  const stop = watchWithFilter(source, cb, __spreadProps$2(__spreadValues$2({}, watchOptions), {\n    eventFilter\n  }));\n  return { stop, pause, resume, isActive };\n}\n\nvar __defProp$1 = Object.defineProperty;\nvar __defProps$1 = Object.defineProperties;\nvar __getOwnPropDescs$1 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$1 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$1 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$1 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$1 = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$1.call(b, prop))\n      __defNormalProp$1(a, prop, b[prop]);\n  if (__getOwnPropSymbols$1)\n    for (var prop of __getOwnPropSymbols$1(b)) {\n      if (__propIsEnum$1.call(b, prop))\n        __defNormalProp$1(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps$1 = (a, b) => __defProps$1(a, __getOwnPropDescs$1(b));\nvar __objRest = (source, exclude) => {\n  var target = {};\n  for (var prop in source)\n    if (__hasOwnProp$1.call(source, prop) && exclude.indexOf(prop) < 0)\n      target[prop] = source[prop];\n  if (source != null && __getOwnPropSymbols$1)\n    for (var prop of __getOwnPropSymbols$1(source)) {\n      if (exclude.indexOf(prop) < 0 && __propIsEnum$1.call(source, prop))\n        target[prop] = source[prop];\n    }\n  return target;\n};\nfunction watchThrottled(source, cb, options = {}) {\n  const _a = options, {\n    throttle = 0,\n    trailing = true,\n    leading = true\n  } = _a, watchOptions = __objRest(_a, [\n    \"throttle\",\n    \"trailing\",\n    \"leading\"\n  ]);\n  return watchWithFilter(source, cb, __spreadProps$1(__spreadValues$1({}, watchOptions), {\n    eventFilter: throttleFilter(throttle, trailing, leading)\n  }));\n}\n\nvar __defProp = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp.call(b, prop))\n      __defNormalProp(a, prop, b[prop]);\n  if (__getOwnPropSymbols)\n    for (var prop of __getOwnPropSymbols(b)) {\n      if (__propIsEnum.call(b, prop))\n        __defNormalProp(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\nfunction watchTriggerable(source, cb, options = {}) {\n  let cleanupFn;\n  function onEffect() {\n    if (!cleanupFn)\n      return;\n    const fn = cleanupFn;\n    cleanupFn = void 0;\n    fn();\n  }\n  function onCleanup(callback) {\n    cleanupFn = callback;\n  }\n  const _cb = (value, oldValue) => {\n    onEffect();\n    return cb(value, oldValue, onCleanup);\n  };\n  const res = watchIgnorable(source, _cb, options);\n  const { ignoreUpdates } = res;\n  const trigger = () => {\n    let res2;\n    ignoreUpdates(() => {\n      res2 = _cb(getWatchSources(source), getOldValue(source));\n    });\n    return res2;\n  };\n  return __spreadProps(__spreadValues({}, res), {\n    trigger\n  });\n}\nfunction getWatchSources(sources) {\n  if (vueDemi.isReactive(sources))\n    return sources;\n  if (Array.isArray(sources))\n    return sources.map((item) => getOneWatchSource(item));\n  return getOneWatchSource(sources);\n}\nfunction getOneWatchSource(source) {\n  return typeof source === \"function\" ? source() : vueDemi.unref(source);\n}\nfunction getOldValue(source) {\n  return Array.isArray(source) ? source.map(() => void 0) : void 0;\n}\n\nfunction whenever(source, cb, options) {\n  return vueDemi.watch(source, (v, ov, onInvalidate) => {\n    if (v)\n      cb(v, ov, onInvalidate);\n  }, options);\n}\n\nexports.__onlyVue27Plus = __onlyVue27Plus;\nexports.__onlyVue3 = __onlyVue3;\nexports.assert = assert;\nexports.autoResetRef = refAutoReset;\nexports.bypassFilter = bypassFilter;\nexports.clamp = clamp;\nexports.computedEager = computedEager;\nexports.computedWithControl = computedWithControl;\nexports.containsProp = containsProp;\nexports.controlledComputed = computedWithControl;\nexports.controlledRef = controlledRef;\nexports.createEventHook = createEventHook;\nexports.createFilterWrapper = createFilterWrapper;\nexports.createGlobalState = createGlobalState;\nexports.createInjectionState = createInjectionState;\nexports.createReactiveFn = reactify;\nexports.createSharedComposable = createSharedComposable;\nexports.createSingletonPromise = createSingletonPromise;\nexports.debounceFilter = debounceFilter;\nexports.debouncedRef = refDebounced;\nexports.debouncedWatch = watchDebounced;\nexports.directiveHooks = directiveHooks;\nexports.eagerComputed = computedEager;\nexports.extendRef = extendRef;\nexports.formatDate = formatDate;\nexports.get = get;\nexports.hasOwn = hasOwn;\nexports.identity = identity;\nexports.ignorableWatch = watchIgnorable;\nexports.increaseWithUnit = increaseWithUnit;\nexports.invoke = invoke;\nexports.isBoolean = isBoolean;\nexports.isClient = isClient;\nexports.isDef = isDef;\nexports.isDefined = isDefined;\nexports.isFunction = isFunction;\nexports.isIOS = isIOS;\nexports.isNumber = isNumber;\nexports.isObject = isObject;\nexports.isString = isString;\nexports.isWindow = isWindow;\nexports.makeDestructurable = makeDestructurable;\nexports.noop = noop;\nexports.normalizeDate = normalizeDate;\nexports.now = now;\nexports.objectPick = objectPick;\nexports.pausableFilter = pausableFilter;\nexports.pausableWatch = watchPausable;\nexports.promiseTimeout = promiseTimeout;\nexports.rand = rand;\nexports.reactify = reactify;\nexports.reactifyObject = reactifyObject;\nexports.reactiveComputed = reactiveComputed;\nexports.reactiveOmit = reactiveOmit;\nexports.reactivePick = reactivePick;\nexports.refAutoReset = refAutoReset;\nexports.refDebounced = refDebounced;\nexports.refDefault = refDefault;\nexports.refThrottled = refThrottled;\nexports.refWithControl = refWithControl;\nexports.resolveRef = resolveRef;\nexports.resolveUnref = resolveUnref;\nexports.set = set;\nexports.syncRef = syncRef;\nexports.syncRefs = syncRefs;\nexports.throttleFilter = throttleFilter;\nexports.throttledRef = refThrottled;\nexports.throttledWatch = watchThrottled;\nexports.timestamp = timestamp;\nexports.toReactive = toReactive;\nexports.toRefs = toRefs;\nexports.tryOnBeforeMount = tryOnBeforeMount;\nexports.tryOnBeforeUnmount = tryOnBeforeUnmount;\nexports.tryOnMounted = tryOnMounted;\nexports.tryOnScopeDispose = tryOnScopeDispose;\nexports.tryOnUnmounted = tryOnUnmounted;\nexports.until = until;\nexports.useArrayEvery = useArrayEvery;\nexports.useArrayFilter = useArrayFilter;\nexports.useArrayFind = useArrayFind;\nexports.useArrayFindIndex = useArrayFindIndex;\nexports.useArrayJoin = useArrayJoin;\nexports.useArrayMap = useArrayMap;\nexports.useArrayReduce = useArrayReduce;\nexports.useArraySome = useArraySome;\nexports.useCounter = useCounter;\nexports.useDateFormat = useDateFormat;\nexports.useDebounce = refDebounced;\nexports.useDebounceFn = useDebounceFn;\nexports.useInterval = useInterval;\nexports.useIntervalFn = useIntervalFn;\nexports.useLastChanged = useLastChanged;\nexports.useThrottle = refThrottled;\nexports.useThrottleFn = useThrottleFn;\nexports.useTimeout = useTimeout;\nexports.useTimeoutFn = useTimeoutFn;\nexports.useToNumber = useToNumber;\nexports.useToString = useToString;\nexports.useToggle = useToggle;\nexports.watchArray = watchArray;\nexports.watchAtMost = watchAtMost;\nexports.watchDebounced = watchDebounced;\nexports.watchIgnorable = watchIgnorable;\nexports.watchOnce = watchOnce;\nexports.watchPausable = watchPausable;\nexports.watchThrottled = watchThrottled;\nexports.watchTriggerable = watchTriggerable;\nexports.watchWithFilter = watchWithFilter;\nexports.whenever = whenever;\n/index.mjsŵ\u001aimport { shallowRef, watchEffect, readonly, unref, ref, isVue3, version, watch, customRef, getCurrentScope, onScopeDispose, effectScope, provide, inject, isRef, computed, reactive, toRefs as toRefs$1, toRef, isVue2, set as set$1, getCurrentInstance, onBeforeMount, nextTick, onBeforeUnmount, onMounted, onUnmounted, isReactive } from 'vue-demi';\n\nvar __defProp$9 = Object.defineProperty;\nvar __defProps$6 = Object.defineProperties;\nvar __getOwnPropDescs$6 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$b = Object.getOwnPropertySymbols;\nvar __hasOwnProp$b = Object.prototype.hasOwnProperty;\nvar __propIsEnum$b = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$9 = (obj, key, value) => key in obj ? __defProp$9(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$9 = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$b.call(b, prop))\n      __defNormalProp$9(a, prop, b[prop]);\n  if (__getOwnPropSymbols$b)\n    for (var prop of __getOwnPropSymbols$b(b)) {\n      if (__propIsEnum$b.call(b, prop))\n        __defNormalProp$9(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps$6 = (a, b) => __defProps$6(a, __getOwnPropDescs$6(b));\nfunction computedEager(fn, options) {\n  var _a;\n  const result = shallowRef();\n  watchEffect(() => {\n    result.value = fn();\n  }, __spreadProps$6(__spreadValues$9({}, options), {\n    flush: (_a = options == null ? void 0 : options.flush) != null ? _a : \"sync\"\n  }));\n  return readonly(result);\n}\n\nvar _a;\nconst isClient = typeof window !== \"undefined\";\nconst isDef = (val) => typeof val !== \"undefined\";\nconst assert = (condition, ...infos) => {\n  if (!condition)\n    console.warn(...infos);\n};\nconst toString = Object.prototype.toString;\nconst isBoolean = (val) => typeof val === \"boolean\";\nconst isFunction = (val) => typeof val === \"function\";\nconst isNumber = (val) => typeof val === \"number\";\nconst isString = (val) => typeof val === \"string\";\nconst isObject = (val) => toString.call(val) === \"[object Object]\";\nconst isWindow = (val) => typeof window !== \"undefined\" && toString.call(val) === \"[object Window]\";\nconst now = () => Date.now();\nconst timestamp = () => +Date.now();\nconst clamp = (n, min, max) => Math.min(max, Math.max(min, n));\nconst noop = () => {\n};\nconst rand = (min, max) => {\n  min = Math.ceil(min);\n  max = Math.floor(max);\n  return Math.floor(Math.random() * (max - min + 1)) + min;\n};\nconst isIOS = isClient && ((_a = window == null ? void 0 : window.navigator) == null ? void 0 : _a.userAgent) && /iP(ad|hone|od)/.test(window.navigator.userAgent);\nconst hasOwn = (val, key) => Object.prototype.hasOwnProperty.call(val, key);\n\nfunction resolveUnref(r) {\n  return typeof r === \"function\" ? r() : unref(r);\n}\n\nfunction createFilterWrapper(filter, fn) {\n  function wrapper(...args) {\n    filter(() => fn.apply(this, args), { fn, thisArg: this, args });\n  }\n  return wrapper;\n}\nconst bypassFilter = (invoke) => {\n  return invoke();\n};\nfunction debounceFilter(ms, options = {}) {\n  let timer;\n  let maxTimer;\n  const filter = (invoke) => {\n    const duration = resolveUnref(ms);\n    const maxDuration = resolveUnref(options.maxWait);\n    if (timer)\n      clearTimeout(timer);\n    if (duration <= 0 || maxDuration !== void 0 && maxDuration <= 0) {\n      if (maxTimer) {\n        clearTimeout(maxTimer);\n        maxTimer = null;\n      }\n      return invoke();\n    }\n    if (maxDuration && !maxTimer) {\n      maxTimer = setTimeout(() => {\n        if (timer)\n          clearTimeout(timer);\n        maxTimer = null;\n        invoke();\n      }, maxDuration);\n    }\n    timer = setTimeout(() => {\n      if (maxTimer)\n        clearTimeout(maxTimer);\n      maxTimer = null;\n      invoke();\n    }, duration);\n  };\n  return filter;\n}\nfunction throttleFilter(ms, trailing = true, leading = true) {\n  let lastExec = 0;\n  let timer;\n  let isLeading = true;\n  const clear = () => {\n    if (timer) {\n      clearTimeout(timer);\n      timer = void 0;\n    }\n  };\n  const filter = (invoke) => {\n    const duration = resolveUnref(ms);\n    const elapsed = Date.now() - lastExec;\n    clear();\n    if (duration <= 0) {\n      lastExec = Date.now();\n      return invoke();\n    }\n    if (elapsed > duration && (leading || !isLeading)) {\n      lastExec = Date.now();\n      invoke();\n    } else if (trailing) {\n      timer = setTimeout(() => {\n        lastExec = Date.now();\n        isLeading = true;\n        clear();\n        invoke();\n      }, duration - elapsed);\n    }\n    if (!leading && !timer)\n      timer = setTimeout(() => isLeading = true, duration);\n    isLeading = false;\n  };\n  return filter;\n}\nfunction pausableFilter(extendFilter = bypassFilter) {\n  const isActive = ref(true);\n  function pause() {\n    isActive.value = false;\n  }\n  function resume() {\n    isActive.value = true;\n  }\n  const eventFilter = (...args) => {\n    if (isActive.value)\n      extendFilter(...args);\n  };\n  return { isActive, pause, resume, eventFilter };\n}\n\nfunction __onlyVue3(name = \"this function\") {\n  if (isVue3)\n    return;\n  throw new Error(`[VueUse] ${name} is only works on Vue 3.`);\n}\nfunction __onlyVue27Plus(name = \"this function\") {\n  if (isVue3 || version.startsWith(\"2.7.\"))\n    return;\n  throw new Error(`[VueUse] ${name} is only works on Vue 2.7 or above.`);\n}\nconst directiveHooks = {\n  mounted: isVue3 ? \"mounted\" : \"inserted\",\n  updated: isVue3 ? \"updated\" : \"componentUpdated\",\n  unmounted: isVue3 ? \"unmounted\" : \"unbind\"\n};\n\nfunction promiseTimeout(ms, throwOnTimeout = false, reason = \"Timeout\") {\n  return new Promise((resolve, reject) => {\n    if (throwOnTimeout)\n      setTimeout(() => reject(reason), ms);\n    else\n      setTimeout(resolve, ms);\n  });\n}\nfunction identity(arg) {\n  return arg;\n}\nfunction createSingletonPromise(fn) {\n  let _promise;\n  function wrapper() {\n    if (!_promise)\n      _promise = fn();\n    return _promise;\n  }\n  wrapper.reset = async () => {\n    const _prev = _promise;\n    _promise = void 0;\n    if (_prev)\n      await _prev;\n  };\n  return wrapper;\n}\nfunction invoke(fn) {\n  return fn();\n}\nfunction containsProp(obj, ...props) {\n  return props.some((k) => k in obj);\n}\nfunction increaseWithUnit(target, delta) {\n  var _a;\n  if (typeof target === \"number\")\n    return target + delta;\n  const value = ((_a = target.match(/^-?[0-9]+\\.?[0-9]*/)) == null ? void 0 : _a[0]) || \"\";\n  const unit = target.slice(value.length);\n  const result = parseFloat(value) + delta;\n  if (Number.isNaN(result))\n    return target;\n  return result + unit;\n}\nfunction objectPick(obj, keys, omitUndefined = false) {\n  return keys.reduce((n, k) => {\n    if (k in obj) {\n      if (!omitUndefined || obj[k] !== void 0)\n        n[k] = obj[k];\n    }\n    return n;\n  }, {});\n}\n\nfunction computedWithControl(source, fn) {\n  let v = void 0;\n  let track;\n  let trigger;\n  const dirty = ref(true);\n  const update = () => {\n    dirty.value = true;\n    trigger();\n  };\n  watch(source, update, { flush: \"sync\" });\n  const get = isFunction(fn) ? fn : fn.get;\n  const set = isFunction(fn) ? void 0 : fn.set;\n  const result = customRef((_track, _trigger) => {\n    track = _track;\n    trigger = _trigger;\n    return {\n      get() {\n        if (dirty.value) {\n          v = get();\n          dirty.value = false;\n        }\n        track();\n        return v;\n      },\n      set(v2) {\n        set == null ? void 0 : set(v2);\n      }\n    };\n  });\n  if (Object.isExtensible(result))\n    result.trigger = update;\n  return result;\n}\n\nfunction tryOnScopeDispose(fn) {\n  if (getCurrentScope()) {\n    onScopeDispose(fn);\n    return true;\n  }\n  return false;\n}\n\nfunction createEventHook() {\n  const fns = [];\n  const off = (fn) => {\n    const index = fns.indexOf(fn);\n    if (index !== -1)\n      fns.splice(index, 1);\n  };\n  const on = (fn) => {\n    fns.push(fn);\n    const offFn = () => off(fn);\n    tryOnScopeDispose(offFn);\n    return {\n      off: offFn\n    };\n  };\n  const trigger = (param) => {\n    fns.forEach((fn) => fn(param));\n  };\n  return {\n    on,\n    off,\n    trigger\n  };\n}\n\nfunction createGlobalState(stateFactory) {\n  let initialized = false;\n  let state;\n  const scope = effectScope(true);\n  return () => {\n    if (!initialized) {\n      state = scope.run(stateFactory);\n      initialized = true;\n    }\n    return state;\n  };\n}\n\nfunction createInjectionState(composable) {\n  const key = Symbol(\"InjectionState\");\n  const useProvidingState = (...args) => {\n    provide(key, composable(...args));\n  };\n  const useInjectedState = () => inject(key);\n  return [useProvidingState, useInjectedState];\n}\n\nfunction createSharedComposable(composable) {\n  let subscribers = 0;\n  let state;\n  let scope;\n  const dispose = () => {\n    subscribers -= 1;\n    if (scope && subscribers <= 0) {\n      scope.stop();\n      state = void 0;\n      scope = void 0;\n    }\n  };\n  return (...args) => {\n    subscribers += 1;\n    if (!state) {\n      scope = effectScope(true);\n      state = scope.run(() => composable(...args));\n    }\n    tryOnScopeDispose(dispose);\n    return state;\n  };\n}\n\nfunction extendRef(ref, extend, { enumerable = false, unwrap = true } = {}) {\n  __onlyVue27Plus();\n  for (const [key, value] of Object.entries(extend)) {\n    if (key === \"value\")\n      continue;\n    if (isRef(value) && unwrap) {\n      Object.defineProperty(ref, key, {\n        get() {\n          return value.value;\n        },\n        set(v) {\n          value.value = v;\n        },\n        enumerable\n      });\n    } else {\n      Object.defineProperty(ref, key, { value, enumerable });\n    }\n  }\n  return ref;\n}\n\nfunction get(obj, key) {\n  if (key == null)\n    return unref(obj);\n  return unref(obj)[key];\n}\n\nfunction isDefined(v) {\n  return unref(v) != null;\n}\n\nvar __defProp$8 = Object.defineProperty;\nvar __getOwnPropSymbols$a = Object.getOwnPropertySymbols;\nvar __hasOwnProp$a = Object.prototype.hasOwnProperty;\nvar __propIsEnum$a = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$8 = (obj, key, value) => key in obj ? __defProp$8(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$8 = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$a.call(b, prop))\n      __defNormalProp$8(a, prop, b[prop]);\n  if (__getOwnPropSymbols$a)\n    for (var prop of __getOwnPropSymbols$a(b)) {\n      if (__propIsEnum$a.call(b, prop))\n        __defNormalProp$8(a, prop, b[prop]);\n    }\n  return a;\n};\nfunction makeDestructurable(obj, arr) {\n  if (typeof Symbol !== \"undefined\") {\n    const clone = __spreadValues$8({}, obj);\n    Object.defineProperty(clone, Symbol.iterator, {\n      enumerable: false,\n      value() {\n        let index = 0;\n        return {\n          next: () => ({\n            value: arr[index++],\n            done: index > arr.length\n          })\n        };\n      }\n    });\n    return clone;\n  } else {\n    return Object.assign([...arr], obj);\n  }\n}\n\nfunction reactify(fn, options) {\n  const unrefFn = (options == null ? void 0 : options.computedGetter) === false ? unref : resolveUnref;\n  return function(...args) {\n    return computed(() => fn.apply(this, args.map((i) => unrefFn(i))));\n  };\n}\n\nfunction reactifyObject(obj, optionsOrKeys = {}) {\n  let keys = [];\n  let options;\n  if (Array.isArray(optionsOrKeys)) {\n    keys = optionsOrKeys;\n  } else {\n    options = optionsOrKeys;\n    const { includeOwnProperties = true } = optionsOrKeys;\n    keys.push(...Object.keys(obj));\n    if (includeOwnProperties)\n      keys.push(...Object.getOwnPropertyNames(obj));\n  }\n  return Object.fromEntries(keys.map((key) => {\n    const value = obj[key];\n    return [\n      key,\n      typeof value === \"function\" ? reactify(value.bind(obj), options) : value\n    ];\n  }));\n}\n\nfunction toReactive(objectRef) {\n  if (!isRef(objectRef))\n    return reactive(objectRef);\n  const proxy = new Proxy({}, {\n    get(_, p, receiver) {\n      return unref(Reflect.get(objectRef.value, p, receiver));\n    },\n    set(_, p, value) {\n      if (isRef(objectRef.value[p]) && !isRef(value))\n        objectRef.value[p].value = value;\n      else\n        objectRef.value[p] = value;\n      return true;\n    },\n    deleteProperty(_, p) {\n      return Reflect.deleteProperty(objectRef.value, p);\n    },\n    has(_, p) {\n      return Reflect.has(objectRef.value, p);\n    },\n    ownKeys() {\n      return Object.keys(objectRef.value);\n    },\n    getOwnPropertyDescriptor() {\n      return {\n        enumerable: true,\n        configurable: true\n      };\n    }\n  });\n  return reactive(proxy);\n}\n\nfunction reactiveComputed(fn) {\n  return toReactive(computed(fn));\n}\n\nfunction reactiveOmit(obj, ...keys) {\n  const flatKeys = keys.flat();\n  return reactiveComputed(() => Object.fromEntries(Object.entries(toRefs$1(obj)).filter((e) => !flatKeys.includes(e[0]))));\n}\n\nfunction reactivePick(obj, ...keys) {\n  const flatKeys = keys.flat();\n  return reactive(Object.fromEntries(flatKeys.map((k) => [k, toRef(obj, k)])));\n}\n\nfunction refAutoReset(defaultValue, afterMs = 1e4) {\n  return customRef((track, trigger) => {\n    let value = defaultValue;\n    let timer;\n    const resetAfter = () => setTimeout(() => {\n      value = defaultValue;\n      trigger();\n    }, resolveUnref(afterMs));\n    tryOnScopeDispose(() => {\n      clearTimeout(timer);\n    });\n    return {\n      get() {\n        track();\n        return value;\n      },\n      set(newValue) {\n        value = newValue;\n        trigger();\n        clearTimeout(timer);\n        timer = resetAfter();\n      }\n    };\n  });\n}\n\nfunction useDebounceFn(fn, ms = 200, options = {}) {\n  return createFilterWrapper(debounceFilter(ms, options), fn);\n}\n\nfunction refDebounced(value, ms = 200, options = {}) {\n  const debounced = ref(value.value);\n  const updater = useDebounceFn(() => {\n    debounced.value = value.value;\n  }, ms, options);\n  watch(value, () => updater());\n  return debounced;\n}\n\nfunction refDefault(source, defaultValue) {\n  return computed({\n    get() {\n      var _a;\n      return (_a = source.value) != null ? _a : defaultValue;\n    },\n    set(value) {\n      source.value = value;\n    }\n  });\n}\n\nfunction useThrottleFn(fn, ms = 200, trailing = false, leading = true) {\n  return createFilterWrapper(throttleFilter(ms, trailing, leading), fn);\n}\n\nfunction refThrottled(value, delay = 200, trailing = true, leading = true) {\n  if (delay <= 0)\n    return value;\n  const throttled = ref(value.value);\n  const updater = useThrottleFn(() => {\n    throttled.value = value.value;\n  }, delay, trailing, leading);\n  watch(value, () => updater());\n  return throttled;\n}\n\nfunction refWithControl(initial, options = {}) {\n  let source = initial;\n  let track;\n  let trigger;\n  const ref = customRef((_track, _trigger) => {\n    track = _track;\n    trigger = _trigger;\n    return {\n      get() {\n        return get();\n      },\n      set(v) {\n        set(v);\n      }\n    };\n  });\n  function get(tracking = true) {\n    if (tracking)\n      track();\n    return source;\n  }\n  function set(value, triggering = true) {\n    var _a, _b;\n    if (value === source)\n      return;\n    const old = source;\n    if (((_a = options.onBeforeChange) == null ? void 0 : _a.call(options, value, old)) === false)\n      return;\n    source = value;\n    (_b = options.onChanged) == null ? void 0 : _b.call(options, value, old);\n    if (triggering)\n      trigger();\n  }\n  const untrackedGet = () => get(false);\n  const silentSet = (v) => set(v, false);\n  const peek = () => get(false);\n  const lay = (v) => set(v, false);\n  return extendRef(ref, {\n    get,\n    set,\n    untrackedGet,\n    silentSet,\n    peek,\n    lay\n  }, { enumerable: true });\n}\nconst controlledRef = refWithControl;\n\nfunction resolveRef(r) {\n  return typeof r === \"function\" ? computed(r) : ref(r);\n}\n\nfunction set(...args) {\n  if (args.length === 2) {\n    const [ref, value] = args;\n    ref.value = value;\n  }\n  if (args.length === 3) {\n    if (isVue2) {\n      set$1(...args);\n    } else {\n      const [target, key, value] = args;\n      target[key] = value;\n    }\n  }\n}\n\nfunction syncRef(left, right, options = {}) {\n  var _a, _b;\n  const {\n    flush = \"sync\",\n    deep = false,\n    immediate = true,\n    direction = \"both\",\n    transform = {}\n  } = options;\n  let watchLeft;\n  let watchRight;\n  const transformLTR = (_a = transform.ltr) != null ? _a : (v) => v;\n  const transformRTL = (_b = transform.rtl) != null ? _b : (v) => v;\n  if (direction === \"both\" || direction === \"ltr\") {\n    watchLeft = watch(left, (newValue) => right.value = transformLTR(newValue), { flush, deep, immediate });\n  }\n  if (direction === \"both\" || direction === \"rtl\") {\n    watchRight = watch(right, (newValue) => left.value = transformRTL(newValue), { flush, deep, immediate });\n  }\n  return () => {\n    watchLeft == null ? void 0 : watchLeft();\n    watchRight == null ? void 0 : watchRight();\n  };\n}\n\nfunction syncRefs(source, targets, options = {}) {\n  const {\n    flush = \"sync\",\n    deep = false,\n    immediate = true\n  } = options;\n  if (!Array.isArray(targets))\n    targets = [targets];\n  return watch(source, (newValue) => targets.forEach((target) => target.value = newValue), { flush, deep, immediate });\n}\n\nvar __defProp$7 = Object.defineProperty;\nvar __defProps$5 = Object.defineProperties;\nvar __getOwnPropDescs$5 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$9 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$9 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$9 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$7 = (obj, key, value) => key in obj ? __defProp$7(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$7 = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$9.call(b, prop))\n      __defNormalProp$7(a, prop, b[prop]);\n  if (__getOwnPropSymbols$9)\n    for (var prop of __getOwnPropSymbols$9(b)) {\n      if (__propIsEnum$9.call(b, prop))\n        __defNormalProp$7(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps$5 = (a, b) => __defProps$5(a, __getOwnPropDescs$5(b));\nfunction toRefs(objectRef) {\n  if (!isRef(objectRef))\n    return toRefs$1(objectRef);\n  const result = Array.isArray(objectRef.value) ? new Array(objectRef.value.length) : {};\n  for (const key in objectRef.value) {\n    result[key] = customRef(() => ({\n      get() {\n        return objectRef.value[key];\n      },\n      set(v) {\n        if (Array.isArray(objectRef.value)) {\n          const copy = [...objectRef.value];\n          copy[key] = v;\n          objectRef.value = copy;\n        } else {\n          const newObject = __spreadProps$5(__spreadValues$7({}, objectRef.value), { [key]: v });\n          Object.setPrototypeOf(newObject, objectRef.value);\n          objectRef.value = newObject;\n        }\n      }\n    }));\n  }\n  return result;\n}\n\nfunction tryOnBeforeMount(fn, sync = true) {\n  if (getCurrentInstance())\n    onBeforeMount(fn);\n  else if (sync)\n    fn();\n  else\n    nextTick(fn);\n}\n\nfunction tryOnBeforeUnmount(fn) {\n  if (getCurrentInstance())\n    onBeforeUnmount(fn);\n}\n\nfunction tryOnMounted(fn, sync = true) {\n  if (getCurrentInstance())\n    onMounted(fn);\n  else if (sync)\n    fn();\n  else\n    nextTick(fn);\n}\n\nfunction tryOnUnmounted(fn) {\n  if (getCurrentInstance())\n    onUnmounted(fn);\n}\n\nfunction createUntil(r, isNot = false) {\n  function toMatch(condition, { flush = \"sync\", deep = false, timeout, throwOnTimeout } = {}) {\n    let stop = null;\n    const watcher = new Promise((resolve) => {\n      stop = watch(r, (v) => {\n        if (condition(v) !== isNot) {\n          stop == null ? void 0 : stop();\n          resolve(v);\n        }\n      }, {\n        flush,\n        deep,\n        immediate: true\n      });\n    });\n    const promises = [watcher];\n    if (timeout != null) {\n      promises.push(promiseTimeout(timeout, throwOnTimeout).then(() => resolveUnref(r)).finally(() => stop == null ? void 0 : stop()));\n    }\n    return Promise.race(promises);\n  }\n  function toBe(value, options) {\n    if (!isRef(value))\n      return toMatch((v) => v === value, options);\n    const { flush = \"sync\", deep = false, timeout, throwOnTimeout } = options != null ? options : {};\n    let stop = null;\n    const watcher = new Promise((resolve) => {\n      stop = watch([r, value], ([v1, v2]) => {\n        if (isNot !== (v1 === v2)) {\n          stop == null ? void 0 : stop();\n          resolve(v1);\n        }\n      }, {\n        flush,\n        deep,\n        immediate: true\n      });\n    });\n    const promises = [watcher];\n    if (timeout != null) {\n      promises.push(promiseTimeout(timeout, throwOnTimeout).then(() => resolveUnref(r)).finally(() => {\n        stop == null ? void 0 : stop();\n        return resolveUnref(r);\n      }));\n    }\n    return Promise.race(promises);\n  }\n  function toBeTruthy(options) {\n    return toMatch((v) => Boolean(v), options);\n  }\n  function toBeNull(options) {\n    return toBe(null, options);\n  }\n  function toBeUndefined(options) {\n    return toBe(void 0, options);\n  }\n  function toBeNaN(options) {\n    return toMatch(Number.isNaN, options);\n  }\n  function toContains(value, options) {\n    return toMatch((v) => {\n      const array = Array.from(v);\n      return array.includes(value) || array.includes(resolveUnref(value));\n    }, options);\n  }\n  function changed(options) {\n    return changedTimes(1, options);\n  }\n  function changedTimes(n = 1, options) {\n    let count = -1;\n    return toMatch(() => {\n      count += 1;\n      return count >= n;\n    }, options);\n  }\n  if (Array.isArray(resolveUnref(r))) {\n    const instance = {\n      toMatch,\n      toContains,\n      changed,\n      changedTimes,\n      get not() {\n        return createUntil(r, !isNot);\n      }\n    };\n    return instance;\n  } else {\n    const instance = {\n      toMatch,\n      toBe,\n      toBeTruthy,\n      toBeNull,\n      toBeNaN,\n      toBeUndefined,\n      changed,\n      changedTimes,\n      get not() {\n        return createUntil(r, !isNot);\n      }\n    };\n    return instance;\n  }\n}\nfunction until(r) {\n  return createUntil(r);\n}\n\nfunction useArrayEvery(list, fn) {\n  return computed(() => resolveUnref(list).every((element, index, array) => fn(resolveUnref(element), index, array)));\n}\n\nfunction useArrayFilter(list, fn) {\n  return computed(() => resolveUnref(list).map((i) => resolveUnref(i)).filter(fn));\n}\n\nfunction useArrayFind(list, fn) {\n  return computed(() => resolveUnref(resolveUnref(list).find((element, index, array) => fn(resolveUnref(element), index, array))));\n}\n\nfunction useArrayFindIndex(list, fn) {\n  return computed(() => resolveUnref(list).findIndex((element, index, array) => fn(resolveUnref(element), index, array)));\n}\n\nfunction useArrayJoin(list, separator) {\n  return computed(() => resolveUnref(list).map((i) => resolveUnref(i)).join(resolveUnref(separator)));\n}\n\nfunction useArrayMap(list, fn) {\n  return computed(() => resolveUnref(list).map((i) => resolveUnref(i)).map(fn));\n}\n\nfunction useArrayReduce(list, reducer, ...args) {\n  const reduceCallback = (sum, value, index) => reducer(resolveUnref(sum), resolveUnref(value), index);\n  return computed(() => {\n    const resolved = resolveUnref(list);\n    return args.length ? resolved.reduce(reduceCallback, resolveUnref(args[0])) : resolved.reduce(reduceCallback);\n  });\n}\n\nfunction useArraySome(list, fn) {\n  return computed(() => resolveUnref(list).some((element, index, array) => fn(resolveUnref(element), index, array)));\n}\n\nfunction useCounter(initialValue = 0, options = {}) {\n  const count = ref(initialValue);\n  const {\n    max = Infinity,\n    min = -Infinity\n  } = options;\n  const inc = (delta = 1) => count.value = Math.min(max, count.value + delta);\n  const dec = (delta = 1) => count.value = Math.max(min, count.value - delta);\n  const get = () => count.value;\n  const set = (val) => count.value = Math.max(min, Math.min(max, val));\n  const reset = (val = initialValue) => {\n    initialValue = val;\n    return set(val);\n  };\n  return { count, inc, dec, get, set, reset };\n}\n\nconst REGEX_PARSE = /^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/;\nconst REGEX_FORMAT = /\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a{1,2}|A{1,2}|m{1,2}|s{1,2}|Z{1,2}|SSS/g;\nconst defaultMeridiem = (hours, minutes, isLowercase, hasPeriod) => {\n  let m = hours < 12 ? \"AM\" : \"PM\";\n  if (hasPeriod)\n    m = m.split(\"\").reduce((acc, curr) => acc += `${curr}.`, \"\");\n  return isLowercase ? m.toLowerCase() : m;\n};\nconst formatDate = (date, formatStr, options = {}) => {\n  var _a;\n  const years = date.getFullYear();\n  const month = date.getMonth();\n  const days = date.getDate();\n  const hours = date.getHours();\n  const minutes = date.getMinutes();\n  const seconds = date.getSeconds();\n  const milliseconds = date.getMilliseconds();\n  const day = date.getDay();\n  const meridiem = (_a = options.customMeridiem) != null ? _a : defaultMeridiem;\n  const matches = {\n    YY: () => String(years).slice(-2),\n    YYYY: () => years,\n    M: () => month + 1,\n    MM: () => `${month + 1}`.padStart(2, \"0\"),\n    MMM: () => date.toLocaleDateString(options.locales, { month: \"short\" }),\n    MMMM: () => date.toLocaleDateString(options.locales, { month: \"long\" }),\n    D: () => String(days),\n    DD: () => `${days}`.padStart(2, \"0\"),\n    H: () => String(hours),\n    HH: () => `${hours}`.padStart(2, \"0\"),\n    h: () => `${hours % 12 || 12}`.padStart(1, \"0\"),\n    hh: () => `${hours % 12 || 12}`.padStart(2, \"0\"),\n    m: () => String(minutes),\n    mm: () => `${minutes}`.padStart(2, \"0\"),\n    s: () => String(seconds),\n    ss: () => `${seconds}`.padStart(2, \"0\"),\n    SSS: () => `${milliseconds}`.padStart(3, \"0\"),\n    d: () => day,\n    dd: () => date.toLocaleDateString(options.locales, { weekday: \"narrow\" }),\n    ddd: () => date.toLocaleDateString(options.locales, { weekday: \"short\" }),\n    dddd: () => date.toLocaleDateString(options.locales, { weekday: \"long\" }),\n    A: () => meridiem(hours, minutes),\n    AA: () => meridiem(hours, minutes, false, true),\n    a: () => meridiem(hours, minutes, true),\n    aa: () => meridiem(hours, minutes, true, true)\n  };\n  return formatStr.replace(REGEX_FORMAT, (match, $1) => $1 || matches[match]());\n};\nconst normalizeDate = (date) => {\n  if (date === null)\n    return new Date(NaN);\n  if (date === void 0)\n    return new Date();\n  if (date instanceof Date)\n    return new Date(date);\n  if (typeof date === \"string\" && !/Z$/i.test(date)) {\n    const d = date.match(REGEX_PARSE);\n    if (d) {\n      const m = d[2] - 1 || 0;\n      const ms = (d[7] || \"0\").substring(0, 3);\n      return new Date(d[1], m, d[3] || 1, d[4] || 0, d[5] || 0, d[6] || 0, ms);\n    }\n  }\n  return new Date(date);\n};\nfunction useDateFormat(date, formatStr = \"HH:mm:ss\", options = {}) {\n  return computed(() => formatDate(normalizeDate(resolveUnref(date)), resolveUnref(formatStr), options));\n}\n\nfunction useIntervalFn(cb, interval = 1e3, options = {}) {\n  const {\n    immediate = true,\n    immediateCallback = false\n  } = options;\n  let timer = null;\n  const isActive = ref(false);\n  function clean() {\n    if (timer) {\n      clearInterval(timer);\n      timer = null;\n    }\n  }\n  function pause() {\n    isActive.value = false;\n    clean();\n  }\n  function resume() {\n    if (unref(interval) <= 0)\n      return;\n    isActive.value = true;\n    if (immediateCallback)\n      cb();\n    clean();\n    timer = setInterval(cb, resolveUnref(interval));\n  }\n  if (immediate && isClient)\n    resume();\n  if (isRef(interval) || isFunction(interval)) {\n    const stopWatch = watch(interval, () => {\n      if (isActive.value && isClient)\n        resume();\n    });\n    tryOnScopeDispose(stopWatch);\n  }\n  tryOnScopeDispose(pause);\n  return {\n    isActive,\n    pause,\n    resume\n  };\n}\n\nvar __defProp$6 = Object.defineProperty;\nvar __getOwnPropSymbols$8 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$8 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$8 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$6 = (obj, key, value) => key in obj ? __defProp$6(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$6 = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$8.call(b, prop))\n      __defNormalProp$6(a, prop, b[prop]);\n  if (__getOwnPropSymbols$8)\n    for (var prop of __getOwnPropSymbols$8(b)) {\n      if (__propIsEnum$8.call(b, prop))\n        __defNormalProp$6(a, prop, b[prop]);\n    }\n  return a;\n};\nfunction useInterval(interval = 1e3, options = {}) {\n  const {\n    controls: exposeControls = false,\n    immediate = true,\n    callback\n  } = options;\n  const counter = ref(0);\n  const update = () => counter.value += 1;\n  const controls = useIntervalFn(callback ? () => {\n    update();\n    callback(counter.value);\n  } : update, interval, { immediate });\n  if (exposeControls) {\n    return __spreadValues$6({\n      counter\n    }, controls);\n  } else {\n    return counter;\n  }\n}\n\nfunction useLastChanged(source, options = {}) {\n  var _a;\n  const ms = ref((_a = options.initialValue) != null ? _a : null);\n  watch(source, () => ms.value = timestamp(), options);\n  return ms;\n}\n\nfunction useTimeoutFn(cb, interval, options = {}) {\n  const {\n    immediate = true\n  } = options;\n  const isPending = ref(false);\n  let timer = null;\n  function clear() {\n    if (timer) {\n      clearTimeout(timer);\n      timer = null;\n    }\n  }\n  function stop() {\n    isPending.value = false;\n    clear();\n  }\n  function start(...args) {\n    clear();\n    isPending.value = true;\n    timer = setTimeout(() => {\n      isPending.value = false;\n      timer = null;\n      cb(...args);\n    }, resolveUnref(interval));\n  }\n  if (immediate) {\n    isPending.value = true;\n    if (isClient)\n      start();\n  }\n  tryOnScopeDispose(stop);\n  return {\n    isPending,\n    start,\n    stop\n  };\n}\n\nvar __defProp$5 = Object.defineProperty;\nvar __getOwnPropSymbols$7 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$7 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$7 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$5 = (obj, key, value) => key in obj ? __defProp$5(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$5 = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$7.call(b, prop))\n      __defNormalProp$5(a, prop, b[prop]);\n  if (__getOwnPropSymbols$7)\n    for (var prop of __getOwnPropSymbols$7(b)) {\n      if (__propIsEnum$7.call(b, prop))\n        __defNormalProp$5(a, prop, b[prop]);\n    }\n  return a;\n};\nfunction useTimeout(interval = 1e3, options = {}) {\n  const {\n    controls: exposeControls = false,\n    callback\n  } = options;\n  const controls = useTimeoutFn(callback != null ? callback : noop, interval, options);\n  const ready = computed(() => !controls.isPending.value);\n  if (exposeControls) {\n    return __spreadValues$5({\n      ready\n    }, controls);\n  } else {\n    return ready;\n  }\n}\n\nfunction useToNumber(value, options = {}) {\n  const {\n    method = \"parseFloat\",\n    radix,\n    nanToZero\n  } = options;\n  return computed(() => {\n    let resolved = resolveUnref(value);\n    if (typeof resolved === \"string\")\n      resolved = Number[method](resolved, radix);\n    if (nanToZero && isNaN(resolved))\n      resolved = 0;\n    return resolved;\n  });\n}\n\nfunction useToString(value) {\n  return computed(() => `${resolveUnref(value)}`);\n}\n\nfunction useToggle(initialValue = false, options = {}) {\n  const {\n    truthyValue = true,\n    falsyValue = false\n  } = options;\n  const valueIsRef = isRef(initialValue);\n  const _value = ref(initialValue);\n  function toggle(value) {\n    if (arguments.length) {\n      _value.value = value;\n      return _value.value;\n    } else {\n      const truthy = resolveUnref(truthyValue);\n      _value.value = _value.value === truthy ? resolveUnref(falsyValue) : truthy;\n      return _value.value;\n    }\n  }\n  if (valueIsRef)\n    return toggle;\n  else\n    return [_value, toggle];\n}\n\nfunction watchArray(source, cb, options) {\n  let oldList = (options == null ? void 0 : options.immediate) ? [] : [\n    ...source instanceof Function ? source() : Array.isArray(source) ? source : unref(source)\n  ];\n  return watch(source, (newList, _, onCleanup) => {\n    const oldListRemains = new Array(oldList.length);\n    const added = [];\n    for (const obj of newList) {\n      let found = false;\n      for (let i = 0; i < oldList.length; i++) {\n        if (!oldListRemains[i] && obj === oldList[i]) {\n          oldListRemains[i] = true;\n          found = true;\n          break;\n        }\n      }\n      if (!found)\n        added.push(obj);\n    }\n    const removed = oldList.filter((_2, i) => !oldListRemains[i]);\n    cb(newList, oldList, added, removed, onCleanup);\n    oldList = [...newList];\n  }, options);\n}\n\nvar __getOwnPropSymbols$6 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$6 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$6 = Object.prototype.propertyIsEnumerable;\nvar __objRest$5 = (source, exclude) => {\n  var target = {};\n  for (var prop in source)\n    if (__hasOwnProp$6.call(source, prop) && exclude.indexOf(prop) < 0)\n      target[prop] = source[prop];\n  if (source != null && __getOwnPropSymbols$6)\n    for (var prop of __getOwnPropSymbols$6(source)) {\n      if (exclude.indexOf(prop) < 0 && __propIsEnum$6.call(source, prop))\n        target[prop] = source[prop];\n    }\n  return target;\n};\nfunction watchWithFilter(source, cb, options = {}) {\n  const _a = options, {\n    eventFilter = bypassFilter\n  } = _a, watchOptions = __objRest$5(_a, [\n    \"eventFilter\"\n  ]);\n  return watch(source, createFilterWrapper(eventFilter, cb), watchOptions);\n}\n\nvar __getOwnPropSymbols$5 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$5 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$5 = Object.prototype.propertyIsEnumerable;\nvar __objRest$4 = (source, exclude) => {\n  var target = {};\n  for (var prop in source)\n    if (__hasOwnProp$5.call(source, prop) && exclude.indexOf(prop) < 0)\n      target[prop] = source[prop];\n  if (source != null && __getOwnPropSymbols$5)\n    for (var prop of __getOwnPropSymbols$5(source)) {\n      if (exclude.indexOf(prop) < 0 && __propIsEnum$5.call(source, prop))\n        target[prop] = source[prop];\n    }\n  return target;\n};\nfunction watchAtMost(source, cb, options) {\n  const _a = options, {\n    count\n  } = _a, watchOptions = __objRest$4(_a, [\n    \"count\"\n  ]);\n  const current = ref(0);\n  const stop = watchWithFilter(source, (...args) => {\n    current.value += 1;\n    if (current.value >= resolveUnref(count))\n      nextTick(() => stop());\n    cb(...args);\n  }, watchOptions);\n  return { count: current, stop };\n}\n\nvar __defProp$4 = Object.defineProperty;\nvar __defProps$4 = Object.defineProperties;\nvar __getOwnPropDescs$4 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$4 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$4 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$4 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$4 = (obj, key, value) => key in obj ? __defProp$4(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$4 = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$4.call(b, prop))\n      __defNormalProp$4(a, prop, b[prop]);\n  if (__getOwnPropSymbols$4)\n    for (var prop of __getOwnPropSymbols$4(b)) {\n      if (__propIsEnum$4.call(b, prop))\n        __defNormalProp$4(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps$4 = (a, b) => __defProps$4(a, __getOwnPropDescs$4(b));\nvar __objRest$3 = (source, exclude) => {\n  var target = {};\n  for (var prop in source)\n    if (__hasOwnProp$4.call(source, prop) && exclude.indexOf(prop) < 0)\n      target[prop] = source[prop];\n  if (source != null && __getOwnPropSymbols$4)\n    for (var prop of __getOwnPropSymbols$4(source)) {\n      if (exclude.indexOf(prop) < 0 && __propIsEnum$4.call(source, prop))\n        target[prop] = source[prop];\n    }\n  return target;\n};\nfunction watchDebounced(source, cb, options = {}) {\n  const _a = options, {\n    debounce = 0,\n    maxWait = void 0\n  } = _a, watchOptions = __objRest$3(_a, [\n    \"debounce\",\n    \"maxWait\"\n  ]);\n  return watchWithFilter(source, cb, __spreadProps$4(__spreadValues$4({}, watchOptions), {\n    eventFilter: debounceFilter(debounce, { maxWait })\n  }));\n}\n\nvar __defProp$3 = Object.defineProperty;\nvar __defProps$3 = Object.defineProperties;\nvar __getOwnPropDescs$3 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$3 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$3 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$3 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$3 = (obj, key, value) => key in obj ? __defProp$3(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$3 = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$3.call(b, prop))\n      __defNormalProp$3(a, prop, b[prop]);\n  if (__getOwnPropSymbols$3)\n    for (var prop of __getOwnPropSymbols$3(b)) {\n      if (__propIsEnum$3.call(b, prop))\n        __defNormalProp$3(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps$3 = (a, b) => __defProps$3(a, __getOwnPropDescs$3(b));\nvar __objRest$2 = (source, exclude) => {\n  var target = {};\n  for (var prop in source)\n    if (__hasOwnProp$3.call(source, prop) && exclude.indexOf(prop) < 0)\n      target[prop] = source[prop];\n  if (source != null && __getOwnPropSymbols$3)\n    for (var prop of __getOwnPropSymbols$3(source)) {\n      if (exclude.indexOf(prop) < 0 && __propIsEnum$3.call(source, prop))\n        target[prop] = source[prop];\n    }\n  return target;\n};\nfunction watchIgnorable(source, cb, options = {}) {\n  const _a = options, {\n    eventFilter = bypassFilter\n  } = _a, watchOptions = __objRest$2(_a, [\n    \"eventFilter\"\n  ]);\n  const filteredCb = createFilterWrapper(eventFilter, cb);\n  let ignoreUpdates;\n  let ignorePrevAsyncUpdates;\n  let stop;\n  if (watchOptions.flush === \"sync\") {\n    const ignore = ref(false);\n    ignorePrevAsyncUpdates = () => {\n    };\n    ignoreUpdates = (updater) => {\n      ignore.value = true;\n      updater();\n      ignore.value = false;\n    };\n    stop = watch(source, (...args) => {\n      if (!ignore.value)\n        filteredCb(...args);\n    }, watchOptions);\n  } else {\n    const disposables = [];\n    const ignoreCounter = ref(0);\n    const syncCounter = ref(0);\n    ignorePrevAsyncUpdates = () => {\n      ignoreCounter.value = syncCounter.value;\n    };\n    disposables.push(watch(source, () => {\n      syncCounter.value++;\n    }, __spreadProps$3(__spreadValues$3({}, watchOptions), { flush: \"sync\" })));\n    ignoreUpdates = (updater) => {\n      const syncCounterPrev = syncCounter.value;\n      updater();\n      ignoreCounter.value += syncCounter.value - syncCounterPrev;\n    };\n    disposables.push(watch(source, (...args) => {\n      const ignore = ignoreCounter.value > 0 && ignoreCounter.value === syncCounter.value;\n      ignoreCounter.value = 0;\n      syncCounter.value = 0;\n      if (ignore)\n        return;\n      filteredCb(...args);\n    }, watchOptions));\n    stop = () => {\n      disposables.forEach((fn) => fn());\n    };\n  }\n  return { stop, ignoreUpdates, ignorePrevAsyncUpdates };\n}\n\nfunction watchOnce(source, cb, options) {\n  const stop = watch(source, (...args) => {\n    nextTick(() => stop());\n    return cb(...args);\n  }, options);\n}\n\nvar __defProp$2 = Object.defineProperty;\nvar __defProps$2 = Object.defineProperties;\nvar __getOwnPropDescs$2 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$2 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$2 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$2 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$2 = (obj, key, value) => key in obj ? __defProp$2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$2 = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$2.call(b, prop))\n      __defNormalProp$2(a, prop, b[prop]);\n  if (__getOwnPropSymbols$2)\n    for (var prop of __getOwnPropSymbols$2(b)) {\n      if (__propIsEnum$2.call(b, prop))\n        __defNormalProp$2(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps$2 = (a, b) => __defProps$2(a, __getOwnPropDescs$2(b));\nvar __objRest$1 = (source, exclude) => {\n  var target = {};\n  for (var prop in source)\n    if (__hasOwnProp$2.call(source, prop) && exclude.indexOf(prop) < 0)\n      target[prop] = source[prop];\n  if (source != null && __getOwnPropSymbols$2)\n    for (var prop of __getOwnPropSymbols$2(source)) {\n      if (exclude.indexOf(prop) < 0 && __propIsEnum$2.call(source, prop))\n        target[prop] = source[prop];\n    }\n  return target;\n};\nfunction watchPausable(source, cb, options = {}) {\n  const _a = options, {\n    eventFilter: filter\n  } = _a, watchOptions = __objRest$1(_a, [\n    \"eventFilter\"\n  ]);\n  const { eventFilter, pause, resume, isActive } = pausableFilter(filter);\n  const stop = watchWithFilter(source, cb, __spreadProps$2(__spreadValues$2({}, watchOptions), {\n    eventFilter\n  }));\n  return { stop, pause, resume, isActive };\n}\n\nvar __defProp$1 = Object.defineProperty;\nvar __defProps$1 = Object.defineProperties;\nvar __getOwnPropDescs$1 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$1 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$1 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$1 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$1 = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$1.call(b, prop))\n      __defNormalProp$1(a, prop, b[prop]);\n  if (__getOwnPropSymbols$1)\n    for (var prop of __getOwnPropSymbols$1(b)) {\n      if (__propIsEnum$1.call(b, prop))\n        __defNormalProp$1(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps$1 = (a, b) => __defProps$1(a, __getOwnPropDescs$1(b));\nvar __objRest = (source, exclude) => {\n  var target = {};\n  for (var prop in source)\n    if (__hasOwnProp$1.call(source, prop) && exclude.indexOf(prop) < 0)\n      target[prop] = source[prop];\n  if (source != null && __getOwnPropSymbols$1)\n    for (var prop of __getOwnPropSymbols$1(source)) {\n      if (exclude.indexOf(prop) < 0 && __propIsEnum$1.call(source, prop))\n        target[prop] = source[prop];\n    }\n  return target;\n};\nfunction watchThrottled(source, cb, options = {}) {\n  const _a = options, {\n    throttle = 0,\n    trailing = true,\n    leading = true\n  } = _a, watchOptions = __objRest(_a, [\n    \"throttle\",\n    \"trailing\",\n    \"leading\"\n  ]);\n  return watchWithFilter(source, cb, __spreadProps$1(__spreadValues$1({}, watchOptions), {\n    eventFilter: throttleFilter(throttle, trailing, leading)\n  }));\n}\n\nvar __defProp = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp.call(b, prop))\n      __defNormalProp(a, prop, b[prop]);\n  if (__getOwnPropSymbols)\n    for (var prop of __getOwnPropSymbols(b)) {\n      if (__propIsEnum.call(b, prop))\n        __defNormalProp(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\nfunction watchTriggerable(source, cb, options = {}) {\n  let cleanupFn;\n  function onEffect() {\n    if (!cleanupFn)\n      return;\n    const fn = cleanupFn;\n    cleanupFn = void 0;\n    fn();\n  }\n  function onCleanup(callback) {\n    cleanupFn = callback;\n  }\n  const _cb = (value, oldValue) => {\n    onEffect();\n    return cb(value, oldValue, onCleanup);\n  };\n  const res = watchIgnorable(source, _cb, options);\n  const { ignoreUpdates } = res;\n  const trigger = () => {\n    let res2;\n    ignoreUpdates(() => {\n      res2 = _cb(getWatchSources(source), getOldValue(source));\n    });\n    return res2;\n  };\n  return __spreadProps(__spreadValues({}, res), {\n    trigger\n  });\n}\nfunction getWatchSources(sources) {\n  if (isReactive(sources))\n    return sources;\n  if (Array.isArray(sources))\n    return sources.map((item) => getOneWatchSource(item));\n  return getOneWatchSource(sources);\n}\nfunction getOneWatchSource(source) {\n  return typeof source === \"function\" ? source() : unref(source);\n}\nfunction getOldValue(source) {\n  return Array.isArray(source) ? source.map(() => void 0) : void 0;\n}\n\nfunction whenever(source, cb, options) {\n  return watch(source, (v, ov, onInvalidate) => {\n    if (v)\n      cb(v, ov, onInvalidate);\n  }, options);\n}\n\nexport { __onlyVue27Plus, __onlyVue3, assert, refAutoReset as autoResetRef, bypassFilter, clamp, computedEager, computedWithControl, containsProp, computedWithControl as controlledComputed, controlledRef, createEventHook, createFilterWrapper, createGlobalState, createInjectionState, reactify as createReactiveFn, createSharedComposable, createSingletonPromise, debounceFilter, refDebounced as debouncedRef, watchDebounced as debouncedWatch, directiveHooks, computedEager as eagerComputed, extendRef, formatDate, get, hasOwn, identity, watchIgnorable as ignorableWatch, increaseWithUnit, invoke, isBoolean, isClient, isDef, isDefined, isFunction, isIOS, isNumber, isObject, isString, isWindow, makeDestructurable, noop, normalizeDate, now, objectPick, pausableFilter, watchPausable as pausableWatch, promiseTimeout, rand, reactify, reactifyObject, reactiveComputed, reactiveOmit, reactivePick, refAutoReset, refDebounced, refDefault, refThrottled, refWithControl, resolveRef, resolveUnref, set, syncRef, syncRefs, throttleFilter, refThrottled as throttledRef, watchThrottled as throttledWatch, timestamp, toReactive, toRefs, tryOnBeforeMount, tryOnBeforeUnmount, tryOnMounted, tryOnScopeDispose, tryOnUnmounted, until, useArrayEvery, useArrayFilter, useArrayFind, useArrayFindIndex, useArrayJoin, useArrayMap, useArrayReduce, useArraySome, useCounter, useDateFormat, refDebounced as useDebounce, useDebounceFn, useInterval, useIntervalFn, useLastChanged, refThrottled as useThrottle, useThrottleFn, useTimeout, useTimeoutFn, useToNumber, useToString, useToggle, watchArray, watchAtMost, watchDebounced, watchIgnorable, watchOnce, watchPausable, watchThrottled, watchTriggerable, watchWithFilter, whenever };\n/LICENSE\u0004MMIT License\n\nCopyright (c) 2019-PRESENT Anthony Fu<https://github.com/antfu>\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n/index.d.tsŧ\u001bimport * as vue_demi from 'vue-demi';\nimport { WatchOptionsBase, Ref, ComputedRef, WritableComputedRef, WatchSource, ComputedGetter, WritableComputedOptions, ShallowUnwrapRef as ShallowUnwrapRef$1, WatchOptions, UnwrapRef, ToRefs, WatchCallback, WatchStopHandle } from 'vue-demi';\n\ndeclare function computedEager<T>(fn: () => T, options?: WatchOptionsBase): Readonly<Ref<T>>;\n\ninterface ComputedWithControlRefExtra {\n    /**\n     * Force update the computed value.\n     */\n    trigger(): void;\n}\ninterface ComputedRefWithControl<T> extends ComputedRef<T>, ComputedWithControlRefExtra {\n}\ninterface WritableComputedRefWithControl<T> extends WritableComputedRef<T>, ComputedWithControlRefExtra {\n}\ndeclare function computedWithControl<T, S>(source: WatchSource<S> | WatchSource<S>[], fn: ComputedGetter<T>): ComputedRefWithControl<T>;\ndeclare function computedWithControl<T, S>(source: WatchSource<S> | WatchSource<S>[], fn: WritableComputedOptions<T>): WritableComputedRefWithControl<T>;\n\ndeclare type EventHookOn<T = any> = (fn: (param: T) => void) => {\n    off: () => void;\n};\ndeclare type EventHookOff<T = any> = (fn: (param: T) => void) => void;\ndeclare type EventHookTrigger<T = any> = (param: T) => void;\ninterface EventHook<T = any> {\n    on: EventHookOn<T>;\n    off: EventHookOff<T>;\n    trigger: EventHookTrigger<T>;\n}\n/**\n * Utility for creating event hooks\n *\n * @see https://vueuse.org/createEventHook\n */\ndeclare function createEventHook<T = any>(): EventHook<T>;\n\ndeclare type CreateGlobalStateReturn<T> = () => T;\n/**\n * Keep states in the global scope to be reusable across Vue instances.\n *\n * @see https://vueuse.org/createGlobalState\n * @param stateFactory A factory function to create the state\n */\ndeclare function createGlobalState<T>(stateFactory: () => T): CreateGlobalStateReturn<T>;\n\n/**\n * Create global state that can be injected into components.\n *\n * @see https://vueuse.org/createInjectionState\n *\n */\ndeclare function createInjectionState<Arguments extends Array<any>, Return>(composable: (...args: Arguments) => Return): readonly [useProvidingState: (...args: Arguments) => void, useInjectedState: () => Return | undefined];\n\n/**\n * Make a composable function usable with multiple Vue instances.\n *\n * @see https://vueuse.org/createSharedComposable\n */\ndeclare function createSharedComposable<Fn extends ((...args: any[]) => any)>(composable: Fn): Fn;\n\ninterface ExtendRefOptions<Unwrap extends boolean = boolean> {\n    /**\n     * Is the extends properties enumerable\n     *\n     * @default false\n     */\n    enumerable?: boolean;\n    /**\n     * Unwrap for Ref properties\n     *\n     * @default true\n     */\n    unwrap?: Unwrap;\n}\n/**\n * Overload 1: Unwrap set to false\n */\ndeclare function extendRef<R extends Ref<any>, Extend extends object, Options extends ExtendRefOptions<false>>(ref: R, extend: Extend, options?: Options): ShallowUnwrapRef$1<Extend> & R;\n/**\n * Overload 2: Unwrap unset or set to true\n */\ndeclare function extendRef<R extends Ref<any>, Extend extends object, Options extends ExtendRefOptions>(ref: R, extend: Extend, options?: Options): Extend & R;\n\ndeclare const isClient: boolean;\ndeclare const isDef: <T = any>(val?: T | undefined) => val is T;\ndeclare const assert: (condition: boolean, ...infos: any[]) => void;\ndeclare const isBoolean: (val: any) => val is boolean;\ndeclare const isFunction: <T extends Function>(val: any) => val is T;\ndeclare const isNumber: (val: any) => val is number;\ndeclare const isString: (val: unknown) => val is string;\ndeclare const isObject: (val: any) => val is object;\ndeclare const isWindow: (val: any) => val is Window;\ndeclare const now: () => number;\ndeclare const timestamp: () => number;\ndeclare const clamp: (n: number, min: number, max: number) => number;\ndeclare const noop: () => void;\ndeclare const rand: (min: number, max: number) => number;\ndeclare const isIOS: boolean | \"\";\ndeclare const hasOwn: <T extends object, K extends keyof T>(val: T, key: K) => key is K;\n\n/**\n * Any function\n */\ndeclare type Fn = () => void;\n/**\n * A ref that allow to set null or undefined\n */\ndeclare type RemovableRef<T> = Omit<Ref<T>, 'value'> & {\n    get value(): T;\n    set value(value: T | null | undefined);\n};\n/**\n * @deprecated Use `RemovableRef`\n */\ndeclare type RemoveableRef<T> = RemovableRef<T>;\n/**\n * Maybe it's a ref, or a plain value\n *\n * ```ts\n * type MaybeRef<T> = T | Ref<T>\n * ```\n */\ndeclare type MaybeRef<T> = T | Ref<T>;\n/**\n * Maybe it's a ref, or a plain value, or a getter function\n *\n * ```ts\n * type MaybeComputedRef<T> = (() => T) | T | Ref<T> | ComputedRef<T>\n * ```\n */\ndeclare type MaybeComputedRef<T> = MaybeReadonlyRef<T> | MaybeRef<T>;\n/**\n * Maybe it's a computed ref, or a getter function\n *\n * ```ts\n * type MaybeReadonlyRef<T> = (() => T) | ComputedRef<T>\n * ```\n */\ndeclare type MaybeReadonlyRef<T> = (() => T) | ComputedRef<T>;\n/**\n * Make all the nested attributes of an object or array to MaybeRef<T>\n *\n * Good for accepting options that will be wrapped with `reactive` or `ref`\n *\n * ```ts\n * UnwrapRef<DeepMaybeRef<T>> === T\n * ```\n */\ndeclare type DeepMaybeRef<T> = T extends Ref<infer V> ? MaybeRef<V> : T extends Array<any> | object ? {\n    [K in keyof T]: DeepMaybeRef<T[K]>;\n} : MaybeRef<T>;\ndeclare type Arrayable<T> = T[] | T;\n/**\n * Infers the element type of an array\n */\ndeclare type ElementOf<T> = T extends (infer E)[] ? E : never;\ndeclare type ShallowUnwrapRef<T> = T extends Ref<infer P> ? P : T;\ndeclare type Awaitable<T> = Promise<T> | T;\ndeclare type ArgumentsType<T> = T extends (...args: infer U) => any ? U : never;\ninterface Pausable {\n    /**\n     * A ref indicate whether a pausable instance is active\n     */\n    isActive: Ref<boolean>;\n    /**\n     * Temporary pause the effect from executing\n     */\n    pause: Fn;\n    /**\n     * Resume the effects\n     */\n    resume: Fn;\n}\ninterface Stoppable {\n    /**\n     * A ref indicate whether a stoppable instance is executing\n     */\n    isPending: Ref<boolean>;\n    /**\n     * Stop the effect from executing\n     */\n    stop: Fn;\n    /**\n     * Start the effects\n     */\n    start: Fn;\n}\n/**\n * @deprecated Use `Stoppable`\n */\ndeclare type Stopable = Stoppable;\ninterface ConfigurableFlush {\n    /**\n     * Timing for monitoring changes, refer to WatchOptions for more details\n     *\n     * @default 'pre'\n     */\n    flush?: WatchOptions['flush'];\n}\ninterface ConfigurableFlushSync {\n    /**\n     * Timing for monitoring changes, refer to WatchOptions for more details.\n     * Unlike `watch()`, the default is set to `sync`\n     *\n     * @default 'sync'\n     */\n    flush?: WatchOptions['flush'];\n}\ndeclare type MapSources<T> = {\n    [K in keyof T]: T[K] extends WatchSource<infer V> ? V : never;\n};\ndeclare type MapOldSources<T, Immediate> = {\n    [K in keyof T]: T[K] extends WatchSource<infer V> ? Immediate extends true ? V | undefined : V : never;\n};\n\ndeclare type FunctionArgs<Args extends any[] = any[], Return = void> = (...args: Args) => Return;\ninterface FunctionWrapperOptions<Args extends any[] = any[], This = any> {\n    fn: FunctionArgs<Args, This>;\n    args: Args;\n    thisArg: This;\n}\ndeclare type EventFilter<Args extends any[] = any[], This = any> = (invoke: Fn, options: FunctionWrapperOptions<Args, This>) => void;\ninterface ConfigurableEventFilter {\n    /**\n     * Filter for if events should to be received.\n     *\n     * @see https://vueuse.org/guide/config.html#event-filters\n     */\n    eventFilter?: EventFilter;\n}\ninterface DebounceFilterOptions {\n    /**\n     * The maximum time allowed to be delayed before it's invoked.\n     * In milliseconds.\n     */\n    maxWait?: MaybeComputedRef<number>;\n}\n/**\n * @internal\n */\ndeclare function createFilterWrapper<T extends FunctionArgs>(filter: EventFilter, fn: T): T;\ndeclare const bypassFilter: EventFilter;\n/**\n * Create an EventFilter that debounce the events\n *\n * @param ms\n * @param options\n */\ndeclare function debounceFilter(ms: MaybeComputedRef<number>, options?: DebounceFilterOptions): EventFilter<any[], any>;\n/**\n * Create an EventFilter that throttle the events\n *\n * @param ms\n * @param [trailing=true]\n * @param [leading=true]\n */\ndeclare function throttleFilter(ms: MaybeComputedRef<number>, trailing?: boolean, leading?: boolean): EventFilter<any[], any>;\n/**\n * EventFilter that gives extra controls to pause and resume the filter\n *\n * @param extendFilter  Extra filter to apply when the PausableFilter is active, default to none\n *\n */\ndeclare function pausableFilter(extendFilter?: EventFilter): Pausable & {\n    eventFilter: EventFilter;\n};\n\ndeclare function __onlyVue3(name?: string): void;\ndeclare function __onlyVue27Plus(name?: string): void;\ndeclare const directiveHooks: {\n    mounted: \"mounted\";\n    updated: \"updated\";\n    unmounted: \"unmounted\";\n};\n\ndeclare function promiseTimeout(ms: number, throwOnTimeout?: boolean, reason?: string): Promise<void>;\ndeclare function identity<T>(arg: T): T;\ninterface SingletonPromiseReturn<T> {\n    (): Promise<T>;\n    /**\n     * Reset current staled promise.\n     * await it to have proper shutdown.\n     */\n    reset: () => Promise<void>;\n}\n/**\n * Create singleton promise function\n *\n * @example\n * ```\n * const promise = createSingletonPromise(async () => { ... })\n *\n * await promise()\n * await promise() // all of them will be bind to a single promise instance\n * await promise() // and be resolved together\n * ```\n */\ndeclare function createSingletonPromise<T>(fn: () => Promise<T>): SingletonPromiseReturn<T>;\ndeclare function invoke<T>(fn: () => T): T;\ndeclare function containsProp(obj: object, ...props: string[]): boolean;\n/**\n * Increase string a value with unit\n *\n * @example '2px' + 1 = '3px'\n * @example '15em' + (-2) = '13em'\n */\ndeclare function increaseWithUnit(target: number, delta: number): number;\ndeclare function increaseWithUnit(target: string, delta: number): string;\ndeclare function increaseWithUnit(target: string | number, delta: number): string | number;\n/**\n * Create a new subset object by giving keys\n *\n * @category Object\n */\ndeclare function objectPick<O, T extends keyof O>(obj: O, keys: T[], omitUndefined?: boolean): Pick<O, T>;\n\n/**\n * Shorthand for accessing `ref.value`\n */\ndeclare function get<T>(ref: MaybeRef<T>): T;\ndeclare function get<T, K extends keyof T>(ref: MaybeRef<T>, key: K): T[K];\n\ndeclare function isDefined<T>(v: Ref<T>): v is Ref<Exclude<T, null | undefined>>;\ndeclare function isDefined<T>(v: ComputedRef<T>): v is ComputedRef<Exclude<T, null | undefined>>;\ndeclare function isDefined<T>(v: T): v is Exclude<T, null | undefined>;\n\ndeclare function makeDestructurable<T extends Record<string, unknown>, A extends readonly any[]>(obj: T, arr: A): T & A;\n\ndeclare type Reactified<T, Computed extends boolean> = T extends (...args: infer A) => infer R ? (...args: {\n    [K in keyof A]: Computed extends true ? MaybeComputedRef<A[K]> : MaybeRef<A[K]>;\n}) => ComputedRef<R> : never;\ninterface ReactifyOptions<T extends boolean> {\n    /**\n     * Accept passing a function as a reactive getter\n     *\n     * @default true\n     */\n    computedGetter?: T;\n}\n/**\n * Converts plain function into a reactive function.\n * The converted function accepts refs as it's arguments\n * and returns a ComputedRef, with proper typing.\n *\n * @param fn - Source function\n */\ndeclare function reactify<T extends Function, K extends boolean = true>(fn: T, options?: ReactifyOptions<K>): Reactified<T, K>;\n\ndeclare type ReactifyNested<T, Keys extends keyof T = keyof T, S extends boolean = true> = {\n    [K in Keys]: T[K] extends (...args: any[]) => any ? Reactified<T[K], S> : T[K];\n};\ninterface ReactifyObjectOptions<T extends boolean> extends ReactifyOptions<T> {\n    /**\n     * Includes names from Object.getOwnPropertyNames\n     *\n     * @default true\n     */\n    includeOwnProperties?: boolean;\n}\n/**\n * Apply `reactify` to an object\n */\ndeclare function reactifyObject<T extends object, Keys extends keyof T>(obj: T, keys?: (keyof T)[]): ReactifyNested<T, Keys, true>;\ndeclare function reactifyObject<T extends object, S extends boolean = true>(obj: T, options?: ReactifyObjectOptions<S>): ReactifyNested<T, keyof T, S>;\n\n/**\n * Computed reactive object.\n */\ndeclare function reactiveComputed<T extends {}>(fn: () => T): T;\n\n/**\n * Reactively omit fields from a reactive object\n *\n * @see https://vueuse.org/reactiveOmit\n */\ndeclare function reactiveOmit<T extends object, K extends keyof T>(obj: T, ...keys: (K | K[])[]): Omit<T, K>;\n\n/**\n * Reactively pick fields from a reactive object\n *\n * @see https://vueuse.org/reactivePick\n */\ndeclare function reactivePick<T extends object, K extends keyof T>(obj: T, ...keys: (K | K[])[]): {\n    [S in K]: UnwrapRef<T[S]>;\n};\n\n/**\n * Create a ref which will be reset to the default value after some time.\n *\n * @see https://vueuse.org/refAutoReset\n * @param defaultValue The value which will be set.\n * @param afterMs      A zero-or-greater delay in milliseconds.\n */\ndeclare function refAutoReset<T>(defaultValue: T, afterMs?: MaybeComputedRef<number>): Ref<T>;\n\n/**\n * Debounce updates of a ref.\n *\n * @return A new debounced ref.\n */\ndeclare function refDebounced<T>(value: Ref<T>, ms?: MaybeComputedRef<number>, options?: DebounceFilterOptions): Readonly<Ref<T>>;\n\n/**\n * Apply default value to a ref.\n *\n * @param source source ref\n * @param targets\n */\ndeclare function refDefault<T>(source: Ref<T | undefined | null>, defaultValue: T): Ref<T>;\n\n/**\n * Throttle execution of a function. Especially useful for rate limiting\n * execution of handlers on events like resize and scroll.\n *\n * @param value Ref value to be watched with throttle effect\n * @param  delay  A zero-or-greater delay in milliseconds. For event callbacks, values around 100 or 250 (or even higher) are most useful.\n * @param [trailing=true] if true, update the value again after the delay time is up\n * @param [leading=true] if true, update the value on the leading edge of the ms timeout\n */\ndeclare function refThrottled<T>(value: Ref<T>, delay?: number, trailing?: boolean, leading?: boolean): Ref<T>;\n\ninterface ControlledRefOptions<T> {\n    /**\n     * Callback function before the ref changing.\n     *\n     * Returning `false` to dismiss the change.\n     */\n    onBeforeChange?: (value: T, oldValue: T) => void | boolean;\n    /**\n     * Callback function after the ref changed\n     *\n     * This happens synchronously, with less overhead compare to `watch`\n     */\n    onChanged?: (value: T, oldValue: T) => void;\n}\n/**\n * Explicitly define the deps of computed.\n *\n * @param source\n * @param fn\n */\ndeclare function refWithControl<T>(initial: T, options?: ControlledRefOptions<T>): vue_demi.ShallowUnwrapRef<{\n    get: (tracking?: boolean) => T;\n    set: (value: T, triggering?: boolean) => void;\n    untrackedGet: () => T;\n    silentSet: (v: T) => void;\n    peek: () => T;\n    lay: (v: T) => void;\n}> & vue_demi.Ref<T>;\n/**\n * Alias for `refWithControl`\n */\ndeclare const controlledRef: typeof refWithControl;\n\n/**\n * Normalize value/ref/getter to `ref` or `computed`.\n */\ndeclare function resolveRef<T>(r: MaybeComputedRef<T>): ComputedRef<T>;\ndeclare function resolveRef<T>(r: MaybeRef<T>): Ref<T>;\ndeclare function resolveRef<T>(r: T): Ref<T>;\n\n/**\n * Get the value of value/ref/getter.\n */\ndeclare function resolveUnref<T>(r: MaybeComputedRef<T>): T;\n\ndeclare function set<T>(ref: Ref<T>, value: T): void;\ndeclare function set<O extends object, K extends keyof O>(target: O, key: K, value: O[K]): void;\n\ninterface SyncRefOptions<L, R = L> extends ConfigurableFlushSync {\n    /**\n     * Watch deeply\n     *\n     * @default false\n     */\n    deep?: boolean;\n    /**\n     * Sync values immediately\n     *\n     * @default true\n     */\n    immediate?: boolean;\n    /**\n     * Direction of syncing. Value will be redefined if you define syncConvertors\n     *\n     * @default 'both'\n     */\n    direction?: 'ltr' | 'rtl' | 'both';\n    /**\n     * Custom transform function\n     */\n    transform?: {\n        ltr?: (left: L) => R;\n        rtl?: (right: R) => L;\n    };\n}\n/**\n * Two-way refs synchronization.\n *\n * @param left\n * @param right\n */\ndeclare function syncRef<L, R = L>(left: Ref<L>, right: Ref<R>, options?: SyncRefOptions<L, R>): () => void;\n\ninterface SyncRefsOptions extends ConfigurableFlushSync {\n    /**\n     * Watch deeply\n     *\n     * @default false\n     */\n    deep?: boolean;\n    /**\n     * Sync values immediately\n     *\n     * @default true\n     */\n    immediate?: boolean;\n}\n/**\n * Keep target ref(s) in sync with the source ref\n *\n * @param source source ref\n * @param targets\n */\ndeclare function syncRefs<T>(source: WatchSource<T>, targets: Ref<T> | Ref<T>[], options?: SyncRefsOptions): vue_demi.WatchStopHandle;\n\n/**\n * Converts ref to reactive.\n *\n * @see https://vueuse.org/toReactive\n * @param objectRef A ref of object\n */\ndeclare function toReactive<T extends object>(objectRef: MaybeRef<T>): T;\n\n/**\n * Extended `toRefs` that also accepts refs of an object.\n *\n * @see https://vueuse.org/toRefs\n * @param objectRef A ref or normal object or array.\n */\ndeclare function toRefs<T extends object>(objectRef: MaybeRef<T>): ToRefs<T>;\n\n/**\n * Call onBeforeMount() if it's inside a component lifecycle, if not, just call the function\n *\n * @param fn\n * @param sync if set to false, it will run in the nextTick() of Vue\n */\ndeclare function tryOnBeforeMount(fn: Fn, sync?: boolean): void;\n\n/**\n * Call onBeforeUnmount() if it's inside a component lifecycle, if not, do nothing\n *\n * @param fn\n */\ndeclare function tryOnBeforeUnmount(fn: Fn): void;\n\n/**\n * Call onMounted() if it's inside a component lifecycle, if not, just call the function\n *\n * @param fn\n * @param sync if set to false, it will run in the nextTick() of Vue\n */\ndeclare function tryOnMounted(fn: Fn, sync?: boolean): void;\n\n/**\n * Call onScopeDispose() if it's inside a effect scope lifecycle, if not, do nothing\n *\n * @param fn\n */\ndeclare function tryOnScopeDispose(fn: Fn): boolean;\n\n/**\n * Call onUnmounted() if it's inside a component lifecycle, if not, do nothing\n *\n * @param fn\n */\ndeclare function tryOnUnmounted(fn: Fn): void;\n\ninterface UntilToMatchOptions {\n    /**\n     * Milliseconds timeout for promise to resolve/reject if the when condition does not meet.\n     * 0 for never timed out\n     *\n     * @default 0\n     */\n    timeout?: number;\n    /**\n     * Reject the promise when timeout\n     *\n     * @default false\n     */\n    throwOnTimeout?: boolean;\n    /**\n     * `flush` option for internal watch\n     *\n     * @default 'sync'\n     */\n    flush?: WatchOptions['flush'];\n    /**\n     * `deep` option for internal watch\n     *\n     * @default 'false'\n     */\n    deep?: WatchOptions['deep'];\n}\ninterface UntilBaseInstance<T, Not extends boolean = false> {\n    toMatch<U extends T = T>(condition: (v: T) => v is U, options?: UntilToMatchOptions): Not extends true ? Promise<Exclude<T, U>> : Promise<U>;\n    toMatch(condition: (v: T) => boolean, options?: UntilToMatchOptions): Promise<T>;\n    changed(options?: UntilToMatchOptions): Promise<T>;\n    changedTimes(n?: number, options?: UntilToMatchOptions): Promise<T>;\n}\ndeclare type Falsy = false | void | null | undefined | 0 | 0n | '';\ninterface UntilValueInstance<T, Not extends boolean = false> extends UntilBaseInstance<T, Not> {\n    readonly not: UntilValueInstance<T, Not extends true ? false : true>;\n    toBe<P = T>(value: MaybeComputedRef<P>, options?: UntilToMatchOptions): Not extends true ? Promise<T> : Promise<P>;\n    toBeTruthy(options?: UntilToMatchOptions): Not extends true ? Promise<T & Falsy> : Promise<Exclude<T, Falsy>>;\n    toBeNull(options?: UntilToMatchOptions): Not extends true ? Promise<Exclude<T, null>> : Promise<null>;\n    toBeUndefined(options?: UntilToMatchOptions): Not extends true ? Promise<Exclude<T, undefined>> : Promise<undefined>;\n    toBeNaN(options?: UntilToMatchOptions): Promise<T>;\n}\ninterface UntilArrayInstance<T> extends UntilBaseInstance<T> {\n    readonly not: UntilArrayInstance<T>;\n    toContains(value: MaybeComputedRef<ElementOf<ShallowUnwrapRef<T>>>, options?: UntilToMatchOptions): Promise<T>;\n}\n/**\n * Promised one-time watch for changes\n *\n * @see https://vueuse.org/until\n * @example\n * ```\n * const { count } = useCounter()\n *\n * await until(count).toMatch(v => v > 7)\n *\n * alert('Counter is now larger than 7!')\n * ```\n */\ndeclare function until<T extends unknown[]>(r: WatchSource<T> | MaybeComputedRef<T>): UntilArrayInstance<T>;\ndeclare function until<T>(r: WatchSource<T> | MaybeComputedRef<T>): UntilValueInstance<T>;\n\n/**\n * Reactive `Array.every`\n *\n * @see https://vueuse.org/useArrayEvery\n * @param {Array} list - the array was called upon.\n * @param fn - a function to test each element.\n *\n * @returns {boolean} **true** if the `fn` function returns a **truthy** value for every element from the array. Otherwise, **false**.\n */\ndeclare function useArrayEvery<T>(list: MaybeComputedRef<MaybeComputedRef<T>[]>, fn: (element: T, index: number, array: MaybeComputedRef<T>[]) => unknown): ComputedRef<boolean>;\n\n/**\n * Reactive `Array.filter`\n *\n * @see https://vueuse.org/useArrayFilter\n * @param {Array} list - the array was called upon.\n * @param fn - a function that is called for every element of the given `list`. Each time `fn` executes, the returned value is added to the new array.\n *\n * @returns {Array} a shallow copy of a portion of the given array, filtered down to just the elements from the given array that pass the test implemented by the provided function. If no elements pass the test, an empty array will be returned.\n */\ndeclare function useArrayFilter<T>(list: MaybeComputedRef<MaybeComputedRef<T>[]>, fn: (element: T, index: number, array: T[]) => boolean): ComputedRef<T[]>;\n\n/**\n * Reactive `Array.find`\n *\n * @see https://vueuse.org/useArrayFind\n * @param {Array} list - the array was called upon.\n * @param fn - a function to test each element.\n *\n * @returns the first element in the array that satisfies the provided testing function. Otherwise, undefined is returned.\n */\ndeclare function useArrayFind<T>(list: MaybeComputedRef<MaybeComputedRef<T>[]>, fn: (element: T, index: number, array: MaybeComputedRef<T>[]) => boolean): ComputedRef<T | undefined>;\n\n/**\n * Reactive `Array.findIndex`\n *\n * @see https://vueuse.org/useArrayFindIndex\n * @param {Array} list - the array was called upon.\n * @param fn - a function to test each element.\n *\n * @returns {number} the index of the first element in the array that passes the test. Otherwise, \"-1\".\n */\ndeclare function useArrayFindIndex<T>(list: MaybeComputedRef<MaybeComputedRef<T>[]>, fn: (element: T, index: number, array: MaybeComputedRef<T>[]) => unknown): ComputedRef<number>;\n\n/**\n * Reactive `Array.join`\n *\n * @see https://vueuse.org/useArrayJoin\n * @param {Array} list - the array was called upon.\n * @param {string} separator - a string to separate each pair of adjacent elements of the array. If omitted, the array elements are separated with a comma (\",\").\n *\n * @returns {string} a string with all array elements joined. If arr.length is 0, the empty string is returned.\n */\ndeclare function useArrayJoin(list: MaybeComputedRef<MaybeComputedRef<any>[]>, separator?: MaybeComputedRef<string>): ComputedRef<string>;\n\n/**\n * Reactive `Array.map`\n *\n * @see https://vueuse.org/useArrayMap\n * @param {Array} list - the array was called upon.\n * @param fn - a function that is called for every element of the given `list`. Each time `fn` executes, the returned value is added to the new array.\n *\n * @returns {Array} a new array with each element being the result of the callback function.\n */\ndeclare function useArrayMap<T, U = T>(list: MaybeComputedRef<MaybeComputedRef<T>[]>, fn: (element: T, index: number, array: T[]) => U): ComputedRef<U[]>;\n\ndeclare type UseArrayReducer<PV, CV, R> = (previousValue: PV, currentValue: CV, currentIndex: number) => R;\n/**\n * Reactive `Array.reduce`\n *\n * @see https://vueuse.org/useArrayReduce\n * @param {Array} list - the array was called upon.\n * @param reducer - a \"reducer\" function.\n *\n * @returns the value that results from running the \"reducer\" callback function to completion over the entire array.\n */\ndeclare function useArrayReduce<T>(list: MaybeComputedRef<MaybeComputedRef<T>[]>, reducer: UseArrayReducer<T, T, T>): ComputedRef<T>;\n/**\n * Reactive `Array.reduce`\n *\n * @see https://vueuse.org/useArrayReduce\n * @param {Array} list - the array was called upon.\n * @param reducer - a \"reducer\" function.\n * @param initialValue - a value to be initialized the first time when the callback is called.\n *\n * @returns the value that results from running the \"reducer\" callback function to completion over the entire array.\n */\ndeclare function useArrayReduce<T, U>(list: MaybeComputedRef<MaybeComputedRef<T>[]>, reducer: UseArrayReducer<U, T, U>, initialValue: MaybeComputedRef<U>): ComputedRef<U>;\n\n/**\n * Reactive `Array.some`\n *\n * @see https://vueuse.org/useArraySome\n * @param {Array} list - the array was called upon.\n * @param fn - a function to test each element.\n *\n * @returns {boolean} **true** if the `fn` function returns a **truthy** value for any element from the array. Otherwise, **false**.\n */\ndeclare function useArraySome<T>(list: MaybeComputedRef<MaybeComputedRef<T>[]>, fn: (element: T, index: number, array: MaybeComputedRef<T>[]) => unknown): ComputedRef<boolean>;\n\ninterface UseCounterOptions {\n    min?: number;\n    max?: number;\n}\n/**\n * Basic counter with utility functions.\n *\n * @see https://vueuse.org/useCounter\n * @param [initialValue=0]\n * @param {Object} options\n */\ndeclare function useCounter(initialValue?: number, options?: UseCounterOptions): {\n    count: vue_demi.Ref<number>;\n    inc: (delta?: number) => number;\n    dec: (delta?: number) => number;\n    get: () => number;\n    set: (val: number) => number;\n    reset: (val?: number) => number;\n};\n\ndeclare type DateLike = Date | number | string | undefined;\ninterface UseDateFormatOptions {\n    /**\n     * The locale(s) to used for dd/ddd/dddd/MMM/MMMM format\n     *\n     * [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl#locales_argument).\n     */\n    locales?: Intl.LocalesArgument;\n    /**\n     * A custom function to re-modify the way to display meridiem\n     *\n     */\n    customMeridiem?: (hours: number, minutes: number, isLowercase?: boolean, hasPeriod?: boolean) => string;\n}\ndeclare const formatDate: (date: Date, formatStr: string, options?: UseDateFormatOptions) => string;\ndeclare const normalizeDate: (date: DateLike) => Date;\n/**\n * Get the formatted date according to the string of tokens passed in.\n *\n * @see https://vueuse.org/useDateFormat\n * @param date - The date to format, can either be a `Date` object, a timestamp, or a string\n * @param formatStr - The combination of tokens to format the date\n * @param options - UseDateFormatOptions\n */\ndeclare function useDateFormat(date: MaybeComputedRef<DateLike>, formatStr?: MaybeComputedRef<string>, options?: UseDateFormatOptions): vue_demi.ComputedRef<string>;\ndeclare type UseDateFormatReturn = ReturnType<typeof useDateFormat>;\n\n/**\n * Debounce execution of a function.\n *\n * @see https://vueuse.org/useDebounceFn\n * @param  fn          A function to be executed after delay milliseconds debounced.\n * @param  ms          A zero-or-greater delay in milliseconds. For event callbacks, values around 100 or 250 (or even higher) are most useful.\n * @param  opts        options\n *\n * @return A new, debounce, function.\n */\ndeclare function useDebounceFn<T extends FunctionArgs>(fn: T, ms?: MaybeComputedRef<number>, options?: DebounceFilterOptions): T;\n\ninterface UseIntervalOptions<Controls extends boolean> {\n    /**\n     * Expose more controls\n     *\n     * @default false\n     */\n    controls?: Controls;\n    /**\n     * Execute the update immediately on calling\n     *\n     * @default true\n     */\n    immediate?: boolean;\n    /**\n     * Callback on every interval\n     */\n    callback?: (count: number) => void;\n}\n/**\n * Reactive counter increases on every interval\n *\n * @see https://vueuse.org/useInterval\n * @param interval\n * @param options\n */\ndeclare function useInterval(interval?: MaybeComputedRef<number>, options?: UseIntervalOptions<false>): Ref<number>;\ndeclare function useInterval(interval: MaybeComputedRef<number>, options: UseIntervalOptions<true>): {\n    counter: Ref<number>;\n} & Pausable;\n\ninterface UseIntervalFnOptions {\n    /**\n     * Start the timer immediately\n     *\n     * @default true\n     */\n    immediate?: boolean;\n    /**\n     * Execute the callback immediate after calling this function\n     *\n     * @default false\n     */\n    immediateCallback?: boolean;\n}\n/**\n * Wrapper for `setInterval` with controls\n *\n * @param cb\n * @param interval\n * @param options\n */\ndeclare function useIntervalFn(cb: Fn, interval?: MaybeComputedRef<number>, options?: UseIntervalFnOptions): Pausable;\n\ninterface UseLastChangedOptions<Immediate extends boolean, InitialValue extends number | null | undefined = undefined> extends WatchOptions<Immediate> {\n    initialValue?: InitialValue;\n}\n/**\n * Records the timestamp of the last change\n *\n * @see https://vueuse.org/useLastChanged\n */\ndeclare function useLastChanged(source: WatchSource, options?: UseLastChangedOptions<false>): Ref<number | null>;\ndeclare function useLastChanged(source: WatchSource, options: UseLastChangedOptions<true>): Ref<number>;\ndeclare function useLastChanged(source: WatchSource, options: UseLastChangedOptions<boolean, number>): Ref<number>;\n\n/**\n * Throttle execution of a function. Especially useful for rate limiting\n * execution of handlers on events like resize and scroll.\n *\n * @param   fn             A function to be executed after delay milliseconds. The `this` context and all arguments are passed through, as-is,\n *                                    to `callback` when the throttled-function is executed.\n * @param   ms             A zero-or-greater delay in milliseconds. For event callbacks, values around 100 or 250 (or even higher) are most useful.\n *\n * @param [trailing=false] if true, call fn again after the time is up\n *\n * @param [leading=true] if true, call fn on the leading edge of the ms timeout\n *\n * @return  A new, throttled, function.\n */\ndeclare function useThrottleFn<T extends FunctionArgs>(fn: T, ms?: MaybeComputedRef<number>, trailing?: boolean, leading?: boolean): T;\n\ninterface UseTimeoutFnOptions {\n    /**\n     * Start the timer immediate after calling this function\n     *\n     * @default true\n     */\n    immediate?: boolean;\n}\n/**\n * Wrapper for `setTimeout` with controls.\n *\n * @param cb\n * @param interval\n * @param options\n */\ndeclare function useTimeoutFn(cb: (...args: unknown[]) => any, interval: MaybeComputedRef<number>, options?: UseTimeoutFnOptions): Stoppable;\n\ninterface UseTimeoutOptions<Controls extends boolean> extends UseTimeoutFnOptions {\n    /**\n     * Expose more controls\n     *\n     * @default false\n     */\n    controls?: Controls;\n    /**\n     * Callback on timeout\n     */\n    callback?: Fn;\n}\n/**\n * Update value after a given time with controls.\n *\n * @see   {@link https://vueuse.org/useTimeout}\n * @param interval\n * @param options\n */\ndeclare function useTimeout(interval?: number, options?: UseTimeoutOptions<false>): ComputedRef<boolean>;\ndeclare function useTimeout(interval: number, options: UseTimeoutOptions<true>): {\n    ready: ComputedRef<boolean>;\n} & Stoppable;\n\ninterface UseToNumberOptions {\n    /**\n     * Method to use to convert the value to a number.\n     *\n     * @default 'parseFloat'\n     */\n    method?: 'parseFloat' | 'parseInt';\n    /**\n     * The base in mathematical numeral systems passed to `parseInt`.\n     * Only works with `method: 'parseInt'`\n     */\n    radix?: number;\n    /**\n     * Replace NaN with zero\n     *\n     * @default false\n     */\n    nanToZero?: boolean;\n}\n/**\n * Computed reactive object.\n */\ndeclare function useToNumber(value: MaybeComputedRef<number | string>, options?: UseToNumberOptions): ComputedRef<number>;\n\n/**\n * Reactively convert a ref to string.\n *\n * @see https://vueuse.org/useToString\n */\ndeclare function useToString(value: MaybeComputedRef<unknown>): ComputedRef<string>;\n\ninterface UseToggleOptions<Truthy, Falsy> {\n    truthyValue?: MaybeComputedRef<Truthy>;\n    falsyValue?: MaybeComputedRef<Falsy>;\n}\ndeclare function useToggle<Truthy, Falsy, T = Truthy | Falsy>(initialValue: Ref<T>, options?: UseToggleOptions<Truthy, Falsy>): (value?: T) => T;\ndeclare function useToggle<Truthy = true, Falsy = false, T = Truthy | Falsy>(initialValue?: T, options?: UseToggleOptions<Truthy, Falsy>): [Ref<T>, (value?: T) => T];\n\ndeclare type WatchArrayCallback<V = any, OV = any> = (value: V, oldValue: OV, added: V, removed: OV, onCleanup: (cleanupFn: () => void) => void) => any;\n/**\n * Watch for an array with additions and removals.\n *\n * @see https://vueuse.org/watchArray\n */\ndeclare function watchArray<T, Immediate extends Readonly<boolean> = false>(source: WatchSource<T[]> | T[], cb: WatchArrayCallback<T[], Immediate extends true ? T[] | undefined : T[]>, options?: WatchOptions<Immediate>): vue_demi.WatchStopHandle;\n\ninterface WatchWithFilterOptions<Immediate> extends WatchOptions<Immediate>, ConfigurableEventFilter {\n}\ndeclare function watchWithFilter<T extends Readonly<WatchSource<unknown>[]>, Immediate extends Readonly<boolean> = false>(sources: [...T], cb: WatchCallback<MapSources<T>, MapOldSources<T, Immediate>>, options?: WatchWithFilterOptions<Immediate>): WatchStopHandle;\ndeclare function watchWithFilter<T, Immediate extends Readonly<boolean> = false>(source: WatchSource<T>, cb: WatchCallback<T, Immediate extends true ? T | undefined : T>, options?: WatchWithFilterOptions<Immediate>): WatchStopHandle;\ndeclare function watchWithFilter<T extends object, Immediate extends Readonly<boolean> = false>(source: T, cb: WatchCallback<T, Immediate extends true ? T | undefined : T>, options?: WatchWithFilterOptions<Immediate>): WatchStopHandle;\n\ninterface WatchAtMostOptions<Immediate> extends WatchWithFilterOptions<Immediate> {\n    count: MaybeComputedRef<number>;\n}\ninterface WatchAtMostReturn {\n    stop: WatchStopHandle;\n    count: Ref<number>;\n}\ndeclare function watchAtMost<T extends Readonly<WatchSource<unknown>[]>, Immediate extends Readonly<boolean> = false>(sources: [...T], cb: WatchCallback<MapSources<T>, MapOldSources<T, Immediate>>, options: WatchAtMostOptions<Immediate>): WatchAtMostReturn;\ndeclare function watchAtMost<T, Immediate extends Readonly<boolean> = false>(sources: WatchSource<T>, cb: WatchCallback<T, Immediate extends true ? T | undefined : T>, options: WatchAtMostOptions<Immediate>): WatchAtMostReturn;\n\ninterface WatchDebouncedOptions<Immediate> extends WatchOptions<Immediate>, DebounceFilterOptions {\n    debounce?: MaybeComputedRef<number>;\n}\ndeclare function watchDebounced<T extends Readonly<WatchSource<unknown>[]>, Immediate extends Readonly<boolean> = false>(sources: [...T], cb: WatchCallback<MapSources<T>, MapOldSources<T, Immediate>>, options?: WatchDebouncedOptions<Immediate>): WatchStopHandle;\ndeclare function watchDebounced<T, Immediate extends Readonly<boolean> = false>(source: WatchSource<T>, cb: WatchCallback<T, Immediate extends true ? T | undefined : T>, options?: WatchDebouncedOptions<Immediate>): WatchStopHandle;\ndeclare function watchDebounced<T extends object, Immediate extends Readonly<boolean> = false>(source: T, cb: WatchCallback<T, Immediate extends true ? T | undefined : T>, options?: WatchDebouncedOptions<Immediate>): WatchStopHandle;\n\ndeclare type IgnoredUpdater = (updater: () => void) => void;\ninterface WatchIgnorableReturn {\n    ignoreUpdates: IgnoredUpdater;\n    ignorePrevAsyncUpdates: () => void;\n    stop: WatchStopHandle;\n}\ndeclare function watchIgnorable<T extends Readonly<WatchSource<unknown>[]>, Immediate extends Readonly<boolean> = false>(sources: [...T], cb: WatchCallback<MapSources<T>, MapOldSources<T, Immediate>>, options?: WatchWithFilterOptions<Immediate>): WatchIgnorableReturn;\ndeclare function watchIgnorable<T, Immediate extends Readonly<boolean> = false>(source: WatchSource<T>, cb: WatchCallback<T, Immediate extends true ? T | undefined : T>, options?: WatchWithFilterOptions<Immediate>): WatchIgnorableReturn;\ndeclare function watchIgnorable<T extends object, Immediate extends Readonly<boolean> = false>(source: T, cb: WatchCallback<T, Immediate extends true ? T | undefined : T>, options?: WatchWithFilterOptions<Immediate>): WatchIgnorableReturn;\n\ndeclare function watchOnce<T extends Readonly<WatchSource<unknown>[]>, Immediate extends Readonly<boolean> = false>(source: [...T], cb: WatchCallback<MapSources<T>, MapOldSources<T, Immediate>>, options?: WatchOptions<Immediate>): void;\ndeclare function watchOnce<T, Immediate extends Readonly<boolean> = false>(sources: WatchSource<T>, cb: WatchCallback<T, Immediate extends true ? T | undefined : T>, options?: WatchOptions<Immediate>): void;\n\ninterface WatchPausableReturn extends Pausable {\n    stop: WatchStopHandle;\n}\ndeclare function watchPausable<T extends Readonly<WatchSource<unknown>[]>, Immediate extends Readonly<boolean> = false>(sources: [...T], cb: WatchCallback<MapSources<T>, MapOldSources<T, Immediate>>, options?: WatchWithFilterOptions<Immediate>): WatchPausableReturn;\ndeclare function watchPausable<T, Immediate extends Readonly<boolean> = false>(source: WatchSource<T>, cb: WatchCallback<T, Immediate extends true ? T | undefined : T>, options?: WatchWithFilterOptions<Immediate>): WatchPausableReturn;\ndeclare function watchPausable<T extends object, Immediate extends Readonly<boolean> = false>(source: T, cb: WatchCallback<T, Immediate extends true ? T | undefined : T>, options?: WatchWithFilterOptions<Immediate>): WatchPausableReturn;\n\ninterface WatchThrottledOptions<Immediate> extends WatchOptions<Immediate> {\n    throttle?: MaybeComputedRef<number>;\n    trailing?: boolean;\n    leading?: boolean;\n}\ndeclare function watchThrottled<T extends Readonly<WatchSource<unknown>[]>, Immediate extends Readonly<boolean> = false>(sources: [...T], cb: WatchCallback<MapSources<T>, MapOldSources<T, Immediate>>, options?: WatchThrottledOptions<Immediate>): WatchStopHandle;\ndeclare function watchThrottled<T, Immediate extends Readonly<boolean> = false>(source: WatchSource<T>, cb: WatchCallback<T, Immediate extends true ? T | undefined : T>, options?: WatchThrottledOptions<Immediate>): WatchStopHandle;\ndeclare function watchThrottled<T extends object, Immediate extends Readonly<boolean> = false>(source: T, cb: WatchCallback<T, Immediate extends true ? T | undefined : T>, options?: WatchThrottledOptions<Immediate>): WatchStopHandle;\n\ninterface WatchTriggerableReturn<FnReturnT = void> extends WatchIgnorableReturn {\n    /** Execute `WatchCallback` immediately */\n    trigger: () => FnReturnT;\n}\ndeclare type OnCleanup = (cleanupFn: () => void) => void;\ndeclare type WatchTriggerableCallback<V = any, OV = any, R = void> = (value: V, oldValue: OV, onCleanup: OnCleanup) => R;\ndeclare function watchTriggerable<T extends Readonly<WatchSource<unknown>[]>, FnReturnT>(sources: [...T], cb: WatchTriggerableCallback<MapSources<T>, MapOldSources<T, true>, FnReturnT>, options?: WatchWithFilterOptions<boolean>): WatchTriggerableReturn<FnReturnT>;\ndeclare function watchTriggerable<T, FnReturnT>(source: WatchSource<T>, cb: WatchTriggerableCallback<T, T | undefined, FnReturnT>, options?: WatchWithFilterOptions<boolean>): WatchTriggerableReturn<FnReturnT>;\ndeclare function watchTriggerable<T extends object, FnReturnT>(source: T, cb: WatchTriggerableCallback<T, T | undefined, FnReturnT>, options?: WatchWithFilterOptions<boolean>): WatchTriggerableReturn<FnReturnT>;\n\n/**\n * Shorthand for watching value to be truthy\n *\n * @see https://vueuse.org/whenever\n */\ndeclare function whenever<T>(source: WatchSource<T | false | null | undefined>, cb: WatchCallback<T>, options?: WatchOptions): vue_demi.WatchStopHandle;\n\nexport { ArgumentsType, Arrayable, Awaitable, ComputedRefWithControl, ComputedWithControlRefExtra, ConfigurableEventFilter, ConfigurableFlush, ConfigurableFlushSync, ControlledRefOptions, CreateGlobalStateReturn, DateLike, DebounceFilterOptions, DeepMaybeRef, ElementOf, EventFilter, EventHook, EventHookOff, EventHookOn, EventHookTrigger, ExtendRefOptions, Fn, FunctionArgs, FunctionWrapperOptions, IgnoredUpdater, MapOldSources, MapSources, MaybeComputedRef, MaybeReadonlyRef, MaybeRef, Pausable, Reactified, ReactifyNested, ReactifyObjectOptions, ReactifyOptions, RemovableRef, RemoveableRef, ShallowUnwrapRef, SingletonPromiseReturn, Stopable, Stoppable, SyncRefOptions, SyncRefsOptions, UntilArrayInstance, UntilBaseInstance, UntilToMatchOptions, UntilValueInstance, UseArrayReducer, UseCounterOptions, UseDateFormatOptions, UseDateFormatReturn, UseIntervalFnOptions, UseIntervalOptions, UseLastChangedOptions, UseTimeoutFnOptions, UseTimeoutOptions, UseToNumberOptions, UseToggleOptions, WatchArrayCallback, WatchAtMostOptions, WatchAtMostReturn, WatchDebouncedOptions, WatchIgnorableReturn, WatchPausableReturn, WatchThrottledOptions, WatchTriggerableCallback, WatchTriggerableReturn, WatchWithFilterOptions, WritableComputedRefWithControl, __onlyVue27Plus, __onlyVue3, assert, refAutoReset as autoResetRef, bypassFilter, clamp, computedEager, computedWithControl, containsProp, computedWithControl as controlledComputed, controlledRef, createEventHook, createFilterWrapper, createGlobalState, createInjectionState, reactify as createReactiveFn, createSharedComposable, createSingletonPromise, debounceFilter, refDebounced as debouncedRef, watchDebounced as debouncedWatch, directiveHooks, computedEager as eagerComputed, extendRef, formatDate, get, hasOwn, identity, watchIgnorable as ignorableWatch, increaseWithUnit, invoke, isBoolean, isClient, isDef, isDefined, isFunction, isIOS, isNumber, isObject, isString, isWindow, makeDestructurable, noop, normalizeDate, now, objectPick, pausableFilter, watchPausable as pausableWatch, promiseTimeout, rand, reactify, reactifyObject, reactiveComputed, reactiveOmit, reactivePick, refAutoReset, refDebounced, refDefault, refThrottled, refWithControl, resolveRef, resolveUnref, set, syncRef, syncRefs, throttleFilter, refThrottled as throttledRef, watchThrottled as throttledWatch, timestamp, toReactive, toRefs, tryOnBeforeMount, tryOnBeforeUnmount, tryOnMounted, tryOnScopeDispose, tryOnUnmounted, until, useArrayEvery, useArrayFilter, useArrayFind, useArrayFindIndex, useArrayJoin, useArrayMap, useArrayReduce, useArraySome, useCounter, useDateFormat, refDebounced as useDebounce, useDebounceFn, useInterval, useIntervalFn, useLastChanged, refThrottled as useThrottle, useThrottleFn, useTimeout, useTimeoutFn, useToNumber, useToString, useToggle, watchArray, watchAtMost, watchDebounced, watchIgnorable, watchOnce, watchPausable, watchThrottled, watchTriggerable, watchWithFilter, whenever };\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/QHZpdGVqcy9wbHVnaW4tcmVhY3RAMy4xLjA=",
    "content": "/dist/refreshUtils.js\u0007function debounce(fn, delay) {\n  let handle\n  return () => {\n    clearTimeout(handle)\n    handle = setTimeout(fn, delay)\n  }\n}\n\n/* eslint-disable no-undef */\nconst enqueueUpdate = debounce(exports.performReactRefresh, 16)\n\n// Taken from https://github.com/pmmmwh/react-refresh-webpack-plugin/blob/main/lib/runtime/RefreshUtils.js#L141\n// This allows to resister components not detected by SWC like styled component\nfunction registerExportsForReactRefresh(filename, moduleExports) {\n  for (const key in moduleExports) {\n    if (key === '__esModule') continue\n    const exportValue = moduleExports[key]\n    if (exports.isLikelyComponentType(exportValue)) {\n      exports.register(exportValue, filename + ' ' + key)\n    }\n  }\n}\n\nfunction validateRefreshBoundaryAndEnqueueUpdate(prevExports, nextExports) {\n  if (!predicateOnExport(prevExports, (key) => !!nextExports[key])) {\n    return 'Could not Fast Refresh (export removed)'\n  }\n\n  let hasExports = false\n  const allExportsAreComponentsOrUnchanged = predicateOnExport(\n    nextExports,\n    (key, value) => {\n      hasExports = true\n      if (exports.isLikelyComponentType(value)) return true\n      if (!prevExports[key]) return false\n      return prevExports[key] === nextExports[key]\n    },\n  )\n  if (hasExports && allExportsAreComponentsOrUnchanged) {\n    enqueueUpdate()\n  } else {\n    return 'Could not Fast Refresh. Learn more at https://github.com/vitejs/vite-plugin-react/tree/main/packages/plugin-react#consistent-components-exports'\n  }\n}\n\nfunction predicateOnExport(moduleExports, predicate) {\n  for (const key in moduleExports) {\n    if (key === '__esModule') continue\n    const desc = Object.getOwnPropertyDescriptor(moduleExports, key)\n    if (desc && desc.get) return false\n    if (!predicate(key, moduleExports[key])) return false\n  }\n  return true\n}\n\nexports.registerExportsForReactRefresh = registerExportsForReactRefresh\nexports.validateRefreshBoundaryAndEnqueueUpdate =\n  validateRefreshBoundaryAndEnqueueUpdate\n/dist/index.d.ts\t\u0016import { TransformOptions, ParserOptions } from '@babel/core';\nimport { ResolvedConfig, PluginOption } from 'vite';\n\ninterface Options {\n    include?: string | RegExp | Array<string | RegExp>;\n    exclude?: string | RegExp | Array<string | RegExp>;\n    /**\n     * Enable `react-refresh` integration. Vite disables this in prod env or build mode.\n     * @default true\n     */\n    fastRefresh?: boolean;\n    /**\n     * Set this to `\"automatic\"` to use [vite-react-jsx](https://github.com/alloc/vite-react-jsx).\n     * @default \"automatic\"\n     */\n    jsxRuntime?: 'classic' | 'automatic';\n    /**\n     * Control where the JSX factory is imported from.\n     * This option is ignored when `jsxRuntime` is not `\"automatic\"`.\n     * @default \"react\"\n     */\n    jsxImportSource?: string;\n    /**\n     * Set this to `true` to annotate the JSX factory with `\\/* @__PURE__ *\\/`.\n     * This option is ignored when `jsxRuntime` is not `\"automatic\"`.\n     * @default true\n     */\n    jsxPure?: boolean;\n    /**\n     * Babel configuration applied in both dev and prod.\n     */\n    babel?: BabelOptions | ((id: string, options: {\n        ssr?: boolean;\n    }) => BabelOptions);\n}\ntype BabelOptions = Omit<TransformOptions, 'ast' | 'filename' | 'root' | 'sourceFileName' | 'sourceMaps' | 'inputSourceMap'>;\n/**\n * The object type used by the `options` passed to plugins with\n * an `api.reactBabel` method.\n */\ninterface ReactBabelOptions extends BabelOptions {\n    plugins: Extract<BabelOptions['plugins'], any[]>;\n    presets: Extract<BabelOptions['presets'], any[]>;\n    overrides: Extract<BabelOptions['overrides'], any[]>;\n    parserOpts: ParserOptions & {\n        plugins: Extract<ParserOptions['plugins'], any[]>;\n    };\n}\ntype ReactBabelHook = (babelConfig: ReactBabelOptions, context: ReactBabelHookContext, config: ResolvedConfig) => void;\ntype ReactBabelHookContext = {\n    ssr: boolean;\n    id: string;\n};\ndeclare module 'vite' {\n    interface Plugin {\n        api?: {\n            /**\n             * Manipulate the Babel options of `@vitejs/plugin-react`\n             */\n            reactBabel?: ReactBabelHook;\n        };\n    }\n}\ndeclare function viteReact(opts?: Options): PluginOption[];\ndeclare namespace viteReact {\n    var preambleCode: string;\n}\n\nexport { BabelOptions, Options, ReactBabelOptions, viteReact as default };\n/dist/index.cjs4\u0005'use strict';\n\nconst path = require('node:path');\nconst babel = require('@babel/core');\nconst vite = require('vite');\nconst MagicString = require('magic-string');\nconst fs = require('node:fs');\nconst node_module = require('node:module');\n\nfunction _interopNamespaceDefault(e) {\n  const n = Object.create(null);\n  if (e) {\n    for (const k in e) {\n      n[k] = e[k];\n    }\n  }\n  n.default = e;\n  return n;\n}\n\nconst babel__namespace = /*#__PURE__*/_interopNamespaceDefault(babel);\n\nconst runtimePublicPath = \"/@react-refresh\";\nconst _require = node_module.createRequire((typeof document === 'undefined' ? new (require('u' + 'rl').URL)('file:' + __filename).href : (document.currentScript && document.currentScript.src || new URL('index.cjs', document.baseURI).href)));\nconst reactRefreshDir = path.dirname(\n  _require.resolve(\"react-refresh/package.json\")\n);\nconst runtimeFilePath = path.join(\n  reactRefreshDir,\n  \"cjs/react-refresh-runtime.development.js\"\n);\nconst runtimeCode = `\nconst exports = {}\n${fs.readFileSync(runtimeFilePath, \"utf-8\")}\n${fs.readFileSync(_require.resolve(\"./refreshUtils.js\"), \"utf-8\")}\nexport default exports\n`;\nconst preambleCode = `\nimport RefreshRuntime from \"__BASE__${runtimePublicPath.slice(1)}\"\nRefreshRuntime.injectIntoGlobalHook(window)\nwindow.$RefreshReg$ = () => {}\nwindow.$RefreshSig$ = () => (type) => type\nwindow.__vite_plugin_react_preamble_installed__ = true\n`;\nconst header = `\nimport RefreshRuntime from \"${runtimePublicPath}\";\n\nlet prevRefreshReg;\nlet prevRefreshSig;\n\nif (import.meta.hot) {\n  if (!window.__vite_plugin_react_preamble_installed__) {\n    throw new Error(\n      \"@vitejs/plugin-react can't detect preamble. Something is wrong. \" +\n      \"See https://github.com/vitejs/vite-plugin-react/pull/11#discussion_r430879201\"\n    );\n  }\n\n  prevRefreshReg = window.$RefreshReg$;\n  prevRefreshSig = window.$RefreshSig$;\n  window.$RefreshReg$ = (type, id) => {\n    RefreshRuntime.register(type, __SOURCE__ + \" \" + id)\n  };\n  window.$RefreshSig$ = RefreshRuntime.createSignatureFunctionForTransform;\n}`.replace(/\\n+/g, \"\");\nconst footer = `\nif (import.meta.hot) {\n  window.$RefreshReg$ = prevRefreshReg;\n  window.$RefreshSig$ = prevRefreshSig;\n\n  import(/* @vite-ignore */ import.meta.url).then((currentExports) => {\n    RefreshRuntime.registerExportsForReactRefresh(__SOURCE__, currentExports);\n    import.meta.hot.accept((nextExports) => {\n      if (!nextExports) return;\n      const invalidateMessage = RefreshRuntime.validateRefreshBoundaryAndEnqueueUpdate(currentExports, nextExports);\n      if (invalidateMessage) import.meta.hot.invalidate(invalidateMessage);\n    });\n  });\n}`;\nfunction addRefreshWrapper(code, id) {\n  return header.replace(\"__SOURCE__\", JSON.stringify(id)) + code + footer.replace(\"__SOURCE__\", JSON.stringify(id));\n}\n\nconst prependReactImportCode = \"import React from 'react'; \";\nconst refreshContentRE = /\\$Refresh(?:Reg|Sig)\\$\\(/;\nfunction viteReact(opts = {}) {\n  let devBase = \"/\";\n  let filter = vite.createFilter(opts.include, opts.exclude);\n  let needHiresSourcemap = false;\n  let isProduction = true;\n  let projectRoot = process.cwd();\n  let skipFastRefresh = opts.fastRefresh === false;\n  let skipReactImport = false;\n  let runPluginOverrides = (options, context) => false;\n  let staticBabelOptions;\n  const useAutomaticRuntime = opts.jsxRuntime !== \"classic\";\n  const importReactRE = /(?:^|\\n)import\\s+(?:\\*\\s+as\\s+)?React(?:,|\\s+)/;\n  const fileExtensionRE = /\\.[^/\\s?]+$/;\n  const viteBabel = {\n    name: \"vite:react-babel\",\n    enforce: \"pre\",\n    config(userConfig, { mode }) {\n      const resolvedRoot = vite.normalizePath(\n        userConfig.root ? path.resolve(userConfig.root) : process.cwd()\n      );\n      const envDir = userConfig.envDir ? vite.normalizePath(path.resolve(resolvedRoot, userConfig.envDir)) : resolvedRoot;\n      vite.loadEnv(mode, envDir, vite.resolveEnvPrefix(userConfig));\n      const isProduction2 = (process.env.NODE_ENV || process.env.VITE_USER_NODE_ENV || mode) === \"production\";\n      if (opts.jsxRuntime === \"classic\") {\n        return {\n          esbuild: {\n            logOverride: {\n              \"this-is-undefined-in-esm\": \"silent\"\n            },\n            jsx: \"transform\",\n            jsxImportSource: opts.jsxImportSource,\n            jsxSideEffects: opts.jsxPure === false\n          }\n        };\n      } else {\n        return {\n          esbuild: {\n            jsxDev: !isProduction2,\n            jsx: \"automatic\",\n            jsxImportSource: opts.jsxImportSource,\n            jsxSideEffects: opts.jsxPure === false\n          }\n        };\n      }\n    },\n    configResolved(config) {\n      devBase = config.base;\n      projectRoot = config.root;\n      filter = vite.createFilter(opts.include, opts.exclude, {\n        resolve: projectRoot\n      });\n      needHiresSourcemap = config.command === \"build\" && !!config.build.sourcemap;\n      isProduction = config.isProduction;\n      skipFastRefresh || (skipFastRefresh = isProduction || config.command === \"build\");\n      const jsxInject = config.esbuild && config.esbuild.jsxInject;\n      if (jsxInject && importReactRE.test(jsxInject)) {\n        skipReactImport = true;\n        config.logger.warn(\n          \"[@vitejs/plugin-react] This plugin imports React for you automatically, so you can stop using `esbuild.jsxInject` for that purpose.\"\n        );\n      }\n      config.plugins.forEach((plugin) => {\n        const hasConflict = plugin.name === \"react-refresh\" || plugin !== viteReactJsx && plugin.name === \"vite:react-jsx\";\n        if (hasConflict)\n          return config.logger.warn(\n            `[@vitejs/plugin-react] You should stop using \"${plugin.name}\" since this plugin conflicts with it.`\n          );\n      });\n      runPluginOverrides = (babelOptions, context) => {\n        const hooks = config.plugins.map((plugin) => plugin.api?.reactBabel).filter(Boolean);\n        if (hooks.length > 0) {\n          return (runPluginOverrides = (babelOptions2, context2) => {\n            hooks.forEach((hook) => hook(babelOptions2, context2, config));\n            return true;\n          })(babelOptions, context);\n        }\n        runPluginOverrides = () => false;\n        return false;\n      };\n    },\n    async transform(code, id, options) {\n      const ssr = options?.ssr === true;\n      const [filepath, querystring = \"\"] = id.split(\"?\");\n      const [extension = \"\"] = querystring.match(fileExtensionRE) || filepath.match(fileExtensionRE) || [];\n      if (/\\.(?:mjs|[tj]sx?)$/.test(extension)) {\n        const isJSX = extension.endsWith(\"x\");\n        const isNodeModules = id.includes(\"/node_modules/\");\n        const isProjectFile = !isNodeModules && (id[0] === \"\\0\" || id.startsWith(projectRoot + \"/\"));\n        let babelOptions = staticBabelOptions;\n        if (typeof opts.babel === \"function\") {\n          const rawOptions = opts.babel(id, { ssr });\n          babelOptions = createBabelOptions(rawOptions);\n          runPluginOverrides(babelOptions, { ssr, id });\n        } else if (!babelOptions) {\n          babelOptions = createBabelOptions(opts.babel);\n          if (!runPluginOverrides(babelOptions, { ssr, id })) {\n            staticBabelOptions = babelOptions;\n          }\n        }\n        const plugins = isProjectFile ? [...babelOptions.plugins] : [];\n        let useFastRefresh = false;\n        if (!skipFastRefresh && !ssr && !isNodeModules) {\n          const isReactModule = isJSX || importReactRE.test(code);\n          if (isReactModule && filter(id)) {\n            useFastRefresh = true;\n            plugins.push([\n              await loadPlugin(\"react-refresh/babel\"),\n              { skipEnvCheck: true }\n            ]);\n          }\n        }\n        let prependReactImport = false;\n        if (!isProjectFile || isJSX) {\n          if (!useAutomaticRuntime && isProjectFile) {\n            if (!isProduction) {\n              plugins.push(\n                await loadPlugin(\"@babel/plugin-transform-react-jsx-self\"),\n                await loadPlugin(\"@babel/plugin-transform-react-jsx-source\")\n              );\n            }\n            if (!skipReactImport && !importReactRE.test(code)) {\n              prependReactImport = true;\n            }\n          }\n        }\n        let inputMap;\n        if (prependReactImport) {\n          if (needHiresSourcemap) {\n            const s = new MagicString(code);\n            s.prepend(prependReactImportCode);\n            code = s.toString();\n            inputMap = s.generateMap({ hires: true, source: id });\n          } else {\n            code = prependReactImportCode + code;\n          }\n        }\n        const shouldSkip = !plugins.length && !babelOptions.configFile && !(isProjectFile && babelOptions.babelrc);\n        if (shouldSkip) {\n          return {\n            code,\n            map: inputMap ?? null\n          };\n        }\n        const parserPlugins = [\n          ...babelOptions.parserOpts.plugins,\n          \"importMeta\",\n          // This plugin is applied before esbuild transforms the code,\n          // so we need to enable some stage 3 syntax that is supported in\n          // TypeScript and some environments already.\n          \"topLevelAwait\",\n          \"classProperties\",\n          \"classPrivateProperties\",\n          \"classPrivateMethods\"\n        ];\n        if (!extension.endsWith(\".ts\")) {\n          parserPlugins.push(\"jsx\");\n        }\n        if (/\\.tsx?$/.test(extension)) {\n          parserPlugins.push(\"typescript\");\n        }\n        const result = await babel__namespace.transformAsync(code, {\n          ...babelOptions,\n          root: projectRoot,\n          filename: id,\n          sourceFileName: filepath,\n          parserOpts: {\n            ...babelOptions.parserOpts,\n            sourceType: \"module\",\n            allowAwaitOutsideFunction: true,\n            plugins: parserPlugins\n          },\n          generatorOpts: {\n            ...babelOptions.generatorOpts,\n            decoratorsBeforeExport: true\n          },\n          plugins,\n          sourceMaps: true,\n          // Vite handles sourcemap flattening\n          inputSourceMap: inputMap ?? false\n        });\n        if (result) {\n          let code2 = result.code;\n          if (useFastRefresh && refreshContentRE.test(code2)) {\n            code2 = addRefreshWrapper(code2, id);\n          }\n          return {\n            code: code2,\n            map: result.map\n          };\n        }\n      }\n    }\n  };\n  const viteReactRefresh = {\n    name: \"vite:react-refresh\",\n    enforce: \"pre\",\n    config: () => ({\n      resolve: {\n        dedupe: [\"react\", \"react-dom\"]\n      }\n    }),\n    resolveId(id) {\n      if (id === runtimePublicPath) {\n        return id;\n      }\n    },\n    load(id) {\n      if (id === runtimePublicPath) {\n        return runtimeCode;\n      }\n    },\n    transformIndexHtml() {\n      if (!skipFastRefresh)\n        return [\n          {\n            tag: \"script\",\n            attrs: { type: \"module\" },\n            children: preambleCode.replace(`__BASE__`, devBase)\n          }\n        ];\n    }\n  };\n  const reactJsxRuntimeId = \"react/jsx-runtime\";\n  const reactJsxDevRuntimeId = \"react/jsx-dev-runtime\";\n  const virtualReactJsxRuntimeId = \"\\0\" + reactJsxRuntimeId;\n  const virtualReactJsxDevRuntimeId = \"\\0\" + reactJsxDevRuntimeId;\n  const viteReactJsx = {\n    name: \"vite:react-jsx\",\n    enforce: \"pre\",\n    config() {\n      return {\n        optimizeDeps: {\n          // We can't add `react-dom` because the dependency is `react-dom/client`\n          // for React 18 while it's `react-dom` for React 17. We'd need to detect\n          // what React version the user has installed.\n          include: [reactJsxRuntimeId, reactJsxDevRuntimeId, \"react\"]\n        }\n      };\n    },\n    resolveId(id, importer) {\n      if (id === reactJsxRuntimeId && importer !== virtualReactJsxRuntimeId) {\n        return virtualReactJsxRuntimeId;\n      }\n      if (id === reactJsxDevRuntimeId && importer !== virtualReactJsxDevRuntimeId) {\n        return virtualReactJsxDevRuntimeId;\n      }\n    },\n    load(id) {\n      if (id === virtualReactJsxRuntimeId) {\n        return [\n          `import * as jsxRuntime from ${JSON.stringify(reactJsxRuntimeId)}`,\n          `export const Fragment = jsxRuntime.Fragment`,\n          `export const jsx = jsxRuntime.jsx`,\n          `export const jsxs = jsxRuntime.jsxs`\n        ].join(\"\\n\");\n      }\n      if (id === virtualReactJsxDevRuntimeId) {\n        return [\n          `import * as jsxRuntime from ${JSON.stringify(reactJsxDevRuntimeId)}`,\n          `export const Fragment = jsxRuntime.Fragment`,\n          `export const jsxDEV = jsxRuntime.jsxDEV`\n        ].join(\"\\n\");\n      }\n    }\n  };\n  return [viteBabel, viteReactRefresh, useAutomaticRuntime && viteReactJsx];\n}\nviteReact.preambleCode = preambleCode;\nfunction loadPlugin(path2) {\n  return import(path2).then((module) => module.default || module);\n}\nfunction createBabelOptions(rawOptions) {\n  var _a;\n  const babelOptions = {\n    babelrc: false,\n    configFile: false,\n    ...rawOptions\n  };\n  babelOptions.plugins || (babelOptions.plugins = []);\n  babelOptions.presets || (babelOptions.presets = []);\n  babelOptions.overrides || (babelOptions.overrides = []);\n  babelOptions.parserOpts || (babelOptions.parserOpts = {});\n  (_a = babelOptions.parserOpts).plugins || (_a.plugins = []);\n  return babelOptions;\n}\n\nmodule.exports = viteReact;\nmodule.exports.default = viteReact;\n/LICENSE\u0004OMIT License\n\nCopyright (c) 2019-present, Yuxi (Evan) You and Vite contributors\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n/dist/index.mjs2\u001fimport path from 'node:path';\nimport * as babel from '@babel/core';\nimport { createFilter, normalizePath, loadEnv, resolveEnvPrefix } from 'vite';\nimport MagicString from 'magic-string';\nimport fs from 'node:fs';\nimport { createRequire } from 'node:module';\n\nconst runtimePublicPath = \"/@react-refresh\";\nconst _require = createRequire(import.meta.url);\nconst reactRefreshDir = path.dirname(\n  _require.resolve(\"react-refresh/package.json\")\n);\nconst runtimeFilePath = path.join(\n  reactRefreshDir,\n  \"cjs/react-refresh-runtime.development.js\"\n);\nconst runtimeCode = `\nconst exports = {}\n${fs.readFileSync(runtimeFilePath, \"utf-8\")}\n${fs.readFileSync(_require.resolve(\"./refreshUtils.js\"), \"utf-8\")}\nexport default exports\n`;\nconst preambleCode = `\nimport RefreshRuntime from \"__BASE__${runtimePublicPath.slice(1)}\"\nRefreshRuntime.injectIntoGlobalHook(window)\nwindow.$RefreshReg$ = () => {}\nwindow.$RefreshSig$ = () => (type) => type\nwindow.__vite_plugin_react_preamble_installed__ = true\n`;\nconst header = `\nimport RefreshRuntime from \"${runtimePublicPath}\";\n\nlet prevRefreshReg;\nlet prevRefreshSig;\n\nif (import.meta.hot) {\n  if (!window.__vite_plugin_react_preamble_installed__) {\n    throw new Error(\n      \"@vitejs/plugin-react can't detect preamble. Something is wrong. \" +\n      \"See https://github.com/vitejs/vite-plugin-react/pull/11#discussion_r430879201\"\n    );\n  }\n\n  prevRefreshReg = window.$RefreshReg$;\n  prevRefreshSig = window.$RefreshSig$;\n  window.$RefreshReg$ = (type, id) => {\n    RefreshRuntime.register(type, __SOURCE__ + \" \" + id)\n  };\n  window.$RefreshSig$ = RefreshRuntime.createSignatureFunctionForTransform;\n}`.replace(/\\n+/g, \"\");\nconst footer = `\nif (import.meta.hot) {\n  window.$RefreshReg$ = prevRefreshReg;\n  window.$RefreshSig$ = prevRefreshSig;\n\n  import(/* @vite-ignore */ import.meta.url).then((currentExports) => {\n    RefreshRuntime.registerExportsForReactRefresh(__SOURCE__, currentExports);\n    import.meta.hot.accept((nextExports) => {\n      if (!nextExports) return;\n      const invalidateMessage = RefreshRuntime.validateRefreshBoundaryAndEnqueueUpdate(currentExports, nextExports);\n      if (invalidateMessage) import.meta.hot.invalidate(invalidateMessage);\n    });\n  });\n}`;\nfunction addRefreshWrapper(code, id) {\n  return header.replace(\"__SOURCE__\", JSON.stringify(id)) + code + footer.replace(\"__SOURCE__\", JSON.stringify(id));\n}\n\nconst prependReactImportCode = \"import React from 'react'; \";\nconst refreshContentRE = /\\$Refresh(?:Reg|Sig)\\$\\(/;\nfunction viteReact(opts = {}) {\n  let devBase = \"/\";\n  let filter = createFilter(opts.include, opts.exclude);\n  let needHiresSourcemap = false;\n  let isProduction = true;\n  let projectRoot = process.cwd();\n  let skipFastRefresh = opts.fastRefresh === false;\n  let skipReactImport = false;\n  let runPluginOverrides = (options, context) => false;\n  let staticBabelOptions;\n  const useAutomaticRuntime = opts.jsxRuntime !== \"classic\";\n  const importReactRE = /(?:^|\\n)import\\s+(?:\\*\\s+as\\s+)?React(?:,|\\s+)/;\n  const fileExtensionRE = /\\.[^/\\s?]+$/;\n  const viteBabel = {\n    name: \"vite:react-babel\",\n    enforce: \"pre\",\n    config(userConfig, { mode }) {\n      const resolvedRoot = normalizePath(\n        userConfig.root ? path.resolve(userConfig.root) : process.cwd()\n      );\n      const envDir = userConfig.envDir ? normalizePath(path.resolve(resolvedRoot, userConfig.envDir)) : resolvedRoot;\n      loadEnv(mode, envDir, resolveEnvPrefix(userConfig));\n      const isProduction2 = (process.env.NODE_ENV || process.env.VITE_USER_NODE_ENV || mode) === \"production\";\n      if (opts.jsxRuntime === \"classic\") {\n        return {\n          esbuild: {\n            logOverride: {\n              \"this-is-undefined-in-esm\": \"silent\"\n            },\n            jsx: \"transform\",\n            jsxImportSource: opts.jsxImportSource,\n            jsxSideEffects: opts.jsxPure === false\n          }\n        };\n      } else {\n        return {\n          esbuild: {\n            jsxDev: !isProduction2,\n            jsx: \"automatic\",\n            jsxImportSource: opts.jsxImportSource,\n            jsxSideEffects: opts.jsxPure === false\n          }\n        };\n      }\n    },\n    configResolved(config) {\n      devBase = config.base;\n      projectRoot = config.root;\n      filter = createFilter(opts.include, opts.exclude, {\n        resolve: projectRoot\n      });\n      needHiresSourcemap = config.command === \"build\" && !!config.build.sourcemap;\n      isProduction = config.isProduction;\n      skipFastRefresh || (skipFastRefresh = isProduction || config.command === \"build\");\n      const jsxInject = config.esbuild && config.esbuild.jsxInject;\n      if (jsxInject && importReactRE.test(jsxInject)) {\n        skipReactImport = true;\n        config.logger.warn(\n          \"[@vitejs/plugin-react] This plugin imports React for you automatically, so you can stop using `esbuild.jsxInject` for that purpose.\"\n        );\n      }\n      config.plugins.forEach((plugin) => {\n        const hasConflict = plugin.name === \"react-refresh\" || plugin !== viteReactJsx && plugin.name === \"vite:react-jsx\";\n        if (hasConflict)\n          return config.logger.warn(\n            `[@vitejs/plugin-react] You should stop using \"${plugin.name}\" since this plugin conflicts with it.`\n          );\n      });\n      runPluginOverrides = (babelOptions, context) => {\n        const hooks = config.plugins.map((plugin) => plugin.api?.reactBabel).filter(Boolean);\n        if (hooks.length > 0) {\n          return (runPluginOverrides = (babelOptions2, context2) => {\n            hooks.forEach((hook) => hook(babelOptions2, context2, config));\n            return true;\n          })(babelOptions, context);\n        }\n        runPluginOverrides = () => false;\n        return false;\n      };\n    },\n    async transform(code, id, options) {\n      const ssr = options?.ssr === true;\n      const [filepath, querystring = \"\"] = id.split(\"?\");\n      const [extension = \"\"] = querystring.match(fileExtensionRE) || filepath.match(fileExtensionRE) || [];\n      if (/\\.(?:mjs|[tj]sx?)$/.test(extension)) {\n        const isJSX = extension.endsWith(\"x\");\n        const isNodeModules = id.includes(\"/node_modules/\");\n        const isProjectFile = !isNodeModules && (id[0] === \"\\0\" || id.startsWith(projectRoot + \"/\"));\n        let babelOptions = staticBabelOptions;\n        if (typeof opts.babel === \"function\") {\n          const rawOptions = opts.babel(id, { ssr });\n          babelOptions = createBabelOptions(rawOptions);\n          runPluginOverrides(babelOptions, { ssr, id });\n        } else if (!babelOptions) {\n          babelOptions = createBabelOptions(opts.babel);\n          if (!runPluginOverrides(babelOptions, { ssr, id })) {\n            staticBabelOptions = babelOptions;\n          }\n        }\n        const plugins = isProjectFile ? [...babelOptions.plugins] : [];\n        let useFastRefresh = false;\n        if (!skipFastRefresh && !ssr && !isNodeModules) {\n          const isReactModule = isJSX || importReactRE.test(code);\n          if (isReactModule && filter(id)) {\n            useFastRefresh = true;\n            plugins.push([\n              await loadPlugin(\"react-refresh/babel\"),\n              { skipEnvCheck: true }\n            ]);\n          }\n        }\n        let prependReactImport = false;\n        if (!isProjectFile || isJSX) {\n          if (!useAutomaticRuntime && isProjectFile) {\n            if (!isProduction) {\n              plugins.push(\n                await loadPlugin(\"@babel/plugin-transform-react-jsx-self\"),\n                await loadPlugin(\"@babel/plugin-transform-react-jsx-source\")\n              );\n            }\n            if (!skipReactImport && !importReactRE.test(code)) {\n              prependReactImport = true;\n            }\n          }\n        }\n        let inputMap;\n        if (prependReactImport) {\n          if (needHiresSourcemap) {\n            const s = new MagicString(code);\n            s.prepend(prependReactImportCode);\n            code = s.toString();\n            inputMap = s.generateMap({ hires: true, source: id });\n          } else {\n            code = prependReactImportCode + code;\n          }\n        }\n        const shouldSkip = !plugins.length && !babelOptions.configFile && !(isProjectFile && babelOptions.babelrc);\n        if (shouldSkip) {\n          return {\n            code,\n            map: inputMap ?? null\n          };\n        }\n        const parserPlugins = [\n          ...babelOptions.parserOpts.plugins,\n          \"importMeta\",\n          // This plugin is applied before esbuild transforms the code,\n          // so we need to enable some stage 3 syntax that is supported in\n          // TypeScript and some environments already.\n          \"topLevelAwait\",\n          \"classProperties\",\n          \"classPrivateProperties\",\n          \"classPrivateMethods\"\n        ];\n        if (!extension.endsWith(\".ts\")) {\n          parserPlugins.push(\"jsx\");\n        }\n        if (/\\.tsx?$/.test(extension)) {\n          parserPlugins.push(\"typescript\");\n        }\n        const result = await babel.transformAsync(code, {\n          ...babelOptions,\n          root: projectRoot,\n          filename: id,\n          sourceFileName: filepath,\n          parserOpts: {\n            ...babelOptions.parserOpts,\n            sourceType: \"module\",\n            allowAwaitOutsideFunction: true,\n            plugins: parserPlugins\n          },\n          generatorOpts: {\n            ...babelOptions.generatorOpts,\n            decoratorsBeforeExport: true\n          },\n          plugins,\n          sourceMaps: true,\n          // Vite handles sourcemap flattening\n          inputSourceMap: inputMap ?? false\n        });\n        if (result) {\n          let code2 = result.code;\n          if (useFastRefresh && refreshContentRE.test(code2)) {\n            code2 = addRefreshWrapper(code2, id);\n          }\n          return {\n            code: code2,\n            map: result.map\n          };\n        }\n      }\n    }\n  };\n  const viteReactRefresh = {\n    name: \"vite:react-refresh\",\n    enforce: \"pre\",\n    config: () => ({\n      resolve: {\n        dedupe: [\"react\", \"react-dom\"]\n      }\n    }),\n    resolveId(id) {\n      if (id === runtimePublicPath) {\n        return id;\n      }\n    },\n    load(id) {\n      if (id === runtimePublicPath) {\n        return runtimeCode;\n      }\n    },\n    transformIndexHtml() {\n      if (!skipFastRefresh)\n        return [\n          {\n            tag: \"script\",\n            attrs: { type: \"module\" },\n            children: preambleCode.replace(`__BASE__`, devBase)\n          }\n        ];\n    }\n  };\n  const reactJsxRuntimeId = \"react/jsx-runtime\";\n  const reactJsxDevRuntimeId = \"react/jsx-dev-runtime\";\n  const virtualReactJsxRuntimeId = \"\\0\" + reactJsxRuntimeId;\n  const virtualReactJsxDevRuntimeId = \"\\0\" + reactJsxDevRuntimeId;\n  const viteReactJsx = {\n    name: \"vite:react-jsx\",\n    enforce: \"pre\",\n    config() {\n      return {\n        optimizeDeps: {\n          // We can't add `react-dom` because the dependency is `react-dom/client`\n          // for React 18 while it's `react-dom` for React 17. We'd need to detect\n          // what React version the user has installed.\n          include: [reactJsxRuntimeId, reactJsxDevRuntimeId, \"react\"]\n        }\n      };\n    },\n    resolveId(id, importer) {\n      if (id === reactJsxRuntimeId && importer !== virtualReactJsxRuntimeId) {\n        return virtualReactJsxRuntimeId;\n      }\n      if (id === reactJsxDevRuntimeId && importer !== virtualReactJsxDevRuntimeId) {\n        return virtualReactJsxDevRuntimeId;\n      }\n    },\n    load(id) {\n      if (id === virtualReactJsxRuntimeId) {\n        return [\n          `import * as jsxRuntime from ${JSON.stringify(reactJsxRuntimeId)}`,\n          `export const Fragment = jsxRuntime.Fragment`,\n          `export const jsx = jsxRuntime.jsx`,\n          `export const jsxs = jsxRuntime.jsxs`\n        ].join(\"\\n\");\n      }\n      if (id === virtualReactJsxDevRuntimeId) {\n        return [\n          `import * as jsxRuntime from ${JSON.stringify(reactJsxDevRuntimeId)}`,\n          `export const Fragment = jsxRuntime.Fragment`,\n          `export const jsxDEV = jsxRuntime.jsxDEV`\n        ].join(\"\\n\");\n      }\n    }\n  };\n  return [viteBabel, viteReactRefresh, useAutomaticRuntime && viteReactJsx];\n}\nviteReact.preambleCode = preambleCode;\nfunction loadPlugin(path2) {\n  return import(path2).then((module) => module.default || module);\n}\nfunction createBabelOptions(rawOptions) {\n  var _a;\n  const babelOptions = {\n    babelrc: false,\n    configFile: false,\n    ...rawOptions\n  };\n  babelOptions.plugins || (babelOptions.plugins = []);\n  babelOptions.presets || (babelOptions.presets = []);\n  babelOptions.overrides || (babelOptions.overrides = []);\n  babelOptions.parserOpts || (babelOptions.parserOpts = {});\n  (_a = babelOptions.parserOpts).plugins || (_a.plugins = []);\n  return babelOptions;\n}\n\nexport { viteReact as default };\n/README.md\u0010c# @vitejs/plugin-react [![npm](https://img.shields.io/npm/v/@vitejs/plugin-react.svg)](https://npmjs.com/package/@vitejs/plugin-react)\n\nThe all-in-one Vite plugin for React projects.\n\n- enable [Fast Refresh](https://www.npmjs.com/package/react-refresh) in development\n- use the [automatic JSX runtime](https://github.com/alloc/vite-react-jsx#faq)\n- avoid manual `import React` in `.jsx` and `.tsx` modules\n- dedupe the `react` and `react-dom` packages\n- use custom Babel plugins/presets\n\n```js\n// vite.config.js\nimport { defineConfig } from 'vite'\nimport react from '@vitejs/plugin-react'\n\nexport default defineConfig({\n  plugins: [react()],\n})\n```\n\n## Filter which files use Fast Refresh\n\nBy default, Fast Refresh is used by files ending with `.js`, `.jsx`, `.ts`, and `.tsx`, except for files with a `node_modules` parent directory.\n\nIn some situations, you may not want a file to act as a HMR boundary, instead preferring that the changes propagate higher in the stack before being handled. In these cases, you can provide an `include` and/or `exclude` option, which can be a regex, a [picomatch](https://github.com/micromatch/picomatch#globbing-features) pattern, or an array of either. Files matching `include` and not `exclude` will use Fast Refresh. The defaults are always applied.\n\n```js\nreact({\n  // Exclude storybook stories\n  exclude: /\\.stories\\.(t|j)sx?$/,\n  // Only .tsx files\n  include: '**/*.tsx',\n})\n```\n\n### Configure the JSX import source\n\nControl where the JSX factory is imported from. This option is ignored for classic `jsxRuntime`.\n\n```js\nreact({\n  jsxImportSource: '@emotion/react',\n})\n```\n\n## Opting out of the automatic JSX runtime\n\nBy default, the plugin uses the [automatic JSX runtime](https://github.com/alloc/vite-react-jsx#faq). However, if you encounter any issues, you may opt out using the `jsxRuntime` option.\n\n```js\nreact({\n  jsxRuntime: 'classic',\n})\n```\n\n## Babel configuration\n\nThe `babel` option lets you add plugins, presets, and [other configuration](https://babeljs.io/docs/en/options) to the Babel transformation performed on each JSX/TSX file.\n\n```js\nreact({\n  babel: {\n    presets: [...],\n    // Your plugins run before any built-in transform (eg: Fast Refresh)\n    plugins: [...],\n    // Use .babelrc files\n    babelrc: true,\n    // Use babel.config.js files\n    configFile: true,\n  }\n})\n```\n\n### Proposed syntax\n\nIf you are using ES syntax that are still in proposal status (e.g. class properties), you can selectively enable them with the `babel.parserOpts.plugins` option:\n\n```js\nreact({\n  babel: {\n    parserOpts: {\n      plugins: ['decorators-legacy'],\n    },\n  },\n})\n```\n\nThis option does not enable _code transformation_. That is handled by esbuild.\n\n**Note:** TypeScript syntax is handled automatically.\n\nHere's the [complete list of Babel parser plugins](https://babeljs.io/docs/en/babel-parser#ecmascript-proposalshttpsgithubcombabelproposals).\n\n## Middleware mode\n\nIn [middleware mode](https://vitejs.dev/config/server-options.html#server-middlewaremode), you should make sure your entry `index.html` file is transformed by Vite. Here's an example for an Express server:\n\n```js\napp.get('/', async (req, res, next) => {\n  try {\n    let html = fs.readFileSync(path.resolve(root, 'index.html'), 'utf-8')\n\n    // Transform HTML using Vite plugins.\n    html = await viteServer.transformIndexHtml(req.url, html)\n\n    res.send(html)\n  } catch (e) {\n    return next(e)\n  }\n})\n```\n\nOtherwise, you'll probably get this error:\n\n```\nUncaught Error: @vitejs/plugin-react can't detect preamble. Something is wrong.\n```\n\n## Consistent components exports\n\nFor React refresh to work correctly, your file should only export React components. You can find a good explanation in the [Gatsby docs](https://www.gatsbyjs.com/docs/reference/local-development/fast-refresh/#how-it-works).\n\nIf an incompatible change in exports is found, the module will be invalidated and HMR will propagate. To make it easier to export simple constants alongside your component, the module is only invalidated when their value changes.\n\nYou can catch mistakes and get more detailed warning with this [eslint rule](https://github.com/ArnaudBarre/eslint-plugin-react-refresh).\n/package.json\u00051{\n  \"name\": \"@vitejs/plugin-react\",\n  \"version\": \"3.1.0\",\n  \"license\": \"MIT\",\n  \"author\": \"Evan You\",\n  \"contributors\": [\n    \"Alec Larson\",\n    \"Arnaud Barré\"\n  ],\n  \"files\": [\n    \"dist\"\n  ],\n  \"main\": \"./dist/index.cjs\",\n  \"module\": \"./dist/index.mjs\",\n  \"types\": \"./dist/index.d.ts\",\n  \"exports\": {\n    \".\": {\n      \"types\": \"./dist/index.d.ts\",\n      \"import\": \"./dist/index.mjs\",\n      \"require\": \"./dist/index.cjs\"\n    }\n  },\n  \"scripts\": {\n    \"dev\": \"unbuild --stub\",\n    \"build\": \"unbuild && pnpm run patch-cjs && tsx scripts/copyRefreshUtils.ts\",\n    \"patch-cjs\": \"tsx ../../scripts/patchCJS.ts\",\n    \"prepublishOnly\": \"npm run build\"\n  },\n  \"engines\": {\n    \"node\": \"^14.18.0 || >=16.0.0\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/vitejs/vite-plugin-react.git\",\n    \"directory\": \"packages/plugin-react\"\n  },\n  \"bugs\": {\n    \"url\": \"https://github.com/vitejs/vite-plugin-react/issues\"\n  },\n  \"homepage\": \"https://github.com/vitejs/vite-plugin-react/tree/main/packages/plugin-react#readme\",\n  \"dependencies\": {\n    \"@babel/core\": \"^7.20.12\",\n    \"@babel/plugin-transform-react-jsx-self\": \"^7.18.6\",\n    \"@babel/plugin-transform-react-jsx-source\": \"^7.19.6\",\n    \"magic-string\": \"^0.27.0\",\n    \"react-refresh\": \"^0.14.0\"\n  },\n  \"peerDependencies\": {\n    \"vite\": \"^4.1.0-beta.0\"\n  }\n}\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/Y29sb3ItY29udmVydEAxLjkuMw==",
    "content": "/route.js\bvar conversions = require('./conversions');\n\n/*\n\tthis function routes a model to all other models.\n\n\tall functions that are routed have a property `.conversion` attached\n\tto the returned synthetic function. This property is an array\n\tof strings, each with the steps in between the 'from' and 'to'\n\tcolor models (inclusive).\n\n\tconversions that are not possible simply are not included.\n*/\n\nfunction buildGraph() {\n\tvar graph = {};\n\t// https://jsperf.com/object-keys-vs-for-in-with-closure/3\n\tvar models = Object.keys(conversions);\n\n\tfor (var len = models.length, i = 0; i < len; i++) {\n\t\tgraph[models[i]] = {\n\t\t\t// http://jsperf.com/1-vs-infinity\n\t\t\t// micro-opt, but this is simple.\n\t\t\tdistance: -1,\n\t\t\tparent: null\n\t\t};\n\t}\n\n\treturn graph;\n}\n\n// https://en.wikipedia.org/wiki/Breadth-first_search\nfunction deriveBFS(fromModel) {\n\tvar graph = buildGraph();\n\tvar queue = [fromModel]; // unshift -> queue -> pop\n\n\tgraph[fromModel].distance = 0;\n\n\twhile (queue.length) {\n\t\tvar current = queue.pop();\n\t\tvar adjacents = Object.keys(conversions[current]);\n\n\t\tfor (var len = adjacents.length, i = 0; i < len; i++) {\n\t\t\tvar adjacent = adjacents[i];\n\t\t\tvar node = graph[adjacent];\n\n\t\t\tif (node.distance === -1) {\n\t\t\t\tnode.distance = graph[current].distance + 1;\n\t\t\t\tnode.parent = current;\n\t\t\t\tqueue.unshift(adjacent);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn graph;\n}\n\nfunction link(from, to) {\n\treturn function (args) {\n\t\treturn to(from(args));\n\t};\n}\n\nfunction wrapConversion(toModel, graph) {\n\tvar path = [graph[toModel].parent, toModel];\n\tvar fn = conversions[graph[toModel].parent][toModel];\n\n\tvar cur = graph[toModel].parent;\n\twhile (graph[cur].parent) {\n\t\tpath.unshift(graph[cur].parent);\n\t\tfn = link(conversions[graph[cur].parent][cur], fn);\n\t\tcur = graph[cur].parent;\n\t}\n\n\tfn.conversion = path;\n\treturn fn;\n}\n\nmodule.exports = function (fromModel) {\n\tvar graph = deriveBFS(fromModel);\n\tvar conversion = {};\n\n\tvar models = Object.keys(graph);\n\tfor (var len = models.length, i = 0; i < len; i++) {\n\t\tvar toModel = models[i];\n\t\tvar node = graph[toModel];\n\n\t\tif (node.parent === null) {\n\t\t\t// no possible conversion, or this node is the source model.\n\t\t\tcontinue;\n\t\t}\n\n\t\tconversion[toModel] = wrapConversion(toModel, graph);\n\t}\n\n\treturn conversion;\n};\n\n/index.js\u0006var conversions = require('./conversions');\nvar route = require('./route');\n\nvar convert = {};\n\nvar models = Object.keys(conversions);\n\nfunction wrapRaw(fn) {\n\tvar wrappedFn = function (args) {\n\t\tif (args === undefined || args === null) {\n\t\t\treturn args;\n\t\t}\n\n\t\tif (arguments.length > 1) {\n\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t}\n\n\t\treturn fn(args);\n\t};\n\n\t// preserve .conversion property if there is one\n\tif ('conversion' in fn) {\n\t\twrappedFn.conversion = fn.conversion;\n\t}\n\n\treturn wrappedFn;\n}\n\nfunction wrapRounded(fn) {\n\tvar wrappedFn = function (args) {\n\t\tif (args === undefined || args === null) {\n\t\t\treturn args;\n\t\t}\n\n\t\tif (arguments.length > 1) {\n\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t}\n\n\t\tvar result = fn(args);\n\n\t\t// we're assuming the result is an array here.\n\t\t// see notice in conversions.js; don't use box types\n\t\t// in conversion functions.\n\t\tif (typeof result === 'object') {\n\t\t\tfor (var len = result.length, i = 0; i < len; i++) {\n\t\t\t\tresult[i] = Math.round(result[i]);\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t};\n\n\t// preserve .conversion property if there is one\n\tif ('conversion' in fn) {\n\t\twrappedFn.conversion = fn.conversion;\n\t}\n\n\treturn wrappedFn;\n}\n\nmodels.forEach(function (fromModel) {\n\tconvert[fromModel] = {};\n\n\tObject.defineProperty(convert[fromModel], 'channels', {value: conversions[fromModel].channels});\n\tObject.defineProperty(convert[fromModel], 'labels', {value: conversions[fromModel].labels});\n\n\tvar routes = route(fromModel);\n\tvar routeModels = Object.keys(routes);\n\n\trouteModels.forEach(function (toModel) {\n\t\tvar fn = routes[toModel];\n\n\t\tconvert[fromModel][toModel] = wrapRounded(fn);\n\t\tconvert[fromModel][toModel].raw = wrapRaw(fn);\n\t});\n});\n\nmodule.exports = convert;\n/package.json\u0003%{\n  \"name\": \"color-convert\",\n  \"description\": \"Plain color conversion functions\",\n  \"version\": \"1.9.3\",\n  \"author\": \"Heather Arthur <fayearthur@gmail.com>\",\n  \"license\": \"MIT\",\n  \"repository\": \"Qix-/color-convert\",\n  \"scripts\": {\n    \"pretest\": \"xo\",\n    \"test\": \"node test/basic.js\"\n  },\n  \"keywords\": [\n    \"color\",\n    \"colour\",\n    \"convert\",\n    \"converter\",\n    \"conversion\",\n    \"rgb\",\n    \"hsl\",\n    \"hsv\",\n    \"hwb\",\n    \"cmyk\",\n    \"ansi\",\n    \"ansi16\"\n  ],\n  \"files\": [\n    \"index.js\",\n    \"conversions.js\",\n    \"css-keywords.js\",\n    \"route.js\"\n  ],\n  \"xo\": {\n    \"rules\": {\n      \"default-case\": 0,\n      \"no-inline-comments\": 0,\n      \"operator-linebreak\": 0\n    }\n  },\n  \"devDependencies\": {\n    \"chalk\": \"1.1.1\",\n    \"xo\": \"0.11.2\"\n  },\n  \"dependencies\": {\n    \"color-name\": \"1.1.3\"\n  }\n}\n/conversions.jsA/* MIT license */\nvar cssKeywords = require('color-name');\n\n// NOTE: conversions should only return primitive values (i.e. arrays, or\n//       values that give correct `typeof` results).\n//       do not use box values types (i.e. Number(), String(), etc.)\n\nvar reverseKeywords = {};\nfor (var key in cssKeywords) {\n\tif (cssKeywords.hasOwnProperty(key)) {\n\t\treverseKeywords[cssKeywords[key]] = key;\n\t}\n}\n\nvar convert = module.exports = {\n\trgb: {channels: 3, labels: 'rgb'},\n\thsl: {channels: 3, labels: 'hsl'},\n\thsv: {channels: 3, labels: 'hsv'},\n\thwb: {channels: 3, labels: 'hwb'},\n\tcmyk: {channels: 4, labels: 'cmyk'},\n\txyz: {channels: 3, labels: 'xyz'},\n\tlab: {channels: 3, labels: 'lab'},\n\tlch: {channels: 3, labels: 'lch'},\n\thex: {channels: 1, labels: ['hex']},\n\tkeyword: {channels: 1, labels: ['keyword']},\n\tansi16: {channels: 1, labels: ['ansi16']},\n\tansi256: {channels: 1, labels: ['ansi256']},\n\thcg: {channels: 3, labels: ['h', 'c', 'g']},\n\tapple: {channels: 3, labels: ['r16', 'g16', 'b16']},\n\tgray: {channels: 1, labels: ['gray']}\n};\n\n// hide .channels and .labels properties\nfor (var model in convert) {\n\tif (convert.hasOwnProperty(model)) {\n\t\tif (!('channels' in convert[model])) {\n\t\t\tthrow new Error('missing channels property: ' + model);\n\t\t}\n\n\t\tif (!('labels' in convert[model])) {\n\t\t\tthrow new Error('missing channel labels property: ' + model);\n\t\t}\n\n\t\tif (convert[model].labels.length !== convert[model].channels) {\n\t\t\tthrow new Error('channel and label counts mismatch: ' + model);\n\t\t}\n\n\t\tvar channels = convert[model].channels;\n\t\tvar labels = convert[model].labels;\n\t\tdelete convert[model].channels;\n\t\tdelete convert[model].labels;\n\t\tObject.defineProperty(convert[model], 'channels', {value: channels});\n\t\tObject.defineProperty(convert[model], 'labels', {value: labels});\n\t}\n}\n\nconvert.rgb.hsl = function (rgb) {\n\tvar r = rgb[0] / 255;\n\tvar g = rgb[1] / 255;\n\tvar b = rgb[2] / 255;\n\tvar min = Math.min(r, g, b);\n\tvar max = Math.max(r, g, b);\n\tvar delta = max - min;\n\tvar h;\n\tvar s;\n\tvar l;\n\n\tif (max === min) {\n\t\th = 0;\n\t} else if (r === max) {\n\t\th = (g - b) / delta;\n\t} else if (g === max) {\n\t\th = 2 + (b - r) / delta;\n\t} else if (b === max) {\n\t\th = 4 + (r - g) / delta;\n\t}\n\n\th = Math.min(h * 60, 360);\n\n\tif (h < 0) {\n\t\th += 360;\n\t}\n\n\tl = (min + max) / 2;\n\n\tif (max === min) {\n\t\ts = 0;\n\t} else if (l <= 0.5) {\n\t\ts = delta / (max + min);\n\t} else {\n\t\ts = delta / (2 - max - min);\n\t}\n\n\treturn [h, s * 100, l * 100];\n};\n\nconvert.rgb.hsv = function (rgb) {\n\tvar rdif;\n\tvar gdif;\n\tvar bdif;\n\tvar h;\n\tvar s;\n\n\tvar r = rgb[0] / 255;\n\tvar g = rgb[1] / 255;\n\tvar b = rgb[2] / 255;\n\tvar v = Math.max(r, g, b);\n\tvar diff = v - Math.min(r, g, b);\n\tvar diffc = function (c) {\n\t\treturn (v - c) / 6 / diff + 1 / 2;\n\t};\n\n\tif (diff === 0) {\n\t\th = s = 0;\n\t} else {\n\t\ts = diff / v;\n\t\trdif = diffc(r);\n\t\tgdif = diffc(g);\n\t\tbdif = diffc(b);\n\n\t\tif (r === v) {\n\t\t\th = bdif - gdif;\n\t\t} else if (g === v) {\n\t\t\th = (1 / 3) + rdif - bdif;\n\t\t} else if (b === v) {\n\t\t\th = (2 / 3) + gdif - rdif;\n\t\t}\n\t\tif (h < 0) {\n\t\t\th += 1;\n\t\t} else if (h > 1) {\n\t\t\th -= 1;\n\t\t}\n\t}\n\n\treturn [\n\t\th * 360,\n\t\ts * 100,\n\t\tv * 100\n\t];\n};\n\nconvert.rgb.hwb = function (rgb) {\n\tvar r = rgb[0];\n\tvar g = rgb[1];\n\tvar b = rgb[2];\n\tvar h = convert.rgb.hsl(rgb)[0];\n\tvar w = 1 / 255 * Math.min(r, Math.min(g, b));\n\n\tb = 1 - 1 / 255 * Math.max(r, Math.max(g, b));\n\n\treturn [h, w * 100, b * 100];\n};\n\nconvert.rgb.cmyk = function (rgb) {\n\tvar r = rgb[0] / 255;\n\tvar g = rgb[1] / 255;\n\tvar b = rgb[2] / 255;\n\tvar c;\n\tvar m;\n\tvar y;\n\tvar k;\n\n\tk = Math.min(1 - r, 1 - g, 1 - b);\n\tc = (1 - r - k) / (1 - k) || 0;\n\tm = (1 - g - k) / (1 - k) || 0;\n\ty = (1 - b - k) / (1 - k) || 0;\n\n\treturn [c * 100, m * 100, y * 100, k * 100];\n};\n\n/**\n * See https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance\n * */\nfunction comparativeDistance(x, y) {\n\treturn (\n\t\tMath.pow(x[0] - y[0], 2) +\n\t\tMath.pow(x[1] - y[1], 2) +\n\t\tMath.pow(x[2] - y[2], 2)\n\t);\n}\n\nconvert.rgb.keyword = function (rgb) {\n\tvar reversed = reverseKeywords[rgb];\n\tif (reversed) {\n\t\treturn reversed;\n\t}\n\n\tvar currentClosestDistance = Infinity;\n\tvar currentClosestKeyword;\n\n\tfor (var keyword in cssKeywords) {\n\t\tif (cssKeywords.hasOwnProperty(keyword)) {\n\t\t\tvar value = cssKeywords[keyword];\n\n\t\t\t// Compute comparative distance\n\t\t\tvar distance = comparativeDistance(rgb, value);\n\n\t\t\t// Check if its less, if so set as closest\n\t\t\tif (distance < currentClosestDistance) {\n\t\t\t\tcurrentClosestDistance = distance;\n\t\t\t\tcurrentClosestKeyword = keyword;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn currentClosestKeyword;\n};\n\nconvert.keyword.rgb = function (keyword) {\n\treturn cssKeywords[keyword];\n};\n\nconvert.rgb.xyz = function (rgb) {\n\tvar r = rgb[0] / 255;\n\tvar g = rgb[1] / 255;\n\tvar b = rgb[2] / 255;\n\n\t// assume sRGB\n\tr = r > 0.04045 ? Math.pow(((r + 0.055) / 1.055), 2.4) : (r / 12.92);\n\tg = g > 0.04045 ? Math.pow(((g + 0.055) / 1.055), 2.4) : (g / 12.92);\n\tb = b > 0.04045 ? Math.pow(((b + 0.055) / 1.055), 2.4) : (b / 12.92);\n\n\tvar x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805);\n\tvar y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722);\n\tvar z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505);\n\n\treturn [x * 100, y * 100, z * 100];\n};\n\nconvert.rgb.lab = function (rgb) {\n\tvar xyz = convert.rgb.xyz(rgb);\n\tvar x = xyz[0];\n\tvar y = xyz[1];\n\tvar z = xyz[2];\n\tvar l;\n\tvar a;\n\tvar b;\n\n\tx /= 95.047;\n\ty /= 100;\n\tz /= 108.883;\n\n\tx = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116);\n\ty = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116);\n\tz = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116);\n\n\tl = (116 * y) - 16;\n\ta = 500 * (x - y);\n\tb = 200 * (y - z);\n\n\treturn [l, a, b];\n};\n\nconvert.hsl.rgb = function (hsl) {\n\tvar h = hsl[0] / 360;\n\tvar s = hsl[1] / 100;\n\tvar l = hsl[2] / 100;\n\tvar t1;\n\tvar t2;\n\tvar t3;\n\tvar rgb;\n\tvar val;\n\n\tif (s === 0) {\n\t\tval = l * 255;\n\t\treturn [val, val, val];\n\t}\n\n\tif (l < 0.5) {\n\t\tt2 = l * (1 + s);\n\t} else {\n\t\tt2 = l + s - l * s;\n\t}\n\n\tt1 = 2 * l - t2;\n\n\trgb = [0, 0, 0];\n\tfor (var i = 0; i < 3; i++) {\n\t\tt3 = h + 1 / 3 * -(i - 1);\n\t\tif (t3 < 0) {\n\t\t\tt3++;\n\t\t}\n\t\tif (t3 > 1) {\n\t\t\tt3--;\n\t\t}\n\n\t\tif (6 * t3 < 1) {\n\t\t\tval = t1 + (t2 - t1) * 6 * t3;\n\t\t} else if (2 * t3 < 1) {\n\t\t\tval = t2;\n\t\t} else if (3 * t3 < 2) {\n\t\t\tval = t1 + (t2 - t1) * (2 / 3 - t3) * 6;\n\t\t} else {\n\t\t\tval = t1;\n\t\t}\n\n\t\trgb[i] = val * 255;\n\t}\n\n\treturn rgb;\n};\n\nconvert.hsl.hsv = function (hsl) {\n\tvar h = hsl[0];\n\tvar s = hsl[1] / 100;\n\tvar l = hsl[2] / 100;\n\tvar smin = s;\n\tvar lmin = Math.max(l, 0.01);\n\tvar sv;\n\tvar v;\n\n\tl *= 2;\n\ts *= (l <= 1) ? l : 2 - l;\n\tsmin *= lmin <= 1 ? lmin : 2 - lmin;\n\tv = (l + s) / 2;\n\tsv = l === 0 ? (2 * smin) / (lmin + smin) : (2 * s) / (l + s);\n\n\treturn [h, sv * 100, v * 100];\n};\n\nconvert.hsv.rgb = function (hsv) {\n\tvar h = hsv[0] / 60;\n\tvar s = hsv[1] / 100;\n\tvar v = hsv[2] / 100;\n\tvar hi = Math.floor(h) % 6;\n\n\tvar f = h - Math.floor(h);\n\tvar p = 255 * v * (1 - s);\n\tvar q = 255 * v * (1 - (s * f));\n\tvar t = 255 * v * (1 - (s * (1 - f)));\n\tv *= 255;\n\n\tswitch (hi) {\n\t\tcase 0:\n\t\t\treturn [v, t, p];\n\t\tcase 1:\n\t\t\treturn [q, v, p];\n\t\tcase 2:\n\t\t\treturn [p, v, t];\n\t\tcase 3:\n\t\t\treturn [p, q, v];\n\t\tcase 4:\n\t\t\treturn [t, p, v];\n\t\tcase 5:\n\t\t\treturn [v, p, q];\n\t}\n};\n\nconvert.hsv.hsl = function (hsv) {\n\tvar h = hsv[0];\n\tvar s = hsv[1] / 100;\n\tvar v = hsv[2] / 100;\n\tvar vmin = Math.max(v, 0.01);\n\tvar lmin;\n\tvar sl;\n\tvar l;\n\n\tl = (2 - s) * v;\n\tlmin = (2 - s) * vmin;\n\tsl = s * vmin;\n\tsl /= (lmin <= 1) ? lmin : 2 - lmin;\n\tsl = sl || 0;\n\tl /= 2;\n\n\treturn [h, sl * 100, l * 100];\n};\n\n// http://dev.w3.org/csswg/css-color/#hwb-to-rgb\nconvert.hwb.rgb = function (hwb) {\n\tvar h = hwb[0] / 360;\n\tvar wh = hwb[1] / 100;\n\tvar bl = hwb[2] / 100;\n\tvar ratio = wh + bl;\n\tvar i;\n\tvar v;\n\tvar f;\n\tvar n;\n\n\t// wh + bl cant be > 1\n\tif (ratio > 1) {\n\t\twh /= ratio;\n\t\tbl /= ratio;\n\t}\n\n\ti = Math.floor(6 * h);\n\tv = 1 - bl;\n\tf = 6 * h - i;\n\n\tif ((i & 0x01) !== 0) {\n\t\tf = 1 - f;\n\t}\n\n\tn = wh + f * (v - wh); // linear interpolation\n\n\tvar r;\n\tvar g;\n\tvar b;\n\tswitch (i) {\n\t\tdefault:\n\t\tcase 6:\n\t\tcase 0: r = v; g = n; b = wh; break;\n\t\tcase 1: r = n; g = v; b = wh; break;\n\t\tcase 2: r = wh; g = v; b = n; break;\n\t\tcase 3: r = wh; g = n; b = v; break;\n\t\tcase 4: r = n; g = wh; b = v; break;\n\t\tcase 5: r = v; g = wh; b = n; break;\n\t}\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.cmyk.rgb = function (cmyk) {\n\tvar c = cmyk[0] / 100;\n\tvar m = cmyk[1] / 100;\n\tvar y = cmyk[2] / 100;\n\tvar k = cmyk[3] / 100;\n\tvar r;\n\tvar g;\n\tvar b;\n\n\tr = 1 - Math.min(1, c * (1 - k) + k);\n\tg = 1 - Math.min(1, m * (1 - k) + k);\n\tb = 1 - Math.min(1, y * (1 - k) + k);\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.xyz.rgb = function (xyz) {\n\tvar x = xyz[0] / 100;\n\tvar y = xyz[1] / 100;\n\tvar z = xyz[2] / 100;\n\tvar r;\n\tvar g;\n\tvar b;\n\n\tr = (x * 3.2406) + (y * -1.5372) + (z * -0.4986);\n\tg = (x * -0.9689) + (y * 1.8758) + (z * 0.0415);\n\tb = (x * 0.0557) + (y * -0.2040) + (z * 1.0570);\n\n\t// assume sRGB\n\tr = r > 0.0031308\n\t\t? ((1.055 * Math.pow(r, 1.0 / 2.4)) - 0.055)\n\t\t: r * 12.92;\n\n\tg = g > 0.0031308\n\t\t? ((1.055 * Math.pow(g, 1.0 / 2.4)) - 0.055)\n\t\t: g * 12.92;\n\n\tb = b > 0.0031308\n\t\t? ((1.055 * Math.pow(b, 1.0 / 2.4)) - 0.055)\n\t\t: b * 12.92;\n\n\tr = Math.min(Math.max(0, r), 1);\n\tg = Math.min(Math.max(0, g), 1);\n\tb = Math.min(Math.max(0, b), 1);\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.xyz.lab = function (xyz) {\n\tvar x = xyz[0];\n\tvar y = xyz[1];\n\tvar z = xyz[2];\n\tvar l;\n\tvar a;\n\tvar b;\n\n\tx /= 95.047;\n\ty /= 100;\n\tz /= 108.883;\n\n\tx = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116);\n\ty = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116);\n\tz = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116);\n\n\tl = (116 * y) - 16;\n\ta = 500 * (x - y);\n\tb = 200 * (y - z);\n\n\treturn [l, a, b];\n};\n\nconvert.lab.xyz = function (lab) {\n\tvar l = lab[0];\n\tvar a = lab[1];\n\tvar b = lab[2];\n\tvar x;\n\tvar y;\n\tvar z;\n\n\ty = (l + 16) / 116;\n\tx = a / 500 + y;\n\tz = y - b / 200;\n\n\tvar y2 = Math.pow(y, 3);\n\tvar x2 = Math.pow(x, 3);\n\tvar z2 = Math.pow(z, 3);\n\ty = y2 > 0.008856 ? y2 : (y - 16 / 116) / 7.787;\n\tx = x2 > 0.008856 ? x2 : (x - 16 / 116) / 7.787;\n\tz = z2 > 0.008856 ? z2 : (z - 16 / 116) / 7.787;\n\n\tx *= 95.047;\n\ty *= 100;\n\tz *= 108.883;\n\n\treturn [x, y, z];\n};\n\nconvert.lab.lch = function (lab) {\n\tvar l = lab[0];\n\tvar a = lab[1];\n\tvar b = lab[2];\n\tvar hr;\n\tvar h;\n\tvar c;\n\n\thr = Math.atan2(b, a);\n\th = hr * 360 / 2 / Math.PI;\n\n\tif (h < 0) {\n\t\th += 360;\n\t}\n\n\tc = Math.sqrt(a * a + b * b);\n\n\treturn [l, c, h];\n};\n\nconvert.lch.lab = function (lch) {\n\tvar l = lch[0];\n\tvar c = lch[1];\n\tvar h = lch[2];\n\tvar a;\n\tvar b;\n\tvar hr;\n\n\thr = h / 360 * 2 * Math.PI;\n\ta = c * Math.cos(hr);\n\tb = c * Math.sin(hr);\n\n\treturn [l, a, b];\n};\n\nconvert.rgb.ansi16 = function (args) {\n\tvar r = args[0];\n\tvar g = args[1];\n\tvar b = args[2];\n\tvar value = 1 in arguments ? arguments[1] : convert.rgb.hsv(args)[2]; // hsv -> ansi16 optimization\n\n\tvalue = Math.round(value / 50);\n\n\tif (value === 0) {\n\t\treturn 30;\n\t}\n\n\tvar ansi = 30\n\t\t+ ((Math.round(b / 255) << 2)\n\t\t| (Math.round(g / 255) << 1)\n\t\t| Math.round(r / 255));\n\n\tif (value === 2) {\n\t\tansi += 60;\n\t}\n\n\treturn ansi;\n};\n\nconvert.hsv.ansi16 = function (args) {\n\t// optimization here; we already know the value and don't need to get\n\t// it converted for us.\n\treturn convert.rgb.ansi16(convert.hsv.rgb(args), args[2]);\n};\n\nconvert.rgb.ansi256 = function (args) {\n\tvar r = args[0];\n\tvar g = args[1];\n\tvar b = args[2];\n\n\t// we use the extended greyscale palette here, with the exception of\n\t// black and white. normal palette only has 4 greyscale shades.\n\tif (r === g && g === b) {\n\t\tif (r < 8) {\n\t\t\treturn 16;\n\t\t}\n\n\t\tif (r > 248) {\n\t\t\treturn 231;\n\t\t}\n\n\t\treturn Math.round(((r - 8) / 247) * 24) + 232;\n\t}\n\n\tvar ansi = 16\n\t\t+ (36 * Math.round(r / 255 * 5))\n\t\t+ (6 * Math.round(g / 255 * 5))\n\t\t+ Math.round(b / 255 * 5);\n\n\treturn ansi;\n};\n\nconvert.ansi16.rgb = function (args) {\n\tvar color = args % 10;\n\n\t// handle greyscale\n\tif (color === 0 || color === 7) {\n\t\tif (args > 50) {\n\t\t\tcolor += 3.5;\n\t\t}\n\n\t\tcolor = color / 10.5 * 255;\n\n\t\treturn [color, color, color];\n\t}\n\n\tvar mult = (~~(args > 50) + 1) * 0.5;\n\tvar r = ((color & 1) * mult) * 255;\n\tvar g = (((color >> 1) & 1) * mult) * 255;\n\tvar b = (((color >> 2) & 1) * mult) * 255;\n\n\treturn [r, g, b];\n};\n\nconvert.ansi256.rgb = function (args) {\n\t// handle greyscale\n\tif (args >= 232) {\n\t\tvar c = (args - 232) * 10 + 8;\n\t\treturn [c, c, c];\n\t}\n\n\targs -= 16;\n\n\tvar rem;\n\tvar r = Math.floor(args / 36) / 5 * 255;\n\tvar g = Math.floor((rem = args % 36) / 6) / 5 * 255;\n\tvar b = (rem % 6) / 5 * 255;\n\n\treturn [r, g, b];\n};\n\nconvert.rgb.hex = function (args) {\n\tvar integer = ((Math.round(args[0]) & 0xFF) << 16)\n\t\t+ ((Math.round(args[1]) & 0xFF) << 8)\n\t\t+ (Math.round(args[2]) & 0xFF);\n\n\tvar string = integer.toString(16).toUpperCase();\n\treturn '000000'.substring(string.length) + string;\n};\n\nconvert.hex.rgb = function (args) {\n\tvar match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);\n\tif (!match) {\n\t\treturn [0, 0, 0];\n\t}\n\n\tvar colorString = match[0];\n\n\tif (match[0].length === 3) {\n\t\tcolorString = colorString.split('').map(function (char) {\n\t\t\treturn char + char;\n\t\t}).join('');\n\t}\n\n\tvar integer = parseInt(colorString, 16);\n\tvar r = (integer >> 16) & 0xFF;\n\tvar g = (integer >> 8) & 0xFF;\n\tvar b = integer & 0xFF;\n\n\treturn [r, g, b];\n};\n\nconvert.rgb.hcg = function (rgb) {\n\tvar r = rgb[0] / 255;\n\tvar g = rgb[1] / 255;\n\tvar b = rgb[2] / 255;\n\tvar max = Math.max(Math.max(r, g), b);\n\tvar min = Math.min(Math.min(r, g), b);\n\tvar chroma = (max - min);\n\tvar grayscale;\n\tvar hue;\n\n\tif (chroma < 1) {\n\t\tgrayscale = min / (1 - chroma);\n\t} else {\n\t\tgrayscale = 0;\n\t}\n\n\tif (chroma <= 0) {\n\t\thue = 0;\n\t} else\n\tif (max === r) {\n\t\thue = ((g - b) / chroma) % 6;\n\t} else\n\tif (max === g) {\n\t\thue = 2 + (b - r) / chroma;\n\t} else {\n\t\thue = 4 + (r - g) / chroma + 4;\n\t}\n\n\thue /= 6;\n\thue %= 1;\n\n\treturn [hue * 360, chroma * 100, grayscale * 100];\n};\n\nconvert.hsl.hcg = function (hsl) {\n\tvar s = hsl[1] / 100;\n\tvar l = hsl[2] / 100;\n\tvar c = 1;\n\tvar f = 0;\n\n\tif (l < 0.5) {\n\t\tc = 2.0 * s * l;\n\t} else {\n\t\tc = 2.0 * s * (1.0 - l);\n\t}\n\n\tif (c < 1.0) {\n\t\tf = (l - 0.5 * c) / (1.0 - c);\n\t}\n\n\treturn [hsl[0], c * 100, f * 100];\n};\n\nconvert.hsv.hcg = function (hsv) {\n\tvar s = hsv[1] / 100;\n\tvar v = hsv[2] / 100;\n\n\tvar c = s * v;\n\tvar f = 0;\n\n\tif (c < 1.0) {\n\t\tf = (v - c) / (1 - c);\n\t}\n\n\treturn [hsv[0], c * 100, f * 100];\n};\n\nconvert.hcg.rgb = function (hcg) {\n\tvar h = hcg[0] / 360;\n\tvar c = hcg[1] / 100;\n\tvar g = hcg[2] / 100;\n\n\tif (c === 0.0) {\n\t\treturn [g * 255, g * 255, g * 255];\n\t}\n\n\tvar pure = [0, 0, 0];\n\tvar hi = (h % 1) * 6;\n\tvar v = hi % 1;\n\tvar w = 1 - v;\n\tvar mg = 0;\n\n\tswitch (Math.floor(hi)) {\n\t\tcase 0:\n\t\t\tpure[0] = 1; pure[1] = v; pure[2] = 0; break;\n\t\tcase 1:\n\t\t\tpure[0] = w; pure[1] = 1; pure[2] = 0; break;\n\t\tcase 2:\n\t\t\tpure[0] = 0; pure[1] = 1; pure[2] = v; break;\n\t\tcase 3:\n\t\t\tpure[0] = 0; pure[1] = w; pure[2] = 1; break;\n\t\tcase 4:\n\t\t\tpure[0] = v; pure[1] = 0; pure[2] = 1; break;\n\t\tdefault:\n\t\t\tpure[0] = 1; pure[1] = 0; pure[2] = w;\n\t}\n\n\tmg = (1.0 - c) * g;\n\n\treturn [\n\t\t(c * pure[0] + mg) * 255,\n\t\t(c * pure[1] + mg) * 255,\n\t\t(c * pure[2] + mg) * 255\n\t];\n};\n\nconvert.hcg.hsv = function (hcg) {\n\tvar c = hcg[1] / 100;\n\tvar g = hcg[2] / 100;\n\n\tvar v = c + g * (1.0 - c);\n\tvar f = 0;\n\n\tif (v > 0.0) {\n\t\tf = c / v;\n\t}\n\n\treturn [hcg[0], f * 100, v * 100];\n};\n\nconvert.hcg.hsl = function (hcg) {\n\tvar c = hcg[1] / 100;\n\tvar g = hcg[2] / 100;\n\n\tvar l = g * (1.0 - c) + 0.5 * c;\n\tvar s = 0;\n\n\tif (l > 0.0 && l < 0.5) {\n\t\ts = c / (2 * l);\n\t} else\n\tif (l >= 0.5 && l < 1.0) {\n\t\ts = c / (2 * (1 - l));\n\t}\n\n\treturn [hcg[0], s * 100, l * 100];\n};\n\nconvert.hcg.hwb = function (hcg) {\n\tvar c = hcg[1] / 100;\n\tvar g = hcg[2] / 100;\n\tvar v = c + g * (1.0 - c);\n\treturn [hcg[0], (v - c) * 100, (1 - v) * 100];\n};\n\nconvert.hwb.hcg = function (hwb) {\n\tvar w = hwb[1] / 100;\n\tvar b = hwb[2] / 100;\n\tvar v = 1 - b;\n\tvar c = v - w;\n\tvar g = 0;\n\n\tif (c < 1) {\n\t\tg = (v - c) / (1 - c);\n\t}\n\n\treturn [hwb[0], c * 100, g * 100];\n};\n\nconvert.apple.rgb = function (apple) {\n\treturn [(apple[0] / 65535) * 255, (apple[1] / 65535) * 255, (apple[2] / 65535) * 255];\n};\n\nconvert.rgb.apple = function (rgb) {\n\treturn [(rgb[0] / 255) * 65535, (rgb[1] / 255) * 65535, (rgb[2] / 255) * 65535];\n};\n\nconvert.gray.rgb = function (args) {\n\treturn [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255];\n};\n\nconvert.gray.hsl = convert.gray.hsv = function (args) {\n\treturn [0, 0, args[0]];\n};\n\nconvert.gray.hwb = function (gray) {\n\treturn [0, 100, gray[0]];\n};\n\nconvert.gray.cmyk = function (gray) {\n\treturn [0, 0, 0, gray[0]];\n};\n\nconvert.gray.lab = function (gray) {\n\treturn [gray[0], 0, 0];\n};\n\nconvert.gray.hex = function (gray) {\n\tvar val = Math.round(gray[0] / 100 * 255) & 0xFF;\n\tvar integer = (val << 16) + (val << 8) + val;\n\n\tvar string = integer.toString(16).toUpperCase();\n\treturn '000000'.substring(string.length) + string;\n};\n\nconvert.rgb.gray = function (rgb) {\n\tvar val = (rgb[0] + rgb[1] + rgb[2]) / 3;\n\treturn [val / 255 * 100];\n};\n/README.md\u000b%# color-convert\n\n[![Build Status](https://travis-ci.org/Qix-/color-convert.svg?branch=master)](https://travis-ci.org/Qix-/color-convert)\n\nColor-convert is a color conversion library for JavaScript and node.\nIt converts all ways between `rgb`, `hsl`, `hsv`, `hwb`, `cmyk`, `ansi`, `ansi16`, `hex` strings, and CSS `keyword`s (will round to closest):\n\n```js\nvar convert = require('color-convert');\n\nconvert.rgb.hsl(140, 200, 100);             // [96, 48, 59]\nconvert.keyword.rgb('blue');                // [0, 0, 255]\n\nvar rgbChannels = convert.rgb.channels;     // 3\nvar cmykChannels = convert.cmyk.channels;   // 4\nvar ansiChannels = convert.ansi16.channels; // 1\n```\n\n# Install\n\n```console\n$ npm install color-convert\n```\n\n# API\n\nSimply get the property of the _from_ and _to_ conversion that you're looking for.\n\nAll functions have a rounded and unrounded variant. By default, return values are rounded. To get the unrounded (raw) results, simply tack on `.raw` to the function.\n\nAll 'from' functions have a hidden property called `.channels` that indicates the number of channels the function expects (not including alpha).\n\n```js\nvar convert = require('color-convert');\n\n// Hex to LAB\nconvert.hex.lab('DEADBF');         // [ 76, 21, -2 ]\nconvert.hex.lab.raw('DEADBF');     // [ 75.56213190997677, 20.653827952644754, -2.290532499330533 ]\n\n// RGB to CMYK\nconvert.rgb.cmyk(167, 255, 4);     // [ 35, 0, 98, 0 ]\nconvert.rgb.cmyk.raw(167, 255, 4); // [ 34.509803921568626, 0, 98.43137254901961, 0 ]\n```\n\n### Arrays\nAll functions that accept multiple arguments also support passing an array.\n\nNote that this does **not** apply to functions that convert from a color that only requires one value (e.g. `keyword`, `ansi256`, `hex`, etc.)\n\n```js\nvar convert = require('color-convert');\n\nconvert.rgb.hex(123, 45, 67);      // '7B2D43'\nconvert.rgb.hex([123, 45, 67]);    // '7B2D43'\n```\n\n## Routing\n\nConversions that don't have an _explicitly_ defined conversion (in [conversions.js](conversions.js)), but can be converted by means of sub-conversions (e.g. XYZ -> **RGB** -> CMYK), are automatically routed together. This allows just about any color model supported by `color-convert` to be converted to any other model, so long as a sub-conversion path exists. This is also true for conversions requiring more than one step in between (e.g. LCH -> **LAB** -> **XYZ** -> **RGB** -> Hex).\n\nKeep in mind that extensive conversions _may_ result in a loss of precision, and exist only to be complete. For a list of \"direct\" (single-step) conversions, see [conversions.js](conversions.js).\n\n# Contribute\n\nIf there is a new model you would like to support, or want to add a direct conversion between two existing models, please send us a pull request.\n\n# License\nCopyright &copy; 2011-2016, Heather Arthur and Josh Junon. Licensed under the [MIT License](LICENSE).\n/LICENSE\u0004?Copyright (c) 2011-2016 Heather Arthur <fayearthur@gmail.com>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n/CHANGELOG.md\u0005# 1.0.0 - 2016-01-07\n\n- Removed: unused speed test\n- Added: Automatic routing between previously unsupported conversions\n([#27](https://github.com/Qix-/color-convert/pull/27))\n- Removed: `xxx2xxx()` and `xxx2xxxRaw()` functions\n([#27](https://github.com/Qix-/color-convert/pull/27))\n- Removed: `convert()` class\n([#27](https://github.com/Qix-/color-convert/pull/27))\n- Changed: all functions to lookup dictionary\n([#27](https://github.com/Qix-/color-convert/pull/27))\n- Changed: `ansi` to `ansi256`\n([#27](https://github.com/Qix-/color-convert/pull/27))\n- Fixed: argument grouping for functions requiring only one argument\n([#27](https://github.com/Qix-/color-convert/pull/27))\n\n# 0.6.0 - 2015-07-23\n\n- Added: methods to handle\n[ANSI](https://en.wikipedia.org/wiki/ANSI_escape_code#Colors) 16/256 colors:\n  - rgb2ansi16\n  - rgb2ansi\n  - hsl2ansi16\n  - hsl2ansi\n  - hsv2ansi16\n  - hsv2ansi\n  - hwb2ansi16\n  - hwb2ansi\n  - cmyk2ansi16\n  - cmyk2ansi\n  - keyword2ansi16\n  - keyword2ansi\n  - ansi162rgb\n  - ansi162hsl\n  - ansi162hsv\n  - ansi162hwb\n  - ansi162cmyk\n  - ansi162keyword\n  - ansi2rgb\n  - ansi2hsl\n  - ansi2hsv\n  - ansi2hwb\n  - ansi2cmyk\n  - ansi2keyword\n([#18](https://github.com/harthur/color-convert/pull/18))\n\n# 0.5.3 - 2015-06-02\n\n- Fixed: hsl2hsv does not return `NaN` anymore when using `[0,0,0]`\n([#15](https://github.com/harthur/color-convert/issues/15))\n\n---\n\nCheck out commit logs for older releases\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/Y29sb3ItY29udmVydEAyLjAuMQ==",
    "content": "/CHANGELOG.md\u0005# 1.0.0 - 2016-01-07\n\n- Removed: unused speed test\n- Added: Automatic routing between previously unsupported conversions\n([#27](https://github.com/Qix-/color-convert/pull/27))\n- Removed: `xxx2xxx()` and `xxx2xxxRaw()` functions\n([#27](https://github.com/Qix-/color-convert/pull/27))\n- Removed: `convert()` class\n([#27](https://github.com/Qix-/color-convert/pull/27))\n- Changed: all functions to lookup dictionary\n([#27](https://github.com/Qix-/color-convert/pull/27))\n- Changed: `ansi` to `ansi256`\n([#27](https://github.com/Qix-/color-convert/pull/27))\n- Fixed: argument grouping for functions requiring only one argument\n([#27](https://github.com/Qix-/color-convert/pull/27))\n\n# 0.6.0 - 2015-07-23\n\n- Added: methods to handle\n[ANSI](https://en.wikipedia.org/wiki/ANSI_escape_code#Colors) 16/256 colors:\n  - rgb2ansi16\n  - rgb2ansi\n  - hsl2ansi16\n  - hsl2ansi\n  - hsv2ansi16\n  - hsv2ansi\n  - hwb2ansi16\n  - hwb2ansi\n  - cmyk2ansi16\n  - cmyk2ansi\n  - keyword2ansi16\n  - keyword2ansi\n  - ansi162rgb\n  - ansi162hsl\n  - ansi162hsv\n  - ansi162hwb\n  - ansi162cmyk\n  - ansi162keyword\n  - ansi2rgb\n  - ansi2hsl\n  - ansi2hsv\n  - ansi2hwb\n  - ansi2cmyk\n  - ansi2keyword\n([#18](https://github.com/harthur/color-convert/pull/18))\n\n# 0.5.3 - 2015-06-02\n\n- Fixed: hsl2hsv does not return `NaN` anymore when using `[0,0,0]`\n([#15](https://github.com/harthur/color-convert/issues/15))\n\n---\n\nCheck out commit logs for older releases\n/route.js\bconst conversions = require('./conversions');\n\n/*\n\tThis function routes a model to all other models.\n\n\tall functions that are routed have a property `.conversion` attached\n\tto the returned synthetic function. This property is an array\n\tof strings, each with the steps in between the 'from' and 'to'\n\tcolor models (inclusive).\n\n\tconversions that are not possible simply are not included.\n*/\n\nfunction buildGraph() {\n\tconst graph = {};\n\t// https://jsperf.com/object-keys-vs-for-in-with-closure/3\n\tconst models = Object.keys(conversions);\n\n\tfor (let len = models.length, i = 0; i < len; i++) {\n\t\tgraph[models[i]] = {\n\t\t\t// http://jsperf.com/1-vs-infinity\n\t\t\t// micro-opt, but this is simple.\n\t\t\tdistance: -1,\n\t\t\tparent: null\n\t\t};\n\t}\n\n\treturn graph;\n}\n\n// https://en.wikipedia.org/wiki/Breadth-first_search\nfunction deriveBFS(fromModel) {\n\tconst graph = buildGraph();\n\tconst queue = [fromModel]; // Unshift -> queue -> pop\n\n\tgraph[fromModel].distance = 0;\n\n\twhile (queue.length) {\n\t\tconst current = queue.pop();\n\t\tconst adjacents = Object.keys(conversions[current]);\n\n\t\tfor (let len = adjacents.length, i = 0; i < len; i++) {\n\t\t\tconst adjacent = adjacents[i];\n\t\t\tconst node = graph[adjacent];\n\n\t\t\tif (node.distance === -1) {\n\t\t\t\tnode.distance = graph[current].distance + 1;\n\t\t\t\tnode.parent = current;\n\t\t\t\tqueue.unshift(adjacent);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn graph;\n}\n\nfunction link(from, to) {\n\treturn function (args) {\n\t\treturn to(from(args));\n\t};\n}\n\nfunction wrapConversion(toModel, graph) {\n\tconst path = [graph[toModel].parent, toModel];\n\tlet fn = conversions[graph[toModel].parent][toModel];\n\n\tlet cur = graph[toModel].parent;\n\twhile (graph[cur].parent) {\n\t\tpath.unshift(graph[cur].parent);\n\t\tfn = link(conversions[graph[cur].parent][cur], fn);\n\t\tcur = graph[cur].parent;\n\t}\n\n\tfn.conversion = path;\n\treturn fn;\n}\n\nmodule.exports = function (fromModel) {\n\tconst graph = deriveBFS(fromModel);\n\tconst conversion = {};\n\n\tconst models = Object.keys(graph);\n\tfor (let len = models.length, i = 0; i < len; i++) {\n\t\tconst toModel = models[i];\n\t\tconst node = graph[toModel];\n\n\t\tif (node.parent === null) {\n\t\t\t// No possible conversion, or this node is the source model.\n\t\t\tcontinue;\n\t\t}\n\n\t\tconversion[toModel] = wrapConversion(toModel, graph);\n\t}\n\n\treturn conversion;\n};\n\n/package.json\u0003;{\n  \"name\": \"color-convert\",\n  \"description\": \"Plain color conversion functions\",\n  \"version\": \"2.0.1\",\n  \"author\": \"Heather Arthur <fayearthur@gmail.com>\",\n  \"license\": \"MIT\",\n  \"repository\": \"Qix-/color-convert\",\n  \"scripts\": {\n    \"pretest\": \"xo\",\n    \"test\": \"node test/basic.js\"\n  },\n  \"engines\": {\n    \"node\": \">=7.0.0\"\n  },\n  \"keywords\": [\n    \"color\",\n    \"colour\",\n    \"convert\",\n    \"converter\",\n    \"conversion\",\n    \"rgb\",\n    \"hsl\",\n    \"hsv\",\n    \"hwb\",\n    \"cmyk\",\n    \"ansi\",\n    \"ansi16\"\n  ],\n  \"files\": [\n    \"index.js\",\n    \"conversions.js\",\n    \"route.js\"\n  ],\n  \"xo\": {\n    \"rules\": {\n      \"default-case\": 0,\n      \"no-inline-comments\": 0,\n      \"operator-linebreak\": 0\n    }\n  },\n  \"devDependencies\": {\n    \"chalk\": \"^2.4.2\",\n    \"xo\": \"^0.24.0\"\n  },\n  \"dependencies\": {\n    \"color-name\": \"~1.1.4\"\n  }\n}\n/LICENSE\u0004?Copyright (c) 2011-2016 Heather Arthur <fayearthur@gmail.com>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n/README.md\u000b%# color-convert\n\n[![Build Status](https://travis-ci.org/Qix-/color-convert.svg?branch=master)](https://travis-ci.org/Qix-/color-convert)\n\nColor-convert is a color conversion library for JavaScript and node.\nIt converts all ways between `rgb`, `hsl`, `hsv`, `hwb`, `cmyk`, `ansi`, `ansi16`, `hex` strings, and CSS `keyword`s (will round to closest):\n\n```js\nvar convert = require('color-convert');\n\nconvert.rgb.hsl(140, 200, 100);             // [96, 48, 59]\nconvert.keyword.rgb('blue');                // [0, 0, 255]\n\nvar rgbChannels = convert.rgb.channels;     // 3\nvar cmykChannels = convert.cmyk.channels;   // 4\nvar ansiChannels = convert.ansi16.channels; // 1\n```\n\n# Install\n\n```console\n$ npm install color-convert\n```\n\n# API\n\nSimply get the property of the _from_ and _to_ conversion that you're looking for.\n\nAll functions have a rounded and unrounded variant. By default, return values are rounded. To get the unrounded (raw) results, simply tack on `.raw` to the function.\n\nAll 'from' functions have a hidden property called `.channels` that indicates the number of channels the function expects (not including alpha).\n\n```js\nvar convert = require('color-convert');\n\n// Hex to LAB\nconvert.hex.lab('DEADBF');         // [ 76, 21, -2 ]\nconvert.hex.lab.raw('DEADBF');     // [ 75.56213190997677, 20.653827952644754, -2.290532499330533 ]\n\n// RGB to CMYK\nconvert.rgb.cmyk(167, 255, 4);     // [ 35, 0, 98, 0 ]\nconvert.rgb.cmyk.raw(167, 255, 4); // [ 34.509803921568626, 0, 98.43137254901961, 0 ]\n```\n\n### Arrays\nAll functions that accept multiple arguments also support passing an array.\n\nNote that this does **not** apply to functions that convert from a color that only requires one value (e.g. `keyword`, `ansi256`, `hex`, etc.)\n\n```js\nvar convert = require('color-convert');\n\nconvert.rgb.hex(123, 45, 67);      // '7B2D43'\nconvert.rgb.hex([123, 45, 67]);    // '7B2D43'\n```\n\n## Routing\n\nConversions that don't have an _explicitly_ defined conversion (in [conversions.js](conversions.js)), but can be converted by means of sub-conversions (e.g. XYZ -> **RGB** -> CMYK), are automatically routed together. This allows just about any color model supported by `color-convert` to be converted to any other model, so long as a sub-conversion path exists. This is also true for conversions requiring more than one step in between (e.g. LCH -> **LAB** -> **XYZ** -> **RGB** -> Hex).\n\nKeep in mind that extensive conversions _may_ result in a loss of precision, and exist only to be complete. For a list of \"direct\" (single-step) conversions, see [conversions.js](conversions.js).\n\n# Contribute\n\nIf there is a new model you would like to support, or want to add a direct conversion between two existing models, please send us a pull request.\n\n# License\nCopyright &copy; 2011-2016, Heather Arthur and Josh Junon. Licensed under the [MIT License](LICENSE).\n/conversions.jsB/* MIT license */\n/* eslint-disable no-mixed-operators */\nconst cssKeywords = require('color-name');\n\n// NOTE: conversions should only return primitive values (i.e. arrays, or\n//       values that give correct `typeof` results).\n//       do not use box values types (i.e. Number(), String(), etc.)\n\nconst reverseKeywords = {};\nfor (const key of Object.keys(cssKeywords)) {\n\treverseKeywords[cssKeywords[key]] = key;\n}\n\nconst convert = {\n\trgb: {channels: 3, labels: 'rgb'},\n\thsl: {channels: 3, labels: 'hsl'},\n\thsv: {channels: 3, labels: 'hsv'},\n\thwb: {channels: 3, labels: 'hwb'},\n\tcmyk: {channels: 4, labels: 'cmyk'},\n\txyz: {channels: 3, labels: 'xyz'},\n\tlab: {channels: 3, labels: 'lab'},\n\tlch: {channels: 3, labels: 'lch'},\n\thex: {channels: 1, labels: ['hex']},\n\tkeyword: {channels: 1, labels: ['keyword']},\n\tansi16: {channels: 1, labels: ['ansi16']},\n\tansi256: {channels: 1, labels: ['ansi256']},\n\thcg: {channels: 3, labels: ['h', 'c', 'g']},\n\tapple: {channels: 3, labels: ['r16', 'g16', 'b16']},\n\tgray: {channels: 1, labels: ['gray']}\n};\n\nmodule.exports = convert;\n\n// Hide .channels and .labels properties\nfor (const model of Object.keys(convert)) {\n\tif (!('channels' in convert[model])) {\n\t\tthrow new Error('missing channels property: ' + model);\n\t}\n\n\tif (!('labels' in convert[model])) {\n\t\tthrow new Error('missing channel labels property: ' + model);\n\t}\n\n\tif (convert[model].labels.length !== convert[model].channels) {\n\t\tthrow new Error('channel and label counts mismatch: ' + model);\n\t}\n\n\tconst {channels, labels} = convert[model];\n\tdelete convert[model].channels;\n\tdelete convert[model].labels;\n\tObject.defineProperty(convert[model], 'channels', {value: channels});\n\tObject.defineProperty(convert[model], 'labels', {value: labels});\n}\n\nconvert.rgb.hsl = function (rgb) {\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\tconst min = Math.min(r, g, b);\n\tconst max = Math.max(r, g, b);\n\tconst delta = max - min;\n\tlet h;\n\tlet s;\n\n\tif (max === min) {\n\t\th = 0;\n\t} else if (r === max) {\n\t\th = (g - b) / delta;\n\t} else if (g === max) {\n\t\th = 2 + (b - r) / delta;\n\t} else if (b === max) {\n\t\th = 4 + (r - g) / delta;\n\t}\n\n\th = Math.min(h * 60, 360);\n\n\tif (h < 0) {\n\t\th += 360;\n\t}\n\n\tconst l = (min + max) / 2;\n\n\tif (max === min) {\n\t\ts = 0;\n\t} else if (l <= 0.5) {\n\t\ts = delta / (max + min);\n\t} else {\n\t\ts = delta / (2 - max - min);\n\t}\n\n\treturn [h, s * 100, l * 100];\n};\n\nconvert.rgb.hsv = function (rgb) {\n\tlet rdif;\n\tlet gdif;\n\tlet bdif;\n\tlet h;\n\tlet s;\n\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\tconst v = Math.max(r, g, b);\n\tconst diff = v - Math.min(r, g, b);\n\tconst diffc = function (c) {\n\t\treturn (v - c) / 6 / diff + 1 / 2;\n\t};\n\n\tif (diff === 0) {\n\t\th = 0;\n\t\ts = 0;\n\t} else {\n\t\ts = diff / v;\n\t\trdif = diffc(r);\n\t\tgdif = diffc(g);\n\t\tbdif = diffc(b);\n\n\t\tif (r === v) {\n\t\t\th = bdif - gdif;\n\t\t} else if (g === v) {\n\t\t\th = (1 / 3) + rdif - bdif;\n\t\t} else if (b === v) {\n\t\t\th = (2 / 3) + gdif - rdif;\n\t\t}\n\n\t\tif (h < 0) {\n\t\t\th += 1;\n\t\t} else if (h > 1) {\n\t\t\th -= 1;\n\t\t}\n\t}\n\n\treturn [\n\t\th * 360,\n\t\ts * 100,\n\t\tv * 100\n\t];\n};\n\nconvert.rgb.hwb = function (rgb) {\n\tconst r = rgb[0];\n\tconst g = rgb[1];\n\tlet b = rgb[2];\n\tconst h = convert.rgb.hsl(rgb)[0];\n\tconst w = 1 / 255 * Math.min(r, Math.min(g, b));\n\n\tb = 1 - 1 / 255 * Math.max(r, Math.max(g, b));\n\n\treturn [h, w * 100, b * 100];\n};\n\nconvert.rgb.cmyk = function (rgb) {\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\n\tconst k = Math.min(1 - r, 1 - g, 1 - b);\n\tconst c = (1 - r - k) / (1 - k) || 0;\n\tconst m = (1 - g - k) / (1 - k) || 0;\n\tconst y = (1 - b - k) / (1 - k) || 0;\n\n\treturn [c * 100, m * 100, y * 100, k * 100];\n};\n\nfunction comparativeDistance(x, y) {\n\t/*\n\t\tSee https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance\n\t*/\n\treturn (\n\t\t((x[0] - y[0]) ** 2) +\n\t\t((x[1] - y[1]) ** 2) +\n\t\t((x[2] - y[2]) ** 2)\n\t);\n}\n\nconvert.rgb.keyword = function (rgb) {\n\tconst reversed = reverseKeywords[rgb];\n\tif (reversed) {\n\t\treturn reversed;\n\t}\n\n\tlet currentClosestDistance = Infinity;\n\tlet currentClosestKeyword;\n\n\tfor (const keyword of Object.keys(cssKeywords)) {\n\t\tconst value = cssKeywords[keyword];\n\n\t\t// Compute comparative distance\n\t\tconst distance = comparativeDistance(rgb, value);\n\n\t\t// Check if its less, if so set as closest\n\t\tif (distance < currentClosestDistance) {\n\t\t\tcurrentClosestDistance = distance;\n\t\t\tcurrentClosestKeyword = keyword;\n\t\t}\n\t}\n\n\treturn currentClosestKeyword;\n};\n\nconvert.keyword.rgb = function (keyword) {\n\treturn cssKeywords[keyword];\n};\n\nconvert.rgb.xyz = function (rgb) {\n\tlet r = rgb[0] / 255;\n\tlet g = rgb[1] / 255;\n\tlet b = rgb[2] / 255;\n\n\t// Assume sRGB\n\tr = r > 0.04045 ? (((r + 0.055) / 1.055) ** 2.4) : (r / 12.92);\n\tg = g > 0.04045 ? (((g + 0.055) / 1.055) ** 2.4) : (g / 12.92);\n\tb = b > 0.04045 ? (((b + 0.055) / 1.055) ** 2.4) : (b / 12.92);\n\n\tconst x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805);\n\tconst y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722);\n\tconst z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505);\n\n\treturn [x * 100, y * 100, z * 100];\n};\n\nconvert.rgb.lab = function (rgb) {\n\tconst xyz = convert.rgb.xyz(rgb);\n\tlet x = xyz[0];\n\tlet y = xyz[1];\n\tlet z = xyz[2];\n\n\tx /= 95.047;\n\ty /= 100;\n\tz /= 108.883;\n\n\tx = x > 0.008856 ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116);\n\ty = y > 0.008856 ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116);\n\tz = z > 0.008856 ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116);\n\n\tconst l = (116 * y) - 16;\n\tconst a = 500 * (x - y);\n\tconst b = 200 * (y - z);\n\n\treturn [l, a, b];\n};\n\nconvert.hsl.rgb = function (hsl) {\n\tconst h = hsl[0] / 360;\n\tconst s = hsl[1] / 100;\n\tconst l = hsl[2] / 100;\n\tlet t2;\n\tlet t3;\n\tlet val;\n\n\tif (s === 0) {\n\t\tval = l * 255;\n\t\treturn [val, val, val];\n\t}\n\n\tif (l < 0.5) {\n\t\tt2 = l * (1 + s);\n\t} else {\n\t\tt2 = l + s - l * s;\n\t}\n\n\tconst t1 = 2 * l - t2;\n\n\tconst rgb = [0, 0, 0];\n\tfor (let i = 0; i < 3; i++) {\n\t\tt3 = h + 1 / 3 * -(i - 1);\n\t\tif (t3 < 0) {\n\t\t\tt3++;\n\t\t}\n\n\t\tif (t3 > 1) {\n\t\t\tt3--;\n\t\t}\n\n\t\tif (6 * t3 < 1) {\n\t\t\tval = t1 + (t2 - t1) * 6 * t3;\n\t\t} else if (2 * t3 < 1) {\n\t\t\tval = t2;\n\t\t} else if (3 * t3 < 2) {\n\t\t\tval = t1 + (t2 - t1) * (2 / 3 - t3) * 6;\n\t\t} else {\n\t\t\tval = t1;\n\t\t}\n\n\t\trgb[i] = val * 255;\n\t}\n\n\treturn rgb;\n};\n\nconvert.hsl.hsv = function (hsl) {\n\tconst h = hsl[0];\n\tlet s = hsl[1] / 100;\n\tlet l = hsl[2] / 100;\n\tlet smin = s;\n\tconst lmin = Math.max(l, 0.01);\n\n\tl *= 2;\n\ts *= (l <= 1) ? l : 2 - l;\n\tsmin *= lmin <= 1 ? lmin : 2 - lmin;\n\tconst v = (l + s) / 2;\n\tconst sv = l === 0 ? (2 * smin) / (lmin + smin) : (2 * s) / (l + s);\n\n\treturn [h, sv * 100, v * 100];\n};\n\nconvert.hsv.rgb = function (hsv) {\n\tconst h = hsv[0] / 60;\n\tconst s = hsv[1] / 100;\n\tlet v = hsv[2] / 100;\n\tconst hi = Math.floor(h) % 6;\n\n\tconst f = h - Math.floor(h);\n\tconst p = 255 * v * (1 - s);\n\tconst q = 255 * v * (1 - (s * f));\n\tconst t = 255 * v * (1 - (s * (1 - f)));\n\tv *= 255;\n\n\tswitch (hi) {\n\t\tcase 0:\n\t\t\treturn [v, t, p];\n\t\tcase 1:\n\t\t\treturn [q, v, p];\n\t\tcase 2:\n\t\t\treturn [p, v, t];\n\t\tcase 3:\n\t\t\treturn [p, q, v];\n\t\tcase 4:\n\t\t\treturn [t, p, v];\n\t\tcase 5:\n\t\t\treturn [v, p, q];\n\t}\n};\n\nconvert.hsv.hsl = function (hsv) {\n\tconst h = hsv[0];\n\tconst s = hsv[1] / 100;\n\tconst v = hsv[2] / 100;\n\tconst vmin = Math.max(v, 0.01);\n\tlet sl;\n\tlet l;\n\n\tl = (2 - s) * v;\n\tconst lmin = (2 - s) * vmin;\n\tsl = s * vmin;\n\tsl /= (lmin <= 1) ? lmin : 2 - lmin;\n\tsl = sl || 0;\n\tl /= 2;\n\n\treturn [h, sl * 100, l * 100];\n};\n\n// http://dev.w3.org/csswg/css-color/#hwb-to-rgb\nconvert.hwb.rgb = function (hwb) {\n\tconst h = hwb[0] / 360;\n\tlet wh = hwb[1] / 100;\n\tlet bl = hwb[2] / 100;\n\tconst ratio = wh + bl;\n\tlet f;\n\n\t// Wh + bl cant be > 1\n\tif (ratio > 1) {\n\t\twh /= ratio;\n\t\tbl /= ratio;\n\t}\n\n\tconst i = Math.floor(6 * h);\n\tconst v = 1 - bl;\n\tf = 6 * h - i;\n\n\tif ((i & 0x01) !== 0) {\n\t\tf = 1 - f;\n\t}\n\n\tconst n = wh + f * (v - wh); // Linear interpolation\n\n\tlet r;\n\tlet g;\n\tlet b;\n\t/* eslint-disable max-statements-per-line,no-multi-spaces */\n\tswitch (i) {\n\t\tdefault:\n\t\tcase 6:\n\t\tcase 0: r = v;  g = n;  b = wh; break;\n\t\tcase 1: r = n;  g = v;  b = wh; break;\n\t\tcase 2: r = wh; g = v;  b = n; break;\n\t\tcase 3: r = wh; g = n;  b = v; break;\n\t\tcase 4: r = n;  g = wh; b = v; break;\n\t\tcase 5: r = v;  g = wh; b = n; break;\n\t}\n\t/* eslint-enable max-statements-per-line,no-multi-spaces */\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.cmyk.rgb = function (cmyk) {\n\tconst c = cmyk[0] / 100;\n\tconst m = cmyk[1] / 100;\n\tconst y = cmyk[2] / 100;\n\tconst k = cmyk[3] / 100;\n\n\tconst r = 1 - Math.min(1, c * (1 - k) + k);\n\tconst g = 1 - Math.min(1, m * (1 - k) + k);\n\tconst b = 1 - Math.min(1, y * (1 - k) + k);\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.xyz.rgb = function (xyz) {\n\tconst x = xyz[0] / 100;\n\tconst y = xyz[1] / 100;\n\tconst z = xyz[2] / 100;\n\tlet r;\n\tlet g;\n\tlet b;\n\n\tr = (x * 3.2406) + (y * -1.5372) + (z * -0.4986);\n\tg = (x * -0.9689) + (y * 1.8758) + (z * 0.0415);\n\tb = (x * 0.0557) + (y * -0.2040) + (z * 1.0570);\n\n\t// Assume sRGB\n\tr = r > 0.0031308\n\t\t? ((1.055 * (r ** (1.0 / 2.4))) - 0.055)\n\t\t: r * 12.92;\n\n\tg = g > 0.0031308\n\t\t? ((1.055 * (g ** (1.0 / 2.4))) - 0.055)\n\t\t: g * 12.92;\n\n\tb = b > 0.0031308\n\t\t? ((1.055 * (b ** (1.0 / 2.4))) - 0.055)\n\t\t: b * 12.92;\n\n\tr = Math.min(Math.max(0, r), 1);\n\tg = Math.min(Math.max(0, g), 1);\n\tb = Math.min(Math.max(0, b), 1);\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.xyz.lab = function (xyz) {\n\tlet x = xyz[0];\n\tlet y = xyz[1];\n\tlet z = xyz[2];\n\n\tx /= 95.047;\n\ty /= 100;\n\tz /= 108.883;\n\n\tx = x > 0.008856 ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116);\n\ty = y > 0.008856 ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116);\n\tz = z > 0.008856 ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116);\n\n\tconst l = (116 * y) - 16;\n\tconst a = 500 * (x - y);\n\tconst b = 200 * (y - z);\n\n\treturn [l, a, b];\n};\n\nconvert.lab.xyz = function (lab) {\n\tconst l = lab[0];\n\tconst a = lab[1];\n\tconst b = lab[2];\n\tlet x;\n\tlet y;\n\tlet z;\n\n\ty = (l + 16) / 116;\n\tx = a / 500 + y;\n\tz = y - b / 200;\n\n\tconst y2 = y ** 3;\n\tconst x2 = x ** 3;\n\tconst z2 = z ** 3;\n\ty = y2 > 0.008856 ? y2 : (y - 16 / 116) / 7.787;\n\tx = x2 > 0.008856 ? x2 : (x - 16 / 116) / 7.787;\n\tz = z2 > 0.008856 ? z2 : (z - 16 / 116) / 7.787;\n\n\tx *= 95.047;\n\ty *= 100;\n\tz *= 108.883;\n\n\treturn [x, y, z];\n};\n\nconvert.lab.lch = function (lab) {\n\tconst l = lab[0];\n\tconst a = lab[1];\n\tconst b = lab[2];\n\tlet h;\n\n\tconst hr = Math.atan2(b, a);\n\th = hr * 360 / 2 / Math.PI;\n\n\tif (h < 0) {\n\t\th += 360;\n\t}\n\n\tconst c = Math.sqrt(a * a + b * b);\n\n\treturn [l, c, h];\n};\n\nconvert.lch.lab = function (lch) {\n\tconst l = lch[0];\n\tconst c = lch[1];\n\tconst h = lch[2];\n\n\tconst hr = h / 360 * 2 * Math.PI;\n\tconst a = c * Math.cos(hr);\n\tconst b = c * Math.sin(hr);\n\n\treturn [l, a, b];\n};\n\nconvert.rgb.ansi16 = function (args, saturation = null) {\n\tconst [r, g, b] = args;\n\tlet value = saturation === null ? convert.rgb.hsv(args)[2] : saturation; // Hsv -> ansi16 optimization\n\n\tvalue = Math.round(value / 50);\n\n\tif (value === 0) {\n\t\treturn 30;\n\t}\n\n\tlet ansi = 30\n\t\t+ ((Math.round(b / 255) << 2)\n\t\t| (Math.round(g / 255) << 1)\n\t\t| Math.round(r / 255));\n\n\tif (value === 2) {\n\t\tansi += 60;\n\t}\n\n\treturn ansi;\n};\n\nconvert.hsv.ansi16 = function (args) {\n\t// Optimization here; we already know the value and don't need to get\n\t// it converted for us.\n\treturn convert.rgb.ansi16(convert.hsv.rgb(args), args[2]);\n};\n\nconvert.rgb.ansi256 = function (args) {\n\tconst r = args[0];\n\tconst g = args[1];\n\tconst b = args[2];\n\n\t// We use the extended greyscale palette here, with the exception of\n\t// black and white. normal palette only has 4 greyscale shades.\n\tif (r === g && g === b) {\n\t\tif (r < 8) {\n\t\t\treturn 16;\n\t\t}\n\n\t\tif (r > 248) {\n\t\t\treturn 231;\n\t\t}\n\n\t\treturn Math.round(((r - 8) / 247) * 24) + 232;\n\t}\n\n\tconst ansi = 16\n\t\t+ (36 * Math.round(r / 255 * 5))\n\t\t+ (6 * Math.round(g / 255 * 5))\n\t\t+ Math.round(b / 255 * 5);\n\n\treturn ansi;\n};\n\nconvert.ansi16.rgb = function (args) {\n\tlet color = args % 10;\n\n\t// Handle greyscale\n\tif (color === 0 || color === 7) {\n\t\tif (args > 50) {\n\t\t\tcolor += 3.5;\n\t\t}\n\n\t\tcolor = color / 10.5 * 255;\n\n\t\treturn [color, color, color];\n\t}\n\n\tconst mult = (~~(args > 50) + 1) * 0.5;\n\tconst r = ((color & 1) * mult) * 255;\n\tconst g = (((color >> 1) & 1) * mult) * 255;\n\tconst b = (((color >> 2) & 1) * mult) * 255;\n\n\treturn [r, g, b];\n};\n\nconvert.ansi256.rgb = function (args) {\n\t// Handle greyscale\n\tif (args >= 232) {\n\t\tconst c = (args - 232) * 10 + 8;\n\t\treturn [c, c, c];\n\t}\n\n\targs -= 16;\n\n\tlet rem;\n\tconst r = Math.floor(args / 36) / 5 * 255;\n\tconst g = Math.floor((rem = args % 36) / 6) / 5 * 255;\n\tconst b = (rem % 6) / 5 * 255;\n\n\treturn [r, g, b];\n};\n\nconvert.rgb.hex = function (args) {\n\tconst integer = ((Math.round(args[0]) & 0xFF) << 16)\n\t\t+ ((Math.round(args[1]) & 0xFF) << 8)\n\t\t+ (Math.round(args[2]) & 0xFF);\n\n\tconst string = integer.toString(16).toUpperCase();\n\treturn '000000'.substring(string.length) + string;\n};\n\nconvert.hex.rgb = function (args) {\n\tconst match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);\n\tif (!match) {\n\t\treturn [0, 0, 0];\n\t}\n\n\tlet colorString = match[0];\n\n\tif (match[0].length === 3) {\n\t\tcolorString = colorString.split('').map(char => {\n\t\t\treturn char + char;\n\t\t}).join('');\n\t}\n\n\tconst integer = parseInt(colorString, 16);\n\tconst r = (integer >> 16) & 0xFF;\n\tconst g = (integer >> 8) & 0xFF;\n\tconst b = integer & 0xFF;\n\n\treturn [r, g, b];\n};\n\nconvert.rgb.hcg = function (rgb) {\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\tconst max = Math.max(Math.max(r, g), b);\n\tconst min = Math.min(Math.min(r, g), b);\n\tconst chroma = (max - min);\n\tlet grayscale;\n\tlet hue;\n\n\tif (chroma < 1) {\n\t\tgrayscale = min / (1 - chroma);\n\t} else {\n\t\tgrayscale = 0;\n\t}\n\n\tif (chroma <= 0) {\n\t\thue = 0;\n\t} else\n\tif (max === r) {\n\t\thue = ((g - b) / chroma) % 6;\n\t} else\n\tif (max === g) {\n\t\thue = 2 + (b - r) / chroma;\n\t} else {\n\t\thue = 4 + (r - g) / chroma;\n\t}\n\n\thue /= 6;\n\thue %= 1;\n\n\treturn [hue * 360, chroma * 100, grayscale * 100];\n};\n\nconvert.hsl.hcg = function (hsl) {\n\tconst s = hsl[1] / 100;\n\tconst l = hsl[2] / 100;\n\n\tconst c = l < 0.5 ? (2.0 * s * l) : (2.0 * s * (1.0 - l));\n\n\tlet f = 0;\n\tif (c < 1.0) {\n\t\tf = (l - 0.5 * c) / (1.0 - c);\n\t}\n\n\treturn [hsl[0], c * 100, f * 100];\n};\n\nconvert.hsv.hcg = function (hsv) {\n\tconst s = hsv[1] / 100;\n\tconst v = hsv[2] / 100;\n\n\tconst c = s * v;\n\tlet f = 0;\n\n\tif (c < 1.0) {\n\t\tf = (v - c) / (1 - c);\n\t}\n\n\treturn [hsv[0], c * 100, f * 100];\n};\n\nconvert.hcg.rgb = function (hcg) {\n\tconst h = hcg[0] / 360;\n\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\n\tif (c === 0.0) {\n\t\treturn [g * 255, g * 255, g * 255];\n\t}\n\n\tconst pure = [0, 0, 0];\n\tconst hi = (h % 1) * 6;\n\tconst v = hi % 1;\n\tconst w = 1 - v;\n\tlet mg = 0;\n\n\t/* eslint-disable max-statements-per-line */\n\tswitch (Math.floor(hi)) {\n\t\tcase 0:\n\t\t\tpure[0] = 1; pure[1] = v; pure[2] = 0; break;\n\t\tcase 1:\n\t\t\tpure[0] = w; pure[1] = 1; pure[2] = 0; break;\n\t\tcase 2:\n\t\t\tpure[0] = 0; pure[1] = 1; pure[2] = v; break;\n\t\tcase 3:\n\t\t\tpure[0] = 0; pure[1] = w; pure[2] = 1; break;\n\t\tcase 4:\n\t\t\tpure[0] = v; pure[1] = 0; pure[2] = 1; break;\n\t\tdefault:\n\t\t\tpure[0] = 1; pure[1] = 0; pure[2] = w;\n\t}\n\t/* eslint-enable max-statements-per-line */\n\n\tmg = (1.0 - c) * g;\n\n\treturn [\n\t\t(c * pure[0] + mg) * 255,\n\t\t(c * pure[1] + mg) * 255,\n\t\t(c * pure[2] + mg) * 255\n\t];\n};\n\nconvert.hcg.hsv = function (hcg) {\n\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\n\tconst v = c + g * (1.0 - c);\n\tlet f = 0;\n\n\tif (v > 0.0) {\n\t\tf = c / v;\n\t}\n\n\treturn [hcg[0], f * 100, v * 100];\n};\n\nconvert.hcg.hsl = function (hcg) {\n\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\n\tconst l = g * (1.0 - c) + 0.5 * c;\n\tlet s = 0;\n\n\tif (l > 0.0 && l < 0.5) {\n\t\ts = c / (2 * l);\n\t} else\n\tif (l >= 0.5 && l < 1.0) {\n\t\ts = c / (2 * (1 - l));\n\t}\n\n\treturn [hcg[0], s * 100, l * 100];\n};\n\nconvert.hcg.hwb = function (hcg) {\n\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\tconst v = c + g * (1.0 - c);\n\treturn [hcg[0], (v - c) * 100, (1 - v) * 100];\n};\n\nconvert.hwb.hcg = function (hwb) {\n\tconst w = hwb[1] / 100;\n\tconst b = hwb[2] / 100;\n\tconst v = 1 - b;\n\tconst c = v - w;\n\tlet g = 0;\n\n\tif (c < 1) {\n\t\tg = (v - c) / (1 - c);\n\t}\n\n\treturn [hwb[0], c * 100, g * 100];\n};\n\nconvert.apple.rgb = function (apple) {\n\treturn [(apple[0] / 65535) * 255, (apple[1] / 65535) * 255, (apple[2] / 65535) * 255];\n};\n\nconvert.rgb.apple = function (rgb) {\n\treturn [(rgb[0] / 255) * 65535, (rgb[1] / 255) * 65535, (rgb[2] / 255) * 65535];\n};\n\nconvert.gray.rgb = function (args) {\n\treturn [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255];\n};\n\nconvert.gray.hsl = function (args) {\n\treturn [0, 0, args[0]];\n};\n\nconvert.gray.hsv = convert.gray.hsl;\n\nconvert.gray.hwb = function (gray) {\n\treturn [0, 100, gray[0]];\n};\n\nconvert.gray.cmyk = function (gray) {\n\treturn [0, 0, 0, gray[0]];\n};\n\nconvert.gray.lab = function (gray) {\n\treturn [gray[0], 0, 0];\n};\n\nconvert.gray.hex = function (gray) {\n\tconst val = Math.round(gray[0] / 100 * 255) & 0xFF;\n\tconst integer = (val << 16) + (val << 8) + val;\n\n\tconst string = integer.toString(16).toUpperCase();\n\treturn '000000'.substring(string.length) + string;\n};\n\nconvert.rgb.gray = function (rgb) {\n\tconst val = (rgb[0] + rgb[1] + rgb[2]) / 3;\n\treturn [val / 255 * 100];\n};\n/index.js\u0006const conversions = require('./conversions');\nconst route = require('./route');\n\nconst convert = {};\n\nconst models = Object.keys(conversions);\n\nfunction wrapRaw(fn) {\n\tconst wrappedFn = function (...args) {\n\t\tconst arg0 = args[0];\n\t\tif (arg0 === undefined || arg0 === null) {\n\t\t\treturn arg0;\n\t\t}\n\n\t\tif (arg0.length > 1) {\n\t\t\targs = arg0;\n\t\t}\n\n\t\treturn fn(args);\n\t};\n\n\t// Preserve .conversion property if there is one\n\tif ('conversion' in fn) {\n\t\twrappedFn.conversion = fn.conversion;\n\t}\n\n\treturn wrappedFn;\n}\n\nfunction wrapRounded(fn) {\n\tconst wrappedFn = function (...args) {\n\t\tconst arg0 = args[0];\n\n\t\tif (arg0 === undefined || arg0 === null) {\n\t\t\treturn arg0;\n\t\t}\n\n\t\tif (arg0.length > 1) {\n\t\t\targs = arg0;\n\t\t}\n\n\t\tconst result = fn(args);\n\n\t\t// We're assuming the result is an array here.\n\t\t// see notice in conversions.js; don't use box types\n\t\t// in conversion functions.\n\t\tif (typeof result === 'object') {\n\t\t\tfor (let len = result.length, i = 0; i < len; i++) {\n\t\t\t\tresult[i] = Math.round(result[i]);\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t};\n\n\t// Preserve .conversion property if there is one\n\tif ('conversion' in fn) {\n\t\twrappedFn.conversion = fn.conversion;\n\t}\n\n\treturn wrappedFn;\n}\n\nmodels.forEach(fromModel => {\n\tconvert[fromModel] = {};\n\n\tObject.defineProperty(convert[fromModel], 'channels', {value: conversions[fromModel].channels});\n\tObject.defineProperty(convert[fromModel], 'labels', {value: conversions[fromModel].labels});\n\n\tconst routes = route(fromModel);\n\tconst routeModels = Object.keys(routes);\n\n\trouteModels.forEach(toModel => {\n\t\tconst fn = routes[toModel];\n\n\t\tconvert[fromModel][toModel] = wrapRounded(fn);\n\t\tconvert[fromModel][toModel].raw = wrapRaw(fn);\n\t});\n});\n\nmodule.exports = convert;\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/Y29sb3ItbmFtZUAxLjEuMw==",
    "content": "/LICENSE\u0004=The MIT License (MIT)\r\nCopyright (c) 2015 Dmitry Ivanov\r\n\r\nPermission 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:\r\n\r\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\r\n\r\nTHE 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./package.json\u0002+{\n  \"name\": \"color-name\",\n  \"version\": \"1.1.3\",\n  \"description\": \"A list of color names and its values\",\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"test\": \"node test.js\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git@github.com:dfcreative/color-name.git\"\n  },\n  \"keywords\": [\n    \"color-name\",\n    \"color\",\n    \"color-keyword\",\n    \"keyword\"\n  ],\n  \"author\": \"DY <dfcreative@gmail.com>\",\n  \"license\": \"MIT\",\n  \"bugs\": {\n    \"url\": \"https://github.com/dfcreative/color-name/issues\"\n  },\n  \"homepage\": \"https://github.com/dfcreative/color-name\"\n}\n/.npmignore\u0005l//this will affect all the git repos\r\ngit config --global core.excludesfile ~/.gitignore\r\n\r\n\r\n//update files since .ignore won't if already tracked\r\ngit rm --cached <file>\r\n\r\n# Compiled source #\r\n###################\r\n*.com\r\n*.class\r\n*.dll\r\n*.exe\r\n*.o\r\n*.so\r\n\r\n# Packages #\r\n############\r\n# it's better to unpack these files and commit the raw source\r\n# git has its own built in compression methods\r\n*.7z\r\n*.dmg\r\n*.gz\r\n*.iso\r\n*.jar\r\n*.rar\r\n*.tar\r\n*.zip\r\n\r\n# Logs and databases #\r\n######################\r\n*.log\r\n*.sql\r\n*.sqlite\r\n\r\n# OS generated files #\r\n######################\r\n.DS_Store\r\n.DS_Store?\r\n._*\r\n.Spotlight-V100\r\n.Trashes\r\n# Icon?\r\nehthumbs.db\r\nThumbs.db\r\n.cache\r\n.project\r\n.settings\r\n.tmproj\r\n*.esproj\r\nnbproject\r\n\r\n# Numerous always-ignore extensions #\r\n#####################################\r\n*.diff\r\n*.err\r\n*.orig\r\n*.rej\r\n*.swn\r\n*.swo\r\n*.swp\r\n*.vi\r\n*~\r\n*.sass-cache\r\n*.grunt\r\n*.tmp\r\n\r\n# Dreamweaver added files #\r\n###########################\r\n_notes\r\ndwsync.xml\r\n\r\n# Komodo #\r\n###########################\r\n*.komodoproject\r\n.komodotools\r\n\r\n# Node #\r\n#####################\r\nnode_modules\r\n\r\n# Bower #\r\n#####################\r\nbower_components\r\n\r\n# Folders to ignore #\r\n#####################\r\n.hg\r\n.svn\r\n.CVS\r\nintermediate\r\npublish\r\n.idea\r\n.graphics\r\n_test\r\n_archive\r\nuploads\r\ntmp\r\n\r\n# Vim files to ignore #\r\n#######################\r\n.VimballRecord\r\n.netrwhist\r\n\r\nbundle.*\r\n\r\n_demo/README.md\u0001A JSON with color names and its values. Based on http://dev.w3.org/csswg/css-color/#named-colors.\r\n\r\n[![NPM](https://nodei.co/npm/color-name.png?mini=true)](https://nodei.co/npm/color-name/)\r\n\r\n\r\n```js\r\nvar colors = require('color-name');\r\ncolors.red //[255,0,0]\r\n```\r\n\r\n<a href=\"LICENSE\"><img src=\"https://upload.wikimedia.org/wikipedia/commons/0/0c/MIT_logo.svg\" width=\"120\"/></a>\r\n/.eslintrc.json\u0004{\n    \"env\": {\n        \"browser\": true,\n        \"node\": true,\n        \"commonjs\": true,\n        \"es6\": true\n    },\n    \"extends\": \"eslint:recommended\",\n    \"rules\": {\n        \"strict\": 2,\n        \"indent\": 0,\n        \"linebreak-style\": 0,\n        \"quotes\": 0,\n        \"semi\": 0,\n        \"no-cond-assign\": 1,\n        \"no-constant-condition\": 1,\n        \"no-duplicate-case\": 1,\n        \"no-empty\": 1,\n        \"no-ex-assign\": 1,\n        \"no-extra-boolean-cast\": 1,\n        \"no-extra-semi\": 1,\n        \"no-fallthrough\": 1,\n        \"no-func-assign\": 1,\n        \"no-global-assign\": 1,\n        \"no-implicit-globals\": 2,\n        \"no-inner-declarations\": [\"error\", \"functions\"],\n        \"no-irregular-whitespace\": 2,\n        \"no-loop-func\": 1,\n        \"no-multi-str\": 1,\n        \"no-mixed-spaces-and-tabs\": 1,\n        \"no-proto\": 1,\n        \"no-sequences\": 1,\n        \"no-throw-literal\": 1,\n        \"no-unmodified-loop-condition\": 1,\n        \"no-useless-call\": 1,\n        \"no-void\": 1,\n        \"no-with\": 2,\n        \"wrap-iife\": 1,\n        \"no-redeclare\": 1,\n        \"no-unused-vars\": [\"error\", { \"vars\": \"all\", \"args\": \"none\" }],\n        \"no-sparse-arrays\": 1\n    }\n}\n/test.jsī'use strict'\r\n\r\nvar names = require('./');\r\nvar assert = require('assert');\r\n\r\nassert.deepEqual(names.red, [255,0,0]);\r\nassert.deepEqual(names.aliceblue, [240,248,255]);\r\n/index.js\u0012\t'use strict'\r\n\r\nmodule.exports = {\r\n\t\"aliceblue\": [240, 248, 255],\r\n\t\"antiquewhite\": [250, 235, 215],\r\n\t\"aqua\": [0, 255, 255],\r\n\t\"aquamarine\": [127, 255, 212],\r\n\t\"azure\": [240, 255, 255],\r\n\t\"beige\": [245, 245, 220],\r\n\t\"bisque\": [255, 228, 196],\r\n\t\"black\": [0, 0, 0],\r\n\t\"blanchedalmond\": [255, 235, 205],\r\n\t\"blue\": [0, 0, 255],\r\n\t\"blueviolet\": [138, 43, 226],\r\n\t\"brown\": [165, 42, 42],\r\n\t\"burlywood\": [222, 184, 135],\r\n\t\"cadetblue\": [95, 158, 160],\r\n\t\"chartreuse\": [127, 255, 0],\r\n\t\"chocolate\": [210, 105, 30],\r\n\t\"coral\": [255, 127, 80],\r\n\t\"cornflowerblue\": [100, 149, 237],\r\n\t\"cornsilk\": [255, 248, 220],\r\n\t\"crimson\": [220, 20, 60],\r\n\t\"cyan\": [0, 255, 255],\r\n\t\"darkblue\": [0, 0, 139],\r\n\t\"darkcyan\": [0, 139, 139],\r\n\t\"darkgoldenrod\": [184, 134, 11],\r\n\t\"darkgray\": [169, 169, 169],\r\n\t\"darkgreen\": [0, 100, 0],\r\n\t\"darkgrey\": [169, 169, 169],\r\n\t\"darkkhaki\": [189, 183, 107],\r\n\t\"darkmagenta\": [139, 0, 139],\r\n\t\"darkolivegreen\": [85, 107, 47],\r\n\t\"darkorange\": [255, 140, 0],\r\n\t\"darkorchid\": [153, 50, 204],\r\n\t\"darkred\": [139, 0, 0],\r\n\t\"darksalmon\": [233, 150, 122],\r\n\t\"darkseagreen\": [143, 188, 143],\r\n\t\"darkslateblue\": [72, 61, 139],\r\n\t\"darkslategray\": [47, 79, 79],\r\n\t\"darkslategrey\": [47, 79, 79],\r\n\t\"darkturquoise\": [0, 206, 209],\r\n\t\"darkviolet\": [148, 0, 211],\r\n\t\"deeppink\": [255, 20, 147],\r\n\t\"deepskyblue\": [0, 191, 255],\r\n\t\"dimgray\": [105, 105, 105],\r\n\t\"dimgrey\": [105, 105, 105],\r\n\t\"dodgerblue\": [30, 144, 255],\r\n\t\"firebrick\": [178, 34, 34],\r\n\t\"floralwhite\": [255, 250, 240],\r\n\t\"forestgreen\": [34, 139, 34],\r\n\t\"fuchsia\": [255, 0, 255],\r\n\t\"gainsboro\": [220, 220, 220],\r\n\t\"ghostwhite\": [248, 248, 255],\r\n\t\"gold\": [255, 215, 0],\r\n\t\"goldenrod\": [218, 165, 32],\r\n\t\"gray\": [128, 128, 128],\r\n\t\"green\": [0, 128, 0],\r\n\t\"greenyellow\": [173, 255, 47],\r\n\t\"grey\": [128, 128, 128],\r\n\t\"honeydew\": [240, 255, 240],\r\n\t\"hotpink\": [255, 105, 180],\r\n\t\"indianred\": [205, 92, 92],\r\n\t\"indigo\": [75, 0, 130],\r\n\t\"ivory\": [255, 255, 240],\r\n\t\"khaki\": [240, 230, 140],\r\n\t\"lavender\": [230, 230, 250],\r\n\t\"lavenderblush\": [255, 240, 245],\r\n\t\"lawngreen\": [124, 252, 0],\r\n\t\"lemonchiffon\": [255, 250, 205],\r\n\t\"lightblue\": [173, 216, 230],\r\n\t\"lightcoral\": [240, 128, 128],\r\n\t\"lightcyan\": [224, 255, 255],\r\n\t\"lightgoldenrodyellow\": [250, 250, 210],\r\n\t\"lightgray\": [211, 211, 211],\r\n\t\"lightgreen\": [144, 238, 144],\r\n\t\"lightgrey\": [211, 211, 211],\r\n\t\"lightpink\": [255, 182, 193],\r\n\t\"lightsalmon\": [255, 160, 122],\r\n\t\"lightseagreen\": [32, 178, 170],\r\n\t\"lightskyblue\": [135, 206, 250],\r\n\t\"lightslategray\": [119, 136, 153],\r\n\t\"lightslategrey\": [119, 136, 153],\r\n\t\"lightsteelblue\": [176, 196, 222],\r\n\t\"lightyellow\": [255, 255, 224],\r\n\t\"lime\": [0, 255, 0],\r\n\t\"limegreen\": [50, 205, 50],\r\n\t\"linen\": [250, 240, 230],\r\n\t\"magenta\": [255, 0, 255],\r\n\t\"maroon\": [128, 0, 0],\r\n\t\"mediumaquamarine\": [102, 205, 170],\r\n\t\"mediumblue\": [0, 0, 205],\r\n\t\"mediumorchid\": [186, 85, 211],\r\n\t\"mediumpurple\": [147, 112, 219],\r\n\t\"mediumseagreen\": [60, 179, 113],\r\n\t\"mediumslateblue\": [123, 104, 238],\r\n\t\"mediumspringgreen\": [0, 250, 154],\r\n\t\"mediumturquoise\": [72, 209, 204],\r\n\t\"mediumvioletred\": [199, 21, 133],\r\n\t\"midnightblue\": [25, 25, 112],\r\n\t\"mintcream\": [245, 255, 250],\r\n\t\"mistyrose\": [255, 228, 225],\r\n\t\"moccasin\": [255, 228, 181],\r\n\t\"navajowhite\": [255, 222, 173],\r\n\t\"navy\": [0, 0, 128],\r\n\t\"oldlace\": [253, 245, 230],\r\n\t\"olive\": [128, 128, 0],\r\n\t\"olivedrab\": [107, 142, 35],\r\n\t\"orange\": [255, 165, 0],\r\n\t\"orangered\": [255, 69, 0],\r\n\t\"orchid\": [218, 112, 214],\r\n\t\"palegoldenrod\": [238, 232, 170],\r\n\t\"palegreen\": [152, 251, 152],\r\n\t\"paleturquoise\": [175, 238, 238],\r\n\t\"palevioletred\": [219, 112, 147],\r\n\t\"papayawhip\": [255, 239, 213],\r\n\t\"peachpuff\": [255, 218, 185],\r\n\t\"peru\": [205, 133, 63],\r\n\t\"pink\": [255, 192, 203],\r\n\t\"plum\": [221, 160, 221],\r\n\t\"powderblue\": [176, 224, 230],\r\n\t\"purple\": [128, 0, 128],\r\n\t\"rebeccapurple\": [102, 51, 153],\r\n\t\"red\": [255, 0, 0],\r\n\t\"rosybrown\": [188, 143, 143],\r\n\t\"royalblue\": [65, 105, 225],\r\n\t\"saddlebrown\": [139, 69, 19],\r\n\t\"salmon\": [250, 128, 114],\r\n\t\"sandybrown\": [244, 164, 96],\r\n\t\"seagreen\": [46, 139, 87],\r\n\t\"seashell\": [255, 245, 238],\r\n\t\"sienna\": [160, 82, 45],\r\n\t\"silver\": [192, 192, 192],\r\n\t\"skyblue\": [135, 206, 235],\r\n\t\"slateblue\": [106, 90, 205],\r\n\t\"slategray\": [112, 128, 144],\r\n\t\"slategrey\": [112, 128, 144],\r\n\t\"snow\": [255, 250, 250],\r\n\t\"springgreen\": [0, 255, 127],\r\n\t\"steelblue\": [70, 130, 180],\r\n\t\"tan\": [210, 180, 140],\r\n\t\"teal\": [0, 128, 128],\r\n\t\"thistle\": [216, 191, 216],\r\n\t\"tomato\": [255, 99, 71],\r\n\t\"turquoise\": [64, 224, 208],\r\n\t\"violet\": [238, 130, 238],\r\n\t\"wheat\": [245, 222, 179],\r\n\t\"white\": [255, 255, 255],\r\n\t\"whitesmoke\": [245, 245, 245],\r\n\t\"yellow\": [255, 255, 0],\r\n\t\"yellowgreen\": [154, 205, 50]\r\n};\r\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/Y29sb3ItbmFtZUAxLjEuNA==",
    "content": "/README.md\u0001A JSON with color names and its values. Based on http://dev.w3.org/csswg/css-color/#named-colors.\r\n\r\n[![NPM](https://nodei.co/npm/color-name.png?mini=true)](https://nodei.co/npm/color-name/)\r\n\r\n\r\n```js\r\nvar colors = require('color-name');\r\ncolors.red //[255,0,0]\r\n```\r\n\r\n<a href=\"LICENSE\"><img src=\"https://upload.wikimedia.org/wikipedia/commons/0/0c/MIT_logo.svg\" width=\"120\"/></a>\r\n/package.json\u0002_{\r\n  \"name\": \"color-name\",\r\n  \"version\": \"1.1.4\",\r\n  \"description\": \"A list of color names and its values\",\r\n  \"main\": \"index.js\",\r\n  \"files\": [\r\n    \"index.js\"\r\n  ],\r\n  \"scripts\": {\r\n    \"test\": \"node test.js\"\r\n  },\r\n  \"repository\": {\r\n    \"type\": \"git\",\r\n    \"url\": \"git@github.com:colorjs/color-name.git\"\r\n  },\r\n  \"keywords\": [\r\n    \"color-name\",\r\n    \"color\",\r\n    \"color-keyword\",\r\n    \"keyword\"\r\n  ],\r\n  \"author\": \"DY <dfcreative@gmail.com>\",\r\n  \"license\": \"MIT\",\r\n  \"bugs\": {\r\n    \"url\": \"https://github.com/colorjs/color-name/issues\"\r\n  },\r\n  \"homepage\": \"https://github.com/colorjs/color-name\"\r\n}\r\n/index.js\u0012\t'use strict'\r\n\r\nmodule.exports = {\r\n\t\"aliceblue\": [240, 248, 255],\r\n\t\"antiquewhite\": [250, 235, 215],\r\n\t\"aqua\": [0, 255, 255],\r\n\t\"aquamarine\": [127, 255, 212],\r\n\t\"azure\": [240, 255, 255],\r\n\t\"beige\": [245, 245, 220],\r\n\t\"bisque\": [255, 228, 196],\r\n\t\"black\": [0, 0, 0],\r\n\t\"blanchedalmond\": [255, 235, 205],\r\n\t\"blue\": [0, 0, 255],\r\n\t\"blueviolet\": [138, 43, 226],\r\n\t\"brown\": [165, 42, 42],\r\n\t\"burlywood\": [222, 184, 135],\r\n\t\"cadetblue\": [95, 158, 160],\r\n\t\"chartreuse\": [127, 255, 0],\r\n\t\"chocolate\": [210, 105, 30],\r\n\t\"coral\": [255, 127, 80],\r\n\t\"cornflowerblue\": [100, 149, 237],\r\n\t\"cornsilk\": [255, 248, 220],\r\n\t\"crimson\": [220, 20, 60],\r\n\t\"cyan\": [0, 255, 255],\r\n\t\"darkblue\": [0, 0, 139],\r\n\t\"darkcyan\": [0, 139, 139],\r\n\t\"darkgoldenrod\": [184, 134, 11],\r\n\t\"darkgray\": [169, 169, 169],\r\n\t\"darkgreen\": [0, 100, 0],\r\n\t\"darkgrey\": [169, 169, 169],\r\n\t\"darkkhaki\": [189, 183, 107],\r\n\t\"darkmagenta\": [139, 0, 139],\r\n\t\"darkolivegreen\": [85, 107, 47],\r\n\t\"darkorange\": [255, 140, 0],\r\n\t\"darkorchid\": [153, 50, 204],\r\n\t\"darkred\": [139, 0, 0],\r\n\t\"darksalmon\": [233, 150, 122],\r\n\t\"darkseagreen\": [143, 188, 143],\r\n\t\"darkslateblue\": [72, 61, 139],\r\n\t\"darkslategray\": [47, 79, 79],\r\n\t\"darkslategrey\": [47, 79, 79],\r\n\t\"darkturquoise\": [0, 206, 209],\r\n\t\"darkviolet\": [148, 0, 211],\r\n\t\"deeppink\": [255, 20, 147],\r\n\t\"deepskyblue\": [0, 191, 255],\r\n\t\"dimgray\": [105, 105, 105],\r\n\t\"dimgrey\": [105, 105, 105],\r\n\t\"dodgerblue\": [30, 144, 255],\r\n\t\"firebrick\": [178, 34, 34],\r\n\t\"floralwhite\": [255, 250, 240],\r\n\t\"forestgreen\": [34, 139, 34],\r\n\t\"fuchsia\": [255, 0, 255],\r\n\t\"gainsboro\": [220, 220, 220],\r\n\t\"ghostwhite\": [248, 248, 255],\r\n\t\"gold\": [255, 215, 0],\r\n\t\"goldenrod\": [218, 165, 32],\r\n\t\"gray\": [128, 128, 128],\r\n\t\"green\": [0, 128, 0],\r\n\t\"greenyellow\": [173, 255, 47],\r\n\t\"grey\": [128, 128, 128],\r\n\t\"honeydew\": [240, 255, 240],\r\n\t\"hotpink\": [255, 105, 180],\r\n\t\"indianred\": [205, 92, 92],\r\n\t\"indigo\": [75, 0, 130],\r\n\t\"ivory\": [255, 255, 240],\r\n\t\"khaki\": [240, 230, 140],\r\n\t\"lavender\": [230, 230, 250],\r\n\t\"lavenderblush\": [255, 240, 245],\r\n\t\"lawngreen\": [124, 252, 0],\r\n\t\"lemonchiffon\": [255, 250, 205],\r\n\t\"lightblue\": [173, 216, 230],\r\n\t\"lightcoral\": [240, 128, 128],\r\n\t\"lightcyan\": [224, 255, 255],\r\n\t\"lightgoldenrodyellow\": [250, 250, 210],\r\n\t\"lightgray\": [211, 211, 211],\r\n\t\"lightgreen\": [144, 238, 144],\r\n\t\"lightgrey\": [211, 211, 211],\r\n\t\"lightpink\": [255, 182, 193],\r\n\t\"lightsalmon\": [255, 160, 122],\r\n\t\"lightseagreen\": [32, 178, 170],\r\n\t\"lightskyblue\": [135, 206, 250],\r\n\t\"lightslategray\": [119, 136, 153],\r\n\t\"lightslategrey\": [119, 136, 153],\r\n\t\"lightsteelblue\": [176, 196, 222],\r\n\t\"lightyellow\": [255, 255, 224],\r\n\t\"lime\": [0, 255, 0],\r\n\t\"limegreen\": [50, 205, 50],\r\n\t\"linen\": [250, 240, 230],\r\n\t\"magenta\": [255, 0, 255],\r\n\t\"maroon\": [128, 0, 0],\r\n\t\"mediumaquamarine\": [102, 205, 170],\r\n\t\"mediumblue\": [0, 0, 205],\r\n\t\"mediumorchid\": [186, 85, 211],\r\n\t\"mediumpurple\": [147, 112, 219],\r\n\t\"mediumseagreen\": [60, 179, 113],\r\n\t\"mediumslateblue\": [123, 104, 238],\r\n\t\"mediumspringgreen\": [0, 250, 154],\r\n\t\"mediumturquoise\": [72, 209, 204],\r\n\t\"mediumvioletred\": [199, 21, 133],\r\n\t\"midnightblue\": [25, 25, 112],\r\n\t\"mintcream\": [245, 255, 250],\r\n\t\"mistyrose\": [255, 228, 225],\r\n\t\"moccasin\": [255, 228, 181],\r\n\t\"navajowhite\": [255, 222, 173],\r\n\t\"navy\": [0, 0, 128],\r\n\t\"oldlace\": [253, 245, 230],\r\n\t\"olive\": [128, 128, 0],\r\n\t\"olivedrab\": [107, 142, 35],\r\n\t\"orange\": [255, 165, 0],\r\n\t\"orangered\": [255, 69, 0],\r\n\t\"orchid\": [218, 112, 214],\r\n\t\"palegoldenrod\": [238, 232, 170],\r\n\t\"palegreen\": [152, 251, 152],\r\n\t\"paleturquoise\": [175, 238, 238],\r\n\t\"palevioletred\": [219, 112, 147],\r\n\t\"papayawhip\": [255, 239, 213],\r\n\t\"peachpuff\": [255, 218, 185],\r\n\t\"peru\": [205, 133, 63],\r\n\t\"pink\": [255, 192, 203],\r\n\t\"plum\": [221, 160, 221],\r\n\t\"powderblue\": [176, 224, 230],\r\n\t\"purple\": [128, 0, 128],\r\n\t\"rebeccapurple\": [102, 51, 153],\r\n\t\"red\": [255, 0, 0],\r\n\t\"rosybrown\": [188, 143, 143],\r\n\t\"royalblue\": [65, 105, 225],\r\n\t\"saddlebrown\": [139, 69, 19],\r\n\t\"salmon\": [250, 128, 114],\r\n\t\"sandybrown\": [244, 164, 96],\r\n\t\"seagreen\": [46, 139, 87],\r\n\t\"seashell\": [255, 245, 238],\r\n\t\"sienna\": [160, 82, 45],\r\n\t\"silver\": [192, 192, 192],\r\n\t\"skyblue\": [135, 206, 235],\r\n\t\"slateblue\": [106, 90, 205],\r\n\t\"slategray\": [112, 128, 144],\r\n\t\"slategrey\": [112, 128, 144],\r\n\t\"snow\": [255, 250, 250],\r\n\t\"springgreen\": [0, 255, 127],\r\n\t\"steelblue\": [70, 130, 180],\r\n\t\"tan\": [210, 180, 140],\r\n\t\"teal\": [0, 128, 128],\r\n\t\"thistle\": [216, 191, 216],\r\n\t\"tomato\": [255, 99, 71],\r\n\t\"turquoise\": [64, 224, 208],\r\n\t\"violet\": [238, 130, 238],\r\n\t\"wheat\": [245, 222, 179],\r\n\t\"white\": [255, 255, 255],\r\n\t\"whitesmoke\": [245, 245, 245],\r\n\t\"yellow\": [255, 255, 0],\r\n\t\"yellowgreen\": [154, 205, 50]\r\n};\r\n/LICENSE\u0004=The MIT License (MIT)\r\nCopyright (c) 2015 Dmitry Ivanov\r\n\r\nPermission 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:\r\n\r\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\r\n\r\nTHE 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."
  },
  {
    "path": "tests/cdn-proxy/v2/mod/Y29tYmluZWQtc3RyZWFtQDEuMC44",
    "content": "/package.json\u0002{\n  \"author\": \"Felix Geisendörfer <felix@debuggable.com> (http://debuggable.com/)\",\n  \"name\": \"combined-stream\",\n  \"description\": \"A stream that emits multiple other streams one after another.\",\n  \"version\": \"1.0.8\",\n  \"homepage\": \"https://github.com/felixge/node-combined-stream\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git://github.com/felixge/node-combined-stream.git\"\n  },\n  \"main\": \"./lib/combined_stream\",\n  \"scripts\": {\n    \"test\": \"node test/run.js\"\n  },\n  \"engines\": {\n    \"node\": \">= 0.8\"\n  },\n  \"dependencies\": {\n    \"delayed-stream\": \"~1.0.0\"\n  },\n  \"devDependencies\": {\n    \"far\": \"~0.0.7\"\n  },\n  \"license\": \"MIT\"\n}\n/Readme.md\u0011# combined-stream\n\nA stream that emits multiple other streams one after another.\n\n**NB** Currently `combined-stream` works with streams version 1 only. There is ongoing effort to switch this library to streams version 2. Any help is welcome. :) Meanwhile you can explore other libraries that provide streams2 support with more or less compatibility with `combined-stream`.\n\n- [combined-stream2](https://www.npmjs.com/package/combined-stream2): A drop-in streams2-compatible replacement for the combined-stream module.\n\n- [multistream](https://www.npmjs.com/package/multistream): A stream that emits multiple other streams one after another.\n\n## Installation\n\n``` bash\nnpm install combined-stream\n```\n\n## Usage\n\nHere is a simple example that shows how you can use combined-stream to combine\ntwo files into one:\n\n``` javascript\nvar CombinedStream = require('combined-stream');\nvar fs = require('fs');\n\nvar combinedStream = CombinedStream.create();\ncombinedStream.append(fs.createReadStream('file1.txt'));\ncombinedStream.append(fs.createReadStream('file2.txt'));\n\ncombinedStream.pipe(fs.createWriteStream('combined.txt'));\n```\n\nWhile the example above works great, it will pause all source streams until\nthey are needed. If you don't want that to happen, you can set `pauseStreams`\nto `false`:\n\n``` javascript\nvar CombinedStream = require('combined-stream');\nvar fs = require('fs');\n\nvar combinedStream = CombinedStream.create({pauseStreams: false});\ncombinedStream.append(fs.createReadStream('file1.txt'));\ncombinedStream.append(fs.createReadStream('file2.txt'));\n\ncombinedStream.pipe(fs.createWriteStream('combined.txt'));\n```\n\nHowever, what if you don't have all the source streams yet, or you don't want\nto allocate the resources (file descriptors, memory, etc.) for them right away?\nWell, in that case you can simply provide a callback that supplies the stream\nby calling a `next()` function:\n\n``` javascript\nvar CombinedStream = require('combined-stream');\nvar fs = require('fs');\n\nvar combinedStream = CombinedStream.create();\ncombinedStream.append(function(next) {\n  next(fs.createReadStream('file1.txt'));\n});\ncombinedStream.append(function(next) {\n  next(fs.createReadStream('file2.txt'));\n});\n\ncombinedStream.pipe(fs.createWriteStream('combined.txt'));\n```\n\n## API\n\n### CombinedStream.create([options])\n\nReturns a new combined stream object. Available options are:\n\n* `maxDataSize`\n* `pauseStreams`\n\nThe effect of those options is described below.\n\n### combinedStream.pauseStreams = `true`\n\nWhether to apply back pressure to the underlaying streams. If set to `false`,\nthe underlaying streams will never be paused. If set to `true`, the\nunderlaying streams will be paused right after being appended, as well as when\n`delayedStream.pipe()` wants to throttle.\n\n### combinedStream.maxDataSize = `2 * 1024 * 1024`\n\nThe maximum amount of bytes (or characters) to buffer for all source streams.\nIf this value is exceeded, `combinedStream` emits an `'error'` event.\n\n### combinedStream.dataSize = `0`\n\nThe amount of bytes (or characters) currently buffered by `combinedStream`.\n\n### combinedStream.append(stream)\n\nAppends the given `stream` to the combinedStream object. If `pauseStreams` is\nset to `true, this stream will also be paused right away.\n\n`streams` can also be a function that takes one parameter called `next`. `next`\nis a function that must be invoked in order to provide the `next` stream, see\nexample above.\n\nRegardless of how the `stream` is appended, combined-stream always attaches an\n`'error'` listener to it, so you don't have to do that manually.\n\nSpecial case: `stream` can also be a String or Buffer.\n\n### combinedStream.write(data)\n\nYou should not call this, `combinedStream` takes care of piping the appended\nstreams into itself for you.\n\n### combinedStream.resume()\n\nCauses `combinedStream` to start drain the streams it manages. The function is\nidempotent, and also emits a `'resume'` event each time which usually goes to\nthe stream that is currently being drained.\n\n### combinedStream.pause();\n\nIf `combinedStream.pauseStreams` is set to `false`, this does nothing.\nOtherwise a `'pause'` event is emitted, this goes to the stream that is\ncurrently being drained, so you can use it to apply back pressure.\n\n### combinedStream.end();\n\nSets `combinedStream.writable` to false, emits an `'end'` event, and removes\nall streams from the queue.\n\n### combinedStream.destroy();\n\nSame as `combinedStream.end()`, except it emits a `'close'` event instead of\n`'end'`.\n\n## License\n\ncombined-stream is licensed under the MIT license.\n/License\u0004=Copyright (c) 2011 Debuggable Limited <felix@debuggable.com>\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n/lib/combined_stream.js\u0012Ovar util = require('util');\nvar Stream = require('stream').Stream;\nvar DelayedStream = require('delayed-stream');\n\nmodule.exports = CombinedStream;\nfunction CombinedStream() {\n  this.writable = false;\n  this.readable = true;\n  this.dataSize = 0;\n  this.maxDataSize = 2 * 1024 * 1024;\n  this.pauseStreams = true;\n\n  this._released = false;\n  this._streams = [];\n  this._currentStream = null;\n  this._insideLoop = false;\n  this._pendingNext = false;\n}\nutil.inherits(CombinedStream, Stream);\n\nCombinedStream.create = function(options) {\n  var combinedStream = new this();\n\n  options = options || {};\n  for (var option in options) {\n    combinedStream[option] = options[option];\n  }\n\n  return combinedStream;\n};\n\nCombinedStream.isStreamLike = function(stream) {\n  return (typeof stream !== 'function')\n    && (typeof stream !== 'string')\n    && (typeof stream !== 'boolean')\n    && (typeof stream !== 'number')\n    && (!Buffer.isBuffer(stream));\n};\n\nCombinedStream.prototype.append = function(stream) {\n  var isStreamLike = CombinedStream.isStreamLike(stream);\n\n  if (isStreamLike) {\n    if (!(stream instanceof DelayedStream)) {\n      var newStream = DelayedStream.create(stream, {\n        maxDataSize: Infinity,\n        pauseStream: this.pauseStreams,\n      });\n      stream.on('data', this._checkDataSize.bind(this));\n      stream = newStream;\n    }\n\n    this._handleErrors(stream);\n\n    if (this.pauseStreams) {\n      stream.pause();\n    }\n  }\n\n  this._streams.push(stream);\n  return this;\n};\n\nCombinedStream.prototype.pipe = function(dest, options) {\n  Stream.prototype.pipe.call(this, dest, options);\n  this.resume();\n  return dest;\n};\n\nCombinedStream.prototype._getNext = function() {\n  this._currentStream = null;\n\n  if (this._insideLoop) {\n    this._pendingNext = true;\n    return; // defer call\n  }\n\n  this._insideLoop = true;\n  try {\n    do {\n      this._pendingNext = false;\n      this._realGetNext();\n    } while (this._pendingNext);\n  } finally {\n    this._insideLoop = false;\n  }\n};\n\nCombinedStream.prototype._realGetNext = function() {\n  var stream = this._streams.shift();\n\n\n  if (typeof stream == 'undefined') {\n    this.end();\n    return;\n  }\n\n  if (typeof stream !== 'function') {\n    this._pipeNext(stream);\n    return;\n  }\n\n  var getStream = stream;\n  getStream(function(stream) {\n    var isStreamLike = CombinedStream.isStreamLike(stream);\n    if (isStreamLike) {\n      stream.on('data', this._checkDataSize.bind(this));\n      this._handleErrors(stream);\n    }\n\n    this._pipeNext(stream);\n  }.bind(this));\n};\n\nCombinedStream.prototype._pipeNext = function(stream) {\n  this._currentStream = stream;\n\n  var isStreamLike = CombinedStream.isStreamLike(stream);\n  if (isStreamLike) {\n    stream.on('end', this._getNext.bind(this));\n    stream.pipe(this, {end: false});\n    return;\n  }\n\n  var value = stream;\n  this.write(value);\n  this._getNext();\n};\n\nCombinedStream.prototype._handleErrors = function(stream) {\n  var self = this;\n  stream.on('error', function(err) {\n    self._emitError(err);\n  });\n};\n\nCombinedStream.prototype.write = function(data) {\n  this.emit('data', data);\n};\n\nCombinedStream.prototype.pause = function() {\n  if (!this.pauseStreams) {\n    return;\n  }\n\n  if(this.pauseStreams && this._currentStream && typeof(this._currentStream.pause) == 'function') this._currentStream.pause();\n  this.emit('pause');\n};\n\nCombinedStream.prototype.resume = function() {\n  if (!this._released) {\n    this._released = true;\n    this.writable = true;\n    this._getNext();\n  }\n\n  if(this.pauseStreams && this._currentStream && typeof(this._currentStream.resume) == 'function') this._currentStream.resume();\n  this.emit('resume');\n};\n\nCombinedStream.prototype.end = function() {\n  this._reset();\n  this.emit('end');\n};\n\nCombinedStream.prototype.destroy = function() {\n  this._reset();\n  this.emit('close');\n};\n\nCombinedStream.prototype._reset = function() {\n  this.writable = false;\n  this._streams = [];\n  this._currentStream = null;\n};\n\nCombinedStream.prototype._checkDataSize = function() {\n  this._updateDataSize();\n  if (this.dataSize <= this.maxDataSize) {\n    return;\n  }\n\n  var message =\n    'DelayedStream#maxDataSize of ' + this.maxDataSize + ' bytes exceeded.';\n  this._emitError(new Error(message));\n};\n\nCombinedStream.prototype._updateDataSize = function() {\n  this.dataSize = 0;\n\n  var self = this;\n  this._streams.forEach(function(stream) {\n    if (!stream.dataSize) {\n      return;\n    }\n\n    self.dataSize += stream.dataSize;\n  });\n\n  if (this._currentStream && this._currentStream.dataSize) {\n    this.dataSize += this._currentStream.dataSize;\n  }\n};\n\nCombinedStream.prototype._emitError = function(err) {\n  this._reset();\n  this.emit('error', err);\n};\n/yarn.lock\u0002'# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.\n# yarn lockfile v1\n\n\ndelayed-stream@~1.0.0:\n  version \"1.0.0\"\n  resolved \"https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619\"\n\nfar@~0.0.7:\n  version \"0.0.7\"\n  resolved \"https://registry.yarnpkg.com/far/-/far-0.0.7.tgz#01c1fd362bcd26ce9cf161af3938aa34619f79a7\"\n  dependencies:\n    oop \"0.0.3\"\n\noop@0.0.3:\n  version \"0.0.3\"\n  resolved \"https://registry.yarnpkg.com/oop/-/oop-0.0.3.tgz#70fa405a5650891a194fdc82ca68dad6dabf4401\"\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/Y29uY2F0LW1hcEAwLjAuMQ==",
    "content": "/example/map.jsīvar concatMap = require('../');\nvar xs = [ 1, 2, 3, 4, 5, 6 ];\nvar ys = concatMap(xs, function (x) {\n    return x % 2 ? [ x - 0.1, x, x + 0.1 ] : [];\n});\nconsole.dir(ys);\n/index.js\u0001Ymodule.exports = function (xs, fn) {\n    var res = [];\n    for (var i = 0; i < xs.length; i++) {\n        var x = fn(xs[i], i);\n        if (isArray(x)) res.push.apply(res, x);\n        else res.push(x);\n    }\n    return res;\n};\n\nvar isArray = Array.isArray || function (xs) {\n    return Object.prototype.toString.call(xs) === '[object Array]';\n};\n/README.markdown\u0004concat-map\n==========\n\nConcatenative mapdashery.\n\n[![browser support](http://ci.testling.com/substack/node-concat-map.png)](http://ci.testling.com/substack/node-concat-map)\n\n[![build status](https://secure.travis-ci.org/substack/node-concat-map.png)](http://travis-ci.org/substack/node-concat-map)\n\nexample\n=======\n\n``` js\nvar concatMap = require('concat-map');\nvar xs = [ 1, 2, 3, 4, 5, 6 ];\nvar ys = concatMap(xs, function (x) {\n    return x % 2 ? [ x - 0.1, x, x + 0.1 ] : [];\n});\nconsole.dir(ys);\n```\n\n***\n\n```\n[ 0.9, 1, 1.1, 2.9, 3, 3.1, 4.9, 5, 5.1 ]\n```\n\nmethods\n=======\n\n``` js\nvar concatMap = require('concat-map')\n```\n\nconcatMap(xs, fn)\n-----------------\n\nReturn an array of concatenated elements by calling `fn(x, i)` for each element\n`x` and each index `i` in the array `xs`.\n\nWhen `fn(x, i)` returns an array, its result will be concatenated with the\nresult array. If `fn(x, i)` returns anything else, that value will be pushed\nonto the end of the result array.\n\ninstall\n=======\n\nWith [npm](http://npmjs.org) do:\n\n```\nnpm install concat-map\n```\n\nlicense\n=======\n\nMIT\n\nnotes\n=====\n\nThis module was written while sitting high above the ground in a tree.\n/package.json\u0003{\n    \"name\" : \"concat-map\",\n    \"description\" : \"concatenative mapdashery\",\n    \"version\" : \"0.0.1\",\n    \"repository\" : {\n        \"type\" : \"git\",\n        \"url\" : \"git://github.com/substack/node-concat-map.git\"\n    },\n    \"main\" : \"index.js\",\n    \"keywords\" : [\n        \"concat\",\n        \"concatMap\",\n        \"map\",\n        \"functional\",\n        \"higher-order\"\n    ],\n    \"directories\" : {\n        \"example\" : \"example\",\n        \"test\" : \"test\"\n    },\n    \"scripts\" : {\n        \"test\" : \"tape test/*.js\"\n    },\n    \"devDependencies\" : {\n        \"tape\" : \"~2.4.0\"\n    },\n    \"license\" : \"MIT\",\n    \"author\" : {\n        \"name\" : \"James Halliday\",\n        \"email\" : \"mail@substack.net\",\n        \"url\" : \"http://substack.net\"\n    },\n    \"testling\" : {\n        \"files\" : \"test/*.js\",\n        \"browsers\" : {\n            \"ie\" : [ 6, 7, 8, 9 ],\n            \"ff\" : [ 3.5, 10, 15.0 ],\n            \"chrome\" : [ 10, 22 ],\n            \"safari\" : [ 5.1 ],\n            \"opera\" : [ 12 ]\n        }\n    }\n}\n/.travis.yml+language: node_js\nnode_js:\n  - 0.4\n  - 0.6\n/LICENSE\u00041This software is released under the MIT license:\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n/test/map.js\u00043var concatMap = require('../');\nvar test = require('tape');\n\ntest('empty or not', function (t) {\n    var xs = [ 1, 2, 3, 4, 5, 6 ];\n    var ixes = [];\n    var ys = concatMap(xs, function (x, ix) {\n        ixes.push(ix);\n        return x % 2 ? [ x - 0.1, x, x + 0.1 ] : [];\n    });\n    t.same(ys, [ 0.9, 1, 1.1, 2.9, 3, 3.1, 4.9, 5, 5.1 ]);\n    t.same(ixes, [ 0, 1, 2, 3, 4, 5 ]);\n    t.end();\n});\n\ntest('always something', function (t) {\n    var xs = [ 'a', 'b', 'c', 'd' ];\n    var ys = concatMap(xs, function (x) {\n        return x === 'b' ? [ 'B', 'B', 'B' ] : [ x ];\n    });\n    t.same(ys, [ 'a', 'B', 'B', 'B', 'c', 'd' ]);\n    t.end();\n});\n\ntest('scalars', function (t) {\n    var xs = [ 'a', 'b', 'c', 'd' ];\n    var ys = concatMap(xs, function (x) {\n        return x === 'b' ? [ 'B', 'B', 'B' ] : x;\n    });\n    t.same(ys, [ 'a', 'B', 'B', 'B', 'c', 'd' ]);\n    t.end();\n});\n\ntest('undefs', function (t) {\n    var xs = [ 'a', 'b', 'c', 'd' ];\n    var ys = concatMap(xs, function () {});\n    t.same(ys, [ undefined, undefined, undefined, undefined ]);\n    t.end();\n});\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/Y29ubmVjdC1oaXN0b3J5LWFwaS1mYWxsYmFja0AyLjAuMA==",
    "content": "/LICENSE\u0004BThe MIT License\n\nCopyright (c) 2022 Ben Blackmore and contributors\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE./lib/index.js\f'use strict';\n\nvar url = require('url');\n\nexports = module.exports = function historyApiFallback(options) {\n  options = options || {};\n  var logger = getLogger(options);\n\n  return function(req, res, next) {\n    var headers = req.headers;\n    if (req.method !== 'GET' && req.method !== 'HEAD') {\n      logger(\n        'Not rewriting',\n        req.method,\n        req.url,\n        'because the method is not GET or HEAD.'\n      );\n      return next();\n    } else if (!headers || typeof headers.accept !== 'string') {\n      logger(\n        'Not rewriting',\n        req.method,\n        req.url,\n        'because the client did not send an HTTP accept header.'\n      );\n      return next();\n    } else if (headers.accept.indexOf('application/json') === 0) {\n      logger(\n        'Not rewriting',\n        req.method,\n        req.url,\n        'because the client prefers JSON.'\n      );\n      return next();\n    } else if (!acceptsHtml(headers.accept, options)) {\n      logger(\n        'Not rewriting',\n        req.method,\n        req.url,\n        'because the client does not accept HTML.'\n      );\n      return next();\n    }\n\n    var parsedUrl = url.parse(req.url);\n    var rewriteTarget;\n    options.rewrites = options.rewrites || [];\n    for (var i = 0; i < options.rewrites.length; i++) {\n      var rewrite = options.rewrites[i];\n      var match = parsedUrl.pathname.match(rewrite.from);\n      if (match !== null) {\n        rewriteTarget = evaluateRewriteRule(parsedUrl, match, rewrite.to, req);\n\n        if(rewriteTarget.charAt(0) !== '/') {\n          logger(\n            'We recommend using an absolute path for the rewrite target.',\n            'Received a non-absolute rewrite target',\n            rewriteTarget,\n            'for URL',\n            req.url\n          );\n        }\n\n        logger('Rewriting', req.method, req.url, 'to', rewriteTarget);\n        req.url = rewriteTarget;\n        return next();\n      }\n    }\n\n    var pathname = parsedUrl.pathname;\n    if (pathname.lastIndexOf('.') > pathname.lastIndexOf('/') &&\n        options.disableDotRule !== true) {\n      logger(\n        'Not rewriting',\n        req.method,\n        req.url,\n        'because the path includes a dot (.) character.'\n      );\n      return next();\n    }\n\n    rewriteTarget = options.index || '/index.html';\n    logger('Rewriting', req.method, req.url, 'to', rewriteTarget);\n    req.url = rewriteTarget;\n    next();\n  };\n};\n\nfunction evaluateRewriteRule(parsedUrl, match, rule, req) {\n  if (typeof rule === 'string') {\n    return rule;\n  } else if (typeof rule !== 'function') {\n    throw new Error('Rewrite rule can only be of type string or function.');\n  }\n\n  return rule({\n    parsedUrl: parsedUrl,\n    match: match,\n    request: req\n  });\n}\n\nfunction acceptsHtml(header, options) {\n  options.htmlAcceptHeaders = options.htmlAcceptHeaders || ['text/html', '*/*'];\n  for (var i = 0; i < options.htmlAcceptHeaders.length; i++) {\n    if (header.indexOf(options.htmlAcceptHeaders[i]) !== -1) {\n      return true;\n    }\n  }\n  return false;\n}\n\nfunction getLogger(options) {\n  if (options && options.logger) {\n    return options.logger;\n  } else if (options && options.verbose) {\n    // eslint-disable-next-line no-console\n    return console.log.bind(console);\n  }\n  return function(){};\n}\n/package.json\u0003U{\n  \"name\": \"connect-history-api-fallback\",\n  \"version\": \"2.0.0\",\n  \"description\": \"Provides a fallback for non-existing directories so that the HTML 5 history API can be used.\",\n  \"keyswords\": [\n    \"connect\",\n    \"express\",\n    \"html5\",\n    \"history api\",\n    \"fallback\",\n    \"spa\"\n  ],\n  \"engines\": {\n    \"node\": \">=0.8\"\n  },\n  \"main\": \"lib/index.js\",\n  \"files\": [\n    \"lib\"\n  ],\n  \"scripts\": {\n    \"test\": \"jest && eslint lib/*.js test/*.js\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"http://github.com/bripkens/connect-history-api-fallback.git\"\n  },\n  \"author\": {\n    \"name\": \"Ben Ripkens\",\n    \"email\": \"bripkens@gmail.com\"\n  },\n  \"contributors\": [\n    \"Craig Myles <cr@igmyles.com> (http://www.craigmyles.com)\"\n  ],\n  \"license\": \"MIT\",\n  \"devDependencies\": {\n    \"eslint\": \"^5.16.0\",\n    \"jest\": \"^24.8.0\",\n    \"sinon\": \"^7.3.2\"\n  }\n}\n/README.md\u0013<h1 align=\"center\">connect-history-api-fallback</h1>\n<p align=\"center\">Middleware to proxy requests through a specified index page, useful for Single Page Applications that utilise the HTML5 History API.</p>\n\n<h2>Table of Contents</h2>\n\n<!-- TOC depthFrom:2 depthTo:6 withLinks:1 updateOnSave:1 orderedList:0 -->\n\n- [Introduction](#introduction)\n- [Usage](#usage)\n- [Options](#options)\n\t- [index](#index)\n\t- [rewrites](#rewrites)\n\t- [verbose](#verbose)\n\t- [htmlAcceptHeaders](#htmlacceptheaders)\n\t- [disableDotRule](#disabledotrule)\n\n<!-- /TOC -->\n\n## Introduction\n\nSingle Page Applications (SPA) typically only utilise one index file that is\naccessible by web browsers: usually `index.html`. Navigation in the application\nis then commonly handled using JavaScript with the help of the\n[HTML5 History API](http://www.w3.org/html/wg/drafts/html/master/single-page.html#the-history-interface).\nThis results in issues when the user hits the refresh button or is directly\naccessing a page other than the landing page, e.g. `/help` or `/help/online`\nas the web server bypasses the index file to locate the file at this location.\nAs your application is a SPA, the web server will fail trying to retrieve the file and return a *404 - Not Found*\nmessage to the user.\n\nThis tiny middleware addresses some of the issues. Specifically, it will change\nthe requested location to the index you specify (default being `/index.html`)\nwhenever there is a request which fulfills the following criteria:\n\n 1. The request is a `GET` or `HEAD` request\n 2. which accepts `text/html`,\n 3. is not a direct file request, i.e. the requested path does not contain a\n    `.` (DOT) character and\n 4. does not match a pattern provided in options.rewrites (see options below)\n\n## Usage\n\nThe middleware is available through NPM and can easily be added.\n\n```\nnpm install --save connect-history-api-fallback\n```\n\nImport the library\n\n```javascript\nvar history = require('connect-history-api-fallback');\n```\n\nNow you only need to add the middleware to your application like so\n\n```javascript\nvar connect = require('connect');\n\nvar app = connect()\n  .use(history())\n  .listen(3000);\n```\n\nOf course you can also use this piece of middleware with express:\n\n```javascript\nvar express = require('express');\n\nvar app = express();\napp.use(history());\n```\n\n## Options\nYou can optionally pass options to the library when obtaining the middleware\n\n```javascript\nvar middleware = history({});\n```\n\n### index\nOverride the index (default `/index.html`). This is the request path that will be used when the middleware identifies that the request path needs to be rewritten.\n\nThis is not the path to a file on disk. Instead it is the HTTP request path. Downstream connect/express middleware is responsible to turn this rewritten HTTP request path into actual responses, e.g. by reading a file from disk.\n\n```javascript\nhistory({\n  index: '/default.html'\n});\n```\n\n### rewrites\nOverride the index when the request url matches a regex pattern. You can either rewrite to a static string or use a function to transform the incoming request.\n\nThe following will rewrite a request that matches the `/\\/soccer/` pattern to `/soccer.html`.\n```javascript\nhistory({\n  rewrites: [\n    { from: /\\/soccer/, to: '/soccer.html'}\n  ]\n});\n```\n\nAlternatively functions can be used to have more control over the rewrite process. For instance, the following listing shows how requests to `/libs/jquery/jquery.1.12.0.min.js` and the like can be routed to `./bower_components/libs/jquery/jquery.1.12.0.min.js`. You can also make use of this if you have an API version in the URL path.\n```javascript\nhistory({\n  rewrites: [\n    {\n      from: /^\\/libs\\/.*$/,\n      to: function(context) {\n        return '/bower_components' + context.parsedUrl.pathname;\n      }\n    }\n  ]\n});\n```\n\nThe function will always be called with a context object that has the following properties:\n\n - **parsedUrl**: Information about the URL as provided by the [URL module's](https://nodejs.org/api/url.html#url_url_parse_urlstr_parsequerystring_slashesdenotehost) `url.parse`.\n - **match**: An Array of matched results as provided by `String.match(...)`.\n - **request**: The HTTP request object.\n\n\n### verbose\nThis middleware does not log any information by default. If you wish to activate logging, then you can do so via the `verbose` option or by specifying a logger function.\n\n```javascript\nhistory({\n  verbose: true\n});\n```\n\nAlternatively use your own logger\n\n```javascript\nhistory({\n  logger: console.log.bind(console)\n});\n```\n\n### htmlAcceptHeaders\nOverride the default `Accepts:` headers that are queried when matching HTML content requests (Default: `['text/html', '*/*']`).\n\n```javascript\nhistory({\n  htmlAcceptHeaders: ['text/html', 'application/xhtml+xml']\n})\n```\n\n### disableDotRule\nDisables the dot rule mentioned above:\n\n> […] is not a direct file request, i.e. the requested path does not contain a `.` (DOT) character […]\n\n```javascript\nhistory({\n  disableDotRule: true\n})\n```\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/Y29udGVudC10eXBlQDEuMC41",
    "content": "/LICENSE\u0004A(The MIT License)\n\nCopyright (c) 2015 Douglas Christopher Wilson\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n/package.json\u00043{\n  \"name\": \"content-type\",\n  \"description\": \"Create and parse HTTP Content-Type header\",\n  \"version\": \"1.0.5\",\n  \"author\": \"Douglas Christopher Wilson <doug@somethingdoug.com>\",\n  \"license\": \"MIT\",\n  \"keywords\": [\n    \"content-type\",\n    \"http\",\n    \"req\",\n    \"res\",\n    \"rfc7231\"\n  ],\n  \"repository\": \"jshttp/content-type\",\n  \"devDependencies\": {\n    \"deep-equal\": \"1.0.1\",\n    \"eslint\": \"8.32.0\",\n    \"eslint-config-standard\": \"15.0.1\",\n    \"eslint-plugin-import\": \"2.27.5\",\n    \"eslint-plugin-node\": \"11.1.0\",\n    \"eslint-plugin-promise\": \"6.1.1\",\n    \"eslint-plugin-standard\": \"4.1.0\",\n    \"mocha\": \"10.2.0\",\n    \"nyc\": \"15.1.0\"\n  },\n  \"files\": [\n    \"LICENSE\",\n    \"HISTORY.md\",\n    \"README.md\",\n    \"index.js\"\n  ],\n  \"engines\": {\n    \"node\": \">= 0.6\"\n  },\n  \"scripts\": {\n    \"lint\": \"eslint .\",\n    \"test\": \"mocha --reporter spec --check-leaks --bail test/\",\n    \"test-ci\": \"nyc --reporter=lcovonly --reporter=text npm test\",\n    \"test-cov\": \"nyc --reporter=html --reporter=text npm test\",\n    \"version\": \"node scripts/version-history.js && git add HISTORY.md\"\n  }\n}\n/index.js\u0013/*!\n * content-type\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * RegExp to match *( \";\" parameter ) in RFC 7231 sec 3.1.1.1\n *\n * parameter     = token \"=\" ( token / quoted-string )\n * token         = 1*tchar\n * tchar         = \"!\" / \"#\" / \"$\" / \"%\" / \"&\" / \"'\" / \"*\"\n *               / \"+\" / \"-\" / \".\" / \"^\" / \"_\" / \"`\" / \"|\" / \"~\"\n *               / DIGIT / ALPHA\n *               ; any VCHAR, except delimiters\n * quoted-string = DQUOTE *( qdtext / quoted-pair ) DQUOTE\n * qdtext        = HTAB / SP / %x21 / %x23-5B / %x5D-7E / obs-text\n * obs-text      = %x80-FF\n * quoted-pair   = \"\\\" ( HTAB / SP / VCHAR / obs-text )\n */\nvar PARAM_REGEXP = /; *([!#$%&'*+.^_`|~0-9A-Za-z-]+) *= *(\"(?:[\\u000b\\u0020\\u0021\\u0023-\\u005b\\u005d-\\u007e\\u0080-\\u00ff]|\\\\[\\u000b\\u0020-\\u00ff])*\"|[!#$%&'*+.^_`|~0-9A-Za-z-]+) */g // eslint-disable-line no-control-regex\nvar TEXT_REGEXP = /^[\\u000b\\u0020-\\u007e\\u0080-\\u00ff]+$/ // eslint-disable-line no-control-regex\nvar TOKEN_REGEXP = /^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/\n\n/**\n * RegExp to match quoted-pair in RFC 7230 sec 3.2.6\n *\n * quoted-pair = \"\\\" ( HTAB / SP / VCHAR / obs-text )\n * obs-text    = %x80-FF\n */\nvar QESC_REGEXP = /\\\\([\\u000b\\u0020-\\u00ff])/g // eslint-disable-line no-control-regex\n\n/**\n * RegExp to match chars that must be quoted-pair in RFC 7230 sec 3.2.6\n */\nvar QUOTE_REGEXP = /([\\\\\"])/g\n\n/**\n * RegExp to match type in RFC 7231 sec 3.1.1.1\n *\n * media-type = type \"/\" subtype\n * type       = token\n * subtype    = token\n */\nvar TYPE_REGEXP = /^[!#$%&'*+.^_`|~0-9A-Za-z-]+\\/[!#$%&'*+.^_`|~0-9A-Za-z-]+$/\n\n/**\n * Module exports.\n * @public\n */\n\nexports.format = format\nexports.parse = parse\n\n/**\n * Format object to media type.\n *\n * @param {object} obj\n * @return {string}\n * @public\n */\n\nfunction format (obj) {\n  if (!obj || typeof obj !== 'object') {\n    throw new TypeError('argument obj is required')\n  }\n\n  var parameters = obj.parameters\n  var type = obj.type\n\n  if (!type || !TYPE_REGEXP.test(type)) {\n    throw new TypeError('invalid type')\n  }\n\n  var string = type\n\n  // append parameters\n  if (parameters && typeof parameters === 'object') {\n    var param\n    var params = Object.keys(parameters).sort()\n\n    for (var i = 0; i < params.length; i++) {\n      param = params[i]\n\n      if (!TOKEN_REGEXP.test(param)) {\n        throw new TypeError('invalid parameter name')\n      }\n\n      string += '; ' + param + '=' + qstring(parameters[param])\n    }\n  }\n\n  return string\n}\n\n/**\n * Parse media type to object.\n *\n * @param {string|object} string\n * @return {Object}\n * @public\n */\n\nfunction parse (string) {\n  if (!string) {\n    throw new TypeError('argument string is required')\n  }\n\n  // support req/res-like objects as argument\n  var header = typeof string === 'object'\n    ? getcontenttype(string)\n    : string\n\n  if (typeof header !== 'string') {\n    throw new TypeError('argument string is required to be a string')\n  }\n\n  var index = header.indexOf(';')\n  var type = index !== -1\n    ? header.slice(0, index).trim()\n    : header.trim()\n\n  if (!TYPE_REGEXP.test(type)) {\n    throw new TypeError('invalid media type')\n  }\n\n  var obj = new ContentType(type.toLowerCase())\n\n  // parse parameters\n  if (index !== -1) {\n    var key\n    var match\n    var value\n\n    PARAM_REGEXP.lastIndex = index\n\n    while ((match = PARAM_REGEXP.exec(header))) {\n      if (match.index !== index) {\n        throw new TypeError('invalid parameter format')\n      }\n\n      index += match[0].length\n      key = match[1].toLowerCase()\n      value = match[2]\n\n      if (value.charCodeAt(0) === 0x22 /* \" */) {\n        // remove quotes\n        value = value.slice(1, -1)\n\n        // remove escapes\n        if (value.indexOf('\\\\') !== -1) {\n          value = value.replace(QESC_REGEXP, '$1')\n        }\n      }\n\n      obj.parameters[key] = value\n    }\n\n    if (index !== header.length) {\n      throw new TypeError('invalid parameter format')\n    }\n  }\n\n  return obj\n}\n\n/**\n * Get content-type from req/res objects.\n *\n * @param {object}\n * @return {Object}\n * @private\n */\n\nfunction getcontenttype (obj) {\n  var header\n\n  if (typeof obj.getHeader === 'function') {\n    // res-like\n    header = obj.getHeader('content-type')\n  } else if (typeof obj.headers === 'object') {\n    // req-like\n    header = obj.headers && obj.headers['content-type']\n  }\n\n  if (typeof header !== 'string') {\n    throw new TypeError('content-type header is missing from object')\n  }\n\n  return header\n}\n\n/**\n * Quote a string if necessary.\n *\n * @param {string} val\n * @return {string}\n * @private\n */\n\nfunction qstring (val) {\n  var str = String(val)\n\n  // no need to quote tokens\n  if (TOKEN_REGEXP.test(str)) {\n    return str\n  }\n\n  if (str.length > 0 && !TEXT_REGEXP.test(str)) {\n    throw new TypeError('invalid parameter value')\n  }\n\n  return '\"' + str.replace(QUOTE_REGEXP, '\\\\$1') + '\"'\n}\n\n/**\n * Class to represent a content type.\n * @private\n */\nfunction ContentType (type) {\n  this.parameters = Object.create(null)\n  this.type = type\n}\n/README.md\n# content-type\n\n[![NPM Version][npm-version-image]][npm-url]\n[![NPM Downloads][npm-downloads-image]][npm-url]\n[![Node.js Version][node-image]][node-url]\n[![Build Status][ci-image]][ci-url]\n[![Coverage Status][coveralls-image]][coveralls-url]\n\nCreate and parse HTTP Content-Type header according to RFC 7231\n\n## Installation\n\n```sh\n$ npm install content-type\n```\n\n## API\n\n```js\nvar contentType = require('content-type')\n```\n\n### contentType.parse(string)\n\n```js\nvar obj = contentType.parse('image/svg+xml; charset=utf-8')\n```\n\nParse a `Content-Type` header. This will return an object with the following\nproperties (examples are shown for the string `'image/svg+xml; charset=utf-8'`):\n\n - `type`: The media type (the type and subtype, always lower case).\n   Example: `'image/svg+xml'`\n\n - `parameters`: An object of the parameters in the media type (name of parameter\n   always lower case). Example: `{charset: 'utf-8'}`\n\nThrows a `TypeError` if the string is missing or invalid.\n\n### contentType.parse(req)\n\n```js\nvar obj = contentType.parse(req)\n```\n\nParse the `Content-Type` header from the given `req`. Short-cut for\n`contentType.parse(req.headers['content-type'])`.\n\nThrows a `TypeError` if the `Content-Type` header is missing or invalid.\n\n### contentType.parse(res)\n\n```js\nvar obj = contentType.parse(res)\n```\n\nParse the `Content-Type` header set on the given `res`. Short-cut for\n`contentType.parse(res.getHeader('content-type'))`.\n\nThrows a `TypeError` if the `Content-Type` header is missing or invalid.\n\n### contentType.format(obj)\n\n```js\nvar str = contentType.format({\n  type: 'image/svg+xml',\n  parameters: { charset: 'utf-8' }\n})\n```\n\nFormat an object into a `Content-Type` header. This will return a string of the\ncontent type for the given object with the following properties (examples are\nshown that produce the string `'image/svg+xml; charset=utf-8'`):\n\n - `type`: The media type (will be lower-cased). Example: `'image/svg+xml'`\n\n - `parameters`: An object of the parameters in the media type (name of the\n   parameter will be lower-cased). Example: `{charset: 'utf-8'}`\n\nThrows a `TypeError` if the object contains an invalid type or parameter names.\n\n## License\n\n[MIT](LICENSE)\n\n[ci-image]: https://badgen.net/github/checks/jshttp/content-type/master?label=ci\n[ci-url]: https://github.com/jshttp/content-type/actions/workflows/ci.yml\n[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/content-type/master\n[coveralls-url]: https://coveralls.io/r/jshttp/content-type?branch=master\n[node-image]: https://badgen.net/npm/node/content-type\n[node-url]: https://nodejs.org/en/download\n[npm-downloads-image]: https://badgen.net/npm/dm/content-type\n[npm-url]: https://npmjs.org/package/content-type\n[npm-version-image]: https://badgen.net/npm/v/content-type\n/HISTORY.md\u0002\u000b1.0.5 / 2023-01-29\n==================\n\n  * perf: skip value escaping when unnecessary\n\n1.0.4 / 2017-09-11\n==================\n\n  * perf: skip parameter parsing when no parameters\n\n1.0.3 / 2017-09-10\n==================\n\n  * perf: remove argument reassignment\n\n1.0.2 / 2016-05-09\n==================\n\n  * perf: enable strict mode\n\n1.0.1 / 2015-02-13\n==================\n\n  * Improve missing `Content-Type` header error message\n\n1.0.0 / 2015-02-01\n==================\n\n  * Initial implementation, derived from `media-typer@0.3.0`\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/Y29udGVudC1kaXNwb3NpdGlvbkAwLjUuNA==",
    "content": "/LICENSE\u0004F(The MIT License)\n\nCopyright (c) 2014-2017 Douglas Christopher Wilson\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n/HISTORY.md\u00030.5.4 / 2021-12-10\n==================\n\n  * deps: safe-buffer@5.2.1\n\n0.5.3 / 2018-12-17\n==================\n\n  * Use `safe-buffer` for improved Buffer API\n\n0.5.2 / 2016-12-08\n==================\n\n  * Fix `parse` to accept any linear whitespace character\n\n0.5.1 / 2016-01-17\n==================\n\n  * perf: enable strict mode\n\n0.5.0 / 2014-10-11\n==================\n\n  * Add `parse` function\n\n0.4.0 / 2014-09-21\n==================\n\n  * Expand non-Unicode `filename` to the full ISO-8859-1 charset\n\n0.3.0 / 2014-09-20\n==================\n\n  * Add `fallback` option\n  * Add `type` option\n\n0.2.0 / 2014-09-19\n==================\n\n  * Reduce ambiguity of file names with hex escape in buggy browsers\n\n0.1.2 / 2014-09-19\n==================\n\n  * Fix periodic invalid Unicode filename header\n\n0.1.1 / 2014-09-19\n==================\n\n  * Fix invalid characters appearing in `filename*` parameter\n\n0.1.0 / 2014-09-18\n==================\n\n  * Make the `filename` argument optional\n\n0.0.0 / 2014-09-18\n==================\n\n  * Initial release\n/README.md\u0014U# content-disposition\n\n[![NPM Version][npm-image]][npm-url]\n[![NPM Downloads][downloads-image]][downloads-url]\n[![Node.js Version][node-version-image]][node-version-url]\n[![Build Status][github-actions-ci-image]][github-actions-ci-url]\n[![Test Coverage][coveralls-image]][coveralls-url]\n\nCreate and parse HTTP `Content-Disposition` header\n\n## Installation\n\n```sh\n$ npm install content-disposition\n```\n\n## API\n\n```js\nvar contentDisposition = require('content-disposition')\n```\n\n### contentDisposition(filename, options)\n\nCreate an attachment `Content-Disposition` header value using the given file name,\nif supplied. The `filename` is optional and if no file name is desired, but you\nwant to specify `options`, set `filename` to `undefined`.\n\n```js\nres.setHeader('Content-Disposition', contentDisposition('∫ maths.pdf'))\n```\n\n**note** HTTP headers are of the ISO-8859-1 character set. If you are writing this\nheader through a means different from `setHeader` in Node.js, you'll want to specify\nthe `'binary'` encoding in Node.js.\n\n#### Options\n\n`contentDisposition` accepts these properties in the options object.\n\n##### fallback\n\nIf the `filename` option is outside ISO-8859-1, then the file name is actually\nstored in a supplemental field for clients that support Unicode file names and\na ISO-8859-1 version of the file name is automatically generated.\n\nThis specifies the ISO-8859-1 file name to override the automatic generation or\ndisables the generation all together, defaults to `true`.\n\n  - A string will specify the ISO-8859-1 file name to use in place of automatic\n    generation.\n  - `false` will disable including a ISO-8859-1 file name and only include the\n    Unicode version (unless the file name is already ISO-8859-1).\n  - `true` will enable automatic generation if the file name is outside ISO-8859-1.\n\nIf the `filename` option is ISO-8859-1 and this option is specified and has a\ndifferent value, then the `filename` option is encoded in the extended field\nand this set as the fallback field, even though they are both ISO-8859-1.\n\n##### type\n\nSpecifies the disposition type, defaults to `\"attachment\"`. This can also be\n`\"inline\"`, or any other value (all values except inline are treated like\n`attachment`, but can convey additional information if both parties agree to\nit). The type is normalized to lower-case.\n\n### contentDisposition.parse(string)\n\n```js\nvar disposition = contentDisposition.parse('attachment; filename=\"EURO rates.txt\"; filename*=UTF-8\\'\\'%e2%82%ac%20rates.txt')\n```\n\nParse a `Content-Disposition` header string. This automatically handles extended\n(\"Unicode\") parameters by decoding them and providing them under the standard\nparameter name. This will return an object with the following properties (examples\nare shown for the string `'attachment; filename=\"EURO rates.txt\"; filename*=UTF-8\\'\\'%e2%82%ac%20rates.txt'`):\n\n - `type`: The disposition type (always lower case). Example: `'attachment'`\n\n - `parameters`: An object of the parameters in the disposition (name of parameter\n   always lower case and extended versions replace non-extended versions). Example:\n   `{filename: \"€ rates.txt\"}`\n\n## Examples\n\n### Send a file for download\n\n```js\nvar contentDisposition = require('content-disposition')\nvar destroy = require('destroy')\nvar fs = require('fs')\nvar http = require('http')\nvar onFinished = require('on-finished')\n\nvar filePath = '/path/to/public/plans.pdf'\n\nhttp.createServer(function onRequest (req, res) {\n  // set headers\n  res.setHeader('Content-Type', 'application/pdf')\n  res.setHeader('Content-Disposition', contentDisposition(filePath))\n\n  // send file\n  var stream = fs.createReadStream(filePath)\n  stream.pipe(res)\n  onFinished(res, function () {\n    destroy(stream)\n  })\n})\n```\n\n## Testing\n\n```sh\n$ npm test\n```\n\n## References\n\n- [RFC 2616: Hypertext Transfer Protocol -- HTTP/1.1][rfc-2616]\n- [RFC 5987: Character Set and Language Encoding for Hypertext Transfer Protocol (HTTP) Header Field Parameters][rfc-5987]\n- [RFC 6266: Use of the Content-Disposition Header Field in the Hypertext Transfer Protocol (HTTP)][rfc-6266]\n- [Test Cases for HTTP Content-Disposition header field (RFC 6266) and the Encodings defined in RFCs 2047, 2231 and 5987][tc-2231]\n\n[rfc-2616]: https://tools.ietf.org/html/rfc2616\n[rfc-5987]: https://tools.ietf.org/html/rfc5987\n[rfc-6266]: https://tools.ietf.org/html/rfc6266\n[tc-2231]: http://greenbytes.de/tech/tc2231/\n\n## License\n\n[MIT](LICENSE)\n\n[npm-image]: https://img.shields.io/npm/v/content-disposition.svg\n[npm-url]: https://npmjs.org/package/content-disposition\n[node-version-image]: https://img.shields.io/node/v/content-disposition.svg\n[node-version-url]: https://nodejs.org/en/download\n[coveralls-image]: https://img.shields.io/coveralls/jshttp/content-disposition.svg\n[coveralls-url]: https://coveralls.io/r/jshttp/content-disposition?branch=master\n[downloads-image]: https://img.shields.io/npm/dm/content-disposition.svg\n[downloads-url]: https://npmjs.org/package/content-disposition\n[github-actions-ci-image]: https://img.shields.io/github/workflow/status/jshttp/content-disposition/ci/master?label=ci\n[github-actions-ci-url]: https://github.com/jshttp/content-disposition?query=workflow%3Aci\n/index.js)b/*!\n * content-disposition\n * Copyright(c) 2014-2017 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = contentDisposition\nmodule.exports.parse = parse\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar basename = require('path').basename\nvar Buffer = require('safe-buffer').Buffer\n\n/**\n * RegExp to match non attr-char, *after* encodeURIComponent (i.e. not including \"%\")\n * @private\n */\n\nvar ENCODE_URL_ATTR_CHAR_REGEXP = /[\\x00-\\x20\"'()*,/:;<=>?@[\\\\\\]{}\\x7f]/g // eslint-disable-line no-control-regex\n\n/**\n * RegExp to match percent encoding escape.\n * @private\n */\n\nvar HEX_ESCAPE_REGEXP = /%[0-9A-Fa-f]{2}/\nvar HEX_ESCAPE_REPLACE_REGEXP = /%([0-9A-Fa-f]{2})/g\n\n/**\n * RegExp to match non-latin1 characters.\n * @private\n */\n\nvar NON_LATIN1_REGEXP = /[^\\x20-\\x7e\\xa0-\\xff]/g\n\n/**\n * RegExp to match quoted-pair in RFC 2616\n *\n * quoted-pair = \"\\\" CHAR\n * CHAR        = <any US-ASCII character (octets 0 - 127)>\n * @private\n */\n\nvar QESC_REGEXP = /\\\\([\\u0000-\\u007f])/g // eslint-disable-line no-control-regex\n\n/**\n * RegExp to match chars that must be quoted-pair in RFC 2616\n * @private\n */\n\nvar QUOTE_REGEXP = /([\\\\\"])/g\n\n/**\n * RegExp for various RFC 2616 grammar\n *\n * parameter     = token \"=\" ( token | quoted-string )\n * token         = 1*<any CHAR except CTLs or separators>\n * separators    = \"(\" | \")\" | \"<\" | \">\" | \"@\"\n *               | \",\" | \";\" | \":\" | \"\\\" | <\">\n *               | \"/\" | \"[\" | \"]\" | \"?\" | \"=\"\n *               | \"{\" | \"}\" | SP | HT\n * quoted-string = ( <\"> *(qdtext | quoted-pair ) <\"> )\n * qdtext        = <any TEXT except <\">>\n * quoted-pair   = \"\\\" CHAR\n * CHAR          = <any US-ASCII character (octets 0 - 127)>\n * TEXT          = <any OCTET except CTLs, but including LWS>\n * LWS           = [CRLF] 1*( SP | HT )\n * CRLF          = CR LF\n * CR            = <US-ASCII CR, carriage return (13)>\n * LF            = <US-ASCII LF, linefeed (10)>\n * SP            = <US-ASCII SP, space (32)>\n * HT            = <US-ASCII HT, horizontal-tab (9)>\n * CTL           = <any US-ASCII control character (octets 0 - 31) and DEL (127)>\n * OCTET         = <any 8-bit sequence of data>\n * @private\n */\n\nvar PARAM_REGEXP = /;[\\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 // eslint-disable-line no-control-regex\nvar TEXT_REGEXP = /^[\\x20-\\x7e\\x80-\\xff]+$/\nvar TOKEN_REGEXP = /^[!#$%&'*+.0-9A-Z^_`a-z|~-]+$/\n\n/**\n * RegExp for various RFC 5987 grammar\n *\n * ext-value     = charset  \"'\" [ language ] \"'\" value-chars\n * charset       = \"UTF-8\" / \"ISO-8859-1\" / mime-charset\n * mime-charset  = 1*mime-charsetc\n * mime-charsetc = ALPHA / DIGIT\n *               / \"!\" / \"#\" / \"$\" / \"%\" / \"&\"\n *               / \"+\" / \"-\" / \"^\" / \"_\" / \"`\"\n *               / \"{\" / \"}\" / \"~\"\n * language      = ( 2*3ALPHA [ extlang ] )\n *               / 4ALPHA\n *               / 5*8ALPHA\n * extlang       = *3( \"-\" 3ALPHA )\n * value-chars   = *( pct-encoded / attr-char )\n * pct-encoded   = \"%\" HEXDIG HEXDIG\n * attr-char     = ALPHA / DIGIT\n *               / \"!\" / \"#\" / \"$\" / \"&\" / \"+\" / \"-\" / \".\"\n *               / \"^\" / \"_\" / \"`\" / \"|\" / \"~\"\n * @private\n */\n\nvar EXT_VALUE_REGEXP = /^([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!#$&+.^_`|~-])+)$/\n\n/**\n * RegExp for various RFC 6266 grammar\n *\n * disposition-type = \"inline\" | \"attachment\" | disp-ext-type\n * disp-ext-type    = token\n * disposition-parm = filename-parm | disp-ext-parm\n * filename-parm    = \"filename\" \"=\" value\n *                  | \"filename*\" \"=\" ext-value\n * disp-ext-parm    = token \"=\" value\n *                  | ext-token \"=\" ext-value\n * ext-token        = <the characters in token, followed by \"*\">\n * @private\n */\n\nvar DISPOSITION_TYPE_REGEXP = /^([!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\\x09\\x20]*(?:$|;)/ // eslint-disable-line no-control-regex\n\n/**\n * Create an attachment Content-Disposition header.\n *\n * @param {string} [filename]\n * @param {object} [options]\n * @param {string} [options.type=attachment]\n * @param {string|boolean} [options.fallback=true]\n * @return {string}\n * @public\n */\n\nfunction contentDisposition (filename, options) {\n  var opts = options || {}\n\n  // get type\n  var type = opts.type || 'attachment'\n\n  // get parameters\n  var params = createparams(filename, opts.fallback)\n\n  // format into string\n  return format(new ContentDisposition(type, params))\n}\n\n/**\n * Create parameters object from filename and fallback.\n *\n * @param {string} [filename]\n * @param {string|boolean} [fallback=true]\n * @return {object}\n * @private\n */\n\nfunction createparams (filename, fallback) {\n  if (filename === undefined) {\n    return\n  }\n\n  var params = {}\n\n  if (typeof filename !== 'string') {\n    throw new TypeError('filename must be a string')\n  }\n\n  // fallback defaults to true\n  if (fallback === undefined) {\n    fallback = true\n  }\n\n  if (typeof fallback !== 'string' && typeof fallback !== 'boolean') {\n    throw new TypeError('fallback must be a string or boolean')\n  }\n\n  if (typeof fallback === 'string' && NON_LATIN1_REGEXP.test(fallback)) {\n    throw new TypeError('fallback must be ISO-8859-1 string')\n  }\n\n  // restrict to file base name\n  var name = basename(filename)\n\n  // determine if name is suitable for quoted string\n  var isQuotedString = TEXT_REGEXP.test(name)\n\n  // generate fallback name\n  var fallbackName = typeof fallback !== 'string'\n    ? fallback && getlatin1(name)\n    : basename(fallback)\n  var hasFallback = typeof fallbackName === 'string' && fallbackName !== name\n\n  // set extended filename parameter\n  if (hasFallback || !isQuotedString || HEX_ESCAPE_REGEXP.test(name)) {\n    params['filename*'] = name\n  }\n\n  // set filename parameter\n  if (isQuotedString || hasFallback) {\n    params.filename = hasFallback\n      ? fallbackName\n      : name\n  }\n\n  return params\n}\n\n/**\n * Format object to Content-Disposition header.\n *\n * @param {object} obj\n * @param {string} obj.type\n * @param {object} [obj.parameters]\n * @return {string}\n * @private\n */\n\nfunction format (obj) {\n  var parameters = obj.parameters\n  var type = obj.type\n\n  if (!type || typeof type !== 'string' || !TOKEN_REGEXP.test(type)) {\n    throw new TypeError('invalid type')\n  }\n\n  // start with normalized type\n  var string = String(type).toLowerCase()\n\n  // append parameters\n  if (parameters && typeof parameters === 'object') {\n    var param\n    var params = Object.keys(parameters).sort()\n\n    for (var i = 0; i < params.length; i++) {\n      param = params[i]\n\n      var val = param.substr(-1) === '*'\n        ? ustring(parameters[param])\n        : qstring(parameters[param])\n\n      string += '; ' + param + '=' + val\n    }\n  }\n\n  return string\n}\n\n/**\n * Decode a RFC 5987 field value (gracefully).\n *\n * @param {string} str\n * @return {string}\n * @private\n */\n\nfunction decodefield (str) {\n  var match = EXT_VALUE_REGEXP.exec(str)\n\n  if (!match) {\n    throw new TypeError('invalid extended field value')\n  }\n\n  var charset = match[1].toLowerCase()\n  var encoded = match[2]\n  var value\n\n  // to binary string\n  var binary = encoded.replace(HEX_ESCAPE_REPLACE_REGEXP, pdecode)\n\n  switch (charset) {\n    case 'iso-8859-1':\n      value = getlatin1(binary)\n      break\n    case 'utf-8':\n      value = Buffer.from(binary, 'binary').toString('utf8')\n      break\n    default:\n      throw new TypeError('unsupported charset in extended field')\n  }\n\n  return value\n}\n\n/**\n * Get ISO-8859-1 version of string.\n *\n * @param {string} val\n * @return {string}\n * @private\n */\n\nfunction getlatin1 (val) {\n  // simple Unicode -> ISO-8859-1 transformation\n  return String(val).replace(NON_LATIN1_REGEXP, '?')\n}\n\n/**\n * Parse Content-Disposition header string.\n *\n * @param {string} string\n * @return {object}\n * @public\n */\n\nfunction parse (string) {\n  if (!string || typeof string !== 'string') {\n    throw new TypeError('argument string is required')\n  }\n\n  var match = DISPOSITION_TYPE_REGEXP.exec(string)\n\n  if (!match) {\n    throw new TypeError('invalid type format')\n  }\n\n  // normalize type\n  var index = match[0].length\n  var type = match[1].toLowerCase()\n\n  var key\n  var names = []\n  var params = {}\n  var value\n\n  // calculate index to start at\n  index = PARAM_REGEXP.lastIndex = match[0].substr(-1) === ';'\n    ? index - 1\n    : index\n\n  // match parameters\n  while ((match = PARAM_REGEXP.exec(string))) {\n    if (match.index !== index) {\n      throw new TypeError('invalid parameter format')\n    }\n\n    index += match[0].length\n    key = match[1].toLowerCase()\n    value = match[2]\n\n    if (names.indexOf(key) !== -1) {\n      throw new TypeError('invalid duplicate parameter')\n    }\n\n    names.push(key)\n\n    if (key.indexOf('*') + 1 === key.length) {\n      // decode extended value\n      key = key.slice(0, -1)\n      value = decodefield(value)\n\n      // overwrite existing value\n      params[key] = value\n      continue\n    }\n\n    if (typeof params[key] === 'string') {\n      continue\n    }\n\n    if (value[0] === '\"') {\n      // remove quotes and escapes\n      value = value\n        .substr(1, value.length - 2)\n        .replace(QESC_REGEXP, '$1')\n    }\n\n    params[key] = value\n  }\n\n  if (index !== -1 && index !== string.length) {\n    throw new TypeError('invalid parameter format')\n  }\n\n  return new ContentDisposition(type, params)\n}\n\n/**\n * Percent decode a single character.\n *\n * @param {string} str\n * @param {string} hex\n * @return {string}\n * @private\n */\n\nfunction pdecode (str, hex) {\n  return String.fromCharCode(parseInt(hex, 16))\n}\n\n/**\n * Percent encode a single character.\n *\n * @param {string} char\n * @return {string}\n * @private\n */\n\nfunction pencode (char) {\n  return '%' + String(char)\n    .charCodeAt(0)\n    .toString(16)\n    .toUpperCase()\n}\n\n/**\n * Quote a string for HTTP.\n *\n * @param {string} val\n * @return {string}\n * @private\n */\n\nfunction qstring (val) {\n  var str = String(val)\n\n  return '\"' + str.replace(QUOTE_REGEXP, '\\\\$1') + '\"'\n}\n\n/**\n * Encode a Unicode string for HTTP (RFC 5987).\n *\n * @param {string} val\n * @return {string}\n * @private\n */\n\nfunction ustring (val) {\n  var str = String(val)\n\n  // percent encode as UTF-8\n  var encoded = encodeURIComponent(str)\n    .replace(ENCODE_URL_ATTR_CHAR_REGEXP, pencode)\n\n  return 'UTF-8\\'\\'' + encoded\n}\n\n/**\n * Class for parsed Content-Disposition header for v8 optimization\n *\n * @public\n * @param {string} type\n * @param {object} parameters\n * @constructor\n */\n\nfunction ContentDisposition (type, parameters) {\n  this.type = type\n  this.parameters = parameters\n}\n/package.json\u0004{\n  \"name\": \"content-disposition\",\n  \"description\": \"Create and parse Content-Disposition header\",\n  \"version\": \"0.5.4\",\n  \"author\": \"Douglas Christopher Wilson <doug@somethingdoug.com>\",\n  \"license\": \"MIT\",\n  \"keywords\": [\n    \"content-disposition\",\n    \"http\",\n    \"rfc6266\",\n    \"res\"\n  ],\n  \"repository\": \"jshttp/content-disposition\",\n  \"dependencies\": {\n    \"safe-buffer\": \"5.2.1\"\n  },\n  \"devDependencies\": {\n    \"deep-equal\": \"1.0.1\",\n    \"eslint\": \"7.32.0\",\n    \"eslint-config-standard\": \"13.0.1\",\n    \"eslint-plugin-import\": \"2.25.3\",\n    \"eslint-plugin-markdown\": \"2.2.1\",\n    \"eslint-plugin-node\": \"11.1.0\",\n    \"eslint-plugin-promise\": \"5.2.0\",\n    \"eslint-plugin-standard\": \"4.1.0\",\n    \"istanbul\": \"0.4.5\",\n    \"mocha\": \"9.1.3\"\n  },\n  \"files\": [\n    \"LICENSE\",\n    \"HISTORY.md\",\n    \"README.md\",\n    \"index.js\"\n  ],\n  \"engines\": {\n    \"node\": \">= 0.6\"\n  },\n  \"scripts\": {\n    \"lint\": \"eslint .\",\n    \"test\": \"mocha --reporter spec --bail --check-leaks test/\",\n    \"test-ci\": \"istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/\",\n    \"test-cov\": \"istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/\"\n  }\n}\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/Y29udmVydC1zb3VyY2UtbWFwQDEuOS4w",
    "content": "/package.json\u0003J{\n  \"name\": \"convert-source-map\",\n  \"version\": \"1.9.0\",\n  \"description\": \"Converts a source-map from/to  different formats and allows adding/changing properties.\",\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"test\": \"tap test/*.js --color\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git://github.com/thlorenz/convert-source-map.git\"\n  },\n  \"homepage\": \"https://github.com/thlorenz/convert-source-map\",\n  \"devDependencies\": {\n    \"inline-source-map\": \"~0.6.2\",\n    \"tap\": \"~9.0.0\"\n  },\n  \"keywords\": [\n    \"convert\",\n    \"sourcemap\",\n    \"source\",\n    \"map\",\n    \"browser\",\n    \"debug\"\n  ],\n  \"author\": {\n    \"name\": \"Thorsten Lorenz\",\n    \"email\": \"thlorenz@gmx.de\",\n    \"url\": \"http://thlorenz.com\"\n  },\n  \"license\": \"MIT\",\n  \"engine\": {\n    \"node\": \">=0.6\"\n  },\n  \"files\": [\n    \"index.js\"\n  ],\n  \"browser\": {\n    \"fs\": false\n  }\n}\n/LICENSE\u00046Copyright 2013 Thorsten Lorenz. \nAll rights reserved.\n\nPermission is hereby granted, free of charge, to any person\nobtaining a copy of this software and associated documentation\nfiles (the \"Software\"), to deal in the Software without\nrestriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the\nSoftware is furnished to do so, subject to the following\nconditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\nOF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\nHOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\nWHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\nFROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\nOTHER DEALINGS IN THE SOFTWARE.\n/README.md\u0010# convert-source-map [![Build Status][ci-image]][ci-url]\n\nConverts a source-map from/to  different formats and allows adding/changing properties.\n\n```js\nvar convert = require('convert-source-map');\n\nvar json = convert\n  .fromComment('//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQvZm9vLm1pbi5qcyIsInNvdXJjZXMiOlsic3JjL2Zvby5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSIsInNvdXJjZVJvb3QiOiIvIn0=')\n  .toJSON();\n\nvar modified = convert\n  .fromComment('//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQvZm9vLm1pbi5qcyIsInNvdXJjZXMiOlsic3JjL2Zvby5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSIsInNvdXJjZVJvb3QiOiIvIn0=')\n  .setProperty('sources', [ 'SRC/FOO.JS' ])\n  .toJSON();\n\nconsole.log(json);\nconsole.log(modified);\n```\n\n```json\n{\"version\":3,\"file\":\"build/foo.min.js\",\"sources\":[\"src/foo.js\"],\"names\":[],\"mappings\":\"AAAA\",\"sourceRoot\":\"/\"}\n{\"version\":3,\"file\":\"build/foo.min.js\",\"sources\":[\"SRC/FOO.JS\"],\"names\":[],\"mappings\":\"AAAA\",\"sourceRoot\":\"/\"}\n```\n\n## API\n\n### fromObject(obj)\n\nReturns source map converter from given object.\n\n### fromJSON(json)\n\nReturns source map converter from given json string.\n\n### fromBase64(base64)\n\nReturns source map converter from given base64 encoded json string.\n\n### fromComment(comment)\n\nReturns source map converter from given base64 encoded json string prefixed with `//# sourceMappingURL=...`.\n\n### fromMapFileComment(comment, mapFileDir)\n\nReturns source map converter from given `filename` by parsing `//# sourceMappingURL=filename`.\n\n`filename` must point to a file that is found inside the `mapFileDir`. Most tools store this file right next to the\ngenerated file, i.e. the one containing the source map.\n\n### fromSource(source)\n\nFinds last sourcemap comment in file and returns source map converter or returns null if no source map comment was found.\n\n### fromMapFileSource(source, mapFileDir)\n\nFinds last sourcemap comment in file and returns source map converter or returns null if no source map comment was\nfound.\n\nThe sourcemap will be read from the map file found by parsing `# sourceMappingURL=file` comment. For more info see\nfromMapFileComment.\n\n### toObject()\n\nReturns a copy of the underlying source map.\n\n### toJSON([space])\n\nConverts source map to json string. If `space` is given (optional), this will be passed to\n[JSON.stringify](https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/JSON/stringify) when the\nJSON string is generated.\n\n### toBase64()\n\nConverts source map to base64 encoded json string.\n\n### toComment([options])\n\nConverts source map to an inline comment that can be appended to the source-file.\n\nBy default, the comment is formatted like: `//# sourceMappingURL=...`, which you would\nnormally see in a JS source file.\n\nWhen `options.multiline == true`, the comment is formatted like: `/*# sourceMappingURL=... */`, which you would find in a CSS source file.\n\n### addProperty(key, value)\n\nAdds given property to the source map. Throws an error if property already exists.\n\n### setProperty(key, value)\n\nSets given property to the source map. If property doesn't exist it is added, otherwise its value is updated.\n\n### getProperty(key)\n\nGets given property of the source map.\n\n### removeComments(src)\n\nReturns `src` with all source map comments removed\n\n### removeMapFileComments(src)\n\nReturns `src` with all source map comments pointing to map files removed.\n\n### commentRegex\n\nProvides __a fresh__ RegExp each time it is accessed. Can be used to find source map comments.\n\n### mapFileCommentRegex\n\nProvides __a fresh__ RegExp each time it is accessed. Can be used to find source map comments pointing to map files.\n\n### generateMapFileComment(file, [options])\n\nReturns a comment that links to an external source map via `file`.\n\nBy default, the comment is formatted like: `//# sourceMappingURL=...`, which you would normally see in a JS source file.\n\nWhen `options.multiline == true`, the comment is formatted like: `/*# sourceMappingURL=... */`, which you would find in a CSS source file.\n\n[ci-url]: https://github.com/thlorenz/convert-source-map/actions?query=workflow:ci\n[ci-image]: https://img.shields.io/github/workflow/status/thlorenz/convert-source-map/CI?style=flat-square\n/index.js\u0014'use strict';\nvar fs = require('fs');\nvar path = require('path');\n\nObject.defineProperty(exports, 'commentRegex', {\n  get: function getCommentRegex () {\n    return /^\\s*\\/(?:\\/|\\*)[@#]\\s+sourceMappingURL=data:(?:application|text)\\/json;(?:charset[:=]\\S+?;)?base64,(?:.*)$/mg;\n  }\n});\n\nObject.defineProperty(exports, 'mapFileCommentRegex', {\n  get: function getMapFileCommentRegex () {\n    // Matches sourceMappingURL in either // or /* comment styles.\n    return /(?:\\/\\/[@#][ \\t]+sourceMappingURL=([^\\s'\"`]+?)[ \\t]*$)|(?:\\/\\*[@#][ \\t]+sourceMappingURL=([^\\*]+?)[ \\t]*(?:\\*\\/){1}[ \\t]*$)/mg;\n  }\n});\n\nvar decodeBase64;\nif (typeof Buffer !== 'undefined') {\n  if (typeof Buffer.from === 'function') {\n    decodeBase64 = decodeBase64WithBufferFrom;\n  } else {\n    decodeBase64 = decodeBase64WithNewBuffer;\n  }\n} else {\n  decodeBase64 = decodeBase64WithAtob;\n}\n\nfunction decodeBase64WithBufferFrom(base64) {\n  return Buffer.from(base64, 'base64').toString();\n}\n\nfunction decodeBase64WithNewBuffer(base64) {\n  if (typeof value === 'number') {\n    throw new TypeError('The value to decode must not be of type number.');\n  }\n  return new Buffer(base64, 'base64').toString();\n}\n\nfunction decodeBase64WithAtob(base64) {\n  return decodeURIComponent(escape(atob(base64)));\n}\n\nfunction stripComment(sm) {\n  return sm.split(',').pop();\n}\n\nfunction readFromFileMap(sm, dir) {\n  // NOTE: this will only work on the server since it attempts to read the map file\n\n  var r = exports.mapFileCommentRegex.exec(sm);\n\n  // for some odd reason //# .. captures in 1 and /* .. */ in 2\n  var filename = r[1] || r[2];\n  var filepath = path.resolve(dir, filename);\n\n  try {\n    return fs.readFileSync(filepath, 'utf8');\n  } catch (e) {\n    throw new Error('An error occurred while trying to read the map file at ' + filepath + '\\n' + e);\n  }\n}\n\nfunction Converter (sm, opts) {\n  opts = opts || {};\n\n  if (opts.isFileComment) sm = readFromFileMap(sm, opts.commentFileDir);\n  if (opts.hasComment) sm = stripComment(sm);\n  if (opts.isEncoded) sm = decodeBase64(sm);\n  if (opts.isJSON || opts.isEncoded) sm = JSON.parse(sm);\n\n  this.sourcemap = sm;\n}\n\nConverter.prototype.toJSON = function (space) {\n  return JSON.stringify(this.sourcemap, null, space);\n};\n\nif (typeof Buffer !== 'undefined') {\n  if (typeof Buffer.from === 'function') {\n    Converter.prototype.toBase64 = encodeBase64WithBufferFrom;\n  } else {\n    Converter.prototype.toBase64 = encodeBase64WithNewBuffer;\n  }\n} else {\n  Converter.prototype.toBase64 = encodeBase64WithBtoa;\n}\n\nfunction encodeBase64WithBufferFrom() {\n  var json = this.toJSON();\n  return Buffer.from(json, 'utf8').toString('base64');\n}\n\nfunction encodeBase64WithNewBuffer() {\n  var json = this.toJSON();\n  if (typeof json === 'number') {\n    throw new TypeError('The json to encode must not be of type number.');\n  }\n  return new Buffer(json, 'utf8').toString('base64');\n}\n\nfunction encodeBase64WithBtoa() {\n  var json = this.toJSON();\n  return btoa(unescape(encodeURIComponent(json)));\n}\n\nConverter.prototype.toComment = function (options) {\n  var base64 = this.toBase64();\n  var data = 'sourceMappingURL=data:application/json;charset=utf-8;base64,' + base64;\n  return options && options.multiline ? '/*# ' + data + ' */' : '//# ' + data;\n};\n\n// returns copy instead of original\nConverter.prototype.toObject = function () {\n  return JSON.parse(this.toJSON());\n};\n\nConverter.prototype.addProperty = function (key, value) {\n  if (this.sourcemap.hasOwnProperty(key)) throw new Error('property \"' + key + '\" already exists on the sourcemap, use set property instead');\n  return this.setProperty(key, value);\n};\n\nConverter.prototype.setProperty = function (key, value) {\n  this.sourcemap[key] = value;\n  return this;\n};\n\nConverter.prototype.getProperty = function (key) {\n  return this.sourcemap[key];\n};\n\nexports.fromObject = function (obj) {\n  return new Converter(obj);\n};\n\nexports.fromJSON = function (json) {\n  return new Converter(json, { isJSON: true });\n};\n\nexports.fromBase64 = function (base64) {\n  return new Converter(base64, { isEncoded: true });\n};\n\nexports.fromComment = function (comment) {\n  comment = comment\n    .replace(/^\\/\\*/g, '//')\n    .replace(/\\*\\/$/g, '');\n\n  return new Converter(comment, { isEncoded: true, hasComment: true });\n};\n\nexports.fromMapFileComment = function (comment, dir) {\n  return new Converter(comment, { commentFileDir: dir, isFileComment: true, isJSON: true });\n};\n\n// Finds last sourcemap comment in file or returns null if none was found\nexports.fromSource = function (content) {\n  var m = content.match(exports.commentRegex);\n  return m ? exports.fromComment(m.pop()) : null;\n};\n\n// Finds last sourcemap comment in file or returns null if none was found\nexports.fromMapFileSource = function (content, dir) {\n  var m = content.match(exports.mapFileCommentRegex);\n  return m ? exports.fromMapFileComment(m.pop(), dir) : null;\n};\n\nexports.removeComments = function (src) {\n  return src.replace(exports.commentRegex, '');\n};\n\nexports.removeMapFileComments = function (src) {\n  return src.replace(exports.mapFileCommentRegex, '');\n};\n\nexports.generateMapFileComment = function (file, options) {\n  var data = 'sourceMappingURL=' + file;\n  return options && options.multiline ? '/*# ' + data + ' */' : '//# ' + data;\n};\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/Y29va2llLXNpZ25hdHVyZUAxLjAuNg==",
    "content": "/.npmignore\u001dsupport\ntest\nexamples\n*.sock\n/package.json\u0001{\n  \"name\": \"cookie-signature\",\n  \"version\": \"1.0.6\",\n  \"description\": \"Sign and unsign cookies\",\n  \"keywords\": [\"cookie\", \"sign\", \"unsign\"],\n  \"author\": \"TJ Holowaychuk <tj@learnboost.com>\",\n  \"license\": \"MIT\",\n  \"repository\": { \"type\": \"git\", \"url\": \"https://github.com/visionmedia/node-cookie-signature.git\"},\n  \"dependencies\": {},\n  \"devDependencies\": {\n    \"mocha\": \"*\",\n    \"should\": \"*\"\n  },\n  \"scripts\": {\n    \"test\": \"mocha --require should --reporter spec\"\n  },\n  \"main\": \"index\"\n}\n/index.js\u0004/**\n * Module dependencies.\n */\n\nvar crypto = require('crypto');\n\n/**\n * Sign the given `val` with `secret`.\n *\n * @param {String} val\n * @param {String} secret\n * @return {String}\n * @api private\n */\n\nexports.sign = function(val, secret){\n  if ('string' != typeof val) throw new TypeError(\"Cookie value must be provided as a string.\");\n  if ('string' != typeof secret) throw new TypeError(\"Secret string must be provided.\");\n  return val + '.' + crypto\n    .createHmac('sha256', secret)\n    .update(val)\n    .digest('base64')\n    .replace(/\\=+$/, '');\n};\n\n/**\n * Unsign and decode the given `val` with `secret`,\n * returning `false` if the signature is invalid.\n *\n * @param {String} val\n * @param {String} secret\n * @return {String|Boolean}\n * @api private\n */\n\nexports.unsign = function(val, secret){\n  if ('string' != typeof val) throw new TypeError(\"Signed cookie string must be provided.\");\n  if ('string' != typeof secret) throw new TypeError(\"Secret string must be provided.\");\n  var str = val.slice(0, val.lastIndexOf('.'))\n    , mac = exports.sign(str, secret);\n  \n  return sha1(mac) == sha1(val) ? str : false;\n};\n\n/**\n * Private\n */\n\nfunction sha1(str){\n  return crypto.createHash('sha1').update(str).digest('hex');\n}\n/Readme.md\u0005\n# cookie-signature\n\n  Sign and unsign cookies.\n\n## Example\n\n```js\nvar cookie = require('cookie-signature');\n\nvar val = cookie.sign('hello', 'tobiiscool');\nval.should.equal('hello.DGDUkGlIkCzPz+C0B064FNgHdEjox7ch8tOBGslZ5QI');\n\nvar val = cookie.sign('hello', 'tobiiscool');\ncookie.unsign(val, 'tobiiscool').should.equal('hello');\ncookie.unsign(val, 'luna').should.be.false;\n```\n\n## License \n\n(The MIT License)\n\nCopyright (c) 2012 LearnBoost &lt;tj@learnboost.com&gt;\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE./History.md\u00021.0.6 / 2015-02-03\n==================\n\n* use `npm test` instead of `make test` to run tests\n* clearer assertion messages when checking input\n\n\n1.0.5 / 2014-09-05\n==================\n\n* add license to package.json\n\n1.0.4 / 2014-06-25\n==================\n\n * corrected avoidance of timing attacks (thanks @tenbits!)\n\n1.0.3 / 2014-01-28\n==================\n\n * [incorrect] fix for timing attacks\n\n1.0.2 / 2014-01-28\n==================\n\n * fix missing repository warning\n * fix typo in test\n\n1.0.1 / 2013-04-15\n==================\n\n  * Revert \"Changed underlying HMAC algo. to sha512.\"\n  * Revert \"Fix for timing attacks on MAC verification.\"\n\n0.0.1 / 2010-01-03\n==================\n\n  * Initial release\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/Y29va2llQDAuNS4w",
    "content": "/SECURITY.md\u0004# Security Policies and Procedures\n\n## Reporting a Bug\n\nThe `cookie` team and community take all security bugs seriously. Thank\nyou for improving the security of the project. We appreciate your efforts and\nresponsible disclosure and will make every effort to acknowledge your\ncontributions.\n\nReport security bugs by emailing the current owner(s) of `cookie`. This\ninformation can be found in the npm registry using the command\n`npm owner ls cookie`.\nIf unsure or unable to get the information from the above, open an issue\nin the [project issue tracker](https://github.com/jshttp/cookie/issues)\nasking for the current contact information.\n\nTo ensure the timely response to your report, please ensure that the entirety\nof the report is contained within the email body and not solely behind a web\nlink or an attachment.\n\nAt least one owner will acknowledge your email within 48 hours, and will send a\nmore detailed response within 48 hours indicating the next steps in handling\nyour report. After the initial reply to your report, the owners will\nendeavor to keep you informed of the progress towards a fix and full\nannouncement, and may ask for additional information or guidance.\n/package.json\u0004t{\n  \"name\": \"cookie\",\n  \"description\": \"HTTP server cookie parsing and serialization\",\n  \"version\": \"0.5.0\",\n  \"author\": \"Roman Shtylman <shtylman@gmail.com>\",\n  \"contributors\": [\n    \"Douglas Christopher Wilson <doug@somethingdoug.com>\"\n  ],\n  \"license\": \"MIT\",\n  \"keywords\": [\n    \"cookie\",\n    \"cookies\"\n  ],\n  \"repository\": \"jshttp/cookie\",\n  \"devDependencies\": {\n    \"beautify-benchmark\": \"0.2.4\",\n    \"benchmark\": \"2.1.4\",\n    \"eslint\": \"7.32.0\",\n    \"eslint-plugin-markdown\": \"2.2.1\",\n    \"mocha\": \"9.2.2\",\n    \"nyc\": \"15.1.0\",\n    \"safe-buffer\": \"5.2.1\",\n    \"top-sites\": \"1.1.97\"\n  },\n  \"files\": [\n    \"HISTORY.md\",\n    \"LICENSE\",\n    \"README.md\",\n    \"SECURITY.md\",\n    \"index.js\"\n  ],\n  \"engines\": {\n    \"node\": \">= 0.6\"\n  },\n  \"scripts\": {\n    \"bench\": \"node benchmark/index.js\",\n    \"lint\": \"eslint .\",\n    \"test\": \"mocha --reporter spec --bail --check-leaks test/\",\n    \"test-ci\": \"nyc --reporter=lcov --reporter=text npm test\",\n    \"test-cov\": \"nyc --reporter=html --reporter=text npm test\",\n    \"update-bench\": \"node scripts/update-benchmark.js\",\n    \"version\": \"node scripts/version-history.js && git add HISTORY.md\"\n  }\n}\n/HISTORY.md\f00.5.0 / 2022-04-11\n==================\n\n  * Add `priority` option\n  * Fix `expires` option to reject invalid dates\n  * pref: improve default decode speed\n  * pref: remove slow string split in parse\n\n0.4.2 / 2022-02-02\n==================\n\n  * pref: read value only when assigning in parse\n  * pref: remove unnecessary regexp in parse\n\n0.4.1 / 2020-04-21\n==================\n\n  * Fix `maxAge` option to reject invalid values\n\n0.4.0 / 2019-05-15\n==================\n\n  * Add `SameSite=None` support\n\n0.3.1 / 2016-05-26\n==================\n\n  * Fix `sameSite: true` to work with draft-7 clients\n    - `true` now sends `SameSite=Strict` instead of `SameSite`\n\n0.3.0 / 2016-05-26\n==================\n\n  * Add `sameSite` option\n    - Replaces `firstPartyOnly` option, never implemented by browsers\n  * Improve error message when `encode` is not a function\n  * Improve error message when `expires` is not a `Date`\n\n0.2.4 / 2016-05-20\n==================\n\n  * perf: enable strict mode\n  * perf: use for loop in parse\n  * perf: use string concatination for serialization\n\n0.2.3 / 2015-10-25\n==================\n\n  * Fix cookie `Max-Age` to never be a floating point number\n\n0.2.2 / 2015-09-17\n==================\n\n  * Fix regression when setting empty cookie value\n    - Ease the new restriction, which is just basic header-level validation\n  * Fix typo in invalid value errors\n\n0.2.1 / 2015-09-17\n==================\n\n  * Throw on invalid values provided to `serialize`\n    - Ensures the resulting string is a valid HTTP header value\n\n0.2.0 / 2015-08-13\n==================\n\n  * Add `firstPartyOnly` option\n  * Throw better error for invalid argument to parse\n  * perf: hoist regular expression\n\n0.1.5 / 2015-09-17\n==================\n\n  * Fix regression when setting empty cookie value\n    - Ease the new restriction, which is just basic header-level validation\n  * Fix typo in invalid value errors\n\n0.1.4 / 2015-09-17\n==================\n\n  * Throw better error for invalid argument to parse\n  * Throw on invalid values provided to `serialize`\n    - Ensures the resulting string is a valid HTTP header value\n\n0.1.3 / 2015-05-19\n==================\n\n  * Reduce the scope of try-catch deopt\n  * Remove argument reassignments\n\n0.1.2 / 2014-04-16\n==================\n\n  * Remove unnecessary files from npm package\n\n0.1.1 / 2014-02-23\n==================\n\n  * Fix bad parse when cookie value contained a comma\n  * Fix support for `maxAge` of `0`\n\n0.1.0 / 2013-05-01\n==================\n\n  * Add `decode` option\n  * Add `encode` option\n\n0.0.6 / 2013-04-08\n==================\n\n  * Ignore cookie parts missing `=`\n\n0.0.5 / 2012-10-29\n==================\n\n  * Return raw cookie value if value unescape errors\n\n0.0.4 / 2012-06-21\n==================\n\n  * Use encode/decodeURIComponent for cookie encoding/decoding\n    - Improve server/client interoperability\n\n0.0.3 / 2012-06-06\n==================\n\n  * Only escape special characters per the cookie RFC\n\n0.0.2 / 2012-06-01\n==================\n\n  * Fix `maxAge` option to not throw error\n\n0.0.1 / 2012-05-28\n==================\n\n  * Add more tests\n\n0.0.0 / 2012-05-28\n==================\n\n  * Initial release\n/LICENSE\u0004(The MIT License)\n\nCopyright (c) 2012-2014 Roman Shtylman <shtylman@gmail.com>\nCopyright (c) 2015 Douglas Christopher Wilson <doug@somethingdoug.com>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n/README.md,\"# cookie\n\n[![NPM Version][npm-version-image]][npm-url]\n[![NPM Downloads][npm-downloads-image]][npm-url]\n[![Node.js Version][node-version-image]][node-version-url]\n[![Build Status][github-actions-ci-image]][github-actions-ci-url]\n[![Test Coverage][coveralls-image]][coveralls-url]\n\nBasic HTTP cookie parser and serializer for HTTP servers.\n\n## Installation\n\nThis is a [Node.js](https://nodejs.org/en/) module available through the\n[npm registry](https://www.npmjs.com/). Installation is done using the\n[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally):\n\n```sh\n$ npm install cookie\n```\n\n## API\n\n```js\nvar cookie = require('cookie');\n```\n\n### cookie.parse(str, options)\n\nParse an HTTP `Cookie` header string and returning an object of all cookie name-value pairs.\nThe `str` argument is the string representing a `Cookie` header value and `options` is an\noptional object containing additional parsing options.\n\n```js\nvar cookies = cookie.parse('foo=bar; equation=E%3Dmc%5E2');\n// { foo: 'bar', equation: 'E=mc^2' }\n```\n\n#### Options\n\n`cookie.parse` accepts these properties in the options object.\n\n##### decode\n\nSpecifies a function that will be used to decode a cookie's value. Since the value of a cookie\nhas a limited character set (and must be a simple string), this function can be used to decode\na previously-encoded cookie value into a JavaScript string or other object.\n\nThe default function is the global `decodeURIComponent`, which will decode any URL-encoded\nsequences into their byte representations.\n\n**note** if an error is thrown from this function, the original, non-decoded cookie value will\nbe returned as the cookie's value.\n\n### cookie.serialize(name, value, options)\n\nSerialize a cookie name-value pair into a `Set-Cookie` header string. The `name` argument is the\nname for the cookie, the `value` argument is the value to set the cookie to, and the `options`\nargument is an optional object containing additional serialization options.\n\n```js\nvar setCookie = cookie.serialize('foo', 'bar');\n// foo=bar\n```\n\n#### Options\n\n`cookie.serialize` accepts these properties in the options object.\n\n##### domain\n\nSpecifies the value for the [`Domain` `Set-Cookie` attribute][rfc-6265-5.2.3]. By default, no\ndomain is set, and most clients will consider the cookie to apply to only the current domain.\n\n##### encode\n\nSpecifies a function that will be used to encode a cookie's value. Since value of a cookie\nhas a limited character set (and must be a simple string), this function can be used to encode\na value into a string suited for a cookie's value.\n\nThe default function is the global `encodeURIComponent`, which will encode a JavaScript string\ninto UTF-8 byte sequences and then URL-encode any that fall outside of the cookie range.\n\n##### expires\n\nSpecifies the `Date` object to be the value for the [`Expires` `Set-Cookie` attribute][rfc-6265-5.2.1].\nBy default, no expiration is set, and most clients will consider this a \"non-persistent cookie\" and\nwill delete it on a condition like exiting a web browser application.\n\n**note** the [cookie storage model specification][rfc-6265-5.3] states that if both `expires` and\n`maxAge` are set, then `maxAge` takes precedence, but it is possible not all clients by obey this,\nso if both are set, they should point to the same date and time.\n\n##### httpOnly\n\nSpecifies the `boolean` value for the [`HttpOnly` `Set-Cookie` attribute][rfc-6265-5.2.6]. When truthy,\nthe `HttpOnly` attribute is set, otherwise it is not. By default, the `HttpOnly` attribute is not set.\n\n**note** be careful when setting this to `true`, as compliant clients will not allow client-side\nJavaScript to see the cookie in `document.cookie`.\n\n##### maxAge\n\nSpecifies the `number` (in seconds) to be the value for the [`Max-Age` `Set-Cookie` attribute][rfc-6265-5.2.2].\nThe given number will be converted to an integer by rounding down. By default, no maximum age is set.\n\n**note** the [cookie storage model specification][rfc-6265-5.3] states that if both `expires` and\n`maxAge` are set, then `maxAge` takes precedence, but it is possible not all clients by obey this,\nso if both are set, they should point to the same date and time.\n\n##### path\n\nSpecifies the value for the [`Path` `Set-Cookie` attribute][rfc-6265-5.2.4]. By default, the path\nis considered the [\"default path\"][rfc-6265-5.1.4].\n\n##### priority\n\nSpecifies the `string` to be the value for the [`Priority` `Set-Cookie` attribute][rfc-west-cookie-priority-00-4.1].\n\n  - `'low'` will set the `Priority` attribute to `Low`.\n  - `'medium'` will set the `Priority` attribute to `Medium`, the default priority when not set.\n  - `'high'` will set the `Priority` attribute to `High`.\n\nMore information about the different priority levels can be found in\n[the specification][rfc-west-cookie-priority-00-4.1].\n\n**note** This is an attribute that has not yet been fully standardized, and may change in the future.\nThis also means many clients may ignore this attribute until they understand it.\n\n##### sameSite\n\nSpecifies the `boolean` or `string` to be the value for the [`SameSite` `Set-Cookie` attribute][rfc-6265bis-09-5.4.7].\n\n  - `true` will set the `SameSite` attribute to `Strict` for strict same site enforcement.\n  - `false` will not set the `SameSite` attribute.\n  - `'lax'` will set the `SameSite` attribute to `Lax` for lax same site enforcement.\n  - `'none'` will set the `SameSite` attribute to `None` for an explicit cross-site cookie.\n  - `'strict'` will set the `SameSite` attribute to `Strict` for strict same site enforcement.\n\nMore information about the different enforcement levels can be found in\n[the specification][rfc-6265bis-09-5.4.7].\n\n**note** This is an attribute that has not yet been fully standardized, and may change in the future.\nThis also means many clients may ignore this attribute until they understand it.\n\n##### secure\n\nSpecifies the `boolean` value for the [`Secure` `Set-Cookie` attribute][rfc-6265-5.2.5]. When truthy,\nthe `Secure` attribute is set, otherwise it is not. By default, the `Secure` attribute is not set.\n\n**note** be careful when setting this to `true`, as compliant clients will not send the cookie back to\nthe server in the future if the browser does not have an HTTPS connection.\n\n## Example\n\nThe following example uses this module in conjunction with the Node.js core HTTP server\nto prompt a user for their name and display it back on future visits.\n\n```js\nvar cookie = require('cookie');\nvar escapeHtml = require('escape-html');\nvar http = require('http');\nvar url = require('url');\n\nfunction onRequest(req, res) {\n  // Parse the query string\n  var query = url.parse(req.url, true, true).query;\n\n  if (query && query.name) {\n    // Set a new cookie with the name\n    res.setHeader('Set-Cookie', cookie.serialize('name', String(query.name), {\n      httpOnly: true,\n      maxAge: 60 * 60 * 24 * 7 // 1 week\n    }));\n\n    // Redirect back after setting cookie\n    res.statusCode = 302;\n    res.setHeader('Location', req.headers.referer || '/');\n    res.end();\n    return;\n  }\n\n  // Parse the cookies on the request\n  var cookies = cookie.parse(req.headers.cookie || '');\n\n  // Get the visitor name set in the cookie\n  var name = cookies.name;\n\n  res.setHeader('Content-Type', 'text/html; charset=UTF-8');\n\n  if (name) {\n    res.write('<p>Welcome back, <b>' + escapeHtml(name) + '</b>!</p>');\n  } else {\n    res.write('<p>Hello, new visitor!</p>');\n  }\n\n  res.write('<form method=\"GET\">');\n  res.write('<input placeholder=\"enter your name\" name=\"name\"> <input type=\"submit\" value=\"Set Name\">');\n  res.end('</form>');\n}\n\nhttp.createServer(onRequest).listen(3000);\n```\n\n## Testing\n\n```sh\n$ npm test\n```\n\n## Benchmark\n\n```\n$ npm run bench\n\n> cookie@0.4.2 bench\n> node benchmark/index.js\n\n  node@16.14.0\n  v8@9.4.146.24-node.20\n  uv@1.43.0\n  zlib@1.2.11\n  brotli@1.0.9\n  ares@1.18.1\n  modules@93\n  nghttp2@1.45.1\n  napi@8\n  llhttp@6.0.4\n  openssl@1.1.1m+quic\n  cldr@40.0\n  icu@70.1\n  tz@2021a3\n  unicode@14.0\n  ngtcp2@0.1.0-DEV\n  nghttp3@0.1.0-DEV\n\n> node benchmark/parse-top.js\n\n  cookie.parse - top sites\n\n  15 tests completed.\n\n  parse accounts.google.com x 2,421,245 ops/sec ±0.80% (188 runs sampled)\n  parse apple.com           x 2,684,710 ops/sec ±0.59% (189 runs sampled)\n  parse cloudflare.com      x 2,231,418 ops/sec ±0.76% (186 runs sampled)\n  parse docs.google.com     x 2,316,357 ops/sec ±1.28% (187 runs sampled)\n  parse drive.google.com    x 2,363,543 ops/sec ±0.49% (189 runs sampled)\n  parse en.wikipedia.org    x   839,414 ops/sec ±0.53% (189 runs sampled)\n  parse linkedin.com        x   553,797 ops/sec ±0.63% (190 runs sampled)\n  parse maps.google.com     x 1,314,779 ops/sec ±0.72% (189 runs sampled)\n  parse microsoft.com       x   153,783 ops/sec ±0.53% (190 runs sampled)\n  parse play.google.com     x 2,249,574 ops/sec ±0.59% (187 runs sampled)\n  parse plus.google.com     x 2,258,682 ops/sec ±0.60% (188 runs sampled)\n  parse sites.google.com    x 2,247,069 ops/sec ±0.68% (189 runs sampled)\n  parse support.google.com  x 1,456,840 ops/sec ±0.70% (187 runs sampled)\n  parse www.google.com      x 1,046,028 ops/sec ±0.58% (188 runs sampled)\n  parse youtu.be            x   937,428 ops/sec ±1.47% (190 runs sampled)\n  parse youtube.com         x   963,878 ops/sec ±0.59% (190 runs sampled)\n\n> node benchmark/parse.js\n\n  cookie.parse - generic\n\n  6 tests completed.\n\n  simple      x 2,745,604 ops/sec ±0.77% (185 runs sampled)\n  decode      x   557,287 ops/sec ±0.60% (188 runs sampled)\n  unquote     x 2,498,475 ops/sec ±0.55% (189 runs sampled)\n  duplicates  x   868,591 ops/sec ±0.89% (187 runs sampled)\n  10 cookies  x   306,745 ops/sec ±0.49% (190 runs sampled)\n  100 cookies x    22,414 ops/sec ±2.38% (182 runs sampled)\n```\n\n## References\n\n- [RFC 6265: HTTP State Management Mechanism][rfc-6265]\n- [Same-site Cookies][rfc-6265bis-09-5.4.7]\n\n[rfc-west-cookie-priority-00-4.1]: https://tools.ietf.org/html/draft-west-cookie-priority-00#section-4.1\n[rfc-6265bis-09-5.4.7]: https://tools.ietf.org/html/draft-ietf-httpbis-rfc6265bis-09#section-5.4.7\n[rfc-6265]: https://tools.ietf.org/html/rfc6265\n[rfc-6265-5.1.4]: https://tools.ietf.org/html/rfc6265#section-5.1.4\n[rfc-6265-5.2.1]: https://tools.ietf.org/html/rfc6265#section-5.2.1\n[rfc-6265-5.2.2]: https://tools.ietf.org/html/rfc6265#section-5.2.2\n[rfc-6265-5.2.3]: https://tools.ietf.org/html/rfc6265#section-5.2.3\n[rfc-6265-5.2.4]: https://tools.ietf.org/html/rfc6265#section-5.2.4\n[rfc-6265-5.2.5]: https://tools.ietf.org/html/rfc6265#section-5.2.5\n[rfc-6265-5.2.6]: https://tools.ietf.org/html/rfc6265#section-5.2.6\n[rfc-6265-5.3]: https://tools.ietf.org/html/rfc6265#section-5.3\n\n## License\n\n[MIT](LICENSE)\n\n[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/cookie/master\n[coveralls-url]: https://coveralls.io/r/jshttp/cookie?branch=master\n[github-actions-ci-image]: https://img.shields.io/github/workflow/status/jshttp/cookie/ci/master?label=ci\n[github-actions-ci-url]: https://github.com/jshttp/cookie/actions/workflows/ci.yml\n[node-version-image]: https://badgen.net/npm/node/cookie\n[node-version-url]: https://nodejs.org/en/download\n[npm-downloads-image]: https://badgen.net/npm/dm/cookie\n[npm-url]: https://npmjs.org/package/cookie\n[npm-version-image]: https://badgen.net/npm/v/cookie\n/index.js\u0014h/*!\n * cookie\n * Copyright(c) 2012-2014 Roman Shtylman\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\n\nexports.parse = parse;\nexports.serialize = serialize;\n\n/**\n * Module variables.\n * @private\n */\n\nvar __toString = Object.prototype.toString\n\n/**\n * RegExp to match field-content in RFC 7230 sec 3.2\n *\n * field-content = field-vchar [ 1*( SP / HTAB ) field-vchar ]\n * field-vchar   = VCHAR / obs-text\n * obs-text      = %x80-FF\n */\n\nvar fieldContentRegExp = /^[\\u0009\\u0020-\\u007e\\u0080-\\u00ff]+$/;\n\n/**\n * Parse a cookie header.\n *\n * Parse the given cookie header string into an object\n * The object has the various cookies as keys(names) => values\n *\n * @param {string} str\n * @param {object} [options]\n * @return {object}\n * @public\n */\n\nfunction parse(str, options) {\n  if (typeof str !== 'string') {\n    throw new TypeError('argument str must be a string');\n  }\n\n  var obj = {}\n  var opt = options || {};\n  var dec = opt.decode || decode;\n\n  var index = 0\n  while (index < str.length) {\n    var eqIdx = str.indexOf('=', index)\n\n    // no more cookie pairs\n    if (eqIdx === -1) {\n      break\n    }\n\n    var endIdx = str.indexOf(';', index)\n\n    if (endIdx === -1) {\n      endIdx = str.length\n    } else if (endIdx < eqIdx) {\n      // backtrack on prior semicolon\n      index = str.lastIndexOf(';', eqIdx - 1) + 1\n      continue\n    }\n\n    var key = str.slice(index, eqIdx).trim()\n\n    // only assign once\n    if (undefined === obj[key]) {\n      var val = str.slice(eqIdx + 1, endIdx).trim()\n\n      // quoted values\n      if (val.charCodeAt(0) === 0x22) {\n        val = val.slice(1, -1)\n      }\n\n      obj[key] = tryDecode(val, dec);\n    }\n\n    index = endIdx + 1\n  }\n\n  return obj;\n}\n\n/**\n * Serialize data into a cookie header.\n *\n * Serialize the a name value pair into a cookie string suitable for\n * http headers. An optional options object specified cookie parameters.\n *\n * serialize('foo', 'bar', { httpOnly: true })\n *   => \"foo=bar; httpOnly\"\n *\n * @param {string} name\n * @param {string} val\n * @param {object} [options]\n * @return {string}\n * @public\n */\n\nfunction serialize(name, val, options) {\n  var opt = options || {};\n  var enc = opt.encode || encode;\n\n  if (typeof enc !== 'function') {\n    throw new TypeError('option encode is invalid');\n  }\n\n  if (!fieldContentRegExp.test(name)) {\n    throw new TypeError('argument name is invalid');\n  }\n\n  var value = enc(val);\n\n  if (value && !fieldContentRegExp.test(value)) {\n    throw new TypeError('argument val is invalid');\n  }\n\n  var str = name + '=' + value;\n\n  if (null != opt.maxAge) {\n    var maxAge = opt.maxAge - 0;\n\n    if (isNaN(maxAge) || !isFinite(maxAge)) {\n      throw new TypeError('option maxAge is invalid')\n    }\n\n    str += '; Max-Age=' + Math.floor(maxAge);\n  }\n\n  if (opt.domain) {\n    if (!fieldContentRegExp.test(opt.domain)) {\n      throw new TypeError('option domain is invalid');\n    }\n\n    str += '; Domain=' + opt.domain;\n  }\n\n  if (opt.path) {\n    if (!fieldContentRegExp.test(opt.path)) {\n      throw new TypeError('option path is invalid');\n    }\n\n    str += '; Path=' + opt.path;\n  }\n\n  if (opt.expires) {\n    var expires = opt.expires\n\n    if (!isDate(expires) || isNaN(expires.valueOf())) {\n      throw new TypeError('option expires is invalid');\n    }\n\n    str += '; Expires=' + expires.toUTCString()\n  }\n\n  if (opt.httpOnly) {\n    str += '; HttpOnly';\n  }\n\n  if (opt.secure) {\n    str += '; Secure';\n  }\n\n  if (opt.priority) {\n    var priority = typeof opt.priority === 'string'\n      ? opt.priority.toLowerCase()\n      : opt.priority\n\n    switch (priority) {\n      case 'low':\n        str += '; Priority=Low'\n        break\n      case 'medium':\n        str += '; Priority=Medium'\n        break\n      case 'high':\n        str += '; Priority=High'\n        break\n      default:\n        throw new TypeError('option priority is invalid')\n    }\n  }\n\n  if (opt.sameSite) {\n    var sameSite = typeof opt.sameSite === 'string'\n      ? opt.sameSite.toLowerCase() : opt.sameSite;\n\n    switch (sameSite) {\n      case true:\n        str += '; SameSite=Strict';\n        break;\n      case 'lax':\n        str += '; SameSite=Lax';\n        break;\n      case 'strict':\n        str += '; SameSite=Strict';\n        break;\n      case 'none':\n        str += '; SameSite=None';\n        break;\n      default:\n        throw new TypeError('option sameSite is invalid');\n    }\n  }\n\n  return str;\n}\n\n/**\n * URL-decode string value. Optimized to skip native call when no %.\n *\n * @param {string} str\n * @returns {string}\n */\n\nfunction decode (str) {\n  return str.indexOf('%') !== -1\n    ? decodeURIComponent(str)\n    : str\n}\n\n/**\n * URL-encode value.\n *\n * @param {string} str\n * @returns {string}\n */\n\nfunction encode (val) {\n  return encodeURIComponent(val)\n}\n\n/**\n * Determine if value is a Date.\n *\n * @param {*} val\n * @private\n */\n\nfunction isDate (val) {\n  return __toString.call(val) === '[object Date]' ||\n    val instanceof Date\n}\n\n/**\n * Try decoding a string using a decoding function.\n *\n * @param {string} str\n * @param {function} decode\n * @private\n */\n\nfunction tryDecode(str, decode) {\n  try {\n    return decode(str);\n  } catch (e) {\n    return str;\n  }\n}\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/Y29yc0AyLjguNQ==",
    "content": "/README.md## cors\n\n[![NPM Version][npm-image]][npm-url]\n[![NPM Downloads][downloads-image]][downloads-url]\n[![Build Status][travis-image]][travis-url]\n[![Test Coverage][coveralls-image]][coveralls-url]\n\nCORS is a node.js package for providing a [Connect](http://www.senchalabs.org/connect/)/[Express](http://expressjs.com/) middleware that can be used to enable [CORS](http://en.wikipedia.org/wiki/Cross-origin_resource_sharing) with various options.\n\n**[Follow me (@troygoode) on Twitter!](https://twitter.com/intent/user?screen_name=troygoode)**\n\n* [Installation](#installation)\n* [Usage](#usage)\n  * [Simple Usage](#simple-usage-enable-all-cors-requests)\n  * [Enable CORS for a Single Route](#enable-cors-for-a-single-route)\n  * [Configuring CORS](#configuring-cors)\n  * [Configuring CORS Asynchronously](#configuring-cors-asynchronously)\n  * [Enabling CORS Pre-Flight](#enabling-cors-pre-flight)\n* [Configuration Options](#configuration-options)\n* [Demo](#demo)\n* [License](#license)\n* [Author](#author)\n\n## Installation\n\nThis is a [Node.js](https://nodejs.org/en/) module available through the\n[npm registry](https://www.npmjs.com/). Installation is done using the\n[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally):\n\n```sh\n$ npm install cors\n```\n\n## Usage\n\n### Simple Usage (Enable *All* CORS Requests)\n\n```javascript\nvar express = require('express')\nvar cors = require('cors')\nvar app = express()\n\napp.use(cors())\n\napp.get('/products/:id', function (req, res, next) {\n  res.json({msg: 'This is CORS-enabled for all origins!'})\n})\n\napp.listen(80, function () {\n  console.log('CORS-enabled web server listening on port 80')\n})\n```\n\n### Enable CORS for a Single Route\n\n```javascript\nvar express = require('express')\nvar cors = require('cors')\nvar app = express()\n\napp.get('/products/:id', cors(), function (req, res, next) {\n  res.json({msg: 'This is CORS-enabled for a Single Route'})\n})\n\napp.listen(80, function () {\n  console.log('CORS-enabled web server listening on port 80')\n})\n```\n\n### Configuring CORS\n\n```javascript\nvar express = require('express')\nvar cors = require('cors')\nvar app = express()\n\nvar corsOptions = {\n  origin: 'http://example.com',\n  optionsSuccessStatus: 200 // some legacy browsers (IE11, various SmartTVs) choke on 204\n}\n\napp.get('/products/:id', cors(corsOptions), function (req, res, next) {\n  res.json({msg: 'This is CORS-enabled for only example.com.'})\n})\n\napp.listen(80, function () {\n  console.log('CORS-enabled web server listening on port 80')\n})\n```\n\n### Configuring CORS w/ Dynamic Origin\n\n```javascript\nvar express = require('express')\nvar cors = require('cors')\nvar app = express()\n\nvar whitelist = ['http://example1.com', 'http://example2.com']\nvar corsOptions = {\n  origin: function (origin, callback) {\n    if (whitelist.indexOf(origin) !== -1) {\n      callback(null, true)\n    } else {\n      callback(new Error('Not allowed by CORS'))\n    }\n  }\n}\n\napp.get('/products/:id', cors(corsOptions), function (req, res, next) {\n  res.json({msg: 'This is CORS-enabled for a whitelisted domain.'})\n})\n\napp.listen(80, function () {\n  console.log('CORS-enabled web server listening on port 80')\n})\n```\n\nIf you do not want to block REST tools or server-to-server requests,\nadd a `!origin` check in the origin function like so:\n\n```javascript\nvar corsOptions = {\n  origin: function (origin, callback) {\n    if (whitelist.indexOf(origin) !== -1 || !origin) {\n      callback(null, true)\n    } else {\n      callback(new Error('Not allowed by CORS'))\n    }\n  }\n}\n```\n\n### Enabling CORS Pre-Flight\n\nCertain CORS requests are considered 'complex' and require an initial\n`OPTIONS` request (called the \"pre-flight request\"). An example of a\n'complex' CORS request is one that uses an HTTP verb other than\nGET/HEAD/POST (such as DELETE) or that uses custom headers. To enable\npre-flighting, you must add a new OPTIONS handler for the route you want\nto support:\n\n```javascript\nvar express = require('express')\nvar cors = require('cors')\nvar app = express()\n\napp.options('/products/:id', cors()) // enable pre-flight request for DELETE request\napp.del('/products/:id', cors(), function (req, res, next) {\n  res.json({msg: 'This is CORS-enabled for all origins!'})\n})\n\napp.listen(80, function () {\n  console.log('CORS-enabled web server listening on port 80')\n})\n```\n\nYou can also enable pre-flight across-the-board like so:\n\n```javascript\napp.options('*', cors()) // include before other routes\n```\n\n### Configuring CORS Asynchronously\n\n```javascript\nvar express = require('express')\nvar cors = require('cors')\nvar app = express()\n\nvar whitelist = ['http://example1.com', 'http://example2.com']\nvar corsOptionsDelegate = function (req, callback) {\n  var corsOptions;\n  if (whitelist.indexOf(req.header('Origin')) !== -1) {\n    corsOptions = { origin: true } // reflect (enable) the requested origin in the CORS response\n  } else {\n    corsOptions = { origin: false } // disable CORS for this request\n  }\n  callback(null, corsOptions) // callback expects two parameters: error and options\n}\n\napp.get('/products/:id', cors(corsOptionsDelegate), function (req, res, next) {\n  res.json({msg: 'This is CORS-enabled for a whitelisted domain.'})\n})\n\napp.listen(80, function () {\n  console.log('CORS-enabled web server listening on port 80')\n})\n```\n\n## Configuration Options\n\n* `origin`: Configures the **Access-Control-Allow-Origin** CORS header. Possible values:\n  - `Boolean` - set `origin` to `true` to reflect the [request origin](http://tools.ietf.org/html/draft-abarth-origin-09), as defined by `req.header('Origin')`, or set it to `false` to disable CORS.\n  - `String` - set `origin` to a specific origin. For example if you set it to `\"http://example.com\"` only requests from \"http://example.com\" will be allowed.\n  - `RegExp` - set `origin` to a regular expression pattern which will be used to test the request origin. If it's a match, the request origin will be reflected. For example the pattern `/example\\.com$/` will reflect any request that is coming from an origin ending with \"example.com\".\n  - `Array` - set `origin` to an array of valid origins. Each origin can be a `String` or a `RegExp`. For example `[\"http://example1.com\", /\\.example2\\.com$/]` will accept any request from \"http://example1.com\" or from a subdomain of \"example2.com\".\n  - `Function` - set `origin` to a function implementing some custom logic. The function takes the request origin as the first parameter and a callback (which expects the signature `err [object], allow [bool]`) as the second.\n* `methods`: Configures the **Access-Control-Allow-Methods** CORS header. Expects a comma-delimited string (ex: 'GET,PUT,POST') or an array (ex: `['GET', 'PUT', 'POST']`).\n* `allowedHeaders`: Configures the **Access-Control-Allow-Headers** CORS header. Expects a comma-delimited string (ex: 'Content-Type,Authorization') or an array (ex: `['Content-Type', 'Authorization']`). If not specified, defaults to reflecting the headers specified in the request's **Access-Control-Request-Headers** header.\n* `exposedHeaders`: Configures the **Access-Control-Expose-Headers** CORS header. Expects a comma-delimited string (ex: 'Content-Range,X-Content-Range') or an array (ex: `['Content-Range', 'X-Content-Range']`). If not specified, no custom headers are exposed.\n* `credentials`: Configures the **Access-Control-Allow-Credentials** CORS header. Set to `true` to pass the header, otherwise it is omitted.\n* `maxAge`: Configures the **Access-Control-Max-Age** CORS header. Set to an integer to pass the header, otherwise it is omitted.\n* `preflightContinue`: Pass the CORS preflight response to the next handler.\n* `optionsSuccessStatus`: Provides a status code to use for successful `OPTIONS` requests, since some legacy browsers (IE11, various SmartTVs) choke on `204`.\n\nThe default configuration is the equivalent of:\n\n```json\n{\n  \"origin\": \"*\",\n  \"methods\": \"GET,HEAD,PUT,PATCH,POST,DELETE\",\n  \"preflightContinue\": false,\n  \"optionsSuccessStatus\": 204\n}\n```\n\nFor details on the effect of each CORS header, read [this](http://www.html5rocks.com/en/tutorials/cors/) article on HTML5 Rocks.\n\n## Demo\n\nA demo that illustrates CORS working (and not working) using jQuery is available here: [http://node-cors-client.herokuapp.com/](http://node-cors-client.herokuapp.com/)\n\nCode for that demo can be found here:\n\n* Client: [https://github.com/TroyGoode/node-cors-client](https://github.com/TroyGoode/node-cors-client)\n* Server: [https://github.com/TroyGoode/node-cors-server](https://github.com/TroyGoode/node-cors-server)\n\n## License\n\n[MIT License](http://www.opensource.org/licenses/mit-license.php)\n\n## Author\n\n[Troy Goode](https://github.com/TroyGoode) ([troygoode@gmail.com](mailto:troygoode@gmail.com))\n\n[coveralls-image]: https://img.shields.io/coveralls/expressjs/cors/master.svg\n[coveralls-url]: https://coveralls.io/r/expressjs/cors?branch=master\n[downloads-image]: https://img.shields.io/npm/dm/cors.svg\n[downloads-url]: https://npmjs.org/package/cors\n[npm-image]: https://img.shields.io/npm/v/cors.svg\n[npm-url]: https://npmjs.org/package/cors\n[travis-image]: https://img.shields.io/travis/expressjs/cors/master.svg\n[travis-url]: https://travis-ci.org/expressjs/cors\n/CONTRIBUTING.md\u0004\u0004# contributing to `cors`\n\nCORS is a node.js package for providing a [connect](http://www.senchalabs.org/connect/)/[express](http://expressjs.com/) middleware that can be used to enable [CORS](http://en.wikipedia.org/wiki/Cross-origin_resource_sharing) with various options. Learn more about the project in [the README](README.md).\n\n## The CORS Spec\n\n[http://www.w3.org/TR/cors/](http://www.w3.org/TR/cors/)\n\n## Pull Requests Welcome\n\n* Include `'use strict';` in every javascript file.\n* 2 space indentation.\n* Please run the testing steps below before submitting.\n\n## Testing\n\n```bash\n$ npm install\n$ npm test\n```\n\n## Interactive Testing Harness\n\n[http://node-cors-client.herokuapp.com](http://node-cors-client.herokuapp.com)\n\nRelated git repositories:\n\n* [https://github.com/TroyGoode/node-cors-server](https://github.com/TroyGoode/node-cors-server)\n* [https://github.com/TroyGoode/node-cors-client](https://github.com/TroyGoode/node-cors-client)\n\n## License\n\n[MIT License](http://www.opensource.org/licenses/mit-license.php)\n/lib/index.js\u0019(function () {\n\n  'use strict';\n\n  var assign = require('object-assign');\n  var vary = require('vary');\n\n  var defaults = {\n    origin: '*',\n    methods: 'GET,HEAD,PUT,PATCH,POST,DELETE',\n    preflightContinue: false,\n    optionsSuccessStatus: 204\n  };\n\n  function isString(s) {\n    return typeof s === 'string' || s instanceof String;\n  }\n\n  function isOriginAllowed(origin, allowedOrigin) {\n    if (Array.isArray(allowedOrigin)) {\n      for (var i = 0; i < allowedOrigin.length; ++i) {\n        if (isOriginAllowed(origin, allowedOrigin[i])) {\n          return true;\n        }\n      }\n      return false;\n    } else if (isString(allowedOrigin)) {\n      return origin === allowedOrigin;\n    } else if (allowedOrigin instanceof RegExp) {\n      return allowedOrigin.test(origin);\n    } else {\n      return !!allowedOrigin;\n    }\n  }\n\n  function configureOrigin(options, req) {\n    var requestOrigin = req.headers.origin,\n      headers = [],\n      isAllowed;\n\n    if (!options.origin || options.origin === '*') {\n      // allow any origin\n      headers.push([{\n        key: 'Access-Control-Allow-Origin',\n        value: '*'\n      }]);\n    } else if (isString(options.origin)) {\n      // fixed origin\n      headers.push([{\n        key: 'Access-Control-Allow-Origin',\n        value: options.origin\n      }]);\n      headers.push([{\n        key: 'Vary',\n        value: 'Origin'\n      }]);\n    } else {\n      isAllowed = isOriginAllowed(requestOrigin, options.origin);\n      // reflect origin\n      headers.push([{\n        key: 'Access-Control-Allow-Origin',\n        value: isAllowed ? requestOrigin : false\n      }]);\n      headers.push([{\n        key: 'Vary',\n        value: 'Origin'\n      }]);\n    }\n\n    return headers;\n  }\n\n  function configureMethods(options) {\n    var methods = options.methods;\n    if (methods.join) {\n      methods = options.methods.join(','); // .methods is an array, so turn it into a string\n    }\n    return {\n      key: 'Access-Control-Allow-Methods',\n      value: methods\n    };\n  }\n\n  function configureCredentials(options) {\n    if (options.credentials === true) {\n      return {\n        key: 'Access-Control-Allow-Credentials',\n        value: 'true'\n      };\n    }\n    return null;\n  }\n\n  function configureAllowedHeaders(options, req) {\n    var allowedHeaders = options.allowedHeaders || options.headers;\n    var headers = [];\n\n    if (!allowedHeaders) {\n      allowedHeaders = req.headers['access-control-request-headers']; // .headers wasn't specified, so reflect the request headers\n      headers.push([{\n        key: 'Vary',\n        value: 'Access-Control-Request-Headers'\n      }]);\n    } else if (allowedHeaders.join) {\n      allowedHeaders = allowedHeaders.join(','); // .headers is an array, so turn it into a string\n    }\n    if (allowedHeaders && allowedHeaders.length) {\n      headers.push([{\n        key: 'Access-Control-Allow-Headers',\n        value: allowedHeaders\n      }]);\n    }\n\n    return headers;\n  }\n\n  function configureExposedHeaders(options) {\n    var headers = options.exposedHeaders;\n    if (!headers) {\n      return null;\n    } else if (headers.join) {\n      headers = headers.join(','); // .headers is an array, so turn it into a string\n    }\n    if (headers && headers.length) {\n      return {\n        key: 'Access-Control-Expose-Headers',\n        value: headers\n      };\n    }\n    return null;\n  }\n\n  function configureMaxAge(options) {\n    var maxAge = (typeof options.maxAge === 'number' || options.maxAge) && options.maxAge.toString()\n    if (maxAge && maxAge.length) {\n      return {\n        key: 'Access-Control-Max-Age',\n        value: maxAge\n      };\n    }\n    return null;\n  }\n\n  function applyHeaders(headers, res) {\n    for (var i = 0, n = headers.length; i < n; i++) {\n      var header = headers[i];\n      if (header) {\n        if (Array.isArray(header)) {\n          applyHeaders(header, res);\n        } else if (header.key === 'Vary' && header.value) {\n          vary(res, header.value);\n        } else if (header.value) {\n          res.setHeader(header.key, header.value);\n        }\n      }\n    }\n  }\n\n  function cors(options, req, res, next) {\n    var headers = [],\n      method = req.method && req.method.toUpperCase && req.method.toUpperCase();\n\n    if (method === 'OPTIONS') {\n      // preflight\n      headers.push(configureOrigin(options, req));\n      headers.push(configureCredentials(options, req));\n      headers.push(configureMethods(options, req));\n      headers.push(configureAllowedHeaders(options, req));\n      headers.push(configureMaxAge(options, req));\n      headers.push(configureExposedHeaders(options, req));\n      applyHeaders(headers, res);\n\n      if (options.preflightContinue) {\n        next();\n      } else {\n        // Safari (and potentially other browsers) need content-length 0,\n        //   for 204 or they just hang waiting for a body\n        res.statusCode = options.optionsSuccessStatus;\n        res.setHeader('Content-Length', '0');\n        res.end();\n      }\n    } else {\n      // actual response\n      headers.push(configureOrigin(options, req));\n      headers.push(configureCredentials(options, req));\n      headers.push(configureExposedHeaders(options, req));\n      applyHeaders(headers, res);\n      next();\n    }\n  }\n\n  function middlewareWrapper(o) {\n    // if options are static (either via defaults or custom options passed in), wrap in a function\n    var optionsCallback = null;\n    if (typeof o === 'function') {\n      optionsCallback = o;\n    } else {\n      optionsCallback = function (req, cb) {\n        cb(null, o);\n      };\n    }\n\n    return function corsMiddleware(req, res, next) {\n      optionsCallback(req, function (err, options) {\n        if (err) {\n          next(err);\n        } else {\n          var corsOptions = assign({}, defaults, options);\n          var originCallback = null;\n          if (corsOptions.origin && typeof corsOptions.origin === 'function') {\n            originCallback = corsOptions.origin;\n          } else if (corsOptions.origin) {\n            originCallback = function (origin, cb) {\n              cb(null, corsOptions.origin);\n            };\n          }\n\n          if (originCallback) {\n            originCallback(req.headers.origin, function (err2, origin) {\n              if (err2 || !origin) {\n                next(err2);\n              } else {\n                corsOptions.origin = origin;\n                cors(corsOptions, req, res, next);\n              }\n            });\n          } else {\n            next();\n          }\n        }\n      });\n    };\n  }\n\n  // can pass either an options hash, an options delegate, or nothing\n  module.exports = middlewareWrapper;\n\n}());\n/LICENSE\u0004G(The MIT License)\n\nCopyright (c) 2013 Troy Goode <troygoode@gmail.com>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n/HISTORY.md\u00042.8.5 / 2018-11-04\n==================\n\n  * Fix setting `maxAge` option to `0`\n\n2.8.4 / 2017-07-12\n==================\n\n  * Work-around Safari bug in default pre-flight response\n\n2.8.3 / 2017-03-29\n==================\n\n  * Fix error when options delegate missing `methods` option\n\n2.8.2 / 2017-03-28\n==================\n\n  * Fix error when frozen options are passed\n  * Send \"Vary: Origin\" when using regular expressions\n  * Send \"Vary: Access-Control-Request-Headers\" when dynamic `allowedHeaders`\n\n2.8.1 / 2016-09-08\n==================\n\nThis release only changed documentation.\n\n2.8.0 / 2016-08-23\n==================\n\n  * Add `optionsSuccessStatus` option\n\n2.7.2 / 2016-08-23\n==================\n\n  * Fix error when Node.js running in strict mode\n\n2.7.1 / 2015-05-28\n==================\n\n  * Move module into expressjs organization\n\n2.7.0 / 2015-05-28\n==================\n\n  * Allow array of matching condition as `origin` option\n  * Allow regular expression as `origin` option\n\n2.6.1 / 2015-05-28\n==================\n\n  * Update `license` in package.json\n\n2.6.0 / 2015-04-27\n==================\n\n  * Add `preflightContinue` option\n  * Fix \"Vary: Origin\" header added for \"*\"\n/package.json\u0003c{\n  \"name\": \"cors\",\n  \"description\": \"Node.js CORS middleware\",\n  \"version\": \"2.8.5\",\n  \"author\": \"Troy Goode <troygoode@gmail.com> (https://github.com/troygoode/)\",\n  \"license\": \"MIT\",\n  \"keywords\": [\n    \"cors\",\n    \"express\",\n    \"connect\",\n    \"middleware\"\n  ],\n  \"repository\": \"expressjs/cors\",\n  \"main\": \"./lib/index.js\",\n  \"dependencies\": {\n    \"object-assign\": \"^4\",\n    \"vary\": \"^1\"\n  },\n  \"devDependencies\": {\n    \"after\": \"0.8.2\",\n    \"eslint\": \"2.13.1\",\n    \"express\": \"4.16.3\",\n    \"mocha\": \"5.2.0\",\n    \"nyc\": \"13.1.0\",\n    \"supertest\": \"3.3.0\"\n  },\n  \"files\": [\n    \"lib/index.js\",\n    \"CONTRIBUTING.md\",\n    \"HISTORY.md\",\n    \"LICENSE\",\n    \"README.md\"\n  ],\n  \"engines\": {\n    \"node\": \">= 0.10\"\n  },\n  \"scripts\": {\n    \"test\": \"npm run lint && nyc --reporter=html --reporter=text mocha --require test/support/env\",\n    \"lint\": \"eslint lib test\"\n  }\n}\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/Y2FjQDYuNy4xNA==",
    "content": "/deno/deno.ts// Ignore the TypeScript errors\n// Since this file will only be used in Deno runtime\nexport const processArgs = ['deno', 'cli'].concat(Deno.args);\nexport const platformInfo = `${Deno.build.os}-${Deno.build.arch} deno-${Deno.version.deno}`;/LICENSE\u0004]The MIT License (MIT)\n\nCopyright (c) EGOIST <0x142857@gmail.com> (https://github.com/egoist)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n/dist/index.d.ts\u0013import { EventEmitter } from 'events';\n\ninterface OptionConfig {\n    default?: any;\n    type?: any[];\n}\ndeclare class Option {\n    rawName: string;\n    description: string;\n    /** Option name */\n    name: string;\n    /** Option name and aliases */\n    names: string[];\n    isBoolean?: boolean;\n    required?: boolean;\n    config: OptionConfig;\n    negated: boolean;\n    constructor(rawName: string, description: string, config?: OptionConfig);\n}\n\ninterface CommandArg {\n    required: boolean;\n    value: string;\n    variadic: boolean;\n}\ninterface HelpSection {\n    title?: string;\n    body: string;\n}\ninterface CommandConfig {\n    allowUnknownOptions?: boolean;\n    ignoreOptionDefaultValue?: boolean;\n}\ndeclare type HelpCallback = (sections: HelpSection[]) => void | HelpSection[];\ndeclare type CommandExample = ((bin: string) => string) | string;\ndeclare class Command {\n    rawName: string;\n    description: string;\n    config: CommandConfig;\n    cli: CAC;\n    options: Option[];\n    aliasNames: string[];\n    name: string;\n    args: CommandArg[];\n    commandAction?: (...args: any[]) => any;\n    usageText?: string;\n    versionNumber?: string;\n    examples: CommandExample[];\n    helpCallback?: HelpCallback;\n    globalCommand?: GlobalCommand;\n    constructor(rawName: string, description: string, config: CommandConfig, cli: CAC);\n    usage(text: string): this;\n    allowUnknownOptions(): this;\n    ignoreOptionDefaultValue(): this;\n    version(version: string, customFlags?: string): this;\n    example(example: CommandExample): this;\n    /**\n     * Add a option for this command\n     * @param rawName Raw option name(s)\n     * @param description Option description\n     * @param config Option config\n     */\n    option(rawName: string, description: string, config?: OptionConfig): this;\n    alias(name: string): this;\n    action(callback: (...args: any[]) => any): this;\n    /**\n     * Check if a command name is matched by this command\n     * @param name Command name\n     */\n    isMatched(name: string): boolean;\n    get isDefaultCommand(): boolean;\n    get isGlobalCommand(): boolean;\n    /**\n     * Check if an option is registered in this command\n     * @param name Option name\n     */\n    hasOption(name: string): Option | undefined;\n    outputHelp(): void;\n    outputVersion(): void;\n    checkRequiredArgs(): void;\n    /**\n     * Check if the parsed options contain any unknown options\n     *\n     * Exit and output error when true\n     */\n    checkUnknownOptions(): void;\n    /**\n     * Check if the required string-type options exist\n     */\n    checkOptionValue(): void;\n}\ndeclare class GlobalCommand extends Command {\n    constructor(cli: CAC);\n}\n\ninterface ParsedArgv {\n    args: ReadonlyArray<string>;\n    options: {\n        [k: string]: any;\n    };\n}\ndeclare class CAC extends EventEmitter {\n    /** The program name to display in help and version message */\n    name: string;\n    commands: Command[];\n    globalCommand: GlobalCommand;\n    matchedCommand?: Command;\n    matchedCommandName?: string;\n    /**\n     * Raw CLI arguments\n     */\n    rawArgs: string[];\n    /**\n     * Parsed CLI arguments\n     */\n    args: ParsedArgv['args'];\n    /**\n     * Parsed CLI options, camelCased\n     */\n    options: ParsedArgv['options'];\n    showHelpOnExit?: boolean;\n    showVersionOnExit?: boolean;\n    /**\n     * @param name The program name to display in help and version message\n     */\n    constructor(name?: string);\n    /**\n     * Add a global usage text.\n     *\n     * This is not used by sub-commands.\n     */\n    usage(text: string): this;\n    /**\n     * Add a sub-command\n     */\n    command(rawName: string, description?: string, config?: CommandConfig): Command;\n    /**\n     * Add a global CLI option.\n     *\n     * Which is also applied to sub-commands.\n     */\n    option(rawName: string, description: string, config?: OptionConfig): this;\n    /**\n     * Show help message when `-h, --help` flags appear.\n     *\n     */\n    help(callback?: HelpCallback): this;\n    /**\n     * Show version number when `-v, --version` flags appear.\n     *\n     */\n    version(version: string, customFlags?: string): this;\n    /**\n     * Add a global example.\n     *\n     * This example added here will not be used by sub-commands.\n     */\n    example(example: CommandExample): this;\n    /**\n     * Output the corresponding help message\n     * When a sub-command is matched, output the help message for the command\n     * Otherwise output the global one.\n     *\n     */\n    outputHelp(): void;\n    /**\n     * Output the version number.\n     *\n     */\n    outputVersion(): void;\n    private setParsedInfo;\n    unsetMatchedCommand(): void;\n    /**\n     * Parse argv\n     */\n    parse(argv?: string[], { \n    /** Whether to run the action for matched command */\n    run, }?: {\n        run?: boolean | undefined;\n    }): ParsedArgv;\n    private mri;\n    runMatchedCommand(): any;\n}\n\n/**\n * @param name The program name to display in help and version message\n */\ndeclare const cac: (name?: string) => CAC;\n\nexport default cac;\nexport { CAC, Command, cac };\n/README.md=<img width=\"945\" alt=\"2017-07-26 9 27 05\" src=\"https://user-images.githubusercontent.com/8784712/28623641-373450f4-7249-11e7-854d-1b076dab274d.png\">\n\n[![NPM version](https://img.shields.io/npm/v/cac.svg?style=flat)](https://npmjs.com/package/cac) [![NPM downloads](https://img.shields.io/npm/dm/cac.svg?style=flat)](https://npmjs.com/package/cac) [![CircleCI](https://circleci.com/gh/cacjs/cac/tree/master.svg?style=shield)](https://circleci.com/gh/cacjs/cac/tree/master) [![Codecov](https://badgen.net/codecov/c/github/cacjs/cac/master)](https://codecov.io/gh/cacjs/cac) [![donate](https://img.shields.io/badge/$-donate-ff69b4.svg?maxAge=2592000&style=flat)](https://github.com/egoist/donate) [![chat](https://img.shields.io/badge/chat-on%20discord-7289DA.svg?style=flat)](https://chat.egoist.moe) [![install size](https://badgen.net/packagephobia/install/cac)](https://packagephobia.now.sh/result?p=cac)\n\n## Introduction\n\n**C**ommand **A**nd **C**onquer is a JavaScript library for building CLI apps.\n\n## Features\n\n- **Super light-weight**: No dependency, just a single file.\n- **Easy to learn**. There're only 4 APIs you need to learn for building simple CLIs: `cli.option` `cli.version` `cli.help` `cli.parse`.\n- **Yet so powerful**. Enable features like default command, git-like subcommands, validation for required arguments and options, variadic arguments, dot-nested options, automated help message generation and so on.\n- **Developer friendly**. Written in TypeScript.\n\n## Table of Contents\n\n<!-- toc -->\n\n- [Install](#install)\n- [Usage](#usage)\n  - [Simple Parsing](#simple-parsing)\n  - [Display Help Message and Version](#display-help-message-and-version)\n  - [Command-specific Options](#command-specific-options)\n  - [Dash in option names](#dash-in-option-names)\n  - [Brackets](#brackets)\n  - [Negated Options](#negated-options)\n  - [Variadic Arguments](#variadic-arguments)\n  - [Dot-nested Options](#dot-nested-options)\n  - [Default Command](#default-command)\n  - [Supply an array as option value](#supply-an-array-as-option-value)\n  - [Error Handling](#error-handling)\n  - [With TypeScript](#with-typescript)\n  - [With Deno](#with-deno)\n- [Projects Using CAC](#projects-using-cac)\n- [References](#references)\n  - [CLI Instance](#cli-instance)\n    - [cac(name?)](#cacname)\n    - [cli.command(name, description, config?)](#clicommandname-description-config)\n    - [cli.option(name, description, config?)](#clioptionname-description-config)\n    - [cli.parse(argv?)](#cliparseargv)\n    - [cli.version(version, customFlags?)](#cliversionversion-customflags)\n    - [cli.help(callback?)](#clihelpcallback)\n    - [cli.outputHelp()](#clioutputhelp)\n    - [cli.usage(text)](#cliusagetext)\n  - [Command Instance](#command-instance)\n    - [command.option()](#commandoption)\n    - [command.action(callback)](#commandactioncallback)\n    - [command.alias(name)](#commandaliasname)\n    - [command.allowUnknownOptions()](#commandallowunknownoptions)\n    - [command.example(example)](#commandexampleexample)\n    - [command.usage(text)](#commandusagetext)\n  - [Events](#events)\n- [FAQ](#faq)\n  - [How is the name written and pronounced?](#how-is-the-name-written-and-pronounced)\n  - [Why not use Commander.js?](#why-not-use-commanderjs)\n- [Project Stats](#project-stats)\n- [Contributing](#contributing)\n- [Author](#author)\n\n<!-- tocstop -->\n\n## Install\n\n```bash\nyarn add cac\n```\n\n## Usage\n\n### Simple Parsing\n\nUse CAC as simple argument parser:\n\n```js\n// examples/basic-usage.js\nconst cli = require('cac')()\n\ncli.option('--type <type>', 'Choose a project type', {\n  default: 'node',\n})\n\nconst parsed = cli.parse()\n\nconsole.log(JSON.stringify(parsed, null, 2))\n```\n\n<img width=\"500\" alt=\"2018-11-26 12 28 03\" src=\"https://user-images.githubusercontent.com/8784712/48981576-2a871000-f112-11e8-8151-80f61e9b9908.png\">\n\n### Display Help Message and Version\n\n```js\n// examples/help.js\nconst cli = require('cac')()\n\ncli.option('--type [type]', 'Choose a project type', {\n  default: 'node',\n})\ncli.option('--name <name>', 'Provide your name')\n\ncli.command('lint [...files]', 'Lint files').action((files, options) => {\n  console.log(files, options)\n})\n\n// Display help message when `-h` or `--help` appears\ncli.help()\n// Display version number when `-v` or `--version` appears\n// It's also used in help message\ncli.version('0.0.0')\n\ncli.parse()\n```\n\n<img width=\"500\" alt=\"2018-11-25 8 21 14\" src=\"https://user-images.githubusercontent.com/8784712/48979012-acb20d00-f0ef-11e8-9cc6-8ffca00ab78a.png\">\n\n### Command-specific Options\n\nYou can attach options to a command.\n\n```js\nconst cli = require('cac')()\n\ncli\n  .command('rm <dir>', 'Remove a dir')\n  .option('-r, --recursive', 'Remove recursively')\n  .action((dir, options) => {\n    console.log('remove ' + dir + (options.recursive ? ' recursively' : ''))\n  })\n\ncli.help()\n\ncli.parse()\n```\n\nA command's options are validated when the command is used. Any unknown options will be reported as an error. However, if an action-based command does not define an action, then the options are not validated. If you really want to use unknown options, use [`command.allowUnknownOptions`](#commandallowunknownoptions).\n\n<img alt=\"command options\" width=\"500\" src=\"https://user-images.githubusercontent.com/8784712/49065552-49dc8500-f259-11e8-9c7b-a7c32d70920e.png\">\n\n### Dash in option names\n\nOptions in kebab-case should be referenced in camelCase in your code:\n\n```js\ncli\n  .command('dev', 'Start dev server')\n  .option('--clear-screen', 'Clear screen')\n  .action((options) => {\n    console.log(options.clearScreen)\n  })\n```\n\nIn fact `--clear-screen` and `--clearScreen` are both mapped to `options.clearScreen`.\n\n### Brackets\n\nWhen using brackets in command name, angled brackets indicate required command arguments, while square bracket indicate optional arguments.\n\nWhen using brackets in option name, angled brackets indicate that a string / number value is required, while square bracket indicate that the value can also be `true`.\n\n```js\nconst cli = require('cac')()\n\ncli\n  .command('deploy <folder>', 'Deploy a folder to AWS')\n  .option('--scale [level]', 'Scaling level')\n  .action((folder, options) => {\n    // ...\n  })\n\ncli\n  .command('build [project]', 'Build a project')\n  .option('--out <dir>', 'Output directory')\n  .action((folder, options) => {\n    // ...\n  })\n\ncli.parse()\n```\n\n### Negated Options\n\nTo allow an option whose value is `false`, you need to manually specify a negated option:\n\n```js\ncli\n  .command('build [project]', 'Build a project')\n  .option('--no-config', 'Disable config file')\n  .option('--config <path>', 'Use a custom config file')\n```\n\nThis will let CAC set the default value of `config` to true, and you can use `--no-config` flag to set it to `false`.\n\n### Variadic Arguments\n\nThe last argument of a command can be variadic, and only the last argument. To make an argument variadic you have to add `...` to the start of argument name, just like the rest operator in JavaScript. Here is an example:\n\n```js\nconst cli = require('cac')()\n\ncli\n  .command('build <entry> [...otherFiles]', 'Build your app')\n  .option('--foo', 'Foo option')\n  .action((entry, otherFiles, options) => {\n    console.log(entry)\n    console.log(otherFiles)\n    console.log(options)\n  })\n\ncli.help()\n\ncli.parse()\n```\n\n<img width=\"500\" alt=\"2018-11-25 8 25 30\" src=\"https://user-images.githubusercontent.com/8784712/48979056-47125080-f0f0-11e8-9d8f-3219e0beb0ed.png\">\n\n### Dot-nested Options\n\nDot-nested options will be merged into a single option.\n\n```js\nconst cli = require('cac')()\n\ncli\n  .command('build', 'desc')\n  .option('--env <env>', 'Set envs')\n  .example('--env.API_SECRET xxx')\n  .action((options) => {\n    console.log(options)\n  })\n\ncli.help()\n\ncli.parse()\n```\n\n<img width=\"500\" alt=\"2018-11-25 9 37 53\" src=\"https://user-images.githubusercontent.com/8784712/48979771-6ada9400-f0fa-11e8-8192-e541b2cfd9da.png\">\n\n### Default Command\n\nRegister a command that will be used when no other command is matched.\n\n```js\nconst cli = require('cac')()\n\ncli\n  // Simply omit the command name, just brackets\n  .command('[...files]', 'Build files')\n  .option('--minimize', 'Minimize output')\n  .action((files, options) => {\n    console.log(files)\n    console.log(options.minimize)\n  })\n\ncli.parse()\n```\n\n### Supply an array as option value\n\n```bash\nnode cli.js --include project-a\n# The parsed options will be:\n# { include: 'project-a' }\n\nnode cli.js --include project-a --include project-b\n# The parsed options will be:\n# { include: ['project-a', 'project-b'] }\n```\n\n### Error Handling\n\nTo handle command errors globally:\n\n```js\ntry {\n  // Parse CLI args without running the command\n  cli.parse(process.argv, { run: false })\n  // Run the command yourself\n  // You only need `await` when your command action returns a Promise\n  await cli.runMatchedCommand()\n} catch (error) {\n  // Handle error here..\n  // e.g.\n  // console.error(error.stack)\n  // process.exit(1)\n}\n```\n\n### With TypeScript\n\nFirst you need `@types/node` to be installed as a dev dependency in your project:\n\n```bash\nyarn add @types/node --dev\n```\n\nThen everything just works out of the box:\n\n```js\nconst { cac } = require('cac')\n// OR ES modules\nimport { cac } from 'cac'\n```\n\n### With Deno\n\n```ts\nimport { cac } from 'https://unpkg.com/cac/mod.ts'\n\nconst cli = cac('my-program')\n```\n\n## Projects Using CAC\n\nProjects that use **CAC**:\n\n- [VuePress](https://github.com/vuejs/vuepress): :memo: Minimalistic Vue-powered static site generator.\n- [SAO](https://github.com/egoist/sao): ⚔️ Futuristic scaffolding tool.\n- [DocPad](https://github.com/docpad/docpad): 🏹 Powerful Static Site Generator.\n- [Poi](https://github.com/egoist/poi): ⚡️ Delightful web development.\n- [bili](https://github.com/egoist/bili): 🥂 Schweizer Armeemesser for bundling JavaScript libraries.\n- [Lad](https://github.com/ladjs/lad): 👦 Lad scaffolds a Koa webapp and API framework for Node.js.\n- [Lass](https://github.com/lassjs/lass): 💁🏻 Scaffold a modern package boilerplate for Node.js.\n- [Foy](https://github.com/zaaack/foy): 🏗 A lightweight and modern task runner and build tool for general purpose.\n- [Vuese](https://github.com/vuese/vuese): 🤗 One-stop solution for vue component documentation.\n- [NUT](https://github.com/nut-project/nut): 🌰 A framework born for microfrontends\n- Feel free to add yours here...\n\n## References\n\n**💁 Check out [the generated docs](https://cac-api-doc.egoist.sh/classes/_cac_.cac.html) from source code if you want a more in-depth API references.**\n\nBelow is a brief overview.\n\n### CLI Instance\n\nCLI instance is created by invoking the `cac` function:\n\n```js\nconst cac = require('cac')\nconst cli = cac()\n```\n\n#### cac(name?)\n\nCreate a CLI instance, optionally specify the program name which will be used to display in help and version message. When not set we use the basename of `argv[1]`.\n\n#### cli.command(name, description, config?)\n\n- Type: `(name: string, description: string) => Command`\n\nCreate a command instance.\n\nThe option also accepts a third argument `config` for additional command config:\n\n- `config.allowUnknownOptions`: `boolean` Allow unknown options in this command.\n- `config.ignoreOptionDefaultValue`: `boolean` Don't use the options's default value in parsed options, only display them in help message.\n\n#### cli.option(name, description, config?)\n\n- Type: `(name: string, description: string, config?: OptionConfig) => CLI`\n\nAdd a global option.\n\nThe option also accepts a third argument `config` for additional option config:\n\n- `config.default`: Default value for the option.\n- `config.type`: `any[]` When set to `[]`, the option value returns an array type. You can also use a conversion function such as `[String]`, which will invoke the option value with `String`.\n\n#### cli.parse(argv?)\n\n- Type: `(argv = process.argv) => ParsedArgv`\n\n```ts\ninterface ParsedArgv {\n  args: string[]\n  options: {\n    [k: string]: any\n  }\n}\n```\n\nWhen this method is called, `cli.rawArgs` `cli.args` `cli.options` `cli.matchedCommand` will also be available.\n\n#### cli.version(version, customFlags?)\n\n- Type: `(version: string, customFlags = '-v, --version') => CLI`\n\nOutput version number when `-v, --version` flag appears.\n\n#### cli.help(callback?)\n\n- Type: `(callback?: HelpCallback) => CLI`\n\nOutput help message when `-h, --help` flag appears.\n\nOptional `callback` allows post-processing of help text before it is displayed:\n\n```ts\ntype HelpCallback = (sections: HelpSection[]) => void\n\ninterface HelpSection {\n  title?: string\n  body: string\n}\n```\n\n#### cli.outputHelp()\n\n- Type: `() => CLI`\n\nOutput help message.\n\n#### cli.usage(text)\n\n- Type: `(text: string) => CLI`\n\nAdd a global usage text. This is not used by sub-commands.\n\n### Command Instance\n\nCommand instance is created by invoking the `cli.command` method:\n\n```js\nconst command = cli.command('build [...files]', 'Build given files')\n```\n\n#### command.option()\n\nBasically the same as `cli.option` but this adds the option to specific command.\n\n#### command.action(callback)\n\n- Type: `(callback: ActionCallback) => Command`\n\nUse a callback function as the command action when the command matches user inputs.\n\n```ts\ntype ActionCallback = (\n  // Parsed CLI args\n  // The last arg will be an array if it's a variadic argument\n  ...args: string | string[] | number | number[]\n  // Parsed CLI options\n  options: Options\n) => any\n\ninterface Options {\n  [k: string]: any\n}\n```\n\n#### command.alias(name)\n\n- Type: `(name: string) => Command`\n\nAdd an alias name to this command, the `name` here can't contain brackets.\n\n#### command.allowUnknownOptions()\n\n- Type: `() => Command`\n\nAllow unknown options in this command, by default CAC will log an error when unknown options are used.\n\n#### command.example(example)\n\n- Type: `(example: CommandExample) => Command`\n\nAdd an example which will be displayed at the end of help message.\n\n```ts\ntype CommandExample = ((name: string) => string) | string\n```\n\n#### command.usage(text)\n\n- Type: `(text: string) => Command`\n\nAdd a usage text for this command.\n\n### Events\n\nListen to commands:\n\n```js\n// Listen to the `foo` command\ncli.on('command:foo', () => {\n  // Do something\n})\n\n// Listen to the default command\ncli.on('command:!', () => {\n  // Do something\n})\n\n// Listen to unknown commands\ncli.on('command:*', () => {\n  console.error('Invalid command: %s', cli.args.join(' '))\n  process.exit(1)\n})\n```\n\n## FAQ\n\n### How is the name written and pronounced?\n\nCAC, or cac, pronounced `C-A-C`.\n\nThis project is dedicated to our lovely C.C. sama. Maybe CAC stands for C&C as well :P\n\n<img src=\"http://i.giphy.com/v3FeH4swox9mg.gif\" width=\"400\"/>\n\n### Why not use Commander.js?\n\nCAC is very similar to Commander.js, while the latter does not support dot nested options, i.e. something like `--env.API_SECRET foo`. Besides, you can't use unknown options in Commander.js either.\n\n_And maybe more..._\n\nBasically I made CAC to fulfill my own needs for building CLI apps like [Poi](https://poi.js.org), [SAO](https://sao.vercel.app) and all my CLI apps. It's small, simple but powerful :P\n\n## Project Stats\n\n![Alt](https://repobeats.axiom.co/api/embed/58caf6203631bcdb9bbe22f0728a0af1683dc0bb.svg 'Repobeats analytics image')\n\n## Contributing\n\n1. Fork it!\n2. Create your feature branch: `git checkout -b my-new-feature`\n3. Commit your changes: `git commit -am 'Add some feature'`\n4. Push to the branch: `git push origin my-new-feature`\n5. Submit a pull request :D\n\n## Author\n\n**CAC** © [EGOIST](https://github.com/egoist), Released under the [MIT](./LICENSE) License.<br>\nAuthored and maintained by egoist with help from contributors ([list](https://github.com/cacjs/cac/contributors)).\n\n> [Website](https://egoist.sh) · GitHub [@egoist](https://github.com/egoist) · Twitter [@\\_egoistlily](https://twitter.com/_egoistlily)\n/mod.ts,// For Deno\nexport * from './deno/index.ts'\n/index-compat.jsĸconst { cac, CAC, Command } = require('./dist/index')\n\n// For backwards compatibility\nmodule.exports = cac\n\nObject.assign(module.exports, {\n  default: cac,\n  cac,\n  CAC,\n  Command,\n})\n/deno/Command.ts\u001bQimport CAC from \"./CAC.ts\";\nimport Option, { OptionConfig } from \"./Option.ts\";\nimport { removeBrackets, findAllBrackets, findLongest, padRight, CACError } from \"./utils.ts\";\nimport { platformInfo } from \"./deno.ts\";\ninterface CommandArg {\n  required: boolean;\n  value: string;\n  variadic: boolean;\n}\ninterface HelpSection {\n  title?: string;\n  body: string;\n}\ninterface CommandConfig {\n  allowUnknownOptions?: boolean;\n  ignoreOptionDefaultValue?: boolean;\n}\ntype HelpCallback = (sections: HelpSection[]) => void | HelpSection[];\ntype CommandExample = ((bin: string) => string) | string;\n\nclass Command {\n  options: Option[];\n  aliasNames: string[];\n  /* Parsed command name */\n\n  name: string;\n  args: CommandArg[];\n  commandAction?: (...args: any[]) => any;\n  usageText?: string;\n  versionNumber?: string;\n  examples: CommandExample[];\n  helpCallback?: HelpCallback;\n  globalCommand?: GlobalCommand;\n\n  constructor(public rawName: string, public description: string, public config: CommandConfig = {}, public cli: CAC) {\n    this.options = [];\n    this.aliasNames = [];\n    this.name = removeBrackets(rawName);\n    this.args = findAllBrackets(rawName);\n    this.examples = [];\n  }\n\n  usage(text: string) {\n    this.usageText = text;\n    return this;\n  }\n\n  allowUnknownOptions() {\n    this.config.allowUnknownOptions = true;\n    return this;\n  }\n\n  ignoreOptionDefaultValue() {\n    this.config.ignoreOptionDefaultValue = true;\n    return this;\n  }\n\n  version(version: string, customFlags = '-v, --version') {\n    this.versionNumber = version;\n    this.option(customFlags, 'Display version number');\n    return this;\n  }\n\n  example(example: CommandExample) {\n    this.examples.push(example);\n    return this;\n  }\n  /**\n   * Add a option for this command\n   * @param rawName Raw option name(s)\n   * @param description Option description\n   * @param config Option config\n   */\n\n\n  option(rawName: string, description: string, config?: OptionConfig) {\n    const option = new Option(rawName, description, config);\n    this.options.push(option);\n    return this;\n  }\n\n  alias(name: string) {\n    this.aliasNames.push(name);\n    return this;\n  }\n\n  action(callback: (...args: any[]) => any) {\n    this.commandAction = callback;\n    return this;\n  }\n  /**\n   * Check if a command name is matched by this command\n   * @param name Command name\n   */\n\n\n  isMatched(name: string) {\n    return this.name === name || this.aliasNames.includes(name);\n  }\n\n  get isDefaultCommand() {\n    return this.name === '' || this.aliasNames.includes('!');\n  }\n\n  get isGlobalCommand(): boolean {\n    return this instanceof GlobalCommand;\n  }\n  /**\n   * Check if an option is registered in this command\n   * @param name Option name\n   */\n\n\n  hasOption(name: string) {\n    name = name.split('.')[0];\n    return this.options.find(option => {\n      return option.names.includes(name);\n    });\n  }\n\n  outputHelp() {\n    const {\n      name,\n      commands\n    } = this.cli;\n    const {\n      versionNumber,\n      options: globalOptions,\n      helpCallback\n    } = this.cli.globalCommand;\n    let sections: HelpSection[] = [{\n      body: `${name}${versionNumber ? `/${versionNumber}` : ''}`\n    }];\n    sections.push({\n      title: 'Usage',\n      body: `  $ ${name} ${this.usageText || this.rawName}`\n    });\n    const showCommands = (this.isGlobalCommand || this.isDefaultCommand) && commands.length > 0;\n\n    if (showCommands) {\n      const longestCommandName = findLongest(commands.map(command => command.rawName));\n      sections.push({\n        title: 'Commands',\n        body: commands.map(command => {\n          return `  ${padRight(command.rawName, longestCommandName.length)}  ${command.description}`;\n        }).join('\\n')\n      });\n      sections.push({\n        title: `For more info, run any command with the \\`--help\\` flag`,\n        body: commands.map(command => `  $ ${name}${command.name === '' ? '' : ` ${command.name}`} --help`).join('\\n')\n      });\n    }\n\n    let options = this.isGlobalCommand ? globalOptions : [...this.options, ...(globalOptions || [])];\n\n    if (!this.isGlobalCommand && !this.isDefaultCommand) {\n      options = options.filter(option => option.name !== 'version');\n    }\n\n    if (options.length > 0) {\n      const longestOptionName = findLongest(options.map(option => option.rawName));\n      sections.push({\n        title: 'Options',\n        body: options.map(option => {\n          return `  ${padRight(option.rawName, longestOptionName.length)}  ${option.description} ${option.config.default === undefined ? '' : `(default: ${option.config.default})`}`;\n        }).join('\\n')\n      });\n    }\n\n    if (this.examples.length > 0) {\n      sections.push({\n        title: 'Examples',\n        body: this.examples.map(example => {\n          if (typeof example === 'function') {\n            return example(name);\n          }\n\n          return example;\n        }).join('\\n')\n      });\n    }\n\n    if (helpCallback) {\n      sections = helpCallback(sections) || sections;\n    }\n\n    console.log(sections.map(section => {\n      return section.title ? `${section.title}:\\n${section.body}` : section.body;\n    }).join('\\n\\n'));\n  }\n\n  outputVersion() {\n    const {\n      name\n    } = this.cli;\n    const {\n      versionNumber\n    } = this.cli.globalCommand;\n\n    if (versionNumber) {\n      console.log(`${name}/${versionNumber} ${platformInfo}`);\n    }\n  }\n\n  checkRequiredArgs() {\n    const minimalArgsCount = this.args.filter(arg => arg.required).length;\n\n    if (this.cli.args.length < minimalArgsCount) {\n      throw new CACError(`missing required args for command \\`${this.rawName}\\``);\n    }\n  }\n  /**\n   * Check if the parsed options contain any unknown options\n   *\n   * Exit and output error when true\n   */\n\n\n  checkUnknownOptions() {\n    const {\n      options,\n      globalCommand\n    } = this.cli;\n\n    if (!this.config.allowUnknownOptions) {\n      for (const name of Object.keys(options)) {\n        if (name !== '--' && !this.hasOption(name) && !globalCommand.hasOption(name)) {\n          throw new CACError(`Unknown option \\`${name.length > 1 ? `--${name}` : `-${name}`}\\``);\n        }\n      }\n    }\n  }\n  /**\n   * Check if the required string-type options exist\n   */\n\n\n  checkOptionValue() {\n    const {\n      options: parsedOptions,\n      globalCommand\n    } = this.cli;\n    const options = [...globalCommand.options, ...this.options];\n\n    for (const option of options) {\n      const value = parsedOptions[option.name.split('.')[0]]; // Check required option value\n\n      if (option.required) {\n        const hasNegated = options.some(o => o.negated && o.names.includes(option.name));\n\n        if (value === true || value === false && !hasNegated) {\n          throw new CACError(`option \\`${option.rawName}\\` value is missing`);\n        }\n      }\n    }\n  }\n\n}\n\nclass GlobalCommand extends Command {\n  constructor(cli: CAC) {\n    super('@@global@@', '', {}, cli);\n  }\n\n}\n\nexport type { HelpCallback, CommandExample, CommandConfig };\nexport { GlobalCommand };\nexport default Command;/package.json\t{\n  \"name\": \"cac\",\n  \"version\": \"6.7.14\",\n  \"description\": \"Simple yet powerful framework for building command-line apps.\",\n  \"repository\": {\n    \"url\": \"egoist/cac\",\n    \"type\": \"git\"\n  },\n  \"main\": \"index-compat.js\",\n  \"module\": \"dist/index.mjs\",\n  \"types\": \"dist/index.d.ts\",\n  \"exports\": {\n    \".\": {\n      \"types\": \"./dist/index.d.ts\",\n      \"import\": \"./dist/index.mjs\",\n      \"require\": \"./index-compat.js\"\n    },\n    \"./package.json\": \"./package.json\",\n    \"./*\": \"./*\"\n  },\n  \"files\": [\n    \"dist\",\n    \"!**/__test__/**\",\n    \"/mod.js\",\n    \"/mod.ts\",\n    \"/deno\",\n    \"/index-compat.js\"\n  ],\n  \"scripts\": {\n    \"test\": \"jest\",\n    \"test:cov\": \"jest --coverage\",\n    \"build:deno\": \"node -r sucrase/register scripts/build-deno.ts\",\n    \"build:node\": \"rollup -c\",\n    \"build\": \"yarn build:deno && yarn build:node\",\n    \"toc\": \"markdown-toc -i README.md\",\n    \"prepublishOnly\": \"npm run build && cp mod.js mod.mjs\",\n    \"docs:api\": \"typedoc --out api-doc --readme none --exclude \\\"**/__test__/**\\\" --theme minimal\"\n  },\n  \"author\": \"egoist <0x142857@gmail.com>\",\n  \"license\": \"MIT\",\n  \"devDependencies\": {\n    \"@babel/core\": \"^7.12.10\",\n    \"@babel/plugin-syntax-typescript\": \"^7.12.1\",\n    \"@rollup/plugin-commonjs\": \"^17.0.0\",\n    \"@rollup/plugin-node-resolve\": \"^11.0.0\",\n    \"@types/fs-extra\": \"^9.0.5\",\n    \"@types/jest\": \"^26.0.19\",\n    \"@types/mri\": \"^1.1.0\",\n    \"cz-conventional-changelog\": \"^2.1.0\",\n    \"esbuild\": \"^0.8.21\",\n    \"eslint-config-rem\": \"^3.0.0\",\n    \"execa\": \"^5.0.0\",\n    \"fs-extra\": \"^9.0.1\",\n    \"globby\": \"^11.0.1\",\n    \"husky\": \"^1.2.0\",\n    \"jest\": \"^24.9.0\",\n    \"lint-staged\": \"^8.1.0\",\n    \"markdown-toc\": \"^1.2.0\",\n    \"mri\": \"^1.1.6\",\n    \"prettier\": \"^2.2.1\",\n    \"rollup\": \"^2.34.2\",\n    \"rollup-plugin-dts\": \"^2.0.1\",\n    \"rollup-plugin-esbuild\": \"^2.6.1\",\n    \"semantic-release\": \"^17.3.0\",\n    \"sucrase\": \"^3.16.0\",\n    \"ts-jest\": \"^26.4.4\",\n    \"ts-node\": \"^9.1.1\",\n    \"typedoc\": \"^0.19.2\",\n    \"typescript\": \"^4.1.2\"\n  },\n  \"engines\": {\n    \"node\": \">=8\"\n  },\n  \"release\": {\n    \"branch\": \"master\"\n  },\n  \"config\": {\n    \"commitizen\": {\n      \"path\": \"./node_modules/cz-conventional-changelog\"\n    }\n  },\n  \"lint-staged\": {\n    \"linters\": {\n      \"*.{js,json,ts}\": [\n        \"prettier --write\",\n        \"git add\"\n      ],\n      \"*.md\": [\n        \"markdown-toc -i\",\n        \"prettier --write\",\n        \"git add\"\n      ]\n    },\n    \"ignore\": [\n      \"dist/**\",\n      \"mod.js\"\n    ]\n  },\n  \"husky\": {\n    \"hooks\": {\n      \"pre-commit\": \"npm t && lint-staged\"\n    }\n  }\n}\n/deno/Option.ts\u0005import { removeBrackets, camelcaseOptionName } from \"./utils.ts\";\ninterface OptionConfig {\n  default?: any;\n  type?: any[];\n}\nexport default class Option {\n  /** Option name */\n  name: string;\n  /** Option name and aliases */\n\n  names: string[];\n  isBoolean?: boolean; // `required` will be a boolean for options with brackets\n\n  required?: boolean;\n  config: OptionConfig;\n  negated: boolean;\n\n  constructor(public rawName: string, public description: string, config?: OptionConfig) {\n    this.config = Object.assign({}, config); // You may use cli.option('--env.* [value]', 'desc') to denote a dot-nested option\n\n    rawName = rawName.replace(/\\.\\*/g, '');\n    this.negated = false;\n    this.names = removeBrackets(rawName).split(',').map((v: string) => {\n      let name = v.trim().replace(/^-{1,2}/, '');\n\n      if (name.startsWith('no-')) {\n        this.negated = true;\n        name = name.replace(/^no-/, '');\n      }\n\n      return camelcaseOptionName(name);\n    }).sort((a, b) => a.length > b.length ? 1 : -1); // Sort names\n    // Use the longest name (last one) as actual option name\n\n    this.name = this.names[this.names.length - 1];\n\n    if (this.negated && this.config.default == null) {\n      this.config.default = true;\n    }\n\n    if (rawName.includes('<')) {\n      this.required = true;\n    } else if (rawName.includes('[')) {\n      this.required = false;\n    } else {\n      // No arg needed, it's boolean flag\n      this.isBoolean = true;\n    }\n  }\n\n}\nexport type { OptionConfig };/dist/index.mjsFBimport { EventEmitter } from 'events';\n\nfunction toArr(any) {\n\treturn any == null ? [] : Array.isArray(any) ? any : [any];\n}\n\nfunction toVal(out, key, val, opts) {\n\tvar x, old=out[key], nxt=(\n\t\t!!~opts.string.indexOf(key) ? (val == null || val === true ? '' : String(val))\n\t\t: typeof val === 'boolean' ? val\n\t\t: !!~opts.boolean.indexOf(key) ? (val === 'false' ? false : val === 'true' || (out._.push((x = +val,x * 0 === 0) ? x : val),!!val))\n\t\t: (x = +val,x * 0 === 0) ? x : val\n\t);\n\tout[key] = old == null ? nxt : (Array.isArray(old) ? old.concat(nxt) : [old, nxt]);\n}\n\nfunction mri2 (args, opts) {\n\targs = args || [];\n\topts = opts || {};\n\n\tvar k, arr, arg, name, val, out={ _:[] };\n\tvar i=0, j=0, idx=0, len=args.length;\n\n\tconst alibi = opts.alias !== void 0;\n\tconst strict = opts.unknown !== void 0;\n\tconst defaults = opts.default !== void 0;\n\n\topts.alias = opts.alias || {};\n\topts.string = toArr(opts.string);\n\topts.boolean = toArr(opts.boolean);\n\n\tif (alibi) {\n\t\tfor (k in opts.alias) {\n\t\t\tarr = opts.alias[k] = toArr(opts.alias[k]);\n\t\t\tfor (i=0; i < arr.length; i++) {\n\t\t\t\t(opts.alias[arr[i]] = arr.concat(k)).splice(i, 1);\n\t\t\t}\n\t\t}\n\t}\n\n\tfor (i=opts.boolean.length; i-- > 0;) {\n\t\tarr = opts.alias[opts.boolean[i]] || [];\n\t\tfor (j=arr.length; j-- > 0;) opts.boolean.push(arr[j]);\n\t}\n\n\tfor (i=opts.string.length; i-- > 0;) {\n\t\tarr = opts.alias[opts.string[i]] || [];\n\t\tfor (j=arr.length; j-- > 0;) opts.string.push(arr[j]);\n\t}\n\n\tif (defaults) {\n\t\tfor (k in opts.default) {\n\t\t\tname = typeof opts.default[k];\n\t\t\tarr = opts.alias[k] = opts.alias[k] || [];\n\t\t\tif (opts[name] !== void 0) {\n\t\t\t\topts[name].push(k);\n\t\t\t\tfor (i=0; i < arr.length; i++) {\n\t\t\t\t\topts[name].push(arr[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tconst keys = strict ? Object.keys(opts.alias) : [];\n\n\tfor (i=0; i < len; i++) {\n\t\targ = args[i];\n\n\t\tif (arg === '--') {\n\t\t\tout._ = out._.concat(args.slice(++i));\n\t\t\tbreak;\n\t\t}\n\n\t\tfor (j=0; j < arg.length; j++) {\n\t\t\tif (arg.charCodeAt(j) !== 45) break; // \"-\"\n\t\t}\n\n\t\tif (j === 0) {\n\t\t\tout._.push(arg);\n\t\t} else if (arg.substring(j, j + 3) === 'no-') {\n\t\t\tname = arg.substring(j + 3);\n\t\t\tif (strict && !~keys.indexOf(name)) {\n\t\t\t\treturn opts.unknown(arg);\n\t\t\t}\n\t\t\tout[name] = false;\n\t\t} else {\n\t\t\tfor (idx=j+1; idx < arg.length; idx++) {\n\t\t\t\tif (arg.charCodeAt(idx) === 61) break; // \"=\"\n\t\t\t}\n\n\t\t\tname = arg.substring(j, idx);\n\t\t\tval = arg.substring(++idx) || (i+1 === len || (''+args[i+1]).charCodeAt(0) === 45 || args[++i]);\n\t\t\tarr = (j === 2 ? [name] : name);\n\n\t\t\tfor (idx=0; idx < arr.length; idx++) {\n\t\t\t\tname = arr[idx];\n\t\t\t\tif (strict && !~keys.indexOf(name)) return opts.unknown('-'.repeat(j) + name);\n\t\t\t\ttoVal(out, name, (idx + 1 < arr.length) || val, opts);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (defaults) {\n\t\tfor (k in opts.default) {\n\t\t\tif (out[k] === void 0) {\n\t\t\t\tout[k] = opts.default[k];\n\t\t\t}\n\t\t}\n\t}\n\n\tif (alibi) {\n\t\tfor (k in out) {\n\t\t\tarr = opts.alias[k] || [];\n\t\t\twhile (arr.length > 0) {\n\t\t\t\tout[arr.shift()] = out[k];\n\t\t\t}\n\t\t}\n\t}\n\n\treturn out;\n}\n\nconst removeBrackets = (v) => v.replace(/[<[].+/, \"\").trim();\nconst findAllBrackets = (v) => {\n  const ANGLED_BRACKET_RE_GLOBAL = /<([^>]+)>/g;\n  const SQUARE_BRACKET_RE_GLOBAL = /\\[([^\\]]+)\\]/g;\n  const res = [];\n  const parse = (match) => {\n    let variadic = false;\n    let value = match[1];\n    if (value.startsWith(\"...\")) {\n      value = value.slice(3);\n      variadic = true;\n    }\n    return {\n      required: match[0].startsWith(\"<\"),\n      value,\n      variadic\n    };\n  };\n  let angledMatch;\n  while (angledMatch = ANGLED_BRACKET_RE_GLOBAL.exec(v)) {\n    res.push(parse(angledMatch));\n  }\n  let squareMatch;\n  while (squareMatch = SQUARE_BRACKET_RE_GLOBAL.exec(v)) {\n    res.push(parse(squareMatch));\n  }\n  return res;\n};\nconst getMriOptions = (options) => {\n  const result = {alias: {}, boolean: []};\n  for (const [index, option] of options.entries()) {\n    if (option.names.length > 1) {\n      result.alias[option.names[0]] = option.names.slice(1);\n    }\n    if (option.isBoolean) {\n      if (option.negated) {\n        const hasStringTypeOption = options.some((o, i) => {\n          return i !== index && o.names.some((name) => option.names.includes(name)) && typeof o.required === \"boolean\";\n        });\n        if (!hasStringTypeOption) {\n          result.boolean.push(option.names[0]);\n        }\n      } else {\n        result.boolean.push(option.names[0]);\n      }\n    }\n  }\n  return result;\n};\nconst findLongest = (arr) => {\n  return arr.sort((a, b) => {\n    return a.length > b.length ? -1 : 1;\n  })[0];\n};\nconst padRight = (str, length) => {\n  return str.length >= length ? str : `${str}${\" \".repeat(length - str.length)}`;\n};\nconst camelcase = (input) => {\n  return input.replace(/([a-z])-([a-z])/g, (_, p1, p2) => {\n    return p1 + p2.toUpperCase();\n  });\n};\nconst setDotProp = (obj, keys, val) => {\n  let i = 0;\n  let length = keys.length;\n  let t = obj;\n  let x;\n  for (; i < length; ++i) {\n    x = t[keys[i]];\n    t = t[keys[i]] = i === length - 1 ? val : x != null ? x : !!~keys[i + 1].indexOf(\".\") || !(+keys[i + 1] > -1) ? {} : [];\n  }\n};\nconst setByType = (obj, transforms) => {\n  for (const key of Object.keys(transforms)) {\n    const transform = transforms[key];\n    if (transform.shouldTransform) {\n      obj[key] = Array.prototype.concat.call([], obj[key]);\n      if (typeof transform.transformFunction === \"function\") {\n        obj[key] = obj[key].map(transform.transformFunction);\n      }\n    }\n  }\n};\nconst getFileName = (input) => {\n  const m = /([^\\\\\\/]+)$/.exec(input);\n  return m ? m[1] : \"\";\n};\nconst camelcaseOptionName = (name) => {\n  return name.split(\".\").map((v, i) => {\n    return i === 0 ? camelcase(v) : v;\n  }).join(\".\");\n};\nclass CACError extends Error {\n  constructor(message) {\n    super(message);\n    this.name = this.constructor.name;\n    if (typeof Error.captureStackTrace === \"function\") {\n      Error.captureStackTrace(this, this.constructor);\n    } else {\n      this.stack = new Error(message).stack;\n    }\n  }\n}\n\nclass Option {\n  constructor(rawName, description, config) {\n    this.rawName = rawName;\n    this.description = description;\n    this.config = Object.assign({}, config);\n    rawName = rawName.replace(/\\.\\*/g, \"\");\n    this.negated = false;\n    this.names = removeBrackets(rawName).split(\",\").map((v) => {\n      let name = v.trim().replace(/^-{1,2}/, \"\");\n      if (name.startsWith(\"no-\")) {\n        this.negated = true;\n        name = name.replace(/^no-/, \"\");\n      }\n      return camelcaseOptionName(name);\n    }).sort((a, b) => a.length > b.length ? 1 : -1);\n    this.name = this.names[this.names.length - 1];\n    if (this.negated && this.config.default == null) {\n      this.config.default = true;\n    }\n    if (rawName.includes(\"<\")) {\n      this.required = true;\n    } else if (rawName.includes(\"[\")) {\n      this.required = false;\n    } else {\n      this.isBoolean = true;\n    }\n  }\n}\n\nconst processArgs = process.argv;\nconst platformInfo = `${process.platform}-${process.arch} node-${process.version}`;\n\nclass Command {\n  constructor(rawName, description, config = {}, cli) {\n    this.rawName = rawName;\n    this.description = description;\n    this.config = config;\n    this.cli = cli;\n    this.options = [];\n    this.aliasNames = [];\n    this.name = removeBrackets(rawName);\n    this.args = findAllBrackets(rawName);\n    this.examples = [];\n  }\n  usage(text) {\n    this.usageText = text;\n    return this;\n  }\n  allowUnknownOptions() {\n    this.config.allowUnknownOptions = true;\n    return this;\n  }\n  ignoreOptionDefaultValue() {\n    this.config.ignoreOptionDefaultValue = true;\n    return this;\n  }\n  version(version, customFlags = \"-v, --version\") {\n    this.versionNumber = version;\n    this.option(customFlags, \"Display version number\");\n    return this;\n  }\n  example(example) {\n    this.examples.push(example);\n    return this;\n  }\n  option(rawName, description, config) {\n    const option = new Option(rawName, description, config);\n    this.options.push(option);\n    return this;\n  }\n  alias(name) {\n    this.aliasNames.push(name);\n    return this;\n  }\n  action(callback) {\n    this.commandAction = callback;\n    return this;\n  }\n  isMatched(name) {\n    return this.name === name || this.aliasNames.includes(name);\n  }\n  get isDefaultCommand() {\n    return this.name === \"\" || this.aliasNames.includes(\"!\");\n  }\n  get isGlobalCommand() {\n    return this instanceof GlobalCommand;\n  }\n  hasOption(name) {\n    name = name.split(\".\")[0];\n    return this.options.find((option) => {\n      return option.names.includes(name);\n    });\n  }\n  outputHelp() {\n    const {name, commands} = this.cli;\n    const {\n      versionNumber,\n      options: globalOptions,\n      helpCallback\n    } = this.cli.globalCommand;\n    let sections = [\n      {\n        body: `${name}${versionNumber ? `/${versionNumber}` : \"\"}`\n      }\n    ];\n    sections.push({\n      title: \"Usage\",\n      body: `  $ ${name} ${this.usageText || this.rawName}`\n    });\n    const showCommands = (this.isGlobalCommand || this.isDefaultCommand) && commands.length > 0;\n    if (showCommands) {\n      const longestCommandName = findLongest(commands.map((command) => command.rawName));\n      sections.push({\n        title: \"Commands\",\n        body: commands.map((command) => {\n          return `  ${padRight(command.rawName, longestCommandName.length)}  ${command.description}`;\n        }).join(\"\\n\")\n      });\n      sections.push({\n        title: `For more info, run any command with the \\`--help\\` flag`,\n        body: commands.map((command) => `  $ ${name}${command.name === \"\" ? \"\" : ` ${command.name}`} --help`).join(\"\\n\")\n      });\n    }\n    let options = this.isGlobalCommand ? globalOptions : [...this.options, ...globalOptions || []];\n    if (!this.isGlobalCommand && !this.isDefaultCommand) {\n      options = options.filter((option) => option.name !== \"version\");\n    }\n    if (options.length > 0) {\n      const longestOptionName = findLongest(options.map((option) => option.rawName));\n      sections.push({\n        title: \"Options\",\n        body: options.map((option) => {\n          return `  ${padRight(option.rawName, longestOptionName.length)}  ${option.description} ${option.config.default === void 0 ? \"\" : `(default: ${option.config.default})`}`;\n        }).join(\"\\n\")\n      });\n    }\n    if (this.examples.length > 0) {\n      sections.push({\n        title: \"Examples\",\n        body: this.examples.map((example) => {\n          if (typeof example === \"function\") {\n            return example(name);\n          }\n          return example;\n        }).join(\"\\n\")\n      });\n    }\n    if (helpCallback) {\n      sections = helpCallback(sections) || sections;\n    }\n    console.log(sections.map((section) => {\n      return section.title ? `${section.title}:\n${section.body}` : section.body;\n    }).join(\"\\n\\n\"));\n  }\n  outputVersion() {\n    const {name} = this.cli;\n    const {versionNumber} = this.cli.globalCommand;\n    if (versionNumber) {\n      console.log(`${name}/${versionNumber} ${platformInfo}`);\n    }\n  }\n  checkRequiredArgs() {\n    const minimalArgsCount = this.args.filter((arg) => arg.required).length;\n    if (this.cli.args.length < minimalArgsCount) {\n      throw new CACError(`missing required args for command \\`${this.rawName}\\``);\n    }\n  }\n  checkUnknownOptions() {\n    const {options, globalCommand} = this.cli;\n    if (!this.config.allowUnknownOptions) {\n      for (const name of Object.keys(options)) {\n        if (name !== \"--\" && !this.hasOption(name) && !globalCommand.hasOption(name)) {\n          throw new CACError(`Unknown option \\`${name.length > 1 ? `--${name}` : `-${name}`}\\``);\n        }\n      }\n    }\n  }\n  checkOptionValue() {\n    const {options: parsedOptions, globalCommand} = this.cli;\n    const options = [...globalCommand.options, ...this.options];\n    for (const option of options) {\n      const value = parsedOptions[option.name.split(\".\")[0]];\n      if (option.required) {\n        const hasNegated = options.some((o) => o.negated && o.names.includes(option.name));\n        if (value === true || value === false && !hasNegated) {\n          throw new CACError(`option \\`${option.rawName}\\` value is missing`);\n        }\n      }\n    }\n  }\n}\nclass GlobalCommand extends Command {\n  constructor(cli) {\n    super(\"@@global@@\", \"\", {}, cli);\n  }\n}\n\nvar __assign = Object.assign;\nclass CAC extends EventEmitter {\n  constructor(name = \"\") {\n    super();\n    this.name = name;\n    this.commands = [];\n    this.rawArgs = [];\n    this.args = [];\n    this.options = {};\n    this.globalCommand = new GlobalCommand(this);\n    this.globalCommand.usage(\"<command> [options]\");\n  }\n  usage(text) {\n    this.globalCommand.usage(text);\n    return this;\n  }\n  command(rawName, description, config) {\n    const command = new Command(rawName, description || \"\", config, this);\n    command.globalCommand = this.globalCommand;\n    this.commands.push(command);\n    return command;\n  }\n  option(rawName, description, config) {\n    this.globalCommand.option(rawName, description, config);\n    return this;\n  }\n  help(callback) {\n    this.globalCommand.option(\"-h, --help\", \"Display this message\");\n    this.globalCommand.helpCallback = callback;\n    this.showHelpOnExit = true;\n    return this;\n  }\n  version(version, customFlags = \"-v, --version\") {\n    this.globalCommand.version(version, customFlags);\n    this.showVersionOnExit = true;\n    return this;\n  }\n  example(example) {\n    this.globalCommand.example(example);\n    return this;\n  }\n  outputHelp() {\n    if (this.matchedCommand) {\n      this.matchedCommand.outputHelp();\n    } else {\n      this.globalCommand.outputHelp();\n    }\n  }\n  outputVersion() {\n    this.globalCommand.outputVersion();\n  }\n  setParsedInfo({args, options}, matchedCommand, matchedCommandName) {\n    this.args = args;\n    this.options = options;\n    if (matchedCommand) {\n      this.matchedCommand = matchedCommand;\n    }\n    if (matchedCommandName) {\n      this.matchedCommandName = matchedCommandName;\n    }\n    return this;\n  }\n  unsetMatchedCommand() {\n    this.matchedCommand = void 0;\n    this.matchedCommandName = void 0;\n  }\n  parse(argv = processArgs, {\n    run = true\n  } = {}) {\n    this.rawArgs = argv;\n    if (!this.name) {\n      this.name = argv[1] ? getFileName(argv[1]) : \"cli\";\n    }\n    let shouldParse = true;\n    for (const command of this.commands) {\n      const parsed = this.mri(argv.slice(2), command);\n      const commandName = parsed.args[0];\n      if (command.isMatched(commandName)) {\n        shouldParse = false;\n        const parsedInfo = __assign(__assign({}, parsed), {\n          args: parsed.args.slice(1)\n        });\n        this.setParsedInfo(parsedInfo, command, commandName);\n        this.emit(`command:${commandName}`, command);\n      }\n    }\n    if (shouldParse) {\n      for (const command of this.commands) {\n        if (command.name === \"\") {\n          shouldParse = false;\n          const parsed = this.mri(argv.slice(2), command);\n          this.setParsedInfo(parsed, command);\n          this.emit(`command:!`, command);\n        }\n      }\n    }\n    if (shouldParse) {\n      const parsed = this.mri(argv.slice(2));\n      this.setParsedInfo(parsed);\n    }\n    if (this.options.help && this.showHelpOnExit) {\n      this.outputHelp();\n      run = false;\n      this.unsetMatchedCommand();\n    }\n    if (this.options.version && this.showVersionOnExit && this.matchedCommandName == null) {\n      this.outputVersion();\n      run = false;\n      this.unsetMatchedCommand();\n    }\n    const parsedArgv = {args: this.args, options: this.options};\n    if (run) {\n      this.runMatchedCommand();\n    }\n    if (!this.matchedCommand && this.args[0]) {\n      this.emit(\"command:*\");\n    }\n    return parsedArgv;\n  }\n  mri(argv, command) {\n    const cliOptions = [\n      ...this.globalCommand.options,\n      ...command ? command.options : []\n    ];\n    const mriOptions = getMriOptions(cliOptions);\n    let argsAfterDoubleDashes = [];\n    const doubleDashesIndex = argv.indexOf(\"--\");\n    if (doubleDashesIndex > -1) {\n      argsAfterDoubleDashes = argv.slice(doubleDashesIndex + 1);\n      argv = argv.slice(0, doubleDashesIndex);\n    }\n    let parsed = mri2(argv, mriOptions);\n    parsed = Object.keys(parsed).reduce((res, name) => {\n      return __assign(__assign({}, res), {\n        [camelcaseOptionName(name)]: parsed[name]\n      });\n    }, {_: []});\n    const args = parsed._;\n    const options = {\n      \"--\": argsAfterDoubleDashes\n    };\n    const ignoreDefault = command && command.config.ignoreOptionDefaultValue ? command.config.ignoreOptionDefaultValue : this.globalCommand.config.ignoreOptionDefaultValue;\n    let transforms = Object.create(null);\n    for (const cliOption of cliOptions) {\n      if (!ignoreDefault && cliOption.config.default !== void 0) {\n        for (const name of cliOption.names) {\n          options[name] = cliOption.config.default;\n        }\n      }\n      if (Array.isArray(cliOption.config.type)) {\n        if (transforms[cliOption.name] === void 0) {\n          transforms[cliOption.name] = Object.create(null);\n          transforms[cliOption.name][\"shouldTransform\"] = true;\n          transforms[cliOption.name][\"transformFunction\"] = cliOption.config.type[0];\n        }\n      }\n    }\n    for (const key of Object.keys(parsed)) {\n      if (key !== \"_\") {\n        const keys = key.split(\".\");\n        setDotProp(options, keys, parsed[key]);\n        setByType(options, transforms);\n      }\n    }\n    return {\n      args,\n      options\n    };\n  }\n  runMatchedCommand() {\n    const {args, options, matchedCommand: command} = this;\n    if (!command || !command.commandAction)\n      return;\n    command.checkUnknownOptions();\n    command.checkOptionValue();\n    command.checkRequiredArgs();\n    const actionArgs = [];\n    command.args.forEach((arg, index) => {\n      if (arg.variadic) {\n        actionArgs.push(args.slice(index));\n      } else {\n        actionArgs.push(args[index]);\n      }\n    });\n    actionArgs.push(options);\n    return command.commandAction.apply(this, actionArgs);\n  }\n}\n\nconst cac = (name = \"\") => new CAC(name);\n\nexport default cac;\nexport { CAC, Command, cac };\n/deno/utils.ts\u000f\nimport Option from \"./Option.ts\";\nexport const removeBrackets = (v: string) => v.replace(/[<[].+/, '').trim();\nexport const findAllBrackets = (v: string) => {\n  const ANGLED_BRACKET_RE_GLOBAL = /<([^>]+)>/g;\n  const SQUARE_BRACKET_RE_GLOBAL = /\\[([^\\]]+)\\]/g;\n  const res = [];\n\n  const parse = (match: string[]) => {\n    let variadic = false;\n    let value = match[1];\n\n    if (value.startsWith('...')) {\n      value = value.slice(3);\n      variadic = true;\n    }\n\n    return {\n      required: match[0].startsWith('<'),\n      value,\n      variadic\n    };\n  };\n\n  let angledMatch;\n\n  while (angledMatch = ANGLED_BRACKET_RE_GLOBAL.exec(v)) {\n    res.push(parse(angledMatch));\n  }\n\n  let squareMatch;\n\n  while (squareMatch = SQUARE_BRACKET_RE_GLOBAL.exec(v)) {\n    res.push(parse(squareMatch));\n  }\n\n  return res;\n};\ninterface MriOptions {\n  alias: {\n    [k: string]: string[];\n  };\n  boolean: string[];\n}\nexport const getMriOptions = (options: Option[]) => {\n  const result: MriOptions = {\n    alias: {},\n    boolean: []\n  };\n\n  for (const [index, option] of options.entries()) {\n    // We do not set default values in mri options\n    // Since its type (typeof) will be used to cast parsed arguments.\n    // Which mean `--foo foo` will be parsed as `{foo: true}` if we have `{default:{foo: true}}`\n    // Set alias\n    if (option.names.length > 1) {\n      result.alias[option.names[0]] = option.names.slice(1);\n    } // Set boolean\n\n\n    if (option.isBoolean) {\n      if (option.negated) {\n        // For negated option\n        // We only set it to `boolean` type when there's no string-type option with the same name\n        const hasStringTypeOption = options.some((o, i) => {\n          return i !== index && o.names.some(name => option.names.includes(name)) && typeof o.required === 'boolean';\n        });\n\n        if (!hasStringTypeOption) {\n          result.boolean.push(option.names[0]);\n        }\n      } else {\n        result.boolean.push(option.names[0]);\n      }\n    }\n  }\n\n  return result;\n};\nexport const findLongest = (arr: string[]) => {\n  return arr.sort((a, b) => {\n    return a.length > b.length ? -1 : 1;\n  })[0];\n};\nexport const padRight = (str: string, length: number) => {\n  return str.length >= length ? str : `${str}${' '.repeat(length - str.length)}`;\n};\nexport const camelcase = (input: string) => {\n  return input.replace(/([a-z])-([a-z])/g, (_, p1, p2) => {\n    return p1 + p2.toUpperCase();\n  });\n};\nexport const setDotProp = (obj: {\n  [k: string]: any;\n}, keys: string[], val: any) => {\n  let i = 0;\n  let length = keys.length;\n  let t = obj;\n  let x;\n\n  for (; i < length; ++i) {\n    x = t[keys[i]];\n    t = t[keys[i]] = i === length - 1 ? val : x != null ? x : !!~keys[i + 1].indexOf('.') || !(+keys[i + 1] > -1) ? {} : [];\n  }\n};\nexport const setByType = (obj: {\n  [k: string]: any;\n}, transforms: {\n  [k: string]: any;\n}) => {\n  for (const key of Object.keys(transforms)) {\n    const transform = transforms[key];\n\n    if (transform.shouldTransform) {\n      obj[key] = Array.prototype.concat.call([], obj[key]);\n\n      if (typeof transform.transformFunction === 'function') {\n        obj[key] = obj[key].map(transform.transformFunction);\n      }\n    }\n  }\n};\nexport const getFileName = (input: string) => {\n  const m = /([^\\\\\\/]+)$/.exec(input);\n  return m ? m[1] : '';\n};\nexport const camelcaseOptionName = (name: string) => {\n  // Camelcase the option name\n  // Don't camelcase anything after the dot `.`\n  return name.split('.').map((v, i) => {\n    return i === 0 ? camelcase(v) : v;\n  }).join('.');\n};\nexport class CACError extends Error {\n  constructor(message: string) {\n    super(message);\n    this.name = this.constructor.name;\n\n    if (typeof Error.captureStackTrace === 'function') {\n      Error.captureStackTrace(this, this.constructor);\n    } else {\n      this.stack = new Error(message).stack;\n    }\n  }\n\n}/dist/index.jsF'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar events = require('events');\n\nfunction toArr(any) {\n\treturn any == null ? [] : Array.isArray(any) ? any : [any];\n}\n\nfunction toVal(out, key, val, opts) {\n\tvar x, old=out[key], nxt=(\n\t\t!!~opts.string.indexOf(key) ? (val == null || val === true ? '' : String(val))\n\t\t: typeof val === 'boolean' ? val\n\t\t: !!~opts.boolean.indexOf(key) ? (val === 'false' ? false : val === 'true' || (out._.push((x = +val,x * 0 === 0) ? x : val),!!val))\n\t\t: (x = +val,x * 0 === 0) ? x : val\n\t);\n\tout[key] = old == null ? nxt : (Array.isArray(old) ? old.concat(nxt) : [old, nxt]);\n}\n\nfunction mri2 (args, opts) {\n\targs = args || [];\n\topts = opts || {};\n\n\tvar k, arr, arg, name, val, out={ _:[] };\n\tvar i=0, j=0, idx=0, len=args.length;\n\n\tconst alibi = opts.alias !== void 0;\n\tconst strict = opts.unknown !== void 0;\n\tconst defaults = opts.default !== void 0;\n\n\topts.alias = opts.alias || {};\n\topts.string = toArr(opts.string);\n\topts.boolean = toArr(opts.boolean);\n\n\tif (alibi) {\n\t\tfor (k in opts.alias) {\n\t\t\tarr = opts.alias[k] = toArr(opts.alias[k]);\n\t\t\tfor (i=0; i < arr.length; i++) {\n\t\t\t\t(opts.alias[arr[i]] = arr.concat(k)).splice(i, 1);\n\t\t\t}\n\t\t}\n\t}\n\n\tfor (i=opts.boolean.length; i-- > 0;) {\n\t\tarr = opts.alias[opts.boolean[i]] || [];\n\t\tfor (j=arr.length; j-- > 0;) opts.boolean.push(arr[j]);\n\t}\n\n\tfor (i=opts.string.length; i-- > 0;) {\n\t\tarr = opts.alias[opts.string[i]] || [];\n\t\tfor (j=arr.length; j-- > 0;) opts.string.push(arr[j]);\n\t}\n\n\tif (defaults) {\n\t\tfor (k in opts.default) {\n\t\t\tname = typeof opts.default[k];\n\t\t\tarr = opts.alias[k] = opts.alias[k] || [];\n\t\t\tif (opts[name] !== void 0) {\n\t\t\t\topts[name].push(k);\n\t\t\t\tfor (i=0; i < arr.length; i++) {\n\t\t\t\t\topts[name].push(arr[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tconst keys = strict ? Object.keys(opts.alias) : [];\n\n\tfor (i=0; i < len; i++) {\n\t\targ = args[i];\n\n\t\tif (arg === '--') {\n\t\t\tout._ = out._.concat(args.slice(++i));\n\t\t\tbreak;\n\t\t}\n\n\t\tfor (j=0; j < arg.length; j++) {\n\t\t\tif (arg.charCodeAt(j) !== 45) break; // \"-\"\n\t\t}\n\n\t\tif (j === 0) {\n\t\t\tout._.push(arg);\n\t\t} else if (arg.substring(j, j + 3) === 'no-') {\n\t\t\tname = arg.substring(j + 3);\n\t\t\tif (strict && !~keys.indexOf(name)) {\n\t\t\t\treturn opts.unknown(arg);\n\t\t\t}\n\t\t\tout[name] = false;\n\t\t} else {\n\t\t\tfor (idx=j+1; idx < arg.length; idx++) {\n\t\t\t\tif (arg.charCodeAt(idx) === 61) break; // \"=\"\n\t\t\t}\n\n\t\t\tname = arg.substring(j, idx);\n\t\t\tval = arg.substring(++idx) || (i+1 === len || (''+args[i+1]).charCodeAt(0) === 45 || args[++i]);\n\t\t\tarr = (j === 2 ? [name] : name);\n\n\t\t\tfor (idx=0; idx < arr.length; idx++) {\n\t\t\t\tname = arr[idx];\n\t\t\t\tif (strict && !~keys.indexOf(name)) return opts.unknown('-'.repeat(j) + name);\n\t\t\t\ttoVal(out, name, (idx + 1 < arr.length) || val, opts);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (defaults) {\n\t\tfor (k in opts.default) {\n\t\t\tif (out[k] === void 0) {\n\t\t\t\tout[k] = opts.default[k];\n\t\t\t}\n\t\t}\n\t}\n\n\tif (alibi) {\n\t\tfor (k in out) {\n\t\t\tarr = opts.alias[k] || [];\n\t\t\twhile (arr.length > 0) {\n\t\t\t\tout[arr.shift()] = out[k];\n\t\t\t}\n\t\t}\n\t}\n\n\treturn out;\n}\n\nconst removeBrackets = (v) => v.replace(/[<[].+/, \"\").trim();\nconst findAllBrackets = (v) => {\n  const ANGLED_BRACKET_RE_GLOBAL = /<([^>]+)>/g;\n  const SQUARE_BRACKET_RE_GLOBAL = /\\[([^\\]]+)\\]/g;\n  const res = [];\n  const parse = (match) => {\n    let variadic = false;\n    let value = match[1];\n    if (value.startsWith(\"...\")) {\n      value = value.slice(3);\n      variadic = true;\n    }\n    return {\n      required: match[0].startsWith(\"<\"),\n      value,\n      variadic\n    };\n  };\n  let angledMatch;\n  while (angledMatch = ANGLED_BRACKET_RE_GLOBAL.exec(v)) {\n    res.push(parse(angledMatch));\n  }\n  let squareMatch;\n  while (squareMatch = SQUARE_BRACKET_RE_GLOBAL.exec(v)) {\n    res.push(parse(squareMatch));\n  }\n  return res;\n};\nconst getMriOptions = (options) => {\n  const result = {alias: {}, boolean: []};\n  for (const [index, option] of options.entries()) {\n    if (option.names.length > 1) {\n      result.alias[option.names[0]] = option.names.slice(1);\n    }\n    if (option.isBoolean) {\n      if (option.negated) {\n        const hasStringTypeOption = options.some((o, i) => {\n          return i !== index && o.names.some((name) => option.names.includes(name)) && typeof o.required === \"boolean\";\n        });\n        if (!hasStringTypeOption) {\n          result.boolean.push(option.names[0]);\n        }\n      } else {\n        result.boolean.push(option.names[0]);\n      }\n    }\n  }\n  return result;\n};\nconst findLongest = (arr) => {\n  return arr.sort((a, b) => {\n    return a.length > b.length ? -1 : 1;\n  })[0];\n};\nconst padRight = (str, length) => {\n  return str.length >= length ? str : `${str}${\" \".repeat(length - str.length)}`;\n};\nconst camelcase = (input) => {\n  return input.replace(/([a-z])-([a-z])/g, (_, p1, p2) => {\n    return p1 + p2.toUpperCase();\n  });\n};\nconst setDotProp = (obj, keys, val) => {\n  let i = 0;\n  let length = keys.length;\n  let t = obj;\n  let x;\n  for (; i < length; ++i) {\n    x = t[keys[i]];\n    t = t[keys[i]] = i === length - 1 ? val : x != null ? x : !!~keys[i + 1].indexOf(\".\") || !(+keys[i + 1] > -1) ? {} : [];\n  }\n};\nconst setByType = (obj, transforms) => {\n  for (const key of Object.keys(transforms)) {\n    const transform = transforms[key];\n    if (transform.shouldTransform) {\n      obj[key] = Array.prototype.concat.call([], obj[key]);\n      if (typeof transform.transformFunction === \"function\") {\n        obj[key] = obj[key].map(transform.transformFunction);\n      }\n    }\n  }\n};\nconst getFileName = (input) => {\n  const m = /([^\\\\\\/]+)$/.exec(input);\n  return m ? m[1] : \"\";\n};\nconst camelcaseOptionName = (name) => {\n  return name.split(\".\").map((v, i) => {\n    return i === 0 ? camelcase(v) : v;\n  }).join(\".\");\n};\nclass CACError extends Error {\n  constructor(message) {\n    super(message);\n    this.name = this.constructor.name;\n    if (typeof Error.captureStackTrace === \"function\") {\n      Error.captureStackTrace(this, this.constructor);\n    } else {\n      this.stack = new Error(message).stack;\n    }\n  }\n}\n\nclass Option {\n  constructor(rawName, description, config) {\n    this.rawName = rawName;\n    this.description = description;\n    this.config = Object.assign({}, config);\n    rawName = rawName.replace(/\\.\\*/g, \"\");\n    this.negated = false;\n    this.names = removeBrackets(rawName).split(\",\").map((v) => {\n      let name = v.trim().replace(/^-{1,2}/, \"\");\n      if (name.startsWith(\"no-\")) {\n        this.negated = true;\n        name = name.replace(/^no-/, \"\");\n      }\n      return camelcaseOptionName(name);\n    }).sort((a, b) => a.length > b.length ? 1 : -1);\n    this.name = this.names[this.names.length - 1];\n    if (this.negated && this.config.default == null) {\n      this.config.default = true;\n    }\n    if (rawName.includes(\"<\")) {\n      this.required = true;\n    } else if (rawName.includes(\"[\")) {\n      this.required = false;\n    } else {\n      this.isBoolean = true;\n    }\n  }\n}\n\nconst processArgs = process.argv;\nconst platformInfo = `${process.platform}-${process.arch} node-${process.version}`;\n\nclass Command {\n  constructor(rawName, description, config = {}, cli) {\n    this.rawName = rawName;\n    this.description = description;\n    this.config = config;\n    this.cli = cli;\n    this.options = [];\n    this.aliasNames = [];\n    this.name = removeBrackets(rawName);\n    this.args = findAllBrackets(rawName);\n    this.examples = [];\n  }\n  usage(text) {\n    this.usageText = text;\n    return this;\n  }\n  allowUnknownOptions() {\n    this.config.allowUnknownOptions = true;\n    return this;\n  }\n  ignoreOptionDefaultValue() {\n    this.config.ignoreOptionDefaultValue = true;\n    return this;\n  }\n  version(version, customFlags = \"-v, --version\") {\n    this.versionNumber = version;\n    this.option(customFlags, \"Display version number\");\n    return this;\n  }\n  example(example) {\n    this.examples.push(example);\n    return this;\n  }\n  option(rawName, description, config) {\n    const option = new Option(rawName, description, config);\n    this.options.push(option);\n    return this;\n  }\n  alias(name) {\n    this.aliasNames.push(name);\n    return this;\n  }\n  action(callback) {\n    this.commandAction = callback;\n    return this;\n  }\n  isMatched(name) {\n    return this.name === name || this.aliasNames.includes(name);\n  }\n  get isDefaultCommand() {\n    return this.name === \"\" || this.aliasNames.includes(\"!\");\n  }\n  get isGlobalCommand() {\n    return this instanceof GlobalCommand;\n  }\n  hasOption(name) {\n    name = name.split(\".\")[0];\n    return this.options.find((option) => {\n      return option.names.includes(name);\n    });\n  }\n  outputHelp() {\n    const {name, commands} = this.cli;\n    const {\n      versionNumber,\n      options: globalOptions,\n      helpCallback\n    } = this.cli.globalCommand;\n    let sections = [\n      {\n        body: `${name}${versionNumber ? `/${versionNumber}` : \"\"}`\n      }\n    ];\n    sections.push({\n      title: \"Usage\",\n      body: `  $ ${name} ${this.usageText || this.rawName}`\n    });\n    const showCommands = (this.isGlobalCommand || this.isDefaultCommand) && commands.length > 0;\n    if (showCommands) {\n      const longestCommandName = findLongest(commands.map((command) => command.rawName));\n      sections.push({\n        title: \"Commands\",\n        body: commands.map((command) => {\n          return `  ${padRight(command.rawName, longestCommandName.length)}  ${command.description}`;\n        }).join(\"\\n\")\n      });\n      sections.push({\n        title: `For more info, run any command with the \\`--help\\` flag`,\n        body: commands.map((command) => `  $ ${name}${command.name === \"\" ? \"\" : ` ${command.name}`} --help`).join(\"\\n\")\n      });\n    }\n    let options = this.isGlobalCommand ? globalOptions : [...this.options, ...globalOptions || []];\n    if (!this.isGlobalCommand && !this.isDefaultCommand) {\n      options = options.filter((option) => option.name !== \"version\");\n    }\n    if (options.length > 0) {\n      const longestOptionName = findLongest(options.map((option) => option.rawName));\n      sections.push({\n        title: \"Options\",\n        body: options.map((option) => {\n          return `  ${padRight(option.rawName, longestOptionName.length)}  ${option.description} ${option.config.default === void 0 ? \"\" : `(default: ${option.config.default})`}`;\n        }).join(\"\\n\")\n      });\n    }\n    if (this.examples.length > 0) {\n      sections.push({\n        title: \"Examples\",\n        body: this.examples.map((example) => {\n          if (typeof example === \"function\") {\n            return example(name);\n          }\n          return example;\n        }).join(\"\\n\")\n      });\n    }\n    if (helpCallback) {\n      sections = helpCallback(sections) || sections;\n    }\n    console.log(sections.map((section) => {\n      return section.title ? `${section.title}:\n${section.body}` : section.body;\n    }).join(\"\\n\\n\"));\n  }\n  outputVersion() {\n    const {name} = this.cli;\n    const {versionNumber} = this.cli.globalCommand;\n    if (versionNumber) {\n      console.log(`${name}/${versionNumber} ${platformInfo}`);\n    }\n  }\n  checkRequiredArgs() {\n    const minimalArgsCount = this.args.filter((arg) => arg.required).length;\n    if (this.cli.args.length < minimalArgsCount) {\n      throw new CACError(`missing required args for command \\`${this.rawName}\\``);\n    }\n  }\n  checkUnknownOptions() {\n    const {options, globalCommand} = this.cli;\n    if (!this.config.allowUnknownOptions) {\n      for (const name of Object.keys(options)) {\n        if (name !== \"--\" && !this.hasOption(name) && !globalCommand.hasOption(name)) {\n          throw new CACError(`Unknown option \\`${name.length > 1 ? `--${name}` : `-${name}`}\\``);\n        }\n      }\n    }\n  }\n  checkOptionValue() {\n    const {options: parsedOptions, globalCommand} = this.cli;\n    const options = [...globalCommand.options, ...this.options];\n    for (const option of options) {\n      const value = parsedOptions[option.name.split(\".\")[0]];\n      if (option.required) {\n        const hasNegated = options.some((o) => o.negated && o.names.includes(option.name));\n        if (value === true || value === false && !hasNegated) {\n          throw new CACError(`option \\`${option.rawName}\\` value is missing`);\n        }\n      }\n    }\n  }\n}\nclass GlobalCommand extends Command {\n  constructor(cli) {\n    super(\"@@global@@\", \"\", {}, cli);\n  }\n}\n\nvar __assign = Object.assign;\nclass CAC extends events.EventEmitter {\n  constructor(name = \"\") {\n    super();\n    this.name = name;\n    this.commands = [];\n    this.rawArgs = [];\n    this.args = [];\n    this.options = {};\n    this.globalCommand = new GlobalCommand(this);\n    this.globalCommand.usage(\"<command> [options]\");\n  }\n  usage(text) {\n    this.globalCommand.usage(text);\n    return this;\n  }\n  command(rawName, description, config) {\n    const command = new Command(rawName, description || \"\", config, this);\n    command.globalCommand = this.globalCommand;\n    this.commands.push(command);\n    return command;\n  }\n  option(rawName, description, config) {\n    this.globalCommand.option(rawName, description, config);\n    return this;\n  }\n  help(callback) {\n    this.globalCommand.option(\"-h, --help\", \"Display this message\");\n    this.globalCommand.helpCallback = callback;\n    this.showHelpOnExit = true;\n    return this;\n  }\n  version(version, customFlags = \"-v, --version\") {\n    this.globalCommand.version(version, customFlags);\n    this.showVersionOnExit = true;\n    return this;\n  }\n  example(example) {\n    this.globalCommand.example(example);\n    return this;\n  }\n  outputHelp() {\n    if (this.matchedCommand) {\n      this.matchedCommand.outputHelp();\n    } else {\n      this.globalCommand.outputHelp();\n    }\n  }\n  outputVersion() {\n    this.globalCommand.outputVersion();\n  }\n  setParsedInfo({args, options}, matchedCommand, matchedCommandName) {\n    this.args = args;\n    this.options = options;\n    if (matchedCommand) {\n      this.matchedCommand = matchedCommand;\n    }\n    if (matchedCommandName) {\n      this.matchedCommandName = matchedCommandName;\n    }\n    return this;\n  }\n  unsetMatchedCommand() {\n    this.matchedCommand = void 0;\n    this.matchedCommandName = void 0;\n  }\n  parse(argv = processArgs, {\n    run = true\n  } = {}) {\n    this.rawArgs = argv;\n    if (!this.name) {\n      this.name = argv[1] ? getFileName(argv[1]) : \"cli\";\n    }\n    let shouldParse = true;\n    for (const command of this.commands) {\n      const parsed = this.mri(argv.slice(2), command);\n      const commandName = parsed.args[0];\n      if (command.isMatched(commandName)) {\n        shouldParse = false;\n        const parsedInfo = __assign(__assign({}, parsed), {\n          args: parsed.args.slice(1)\n        });\n        this.setParsedInfo(parsedInfo, command, commandName);\n        this.emit(`command:${commandName}`, command);\n      }\n    }\n    if (shouldParse) {\n      for (const command of this.commands) {\n        if (command.name === \"\") {\n          shouldParse = false;\n          const parsed = this.mri(argv.slice(2), command);\n          this.setParsedInfo(parsed, command);\n          this.emit(`command:!`, command);\n        }\n      }\n    }\n    if (shouldParse) {\n      const parsed = this.mri(argv.slice(2));\n      this.setParsedInfo(parsed);\n    }\n    if (this.options.help && this.showHelpOnExit) {\n      this.outputHelp();\n      run = false;\n      this.unsetMatchedCommand();\n    }\n    if (this.options.version && this.showVersionOnExit && this.matchedCommandName == null) {\n      this.outputVersion();\n      run = false;\n      this.unsetMatchedCommand();\n    }\n    const parsedArgv = {args: this.args, options: this.options};\n    if (run) {\n      this.runMatchedCommand();\n    }\n    if (!this.matchedCommand && this.args[0]) {\n      this.emit(\"command:*\");\n    }\n    return parsedArgv;\n  }\n  mri(argv, command) {\n    const cliOptions = [\n      ...this.globalCommand.options,\n      ...command ? command.options : []\n    ];\n    const mriOptions = getMriOptions(cliOptions);\n    let argsAfterDoubleDashes = [];\n    const doubleDashesIndex = argv.indexOf(\"--\");\n    if (doubleDashesIndex > -1) {\n      argsAfterDoubleDashes = argv.slice(doubleDashesIndex + 1);\n      argv = argv.slice(0, doubleDashesIndex);\n    }\n    let parsed = mri2(argv, mriOptions);\n    parsed = Object.keys(parsed).reduce((res, name) => {\n      return __assign(__assign({}, res), {\n        [camelcaseOptionName(name)]: parsed[name]\n      });\n    }, {_: []});\n    const args = parsed._;\n    const options = {\n      \"--\": argsAfterDoubleDashes\n    };\n    const ignoreDefault = command && command.config.ignoreOptionDefaultValue ? command.config.ignoreOptionDefaultValue : this.globalCommand.config.ignoreOptionDefaultValue;\n    let transforms = Object.create(null);\n    for (const cliOption of cliOptions) {\n      if (!ignoreDefault && cliOption.config.default !== void 0) {\n        for (const name of cliOption.names) {\n          options[name] = cliOption.config.default;\n        }\n      }\n      if (Array.isArray(cliOption.config.type)) {\n        if (transforms[cliOption.name] === void 0) {\n          transforms[cliOption.name] = Object.create(null);\n          transforms[cliOption.name][\"shouldTransform\"] = true;\n          transforms[cliOption.name][\"transformFunction\"] = cliOption.config.type[0];\n        }\n      }\n    }\n    for (const key of Object.keys(parsed)) {\n      if (key !== \"_\") {\n        const keys = key.split(\".\");\n        setDotProp(options, keys, parsed[key]);\n        setByType(options, transforms);\n      }\n    }\n    return {\n      args,\n      options\n    };\n  }\n  runMatchedCommand() {\n    const {args, options, matchedCommand: command} = this;\n    if (!command || !command.commandAction)\n      return;\n    command.checkUnknownOptions();\n    command.checkOptionValue();\n    command.checkRequiredArgs();\n    const actionArgs = [];\n    command.args.forEach((arg, index) => {\n      if (arg.variadic) {\n        actionArgs.push(args.slice(index));\n      } else {\n        actionArgs.push(args[index]);\n      }\n    });\n    actionArgs.push(options);\n    return command.commandAction.apply(this, actionArgs);\n  }\n}\n\nconst cac = (name = \"\") => new CAC(name);\n\nexports.CAC = CAC;\nexports.Command = Command;\nexports.cac = cac;\nexports.default = cac;\n/mod.jsG// Deno users should use mod.ts instead\nexport * from './deno/index.ts'/deno/CAC.ts\u001fimport { EventEmitter } from \"https://deno.land/std@0.114.0/node/events.ts\";\nimport mri from \"https://cdn.skypack.dev/mri\";\nimport Command, { GlobalCommand, CommandConfig, HelpCallback, CommandExample } from \"./Command.ts\";\nimport { OptionConfig } from \"./Option.ts\";\nimport { getMriOptions, setDotProp, setByType, getFileName, camelcaseOptionName } from \"./utils.ts\";\nimport { processArgs } from \"./deno.ts\";\ninterface ParsedArgv {\n  args: ReadonlyArray<string>;\n  options: {\n    [k: string]: any;\n  };\n}\n\nclass CAC extends EventEmitter {\n  /** The program name to display in help and version message */\n  name: string;\n  commands: Command[];\n  globalCommand: GlobalCommand;\n  matchedCommand?: Command;\n  matchedCommandName?: string;\n  /**\n   * Raw CLI arguments\n   */\n\n  rawArgs: string[];\n  /**\n   * Parsed CLI arguments\n   */\n\n  args: ParsedArgv['args'];\n  /**\n   * Parsed CLI options, camelCased\n   */\n\n  options: ParsedArgv['options'];\n  showHelpOnExit?: boolean;\n  showVersionOnExit?: boolean;\n  /**\n   * @param name The program name to display in help and version message\n   */\n\n  constructor(name = '') {\n    super();\n    this.name = name;\n    this.commands = [];\n    this.rawArgs = [];\n    this.args = [];\n    this.options = {};\n    this.globalCommand = new GlobalCommand(this);\n    this.globalCommand.usage('<command> [options]');\n  }\n  /**\n   * Add a global usage text.\n   *\n   * This is not used by sub-commands.\n   */\n\n\n  usage(text: string) {\n    this.globalCommand.usage(text);\n    return this;\n  }\n  /**\n   * Add a sub-command\n   */\n\n\n  command(rawName: string, description?: string, config?: CommandConfig) {\n    const command = new Command(rawName, description || '', config, this);\n    command.globalCommand = this.globalCommand;\n    this.commands.push(command);\n    return command;\n  }\n  /**\n   * Add a global CLI option.\n   *\n   * Which is also applied to sub-commands.\n   */\n\n\n  option(rawName: string, description: string, config?: OptionConfig) {\n    this.globalCommand.option(rawName, description, config);\n    return this;\n  }\n  /**\n   * Show help message when `-h, --help` flags appear.\n   *\n   */\n\n\n  help(callback?: HelpCallback) {\n    this.globalCommand.option('-h, --help', 'Display this message');\n    this.globalCommand.helpCallback = callback;\n    this.showHelpOnExit = true;\n    return this;\n  }\n  /**\n   * Show version number when `-v, --version` flags appear.\n   *\n   */\n\n\n  version(version: string, customFlags = '-v, --version') {\n    this.globalCommand.version(version, customFlags);\n    this.showVersionOnExit = true;\n    return this;\n  }\n  /**\n   * Add a global example.\n   *\n   * This example added here will not be used by sub-commands.\n   */\n\n\n  example(example: CommandExample) {\n    this.globalCommand.example(example);\n    return this;\n  }\n  /**\n   * Output the corresponding help message\n   * When a sub-command is matched, output the help message for the command\n   * Otherwise output the global one.\n   *\n   */\n\n\n  outputHelp() {\n    if (this.matchedCommand) {\n      this.matchedCommand.outputHelp();\n    } else {\n      this.globalCommand.outputHelp();\n    }\n  }\n  /**\n   * Output the version number.\n   *\n   */\n\n\n  outputVersion() {\n    this.globalCommand.outputVersion();\n  }\n\n  private setParsedInfo({\n    args,\n    options\n  }: ParsedArgv, matchedCommand?: Command, matchedCommandName?: string) {\n    this.args = args;\n    this.options = options;\n\n    if (matchedCommand) {\n      this.matchedCommand = matchedCommand;\n    }\n\n    if (matchedCommandName) {\n      this.matchedCommandName = matchedCommandName;\n    }\n\n    return this;\n  }\n\n  unsetMatchedCommand() {\n    this.matchedCommand = undefined;\n    this.matchedCommandName = undefined;\n  }\n  /**\n   * Parse argv\n   */\n\n\n  parse(argv = processArgs, {\n    /** Whether to run the action for matched command */\n    run = true\n  } = {}): ParsedArgv {\n    this.rawArgs = argv;\n\n    if (!this.name) {\n      this.name = argv[1] ? getFileName(argv[1]) : 'cli';\n    }\n\n    let shouldParse = true; // Search sub-commands\n\n    for (const command of this.commands) {\n      const parsed = this.mri(argv.slice(2), command);\n      const commandName = parsed.args[0];\n\n      if (command.isMatched(commandName)) {\n        shouldParse = false;\n        const parsedInfo = { ...parsed,\n          args: parsed.args.slice(1)\n        };\n        this.setParsedInfo(parsedInfo, command, commandName);\n        this.emit(`command:${commandName}`, command);\n      }\n    }\n\n    if (shouldParse) {\n      // Search the default command\n      for (const command of this.commands) {\n        if (command.name === '') {\n          shouldParse = false;\n          const parsed = this.mri(argv.slice(2), command);\n          this.setParsedInfo(parsed, command);\n          this.emit(`command:!`, command);\n        }\n      }\n    }\n\n    if (shouldParse) {\n      const parsed = this.mri(argv.slice(2));\n      this.setParsedInfo(parsed);\n    }\n\n    if (this.options.help && this.showHelpOnExit) {\n      this.outputHelp();\n      run = false;\n      this.unsetMatchedCommand();\n    }\n\n    if (this.options.version && this.showVersionOnExit && this.matchedCommandName == null) {\n      this.outputVersion();\n      run = false;\n      this.unsetMatchedCommand();\n    }\n\n    const parsedArgv = {\n      args: this.args,\n      options: this.options\n    };\n\n    if (run) {\n      this.runMatchedCommand();\n    }\n\n    if (!this.matchedCommand && this.args[0]) {\n      this.emit('command:*');\n    }\n\n    return parsedArgv;\n  }\n\n  private mri(argv: string[],\n  /** Matched command */\n  command?: Command): ParsedArgv {\n    // All added options\n    const cliOptions = [...this.globalCommand.options, ...(command ? command.options : [])];\n    const mriOptions = getMriOptions(cliOptions); // Extract everything after `--` since mri doesn't support it\n\n    let argsAfterDoubleDashes: string[] = [];\n    const doubleDashesIndex = argv.indexOf('--');\n\n    if (doubleDashesIndex > -1) {\n      argsAfterDoubleDashes = argv.slice(doubleDashesIndex + 1);\n      argv = argv.slice(0, doubleDashesIndex);\n    }\n\n    let parsed = mri(argv, mriOptions);\n    parsed = Object.keys(parsed).reduce((res, name) => {\n      return { ...res,\n        [camelcaseOptionName(name)]: parsed[name]\n      };\n    }, {\n      _: []\n    });\n    const args = parsed._;\n    const options: {\n      [k: string]: any;\n    } = {\n      '--': argsAfterDoubleDashes\n    }; // Set option default value\n\n    const ignoreDefault = command && command.config.ignoreOptionDefaultValue ? command.config.ignoreOptionDefaultValue : this.globalCommand.config.ignoreOptionDefaultValue;\n    let transforms = Object.create(null);\n\n    for (const cliOption of cliOptions) {\n      if (!ignoreDefault && cliOption.config.default !== undefined) {\n        for (const name of cliOption.names) {\n          options[name] = cliOption.config.default;\n        }\n      } // If options type is defined\n\n\n      if (Array.isArray(cliOption.config.type)) {\n        if (transforms[cliOption.name] === undefined) {\n          transforms[cliOption.name] = Object.create(null);\n          transforms[cliOption.name]['shouldTransform'] = true;\n          transforms[cliOption.name]['transformFunction'] = cliOption.config.type[0];\n        }\n      }\n    } // Set option values (support dot-nested property name)\n\n\n    for (const key of Object.keys(parsed)) {\n      if (key !== '_') {\n        const keys = key.split('.');\n        setDotProp(options, keys, parsed[key]);\n        setByType(options, transforms);\n      }\n    }\n\n    return {\n      args,\n      options\n    };\n  }\n\n  runMatchedCommand() {\n    const {\n      args,\n      options,\n      matchedCommand: command\n    } = this;\n    if (!command || !command.commandAction) return;\n    command.checkUnknownOptions();\n    command.checkOptionValue();\n    command.checkRequiredArgs();\n    const actionArgs: any[] = [];\n    command.args.forEach((arg, index) => {\n      if (arg.variadic) {\n        actionArgs.push(args.slice(index));\n      } else {\n        actionArgs.push(args[index]);\n      }\n    });\n    actionArgs.push(options);\n    return command.commandAction.apply(this, actionArgs);\n  }\n\n}\n\nexport default CAC;/deno/index.tsimport CAC from \"./CAC.ts\";\nimport Command from \"./Command.ts\";\n/**\n * @param name The program name to display in help and version message\n */\n\nconst cac = (name = '') => new CAC(name);\n\nexport default cac;\nexport { cac, CAC, Command };"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/Y2FsbC1iaW5kQDEuMC4y",
    "content": "/LICENSE\u0004/MIT License\n\nCopyright (c) 2020 Jordan Harband\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n/callBound.js\u0001'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar callBind = require('./');\n\nvar $indexOf = callBind(GetIntrinsic('String.prototype.indexOf'));\n\nmodule.exports = function callBoundIntrinsic(name, allowMissing) {\n\tvar intrinsic = GetIntrinsic(name, !!allowMissing);\n\tif (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {\n\t\treturn callBind(intrinsic);\n\t}\n\treturn intrinsic;\n};\n/test/callBound.js\tK'use strict';\n\nvar test = require('tape');\n\nvar callBound = require('../callBound');\n\ntest('callBound', function (t) {\n\t// static primitive\n\tt.equal(callBound('Array.length'), Array.length, 'Array.length yields itself');\n\tt.equal(callBound('%Array.length%'), Array.length, '%Array.length% yields itself');\n\n\t// static non-function object\n\tt.equal(callBound('Array.prototype'), Array.prototype, 'Array.prototype yields itself');\n\tt.equal(callBound('%Array.prototype%'), Array.prototype, '%Array.prototype% yields itself');\n\tt.equal(callBound('Array.constructor'), Array.constructor, 'Array.constructor yields itself');\n\tt.equal(callBound('%Array.constructor%'), Array.constructor, '%Array.constructor% yields itself');\n\n\t// static function\n\tt.equal(callBound('Date.parse'), Date.parse, 'Date.parse yields itself');\n\tt.equal(callBound('%Date.parse%'), Date.parse, '%Date.parse% yields itself');\n\n\t// prototype primitive\n\tt.equal(callBound('Error.prototype.message'), Error.prototype.message, 'Error.prototype.message yields itself');\n\tt.equal(callBound('%Error.prototype.message%'), Error.prototype.message, '%Error.prototype.message% yields itself');\n\n\t// prototype function\n\tt.notEqual(callBound('Object.prototype.toString'), Object.prototype.toString, 'Object.prototype.toString does not yield itself');\n\tt.notEqual(callBound('%Object.prototype.toString%'), Object.prototype.toString, '%Object.prototype.toString% does not yield itself');\n\tt.equal(callBound('Object.prototype.toString')(true), Object.prototype.toString.call(true), 'call-bound Object.prototype.toString calls into the original');\n\tt.equal(callBound('%Object.prototype.toString%')(true), Object.prototype.toString.call(true), 'call-bound %Object.prototype.toString% calls into the original');\n\n\tt['throws'](\n\t\tfunction () { callBound('does not exist'); },\n\t\tSyntaxError,\n\t\t'nonexistent intrinsic throws'\n\t);\n\tt['throws'](\n\t\tfunction () { callBound('does not exist', true); },\n\t\tSyntaxError,\n\t\t'allowMissing arg still throws for unknown intrinsic'\n\t);\n\n\t/* globals WeakRef: false */\n\tt.test('real but absent intrinsic', { skip: typeof WeakRef !== 'undefined' }, function (st) {\n\t\tst['throws'](\n\t\t\tfunction () { callBound('WeakRef'); },\n\t\t\tTypeError,\n\t\t\t'real but absent intrinsic throws'\n\t\t);\n\t\tst.equal(callBound('WeakRef', true), undefined, 'allowMissing arg avoids exception');\n\t\tst.end();\n\t});\n\n\tt.end();\n});\n/.eslintrc{\n\t\"root\": true,\n\n\t\"extends\": \"@ljharb\",\n\n\t\"rules\": {\n\t\t\"func-name-matching\": 0,\n\t\t\"id-length\": 0,\n\t\t\"new-cap\": [2, {\n\t\t\t\"capIsNewExceptions\": [\n\t\t\t\t\"GetIntrinsic\",\n\t\t\t],\n\t\t}],\n\t\t\"no-magic-numbers\": 0,\n\t\t\"operator-linebreak\": [2, \"before\"],\n\t},\n}\n/.eslintignore\ncoverage/\n/.nycrc{\n\t\"all\": true,\n\t\"check-coverage\": false,\n\t\"reporter\": [\"text-summary\", \"text\", \"html\", \"json\"],\n\t\"lines\": 86,\n\t\"statements\": 85.93,\n\t\"functions\": 82.43,\n\t\"branches\": 76.06,\n\t\"exclude\": [\n\t\t\"coverage\",\n\t\t\"test\"\n\t]\n}\n/CHANGELOG.md\r\u0003# Changelog\n\nAll notable changes to this project will be documented in this file.\n\nThe format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)\nand this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).\n\n## [v1.0.2](https://github.com/ljharb/call-bind/compare/v1.0.1...v1.0.2) - 2021-01-11\n\n### Commits\n\n- [Fix] properly include the receiver in the bound length [`dbae7bc`](https://github.com/ljharb/call-bind/commit/dbae7bc676c079a0d33c0a43e9ef92cb7b01345d)\n\n## [v1.0.1](https://github.com/ljharb/call-bind/compare/v1.0.0...v1.0.1) - 2021-01-08\n\n### Commits\n\n- [Tests] migrate tests to Github Actions [`b6db284`](https://github.com/ljharb/call-bind/commit/b6db284c36f8ccd195b88a6764fe84b7223a0da1)\n- [meta] do not publish github action workflow files [`ec7fe46`](https://github.com/ljharb/call-bind/commit/ec7fe46e60cfa4764ee943d2755f5e5a366e578e)\n- [Fix] preserve original function’s length when possible [`adbceaa`](https://github.com/ljharb/call-bind/commit/adbceaa3cac4b41ea78bb19d7ccdbaaf7e0bdadb)\n- [Tests] gather coverage data on every job [`d69e23c`](https://github.com/ljharb/call-bind/commit/d69e23cc65f101ba1d4c19bb07fa8eb0ec624be8)\n- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `tape` [`2fd3586`](https://github.com/ljharb/call-bind/commit/2fd3586c5d47b335364c14293114c6b625ae1f71)\n- [Deps] update `get-intrinsic` [`f23e931`](https://github.com/ljharb/call-bind/commit/f23e9318cc271c2add8bb38cfded85ee7baf8eee)\n- [Deps] update `get-intrinsic` [`72d9f44`](https://github.com/ljharb/call-bind/commit/72d9f44e184465ba8dd3fb48260bbcff234985f2)\n- [meta] fix FUNDING.yml [`e723573`](https://github.com/ljharb/call-bind/commit/e723573438c5a68dcec31fb5d96ea6b7e4a93be8)\n- [eslint] ignore coverage output [`15e76d2`](https://github.com/ljharb/call-bind/commit/15e76d28a5f43e504696401e5b31ebb78ee1b532)\n- [meta] add Automatic Rebase and Require Allow Edits workflows [`8fa4dab`](https://github.com/ljharb/call-bind/commit/8fa4dabb23ba3dd7bb92c9571c1241c08b56e4b6)\n\n## v1.0.0 - 2020-10-30\n\n### Commits\n\n- Initial commit [`306cf98`](https://github.com/ljharb/call-bind/commit/306cf98c7ec9e7ef66b653ec152277ac1381eb50)\n- Tests [`e10d0bb`](https://github.com/ljharb/call-bind/commit/e10d0bbdadc7a10ecedc9a1c035112d3e368b8df)\n- Implementation [`43852ed`](https://github.com/ljharb/call-bind/commit/43852eda0f187327b7fad2423ca972149a52bd65)\n- npm init [`408f860`](https://github.com/ljharb/call-bind/commit/408f860b773a2f610805fd3613d0d71bac1b6249)\n- [meta] add Automatic Rebase and Require Allow Edits workflows [`fb349b2`](https://github.com/ljharb/call-bind/commit/fb349b2e48defbec8b5ec8a8395cc8f69f220b13)\n- [meta] add `auto-changelog` [`c4001fc`](https://github.com/ljharb/call-bind/commit/c4001fc43031799ef908211c98d3b0fb2b60fde4)\n- [meta] add \"funding\"; create `FUNDING.yml` [`d4d6d29`](https://github.com/ljharb/call-bind/commit/d4d6d2974a14bc2e98830468eda7fe6d6a776717)\n- [Tests] add `npm run lint` [`dedfb98`](https://github.com/ljharb/call-bind/commit/dedfb98bd0ecefb08ddb9a94061bd10cde4332af)\n- Only apps should have lockfiles [`54ac776`](https://github.com/ljharb/call-bind/commit/54ac77653db45a7361dc153d2f478e743f110650)\n- [meta] add `safe-publish-latest` [`9ea8e43`](https://github.com/ljharb/call-bind/commit/9ea8e435b950ce9b705559cd651039f9bf40140f)\n/index.js\u0005\u001a'use strict';\n\nvar bind = require('function-bind');\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $apply = GetIntrinsic('%Function.prototype.apply%');\nvar $call = GetIntrinsic('%Function.prototype.call%');\nvar $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply);\n\nvar $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\nvar $max = GetIntrinsic('%Math.max%');\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\nmodule.exports = function callBind(originalFunction) {\n\tvar func = $reflectApply(bind, $call, arguments);\n\tif ($gOPD && $defineProperty) {\n\t\tvar desc = $gOPD(func, 'length');\n\t\tif (desc.configurable) {\n\t\t\t// original length, plus the receiver, minus any additional arguments (after the receiver)\n\t\t\t$defineProperty(\n\t\t\t\tfunc,\n\t\t\t\t'length',\n\t\t\t\t{ value: 1 + $max(0, originalFunction.length - (arguments.length - 1)) }\n\t\t\t);\n\t\t}\n\t}\n\treturn func;\n};\n\nvar applyBind = function applyBind() {\n\treturn $reflectApply(bind, $apply, arguments);\n};\n\nif ($defineProperty) {\n\t$defineProperty(module.exports, 'apply', { value: applyBind });\n} else {\n\tmodule.exports.apply = applyBind;\n}\n/test/index.js\r\u001a'use strict';\n\nvar callBind = require('../');\nvar bind = require('function-bind');\n\nvar test = require('tape');\n\n/*\n * older engines have length nonconfigurable\n * in io.js v3, it is configurable except on bound functions, hence the .bind()\n */\nvar functionsHaveConfigurableLengths = !!(\n\tObject.getOwnPropertyDescriptor\n\t&& Object.getOwnPropertyDescriptor(bind.call(function () {}), 'length').configurable\n);\n\ntest('callBind', function (t) {\n\tvar sentinel = { sentinel: true };\n\tvar func = function (a, b) {\n\t\t// eslint-disable-next-line no-invalid-this\n\t\treturn [this, a, b];\n\t};\n\tt.equal(func.length, 2, 'original function length is 2');\n\tt.deepEqual(func(), [undefined, undefined, undefined], 'unbound func with too few args');\n\tt.deepEqual(func(1, 2), [undefined, 1, 2], 'unbound func with right args');\n\tt.deepEqual(func(1, 2, 3), [undefined, 1, 2], 'unbound func with too many args');\n\n\tvar bound = callBind(func);\n\tt.equal(bound.length, func.length + 1, 'function length is preserved', { skip: !functionsHaveConfigurableLengths });\n\tt.deepEqual(bound(), [undefined, undefined, undefined], 'bound func with too few args');\n\tt.deepEqual(bound(1, 2), [1, 2, undefined], 'bound func with right args');\n\tt.deepEqual(bound(1, 2, 3), [1, 2, 3], 'bound func with too many args');\n\n\tvar boundR = callBind(func, sentinel);\n\tt.equal(boundR.length, func.length, 'function length is preserved', { skip: !functionsHaveConfigurableLengths });\n\tt.deepEqual(boundR(), [sentinel, undefined, undefined], 'bound func with receiver, with too few args');\n\tt.deepEqual(boundR(1, 2), [sentinel, 1, 2], 'bound func with receiver, with right args');\n\tt.deepEqual(boundR(1, 2, 3), [sentinel, 1, 2], 'bound func with receiver, with too many args');\n\n\tvar boundArg = callBind(func, sentinel, 1);\n\tt.equal(boundArg.length, func.length - 1, 'function length is preserved', { skip: !functionsHaveConfigurableLengths });\n\tt.deepEqual(boundArg(), [sentinel, 1, undefined], 'bound func with receiver and arg, with too few args');\n\tt.deepEqual(boundArg(2), [sentinel, 1, 2], 'bound func with receiver and arg, with right arg');\n\tt.deepEqual(boundArg(2, 3), [sentinel, 1, 2], 'bound func with receiver and arg, with too many args');\n\n\tt.test('callBind.apply', function (st) {\n\t\tvar aBound = callBind.apply(func);\n\t\tst.deepEqual(aBound(sentinel), [sentinel, undefined, undefined], 'apply-bound func with no args');\n\t\tst.deepEqual(aBound(sentinel, [1], 4), [sentinel, 1, undefined], 'apply-bound func with too few args');\n\t\tst.deepEqual(aBound(sentinel, [1, 2], 4), [sentinel, 1, 2], 'apply-bound func with right args');\n\n\t\tvar aBoundArg = callBind.apply(func);\n\t\tst.deepEqual(aBoundArg(sentinel, [1, 2, 3], 4), [sentinel, 1, 2], 'apply-bound func with too many args');\n\t\tst.deepEqual(aBoundArg(sentinel, [1, 2], 4), [sentinel, 1, 2], 'apply-bound func with right args');\n\t\tst.deepEqual(aBoundArg(sentinel, [1], 4), [sentinel, 1, undefined], 'apply-bound func with too few args');\n\n\t\tvar aBoundR = callBind.apply(func, sentinel);\n\t\tst.deepEqual(aBoundR([1, 2, 3], 4), [sentinel, 1, 2], 'apply-bound func with receiver and too many args');\n\t\tst.deepEqual(aBoundR([1, 2], 4), [sentinel, 1, 2], 'apply-bound func with receiver and right args');\n\t\tst.deepEqual(aBoundR([1], 4), [sentinel, 1, undefined], 'apply-bound func with receiver and too few args');\n\n\t\tst.end();\n\t});\n\n\tt.end();\n});\n/.github/FUNDING.yml\u0002D# These are supported funding model platforms\n\ngithub: [ljharb]\npatreon: # Replace with a single Patreon username\nopen_collective: # Replace with a single Open Collective username\nko_fi: # Replace with a single Ko-fi username\ntidelift: npm/call-bind\ncommunity_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry\nliberapay: # Replace with a single Liberapay username\nissuehunt: # Replace with a single IssueHunt username\notechie: # Replace with a single Otechie username\ncustom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']\n/package.json\u0007\u0001{\n\t\"name\": \"call-bind\",\n\t\"version\": \"1.0.2\",\n\t\"description\": \"Robustly `.call.bind()` a function\",\n\t\"main\": \"index.js\",\n\t\"exports\": {\n\t\t\".\": [\n\t\t\t{\n\t\t\t\t\"default\": \"./index.js\"\n\t\t\t},\n\t\t\t\"./index.js\"\n\t\t],\n\t\t\"./callBound\": [\n\t\t\t{\n\t\t\t\t\"default\": \"./callBound.js\"\n\t\t\t},\n\t\t\t\"./callBound.js\"\n\t\t],\n\t\t\"./package.json\": \"./package.json\"\n\t},\n\t\"scripts\": {\n\t\t\"prepublish\": \"safe-publish-latest\",\n\t\t\"lint\": \"eslint --ext=.js,.mjs .\",\n\t\t\"pretest\": \"npm run lint\",\n\t\t\"tests-only\": \"nyc tape 'test/*'\",\n\t\t\"test\": \"npm run tests-only\",\n\t\t\"posttest\": \"aud --production\",\n\t\t\"version\": \"auto-changelog && git add CHANGELOG.md\",\n\t\t\"postversion\": \"auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \\\"v$(node -e \\\"console.log(require('./package.json').version)\\\")\\\"\"\n\t},\n\t\"repository\": {\n\t\t\"type\": \"git\",\n\t\t\"url\": \"git+https://github.com/ljharb/call-bind.git\"\n\t},\n\t\"keywords\": [\n\t\t\"javascript\",\n\t\t\"ecmascript\",\n\t\t\"es\",\n\t\t\"js\",\n\t\t\"callbind\",\n\t\t\"callbound\",\n\t\t\"call\",\n\t\t\"bind\",\n\t\t\"bound\",\n\t\t\"call-bind\",\n\t\t\"call-bound\",\n\t\t\"function\",\n\t\t\"es-abstract\"\n\t],\n\t\"author\": \"Jordan Harband <ljharb@gmail.com>\",\n\t\"funding\": {\n\t\t\"url\": \"https://github.com/sponsors/ljharb\"\n\t},\n\t\"license\": \"MIT\",\n\t\"bugs\": {\n\t\t\"url\": \"https://github.com/ljharb/call-bind/issues\"\n\t},\n\t\"homepage\": \"https://github.com/ljharb/call-bind#readme\",\n\t\"devDependencies\": {\n\t\t\"@ljharb/eslint-config\": \"^17.3.0\",\n\t\t\"aud\": \"^1.1.3\",\n\t\t\"auto-changelog\": \"^2.2.1\",\n\t\t\"eslint\": \"^7.17.0\",\n\t\t\"nyc\": \"^10.3.2\",\n\t\t\"safe-publish-latest\": \"^1.1.4\",\n\t\t\"tape\": \"^5.1.1\"\n\t},\n\t\"dependencies\": {\n\t\t\"function-bind\": \"^1.1.1\",\n\t\t\"get-intrinsic\": \"^1.0.2\"\n\t},\n\t\"auto-changelog\": {\n\t\t\"output\": \"CHANGELOG.md\",\n\t\t\"template\": \"keepachangelog\",\n\t\t\"unreleased\": false,\n\t\t\"commitLimit\": false,\n\t\t\"backfillLimit\": false,\n\t\t\"hideCredit\": true\n\t}\n}\n/README.md0# call-bind\nRobustly `.call.bind()` a function.\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/Y2FsbHNpdGVzQDMuMS4w",
    "content": "/license\u0004UMIT License\n\nCopyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)\n\nPermission 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:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE 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.\n/package.json\u0002n{\n\t\"name\": \"callsites\",\n\t\"version\": \"3.1.0\",\n\t\"description\": \"Get callsites from the V8 stack trace API\",\n\t\"license\": \"MIT\",\n\t\"repository\": \"sindresorhus/callsites\",\n\t\"author\": {\n\t\t\"name\": \"Sindre Sorhus\",\n\t\t\"email\": \"sindresorhus@gmail.com\",\n\t\t\"url\": \"sindresorhus.com\"\n\t},\n\t\"engines\": {\n\t\t\"node\": \">=6\"\n\t},\n\t\"scripts\": {\n\t\t\"test\": \"xo && ava && tsd\"\n\t},\n\t\"files\": [\n\t\t\"index.js\",\n\t\t\"index.d.ts\"\n\t],\n\t\"keywords\": [\n\t\t\"stacktrace\",\n\t\t\"v8\",\n\t\t\"callsite\",\n\t\t\"callsites\",\n\t\t\"stack\",\n\t\t\"trace\",\n\t\t\"function\",\n\t\t\"file\",\n\t\t\"line\",\n\t\t\"debug\"\n\t],\n\t\"devDependencies\": {\n\t\t\"ava\": \"^1.4.1\",\n\t\t\"tsd\": \"^0.7.2\",\n\t\t\"xo\": \"^0.24.0\"\n\t}\n}\n/readme.md\u0007_# callsites [![Build Status](https://travis-ci.org/sindresorhus/callsites.svg?branch=master)](https://travis-ci.org/sindresorhus/callsites)\n\n> Get callsites from the [V8 stack trace API](https://v8.dev/docs/stack-trace-api)\n\n\n## Install\n\n```\n$ npm install callsites\n```\n\n\n## Usage\n\n```js\nconst callsites = require('callsites');\n\nfunction unicorn() {\n\tconsole.log(callsites()[0].getFileName());\n\t//=> '/Users/sindresorhus/dev/callsites/test.js'\n}\n\nunicorn();\n```\n\n\n## API\n\nReturns an array of callsite objects with the following methods:\n\n- `getThis`: returns the value of `this`.\n- `getTypeName`: returns the type of `this` as a string. This is the name of the function stored in the constructor field of `this`, if available, otherwise the object's `[[Class]]` internal property.\n- `getFunction`: returns the current function.\n- `getFunctionName`: returns the name of the current function, typically its `name` property. If a name property is not available an attempt will be made to try to infer a name from the function's context.\n- `getMethodName`: returns the name of the property of `this` or one of its prototypes that holds the current function.\n- `getFileName`: if this function was defined in a script returns the name of the script.\n- `getLineNumber`: if this function was defined in a script returns the current line number.\n- `getColumnNumber`: if this function was defined in a script returns the current column number\n- `getEvalOrigin`: if this function was created using a call to `eval` returns a string representing the location where `eval` was called.\n- `isToplevel`: is this a top-level invocation, that is, is this the global object?\n- `isEval`: does this call take place in code defined by a call to `eval`?\n- `isNative`: is this call in native V8 code?\n- `isConstructor`: is this a constructor call?\n\n\n## License\n\nMIT © [Sindre Sorhus](https://sindresorhus.com)\n/index.d.ts\t/declare namespace callsites {\n\tinterface CallSite {\n\t\t/**\n\t\tReturns the value of `this`.\n\t\t*/\n\t\tgetThis(): unknown | undefined;\n\n\t\t/**\n\t\tReturns the type of `this` as a string. This is the name of the function stored in the constructor field of `this`, if available, otherwise the object's `[[Class]]` internal property.\n\t\t*/\n\t\tgetTypeName(): string | null;\n\n\t\t/**\n\t\tReturns the current function.\n\t\t*/\n\t\tgetFunction(): Function | undefined;\n\n\t\t/**\n\t\tReturns the name of the current function, typically its `name` property. If a name property is not available an attempt will be made to try to infer a name from the function's context.\n\t\t*/\n\t\tgetFunctionName(): string | null;\n\n\t\t/**\n\t\tReturns the name of the property of `this` or one of its prototypes that holds the current function.\n\t\t*/\n\t\tgetMethodName(): string | undefined;\n\n\t\t/**\n\t\tReturns the name of the script if this function was defined in a script.\n\t\t*/\n\t\tgetFileName(): string | null;\n\n\t\t/**\n\t\tReturns the current line number if this function was defined in a script.\n\t\t*/\n\t\tgetLineNumber(): number | null;\n\n\t\t/**\n\t\tReturns the current column number if this function was defined in a script.\n\t\t*/\n\t\tgetColumnNumber(): number | null;\n\n\t\t/**\n\t\tReturns a string representing the location where `eval` was called if this function was created using a call to `eval`.\n\t\t*/\n\t\tgetEvalOrigin(): string | undefined;\n\n\t\t/**\n\t\tReturns `true` if this is a top-level invocation, that is, if it's a global object.\n\t\t*/\n\t\tisToplevel(): boolean;\n\n\t\t/**\n\t\tReturns `true` if this call takes place in code defined by a call to `eval`.\n\t\t*/\n\t\tisEval(): boolean;\n\n\t\t/**\n\t\tReturns `true` if this call is in native V8 code.\n\t\t*/\n\t\tisNative(): boolean;\n\n\t\t/**\n\t\tReturns `true` if this is a constructor call.\n\t\t*/\n\t\tisConstructor(): boolean;\n\t}\n}\n\ndeclare const callsites: {\n\t/**\n\tGet callsites from the V8 stack trace API.\n\n\t@returns An array of `CallSite` objects.\n\n\t@example\n\t```\n\timport callsites = require('callsites');\n\n\tfunction unicorn() {\n\t\tconsole.log(callsites()[0].getFileName());\n\t\t//=> '/Users/sindresorhus/dev/callsites/test.js'\n\t}\n\n\tunicorn();\n\t```\n\t*/\n\t(): callsites.CallSite[];\n\n\t// TODO: Remove this for the next major release, refactor the whole definition to:\n\t// declare function callsites(): callsites.CallSite[];\n\t// export = callsites;\n\tdefault: typeof callsites;\n};\n\nexport = callsites;\n/index.js\u0001k'use strict';\n\nconst callsites = () => {\n\tconst _prepareStackTrace = Error.prepareStackTrace;\n\tError.prepareStackTrace = (_, stack) => stack;\n\tconst stack = new Error().stack.slice(1);\n\tError.prepareStackTrace = _prepareStackTrace;\n\treturn stack;\n};\n\nmodule.exports = callsites;\n// TODO: Remove this for the next major release\nmodule.exports.default = callsites;\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/Y2FuaXVzZS1saXRlQDEuMC4zMDAwMTQ2OA==",
    "content": "\u0003-/data/features/innertext.js\u0005module.exports={A:{A:{\"1\":\"J D E F A B\",\"16\":\"DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"I w J D E F A B C K L G 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"16\":\"IC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\",\"16\":\"F\"},G:{\"1\":\"E VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"16\":\"0B\"},H:{\"1\":\"pC\"},I:{\"1\":\"uB I H sC tC CC uC vC\",\"16\":\"qC rC\"},J:{\"1\":\"D A\"},K:{\"1\":\"A B C h rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:1,C:\"HTMLElement.innerText\"};\n$/data/features/css-initial-letter.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"2\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v\",\"260\":\"f H\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v\",\"260\":\"f H yB zB HC\"},E:{\"2\":\"I w J D E IC 0B JC KC LC\",\"4\":\"F\",\"164\":\"A B C K L G MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC\",\"164\":\"aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"2\":\"A B C h rB BC sB\"},L:{\"260\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"2\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"2\":\"2B\"},R:{\"2\":\"AD\"},S:{\"2\":\"BD CD\"}},B:5,C:\"CSS Initial Letter\"};\n/data/features/srcset.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"260\":\"C\",\"514\":\"K L G\"},C:{\"1\":\"FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 EC uB I w J D E F A B C K L G M N O x g y z FC GC\",\"194\":\"9 AB BB CB DB EB\"},D:{\"1\":\"FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB\",\"260\":\"BB CB DB EB\"},E:{\"1\":\"F A B C K L G MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D IC 0B JC KC\",\"260\":\"E LC\"},F:{\"1\":\"2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F B C G M N O x g QC RC SC TC rB BC UC sB\",\"260\":\"0 1 y z\"},G:{\"1\":\"aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC CC WC XC YC\",\"260\":\"E ZC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:1,C:\"Srcset and sizes attributes\"};\n/dist/lib/supported.jsomodule.exports = {\n  y: 1 << 0,\n  n: 1 << 1,\n  a: 1 << 2,\n  p: 1 << 3,\n  u: 1 << 4,\n  x: 1 << 5,\n  d: 1 << 6\n}\n/data/regions/NI.js\r\u0007module.exports={C:{\"48\":0.00757,\"52\":0.01136,\"71\":0.01514,\"88\":0.00757,\"97\":0.00379,\"98\":0.03029,\"99\":0.00757,\"102\":0.01136,\"103\":0.00757,\"104\":0.00757,\"105\":0.01514,\"106\":0.01514,\"107\":0.0265,\"108\":0.04543,\"109\":0.8935,\"110\":0.65119,\"111\":0.00379,_:\"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 49 50 51 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 89 90 91 92 93 94 95 96 100 101 112 3.5 3.6\"},D:{\"38\":0.00379,\"42\":0.00757,\"49\":0.01136,\"66\":0.00757,\"68\":0.01136,\"69\":0.01136,\"70\":0.00757,\"72\":0.00379,\"73\":0.00757,\"75\":0.04543,\"76\":0.01136,\"77\":0.01136,\"78\":0.00379,\"79\":0.09465,\"80\":0.01136,\"81\":0.01136,\"83\":0.01893,\"84\":0.00757,\"86\":0.00379,\"87\":0.01514,\"88\":0.0265,\"90\":0.00379,\"91\":0.43539,\"92\":0.01136,\"93\":0.01136,\"94\":0.00757,\"95\":0.00757,\"96\":0.03029,\"97\":0.07951,\"98\":0.01893,\"99\":0.03407,\"100\":0.04922,\"101\":0.01893,\"102\":0.06058,\"103\":0.15523,\"104\":0.06815,\"105\":0.06058,\"106\":0.06058,\"107\":0.12115,\"108\":0.35967,\"109\":15.59832,\"110\":9.34006,\"111\":0.02272,\"112\":0.00757,_:\"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 39 40 41 43 44 45 46 47 48 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 67 71 74 85 89 113\"},F:{\"85\":0.00379,\"93\":0.04543,\"94\":0.8935,\"95\":0.45053,_:\"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 86 87 88 89 90 91 92 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1\",\"10.0-10.1\":0},B:{\"14\":0.00379,\"18\":0.01514,\"84\":0.00757,\"85\":0.00757,\"92\":0.02272,\"102\":0.00757,\"103\":0.01514,\"104\":0.01136,\"105\":0.01136,\"106\":0.00757,\"107\":0.04922,\"108\":0.04165,\"109\":1.18123,\"110\":1.64312,_:\"12 13 15 16 17 79 80 81 83 86 87 88 89 90 91 93 94 95 96 97 98 99 100 101\"},E:{\"4\":0,\"14\":0.01136,\"15\":0.00379,_:\"0 5 6 7 8 9 10 11 12 13 3.1 3.2 6.1 7.1 9.1 10.1 11.1 12.1 15.2-15.3 16.4\",\"5.1\":0.01514,\"13.1\":0.04543,\"14.1\":0.06058,\"15.1\":0.03407,\"15.4\":0.01893,\"15.5\":0.053,\"15.6\":0.16658,\"16.0\":0.04165,\"16.1\":0.06058,\"16.2\":0.14765,\"16.3\":0.10979},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0.00821,\"4.2-4.3\":0,\"5.0-5.1\":0.00299,\"6.0-6.1\":0,\"7.0-7.1\":0.02463,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0.02538,\"10.0-10.2\":0,\"10.3\":0.01119,\"11.0-11.2\":0.00672,\"11.3-11.4\":0.00299,\"12.0-12.1\":0.00299,\"12.2-12.5\":0.18658,\"13.0-13.1\":0.00448,\"13.2\":0.00149,\"13.3\":0.00522,\"13.4-13.7\":0.02687,\"14.0-14.4\":0.09329,\"14.5-14.8\":0.19479,\"15.0-15.1\":0.05971,\"15.2-15.3\":0.06568,\"15.4\":0.11568,\"15.5\":0.17837,\"15.6\":0.43735,\"16.0\":0.92694,\"16.1\":1.56804,\"16.2\":1.62327,\"16.3\":1.08666,\"16.4\":0.00299},P:{\"4\":0.2888,\"20\":0.68074,\"5.0-5.4\":0.01042,\"6.2-6.4\":0.0206,\"7.2-7.4\":0.38163,\"8.2\":0.02044,\"9.2\":0.04126,\"10.1\":0.0217,\"11.1-11.2\":0.10314,\"12.0\":0.01031,\"13.0\":0.04126,\"14.0\":0.05157,\"15.0\":0.04126,\"16.0\":0.23723,\"17.0\":0.17534,\"18.0\":0.18566,\"19.0\":1.63997},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.00233,\"4.2-4.3\":0.00233,\"4.4\":0,\"4.4.3-4.4.4\":0.03263},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"11\":0.03407,_:\"6 7 8 9 10 5.5\"},N:{\"10\":0.03712,\"11\":0.07423},S:{\"2.5\":0.00622,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.15538},H:{\"0\":0.35892},L:{\"0\":54.45033},R:{_:\"0\"},M:{\"0\":0.13673},Q:{\"13.1\":0}};\n/data/features/css-image-set.js\u0006\u001fmodule.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"2\":\"C K L G M N O\",\"164\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U FC GC\",\"66\":\"V W\",\"2305\":\"Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2820\":\"X\"},D:{\"2\":\"I w J D E F A B C K L G M N O x g\",\"164\":\"0 1 2 3 4 5 6 7 8 9 y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB\",\"2049\":\"zB HC\"},E:{\"1\":\"PC\",\"2\":\"I w IC 0B JC\",\"132\":\"A B C K 1B rB sB 2B\",\"164\":\"J D E F KC LC MC\",\"1540\":\"L G NC OC 3B 4B 5B 6B tB 7B 8B 9B AC\"},F:{\"2\":\"F B C QC RC SC TC rB BC UC sB\",\"164\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\"},G:{\"2\":\"0B VC CC WC\",\"132\":\"cC dC eC fC gC hC iC jC kC lC\",\"164\":\"E XC YC ZC aC bC\",\"1540\":\"mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I qC rC sC tC CC\",\"164\":\"H uC vC\"},J:{\"2\":\"D\",\"164\":\"A\"},K:{\"2\":\"A B C rB BC sB\",\"164\":\"h\"},L:{\"164\":\"H\"},M:{\"2305\":\"f\"},N:{\"2\":\"A B\"},O:{\"164\":\"wC\"},P:{\"164\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"164\":\"2B\"},R:{\"164\":\"AD\"},S:{\"2\":\"BD CD\"}},B:5,C:\"CSS image-set\"};\n/dist/unpacker/browsers.js9module.exports.browsers = require('../../data/browsers')\n$/data/features/css-math-functions.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"1\":\"nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB FC GC\"},D:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB\"},E:{\"1\":\"L G 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A B IC 0B JC KC LC MC 1B\",\"132\":\"C K rB sB\"},F:{\"1\":\"fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB QC RC SC TC rB BC UC sB\"},G:{\"1\":\"lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC\",\"132\":\"fC gC hC iC jC kC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"1\":\"g 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I xC yC zC 0C 1C 1B 2C\"},Q:{\"2\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"2\":\"BD\"}},B:5,C:\"CSS math functions min(), max() and clamp()\"};\n/data/regions/MY.js\u0011module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0.00897,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0.00449,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.00897,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0.00449,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.00449,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0.00449,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0.00449,\"100\":0,\"101\":0,\"102\":0.02243,\"103\":0.00449,\"104\":0.00449,\"105\":0.00449,\"106\":0.00449,\"107\":0.00897,\"108\":0.01794,\"109\":0.45309,\"110\":0.30505,\"111\":0.00449,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0.00897,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0.00897,\"35\":0,\"36\":0,\"37\":0,\"38\":0.0314,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0.00449,\"48\":0,\"49\":0.01794,\"50\":0,\"51\":0,\"52\":0,\"53\":0.02692,\"54\":0,\"55\":0.02243,\"56\":0.00449,\"57\":0,\"58\":0.00897,\"59\":0,\"60\":0,\"61\":0,\"62\":0.00449,\"63\":0,\"64\":0,\"65\":0.00449,\"66\":0,\"67\":0.00449,\"68\":0,\"69\":0.00449,\"70\":0.00449,\"71\":0.00449,\"72\":0.00449,\"73\":0.00449,\"74\":0.01346,\"75\":0.00897,\"76\":0.00449,\"77\":0.00449,\"78\":0.00449,\"79\":0.15701,\"80\":0.00449,\"81\":0.02243,\"83\":0.01346,\"84\":0.01346,\"85\":0.01346,\"86\":0.02243,\"87\":0.04037,\"88\":0.01794,\"89\":0.00897,\"90\":0.00897,\"91\":0.02692,\"92\":0.13009,\"93\":0.00449,\"94\":0.00897,\"95\":0.00897,\"96\":0.01346,\"97\":0.02692,\"98\":0.02692,\"99\":0.02243,\"100\":0.02243,\"101\":0.01346,\"102\":0.02692,\"103\":0.07178,\"104\":0.02692,\"105\":0.0314,\"106\":0.02692,\"107\":0.09421,\"108\":0.24673,\"109\":8.17798,\"110\":4.78656,\"111\":0.00897,\"112\":0.00449,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0.02243,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0.02243,\"37\":0.00449,\"38\":0,\"39\":0,\"40\":0.00449,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0.0314,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0.00449,\"65\":0,\"66\":0.00449,\"67\":0.04935,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.01794,\"94\":0.15252,\"95\":0.08523,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0,\"106\":0.00449,\"107\":0.00449,\"108\":0.02243,\"109\":0.54281,\"110\":0.65944},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.00897,\"14\":0.04037,\"15\":0.01346,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0.00449,\"13.1\":0.03589,\"14.1\":0.12112,\"15.1\":0.02243,\"15.2-15.3\":0.01794,\"15.4\":0.05383,\"15.5\":0.11664,\"15.6\":0.45757,\"16.0\":0.03589,\"16.1\":0.16598,\"16.2\":0.37234,\"16.3\":0.20636,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0.01155,\"6.0-6.1\":0.01155,\"7.0-7.1\":0.03235,\"8.1-8.4\":0.04622,\"9.0-9.2\":0.01618,\"9.3\":0.25419,\"10.0-10.2\":0.01618,\"10.3\":0.59851,\"11.0-11.2\":0.01849,\"11.3-11.4\":0.01387,\"12.0-12.1\":0.03004,\"12.2-12.5\":0.65859,\"13.0-13.1\":0.01618,\"13.2\":0.00924,\"13.3\":0.03466,\"13.4-13.7\":0.10861,\"14.0-14.4\":0.32583,\"14.5-14.8\":0.56847,\"15.0-15.1\":0.23108,\"15.2-15.3\":0.23339,\"15.4\":0.44137,\"15.5\":0.6609,\"15.6\":1.73544,\"16.0\":2.79611,\"16.1\":4.24038,\"16.2\":5.40042,\"16.3\":3.06648,\"16.4\":0.00924},P:{\"4\":0.71184,\"20\":0.6595,\"5.0-5.4\":0.0314,\"6.2-6.4\":0,\"7.2-7.4\":0.04187,\"8.2\":0,\"9.2\":0,\"10.1\":0,\"11.1-11.2\":0.0314,\"12.0\":0.01047,\"13.0\":0.01047,\"14.0\":0.02094,\"15.0\":0.0314,\"16.0\":0.04187,\"17.0\":0.04187,\"18.0\":0.06281,\"19.0\":1.0887},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0.0065,\"4.4\":0,\"4.4.3-4.4.4\":0.07145},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.0628,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.96495},H:{\"0\":0.53769},L:{\"0\":53.04331},R:{_:\"0\"},M:{\"0\":0.15439},Q:{\"13.1\":0.00551}};\n(/data/features/declarative-shadow-dom.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O P Q R S T U V W X Y\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"1\":\"Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T\",\"66\":\"U V W X Y\"},E:{\"1\":\"AC PC\",\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B\"},F:{\"1\":\"pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB QC RC SC TC rB BC UC sB\"},G:{\"1\":\"AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"1\":\"g 6C tB 7C 8C 9C\",\"2\":\"I xC yC zC 0C 1C 1B 2C 3C 4C 5C\"},Q:{\"2\":\"2B\"},R:{\"1\":\"AD\"},S:{\"2\":\"BD CD\"}},B:7,C:\"Declarative Shadow DOM\"};\n$/data/features/orientation-sensor.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"1\":\"gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB\",\"194\":\"ZB vB aB wB bB cB dB eB fB\"},E:{\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB QC RC SC TC rB BC UC sB\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"2\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"2\":\"BD CD\"}},B:4,C:\"Orientation Sensor\"};\n/data/regions/MT.js\f\u0018module.exports={C:{\"52\":0.04106,\"78\":0.01026,\"102\":0.02053,\"107\":0.01026,\"108\":0.0154,\"109\":1.10338,\"110\":0.57478,_:\"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 103 104 105 106 111 112 3.5 3.6\"},D:{\"44\":0.00513,\"49\":0.02053,\"65\":0.02053,\"70\":0.00513,\"72\":0.00513,\"76\":0.00513,\"77\":0.02566,\"79\":0.02566,\"80\":0.02053,\"81\":0.00513,\"83\":0.02053,\"85\":0.02566,\"86\":0.02566,\"87\":0.04619,\"89\":0.00513,\"92\":0.0154,\"93\":0.29252,\"95\":0.01026,\"98\":0.02053,\"99\":0.25147,\"100\":0.03592,\"101\":0.02566,\"102\":0.01026,\"103\":0.13343,\"104\":0.02053,\"105\":0.4003,\"106\":0.11804,\"107\":0.22068,\"108\":1.01614,\"109\":21.9239,\"110\":12.08586,\"111\":0.02053,_:\"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 45 46 47 48 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 66 67 68 69 71 73 74 75 78 84 88 90 91 94 96 97 112 113\"},F:{\"28\":0.02053,\"46\":0.01026,\"93\":0.1129,\"94\":0.89297,\"95\":0.32845,_:\"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1\",\"10.0-10.1\":0},B:{\"92\":0.01026,\"104\":0.01026,\"107\":0.02566,\"108\":0.06672,\"109\":2.83286,\"110\":3.16131,_:\"12 13 14 15 16 17 18 79 80 81 83 84 85 86 87 88 89 90 91 93 94 95 96 97 98 99 100 101 102 103 105 106\"},E:{\"4\":0,\"13\":0.01026,\"14\":0.21554,\"15\":0.02566,_:\"0 5 6 7 8 9 10 11 12 3.1 3.2 5.1 6.1 7.1 9.1 10.1 16.4\",\"11.1\":0.00513,\"12.1\":0.01026,\"13.1\":0.10777,\"14.1\":0.27713,\"15.1\":0.06672,\"15.2-15.3\":0.02566,\"15.4\":0.06672,\"15.5\":0.22068,\"15.6\":0.73388,\"16.0\":0.10264,\"16.1\":0.40543,\"16.2\":0.69282,\"16.3\":0.59531},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0.00315,\"6.0-6.1\":0.00315,\"7.0-7.1\":0.0063,\"8.1-8.4\":0.00315,\"9.0-9.2\":0,\"9.3\":0.0252,\"10.0-10.2\":0,\"10.3\":0.27877,\"11.0-11.2\":0.0063,\"11.3-11.4\":0.01102,\"12.0-12.1\":0.02047,\"12.2-12.5\":0.1512,\"13.0-13.1\":0.00157,\"13.2\":0,\"13.3\":0.00787,\"13.4-13.7\":0.0189,\"14.0-14.4\":0.1953,\"14.5-14.8\":0.38272,\"15.0-15.1\":0.05827,\"15.2-15.3\":0.12285,\"15.4\":0.19057,\"15.5\":0.34335,\"15.6\":1.19226,\"16.0\":2.08371,\"16.1\":3.84297,\"16.2\":4.09969,\"16.3\":2.05851,\"16.4\":0.00787},P:{\"4\":0.05278,\"20\":0.93952,\"5.0-5.4\":0.01042,\"6.2-6.4\":0.01025,\"7.2-7.4\":0.03167,\"8.2\":0.02044,\"9.2\":0.01042,\"10.1\":0.0217,\"11.1-11.2\":0.01056,\"12.0\":0.02048,\"13.0\":0.02111,\"14.0\":0.06252,\"15.0\":0.05278,\"16.0\":0.01056,\"17.0\":0.02111,\"18.0\":0.03167,\"19.0\":1.64681},I:{\"0\":0,\"3\":0,\"4\":0.00365,\"2.1\":0,\"2.2\":0,\"2.3\":0.00365,\"4.1\":0.00365,\"4.2-4.3\":0.0073,\"4.4\":0,\"4.4.3-4.4.4\":0.09858},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"8\":0.03079,\"9\":0.00513,\"11\":0.28739,_:\"6 7 10 5.5\"},N:{\"10\":0.02102,\"11\":0.02035},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.10223},H:{\"0\":0.212},L:{\"0\":30.63275},R:{_:\"0\"},M:{\"0\":0.18012},Q:{\"13.1\":0}};\n/data/features/array-find.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"16\":\"C K L\"},C:{\"1\":\"2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 EC uB I w J D E F A B C K L G M N O x g y z FC GC\"},D:{\"1\":\"MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB\"},E:{\"1\":\"E F A B C K L G LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D IC 0B JC KC\"},F:{\"1\":\"9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 F B C G M N O x g y z QC RC SC TC rB BC UC sB\"},G:{\"1\":\"E ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC CC WC XC YC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D\",\"16\":\"A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:6,C:\"Array.prototype.find\"};\n/data/regions/LU.js\u0011mmodule.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0.0051,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0.0051,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0.01531,\"51\":0,\"52\":0.01531,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0.0102,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0.0102,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.03061,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0.0102,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0.0051,\"89\":0.0051,\"90\":0,\"91\":0.06122,\"92\":0,\"93\":0.0051,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0.0051,\"101\":0.0051,\"102\":0.83163,\"103\":0.02551,\"104\":0.0051,\"105\":0.0051,\"106\":0.03061,\"107\":0.11735,\"108\":0.12245,\"109\":1.63264,\"110\":1.21428,\"111\":0.0051,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0.0051,\"46\":0,\"47\":0,\"48\":0,\"49\":0.0102,\"50\":0,\"51\":0,\"52\":0,\"53\":0.0102,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0.0051,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0.19388,\"73\":0,\"74\":0.01531,\"75\":0.0051,\"76\":0,\"77\":0,\"78\":0.0051,\"79\":0.03061,\"80\":0.0102,\"81\":0.0051,\"83\":0.0102,\"84\":0.0051,\"85\":0.21939,\"86\":0.02041,\"87\":0.02041,\"88\":0.0051,\"89\":0,\"90\":0.0102,\"91\":0.01531,\"92\":0.0051,\"93\":0.0102,\"94\":0,\"95\":0.0051,\"96\":0.0051,\"97\":0.02041,\"98\":0.01531,\"99\":0.0051,\"100\":0.10714,\"101\":0.02551,\"102\":0.05102,\"103\":0.05612,\"104\":0.04082,\"105\":0.04592,\"106\":0.02041,\"107\":0.10714,\"108\":0.29081,\"109\":6.29077,\"110\":4.51527,\"111\":0,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.06633,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0.0051,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0.0051,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.02551,\"94\":0.35204,\"95\":0.21428,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0.04082,\"97\":0,\"98\":0.01531,\"99\":0,\"100\":0,\"101\":0.0051,\"102\":0,\"103\":0.0051,\"104\":0.0051,\"105\":0.0051,\"106\":0.0102,\"107\":0.0102,\"108\":0.2653,\"109\":1.29591,\"110\":1.69897},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.02551,\"14\":0.05612,\"15\":0.01531,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0.13775,\"13.1\":0.19388,\"14.1\":0.31122,\"15.1\":0.03061,\"15.2-15.3\":0.03061,\"15.4\":0.09694,\"15.5\":0.31122,\"15.6\":0.82652,\"16.0\":0.18367,\"16.1\":0.47449,\"16.2\":1.13264,\"16.3\":0.88775,\"16.4\":0},G:{\"8\":0.00336,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0.18125,\"5.0-5.1\":0,\"6.0-6.1\":0.00336,\"7.0-7.1\":0,\"8.1-8.4\":0.00336,\"9.0-9.2\":0.56389,\"9.3\":0.02014,\"10.0-10.2\":0,\"10.3\":0.05035,\"11.0-11.2\":0.02014,\"11.3-11.4\":0.00671,\"12.0-12.1\":0.11076,\"12.2-12.5\":0.33565,\"13.0-13.1\":0,\"13.2\":0.01007,\"13.3\":0.0235,\"13.4-13.7\":0.10405,\"14.0-14.4\":0.23495,\"14.5-14.8\":0.56053,\"15.0-15.1\":0.19132,\"15.2-15.3\":0.23495,\"15.4\":0.31215,\"15.5\":0.66458,\"15.6\":2.63819,\"16.0\":3.95057,\"16.1\":8.1193,\"16.2\":8.31733,\"16.3\":5.60195,\"16.4\":0.02014},P:{\"4\":0.17353,\"20\":1.50048,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0.02041,\"8.2\":0,\"9.2\":0,\"10.1\":0,\"11.1-11.2\":0,\"12.0\":0,\"13.0\":0.01021,\"14.0\":0.04083,\"15.0\":0.01021,\"16.0\":0.03062,\"17.0\":0.03062,\"18.0\":0.06124,\"19.0\":2.01085},I:{\"0\":0,\"3\":0.05707,\"4\":0.00116,\"2.1\":0.02912,\"2.2\":0.08386,\"2.3\":0.00116,\"4.1\":0.06289,\"4.2-4.3\":0.06872,\"4.4\":0,\"4.4.3-4.4.4\":0.21663},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0.03673,\"9\":0,\"10\":0.01224,\"11\":0.07347,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.9894},H:{\"0\":0.48226},L:{\"0\":30.28254},R:{_:\"0\"},M:{\"0\":0.85225},Q:{\"13.1\":1.19021}};\n/data/regions/NE.js\u0011\nmodule.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0.0015,\"69\":0,\"70\":0,\"71\":0,\"72\":0.00451,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.0015,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.0015,\"94\":0,\"95\":0.0015,\"96\":0,\"97\":0,\"98\":0.0015,\"99\":0,\"100\":0,\"101\":0,\"102\":0.00301,\"103\":0,\"104\":0.00301,\"105\":0,\"106\":0.01052,\"107\":0.0015,\"108\":0.00902,\"109\":0.17886,\"110\":0.09018,\"111\":0.0015,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0.00301,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0.0015,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0.02255,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0.0015,\"67\":0,\"68\":0,\"69\":0,\"70\":0.00301,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0.00752,\"80\":0.0015,\"81\":0.00601,\"83\":0.0015,\"84\":0,\"85\":0,\"86\":0,\"87\":0.00301,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00301,\"93\":0.0015,\"94\":0,\"95\":0.0015,\"96\":0,\"97\":0.0015,\"98\":0,\"99\":0,\"100\":0,\"101\":0.0015,\"102\":0.0015,\"103\":0.00301,\"104\":0.00601,\"105\":0.0015,\"106\":0.01353,\"107\":0.04058,\"108\":0.01954,\"109\":0.41633,\"110\":0.23898,\"111\":0,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0.00301,\"27\":0,\"28\":0.0015,\"29\":0,\"30\":0.02856,\"31\":0.01503,\"32\":0,\"33\":0.0015,\"34\":0,\"35\":0,\"36\":0,\"37\":0.01503,\"38\":0.00301,\"39\":0,\"40\":0,\"41\":0,\"42\":0.0015,\"43\":0,\"44\":0,\"45\":0,\"46\":0.0015,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0.0015,\"58\":0,\"60\":0.04659,\"62\":0,\"63\":0.04659,\"64\":0.00752,\"65\":0.00301,\"66\":0.03006,\"67\":0.0992,\"68\":0,\"69\":0,\"70\":0,\"71\":0.0015,\"72\":0,\"73\":0.0015,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0.0015,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0.02405,\"95\":0.03908,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0.0015},B:{\"12\":0.0015,\"13\":0.0015,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0.00301,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0.0015,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00451,\"93\":0,\"94\":0,\"95\":0,\"96\":0.0015,\"97\":0,\"98\":0,\"99\":0,\"100\":0.00451,\"101\":0.0015,\"102\":0,\"103\":0,\"104\":0.01503,\"105\":0.16383,\"106\":0.0015,\"107\":0.00451,\"108\":0.04058,\"109\":0.16984,\"110\":0.1022},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0.0015,\"15\":0,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0.01653,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0,\"13.1\":0.0015,\"14.1\":0.00301,\"15.1\":0,\"15.2-15.3\":0,\"15.4\":0.0015,\"15.5\":0,\"15.6\":0.0015,\"16.0\":0.0015,\"16.1\":0.00301,\"16.2\":0.00601,\"16.3\":0.00301,\"16.4\":0},G:{\"8\":0.00292,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0.2077,\"10.0-10.2\":0,\"10.3\":0.07652,\"11.0-11.2\":0.00364,\"11.3-11.4\":0,\"12.0-12.1\":0.0102,\"12.2-12.5\":0.6734,\"13.0-13.1\":0.00292,\"13.2\":0.00364,\"13.3\":0.03352,\"13.4-13.7\":0.24852,\"14.0-14.4\":0.438,\"14.5-14.8\":0.53566,\"15.0-15.1\":0.28423,\"15.2-15.3\":0.24633,\"15.4\":0.13337,\"15.5\":0.38917,\"15.6\":0.36585,\"16.0\":0.72441,\"16.1\":0.69308,\"16.2\":0.77543,\"16.3\":0.85195,\"16.4\":0.00583},P:{\"4\":0.7605,\"20\":0.17011,\"5.0-5.4\":0,\"6.2-6.4\":0.02001,\"7.2-7.4\":0.11007,\"8.2\":0,\"9.2\":0.02001,\"10.1\":0,\"11.1-11.2\":0.04003,\"12.0\":0,\"13.0\":0.22015,\"14.0\":0.01001,\"15.0\":0,\"16.0\":0.02001,\"17.0\":0.04003,\"18.0\":0.04003,\"19.0\":0.52034},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0.00607,\"4.4\":0,\"4.4.3-4.4.4\":0.57792},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0.00167,\"9\":0,\"10\":0,\"11\":0.01336,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0.02549,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":1.66541},H:{\"0\":3.83718},L:{\"0\":81.62568},R:{_:\"0\"},M:{\"0\":0.09347},Q:{\"13.1\":0.04249}};\n/data/features/customevent.js\u0006\u000fmodule.exports={A:{A:{\"2\":\"J D E DC\",\"132\":\"F A B\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB I w FC GC\",\"132\":\"J D E F A\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"I\",\"16\":\"w J D E K L\",\"388\":\"F A B C\"},E:{\"1\":\"D E F A B C K L G KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I IC 0B\",\"16\":\"w J\",\"388\":\"JC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e UC sB\",\"2\":\"F QC RC SC TC\",\"132\":\"B rB BC\"},G:{\"1\":\"E XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"VC\",\"16\":\"0B CC\",\"388\":\"WC\"},H:{\"1\":\"pC\"},I:{\"1\":\"H uC vC\",\"2\":\"qC rC sC\",\"388\":\"uB I tC CC\"},J:{\"1\":\"A\",\"388\":\"D\"},K:{\"1\":\"C h sB\",\"2\":\"A\",\"132\":\"B rB BC\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"132\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:1,C:\"CustomEvent\"};\n/data/features/const.js\u00063module.exports={A:{A:{\"2\":\"J D E F A DC\",\"2052\":\"B\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"132\":\"EC uB I w J D E F A B C FC GC\",\"260\":\"0 1 2 3 4 5 6 7 8 9 K L G M N O x g y z AB BB CB\"},D:{\"1\":\"QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"260\":\"I w J D E F A B C K L G M N O x g\",\"772\":\"0 1 2 3 4 5 6 7 8 9 y z AB BB CB DB EB FB GB HB\",\"1028\":\"IB JB KB LB MB NB OB PB\"},E:{\"1\":\"B C K L G rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"260\":\"I w A IC 0B 1B\",\"772\":\"J D E F JC KC LC MC\"},F:{\"1\":\"DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F QC\",\"132\":\"B RC SC TC rB BC\",\"644\":\"C UC sB\",\"772\":\"0 1 2 3 4 G M N O x g y z\",\"1028\":\"5 6 7 8 9 AB BB CB\"},G:{\"1\":\"eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"260\":\"0B VC CC cC dC\",\"772\":\"E WC XC YC ZC aC bC\"},H:{\"644\":\"pC\"},I:{\"1\":\"H\",\"16\":\"qC rC\",\"260\":\"sC\",\"772\":\"uB I tC CC uC vC\"},J:{\"772\":\"D A\"},K:{\"1\":\"h\",\"132\":\"A B rB BC\",\"644\":\"C sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"B\",\"2\":\"A\"},O:{\"1\":\"wC\"},P:{\"1\":\"g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"1028\":\"I\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:6,C:\"const\"};\n&/data/features/css-at-counter-style.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"2\":\"C K L G M N O P Q R S T U V W X Y Z\",\"132\":\"a b c d e i j k l m n o p q r s t u v f H\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z FC GC\",\"132\":\"AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\"},D:{\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z\",\"132\":\"a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB QC RC SC TC rB BC UC sB\",\"132\":\"pB qB P Q R xB S T U V W X Y Z a b c d e\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I qC rC sC tC CC uC vC\",\"132\":\"H\"},J:{\"2\":\"D A\"},K:{\"2\":\"A B C rB BC sB\",\"132\":\"h\"},L:{\"132\":\"H\"},M:{\"132\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"2\":\"I xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C\",\"132\":\"g tB 7C 8C 9C\"},Q:{\"2\":\"2B\"},R:{\"132\":\"AD\"},S:{\"132\":\"BD CD\"}},B:4,C:\"CSS Counter Styles\"};\n/data/features/localecompare.js\u0005module.exports={A:{A:{\"1\":\"B\",\"16\":\"DC\",\"132\":\"J D E F A\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"132\":\"0 1 2 3 4 5 EC uB I w J D E F A B C K L G M N O x g y z FC GC\"},D:{\"1\":\"1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"132\":\"0 I w J D E F A B C K L G M N O x g y z\"},E:{\"1\":\"A B C K L G 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"132\":\"I w J D E F IC 0B JC KC LC MC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"16\":\"F B C QC RC SC TC rB BC UC\",\"132\":\"sB\"},G:{\"1\":\"cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"132\":\"E 0B VC CC WC XC YC ZC aC bC\"},H:{\"132\":\"pC\"},I:{\"1\":\"H uC vC\",\"132\":\"uB I qC rC sC tC CC\"},J:{\"132\":\"D A\"},K:{\"1\":\"h\",\"16\":\"A B C rB BC\",\"132\":\"sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"B\",\"132\":\"A\"},O:{\"1\":\"wC\"},P:{\"1\":\"g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"132\":\"I\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"4\":\"BD\"}},B:6,C:\"localeCompare()\"};\n/data/regions/MK.js\u0011module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0.00381,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0.00381,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0.00761,\"51\":0.00381,\"52\":0.04568,\"53\":0,\"54\":0,\"55\":0,\"56\":0.00761,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0.00381,\"62\":0,\"63\":0,\"64\":0,\"65\":0.00381,\"66\":0,\"67\":0,\"68\":0.00381,\"69\":0,\"70\":0,\"71\":0,\"72\":0.00381,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.00381,\"94\":0.00381,\"95\":0,\"96\":0,\"97\":0,\"98\":0.00381,\"99\":0.00381,\"100\":0,\"101\":0,\"102\":0.01523,\"103\":0.00381,\"104\":0.00381,\"105\":0.01523,\"106\":0.00761,\"107\":0.05711,\"108\":0.03046,\"109\":0.74998,\"110\":0.35405,\"111\":0.01142,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0.00761,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0.00381,\"48\":0,\"49\":0.02665,\"50\":0,\"51\":0,\"52\":0,\"53\":0.00381,\"54\":0,\"55\":0,\"56\":0.00381,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0.00381,\"64\":0.00761,\"65\":0,\"66\":0.00381,\"67\":0,\"68\":0.00381,\"69\":0,\"70\":0,\"71\":0,\"72\":0.00381,\"73\":0,\"74\":0,\"75\":0.00381,\"76\":0,\"77\":0,\"78\":0.00381,\"79\":0.06472,\"80\":0,\"81\":0.01904,\"83\":0.01523,\"84\":0.00761,\"85\":0.01523,\"86\":0.01142,\"87\":0.01142,\"88\":0.00381,\"89\":0.00381,\"90\":0.00381,\"91\":0.00761,\"92\":0.01523,\"93\":0.00381,\"94\":0.00761,\"95\":0.00761,\"96\":0.00761,\"97\":0.00761,\"98\":0.00381,\"99\":0.00381,\"100\":0.01523,\"101\":0.00761,\"102\":0.01523,\"103\":0.02284,\"104\":0.00761,\"105\":0.02284,\"106\":0.01904,\"107\":0.03807,\"108\":0.17893,\"109\":6.77265,\"110\":3.63569,\"111\":0.00761,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0.00761,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0.00381,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0.01523,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.00381,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0.00381,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0.00381,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.02284,\"94\":0.22842,\"95\":0.15609,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0.00761,\"16\":0,\"17\":0,\"18\":0.00381,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0.00381,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00381,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0.00761,\"108\":0.01142,\"109\":0.30456,\"110\":0.37309},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0.00761,\"15\":0.00381,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0,\"13.1\":0.00761,\"14.1\":0.03046,\"15.1\":0.00381,\"15.2-15.3\":0.00381,\"15.4\":0.00381,\"15.5\":0.01142,\"15.6\":0.04949,\"16.0\":0.01904,\"16.1\":0.01523,\"16.2\":0.0533,\"16.3\":0.03807,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0.03523,\"8.1-8.4\":0.00207,\"9.0-9.2\":0.00207,\"9.3\":0.06839,\"10.0-10.2\":0.00207,\"10.3\":0.02487,\"11.0-11.2\":0.00829,\"11.3-11.4\":0.00414,\"12.0-12.1\":0.00829,\"12.2-12.5\":0.49114,\"13.0-13.1\":0.00414,\"13.2\":0.00207,\"13.3\":0.02694,\"13.4-13.7\":0.09533,\"14.0-14.4\":0.24868,\"14.5-14.8\":0.89938,\"15.0-15.1\":0.08289,\"15.2-15.3\":0.18029,\"15.4\":0.23417,\"15.5\":0.51808,\"15.6\":1.78219,\"16.0\":2.36244,\"16.1\":4.54459,\"16.2\":4.64406,\"16.3\":3.08568,\"16.4\":0.01243},P:{\"4\":0.12218,\"20\":0.7636,\"5.0-5.4\":0.02036,\"6.2-6.4\":0,\"7.2-7.4\":0.01018,\"8.2\":0.01018,\"9.2\":0,\"10.1\":0,\"11.1-11.2\":0.03054,\"12.0\":0.01018,\"13.0\":0.03054,\"14.0\":0.03054,\"15.0\":0.01018,\"16.0\":0.02036,\"17.0\":0.09163,\"18.0\":0.05091,\"19.0\":1.34393},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.03419,\"4.2-4.3\":0.00892,\"4.4\":0,\"4.4.3-4.4.4\":0.02973},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0.00381,\"9\":0,\"10\":0,\"11\":0.01523,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0.00619},O:{\"0\":0.01858},H:{\"0\":0.1583},L:{\"0\":62.55598},R:{_:\"0\"},M:{\"0\":0.0867},Q:{\"13.1\":0}};\n)/data/features/css-repeating-gradients.js\u0006\u0007module.exports={A:{A:{\"1\":\"A B\",\"2\":\"J D E F DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB FC\",\"33\":\"I w J D E F A B C K L G GC\"},D:{\"1\":\"3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"I w J D E F\",\"33\":\"0 1 2 A B C K L G M N O x g y z\"},E:{\"1\":\"D E F A B C K L G KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w IC 0B\",\"33\":\"J JC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e sB\",\"2\":\"F B QC RC SC TC\",\"33\":\"C UC\",\"36\":\"rB BC\"},G:{\"1\":\"E YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC CC\",\"33\":\"WC XC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H uC vC\",\"2\":\"uB qC rC sC\",\"33\":\"I tC CC\"},J:{\"1\":\"A\",\"2\":\"D\"},K:{\"1\":\"h sB\",\"2\":\"A B\",\"33\":\"C\",\"36\":\"rB BC\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:4,C:\"CSS Repeating Gradients\"};\n(/data/features/css-media-range-syntax.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"q r s t u v f H\",\"2\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p\"},C:{\"1\":\"cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB FC GC\"},D:{\"1\":\"q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p\"},E:{\"1\":\"AC PC\",\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B\"},F:{\"1\":\"a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z QC RC SC TC rB BC UC sB\"},G:{\"1\":\"AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"1\":\"g\",\"2\":\"I xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"2\":\"2B\"},R:{\"2\":\"AD\"},S:{\"1\":\"CD\",\"2\":\"BD\"}},B:4,C:\"Media Queries: Range Syntax\"};\n/data/features/dataset.js\u0006\u0010module.exports={A:{A:{\"1\":\"B\",\"4\":\"J D E F A DC\"},B:{\"1\":\"C K L G M\",\"129\":\"N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB\",\"4\":\"EC uB I w FC GC\",\"129\":\"SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\"},D:{\"1\":\"MB NB OB PB QB RB SB TB UB VB\",\"4\":\"I w J\",\"129\":\"0 1 2 3 4 5 6 7 8 9 D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"4\":\"I w IC 0B\",\"129\":\"J D E F A B C K L G JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"9 C AB BB CB DB EB FB GB HB IB rB BC UC sB\",\"4\":\"F B QC RC SC TC\",\"129\":\"0 1 2 3 4 5 6 7 8 G M N O x g y z JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\"},G:{\"4\":\"0B VC CC\",\"129\":\"E WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"4\":\"pC\"},I:{\"4\":\"qC rC sC\",\"129\":\"uB I H tC CC uC vC\"},J:{\"129\":\"D A\"},K:{\"1\":\"C rB BC sB\",\"4\":\"A B\",\"129\":\"h\"},L:{\"129\":\"H\"},M:{\"129\":\"f\"},N:{\"1\":\"B\",\"4\":\"A\"},O:{\"129\":\"wC\"},P:{\"129\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"129\":\"2B\"},R:{\"129\":\"AD\"},S:{\"1\":\"BD\",\"129\":\"CD\"}},B:1,C:\"dataset & data-* attributes\"};\n/data/features/tls1-1.js\u0005module.exports={A:{A:{\"1\":\"B\",\"2\":\"J D DC\",\"66\":\"E F A\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB\",\"2\":\"EC uB I w J D E F A B C K L G M N O x g y z FC GC\",\"66\":\"0\",\"129\":\"hB iB jB kB lB h mB nB oB pB\",\"388\":\"qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T\",\"2\":\"I w J D E F A B C K L G M N O x g y\",\"1540\":\"U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"D E F A B C K LC MC 1B rB sB\",\"2\":\"I w J IC 0B JC KC\",\"513\":\"L G 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB sB\",\"2\":\"F B C QC RC SC TC rB BC UC\",\"1540\":\"h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\"},G:{\"1\":\"E WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC CC\"},H:{\"1\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"1\":\"A\",\"2\":\"D\"},K:{\"1\":\"h sB\",\"2\":\"A B C rB BC\"},L:{\"1\":\"H\"},M:{\"129\":\"f\"},N:{\"1\":\"B\",\"66\":\"A\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:6,C:\"TLS 1.1\"};\n/data/features/offline-apps.js\u0005module.exports={A:{A:{\"1\":\"A B\",\"2\":\"F DC\",\"8\":\"J D E\"},B:{\"1\":\"C K L G M N O P Q R S T\",\"2\":\"U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S FC GC\",\"2\":\"T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"4\":\"uB\",\"8\":\"EC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T\",\"2\":\"U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"I w J D E F A B C K L G JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"8\":\"IC 0B\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB TC rB BC UC sB\",\"2\":\"F h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC\",\"8\":\"RC SC\"},G:{\"1\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"1\":\"uB I qC rC sC tC CC uC vC\",\"2\":\"H\"},J:{\"1\":\"D A\"},K:{\"1\":\"B C rB BC sB\",\"2\":\"A h\"},L:{\"2\":\"H\"},M:{\"2\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"2\":\"AD\"},S:{\"1\":\"BD\",\"2\":\"CD\"}},B:7,C:\"Offline web applications\"};\n/data/regions/JE.js\u0010*module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0.00489,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.00489,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0.00489,\"88\":0,\"89\":0,\"90\":0,\"91\":0.00489,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0.00977,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0,\"108\":0.00977,\"109\":0.89396,\"110\":0.36638,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0.00977,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0.00489,\"80\":0.02931,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0.00977,\"87\":0.00977,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.03908,\"93\":0,\"94\":0.00977,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0.00489,\"101\":0.00489,\"102\":0,\"103\":0.06839,\"104\":0,\"105\":0.01954,\"106\":0,\"107\":0.09282,\"108\":0.42988,\"109\":5.45166,\"110\":3.68329,\"111\":0.00489,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.00489,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.02931,\"94\":0.1954,\"95\":0.07328,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0.00489,\"91\":0,\"92\":0.00489,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0.00977,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0.00489,\"106\":0,\"107\":0.04885,\"108\":0.0977,\"109\":1.79768,\"110\":2.3448},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.00489,\"14\":0.13678,\"15\":0.01954,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0.00489,\"12.1\":0.05374,\"13.1\":0.13678,\"14.1\":0.25891,\"15.1\":0.04885,\"15.2-15.3\":0.05862,\"15.4\":0.05374,\"15.5\":0.25891,\"15.6\":1.26522,\"16.0\":0.14655,\"16.1\":0.60574,\"16.2\":1.64625,\"16.3\":0.7816,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0.64838,\"7.0-7.1\":0,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0.46083,\"10.0-10.2\":0,\"10.3\":0.35902,\"11.0-11.2\":0.00536,\"11.3-11.4\":0.19291,\"12.0-12.1\":0,\"12.2-12.5\":2.11661,\"13.0-13.1\":0,\"13.2\":0.01072,\"13.3\":0.02679,\"13.4-13.7\":0.0643,\"14.0-14.4\":0.81985,\"14.5-14.8\":1.14672,\"15.0-15.1\":0.10717,\"15.2-15.3\":0.23042,\"15.4\":0.56264,\"15.5\":1.43072,\"15.6\":4.37253,\"16.0\":4.20642,\"16.1\":13.94817,\"16.2\":13.53021,\"16.3\":6.14084,\"16.4\":0},P:{\"4\":0.22822,\"20\":1.36934,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0,\"8.2\":0,\"9.2\":0,\"10.1\":0,\"11.1-11.2\":0.01087,\"12.0\":0,\"13.0\":0,\"14.0\":0,\"15.0\":0.01087,\"16.0\":0.0326,\"17.0\":0.04347,\"18.0\":0.06521,\"19.0\":2.5974},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0,\"4.4\":0,\"4.4.3-4.4.4\":0.35218},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.49339,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0},H:{\"0\":0.04358},L:{\"0\":20.17894},R:{_:\"0\"},M:{\"0\":0.43478},Q:{\"13.1\":0}};\n/data/regions/IL.js\u0012\u0000module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0.00435,\"26\":0.0087,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.00435,\"53\":0,\"54\":0,\"55\":0,\"56\":0.0087,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0.0087,\"69\":0.00435,\"70\":0.00435,\"71\":0.00435,\"72\":0.0087,\"73\":0.00435,\"74\":0.00435,\"75\":0.00435,\"76\":0.00435,\"77\":0.00435,\"78\":0.0087,\"79\":0.0522,\"80\":0.0174,\"81\":0.0087,\"82\":0.00435,\"83\":0.00435,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0.00435,\"98\":0,\"99\":0.00435,\"100\":0,\"101\":0,\"102\":0.00435,\"103\":0,\"104\":0,\"105\":0.00435,\"106\":0,\"107\":0.00435,\"108\":0.01305,\"109\":0.30015,\"110\":0.17835,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0.01305,\"32\":0.00435,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0.0087,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0.00435,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0.00435,\"64\":0,\"65\":0.00435,\"66\":0,\"67\":0,\"68\":0.03915,\"69\":0.02175,\"70\":0.02175,\"71\":0.0261,\"72\":0.0348,\"73\":0.0174,\"74\":0.03915,\"75\":0.0261,\"76\":0.0261,\"77\":0.0261,\"78\":0.03915,\"79\":0.0696,\"80\":0.10005,\"81\":0.0435,\"83\":0.03915,\"84\":0.0261,\"85\":0.0435,\"86\":0.0696,\"87\":0.0609,\"88\":0.0522,\"89\":0.04785,\"90\":0.28275,\"91\":0.24795,\"92\":0.23925,\"93\":0.23055,\"94\":0.23055,\"95\":0.01305,\"96\":0.0174,\"97\":0.0087,\"98\":0.0087,\"99\":0.0087,\"100\":0.0261,\"101\":0.0087,\"102\":0.0174,\"103\":0.03915,\"104\":0.02175,\"105\":0.02175,\"106\":0.03915,\"107\":0.0696,\"108\":0.31755,\"109\":7.59075,\"110\":4.29345,\"111\":0.00435,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0.00435,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0.0087,\"54\":0.0087,\"55\":0.0087,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.0087,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0.00435,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.01305,\"94\":0.15225,\"95\":0.10005,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0.00435,\"79\":0.00435,\"80\":0.0174,\"81\":0.01305,\"83\":0.01305,\"84\":0.0174,\"85\":0.0087,\"86\":0.01305,\"87\":0.0087,\"88\":0.0087,\"89\":0.01305,\"90\":0.0087,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0.00435,\"97\":0,\"98\":0.00435,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0.00435,\"104\":0.00435,\"105\":0.00435,\"106\":0.0087,\"107\":0.0174,\"108\":0.03045,\"109\":0.4959,\"110\":0.5916},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0.0522,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.00435,\"14\":0.0174,\"15\":0,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0.00435,\"7.1\":0,\"9.1\":0.2001,\"10.1\":0,\"11.1\":0,\"12.1\":0,\"13.1\":0.0174,\"14.1\":0.0522,\"15.1\":0.00435,\"15.2-15.3\":0.0087,\"15.4\":0.01305,\"15.5\":0.0348,\"15.6\":0.1305,\"16.0\":0.01305,\"16.1\":0.03915,\"16.2\":0.1305,\"16.3\":0.08265,\"16.4\":0},G:{\"8\":0.00218,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0.02182,\"8.1-8.4\":0.00436,\"9.0-9.2\":0.01091,\"9.3\":0.07856,\"10.0-10.2\":0.01309,\"10.3\":0.08074,\"11.0-11.2\":0.04801,\"11.3-11.4\":0.02837,\"12.0-12.1\":0.05237,\"12.2-12.5\":0.34914,\"13.0-13.1\":0.02837,\"13.2\":0.02619,\"13.3\":0.06765,\"13.4-13.7\":0.1222,\"14.0-14.4\":0.40587,\"14.5-14.8\":0.78556,\"15.0-15.1\":0.12656,\"15.2-15.3\":0.18984,\"15.4\":0.25749,\"15.5\":0.59572,\"15.6\":2.2825,\"16.0\":2.5749,\"16.1\":5.14544,\"16.2\":5.14326,\"16.3\":2.57272,\"16.4\":0.01091},P:{\"4\":0.05137,\"20\":1.94169,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0.04109,\"8.2\":0,\"9.2\":0.04109,\"10.1\":0,\"11.1-11.2\":0.12328,\"12.0\":0.02055,\"13.0\":0.12328,\"14.0\":0.14383,\"15.0\":0.06164,\"16.0\":0.17465,\"17.0\":0.11301,\"18.0\":0.22602,\"19.0\":3.66764},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0.02179,\"4.4\":0,\"4.4.3-4.4.4\":0.03736},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0.00435,\"11\":0.05655,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.02825},H:{\"0\":0.21931},L:{\"0\":50.3023},R:{_:\"0\"},M:{\"0\":0.26555},Q:{\"13.1\":0}};\n$/data/features/css-matches-pseudo.js\u0006Umodule.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\",\"1220\":\"P Q R S T U V W\"},C:{\"1\":\"qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"16\":\"EC uB FC GC\",\"548\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB\"},D:{\"1\":\"X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"16\":\"I w J D E F A B C K L\",\"164\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB\",\"196\":\"eB fB gB\",\"1220\":\"hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W\"},E:{\"1\":\"L G NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I IC 0B\",\"16\":\"w\",\"164\":\"J D E JC KC LC\",\"260\":\"F A B C K MC 1B rB sB 2B\"},F:{\"1\":\"nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F B C QC RC SC TC rB BC UC sB\",\"164\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB\",\"196\":\"TB UB VB\",\"1220\":\"WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB\"},G:{\"1\":\"mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"16\":\"0B VC CC WC XC\",\"164\":\"E YC ZC\",\"260\":\"aC bC cC dC eC fC gC hC iC jC kC lC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"16\":\"uB qC rC sC\",\"164\":\"I tC CC uC vC\"},J:{\"16\":\"D\",\"164\":\"A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"164\":\"wC\"},P:{\"1\":\"g 6C tB 7C 8C 9C\",\"164\":\"I xC yC zC 0C 1C 1B 2C 3C 4C 5C\"},Q:{\"1220\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"548\":\"BD\"}},B:5,C:\":is() CSS pseudo-class\"};\n!/data/features/element-closest.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L\"},C:{\"1\":\"CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB FC GC\"},D:{\"1\":\"IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB\"},E:{\"1\":\"F A B C K L G MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E IC 0B JC KC LC\"},F:{\"1\":\"5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 F B C G M N O x g y z QC RC SC TC rB BC UC sB\"},G:{\"1\":\"aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:1,C:\"Element.closest()\"};\n/data/features/canvas.js\u0005module.exports={A:{A:{\"1\":\"F A B\",\"2\":\"DC\",\"8\":\"J D E\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB GC\",\"132\":\"EC uB FC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"I w J D E F A B C K L G JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"132\":\"IC 0B\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\"},G:{\"1\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"260\":\"pC\"},I:{\"1\":\"uB I H tC CC uC vC\",\"132\":\"qC rC sC\"},J:{\"1\":\"D A\"},K:{\"1\":\"A B C h rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:1,C:\"Canvas (basic support)\"};\n/data/features/queryselector.js\u0005module.exports={A:{A:{\"1\":\"F A B\",\"2\":\"DC\",\"8\":\"J D\",\"132\":\"E\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\",\"8\":\"EC uB\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e RC SC TC rB BC UC sB\",\"8\":\"F QC\"},G:{\"1\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"1\":\"pC\"},I:{\"1\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"1\":\"D A\"},K:{\"1\":\"A B C h rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:1,C:\"querySelector/querySelectorAll\"};\n/data/features/vector-effect.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB I w J D E F A B C K L FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"16\":\"I w J D E F A B C K L\"},E:{\"1\":\"J D E F A B C K L G JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w IC 0B\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e UC sB\",\"2\":\"F B QC RC SC TC rB BC\"},G:{\"1\":\"E WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"16\":\"0B VC CC\"},H:{\"1\":\"pC\"},I:{\"1\":\"H uC vC\",\"16\":\"uB I qC rC sC tC CC\"},J:{\"16\":\"D A\"},K:{\"1\":\"C h sB\",\"2\":\"A B rB BC\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:4,C:\"SVG vector-effect: non-scaling-stroke\"};\n/data/features/sxg.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"1\":\"h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB\",\"132\":\"kB lB\"},E:{\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB QC RC SC TC rB BC UC sB\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I xC yC zC 0C 1C 1B\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"2\":\"BD CD\"}},B:6,C:\"Signed HTTP Exchanges (SXG)\"};\n/data/features/css-shapes.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"1\":\"bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB FC GC\",\"322\":\"SB TB UB VB WB XB YB ZB vB aB wB\"},D:{\"1\":\"EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB\",\"194\":\"BB CB DB\"},E:{\"1\":\"B C K L G 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D IC 0B JC KC\",\"33\":\"E F A LC MC\"},F:{\"1\":\"1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 F B C G M N O x g y z QC RC SC TC rB BC UC sB\"},G:{\"1\":\"dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC CC WC XC YC\",\"33\":\"E ZC aC bC cC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"2\":\"BD\"}},B:4,C:\"CSS Shapes Level 1\"};\n/data/features/css3-colors.js\u0005module.exports={A:{A:{\"1\":\"F A B\",\"2\":\"J D E DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\",\"4\":\"EC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e RC SC TC rB BC UC sB\",\"2\":\"F\",\"4\":\"QC\"},G:{\"1\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"1\":\"pC\"},I:{\"1\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"1\":\"D A\"},K:{\"1\":\"A B C h rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:2,C:\"CSS3 Colors\"};\n/data/features/dispatchevent.js\u0005module.exports={A:{A:{\"1\":\"B\",\"16\":\"DC\",\"129\":\"F A\",\"130\":\"J D E\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"I w J D E F A B C K L G 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"16\":\"IC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\",\"16\":\"F\"},G:{\"1\":\"E VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"16\":\"0B\"},H:{\"1\":\"pC\"},I:{\"1\":\"uB I H sC tC CC uC vC\",\"16\":\"qC rC\"},J:{\"1\":\"D A\"},K:{\"1\":\"A B C h rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"B\",\"129\":\"A\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:1,C:\"EventTarget.dispatchEvent\"};\n /data/features/object-observe.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"2\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"1\":\"DB EB FB GB HB IB JB KB LB MB NB OB PB QB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 AB BB CB DB\",\"2\":\"F B C G M N O x g y z EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"2\":\"A B C h rB BC sB\"},L:{\"2\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"1\":\"I\",\"2\":\"g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"2\":\"2B\"},R:{\"2\":\"AD\"},S:{\"2\":\"BD CD\"}},B:7,C:\"Object.observe data binding\"};\n!/data/features/css-paged-media.js\u0005module.exports={A:{A:{\"2\":\"J D DC\",\"132\":\"E F A B\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"132\":\"C K L G M N O\"},C:{\"2\":\"EC uB I w J D E F A B C K L G M N O FC GC\",\"132\":\"0 1 2 3 4 5 6 7 8 9 x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"16\":\"I w J D E F A B C K L\"},E:{\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"132\":\"F B C QC RC SC TC rB BC UC sB\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"16\":\"pC\"},I:{\"16\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"16\":\"D A\"},K:{\"1\":\"h\",\"16\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"132\":\"f\"},N:{\"258\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"132\":\"BD CD\"}},B:5,C:\"CSS Paged Media (@page)\"};\n/dist/unpacker/region.js\u0002&'use strict'\n\nconst browsers = require('./browsers').browsers\n\nfunction unpackRegion(packed) {\n  return Object.keys(packed).reduce((list, browser) => {\n    let data = packed[browser]\n    list[browsers[browser]] = Object.keys(data).reduce((memo, key) => {\n      let stats = data[key]\n      if (key === '_') {\n        stats.split(' ').forEach(version => (memo[version] = null))\n      } else {\n        memo[key] = stats\n      }\n      return memo\n    }, {})\n    return list\n  }, {})\n}\n\nmodule.exports = unpackRegion\nmodule.exports.default = unpackRegion\n/data/features/videotracks.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"C K L G M N O\",\"322\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z FC GC\",\"194\":\"AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\"},D:{\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB\",\"322\":\"MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"D E F A B C K L G KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J IC 0B JC\"},F:{\"2\":\"0 1 2 3 4 5 6 7 8 F B C G M N O x g y z QC RC SC TC rB BC UC sB\",\"322\":\"9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\"},G:{\"1\":\"E YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC CC WC XC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"2\":\"A B C rB BC sB\",\"322\":\"h\"},L:{\"322\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"322\":\"wC\"},P:{\"2\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"322\":\"2B\"},R:{\"322\":\"AD\"},S:{\"194\":\"BD CD\"}},B:1,C:\"Video Tracks\"};\n/data/features/ime.js\u0005module.exports={A:{A:{\"2\":\"J D E F A DC\",\"161\":\"B\"},B:{\"2\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"161\":\"C K L G M N O\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"2\":\"A B C h rB BC sB\"},L:{\"2\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A\",\"161\":\"B\"},O:{\"2\":\"wC\"},P:{\"2\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"2\":\"2B\"},R:{\"2\":\"AD\"},S:{\"2\":\"BD CD\"}},B:7,C:\"Input Method Editor API\"};\n/data/regions/EC.js\u0011module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.01005,\"53\":0,\"54\":0,\"55\":0,\"56\":0.01005,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0.00503,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0.00503,\"72\":0.00503,\"73\":0.01508,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.01508,\"79\":0,\"80\":0,\"81\":0,\"82\":0.00503,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0.0201,\"89\":0.00503,\"90\":0,\"91\":0.00503,\"92\":0.00503,\"93\":0,\"94\":0.00503,\"95\":0.00503,\"96\":0.00503,\"97\":0.00503,\"98\":0,\"99\":0.01005,\"100\":0.01005,\"101\":0.00503,\"102\":0.0402,\"103\":0.00503,\"104\":0.03518,\"105\":0.01005,\"106\":0.0201,\"107\":0.02513,\"108\":0.05025,\"109\":1.005,\"110\":0.61305,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0.00503,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0.01508,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0.0201,\"48\":0,\"49\":0.01508,\"50\":0,\"51\":0,\"52\":0,\"53\":0.00503,\"54\":0,\"55\":0.00503,\"56\":0.00503,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0.00503,\"65\":0.00503,\"66\":0.00503,\"67\":0,\"68\":0.01005,\"69\":0,\"70\":0,\"71\":0,\"72\":0.00503,\"73\":0,\"74\":0.01508,\"75\":0.00503,\"76\":0.00503,\"77\":0,\"78\":0.00503,\"79\":0.11558,\"80\":0.00503,\"81\":0.01005,\"83\":0.01508,\"84\":0.01005,\"85\":0.01005,\"86\":0.01005,\"87\":0.02513,\"88\":0.00503,\"89\":0.00503,\"90\":0.00503,\"91\":0.15075,\"92\":0.01508,\"93\":0.01005,\"94\":0.00503,\"95\":0.01005,\"96\":0.02513,\"97\":0.0402,\"98\":0.03015,\"99\":0.0201,\"100\":0.02513,\"101\":0.03015,\"102\":0.0402,\"103\":0.09548,\"104\":0.04523,\"105\":0.05025,\"106\":0.04523,\"107\":0.07538,\"108\":0.34673,\"109\":10.1103,\"110\":6.90938,\"111\":0.01508,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0.01005,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.00503,\"68\":0,\"69\":0.00503,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.09045,\"94\":0.69848,\"95\":0.38693,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0.00503,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00503,\"93\":0,\"94\":0,\"95\":0,\"96\":0.00503,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0.00503,\"104\":0.01005,\"105\":0,\"106\":0.00503,\"107\":0.0201,\"108\":0.03015,\"109\":0.74873,\"110\":1.01003},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0.01508,\"15\":0.01005,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0.01005,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0.00503,\"13.1\":0.03015,\"14.1\":0.03518,\"15.1\":0.00503,\"15.2-15.3\":0.01508,\"15.4\":0.01005,\"15.5\":0.02513,\"15.6\":0.10553,\"16.0\":0.0201,\"16.1\":0.0603,\"16.2\":0.12563,\"16.3\":0.1005,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0.02219,\"6.0-6.1\":0.02569,\"7.0-7.1\":0.00584,\"8.1-8.4\":0,\"9.0-9.2\":0.00234,\"9.3\":0.03153,\"10.0-10.2\":0,\"10.3\":0.02686,\"11.0-11.2\":0.0035,\"11.3-11.4\":0.00117,\"12.0-12.1\":0.00467,\"12.2-12.5\":0.31767,\"13.0-13.1\":0.00234,\"13.2\":0,\"13.3\":0.01518,\"13.4-13.7\":0.03387,\"14.0-14.4\":0.08759,\"14.5-14.8\":0.23125,\"15.0-15.1\":0.07241,\"15.2-15.3\":0.07591,\"15.4\":0.11446,\"15.5\":0.21723,\"15.6\":0.79535,\"16.0\":1.33375,\"16.1\":2.43743,\"16.2\":3.02021,\"16.3\":1.86398,\"16.4\":0.00934},P:{\"4\":0.20453,\"20\":0.52155,\"5.0-5.4\":0.01023,\"6.2-6.4\":0,\"7.2-7.4\":0.14317,\"8.2\":0,\"9.2\":0,\"10.1\":0,\"11.1-11.2\":0.02045,\"12.0\":0.01023,\"13.0\":0.04091,\"14.0\":0.02045,\"15.0\":0.01023,\"16.0\":0.05113,\"17.0\":0.14317,\"18.0\":0.06136,\"19.0\":0.97151},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0.03716,\"4.4\":0,\"4.4.3-4.4.4\":0.17344},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.03518,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.03483},H:{\"0\":0.12717},L:{\"0\":60.35563},R:{_:\"0\"},M:{\"0\":0.16915},Q:{\"13.1\":0}};\n/data/features/font-kerning.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"1\":\"BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 EC uB I w J D E F A B C K L G M N O x g y z FC GC\",\"194\":\"1 2 3 4 5 6 7 8 9 AB\"},D:{\"1\":\"AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 I w J D E F A B C K L G M N O x g y z\",\"33\":\"6 7 8 9\"},E:{\"1\":\"A B C K L G MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J IC 0B JC KC\",\"33\":\"D E F LC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F B C G QC RC SC TC rB BC UC sB\",\"33\":\"M N O x\"},G:{\"1\":\"gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC CC WC XC YC\",\"33\":\"E ZC aC bC cC dC eC fC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H vC\",\"2\":\"uB I qC rC sC tC CC\",\"33\":\"uC\"},J:{\"2\":\"D\",\"33\":\"A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:4,C:\"CSS3 font-kerning\"};\n/data/features/svg-html5.js\u0005module.exports={A:{A:{\"2\":\"DC\",\"8\":\"J D E\",\"129\":\"F A B\"},B:{\"1\":\"N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"129\":\"C K L G M\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"8\":\"EC uB FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"8\":\"I w J\"},E:{\"1\":\"F A B C K L G MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"8\":\"I w IC 0B\",\"129\":\"J D E JC KC LC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e UC sB\",\"2\":\"B TC rB BC\",\"8\":\"F QC RC SC\"},G:{\"1\":\"aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"8\":\"0B VC CC\",\"129\":\"E WC XC YC ZC\"},H:{\"1\":\"pC\"},I:{\"1\":\"H uC vC\",\"2\":\"qC rC sC\",\"129\":\"uB I tC CC\"},J:{\"1\":\"A\",\"129\":\"D\"},K:{\"1\":\"C h sB\",\"8\":\"A B rB BC\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"129\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:1,C:\"Inline SVG in HTML5\"};\n/data/regions/LY.js\u0011module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0.00203,\"35\":0.00203,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0.00203,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.00203,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0.00406,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0.00608,\"97\":0,\"98\":0.00406,\"99\":0.00203,\"100\":0,\"101\":0,\"102\":0.00203,\"103\":0,\"104\":0.00203,\"105\":0.00203,\"106\":0.00203,\"107\":0,\"108\":0.00608,\"109\":0.09329,\"110\":0.07098,\"111\":0.00203,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0.00203,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0.00203,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0.00203,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0.00203,\"55\":0,\"56\":0.00203,\"57\":0,\"58\":0.00203,\"59\":0,\"60\":0,\"61\":0,\"62\":0.00203,\"63\":0.00811,\"64\":0,\"65\":0.00203,\"66\":0,\"67\":0,\"68\":0,\"69\":0.00203,\"70\":0.00203,\"71\":0.00406,\"72\":0.00203,\"73\":0.00203,\"74\":0.00203,\"75\":0,\"76\":0,\"77\":0,\"78\":0.00406,\"79\":0.00406,\"80\":0.00608,\"81\":0.01014,\"83\":0.00406,\"84\":0.00203,\"85\":0.00406,\"86\":0.00608,\"87\":0.01217,\"88\":0.00608,\"89\":0.00811,\"90\":0.00203,\"91\":0.00406,\"92\":0.00608,\"93\":0,\"94\":0.00203,\"95\":0.00406,\"96\":0.00406,\"97\":0.00608,\"98\":0.00811,\"99\":0.00406,\"100\":0.00203,\"101\":0.00203,\"102\":0.00811,\"103\":0.01014,\"104\":0.01014,\"105\":0.00608,\"106\":0.00811,\"107\":0.02028,\"108\":0.0507,\"109\":1.48855,\"110\":0.59623,\"111\":0,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0.00608,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0.00203,\"60\":0.0142,\"62\":0,\"63\":0.01825,\"64\":0.00811,\"65\":0.00406,\"66\":0.01217,\"67\":0.1379,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0.00203,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0.00406,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0.00203,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.00811,\"94\":0.1014,\"95\":0.07504,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0.00203},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0.00406,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0.00203,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0.00203,\"90\":0.00203,\"91\":0,\"92\":0.00406,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0.00203,\"102\":0,\"103\":0.00203,\"104\":0,\"105\":0.00203,\"106\":0.00203,\"107\":0.0142,\"108\":0.01014,\"109\":0.16224,\"110\":0.17035},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.00203,\"14\":0.00406,\"15\":0,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0.04259,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0,\"13.1\":0.00406,\"14.1\":0.01622,\"15.1\":0.00203,\"15.2-15.3\":0.00203,\"15.4\":0.00203,\"15.5\":0.01825,\"15.6\":0.03853,\"16.0\":0.00811,\"16.1\":0.04056,\"16.2\":0.4056,\"16.3\":0.07301,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0.00937,\"8.1-8.4\":0.00669,\"9.0-9.2\":0,\"9.3\":0.06556,\"10.0-10.2\":0,\"10.3\":0.06021,\"11.0-11.2\":0.00268,\"11.3-11.4\":0.02408,\"12.0-12.1\":0.03746,\"12.2-12.5\":0.76802,\"13.0-13.1\":0.0669,\"13.2\":0.0107,\"13.3\":0.11775,\"13.4-13.7\":0.3345,\"14.0-14.4\":0.50309,\"14.5-14.8\":0.57267,\"15.0-15.1\":0.19803,\"15.2-15.3\":0.35859,\"15.4\":0.4081,\"15.5\":0.52316,\"15.6\":0.89246,\"16.0\":1.73808,\"16.1\":1.87322,\"16.2\":2.08731,\"16.3\":1.90266,\"16.4\":0.00401},P:{\"4\":0.12265,\"20\":0.36796,\"5.0-5.4\":0,\"6.2-6.4\":0.02044,\"7.2-7.4\":0.27597,\"8.2\":0,\"9.2\":0.03066,\"10.1\":0.02044,\"11.1-11.2\":0.09199,\"12.0\":0.03066,\"13.0\":0.06133,\"14.0\":0.10221,\"15.0\":0.05111,\"16.0\":0.22487,\"17.0\":0.15332,\"18.0\":0.13288,\"19.0\":1.17544},I:{\"0\":0,\"3\":0,\"4\":0.00194,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0.0034,\"4.4\":0,\"4.4.3-4.4.4\":0.07131},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0.00232,\"9\":0,\"10\":0,\"11\":0.01391,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.47832},H:{\"0\":2.38497},L:{\"0\":74.76464},R:{_:\"0\"},M:{\"0\":0.07972},Q:{\"13.1\":0}};\n*/data/features/css-indeterminate-pseudo.js\u0006Pmodule.exports={A:{A:{\"2\":\"J D E DC\",\"132\":\"A B\",\"388\":\"F\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"132\":\"C K L G M N O\"},C:{\"1\":\"SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"16\":\"EC uB FC GC\",\"132\":\"0 1 2 3 4 5 6 7 8 9 J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB\",\"388\":\"I w\"},D:{\"1\":\"GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"16\":\"I w J D E F A B C K L\",\"132\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB\"},E:{\"1\":\"B C K L G 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"16\":\"I w J IC 0B\",\"132\":\"D E F A KC LC MC\",\"388\":\"JC\"},F:{\"1\":\"3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"16\":\"F B QC RC SC TC rB BC\",\"132\":\"0 1 2 G M N O x g y z\",\"516\":\"C UC sB\"},G:{\"1\":\"dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"16\":\"0B VC CC WC XC\",\"132\":\"E YC ZC aC bC cC\"},H:{\"516\":\"pC\"},I:{\"1\":\"H\",\"16\":\"uB qC rC sC vC\",\"132\":\"uC\",\"388\":\"I tC CC\"},J:{\"16\":\"D\",\"132\":\"A\"},K:{\"1\":\"h\",\"16\":\"A B C rB BC\",\"516\":\"sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"132\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"132\":\"BD\"}},B:5,C:\":indeterminate CSS pseudo-class\"};\n/data/regions/FR.js\u0012module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.00487,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0.00975,\"48\":0.00975,\"49\":0,\"50\":0,\"51\":0,\"52\":0.02924,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0.02924,\"60\":0.00487,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0.01462,\"69\":0,\"70\":0,\"71\":0,\"72\":0.00487,\"73\":0,\"74\":0,\"75\":0.00487,\"76\":0,\"77\":0.00487,\"78\":0.07797,\"79\":0.01462,\"80\":0.01462,\"81\":0.00975,\"82\":0.01462,\"83\":0.00975,\"84\":0,\"85\":0,\"86\":0,\"87\":0.00487,\"88\":0.00975,\"89\":0.00487,\"90\":0.00975,\"91\":0.04386,\"92\":0,\"93\":0.01462,\"94\":0.01949,\"95\":0.00487,\"96\":0,\"97\":0,\"98\":0.00487,\"99\":0.00487,\"100\":0.00975,\"101\":0.00487,\"102\":0.15106,\"103\":0.65786,\"104\":0.00975,\"105\":0.00975,\"106\":0.01462,\"107\":0.01949,\"108\":0.06335,\"109\":1.60322,\"110\":1.07693,\"111\":0.00487,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0.00487,\"49\":0.03411,\"50\":0,\"51\":0.00975,\"52\":0.01462,\"53\":0,\"54\":0,\"55\":0,\"56\":0.20467,\"57\":0,\"58\":0.00487,\"59\":0,\"60\":0.08771,\"61\":0,\"62\":0,\"63\":0.00487,\"64\":0,\"65\":0.00487,\"66\":0.11208,\"67\":0.00487,\"68\":0.00487,\"69\":0.00487,\"70\":0.00487,\"71\":0.01462,\"72\":0.00487,\"73\":0.00487,\"74\":0.00487,\"75\":0.00487,\"76\":0.00487,\"77\":0.00487,\"78\":0.01462,\"79\":0.02437,\"80\":0.01949,\"81\":0.02924,\"83\":0.06822,\"84\":0.13157,\"85\":0.14619,\"86\":0.15106,\"87\":0.16568,\"88\":0.01462,\"89\":0.00975,\"90\":0.00975,\"91\":0.02437,\"92\":0.01949,\"93\":0.01462,\"94\":0.20954,\"95\":0.02924,\"96\":0.01462,\"97\":0.0731,\"98\":0.00975,\"99\":0.00975,\"100\":0.02924,\"101\":0.03898,\"102\":0.03898,\"103\":0.09746,\"104\":0.1803,\"105\":0.16568,\"106\":0.13157,\"107\":0.06822,\"108\":0.29238,\"109\":5.90608,\"110\":3.75221,\"111\":0.00487,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.02437,\"68\":0.00487,\"69\":0.00487,\"70\":0.00487,\"71\":0.00975,\"72\":0.00487,\"73\":0.00487,\"74\":0.00487,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0.00487,\"90\":0.00487,\"91\":0.00487,\"92\":0,\"93\":0.04873,\"94\":0.40446,\"95\":0.20954,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0.00487,\"15\":0,\"16\":0,\"17\":0.01462,\"18\":0.01949,\"79\":0,\"80\":0,\"81\":0,\"83\":0.00487,\"84\":0.00975,\"85\":0.00975,\"86\":0.00975,\"87\":0.00487,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00487,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0.00975,\"100\":0,\"101\":0,\"102\":0,\"103\":0.03411,\"104\":0.00487,\"105\":0.01462,\"106\":0.01462,\"107\":0.03411,\"108\":0.08284,\"109\":1.15977,\"110\":1.56423},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.01462,\"14\":0.06335,\"15\":0.01949,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0.00487,\"6.1\":0,\"7.1\":0,\"9.1\":0.01462,\"10.1\":0,\"11.1\":0.02924,\"12.1\":0.03411,\"13.1\":0.12183,\"14.1\":0.1803,\"15.1\":0.02924,\"15.2-15.3\":0.02437,\"15.4\":0.05848,\"15.5\":0.09746,\"15.6\":0.45806,\"16.0\":0.07797,\"16.1\":0.17056,\"16.2\":0.44344,\"16.3\":0.33624,\"16.4\":0},G:{\"8\":0.00555,\"3.2\":0,\"4.0-4.1\":0.01111,\"4.2-4.3\":0,\"5.0-5.1\":0.00278,\"6.0-6.1\":0,\"7.0-7.1\":0.00833,\"8.1-8.4\":0,\"9.0-9.2\":0.04166,\"9.3\":0.16385,\"10.0-10.2\":0.02222,\"10.3\":0.12775,\"11.0-11.2\":0.07776,\"11.3-11.4\":0.05277,\"12.0-12.1\":0.04721,\"12.2-12.5\":0.71095,\"13.0-13.1\":0.04721,\"13.2\":0.01944,\"13.3\":0.07498,\"13.4-13.7\":0.39158,\"14.0-14.4\":0.56653,\"14.5-14.8\":0.86646,\"15.0-15.1\":0.25827,\"15.2-15.3\":0.2916,\"15.4\":0.33881,\"15.5\":0.70539,\"15.6\":2.22726,\"16.0\":3.33256,\"16.1\":6.11247,\"16.2\":6.50126,\"16.3\":3.26035,\"16.4\":0.02499},P:{\"4\":0.09243,\"20\":0.95513,\"5.0-5.4\":0.03081,\"6.2-6.4\":0,\"7.2-7.4\":0.02054,\"8.2\":0.01027,\"9.2\":0.03081,\"10.1\":0,\"11.1-11.2\":0.05135,\"12.0\":0.03081,\"13.0\":0.04108,\"14.0\":0.04108,\"15.0\":0.02054,\"16.0\":0.06162,\"17.0\":0.06162,\"18.0\":0.1027,\"19.0\":1.69459},I:{\"0\":0,\"3\":0,\"4\":0.02777,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.00794,\"4.2-4.3\":0.03968,\"4.4\":0,\"4.4.3-4.4.4\":0.14284},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0.01009,\"9\":0.02524,\"10\":0.00505,\"11\":0.10094,\"5.5\":0},N:{\"10\":0.01025,\"11\":0},S:{\"2.5\":0.01025,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0.00513},O:{\"0\":0.35889},H:{\"0\":0.40773},L:{\"0\":43.42108},R:{_:\"0\"},M:{\"0\":0.58448},Q:{\"13.1\":0.00513}};\n)/data/features/focusin-focusout-events.js\u0005module.exports={A:{A:{\"1\":\"J D E F A B\",\"2\":\"DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"16\":\"I w J D E F A B C K L\"},E:{\"1\":\"J D E F A B C K L G JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"16\":\"I w IC 0B\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e UC sB\",\"2\":\"F QC RC SC TC\",\"16\":\"B rB BC\"},G:{\"1\":\"E WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC CC\"},H:{\"2\":\"pC\"},I:{\"1\":\"I H tC CC uC vC\",\"2\":\"qC rC sC\",\"16\":\"uB\"},J:{\"1\":\"D A\"},K:{\"1\":\"C h sB\",\"2\":\"A\",\"16\":\"B rB BC\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"2\":\"BD\"}},B:5,C:\"focusin & focusout events\"};\n!/data/features/form-validation.js\u0005module.exports={A:{A:{\"1\":\"A B\",\"2\":\"J D E F DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"I w J D E F\"},E:{\"1\":\"B C K L G 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I IC 0B\",\"132\":\"w J D E F A JC KC LC MC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e RC SC TC rB BC UC sB\",\"2\":\"F QC\"},G:{\"1\":\"dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B\",\"132\":\"E VC CC WC XC YC ZC aC bC cC\"},H:{\"516\":\"pC\"},I:{\"1\":\"H vC\",\"2\":\"uB qC rC sC\",\"132\":\"I tC CC uC\"},J:{\"1\":\"A\",\"132\":\"D\"},K:{\"1\":\"A B C h rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"260\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"132\":\"BD\"}},B:1,C:\"Form validation\"};\n(/data/features/link-rel-modulepreload.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"1\":\"fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB\"},E:{\"1\":\"PC\",\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC\"},F:{\"1\":\"UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB QC RC SC TC rB BC UC sB\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I xC yC zC 0C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"2\":\"BD CD\"}},B:1,C:\"Resource Hints: modulepreload\"};\n/data/regions/MR.js\u0011$module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.00158,\"53\":0,\"54\":0,\"55\":0,\"56\":0.00158,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0.00158,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0.00634,\"85\":0,\"86\":0,\"87\":0,\"88\":0.00158,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0.01742,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0.00158,\"108\":0.00792,\"109\":0.11088,\"110\":0.10771,\"111\":0.00158,\"112\":0.00634,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.00158,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0.00158,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0.00158,\"30\":0,\"31\":0,\"32\":0,\"33\":0.00158,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0.04752,\"41\":0,\"42\":0,\"43\":0.00317,\"44\":0,\"45\":0,\"46\":0.00317,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0.00158,\"64\":0,\"65\":0.00317,\"66\":0,\"67\":0,\"68\":0.01901,\"69\":0,\"70\":0.00158,\"71\":0,\"72\":0.00475,\"73\":0,\"74\":0.00158,\"75\":0,\"76\":0,\"77\":0.00475,\"78\":0,\"79\":0,\"80\":0,\"81\":0.00158,\"83\":0.00317,\"84\":0,\"85\":0,\"86\":0,\"87\":0.00158,\"88\":0,\"89\":0,\"90\":0.00158,\"91\":0.00158,\"92\":0.00158,\"93\":0,\"94\":0,\"95\":0.00158,\"96\":0,\"97\":0,\"98\":0.00158,\"99\":0.00158,\"100\":0.00158,\"101\":0,\"102\":0.00158,\"103\":0.00317,\"104\":0.00317,\"105\":0.00158,\"106\":0.00158,\"107\":0.02534,\"108\":0.04435,\"109\":0.73498,\"110\":0.35798,\"111\":0,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0.00158,\"57\":0,\"58\":0,\"60\":0.00792,\"62\":0,\"63\":0.01267,\"64\":0.00317,\"65\":0,\"66\":0.00634,\"67\":0.01584,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0.00158,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0.02534,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0.04435,\"95\":0.05702,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0.00158,\"10.6\":0.00475,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0.00158},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0.00158,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0.00158,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0.00158,\"90\":0,\"91\":0,\"92\":0.00317,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0.00158,\"106\":0,\"107\":0.00158,\"108\":0.01426,\"109\":0.0887,\"110\":0.1188},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0.00158,\"15\":0,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0.02851,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0.00158,\"13.1\":0.00634,\"14.1\":0.00634,\"15.1\":0,\"15.2-15.3\":0.00792,\"15.4\":0.01267,\"15.5\":0.00158,\"15.6\":0.01109,\"16.0\":0.00158,\"16.1\":0.00475,\"16.2\":0.01109,\"16.3\":0.00475,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0.01306,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0.00653,\"10.0-10.2\":0,\"10.3\":0.03592,\"11.0-11.2\":0.01633,\"11.3-11.4\":0,\"12.0-12.1\":0.02286,\"12.2-12.5\":3.23944,\"13.0-13.1\":0.00653,\"13.2\":0.0947,\"13.3\":0.44412,\"13.4-13.7\":2.46877,\"14.0-14.4\":11.81156,\"14.5-14.8\":0.83925,\"15.0-15.1\":0.43105,\"15.2-15.3\":0.27431,\"15.4\":0.28737,\"15.5\":0.77394,\"15.6\":0.75761,\"16.0\":1.8777,\"16.1\":2.33162,\"16.2\":3.0631,\"16.3\":2.25324,\"16.4\":0.0098},P:{\"4\":0.33712,\"20\":0.18963,\"5.0-5.4\":0.0316,\"6.2-6.4\":0.06321,\"7.2-7.4\":0.73744,\"8.2\":0,\"9.2\":0.0316,\"10.1\":0.02107,\"11.1-11.2\":0.13695,\"12.0\":0.01053,\"13.0\":0.05267,\"14.0\":0.10535,\"15.0\":0.10535,\"16.0\":0.43193,\"17.0\":0.60049,\"18.0\":0.30551,\"19.0\":1.31686},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0.00094,\"4.4\":0,\"4.4.3-4.4.4\":0.06024},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0.00543,\"9\":0.00181,\"10\":0,\"11\":0.03077,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.29456},H:{\"0\":0.87645},L:{\"0\":59.90306},R:{_:\"0\"},M:{\"0\":0.15149},Q:{\"13.1\":0}};\n/data/regions/IS.js\u0010module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.01709,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.03988,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0.0057,\"92\":0,\"93\":0,\"94\":0,\"95\":0.02849,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0.12533,\"103\":0.0057,\"104\":0,\"105\":0.02849,\"106\":0.01709,\"107\":0.01139,\"108\":0.06267,\"109\":1.44134,\"110\":0.82037,\"111\":0.0057,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0.01139,\"36\":0,\"37\":0,\"38\":0.0057,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0.0057,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0.0057,\"66\":0,\"67\":0.0057,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0.0057,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0.03418,\"80\":0.0057,\"81\":0.0057,\"83\":0,\"84\":0,\"85\":0.03418,\"86\":0,\"87\":0.03988,\"88\":0,\"89\":0,\"90\":0.01139,\"91\":0.0057,\"92\":0.02849,\"93\":0,\"94\":0,\"95\":0.0057,\"96\":0.06267,\"97\":0.0057,\"98\":0.0057,\"99\":0,\"100\":0.02279,\"101\":0.0057,\"102\":0.0057,\"103\":0.15382,\"104\":0.01139,\"105\":0.02279,\"106\":0.03418,\"107\":0.10255,\"108\":0.9514,\"109\":10.65909,\"110\":6.72246,\"111\":0.01139,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.0057,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0.0057,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.09115,\"94\":0.81467,\"95\":0.34752,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0.0057,\"105\":0,\"106\":0,\"107\":0.04558,\"108\":0.08546,\"109\":1.34449,\"110\":1.78316},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.0057,\"14\":0.11394,\"15\":0.03418,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0.01139,\"12.1\":0.04558,\"13.1\":0.22218,\"14.1\":0.35321,\"15.1\":0.21649,\"15.2-15.3\":0.06836,\"15.4\":0.14812,\"15.5\":0.14243,\"15.6\":1.11661,\"16.0\":0.11964,\"16.1\":0.3817,\"16.2\":1.15079,\"16.3\":0.83746,\"16.4\":0.0057},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0,\"8.1-8.4\":0,\"9.0-9.2\":0.00328,\"9.3\":0.01638,\"10.0-10.2\":0,\"10.3\":0.06225,\"11.0-11.2\":0.03604,\"11.3-11.4\":0,\"12.0-12.1\":0.02293,\"12.2-12.5\":0.45868,\"13.0-13.1\":0,\"13.2\":0,\"13.3\":0.00328,\"13.4-13.7\":0.04259,\"14.0-14.4\":0.26865,\"14.5-14.8\":0.59956,\"15.0-15.1\":0.23262,\"15.2-15.3\":0.27521,\"15.4\":0.20641,\"15.5\":0.65525,\"15.6\":3.57113,\"16.0\":4.40331,\"16.1\":9.51757,\"16.2\":7.92857,\"16.3\":3.51216,\"16.4\":0.01311},P:{\"4\":0.04141,\"20\":1.33558,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0,\"8.2\":0,\"9.2\":0,\"10.1\":0.01035,\"11.1-11.2\":0,\"12.0\":0,\"13.0\":0.10353,\"14.0\":0.01035,\"15.0\":0,\"16.0\":0.02071,\"17.0\":0.07247,\"18.0\":0.04141,\"19.0\":2.11208},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0.01903,\"2.3\":0,\"4.1\":0.01427,\"4.2-4.3\":0.04758,\"4.4\":0,\"4.4.3-4.4.4\":0.0333},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.01709,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0.01721,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.01721},H:{\"0\":0.23221},L:{\"0\":29.21501},R:{_:\"0\"},M:{\"0\":0.61533},Q:{\"13.1\":0}};\n/data/features/proxy.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB I w J D E F A B C K L G M N FC GC\"},D:{\"1\":\"QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"I w J D E F A B C K L G M N O FB GB HB IB JB KB LB MB NB OB PB\",\"66\":\"0 1 2 3 4 5 6 7 8 9 x g y z AB BB CB DB EB\"},E:{\"1\":\"A B C K L G 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F IC 0B JC KC LC MC\"},F:{\"1\":\"DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"2 3 4 5 6 7 8 9 F B C AB BB CB QC RC SC TC rB BC UC sB\",\"66\":\"0 1 G M N O x g y z\"},G:{\"1\":\"cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:6,C:\"Proxy object\"};\n#/data/features/custom-elementsv1.js\u0006\u000fmodule.exports={A:{A:{\"2\":\"J D E F DC\",\"8\":\"A B\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"8\":\"C K L G M N O\"},C:{\"1\":\"cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 EC uB I w J D E F A B C K L G M N O x g y z FC GC\",\"8\":\"7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB\",\"456\":\"RB SB TB UB VB WB XB YB ZB\",\"712\":\"vB aB wB bB\"},D:{\"1\":\"gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB\",\"8\":\"TB UB\",\"132\":\"VB WB XB YB ZB vB aB wB bB cB dB eB fB\"},E:{\"2\":\"I w J D IC 0B JC KC LC\",\"8\":\"E F A MC\",\"132\":\"B C K L G 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB QC RC SC TC rB BC UC sB\",\"132\":\"IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC\",\"132\":\"dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I\",\"132\":\"xC\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"8\":\"BD\"}},B:1,C:\"Custom Elements (V1)\"};\n/data/features/css-sel3.js\u0005module.exports={A:{A:{\"1\":\"F A B\",\"2\":\"DC\",\"8\":\"J\",\"132\":\"D E\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\",\"2\":\"EC uB\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"I w J D E F A B C K L G 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"IC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\",\"2\":\"F\"},G:{\"1\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"1\":\"pC\"},I:{\"1\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"1\":\"D A\"},K:{\"1\":\"A B C h rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:2,C:\"CSS3 selectors\"};\n/data/features/css-counters.js\u0005module.exports={A:{A:{\"1\":\"E F A B\",\"2\":\"J D DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\"},G:{\"1\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"1\":\"pC\"},I:{\"1\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"1\":\"D A\"},K:{\"1\":\"A B C h rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:2,C:\"CSS Counters\"};\n/data/features/input-range.js\u0005module.exports={A:{A:{\"1\":\"A B\",\"2\":\"J D E F DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB I w J D E F A B C K L G M N O x g y z FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\"},G:{\"1\":\"E WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC CC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H CC uC vC\",\"4\":\"uB I qC rC sC tC\"},J:{\"1\":\"D A\"},K:{\"1\":\"A B C h rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:1,C:\"Range input type\"};\n/data/regions/FI.js\u0013\u001bmodule.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0.00621,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.01863,\"53\":0,\"54\":0,\"55\":0.01242,\"56\":0,\"57\":0,\"58\":0,\"59\":0.00621,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0.02484,\"69\":0.01242,\"70\":0.01242,\"71\":0.01242,\"72\":0.01242,\"73\":0.01242,\"74\":0.01863,\"75\":0.01863,\"76\":0.01242,\"77\":0.01242,\"78\":0.04967,\"79\":0.03105,\"80\":0.01863,\"81\":0.01863,\"82\":0.02484,\"83\":0.02484,\"84\":0.00621,\"85\":0,\"86\":0,\"87\":0,\"88\":0.00621,\"89\":0,\"90\":0,\"91\":0.01242,\"92\":0,\"93\":0,\"94\":0,\"95\":0.00621,\"96\":0.00621,\"97\":0,\"98\":0,\"99\":0,\"100\":0.03105,\"101\":0.00621,\"102\":0.25457,\"103\":0.01242,\"104\":0.01242,\"105\":0.02484,\"106\":0.01242,\"107\":0.02484,\"108\":0.07451,\"109\":1.57709,\"110\":1.13004,\"111\":0.00621,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0.00621,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0.00621,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0.00621,\"39\":0,\"40\":0,\"41\":0,\"42\":0.01242,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0.00621,\"48\":0,\"49\":0.00621,\"50\":0,\"51\":0.00621,\"52\":0,\"53\":0,\"54\":0,\"55\":0.00621,\"56\":0.00621,\"57\":0.00621,\"58\":0.00621,\"59\":0.00621,\"60\":0.01242,\"61\":0.00621,\"62\":0,\"63\":0.00621,\"64\":0,\"65\":0,\"66\":0.04346,\"67\":0,\"68\":0.07451,\"69\":0.04967,\"70\":0.05588,\"71\":0.06209,\"72\":0.08072,\"73\":0.02484,\"74\":0.07451,\"75\":0.04967,\"76\":0.05588,\"77\":0.05588,\"78\":0.08072,\"79\":0.12418,\"80\":0.10555,\"81\":0.08693,\"83\":0.10555,\"84\":0.15523,\"85\":0.14902,\"86\":0.37254,\"87\":0.15523,\"88\":0.10555,\"89\":0.09934,\"90\":0.11797,\"91\":0.03725,\"92\":0.01863,\"93\":0.04967,\"94\":0.01863,\"95\":0.00621,\"96\":0.02484,\"97\":0.00621,\"98\":0.01863,\"99\":0.16764,\"100\":1.12383,\"101\":0.39117,\"102\":0.29803,\"103\":0.2732,\"104\":0.21732,\"105\":0.08072,\"106\":0.08072,\"107\":0.15523,\"108\":0.99965,\"109\":11.32522,\"110\":7.69295,\"111\":0,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0.00621,\"44\":0,\"45\":0,\"46\":0.00621,\"47\":0.00621,\"48\":0.00621,\"49\":0.00621,\"50\":0,\"51\":0.00621,\"52\":0,\"53\":0.01863,\"54\":0.01863,\"55\":0.02484,\"56\":0.00621,\"57\":0,\"58\":0,\"60\":0.00621,\"62\":0,\"63\":0.00621,\"64\":0,\"65\":0.00621,\"66\":0.00621,\"67\":0.01242,\"68\":0.00621,\"69\":0,\"70\":0.00621,\"71\":0,\"72\":0.00621,\"73\":0.00621,\"74\":0.00621,\"75\":0.00621,\"76\":0.00621,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0.00621,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.06209,\"94\":0.67678,\"95\":0.27941,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0.00621},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0.00621,\"18\":0.01242,\"79\":0.01242,\"80\":0.03725,\"81\":0.03105,\"83\":0.03105,\"84\":0.03725,\"85\":0.01863,\"86\":0.03105,\"87\":0.02484,\"88\":0.01863,\"89\":0.02484,\"90\":0.02484,\"91\":0,\"92\":0.00621,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0.00621,\"100\":0,\"101\":0,\"102\":0.01863,\"103\":0,\"104\":0.00621,\"105\":0.00621,\"106\":0.01242,\"107\":0.02484,\"108\":0.08072,\"109\":1.45291,\"110\":2.04897},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.01242,\"14\":0.04346,\"15\":0.01242,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0.00621,\"6.1\":0,\"7.1\":0,\"9.1\":0.44705,\"10.1\":0,\"11.1\":0.00621,\"12.1\":0.00621,\"13.1\":0.06209,\"14.1\":0.11176,\"15.1\":0.01863,\"15.2-15.3\":0.01863,\"15.4\":0.05588,\"15.5\":0.0683,\"15.6\":0.42221,\"16.0\":0.0683,\"16.1\":0.14902,\"16.2\":0.49672,\"16.3\":0.49672,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0,\"8.1-8.4\":0.00879,\"9.0-9.2\":0.01978,\"9.3\":0.05494,\"10.0-10.2\":0.01978,\"10.3\":0.08351,\"11.0-11.2\":0.08131,\"11.3-11.4\":0.0901,\"12.0-12.1\":0.07472,\"12.2-12.5\":0.46588,\"13.0-13.1\":0.04395,\"13.2\":0.04395,\"13.3\":0.04175,\"13.4-13.7\":0.1846,\"14.0-14.4\":0.41095,\"14.5-14.8\":0.6307,\"15.0-15.1\":0.24393,\"15.2-15.3\":0.23294,\"15.4\":0.29887,\"15.5\":0.5428,\"15.6\":1.85475,\"16.0\":2.4415,\"16.1\":5.50711,\"16.2\":4.66763,\"16.3\":2.99748,\"16.4\":0.00659},P:{\"4\":0.05186,\"20\":0.51858,\"5.0-5.4\":0.01037,\"6.2-6.4\":0,\"7.2-7.4\":0,\"8.2\":0,\"9.2\":0,\"10.1\":0,\"11.1-11.2\":0.01037,\"12.0\":0.02074,\"13.0\":0.03111,\"14.0\":0.05186,\"15.0\":0.02074,\"16.0\":0.06223,\"17.0\":0.06223,\"18.0\":0.12446,\"19.0\":1.23422},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.01748,\"4.2-4.3\":0.01049,\"4.4\":0,\"4.4.3-4.4.4\":0.07341},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0.02856,\"9\":0.00714,\"10\":0.00714,\"11\":0.09996,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.1706},H:{\"0\":0.41633},L:{\"0\":36.20614},R:{_:\"0\"},M:{\"0\":0.69754},Q:{\"13.1\":0}};\n/data/regions/GP.js\u0010module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.00825,\"53\":0,\"54\":0.00413,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0.00413,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0.00413,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.0165,\"79\":0,\"80\":0,\"81\":0,\"82\":0.03713,\"83\":0,\"84\":0.00413,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0.00413,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0.00413,\"97\":0,\"98\":0,\"99\":0,\"100\":0.00413,\"101\":0,\"102\":0.01238,\"103\":0,\"104\":0,\"105\":0.00413,\"106\":0.00413,\"107\":0.00825,\"108\":0.05363,\"109\":0.84975,\"110\":0.54863,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0.00825,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0.00413,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0.00413,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0.00413,\"74\":0,\"75\":0,\"76\":0,\"77\":0.00413,\"78\":0,\"79\":0.02475,\"80\":0,\"81\":0.00825,\"83\":0.02063,\"84\":0.00413,\"85\":0.00413,\"86\":0.05363,\"87\":0.02888,\"88\":0,\"89\":0,\"90\":0,\"91\":0.00413,\"92\":0.00413,\"93\":0,\"94\":0,\"95\":0,\"96\":0.00413,\"97\":0.00413,\"98\":0.00413,\"99\":0.00413,\"100\":0.02475,\"101\":0,\"102\":0.0165,\"103\":0.15263,\"104\":0.00825,\"105\":0.01238,\"106\":0.01238,\"107\":0.033,\"108\":0.17738,\"109\":4.422,\"110\":3.32475,\"111\":0,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0.00413,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0.00413,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0.06188,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.1155,\"94\":0.49088,\"95\":0.17325,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0.00413,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0.00825,\"18\":0.00413,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00413,\"93\":0.00413,\"94\":0,\"95\":0,\"96\":0,\"97\":0.04125,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0.00825,\"103\":0,\"104\":0,\"105\":0,\"106\":0.00413,\"107\":0.02475,\"108\":0.03713,\"109\":1.31175,\"110\":1.78613},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.00413,\"14\":0.07425,\"15\":0.02475,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0.033,\"13.1\":0.15675,\"14.1\":0.14438,\"15.1\":0.03713,\"15.2-15.3\":0.0165,\"15.4\":0.07838,\"15.5\":0.06188,\"15.6\":0.31763,\"16.0\":0.05363,\"16.1\":0.16088,\"16.2\":0.43725,\"16.3\":0.30525,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0.12635,\"10.0-10.2\":0,\"10.3\":0.07088,\"11.0-11.2\":0.00308,\"11.3-11.4\":0,\"12.0-12.1\":0.05239,\"12.2-12.5\":0.41602,\"13.0-13.1\":0.01541,\"13.2\":0.00308,\"13.3\":0.07088,\"13.4-13.7\":0.10786,\"14.0-14.4\":0.29892,\"14.5-14.8\":0.84745,\"15.0-15.1\":0.22496,\"15.2-15.3\":0.24345,\"15.4\":0.34514,\"15.5\":2.29583,\"15.6\":2.40061,\"16.0\":4.44682,\"16.1\":6.70567,\"16.2\":7.08471,\"16.3\":3.963,\"16.4\":0.03698},P:{\"4\":0.02068,\"20\":1.46799,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0.09304,\"8.2\":0,\"9.2\":0,\"10.1\":0,\"11.1-11.2\":0.04135,\"12.0\":0.03101,\"13.0\":0.02068,\"14.0\":0.04135,\"15.0\":0.02068,\"16.0\":0.0827,\"17.0\":0.04135,\"18.0\":0.16541,\"19.0\":2.79126},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0.00682,\"4.4\":0,\"4.4.3-4.4.4\":0.17743},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.0495,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.28788},H:{\"0\":0.06674},L:{\"0\":46.094},R:{_:\"0\"},M:{\"0\":0.29375},Q:{\"13.1\":0}};\n%/data/features/css-in-out-of-range.js\u0006Lmodule.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C\",\"260\":\"K L G M N O\"},C:{\"1\":\"RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 EC uB I w J D E F A B C K L G M N O x g y z FC GC\",\"516\":\"6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB\"},D:{\"1\":\"UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"I\",\"16\":\"w J D E F A B C K L\",\"260\":\"TB\",\"772\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB\"},E:{\"1\":\"B C K L G 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I IC 0B\",\"16\":\"w\",\"772\":\"J D E F A JC KC LC MC\"},F:{\"1\":\"HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"16\":\"F QC\",\"260\":\"B C GB RC SC TC rB BC UC sB\",\"772\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB\"},G:{\"1\":\"dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC CC\",\"772\":\"E WC XC YC ZC aC bC cC\"},H:{\"132\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB qC rC sC\",\"260\":\"I tC CC uC vC\"},J:{\"2\":\"D\",\"260\":\"A\"},K:{\"1\":\"h\",\"260\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"260\":\"I\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"516\":\"BD\"}},B:5,C:\":in-range and :out-of-range CSS pseudo-classes\"};\n/data/regions/PF.js\u0011Kmodule.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0.0049,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0.09808,\"49\":0,\"50\":0,\"51\":0,\"52\":0.01471,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0.0049,\"61\":0,\"62\":0,\"63\":0,\"64\":0.0049,\"65\":0,\"66\":0,\"67\":0.01471,\"68\":0.02452,\"69\":0,\"70\":0,\"71\":0,\"72\":0.01471,\"73\":0,\"74\":0,\"75\":0.06866,\"76\":0,\"77\":0,\"78\":0.10789,\"79\":0,\"80\":0,\"81\":0,\"82\":0.00981,\"83\":0.0049,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0.37761,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0.01471,\"99\":0.02452,\"100\":0,\"101\":0.0049,\"102\":0.10789,\"103\":0.0049,\"104\":0.00981,\"105\":0.00981,\"106\":0.00981,\"107\":0.02452,\"108\":0.06866,\"109\":1.68207,\"110\":1.01513,\"111\":0.0049,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0.0049,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.02452,\"68\":0,\"69\":0.0049,\"70\":0.0049,\"71\":0.01962,\"72\":0,\"73\":0,\"74\":0.0049,\"75\":0,\"76\":0.01471,\"77\":0,\"78\":0.0049,\"79\":0.10789,\"80\":0.0049,\"81\":0.08337,\"83\":0.00981,\"84\":0.01962,\"85\":0.19126,\"86\":0.01471,\"87\":0.19616,\"88\":0.0049,\"89\":0,\"90\":0,\"91\":0.0049,\"92\":0.05394,\"93\":0.0049,\"94\":0,\"95\":0.0049,\"96\":0.0049,\"97\":0,\"98\":0.0049,\"99\":0.01962,\"100\":0.00981,\"101\":0.00981,\"102\":0.05885,\"103\":0.21087,\"104\":0.00981,\"105\":0.04904,\"106\":0.02942,\"107\":0.10789,\"108\":0.31876,\"109\":6.03192,\"110\":3.5554,\"111\":0,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0.00981,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0.01962,\"66\":0,\"67\":0.0049,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.00981,\"94\":0.20106,\"95\":0.1226,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0.01471,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0.0049,\"90\":0,\"91\":0,\"92\":0.00981,\"93\":0.09318,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0.0049,\"99\":0.0049,\"100\":0,\"101\":0,\"102\":0.0049,\"103\":0,\"104\":0.0049,\"105\":0.0049,\"106\":0.0049,\"107\":0.00981,\"108\":0.13731,\"109\":1.14754,\"110\":1.07888},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.01471,\"14\":0.1275,\"15\":0.01962,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0.00981,\"12.1\":0.04414,\"13.1\":0.13241,\"14.1\":0.33838,\"15.1\":0.05394,\"15.2-15.3\":0.04414,\"15.4\":0.08337,\"15.5\":0.19126,\"15.6\":0.84349,\"16.0\":0.09318,\"16.1\":0.18635,\"16.2\":0.93666,\"16.3\":0.52963,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0.01452,\"6.0-6.1\":0,\"7.0-7.1\":0.01452,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0.09292,\"10.0-10.2\":0.01452,\"10.3\":0.05517,\"11.0-11.2\":0,\"11.3-11.4\":0.01161,\"12.0-12.1\":0.04356,\"12.2-12.5\":0.97854,\"13.0-13.1\":0.0029,\"13.2\":0,\"13.3\":0.01161,\"13.4-13.7\":0.02904,\"14.0-14.4\":0.49653,\"14.5-14.8\":0.99305,\"15.0-15.1\":0.3194,\"15.2-15.3\":0.27294,\"15.4\":0.61848,\"15.5\":0.77818,\"15.6\":2.87173,\"16.0\":2.94722,\"16.1\":6.70457,\"16.2\":6.90202,\"16.3\":3.19694,\"16.4\":0.01452},P:{\"4\":0.02064,\"20\":1.22805,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0.1032,\"8.2\":0,\"9.2\":0.01032,\"10.1\":0,\"11.1-11.2\":0.04128,\"12.0\":0,\"13.0\":0.02064,\"14.0\":0.02064,\"15.0\":0.02064,\"16.0\":0.08256,\"17.0\":0.04128,\"18.0\":0.12384,\"19.0\":2.40449},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0,\"4.4\":0,\"4.4.3-4.4.4\":0.09337},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.2403,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.02038},H:{\"0\":0.97456},L:{\"0\":42.41827},R:{_:\"0\"},M:{\"0\":0.31086},Q:{\"13.1\":0}};\n/data/features/bloburls.js\u0005module.exports={A:{A:{\"2\":\"J D E F DC\",\"129\":\"A B\"},B:{\"1\":\"G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"129\":\"C K L\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"I w J D\",\"33\":\"E F A B C K L G M N O x g y z\"},E:{\"1\":\"D E F A B C K L G KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w IC 0B JC\",\"33\":\"J\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F B C QC RC SC TC rB BC UC sB\"},G:{\"1\":\"E YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC CC WC\",\"33\":\"XC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H uC vC\",\"2\":\"uB qC rC sC\",\"33\":\"I tC CC\"},J:{\"1\":\"A\",\"2\":\"D\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"B\",\"2\":\"A\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:5,C:\"Blob URLs\"};\n/data/regions/AT.js\u0012]module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0.00528,\"49\":0,\"50\":0,\"51\":0,\"52\":0.02114,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0.06869,\"61\":0.00528,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0.05812,\"67\":0,\"68\":0.00528,\"69\":0.00528,\"70\":0,\"71\":0,\"72\":0.01057,\"73\":0,\"74\":0,\"75\":0.00528,\"76\":0.00528,\"77\":0.00528,\"78\":0.04756,\"79\":0.00528,\"80\":0.00528,\"81\":0.00528,\"82\":0,\"83\":0.00528,\"84\":0,\"85\":0.00528,\"86\":0,\"87\":0.00528,\"88\":0.00528,\"89\":0,\"90\":0,\"91\":0.05284,\"92\":0,\"93\":0.02114,\"94\":0.21136,\"95\":0.01057,\"96\":0,\"97\":0,\"98\":0.00528,\"99\":0.00528,\"100\":0.00528,\"101\":0.00528,\"102\":0.20079,\"103\":0.02114,\"104\":0.01057,\"105\":0.01057,\"106\":0.01057,\"107\":0.0317,\"108\":0.09511,\"109\":2.12945,\"110\":1.51122,\"111\":0.00528,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0.00528,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0.01057,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0.00528,\"66\":0,\"67\":0,\"68\":0.01057,\"69\":0.00528,\"70\":0.01057,\"71\":0.00528,\"72\":0.01057,\"73\":0.00528,\"74\":0.01057,\"75\":0.01057,\"76\":0.01057,\"77\":0.01057,\"78\":0.01585,\"79\":0.09511,\"80\":0.02114,\"81\":0.02114,\"83\":0.01585,\"84\":0.01057,\"85\":0.02114,\"86\":0.10568,\"87\":0.02642,\"88\":0.02114,\"89\":0.04227,\"90\":0.01585,\"91\":0.01057,\"92\":0.02642,\"93\":0,\"94\":0.02642,\"95\":0.0317,\"96\":0.02642,\"97\":0.00528,\"98\":0.01057,\"99\":0.00528,\"100\":0.08454,\"101\":0.21664,\"102\":0.09511,\"103\":0.12682,\"104\":0.08983,\"105\":0.04756,\"106\":0.04756,\"107\":0.5601,\"108\":0.29062,\"109\":6.19285,\"110\":4.1955,\"111\":0.00528,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0.00528,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0.00528,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.00528,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0.00528,\"75\":0.00528,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0.00528,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0.01057,\"86\":0,\"87\":0,\"88\":0,\"89\":0.01057,\"90\":0,\"91\":0,\"92\":0.00528,\"93\":0.11096,\"94\":0.97226,\"95\":0.45971,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0.00528,\"79\":0,\"80\":0.00528,\"81\":0.00528,\"83\":0.00528,\"84\":0.00528,\"85\":0.00528,\"86\":0.00528,\"87\":0.00528,\"88\":0.00528,\"89\":0.00528,\"90\":0.00528,\"91\":0,\"92\":0.00528,\"93\":0,\"94\":0,\"95\":0.02114,\"96\":0.00528,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0.00528,\"103\":0.00528,\"104\":0.01585,\"105\":0.00528,\"106\":0.00528,\"107\":0.04227,\"108\":0.14795,\"109\":1.9815,\"110\":2.6103},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.02114,\"14\":0.08983,\"15\":0.02114,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0.05812,\"10.1\":0,\"11.1\":0.01585,\"12.1\":0.02114,\"13.1\":0.13738,\"14.1\":0.21136,\"15.1\":0.04756,\"15.2-15.3\":0.03699,\"15.4\":0.08454,\"15.5\":0.11096,\"15.6\":0.57596,\"16.0\":0.08454,\"16.1\":0.32761,\"16.2\":0.66578,\"16.3\":0.68164,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0.00305,\"6.0-6.1\":0,\"7.0-7.1\":0,\"8.1-8.4\":0,\"9.0-9.2\":0.00915,\"9.3\":0.07627,\"10.0-10.2\":0.0122,\"10.3\":0.13118,\"11.0-11.2\":0.04271,\"11.3-11.4\":0.0244,\"12.0-12.1\":0.05491,\"12.2-12.5\":0.46064,\"13.0-13.1\":0.0244,\"13.2\":0.02135,\"13.3\":0.03051,\"13.4-13.7\":0.08847,\"14.0-14.4\":0.34777,\"14.5-14.8\":0.74435,\"15.0-15.1\":0.19829,\"15.2-15.3\":0.28981,\"15.4\":0.32641,\"15.5\":0.67723,\"15.6\":2.46183,\"16.0\":3.2977,\"16.1\":7.79428,\"16.2\":7.47092,\"16.3\":4.75589,\"16.4\":0.0244},P:{\"4\":0.18584,\"20\":1.58998,\"5.0-5.4\":0.01032,\"6.2-6.4\":0,\"7.2-7.4\":0.05162,\"8.2\":0,\"9.2\":0,\"10.1\":0,\"11.1-11.2\":0.01032,\"12.0\":0,\"13.0\":0.03097,\"14.0\":0.02065,\"15.0\":0.02065,\"16.0\":0.0413,\"17.0\":0.05162,\"18.0\":0.07227,\"19.0\":2.33334},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.01657,\"4.2-4.3\":0.02899,\"4.4\":0,\"4.4.3-4.4.4\":0.12012},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0.00528,\"9\":0,\"10\":0,\"11\":0.05284,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.03301},H:{\"0\":0.37058},L:{\"0\":34.91978},R:{_:\"0\"},M:{\"0\":0.69797},Q:{\"13.1\":0}};\n/data/regions/PK.js\u0011module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.00399,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0.00199,\"103\":0,\"104\":0.00199,\"105\":0.00199,\"106\":0.00199,\"107\":0.00399,\"108\":0.00399,\"109\":0.07573,\"110\":0.05381,\"111\":0.00199,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.01196,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0.00199,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0.00199,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0.00199,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0.00199,\"64\":0.00399,\"65\":0.00199,\"66\":0,\"67\":0,\"68\":0.00199,\"69\":0.00199,\"70\":0.00199,\"71\":0.00199,\"72\":0.00399,\"73\":0.00199,\"74\":0.00997,\"75\":0.00399,\"76\":0.00199,\"77\":0.00199,\"78\":0.00199,\"79\":0.00199,\"80\":0.00399,\"81\":0.00598,\"83\":0.00399,\"84\":0.00997,\"85\":0.06577,\"86\":0.00997,\"87\":0.00997,\"88\":0.00199,\"89\":0.00399,\"90\":0.00399,\"91\":0.00399,\"92\":0.00399,\"93\":0.00598,\"94\":0.00199,\"95\":0.00598,\"96\":0.00199,\"97\":0.00199,\"98\":0.00399,\"99\":0.00199,\"100\":0.00399,\"101\":0.00199,\"102\":0.00598,\"103\":0.01395,\"104\":0.00598,\"105\":0.01196,\"106\":0.01196,\"107\":0.01594,\"108\":0.0578,\"109\":1.80566,\"110\":0.9965,\"111\":0.00199,\"112\":0.00199,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0.00199,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0.00598,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0.00199,\"62\":0,\"63\":0.00399,\"64\":0.00199,\"65\":0.00199,\"66\":0.00199,\"67\":0.05182,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0.00199,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0.00199,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0.00199,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.00199,\"94\":0.04185,\"95\":0.05381,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0.00199,\"13\":0,\"14\":0,\"15\":0.00199,\"16\":0,\"17\":0,\"18\":0.00199,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00199,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0.00199,\"108\":0.00399,\"109\":0.06577,\"110\":0.09168},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.00199,\"14\":0.00199,\"15\":0,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0.00199,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0,\"13.1\":0.00199,\"14.1\":0.00598,\"15.1\":0,\"15.2-15.3\":0,\"15.4\":0.00199,\"15.5\":0.00199,\"15.6\":0.01395,\"16.0\":0.00199,\"16.1\":0.00598,\"16.2\":0.00997,\"16.3\":0.00797,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0.00109,\"5.0-5.1\":0.00602,\"6.0-6.1\":0,\"7.0-7.1\":0.06289,\"8.1-8.4\":0,\"9.0-9.2\":0.00164,\"9.3\":0.06945,\"10.0-10.2\":0.00109,\"10.3\":0.04648,\"11.0-11.2\":0.00437,\"11.3-11.4\":0.00656,\"12.0-12.1\":0.00711,\"12.2-12.5\":0.33085,\"13.0-13.1\":0.00383,\"13.2\":0.00219,\"13.3\":0.01641,\"13.4-13.7\":0.04812,\"14.0-14.4\":0.11922,\"14.5-14.8\":0.20343,\"15.0-15.1\":0.05359,\"15.2-15.3\":0.0689,\"15.4\":0.07109,\"15.5\":0.15093,\"15.6\":0.35272,\"16.0\":0.43694,\"16.1\":0.88154,\"16.2\":0.91654,\"16.3\":0.76834,\"16.4\":0.00273},P:{\"4\":0.12331,\"20\":0.28772,\"5.0-5.4\":0.01028,\"6.2-6.4\":0,\"7.2-7.4\":0.03083,\"8.2\":0,\"9.2\":0.02055,\"10.1\":0,\"11.1-11.2\":0.01028,\"12.0\":0.01028,\"13.0\":0.03083,\"14.0\":0.01028,\"15.0\":0.01028,\"16.0\":0.02055,\"17.0\":0.06165,\"18.0\":0.0411,\"19.0\":0.56516},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0.00912,\"4.4\":0,\"4.4.3-4.4.4\":0.11675},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0.00219,\"9\":0,\"10\":0,\"11\":0.01973,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0.08007,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":2.75441},H:{\"0\":1.05369},L:{\"0\":85.20211},R:{_:\"0\"},M:{\"0\":0.04804},Q:{\"13.1\":0}};\n/data/features/filereader.js\u0005module.exports={A:{A:{\"2\":\"J D E F DC\",\"132\":\"A B\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB GC\",\"2\":\"EC uB FC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"I w\"},E:{\"1\":\"J D E F A B C K L G KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w IC 0B JC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e rB BC UC sB\",\"2\":\"F B QC RC SC TC\"},G:{\"1\":\"E XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC CC WC\"},H:{\"2\":\"pC\"},I:{\"1\":\"uB I H tC CC uC vC\",\"2\":\"qC rC sC\"},J:{\"1\":\"A\",\"2\":\"D\"},K:{\"1\":\"C h rB BC sB\",\"2\":\"A B\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:5,C:\"FileReader API\"};\n&/data/features/css-text-orientation.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"1\":\"IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FC GC\",\"194\":\"FB GB HB\"},D:{\"1\":\"PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB\"},E:{\"1\":\"L G NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F IC 0B JC KC LC MC\",\"16\":\"A\",\"33\":\"B C K 1B rB sB 2B\"},F:{\"1\":\"CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB QC RC SC TC rB BC UC sB\"},G:{\"1\":\"cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:2,C:\"CSS text-orientation\"};\n/data/features/flow-root.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"1\":\"UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB FC GC\"},D:{\"1\":\"ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB\"},E:{\"1\":\"K L G 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A B C IC 0B JC KC LC MC 1B rB sB\"},F:{\"1\":\"MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB QC RC SC TC rB BC UC sB\"},G:{\"1\":\"iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I xC yC\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"2\":\"BD\"}},B:4,C:\"display: flow-root\"};\n/data/regions/BM.js\u000fmodule.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.00308,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0,\"108\":0,\"109\":0.04,\"110\":0.01846,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0.00308,\"77\":0.00308,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"83\":0.00308,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0.00308,\"97\":0,\"98\":0,\"99\":0,\"100\":0.00308,\"101\":0,\"102\":0,\"103\":0.00923,\"104\":0,\"105\":0.00308,\"106\":0.00308,\"107\":0.02154,\"108\":0.09846,\"109\":1.04926,\"110\":0.58463,\"111\":0,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0.03385,\"95\":0.00615,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0.00615,\"108\":0.00615,\"109\":0.17539,\"110\":0.31078},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0.00308,\"15\":0,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0.00308,\"13.1\":0.11385,\"14.1\":0.08616,\"15.1\":0.02154,\"15.2-15.3\":0.04308,\"15.4\":0.11077,\"15.5\":0.24308,\"15.6\":1.79389,\"16.0\":0.08,\"16.1\":0.40616,\"16.2\":1.9939,\"16.3\":1.79697,\"16.4\":0.00615},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0.00904,\"10.0-10.2\":0,\"10.3\":0.00904,\"11.0-11.2\":0,\"11.3-11.4\":0,\"12.0-12.1\":0.00904,\"12.2-12.5\":0.15365,\"13.0-13.1\":0,\"13.2\":0,\"13.3\":0,\"13.4-13.7\":0.01808,\"14.0-14.4\":0.02711,\"14.5-14.8\":0.10846,\"15.0-15.1\":0.16268,\"15.2-15.3\":0.39767,\"15.4\":0.65073,\"15.5\":2.36794,\"15.6\":10.70998,\"16.0\":8.57702,\"16.1\":24.08615,\"16.2\":25.39666,\"16.3\":13.76481,\"16.4\":0.06327},P:{\"4\":0.0629,\"20\":0.22015,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0,\"8.2\":0,\"9.2\":0,\"10.1\":0,\"11.1-11.2\":0,\"12.0\":0,\"13.0\":0.01048,\"14.0\":0,\"15.0\":0.01048,\"16.0\":0,\"17.0\":0,\"18.0\":0,\"19.0\":0.42982},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0,\"4.4\":0,\"4.4.3-4.4.4\":0.08616},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.00308,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0},H:{\"0\":0},L:{\"0\":3.10076},R:{_:\"0\"},M:{\"0\":0.04154},Q:{\"13.1\":0}};\n/data/regions/UZ.js\u000e\u001fmodule.exports={C:{\"30\":0.00949,\"52\":0.03163,\"70\":0.00316,\"79\":0.00949,\"83\":0.00316,\"91\":0.00316,\"102\":0.04112,\"104\":0.00949,\"105\":0.00316,\"106\":0.00949,\"107\":0.00633,\"108\":0.03163,\"109\":0.62944,\"110\":0.36691,_:\"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 71 72 73 74 75 76 77 78 80 81 82 84 85 86 87 88 89 90 92 93 94 95 96 97 98 99 100 101 103 111 112 3.5 3.6\"},D:{\"39\":0.00316,\"49\":0.14234,\"53\":0.00316,\"56\":0.00949,\"61\":0.00316,\"64\":0.00949,\"65\":0.00316,\"66\":0.0253,\"69\":0.00949,\"70\":0.00316,\"71\":0.00949,\"72\":0.01265,\"74\":0.00316,\"75\":0.00949,\"76\":0.00316,\"77\":0.00316,\"78\":0.00633,\"79\":0.04428,\"80\":0.01582,\"81\":0.00316,\"83\":0.03796,\"84\":0.03796,\"85\":0.04428,\"86\":0.05377,\"87\":0.03479,\"88\":0.00633,\"89\":0.03796,\"90\":0.01265,\"91\":0.00949,\"92\":0.01265,\"93\":0.01265,\"94\":0.00316,\"95\":0.00633,\"96\":0.0253,\"97\":0.01898,\"98\":0.01582,\"99\":0.01265,\"100\":0.06959,\"101\":0.02214,\"102\":0.09173,\"103\":0.05377,\"104\":0.02847,\"105\":0.03163,\"106\":0.17713,\"107\":0.10754,\"108\":0.30681,\"109\":13.09798,\"110\":6.34498,\"111\":0.00633,\"112\":0.00633,_:\"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 40 41 42 43 44 45 46 47 48 50 51 52 54 55 57 58 59 60 62 63 67 68 73 113\"},F:{\"28\":0.00633,\"40\":0.01582,\"45\":0.00316,\"46\":0.00949,\"49\":0.00633,\"51\":0.00316,\"53\":0.02214,\"55\":0.00316,\"57\":0.00633,\"60\":0.00633,\"62\":0.0253,\"64\":0.00633,\"67\":0.00316,\"73\":0.00633,\"77\":0.00316,\"79\":0.06326,\"84\":0.00949,\"90\":0.03163,\"93\":0.03163,\"94\":0.24039,\"95\":0.23406,_:\"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 33 34 35 36 37 38 39 41 42 43 44 47 48 50 52 54 56 58 63 65 66 68 69 70 71 72 74 75 76 78 80 81 82 83 85 86 87 88 89 91 92 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1\",\"10.0-10.1\":0},B:{\"12\":0.00316,\"14\":0.00316,\"15\":0.00949,\"16\":0.00949,\"17\":0.00949,\"18\":0.0601,\"84\":0.01582,\"85\":0.00633,\"86\":0.00949,\"89\":0.00316,\"90\":0.00633,\"92\":0.02214,\"100\":0.00949,\"105\":0.00316,\"106\":0.00633,\"107\":0.01265,\"108\":0.03796,\"109\":0.63893,\"110\":0.96472,_:\"13 79 80 81 83 87 88 91 93 94 95 96 97 98 99 101 102 103 104\"},E:{\"4\":0,\"5\":0.02214,\"14\":0.02847,_:\"0 6 7 8 9 10 11 12 13 15 3.1 3.2 6.1 7.1 9.1 10.1 11.1 16.4\",\"5.1\":0.21508,\"12.1\":0.00316,\"13.1\":0.00949,\"14.1\":0.02847,\"15.1\":0.00949,\"15.2-15.3\":0.00949,\"15.4\":0.01265,\"15.5\":0.02847,\"15.6\":0.13917,\"16.0\":0.02214,\"16.1\":0.07591,\"16.2\":0.08856,\"16.3\":0.12336},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0.00326,\"6.0-6.1\":0,\"7.0-7.1\":0.01629,\"8.1-8.4\":0.00081,\"9.0-9.2\":0.00489,\"9.3\":0.04399,\"10.0-10.2\":0,\"10.3\":0.02932,\"11.0-11.2\":0.01303,\"11.3-11.4\":0.00407,\"12.0-12.1\":0.0057,\"12.2-12.5\":0.52785,\"13.0-13.1\":0.00244,\"13.2\":0.00244,\"13.3\":0.01222,\"13.4-13.7\":0.0505,\"14.0-14.4\":0.11811,\"14.5-14.8\":0.21831,\"15.0-15.1\":0.07983,\"15.2-15.3\":0.10508,\"15.4\":0.13522,\"15.5\":0.17676,\"15.6\":0.41218,\"16.0\":1.05732,\"16.1\":1.29274,\"16.2\":1.40759,\"16.3\":1.419,\"16.4\":0.0057},P:{\"4\":0.59093,\"20\":0.73357,\"5.0-5.4\":0.04075,\"6.2-6.4\":0.08151,\"7.2-7.4\":0.60112,\"8.2\":0.01016,\"9.2\":0.04075,\"10.1\":0.01011,\"11.1-11.2\":0.14264,\"12.0\":0.04075,\"13.0\":0.12226,\"14.0\":0.15283,\"15.0\":0.08151,\"16.0\":0.24452,\"17.0\":0.21396,\"18.0\":0.31584,\"19.0\":2.31278},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.00234,\"4.2-4.3\":0.00313,\"4.4\":0,\"4.4.3-4.4.4\":0.02188},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"9\":0.00316,\"11\":0.13285,_:\"6 7 8 10 5.5\"},N:{\"10\":0.03712,\"11\":0.07423},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":3.46636},H:{\"0\":0.30422},L:{\"0\":52.21532},R:{_:\"0\"},M:{\"0\":0.06153},Q:{\"13.1\":0}};\n\"/data/features/css-color-adjust.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"2\":\"C K L G M N O\",\"33\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB FC GC\"},D:{\"16\":\"I w J D E F A B C K L G M N O\",\"33\":\"0 1 2 3 4 5 6 7 8 9 x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w IC 0B JC\",\"33\":\"J D E F A B C K L G KC LC MC 1B rB sB 2B NC OC 3B\"},F:{\"2\":\"F B C QC RC SC TC rB BC UC sB\",\"33\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\"},G:{\"1\":\"4B 5B 6B tB 7B 8B 9B AC\",\"16\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B\"},H:{\"2\":\"pC\"},I:{\"16\":\"uB I qC rC sC tC CC uC vC\",\"33\":\"H\"},J:{\"16\":\"D A\"},K:{\"2\":\"A B C rB BC sB\",\"33\":\"h\"},L:{\"16\":\"H\"},M:{\"1\":\"f\"},N:{\"16\":\"A B\"},O:{\"16\":\"wC\"},P:{\"16\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"33\":\"2B\"},R:{\"16\":\"AD\"},S:{\"1\":\"BD CD\"}},B:4,C:\"CSS print-color-adjust\"};\n/data/features/pointerlock.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C\"},C:{\"1\":\"IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB I w J D E F A B C K FC GC\",\"33\":\"0 1 2 3 4 5 6 7 8 9 L G M N O x g y z AB BB CB DB EB FB GB HB\"},D:{\"1\":\"EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"I w J D E F A B C K L G\",\"33\":\"0 1 2 3 4 5 6 7 8 9 z AB BB CB DB\",\"66\":\"M N O x g y\"},E:{\"1\":\"B C K L G 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A IC 0B JC KC LC MC\"},F:{\"1\":\"1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F B C QC RC SC TC rB BC UC sB\",\"33\":\"0 G M N O x g y z\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"2\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:2,C:\"Pointer Lock API\"};\n/data/features/css-masks.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"2\":\"C K L G M\",\"164\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"3138\":\"N\",\"12292\":\"O\"},C:{\"1\":\"UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB\",\"260\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB FC GC\"},D:{\"164\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"IC 0B\",\"164\":\"I w J D E F A B C K L G JC KC LC MC 1B rB sB 2B NC OC 3B\"},F:{\"2\":\"F B C QC RC SC TC rB BC UC sB\",\"164\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\"},G:{\"1\":\"4B 5B 6B tB 7B 8B 9B AC\",\"164\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B\"},H:{\"2\":\"pC\"},I:{\"164\":\"H uC vC\",\"676\":\"uB I qC rC sC tC CC\"},J:{\"164\":\"D A\"},K:{\"2\":\"A B C rB BC sB\",\"164\":\"h\"},L:{\"164\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"164\":\"wC\"},P:{\"164\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"164\":\"2B\"},R:{\"164\":\"AD\"},S:{\"1\":\"CD\",\"260\":\"BD\"}},B:4,C:\"CSS Masks\"};\n/data/regions/BH.js\u0011pmodule.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.00967,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0.10639,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0.00322,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0.00322,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0.04191,\"102\":0,\"103\":0,\"104\":0,\"105\":0.00322,\"106\":0.0129,\"107\":0.00322,\"108\":0.00967,\"109\":0.33852,\"110\":0.13541,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0.00322,\"47\":0.00967,\"48\":0,\"49\":0.00322,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0.00322,\"57\":0,\"58\":0.00322,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0.00645,\"66\":0,\"67\":0,\"68\":0,\"69\":0.00645,\"70\":0.00322,\"71\":0,\"72\":0,\"73\":0,\"74\":0.00322,\"75\":0.00322,\"76\":0.00645,\"77\":0.00322,\"78\":0.00645,\"79\":0.03224,\"80\":0.00322,\"81\":0.03224,\"83\":0.00322,\"84\":0.00322,\"85\":0.00322,\"86\":0.00967,\"87\":0.01612,\"88\":0.00967,\"89\":0,\"90\":0.00322,\"91\":0.00322,\"92\":0.0129,\"93\":0.00645,\"94\":0.00322,\"95\":0.00645,\"96\":0.16442,\"97\":0.00967,\"98\":0.00322,\"99\":0.00322,\"100\":0.00322,\"101\":0.00322,\"102\":0.01612,\"103\":0.05481,\"104\":0.00967,\"105\":0.01612,\"106\":0.01934,\"107\":0.03546,\"108\":0.16442,\"109\":4.03645,\"110\":2.51794,\"111\":0,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0.00322,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0.00322,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0.00322,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.00322,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0.00322,\"74\":0.00322,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0.00322,\"86\":0,\"87\":0,\"88\":0,\"89\":0.00322,\"90\":0.00322,\"91\":0.00322,\"92\":0.00645,\"93\":0.01934,\"94\":0.09994,\"95\":0.02257,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0.00645,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0.00322,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0.00322,\"91\":0,\"92\":0.00322,\"93\":0.00322,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0,\"106\":0.00322,\"107\":0.00967,\"108\":0.03869,\"109\":0.39333,\"110\":0.61256},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.00322,\"14\":0.01934,\"15\":0.00322,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0.00322,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0.00322,\"13.1\":0.01612,\"14.1\":0.04514,\"15.1\":0.0129,\"15.2-15.3\":0.00645,\"15.4\":0.01934,\"15.5\":0.04836,\"15.6\":0.19344,\"16.0\":0.01612,\"16.1\":0.07093,\"16.2\":0.12574,\"16.3\":0.11606,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0.00258,\"6.0-6.1\":0,\"7.0-7.1\":0.01809,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0.09561,\"10.0-10.2\":0,\"10.3\":0.03101,\"11.0-11.2\":0.03876,\"11.3-11.4\":0.01292,\"12.0-12.1\":0.02067,\"12.2-12.5\":0.50645,\"13.0-13.1\":0.01809,\"13.2\":0,\"13.3\":0.02067,\"13.4-13.7\":0.10594,\"14.0-14.4\":0.34108,\"14.5-14.8\":0.5633,\"15.0-15.1\":0.27131,\"15.2-15.3\":0.20413,\"15.4\":0.25064,\"15.5\":0.97156,\"15.6\":2.09041,\"16.0\":3.32037,\"16.1\":5.3746,\"16.2\":5.50897,\"16.3\":4.57616,\"16.4\":0.03101},P:{\"4\":0.09182,\"20\":1.00998,\"5.0-5.4\":0,\"6.2-6.4\":0.0102,\"7.2-7.4\":0.06121,\"8.2\":0,\"9.2\":0.0102,\"10.1\":0.0102,\"11.1-11.2\":0.19384,\"12.0\":0.04081,\"13.0\":0.05101,\"14.0\":0.03061,\"15.0\":0.0204,\"16.0\":0.08161,\"17.0\":0.11222,\"18.0\":0.10202,\"19.0\":1.82613},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.00659,\"4.2-4.3\":0.00396,\"4.4\":0,\"4.4.3-4.4.4\":0.04879},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.01934,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":4.17402},H:{\"0\":0.84038},L:{\"0\":53.26812},R:{_:\"0\"},M:{\"0\":0.38623},Q:{\"13.1\":0}};\n/data/regions/LC.js\u0010module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0.13239,\"88\":0.00457,\"89\":0,\"90\":0,\"91\":0.00457,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0.00457,\"103\":0,\"104\":0.00457,\"105\":0,\"106\":0.00457,\"107\":0.00457,\"108\":0.00913,\"109\":0.33325,\"110\":0.29216,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0.00457,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0.00457,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0.00457,\"70\":0,\"71\":0,\"72\":0,\"73\":0.00457,\"74\":0,\"75\":0,\"76\":0.02739,\"77\":0.00457,\"78\":0.02739,\"79\":0.02283,\"80\":0,\"81\":0.02283,\"83\":0.02283,\"84\":0.00457,\"85\":0,\"86\":0.00457,\"87\":0.00457,\"88\":0.00913,\"89\":0,\"90\":0.00457,\"91\":0.00457,\"92\":0,\"93\":0.02283,\"94\":0,\"95\":0.00457,\"96\":0.02283,\"97\":0.03196,\"98\":0.00457,\"99\":0,\"100\":0.00913,\"101\":0.00457,\"102\":0.02283,\"103\":0.24651,\"104\":0.00913,\"105\":0.01826,\"106\":0.05478,\"107\":0.04109,\"108\":0.77149,\"109\":7.56877,\"110\":4.04459,\"111\":0.05935,\"112\":0.0137,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0.00913,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.00913,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.01826,\"94\":0.23282,\"95\":0.29216,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0.00913,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0.00913,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00913,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0.00457,\"106\":0.00457,\"107\":0.02283,\"108\":0.05935,\"109\":1.12756,\"110\":1.26451},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.05935,\"14\":0.02739,\"15\":0.00457,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0.00457,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0.00457,\"12.1\":0.00457,\"13.1\":0.06391,\"14.1\":0.05022,\"15.1\":0.00457,\"15.2-15.3\":0.00457,\"15.4\":0.05022,\"15.5\":0.04109,\"15.6\":0.27847,\"16.0\":0.00457,\"16.1\":0.05022,\"16.2\":0.24195,\"16.3\":0.17347,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0.00204,\"6.0-6.1\":0,\"7.0-7.1\":0.00611,\"8.1-8.4\":0,\"9.0-9.2\":0.20161,\"9.3\":0.12829,\"10.0-10.2\":0,\"10.3\":0.0448,\"11.0-11.2\":0.00611,\"11.3-11.4\":0.01833,\"12.0-12.1\":0,\"12.2-12.5\":0.26066,\"13.0-13.1\":0,\"13.2\":0,\"13.3\":0.01222,\"13.4-13.7\":0.02851,\"14.0-14.4\":0.77588,\"14.5-14.8\":0.36452,\"15.0-15.1\":0.10997,\"15.2-15.3\":0.11404,\"15.4\":0.13033,\"15.5\":0.28306,\"15.6\":1.74725,\"16.0\":2.19119,\"16.1\":4.48216,\"16.2\":5.26007,\"16.3\":2.67178,\"16.4\":0.01018},P:{\"4\":0.18843,\"20\":1.60163,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0.36639,\"8.2\":0,\"9.2\":0,\"10.1\":0,\"11.1-11.2\":0.06281,\"12.0\":0.01047,\"13.0\":0.04187,\"14.0\":0.02094,\"15.0\":0.12562,\"16.0\":0.04187,\"17.0\":0.07328,\"18.0\":0.10468,\"19.0\":2.74267},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0.14286,\"4.4\":0,\"4.4.3-4.4.4\":0.51429},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0.00913,\"11\":0.00457,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.26088},H:{\"0\":0.24698},L:{\"0\":53.51952},R:{_:\"0\"},M:{\"0\":0.15762},Q:{\"13.1\":0}};\n/data/regions/VU.js\u0010module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0.01118,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0.02235,\"69\":0.00373,\"70\":0,\"71\":0,\"72\":0.12293,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0.00373,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0.00373,\"91\":0,\"92\":0,\"93\":0.00373,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0.00745,\"100\":0.00373,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0.00373,\"106\":0,\"107\":0.00373,\"108\":0,\"109\":0.49543,\"110\":0.4321,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0.00373,\"57\":0,\"58\":0,\"59\":0.0149,\"60\":0,\"61\":0,\"62\":0,\"63\":0.01118,\"64\":0,\"65\":0,\"66\":0,\"67\":0.00373,\"68\":0.00373,\"69\":0.06705,\"70\":0.00373,\"71\":0,\"72\":0.00745,\"73\":0,\"74\":0.03353,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0.00745,\"81\":0,\"83\":0.00373,\"84\":0.01863,\"85\":0,\"86\":0,\"87\":0.00373,\"88\":0.06333,\"89\":0,\"90\":0,\"91\":0.00373,\"92\":0,\"93\":0.01863,\"94\":0.00373,\"95\":0.01863,\"96\":0.0298,\"97\":0,\"98\":0,\"99\":0.00745,\"100\":0.00373,\"101\":0,\"102\":0.00745,\"103\":0.0894,\"104\":0.00745,\"105\":0.03353,\"106\":0.00373,\"107\":0.0298,\"108\":0.08195,\"109\":4.40668,\"110\":2.36538,\"111\":0.01118,\"112\":0.01118,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0.00373,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0.01863,\"95\":0.01863,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0.00373,\"16\":0,\"17\":0.01118,\"18\":0.01118,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0.00373,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0.01118,\"91\":0,\"92\":0.01118,\"93\":0,\"94\":0.00373,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0.00373,\"101\":0.01118,\"102\":0.00373,\"103\":0.00373,\"104\":0,\"105\":0.00373,\"106\":0.00745,\"107\":0.0149,\"108\":0.0149,\"109\":0.68913,\"110\":0.66305},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.00373,\"12\":0,\"13\":0,\"14\":0,\"15\":0,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0.00373,\"12.1\":0.00373,\"13.1\":0.30173,\"14.1\":0.0447,\"15.1\":0.03353,\"15.2-15.3\":0.03353,\"15.4\":0.01118,\"15.5\":0.02235,\"15.6\":0.04843,\"16.0\":0.01118,\"16.1\":0.02235,\"16.2\":0.05588,\"16.3\":0.05588,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0,\"8.1-8.4\":0,\"9.0-9.2\":0.07492,\"9.3\":0.02358,\"10.0-10.2\":0,\"10.3\":0.02705,\"11.0-11.2\":0,\"11.3-11.4\":0,\"12.0-12.1\":0,\"12.2-12.5\":0.1755,\"13.0-13.1\":0,\"13.2\":0,\"13.3\":0.00416,\"13.4-13.7\":0.02012,\"14.0-14.4\":0.13665,\"14.5-14.8\":0.60279,\"15.0-15.1\":0.10197,\"15.2-15.3\":0.5355,\"15.4\":0.15677,\"15.5\":0.13318,\"15.6\":0.43007,\"16.0\":0.40302,\"16.1\":1.26384,\"16.2\":1.25968,\"16.3\":1.03286,\"16.4\":0},P:{\"4\":0.22531,\"20\":0.64521,\"5.0-5.4\":0.01024,\"6.2-6.4\":0.01024,\"7.2-7.4\":0.21507,\"8.2\":0,\"9.2\":0.01024,\"10.1\":0,\"11.1-11.2\":0.04097,\"12.0\":0,\"13.0\":0.03072,\"14.0\":0.10241,\"15.0\":0.1229,\"16.0\":0.22531,\"17.0\":0.02048,\"18.0\":0.08193,\"19.0\":1.32115},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0.255,\"4.4\":0,\"4.4.3-4.4.4\":0.255},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.00745,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0.00628,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":1.22363},H:{\"0\":0.16634},L:{\"0\":76.1606},R:{_:\"0\"},M:{\"0\":0.06275},Q:{\"13.1\":0.01255}};\n%/data/features/css-optional-pseudo.js\u0005module.exports={A:{A:{\"1\":\"A B\",\"2\":\"J D E F DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"16\":\"I w J D E F A B C K L\"},E:{\"1\":\"w J D E F A B C K L G JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I IC 0B\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"16\":\"F QC\",\"132\":\"B C RC SC TC rB BC UC sB\"},G:{\"1\":\"E WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC CC\"},H:{\"132\":\"pC\"},I:{\"1\":\"uB I H sC tC CC uC vC\",\"16\":\"qC rC\"},J:{\"1\":\"D A\"},K:{\"1\":\"h\",\"132\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:5,C:\":optional CSS pseudo-class\"};\n/data/regions/YT.js\fmodule.exports={C:{\"33\":0.01915,\"34\":0.00479,\"52\":0.01436,\"60\":0.01915,\"68\":0.00958,\"78\":0.07182,\"89\":0.00479,\"91\":0.12449,\"92\":0.00479,\"93\":0.00479,\"95\":0.05267,\"96\":0.01915,\"97\":0.00958,\"100\":0.09097,\"102\":0.04788,\"103\":0.00958,\"104\":0.01436,\"105\":0.00958,\"106\":0.04309,\"107\":0.01436,\"108\":0.14843,\"109\":3.72506,\"110\":2.7531,_:\"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 53 54 55 56 57 58 59 61 62 63 64 65 66 67 69 70 71 72 73 74 75 76 77 79 80 81 82 83 84 85 86 87 88 90 94 98 99 101 111 112 3.5 3.6\"},D:{\"49\":0.00958,\"62\":0.00479,\"68\":0.07661,\"70\":0.0383,\"76\":0.00958,\"78\":0.00479,\"79\":0.00479,\"81\":0.07661,\"85\":0.01436,\"87\":0.00479,\"88\":0.00479,\"90\":0.01915,\"91\":0.0814,\"93\":0.00958,\"94\":0.02873,\"95\":0.00958,\"97\":0.00958,\"99\":0.00958,\"101\":0.01436,\"102\":0.02873,\"103\":0.08618,\"104\":0.01915,\"105\":0.02394,\"106\":0.02873,\"107\":0.07182,\"108\":1.3167,\"109\":14.13418,\"110\":8.68543,_:\"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 50 51 52 53 54 55 56 57 58 59 60 61 63 64 65 66 67 69 71 72 73 74 75 77 80 83 84 86 89 92 96 98 100 111 112 113\"},F:{\"93\":0.00958,\"94\":0.38304,\"95\":0.29686,_:\"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1\",\"10.0-10.1\":0},B:{\"12\":0.01436,\"15\":0.02394,\"17\":0.02394,\"18\":0.00479,\"84\":0.01436,\"92\":0.00958,\"99\":0.00958,\"102\":0.00479,\"103\":0.00479,\"104\":0.00958,\"105\":0.04309,\"106\":0.00479,\"107\":0.06703,\"108\":0.23461,\"109\":3.12178,\"110\":4.94122,_:\"13 14 16 79 80 81 83 85 86 87 88 89 90 91 93 94 95 96 97 98 100 101\"},E:{\"4\":0,\"13\":0.01436,\"14\":0.02873,\"15\":0.04788,_:\"0 5 6 7 8 9 10 11 12 3.1 3.2 5.1 6.1 7.1 9.1 10.1 11.1 16.4\",\"12.1\":0.01436,\"13.1\":0.08618,\"14.1\":0.18673,\"15.1\":0.1197,\"15.2-15.3\":0.08618,\"15.4\":0.08618,\"15.5\":0.13885,\"15.6\":0.29207,\"16.0\":0.09576,\"16.1\":0.32558,\"16.2\":0.2777,\"16.3\":0.52668},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0.02269,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0,\"10.0-10.2\":0,\"10.3\":0.00851,\"11.0-11.2\":0.00662,\"11.3-11.4\":0.02269,\"12.0-12.1\":0,\"12.2-12.5\":0.26662,\"13.0-13.1\":0,\"13.2\":0,\"13.3\":0,\"13.4-13.7\":0.01607,\"14.0-14.4\":0.10306,\"14.5-14.8\":0.31957,\"15.0-15.1\":0.17775,\"15.2-15.3\":0.0728,\"15.4\":0.104,\"15.5\":0.11818,\"15.6\":1.14495,\"16.0\":1.31325,\"16.1\":1.98263,\"16.2\":2.271,\"16.3\":0.89346,\"16.4\":0.01135},P:{\"4\":0.02039,\"20\":1.14176,\"5.0-5.4\":0.01042,\"6.2-6.4\":0.01025,\"7.2-7.4\":0.06117,\"8.2\":0.02044,\"9.2\":0.06117,\"10.1\":0.0217,\"11.1-11.2\":0.09175,\"12.0\":0.02048,\"13.0\":0.02039,\"14.0\":0.02039,\"15.0\":0.01019,\"16.0\":0.12233,\"17.0\":0.03058,\"18.0\":0.04078,\"19.0\":2.07963},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0,\"4.4\":0,\"4.4.3-4.4.4\":0.03127},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"11\":0.13885,_:\"6 7 8 9 10 5.5\"},N:{\"10\":0.02102,\"11\":0.02035},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.04691},H:{\"0\":0.54278},L:{\"0\":42.60229},R:{_:\"0\"},M:{\"0\":0.15636},Q:{\"13.1\":0}};\n/data/regions/alt-af.js\u000ffmodule.exports={C:{\"15\":0.00207,\"34\":0.00413,\"43\":0.00413,\"47\":0.00207,\"48\":0.00207,\"52\":0.03927,\"56\":0.00207,\"60\":0.00207,\"65\":0.00207,\"72\":0.0062,\"77\":0.00207,\"78\":0.0062,\"88\":0.00413,\"89\":0.00207,\"91\":0.00413,\"95\":0.00207,\"99\":0.0062,\"100\":0.00413,\"101\":0.00207,\"102\":0.02274,\"103\":0.00413,\"104\":0.00827,\"105\":0.00827,\"106\":0.00827,\"107\":0.01447,\"108\":0.03307,\"109\":0.70278,\"110\":0.44647,\"111\":0.01654,_:\"2 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 35 36 37 38 39 40 41 42 44 45 46 49 50 51 53 54 55 57 58 59 61 62 63 64 66 67 68 69 70 71 73 74 75 76 79 80 81 82 83 84 85 86 87 90 92 93 94 96 97 98 112 3.5 3.6\"},D:{\"11\":0.00207,\"33\":0.00413,\"38\":0.00413,\"40\":0.00413,\"43\":0.04341,\"47\":0.00413,\"49\":0.0248,\"50\":0.00413,\"52\":0.00207,\"53\":0.00207,\"55\":0.00413,\"56\":0.0062,\"58\":0.00413,\"60\":0.00207,\"61\":0.00207,\"62\":0.00207,\"63\":0.00827,\"64\":0.00413,\"65\":0.0062,\"66\":0.00413,\"67\":0.0124,\"68\":0.0062,\"69\":0.01654,\"70\":0.01034,\"71\":0.0062,\"72\":0.01034,\"73\":0.0062,\"74\":0.0186,\"75\":0.0062,\"76\":0.01034,\"77\":0.00827,\"78\":0.0062,\"79\":0.05788,\"80\":0.01447,\"81\":0.01447,\"83\":0.01447,\"84\":0.01034,\"85\":0.01654,\"86\":0.02067,\"87\":0.0248,\"88\":0.01447,\"89\":0.01034,\"90\":0.02067,\"91\":0.03101,\"92\":0.04341,\"93\":0.02894,\"94\":0.03101,\"95\":0.0186,\"96\":0.01654,\"97\":0.01447,\"98\":0.03514,\"99\":0.02067,\"100\":0.03101,\"101\":0.0186,\"102\":0.03307,\"103\":0.06614,\"104\":0.02894,\"105\":0.05374,\"106\":0.04341,\"107\":0.07648,\"108\":0.26458,\"109\":7.18283,\"110\":3.37128,\"111\":0.00827,\"112\":0.00413,_:\"4 5 6 7 8 9 10 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 34 35 36 37 39 41 42 44 45 46 48 51 54 57 59 113\"},F:{\"28\":0.00413,\"36\":0.00207,\"64\":0.00207,\"72\":0.00207,\"73\":0.0062,\"79\":0.0124,\"81\":0.00207,\"82\":0.00207,\"83\":0.00207,\"84\":0.00413,\"85\":0.00827,\"86\":0.00207,\"89\":0.00413,\"90\":0.0062,\"91\":0.00207,\"92\":0.0062,\"93\":0.02274,\"94\":0.24597,\"95\":0.24804,_:\"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 33 34 35 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 65 66 67 68 69 70 71 74 75 76 77 78 80 87 88 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1\",\"10.0-10.1\":0},B:{\"12\":0.01034,\"13\":0.0062,\"14\":0.00413,\"15\":0.00413,\"16\":0.00413,\"17\":0.00413,\"18\":0.0248,\"84\":0.00413,\"85\":0.00207,\"89\":0.0062,\"90\":0.00413,\"92\":0.0186,\"95\":0.00207,\"100\":0.00207,\"101\":0.00413,\"102\":0.00207,\"103\":0.00207,\"104\":0.00207,\"105\":0.0062,\"106\":0.0062,\"107\":0.02274,\"108\":0.04547,\"109\":0.77099,\"110\":0.93842,_:\"79 80 81 83 86 87 88 91 93 94 96 97 98 99\"},E:{\"4\":0,\"13\":0.00413,\"14\":0.0186,\"15\":0.00413,_:\"0 5 6 7 8 9 10 11 12 3.1 3.2 6.1 7.1 9.1 10.1 16.4\",\"5.1\":0.03101,\"11.1\":0.00207,\"12.1\":0.00827,\"13.1\":0.02894,\"14.1\":0.04134,\"15.1\":0.00827,\"15.2-15.3\":0.0062,\"15.4\":0.01447,\"15.5\":0.0248,\"15.6\":0.12195,\"16.0\":0.0186,\"16.1\":0.04754,\"16.2\":0.12195,\"16.3\":0.08681},G:{\"8\":0.00083,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0.00167,\"6.0-6.1\":0.0025,\"7.0-7.1\":0.02333,\"8.1-8.4\":0.00167,\"9.0-9.2\":0.00333,\"9.3\":0.04749,\"10.0-10.2\":0.0025,\"10.3\":0.05998,\"11.0-11.2\":0.00833,\"11.3-11.4\":0.01,\"12.0-12.1\":0.03499,\"12.2-12.5\":0.63066,\"13.0-13.1\":0.01999,\"13.2\":0.00833,\"13.3\":0.03666,\"13.4-13.7\":0.08581,\"14.0-14.4\":0.27493,\"14.5-14.8\":0.3599,\"15.0-15.1\":0.14913,\"15.2-15.3\":0.17162,\"15.4\":0.16912,\"15.5\":0.30658,\"15.6\":0.58234,\"16.0\":0.74897,\"16.1\":1.34214,\"16.2\":1.45794,\"16.3\":0.97557,\"16.4\":0.00417},P:{\"4\":0.24775,\"20\":0.75357,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0.23743,\"8.2\":0,\"9.2\":0.03097,\"10.1\":0,\"11.1-11.2\":0.07226,\"12.0\":0.02065,\"13.0\":0.08258,\"14.0\":0.08258,\"15.0\":0.04129,\"16.0\":0.15484,\"17.0\":0.14452,\"18.0\":0.1342,\"19.0\":2.07491},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.00158,\"4.2-4.3\":0.00709,\"4.4\":0,\"4.4.3-4.4.4\":0.04687},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"8\":0.00906,\"9\":0.00226,\"10\":0.00226,\"11\":0.0815,_:\"6 7 5.5\"},N:{\"10\":0,\"11\":0},S:{\"2.5\":0.0714,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.46011},H:{\"0\":5.85064},L:{\"0\":64.46402},R:{_:\"0\"},M:{\"0\":0.23006},Q:{\"13.1\":0}};\n#/data/features/fieldset-disabled.js\u0005module.exports={A:{A:{\"16\":\"DC\",\"132\":\"E F\",\"388\":\"J D A B\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"I w J D E F A B C K L G\",\"16\":\"M N O x\"},E:{\"1\":\"J D E F A B C K L G KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w IC 0B JC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e RC SC TC rB BC UC sB\",\"16\":\"F QC\"},G:{\"1\":\"E XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC CC WC\"},H:{\"388\":\"pC\"},I:{\"1\":\"H uC vC\",\"2\":\"uB I qC rC sC tC CC\"},J:{\"1\":\"A\",\"2\":\"D\"},K:{\"1\":\"A B C h rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A\",\"260\":\"B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:1,C:\"disabled attribute of the fieldset element\"};\n&/data/features/internationalization.js\u0005module.exports={A:{A:{\"1\":\"B\",\"2\":\"J D E F A DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 EC uB I w J D E F A B C K L G M N O x g y z FC GC\"},D:{\"1\":\"1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 I w J D E F A B C K L G M N O x g y z\"},E:{\"1\":\"A B C K L G 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F IC 0B JC KC LC MC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F B C QC RC SC TC rB BC UC sB\"},G:{\"1\":\"cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H uC vC\",\"2\":\"uB I qC rC sC tC CC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"B\",\"2\":\"A\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"2\":\"BD\"}},B:6,C:\"Internationalization API\"};\n/data/regions/RU.js\u0013module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0.00591,\"52\":0.10642,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0.00591,\"60\":0.00591,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0.02956,\"69\":0.01182,\"70\":0.01182,\"71\":0.01182,\"72\":0.04138,\"73\":0.01182,\"74\":0.01182,\"75\":0.01182,\"76\":0.01182,\"77\":0.01182,\"78\":0.02956,\"79\":0.01182,\"80\":0.01774,\"81\":0.01774,\"82\":0.01774,\"83\":0.01182,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0.00591,\"89\":0.00591,\"90\":0.00591,\"91\":0.01774,\"92\":0,\"93\":0.00591,\"94\":0.00591,\"95\":0.00591,\"96\":0.00591,\"97\":0.00591,\"98\":0.00591,\"99\":0.01774,\"100\":0.01182,\"101\":0.00591,\"102\":0.05912,\"103\":0.01182,\"104\":0.02365,\"105\":0.01182,\"106\":0.01774,\"107\":0.02365,\"108\":0.04138,\"109\":0.79221,\"110\":0.51434,\"111\":0.00591,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0.01182,\"26\":0.00591,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0.00591,\"39\":0,\"40\":0,\"41\":0.00591,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0.01774,\"49\":0.0473,\"50\":0,\"51\":0.03547,\"52\":0.01774,\"53\":0.00591,\"54\":0,\"55\":0.00591,\"56\":0.03547,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0.00591,\"64\":0.00591,\"65\":0.00591,\"66\":0.01774,\"67\":0.00591,\"68\":0.06503,\"69\":0.0473,\"70\":0.0473,\"71\":0.04138,\"72\":0.07094,\"73\":0.02365,\"74\":0.07094,\"75\":0.0473,\"76\":0.06503,\"77\":0.0473,\"78\":0.07094,\"79\":0.10642,\"80\":0.10642,\"81\":0.10642,\"83\":0.08868,\"84\":0.07686,\"85\":0.11233,\"86\":0.1478,\"87\":0.1005,\"88\":0.10642,\"89\":0.08868,\"90\":0.51434,\"91\":0.44931,\"92\":0.43749,\"93\":0.42566,\"94\":0.42566,\"95\":0.01774,\"96\":0.02365,\"97\":0.04138,\"98\":0.05321,\"99\":0.04138,\"100\":0.0473,\"101\":0.03547,\"102\":0.07094,\"103\":0.07094,\"104\":0.30742,\"105\":0.09459,\"106\":0.41384,\"107\":0.46705,\"108\":0.69762,\"109\":6.56823,\"110\":3.42305,\"111\":0.00591,\"112\":0.00591,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0.02956,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0.00591,\"47\":0.00591,\"48\":0,\"49\":0.00591,\"50\":0,\"51\":0,\"52\":0,\"53\":0.01182,\"54\":0.01774,\"55\":0.01774,\"56\":0.00591,\"57\":0,\"58\":0.00591,\"60\":0.00591,\"62\":0,\"63\":0.00591,\"64\":0.00591,\"65\":0.00591,\"66\":0.00591,\"67\":0.01182,\"68\":0.00591,\"69\":0,\"70\":0.00591,\"71\":0.00591,\"72\":0.00591,\"73\":0.01182,\"74\":0.00591,\"75\":0.00591,\"76\":0.00591,\"77\":0.00591,\"78\":0,\"79\":0.01774,\"80\":0,\"81\":0.00591,\"82\":0.00591,\"83\":0.00591,\"84\":0.01774,\"85\":0.06503,\"86\":0.02365,\"87\":0.00591,\"88\":0.00591,\"89\":0.02365,\"90\":0.01182,\"91\":0.01182,\"92\":0.01182,\"93\":0.1005,\"94\":1.46026,\"95\":1.31838,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0.01182},B:{\"12\":0,\"13\":0.00591,\"14\":0,\"15\":0,\"16\":0,\"17\":0.00591,\"18\":0.01774,\"79\":0.01182,\"80\":0.02956,\"81\":0.02365,\"83\":0.02365,\"84\":0.02956,\"85\":0.01774,\"86\":0.02365,\"87\":0.01774,\"88\":0.01774,\"89\":0.02365,\"90\":0.01774,\"91\":0,\"92\":0.00591,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0.00591,\"99\":0.00591,\"100\":0.00591,\"101\":0,\"102\":0,\"103\":0.00591,\"104\":0.00591,\"105\":0,\"106\":0.00591,\"107\":0.01182,\"108\":0.02956,\"109\":0.68579,\"110\":0.86906},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.03547,\"14\":0.06503,\"15\":0.02365,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0.36654,\"10.1\":0,\"11.1\":0.00591,\"12.1\":0.01182,\"13.1\":0.07094,\"14.1\":0.1005,\"15.1\":0.02365,\"15.2-15.3\":0.02956,\"15.4\":0.02956,\"15.5\":0.0473,\"15.6\":0.1951,\"16.0\":0.01774,\"16.1\":0.1005,\"16.2\":0.1478,\"16.3\":0.15962,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0.00357,\"6.0-6.1\":0,\"7.0-7.1\":0.00892,\"8.1-8.4\":0.00357,\"9.0-9.2\":0.04284,\"9.3\":0.10888,\"10.0-10.2\":0.03213,\"10.3\":0.1071,\"11.0-11.2\":0.10174,\"11.3-11.4\":0.06069,\"12.0-12.1\":0.07318,\"12.2-12.5\":0.55334,\"13.0-13.1\":0.05355,\"13.2\":0.04284,\"13.3\":0.06783,\"13.4-13.7\":0.16779,\"14.0-14.4\":0.43553,\"14.5-14.8\":0.81573,\"15.0-15.1\":0.40876,\"15.2-15.3\":0.75861,\"15.4\":0.31237,\"15.5\":0.49086,\"15.6\":0.98351,\"16.0\":2.30617,\"16.1\":3.23792,\"16.2\":3.06121,\"16.3\":2.46325,\"16.4\":0.01785},P:{\"4\":0.05239,\"20\":0.32481,\"5.0-5.4\":0,\"6.2-6.4\":0.01048,\"7.2-7.4\":0.05239,\"8.2\":0,\"9.2\":0,\"10.1\":0,\"11.1-11.2\":0.02096,\"12.0\":0.01048,\"13.0\":0.02096,\"14.0\":0.02096,\"15.0\":0.01048,\"16.0\":0.03143,\"17.0\":0.03143,\"18.0\":0.04191,\"19.0\":0.61818},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.00856,\"4.2-4.3\":0.01284,\"4.4\":0,\"4.4.3-4.4.4\":0.13269},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0.00658,\"7\":0.00658,\"8\":0.0395,\"9\":0.01317,\"10\":0.01317,\"11\":0.21068,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.1349},H:{\"0\":0.64246},L:{\"0\":39.26494},R:{_:\"0\"},M:{\"0\":0.28616},Q:{\"13.1\":0.00409}};\n/data/regions/VG.js\u000fmodule.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0.00395,\"101\":0,\"102\":0,\"103\":0.00395,\"104\":0.00395,\"105\":0,\"106\":0,\"107\":0,\"108\":0,\"109\":0.19355,\"110\":0.2607,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0.00395,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0.0948,\"76\":0,\"77\":0,\"78\":0,\"79\":0.2765,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0.00395,\"88\":0,\"89\":0,\"90\":0.00395,\"91\":0,\"92\":0,\"93\":0.00395,\"94\":0.00395,\"95\":0,\"96\":0.00395,\"97\":0,\"98\":0,\"99\":0.0158,\"100\":0,\"101\":0.00395,\"102\":0.00395,\"103\":0.35155,\"104\":0.0158,\"105\":0.02765,\"106\":0.0079,\"107\":0.09085,\"108\":0.2686,\"109\":4.72815,\"110\":2.1725,\"111\":0,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0.079,\"95\":0.01185,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.00395,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0.01975,\"106\":0,\"107\":0,\"108\":0.03555,\"109\":0.5135,\"110\":0.948},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0.01975,\"15\":0,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0,\"13.1\":0.158,\"14.1\":0.0474,\"15.1\":0.00395,\"15.2-15.3\":0.02765,\"15.4\":0.37525,\"15.5\":0.75445,\"15.6\":0.316,\"16.0\":0.0158,\"16.1\":0.6162,\"16.2\":1.2561,\"16.3\":0.2844,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0.9557,\"10.0-10.2\":0,\"10.3\":0.03577,\"11.0-11.2\":0.01022,\"11.3-11.4\":0.65417,\"12.0-12.1\":0,\"12.2-12.5\":1.08346,\"13.0-13.1\":0,\"13.2\":0,\"13.3\":0,\"13.4-13.7\":0.10732,\"14.0-14.4\":0.53151,\"14.5-14.8\":0.50596,\"15.0-15.1\":0.03066,\"15.2-15.3\":0.38841,\"15.4\":0.52129,\"15.5\":1.46165,\"15.6\":8.85169,\"16.0\":3.09196,\"16.1\":12.1123,\"16.2\":11.56545,\"16.3\":7.3236,\"16.4\":0.15843},P:{\"4\":0.0322,\"20\":1.15906,\"5.0-5.4\":0.01073,\"6.2-6.4\":0,\"7.2-7.4\":0.13952,\"8.2\":0,\"9.2\":0,\"10.1\":0,\"11.1-11.2\":0.05366,\"12.0\":0,\"13.0\":0.06439,\"14.0\":0.07512,\"15.0\":0.01073,\"16.0\":0.0322,\"17.0\":0.06439,\"18.0\":0.02146,\"19.0\":1.70639},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0,\"4.4\":0,\"4.4.3-4.4.4\":0.2628},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.0726},H:{\"0\":0.00573},L:{\"0\":30.3683},R:{_:\"0\"},M:{\"0\":0.21175},Q:{\"13.1\":0}};\n/data/features/apng.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\",\"2\":\"EC\"},D:{\"1\":\"vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB\"},E:{\"1\":\"E F A B C K L G MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D IC 0B JC KC LC\"},F:{\"1\":\"B C NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB\"},G:{\"1\":\"E ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC CC WC XC YC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"A B C h rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I xC yC\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:5,C:\"Animated PNG (APNG)\"};\n/data/regions/QA.js\u0011\u0014module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0.03458,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0.00314,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.00314,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0.00314,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0.01572,\"108\":0.00314,\"109\":0.13205,\"110\":0.07546,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0.00314,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0.00314,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0.00314,\"67\":0.00314,\"68\":0.00314,\"69\":0,\"70\":0,\"71\":0.00314,\"72\":0,\"73\":0,\"74\":0.00314,\"75\":0,\"76\":0.00314,\"77\":0,\"78\":0.00314,\"79\":0.00943,\"80\":0.00314,\"81\":0,\"83\":0,\"84\":0.00314,\"85\":0.00629,\"86\":0.00629,\"87\":0.00629,\"88\":0.00314,\"89\":0.00629,\"90\":0,\"91\":0.00314,\"92\":0.00943,\"93\":0.00629,\"94\":0,\"95\":0,\"96\":0.00314,\"97\":0.00314,\"98\":0.00314,\"99\":0.00314,\"100\":0.00314,\"101\":0.00314,\"102\":0.00629,\"103\":0.03144,\"104\":0.00943,\"105\":0.01258,\"106\":0.01572,\"107\":0.02515,\"108\":0.16663,\"109\":3.67848,\"110\":2.43974,\"111\":0.00314,\"112\":0.00314,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0.00314,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0.00314,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0.00314,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0.00314,\"64\":0,\"65\":0,\"66\":0.00314,\"67\":0.06288,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0.00314,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.01886,\"94\":0.27038,\"95\":0.08803,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0.00314,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0.00314,\"100\":0,\"101\":0,\"102\":0,\"103\":0.00314,\"104\":0,\"105\":0.00314,\"106\":0,\"107\":0.00629,\"108\":0.02201,\"109\":0.4433,\"110\":0.53448},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.00314,\"14\":0.01572,\"15\":0.00314,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0.00314,\"13.1\":0.01886,\"14.1\":0.03773,\"15.1\":0.00943,\"15.2-15.3\":0.00629,\"15.4\":0.0283,\"15.5\":0.03458,\"15.6\":0.1572,\"16.0\":0.01258,\"16.1\":0.06288,\"16.2\":0.15406,\"16.3\":0.14777,\"16.4\":0},G:{\"8\":0.01023,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0.00205,\"6.0-6.1\":0,\"7.0-7.1\":0.01841,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0.03068,\"10.0-10.2\":0,\"10.3\":0.03682,\"11.0-11.2\":0.01227,\"11.3-11.4\":0,\"12.0-12.1\":0.00614,\"12.2-12.5\":0.2618,\"13.0-13.1\":0.00409,\"13.2\":0.00205,\"13.3\":0.01227,\"13.4-13.7\":0.05932,\"14.0-14.4\":0.20044,\"14.5-14.8\":0.32726,\"15.0-15.1\":0.10636,\"15.2-15.3\":0.17795,\"15.4\":0.18408,\"15.5\":0.38043,\"15.6\":1.32538,\"16.0\":1.87558,\"16.1\":3.59981,\"16.2\":4.77793,\"16.3\":5.5388,\"16.4\":0.02863},P:{\"4\":0.03072,\"20\":0.81916,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0.03072,\"8.2\":0,\"9.2\":0.01024,\"10.1\":0,\"11.1-11.2\":0.01024,\"12.0\":0.01024,\"13.0\":0.02048,\"14.0\":0.03072,\"15.0\":0.01024,\"16.0\":0.03072,\"17.0\":0.04096,\"18.0\":0.07168,\"19.0\":1.24922},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.00282,\"4.2-4.3\":0.00563,\"4.4\":0,\"4.4.3-4.4.4\":0.03098},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0.00319,\"9\":0,\"10\":0,\"11\":0.22318,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":3.81879},H:{\"0\":0.86328},L:{\"0\":62.30744},R:{_:\"0\"},M:{\"0\":0.08227},Q:{\"13.1\":0}};\n7/data/features/mdn-css-unicode-bidi-isolate-override.js\u0005module.exports={A:{D:{\"1\":\"PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB\"},L:{\"1\":\"H\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"1\":\"RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB I w J D E F A B C K L G M FC GC\",\"33\":\"0 1 2 3 4 5 6 7 8 9 N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB\"},M:{\"1\":\"f\"},A:{\"2\":\"J D E F A B DC\"},F:{\"1\":\"CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB QC RC SC TC rB BC UC sB\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},E:{\"1\":\"B C K L G rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"I w J IC 0B JC KC PC\",\"33\":\"D E F A LC MC 1B\"},G:{\"1\":\"eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC CC WC XC\",\"33\":\"E YC ZC aC bC cC dC\"},P:{\"1\":\"g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"}},B:6,C:\"isolate-override from unicode-bidi\"};\n /data/features/scrollintoview.js\u0005module.exports={A:{A:{\"2\":\"J D DC\",\"132\":\"E F A B\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"132\":\"C K L G M N O\"},C:{\"1\":\"DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"132\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB FC GC\"},D:{\"1\":\"wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"132\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB\"},E:{\"1\":\"tB 7B 8B 9B AC PC\",\"2\":\"I w IC 0B\",\"132\":\"J D E F A B C K L G JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B\"},F:{\"1\":\"PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F QC RC SC TC\",\"16\":\"B rB BC\",\"132\":\"0 1 2 3 4 5 6 7 8 9 C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB UC sB\"},G:{\"1\":\"tB 7B 8B 9B AC\",\"16\":\"0B VC CC\",\"132\":\"E WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"16\":\"qC rC\",\"132\":\"uB I sC tC CC uC vC\"},J:{\"132\":\"D A\"},K:{\"1\":\"h\",\"132\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"132\":\"A B\"},O:{\"1\":\"wC\"},P:{\"132\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:5,C:\"scrollIntoView\"};\n/data/features/portals.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"2\":\"C K L G M N O P Q R S T\",\"322\":\"Z a b c d e i j k l m n o p q r s t u v f H\",\"450\":\"U V W X Y\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB\",\"194\":\"nB oB pB qB P Q R S T\",\"322\":\"V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"450\":\"U\"},E:{\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB QC RC SC TC rB BC UC sB\",\"194\":\"bB cB dB eB fB gB hB iB jB kB lB\",\"322\":\"h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"2\":\"A B C h rB BC sB\"},L:{\"450\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"2\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"2\":\"2B\"},R:{\"2\":\"AD\"},S:{\"2\":\"BD CD\"}},B:7,C:\"Portals\"};\n%/data/features/input-email-tel-url.js\u0005module.exports={A:{A:{\"1\":\"A B\",\"2\":\"J D E F DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"I\"},E:{\"1\":\"w J D E F A B C K L G JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I IC 0B\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\",\"2\":\"F\"},G:{\"1\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"1\":\"uB I H tC CC uC vC\",\"132\":\"qC rC sC\"},J:{\"1\":\"A\",\"132\":\"D\"},K:{\"1\":\"A B C h rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:1,C:\"Email, telephone & URL input types\"};\n/data/regions/PA.js\u0011module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0.02673,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.00382,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0.00382,\"97\":0.00764,\"98\":0.03054,\"99\":0,\"100\":0.00382,\"101\":0,\"102\":0.00764,\"103\":0.00764,\"104\":0.03054,\"105\":0.00382,\"106\":0.00382,\"107\":0.00382,\"108\":0.02291,\"109\":0.2978,\"110\":0.21763,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0.00382,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0.00382,\"48\":0,\"49\":0.01145,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0.00382,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0.01527,\"69\":0.00382,\"70\":0,\"71\":0,\"72\":0,\"73\":0.01145,\"74\":0.01527,\"75\":0.00764,\"76\":0.01909,\"77\":0.00764,\"78\":0.00382,\"79\":0.04963,\"80\":0.00764,\"81\":0.01909,\"83\":0.01527,\"84\":0.00382,\"85\":0.00382,\"86\":0.00382,\"87\":0.05345,\"88\":0.00764,\"89\":0.00764,\"90\":0.00382,\"91\":0.00764,\"92\":0.01909,\"93\":0.01909,\"94\":0.00382,\"95\":0.01145,\"96\":0.01909,\"97\":0.01909,\"98\":0.01527,\"99\":0.01527,\"100\":0.01909,\"101\":0.02291,\"102\":0.01145,\"103\":0.042,\"104\":0.02291,\"105\":0.04963,\"106\":0.02673,\"107\":0.11836,\"108\":0.25962,\"109\":5.03594,\"110\":3.26439,\"111\":0.00764,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0.00764,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0.00382,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0.00764,\"64\":0,\"65\":0,\"66\":0.00382,\"67\":0.00764,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.084,\"94\":0.59561,\"95\":0.21381,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0.00382,\"17\":0,\"18\":0.00382,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00382,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0.00382,\"104\":0.00382,\"105\":0.00382,\"106\":0.00382,\"107\":0.01527,\"108\":0.03054,\"109\":0.66051,\"110\":0.86669},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0.00382,\"13\":0.00764,\"14\":0.01527,\"15\":0.00382,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0.00382,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0.00382,\"13.1\":0.03436,\"14.1\":0.08018,\"15.1\":0.00764,\"15.2-15.3\":0.00764,\"15.4\":0.01909,\"15.5\":0.08018,\"15.6\":0.16799,\"16.0\":0.02673,\"16.1\":0.08781,\"16.2\":0.22144,\"16.3\":0.19854,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0.00828,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0.01657,\"7.0-7.1\":0.06296,\"8.1-8.4\":0.00663,\"9.0-9.2\":0,\"9.3\":0.08284,\"10.0-10.2\":0,\"10.3\":0.03645,\"11.0-11.2\":0.01325,\"11.3-11.4\":0.00331,\"12.0-12.1\":0.02982,\"12.2-12.5\":0.48377,\"13.0-13.1\":0.03313,\"13.2\":0.00166,\"13.3\":0.02485,\"13.4-13.7\":0.05136,\"14.0-14.4\":0.13751,\"14.5-14.8\":0.38602,\"15.0-15.1\":0.15573,\"15.2-15.3\":0.12094,\"15.4\":0.19881,\"15.5\":0.32969,\"15.6\":1.0189,\"16.0\":1.50599,\"16.1\":3.76911,\"16.2\":4.27773,\"16.3\":2.48512,\"16.4\":0.01491},P:{\"4\":0.23499,\"20\":1.23624,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0.38824,\"8.2\":0,\"9.2\":0.02043,\"10.1\":0,\"11.1-11.2\":0.08173,\"12.0\":0.01022,\"13.0\":0.04087,\"14.0\":0.03065,\"15.0\":0.03065,\"16.0\":0.09195,\"17.0\":0.17369,\"18.0\":0.1839,\"19.0\":1.85947},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.02373,\"4.2-4.3\":0.02373,\"4.4\":0,\"4.4.3-4.4.4\":0.17799},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0.00764,\"9\":0,\"10\":0,\"11\":0.03054,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.11746},H:{\"0\":0.35116},L:{\"0\":63.41959},R:{_:\"0\"},M:{\"0\":0.34619},Q:{\"13.1\":0}};\n/data/regions/SG.js\u0011module.exports={C:{\"2\":0,\"3\":0.00251,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0.00251,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.00754,\"79\":0.00251,\"80\":0.00251,\"81\":0.00251,\"82\":0.00251,\"83\":0.00251,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0.00251,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0.00503,\"103\":0.00251,\"104\":0,\"105\":0.00251,\"106\":0.00251,\"107\":0.00251,\"108\":0.01006,\"109\":0.19861,\"110\":0.12319,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0.00754,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0.00503,\"35\":0,\"36\":0,\"37\":0,\"38\":0.02011,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0.00503,\"48\":0,\"49\":0.00251,\"50\":0,\"51\":0,\"52\":0,\"53\":0.00251,\"54\":0,\"55\":0,\"56\":0.00251,\"57\":0,\"58\":0,\"59\":0,\"60\":0.00754,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0.00251,\"66\":0,\"67\":0.00251,\"68\":0,\"69\":0.00251,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0.00251,\"75\":0,\"76\":0.00251,\"77\":0.00251,\"78\":0.00503,\"79\":0.05028,\"80\":0.00503,\"81\":0.01257,\"83\":0.01508,\"84\":0.0352,\"85\":0.03017,\"86\":0.0352,\"87\":0.0352,\"88\":0,\"89\":0.00251,\"90\":0.00251,\"91\":0.00503,\"92\":0.01006,\"93\":0.00251,\"94\":0.00251,\"95\":0.00251,\"96\":0.00251,\"97\":0.00503,\"98\":0.00754,\"99\":0.00251,\"100\":0.01508,\"101\":0.01006,\"102\":0.01257,\"103\":0.02263,\"104\":0.01508,\"105\":0.01508,\"106\":0.01508,\"107\":0.02514,\"108\":0.24889,\"109\":1.90058,\"110\":1.32488,\"111\":0.00251,\"112\":0.00251,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0.00503,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0.00251,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0.00754,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.02765,\"68\":0,\"69\":0,\"70\":0,\"71\":0.00251,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.00503,\"94\":0.04777,\"95\":0.03268,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0.00251,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0.00251,\"86\":0.00251,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0,\"106\":0.00251,\"107\":0.00251,\"108\":0.01508,\"109\":0.20866,\"110\":0.27654},E:{\"4\":0.00503,\"5\":0,\"6\":0,\"7\":0,\"8\":0.00251,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.00503,\"14\":0.01508,\"15\":0.00251,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0.00251,\"13.1\":0.0176,\"14.1\":0.0352,\"15.1\":0.00754,\"15.2-15.3\":0.00503,\"15.4\":0.0176,\"15.5\":0.03268,\"15.6\":0.16341,\"16.0\":0.02263,\"16.1\":0.06788,\"16.2\":0.16592,\"16.3\":0.11816,\"16.4\":0},G:{\"8\":0,\"3.2\":0.00181,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0.00181,\"7.0-7.1\":0.01266,\"8.1-8.4\":0.00904,\"9.0-9.2\":0.00542,\"9.3\":0.07052,\"10.0-10.2\":0,\"10.3\":0.05605,\"11.0-11.2\":0.01627,\"11.3-11.4\":0.01266,\"12.0-12.1\":0.01627,\"12.2-12.5\":0.27303,\"13.0-13.1\":0.00723,\"13.2\":0.00362,\"13.3\":0.03074,\"13.4-13.7\":0.12657,\"14.0-14.4\":0.1989,\"14.5-14.8\":0.3544,\"15.0-15.1\":0.11211,\"15.2-15.3\":0.11934,\"15.4\":0.15008,\"15.5\":0.29111,\"15.6\":1.24039,\"16.0\":1.65265,\"16.1\":4.65418,\"16.2\":4.76267,\"16.3\":3.16969,\"16.4\":0.01447},P:{\"4\":0.36245,\"20\":1.12876,\"5.0-5.4\":0.03107,\"6.2-6.4\":0,\"7.2-7.4\":0,\"8.2\":0,\"9.2\":0,\"10.1\":0,\"11.1-11.2\":0,\"12.0\":0.01036,\"13.0\":0.02071,\"14.0\":0,\"15.0\":0,\"16.0\":0.02071,\"17.0\":0.02071,\"18.0\":0.04142,\"19.0\":1.4705},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":14.99568,\"4.4\":0,\"4.4.3-4.4.4\":29.99137},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0.06926,\"9\":0.01889,\"10\":0.02204,\"11\":0.22668,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.45665},H:{\"0\":0.41815},L:{\"0\":20.43523},R:{_:\"0\"},M:{\"0\":0.41173},Q:{\"13.1\":0.00749}};\n%/data/features/css-read-only-write.js\u0006\u001fmodule.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C\"},C:{\"1\":\"qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"16\":\"EC\",\"33\":\"0 1 2 3 4 5 6 7 8 9 uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB FC GC\"},D:{\"1\":\"DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"16\":\"I w J D E F A B C K L\",\"132\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB\"},E:{\"1\":\"F A B C K L G MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"16\":\"IC 0B\",\"132\":\"I w J D E JC KC LC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"16\":\"F B QC RC SC TC rB\",\"132\":\"C G M N O x g y z BC UC sB\"},G:{\"1\":\"aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"16\":\"0B VC\",\"132\":\"E CC WC XC YC ZC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"16\":\"qC rC\",\"132\":\"uB I sC tC CC uC vC\"},J:{\"1\":\"A\",\"132\":\"D\"},K:{\"1\":\"h\",\"2\":\"A B rB\",\"132\":\"C BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"33\":\"BD\"}},B:1,C:\"CSS :read-only and :read-write selectors\"};\n/data/features/beacon.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K\"},C:{\"1\":\"8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 EC uB I w J D E F A B C K L G M N O x g y z FC GC\"},D:{\"1\":\"GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB\"},E:{\"1\":\"C K L G rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A B IC 0B JC KC LC MC 1B\"},F:{\"1\":\"3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 F B C G M N O x g y z QC RC SC TC rB BC UC sB\"},G:{\"1\":\"fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:4,C:\"Beacon API\"};\n/data/features/webcodecs.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O P Q R S T U V W X Y Z a b c\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"1\":\"d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c\"},E:{\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B\",\"260\":\"AC PC\"},F:{\"1\":\"Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P QC RC SC TC rB BC UC sB\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B\",\"260\":\"AC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"1\":\"g 7C 8C 9C\",\"2\":\"I xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB\"},Q:{\"2\":\"2B\"},R:{\"1\":\"AD\"},S:{\"2\":\"BD CD\"}},B:5,C:\"WebCodecs API\"};\n/data/features/web-bluetooth.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"2\":\"C K L G M N O\",\"1025\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB\",\"194\":\"MB NB OB PB QB RB SB TB\",\"706\":\"UB VB WB\",\"1025\":\"XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB QC RC SC TC rB BC UC sB\",\"450\":\"DB EB FB GB\",\"706\":\"HB IB JB\",\"1025\":\"KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I qC rC sC tC CC uC vC\",\"1025\":\"H\"},J:{\"2\":\"D A\"},K:{\"2\":\"A B C rB BC sB\",\"1025\":\"h\"},L:{\"1025\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"1025\":\"wC\"},P:{\"1\":\"g yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I xC\"},Q:{\"2\":\"2B\"},R:{\"1025\":\"AD\"},S:{\"2\":\"BD CD\"}},B:7,C:\"Web Bluetooth\"};\n/data/features/testfeat.js\u0005module.exports={A:{A:{\"2\":\"J D E A B DC\",\"16\":\"F\"},B:{\"2\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\",\"16\":\"I w\"},D:{\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"16\":\"B C\"},E:{\"2\":\"I J IC 0B JC\",\"16\":\"w D E F A B C K L G KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC BC UC sB\",\"16\":\"rB\"},G:{\"2\":\"0B VC CC WC XC\",\"16\":\"E YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I H qC rC tC CC uC vC\",\"16\":\"sC\"},J:{\"2\":\"A\",\"16\":\"D\"},K:{\"2\":\"A B C h rB BC sB\"},L:{\"2\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"2\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"2\":\"2B\"},R:{\"2\":\"AD\"},S:{\"2\":\"BD CD\"}},B:7,C:\"Test feature - updated\"};\n/data/features/css-lch-lab.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"H\",\"2\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v\",\"322\":\"f\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f FC GC\",\"194\":\"H yB zB\"},D:{\"1\":\"H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v\",\"322\":\"f\"},E:{\"1\":\"G OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A B C K L IC 0B JC KC LC MC 1B rB sB 2B NC\"},F:{\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\"},G:{\"1\":\"oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"2\":\"A B C h rB BC sB\"},L:{\"1\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"2\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"2\":\"2B\"},R:{\"2\":\"AD\"},S:{\"2\":\"BD CD\"}},B:4,C:\"LCH and Lab color values\"};\n/data/features/input-search.js\u0006\u0002module.exports={A:{A:{\"2\":\"J D E F DC\",\"129\":\"A B\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"129\":\"C K L G M N O\"},C:{\"2\":\"EC uB FC GC\",\"129\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\"},D:{\"1\":\"3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"16\":\"0 1 2 I w J D E F A B C K L y z\",\"129\":\"G M N O x g\"},E:{\"1\":\"J D E F A B C K L G JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"16\":\"I w IC 0B\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e UC sB\",\"2\":\"F QC RC SC TC\",\"16\":\"B rB BC\"},G:{\"1\":\"E WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"16\":\"0B VC CC\"},H:{\"129\":\"pC\"},I:{\"1\":\"H uC vC\",\"16\":\"qC rC\",\"129\":\"uB I sC tC CC\"},J:{\"1\":\"D\",\"129\":\"A\"},K:{\"1\":\"C h\",\"2\":\"A\",\"16\":\"B rB BC\",\"129\":\"sB\"},L:{\"1\":\"H\"},M:{\"129\":\"f\"},N:{\"129\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"129\":\"BD CD\"}},B:1,C:\"Search input type\"};\n#/data/features/css-logical-props.js\u0006]module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\",\"1028\":\"W X\",\"1540\":\"P Q R S T U V\"},C:{\"1\":\"fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC\",\"164\":\"0 1 2 3 4 5 6 7 8 9 uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB FC GC\",\"1540\":\"IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB\"},D:{\"1\":\"Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"292\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB\",\"1028\":\"W X\",\"1540\":\"iB jB kB lB h mB nB oB pB qB P Q R S T U V\"},E:{\"1\":\"G OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"292\":\"I w J D E F A B C IC 0B JC KC LC MC 1B rB\",\"1540\":\"K L sB 2B\",\"5124\":\"NC\"},F:{\"1\":\"oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F B C QC RC SC TC rB BC UC sB\",\"292\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB\",\"1028\":\"mB nB\",\"1540\":\"XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h\"},G:{\"1\":\"oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"292\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC\",\"1540\":\"hC iC jC kC lC mC\",\"5124\":\"nC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"292\":\"uB I qC rC sC tC CC uC vC\"},J:{\"292\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"292\":\"wC\"},P:{\"1\":\"g 6C tB 7C 8C 9C\",\"292\":\"I xC yC zC 0C 1C\",\"1540\":\"1B 2C 3C 4C 5C\"},Q:{\"1540\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"1540\":\"BD\"}},B:5,C:\"CSS Logical Properties\"};\n/data/features/aac.js\u0005module.exports={A:{A:{\"1\":\"F A B\",\"2\":\"J D E DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"2\":\"EC uB I w J D E F A B C K L G M N O x g y FC GC\",\"132\":\"0 1 2 3 4 5 6 7 8 9 z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"I w J D E F\",\"16\":\"A B\"},E:{\"1\":\"I w J D E F A B C K L G JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"IC 0B\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F B C QC RC SC TC rB BC UC sB\"},G:{\"1\":\"E VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"16\":\"0B\"},H:{\"2\":\"pC\"},I:{\"1\":\"uB I H tC CC uC vC\",\"2\":\"qC rC sC\"},J:{\"1\":\"A\",\"2\":\"D\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"132\":\"f\"},N:{\"1\":\"A\",\"2\":\"B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"132\":\"BD CD\"}},B:6,C:\"AAC audio file format\"};\n!/data/features/rest-parameters.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB I w J D E F A B C K L FC GC\"},D:{\"1\":\"OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB\",\"194\":\"LB MB NB\"},E:{\"1\":\"A B C K L G 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F IC 0B JC KC LC MC\"},F:{\"1\":\"BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 F B C G M N O x g y z QC RC SC TC rB BC UC sB\",\"194\":\"8 9 AB\"},G:{\"1\":\"cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:6,C:\"Rest parameters\"};\n/data/regions/GB.js\u0011module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0.00506,\"49\":0,\"50\":0,\"51\":0,\"52\":0.01011,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0.01011,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0.00506,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.01517,\"79\":0,\"80\":0,\"81\":0.00506,\"82\":0,\"83\":0.00506,\"84\":0,\"85\":0,\"86\":0,\"87\":0.01011,\"88\":0,\"89\":0.00506,\"90\":0.01011,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0.02528,\"103\":0.00506,\"104\":0.00506,\"105\":0.01011,\"106\":0.01011,\"107\":0.00506,\"108\":0.04045,\"109\":0.632,\"110\":0.3792,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0.00506,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0.11123,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0.01517,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0.02022,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0.00506,\"66\":0.0455,\"67\":0.00506,\"68\":0,\"69\":0,\"70\":0,\"71\":0.00506,\"72\":0,\"73\":0.00506,\"74\":0.01011,\"75\":0.00506,\"76\":0.01011,\"77\":0.00506,\"78\":0.00506,\"79\":0.02022,\"80\":0.01517,\"81\":0.02022,\"83\":0.04045,\"84\":0.02022,\"85\":0.02022,\"86\":0.02528,\"87\":0.05056,\"88\":0.01011,\"89\":0.01011,\"90\":0.01011,\"91\":0.02022,\"92\":0.02022,\"93\":0.05056,\"94\":0.01011,\"95\":0.00506,\"96\":0.04045,\"97\":0.01011,\"98\":0.01011,\"99\":0.01011,\"100\":0.02022,\"101\":0.04045,\"102\":0.02528,\"103\":0.24774,\"104\":0.0455,\"105\":0.07584,\"106\":0.0809,\"107\":0.12134,\"108\":0.72806,\"109\":7.49299,\"110\":4.56051,\"111\":0.00506,\"112\":0.00506,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0.00506,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.01011,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.03539,\"94\":0.31853,\"95\":0.15168,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0.00506,\"16\":0,\"17\":0.00506,\"18\":0.02022,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00506,\"93\":0,\"94\":0,\"95\":0,\"96\":0.00506,\"97\":0,\"98\":0,\"99\":0.00506,\"100\":0,\"101\":0.00506,\"102\":0,\"103\":0.00506,\"104\":0.00506,\"105\":0.00506,\"106\":0.00506,\"107\":0.06067,\"108\":0.09101,\"109\":1.84038,\"110\":2.4016},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.01517,\"14\":0.07584,\"15\":0.01517,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0.01011,\"10.1\":0,\"11.1\":0.01011,\"12.1\":0.02528,\"13.1\":0.10618,\"14.1\":0.23258,\"15.1\":0.03034,\"15.2-15.3\":0.03034,\"15.4\":0.06573,\"15.5\":0.13146,\"15.6\":0.83424,\"16.0\":0.07078,\"16.1\":0.22752,\"16.2\":0.99098,\"16.3\":0.56627,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0.00399,\"7.0-7.1\":0.01594,\"8.1-8.4\":0.01196,\"9.0-9.2\":0.00399,\"9.3\":0.31488,\"10.0-10.2\":0.00399,\"10.3\":0.26705,\"11.0-11.2\":0.03986,\"11.3-11.4\":0.07972,\"12.0-12.1\":0.0279,\"12.2-12.5\":1.23163,\"13.0-13.1\":0.01594,\"13.2\":0.00797,\"13.3\":0.03986,\"13.4-13.7\":0.12356,\"14.0-14.4\":0.3388,\"14.5-14.8\":1.06422,\"15.0-15.1\":0.19132,\"15.2-15.3\":0.29495,\"15.4\":0.33481,\"15.5\":0.7613,\"15.6\":3.71083,\"16.0\":3.47168,\"16.1\":10.00051,\"16.2\":10.19183,\"16.3\":4.63555,\"16.4\":0.01993},P:{\"4\":0.0742,\"20\":1.35683,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0.0106,\"8.2\":0,\"9.2\":0,\"10.1\":0,\"11.1-11.2\":0.0106,\"12.0\":0.0106,\"13.0\":0.0318,\"14.0\":0.0212,\"15.0\":0.0106,\"16.0\":0.0318,\"17.0\":0.053,\"18.0\":0.0636,\"19.0\":2.07765},I:{\"0\":0,\"3\":0,\"4\":0.24259,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.0099,\"4.2-4.3\":0.07426,\"4.4\":0,\"4.4.3-4.4.4\":0.22773},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0.01074,\"9\":0.01074,\"10\":0.00537,\"11\":0.05909,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.09888},H:{\"0\":0.19191},L:{\"0\":31.384},R:{_:\"0\"},M:{\"0\":0.31147},Q:{\"13.1\":0}};\n/data/features/border-radius.js\u0005module.exports={A:{A:{\"1\":\"F A B\",\"2\":\"J D E DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"257\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB\",\"289\":\"uB FC GC\",\"292\":\"EC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"33\":\"I\"},E:{\"1\":\"w D E F A B C K L G LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"33\":\"I IC 0B\",\"129\":\"J JC KC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e SC TC rB BC UC sB\",\"2\":\"F QC RC\"},G:{\"1\":\"E VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"33\":\"0B\"},H:{\"2\":\"pC\"},I:{\"1\":\"uB I H rC sC tC CC uC vC\",\"33\":\"qC\"},J:{\"1\":\"D A\"},K:{\"1\":\"B C h rB BC sB\",\"2\":\"A\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"257\":\"BD\"}},B:4,C:\"CSS3 Border-radius (rounded corners)\"};\n/data/regions/CX.js\u000eRmodule.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0,\"108\":0,\"109\":0,\"110\":13.26969,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":6.6302,\"108\":0,\"109\":13.26969,\"110\":46.43,\"111\":0,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":6.6302,\"95\":0,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0,\"108\":0,\"109\":0,\"110\":0},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0,\"13.1\":0,\"14.1\":0,\"15.1\":0,\"15.2-15.3\":0,\"15.4\":0,\"15.5\":0,\"15.6\":0,\"16.0\":0,\"16.1\":0,\"16.2\":0,\"16.3\":0,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0,\"10.0-10.2\":0,\"10.3\":0,\"11.0-11.2\":0,\"11.3-11.4\":0,\"12.0-12.1\":0,\"12.2-12.5\":0,\"13.0-13.1\":0,\"13.2\":0,\"13.3\":0,\"13.4-13.7\":0,\"14.0-14.4\":0,\"14.5-14.8\":0,\"15.0-15.1\":0,\"15.2-15.3\":0,\"15.4\":0,\"15.5\":0,\"15.6\":0,\"16.0\":0,\"16.1\":0,\"16.2\":0,\"16.3\":0,\"16.4\":0},P:{\"4\":0,\"20\":0,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0,\"8.2\":0,\"9.2\":0,\"10.1\":0,\"11.1-11.2\":0,\"12.0\":0,\"13.0\":0,\"14.0\":0,\"15.0\":0,\"16.0\":0,\"17.0\":0,\"18.0\":0,\"19.0\":0},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0,\"4.4\":0,\"4.4.3-4.4.4\":0},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0},H:{\"0\":0},L:{\"0\":13.7702},R:{_:\"0\"},M:{\"0\":0},Q:{\"13.1\":0}};\n/data/regions/GF.js\u0011\u0019module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.00408,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0.00408,\"58\":0,\"59\":0,\"60\":0.00408,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.01223,\"79\":0,\"80\":0,\"81\":0.00408,\"82\":0,\"83\":0,\"84\":0,\"85\":0.00408,\"86\":0.00815,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0.00408,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0.00408,\"99\":0.00408,\"100\":0.00408,\"101\":0,\"102\":0.12639,\"103\":0.00408,\"104\":0.00408,\"105\":0,\"106\":0.00815,\"107\":0.00815,\"108\":0.04077,\"109\":1.04371,\"110\":0.81132,\"111\":0.00408,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0.07746,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0.00408,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0.00408,\"70\":0.00408,\"71\":0.00408,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.00408,\"79\":0.00408,\"80\":0,\"81\":0.00408,\"83\":0.00815,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0.00815,\"90\":0,\"91\":0,\"92\":0.17123,\"93\":0,\"94\":0.01223,\"95\":0,\"96\":0.00408,\"97\":0.00408,\"98\":0.00408,\"99\":0.02854,\"100\":0.01223,\"101\":0,\"102\":0.01631,\"103\":0.02039,\"104\":0.03669,\"105\":0.00815,\"106\":0.01631,\"107\":0.01223,\"108\":0.17123,\"109\":4.74971,\"110\":3.5633,\"111\":0,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0.01223,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0.00408,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0.00815,\"90\":0,\"91\":0,\"92\":0,\"93\":0.04077,\"94\":0.13046,\"95\":0.17123,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0.00815,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0.00408,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00408,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0.00408,\"99\":0.00815,\"100\":0.00408,\"101\":0.01223,\"102\":0.02039,\"103\":0.00408,\"104\":0.00408,\"105\":0.00408,\"106\":0,\"107\":0.06523,\"108\":0.06116,\"109\":1.05187,\"110\":1.55741},E:{\"4\":0,\"5\":0.00408,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.01223,\"14\":0.02854,\"15\":0.00408,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0.00408,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0.00408,\"13.1\":0.06116,\"14.1\":0.13862,\"15.1\":0.00815,\"15.2-15.3\":0.02039,\"15.4\":0.01223,\"15.5\":0.17939,\"15.6\":0.23239,\"16.0\":0.03669,\"16.1\":0.1427,\"16.2\":0.39955,\"16.3\":0.2487,\"16.4\":0},G:{\"8\":0.00619,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0.19801,\"10.0-10.2\":0,\"10.3\":0.00619,\"11.0-11.2\":0,\"11.3-11.4\":0.00413,\"12.0-12.1\":0.02475,\"12.2-12.5\":0.20832,\"13.0-13.1\":0.00413,\"13.2\":0,\"13.3\":0.01031,\"13.4-13.7\":0.04331,\"14.0-14.4\":0.23101,\"14.5-14.8\":0.41252,\"15.0-15.1\":0.18357,\"15.2-15.3\":0.24339,\"15.4\":0.39809,\"15.5\":0.51359,\"15.6\":1.84604,\"16.0\":4.29437,\"16.1\":3.49614,\"16.2\":4.18918,\"16.3\":3.11249,\"16.4\":0.04538},P:{\"4\":0.07165,\"20\":1.25891,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0.11259,\"8.2\":0,\"9.2\":0.05118,\"10.1\":0,\"11.1-11.2\":0.08188,\"12.0\":0.01024,\"13.0\":0.08188,\"14.0\":0.09212,\"15.0\":0.01024,\"16.0\":0.21494,\"17.0\":0.03071,\"18.0\":0.3787,\"19.0\":2.60994},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0.01545,\"4.4\":0,\"4.4.3-4.4.4\":0.11201},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.00408,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.02369},H:{\"0\":0.31963},L:{\"0\":56.5524},R:{_:\"0\"},M:{\"0\":0.2843},Q:{\"13.1\":0}};\n/data/features/inline-block.js\u0005module.exports={A:{A:{\"1\":\"E F A B\",\"4\":\"DC\",\"132\":\"J D\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\",\"36\":\"EC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\"},G:{\"1\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"1\":\"pC\"},I:{\"1\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"1\":\"D A\"},K:{\"1\":\"A B C h rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:2,C:\"CSS inline-block\"};\n/data/regions/SE.js\u0011emodule.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0.01065,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.00532,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0.00532,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.01597,\"79\":0.00532,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0.00532,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0.03194,\"103\":0.00532,\"104\":0.00532,\"105\":0.00532,\"106\":0.00532,\"107\":0.01065,\"108\":0.04258,\"109\":0.70264,\"110\":0.43649,\"111\":0.00532,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0.00532,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0.01065,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0.00532,\"64\":0,\"65\":0,\"66\":0.02662,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0.00532,\"75\":0.01065,\"76\":0.00532,\"77\":0.00532,\"78\":0.00532,\"79\":0.02662,\"80\":0.00532,\"81\":0.00532,\"83\":0.01065,\"84\":0.01065,\"85\":0.01597,\"86\":0.02662,\"87\":0.04258,\"88\":0.00532,\"89\":0.03194,\"90\":0.00532,\"91\":0.01065,\"92\":0.01597,\"93\":0.09049,\"94\":0.00532,\"95\":0.00532,\"96\":0.03194,\"97\":0.01597,\"98\":0.01065,\"99\":0.01065,\"100\":0.02129,\"101\":0.09581,\"102\":0.05855,\"103\":0.2076,\"104\":0.02662,\"105\":0.05323,\"106\":0.03726,\"107\":0.24486,\"108\":1.55432,\"109\":9.06507,\"110\":6.16403,\"111\":0.01065,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0.00532,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.00532,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0.00532,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.04258,\"94\":0.33535,\"95\":0.14372,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0.00532,\"18\":0.00532,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0.00532,\"89\":0,\"90\":0.00532,\"91\":0,\"92\":0.00532,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0.00532,\"102\":0,\"103\":0.00532,\"104\":0.00532,\"105\":0.00532,\"106\":0.01065,\"107\":0.02662,\"108\":0.19163,\"109\":1.79917,\"110\":2.42197},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.01065,\"14\":0.06388,\"15\":0.01065,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0.00532,\"10.1\":0,\"11.1\":0.00532,\"12.1\":0.01597,\"13.1\":0.08517,\"14.1\":0.23954,\"15.1\":0.02662,\"15.2-15.3\":0.02662,\"15.4\":0.08517,\"15.5\":0.14904,\"15.6\":0.71861,\"16.0\":0.05855,\"16.1\":0.22889,\"16.2\":0.72393,\"16.3\":0.54827,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0.00418,\"8.1-8.4\":0.00418,\"9.0-9.2\":0.00836,\"9.3\":0.09616,\"10.0-10.2\":0,\"10.3\":0.1296,\"11.0-11.2\":0.02508,\"11.3-11.4\":0.07525,\"12.0-12.1\":0.02927,\"12.2-12.5\":0.63129,\"13.0-13.1\":0.01254,\"13.2\":0.01672,\"13.3\":0.04181,\"13.4-13.7\":0.1296,\"14.0-14.4\":0.39717,\"14.5-14.8\":1.35875,\"15.0-15.1\":0.20486,\"15.2-15.3\":0.34282,\"15.4\":0.39299,\"15.5\":0.94067,\"15.6\":4.03443,\"16.0\":3.69997,\"16.1\":11.20025,\"16.2\":10.12162,\"16.3\":5.50606,\"16.4\":0.01672},P:{\"4\":0.07256,\"20\":1.39936,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0,\"8.2\":0,\"9.2\":0,\"10.1\":0,\"11.1-11.2\":0,\"12.0\":0,\"13.0\":0.01037,\"14.0\":0.02073,\"15.0\":0.01037,\"16.0\":0.04146,\"17.0\":0.04146,\"18.0\":0.06219,\"19.0\":2.03166},I:{\"0\":0,\"3\":0,\"4\":0.02867,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.0041,\"4.2-4.3\":0.02048,\"4.4\":0,\"4.4.3-4.4.4\":0.06143},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.03726,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.01403},H:{\"0\":0.13284},L:{\"0\":26.49896},R:{_:\"0\"},M:{\"0\":0.29933},Q:{\"13.1\":0}};\n/data/regions/PH.js\u0011module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0.00401,\"52\":0.00401,\"53\":0,\"54\":0,\"55\":0,\"56\":0.04006,\"57\":0,\"58\":0,\"59\":0.00401,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0.00401,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0.00401,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0.00401,\"103\":0,\"104\":0.00401,\"105\":0.00401,\"106\":0.00401,\"107\":0.00401,\"108\":0.00801,\"109\":0.23235,\"110\":0.14422,\"111\":0.00401,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0.00401,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0.00401,\"50\":0,\"51\":0,\"52\":0.00401,\"53\":0.00401,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0.02404,\"67\":0,\"68\":0,\"69\":0.00401,\"70\":0.00401,\"71\":0,\"72\":0.00401,\"73\":0.00401,\"74\":0.00801,\"75\":0.00401,\"76\":0.00801,\"77\":0.00401,\"78\":0.00801,\"79\":0.02404,\"80\":0.00401,\"81\":0.00801,\"83\":0.01202,\"84\":0.00401,\"85\":0.00801,\"86\":0.00801,\"87\":0.01602,\"88\":0.01202,\"89\":0.00801,\"90\":0.00801,\"91\":0.02804,\"92\":0.05208,\"93\":0.03205,\"94\":0.00801,\"95\":0.00801,\"96\":0.01202,\"97\":0.01202,\"98\":0.01202,\"99\":0.01602,\"100\":0.01602,\"101\":0.01202,\"102\":0.02003,\"103\":0.11617,\"104\":0.03205,\"105\":0.03605,\"106\":0.03605,\"107\":0.0641,\"108\":0.28042,\"109\":5.76463,\"110\":4.71506,\"111\":0.01202,\"112\":0.00401,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0.00801,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0.00401,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0.00401,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0.00401,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0.00401,\"67\":0.02404,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.02804,\"94\":0.24036,\"95\":0.08413,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0.00401,\"18\":0.00401,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00401,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0.00401,\"106\":0.00401,\"107\":0.00801,\"108\":0.02003,\"109\":0.49274,\"110\":0.79319},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.00401,\"14\":0.00801,\"15\":0.00401,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0.00401,\"12.1\":0.00401,\"13.1\":0.01202,\"14.1\":0.02404,\"15.1\":0.00401,\"15.2-15.3\":0.00401,\"15.4\":0.01202,\"15.5\":0.02003,\"15.6\":0.08413,\"16.0\":0.00801,\"16.1\":0.04006,\"16.2\":0.08413,\"16.3\":0.06009,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0.00527,\"6.0-6.1\":0,\"7.0-7.1\":0.01142,\"8.1-8.4\":0.00176,\"9.0-9.2\":0.00703,\"9.3\":0.0984,\"10.0-10.2\":0.00615,\"10.3\":0.04481,\"11.0-11.2\":0.00791,\"11.3-11.4\":0.04744,\"12.0-12.1\":0.01318,\"12.2-12.5\":0.43664,\"13.0-13.1\":0.00791,\"13.2\":0.00703,\"13.3\":0.02636,\"13.4-13.7\":0.05711,\"14.0-14.4\":0.1555,\"14.5-14.8\":0.28465,\"15.0-15.1\":0.09049,\"15.2-15.3\":0.11597,\"15.4\":0.16868,\"15.5\":0.28729,\"15.6\":0.68966,\"16.0\":0.94971,\"16.1\":1.57524,\"16.2\":1.66046,\"16.3\":1.08237,\"16.4\":0.00439},P:{\"4\":0.18572,\"20\":0.27857,\"5.0-5.4\":0.01032,\"6.2-6.4\":0,\"7.2-7.4\":0.02064,\"8.2\":0,\"9.2\":0,\"10.1\":0,\"11.1-11.2\":0.01032,\"12.0\":0,\"13.0\":0.01032,\"14.0\":0.02064,\"15.0\":0.01032,\"16.0\":0.02064,\"17.0\":0.03095,\"18.0\":0.05159,\"19.0\":0.60873},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0.02364,\"4.4\":0,\"4.4.3-4.4.4\":0.10242},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.79719,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.43756},H:{\"0\":0.45398},L:{\"0\":73.56397},R:{_:\"0\"},M:{\"0\":0.07792},Q:{\"13.1\":0}};\n/data/features/fontface.js\u0005module.exports={A:{A:{\"1\":\"F A B\",\"132\":\"J D E DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\",\"2\":\"EC uB\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"I w J D E F A B C K L G 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"IC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e RC SC TC rB BC UC sB\",\"2\":\"F QC\"},G:{\"1\":\"E CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"260\":\"0B VC\"},H:{\"2\":\"pC\"},I:{\"1\":\"I H tC CC uC vC\",\"2\":\"qC\",\"4\":\"uB rC sC\"},J:{\"1\":\"A\",\"4\":\"D\"},K:{\"1\":\"A B C h rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:2,C:\"@font-face Web fonts\"};\n /data/features/css-line-clamp.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"2\":\"C K L G M\",\"33\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"129\":\"N O\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB FC GC\",\"33\":\"hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\"},D:{\"16\":\"I w J D E F A B C K\",\"33\":\"0 1 2 3 4 5 6 7 8 9 L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"2\":\"I IC 0B\",\"33\":\"w J D E F A B C K L G JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"2\":\"F B C QC RC SC TC rB BC UC sB\",\"33\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\"},G:{\"2\":\"0B VC CC\",\"33\":\"E WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"16\":\"qC rC\",\"33\":\"uB I H sC tC CC uC vC\"},J:{\"33\":\"D A\"},K:{\"2\":\"A B C rB BC sB\",\"33\":\"h\"},L:{\"33\":\"H\"},M:{\"33\":\"f\"},N:{\"2\":\"A B\"},O:{\"33\":\"wC\"},P:{\"33\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"33\":\"2B\"},R:{\"33\":\"AD\"},S:{\"2\":\"BD\",\"33\":\"CD\"}},B:5,C:\"CSS line-clamp\"};\n/data/regions/HN.js\u0011]module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.00496,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0.03469,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.02478,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0.01982,\"103\":0.00496,\"104\":0.00496,\"105\":0.00991,\"106\":0.01487,\"107\":0.00991,\"108\":0.01982,\"109\":0.31223,\"110\":0.22798,\"111\":0.00496,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0.00496,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0.00496,\"48\":0,\"49\":0.00496,\"50\":0,\"51\":0,\"52\":0,\"53\":0.00496,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0.00496,\"66\":0,\"67\":0,\"68\":0.00496,\"69\":0.00496,\"70\":0.00496,\"71\":0,\"72\":0,\"73\":0.00496,\"74\":0.00496,\"75\":0.00496,\"76\":0.01982,\"77\":0.00496,\"78\":0.00496,\"79\":0.18833,\"80\":0.00496,\"81\":0.00496,\"83\":0.00496,\"84\":0.00991,\"85\":0.00991,\"86\":0.00991,\"87\":0.01982,\"88\":0.01982,\"89\":0.00496,\"90\":0.00496,\"91\":0.0446,\"92\":0.03469,\"93\":0.0446,\"94\":0.00496,\"95\":0.00496,\"96\":0.00991,\"97\":0.02974,\"98\":0.00991,\"99\":0.00991,\"100\":0.00991,\"101\":0.00991,\"102\":0.02478,\"103\":0.09416,\"104\":0.01982,\"105\":0.01982,\"106\":0.03965,\"107\":0.06938,\"108\":7.94942,\"109\":5.88773,\"110\":3.99454,\"111\":0.00496,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.02974,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.01487,\"93\":0.07434,\"94\":0.52038,\"95\":0.22798,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0.00496,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0.00496,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00991,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0.00496,\"101\":0,\"102\":0,\"103\":0.00496,\"104\":0.00496,\"105\":0.00496,\"106\":0.00496,\"107\":0.02478,\"108\":0.02478,\"109\":0.70375,\"110\":0.96146},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0.00496,\"15\":0.00991,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0.01487,\"6.1\":0,\"7.1\":0,\"9.1\":0.00496,\"10.1\":0,\"11.1\":0,\"12.1\":0,\"13.1\":0.01982,\"14.1\":0.03469,\"15.1\":0.01982,\"15.2-15.3\":0.00496,\"15.4\":0.02478,\"15.5\":0.02478,\"15.6\":0.12886,\"16.0\":0.02478,\"16.1\":0.07434,\"16.2\":0.21311,\"16.3\":0.11399,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0.00171,\"6.0-6.1\":0.03588,\"7.0-7.1\":0.0188,\"8.1-8.4\":0.00171,\"9.0-9.2\":0,\"9.3\":0.07689,\"10.0-10.2\":0,\"10.3\":0.13158,\"11.0-11.2\":0.01367,\"11.3-11.4\":0.00684,\"12.0-12.1\":0.0188,\"12.2-12.5\":0.44428,\"13.0-13.1\":0.03588,\"13.2\":0.00513,\"13.3\":0.07519,\"13.4-13.7\":0.05639,\"14.0-14.4\":0.20505,\"14.5-14.8\":0.37422,\"15.0-15.1\":0.08373,\"15.2-15.3\":0.176,\"15.4\":0.19138,\"15.5\":0.40498,\"15.6\":1.13121,\"16.0\":1.98388,\"16.1\":3.22103,\"16.2\":4.15402,\"16.3\":2.55803,\"16.4\":0.01025},P:{\"4\":0.27809,\"20\":0.75187,\"5.0-5.4\":0.0206,\"6.2-6.4\":0,\"7.2-7.4\":0.14419,\"8.2\":0,\"9.2\":0.0103,\"10.1\":0,\"11.1-11.2\":0.0721,\"12.0\":0.0103,\"13.0\":0.0412,\"14.0\":0.0309,\"15.0\":0.0412,\"16.0\":0.0618,\"17.0\":0.0721,\"18.0\":0.0927,\"19.0\":1.31835},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0.02664,\"4.4\":0,\"4.4.3-4.4.4\":0.26638},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.01982,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.14628},H:{\"0\":0.23399},L:{\"0\":56.10154},R:{_:\"0\"},M:{\"0\":0.15132},Q:{\"13.1\":0}};\n/data/features/css-table.js\u0005module.exports={A:{A:{\"1\":\"E F A B\",\"2\":\"J D DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\",\"132\":\"EC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\"},G:{\"1\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"1\":\"pC\"},I:{\"1\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"1\":\"D A\"},K:{\"1\":\"A B C h rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:2,C:\"CSS Table display\"};\n/data/regions/NA.js\u0012\u0002module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0.01303,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0.00434,\"49\":0,\"50\":0,\"51\":0,\"52\":0.01303,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0.00434,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.00868,\"79\":0,\"80\":0,\"81\":0,\"82\":0.00434,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0.00434,\"100\":0.00434,\"101\":0.00868,\"102\":0.01303,\"103\":0.00434,\"104\":0.00434,\"105\":0.02605,\"106\":0.00434,\"107\":0.00868,\"108\":0.01303,\"109\":0.55578,\"110\":0.36039,\"111\":0.00434,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0.01303,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0.00434,\"49\":0.01303,\"50\":0,\"51\":0,\"52\":0,\"53\":0.00434,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0.00434,\"67\":0.01303,\"68\":0,\"69\":0.01737,\"70\":0.00434,\"71\":0,\"72\":0,\"73\":0,\"74\":0.00868,\"75\":0.00434,\"76\":0,\"77\":0.00434,\"78\":0.00434,\"79\":0.00434,\"80\":0.00434,\"81\":0.00868,\"83\":0.00434,\"84\":0,\"85\":0.00434,\"86\":0.00868,\"87\":0.01737,\"88\":0.01303,\"89\":0.00434,\"90\":0.01303,\"91\":0.00434,\"92\":0.00868,\"93\":0.00434,\"94\":0.00434,\"95\":0.01303,\"96\":0.00868,\"97\":0.00434,\"98\":0.02171,\"99\":0.00434,\"100\":0.03474,\"101\":0.02171,\"102\":0.01303,\"103\":0.03474,\"104\":0.01737,\"105\":0.01303,\"106\":0.01737,\"107\":0.04342,\"108\":0.18236,\"109\":6.54339,\"110\":3.9903,\"111\":0.00434,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0.01303,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0.00434,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0.00868,\"62\":0,\"63\":0.00868,\"64\":0.00434,\"65\":0,\"66\":0.01737,\"67\":0.20407,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0.00434,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0.00434,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0.01303,\"86\":0.00434,\"87\":0,\"88\":0,\"89\":0.00434,\"90\":0,\"91\":0,\"92\":0,\"93\":0.00868,\"94\":0.1346,\"95\":0.2692,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0.00868,\"13\":0.00434,\"14\":0.00434,\"15\":0.00868,\"16\":0.01737,\"17\":0.00434,\"18\":0.02605,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0.00434,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0.00434,\"91\":0,\"92\":0.06947,\"93\":0,\"94\":0,\"95\":0.00434,\"96\":0.00434,\"97\":0.00434,\"98\":0,\"99\":0.00434,\"100\":0.00434,\"101\":0.04776,\"102\":0.02171,\"103\":0.00434,\"104\":0,\"105\":0.06947,\"106\":0.00868,\"107\":0.0521,\"108\":0.0521,\"109\":1.19405,\"110\":1.41549},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.00434,\"14\":0.01303,\"15\":0,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0.00434,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0.00434,\"13.1\":0.02171,\"14.1\":0.04342,\"15.1\":0.02605,\"15.2-15.3\":0.00868,\"15.4\":0.03474,\"15.5\":0.02171,\"15.6\":0.19105,\"16.0\":0.01303,\"16.1\":0.03908,\"16.2\":0.09987,\"16.3\":0.06947,\"16.4\":0},G:{\"8\":0.00124,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0.0261,\"6.0-6.1\":0.01864,\"7.0-7.1\":0.01367,\"8.1-8.4\":0.00746,\"9.0-9.2\":0,\"9.3\":0.05468,\"10.0-10.2\":0,\"10.3\":0.06586,\"11.0-11.2\":0,\"11.3-11.4\":0,\"12.0-12.1\":0.00497,\"12.2-12.5\":1.2278,\"13.0-13.1\":0.02113,\"13.2\":0,\"13.3\":0.04598,\"13.4-13.7\":0.02983,\"14.0-14.4\":0.44489,\"14.5-14.8\":0.46602,\"15.0-15.1\":0.23984,\"15.2-15.3\":0.25973,\"15.4\":0.12676,\"15.5\":0.24482,\"15.6\":0.69344,\"16.0\":1.15573,\"16.1\":2.34128,\"16.2\":2.1586,\"16.3\":1.38563,\"16.4\":0.00373},P:{\"4\":0.45754,\"20\":0.90492,\"5.0-5.4\":0.01017,\"6.2-6.4\":0.02034,\"7.2-7.4\":0.26436,\"8.2\":0,\"9.2\":0,\"10.1\":0.0305,\"11.1-11.2\":0.01017,\"12.0\":0.01017,\"13.0\":0.02034,\"14.0\":0.05084,\"15.0\":0.02034,\"16.0\":0.09151,\"17.0\":0.24402,\"18.0\":0.12201,\"19.0\":1.8505},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.00215,\"4.2-4.3\":0.0158,\"4.4\":0,\"4.4.3-4.4.4\":0.09981},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.0825,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0.01132,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.58277},H:{\"0\":1.22131},L:{\"0\":63.23517},R:{_:\"0\"},M:{\"0\":0.2829},Q:{\"13.1\":0.01132}};\n/data/regions/TK.js\tOmodule.exports={C:{\"110\":0.11064,_:\"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 111 112 3.5 3.6\"},D:{\"109\":1.46045,\"110\":0.11064,_:\"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 111 112 113\"},F:{_:\"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1\",\"10.0-10.1\":0},B:{\"90\":0.22866,\"92\":0.22866,\"109\":0.11064,\"110\":1.12853,_:\"12 13 14 15 16 17 18 79 80 81 83 84 85 86 87 88 89 91 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108\"},E:{\"4\":0,_:\"0 5 6 7 8 9 10 11 12 13 14 15 3.1 3.2 5.1 6.1 7.1 9.1 10.1 11.1 12.1 13.1 14.1 15.5 15.6 16.0 16.4\",\"15.1\":22.40829,\"15.2-15.3\":27.8149,\"15.4\":1.46045,\"16.1\":0.11064,\"16.2\":1.12853,\"16.3\":0.67859},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0,\"10.0-10.2\":0,\"10.3\":0,\"11.0-11.2\":0,\"11.3-11.4\":0,\"12.0-12.1\":0,\"12.2-12.5\":0,\"13.0-13.1\":0,\"13.2\":0,\"13.3\":0,\"13.4-13.7\":0,\"14.0-14.4\":0,\"14.5-14.8\":0,\"15.0-15.1\":1.34775,\"15.2-15.3\":1.796,\"15.4\":1.45906,\"15.5\":0,\"15.6\":0,\"16.0\":1.01081,\"16.1\":3.25506,\"16.2\":1.01081,\"16.3\":5.16388,\"16.4\":0},P:{\"4\":0.1133,\"20\":0.78283,\"5.0-5.4\":0.09172,\"6.2-6.4\":0.09172,\"7.2-7.4\":0.0824,\"8.2\":0.01016,\"9.2\":0.0103,\"10.1\":0.01019,\"11.1-11.2\":0.0412,\"12.0\":0.07134,\"13.0\":0.34105,\"14.0\":0.0515,\"15.0\":0.0309,\"16.0\":0.0927,\"17.0\":0.0824,\"18.0\":0.1339,\"19.0\":0.45139},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0,\"4.4\":0,\"4.4.3-4.4.4\":0},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{_:\"6 7 8 9 10 11 5.5\"},N:{\"10\":0.03712,\"11\":0.07423},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0},H:{\"0\":0},L:{\"0\":10.40678},R:{_:\"0\"},M:{\"0\":0},Q:{\"13.1\":0}};\n/data/features/currentcolor.js\u0005module.exports={A:{A:{\"1\":\"F A B\",\"2\":\"J D E DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"I w J D E F A B C K L G JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"IC 0B\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\",\"2\":\"F\"},G:{\"1\":\"E VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"16\":\"0B\"},H:{\"1\":\"pC\"},I:{\"1\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"1\":\"D A\"},K:{\"1\":\"A B C h rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:2,C:\"CSS currentColor value\"};\n/data/features/wai-aria.js\u0005module.exports={A:{A:{\"2\":\"J D DC\",\"4\":\"E F A B\"},B:{\"4\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"4\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"4\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"2\":\"IC 0B\",\"4\":\"I w J D E F A B C K L G JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"2\":\"F\",\"4\":\"0 1 2 3 4 5 6 7 8 9 B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\"},G:{\"4\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"4\":\"pC\"},I:{\"2\":\"uB I qC rC sC tC CC\",\"4\":\"H uC vC\"},J:{\"2\":\"D A\"},K:{\"4\":\"A B C h rB BC sB\"},L:{\"4\":\"H\"},M:{\"4\":\"f\"},N:{\"4\":\"A B\"},O:{\"4\":\"wC\"},P:{\"4\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"4\":\"2B\"},R:{\"4\":\"AD\"},S:{\"4\":\"BD CD\"}},B:2,C:\"WAI-ARIA Accessibility features\"};\n/data/features/auxclick.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB FC GC\",\"129\":\"UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\"},D:{\"1\":\"WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB\"},E:{\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB QC RC SC TC rB BC UC sB\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"2\":\"BD CD\"}},B:5,C:\"Auxclick\"};\n/data/features/wav.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\",\"2\":\"EC uB\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"I w J D\"},E:{\"1\":\"I w J D E F A B C K L G JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"IC 0B\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e SC TC rB BC UC sB\",\"2\":\"F QC RC\"},G:{\"1\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"1\":\"uB I H sC tC CC uC vC\",\"16\":\"qC rC\"},J:{\"1\":\"D A\"},K:{\"1\":\"B C h rB BC sB\",\"16\":\"A\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:6,C:\"Wav audio format\"};\n/data/features/css-has.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"r s t u v f H\",\"2\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o FC GC\",\"322\":\"p q r s t u v f H yB zB\"},D:{\"1\":\"r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m\",\"194\":\"n o p q\"},E:{\"1\":\"4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B\"},F:{\"1\":\"a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z QC RC SC TC rB BC UC sB\"},G:{\"1\":\"4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"1\":\"g\",\"2\":\"I xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"2\":\"2B\"},R:{\"2\":\"AD\"},S:{\"2\":\"BD CD\"}},B:5,C:\":has() CSS relational pseudo-class\"};\n\"/data/features/childnode-remove.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"16\":\"C\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB I w J D E F A B C K L G M N O x g y z FC GC\"},D:{\"1\":\"1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 I w J D E F A B C K L G M N O x g y z\"},E:{\"1\":\"D E F A B C K L G KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w IC 0B JC\",\"16\":\"J\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F B C QC RC SC TC rB BC UC sB\"},G:{\"1\":\"E YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC CC WC XC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H uC vC\",\"2\":\"uB I qC rC sC tC CC\"},J:{\"1\":\"A\",\"2\":\"D\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:1,C:\"ChildNode.remove()\"};\n/data/features/css3-cursors.js\u0005module.exports={A:{A:{\"1\":\"F A B\",\"132\":\"J D E DC\"},B:{\"1\":\"L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"260\":\"C K\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"4\":\"EC uB FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"4\":\"I\"},E:{\"1\":\"w J D E F A B C K L G JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"4\":\"I IC 0B\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"260\":\"F B C QC RC SC TC rB BC UC sB\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D\",\"16\":\"A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"2\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"2\":\"BD CD\"}},B:2,C:\"CSS3 Cursors (original values)\"};\n/data/features/dnssec.js\u0005module.exports={A:{A:{\"132\":\"J D E F A B DC\"},B:{\"132\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"132\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"132\":\"8 9 I w AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"388\":\"0 1 2 3 4 5 6 7 J D E F A B C K L G M N O x g y z\"},E:{\"132\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"132\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\"},G:{\"132\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"132\":\"pC\"},I:{\"132\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"132\":\"D A\"},K:{\"132\":\"A B C h rB BC sB\"},L:{\"132\":\"H\"},M:{\"132\":\"f\"},N:{\"132\":\"A B\"},O:{\"132\":\"wC\"},P:{\"132\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"132\":\"2B\"},R:{\"132\":\"AD\"},S:{\"132\":\"BD CD\"}},B:6,C:\"DNSSEC and DANE\"};\n/data/features/dommatrix.js\u0006<module.exports={A:{A:{\"2\":\"J D E F DC\",\"132\":\"A B\"},B:{\"132\":\"C K L G M N O\",\"1028\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z FC GC\",\"1028\":\"iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2564\":\"AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB\",\"3076\":\"QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB\"},D:{\"16\":\"I w J D\",\"132\":\"0 1 2 3 4 5 6 7 8 9 F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB\",\"388\":\"E\",\"1028\":\"wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"16\":\"I IC 0B\",\"132\":\"w J D E F A JC KC LC MC 1B\",\"1028\":\"B C K L G rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"2\":\"F B C QC RC SC TC rB BC UC sB\",\"132\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB\",\"1028\":\"PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\"},G:{\"16\":\"0B VC CC\",\"132\":\"E WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"132\":\"I tC CC uC vC\",\"292\":\"uB qC rC sC\",\"1028\":\"H\"},J:{\"16\":\"D\",\"132\":\"A\"},K:{\"2\":\"A B C rB BC sB\",\"1028\":\"h\"},L:{\"1028\":\"H\"},M:{\"1028\":\"f\"},N:{\"132\":\"A B\"},O:{\"1028\":\"wC\"},P:{\"132\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1028\":\"2B\"},R:{\"1028\":\"AD\"},S:{\"1028\":\"CD\",\"2564\":\"BD\"}},B:4,C:\"DOMMatrix\"};\n /data/features/css3-boxsizing.js\u0005module.exports={A:{A:{\"1\":\"E F A B\",\"8\":\"J D DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"33\":\"0 1 2 3 4 5 EC uB I w J D E F A B C K L G M N O x g y z FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"33\":\"I w J D E F\"},E:{\"1\":\"J D E F A B C K L G JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"33\":\"I w IC 0B\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\",\"2\":\"F\"},G:{\"1\":\"E WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"33\":\"0B VC CC\"},H:{\"1\":\"pC\"},I:{\"1\":\"I H tC CC uC vC\",\"33\":\"uB qC rC sC\"},J:{\"1\":\"A\",\"33\":\"D\"},K:{\"1\":\"A B C h rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:5,C:\"CSS3 Box-sizing\"};\n /data/features/iframe-sandbox.js\u0005module.exports={A:{A:{\"1\":\"A B\",\"2\":\"J D E F DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB I w J D E F A B C K L G M FC GC\",\"4\":\"0 1 2 3 4 N O x g y z\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"w J D E F A B C K L G JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I IC 0B\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F B C QC RC SC TC rB BC UC sB\"},G:{\"1\":\"E CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC\"},H:{\"2\":\"pC\"},I:{\"1\":\"uB I H rC sC tC CC uC vC\",\"2\":\"qC\"},J:{\"1\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:1,C:\"sandbox attribute for iframes\"};\n/data/regions/LT.js\u0011module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0.02167,\"49\":0,\"50\":0,\"51\":0,\"52\":0.05055,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0.00722,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0.00722,\"67\":0,\"68\":0.00722,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0.01444,\"78\":0.00722,\"79\":0.00722,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0.00722,\"89\":0,\"90\":0,\"91\":0.00722,\"92\":0,\"93\":0.00722,\"94\":0.00722,\"95\":0.00722,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0.00722,\"101\":0,\"102\":0.065,\"103\":0.00722,\"104\":0,\"105\":0.00722,\"106\":0.02167,\"107\":0.01444,\"108\":0.05055,\"109\":1.27829,\"110\":0.83775,\"111\":0,\"112\":0.00722,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0.00722,\"42\":0,\"43\":0,\"44\":0.00722,\"45\":0.00722,\"46\":0,\"47\":0,\"48\":0,\"49\":0.02167,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0.00722,\"64\":0.00722,\"65\":0.03611,\"66\":0.00722,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0.00722,\"74\":0.00722,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0.03611,\"80\":0.00722,\"81\":0.00722,\"83\":0.01444,\"84\":0.01444,\"85\":0.02889,\"86\":0.02167,\"87\":0.065,\"88\":0.02167,\"89\":0.00722,\"90\":0.00722,\"91\":0.01444,\"92\":0.07222,\"93\":0.02167,\"94\":0.00722,\"95\":0.02167,\"96\":0.02167,\"97\":0.03611,\"98\":0.01444,\"99\":0.00722,\"100\":0.01444,\"101\":0.02167,\"102\":0.02889,\"103\":0.12277,\"104\":0.02167,\"105\":0.13,\"106\":0.09389,\"107\":0.2311,\"108\":1.19163,\"109\":22.71319,\"110\":13.77958,\"111\":0.00722,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0.00722,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.01444,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0.00722,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0.00722,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0.00722,\"86\":0,\"87\":0.00722,\"88\":0,\"89\":0,\"90\":0,\"91\":0.00722,\"92\":0,\"93\":0.12277,\"94\":1.3144,\"95\":0.67887,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0.00722,\"86\":0,\"87\":0,\"88\":0.00722,\"89\":0,\"90\":0,\"91\":0,\"92\":0.03611,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0.00722,\"98\":0,\"99\":0.00722,\"100\":0.00722,\"101\":0,\"102\":0.00722,\"103\":0,\"104\":0.00722,\"105\":0.10833,\"106\":0.02167,\"107\":0.10111,\"108\":0.28166,\"109\":2.9538,\"110\":3.07657},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.03611,\"12\":0,\"13\":0.01444,\"14\":0.05055,\"15\":0.00722,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0.00722,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0.00722,\"13.1\":0.04333,\"14.1\":0.065,\"15.1\":0.02167,\"15.2-15.3\":0.01444,\"15.4\":0.02167,\"15.5\":0.03611,\"15.6\":0.18777,\"16.0\":0.03611,\"16.1\":0.13722,\"16.2\":0.20944,\"16.3\":0.15888,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0.01344,\"5.0-5.1\":0,\"6.0-6.1\":0.00269,\"7.0-7.1\":0.00403,\"8.1-8.4\":0.00537,\"9.0-9.2\":0.04031,\"9.3\":0.02687,\"10.0-10.2\":0.00134,\"10.3\":0.09003,\"11.0-11.2\":0.00403,\"11.3-11.4\":0.00806,\"12.0-12.1\":0.00672,\"12.2-12.5\":0.11019,\"13.0-13.1\":0.00537,\"13.2\":0.00941,\"13.3\":0.01478,\"13.4-13.7\":0.04972,\"14.0-14.4\":0.17469,\"14.5-14.8\":0.301,\"15.0-15.1\":0.07794,\"15.2-15.3\":0.15319,\"15.4\":0.16528,\"15.5\":0.41118,\"15.6\":1.01587,\"16.0\":1.93364,\"16.1\":3.27469,\"16.2\":3.07716,\"16.3\":1.84495,\"16.4\":0.01344},P:{\"4\":0.05084,\"20\":0.66095,\"5.0-5.4\":0.01017,\"6.2-6.4\":0,\"7.2-7.4\":0,\"8.2\":0,\"9.2\":0.01017,\"10.1\":0,\"11.1-11.2\":0.01017,\"12.0\":0,\"13.0\":0.03051,\"14.0\":0.01017,\"15.0\":0.01017,\"16.0\":0.03051,\"17.0\":0.04067,\"18.0\":0.10169,\"19.0\":1.18972},I:{\"0\":0,\"3\":0.00957,\"4\":0,\"2.1\":0.01435,\"2.2\":0.01435,\"2.3\":0,\"4.1\":0.01435,\"4.2-4.3\":0.02391,\"4.4\":0,\"4.4.3-4.4.4\":0.08848},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0.00812,\"9\":0,\"10\":0,\"11\":0.05687,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.0889},H:{\"0\":0.25774},L:{\"0\":30.42548},R:{_:\"0\"},M:{\"0\":0.1889},Q:{\"13.1\":0.06667}};\n/data/features/svg-smil.js\u0005module.exports={A:{A:{\"2\":\"DC\",\"8\":\"J D E F A B\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"8\":\"C K L G M N O\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"8\":\"EC uB FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"4\":\"I\"},E:{\"1\":\"J D E F A B C K L G KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"8\":\"IC 0B\",\"132\":\"I w JC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\"},G:{\"1\":\"E XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"132\":\"0B VC CC WC\"},H:{\"2\":\"pC\"},I:{\"1\":\"uB I H tC CC uC vC\",\"2\":\"qC rC sC\"},J:{\"1\":\"D A\"},K:{\"1\":\"A B C h rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"8\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:2,C:\"SVG SMIL animation\"};\n(/data/features/prefers-reduced-motion.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"1\":\"cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB FC GC\"},D:{\"1\":\"mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h\"},E:{\"1\":\"B C K L G 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A IC 0B JC KC LC MC\"},F:{\"1\":\"dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB QC RC SC TC rB BC UC sB\"},G:{\"1\":\"dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I xC yC zC 0C 1C 1B\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"2\":\"BD\"}},B:5,C:\"prefers-reduced-motion media query\"};\n!/data/features/x-doc-messaging.js\u0005module.exports={A:{A:{\"2\":\"J D DC\",\"132\":\"E F\",\"260\":\"A B\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\",\"2\":\"EC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"I w J D E F A B C K L G JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"IC 0B\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\",\"2\":\"F\"},G:{\"1\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"1\":\"pC\"},I:{\"1\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"1\":\"D A\"},K:{\"1\":\"A B C h rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"4\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:1,C:\"Cross-document messaging\"};\n/dist/unpacker/features.jsč/*\n * Load this dynamically so that it\n * doesn't appear in the rollup bundle.\n */\n\nmodule.exports.features = require('../../data/features')\n(/data/features/scrollintoviewifneeded.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"16\":\"I w J D E F A B C K L\"},E:{\"1\":\"J D E F A B C K L G JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"16\":\"I w IC 0B\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F B C QC RC SC TC rB BC UC sB\"},G:{\"1\":\"E WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"16\":\"0B VC CC\"},H:{\"2\":\"pC\"},I:{\"1\":\"uB I H sC tC CC uC vC\",\"16\":\"qC rC\"},J:{\"1\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"2\":\"BD CD\"}},B:7,C:\"Element.scrollIntoViewIfNeeded()\"};\n(/data/features/css-background-offsets.js\u0005module.exports={A:{A:{\"1\":\"F A B\",\"2\":\"J D E DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB I w J D E F A B C FC GC\"},D:{\"1\":\"2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 I w J D E F A B C K L G M N O x g y z\"},E:{\"1\":\"D E F A B C K L G LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J IC 0B JC KC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e SC TC rB BC UC sB\",\"2\":\"F QC RC\"},G:{\"1\":\"E YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC CC WC XC\"},H:{\"1\":\"pC\"},I:{\"1\":\"H uC vC\",\"2\":\"uB I qC rC sC tC CC\"},J:{\"1\":\"A\",\"2\":\"D\"},K:{\"1\":\"B C h rB BC sB\",\"2\":\"A\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:4,C:\"CSS background-position edge offsets\"};\n/data/regions/TW.js\u0012\"module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0.01576,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0.00525,\"46\":0.0105,\"47\":0.0105,\"48\":0.00525,\"49\":0.00525,\"50\":0.0105,\"51\":0.00525,\"52\":0.0105,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0.00525,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.00525,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0.00525,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0.00525,\"100\":0,\"101\":0,\"102\":0.00525,\"103\":0,\"104\":0.00525,\"105\":0.00525,\"106\":0.00525,\"107\":0.00525,\"108\":0.02101,\"109\":0.33088,\"110\":0.23634,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.00525,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0.00525,\"31\":0,\"32\":0,\"33\":0,\"34\":0.01576,\"35\":0,\"36\":0,\"37\":0,\"38\":0.06302,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0.07353,\"50\":0.00525,\"51\":0.00525,\"52\":0.00525,\"53\":0.05777,\"54\":0.00525,\"55\":0.0105,\"56\":0.02101,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0.02626,\"62\":0.00525,\"63\":0.00525,\"64\":0.00525,\"65\":0.0105,\"66\":0.00525,\"67\":0.01576,\"68\":0.00525,\"69\":0.00525,\"70\":0.00525,\"71\":0.0105,\"72\":0.00525,\"73\":0.00525,\"74\":0.01576,\"75\":0.00525,\"76\":0.00525,\"77\":0.00525,\"78\":0.00525,\"79\":0.31512,\"80\":0.0105,\"81\":0.02626,\"83\":0.02101,\"84\":0.0105,\"85\":0.0105,\"86\":0.02101,\"87\":0.06302,\"88\":0.00525,\"89\":0.02626,\"90\":0.00525,\"91\":0.0105,\"92\":0.02101,\"93\":0.0105,\"94\":0.00525,\"95\":0.0105,\"96\":0.02101,\"97\":0.03676,\"98\":0.01576,\"99\":0.01576,\"100\":0.02101,\"101\":0.02101,\"102\":0.02626,\"103\":0.09454,\"104\":0.03151,\"105\":0.04202,\"106\":0.05777,\"107\":0.09454,\"108\":0.3834,\"109\":10.25716,\"110\":5.89274,\"111\":0.00525,\"112\":0.00525,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0.01576,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0.0105,\"37\":0.00525,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0.05252,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0.02626,\"95\":0.03676,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0.00525,\"18\":0.0105,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0.00525,\"85\":0.00525,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0.00525,\"102\":0,\"103\":0.00525,\"104\":0.00525,\"105\":0.00525,\"106\":0.00525,\"107\":0.01576,\"108\":0.04202,\"109\":0.9191,\"110\":1.30775},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.03676,\"14\":0.12605,\"15\":0.02101,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0.00525,\"10.1\":0.00525,\"11.1\":0.00525,\"12.1\":0.02626,\"13.1\":0.08928,\"14.1\":0.34138,\"15.1\":0.03676,\"15.2-15.3\":0.03151,\"15.4\":0.13655,\"15.5\":0.26785,\"15.6\":1.0504,\"16.0\":0.03676,\"16.1\":0.20483,\"16.2\":0.7983,\"16.3\":0.32562,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0.04603,\"6.0-6.1\":0.02301,\"7.0-7.1\":0.18027,\"8.1-8.4\":0.06904,\"9.0-9.2\":0.02301,\"9.3\":0.34519,\"10.0-10.2\":0.02685,\"10.3\":0.37587,\"11.0-11.2\":0.04603,\"11.3-11.4\":0.04603,\"12.0-12.1\":0.09589,\"12.2-12.5\":1.08927,\"13.0-13.1\":0.0652,\"13.2\":0.03068,\"13.3\":0.10739,\"13.4-13.7\":0.26081,\"14.0-14.4\":1.43446,\"14.5-14.8\":2.121,\"15.0-15.1\":0.80928,\"15.2-15.3\":0.82462,\"15.4\":1.15831,\"15.5\":1.6991,\"15.6\":4.08092,\"16.0\":3.41355,\"16.1\":7.11859,\"16.2\":7.06873,\"16.3\":3.64751,\"16.4\":0.00384},P:{\"4\":0.68925,\"20\":0.919,\"5.0-5.4\":0.04376,\"6.2-6.4\":0,\"7.2-7.4\":0,\"8.2\":0.01094,\"9.2\":0.03282,\"10.1\":0.01094,\"11.1-11.2\":0.04376,\"12.0\":0.02188,\"13.0\":0.09846,\"14.0\":0.0547,\"15.0\":0.0547,\"16.0\":0.09846,\"17.0\":0.14223,\"18.0\":0.19693,\"19.0\":1.71766},I:{\"0\":0,\"3\":0,\"4\":0.01149,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0.02299,\"4.4\":0,\"4.4.3-4.4.4\":0.0843},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.08928,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.1092},H:{\"0\":0.17081},L:{\"0\":31.75257},R:{_:\"0\"},M:{\"0\":0.09021},Q:{\"13.1\":0.0095}};\n/data/regions/TZ.js\u000e1module.exports={C:{\"33\":0.0019,\"39\":0.00571,\"52\":0.00761,\"66\":0.0019,\"68\":0.00381,\"72\":0.00381,\"78\":0.00571,\"79\":0.0019,\"88\":0.00381,\"89\":0.0019,\"91\":0.03616,\"95\":0.0019,\"99\":0.0019,\"100\":0.0019,\"101\":0.0019,\"102\":0.03045,\"103\":0.00571,\"104\":0.00571,\"105\":0.00381,\"106\":0.00381,\"107\":0.01142,\"108\":0.02284,\"109\":0.81829,\"110\":0.55948,\"111\":0.05328,_:\"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 34 35 36 37 38 40 41 42 43 44 45 46 47 48 49 50 51 53 54 55 56 57 58 59 60 61 62 63 64 65 67 69 70 71 73 74 75 76 77 80 81 82 83 84 85 86 87 90 92 93 94 96 97 98 112 3.5 3.6\"},D:{\"11\":0.00381,\"33\":0.00381,\"38\":0.00381,\"49\":0.00761,\"55\":0.00381,\"58\":0.02664,\"59\":0.00381,\"62\":0.0019,\"63\":0.00381,\"64\":0.0019,\"65\":0.00381,\"67\":0.00381,\"68\":0.00381,\"69\":0.00381,\"70\":0.00381,\"72\":0.00571,\"73\":0.00571,\"74\":0.02093,\"76\":0.0019,\"77\":0.00952,\"78\":0.00381,\"79\":0.05138,\"80\":0.02093,\"81\":0.00571,\"83\":0.00952,\"84\":0.00952,\"85\":0.00571,\"86\":0.00571,\"87\":0.00952,\"88\":0.01903,\"89\":0.01332,\"90\":0.00761,\"91\":0.00952,\"92\":0.01142,\"93\":0.00952,\"94\":0.70221,\"95\":0.02664,\"96\":0.01332,\"97\":0.00952,\"98\":0.01332,\"99\":0.45482,\"100\":0.02474,\"101\":0.01332,\"102\":0.08754,\"103\":0.0609,\"104\":0.01903,\"105\":0.03425,\"106\":0.03045,\"107\":0.0609,\"108\":0.18079,\"109\":5.36836,\"110\":3.09428,\"111\":0.00571,_:\"4 5 6 7 8 9 10 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 34 35 36 37 39 40 41 42 43 44 45 46 47 48 50 51 52 53 54 56 57 60 61 66 71 75 112 113\"},F:{\"46\":0.0019,\"56\":0.0019,\"73\":0.01142,\"79\":0.00761,\"85\":0.00381,\"92\":0.01332,\"93\":0.01332,\"94\":0.24739,\"95\":0.46243,_:\"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 47 48 49 50 51 52 53 54 55 57 58 60 62 63 64 65 66 67 68 69 70 71 72 74 75 76 77 78 80 81 82 83 84 86 87 88 89 90 91 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1\",\"10.0-10.1\":0},B:{\"12\":0.01142,\"13\":0.00571,\"15\":0.00381,\"16\":0.01142,\"17\":0.00381,\"18\":0.0647,\"84\":0.00571,\"89\":0.00571,\"90\":0.00761,\"92\":0.02093,\"99\":0.00381,\"100\":0.0019,\"103\":0.00381,\"104\":0.0019,\"105\":0.00571,\"106\":0.00381,\"107\":0.01522,\"108\":0.03616,\"109\":0.60325,\"110\":0.80116,_:\"14 79 80 81 83 85 86 87 88 91 93 94 95 96 97 98 101 102\"},E:{\"4\":0,\"13\":0.00571,\"14\":0.01522,\"15\":0.00381,_:\"0 5 6 7 8 9 10 11 12 3.1 3.2 5.1 6.1 7.1 9.1 10.1 16.4\",\"11.1\":0.00381,\"12.1\":0.01522,\"13.1\":0.02093,\"14.1\":0.04758,\"15.1\":0.00761,\"15.2-15.3\":0.00381,\"15.4\":0.04948,\"15.5\":0.02664,\"15.6\":0.07231,\"16.0\":0.01332,\"16.1\":0.03806,\"16.2\":0.07422,\"16.3\":0.05519},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0.00662,\"6.0-6.1\":0,\"7.0-7.1\":0.08605,\"8.1-8.4\":0.0006,\"9.0-9.2\":0.0006,\"9.3\":0.02587,\"10.0-10.2\":0.00301,\"10.3\":0.14201,\"11.0-11.2\":0.0012,\"11.3-11.4\":0.00181,\"12.0-12.1\":0.02166,\"12.2-12.5\":0.78225,\"13.0-13.1\":0.00842,\"13.2\":0.01023,\"13.3\":0.04032,\"13.4-13.7\":0.08906,\"14.0-14.4\":0.2425,\"14.5-14.8\":0.278,\"15.0-15.1\":0.1372,\"15.2-15.3\":0.19496,\"15.4\":0.19556,\"15.5\":0.23768,\"15.6\":0.3833,\"16.0\":0.49222,\"16.1\":0.71185,\"16.2\":0.80151,\"16.3\":0.64265,\"16.4\":0.0012},P:{\"4\":0.15458,\"20\":0.22672,\"5.0-5.4\":0.02061,\"6.2-6.4\":0.09028,\"7.2-7.4\":0.23702,\"8.2\":0.02006,\"9.2\":0.05153,\"10.1\":0.02006,\"11.1-11.2\":0.04122,\"12.0\":0.03092,\"13.0\":0.03092,\"14.0\":0.05153,\"15.0\":0.02061,\"16.0\":0.11336,\"17.0\":0.09275,\"18.0\":0.06183,\"19.0\":0.56679},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.00132,\"4.2-4.3\":0.00617,\"4.4\":0,\"4.4.3-4.4.4\":0.05728},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"11\":0.03616,_:\"6 7 8 9 10 5.5\"},N:{\"10\":0,\"11\":0},S:{\"2.5\":1.19026,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0.02429},O:{\"0\":0.92306},H:{\"0\":14.18158},L:{\"0\":59.99825},R:{_:\"0\"},M:{\"0\":0.11336},Q:{\"13.1\":0}};\n,/data/features/same-site-cookie-attribute.js\u0006\u001cmodule.exports={A:{A:{\"2\":\"J D E F A DC\",\"388\":\"B\"},B:{\"1\":\"O P Q R S T U\",\"2\":\"C K L G\",\"129\":\"M N\",\"513\":\"V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB FC GC\"},D:{\"1\":\"SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB\",\"513\":\"Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"G OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A B IC 0B JC KC LC MC 1B rB\",\"2052\":\"L NC\",\"3076\":\"C K sB 2B\"},F:{\"1\":\"GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB QC RC SC TC rB BC UC sB\",\"513\":\"kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\"},G:{\"1\":\"iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC\",\"2052\":\"gC hC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"2\":\"A B C rB BC sB\",\"513\":\"h\"},L:{\"513\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"1\":\"g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I\"},Q:{\"16\":\"2B\"},R:{\"513\":\"AD\"},S:{\"1\":\"CD\",\"2\":\"BD\"}},B:6,C:\"'SameSite' cookie attribute\"};\n&/data/features/js-regexp-lookbehind.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"1\":\"qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB FC GC\"},D:{\"1\":\"bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB\"},E:{\"1\":\"AC PC\",\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B\"},F:{\"1\":\"QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QC RC SC TC rB BC UC sB\"},G:{\"1\":\"AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I xC yC zC\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"2\":\"BD\"}},B:6,C:\"Lookbehind in JS regular expressions\"};\n/data/features/mpeg-dash.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"C K L G M N O\",\"2\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\",\"386\":\"y z\"},D:{\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"2\":\"A B C h rB BC sB\"},L:{\"2\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"2\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"2\":\"2B\"},R:{\"2\":\"AD\"},S:{\"2\":\"BD CD\"}},B:6,C:\"Dynamic Adaptive Streaming over HTTP (MPEG-DASH)\"};\n/data/regions/SN.js\u0011bmodule.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.01001,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0.005,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0.0025,\"69\":0,\"70\":0.00751,\"71\":0,\"72\":0.005,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.01001,\"79\":0,\"80\":0.0025,\"81\":0.0025,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0.005,\"96\":0,\"97\":0,\"98\":0,\"99\":0.0025,\"100\":0,\"101\":0,\"102\":0.01001,\"103\":0.005,\"104\":0.0025,\"105\":0.0025,\"106\":0,\"107\":0.0025,\"108\":0.02002,\"109\":0.27022,\"110\":0.23269,\"111\":0.0025,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.005,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0.0025,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0.0025,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0.0025,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0.00751,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0.0025,\"63\":0,\"64\":0,\"65\":0.005,\"66\":0,\"67\":0,\"68\":0.0025,\"69\":0.0025,\"70\":0,\"71\":0,\"72\":0.0025,\"73\":0,\"74\":0.0025,\"75\":0.005,\"76\":0.005,\"77\":0.0025,\"78\":0,\"79\":0.01001,\"80\":0,\"81\":0.01501,\"83\":0.0025,\"84\":0,\"85\":0.0025,\"86\":0.0025,\"87\":0.01751,\"88\":0.0025,\"89\":0.0025,\"90\":0.00751,\"91\":0.01251,\"92\":0.0025,\"93\":0.00751,\"94\":0.0025,\"95\":0.005,\"96\":0.0025,\"97\":0.0025,\"98\":0.0025,\"99\":0.0025,\"100\":0.0025,\"101\":0.0025,\"102\":0.005,\"103\":0.03503,\"104\":0.0025,\"105\":0.01501,\"106\":0.005,\"107\":0.01001,\"108\":0.05254,\"109\":1.80895,\"110\":1.17594,\"111\":0.0025,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0.00751,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0.0025,\"65\":0,\"66\":0.0025,\"67\":0.00751,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0.005,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0.0025,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0.04754,\"95\":0.09007,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0.0025,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0.0025,\"13\":0,\"14\":0,\"15\":0.01001,\"16\":0,\"17\":0.0025,\"18\":0.01251,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0.0025,\"92\":0.005,\"93\":0.0025,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0.0025,\"101\":0,\"102\":0,\"103\":0,\"104\":0.0025,\"105\":0.005,\"106\":0.00751,\"107\":0.005,\"108\":0.01501,\"109\":0.28773,\"110\":0.3703},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0.005,\"15\":0,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0.0025,\"13.1\":0.01501,\"14.1\":0.01251,\"15.1\":0,\"15.2-15.3\":0.0025,\"15.4\":0.0025,\"15.5\":0.005,\"15.6\":0.03503,\"16.0\":0.01251,\"16.1\":0.00751,\"16.2\":0.04253,\"16.3\":0.03253,\"16.4\":0},G:{\"8\":0.01377,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0.07437,\"8.1-8.4\":0,\"9.0-9.2\":0.03581,\"9.3\":0.11568,\"10.0-10.2\":0.03305,\"10.3\":0.23962,\"11.0-11.2\":0.04958,\"11.3-11.4\":0.01377,\"12.0-12.1\":0.23687,\"12.2-12.5\":2.28883,\"13.0-13.1\":0.06886,\"13.2\":0.03305,\"13.3\":0.15149,\"13.4-13.7\":0.47649,\"14.0-14.4\":1.25321,\"14.5-14.8\":1.86191,\"15.0-15.1\":0.75743,\"15.2-15.3\":0.58942,\"15.4\":0.56188,\"15.5\":1.08244,\"15.6\":1.84538,\"16.0\":1.83712,\"16.1\":3.76513,\"16.2\":3.97722,\"16.3\":2.70748,\"16.4\":0.01928},P:{\"4\":0.48458,\"20\":0.4341,\"5.0-5.4\":0,\"6.2-6.4\":0.02019,\"7.2-7.4\":0.35334,\"8.2\":0,\"9.2\":0.03029,\"10.1\":0.02019,\"11.1-11.2\":0.11105,\"12.0\":0.03029,\"13.0\":0.05048,\"14.0\":0.05048,\"15.0\":0.04038,\"16.0\":0.15143,\"17.0\":0.12114,\"18.0\":0.13124,\"19.0\":1.06001},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.00153,\"4.2-4.3\":0.0044,\"4.4\":0,\"4.4.3-4.4.4\":0.09161},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.02002,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0.06748,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0.0075},O:{\"0\":0.02999},H:{\"0\":0.36913},L:{\"0\":65.90712},R:{_:\"0\"},M:{\"0\":0.12747},Q:{\"13.1\":0}};\n/data/regions/AD.js\u0011module.exports={C:{\"2\":0,\"3\":0,\"4\":0.00399,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0.00399,\"36\":0,\"37\":0.00399,\"38\":0.00399,\"39\":0.00399,\"40\":0.00399,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.00399,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.01595,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0.00399,\"98\":0,\"99\":0,\"100\":0.00399,\"101\":0.04387,\"102\":0.00798,\"103\":0,\"104\":0,\"105\":0.00399,\"106\":0.00399,\"107\":0.01595,\"108\":0.11166,\"109\":0.51445,\"110\":0.27118,\"111\":0,\"112\":0,\"3.5\":0.00399,\"3.6\":0.00798},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.00399,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0.00399,\"22\":0.00399,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0.00399,\"33\":0.00399,\"34\":0,\"35\":0,\"36\":0.00399,\"37\":0,\"38\":0,\"39\":0.00399,\"40\":0.00399,\"41\":0.00399,\"42\":0.00798,\"43\":0.01196,\"44\":0.01994,\"45\":0.00798,\"46\":0.00399,\"47\":0.00399,\"48\":0,\"49\":0.00798,\"50\":0,\"51\":0.00399,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0.00798,\"78\":0,\"79\":0.02393,\"80\":0,\"81\":0.00798,\"83\":0,\"84\":0.00399,\"85\":0,\"86\":0,\"87\":0.00399,\"88\":0,\"89\":0,\"90\":0.04387,\"91\":0.01196,\"92\":0.00399,\"93\":0,\"94\":0,\"95\":0.00399,\"96\":0.00399,\"97\":0.00399,\"98\":0.00399,\"99\":0.00399,\"100\":0.00798,\"101\":0.00399,\"102\":0.00399,\"103\":0.05583,\"104\":0.01196,\"105\":0.29511,\"106\":0.00798,\"107\":0.05184,\"108\":0.13958,\"109\":4.07972,\"110\":2.37685,\"111\":0,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0.00399,\"32\":0.00399,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0.00399,\"89\":0,\"90\":0,\"91\":0.00399,\"92\":0,\"93\":0.02792,\"94\":0.22333,\"95\":0.11166,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0.00399},B:{\"12\":0.00399,\"13\":0,\"14\":0.00399,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0.00399,\"108\":0.01196,\"109\":0.51844,\"110\":0.69391},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0.00399,\"9\":0.01196,\"10\":0,\"11\":0,\"12\":0,\"13\":0.00798,\"14\":0.01994,\"15\":0.00399,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0.00399,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0.01196,\"13.1\":0.10369,\"14.1\":0.12363,\"15.1\":0.06381,\"15.2-15.3\":0.08774,\"15.4\":0.08774,\"15.5\":0.2313,\"15.6\":1.09271,\"16.0\":0.15553,\"16.1\":0.47058,\"16.2\":1.46758,\"16.3\":1.21634,\"16.4\":0.01196},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0.02957,\"8.1-8.4\":0.06506,\"9.0-9.2\":0,\"9.3\":0.13603,\"10.0-10.2\":0,\"10.3\":0.09463,\"11.0-11.2\":0.10646,\"11.3-11.4\":0,\"12.0-12.1\":0.01183,\"12.2-12.5\":0.18335,\"13.0-13.1\":0,\"13.2\":0.01183,\"13.3\":0.01183,\"13.4-13.7\":0.15377,\"14.0-14.4\":0.32529,\"14.5-14.8\":0.43767,\"15.0-15.1\":0.207,\"15.2-15.3\":0.68016,\"15.4\":0.43767,\"15.5\":1.20062,\"15.6\":6.41712,\"16.0\":7.07361,\"16.1\":15.9452,\"16.2\":13.78054,\"16.3\":8.20918,\"16.4\":0.05914},P:{\"4\":0.07161,\"20\":0.43989,\"5.0-5.4\":0,\"6.2-6.4\":0.01023,\"7.2-7.4\":0.02046,\"8.2\":0,\"9.2\":0,\"10.1\":0,\"11.1-11.2\":0,\"12.0\":0,\"13.0\":0,\"14.0\":0,\"15.0\":0,\"16.0\":0,\"17.0\":0.02046,\"18.0\":0.03069,\"19.0\":0.67519},I:{\"0\":0,\"3\":0.00583,\"4\":0.02478,\"2.1\":0.00437,\"2.2\":0.01895,\"2.3\":0.02332,\"4.1\":0.03061,\"4.2-4.3\":0.05394,\"4.4\":0,\"4.4.3-4.4.4\":0.15015},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0.00399,\"7\":0.00399,\"8\":0.05982,\"9\":0.01595,\"10\":0.01196,\"11\":0.03988,\"5.5\":0},N:{\"10\":0.01002,\"11\":0.02004},S:{\"2.5\":0.00601,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0.01804},O:{\"0\":0.02405},H:{\"0\":0.10814},L:{\"0\":25.98917},R:{_:\"0\"},M:{\"0\":0.33066},Q:{\"13.1\":0}};\n/data/features/hashchange.js\u0005module.exports={A:{A:{\"1\":\"E F A B\",\"8\":\"J D DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB GC\",\"8\":\"EC uB FC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"8\":\"I\"},E:{\"1\":\"w J D E F A B C K L G JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"8\":\"I IC 0B\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e TC rB BC UC sB\",\"8\":\"F QC RC SC\"},G:{\"1\":\"E VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B\"},H:{\"2\":\"pC\"},I:{\"1\":\"uB I H rC sC tC CC uC vC\",\"2\":\"qC\"},J:{\"1\":\"D A\"},K:{\"1\":\"B C h rB BC sB\",\"8\":\"A\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:1,C:\"Hashchange event\"};\n&/data/features/css-media-resolution.js\u00068module.exports={A:{A:{\"2\":\"J D E DC\",\"132\":\"F A B\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"1028\":\"C K L G M N O\"},C:{\"1\":\"bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB\",\"260\":\"I w J D E F A B C K L G FC GC\",\"1028\":\"0 1 2 3 4 5 6 7 8 9 M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB\"},D:{\"1\":\"hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"548\":\"0 1 2 3 4 5 I w J D E F A B C K L G M N O x g y z\",\"1028\":\"6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB\"},E:{\"1\":\"tB 7B 8B 9B AC PC\",\"2\":\"IC 0B\",\"548\":\"I w J D E F A B C K L G JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B\"},F:{\"1\":\"WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e sB\",\"2\":\"F\",\"548\":\"B C QC RC SC TC rB BC UC\",\"1028\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB\"},G:{\"1\":\"tB 7B 8B 9B AC\",\"16\":\"0B\",\"548\":\"E VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B\"},H:{\"132\":\"pC\"},I:{\"1\":\"H\",\"16\":\"qC rC\",\"548\":\"uB I sC tC CC\",\"1028\":\"uC vC\"},J:{\"548\":\"D A\"},K:{\"1\":\"h sB\",\"548\":\"A B C rB BC\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"132\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"1028\":\"I xC yC zC 0C 1C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:4,C:\"Media Queries: resolution feature\"};\n/data/features/css-regions.js\u0005module.exports={A:{A:{\"2\":\"J D E F DC\",\"420\":\"A B\"},B:{\"2\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"420\":\"C K L G M N O\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"2\":\"I w J D E F A B C K L CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"36\":\"G M N O\",\"66\":\"0 1 2 3 4 5 6 7 8 9 x g y z AB BB\"},E:{\"2\":\"I w J C K L G IC 0B JC rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"33\":\"D E F A B KC LC MC 1B\"},F:{\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\"},G:{\"2\":\"0B VC CC WC XC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"33\":\"E YC ZC aC bC cC dC eC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"2\":\"A B C h rB BC sB\"},L:{\"2\":\"H\"},M:{\"2\":\"f\"},N:{\"420\":\"A B\"},O:{\"2\":\"wC\"},P:{\"2\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"2\":\"2B\"},R:{\"2\":\"AD\"},S:{\"2\":\"BD CD\"}},B:5,C:\"CSS Regions\"};\n/data/regions/SZ.js\fmodule.exports={C:{\"52\":0.01378,\"60\":0.01149,\"78\":0.0023,\"88\":0.0023,\"91\":0.01608,\"102\":0.01378,\"103\":0.00459,\"105\":0.00459,\"106\":0.0023,\"107\":0.00689,\"109\":0.6868,\"110\":0.19065,\"111\":0.0023,_:\"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 53 54 55 56 57 58 59 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 79 80 81 82 83 84 85 86 87 89 90 92 93 94 95 96 97 98 99 100 101 104 108 112 3.5 3.6\"},D:{\"41\":0.0023,\"59\":0.0023,\"68\":0.00459,\"70\":0.00689,\"71\":0.00459,\"74\":0.00459,\"78\":0.01378,\"79\":0.01608,\"81\":0.05972,\"83\":0.0023,\"85\":0.0023,\"86\":0.0023,\"87\":0.02297,\"88\":0.00459,\"89\":0.00459,\"91\":0.00919,\"92\":0.06202,\"93\":0.00689,\"94\":0.01608,\"95\":0.12174,\"96\":0.0023,\"97\":0.01149,\"99\":0.00919,\"100\":0.00919,\"102\":0.04135,\"103\":0.14701,\"104\":0.01608,\"105\":0.14701,\"106\":0.01149,\"107\":0.03675,\"108\":0.22511,\"109\":5.86424,\"110\":3.16527,\"111\":0.00689,\"112\":0.00459,_:\"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 61 62 63 64 65 66 67 69 72 73 75 76 77 80 84 90 98 101 113\"},F:{\"42\":0.01149,\"79\":0.00689,\"85\":0.00689,\"90\":0.0023,\"94\":0.28483,\"95\":0.37671,_:\"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 80 81 82 83 84 86 87 88 89 91 92 93 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1\",\"10.0-10.1\":0},B:{\"12\":0.02986,\"14\":0.0023,\"15\":0.00919,\"17\":0.00459,\"18\":0.02527,\"84\":0.01149,\"89\":0.00459,\"90\":0.10337,\"92\":0.03446,\"96\":0.00919,\"97\":0.0023,\"98\":0.0023,\"100\":0.0023,\"103\":0.00919,\"104\":0.01608,\"105\":0.01378,\"106\":0.01149,\"107\":0.02986,\"108\":0.02986,\"109\":0.92569,\"110\":0.92569,_:\"13 16 79 80 81 83 85 86 87 88 91 93 94 95 99 101 102\"},E:{\"4\":0,\"14\":0.0023,_:\"0 5 6 7 8 9 10 11 12 13 15 3.1 3.2 6.1 7.1 10.1 11.1 15.4 16.0 16.4\",\"5.1\":0.02756,\"9.1\":0.0023,\"12.1\":0.00689,\"13.1\":0.00919,\"14.1\":0.01838,\"15.1\":0.01149,\"15.2-15.3\":0.00459,\"15.5\":0.01608,\"15.6\":0.05972,\"16.1\":0.11255,\"16.2\":0.0758,\"16.3\":0.04594},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0.00042,\"7.0-7.1\":0.00294,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0.00126,\"10.0-10.2\":0,\"10.3\":0.02145,\"11.0-11.2\":0,\"11.3-11.4\":0.00042,\"12.0-12.1\":0,\"12.2-12.5\":0.22669,\"13.0-13.1\":0.00547,\"13.2\":0.00421,\"13.3\":0.00631,\"13.4-13.7\":0.01682,\"14.0-14.4\":0.06014,\"14.5-14.8\":0.08243,\"15.0-15.1\":0.08201,\"15.2-15.3\":0.50805,\"15.4\":0.06561,\"15.5\":0.19599,\"15.6\":0.51225,\"16.0\":0.20145,\"16.1\":0.85165,\"16.2\":0.77427,\"16.3\":0.33856,\"16.4\":0.00042},P:{\"4\":0.24363,\"20\":0.4974,\"5.0-5.4\":0.03048,\"6.2-6.4\":0.04064,\"7.2-7.4\":1.21813,\"8.2\":0.01016,\"9.2\":0.02068,\"10.1\":0.03048,\"11.1-11.2\":0.0203,\"12.0\":0.0203,\"13.0\":0.05076,\"14.0\":0.09136,\"15.0\":0.10151,\"16.0\":0.11166,\"17.0\":0.07106,\"18.0\":0.06091,\"19.0\":2.14188},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0.00046,\"4.4\":0,\"4.4.3-4.4.4\":0.02264},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"11\":0.02297,_:\"6 7 8 9 10 5.5\"},N:{\"10\":0.03712,\"11\":0.07423},S:{\"2.5\":0.09242,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.73939},H:{\"0\":13.9783},L:{\"0\":60.70481},R:{_:\"0\"},M:{\"0\":0.45442},Q:{\"13.1\":0}};\n /data/features/css-textshadow.js\u0005module.exports={A:{A:{\"2\":\"J D E F DC\",\"129\":\"A B\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"129\":\"C K L G M N O\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\",\"2\":\"EC uB\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"I w J D E F A B C K L G JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"260\":\"IC 0B\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\",\"2\":\"F\"},G:{\"1\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"4\":\"pC\"},I:{\"1\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"1\":\"A\",\"4\":\"D\"},K:{\"1\":\"A B C h rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"129\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:4,C:\"CSS3 Text-shadow\"};\n/data/features/webworkers.js\u0005module.exports={A:{A:{\"1\":\"A B\",\"2\":\"DC\",\"8\":\"J D E F\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\",\"8\":\"EC uB\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"I w J D E F A B C K L G JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"8\":\"IC 0B\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e TC rB BC UC sB\",\"2\":\"F QC\",\"8\":\"RC SC\"},G:{\"1\":\"E WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC CC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H qC uC vC\",\"2\":\"uB I rC sC tC CC\"},J:{\"1\":\"D A\"},K:{\"1\":\"B C h rB BC sB\",\"8\":\"A\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:1,C:\"Web Workers\"};\n/data/regions/CI.js\u0011module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0.00261,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.00261,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.00261,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0.00261,\"73\":0,\"74\":0,\"75\":0.00261,\"76\":0,\"77\":0,\"78\":0.00261,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0.04961,\"101\":0,\"102\":0.01044,\"103\":0,\"104\":0.0235,\"105\":0.00261,\"106\":0.00261,\"107\":0.02089,\"108\":0.02089,\"109\":0.28721,\"110\":0.16188,\"111\":0.00261,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0.00261,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0.00261,\"57\":0,\"58\":0.00261,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0.00261,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0.00522,\"70\":0.00261,\"71\":0.00261,\"72\":0.00261,\"73\":0,\"74\":0.01044,\"75\":0.00261,\"76\":0.00261,\"77\":0.00261,\"78\":0.00522,\"79\":0.01828,\"80\":0.00522,\"81\":0.01044,\"83\":0.01044,\"84\":0.00261,\"85\":0.01044,\"86\":0.00261,\"87\":0.01828,\"88\":0.00522,\"89\":0.00783,\"90\":0.00261,\"91\":0.00783,\"92\":0.01044,\"93\":0.00261,\"94\":0.00522,\"95\":0.04178,\"96\":0.00783,\"97\":0.00261,\"98\":0.00522,\"99\":0.00261,\"100\":0.01306,\"101\":0.00783,\"102\":0.00522,\"103\":0.02872,\"104\":0.02872,\"105\":0.13838,\"106\":0.01828,\"107\":0.03655,\"108\":0.10705,\"109\":2.16452,\"110\":1.0679,\"111\":0.00261,\"112\":0.00261,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0.00261,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0.00261,\"57\":0,\"58\":0,\"60\":0.00783,\"62\":0,\"63\":0.02089,\"64\":0.00261,\"65\":0.00261,\"66\":0.01044,\"67\":0.03133,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0.00261,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0.00522,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0.047,\"95\":0.07311,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0.00261,\"13\":0,\"14\":0,\"15\":0.00522,\"16\":0,\"17\":0,\"18\":0.01044,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0.00261,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00522,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0.00261,\"106\":0.00261,\"107\":0.00522,\"108\":0.0235,\"109\":0.25327,\"110\":0.31854},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0.02611,\"15\":0.00261,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0.00261,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0,\"13.1\":0.01044,\"14.1\":0.01306,\"15.1\":0,\"15.2-15.3\":0,\"15.4\":0.00261,\"15.5\":0.00522,\"15.6\":0.01828,\"16.0\":0.00522,\"16.1\":0.00783,\"16.2\":0.02611,\"16.3\":0.02089,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0.00797,\"6.0-6.1\":0,\"7.0-7.1\":0.01593,\"8.1-8.4\":0.01062,\"9.0-9.2\":0,\"9.3\":0.04779,\"10.0-10.2\":0,\"10.3\":0.36642,\"11.0-11.2\":0.06107,\"11.3-11.4\":0.02921,\"12.0-12.1\":0.41156,\"12.2-12.5\":6.52128,\"13.0-13.1\":0.01328,\"13.2\":0.01593,\"13.3\":0.1248,\"13.4-13.7\":0.23101,\"14.0-14.4\":0.89747,\"14.5-14.8\":1.10724,\"15.0-15.1\":0.6585,\"15.2-15.3\":0.6346,\"15.4\":0.65319,\"15.5\":0.72223,\"15.6\":1.13113,\"16.0\":2.18261,\"16.1\":2.50389,\"16.2\":2.77207,\"16.3\":2.56231,\"16.4\":0.02921},P:{\"4\":0.10273,\"20\":0.19518,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0.17463,\"8.2\":0,\"9.2\":0.03082,\"10.1\":0,\"11.1-11.2\":0.02055,\"12.0\":0,\"13.0\":0.03082,\"14.0\":0.08218,\"15.0\":0.09245,\"16.0\":0.12327,\"17.0\":0.03082,\"18.0\":0.14382,\"19.0\":0.65744},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.00396,\"4.2-4.3\":0.00712,\"4.4\":0,\"4.4.3-4.4.4\":0.06808},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.00261,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0.03695,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0.02956},O:{\"0\":0.15517},H:{\"0\":1.2312},L:{\"0\":65.7265},R:{_:\"0\"},M:{\"0\":0.64284},Q:{\"13.1\":0.00739}};\n/data/regions/BY.js\u0012\u0002module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.08736,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0.0046,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0.0046,\"69\":0,\"70\":0,\"71\":0,\"72\":0.0046,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.0092,\"79\":0.0046,\"80\":0.0046,\"81\":0.0046,\"82\":0.0046,\"83\":0.0046,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0.01379,\"92\":0,\"93\":0,\"94\":0,\"95\":0.01839,\"96\":0.01839,\"97\":0.0046,\"98\":0,\"99\":0.0092,\"100\":0,\"101\":0.01379,\"102\":0.02759,\"103\":0.0046,\"104\":0.0092,\"105\":0.01379,\"106\":0.0092,\"107\":0.01379,\"108\":0.02759,\"109\":0.86442,\"110\":0.42302,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0.0092,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0.02759,\"50\":0,\"51\":0.0046,\"52\":0,\"53\":0.02759,\"54\":0,\"55\":0.0046,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0.0046,\"62\":0,\"63\":0,\"64\":0,\"65\":0.03219,\"66\":0,\"67\":0.0046,\"68\":0,\"69\":0.0046,\"70\":0.0046,\"71\":0.0046,\"72\":0,\"73\":0,\"74\":0.0046,\"75\":0.0046,\"76\":0.0046,\"77\":0.01379,\"78\":0.0046,\"79\":0.02759,\"80\":0.0046,\"81\":0.03219,\"83\":0.02299,\"84\":0.03219,\"85\":0.04598,\"86\":0.03219,\"87\":0.02759,\"88\":0.02299,\"89\":0.01839,\"90\":0.0092,\"91\":0.01379,\"92\":0.03219,\"93\":0.03219,\"94\":0.0092,\"95\":0.0092,\"96\":0.0092,\"97\":0.01379,\"98\":0.0092,\"99\":0.02299,\"100\":0.03678,\"101\":0.03219,\"102\":0.07817,\"103\":0.02759,\"104\":0.02759,\"105\":0.03219,\"106\":0.06437,\"107\":0.09196,\"108\":0.26209,\"109\":6.35903,\"110\":3.30136,\"111\":0.01379,\"112\":0.0046,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0.02759,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0.0046,\"54\":0,\"55\":0,\"56\":0.0046,\"57\":0,\"58\":0,\"60\":0.0046,\"62\":0,\"63\":0,\"64\":0.0046,\"65\":0,\"66\":0.01379,\"67\":0.03678,\"68\":0,\"69\":0.0046,\"70\":0,\"71\":0,\"72\":0.0046,\"73\":0.0046,\"74\":0.0092,\"75\":0.0046,\"76\":0,\"77\":0,\"78\":0,\"79\":0.01839,\"80\":0.0046,\"81\":0.0092,\"82\":0.01379,\"83\":0.01839,\"84\":0.0092,\"85\":0.07357,\"86\":0.01839,\"87\":0.0092,\"88\":0,\"89\":0.02759,\"90\":0.0046,\"91\":0.0046,\"92\":0.01839,\"93\":0.05518,\"94\":1.00696,\"95\":1.23686,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0.0092},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0.0046,\"16\":0,\"17\":0,\"18\":0.01379,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0.0046,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.0046,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0.0046,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0.01379,\"108\":0.0092,\"109\":0.37244,\"110\":0.44601},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0.02759,\"15\":0.0046,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0.0092,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0.01379,\"13.1\":0.02299,\"14.1\":0.03219,\"15.1\":0.0092,\"15.2-15.3\":0.01839,\"15.4\":0.04138,\"15.5\":0.09196,\"15.6\":0.44141,\"16.0\":0.08736,\"16.1\":0.16553,\"16.2\":0.51038,\"16.3\":0.43681,\"16.4\":0.0046},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0,\"8.1-8.4\":0,\"9.0-9.2\":0.00541,\"9.3\":0.03788,\"10.0-10.2\":0.01082,\"10.3\":0.02976,\"11.0-11.2\":0.0514,\"11.3-11.4\":0.00271,\"12.0-12.1\":0.02435,\"12.2-12.5\":0.26514,\"13.0-13.1\":0.00812,\"13.2\":0.01082,\"13.3\":0.04329,\"13.4-13.7\":0.11093,\"14.0-14.4\":0.27596,\"14.5-14.8\":0.63038,\"15.0-15.1\":0.2435,\"15.2-15.3\":0.28408,\"15.4\":0.25973,\"15.5\":0.6872,\"15.6\":2.13194,\"16.0\":3.17897,\"16.1\":6.32548,\"16.2\":5.74109,\"16.3\":4.28552,\"16.4\":0.01894},P:{\"4\":0.0908,\"20\":0.26231,\"5.0-5.4\":0.01009,\"6.2-6.4\":0.2724,\"7.2-7.4\":0,\"8.2\":0,\"9.2\":0,\"10.1\":0,\"11.1-11.2\":0.01009,\"12.0\":0,\"13.0\":0.01009,\"14.0\":0.02018,\"15.0\":0.01009,\"16.0\":0.02018,\"17.0\":0.02018,\"18.0\":0.03027,\"19.0\":0.61543},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.002,\"4.2-4.3\":0.01596,\"4.4\":0,\"4.4.3-4.4.4\":0.07583},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0.0092,\"9\":0,\"10\":0,\"11\":0.11495,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0.0054,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.22148},H:{\"0\":1.08934},L:{\"0\":47.63517},R:{_:\"0\"},M:{\"0\":0.09724},Q:{\"13.1\":0}};\n/data/features/ruby.js\u0005module.exports={A:{A:{\"4\":\"J D E F A B DC\"},B:{\"4\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"8\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FC GC\"},D:{\"4\":\"0 1 2 3 4 5 6 7 8 9 w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"8\":\"I\"},E:{\"4\":\"w J D E F A B C K L G JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"8\":\"I IC 0B\"},F:{\"4\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"8\":\"F B C QC RC SC TC rB BC UC sB\"},G:{\"4\":\"E WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"8\":\"0B VC CC\"},H:{\"8\":\"pC\"},I:{\"4\":\"uB I H tC CC uC vC\",\"8\":\"qC rC sC\"},J:{\"4\":\"A\",\"8\":\"D\"},K:{\"4\":\"h\",\"8\":\"A B C rB BC sB\"},L:{\"4\":\"H\"},M:{\"1\":\"f\"},N:{\"4\":\"A B\"},O:{\"4\":\"wC\"},P:{\"4\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"4\":\"2B\"},R:{\"4\":\"AD\"},S:{\"1\":\"BD CD\"}},B:1,C:\"Ruby annotation\"};\n/data/features/css-variables.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L\",\"260\":\"G\"},C:{\"1\":\"8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 EC uB I w J D E F A B C K L G M N O x g y z FC GC\"},D:{\"1\":\"QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB\",\"194\":\"PB\"},E:{\"1\":\"A B C K L G 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F IC 0B JC KC LC\",\"260\":\"MC\"},F:{\"1\":\"DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB QC RC SC TC rB BC UC sB\",\"194\":\"CB\"},G:{\"1\":\"cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC\",\"260\":\"bC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:4,C:\"CSS Variables (Custom Properties)\"};\n/data/regions/MV.js\u0010module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0.00551,\"65\":0,\"66\":0,\"67\":0,\"68\":0.00275,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0.00275,\"99\":0.00275,\"100\":0,\"101\":0.00275,\"102\":0.00275,\"103\":0.00275,\"104\":0,\"105\":0,\"106\":0.00275,\"107\":0.00275,\"108\":0.00826,\"109\":0.2285,\"110\":0.12939,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0.00275,\"50\":0,\"51\":0.00275,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0.00275,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0.00275,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0.00551,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0.00275,\"80\":0,\"81\":0.00275,\"83\":0.01101,\"84\":0,\"85\":0.00826,\"86\":0.00551,\"87\":0.01101,\"88\":0.00275,\"89\":0,\"90\":0,\"91\":0.00275,\"92\":0.00275,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0.00275,\"98\":0,\"99\":0.00275,\"100\":0.00275,\"101\":0.00275,\"102\":0.00275,\"103\":0.01377,\"104\":0.00551,\"105\":0.00275,\"106\":0.00826,\"107\":0.01377,\"108\":0.1872,\"109\":3.03931,\"110\":2.01795,\"111\":0.00551,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0.00275,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0.00275,\"67\":0.02202,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0.00275,\"74\":0.00275,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.00826,\"94\":0.13214,\"95\":0.05781,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0.00275,\"17\":0,\"18\":0.00275,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0.00275,\"88\":0,\"89\":0.00275,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0.00275,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0.00275,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0.00551,\"108\":0.01652,\"109\":0.19271,\"110\":0.2753},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0.00551,\"15\":0.00551,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0.00275,\"13.1\":0.00826,\"14.1\":0.03854,\"15.1\":0.00275,\"15.2-15.3\":0.01377,\"15.4\":0.01101,\"15.5\":0.01927,\"15.6\":0.09636,\"16.0\":0.02753,\"16.1\":0.07433,\"16.2\":0.12113,\"16.3\":0.06883,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0.00954,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0.01591,\"10.0-10.2\":0,\"10.3\":0.01273,\"11.0-11.2\":0,\"11.3-11.4\":0.00318,\"12.0-12.1\":0,\"12.2-12.5\":0.28952,\"13.0-13.1\":0.00318,\"13.2\":0,\"13.3\":0.01273,\"13.4-13.7\":0.0859,\"14.0-14.4\":0.24498,\"14.5-14.8\":0.45179,\"15.0-15.1\":0.13681,\"15.2-15.3\":0.27362,\"15.4\":0.32452,\"15.5\":0.69041,\"15.6\":1.91214,\"16.0\":4.5274,\"16.1\":6.87224,\"16.2\":8.10033,\"16.3\":6.18819,\"16.4\":0.00954},P:{\"4\":0.03084,\"20\":0.44202,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0.03084,\"8.2\":0,\"9.2\":0,\"10.1\":0,\"11.1-11.2\":0.01028,\"12.0\":0,\"13.0\":0.01028,\"14.0\":0.01028,\"15.0\":0.01028,\"16.0\":0.02056,\"17.0\":0.02056,\"18.0\":0.03084,\"19.0\":0.83263},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0,\"4.4\":0,\"4.4.3-4.4.4\":0.09826},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.00275,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.67397},H:{\"0\":0.53516},L:{\"0\":59.02656},R:{_:\"0\"},M:{\"0\":0.14494},Q:{\"13.1\":0}};\n)/data/features/upgradeinsecurerequests.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M\"},C:{\"1\":\"JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB FC GC\"},D:{\"1\":\"KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB\"},E:{\"1\":\"B C K L G 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A IC 0B JC KC LC MC\"},F:{\"1\":\"7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 F B C G M N O x g y z QC RC SC TC rB BC UC sB\"},G:{\"1\":\"dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:4,C:\"Upgrade Insecure Requests\"};\n/data/features/promises.js\u0005module.exports={A:{A:{\"8\":\"J D E F A B DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"4\":\"4 5\",\"8\":\"0 1 2 3 EC uB I w J D E F A B C K L G M N O x g y z FC GC\"},D:{\"1\":\"AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"4\":\"9\",\"8\":\"0 1 2 3 4 5 6 7 8 I w J D E F A B C K L G M N O x g y z\"},E:{\"1\":\"E F A B C K L G LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"8\":\"I w J D IC 0B JC KC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"4\":\"x\",\"8\":\"F B C G M N O QC RC SC TC rB BC UC sB\"},G:{\"1\":\"E ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"8\":\"0B VC CC WC XC YC\"},H:{\"8\":\"pC\"},I:{\"1\":\"H vC\",\"8\":\"uB I qC rC sC tC CC uC\"},J:{\"8\":\"D A\"},K:{\"1\":\"h\",\"8\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"8\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:6,C:\"Promises\"};\n/data/features/progress.js\u0005module.exports={A:{A:{\"1\":\"A B\",\"2\":\"J D E F DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB I w FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"I w J D\"},E:{\"1\":\"J D E F A B C K L G KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w IC 0B JC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e rB BC UC sB\",\"2\":\"F QC RC SC TC\"},G:{\"1\":\"E ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC CC WC XC\",\"132\":\"YC\"},H:{\"1\":\"pC\"},I:{\"1\":\"H uC vC\",\"2\":\"uB I qC rC sC tC CC\"},J:{\"1\":\"D A\"},K:{\"1\":\"B C h rB BC sB\",\"2\":\"A\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:1,C:\"progress element\"};\n/data/regions/MQ.js\u0010module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.00823,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.00823,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0.00412,\"101\":0,\"102\":0.0247,\"103\":0.00412,\"104\":0.00412,\"105\":0.00412,\"106\":0.00412,\"107\":0.00412,\"108\":0.03294,\"109\":1.2104,\"110\":0.63814,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0.00412,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0.00412,\"75\":0,\"76\":0,\"77\":0.00823,\"78\":0,\"79\":0.00412,\"80\":0.00412,\"81\":0,\"83\":0.00412,\"84\":0,\"85\":0,\"86\":0,\"87\":0.01235,\"88\":0,\"89\":0.00412,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0.03705,\"96\":0,\"97\":0,\"98\":0,\"99\":0.00412,\"100\":0.00823,\"101\":0,\"102\":0.00823,\"103\":0.0247,\"104\":0.00412,\"105\":0.03294,\"106\":0.01235,\"107\":0.04117,\"108\":0.1935,\"109\":4.63574,\"110\":2.99718,\"111\":0,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0.00823,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0.00412,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.00412,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0.00412,\"90\":0,\"91\":0,\"92\":0,\"93\":0.05764,\"94\":0.40347,\"95\":0.1935,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0.00412,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00412,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0.01235,\"103\":0,\"104\":0.0247,\"105\":0.00412,\"106\":0.00412,\"107\":0.02882,\"108\":0.03294,\"109\":1.09101,\"110\":1.42037},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.00823,\"14\":0.03705,\"15\":0.0247,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0.03294,\"12.1\":0.00823,\"13.1\":0.07822,\"14.1\":0.11116,\"15.1\":0.02882,\"15.2-15.3\":0.09881,\"15.4\":0.28407,\"15.5\":0.12351,\"15.6\":0.54344,\"16.0\":0.04117,\"16.1\":0.12763,\"16.2\":0.63402,\"16.3\":0.53933,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0.04066,\"10.0-10.2\":0,\"10.3\":0.05808,\"11.0-11.2\":0,\"11.3-11.4\":0.37172,\"12.0-12.1\":0.0029,\"12.2-12.5\":0.27879,\"13.0-13.1\":0,\"13.2\":0.0029,\"13.3\":0.04646,\"13.4-13.7\":0.02614,\"14.0-14.4\":0.32816,\"14.5-14.8\":0.44432,\"15.0-15.1\":0.212,\"15.2-15.3\":0.20909,\"15.4\":0.46755,\"15.5\":0.92929,\"15.6\":2.47134,\"16.0\":4.66099,\"16.1\":5.43928,\"16.2\":6.56895,\"16.3\":5.28536,\"16.4\":0.02614},P:{\"4\":0.02084,\"20\":1.28152,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0.03126,\"8.2\":0,\"9.2\":0.01042,\"10.1\":0,\"11.1-11.2\":0.04168,\"12.0\":0.01042,\"13.0\":0,\"14.0\":0.36466,\"15.0\":0.02084,\"16.0\":0.15628,\"17.0\":0.03126,\"18.0\":0.13544,\"19.0\":2.85476},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0,\"4.4\":0,\"4.4.3-4.4.4\":0.13293},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.01235,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.01765},H:{\"0\":0.06684},L:{\"0\":48.25572},R:{_:\"0\"},M:{\"0\":0.25297},Q:{\"13.1\":0}};\n/data/features/es6-class.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C\"},C:{\"1\":\"MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB FC GC\"},D:{\"1\":\"QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB\",\"132\":\"JB KB LB MB NB OB PB\"},E:{\"1\":\"F A B C K L G MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E IC 0B JC KC LC\"},F:{\"1\":\"DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 F B C G M N O x g y z QC RC SC TC rB BC UC sB\",\"132\":\"6 7 8 9 AB BB CB\"},G:{\"1\":\"aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:6,C:\"ES6 classes\"};\n!/data/features/async-functions.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K\",\"194\":\"L\"},C:{\"1\":\"TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB FC GC\"},D:{\"1\":\"WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB\"},E:{\"1\":\"B C K L G rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A IC 0B JC KC LC MC\",\"514\":\"1B\"},F:{\"1\":\"JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB QC RC SC TC rB BC UC sB\"},G:{\"1\":\"eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC\",\"514\":\"dC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I xC\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"2\":\"BD\"}},B:6,C:\"Async functions\"};\n/data/features/selection-api.js\u0006\u0005module.exports={A:{A:{\"1\":\"F A B\",\"16\":\"DC\",\"260\":\"J D E\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"132\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB FC GC\",\"2180\":\"KB LB MB NB OB PB QB RB SB\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"16\":\"I w J D E F A B C K L\"},E:{\"1\":\"J D E F A B C K L G JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"16\":\"I w IC 0B\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"132\":\"F B C QC RC SC TC rB BC UC sB\"},G:{\"16\":\"CC\",\"132\":\"0B VC\",\"516\":\"E WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H uC vC\",\"16\":\"uB I qC rC sC tC\",\"1025\":\"CC\"},J:{\"1\":\"A\",\"16\":\"D\"},K:{\"1\":\"h\",\"16\":\"A B C rB BC\",\"132\":\"sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"B\",\"16\":\"A\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"2180\":\"BD\"}},B:5,C:\"Selection API\"};\n/data/regions/IN.js\u0011Kmodule.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.00481,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0.00241,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0.00481,\"103\":0.00241,\"104\":0.00241,\"105\":0.00241,\"106\":0.00241,\"107\":0.00241,\"108\":0.00962,\"109\":0.17557,\"110\":0.11785,\"111\":0.00481,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0.00241,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0.00241,\"69\":0.00241,\"70\":0.00481,\"71\":0.00481,\"72\":0.00241,\"73\":0,\"74\":0.00962,\"75\":0,\"76\":0,\"77\":0.00241,\"78\":0.00241,\"79\":0.00481,\"80\":0.00722,\"81\":0.00481,\"83\":0.00722,\"84\":0.00241,\"85\":0.00241,\"86\":0.00481,\"87\":0.00962,\"88\":0.00241,\"89\":0.00241,\"90\":0.00241,\"91\":0.00481,\"92\":0.00481,\"93\":0.00241,\"94\":0.00962,\"95\":0.00481,\"96\":0.00722,\"97\":0.00722,\"98\":0.00481,\"99\":0.00962,\"100\":0.00481,\"101\":0.00722,\"102\":0.00722,\"103\":0.02646,\"104\":0.01924,\"105\":0.01684,\"106\":0.01924,\"107\":0.03608,\"108\":0.10823,\"109\":2.68398,\"110\":1.21212,\"111\":0.00241,\"112\":0.00241,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0.00241,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0.00241,\"56\":0,\"57\":0,\"58\":0.00241,\"60\":0.00241,\"62\":0,\"63\":0.00481,\"64\":0.00481,\"65\":0.00241,\"66\":0.00481,\"67\":0.11304,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0.00241,\"73\":0.00962,\"74\":0.00722,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0.02165,\"95\":0.02405,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0.00241,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0.00241,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00241,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0.00241,\"108\":0.00722,\"109\":0.10582,\"110\":0.12266},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0.00241,\"15\":0,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0,\"13.1\":0.00241,\"14.1\":0.00241,\"15.1\":0,\"15.2-15.3\":0,\"15.4\":0.00241,\"15.5\":0.00241,\"15.6\":0.00962,\"16.0\":0.00241,\"16.1\":0.00722,\"16.2\":0.01203,\"16.3\":0.01203,\"16.4\":0},G:{\"8\":0.00088,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0.00088,\"7.0-7.1\":0.00673,\"8.1-8.4\":0,\"9.0-9.2\":0.00029,\"9.3\":0.00439,\"10.0-10.2\":0.00059,\"10.3\":0.0041,\"11.0-11.2\":0.00585,\"11.3-11.4\":0.00088,\"12.0-12.1\":0.0041,\"12.2-12.5\":0.06903,\"13.0-13.1\":0.00234,\"13.2\":0.00351,\"13.3\":0.00439,\"13.4-13.7\":0.01229,\"14.0-14.4\":0.04768,\"14.5-14.8\":0.06786,\"15.0-15.1\":0.04622,\"15.2-15.3\":0.03861,\"15.4\":0.03452,\"15.5\":0.07137,\"15.6\":0.13777,\"16.0\":0.23312,\"16.1\":0.42559,\"16.2\":0.69557,\"16.3\":0.78625,\"16.4\":0.0041},P:{\"4\":0.08944,\"20\":0.13913,\"5.0-5.4\":0,\"6.2-6.4\":0.00994,\"7.2-7.4\":0.05963,\"8.2\":0,\"9.2\":0.00994,\"10.1\":0,\"11.1-11.2\":0.00994,\"12.0\":0.00994,\"13.0\":0.02981,\"14.0\":0.01988,\"15.0\":0.00994,\"16.0\":0.04969,\"17.0\":0.03975,\"18.0\":0.04969,\"19.0\":0.40746},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0,\"4.4\":0,\"4.4.3-4.4.4\":0.03481},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.00722,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0.51646,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":2.06584},H:{\"0\":2.31533},L:{\"0\":84.58253},R:{_:\"0\"},M:{\"0\":0.1519},Q:{\"13.1\":0}};\n&/data/features/css-element-function.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"2\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"33\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"164\":\"EC uB FC GC\"},D:{\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"2\":\"A B C h rB BC sB\"},L:{\"2\":\"H\"},M:{\"33\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"2\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"2\":\"2B\"},R:{\"2\":\"AD\"},S:{\"33\":\"BD CD\"}},B:5,C:\"CSS element() function\"};\n#/data/features/namevalue-storage.js\u0005module.exports={A:{A:{\"1\":\"E F A B\",\"2\":\"DC\",\"8\":\"J D\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\",\"4\":\"EC uB\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"I w J D E F A B C K L G JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"IC 0B\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e SC TC rB BC UC sB\",\"2\":\"F QC RC\"},G:{\"1\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"1\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"1\":\"D A\"},K:{\"1\":\"B C h rB BC sB\",\"2\":\"A\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:1,C:\"Web Storage - name/value pairs\"};\n)/data/features/document-evaluate-xpath.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\",\"16\":\"EC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\",\"16\":\"F\"},G:{\"1\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"1\":\"pC\"},I:{\"1\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"1\":\"D A\"},K:{\"1\":\"A B C h rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:7,C:\"document.evaluate & XPath\"};\n/data/regions/AG.js\u0010module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0.00473,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0.00473,\"87\":0.00473,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0.00473,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0,\"108\":0.01894,\"109\":0.47813,\"110\":0.24143,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0.00473,\"48\":0,\"49\":0.00473,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0.02367,\"77\":0.04734,\"78\":0,\"79\":0.00473,\"80\":0,\"81\":0.00473,\"83\":0.00473,\"84\":0.00473,\"85\":0,\"86\":0.00473,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0.00473,\"92\":0.0142,\"93\":0.56335,\"94\":0,\"95\":0,\"96\":0,\"97\":0.00947,\"98\":0.00473,\"99\":0.00473,\"100\":0.0142,\"101\":0,\"102\":0.02367,\"103\":0.22723,\"104\":0.01894,\"105\":0.0284,\"106\":0.0284,\"107\":0.03787,\"108\":0.34558,\"109\":6.81223,\"110\":3.7872,\"111\":0.00947,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0.00947,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0.04734,\"64\":0,\"65\":0,\"66\":0,\"67\":0.00947,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0.00473,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.0284,\"94\":0.12308,\"95\":0.06154,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0.00473,\"15\":0,\"16\":0.00473,\"17\":0,\"18\":0.00947,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0.00473,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.03787,\"94\":0,\"95\":0,\"96\":0.00473,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0.02367,\"103\":0,\"104\":0,\"105\":0.00947,\"106\":0.00473,\"107\":0.03314,\"108\":0.05207,\"109\":1.97408,\"110\":1.77525},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.01894,\"14\":0.09941,\"15\":0.01894,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0.00473,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0.03314,\"13.1\":0.04734,\"14.1\":0.13729,\"15.1\":0.04261,\"15.2-15.3\":0.01894,\"15.4\":0.02367,\"15.5\":0.56808,\"15.6\":0.56335,\"16.0\":0.18463,\"16.1\":0.17042,\"16.2\":0.44026,\"16.3\":0.35032,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0.00939,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0.34266,\"10.0-10.2\":0,\"10.3\":0.05867,\"11.0-11.2\":0,\"11.3-11.4\":0.00939,\"12.0-12.1\":0.00469,\"12.2-12.5\":0.32623,\"13.0-13.1\":0.01878,\"13.2\":0,\"13.3\":0.01173,\"13.4-13.7\":0.15959,\"14.0-14.4\":0.16663,\"14.5-14.8\":0.33562,\"15.0-15.1\":0.23939,\"15.2-15.3\":0.20419,\"15.4\":0.14317,\"15.5\":0.47174,\"15.6\":2.18972,\"16.0\":2.26013,\"16.1\":5.48486,\"16.2\":6.08334,\"16.3\":3.57209,\"16.4\":0.02112},P:{\"4\":0.14792,\"20\":1.52148,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0.23245,\"8.2\":0,\"9.2\":0.01057,\"10.1\":0,\"11.1-11.2\":0.06339,\"12.0\":0,\"13.0\":0.04226,\"14.0\":0.02113,\"15.0\":0.0317,\"16.0\":0.08453,\"17.0\":0.06339,\"18.0\":0.16905,\"19.0\":2.54636},I:{\"0\":0,\"3\":0,\"4\":0.08088,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.12131,\"4.2-4.3\":0,\"4.4\":0,\"4.4.3-4.4.4\":1.45577},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0.0142,\"11\":0.00947,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.0316},H:{\"0\":0.28417},L:{\"0\":48.21667},R:{_:\"0\"},M:{\"0\":0.20537},Q:{\"13.1\":0}};\n/data/features/svg-img.js\u0005module.exports={A:{A:{\"1\":\"F A B\",\"2\":\"J D E DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB FC GC\"},D:{\"1\":\"5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"132\":\"0 1 2 3 4 I w J D E F A B C K L G M N O x g y z\"},E:{\"1\":\"F A B C K L G MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"IC\",\"4\":\"0B\",\"132\":\"I w J D E JC KC LC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\"},G:{\"1\":\"aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"132\":\"E 0B VC CC WC XC YC ZC\"},H:{\"1\":\"pC\"},I:{\"1\":\"H uC vC\",\"2\":\"qC rC sC\",\"132\":\"uB I tC CC\"},J:{\"1\":\"D A\"},K:{\"1\":\"A B C h rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:1,C:\"SVG in HTML img element\"};\n)/data/features/stricttransportsecurity.js\u0005module.exports={A:{A:{\"2\":\"J D E F A DC\",\"129\":\"B\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"D E F A B C K L G LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J IC 0B JC KC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e sB\",\"2\":\"F B QC RC SC TC rB BC UC\"},G:{\"1\":\"E YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC CC WC XC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H uC vC\",\"2\":\"uB I qC rC sC tC CC\"},J:{\"1\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:6,C:\"Strict Transport Security\"};\n/data/features/css-hyphens.js\u0005module.exports={A:{A:{\"2\":\"J D E F DC\",\"33\":\"A B\"},B:{\"1\":\"r s t u v f H\",\"33\":\"C K L G M N O\",\"132\":\"P Q R S T U V W\",\"260\":\"X Y Z a b c d e i j k l m n o p q\"},C:{\"1\":\"KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB I w FC GC\",\"33\":\"0 1 2 3 4 5 6 7 8 9 J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB\"},D:{\"1\":\"X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB\",\"132\":\"WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W\"},E:{\"2\":\"I w IC 0B\",\"33\":\"J D E F A B C K L G JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB QC RC SC TC rB BC UC sB\",\"132\":\"JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z\"},G:{\"2\":\"0B VC\",\"33\":\"E CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"4\":\"wC\"},P:{\"1\":\"g yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I\",\"132\":\"xC\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:4,C:\"CSS Hyphenation\"};\n/data/features/will-change.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"1\":\"DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 EC uB I w J D E F A B C K L G M N O x g y z FC GC\",\"194\":\"6 7 8 9 AB BB CB\"},D:{\"1\":\"DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB\"},E:{\"1\":\"A B C K L G MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F IC 0B JC KC LC\"},F:{\"1\":\"1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 F B C G M N O x g y z QC RC SC TC rB BC UC sB\"},G:{\"1\":\"bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:4,C:\"CSS will-change property\"};\n/data/regions/CD.js\u0011-module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0.00319,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0,\"108\":0.00319,\"109\":0.04466,\"110\":0.02871,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.0016,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0.00319,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0.0016,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0.0016,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0.0016,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0.0016,\"80\":0,\"81\":0.00479,\"83\":0.00319,\"84\":0,\"85\":0.0016,\"86\":0,\"87\":0.0016,\"88\":0,\"89\":0,\"90\":0,\"91\":0.00957,\"92\":0.0016,\"93\":0,\"94\":0.0016,\"95\":0.0016,\"96\":0.0016,\"97\":0,\"98\":0.0016,\"99\":0,\"100\":0,\"101\":0,\"102\":0.00319,\"103\":0.00319,\"104\":0.0016,\"105\":0.0016,\"106\":0.0016,\"107\":0.00479,\"108\":0.01595,\"109\":0.27753,\"110\":0.13558,\"111\":0,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0.0016,\"21\":0,\"22\":0,\"23\":0,\"24\":0.01595,\"25\":0,\"26\":0.00479,\"27\":0.00798,\"28\":0.01595,\"29\":0.0016,\"30\":0.01436,\"31\":0.01117,\"32\":0.00479,\"33\":0.00479,\"34\":0,\"35\":0.0016,\"36\":0,\"37\":0.00957,\"38\":0.01436,\"39\":0,\"40\":0,\"41\":0,\"42\":0.04147,\"43\":0,\"44\":0,\"45\":0.0016,\"46\":0.00319,\"47\":0.00479,\"48\":0,\"49\":0,\"50\":0.02393,\"51\":0.00798,\"52\":0,\"53\":0,\"54\":0.00479,\"55\":0.00638,\"56\":0.00638,\"57\":0.00798,\"58\":0.02233,\"60\":0.22171,\"62\":0.00319,\"63\":0.36047,\"64\":0.07497,\"65\":0.03669,\"66\":0.29986,\"67\":0.24723,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0.0016,\"73\":0.07018,\"74\":0.0016,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0.0016,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0.01595,\"95\":0.0319,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0.00479},B:{\"12\":0.00319,\"13\":0.00479,\"14\":0.0016,\"15\":0.00319,\"16\":0,\"17\":0.0016,\"18\":0.00319,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0.0016,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.0016,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0.0016,\"108\":0.00798,\"109\":0.05583,\"110\":0.0638},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0.0016,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0,\"13.1\":0.00319,\"14.1\":0.00319,\"15.1\":0,\"15.2-15.3\":0,\"15.4\":0.0016,\"15.5\":0,\"15.6\":0.0016,\"16.0\":0,\"16.1\":0.01436,\"16.2\":0.00319,\"16.3\":0.0016,\"16.4\":0},G:{\"8\":0.00087,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0.00785,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0.02703,\"10.0-10.2\":0,\"10.3\":0.1779,\"11.0-11.2\":0.00349,\"11.3-11.4\":0.0157,\"12.0-12.1\":0.1282,\"12.2-12.5\":2.09124,\"13.0-13.1\":0.02006,\"13.2\":0.02442,\"13.3\":0.03227,\"13.4-13.7\":0.20407,\"14.0-14.4\":0.40377,\"14.5-14.8\":0.56162,\"15.0-15.1\":0.33837,\"15.2-15.3\":0.27122,\"15.4\":0.25203,\"15.5\":0.40464,\"15.6\":0.4779,\"16.0\":0.53197,\"16.1\":0.72818,\"16.2\":0.64359,\"16.3\":0.6497,\"16.4\":0.00087},P:{\"4\":0.16744,\"20\":0.06279,\"5.0-5.4\":0.11512,\"6.2-6.4\":0.05233,\"7.2-7.4\":0.07326,\"8.2\":0,\"9.2\":0.05233,\"10.1\":0,\"11.1-11.2\":0.13605,\"12.0\":0,\"13.0\":0,\"14.0\":0.01047,\"15.0\":0,\"16.0\":0.0314,\"17.0\":0.02093,\"18.0\":0.0314,\"19.0\":0.31395},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.00242,\"4.2-4.3\":0.00887,\"4.4\":0,\"4.4.3-4.4.4\":0.08828},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.00319,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0.1681,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0.01681},O:{\"0\":0.39504},H:{\"0\":25.23263},L:{\"0\":58.01337},R:{_:\"0\"},M:{\"0\":0.04203},Q:{\"13.1\":0.00841}};\n'/data/features/background-attachment.js\u0005module.exports={A:{A:{\"1\":\"F A B\",\"132\":\"J D E DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"132\":\"0 1 EC uB I w J D E F A B C K L G M N O x g y z FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"w J D E F A B C JC KC LC MC 1B rB sB 4B 5B 6B tB 7B 8B 9B AC PC\",\"132\":\"I K IC 0B 2B\",\"2050\":\"L G NC OC 3B\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e SC TC rB BC UC sB\",\"132\":\"F QC RC\"},G:{\"2\":\"0B VC CC\",\"772\":\"E WC XC YC ZC aC bC cC dC eC fC gC hC\",\"2050\":\"iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I H qC rC sC uC vC\",\"132\":\"tC CC\"},J:{\"260\":\"D A\"},K:{\"1\":\"B C h rB BC sB\",\"132\":\"A\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"2\":\"I\",\"1028\":\"g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:4,C:\"CSS background-attachment\"};\n&/data/features/prefers-color-scheme.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"1\":\"gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB FC GC\"},D:{\"1\":\"oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB\"},E:{\"1\":\"K L G sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A B C IC 0B JC KC LC MC 1B rB\"},F:{\"1\":\"bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB QC RC SC TC rB BC UC sB\"},G:{\"1\":\"iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I xC yC zC 0C 1C 1B 2C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"2\":\"BD\"}},B:5,C:\"prefers-color-scheme media query\"};\n!/data/features/insert-adjacent.js\u0005module.exports={A:{A:{\"1\":\"J D E F A B\",\"16\":\"DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\",\"16\":\"F\"},G:{\"1\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"1\":\"pC\"},I:{\"1\":\"uB I H sC tC CC uC vC\",\"16\":\"qC rC\"},J:{\"1\":\"D A\"},K:{\"1\":\"A B C h rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:1,C:\"Element.insertAdjacentElement() & Element.insertAdjacentText()\"};\n#/data/features/keyboardevent-key.js\u0005module.exports={A:{A:{\"2\":\"J D E DC\",\"260\":\"F A B\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"260\":\"C K L G M N O\"},C:{\"1\":\"6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB I w J D E F A B C K L G M N O x g y z FC GC\",\"132\":\"0 1 2 3 4 5\"},D:{\"1\":\"SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB\"},E:{\"1\":\"B C K L G 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A IC 0B JC KC LC MC\"},F:{\"1\":\"FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e sB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B G M N O x g y z AB BB CB DB EB QC RC SC TC rB BC UC\",\"16\":\"C\"},G:{\"1\":\"dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC\"},H:{\"1\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h sB\",\"2\":\"A B rB BC\",\"16\":\"C\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"260\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:5,C:\"KeyboardEvent.key\"};\n'/data/features/css-image-orientation.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O P Q\",\"257\":\"R S T U V W X\"},C:{\"1\":\"3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 EC uB I w J D E F A B C K L G M N O x g y z FC GC\"},D:{\"1\":\"Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q\",\"257\":\"R S T U V W X\"},E:{\"1\":\"L G 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A B C K IC 0B JC KC LC MC 1B rB sB\"},F:{\"1\":\"pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB QC RC SC TC rB BC UC sB\",\"257\":\"hB iB jB kB lB h mB nB oB\"},G:{\"1\":\"mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"132\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"1\":\"g 6C tB 7C 8C 9C\",\"2\":\"I xC yC zC 0C 1C 1B 2C 3C\",\"257\":\"4C 5C\"},Q:{\"2\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:4,C:\"CSS3 image-orientation\"};\n#/data/features/deviceorientation.js\u0005module.exports={A:{A:{\"2\":\"J D E F A DC\",\"132\":\"B\"},B:{\"1\":\"C K L G M N O\",\"4\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"2\":\"EC uB FC\",\"4\":\"0 1 2 3 4 5 6 7 8 9 J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"8\":\"I w GC\"},D:{\"2\":\"I w J\",\"4\":\"0 1 2 3 4 5 6 7 8 9 D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"2\":\"F B C QC RC SC TC rB BC UC sB\",\"4\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\"},G:{\"2\":\"0B VC\",\"4\":\"E CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"2\":\"qC rC sC\",\"4\":\"uB I H tC CC uC vC\"},J:{\"2\":\"D\",\"4\":\"A\"},K:{\"1\":\"C sB\",\"2\":\"A B rB BC\",\"4\":\"h\"},L:{\"4\":\"H\"},M:{\"4\":\"f\"},N:{\"1\":\"B\",\"2\":\"A\"},O:{\"4\":\"wC\"},P:{\"4\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"4\":\"2B\"},R:{\"4\":\"AD\"},S:{\"4\":\"BD CD\"}},B:4,C:\"DeviceOrientation & DeviceMotion events\"};\n /data/features/serviceworkers.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L\",\"322\":\"G M\"},C:{\"1\":\"LB NB OB PB QB RB SB UB VB WB XB YB ZB vB wB bB cB dB eB fB gB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z FC GC\",\"194\":\"AB BB CB DB EB FB GB HB IB JB KB\",\"513\":\"MB TB aB hB\"},D:{\"1\":\"MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB\",\"4\":\"HB IB JB KB LB\"},E:{\"1\":\"C K L G rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A B IC 0B JC KC LC MC 1B\"},F:{\"1\":\"9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 F B C G M N O x g y z QC RC SC TC rB BC UC sB\",\"4\":\"4 5 6 7 8\"},G:{\"1\":\"fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I qC rC sC tC CC uC vC\",\"4\":\"H\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"2\":\"BD\"}},B:4,C:\"Service Workers\"};\n/data/regions/SR.js\u0010module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.00336,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0.00673,\"92\":0.00673,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0.00336,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0,\"108\":0.00336,\"109\":0.53824,\"110\":0.34313,\"111\":0.00336,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0.00673,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0.00673,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0.00673,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0.00336,\"78\":0,\"79\":0.01009,\"80\":0,\"81\":0.00673,\"83\":0.00673,\"84\":0,\"85\":0.00336,\"86\":0.00336,\"87\":0.00336,\"88\":0,\"89\":0.00336,\"90\":0.00336,\"91\":0.00336,\"92\":0,\"93\":0.00336,\"94\":0,\"95\":0.00673,\"96\":0.01346,\"97\":0.01009,\"98\":0.04037,\"99\":0.00336,\"100\":0.00336,\"101\":0.00336,\"102\":0.02355,\"103\":0.08746,\"104\":0.00336,\"105\":0.00673,\"106\":0.00336,\"107\":0.02691,\"108\":0.21193,\"109\":3.84842,\"110\":2.45908,\"111\":0.00336,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0.00336,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.01346,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.01009,\"94\":0.0841,\"95\":0.08074,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0.00336,\"17\":0,\"18\":0.00673,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00336,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0,\"106\":0.00673,\"107\":0.01346,\"108\":0.01682,\"109\":0.6728,\"110\":0.69635},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.00336,\"14\":0.0841,\"15\":0,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0.00336,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0.00336,\"13.1\":0.00673,\"14.1\":0.0471,\"15.1\":0,\"15.2-15.3\":0.00336,\"15.4\":0.01009,\"15.5\":0.21866,\"15.6\":0.0841,\"16.0\":0.01009,\"16.1\":0.02355,\"16.2\":0.13792,\"16.3\":0.0841,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0.00225,\"6.0-6.1\":0.00225,\"7.0-7.1\":0.04727,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0.02026,\"10.0-10.2\":0,\"10.3\":0.08779,\"11.0-11.2\":0,\"11.3-11.4\":0.02926,\"12.0-12.1\":0.01125,\"12.2-12.5\":0.76531,\"13.0-13.1\":0.0045,\"13.2\":0,\"13.3\":0.45468,\"13.4-13.7\":0.21158,\"14.0-14.4\":0.39616,\"14.5-14.8\":1.69268,\"15.0-15.1\":0.39166,\"15.2-15.3\":0.18457,\"15.4\":0.33088,\"15.5\":0.28586,\"15.6\":1.29877,\"16.0\":1.8885,\"16.1\":3.2458,\"16.2\":3.99534,\"16.3\":2.20813,\"16.4\":0.02251},P:{\"4\":0.69846,\"20\":2.58842,\"5.0-5.4\":0.01027,\"6.2-6.4\":0.01027,\"7.2-7.4\":0.56493,\"8.2\":0,\"9.2\":0.10272,\"10.1\":0,\"11.1-11.2\":0.0719,\"12.0\":0.02054,\"13.0\":0.19516,\"14.0\":0.12326,\"15.0\":0.06163,\"16.0\":0.22597,\"17.0\":0.26706,\"18.0\":0.25679,\"19.0\":3.3896},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0.02037,\"4.4\":0,\"4.4.3-4.4.4\":0.32594},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.02018,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.47779},H:{\"0\":0.16335},L:{\"0\":59.37362},R:{_:\"0\"},M:{\"0\":0.15926},Q:{\"13.1\":0.00664}};\n/data/regions/ER.js\u0011kmodule.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0.00156,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0.00156,\"44\":0.00156,\"45\":0,\"46\":0,\"47\":0.00156,\"48\":0.00156,\"49\":0,\"50\":0,\"51\":0,\"52\":0.00156,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0.00156,\"78\":0.00156,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0.00156,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0.00468,\"103\":0.00624,\"104\":0.00156,\"105\":0,\"106\":0.02027,\"107\":0.01247,\"108\":0.00312,\"109\":0.1216,\"110\":0.03118,\"111\":0.01403,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0.00312,\"38\":0.00156,\"39\":0,\"40\":0.00468,\"41\":0,\"42\":0,\"43\":0.00156,\"44\":0,\"45\":0,\"46\":0.00935,\"47\":0,\"48\":0,\"49\":0,\"50\":0.00156,\"51\":0,\"52\":0,\"53\":0.01559,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0.00156,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0.00312,\"65\":0,\"66\":0,\"67\":0,\"68\":0.00156,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0.00156,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0.14966,\"80\":0.00624,\"81\":0.01247,\"83\":0.00156,\"84\":0,\"85\":0.00156,\"86\":0.00156,\"87\":0,\"88\":0,\"89\":0.00312,\"90\":0,\"91\":0,\"92\":0.00312,\"93\":0,\"94\":0.00312,\"95\":0.00468,\"96\":0.00156,\"97\":0,\"98\":0.01715,\"99\":0.00156,\"100\":0.00156,\"101\":0.00156,\"102\":0.00312,\"103\":0.00312,\"104\":0.00156,\"105\":0.00624,\"106\":0.0078,\"107\":0.00624,\"108\":0.01403,\"109\":0.49264,\"110\":0.26659,\"111\":0.02962,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0.00156,\"28\":0.02027,\"29\":0.00156,\"30\":0.00156,\"31\":0,\"32\":0.00468,\"33\":0.00156,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0.00468,\"39\":0,\"40\":0,\"41\":0,\"42\":0.00156,\"43\":0,\"44\":0,\"45\":0,\"46\":0.00312,\"47\":0,\"48\":0,\"49\":0,\"50\":0.00312,\"51\":0.00312,\"52\":0,\"53\":0,\"54\":0.00312,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0.01871,\"62\":0,\"63\":0.00312,\"64\":0.00156,\"65\":0.00156,\"66\":0.00624,\"67\":0.07327,\"68\":0,\"69\":0,\"70\":0.00468,\"71\":0.00156,\"72\":0.00624,\"73\":0,\"74\":0.00156,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0.00156,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0.06704,\"95\":0.03118,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0.0265},B:{\"12\":0.00312,\"13\":0,\"14\":0.00156,\"15\":0,\"16\":0.00156,\"17\":0.00156,\"18\":0.00156,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0.02339,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0.00156,\"91\":0,\"92\":0.00312,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0.00156,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0.00156,\"106\":0,\"107\":0.00156,\"108\":0.00468,\"109\":0.09042,\"110\":0.08107},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0,\"13.1\":0,\"14.1\":0,\"15.1\":0,\"15.2-15.3\":0,\"15.4\":0,\"15.5\":0,\"15.6\":0.00156,\"16.0\":0,\"16.1\":0,\"16.2\":0,\"16.3\":0,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0.04429,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0.04296,\"10.0-10.2\":0,\"10.3\":0.0141,\"11.0-11.2\":0.00253,\"11.3-11.4\":0.01476,\"12.0-12.1\":0.0411,\"12.2-12.5\":0.44344,\"13.0-13.1\":0,\"13.2\":0.01277,\"13.3\":0.02367,\"13.4-13.7\":0.07954,\"14.0-14.4\":0.01343,\"14.5-14.8\":0.16679,\"15.0-15.1\":0.06424,\"15.2-15.3\":0.0814,\"15.4\":0.00705,\"15.5\":0.01091,\"15.6\":0.01543,\"16.0\":0.01929,\"16.1\":0.03019,\"16.2\":0.0661,\"16.3\":0.06225,\"16.4\":0},P:{\"4\":0.87233,\"20\":0.06086,\"5.0-5.4\":0.14201,\"6.2-6.4\":0.01014,\"7.2-7.4\":0.5376,\"8.2\":0,\"9.2\":0.01014,\"10.1\":0,\"11.1-11.2\":0.06086,\"12.0\":0,\"13.0\":0.03043,\"14.0\":0.02029,\"15.0\":0.01014,\"16.0\":0.08115,\"17.0\":0.10143,\"18.0\":0.03043,\"19.0\":0.44631},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.00343,\"4.2-4.3\":0.05018,\"4.4\":0,\"4.4.3-4.4.4\":0.31886},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.00312,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0.01688,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":1.67132},H:{\"0\":8.40695},L:{\"0\":80.75603},R:{_:\"0\"},M:{\"0\":0.15194},Q:{\"13.1\":0}};\n/data/features/webgl.js\u0006\u000bmodule.exports={A:{A:{\"2\":\"DC\",\"8\":\"J D E F A\",\"129\":\"B\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"129\":\"C K L G M N O\"},C:{\"1\":\"1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB FC GC\",\"129\":\"0 I w J D E F A B C K L G M N O x g y z\"},D:{\"1\":\"AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"I w J D\",\"129\":\"0 1 2 3 4 5 6 7 8 9 E F A B C K L G M N O x g y z\"},E:{\"1\":\"E F A B C K L G MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w IC 0B\",\"129\":\"J D JC KC LC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F B QC RC SC TC rB BC UC\",\"129\":\"C G M N O sB\"},G:{\"1\":\"E ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC CC WC XC YC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"1\":\"A\",\"2\":\"D\"},K:{\"1\":\"C h sB\",\"2\":\"A B rB BC\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"8\":\"A\",\"129\":\"B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"129\":\"BD\"}},B:6,C:\"WebGL - 3D Canvas graphics\"};\n/data/features/sql-storage.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q\",\"2\":\"C K L G M N O\",\"129\":\"r s t u v f H\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q\",\"129\":\"r s t u v f H yB zB HC\"},E:{\"1\":\"I w J D E F A B C IC 0B JC KC LC MC 1B rB sB\",\"2\":\"K L G 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z SC TC rB BC UC sB\",\"2\":\"F QC RC\",\"129\":\"a b c d e\"},G:{\"1\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC\",\"2\":\"iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"1\":\"uB I qC rC sC tC CC uC vC\",\"129\":\"H\"},J:{\"1\":\"D A\"},K:{\"1\":\"B C rB BC sB\",\"2\":\"A\",\"129\":\"h\"},L:{\"129\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"2\":\"BD CD\"}},B:7,C:\"Web SQL Database\"};\n#/data/features/chacha20-poly1305.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"1\":\"OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB FC GC\"},D:{\"1\":\"QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z\",\"129\":\"AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB\"},E:{\"1\":\"C K L G rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A B IC 0B JC KC LC MC 1B\"},F:{\"1\":\"DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB QC RC SC TC rB BC UC sB\"},G:{\"1\":\"eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC\",\"16\":\"vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:6,C:\"ChaCha20-Poly1305 cipher suites for TLS\"};\n/data/features/xhr2.js\u0006:module.exports={A:{A:{\"2\":\"J D E F DC\",\"132\":\"A B\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB\",\"260\":\"A B\",\"388\":\"J D E F\",\"900\":\"I w FC GC\"},D:{\"1\":\"8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"16\":\"I w J\",\"132\":\"6 7\",\"388\":\"0 1 2 3 4 5 D E F A B C K L G M N O x g y z\"},E:{\"1\":\"E F A B C K L G LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I IC 0B\",\"132\":\"D KC\",\"388\":\"w J JC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 C O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e sB\",\"2\":\"F B QC RC SC TC rB BC UC\",\"132\":\"G M N\"},G:{\"1\":\"E ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC CC\",\"132\":\"YC\",\"388\":\"WC XC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H vC\",\"2\":\"qC rC sC\",\"388\":\"uC\",\"900\":\"uB I tC CC\"},J:{\"132\":\"A\",\"388\":\"D\"},K:{\"1\":\"C h sB\",\"2\":\"A B rB BC\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"132\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:1,C:\"XMLHttpRequest advanced features\"};\n(/data/features/getelementsbyclassname.js\u0005module.exports={A:{A:{\"1\":\"F A B\",\"2\":\"DC\",\"8\":\"J D E\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\",\"8\":\"EC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\",\"2\":\"F\"},G:{\"1\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"1\":\"pC\"},I:{\"1\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"1\":\"D A\"},K:{\"1\":\"A B C h rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:1,C:\"getElementsByClassName\"};\n$/data/features/css3-cursors-newer.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"33\":\"0 EC uB I w J D E F A B C K L G M N O x g y z FC GC\"},D:{\"1\":\"EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"33\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB\"},E:{\"1\":\"F A B C K L G MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"33\":\"I w J D E IC 0B JC KC LC\"},F:{\"1\":\"1 2 3 4 5 6 7 8 9 C AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e UC sB\",\"2\":\"F B QC RC SC TC rB BC\",\"33\":\"0 G M N O x g y z\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"33\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"2\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"2\":\"BD CD\"}},B:2,C:\"CSS3 Cursors: zoom-in & zoom-out\"};\n/data/features/webtransport.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"1\":\"j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z e i\",\"66\":\"a b c d\"},E:{\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB QC RC SC TC rB BC UC sB\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"1\":\"g 8C 9C\",\"2\":\"I xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C\"},Q:{\"2\":\"2B\"},R:{\"1\":\"AD\"},S:{\"2\":\"BD CD\"}},B:5,C:\"WebTransport\"};\n/data/features/css-opacity.js\u0005module.exports={A:{A:{\"1\":\"F A B\",\"4\":\"J D E DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\"},G:{\"1\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"1\":\"pC\"},I:{\"1\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"1\":\"D A\"},K:{\"1\":\"A B C h rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:2,C:\"CSS3 Opacity\"};\n%/data/features/requestidlecallback.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"1\":\"WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB FC GC\",\"194\":\"UB VB\"},D:{\"1\":\"OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB\"},E:{\"2\":\"I w J D E F A B C K IC 0B JC KC LC MC 1B rB sB\",\"322\":\"L G 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB QC RC SC TC rB BC UC sB\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC\",\"322\":\"lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"2\":\"BD\"}},B:5,C:\"requestIdleCallback\"};\n/data/regions/AL.js\u0010module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.00132,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.00132,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0.00132,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0.00132,\"103\":0,\"104\":0,\"105\":0.00132,\"106\":0.00132,\"107\":0.00132,\"108\":0.00396,\"109\":0.08184,\"110\":0.04356,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0.00132,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0.00264,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0.00132,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0.00396,\"80\":0,\"81\":0.00132,\"83\":0.00132,\"84\":0.00132,\"85\":0.00132,\"86\":0.00132,\"87\":0.00264,\"88\":0.00132,\"89\":0,\"90\":0.00132,\"91\":0,\"92\":0.00132,\"93\":0,\"94\":0,\"95\":0,\"96\":0.00132,\"97\":0.00132,\"98\":0.00132,\"99\":0.00132,\"100\":0.00264,\"101\":0.00132,\"102\":0.00132,\"103\":0.00396,\"104\":0.00264,\"105\":0.00528,\"106\":0.00396,\"107\":0.0066,\"108\":0.0264,\"109\":0.7656,\"110\":0.37356,\"111\":0,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.00132,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.00132,\"94\":0.01716,\"95\":0.01452,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0.00132,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0.00132,\"108\":0.00396,\"109\":0.04224,\"110\":0.05016},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0.00132,\"15\":0.00132,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0,\"13.1\":0.00396,\"14.1\":0.00264,\"15.1\":0.00264,\"15.2-15.3\":0.00132,\"15.4\":0.00528,\"15.5\":0.00924,\"15.6\":0.03564,\"16.0\":0.00396,\"16.1\":0.01584,\"16.2\":0.033,\"16.3\":0.04224,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0.0492,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0.0246,\"10.0-10.2\":0.00984,\"10.3\":0.08365,\"11.0-11.2\":0.01476,\"11.3-11.4\":0.00984,\"12.0-12.1\":0.0246,\"12.2-12.5\":1.14645,\"13.0-13.1\":0.0246,\"13.2\":0.03444,\"13.3\":0.07873,\"13.4-13.7\":0.27554,\"14.0-14.4\":0.81678,\"14.5-14.8\":2.77018,\"15.0-15.1\":0.29522,\"15.2-15.3\":0.49696,\"15.4\":0.76758,\"15.5\":1.47612,\"15.6\":5.75193,\"16.0\":5.17133,\"16.1\":10.2098,\"16.2\":9.88014,\"16.3\":5.28942,\"16.4\":0.0246},P:{\"4\":0.11048,\"20\":0.75326,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0.0703,\"8.2\":0,\"9.2\":0.01004,\"10.1\":0,\"11.1-11.2\":0.04017,\"12.0\":0.01004,\"13.0\":0.05022,\"14.0\":0.04017,\"15.0\":0.06026,\"16.0\":0.06026,\"17.0\":0.05022,\"18.0\":0.06026,\"19.0\":1.30566},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.00616,\"4.2-4.3\":0.00308,\"4.4\":0,\"4.4.3-4.4.4\":0.02001},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.00132,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.00868},H:{\"0\":0.07396},L:{\"0\":50.34328},R:{_:\"0\"},M:{\"0\":0.11284},Q:{\"13.1\":0}};\n /data/features/variable-fonts.js\u0006Cmodule.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB FC GC\",\"4609\":\"bB cB dB eB fB gB hB iB jB\",\"4674\":\"wB\",\"5698\":\"aB\",\"7490\":\"UB VB WB XB YB\",\"7746\":\"ZB vB\",\"8705\":\"kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\"},D:{\"1\":\"gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB\",\"4097\":\"fB\",\"4290\":\"vB aB wB\",\"6148\":\"bB cB dB eB\"},E:{\"1\":\"G OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A IC 0B JC KC LC MC 1B\",\"4609\":\"B C rB sB\",\"8193\":\"K L 2B NC\"},F:{\"1\":\"VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QC RC SC TC rB BC UC sB\",\"4097\":\"UB\",\"6148\":\"QB RB SB TB\"},G:{\"1\":\"iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC\",\"4097\":\"eC fC gC hC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"4097\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"2\":\"I xC yC zC\",\"4097\":\"g 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"2\":\"BD\"}},B:5,C:\"Variable fonts\"};\n/data/regions/FJ.js\u0011^module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0.00323,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.00323,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0.00323,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0.00323,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.00323,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0.00323,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0.00968,\"103\":0,\"104\":0,\"105\":0.00323,\"106\":0.00968,\"107\":0.00323,\"108\":0.00968,\"109\":0.24856,\"110\":0.17431,\"111\":0.00323,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0.00646,\"50\":0,\"51\":0,\"52\":0.00323,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0.00968,\"69\":0.0807,\"70\":0,\"71\":0,\"72\":0.00323,\"73\":0.00323,\"74\":0.0226,\"75\":0,\"76\":0.00646,\"77\":0.00646,\"78\":0.00323,\"79\":0.02582,\"80\":0,\"81\":0.01291,\"83\":0.00323,\"84\":0,\"85\":0.00646,\"86\":0.00323,\"87\":0.00646,\"88\":0.01614,\"89\":0.00646,\"90\":0,\"91\":0.00646,\"92\":0.01937,\"93\":0.00323,\"94\":0.00323,\"95\":0.01291,\"96\":0.00646,\"97\":0.00323,\"98\":0.00323,\"99\":0.00323,\"100\":0.00323,\"101\":0.01291,\"102\":0.00646,\"103\":0.03228,\"104\":0.00968,\"105\":0.0226,\"106\":0.01614,\"107\":0.03228,\"108\":0.12912,\"109\":3.85423,\"110\":2.08529,\"111\":0.00323,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0.00323,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0.00323,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0.00968,\"65\":0,\"66\":0,\"67\":0.18077,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0.01614,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0.03874,\"95\":0.05165,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0.00646,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0.00323,\"18\":0.00646,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0.00323,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0.00323,\"91\":0,\"92\":0.00968,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0.00646,\"101\":0,\"102\":0,\"103\":0.00323,\"104\":0.00323,\"105\":0.00646,\"106\":0,\"107\":0.01937,\"108\":0.03228,\"109\":0.47129,\"110\":0.64237},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0.00323,\"15\":0.00323,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0.00323,\"13.1\":0.02582,\"14.1\":0.01291,\"15.1\":0.00323,\"15.2-15.3\":0.00323,\"15.4\":0.0226,\"15.5\":0.01614,\"15.6\":0.07747,\"16.0\":0.01291,\"16.1\":0.02905,\"16.2\":0.06456,\"16.3\":0.04519,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0.00608,\"6.0-6.1\":0,\"7.0-7.1\":0.16829,\"8.1-8.4\":0.00203,\"9.0-9.2\":0,\"9.3\":0.15105,\"10.0-10.2\":0,\"10.3\":0.17741,\"11.0-11.2\":0.00304,\"11.3-11.4\":0.00203,\"12.0-12.1\":0.04968,\"12.2-12.5\":0.54541,\"13.0-13.1\":0.00406,\"13.2\":0.00507,\"13.3\":0.147,\"13.4-13.7\":0.04968,\"14.0-14.4\":0.40754,\"14.5-14.8\":0.28487,\"15.0-15.1\":0.0811,\"15.2-15.3\":0.18856,\"15.4\":0.12165,\"15.5\":0.49574,\"15.6\":0.65794,\"16.0\":0.74918,\"16.1\":1.81568,\"16.2\":1.65246,\"16.3\":1.23783,\"16.4\":0.00203},P:{\"4\":0.21612,\"20\":2.81983,\"5.0-5.4\":0,\"6.2-6.4\":0.01029,\"7.2-7.4\":0.90564,\"8.2\":0,\"9.2\":0.03087,\"10.1\":0.01029,\"11.1-11.2\":0.13379,\"12.0\":0.02058,\"13.0\":0.16466,\"14.0\":0.16466,\"15.0\":0.19554,\"16.0\":0.61748,\"17.0\":0.48369,\"18.0\":0.42195,\"19.0\":4.51791},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0.01305,\"4.4\":0,\"4.4.3-4.4.4\":0.12182},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0.00538,\"11\":0.01076,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":1.08352},H:{\"0\":0.795},L:{\"0\":65.41168},R:{_:\"0\"},M:{\"0\":0.05418},Q:{\"13.1\":0.00677}};\n/data/features/streams.js\u0006=module.exports={A:{A:{\"2\":\"J D E F A DC\",\"130\":\"B\"},B:{\"1\":\"Y Z a b c d e i j k l m n o p q r s t u v f H\",\"16\":\"C K\",\"260\":\"L G\",\"1028\":\"P Q R S T U V W X\",\"5124\":\"M N O\"},C:{\"1\":\"o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB FC GC\",\"5124\":\"m n\",\"7172\":\"eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l\",\"7746\":\"YB ZB vB aB wB bB cB dB\"},D:{\"1\":\"Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB\",\"260\":\"TB UB VB WB XB YB ZB\",\"1028\":\"vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X\"},E:{\"2\":\"I w J D E F IC 0B JC KC LC MC\",\"1028\":\"G NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"3076\":\"A B C K L 1B rB sB 2B\"},F:{\"1\":\"oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB QC RC SC TC rB BC UC sB\",\"260\":\"GB HB IB JB KB LB MB\",\"1028\":\"NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC\",\"16\":\"cC\",\"1028\":\"dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1028\":\"wC\"},P:{\"1\":\"g 6C tB 7C 8C 9C\",\"2\":\"I xC yC\",\"1028\":\"zC 0C 1C 1B 2C 3C 4C 5C\"},Q:{\"1028\":\"2B\"},R:{\"1\":\"AD\"},S:{\"2\":\"BD CD\"}},B:1,C:\"Streams\"};\n/data/features/webnfc.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"2\":\"C K L G M N O P Y Z a b c d e i j k l m n o p q r s t u v f H\",\"450\":\"Q R S T U V W X\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"450\":\"Q R S T U V W X\"},E:{\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\",\"450\":\"gB hB iB jB kB lB h mB nB\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"2\":\"A B C h rB BC sB\"},L:{\"257\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"2\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"2\":\"2B\"},R:{\"1\":\"AD\"},S:{\"2\":\"BD CD\"}},B:7,C:\"Web NFC\"};\n/data/features/svg-html.js\u0005module.exports={A:{A:{\"2\":\"J D E DC\",\"388\":\"F A B\"},B:{\"4\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"260\":\"C K L G M N O\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\",\"2\":\"EC\",\"4\":\"uB\"},D:{\"4\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"2\":\"IC 0B\",\"4\":\"I w J D E F A B C K L G JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"4\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\"},G:{\"4\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I qC rC sC tC CC\",\"4\":\"H uC vC\"},J:{\"1\":\"A\",\"2\":\"D\"},K:{\"4\":\"A B C h rB BC sB\"},L:{\"4\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"4\":\"wC\"},P:{\"4\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"4\":\"2B\"},R:{\"4\":\"AD\"},S:{\"1\":\"BD CD\"}},B:2,C:\"SVG effects for HTML\"};\n'/data/features/css-placeholder-shown.js\u0005module.exports={A:{A:{\"2\":\"J D E F DC\",\"292\":\"A B\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"1\":\"SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB FC GC\",\"164\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB\"},D:{\"1\":\"OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB\"},E:{\"1\":\"F A B C K L G MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E IC 0B JC KC LC\"},F:{\"1\":\"BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB QC RC SC TC rB BC UC sB\"},G:{\"1\":\"aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"164\":\"BD\"}},B:5,C:\":placeholder-shown CSS pseudo-class\"};\n/data/features/eme.js\u0005module.exports={A:{A:{\"2\":\"J D E F A DC\",\"164\":\"B\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FC GC\"},D:{\"1\":\"JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB\",\"132\":\"CB DB EB FB GB HB IB\"},E:{\"1\":\"C K L G sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J IC 0B JC KC\",\"164\":\"D E F A B LC MC 1B rB\"},F:{\"1\":\"6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F B C G M N O x g y QC RC SC TC rB BC UC sB\",\"132\":\"0 1 2 3 4 5 z\"},G:{\"1\":\"fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:2,C:\"Encrypted Media Extensions\"};\n/data/features/font-loading.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"1\":\"IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB FC GC\",\"194\":\"CB DB EB FB GB HB\"},D:{\"1\":\"CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB\"},E:{\"1\":\"A B C K L G 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F IC 0B JC KC LC MC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F B C G M N O x g y QC RC SC TC rB BC UC sB\"},G:{\"1\":\"cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:5,C:\"CSS Font Loading\"};\n/data/features/fileapi.js\u0006\u001fmodule.exports={A:{A:{\"2\":\"J D E F DC\",\"260\":\"A B\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"260\":\"C K L G M N O\"},C:{\"1\":\"5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB FC\",\"260\":\"0 1 2 3 4 I w J D E F A B C K L G M N O x g y z GC\"},D:{\"1\":\"FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"I w\",\"260\":\"0 1 2 3 4 5 6 7 8 9 K L G M N O x g y z AB BB CB DB EB\",\"388\":\"J D E F A B C\"},E:{\"1\":\"A B C K L G 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w IC 0B\",\"260\":\"J D E F KC LC MC\",\"388\":\"JC\"},F:{\"1\":\"2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F B QC RC SC TC\",\"260\":\"0 1 C G M N O x g y z rB BC UC sB\"},G:{\"1\":\"cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC CC WC\",\"260\":\"E XC YC ZC aC bC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H vC\",\"2\":\"qC rC sC\",\"260\":\"uC\",\"388\":\"uB I tC CC\"},J:{\"260\":\"A\",\"388\":\"D\"},K:{\"1\":\"h\",\"2\":\"A B\",\"260\":\"C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A\",\"260\":\"B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:5,C:\"File API\"};\n/data/regions/PM.js\u000fmodule.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0.03585,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.02561,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0.00512,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0.01537,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0.05634,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0,\"108\":0.05634,\"109\":0.56854,\"110\":0.66074,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0.00512,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0.00512,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0.00512,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0.02561,\"101\":0,\"102\":0.05634,\"103\":0.03585,\"104\":0.01537,\"105\":0.05122,\"106\":0,\"107\":0.01537,\"108\":1.19855,\"109\":5.55737,\"110\":3.58028,\"111\":0,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.29195,\"94\":0.92196,\"95\":0.00512,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0.00512,\"108\":0,\"109\":0.85537,\"110\":1.55709},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.01537,\"14\":0.01537,\"15\":0,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0.01537,\"12.1\":0,\"13.1\":0.27659,\"14.1\":0.11268,\"15.1\":0.03585,\"15.2-15.3\":0.89123,\"15.4\":0.08195,\"15.5\":0.18951,\"15.6\":2.05904,\"16.0\":0.12805,\"16.1\":0.47122,\"16.2\":1.38294,\"16.3\":2.00782,\"16.4\":0.05122},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0.01155,\"10.0-10.2\":0.06931,\"10.3\":0.07508,\"11.0-11.2\":0.01155,\"11.3-11.4\":0.02888,\"12.0-12.1\":0,\"12.2-12.5\":1.50741,\"13.0-13.1\":0,\"13.2\":0,\"13.3\":0.43894,\"13.4-13.7\":0.02888,\"14.0-14.4\":0.06931,\"14.5-14.8\":0.51402,\"15.0-15.1\":0.24835,\"15.2-15.3\":1.3457,\"15.4\":0.5891,\"15.5\":3.5404,\"15.6\":5.4752,\"16.0\":5.50407,\"16.1\":15.07989,\"16.2\":12.3423,\"16.3\":7.25983,\"16.4\":0.0462},P:{\"4\":0.0111,\"20\":0.13322,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0,\"8.2\":0,\"9.2\":0,\"10.1\":0,\"11.1-11.2\":0.0111,\"12.0\":0,\"13.0\":0,\"14.0\":0,\"15.0\":0,\"16.0\":0,\"17.0\":0,\"18.0\":0.05551,\"19.0\":0.43296},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0,\"4.4\":0,\"4.4.3-4.4.4\":0},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.01537,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0},H:{\"0\":0.0508},L:{\"0\":17.95797},R:{_:\"0\"},M:{\"0\":0.06829},Q:{\"13.1\":0}};\n&/data/features/spellcheck-attribute.js\u0005module.exports={A:{A:{\"1\":\"A B\",\"2\":\"J D E F DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"I w J D E\"},E:{\"1\":\"J D E F A B C K L G JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w IC 0B\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e SC TC rB BC UC sB\",\"2\":\"F QC RC\"},G:{\"4\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"4\":\"pC\"},I:{\"4\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"1\":\"A\",\"4\":\"D\"},K:{\"4\":\"A B C h rB BC sB\"},L:{\"4\":\"H\"},M:{\"4\":\"f\"},N:{\"4\":\"A B\"},O:{\"4\":\"wC\"},P:{\"4\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"4\":\"AD\"},S:{\"2\":\"BD CD\"}},B:1,C:\"Spellcheck attribute\"};\n/data/regions/SL.js\u0011module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0.00836,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0.00167,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0.00167,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0.00334,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0.00167,\"108\":0.00334,\"109\":0.05514,\"110\":0.02841,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0.00167,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0.00334,\"41\":0,\"42\":0,\"43\":0.00167,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0.00167,\"49\":0,\"50\":0.00167,\"51\":0,\"52\":0,\"53\":0.00167,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0.00167,\"59\":0,\"60\":0.00167,\"61\":0,\"62\":0,\"63\":0.01003,\"64\":0.00334,\"65\":0,\"66\":0,\"67\":0,\"68\":0.00167,\"69\":0,\"70\":0.00167,\"71\":0,\"72\":0,\"73\":0,\"74\":0.00668,\"75\":0,\"76\":0.00167,\"77\":0.00501,\"78\":0,\"79\":0.00167,\"80\":0.00167,\"81\":0.01003,\"83\":0.00501,\"84\":0,\"85\":0.00167,\"86\":0.00167,\"87\":0.00501,\"88\":0.00334,\"89\":0,\"90\":0.00501,\"91\":0.00167,\"92\":0,\"93\":0.00501,\"94\":0.00167,\"95\":0.00167,\"96\":0.00167,\"97\":0.00167,\"98\":0.00334,\"99\":0.00334,\"100\":0.00167,\"101\":0.00167,\"102\":0.00334,\"103\":0.00836,\"104\":0.00334,\"105\":0.00334,\"106\":0.00334,\"107\":0.00501,\"108\":0.02172,\"109\":0.45117,\"110\":0.24062,\"111\":0,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0.04178,\"25\":0,\"26\":0.00836,\"27\":0.00668,\"28\":0.00334,\"29\":0,\"30\":0.00501,\"31\":0.00167,\"32\":0.02339,\"33\":0.00167,\"34\":0,\"35\":0,\"36\":0,\"37\":0.00167,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0.00167,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0.00334,\"51\":0,\"52\":0,\"53\":0,\"54\":0.00668,\"55\":0.00334,\"56\":0.00167,\"57\":0.00334,\"58\":0.00501,\"60\":0.42611,\"62\":0,\"63\":0.42109,\"64\":0.04178,\"65\":0.07185,\"66\":0.20888,\"67\":0.18381,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0.00167,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0.00167,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0.00167,\"91\":0.00167,\"92\":0,\"93\":0,\"94\":0.03008,\"95\":0.0635,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0.03676},B:{\"12\":0.00334,\"13\":0.00167,\"14\":0.00167,\"15\":0.00334,\"16\":0.00167,\"17\":0,\"18\":0.00668,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0.00167,\"90\":0.00167,\"91\":0,\"92\":0.00668,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0.00167,\"104\":0.00167,\"105\":0.00167,\"106\":0,\"107\":0.00334,\"108\":0.00668,\"109\":0.12365,\"110\":0.127},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.00167,\"12\":0,\"13\":0,\"14\":0.00167,\"15\":0,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0.00668,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0.00501,\"13.1\":0.00334,\"14.1\":0.00334,\"15.1\":0.00167,\"15.2-15.3\":0.00167,\"15.4\":0,\"15.5\":0.00501,\"15.6\":0.00668,\"16.0\":0,\"16.1\":0.00334,\"16.2\":0.03509,\"16.3\":0.00334,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0.01472,\"8.1-8.4\":0.01227,\"9.0-9.2\":0,\"9.3\":0.02781,\"10.0-10.2\":0,\"10.3\":0.29446,\"11.0-11.2\":0.00164,\"11.3-11.4\":0.02208,\"12.0-12.1\":0.05235,\"12.2-12.5\":0.43188,\"13.0-13.1\":0.04417,\"13.2\":0.03599,\"13.3\":0.09815,\"13.4-13.7\":0.08588,\"14.0-14.4\":0.85312,\"14.5-14.8\":0.67971,\"15.0-15.1\":0.31164,\"15.2-15.3\":0.37544,\"15.4\":0.27892,\"15.5\":0.44333,\"15.6\":0.46132,\"16.0\":0.4695,\"16.1\":0.71161,\"16.2\":0.93818,\"16.3\":0.88665,\"16.4\":0.00245},P:{\"4\":0.29728,\"20\":0.13326,\"5.0-5.4\":0.09226,\"6.2-6.4\":0,\"7.2-7.4\":0.17427,\"8.2\":0,\"9.2\":0.05126,\"10.1\":0,\"11.1-11.2\":0.041,\"12.0\":0,\"13.0\":0.13326,\"14.0\":0.0205,\"15.0\":0.11276,\"16.0\":0.06151,\"17.0\":0.041,\"18.0\":0.05126,\"19.0\":0.38954},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.00212,\"4.2-4.3\":0.01133,\"4.4\":0,\"4.4.3-4.4.4\":0.05663},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.00836,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0.14159,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0.00833},O:{\"0\":0.8912},H:{\"0\":15.28183},L:{\"0\":68.5562},R:{_:\"0\"},M:{\"0\":0.09162},Q:{\"13.1\":0}};\n&/data/features/css-case-insensitive.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"1\":\"OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB FC GC\"},D:{\"1\":\"QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB\"},E:{\"1\":\"F A B C K L G MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E IC 0B JC KC LC\"},F:{\"1\":\"DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB QC RC SC TC rB BC UC sB\"},G:{\"1\":\"aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:5,C:\"Case-insensitive CSS attribute selectors\"};\n$/data/features/css-featurequeries.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB I w J D E F A B C K L G M N O x g y FC GC\"},D:{\"1\":\"5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 I w J D E F A B C K L G M N O x g y z\"},E:{\"1\":\"F A B C K L G MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E IC 0B JC KC LC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e sB\",\"2\":\"F B C QC RC SC TC rB BC UC\"},G:{\"1\":\"aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC\"},H:{\"1\":\"pC\"},I:{\"1\":\"H uC vC\",\"2\":\"uB I qC rC sC tC CC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:4,C:\"CSS Feature Queries\"};\n/data/regions/SM.js\u0010&module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.02444,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.11611,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0.00611,\"89\":0,\"90\":0,\"91\":0.00611,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0.00611,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0.03056,\"103\":0,\"104\":0.00611,\"105\":0.00611,\"106\":0.00611,\"107\":0.02444,\"108\":0.055,\"109\":1.19165,\"110\":0.8861,\"111\":0.03667,\"112\":0.00611,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0.01222,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0.00611,\"66\":0.00611,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0.01222,\"77\":0,\"78\":0,\"79\":0.23833,\"80\":0,\"81\":0.00611,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0.06111,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00611,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0.00611,\"98\":0.00611,\"99\":0,\"100\":0.03667,\"101\":0,\"102\":0.00611,\"103\":0.03056,\"104\":0.09167,\"105\":0.48888,\"106\":0.01833,\"107\":0.00611,\"108\":0.165,\"109\":14.6114,\"110\":10.57203,\"111\":0,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0.06722,\"90\":0,\"91\":0,\"92\":0,\"93\":0.23222,\"94\":0.29333,\"95\":0.04889,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0,\"108\":0.01222,\"109\":1.59497,\"110\":1.99219},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.00611,\"14\":0.26888,\"15\":0.01222,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0.03056,\"13.1\":0.07333,\"14.1\":0.25055,\"15.1\":0,\"15.2-15.3\":0.02444,\"15.4\":0.02444,\"15.5\":0.25055,\"15.6\":0.40333,\"16.0\":0.17111,\"16.1\":0.22,\"16.2\":0.87387,\"16.3\":1.0022,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0,\"8.1-8.4\":0,\"9.0-9.2\":0.06657,\"9.3\":0.01712,\"10.0-10.2\":0,\"10.3\":0.02853,\"11.0-11.2\":0.01141,\"11.3-11.4\":0,\"12.0-12.1\":0.02853,\"12.2-12.5\":0.47359,\"13.0-13.1\":0.01141,\"13.2\":0.01712,\"13.3\":0,\"13.4-13.7\":0,\"14.0-14.4\":0.87109,\"14.5-14.8\":0.60292,\"15.0-15.1\":0.16737,\"15.2-15.3\":0.18449,\"15.4\":0.12743,\"15.5\":0.24535,\"15.6\":1.29333,\"16.0\":2.55432,\"16.1\":4.28889,\"16.2\":4.31172,\"16.3\":3.14012,\"16.4\":0},P:{\"4\":0.05112,\"20\":1.20644,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0,\"8.2\":0,\"9.2\":0,\"10.1\":0,\"11.1-11.2\":0,\"12.0\":0,\"13.0\":0,\"14.0\":0,\"15.0\":0,\"16.0\":0,\"17.0\":0,\"18.0\":0.02045,\"19.0\":1.61541},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0.00202,\"4.4\":0,\"4.4.3-4.4.4\":0.19965},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.01222,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0},H:{\"0\":0.0405},L:{\"0\":39.08209},R:{_:\"0\"},M:{\"0\":0.34612},Q:{\"13.1\":0}};\n/data/features/text-stroke.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"2\":\"C K L\",\"33\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"161\":\"G M N O\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB FC GC\",\"161\":\"QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"450\":\"PB\"},D:{\"33\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"33\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"2\":\"F B C QC RC SC TC rB BC UC sB\",\"33\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\"},G:{\"33\":\"E VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"36\":\"0B\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB\",\"33\":\"I H qC rC sC tC CC uC vC\"},J:{\"33\":\"D A\"},K:{\"2\":\"A B C rB BC sB\",\"33\":\"h\"},L:{\"33\":\"H\"},M:{\"161\":\"f\"},N:{\"2\":\"A B\"},O:{\"33\":\"wC\"},P:{\"33\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"33\":\"2B\"},R:{\"33\":\"AD\"},S:{\"161\":\"BD CD\"}},B:7,C:\"CSS text-stroke and text-fill\"};\n/data/features/wake-lock.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\",\"194\":\"P Q R S T U V W X Y\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"1\":\"U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB\",\"194\":\"kB lB h mB nB oB pB qB P Q R S T\"},E:{\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B\",\"4\":\"AC PC\"},F:{\"1\":\"h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB QC RC SC TC rB BC UC sB\",\"194\":\"ZB aB bB cB dB eB fB gB hB iB jB kB lB\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B\",\"4\":\"AC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"1\":\"g 5C 6C tB 7C 8C 9C\",\"2\":\"I xC yC zC 0C 1C 1B 2C 3C 4C\"},Q:{\"2\":\"2B\"},R:{\"1\":\"AD\"},S:{\"2\":\"BD CD\"}},B:4,C:\"Screen Wake Lock API\"};\n'/data/features/css-media-interaction.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB FC GC\"},D:{\"1\":\"IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB\"},E:{\"1\":\"F A B C K L G MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E IC 0B JC KC LC\"},F:{\"1\":\"5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 F B C G M N O x g y z QC RC SC TC rB BC UC sB\"},G:{\"1\":\"aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"2\":\"BD\"}},B:4,C:\"Media Queries: interaction media features\"};\n/data/regions/AX.js\u0010Bmodule.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.04384,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.04384,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0.01879,\"102\":0.00626,\"103\":0,\"104\":0.00626,\"105\":0,\"106\":0,\"107\":0,\"108\":0.06263,\"109\":2.49267,\"110\":1.40918,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0.02505,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0.01879,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.01879,\"68\":0.00626,\"69\":0.00626,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0.04384,\"77\":0,\"78\":0,\"79\":0.10647,\"80\":0,\"81\":0,\"83\":0,\"84\":0.00626,\"85\":0.00626,\"86\":0.00626,\"87\":0.01879,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.01253,\"93\":0,\"94\":0,\"95\":0,\"96\":0.00626,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0.01253,\"103\":0.0501,\"104\":0.00626,\"105\":0.11273,\"106\":0.00626,\"107\":0.10021,\"108\":0.36325,\"109\":11.36735,\"110\":9.41329,\"111\":0,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0.00626,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.08142,\"94\":1.17744,\"95\":0.28184,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0.00626,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0.00626,\"105\":0,\"106\":0,\"107\":0,\"108\":0.03132,\"109\":2.69309,\"110\":3.48849},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.03132,\"14\":0.72025,\"15\":0.00626,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0.03758,\"13.1\":0.15031,\"14.1\":1.1336,\"15.1\":0.00626,\"15.2-15.3\":0.06263,\"15.4\":0.03132,\"15.5\":0.10021,\"15.6\":0.48851,\"16.0\":0.119,\"16.1\":0.06263,\"16.2\":0.76409,\"16.3\":0.48851,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0,\"8.1-8.4\":0,\"9.0-9.2\":0.02738,\"9.3\":0.07483,\"10.0-10.2\":0.0073,\"10.3\":0.49827,\"11.0-11.2\":0,\"11.3-11.4\":0.01095,\"12.0-12.1\":0.04745,\"12.2-12.5\":2.43475,\"13.0-13.1\":0.02738,\"13.2\":0.00365,\"13.3\":0.02738,\"13.4-13.7\":0.08761,\"14.0-14.4\":0.14784,\"14.5-14.8\":0.68991,\"15.0-15.1\":0.12229,\"15.2-15.3\":0.11681,\"15.4\":0.28107,\"15.5\":0.40883,\"15.6\":1.38712,\"16.0\":0.68078,\"16.1\":3.34915,\"16.2\":3.44589,\"16.3\":1.61526,\"16.4\":0.02373},P:{\"4\":0.20107,\"20\":1.50275,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0,\"8.2\":0,\"9.2\":0,\"10.1\":0,\"11.1-11.2\":0,\"12.0\":0.01058,\"13.0\":0,\"14.0\":0,\"15.0\":0,\"16.0\":0.05291,\"17.0\":0,\"18.0\":0.84662,\"19.0\":2.23296},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0,\"4.4\":0,\"4.4.3-4.4.4\":0.02626},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.01253,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.02616},H:{\"0\":0.1309},L:{\"0\":35.84057},R:{_:\"0\"},M:{\"0\":2.50379},Q:{\"13.1\":0}};\n/data/features/cryptography.js\u0005module.exports={A:{A:{\"2\":\"DC\",\"8\":\"J D E F A\",\"164\":\"B\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"513\":\"C K L G M N O\"},C:{\"1\":\"BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"8\":\"0 1 2 3 4 5 6 7 8 EC uB I w J D E F A B C K L G M N O x g y z FC GC\",\"66\":\"9 AB\"},D:{\"1\":\"EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"8\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB\"},E:{\"1\":\"B C K L G rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"8\":\"I w J D IC 0B JC KC\",\"289\":\"E F A LC MC 1B\"},F:{\"1\":\"1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"8\":\"0 F B C G M N O x g y z QC RC SC TC rB BC UC sB\"},G:{\"1\":\"eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"8\":\"0B VC CC WC XC YC\",\"289\":\"E ZC aC bC cC dC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"8\":\"uB I qC rC sC tC CC uC vC\"},J:{\"8\":\"D A\"},K:{\"1\":\"h\",\"8\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"8\":\"A\",\"164\":\"B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:2,C:\"Web Cryptography\"};\n/data/regions/VC.js\u0010rmodule.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0.0046,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.01379,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0.0046,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0,\"106\":0.0092,\"107\":0,\"108\":0,\"109\":0.6805,\"110\":0.469,\"111\":0.02759,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0.0046,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0.0046,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0.0046,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0.0046,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0.02299,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0.01379,\"83\":0.08276,\"84\":0,\"85\":0,\"86\":0,\"87\":0.0046,\"88\":0.01839,\"89\":0.0046,\"90\":0,\"91\":0.0092,\"92\":0,\"93\":0.02759,\"94\":0.01379,\"95\":0,\"96\":0.0046,\"97\":0.0046,\"98\":0.0046,\"99\":0,\"100\":0.01379,\"101\":0,\"102\":0.01379,\"103\":0.14714,\"104\":0.01839,\"105\":0.0092,\"106\":0.0092,\"107\":0.05518,\"108\":0.55176,\"109\":5.61416,\"110\":3.2094,\"111\":0.0046,\"112\":0.0046,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0.0046,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.0092,\"94\":0.17013,\"95\":0.17013,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0.0046,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.0046,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0.01839,\"108\":0.01839,\"109\":1.18169,\"110\":1.53113},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.0046,\"14\":0.01839,\"15\":0,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0.0046,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0.0046,\"13.1\":0.12874,\"14.1\":0.09656,\"15.1\":0,\"15.2-15.3\":0.03219,\"15.4\":0.01839,\"15.5\":0.05518,\"15.6\":0.47819,\"16.0\":0.01379,\"16.1\":0.15633,\"16.2\":0.29887,\"16.3\":0.44141,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0.0119,\"6.0-6.1\":0,\"7.0-7.1\":0.03767,\"8.1-8.4\":0.07336,\"9.0-9.2\":0,\"9.3\":0.02974,\"10.0-10.2\":0.00793,\"10.3\":0.08526,\"11.0-11.2\":0,\"11.3-11.4\":0,\"12.0-12.1\":0,\"12.2-12.5\":0.75345,\"13.0-13.1\":0.00397,\"13.2\":0,\"13.3\":0,\"13.4-13.7\":0.0119,\"14.0-14.4\":0.04362,\"14.5-14.8\":0.12095,\"15.0-15.1\":0.68603,\"15.2-15.3\":0.03767,\"15.4\":0.11698,\"15.5\":2.93646,\"15.6\":1.70715,\"16.0\":1.6556,\"16.1\":2.89086,\"16.2\":5.12939,\"16.3\":2.09577,\"16.4\":0.00793},P:{\"4\":0.26888,\"20\":0.81784,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0.10083,\"8.2\":0,\"9.2\":0.0112,\"10.1\":0,\"11.1-11.2\":0.02241,\"12.0\":0.0112,\"13.0\":0.0112,\"14.0\":0.04481,\"15.0\":0.03361,\"16.0\":0.02241,\"17.0\":0.04481,\"18.0\":0.02241,\"19.0\":1.16514},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.22219,\"4.2-4.3\":0,\"4.4\":0,\"4.4.3-4.4.4\":0.49992},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0.0092,\"11\":0.01839,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0.01621,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.09724},H:{\"0\":0.02046},L:{\"0\":60.69093},R:{_:\"0\"},M:{\"0\":0.10804},Q:{\"13.1\":0}};\n/data/regions/BJ.js\u0011module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.00265,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0.0053,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0.0053,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.00265,\"94\":0,\"95\":0,\"96\":0.00265,\"97\":0,\"98\":0,\"99\":0,\"100\":0.00265,\"101\":0,\"102\":0.01324,\"103\":0.00265,\"104\":0.00265,\"105\":0.00265,\"106\":0.00265,\"107\":0.00794,\"108\":0.01854,\"109\":0.20919,\"110\":0.14299,\"111\":0.0053,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0.00265,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0.00265,\"36\":0,\"37\":0,\"38\":0.00265,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0.00265,\"45\":0,\"46\":0,\"47\":0.00265,\"48\":0,\"49\":0,\"50\":0.00265,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0.00265,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0.02118,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0.01324,\"71\":0.00265,\"72\":0,\"73\":0,\"74\":0.05296,\"75\":0.00265,\"76\":0.00265,\"77\":0.00794,\"78\":0.02118,\"79\":0.00265,\"80\":0.01059,\"81\":0.01324,\"83\":0,\"84\":0.0053,\"85\":0.00265,\"86\":0.01324,\"87\":0.01324,\"88\":0.01324,\"89\":0.0053,\"90\":0.00265,\"91\":0.0053,\"92\":0.00265,\"93\":0.00265,\"94\":0.01324,\"95\":0.01324,\"96\":0.0053,\"97\":0.00265,\"98\":0.02648,\"99\":0.02383,\"100\":0.00794,\"101\":0.0053,\"102\":0.00794,\"103\":0.01854,\"104\":0.02118,\"105\":0.01854,\"106\":0.01854,\"107\":0.03707,\"108\":0.09003,\"109\":2.0575,\"110\":1.10422,\"111\":0.01059,\"112\":0.02648,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0.00265,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0.00265,\"34\":0,\"35\":0,\"36\":0,\"37\":0.0053,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0.01059,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0.00265,\"56\":0,\"57\":0.0053,\"58\":0.00265,\"60\":0.02913,\"62\":0,\"63\":0.16418,\"64\":0.01059,\"65\":0.0053,\"66\":0.04237,\"67\":0.1324,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0.00265,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0.0053,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0.01589,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0.00265,\"92\":0,\"93\":0,\"94\":0.06885,\"95\":0.08209,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0.0053},B:{\"12\":0.00265,\"13\":0,\"14\":0,\"15\":0.04766,\"16\":0,\"17\":0,\"18\":0.0053,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0.00265,\"85\":0.00265,\"86\":0,\"87\":0,\"88\":0,\"89\":0.00265,\"90\":0,\"91\":0,\"92\":0.00794,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0.00794,\"100\":0.00265,\"101\":0,\"102\":0,\"103\":0,\"104\":0.00265,\"105\":0.00265,\"106\":0.00265,\"107\":0.01059,\"108\":0.01589,\"109\":0.2039,\"110\":0.20125},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0.0053,\"15\":0,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0.0053,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0,\"13.1\":0.00265,\"14.1\":0.00265,\"15.1\":0.00265,\"15.2-15.3\":0.0053,\"15.4\":0,\"15.5\":0.00794,\"15.6\":0.04766,\"16.0\":0.02118,\"16.1\":0.01589,\"16.2\":0.05561,\"16.3\":0.04502,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0.00594,\"5.0-5.1\":0.00297,\"6.0-6.1\":0,\"7.0-7.1\":0.00792,\"8.1-8.4\":0.00297,\"9.0-9.2\":0,\"9.3\":0.04853,\"10.0-10.2\":0,\"10.3\":0.12084,\"11.0-11.2\":0,\"11.3-11.4\":0.00198,\"12.0-12.1\":0.01486,\"12.2-12.5\":0.99249,\"13.0-13.1\":0.05151,\"13.2\":0.0109,\"13.3\":0.07825,\"13.4-13.7\":0.05646,\"14.0-14.4\":0.36649,\"14.5-14.8\":0.82212,\"15.0-15.1\":0.21197,\"15.2-15.3\":0.25951,\"15.4\":0.28824,\"15.5\":0.4596,\"15.6\":0.56063,\"16.0\":0.87858,\"16.1\":1.57689,\"16.2\":1.40949,\"16.3\":0.90235,\"16.4\":0.00693},P:{\"4\":0.06186,\"20\":0.05155,\"5.0-5.4\":0,\"6.2-6.4\":0.38146,\"7.2-7.4\":0.01031,\"8.2\":0,\"9.2\":0.02062,\"10.1\":0.01031,\"11.1-11.2\":0.01031,\"12.0\":0.01031,\"13.0\":0,\"14.0\":0,\"15.0\":0.07217,\"16.0\":0.01031,\"17.0\":0.03093,\"18.0\":0.03093,\"19.0\":0.19588},I:{\"0\":0,\"3\":0,\"4\":0.00092,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.00092,\"4.2-4.3\":0.00828,\"4.4\":0,\"4.4.3-4.4.4\":0.11312},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.0053,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0.07352,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.55875},H:{\"0\":4.94884},L:{\"0\":76.50999},R:{_:\"0\"},M:{\"0\":0.08822},Q:{\"13.1\":0.02206}};\n\"/data/features/css-revert-value.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O P Q R S\"},C:{\"1\":\"gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB FC GC\"},D:{\"1\":\"T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S\"},E:{\"1\":\"A B C K L G MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F IC 0B JC KC LC\"},F:{\"1\":\"h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB QC RC SC TC rB BC UC sB\"},G:{\"1\":\"bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"1\":\"g 5C 6C tB 7C 8C 9C\",\"2\":\"I xC yC zC 0C 1C 1B 2C 3C 4C\"},Q:{\"2\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"2\":\"BD\"}},B:4,C:\"CSS revert value\"};\n/data/regions/KI.js\u00105module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0.03589,\"55\":0,\"56\":0.04142,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0.01104,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0.00276,\"104\":0,\"105\":0,\"106\":0.19051,\"107\":0.01381,\"108\":0.02209,\"109\":0.07455,\"110\":0.19051,\"111\":0.00276,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0.01104,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0.02761,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0.00276,\"75\":0,\"76\":0,\"77\":0,\"78\":0.00276,\"79\":0,\"80\":0,\"81\":0.03313,\"83\":0,\"84\":0.00276,\"85\":0,\"86\":0,\"87\":0,\"88\":0.01381,\"89\":0,\"90\":0.00276,\"91\":0,\"92\":0,\"93\":0,\"94\":0.00276,\"95\":0,\"96\":0,\"97\":0.00276,\"98\":0,\"99\":0.01104,\"100\":0.02209,\"101\":0,\"102\":0.02209,\"103\":0.19879,\"104\":0,\"105\":0,\"106\":0.00828,\"107\":0,\"108\":0.10492,\"109\":2.80794,\"110\":1.39707,\"111\":0,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.02485,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0.00828,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.00828,\"94\":0.01104,\"95\":0,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0.00828},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0.01104,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0.00828,\"85\":0.01381,\"86\":0,\"87\":0,\"88\":0,\"89\":0.00828,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0.00828,\"97\":0,\"98\":0,\"99\":0.00276,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0.00828,\"106\":0.00276,\"107\":0.0497,\"108\":0.05798,\"109\":0.30095,\"110\":0.3755},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0,\"13.1\":0,\"14.1\":0.02485,\"15.1\":0,\"15.2-15.3\":0,\"15.4\":0,\"15.5\":0,\"15.6\":0.00276,\"16.0\":0,\"16.1\":0.01104,\"16.2\":0.05798,\"16.3\":0.14081,\"16.4\":0.00276},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0.01058,\"10.0-10.2\":0,\"10.3\":0.08555,\"11.0-11.2\":0,\"11.3-11.4\":0,\"12.0-12.1\":0,\"12.2-12.5\":0.01058,\"13.0-13.1\":0,\"13.2\":0.09613,\"13.3\":0,\"13.4-13.7\":0.06408,\"14.0-14.4\":0.16021,\"14.5-14.8\":0.14963,\"15.0-15.1\":0.03204,\"15.2-15.3\":0.14963,\"15.4\":0.16021,\"15.5\":0.18168,\"15.6\":0.3422,\"16.0\":0.20314,\"16.1\":0.2778,\"16.2\":0.22461,\"16.3\":0.90869,\"16.4\":0},P:{\"4\":0.10032,\"20\":0.05016,\"5.0-5.4\":0.35111,\"6.2-6.4\":0,\"7.2-7.4\":0.78246,\"8.2\":0,\"9.2\":0.03009,\"10.1\":0,\"11.1-11.2\":0.06019,\"12.0\":0,\"13.0\":0.08025,\"14.0\":0.03009,\"15.0\":0.10032,\"16.0\":0.3812,\"17.0\":0.04013,\"18.0\":0.14044,\"19.0\":0.53167},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0.00905,\"4.4\":0,\"4.4.3-4.4.4\":0.0996},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.04142,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.51397},H:{\"0\":0.40435},L:{\"0\":85.01169},R:{_:\"0\"},M:{\"0\":0.78905},Q:{\"13.1\":0}};\n/data/regions/KE.js\u0012&module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0.00244,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0.00244,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.00731,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0.00487,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0.00244,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.00244,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0.00244,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0.00244,\"100\":0,\"101\":0,\"102\":0.00731,\"103\":0.00244,\"104\":0.00244,\"105\":0.00487,\"106\":0.00487,\"107\":0.00731,\"108\":0.01462,\"109\":0.23873,\"110\":0.16078,\"111\":0.00974,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0.00244,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0.00244,\"55\":0,\"56\":0.00244,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0.00244,\"63\":0.00244,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0.00244,\"70\":0.00244,\"71\":0,\"72\":0.00244,\"73\":0.00244,\"74\":0.00731,\"75\":0,\"76\":0,\"77\":0,\"78\":0.00244,\"79\":0.00731,\"80\":0.00244,\"81\":0.00487,\"83\":0.00731,\"84\":0,\"85\":0.00244,\"86\":0.00244,\"87\":0.00731,\"88\":0.00244,\"89\":0.00244,\"90\":0.00244,\"91\":0.00244,\"92\":0.00487,\"93\":0.01462,\"94\":0.00244,\"95\":0.00487,\"96\":0.01705,\"97\":0.00244,\"98\":0.00244,\"99\":0.00487,\"100\":0.00487,\"101\":0.00731,\"102\":0.00487,\"103\":0.02923,\"104\":0.00487,\"105\":0.00974,\"106\":0.00974,\"107\":0.02192,\"108\":0.08282,\"109\":1.89521,\"110\":1.13518,\"111\":0.00731,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0.00244,\"21\":0,\"22\":0,\"23\":0,\"24\":0.00487,\"25\":0,\"26\":0.00731,\"27\":0.00974,\"28\":0.00974,\"29\":0,\"30\":0.01705,\"31\":0.00244,\"32\":0.00731,\"33\":0.00974,\"34\":0,\"35\":0,\"36\":0,\"37\":0.00487,\"38\":0.00487,\"39\":0,\"40\":0,\"41\":0,\"42\":0.00487,\"43\":0,\"44\":0,\"45\":0.00244,\"46\":0.00974,\"47\":0.00487,\"48\":0,\"49\":0,\"50\":0.00487,\"51\":0.00731,\"52\":0,\"53\":0,\"54\":0.01218,\"55\":0.00487,\"56\":0.00487,\"57\":0.00731,\"58\":0.02923,\"60\":0.10231,\"62\":0.00487,\"63\":0.2436,\"64\":0.25334,\"65\":0.1827,\"66\":0.6358,\"67\":1.69302,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0.01218,\"73\":0.01705,\"74\":0.00731,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0.00244,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.00487,\"94\":0.05846,\"95\":0.07308,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0.0268},B:{\"12\":0.00244,\"13\":0,\"14\":0,\"15\":0,\"16\":0.00244,\"17\":0,\"18\":0.00487,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0.00244,\"90\":0,\"91\":0,\"92\":0.00487,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0.00244,\"106\":0.00244,\"107\":0.00487,\"108\":0.00731,\"109\":0.14372,\"110\":0.18514},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0.00244,\"15\":0.00244,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0.00244,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0,\"13.1\":0.00487,\"14.1\":0.00731,\"15.1\":0.00244,\"15.2-15.3\":0,\"15.4\":0.00244,\"15.5\":0.00244,\"15.6\":0.01705,\"16.0\":0.00244,\"16.1\":0.01462,\"16.2\":0.01705,\"16.3\":0.01705,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0.00623,\"6.0-6.1\":0.00255,\"7.0-7.1\":0.03315,\"8.1-8.4\":0.00028,\"9.0-9.2\":0.00057,\"9.3\":0.02097,\"10.0-10.2\":0.00142,\"10.3\":0.02238,\"11.0-11.2\":0.00425,\"11.3-11.4\":0.00623,\"12.0-12.1\":0.0051,\"12.2-12.5\":0.18246,\"13.0-13.1\":0.00255,\"13.2\":0.00113,\"13.3\":0.01247,\"13.4-13.7\":0.01672,\"14.0-14.4\":0.06771,\"14.5-14.8\":0.06913,\"15.0-15.1\":0.02861,\"15.2-15.3\":0.05128,\"15.4\":0.04561,\"15.5\":0.11786,\"15.6\":0.20965,\"16.0\":0.22892,\"16.1\":0.47427,\"16.2\":0.52527,\"16.3\":0.33205,\"16.4\":0.0017},P:{\"4\":0.1517,\"20\":0.14159,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0.06068,\"8.2\":0,\"9.2\":0,\"10.1\":0,\"11.1-11.2\":0.04045,\"12.0\":0.01011,\"13.0\":0.01011,\"14.0\":0.02023,\"15.0\":0.01011,\"16.0\":0.03034,\"17.0\":0.02023,\"18.0\":0.03034,\"19.0\":0.37421},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.00166,\"4.2-4.3\":0.0083,\"4.4\":0,\"4.4.3-4.4.4\":0.04979},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.04141,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0.00756,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.18154},H:{\"0\":33.82907},L:{\"0\":46.71429},R:{_:\"0\"},M:{\"0\":0.15884},Q:{\"13.1\":0}};\n/data/features/details.js\u0006\u000fmodule.exports={A:{A:{\"2\":\"F A B DC\",\"8\":\"J D E\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"1\":\"QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC\",\"8\":\"0 1 2 3 4 5 6 7 8 9 uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB FC GC\",\"194\":\"OB PB\"},D:{\"1\":\"DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"8\":\"I w J D E F A B\",\"257\":\"0 1 2 3 4 5 6 7 8 9 x g y z AB BB CB\",\"769\":\"C K L G M N O\"},E:{\"1\":\"C K L G sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"8\":\"I w IC 0B JC\",\"257\":\"J D E F A KC LC MC\",\"1025\":\"B 1B rB\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"C rB BC UC sB\",\"8\":\"F B QC RC SC TC\"},G:{\"1\":\"E XC YC ZC aC bC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"8\":\"0B VC CC WC\",\"1025\":\"cC dC eC\"},H:{\"8\":\"pC\"},I:{\"1\":\"I H tC CC uC vC\",\"8\":\"uB qC rC sC\"},J:{\"1\":\"A\",\"8\":\"D\"},K:{\"1\":\"h\",\"8\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:1,C:\"Details & Summary elements\"};\n/data/features/transforms2d.js\u0005module.exports={A:{A:{\"2\":\"DC\",\"8\":\"J D E\",\"129\":\"A B\",\"161\":\"F\"},B:{\"1\":\"N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"129\":\"C K L G M\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB\",\"33\":\"I w J D E F A B C K L G FC GC\"},D:{\"1\":\"DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"33\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB\"},E:{\"1\":\"F A B C K L G MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"33\":\"I w J D E IC 0B JC KC LC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e sB\",\"2\":\"F QC RC\",\"33\":\"B C G M N O x g y z SC TC rB BC UC\"},G:{\"1\":\"aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"33\":\"E 0B VC CC WC XC YC ZC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"33\":\"uB I qC rC sC tC CC uC vC\"},J:{\"33\":\"D A\"},K:{\"1\":\"B C h rB BC sB\",\"2\":\"A\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:4,C:\"CSS3 2D Transforms\"};\n/data/features/xhtmlsmil.js\u0005module.exports={A:{A:{\"2\":\"F A B DC\",\"4\":\"J D E\"},B:{\"2\":\"C K L G M N O\",\"8\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"8\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"8\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"8\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"8\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\"},G:{\"8\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"8\":\"pC\"},I:{\"8\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"8\":\"D A\"},K:{\"8\":\"A B C h rB BC sB\"},L:{\"8\":\"H\"},M:{\"8\":\"f\"},N:{\"2\":\"A B\"},O:{\"8\":\"wC\"},P:{\"8\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"8\":\"2B\"},R:{\"8\":\"AD\"},S:{\"8\":\"BD CD\"}},B:7,C:\"XHTML+SMIL animation\"};\n$/data/features/html-media-capture.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"2\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\"},G:{\"2\":\"0B VC CC WC\",\"129\":\"E XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"1\":\"uB I H tC CC uC vC\",\"2\":\"qC\",\"257\":\"rC sC\"},J:{\"1\":\"A\",\"16\":\"D\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"516\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"16\":\"2B\"},R:{\"1\":\"AD\"},S:{\"2\":\"BD CD\"}},B:2,C:\"HTML Media Capture\"};\n/data/features/script-async.js\u0005module.exports={A:{A:{\"1\":\"A B\",\"2\":\"J D E F DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB GC\",\"2\":\"EC uB FC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"I w J D\"},E:{\"1\":\"J D E F A B C K L G JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I IC 0B\",\"132\":\"w\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F B C QC RC SC TC rB BC UC sB\"},G:{\"1\":\"E WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC CC\"},H:{\"2\":\"pC\"},I:{\"1\":\"uB I H tC CC uC vC\",\"2\":\"qC rC sC\"},J:{\"1\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:1,C:\"async attribute for external scripts\"};\n/data/regions/KH.js\u0011module.exports={C:{\"2\":0,\"3\":0,\"4\":0.00358,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0.00358,\"51\":0.00717,\"52\":0.01433,\"53\":0,\"54\":0,\"55\":0,\"56\":0.00358,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0.00358,\"65\":0,\"66\":0,\"67\":0,\"68\":0.00717,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.00358,\"79\":0.00717,\"80\":0.01075,\"81\":0.01075,\"82\":0.00717,\"83\":0.00358,\"84\":0,\"85\":0,\"86\":0.00358,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0.01075,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0.00717,\"103\":0.00717,\"104\":0.00358,\"105\":0.00717,\"106\":0.00358,\"107\":0.0215,\"108\":0.01792,\"109\":0.35113,\"110\":0.26514,\"111\":0.01075,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0.00717,\"39\":0,\"40\":0,\"41\":0.00717,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0.00358,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0.02866,\"57\":0.00358,\"58\":0.00717,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0.00358,\"64\":0,\"65\":0.00358,\"66\":0,\"67\":0,\"68\":0.00358,\"69\":0,\"70\":0.00717,\"71\":0,\"72\":0.00358,\"73\":0.00358,\"74\":0.00358,\"75\":0.00358,\"76\":0.00358,\"77\":0,\"78\":0.00717,\"79\":0.0215,\"80\":0.00358,\"81\":0.00358,\"83\":0.03941,\"84\":0.043,\"85\":0.07166,\"86\":0.03941,\"87\":0.02866,\"88\":0.00717,\"89\":0.00358,\"90\":0.00358,\"91\":0.00717,\"92\":0.03225,\"93\":0,\"94\":0,\"95\":0.00717,\"96\":0.0215,\"97\":0.01075,\"98\":0.01075,\"99\":0.00717,\"100\":0.01075,\"101\":0.01433,\"102\":0.01433,\"103\":0.07166,\"104\":0.02508,\"105\":0.11107,\"106\":0.01792,\"107\":0.03941,\"108\":0.17198,\"109\":4.20286,\"110\":3.43968,\"111\":0.00717,\"112\":0.00717,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0.00717,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0.00358,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.01433,\"68\":0,\"69\":0,\"70\":0.00358,\"71\":0,\"72\":0,\"73\":0.00358,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0.00358,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.00358,\"94\":0.15049,\"95\":0.18273,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0.00358,\"15\":0,\"16\":0,\"17\":0,\"18\":0.00717,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0.00717,\"86\":0.00717,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.01075,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0.00358,\"103\":0,\"104\":0,\"105\":0,\"106\":0.00358,\"107\":0.00358,\"108\":0.01075,\"109\":0.27589,\"110\":0.38696},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0.00717,\"11\":0,\"12\":0,\"13\":0.01075,\"14\":0.03583,\"15\":0.01075,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0.00358,\"10.1\":0,\"11.1\":0,\"12.1\":0.00358,\"13.1\":0.02866,\"14.1\":0.07524,\"15.1\":0.01792,\"15.2-15.3\":0.01075,\"15.4\":0.03583,\"15.5\":0.06449,\"15.6\":0.21856,\"16.0\":0.02866,\"16.1\":0.10749,\"16.2\":0.17198,\"16.3\":0.11466,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0.00378,\"6.0-6.1\":0,\"7.0-7.1\":0.01133,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0.09823,\"10.0-10.2\":0.03778,\"10.3\":0.07934,\"11.0-11.2\":0.01889,\"11.3-11.4\":0.068,\"12.0-12.1\":0.04911,\"12.2-12.5\":1.85125,\"13.0-13.1\":0.05289,\"13.2\":0.04156,\"13.3\":0.10579,\"13.4-13.7\":0.40803,\"14.0-14.4\":1.35632,\"14.5-14.8\":2.40284,\"15.0-15.1\":0.66116,\"15.2-15.3\":0.66872,\"15.4\":0.95207,\"15.5\":1.54522,\"15.6\":4.46944,\"16.0\":4.24275,\"16.1\":6.21867,\"16.2\":5.70486,\"16.3\":3.64582,\"16.4\":0.034},P:{\"4\":0.1119,\"20\":0.55948,\"5.0-5.4\":0.02034,\"6.2-6.4\":0,\"7.2-7.4\":0.01017,\"8.2\":0,\"9.2\":0,\"10.1\":0.01017,\"11.1-11.2\":0.01017,\"12.0\":0.01017,\"13.0\":0.02034,\"14.0\":0,\"15.0\":0.01017,\"16.0\":0.04069,\"17.0\":0.04069,\"18.0\":0.06103,\"19.0\":0.885},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0.0246,\"4.4\":0,\"4.4.3-4.4.4\":0.05331},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0.01514,\"9\":0.00379,\"10\":0.00379,\"11\":0.44666,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.93047},H:{\"0\":0.51032},L:{\"0\":48.06602},R:{_:\"0\"},M:{\"0\":0.23101},Q:{\"13.1\":0.01283}};\n(/data/features/css-boxdecorationbreak.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"2\":\"C K L G M N O\",\"164\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 EC uB I w J D E F A B C K L G M N O x g y z FC GC\"},D:{\"2\":\"I w J D E F A B C K L G M N O x g y\",\"164\":\"0 1 2 3 4 5 6 7 8 9 z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"2\":\"I w J IC 0B JC\",\"164\":\"D E F A B C K L G KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"2\":\"F QC RC SC TC\",\"129\":\"B C rB BC UC sB\",\"164\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\"},G:{\"2\":\"0B VC CC WC XC\",\"164\":\"E YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"132\":\"pC\"},I:{\"2\":\"uB I qC rC sC tC CC\",\"164\":\"H uC vC\"},J:{\"2\":\"D\",\"164\":\"A\"},K:{\"2\":\"A\",\"129\":\"B C rB BC sB\",\"164\":\"h\"},L:{\"164\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"164\":\"wC\"},P:{\"164\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"164\":\"2B\"},R:{\"164\":\"AD\"},S:{\"1\":\"BD CD\"}},B:4,C:\"CSS box-decoration-break\"};\n/data/features/online-status.js\u0005module.exports={A:{A:{\"1\":\"F A B\",\"2\":\"J D DC\",\"260\":\"E\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\",\"2\":\"EC uB\",\"516\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"I w J D E F A B C K\"},E:{\"1\":\"w J D E F A B C K L G JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I IC 0B\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F B C QC RC SC TC rB BC UC\",\"4\":\"sB\"},G:{\"1\":\"E CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"16\":\"0B VC\"},H:{\"2\":\"pC\"},I:{\"1\":\"uB I H sC tC CC uC vC\",\"16\":\"qC rC\"},J:{\"1\":\"A\",\"132\":\"D\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:1,C:\"Online/offline status\"};\n/data/features/webusb.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"1\":\"wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB\",\"66\":\"VB WB XB YB ZB vB aB\"},E:{\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB QC RC SC TC rB BC UC sB\",\"66\":\"IB JB KB LB MB NB OB\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I xC yC zC\"},Q:{\"2\":\"2B\"},R:{\"1\":\"AD\"},S:{\"2\":\"BD CD\"}},B:7,C:\"WebUSB\"};\n/data/features/html5semantic.js\u0006\u001cmodule.exports={A:{A:{\"2\":\"DC\",\"8\":\"J D E\",\"260\":\"F A B\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC\",\"132\":\"uB FC GC\",\"260\":\"I w J D E F A B C K L G M N O x g\"},D:{\"1\":\"3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"132\":\"I w\",\"260\":\"0 1 2 J D E F A B C K L G M N O x g y z\"},E:{\"1\":\"D E F A B C K L G KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"132\":\"I IC 0B\",\"260\":\"w J JC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"132\":\"F B QC RC SC TC\",\"260\":\"C rB BC UC sB\"},G:{\"1\":\"E YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"132\":\"0B\",\"260\":\"VC CC WC XC\"},H:{\"132\":\"pC\"},I:{\"1\":\"H uC vC\",\"132\":\"qC\",\"260\":\"uB I rC sC tC CC\"},J:{\"260\":\"D A\"},K:{\"1\":\"h\",\"132\":\"A\",\"260\":\"B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"260\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:1,C:\"HTML5 semantic elements\"};\n/data/regions/BF.js\u0011_module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0.00259,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.00259,\"53\":0,\"54\":0,\"55\":0,\"56\":0.00259,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0.01811,\"73\":0,\"74\":0,\"75\":0.00259,\"76\":0,\"77\":0,\"78\":0.00517,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0.00259,\"97\":0,\"98\":0,\"99\":0.00259,\"100\":0,\"101\":0,\"102\":0.06209,\"103\":0.00259,\"104\":0.00259,\"105\":0.00259,\"106\":0.00517,\"107\":0.00776,\"108\":0.03622,\"109\":0.45531,\"110\":0.33631,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.02846,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0.00259,\"38\":0,\"39\":0.00259,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0.00259,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0.00517,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0.01035,\"80\":0,\"81\":0.00517,\"83\":0.00259,\"84\":0,\"85\":0,\"86\":0.03104,\"87\":0.00776,\"88\":0.00259,\"89\":0.03104,\"90\":0.0207,\"91\":0.00259,\"92\":0.00259,\"93\":0.00259,\"94\":0.00259,\"95\":0.00776,\"96\":0.00259,\"97\":0.00259,\"98\":0.00259,\"99\":0.00259,\"100\":0,\"101\":0.00517,\"102\":0.01552,\"103\":0.00517,\"104\":0.00259,\"105\":0.01294,\"106\":0.01294,\"107\":0.01035,\"108\":0.05433,\"109\":1.57548,\"110\":0.94943,\"111\":0,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0.00259,\"29\":0,\"30\":0.00259,\"31\":0,\"32\":0.01294,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0.00776,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0.00259,\"43\":0,\"44\":0,\"45\":0,\"46\":0.01811,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0.01552,\"60\":0.04139,\"62\":0,\"63\":0.04915,\"64\":0.00517,\"65\":0.00259,\"66\":0.05691,\"67\":0.19661,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0.00259,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0.00259,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0.06209,\"95\":0.11642,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0.00259},B:{\"12\":0.00517,\"13\":0,\"14\":0.08537,\"15\":0,\"16\":0,\"17\":0.00259,\"18\":0.00776,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0.00259,\"90\":0,\"91\":0,\"92\":0.00776,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0.00259,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0,\"106\":0.00259,\"107\":0.01035,\"108\":0.03881,\"109\":0.36994,\"110\":0.39322},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0,\"13.1\":0.02587,\"14.1\":0.00517,\"15.1\":0,\"15.2-15.3\":0,\"15.4\":0.00259,\"15.5\":0.00259,\"15.6\":0.00776,\"16.0\":0.00259,\"16.1\":0.00259,\"16.2\":0.01294,\"16.3\":0.04139,\"16.4\":0},G:{\"8\":0.00316,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0.00189,\"6.0-6.1\":0,\"7.0-7.1\":0,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0.10611,\"10.0-10.2\":0,\"10.3\":0.01832,\"11.0-11.2\":0.02716,\"11.3-11.4\":0.00126,\"12.0-12.1\":0.15411,\"12.2-12.5\":0.85579,\"13.0-13.1\":0.00568,\"13.2\":0.00189,\"13.3\":0.01705,\"13.4-13.7\":0.01768,\"14.0-14.4\":0.25137,\"14.5-14.8\":0.14147,\"15.0-15.1\":0.08211,\"15.2-15.3\":0.10674,\"15.4\":0.13074,\"15.5\":0.22674,\"15.6\":0.20779,\"16.0\":0.67516,\"16.1\":0.62084,\"16.2\":0.91895,\"16.3\":1.26569,\"16.4\":0.01326},P:{\"4\":0.03048,\"20\":0.30483,\"5.0-5.4\":0,\"6.2-6.4\":0.01016,\"7.2-7.4\":0.06097,\"8.2\":0,\"9.2\":0.04064,\"10.1\":0,\"11.1-11.2\":0.01016,\"12.0\":0,\"13.0\":0.02032,\"14.0\":0.01016,\"15.0\":0.01016,\"16.0\":0.02032,\"17.0\":0.06097,\"18.0\":0.14225,\"19.0\":0.45724},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.00573,\"4.2-4.3\":0.01145,\"4.4\":0,\"4.4.3-4.4.4\":0.27834},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.02328,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0.01483,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0.00741},O:{\"0\":0.60045},H:{\"0\":4.58987},L:{\"0\":80.02752},R:{_:\"0\"},M:{\"0\":0.1112},Q:{\"13.1\":0.02965}};\n/data/regions/MN.js\u0011smodule.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.00403,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.00403,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.00403,\"94\":0,\"95\":0.00403,\"96\":0,\"97\":0,\"98\":0,\"99\":0.00807,\"100\":0,\"101\":0,\"102\":0.0121,\"103\":0.00403,\"104\":0.02017,\"105\":0.03226,\"106\":0.04033,\"107\":0.02017,\"108\":0.0605,\"109\":0.40733,\"110\":0.16939,\"111\":0.00403,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0.00403,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0.00403,\"70\":0.00403,\"71\":0.00403,\"72\":0,\"73\":0,\"74\":0.0121,\"75\":0.00403,\"76\":0,\"77\":0.00403,\"78\":0.00403,\"79\":0.0121,\"80\":0.0121,\"81\":0.00807,\"83\":0.00403,\"84\":0,\"85\":0.00807,\"86\":0.00807,\"87\":0.0121,\"88\":0.00807,\"89\":0.00403,\"90\":0.00403,\"91\":0.00403,\"92\":0.02823,\"93\":0.00403,\"94\":0.00403,\"95\":0.0121,\"96\":0.01613,\"97\":0.00807,\"98\":0.0121,\"99\":0.00807,\"100\":0.02823,\"101\":0.00807,\"102\":0.01613,\"103\":0.07259,\"104\":0.02017,\"105\":0.14519,\"106\":0.05646,\"107\":0.08469,\"108\":0.25005,\"109\":6.93273,\"110\":3.08121,\"111\":0.00403,\"112\":0.00403,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0.00403,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0.00403,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.00403,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.0242,\"94\":0.30248,\"95\":0.27424,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0.00403,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0.00403,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0.00403,\"85\":0,\"86\":0,\"87\":0,\"88\":0.00403,\"89\":0.00403,\"90\":0,\"91\":0,\"92\":0.0121,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0.00403,\"100\":0.00403,\"101\":0.00403,\"102\":0,\"103\":0,\"104\":0,\"105\":0.00807,\"106\":0.00403,\"107\":0.0363,\"108\":0.04436,\"109\":0.7824,\"110\":0.72594},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.00403,\"14\":0.02823,\"15\":0.02017,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0.00403,\"13.1\":0.0363,\"14.1\":0.08066,\"15.1\":0.0242,\"15.2-15.3\":0.02823,\"15.4\":0.02017,\"15.5\":0.04436,\"15.6\":0.19762,\"16.0\":0.05646,\"16.1\":0.11292,\"16.2\":0.15325,\"16.3\":0.12502,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0.01397,\"7.0-7.1\":0.01048,\"8.1-8.4\":0,\"9.0-9.2\":0.00349,\"9.3\":0.05938,\"10.0-10.2\":0,\"10.3\":0.05938,\"11.0-11.2\":0.01397,\"11.3-11.4\":0.02096,\"12.0-12.1\":0.01048,\"12.2-12.5\":0.82785,\"13.0-13.1\":0.03842,\"13.2\":0.00349,\"13.3\":0.05589,\"13.4-13.7\":0.15719,\"14.0-14.4\":0.6532,\"14.5-14.8\":1.10729,\"15.0-15.1\":0.45759,\"15.2-15.3\":0.4506,\"15.4\":0.69162,\"15.5\":0.97456,\"15.6\":2.25301,\"16.0\":6.01851,\"16.1\":6.75554,\"16.2\":7.51353,\"16.3\":3.84933,\"16.4\":0.01048},P:{\"4\":0.25401,\"20\":1.00588,\"5.0-5.4\":0.02032,\"6.2-6.4\":0.01016,\"7.2-7.4\":0.13209,\"8.2\":0,\"9.2\":0.03048,\"10.1\":0,\"11.1-11.2\":0.03048,\"12.0\":0.01016,\"13.0\":0.08128,\"14.0\":0.0508,\"15.0\":0.06096,\"16.0\":0.13209,\"17.0\":0.13209,\"18.0\":0.12192,\"19.0\":2.33689},I:{\"0\":0,\"3\":0,\"4\":0.01296,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.00778,\"4.2-4.3\":0.01037,\"4.4\":0,\"4.4.3-4.4.4\":0.07519},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0.00807,\"9\":0,\"10\":0.00403,\"11\":0.0242,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.17901},H:{\"0\":0.16383},L:{\"0\":45.75933},R:{_:\"0\"},M:{\"0\":0.17901},Q:{\"13.1\":0}};\n\"/data/features/text-size-adjust.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"33\":\"C K L G M N O\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"1\":\"VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB\",\"258\":\"3\"},E:{\"2\":\"I w J D E F A B C K L G IC 0B KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"258\":\"JC\"},F:{\"1\":\"KB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB LB QC RC SC TC rB BC UC sB\"},G:{\"2\":\"0B VC CC\",\"33\":\"E WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"33\":\"f\"},N:{\"161\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"2\":\"BD CD\"}},B:7,C:\"CSS text-size-adjust\"};\n/data/regions/CU.js\u0013\u000fmodule.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0.00222,\"34\":0.00222,\"35\":0.00222,\"36\":0,\"37\":0.00444,\"38\":0,\"39\":0,\"40\":0.00222,\"41\":0,\"42\":0.01555,\"43\":0,\"44\":0,\"45\":0.00222,\"46\":0.00222,\"47\":0.00222,\"48\":0.00222,\"49\":0.00222,\"50\":0.00889,\"51\":0,\"52\":0.01778,\"53\":0,\"54\":0.02889,\"55\":0,\"56\":0.00222,\"57\":0.00889,\"58\":0.00222,\"59\":0.00444,\"60\":0.00222,\"61\":0.00222,\"62\":0.00444,\"63\":0.00222,\"64\":0.00444,\"65\":0.00444,\"66\":0.00222,\"67\":0.00444,\"68\":0.01111,\"69\":0.00444,\"70\":0.00222,\"71\":0.00444,\"72\":0.01778,\"73\":0.00222,\"74\":0,\"75\":0.00222,\"76\":0,\"77\":0.00222,\"78\":0.00444,\"79\":0,\"80\":0.00222,\"81\":0.00444,\"82\":0.00444,\"83\":0.00444,\"84\":0.00667,\"85\":0.00444,\"86\":0.00222,\"87\":0.00222,\"88\":0.00667,\"89\":0.00889,\"90\":0.00444,\"91\":0.01778,\"92\":0.00444,\"93\":0.00667,\"94\":0.01333,\"95\":0.01111,\"96\":0.01333,\"97\":0.01778,\"98\":0.01333,\"99\":0.02666,\"100\":0.02222,\"101\":0.01778,\"102\":0.05555,\"103\":0.01333,\"104\":0.03555,\"105\":0.01333,\"106\":0.02666,\"107\":0.04666,\"108\":0.08888,\"109\":0.83547,\"110\":0.47329,\"111\":0.00889,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0.00222,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0.00222,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0.00222,\"50\":0,\"51\":0.01111,\"52\":0,\"53\":0,\"54\":0.00222,\"55\":0,\"56\":0,\"57\":0,\"58\":0.00222,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.00444,\"68\":0,\"69\":0.01555,\"70\":0.00222,\"71\":0.00444,\"72\":0.00222,\"73\":0,\"74\":0.03777,\"75\":0.00444,\"76\":0.02,\"77\":0.00444,\"78\":0,\"79\":0.00444,\"80\":0.00444,\"81\":0.00667,\"83\":0.00222,\"84\":0,\"85\":0.00222,\"86\":0.00444,\"87\":0.00444,\"88\":0.02889,\"89\":0.00667,\"90\":0.01778,\"91\":0.00444,\"92\":0.00222,\"93\":0,\"94\":0.00222,\"95\":0.00667,\"96\":0.00444,\"97\":0.00667,\"98\":0.00222,\"99\":0.00222,\"100\":0.00889,\"101\":0.00444,\"102\":0.01111,\"103\":0.01111,\"104\":0.00667,\"105\":0.01111,\"106\":0.01333,\"107\":0.02,\"108\":0.05777,\"109\":0.62438,\"110\":0.32663,\"111\":0,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0.00222,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0.00222,\"56\":0,\"57\":0,\"58\":0,\"60\":0.00222,\"62\":0,\"63\":0.00222,\"64\":0.00222,\"65\":0,\"66\":0,\"67\":0.01111,\"68\":0,\"69\":0.00222,\"70\":0,\"71\":0,\"72\":0,\"73\":0.00444,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0.00444,\"80\":0,\"81\":0,\"82\":0.00222,\"83\":0,\"84\":0,\"85\":0,\"86\":0.00222,\"87\":0,\"88\":0,\"89\":0,\"90\":0.00222,\"91\":0.00222,\"92\":0.00222,\"93\":0.00444,\"94\":0.06666,\"95\":0.08888,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0.00222,\"13\":0.00222,\"14\":0.00222,\"15\":0.00222,\"16\":0.00222,\"17\":0.00222,\"18\":0.01333,\"79\":0,\"80\":0,\"81\":0.00222,\"83\":0,\"84\":0.00444,\"85\":0.00222,\"86\":0,\"87\":0,\"88\":0,\"89\":0.00222,\"90\":0.00889,\"91\":0,\"92\":0.01555,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0.00667,\"101\":0,\"102\":0,\"103\":0.00222,\"104\":0,\"105\":0.00222,\"106\":0.00444,\"107\":0.00889,\"108\":0.01778,\"109\":0.13332,\"110\":0.10221},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.00222,\"14\":0.00222,\"15\":0,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0.00444,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0,\"13.1\":0.00222,\"14.1\":0.00222,\"15.1\":0,\"15.2-15.3\":0,\"15.4\":0.02444,\"15.5\":0.03555,\"15.6\":0.02,\"16.0\":0,\"16.1\":0.00889,\"16.2\":0.01333,\"16.3\":0.02222,\"16.4\":0},G:{\"8\":0.00265,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0.06443,\"8.1-8.4\":0.04148,\"9.0-9.2\":0,\"9.3\":0.03354,\"10.0-10.2\":0.0053,\"10.3\":0.09003,\"11.0-11.2\":0.01765,\"11.3-11.4\":0.00177,\"12.0-12.1\":0.01324,\"12.2-12.5\":1.32218,\"13.0-13.1\":0.03795,\"13.2\":0.03089,\"13.3\":0.09621,\"13.4-13.7\":0.173,\"14.0-14.4\":0.63373,\"14.5-14.8\":0.71669,\"15.0-15.1\":0.31157,\"15.2-15.3\":0.37247,\"15.4\":0.18623,\"15.5\":0.34599,\"15.6\":0.55606,\"16.0\":0.42454,\"16.1\":0.85703,\"16.2\":0.97089,\"16.3\":0.83408,\"16.4\":0.00265},P:{\"4\":0.28472,\"20\":0.15253,\"5.0-5.4\":0.02034,\"6.2-6.4\":0.02034,\"7.2-7.4\":0.24404,\"8.2\":0,\"9.2\":0.03051,\"10.1\":0,\"11.1-11.2\":0.08135,\"12.0\":0.01017,\"13.0\":0.06101,\"14.0\":0.10168,\"15.0\":0.05084,\"16.0\":0.1627,\"17.0\":0.18303,\"18.0\":0.08135,\"19.0\":0.73213},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.00424,\"4.2-4.3\":0.02968,\"4.4\":0,\"4.4.3-4.4.4\":0.1894},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.00667,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.10111},H:{\"0\":0.69955},L:{\"0\":83.02923},R:{_:\"0\"},M:{\"0\":0.70002},Q:{\"13.1\":0.00778}};\n/data/regions/SO.js\u0011Amodule.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0.00658,\"106\":0,\"107\":0,\"108\":0.00658,\"109\":0.1097,\"110\":0.1097,\"111\":0.00878,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0.00219,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0.00219,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0.00219,\"65\":0,\"66\":0,\"67\":0.00219,\"68\":0.02413,\"69\":0.01316,\"70\":0.00439,\"71\":0,\"72\":0.00219,\"73\":0,\"74\":0.00878,\"75\":0.04169,\"76\":0,\"77\":0.00439,\"78\":0,\"79\":0.01097,\"80\":0.00219,\"81\":0.01755,\"83\":0.00439,\"84\":0,\"85\":0,\"86\":0,\"87\":0.05704,\"88\":0.00219,\"89\":0,\"90\":0.00219,\"91\":0.00878,\"92\":0.00658,\"93\":0.00878,\"94\":0.01755,\"95\":0.00219,\"96\":0.01975,\"97\":0,\"98\":0.00219,\"99\":0.0373,\"100\":0.00219,\"101\":0.00658,\"102\":0.01097,\"103\":0.04169,\"104\":0.02413,\"105\":0.01755,\"106\":0.00878,\"107\":0.03072,\"108\":0.13164,\"109\":1.63453,\"110\":1.38661,\"111\":0.00439,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0.00219,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0.01097,\"60\":0.01097,\"62\":0,\"63\":0.01316,\"64\":0.00439,\"65\":0.00219,\"66\":0.00658,\"67\":0.1821,\"68\":0.00219,\"69\":0,\"70\":0,\"71\":0,\"72\":0.00219,\"73\":0.00219,\"74\":0.00439,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.00658,\"94\":0.05046,\"95\":0.05266,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0.00439,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0.00219,\"18\":0.00658,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0.00219,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0.00219,\"90\":0.00219,\"91\":0,\"92\":0.00878,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0.00219,\"106\":0.00219,\"107\":0.00439,\"108\":0.01316,\"109\":0.17991,\"110\":0.23256},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.00219,\"14\":0.00658,\"15\":0.00439,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0.00658,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0,\"13.1\":0.00219,\"14.1\":0.02413,\"15.1\":0.00219,\"15.2-15.3\":0.00219,\"15.4\":0.00439,\"15.5\":0.00439,\"15.6\":0.04827,\"16.0\":0.00439,\"16.1\":0.01097,\"16.2\":0.01536,\"16.3\":0.02413,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0.00258,\"7.0-7.1\":0.00258,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0.02453,\"10.0-10.2\":0,\"10.3\":0.03614,\"11.0-11.2\":0.00516,\"11.3-11.4\":0.01678,\"12.0-12.1\":0.02065,\"12.2-12.5\":0.70865,\"13.0-13.1\":0.02582,\"13.2\":0.01162,\"13.3\":0.07616,\"13.4-13.7\":0.20136,\"14.0-14.4\":0.67509,\"14.5-14.8\":0.78997,\"15.0-15.1\":0.38595,\"15.2-15.3\":0.29172,\"15.4\":0.33044,\"15.5\":0.63378,\"15.6\":0.74092,\"16.0\":1.56315,\"16.1\":1.85745,\"16.2\":1.76193,\"16.3\":1.6548,\"16.4\":0.01033},P:{\"4\":0.16247,\"20\":0.49756,\"5.0-5.4\":0.02031,\"6.2-6.4\":0.05077,\"7.2-7.4\":0.86311,\"8.2\":0,\"9.2\":0.19293,\"10.1\":0,\"11.1-11.2\":0.08123,\"12.0\":0.01015,\"13.0\":0.06093,\"14.0\":0.15231,\"15.0\":0.15231,\"16.0\":0.27417,\"17.0\":0.22339,\"18.0\":0.29447,\"19.0\":1.85823},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0.049,\"4.4\":0,\"4.4.3-4.4.4\":0.17294},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.00219,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":1.56901},H:{\"0\":2.16533},L:{\"0\":72.3238},R:{_:\"0\"},M:{\"0\":0.04684},Q:{\"13.1\":0}};\n$/data/features/insertadjacenthtml.js\u0005module.exports={A:{A:{\"1\":\"A B\",\"16\":\"DC\",\"132\":\"J D E F\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB I w J D FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"I w J D E F A B C K L G JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"IC 0B\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e RC SC TC rB BC UC sB\",\"16\":\"F QC\"},G:{\"1\":\"E VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"16\":\"0B\"},H:{\"1\":\"pC\"},I:{\"1\":\"uB I H sC tC CC uC vC\",\"16\":\"qC rC\"},J:{\"1\":\"D A\"},K:{\"1\":\"A B C h rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:4,C:\"Element.insertAdjacentHTML()\"};\n\"/data/features/css-supports-api.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"260\":\"C K L G M N O\"},C:{\"1\":\"WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB I w J D E F A B C K L G M N O x FC GC\",\"66\":\"g y\",\"260\":\"0 1 2 3 4 5 6 7 8 9 z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB\"},D:{\"1\":\"wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 I w J D E F A B C K L G M N O x g y z\",\"260\":\"5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB\"},E:{\"1\":\"F A B C K L G MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E IC 0B JC KC LC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F B C QC RC SC TC rB BC UC\",\"132\":\"sB\"},G:{\"1\":\"aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC\"},H:{\"132\":\"pC\"},I:{\"1\":\"H uC vC\",\"2\":\"uB I qC rC sC tC CC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC\",\"132\":\"sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:4,C:\"CSS.supports() API\"};\n/data/features/css-selection.js\u0005module.exports={A:{A:{\"1\":\"F A B\",\"2\":\"J D E DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"33\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\",\"2\":\"F\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H uC vC\",\"2\":\"uB I qC rC sC tC CC\"},J:{\"1\":\"A\",\"2\":\"D\"},K:{\"1\":\"C h BC sB\",\"16\":\"A B rB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"33\":\"BD\"}},B:5,C:\"::selection CSS pseudo-element\"};\n/data/features/link-icon-svg.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"2\":\"C K L G M N O P\",\"1537\":\"Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"2\":\"EC uB FC GC\",\"260\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB\",\"513\":\"IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\"},D:{\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P\",\"1537\":\"Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"LB MB NB OB PB QB RB SB TB UB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB VB WB XB YB ZB aB bB cB dB eB fB QC RC SC TC rB BC UC sB\",\"1537\":\"gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\"},G:{\"2\":\"gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"130\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC\"},H:{\"130\":\"pC\"},I:{\"2\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"2\":\"D\",\"130\":\"A\"},K:{\"130\":\"A B C rB BC sB\",\"1537\":\"h\"},L:{\"1537\":\"H\"},M:{\"2\":\"f\"},N:{\"130\":\"A B\"},O:{\"2\":\"wC\"},P:{\"2\":\"I xC yC zC 0C 1C 1B 2C 3C\",\"1537\":\"g 4C 5C 6C tB 7C 8C 9C\"},Q:{\"2\":\"2B\"},R:{\"1537\":\"AD\"},S:{\"513\":\"BD CD\"}},B:1,C:\"SVG favicons\"};\n/data/features/history.js\u0005module.exports={A:{A:{\"1\":\"A B\",\"2\":\"J D E F DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"I\"},E:{\"1\":\"J D E F A B C K L G KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I IC 0B\",\"4\":\"w JC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e BC UC sB\",\"2\":\"F B QC RC SC TC rB\"},G:{\"1\":\"E WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC\",\"4\":\"CC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H rC sC CC uC vC\",\"2\":\"uB I qC tC\"},J:{\"1\":\"D A\"},K:{\"1\":\"C h rB BC sB\",\"2\":\"A B\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:1,C:\"Session history management\"};\n/data/regions/GM.js\u0011\u0012module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0.00155,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0.00155,\"100\":0,\"101\":0,\"102\":0.00155,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0.00155,\"108\":0.00155,\"109\":0.14551,\"110\":0.06502,\"111\":0.00619,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0.00155,\"38\":0,\"39\":0.00155,\"40\":0.0031,\"41\":0,\"42\":0,\"43\":0.00155,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0.00155,\"57\":0.0031,\"58\":0,\"59\":0,\"60\":0.00774,\"61\":0,\"62\":0,\"63\":0.00155,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0.00155,\"69\":0.00155,\"70\":0.00155,\"71\":0,\"72\":0.00155,\"73\":0,\"74\":0.00155,\"75\":0,\"76\":0.00155,\"77\":0.00155,\"78\":0.00155,\"79\":0.00464,\"80\":0.00155,\"81\":0.02012,\"83\":0.00155,\"84\":0.00155,\"85\":0.00155,\"86\":0.00155,\"87\":0.00155,\"88\":0,\"89\":0.00155,\"90\":0.00774,\"91\":0,\"92\":0,\"93\":0.00155,\"94\":0,\"95\":0.00155,\"96\":0,\"97\":0.00155,\"98\":0.00155,\"99\":0,\"100\":0,\"101\":0.0031,\"102\":0,\"103\":0.01238,\"104\":0.0031,\"105\":0.00155,\"106\":0.0031,\"107\":0.01858,\"108\":0.03096,\"109\":0.5387,\"110\":0.26316,\"111\":0.00155,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0.00155,\"60\":0.00464,\"62\":0,\"63\":0.00464,\"64\":0.00155,\"65\":0,\"66\":0.00464,\"67\":0.02632,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.00155,\"94\":0.01238,\"95\":0.02477,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0.0031},B:{\"12\":0.0031,\"13\":0,\"14\":0,\"15\":0.00155,\"16\":0,\"17\":0,\"18\":0.0031,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00155,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0,\"106\":0.00155,\"107\":0.00155,\"108\":0.0031,\"109\":0.07121,\"110\":0.113},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0.00155,\"15\":0,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0.00155,\"6.1\":0,\"7.1\":0,\"9.1\":0.0031,\"10.1\":0,\"11.1\":0,\"12.1\":0,\"13.1\":0.0031,\"14.1\":0.00155,\"15.1\":0.00155,\"15.2-15.3\":0,\"15.4\":0,\"15.5\":0.00774,\"15.6\":0.02632,\"16.0\":0.00155,\"16.1\":0.00774,\"16.2\":0.00619,\"16.3\":0.00774,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0.02379,\"6.0-6.1\":0,\"7.0-7.1\":0.28289,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0.71647,\"10.0-10.2\":0,\"10.3\":0.95442,\"11.0-11.2\":0,\"11.3-11.4\":0.04494,\"12.0-12.1\":1.1765,\"12.2-12.5\":5.35901,\"13.0-13.1\":0.45209,\"13.2\":0.02644,\"13.3\":0.71383,\"13.4-13.7\":0.16127,\"14.0-14.4\":1.3695,\"14.5-14.8\":1.81101,\"15.0-15.1\":0.58164,\"15.2-15.3\":0.58164,\"15.4\":0.98614,\"15.5\":1.09983,\"15.6\":1.3272,\"16.0\":1.44352,\"16.1\":3.03774,\"16.2\":1.40915,\"16.3\":1.07868,\"16.4\":0.00529},P:{\"4\":0.89218,\"20\":0.20748,\"5.0-5.4\":0.02075,\"6.2-6.4\":0.03112,\"7.2-7.4\":0.18674,\"8.2\":0.01037,\"9.2\":0.17636,\"10.1\":0,\"11.1-11.2\":0.0415,\"12.0\":0,\"13.0\":0.06225,\"14.0\":0.01037,\"15.0\":0.01037,\"16.0\":0.0415,\"17.0\":0.03112,\"18.0\":0.42534,\"19.0\":0.95443},I:{\"0\":0,\"3\":0,\"4\":0.00024,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.00795,\"4.2-4.3\":0.01406,\"4.4\":0,\"4.4.3-4.4.4\":0.03729},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.00155,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.27046},H:{\"0\":0.76017},L:{\"0\":68.82355},R:{_:\"0\"},M:{\"0\":0.02536},Q:{\"13.1\":0}};\n'/data/features/native-filesystem-api.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"2\":\"C K L G M N O\",\"194\":\"P Q R S T U\",\"260\":\"V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f FC GC\",\"516\":\"H yB zB\"},D:{\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h\",\"194\":\"mB nB oB pB qB P Q R S T U\",\"260\":\"V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC\",\"516\":\"3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB QC RC SC TC rB BC UC sB\",\"194\":\"bB cB dB eB fB gB hB iB jB kB\",\"260\":\"lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC\",\"516\":\"3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"2\":\"A B C h rB BC sB\"},L:{\"2\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"2\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"2\":\"2B\"},R:{\"2\":\"AD\"},S:{\"2\":\"BD CD\"}},B:7,C:\"File System Access API\"};\n/data/regions/FO.js\u000fmodule.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.03177,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0.04942,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0,\"108\":0.00353,\"109\":0.23651,\"110\":0.13414,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0.00706,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0.00353,\"66\":0.00706,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0.01412,\"80\":0,\"81\":0,\"83\":0,\"84\":0.00353,\"85\":0,\"86\":0,\"87\":0.00706,\"88\":0,\"89\":0,\"90\":0,\"91\":0.00353,\"92\":0.00353,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0.00353,\"100\":0,\"101\":0.01059,\"102\":0,\"103\":0.01059,\"104\":0.00353,\"105\":0.03177,\"106\":0.00353,\"107\":0.00706,\"108\":0.29299,\"109\":1.92032,\"110\":1.18608,\"111\":0,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.01412,\"94\":0.10943,\"95\":0.02471,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0.00353,\"108\":0.00706,\"109\":0.39889,\"110\":0.44478},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0.09178,\"15\":0.0353,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0.00353,\"13.1\":0.01412,\"14.1\":0.0706,\"15.1\":0.0353,\"15.2-15.3\":0.08825,\"15.4\":0.16238,\"15.5\":0.353,\"15.6\":2.30509,\"16.0\":0.09884,\"16.1\":0.49773,\"16.2\":2.07917,\"16.3\":1.24609,\"16.4\":0.00353},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0.04379,\"10.0-10.2\":0,\"10.3\":0.03503,\"11.0-11.2\":0,\"11.3-11.4\":0,\"12.0-12.1\":0,\"12.2-12.5\":0.21893,\"13.0-13.1\":0,\"13.2\":0,\"13.3\":0,\"13.4-13.7\":0.02627,\"14.0-14.4\":0.33278,\"14.5-14.8\":0.70059,\"15.0-15.1\":0.26272,\"15.2-15.3\":0.31526,\"15.4\":1.26981,\"15.5\":2.23312,\"15.6\":11.60347,\"16.0\":7.85533,\"16.1\":23.60103,\"16.2\":21.36791,\"16.3\":11.06052,\"16.4\":0.02627},P:{\"4\":0.02008,\"20\":0.35139,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0,\"8.2\":0,\"9.2\":0,\"10.1\":0,\"11.1-11.2\":0,\"12.0\":0,\"13.0\":0,\"14.0\":0,\"15.0\":0,\"16.0\":0.01004,\"17.0\":0.01004,\"18.0\":0.01004,\"19.0\":0.76301},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0,\"4.4\":0,\"4.4.3-4.4.4\":0.02059},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.01412,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0},H:{\"0\":0.0245},L:{\"0\":5.07987},R:{_:\"0\"},M:{\"0\":0.07764},Q:{\"13.1\":0}};\n\"/data/features/css-touch-action.js\u0005module.exports={A:{A:{\"1\":\"B\",\"2\":\"J D E F DC\",\"289\":\"A\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 EC uB I w J D E F A B C K L G M N O x g y z FC GC\",\"194\":\"6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB\",\"1025\":\"TB UB VB WB XB\"},D:{\"1\":\"DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB\"},E:{\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F B C G M N O x g y z QC RC SC TC rB BC UC sB\"},G:{\"1\":\"iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC\",\"516\":\"bC cC dC eC fC gC hC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"B\",\"289\":\"A\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"194\":\"BD\"}},B:2,C:\"CSS touch-action property\"};\n(/data/features/css-print-color-adjust.js\u0005module.exports={A:{D:{\"2\":\"I w J D E F A B C K L G M\",\"33\":\"0 1 2 3 4 5 6 7 8 9 N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},L:{\"33\":\"H\"},B:{\"2\":\"C K L G M N O\",\"33\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB FC GC\",\"33\":\"PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i\"},M:{\"1\":\"f\"},A:{\"2\":\"J D E F A B DC\"},F:{\"2\":\"F B C QC RC SC TC rB BC UC sB\",\"33\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\"},K:{\"2\":\"A B C rB BC sB\",\"33\":\"h\"},E:{\"1\":\"4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"I w IC 0B JC PC\",\"33\":\"J D E F A B C K L G KC LC MC 1B rB sB 2B NC OC 3B\"},G:{\"1\":\"4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC CC WC\",\"33\":\"E XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B\"},P:{\"33\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},I:{\"2\":\"uB I qC rC sC tC CC\",\"33\":\"H uC vC\"}},B:6,C:\"print-color-adjust property\"};\n/data/features/magnetometer.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"1\":\"gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB\",\"194\":\"ZB vB aB wB bB cB dB eB fB\"},E:{\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB QC RC SC TC rB BC UC sB\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"2\":\"A B C h rB BC sB\"},L:{\"194\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"2\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"2\":\"2B\"},R:{\"2\":\"AD\"},S:{\"2\":\"BD CD\"}},B:4,C:\"Magnetometer\"};\n/data/features/fullscreen.js\u0006\u001amodule.exports={A:{A:{\"2\":\"J D E F A DC\",\"548\":\"B\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"516\":\"C K L G M N O\"},C:{\"1\":\"dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB I w J D E F FC GC\",\"676\":\"0 1 2 3 4 5 6 7 8 9 A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB\",\"1700\":\"OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB\"},D:{\"1\":\"kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"I w J D E F A B C K L\",\"676\":\"G M N O x\",\"804\":\"0 1 2 3 4 5 6 7 8 9 g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB\"},E:{\"1\":\"AC PC\",\"2\":\"I w IC 0B\",\"548\":\"4B 5B 6B tB 7B 8B 9B\",\"676\":\"JC\",\"804\":\"J D E F A B C K L G KC LC MC 1B rB sB 2B NC OC 3B\"},F:{\"1\":\"dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e sB\",\"2\":\"F B C QC RC SC TC rB BC UC\",\"804\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC\",\"2052\":\"gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"2\":\"D\",\"292\":\"A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A\",\"548\":\"B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"804\":\"I xC yC zC 0C 1C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:1,C:\"Full Screen API\"};\n(/data/features/keyboardevent-location.js\u0005module.exports={A:{A:{\"1\":\"F A B\",\"2\":\"J D E DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB I w J D E F A B C K L FC GC\"},D:{\"1\":\"7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"132\":\"0 1 2 3 4 5 6 I w J D E F A B C K L G M N O x g y z\"},E:{\"1\":\"D E F A B C K L G KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"16\":\"J IC 0B\",\"132\":\"I w JC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e sB\",\"2\":\"F B QC RC SC TC rB BC UC\",\"16\":\"C\",\"132\":\"G M\"},G:{\"1\":\"E ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"16\":\"0B VC CC\",\"132\":\"WC XC YC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H uC vC\",\"16\":\"qC rC\",\"132\":\"uB I sC tC CC\"},J:{\"132\":\"D A\"},K:{\"1\":\"h sB\",\"2\":\"A B rB BC\",\"16\":\"C\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:5,C:\"KeyboardEvent.location\"};\n/data/features/woff2.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K\"},C:{\"1\":\"GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB FC GC\"},D:{\"1\":\"DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB\"},E:{\"1\":\"C K L G sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F IC 0B JC KC LC MC\",\"132\":\"A B 1B rB\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F B C G M N O x g y z QC RC SC TC rB BC UC sB\"},G:{\"1\":\"cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:2,C:\"WOFF 2.0 - Web Open Font Format\"};\n/data/regions/CN.js\u0012\u0012module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0.00651,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0.14968,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.00325,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0.00651,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.00651,\"79\":0,\"80\":0,\"81\":0,\"82\":0.00325,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0.00325,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0.00976,\"103\":0,\"104\":0,\"105\":0.00325,\"106\":0.00651,\"107\":0.00325,\"108\":0.00976,\"109\":0.14643,\"110\":0.10087,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0.00325,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0.00651,\"40\":0.00651,\"41\":0.01302,\"42\":0.00651,\"43\":0.00651,\"44\":0.00651,\"45\":0.00976,\"46\":0.00651,\"47\":0.01302,\"48\":0.03254,\"49\":0.02278,\"50\":0.00651,\"51\":0.00651,\"52\":0.00651,\"53\":0.01302,\"54\":0.00651,\"55\":0.02278,\"56\":0.00976,\"57\":0.02278,\"58\":0.00651,\"59\":0.00651,\"60\":0.00651,\"61\":0,\"62\":0.00976,\"63\":0.00976,\"64\":0,\"65\":0.00651,\"66\":0,\"67\":0.00325,\"68\":0.00325,\"69\":0.33516,\"70\":0.06833,\"71\":0.00325,\"72\":0.0846,\"73\":0.01302,\"74\":0.15619,\"75\":0.01952,\"76\":0.00325,\"77\":0.00651,\"78\":0.06833,\"79\":0.06508,\"80\":0.01627,\"81\":0.01302,\"83\":0.05532,\"84\":0.00976,\"85\":0.03254,\"86\":0.0846,\"87\":0.02278,\"88\":0.00651,\"89\":0.00976,\"90\":0.05532,\"91\":0.14643,\"92\":0.06833,\"93\":0.00651,\"94\":0.00976,\"95\":0.00976,\"96\":0.02603,\"97\":0.05206,\"98\":0.54016,\"99\":0.13341,\"100\":0.03905,\"101\":0.03905,\"102\":0.03254,\"103\":0.0781,\"104\":0.03254,\"105\":0.03905,\"106\":0.02603,\"107\":0.05857,\"108\":0.10413,\"109\":0.5727,\"110\":0.29611,\"111\":0,\"112\":0.00325,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0.01952,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0.00651,\"95\":0.00651,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0.00325},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0.00325,\"17\":0.00325,\"18\":0.01952,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00976,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0.00325,\"101\":0.00651,\"102\":0.00325,\"103\":0.00651,\"104\":0.00325,\"105\":0.00325,\"106\":0.01302,\"107\":0.03579,\"108\":0.19849,\"109\":0.64755,\"110\":0.75493},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0.00325,\"10\":0,\"11\":0,\"12\":0,\"13\":0.00651,\"14\":0.01627,\"15\":0.00325,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0.00651,\"10.1\":0,\"11.1\":0,\"12.1\":0.00325,\"13.1\":0.01627,\"14.1\":0.01627,\"15.1\":0.00325,\"15.2-15.3\":0.00325,\"15.4\":0.00976,\"15.5\":0.01627,\"15.6\":0.05857,\"16.0\":0.00651,\"16.1\":0.02929,\"16.2\":0.05206,\"16.3\":0.0423,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0.03727,\"5.0-5.1\":0.02019,\"6.0-6.1\":0.03572,\"7.0-7.1\":0.00932,\"8.1-8.4\":0.01864,\"9.0-9.2\":0.08386,\"9.3\":0.04504,\"10.0-10.2\":0.03261,\"10.3\":1.03589,\"11.0-11.2\":0.205,\"11.3-11.4\":0.06212,\"12.0-12.1\":0.09318,\"12.2-12.5\":0.30906,\"13.0-13.1\":0.03417,\"13.2\":0.02795,\"13.3\":0.18015,\"13.4-13.7\":0.53736,\"14.0-14.4\":1.00483,\"14.5-14.8\":0.96289,\"15.0-15.1\":0.5358,\"15.2-15.3\":0.5063,\"15.4\":0.85729,\"15.5\":0.62899,\"15.6\":1.07627,\"16.0\":0.96289,\"16.1\":2.37151,\"16.2\":1.88385,\"16.3\":1.41638,\"16.4\":0.00466},P:{\"4\":0,\"20\":0.06198,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0,\"8.2\":0,\"9.2\":0,\"10.1\":0,\"11.1-11.2\":0,\"12.0\":0.01033,\"13.0\":0,\"14.0\":0.06198,\"15.0\":0,\"16.0\":0,\"17.0\":0.01033,\"18.0\":0.01033,\"19.0\":0.17561},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.02161,\"4.2-4.3\":0.10803,\"4.4\":0,\"4.4.3-4.4.4\":0.58338},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0.04993,\"9\":0.62408,\"10\":0.02496,\"11\":2.72099,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":7.65671},H:{\"0\":0.03832},L:{\"0\":58.66557},R:{_:\"0\"},M:{\"0\":0.12817},Q:{\"13.1\":3.01546}};\n/data/regions/alt-ww.js\u000f\u001emodule.exports={C:{\"11\":0.00772,\"36\":0.00386,\"43\":0.01931,\"44\":0.00386,\"48\":0.00386,\"52\":0.04633,\"56\":0.00386,\"59\":0.00386,\"68\":0.00386,\"72\":0.00386,\"78\":0.03475,\"79\":0.00386,\"80\":0.00386,\"81\":0.00386,\"82\":0.00386,\"83\":0.00386,\"87\":0.01544,\"88\":0.00772,\"91\":0.01158,\"93\":0.00772,\"94\":0.01158,\"99\":0.00386,\"100\":0.00386,\"101\":0.00386,\"102\":0.09653,\"103\":0.04247,\"104\":0.00772,\"105\":0.01158,\"106\":0.01544,\"107\":0.01931,\"108\":0.0695,\"109\":1.22008,\"110\":0.81467,\"111\":0.00772,_:\"2 3 4 5 6 7 8 9 10 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 37 38 39 40 41 42 45 46 47 49 50 51 53 54 55 57 58 60 61 62 63 64 65 66 67 69 70 71 73 74 75 76 77 84 85 86 89 90 92 95 96 97 98 112 3.5 3.6\"},D:{\"34\":0.00386,\"35\":0.00386,\"38\":0.01544,\"40\":0.01544,\"43\":0.00772,\"47\":0.00772,\"48\":0.01931,\"49\":0.03861,\"52\":0.00772,\"53\":0.00772,\"55\":0.00772,\"56\":0.0695,\"57\":0.00386,\"60\":0.01544,\"61\":0.00772,\"63\":0.00772,\"65\":0.00772,\"66\":0.02703,\"67\":0.00772,\"68\":0.01158,\"69\":0.05405,\"70\":0.01931,\"71\":0.01544,\"72\":0.02317,\"73\":0.01158,\"74\":0.04247,\"75\":0.04633,\"76\":0.04247,\"77\":0.01544,\"78\":0.03089,\"79\":0.12741,\"80\":0.03861,\"81\":0.04247,\"83\":0.07336,\"84\":0.04247,\"85\":0.0888,\"86\":0.07722,\"87\":0.08108,\"88\":0.02703,\"89\":0.03861,\"90\":0.04633,\"91\":0.08494,\"92\":0.05019,\"93\":0.06564,\"94\":0.04633,\"95\":0.01931,\"96\":0.03861,\"97\":0.05019,\"98\":0.09266,\"99\":0.05019,\"100\":0.05792,\"101\":0.06178,\"102\":0.08494,\"103\":0.23552,\"104\":0.08494,\"105\":0.13127,\"106\":0.10039,\"107\":0.19305,\"108\":0.98456,\"109\":12.40539,\"110\":7.25482,\"111\":0.01544,\"112\":0.01931,_:\"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 36 37 39 41 42 44 45 46 50 51 54 58 59 62 64 113\"},F:{\"28\":0.00386,\"31\":0.00386,\"36\":0.00772,\"40\":0.00386,\"46\":0.01158,\"85\":0.00772,\"89\":0.00386,\"93\":0.0695,\"94\":0.64865,\"95\":0.37066,_:\"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 32 33 34 35 37 38 39 41 42 43 44 45 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 86 87 88 90 91 92 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1\",\"10.0-10.1\":0},B:{\"12\":0.00386,\"15\":0.00386,\"17\":0.00386,\"18\":0.01544,\"84\":0.00772,\"85\":0.00386,\"86\":0.00386,\"87\":0.00386,\"89\":0.00772,\"92\":0.00772,\"103\":0.00772,\"104\":0.00386,\"105\":0.00772,\"106\":0.01158,\"107\":0.07336,\"108\":0.11197,\"109\":1.66023,\"110\":2.23552,_:\"13 14 16 79 80 81 83 88 90 91 93 94 95 96 97 98 99 100 101 102\"},E:{\"4\":0,\"13\":0.01931,\"14\":0.09653,\"15\":0.02317,_:\"0 5 6 7 8 9 10 11 12 3.1 3.2 6.1 7.1 10.1 16.4\",\"5.1\":0.00772,\"9.1\":0.05792,\"11.1\":0.00772,\"12.1\":0.03089,\"13.1\":0.16988,\"14.1\":0.25869,\"15.1\":0.04247,\"15.2-15.3\":0.03475,\"15.4\":0.0888,\"15.5\":0.16988,\"15.6\":0.85714,\"16.0\":0.0888,\"16.1\":0.29344,\"16.2\":0.92278,\"16.3\":0.62162},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0.00157,\"5.0-5.1\":0.00313,\"6.0-6.1\":0.00313,\"7.0-7.1\":0.01253,\"8.1-8.4\":0.00627,\"9.0-9.2\":0.01723,\"9.3\":0.0564,\"10.0-10.2\":0.0047,\"10.3\":0.09871,\"11.0-11.2\":0.02507,\"11.3-11.4\":0.0235,\"12.0-12.1\":0.02194,\"12.2-12.5\":0.39483,\"13.0-13.1\":0.01567,\"13.2\":0.03604,\"13.3\":0.03447,\"13.4-13.7\":0.10811,\"14.0-14.4\":0.28202,\"14.5-14.8\":0.53271,\"15.0-15.1\":0.15355,\"15.2-15.3\":0.19585,\"15.4\":0.23345,\"15.5\":0.41207,\"15.6\":1.40071,\"16.0\":1.43988,\"16.1\":3.51431,\"16.2\":3.62556,\"16.3\":2.04623,\"16.4\":0.0094},P:{\"4\":0.16637,\"20\":0.77987,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0.05199,\"8.2\":0,\"9.2\":0.01024,\"10.1\":0,\"11.1-11.2\":0.03119,\"12.0\":0.0104,\"13.0\":0.03119,\"14.0\":0.03119,\"15.0\":0.0208,\"16.0\":0.07279,\"17.0\":0.07279,\"18.0\":0.09358,\"19.0\":1.32058},I:{\"0\":0,\"3\":0,\"4\":0.0197,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.07878,\"4.2-4.3\":0.06894,\"4.4\":0,\"4.4.3-4.4.4\":0.30529},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"8\":0.0478,\"9\":0.05736,\"10\":0.00956,\"11\":0.48759,_:\"6 7 5.5\"},N:{\"10\":0,\"11\":0},S:{\"2.5\":0.07981,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.89629},H:{\"0\":0.99385},L:{\"0\":42.62898},R:{_:\"0\"},M:{\"0\":0.29467},Q:{\"13.1\":0.12278}};\n/data/regions/AI.js\u0010\\module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0.00544,\"91\":0.01632,\"92\":0.00544,\"93\":0.00544,\"94\":0.00544,\"95\":0.01632,\"96\":0,\"97\":0.00544,\"98\":0.00544,\"99\":0.00544,\"100\":0.00544,\"101\":0.00544,\"102\":0.02176,\"103\":0,\"104\":0.00544,\"105\":0.01632,\"106\":0.01088,\"107\":0,\"108\":0.01632,\"109\":0.23388,\"110\":0.06527,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0.03807,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0.04351,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0.01088,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0.01088,\"91\":0.00544,\"92\":0.00544,\"93\":0,\"94\":0.00544,\"95\":0.00544,\"96\":0.01088,\"97\":0.00544,\"98\":0.01088,\"99\":0.00544,\"100\":0,\"101\":0.00544,\"102\":0.00544,\"103\":0.08702,\"104\":0.00544,\"105\":0,\"106\":0.06527,\"107\":0.06527,\"108\":0.21756,\"109\":4.11732,\"110\":3.4592,\"111\":0.0272,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0.00544,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":2.24631,\"95\":4.73193,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0.00544,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0.00544,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0.00544,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0.00544,\"106\":0,\"107\":0,\"108\":0.32634,\"109\":2.8446,\"110\":3.05128},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0.01088,\"13\":0,\"14\":0.00544,\"15\":0,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0.02176,\"13.1\":0.44056,\"14.1\":0.11422,\"15.1\":0.01632,\"15.2-15.3\":0.01632,\"15.4\":0.01632,\"15.5\":0.06527,\"15.6\":0.70707,\"16.0\":0.65812,\"16.1\":0.35354,\"16.2\":1.60451,\"16.3\":1.37607,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0,\"10.0-10.2\":0,\"10.3\":0,\"11.0-11.2\":0,\"11.3-11.4\":0,\"12.0-12.1\":0,\"12.2-12.5\":0.48732,\"13.0-13.1\":0,\"13.2\":0.06859,\"13.3\":0,\"13.4-13.7\":0.06137,\"14.0-14.4\":0.04332,\"14.5-14.8\":3.56645,\"15.0-15.1\":0.36098,\"15.2-15.3\":0.37903,\"15.4\":0.15522,\"15.5\":0.20576,\"15.6\":1.60635,\"16.0\":2.38244,\"16.1\":10.79681,\"16.2\":9.40344,\"16.3\":5.63123,\"16.4\":0.05054},P:{\"4\":0.19721,\"20\":0.78885,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0.03114,\"8.2\":0,\"9.2\":0,\"10.1\":0,\"11.1-11.2\":0,\"12.0\":0.01038,\"13.0\":0.04152,\"14.0\":0.08304,\"15.0\":0,\"16.0\":0,\"17.0\":0.75771,\"18.0\":0.03114,\"19.0\":0.88227},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0,\"4.4\":0,\"4.4.3-4.4.4\":0.56214},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.01088,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0},H:{\"0\":0.01727},L:{\"0\":32.3033},R:{_:\"0\"},M:{\"0\":0.14139},Q:{\"13.1\":0}};\n/data/regions/BN.js\u0012module.exports={C:{\"2\":0,\"3\":0.00451,\"4\":0.00451,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0.00451,\"39\":0.00451,\"40\":0.00451,\"41\":0.00451,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0.00451,\"49\":0,\"50\":0,\"51\":0,\"52\":0.00902,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0.00451,\"66\":0,\"67\":0,\"68\":0.00451,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.00451,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0.00451,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0.00451,\"96\":0,\"97\":0,\"98\":0,\"99\":0.00451,\"100\":0.01352,\"101\":0.00451,\"102\":0,\"103\":0.00451,\"104\":0.00902,\"105\":0.00451,\"106\":0.01803,\"107\":0.00451,\"108\":0.02254,\"109\":0.60858,\"110\":0.3967,\"111\":0.00902,\"112\":0,\"3.5\":0,\"3.6\":0.00451},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0.00451,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0.00451,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0.00451,\"37\":0.00451,\"38\":0.03156,\"39\":0.00451,\"40\":0.00451,\"41\":0.00902,\"42\":0.00451,\"43\":0.01352,\"44\":0.01803,\"45\":0.01352,\"46\":0.00902,\"47\":0.02254,\"48\":0,\"49\":0.24794,\"50\":0.00451,\"51\":0.01352,\"52\":0,\"53\":0,\"54\":0,\"55\":0.00902,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0.00451,\"61\":0,\"62\":0.00902,\"63\":0,\"64\":0,\"65\":0.00451,\"66\":0,\"67\":0,\"68\":0.01352,\"69\":0.00451,\"70\":0.00451,\"71\":0.01803,\"72\":0,\"73\":0.01352,\"74\":0.00451,\"75\":0.00451,\"76\":0,\"77\":0,\"78\":0,\"79\":0.08565,\"80\":0,\"81\":0.00451,\"83\":0.00902,\"84\":0,\"85\":0.00902,\"86\":0,\"87\":0.01803,\"88\":0.01803,\"89\":0.00451,\"90\":0,\"91\":0.01352,\"92\":0.04508,\"93\":0,\"94\":0.00451,\"95\":0.01352,\"96\":0.00902,\"97\":0.02254,\"98\":0.01803,\"99\":0.00451,\"100\":0.00902,\"101\":0.00902,\"102\":0.00902,\"103\":0.1127,\"104\":0.00902,\"105\":0.00902,\"106\":0.01803,\"107\":0.03156,\"108\":0.22991,\"109\":7.40664,\"110\":4.40882,\"111\":0.00902,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0.00902,\"29\":0,\"30\":0.00451,\"31\":0.00451,\"32\":0.00451,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0.01803,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0.00451,\"55\":0.01803,\"56\":0,\"57\":0,\"58\":0,\"60\":0.00451,\"62\":0,\"63\":0.00451,\"64\":0.02705,\"65\":0.00451,\"66\":0.00451,\"67\":0.29302,\"68\":0,\"69\":0,\"70\":0.00451,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.02705,\"94\":0.27499,\"95\":0.13975,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0.00451},B:{\"12\":0.00451,\"13\":0,\"14\":0.00451,\"15\":0,\"16\":0,\"17\":0.00451,\"18\":0.00451,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0.00451,\"103\":0.00451,\"104\":0,\"105\":0,\"106\":0.00451,\"107\":0.00451,\"108\":0.07664,\"109\":0.64464,\"110\":0.72128},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0.00451,\"9\":0.01803,\"10\":0,\"11\":0,\"12\":0,\"13\":0.02254,\"14\":0.08114,\"15\":0.00902,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0.00451,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0.02705,\"13.1\":0.0541,\"14.1\":0.34712,\"15.1\":0.04057,\"15.2-15.3\":0.02254,\"15.4\":0.04508,\"15.5\":0.06311,\"15.6\":0.52293,\"16.0\":0.0541,\"16.1\":0.17581,\"16.2\":0.47785,\"16.3\":0.37416,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0.0024,\"5.0-5.1\":0.0048,\"6.0-6.1\":0.0072,\"7.0-7.1\":0.10798,\"8.1-8.4\":0.14878,\"9.0-9.2\":0.0264,\"9.3\":0.22317,\"10.0-10.2\":0,\"10.3\":0.47753,\"11.0-11.2\":0.10079,\"11.3-11.4\":0.0024,\"12.0-12.1\":0.15838,\"12.2-12.5\":0.6887,\"13.0-13.1\":0.0216,\"13.2\":0.0312,\"13.3\":0.0192,\"13.4-13.7\":0.04799,\"14.0-14.4\":0.24237,\"14.5-14.8\":0.37915,\"15.0-15.1\":0.19197,\"15.2-15.3\":0.23277,\"15.4\":0.29516,\"15.5\":0.46553,\"15.6\":1.53818,\"16.0\":3.14595,\"16.1\":4.97689,\"16.2\":5.04408,\"16.3\":3.57549,\"16.4\":0.0048},P:{\"4\":0.4746,\"20\":0.66443,\"5.0-5.4\":0,\"6.2-6.4\":0.02109,\"7.2-7.4\":0.08437,\"8.2\":0,\"9.2\":0,\"10.1\":0,\"11.1-11.2\":0.02109,\"12.0\":0.01055,\"13.0\":0.05273,\"14.0\":0,\"15.0\":0.01055,\"16.0\":0.03164,\"17.0\":0.06328,\"18.0\":0.04219,\"19.0\":0.90701},I:{\"0\":0,\"3\":0.00557,\"4\":0.04459,\"2.1\":0.00557,\"2.2\":0.02508,\"2.3\":0.03344,\"4.1\":0.0418,\"4.2-4.3\":0.06967,\"4.4\":0,\"4.4.3-4.4.4\":0.16721},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0.00451,\"7\":0.00902,\"8\":0.08565,\"9\":0.02254,\"10\":0.01803,\"11\":0.04959,\"5.5\":0},N:{\"10\":0.02563,\"11\":0.01281},S:{\"2.5\":0.00549,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0.01098},O:{\"0\":1.63112},H:{\"0\":2.06939},L:{\"0\":49.01767},R:{_:\"0\"},M:{\"0\":0.19222},Q:{\"13.1\":0.00549}};\n/data/regions/HK.js\u0012-module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0.02191,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.01096,\"53\":0,\"54\":0,\"55\":0.00548,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0.00548,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.02191,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0.00548,\"89\":0.00548,\"90\":0.00548,\"91\":0.01096,\"92\":0.00548,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0.00548,\"102\":0.02191,\"103\":0.00548,\"104\":0.00548,\"105\":0.00548,\"106\":0.00548,\"107\":0.01096,\"108\":0.02739,\"109\":0.52041,\"110\":0.33964,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0.00548,\"23\":0,\"24\":0,\"25\":0,\"26\":0.00548,\"27\":0,\"28\":0,\"29\":0,\"30\":0.00548,\"31\":0,\"32\":0,\"33\":0,\"34\":0.05478,\"35\":0,\"36\":0,\"37\":0,\"38\":0.12599,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0.00548,\"49\":0.04382,\"50\":0,\"51\":0,\"52\":0,\"53\":0.03835,\"54\":0,\"55\":0.01643,\"56\":0.00548,\"57\":0.00548,\"58\":0,\"59\":0,\"60\":0,\"61\":0.02739,\"62\":0.00548,\"63\":0.01096,\"64\":0,\"65\":0.00548,\"66\":0,\"67\":0.01096,\"68\":0.00548,\"69\":0.01096,\"70\":0.01096,\"71\":0.00548,\"72\":0.00548,\"73\":0.00548,\"74\":0.01643,\"75\":0.01096,\"76\":0.00548,\"77\":0.00548,\"78\":0.02739,\"79\":0.52589,\"80\":0.02191,\"81\":0.02739,\"83\":0.05478,\"84\":0.01096,\"85\":0.01643,\"86\":0.04382,\"87\":0.13147,\"88\":0.00548,\"89\":0.01643,\"90\":0.01096,\"91\":0.03287,\"92\":0.08765,\"93\":0.01643,\"94\":0.0986,\"95\":0.02191,\"96\":0.03835,\"97\":0.08217,\"98\":0.06574,\"99\":0.06026,\"100\":0.06574,\"101\":0.05478,\"102\":0.0493,\"103\":0.20269,\"104\":0.08217,\"105\":0.12052,\"106\":0.12052,\"107\":0.20269,\"108\":0.66832,\"109\":8.73741,\"110\":5.39583,\"111\":0.01096,\"112\":0.01096,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0.01096,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0.02191,\"37\":0,\"38\":0,\"39\":0,\"40\":0.00548,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0.06574,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.00548,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.00548,\"94\":0.07121,\"95\":0.05478,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0.00548,\"18\":0.01096,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0.00548,\"103\":0.00548,\"104\":0.00548,\"105\":0.00548,\"106\":0.01096,\"107\":0.02739,\"108\":0.09313,\"109\":1.19968,\"110\":1.64888},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0.00548,\"13\":0.03835,\"14\":0.15886,\"15\":0.04382,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0.00548,\"12.1\":0.02739,\"13.1\":0.11504,\"14.1\":0.3232,\"15.1\":0.04382,\"15.2-15.3\":0.0493,\"15.4\":0.16982,\"15.5\":0.27938,\"15.6\":1.33663,\"16.0\":0.08217,\"16.1\":0.2739,\"16.2\":1.05725,\"16.3\":0.56423,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0.0063,\"5.0-5.1\":0.02837,\"6.0-6.1\":0.01891,\"7.0-7.1\":0.05043,\"8.1-8.4\":0.04097,\"9.0-9.2\":0.01576,\"9.3\":0.31203,\"10.0-10.2\":0.0063,\"10.3\":0.19226,\"11.0-11.2\":0.03467,\"11.3-11.4\":0.04097,\"12.0-12.1\":0.05988,\"12.2-12.5\":0.99912,\"13.0-13.1\":0.03467,\"13.2\":0.01261,\"13.3\":0.07249,\"13.4-13.7\":0.19226,\"14.0-14.4\":0.59884,\"14.5-14.8\":0.99597,\"15.0-15.1\":0.36561,\"15.2-15.3\":0.42234,\"15.4\":0.75328,\"15.5\":0.89826,\"15.6\":3.57414,\"16.0\":2.39537,\"16.1\":6.7354,\"16.2\":7.1735,\"16.3\":3.72543,\"16.4\":0.00946},P:{\"4\":1.22215,\"20\":2.14412,\"5.0-5.4\":0.07504,\"6.2-6.4\":0.01072,\"7.2-7.4\":0.01072,\"8.2\":0.01072,\"9.2\":0.03216,\"10.1\":0,\"11.1-11.2\":0.02144,\"12.0\":0.01072,\"13.0\":0.08576,\"14.0\":0.03216,\"15.0\":0.02144,\"16.0\":0.06432,\"17.0\":0.13937,\"18.0\":0.15009,\"19.0\":2.93745},I:{\"0\":0,\"3\":0,\"4\":0.01504,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.01504,\"4.2-4.3\":0.01203,\"4.4\":0,\"4.4.3-4.4.4\":0.0872},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0.1579,\"10\":0,\"11\":0.37895,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.33915},H:{\"0\":0.08562},L:{\"0\":30.86074},R:{_:\"0\"},M:{\"0\":0.21253},Q:{\"13.1\":0.0814}};\n/data/features/web-share.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O P Q\",\"516\":\"R S T U V W X Y Z a b c d\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"2\":\"2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X\",\"130\":\"0 1 O x g y z\",\"1028\":\"Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"L G NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A B C IC 0B JC KC LC MC 1B rB\",\"2049\":\"K sB 2B\"},F:{\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\"},G:{\"1\":\"mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC\",\"2049\":\"hC iC jC kC lC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I qC rC sC tC CC uC\",\"258\":\"H vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"1\":\"g 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I\",\"258\":\"xC yC zC\"},Q:{\"2\":\"2B\"},R:{\"2\":\"AD\"},S:{\"2\":\"BD CD\"}},B:4,C:\"Web Share API\"};\n/data/features/use-strict.js\u0005module.exports={A:{A:{\"1\":\"A B\",\"2\":\"J D E F DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"I w J D E F A B C\"},E:{\"1\":\"J D E F A B C K L G KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I IC 0B\",\"132\":\"w JC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e UC sB\",\"2\":\"F B QC RC SC TC rB BC\"},G:{\"1\":\"E WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC CC\"},H:{\"1\":\"pC\"},I:{\"1\":\"uB I H tC CC uC vC\",\"2\":\"qC rC sC\"},J:{\"1\":\"D A\"},K:{\"1\":\"C h BC sB\",\"2\":\"A B rB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:6,C:\"ECMAScript 5 Strict Mode\"};\n/data/features/avif.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"2\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB FC GC\",\"194\":\"pB qB P Q R xB S T U V W X Y Z a b\",\"257\":\"c d e i j k l m n o p q r s t u v f H yB zB\"},D:{\"1\":\"U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T\"},E:{\"1\":\"AC\",\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB\",\"1281\":\"PC\",\"1796\":\"7B 8B 9B\"},F:{\"1\":\"kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB QC RC SC TC rB BC UC sB\"},G:{\"1\":\"AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B\",\"1281\":\"tB 7B 8B 9B\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"257\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"1\":\"g 5C 6C tB 7C 8C 9C\",\"2\":\"I xC yC zC 0C 1C 1B 2C 3C 4C\"},Q:{\"2\":\"2B\"},R:{\"1\":\"AD\"},S:{\"2\":\"BD CD\"}},B:6,C:\"AVIF image format\"};\n+/data/features/es6-module-dynamic-import.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"1\":\"gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB FC GC\",\"194\":\"fB\"},D:{\"1\":\"cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB\"},E:{\"1\":\"C K L G rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A B IC 0B JC KC LC MC 1B\"},F:{\"1\":\"RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB QC RC SC TC rB BC UC sB\"},G:{\"1\":\"eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I xC yC zC\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"2\":\"BD\"}},B:6,C:\"JavaScript modules: dynamic import()\"};\n /data/features/array-includes.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K\"},C:{\"1\":\"KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB FC GC\"},D:{\"1\":\"OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB\"},E:{\"1\":\"F A B C K L G MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E IC 0B JC KC LC\"},F:{\"1\":\"BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB QC RC SC TC rB BC UC sB\"},G:{\"1\":\"aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:6,C:\"Array.prototype.includes\"};\n/data/regions/CR.js\u0011!module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0.00392,\"52\":0.00392,\"53\":0,\"54\":0,\"55\":0,\"56\":0.00392,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0.01566,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.00392,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0.00392,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0.01175,\"103\":0,\"104\":0.01958,\"105\":0,\"106\":0.01958,\"107\":0.00392,\"108\":0.01958,\"109\":0.47384,\"110\":0.31328,\"111\":0.00392,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0.00392,\"44\":0,\"45\":0,\"46\":0,\"47\":0.00392,\"48\":0,\"49\":0.00392,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0.00392,\"66\":0,\"67\":0.00392,\"68\":0.00783,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0.00392,\"74\":0,\"75\":0,\"76\":0.00392,\"77\":0,\"78\":0.00392,\"79\":0.01175,\"80\":0.00392,\"81\":0.00392,\"83\":0.00392,\"84\":0,\"85\":0,\"86\":0.01566,\"87\":0.01958,\"88\":0.00392,\"89\":0,\"90\":0,\"91\":0.00392,\"92\":0.01958,\"93\":0.00783,\"94\":0,\"95\":0.00392,\"96\":0.01175,\"97\":0.00783,\"98\":0.00783,\"99\":0.00392,\"100\":0.00783,\"101\":0.00392,\"102\":0.00783,\"103\":0.06266,\"104\":0.01566,\"105\":0.01566,\"106\":0.01958,\"107\":0.04308,\"108\":0.26629,\"109\":5.41583,\"110\":3.64971,\"111\":0.01175,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0.00392,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0.00392,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.00783,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.09398,\"94\":0.56782,\"95\":0.1723,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0.01175,\"18\":0.00392,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00392,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0.00392,\"106\":0,\"107\":0.01175,\"108\":0.0235,\"109\":0.63439,\"110\":0.90851},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.00783,\"14\":0.01958,\"15\":0.00392,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0.00783,\"13.1\":0.05874,\"14.1\":0.05874,\"15.1\":0.03524,\"15.2-15.3\":0.00783,\"15.4\":0.03524,\"15.5\":0.05874,\"15.6\":0.35244,\"16.0\":0.04699,\"16.1\":0.0979,\"16.2\":0.28195,\"16.3\":0.23496,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0.01033,\"6.0-6.1\":0.01654,\"7.0-7.1\":0.0248,\"8.1-8.4\":0.00413,\"9.0-9.2\":0,\"9.3\":0.04341,\"10.0-10.2\":0,\"10.3\":0.0248,\"11.0-11.2\":0.0124,\"11.3-11.4\":0.04341,\"12.0-12.1\":0.00827,\"12.2-12.5\":0.36172,\"13.0-13.1\":0,\"13.2\":0,\"13.3\":0.01447,\"13.4-13.7\":0.03307,\"14.0-14.4\":0.18189,\"14.5-14.8\":0.4568,\"15.0-15.1\":0.07441,\"15.2-15.3\":0.13642,\"15.4\":0.15709,\"15.5\":0.36172,\"15.6\":1.80859,\"16.0\":1.86027,\"16.1\":5.03719,\"16.2\":5.8247,\"16.3\":3.16452,\"16.4\":0.0124},P:{\"4\":0.10185,\"20\":1.09993,\"5.0-5.4\":0,\"6.2-6.4\":0.01018,\"7.2-7.4\":0.10185,\"8.2\":0,\"9.2\":0.02037,\"10.1\":0,\"11.1-11.2\":0.04074,\"12.0\":0,\"13.0\":0.04074,\"14.0\":0.04074,\"15.0\":0.02037,\"16.0\":0.05092,\"17.0\":0.10185,\"18.0\":0.08148,\"19.0\":1.53786},I:{\"0\":0,\"3\":0,\"4\":0.01178,\"2.1\":0,\"2.2\":0,\"2.3\":0.01178,\"4.1\":0.00589,\"4.2-4.3\":0.02945,\"4.4\":0,\"4.4.3-4.4.4\":0.15901},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0.00914,\"9\":0,\"10\":0,\"11\":0.01827,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.03042},H:{\"0\":0.21312},L:{\"0\":58.57974},R:{_:\"0\"},M:{\"0\":0.3407},Q:{\"13.1\":0}};\n)/data/features/font-variant-alternates.js\u0006\u0014module.exports={A:{A:{\"2\":\"J D E F DC\",\"130\":\"A B\"},B:{\"1\":\"H\",\"130\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f\"},C:{\"1\":\"BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB FC GC\",\"130\":\"0 I w J D E F A B C K L G M N O x g y z\",\"322\":\"1 2 3 4 5 6 7 8 9 AB\"},D:{\"1\":\"H yB zB HC\",\"2\":\"I w J D E F A B C K L G\",\"130\":\"0 1 2 3 4 5 6 7 8 9 M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f\"},E:{\"1\":\"A B C K L G MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"D E F IC 0B KC LC\",\"130\":\"I w J JC\"},F:{\"2\":\"F B C QC RC SC TC rB BC UC sB\",\"130\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\"},G:{\"1\":\"bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B YC ZC aC\",\"130\":\"VC CC WC XC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC\",\"130\":\"uC vC\"},J:{\"2\":\"D\",\"130\":\"A\"},K:{\"2\":\"A B C rB BC sB\",\"130\":\"h\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"130\":\"wC\"},P:{\"130\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"130\":\"2B\"},R:{\"130\":\"AD\"},S:{\"1\":\"BD CD\"}},B:5,C:\"CSS font-variant-alternates\"};\n%/data/features/hardwareconcurrency.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L\"},C:{\"1\":\"PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB FC GC\"},D:{\"1\":\"EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB\"},E:{\"2\":\"I w J D IC 0B JC KC LC\",\"129\":\"B C K L G 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"194\":\"E F A MC\"},F:{\"1\":\"1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 F B C G M N O x g y z QC RC SC TC rB BC UC sB\"},G:{\"2\":\"0B VC CC WC XC YC\",\"129\":\"dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"194\":\"E ZC aC bC cC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:1,C:\"navigator.hardwareConcurrency\"};\n/data/features/webgl2.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"1\":\"SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 EC uB I w J D E F A B C K L G M N O x g y z FC GC\",\"194\":\"JB KB LB\",\"450\":\"2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB\",\"2242\":\"MB NB OB PB QB RB\"},D:{\"1\":\"XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB\",\"578\":\"KB LB MB NB OB PB QB RB SB TB UB VB WB\"},E:{\"1\":\"G OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A IC 0B JC KC LC MC\",\"1090\":\"B C K L 1B rB sB 2B NC\"},F:{\"1\":\"KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB QC RC SC TC rB BC UC sB\"},G:{\"1\":\"oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC\",\"1090\":\"gC hC iC jC kC lC mC nC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I xC yC\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"2242\":\"BD\"}},B:6,C:\"WebGL 2.0\"};\n&/data/features/document-execcommand.js\u0005module.exports={A:{A:{\"1\":\"J D E F A B DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB I w J D E FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"J D E F A B C K L G KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"16\":\"I w IC 0B JC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e RC SC TC rB BC UC sB\",\"16\":\"F QC\"},G:{\"1\":\"E YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC\",\"16\":\"CC WC XC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H tC CC uC vC\",\"2\":\"uB I qC rC sC\"},J:{\"1\":\"A\",\"2\":\"D\"},K:{\"1\":\"A B C h rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"B\",\"2\":\"A\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:7,C:\"Document.execCommand()\"};\n/data/regions/NG.js\u0012module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0.00514,\"44\":0,\"45\":0,\"46\":0,\"47\":0.00171,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.00171,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0.00171,\"66\":0,\"67\":0,\"68\":0.00514,\"69\":0,\"70\":0,\"71\":0,\"72\":0.00171,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.00171,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0.00171,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0.00171,\"97\":0.00171,\"98\":0.00171,\"99\":0.00343,\"100\":0.00686,\"101\":0.00171,\"102\":0.00686,\"103\":0.00171,\"104\":0.00343,\"105\":0.00343,\"106\":0.00514,\"107\":0.00514,\"108\":0.01371,\"109\":0.1714,\"110\":0.10284,\"111\":0.00343,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0.00343,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0.00171,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0.00514,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0.00343,\"56\":0.00171,\"57\":0,\"58\":0.00343,\"59\":0,\"60\":0,\"61\":0,\"62\":0.00171,\"63\":0,\"64\":0.00343,\"65\":0,\"66\":0,\"67\":0,\"68\":0.00171,\"69\":0.00171,\"70\":0.00343,\"71\":0,\"72\":0.00171,\"73\":0.00171,\"74\":0.00343,\"75\":0.00171,\"76\":0.00171,\"77\":0.00514,\"78\":0,\"79\":0.00514,\"80\":0.00514,\"81\":0.01028,\"83\":0.00171,\"84\":0.00171,\"85\":0.00514,\"86\":0.00343,\"87\":0.00343,\"88\":0.00343,\"89\":0.00171,\"90\":0.00171,\"91\":0.00686,\"92\":0.00171,\"93\":0.00686,\"94\":0.00514,\"95\":0.00686,\"96\":0.00171,\"97\":0.00343,\"98\":0.00171,\"99\":0.00171,\"100\":0.00514,\"101\":0.00171,\"102\":0.00857,\"103\":0.01028,\"104\":0.00686,\"105\":0.01028,\"106\":0.00857,\"107\":0.01714,\"108\":0.04628,\"109\":0.82786,\"110\":0.37194,\"111\":0.00171,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0.00171,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0.00171,\"24\":0.02571,\"25\":0,\"26\":0.01371,\"27\":0.02914,\"28\":0.01885,\"29\":0.00343,\"30\":0.02571,\"31\":0.01028,\"32\":0.02571,\"33\":0.012,\"34\":0,\"35\":0.00171,\"36\":0.00514,\"37\":0.00343,\"38\":0.01371,\"39\":0.00171,\"40\":0,\"41\":0.00171,\"42\":0.02228,\"43\":0,\"44\":0.00171,\"45\":0.00514,\"46\":0.01543,\"47\":0.00514,\"48\":0,\"49\":0,\"50\":0.01543,\"51\":0.01028,\"52\":0,\"53\":0.00171,\"54\":0.01543,\"55\":0.012,\"56\":0.00343,\"57\":0.01543,\"58\":0.03771,\"60\":0.23996,\"62\":0.00343,\"63\":0.26396,\"64\":0.07199,\"65\":0.03257,\"66\":0.36508,\"67\":0.49535,\"68\":0,\"69\":0.00343,\"70\":0.00686,\"71\":0.00514,\"72\":0.01371,\"73\":0.04114,\"74\":0.00514,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0.00171,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0.00171,\"86\":0,\"87\":0,\"88\":0.00171,\"89\":0,\"90\":0.00171,\"91\":0,\"92\":0.00343,\"93\":0.00171,\"94\":0.02914,\"95\":0.03085,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0.03942},B:{\"12\":0.00343,\"13\":0,\"14\":0,\"15\":0.00171,\"16\":0,\"17\":0,\"18\":0.00514,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0.00171,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00343,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0.00171,\"102\":0,\"103\":0,\"104\":0.00171,\"105\":0.00171,\"106\":0.00171,\"107\":0.00343,\"108\":0.012,\"109\":0.09084,\"110\":0.08399},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.00171,\"14\":0.00343,\"15\":0,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0.00343,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0,\"13.1\":0.00343,\"14.1\":0.00514,\"15.1\":0.00171,\"15.2-15.3\":0.00171,\"15.4\":0.00171,\"15.5\":0.00171,\"15.6\":0.01028,\"16.0\":0.00171,\"16.1\":0.00514,\"16.2\":0.00857,\"16.3\":0.00686,\"16.4\":0},G:{\"8\":0.00241,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0.00241,\"5.0-5.1\":0.0012,\"6.0-6.1\":0.0012,\"7.0-7.1\":0.00602,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0.01807,\"10.0-10.2\":0.00241,\"10.3\":0.03614,\"11.0-11.2\":0.00964,\"11.3-11.4\":0.00482,\"12.0-12.1\":0.06987,\"12.2-12.5\":0.97697,\"13.0-13.1\":0.04698,\"13.2\":0.02048,\"13.3\":0.07951,\"13.4-13.7\":0.16865,\"14.0-14.4\":0.91554,\"14.5-14.8\":0.93722,\"15.0-15.1\":0.50114,\"15.2-15.3\":0.51198,\"15.4\":0.38669,\"15.5\":0.65292,\"15.6\":0.78664,\"16.0\":1.33355,\"16.1\":1.22031,\"16.2\":1.52991,\"16.3\":0.95168,\"16.4\":0.00361},P:{\"4\":0.04153,\"20\":0.12458,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0.05191,\"8.2\":0,\"9.2\":0.03114,\"10.1\":0,\"11.1-11.2\":0.02076,\"12.0\":0,\"13.0\":0.02076,\"14.0\":0.02076,\"15.0\":0.02076,\"16.0\":0.05191,\"17.0\":0.04153,\"18.0\":0.06229,\"19.0\":0.41525},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0.00356,\"4.4\":0,\"4.4.3-4.4.4\":0.04844},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.00514,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0.04972,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0.00829},O:{\"0\":1.20976},H:{\"0\":26.79732},L:{\"0\":50.26306},R:{_:\"0\"},M:{\"0\":0.33144},Q:{\"13.1\":0.00829}};\n\"/data/features/css-text-justify.js\u0005module.exports={A:{A:{\"16\":\"J D DC\",\"132\":\"E F A B\"},B:{\"132\":\"C K L G M N O\",\"322\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB FC GC\",\"1025\":\"WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"1602\":\"VB\"},D:{\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB\",\"322\":\"KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"2\":\"0 1 2 3 4 5 6 F B C G M N O x g y z QC RC SC TC rB BC UC sB\",\"322\":\"7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I qC rC sC tC CC uC vC\",\"322\":\"H\"},J:{\"2\":\"D A\"},K:{\"2\":\"A B C rB BC sB\",\"322\":\"h\"},L:{\"322\":\"H\"},M:{\"1025\":\"f\"},N:{\"132\":\"A B\"},O:{\"322\":\"wC\"},P:{\"2\":\"I\",\"322\":\"g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"322\":\"2B\"},R:{\"322\":\"AD\"},S:{\"2\":\"BD\",\"1025\":\"CD\"}},B:4,C:\"CSS text-justify\"};\n/data/features/video.js\u0005module.exports={A:{A:{\"1\":\"F A B\",\"2\":\"J D E DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB\",\"260\":\"I w J D E F A B C K L G M N O x FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"I w J D E F A JC KC LC MC 1B\",\"2\":\"IC 0B\",\"513\":\"B C K L G rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e SC TC rB BC UC sB\",\"2\":\"F QC RC\"},G:{\"1\":\"E 0B VC CC WC XC YC ZC aC bC cC dC\",\"513\":\"eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"1\":\"uB I H sC tC CC uC vC\",\"132\":\"qC rC\"},J:{\"1\":\"D A\"},K:{\"1\":\"B C h rB BC sB\",\"2\":\"A\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:1,C:\"Video element\"};\n/data/regions/MX.js\u0011module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.01151,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0.00576,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0.00576,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0.00576,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.01151,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0.00576,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0.00576,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0.01151,\"103\":0,\"104\":0.01151,\"105\":0.00576,\"106\":0.00576,\"107\":0.00576,\"108\":0.01727,\"109\":0.4317,\"110\":0.29931,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0.00576,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0.02302,\"50\":0,\"51\":0,\"52\":0.01727,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0.00576,\"66\":0.01727,\"67\":0.00576,\"68\":0.01151,\"69\":0.00576,\"70\":0.00576,\"71\":0.00576,\"72\":0.01151,\"73\":0.00576,\"74\":0.01151,\"75\":0.01151,\"76\":0.01151,\"77\":0.01151,\"78\":0.01151,\"79\":0.04605,\"80\":0.02302,\"81\":0.01727,\"83\":0.01151,\"84\":0.01151,\"85\":0.01727,\"86\":0.02302,\"87\":0.04029,\"88\":0.02878,\"89\":0.02878,\"90\":0.04605,\"91\":0.0921,\"92\":0.05756,\"93\":0.0518,\"94\":0.03454,\"95\":0.00576,\"96\":0.01727,\"97\":0.02302,\"98\":0.02302,\"99\":0.01727,\"100\":0.01151,\"101\":0.01727,\"102\":0.02302,\"103\":0.12088,\"104\":0.03454,\"105\":0.03454,\"106\":0.04029,\"107\":0.07483,\"108\":0.29931,\"109\":15.15555,\"110\":10.65436,\"111\":0.00576,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0.00576,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0.00576,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.01151,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.04605,\"94\":0.37414,\"95\":0.18419,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0.01151,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0.00576,\"79\":0,\"80\":0.00576,\"81\":0.00576,\"83\":0.00576,\"84\":0.00576,\"85\":0.00576,\"86\":0.00576,\"87\":0,\"88\":0,\"89\":0.00576,\"90\":0.00576,\"91\":0,\"92\":0.00576,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0.00576,\"100\":0,\"101\":0,\"102\":0.00576,\"103\":0.00576,\"104\":0,\"105\":0.00576,\"106\":0.00576,\"107\":0.0518,\"108\":0.03454,\"109\":0.73677,\"110\":0.96701},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.00576,\"14\":0.02302,\"15\":0.00576,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0.00576,\"6.1\":0,\"7.1\":0,\"9.1\":0.0518,\"10.1\":0,\"11.1\":0,\"12.1\":0.01151,\"13.1\":0.04029,\"14.1\":0.06332,\"15.1\":0.01151,\"15.2-15.3\":0.01151,\"15.4\":0.02302,\"15.5\":0.04029,\"15.6\":0.21297,\"16.0\":0.02302,\"16.1\":0.08634,\"16.2\":0.22448,\"16.3\":0.16117,\"16.4\":0},G:{\"8\":0.00432,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0.00432,\"6.0-6.1\":0.00144,\"7.0-7.1\":0.01008,\"8.1-8.4\":0.00144,\"9.0-9.2\":0.01152,\"9.3\":0.06481,\"10.0-10.2\":0.00144,\"10.3\":0.05473,\"11.0-11.2\":0.01584,\"11.3-11.4\":0.03744,\"12.0-12.1\":0.01728,\"12.2-12.5\":0.35573,\"13.0-13.1\":0.01008,\"13.2\":0.0072,\"13.3\":0.01584,\"13.4-13.7\":0.04609,\"14.0-14.4\":0.12962,\"14.5-14.8\":0.35861,\"15.0-15.1\":0.07777,\"15.2-15.3\":0.11089,\"15.4\":0.12242,\"15.5\":0.30244,\"15.6\":1.11471,\"16.0\":1.53092,\"16.1\":3.24618,\"16.2\":3.75457,\"16.3\":2.13292,\"16.4\":0.0072},P:{\"4\":0.10413,\"20\":0.2499,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0.05206,\"8.2\":0,\"9.2\":0,\"10.1\":0,\"11.1-11.2\":0.01041,\"12.0\":0,\"13.0\":0.01041,\"14.0\":0,\"15.0\":0.01041,\"16.0\":0.02083,\"17.0\":0.03124,\"18.0\":0.02083,\"19.0\":0.38527},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.02976,\"4.2-4.3\":0.0085,\"4.4\":0,\"4.4.3-4.4.4\":0.09354},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0.00633,\"9\":0,\"10\":0,\"11\":0.05698,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0.00424,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.03395},H:{\"0\":0.16072},L:{\"0\":52.14233},R:{_:\"0\"},M:{\"0\":0.15703},Q:{\"13.1\":0}};\n/data/regions/NL.js\u0011module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0.00515,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.01031,\"53\":0,\"54\":0,\"55\":0.00515,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0.00515,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0.00515,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.01546,\"79\":0.00515,\"80\":0.00515,\"81\":0.01546,\"82\":0.00515,\"83\":0.00515,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0.00515,\"89\":0,\"90\":0,\"91\":0.01546,\"92\":0,\"93\":0,\"94\":0.01031,\"95\":0,\"96\":0,\"97\":0.00515,\"98\":0,\"99\":0,\"100\":0.00515,\"101\":0,\"102\":0.34525,\"103\":0.00515,\"104\":0.00515,\"105\":0.00515,\"106\":0.01031,\"107\":0.01546,\"108\":0.05153,\"109\":0.98422,\"110\":0.66989,\"111\":0.00515,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0.00515,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0.03607,\"48\":0.01031,\"49\":0.01031,\"50\":0,\"51\":0,\"52\":0.03607,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0.00515,\"61\":0.00515,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0.01546,\"67\":0.00515,\"68\":0.00515,\"69\":0,\"70\":0,\"71\":0,\"72\":0.03092,\"73\":0.00515,\"74\":0.00515,\"75\":0.00515,\"76\":0.00515,\"77\":0.00515,\"78\":0.01031,\"79\":0.06699,\"80\":0.01031,\"81\":0.00515,\"83\":0.01546,\"84\":0.03092,\"85\":0.14428,\"86\":0.06184,\"87\":0.03092,\"88\":0.01031,\"89\":0.01031,\"90\":0.01031,\"91\":0.01031,\"92\":0.02061,\"93\":0.02061,\"94\":0.00515,\"95\":0.00515,\"96\":0.02061,\"97\":0.01031,\"98\":0.02061,\"99\":0.01031,\"100\":0.0773,\"101\":0.0773,\"102\":0.05153,\"103\":0.15974,\"104\":0.05153,\"105\":0.05668,\"106\":0.05153,\"107\":0.09275,\"108\":0.64928,\"109\":8.03353,\"110\":5.05509,\"111\":0.00515,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0.00515,\"67\":0.02577,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0.00515,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0.00515,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.03092,\"94\":0.29372,\"95\":0.19581,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0.01546,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0.00515,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00515,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0.00515,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0.00515,\"103\":0.00515,\"104\":0.00515,\"105\":0.00515,\"106\":0.01031,\"107\":0.02061,\"108\":0.10821,\"109\":1.70564,\"110\":2.2364},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.00515,\"14\":0.07214,\"15\":0.01546,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0.01031,\"10.1\":0,\"11.1\":0,\"12.1\":0.03607,\"13.1\":0.10821,\"14.1\":0.18551,\"15.1\":0.03607,\"15.2-15.3\":0.03092,\"15.4\":0.06184,\"15.5\":0.12883,\"15.6\":0.65443,\"16.0\":0.0773,\"16.1\":0.25765,\"16.2\":0.91723,\"16.3\":0.64928,\"16.4\":0.03092},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0.0031,\"8.1-8.4\":0,\"9.0-9.2\":0.09298,\"9.3\":0.08988,\"10.0-10.2\":0,\"10.3\":0.10228,\"11.0-11.2\":0.0093,\"11.3-11.4\":0.04649,\"12.0-12.1\":0.0124,\"12.2-12.5\":0.51139,\"13.0-13.1\":0.0093,\"13.2\":0.0093,\"13.3\":0.0217,\"13.4-13.7\":0.08678,\"14.0-14.4\":0.26035,\"14.5-14.8\":0.68496,\"15.0-15.1\":0.17666,\"15.2-15.3\":0.25415,\"15.4\":0.28204,\"15.5\":0.63537,\"15.6\":2.34311,\"16.0\":3.3535,\"16.1\":8.34656,\"16.2\":7.95914,\"16.3\":4.27711,\"16.4\":0.0217},P:{\"4\":0.103,\"20\":1.83338,\"5.0-5.4\":0.0103,\"6.2-6.4\":0,\"7.2-7.4\":0.0103,\"8.2\":0,\"9.2\":0,\"10.1\":0,\"11.1-11.2\":0.0103,\"12.0\":0.0103,\"13.0\":0.0206,\"14.0\":0.0103,\"15.0\":0.0103,\"16.0\":0.0309,\"17.0\":0.0412,\"18.0\":0.0721,\"19.0\":2.61617},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0.04397,\"2.3\":0,\"4.1\":0.00489,\"4.2-4.3\":0.0342,\"4.4\":0,\"4.4.3-4.4.4\":0.07817},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0.00658,\"7\":0,\"8\":0.01975,\"9\":0.03951,\"10\":0.01317,\"11\":0.15803,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.42654},H:{\"0\":0.39464},L:{\"0\":34.75296},R:{_:\"0\"},M:{\"0\":0.6398},Q:{\"13.1\":0.01454}};\n%/data/features/es6-string-includes.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB FC GC\"},D:{\"1\":\"IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB\"},E:{\"1\":\"F A B C K L G MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E IC 0B JC KC LC\"},F:{\"1\":\"5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 F B C G M N O x g y z QC RC SC TC rB BC UC sB\"},G:{\"1\":\"aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:6,C:\"String.prototype.includes\"};\n/data/features/webauthn.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C\",\"226\":\"K L G M N\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB FC GC\",\"5124\":\"aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\"},D:{\"1\":\"gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB\"},E:{\"1\":\"K L G 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A B C IC 0B JC KC LC MC 1B rB\",\"322\":\"sB\"},F:{\"1\":\"VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB QC RC SC TC rB BC UC sB\"},G:{\"1\":\"nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC\",\"578\":\"jC\",\"2052\":\"mC\",\"3076\":\"kC lC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1028\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g 7C 8C 9C\",\"2\":\"I xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"2\":\"BD\"}},B:2,C:\"Web Authentication API\"};\n!/data/features/input-inputmode.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"1\":\"e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB I w J D E F A B C K L G M FC GC\",\"4\":\"N O x g\",\"194\":\"0 1 2 3 4 5 6 7 8 9 y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d\"},D:{\"1\":\"fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB\",\"66\":\"XB YB ZB vB aB wB bB cB dB eB\"},E:{\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB QC RC SC TC rB BC UC sB\",\"66\":\"KB LB MB NB OB PB QB RB SB TB\"},G:{\"1\":\"hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I xC yC zC 0C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"194\":\"BD CD\"}},B:1,C:\"inputmode attribute\"};\n /data/features/css-cross-fade.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"2\":\"C K L G M N O\",\"33\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"2\":\"I w J D E F A B C K L G M\",\"33\":\"0 1 2 3 4 5 6 7 8 9 N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"A B C K L G 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w IC 0B\",\"33\":\"J D E F JC KC LC MC\"},F:{\"2\":\"F B C QC RC SC TC rB BC UC sB\",\"33\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\"},G:{\"1\":\"cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC CC\",\"33\":\"E WC XC YC ZC aC bC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I qC rC sC tC CC\",\"33\":\"H uC vC\"},J:{\"2\":\"D A\"},K:{\"2\":\"A B C rB BC sB\",\"33\":\"h\"},L:{\"33\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"33\":\"wC\"},P:{\"33\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"33\":\"2B\"},R:{\"33\":\"AD\"},S:{\"2\":\"BD CD\"}},B:4,C:\"CSS Cross-Fade Function\"};\n'/data/features/extended-system-fonts.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"2\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"L G 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A B C K IC 0B JC KC LC MC 1B rB sB\"},F:{\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\"},G:{\"1\":\"lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"2\":\"A B C h rB BC sB\"},L:{\"2\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"2\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"2\":\"2B\"},R:{\"2\":\"AD\"},S:{\"2\":\"BD CD\"}},B:5,C:\"ui-serif, ui-sans-serif, ui-monospace and ui-rounded values for font-family\"};\n/data/regions/KN.js\u000bmodule.exports={C:{\"94\":0.0042,\"102\":0.021,\"108\":0.021,\"109\":1.0878,\"110\":0.7518,_:\"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 95 96 97 98 99 100 101 103 104 105 106 107 111 112 3.5 3.6\"},D:{\"34\":0.0042,\"37\":0.0042,\"38\":0.0042,\"63\":0.0042,\"68\":0.0042,\"74\":0.0084,\"75\":0.0462,\"76\":0.042,\"79\":0.9996,\"81\":0.0042,\"83\":0.0462,\"84\":0.0126,\"87\":0.0546,\"88\":0.0168,\"91\":0.0042,\"92\":0.0966,\"93\":0.0378,\"94\":0.0042,\"95\":0.0126,\"96\":0.0084,\"98\":0.0168,\"99\":0.0042,\"100\":0.0462,\"101\":0.0084,\"102\":0.0168,\"103\":0.2268,\"104\":0.0252,\"105\":0.0336,\"106\":0.0546,\"107\":0.105,\"108\":0.6384,\"109\":14.9856,\"110\":7.4886,\"111\":0.0042,_:\"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 35 36 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 64 65 66 67 69 70 71 72 73 77 78 80 85 86 89 90 97 112 113\"},F:{\"93\":0.0168,\"94\":0.3108,\"95\":0.0672,_:\"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1\",\"10.0-10.1\":0},B:{\"17\":0.0084,\"18\":0.0126,\"84\":0.0084,\"89\":0.0042,\"92\":0.0042,\"94\":0.0042,\"106\":0.0336,\"107\":0.0924,\"108\":0.1302,\"109\":2.6544,\"110\":4.0026,_:\"12 13 14 15 16 79 80 81 83 85 86 87 88 90 91 93 95 96 97 98 99 100 101 102 103 104 105\"},E:{\"4\":0,\"14\":0.042,\"15\":0.0084,_:\"0 5 6 7 8 9 10 11 12 13 3.1 3.2 5.1 6.1 7.1 9.1 10.1 11.1\",\"12.1\":0.0294,\"13.1\":0.2142,\"14.1\":0.3108,\"15.1\":0.0042,\"15.2-15.3\":0.0252,\"15.4\":0.042,\"15.5\":0.084,\"15.6\":0.9912,\"16.0\":0.1008,\"16.1\":0.1596,\"16.2\":1.2894,\"16.3\":1.0038,\"16.4\":0.0042},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0.0036,\"6.0-6.1\":0,\"7.0-7.1\":0,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0.0054,\"10.0-10.2\":0,\"10.3\":0.03962,\"11.0-11.2\":0.0054,\"11.3-11.4\":0.0072,\"12.0-12.1\":0.01261,\"12.2-12.5\":0.36015,\"13.0-13.1\":0,\"13.2\":0,\"13.3\":0.01261,\"13.4-13.7\":0.01801,\"14.0-14.4\":0.03602,\"14.5-14.8\":0.37456,\"15.0-15.1\":0.02521,\"15.2-15.3\":1.11647,\"15.4\":0.04862,\"15.5\":0.32774,\"15.6\":1.23532,\"16.0\":1.50184,\"16.1\":2.92984,\"16.2\":5.17539,\"16.3\":3.27379,\"16.4\":0.009},P:{\"4\":0.29513,\"20\":0.98026,\"5.0-5.4\":0.01042,\"6.2-6.4\":0.0206,\"7.2-7.4\":0.13703,\"8.2\":0.02044,\"9.2\":0.0307,\"10.1\":0.0217,\"11.1-11.2\":0.01054,\"12.0\":0.02036,\"13.0\":0.03162,\"14.0\":0.05117,\"15.0\":0.02108,\"16.0\":0.04216,\"17.0\":0.06324,\"18.0\":0.0527,\"19.0\":1.65484},I:{\"0\":0,\"3\":0,\"4\":0.00464,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0,\"4.4\":0,\"4.4.3-4.4.4\":0.01856},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"11\":0.0126,_:\"6 7 8 9 10 5.5\"},N:{\"10\":0.03712,\"11\":0.07423},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.1334},H:{\"0\":1.80656},L:{\"0\":38.0668},R:{_:\"0\"},M:{\"0\":0.3828},Q:{\"13.1\":0}};\n/data/features/hidden.js\u0005module.exports={A:{A:{\"1\":\"B\",\"2\":\"J D E F A DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"I w\"},E:{\"1\":\"J D E F A B C K L G JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w IC 0B\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e rB BC UC sB\",\"2\":\"F B QC RC SC TC\"},G:{\"1\":\"E WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC CC\"},H:{\"1\":\"pC\"},I:{\"1\":\"I H tC CC uC vC\",\"2\":\"uB qC rC sC\"},J:{\"1\":\"A\",\"2\":\"D\"},K:{\"1\":\"C h rB BC sB\",\"2\":\"A B\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"B\",\"2\":\"A\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:1,C:\"hidden attribute\"};\n/data/regions/PE.js\u0011=module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.00486,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0.00486,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0.00486,\"85\":0,\"86\":0,\"87\":0,\"88\":0.00486,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0.02429,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0.00971,\"103\":0,\"104\":0.01943,\"105\":0.00971,\"106\":0.00971,\"107\":0.02429,\"108\":0.01457,\"109\":0.26714,\"110\":0.17971,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0.00486,\"35\":0,\"36\":0,\"37\":0,\"38\":0.01943,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0.00486,\"48\":0,\"49\":0.01457,\"50\":0,\"51\":0,\"52\":0,\"53\":0.00971,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0.00971,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0.00486,\"75\":0,\"76\":0.00486,\"77\":0.00486,\"78\":0.00486,\"79\":0.18942,\"80\":0.00486,\"81\":0.01943,\"83\":0.00486,\"84\":0.00486,\"85\":0.00486,\"86\":0.00486,\"87\":0.02429,\"88\":0.00971,\"89\":0.00486,\"90\":0.00971,\"91\":0.04857,\"92\":0.02914,\"93\":0.02914,\"94\":0.00971,\"95\":0.02429,\"96\":0.034,\"97\":0.02914,\"98\":0.01943,\"99\":0.02429,\"100\":0.02429,\"101\":0.034,\"102\":0.01943,\"103\":0.08257,\"104\":0.05343,\"105\":0.05343,\"106\":0.04857,\"107\":0.09228,\"108\":0.30113,\"109\":10.48141,\"110\":7.06208,\"111\":0.00486,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0.00486,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0.00486,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.00486,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00486,\"93\":0.12143,\"94\":0.99569,\"95\":0.34485,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0.00486,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0.00486,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00486,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0.00486,\"104\":0,\"105\":0.00486,\"106\":0.00486,\"107\":0.01457,\"108\":0.01943,\"109\":0.54884,\"110\":0.76255},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0.00971,\"15\":0.00486,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0,\"13.1\":0.01457,\"14.1\":0.02429,\"15.1\":0.00486,\"15.2-15.3\":0.00486,\"15.4\":0.00486,\"15.5\":0.01943,\"15.6\":0.07286,\"16.0\":0.01457,\"16.1\":0.04857,\"16.2\":0.07286,\"16.3\":0.05343,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0.00326,\"6.0-6.1\":0,\"7.0-7.1\":0.00131,\"8.1-8.4\":0,\"9.0-9.2\":0.00392,\"9.3\":0.01762,\"10.0-10.2\":0,\"10.3\":0.01306,\"11.0-11.2\":0.00392,\"11.3-11.4\":0.00261,\"12.0-12.1\":0.00783,\"12.2-12.5\":0.20105,\"13.0-13.1\":0.00587,\"13.2\":0.00131,\"13.3\":0.01044,\"13.4-13.7\":0.02872,\"14.0-14.4\":0.0705,\"14.5-14.8\":0.22128,\"15.0-15.1\":0.0594,\"15.2-15.3\":0.06854,\"15.4\":0.1175,\"15.5\":0.24152,\"15.6\":0.62077,\"16.0\":0.73369,\"16.1\":1.36555,\"16.2\":1.40472,\"16.3\":0.88774,\"16.4\":0.00392},P:{\"4\":0.29544,\"20\":0.25469,\"5.0-5.4\":0.01019,\"6.2-6.4\":0,\"7.2-7.4\":0.11206,\"8.2\":0,\"9.2\":0.01019,\"10.1\":0,\"11.1-11.2\":0.03056,\"12.0\":0,\"13.0\":0.04075,\"14.0\":0.03056,\"15.0\":0.02038,\"16.0\":0.06113,\"17.0\":0.06113,\"18.0\":0.07131,\"19.0\":0.60108},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.01061,\"4.2-4.3\":0.00424,\"4.4\":0,\"4.4.3-4.4.4\":0.09972},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.02914,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.02057},H:{\"0\":0.18502},L:{\"0\":67.98175},R:{_:\"0\"},M:{\"0\":0.08743},Q:{\"13.1\":0}};\n/data/features/web-animation.js\u00062module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\",\"260\":\"P Q R S\"},C:{\"1\":\"R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z FC GC\",\"260\":\"vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB\",\"516\":\"OB PB QB RB SB TB UB VB WB XB YB ZB\",\"580\":\"AB BB CB DB EB FB GB HB IB JB KB LB MB NB\",\"2049\":\"nB oB pB qB P Q\"},D:{\"1\":\"T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB\",\"132\":\"DB EB FB\",\"260\":\"GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S\"},E:{\"1\":\"G OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A IC 0B JC KC LC MC 1B\",\"1090\":\"B C K rB sB\",\"2049\":\"L 2B NC\"},F:{\"1\":\"kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F B C G M N O x g y z QC RC SC TC rB BC UC sB\",\"132\":\"0 1 2\",\"260\":\"3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC\",\"1090\":\"eC fC gC hC iC jC kC\",\"2049\":\"lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"260\":\"wC\"},P:{\"260\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"260\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"516\":\"BD\"}},B:5,C:\"Web Animations API\"};\n/data/regions/BE.js\u0011module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0.00608,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0.00608,\"49\":0,\"50\":0.00608,\"51\":0,\"52\":0.01825,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0.00608,\"67\":0,\"68\":0.00608,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.03041,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0.00608,\"84\":0,\"85\":0,\"86\":0,\"87\":0.10948,\"88\":0.00608,\"89\":0,\"90\":0,\"91\":0.00608,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0.07907,\"103\":0.00608,\"104\":0,\"105\":0.00608,\"106\":0.01216,\"107\":0.01216,\"108\":0.20679,\"109\":1.19207,\"110\":0.86364,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0.00608,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0.03041,\"50\":0,\"51\":0,\"52\":0,\"53\":0.00608,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0.00608,\"61\":0,\"62\":0,\"63\":0,\"64\":0.09123,\"65\":0.00608,\"66\":0.01825,\"67\":0.00608,\"68\":0.00608,\"69\":0,\"70\":0,\"71\":0,\"72\":0.00608,\"73\":0,\"74\":0.04866,\"75\":0.04257,\"76\":0.04257,\"77\":0.04257,\"78\":0.63861,\"79\":0.86973,\"80\":0.02433,\"81\":0.01216,\"83\":0.06082,\"84\":0.02433,\"85\":0.02433,\"86\":0.01216,\"87\":0.03649,\"88\":0.00608,\"89\":0.01216,\"90\":0.00608,\"91\":0.01825,\"92\":0.02433,\"93\":0.01216,\"94\":0.00608,\"95\":0.00608,\"96\":0.00608,\"97\":0.01216,\"98\":0.01216,\"99\":0.04257,\"100\":0.00608,\"101\":0.02433,\"102\":0.03649,\"103\":0.1338,\"104\":0.02433,\"105\":0.09123,\"106\":0.06082,\"107\":0.08515,\"108\":1.22856,\"109\":12.38295,\"110\":7.11594,\"111\":0.00608,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.00608,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.07907,\"94\":0.4379,\"95\":0.18854,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0.00608,\"16\":0.00608,\"17\":0.00608,\"18\":0.00608,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0.00608,\"90\":0,\"91\":0,\"92\":0.00608,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0.00608,\"100\":0,\"101\":0.00608,\"102\":0.00608,\"103\":0.00608,\"104\":0.00608,\"105\":0.00608,\"106\":0.00608,\"107\":0.03041,\"108\":0.1703,\"109\":2.60918,\"110\":2.64567},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.00608,\"14\":0.06082,\"15\":0.01216,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0.03649,\"13.1\":0.14597,\"14.1\":0.18246,\"15.1\":0.03649,\"15.2-15.3\":0.03041,\"15.4\":0.08515,\"15.5\":0.1703,\"15.6\":0.79066,\"16.0\":0.09123,\"16.1\":0.27977,\"16.2\":0.91838,\"16.3\":0.6082,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0.00302,\"8.1-8.4\":0.00604,\"9.0-9.2\":0,\"9.3\":0.09066,\"10.0-10.2\":0,\"10.3\":0.12089,\"11.0-11.2\":0.02418,\"11.3-11.4\":0.07858,\"12.0-12.1\":0.03022,\"12.2-12.5\":0.48657,\"13.0-13.1\":0.00604,\"13.2\":0.00302,\"13.3\":0.01813,\"13.4-13.7\":0.136,\"14.0-14.4\":0.25688,\"14.5-14.8\":0.73136,\"15.0-15.1\":0.18435,\"15.2-15.3\":0.25084,\"15.4\":0.29315,\"15.5\":0.65883,\"15.6\":2.85896,\"16.0\":3.50268,\"16.1\":7.94827,\"16.2\":7.27433,\"16.3\":3.72934,\"16.4\":0.01511},P:{\"4\":0.07199,\"20\":1.15189,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0.08228,\"8.2\":0,\"9.2\":0,\"10.1\":0,\"11.1-11.2\":0,\"12.0\":0,\"13.0\":0.01028,\"14.0\":0.02057,\"15.0\":0.01028,\"16.0\":0.02057,\"17.0\":0.03085,\"18.0\":0.05142,\"19.0\":1.75869},I:{\"0\":0,\"3\":0,\"4\":0.00794,\"2.1\":0,\"2.2\":0,\"2.3\":0.00794,\"4.1\":0.0119,\"4.2-4.3\":0.09524,\"4.4\":0,\"4.4.3-4.4.4\":0.12698},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0.01216,\"9\":0.01216,\"10\":0,\"11\":0.07298,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0.00392,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.02351},H:{\"0\":0.10386},L:{\"0\":28.37111},R:{_:\"0\"},M:{\"0\":0.25859},Q:{\"13.1\":0}};\n/data/features/css-paint-api.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"1\":\"eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB\"},E:{\"2\":\"I w J D E F A B C IC 0B JC KC LC MC 1B rB\",\"194\":\"K L G sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB QC RC SC TC rB BC UC sB\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"2\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"2\":\"BD CD\"}},B:4,C:\"CSS Painting API\"};\n$/data/features/css-default-pseudo.js\u0006\u0016module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"16\":\"EC uB FC GC\"},D:{\"1\":\"SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"16\":\"I w J D E F A B C K L\",\"132\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB\"},E:{\"1\":\"B C K L G 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"16\":\"I w IC 0B\",\"132\":\"J D E F A JC KC LC MC\"},F:{\"1\":\"FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"16\":\"F B QC RC SC TC rB BC\",\"132\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB\",\"260\":\"C UC sB\"},G:{\"1\":\"dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"16\":\"0B VC CC WC XC\",\"132\":\"E YC ZC aC bC cC\"},H:{\"260\":\"pC\"},I:{\"1\":\"H\",\"16\":\"uB qC rC sC\",\"132\":\"I tC CC uC vC\"},J:{\"16\":\"D\",\"132\":\"A\"},K:{\"1\":\"h\",\"16\":\"A B C rB BC\",\"260\":\"sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"132\":\"I\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:5,C:\":default CSS pseudo-class\"};\n%/data/features/css-filter-function.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"2\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"A B C K L G MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E IC 0B JC KC LC\",\"33\":\"F\"},F:{\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\"},G:{\"1\":\"cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC\",\"33\":\"aC bC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"2\":\"A B C h rB BC sB\"},L:{\"2\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"2\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"2\":\"2B\"},R:{\"2\":\"AD\"},S:{\"2\":\"BD CD\"}},B:5,C:\"CSS filter() function\"};\n/data/features/minmaxwh.js\u0005module.exports={A:{A:{\"1\":\"F A B\",\"8\":\"J DC\",\"129\":\"D\",\"257\":\"E\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\"},G:{\"1\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"1\":\"pC\"},I:{\"1\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"1\":\"D A\"},K:{\"1\":\"A B C h rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:2,C:\"CSS min/max-width/height\"};\n%/data/features/css-text-align-last.js\u0005module.exports={A:{A:{\"132\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"4\":\"C K L G M N O\"},C:{\"1\":\"QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB I w J D E F A B FC GC\",\"33\":\"0 1 2 3 4 5 6 7 8 9 C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB\"},D:{\"1\":\"OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB\",\"322\":\"CB DB EB FB GB HB IB JB KB LB MB NB\"},E:{\"1\":\"tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B\"},F:{\"1\":\"BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F B C G M N O x g y QC RC SC TC rB BC UC sB\",\"578\":\"0 1 2 3 4 5 6 7 8 9 z AB\"},G:{\"1\":\"tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"132\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"33\":\"BD\"}},B:4,C:\"CSS3 text-align-last\"};\n/data/features/spdy.js\u0005module.exports={A:{A:{\"1\":\"B\",\"2\":\"J D E F A DC\"},B:{\"2\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB\",\"2\":\"EC uB I w J D E F A B C SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB\",\"2\":\"SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"E F A B C MC 1B rB\",\"2\":\"I w J D IC 0B JC KC LC\",\"129\":\"K L G sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB JB LB sB\",\"2\":\"F B C HB IB KB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC\"},G:{\"1\":\"E ZC aC bC cC dC eC fC gC\",\"2\":\"0B VC CC WC XC YC\",\"257\":\"hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"1\":\"uB I tC CC uC vC\",\"2\":\"H qC rC sC\"},J:{\"2\":\"D A\"},K:{\"1\":\"sB\",\"2\":\"A B C h rB BC\"},L:{\"2\":\"H\"},M:{\"2\":\"f\"},N:{\"1\":\"B\",\"2\":\"A\"},O:{\"2\":\"wC\"},P:{\"1\":\"I\",\"2\":\"g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"2\":\"2B\"},R:{\"2\":\"AD\"},S:{\"1\":\"BD\",\"2\":\"CD\"}},B:7,C:\"SPDY protocol\"};\n-/data/features/css-font-rendering-controls.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"1\":\"ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB FC GC\",\"194\":\"NB OB PB QB RB SB TB UB VB WB XB YB\"},D:{\"1\":\"aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB\",\"66\":\"QB RB SB TB UB VB WB XB YB ZB vB\"},E:{\"1\":\"C K L G rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A B IC 0B JC KC LC MC 1B\"},F:{\"1\":\"OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB QC RC SC TC rB BC UC sB\",\"66\":\"DB EB FB GB HB IB JB KB LB MB NB\"},G:{\"1\":\"fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I\",\"66\":\"xC yC zC\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"194\":\"BD\"}},B:5,C:\"CSS font-display\"};\n/data/regions/alt-an.js\tmodule.exports={C:{\"109\":0.01822,_:\"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 110 111 112 3.5 3.6\"},D:{\"106\":0.01822,\"108\":0.01093,\"109\":0.02915,_:\"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 107 110 111 112 113\"},F:{_:\"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1\",\"10.0-10.1\":0},B:{_:\"12 13 14 15 16 17 18 79 80 81 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110\"},E:{\"4\":0,\"14\":0.01093,_:\"0 5 6 7 8 9 10 11 12 13 15 3.1 3.2 5.1 6.1 7.1 9.1 10.1 11.1 12.1 14.1\",\"13.1\":0.02915,\"15.1\":0.696,\"15.2-15.3\":0.49923,\"15.4\":0.32067,\"15.5\":2.11352,\"15.6\":7.84918,\"16.0\":3.37434,\"16.1\":4.25984,\"16.2\":7.59774,\"16.3\":7.73621,\"16.4\":0.58304},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0,\"10.0-10.2\":0,\"10.3\":0,\"11.0-11.2\":0,\"11.3-11.4\":0,\"12.0-12.1\":0,\"12.2-12.5\":0,\"13.0-13.1\":0,\"13.2\":0,\"13.3\":0,\"13.4-13.7\":0,\"14.0-14.4\":0,\"14.5-14.8\":0,\"15.0-15.1\":0.74664,\"15.2-15.3\":2.34471,\"15.4\":0.24233,\"15.5\":0.47811,\"15.6\":6.08447,\"16.0\":6.06482,\"16.1\":19.91697,\"16.2\":18.17481,\"16.3\":8.46848,\"16.4\":0.94967},P:{\"4\":0.24775,\"20\":0.75357,\"5.0-5.4\":0.04075,\"6.2-6.4\":0.08151,\"7.2-7.4\":0.23743,\"8.2\":0.01016,\"9.2\":0.03097,\"10.1\":0.01011,\"11.1-11.2\":0.07226,\"12.0\":0.02065,\"13.0\":0.08258,\"14.0\":0.08258,\"15.0\":0.04129,\"16.0\":0.15484,\"17.0\":0.14452,\"18.0\":0.1342,\"19.0\":2.07491},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0,\"4.4\":0,\"4.4.3-4.4.4\":0},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{_:\"6 7 8 9 10 11 5.5\"},N:{\"10\":0.03712,\"11\":0.07423},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0},H:{\"0\":0},L:{\"0\":0.08898},R:{_:\"0\"},M:{\"0\":0},Q:{\"13.1\":0}};\n/data/features/ogv.js\u0005module.exports={A:{A:{\"2\":\"J D E DC\",\"8\":\"F A B\"},B:{\"1\":\"N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"8\":\"C K L G M\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\",\"2\":\"EC uB\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e SC TC rB BC UC sB\",\"2\":\"F QC RC\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"2\":\"A B C h rB BC sB\"},L:{\"2\":\"H\"},M:{\"1\":\"f\"},N:{\"8\":\"A B\"},O:{\"1\":\"wC\"},P:{\"2\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"2\":\"AD\"},S:{\"1\":\"BD CD\"}},B:6,C:\"Ogg/Theora video format\"};\n!/data/features/abortcontroller.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G\"},C:{\"1\":\"YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB FC GC\"},D:{\"1\":\"fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB\"},E:{\"1\":\"K L G sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A B IC 0B JC KC LC MC 1B\",\"130\":\"C rB\"},F:{\"1\":\"UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB QC RC SC TC rB BC UC sB\"},G:{\"1\":\"fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I xC yC zC 0C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"2\":\"BD\"}},B:1,C:\"AbortController & AbortSignal\"};\n/data/regions/PN.js\u000e2module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0,\"108\":0,\"109\":0,\"110\":0,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0,\"108\":0,\"109\":0,\"110\":100,\"111\":0,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0,\"108\":0,\"109\":0,\"110\":0},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0,\"13.1\":0,\"14.1\":0,\"15.1\":0,\"15.2-15.3\":0,\"15.4\":0,\"15.5\":0,\"15.6\":0,\"16.0\":0,\"16.1\":0,\"16.2\":0,\"16.3\":0,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0,\"10.0-10.2\":0,\"10.3\":0,\"11.0-11.2\":0,\"11.3-11.4\":0,\"12.0-12.1\":0,\"12.2-12.5\":0,\"13.0-13.1\":0,\"13.2\":0,\"13.3\":0,\"13.4-13.7\":0,\"14.0-14.4\":0,\"14.5-14.8\":0,\"15.0-15.1\":0,\"15.2-15.3\":0,\"15.4\":0,\"15.5\":0,\"15.6\":0,\"16.0\":0,\"16.1\":0,\"16.2\":0,\"16.3\":0,\"16.4\":0},P:{\"4\":0,\"20\":0,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0,\"8.2\":0,\"9.2\":0,\"10.1\":0,\"11.1-11.2\":0,\"12.0\":0,\"13.0\":0,\"14.0\":0,\"15.0\":0,\"16.0\":0,\"17.0\":0,\"18.0\":0,\"19.0\":0},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0,\"4.4\":0,\"4.4.3-4.4.4\":0},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0},H:{\"0\":0},L:{\"0\":0},R:{_:\"0\"},M:{\"0\":0},Q:{\"13.1\":0}};\n/data/features/webhid.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\",\"66\":\"P Q R S T U V W X\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"1\":\"Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB\",\"66\":\"qB P Q R S T U V W X\"},E:{\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB QC RC SC TC rB BC UC sB\",\"66\":\"fB gB hB iB jB kB lB h mB nB\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"2\":\"A B C h rB BC sB\"},L:{\"2\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"2\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"2\":\"2B\"},R:{\"2\":\"AD\"},S:{\"2\":\"BD CD\"}},B:7,C:\"WebHID API\"};\n!/data/features/iframe-seamless.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"2\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"2\":\"4 5 6 7 8 9 I w J D E F A B C K L G M N O x AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"66\":\"0 1 2 3 g y z\"},E:{\"2\":\"I w J E F A B C K L G IC 0B JC KC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"130\":\"D LC\"},F:{\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\"},G:{\"2\":\"E 0B VC CC WC XC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"130\":\"YC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"2\":\"A B C h rB BC sB\"},L:{\"2\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"2\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"2\":\"2B\"},R:{\"2\":\"AD\"},S:{\"2\":\"BD CD\"}},B:7,C:\"seamless attribute for iframes\"};\n/data/regions/GA.js\u0011Fmodule.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0.00307,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0.00307,\"48\":0.00614,\"49\":0,\"50\":0,\"51\":0,\"52\":0.00307,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.00307,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0.0215,\"89\":0,\"90\":0,\"91\":0.01843,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0.00307,\"100\":0.00307,\"101\":0,\"102\":0.00307,\"103\":0,\"104\":0,\"105\":0.01843,\"106\":0.00307,\"107\":0.01228,\"108\":0.00307,\"109\":0.41459,\"110\":0.3071,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.00307,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0.01228,\"39\":0,\"40\":0.00921,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0.00614,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0.00307,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0.00307,\"66\":0,\"67\":0,\"68\":0.00307,\"69\":0.00307,\"70\":0,\"71\":0,\"72\":0.00921,\"73\":0.00307,\"74\":0.00921,\"75\":0.00614,\"76\":0,\"77\":0,\"78\":0,\"79\":0.0737,\"80\":0.00307,\"81\":0.04914,\"83\":0.00307,\"84\":0.01536,\"85\":0,\"86\":0.00307,\"87\":0.0952,\"88\":0.0215,\"89\":0.0215,\"90\":0,\"91\":0.00307,\"92\":0,\"93\":0,\"94\":0,\"95\":0.02457,\"96\":0,\"97\":0,\"98\":0.00307,\"99\":0.00307,\"100\":0.00307,\"101\":0.00307,\"102\":0.03071,\"103\":0.05221,\"104\":0.14434,\"105\":0.00307,\"106\":0.0215,\"107\":0.01228,\"108\":0.15048,\"109\":2.84989,\"110\":1.53243,\"111\":0,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0.02764,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0.1382,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0.02457,\"62\":0,\"63\":0.01843,\"64\":0.00921,\"65\":0,\"66\":0.06142,\"67\":0.22111,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0.00921,\"80\":0.00921,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0.00614,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.03071,\"94\":0.05835,\"95\":0.13205,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0.00307,\"10.6\":0.00307,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0.00921},B:{\"12\":0.00921,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0.01843,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00614,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0.00921,\"101\":0,\"102\":0,\"103\":0,\"104\":0.00307,\"105\":0,\"106\":0,\"107\":0.00307,\"108\":0.01228,\"109\":0.42994,\"110\":0.66334},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0,\"13.1\":0.00921,\"14.1\":0.0215,\"15.1\":0,\"15.2-15.3\":0,\"15.4\":0.00307,\"15.5\":0.00921,\"15.6\":0.02764,\"16.0\":0,\"16.1\":0.00921,\"16.2\":0.01228,\"16.3\":0.01536,\"16.4\":0},G:{\"8\":0.00298,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0.04177,\"6.0-6.1\":0,\"7.0-7.1\":0.12831,\"8.1-8.4\":0.02387,\"9.0-9.2\":0.00298,\"9.3\":0.09101,\"10.0-10.2\":0,\"10.3\":0.02835,\"11.0-11.2\":0.03133,\"11.3-11.4\":0.00149,\"12.0-12.1\":0.22379,\"12.2-12.5\":3.74928,\"13.0-13.1\":0,\"13.2\":0,\"13.3\":0.00597,\"13.4-13.7\":0.08206,\"14.0-14.4\":0.27452,\"14.5-14.8\":0.25811,\"15.0-15.1\":0.22976,\"15.2-15.3\":0.92352,\"15.4\":0.30734,\"15.5\":0.49085,\"15.6\":0.82505,\"16.0\":0.58335,\"16.1\":1.59192,\"16.2\":1.30994,\"16.3\":1.37857,\"16.4\":0.00746},P:{\"4\":0.43263,\"20\":0.98887,\"5.0-5.4\":0,\"6.2-6.4\":0.0103,\"7.2-7.4\":0.74165,\"8.2\":0,\"9.2\":0.0309,\"10.1\":0,\"11.1-11.2\":0.0412,\"12.0\":0.0206,\"13.0\":0.08241,\"14.0\":0.0206,\"15.0\":0.18541,\"16.0\":0.57684,\"17.0\":0.0721,\"18.0\":0.12361,\"19.0\":1.28759},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0.00904,\"4.4\":0,\"4.4.3-4.4.4\":0.25207},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.00307,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0.03465,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0.02079},O:{\"0\":0.11779},H:{\"0\":2.40749},L:{\"0\":67.71982},R:{_:\"0\"},M:{\"0\":0.63747},Q:{\"13.1\":0.00693}};\n/data/features/temporal.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"2\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"2\":\"A B C h rB BC sB\"},L:{\"2\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"2\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"2\":\"2B\"},R:{\"2\":\"AD\"},S:{\"2\":\"BD CD\"}},B:6,C:\"Temporal\"};\n/data/regions/TN.js\u0011module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0.00405,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0.00405,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.04855,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0.00405,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0.00405,\"76\":0,\"77\":0,\"78\":0.00405,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0.00405,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0.00405,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0.00405,\"100\":0.00405,\"101\":0,\"102\":0.01618,\"103\":0.00405,\"104\":0.00809,\"105\":0.02023,\"106\":0.00809,\"107\":0.00405,\"108\":0.01214,\"109\":0.37628,\"110\":0.29131,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0.00405,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0.00405,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0.04451,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0.00809,\"57\":0,\"58\":0,\"59\":0,\"60\":0.00405,\"61\":0,\"62\":0,\"63\":0.00405,\"64\":0,\"65\":0.00809,\"66\":0,\"67\":0.00809,\"68\":0.00405,\"69\":0.00405,\"70\":0.01214,\"71\":0.00405,\"72\":0.00405,\"73\":0.00405,\"74\":0.00809,\"75\":0.00405,\"76\":0.00405,\"77\":0.00809,\"78\":0.00405,\"79\":0.01618,\"80\":0.00809,\"81\":0.02428,\"83\":0.01214,\"84\":0.00809,\"85\":0.01618,\"86\":0.01618,\"87\":0.04046,\"88\":0.01214,\"89\":0.02023,\"90\":0.01214,\"91\":0.00809,\"92\":0.01618,\"93\":0.00405,\"94\":0.00809,\"95\":0.01618,\"96\":0.01214,\"97\":0.01618,\"98\":0.01618,\"99\":0.01214,\"100\":0.01214,\"101\":0.02023,\"102\":0.02023,\"103\":0.0526,\"104\":0.02428,\"105\":0.04451,\"106\":0.04046,\"107\":0.06474,\"108\":0.2549,\"109\":7.1776,\"110\":3.45933,\"111\":0.00405,\"112\":0.00405,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0.00405,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0.00405,\"67\":0.01618,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0.01214,\"80\":0,\"81\":0,\"82\":0,\"83\":0.00405,\"84\":0,\"85\":0.01214,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.10924,\"94\":0.87798,\"95\":0.39246,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0.00809,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0.00405,\"85\":0,\"86\":0.00405,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00809,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0.00405,\"104\":0,\"105\":0.00405,\"106\":0,\"107\":0.01214,\"108\":0.02023,\"109\":0.42078,\"110\":0.57453},E:{\"4\":0.00405,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0.01618,\"15\":0,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0,\"13.1\":0.00405,\"14.1\":0.02023,\"15.1\":0.00405,\"15.2-15.3\":0.00405,\"15.4\":0.00809,\"15.5\":0.00809,\"15.6\":0.03641,\"16.0\":0.00809,\"16.1\":0.01618,\"16.2\":0.03237,\"16.3\":0.02023,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0.00325,\"6.0-6.1\":0.00649,\"7.0-7.1\":0.08197,\"8.1-8.4\":0.00325,\"9.0-9.2\":0.00081,\"9.3\":0.056,\"10.0-10.2\":0.00487,\"10.3\":0.03896,\"11.0-11.2\":0.00487,\"11.3-11.4\":0.00974,\"12.0-12.1\":0.01461,\"12.2-12.5\":0.47398,\"13.0-13.1\":0.00406,\"13.2\":0.00243,\"13.3\":0.0138,\"13.4-13.7\":0.08116,\"14.0-14.4\":0.30517,\"14.5-14.8\":0.37334,\"15.0-15.1\":0.10307,\"15.2-15.3\":0.13067,\"15.4\":0.15664,\"15.5\":0.24917,\"15.6\":0.68176,\"16.0\":0.73532,\"16.1\":1.31157,\"16.2\":1.39273,\"16.3\":0.91631,\"16.4\":0.00243},P:{\"4\":0.25974,\"20\":0.37403,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0.3013,\"8.2\":0,\"9.2\":0.01039,\"10.1\":0,\"11.1-11.2\":0.04156,\"12.0\":0.01039,\"13.0\":0.03117,\"14.0\":0.03117,\"15.0\":0.02078,\"16.0\":0.04156,\"17.0\":0.09351,\"18.0\":0.08312,\"19.0\":0.77923},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.01453,\"4.2-4.3\":0.02179,\"4.4\":0,\"4.4.3-4.4.4\":0.13437},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0.03709,\"9\":0.00927,\"10\":0.01391,\"11\":0.16226,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0.00595,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.14885},H:{\"0\":0.2593},L:{\"0\":73.34077},R:{_:\"0\"},M:{\"0\":0.1429},Q:{\"13.1\":0}};\n /data/features/battery-status.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"1\":\"KB LB MB NB OB PB QB RB SB\",\"2\":\"EC uB I w J D E F TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\",\"132\":\"0 1 2 3 4 5 6 7 8 9 M N O x g y z AB BB CB DB EB FB GB HB IB JB\",\"164\":\"A B C K L G\"},D:{\"1\":\"FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB\",\"66\":\"EB\"},E:{\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 F B C G M N O x g y z QC RC SC TC rB BC UC sB\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD\",\"2\":\"CD\"}},B:4,C:\"Battery Status API\"};\n/data/features/css-nesting.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"2\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u\",\"194\":\"v f H\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"1\":\"yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u\",\"194\":\"v f H\"},E:{\"1\":\"PC\",\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC\"},F:{\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d QC RC SC TC rB BC UC sB\",\"194\":\"e\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"2\":\"A B C h rB BC sB\"},L:{\"2\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"2\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"2\":\"2B\"},R:{\"2\":\"AD\"},S:{\"2\":\"BD CD\"}},B:5,C:\"CSS Nesting\"};\n/data/regions/SC.js\u0012module.exports={C:{\"2\":0.01662,\"3\":0.01108,\"4\":0.00554,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0.00554,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0.01662,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0.00554,\"46\":0.01108,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.01108,\"53\":0.00554,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0.01108,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0.01662,\"69\":0,\"70\":0,\"71\":0.00554,\"72\":0.00554,\"73\":0,\"74\":0.00554,\"75\":0,\"76\":0,\"77\":0.00554,\"78\":0.01662,\"79\":0,\"80\":0.00554,\"81\":0.00554,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0.04985,\"92\":0,\"93\":0.00554,\"94\":0,\"95\":0.00554,\"96\":0.00554,\"97\":0,\"98\":0.00554,\"99\":0,\"100\":0.00554,\"101\":0.00554,\"102\":0.94163,\"103\":0.01108,\"104\":0.05539,\"105\":0.24372,\"106\":0.06647,\"107\":0.03323,\"108\":0.21048,\"109\":0.32126,\"110\":0.1994,\"111\":0,\"112\":0,\"3.5\":0.00554,\"3.6\":0.01108},D:{\"4\":0.00554,\"5\":0.00554,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0.00554,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0.00554,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0.00554,\"42\":0,\"43\":0.01108,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0.00554,\"57\":0,\"58\":0,\"59\":0.09416,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0.00554,\"65\":0,\"66\":0.00554,\"67\":0,\"68\":0.01662,\"69\":0.01108,\"70\":0.01662,\"71\":0.01108,\"72\":0.5816,\"73\":0.00554,\"74\":0.02216,\"75\":0.00554,\"76\":0.01108,\"77\":0.01108,\"78\":0.02216,\"79\":0.01662,\"80\":0.01662,\"81\":0.01662,\"83\":0.06647,\"84\":0.05539,\"85\":0.28803,\"86\":0.4265,\"87\":0.02216,\"88\":0.0277,\"89\":0.12186,\"90\":1.79464,\"91\":1.82233,\"92\":1.85557,\"93\":1.81679,\"94\":1.82787,\"95\":0.01108,\"96\":0.01108,\"97\":0.0277,\"98\":0.03323,\"99\":0.03323,\"100\":1.00256,\"101\":0.02216,\"102\":0.0997,\"103\":0.05539,\"104\":0.02216,\"105\":0.09416,\"106\":0.29357,\"107\":0.10524,\"108\":0.27695,\"109\":7.58843,\"110\":3.51173,\"111\":0.00554,\"112\":0,\"113\":0},F:{\"9\":0.00554,\"11\":0.00554,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0.00554,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0.00554,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0.00554,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0.01108,\"67\":0.11632,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0.00554,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0.00554,\"88\":0,\"89\":0.00554,\"90\":0,\"91\":0,\"92\":0,\"93\":0.00554,\"94\":0.20494,\"95\":0.11632,\"9.5-9.6\":0.00554,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0.00554,\"13\":0.00554,\"14\":0.0277,\"15\":0,\"16\":0,\"17\":0.01108,\"18\":0.04431,\"79\":0,\"80\":0.00554,\"81\":0.00554,\"83\":0.00554,\"84\":0.01108,\"85\":0.00554,\"86\":0.00554,\"87\":0,\"88\":0.00554,\"89\":0.01108,\"90\":0.00554,\"91\":0,\"92\":0.00554,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0.04985,\"101\":0.00554,\"102\":0,\"103\":0.00554,\"104\":0.00554,\"105\":0.03877,\"106\":0.00554,\"107\":0.01662,\"108\":0.1274,\"109\":0.38219,\"110\":0.52621},E:{\"4\":0.00554,\"5\":0.00554,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0.01108,\"15\":0.00554,_:\"0\",\"3.1\":0.00554,\"3.2\":0.00554,\"5.1\":0.00554,\"6.1\":0,\"7.1\":0,\"9.1\":0.06647,\"10.1\":0,\"11.1\":0,\"12.1\":0.36557,\"13.1\":0.02216,\"14.1\":0.12186,\"15.1\":0.08309,\"15.2-15.3\":0.06647,\"15.4\":0.01108,\"15.5\":0.01662,\"15.6\":0.13848,\"16.0\":0.06647,\"16.1\":0.07201,\"16.2\":0.11078,\"16.3\":0.11632,\"16.4\":0},G:{\"8\":0.00204,\"3.2\":0.00407,\"4.0-4.1\":0,\"4.2-4.3\":0.00305,\"5.0-5.1\":0.00102,\"6.0-6.1\":0,\"7.0-7.1\":0.00814,\"8.1-8.4\":0,\"9.0-9.2\":0.00916,\"9.3\":0.06412,\"10.0-10.2\":0.01018,\"10.3\":0.02443,\"11.0-11.2\":0.02951,\"11.3-11.4\":0.0112,\"12.0-12.1\":0.02951,\"12.2-12.5\":0.3959,\"13.0-13.1\":0.02341,\"13.2\":0.01628,\"13.3\":0.01221,\"13.4-13.7\":0.08142,\"14.0-14.4\":0.20456,\"14.5-14.8\":0.30939,\"15.0-15.1\":0.24934,\"15.2-15.3\":0.28395,\"15.4\":0.24527,\"15.5\":0.1893,\"15.6\":0.73175,\"16.0\":1.04521,\"16.1\":1.92454,\"16.2\":2.1291,\"16.3\":1.29049,\"16.4\":0.00407},P:{\"4\":0.0408,\"20\":0.39781,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0.0306,\"8.2\":0,\"9.2\":0.0102,\"10.1\":0,\"11.1-11.2\":0.0102,\"12.0\":0.0306,\"13.0\":0.0816,\"14.0\":0.0204,\"15.0\":0.0102,\"16.0\":0.0204,\"17.0\":0.1428,\"18.0\":0.0306,\"19.0\":0.91803},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0.0623,\"4.4\":0,\"4.4.3-4.4.4\":0.10064},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0.02216,\"7\":0.01108,\"8\":0.04431,\"9\":0.02216,\"10\":0.01108,\"11\":0.0997,\"5.5\":0.01108},N:{\"10\":0,\"11\":0},S:{\"2.5\":0.00446,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.76729},H:{\"0\":0.56593},L:{\"0\":54.44368},R:{_:\"0\"},M:{\"0\":0.75837},Q:{\"13.1\":0.00892}};\n#/data/features/sharedarraybuffer.js\u0006\u001emodule.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z\",\"2\":\"C K L G\",\"194\":\"M N O\",\"513\":\"a b c d e i j k l m n o p q r s t u v f H\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB FC GC\",\"194\":\"YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h\",\"450\":\"mB nB oB pB qB\",\"513\":\"P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\"},D:{\"1\":\"hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB\",\"194\":\"aB wB bB cB dB eB fB gB\",\"513\":\"a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"2\":\"I w J D E F A IC 0B JC KC LC MC\",\"194\":\"B C K L G 1B rB sB 2B NC OC\",\"513\":\"3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB QC RC SC TC rB BC UC sB\",\"194\":\"OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC\",\"194\":\"dC eC fC gC hC iC jC kC lC mC nC oC\",\"513\":\"3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"2\":\"A B C rB BC sB\",\"513\":\"h\"},L:{\"513\":\"H\"},M:{\"513\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"2\":\"I xC yC zC 0C 1C 1B 2C 3C 4C 5C\",\"513\":\"g 6C tB 7C 8C 9C\"},Q:{\"2\":\"2B\"},R:{\"513\":\"AD\"},S:{\"2\":\"BD\",\"513\":\"CD\"}},B:6,C:\"Shared Array Buffer\"};\n/data/features/lazyload.js\u0005module.exports={A:{A:{\"1\":\"B\",\"2\":\"J D E F A DC\"},B:{\"1\":\"C K L G M N O\",\"2\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"2\":\"A B C h rB BC sB\"},L:{\"2\":\"H\"},M:{\"2\":\"f\"},N:{\"1\":\"B\",\"2\":\"A\"},O:{\"2\":\"wC\"},P:{\"2\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"2\":\"2B\"},R:{\"2\":\"AD\"},S:{\"2\":\"BD CD\"}},B:7,C:\"Resource Hints: Lazyload\"};\n/data/features/webxr.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"2\":\"C K L G M N O\",\"132\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB FC GC\",\"322\":\"pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\"},D:{\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB\",\"66\":\"eB fB gB hB iB jB kB lB h mB nB oB pB qB\",\"132\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"2\":\"I w J D E F A B C IC 0B JC KC LC MC 1B rB sB\",\"578\":\"K L G 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB QC RC SC TC rB BC UC sB\",\"66\":\"TB UB VB WB XB YB ZB aB bB cB dB eB\",\"132\":\"fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"2\":\"A B C rB BC sB\",\"132\":\"h\"},L:{\"132\":\"H\"},M:{\"322\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"2\":\"I xC yC zC 0C 1C 1B 2C\",\"132\":\"g 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"2\":\"2B\"},R:{\"2\":\"AD\"},S:{\"2\":\"BD\",\"322\":\"CD\"}},B:4,C:\"WebXR Device API\"};\n/data/regions/CK.js\u0010\u001bmodule.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0.00901,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0.00451,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0.01352,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.00451,\"79\":0,\"80\":0.00451,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0.00451,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0.00901,\"98\":0.00451,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0.00901,\"108\":0.04958,\"109\":0.40563,\"110\":0.31098,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0.02254,\"50\":0,\"51\":0,\"52\":0,\"53\":0.07662,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0.00451,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0.01352,\"80\":0,\"81\":0,\"83\":0.00901,\"84\":0,\"85\":0,\"86\":0,\"87\":0.00451,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0.00451,\"102\":0,\"103\":0.01803,\"104\":0,\"105\":0.02704,\"106\":0.06761,\"107\":0.07211,\"108\":0.34704,\"109\":11.04666,\"110\":5.30474,\"111\":0,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.00451,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0.00901,\"95\":0,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0.01352,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0.00451,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0.00451,\"106\":0,\"107\":0,\"108\":0,\"109\":0.44169,\"110\":0.55436},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.02704,\"14\":0.01803,\"15\":0.01803,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0.00451,\"12.1\":0.00451,\"13.1\":0.04056,\"14.1\":0.03155,\"15.1\":0.01803,\"15.2-15.3\":0.00451,\"15.4\":0.01352,\"15.5\":0.04958,\"15.6\":0.47324,\"16.0\":0.04958,\"16.1\":0.02254,\"16.2\":0.14873,\"16.3\":0.23436,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0,\"10.0-10.2\":0,\"10.3\":0,\"11.0-11.2\":0,\"11.3-11.4\":0,\"12.0-12.1\":0.01645,\"12.2-12.5\":0.25004,\"13.0-13.1\":0.04935,\"13.2\":0.03948,\"13.3\":0.02303,\"13.4-13.7\":0.11515,\"14.0-14.4\":0.95081,\"14.5-14.8\":1.21072,\"15.0-15.1\":0.46718,\"15.2-15.3\":0.33558,\"15.4\":0.35861,\"15.5\":1.26994,\"15.6\":3.61571,\"16.0\":3.52688,\"16.1\":7.6361,\"16.2\":8.04735,\"16.3\":4.00064,\"16.4\":0},P:{\"4\":0,\"20\":1.60163,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0.06082,\"8.2\":0,\"9.2\":0,\"10.1\":0,\"11.1-11.2\":0.01014,\"12.0\":0,\"13.0\":0.04055,\"14.0\":0.09123,\"15.0\":0.04055,\"16.0\":0.13178,\"17.0\":0.03041,\"18.0\":0.24329,\"19.0\":3.06134},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0,\"4.4\":0,\"4.4.3-4.4.4\":0},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0.02704,\"11\":0.06761,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.21423},H:{\"0\":0.052},L:{\"0\":39.39982},R:{_:\"0\"},M:{\"0\":0.27465},Q:{\"13.1\":0}};\n!/data/features/background-sync.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H FC GC\",\"16\":\"yB zB\"},D:{\"1\":\"QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB\"},E:{\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB QC RC SC TC rB BC UC sB\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"2\":\"BD CD\"}},B:7,C:\"Background Sync API\"};\n#/data/features/css-text-box-trim.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"2\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B\",\"16\":\"AC\",\"129\":\"PC\"},F:{\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B\",\"16\":\"AC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"2\":\"A B C h rB BC sB\"},L:{\"2\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"2\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"2\":\"2B\"},R:{\"2\":\"AD\"},S:{\"2\":\"BD CD\"}},B:5,C:\"CSS text-box-trim & text-box-edge\"};\n\"/data/features/mutationobserver.js\u0005module.exports={A:{A:{\"1\":\"B\",\"2\":\"J D E DC\",\"8\":\"F A\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB I w J D E F A B C K FC GC\"},D:{\"1\":\"4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"I w J D E F A B C K L G M N\",\"33\":\"0 1 2 3 O x g y z\"},E:{\"1\":\"D E F A B C K L G KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w IC 0B JC\",\"33\":\"J\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F B C QC RC SC TC rB BC UC sB\"},G:{\"1\":\"E YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC CC WC\",\"33\":\"XC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H uC vC\",\"2\":\"uB qC rC sC\",\"8\":\"I tC CC\"},J:{\"1\":\"A\",\"2\":\"D\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"B\",\"8\":\"A\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:1,C:\"Mutation Observer\"};\n1/data/features/client-hints-dpr-width-viewport.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"1\":\"NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB\"},E:{\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z QC RC SC TC rB BC UC sB\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"2\":\"BD CD\"}},B:6,C:\"Client Hints: DPR, Width, Viewport-Width\"};\n/dist/unpacker/index.jsmodule.exports.agents = require('./agents').agents\nmodule.exports.feature = require('./feature')\nmodule.exports.features = require('./features').features\nmodule.exports.region = require('./region')\n#/data/features/link-rel-prefetch.js\u0005module.exports={A:{A:{\"1\":\"B\",\"2\":\"J D E F A DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"I w J D\"},E:{\"2\":\"I w J D E F A B C K IC 0B JC KC LC MC 1B rB sB\",\"194\":\"L G 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F B C QC RC SC TC rB BC UC sB\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC\",\"194\":\"lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"1\":\"I H uC vC\",\"2\":\"uB qC rC sC tC CC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"B\",\"2\":\"A\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:5,C:\"Resource Hints: prefetch\"};\n$/data/features/font-unicode-range.js\u0005module.exports={A:{A:{\"2\":\"J D E DC\",\"4\":\"F A B\"},B:{\"1\":\"N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"4\":\"C K L G M\"},C:{\"1\":\"LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB FC GC\",\"194\":\"DB EB FB GB HB IB JB KB\"},D:{\"1\":\"DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"4\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB\"},E:{\"1\":\"A B C K L G 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"4\":\"I w J D E F IC 0B JC KC LC MC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F B C QC RC SC TC rB BC UC sB\",\"4\":\"G M N O x g y z\"},G:{\"1\":\"cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"4\":\"E 0B VC CC WC XC YC ZC aC bC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"4\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D\",\"4\":\"A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"4\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"4\":\"I\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:4,C:\"Font unicode-range subsetting\"};\n%/data/features/keyboardevent-which.js\u0005module.exports={A:{A:{\"1\":\"F A B\",\"2\":\"J D E DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"J D E F A B C K L G JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I IC 0B\",\"16\":\"w\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e RC SC TC rB BC UC sB\",\"16\":\"F QC\"},G:{\"1\":\"E WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"16\":\"0B VC CC\"},H:{\"2\":\"pC\"},I:{\"1\":\"uB I H sC tC CC\",\"16\":\"qC rC\",\"132\":\"uC vC\"},J:{\"1\":\"D A\"},K:{\"1\":\"A B C h rB BC sB\"},L:{\"132\":\"H\"},M:{\"132\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"2\":\"I\",\"132\":\"g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"132\":\"AD\"},S:{\"1\":\"BD CD\"}},B:7,C:\"KeyboardEvent.which\"};\n/data/regions/OM.js\u0011-module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0.00327,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0,\"108\":0.00327,\"109\":0.10778,\"110\":0.07185,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0.00327,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0.00327,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0.00327,\"66\":0,\"67\":0,\"68\":0.00327,\"69\":0.00653,\"70\":0.00327,\"71\":0.00327,\"72\":0.00327,\"73\":0.00327,\"74\":0.00327,\"75\":0,\"76\":0.00327,\"77\":0,\"78\":0.00327,\"79\":0.01306,\"80\":0.00327,\"81\":0.0098,\"83\":0.00327,\"84\":0,\"85\":0.00327,\"86\":0.00327,\"87\":0.00653,\"88\":0.0098,\"89\":0.00327,\"90\":0.00327,\"91\":0.0098,\"92\":0.04246,\"93\":0.0098,\"94\":0.00327,\"95\":0.01306,\"96\":0.00327,\"97\":0.00327,\"98\":0.00653,\"99\":0.00327,\"100\":0.00653,\"101\":0.00653,\"102\":0.01306,\"103\":0.04899,\"104\":0.00653,\"105\":0.0098,\"106\":0.01306,\"107\":0.0196,\"108\":0.20902,\"109\":4.14129,\"110\":3.0831,\"111\":0.0098,\"112\":0.00327,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0.00653,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0.00327,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0.00327,\"67\":0.0098,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0.00327,\"74\":0.00327,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.0098,\"94\":0.08492,\"95\":0.05879,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0.00327,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00327,\"93\":0,\"94\":0.00327,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0.00327,\"102\":0,\"103\":0.00327,\"104\":0,\"105\":0.00327,\"106\":0,\"107\":0.00653,\"108\":0.01633,\"109\":0.36906,\"110\":0.57482},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.00327,\"14\":0.01306,\"15\":0.00653,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0.00653,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0.01306,\"13.1\":0.0098,\"14.1\":0.04572,\"15.1\":0.00653,\"15.2-15.3\":0.00653,\"15.4\":0.03266,\"15.5\":0.02939,\"15.6\":0.14044,\"16.0\":0.01306,\"16.1\":0.06532,\"16.2\":0.1633,\"16.3\":0.08165,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0.00225,\"6.0-6.1\":0,\"7.0-7.1\":0.0494,\"8.1-8.4\":0,\"9.0-9.2\":0.00449,\"9.3\":0.0494,\"10.0-10.2\":0,\"10.3\":0.05165,\"11.0-11.2\":0.00449,\"11.3-11.4\":0.00449,\"12.0-12.1\":0.01572,\"12.2-12.5\":0.63101,\"13.0-13.1\":0.01796,\"13.2\":0.00898,\"13.3\":0.04716,\"13.4-13.7\":0.09656,\"14.0-14.4\":0.35256,\"14.5-14.8\":0.60631,\"15.0-15.1\":0.15944,\"15.2-15.3\":0.21558,\"15.4\":0.35031,\"15.5\":0.72982,\"15.6\":1.67072,\"16.0\":2.63632,\"16.1\":4.23743,\"16.2\":4.74718,\"16.3\":3.8961,\"16.4\":0.01572},P:{\"4\":0.13263,\"20\":0.77538,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0.12243,\"8.2\":0,\"9.2\":0.03061,\"10.1\":0,\"11.1-11.2\":0.07142,\"12.0\":0.03061,\"13.0\":0.09182,\"14.0\":0.06121,\"15.0\":0.06121,\"16.0\":0.13263,\"17.0\":0.11223,\"18.0\":0.10202,\"19.0\":1.32631},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0.0224,\"4.4\":0,\"4.4.3-4.4.4\":0.15679},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0.00337,\"9\":0,\"10\":0.00337,\"11\":0.09777,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":1.52862},H:{\"0\":0.38252},L:{\"0\":62.52702},R:{_:\"0\"},M:{\"0\":0.06734},Q:{\"13.1\":0}};\n!/data/features/offscreencanvas.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"1\":\"r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB FC GC\",\"194\":\"LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q\"},D:{\"1\":\"iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB\",\"322\":\"ZB vB aB wB bB cB dB eB fB gB hB\"},E:{\"1\":\"AC PC\",\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B\"},F:{\"1\":\"dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB QC RC SC TC rB BC UC sB\",\"322\":\"MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB\"},G:{\"1\":\"AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I xC yC zC 0C 1C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"194\":\"BD CD\"}},B:1,C:\"OffscreenCanvas\"};\n/data/features/typedarrays.js\u0005module.exports={A:{A:{\"1\":\"B\",\"2\":\"J D E F DC\",\"132\":\"A\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"I w J\"},E:{\"1\":\"J D E F A B C K L G KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w IC 0B\",\"260\":\"JC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e UC sB\",\"2\":\"F B QC RC SC TC rB BC\"},G:{\"1\":\"E WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC\",\"260\":\"CC\"},H:{\"1\":\"pC\"},I:{\"1\":\"I H tC CC uC vC\",\"2\":\"uB qC rC sC\"},J:{\"1\":\"A\",\"2\":\"D\"},K:{\"1\":\"C h sB\",\"2\":\"A B rB BC\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"132\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:6,C:\"Typed Arrays\"};\n/data/regions/RE.js\u00118module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.05165,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0.0043,\"49\":0.00861,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0.0043,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0.00861,\"69\":0,\"70\":0.0043,\"71\":0,\"72\":0.01722,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.06026,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0.0043,\"86\":0,\"87\":0,\"88\":0,\"89\":0.01722,\"90\":0,\"91\":0.03443,\"92\":0,\"93\":0.0043,\"94\":0.0043,\"95\":0,\"96\":0,\"97\":0,\"98\":0.0043,\"99\":0.0043,\"100\":0.0043,\"101\":0,\"102\":0.08608,\"103\":0.0043,\"104\":0.0043,\"105\":0.01291,\"106\":0.0043,\"107\":0.00861,\"108\":0.08608,\"109\":1.23094,\"110\":0.87802,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0.0043,\"39\":0,\"40\":0,\"41\":0,\"42\":0.00861,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0.01291,\"48\":0,\"49\":0.01722,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0.12482,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0.0043,\"64\":0.00861,\"65\":0.0043,\"66\":0,\"67\":0.0043,\"68\":0,\"69\":0,\"70\":0.05165,\"71\":0,\"72\":0,\"73\":0.0043,\"74\":0,\"75\":0.00861,\"76\":0,\"77\":0,\"78\":0.0043,\"79\":0.05595,\"80\":0,\"81\":0.0043,\"83\":0.01291,\"84\":0.0043,\"85\":0,\"86\":0.02582,\"87\":0.01722,\"88\":0.0043,\"89\":0,\"90\":0,\"91\":0,\"92\":0.0043,\"93\":0,\"94\":0.01291,\"95\":0.0043,\"96\":0.0043,\"97\":0.0043,\"98\":0.0043,\"99\":0.00861,\"100\":0.01291,\"101\":0.0043,\"102\":0.0043,\"103\":0.06456,\"104\":0.02582,\"105\":0.01291,\"106\":0.01291,\"107\":0.04304,\"108\":0.18507,\"109\":5.3757,\"110\":3.43459,\"111\":0,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.03443,\"94\":0.55091,\"95\":0.40888,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0.0043,\"18\":0.0043,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.0043,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0.0043,\"106\":0.0043,\"107\":0.02152,\"108\":0.08608,\"109\":0.98992,\"110\":1.43754},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0.0043,\"13\":0.0043,\"14\":0.09038,\"15\":0.01291,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0.0043,\"12.1\":0.01722,\"13.1\":0.11621,\"14.1\":0.15494,\"15.1\":0.00861,\"15.2-15.3\":0.01722,\"15.4\":0.06886,\"15.5\":0.07747,\"15.6\":0.31419,\"16.0\":0.03013,\"16.1\":0.1076,\"16.2\":0.38306,\"16.3\":0.27115,\"16.4\":0},G:{\"8\":0.00492,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0.09589,\"10.0-10.2\":0.00246,\"10.3\":0.10818,\"11.0-11.2\":0.00492,\"11.3-11.4\":0.00983,\"12.0-12.1\":0.01967,\"12.2-12.5\":0.79909,\"13.0-13.1\":0.00738,\"13.2\":0.00246,\"13.3\":0.02705,\"13.4-13.7\":0.05901,\"14.0-14.4\":0.31718,\"14.5-14.8\":0.45733,\"15.0-15.1\":0.17457,\"15.2-15.3\":0.21391,\"15.4\":0.39832,\"15.5\":0.64911,\"15.6\":1.93749,\"16.0\":2.85459,\"16.1\":5.88376,\"16.2\":6.01653,\"16.3\":3.44715,\"16.4\":0.0418},P:{\"4\":0.03097,\"20\":1.13541,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0.04129,\"8.2\":0.01032,\"9.2\":0,\"10.1\":0,\"11.1-11.2\":0.03097,\"12.0\":0,\"13.0\":0.01032,\"14.0\":0.06193,\"15.0\":0.02064,\"16.0\":0.0929,\"17.0\":0.03097,\"18.0\":0.14451,\"19.0\":1.96117},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.00568,\"4.2-4.3\":0.02273,\"4.4\":0,\"4.4.3-4.4.4\":0.17615},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.01722,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.06266},H:{\"0\":0.2157},L:{\"0\":52.46363},R:{_:\"0\"},M:{\"0\":0.35885},Q:{\"13.1\":0}};\n&/data/features/subresource-bundling.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"q r s t u v f H\",\"2\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"1\":\"q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p\"},E:{\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y QC RC SC TC rB BC UC sB\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"2\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"2\":\"2B\"},R:{\"2\":\"AD\"},S:{\"2\":\"BD CD\"}},B:7,C:\"Subresource Loading with Web Bundles\"};\n/data/features/css-boxshadow.js\u0005module.exports={A:{A:{\"1\":\"F A B\",\"2\":\"J D E DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB\",\"33\":\"FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"33\":\"I w J D E F\"},E:{\"1\":\"J D E F A B C K L G JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"33\":\"w\",\"164\":\"I IC 0B\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e SC TC rB BC UC sB\",\"2\":\"F QC RC\"},G:{\"1\":\"E WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"33\":\"VC CC\",\"164\":\"0B\"},H:{\"2\":\"pC\"},I:{\"1\":\"I H tC CC uC vC\",\"164\":\"uB qC rC sC\"},J:{\"1\":\"A\",\"33\":\"D\"},K:{\"1\":\"B C h rB BC sB\",\"2\":\"A\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:4,C:\"CSS3 Box-shadow\"};\n/data/features/xhtml.js\u0005module.exports={A:{A:{\"1\":\"F A B\",\"2\":\"J D E DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\"},G:{\"1\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"1\":\"pC\"},I:{\"1\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"1\":\"D A\"},K:{\"1\":\"A B C h rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:1,C:\"XHTML served as application/xhtml+xml\"};\n/data/features/objectrtc.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"K L G M N O\",\"2\":\"C P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"2\":\"D\",\"130\":\"A\"},K:{\"2\":\"A B C h rB BC sB\"},L:{\"2\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"2\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"2\":\"2B\"},R:{\"2\":\"AD\"},S:{\"2\":\"BD CD\"}},B:6,C:\"Object RTC (ORTC) API for WebRTC\"};\n/data/features/textencoder.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB I w J D E F A B C K L G M N O FC GC\",\"132\":\"x\"},D:{\"1\":\"FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB\"},E:{\"1\":\"B C K L G 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A IC 0B JC KC LC MC\"},F:{\"1\":\"2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 F B C G M N O x g y z QC RC SC TC rB BC UC sB\"},G:{\"1\":\"dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:1,C:\"TextEncoder & TextDecoder\"};\n/data/regions/TO.js\u000bmodule.exports={C:{\"47\":0.0057,\"61\":0.0114,\"88\":0.22238,\"91\":0.0057,\"92\":0.0057,\"102\":0.0057,\"104\":0.0057,\"107\":0.01711,\"108\":0.0114,\"109\":1.06057,\"110\":1.54524,_:\"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 48 49 50 51 52 53 54 55 56 57 58 59 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 89 90 93 94 95 96 97 98 99 100 101 103 105 106 111 112 3.5 3.6\"},D:{\"58\":0.0114,\"65\":0.02281,\"67\":0.01711,\"70\":0.60441,\"74\":0.0057,\"75\":0.05702,\"81\":0.0114,\"84\":0.0057,\"88\":0.10264,\"91\":0.0114,\"92\":0.0114,\"93\":0.07413,\"96\":0.0114,\"97\":0.0057,\"98\":0.03991,\"99\":0.01711,\"100\":0.0057,\"101\":0.07413,\"102\":0.15966,\"103\":0.35352,\"104\":0.11404,\"105\":0.06842,\"106\":0.05132,\"107\":0.09693,\"108\":0.68994,\"109\":21.25706,\"110\":8.70695,_:\"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 59 60 61 62 63 64 66 68 69 71 72 73 76 77 78 79 80 83 85 86 87 89 90 94 95 111 112 113\"},F:{\"80\":0.01711,\"90\":0.0114,\"94\":0.2908,\"95\":0.72986,_:\"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 81 82 83 84 85 86 87 88 89 91 92 93 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1\",\"10.0-10.1\":0},B:{\"12\":0.0114,\"15\":0.0114,\"91\":0.0057,\"92\":0.0057,\"96\":0.0057,\"102\":0.0114,\"104\":0.0114,\"105\":0.02851,\"106\":0.31361,\"107\":0.09123,\"108\":0.34782,\"109\":9.53374,\"110\":5.91868,_:\"13 14 16 17 18 79 80 81 83 84 85 86 87 88 89 90 93 94 95 97 98 99 100 101 103\"},E:{\"4\":0,\"13\":0.0114,\"14\":0.02851,_:\"0 5 6 7 8 9 10 11 12 15 3.1 3.2 5.1 6.1 7.1 10.1 12.1 15.1 15.2-15.3 15.4 16.4\",\"9.1\":0.0057,\"11.1\":0.05132,\"13.1\":0.0114,\"14.1\":0.01711,\"15.5\":0.07983,\"15.6\":0.46756,\"16.0\":0.0114,\"16.1\":0.02851,\"16.2\":0.07983,\"16.3\":0.06842},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0,\"8.1-8.4\":0.00684,\"9.0-9.2\":0,\"9.3\":0.04221,\"10.0-10.2\":0,\"10.3\":0.00342,\"11.0-11.2\":0,\"11.3-11.4\":0.00684,\"12.0-12.1\":0,\"12.2-12.5\":0.90347,\"13.0-13.1\":0.00342,\"13.2\":0,\"13.3\":0.11293,\"13.4-13.7\":0.13005,\"14.0-14.4\":0.18366,\"14.5-14.8\":0.18822,\"15.0-15.1\":0.09582,\"15.2-15.3\":0.61486,\"15.4\":0.79054,\"15.5\":0.40268,\"15.6\":1.79325,\"16.0\":0.72323,\"16.1\":0.96393,\"16.2\":1.20007,\"16.3\":1.4727,\"16.4\":0},P:{\"4\":0.1133,\"20\":0.28781,\"5.0-5.4\":0.09172,\"6.2-6.4\":0.03084,\"7.2-7.4\":0.0514,\"8.2\":0.01016,\"9.2\":0.0103,\"10.1\":0.02056,\"11.1-11.2\":0.0412,\"12.0\":0.07134,\"13.0\":0.34105,\"14.0\":0.04112,\"15.0\":0.0514,\"16.0\":0.0514,\"17.0\":0.03084,\"18.0\":0.1339,\"19.0\":0.48312},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0.03164,\"4.4\":0,\"4.4.3-4.4.4\":0.00703},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"11\":0.04562,_:\"6 7 8 9 10 5.5\"},N:{\"10\":0.03712,\"11\":0.07423},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.1375},H:{\"0\":0.02848},L:{\"0\":34.99439},R:{_:\"0\"},M:{\"0\":0.07305},Q:{\"13.1\":0}};\n/data/features/css-animation.js\u0005module.exports={A:{A:{\"1\":\"A B\",\"2\":\"J D E F DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB I FC GC\",\"33\":\"w J D E F A B C K L G\"},D:{\"1\":\"KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"33\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB\"},E:{\"1\":\"F A B C K L G MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"IC 0B\",\"33\":\"J D E JC KC LC\",\"292\":\"I w\"},F:{\"1\":\"7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e sB\",\"2\":\"F B QC RC SC TC rB BC UC\",\"33\":\"0 1 2 3 4 5 6 C G M N O x g y z\"},G:{\"1\":\"aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"33\":\"E XC YC ZC\",\"164\":\"0B VC CC WC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"33\":\"I tC CC uC vC\",\"164\":\"uB qC rC sC\"},J:{\"33\":\"D A\"},K:{\"1\":\"h sB\",\"2\":\"A B C rB BC\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:5,C:\"CSS Animation\"};\n!/data/features/css-transitions.js\u0005module.exports={A:{A:{\"1\":\"A B\",\"2\":\"J D E F DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB FC GC\",\"33\":\"w J D E F A B C K L G\",\"164\":\"I\"},D:{\"1\":\"3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"33\":\"0 1 2 I w J D E F A B C K L G M N O x g y z\"},E:{\"1\":\"D E F A B C K L G KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"33\":\"J JC\",\"164\":\"I w IC 0B\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e sB\",\"2\":\"F QC RC\",\"33\":\"C\",\"164\":\"B SC TC rB BC UC\"},G:{\"1\":\"E YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"33\":\"XC\",\"164\":\"0B VC CC WC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H uC vC\",\"33\":\"uB I qC rC sC tC CC\"},J:{\"1\":\"A\",\"33\":\"D\"},K:{\"1\":\"h sB\",\"33\":\"C\",\"164\":\"A B rB BC\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:5,C:\"CSS3 Transitions\"};\n/data/regions/ID.js\u0011module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0.06857,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.00361,\"53\":0,\"54\":0,\"55\":0,\"56\":0.00361,\"57\":0,\"58\":0,\"59\":0,\"60\":0.00361,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0.00361,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.00361,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0.00722,\"89\":0,\"90\":0,\"91\":0.00361,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0.00361,\"100\":0.00361,\"101\":0.00361,\"102\":0.01083,\"103\":0.00361,\"104\":0.00361,\"105\":0.00361,\"106\":0.00722,\"107\":0.01083,\"108\":0.02526,\"109\":0.62436,\"110\":0.41864,\"111\":0.01083,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0.00361,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0.00361,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0.00361,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0.00361,\"64\":0,\"65\":0.00361,\"66\":0,\"67\":0.00361,\"68\":0,\"69\":0.00361,\"70\":0.00361,\"71\":0.00361,\"72\":0.00361,\"73\":0.00361,\"74\":0.01444,\"75\":0.00361,\"76\":0.00361,\"77\":0.00361,\"78\":0.00361,\"79\":0.01083,\"80\":0.0397,\"81\":0.01444,\"83\":0.01444,\"84\":0.01805,\"85\":0.00722,\"86\":0.01083,\"87\":0.01083,\"88\":0.00361,\"89\":0.00722,\"90\":0.00361,\"91\":0.00722,\"92\":0.01083,\"93\":0.00361,\"94\":0.00722,\"95\":0.00722,\"96\":0.01083,\"97\":0.00722,\"98\":0.00722,\"99\":0.00722,\"100\":0.02526,\"101\":0.01083,\"102\":0.01444,\"103\":0.03248,\"104\":0.01805,\"105\":0.01805,\"106\":0.02165,\"107\":0.0397,\"108\":0.16962,\"109\":5.21861,\"110\":3.42133,\"111\":0.00361,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0.01083,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0.00361,\"62\":0,\"63\":0.00722,\"64\":0.00722,\"65\":0.00361,\"66\":0.00361,\"67\":0.09023,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.00722,\"94\":0.08301,\"95\":0.0794,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0.00361,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0.00361,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00361,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0,\"106\":0.00361,\"107\":0.00722,\"108\":0.01805,\"109\":0.42225,\"110\":0.59909},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.00361,\"14\":0.01444,\"15\":0.00361,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0.02165,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0.00361,\"13.1\":0.01805,\"14.1\":0.03248,\"15.1\":0.00722,\"15.2-15.3\":0.00361,\"15.4\":0.01083,\"15.5\":0.01805,\"15.6\":0.05053,\"16.0\":0.01083,\"16.1\":0.03248,\"16.2\":0.05053,\"16.3\":0.0397,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0.01296,\"10.0-10.2\":0.001,\"10.3\":0.01197,\"11.0-11.2\":0.00499,\"11.3-11.4\":0.00199,\"12.0-12.1\":0.01296,\"12.2-12.5\":0.22636,\"13.0-13.1\":0.00798,\"13.2\":0.00598,\"13.3\":0.02493,\"13.4-13.7\":0.06083,\"14.0-14.4\":0.23334,\"14.5-14.8\":0.37693,\"15.0-15.1\":0.17251,\"15.2-15.3\":0.20442,\"15.4\":0.34103,\"15.5\":0.4926,\"15.6\":0.86056,\"16.0\":1.42196,\"16.1\":1.68522,\"16.2\":1.60046,\"16.3\":1.20757,\"16.4\":0.00199},P:{\"4\":0.15592,\"20\":0.34302,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0.05197,\"8.2\":0,\"9.2\":0.01039,\"10.1\":0,\"11.1-11.2\":0.04158,\"12.0\":0.01039,\"13.0\":0.04158,\"14.0\":0.03118,\"15.0\":0.02079,\"16.0\":0.08316,\"17.0\":0.09355,\"18.0\":0.09355,\"19.0\":0.83156},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0,\"4.4\":0,\"4.4.3-4.4.4\":0.04361},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.02165,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":1.1376},H:{\"0\":0.86523},L:{\"0\":73.0433},R:{_:\"0\"},M:{\"0\":0.10865},Q:{\"13.1\":0}};\n\"/data/features/addeventlistener.js\u0005module.exports={A:{A:{\"1\":\"F A B\",\"130\":\"J D E DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"257\":\"EC uB I w J FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\"},G:{\"1\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"1\":\"pC\"},I:{\"1\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"1\":\"D A\"},K:{\"1\":\"A B C h rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:1,C:\"EventTarget.addEventListener()\"};\n/data/features/vibration.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB I w J D E F A FC GC\",\"33\":\"B C K L G\"},D:{\"1\":\"7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 I w J D E F A B C K L G M N O x g y z\"},E:{\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F B C G M QC RC SC TC rB BC UC sB\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H uC vC\",\"2\":\"uB I qC rC sC tC CC\"},J:{\"1\":\"A\",\"2\":\"D\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:2,C:\"Vibration API\"};\n&/data/features/high-resolution-time.js\u0005module.exports={A:{A:{\"1\":\"A B\",\"2\":\"J D E F DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB I w J D E F A B C K L FC GC\"},D:{\"1\":\"1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"I w J D E F A B C K L G M N O x\",\"33\":\"0 g y z\"},E:{\"1\":\"E F A B C K L G MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D IC 0B JC KC LC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F B C QC RC SC TC rB BC UC sB\"},G:{\"1\":\"E aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC CC WC XC YC ZC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H uC vC\",\"2\":\"uB I qC rC sC tC CC\"},J:{\"1\":\"A\",\"2\":\"D\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:2,C:\"High Resolution Time API\"};\n'/data/features/subresource-integrity.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M\"},C:{\"1\":\"KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB FC GC\"},D:{\"1\":\"MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB\"},E:{\"1\":\"B C K L G rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A IC 0B JC KC LC MC 1B\"},F:{\"1\":\"9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 F B C G M N O x g y z QC RC SC TC rB BC UC sB\"},G:{\"1\":\"fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC\",\"194\":\"eC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:2,C:\"Subresource Integrity\"};\n&/data/features/font-variant-numeric.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"1\":\"BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB FC GC\"},D:{\"1\":\"TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB\"},E:{\"1\":\"A B C K L G MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F IC 0B JC KC LC\"},F:{\"1\":\"GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB QC RC SC TC rB BC UC sB\"},G:{\"1\":\"bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D\",\"16\":\"A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I xC\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:2,C:\"CSS font-variant-numeric\"};\n /data/features/input-datetime.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"132\":\"C\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB FC GC\",\"1090\":\"UB VB WB XB\",\"2052\":\"YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b\",\"4100\":\"c d e i j k l m n o p q r s t u v f H yB zB\"},D:{\"1\":\"2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"I w J D E F A B C K L G M N O x\",\"2052\":\"0 1 g y z\"},E:{\"2\":\"I w J D E F A B C K L IC 0B JC KC LC MC 1B rB sB 2B\",\"4100\":\"G NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\"},G:{\"2\":\"0B VC CC\",\"260\":\"E WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H uC vC\",\"2\":\"uB qC rC sC\",\"514\":\"I tC CC\"},J:{\"1\":\"A\",\"2\":\"D\"},K:{\"1\":\"A B C h rB BC sB\"},L:{\"1\":\"H\"},M:{\"4100\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"2052\":\"BD CD\"}},B:1,C:\"Date and time input types\"};\n#/data/features/template-literals.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"16\":\"C\"},C:{\"1\":\"BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB FC GC\"},D:{\"1\":\"IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB\"},E:{\"1\":\"A B K L G MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F IC 0B JC KC LC\",\"129\":\"C\"},F:{\"1\":\"6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 F B C G M N O x g y z QC RC SC TC rB BC UC sB\"},G:{\"1\":\"aC bC cC dC eC fC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC\",\"129\":\"gC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:6,C:\"ES6 Template Literals (Template Strings)\"};\n!/data/features/getrandomvalues.js\u0005module.exports={A:{A:{\"2\":\"J D E F A DC\",\"33\":\"B\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB I w J D E F A B C K L G M N O x g FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"I w J D E F A\"},E:{\"1\":\"D E F A B C K L G KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J IC 0B JC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F B C QC RC SC TC rB BC UC sB\"},G:{\"1\":\"E YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC CC WC XC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H uC vC\",\"2\":\"uB I qC rC sC tC CC\"},J:{\"1\":\"A\",\"2\":\"D\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A\",\"33\":\"B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:2,C:\"crypto.getRandomValues()\"};\n&/data/features/css-display-contents.js\u0006<module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"2\":\"C K L G M N O\",\"132\":\"P Q R S T U V W X\",\"260\":\"Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB FC GC\",\"132\":\"EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB\",\"260\":\"bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\"},D:{\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB\",\"132\":\"eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X\",\"194\":\"ZB vB aB wB bB cB dB\",\"260\":\"Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"2\":\"I w J D E F A B IC 0B JC KC LC MC 1B\",\"132\":\"C K L G rB sB 2B NC OC 3B 4B 5B 6B\",\"516\":\"7B 8B 9B AC PC\",\"772\":\"tB\"},F:{\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB QC RC SC TC rB BC UC sB\",\"132\":\"TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB\",\"260\":\"oB pB qB P Q R xB S T U V W X Y Z a b c d e\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC\",\"132\":\"fC gC hC iC jC kC\",\"260\":\"lC mC nC oC 3B 4B 5B 6B\",\"772\":\"tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I qC rC sC tC CC uC vC\",\"260\":\"H\"},J:{\"2\":\"D A\"},K:{\"2\":\"A B C rB BC sB\",\"260\":\"h\"},L:{\"260\":\"H\"},M:{\"260\":\"f\"},N:{\"2\":\"A B\"},O:{\"132\":\"wC\"},P:{\"2\":\"I xC yC zC 0C\",\"132\":\"1C 1B 2C 3C 4C 5C\",\"260\":\"g 6C tB 7C 8C 9C\"},Q:{\"132\":\"2B\"},R:{\"260\":\"AD\"},S:{\"132\":\"BD\",\"260\":\"CD\"}},B:4,C:\"CSS display: contents\"};\n/data/regions/CZ.js\u0011module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.10532,\"53\":0,\"54\":0,\"55\":0,\"56\":0.01109,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0.00554,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.02217,\"79\":0.00554,\"80\":0.00554,\"81\":0.00554,\"82\":0.00554,\"83\":0.00554,\"84\":0,\"85\":0,\"86\":0.00554,\"87\":0,\"88\":0.01109,\"89\":0.00554,\"90\":0,\"91\":0.02772,\"92\":0,\"93\":0,\"94\":0.00554,\"95\":0.00554,\"96\":0,\"97\":0.00554,\"98\":0,\"99\":0.00554,\"100\":0.00554,\"101\":0.01109,\"102\":0.16629,\"103\":0.17738,\"104\":0.01109,\"105\":0.01109,\"106\":0.01109,\"107\":0.08315,\"108\":0.09977,\"109\":1.94005,\"110\":1.28043,\"111\":0.00554,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0.01109,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0.00554,\"49\":0.02217,\"50\":0,\"51\":0,\"52\":0,\"53\":0.00554,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0.00554,\"67\":0,\"68\":0.00554,\"69\":0,\"70\":0,\"71\":0.00554,\"72\":0,\"73\":0,\"74\":0.00554,\"75\":0.00554,\"76\":0,\"77\":0.00554,\"78\":0.00554,\"79\":0.04989,\"80\":0.00554,\"81\":0.02217,\"83\":0.02217,\"84\":0.03326,\"85\":0.03326,\"86\":0.03326,\"87\":0.03326,\"88\":0.00554,\"89\":0.03326,\"90\":0.01109,\"91\":0.00554,\"92\":0.01109,\"93\":0.01663,\"94\":0.01109,\"95\":0.0388,\"96\":0.01663,\"97\":0.00554,\"98\":0.00554,\"99\":0.01663,\"100\":0.03326,\"101\":0.02217,\"102\":0.14966,\"103\":0.11086,\"104\":0.08315,\"105\":0.07206,\"106\":0.0776,\"107\":0.06652,\"108\":0.3603,\"109\":9.94414,\"110\":6.29685,\"111\":0.00554,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0.00554,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.01109,\"68\":0,\"69\":0,\"70\":0,\"71\":0.00554,\"72\":0,\"73\":0.00554,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0.02217,\"86\":0,\"87\":0,\"88\":0,\"89\":0.11086,\"90\":0,\"91\":0,\"92\":0.00554,\"93\":0.10532,\"94\":1.09751,\"95\":0.72613,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0.00554},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0.01109,\"16\":0,\"17\":0.00554,\"18\":0.01109,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0.00554,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00554,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0.06652,\"105\":0.00554,\"106\":0.01663,\"107\":0.02772,\"108\":0.08869,\"109\":1.80702,\"110\":2.2948},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.00554,\"14\":0.0388,\"15\":0.00554,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0.00554,\"13.1\":0.04434,\"14.1\":0.08869,\"15.1\":0.01663,\"15.2-15.3\":0.01663,\"15.4\":0.04434,\"15.5\":0.05543,\"15.6\":0.30487,\"16.0\":0.04434,\"16.1\":0.14412,\"16.2\":0.37138,\"16.3\":0.28824,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0.00182,\"8.1-8.4\":0.00182,\"9.0-9.2\":0.00182,\"9.3\":0.04544,\"10.0-10.2\":0.00182,\"10.3\":0.07997,\"11.0-11.2\":0.01272,\"11.3-11.4\":0.00909,\"12.0-12.1\":0.02363,\"12.2-12.5\":0.24173,\"13.0-13.1\":0.00364,\"13.2\":0.00545,\"13.3\":0.01818,\"13.4-13.7\":0.0727,\"14.0-14.4\":0.12905,\"14.5-14.8\":0.30716,\"15.0-15.1\":0.07815,\"15.2-15.3\":0.11087,\"15.4\":0.18357,\"15.5\":0.35078,\"15.6\":1.1087,\"16.0\":2.08653,\"16.1\":4.5711,\"16.2\":4.54202,\"16.3\":2.91715,\"16.4\":0.03453},P:{\"4\":0.10321,\"20\":0.81533,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0,\"8.2\":0,\"9.2\":0,\"10.1\":0,\"11.1-11.2\":0.01032,\"12.0\":0,\"13.0\":0.02064,\"14.0\":0.01032,\"15.0\":0.01032,\"16.0\":0.03096,\"17.0\":0.03096,\"18.0\":0.0516,\"19.0\":1.63065},I:{\"0\":0,\"3\":0,\"4\":0.04485,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.01495,\"4.2-4.3\":0.03738,\"4.4\":0,\"4.4.3-4.4.4\":0.23173},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0.01707,\"9\":0,\"10\":0.06258,\"11\":0.13653,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.19611},H:{\"0\":0.46838},L:{\"0\":46.31506},R:{_:\"0\"},M:{\"0\":0.30753},Q:{\"13.1\":0}};\n/data/features/es6.js\u0006*module.exports={A:{A:{\"2\":\"J D E F A DC\",\"388\":\"B\"},B:{\"257\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"260\":\"C K L\",\"769\":\"G M N O\"},C:{\"2\":\"EC uB I w FC GC\",\"4\":\"0 1 2 3 4 5 6 7 8 9 J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB\",\"257\":\"VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\"},D:{\"2\":\"I w J D E F A B C K L G M N O x g\",\"4\":\"0 1 2 3 4 5 6 7 8 9 y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB\",\"257\":\"SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"A B C K L G 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D IC 0B JC KC\",\"4\":\"E F LC MC\"},F:{\"2\":\"F B C QC RC SC TC rB BC UC sB\",\"4\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB\",\"257\":\"FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\"},G:{\"1\":\"cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC CC WC XC\",\"4\":\"E YC ZC aC bC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I qC rC sC tC CC\",\"4\":\"uC vC\",\"257\":\"H\"},J:{\"2\":\"D\",\"4\":\"A\"},K:{\"2\":\"A B C rB BC sB\",\"257\":\"h\"},L:{\"257\":\"H\"},M:{\"257\":\"f\"},N:{\"2\":\"A\",\"388\":\"B\"},O:{\"257\":\"wC\"},P:{\"4\":\"I\",\"257\":\"g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"257\":\"2B\"},R:{\"257\":\"AD\"},S:{\"4\":\"BD\",\"257\":\"CD\"}},B:6,C:\"ECMAScript 2015 (ES6)\"};\n/data/features/input-color.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K\"},C:{\"1\":\"6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 EC uB I w J D E F A B C K L G M N O x g y z FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"I w J D E F A B C K L G M N O x\"},E:{\"1\":\"K L G sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A B C IC 0B JC KC LC MC 1B rB\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 B C N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e rB BC UC sB\",\"2\":\"F G M QC RC SC TC\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC\",\"129\":\"hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H uC vC\",\"2\":\"uB I qC rC sC tC CC\"},J:{\"1\":\"D A\"},K:{\"1\":\"A B C h rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"2\":\"BD\"}},B:1,C:\"Color input type\"};\n/data/features/meter.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB I w J D E F A B C K L G FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"I w J D\"},E:{\"1\":\"J D E F A B C K L G KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w IC 0B JC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e rB BC UC sB\",\"2\":\"F QC RC SC TC\"},G:{\"1\":\"dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC\"},H:{\"1\":\"pC\"},I:{\"1\":\"H uC vC\",\"2\":\"uB I qC rC sC tC CC\"},J:{\"1\":\"D A\"},K:{\"1\":\"B C h rB BC sB\",\"2\":\"A\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:1,C:\"meter element\"};\n/data/features/rem.js\u0005module.exports={A:{A:{\"1\":\"B\",\"2\":\"J D E DC\",\"132\":\"F A\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB GC\",\"2\":\"EC uB FC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"w J D E F A B C K L G JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I IC 0B\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e UC sB\",\"2\":\"F B QC RC SC TC rB BC\"},G:{\"1\":\"E VC CC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B\",\"260\":\"WC\"},H:{\"1\":\"pC\"},I:{\"1\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"1\":\"D A\"},K:{\"1\":\"C h sB\",\"2\":\"A B rB BC\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:4,C:\"rem (root em) units\"};\n/data/features/css-when-else.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"2\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"2\":\"A B C h rB BC sB\"},L:{\"2\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"2\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"2\":\"2B\"},R:{\"2\":\"AD\"},S:{\"2\":\"BD CD\"}},B:5,C:\"CSS @when / @else conditional rules\"};\n/data/regions/MZ.js\u0011module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0.00766,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0.00383,\"90\":0,\"91\":0.00766,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0.08047,\"99\":0.00383,\"100\":0.00383,\"101\":0,\"102\":0.00383,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0.00766,\"108\":0.00766,\"109\":0.33338,\"110\":0.22609,\"111\":0.00383,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0.01916,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0.0115,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0.00383,\"56\":0.00383,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0.00383,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0.02299,\"70\":0.01533,\"71\":0.00383,\"72\":0.01533,\"73\":0,\"74\":0.03449,\"75\":0,\"76\":0,\"77\":0,\"78\":0.01916,\"79\":0.00383,\"80\":0.00766,\"81\":0.14562,\"83\":0.00766,\"84\":0,\"85\":0.00383,\"86\":0.00383,\"87\":0.03832,\"88\":0.00383,\"89\":0.00383,\"90\":0.00766,\"91\":0.00766,\"92\":0.00383,\"93\":0.00383,\"94\":0.0115,\"95\":0.0115,\"96\":0.00766,\"97\":0.00383,\"98\":0.03449,\"99\":0.00383,\"100\":0.00383,\"101\":0.00383,\"102\":0.01916,\"103\":0.03449,\"104\":0.02682,\"105\":0.03066,\"106\":0.06131,\"107\":0.0115,\"108\":0.09963,\"109\":3.16523,\"110\":1.93899,\"111\":0.00383,\"112\":0.00383,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0.00383,\"27\":0,\"28\":0.00766,\"29\":0,\"30\":0,\"31\":0,\"32\":0.00383,\"33\":0.00766,\"34\":0,\"35\":0.01533,\"36\":0,\"37\":0.01533,\"38\":0.00766,\"39\":0,\"40\":0,\"41\":0,\"42\":0.00383,\"43\":0,\"44\":0,\"45\":0,\"46\":0.02299,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0.00766,\"52\":0,\"53\":0,\"54\":0,\"55\":0.00383,\"56\":0.00383,\"57\":0.00383,\"58\":0.02299,\"60\":0.05748,\"62\":0,\"63\":0.20693,\"64\":0.05365,\"65\":0.05365,\"66\":0.0843,\"67\":0.2874,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0.00383,\"80\":0.00383,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0.0115,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0.14945,\"95\":0.26824,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0.00766},B:{\"12\":0.00383,\"13\":0.00383,\"14\":0.00383,\"15\":0.00383,\"16\":0,\"17\":0,\"18\":0.0115,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0.00383,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0.0115,\"90\":0.00383,\"91\":0.00383,\"92\":0.03449,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0.00383,\"101\":0,\"102\":0.00383,\"103\":0,\"104\":0,\"105\":0.00383,\"106\":0.0115,\"107\":0.00766,\"108\":0.02682,\"109\":0.41769,\"110\":0.59396},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0,\"13.1\":0.02682,\"14.1\":0.00383,\"15.1\":0,\"15.2-15.3\":0.00383,\"15.4\":0.00766,\"15.5\":0.00383,\"15.6\":0.0115,\"16.0\":0,\"16.1\":0.00766,\"16.2\":0.01533,\"16.3\":0.0115,\"16.4\":0},G:{\"8\":0.04983,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0.00634,\"6.0-6.1\":0,\"7.0-7.1\":0.02174,\"8.1-8.4\":0.00362,\"9.0-9.2\":0,\"9.3\":0.08244,\"10.0-10.2\":0,\"10.3\":0.38321,\"11.0-11.2\":0.00272,\"11.3-11.4\":0.00181,\"12.0-12.1\":0.01902,\"12.2-12.5\":1.87893,\"13.0-13.1\":0.10781,\"13.2\":0.00544,\"13.3\":0.10871,\"13.4-13.7\":0.23464,\"14.0-14.4\":0.59249,\"14.5-14.8\":0.55987,\"15.0-15.1\":0.14133,\"15.2-15.3\":0.31436,\"15.4\":0.27541,\"15.5\":0.45841,\"15.6\":0.47471,\"16.0\":0.42398,\"16.1\":0.69486,\"16.2\":0.79542,\"16.3\":0.71298,\"16.4\":0.00181},P:{\"4\":0.43133,\"20\":0.15405,\"5.0-5.4\":0,\"6.2-6.4\":0.02054,\"7.2-7.4\":0.16432,\"8.2\":0,\"9.2\":0.48268,\"10.1\":0,\"11.1-11.2\":0.05135,\"12.0\":0.02054,\"13.0\":0.03081,\"14.0\":0.05135,\"15.0\":0.01027,\"16.0\":0.06162,\"17.0\":0.08216,\"18.0\":0.04108,\"19.0\":0.45187},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.00049,\"4.2-4.3\":0.00146,\"4.4\":0,\"4.4.3-4.4.4\":0.03955},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.0115,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":1.02389,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0.00617},O:{\"0\":0.40092},H:{\"0\":5.16209},L:{\"0\":70.50522},R:{_:\"0\"},M:{\"0\":0.26522},Q:{\"13.1\":0.00617}};\n/data/regions/ML.js\u0010module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0.00213,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0.03201,\"100\":0,\"101\":0,\"102\":0.00213,\"103\":0.00427,\"104\":0,\"105\":0,\"106\":0,\"107\":0.00213,\"108\":0.0064,\"109\":0.15365,\"110\":0.13017,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.01921,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0.00213,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0.00427,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0.0128,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0.00427,\"71\":0,\"72\":0,\"73\":0,\"74\":0.00213,\"75\":0,\"76\":0.00427,\"77\":0,\"78\":0,\"79\":0.00213,\"80\":0.0064,\"81\":0.0064,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0.00213,\"88\":0,\"89\":0,\"90\":0.00213,\"91\":0,\"92\":0.01067,\"93\":0,\"94\":0,\"95\":0.00213,\"96\":0,\"97\":0,\"98\":0.00427,\"99\":0,\"100\":0,\"101\":0,\"102\":0.00427,\"103\":0.01707,\"104\":0.00427,\"105\":0.00427,\"106\":0.00213,\"107\":0.00427,\"108\":0.03201,\"109\":0.90695,\"110\":0.82799,\"111\":0,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0.0064,\"62\":0,\"63\":0.00427,\"64\":0.00213,\"65\":0,\"66\":0.0064,\"67\":0.00427,\"68\":0,\"69\":0,\"70\":0.00213,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0.0064,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0.03201,\"95\":0.04695,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0.00213,\"13\":0.00213,\"14\":0.0064,\"15\":0.00213,\"16\":0,\"17\":0,\"18\":0.05122,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0.0064,\"90\":0,\"91\":0,\"92\":0.00213,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0.00213,\"106\":0,\"107\":0.00427,\"108\":0.01494,\"109\":0.29876,\"110\":0.39052},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0.00427,\"15\":0,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0.00213,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0,\"13.1\":0.00427,\"14.1\":0.00213,\"15.1\":0,\"15.2-15.3\":0,\"15.4\":0,\"15.5\":0,\"15.6\":0.01707,\"16.0\":0,\"16.1\":0.01067,\"16.2\":0.0064,\"16.3\":0.0064,\"16.4\":0},G:{\"8\":0.00186,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0.01485,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0.07423,\"10.0-10.2\":0,\"10.3\":0.30062,\"11.0-11.2\":0.00928,\"11.3-11.4\":0.00928,\"12.0-12.1\":0.15217,\"12.2-12.5\":2.68704,\"13.0-13.1\":0.01299,\"13.2\":0.07423,\"13.3\":0.12062,\"13.4-13.7\":0.31918,\"14.0-14.4\":1.02063,\"14.5-14.8\":1.12455,\"15.0-15.1\":0.57526,\"15.2-15.3\":0.1967,\"15.4\":1.20991,\"15.5\":0.77568,\"15.6\":0.65135,\"16.0\":1.39177,\"16.1\":1.67569,\"16.2\":1.77218,\"16.3\":2.41796,\"16.4\":0.01113},P:{\"4\":0.18095,\"20\":0.31164,\"5.0-5.4\":0.01005,\"6.2-6.4\":0.01005,\"7.2-7.4\":0.24127,\"8.2\":0,\"9.2\":0.03016,\"10.1\":0,\"11.1-11.2\":0.01005,\"12.0\":0.01005,\"13.0\":0.03016,\"14.0\":0.11058,\"15.0\":0.05026,\"16.0\":0.07037,\"17.0\":0.04021,\"18.0\":0.18095,\"19.0\":0.95503},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.00141,\"4.2-4.3\":0.01266,\"4.4\":0,\"4.4.3-4.4.4\":0.07636},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.00427,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0.16519,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.88886},H:{\"0\":0.633},L:{\"0\":74.94114},R:{_:\"0\"},M:{\"0\":0.03146},Q:{\"13.1\":0.0236}};\n/data/features/datauri.js\u0005module.exports={A:{A:{\"2\":\"J D DC\",\"132\":\"E\",\"260\":\"F A B\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"260\":\"C K G M N O\",\"772\":\"L\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\"},G:{\"1\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"1\":\"pC\"},I:{\"1\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"1\":\"D A\"},K:{\"1\":\"A B C h rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"260\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:6,C:\"Data URIs\"};\n/data/features/ttf.js\u0005module.exports={A:{A:{\"2\":\"J D E DC\",\"132\":\"F A B\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\",\"2\":\"EC uB\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e RC SC TC rB BC UC sB\",\"2\":\"F QC\"},G:{\"1\":\"E CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC\"},H:{\"2\":\"pC\"},I:{\"1\":\"uB I H rC sC tC CC uC vC\",\"2\":\"qC\"},J:{\"1\":\"D A\"},K:{\"1\":\"A B C h rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"132\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:6,C:\"TTF/OTF - TrueType and OpenType font support\"};\n%/data/features/once-event-listener.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G\"},C:{\"1\":\"RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB FC GC\"},D:{\"1\":\"WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB\"},E:{\"1\":\"A B C K L G 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F IC 0B JC KC LC MC\"},F:{\"1\":\"JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB QC RC SC TC rB BC UC sB\"},G:{\"1\":\"cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I xC\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"2\":\"BD\"}},B:1,C:\"\\\"once\\\" event listener option\"};\n!/data/features/input-selection.js\u0005module.exports={A:{A:{\"1\":\"F A B\",\"2\":\"J D E DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"I w J D E F A B C K L G JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"16\":\"IC 0B\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e TC rB BC UC sB\",\"16\":\"F QC RC SC\"},G:{\"1\":\"E VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"16\":\"0B\"},H:{\"2\":\"pC\"},I:{\"1\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"1\":\"D A\"},K:{\"1\":\"A B C h rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:1,C:\"Selection controls for input & textarea\"};\n/data/features/ch-unit.js\u0005module.exports={A:{A:{\"2\":\"J D E DC\",\"132\":\"F A B\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"1\":\"4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 I w J D E F A B C K L G M N O x g y z\"},E:{\"1\":\"D E F A B C K L G LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J IC 0B JC KC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F B C QC RC SC TC rB BC UC sB\"},G:{\"1\":\"E YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC CC WC XC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H uC vC\",\"2\":\"uB I qC rC sC tC CC\"},J:{\"1\":\"A\",\"2\":\"D\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:4,C:\"ch (character) unit\"};\n/data/features/tls1-3.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"1\":\"cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB FC GC\",\"132\":\"aB wB bB\",\"450\":\"SB TB UB VB WB XB YB ZB vB\"},D:{\"1\":\"jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB\",\"706\":\"VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB\"},E:{\"1\":\"L G NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A B C IC 0B JC KC LC MC 1B rB\",\"1028\":\"K sB 2B\"},F:{\"1\":\"YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB QC RC SC TC rB BC UC sB\",\"706\":\"VB WB XB\"},G:{\"1\":\"hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I xC yC zC 0C 1C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"2\":\"BD\"}},B:6,C:\"TLS 1.3\"};\n/data/regions/HT.js\u0011Nmodule.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0.00116,\"102\":0.00116,\"103\":0,\"104\":0,\"105\":0,\"106\":0.00116,\"107\":0,\"108\":0.00116,\"109\":0.0243,\"110\":0.01273,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0.00579,\"44\":0,\"45\":0,\"46\":0.00116,\"47\":0,\"48\":0,\"49\":0.00116,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0.00347,\"57\":0,\"58\":0,\"59\":0,\"60\":0.00116,\"61\":0,\"62\":0,\"63\":0.00231,\"64\":0.00347,\"65\":0,\"66\":0,\"67\":0,\"68\":0.00231,\"69\":0.00116,\"70\":0.00231,\"71\":0,\"72\":0,\"73\":0,\"74\":0.00231,\"75\":0.00347,\"76\":0.00579,\"77\":0.00116,\"78\":0,\"79\":0,\"80\":0.00116,\"81\":0.00463,\"83\":0.00116,\"84\":0.00116,\"85\":0,\"86\":0.00116,\"87\":0.00231,\"88\":0.00347,\"89\":0,\"90\":0.00116,\"91\":0.00116,\"92\":0.00579,\"93\":0.00926,\"94\":0.00231,\"95\":0.00231,\"96\":0.00347,\"97\":0.00116,\"98\":0.00116,\"99\":0.00116,\"100\":0.00116,\"101\":0.00116,\"102\":0.00116,\"103\":0.01851,\"104\":0.00116,\"105\":0.00463,\"106\":0.00231,\"107\":0.00694,\"108\":0.01967,\"109\":0.28231,\"110\":0.1562,\"111\":0,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0.00116,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0.00231,\"62\":0,\"63\":0.00231,\"64\":0.00116,\"65\":0.00116,\"66\":0,\"67\":0.01157,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0.01157,\"95\":0.0162,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0.00116,\"13\":0,\"14\":0,\"15\":0,\"16\":0.00116,\"17\":0,\"18\":0.00231,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00116,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0.00116,\"100\":0,\"101\":0,\"102\":0,\"103\":0.00116,\"104\":0.00116,\"105\":0,\"106\":0.00347,\"107\":0.00231,\"108\":0.00579,\"109\":0.06364,\"110\":0.06826},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.00116,\"14\":0.00579,\"15\":0,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0.00116,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0.00116,\"13.1\":0.00347,\"14.1\":0.00231,\"15.1\":0,\"15.2-15.3\":0,\"15.4\":0.00231,\"15.5\":0.00116,\"15.6\":0.00347,\"16.0\":0.00231,\"16.1\":0.00231,\"16.2\":0.0081,\"16.3\":0.00463,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0.00369,\"6.0-6.1\":0,\"7.0-7.1\":0.20036,\"8.1-8.4\":0.00492,\"9.0-9.2\":0.00123,\"9.3\":0.21388,\"10.0-10.2\":0.00123,\"10.3\":0.14136,\"11.0-11.2\":0.03319,\"11.3-11.4\":0.06761,\"12.0-12.1\":0.19421,\"12.2-12.5\":2.58375,\"13.0-13.1\":0.39211,\"13.2\":0.02581,\"13.3\":0.24338,\"13.4-13.7\":0.52241,\"14.0-14.4\":1.20706,\"14.5-14.8\":0.90837,\"15.0-15.1\":0.57157,\"15.2-15.3\":0.68957,\"15.4\":0.40932,\"15.5\":0.55805,\"15.6\":0.46586,\"16.0\":0.2569,\"16.1\":0.68097,\"16.2\":0.62566,\"16.3\":0.57772,\"16.4\":0.00246},P:{\"4\":0.5785,\"20\":0.08264,\"5.0-5.4\":0.09297,\"6.2-6.4\":0.04132,\"7.2-7.4\":0.30991,\"8.2\":0.03099,\"9.2\":0.29958,\"10.1\":0.01033,\"11.1-11.2\":0.46487,\"12.0\":0.02066,\"13.0\":0.14462,\"14.0\":0.21694,\"15.0\":0.04132,\"16.0\":0.15496,\"17.0\":0.1033,\"18.0\":0.14462,\"19.0\":0.64048},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.00088,\"4.2-4.3\":0.00368,\"4.4\":0,\"4.4.3-4.4.4\":0.08214},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.00231,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0.02653,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.14149},H:{\"0\":0.45209},L:{\"0\":82.83316},R:{_:\"0\"},M:{\"0\":0.09727},Q:{\"13.1\":0}};\n/data/regions/GD.js\u0010module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.01472,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0.01962,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0.00491,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0.00491,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0.2894,\"103\":0,\"104\":0,\"105\":0.00491,\"106\":0,\"107\":0.00491,\"108\":0,\"109\":0.3875,\"110\":0.30411,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0.00981,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0.00491,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0.00491,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0.00491,\"71\":0.00491,\"72\":0,\"73\":0.01472,\"74\":0,\"75\":0,\"76\":0.01962,\"77\":0,\"78\":0,\"79\":0.01472,\"80\":0,\"81\":0.00981,\"83\":0.01472,\"84\":0,\"85\":0.00491,\"86\":0.00491,\"87\":0.01472,\"88\":0.00491,\"89\":0,\"90\":0,\"91\":0.00491,\"92\":0.02453,\"93\":0.0981,\"94\":0,\"95\":0.01472,\"96\":0.00981,\"97\":0.01472,\"98\":0.00491,\"99\":0,\"100\":0.04905,\"101\":0,\"102\":0.00981,\"103\":0.15696,\"104\":0.00981,\"105\":0.03924,\"106\":0.06377,\"107\":0.07848,\"108\":0.76518,\"109\":8.49056,\"110\":4.66956,\"111\":0.00981,\"112\":0.00491,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0.02453,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0.00491,\"64\":0,\"65\":0,\"66\":0,\"67\":0.00981,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0.00491,\"90\":0,\"91\":0,\"92\":0,\"93\":0.00491,\"94\":0.18639,\"95\":0.0932,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0.00491,\"16\":0,\"17\":0,\"18\":0.00981,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00491,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0.00491,\"104\":0,\"105\":0,\"106\":0,\"107\":0.01962,\"108\":0.04415,\"109\":1.80014,\"110\":2.07482},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0.03434,\"15\":0.00491,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0.00981,\"13.1\":0.05886,\"14.1\":0.05886,\"15.1\":0.02943,\"15.2-15.3\":0,\"15.4\":0.02943,\"15.5\":0.06377,\"15.6\":0.56898,\"16.0\":0.01962,\"16.1\":0.07848,\"16.2\":0.59351,\"16.3\":0.51993,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0.0083,\"8.1-8.4\":0,\"9.0-9.2\":0.00623,\"9.3\":0.06436,\"10.0-10.2\":0,\"10.3\":0.07058,\"11.0-11.2\":0.01038,\"11.3-11.4\":0.02284,\"12.0-12.1\":0,\"12.2-12.5\":0.50654,\"13.0-13.1\":0,\"13.2\":0.00208,\"13.3\":0.08719,\"13.4-13.7\":0.03529,\"14.0-14.4\":0.14532,\"14.5-14.8\":0.58335,\"15.0-15.1\":0.07681,\"15.2-15.3\":0.08096,\"15.4\":0.26988,\"15.5\":0.64355,\"15.6\":0.97986,\"16.0\":1.51547,\"16.1\":5.84388,\"16.2\":4.37409,\"16.3\":3.49595,\"16.4\":0.0083},P:{\"4\":0.09534,\"20\":1.44072,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0.09534,\"8.2\":0,\"9.2\":0.02119,\"10.1\":0,\"11.1-11.2\":0.04237,\"12.0\":0,\"13.0\":0.02119,\"14.0\":0.01059,\"15.0\":0,\"16.0\":0.02119,\"17.0\":0.03178,\"18.0\":0.06356,\"19.0\":1.36657},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0,\"4.4\":0,\"4.4.3-4.4.4\":0.80104},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0.00491,\"11\":0.00491,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0.0051},O:{\"0\":0.05605},H:{\"0\":0.14471},L:{\"0\":52.36851},R:{_:\"0\"},M:{\"0\":0.70821},Q:{\"13.1\":0}};\n/data/regions/LS.js\u0011module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.00606,\"53\":0,\"54\":0,\"55\":0.00303,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0.00303,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0.00303,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0.00303,\"99\":0,\"100\":0,\"101\":0,\"102\":0.02729,\"103\":0,\"104\":0,\"105\":0,\"106\":0.00606,\"107\":0,\"108\":0.01213,\"109\":0.22134,\"110\":0.16676,\"111\":0.00303,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0.11522,\"41\":0,\"42\":0,\"43\":0.01516,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0.01516,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0.00606,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0.00303,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0.01819,\"71\":0,\"72\":0,\"73\":0,\"74\":0.0091,\"75\":0.0091,\"76\":0,\"77\":0.01213,\"78\":0,\"79\":0.00303,\"80\":0,\"81\":0.08186,\"83\":0.0091,\"84\":0.00303,\"85\":0,\"86\":0.00606,\"87\":0.00303,\"88\":0,\"89\":0,\"90\":0.00606,\"91\":0.01213,\"92\":0.00303,\"93\":0,\"94\":0.00303,\"95\":0.01213,\"96\":0.00606,\"97\":0.00606,\"98\":0.00606,\"99\":0.00303,\"100\":0.00303,\"101\":0.03638,\"102\":0.0091,\"103\":0.01213,\"104\":0.00606,\"105\":0.0091,\"106\":0.03032,\"107\":0.02426,\"108\":0.0849,\"109\":2.26794,\"110\":1.13397,\"111\":0,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0.02426,\"27\":0,\"28\":0.00303,\"29\":0,\"30\":0,\"31\":0.00303,\"32\":0.03335,\"33\":0,\"34\":0,\"35\":0.04851,\"36\":0,\"37\":0,\"38\":0.00303,\"39\":0,\"40\":0.00303,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0.00303,\"46\":0.02122,\"47\":0.00606,\"48\":0,\"49\":0,\"50\":0.00303,\"51\":0.00303,\"52\":0,\"53\":0,\"54\":0.00303,\"55\":0,\"56\":0.03335,\"57\":0.00303,\"58\":0.0091,\"60\":0.02729,\"62\":0.0091,\"63\":0.09702,\"64\":0.15463,\"65\":0.01213,\"66\":0.03638,\"67\":0.16676,\"68\":0.00606,\"69\":0,\"70\":0.00303,\"71\":0,\"72\":0,\"73\":0.00303,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0.00303,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0.00606,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.00303,\"94\":0.07883,\"95\":0.16373,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0.01213},B:{\"12\":0.00606,\"13\":0.00303,\"14\":0.00606,\"15\":0,\"16\":0.01213,\"17\":0.00606,\"18\":0.01516,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0.00303,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0.00606,\"90\":0,\"91\":0,\"92\":0.01213,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0.00303,\"99\":0.00303,\"100\":0.00303,\"101\":0,\"102\":0.00606,\"103\":0.00303,\"104\":0.00606,\"105\":0.01213,\"106\":0.00303,\"107\":0.03032,\"108\":0.03942,\"109\":0.65491,\"110\":0.58214},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0.00606,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0,\"13.1\":0.00303,\"14.1\":0.00303,\"15.1\":0.00303,\"15.2-15.3\":0,\"15.4\":0,\"15.5\":0.00303,\"15.6\":0.01213,\"16.0\":0,\"16.1\":0.00303,\"16.2\":0.00606,\"16.3\":0.02426,\"16.4\":0},G:{\"8\":0,\"3.2\":0.00358,\"4.0-4.1\":0,\"4.2-4.3\":0.00179,\"5.0-5.1\":0.00107,\"6.0-6.1\":0,\"7.0-7.1\":0,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0.03933,\"10.0-10.2\":0,\"10.3\":0.00894,\"11.0-11.2\":0.00179,\"11.3-11.4\":0.00107,\"12.0-12.1\":0.00429,\"12.2-12.5\":0.30038,\"13.0-13.1\":0.02217,\"13.2\":0,\"13.3\":0.0025,\"13.4-13.7\":0.11014,\"14.0-14.4\":0.12587,\"14.5-14.8\":0.09941,\"15.0-15.1\":0.15698,\"15.2-15.3\":0.05936,\"15.4\":0.08618,\"15.5\":0.12837,\"15.6\":0.16699,\"16.0\":0.23708,\"16.1\":0.85321,\"16.2\":0.44413,\"16.3\":0.25711,\"16.4\":0},P:{\"4\":0.31706,\"20\":0.29661,\"5.0-5.4\":0,\"6.2-6.4\":0.03068,\"7.2-7.4\":1.20689,\"8.2\":0,\"9.2\":0.0716,\"10.1\":0,\"11.1-11.2\":0.0716,\"12.0\":0,\"13.0\":0.0716,\"14.0\":0.14319,\"15.0\":0.05114,\"16.0\":0.30684,\"17.0\":0.20456,\"18.0\":0.12273,\"19.0\":0.60345},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0.00261,\"4.4\":0,\"4.4.3-4.4.4\":0.06952},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.01213,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0.18814,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":1.0661},H:{\"0\":6.0757},L:{\"0\":75.52104},R:{_:\"0\"},M:{\"0\":0.06968},Q:{\"13.1\":0}};\n/README.mdĤ# caniuse-lite\n\nA smaller version of caniuse-db, with only the essentials!\n\n## Docs\nRead full docs **[here](https://github.com/browserslist/caniuse-lite#readme)**.\n/data/features/indexeddb.js\u0006\u0014module.exports={A:{A:{\"2\":\"J D E F DC\",\"132\":\"A B\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"132\":\"C K L G M N O\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB FC GC\",\"33\":\"A B C K L G\",\"36\":\"I w J D E F\"},D:{\"1\":\"1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"A\",\"8\":\"I w J D E F\",\"33\":\"0\",\"36\":\"B C K L G M N O x g y z\"},E:{\"1\":\"A B C K L G 1B rB sB 2B OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"8\":\"I w J D IC 0B JC KC\",\"260\":\"E F LC MC\",\"516\":\"NC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F QC RC\",\"8\":\"B C SC TC rB BC UC sB\"},G:{\"1\":\"cC dC eC fC gC hC iC jC kC lC mC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"8\":\"0B VC CC WC XC YC\",\"260\":\"E ZC aC bC\",\"516\":\"nC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H uC vC\",\"8\":\"uB I qC rC sC tC CC\"},J:{\"1\":\"A\",\"8\":\"D\"},K:{\"1\":\"h\",\"2\":\"A\",\"8\":\"B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"132\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:2,C:\"IndexedDB\"};\n!/data/features/matchesselector.js\u0005module.exports={A:{A:{\"2\":\"J D E DC\",\"36\":\"F A B\"},B:{\"1\":\"G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"36\":\"C K L\"},C:{\"1\":\"BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB FC\",\"36\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB GC\"},D:{\"1\":\"BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"36\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB\"},E:{\"1\":\"E F A B C K L G LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I IC 0B\",\"36\":\"w J D JC KC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F B QC RC SC TC rB\",\"36\":\"C G M N O x g BC UC sB\"},G:{\"1\":\"E ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B\",\"36\":\"VC CC WC XC YC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"qC\",\"36\":\"uB I rC sC tC CC uC vC\"},J:{\"36\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B\",\"36\":\"C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"36\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"36\":\"I\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:1,C:\"matches() DOM method\"};\n/data/features/css-subgrid.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"2\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB FC GC\"},D:{\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B\"},F:{\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\"},G:{\"1\":\"tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"2\":\"A B C h rB BC sB\"},L:{\"2\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"2\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"2\":\"2B\"},R:{\"2\":\"AD\"},S:{\"1\":\"CD\",\"2\":\"BD\"}},B:4,C:\"CSS Subgrid\"};\n/data/regions/LV.js\u0011module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.03274,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0.00655,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0.00655,\"76\":0,\"77\":0,\"78\":0.01964,\"79\":0.00655,\"80\":0,\"81\":0.00655,\"82\":0.00655,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0.00655,\"89\":0,\"90\":0.00655,\"91\":0.00655,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0.00655,\"97\":0.00655,\"98\":0,\"99\":0.01309,\"100\":0,\"101\":0,\"102\":0.13094,\"103\":0.09166,\"104\":0.00655,\"105\":0.00655,\"106\":0.01309,\"107\":0.04583,\"108\":0.05238,\"109\":1.92482,\"110\":1.25048,\"111\":0.01964,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0.00655,\"42\":0.00655,\"43\":0.00655,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0.02619,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0.00655,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0.00655,\"71\":0,\"72\":0.00655,\"73\":0,\"74\":0.00655,\"75\":0,\"76\":0.00655,\"77\":0,\"78\":0,\"79\":0.08511,\"80\":0.00655,\"81\":0.02619,\"83\":0.01309,\"84\":0.04583,\"85\":0.04583,\"86\":0.03274,\"87\":0.05892,\"88\":0.01309,\"89\":0.01309,\"90\":0.01309,\"91\":0.03928,\"92\":0.02619,\"93\":0.00655,\"94\":0.02619,\"95\":0.01309,\"96\":0.02619,\"97\":0.01309,\"98\":0.00655,\"99\":0.01309,\"100\":0.01964,\"101\":0.02619,\"102\":0.01964,\"103\":0.10475,\"104\":0.05238,\"105\":0.13749,\"106\":0.2095,\"107\":0.43865,\"108\":1.91172,\"109\":16.23656,\"110\":10.61923,\"111\":0.01309,\"112\":0.00655,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.00655,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0.00655,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0.00655,\"82\":0,\"83\":0,\"84\":0,\"85\":0.01309,\"86\":0,\"87\":0,\"88\":0,\"89\":0.04583,\"90\":0,\"91\":0,\"92\":0,\"93\":0.05892,\"94\":0.93622,\"95\":0.66125,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0.00655,\"16\":0,\"17\":0.01309,\"18\":0.01309,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0.00655,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00655,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0.01964,\"105\":0,\"106\":0.00655,\"107\":0.03274,\"108\":0.24879,\"109\":1.64984,\"110\":2.29145},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0.00655,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.00655,\"14\":0.03274,\"15\":0.00655,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0.03928,\"13.1\":0.07856,\"14.1\":0.11785,\"15.1\":0.02619,\"15.2-15.3\":0.01309,\"15.4\":0.02619,\"15.5\":0.06547,\"15.6\":0.26188,\"16.0\":0.03928,\"16.1\":0.13749,\"16.2\":0.31426,\"16.3\":0.30771,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0,\"8.1-8.4\":0.0051,\"9.0-9.2\":0,\"9.3\":0.0187,\"10.0-10.2\":0.0034,\"10.3\":0.017,\"11.0-11.2\":0.0034,\"11.3-11.4\":0.0068,\"12.0-12.1\":0.0102,\"12.2-12.5\":0.4028,\"13.0-13.1\":0.0051,\"13.2\":0.02039,\"13.3\":0.0102,\"13.4-13.7\":0.06798,\"14.0-14.4\":0.16996,\"14.5-14.8\":0.29742,\"15.0-15.1\":0.14616,\"15.2-15.3\":0.17675,\"15.4\":0.26683,\"15.5\":0.3722,\"15.6\":1.84403,\"16.0\":2.50855,\"16.1\":3.59288,\"16.2\":3.5011,\"16.3\":2.87056,\"16.4\":0.02039},P:{\"4\":0.06112,\"20\":0.95757,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0,\"8.2\":0,\"9.2\":0,\"10.1\":0,\"11.1-11.2\":0.01019,\"12.0\":0,\"13.0\":0.04075,\"14.0\":0.01019,\"15.0\":0.01019,\"16.0\":0.03056,\"17.0\":0.04075,\"18.0\":0.10187,\"19.0\":1.80309},I:{\"0\":0,\"3\":0,\"4\":0.02263,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.00377,\"4.2-4.3\":0.01132,\"4.4\":0,\"4.4.3-4.4.4\":0.08299},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0.00655,\"9\":0,\"10\":0,\"11\":0.03928,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0.00345,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0.00345},O:{\"0\":0.06215},H:{\"0\":0.29422},L:{\"0\":35.13927},R:{_:\"0\"},M:{\"0\":0.34185},Q:{\"13.1\":0}};\n/data/features/http3.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\",\"322\":\"P Q R S T\",\"578\":\"U V\"},C:{\"1\":\"X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB FC GC\",\"194\":\"lB h mB nB oB pB qB P Q R xB S T U V W\"},D:{\"1\":\"W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB\",\"322\":\"P Q R S T\",\"578\":\"U V\"},E:{\"2\":\"I w J D E F A B C K IC 0B JC KC LC MC 1B rB sB 2B\",\"1090\":\"L G NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB QC RC SC TC rB BC UC sB\",\"578\":\"h\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC\",\"66\":\"mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"1\":\"g 5C 6C tB 7C 8C 9C\",\"2\":\"I xC yC zC 0C 1C 1B 2C 3C 4C\"},Q:{\"2\":\"2B\"},R:{\"1\":\"AD\"},S:{\"2\":\"BD CD\"}},B:6,C:\"HTTP/3 protocol\"};\n/data/regions/alt-sa.js\rmodule.exports={C:{\"27\":0.00394,\"52\":0.03939,\"54\":0.02757,\"68\":0.00394,\"73\":0.00788,\"78\":0.01182,\"80\":0.00394,\"81\":0.00394,\"86\":0.00394,\"87\":0.00394,\"88\":0.01182,\"91\":0.03151,\"96\":0.00394,\"97\":0.00394,\"99\":0.00788,\"102\":0.04333,\"103\":0.00788,\"104\":0.0197,\"105\":0.01182,\"106\":0.0197,\"107\":0.0197,\"108\":0.04333,\"109\":0.83901,\"110\":0.54752,\"111\":0.00394,_:\"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 53 55 56 57 58 59 60 61 62 63 64 65 66 67 69 70 71 72 74 75 76 77 79 82 83 84 85 89 90 92 93 94 95 98 100 101 112 3.5 3.6\"},D:{\"38\":0.01576,\"47\":0.00788,\"49\":0.06696,\"51\":0.00394,\"53\":0.00394,\"55\":0.00394,\"58\":0.00394,\"63\":0.00394,\"65\":0.00788,\"66\":0.01182,\"67\":0.00394,\"68\":0.01182,\"69\":0.00394,\"70\":0.00788,\"71\":0.00394,\"72\":0.00788,\"73\":0.00394,\"74\":0.01182,\"75\":0.01182,\"76\":0.01182,\"77\":0.00788,\"78\":0.01182,\"79\":0.12605,\"80\":0.01576,\"81\":0.02757,\"83\":0.02363,\"84\":0.03151,\"85\":0.05121,\"86\":0.04727,\"87\":0.06302,\"88\":0.01576,\"89\":0.0197,\"90\":0.04727,\"91\":0.32694,\"92\":0.04727,\"93\":0.04727,\"94\":0.04727,\"95\":0.01576,\"96\":0.03545,\"97\":0.03151,\"98\":0.02757,\"99\":0.03151,\"100\":0.04333,\"101\":0.03151,\"102\":0.03545,\"103\":0.12211,\"104\":0.06302,\"105\":0.08666,\"106\":0.07878,\"107\":0.14574,\"108\":0.52783,\"109\":15.96477,\"110\":9.83962,\"111\":0.01576,\"112\":0.00788,_:\"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 39 40 41 42 43 44 45 46 48 50 52 54 56 57 59 60 61 62 64 113\"},F:{\"28\":0.00788,\"36\":0.00394,\"79\":0.00788,\"85\":0.00788,\"93\":0.31118,\"94\":2.45006,\"95\":0.71296,_:\"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 33 34 35 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 80 81 82 83 84 86 87 88 89 90 91 92 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1\",\"10.0-10.1\":0},B:{\"12\":0.00394,\"15\":0.03151,\"18\":0.00788,\"84\":0.00394,\"92\":0.01182,\"105\":0.00394,\"106\":0.00394,\"107\":0.04727,\"108\":0.03545,\"109\":1.15019,\"110\":1.57954,_:\"13 14 16 17 79 80 81 83 85 86 87 88 89 90 91 93 94 95 96 97 98 99 100 101 102 103 104\"},E:{\"4\":0,\"14\":0.0197,\"15\":0.00788,_:\"0 5 6 7 8 9 10 11 12 13 3.1 3.2 5.1 6.1 7.1 10.1 11.1 16.4\",\"9.1\":0.02363,\"12.1\":0.00394,\"13.1\":0.03151,\"14.1\":0.05121,\"15.1\":0.00788,\"15.2-15.3\":0.00788,\"15.4\":0.01576,\"15.5\":0.03545,\"15.6\":0.1418,\"16.0\":0.02363,\"16.1\":0.07484,\"16.2\":0.14968,\"16.3\":0.12999},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0.00477,\"6.0-6.1\":0.0008,\"7.0-7.1\":0.00318,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0.02385,\"10.0-10.2\":0,\"10.3\":0.02385,\"11.0-11.2\":0.00795,\"11.3-11.4\":0.02067,\"12.0-12.1\":0.00795,\"12.2-12.5\":0.15426,\"13.0-13.1\":0.00398,\"13.2\":0.00318,\"13.3\":0.01034,\"13.4-13.7\":0.03737,\"14.0-14.4\":0.07872,\"14.5-14.8\":0.20674,\"15.0-15.1\":0.03817,\"15.2-15.3\":0.05884,\"15.4\":0.07713,\"15.5\":0.17095,\"15.6\":0.63134,\"16.0\":0.84523,\"16.1\":1.85426,\"16.2\":1.89163,\"16.3\":1.08218,\"16.4\":0.00557},P:{\"4\":0.16297,\"20\":0.68243,\"5.0-5.4\":0.03188,\"6.2-6.4\":0.08151,\"7.2-7.4\":0.18334,\"8.2\":0.01016,\"9.2\":0.03097,\"10.1\":0.01011,\"11.1-11.2\":0.03056,\"12.0\":0.02065,\"13.0\":0.03056,\"14.0\":0.03056,\"15.0\":0.02037,\"16.0\":0.05093,\"17.0\":0.11204,\"18.0\":0.0713,\"19.0\":1.07966},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.00242,\"4.2-4.3\":0.00606,\"4.4\":0,\"4.4.3-4.4.4\":0.03394},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"8\":0.00846,\"9\":0.00846,\"11\":0.09731,_:\"6 7 10 5.5\"},N:{\"10\":0.03712,\"11\":0.07423},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.04849},H:{\"0\":0.1951},L:{\"0\":51.63368},R:{_:\"0\"},M:{\"0\":0.14546},Q:{\"13.1\":0}};\n/data/regions/YE.js\u0011module.exports={C:{\"2\":0,\"3\":0.00238,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0.00238,\"46\":0,\"47\":0.00715,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.00238,\"53\":0,\"54\":0,\"55\":0,\"56\":0.00238,\"57\":0.00238,\"58\":0,\"59\":0,\"60\":0.00238,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0.00477,\"66\":0,\"67\":0,\"68\":0.00477,\"69\":0,\"70\":0,\"71\":0,\"72\":0.00238,\"73\":0.00477,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0.00238,\"90\":0,\"91\":0.00238,\"92\":0,\"93\":0,\"94\":0.00238,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0.00238,\"100\":0.00238,\"101\":0.00238,\"102\":0.00477,\"103\":0.00477,\"104\":0.00477,\"105\":0.00238,\"106\":0.00477,\"107\":0.00715,\"108\":0.00953,\"109\":0.2097,\"110\":0.1263,\"111\":0.00238,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0.00238,\"43\":0.00238,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0.00238,\"50\":0,\"51\":0,\"52\":0,\"53\":0.00238,\"54\":0,\"55\":0.00477,\"56\":0.00715,\"57\":0.00238,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0.00953,\"64\":0.00238,\"65\":0,\"66\":0.00238,\"67\":0.00477,\"68\":0.0286,\"69\":0.00238,\"70\":0.00238,\"71\":0.00238,\"72\":0.00238,\"73\":0.00238,\"74\":0.00238,\"75\":0.00238,\"76\":0.00715,\"77\":0.00238,\"78\":0.00715,\"79\":0.00477,\"80\":0.00477,\"81\":0.00238,\"83\":0.00715,\"84\":0.00238,\"85\":0.00477,\"86\":0.00715,\"87\":0.00715,\"88\":0.00715,\"89\":0.00715,\"90\":0.00238,\"91\":0.01192,\"92\":0.00715,\"93\":0.00238,\"94\":0.00477,\"95\":0.00715,\"96\":0.01192,\"97\":0.00477,\"98\":0.00477,\"99\":0.00477,\"100\":0.03336,\"101\":0.00715,\"102\":0.00953,\"103\":0.03098,\"104\":0.00953,\"105\":0.0143,\"106\":0.01906,\"107\":0.03813,\"108\":0.07864,\"109\":1.45601,\"110\":0.66724,\"111\":0,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0.00238,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.02383,\"68\":0,\"69\":0.00238,\"70\":0,\"71\":0,\"72\":0.00238,\"73\":0.00715,\"74\":0.00238,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.00238,\"94\":0.01906,\"95\":0.02621,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0.05719},B:{\"12\":0.00238,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0.00477,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0.00238,\"90\":0.00238,\"91\":0,\"92\":0.01192,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0.00477,\"100\":0.00238,\"101\":0,\"102\":0,\"103\":0,\"104\":0.00715,\"105\":0.00238,\"106\":0.00238,\"107\":0.00715,\"108\":0.0143,\"109\":0.17396,\"110\":0.15966},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0.0143,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0,\"13.1\":0,\"14.1\":0.00238,\"15.1\":0,\"15.2-15.3\":0,\"15.4\":0,\"15.5\":0.00238,\"15.6\":0.00238,\"16.0\":0,\"16.1\":0.00477,\"16.2\":0.00238,\"16.3\":0.00477,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0.00548,\"5.0-5.1\":0,\"6.0-6.1\":0.00066,\"7.0-7.1\":0.00701,\"8.1-8.4\":0,\"9.0-9.2\":0.00767,\"9.3\":0.00307,\"10.0-10.2\":0,\"10.3\":0.00767,\"11.0-11.2\":0.00131,\"11.3-11.4\":0.00066,\"12.0-12.1\":0.01665,\"12.2-12.5\":0.19938,\"13.0-13.1\":0.01665,\"13.2\":0.00263,\"13.3\":0.01906,\"13.4-13.7\":0.01424,\"14.0-14.4\":0.09443,\"14.5-14.8\":0.07931,\"15.0-15.1\":0.04864,\"15.2-15.3\":0.08369,\"15.4\":0.06967,\"15.5\":0.13102,\"15.6\":0.17374,\"16.0\":0.3981,\"16.1\":0.2375,\"16.2\":0.23049,\"16.3\":0.1974,\"16.4\":0},P:{\"4\":0.42884,\"20\":0.48868,\"5.0-5.4\":0.06981,\"6.2-6.4\":0.01995,\"7.2-7.4\":0.1097,\"8.2\":0,\"9.2\":0.20944,\"10.1\":0.01995,\"11.1-11.2\":0.35903,\"12.0\":0.02992,\"13.0\":0.13962,\"14.0\":0.12965,\"15.0\":0.03989,\"16.0\":0.20944,\"17.0\":0.20944,\"18.0\":0.34906,\"19.0\":1.89489},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.00372,\"4.2-4.3\":0.00372,\"4.4\":0,\"4.4.3-4.4.4\":0.05447},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.00238,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0.00762,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":3.42765},H:{\"0\":7.52137},L:{\"0\":73.74432},R:{_:\"0\"},M:{\"0\":0.38085},Q:{\"13.1\":0.00762}};\n$/data/features/speech-recognition.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"2\":\"C K L G M N O\",\"1026\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"2\":\"EC uB I w J D E F A B C K L G M N O x g y FC GC\",\"322\":\"0 1 2 3 4 5 6 7 8 9 z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\"},D:{\"2\":\"0 1 I w J D E F A B C K L G M N O x g y z\",\"164\":\"2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"2\":\"I w J D E F A B C K L IC 0B JC KC LC MC 1B rB sB 2B\",\"2084\":\"G NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"2\":\"0 1 2 3 F B C G M N O x g y z QC RC SC TC rB BC UC sB\",\"1026\":\"4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC\",\"2084\":\"nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"2\":\"A B C rB BC sB\",\"164\":\"h\"},L:{\"164\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"164\":\"wC\"},P:{\"164\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"164\":\"2B\"},R:{\"164\":\"AD\"},S:{\"322\":\"BD CD\"}},B:7,C:\"Speech Recognition API\"};\n /data/features/es6-generators.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C\"},C:{\"1\":\"3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 EC uB I w J D E F A B C K L G M N O x g y z FC GC\"},D:{\"1\":\"GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB\"},E:{\"1\":\"A B C K L G 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F IC 0B JC KC LC MC\"},F:{\"1\":\"3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 F B C G M N O x g y z QC RC SC TC rB BC UC sB\"},G:{\"1\":\"cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:6,C:\"ES6 Generators\"};\n/data/features/tls1-2.js\u0005module.exports={A:{A:{\"1\":\"B\",\"2\":\"J D DC\",\"66\":\"E F A\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 EC uB I w J D E F A B C K L G M N O x g y z FC GC\",\"66\":\"1 2 3\"},D:{\"1\":\"6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 I w J D E F A B C K L G M N O x g y z\"},E:{\"1\":\"D E F A B C K L G LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J IC 0B JC KC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F G QC\",\"66\":\"B C RC SC TC rB BC UC sB\"},G:{\"1\":\"E WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC CC\"},H:{\"1\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"1\":\"A\",\"2\":\"D\"},K:{\"1\":\"h sB\",\"2\":\"A B C rB BC\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"B\",\"66\":\"A\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:6,C:\"TLS 1.2\"};\n)/data/features/date-tolocaledatestring.js\u0006^module.exports={A:{A:{\"16\":\"DC\",\"132\":\"J D E F A B\"},B:{\"1\":\"O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"132\":\"C K L G M N\"},C:{\"1\":\"XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"132\":\"0 1 2 3 4 5 EC uB I w J D E F A B C K L G M N O x g y z FC GC\",\"260\":\"TB UB VB WB\",\"772\":\"6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB\"},D:{\"1\":\"jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"132\":\"0 I w J D E F A B C K L G M N O x g y z\",\"260\":\"FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB\",\"772\":\"1 2 3 4 5 6 7 8 9 AB BB CB DB EB\"},E:{\"1\":\"C K L G sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"16\":\"I w IC 0B\",\"132\":\"J D E F A JC KC LC MC\",\"260\":\"B 1B rB\"},F:{\"1\":\"YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"16\":\"F B C QC RC SC TC rB BC UC\",\"132\":\"sB\",\"260\":\"2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB\",\"772\":\"0 1 G M N O x g y z\"},G:{\"1\":\"dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"16\":\"0B VC CC WC\",\"132\":\"E XC YC ZC aC bC cC\"},H:{\"132\":\"pC\"},I:{\"1\":\"H\",\"16\":\"uB qC rC sC\",\"132\":\"I tC CC\",\"772\":\"uC vC\"},J:{\"132\":\"D A\"},K:{\"1\":\"h\",\"16\":\"A B C rB BC\",\"132\":\"sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"132\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"260\":\"I xC yC zC 0C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"132\":\"BD\"}},B:6,C:\"Date.prototype.toLocaleDateString\"};\n+/data/features/mdn-text-decoration-style.js\u0005module.exports={A:{D:{\"1\":\"YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB\"},L:{\"1\":\"H\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"1\":\"DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB I w FC GC\",\"33\":\"0 1 2 3 4 5 6 7 8 9 J D E F A B C K L G M N O x g y z AB BB CB\"},M:{\"1\":\"f\"},A:{\"2\":\"J D E F A B DC\"},F:{\"1\":\"LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB QC RC SC TC rB BC UC sB\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},E:{\"1\":\"K L G sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"I w J D IC 0B JC KC LC PC\",\"33\":\"E F A B C MC 1B rB\"},G:{\"1\":\"hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC CC WC XC YC\",\"33\":\"E ZC aC bC cC dC eC fC gC\"},P:{\"1\":\"g zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I xC yC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"}},B:6,C:\"text-decoration-style property\"};\n/data/regions/alt-na.js\u000f\u0019module.exports={C:{\"4\":0.00511,\"11\":0.03064,\"17\":0.00511,\"38\":0.00511,\"43\":0.00511,\"44\":0.02043,\"45\":0.00511,\"48\":0.01532,\"52\":0.03064,\"54\":0.00511,\"55\":0.00511,\"72\":0.00511,\"78\":0.06639,\"79\":0.01021,\"80\":0.00511,\"81\":0.01021,\"82\":0.01021,\"83\":0.01021,\"84\":0.00511,\"87\":0.01021,\"88\":0.00511,\"91\":0.01021,\"93\":0.01532,\"94\":0.03575,\"101\":0.00511,\"102\":0.11746,\"103\":0.01021,\"104\":0.01021,\"105\":0.01532,\"106\":0.01532,\"107\":0.02043,\"108\":0.09193,\"109\":1.384,\"110\":0.91415,_:\"2 3 5 6 7 8 9 10 12 13 14 15 16 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 39 40 41 42 46 47 49 50 51 53 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 73 74 75 76 77 85 86 89 90 92 95 96 97 98 99 100 111 112 3.5 3.6\"},D:{\"35\":0.01021,\"40\":0.01532,\"43\":0.00511,\"47\":0.00511,\"48\":0.06128,\"49\":0.04596,\"52\":0.00511,\"56\":0.20939,\"60\":0.01021,\"61\":0.01532,\"63\":0.00511,\"64\":0.00511,\"65\":0.01021,\"66\":0.04596,\"67\":0.01532,\"68\":0.02554,\"69\":0.02554,\"70\":0.02043,\"71\":0.03064,\"72\":0.03064,\"73\":0.02043,\"74\":0.04086,\"75\":0.03575,\"76\":0.13789,\"77\":0.02554,\"78\":0.04086,\"79\":0.15832,\"80\":0.0715,\"81\":0.09703,\"83\":0.17364,\"84\":0.0715,\"85\":0.10725,\"86\":0.12257,\"87\":0.12768,\"88\":0.05618,\"89\":0.0715,\"90\":0.0715,\"91\":0.07661,\"92\":0.03575,\"93\":0.143,\"94\":0.04596,\"95\":0.01532,\"96\":0.05107,\"97\":0.08682,\"98\":0.05618,\"99\":0.07661,\"100\":0.07661,\"101\":0.11235,\"102\":0.19917,\"103\":0.50049,\"104\":0.13278,\"105\":0.26556,\"106\":0.15321,\"107\":0.31663,\"108\":2.17558,\"109\":14.23832,\"110\":8.67679,\"111\":0.03575,\"112\":0.06639,\"113\":0.01532,_:\"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 36 37 38 39 41 42 44 45 46 50 51 53 54 55 57 58 59 62\"},F:{\"55\":0.00511,\"93\":0.04596,\"94\":0.45452,\"95\":0.28599,_:\"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1\",\"10.0-10.1\":0},B:{\"12\":0.00511,\"17\":0.00511,\"18\":0.01021,\"80\":0.01021,\"81\":0.01021,\"83\":0.01021,\"84\":0.01021,\"85\":0.01021,\"86\":0.01021,\"87\":0.01021,\"88\":0.00511,\"89\":0.00511,\"90\":0.00511,\"103\":0.01021,\"104\":0.00511,\"105\":0.01021,\"106\":0.01021,\"107\":0.19917,\"108\":0.16342,\"109\":2.45647,\"110\":3.5034,_:\"13 14 15 16 79 91 92 93 94 95 96 97 98 99 100 101 102\"},E:{\"4\":0,\"9\":0.01021,\"12\":0.00511,\"13\":0.04086,\"14\":0.19917,\"15\":0.05618,_:\"0 5 6 7 8 10 11 3.1 3.2 5.1 6.1 7.1 10.1\",\"9.1\":0.17875,\"11.1\":0.01021,\"12.1\":0.0715,\"13.1\":0.46984,\"14.1\":0.58731,\"15.1\":0.09193,\"15.2-15.3\":0.08171,\"15.4\":0.18385,\"15.5\":0.3626,\"15.6\":1.9662,\"16.0\":0.20939,\"16.1\":0.62305,\"16.2\":2.16537,\"16.3\":1.43507,\"16.4\":0.00511},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0.00506,\"7.0-7.1\":0.00506,\"8.1-8.4\":0.00253,\"9.0-9.2\":0.02529,\"9.3\":0.05816,\"10.0-10.2\":0.00506,\"10.3\":0.06828,\"11.0-11.2\":0.03035,\"11.3-11.4\":0.02782,\"12.0-12.1\":0.02276,\"12.2-12.5\":0.31358,\"13.0-13.1\":0.02023,\"13.2\":0.12392,\"13.3\":0.03288,\"13.4-13.7\":0.10368,\"14.0-14.4\":0.28576,\"14.5-14.8\":0.59934,\"15.0-15.1\":0.16438,\"15.2-15.3\":0.24277,\"15.4\":0.24783,\"15.5\":0.52601,\"15.6\":2.44543,\"16.0\":2.26588,\"16.1\":6.44359,\"16.2\":6.82292,\"16.3\":3.42663,\"16.4\":0.0177},P:{\"4\":0.03296,\"20\":0.70315,\"5.0-5.4\":0.04075,\"6.2-6.4\":0.08151,\"7.2-7.4\":0.01055,\"8.2\":0.01016,\"9.2\":0.03097,\"10.1\":0.01011,\"11.1-11.2\":0.01099,\"12.0\":0.02065,\"13.0\":0.01099,\"14.0\":0.0211,\"15.0\":0.01055,\"16.0\":0.04395,\"17.0\":0.03296,\"18.0\":0.06592,\"19.0\":0.88993},I:{\"0\":0,\"3\":0.00382,\"4\":0.01146,\"2.1\":0.00127,\"2.2\":0.00509,\"2.3\":0,\"4.1\":0.00382,\"4.2-4.3\":0.03184,\"4.4\":0,\"4.4.3-4.4.4\":0.03566},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"8\":0.05096,\"9\":0.03963,\"10\":0.01132,\"11\":0.15854,_:\"6 7 5.5\"},N:{\"10\":0.03712,\"11\":0.07423},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.07829},H:{\"0\":0.24552},L:{\"0\":23.0302},R:{_:\"0\"},M:{\"0\":0.44037},Q:{\"13.1\":0.02936}};\n*/data/features/mdn-text-decoration-line.js\u0005module.exports={A:{D:{\"1\":\"YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB\"},L:{\"1\":\"H\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"1\":\"DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB I w FC GC\",\"33\":\"0 1 2 3 4 5 6 7 8 9 J D E F A B C K L G M N O x g y z AB BB CB\"},M:{\"1\":\"f\"},A:{\"2\":\"J D E F A B DC\"},F:{\"1\":\"LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB QC RC SC TC rB BC UC sB\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},E:{\"1\":\"K L G sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"I w J D IC 0B JC KC LC PC\",\"33\":\"E F A B C MC 1B rB\"},G:{\"1\":\"hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC CC WC XC YC\",\"33\":\"E ZC aC bC cC dC eC fC gC\"},P:{\"1\":\"g zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I xC yC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"}},B:6,C:\"text-decoration-line property\"};\n/data/regions/MH.js\u0010\u0016module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.00584,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0.01168,\"91\":0,\"92\":0,\"93\":0,\"94\":0.00584,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0.01168,\"101\":0.01168,\"102\":0.01168,\"103\":0.00584,\"104\":0.01752,\"105\":0,\"106\":0,\"107\":0,\"108\":0.05257,\"109\":0.38551,\"110\":0.29789,\"111\":0.00584,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0.01752,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0.00584,\"74\":0,\"75\":0.00584,\"76\":0.01752,\"77\":0.05841,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0.02336,\"92\":0.00584,\"93\":0.18107,\"94\":0.02921,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0.00584,\"100\":0,\"101\":0,\"102\":0.00584,\"103\":1.15068,\"104\":0.05257,\"105\":0,\"106\":0.18691,\"107\":0.02336,\"108\":2.14949,\"109\":14.36302,\"110\":8.0489,\"111\":0,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.01168,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0.05257,\"95\":0.02921,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0.07593,\"108\":0,\"109\":1.139,\"110\":1.4953},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.00584,\"12\":0,\"13\":0.01168,\"14\":0.00584,\"15\":0,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0.01752,\"13.1\":0.01168,\"14.1\":0.18107,\"15.1\":0.11098,\"15.2-15.3\":0.01168,\"15.4\":0.00584,\"15.5\":0.19275,\"15.6\":0.2278,\"16.0\":0,\"16.1\":0.24532,\"16.2\":0.09346,\"16.3\":0.16355,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0.03335,\"7.0-7.1\":0,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0.3713,\"10.0-10.2\":0,\"10.3\":0.01556,\"11.0-11.2\":0,\"11.3-11.4\":0,\"12.0-12.1\":0.01556,\"12.2-12.5\":0.67812,\"13.0-13.1\":0,\"13.2\":0,\"13.3\":0.04891,\"13.4-13.7\":0,\"14.0-14.4\":0.29126,\"14.5-14.8\":1.53856,\"15.0-15.1\":0.1623,\"15.2-15.3\":0.22678,\"15.4\":0.76039,\"15.5\":0.58252,\"15.6\":2.16777,\"16.0\":4.59122,\"16.1\":3.83306,\"16.2\":4.21992,\"16.3\":1.1806,\"16.4\":0},P:{\"4\":0.09276,\"20\":1.09255,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0.01031,\"8.2\":0,\"9.2\":0,\"10.1\":0,\"11.1-11.2\":0.01031,\"12.0\":0,\"13.0\":0.01031,\"14.0\":0,\"15.0\":0,\"16.0\":0.06184,\"17.0\":0,\"18.0\":0.01031,\"19.0\":1.08224},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0.50385,\"4.4\":0,\"4.4.3-4.4.4\":0.25193},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0.00584,\"9\":0,\"10\":0,\"11\":0,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":1.44317},H:{\"0\":0.04331},L:{\"0\":39.95574},R:{_:\"0\"},M:{\"0\":0.16636},Q:{\"13.1\":0}};\n%/data/features/css-scroll-timeline.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"2\":\"C K L G M N O P Q R S T U V W X Y\",\"194\":\"Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T\",\"194\":\"X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"322\":\"U V W\"},E:{\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB QC RC SC TC rB BC UC sB\",\"194\":\"nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"322\":\"h mB\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"2\":\"A B C h rB BC sB\"},L:{\"2\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"2\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"2\":\"2B\"},R:{\"2\":\"AD\"},S:{\"2\":\"BD CD\"}},B:7,C:\"CSS @scroll-timeline\"};\n/data/regions/TH.js\u0011hmodule.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.00681,\"53\":0,\"54\":0,\"55\":0.00341,\"56\":0.03748,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0.00341,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.00341,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0.00341,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0.00341,\"103\":0.00341,\"104\":0,\"105\":0,\"106\":0,\"107\":0.00341,\"108\":0.00681,\"109\":0.19079,\"110\":0.12606,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0.00341,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0.00341,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0.00341,\"49\":0.01363,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0.00341,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0.00341,\"66\":0,\"67\":0,\"68\":0.00341,\"69\":0.00341,\"70\":0.00341,\"71\":0.00341,\"72\":0.01363,\"73\":0.00341,\"74\":0.00681,\"75\":0.00341,\"76\":0.00341,\"77\":0.00341,\"78\":0.00341,\"79\":0.02044,\"80\":0.00681,\"81\":0.00341,\"83\":0.00681,\"84\":0.01022,\"85\":0.00681,\"86\":0.01022,\"87\":0.01022,\"88\":0.00681,\"89\":0.01022,\"90\":0.00681,\"91\":0.02044,\"92\":0.02385,\"93\":0.00341,\"94\":0.00341,\"95\":0.00681,\"96\":0.01022,\"97\":0.01363,\"98\":0.00341,\"99\":0.00681,\"100\":0.01363,\"101\":0.01704,\"102\":0.01022,\"103\":0.02726,\"104\":0.01363,\"105\":0.02044,\"106\":0.01704,\"107\":0.03066,\"108\":0.09199,\"109\":4.38481,\"110\":2.73923,\"111\":0.00341,\"112\":0.00341,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0.00341,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0.00341,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.00341,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0.00341,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.00341,\"94\":0.06133,\"95\":0.05451,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0.00341,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00341,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0.00341,\"106\":0.00341,\"107\":0.00681,\"108\":0.02044,\"109\":0.36796,\"110\":0.48379},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.00341,\"14\":0.01363,\"15\":0.00681,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0.00681,\"10.1\":0,\"11.1\":0,\"12.1\":0.00341,\"13.1\":0.01704,\"14.1\":0.04429,\"15.1\":0.00681,\"15.2-15.3\":0.00681,\"15.4\":0.02385,\"15.5\":0.05111,\"15.6\":0.21805,\"16.0\":0.01704,\"16.1\":0.18398,\"16.2\":0.31004,\"16.3\":0.16354,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0.00833,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0.06107,\"10.0-10.2\":0,\"10.3\":0.04441,\"11.0-11.2\":0.00833,\"11.3-11.4\":0.00833,\"12.0-12.1\":0.01388,\"12.2-12.5\":0.49688,\"13.0-13.1\":0.0111,\"13.2\":0.09438,\"13.3\":0.03053,\"13.4-13.7\":0.08605,\"14.0-14.4\":0.37197,\"14.5-14.8\":0.83832,\"15.0-15.1\":0.2304,\"15.2-15.3\":0.26926,\"15.4\":0.4025,\"15.5\":0.71063,\"15.6\":2.16519,\"16.0\":3.80852,\"16.1\":5.69612,\"16.2\":5.92929,\"16.3\":4.02226,\"16.4\":0.01388},P:{\"4\":0.12374,\"20\":0.76305,\"5.0-5.4\":0.01031,\"6.2-6.4\":0,\"7.2-7.4\":0.08249,\"8.2\":0,\"9.2\":0.01031,\"10.1\":0,\"11.1-11.2\":0.04125,\"12.0\":0.01031,\"13.0\":0.03093,\"14.0\":0.05156,\"15.0\":0.03093,\"16.0\":0.0928,\"17.0\":0.07218,\"18.0\":0.13405,\"19.0\":1.52611},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0,\"4.4\":0,\"4.4.3-4.4.4\":0.04704},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0.00741,\"9\":0,\"10\":0.0037,\"11\":0.07407,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.17142},H:{\"0\":0.20598},L:{\"0\":59.51315},R:{_:\"0\"},M:{\"0\":0.10549},Q:{\"13.1\":0}};\n$/data/features/picture-in-picture.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB FC GC\",\"132\":\"lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"1090\":\"gB\",\"1412\":\"kB\",\"1668\":\"hB iB jB\"},D:{\"1\":\"jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB\",\"2114\":\"iB\"},E:{\"1\":\"L G 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F IC 0B JC KC LC MC\",\"4100\":\"A B C K 1B rB sB\"},F:{\"1\":\"h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB QC RC SC TC rB BC UC sB\",\"8196\":\"EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB\"},G:{\"1\":\"mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC\",\"4100\":\"aC bC cC dC eC fC gC hC iC jC kC lC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"2\":\"A B C h rB BC sB\"},L:{\"16388\":\"H\"},M:{\"16388\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"2\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"2\":\"2B\"},R:{\"2\":\"AD\"},S:{\"2\":\"BD CD\"}},B:5,C:\"Picture-in-Picture\"};\n/data/features/atob-btoa.js\u0005module.exports={A:{A:{\"1\":\"A B\",\"2\":\"J D E F DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e TC rB BC UC sB\",\"2\":\"F QC RC\",\"16\":\"SC\"},G:{\"1\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"1\":\"pC\"},I:{\"1\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"1\":\"D A\"},K:{\"1\":\"B C h rB BC sB\",\"16\":\"A\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:1,C:\"Base64 encoding and decoding\"};\n/data/features/trusted-types.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O P Q R\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"1\":\"S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R\"},E:{\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB QC RC SC TC rB BC UC sB\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"1\":\"g 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I xC yC zC 0C 1C 1B 2C 3C\"},Q:{\"2\":\"2B\"},R:{\"1\":\"AD\"},S:{\"2\":\"BD CD\"}},B:7,C:\"Trusted Types for DOM manipulation\"};\n!/data/features/css-caret-color.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"1\":\"UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB FC GC\"},D:{\"1\":\"YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB\"},E:{\"1\":\"C K L G rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A B IC 0B JC KC LC MC 1B\"},F:{\"1\":\"LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB QC RC SC TC rB BC UC sB\"},G:{\"1\":\"fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I xC yC\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"2\":\"BD\"}},B:2,C:\"CSS caret-color\"};\n0/data/features/img-naturalwidth-naturalheight.js\u0005module.exports={A:{A:{\"1\":\"F A B\",\"2\":\"J D E DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\"},G:{\"1\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"1\":\"pC\"},I:{\"1\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"1\":\"D A\"},K:{\"1\":\"A B C h rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:1,C:\"naturalWidth & naturalHeight image properties\"};\n/data/features/css-autofill.js\u0005nmodule.exports={A:{D:{\"33\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},L:{\"33\":\"H\"},B:{\"2\":\"C K L G M N O\",\"33\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U FC GC\"},M:{\"1\":\"f\"},A:{\"2\":\"J D E F A B DC\"},F:{\"2\":\"F B C QC RC SC TC rB BC UC sB\",\"33\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\"},K:{\"2\":\"A B C rB BC sB\",\"33\":\"h\"},E:{\"1\":\"G OC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"PC\",\"33\":\"I w J D E F A B C K L IC 0B JC KC LC MC 1B rB sB 2B NC\"},G:{\"1\":\"oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"33\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC\"},P:{\"33\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},I:{\"2\":\"uB I qC rC sC tC CC\",\"33\":\"H uC vC\"}},B:6,C:\":autofill CSS pseudo-class\"};\n#/data/features/css3-cursors-grab.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L\"},C:{\"1\":\"4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"33\":\"0 1 2 3 EC uB I w J D E F A B C K L G M N O x g y z FC GC\"},D:{\"1\":\"hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"33\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB\"},E:{\"1\":\"B C K L G rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"33\":\"I w J D E F A IC 0B JC KC LC MC 1B\"},F:{\"1\":\"C WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e UC sB\",\"2\":\"F B QC RC SC TC rB BC\",\"33\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"33\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"2\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"2\":\"BD CD\"}},B:2,C:\"CSS grab & grabbing cursors\"};\n/data/features/input-number.js\u0005module.exports={A:{A:{\"2\":\"J D E F DC\",\"129\":\"A B\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"129\":\"C K\",\"1025\":\"L G M N O\"},C:{\"2\":\"0 1 2 3 4 5 EC uB I w J D E F A B C K L G M N O x g y z FC GC\",\"513\":\"6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"I w\"},E:{\"1\":\"w J D E F A B C K L G JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I IC 0B\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\"},G:{\"388\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB qC rC sC\",\"388\":\"I H tC CC uC vC\"},J:{\"2\":\"D\",\"388\":\"A\"},K:{\"1\":\"A B C rB BC sB\",\"388\":\"h\"},L:{\"388\":\"H\"},M:{\"641\":\"f\"},N:{\"388\":\"A B\"},O:{\"388\":\"wC\"},P:{\"388\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"388\":\"2B\"},R:{\"388\":\"AD\"},S:{\"513\":\"BD CD\"}},B:1,C:\"Number input type\"};\n/data/regions/VE.js\u0012module.exports={C:{\"2\":0,\"3\":0,\"4\":0.00471,\"5\":0,\"6\":0,\"7\":0,\"8\":0.00471,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0.06595,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0.00471,\"44\":0,\"45\":0.00471,\"46\":0,\"47\":0.00471,\"48\":0,\"49\":0.00471,\"50\":0,\"51\":0,\"52\":0.23555,\"53\":0,\"54\":0.34861,\"55\":0,\"56\":0.00942,\"57\":0,\"58\":0,\"59\":0,\"60\":0.00942,\"61\":0.01884,\"62\":0.00471,\"63\":0,\"64\":0,\"65\":0.00471,\"66\":0.00471,\"67\":0.00471,\"68\":0.01413,\"69\":0,\"70\":0.00471,\"71\":0,\"72\":0.00471,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.01413,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0.00942,\"89\":0.00471,\"90\":0.00471,\"91\":0.00942,\"92\":0,\"93\":0.00471,\"94\":0.00471,\"95\":0.00471,\"96\":0,\"97\":0,\"98\":0.00471,\"99\":0.01413,\"100\":0.00471,\"101\":0.00471,\"102\":0.03298,\"103\":0.00942,\"104\":0.02356,\"105\":0.02356,\"106\":0.02827,\"107\":0.02827,\"108\":0.0424,\"109\":0.75847,\"110\":0.48052,\"111\":0.00471,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0.00471,\"41\":0,\"42\":0.00942,\"43\":0,\"44\":0.00471,\"45\":0,\"46\":0.00471,\"47\":0.00471,\"48\":0,\"49\":0.19786,\"50\":0.00471,\"51\":0,\"52\":0.00471,\"53\":0,\"54\":0,\"55\":0,\"56\":0.00942,\"57\":0,\"58\":0.00471,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0.00942,\"64\":0.00471,\"65\":0.03769,\"66\":0.00942,\"67\":0.00471,\"68\":0.00942,\"69\":0.00471,\"70\":0.00942,\"71\":0.00471,\"72\":0.00471,\"73\":0.01413,\"74\":0.00471,\"75\":0.01413,\"76\":0.01413,\"77\":0.00942,\"78\":0.00471,\"79\":0.02827,\"80\":0.00471,\"81\":0.00942,\"83\":0.02356,\"84\":0.00942,\"85\":0.01884,\"86\":0.01884,\"87\":0.02356,\"88\":0.01884,\"89\":0.00942,\"90\":0.01884,\"91\":0.01884,\"92\":0.01413,\"93\":0.02356,\"94\":0.01884,\"95\":0.01884,\"96\":0.0424,\"97\":0.04711,\"98\":0.05182,\"99\":0.03298,\"100\":0.06124,\"101\":0.04711,\"102\":0.05182,\"103\":0.09893,\"104\":0.0424,\"105\":0.07538,\"106\":0.0848,\"107\":0.13191,\"108\":0.39572,\"109\":8.23483,\"110\":2.83131,\"111\":0.00471,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0.00471,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0.00471,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0.00471,\"64\":0,\"65\":0,\"66\":0,\"67\":0.04711,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0.00471,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0.00942,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0.00471,\"85\":0.00942,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00471,\"93\":0.06595,\"94\":0.4711,\"95\":0.32035,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0.00471,\"13\":0,\"14\":0.00471,\"15\":0.00471,\"16\":0,\"17\":0,\"18\":0.00471,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00471,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0.00471,\"106\":0.00471,\"107\":0.01413,\"108\":0.00942,\"109\":0.39101,\"110\":0.45697},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0.00471,\"15\":0.00942,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0.00471,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0,\"13.1\":0.00942,\"14.1\":0.02356,\"15.1\":0.00471,\"15.2-15.3\":0.00471,\"15.4\":0.00471,\"15.5\":0.00942,\"15.6\":0.06595,\"16.0\":0.01884,\"16.1\":0.02827,\"16.2\":0.03769,\"16.3\":0.03769,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0.00234,\"6.0-6.1\":0.0014,\"7.0-7.1\":0.01403,\"8.1-8.4\":0.01637,\"9.0-9.2\":0.00187,\"9.3\":0.10288,\"10.0-10.2\":0.00281,\"10.3\":0.07856,\"11.0-11.2\":0.00374,\"11.3-11.4\":0.00935,\"12.0-12.1\":0.00748,\"12.2-12.5\":0.32546,\"13.0-13.1\":0.00935,\"13.2\":0.0014,\"13.3\":0.01169,\"13.4-13.7\":0.02665,\"14.0-14.4\":0.06406,\"14.5-14.8\":0.12485,\"15.0-15.1\":0.0304,\"15.2-15.3\":0.04536,\"15.4\":0.05752,\"15.5\":0.09773,\"15.6\":0.31471,\"16.0\":0.47791,\"16.1\":0.86276,\"16.2\":0.97733,\"16.3\":0.58266,\"16.4\":0.00374},P:{\"4\":0.22399,\"20\":0.24532,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0.08533,\"8.2\":0,\"9.2\":0.01067,\"10.1\":0,\"11.1-11.2\":0.02133,\"12.0\":0,\"13.0\":0.032,\"14.0\":0.01067,\"15.0\":0.01067,\"16.0\":0.02133,\"17.0\":0.10666,\"18.0\":0.032,\"19.0\":0.47998},I:{\"0\":0,\"3\":0,\"4\":0.00488,\"2.1\":0,\"2.2\":0,\"2.3\":0.00244,\"4.1\":0.02686,\"4.2-4.3\":0.0415,\"4.4\":0,\"4.4.3-4.4.4\":0.50782},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0.00471,\"10\":0,\"11\":0.02827,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0.00529,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0.00529},O:{\"0\":0.02645},H:{\"0\":0.50073},L:{\"0\":74.1354},R:{_:\"0\"},M:{\"0\":0.12694},Q:{\"13.1\":0}};\n/data/features/filesystem.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"2\":\"C K L G M N O\",\"33\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"2\":\"I w J D\",\"33\":\"0 1 2 3 4 5 6 7 8 9 K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"36\":\"E F A B C\"},E:{\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"2\":\"F B C QC RC SC TC rB BC UC sB\",\"33\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"2\":\"D\",\"33\":\"A\"},K:{\"2\":\"A B C rB BC sB\",\"33\":\"h\"},L:{\"33\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"33\":\"wC\"},P:{\"2\":\"I\",\"33\":\"g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"2\":\"2B\"},R:{\"33\":\"AD\"},S:{\"2\":\"BD CD\"}},B:7,C:\"Filesystem & FileWriter API\"};\n/data/features/svg-filters.js\u0005module.exports={A:{A:{\"1\":\"A B\",\"2\":\"J D E F DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\",\"2\":\"EC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"I\",\"4\":\"w J D\"},E:{\"1\":\"J D E F A B C K L G KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w IC 0B JC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\"},G:{\"1\":\"E XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC CC WC\"},H:{\"1\":\"pC\"},I:{\"1\":\"H uC vC\",\"2\":\"uB I qC rC sC tC CC\"},J:{\"1\":\"A\",\"2\":\"D\"},K:{\"1\":\"A B C h rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:2,C:\"SVG filters\"};\n!/data/features/intrinsic-width.js\u0006module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"2\":\"C K L G M N O\",\"1025\":\"d e i j k l m n o p q r s t u v f H\",\"1537\":\"P Q R S T U V W X Y Z a b c\"},C:{\"2\":\"EC\",\"932\":\"0 1 2 3 4 5 6 7 8 9 uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB FC GC\",\"2308\":\"fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\"},D:{\"2\":\"I w J D E F A B C K L G M N O x g y\",\"545\":\"0 1 2 3 4 5 6 7 8 9 z AB BB CB DB EB FB GB HB IB JB KB LB MB\",\"1025\":\"d e i j k l m n o p q r s t u v f H yB zB HC\",\"1537\":\"NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c\"},E:{\"1\":\"tB 7B 8B 9B AC PC\",\"2\":\"I w J IC 0B JC\",\"516\":\"B C K L G rB sB 2B NC OC 3B 4B 5B 6B\",\"548\":\"F A MC 1B\",\"676\":\"D E KC LC\"},F:{\"2\":\"F B C QC RC SC TC rB BC UC sB\",\"513\":\"BB\",\"545\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z\",\"1025\":\"e\",\"1537\":\"AB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d\"},G:{\"1\":\"tB 7B 8B 9B AC\",\"2\":\"0B VC CC WC XC\",\"516\":\"mC nC oC 3B 4B 5B 6B\",\"548\":\"aC bC cC dC eC fC gC hC iC jC kC lC\",\"676\":\"E YC ZC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I qC rC sC tC CC\",\"545\":\"uC vC\",\"1025\":\"H\"},J:{\"2\":\"D\",\"545\":\"A\"},K:{\"2\":\"A B C rB BC sB\",\"1025\":\"h\"},L:{\"1025\":\"H\"},M:{\"2308\":\"f\"},N:{\"2\":\"A B\"},O:{\"1537\":\"wC\"},P:{\"545\":\"I\",\"1025\":\"g 7C 8C 9C\",\"1537\":\"xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB\"},Q:{\"1537\":\"2B\"},R:{\"1537\":\"AD\"},S:{\"932\":\"BD\",\"2308\":\"CD\"}},B:5,C:\"Intrinsic & Extrinsic Sizing\"};\n/data/features/svg-fonts.js\u0005module.exports={A:{A:{\"2\":\"F A B DC\",\"8\":\"J D E\"},B:{\"2\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB\",\"2\":\"SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"130\":\"FB GB HB IB JB KB LB MB NB OB PB QB RB\"},E:{\"1\":\"I w J D E F A B C K L G 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"IC\"},F:{\"1\":\"0 1 F B C G M N O x g y z QC RC SC TC rB BC UC sB\",\"2\":\"EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"130\":\"2 3 4 5 6 7 8 9 AB BB CB DB\"},G:{\"1\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"258\":\"pC\"},I:{\"1\":\"uB I tC CC uC vC\",\"2\":\"H qC rC sC\"},J:{\"1\":\"D A\"},K:{\"1\":\"A B C rB BC sB\",\"2\":\"h\"},L:{\"130\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"1\":\"I\",\"130\":\"g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"2\":\"2B\"},R:{\"130\":\"AD\"},S:{\"2\":\"BD CD\"}},B:2,C:\"SVG fonts\"};\n/data/regions/GY.js\u0010module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0.00365,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0.01095,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0.01095,\"108\":0.00365,\"109\":0.1934,\"110\":0.10217,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.0073,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0.00365,\"64\":0,\"65\":0,\"66\":0.00365,\"67\":0,\"68\":0,\"69\":0.0073,\"70\":0,\"71\":0,\"72\":0,\"73\":0.00365,\"74\":0.00365,\"75\":0.0073,\"76\":0.02189,\"77\":0.00365,\"78\":0,\"79\":0.04014,\"80\":0,\"81\":0.01825,\"83\":0.0073,\"84\":0.00365,\"85\":0,\"86\":0.00365,\"87\":0.0146,\"88\":0.00365,\"89\":0,\"90\":0,\"91\":0.01095,\"92\":0.0073,\"93\":0.10947,\"94\":0.00365,\"95\":0,\"96\":0.01095,\"97\":0.00365,\"98\":0.00365,\"99\":0.00365,\"100\":0.0073,\"101\":0.00365,\"102\":0.01095,\"103\":0.21529,\"104\":0.01095,\"105\":0.06568,\"106\":0.0146,\"107\":0.04379,\"108\":0.25543,\"109\":4.0066,\"110\":2.44118,\"111\":0.00365,\"112\":0.00365,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0.0073,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.02919,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0.00365,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.00365,\"94\":0.10947,\"95\":0.09487,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0.00365,\"14\":0,\"15\":0.00365,\"16\":0.00365,\"17\":0,\"18\":0.01095,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00365,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0.00365,\"102\":0.00365,\"103\":0,\"104\":0,\"105\":0.0073,\"106\":0.02189,\"107\":0.02919,\"108\":0.02919,\"109\":1.00712,\"110\":1.32094},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.00365,\"14\":0.0073,\"15\":0,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0.0073,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0,\"13.1\":0.05838,\"14.1\":0.02919,\"15.1\":0.00365,\"15.2-15.3\":0,\"15.4\":0.0073,\"15.5\":0.06933,\"15.6\":0.12042,\"16.0\":0.01095,\"16.1\":0.04014,\"16.2\":0.14596,\"16.3\":0.21894,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0.03942,\"6.0-6.1\":0.04397,\"7.0-7.1\":0.23653,\"8.1-8.4\":0,\"9.0-9.2\":0.00152,\"9.3\":0.11978,\"10.0-10.2\":0,\"10.3\":0.03032,\"11.0-11.2\":0.01213,\"11.3-11.4\":0.00455,\"12.0-12.1\":0.00606,\"12.2-12.5\":0.32447,\"13.0-13.1\":0,\"13.2\":0,\"13.3\":0.01668,\"13.4-13.7\":0.06975,\"14.0-14.4\":0.08794,\"14.5-14.8\":0.28656,\"15.0-15.1\":0.08642,\"15.2-15.3\":0.13191,\"15.4\":0.10613,\"15.5\":0.24108,\"15.6\":1.1599,\"16.0\":1.216,\"16.1\":2.46688,\"16.2\":3.78144,\"16.3\":2.04234,\"16.4\":0.01365},P:{\"4\":0.35914,\"20\":1.54219,\"5.0-5.4\":0.02113,\"6.2-6.4\":0,\"7.2-7.4\":0.3697,\"8.2\":0,\"9.2\":0.02113,\"10.1\":0,\"11.1-11.2\":0.09507,\"12.0\":0.01056,\"13.0\":0.03169,\"14.0\":0.02113,\"15.0\":0.15844,\"16.0\":0.13732,\"17.0\":0.38027,\"18.0\":0.12676,\"19.0\":2.80974},I:{\"0\":0,\"3\":0,\"4\":0.13989,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0,\"4.4\":0,\"4.4.3-4.4.4\":1.06319},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0.00365,\"11\":0.0073,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.37471},H:{\"0\":0.33671},L:{\"0\":65.53124},R:{_:\"0\"},M:{\"0\":0.10797},Q:{\"13.1\":0.01905}};\n)/data/features/css-overscroll-behavior.js\u0006\u0004module.exports={A:{A:{\"2\":\"J D E F DC\",\"132\":\"A B\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"132\":\"C K L G M N\",\"516\":\"O\"},C:{\"1\":\"vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB FC GC\"},D:{\"1\":\"eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB\",\"260\":\"cB dB\"},E:{\"1\":\"tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A B C K L IC 0B JC KC LC MC 1B rB sB 2B\",\"1090\":\"G NC OC 3B 4B 5B 6B\"},F:{\"1\":\"TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB QC RC SC TC rB BC UC sB\",\"260\":\"RB SB\"},G:{\"1\":\"tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC\",\"1090\":\"nC oC 3B 4B 5B 6B\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"132\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I xC yC zC\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"2\":\"BD\"}},B:5,C:\"CSS overscroll-behavior\"};\n-/data/features/url-scroll-to-text-fragment.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\",\"66\":\"P Q R\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"1\":\"R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h\",\"66\":\"mB nB oB pB qB P Q\"},E:{\"1\":\"7B 8B 9B AC PC\",\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB\"},F:{\"1\":\"hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB QC RC SC TC rB BC UC sB\",\"66\":\"fB gB\"},G:{\"1\":\"7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"1\":\"g 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I xC yC zC 0C 1C 1B 2C 3C\"},Q:{\"2\":\"2B\"},R:{\"1\":\"AD\"},S:{\"2\":\"BD CD\"}},B:7,C:\"URL Scroll-To-Text Fragment\"};\n/data/features/shadowdom.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P\",\"2\":\"C K L G M N O Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"2\":\"0 1 2 3 4 5 EC uB I w J D E F A B C K L G M N O x g y z wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\",\"66\":\"6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB\"},D:{\"1\":\"CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P\",\"2\":\"0 1 I w J D E F A B C K L G M N O x g y z Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"33\":\"2 3 4 5 6 7 8 9 AB BB\"},E:{\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB\",\"2\":\"F B C gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\",\"33\":\"G M N O x g y\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I H qC rC sC tC CC\",\"33\":\"uC vC\"},J:{\"2\":\"D A\"},K:{\"2\":\"A B C h rB BC sB\"},L:{\"2\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"xC yC zC 0C 1C 1B 2C 3C\",\"2\":\"g 4C 5C 6C tB 7C 8C 9C\",\"33\":\"I\"},Q:{\"1\":\"2B\"},R:{\"2\":\"AD\"},S:{\"1\":\"BD\",\"2\":\"CD\"}},B:7,C:\"Shadow DOM (deprecated V0 spec)\"};\n/data/features/wasm.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L\",\"578\":\"G\"},C:{\"1\":\"UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB FC GC\",\"194\":\"OB PB QB RB SB\",\"1025\":\"TB\"},D:{\"1\":\"YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB\",\"322\":\"SB TB UB VB WB XB\"},E:{\"1\":\"B C K L G rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A IC 0B JC KC LC MC 1B\"},F:{\"1\":\"LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB QC RC SC TC rB BC UC sB\",\"322\":\"FB GB HB IB JB KB\"},G:{\"1\":\"eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I xC yC\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"194\":\"BD\"}},B:6,C:\"WebAssembly\"};\n/data/features/webgpu.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"2\":\"C K L G M N O P\",\"578\":\"Q R S T U V W X Y Z a b c\",\"1602\":\"d e i j k l m n o p q r s t u v f H\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB FC GC\",\"194\":\"cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\"},D:{\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P\",\"578\":\"Q R S T U V W X Y Z a b c\",\"1602\":\"d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"2\":\"I w J D E F A B IC 0B JC KC LC MC 1B\",\"322\":\"C K L G rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB QC RC SC TC rB BC UC sB\",\"578\":\"h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"2\":\"A B C h rB BC sB\"},L:{\"2\":\"H\"},M:{\"194\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"2\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"2\":\"2B\"},R:{\"2\":\"AD\"},S:{\"2\":\"BD\",\"194\":\"CD\"}},B:5,C:\"WebGPU\"};\n/data/regions/KM.js\u0010module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.00236,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0.00236,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0.00709,\"82\":0,\"83\":0.00236,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0.00709,\"95\":0,\"96\":0.00236,\"97\":0,\"98\":0,\"99\":0.00709,\"100\":0,\"101\":0,\"102\":0.00473,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0,\"108\":0.00709,\"109\":0.31205,\"110\":0.25531,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0.00236,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0.00236,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0.00236,\"50\":0,\"51\":0,\"52\":0.01418,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0.00236,\"66\":0,\"67\":0,\"68\":0,\"69\":0.00473,\"70\":0.00473,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0.00473,\"76\":0,\"77\":0.00473,\"78\":0,\"79\":0.00236,\"80\":0.00709,\"81\":0.00473,\"83\":0.01655,\"84\":0.00236,\"85\":0,\"86\":0,\"87\":0.00946,\"88\":0.01418,\"89\":0,\"90\":0,\"91\":0.00236,\"92\":0,\"93\":0.00473,\"94\":0,\"95\":0.00473,\"96\":0.00473,\"97\":0.06383,\"98\":0,\"99\":0.00236,\"100\":0.00946,\"101\":0,\"102\":0.00473,\"103\":0.05201,\"104\":0.00236,\"105\":0.01418,\"106\":0.00709,\"107\":0.02364,\"108\":0.026,\"109\":1.46095,\"110\":0.4137,\"111\":0,\"112\":0.00236,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0.00236,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0.00473,\"62\":0,\"63\":0.01891,\"64\":0.00236,\"65\":0.01182,\"66\":0.00473,\"67\":0.05201,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0.00236,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0.03782,\"95\":0.07565,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0.00473,\"13\":0,\"14\":0.00236,\"15\":0,\"16\":0,\"17\":0.00473,\"18\":0,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0.00236,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00709,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0.00236,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0.06146,\"108\":0.00473,\"109\":0.11111,\"110\":0.26713},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0.00473,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0.00709,\"13.1\":0.01182,\"14.1\":0.01182,\"15.1\":0,\"15.2-15.3\":0,\"15.4\":0,\"15.5\":0,\"15.6\":0.04255,\"16.0\":0,\"16.1\":0.01418,\"16.2\":0.0331,\"16.3\":0.03546,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0.0236,\"7.0-7.1\":0.03021,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0.03682,\"10.0-10.2\":0,\"10.3\":0.01039,\"11.0-11.2\":0.0236,\"11.3-11.4\":0,\"12.0-12.1\":0.11897,\"12.2-12.5\":1.0386,\"13.0-13.1\":0.01039,\"13.2\":0,\"13.3\":0.04626,\"13.4-13.7\":0.05004,\"14.0-14.4\":1.63532,\"14.5-14.8\":0.36068,\"15.0-15.1\":0.14918,\"15.2-15.3\":0.21905,\"15.4\":0.20866,\"15.5\":0.12935,\"15.6\":0.74779,\"16.0\":0.3569,\"16.1\":1.84871,\"16.2\":0.46926,\"16.3\":0.86676,\"16.4\":0},P:{\"4\":0.38293,\"20\":0.16123,\"5.0-5.4\":0.03023,\"6.2-6.4\":0.01008,\"7.2-7.4\":0.21162,\"8.2\":0,\"9.2\":0.07054,\"10.1\":0,\"11.1-11.2\":0.28216,\"12.0\":0,\"13.0\":0.02015,\"14.0\":0.21162,\"15.0\":0.02015,\"16.0\":0.10077,\"17.0\":0.524,\"18.0\":0.10077,\"19.0\":0.33254},I:{\"0\":0,\"3\":0,\"4\":0.00058,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.00116,\"4.2-4.3\":0,\"4.4\":0,\"4.4.3-4.4.4\":0.05007},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.00709,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0.084,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.22908},H:{\"0\":0.86751},L:{\"0\":83.32929},R:{_:\"0\"},M:{\"0\":0.04582},Q:{\"13.1\":0}};\n/data/regions/ZM.js\u0012Omodule.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0.00268,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0.00268,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0.00268,\"100\":0,\"101\":0,\"102\":0.01073,\"103\":0.00268,\"104\":0.00268,\"105\":0,\"106\":0.00268,\"107\":0.00268,\"108\":0.00805,\"109\":0.14483,\"110\":0.09923,\"111\":0.00536,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.00268,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0.00268,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0.00268,\"54\":0,\"55\":0.00268,\"56\":0,\"57\":0,\"58\":0.00268,\"59\":0.00268,\"60\":0,\"61\":0,\"62\":0,\"63\":0.00268,\"64\":0.00268,\"65\":0,\"66\":0,\"67\":0,\"68\":0.00268,\"69\":0.00268,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0.00268,\"75\":0.00268,\"76\":0.00268,\"77\":0.00268,\"78\":0.01341,\"79\":0.00268,\"80\":0.00268,\"81\":0.00805,\"83\":0.00268,\"84\":0.00268,\"85\":0.00268,\"86\":0.00268,\"87\":0.00536,\"88\":0.00536,\"89\":0,\"90\":0.00268,\"91\":0,\"92\":0.00536,\"93\":0.00268,\"94\":0,\"95\":0.00536,\"96\":0.00536,\"97\":0.00268,\"98\":0.00268,\"99\":0.00536,\"100\":0.00268,\"101\":0.00805,\"102\":0.02146,\"103\":0.03755,\"104\":0.01073,\"105\":0.01341,\"106\":0.01341,\"107\":0.02682,\"108\":0.1046,\"109\":1.72721,\"110\":0.94406,\"111\":0.00268,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0.00268,\"25\":0,\"26\":0.00268,\"27\":0,\"28\":0.00536,\"29\":0,\"30\":0.00268,\"31\":0,\"32\":0.00268,\"33\":0,\"34\":0,\"35\":0.02682,\"36\":0,\"37\":0.00805,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0.00536,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0.00805,\"48\":0,\"49\":0,\"50\":0.01073,\"51\":0.07778,\"52\":0,\"53\":0,\"54\":0.00268,\"55\":0.00268,\"56\":0,\"57\":0.00536,\"58\":0.01073,\"60\":0.14215,\"62\":0,\"63\":0.16897,\"64\":0.06973,\"65\":0.04559,\"66\":0.22529,\"67\":0.51763,\"68\":0.00268,\"69\":0,\"70\":0,\"71\":0,\"72\":0.00536,\"73\":0.01609,\"74\":0.00268,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0.00805,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0.00268,\"91\":0,\"92\":0,\"93\":0.00268,\"94\":0.14215,\"95\":0.2092,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0.00268,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0.01877},B:{\"12\":0.01609,\"13\":0.00536,\"14\":0.00268,\"15\":0.00805,\"16\":0.00268,\"17\":0.00536,\"18\":0.02146,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0.00268,\"85\":0.00268,\"86\":0.00268,\"87\":0,\"88\":0,\"89\":0.00805,\"90\":0.00536,\"91\":0,\"92\":0.01877,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0.00268,\"101\":0.00268,\"102\":0,\"103\":0.00536,\"104\":0.00268,\"105\":0.00805,\"106\":0.00536,\"107\":0.02414,\"108\":0.03755,\"109\":0.33793,\"110\":0.39157},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0.00268,\"15\":0,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0.00536,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0.00268,\"13.1\":0.00805,\"14.1\":0.01341,\"15.1\":0,\"15.2-15.3\":0,\"15.4\":0.00268,\"15.5\":0.01073,\"15.6\":0.02414,\"16.0\":0.00268,\"16.1\":0.01073,\"16.2\":0.01073,\"16.3\":0.01609,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0.00104,\"4.2-4.3\":0.00104,\"5.0-5.1\":0.00208,\"6.0-6.1\":0,\"7.0-7.1\":0.01662,\"8.1-8.4\":0.00104,\"9.0-9.2\":0.00104,\"9.3\":0.05298,\"10.0-10.2\":0,\"10.3\":0.04571,\"11.0-11.2\":0.01662,\"11.3-11.4\":0.00519,\"12.0-12.1\":0.03116,\"12.2-12.5\":1.85113,\"13.0-13.1\":0.02389,\"13.2\":0.00623,\"13.3\":0.02493,\"13.4-13.7\":0.13504,\"14.0-14.4\":0.37604,\"14.5-14.8\":0.42591,\"15.0-15.1\":0.44564,\"15.2-15.3\":0.25554,\"15.4\":0.24931,\"15.5\":0.36981,\"15.6\":0.71677,\"16.0\":0.76767,\"16.1\":1.28084,\"16.2\":1.03464,\"16.3\":0.97439,\"16.4\":0.00416},P:{\"4\":0.12458,\"20\":0.40487,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0.12458,\"8.2\":0,\"9.2\":0.02076,\"10.1\":0,\"11.1-11.2\":0.03114,\"12.0\":0,\"13.0\":0.06229,\"14.0\":0.01038,\"15.0\":0.01038,\"16.0\":0.05191,\"17.0\":0.04153,\"18.0\":0.09343,\"19.0\":0.80975},I:{\"0\":0,\"3\":0,\"4\":0.00225,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.0054,\"4.2-4.3\":0.00405,\"4.4\":0,\"4.4.3-4.4.4\":0.15781},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0.00298,\"11\":0.02384,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0.01464,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0.00732},O:{\"0\":2.04904},H:{\"0\":11.81953},L:{\"0\":64.50685},R:{_:\"0\"},M:{\"0\":0.10977},Q:{\"13.1\":0.00732}};\n/data/regions/PT.js\u0011Imodule.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0.00604,\"49\":0,\"50\":0,\"51\":0,\"52\":0.02416,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0.00604,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.01812,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0.00604,\"84\":0,\"85\":0,\"86\":0,\"87\":0.00604,\"88\":0.00604,\"89\":0,\"90\":0,\"91\":0.01208,\"92\":0,\"93\":0,\"94\":0,\"95\":0.00604,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0.00604,\"101\":0,\"102\":0.0302,\"103\":0.00604,\"104\":0.00604,\"105\":0.00604,\"106\":0.00604,\"107\":0.00604,\"108\":0.05435,\"109\":0.9904,\"110\":0.65825,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0.00604,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0.0302,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0.01208,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0.00604,\"77\":0.00604,\"78\":0.00604,\"79\":0.02416,\"80\":0.00604,\"81\":0.00604,\"83\":0,\"84\":0.01208,\"85\":0.02416,\"86\":0.01208,\"87\":0.02416,\"88\":0.01208,\"89\":0.03623,\"90\":0.01208,\"91\":0.03623,\"92\":0.01208,\"93\":0.02416,\"94\":0.00604,\"95\":0.01208,\"96\":0.01208,\"97\":0.01208,\"98\":0.01812,\"99\":0.01208,\"100\":0.02416,\"101\":0.06643,\"102\":0.01812,\"103\":0.08455,\"104\":0.02416,\"105\":0.06039,\"106\":0.04831,\"107\":0.07247,\"108\":0.37442,\"109\":13.80515,\"110\":8.69012,\"111\":0.01208,\"112\":0.00604,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.01812,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0.00604,\"85\":0.00604,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.27779,\"94\":2.3069,\"95\":0.60994,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0.00604,\"15\":0,\"16\":0,\"17\":0,\"18\":0.00604,\"79\":0,\"80\":0.00604,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0.00604,\"90\":0,\"91\":0,\"92\":0.00604,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0.00604,\"103\":0.00604,\"104\":0.00604,\"105\":0.00604,\"106\":0.00604,\"107\":0.02416,\"108\":0.06643,\"109\":1.96871,\"110\":2.46391},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.00604,\"14\":0.04227,\"15\":0.01208,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0.00604,\"12.1\":0.01208,\"13.1\":0.07247,\"14.1\":0.13286,\"15.1\":0.01208,\"15.2-15.3\":0.0302,\"15.4\":0.0302,\"15.5\":0.09059,\"15.6\":0.31403,\"16.0\":0.06039,\"16.1\":0.16909,\"16.2\":0.45293,\"16.3\":0.32611,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0,\"8.1-8.4\":0.00568,\"9.0-9.2\":0,\"9.3\":0.07765,\"10.0-10.2\":0,\"10.3\":0.0909,\"11.0-11.2\":0.00568,\"11.3-11.4\":0.00947,\"12.0-12.1\":0.01515,\"12.2-12.5\":0.38444,\"13.0-13.1\":0.00379,\"13.2\":0.00568,\"13.3\":0.01326,\"13.4-13.7\":0.04924,\"14.0-14.4\":0.14771,\"14.5-14.8\":0.44504,\"15.0-15.1\":0.10416,\"15.2-15.3\":0.1231,\"15.4\":0.14393,\"15.5\":0.36171,\"15.6\":1.3105,\"16.0\":2.193,\"16.1\":4.42766,\"16.2\":4.65302,\"16.3\":3.27624,\"16.4\":0.02841},P:{\"4\":0.06233,\"20\":0.64413,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0,\"8.2\":0,\"9.2\":0,\"10.1\":0,\"11.1-11.2\":0.01039,\"12.0\":0.01039,\"13.0\":0.01039,\"14.0\":0.01039,\"15.0\":0,\"16.0\":0.02078,\"17.0\":0.01039,\"18.0\":0.02078,\"19.0\":1.01814},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.00716,\"4.2-4.3\":0.02147,\"4.4\":0,\"4.4.3-4.4.4\":0.15742},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.1087,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.1426},H:{\"0\":0.22875},L:{\"0\":41.76835},R:{_:\"0\"},M:{\"0\":0.17825},Q:{\"13.1\":0}};\n/data/features/geolocation.js\u0006\u0010module.exports={A:{A:{\"1\":\"F A B\",\"2\":\"DC\",\"8\":\"J D E\"},B:{\"1\":\"C K L G M N O\",\"129\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB FC GC\",\"8\":\"EC uB\",\"129\":\"WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB\",\"4\":\"I\",\"129\":\"RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"w J D E F B C K L G JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"8\":\"I IC 0B\",\"129\":\"A\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 B C M N O x g y z AB BB CB DB EB FB TC rB BC UC sB\",\"2\":\"F G QC\",\"8\":\"RC SC\",\"129\":\"GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\"},G:{\"1\":\"E 0B VC CC WC XC YC ZC aC bC\",\"129\":\"cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"1\":\"uB I qC rC sC tC CC uC vC\",\"129\":\"H\"},J:{\"1\":\"D A\"},K:{\"1\":\"B C rB BC sB\",\"8\":\"A\",\"129\":\"h\"},L:{\"129\":\"H\"},M:{\"129\":\"f\"},N:{\"1\":\"A B\"},O:{\"129\":\"wC\"},P:{\"1\":\"I\",\"129\":\"g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"129\":\"2B\"},R:{\"129\":\"AD\"},S:{\"1\":\"BD\",\"129\":\"CD\"}},B:2,C:\"Geolocation\"};\n /data/features/css-gencontent.js\u0005module.exports={A:{A:{\"1\":\"F A B\",\"2\":\"J D DC\",\"132\":\"E\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\"},G:{\"1\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"1\":\"pC\"},I:{\"1\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"1\":\"D A\"},K:{\"1\":\"A B C h rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:2,C:\"CSS Generated content for pseudo-elements\"};\n%/data/features/link-rel-preconnect.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L\",\"260\":\"G M N O\"},C:{\"1\":\"HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\",\"129\":\"GB\"},D:{\"1\":\"NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB\"},E:{\"1\":\"C K L G rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A B IC 0B JC KC LC MC 1B\"},F:{\"1\":\"AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z QC RC SC TC rB BC UC sB\"},G:{\"1\":\"fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"16\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:5,C:\"Resource Hints: preconnect\"};\n\"/data/features/css-text-spacing.js\u0005module.exports={A:{A:{\"2\":\"J D DC\",\"161\":\"E F A B\"},B:{\"2\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"161\":\"C K L G M N O\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"2\":\"A B C h rB BC sB\"},L:{\"2\":\"H\"},M:{\"2\":\"f\"},N:{\"16\":\"A B\"},O:{\"2\":\"wC\"},P:{\"2\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"2\":\"2B\"},R:{\"2\":\"AD\"},S:{\"2\":\"BD CD\"}},B:5,C:\"CSS Text 4 text-spacing\"};\n\"/data/features/css-focus-within.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"1\":\"TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB FC GC\"},D:{\"1\":\"aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB\",\"194\":\"vB\"},E:{\"1\":\"B C K L G 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A IC 0B JC KC LC MC\"},F:{\"1\":\"OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB QC RC SC TC rB BC UC sB\",\"194\":\"NB\"},G:{\"1\":\"dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I xC yC zC\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"2\":\"BD\"}},B:7,C:\":focus-within CSS pseudo-class\"};\n/data/regions/BO.js\u0012\u001fmodule.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.01578,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0.00395,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0.00395,\"69\":0,\"70\":0,\"71\":0,\"72\":0.00789,\"73\":0.00395,\"74\":0,\"75\":0.00395,\"76\":0,\"77\":0.00395,\"78\":0.00395,\"79\":0.00395,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0.00395,\"89\":0,\"90\":0,\"91\":0.00395,\"92\":0,\"93\":0.00395,\"94\":0.00395,\"95\":0.00395,\"96\":0,\"97\":0,\"98\":0.00395,\"99\":0.00789,\"100\":0.00395,\"101\":0.00395,\"102\":0.01578,\"103\":0.00395,\"104\":0.01184,\"105\":0.00395,\"106\":0.01973,\"107\":0.00789,\"108\":0.02762,\"109\":0.5523,\"110\":0.33927,\"111\":0.00395,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0.00789,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0.00395,\"44\":0.00395,\"45\":0.00395,\"46\":0,\"47\":0.00395,\"48\":0,\"49\":0.00789,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0.00395,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0.01184,\"69\":0.00395,\"70\":0.00789,\"71\":0,\"72\":0.00395,\"73\":0,\"74\":0.00395,\"75\":0.00395,\"76\":0.00395,\"77\":0,\"78\":0.00789,\"79\":0.05918,\"80\":0.01184,\"81\":0.00789,\"83\":0.00789,\"84\":0.01184,\"85\":0.01578,\"86\":0.00789,\"87\":0.02762,\"88\":0.00789,\"89\":0.00789,\"90\":0.00395,\"91\":0.5168,\"92\":0.01973,\"93\":0.00395,\"94\":0.00789,\"95\":0.00789,\"96\":0.01578,\"97\":0.01578,\"98\":0.01184,\"99\":0.00789,\"100\":0.01973,\"101\":0.01578,\"102\":0.01578,\"103\":0.05129,\"104\":0.02762,\"105\":0.02367,\"106\":0.02762,\"107\":0.05918,\"108\":0.32744,\"109\":6.65522,\"110\":3.54656,\"111\":0.00395,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0.00789,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.03551,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0.00395,\"73\":0,\"74\":0.00789,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0.00395,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.05129,\"94\":0.41817,\"95\":0.19725,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0.00395,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0.01184,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0.00395,\"85\":0,\"86\":0.00395,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00395,\"93\":0,\"94\":0,\"95\":0,\"96\":0.00395,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0.00395,\"102\":0,\"103\":0.00395,\"104\":0,\"105\":0.00789,\"106\":0.00395,\"107\":0.00789,\"108\":0.00789,\"109\":0.3156,\"110\":0.41817},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0.00395,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0.00395,\"15\":0,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0.00395,\"6.1\":0,\"7.1\":0,\"9.1\":0.00395,\"10.1\":0,\"11.1\":0,\"12.1\":0,\"13.1\":0.00789,\"14.1\":0.01973,\"15.1\":0.00395,\"15.2-15.3\":0.00395,\"15.4\":0.00395,\"15.5\":0.01973,\"15.6\":0.03156,\"16.0\":0.00395,\"16.1\":0.01578,\"16.2\":0.0434,\"16.3\":0.05129,\"16.4\":0},G:{\"8\":0.00054,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0.00054,\"5.0-5.1\":0.00434,\"6.0-6.1\":0.01138,\"7.0-7.1\":0.01626,\"8.1-8.4\":0.01301,\"9.0-9.2\":0.00542,\"9.3\":0.0271,\"10.0-10.2\":0.00108,\"10.3\":0.0103,\"11.0-11.2\":0.0168,\"11.3-11.4\":0.00759,\"12.0-12.1\":0.00542,\"12.2-12.5\":0.17671,\"13.0-13.1\":0.00163,\"13.2\":0.00108,\"13.3\":0.00434,\"13.4-13.7\":0.02927,\"14.0-14.4\":0.06179,\"14.5-14.8\":0.13226,\"15.0-15.1\":0.02222,\"15.2-15.3\":0.10245,\"15.4\":0.04607,\"15.5\":0.12467,\"15.6\":0.37238,\"16.0\":0.61901,\"16.1\":1.17569,\"16.2\":1.23748,\"16.3\":0.76374,\"16.4\":0.00163},P:{\"4\":0.32715,\"20\":0.64408,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0.39871,\"8.2\":0.01022,\"9.2\":0.02045,\"10.1\":0,\"11.1-11.2\":0.09201,\"12.0\":0.02045,\"13.0\":0.07156,\"14.0\":0.05112,\"15.0\":0.06134,\"16.0\":0.12268,\"17.0\":0.14313,\"18.0\":0.1329,\"19.0\":1.34949},I:{\"0\":0,\"3\":0,\"4\":0.00636,\"2.1\":0,\"2.2\":0,\"2.3\":0.00318,\"4.1\":0.00636,\"4.2-4.3\":0.01907,\"4.4\":0,\"4.4.3-4.4.4\":0.20026},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0.01282,\"9\":0.00427,\"10\":0.00427,\"11\":0.02992,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.21193},H:{\"0\":0.38981},L:{\"0\":73.58031},R:{_:\"0\"},M:{\"0\":0.15743},Q:{\"13.1\":0}};\n#/data/features/css-marker-pseudo.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O P Q R S T U\"},C:{\"1\":\"hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB FC GC\"},D:{\"1\":\"V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U\"},E:{\"1\":\"PC\",\"2\":\"I w J D E F A B IC 0B JC KC LC MC 1B\",\"129\":\"C K L G rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC\"},F:{\"1\":\"lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB QC RC SC TC rB BC UC sB\"},G:{\"1\":\"fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"1\":\"g 5C 6C tB 7C 8C 9C\",\"2\":\"I xC yC zC 0C 1C 1B 2C 3C 4C\"},Q:{\"2\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"2\":\"BD\"}},B:5,C:\"CSS ::marker pseudo-element\"};\n/data/features/canvas-text.js\u0005module.exports={A:{A:{\"1\":\"F A B\",\"2\":\"DC\",\"8\":\"J D E\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\",\"8\":\"EC uB\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"I w J D E F A B C K L G JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"8\":\"IC 0B\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e SC TC rB BC UC sB\",\"8\":\"F QC RC\"},G:{\"1\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"1\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"1\":\"D A\"},K:{\"1\":\"B C h rB BC sB\",\"8\":\"A\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:1,C:\"Text API for Canvas\"};\n/data/features/text-emphasis.js\u0006\u0006module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\",\"164\":\"P Q R S T U V W X Y Z a b c d e i j k\"},C:{\"1\":\"NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB FC GC\",\"322\":\"MB\"},D:{\"1\":\"l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 I w J D E F A B C K L G M N O x g y z\",\"164\":\"2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k\"},E:{\"1\":\"E F A B C K L G LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J IC 0B JC\",\"164\":\"D KC\"},F:{\"1\":\"V W X Y Z a b c d e\",\"2\":\"F B C QC RC SC TC rB BC UC sB\",\"164\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U\"},G:{\"1\":\"E YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC CC WC XC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC\",\"164\":\"uC vC\"},J:{\"2\":\"D\",\"164\":\"A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"164\":\"wC\"},P:{\"1\":\"g 8C 9C\",\"164\":\"I xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C\"},Q:{\"164\":\"2B\"},R:{\"164\":\"AD\"},S:{\"1\":\"BD CD\"}},B:4,C:\"text-emphasis styling\"};\n!/data/features/css-containment.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"1\":\"iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB FC GC\",\"194\":\"IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB\"},D:{\"1\":\"TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB\",\"66\":\"SB\"},E:{\"1\":\"4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B\"},F:{\"1\":\"HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB QC RC SC TC rB BC UC sB\",\"66\":\"FB GB\"},G:{\"1\":\"4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I xC\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"194\":\"BD\"}},B:2,C:\"CSS Containment\"};\n/data/regions/VI.js\u000bgmodule.exports={C:{\"78\":0.10454,\"91\":0.00581,\"102\":0.00581,\"107\":0.00581,\"108\":0.2207,\"109\":5.5176,\"110\":0.85378,_:\"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 79 80 81 82 83 84 85 86 87 88 89 90 92 93 94 95 96 97 98 99 100 101 103 104 105 106 111 112 3.5 3.6\"},D:{\"75\":0.78989,\"76\":0.11616,\"79\":0.02323,\"81\":0.00581,\"83\":0.02323,\"87\":0.08712,\"88\":0.02323,\"93\":0.18005,\"94\":0.01162,\"95\":0.04066,\"99\":0.01162,\"100\":0.01162,\"101\":0.03485,\"102\":1.07448,\"103\":0.17424,\"104\":0.02323,\"105\":0.35429,\"106\":0.02904,\"107\":0.08712,\"108\":2.01538,\"109\":12.90538,\"110\":7.30646,_:\"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 77 78 80 84 85 86 89 90 91 92 96 97 98 111 112 113\"},F:{\"93\":0.05227,\"94\":0.22651,\"95\":0.08712,_:\"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1\",\"10.0-10.1\":0},B:{\"89\":0.01162,\"103\":0.02904,\"104\":0.13358,\"105\":0.01162,\"106\":0.04646,\"107\":0.02904,\"108\":0.1452,\"109\":4.12368,\"110\":8.26478,_:\"12 13 14 15 16 17 18 79 80 81 83 84 85 86 87 88 90 91 92 93 94 95 96 97 98 99 100 101 102\"},E:{\"4\":0,\"13\":0.01742,\"14\":0.19166,\"15\":0.06389,_:\"0 5 6 7 8 9 10 11 12 3.1 3.2 5.1 6.1 7.1 9.1 10.1 11.1 16.4\",\"12.1\":0.02323,\"13.1\":0.34267,\"14.1\":0.57499,\"15.1\":0.37171,\"15.2-15.3\":0.12778,\"15.4\":0.11616,\"15.5\":1.58558,\"15.6\":2.06184,\"16.0\":0.15682,\"16.1\":0.48206,\"16.2\":3.53707,\"16.3\":1.62043},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0,\"10.0-10.2\":0,\"10.3\":0.05498,\"11.0-11.2\":0.00239,\"11.3-11.4\":0.00956,\"12.0-12.1\":0.00239,\"12.2-12.5\":0.32034,\"13.0-13.1\":0,\"13.2\":0,\"13.3\":0,\"13.4-13.7\":0.04303,\"14.0-14.4\":0.05498,\"14.5-14.8\":0.5594,\"15.0-15.1\":0.08367,\"15.2-15.3\":0.1267,\"15.4\":0.16734,\"15.5\":0.34903,\"15.6\":2.51971,\"16.0\":1.74993,\"16.1\":7.49458,\"16.2\":6.07934,\"16.3\":3.50464,\"16.4\":0.01912},P:{\"4\":0.06522,\"20\":0.72829,\"5.0-5.4\":0.04075,\"6.2-6.4\":0.08151,\"7.2-7.4\":0.60112,\"8.2\":0.01016,\"9.2\":0.04075,\"10.1\":0.01011,\"11.1-11.2\":0.14264,\"12.0\":0.04075,\"13.0\":0.12226,\"14.0\":0.01087,\"15.0\":0.08151,\"16.0\":0.04348,\"17.0\":0.26088,\"18.0\":0.03261,\"19.0\":1.15222},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0,\"4.4\":0,\"4.4.3-4.4.4\":0.01677},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"11\":0.04066,_:\"6 7 8 9 10 5.5\"},N:{\"10\":0.03712,\"11\":0.07423},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.00419},H:{\"0\":0.01985},L:{\"0\":16.57858},R:{_:\"0\"},M:{\"0\":0.81344},Q:{\"13.1\":0}};\n\"/data/features/user-select-none.js\u0005module.exports={A:{A:{\"2\":\"J D E F DC\",\"33\":\"A B\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"33\":\"C K L G M N O\"},C:{\"1\":\"iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"33\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB FC GC\"},D:{\"1\":\"VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"33\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB\"},E:{\"1\":\"PC\",\"33\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC\"},F:{\"1\":\"IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F B C QC RC SC TC rB BC UC sB\",\"33\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB\"},G:{\"33\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"33\":\"uB I qC rC sC tC CC uC vC\"},J:{\"33\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"33\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"33\":\"I xC\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"33\":\"BD\"}},B:5,C:\"CSS user-select: none\"};\n/data/regions/TV.js\u000emodule.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0.01755,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0.01755,\"104\":0,\"105\":0,\"106\":0,\"107\":0,\"108\":0,\"109\":0.28329,\"110\":0,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0.03259,\"104\":0,\"105\":0,\"106\":0.05014,\"107\":0,\"108\":0.06769,\"109\":2.59224,\"110\":1.11311,\"111\":0,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0.01755,\"108\":0.01755,\"109\":0.08273,\"110\":0.34847},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.03259,\"14\":0,\"15\":0,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0,\"13.1\":0,\"14.1\":0.01755,\"15.1\":0,\"15.2-15.3\":0,\"15.4\":0,\"15.5\":0,\"15.6\":0.05014,\"16.0\":0.03259,\"16.1\":0.05014,\"16.2\":0,\"16.3\":0,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0,\"10.0-10.2\":0,\"10.3\":0,\"11.0-11.2\":0,\"11.3-11.4\":0.15672,\"12.0-12.1\":0,\"12.2-12.5\":0.15672,\"13.0-13.1\":0,\"13.2\":0,\"13.3\":0,\"13.4-13.7\":0,\"14.0-14.4\":0.07879,\"14.5-14.8\":0.2355,\"15.0-15.1\":0,\"15.2-15.3\":0.07879,\"15.4\":0,\"15.5\":1.02166,\"15.6\":0.54979,\"16.0\":0,\"16.1\":0.54979,\"16.2\":5.65722,\"16.3\":0.07879,\"16.4\":0},P:{\"4\":0,\"20\":0,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0,\"8.2\":0,\"9.2\":0,\"10.1\":0,\"11.1-11.2\":0,\"12.0\":0,\"13.0\":0,\"14.0\":0,\"15.0\":0,\"16.0\":0,\"17.0\":0,\"18.0\":0.07039,\"19.0\":2.60461},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0,\"4.4\":0,\"4.4.3-4.4.4\":0},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0},H:{\"0\":0.06384},L:{\"0\":83.04303},R:{_:\"0\"},M:{\"0\":0},Q:{\"13.1\":0}};\n/data/features/bigint.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"1\":\"hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB FC GC\",\"194\":\"eB fB gB\"},D:{\"1\":\"gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB\"},E:{\"1\":\"L G NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A B C K IC 0B JC KC LC MC 1B rB sB 2B\"},F:{\"1\":\"VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB QC RC SC TC rB BC UC sB\"},G:{\"1\":\"mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I xC yC zC 0C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"2\":\"BD\"}},B:6,C:\"BigInt\"};\n/data/features/eot.js\u0005module.exports={A:{A:{\"1\":\"J D E F A B\",\"2\":\"DC\"},B:{\"2\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"2\":\"A B C h rB BC sB\"},L:{\"2\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"2\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"2\":\"2B\"},R:{\"2\":\"AD\"},S:{\"2\":\"BD CD\"}},B:7,C:\"EOT - Embedded OpenType fonts\"};\n/data/regions/SD.js\u0013(module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0.00168,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0.00168,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0.00168,\"37\":0.00168,\"38\":0.00168,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0.00168,\"44\":0.00168,\"45\":0,\"46\":0,\"47\":0.00168,\"48\":0.00168,\"49\":0.00168,\"50\":0,\"51\":0,\"52\":0.00337,\"53\":0,\"54\":0,\"55\":0,\"56\":0.00168,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0.00168,\"69\":0,\"70\":0,\"71\":0,\"72\":0.00505,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.00168,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0.00505,\"92\":0,\"93\":0.00168,\"94\":0.00168,\"95\":0,\"96\":0.00337,\"97\":0,\"98\":0,\"99\":0.00168,\"100\":0.00168,\"101\":0,\"102\":0.00674,\"103\":0.00168,\"104\":0.00674,\"105\":0.00842,\"106\":0.01179,\"107\":0.0101,\"108\":0.02189,\"109\":0.2105,\"110\":0.14651,\"111\":0.00337,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0.00168,\"30\":0,\"31\":0,\"32\":0,\"33\":0.00337,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0.00168,\"41\":0,\"42\":0,\"43\":0.00505,\"44\":0.00168,\"45\":0,\"46\":0.00168,\"47\":0.00168,\"48\":0.00168,\"49\":0.00168,\"50\":0.00337,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0.00168,\"56\":0.00168,\"57\":0.00168,\"58\":0.00168,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0.00168,\"64\":0.00168,\"65\":0.00168,\"66\":0.00168,\"67\":0,\"68\":0.00168,\"69\":0.00337,\"70\":0.00505,\"71\":0.00337,\"72\":0.00168,\"73\":0,\"74\":0.00168,\"75\":0.00168,\"76\":0.00168,\"77\":0.00168,\"78\":0.00505,\"79\":0.01179,\"80\":0.00674,\"81\":0.00337,\"83\":0.00168,\"84\":0.00168,\"85\":0.00505,\"86\":0.00337,\"87\":0.00505,\"88\":0.00842,\"89\":0.00168,\"90\":0.00337,\"91\":0.00168,\"92\":0.00674,\"93\":0.00337,\"94\":0.00168,\"95\":0.00168,\"96\":0.00337,\"97\":0.00168,\"98\":0.00168,\"99\":0.00505,\"100\":0.00842,\"101\":0.00337,\"102\":0.01684,\"103\":0.02021,\"104\":0.00842,\"105\":0.0101,\"106\":0.00842,\"107\":0.02021,\"108\":0.06231,\"109\":0.73591,\"110\":0.33006,\"111\":0,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0.00337,\"25\":0,\"26\":0.00168,\"27\":0,\"28\":0.00842,\"29\":0,\"30\":0.00168,\"31\":0,\"32\":0,\"33\":0.00337,\"34\":0,\"35\":0,\"36\":0.00337,\"37\":0,\"38\":0.00168,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0.00168,\"52\":0,\"53\":0,\"54\":0.00168,\"55\":0.00168,\"56\":0.00168,\"57\":0,\"58\":0.00505,\"60\":0.00842,\"62\":0,\"63\":0.0101,\"64\":0.01852,\"65\":0.00505,\"66\":0.01347,\"67\":0.09262,\"68\":0,\"69\":0,\"70\":0,\"71\":0.00168,\"72\":0.00168,\"73\":0.00842,\"74\":0.00168,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0.00674,\"80\":0.00168,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0.00168,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00168,\"93\":0.00168,\"94\":0.04378,\"95\":0.05894,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0.00168,\"10.6\":0.00168,\"11.1\":0,\"11.5\":0.00168,\"11.6\":0,\"12.1\":0.00842},B:{\"12\":0.00505,\"13\":0.00168,\"14\":0.00168,\"15\":0,\"16\":0.00337,\"17\":0.00168,\"18\":0.00842,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0.00337,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0.00505,\"90\":0.00337,\"91\":0,\"92\":0.0101,\"93\":0,\"94\":0,\"95\":0,\"96\":0.00168,\"97\":0,\"98\":0,\"99\":0,\"100\":0.00337,\"101\":0,\"102\":0.00337,\"103\":0.00168,\"104\":0.00168,\"105\":0.00337,\"106\":0.00505,\"107\":0.00842,\"108\":0.01347,\"109\":0.14146,\"110\":0.13304},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.00168,\"14\":0.00337,\"15\":0.00337,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0.12125,\"6.1\":0,\"7.1\":0,\"9.1\":0.00168,\"10.1\":0,\"11.1\":0.00168,\"12.1\":0.00168,\"13.1\":0.00337,\"14.1\":0.02021,\"15.1\":0.00337,\"15.2-15.3\":0.00168,\"15.4\":0.00337,\"15.5\":0.00842,\"15.6\":0.02358,\"16.0\":0.00674,\"16.1\":0.01347,\"16.2\":0.02021,\"16.3\":0.0101,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0.00181,\"7.0-7.1\":0.00815,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0.02897,\"10.0-10.2\":0.00272,\"10.3\":0.01177,\"11.0-11.2\":0.00815,\"11.3-11.4\":0.00543,\"12.0-12.1\":0.01629,\"12.2-12.5\":0.49242,\"13.0-13.1\":0.00815,\"13.2\":0.00724,\"13.3\":0.03078,\"13.4-13.7\":0.08599,\"14.0-14.4\":0.75492,\"14.5-14.8\":0.40643,\"15.0-15.1\":0.14392,\"15.2-15.3\":0.22629,\"15.4\":0.29871,\"15.5\":0.35392,\"15.6\":0.57841,\"16.0\":0.98665,\"16.1\":1.25096,\"16.2\":1.23014,\"16.3\":1.28354,\"16.4\":0.00543},P:{\"4\":0.44597,\"20\":0.30407,\"5.0-5.4\":0.03041,\"6.2-6.4\":0.04054,\"7.2-7.4\":0.24326,\"8.2\":0,\"9.2\":0.05068,\"10.1\":0.01014,\"11.1-11.2\":0.07095,\"12.0\":0.01014,\"13.0\":0.10136,\"14.0\":0.21285,\"15.0\":0.10136,\"16.0\":0.61828,\"17.0\":0.23312,\"18.0\":0.24326,\"19.0\":1.26697},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.00309,\"4.2-4.3\":0.00927,\"4.4\":0,\"4.4.3-4.4.4\":0.07111},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0.0018,\"9\":0,\"10\":0,\"11\":0.02346,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0.00832,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":1.53014},H:{\"0\":9.18785},L:{\"0\":70.86625},R:{_:\"0\"},M:{\"0\":0.23285},Q:{\"13.1\":0}};\n/data/regions/BI.js\u0011module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0.0029,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0.0029,\"46\":0,\"47\":0.0029,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.0029,\"53\":0,\"54\":0,\"55\":0,\"56\":0.0029,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0.0029,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0.0029,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0.01448,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0.0029,\"103\":0.0029,\"104\":0,\"105\":0.0029,\"106\":0.0029,\"107\":0.00869,\"108\":0.00869,\"109\":0.48057,\"110\":0.41978,\"111\":0.00579,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0.0029,\"41\":0,\"42\":0,\"43\":0.0029,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0.0029,\"52\":0,\"53\":0,\"54\":0,\"55\":0.0029,\"56\":0,\"57\":0,\"58\":0,\"59\":0.0029,\"60\":0,\"61\":0,\"62\":0,\"63\":0.0029,\"64\":0.00869,\"65\":0,\"66\":0.0029,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0.00869,\"75\":0,\"76\":0.0029,\"77\":0,\"78\":0,\"79\":0.00579,\"80\":0.01158,\"81\":0.00869,\"83\":0,\"84\":0.0029,\"85\":0,\"86\":0,\"87\":0,\"88\":0.0029,\"89\":0,\"90\":0.0029,\"91\":0.02606,\"92\":0.0579,\"93\":0,\"94\":0,\"95\":0.0029,\"96\":0.00869,\"97\":0.02316,\"98\":0.0029,\"99\":0,\"100\":0.0029,\"101\":0.0029,\"102\":0.0029,\"103\":0.03764,\"104\":0.03185,\"105\":0.01448,\"106\":0.00579,\"107\":0.02606,\"108\":0.21134,\"109\":2.10177,\"110\":1.84991,\"111\":0.00579,\"112\":0.00869,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0.02027,\"25\":0,\"26\":0.01158,\"27\":0.0029,\"28\":0.0029,\"29\":0,\"30\":0.0029,\"31\":0,\"32\":0.0029,\"33\":0,\"34\":0,\"35\":0,\"36\":0.0029,\"37\":0.37346,\"38\":0.0029,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0.01448,\"47\":0.0029,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0.00579,\"55\":0,\"56\":0,\"57\":0.00579,\"58\":0.0029,\"60\":0.07817,\"62\":0,\"63\":0.20555,\"64\":0.04632,\"65\":0.02606,\"66\":0.1187,\"67\":0.27792,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0.01448,\"73\":0.00579,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0.0029,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0.00579,\"90\":0,\"91\":0,\"92\":0.0029,\"93\":0,\"94\":0.08975,\"95\":0.17949,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0.00869,\"12.1\":0.0029},B:{\"12\":0.00869,\"13\":0.0029,\"14\":0.0029,\"15\":0,\"16\":0,\"17\":0.00579,\"18\":0.01737,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0.0029,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0.0029,\"90\":0.00869,\"91\":0,\"92\":0.02316,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0.0029,\"101\":0,\"102\":0,\"103\":0.0029,\"104\":0,\"105\":0,\"106\":0.0029,\"107\":0.01448,\"108\":0.04053,\"109\":0.22292,\"110\":0.3474},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0.0029,\"15\":0,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0.0579,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0.00869,\"13.1\":0.0029,\"14.1\":0.02027,\"15.1\":0,\"15.2-15.3\":0,\"15.4\":0,\"15.5\":0.0029,\"15.6\":0.00579,\"16.0\":0.0029,\"16.1\":0.0029,\"16.2\":0.00579,\"16.3\":0.01158,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0.00088,\"7.0-7.1\":0,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0.02854,\"10.0-10.2\":0.00088,\"10.3\":0.11151,\"11.0-11.2\":0.00439,\"11.3-11.4\":0.01668,\"12.0-12.1\":0.20151,\"12.2-12.5\":1.04441,\"13.0-13.1\":0.02107,\"13.2\":0.00176,\"13.3\":0.03205,\"13.4-13.7\":0.01449,\"14.0-14.4\":0.16287,\"14.5-14.8\":0.11985,\"15.0-15.1\":0.19975,\"15.2-15.3\":0.20326,\"15.4\":0.0439,\"15.5\":0.11634,\"15.6\":0.21424,\"16.0\":0.27087,\"16.1\":0.40169,\"16.2\":0.28843,\"16.3\":0.57949,\"16.4\":0.00088},P:{\"4\":0.21211,\"20\":0.0606,\"5.0-5.4\":0.0404,\"6.2-6.4\":0.0404,\"7.2-7.4\":0.1111,\"8.2\":0,\"9.2\":0.0606,\"10.1\":0,\"11.1-11.2\":0.0202,\"12.0\":0.0101,\"13.0\":0.0202,\"14.0\":0,\"15.0\":0.0202,\"16.0\":0.97972,\"17.0\":0.0101,\"18.0\":0.0606,\"19.0\":0.41411},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0.00728,\"4.4\":0,\"4.4.3-4.4.4\":0.04298},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0.0029,\"11\":0.01158,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0.40499,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.32683},H:{\"0\":13.69527},L:{\"0\":66.7638},R:{_:\"0\"},M:{\"0\":0.03553},Q:{\"13.1\":0}};\n!/dist/unpacker/browserVersions.jsGmodule.exports.browserVersions = require('../../data/browserVersions')\n!/data/features/custom-elements.js\u0005module.exports={A:{A:{\"2\":\"J D E F DC\",\"8\":\"A B\"},B:{\"1\":\"P\",\"2\":\"Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"8\":\"C K L G M N O\"},C:{\"2\":\"EC uB I w J D E F A B C K L G M N O x g y z vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\",\"66\":\"0 1 2 3 4 5 6\",\"72\":\"7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB\"},D:{\"1\":\"AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P\",\"2\":\"0 1 2 3 I w J D E F A B C K L G M N O x g y z Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"66\":\"4 5 6 7 8 9\"},E:{\"2\":\"I w IC 0B JC\",\"8\":\"J D E F A B C K L G KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB\",\"2\":\"F B C gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\",\"66\":\"G M N O x\"},G:{\"2\":\"0B VC CC WC XC\",\"8\":\"E YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"1\":\"vC\",\"2\":\"uB I H qC rC sC tC CC uC\"},J:{\"2\":\"D A\"},K:{\"2\":\"A B C h rB BC sB\"},L:{\"2\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I xC yC zC 0C 1C 1B 2C 3C\",\"2\":\"g 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"2\":\"AD\"},S:{\"2\":\"CD\",\"72\":\"BD\"}},B:7,C:\"Custom Elements (deprecated V0 spec)\"};\n/data/regions/CM.js\u0012Gmodule.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0.00212,\"35\":0,\"36\":0.00212,\"37\":0,\"38\":0.00424,\"39\":0,\"40\":0,\"41\":0,\"42\":0.00212,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0.00212,\"48\":0,\"49\":0,\"50\":0.00212,\"51\":0.00212,\"52\":0.01484,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0.00424,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.00212,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0.00212,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0.00212,\"98\":0.00212,\"99\":0.00212,\"100\":0,\"101\":0.00424,\"102\":0.01272,\"103\":0.00212,\"104\":0.00212,\"105\":0.00212,\"106\":0.00424,\"107\":0.00424,\"108\":0.053,\"109\":0.18444,\"110\":0.12508,\"111\":0.00636,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0.00212,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0.00212,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0.00212,\"47\":0,\"48\":0,\"49\":0.00212,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0.00636,\"55\":0.00212,\"56\":0.01908,\"57\":0.00212,\"58\":0.00212,\"59\":0,\"60\":0,\"61\":0.00212,\"62\":0.00212,\"63\":0.00212,\"64\":0.00212,\"65\":0,\"66\":0,\"67\":0.00212,\"68\":0.01272,\"69\":0.00424,\"70\":0,\"71\":0,\"72\":0.00212,\"73\":0,\"74\":0.00424,\"75\":0,\"76\":0.00424,\"77\":0.00212,\"78\":0,\"79\":0.00848,\"80\":0.00424,\"81\":0.00424,\"83\":0,\"84\":0,\"85\":0.0212,\"86\":0.00212,\"87\":0.00424,\"88\":0.00212,\"89\":0.00212,\"90\":0.00212,\"91\":0.00212,\"92\":0.00212,\"93\":0.00636,\"94\":0.00424,\"95\":0.00424,\"96\":0.00212,\"97\":0.00636,\"98\":0.00212,\"99\":0.00212,\"100\":0.00424,\"101\":0,\"102\":0.00424,\"103\":0.00848,\"104\":0.00424,\"105\":0.00636,\"106\":0.0212,\"107\":0.01484,\"108\":0.04664,\"109\":0.8056,\"110\":0.3604,\"111\":0,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0.00212,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0.00636,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0.00212,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0.00212,\"51\":0.00212,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0.00212,\"58\":0.00424,\"60\":0.0212,\"62\":0,\"63\":0.01908,\"64\":0.00848,\"65\":0.00848,\"66\":0.02332,\"67\":0.05088,\"68\":0,\"69\":0,\"70\":0.00424,\"71\":0,\"72\":0.00212,\"73\":0,\"74\":0.0106,\"75\":0.00212,\"76\":0.00212,\"77\":0,\"78\":0,\"79\":0.00424,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0.00212,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00636,\"93\":0,\"94\":0.06784,\"95\":0.06148,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0.00212},B:{\"12\":0.00212,\"13\":0.00212,\"14\":0.00212,\"15\":0.01272,\"16\":0,\"17\":0.00212,\"18\":0.00636,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0.00424,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0.00212,\"90\":0.00424,\"91\":0,\"92\":0.00636,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0.00212,\"101\":0,\"102\":0,\"103\":0.00212,\"104\":0.00212,\"105\":0.00424,\"106\":0,\"107\":0.00424,\"108\":0.01272,\"109\":0.10176,\"110\":0.11872},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0.00212,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0.00424,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0,\"13.1\":0.00212,\"14.1\":0.00212,\"15.1\":0,\"15.2-15.3\":0,\"15.4\":0.00212,\"15.5\":0,\"15.6\":0.00424,\"16.0\":0.00212,\"16.1\":0.00424,\"16.2\":0.00212,\"16.3\":0.00424,\"16.4\":0},G:{\"8\":0.00139,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0.03747,\"8.1-8.4\":0,\"9.0-9.2\":0.00139,\"9.3\":0.03608,\"10.0-10.2\":0.03192,\"10.3\":0.40657,\"11.0-11.2\":0.04163,\"11.3-11.4\":0.04024,\"12.0-12.1\":0.30944,\"12.2-12.5\":3.53427,\"13.0-13.1\":0.07354,\"13.2\":0.11934,\"13.3\":0.26365,\"13.4-13.7\":0.35939,\"14.0-14.4\":0.85477,\"14.5-14.8\":0.94775,\"15.0-15.1\":0.53423,\"15.2-15.3\":0.57031,\"15.4\":0.39686,\"15.5\":0.55782,\"15.6\":0.72434,\"16.0\":0.57448,\"16.1\":0.73821,\"16.2\":0.83951,\"16.3\":0.60917,\"16.4\":0},P:{\"4\":0.23386,\"20\":0.05084,\"5.0-5.4\":0.05084,\"6.2-6.4\":0.02034,\"7.2-7.4\":0.15252,\"8.2\":0,\"9.2\":0.17285,\"10.1\":0,\"11.1-11.2\":0.0305,\"12.0\":0,\"13.0\":0.01017,\"14.0\":0.01017,\"15.0\":0.02034,\"16.0\":0.05084,\"17.0\":0.06101,\"18.0\":0.08134,\"19.0\":0.3152},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.00442,\"4.2-4.3\":0.00442,\"4.4\":0,\"4.4.3-4.4.4\":0.09416},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0.00212,\"9\":0,\"10\":0,\"11\":0.10812,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0.30732,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0.05516},O:{\"0\":0.53584},H:{\"0\":3.82712},L:{\"0\":76.62652},R:{_:\"0\"},M:{\"0\":0.38612},Q:{\"13.1\":0.01576}};\n#/data/features/input-placeholder.js\u0005module.exports={A:{A:{\"1\":\"A B\",\"2\":\"J D E F DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"w J D E F A B C K L G JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"132\":\"I IC 0B\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e BC UC sB\",\"2\":\"F QC RC SC TC\",\"132\":\"B rB\"},G:{\"1\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"1\":\"pC\"},I:{\"1\":\"uB H qC rC sC CC uC vC\",\"4\":\"I tC\"},J:{\"1\":\"D A\"},K:{\"1\":\"B C h rB BC sB\",\"2\":\"A\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:1,C:\"input placeholder attribute\"};\n/data/regions/EE.js\u0011Omodule.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.02121,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0.02828,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.00707,\"79\":0,\"80\":0,\"81\":0.02121,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0.15556,\"88\":0.00707,\"89\":0,\"90\":0,\"91\":0,\"92\":0.02121,\"93\":0.00707,\"94\":0,\"95\":0,\"96\":0,\"97\":0.00707,\"98\":0,\"99\":0,\"100\":0.00707,\"101\":0,\"102\":0.96873,\"103\":0.00707,\"104\":0.02121,\"105\":0.00707,\"106\":0.01414,\"107\":0.01414,\"108\":0.16263,\"109\":2.61627,\"110\":1.92331,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0.00707,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0.00707,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0.02121,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0.00707,\"73\":0,\"74\":0.00707,\"75\":0,\"76\":0.00707,\"77\":0,\"78\":0.03536,\"79\":0.02828,\"80\":0.00707,\"81\":0.01414,\"83\":0.00707,\"84\":0,\"85\":0.01414,\"86\":0.00707,\"87\":0.02121,\"88\":0.00707,\"89\":0.00707,\"90\":0.00707,\"91\":0.00707,\"92\":0.01414,\"93\":0.05657,\"94\":0.00707,\"95\":0.07778,\"96\":0.10607,\"97\":0.02121,\"98\":0.00707,\"99\":0.00707,\"100\":0.02121,\"101\":0.00707,\"102\":0.07778,\"103\":0.14142,\"104\":0.02121,\"105\":0.19799,\"106\":0.13435,\"107\":0.14142,\"108\":0.93337,\"109\":18.09469,\"110\":12.38839,\"111\":0.00707,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0.00707,\"86\":0,\"87\":0,\"88\":0,\"89\":0.00707,\"90\":0,\"91\":0,\"92\":0,\"93\":0.09899,\"94\":1.5839,\"95\":1.81018,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0.00707,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0.00707,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00707,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0.00707,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0.00707,\"103\":0.00707,\"104\":0,\"105\":0,\"106\":0.00707,\"107\":0.01414,\"108\":0.06364,\"109\":1.56976,\"110\":2.75769},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.01414,\"14\":0.0495,\"15\":0.00707,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0.05657,\"13.1\":0.07071,\"14.1\":0.13435,\"15.1\":0.02828,\"15.2-15.3\":0.02828,\"15.4\":0.06364,\"15.5\":0.09899,\"15.6\":0.30405,\"16.0\":0.09899,\"16.1\":0.21213,\"16.2\":0.49497,\"16.3\":0.38891,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0.0076,\"6.0-6.1\":0,\"7.0-7.1\":0.0038,\"8.1-8.4\":0.0038,\"9.0-9.2\":0,\"9.3\":0.01141,\"10.0-10.2\":0.03232,\"10.3\":0.192,\"11.0-11.2\":0.01141,\"11.3-11.4\":0.0076,\"12.0-12.1\":0.0076,\"12.2-12.5\":0.20721,\"13.0-13.1\":0.0038,\"13.2\":0.0019,\"13.3\":0.0095,\"13.4-13.7\":0.15398,\"14.0-14.4\":0.14067,\"14.5-14.8\":0.44293,\"15.0-15.1\":0.08554,\"15.2-15.3\":0.20151,\"15.4\":0.1996,\"15.5\":0.98472,\"15.6\":1.31359,\"16.0\":2.45799,\"16.1\":4.83043,\"16.2\":4.41791,\"16.3\":2.46179,\"16.4\":0.01711},P:{\"4\":0.01038,\"20\":0.63338,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0,\"8.2\":0,\"9.2\":0,\"10.1\":0,\"11.1-11.2\":0.01038,\"12.0\":0,\"13.0\":0.02077,\"14.0\":0.03115,\"15.0\":0.01038,\"16.0\":0.04153,\"17.0\":0.03115,\"18.0\":0.05192,\"19.0\":1.23561},I:{\"0\":0,\"3\":0,\"4\":0.00878,\"2.1\":0,\"2.2\":0,\"2.3\":0.01756,\"4.1\":0.00878,\"4.2-4.3\":0.02634,\"4.4\":0,\"4.4.3-4.4.4\":0.06146},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0.01414,\"9\":0,\"10\":0,\"11\":0.04243,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.0205},H:{\"0\":0.26621},L:{\"0\":27.90952},R:{_:\"0\"},M:{\"0\":0.26654},Q:{\"13.1\":0}};\n/data/regions/EG.js\u0011\u001cmodule.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.00444,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0.00111,\"103\":0,\"104\":0,\"105\":0.00111,\"106\":0.00111,\"107\":0.00111,\"108\":0.00333,\"109\":0.06105,\"110\":0.02331,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0.00111,\"41\":0,\"42\":0,\"43\":0.00999,\"44\":0,\"45\":0,\"46\":0.00111,\"47\":0,\"48\":0,\"49\":0.00222,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0.00111,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0.00111,\"70\":0.00111,\"71\":0.00111,\"72\":0.00111,\"73\":0,\"74\":0.00111,\"75\":0.00111,\"76\":0.00111,\"77\":0.00111,\"78\":0.00111,\"79\":0.00666,\"80\":0.00222,\"81\":0.00555,\"83\":0.00111,\"84\":0.00111,\"85\":0.00222,\"86\":0.00222,\"87\":0.00111,\"88\":0.00111,\"89\":0.00222,\"90\":0.00222,\"91\":0.00333,\"92\":0.00777,\"93\":0.00333,\"94\":0.00333,\"95\":0.00333,\"96\":0.00111,\"97\":0.00111,\"98\":0.00444,\"99\":0.00111,\"100\":0.00444,\"101\":0.00222,\"102\":0.00333,\"103\":0.00444,\"104\":0.00222,\"105\":0.00333,\"106\":0.00333,\"107\":0.00555,\"108\":0.01776,\"109\":0.57054,\"110\":0.17427,\"111\":0,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0.00222,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0.00111,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0.00111,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0.00111,\"80\":0,\"81\":0.00111,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0.00111,\"90\":0,\"91\":0,\"92\":0,\"93\":0.00222,\"94\":0.00333,\"95\":0,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00111,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0.00111,\"108\":0.00222,\"109\":0.04107,\"110\":0.03441},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0.00111,\"15\":0,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0.00666,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0,\"13.1\":0.00111,\"14.1\":0.00111,\"15.1\":0,\"15.2-15.3\":0,\"15.4\":0,\"15.5\":0.00111,\"15.6\":0.00333,\"16.0\":0.00111,\"16.1\":0.00111,\"16.2\":0.00333,\"16.3\":0.00222,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0.00104,\"5.0-5.1\":0,\"6.0-6.1\":0.00157,\"7.0-7.1\":0.00888,\"8.1-8.4\":0,\"9.0-9.2\":0.00157,\"9.3\":0.01358,\"10.0-10.2\":0.00052,\"10.3\":0.01671,\"11.0-11.2\":0.00261,\"11.3-11.4\":0.00261,\"12.0-12.1\":0.00679,\"12.2-12.5\":0.30867,\"13.0-13.1\":0.00313,\"13.2\":0.00313,\"13.3\":0.01358,\"13.4-13.7\":0.03813,\"14.0-14.4\":0.10759,\"14.5-14.8\":0.17757,\"15.0-15.1\":0.04074,\"15.2-15.3\":0.06528,\"15.4\":0.07782,\"15.5\":0.16608,\"15.6\":0.37134,\"16.0\":0.56093,\"16.1\":0.87064,\"16.2\":0.93697,\"16.3\":0.72597,\"16.4\":0.00209},P:{\"4\":0.32212,\"20\":0.20782,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0.2286,\"8.2\":0,\"9.2\":0.03117,\"10.1\":0.01039,\"11.1-11.2\":0.13508,\"12.0\":0.03117,\"13.0\":0.10391,\"14.0\":0.14547,\"15.0\":0.05195,\"16.0\":0.19743,\"17.0\":0.2286,\"18.0\":0.14547,\"19.0\":2.16131},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0.01555,\"4.4\":0,\"4.4.3-4.4.4\":0.15545},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0.00111,\"9\":0,\"10\":0,\"11\":0.00444,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.16891},H:{\"0\":0.37033},L:{\"0\":88.91226},R:{_:\"0\"},M:{\"0\":0.0889},Q:{\"13.1\":0}};\n\"/data/features/css-font-stretch.js\u0005module.exports={A:{A:{\"1\":\"F A B\",\"2\":\"J D E DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB I w J D E FC GC\"},D:{\"1\":\"PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB\"},E:{\"1\":\"B C K L G rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A IC 0B JC KC LC MC 1B\"},F:{\"1\":\"CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB QC RC SC TC rB BC UC sB\"},G:{\"1\":\"dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:2,C:\"CSS font-stretch\"};\n/data/features/websockets.js\u0006\u0000module.exports={A:{A:{\"1\":\"A B\",\"2\":\"J D E F DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB FC GC\",\"132\":\"I w\",\"292\":\"J D E F A\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"132\":\"I w J D E F A B C K L\",\"260\":\"G\"},E:{\"1\":\"D E F A B C K L G LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I IC 0B\",\"132\":\"w JC\",\"260\":\"J KC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e sB\",\"2\":\"F QC RC SC TC\",\"132\":\"B C rB BC UC\"},G:{\"1\":\"E XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC\",\"132\":\"CC WC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H uC vC\",\"2\":\"uB I qC rC sC tC CC\"},J:{\"1\":\"A\",\"129\":\"D\"},K:{\"1\":\"h sB\",\"2\":\"A\",\"132\":\"B C rB BC\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:1,C:\"Web Sockets\"};\n/data/features/jpeg2000.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"2\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"J D E F A B C K L G KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I IC 0B\",\"129\":\"w JC\"},F:{\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\"},G:{\"1\":\"E WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC CC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"2\":\"A B C h rB BC sB\"},L:{\"2\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"2\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"2\":\"2B\"},R:{\"2\":\"AD\"},S:{\"2\":\"BD CD\"}},B:6,C:\"JPEG 2000 image format\"};\n$/data/features/permissions-policy.js\u0006\u0015module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"2\":\"C K L G M N O\",\"258\":\"P Q R S T U\",\"322\":\"V W\",\"388\":\"X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h FC GC\",\"258\":\"mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\"},D:{\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB\",\"258\":\"aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U\",\"322\":\"V W\",\"388\":\"X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"2\":\"I w J D E F A B IC 0B JC KC LC MC 1B\",\"258\":\"C K L G rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB QC RC SC TC rB BC UC sB\",\"258\":\"OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB\",\"322\":\"lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d\",\"388\":\"e\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC\",\"258\":\"fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I qC rC sC tC CC uC vC\",\"258\":\"H\"},J:{\"2\":\"D A\"},K:{\"2\":\"A B C rB BC sB\",\"388\":\"h\"},L:{\"388\":\"H\"},M:{\"258\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"2\":\"I xC yC zC\",\"258\":\"g 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"258\":\"2B\"},R:{\"388\":\"AD\"},S:{\"2\":\"BD\",\"258\":\"CD\"}},B:5,C:\"Permissions Policy\"};\n /data/features/form-attribute.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"I w J D E F\"},E:{\"1\":\"J D E F A B C K L G JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I IC 0B\",\"16\":\"w\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\",\"2\":\"F\"},G:{\"1\":\"E WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC CC\"},H:{\"1\":\"pC\"},I:{\"1\":\"uB I H tC CC uC vC\",\"2\":\"qC rC sC\"},J:{\"1\":\"D A\"},K:{\"1\":\"A B C h rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:1,C:\"Form attribute\"};\n\"/data/features/css-env-function.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"1\":\"eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB FC GC\"},D:{\"1\":\"iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB\"},E:{\"1\":\"C K L G rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A IC 0B JC KC LC MC 1B\",\"132\":\"B\"},F:{\"1\":\"XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB QC RC SC TC rB BC UC sB\"},G:{\"1\":\"fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC\",\"132\":\"eC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I xC yC zC 0C 1C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"2\":\"BD\"}},B:7,C:\"CSS Environment Variables env()\"};\n/data/regions/ME.js\u0011Smodule.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.01057,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0.00352,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.00352,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0.00705,\"99\":0.00352,\"100\":0.00352,\"101\":0,\"102\":0.00352,\"103\":0.00705,\"104\":0.00705,\"105\":0.00705,\"106\":0,\"107\":0.00352,\"108\":0.00705,\"109\":0.5214,\"110\":0.32059,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0.00352,\"39\":0,\"40\":0,\"41\":0.00352,\"42\":0,\"43\":0,\"44\":0.00352,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0.02114,\"50\":0,\"51\":0,\"52\":0,\"53\":0.01762,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0.00352,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0.00705,\"67\":0,\"68\":0.01409,\"69\":0,\"70\":0.00352,\"71\":0,\"72\":0,\"73\":0,\"74\":0.00352,\"75\":0.00352,\"76\":0,\"77\":0,\"78\":0,\"79\":0.09512,\"80\":0.00705,\"81\":0.01409,\"83\":0.01409,\"84\":0.00352,\"85\":0.01762,\"86\":0.00705,\"87\":0.01409,\"88\":0.00352,\"89\":0.00352,\"90\":0.00352,\"91\":0,\"92\":0.04228,\"93\":0.03875,\"94\":0.01057,\"95\":0.00705,\"96\":0.00705,\"97\":0.00705,\"98\":0.00352,\"99\":0.01409,\"100\":0.02466,\"101\":0.00352,\"102\":0.01762,\"103\":0.05637,\"104\":0.00352,\"105\":0.05285,\"106\":0.02114,\"107\":0.1691,\"108\":0.22195,\"109\":5.7284,\"110\":2.6951,\"111\":0,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0.02114,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0.00352,\"41\":0,\"42\":0.00352,\"43\":0,\"44\":0,\"45\":0,\"46\":0.00352,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.00352,\"68\":0.00705,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0.00352,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0.00705,\"86\":0,\"87\":0.00352,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.01057,\"94\":0.25366,\"95\":0.17615,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.01057,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0.00352,\"104\":0,\"105\":0,\"106\":0,\"107\":0.03523,\"108\":0.01409,\"109\":0.22195,\"110\":0.23956},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0.01057,\"15\":0.00352,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0.01057,\"13.1\":0.01409,\"14.1\":0.0458,\"15.1\":0.00352,\"15.2-15.3\":0.01762,\"15.4\":0.09512,\"15.5\":0.02466,\"15.6\":0.13387,\"16.0\":0.00705,\"16.1\":0.02466,\"16.2\":0.11626,\"16.3\":0.03875,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0.04525,\"8.1-8.4\":0.00617,\"9.0-9.2\":0.00411,\"9.3\":0.07198,\"10.0-10.2\":0,\"10.3\":0.11311,\"11.0-11.2\":0.01851,\"11.3-11.4\":0.01028,\"12.0-12.1\":0.0144,\"12.2-12.5\":0.26736,\"13.0-13.1\":0.00823,\"13.2\":0,\"13.3\":0.07609,\"13.4-13.7\":0.07404,\"14.0-14.4\":0.22006,\"14.5-14.8\":0.77328,\"15.0-15.1\":0.1234,\"15.2-15.3\":0.28792,\"15.4\":0.32494,\"15.5\":0.83704,\"15.6\":2.3363,\"16.0\":2.76202,\"16.1\":4.37234,\"16.2\":4.06591,\"16.3\":2.53579,\"16.4\":0.01028},P:{\"4\":0.16133,\"20\":1.15954,\"5.0-5.4\":0.01008,\"6.2-6.4\":0,\"7.2-7.4\":0.02017,\"8.2\":0,\"9.2\":0.01008,\"10.1\":0,\"11.1-11.2\":0.18149,\"12.0\":0.01008,\"13.0\":0.03025,\"14.0\":0.02017,\"15.0\":0.02017,\"16.0\":0.04033,\"17.0\":0.05041,\"18.0\":0.07058,\"19.0\":2.03675},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.00318,\"4.2-4.3\":0.00953,\"4.4\":0,\"4.4.3-4.4.4\":0.07309},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0.01057,\"9\":0.00352,\"10\":0,\"11\":0.01762,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.01295},H:{\"0\":0.22075},L:{\"0\":62.65394},R:{_:\"0\"},M:{\"0\":0.13602},Q:{\"13.1\":0}};\n/data/regions/GT.js\u0010module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.00358,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0.04291,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.00358,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0.00358,\"103\":0,\"104\":0.01073,\"105\":0.00358,\"106\":0.00358,\"107\":0.00358,\"108\":0.00715,\"109\":0.32542,\"110\":0.21456,\"111\":0.00358,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0.00358,\"50\":0.00358,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0.00358,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0.00358,\"77\":0,\"78\":0.00358,\"79\":0.03218,\"80\":0,\"81\":0.00715,\"83\":0,\"84\":0.00358,\"85\":0,\"86\":0,\"87\":0.00715,\"88\":0.00715,\"89\":0,\"90\":0.00358,\"91\":0.01788,\"92\":0.01073,\"93\":0.00358,\"94\":0.00358,\"95\":0.00358,\"96\":0.00358,\"97\":0.00715,\"98\":0.00715,\"99\":0.00715,\"100\":0.00715,\"101\":0.00358,\"102\":0.00715,\"103\":0.03934,\"104\":0.01788,\"105\":0.02146,\"106\":0.02146,\"107\":0.03576,\"108\":0.12874,\"109\":4.69529,\"110\":3.28634,\"111\":0.00358,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.01073,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.05364,\"94\":0.43985,\"95\":0.18595,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00358,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0.01073,\"99\":0,\"100\":0.00358,\"101\":0,\"102\":0,\"103\":0.00358,\"104\":0.00358,\"105\":0.00358,\"106\":0.00358,\"107\":0.01073,\"108\":0.0143,\"109\":0.43985,\"110\":0.58289},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.00358,\"14\":0.01073,\"15\":0.00358,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0,\"13.1\":0.02146,\"14.1\":0.03218,\"15.1\":0.00358,\"15.2-15.3\":0.00715,\"15.4\":0.01788,\"15.5\":0.02146,\"15.6\":0.12158,\"16.0\":0.01788,\"16.1\":0.07152,\"16.2\":0.14304,\"16.3\":0.13589,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0.00156,\"6.0-6.1\":0.01711,\"7.0-7.1\":0.00311,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0.014,\"10.0-10.2\":0,\"10.3\":0.00933,\"11.0-11.2\":0,\"11.3-11.4\":0.00156,\"12.0-12.1\":0.00156,\"12.2-12.5\":0.18514,\"13.0-13.1\":0.00311,\"13.2\":0.00156,\"13.3\":0.00933,\"13.4-13.7\":0.04201,\"14.0-14.4\":0.10579,\"14.5-14.8\":0.23959,\"15.0-15.1\":0.07001,\"15.2-15.3\":0.08712,\"15.4\":0.14158,\"15.5\":0.23492,\"15.6\":0.86968,\"16.0\":1.66002,\"16.1\":3.46784,\"16.2\":4.26285,\"16.3\":3.37916,\"16.4\":0.02178},P:{\"4\":0.0912,\"20\":0.94238,\"5.0-5.4\":0.01013,\"6.2-6.4\":0,\"7.2-7.4\":0.1824,\"8.2\":0,\"9.2\":0.01013,\"10.1\":0,\"11.1-11.2\":0.0608,\"12.0\":0.01013,\"13.0\":0.0304,\"14.0\":0.05067,\"15.0\":0.02027,\"16.0\":0.1216,\"17.0\":0.07093,\"18.0\":0.10133,\"19.0\":1.70236},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0,\"4.4\":0,\"4.4.3-4.4.4\":0.13934},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.00715,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.08351},H:{\"0\":0.24327},L:{\"0\":67.95531},R:{_:\"0\"},M:{\"0\":0.23769},Q:{\"13.1\":0}};\n/data/regions/BB.js\u0010module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0.00508,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0.00508,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0.03047,\"103\":0.02032,\"104\":0,\"105\":0,\"106\":0.03555,\"107\":0.00508,\"108\":0.01524,\"109\":0.57901,\"110\":0.38093,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0.01524,\"48\":0,\"49\":0.00508,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0.01524,\"77\":0.00508,\"78\":0,\"79\":0.12698,\"80\":0.0254,\"81\":0.04063,\"83\":0.03555,\"84\":0.01016,\"85\":0,\"86\":0.00508,\"87\":0.00508,\"88\":0,\"89\":0.01016,\"90\":0,\"91\":0.01016,\"92\":0,\"93\":0.00508,\"94\":0,\"95\":0.01016,\"96\":0.00508,\"97\":0.00508,\"98\":0,\"99\":0.01016,\"100\":0.00508,\"101\":0.00508,\"102\":0.00508,\"103\":0.16253,\"104\":0.01524,\"105\":0.00508,\"106\":0.01016,\"107\":0.04063,\"108\":0.91422,\"109\":8.01974,\"110\":5.18566,\"111\":0.0254,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0.0254,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.00508,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.01524,\"94\":0.45711,\"95\":0.21332,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0.00508,\"17\":0,\"18\":0,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0.01016,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0.07111,\"108\":0.14221,\"109\":2.38205,\"110\":2.37189},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.00508,\"14\":0.01524,\"15\":0.00508,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0.00508,\"12.1\":0.00508,\"13.1\":0.08126,\"14.1\":0.13205,\"15.1\":0.01524,\"15.2-15.3\":0.01016,\"15.4\":0.04063,\"15.5\":0.08634,\"15.6\":0.50282,\"16.0\":0.04063,\"16.1\":0.2184,\"16.2\":0.76185,\"16.3\":0.4114,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0.00473,\"6.0-6.1\":0,\"7.0-7.1\":0.02838,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0.23884,\"10.0-10.2\":0,\"10.3\":0.09459,\"11.0-11.2\":0.01655,\"11.3-11.4\":0.01419,\"12.0-12.1\":0,\"12.2-12.5\":0.4564,\"13.0-13.1\":0,\"13.2\":0,\"13.3\":0,\"13.4-13.7\":0.02601,\"14.0-14.4\":0.10168,\"14.5-14.8\":0.29796,\"15.0-15.1\":0.0402,\"15.2-15.3\":0.37836,\"15.4\":0.18918,\"15.5\":0.26722,\"15.6\":1.49215,\"16.0\":2.50899,\"16.1\":4.42917,\"16.2\":8.60294,\"16.3\":3.06471,\"16.4\":0.01182},P:{\"4\":0.1085,\"20\":1.56239,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0.1736,\"8.2\":0,\"9.2\":0,\"10.1\":0,\"11.1-11.2\":0.0434,\"12.0\":0,\"13.0\":0.1519,\"14.0\":0.05425,\"15.0\":0.03255,\"16.0\":0.03255,\"17.0\":0.1302,\"18.0\":0.07595,\"19.0\":3.03798},I:{\"0\":0,\"3\":0,\"4\":0.17676,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0.06629,\"4.4\":0,\"4.4.3-4.4.4\":1.01639},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0.00508,\"11\":0.01016,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.08366},H:{\"0\":0.19567},L:{\"0\":43.50494},R:{_:\"0\"},M:{\"0\":0.36908},Q:{\"13.1\":0}};\n/dist/unpacker/agents.js\u0005'use strict'\n\nconst browsers = require('./browsers').browsers\nconst versions = require('./browserVersions').browserVersions\nconst agentsData = require('../../data/agents')\n\nfunction unpackBrowserVersions(versionsData) {\n  return Object.keys(versionsData).reduce((usage, version) => {\n    usage[versions[version]] = versionsData[version]\n    return usage\n  }, {})\n}\n\nmodule.exports.agents = Object.keys(agentsData).reduce((map, key) => {\n  let versionsData = agentsData[key]\n  map[browsers[key]] = Object.keys(versionsData).reduce((data, entry) => {\n    if (entry === 'A') {\n      data.usage_global = unpackBrowserVersions(versionsData[entry])\n    } else if (entry === 'C') {\n      data.versions = versionsData[entry].reduce((list, version) => {\n        if (version === '') {\n          list.push(null)\n        } else {\n          list.push(versions[version])\n        }\n        return list\n      }, [])\n    } else if (entry === 'D') {\n      data.prefix_exceptions = unpackBrowserVersions(versionsData[entry])\n    } else if (entry === 'E') {\n      data.browser = versionsData[entry]\n    } else if (entry === 'F') {\n      data.release_date = Object.keys(versionsData[entry]).reduce(\n        (map2, key2) => {\n          map2[versions[key2]] = versionsData[entry][key2]\n          return map2\n        },\n        {}\n      )\n    } else {\n      // entry is B\n      data.prefix = versionsData[entry]\n    }\n    return data\n  }, {})\n  return map\n}, {})\n/data/agents.jsN3module.exports={A:{A:{J:0.0131217,D:0.00621152,E:0.0478029,F:0.0573634,A:0.00956057,B:0.487589,DC:0.009298},B:\"ms\",C:[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"DC\",\"J\",\"D\",\"E\",\"F\",\"A\",\"B\",\"\",\"\",\"\"],E:\"IE\",F:{DC:962323200,J:998870400,D:1161129600,E:1237420800,F:1300060800,A:1346716800,B:1381968000}},B:{A:{C:0.003861,K:0.004267,L:0.004268,G:0.003861,M:0.003702,N:0.003861,O:0.015444,P:0,Q:0.004298,R:0.00944,S:0.004043,T:0.007722,U:0.003861,V:0.003861,W:0.003861,X:0.003943,Y:0.007722,Z:0.003943,a:0.003943,b:0.007722,c:0.004118,d:0.003939,e:0.003943,i:0.003943,j:0.003943,k:0.003929,l:0.003901,m:0.011829,n:0.007886,o:0.003943,p:0.007722,q:0.003861,r:0.007722,s:0.011583,t:0.073359,u:0.111969,v:1.66023,f:2.23552,H:0},B:\"webkit\",C:[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"C\",\"K\",\"L\",\"G\",\"M\",\"N\",\"O\",\"P\",\"Q\",\"R\",\"S\",\"T\",\"U\",\"V\",\"W\",\"X\",\"Y\",\"Z\",\"a\",\"b\",\"c\",\"d\",\"e\",\"i\",\"j\",\"k\",\"l\",\"m\",\"n\",\"o\",\"p\",\"q\",\"r\",\"s\",\"t\",\"u\",\"v\",\"f\",\"H\",\"\",\"\",\"\"],E:\"Edge\",F:{C:1438128000,K:1447286400,L:1470096000,G:1491868800,M:1508198400,N:1525046400,O:1542067200,P:1579046400,Q:1581033600,R:1586736000,S:1590019200,T:1594857600,U:1598486400,V:1602201600,W:1605830400,X:1611360000,Y:1614816000,Z:1618358400,a:1622073600,b:1626912000,c:1630627200,d:1632441600,e:1634774400,i:1637539200,j:1641427200,k:1643932800,l:1646265600,m:1649635200,n:1651190400,o:1653955200,p:1655942400,q:1659657600,r:1661990400,s:1664755200,t:1666915200,u:1670198400,v:1673481600,f:1675900800,H:1678665600},D:{C:\"ms\",K:\"ms\",L:\"ms\",G:\"ms\",M:\"ms\",N:\"ms\",O:\"ms\"}},C:{A:{\"0\":0.004161,\"1\":0.008786,\"2\":0.004118,\"3\":0.004317,\"4\":0.004393,\"5\":0.004418,\"6\":0.008834,\"7\":0.008322,\"8\":0.008928,\"9\":0.004471,EC:0.004118,uB:0.004271,I:0.011703,w:0.004879,J:0.020136,D:0.005725,E:0.004525,F:0.00533,A:0.004283,B:0.007722,C:0.004471,K:0.004486,L:0.00453,G:0.008322,M:0.004417,N:0.004425,O:0.004161,x:0.004443,g:0.004283,y:0.008322,z:0.013698,AB:0.009284,BB:0.004707,CB:0.009076,DB:0.003861,EB:0.004783,FB:0.003929,GB:0.004783,HB:0.00487,IB:0.005029,JB:0.0047,KB:0.019305,LB:0.003861,MB:0.003867,NB:0.004525,OB:0.004293,PB:0.003861,QB:0.004538,RB:0.008282,SB:0.011601,TB:0.046332,UB:0.011601,VB:0.003929,WB:0.003974,XB:0.003861,YB:0.011601,ZB:0.003939,vB:0.003861,aB:0.003929,wB:0.004356,bB:0.004425,cB:0.008322,dB:0.00415,eB:0.004267,fB:0.003801,gB:0.004267,hB:0.003861,iB:0.00415,jB:0.004293,kB:0.004425,lB:0.003861,h:0.00415,mB:0.00415,nB:0.004318,oB:0.004356,pB:0.003974,qB:0.034749,P:0.003861,Q:0.003861,R:0.003861,xB:0.003861,S:0.003861,T:0.003929,U:0.004268,V:0.003801,W:0.015444,X:0.007722,Y:0.003943,Z:0.003943,a:0.011583,b:0.003801,c:0.007722,d:0.011583,e:0.003773,i:0.007886,j:0.003901,k:0.003901,l:0.003861,m:0.003861,n:0.003861,o:0.096525,p:0.042471,q:0.007722,r:0.011583,s:0.015444,t:0.019305,u:0.069498,v:1.22008,f:0.814671,H:0.007722,yB:0,zB:0,FC:0.008786,GC:0.00487},B:\"moz\",C:[\"EC\",\"uB\",\"FC\",\"GC\",\"I\",\"w\",\"J\",\"D\",\"E\",\"F\",\"A\",\"B\",\"C\",\"K\",\"L\",\"G\",\"M\",\"N\",\"O\",\"x\",\"g\",\"y\",\"z\",\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"AB\",\"BB\",\"CB\",\"DB\",\"EB\",\"FB\",\"GB\",\"HB\",\"IB\",\"JB\",\"KB\",\"LB\",\"MB\",\"NB\",\"OB\",\"PB\",\"QB\",\"RB\",\"SB\",\"TB\",\"UB\",\"VB\",\"WB\",\"XB\",\"YB\",\"ZB\",\"vB\",\"aB\",\"wB\",\"bB\",\"cB\",\"dB\",\"eB\",\"fB\",\"gB\",\"hB\",\"iB\",\"jB\",\"kB\",\"lB\",\"h\",\"mB\",\"nB\",\"oB\",\"pB\",\"qB\",\"P\",\"Q\",\"R\",\"xB\",\"S\",\"T\",\"U\",\"V\",\"W\",\"X\",\"Y\",\"Z\",\"a\",\"b\",\"c\",\"d\",\"e\",\"i\",\"j\",\"k\",\"l\",\"m\",\"n\",\"o\",\"p\",\"q\",\"r\",\"s\",\"t\",\"u\",\"v\",\"f\",\"H\",\"yB\",\"zB\",\"\"],E:\"Firefox\",F:{\"0\":1372118400,\"1\":1375747200,\"2\":1379376000,\"3\":1386633600,\"4\":1391472000,\"5\":1395100800,\"6\":1398729600,\"7\":1402358400,\"8\":1405987200,\"9\":1409616000,EC:1161648000,uB:1213660800,FC:1246320000,GC:1264032000,I:1300752000,w:1308614400,J:1313452800,D:1317081600,E:1317081600,F:1320710400,A:1324339200,B:1327968000,C:1331596800,K:1335225600,L:1338854400,G:1342483200,M:1346112000,N:1349740800,O:1353628800,x:1357603200,g:1361232000,y:1364860800,z:1368489600,AB:1413244800,BB:1417392000,CB:1421107200,DB:1424736000,EB:1428278400,FB:1431475200,GB:1435881600,HB:1439251200,IB:1442880000,JB:1446508800,KB:1450137600,LB:1453852800,MB:1457395200,NB:1461628800,OB:1465257600,PB:1470096000,QB:1474329600,RB:1479168000,SB:1485216000,TB:1488844800,UB:1492560000,VB:1497312000,WB:1502150400,XB:1506556800,YB:1510617600,ZB:1516665600,vB:1520985600,aB:1525824000,wB:1529971200,bB:1536105600,cB:1540252800,dB:1544486400,eB:1548720000,fB:1552953600,gB:1558396800,hB:1562630400,iB:1567468800,jB:1571788800,kB:1575331200,lB:1578355200,h:1581379200,mB:1583798400,nB:1586304000,oB:1588636800,pB:1591056000,qB:1593475200,P:1595894400,Q:1598313600,R:1600732800,xB:1603152000,S:1605571200,T:1607990400,U:1611619200,V:1614038400,W:1616457600,X:1618790400,Y:1622505600,Z:1626134400,a:1628553600,b:1630972800,c:1633392000,d:1635811200,e:1638835200,i:1641859200,j:1644364800,k:1646697600,l:1649116800,m:1651536000,n:1653955200,o:1656374400,p:1658793600,q:1661212800,r:1663632000,s:1666051200,t:1668470400,u:1670889600,v:1673913600,f:1676332800,H:1678752000,yB:null,zB:null}},D:{A:{\"0\":0.008786,\"1\":0.003939,\"2\":0.004461,\"3\":0.004141,\"4\":0.004326,\"5\":0.0047,\"6\":0.004538,\"7\":0.008322,\"8\":0.008596,\"9\":0.004566,I:0.004706,w:0.004879,J:0.004879,D:0.005591,E:0.005591,F:0.005591,A:0.004534,B:0.004464,C:0.010424,K:0.0083,L:0.004706,G:0.015087,M:0.004393,N:0.004393,O:0.008652,x:0.008322,g:0.004393,y:0.004317,z:0.003901,AB:0.004118,BB:0.003861,CB:0.003861,DB:0.004335,EB:0.004464,FB:0.015444,GB:0.003867,HB:0.015444,IB:0.003773,JB:0.003974,KB:0.007722,LB:0.007948,MB:0.003974,NB:0.003867,OB:0.007722,PB:0.019305,QB:0.03861,RB:0.003867,SB:0.003929,TB:0.007722,UB:0.007722,VB:0.003867,WB:0.007722,XB:0.069498,YB:0.003861,ZB:0.015772,vB:0.003773,aB:0.015444,wB:0.007722,bB:0.003773,cB:0.007722,dB:0.003943,eB:0.007722,fB:0.027027,gB:0.007722,hB:0.011583,iB:0.054054,jB:0.019305,kB:0.015444,lB:0.023166,h:0.011583,mB:0.042471,nB:0.046332,oB:0.042471,pB:0.015444,qB:0.030888,P:0.127413,Q:0.03861,R:0.042471,S:0.073359,T:0.042471,U:0.088803,V:0.07722,W:0.081081,X:0.027027,Y:0.03861,Z:0.046332,a:0.084942,b:0.050193,c:0.065637,d:0.046332,e:0.019305,i:0.03861,j:0.050193,k:0.092664,l:0.050193,m:0.057915,n:0.061776,o:0.084942,p:0.235521,q:0.084942,r:0.131274,s:0.100386,t:0.19305,u:0.984555,v:12.4054,f:7.25482,H:0.015444,yB:0.019305,zB:0,HC:0},B:\"webkit\",C:[\"\",\"\",\"\",\"\",\"\",\"I\",\"w\",\"J\",\"D\",\"E\",\"F\",\"A\",\"B\",\"C\",\"K\",\"L\",\"G\",\"M\",\"N\",\"O\",\"x\",\"g\",\"y\",\"z\",\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"AB\",\"BB\",\"CB\",\"DB\",\"EB\",\"FB\",\"GB\",\"HB\",\"IB\",\"JB\",\"KB\",\"LB\",\"MB\",\"NB\",\"OB\",\"PB\",\"QB\",\"RB\",\"SB\",\"TB\",\"UB\",\"VB\",\"WB\",\"XB\",\"YB\",\"ZB\",\"vB\",\"aB\",\"wB\",\"bB\",\"cB\",\"dB\",\"eB\",\"fB\",\"gB\",\"hB\",\"iB\",\"jB\",\"kB\",\"lB\",\"h\",\"mB\",\"nB\",\"oB\",\"pB\",\"qB\",\"P\",\"Q\",\"R\",\"S\",\"T\",\"U\",\"V\",\"W\",\"X\",\"Y\",\"Z\",\"a\",\"b\",\"c\",\"d\",\"e\",\"i\",\"j\",\"k\",\"l\",\"m\",\"n\",\"o\",\"p\",\"q\",\"r\",\"s\",\"t\",\"u\",\"v\",\"f\",\"H\",\"yB\",\"zB\",\"HC\"],E:\"Chrome\",F:{\"0\":1348531200,\"1\":1352246400,\"2\":1357862400,\"3\":1361404800,\"4\":1364428800,\"5\":1369094400,\"6\":1374105600,\"7\":1376956800,\"8\":1384214400,\"9\":1389657600,I:1264377600,w:1274745600,J:1283385600,D:1287619200,E:1291248000,F:1296777600,A:1299542400,B:1303862400,C:1307404800,K:1312243200,L:1316131200,G:1316131200,M:1319500800,N:1323734400,O:1328659200,x:1332892800,g:1337040000,y:1340668800,z:1343692800,AB:1392940800,BB:1397001600,CB:1400544000,DB:1405468800,EB:1409011200,FB:1412640000,GB:1416268800,HB:1421798400,IB:1425513600,JB:1429401600,KB:1432080000,LB:1437523200,MB:1441152000,NB:1444780800,OB:1449014400,PB:1453248000,QB:1456963200,RB:1460592000,SB:1464134400,TB:1469059200,UB:1472601600,VB:1476230400,WB:1480550400,XB:1485302400,YB:1489017600,ZB:1492560000,vB:1496707200,aB:1500940800,wB:1504569600,bB:1508198400,cB:1512518400,dB:1516752000,eB:1520294400,fB:1523923200,gB:1527552000,hB:1532390400,iB:1536019200,jB:1539648000,kB:1543968000,lB:1548720000,h:1552348800,mB:1555977600,nB:1559606400,oB:1564444800,pB:1568073600,qB:1571702400,P:1575936000,Q:1580860800,R:1586304000,S:1589846400,T:1594684800,U:1598313600,V:1601942400,W:1605571200,X:1611014400,Y:1614556800,Z:1618272000,a:1621987200,b:1626739200,c:1630368000,d:1632268800,e:1634601600,i:1637020800,j:1641340800,k:1643673600,l:1646092800,m:1648512000,n:1650931200,o:1653350400,p:1655769600,q:1659398400,r:1661817600,s:1664236800,t:1666656000,u:1669680000,v:1673308800,f:1675728000,H:1678147200,yB:null,zB:null,HC:null}},E:{A:{I:0,w:0.008322,J:0.004656,D:0.004465,E:0.003974,F:0.003929,A:0.004425,B:0.004318,C:0.003801,K:0.019305,L:0.096525,G:0.023166,IC:0,\"0B\":0.008692,JC:0.007722,KC:0.00456,LC:0.004283,MC:0.057915,\"1B\":0.007802,rB:0.007722,sB:0.030888,\"2B\":0.169884,NC:0.258687,OC:0.042471,\"3B\":0.034749,\"4B\":0.088803,\"5B\":0.169884,\"6B\":0.857142,tB:0.088803,\"7B\":0.293436,\"8B\":0.922779,\"9B\":0.621621,AC:0,PC:0},B:\"webkit\",C:[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"IC\",\"0B\",\"I\",\"w\",\"JC\",\"J\",\"KC\",\"D\",\"LC\",\"E\",\"F\",\"MC\",\"A\",\"1B\",\"B\",\"rB\",\"C\",\"sB\",\"K\",\"2B\",\"L\",\"NC\",\"G\",\"OC\",\"3B\",\"4B\",\"5B\",\"6B\",\"tB\",\"7B\",\"8B\",\"9B\",\"AC\",\"PC\",\"\"],E:\"Safari\",F:{IC:1205798400,\"0B\":1226534400,I:1244419200,w:1275868800,JC:1311120000,J:1343174400,KC:1382400000,D:1382400000,LC:1410998400,E:1413417600,F:1443657600,MC:1458518400,A:1474329600,\"1B\":1490572800,B:1505779200,rB:1522281600,C:1537142400,sB:1553472000,K:1568851200,\"2B\":1585008000,L:1600214400,NC:1619395200,G:1632096000,OC:1635292800,\"3B\":1639353600,\"4B\":1647216000,\"5B\":1652745600,\"6B\":1658275200,tB:1662940800,\"7B\":1666569600,\"8B\":1670889600,\"9B\":1674432000,AC:null,PC:null}},F:{A:{\"0\":0.013434,\"1\":0.006702,\"2\":0.006015,\"3\":0.005595,\"4\":0.004393,\"5\":0.003861,\"6\":0.004879,\"7\":0.004879,\"8\":0.003861,\"9\":0.005152,F:0.0082,B:0.016581,C:0.004317,G:0.00685,M:0.00685,N:0.00685,O:0.005014,x:0.006015,g:0.004879,y:0.006597,z:0.006597,AB:0.005014,BB:0.009758,CB:0.004879,DB:0.007722,EB:0.004283,FB:0.004367,GB:0.004534,HB:0.003861,IB:0.004227,JB:0.004418,KB:0.004161,LB:0.004227,MB:0.004725,NB:0.011583,OB:0.008942,PB:0.004707,QB:0.004827,RB:0.004707,SB:0.004707,TB:0.004326,UB:0.008922,VB:0.014349,WB:0.004425,XB:0.00472,YB:0.004425,ZB:0.004425,aB:0.00472,bB:0.004532,cB:0.004566,dB:0.02283,eB:0.00867,fB:0.004656,gB:0.004642,hB:0.003929,iB:0.00944,jB:0.004293,kB:0.003929,lB:0.004298,h:0.096692,mB:0.004201,nB:0.004141,oB:0.004257,pB:0.003939,qB:0.008236,P:0.003855,Q:0.003939,R:0.008514,xB:0.003939,S:0.003939,T:0.003702,U:0.007722,V:0.003855,W:0.003855,X:0.003929,Y:0.003861,Z:0.011703,a:0.007546,b:0.011829,c:0.069498,d:0.648648,e:0.370656,QC:0.00685,RC:0,SC:0.008392,TC:0.004706,rB:0.006229,BC:0.004879,UC:0.008786,sB:0.00472},B:\"webkit\",C:[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"F\",\"QC\",\"RC\",\"SC\",\"TC\",\"B\",\"rB\",\"BC\",\"UC\",\"C\",\"sB\",\"G\",\"M\",\"N\",\"O\",\"x\",\"g\",\"y\",\"z\",\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"AB\",\"BB\",\"CB\",\"DB\",\"EB\",\"FB\",\"GB\",\"HB\",\"IB\",\"JB\",\"KB\",\"LB\",\"MB\",\"NB\",\"OB\",\"PB\",\"QB\",\"RB\",\"SB\",\"TB\",\"UB\",\"VB\",\"WB\",\"XB\",\"YB\",\"ZB\",\"aB\",\"bB\",\"cB\",\"dB\",\"eB\",\"fB\",\"gB\",\"hB\",\"iB\",\"jB\",\"kB\",\"lB\",\"h\",\"mB\",\"nB\",\"oB\",\"pB\",\"qB\",\"P\",\"Q\",\"R\",\"xB\",\"S\",\"T\",\"U\",\"V\",\"W\",\"X\",\"Y\",\"Z\",\"a\",\"b\",\"c\",\"d\",\"e\",\"\",\"\",\"\"],E:\"Opera\",F:{\"0\":1405987200,\"1\":1409616000,\"2\":1413331200,\"3\":1417132800,\"4\":1422316800,\"5\":1425945600,\"6\":1430179200,\"7\":1433808000,\"8\":1438646400,\"9\":1442448000,F:1150761600,QC:1223424000,RC:1251763200,SC:1267488000,TC:1277942400,B:1292457600,rB:1302566400,BC:1309219200,UC:1323129600,C:1323129600,sB:1352073600,G:1372723200,M:1377561600,N:1381104000,O:1386288000,x:1390867200,g:1393891200,y:1399334400,z:1401753600,AB:1445904000,BB:1449100800,CB:1454371200,DB:1457308800,EB:1462320000,FB:1465344000,GB:1470096000,HB:1474329600,IB:1477267200,JB:1481587200,KB:1486425600,LB:1490054400,MB:1494374400,NB:1498003200,OB:1502236800,PB:1506470400,QB:1510099200,RB:1515024000,SB:1517961600,TB:1521676800,UB:1525910400,VB:1530144000,WB:1534982400,XB:1537833600,YB:1543363200,ZB:1548201600,aB:1554768000,bB:1561593600,cB:1566259200,dB:1570406400,eB:1573689600,fB:1578441600,gB:1583971200,hB:1587513600,iB:1592956800,jB:1595894400,kB:1600128000,lB:1603238400,h:1613520000,mB:1612224000,nB:1616544000,oB:1619568000,pB:1623715200,qB:1627948800,P:1631577600,Q:1633392000,R:1635984000,xB:1638403200,S:1642550400,T:1644969600,U:1647993600,V:1650412800,W:1652745600,X:1654646400,Y:1657152000,Z:1660780800,a:1663113600,b:1668816000,c:1668643200,d:1671062400,e:1675209600},D:{F:\"o\",B:\"o\",C:\"o\",QC:\"o\",RC:\"o\",SC:\"o\",TC:\"o\",rB:\"o\",BC:\"o\",UC:\"o\",sB:\"o\"}},G:{A:{E:0,\"0B\":0,VC:0,CC:0.00156679,WC:0.00313358,XC:0.00313358,YC:0.0125343,ZC:0.00626717,aC:0.0172347,bC:0.0564045,cC:0.00470038,dC:0.0987079,eC:0.0250687,fC:0.0235019,gC:0.0219351,hC:0.394832,iC:0.0156679,jC:0.0360362,kC:0.0344694,lC:0.108109,mC:0.282023,nC:0.532709,oC:0.153546,\"3B\":0.195849,\"4B\":0.233452,\"5B\":0.412066,\"6B\":1.40071,tB:1.43988,\"7B\":3.51431,\"8B\":3.62556,\"9B\":2.04623,AC:0.00940075},B:\"webkit\",C:[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"0B\",\"VC\",\"CC\",\"WC\",\"XC\",\"YC\",\"E\",\"ZC\",\"aC\",\"bC\",\"cC\",\"dC\",\"eC\",\"fC\",\"gC\",\"hC\",\"iC\",\"jC\",\"kC\",\"lC\",\"mC\",\"nC\",\"oC\",\"3B\",\"4B\",\"5B\",\"6B\",\"tB\",\"7B\",\"8B\",\"9B\",\"AC\",\"\",\"\"],E:\"Safari on iOS\",F:{\"0B\":1270252800,VC:1283904000,CC:1299628800,WC:1331078400,XC:1359331200,YC:1394409600,E:1410912000,ZC:1413763200,aC:1442361600,bC:1458518400,cC:1473724800,dC:1490572800,eC:1505779200,fC:1522281600,gC:1537142400,hC:1553472000,iC:1568851200,jC:1572220800,kC:1580169600,lC:1585008000,mC:1600214400,nC:1619395200,oC:1632096000,\"3B\":1639353600,\"4B\":1647216000,\"5B\":1652659200,\"6B\":1658275200,tB:1662940800,\"7B\":1666569600,\"8B\":1670889600,\"9B\":1674432000,AC:null}},H:{A:{pC:0.993853},B:\"o\",C:[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"pC\",\"\",\"\",\"\"],E:\"Opera Mini\",F:{pC:1426464000}},I:{A:{uB:0,I:0.019696,H:0,qC:0,rC:0,sC:0,tC:0.0787838,CC:0.0689359,uC:0,vC:0.305287},B:\"webkit\",C:[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"qC\",\"rC\",\"sC\",\"uB\",\"I\",\"tC\",\"CC\",\"uC\",\"vC\",\"H\",\"\",\"\",\"\"],E:\"Android Browser\",F:{qC:1256515200,rC:1274313600,sC:1291593600,uB:1298332800,I:1318896000,tC:1341792000,CC:1374624000,uC:1386547200,vC:1401667200,H:1678147200}},J:{A:{D:0,A:0},B:\"webkit\",C:[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"D\",\"A\",\"\",\"\",\"\"],E:\"Blackberry Browser\",F:{D:1325376000,A:1359504000}},K:{A:{A:0,B:0,C:0,h:0.0111391,rB:0,BC:0,sB:0},B:\"o\",C:[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"A\",\"B\",\"rB\",\"BC\",\"C\",\"sB\",\"h\",\"\",\"\",\"\"],E:\"Opera Mobile\",F:{A:1287100800,B:1300752000,rB:1314835200,BC:1318291200,C:1330300800,sB:1349740800,h:1673827200},D:{h:\"webkit\"}},L:{A:{H:42.629},B:\"webkit\",C:[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"H\",\"\",\"\",\"\"],E:\"Chrome for Android\",F:{H:1678147200}},M:{A:{f:0.294672},B:\"moz\",C:[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"f\",\"\",\"\",\"\"],E:\"Firefox for Android\",F:{f:1676332800}},N:{A:{A:0.0115934,B:0.022664},B:\"ms\",C:[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"A\",\"B\",\"\",\"\",\"\"],E:\"IE Mobile\",F:{A:1340150400,B:1353456000}},O:{A:{wC:0.896294},B:\"webkit\",C:[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"wC\",\"\",\"\",\"\"],E:\"UC Browser for Android\",F:{wC:1634688000},D:{wC:\"webkit\"}},P:{A:{I:0.166372,g:0,xC:0.0103543,yC:0.010304,zC:0.0519911,\"0C\":0.0103584,\"1C\":0.0104443,\"1B\":0.0105043,\"2C\":0.0311947,\"3C\":0.0103982,\"4C\":0.0311947,\"5C\":0.0311947,\"6C\":0.0207965,tB:0.0727876,\"7C\":0.0727876,\"8C\":0.0935841,\"9C\":1.32057},B:\"webkit\",C:[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"I\",\"xC\",\"yC\",\"zC\",\"0C\",\"1C\",\"1B\",\"2C\",\"3C\",\"4C\",\"5C\",\"6C\",\"tB\",\"7C\",\"8C\",\"9C\",\"g\",\"\",\"\",\"\"],E:\"Samsung Internet\",F:{I:1461024000,xC:1481846400,yC:1509408000,zC:1528329600,\"0C\":1546128000,\"1C\":1554163200,\"1B\":1567900800,\"2C\":1582588800,\"3C\":1593475200,\"4C\":1605657600,\"5C\":1618531200,\"6C\":1629072000,tB:1640736000,\"7C\":1651708800,\"8C\":1659657600,\"9C\":1667260800,g:1677369600}},Q:{A:{\"2B\":0.12278},B:\"webkit\",C:[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"2B\",\"\",\"\",\"\"],E:\"QQ Browser\",F:{\"2B\":1663718400}},R:{A:{AD:0},B:\"webkit\",C:[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"AD\",\"\",\"\",\"\"],E:\"Baidu Browser\",F:{AD:1663027200}},S:{A:{BD:0.079807,CD:0},B:\"moz\",C:[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"BD\",\"CD\",\"\",\"\",\"\"],E:\"KaiOS Browser\",F:{BD:1527811200,CD:1631664000}}};\n/data/regions/WF.js\u000fMmodule.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0.01835,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.1346,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0.03977,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0.01835,\"108\":0,\"109\":0.81369,\"110\":0.52309,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0.09789,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0.09789,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0,\"108\":0.15601,\"109\":1.68857,\"110\":0.9697,\"111\":0,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0.05812,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0.60262,\"108\":0.01835,\"109\":1.20219,\"110\":0.56286},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0.01835,\"13.1\":0,\"14.1\":0.23248,\"15.1\":0.07648,\"15.2-15.3\":0.27225,\"15.4\":0.01835,\"15.5\":0.01835,\"15.6\":0.07648,\"16.0\":0.11624,\"16.1\":0.15601,\"16.2\":0.23248,\"16.3\":0.87487,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0,\"10.0-10.2\":0,\"10.3\":0,\"11.0-11.2\":0,\"11.3-11.4\":0,\"12.0-12.1\":0,\"12.2-12.5\":0.08439,\"13.0-13.1\":0,\"13.2\":0,\"13.3\":0,\"13.4-13.7\":0,\"14.0-14.4\":0.08439,\"14.5-14.8\":1.7799,\"15.0-15.1\":0.50789,\"15.2-15.3\":3.64573,\"15.4\":0,\"15.5\":0.16878,\"15.6\":0.42349,\"16.0\":2.2034,\"16.1\":2.03461,\"16.2\":1.18609,\"16.3\":2.37371,\"16.4\":0},P:{\"4\":0,\"20\":3.00315,\"5.0-5.4\":0.19148,\"6.2-6.4\":0,\"7.2-7.4\":0.06047,\"8.2\":0,\"9.2\":0,\"10.1\":0,\"11.1-11.2\":0,\"12.0\":0,\"13.0\":0,\"14.0\":0.06047,\"15.0\":0,\"16.0\":0,\"17.0\":0,\"18.0\":0.06047,\"19.0\":2.17678},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0,\"4.4\":0,\"4.4.3-4.4.4\":0.25247},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.01835,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0},H:{\"0\":0.11828},L:{\"0\":68.30736},R:{_:\"0\"},M:{\"0\":0},Q:{\"13.1\":0}};\n0/data/features/mdn-css-unicode-bidi-plaintext.js\u0005module.exports={A:{D:{\"1\":\"PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB\"},L:{\"1\":\"H\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"1\":\"RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB I w J D E F FC GC\",\"33\":\"0 1 2 3 4 5 6 7 8 9 A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB\"},M:{\"1\":\"f\"},A:{\"2\":\"J D E F A B DC\"},F:{\"1\":\"CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB QC RC SC TC rB BC UC sB\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},E:{\"1\":\"B C K L G rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"I w IC 0B JC PC\",\"33\":\"J D E F A KC LC MC 1B\"},G:{\"1\":\"eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC CC WC\",\"33\":\"E XC YC ZC aC bC cC dC\"},P:{\"1\":\"g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"}},B:6,C:\"plaintext from unicode-bidi\"};\n/data/regions/SI.js\fmodule.exports={C:{\"52\":0.12074,\"60\":0.10976,\"68\":0.02195,\"76\":0.00549,\"78\":0.13171,\"83\":0.01098,\"88\":0.01098,\"91\":0.01098,\"97\":0.01098,\"99\":0.01646,\"100\":0.01098,\"102\":0.1372,\"103\":0.01098,\"104\":0.01098,\"105\":0.01646,\"106\":0.03842,\"107\":0.02195,\"108\":0.89454,\"109\":3.96234,\"110\":2.40374,_:\"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 53 54 55 56 57 58 59 61 62 63 64 65 66 67 69 70 71 72 73 74 75 77 79 80 81 82 84 85 86 87 89 90 92 93 94 95 96 98 101 111 112 3.5 3.6\"},D:{\"49\":0.0439,\"51\":0.03293,\"70\":0.00549,\"78\":0.02744,\"79\":0.03842,\"80\":0.01098,\"81\":0.00549,\"83\":0.02195,\"84\":0.01098,\"85\":0.06037,\"86\":0.01646,\"87\":0.01646,\"88\":0.01098,\"89\":0.02744,\"90\":0.01098,\"91\":0.01098,\"92\":0.08781,\"94\":0.01098,\"96\":0.01098,\"97\":0.02744,\"98\":0.10427,\"99\":0.01098,\"100\":0.02195,\"101\":0.01098,\"102\":0.02744,\"103\":0.10976,\"104\":0.10427,\"105\":0.04939,\"106\":0.06586,\"107\":0.0933,\"108\":0.69698,\"109\":20.22328,\"110\":13.29742,\"111\":0.01098,_:\"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 50 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 71 72 73 74 75 76 77 93 95 112 113\"},F:{\"28\":0.01098,\"36\":0.00549,\"46\":0.01646,\"49\":0.00549,\"93\":0.12074,\"94\":1.07565,\"95\":0.64758,_:\"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 33 34 35 37 38 39 40 41 42 43 44 45 47 48 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1\",\"10.0-10.1\":0},B:{\"92\":0.00549,\"98\":0.00549,\"103\":0.01098,\"104\":0.00549,\"105\":0.01098,\"107\":0.05488,\"108\":0.0933,\"109\":2.40923,\"110\":3.08426,_:\"12 13 14 15 16 17 18 79 80 81 83 84 85 86 87 88 89 90 91 93 94 95 96 97 99 100 101 102 106\"},E:{\"4\":0,\"13\":0.01646,\"14\":0.05488,\"15\":0.01098,_:\"0 5 6 7 8 9 10 11 12 3.1 3.2 5.1 6.1 7.1 9.1 10.1 11.1 16.4\",\"12.1\":0.01098,\"13.1\":0.12622,\"14.1\":0.19757,\"15.1\":0.01098,\"15.2-15.3\":0.04939,\"15.4\":0.05488,\"15.5\":0.0933,\"15.6\":0.38965,\"16.0\":0.12622,\"16.1\":0.25245,\"16.2\":0.53234,\"16.3\":0.55978},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0.01332,\"10.0-10.2\":0,\"10.3\":0.01211,\"11.0-11.2\":0.00363,\"11.3-11.4\":0.00242,\"12.0-12.1\":0.00847,\"12.2-12.5\":0.09686,\"13.0-13.1\":0.00363,\"13.2\":0.00484,\"13.3\":0.00726,\"13.4-13.7\":0.05327,\"14.0-14.4\":0.14407,\"14.5-14.8\":0.37653,\"15.0-15.1\":0.06538,\"15.2-15.3\":0.08354,\"15.4\":0.15376,\"15.5\":0.30025,\"15.6\":1.07389,\"16.0\":1.84995,\"16.1\":3.03765,\"16.2\":2.54974,\"16.3\":1.68045,\"16.4\":0.00969},P:{\"4\":0.08272,\"20\":1.05474,\"5.0-5.4\":0.03048,\"6.2-6.4\":0.04064,\"7.2-7.4\":0.26414,\"8.2\":0.01016,\"9.2\":0.02068,\"10.1\":0.03048,\"11.1-11.2\":0.01034,\"12.0\":0.03048,\"13.0\":0.01034,\"14.0\":0.04136,\"15.0\":0.03102,\"16.0\":0.04136,\"17.0\":0.0517,\"18.0\":0.12409,\"19.0\":1.97505},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.00376,\"4.2-4.3\":0.01128,\"4.4\":0,\"4.4.3-4.4.4\":0.03009},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"11\":0.06586,_:\"6 7 8 9 10 5.5\"},N:{\"10\":0.03712,\"11\":0.07423},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.00903},H:{\"0\":0.188},L:{\"0\":30.45174},R:{_:\"0\"},M:{\"0\":0.36104},Q:{\"13.1\":0}};\n(/data/features/contentsecuritypolicy2.js\u0006\u000fmodule.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L\",\"4100\":\"G M N O\"},C:{\"1\":\"MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 EC uB I w J D E F A B C K L G M N O x g y z FC GC\",\"132\":\"8 9 AB BB\",\"260\":\"CB\",\"516\":\"DB EB FB GB HB IB JB KB LB\"},D:{\"1\":\"HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB\",\"1028\":\"DB EB FB\",\"2052\":\"GB\"},E:{\"1\":\"A B C K L G 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F IC 0B JC KC LC MC\"},F:{\"1\":\"4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F B C G M N O x g y z QC RC SC TC rB BC UC sB\",\"1028\":\"0 1 2\",\"2052\":\"3\"},G:{\"1\":\"cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:2,C:\"Content Security Policy Level 2\"};\n\"/data/features/web-app-manifest.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M\",\"130\":\"N O\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\",\"578\":\"oB pB qB P Q R xB S T U\"},D:{\"1\":\"GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB\"},E:{\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC\",\"4\":\"AC\",\"260\":\"fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"2\":\"BD CD\"}},B:5,C:\"Add to home screen (A2HS)\"};\n/data/regions/VA.js\u000fmodule.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.00976,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0.05856,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.06832,\"79\":0,\"80\":0,\"81\":0,\"82\":0.00976,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.00976,\"94\":0.00976,\"95\":0,\"96\":0.06832,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0.18544,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0,\"108\":0.2928,\"109\":6.18784,\"110\":4.0504,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0.00976,\"67\":0.10736,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0.00976,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":1.00528,\"94\":0,\"95\":0.71248,\"96\":0,\"97\":0.01952,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0.02928,\"104\":0,\"105\":0,\"106\":0.00976,\"107\":0,\"108\":0.45872,\"109\":37.7224,\"110\":25.41504,\"111\":0,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.00976,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0.0488,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0.0488,\"16\":0,\"17\":0.01952,\"18\":1.09312,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0,\"108\":0.01952,\"109\":6.36352,\"110\":7.62256},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0.10736,\"15\":0,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0.06832,\"12.1\":0.00976,\"13.1\":0.1464,\"14.1\":0.05856,\"15.1\":0.00976,\"15.2-15.3\":0.00976,\"15.4\":0.01952,\"15.5\":0.01952,\"15.6\":0.06832,\"16.0\":0.47824,\"16.1\":0.37088,\"16.2\":0.32208,\"16.3\":0.98576,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0,\"10.0-10.2\":0,\"10.3\":0,\"11.0-11.2\":0,\"11.3-11.4\":0,\"12.0-12.1\":0,\"12.2-12.5\":0.38233,\"13.0-13.1\":0,\"13.2\":0,\"13.3\":0,\"13.4-13.7\":0,\"14.0-14.4\":0,\"14.5-14.8\":0,\"15.0-15.1\":0,\"15.2-15.3\":0.00961,\"15.4\":0,\"15.5\":0.01902,\"15.6\":0.00961,\"16.0\":0.02864,\"16.1\":0.56399,\"16.2\":0.34408,\"16.3\":0.62127,\"16.4\":0},P:{\"4\":0,\"20\":0.03091,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0,\"8.2\":0,\"9.2\":0,\"10.1\":0,\"11.1-11.2\":0,\"12.0\":0,\"13.0\":0,\"14.0\":0,\"15.0\":0,\"16.0\":0,\"17.0\":0,\"18.0\":0,\"19.0\":0.11333},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0,\"4.4\":0,\"4.4.3-4.4.4\":0},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.13664,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0},H:{\"0\":0.005},L:{\"0\":3.17408},R:{_:\"0\"},M:{\"0\":0.0108},Q:{\"13.1\":0}};\n!/data/features/document-policy.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"2\":\"C K L G M N O P Q R S T\",\"132\":\"U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T\",\"132\":\"U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB QC RC SC TC rB BC UC sB\",\"132\":\"kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I qC rC sC tC CC uC vC\",\"132\":\"H\"},J:{\"2\":\"D A\"},K:{\"2\":\"A B C rB BC sB\",\"132\":\"h\"},L:{\"132\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"2\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"2\":\"2B\"},R:{\"132\":\"AD\"},S:{\"2\":\"BD CD\"}},B:7,C:\"Document Policy\"};\n#/data/features/css-width-stretch.js\u0005smodule.exports={A:{D:{\"2\":\"I w J D E F A B C K L G M N O x g y\",\"33\":\"0 1 2 3 4 5 6 7 8 9 z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},L:{\"33\":\"H\"},B:{\"2\":\"C K L G M N O\",\"33\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"2\":\"EC\",\"33\":\"0 1 2 3 4 5 6 7 8 9 uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},M:{\"33\":\"f\"},A:{\"2\":\"J D E F A B DC\"},F:{\"2\":\"F B C QC RC SC TC rB BC UC sB\",\"33\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\"},K:{\"2\":\"A B C rB BC sB\",\"33\":\"h\"},E:{\"2\":\"I w J IC 0B JC KC PC\",\"33\":\"D E F A B C K L G LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC\"},G:{\"2\":\"0B VC CC WC XC\",\"33\":\"E YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},P:{\"2\":\"I\",\"33\":\"g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},I:{\"2\":\"uB I qC rC sC tC CC\",\"33\":\"H uC vC\"}},B:6,C:\"width: stretch property\"};\n/data/features/datalist.js\u0005module.exports={A:{A:{\"2\":\"DC\",\"8\":\"J D E F\",\"260\":\"A B\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"260\":\"C K L G\",\"1284\":\"M N O\"},C:{\"1\":\"f H yB zB\",\"8\":\"EC uB FC GC\",\"516\":\"o p q r s t u v\",\"4612\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n\"},D:{\"1\":\"iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"8\":\"I w J D E F A B C K L G M N O x\",\"132\":\"0 1 2 3 4 5 6 7 8 9 g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB\"},E:{\"1\":\"K L G sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"8\":\"I w J D E F A B C IC 0B JC KC LC MC 1B rB\"},F:{\"1\":\"F B C dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\",\"132\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB\"},G:{\"8\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC\",\"2049\":\"hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H vC\",\"8\":\"uB I qC rC sC tC CC uC\"},J:{\"1\":\"A\",\"8\":\"D\"},K:{\"1\":\"A B C h rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"8\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"2\":\"BD CD\"}},B:1,C:\"Datalist element\"};\n/data/features/ambient-light.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"2\":\"C K\",\"132\":\"L G M N O\",\"322\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"2\":\"EC uB I w J D E F A B C K L G M N O x g y FC GC\",\"132\":\"0 1 2 3 4 5 6 7 8 9 z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB\",\"194\":\"aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\"},D:{\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB\",\"322\":\"ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB QC RC SC TC rB BC UC sB\",\"322\":\"h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"2\":\"A B C h rB BC sB\"},L:{\"2\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"2\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"2\":\"2B\"},R:{\"2\":\"AD\"},S:{\"132\":\"BD CD\"}},B:4,C:\"Ambient Light Sensor\"};\n/data/regions/TM.js\fmodule.exports={C:{\"41\":0.01098,\"43\":0.00732,\"46\":0.0183,\"48\":0.0183,\"50\":0.04757,\"51\":0.04025,\"63\":0.00732,\"65\":0.00732,\"67\":0.01464,\"68\":0.00732,\"70\":0.02195,\"78\":0.0183,\"85\":0.17197,\"88\":0.01464,\"90\":0.01464,\"91\":0.0183,\"102\":0.00732,\"104\":0.00732,\"108\":0.00732,\"109\":0.34761,\"110\":0.06586,_:\"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 42 44 45 47 49 52 53 54 55 56 57 58 59 60 61 62 64 66 69 71 72 73 74 75 76 77 79 80 81 82 83 84 86 87 89 92 93 94 95 96 97 98 99 100 101 103 105 106 107 111 112 3.5 3.6\"},D:{\"44\":0.00732,\"49\":0.01464,\"61\":0.02927,\"65\":0.00732,\"66\":0.00732,\"67\":0.00732,\"73\":0.05123,\"77\":0.03293,\"78\":0.01098,\"79\":0.12807,\"80\":0.02195,\"81\":0.0183,\"84\":0.01464,\"86\":0.03293,\"87\":0.00732,\"88\":0.15368,\"89\":0.01464,\"91\":0.03293,\"92\":0.02195,\"93\":0.0183,\"94\":0.02927,\"95\":0.00732,\"96\":0.0183,\"97\":0.02927,\"98\":0.04757,\"99\":0.0183,\"100\":0.13904,\"101\":0.03659,\"102\":0.04757,\"103\":0.05123,\"104\":0.01098,\"105\":0.12441,\"106\":0.06586,\"107\":0.33663,\"108\":0.53056,\"109\":24.60678,\"110\":3.63339,_:\"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 45 46 47 48 50 51 52 53 54 55 56 57 58 59 60 62 63 64 68 69 70 71 72 74 75 76 83 85 90 111 112 113\"},F:{\"42\":0.00732,\"62\":0.00732,\"65\":0.00732,\"73\":0.01464,\"75\":0.00732,\"79\":0.00732,\"82\":0.00732,\"85\":0.06586,\"86\":0.00732,\"93\":0.0183,\"94\":0.10977,\"95\":0.15734,_:\"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 63 64 66 67 68 69 70 71 72 74 76 77 78 80 81 83 84 87 88 89 90 91 92 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1\",\"10.0-10.1\":0},B:{\"84\":0.01098,\"88\":0.00732,\"89\":0.04757,\"90\":0.00732,\"92\":0.03293,\"99\":0.04025,\"108\":0.00732,\"109\":0.05123,\"110\":0.09879,_:\"12 13 14 15 16 17 18 79 80 81 83 85 86 87 91 93 94 95 96 97 98 100 101 102 103 104 105 106 107\"},E:{\"4\":0,\"8\":0.01098,\"9\":0.00732,_:\"0 5 6 7 10 11 12 13 14 15 3.1 3.2 5.1 7.1 10.1 11.1 12.1 13.1 15.1 15.2-15.3 15.4 15.5 16.4\",\"6.1\":0.00732,\"9.1\":0.01098,\"14.1\":0.00732,\"15.6\":0.0183,\"16.0\":0.01464,\"16.1\":0.04025,\"16.2\":0.01098,\"16.3\":0.13538},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0,\"10.0-10.2\":0,\"10.3\":0,\"11.0-11.2\":0,\"11.3-11.4\":0,\"12.0-12.1\":0.00285,\"12.2-12.5\":0.13858,\"13.0-13.1\":0,\"13.2\":0,\"13.3\":0.00285,\"13.4-13.7\":0.00285,\"14.0-14.4\":0.01397,\"14.5-14.8\":0.01397,\"15.0-15.1\":0.01369,\"15.2-15.3\":0.53523,\"15.4\":0.03336,\"15.5\":0.01397,\"15.6\":0.06644,\"16.0\":1.01513,\"16.1\":0.35786,\"16.2\":0.20531,\"16.3\":0.3744,\"16.4\":0},P:{\"4\":0.11125,\"20\":0.21239,\"5.0-5.4\":0.01011,\"6.2-6.4\":0.03084,\"7.2-7.4\":0.23262,\"8.2\":0.01016,\"9.2\":0.0103,\"10.1\":0.01011,\"11.1-11.2\":0.03034,\"12.0\":0.07134,\"13.0\":0.12137,\"14.0\":0.04112,\"15.0\":0.03034,\"16.0\":0.13148,\"17.0\":0.09103,\"18.0\":0.06068,\"19.0\":0.5057},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0.00149,\"4.4\":0,\"4.4.3-4.4.4\":0.01119},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"10\":0.0805,_:\"6 7 8 9 11 5.5\"},N:{\"10\":0.03712,\"11\":0.07423},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.20294},H:{\"0\":0.07805},L:{\"0\":60.48154},R:{_:\"0\"},M:{\"0\":0.01903},Q:{\"13.1\":0}};\n/data/regions/GI.js\u0010Amodule.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.00919,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0,\"106\":0.05516,\"107\":0.05516,\"108\":0.08275,\"109\":0.23904,\"110\":0.08275,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0.01839,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0.00919,\"69\":0,\"70\":0.00919,\"71\":0.00919,\"72\":0.00919,\"73\":0,\"74\":0.00919,\"75\":0,\"76\":0,\"77\":0.00919,\"78\":0.00919,\"79\":0.00919,\"80\":0.00919,\"81\":0.00919,\"83\":0,\"84\":0.00919,\"85\":0.00919,\"86\":0.00919,\"87\":0.00919,\"88\":0.00919,\"89\":0.00919,\"90\":0.00919,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0.00919,\"99\":0.00919,\"100\":0.00919,\"101\":0.02758,\"102\":0,\"103\":0.02758,\"104\":0,\"105\":0,\"106\":0.00919,\"107\":0.01839,\"108\":75.41838,\"109\":3.03402,\"110\":1.78364,\"111\":0,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.04597,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.01839,\"94\":0.12872,\"95\":0.01839,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0.00919,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0.02758,\"108\":0.00919,\"109\":0.73552,\"110\":0.62519},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.03678,\"14\":0.03678,\"15\":0,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0.04597,\"10.1\":0,\"11.1\":0,\"12.1\":0,\"13.1\":0.00919,\"14.1\":0.08275,\"15.1\":0.01839,\"15.2-15.3\":0.00919,\"15.4\":0.00919,\"15.5\":0.17469,\"15.6\":0.24824,\"16.0\":0.02758,\"16.1\":0.06436,\"16.2\":0.24824,\"16.3\":0.13791,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0,\"8.1-8.4\":0,\"9.0-9.2\":0.00162,\"9.3\":0.03392,\"10.0-10.2\":0.00565,\"10.3\":0.04442,\"11.0-11.2\":0.01454,\"11.3-11.4\":0.00242,\"12.0-12.1\":0.00888,\"12.2-12.5\":0.1171,\"13.0-13.1\":0.01292,\"13.2\":0.00323,\"13.3\":0.00646,\"13.4-13.7\":0.021,\"14.0-14.4\":0.05411,\"14.5-14.8\":0.15667,\"15.0-15.1\":0.01454,\"15.2-15.3\":0.0856,\"15.4\":0.13325,\"15.5\":0.1066,\"15.6\":0.72117,\"16.0\":0.94649,\"16.1\":2.08923,\"16.2\":2.0755,\"16.3\":0.96587,\"16.4\":0.00162},P:{\"4\":0.01032,\"20\":0.20639,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0,\"8.2\":0,\"9.2\":0,\"10.1\":0,\"11.1-11.2\":0,\"12.0\":0,\"13.0\":0,\"14.0\":0,\"15.0\":0,\"16.0\":0,\"17.0\":0,\"18.0\":0.01032,\"19.0\":0.40246},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0,\"4.4\":0,\"4.4.3-4.4.4\":0.04242},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0},H:{\"0\":0.07402},L:{\"0\":6.92284},R:{_:\"0\"},M:{\"0\":0.06932},Q:{\"13.1\":0}};\n/data/features/dom-range.js\u0005module.exports={A:{A:{\"1\":\"F A B\",\"2\":\"DC\",\"8\":\"J D E\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\"},G:{\"1\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"1\":\"pC\"},I:{\"1\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"1\":\"D A\"},K:{\"1\":\"A B C h rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:1,C:\"Document Object Model Range\"};\n/data/features/url.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 EC uB I w J D E F A B C K L G M N O x g y z FC GC\"},D:{\"1\":\"9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"I w J D E F A B C K L G M N O x g y z\",\"130\":\"0 1 2 3 4 5 6 7 8\"},E:{\"1\":\"E F A B C K L G LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J IC 0B JC KC\",\"130\":\"D\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F B C QC RC SC TC rB BC UC sB\",\"130\":\"G M N O\"},G:{\"1\":\"E ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC CC WC XC\",\"130\":\"YC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H vC\",\"2\":\"uB I qC rC sC tC CC\",\"130\":\"uC\"},J:{\"2\":\"D\",\"130\":\"A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:1,C:\"URL API\"};\n(/data/features/keyboardevent-charcode.js\u0005module.exports={A:{A:{\"1\":\"F A B\",\"2\":\"J D E DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\",\"16\":\"EC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"I w J D E F A B C K L G JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"16\":\"IC 0B\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e sB\",\"2\":\"F B QC RC SC TC rB BC UC\",\"16\":\"C\"},G:{\"1\":\"E WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"16\":\"0B VC CC\"},H:{\"2\":\"pC\"},I:{\"1\":\"uB I H sC tC CC uC vC\",\"16\":\"qC rC\"},J:{\"1\":\"D A\"},K:{\"1\":\"h sB\",\"2\":\"A B rB BC\",\"16\":\"C\"},L:{\"1\":\"H\"},M:{\"130\":\"f\"},N:{\"130\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:7,C:\"KeyboardEvent.charCode\"};\n\"/data/features/beforeafterprint.js\u0005module.exports={A:{A:{\"1\":\"J D E F A B\",\"16\":\"DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB I w FC GC\"},D:{\"1\":\"cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB\"},E:{\"1\":\"K L G 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A B C IC 0B JC KC LC MC 1B rB sB\"},F:{\"1\":\"RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB QC RC SC TC rB BC UC sB\"},G:{\"1\":\"iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"16\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"16\":\"A B\"},O:{\"1\":\"wC\"},P:{\"2\":\"g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"16\":\"I\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:1,C:\"Printing Events\"};\n#/data/features/css-initial-value.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"33\":\"I w J D E F A B C K L G M N O FC GC\",\"164\":\"EC uB\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"I w J D E F A B C K L G 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"16\":\"IC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F B C QC RC SC TC rB BC UC sB\"},G:{\"1\":\"E VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"16\":\"0B\"},H:{\"2\":\"pC\"},I:{\"1\":\"uB I H sC tC CC uC vC\",\"16\":\"qC rC\"},J:{\"1\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:4,C:\"CSS initial value\"};\n/data/features/av1.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"2\":\"C K L G M N\",\"194\":\"O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB FC GC\",\"66\":\"WB XB YB ZB vB aB wB bB cB dB\",\"260\":\"eB\",\"516\":\"fB\"},D:{\"1\":\"jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB\",\"66\":\"gB hB iB\"},E:{\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB QC RC SC TC rB BC UC sB\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1090\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I xC yC zC 0C 1C 1B 2C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"2\":\"BD CD\"}},B:6,C:\"AV1 video format\"};\n/data/features/imports.js\u0005module.exports={A:{A:{\"2\":\"J D E F DC\",\"8\":\"A B\"},B:{\"1\":\"P\",\"2\":\"Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"8\":\"C K L G M N O\"},C:{\"2\":\"0 1 2 3 4 5 6 EC uB I w J D E F A B C K L G M N O x g y z FC GC\",\"8\":\"7 8 XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"72\":\"9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB\"},D:{\"1\":\"DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P\",\"2\":\"0 1 2 3 4 5 6 I w J D E F A B C K L G M N O x g y z Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"66\":\"7 8 9 AB BB\",\"72\":\"CB\"},E:{\"2\":\"I w IC 0B JC\",\"8\":\"J D E F A B C K L G KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB\",\"2\":\"F B C G M gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\",\"66\":\"N O x g y\",\"72\":\"z\"},G:{\"2\":\"0B VC CC WC XC\",\"8\":\"E YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"2\":\"A B C h rB BC sB\"},L:{\"2\":\"H\"},M:{\"8\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I xC yC zC 0C 1C 1B 2C 3C\",\"2\":\"g 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"2\":\"AD\"},S:{\"1\":\"BD\",\"8\":\"CD\"}},B:5,C:\"HTML Imports\"};\n/data/regions/AW.js\u0010dmodule.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.0277,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.00693,\"79\":0,\"80\":0,\"81\":0,\"82\":0.00346,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0.00693,\"102\":0.01039,\"103\":0.00346,\"104\":0.00346,\"105\":0,\"106\":0,\"107\":0.00693,\"108\":0.00346,\"109\":0.26319,\"110\":0.13506,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0.01732,\"50\":0,\"51\":0,\"52\":0,\"53\":0.00346,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0.02424,\"80\":0.00346,\"81\":0.00346,\"83\":0.00346,\"84\":0.00346,\"85\":0,\"86\":0,\"87\":0.00346,\"88\":0,\"89\":0,\"90\":0,\"91\":0.00346,\"92\":0,\"93\":0.00346,\"94\":0,\"95\":0.00346,\"96\":0.00346,\"97\":0,\"98\":0.00346,\"99\":0,\"100\":0,\"101\":0,\"102\":0.00346,\"103\":0.05887,\"104\":0.00346,\"105\":0.01039,\"106\":0.00346,\"107\":0.04156,\"108\":0.22163,\"109\":3.92704,\"110\":1.9843,\"111\":0,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0.00346,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.01732,\"94\":0.17315,\"95\":0.07619,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00346,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0.00346,\"106\":0,\"107\":0.00693,\"108\":0.01732,\"109\":0.69606,\"110\":1.08046},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0.0277,\"15\":0.00693,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0.02424,\"13.1\":0.0658,\"14.1\":0.16969,\"15.1\":0.0277,\"15.2-15.3\":0.12121,\"15.4\":0.11082,\"15.5\":0.10389,\"15.6\":0.61641,\"16.0\":0.03117,\"16.1\":0.30128,\"16.2\":0.65104,\"16.3\":0.31513,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0.0127,\"10.0-10.2\":0,\"10.3\":0.02964,\"11.0-11.2\":0,\"11.3-11.4\":0.00847,\"12.0-12.1\":0.01694,\"12.2-12.5\":0.40645,\"13.0-13.1\":0,\"13.2\":0.00847,\"13.3\":0.01694,\"13.4-13.7\":0.08891,\"14.0-14.4\":0.19053,\"14.5-14.8\":0.87642,\"15.0-15.1\":0.11432,\"15.2-15.3\":0.24133,\"15.4\":0.28791,\"15.5\":0.97803,\"15.6\":2.96797,\"16.0\":4.76737,\"16.1\":10.92347,\"16.2\":13.12086,\"16.3\":5.195,\"16.4\":0.03811},P:{\"4\":0.05171,\"20\":2.42015,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0.18617,\"8.2\":0,\"9.2\":0,\"10.1\":0,\"11.1-11.2\":0.06206,\"12.0\":0.01034,\"13.0\":0.03103,\"14.0\":0.03103,\"15.0\":0.03103,\"16.0\":0.04137,\"17.0\":0.05171,\"18.0\":0.15514,\"19.0\":4.2301},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0,\"4.4\":0,\"4.4.3-4.4.4\":0.13467},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.00693,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.08498},H:{\"0\":0.08045},L:{\"0\":37.30099},R:{_:\"0\"},M:{\"0\":0.28109},Q:{\"13.1\":0}};\n&/data/features/css-deviceadaptation.js\u0005module.exports={A:{A:{\"2\":\"J D E F DC\",\"164\":\"A B\"},B:{\"66\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"164\":\"C K L G M N O\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"2\":\"0 1 2 3 4 5 I w J D E F A B C K L G M N O x g y z\",\"66\":\"6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB QC RC SC TC rB BC UC sB\",\"66\":\"HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"292\":\"pC\"},I:{\"2\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"2\":\"A h\",\"292\":\"B C rB BC sB\"},L:{\"2\":\"H\"},M:{\"2\":\"f\"},N:{\"164\":\"A B\"},O:{\"2\":\"wC\"},P:{\"2\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"66\":\"2B\"},R:{\"2\":\"AD\"},S:{\"2\":\"BD CD\"}},B:5,C:\"CSS Device Adaptation\"};\n/data/regions/LR.js\u0011module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0.00243,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0.00243,\"76\":0,\"77\":0,\"78\":0.00243,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0.00243,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0.00243,\"90\":0,\"91\":0.00243,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0.00487,\"103\":0,\"104\":0.0146,\"105\":0,\"106\":0.0073,\"107\":0.00243,\"108\":0.06572,\"109\":0.18498,\"110\":0.09979,\"111\":0.00243,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0.00487,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0.0073,\"50\":0.00243,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0.00487,\"57\":0,\"58\":0,\"59\":0.00243,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0.00243,\"65\":0.00487,\"66\":0,\"67\":0,\"68\":0.00243,\"69\":0,\"70\":0.00243,\"71\":0.00974,\"72\":0,\"73\":0,\"74\":0.0146,\"75\":0.00487,\"76\":0.00487,\"77\":0.00243,\"78\":0,\"79\":0.00243,\"80\":0.00487,\"81\":0.0073,\"83\":0.00243,\"84\":0.00243,\"85\":0,\"86\":0.00243,\"87\":0.00243,\"88\":0.00243,\"89\":0,\"90\":0.00487,\"91\":0.0073,\"92\":0.00974,\"93\":0.04138,\"94\":0.00974,\"95\":0,\"96\":0.00487,\"97\":0.00243,\"98\":0.00243,\"99\":0.00487,\"100\":0.00243,\"101\":0.00243,\"102\":0.00974,\"103\":0.04138,\"104\":0.00243,\"105\":0.00974,\"106\":0.00487,\"107\":0.02191,\"108\":0.05598,\"109\":1.06122,\"110\":0.71803,\"111\":0.01704,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0.00243,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0.00243,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0.00243,\"58\":0,\"60\":0.04625,\"62\":0,\"63\":0.05111,\"64\":0.02191,\"65\":0.04868,\"66\":0.07302,\"67\":0.18985,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0.0073,\"73\":0,\"74\":0.00487,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0.00243,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0.05355,\"95\":0.1071,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0.00243,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0.02191},B:{\"12\":0.0146,\"13\":0.00487,\"14\":0.0073,\"15\":0.00243,\"16\":0.0073,\"17\":0.00243,\"18\":0.02677,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0.00243,\"85\":0.00974,\"86\":0,\"87\":0,\"88\":0,\"89\":0.00243,\"90\":0.0073,\"91\":0,\"92\":0.0146,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0.00243,\"100\":0.00243,\"101\":0.00243,\"102\":0,\"103\":0.00243,\"104\":0.00487,\"105\":0.00243,\"106\":0.00243,\"107\":0.02191,\"108\":0.07545,\"109\":0.31642,\"110\":0.27504},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.00487,\"14\":0.00243,\"15\":0,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0.00243,\"12.1\":0.01217,\"13.1\":0.01704,\"14.1\":0.00974,\"15.1\":0.00243,\"15.2-15.3\":0.00243,\"15.4\":0,\"15.5\":0.00974,\"15.6\":0.01947,\"16.0\":0.00243,\"16.1\":0.00243,\"16.2\":0.03894,\"16.3\":0.01704,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0.00758,\"7.0-7.1\":0.00455,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0.06216,\"10.0-10.2\":0,\"10.3\":0.04245,\"11.0-11.2\":0.00758,\"11.3-11.4\":0.02578,\"12.0-12.1\":3.92397,\"12.2-12.5\":1.03558,\"13.0-13.1\":0.42302,\"13.2\":0.01668,\"13.3\":0.12433,\"13.4-13.7\":0.4397,\"14.0-14.4\":0.9719,\"14.5-14.8\":1.0841,\"15.0-15.1\":0.46093,\"15.2-15.3\":0.56555,\"15.4\":0.41999,\"15.5\":0.50945,\"15.6\":0.78692,\"16.0\":0.53674,\"16.1\":1.36915,\"16.2\":0.70049,\"16.3\":1.00222,\"16.4\":0},P:{\"4\":0.02056,\"20\":0.2364,\"5.0-5.4\":0.03084,\"6.2-6.4\":0.01028,\"7.2-7.4\":0.05139,\"8.2\":0,\"9.2\":0.02056,\"10.1\":0,\"11.1-11.2\":0.13362,\"12.0\":0,\"13.0\":0.01028,\"14.0\":0.03084,\"15.0\":0.02056,\"16.0\":0.08223,\"17.0\":0.04111,\"18.0\":0.04111,\"19.0\":0.35974},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0.00644,\"4.4\":0,\"4.4.3-4.4.4\":0.10631},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0.00243,\"11\":0.00974,\"5.5\":0},N:{\"10\":0.01513,\"11\":0},S:{\"2.5\":0.18915,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.93062},H:{\"0\":6.8335},L:{\"0\":69.16245},R:{_:\"0\"},M:{\"0\":0.3783},Q:{\"13.1\":0}};\n&/data/features/css-overflow-overlay.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"16\":\"I w J D E F A B C K L\"},E:{\"1\":\"I w J D E F A B JC KC LC MC 1B rB\",\"16\":\"IC 0B\",\"130\":\"C K L G sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F B C QC RC SC TC rB BC UC sB\"},G:{\"1\":\"E VC CC WC XC YC ZC aC bC cC dC eC fC\",\"16\":\"0B\",\"130\":\"gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"1\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"16\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"2\":\"BD CD\"}},B:7,C:\"CSS overflow: overlay\"};\n/data/features/gamepad.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 EC uB I w J D E F A B C K L G M N O x g y z FC GC\"},D:{\"1\":\"2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"I w J D E F A B C K L G M N O x g\",\"33\":\"0 1 y z\"},E:{\"1\":\"B C K L G 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A IC 0B JC KC LC MC\"},F:{\"1\":\"1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 F B C G M N O x g y z QC RC SC TC rB BC UC sB\"},G:{\"1\":\"dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"2\":\"BD\"}},B:5,C:\"Gamepad API\"};\n/data/features/accelerometer.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"1\":\"gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB\",\"194\":\"ZB vB aB wB bB cB dB eB fB\"},E:{\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB QC RC SC TC rB BC UC sB\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"2\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"2\":\"BD CD\"}},B:4,C:\"Accelerometer\"};\n//data/features/mdn-text-decoration-shorthand.js\u0005umodule.exports={A:{D:{\"1\":\"YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB\"},L:{\"1\":\"H\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB I w FC GC\"},M:{\"1\":\"f\"},A:{\"2\":\"J D E F A B DC\"},F:{\"1\":\"LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB QC RC SC TC rB BC UC sB\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},E:{\"2\":\"I w J D IC 0B JC KC LC PC\",\"33\":\"E F A B C K L G MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC\"},G:{\"2\":\"0B VC CC WC XC YC\",\"33\":\"E ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},P:{\"1\":\"g zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I xC yC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"}},B:6,C:\"text-decoration shorthand property\"};\n/data/regions/MM.js\u0012\u0014module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0.00327,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0.00327,\"48\":0,\"49\":0.00327,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0.00327,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0.02613,\"67\":0,\"68\":0.00327,\"69\":0,\"70\":0,\"71\":0,\"72\":0.00653,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.00327,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0.00327,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0.00327,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00327,\"93\":0.00327,\"94\":0.00327,\"95\":0.00327,\"96\":0,\"97\":0.00327,\"98\":0,\"99\":0.00327,\"100\":0.00327,\"101\":0.00327,\"102\":0.02613,\"103\":0.00653,\"104\":0.0098,\"105\":0.0098,\"106\":0.02286,\"107\":0.0196,\"108\":0.03593,\"109\":0.62381,\"110\":0.48663,\"111\":0.0196,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.00327,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0.00327,\"32\":0.00327,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0.00327,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0.00327,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0.00327,\"62\":0.00653,\"63\":0.00327,\"64\":0,\"65\":0,\"66\":0,\"67\":0.0098,\"68\":0.00327,\"69\":0.00327,\"70\":0.00327,\"71\":0.0098,\"72\":0.00327,\"73\":0,\"74\":0.02286,\"75\":0,\"76\":0.00653,\"77\":0,\"78\":0.00653,\"79\":0.0098,\"80\":0.0098,\"81\":0.01633,\"83\":0.00653,\"84\":0.00327,\"85\":0.00327,\"86\":0.00327,\"87\":0.00653,\"88\":0.0098,\"89\":0.0098,\"90\":0.00327,\"91\":0.00327,\"92\":0.03919,\"93\":0.00327,\"94\":0.00327,\"95\":0.00327,\"96\":0.00653,\"97\":0.00653,\"98\":0.00327,\"99\":0.00653,\"100\":0.01633,\"101\":0.0098,\"102\":0.01306,\"103\":0.02613,\"104\":0.0098,\"105\":0.0196,\"106\":0.01633,\"107\":0.03266,\"108\":0.11431,\"109\":3.23661,\"110\":2.31233,\"111\":0.0098,\"112\":0.0098,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0.00653,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0.00327,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0.00327,\"65\":0,\"66\":0.00327,\"67\":0.02286,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0.00327,\"74\":0.00327,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0.00327,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.00653,\"94\":0.08818,\"95\":0.07512,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0.00653,\"13\":0,\"14\":0.00327,\"15\":0,\"16\":0.00327,\"17\":0.00327,\"18\":0.01633,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0.00327,\"85\":0,\"86\":0,\"87\":0.00327,\"88\":0,\"89\":0.00327,\"90\":0.00327,\"91\":0,\"92\":0.01306,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0.0098,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0.00653,\"106\":0,\"107\":0.0098,\"108\":0.02286,\"109\":0.36906,\"110\":0.53889},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.00653,\"12\":0,\"13\":0.00327,\"14\":0.01633,\"15\":0.00653,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0.00653,\"13.1\":0.03266,\"14.1\":0.03919,\"15.1\":0.03266,\"15.2-15.3\":0.00653,\"15.4\":0.01633,\"15.5\":0.04246,\"15.6\":0.16983,\"16.0\":0.02613,\"16.1\":0.08818,\"16.2\":0.17636,\"16.3\":0.11431,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0.00686,\"6.0-6.1\":0.00229,\"7.0-7.1\":0.01373,\"8.1-8.4\":0.01716,\"9.0-9.2\":0.00572,\"9.3\":0.10179,\"10.0-10.2\":0.00915,\"10.3\":0.11094,\"11.0-11.2\":0.00915,\"11.3-11.4\":0.00572,\"12.0-12.1\":0.00343,\"12.2-12.5\":0.51469,\"13.0-13.1\":0.00801,\"13.2\":0.00458,\"13.3\":0.0183,\"13.4-13.7\":0.11438,\"14.0-14.4\":0.20473,\"14.5-14.8\":0.34884,\"15.0-15.1\":0.14526,\"15.2-15.3\":0.13039,\"15.4\":0.14869,\"15.5\":0.43691,\"15.6\":0.74229,\"16.0\":1.22381,\"16.1\":1.9398,\"16.2\":2.0599,\"16.3\":1.83686,\"16.4\":0.00915},P:{\"4\":0.16678,\"20\":0.39611,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0.03127,\"8.2\":0,\"9.2\":0,\"10.1\":0,\"11.1-11.2\":0.03127,\"12.0\":0,\"13.0\":0.02085,\"14.0\":0.03127,\"15.0\":0.01042,\"16.0\":0.02085,\"17.0\":0.0417,\"18.0\":0.07297,\"19.0\":0.6984},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.00369,\"4.2-4.3\":0.02217,\"4.4\":0,\"4.4.3-4.4.4\":0.50434},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0.0042,\"9\":0,\"10\":0,\"11\":0.02519,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":2.45118},H:{\"0\":0.5164},L:{\"0\":71.89648},R:{_:\"0\"},M:{\"0\":0.20875},Q:{\"13.1\":0.0404}};\n0/data/features/keyboardevent-getmodifierstate.js\u0005module.exports={A:{A:{\"1\":\"F A B\",\"2\":\"J D E DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB I w J D E F A B C K L FC GC\"},D:{\"1\":\"7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 I w J D E F A B C K L G M N O x g y z\"},E:{\"1\":\"B C K L G 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A IC 0B JC KC LC MC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e sB\",\"2\":\"F B G M QC RC SC TC rB BC UC\",\"16\":\"C\"},G:{\"1\":\"dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H uC vC\",\"2\":\"uB I qC rC sC tC CC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h sB\",\"2\":\"A B rB BC\",\"16\":\"C\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:5,C:\"KeyboardEvent.getModifierState()\"};\n/data/regions/FK.js\u000fmodule.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0.02817,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0.09859,\"104\":0.01408,\"105\":0.01408,\"106\":0,\"107\":0.02817,\"108\":0.91898,\"109\":1.00701,\"110\":1.11968,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0.05282,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0.00704,\"104\":0,\"105\":0.01408,\"106\":0,\"107\":0,\"108\":0.04577,\"109\":2.25344,\"110\":1.38023,\"111\":0,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0.20774,\"95\":0.0669,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0.1338,\"79\":0,\"80\":0.03873,\"81\":0,\"83\":0,\"84\":0.02817,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0.04577,\"92\":0.02817,\"93\":0.00704,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0.00704,\"101\":0,\"102\":0.00704,\"103\":0.10563,\"104\":0.02113,\"105\":0,\"106\":0,\"107\":0,\"108\":0.05986,\"109\":1.54572,\"110\":1.16545},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.26055,\"14\":0.01408,\"15\":0,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0,\"13.1\":0,\"14.1\":0.01408,\"15.1\":0,\"15.2-15.3\":0,\"15.4\":0.01408,\"15.5\":0,\"15.6\":0.15845,\"16.0\":0,\"16.1\":0.01408,\"16.2\":0.12676,\"16.3\":0.50702,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0.08236,\"7.0-7.1\":0,\"8.1-8.4\":0.05412,\"9.0-9.2\":0,\"9.3\":0.02824,\"10.0-10.2\":0,\"10.3\":0,\"11.0-11.2\":0,\"11.3-11.4\":0,\"12.0-12.1\":0,\"12.2-12.5\":0.38119,\"13.0-13.1\":0,\"13.2\":0,\"13.3\":0,\"13.4-13.7\":0,\"14.0-14.4\":0.05412,\"14.5-14.8\":0.46355,\"15.0-15.1\":0.1906,\"15.2-15.3\":0.27295,\"15.4\":0.24472,\"15.5\":0.13648,\"15.6\":4.73431,\"16.0\":1.22358,\"16.1\":4.81431,\"16.2\":2.99306,\"16.3\":6.50144,\"16.4\":0},P:{\"4\":0,\"20\":4.38028,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0,\"8.2\":0,\"9.2\":0.02047,\"10.1\":0,\"11.1-11.2\":0,\"12.0\":0,\"13.0\":0,\"14.0\":7.55291,\"15.0\":0,\"16.0\":0,\"17.0\":0,\"18.0\":0.04094,\"19.0\":7.48127},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0,\"4.4\":0,\"4.4.3-4.4.4\":0},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.08098,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0},H:{\"0\":0},L:{\"0\":38.2088},R:{_:\"0\"},M:{\"0\":0.97833},Q:{\"13.1\":0}};\n/data/features/css-zoom.js\u0005module.exports={A:{A:{\"1\":\"J D DC\",\"129\":\"E F A B\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"I w J D E F A B C K L G JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"IC 0B\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F B C QC RC SC TC rB BC UC sB\"},G:{\"1\":\"E VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B\"},H:{\"2\":\"pC\"},I:{\"1\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"1\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"2\":\"f\"},N:{\"129\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"2\":\"BD CD\"}},B:7,C:\"CSS zoom\"};\n/data/regions/ZA.js\u0011module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0.00216,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.00432,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0.00216,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0.00216,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0.00216,\"88\":0.00216,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0.00216,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0.00216,\"101\":0,\"102\":0.00432,\"103\":0.00216,\"104\":0.00216,\"105\":0.00216,\"106\":0.00216,\"107\":0.00432,\"108\":0.00864,\"109\":0.1404,\"110\":0.08424,\"111\":0.00216,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0.00216,\"50\":0.00216,\"51\":0,\"52\":0.00216,\"53\":0,\"54\":0,\"55\":0.00216,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0.00216,\"67\":0.00216,\"68\":0,\"69\":0.00216,\"70\":0.00216,\"71\":0,\"72\":0,\"73\":0,\"74\":0.00216,\"75\":0,\"76\":0.00216,\"77\":0,\"78\":0.00216,\"79\":0.00432,\"80\":0.00216,\"81\":0.0108,\"83\":0.00216,\"84\":0.00216,\"85\":0,\"86\":0.00216,\"87\":0.00216,\"88\":0.00432,\"89\":0,\"90\":0.00216,\"91\":0.00216,\"92\":0.0108,\"93\":0.00216,\"94\":0.00216,\"95\":0.00216,\"96\":0.00216,\"97\":0.00216,\"98\":0.00216,\"99\":0.00216,\"100\":0.00432,\"101\":0.00432,\"102\":0.00216,\"103\":0.01296,\"104\":0.00432,\"105\":0.00432,\"106\":0.00648,\"107\":0.01296,\"108\":0.05832,\"109\":1.52496,\"110\":0.81216,\"111\":0,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0.00216,\"27\":0,\"28\":0.00432,\"29\":0,\"30\":0,\"31\":0,\"32\":0.00216,\"33\":0,\"34\":0,\"35\":0.00216,\"36\":0,\"37\":0,\"38\":0.00216,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0.00216,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0.00216,\"52\":0,\"53\":0,\"54\":0.00216,\"55\":0,\"56\":0.00216,\"57\":0.00216,\"58\":0.00432,\"60\":0.0108,\"62\":0.00216,\"63\":0.02592,\"64\":0.01296,\"65\":0.00864,\"66\":0.07992,\"67\":0.21168,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0.00216,\"74\":0.00432,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.00216,\"94\":0.03672,\"95\":0.03024,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0.00216},B:{\"12\":0.00216,\"13\":0,\"14\":0,\"15\":0.00216,\"16\":0,\"17\":0.00216,\"18\":0.00432,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00216,\"93\":0,\"94\":0,\"95\":0.00216,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0.00216,\"106\":0.00216,\"107\":0.00648,\"108\":0.0108,\"109\":0.22248,\"110\":0.27432},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.00216,\"14\":0.00648,\"15\":0.00216,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0.00216,\"12.1\":0.00216,\"13.1\":0.0108,\"14.1\":0.01728,\"15.1\":0.00216,\"15.2-15.3\":0.00216,\"15.4\":0.00432,\"15.5\":0.01296,\"15.6\":0.06048,\"16.0\":0.00864,\"16.1\":0.0216,\"16.2\":0.06264,\"16.3\":0.04104,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0.00158,\"6.0-6.1\":0.00792,\"7.0-7.1\":0.00792,\"8.1-8.4\":0.00792,\"9.0-9.2\":0.00158,\"9.3\":0.07917,\"10.0-10.2\":0,\"10.3\":0.04117,\"11.0-11.2\":0.00317,\"11.3-11.4\":0.01583,\"12.0-12.1\":0.00792,\"12.2-12.5\":0.46076,\"13.0-13.1\":0.019,\"13.2\":0.00317,\"13.3\":0.02692,\"13.4-13.7\":0.07442,\"14.0-14.4\":0.21375,\"14.5-14.8\":0.47659,\"15.0-15.1\":0.13142,\"15.2-15.3\":0.17259,\"15.4\":0.23275,\"15.5\":0.50668,\"15.6\":1.24452,\"16.0\":1.35852,\"16.1\":3.54356,\"16.2\":3.8254,\"16.3\":2.18187,\"16.4\":0.0095},P:{\"4\":0.20314,\"20\":2.40721,\"5.0-5.4\":0.01016,\"6.2-6.4\":0,\"7.2-7.4\":0.38597,\"8.2\":0.01016,\"9.2\":0.01016,\"10.1\":0.01016,\"11.1-11.2\":0.10157,\"12.0\":0.04063,\"13.0\":0.08126,\"14.0\":0.10157,\"15.0\":0.06094,\"16.0\":0.20314,\"17.0\":0.15236,\"18.0\":0.2133,\"19.0\":4.42846},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0.00737,\"4.4\":0,\"4.4.3-4.4.4\":0.04127},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.01728,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0.00784,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.51744},H:{\"0\":3.30297},L:{\"0\":65.76616},R:{_:\"0\"},M:{\"0\":0.5096},Q:{\"13.1\":0.00784}};\n/data/regions/PW.js\u000bzmodule.exports={C:{\"78\":0.01798,\"94\":0.00449,\"95\":0.00899,\"97\":0.00449,\"98\":0.00449,\"99\":0.00899,\"102\":0.02247,\"106\":0.42244,\"109\":0.87184,\"110\":0.46288,_:\"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 96 100 101 103 104 105 107 108 111 112 3.5 3.6\"},D:{\"43\":0.00449,\"47\":0.02696,\"49\":0.00449,\"58\":0.00899,\"69\":0.03595,\"70\":0.00449,\"78\":0.11684,\"79\":0.26515,\"83\":0.00449,\"86\":0.10336,\"87\":0.21122,\"89\":0.02696,\"90\":0.00449,\"91\":0.00899,\"93\":0.23818,\"94\":0.27413,\"95\":0.01798,\"100\":0.05842,\"102\":0.00449,\"103\":1.31674,\"104\":0.02696,\"105\":0.02696,\"107\":0.11235,\"108\":0.54377,\"109\":17.69737,\"110\":8.25098,_:\"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 44 45 46 48 50 51 52 53 54 55 56 57 59 60 61 62 63 64 65 66 67 68 71 72 73 74 75 76 77 80 81 84 85 88 92 96 97 98 99 101 106 111 112 113\"},F:{\"28\":0.03146,\"83\":0.00449,\"91\":0.00449,\"94\":0.03146,\"95\":0.05393,_:\"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 84 85 86 87 88 89 90 92 93 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1\",\"10.0-10.1\":0},B:{\"107\":0.00899,\"108\":0.0719,\"109\":1.99534,\"110\":4.26031,_:\"12 13 14 15 16 17 18 79 80 81 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106\"},E:{\"4\":0,\"11\":0.02247,\"12\":0.00899,\"14\":0.09887,_:\"0 5 6 7 8 9 10 13 15 3.1 3.2 5.1 6.1 7.1 9.1 10.1 11.1 16.4\",\"12.1\":0.00899,\"13.1\":0.00899,\"14.1\":0.45839,\"15.1\":0.00449,\"15.2-15.3\":0.00899,\"15.4\":0.00449,\"15.5\":0.05842,\"15.6\":0.91678,\"16.0\":0.00449,\"16.1\":0.55276,\"16.2\":2.28745,\"16.3\":0.18425},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0.00513,\"10.0-10.2\":0,\"10.3\":0.41728,\"11.0-11.2\":0.00513,\"11.3-11.4\":0,\"12.0-12.1\":0,\"12.2-12.5\":0.07525,\"13.0-13.1\":0,\"13.2\":0,\"13.3\":0,\"13.4-13.7\":0.0342,\"14.0-14.4\":0.13339,\"14.5-14.8\":0.41728,\"15.0-15.1\":0.0342,\"15.2-15.3\":0.19667,\"15.4\":0.69091,\"15.5\":0.26679,\"15.6\":0.773,\"16.0\":2.70551,\"16.1\":2.85772,\"16.2\":5.82488,\"16.3\":1.06202,\"16.4\":0},P:{\"4\":0.2888,\"20\":0.80505,\"5.0-5.4\":0.01042,\"6.2-6.4\":0.0206,\"7.2-7.4\":0.16948,\"8.2\":0.02044,\"9.2\":0.12711,\"10.1\":0.0217,\"11.1-11.2\":0.01059,\"12.0\":0.01031,\"13.0\":0.11652,\"14.0\":0.05157,\"15.0\":0.04126,\"16.0\":0.23723,\"17.0\":0.01059,\"18.0\":0.18566,\"19.0\":0.84742},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0,\"4.4\":0,\"4.4.3-4.4.4\":0},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"11\":0.00899,_:\"6 7 8 9 10 5.5\"},N:{\"10\":0.03712,\"11\":0.07423},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.60015},H:{\"0\":0.05213},L:{\"0\":35.63063},R:{_:\"0\"},M:{\"0\":1.91058},Q:{\"13.1\":0}};\n/data/features/css-all.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"1\":\"4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 EC uB I w J D E F A B C K L G M N O x g y z FC GC\"},D:{\"1\":\"EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB\"},E:{\"1\":\"A B C K L G MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F IC 0B JC KC LC\"},F:{\"1\":\"1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 F B C G M N O x g y z QC RC SC TC rB BC UC sB\"},G:{\"1\":\"bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H vC\",\"2\":\"uB I qC rC sC tC CC uC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:2,C:\"CSS all property\"};\n/data/regions/SA.js\u0010module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0.00224,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0.00224,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0.00224,\"108\":0.00447,\"109\":0.09168,\"110\":0.04919,\"111\":0.00224,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0.00224,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0.00224,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0.00224,\"69\":0.00224,\"70\":0,\"71\":0.00224,\"72\":0.00224,\"73\":0,\"74\":0.00224,\"75\":0,\"76\":0.00224,\"77\":0,\"78\":0,\"79\":0.00671,\"80\":0,\"81\":0.00224,\"83\":0.00224,\"84\":0.00224,\"85\":0.00224,\"86\":0.00447,\"87\":0.00447,\"88\":0.00447,\"89\":0.00224,\"90\":0,\"91\":0.00224,\"92\":0.02012,\"93\":0.00447,\"94\":0.00224,\"95\":0.00224,\"96\":0.00224,\"97\":0.00224,\"98\":0.00224,\"99\":0.00671,\"100\":0.00224,\"101\":0.00224,\"102\":0.00447,\"103\":0.01342,\"104\":0.00447,\"105\":0.00894,\"106\":0.00894,\"107\":0.02012,\"108\":0.06708,\"109\":1.95203,\"110\":1.14036,\"111\":0.00224,\"112\":0.00224,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0.00224,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.00447,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0.00224,\"80\":0,\"81\":0,\"82\":0.00224,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.00447,\"94\":0.03801,\"95\":0.01789,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0.00224,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00224,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0.00224,\"104\":0,\"105\":0.00224,\"106\":0.00224,\"107\":0.01342,\"108\":0.03801,\"109\":0.23254,\"110\":0.26385},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.00447,\"14\":0.01789,\"15\":0.00447,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0.00671,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0,\"13.1\":0.00894,\"14.1\":0.03354,\"15.1\":0.01118,\"15.2-15.3\":0.00447,\"15.4\":0.01565,\"15.5\":0.04472,\"15.6\":0.12298,\"16.0\":0.01565,\"16.1\":0.0805,\"16.2\":0.10733,\"16.3\":0.08273,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0.01604,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0.05214,\"10.0-10.2\":0,\"10.3\":0.08423,\"11.0-11.2\":0,\"11.3-11.4\":0,\"12.0-12.1\":0.04011,\"12.2-12.5\":0.50941,\"13.0-13.1\":0.04011,\"13.2\":0.02808,\"13.3\":0.09627,\"13.4-13.7\":0.24869,\"14.0-14.4\":1.24746,\"14.5-14.8\":1.68467,\"15.0-15.1\":0.60969,\"15.2-15.3\":0.68189,\"15.4\":0.90651,\"15.5\":1.70071,\"15.6\":3.77847,\"16.0\":5.39093,\"16.1\":7.40451,\"16.2\":7.68128,\"16.3\":6.00864,\"16.4\":0.01203},P:{\"4\":0.04078,\"20\":0.60149,\"5.0-5.4\":0.01019,\"6.2-6.4\":0,\"7.2-7.4\":0.06117,\"8.2\":0,\"9.2\":0.01019,\"10.1\":0,\"11.1-11.2\":0.02039,\"12.0\":0,\"13.0\":0.04078,\"14.0\":0.03058,\"15.0\":0.02039,\"16.0\":0.06117,\"17.0\":0.05097,\"18.0\":0.07136,\"19.0\":1.16221},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0,\"4.4\":0,\"4.4.3-4.4.4\":0.07789},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.02012,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":1.26553},H:{\"0\":0.20581},L:{\"0\":52.26376},R:{_:\"0\"},M:{\"0\":0.06988},Q:{\"13.1\":0}};\n!/data/features/x-frame-options.js\u0005module.exports={A:{A:{\"1\":\"E F A B\",\"2\":\"J D DC\"},B:{\"1\":\"C K L G M N O\",\"4\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB\",\"4\":\"I w J D E F A B C K L G M N jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"16\":\"EC uB FC GC\"},D:{\"4\":\"3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"16\":\"0 1 2 I w J D E F A B C K L G M N O x g y z\"},E:{\"4\":\"J D E F A B C K L G JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"16\":\"I w IC 0B\"},F:{\"4\":\"0 1 2 3 4 5 6 7 8 9 C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e UC sB\",\"16\":\"F B QC RC SC TC rB BC\"},G:{\"4\":\"E YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"16\":\"0B VC CC WC XC\"},H:{\"2\":\"pC\"},I:{\"4\":\"I H tC CC uC vC\",\"16\":\"uB qC rC sC\"},J:{\"4\":\"D A\"},K:{\"4\":\"h sB\",\"16\":\"A B C rB BC\"},L:{\"4\":\"H\"},M:{\"4\":\"f\"},N:{\"1\":\"A B\"},O:{\"4\":\"wC\"},P:{\"4\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"4\":\"2B\"},R:{\"4\":\"AD\"},S:{\"1\":\"BD\",\"4\":\"CD\"}},B:6,C:\"X-Frame-Options HTTP header\"};\n/data/features/rel-noopener.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"1\":\"TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB FC GC\"},D:{\"1\":\"QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB\"},E:{\"1\":\"B C K L G 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A IC 0B JC KC LC MC\"},F:{\"1\":\"DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB QC RC SC TC rB BC UC sB\"},G:{\"1\":\"dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"2\":\"BD\"}},B:1,C:\"rel=noopener\"};\n/data/features/netinfo.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"2\":\"C K L G M N O\",\"1028\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB\",\"1028\":\"wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB QC RC SC TC rB BC UC sB\",\"1028\":\"PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"qC uC vC\",\"132\":\"uB I rC sC tC CC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"132\":\"I\",\"516\":\"xC yC zC\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"2\":\"CD\",\"260\":\"BD\"}},B:7,C:\"Network Information API\"};\n/data/features/border-image.js\u0006|module.exports={A:{A:{\"1\":\"B\",\"2\":\"J D E F A DC\"},B:{\"1\":\"L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"129\":\"C K\"},C:{\"1\":\"RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB\",\"260\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB\",\"804\":\"I w J D E F A B C K L FC GC\"},D:{\"1\":\"XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"260\":\"SB TB UB VB WB\",\"388\":\"7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB\",\"1412\":\"0 1 2 3 4 5 6 G M N O x g y z\",\"1956\":\"I w J D E F A B C K L\"},E:{\"1\":\"4B 5B 6B tB 7B 8B 9B AC PC\",\"129\":\"A B C K L G MC 1B rB sB 2B NC OC 3B\",\"1412\":\"J D E F KC LC\",\"1956\":\"I w IC 0B JC\"},F:{\"1\":\"KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F QC RC\",\"260\":\"FB GB HB IB JB\",\"388\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB\",\"1796\":\"SC TC\",\"1828\":\"B C rB BC UC sB\"},G:{\"1\":\"4B 5B 6B tB 7B 8B 9B AC\",\"129\":\"bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B\",\"1412\":\"E XC YC ZC aC\",\"1956\":\"0B VC CC WC\"},H:{\"1828\":\"pC\"},I:{\"1\":\"H\",\"388\":\"uC vC\",\"1956\":\"uB I qC rC sC tC CC\"},J:{\"1412\":\"A\",\"1924\":\"D\"},K:{\"1\":\"h\",\"2\":\"A\",\"1828\":\"B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"B\",\"2\":\"A\"},O:{\"1\":\"wC\"},P:{\"1\":\"g zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"260\":\"xC yC\",\"388\":\"I\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"260\":\"BD\"}},B:4,C:\"CSS3 Border images\"};\n$/data/features/css-letter-spacing.js\u0005module.exports={A:{A:{\"1\":\"F A B\",\"16\":\"DC\",\"132\":\"J D E\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"1\":\"7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"132\":\"0 1 2 3 4 5 6 I w J D E F A B C K L G M N O x g y z\"},E:{\"1\":\"D E F A B C K L G KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"16\":\"IC\",\"132\":\"I w J 0B JC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"16\":\"F QC\",\"132\":\"B C G M RC SC TC rB BC UC sB\"},G:{\"1\":\"E VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"16\":\"0B\"},H:{\"2\":\"pC\"},I:{\"1\":\"H uC vC\",\"16\":\"qC rC\",\"132\":\"uB I sC tC CC\"},J:{\"132\":\"D A\"},K:{\"1\":\"h\",\"132\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:2,C:\"letter-spacing CSS property\"};\n/data/features/webvtt.js\u0005module.exports={A:{A:{\"1\":\"A B\",\"2\":\"J D E F DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"2\":\"0 EC uB I w J D E F A B C K L G M N O x g y z FC GC\",\"66\":\"1 2 3 4 5 6 7\",\"129\":\"8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB\",\"257\":\"WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"I w J D E F A B C K L G M N\"},E:{\"1\":\"J D E F A B C K L G KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w IC 0B JC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F B C QC RC SC TC rB BC UC sB\"},G:{\"1\":\"E YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC CC WC XC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H uC vC\",\"2\":\"uB I qC rC sC tC CC\"},J:{\"1\":\"A\",\"2\":\"D\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"B\",\"2\":\"A\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"129\":\"BD CD\"}},B:4,C:\"WebVTT - Web Video Text Tracks\"};\n/data/regions/MC.js\u000fmodule.exports={C:{\"2\":0.01282,\"4\":0.02564,\"5\":0.00641,\"10\":0.01282,\"11\":0.01282,\"12\":0.00641,\"13\":0.01282,\"14\":0.00641,\"16\":0.01282,\"17\":0.01282,\"19\":0.00641,\"21\":0.00641,\"24\":0.01282,\"25\":0.01282,\"26\":0.01282,\"28\":0.01923,\"30\":0.01282,\"31\":0.02564,\"32\":0.00641,\"33\":0.01923,\"34\":0.00641,\"35\":0.01923,\"36\":0.01923,\"37\":0.01282,\"38\":0.01923,\"39\":0.05127,\"40\":0.04486,\"42\":0.01282,\"43\":0.00641,\"67\":0.0705,\"68\":0.07691,\"72\":0.07691,\"75\":0.39095,\"78\":0.48068,\"82\":0.07691,\"88\":0.03205,\"91\":0.09614,\"98\":0.41659,\"101\":0.03205,\"102\":0.26918,\"103\":0.00641,\"104\":0.03205,\"105\":0.00641,\"108\":0.03845,\"109\":2.34569,\"110\":1.26257,_:\"3 6 7 8 9 15 18 20 22 23 27 29 41 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 69 70 71 73 74 76 77 79 80 81 83 84 85 86 87 89 90 92 93 94 95 96 97 99 100 106 107 111 112\",\"3.5\":0.02564,\"3.6\":0.05127},D:{\"8\":0.00641,\"11\":0.01282,\"15\":0.01282,\"18\":0.00641,\"21\":0.01923,\"22\":0.01923,\"27\":0.01282,\"30\":0.00641,\"33\":0.01923,\"34\":0.01282,\"35\":0.01282,\"36\":0.01282,\"37\":0.01282,\"38\":0.01282,\"39\":0.06409,\"40\":0.05127,\"41\":0.03205,\"42\":0.01923,\"43\":0.08332,\"44\":0.12177,\"45\":0.08973,\"46\":0.06409,\"47\":0.07691,\"51\":0.01282,\"57\":0.01282,\"65\":0.00641,\"70\":0.05127,\"71\":0.08332,\"72\":0.01923,\"74\":0.01282,\"76\":0.08973,\"78\":0.01282,\"79\":0.55117,\"80\":0.13459,\"81\":0.43581,\"83\":0.03205,\"84\":0.03845,\"85\":1.18567,\"86\":0.06409,\"87\":1.1408,\"89\":0.00641,\"90\":0.01923,\"94\":0.01282,\"97\":0.00641,\"99\":0.01282,\"100\":0.01282,\"101\":0.01923,\"102\":0.01923,\"103\":1.69839,\"104\":0.22432,\"105\":1.87784,\"106\":0.73063,\"107\":0.29481,\"108\":1.52534,\"109\":12.67059,\"110\":11.13884,\"111\":0.04486,_:\"4 5 6 7 9 10 12 13 14 16 17 19 20 23 24 25 26 28 29 31 32 48 49 50 52 53 54 55 56 58 59 60 61 62 63 64 66 67 68 69 73 75 77 88 91 92 93 95 96 98 112 113\"},F:{\"19\":0.01282,\"31\":0.01282,\"32\":0.01282,\"33\":0.00641,\"65\":0.08332,\"88\":0.01282,\"94\":0.14741,\"95\":0.22432,_:\"9 11 12 15 16 17 18 20 21 22 23 24 25 26 27 28 29 30 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 89 90 91 92 93 9.5-9.6 10.5 11.1 11.6\",\"10.0-10.1\":0,\"10.6\":0.00641,\"11.5\":0.01282,\"12.1\":0.03845},B:{\"12\":0.01923,\"17\":0.05768,\"18\":0.17304,\"86\":0.01923,\"107\":0.01282,\"108\":0.08973,\"109\":3.15964,\"110\":2.07652,_:\"13 14 15 16 79 80 81 83 84 85 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106\"},E:{\"4\":0.01923,\"5\":0.03845,\"8\":0.01923,\"9\":0.03845,\"12\":0.30122,\"13\":0.00641,\"14\":0.3589,\"15\":0.03205,_:\"0 6 7 10 11 3.1 3.2 9.1 10.1 11.1 16.4\",\"5.1\":0.00641,\"6.1\":0.01282,\"7.1\":0.01282,\"12.1\":0.08973,\"13.1\":0.5704,\"14.1\":0.87162,\"15.1\":0.03845,\"15.2-15.3\":0.10254,\"15.4\":0.07691,\"15.5\":0.30122,\"15.6\":2.5636,\"16.0\":0.5704,\"16.1\":1.82016,\"16.2\":2.74305,\"16.3\":2.68537},G:{\"8\":0.01582,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0.02034,\"5.0-5.1\":0.00452,\"6.0-6.1\":0.00452,\"7.0-7.1\":0.06779,\"8.1-8.4\":0.13331,\"9.0-9.2\":0.01356,\"9.3\":0.0226,\"10.0-10.2\":0.03841,\"10.3\":0.0113,\"11.0-11.2\":0.04971,\"11.3-11.4\":0.06101,\"12.0-12.1\":0.02485,\"12.2-12.5\":0.34571,\"13.0-13.1\":0.00226,\"13.2\":0.00452,\"13.3\":0.0113,\"13.4-13.7\":0.0113,\"14.0-14.4\":0.15817,\"14.5-14.8\":0.43835,\"15.0-15.1\":0.27114,\"15.2-15.3\":0.32989,\"15.4\":0.46998,\"15.5\":0.49484,\"15.6\":2.16689,\"16.0\":2.68658,\"16.1\":6.01938,\"16.2\":5.09749,\"16.3\":2.3115,\"16.4\":0.01356},P:{\"4\":0.08606,\"20\":0.83913,\"5.0-5.4\":0.01042,\"6.2-6.4\":0.01076,\"7.2-7.4\":0.03096,\"8.2\":0.02044,\"9.2\":0.02064,\"10.1\":0.0217,\"11.1-11.2\":0.4626,\"12.0\":0.02048,\"13.0\":0.02064,\"14.0\":0.02064,\"15.0\":0.01019,\"16.0\":0.02152,\"17.0\":0.11834,\"18.0\":0.01076,\"19.0\":0.60245},I:{\"0\":0,\"3\":0.00197,\"4\":0.04134,\"2.1\":0.00689,\"2.2\":0.01723,\"2.3\":0.03691,\"4.1\":0.04626,\"4.2-4.3\":0.08022,\"4.4\":0,\"4.4.3-4.4.4\":0.21458},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0.01983,\"7\":0.0793,\"8\":0.7005,\"9\":0.16521,\"10\":0.13217,\"11\":0.52207,_:\"5.5\"},N:{\"10\":0.03712,\"11\":0.07423},S:{\"2.5\":0.00359,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0.02874},O:{\"0\":0.0898},H:{\"0\":0.04421},L:{\"0\":11.23026},R:{_:\"0\"},M:{\"0\":0.5388},Q:{\"13.1\":0}};\n /data/features/pagevisibility.js\u0005module.exports={A:{A:{\"1\":\"A B\",\"2\":\"J D E F DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB I w J D E F FC GC\",\"33\":\"A B C K L G M N\"},D:{\"1\":\"AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"I w J D E F A B C K\",\"33\":\"0 1 2 3 4 5 6 7 8 9 L G M N O x g y z\"},E:{\"1\":\"D E F A B C K L G KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J IC 0B JC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e sB\",\"2\":\"F B C QC RC SC TC rB BC UC\",\"33\":\"G M N O x\"},G:{\"1\":\"E YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC CC WC XC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC\",\"33\":\"uC vC\"},J:{\"1\":\"A\",\"2\":\"D\"},K:{\"1\":\"h sB\",\"2\":\"A B C rB BC\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"33\":\"I\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:2,C:\"Page Visibility\"};\n'/data/features/getboundingclientrect.js\u0006\u000fmodule.exports={A:{A:{\"644\":\"J D DC\",\"2049\":\"F A B\",\"2692\":\"E\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2049\":\"C K L G M N O\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC\",\"260\":\"I w J D E F A B\",\"1156\":\"uB\",\"1284\":\"FC\",\"1796\":\"GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"I w J D E F A B C K L G JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"16\":\"IC 0B\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e TC rB BC UC sB\",\"16\":\"F QC\",\"132\":\"RC SC\"},G:{\"1\":\"E VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"16\":\"0B\"},H:{\"1\":\"pC\"},I:{\"1\":\"uB I H sC tC CC uC vC\",\"16\":\"qC rC\"},J:{\"1\":\"D A\"},K:{\"1\":\"B C h rB BC sB\",\"132\":\"A\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2049\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:5,C:\"Element.getBoundingClientRect()\"};\n%/data/features/css-conic-gradients.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"1\":\"S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB FC GC\",\"578\":\"nB oB pB qB P Q R xB\"},D:{\"1\":\"iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB\",\"194\":\"vB aB wB bB cB dB eB fB gB hB\"},E:{\"1\":\"K L G sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A B C IC 0B JC KC LC MC 1B rB\"},F:{\"1\":\"dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB QC RC SC TC rB BC UC sB\",\"194\":\"NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB\"},G:{\"1\":\"hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I xC yC zC 0C 1C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"2\":\"BD\"}},B:5,C:\"CSS Conical Gradients\"};\n /data/features/css-namespaces.js\u0005module.exports={A:{A:{\"1\":\"F A B\",\"2\":\"J D E DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"I w J D E F A B C K L G JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"16\":\"IC 0B\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\"},G:{\"1\":\"E CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"16\":\"0B VC\"},H:{\"1\":\"pC\"},I:{\"1\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"1\":\"D A\"},K:{\"1\":\"A B C h rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:2,C:\"CSS namespaces\"};\n/data/features/let.js\u0005module.exports={A:{A:{\"2\":\"J D E F A DC\",\"2052\":\"B\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"194\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB FC GC\"},D:{\"1\":\"QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"I w J D E F A B C K L G M N O\",\"322\":\"0 1 2 3 4 5 6 7 8 9 x g y z AB BB CB DB EB FB GB HB\",\"516\":\"IB JB KB LB MB NB OB PB\"},E:{\"1\":\"B C K L G rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F IC 0B JC KC LC MC\",\"1028\":\"A 1B\"},F:{\"1\":\"DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F B C QC RC SC TC rB BC UC sB\",\"322\":\"0 1 2 3 4 G M N O x g y z\",\"516\":\"5 6 7 8 9 AB BB CB\"},G:{\"1\":\"eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC\",\"1028\":\"cC dC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"B\",\"2\":\"A\"},O:{\"1\":\"wC\"},P:{\"1\":\"g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"516\":\"I\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:6,C:\"let\"};\n/data/features/u2f.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"2\":\"C K L G M N O s t u v f H\",\"513\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r\"},C:{\"1\":\"gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB FC GC\",\"322\":\"OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB yB zB\"},D:{\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB s t u v f H yB zB HC\",\"130\":\"FB GB HB\",\"513\":\"IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j\",\"578\":\"k l m n o p q r\"},E:{\"1\":\"K L G 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A B C IC 0B JC KC LC MC 1B rB sB\"},F:{\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB IB QC RC SC TC rB BC UC sB\",\"513\":\"HB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\"},G:{\"1\":\"kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"2\":\"A B C h rB BC sB\"},L:{\"2\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"2\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"2\":\"2B\"},R:{\"2\":\"AD\"},S:{\"1\":\"CD\",\"322\":\"BD\"}},B:7,C:\"FIDO U2F API\"};\n/data/regions/HR.js\u0011module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.0287,\"53\":0,\"54\":0,\"55\":0,\"56\":0.00478,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0.00957,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.00957,\"79\":0,\"80\":0,\"81\":0.00478,\"82\":0,\"83\":0,\"84\":0.00478,\"85\":0,\"86\":0,\"87\":0,\"88\":0.00478,\"89\":0.01435,\"90\":0,\"91\":0.00478,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0.01435,\"100\":0,\"101\":0,\"102\":0.0287,\"103\":0.00478,\"104\":0.02392,\"105\":0.00957,\"106\":0.0287,\"107\":0.02392,\"108\":0.07175,\"109\":1.65492,\"110\":0.99965,\"111\":0.00478,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0.00478,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0.01913,\"50\":0,\"51\":0,\"52\":0,\"53\":0.00478,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0.00478,\"67\":0.00478,\"68\":0,\"69\":0.00478,\"70\":0.00478,\"71\":0,\"72\":0.00478,\"73\":0,\"74\":0,\"75\":0.00478,\"76\":0.00478,\"77\":0.03826,\"78\":0.00478,\"79\":0.05261,\"80\":0.00478,\"81\":0.05261,\"83\":0.00478,\"84\":0.00957,\"85\":0.00957,\"86\":0.01435,\"87\":0.01913,\"88\":0.00957,\"89\":0.00478,\"90\":0.01435,\"91\":0.00478,\"92\":0.01435,\"93\":0.00957,\"94\":0.00478,\"95\":0.00957,\"96\":0.04783,\"97\":0.01435,\"98\":0.00957,\"99\":0.00957,\"100\":0.01913,\"101\":0.02392,\"102\":0.00957,\"103\":0.03348,\"104\":0.00957,\"105\":0.04783,\"106\":0.03826,\"107\":0.09566,\"108\":0.29655,\"109\":9.04944,\"110\":5.64394,\"111\":0.00478,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0.00478,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0.00957,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.01435,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0.00478,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0.00478,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0.00478,\"92\":0.00478,\"93\":0.04783,\"94\":0.507,\"95\":0.40177,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0.07175,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0.00478,\"16\":0,\"17\":0.00478,\"18\":0.00478,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00478,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0.00478,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0.00478,\"106\":0,\"107\":0.00957,\"108\":0.0287,\"109\":0.6744,\"110\":0.86094},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.00478,\"14\":0.01435,\"15\":0,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0.00478,\"13.1\":0.02392,\"14.1\":0.04305,\"15.1\":0.00478,\"15.2-15.3\":0.00478,\"15.4\":0.00957,\"15.5\":0.02392,\"15.6\":0.13871,\"16.0\":0.01913,\"16.1\":0.03826,\"16.2\":0.13392,\"16.3\":0.12436,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0.00663,\"6.0-6.1\":0,\"7.0-7.1\":0.00265,\"8.1-8.4\":0.00265,\"9.0-9.2\":0,\"9.3\":0.10744,\"10.0-10.2\":0,\"10.3\":0.04377,\"11.0-11.2\":0.00531,\"11.3-11.4\":0.00796,\"12.0-12.1\":0.00796,\"12.2-12.5\":0.23611,\"13.0-13.1\":0.00265,\"13.2\":0,\"13.3\":0.01194,\"13.4-13.7\":0.06632,\"14.0-14.4\":0.15917,\"14.5-14.8\":0.47752,\"15.0-15.1\":0.10479,\"15.2-15.3\":0.1154,\"15.4\":0.17907,\"15.5\":0.46558,\"15.6\":1.14472,\"16.0\":1.42327,\"16.1\":3.24315,\"16.2\":3.07337,\"16.3\":1.74825,\"16.4\":0.00796},P:{\"4\":0.19266,\"20\":1.25735,\"5.0-5.4\":0.01014,\"6.2-6.4\":0,\"7.2-7.4\":0,\"8.2\":0,\"9.2\":0.01014,\"10.1\":0.01014,\"11.1-11.2\":0.03042,\"12.0\":0,\"13.0\":0.03042,\"14.0\":0.04056,\"15.0\":0.02028,\"16.0\":0.06084,\"17.0\":0.06084,\"18.0\":0.12168,\"19.0\":2.29162},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.00478,\"4.2-4.3\":0.02391,\"4.4\":0,\"4.4.3-4.4.4\":0.0813},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0.00478,\"9\":0,\"10\":0,\"11\":0.04305,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.04695},H:{\"0\":0.41489},L:{\"0\":57.7743},R:{_:\"0\"},M:{\"0\":0.31302},Q:{\"13.1\":0}};\n/data/regions/GW.js\u0010\u0015module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0.03851,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0.11938,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0.01155,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0,\"108\":0,\"109\":0.0154,\"110\":0.01926,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0.00385,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0.00385,\"41\":0,\"42\":0,\"43\":0.00385,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0.00385,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0.00385,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0.00385,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0.16559,\"78\":0,\"79\":0.00385,\"80\":0,\"81\":0.0154,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0.00385,\"90\":0,\"91\":0.0077,\"92\":0,\"93\":0.00385,\"94\":0,\"95\":0.00385,\"96\":0,\"97\":0.00385,\"98\":0,\"99\":0,\"100\":0.00385,\"101\":0,\"102\":0,\"103\":0.00385,\"104\":0.00385,\"105\":0,\"106\":0.0077,\"107\":0.01155,\"108\":0.01155,\"109\":7.95232,\"110\":2.06029,\"111\":0,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.0077,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0.00385,\"95\":0.04621,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0.00385,\"17\":0,\"18\":0.08472,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00385,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0.00385,\"108\":0.00385,\"109\":0.93964,\"110\":1.08598},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0,\"13.1\":0,\"14.1\":0,\"15.1\":0,\"15.2-15.3\":0,\"15.4\":0,\"15.5\":0,\"15.6\":0.04236,\"16.0\":0,\"16.1\":0,\"16.2\":0.00385,\"16.3\":0.00385,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0.15522,\"6.0-6.1\":0,\"7.0-7.1\":3.17793,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0.18402,\"10.0-10.2\":0.17602,\"10.3\":0,\"11.0-11.2\":0.37284,\"11.3-11.4\":0.0048,\"12.0-12.1\":0.55526,\"12.2-12.5\":0.84969,\"13.0-13.1\":0.31523,\"13.2\":0,\"13.3\":0.0176,\"13.4-13.7\":0.0256,\"14.0-14.4\":0.19202,\"14.5-14.8\":0.23202,\"15.0-15.1\":0.47525,\"15.2-15.3\":0.11681,\"15.4\":0.33764,\"15.5\":1.23213,\"15.6\":1.01611,\"16.0\":4.07722,\"16.1\":0.29603,\"16.2\":0.19522,\"16.3\":0.19202,\"16.4\":0},P:{\"4\":0.39417,\"20\":0.04043,\"5.0-5.4\":0.01011,\"6.2-6.4\":0.02021,\"7.2-7.4\":0.78834,\"8.2\":0,\"9.2\":0,\"10.1\":0,\"11.1-11.2\":0.10107,\"12.0\":0,\"13.0\":0,\"14.0\":0.01011,\"15.0\":0.11118,\"16.0\":0.03032,\"17.0\":0.01011,\"18.0\":0.03032,\"19.0\":0.21225},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.00183,\"4.2-4.3\":0,\"4.4\":0,\"4.4.3-4.4.4\":0.10519},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.00385,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0.47347,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.01845},H:{\"0\":0.75097},L:{\"0\":68.74355},R:{_:\"0\"},M:{\"0\":0.00615},Q:{\"13.1\":0}};\n/data/regions/SB.js\u0011\u0016module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0.00792,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0.00396,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00396,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0.03961,\"102\":0.01584,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0.00792,\"108\":0.00396,\"109\":0.50305,\"110\":0.87538,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.00792,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0.00396,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0.00792,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0.00396,\"76\":0,\"77\":0,\"78\":0.01188,\"79\":0.00396,\"80\":0,\"81\":0.00792,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0.01981,\"88\":0.00396,\"89\":0,\"90\":0.19013,\"91\":0,\"92\":0.00396,\"93\":0.00396,\"94\":0.01188,\"95\":0.00792,\"96\":0.00792,\"97\":0.00396,\"98\":0,\"99\":0.01188,\"100\":0.14656,\"101\":0,\"102\":0.01188,\"103\":2.85192,\"104\":0.04753,\"105\":0.01981,\"106\":0.01584,\"107\":0.02377,\"108\":0.21389,\"109\":3.21633,\"110\":2.29738,\"111\":0,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0.00396,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0.00792,\"64\":0.00396,\"65\":0.01981,\"66\":0,\"67\":0.05942,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0.13071,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0.00792,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0.03961,\"95\":0.05942,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0.00396},B:{\"12\":0,\"13\":0.08714,\"14\":0.00792,\"15\":0.00792,\"16\":0.01981,\"17\":0.06338,\"18\":0.02773,\"79\":0,\"80\":0.00396,\"81\":0,\"83\":0,\"84\":0.00792,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0.00792,\"90\":0,\"91\":0,\"92\":0.01981,\"93\":0,\"94\":0.00396,\"95\":0.00396,\"96\":0.00792,\"97\":0,\"98\":0,\"99\":0.00792,\"100\":0.01584,\"101\":0.05149,\"102\":0.00792,\"103\":0.02773,\"104\":0.01584,\"105\":0.01188,\"106\":0.00396,\"107\":0.04753,\"108\":0.07922,\"109\":0.60603,\"110\":0.75259},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0.00396,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0.02773,\"13.1\":0,\"14.1\":0.00792,\"15.1\":0.00396,\"15.2-15.3\":0,\"15.4\":0.00396,\"15.5\":0.01981,\"15.6\":0.16636,\"16.0\":0.00396,\"16.1\":0.00792,\"16.2\":0.0911,\"16.3\":0.03961,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0.0079,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0.00276,\"7.0-7.1\":0,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0.00513,\"10.0-10.2\":0,\"10.3\":0.02567,\"11.0-11.2\":0.00276,\"11.3-11.4\":0.00276,\"12.0-12.1\":0,\"12.2-12.5\":0.25868,\"13.0-13.1\":0.00513,\"13.2\":0,\"13.3\":0.02054,\"13.4-13.7\":0.10624,\"14.0-14.4\":0.12164,\"14.5-14.8\":0.13704,\"15.0-15.1\":0.06437,\"15.2-15.3\":0.08531,\"15.4\":0.24051,\"15.5\":0.16824,\"15.6\":0.35702,\"16.0\":0.27922,\"16.1\":0.47589,\"16.2\":0.65164,\"16.3\":0.42692,\"16.4\":0},P:{\"4\":0.07077,\"20\":0.24264,\"5.0-5.4\":0,\"6.2-6.4\":0.07077,\"7.2-7.4\":0.11121,\"8.2\":0.01011,\"9.2\":0.07077,\"10.1\":0,\"11.1-11.2\":0.06066,\"12.0\":0.01011,\"13.0\":0.02022,\"14.0\":0.07077,\"15.0\":0.06066,\"16.0\":0.21231,\"17.0\":0.06066,\"18.0\":0.11121,\"19.0\":1.98156},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0,\"4.4\":0,\"4.4.3-4.4.4\":0.09942},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.36441,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":4.99425},H:{\"0\":1.72664},L:{\"0\":67.84386},R:{_:\"0\"},M:{\"0\":1.0689},Q:{\"13.1\":0}};\n/data/regions/SK.js\u000e[module.exports={C:{\"33\":0.00985,\"47\":0.00985,\"52\":0.08863,\"66\":0.00492,\"68\":0.02954,\"69\":0.00985,\"70\":0.00492,\"72\":0.00492,\"73\":0.00492,\"74\":0.00492,\"75\":0.00492,\"76\":0.00492,\"78\":0.03447,\"79\":0.00985,\"80\":0.02462,\"81\":0.00492,\"82\":0.00492,\"83\":0.00492,\"88\":0.01477,\"91\":0.00985,\"97\":0.00492,\"99\":0.02462,\"101\":0.00985,\"102\":0.10833,\"103\":0.00985,\"104\":0.00985,\"105\":0.00985,\"106\":0.02462,\"107\":0.02462,\"108\":0.09848,\"109\":2.94948,\"110\":2.0927,\"111\":0.00985,_:\"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 34 35 36 37 38 39 40 41 42 43 44 45 46 48 49 50 51 53 54 55 56 57 58 59 60 61 62 63 64 65 67 71 77 84 85 86 87 89 90 92 93 94 95 96 98 100 112 3.5 3.6\"},D:{\"34\":0.01477,\"38\":0.05909,\"47\":0.01477,\"49\":0.06894,\"53\":0.02462,\"63\":0.08371,\"65\":0.00985,\"68\":0.05416,\"69\":0.03447,\"70\":0.02954,\"71\":0.03939,\"72\":0.04924,\"73\":0.01477,\"74\":0.04432,\"75\":0.03447,\"76\":0.02954,\"77\":0.02462,\"78\":0.04924,\"79\":0.43331,\"80\":0.05909,\"81\":0.06401,\"83\":0.05416,\"84\":0.06894,\"85\":0.09356,\"86\":0.12802,\"87\":0.1231,\"88\":0.06894,\"89\":0.06894,\"90\":0.15757,\"91\":0.10833,\"92\":0.10833,\"93\":0.1428,\"94\":0.09848,\"95\":0.00492,\"96\":0.0197,\"97\":0.01477,\"98\":0.0197,\"99\":0.0197,\"100\":0.02954,\"101\":0.00985,\"102\":0.01477,\"103\":0.08863,\"104\":0.02462,\"105\":0.09848,\"106\":0.03939,\"107\":0.07386,\"108\":0.56134,\"109\":16.58403,\"110\":9.76922,\"111\":0.00985,_:\"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 35 36 37 39 40 41 42 43 44 45 46 48 50 51 52 54 55 56 57 58 59 60 61 62 64 66 67 112 113\"},F:{\"28\":0.02462,\"36\":0.01477,\"46\":0.05416,\"53\":0.00985,\"54\":0.00985,\"55\":0.00985,\"58\":0.00985,\"70\":0.00985,\"85\":0.04432,\"90\":0.03939,\"91\":0.00985,\"93\":0.14772,\"94\":1.72832,\"95\":1.3738,_:\"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 33 34 35 37 38 39 40 41 42 43 44 45 47 48 49 50 51 52 56 57 60 62 63 64 65 66 67 68 69 71 72 73 74 75 76 77 78 79 80 81 82 83 84 86 87 88 89 92 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1\",\"10.0-10.1\":0},B:{\"18\":0.00985,\"79\":0.00492,\"80\":0.0197,\"81\":0.00985,\"83\":0.00985,\"84\":0.01477,\"85\":0.00492,\"86\":0.02462,\"87\":0.00985,\"88\":0.00985,\"89\":0.01477,\"90\":0.00985,\"91\":0.00985,\"92\":0.00492,\"105\":0.00492,\"107\":0.04432,\"108\":0.10833,\"109\":1.81696,\"110\":2.3586,_:\"12 13 14 15 16 17 93 94 95 96 97 98 99 100 101 102 103 104 106\"},E:{\"4\":0,\"13\":0.00492,\"14\":0.07878,\"15\":0.02462,_:\"0 5 6 7 8 9 10 11 12 3.1 3.2 5.1 6.1 7.1 10.1 11.1 16.4\",\"9.1\":0.25605,\"12.1\":0.01477,\"13.1\":0.05909,\"14.1\":0.1428,\"15.1\":0.02954,\"15.2-15.3\":0.02954,\"15.4\":0.04924,\"15.5\":0.09356,\"15.6\":0.3693,\"16.0\":0.04924,\"16.1\":0.21666,\"16.2\":0.4727,\"16.3\":0.43824},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0.01239,\"6.0-6.1\":0,\"7.0-7.1\":0.00248,\"8.1-8.4\":0,\"9.0-9.2\":0.00248,\"9.3\":0.08427,\"10.0-10.2\":0.00372,\"10.3\":0.07559,\"11.0-11.2\":0.01735,\"11.3-11.4\":0.00867,\"12.0-12.1\":0.01363,\"12.2-12.5\":0.18093,\"13.0-13.1\":0.00991,\"13.2\":0.01115,\"13.3\":0.01115,\"13.4-13.7\":0.06692,\"14.0-14.4\":0.13508,\"14.5-14.8\":0.26148,\"15.0-15.1\":0.08303,\"15.2-15.3\":0.10286,\"15.4\":0.1388,\"15.5\":0.25652,\"15.6\":0.73735,\"16.0\":1.4115,\"16.1\":2.98038,\"16.2\":2.99897,\"16.3\":2.04971,\"16.4\":0.02355},P:{\"4\":0.46046,\"20\":0.94184,\"5.0-5.4\":0.03107,\"6.2-6.4\":0,\"7.2-7.4\":0,\"8.2\":0,\"9.2\":0,\"10.1\":0,\"11.1-11.2\":0,\"12.0\":0.01036,\"13.0\":0.01046,\"14.0\":0.01046,\"15.0\":0,\"16.0\":0.02093,\"17.0\":0.03139,\"18.0\":0.04186,\"19.0\":1.53834},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.00338,\"4.2-4.3\":0.01523,\"4.4\":0,\"4.4.3-4.4.4\":0.0626},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"11\":0.07386,_:\"6 7 8 9 10 5.5\"},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.04061},H:{\"0\":0.45173},L:{\"0\":37.74819},R:{_:\"0\"},M:{\"0\":0.28933},Q:{\"13.1\":0}};\n/data/regions/VN.js\u0010module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.0014,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0,\"108\":0.0014,\"109\":0.02102,\"110\":0.01401,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0.0028,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0.0014,\"50\":0,\"51\":0,\"52\":0,\"53\":0.0014,\"54\":0,\"55\":0,\"56\":0,\"57\":0.0014,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0.0014,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0.01261,\"80\":0.0014,\"81\":0.0028,\"83\":0.0014,\"84\":0.0014,\"85\":0.0028,\"86\":0.0028,\"87\":0.0028,\"88\":0,\"89\":0.0014,\"90\":0,\"91\":0.0014,\"92\":0.0014,\"93\":0,\"94\":0,\"95\":0.0014,\"96\":0.0014,\"97\":0.0014,\"98\":0,\"99\":0.0014,\"100\":0.0028,\"101\":0.0014,\"102\":0.0014,\"103\":0.0042,\"104\":0.0028,\"105\":0.0028,\"106\":0.0028,\"107\":0.0042,\"108\":0.01821,\"109\":0.47354,\"110\":0.30122,\"111\":0,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0.0014,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0.0014,\"37\":0.00841,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0.0028,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0.0014,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.0028,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0.00841,\"95\":0.00701,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0.0014,\"16\":0,\"17\":0,\"18\":0,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0,\"108\":0.0014,\"109\":0.03082,\"110\":0.04203},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.0014,\"14\":0.0042,\"15\":0.0014,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0,\"13.1\":0.0042,\"14.1\":0.01121,\"15.1\":0.0014,\"15.2-15.3\":0.0014,\"15.4\":0.0028,\"15.5\":0.0056,\"15.6\":0.02522,\"16.0\":0.0014,\"16.1\":0.0056,\"16.2\":0.01261,\"16.3\":0.00841,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0.00284,\"6.0-6.1\":0.00284,\"7.0-7.1\":0.01986,\"8.1-8.4\":0.01135,\"9.0-9.2\":0.01703,\"9.3\":0.105,\"10.0-10.2\":0.02838,\"10.3\":0.19864,\"11.0-11.2\":0.05959,\"11.3-11.4\":0.08797,\"12.0-12.1\":0.08513,\"12.2-12.5\":1.98361,\"13.0-13.1\":0.03973,\"13.2\":0.0227,\"13.3\":0.15324,\"13.4-13.7\":0.52215,\"14.0-14.4\":1.23444,\"14.5-14.8\":2.6136,\"15.0-15.1\":0.52215,\"15.2-15.3\":0.72647,\"15.4\":0.79458,\"15.5\":1.36214,\"15.6\":3.34575,\"16.0\":1.43876,\"16.1\":3.90479,\"16.2\":3.29183,\"16.3\":1.71686,\"16.4\":0.00851},P:{\"4\":0.34593,\"20\":0.97674,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0.11192,\"8.2\":0,\"9.2\":0.0407,\"10.1\":0.02035,\"11.1-11.2\":0.10174,\"12.0\":0.03052,\"13.0\":0.0814,\"14.0\":0.07122,\"15.0\":0.05087,\"16.0\":0.13227,\"17.0\":0.15262,\"18.0\":0.16279,\"19.0\":1.71947},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0,\"4.4\":0,\"4.4.3-4.4.4\":0.0256},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.0028,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":2.01217},H:{\"0\":0.42333},L:{\"0\":64.65364},R:{_:\"0\"},M:{\"0\":0.06019},Q:{\"13.1\":0}};\n/data/features/cors.js\u0006\u0003module.exports={A:{A:{\"1\":\"B\",\"2\":\"J D DC\",\"132\":\"A\",\"260\":\"E F\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\",\"2\":\"EC uB\",\"1025\":\"wB bB cB dB eB fB gB hB iB jB\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"132\":\"I w J D E F A B C\"},E:{\"2\":\"IC 0B\",\"513\":\"J D E F A B C K L G KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"644\":\"I w JC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e sB\",\"2\":\"F B QC RC SC TC rB BC UC\"},G:{\"513\":\"E XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"644\":\"0B VC CC WC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H uC vC\",\"132\":\"uB I qC rC sC tC CC\"},J:{\"1\":\"A\",\"132\":\"D\"},K:{\"1\":\"C h sB\",\"2\":\"A B rB BC\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"B\",\"132\":\"A\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:1,C:\"Cross-Origin Resource Sharing\"};\n/data/regions/MW.js\u000e$module.exports={C:{\"48\":0.00295,\"52\":0.00295,\"63\":0.0059,\"68\":0.00295,\"72\":0.01476,\"75\":0.01771,\"78\":0.21845,\"91\":0.00295,\"95\":0.0059,\"99\":0.00295,\"101\":0.00886,\"102\":0.03838,\"103\":0.0059,\"106\":0.01181,\"107\":0.11808,\"108\":0.05314,\"109\":0.91807,\"110\":0.68191,\"111\":0.05018,_:\"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 49 50 51 53 54 55 56 57 58 59 60 61 62 64 65 66 67 69 70 71 73 74 76 77 79 80 81 82 83 84 85 86 87 88 89 90 92 93 94 96 97 98 100 104 105 112 3.5 3.6\"},D:{\"11\":0.00295,\"37\":0.0059,\"38\":0.0059,\"49\":0.01771,\"50\":0.0059,\"51\":0.0059,\"55\":0.00295,\"61\":0.00295,\"64\":0.01181,\"65\":0.00886,\"67\":0.00886,\"69\":0.01476,\"70\":0.01181,\"72\":0.00295,\"74\":0.01181,\"75\":0.01181,\"76\":0.01181,\"77\":0.00886,\"78\":0.00886,\"79\":0.02066,\"80\":0.01181,\"81\":0.01181,\"83\":0.00886,\"84\":0.00886,\"85\":0.0059,\"86\":0.0059,\"87\":0.02066,\"88\":0.01476,\"89\":0.00886,\"90\":0.00886,\"91\":0.0059,\"92\":0.03838,\"93\":0.0059,\"94\":0.0059,\"95\":0.0059,\"96\":0.01181,\"97\":0.00886,\"98\":0.03247,\"99\":0.00886,\"100\":0.02657,\"101\":0.01181,\"102\":0.05609,\"103\":0.10332,\"104\":0.02657,\"105\":0.04723,\"106\":0.05018,\"107\":0.09151,\"108\":0.31882,\"109\":8.12686,\"110\":4.76748,\"111\":0.00295,\"112\":0.00886,_:\"4 5 6 7 8 9 10 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 39 40 41 42 43 44 45 46 47 48 52 53 54 56 57 58 59 60 62 63 66 68 71 73 113\"},F:{\"36\":0.0059,\"73\":0.00295,\"74\":0.02066,\"79\":0.01181,\"85\":0.05314,\"88\":0.0059,\"90\":0.61106,\"93\":0.01771,\"94\":0.3749,\"95\":0.61992,_:\"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 75 76 77 78 80 81 82 83 84 86 87 89 91 92 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1\",\"10.0-10.1\":0},B:{\"12\":0.03838,\"13\":0.01181,\"14\":0.01476,\"15\":0.03838,\"16\":0.01476,\"17\":0.02362,\"18\":0.13284,\"84\":0.04428,\"85\":0.00295,\"89\":0.01476,\"90\":0.02657,\"92\":0.0797,\"99\":0.00295,\"100\":0.0059,\"102\":0.00295,\"103\":0.01476,\"104\":0.01476,\"105\":0.01476,\"106\":0.02952,\"107\":0.05314,\"108\":0.16236,\"109\":1.6236,\"110\":1.58818,_:\"79 80 81 83 86 87 88 91 93 94 95 96 97 98 101\"},E:{\"4\":0,\"13\":0.00886,\"14\":0.01181,_:\"0 5 6 7 8 9 10 11 12 15 3.1 3.2 6.1 7.1 9.1 10.1 11.1 15.2-15.3 16.4\",\"5.1\":0.01771,\"12.1\":0.00886,\"13.1\":0.02066,\"14.1\":0.01771,\"15.1\":0.00295,\"15.4\":0.0059,\"15.5\":0.01476,\"15.6\":0.05609,\"16.0\":0.00295,\"16.1\":0.02066,\"16.2\":0.05018,\"16.3\":0.04133},G:{\"8\":0.00088,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0.00058,\"5.0-5.1\":0.00146,\"6.0-6.1\":0.00146,\"7.0-7.1\":0.00088,\"8.1-8.4\":0,\"9.0-9.2\":0.00029,\"9.3\":0.09789,\"10.0-10.2\":0,\"10.3\":0.02221,\"11.0-11.2\":0.00146,\"11.3-11.4\":0.00351,\"12.0-12.1\":0.01052,\"12.2-12.5\":0.31384,\"13.0-13.1\":0.00497,\"13.2\":0.00409,\"13.3\":0.26212,\"13.4-13.7\":0.04266,\"14.0-14.4\":0.11543,\"14.5-14.8\":0.12711,\"15.0-15.1\":0.08007,\"15.2-15.3\":0.04149,\"15.4\":0.06224,\"15.5\":0.12478,\"15.6\":0.12711,\"16.0\":0.31267,\"16.1\":0.29718,\"16.2\":0.2814,\"16.3\":0.40092,\"16.4\":0.00205},P:{\"4\":0.4064,\"20\":0.16673,\"5.0-5.4\":0.01042,\"6.2-6.4\":0.01025,\"7.2-7.4\":0.21883,\"8.2\":0.02044,\"9.2\":0.01042,\"10.1\":0.0217,\"11.1-11.2\":0.03126,\"12.0\":0.02048,\"13.0\":0.02084,\"14.0\":0.06252,\"15.0\":0.02084,\"16.0\":0.08336,\"17.0\":0.07294,\"18.0\":0.10421,\"19.0\":0.75028},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.00379,\"4.2-4.3\":0.00316,\"4.4\":0,\"4.4.3-4.4.4\":0.04237},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"10\":0.00295,\"11\":0.05018,_:\"6 7 8 9 5.5\"},N:{\"10\":0.02102,\"11\":0.02035},S:{\"2.5\":0.17618,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0.04933},O:{\"0\":5.60941},H:{\"0\":7.71242},L:{\"0\":57.76598},R:{_:\"0\"},M:{\"0\":0.28188},Q:{\"13.1\":0.02114}};\n%/data/features/css-scroll-behavior.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"2\":\"C K L G M N O\",\"129\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB FC GC\"},D:{\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB\",\"129\":\"wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"450\":\"IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB\"},E:{\"1\":\"4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A B C K IC 0B JC KC LC MC 1B rB sB 2B\",\"578\":\"L G NC OC 3B\"},F:{\"2\":\"0 1 2 3 4 F B C G M N O x g y z QC RC SC TC rB BC UC sB\",\"129\":\"PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"450\":\"5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB\"},G:{\"1\":\"4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC\",\"578\":\"nC oC 3B\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"129\":\"wC\"},P:{\"1\":\"g 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I xC yC zC\"},Q:{\"129\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"2\":\"BD\"}},B:5,C:\"CSS Scroll-behavior\"};\n/data/features/pad-start-end.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L\"},C:{\"1\":\"PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB FC GC\"},D:{\"1\":\"YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB\"},E:{\"1\":\"A B C K L G 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F IC 0B JC KC LC MC\"},F:{\"1\":\"LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB QC RC SC TC rB BC UC sB\"},G:{\"1\":\"cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I xC yC\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:6,C:\"String.prototype.padStart(), String.prototype.padEnd()\"};\n(/data/features/element-scroll-methods.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"1\":\"DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB FC GC\"},D:{\"1\":\"wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB\"},E:{\"1\":\"L G NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F IC 0B JC KC LC MC\",\"132\":\"A B C K 1B rB sB 2B\"},F:{\"1\":\"PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB QC RC SC TC rB BC UC sB\"},G:{\"1\":\"nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC\",\"132\":\"cC dC eC fC gC hC iC jC kC lC mC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I xC yC zC\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:5,C:\"Scroll methods on elements (scroll, scrollTo, scrollBy)\"};\n/data/features/dialog.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"1\":\"k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB FC GC\",\"194\":\"UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P\",\"1218\":\"Q R xB S T U V W X Y Z a b c d e i j\"},D:{\"1\":\"EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 I w J D E F A B C K L G M N O x g y z\",\"322\":\"9 AB BB CB DB\"},E:{\"1\":\"4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B\"},F:{\"1\":\"1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F B C G M N O QC RC SC TC rB BC UC sB\",\"578\":\"0 x g y z\"},G:{\"1\":\"4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"2\":\"BD CD\"}},B:1,C:\"Dialog element\"};\n/data/features/notifications.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB I w J D E F A B C K L G M N O x g y FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"I\",\"36\":\"w J D E F A B C K L G M N O x g y\"},E:{\"1\":\"J D E F A B C K L G KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w IC 0B JC\"},F:{\"1\":\"2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 F B C G M N O x g y z QC RC SC TC rB BC UC sB\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B\",\"1028\":\"AC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I qC rC sC tC CC\",\"36\":\"H uC vC\"},J:{\"1\":\"A\",\"2\":\"D\"},K:{\"2\":\"A B C rB BC sB\",\"36\":\"h\"},L:{\"513\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"36\":\"I\",\"258\":\"g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"2\":\"2B\"},R:{\"258\":\"AD\"},S:{\"1\":\"BD CD\"}},B:1,C:\"Web Notifications\"};\n\"/data/features/speech-synthesis.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"L G M N O\",\"2\":\"C K\",\"257\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 EC uB I w J D E F A B C K L G M N O x g y z FC GC\",\"194\":\"8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB\"},D:{\"1\":\"AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z\",\"257\":\"WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"D E F A B C K L G LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J IC 0B JC KC\"},F:{\"1\":\"4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB\",\"2\":\"0 1 2 3 F B C G M N O x g y z QC RC SC TC rB BC UC sB\",\"257\":\"dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\"},G:{\"1\":\"E YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC CC WC XC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"2\":\"A B C h rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"1\":\"g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I\"},Q:{\"1\":\"2B\"},R:{\"2\":\"AD\"},S:{\"1\":\"BD CD\"}},B:7,C:\"Speech Synthesis API\"};\n/data/features/stream.js\u0006\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB I w J D E F A B C K L G M FC GC\",\"129\":\"DB EB FB GB HB IB\",\"420\":\"0 1 2 3 4 5 6 7 8 9 N O x g y z AB BB CB\"},D:{\"1\":\"UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"I w J D E F A B C K L G M N O x g\",\"420\":\"0 1 2 3 4 5 6 7 8 9 y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB\"},E:{\"1\":\"B C K L G rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A IC 0B JC KC LC MC 1B\"},F:{\"1\":\"HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F B G M N QC RC SC TC rB BC UC\",\"420\":\"0 1 2 3 4 5 6 7 8 9 C O x g y z AB BB CB DB EB FB GB sB\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC\",\"513\":\"lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"1537\":\"eC fC gC hC iC jC kC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D\",\"420\":\"A\"},K:{\"1\":\"h\",\"2\":\"A B rB BC\",\"420\":\"C sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"420\":\"I xC\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"2\":\"BD\"}},B:4,C:\"getUserMedia/Stream API\"};\n/data/regions/GL.js\u0012module.exports={C:{\"2\":0.00535,\"3\":0.00535,\"4\":0,\"5\":0.00535,\"6\":0.00535,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0.00535,\"16\":0.00535,\"17\":0,\"18\":0,\"19\":0,\"20\":0.01606,\"21\":0.00535,\"22\":0.00535,\"23\":0.00535,\"24\":0.00535,\"25\":0,\"26\":0,\"27\":0.00535,\"28\":0,\"29\":0.00535,\"30\":0,\"31\":0.01071,\"32\":0.00535,\"33\":0,\"34\":0.00535,\"35\":0.00535,\"36\":0,\"37\":0.01071,\"38\":0.00535,\"39\":0.01071,\"40\":0.02141,\"41\":0.01071,\"42\":0.00535,\"43\":0.01071,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.01606,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0.00535,\"102\":0.01071,\"103\":0.02677,\"104\":0.00535,\"105\":0.01606,\"106\":0.02141,\"107\":0,\"108\":0.01071,\"109\":0.62095,\"110\":0.27836,\"111\":0.01071,\"112\":0,\"3.5\":0.00535,\"3.6\":0.03212},D:{\"4\":0,\"5\":0,\"6\":0.00535,\"7\":0.00535,\"8\":0.00535,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0.00535,\"18\":0.00535,\"19\":0.00535,\"20\":0,\"21\":0.00535,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0.00535,\"29\":0.00535,\"30\":0,\"31\":0.00535,\"32\":0,\"33\":0.01606,\"34\":0,\"35\":0,\"36\":0.00535,\"37\":0.01606,\"38\":0.02141,\"39\":0.01071,\"40\":0.02677,\"41\":0.01606,\"42\":0,\"43\":0.04818,\"44\":0.05353,\"45\":0.06424,\"46\":0.02677,\"47\":0.03212,\"48\":0,\"49\":0,\"50\":0,\"51\":0.00535,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.00535,\"79\":0.01071,\"80\":0.00535,\"81\":0.08565,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0.02141,\"88\":0.03212,\"89\":0.01071,\"90\":0,\"91\":0,\"92\":0,\"93\":0.01071,\"94\":0,\"95\":0,\"96\":0.00535,\"97\":0,\"98\":0.00535,\"99\":0.01071,\"100\":0.00535,\"101\":0.00535,\"102\":0.02677,\"103\":0.09635,\"104\":0.03212,\"105\":1.41319,\"106\":0.01606,\"107\":0.24089,\"108\":0.42289,\"109\":6.02748,\"110\":3.97193,\"111\":0.01071,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0.00535,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0.00535,\"30\":0.01606,\"31\":0.01606,\"32\":0.01071,\"33\":0.00535,\"34\":0,\"35\":0,\"36\":0.00535,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0.04818,\"44\":0,\"45\":0,\"46\":0.00535,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.04818,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0.00535,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.01071,\"94\":0.72801,\"95\":3.22251,\"9.5-9.6\":0,\"10.0-10.1\":0.00535,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0.01071,\"11.6\":0,\"12.1\":0.00535},B:{\"12\":0.01071,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0.01071,\"18\":0,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0.00535,\"97\":0.00535,\"98\":0,\"99\":0.00535,\"100\":0,\"101\":0.02141,\"102\":0,\"103\":0,\"104\":0,\"105\":0.0803,\"106\":0.02141,\"107\":0.03212,\"108\":0.06424,\"109\":1.46137,\"110\":1.89496},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0.01606,\"8\":0.01071,\"9\":0.01071,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0.36936,\"15\":0,_:\"0\",\"3.1\":0.00535,\"3.2\":0,\"5.1\":0.01071,\"6.1\":0,\"7.1\":0.00535,\"9.1\":0.00535,\"10.1\":0,\"11.1\":0.00535,\"12.1\":0.01071,\"13.1\":0.10706,\"14.1\":0.22483,\"15.1\":0.01606,\"15.2-15.3\":0.02677,\"15.4\":0.03747,\"15.5\":0.16059,\"15.6\":1.33825,\"16.0\":0.07494,\"16.1\":0.23553,\"16.2\":0.48712,\"16.3\":1.65943,\"16.4\":0.00535},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0.01301,\"4.2-4.3\":0.01301,\"5.0-5.1\":0.03251,\"6.0-6.1\":0.02926,\"7.0-7.1\":0.11055,\"8.1-8.4\":0.19508,\"9.0-9.2\":0.03251,\"9.3\":0,\"10.0-10.2\":0,\"10.3\":0.04227,\"11.0-11.2\":0.05527,\"11.3-11.4\":0.0065,\"12.0-12.1\":0.02601,\"12.2-12.5\":0.29912,\"13.0-13.1\":0,\"13.2\":0,\"13.3\":0.01626,\"13.4-13.7\":0.0065,\"14.0-14.4\":0.14306,\"14.5-14.8\":0.41292,\"15.0-15.1\":0.05852,\"15.2-15.3\":0.28287,\"15.4\":0.14631,\"15.5\":0.2536,\"15.6\":1.83376,\"16.0\":6.46692,\"16.1\":6.46692,\"16.2\":9.20131,\"16.3\":4.81524,\"16.4\":0.03251},P:{\"4\":0.21616,\"20\":1.53369,\"5.0-5.4\":0,\"6.2-6.4\":0.01029,\"7.2-7.4\":0.01029,\"8.2\":0,\"9.2\":0,\"10.1\":0,\"11.1-11.2\":0,\"12.0\":0,\"13.0\":0,\"14.0\":0,\"15.0\":0,\"16.0\":0.01029,\"17.0\":0.02059,\"18.0\":0.01029,\"19.0\":2.16158},I:{\"0\":0,\"3\":0.00662,\"4\":0.04967,\"2.1\":0.03145,\"2.2\":0.03477,\"2.3\":0.05132,\"4.1\":0.13906,\"4.2-4.3\":0.10926,\"4.4\":0,\"4.4.3-4.4.4\":0.40726},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0.01651,\"7\":0.02752,\"8\":0.36332,\"9\":0.06606,\"10\":0.06606,\"11\":0.22019,\"5.5\":0},N:{\"10\":0.02788,\"11\":0.04182},S:{\"2.5\":0.00465,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0.02324},O:{\"0\":0.26023},H:{\"0\":0.59833},L:{\"0\":31.87921},R:{_:\"0\"},M:{\"0\":0.10688},Q:{\"13.1\":0}};\n/data/features/word-break.js\u0005module.exports={A:{A:{\"1\":\"J D E F A B DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB I w J D E F A B C K L FC GC\"},D:{\"1\":\"LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"4\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB\"},E:{\"1\":\"F A B C K L G MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"4\":\"I w J D E IC 0B JC KC LC\"},F:{\"1\":\"8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F B C QC RC SC TC rB BC UC sB\",\"4\":\"0 1 2 3 4 5 6 7 G M N O x g y z\"},G:{\"1\":\"aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"4\":\"E 0B VC CC WC XC YC ZC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"4\":\"uB I qC rC sC tC CC uC vC\"},J:{\"4\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:4,C:\"CSS3 word-break\"};\n$/data/features/css-cascade-layers.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"l m n o p q r s t u v f H\",\"2\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e\",\"322\":\"i j k\"},C:{\"1\":\"j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c FC GC\",\"194\":\"d e i\"},D:{\"1\":\"l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e\",\"322\":\"i j k\"},E:{\"1\":\"4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B\"},F:{\"1\":\"V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U QC RC SC TC rB BC UC sB\"},G:{\"1\":\"4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"1\":\"g 8C 9C\",\"2\":\"I xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C\"},Q:{\"2\":\"2B\"},R:{\"2\":\"AD\"},S:{\"2\":\"BD CD\"}},B:4,C:\"CSS Cascade Layers\"};\n/data/features/clipboard.js\u0006|module.exports={A:{A:{\"2436\":\"J D E F A B DC\"},B:{\"260\":\"N O\",\"2436\":\"C K L G M\",\"8196\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"2\":\"EC uB I w J D E F A B C K L G M N O x g y FC GC\",\"772\":\"0 1 2 3 4 5 6 7 8 9 z AB BB CB DB EB FB GB HB\",\"4100\":\"IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\"},D:{\"2\":\"I w J D E F A B C\",\"2564\":\"0 1 2 3 4 5 6 7 8 9 K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB\",\"8196\":\"ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"10244\":\"KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB\"},E:{\"1\":\"C K L G sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"16\":\"IC 0B\",\"2308\":\"A B 1B rB\",\"2820\":\"I w J D E F JC KC LC MC\"},F:{\"2\":\"F B QC RC SC TC rB BC UC\",\"16\":\"C\",\"516\":\"sB\",\"2564\":\"0 1 2 3 4 5 6 G M N O x g y z\",\"8196\":\"MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"10244\":\"7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB\"},G:{\"1\":\"gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC CC\",\"2820\":\"E WC XC YC ZC aC bC cC dC eC fC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I qC rC sC tC CC\",\"260\":\"H\",\"2308\":\"uC vC\"},J:{\"2\":\"D\",\"2308\":\"A\"},K:{\"2\":\"A B C rB BC\",\"16\":\"sB\",\"8196\":\"h\"},L:{\"8196\":\"H\"},M:{\"1028\":\"f\"},N:{\"2\":\"A B\"},O:{\"8196\":\"wC\"},P:{\"2052\":\"xC yC\",\"2308\":\"I\",\"8196\":\"g zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"8196\":\"2B\"},R:{\"8196\":\"AD\"},S:{\"4100\":\"BD CD\"}},B:5,C:\"Synchronous Clipboard API\"};\n!/data/features/css-placeholder.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"36\":\"C K L G M N O\"},C:{\"1\":\"SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB I w J D E F A B C K L G M N O FC GC\",\"33\":\"0 1 2 3 4 5 6 7 8 9 x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB\"},D:{\"1\":\"YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"36\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB\"},E:{\"1\":\"B C K L G 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I IC 0B\",\"36\":\"w J D E F A JC KC LC MC\"},F:{\"1\":\"LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F B C QC RC SC TC rB BC UC sB\",\"36\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB\"},G:{\"1\":\"dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC\",\"36\":\"E CC WC XC YC ZC aC bC cC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"36\":\"uB I qC rC sC tC CC uC vC\"},J:{\"36\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"36\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"36\":\"I xC yC\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"33\":\"BD\"}},B:5,C:\"::placeholder CSS pseudo-element\"};\n'/data/features/credential-management.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"1\":\"YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB\",\"66\":\"PB QB RB\",\"129\":\"SB TB UB VB WB XB\"},E:{\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB QC RC SC TC rB BC UC sB\"},G:{\"1\":\"mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I xC yC\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"2\":\"BD CD\"}},B:5,C:\"Credential Management API\"};\n/data/regions/TC.js\u0010Imodule.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.0053,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0.01591,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0,\"108\":0.0053,\"109\":0.29691,\"110\":0.48778,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0.0053,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0.0053,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0.02121,\"75\":0.82711,\"76\":0.0053,\"77\":0,\"78\":0,\"79\":0.05302,\"80\":0.01591,\"81\":0.0053,\"83\":0.01591,\"84\":0,\"85\":0,\"86\":0,\"87\":0.0106,\"88\":0.0053,\"89\":0.01591,\"90\":0,\"91\":0,\"92\":0.0053,\"93\":0.06893,\"94\":0,\"95\":0,\"96\":0,\"97\":0.0053,\"98\":0,\"99\":0.0106,\"100\":0.0106,\"101\":0,\"102\":0,\"103\":0.03711,\"104\":0,\"105\":0.04242,\"106\":0.01591,\"107\":0.31282,\"108\":0.91194,\"109\":6.08139,\"110\":3.22362,\"111\":0.04772,\"112\":0.0053,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.01591,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0.0053,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0.05302,\"95\":0.08483,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0.0053,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0.04242,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.0053,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0.0053,\"106\":0.0053,\"107\":0.02651,\"108\":0.15906,\"109\":1.36261,\"110\":2.07308},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.0053,\"14\":0.03711,\"15\":0.02651,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0,\"13.1\":0.2545,\"14.1\":0.2704,\"15.1\":0.0106,\"15.2-15.3\":0.05832,\"15.4\":0.02121,\"15.5\":0.12195,\"15.6\":0.70517,\"16.0\":0.05832,\"16.1\":0.37644,\"16.2\":1.53758,\"16.3\":0.59382,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0.61418,\"10.0-10.2\":0,\"10.3\":0.04014,\"11.0-11.2\":0,\"11.3-11.4\":0,\"12.0-12.1\":0.00401,\"12.2-12.5\":0.65433,\"13.0-13.1\":0.02007,\"13.2\":0,\"13.3\":0,\"13.4-13.7\":0.15656,\"14.0-14.4\":0.18466,\"14.5-14.8\":0.74264,\"15.0-15.1\":0.23684,\"15.2-15.3\":0.17663,\"15.4\":0.17663,\"15.5\":0.80285,\"15.6\":3.2074,\"16.0\":2.9264,\"16.1\":12.05083,\"16.2\":10.83049,\"16.3\":5.10213,\"16.4\":0.12444},P:{\"4\":0.09539,\"20\":0.8055,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0.0318,\"8.2\":0,\"9.2\":0,\"10.1\":0,\"11.1-11.2\":0.06359,\"12.0\":0,\"13.0\":0.0106,\"14.0\":0.0212,\"15.0\":0.0106,\"16.0\":0.0106,\"17.0\":0.04239,\"18.0\":0.04239,\"19.0\":1.51561},I:{\"0\":0,\"3\":0,\"4\":0.08369,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0,\"4.4\":0,\"4.4.3-4.4.4\":1.04611},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":5.18005,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.02349},H:{\"0\":0.06227},L:{\"0\":30.43876},R:{_:\"0\"},M:{\"0\":0.12215},Q:{\"13.1\":0}};\n%/data/features/css-descendant-gtgt.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"2\":\"C K L G M N O Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"16\":\"P\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"B\",\"2\":\"I w J D E F A C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"2\":\"A B C h rB BC sB\"},L:{\"2\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"2\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"2\":\"2B\"},R:{\"2\":\"AD\"},S:{\"2\":\"BD CD\"}},B:7,C:\"Explicit descendant combinator >>\"};\n /data/features/css-page-break.js\u0005module.exports={A:{A:{\"388\":\"A B\",\"900\":\"J D E F DC\"},B:{\"388\":\"C K L G M N O\",\"900\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"772\":\"eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"900\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB FC GC\"},D:{\"900\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"772\":\"A\",\"900\":\"I w J D E F B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"16\":\"F QC\",\"129\":\"B C RC SC TC rB BC UC sB\",\"900\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\"},G:{\"900\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"129\":\"pC\"},I:{\"900\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"900\":\"D A\"},K:{\"129\":\"A B C rB BC sB\",\"900\":\"h\"},L:{\"900\":\"H\"},M:{\"772\":\"f\"},N:{\"388\":\"A B\"},O:{\"900\":\"wC\"},P:{\"900\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"900\":\"2B\"},R:{\"900\":\"AD\"},S:{\"772\":\"CD\",\"900\":\"BD\"}},B:2,C:\"CSS page-break properties\"};\n/data/features/webm.js\u0006)module.exports={A:{A:{\"2\":\"J D E DC\",\"520\":\"F A B\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"8\":\"C K\",\"388\":\"L G M N O\"},C:{\"1\":\"5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB FC GC\",\"132\":\"0 1 2 3 4 I w J D E F A B C K L G M N O x g y z\"},D:{\"1\":\"2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"I w\",\"132\":\"0 1 J D E F A B C K L G M N O x g y z\"},E:{\"1\":\"tB 7B 8B 9B AC PC\",\"2\":\"IC\",\"8\":\"I w 0B JC\",\"520\":\"J D E F A B C KC LC MC 1B rB\",\"1028\":\"K sB 2B\",\"7172\":\"L\",\"8196\":\"G NC OC 3B 4B 5B 6B\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F QC RC SC\",\"132\":\"B C G TC rB BC UC sB\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC\",\"1028\":\"hC iC jC kC lC\",\"3076\":\"mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"qC rC\",\"132\":\"uB I sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"8\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"132\":\"I\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:6,C:\"WebM video format\"};\n/dist/lib/statuses.js\u00012module.exports = {\n  1: 'ls', // WHATWG Living Standard\n  2: 'rec', // W3C Recommendation\n  3: 'pr', // W3C Proposed Recommendation\n  4: 'cr', // W3C Candidate Recommendation\n  5: 'wd', // W3C Working Draft\n  6: 'other', // Non-W3C, but reputable\n  7: 'unoff' // Unofficial, Editor's Draft or W3C \"Note\"\n}\n/data/regions/BT.js\u0011module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0.00234,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0.00234,\"38\":0,\"39\":0,\"40\":0.00234,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00234,\"93\":0,\"94\":0,\"95\":0,\"96\":0.00468,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0.00234,\"104\":0,\"105\":0,\"106\":0,\"107\":0,\"108\":0,\"109\":0.08896,\"110\":0.0515,\"111\":0.00468,\"112\":0,\"3.5\":0,\"3.6\":0.00234},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0.00234,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0.00234,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0.00234,\"39\":0.00234,\"40\":0.00234,\"41\":0.00234,\"42\":0.00234,\"43\":0.01405,\"44\":0.00468,\"45\":0.00234,\"46\":0.00468,\"47\":0.00468,\"48\":0,\"49\":0.00468,\"50\":0,\"51\":0.00234,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0.00234,\"75\":0.00234,\"76\":0,\"77\":0,\"78\":0,\"79\":0.00234,\"80\":0.00234,\"81\":0.00936,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0.00936,\"88\":0,\"89\":0.00234,\"90\":0.00702,\"91\":0,\"92\":0,\"93\":0.00234,\"94\":0,\"95\":0,\"96\":0.01171,\"97\":0.01639,\"98\":0,\"99\":0.00234,\"100\":0.02341,\"101\":0.00234,\"102\":0.00234,\"103\":0.01639,\"104\":0.00936,\"105\":0.01639,\"106\":0.00234,\"107\":0.02107,\"108\":0.14046,\"109\":2.20288,\"110\":1.40928,\"111\":0.00234,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0.00234,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0.00234,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0.00234,\"65\":0,\"66\":0.00234,\"67\":0.05618,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.00234,\"94\":0.01405,\"95\":0.01171,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0.00234,\"13\":0.00234,\"14\":0.00234,\"15\":0,\"16\":0,\"17\":0,\"18\":0.00234,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00234,\"93\":0,\"94\":0,\"95\":0,\"96\":0.00234,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0.00468,\"104\":0.00234,\"105\":0,\"106\":0,\"107\":0.01873,\"108\":0.00936,\"109\":0.103,\"110\":0.13812},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0.00234,\"9\":0.00702,\"10\":0,\"11\":0,\"12\":0,\"13\":0.00234,\"14\":0,\"15\":0.00234,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0.00234,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0.00468,\"13.1\":0.00936,\"14.1\":0.02575,\"15.1\":0,\"15.2-15.3\":0.00234,\"15.4\":0.00234,\"15.5\":0.01171,\"15.6\":0.0398,\"16.0\":0.01405,\"16.1\":0.00702,\"16.2\":0.03043,\"16.3\":0.01873,\"16.4\":0},G:{\"8\":0.0068,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0.00302,\"5.0-5.1\":0.00151,\"6.0-6.1\":0.00453,\"7.0-7.1\":0.03777,\"8.1-8.4\":0.03248,\"9.0-9.2\":0.00151,\"9.3\":0.04155,\"10.0-10.2\":0,\"10.3\":0.01133,\"11.0-11.2\":0.05439,\"11.3-11.4\":0.00076,\"12.0-12.1\":0.03022,\"12.2-12.5\":0.23871,\"13.0-13.1\":0.01058,\"13.2\":0.02795,\"13.3\":0.02342,\"13.4-13.7\":0.04532,\"14.0-14.4\":0.27421,\"14.5-14.8\":0.18583,\"15.0-15.1\":0.10047,\"15.2-15.3\":0.08007,\"15.4\":0.09443,\"15.5\":0.28856,\"15.6\":0.3981,\"16.0\":0.94954,\"16.1\":1.14217,\"16.2\":1.14746,\"16.3\":1.41261,\"16.4\":0},P:{\"4\":0.1651,\"20\":0.23734,\"5.0-5.4\":0.04128,\"6.2-6.4\":0,\"7.2-7.4\":0.06191,\"8.2\":0,\"9.2\":0.0516,\"10.1\":0,\"11.1-11.2\":0.07223,\"12.0\":0,\"13.0\":0.02064,\"14.0\":0.04128,\"15.0\":0.01032,\"16.0\":0.1651,\"17.0\":0.03096,\"18.0\":0.0516,\"19.0\":0.77393},I:{\"0\":0,\"3\":0,\"4\":0.02444,\"2.1\":0,\"2.2\":0.01629,\"2.3\":0.01222,\"4.1\":0.01222,\"4.2-4.3\":0.02852,\"4.4\":0,\"4.4.3-4.4.4\":0.07333},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0.00234,\"7\":0.00234,\"8\":0.02809,\"9\":0.00702,\"10\":0.00468,\"11\":0.01405,\"5.5\":0},N:{\"10\":0.02042,\"11\":0.01021},S:{\"2.5\":0.00766,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0.00766},O:{\"0\":2.32834},H:{\"0\":0.54383},L:{\"0\":82.56447},R:{_:\"0\"},M:{\"0\":0.03064},Q:{\"13.1\":0}};\n/data/features/mpeg4.js\u0005module.exports={A:{A:{\"1\":\"F A B\",\"2\":\"J D E DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB I w J D E F A B C K L G M N O x g FC GC\",\"4\":\"0 1 2 3 4 5 6 7 8 9 y z AB BB\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"I w J D E F A B C K L G 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"IC\"},F:{\"1\":\"2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 F B C G M N O x g y z QC RC SC TC rB BC UC sB\"},G:{\"1\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H uC vC\",\"4\":\"uB I qC rC tC CC\",\"132\":\"sC\"},J:{\"1\":\"D A\"},K:{\"1\":\"B C h rB BC sB\",\"2\":\"A\"},L:{\"1\":\"H\"},M:{\"260\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:6,C:\"MPEG-4/H.264 video format\"};\n/data/features/wordwrap.js\u0005module.exports={A:{A:{\"4\":\"J D E F A B DC\"},B:{\"1\":\"O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"4\":\"C K L G M N\"},C:{\"1\":\"QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB\",\"4\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"4\":\"I w J D E F A B C K L G M N O x g y z\"},E:{\"1\":\"D E F A B C K L G KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"4\":\"I w J IC 0B JC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e sB\",\"2\":\"F QC RC\",\"4\":\"B C SC TC rB BC UC\"},G:{\"1\":\"E YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"4\":\"0B VC CC WC XC\"},H:{\"4\":\"pC\"},I:{\"1\":\"H uC vC\",\"4\":\"uB I qC rC sC tC CC\"},J:{\"1\":\"A\",\"4\":\"D\"},K:{\"1\":\"h\",\"4\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"4\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"4\":\"BD\"}},B:4,C:\"CSS3 Overflow-wrap\"};\n/data/regions/KR.js\u00110module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.0039,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.0039,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0.0039,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0.0039,\"108\":0.0039,\"109\":0.13633,\"110\":0.08569,\"111\":0.0039,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0.00779,\"43\":0,\"44\":0.0039,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0.0039,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0.0039,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0.00779,\"69\":0.0039,\"70\":0.0039,\"71\":0.0039,\"72\":0.0039,\"73\":0,\"74\":0.0039,\"75\":0.0039,\"76\":0.0039,\"77\":0.05843,\"78\":0.0039,\"79\":0.01169,\"80\":0.00779,\"81\":0.01169,\"83\":0.01169,\"84\":0.01558,\"85\":0.01558,\"86\":0.02727,\"87\":0.01948,\"88\":0.0039,\"89\":0.00779,\"90\":0.04285,\"91\":0.04285,\"92\":0,\"93\":0,\"94\":0.05453,\"95\":0.0039,\"96\":0.01169,\"97\":0.0039,\"98\":0.0039,\"99\":0.0039,\"100\":0.00779,\"101\":0.01558,\"102\":0.01558,\"103\":0.02337,\"104\":0.01948,\"105\":0.01169,\"106\":0.01558,\"107\":0.05843,\"108\":0.1597,\"109\":5.36731,\"110\":3.77815,\"111\":0.0039,\"112\":0.0039,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.0039,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0.02337,\"95\":0.03116,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0.0039,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0.0039,\"85\":0.0039,\"86\":0.0039,\"87\":0.0039,\"88\":0,\"89\":0.0039,\"90\":0,\"91\":0.0039,\"92\":0.0039,\"93\":0,\"94\":0,\"95\":0,\"96\":0.0039,\"97\":0,\"98\":0,\"99\":0,\"100\":0.0039,\"101\":0,\"102\":0,\"103\":0.0039,\"104\":0.0039,\"105\":0.00779,\"106\":0.0039,\"107\":0.01558,\"108\":0.03506,\"109\":1.04386,\"110\":1.41389},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0.0039,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.0039,\"14\":0.00779,\"15\":0,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0.01558,\"10.1\":0,\"11.1\":0,\"12.1\":0,\"13.1\":0.00779,\"14.1\":0.01558,\"15.1\":0.0039,\"15.2-15.3\":0.0039,\"15.4\":0.00779,\"15.5\":0.01948,\"15.6\":0.05843,\"16.0\":0.00779,\"16.1\":0.04285,\"16.2\":0.13243,\"16.3\":0.10127,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0.00479,\"6.0-6.1\":0,\"7.0-7.1\":0,\"8.1-8.4\":0,\"9.0-9.2\":0.22519,\"9.3\":0.01198,\"10.0-10.2\":0.00719,\"10.3\":0.00719,\"11.0-11.2\":0.01917,\"11.3-11.4\":0.00479,\"12.0-12.1\":0.01437,\"12.2-12.5\":0.08145,\"13.0-13.1\":0.18447,\"13.2\":0.00719,\"13.3\":0.01437,\"13.4-13.7\":0.04791,\"14.0-14.4\":0.18207,\"14.5-14.8\":0.4432,\"15.0-15.1\":0.14374,\"15.2-15.3\":0.14614,\"15.4\":0.20603,\"15.5\":0.45039,\"15.6\":1.53562,\"16.0\":3.24134,\"16.1\":5.8047,\"16.2\":6.5761,\"16.3\":4.07263,\"16.4\":0.01917},P:{\"4\":0.01012,\"20\":5.60672,\"5.0-5.4\":0.01012,\"6.2-6.4\":0,\"7.2-7.4\":0,\"8.2\":0.01012,\"9.2\":0,\"10.1\":0.01012,\"11.1-11.2\":0.02024,\"12.0\":0.01012,\"13.0\":0.03036,\"14.0\":0.04048,\"15.0\":0.03036,\"16.0\":0.08096,\"17.0\":0.15181,\"18.0\":0.3947,\"19.0\":7.93441},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0,\"4.4\":0,\"4.4.3-4.4.4\":0.27895},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0.00418,\"9\":0,\"10\":0,\"11\":0.10877,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.07326},H:{\"0\":0.1156},L:{\"0\":31.57792},R:{_:\"0\"},M:{\"0\":0.1221},Q:{\"13.1\":0.00611}};\n/data/features/mediarecorder.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"1\":\"6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 EC uB I w J D E F A B C K L G M N O x g y z FC GC\"},D:{\"1\":\"QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB\",\"194\":\"OB PB\"},E:{\"1\":\"G NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A B C IC 0B JC KC LC MC 1B rB\",\"322\":\"K L sB 2B\"},F:{\"1\":\"DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB QC RC SC TC rB BC UC sB\",\"194\":\"BB CB\"},G:{\"1\":\"nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC\",\"578\":\"gC hC iC jC kC lC mC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:5,C:\"MediaRecorder API\"};\n /data/features/css-dir-pseudo.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"2\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q\",\"194\":\"r s t u v f H\"},C:{\"1\":\"QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB I w J D E F A B C K L G M FC GC\",\"33\":\"0 1 2 3 4 5 6 7 8 9 N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB\"},D:{\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z\",\"194\":\"a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"AC PC\",\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B\"},F:{\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z QC RC SC TC rB BC UC sB\",\"194\":\"a b c d e\"},G:{\"1\":\"AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"2\":\"A B C h rB BC sB\"},L:{\"2\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"2\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"2\":\"2B\"},R:{\"2\":\"AD\"},S:{\"1\":\"CD\",\"33\":\"BD\"}},B:5,C:\":dir() CSS pseudo-class\"};\n$/data/features/css-color-function.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"H\",\"2\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t\",\"322\":\"u v f\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f FC GC\",\"578\":\"H yB zB\"},D:{\"1\":\"H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t\",\"322\":\"u v f\"},E:{\"1\":\"G OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A IC 0B JC KC LC MC\",\"132\":\"B C K L 1B rB sB 2B NC\"},F:{\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d QC RC SC TC rB BC UC sB\",\"322\":\"e\"},G:{\"1\":\"oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC\",\"132\":\"dC eC fC gC hC iC jC kC lC mC nC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"2\":\"A B C h rB BC sB\"},L:{\"1\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"2\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"2\":\"2B\"},R:{\"2\":\"AD\"},S:{\"2\":\"BD CD\"}},B:4,C:\"CSS color() function\"};\n)/data/features/css-backgroundblendmode.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"1\":\"7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 EC uB I w J D E F A B C K L G M N O x g y z FC GC\"},D:{\"1\":\"CB DB EB FB GB HB IB JB KB LB MB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB\",\"260\":\"NB\"},E:{\"1\":\"B C K L G 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D IC 0B JC KC\",\"132\":\"E F A LC MC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 z BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F B C G M N O x g y QC RC SC TC rB BC UC sB\",\"260\":\"AB\"},G:{\"1\":\"dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC CC WC XC YC\",\"132\":\"E ZC aC bC cC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:4,C:\"CSS background-blend-mode\"};\n/data/features/css-sticky.js\u00066module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G\",\"1028\":\"P Q R S T U V W X Y Z\",\"4100\":\"M N O\"},C:{\"1\":\"vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 EC uB I w J D E F A B C K L G M N O x g y z FC GC\",\"194\":\"3 4 5 6 7 8\",\"516\":\"9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB\"},D:{\"1\":\"a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"I w J D E F A B C K L G M N O x g y z EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB\",\"322\":\"0 1 2 3 4 5 6 7 8 9 AB BB CB DB TB UB VB WB\",\"1028\":\"XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z\"},E:{\"1\":\"K L G 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J IC 0B JC\",\"33\":\"E F A B C LC MC 1B rB sB\",\"2084\":\"D KC\"},F:{\"1\":\"qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB QC RC SC TC rB BC UC sB\",\"322\":\"GB HB IB\",\"1028\":\"JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB\"},G:{\"1\":\"iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC CC WC\",\"33\":\"E ZC aC bC cC dC eC fC gC hC\",\"2084\":\"XC YC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1028\":\"wC\"},P:{\"1\":\"g yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I xC\"},Q:{\"1028\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"516\":\"BD\"}},B:5,C:\"CSS position:sticky\"};\n/data/features/css-clip-path.js\u0006-module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"2\":\"C K L G M N\",\"260\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"3138\":\"O\"},C:{\"1\":\"VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB\",\"132\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB FC GC\",\"644\":\"OB PB QB RB SB TB UB\"},D:{\"2\":\"0 I w J D E F A B C K L G M N O x g y z\",\"260\":\"WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"292\":\"1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB\"},E:{\"2\":\"I w J IC 0B JC KC\",\"260\":\"L G 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"292\":\"D E F A B C K LC MC 1B rB sB\"},F:{\"2\":\"F B C QC RC SC TC rB BC UC sB\",\"260\":\"JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"292\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB\"},G:{\"2\":\"0B VC CC WC XC\",\"260\":\"iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"292\":\"E YC ZC aC bC cC dC eC fC gC hC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I qC rC sC tC CC\",\"260\":\"H\",\"292\":\"uC vC\"},J:{\"2\":\"D A\"},K:{\"2\":\"A B C rB BC sB\",\"260\":\"h\"},L:{\"260\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"260\":\"wC\"},P:{\"292\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"260\":\"2B\"},R:{\"260\":\"AD\"},S:{\"1\":\"CD\",\"644\":\"BD\"}},B:4,C:\"CSS clip-path property (for HTML)\"};\n./data/features/mdn-css-unicode-bidi-isolate.js\u0005module.exports={A:{D:{\"1\":\"PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"I w J D E F A B C K L G\",\"33\":\"0 1 2 3 4 5 6 7 8 9 M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB\"},L:{\"1\":\"H\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"1\":\"RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB I w J D E F FC GC\",\"33\":\"0 1 2 3 4 5 6 7 8 9 A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB\"},M:{\"1\":\"f\"},A:{\"2\":\"J D E F A B DC\"},F:{\"1\":\"CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F B C QC RC SC TC rB BC UC sB\",\"33\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},E:{\"1\":\"B C K L G rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"I w IC 0B JC PC\",\"33\":\"J D E F A KC LC MC 1B\"},G:{\"1\":\"eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC CC WC\",\"33\":\"E XC YC ZC aC bC cC dC\"},P:{\"1\":\"g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"}},B:6,C:\"isolate from unicode-bidi\"};\n\"/data/features/css-font-palette.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"r s t u v f H\",\"2\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q\"},C:{\"1\":\"t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s FC GC\"},D:{\"1\":\"n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m\"},E:{\"1\":\"4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B\"},F:{\"1\":\"W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V QC RC SC TC rB BC UC sB\"},G:{\"1\":\"4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"1\":\"g 9C\",\"2\":\"I xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C\"},Q:{\"2\":\"2B\"},R:{\"2\":\"AD\"},S:{\"2\":\"BD CD\"}},B:5,C:\"CSS font-palette\"};\n/data/features/decorators.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"2\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"2\":\"A B C h rB BC sB\"},L:{\"2\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"2\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"2\":\"2B\"},R:{\"2\":\"AD\"},S:{\"2\":\"BD CD\"}},B:7,C:\"Decorators\"};\n/data/features/audiotracks.js\u0005module.exports={A:{A:{\"1\":\"A B\",\"2\":\"J D E F DC\"},B:{\"1\":\"C K L G M N O\",\"322\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z FC GC\",\"194\":\"AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\"},D:{\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB\",\"322\":\"MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"D E F A B C K L G KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J IC 0B JC\"},F:{\"2\":\"0 1 2 3 4 5 6 7 8 F B C G M N O x g y z QC RC SC TC rB BC UC sB\",\"322\":\"9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\"},G:{\"1\":\"E YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC CC WC XC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"2\":\"A B C rB BC sB\",\"322\":\"h\"},L:{\"322\":\"H\"},M:{\"2\":\"f\"},N:{\"1\":\"A B\"},O:{\"322\":\"wC\"},P:{\"2\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"322\":\"2B\"},R:{\"322\":\"AD\"},S:{\"194\":\"BD CD\"}},B:1,C:\"Audio Tracks\"};\n!/data/features/contenteditable.js\u0005module.exports={A:{A:{\"1\":\"J D E F A B DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\",\"2\":\"EC\",\"4\":\"uB\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\"},G:{\"1\":\"E WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC CC\"},H:{\"2\":\"pC\"},I:{\"1\":\"uB I H tC CC uC vC\",\"2\":\"qC rC sC\"},J:{\"1\":\"D A\"},K:{\"1\":\"h sB\",\"2\":\"A B C rB BC\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:1,C:\"contenteditable attribute (basic support)\"};\n/data/regions/MO.js\u0011module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0.00536,\"34\":0.07505,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0.00536,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0.00536,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0.04289,\"95\":0,\"96\":0,\"97\":0.00536,\"98\":0,\"99\":0.00536,\"100\":0.02144,\"101\":0,\"102\":0.03217,\"103\":0,\"104\":0.00536,\"105\":0.00536,\"106\":0.01072,\"107\":0.00536,\"108\":0.03753,\"109\":0.54146,\"110\":0.32702,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0.00536,\"23\":0,\"24\":0,\"25\":0,\"26\":0.00536,\"27\":0,\"28\":0,\"29\":0,\"30\":0.00536,\"31\":0,\"32\":0,\"33\":0,\"34\":0.05897,\"35\":0,\"36\":0,\"37\":0,\"38\":0.13939,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0.03217,\"50\":0,\"51\":0,\"52\":0,\"53\":0.01072,\"54\":0,\"55\":0.02144,\"56\":0,\"57\":0.00536,\"58\":0.01608,\"59\":0,\"60\":0.00536,\"61\":0.06433,\"62\":0.01608,\"63\":0,\"64\":0,\"65\":0.01072,\"66\":0,\"67\":0.00536,\"68\":0.01072,\"69\":0.00536,\"70\":0.02144,\"71\":0.00536,\"72\":0.00536,\"73\":0.01072,\"74\":0.01072,\"75\":0.00536,\"76\":0.00536,\"77\":0.01072,\"78\":0.01608,\"79\":0.28949,\"80\":0.03217,\"81\":0.49321,\"83\":0.02144,\"84\":0.00536,\"85\":0.00536,\"86\":0.01072,\"87\":0.08042,\"88\":0.01072,\"89\":0.04289,\"90\":0.00536,\"91\":0.01072,\"92\":0.16619,\"93\":0.00536,\"94\":0.01072,\"95\":0.01072,\"96\":0.03753,\"97\":0.1233,\"98\":0.07505,\"99\":0.08578,\"100\":0.07505,\"101\":0.04289,\"102\":0.04289,\"103\":0.18764,\"104\":0.07505,\"105\":0.16619,\"106\":0.07505,\"107\":0.19836,\"108\":0.57899,\"109\":8.40605,\"110\":4.94284,\"111\":0.01072,\"112\":0.01072,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0.01608,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0.03217,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0.1233,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0.01072,\"71\":0.01072,\"72\":0,\"73\":0,\"74\":0.00536,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.00536,\"94\":0.04825,\"95\":0.05897,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0.04825,\"15\":0,\"16\":0,\"17\":0,\"18\":0.02681,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.01072,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0.00536,\"106\":0,\"107\":0.01072,\"108\":0.07505,\"109\":1.13117,\"110\":1.28664},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0.00536,\"13\":0.03217,\"14\":0.25197,\"15\":0.03217,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0.00536,\"12.1\":0.02681,\"13.1\":0.11258,\"14.1\":0.55218,\"15.1\":0.05897,\"15.2-15.3\":0.04289,\"15.4\":0.13939,\"15.5\":0.27877,\"15.6\":0.95426,\"16.0\":0.0965,\"16.1\":0.20372,\"16.2\":0.9757,\"16.3\":0.49321,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0.00385,\"6.0-6.1\":0.12704,\"7.0-7.1\":0.05005,\"8.1-8.4\":0.08469,\"9.0-9.2\":0.05005,\"9.3\":0.40422,\"10.0-10.2\":0.0231,\"10.3\":0.48506,\"11.0-11.2\":0.11549,\"11.3-11.4\":0.08084,\"12.0-12.1\":0.10009,\"12.2-12.5\":1.85556,\"13.0-13.1\":0.13474,\"13.2\":0.0385,\"13.3\":0.08084,\"13.4-13.7\":0.41192,\"14.0-14.4\":0.75069,\"14.5-14.8\":2.22513,\"15.0-15.1\":0.42732,\"15.2-15.3\":1.10102,\"15.4\":0.96243,\"15.5\":1.15106,\"15.6\":4.42332,\"16.0\":2.59856,\"16.1\":7.93811,\"16.2\":6.98338,\"16.3\":3.93056,\"16.4\":0.0077},P:{\"4\":1.0829,\"20\":0.95295,\"5.0-5.4\":0.02166,\"6.2-6.4\":0,\"7.2-7.4\":0,\"8.2\":0,\"9.2\":0.05414,\"10.1\":0,\"11.1-11.2\":0,\"12.0\":0.01083,\"13.0\":0.03249,\"14.0\":0,\"15.0\":0.01083,\"16.0\":0.03249,\"17.0\":0.03249,\"18.0\":0.03249,\"19.0\":1.33197},I:{\"0\":0,\"3\":0,\"4\":0.00479,\"2.1\":0,\"2.2\":0.00479,\"2.3\":0.00479,\"4.1\":0.00958,\"4.2-4.3\":0.01438,\"4.4\":0,\"4.4.3-4.4.4\":0.11022},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0.03753,\"9\":0,\"10\":0,\"11\":0.30022,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.68657},H:{\"0\":0.12297},L:{\"0\":30.37382},R:{_:\"0\"},M:{\"0\":0.26906},Q:{\"13.1\":0.08814}};\n/data/features/css-sel2.js\u0005module.exports={A:{A:{\"1\":\"D E F A B\",\"2\":\"DC\",\"8\":\"J\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\"},G:{\"1\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"1\":\"pC\"},I:{\"1\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"1\":\"D A\"},K:{\"1\":\"A B C h rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:2,C:\"CSS 2.1 selectors\"};\n/data/features.jss>module.exports={\"aac\":require(\"./features/aac\"),\"abortcontroller\":require(\"./features/abortcontroller\"),\"ac3-ec3\":require(\"./features/ac3-ec3\"),\"accelerometer\":require(\"./features/accelerometer\"),\"addeventlistener\":require(\"./features/addeventlistener\"),\"alternate-stylesheet\":require(\"./features/alternate-stylesheet\"),\"ambient-light\":require(\"./features/ambient-light\"),\"apng\":require(\"./features/apng\"),\"array-find-index\":require(\"./features/array-find-index\"),\"array-find\":require(\"./features/array-find\"),\"array-flat\":require(\"./features/array-flat\"),\"array-includes\":require(\"./features/array-includes\"),\"arrow-functions\":require(\"./features/arrow-functions\"),\"asmjs\":require(\"./features/asmjs\"),\"async-clipboard\":require(\"./features/async-clipboard\"),\"async-functions\":require(\"./features/async-functions\"),\"atob-btoa\":require(\"./features/atob-btoa\"),\"audio-api\":require(\"./features/audio-api\"),\"audio\":require(\"./features/audio\"),\"audiotracks\":require(\"./features/audiotracks\"),\"autofocus\":require(\"./features/autofocus\"),\"auxclick\":require(\"./features/auxclick\"),\"av1\":require(\"./features/av1\"),\"avif\":require(\"./features/avif\"),\"background-attachment\":require(\"./features/background-attachment\"),\"background-clip-text\":require(\"./features/background-clip-text\"),\"background-img-opts\":require(\"./features/background-img-opts\"),\"background-position-x-y\":require(\"./features/background-position-x-y\"),\"background-repeat-round-space\":require(\"./features/background-repeat-round-space\"),\"background-sync\":require(\"./features/background-sync\"),\"battery-status\":require(\"./features/battery-status\"),\"beacon\":require(\"./features/beacon\"),\"beforeafterprint\":require(\"./features/beforeafterprint\"),\"bigint\":require(\"./features/bigint\"),\"blobbuilder\":require(\"./features/blobbuilder\"),\"bloburls\":require(\"./features/bloburls\"),\"border-image\":require(\"./features/border-image\"),\"border-radius\":require(\"./features/border-radius\"),\"broadcastchannel\":require(\"./features/broadcastchannel\"),\"brotli\":require(\"./features/brotli\"),\"calc\":require(\"./features/calc\"),\"canvas-blending\":require(\"./features/canvas-blending\"),\"canvas-text\":require(\"./features/canvas-text\"),\"canvas\":require(\"./features/canvas\"),\"ch-unit\":require(\"./features/ch-unit\"),\"chacha20-poly1305\":require(\"./features/chacha20-poly1305\"),\"channel-messaging\":require(\"./features/channel-messaging\"),\"childnode-remove\":require(\"./features/childnode-remove\"),\"classlist\":require(\"./features/classlist\"),\"client-hints-dpr-width-viewport\":require(\"./features/client-hints-dpr-width-viewport\"),\"clipboard\":require(\"./features/clipboard\"),\"colr-v1\":require(\"./features/colr-v1\"),\"colr\":require(\"./features/colr\"),\"comparedocumentposition\":require(\"./features/comparedocumentposition\"),\"console-basic\":require(\"./features/console-basic\"),\"console-time\":require(\"./features/console-time\"),\"const\":require(\"./features/const\"),\"constraint-validation\":require(\"./features/constraint-validation\"),\"contenteditable\":require(\"./features/contenteditable\"),\"contentsecuritypolicy\":require(\"./features/contentsecuritypolicy\"),\"contentsecuritypolicy2\":require(\"./features/contentsecuritypolicy2\"),\"cookie-store-api\":require(\"./features/cookie-store-api\"),\"cors\":require(\"./features/cors\"),\"createimagebitmap\":require(\"./features/createimagebitmap\"),\"credential-management\":require(\"./features/credential-management\"),\"cryptography\":require(\"./features/cryptography\"),\"css-all\":require(\"./features/css-all\"),\"css-animation\":require(\"./features/css-animation\"),\"css-any-link\":require(\"./features/css-any-link\"),\"css-appearance\":require(\"./features/css-appearance\"),\"css-at-counter-style\":require(\"./features/css-at-counter-style\"),\"css-autofill\":require(\"./features/css-autofill\"),\"css-backdrop-filter\":require(\"./features/css-backdrop-filter\"),\"css-background-offsets\":require(\"./features/css-background-offsets\"),\"css-backgroundblendmode\":require(\"./features/css-backgroundblendmode\"),\"css-boxdecorationbreak\":require(\"./features/css-boxdecorationbreak\"),\"css-boxshadow\":require(\"./features/css-boxshadow\"),\"css-canvas\":require(\"./features/css-canvas\"),\"css-caret-color\":require(\"./features/css-caret-color\"),\"css-cascade-layers\":require(\"./features/css-cascade-layers\"),\"css-case-insensitive\":require(\"./features/css-case-insensitive\"),\"css-clip-path\":require(\"./features/css-clip-path\"),\"css-color-adjust\":require(\"./features/css-color-adjust\"),\"css-color-function\":require(\"./features/css-color-function\"),\"css-conic-gradients\":require(\"./features/css-conic-gradients\"),\"css-container-queries-style\":require(\"./features/css-container-queries-style\"),\"css-container-queries\":require(\"./features/css-container-queries\"),\"css-container-query-units\":require(\"./features/css-container-query-units\"),\"css-containment\":require(\"./features/css-containment\"),\"css-content-visibility\":require(\"./features/css-content-visibility\"),\"css-counters\":require(\"./features/css-counters\"),\"css-crisp-edges\":require(\"./features/css-crisp-edges\"),\"css-cross-fade\":require(\"./features/css-cross-fade\"),\"css-default-pseudo\":require(\"./features/css-default-pseudo\"),\"css-descendant-gtgt\":require(\"./features/css-descendant-gtgt\"),\"css-deviceadaptation\":require(\"./features/css-deviceadaptation\"),\"css-dir-pseudo\":require(\"./features/css-dir-pseudo\"),\"css-display-contents\":require(\"./features/css-display-contents\"),\"css-element-function\":require(\"./features/css-element-function\"),\"css-env-function\":require(\"./features/css-env-function\"),\"css-exclusions\":require(\"./features/css-exclusions\"),\"css-featurequeries\":require(\"./features/css-featurequeries\"),\"css-file-selector-button\":require(\"./features/css-file-selector-button\"),\"css-filter-function\":require(\"./features/css-filter-function\"),\"css-filters\":require(\"./features/css-filters\"),\"css-first-letter\":require(\"./features/css-first-letter\"),\"css-first-line\":require(\"./features/css-first-line\"),\"css-fixed\":require(\"./features/css-fixed\"),\"css-focus-visible\":require(\"./features/css-focus-visible\"),\"css-focus-within\":require(\"./features/css-focus-within\"),\"css-font-palette\":require(\"./features/css-font-palette\"),\"css-font-rendering-controls\":require(\"./features/css-font-rendering-controls\"),\"css-font-stretch\":require(\"./features/css-font-stretch\"),\"css-gencontent\":require(\"./features/css-gencontent\"),\"css-gradients\":require(\"./features/css-gradients\"),\"css-grid-animation\":require(\"./features/css-grid-animation\"),\"css-grid\":require(\"./features/css-grid\"),\"css-hanging-punctuation\":require(\"./features/css-hanging-punctuation\"),\"css-has\":require(\"./features/css-has\"),\"css-hyphens\":require(\"./features/css-hyphens\"),\"css-image-orientation\":require(\"./features/css-image-orientation\"),\"css-image-set\":require(\"./features/css-image-set\"),\"css-in-out-of-range\":require(\"./features/css-in-out-of-range\"),\"css-indeterminate-pseudo\":require(\"./features/css-indeterminate-pseudo\"),\"css-initial-letter\":require(\"./features/css-initial-letter\"),\"css-initial-value\":require(\"./features/css-initial-value\"),\"css-lch-lab\":require(\"./features/css-lch-lab\"),\"css-letter-spacing\":require(\"./features/css-letter-spacing\"),\"css-line-clamp\":require(\"./features/css-line-clamp\"),\"css-logical-props\":require(\"./features/css-logical-props\"),\"css-marker-pseudo\":require(\"./features/css-marker-pseudo\"),\"css-masks\":require(\"./features/css-masks\"),\"css-matches-pseudo\":require(\"./features/css-matches-pseudo\"),\"css-math-functions\":require(\"./features/css-math-functions\"),\"css-media-interaction\":require(\"./features/css-media-interaction\"),\"css-media-range-syntax\":require(\"./features/css-media-range-syntax\"),\"css-media-resolution\":require(\"./features/css-media-resolution\"),\"css-media-scripting\":require(\"./features/css-media-scripting\"),\"css-mediaqueries\":require(\"./features/css-mediaqueries\"),\"css-mixblendmode\":require(\"./features/css-mixblendmode\"),\"css-motion-paths\":require(\"./features/css-motion-paths\"),\"css-namespaces\":require(\"./features/css-namespaces\"),\"css-nesting\":require(\"./features/css-nesting\"),\"css-not-sel-list\":require(\"./features/css-not-sel-list\"),\"css-nth-child-of\":require(\"./features/css-nth-child-of\"),\"css-opacity\":require(\"./features/css-opacity\"),\"css-optional-pseudo\":require(\"./features/css-optional-pseudo\"),\"css-overflow-anchor\":require(\"./features/css-overflow-anchor\"),\"css-overflow-overlay\":require(\"./features/css-overflow-overlay\"),\"css-overflow\":require(\"./features/css-overflow\"),\"css-overscroll-behavior\":require(\"./features/css-overscroll-behavior\"),\"css-page-break\":require(\"./features/css-page-break\"),\"css-paged-media\":require(\"./features/css-paged-media\"),\"css-paint-api\":require(\"./features/css-paint-api\"),\"css-placeholder-shown\":require(\"./features/css-placeholder-shown\"),\"css-placeholder\":require(\"./features/css-placeholder\"),\"css-print-color-adjust\":require(\"./features/css-print-color-adjust\"),\"css-read-only-write\":require(\"./features/css-read-only-write\"),\"css-rebeccapurple\":require(\"./features/css-rebeccapurple\"),\"css-reflections\":require(\"./features/css-reflections\"),\"css-regions\":require(\"./features/css-regions\"),\"css-repeating-gradients\":require(\"./features/css-repeating-gradients\"),\"css-resize\":require(\"./features/css-resize\"),\"css-revert-value\":require(\"./features/css-revert-value\"),\"css-rrggbbaa\":require(\"./features/css-rrggbbaa\"),\"css-scroll-behavior\":require(\"./features/css-scroll-behavior\"),\"css-scroll-timeline\":require(\"./features/css-scroll-timeline\"),\"css-scrollbar\":require(\"./features/css-scrollbar\"),\"css-sel2\":require(\"./features/css-sel2\"),\"css-sel3\":require(\"./features/css-sel3\"),\"css-selection\":require(\"./features/css-selection\"),\"css-shapes\":require(\"./features/css-shapes\"),\"css-snappoints\":require(\"./features/css-snappoints\"),\"css-sticky\":require(\"./features/css-sticky\"),\"css-subgrid\":require(\"./features/css-subgrid\"),\"css-supports-api\":require(\"./features/css-supports-api\"),\"css-table\":require(\"./features/css-table\"),\"css-text-align-last\":require(\"./features/css-text-align-last\"),\"css-text-box-trim\":require(\"./features/css-text-box-trim\"),\"css-text-indent\":require(\"./features/css-text-indent\"),\"css-text-justify\":require(\"./features/css-text-justify\"),\"css-text-orientation\":require(\"./features/css-text-orientation\"),\"css-text-spacing\":require(\"./features/css-text-spacing\"),\"css-textshadow\":require(\"./features/css-textshadow\"),\"css-touch-action\":require(\"./features/css-touch-action\"),\"css-transitions\":require(\"./features/css-transitions\"),\"css-unicode-bidi\":require(\"./features/css-unicode-bidi\"),\"css-unset-value\":require(\"./features/css-unset-value\"),\"css-variables\":require(\"./features/css-variables\"),\"css-when-else\":require(\"./features/css-when-else\"),\"css-widows-orphans\":require(\"./features/css-widows-orphans\"),\"css-width-stretch\":require(\"./features/css-width-stretch\"),\"css-writing-mode\":require(\"./features/css-writing-mode\"),\"css-zoom\":require(\"./features/css-zoom\"),\"css3-attr\":require(\"./features/css3-attr\"),\"css3-boxsizing\":require(\"./features/css3-boxsizing\"),\"css3-colors\":require(\"./features/css3-colors\"),\"css3-cursors-grab\":require(\"./features/css3-cursors-grab\"),\"css3-cursors-newer\":require(\"./features/css3-cursors-newer\"),\"css3-cursors\":require(\"./features/css3-cursors\"),\"css3-tabsize\":require(\"./features/css3-tabsize\"),\"currentcolor\":require(\"./features/currentcolor\"),\"custom-elements\":require(\"./features/custom-elements\"),\"custom-elementsv1\":require(\"./features/custom-elementsv1\"),\"customevent\":require(\"./features/customevent\"),\"datalist\":require(\"./features/datalist\"),\"dataset\":require(\"./features/dataset\"),\"datauri\":require(\"./features/datauri\"),\"date-tolocaledatestring\":require(\"./features/date-tolocaledatestring\"),\"declarative-shadow-dom\":require(\"./features/declarative-shadow-dom\"),\"decorators\":require(\"./features/decorators\"),\"details\":require(\"./features/details\"),\"deviceorientation\":require(\"./features/deviceorientation\"),\"devicepixelratio\":require(\"./features/devicepixelratio\"),\"dialog\":require(\"./features/dialog\"),\"dispatchevent\":require(\"./features/dispatchevent\"),\"dnssec\":require(\"./features/dnssec\"),\"do-not-track\":require(\"./features/do-not-track\"),\"document-currentscript\":require(\"./features/document-currentscript\"),\"document-evaluate-xpath\":require(\"./features/document-evaluate-xpath\"),\"document-execcommand\":require(\"./features/document-execcommand\"),\"document-policy\":require(\"./features/document-policy\"),\"document-scrollingelement\":require(\"./features/document-scrollingelement\"),\"documenthead\":require(\"./features/documenthead\"),\"dom-manip-convenience\":require(\"./features/dom-manip-convenience\"),\"dom-range\":require(\"./features/dom-range\"),\"domcontentloaded\":require(\"./features/domcontentloaded\"),\"dommatrix\":require(\"./features/dommatrix\"),\"download\":require(\"./features/download\"),\"dragndrop\":require(\"./features/dragndrop\"),\"element-closest\":require(\"./features/element-closest\"),\"element-from-point\":require(\"./features/element-from-point\"),\"element-scroll-methods\":require(\"./features/element-scroll-methods\"),\"eme\":require(\"./features/eme\"),\"eot\":require(\"./features/eot\"),\"es5\":require(\"./features/es5\"),\"es6-class\":require(\"./features/es6-class\"),\"es6-generators\":require(\"./features/es6-generators\"),\"es6-module-dynamic-import\":require(\"./features/es6-module-dynamic-import\"),\"es6-module\":require(\"./features/es6-module\"),\"es6-number\":require(\"./features/es6-number\"),\"es6-string-includes\":require(\"./features/es6-string-includes\"),\"es6\":require(\"./features/es6\"),\"eventsource\":require(\"./features/eventsource\"),\"extended-system-fonts\":require(\"./features/extended-system-fonts\"),\"feature-policy\":require(\"./features/feature-policy\"),\"fetch\":require(\"./features/fetch\"),\"fieldset-disabled\":require(\"./features/fieldset-disabled\"),\"fileapi\":require(\"./features/fileapi\"),\"filereader\":require(\"./features/filereader\"),\"filereadersync\":require(\"./features/filereadersync\"),\"filesystem\":require(\"./features/filesystem\"),\"flac\":require(\"./features/flac\"),\"flexbox-gap\":require(\"./features/flexbox-gap\"),\"flexbox\":require(\"./features/flexbox\"),\"flow-root\":require(\"./features/flow-root\"),\"focusin-focusout-events\":require(\"./features/focusin-focusout-events\"),\"font-family-system-ui\":require(\"./features/font-family-system-ui\"),\"font-feature\":require(\"./features/font-feature\"),\"font-kerning\":require(\"./features/font-kerning\"),\"font-loading\":require(\"./features/font-loading\"),\"font-size-adjust\":require(\"./features/font-size-adjust\"),\"font-smooth\":require(\"./features/font-smooth\"),\"font-unicode-range\":require(\"./features/font-unicode-range\"),\"font-variant-alternates\":require(\"./features/font-variant-alternates\"),\"font-variant-numeric\":require(\"./features/font-variant-numeric\"),\"fontface\":require(\"./features/fontface\"),\"form-attribute\":require(\"./features/form-attribute\"),\"form-submit-attributes\":require(\"./features/form-submit-attributes\"),\"form-validation\":require(\"./features/form-validation\"),\"forms\":require(\"./features/forms\"),\"fullscreen\":require(\"./features/fullscreen\"),\"gamepad\":require(\"./features/gamepad\"),\"geolocation\":require(\"./features/geolocation\"),\"getboundingclientrect\":require(\"./features/getboundingclientrect\"),\"getcomputedstyle\":require(\"./features/getcomputedstyle\"),\"getelementsbyclassname\":require(\"./features/getelementsbyclassname\"),\"getrandomvalues\":require(\"./features/getrandomvalues\"),\"gyroscope\":require(\"./features/gyroscope\"),\"hardwareconcurrency\":require(\"./features/hardwareconcurrency\"),\"hashchange\":require(\"./features/hashchange\"),\"heif\":require(\"./features/heif\"),\"hevc\":require(\"./features/hevc\"),\"hidden\":require(\"./features/hidden\"),\"high-resolution-time\":require(\"./features/high-resolution-time\"),\"history\":require(\"./features/history\"),\"html-media-capture\":require(\"./features/html-media-capture\"),\"html5semantic\":require(\"./features/html5semantic\"),\"http-live-streaming\":require(\"./features/http-live-streaming\"),\"http2\":require(\"./features/http2\"),\"http3\":require(\"./features/http3\"),\"iframe-sandbox\":require(\"./features/iframe-sandbox\"),\"iframe-seamless\":require(\"./features/iframe-seamless\"),\"iframe-srcdoc\":require(\"./features/iframe-srcdoc\"),\"imagecapture\":require(\"./features/imagecapture\"),\"ime\":require(\"./features/ime\"),\"img-naturalwidth-naturalheight\":require(\"./features/img-naturalwidth-naturalheight\"),\"import-maps\":require(\"./features/import-maps\"),\"imports\":require(\"./features/imports\"),\"indeterminate-checkbox\":require(\"./features/indeterminate-checkbox\"),\"indexeddb\":require(\"./features/indexeddb\"),\"indexeddb2\":require(\"./features/indexeddb2\"),\"inline-block\":require(\"./features/inline-block\"),\"innertext\":require(\"./features/innertext\"),\"input-autocomplete-onoff\":require(\"./features/input-autocomplete-onoff\"),\"input-color\":require(\"./features/input-color\"),\"input-datetime\":require(\"./features/input-datetime\"),\"input-email-tel-url\":require(\"./features/input-email-tel-url\"),\"input-event\":require(\"./features/input-event\"),\"input-file-accept\":require(\"./features/input-file-accept\"),\"input-file-directory\":require(\"./features/input-file-directory\"),\"input-file-multiple\":require(\"./features/input-file-multiple\"),\"input-inputmode\":require(\"./features/input-inputmode\"),\"input-minlength\":require(\"./features/input-minlength\"),\"input-number\":require(\"./features/input-number\"),\"input-pattern\":require(\"./features/input-pattern\"),\"input-placeholder\":require(\"./features/input-placeholder\"),\"input-range\":require(\"./features/input-range\"),\"input-search\":require(\"./features/input-search\"),\"input-selection\":require(\"./features/input-selection\"),\"insert-adjacent\":require(\"./features/insert-adjacent\"),\"insertadjacenthtml\":require(\"./features/insertadjacenthtml\"),\"internationalization\":require(\"./features/internationalization\"),\"intersectionobserver-v2\":require(\"./features/intersectionobserver-v2\"),\"intersectionobserver\":require(\"./features/intersectionobserver\"),\"intl-pluralrules\":require(\"./features/intl-pluralrules\"),\"intrinsic-width\":require(\"./features/intrinsic-width\"),\"jpeg2000\":require(\"./features/jpeg2000\"),\"jpegxl\":require(\"./features/jpegxl\"),\"jpegxr\":require(\"./features/jpegxr\"),\"js-regexp-lookbehind\":require(\"./features/js-regexp-lookbehind\"),\"json\":require(\"./features/json\"),\"justify-content-space-evenly\":require(\"./features/justify-content-space-evenly\"),\"kerning-pairs-ligatures\":require(\"./features/kerning-pairs-ligatures\"),\"keyboardevent-charcode\":require(\"./features/keyboardevent-charcode\"),\"keyboardevent-code\":require(\"./features/keyboardevent-code\"),\"keyboardevent-getmodifierstate\":require(\"./features/keyboardevent-getmodifierstate\"),\"keyboardevent-key\":require(\"./features/keyboardevent-key\"),\"keyboardevent-location\":require(\"./features/keyboardevent-location\"),\"keyboardevent-which\":require(\"./features/keyboardevent-which\"),\"lazyload\":require(\"./features/lazyload\"),\"let\":require(\"./features/let\"),\"link-icon-png\":require(\"./features/link-icon-png\"),\"link-icon-svg\":require(\"./features/link-icon-svg\"),\"link-rel-dns-prefetch\":require(\"./features/link-rel-dns-prefetch\"),\"link-rel-modulepreload\":require(\"./features/link-rel-modulepreload\"),\"link-rel-preconnect\":require(\"./features/link-rel-preconnect\"),\"link-rel-prefetch\":require(\"./features/link-rel-prefetch\"),\"link-rel-preload\":require(\"./features/link-rel-preload\"),\"link-rel-prerender\":require(\"./features/link-rel-prerender\"),\"loading-lazy-attr\":require(\"./features/loading-lazy-attr\"),\"localecompare\":require(\"./features/localecompare\"),\"magnetometer\":require(\"./features/magnetometer\"),\"matchesselector\":require(\"./features/matchesselector\"),\"matchmedia\":require(\"./features/matchmedia\"),\"mathml\":require(\"./features/mathml\"),\"maxlength\":require(\"./features/maxlength\"),\"mdn-css-unicode-bidi-isolate-override\":require(\"./features/mdn-css-unicode-bidi-isolate-override\"),\"mdn-css-unicode-bidi-isolate\":require(\"./features/mdn-css-unicode-bidi-isolate\"),\"mdn-css-unicode-bidi-plaintext\":require(\"./features/mdn-css-unicode-bidi-plaintext\"),\"mdn-text-decoration-color\":require(\"./features/mdn-text-decoration-color\"),\"mdn-text-decoration-line\":require(\"./features/mdn-text-decoration-line\"),\"mdn-text-decoration-shorthand\":require(\"./features/mdn-text-decoration-shorthand\"),\"mdn-text-decoration-style\":require(\"./features/mdn-text-decoration-style\"),\"media-fragments\":require(\"./features/media-fragments\"),\"mediacapture-fromelement\":require(\"./features/mediacapture-fromelement\"),\"mediarecorder\":require(\"./features/mediarecorder\"),\"mediasource\":require(\"./features/mediasource\"),\"menu\":require(\"./features/menu\"),\"meta-theme-color\":require(\"./features/meta-theme-color\"),\"meter\":require(\"./features/meter\"),\"midi\":require(\"./features/midi\"),\"minmaxwh\":require(\"./features/minmaxwh\"),\"mp3\":require(\"./features/mp3\"),\"mpeg-dash\":require(\"./features/mpeg-dash\"),\"mpeg4\":require(\"./features/mpeg4\"),\"multibackgrounds\":require(\"./features/multibackgrounds\"),\"multicolumn\":require(\"./features/multicolumn\"),\"mutation-events\":require(\"./features/mutation-events\"),\"mutationobserver\":require(\"./features/mutationobserver\"),\"namevalue-storage\":require(\"./features/namevalue-storage\"),\"native-filesystem-api\":require(\"./features/native-filesystem-api\"),\"nav-timing\":require(\"./features/nav-timing\"),\"netinfo\":require(\"./features/netinfo\"),\"notifications\":require(\"./features/notifications\"),\"object-entries\":require(\"./features/object-entries\"),\"object-fit\":require(\"./features/object-fit\"),\"object-observe\":require(\"./features/object-observe\"),\"object-values\":require(\"./features/object-values\"),\"objectrtc\":require(\"./features/objectrtc\"),\"offline-apps\":require(\"./features/offline-apps\"),\"offscreencanvas\":require(\"./features/offscreencanvas\"),\"ogg-vorbis\":require(\"./features/ogg-vorbis\"),\"ogv\":require(\"./features/ogv\"),\"ol-reversed\":require(\"./features/ol-reversed\"),\"once-event-listener\":require(\"./features/once-event-listener\"),\"online-status\":require(\"./features/online-status\"),\"opus\":require(\"./features/opus\"),\"orientation-sensor\":require(\"./features/orientation-sensor\"),\"outline\":require(\"./features/outline\"),\"pad-start-end\":require(\"./features/pad-start-end\"),\"page-transition-events\":require(\"./features/page-transition-events\"),\"pagevisibility\":require(\"./features/pagevisibility\"),\"passive-event-listener\":require(\"./features/passive-event-listener\"),\"passwordrules\":require(\"./features/passwordrules\"),\"path2d\":require(\"./features/path2d\"),\"payment-request\":require(\"./features/payment-request\"),\"pdf-viewer\":require(\"./features/pdf-viewer\"),\"permissions-api\":require(\"./features/permissions-api\"),\"permissions-policy\":require(\"./features/permissions-policy\"),\"picture-in-picture\":require(\"./features/picture-in-picture\"),\"picture\":require(\"./features/picture\"),\"ping\":require(\"./features/ping\"),\"png-alpha\":require(\"./features/png-alpha\"),\"pointer-events\":require(\"./features/pointer-events\"),\"pointer\":require(\"./features/pointer\"),\"pointerlock\":require(\"./features/pointerlock\"),\"portals\":require(\"./features/portals\"),\"prefers-color-scheme\":require(\"./features/prefers-color-scheme\"),\"prefers-reduced-motion\":require(\"./features/prefers-reduced-motion\"),\"progress\":require(\"./features/progress\"),\"promise-finally\":require(\"./features/promise-finally\"),\"promises\":require(\"./features/promises\"),\"proximity\":require(\"./features/proximity\"),\"proxy\":require(\"./features/proxy\"),\"publickeypinning\":require(\"./features/publickeypinning\"),\"push-api\":require(\"./features/push-api\"),\"queryselector\":require(\"./features/queryselector\"),\"readonly-attr\":require(\"./features/readonly-attr\"),\"referrer-policy\":require(\"./features/referrer-policy\"),\"registerprotocolhandler\":require(\"./features/registerprotocolhandler\"),\"rel-noopener\":require(\"./features/rel-noopener\"),\"rel-noreferrer\":require(\"./features/rel-noreferrer\"),\"rellist\":require(\"./features/rellist\"),\"rem\":require(\"./features/rem\"),\"requestanimationframe\":require(\"./features/requestanimationframe\"),\"requestidlecallback\":require(\"./features/requestidlecallback\"),\"resizeobserver\":require(\"./features/resizeobserver\"),\"resource-timing\":require(\"./features/resource-timing\"),\"rest-parameters\":require(\"./features/rest-parameters\"),\"rtcpeerconnection\":require(\"./features/rtcpeerconnection\"),\"ruby\":require(\"./features/ruby\"),\"run-in\":require(\"./features/run-in\"),\"same-site-cookie-attribute\":require(\"./features/same-site-cookie-attribute\"),\"screen-orientation\":require(\"./features/screen-orientation\"),\"script-async\":require(\"./features/script-async\"),\"script-defer\":require(\"./features/script-defer\"),\"scrollintoview\":require(\"./features/scrollintoview\"),\"scrollintoviewifneeded\":require(\"./features/scrollintoviewifneeded\"),\"sdch\":require(\"./features/sdch\"),\"selection-api\":require(\"./features/selection-api\"),\"server-timing\":require(\"./features/server-timing\"),\"serviceworkers\":require(\"./features/serviceworkers\"),\"setimmediate\":require(\"./features/setimmediate\"),\"shadowdom\":require(\"./features/shadowdom\"),\"shadowdomv1\":require(\"./features/shadowdomv1\"),\"sharedarraybuffer\":require(\"./features/sharedarraybuffer\"),\"sharedworkers\":require(\"./features/sharedworkers\"),\"sni\":require(\"./features/sni\"),\"spdy\":require(\"./features/spdy\"),\"speech-recognition\":require(\"./features/speech-recognition\"),\"speech-synthesis\":require(\"./features/speech-synthesis\"),\"spellcheck-attribute\":require(\"./features/spellcheck-attribute\"),\"sql-storage\":require(\"./features/sql-storage\"),\"srcset\":require(\"./features/srcset\"),\"stream\":require(\"./features/stream\"),\"streams\":require(\"./features/streams\"),\"stricttransportsecurity\":require(\"./features/stricttransportsecurity\"),\"style-scoped\":require(\"./features/style-scoped\"),\"subresource-bundling\":require(\"./features/subresource-bundling\"),\"subresource-integrity\":require(\"./features/subresource-integrity\"),\"svg-css\":require(\"./features/svg-css\"),\"svg-filters\":require(\"./features/svg-filters\"),\"svg-fonts\":require(\"./features/svg-fonts\"),\"svg-fragment\":require(\"./features/svg-fragment\"),\"svg-html\":require(\"./features/svg-html\"),\"svg-html5\":require(\"./features/svg-html5\"),\"svg-img\":require(\"./features/svg-img\"),\"svg-smil\":require(\"./features/svg-smil\"),\"svg\":require(\"./features/svg\"),\"sxg\":require(\"./features/sxg\"),\"tabindex-attr\":require(\"./features/tabindex-attr\"),\"template-literals\":require(\"./features/template-literals\"),\"template\":require(\"./features/template\"),\"temporal\":require(\"./features/temporal\"),\"testfeat\":require(\"./features/testfeat\"),\"text-decoration\":require(\"./features/text-decoration\"),\"text-emphasis\":require(\"./features/text-emphasis\"),\"text-overflow\":require(\"./features/text-overflow\"),\"text-size-adjust\":require(\"./features/text-size-adjust\"),\"text-stroke\":require(\"./features/text-stroke\"),\"textcontent\":require(\"./features/textcontent\"),\"textencoder\":require(\"./features/textencoder\"),\"tls1-1\":require(\"./features/tls1-1\"),\"tls1-2\":require(\"./features/tls1-2\"),\"tls1-3\":require(\"./features/tls1-3\"),\"touch\":require(\"./features/touch\"),\"transforms2d\":require(\"./features/transforms2d\"),\"transforms3d\":require(\"./features/transforms3d\"),\"trusted-types\":require(\"./features/trusted-types\"),\"ttf\":require(\"./features/ttf\"),\"typedarrays\":require(\"./features/typedarrays\"),\"u2f\":require(\"./features/u2f\"),\"unhandledrejection\":require(\"./features/unhandledrejection\"),\"upgradeinsecurerequests\":require(\"./features/upgradeinsecurerequests\"),\"url-scroll-to-text-fragment\":require(\"./features/url-scroll-to-text-fragment\"),\"url\":require(\"./features/url\"),\"urlsearchparams\":require(\"./features/urlsearchparams\"),\"use-strict\":require(\"./features/use-strict\"),\"user-select-none\":require(\"./features/user-select-none\"),\"user-timing\":require(\"./features/user-timing\"),\"variable-fonts\":require(\"./features/variable-fonts\"),\"vector-effect\":require(\"./features/vector-effect\"),\"vibration\":require(\"./features/vibration\"),\"video\":require(\"./features/video\"),\"videotracks\":require(\"./features/videotracks\"),\"viewport-unit-variants\":require(\"./features/viewport-unit-variants\"),\"viewport-units\":require(\"./features/viewport-units\"),\"wai-aria\":require(\"./features/wai-aria\"),\"wake-lock\":require(\"./features/wake-lock\"),\"wasm\":require(\"./features/wasm\"),\"wav\":require(\"./features/wav\"),\"wbr-element\":require(\"./features/wbr-element\"),\"web-animation\":require(\"./features/web-animation\"),\"web-app-manifest\":require(\"./features/web-app-manifest\"),\"web-bluetooth\":require(\"./features/web-bluetooth\"),\"web-serial\":require(\"./features/web-serial\"),\"web-share\":require(\"./features/web-share\"),\"webauthn\":require(\"./features/webauthn\"),\"webcodecs\":require(\"./features/webcodecs\"),\"webgl\":require(\"./features/webgl\"),\"webgl2\":require(\"./features/webgl2\"),\"webgpu\":require(\"./features/webgpu\"),\"webhid\":require(\"./features/webhid\"),\"webkit-user-drag\":require(\"./features/webkit-user-drag\"),\"webm\":require(\"./features/webm\"),\"webnfc\":require(\"./features/webnfc\"),\"webp\":require(\"./features/webp\"),\"websockets\":require(\"./features/websockets\"),\"webtransport\":require(\"./features/webtransport\"),\"webusb\":require(\"./features/webusb\"),\"webvr\":require(\"./features/webvr\"),\"webvtt\":require(\"./features/webvtt\"),\"webworkers\":require(\"./features/webworkers\"),\"webxr\":require(\"./features/webxr\"),\"will-change\":require(\"./features/will-change\"),\"woff\":require(\"./features/woff\"),\"woff2\":require(\"./features/woff2\"),\"word-break\":require(\"./features/word-break\"),\"wordwrap\":require(\"./features/wordwrap\"),\"x-doc-messaging\":require(\"./features/x-doc-messaging\"),\"x-frame-options\":require(\"./features/x-frame-options\"),\"xhr2\":require(\"./features/xhr2\"),\"xhtml\":require(\"./features/xhtml\"),\"xhtmlsmil\":require(\"./features/xhtmlsmil\"),\"xml-serializer\":require(\"./features/xml-serializer\")};\n/data/regions/UY.js\u0011=module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.019,\"53\":0,\"54\":0,\"55\":0.0038,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0.0038,\"67\":0,\"68\":0.0038,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0.019,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.0038,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0.0038,\"84\":0,\"85\":0,\"86\":0.0038,\"87\":0,\"88\":0.0038,\"89\":0,\"90\":0,\"91\":0.0038,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0.0152,\"98\":0,\"99\":0.0038,\"100\":0.019,\"101\":0,\"102\":0.019,\"103\":0.0038,\"104\":0.02279,\"105\":0.0038,\"106\":0.0076,\"107\":0.0038,\"108\":0.0114,\"109\":0.36091,\"110\":0.26973,\"111\":0.0038,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0.05319,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0.0038,\"48\":0,\"49\":0.02659,\"50\":0,\"51\":0,\"52\":0,\"53\":0.0038,\"54\":0,\"55\":0.0038,\"56\":0,\"57\":0,\"58\":0.0038,\"59\":0,\"60\":0,\"61\":0,\"62\":0.0076,\"63\":0.0038,\"64\":0,\"65\":0.0076,\"66\":0,\"67\":0,\"68\":0,\"69\":0.0038,\"70\":0.0038,\"71\":0.0038,\"72\":0,\"73\":0.0076,\"74\":0.0076,\"75\":0.0038,\"76\":0,\"77\":0.0038,\"78\":0.0038,\"79\":0.0114,\"80\":0.019,\"81\":0.0038,\"83\":0.0076,\"84\":0.0038,\"85\":0.0076,\"86\":0.15196,\"87\":0.0076,\"88\":0.0038,\"89\":0.0038,\"90\":0.0038,\"91\":0.0114,\"92\":0.0038,\"93\":0.0114,\"94\":0.0152,\"95\":0.0076,\"96\":0.02659,\"97\":0.0114,\"98\":0.0076,\"99\":0.0076,\"100\":0.02659,\"101\":0.02279,\"102\":0.0114,\"103\":0.05319,\"104\":0.0152,\"105\":0.019,\"106\":0.03799,\"107\":0.06838,\"108\":0.24314,\"109\":5.65291,\"110\":3.54067,\"111\":0,\"112\":0.0038,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0.0038,\"29\":0,\"30\":0,\"31\":0,\"32\":0.0038,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.0038,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0.0038,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0.0038,\"92\":0,\"93\":0.12537,\"94\":0.83198,\"95\":0.25073,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0.0038,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0.0114,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.0038,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0.0038,\"102\":0,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0.019,\"108\":0.019,\"109\":0.3989,\"110\":0.52046},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.0038,\"14\":0.0114,\"15\":0.0038,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0.0038,\"13.1\":0.02659,\"14.1\":0.02659,\"15.1\":0.0114,\"15.2-15.3\":0.0038,\"15.4\":0.0114,\"15.5\":0.03039,\"15.6\":0.07218,\"16.0\":0.0076,\"16.1\":0.03419,\"16.2\":0.06458,\"16.3\":0.06838,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0.03081,\"6.0-6.1\":0.00147,\"7.0-7.1\":0.0132,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0.02347,\"10.0-10.2\":0,\"10.3\":0.02787,\"11.0-11.2\":0.0044,\"11.3-11.4\":0.00293,\"12.0-12.1\":0.0176,\"12.2-12.5\":0.38731,\"13.0-13.1\":0.00293,\"13.2\":0,\"13.3\":0.01907,\"13.4-13.7\":0.07922,\"14.0-14.4\":0.13057,\"14.5-14.8\":0.40491,\"15.0-15.1\":0.07776,\"15.2-15.3\":0.1115,\"15.4\":0.11883,\"15.5\":0.33009,\"15.6\":1.32771,\"16.0\":1.49055,\"16.1\":3.35815,\"16.2\":3.45498,\"16.3\":1.76196,\"16.4\":0.00587},P:{\"4\":0.07242,\"20\":0.44489,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0.21727,\"8.2\":0,\"9.2\":0.01035,\"10.1\":0,\"11.1-11.2\":0.02069,\"12.0\":0,\"13.0\":0.03104,\"14.0\":0.02069,\"15.0\":0.01035,\"16.0\":0.06208,\"17.0\":0.07242,\"18.0\":0.07242,\"19.0\":0.86908},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0,\"4.4\":0,\"4.4.3-4.4.4\":0.18397},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.02279,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.0124},H:{\"0\":0.09393},L:{\"0\":69.63847},R:{_:\"0\"},M:{\"0\":0.30385},Q:{\"13.1\":0}};\n/data/features/css-any-link.js\u0006\u0006module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"1\":\"RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"16\":\"EC\",\"33\":\"0 1 2 3 4 5 6 7 8 9 uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB FC GC\"},D:{\"1\":\"eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"16\":\"I w J D E F A B C K L\",\"33\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB\"},E:{\"1\":\"F A B C K L G MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"16\":\"I w J IC 0B JC\",\"33\":\"D E KC LC\"},F:{\"1\":\"TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F B C QC RC SC TC rB BC UC sB\",\"33\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB\"},G:{\"1\":\"aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"16\":\"0B VC CC WC\",\"33\":\"E XC YC ZC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"16\":\"uB I qC rC sC tC CC\",\"33\":\"uC vC\"},J:{\"16\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"16\":\"I\",\"33\":\"xC yC zC 0C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"33\":\"BD\"}},B:5,C:\"CSS :any-link selector\"};\n%/data/features/input-file-multiple.js\u0005module.exports={A:{A:{\"1\":\"A B\",\"2\":\"J D E F DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB GC\",\"2\":\"EC uB FC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"I\"},E:{\"1\":\"I w J D E F A B C K L G JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"IC 0B\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e TC rB BC UC sB\",\"2\":\"F QC RC SC\"},G:{\"1\":\"E XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC CC WC\"},H:{\"130\":\"pC\"},I:{\"130\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"130\":\"A B C h rB BC sB\"},L:{\"132\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"130\":\"wC\"},P:{\"130\":\"I\",\"132\":\"g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"132\":\"2B\"},R:{\"132\":\"AD\"},S:{\"1\":\"CD\",\"2\":\"BD\"}},B:1,C:\"Multiple file selection\"};\n/data/features/path2d.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K\",\"132\":\"L G M N O\"},C:{\"1\":\"PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 EC uB I w J D E F A B C K L G M N O x g y z FC GC\",\"132\":\"8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB\"},D:{\"1\":\"hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB\",\"132\":\"DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB\"},E:{\"1\":\"A B C K L G MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D IC 0B JC KC\",\"132\":\"E F LC\"},F:{\"1\":\"WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F B C G M N O x g y z QC RC SC TC rB BC UC sB\",\"132\":\"0 1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB\"},G:{\"1\":\"aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC CC WC XC YC\",\"16\":\"E\",\"132\":\"ZC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"1\":\"A\",\"2\":\"D\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"132\":\"I xC yC zC 0C 1C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:1,C:\"Path2D\"};\n/data/features/console-basic.js\u0005module.exports={A:{A:{\"1\":\"A B\",\"2\":\"J D DC\",\"132\":\"E F\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e rB BC UC sB\",\"2\":\"F QC RC SC TC\"},G:{\"1\":\"0B VC CC WC\",\"513\":\"E XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"4097\":\"pC\"},I:{\"1025\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"258\":\"D A\"},K:{\"2\":\"A\",\"258\":\"B C rB BC sB\",\"1025\":\"h\"},L:{\"1025\":\"H\"},M:{\"2049\":\"f\"},N:{\"258\":\"A B\"},O:{\"258\":\"wC\"},P:{\"1025\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1025\":\"AD\"},S:{\"1\":\"BD CD\"}},B:1,C:\"Basic console logging functions\"};\n/data/features/outline.js\u0005module.exports={A:{A:{\"2\":\"J D DC\",\"260\":\"E\",\"388\":\"F A B\"},B:{\"1\":\"G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"388\":\"C K L\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e UC\",\"129\":\"sB\",\"260\":\"F B QC RC SC TC rB BC\"},G:{\"1\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"1\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"1\":\"D A\"},K:{\"1\":\"C h sB\",\"260\":\"A B rB BC\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"388\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:4,C:\"CSS outline properties\"};\n/data/features/asmjs.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"K L G M N O\",\"132\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"322\":\"C\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB I w J D E F A B C K L G M N O x g y FC GC\"},D:{\"2\":\"0 1 2 3 4 I w J D E F A B C K L G M N O x g y z\",\"132\":\"5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"2\":\"F B C QC RC SC TC rB BC UC sB\",\"132\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I qC rC sC tC CC uC vC\",\"132\":\"H\"},J:{\"2\":\"D A\"},K:{\"2\":\"A B C rB BC sB\",\"132\":\"h\"},L:{\"132\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"132\":\"wC\"},P:{\"2\":\"I\",\"132\":\"g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"132\":\"2B\"},R:{\"132\":\"AD\"},S:{\"1\":\"BD CD\"}},B:6,C:\"asm.js\"};\n/data/regions/NR.js\u000fGmodule.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.01135,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0,\"108\":0,\"109\":0.01135,\"110\":0.02724,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0.00681,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0.00454,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0.01816,\"108\":0.02497,\"109\":1.00107,\"110\":2.07478,\"111\":0,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0.01362,\"66\":0,\"67\":0.08399,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0.02043,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0.00454,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0.01135,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00454,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0.03405,\"104\":0,\"105\":0,\"106\":0,\"107\":0.01135,\"108\":0.01362,\"109\":0.23608,\"110\":0.30872},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0.05902,\"15\":0,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0,\"13.1\":0,\"14.1\":0.0908,\"15.1\":0.00681,\"15.2-15.3\":0,\"15.4\":0,\"15.5\":0,\"15.6\":0,\"16.0\":0,\"16.1\":0.00681,\"16.2\":0,\"16.3\":0,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0,\"10.0-10.2\":0,\"10.3\":0,\"11.0-11.2\":0,\"11.3-11.4\":0,\"12.0-12.1\":0,\"12.2-12.5\":0.3263,\"13.0-13.1\":0,\"13.2\":0,\"13.3\":0.1153,\"13.4-13.7\":0,\"14.0-14.4\":0.03828,\"14.5-14.8\":0.42201,\"15.0-15.1\":0.3263,\"15.2-15.3\":0.03828,\"15.4\":0.03828,\"15.5\":0.28802,\"15.6\":0.26843,\"16.0\":0.84446,\"16.1\":0.59473,\"16.2\":0.36458,\"16.3\":0.42201,\"16.4\":0},P:{\"4\":0,\"20\":0.20421,\"5.0-5.4\":0,\"6.2-6.4\":0.07147,\"7.2-7.4\":0,\"8.2\":0,\"9.2\":0.03063,\"10.1\":0,\"11.1-11.2\":0.02042,\"12.0\":0,\"13.0\":0,\"14.0\":0,\"15.0\":0,\"16.0\":0.14295,\"17.0\":0,\"18.0\":0.28589,\"19.0\":0.61263},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0,\"4.4\":0,\"4.4.3-4.4.4\":0},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":2.06391},H:{\"0\":0.95869},L:{\"0\":86.42702},R:{_:\"0\"},M:{\"0\":0},Q:{\"13.1\":0}};\n/data/browsers.jsmodule.exports={A:\"ie\",B:\"edge\",C:\"firefox\",D:\"chrome\",E:\"safari\",F:\"opera\",G:\"ios_saf\",H:\"op_mini\",I:\"android\",J:\"bb\",K:\"op_mob\",L:\"and_chr\",M:\"and_ff\",N:\"ie_mob\",O:\"and_uc\",P:\"samsung\",Q:\"and_qq\",R:\"baidu\",S:\"kaios\"};\n/data/regions/CV.js\u0011<module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.00837,\"53\":0,\"54\":0,\"55\":0,\"56\":0.00419,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0.00837,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.00837,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0.00419,\"86\":0,\"87\":0,\"88\":0,\"89\":0.00837,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0.00419,\"99\":0,\"100\":0,\"101\":0,\"102\":0.00837,\"103\":0,\"104\":0,\"105\":0,\"106\":0.00419,\"107\":0.04185,\"108\":0.00419,\"109\":0.38502,\"110\":0.15485,\"111\":0.00419,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0.10463,\"41\":0,\"42\":0.00419,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0.00419,\"48\":0,\"49\":0.02093,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0.00419,\"56\":0.00419,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0.00419,\"65\":0.37665,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0.00837,\"71\":0.02093,\"72\":0.00419,\"73\":0,\"74\":0,\"75\":0.00419,\"76\":0.01674,\"77\":0,\"78\":0.00837,\"79\":0.10463,\"80\":0,\"81\":0.20507,\"83\":0,\"84\":0.00837,\"85\":0,\"86\":0,\"87\":0.02511,\"88\":0.00419,\"89\":0,\"90\":0.01674,\"91\":0.14648,\"92\":0.00419,\"93\":0.02093,\"94\":0.00837,\"95\":0.00837,\"96\":0.00419,\"97\":0.02093,\"98\":0.00419,\"99\":0.01674,\"100\":0.00419,\"101\":0.00837,\"102\":0.00837,\"103\":0.12974,\"104\":0.01256,\"105\":0.03767,\"106\":0.01256,\"107\":0.07952,\"108\":0.33899,\"109\":6.09755,\"110\":4.44866,\"111\":0.00419,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.00837,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0.02093,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.00419,\"94\":0.17159,\"95\":0.24273,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0.00419,\"16\":0.00419,\"17\":0,\"18\":0.00419,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00837,\"93\":0,\"94\":0,\"95\":0,\"96\":0.01256,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0.00419,\"106\":0,\"107\":0.0293,\"108\":0.12555,\"109\":0.82445,\"110\":1.14251},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0.0837,\"15\":0.00419,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0.01256,\"13.1\":0.05022,\"14.1\":0.03767,\"15.1\":0,\"15.2-15.3\":0.00419,\"15.4\":0.00419,\"15.5\":0.00837,\"15.6\":0.15485,\"16.0\":0.01256,\"16.1\":0.02093,\"16.2\":0.21344,\"16.3\":0.10044,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0.01722,\"8.1-8.4\":0.00172,\"9.0-9.2\":0,\"9.3\":0.33411,\"10.0-10.2\":0,\"10.3\":0.16878,\"11.0-11.2\":0.02756,\"11.3-11.4\":0.28761,\"12.0-12.1\":0.01894,\"12.2-12.5\":1.39674,\"13.0-13.1\":0.00344,\"13.2\":0.24284,\"13.3\":0.03444,\"13.4-13.7\":0.05511,\"14.0-14.4\":1.78941,\"14.5-14.8\":0.434,\"15.0-15.1\":0.19117,\"15.2-15.3\":0.30828,\"15.4\":0.42539,\"15.5\":0.51667,\"15.6\":1.87207,\"16.0\":0.89901,\"16.1\":2.54719,\"16.2\":2.10285,\"16.3\":1.83419,\"16.4\":0.00344},P:{\"4\":0.2782,\"20\":0.46367,\"5.0-5.4\":0.02061,\"6.2-6.4\":0,\"7.2-7.4\":0.16486,\"8.2\":0,\"9.2\":0.02061,\"10.1\":0.0103,\"11.1-11.2\":0.03091,\"12.0\":0,\"13.0\":0.0103,\"14.0\":0.04122,\"15.0\":0.06182,\"16.0\":0.08243,\"17.0\":0.03091,\"18.0\":0.10304,\"19.0\":1.03038},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.00213,\"4.2-4.3\":0.00426,\"4.4\":0,\"4.4.3-4.4.4\":0.31612},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.01256,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0.00582,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.08141},H:{\"0\":0.19819},L:{\"0\":63.60003},R:{_:\"0\"},M:{\"0\":0.06978},Q:{\"13.1\":0.00582}};\n\"/data/features/domcontentloaded.js\u0005module.exports={A:{A:{\"1\":\"F A B\",\"2\":\"J D E DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\"},G:{\"1\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"1\":\"pC\"},I:{\"1\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"1\":\"D A\"},K:{\"1\":\"A B C h rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:1,C:\"DOMContentLoaded\"};\n/data/regions/KW.js\u0011nmodule.exports={C:{\"2\":0,\"3\":0,\"4\":0.00251,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0.00251,\"35\":0,\"36\":0.00251,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.06031,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.00251,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00251,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0.00754,\"103\":0,\"104\":0,\"105\":0,\"106\":0.00251,\"107\":0.00251,\"108\":0.00503,\"109\":0.14827,\"110\":0.07036,\"111\":0.00251,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0.00503,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0.00251,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0.00251,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0.00251,\"65\":0,\"66\":0,\"67\":0,\"68\":0.00503,\"69\":0.00251,\"70\":0.00251,\"71\":0,\"72\":0.00251,\"73\":0.00251,\"74\":0.00503,\"75\":0.00251,\"76\":0,\"77\":0,\"78\":0.00503,\"79\":0.00251,\"80\":0.00251,\"81\":0.02262,\"83\":0.00251,\"84\":0,\"85\":0.00251,\"86\":0.00251,\"87\":0.00251,\"88\":0.00503,\"89\":0.00251,\"90\":0.00503,\"91\":0.00251,\"92\":0.0201,\"93\":0.00251,\"94\":0,\"95\":0.01005,\"96\":0.00251,\"97\":0.00754,\"98\":0.00251,\"99\":0.00251,\"100\":0.00251,\"101\":0.00251,\"102\":0.00251,\"103\":0.03016,\"104\":0.00754,\"105\":0.01257,\"106\":0.01005,\"107\":0.0201,\"108\":0.14324,\"109\":2.24662,\"110\":1.26153,\"111\":0,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0.00503,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0.00503,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0.00503,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0.00503,\"62\":0,\"63\":0.00503,\"64\":0.00251,\"65\":0,\"66\":0.01005,\"67\":0.06785,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0.00251,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.01508,\"94\":0.15078,\"95\":0.04775,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0.00251,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0.00251,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0.00251,\"92\":0.00251,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0.00251,\"106\":0.00503,\"107\":0.02262,\"108\":0.03267,\"109\":0.25381,\"110\":0.3091},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0.03016,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.00251,\"14\":0.02764,\"15\":0.00754,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0.00251,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0.00754,\"13.1\":0.01759,\"14.1\":0.08293,\"15.1\":0.01759,\"15.2-15.3\":0.01005,\"15.4\":0.0779,\"15.5\":0.06031,\"15.6\":0.15078,\"16.0\":0.01508,\"16.1\":0.06283,\"16.2\":0.10806,\"16.3\":0.11811,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0.01238,\"8.1-8.4\":0.01651,\"9.0-9.2\":0,\"9.3\":0.07428,\"10.0-10.2\":0,\"10.3\":0.1073,\"11.0-11.2\":0.01651,\"11.3-11.4\":0.01651,\"12.0-12.1\":0.03714,\"12.2-12.5\":0.88313,\"13.0-13.1\":0.08666,\"13.2\":0.02889,\"13.3\":0.15269,\"13.4-13.7\":0.22697,\"14.0-14.4\":1.15137,\"14.5-14.8\":1.88593,\"15.0-15.1\":0.60663,\"15.2-15.3\":0.73044,\"15.4\":1.06058,\"15.5\":1.77863,\"15.6\":3.70171,\"16.0\":4.85307,\"16.1\":7.18057,\"16.2\":7.65102,\"16.3\":6.80091,\"16.4\":0.02476},P:{\"4\":0.15362,\"20\":1.20851,\"5.0-5.4\":0.01024,\"6.2-6.4\":0,\"7.2-7.4\":0.08193,\"8.2\":0,\"9.2\":0.01024,\"10.1\":0,\"11.1-11.2\":0.09217,\"12.0\":0.01024,\"13.0\":0.05121,\"14.0\":0.08193,\"15.0\":0.02048,\"16.0\":0.11266,\"17.0\":0.09217,\"18.0\":0.17411,\"19.0\":2.24292},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.01263,\"4.2-4.3\":0.00631,\"4.4\":0,\"4.4.3-4.4.4\":0.05367},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.01005,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":2.28354},H:{\"0\":0.99944},L:{\"0\":44.32111},R:{_:\"0\"},M:{\"0\":0.18718},Q:{\"13.1\":0}};\n /data/features/filereadersync.js\u0005module.exports={A:{A:{\"1\":\"A B\",\"2\":\"J D E F DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB I w J D FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"16\":\"I w J D E F A B C K L\"},E:{\"1\":\"J D E F A B C K L G KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w IC 0B JC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e UC sB\",\"2\":\"F QC RC\",\"16\":\"B SC TC rB BC\"},G:{\"1\":\"E XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC CC WC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H uC vC\",\"2\":\"uB I qC rC sC tC CC\"},J:{\"1\":\"A\",\"2\":\"D\"},K:{\"1\":\"C h BC sB\",\"2\":\"A\",\"16\":\"B rB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:5,C:\"FileReaderSync\"};\n/data/regions/AM.js\u0010module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":23.87252,\"53\":0,\"54\":0,\"55\":0,\"56\":0.0067,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.03351,\"79\":0.0067,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0.02011,\"103\":0,\"104\":0.0067,\"105\":0,\"106\":0.0067,\"107\":0,\"108\":0.0067,\"109\":0.38201,\"110\":0.20106,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0.0067,\"49\":0.07372,\"50\":0,\"51\":0.0067,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0.0067,\"72\":0,\"73\":0,\"74\":0.0067,\"75\":0.0067,\"76\":0,\"77\":0,\"78\":0.13404,\"79\":0.0134,\"80\":0.02011,\"81\":0.0067,\"83\":0,\"84\":0.0067,\"85\":0.03351,\"86\":0.02681,\"87\":0.0134,\"88\":0.0067,\"89\":0.0134,\"90\":0.0067,\"91\":0.0134,\"92\":0.0067,\"93\":0,\"94\":0,\"95\":0,\"96\":0.06032,\"97\":0.0134,\"98\":0.02011,\"99\":0.0067,\"100\":0.0134,\"101\":0.06032,\"102\":0.03351,\"103\":0.24797,\"104\":0.02011,\"105\":0.06702,\"106\":0.04691,\"107\":0.58307,\"108\":0.3284,\"109\":10.56905,\"110\":4.40992,\"111\":0.02011,\"112\":0.0134,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.02011,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0.0067,\"82\":0,\"83\":0,\"84\":0,\"85\":0.0134,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.0134,\"94\":0.21446,\"95\":0.25468,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0.0067,\"15\":0,\"16\":0.04021,\"17\":0,\"18\":0,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0.0067,\"108\":0.0067,\"109\":0.26138,\"110\":0.3418},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0.02011,\"15\":0.0067,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0.02681,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0,\"13.1\":0.04021,\"14.1\":0.03351,\"15.1\":0.0067,\"15.2-15.3\":0.0067,\"15.4\":0.0134,\"15.5\":0.04691,\"15.6\":0.10053,\"16.0\":0.0134,\"16.1\":0.08713,\"16.2\":0.15415,\"16.3\":0.22117,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0.00202,\"7.0-7.1\":0.00808,\"8.1-8.4\":0,\"9.0-9.2\":0.0101,\"9.3\":0.10302,\"10.0-10.2\":0,\"10.3\":0.0505,\"11.0-11.2\":0.00404,\"11.3-11.4\":0.00606,\"12.0-12.1\":0.0101,\"12.2-12.5\":0.47673,\"13.0-13.1\":0.01212,\"13.2\":0.00808,\"13.3\":0.02222,\"13.4-13.7\":0.18988,\"14.0-14.4\":0.38179,\"14.5-14.8\":0.59389,\"15.0-15.1\":0.17776,\"15.2-15.3\":0.23837,\"15.4\":0.27271,\"15.5\":0.43633,\"15.6\":1.14941,\"16.0\":2.75939,\"16.1\":3.57347,\"16.2\":4.51885,\"16.3\":3.16542,\"16.4\":0.0101},P:{\"4\":0.02071,\"20\":0.36242,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0.07248,\"8.2\":0,\"9.2\":0,\"10.1\":0,\"11.1-11.2\":0.03106,\"12.0\":0.01035,\"13.0\":0.01035,\"14.0\":0.02071,\"15.0\":0.01035,\"16.0\":0.01035,\"17.0\":0.03106,\"18.0\":0.06213,\"19.0\":0.76625},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.01865,\"4.2-4.3\":0.00415,\"4.4\":0,\"4.4.3-4.4.4\":0.03731},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0.01468,\"9\":0.00734,\"10\":0.00734,\"11\":0.12478,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0.0033,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.07585},H:{\"0\":0.14675},L:{\"0\":34.39087},R:{_:\"0\"},M:{\"0\":0.04617},Q:{\"13.1\":0}};\n\"/data/features/multibackgrounds.js\u0005module.exports={A:{A:{\"1\":\"F A B\",\"2\":\"J D E DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB GC\",\"2\":\"EC uB FC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e SC TC rB BC UC sB\",\"2\":\"F QC RC\"},G:{\"1\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"1\":\"pC\"},I:{\"1\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"1\":\"D A\"},K:{\"1\":\"A B C h rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:4,C:\"CSS3 Multiple backgrounds\"};\n/data/features/object-fit.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G\",\"260\":\"M N O\"},C:{\"1\":\"DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB FC GC\"},D:{\"1\":\"9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 I w J D E F A B C K L G M N O x g y z\"},E:{\"1\":\"A B C K L G 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D IC 0B JC KC\",\"132\":\"E F LC MC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F G M N O QC RC SC\",\"33\":\"B C TC rB BC UC sB\"},G:{\"1\":\"cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC CC WC XC YC\",\"132\":\"E ZC aC bC\"},H:{\"33\":\"pC\"},I:{\"1\":\"H vC\",\"2\":\"uB I qC rC sC tC CC uC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A\",\"33\":\"B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:4,C:\"CSS3 object-fit/object-position\"};\n!/data/features/input-minlength.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M\"},C:{\"1\":\"SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB FC GC\"},D:{\"1\":\"HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB\"},E:{\"1\":\"B C K L G 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A IC 0B JC KC LC MC\"},F:{\"1\":\"4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 F B C G M N O x g y z QC RC SC TC rB BC UC sB\"},G:{\"1\":\"dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"2\":\"BD\"}},B:1,C:\"Minimum length attribute for input fields\"};\n/data/features/css-canvas.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"2\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"2\":\"PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"33\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB\"},E:{\"2\":\"IC 0B\",\"33\":\"I w J D E F A B C K L G JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"2\":\"F B C CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\",\"33\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB\"},G:{\"33\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"2\":\"H\",\"33\":\"uB I qC rC sC tC CC uC vC\"},J:{\"33\":\"D A\"},K:{\"2\":\"A B C h rB BC sB\"},L:{\"2\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"2\":\"g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"33\":\"I\"},Q:{\"2\":\"2B\"},R:{\"2\":\"AD\"},S:{\"2\":\"BD CD\"}},B:7,C:\"CSS Canvas Drawings\"};\n\"/data/features/css-not-sel-list.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O Q R S T U V W\",\"16\":\"P\"},C:{\"1\":\"T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S FC GC\"},D:{\"1\":\"X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W\"},E:{\"1\":\"F A B C K L G MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E IC 0B JC KC LC\"},F:{\"1\":\"nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB QC RC SC TC rB BC UC sB\"},G:{\"1\":\"aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"1\":\"g 6C tB 7C 8C 9C\",\"2\":\"I xC yC zC 0C 1C 1B 2C 3C 4C 5C\"},Q:{\"2\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"2\":\"BD\"}},B:5,C:\"selector list argument of :not()\"};\n/data/regions/RO.js\fmodule.exports={C:{\"52\":0.09902,\"68\":0.009,\"72\":0.02701,\"78\":0.0135,\"83\":0.009,\"88\":0.0045,\"91\":0.009,\"95\":0.0045,\"99\":0.0045,\"100\":0.0045,\"102\":0.06752,\"103\":1.66537,\"104\":0.0135,\"105\":0.0135,\"106\":0.009,\"107\":0.018,\"108\":0.04051,\"109\":5.89181,\"110\":3.42076,\"111\":0.009,_:\"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 69 70 71 73 74 75 76 77 79 80 81 82 84 85 86 87 89 90 92 93 94 96 97 98 101 112 3.5 3.6\"},D:{\"39\":0.0045,\"49\":0.04951,\"51\":0.0045,\"53\":0.009,\"60\":0.32857,\"61\":0.009,\"66\":0.0045,\"71\":0.0135,\"74\":0.009,\"75\":0.009,\"76\":0.009,\"77\":0.009,\"79\":0.05401,\"80\":0.009,\"81\":0.018,\"83\":0.009,\"84\":0.0135,\"85\":0.03151,\"86\":0.02251,\"87\":0.02701,\"88\":0.0135,\"89\":0.0135,\"90\":0.0135,\"91\":0.02251,\"92\":0.02251,\"94\":0.009,\"95\":0.0045,\"96\":0.0135,\"97\":0.018,\"98\":0.0135,\"99\":0.018,\"100\":0.04051,\"101\":0.009,\"102\":0.02251,\"103\":0.06301,\"104\":0.02701,\"105\":0.08102,\"106\":0.03601,\"107\":0.09902,\"108\":0.41859,\"109\":14.99283,\"110\":9.51962,\"111\":0.009,\"112\":0.0135,_:\"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 40 41 42 43 44 45 46 47 48 50 52 54 55 56 57 58 59 62 63 64 65 67 68 69 70 72 73 78 93 113\"},F:{\"46\":0.009,\"85\":0.02251,\"93\":0.13503,\"94\":1.43132,\"95\":0.8867,_:\"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 86 87 88 89 90 91 92 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1\",\"10.0-10.1\":0},B:{\"18\":0.009,\"92\":0.009,\"107\":0.018,\"108\":0.05851,\"109\":1.00372,\"110\":1.31879,_:\"12 13 14 15 16 17 79 80 81 83 84 85 86 87 88 89 90 91 93 94 95 96 97 98 99 100 101 102 103 104 105 106\"},E:{\"4\":0,\"14\":0.03151,_:\"0 5 6 7 8 9 10 11 12 13 15 3.1 3.2 5.1 6.1 7.1 9.1 10.1 11.1 16.4\",\"12.1\":0.0045,\"13.1\":0.04051,\"14.1\":0.05401,\"15.1\":0.009,\"15.2-15.3\":0.009,\"15.4\":0.02251,\"15.5\":0.06752,\"15.6\":0.15303,\"16.0\":0.02701,\"16.1\":0.10802,\"16.2\":0.22955,\"16.3\":0.19354},G:{\"8\":0,\"3.2\":0.01705,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0.06425,\"6.0-6.1\":0,\"7.0-7.1\":0.00393,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0.01442,\"10.0-10.2\":0,\"10.3\":0.02754,\"11.0-11.2\":0.00524,\"11.3-11.4\":0.00262,\"12.0-12.1\":0.01049,\"12.2-12.5\":0.13637,\"13.0-13.1\":0.00393,\"13.2\":0.00393,\"13.3\":0.01442,\"13.4-13.7\":0.04589,\"14.0-14.4\":0.14948,\"14.5-14.8\":0.35534,\"15.0-15.1\":0.07474,\"15.2-15.3\":0.10883,\"15.4\":0.16653,\"15.5\":0.28322,\"15.6\":1.02407,\"16.0\":1.73869,\"16.1\":3.10761,\"16.2\":3.0132,\"16.3\":2.056,\"16.4\":0.01967},P:{\"4\":0.1535,\"20\":1.11542,\"5.0-5.4\":0.01042,\"6.2-6.4\":0.0206,\"7.2-7.4\":0.71259,\"8.2\":0.02044,\"9.2\":0.0307,\"10.1\":0.0217,\"11.1-11.2\":0.0307,\"12.0\":0.02036,\"13.0\":0.0307,\"14.0\":0.05117,\"15.0\":0.02047,\"16.0\":0.0614,\"17.0\":0.05117,\"18.0\":0.10233,\"19.0\":2.26153},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0.01814,\"4.4\":0,\"4.4.3-4.4.4\":0.10281},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"8\":0.01492,\"9\":0.00497,\"11\":0.07462,_:\"6 7 10 5.5\"},N:{\"10\":0.03712,\"11\":0.07423},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.04398},H:{\"0\":0.27067},L:{\"0\":38.94551},R:{_:\"0\"},M:{\"0\":0.20892},Q:{\"13.1\":0}};\n%/data/features/background-img-opts.js\u0005module.exports={A:{A:{\"1\":\"F A B\",\"2\":\"J D E DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB FC\",\"36\":\"GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"516\":\"I w J D E F A B C K L\"},E:{\"1\":\"D E F A B C K L G LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"772\":\"I w J IC 0B JC KC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e SC TC rB BC UC sB\",\"2\":\"F QC\",\"36\":\"RC\"},G:{\"1\":\"E YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"4\":\"0B VC CC XC\",\"516\":\"WC\"},H:{\"132\":\"pC\"},I:{\"1\":\"H uC vC\",\"36\":\"qC\",\"516\":\"uB I tC CC\",\"548\":\"rC sC\"},J:{\"1\":\"D A\"},K:{\"1\":\"A B C h rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:4,C:\"CSS3 Background-image options\"};\n/data/features/shadowdomv1.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"1\":\"cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB FC GC\",\"322\":\"ZB\",\"578\":\"vB aB wB bB\"},D:{\"1\":\"UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB\"},E:{\"1\":\"A B C K L G 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F IC 0B JC KC LC MC\"},F:{\"1\":\"HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB QC RC SC TC rB BC UC sB\"},G:{\"1\":\"eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC\",\"132\":\"cC dC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I\",\"4\":\"xC\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"2\":\"BD\"}},B:5,C:\"Shadow DOM (V1)\"};\n/data/features/autofocus.js\u0005module.exports={A:{A:{\"1\":\"A B\",\"2\":\"J D E F DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"I\"},E:{\"1\":\"w J D E F A B C K L G JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I IC 0B\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\",\"2\":\"F\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"1\":\"uB I H tC CC uC vC\",\"2\":\"qC rC sC\"},J:{\"1\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"2\":\"BD\"}},B:1,C:\"Autofocus attribute\"};\n!/data/features/async-clipboard.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB FC GC\",\"132\":\"cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\"},D:{\"1\":\"bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB\",\"66\":\"ZB vB aB wB\"},E:{\"1\":\"L G 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A B C K IC 0B JC KC LC MC 1B rB sB\"},F:{\"1\":\"QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QC RC SC TC rB BC UC sB\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC\",\"260\":\"mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I qC rC sC tC CC uC vC\",\"260\":\"H\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"132\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"2\":\"I xC yC zC 0C\",\"260\":\"g 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"2\":\"BD\",\"132\":\"CD\"}},B:5,C:\"Asynchronous Clipboard API\"};\n%/data/features/css-media-scripting.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"2\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"2\":\"A B C h rB BC sB\"},L:{\"2\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"2\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"2\":\"2B\"},R:{\"2\":\"AD\"},S:{\"2\":\"BD CD\"}},B:5,C:\"Media Queries: scripting media feature\"};\n/data/features/matchmedia.js\u0005module.exports={A:{A:{\"1\":\"A B\",\"2\":\"J D E F DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB I w FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"I w J D E\"},E:{\"1\":\"J D E F A B C K L G JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w IC 0B\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e sB\",\"2\":\"F B C QC RC SC TC rB BC UC\"},G:{\"1\":\"E WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC CC\"},H:{\"1\":\"pC\"},I:{\"1\":\"uB I H tC CC uC vC\",\"2\":\"qC rC sC\"},J:{\"1\":\"A\",\"2\":\"D\"},K:{\"1\":\"h sB\",\"2\":\"A B C rB BC\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:5,C:\"matchMedia\"};\n/data/regions/AZ.js\u0011vmodule.exports={C:{\"2\":0,\"3\":0,\"4\":0.00327,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0.00327,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0.02618,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.08837,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0.00327,\"103\":0,\"104\":0.00655,\"105\":0.01309,\"106\":0.01637,\"107\":0.00982,\"108\":0.01309,\"109\":0.18002,\"110\":0.05237,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0.00327,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0.00327,\"44\":0.00327,\"45\":0.00327,\"46\":0,\"47\":0,\"48\":0,\"49\":0.00655,\"50\":0.00327,\"51\":0,\"52\":0,\"53\":0.00655,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0.00327,\"71\":0.00982,\"72\":0,\"73\":0.00327,\"74\":0.00327,\"75\":0,\"76\":0,\"77\":0.01637,\"78\":0,\"79\":0.16038,\"80\":0.00327,\"81\":0.00327,\"83\":0.00982,\"84\":0.00327,\"85\":0.00655,\"86\":0.01309,\"87\":0.04582,\"88\":0.00982,\"89\":0.00327,\"90\":0.00327,\"91\":0.00655,\"92\":0.06546,\"93\":0,\"94\":0,\"95\":0.00327,\"96\":0.00327,\"97\":0.00655,\"98\":0.02291,\"99\":0.00655,\"100\":0.01964,\"101\":0.00982,\"102\":0.00982,\"103\":0.01637,\"104\":0.01309,\"105\":0.01964,\"106\":0.05237,\"107\":0.04582,\"108\":0.17674,\"109\":5.92086,\"110\":1.44012,\"111\":0,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0.00327,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0.00327,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.04582,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0.00327,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0.02618,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0.00655,\"85\":0.01637,\"86\":0.00327,\"87\":0,\"88\":0,\"89\":0.00655,\"90\":0,\"91\":0,\"92\":0,\"93\":0.036,\"94\":0.4844,\"95\":0.23238,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0.00327,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0.00327,\"103\":0,\"104\":0,\"105\":0,\"106\":0.00327,\"107\":0.01309,\"108\":0.00655,\"109\":0.18983,\"110\":0.12765},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0.00982,\"15\":0.00982,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0.02618,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0,\"13.1\":0.00982,\"14.1\":0.02291,\"15.1\":0.00327,\"15.2-15.3\":0.00655,\"15.4\":0.00982,\"15.5\":0.01309,\"15.6\":0.06546,\"16.0\":0.00982,\"16.1\":0.03273,\"16.2\":0.05237,\"16.3\":0.03928,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0.01076,\"6.0-6.1\":0.00134,\"7.0-7.1\":0.01748,\"8.1-8.4\":0.00807,\"9.0-9.2\":0.00269,\"9.3\":0.02421,\"10.0-10.2\":0,\"10.3\":0.08338,\"11.0-11.2\":0.0121,\"11.3-11.4\":0.00269,\"12.0-12.1\":0.00672,\"12.2-12.5\":0.41557,\"13.0-13.1\":0.03766,\"13.2\":0.00269,\"13.3\":0.01614,\"13.4-13.7\":0.04842,\"14.0-14.4\":0.14121,\"14.5-14.8\":0.34564,\"15.0-15.1\":0.08876,\"15.2-15.3\":0.10087,\"15.4\":0.17618,\"15.5\":0.3416,\"15.6\":0.8688,\"16.0\":1.96355,\"16.1\":2.84177,\"16.2\":3.11748,\"16.3\":1.73895,\"16.4\":0.01883},P:{\"4\":0.28451,\"20\":0.98563,\"5.0-5.4\":0,\"6.2-6.4\":0.02032,\"7.2-7.4\":0.08129,\"8.2\":0,\"9.2\":0.01016,\"10.1\":0,\"11.1-11.2\":0.03048,\"12.0\":0.01016,\"13.0\":0.06097,\"14.0\":0.07113,\"15.0\":0.07113,\"16.0\":0.1321,\"17.0\":0.10161,\"18.0\":0.20322,\"19.0\":2.774},I:{\"0\":0,\"3\":0,\"4\":0.00443,\"2.1\":0,\"2.2\":0,\"2.3\":0.01107,\"4.1\":0.00443,\"4.2-4.3\":0.01329,\"4.4\":0,\"4.4.3-4.4.4\":0.05315},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0.01309,\"9\":0.00327,\"10\":0.00327,\"11\":0.01637,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0.00673,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.15472},H:{\"0\":0.56681},L:{\"0\":68.68436},R:{_:\"0\"},M:{\"0\":0.30944},Q:{\"13.1\":0}};\n/data/regions/alt-as.js\u000emodule.exports={C:{\"34\":0.00288,\"36\":0.01151,\"43\":0.0374,\"47\":0.00288,\"52\":0.05179,\"56\":0.00863,\"72\":0.00288,\"78\":0.01151,\"79\":0.00288,\"87\":0.02014,\"88\":0.00575,\"99\":0.00288,\"102\":0.01726,\"103\":0.00288,\"104\":0.00575,\"105\":0.00575,\"106\":0.00863,\"107\":0.01151,\"108\":0.02877,\"109\":0.64733,\"110\":0.44594,\"111\":0.01151,_:\"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 35 37 38 39 40 41 42 44 45 46 48 49 50 51 53 54 55 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 73 74 75 76 77 80 81 82 83 84 85 86 89 90 91 92 93 94 95 96 97 98 100 101 112 3.5 3.6\"},D:{\"11\":0.00288,\"34\":0.00863,\"35\":0.00288,\"38\":0.02014,\"41\":0.00575,\"45\":0.00288,\"47\":0.00863,\"48\":0.00863,\"49\":0.02877,\"50\":0.00288,\"51\":0.00288,\"53\":0.01439,\"54\":0.00288,\"55\":0.00863,\"56\":0.00863,\"57\":0.00863,\"58\":0.00575,\"59\":0.00288,\"60\":0.00863,\"61\":0.00575,\"62\":0.00288,\"63\":0.00863,\"65\":0.00575,\"66\":0.00575,\"67\":0.00575,\"68\":0.00863,\"69\":0.09206,\"70\":0.02877,\"71\":0.01151,\"72\":0.02877,\"73\":0.00863,\"74\":0.06329,\"75\":0.01151,\"76\":0.00575,\"77\":0.01151,\"78\":0.02589,\"79\":0.11796,\"80\":0.02877,\"81\":0.02589,\"83\":0.04316,\"84\":0.02589,\"85\":0.04028,\"86\":0.05466,\"87\":0.05179,\"88\":0.01151,\"89\":0.03165,\"90\":0.03452,\"91\":0.06617,\"92\":0.04891,\"93\":0.01726,\"94\":0.03165,\"95\":0.01726,\"96\":0.03165,\"97\":0.04028,\"98\":0.15824,\"99\":0.04891,\"100\":0.04028,\"101\":0.03452,\"102\":0.04028,\"103\":0.11508,\"104\":0.05754,\"105\":0.06905,\"106\":0.06617,\"107\":0.13234,\"108\":0.43155,\"109\":10.51256,\"110\":5.80579,\"111\":0.01151,\"112\":0.00575,_:\"4 5 6 7 8 9 10 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 36 37 39 40 42 43 44 46 52 64 113\"},F:{\"28\":0.00863,\"36\":0.01151,\"40\":0.00288,\"46\":0.02014,\"79\":0.00288,\"85\":0.00288,\"93\":0.02014,\"94\":0.21865,\"95\":0.16399,_:\"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 33 34 35 37 38 39 41 42 43 44 45 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 80 81 82 83 84 86 87 88 89 90 91 92 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1\",\"10.0-10.1\":0},B:{\"12\":0.00288,\"17\":0.00288,\"18\":0.01439,\"84\":0.00288,\"89\":0.00863,\"92\":0.00863,\"103\":0.00288,\"104\":0.00288,\"105\":0.00575,\"106\":0.00863,\"107\":0.02302,\"108\":0.08056,\"109\":0.96092,\"110\":1.263,_:\"13 14 15 16 79 80 81 83 85 86 87 88 90 91 93 94 95 96 97 98 99 100 101 102\"},E:{\"4\":0,\"13\":0.01151,\"14\":0.04603,\"15\":0.00863,_:\"0 5 6 7 8 9 10 11 12 3.1 3.2 6.1 7.1 10.1 11.1 16.4\",\"5.1\":0.00863,\"9.1\":0.00863,\"12.1\":0.00863,\"13.1\":0.04028,\"14.1\":0.10357,\"15.1\":0.01726,\"15.2-15.3\":0.01439,\"15.4\":0.04316,\"15.5\":0.08056,\"15.6\":0.33086,\"16.0\":0.02589,\"16.1\":0.11796,\"16.2\":0.29633,\"16.3\":0.18413},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0.00335,\"5.0-5.1\":0.00446,\"6.0-6.1\":0.00446,\"7.0-7.1\":0.01673,\"8.1-8.4\":0.00781,\"9.0-9.2\":0.01673,\"9.3\":0.04573,\"10.0-10.2\":0.00781,\"10.3\":0.13163,\"11.0-11.2\":0.02789,\"11.3-11.4\":0.01785,\"12.0-12.1\":0.02454,\"12.2-12.5\":0.42611,\"13.0-13.1\":0.01673,\"13.2\":0.01004,\"13.3\":0.04239,\"13.4-13.7\":0.12716,\"14.0-14.4\":0.33353,\"14.5-14.8\":0.56332,\"15.0-15.1\":0.17513,\"15.2-15.3\":0.20079,\"15.4\":0.26772,\"15.5\":0.39488,\"15.6\":0.97605,\"16.0\":0.95931,\"16.1\":1.97775,\"16.2\":2.03575,\"16.3\":1.35754,\"16.4\":0.00558},P:{\"4\":0.2095,\"20\":0.65993,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0.07333,\"8.2\":0,\"9.2\":0.01048,\"10.1\":0,\"11.1-11.2\":0.03143,\"12.0\":0.01048,\"13.0\":0.05238,\"14.0\":0.0419,\"15.0\":0.03143,\"16.0\":0.0838,\"17.0\":0.09428,\"18.0\":0.11523,\"19.0\":1.257},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0.22355,\"4.4\":0,\"4.4.3-4.4.4\":0.74518},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"8\":0.03951,\"9\":0.08891,\"10\":0.00988,\"11\":0.97798,_:\"6 7 5.5\"},N:{\"10\":0,\"11\":0},S:{\"2.5\":0.17095,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":1.85198},H:{\"0\":1.06549},L:{\"0\":55.73825},R:{_:\"0\"},M:{\"0\":0.15671},Q:{\"13.1\":0.25643}};\n/data/features/css3-tabsize.js\u0006\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"1\":\"a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB FC GC\",\"33\":\"UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z\",\"164\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB\"},D:{\"1\":\"JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"I w J D E F A B C K L G M N O x g\",\"132\":\"0 1 2 3 4 5 6 7 8 9 y z AB BB CB DB EB FB GB HB IB\"},E:{\"1\":\"L G 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J IC 0B JC\",\"132\":\"D E F A B C K KC LC MC 1B rB sB\"},F:{\"1\":\"6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F QC RC SC\",\"132\":\"0 1 2 3 4 5 G M N O x g y z\",\"164\":\"B C TC rB BC UC sB\"},G:{\"1\":\"lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC CC WC XC\",\"132\":\"E YC ZC aC bC cC dC eC fC gC hC iC jC kC\"},H:{\"164\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC\",\"132\":\"uC vC\"},J:{\"132\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A\",\"164\":\"B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"164\":\"BD CD\"}},B:4,C:\"CSS3 tab-size\"};\n/data/features/indexeddb2.js\u0006\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"1\":\"SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB FC GC\",\"132\":\"LB MB NB\",\"260\":\"OB PB QB RB\"},D:{\"1\":\"ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB\",\"132\":\"PB QB RB SB\",\"260\":\"TB UB VB WB XB YB\"},E:{\"1\":\"B C K L G 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A IC 0B JC KC LC MC\"},F:{\"1\":\"MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB QC RC SC TC rB BC UC sB\",\"132\":\"CB DB EB FB\",\"260\":\"GB HB IB JB KB LB\"},G:{\"1\":\"dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC\",\"16\":\"cC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I\",\"260\":\"xC yC\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"260\":\"BD\"}},B:2,C:\"IndexedDB 2.0\"};\n/data/features/script-defer.js\u0005module.exports={A:{A:{\"1\":\"A B\",\"132\":\"J D E F DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB\",\"257\":\"0 1 2 3 4 5 6 7 I w J D E F A B C K L G M N O x g y z FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"I w J D\"},E:{\"1\":\"w J D E F A B C K L G JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I IC 0B\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F B C QC RC SC TC rB BC UC sB\"},G:{\"1\":\"E WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC CC\"},H:{\"2\":\"pC\"},I:{\"1\":\"uB I H tC CC uC vC\",\"2\":\"qC rC sC\"},J:{\"1\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:1,C:\"defer attribute for external scripts\"};\n/data/features/font-feature.js\u0006\nmodule.exports={A:{A:{\"1\":\"A B\",\"2\":\"J D E F DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB FC GC\",\"33\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB\",\"164\":\"I w J D E F A B C K L\"},D:{\"1\":\"PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"I w J D E F A B C K L G\",\"33\":\"0 1 2 3 4 5 6 7 8 9 y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB\",\"292\":\"M N O x g\"},E:{\"1\":\"A B C K L G MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"D E F IC 0B KC LC\",\"4\":\"I w J JC\"},F:{\"1\":\"CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F B C QC RC SC TC rB BC UC sB\",\"33\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB\"},G:{\"1\":\"bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E YC ZC aC\",\"4\":\"0B VC CC WC XC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC\",\"33\":\"uC vC\"},J:{\"2\":\"D\",\"33\":\"A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"33\":\"I\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:2,C:\"CSS font-feature-settings\"};\n/data/regions/MG.js\u00137module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0.00492,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0.00492,\"43\":0.00492,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0.00984,\"49\":0,\"50\":0,\"51\":0,\"52\":0.09842,\"53\":0,\"54\":0,\"55\":0,\"56\":0.00492,\"57\":0.00492,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.00492,\"68\":0.00492,\"69\":0,\"70\":0.00492,\"71\":0,\"72\":0.01476,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.02461,\"79\":0,\"80\":0.00984,\"81\":0.00492,\"82\":0.00984,\"83\":0,\"84\":0,\"85\":0.00492,\"86\":0.00492,\"87\":0,\"88\":0.00984,\"89\":0.02461,\"90\":0,\"91\":0.00984,\"92\":0.00984,\"93\":0.00492,\"94\":0.00984,\"95\":0.02461,\"96\":0.01476,\"97\":0.00984,\"98\":0,\"99\":0.01476,\"100\":0.00984,\"101\":0.00492,\"102\":0.08858,\"103\":0.01476,\"104\":0.01968,\"105\":0.02461,\"106\":0.02953,\"107\":0.02953,\"108\":0.11318,\"109\":1.83553,\"110\":1.03341,\"111\":0.03445,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.02953,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0.00492,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0.00984,\"40\":0,\"41\":0,\"42\":0.00492,\"43\":0.00492,\"44\":0,\"45\":0,\"46\":0.00492,\"47\":0,\"48\":0,\"49\":0.01476,\"50\":0.00492,\"51\":0,\"52\":0,\"53\":0.00492,\"54\":0,\"55\":0.01476,\"56\":0.00492,\"57\":0.02461,\"58\":0.00492,\"59\":0,\"60\":0.00492,\"61\":0,\"62\":0,\"63\":0,\"64\":0.00492,\"65\":0.00984,\"66\":0.00492,\"67\":0.00984,\"68\":0,\"69\":0.01476,\"70\":0.00984,\"71\":0.00984,\"72\":0.00492,\"73\":0.00492,\"74\":0.02461,\"75\":0.00492,\"76\":0.00492,\"77\":0.00492,\"78\":0.00492,\"79\":0.05413,\"80\":0.01476,\"81\":0.03445,\"83\":0.01476,\"84\":0.00984,\"85\":0.01968,\"86\":0.02953,\"87\":0.01968,\"88\":0.02461,\"89\":0.00492,\"90\":0.03937,\"91\":0.01476,\"92\":0.00984,\"93\":0.00984,\"94\":0.00984,\"95\":0.05413,\"96\":0.03937,\"97\":0.07874,\"98\":0.01968,\"99\":0.01476,\"100\":0.02461,\"101\":0.05905,\"102\":0.03445,\"103\":0.08366,\"104\":0.05905,\"105\":0.13287,\"106\":0.07382,\"107\":0.22145,\"108\":0.36415,\"109\":7.93265,\"110\":3.85806,\"111\":0.00492,\"112\":0.02953,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0.00492,\"25\":0,\"26\":0.00492,\"27\":0.00492,\"28\":0.00492,\"29\":0,\"30\":0,\"31\":0,\"32\":0.01476,\"33\":0.00492,\"34\":0,\"35\":0,\"36\":0,\"37\":0.02461,\"38\":0.00492,\"39\":0,\"40\":0,\"41\":0.01968,\"42\":0.01476,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0.01476,\"51\":0,\"52\":0,\"53\":0.07874,\"54\":0,\"55\":0,\"56\":0,\"57\":0.05905,\"58\":0.03937,\"60\":0.04429,\"62\":0.00492,\"63\":0.03445,\"64\":0.03445,\"65\":0.00984,\"66\":0.01476,\"67\":0.14271,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0.00492,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0.01476,\"80\":0.00984,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0.00984,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.01968,\"94\":0.24605,\"95\":0.44781,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0.01476},B:{\"12\":0.00492,\"13\":0.00492,\"14\":0.00492,\"15\":0.01968,\"16\":0,\"17\":0.01476,\"18\":0.01476,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0.00492,\"86\":0,\"87\":0,\"88\":0,\"89\":0.00492,\"90\":0.00984,\"91\":0,\"92\":0.04921,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0.00492,\"101\":0,\"102\":0,\"103\":0.06889,\"104\":0.00492,\"105\":0.00492,\"106\":0.00984,\"107\":0.04429,\"108\":0.02953,\"109\":1.12199,\"110\":0.83165},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.00492,\"14\":0.00492,\"15\":0.00492,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0.03445,\"13.1\":0.02953,\"14.1\":0.04921,\"15.1\":0.00492,\"15.2-15.3\":0,\"15.4\":0.00984,\"15.5\":0.03445,\"15.6\":0.03445,\"16.0\":0.00492,\"16.1\":0.01476,\"16.2\":0.03937,\"16.3\":0.04921,\"16.4\":0},G:{\"8\":0.00614,\"3.2\":0.00061,\"4.0-4.1\":0,\"4.2-4.3\":0.0043,\"5.0-5.1\":0.00184,\"6.0-6.1\":0,\"7.0-7.1\":0.02455,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0.22712,\"10.0-10.2\":0,\"10.3\":0.17862,\"11.0-11.2\":0.01719,\"11.3-11.4\":0.00307,\"12.0-12.1\":0.01166,\"12.2-12.5\":0.58559,\"13.0-13.1\":0.02517,\"13.2\":0.02148,\"13.3\":0.11294,\"13.4-13.7\":0.03069,\"14.0-14.4\":0.14425,\"14.5-14.8\":0.27929,\"15.0-15.1\":0.11356,\"15.2-15.3\":0.11847,\"15.4\":0.16757,\"15.5\":0.20747,\"15.6\":0.34865,\"16.0\":0.41433,\"16.1\":0.95634,\"16.2\":0.87777,\"16.3\":0.65004,\"16.4\":0.00246},P:{\"4\":0.04135,\"20\":0.09304,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0.03101,\"8.2\":0,\"9.2\":0.02067,\"10.1\":0,\"11.1-11.2\":0.02067,\"12.0\":0.01034,\"13.0\":0.03101,\"14.0\":0.02067,\"15.0\":0.02067,\"16.0\":0.02067,\"17.0\":0.12405,\"18.0\":0.03101,\"19.0\":0.41349},I:{\"0\":0,\"3\":0,\"4\":0.00106,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.01802,\"4.2-4.3\":0.0371,\"4.4\":0,\"4.4.3-4.4.4\":0.1781},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0.00492,\"10\":0,\"11\":0.01476,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0.29458,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0.01016},O:{\"0\":1.17833},H:{\"0\":4.47188},L:{\"0\":62.18327},R:{_:\"0\"},M:{\"0\":0.26411},Q:{\"13.1\":0.0254}};\n/data/regions/MP.js\u0010,module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.01338,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0.60192,\"104\":0,\"105\":0,\"106\":0,\"107\":0,\"108\":0,\"109\":0.72899,\"110\":0.25414,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0.00669,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0.02006,\"62\":0,\"63\":0,\"64\":0,\"65\":0.02006,\"66\":0,\"67\":0,\"68\":0,\"69\":0.04013,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0.04013,\"77\":0,\"78\":0,\"79\":0.04013,\"80\":0,\"81\":0,\"83\":0.01338,\"84\":0,\"85\":0,\"86\":0,\"87\":0.06688,\"88\":0.00669,\"89\":0,\"90\":0.00669,\"91\":0.06688,\"92\":0.00669,\"93\":0.02006,\"94\":0,\"95\":0,\"96\":0,\"97\":0.02006,\"98\":0,\"99\":0.00669,\"100\":0,\"101\":0,\"102\":0,\"103\":0.18726,\"104\":0.02006,\"105\":0.04013,\"106\":0.00669,\"107\":0.02006,\"108\":1.10352,\"109\":11.18234,\"110\":6.93546,\"111\":0.00669,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.0535,\"94\":0.62867,\"95\":0.38122,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.02675,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0.00669,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0.00669,\"106\":0,\"107\":0.02006,\"108\":0.0535,\"109\":3.02966,\"110\":5.45741},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.2207,\"14\":0.29427,\"15\":0.01338,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0.00669,\"13.1\":0.04013,\"14.1\":9.28294,\"15.1\":0.00669,\"15.2-15.3\":0.02006,\"15.4\":0.10701,\"15.5\":0.12707,\"15.6\":0.34778,\"16.0\":0.0535,\"16.1\":0.06688,\"16.2\":1.27741,\"16.3\":0.21402,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0.00308,\"10.0-10.2\":0.00615,\"10.3\":0.24462,\"11.0-11.2\":0.08154,\"11.3-11.4\":0.01385,\"12.0-12.1\":0.02923,\"12.2-12.5\":0.55539,\"13.0-13.1\":0.02462,\"13.2\":0,\"13.3\":0.05231,\"13.4-13.7\":0.02,\"14.0-14.4\":0.86309,\"14.5-14.8\":0.35385,\"15.0-15.1\":0.44308,\"15.2-15.3\":0.10923,\"15.4\":0.23693,\"15.5\":0.25539,\"15.6\":1.2231,\"16.0\":1.72618,\"16.1\":3.55699,\"16.2\":3.57852,\"16.3\":1.40464,\"16.4\":0.00615},P:{\"4\":0,\"20\":2.86455,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0,\"8.2\":0,\"9.2\":0,\"10.1\":0,\"11.1-11.2\":0,\"12.0\":0,\"13.0\":0.0924,\"14.0\":0,\"15.0\":0,\"16.0\":0,\"17.0\":0.01027,\"18.0\":0.0308,\"19.0\":3.05963},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0,\"4.4\":0,\"4.4.3-4.4.4\":0.35032},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.00669,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.00662},H:{\"0\":0.08466},L:{\"0\":30.07371},R:{_:\"0\"},M:{\"0\":0.96048},Q:{\"13.1\":0}};\n/data/regions/PG.js\u0011module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0.00676,\"56\":0,\"57\":0.00338,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0.00338,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0.00338,\"78\":0.00338,\"79\":0,\"80\":0,\"81\":0,\"82\":0.00338,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00338,\"93\":0,\"94\":0.00338,\"95\":0,\"96\":0,\"97\":0,\"98\":0.00338,\"99\":0.00338,\"100\":0.00338,\"101\":0.00676,\"102\":0.00338,\"103\":0.00338,\"104\":0.00338,\"105\":0.00676,\"106\":0.00338,\"107\":0.02365,\"108\":0.03717,\"109\":0.2095,\"110\":0.11827,\"111\":0.00338,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.00338,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0.01014,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0.00676,\"56\":0.00338,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0.01014,\"66\":0.00338,\"67\":0.00338,\"68\":0.00338,\"69\":0.02027,\"70\":0.03717,\"71\":0,\"72\":0,\"73\":0,\"74\":0.00338,\"75\":0,\"76\":0,\"77\":0,\"78\":0.00676,\"79\":0.00338,\"80\":0.00338,\"81\":0.01352,\"83\":0.00338,\"84\":0,\"85\":0,\"86\":0,\"87\":0.02027,\"88\":0.09123,\"89\":0.00676,\"90\":0.01014,\"91\":0.00676,\"92\":0.01014,\"93\":0,\"94\":0.00676,\"95\":0.01014,\"96\":0.00676,\"97\":0.00676,\"98\":0.00338,\"99\":0.00676,\"100\":0.01014,\"101\":0.00338,\"102\":0.01014,\"103\":0.20612,\"104\":0.0169,\"105\":0.0169,\"106\":0.04055,\"107\":0.04055,\"108\":0.12502,\"109\":2.26731,\"110\":1.50703,\"111\":0,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0.00338,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0.00338,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0.00338,\"62\":0,\"63\":0.00338,\"64\":0.00676,\"65\":0.00338,\"66\":0.00338,\"67\":0.04731,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0.00676,\"73\":0.03717,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0.00338,\"90\":0,\"91\":0,\"92\":0.00338,\"93\":0.02027,\"94\":0.05406,\"95\":0.07096,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0.00676,\"13\":0.00676,\"14\":0.00338,\"15\":0.00338,\"16\":0.00676,\"17\":0.01014,\"18\":0.03041,\"79\":0,\"80\":0.00338,\"81\":0,\"83\":0,\"84\":0.02027,\"85\":0.00338,\"86\":0,\"87\":0,\"88\":0,\"89\":0.01352,\"90\":0.03379,\"91\":0,\"92\":0.03041,\"93\":0,\"94\":0,\"95\":0.00676,\"96\":0,\"97\":0,\"98\":0.01014,\"99\":0.00338,\"100\":0.00676,\"101\":0.00338,\"102\":0,\"103\":0.00676,\"104\":0.00676,\"105\":0.01014,\"106\":0.00676,\"107\":0.04055,\"108\":0.0811,\"109\":0.59808,\"110\":0.65553},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0.00338,\"11\":0,\"12\":0,\"13\":0,\"14\":0.00338,\"15\":0.00338,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0.00338,\"13.1\":0.0169,\"14.1\":0.0169,\"15.1\":0,\"15.2-15.3\":0.00676,\"15.4\":0,\"15.5\":0.00338,\"15.6\":0.05406,\"16.0\":0.00676,\"16.1\":0.01014,\"16.2\":0.02027,\"16.3\":0.02027,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0.00142,\"7.0-7.1\":0,\"8.1-8.4\":0,\"9.0-9.2\":0.01494,\"9.3\":0.01032,\"10.0-10.2\":0.00071,\"10.3\":0.01316,\"11.0-11.2\":0.0064,\"11.3-11.4\":0.01565,\"12.0-12.1\":0.00854,\"12.2-12.5\":0.13802,\"13.0-13.1\":0.00462,\"13.2\":0.00036,\"13.3\":0.01316,\"13.4-13.7\":0.16221,\"14.0-14.4\":0.09213,\"14.5-14.8\":0.07506,\"15.0-15.1\":0.19885,\"15.2-15.3\":0.09356,\"15.4\":0.0996,\"15.5\":0.3045,\"15.6\":0.40233,\"16.0\":0.16577,\"16.1\":0.40233,\"16.2\":0.3849,\"16.3\":0.70221,\"16.4\":0},P:{\"4\":0.11192,\"20\":0.31541,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0.46803,\"8.2\":0,\"9.2\":0.24419,\"10.1\":0.02035,\"11.1-11.2\":0.09157,\"12.0\":0.03052,\"13.0\":0.21367,\"14.0\":0.15262,\"15.0\":0.07122,\"16.0\":0.54943,\"17.0\":0.10175,\"18.0\":0.22384,\"19.0\":1.42444},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0.01015,\"4.4\":0,\"4.4.3-4.4.4\":0.18013},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0.00737,\"11\":0.03318,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0.05959,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":1.8605},H:{\"0\":1.37903},L:{\"0\":78.89899},R:{_:\"0\"},M:{\"0\":0.19201},Q:{\"13.1\":0.00662}};\n/data/features/audio-api.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 EC uB I w J D E F A B C K L G M N O x g y z FC GC\"},D:{\"1\":\"BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"I w J D E F A B C K\",\"33\":\"0 1 2 3 4 5 6 7 8 9 L G M N O x g y z AB\"},E:{\"1\":\"G NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w IC 0B JC\",\"33\":\"J D E F A B C K L KC LC MC 1B rB sB 2B\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F B C QC RC SC TC rB BC UC sB\",\"33\":\"G M N O x g y\"},G:{\"1\":\"nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC CC WC\",\"33\":\"E XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:2,C:\"Web Audio API\"};\n/data/features/touch.js\u0005module.exports={A:{A:{\"2\":\"J D E F DC\",\"8\":\"A B\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"578\":\"C K L G M N O\"},C:{\"1\":\"0 1 O x g y z TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB FC GC\",\"4\":\"I w J D E F A B C K L G M N\",\"194\":\"2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"I w J D E F A B C K L G M N O x g y\"},E:{\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F B C QC RC SC TC rB BC UC sB\"},G:{\"1\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"1\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"1\":\"D A\"},K:{\"1\":\"B C h rB BC sB\",\"2\":\"A\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"8\":\"A\",\"260\":\"B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"2\":\"BD\"}},B:2,C:\"Touch events\"};\n$/data/features/css-widows-orphans.js\u0005module.exports={A:{A:{\"1\":\"A B\",\"2\":\"J D DC\",\"129\":\"E F\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"1\":\"2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 I w J D E F A B C K L G M N O x g y z\"},E:{\"1\":\"D E F A B C K L G LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J IC 0B JC KC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e sB\",\"129\":\"F B QC RC SC TC rB BC UC\"},G:{\"1\":\"E YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC CC WC XC\"},H:{\"1\":\"pC\"},I:{\"1\":\"H uC vC\",\"2\":\"uB I qC rC sC tC CC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h sB\",\"2\":\"A B C rB BC\"},L:{\"1\":\"H\"},M:{\"2\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"2\":\"BD CD\"}},B:2,C:\"CSS widows & orphans\"};\n/data/features/mp3.js\u0005module.exports={A:{A:{\"1\":\"F A B\",\"2\":\"J D E DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB\",\"132\":\"I w J D E F A B C K L G M N O x g y FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"I w J D E F A B C K L G JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"IC 0B\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F B C QC RC SC TC rB BC UC sB\"},G:{\"1\":\"E VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B\"},H:{\"2\":\"pC\"},I:{\"1\":\"uB I H sC tC CC uC vC\",\"2\":\"qC rC\"},J:{\"1\":\"D A\"},K:{\"1\":\"B C h rB BC sB\",\"2\":\"A\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:6,C:\"MP3 audio format\"};\n/data/regions/TG.js\u0011module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0.00399,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.03988,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0.00798,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0.00399,\"72\":0.00798,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.00399,\"79\":0,\"80\":0.00399,\"81\":0.01196,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0.00399,\"89\":0,\"90\":0,\"91\":0,\"92\":0.07178,\"93\":0,\"94\":0,\"95\":0.00798,\"96\":0,\"97\":0.00399,\"98\":0.00399,\"99\":0.00399,\"100\":0,\"101\":0.00399,\"102\":0.03988,\"103\":0.00399,\"104\":0.00399,\"105\":0.00399,\"106\":0.00798,\"107\":0.05583,\"108\":0.04387,\"109\":1.15253,\"110\":1.10866,\"111\":0.00798,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0.00399,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0.00399,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0.00798,\"44\":0,\"45\":0,\"46\":0,\"47\":0.00399,\"48\":0.00399,\"49\":0.03988,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0.00798,\"56\":0,\"57\":0,\"58\":0.00399,\"59\":0,\"60\":0.01196,\"61\":0,\"62\":0,\"63\":0.00798,\"64\":0.00399,\"65\":0.00399,\"66\":0,\"67\":0,\"68\":0,\"69\":0.00399,\"70\":0.01196,\"71\":0,\"72\":0,\"73\":0,\"74\":0.00798,\"75\":0.08774,\"76\":0.01196,\"77\":0,\"78\":0.00399,\"79\":0.05184,\"80\":0.01595,\"81\":0.01595,\"83\":0.00399,\"84\":0.00399,\"85\":0.01196,\"86\":0,\"87\":0.01595,\"88\":0,\"89\":0.00399,\"90\":0,\"91\":0.00399,\"92\":0.00399,\"93\":0.01196,\"94\":0.01196,\"95\":0.05583,\"96\":0.02393,\"97\":0.00399,\"98\":0.00399,\"99\":0.00399,\"100\":0.00399,\"101\":0.00399,\"102\":0.11565,\"103\":0.0319,\"104\":0.0997,\"105\":0.01595,\"106\":0.02393,\"107\":0.10768,\"108\":0.2991,\"109\":4.5543,\"110\":2.34494,\"111\":0,\"112\":0.00399,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0.00399,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0.01196,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0.00399,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0.01196,\"62\":0,\"63\":0.01595,\"64\":0,\"65\":0,\"66\":0.01994,\"67\":0.15952,\"68\":0,\"69\":0,\"70\":0.00399,\"71\":0,\"72\":0,\"73\":0,\"74\":0.00399,\"75\":0,\"76\":0,\"77\":0,\"78\":0.00399,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0.00399,\"84\":0,\"85\":0.00399,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.00798,\"94\":0.21535,\"95\":0.39481,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0.00798,\"15\":0,\"16\":0,\"17\":0,\"18\":0.00798,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0.00399,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.02792,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0.00399,\"106\":0.00399,\"107\":0.01196,\"108\":0.02393,\"109\":0.77367,\"110\":0.91724},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.00399,\"14\":0,\"15\":0,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0.00399,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0,\"13.1\":0.01196,\"14.1\":0.00399,\"15.1\":0,\"15.2-15.3\":0,\"15.4\":0.00399,\"15.5\":0.00798,\"15.6\":0.01196,\"16.0\":0.00399,\"16.1\":0.00798,\"16.2\":0.01994,\"16.3\":0.01994,\"16.4\":0},G:{\"8\":0.00234,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0.00234,\"6.0-6.1\":0.02925,\"7.0-7.1\":0.06317,\"8.1-8.4\":0,\"9.0-9.2\":0.00468,\"9.3\":0.2562,\"10.0-10.2\":0,\"10.3\":0.29715,\"11.0-11.2\":0.0117,\"11.3-11.4\":0,\"12.0-12.1\":0.15325,\"12.2-12.5\":2.01571,\"13.0-13.1\":0.01989,\"13.2\":0.43286,\"13.3\":0.00585,\"13.4-13.7\":0.09125,\"14.0-14.4\":0.34395,\"14.5-14.8\":0.48316,\"15.0-15.1\":0.52528,\"15.2-15.3\":0.20824,\"15.4\":0.09476,\"15.5\":0.27375,\"15.6\":0.4972,\"16.0\":0.61536,\"16.1\":0.84231,\"16.2\":1.4448,\"16.3\":1.30091,\"16.4\":0.00468},P:{\"4\":0.13332,\"20\":0.1846,\"5.0-5.4\":0.01026,\"6.2-6.4\":0,\"7.2-7.4\":0.02051,\"8.2\":0,\"9.2\":0,\"10.1\":0,\"11.1-11.2\":0.01026,\"12.0\":0.01026,\"13.0\":0.01026,\"14.0\":0,\"15.0\":0,\"16.0\":0,\"17.0\":0.01026,\"18.0\":0.01026,\"19.0\":0.29742},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.0167,\"4.2-4.3\":0.01909,\"4.4\":0,\"4.4.3-4.4.4\":0.2398},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.01196,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0.00601,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0.00601},O:{\"0\":0.47495},H:{\"0\":1.96366},L:{\"0\":71.43765},R:{_:\"0\"},M:{\"0\":0.07214},Q:{\"13.1\":0.00601}};\n\"/data/features/css-mediaqueries.js\u0005module.exports={A:{A:{\"8\":\"J D E DC\",\"129\":\"F A B\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\",\"2\":\"EC uB\"},D:{\"1\":\"3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"129\":\"0 1 2 I w J D E F A B C K L G M N O x g y z\"},E:{\"1\":\"D E F A B C K L G KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"129\":\"I w J JC\",\"388\":\"IC 0B\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\",\"2\":\"F\"},G:{\"1\":\"E YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"129\":\"0B VC CC WC XC\"},H:{\"1\":\"pC\"},I:{\"1\":\"H uC vC\",\"129\":\"uB I qC rC sC tC CC\"},J:{\"1\":\"D A\"},K:{\"1\":\"A B C h rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"129\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:2,C:\"CSS3 Media Queries\"};\n\"/data/features/broadcastchannel.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"1\":\"FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FC GC\"},D:{\"1\":\"VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB\"},E:{\"1\":\"4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B\"},F:{\"1\":\"IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB QC RC SC TC rB BC UC sB\"},G:{\"1\":\"4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I xC yC\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:1,C:\"BroadcastChannel\"};\n/data/features/imagecapture.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB FC GC\",\"194\":\"CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\"},D:{\"1\":\"vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB\",\"322\":\"UB VB WB XB YB ZB\"},E:{\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB QC RC SC TC rB BC UC sB\",\"322\":\"HB IB JB KB LB MB\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"194\":\"BD CD\"}},B:5,C:\"ImageCapture API\"};\n\"/data/features/css-mixblendmode.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"1\":\"9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 EC uB I w J D E F A B C K L G M N O x g y z FC GC\"},D:{\"1\":\"IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 I w J D E F A B C K L G M N O x g y z\",\"194\":\"6 7 8 9 AB BB CB DB EB FB GB HB\"},E:{\"2\":\"I w J D IC 0B JC KC\",\"260\":\"E F A B C K L G LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 F B C G M N O x g y z QC RC SC TC rB BC UC sB\"},G:{\"2\":\"0B VC CC WC XC YC\",\"260\":\"E ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:4,C:\"Blending of HTML/SVG elements\"};\n*/data/features/mediacapture-fromelement.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB FC GC\",\"260\":\"KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\"},D:{\"1\":\"bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB\",\"324\":\"SB TB UB VB WB XB YB ZB vB aB wB\"},E:{\"2\":\"I w J D E F A IC 0B JC KC LC MC 1B\",\"132\":\"B C K L G rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB QC RC SC TC rB BC UC sB\",\"324\":\"DB EB FB GB HB IB JB KB LB MB NB OB\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"260\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I\",\"132\":\"xC yC zC\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"260\":\"BD CD\"}},B:5,C:\"Media Capture from DOM Elements API\"};\n\"/data/features/css-first-letter.js\u0006\u0018module.exports={A:{A:{\"1\":\"F A B\",\"16\":\"DC\",\"516\":\"E\",\"1540\":\"J D\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\",\"132\":\"uB\",\"260\":\"EC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"16\":\"w J D E\",\"132\":\"I\"},E:{\"1\":\"J D E F A B C K L G JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"16\":\"w IC\",\"132\":\"I 0B\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e UC sB\",\"16\":\"F QC\",\"260\":\"B RC SC TC rB BC\"},G:{\"1\":\"E WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"16\":\"0B VC CC\"},H:{\"1\":\"pC\"},I:{\"1\":\"uB I H tC CC uC vC\",\"16\":\"qC rC\",\"132\":\"sC\"},J:{\"1\":\"D A\"},K:{\"1\":\"C h sB\",\"260\":\"A B rB BC\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:2,C:\"::first-letter CSS pseudo-element selector\"};\n /data/features/css-first-line.js\u0005module.exports={A:{A:{\"1\":\"F A B\",\"132\":\"J D E DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\"},G:{\"1\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"1\":\"pC\"},I:{\"1\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"1\":\"D A\"},K:{\"1\":\"A B C h rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:2,C:\"CSS first-line pseudo-element\"};\n/data/regions/GG.js\u0010gmodule.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.01008,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.00504,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0.00504,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0.10082,\"103\":0.00504,\"104\":0,\"105\":0,\"106\":0,\"107\":0,\"108\":0.01512,\"109\":0.69566,\"110\":0.40328,\"111\":0.00504,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0.00504,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0.00504,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0.05041,\"77\":0.01008,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"83\":0.01008,\"84\":0.00504,\"85\":0,\"86\":0.01008,\"87\":0.01512,\"88\":0,\"89\":0.01008,\"90\":0,\"91\":0.00504,\"92\":0.00504,\"93\":0.01512,\"94\":0.00504,\"95\":0.00504,\"96\":0.00504,\"97\":0,\"98\":0.00504,\"99\":0.01008,\"100\":0.00504,\"101\":0,\"102\":0.00504,\"103\":0.05041,\"104\":0,\"105\":0.00504,\"106\":0.02016,\"107\":0.10586,\"108\":0.43857,\"109\":6.29117,\"110\":3.43796,\"111\":0,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0.18148,\"95\":0.05041,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0.00504,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0.03529,\"104\":0,\"105\":0,\"106\":0,\"107\":0.0857,\"108\":0.12603,\"109\":1.57279,\"110\":2.34911},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.01008,\"14\":0.09578,\"15\":0.01008,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0.06049,\"12.1\":0.06553,\"13.1\":0.16131,\"14.1\":0.26213,\"15.1\":0.01512,\"15.2-15.3\":0.01512,\"15.4\":0.14115,\"15.5\":0.16131,\"15.6\":1.92566,\"16.0\":0.05041,\"16.1\":0.32767,\"16.2\":2.78263,\"16.3\":1.49214,\"16.4\":0},G:{\"8\":0.00512,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0,\"8.1-8.4\":0.00512,\"9.0-9.2\":0.00512,\"9.3\":0.31734,\"10.0-10.2\":0,\"10.3\":0.62957,\"11.0-11.2\":0.10237,\"11.3-11.4\":0,\"12.0-12.1\":0,\"12.2-12.5\":1.62255,\"13.0-13.1\":0.00512,\"13.2\":0,\"13.3\":0.02559,\"13.4-13.7\":0.0819,\"14.0-14.4\":0.86502,\"14.5-14.8\":2.23165,\"15.0-15.1\":0.22009,\"15.2-15.3\":0.17915,\"15.4\":0.389,\"15.5\":0.98786,\"15.6\":4.30462,\"16.0\":3.9105,\"16.1\":12.40202,\"16.2\":13.63045,\"16.3\":6.29058,\"16.4\":0},P:{\"4\":0.0324,\"20\":1.51218,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0,\"8.2\":0,\"9.2\":0,\"10.1\":0,\"11.1-11.2\":0,\"12.0\":0,\"13.0\":0.0324,\"14.0\":0.0108,\"15.0\":0,\"16.0\":0.0108,\"17.0\":0.0108,\"18.0\":0.0216,\"19.0\":2.61391},I:{\"0\":0,\"3\":0,\"4\":0.01683,\"2.1\":0,\"2.2\":0,\"2.3\":0.01262,\"4.1\":0,\"4.2-4.3\":0.08835,\"4.4\":0,\"4.4.3-4.4.4\":0.26506},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.17139,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0},H:{\"0\":0.00939},L:{\"0\":19.5901},R:{_:\"0\"},M:{\"0\":0.76369},Q:{\"13.1\":0}};\n!/data/features/promise-finally.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N\"},C:{\"1\":\"ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB FC GC\"},D:{\"1\":\"cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB\"},E:{\"1\":\"C K L G rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A B IC 0B JC KC LC MC 1B\"},F:{\"1\":\"RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB QC RC SC TC rB BC UC sB\"},G:{\"1\":\"fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I xC yC zC\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"2\":\"BD\"}},B:6,C:\"Promise.prototype.finally\"};\n/data/regions/BA.js\u0012&module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0.00399,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0.00399,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0.21168,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.05192,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0.00399,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.00799,\"79\":0,\"80\":0,\"81\":0.01198,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0.00399,\"89\":0,\"90\":0.00399,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0.00799,\"98\":0,\"99\":0.01198,\"100\":0,\"101\":0,\"102\":0.00799,\"103\":0.00399,\"104\":0.00799,\"105\":0.01997,\"106\":0.01198,\"107\":0.01198,\"108\":0.03595,\"109\":0.87868,\"110\":0.47529,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0.00399,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0.00399,\"39\":0,\"40\":0.00399,\"41\":0.00399,\"42\":0,\"43\":0.00399,\"44\":0.00399,\"45\":0.00399,\"46\":0.00399,\"47\":0.00399,\"48\":0,\"49\":0.03195,\"50\":0,\"51\":0,\"52\":0,\"53\":0.00799,\"54\":0,\"55\":0.00399,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0.00399,\"66\":0,\"67\":0,\"68\":0.00799,\"69\":0.00399,\"70\":0.00399,\"71\":0.00399,\"72\":0.00399,\"73\":0.00399,\"74\":0.00399,\"75\":0,\"76\":0.00799,\"77\":0.00399,\"78\":0.00399,\"79\":0.09586,\"80\":0.00399,\"81\":0.00799,\"83\":0.01598,\"84\":0.01198,\"85\":0.01598,\"86\":0.00799,\"87\":0.01198,\"88\":0.00799,\"89\":0.00799,\"90\":0.00399,\"91\":0.01198,\"92\":0.01198,\"93\":0.00399,\"94\":0.01198,\"95\":0.01198,\"96\":0.01198,\"97\":0.01198,\"98\":0.01198,\"99\":0.00799,\"100\":0.00799,\"101\":0.00799,\"102\":0.03595,\"103\":0.04393,\"104\":0.01598,\"105\":0.03994,\"106\":0.02396,\"107\":0.04393,\"108\":0.28757,\"109\":7.34896,\"110\":3.2631,\"111\":0.00399,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0.03195,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0.00399,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0.00399,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.00799,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0.00799,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.02396,\"94\":0.35946,\"95\":0.23565,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0.00399,\"13\":0,\"14\":0,\"15\":0.05592,\"16\":0,\"17\":0,\"18\":0.00399,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0.00399,\"85\":0.01198,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.01997,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0.00399,\"106\":0.00399,\"107\":0.01198,\"108\":0.01997,\"109\":0.37544,\"110\":0.45931},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0.00399,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0.01198,\"15\":0,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0.00399,\"13.1\":0.00799,\"14.1\":0.01598,\"15.1\":0.00399,\"15.2-15.3\":0.00399,\"15.4\":0.00799,\"15.5\":0.00799,\"15.6\":0.0639,\"16.0\":0.00799,\"16.1\":0.01997,\"16.2\":0.0679,\"16.3\":0.05192,\"16.4\":0},G:{\"8\":0.00213,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0.00107,\"5.0-5.1\":0.00107,\"6.0-6.1\":0.00747,\"7.0-7.1\":0.02347,\"8.1-8.4\":0.0192,\"9.0-9.2\":0.00213,\"9.3\":0.1515,\"10.0-10.2\":0,\"10.3\":0.07788,\"11.0-11.2\":0.02667,\"11.3-11.4\":0.0032,\"12.0-12.1\":0.00747,\"12.2-12.5\":0.25819,\"13.0-13.1\":0.00427,\"13.2\":0.00107,\"13.3\":0.00747,\"13.4-13.7\":0.03841,\"14.0-14.4\":0.10242,\"14.5-14.8\":0.33288,\"15.0-15.1\":0.04801,\"15.2-15.3\":0.06935,\"15.4\":0.08962,\"15.5\":0.30087,\"15.6\":0.85353,\"16.0\":1.18428,\"16.1\":2.37602,\"16.2\":2.42083,\"16.3\":1.46381,\"16.4\":0.00747},P:{\"4\":0.45696,\"20\":1.3201,\"5.0-5.4\":0.01015,\"6.2-6.4\":0,\"7.2-7.4\":0.07108,\"8.2\":0,\"9.2\":0.02031,\"10.1\":0,\"11.1-11.2\":0.07108,\"12.0\":0.02031,\"13.0\":0.05077,\"14.0\":0.03046,\"15.0\":0.02031,\"16.0\":0.05077,\"17.0\":0.05077,\"18.0\":0.08124,\"19.0\":2.24417},I:{\"0\":0,\"3\":0,\"4\":0.01011,\"2.1\":0,\"2.2\":0.01348,\"2.3\":0.00674,\"4.1\":0.02359,\"4.2-4.3\":0.02696,\"4.4\":0,\"4.4.3-4.4.4\":0.16511},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0.00399,\"8\":0.02796,\"9\":0.00799,\"10\":0.00399,\"11\":0.03195,\"5.5\":0},N:{\"10\":0.00601,\"11\":0.00601},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0.00601},O:{\"0\":0.01802},H:{\"0\":0.23313},L:{\"0\":66.94695},R:{_:\"0\"},M:{\"0\":0.48048},Q:{\"13.1\":0}};\n/data/regions/IQ.js\u0011module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.04606,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0.00329,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0.00329,\"75\":0,\"76\":0,\"77\":0,\"78\":0.00329,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0.00329,\"100\":0,\"101\":0,\"102\":0.00658,\"103\":0,\"104\":0.00329,\"105\":0.00329,\"106\":0.00329,\"107\":0.00329,\"108\":0.00987,\"109\":0.13489,\"110\":0.08883,\"111\":0.00329,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0.00987,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0.01316,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0.00987,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0.00329,\"57\":0,\"58\":0,\"59\":0,\"60\":0.00329,\"61\":0,\"62\":0,\"63\":0.00329,\"64\":0.00329,\"65\":0.00329,\"66\":0.00329,\"67\":0,\"68\":0.00329,\"69\":0.00329,\"70\":0.00329,\"71\":0.00658,\"72\":0.00329,\"73\":0.00329,\"74\":0.00329,\"75\":0.00329,\"76\":0,\"77\":0.00329,\"78\":0.00658,\"79\":0.01974,\"80\":0.00329,\"81\":0.01316,\"83\":0.01316,\"84\":0.00329,\"85\":0.00658,\"86\":0.00658,\"87\":0.01645,\"88\":0.00987,\"89\":0.00329,\"90\":0.00329,\"91\":0.00329,\"92\":0.01645,\"93\":0.00329,\"94\":0.00329,\"95\":0.00987,\"96\":0.00987,\"97\":0.01316,\"98\":0.00987,\"99\":0.00658,\"100\":0.01645,\"101\":0.00329,\"102\":0.00987,\"103\":0.01974,\"104\":0.01645,\"105\":0.70406,\"106\":0.01316,\"107\":0.02303,\"108\":0.09212,\"109\":4.07302,\"110\":1.56604,\"111\":0.00329,\"112\":0.00329,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0.00329,\"67\":0.02632,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0.00329,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0.00658,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0.00329,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.00987,\"94\":0.11844,\"95\":0.11515,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0.00329,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0.00329,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00987,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0.00329,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0.02303,\"108\":0.02961,\"109\":0.27636,\"110\":0.33887},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.00329,\"14\":0.04935,\"15\":0.02303,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0.07896,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0,\"13.1\":0.00987,\"14.1\":0.08883,\"15.1\":0.00658,\"15.2-15.3\":0.00987,\"15.4\":0.02303,\"15.5\":0.12831,\"15.6\":0.44744,\"16.0\":0.01974,\"16.1\":0.16779,\"16.2\":0.4935,\"16.3\":0.2632,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0.00254,\"6.0-6.1\":0,\"7.0-7.1\":0.09385,\"8.1-8.4\":0,\"9.0-9.2\":0.00507,\"9.3\":0.05834,\"10.0-10.2\":0,\"10.3\":0.0558,\"11.0-11.2\":0.00761,\"11.3-11.4\":0.01268,\"12.0-12.1\":0.02029,\"12.2-12.5\":0.61636,\"13.0-13.1\":0.00761,\"13.2\":0.00761,\"13.3\":0.03551,\"13.4-13.7\":0.11161,\"14.0-14.4\":0.3196,\"14.5-14.8\":0.76602,\"15.0-15.1\":0.16233,\"15.2-15.3\":0.23589,\"15.4\":0.31706,\"15.5\":0.68992,\"15.6\":1.53711,\"16.0\":3.45215,\"16.1\":4.05837,\"16.2\":5.11608,\"16.3\":4.66205,\"16.4\":0.01522},P:{\"4\":0.08265,\"20\":0.87813,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0.10331,\"8.2\":0,\"9.2\":0.02066,\"10.1\":0,\"11.1-11.2\":0.06199,\"12.0\":0.02066,\"13.0\":0.07232,\"14.0\":0.06199,\"15.0\":0.04132,\"16.0\":0.09298,\"17.0\":0.1343,\"18.0\":0.1343,\"19.0\":1.68394},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.00632,\"4.2-4.3\":0.00843,\"4.4\":0,\"4.4.3-4.4.4\":0.10118},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.02632,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.44286},H:{\"0\":0.38116},L:{\"0\":60.46988},R:{_:\"0\"},M:{\"0\":0.11407},Q:{\"13.1\":0}};\n!/data/features/css-reflections.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"2\":\"C K L G M N O\",\"33\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"33\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"2\":\"IC 0B\",\"33\":\"I w J D E F A B C K L G JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"2\":\"F B C QC RC SC TC rB BC UC sB\",\"33\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\"},G:{\"33\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"33\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"33\":\"D A\"},K:{\"2\":\"A B C rB BC sB\",\"33\":\"h\"},L:{\"33\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"33\":\"wC\"},P:{\"33\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"33\":\"2B\"},R:{\"33\":\"AD\"},S:{\"2\":\"BD CD\"}},B:7,C:\"CSS Reflections\"};\n/data/features/dragndrop.js\u0005module.exports={A:{A:{\"644\":\"J D E F DC\",\"772\":\"A B\"},B:{\"1\":\"O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"260\":\"C K L G M N\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\",\"8\":\"EC uB\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e sB\",\"8\":\"F B QC RC SC TC rB BC UC\"},G:{\"1\":\"oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I qC rC sC tC CC uC vC\",\"1025\":\"H\"},J:{\"2\":\"D A\"},K:{\"1\":\"sB\",\"8\":\"A B C rB BC\",\"1025\":\"h\"},L:{\"1025\":\"H\"},M:{\"2\":\"f\"},N:{\"1\":\"A B\"},O:{\"1025\":\"wC\"},P:{\"2\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"2\":\"AD\"},S:{\"2\":\"BD CD\"}},B:1,C:\"Drag and Drop\"};\n\"/data/features/css-motion-paths.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"1\":\"lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB FC GC\"},D:{\"1\":\"NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB\",\"194\":\"KB LB MB\"},E:{\"1\":\"tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B\"},F:{\"1\":\"AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 F B C G M N O x g y z QC RC SC TC rB BC UC sB\",\"194\":\"7 8 9\"},G:{\"1\":\"tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"2\":\"BD\"}},B:5,C:\"CSS Motion Path\"};\n/data/features/object-values.js\u0005module.exports={A:{A:{\"8\":\"J D E F A B DC\"},B:{\"1\":\"L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K\"},C:{\"1\":\"OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"8\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB FC GC\"},D:{\"1\":\"VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"8\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB\"},E:{\"1\":\"B C K L G 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"8\":\"I w J D E F A IC 0B JC KC LC MC\"},F:{\"1\":\"IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"8\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB QC RC SC TC rB BC UC sB\"},G:{\"1\":\"dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"8\":\"E 0B VC CC WC XC YC ZC aC bC cC\"},H:{\"8\":\"pC\"},I:{\"1\":\"H\",\"8\":\"uB I qC rC sC tC CC uC vC\"},J:{\"8\":\"D A\"},K:{\"1\":\"h\",\"8\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"8\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"8\":\"I xC\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:6,C:\"Object.values method\"};\n&/data/features/intersectionobserver.js\u0006\u0017module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"M N O\",\"2\":\"C K L\",\"516\":\"G\",\"1025\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB FC GC\",\"194\":\"TB UB VB\"},D:{\"1\":\"ZB vB aB wB bB cB dB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB\",\"516\":\"SB TB UB VB WB XB YB\",\"1025\":\"eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"K L G sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A B C IC 0B JC KC LC MC 1B rB\"},F:{\"1\":\"MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB QC RC SC TC rB BC UC sB\",\"516\":\"FB GB HB IB JB KB LB\",\"1025\":\"dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\"},G:{\"1\":\"hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I qC rC sC tC CC uC vC\",\"1025\":\"H\"},J:{\"2\":\"D A\"},K:{\"2\":\"A B C rB BC sB\",\"1025\":\"h\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I\",\"516\":\"xC yC\"},Q:{\"1025\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"2\":\"BD\"}},B:5,C:\"IntersectionObserver\"};\n/data/regions/CO.js\u0011Amodule.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.00377,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0.00377,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.00377,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0.00753,\"97\":0,\"98\":0,\"99\":0.00753,\"100\":0,\"101\":0,\"102\":0.00753,\"103\":0.00377,\"104\":0.01506,\"105\":0.00377,\"106\":0.00377,\"107\":0.00753,\"108\":0.0113,\"109\":0.21084,\"110\":0.14307,\"111\":0.00377,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0.00377,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0.00377,\"48\":0,\"49\":0.0113,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0.00377,\"63\":0,\"64\":0,\"65\":0.00377,\"66\":0,\"67\":0,\"68\":0.0113,\"69\":0.00377,\"70\":0.00377,\"71\":0,\"72\":0,\"73\":0,\"74\":0.00377,\"75\":0.00377,\"76\":0.00377,\"77\":0.00377,\"78\":0.00377,\"79\":0.05648,\"80\":0.00753,\"81\":0.00753,\"83\":0.00753,\"84\":0.00753,\"85\":0.00753,\"86\":0.00753,\"87\":0.01506,\"88\":0.0113,\"89\":0.0113,\"90\":0.00377,\"91\":0.01883,\"92\":0.01506,\"93\":0.00377,\"94\":0.00377,\"95\":0.00753,\"96\":0.0113,\"97\":0.01506,\"98\":0.01883,\"99\":0.01506,\"100\":0.01883,\"101\":0.0113,\"102\":0.01883,\"103\":0.05648,\"104\":0.04895,\"105\":0.04142,\"106\":0.03012,\"107\":0.06401,\"108\":0.18072,\"109\":6.024,\"110\":4.03232,\"111\":0.00377,\"112\":0.00377,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.00377,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.06777,\"94\":0.5384,\"95\":0.17696,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0.00377,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00377,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0.00377,\"105\":0.00377,\"106\":0.00377,\"107\":0.0113,\"108\":0.01506,\"109\":0.40286,\"110\":0.55346},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0.00753,\"15\":0.00377,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0.00377,\"13.1\":0.01506,\"14.1\":0.02636,\"15.1\":0.00377,\"15.2-15.3\":0.00377,\"15.4\":0.00753,\"15.5\":0.01883,\"15.6\":0.07907,\"16.0\":0.0113,\"16.1\":0.03012,\"16.2\":0.07907,\"16.3\":0.06401,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0.00362,\"6.0-6.1\":0,\"7.0-7.1\":0.01085,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0.04461,\"10.0-10.2\":0,\"10.3\":0.05426,\"11.0-11.2\":0.00362,\"11.3-11.4\":0.00482,\"12.0-12.1\":0.00241,\"12.2-12.5\":0.29058,\"13.0-13.1\":0.00241,\"13.2\":0.00723,\"13.3\":0.01326,\"13.4-13.7\":0.03617,\"14.0-14.4\":0.09887,\"14.5-14.8\":0.29179,\"15.0-15.1\":0.05788,\"15.2-15.3\":0.13745,\"15.4\":0.12419,\"15.5\":0.30023,\"15.6\":0.90189,\"16.0\":1.389,\"16.1\":2.78041,\"16.2\":2.93233,\"16.3\":1.65667,\"16.4\":0.00723},P:{\"4\":0.17398,\"20\":0.34796,\"5.0-5.4\":0.02047,\"6.2-6.4\":0,\"7.2-7.4\":0.08187,\"8.2\":0,\"9.2\":0,\"10.1\":0,\"11.1-11.2\":0.02047,\"12.0\":0,\"13.0\":0.02047,\"14.0\":0.02047,\"15.0\":0.01023,\"16.0\":0.04094,\"17.0\":0.05117,\"18.0\":0.05117,\"19.0\":0.64474},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.01153,\"4.2-4.3\":0.01538,\"4.4\":0,\"4.4.3-4.4.4\":0.08074},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0.00377,\"9\":0,\"10\":0,\"11\":0.01506,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.02494},H:{\"0\":0.12396},L:{\"0\":72.40977},R:{_:\"0\"},M:{\"0\":0.13094},Q:{\"13.1\":0}};\n/data/features/gyroscope.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"1\":\"gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB\",\"194\":\"ZB vB aB wB bB cB dB eB fB\"},E:{\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB QC RC SC TC rB BC UC sB\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"2\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"2\":\"BD CD\"}},B:4,C:\"Gyroscope\"};\n/data/features/link-icon-png.js\u0005module.exports={A:{A:{\"1\":\"B\",\"2\":\"J D E F A DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\"},G:{\"1\":\"gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"130\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC\"},H:{\"130\":\"pC\"},I:{\"1\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"1\":\"D\",\"130\":\"A\"},K:{\"1\":\"h\",\"130\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"130\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:1,C:\"PNG favicons\"};\n/data/regions/GR.js\u0011nmodule.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0.0059,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.12382,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0.0059,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0.0059,\"69\":0,\"70\":0,\"71\":0,\"72\":0.0059,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0.0059,\"78\":0.01179,\"79\":0,\"80\":0.0059,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0.0059,\"87\":0.01179,\"88\":0.04127,\"89\":0,\"90\":0,\"91\":0.0059,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0.0059,\"98\":0.0059,\"99\":0.0059,\"100\":0,\"101\":0,\"102\":0.05896,\"103\":0.0059,\"104\":0.0059,\"105\":0.15919,\"106\":0.01179,\"107\":0.02358,\"108\":0.11792,\"109\":2.60014,\"110\":1.58013,\"111\":0.0059,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0.07075,\"35\":0,\"36\":0,\"37\":0,\"38\":0.04127,\"39\":0.05896,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0.08254,\"48\":0,\"49\":0.17688,\"50\":0,\"51\":0,\"52\":0,\"53\":0.0059,\"54\":0,\"55\":0,\"56\":0.02358,\"57\":0.01179,\"58\":0.01179,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0.0059,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0.0059,\"76\":0.0059,\"77\":0.0059,\"78\":0,\"79\":0.1415,\"80\":0.0059,\"81\":0.02948,\"83\":0.01179,\"84\":0.0059,\"85\":0.01179,\"86\":0.01769,\"87\":0.02948,\"88\":0.01769,\"89\":0.03538,\"90\":0.04127,\"91\":0.1474,\"92\":0.04717,\"93\":0.01179,\"94\":0.0059,\"95\":0.01769,\"96\":0.01179,\"97\":0.0059,\"98\":0.0059,\"99\":0.0059,\"100\":0.02358,\"101\":0.01769,\"102\":0.08254,\"103\":0.05896,\"104\":0.01769,\"105\":0.04717,\"106\":0.05306,\"107\":0.04127,\"108\":0.35376,\"109\":14.3037,\"110\":6.50918,\"111\":0.0059,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0.06486,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0.41862,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0.0059,\"37\":0,\"38\":0,\"39\":0,\"40\":0.38914,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0.24763,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.0059,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0.0059,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.03538,\"94\":0.41272,\"95\":0.32428,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0.09434,\"16\":0,\"17\":0,\"18\":0,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0.01179,\"108\":0.04127,\"109\":0.94336,\"110\":1.13203},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0.0059,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.0059,\"14\":0.01769,\"15\":0.0059,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0.01179,\"13.1\":0.02948,\"14.1\":0.05306,\"15.1\":0.01179,\"15.2-15.3\":0.0059,\"15.4\":0.01769,\"15.5\":0.02948,\"15.6\":0.1533,\"16.0\":0.02358,\"16.1\":0.05896,\"16.2\":0.18278,\"16.3\":0.1533,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0.41097,\"8.1-8.4\":0.0047,\"9.0-9.2\":0.00117,\"9.3\":0.06693,\"10.0-10.2\":0,\"10.3\":0.07515,\"11.0-11.2\":0.0047,\"11.3-11.4\":0.00822,\"12.0-12.1\":0.00822,\"12.2-12.5\":0.32643,\"13.0-13.1\":0.00352,\"13.2\":0.00235,\"13.3\":0.01292,\"13.4-13.7\":0.05401,\"14.0-14.4\":0.11507,\"14.5-14.8\":0.29942,\"15.0-15.1\":0.05284,\"15.2-15.3\":0.08572,\"15.4\":0.11272,\"15.5\":0.26537,\"15.6\":0.83016,\"16.0\":0.95228,\"16.1\":2.494,\"16.2\":2.67131,\"16.3\":2.00906,\"16.4\":0.00822},P:{\"4\":0.21766,\"20\":0.54933,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0,\"8.2\":0,\"9.2\":0,\"10.1\":0,\"11.1-11.2\":0.01036,\"12.0\":0.01036,\"13.0\":0.02073,\"14.0\":0.02073,\"15.0\":0.01036,\"16.0\":0.05182,\"17.0\":0.03109,\"18.0\":0.04146,\"19.0\":1.06756},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.09028,\"4.2-4.3\":0.18057,\"4.4\":0,\"4.4.3-4.4.4\":0.99313},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.04127,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.06977},H:{\"0\":0.24478},L:{\"0\":49.99049},R:{_:\"0\"},M:{\"0\":0.21751},Q:{\"13.1\":0}};\n)/data/features/css-hanging-punctuation.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"2\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"A B C K L G 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F IC 0B JC KC LC MC\"},F:{\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\"},G:{\"1\":\"cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"2\":\"A B C h rB BC sB\"},L:{\"2\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"2\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"2\":\"2B\"},R:{\"2\":\"AD\"},S:{\"2\":\"BD CD\"}},B:4,C:\"CSS hanging-punctuation\"};\n/data/regions/AE.js\u0011module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0.00353,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0.00353,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0.00353,\"51\":0,\"52\":0.00353,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0.00353,\"67\":0,\"68\":0.02468,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.00353,\"79\":0,\"80\":0.00353,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0.00353,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0.01058,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0.00353,\"108\":0.17983,\"109\":0.20451,\"110\":0.11636,\"111\":0.00353,\"112\":0.00353,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0.16572,\"36\":0,\"37\":0,\"38\":0.00353,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0.00705,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0.00353,\"57\":0,\"58\":0,\"59\":0,\"60\":0.00353,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0.00353,\"66\":0,\"67\":0.00353,\"68\":0.00353,\"69\":0.00353,\"70\":0,\"71\":0,\"72\":0.00353,\"73\":0,\"74\":0.00353,\"75\":0.00705,\"76\":0.01058,\"77\":0,\"78\":0.00705,\"79\":0.01763,\"80\":0.00705,\"81\":0.00353,\"83\":0.01058,\"84\":0.0141,\"85\":0.02116,\"86\":0.0141,\"87\":0.0141,\"88\":0.00353,\"89\":0.00353,\"90\":0.00705,\"91\":0.02116,\"92\":0.01058,\"93\":0.03173,\"94\":0,\"95\":0.00705,\"96\":0.00353,\"97\":0.00705,\"98\":0.01058,\"99\":0.00705,\"100\":0.01058,\"101\":0.01058,\"102\":0.01058,\"103\":0.09168,\"104\":0.0141,\"105\":0.02821,\"106\":0.02116,\"107\":0.20803,\"108\":0.18688,\"109\":4.49212,\"110\":2.99357,\"111\":0.00353,\"112\":0.00353,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0.00353,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0.00353,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0.00353,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.02116,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0.00353,\"74\":0.0141,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0.00353,\"91\":0,\"92\":0.00353,\"93\":0.02468,\"94\":0.19746,\"95\":0.09873,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0.00353,\"16\":0.00353,\"17\":0,\"18\":0.00353,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00353,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0.00353,\"106\":0.00353,\"107\":0.00705,\"108\":0.02116,\"109\":0.46896,\"110\":0.57826},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.01058,\"14\":0.02821,\"15\":0.00705,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0.00353,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0.00705,\"13.1\":0.02821,\"14.1\":0.0811,\"15.1\":0.01058,\"15.2-15.3\":0.0141,\"15.4\":0.04231,\"15.5\":0.05642,\"15.6\":0.25035,\"16.0\":0.03173,\"16.1\":0.12694,\"16.2\":0.23977,\"16.3\":0.17983,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0.02837,\"8.1-8.4\":0.00218,\"9.0-9.2\":0,\"9.3\":0.13312,\"10.0-10.2\":0.00436,\"10.3\":0.09384,\"11.0-11.2\":0.01091,\"11.3-11.4\":0.01309,\"12.0-12.1\":0.01309,\"12.2-12.5\":0.40809,\"13.0-13.1\":0.00655,\"13.2\":0.00436,\"13.3\":0.02182,\"13.4-13.7\":0.09602,\"14.0-14.4\":0.22041,\"14.5-14.8\":0.56522,\"15.0-15.1\":0.17895,\"15.2-15.3\":0.19204,\"15.4\":0.25097,\"15.5\":0.53248,\"15.6\":1.74803,\"16.0\":2.3438,\"16.1\":4.51301,\"16.2\":5.11314,\"16.3\":3.89542,\"16.4\":0.02182},P:{\"4\":0.08221,\"20\":0.70909,\"5.0-5.4\":0.01028,\"6.2-6.4\":0,\"7.2-7.4\":0.03083,\"8.2\":0,\"9.2\":0,\"10.1\":0,\"11.1-11.2\":0.01028,\"12.0\":0,\"13.0\":0.01028,\"14.0\":0.02055,\"15.0\":0.01028,\"16.0\":0.03083,\"17.0\":0.03083,\"18.0\":0.05138,\"19.0\":1.12016},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0,\"4.4\":0,\"4.4.3-4.4.4\":0.06468},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0.00411,\"9\":0.00411,\"10\":0,\"11\":0.04114,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":3.03631},H:{\"0\":0.6313},L:{\"0\":59.42968},R:{_:\"0\"},M:{\"0\":0.13595},Q:{\"13.1\":0}};\n+/data/features/css-container-query-units.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"r s t u v f H\",\"2\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q\"},C:{\"1\":\"f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v FC GC\"},D:{\"1\":\"r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b\",\"194\":\"n o p q\",\"450\":\"c d e i j k l m\"},E:{\"1\":\"tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B\"},F:{\"1\":\"a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB QC RC SC TC rB BC UC sB\",\"194\":\"P Q R xB S T U V W X Y Z\"},G:{\"1\":\"tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"1\":\"g\",\"2\":\"I xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"2\":\"2B\"},R:{\"2\":\"AD\"},S:{\"2\":\"BD CD\"}},B:5,C:\"CSS Container Query Units\"};\n/data/regions/LI.js\u0011dmodule.exports={C:{\"2\":0.0063,\"3\":0,\"4\":0.0063,\"5\":0,\"6\":0.0063,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0.0063,\"20\":0.0063,\"21\":0,\"22\":0.0063,\"23\":0,\"24\":0,\"25\":0.0063,\"26\":0,\"27\":0,\"28\":0.0063,\"29\":0,\"30\":0,\"31\":0.0063,\"32\":0,\"33\":0,\"34\":0.0126,\"35\":0,\"36\":0.0063,\"37\":0,\"38\":0.0063,\"39\":0,\"40\":0.0315,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0.0063,\"78\":0.0063,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0.0063,\"92\":0,\"93\":0,\"94\":0,\"95\":0.0063,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0.0315,\"101\":0.0189,\"102\":0.0504,\"103\":0,\"104\":0,\"105\":0,\"106\":0.0126,\"107\":0.0126,\"108\":0.0504,\"109\":2.898,\"110\":1.9152,\"111\":0.0189,\"112\":0,\"3.5\":0.0189,\"3.6\":0.0063},D:{\"4\":0,\"5\":0,\"6\":0.0126,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.0063,\"14\":0,\"15\":0,\"16\":0.0126,\"17\":0,\"18\":0,\"19\":0.0063,\"20\":0,\"21\":0,\"22\":0.0063,\"23\":0,\"24\":0,\"25\":0,\"26\":0.0063,\"27\":0.0063,\"28\":0.0063,\"29\":0,\"30\":0,\"31\":0.0126,\"32\":0.0063,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0.0063,\"38\":0,\"39\":0,\"40\":0,\"41\":0.0189,\"42\":0,\"43\":0.0315,\"44\":0.0441,\"45\":0.0378,\"46\":0.0252,\"47\":0.0063,\"48\":0,\"49\":0.1953,\"50\":0,\"51\":0.0252,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0.0126,\"78\":0,\"79\":0.0819,\"80\":0,\"81\":0,\"83\":0,\"84\":0.1008,\"85\":0.0063,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0.0126,\"92\":0.0252,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0.0252,\"98\":0.0063,\"99\":0.0063,\"100\":0.0126,\"101\":0,\"102\":0.0063,\"103\":0.0945,\"104\":0.0252,\"105\":1.5435,\"106\":0.5922,\"107\":0.0504,\"108\":0.4158,\"109\":9.2421,\"110\":6.4071,\"111\":0,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0.0063,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0.0063,\"31\":0.0063,\"32\":0.0063,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0.0252,\"92\":0,\"93\":0.252,\"94\":1.3167,\"95\":0.2268,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0.0189},B:{\"12\":0.0126,\"13\":0.0063,\"14\":0.0126,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.0063,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0.0315,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0.0063,\"105\":0.0063,\"106\":0.0189,\"107\":0.3087,\"108\":0.4851,\"109\":2.268,\"110\":4.3911},E:{\"4\":0.0063,\"5\":0.0063,\"6\":0,\"7\":0,\"8\":0.0063,\"9\":0.0252,\"10\":0,\"11\":0,\"12\":0.0063,\"13\":0.2016,\"14\":0.1638,\"15\":0.063,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0.0189,\"13.1\":0.5166,\"14.1\":0.441,\"15.1\":0.063,\"15.2-15.3\":0.0882,\"15.4\":0.0378,\"15.5\":0.1386,\"15.6\":0.7875,\"16.0\":0.2079,\"16.1\":0.4032,\"16.2\":0.4788,\"16.3\":0.7434,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0.00682,\"7.0-7.1\":0.05458,\"8.1-8.4\":0.1501,\"9.0-9.2\":0.01365,\"9.3\":0.20469,\"10.0-10.2\":0,\"10.3\":0.09552,\"11.0-11.2\":0.22516,\"11.3-11.4\":0.02047,\"12.0-12.1\":0.04094,\"12.2-12.5\":0.23198,\"13.0-13.1\":0.05458,\"13.2\":0.02388,\"13.3\":0,\"13.4-13.7\":0.01365,\"14.0-14.4\":0.24562,\"14.5-14.8\":1.63408,\"15.0-15.1\":0.19445,\"15.2-15.3\":0.15693,\"15.4\":0.23539,\"15.5\":0.49466,\"15.6\":4.08008,\"16.0\":2.61316,\"16.1\":9.38146,\"16.2\":9.14607,\"16.3\":4.12102,\"16.4\":0.01706},P:{\"4\":0.10245,\"20\":2.10016,\"5.0-5.4\":0,\"6.2-6.4\":0.02049,\"7.2-7.4\":0,\"8.2\":0,\"9.2\":0,\"10.1\":0,\"11.1-11.2\":0,\"12.0\":0,\"13.0\":0,\"14.0\":0,\"15.0\":0,\"16.0\":0,\"17.0\":0,\"18.0\":0.01024,\"19.0\":1.71086},I:{\"0\":0,\"3\":0,\"4\":0.08706,\"2.1\":0.0068,\"2.2\":0.08434,\"2.3\":0.04761,\"4.1\":0.07482,\"4.2-4.3\":0.10203,\"4.4\":0,\"4.4.3-4.4.4\":0.29384},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0.0126,\"7\":0.0252,\"8\":0.189,\"9\":0.0378,\"10\":0.0441,\"11\":0.1386,\"5.5\":0},N:{\"10\":0.0259,\"11\":0.0777},S:{\"2.5\":0.0148,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0.0111},O:{\"0\":0.0518},H:{\"0\":1.01935},L:{\"0\":17.9344},R:{_:\"0\"},M:{\"0\":0.3959},Q:{\"13.1\":0}};\n/data/regions/HU.js\u0011Wmodule.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.03749,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0.00375,\"69\":0,\"70\":0,\"71\":0,\"72\":0.00375,\"73\":0,\"74\":0,\"75\":0.00375,\"76\":0,\"77\":0,\"78\":0.01125,\"79\":0.00375,\"80\":0,\"81\":0.00375,\"82\":0,\"83\":0.00375,\"84\":0,\"85\":0,\"86\":0,\"87\":0.00375,\"88\":0.00375,\"89\":0.0075,\"90\":0,\"91\":0.0075,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0.00375,\"97\":0.00375,\"98\":0.00375,\"99\":0.0075,\"100\":0.00375,\"101\":0.00375,\"102\":0.02624,\"103\":0.00375,\"104\":0.00375,\"105\":0.0075,\"106\":0.0075,\"107\":0.0075,\"108\":0.40864,\"109\":1.01223,\"110\":0.70856,\"111\":0.00375,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0.00375,\"35\":0,\"36\":0,\"37\":0,\"38\":0.0075,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0.01125,\"50\":0,\"51\":0,\"52\":0,\"53\":0.00375,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0.00375,\"75\":0,\"76\":0,\"77\":0,\"78\":0.00375,\"79\":0.13122,\"80\":0.00375,\"81\":0.0075,\"83\":0.0075,\"84\":0.01125,\"85\":0.01125,\"86\":0.01125,\"87\":0.02624,\"88\":0.0075,\"89\":0.0075,\"90\":0.00375,\"91\":0.00375,\"92\":0.01125,\"93\":0.00375,\"94\":0.00375,\"95\":0.015,\"96\":0.0075,\"97\":0.00375,\"98\":0.00375,\"99\":0.0075,\"100\":0.01125,\"101\":0.00375,\"102\":0.0075,\"103\":0.02624,\"104\":0.0075,\"105\":0.01875,\"106\":0.02249,\"107\":0.02999,\"108\":0.27368,\"109\":4.8887,\"110\":3.07418,\"111\":0.00375,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0.00375,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0.00375,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.0075,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0.00375,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0.00375,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.02999,\"94\":0.37865,\"95\":0.28492,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0.00375,\"18\":0.00375,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0.00375,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0.00375,\"105\":0,\"106\":0,\"107\":0.015,\"108\":0.01875,\"109\":0.54361,\"110\":0.58484},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0.015,\"15\":0.00375,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0.00375,\"13.1\":0.01875,\"14.1\":0.02999,\"15.1\":0.0075,\"15.2-15.3\":0.00375,\"15.4\":0.01125,\"15.5\":0.02249,\"15.6\":0.08623,\"16.0\":0.01125,\"16.1\":0.04874,\"16.2\":0.11997,\"16.3\":0.11622,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0.00303,\"6.0-6.1\":0,\"7.0-7.1\":0.00455,\"8.1-8.4\":0,\"9.0-9.2\":0.00152,\"9.3\":0.0197,\"10.0-10.2\":0,\"10.3\":0.0303,\"11.0-11.2\":0.00758,\"11.3-11.4\":0.00606,\"12.0-12.1\":0.00455,\"12.2-12.5\":0.18787,\"13.0-13.1\":0.00606,\"13.2\":0.00303,\"13.3\":0.01364,\"13.4-13.7\":0.05454,\"14.0-14.4\":0.17878,\"14.5-14.8\":0.37725,\"15.0-15.1\":0.07575,\"15.2-15.3\":0.11211,\"15.4\":0.16514,\"15.5\":0.29392,\"15.6\":0.99843,\"16.0\":1.46507,\"16.1\":3.48617,\"16.2\":3.66495,\"16.3\":2.9165,\"16.4\":0.01515},P:{\"4\":0.38749,\"20\":1.01971,\"5.0-5.4\":0.02039,\"6.2-6.4\":0,\"7.2-7.4\":0,\"8.2\":0,\"9.2\":0,\"10.1\":0,\"11.1-11.2\":0.0102,\"12.0\":0.0102,\"13.0\":0.02039,\"14.0\":0.03059,\"15.0\":0.0102,\"16.0\":0.05099,\"17.0\":0.03059,\"18.0\":0.08158,\"19.0\":1.78449},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0.02277,\"4.4\":0,\"4.4.3-4.4.4\":0.10473},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.015,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.025},H:{\"0\":0.33733},L:{\"0\":66.58293},R:{_:\"0\"},M:{\"0\":0.26254},Q:{\"13.1\":0}};\n/data/features/css-fixed.js\u0005module.exports={A:{A:{\"1\":\"D E F A B\",\"2\":\"DC\",\"8\":\"J\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"I w J D E F A B C K L G IC 0B JC KC LC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"1025\":\"MC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\"},G:{\"1\":\"E ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC CC\",\"132\":\"WC XC YC\"},H:{\"2\":\"pC\"},I:{\"1\":\"uB H uC vC\",\"260\":\"qC rC sC\",\"513\":\"I tC CC\"},J:{\"1\":\"D A\"},K:{\"1\":\"A B C h rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:2,C:\"CSS position:fixed\"};\n/data/features/picture.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C\"},C:{\"1\":\"FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB FC GC\",\"578\":\"BB CB DB EB\"},D:{\"1\":\"FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB\",\"194\":\"EB\"},E:{\"1\":\"A B C K L G MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F IC 0B JC KC LC\"},F:{\"1\":\"2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 F B C G M N O x g y z QC RC SC TC rB BC UC sB\",\"322\":\"1\"},G:{\"1\":\"bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:1,C:\"Picture element\"};\n'/data/features/requestanimationframe.js\u0005module.exports={A:{A:{\"1\":\"A B\",\"2\":\"J D E F DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB FC GC\",\"33\":\"B C K L G M N O x g y z\",\"164\":\"I w J D E F A\"},D:{\"1\":\"1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"I w J D E F\",\"33\":\"0 z\",\"164\":\"O x g y\",\"420\":\"A B C K L G M N\"},E:{\"1\":\"D E F A B C K L G KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w IC 0B JC\",\"33\":\"J\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F B C QC RC SC TC rB BC UC sB\"},G:{\"1\":\"E YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC CC WC\",\"33\":\"XC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H uC vC\",\"2\":\"uB I qC rC sC tC CC\"},J:{\"1\":\"A\",\"2\":\"D\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:1,C:\"requestAnimationFrame\"};\n&/data/features/input-file-directory.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K\"},C:{\"1\":\"RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB FC GC\"},D:{\"1\":\"7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 I w J D E F A B C K L G M N O x g y z\"},E:{\"1\":\"C K L G rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A B IC 0B JC KC LC MC 1B\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F B C G M QC RC SC TC rB BC UC sB\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"2\":\"A B C h rB BC sB\"},L:{\"2\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"2\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"2\":\"AD\"},S:{\"2\":\"BD CD\"}},B:7,C:\"Directory selection from file input\"};\n/dist/unpacker/feature.js\u00056'use strict'\n\nconst statuses = require('../lib/statuses')\nconst supported = require('../lib/supported')\nconst browsers = require('./browsers').browsers\nconst versions = require('./browserVersions').browserVersions\n\nconst MATH2LOG = Math.log(2)\n\nfunction unpackSupport(cipher) {\n  // bit flags\n  let stats = Object.keys(supported).reduce((list, support) => {\n    if (cipher & supported[support]) list.push(support)\n    return list\n  }, [])\n\n  // notes\n  let notes = cipher >> 7\n  let notesArray = []\n  while (notes) {\n    let note = Math.floor(Math.log(notes) / MATH2LOG) + 1\n    notesArray.unshift(`#${note}`)\n    notes -= Math.pow(2, note - 1)\n  }\n\n  return stats.concat(notesArray).join(' ')\n}\n\nfunction unpackFeature(packed) {\n  let unpacked = { status: statuses[packed.B], title: packed.C }\n  unpacked.stats = Object.keys(packed.A).reduce((browserStats, key) => {\n    let browser = packed.A[key]\n    browserStats[browsers[key]] = Object.keys(browser).reduce(\n      (stats, support) => {\n        let packedVersions = browser[support].split(' ')\n        let unpacked2 = unpackSupport(support)\n        packedVersions.forEach(v => (stats[versions[v]] = unpacked2))\n        return stats\n      },\n      {}\n    )\n    return browserStats\n  }, {})\n  return unpacked\n}\n\nmodule.exports = unpackFeature\nmodule.exports.default = unpackFeature\n'/data/features/dom-manip-convenience.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M\"},C:{\"1\":\"QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB FC GC\"},D:{\"1\":\"VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB\",\"194\":\"TB UB\"},E:{\"1\":\"A B C K L G 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F IC 0B JC KC LC MC\"},F:{\"1\":\"IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB QC RC SC TC rB BC UC sB\",\"194\":\"HB\"},G:{\"1\":\"cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I xC\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"2\":\"BD\"}},B:1,C:\"DOM manipulation convenience methods\"};\n/data/regions/AO.js\u00122module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0.00406,\"34\":0.01218,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.00406,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0.00406,\"67\":0,\"68\":0.00406,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0.00406,\"98\":0,\"99\":0.00406,\"100\":0,\"101\":0,\"102\":0.00812,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0.00812,\"108\":0.00406,\"109\":0.2273,\"110\":0.14207,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.00406,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0.01218,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0.01218,\"41\":0,\"42\":0.00406,\"43\":0.04465,\"44\":0,\"45\":0,\"46\":0.01218,\"47\":0,\"48\":0,\"49\":0.00406,\"50\":0,\"51\":0,\"52\":0,\"53\":0.00406,\"54\":0,\"55\":0.0203,\"56\":0,\"57\":0,\"58\":0.01218,\"59\":0,\"60\":0,\"61\":0.00406,\"62\":0.00406,\"63\":0.00812,\"64\":0.00406,\"65\":0.00406,\"66\":0,\"67\":0,\"68\":0,\"69\":0.02435,\"70\":0.00812,\"71\":0,\"72\":0.00812,\"73\":0.00406,\"74\":0.04465,\"75\":0.00406,\"76\":0,\"77\":0.00406,\"78\":0,\"79\":0.01218,\"80\":0,\"81\":0.02435,\"83\":0.00812,\"84\":0.01218,\"85\":0,\"86\":0.00406,\"87\":0.04059,\"88\":0.00406,\"89\":0.01218,\"90\":0.00406,\"91\":0.00812,\"92\":0.00812,\"93\":0.00406,\"94\":0.00406,\"95\":0.00406,\"96\":0.00812,\"97\":0.01218,\"98\":0.00406,\"99\":0.00406,\"100\":0.01218,\"101\":0.01218,\"102\":0.01624,\"103\":0.03247,\"104\":0.00812,\"105\":0.01624,\"106\":0.02435,\"107\":0.05277,\"108\":0.0893,\"109\":3.39738,\"110\":1.64795,\"111\":0.00812,\"112\":0.00406,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0.00406,\"27\":0,\"28\":0,\"29\":0.00406,\"30\":0,\"31\":0,\"32\":0.00406,\"33\":0,\"34\":0,\"35\":0.00406,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0.00812,\"55\":0,\"56\":0,\"57\":0,\"58\":0.00812,\"60\":0.0203,\"62\":0,\"63\":0.02435,\"64\":0.01218,\"65\":0,\"66\":0.04465,\"67\":0.05277,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0.00406,\"74\":0.00406,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0.00406,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0.00406,\"85\":0.00812,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0.00406,\"91\":0.0203,\"92\":0,\"93\":0.00406,\"94\":0.13801,\"95\":0.28007,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0.00812,\"13\":0.00812,\"14\":0.0203,\"15\":0.03653,\"16\":0.00406,\"17\":0,\"18\":0.04059,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0.00812,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0.00406,\"90\":0.00812,\"91\":0,\"92\":0.01218,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0.01624,\"102\":0.00406,\"103\":0.00406,\"104\":0.00406,\"105\":0.00406,\"106\":0.00406,\"107\":0.04465,\"108\":0.05277,\"109\":0.49114,\"110\":0.61291},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0.00406,\"15\":0,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0.00406,\"12.1\":0.00406,\"13.1\":0.01624,\"14.1\":0.0203,\"15.1\":0,\"15.2-15.3\":0,\"15.4\":0.00406,\"15.5\":0.00812,\"15.6\":0.05277,\"16.0\":0,\"16.1\":0.00406,\"16.2\":0.01218,\"16.3\":0.01624,\"16.4\":0},G:{\"8\":0.00471,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0.00314,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0.07697,\"8.1-8.4\":0.00628,\"9.0-9.2\":0.00314,\"9.3\":0.26705,\"10.0-10.2\":0.00314,\"10.3\":0.72103,\"11.0-11.2\":0.05969,\"11.3-11.4\":0.02199,\"12.0-12.1\":0.12724,\"12.2-12.5\":3.69468,\"13.0-13.1\":0.11467,\"13.2\":0.00943,\"13.3\":0.16023,\"13.4-13.7\":0.49168,\"14.0-14.4\":0.38329,\"14.5-14.8\":0.58436,\"15.0-15.1\":0.32831,\"15.2-15.3\":0.399,\"15.4\":0.40528,\"15.5\":0.70061,\"15.6\":0.84041,\"16.0\":0.77444,\"16.1\":1.01478,\"16.2\":1.19543,\"16.3\":0.81528,\"16.4\":0.00157},P:{\"4\":0.64851,\"20\":0.13173,\"5.0-5.4\":0.11146,\"6.2-6.4\":0.0608,\"7.2-7.4\":0.14186,\"8.2\":0.02027,\"9.2\":0.0304,\"10.1\":0.01013,\"11.1-11.2\":0.0304,\"12.0\":0.01013,\"13.0\":0.14186,\"14.0\":0.04053,\"15.0\":0.0304,\"16.0\":0.14186,\"17.0\":0.13173,\"18.0\":0.11146,\"19.0\":0.37492},I:{\"0\":0,\"3\":0,\"4\":0.00069,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.01486,\"4.2-4.3\":0.06878,\"4.4\":0,\"4.4.3-4.4.4\":0.16974},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.02841,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0.37428,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0.01782},O:{\"0\":0.60004},H:{\"0\":1.58612},L:{\"0\":70.90839},R:{_:\"0\"},M:{\"0\":0.11882},Q:{\"13.1\":0}};\n/data/regions/TD.js\u0010\\module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0.00155,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0.00155,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0.00155,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.00155,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0.00155,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0.00155,\"102\":0,\"103\":0,\"104\":0,\"105\":0.00311,\"106\":0,\"107\":0.00155,\"108\":0.00621,\"109\":0.09629,\"110\":0.07144,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0.00311,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0.00155,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0.00155,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0.00155,\"81\":0.00155,\"83\":0,\"84\":0,\"85\":0,\"86\":0.01242,\"87\":0.00155,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00155,\"93\":0,\"94\":0.00932,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0.00311,\"103\":0.00155,\"104\":0,\"105\":0,\"106\":0,\"107\":0.00311,\"108\":0.00932,\"109\":0.24072,\"110\":0.18325,\"111\":0,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0.00155,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0.00777,\"62\":0,\"63\":0.00466,\"64\":0,\"65\":0.03106,\"66\":0.01708,\"67\":0.00777,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0.00311,\"74\":0.00466,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0.00777,\"95\":0.01864,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0.00155,\"13\":0,\"14\":0,\"15\":0,\"16\":0.00155,\"17\":0,\"18\":0.00466,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0.00155,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0,\"108\":0.01398,\"109\":0.09007,\"110\":0.03106},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0.00155,\"15\":0,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0.00621,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0,\"13.1\":0,\"14.1\":0.00155,\"15.1\":0,\"15.2-15.3\":0,\"15.4\":0.00155,\"15.5\":0,\"15.6\":0,\"16.0\":0,\"16.1\":0,\"16.2\":0.00311,\"16.3\":0.00621,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0.00712,\"10.0-10.2\":0,\"10.3\":0.00089,\"11.0-11.2\":0.00445,\"11.3-11.4\":1.3096,\"12.0-12.1\":0.06939,\"12.2-12.5\":1.82828,\"13.0-13.1\":0.14947,\"13.2\":0,\"13.3\":0.00178,\"13.4-13.7\":0.02402,\"14.0-14.4\":0.20729,\"14.5-14.8\":0.36833,\"15.0-15.1\":0.17794,\"15.2-15.3\":0.19128,\"15.4\":0.26868,\"15.5\":0.33452,\"15.6\":1.40124,\"16.0\":0.55249,\"16.1\":0.49733,\"16.2\":0.65213,\"16.3\":0.73932,\"16.4\":0.00089},P:{\"4\":0.24576,\"20\":0.09216,\"5.0-5.4\":0.02048,\"6.2-6.4\":0.03072,\"7.2-7.4\":0.13312,\"8.2\":0,\"9.2\":0.17408,\"10.1\":0,\"11.1-11.2\":0.04096,\"12.0\":0,\"13.0\":0.01024,\"14.0\":0.08192,\"15.0\":0.01024,\"16.0\":0.52224,\"17.0\":0.0512,\"18.0\":0.1536,\"19.0\":0.60416},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0.00445,\"4.4\":0,\"4.4.3-4.4.4\":0.02021},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0.02534,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0.00845},O:{\"0\":0.43924},H:{\"0\":1.20756},L:{\"0\":85.41028},R:{_:\"0\"},M:{\"0\":0.05913},Q:{\"13.1\":0.10136}};\n /data/features/feature-policy.js\u0006\rmodule.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W\",\"2\":\"C K L G M N O\",\"1025\":\"X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h FC GC\",\"260\":\"mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\"},D:{\"1\":\"mB nB oB pB qB P Q R S T U V W\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB\",\"132\":\"aB wB bB cB dB eB fB gB hB iB jB kB lB h\",\"1025\":\"X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"2\":\"I w J D E F A B IC 0B JC KC LC MC 1B\",\"772\":\"C K L G rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"bB cB dB eB fB gB hB iB jB kB lB h mB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB QC RC SC TC rB BC UC sB\",\"132\":\"OB PB QB RB SB TB UB VB WB XB YB ZB aB\",\"1025\":\"nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC\",\"772\":\"fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"2\":\"A B C rB BC sB\",\"1025\":\"h\"},L:{\"1025\":\"H\"},M:{\"260\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"1\":\"g 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I xC yC zC\",\"132\":\"0C 1C 1B\"},Q:{\"132\":\"2B\"},R:{\"1025\":\"AD\"},S:{\"2\":\"BD\",\"260\":\"CD\"}},B:7,C:\"Feature Policy\"};\n(/data/features/page-transition-events.js\u0005module.exports={A:{A:{\"1\":\"B\",\"2\":\"J D E F A DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"w J D E F A B C K L G JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I IC 0B\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F B C QC RC SC TC rB BC UC sB\"},G:{\"1\":\"E WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"16\":\"0B VC CC\"},H:{\"2\":\"pC\"},I:{\"1\":\"uB I H sC tC CC uC vC\",\"16\":\"qC rC\"},J:{\"1\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"B\",\"2\":\"A\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:1,C:\"PageTransitionEvent\"};\n/data/features/console-time.js\u0005module.exports={A:{A:{\"1\":\"B\",\"2\":\"J D E F A DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB I w J D E F FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"I w J D E F A B C K L G JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"IC 0B\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e rB BC UC sB\",\"2\":\"F QC RC SC TC\",\"16\":\"B\"},G:{\"1\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"1\":\"pC\"},I:{\"1\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"1\":\"D A\"},K:{\"1\":\"h\",\"16\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"B\",\"2\":\"A\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:1,C:\"console.time and console.timeEnd\"};\n/data/features/input-event.js\u0006fmodule.exports={A:{A:{\"2\":\"J D E DC\",\"2561\":\"A B\",\"2692\":\"F\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2561\":\"C K L G M N O\"},C:{\"1\":\"QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"16\":\"EC\",\"1537\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB GC\",\"1796\":\"uB FC\"},D:{\"1\":\"fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"16\":\"I w J D E F A B C K L\",\"1025\":\"CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB\",\"1537\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB\"},E:{\"1\":\"L G 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"16\":\"I w J IC 0B\",\"1025\":\"D E F A B C KC LC MC 1B rB\",\"1537\":\"JC\",\"4097\":\"K sB\"},F:{\"1\":\"TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e sB\",\"16\":\"F B C QC RC SC TC rB BC\",\"260\":\"UC\",\"1025\":\"0 1 2 3 4 5 6 7 8 9 z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB\",\"1537\":\"G M N O x g y\"},G:{\"1\":\"jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"16\":\"0B VC CC\",\"1025\":\"E ZC aC bC cC dC eC fC gC\",\"1537\":\"WC XC YC\",\"4097\":\"hC iC\"},H:{\"2\":\"pC\"},I:{\"16\":\"qC rC\",\"1025\":\"H vC\",\"1537\":\"uB I sC tC CC uC\"},J:{\"1025\":\"A\",\"1537\":\"D\"},K:{\"1\":\"A B C h rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2561\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1025\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"1537\":\"BD\"}},B:1,C:\"input event\"};\n/data/regions/KP.js\u000f\u0000module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0.05264,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0.15386,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0.05264,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0,\"108\":0,\"109\":0.05264,\"110\":0,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0.05264,\"72\":0,\"73\":0,\"74\":0,\"75\":0.05264,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0.2065,\"99\":0,\"100\":7.73359,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0,\"108\":0,\"109\":0.83005,\"110\":0.62355,\"111\":0,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0.10527,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0.46564,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0.05264,\"95\":0.10527,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0.05264,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0,\"108\":0.31177,\"109\":0.67618,\"110\":1.29973},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0,\"13.1\":0,\"14.1\":0,\"15.1\":0,\"15.2-15.3\":0,\"15.4\":0,\"15.5\":0,\"15.6\":0.25914,\"16.0\":0,\"16.1\":0.05264,\"16.2\":0.41705,\"16.3\":0.98796,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0,\"10.0-10.2\":0,\"10.3\":0,\"11.0-11.2\":0.0966,\"11.3-11.4\":0,\"12.0-12.1\":0,\"12.2-12.5\":0.19319,\"13.0-13.1\":0,\"13.2\":0,\"13.3\":0,\"13.4-13.7\":0,\"14.0-14.4\":0.0966,\"14.5-14.8\":0,\"15.0-15.1\":0,\"15.2-15.3\":0.0966,\"15.4\":1.73435,\"15.5\":20.79898,\"15.6\":1.73435,\"16.0\":2.21294,\"16.1\":8.57074,\"16.2\":5.87482,\"16.3\":1.63775,\"16.4\":0},P:{\"4\":0,\"20\":0,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0,\"8.2\":0,\"9.2\":0,\"10.1\":0,\"11.1-11.2\":0,\"12.0\":0,\"13.0\":0,\"14.0\":0,\"15.0\":0,\"16.0\":0,\"17.0\":0,\"18.0\":0,\"19.0\":0},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0,\"4.4\":0,\"4.4.3-4.4.4\":0},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":27.76142},H:{\"0\":0},L:{\"0\":0.18356},R:{_:\"0\"},M:{\"0\":0},Q:{\"13.1\":0}};\n/data/features/svg-fragment.js\u0006\u0002module.exports={A:{A:{\"2\":\"J D E DC\",\"260\":\"F A B\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB I w J D E F A B C K L FC GC\"},D:{\"1\":\"RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB\",\"132\":\"DB EB FB GB HB IB JB KB LB MB NB OB PB QB\"},E:{\"1\":\"C K L G rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D F A B IC 0B JC KC MC 1B\",\"132\":\"E LC\"},F:{\"1\":\"EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e sB\",\"2\":\"G M N O x g y z\",\"4\":\"B C RC SC TC rB BC UC\",\"16\":\"F QC\",\"132\":\"0 1 2 3 4 5 6 7 8 9 AB BB CB DB\"},G:{\"1\":\"fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC CC WC XC YC aC bC cC dC eC\",\"132\":\"E ZC\"},H:{\"1\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D\",\"132\":\"A\"},K:{\"1\":\"h sB\",\"4\":\"A B C rB BC\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"132\":\"I\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:4,C:\"SVG fragment identifiers\"};\n/data/regions/JO.js\u0011\u0019module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0.00236,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.00236,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0.01887,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0.00236,\"100\":0,\"101\":0,\"102\":0.00236,\"103\":0,\"104\":0.00236,\"105\":0.00236,\"106\":0.00472,\"107\":0.00944,\"108\":0.00944,\"109\":0.16041,\"110\":0.08728,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.00236,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0.00236,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0.00236,\"71\":0,\"72\":0,\"73\":0,\"74\":0.00236,\"75\":0.00236,\"76\":0,\"77\":0,\"78\":0.00708,\"79\":0.00472,\"80\":0.00236,\"81\":0.00236,\"83\":0.00236,\"84\":0.00236,\"85\":0.00236,\"86\":0.00472,\"87\":0.00472,\"88\":0.00944,\"89\":0.00708,\"90\":0.00236,\"91\":0.00472,\"92\":0.03067,\"93\":0.00236,\"94\":0.00236,\"95\":0.00472,\"96\":0.00708,\"97\":0.00472,\"98\":0.00472,\"99\":0.00944,\"100\":0.00472,\"101\":0.00236,\"102\":0.00944,\"103\":0.0118,\"104\":0.00472,\"105\":0.00944,\"106\":0.02831,\"107\":0.02595,\"108\":0.06605,\"109\":2.27408,\"110\":1.21724,\"111\":0.00236,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0.00236,\"80\":0,\"81\":0,\"82\":0,\"83\":0.00236,\"84\":0.00236,\"85\":0,\"86\":0.00472,\"87\":0,\"88\":0.00236,\"89\":0.00236,\"90\":0.00236,\"91\":0.00472,\"92\":0.00236,\"93\":0.03067,\"94\":0.07549,\"95\":0.02123,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0.00236,\"92\":0.00236,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0.00236,\"108\":0.00944,\"109\":0.18872,\"110\":0.27836},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0.00708,\"15\":0.00236,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0.01415,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0.00236,\"13.1\":0.00708,\"14.1\":0.01415,\"15.1\":0.00236,\"15.2-15.3\":0.00236,\"15.4\":0.00472,\"15.5\":0.01887,\"15.6\":0.04954,\"16.0\":0.0118,\"16.1\":0.02595,\"16.2\":0.07549,\"16.3\":0.05898,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0.01859,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0.02479,\"10.0-10.2\":0,\"10.3\":0.06197,\"11.0-11.2\":0.00413,\"11.3-11.4\":0.00413,\"12.0-12.1\":0.00826,\"12.2-12.5\":0.47097,\"13.0-13.1\":0.00413,\"13.2\":0,\"13.3\":0.02892,\"13.4-13.7\":0.0599,\"14.0-14.4\":0.26027,\"14.5-14.8\":0.60111,\"15.0-15.1\":0.11155,\"15.2-15.3\":0.21689,\"15.4\":0.2706,\"15.5\":0.50815,\"15.6\":1.55751,\"16.0\":2.92291,\"16.1\":3.85659,\"16.2\":4.59816,\"16.3\":3.09436,\"16.4\":0.0062},P:{\"4\":0.06104,\"20\":0.92583,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0.11191,\"8.2\":0,\"9.2\":0.03052,\"10.1\":0,\"11.1-11.2\":0.07122,\"12.0\":0.03052,\"13.0\":0.05087,\"14.0\":0.06104,\"15.0\":0.10174,\"16.0\":0.10174,\"17.0\":0.10174,\"18.0\":0.13226,\"19.0\":1.90252},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0.0185,\"4.4\":0,\"4.4.3-4.4.4\":0.14801},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.00708,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.28272},H:{\"0\":0.18808},L:{\"0\":70.63067},R:{_:\"0\"},M:{\"0\":0.16046},Q:{\"13.1\":0}};\n/data/features/ol-reversed.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB I w J D E F A B C K L G M N FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"I w J D E F A B C K L G\",\"16\":\"M N O x\"},E:{\"1\":\"D E F A B C K L G KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w IC 0B JC\",\"16\":\"J\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e sB\",\"2\":\"F B QC RC SC TC rB BC UC\",\"16\":\"C\"},G:{\"1\":\"E XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC CC WC\"},H:{\"1\":\"pC\"},I:{\"1\":\"H uC vC\",\"2\":\"uB I qC rC sC tC CC\"},J:{\"1\":\"A\",\"2\":\"D\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:1,C:\"Reversed attribute of ordered lists\"};\n/data/features/css3-attr.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"2\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"2\":\"A B C h rB BC sB\"},L:{\"2\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"2\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"2\":\"2B\"},R:{\"2\":\"AD\"},S:{\"2\":\"BD CD\"}},B:7,C:\"CSS3 attr() function for all properties\"};\n/data/features/heif.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"2\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"2\":\"I w J D E F A IC 0B JC KC LC MC 1B\",\"130\":\"B C K L G rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC\",\"130\":\"eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"2\":\"A B C h rB BC sB\"},L:{\"2\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"2\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"2\":\"2B\"},R:{\"2\":\"AD\"},S:{\"2\":\"BD CD\"}},B:6,C:\"HEIF/ISO Base Media File Format\"};\n/data/features/eventsource.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB I w FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"I w\"},E:{\"1\":\"w J D E F A B C K L G JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I IC 0B\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e rB BC UC sB\",\"4\":\"F QC RC SC TC\"},G:{\"1\":\"E VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B\"},H:{\"2\":\"pC\"},I:{\"1\":\"H uC vC\",\"2\":\"uB I qC rC sC tC CC\"},J:{\"1\":\"D A\"},K:{\"1\":\"C h rB BC sB\",\"4\":\"A B\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:1,C:\"Server-sent events\"};\n/data/features/png-alpha.js\u0005module.exports={A:{A:{\"1\":\"D E F A B\",\"2\":\"DC\",\"8\":\"J\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\"},G:{\"1\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"1\":\"pC\"},I:{\"1\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"1\":\"D A\"},K:{\"1\":\"A B C h rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:2,C:\"PNG alpha transparency\"};\n/data/regions/UG.js\u0012\u001fmodule.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0.00246,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0.00246,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0.00246,\"49\":0,\"50\":0.00246,\"51\":0,\"52\":0.00246,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0.00246,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0.00246,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.00246,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0.00246,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0.00246,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0.00246,\"101\":0,\"102\":0.00985,\"103\":0.00246,\"104\":0.00739,\"105\":0.00739,\"106\":0.00492,\"107\":0.00985,\"108\":0.00985,\"109\":0.33237,\"110\":0.22897,\"111\":0.01723,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0.00246,\"48\":0,\"49\":0.00246,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0.00246,\"57\":0,\"58\":0.00246,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0.00246,\"64\":0.00246,\"65\":0.00246,\"66\":0,\"67\":0,\"68\":0,\"69\":0.00246,\"70\":0.00492,\"71\":0,\"72\":0.00492,\"73\":0,\"74\":0.00492,\"75\":0,\"76\":0,\"77\":0.00246,\"78\":0.00246,\"79\":0.00492,\"80\":0.00246,\"81\":0.00492,\"83\":0.00246,\"84\":0.00246,\"85\":0,\"86\":0.00246,\"87\":0.00492,\"88\":0.00246,\"89\":0,\"90\":0,\"91\":0.00492,\"92\":0.00985,\"93\":0.00492,\"94\":0.00492,\"95\":0.01231,\"96\":0.00492,\"97\":0.00246,\"98\":0.00246,\"99\":0.00246,\"100\":0.00492,\"101\":0.00492,\"102\":0.00985,\"103\":0.02708,\"104\":0.00739,\"105\":0.00985,\"106\":0.01231,\"107\":0.03447,\"108\":0.07386,\"109\":1.55598,\"110\":0.97003,\"111\":0.00246,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0.00246,\"25\":0,\"26\":0,\"27\":0.00246,\"28\":0.00246,\"29\":0,\"30\":0.00246,\"31\":0.00246,\"32\":0,\"33\":0.00985,\"34\":0,\"35\":0,\"36\":0,\"37\":0.01477,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0.00246,\"46\":0.00246,\"47\":0.00492,\"48\":0,\"49\":0,\"50\":0,\"51\":0.00246,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0.00246,\"57\":0.03693,\"58\":0.01477,\"60\":0.0517,\"62\":0,\"63\":0.11325,\"64\":0.08371,\"65\":0.03693,\"66\":0.19942,\"67\":0.30036,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0.00739,\"74\":0.02216,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0.00246,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00246,\"93\":0,\"94\":0.05909,\"95\":0.09602,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0.01231},B:{\"12\":0.00492,\"13\":0.00246,\"14\":0.00246,\"15\":0.00246,\"16\":0.00246,\"17\":0,\"18\":0.00985,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0.00246,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0.00246,\"90\":0.00246,\"91\":0,\"92\":0.00492,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0.00246,\"106\":0.00246,\"107\":0.01477,\"108\":0.01231,\"109\":0.17726,\"110\":0.20435},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0.00246,\"15\":0,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0.00492,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0.00246,\"12.1\":0,\"13.1\":0.00985,\"14.1\":0.00492,\"15.1\":0,\"15.2-15.3\":0.00246,\"15.4\":0,\"15.5\":0.00246,\"15.6\":0.05663,\"16.0\":0.00246,\"16.1\":0.00985,\"16.2\":0.00739,\"16.3\":0.00985,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0.00175,\"5.0-5.1\":0.00291,\"6.0-6.1\":0.00058,\"7.0-7.1\":0.00524,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0.02564,\"10.0-10.2\":0.00175,\"10.3\":0.03263,\"11.0-11.2\":0.00117,\"11.3-11.4\":0.00524,\"12.0-12.1\":0.01515,\"12.2-12.5\":0.58093,\"13.0-13.1\":0.01224,\"13.2\":0.00466,\"13.3\":0.02855,\"13.4-13.7\":0.05069,\"14.0-14.4\":0.23598,\"14.5-14.8\":0.31465,\"15.0-15.1\":0.18413,\"15.2-15.3\":0.27561,\"15.4\":0.20219,\"15.5\":0.24472,\"15.6\":0.38515,\"16.0\":0.45391,\"16.1\":0.70154,\"16.2\":0.7872,\"16.3\":0.70038,\"16.4\":0.00291},P:{\"4\":0.09363,\"20\":0.11444,\"5.0-5.4\":0.0104,\"6.2-6.4\":0,\"7.2-7.4\":0.11444,\"8.2\":0,\"9.2\":0.07283,\"10.1\":0,\"11.1-11.2\":0.03121,\"12.0\":0.04161,\"13.0\":0.02081,\"14.0\":0.05202,\"15.0\":0.04161,\"16.0\":0.06242,\"17.0\":0.03121,\"18.0\":0.07283,\"19.0\":0.49938},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.00261,\"4.2-4.3\":0.00174,\"4.4\":0,\"4.4.3-4.4.4\":0.08258},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.00985,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0.45982,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.64827},H:{\"0\":17.57004},L:{\"0\":63.73447},R:{_:\"0\"},M:{\"0\":0.20353},Q:{\"13.1\":0}};\n/data/regions/NP.js\fmodule.exports={C:{\"52\":0.00892,\"78\":0.19331,\"87\":1.27882,\"91\":0.00297,\"99\":0.00297,\"100\":0.00595,\"102\":0.01784,\"103\":0.00297,\"104\":0.00595,\"105\":0.00297,\"106\":0.00595,\"107\":0.0119,\"108\":0.01784,\"109\":0.72566,\"110\":0.53235,\"111\":0.02379,_:\"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 79 80 81 82 83 84 85 86 88 89 90 92 93 94 95 96 97 98 101 112 3.5 3.6\"},D:{\"58\":0.00595,\"65\":0.00892,\"67\":0.00297,\"69\":0.01784,\"70\":0.00595,\"72\":0.00892,\"74\":0.01487,\"75\":0.00595,\"77\":0.01487,\"78\":0.00595,\"79\":0.01487,\"83\":0.00595,\"84\":0.00297,\"85\":0.00595,\"86\":0.00892,\"87\":0.01487,\"88\":0.00892,\"89\":1.0528,\"91\":0.00595,\"92\":0.00595,\"93\":0.00595,\"94\":0.00297,\"95\":0.0119,\"96\":0.01487,\"97\":0.00892,\"98\":0.00892,\"99\":0.00595,\"100\":0.02379,\"101\":0.00595,\"102\":0.0119,\"103\":0.05948,\"104\":0.02379,\"105\":0.02379,\"106\":0.04164,\"107\":0.0684,\"108\":0.20521,\"109\":13.2224,\"110\":7.60452,\"111\":0.03271,\"112\":0.00892,_:\"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 59 60 61 62 63 64 66 68 71 73 76 80 81 90 113\"},F:{\"75\":0.16357,\"85\":0.00595,\"93\":0.00595,\"94\":0.17249,\"95\":0.18736,_:\"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 76 77 78 79 80 81 82 83 84 86 87 88 89 90 91 92 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1\",\"10.0-10.1\":0},B:{\"18\":0.00595,\"89\":0.44313,\"92\":0.0119,\"104\":0.00297,\"107\":0.00595,\"108\":0.02082,\"109\":0.64833,\"110\":0.91302,_:\"12 13 14 15 16 17 79 80 81 83 84 85 86 87 88 90 91 93 94 95 96 97 98 99 100 101 102 103 105 106\"},E:{\"4\":0,\"13\":0.00297,\"14\":0.18736,_:\"0 5 6 7 8 9 10 11 12 15 3.1 3.2 5.1 6.1 7.1 9.1 10.1 16.4\",\"11.1\":0.00297,\"12.1\":0.00595,\"13.1\":0.01784,\"14.1\":0.03271,\"15.1\":0.00297,\"15.2-15.3\":0.00595,\"15.4\":0.01487,\"15.5\":0.02379,\"15.6\":0.09517,\"16.0\":0.0119,\"16.1\":0.05056,\"16.2\":0.09517,\"16.3\":0.07435},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0.00416,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0.01831,\"10.0-10.2\":0.00083,\"10.3\":0.02913,\"11.0-11.2\":0.01748,\"11.3-11.4\":0.00333,\"12.0-12.1\":0.00666,\"12.2-12.5\":0.38196,\"13.0-13.1\":0.0025,\"13.2\":0.0025,\"13.3\":0.01498,\"13.4-13.7\":0.03994,\"14.0-14.4\":0.12982,\"14.5-14.8\":0.27961,\"15.0-15.1\":0.04993,\"15.2-15.3\":0.08238,\"15.4\":0.08322,\"15.5\":0.20555,\"15.6\":0.7581,\"16.0\":0.46102,\"16.1\":1.67765,\"16.2\":1.74755,\"16.3\":1.15089,\"16.4\":0.00499},P:{\"4\":0.03367,\"20\":0.23566,\"5.0-5.4\":0.01042,\"6.2-6.4\":0.0206,\"7.2-7.4\":0.03367,\"8.2\":0.02044,\"9.2\":0.04119,\"10.1\":0.0217,\"11.1-11.2\":0.06179,\"12.0\":0.0206,\"13.0\":0.01122,\"14.0\":0.07209,\"15.0\":0.05149,\"16.0\":0.01122,\"17.0\":0.04489,\"18.0\":0.03367,\"19.0\":0.404},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0.00468,\"4.4\":0,\"4.4.3-4.4.4\":0.03045},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"11\":0.00595,_:\"6 7 8 9 10 5.5\"},N:{\"10\":0.03712,\"11\":0.07423},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.81502},H:{\"0\":0.46562},L:{\"0\":61.74007},R:{_:\"0\"},M:{\"0\":0.07729},Q:{\"13.1\":0}};\n/data/regions/ET.js\u0012module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0.01518,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0.0038,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.08351,\"53\":0,\"54\":0,\"55\":0,\"56\":0.00759,\"57\":0,\"58\":0,\"59\":0,\"60\":0.0038,\"61\":0,\"62\":0,\"63\":0.0038,\"64\":0.0038,\"65\":0,\"66\":0,\"67\":0,\"68\":0.0038,\"69\":0,\"70\":0,\"71\":0,\"72\":0.01139,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0.04555,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0.00759,\"85\":0,\"86\":0,\"87\":0,\"88\":0.01898,\"89\":0.01518,\"90\":0.0038,\"91\":0.00759,\"92\":0,\"93\":0,\"94\":0,\"95\":0.0038,\"96\":0,\"97\":0.00759,\"98\":0.01139,\"99\":0.00759,\"100\":0,\"101\":0,\"102\":0.01518,\"103\":0.00759,\"104\":0.0038,\"105\":0.0038,\"106\":0.01139,\"107\":0.02657,\"108\":0.01898,\"109\":0.763,\"110\":0.55042,\"111\":0.08731,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.01139,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0.0038,\"32\":0,\"33\":0.0038,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0.00759,\"39\":0,\"40\":0.01518,\"41\":0,\"42\":0.0038,\"43\":0.03416,\"44\":0,\"45\":0,\"46\":0.0038,\"47\":0,\"48\":0,\"49\":0,\"50\":0.0038,\"51\":0,\"52\":0,\"53\":0.0038,\"54\":0,\"55\":0.0038,\"56\":0.01898,\"57\":0.0038,\"58\":0.01518,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0.0038,\"64\":0.0038,\"65\":0.02278,\"66\":0.0038,\"67\":0.0038,\"68\":0,\"69\":0.00759,\"70\":0.03037,\"71\":0.01139,\"72\":0.01518,\"73\":0.01518,\"74\":0.02278,\"75\":0.00759,\"76\":0.00759,\"77\":0.00759,\"78\":0.0038,\"79\":0.2847,\"80\":0.01139,\"81\":0.05314,\"83\":0.01898,\"84\":0.0038,\"85\":0.0038,\"86\":0.01139,\"87\":0.01898,\"88\":0.00759,\"89\":0.00759,\"90\":0.01518,\"91\":0.01898,\"92\":0.02278,\"93\":0.03416,\"94\":0.00759,\"95\":0.02278,\"96\":0.02278,\"97\":0.01518,\"98\":0.16323,\"99\":0.00759,\"100\":0.01518,\"101\":0.00759,\"102\":0.02278,\"103\":0.04555,\"104\":0.03037,\"105\":0.04555,\"106\":0.03037,\"107\":0.04935,\"108\":0.16323,\"109\":4.82472,\"110\":2.40287,\"111\":0.01518,\"112\":0.00759,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0.0038,\"25\":0,\"26\":0.0038,\"27\":0.01518,\"28\":0.01898,\"29\":0,\"30\":0.00759,\"31\":0,\"32\":0.01139,\"33\":0.0038,\"34\":0,\"35\":0,\"36\":0,\"37\":0.0038,\"38\":0.0038,\"39\":0,\"40\":0,\"41\":0,\"42\":0.00759,\"43\":0,\"44\":0,\"45\":0,\"46\":0.0038,\"47\":0.0038,\"48\":0,\"49\":0,\"50\":0.00759,\"51\":0,\"52\":0,\"53\":0,\"54\":0.0038,\"55\":0,\"56\":0,\"57\":0.0038,\"58\":0.0038,\"60\":0.03796,\"62\":0,\"63\":0.01898,\"64\":0.00759,\"65\":0.0038,\"66\":0.01139,\"67\":0.186,\"68\":0,\"69\":0,\"70\":0.00759,\"71\":0,\"72\":0,\"73\":0.01518,\"74\":0.0038,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0.01139,\"80\":0,\"81\":0,\"82\":0,\"83\":0.0038,\"84\":0,\"85\":0.0038,\"86\":0.0038,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0.0038,\"92\":0.01139,\"93\":0.0038,\"94\":0.25813,\"95\":0.45172,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0.01898},B:{\"12\":0.00759,\"13\":0.0038,\"14\":0.0038,\"15\":0.0038,\"16\":0.0038,\"17\":0.0038,\"18\":0.06453,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.01139,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0.01518,\"103\":0.0038,\"104\":0.0038,\"105\":0.0038,\"106\":0,\"107\":0.00759,\"108\":0.03416,\"109\":0.53144,\"110\":0.5732},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0.01518,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0.0038,\"15\":0,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0.0038,\"13.1\":0.0038,\"14.1\":0.00759,\"15.1\":0,\"15.2-15.3\":0,\"15.4\":0,\"15.5\":0.0038,\"15.6\":0.08731,\"16.0\":0,\"16.1\":0,\"16.2\":0.0038,\"16.3\":0.0038,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0.01333,\"6.0-6.1\":0.01,\"7.0-7.1\":0.37128,\"8.1-8.4\":0.02066,\"9.0-9.2\":0.09399,\"9.3\":0.36928,\"10.0-10.2\":0.001,\"10.3\":0.12698,\"11.0-11.2\":0.04199,\"11.3-11.4\":0.03699,\"12.0-12.1\":0.04433,\"12.2-12.5\":0.6689,\"13.0-13.1\":0.01866,\"13.2\":0.00767,\"13.3\":0.04099,\"13.4-13.7\":0.03066,\"14.0-14.4\":0.12598,\"14.5-14.8\":0.15631,\"15.0-15.1\":0.07632,\"15.2-15.3\":0.09165,\"15.4\":0.06699,\"15.5\":0.09332,\"15.6\":0.14631,\"16.0\":0.08199,\"16.1\":0.15298,\"16.2\":0.16464,\"16.3\":0.09132,\"16.4\":0},P:{\"4\":0.72532,\"20\":0.07253,\"5.0-5.4\":0.01036,\"6.2-6.4\":0.03108,\"7.2-7.4\":0.27976,\"8.2\":0.01036,\"9.2\":0.03108,\"10.1\":0,\"11.1-11.2\":0.01036,\"12.0\":0.01036,\"13.0\":0.08289,\"14.0\":0.03108,\"15.0\":0.01036,\"16.0\":0.10362,\"17.0\":0.09325,\"18.0\":0.04145,\"19.0\":0.43519},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.00669,\"4.2-4.3\":0.08192,\"4.4\":0,\"4.4.3-4.4.4\":0.45184},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.02278,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0.33502,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.91199},H:{\"0\":4.27007},L:{\"0\":70.97862},R:{_:\"0\"},M:{\"0\":0.07445},Q:{\"13.1\":0.01861}};\n/data/regions/ES.js\rmodule.exports={C:{\"52\":0.05446,\"59\":0.01167,\"60\":0.00389,\"67\":0.01167,\"68\":0.00778,\"78\":0.04279,\"83\":0.00389,\"88\":0.01556,\"89\":0.00389,\"91\":0.01556,\"93\":0.01167,\"94\":0.01945,\"95\":0.00389,\"97\":0.00389,\"99\":0.00389,\"100\":0.00778,\"101\":0.00778,\"102\":0.08947,\"103\":0.00778,\"104\":0.01167,\"105\":0.01945,\"106\":0.01167,\"107\":0.01945,\"108\":0.04668,\"109\":1.42374,\"110\":0.94527,_:\"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 53 54 55 56 57 58 61 62 63 64 65 66 69 70 71 72 73 74 75 76 77 79 80 81 82 84 85 86 87 90 92 96 98 111 112 3.5 3.6\"},D:{\"38\":0.00778,\"49\":0.07391,\"60\":0.01167,\"64\":0.00389,\"65\":0.00778,\"66\":0.04668,\"67\":0.00389,\"68\":0.00778,\"69\":0.00389,\"70\":0.00778,\"71\":0.00778,\"72\":0.00778,\"73\":0.00389,\"74\":0.01167,\"75\":0.02334,\"76\":0.01167,\"77\":0.00778,\"78\":0.01167,\"79\":0.10892,\"80\":0.01556,\"81\":0.01945,\"83\":0.02334,\"84\":0.02334,\"85\":0.02723,\"86\":0.02723,\"87\":0.08947,\"88\":0.01945,\"89\":0.02334,\"90\":0.03112,\"91\":0.04279,\"92\":0.0389,\"93\":0.03112,\"94\":0.05835,\"95\":0.0389,\"96\":0.03112,\"97\":0.02723,\"98\":0.09336,\"99\":0.03112,\"100\":0.04668,\"101\":0.02334,\"102\":0.04279,\"103\":0.24118,\"104\":0.03112,\"105\":0.08169,\"106\":0.05446,\"107\":0.13615,\"108\":0.8169,\"109\":14.12848,\"110\":8.99368,\"111\":0.00778,\"112\":0.00389,_:\"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 39 40 41 42 43 44 45 46 47 48 50 51 52 53 54 55 56 57 58 59 61 62 63 113\"},F:{\"28\":0.00778,\"46\":0.00389,\"89\":0.00778,\"92\":0.01945,\"93\":0.12448,\"94\":0.99584,\"95\":0.46291,_:\"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 90 91 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1\",\"10.0-10.1\":0},B:{\"17\":0.00778,\"18\":0.00778,\"90\":0.00778,\"92\":0.00778,\"97\":0.00778,\"100\":0.00778,\"101\":0.00778,\"103\":0.00389,\"104\":0.00389,\"105\":0.00778,\"106\":0.00778,\"107\":0.03112,\"108\":0.08947,\"109\":1.40429,\"110\":1.9839,_:\"12 13 14 15 16 79 80 81 83 84 85 86 87 88 89 91 93 94 95 96 98 99 102\"},E:{\"4\":0,\"13\":0.01556,\"14\":0.10503,\"15\":0.02723,_:\"0 5 6 7 8 9 10 11 12 3.1 3.2 5.1 6.1 7.1 10.1 16.4\",\"9.1\":0.02334,\"11.1\":0.01167,\"12.1\":0.03112,\"13.1\":0.12837,\"14.1\":0.23729,\"15.1\":0.0389,\"15.2-15.3\":0.03501,\"15.4\":0.08558,\"15.5\":0.17116,\"15.6\":0.61851,\"16.0\":0.07002,\"16.1\":0.24507,\"16.2\":0.71965,\"16.3\":0.49014},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0.00124,\"6.0-6.1\":0,\"7.0-7.1\":0.00373,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0.05965,\"10.0-10.2\":0,\"10.3\":0.06586,\"11.0-11.2\":0.00746,\"11.3-11.4\":0.03355,\"12.0-12.1\":0.00994,\"12.2-12.5\":0.28207,\"13.0-13.1\":0.00994,\"13.2\":0.00373,\"13.3\":0.01615,\"13.4-13.7\":0.05965,\"14.0-14.4\":0.14663,\"14.5-14.8\":0.35042,\"15.0-15.1\":0.08201,\"15.2-15.3\":0.11805,\"15.4\":0.15657,\"15.5\":0.32308,\"15.6\":0.97669,\"16.0\":1.23889,\"16.1\":3.14754,\"16.2\":3.03819,\"16.3\":1.64646,\"16.4\":0.0087},P:{\"4\":0.12421,\"20\":0.9005,\"5.0-5.4\":0.03048,\"6.2-6.4\":0.04064,\"7.2-7.4\":0.26414,\"8.2\":0.01016,\"9.2\":0.02068,\"10.1\":0.03048,\"11.1-11.2\":0.03105,\"12.0\":0.01035,\"13.0\":0.0414,\"14.0\":0.0207,\"15.0\":0.0207,\"16.0\":0.05175,\"17.0\":0.0414,\"18.0\":0.0828,\"19.0\":1.44907},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.01091,\"4.2-4.3\":0.00655,\"4.4\":0,\"4.4.3-4.4.4\":0.04364},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"8\":0.00409,\"11\":0.1554,_:\"6 7 9 10 5.5\"},N:{\"10\":0.03712,\"11\":0.07423},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.02444},H:{\"0\":0.20246},L:{\"0\":47.2477},R:{_:\"0\"},M:{\"0\":0.27495},Q:{\"13.1\":0}};\n/data/regions/CH.js\u0011module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0.00553,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0.00553,\"49\":0,\"50\":0.00553,\"51\":0,\"52\":0.01658,\"53\":0,\"54\":0,\"55\":0.01105,\"56\":0,\"57\":0.00553,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0.00553,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0.00553,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.04422,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0.00553,\"89\":0.00553,\"90\":0,\"91\":0.02211,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0.01105,\"99\":0.00553,\"100\":0.00553,\"101\":0.00553,\"102\":0.17686,\"103\":0.00553,\"104\":0.00553,\"105\":0.01658,\"106\":0.01658,\"107\":0.02764,\"108\":0.32609,\"109\":2.34345,\"110\":1.64705,\"111\":0.01658,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0.00553,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0.01658,\"50\":0,\"51\":0.00553,\"52\":0.28188,\"53\":0.00553,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0.01658,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0.01105,\"66\":0.04422,\"67\":0.01105,\"68\":0.01105,\"69\":0,\"70\":0,\"71\":0,\"72\":0.00553,\"73\":0,\"74\":0.00553,\"75\":0,\"76\":0,\"77\":0.00553,\"78\":0.01105,\"79\":0.10501,\"80\":0.01105,\"81\":0.01105,\"83\":0.01105,\"84\":0.03316,\"85\":0.03316,\"86\":0.01658,\"87\":0.05527,\"88\":0.00553,\"89\":0.01105,\"90\":0.00553,\"91\":0.00553,\"92\":0.03316,\"93\":0.00553,\"94\":0.00553,\"95\":0.00553,\"96\":0.00553,\"97\":0.00553,\"98\":0.01105,\"99\":0.02211,\"100\":0.02764,\"101\":0.03316,\"102\":0.38136,\"103\":0.29293,\"104\":0.03316,\"105\":0.03869,\"106\":0.04422,\"107\":0.08843,\"108\":0.46427,\"109\":6.51633,\"110\":4.2779,\"111\":0.00553,\"112\":0.00553,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0.00553,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.00553,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.0608,\"94\":0.57481,\"95\":0.35373,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0.00553,\"16\":0.00553,\"17\":0,\"18\":0.00553,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0.00553,\"91\":0,\"92\":0.00553,\"93\":0,\"94\":0,\"95\":0,\"96\":0.00553,\"97\":0.00553,\"98\":0,\"99\":0.01105,\"100\":0.00553,\"101\":0.00553,\"102\":0,\"103\":0.00553,\"104\":0.00553,\"105\":0.00553,\"106\":0.01105,\"107\":0.02764,\"108\":0.22661,\"109\":2.31029,\"110\":2.84641},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0.00553,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.02211,\"14\":0.10501,\"15\":0.02764,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0.00553,\"12.1\":0.08843,\"13.1\":0.25977,\"14.1\":0.39242,\"15.1\":0.04974,\"15.2-15.3\":0.0608,\"15.4\":0.12712,\"15.5\":0.21555,\"15.6\":0.99486,\"16.0\":0.14923,\"16.1\":0.38136,\"16.2\":1.17725,\"16.3\":0.96723,\"16.4\":0.00553},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0,\"8.1-8.4\":0.0082,\"9.0-9.2\":0.46334,\"9.3\":0.19272,\"10.0-10.2\":0,\"10.3\":0.12711,\"11.0-11.2\":0.0164,\"11.3-11.4\":0.12301,\"12.0-12.1\":0.0246,\"12.2-12.5\":0.56995,\"13.0-13.1\":0.0082,\"13.2\":0.0041,\"13.3\":0.0328,\"13.4-13.7\":0.16401,\"14.0-14.4\":0.38543,\"14.5-14.8\":0.95948,\"15.0-15.1\":0.25422,\"15.2-15.3\":0.40594,\"15.4\":0.45924,\"15.5\":1.07019,\"15.6\":3.84614,\"16.0\":4.70311,\"16.1\":9.84496,\"16.2\":10.04178,\"16.3\":5.62159,\"16.4\":0.0205},P:{\"4\":0.09314,\"20\":1.34538,\"5.0-5.4\":0.0207,\"6.2-6.4\":0,\"7.2-7.4\":0,\"8.2\":0,\"9.2\":0.0207,\"10.1\":0,\"11.1-11.2\":0,\"12.0\":0.01035,\"13.0\":0.0207,\"14.0\":0.0207,\"15.0\":0.01035,\"16.0\":0.0207,\"17.0\":0.05175,\"18.0\":0.08279,\"19.0\":2.16295},I:{\"0\":0,\"3\":0,\"4\":0.00555,\"2.1\":0,\"2.2\":0,\"2.3\":0.01665,\"4.1\":0.0111,\"4.2-4.3\":0.01388,\"4.4\":0,\"4.4.3-4.4.4\":0.06939},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0.00599,\"9\":0.01796,\"10\":0,\"11\":0.11975,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0.00447},O:{\"0\":0.05815},H:{\"0\":0.21597},L:{\"0\":23.17659},R:{_:\"0\"},M:{\"0\":0.74252},Q:{\"13.1\":0}};\n)/data/features/registerprotocolhandler.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"2\":\"C K L G M N O\",\"129\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\",\"2\":\"EC\"},D:{\"2\":\"I w J D E F A B C\",\"129\":\"0 1 2 3 4 5 6 7 8 9 K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"2\":\"F B QC RC SC TC rB BC\",\"129\":\"0 1 2 3 4 5 6 7 8 9 C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e UC sB\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"2\":\"D\",\"129\":\"A\"},K:{\"2\":\"A B C h rB BC sB\"},L:{\"2\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"2\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"2\":\"2B\"},R:{\"2\":\"AD\"},S:{\"2\":\"BD CD\"}},B:1,C:\"Custom protocol handling\"};\n+/data/features/mdn-text-decoration-color.js\u0005module.exports={A:{D:{\"1\":\"YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB\"},L:{\"1\":\"H\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"1\":\"DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB I w FC GC\",\"33\":\"0 1 2 3 4 5 6 7 8 9 J D E F A B C K L G M N O x g y z AB BB CB\"},M:{\"1\":\"f\"},A:{\"2\":\"J D E F A B DC\"},F:{\"1\":\"LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB QC RC SC TC rB BC UC sB\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},E:{\"1\":\"K L G sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"I w J D IC 0B JC KC LC PC\",\"33\":\"E F A B C MC 1B rB\"},G:{\"1\":\"hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC CC WC XC YC\",\"33\":\"E ZC aC bC cC dC eC fC gC\"},P:{\"1\":\"g zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I xC yC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"}},B:6,C:\"text-decoration-color property\"};\n/data/features/calc.js\u0005module.exports={A:{A:{\"2\":\"J D E DC\",\"260\":\"F\",\"516\":\"A B\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB FC GC\",\"33\":\"I w J D E F A B C K L G\"},D:{\"1\":\"3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"I w J D E F A B C K L G M N O\",\"33\":\"0 1 2 x g y z\"},E:{\"1\":\"D E F A B C K L G KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w IC 0B JC\",\"33\":\"J\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F B C QC RC SC TC rB BC UC sB\"},G:{\"1\":\"E YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC CC WC\",\"33\":\"XC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC\",\"132\":\"uC vC\"},J:{\"1\":\"A\",\"2\":\"D\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:4,C:\"calc() as CSS unit value\"};\n/data/regions/BW.js\u0011module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.01792,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0.03135,\"35\":0,\"36\":0,\"37\":0,\"38\":0.00448,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.00896,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0.00448,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0.00448,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.00448,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0.00448,\"90\":0,\"91\":0.00448,\"92\":0.00896,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0.01344,\"103\":0.00448,\"104\":0.00448,\"105\":0.00448,\"106\":0.00448,\"107\":0.00896,\"108\":0.01792,\"109\":0.41207,\"110\":0.31801,\"111\":0.01344,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0.00448,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0.00448,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0.00448,\"47\":0,\"48\":0,\"49\":0.01344,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0.00896,\"64\":0,\"65\":0.00448,\"66\":0,\"67\":0.00448,\"68\":0,\"69\":0,\"70\":0.00448,\"71\":0,\"72\":0.00448,\"73\":0.00896,\"74\":0.00448,\"75\":0,\"76\":0.00448,\"77\":0.00896,\"78\":0.00896,\"79\":0.01344,\"80\":0.00448,\"81\":0.04927,\"83\":0.00448,\"84\":0,\"85\":0.00448,\"86\":0.00448,\"87\":0.00896,\"88\":0.01344,\"89\":0.00896,\"90\":0.00896,\"91\":0.01344,\"92\":0.01344,\"93\":0.00448,\"94\":0.00896,\"95\":0.01792,\"96\":0.01792,\"97\":0.00896,\"98\":0.01344,\"99\":0.0224,\"100\":0.01344,\"101\":0.01344,\"102\":0.02687,\"103\":0.04927,\"104\":0.10302,\"105\":0.0224,\"106\":0.03135,\"107\":0.10302,\"108\":0.22395,\"109\":7.51128,\"110\":4.13412,\"111\":0,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0.00896,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0.01344,\"62\":0,\"63\":0.00896,\"64\":0,\"65\":0.00448,\"66\":0.06271,\"67\":0.17916,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0.00896,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.00448,\"79\":0.00896,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.01344,\"94\":0.18364,\"95\":0.22843,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0.00448,\"13\":0.00448,\"14\":0.00896,\"15\":0.00448,\"16\":0.00448,\"17\":0.00448,\"18\":0.0224,\"79\":0,\"80\":0.04031,\"81\":0,\"83\":0,\"84\":0.00896,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0.00448,\"90\":0.00448,\"91\":0,\"92\":0.09406,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0.00448,\"101\":0.00896,\"102\":0,\"103\":0,\"104\":0,\"105\":0.01344,\"106\":0.00896,\"107\":0.06719,\"108\":0.06271,\"109\":1.09736,\"110\":1.5363},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0.00896,\"15\":0.01344,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0.00448,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0.00448,\"13.1\":0.05823,\"14.1\":0.0224,\"15.1\":0.00448,\"15.2-15.3\":0.00896,\"15.4\":0.02687,\"15.5\":0.03135,\"15.6\":0.07614,\"16.0\":0.00896,\"16.1\":0.05375,\"16.2\":0.07614,\"16.3\":0.03583,\"16.4\":0},G:{\"8\":0,\"3.2\":0.0014,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0.00559,\"6.0-6.1\":0.0021,\"7.0-7.1\":0.08252,\"8.1-8.4\":0,\"9.0-9.2\":0.0014,\"9.3\":0.05664,\"10.0-10.2\":0,\"10.3\":0.08112,\"11.0-11.2\":0.0014,\"11.3-11.4\":0.0965,\"12.0-12.1\":0.00979,\"12.2-12.5\":0.31048,\"13.0-13.1\":0,\"13.2\":0.0049,\"13.3\":0.0021,\"13.4-13.7\":0.11119,\"14.0-14.4\":0.11818,\"14.5-14.8\":0.11119,\"15.0-15.1\":0.0958,\"15.2-15.3\":0.14196,\"15.4\":0.11259,\"15.5\":0.2993,\"15.6\":0.62307,\"16.0\":0.77201,\"16.1\":1.06711,\"16.2\":1.24613,\"16.3\":0.8804,\"16.4\":0.0007},P:{\"4\":0.32622,\"20\":0.35681,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0.26506,\"8.2\":0,\"9.2\":0.01019,\"10.1\":0.01019,\"11.1-11.2\":0.04078,\"12.0\":0,\"13.0\":0.03058,\"14.0\":0.13253,\"15.0\":0.01019,\"16.0\":0.07136,\"17.0\":0.09175,\"18.0\":0.05097,\"19.0\":0.9277},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0.00614,\"4.4\":0,\"4.4.3-4.4.4\":0.10313},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.04031,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0.06625,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0.01104},O:{\"0\":1.08212},H:{\"0\":0.91471},L:{\"0\":68.93983},R:{_:\"0\"},M:{\"0\":0.1049},Q:{\"13.1\":0}};\n/data/features/css-resize.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB FC GC\",\"33\":\"I\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"I w J D E F A B C K L G JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"IC 0B\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F B C QC RC SC TC rB BC UC\",\"132\":\"sB\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"2\":\"BD\"}},B:2,C:\"CSS resize property\"};\n/data/regions/US.js\u0013\u000emodule.exports={C:{\"2\":0,\"3\":0,\"4\":0.00522,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.02088,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0.00522,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0.00522,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0.00522,\"45\":0,\"46\":0,\"47\":0,\"48\":0.01044,\"49\":0,\"50\":0,\"51\":0,\"52\":0.01566,\"53\":0,\"54\":0.00522,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0.00522,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0.00522,\"69\":0,\"70\":0.00522,\"71\":0.00522,\"72\":0.00522,\"73\":0,\"74\":0,\"75\":0.00522,\"76\":0,\"77\":0.00522,\"78\":0.03655,\"79\":0.00522,\"80\":0.00522,\"81\":0.00522,\"82\":0.00522,\"83\":0.00522,\"84\":0.00522,\"85\":0,\"86\":0,\"87\":0.00522,\"88\":0.00522,\"89\":0.00522,\"90\":0.00522,\"91\":0.00522,\"92\":0,\"93\":0.01044,\"94\":0.02088,\"95\":0,\"96\":0,\"97\":0.00522,\"98\":0,\"99\":0,\"100\":0.00522,\"101\":0.00522,\"102\":0.06787,\"103\":0.00522,\"104\":0.00522,\"105\":0.01044,\"106\":0.01044,\"107\":0.01566,\"108\":0.05221,\"109\":0.85102,\"110\":0.54298,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0.00522,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0.01044,\"41\":0,\"42\":0,\"43\":0.00522,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0.02088,\"49\":0.02088,\"50\":0,\"51\":0,\"52\":0.00522,\"53\":0,\"54\":0,\"55\":0,\"56\":0.13053,\"57\":0,\"58\":0,\"59\":0.00522,\"60\":0.00522,\"61\":0.01044,\"62\":0.00522,\"63\":0.00522,\"64\":0.00522,\"65\":0.00522,\"66\":0.02611,\"67\":0.00522,\"68\":0.01566,\"69\":0.01566,\"70\":0.01044,\"71\":0.01566,\"72\":0.01566,\"73\":0.01044,\"74\":0.02088,\"75\":0.02088,\"76\":0.08354,\"77\":0.01566,\"78\":0.02088,\"79\":0.08876,\"80\":0.04177,\"81\":0.05743,\"83\":0.08354,\"84\":0.04177,\"85\":0.06265,\"86\":0.06787,\"87\":0.06787,\"88\":0.03133,\"89\":0.04177,\"90\":0.04177,\"91\":0.04177,\"92\":0.02088,\"93\":0.07832,\"94\":0.02611,\"95\":0.01044,\"96\":0.03133,\"97\":0.05221,\"98\":0.03133,\"99\":0.04699,\"100\":0.04177,\"101\":0.06787,\"102\":0.12008,\"103\":0.28193,\"104\":0.07832,\"105\":0.15141,\"106\":0.08876,\"107\":0.18274,\"108\":1.23216,\"109\":6.90738,\"110\":4.09849,\"111\":0.02088,\"112\":0.04177,\"113\":0.01044},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0.00522,\"54\":0.00522,\"55\":0.00522,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.00522,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0.00522,\"74\":0.00522,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.02088,\"94\":0.21928,\"95\":0.14619,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0.00522,\"13\":0,\"14\":0,\"15\":0.00522,\"16\":0,\"17\":0,\"18\":0.00522,\"79\":0,\"80\":0.00522,\"81\":0.00522,\"83\":0.00522,\"84\":0.00522,\"85\":0.00522,\"86\":0.00522,\"87\":0.01044,\"88\":0.00522,\"89\":0.00522,\"90\":0.00522,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0.00522,\"101\":0,\"102\":0,\"103\":0.00522,\"104\":0.00522,\"105\":0.00522,\"106\":0.00522,\"107\":0.12008,\"108\":0.0992,\"109\":1.34702,\"110\":1.92133},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0.00522,\"10\":0,\"11\":0,\"12\":0.00522,\"13\":0.02611,\"14\":0.11486,\"15\":0.03133,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0.10442,\"10.1\":0,\"11.1\":0.00522,\"12.1\":0.04177,\"13.1\":0.27149,\"14.1\":0.33414,\"15.1\":0.05221,\"15.2-15.3\":0.04699,\"15.4\":0.10442,\"15.5\":0.20362,\"15.6\":1.11729,\"16.0\":0.12008,\"16.1\":0.35503,\"16.2\":1.22694,\"16.3\":0.80926,\"16.4\":0.00522},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0.0041,\"5.0-5.1\":0,\"6.0-6.1\":0.0082,\"7.0-7.1\":0,\"8.1-8.4\":0.0041,\"9.0-9.2\":0.04922,\"9.3\":0.07794,\"10.0-10.2\":0.0082,\"10.3\":0.09845,\"11.0-11.2\":0.04102,\"11.3-11.4\":0.04512,\"12.0-12.1\":0.03282,\"12.2-12.5\":0.4348,\"13.0-13.1\":0.03282,\"13.2\":0.2256,\"13.3\":0.05332,\"13.4-13.7\":0.16818,\"14.0-14.4\":0.47172,\"14.5-14.8\":0.95164,\"15.0-15.1\":0.26252,\"15.2-15.3\":0.38558,\"15.4\":0.40199,\"15.5\":0.85319,\"15.6\":3.92551,\"16.0\":3.70811,\"16.1\":10.56648,\"16.2\":11.13664,\"16.3\":5.57858,\"16.4\":0.02871},P:{\"4\":0.0519,\"20\":0.61241,\"5.0-5.4\":0.01038,\"6.2-6.4\":0,\"7.2-7.4\":0,\"8.2\":0,\"9.2\":0,\"10.1\":0,\"11.1-11.2\":0.01038,\"12.0\":0.01038,\"13.0\":0.01038,\"14.0\":0.01038,\"15.0\":0.01038,\"16.0\":0.04152,\"17.0\":0.03114,\"18.0\":0.06228,\"19.0\":0.76811},I:{\"0\":0,\"3\":0.0179,\"4\":0.06563,\"2.1\":0.0537,\"2.2\":0.02983,\"2.3\":0,\"4.1\":0.0179,\"4.2-4.3\":0.17303,\"4.4\":0,\"4.4.3-4.4.4\":0.14916},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0.03494,\"9\":0.02329,\"10\":0.00582,\"11\":0.08735,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0.00478,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.08124},H:{\"0\":0.25337},L:{\"0\":29.99886},R:{_:\"0\"},M:{\"0\":0.44923},Q:{\"13.1\":0.03345}};\n!/data/features/canvas-blending.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB I w J D E F A B C K L G M N O x FC GC\"},D:{\"1\":\"7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 I w J D E F A B C K L G M N O x g y z\"},E:{\"1\":\"D E F A B C K L G KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J IC 0B JC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F B C G M QC RC SC TC rB BC UC sB\"},G:{\"1\":\"E YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC CC WC XC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H uC vC\",\"2\":\"uB I qC rC sC tC CC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:4,C:\"Canvas blend modes\"};\n /data/features/rel-noreferrer.js\u0005module.exports={A:{A:{\"2\":\"J D E F A DC\",\"132\":\"B\"},B:{\"1\":\"K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"16\":\"C\"},C:{\"1\":\"AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"16\":\"I w J D E F A B C K L G\"},E:{\"1\":\"w J D E F A B C K L G JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I IC 0B\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F B C QC RC SC TC rB BC UC sB\"},G:{\"1\":\"E VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B\"},H:{\"2\":\"pC\"},I:{\"1\":\"uB I H sC tC CC uC vC\",\"16\":\"qC rC\"},J:{\"1\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:1,C:\"Link type \\\"noreferrer\\\"\"};\n!/data/features/css-text-indent.js\u0005module.exports={A:{A:{\"132\":\"J D E F A B DC\"},B:{\"132\":\"C K L G M N O\",\"388\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"132\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"132\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB\",\"388\":\"FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"tB 7B 8B 9B AC PC\",\"132\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B\"},F:{\"132\":\"0 1 F B C G M N O x g y z QC RC SC TC rB BC UC sB\",\"388\":\"2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\"},G:{\"1\":\"tB 7B 8B 9B AC\",\"132\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B\"},H:{\"132\":\"pC\"},I:{\"132\":\"uB I qC rC sC tC CC uC vC\",\"388\":\"H\"},J:{\"132\":\"D A\"},K:{\"132\":\"A B C rB BC sB\",\"388\":\"h\"},L:{\"388\":\"H\"},M:{\"132\":\"f\"},N:{\"132\":\"A B\"},O:{\"388\":\"wC\"},P:{\"132\":\"I\",\"388\":\"g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"388\":\"2B\"},R:{\"388\":\"AD\"},S:{\"132\":\"BD CD\"}},B:4,C:\"CSS text-indent\"};\n/data/features/midi.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"1\":\"u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t FC GC\"},D:{\"1\":\"KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB\"},E:{\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 F B C G M N O x g y z QC RC SC TC rB BC UC sB\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"2\":\"BD CD\"}},B:5,C:\"Web MIDI API\"};\n/data/regions/CF.js\u0010module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0.00198,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0.00198,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0.00395,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0.00395,\"103\":0.00198,\"104\":0,\"105\":0.00198,\"106\":0.00593,\"107\":0.00395,\"108\":0.00198,\"109\":0.07703,\"110\":0.07703,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.00198,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0.00198,\"32\":0,\"33\":0,\"34\":0.00593,\"35\":0,\"36\":0,\"37\":0.00198,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0.00395,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0.00198,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0.00198,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0.00198,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0.00198,\"80\":0,\"81\":0.00198,\"83\":0.00198,\"84\":0.0079,\"85\":0,\"86\":0.01778,\"87\":0.00198,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.00198,\"94\":0.00198,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0.00988,\"103\":0.00395,\"104\":0,\"105\":0,\"106\":0,\"107\":0.00395,\"108\":0.0158,\"109\":0.66953,\"110\":1.3509,\"111\":0,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0.00198,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0.00198,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0.00198,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0.00198,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0.0079,\"58\":0.00593,\"60\":0.00593,\"62\":0,\"63\":0.01383,\"64\":0.00395,\"65\":0.00198,\"66\":0.02765,\"67\":0.01778,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0.00593,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0.00395,\"95\":0.01185,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0.00198},B:{\"12\":0.00198,\"13\":0.00198,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0.00198,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0.00198,\"91\":0,\"92\":0.00395,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0.00198,\"102\":0,\"103\":0,\"104\":0,\"105\":0,\"106\":0.00198,\"107\":0.00198,\"108\":0.00988,\"109\":0.0869,\"110\":0.07308},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0.00198,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0,\"13.1\":0.00198,\"14.1\":0,\"15.1\":0,\"15.2-15.3\":0,\"15.4\":0.00198,\"15.5\":0,\"15.6\":0.00395,\"16.0\":0,\"16.1\":0,\"16.2\":0.00198,\"16.3\":0,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0.00224,\"7.0-7.1\":0.00224,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0,\"10.0-10.2\":0,\"10.3\":0.00224,\"11.0-11.2\":0,\"11.3-11.4\":0,\"12.0-12.1\":0,\"12.2-12.5\":0.25427,\"13.0-13.1\":0.01058,\"13.2\":0,\"13.3\":0.01475,\"13.4-13.7\":0.02758,\"14.0-14.4\":0.29435,\"14.5-14.8\":0.31134,\"15.0-15.1\":0.04649,\"15.2-15.3\":0.02982,\"15.4\":0.38349,\"15.5\":0.07631,\"15.6\":0.34726,\"16.0\":0.23728,\"16.1\":0.30493,\"16.2\":0.21804,\"16.3\":0.22862,\"16.4\":0.00224},P:{\"4\":0.02019,\"20\":0.05047,\"5.0-5.4\":0.03028,\"6.2-6.4\":0.02019,\"7.2-7.4\":0.09084,\"8.2\":0,\"9.2\":0.04037,\"10.1\":0,\"11.1-11.2\":0.10093,\"12.0\":0,\"13.0\":0,\"14.0\":0.03028,\"15.0\":0,\"16.0\":0.02019,\"17.0\":1.15064,\"18.0\":0.07065,\"19.0\":0.33308},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.00706,\"4.2-4.3\":0.00181,\"4.4\":0,\"4.4.3-4.4.4\":0.03694},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.01185,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":1.74945,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.08828},H:{\"0\":9.65649},L:{\"0\":77.69128},R:{_:\"0\"},M:{\"0\":0.04013},Q:{\"13.1\":0}};\n/data/features/server-timing.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"1\":\"wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB FC GC\"},D:{\"1\":\"eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB\",\"196\":\"aB wB bB cB\",\"324\":\"dB\"},E:{\"2\":\"I w J D E F A B C IC 0B JC KC LC MC 1B rB\",\"516\":\"K L G sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB QC RC SC TC rB BC UC sB\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"2\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"2\":\"BD\"}},B:5,C:\"Server Timing\"};\n/data/features/sni.js\u0005module.exports={A:{A:{\"1\":\"F A B\",\"2\":\"J DC\",\"132\":\"D E\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"I w\"},E:{\"1\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\"},G:{\"1\":\"E VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B\"},H:{\"1\":\"pC\"},I:{\"1\":\"uB I H tC CC uC vC\",\"2\":\"qC rC sC\"},J:{\"1\":\"A\",\"2\":\"D\"},K:{\"1\":\"A B C h rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:6,C:\"Server Name Indication\"};\n/data/regions/TL.js\u0012module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0.03517,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0.00502,\"34\":0,\"35\":0,\"36\":0,\"37\":0.00502,\"38\":0.00502,\"39\":0,\"40\":0.00502,\"41\":0.0201,\"42\":0,\"43\":0.00502,\"44\":0.00502,\"45\":0,\"46\":0.00502,\"47\":0.01005,\"48\":0.09043,\"49\":0,\"50\":0.00502,\"51\":0,\"52\":0,\"53\":0.00502,\"54\":0.00502,\"55\":0,\"56\":0.0201,\"57\":0.01005,\"58\":0,\"59\":0.00502,\"60\":0,\"61\":0.01005,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.01005,\"68\":0.00502,\"69\":0,\"70\":0,\"71\":0,\"72\":0.01005,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.05526,\"79\":0.17584,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0.01507,\"87\":0,\"88\":0.02512,\"89\":0.01005,\"90\":0.00502,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0.05526,\"96\":0,\"97\":0.00502,\"98\":0.01005,\"99\":0.01507,\"100\":0.00502,\"101\":0.01005,\"102\":0.01507,\"103\":0.01507,\"104\":0,\"105\":0.01005,\"106\":0.05024,\"107\":0.04522,\"108\":0.2512,\"109\":1.95936,\"110\":1.25098,\"111\":0.22106,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0.01507,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0.04019,\"43\":0.00502,\"44\":0,\"45\":0.02512,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0.00502,\"55\":0,\"56\":0,\"57\":0,\"58\":0.14067,\"59\":0.01005,\"60\":0.01507,\"61\":0,\"62\":0.00502,\"63\":0.01005,\"64\":0.01507,\"65\":0.03517,\"66\":0.00502,\"67\":0.01507,\"68\":0.03014,\"69\":0,\"70\":0,\"71\":0,\"72\":0.01005,\"73\":0.00502,\"74\":0.05526,\"75\":0.0201,\"76\":0,\"77\":0.00502,\"78\":0,\"79\":0.00502,\"80\":0.1256,\"81\":0.01005,\"83\":0.01507,\"84\":0.00502,\"85\":0.01507,\"86\":0.00502,\"87\":0.02512,\"88\":0.00502,\"89\":0.00502,\"90\":0.01005,\"91\":0.01005,\"92\":0.00502,\"93\":0.00502,\"94\":0,\"95\":0.01005,\"96\":0.02512,\"97\":0.0201,\"98\":0.01507,\"99\":0.02512,\"100\":0.01507,\"101\":0.01005,\"102\":0.0201,\"103\":0.11053,\"104\":0.04522,\"105\":0.03517,\"106\":0.03014,\"107\":0.06531,\"108\":0.31651,\"109\":9.90733,\"110\":3.66752,\"111\":0,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0.03014,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0.00502,\"55\":0,\"56\":0,\"57\":0,\"58\":0.01005,\"60\":0.01005,\"62\":0,\"63\":0.01005,\"64\":0.01005,\"65\":0,\"66\":0.01005,\"67\":0.17584,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0.01005,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0.00502,\"91\":0.00502,\"92\":0.01005,\"93\":0.01005,\"94\":0.26627,\"95\":0.21101,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0.00502},B:{\"12\":0.01005,\"13\":0.00502,\"14\":0.00502,\"15\":0,\"16\":0.01005,\"17\":0.01005,\"18\":0.0201,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0.01005,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0.01507,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0.01507,\"97\":0,\"98\":0.01507,\"99\":0.01005,\"100\":0.01507,\"101\":0.01005,\"102\":0,\"103\":0.01507,\"104\":0.02512,\"105\":0.0201,\"106\":0.03517,\"107\":0.05526,\"108\":0.18086,\"109\":1.1505,\"110\":1.256},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0.00502,\"13\":0.00502,\"14\":0.0201,\"15\":0,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0.00502,\"12.1\":0.0201,\"13.1\":0.04019,\"14.1\":0.06531,\"15.1\":0.07034,\"15.2-15.3\":0.01005,\"15.4\":0.04522,\"15.5\":0.06029,\"15.6\":0.01507,\"16.0\":0,\"16.1\":0.01507,\"16.2\":0.06531,\"16.3\":0.03517,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0.00085,\"6.0-6.1\":0,\"7.0-7.1\":0,\"8.1-8.4\":0,\"9.0-9.2\":0.00507,\"9.3\":0.01099,\"10.0-10.2\":0.00507,\"10.3\":0.08457,\"11.0-11.2\":0.00085,\"11.3-11.4\":0.00423,\"12.0-12.1\":0.08203,\"12.2-12.5\":0.73914,\"13.0-13.1\":0.04059,\"13.2\":0.00592,\"13.3\":0.06512,\"13.4-13.7\":0.13193,\"14.0-14.4\":0.60637,\"14.5-14.8\":0.67149,\"15.0-15.1\":0.75944,\"15.2-15.3\":0.24102,\"15.4\":0.19451,\"15.5\":0.55309,\"15.6\":0.99285,\"16.0\":0.57592,\"16.1\":0.62666,\"16.2\":0.97002,\"16.3\":0.61736,\"16.4\":0.00254},P:{\"4\":0.14147,\"20\":0.09095,\"5.0-5.4\":0.01011,\"6.2-6.4\":0.01011,\"7.2-7.4\":0.12126,\"8.2\":0,\"9.2\":0.03032,\"10.1\":0,\"11.1-11.2\":0.09095,\"12.0\":0.01011,\"13.0\":0.02021,\"14.0\":0.07074,\"15.0\":0.02021,\"16.0\":0.18189,\"17.0\":0.05053,\"18.0\":0.09095,\"19.0\":0.37389},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.01716,\"4.2-4.3\":0,\"4.4\":0,\"4.4.3-4.4.4\":0.04289},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.05024,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.69166},H:{\"0\":0.9893},L:{\"0\":63.63792},R:{_:\"0\"},M:{\"0\":0.1443},Q:{\"13.1\":0.00498}};\n$/data/features/css-grid-animation.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"2\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB FC GC\"},D:{\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B\"},F:{\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\"},G:{\"1\":\"tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"2\":\"A B C h rB BC sB\"},L:{\"2\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"2\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"2\":\"2B\"},R:{\"2\":\"AD\"},S:{\"1\":\"CD\",\"2\":\"BD\"}},B:4,C:\"CSS Grid animation\"};\n$/data/features/keyboardevent-code.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"1\":\"FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FC GC\"},D:{\"1\":\"PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB\",\"194\":\"JB KB LB MB NB OB\"},E:{\"1\":\"B C K L G 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A IC 0B JC KC LC MC\"},F:{\"1\":\"CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 F B C G M N O x g y z QC RC SC TC rB BC UC sB\",\"194\":\"6 7 8 9 AB BB\"},G:{\"1\":\"dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"2\":\"A B C h rB BC sB\"},L:{\"194\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"2\":\"I\",\"194\":\"g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"2\":\"2B\"},R:{\"194\":\"AD\"},S:{\"1\":\"BD CD\"}},B:5,C:\"KeyboardEvent.code\"};\n/data/features/style-scoped.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"2\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB\",\"2\":\"EC uB I w J D E F A B C K L G M N O x g wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\",\"322\":\"WB XB YB ZB vB aB\"},D:{\"2\":\"I w J D E F A B C K L G M N O x EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"194\":\"0 1 2 3 4 5 6 7 8 9 g y z AB BB CB DB\"},E:{\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"2\":\"A B C h rB BC sB\"},L:{\"2\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"2\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"2\":\"2B\"},R:{\"2\":\"AD\"},S:{\"1\":\"BD\",\"2\":\"CD\"}},B:7,C:\"Scoped CSS\"};\n/data/regions/AU.js\u0012`module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.00541,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0.00541,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.01081,\"53\":0,\"54\":0.01081,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0.01081,\"67\":0,\"68\":0.00541,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.06487,\"79\":0,\"80\":0.00541,\"81\":0.00541,\"82\":0,\"83\":0.00541,\"84\":0,\"85\":0,\"86\":0,\"87\":0.02162,\"88\":0.00541,\"89\":0,\"90\":0,\"91\":0.00541,\"92\":0,\"93\":0.00541,\"94\":0.02703,\"95\":0,\"96\":0,\"97\":0.00541,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0.02703,\"103\":0.02162,\"104\":0.00541,\"105\":0.00541,\"106\":0.02162,\"107\":0.02703,\"108\":0.05406,\"109\":0.84334,\"110\":0.56222,\"111\":0.00541,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0.01622,\"26\":0.00541,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0.02162,\"35\":0.04865,\"36\":0,\"37\":0,\"38\":0.05947,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0.00541,\"45\":0,\"46\":0,\"47\":0.00541,\"48\":0,\"49\":0.01622,\"50\":0,\"51\":0,\"52\":0.00541,\"53\":0.00541,\"54\":0,\"55\":0,\"56\":0.00541,\"57\":0,\"58\":0,\"59\":0.01622,\"60\":0.04325,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0.00541,\"66\":0.01622,\"67\":0.02162,\"68\":0.00541,\"69\":0.17299,\"70\":0.00541,\"71\":0,\"72\":0.00541,\"73\":0.00541,\"74\":0.01081,\"75\":0.00541,\"76\":0.00541,\"77\":0.00541,\"78\":0.01081,\"79\":0.06487,\"80\":0.01622,\"81\":0.03244,\"83\":0.02162,\"84\":0.02162,\"85\":0.03784,\"86\":0.07568,\"87\":0.05406,\"88\":0.01622,\"89\":0.00541,\"90\":0.00541,\"91\":0.01081,\"92\":0.01622,\"93\":0.01081,\"94\":0.01081,\"95\":0.01622,\"96\":0.03244,\"97\":0.03784,\"98\":0.02703,\"99\":0.03244,\"100\":0.04325,\"101\":0.06487,\"102\":0.03784,\"103\":0.21083,\"104\":0.0919,\"105\":0.11353,\"106\":0.07028,\"107\":0.20002,\"108\":0.719,\"109\":8.2874,\"110\":5.35194,\"111\":0.00541,\"112\":0.00541,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0.02162,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.00541,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0.01081,\"90\":0,\"91\":0,\"92\":0,\"93\":0.03784,\"94\":0.29192,\"95\":0.12434,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0.00541,\"16\":0,\"17\":0,\"18\":0.00541,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0.00541,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00541,\"93\":0,\"94\":0,\"95\":0.00541,\"96\":0,\"97\":0,\"98\":0,\"99\":0.00541,\"100\":0.00541,\"101\":0,\"102\":0.00541,\"103\":0.00541,\"104\":0.01081,\"105\":0.00541,\"106\":0.00541,\"107\":0.04325,\"108\":0.15677,\"109\":1.47584,\"110\":2.02725},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0.00541,\"13\":0.02703,\"14\":0.12434,\"15\":0.02703,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0.00541,\"12.1\":0.04325,\"13.1\":0.16218,\"14.1\":0.3568,\"15.1\":0.05406,\"15.2-15.3\":0.04865,\"15.4\":0.11353,\"15.5\":0.22705,\"15.6\":1.31906,\"16.0\":0.10812,\"16.1\":0.36761,\"16.2\":1.19473,\"16.3\":0.70819,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0.02065,\"6.0-6.1\":0.02065,\"7.0-7.1\":0.01652,\"8.1-8.4\":0.02478,\"9.0-9.2\":0.02065,\"9.3\":0.23949,\"10.0-10.2\":0.00826,\"10.3\":0.30143,\"11.0-11.2\":0.05781,\"11.3-11.4\":0.11562,\"12.0-12.1\":0.0702,\"12.2-12.5\":1.2594,\"13.0-13.1\":0.0289,\"13.2\":0.01652,\"13.3\":0.09497,\"13.4-13.7\":0.1982,\"14.0-14.4\":0.55744,\"14.5-14.8\":1.26353,\"15.0-15.1\":0.28491,\"15.2-15.3\":0.38814,\"15.4\":0.47073,\"15.5\":0.90842,\"15.6\":3.91033,\"16.0\":3.33638,\"16.1\":10.52115,\"16.2\":10.29818,\"16.3\":4.63294,\"16.4\":0.01652},P:{\"4\":0.21018,\"20\":1.04039,\"5.0-5.4\":0.03153,\"6.2-6.4\":0,\"7.2-7.4\":0,\"8.2\":0,\"9.2\":0.01051,\"10.1\":0,\"11.1-11.2\":0.01051,\"12.0\":0.01051,\"13.0\":0.04204,\"14.0\":0.03153,\"15.0\":0.02102,\"16.0\":0.05254,\"17.0\":0.06305,\"18.0\":0.08407,\"19.0\":1.68143},I:{\"0\":0,\"3\":0,\"4\":0.0094,\"2.1\":0,\"2.2\":0.01645,\"2.3\":0.00705,\"4.1\":0.0094,\"4.2-4.3\":0.02115,\"4.4\":0,\"4.4.3-4.4.4\":0.06816},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0.03041,\"9\":0.03041,\"10\":0.01014,\"11\":0.09123,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.05972},H:{\"0\":0.15223},L:{\"0\":26.99079},R:{_:\"0\"},M:{\"0\":0.41805},Q:{\"13.1\":0.00459}};\n/data/regions/PR.js\u0011\u0001module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0.22324,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0.19897,\"44\":0.87839,\"45\":0.21353,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.00485,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0.00485,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0.02427,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.00971,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0.00971,\"103\":0,\"104\":0.03882,\"105\":0,\"106\":0,\"107\":0.00971,\"108\":0.02427,\"109\":0.50957,\"110\":0.35912,\"111\":0.00485,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0.19412,\"48\":2.35856,\"49\":0.54354,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0.00971,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0.00485,\"77\":0.00485,\"78\":0,\"79\":0.01456,\"80\":0.00485,\"81\":0,\"83\":0,\"84\":0.00485,\"85\":0,\"86\":0,\"87\":0.03882,\"88\":0,\"89\":0.00485,\"90\":0.01456,\"91\":0.01456,\"92\":0.00485,\"93\":0.00485,\"94\":0.00485,\"95\":0,\"96\":0.00485,\"97\":0.00485,\"98\":0.00485,\"99\":0.00485,\"100\":0.00971,\"101\":0.00485,\"102\":0.00485,\"103\":0.11162,\"104\":0.00971,\"105\":0.01941,\"106\":0.01941,\"107\":0.03882,\"108\":0.21839,\"109\":5.01315,\"110\":3.29033,\"111\":0.00971,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.03397,\"94\":0.36883,\"95\":0.11647,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0.06794,\"13\":0.09221,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0.00485,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00485,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0.00485,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0.00485,\"106\":0.02427,\"107\":0.03397,\"108\":0.06309,\"109\":1.15501,\"110\":1.58208},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0.06794,\"9\":0.32515,\"10\":0,\"11\":0,\"12\":0,\"13\":0.00971,\"14\":0.04853,\"15\":0.01456,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0.00971,\"13.1\":0.0825,\"14.1\":0.17956,\"15.1\":0.02427,\"15.2-15.3\":0.03397,\"15.4\":0.07765,\"15.5\":0.1553,\"15.6\":0.58721,\"16.0\":0.0728,\"16.1\":0.28633,\"16.2\":1.09193,\"16.3\":0.45133,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0,\"8.1-8.4\":0.01244,\"9.0-9.2\":0.17414,\"9.3\":0.04975,\"10.0-10.2\":0,\"10.3\":0.03732,\"11.0-11.2\":0.01244,\"11.3-11.4\":0.01658,\"12.0-12.1\":0.01244,\"12.2-12.5\":0.22804,\"13.0-13.1\":0,\"13.2\":0.00829,\"13.3\":0.02073,\"13.4-13.7\":0.04975,\"14.0-14.4\":0.31511,\"14.5-14.8\":0.879,\"15.0-15.1\":0.30267,\"15.2-15.3\":0.43121,\"15.4\":0.44365,\"15.5\":0.9951,\"15.6\":3.90575,\"16.0\":5.17449,\"16.1\":10.35728,\"16.2\":11.06629,\"16.3\":5.8296,\"16.4\":0.04146},P:{\"4\":0.23676,\"20\":1.00881,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0.04118,\"8.2\":0,\"9.2\":0,\"10.1\":0,\"11.1-11.2\":0.03088,\"12.0\":0,\"13.0\":0.04118,\"14.0\":0.02059,\"15.0\":0.01029,\"16.0\":0.06176,\"17.0\":0.04118,\"18.0\":0.11323,\"19.0\":1.25587},I:{\"0\":0,\"3\":0,\"4\":0.05497,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0.02749,\"4.4\":0,\"4.4.3-4.4.4\":0.2199},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0.13588,\"10\":0,\"11\":0.31545,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.01029},H:{\"0\":0.09746},L:{\"0\":31.91576},R:{_:\"0\"},M:{\"0\":0.23162},Q:{\"13.1\":0}};\n#/data/features/css-rebeccapurple.js\u0005module.exports={A:{A:{\"2\":\"J D E F A DC\",\"132\":\"B\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z FC GC\"},D:{\"1\":\"FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB\"},E:{\"1\":\"D E F A B C K L G LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J IC 0B JC\",\"16\":\"KC\"},F:{\"1\":\"2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 F B C G M N O x g y z QC RC SC TC rB BC UC sB\"},G:{\"1\":\"E ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC CC WC XC YC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H uC vC\",\"2\":\"uB I qC rC sC tC CC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:4,C:\"Rebeccapurple color\"};\n /data/features/xml-serializer.js\u0005module.exports={A:{A:{\"1\":\"A B\",\"260\":\"J D E F DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"132\":\"B\",\"260\":\"EC uB I w J D FC GC\",\"516\":\"E F A\"},D:{\"1\":\"8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"132\":\"0 1 2 3 4 5 6 7 I w J D E F A B C K L G M N O x g y z\"},E:{\"1\":\"E F A B C K L G LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"132\":\"I w J D IC 0B JC KC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"16\":\"F QC\",\"132\":\"B C G M N RC SC TC rB BC UC sB\"},G:{\"1\":\"E ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"132\":\"0B VC CC WC XC YC\"},H:{\"132\":\"pC\"},I:{\"1\":\"H uC vC\",\"132\":\"uB I qC rC sC tC CC\"},J:{\"132\":\"D A\"},K:{\"1\":\"h\",\"16\":\"A\",\"132\":\"B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:4,C:\"DOM Parsing and Serialization\"};\n/data/features/readonly-attr.js\u0005module.exports={A:{A:{\"1\":\"J D E F A B\",\"16\":\"DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"16\":\"EC uB FC GC\"},D:{\"1\":\"3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"16\":\"0 1 2 I w J D E F A B C K L G M N O x g y z\"},E:{\"1\":\"J D E F A B C K L G JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"16\":\"I w IC 0B\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"16\":\"F QC\",\"132\":\"B C RC SC TC rB BC UC sB\"},G:{\"1\":\"E YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"16\":\"0B VC CC WC XC\"},H:{\"1\":\"pC\"},I:{\"1\":\"uB I H sC tC CC uC vC\",\"16\":\"qC rC\"},J:{\"1\":\"D A\"},K:{\"1\":\"h\",\"132\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"257\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:1,C:\"readonly attribute of input and textarea elements\"};\n/data/regions/BG.js\u0011module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0.00434,\"49\":0,\"50\":0,\"51\":0.00434,\"52\":0.05646,\"53\":0,\"54\":0,\"55\":0,\"56\":0.00434,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0.02172,\"67\":0,\"68\":0.0304,\"69\":0,\"70\":0,\"71\":0,\"72\":0.00434,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.00869,\"79\":0,\"80\":0.01737,\"81\":0.00434,\"82\":0.00434,\"83\":0.00869,\"84\":0.00869,\"85\":0.00434,\"86\":0,\"87\":0,\"88\":0.00869,\"89\":0.00434,\"90\":0.00434,\"91\":0.00869,\"92\":0,\"93\":0.00434,\"94\":0,\"95\":0.00434,\"96\":0.00434,\"97\":0.00434,\"98\":0.00434,\"99\":0.00869,\"100\":0.00434,\"101\":0.00434,\"102\":0.07817,\"103\":0.01303,\"104\":0.00869,\"105\":0.00869,\"106\":0.01737,\"107\":0.02172,\"108\":0.0608,\"109\":1.43753,\"110\":0.87729,\"111\":0.00434,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0.00434,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0.00434,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0.05646,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0.00434,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0.00434,\"64\":0,\"65\":0,\"66\":0,\"67\":0.00434,\"68\":0,\"69\":0,\"70\":0.00434,\"71\":0.00434,\"72\":0,\"73\":0.00434,\"74\":0.00434,\"75\":0.00434,\"76\":0.00434,\"77\":0.00869,\"78\":0.00434,\"79\":0.0304,\"80\":0.00434,\"81\":0.02172,\"83\":0.00434,\"84\":0.00434,\"85\":0.00869,\"86\":0.00434,\"87\":0.01303,\"88\":0.00869,\"89\":0.00869,\"90\":0.00434,\"91\":0.00869,\"92\":0.01303,\"93\":0.0304,\"94\":0.00434,\"95\":0.01303,\"96\":0.00434,\"97\":0.01303,\"98\":0.00869,\"99\":0.00434,\"100\":0.01303,\"101\":0.00434,\"102\":0.01737,\"103\":0.03474,\"104\":0.01737,\"105\":0.0304,\"106\":0.03474,\"107\":0.0608,\"108\":0.3127,\"109\":7.89123,\"110\":4.02596,\"111\":0.00434,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0.00869,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0.00434,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.00434,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0.00434,\"74\":0.00434,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0.00869,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.0304,\"94\":0.3735,\"95\":0.25624,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0.00434,\"17\":0,\"18\":0.00869,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0.00434,\"104\":0,\"105\":0,\"106\":0,\"107\":0.00869,\"108\":0.02172,\"109\":0.57328,\"110\":0.73831},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.00434,\"14\":0.01303,\"15\":0,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0.00434,\"13.1\":0.01737,\"14.1\":0.02172,\"15.1\":0.00434,\"15.2-15.3\":0.00434,\"15.4\":0.00869,\"15.5\":0.00869,\"15.6\":0.06949,\"16.0\":0.01303,\"16.1\":0.03474,\"16.2\":0.08686,\"16.3\":0.08252,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0.00561,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0.01822,\"10.0-10.2\":0.0014,\"10.3\":0.04624,\"11.0-11.2\":0.01541,\"11.3-11.4\":0.0042,\"12.0-12.1\":0.00981,\"12.2-12.5\":0.21721,\"13.0-13.1\":0.00981,\"13.2\":0.0028,\"13.3\":0.01541,\"13.4-13.7\":0.05746,\"14.0-14.4\":0.15135,\"14.5-14.8\":0.39238,\"15.0-15.1\":0.07287,\"15.2-15.3\":0.1023,\"15.4\":0.13873,\"15.5\":0.29008,\"15.6\":0.95713,\"16.0\":1.655,\"16.1\":3.34924,\"16.2\":3.43192,\"16.3\":2.22115,\"16.4\":0.01401},P:{\"4\":0.08204,\"20\":0.85113,\"5.0-5.4\":0.01025,\"6.2-6.4\":0,\"7.2-7.4\":0,\"8.2\":0,\"9.2\":0,\"10.1\":0,\"11.1-11.2\":0.02051,\"12.0\":0.01025,\"13.0\":0.03076,\"14.0\":0.04102,\"15.0\":0.02051,\"16.0\":0.05127,\"17.0\":0.05127,\"18.0\":0.08204,\"19.0\":1.65098},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.01029,\"4.2-4.3\":0.02572,\"4.4\":0,\"4.4.3-4.4.4\":0.18005},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0.00434,\"9\":0,\"10\":0,\"11\":0.08686,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.02263},H:{\"0\":0.25172},L:{\"0\":63.3669},R:{_:\"0\"},M:{\"0\":0.17537},Q:{\"13.1\":0}};\n\"/data/features/devicepixelratio.js\u0005module.exports={A:{A:{\"1\":\"B\",\"2\":\"J D E F A DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB I w J D E F A B C K L G M N FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e UC sB\",\"2\":\"F B QC RC SC TC rB BC\"},G:{\"1\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"1\":\"pC\"},I:{\"1\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"1\":\"D A\"},K:{\"1\":\"C h sB\",\"2\":\"A B rB BC\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"B\",\"2\":\"A\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:5,C:\"Window.devicePixelRatio\"};\n//data/features/background-repeat-round-space.js\u0005module.exports={A:{A:{\"1\":\"A B\",\"2\":\"J D E DC\",\"132\":\"F\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB FC GC\"},D:{\"1\":\"9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 I w J D E F A B C K L G M N O x g y z\"},E:{\"1\":\"D E F A B C K L G LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J IC 0B JC KC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 B C x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e SC TC rB BC UC sB\",\"2\":\"F G M N O QC RC\"},G:{\"1\":\"E YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC CC WC XC\"},H:{\"1\":\"pC\"},I:{\"1\":\"H uC vC\",\"2\":\"uB I qC rC sC tC CC\"},J:{\"1\":\"A\",\"2\":\"D\"},K:{\"1\":\"B C h rB BC sB\",\"2\":\"A\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"2\":\"BD\"}},B:4,C:\"CSS background-repeat round and space\"};\n/data/features/hevc.js\u0005module.exports={A:{A:{\"2\":\"J D E F A DC\",\"132\":\"B\"},B:{\"132\":\"C K L G M N O\",\"1028\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s\",\"2052\":\"t u v f H yB zB HC\"},E:{\"1\":\"K L G 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A IC 0B JC KC LC MC 1B\",\"516\":\"B C rB sB\"},F:{\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c QC RC SC TC rB BC UC sB\",\"2052\":\"d e\"},G:{\"1\":\"eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I qC rC sC tC CC uC vC\",\"2052\":\"H\"},J:{\"2\":\"D A\"},K:{\"2\":\"A B C rB BC sB\",\"258\":\"h\"},L:{\"2052\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"2\":\"I\",\"258\":\"g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"2\":\"2B\"},R:{\"1\":\"AD\"},S:{\"2\":\"BD CD\"}},B:6,C:\"HEVC/H.265 video format\"};\n/data/regions/alt-eu.js\u000emodule.exports={C:{\"48\":0.00481,\"52\":0.06258,\"59\":0.01444,\"60\":0.00481,\"68\":0.01444,\"72\":0.00481,\"78\":0.04814,\"79\":0.00481,\"80\":0.00963,\"81\":0.00963,\"82\":0.00481,\"83\":0.00963,\"86\":0.00963,\"87\":0.01444,\"88\":0.00963,\"89\":0.00481,\"90\":0.00481,\"91\":0.02407,\"93\":0.00481,\"94\":0.01444,\"95\":0.00481,\"96\":0.00481,\"99\":0.00963,\"100\":0.00481,\"101\":0.00481,\"102\":0.16849,\"103\":0.17812,\"104\":0.01444,\"105\":0.02407,\"106\":0.01926,\"107\":0.02407,\"108\":0.13479,\"109\":2.39737,\"110\":1.59343,\"111\":0.00481,_:\"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 49 50 51 53 54 55 56 57 58 61 62 63 64 65 66 67 69 70 71 73 74 75 76 77 84 85 92 97 98 112 3.5 3.6\"},D:{\"38\":0.00963,\"40\":0.04333,\"43\":0.00481,\"47\":0.00963,\"48\":0.00481,\"49\":0.05295,\"51\":0.00481,\"52\":0.01926,\"56\":0.03851,\"60\":0.03851,\"63\":0.01444,\"64\":0.00481,\"65\":0.00481,\"66\":0.0674,\"67\":0.00481,\"68\":0.00963,\"69\":0.00963,\"70\":0.00963,\"71\":0.01444,\"72\":0.01444,\"73\":0.00481,\"74\":0.01926,\"75\":0.15405,\"76\":0.01926,\"77\":0.01444,\"78\":0.03851,\"79\":0.13479,\"80\":0.0337,\"81\":0.0337,\"83\":0.05295,\"84\":0.06258,\"85\":0.17812,\"86\":0.09147,\"87\":0.10109,\"88\":0.02407,\"89\":0.0337,\"90\":0.05777,\"91\":0.10591,\"92\":0.06258,\"93\":0.07702,\"94\":0.08184,\"95\":0.01926,\"96\":0.04333,\"97\":0.0337,\"98\":0.02888,\"99\":0.03851,\"100\":0.07702,\"101\":0.07221,\"102\":0.0674,\"103\":0.23107,\"104\":0.10109,\"105\":0.12516,\"106\":0.13479,\"107\":0.20219,\"108\":1.00613,\"109\":14.78861,\"110\":9.03106,\"111\":0.00963,_:\"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 39 41 42 44 45 46 50 53 54 55 57 58 59 61 62 112 113\"},F:{\"31\":0.01926,\"36\":0.00481,\"40\":0.01444,\"46\":0.01444,\"85\":0.01444,\"89\":0.00963,\"92\":0.00481,\"93\":0.16368,\"94\":1.50678,\"95\":0.81838,_:\"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 32 33 34 35 37 38 39 41 42 43 44 45 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 86 87 88 90 91 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1\",\"10.0-10.1\":0},B:{\"15\":0.00481,\"17\":0.00963,\"18\":0.01926,\"84\":0.00481,\"85\":0.00481,\"86\":0.00481,\"92\":0.00963,\"97\":0.00481,\"101\":0.00481,\"103\":0.01444,\"104\":0.00963,\"105\":0.00963,\"106\":0.01444,\"107\":0.05777,\"108\":0.13961,\"109\":2.45033,\"110\":3.14836,_:\"12 13 14 16 79 80 81 83 87 88 89 90 91 93 94 95 96 98 99 100 102\"},E:{\"4\":0,\"13\":0.01926,\"14\":0.10591,\"15\":0.02407,_:\"0 5 6 7 8 9 10 11 12 3.1 3.2 5.1 6.1 7.1 10.1\",\"9.1\":0.04814,\"11.1\":0.01444,\"12.1\":0.03851,\"13.1\":0.14923,\"14.1\":0.27921,\"15.1\":0.04814,\"15.2-15.3\":0.04333,\"15.4\":0.09628,\"15.5\":0.17812,\"15.6\":0.90503,\"16.0\":0.10591,\"16.1\":0.34661,\"16.2\":1.06871,\"16.3\":0.77505,\"16.4\":0.00481},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0.00349,\"6.0-6.1\":0,\"7.0-7.1\":0.0122,\"8.1-8.4\":0.00174,\"9.0-9.2\":0.01394,\"9.3\":0.08192,\"10.0-10.2\":0.00174,\"10.3\":0.07843,\"11.0-11.2\":0.01917,\"11.3-11.4\":0.03486,\"12.0-12.1\":0.01394,\"12.2-12.5\":0.37125,\"13.0-13.1\":0.00871,\"13.2\":0.00697,\"13.3\":0.02092,\"13.4-13.7\":0.08366,\"14.0-14.4\":0.19347,\"14.5-14.8\":0.47408,\"15.0-15.1\":0.10981,\"15.2-15.3\":0.16035,\"15.4\":0.17778,\"15.5\":0.38171,\"15.6\":1.4484,\"16.0\":1.81965,\"16.1\":4.27548,\"16.2\":4.2319,\"16.3\":2.40702,\"16.4\":0.0122},P:{\"4\":0.0844,\"20\":1.16053,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0.01055,\"8.2\":0,\"9.2\":0.01048,\"10.1\":0,\"11.1-11.2\":0.0211,\"12.0\":0.01048,\"13.0\":0.0211,\"14.0\":0.0211,\"15.0\":0.01055,\"16.0\":0.0422,\"17.0\":0.05275,\"18.0\":0.07385,\"19.0\":1.87795},I:{\"0\":0,\"3\":0,\"4\":0.01443,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.00361,\"4.2-4.3\":0.01443,\"4.4\":0,\"4.4.3-4.4.4\":0.05051},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"8\":0.0152,\"9\":0.02027,\"10\":0.00507,\"11\":0.15202,_:\"6 7 5.5\"},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.11928},H:{\"0\":0.52044},L:{\"0\":31.68195},R:{_:\"0\"},M:{\"0\":0.43044},Q:{\"13.1\":0}};\n)/data/features/intersectionobserver-v2.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"1\":\"mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h\"},E:{\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB QC RC SC TC rB BC UC sB\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I xC yC zC 0C 1C 1B\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"2\":\"BD CD\"}},B:7,C:\"IntersectionObserver V2\"};\n/LICENSEHAttribution 4.0 International\n\n=======================================================================\n\nCreative Commons Corporation (\"Creative Commons\") is not a law firm and\ndoes not provide legal services or legal advice. Distribution of\nCreative Commons public licenses does not create a lawyer-client or\nother relationship. Creative Commons makes its licenses and related\ninformation available on an \"as-is\" basis. Creative Commons gives no\nwarranties regarding its licenses, any material licensed under their\nterms and conditions, or any related information. Creative Commons\ndisclaims all liability for damages resulting from their use to the\nfullest extent possible.\n\nUsing Creative Commons Public Licenses\n\nCreative Commons public licenses provide a standard set of terms and\nconditions that creators and other rights holders may use to share\noriginal works of authorship and other material subject to copyright\nand certain other rights specified in the public license below. The\nfollowing considerations are for informational purposes only, are not\nexhaustive, and do not form part of our licenses.\n\n     Considerations for licensors: Our public licenses are\n     intended for use by those authorized to give the public\n     permission to use material in ways otherwise restricted by\n     copyright and certain other rights. Our licenses are\n     irrevocable. Licensors should read and understand the terms\n     and conditions of the license they choose before applying it.\n     Licensors should also secure all rights necessary before\n     applying our licenses so that the public can reuse the\n     material as expected. Licensors should clearly mark any\n     material not subject to the license. This includes other CC-\n     licensed material, or material used under an exception or\n     limitation to copyright. More considerations for licensors:\n\twiki.creativecommons.org/Considerations_for_licensors\n\n     Considerations for the public: By using one of our public\n     licenses, a licensor grants the public permission to use the\n     licensed material under specified terms and conditions. If\n     the licensor's permission is not necessary for any reason--for\n     example, because of any applicable exception or limitation to\n     copyright--then that use is not regulated by the license. Our\n     licenses grant only permissions under copyright and certain\n     other rights that a licensor has authority to grant. Use of\n     the licensed material may still be restricted for other\n     reasons, including because others have copyright or other\n     rights in the material. A licensor may make special requests,\n     such as asking that all changes be marked or described.\n     Although not required by our licenses, you are encouraged to\n     respect those requests where reasonable. More_considerations\n     for the public: \n\twiki.creativecommons.org/Considerations_for_licensees\n\n=======================================================================\n\nCreative Commons Attribution 4.0 International Public License\n\nBy exercising the Licensed Rights (defined below), You accept and agree\nto be bound by the terms and conditions of this Creative Commons\nAttribution 4.0 International Public License (\"Public License\"). To the\nextent this Public License may be interpreted as a contract, You are\ngranted the Licensed Rights in consideration of Your acceptance of\nthese terms and conditions, and the Licensor grants You such rights in\nconsideration of benefits the Licensor receives from making the\nLicensed Material available under these terms and conditions.\n\n\nSection 1 -- Definitions.\n\n  a. Adapted Material means material subject to Copyright and Similar\n     Rights that is derived from or based upon the Licensed Material\n     and in which the Licensed Material is translated, altered,\n     arranged, transformed, or otherwise modified in a manner requiring\n     permission under the Copyright and Similar Rights held by the\n     Licensor. For purposes of this Public License, where the Licensed\n     Material is a musical work, performance, or sound recording,\n     Adapted Material is always produced where the Licensed Material is\n     synched in timed relation with a moving image.\n\n  b. Adapter's License means the license You apply to Your Copyright\n     and Similar Rights in Your contributions to Adapted Material in\n     accordance with the terms and conditions of this Public License.\n\n  c. Copyright and Similar Rights means copyright and/or similar rights\n     closely related to copyright including, without limitation,\n     performance, broadcast, sound recording, and Sui Generis Database\n     Rights, without regard to how the rights are labeled or\n     categorized. For purposes of this Public License, the rights\n     specified in Section 2(b)(1)-(2) are not Copyright and Similar\n     Rights.\n\n  d. Effective Technological Measures means those measures that, in the\n     absence of proper authority, may not be circumvented under laws\n     fulfilling obligations under Article 11 of the WIPO Copyright\n     Treaty adopted on December 20, 1996, and/or similar international\n     agreements.\n\n  e. Exceptions and Limitations means fair use, fair dealing, and/or\n     any other exception or limitation to Copyright and Similar Rights\n     that applies to Your use of the Licensed Material.\n\n  f. Licensed Material means the artistic or literary work, database,\n     or other material to which the Licensor applied this Public\n     License.\n\n  g. Licensed Rights means the rights granted to You subject to the\n     terms and conditions of this Public License, which are limited to\n     all Copyright and Similar Rights that apply to Your use of the\n     Licensed Material and that the Licensor has authority to license.\n\n  h. Licensor means the individual(s) or entity(ies) granting rights\n     under this Public License.\n\n  i. Share means to provide material to the public by any means or\n     process that requires permission under the Licensed Rights, such\n     as reproduction, public display, public performance, distribution,\n     dissemination, communication, or importation, and to make material\n     available to the public including in ways that members of the\n     public may access the material from a place and at a time\n     individually chosen by them.\n\n  j. Sui Generis Database Rights means rights other than copyright\n     resulting from Directive 96/9/EC of the European Parliament and of\n     the Council of 11 March 1996 on the legal protection of databases,\n     as amended and/or succeeded, as well as other essentially\n     equivalent rights anywhere in the world.\n\n  k. You means the individual or entity exercising the Licensed Rights\n     under this Public License. Your has a corresponding meaning.\n\n\nSection 2 -- Scope.\n\n  a. License grant.\n\n       1. Subject to the terms and conditions of this Public License,\n          the Licensor hereby grants You a worldwide, royalty-free,\n          non-sublicensable, non-exclusive, irrevocable license to\n          exercise the Licensed Rights in the Licensed Material to:\n\n            a. reproduce and Share the Licensed Material, in whole or\n               in part; and\n\n            b. produce, reproduce, and Share Adapted Material.\n\n       2. Exceptions and Limitations. For the avoidance of doubt, where\n          Exceptions and Limitations apply to Your use, this Public\n          License does not apply, and You do not need to comply with\n          its terms and conditions.\n\n       3. Term. The term of this Public License is specified in Section\n          6(a).\n\n       4. Media and formats; technical modifications allowed. The\n          Licensor authorizes You to exercise the Licensed Rights in\n          all media and formats whether now known or hereafter created,\n          and to make technical modifications necessary to do so. The\n          Licensor waives and/or agrees not to assert any right or\n          authority to forbid You from making technical modifications\n          necessary to exercise the Licensed Rights, including\n          technical modifications necessary to circumvent Effective\n          Technological Measures. For purposes of this Public License,\n          simply making modifications authorized by this Section 2(a)\n          (4) never produces Adapted Material.\n\n       5. Downstream recipients.\n\n            a. Offer from the Licensor -- Licensed Material. Every\n               recipient of the Licensed Material automatically\n               receives an offer from the Licensor to exercise the\n               Licensed Rights under the terms and conditions of this\n               Public License.\n\n            b. No downstream restrictions. You may not offer or impose\n               any additional or different terms or conditions on, or\n               apply any Effective Technological Measures to, the\n               Licensed Material if doing so restricts exercise of the\n               Licensed Rights by any recipient of the Licensed\n               Material.\n\n       6. No endorsement. Nothing in this Public License constitutes or\n          may be construed as permission to assert or imply that You\n          are, or that Your use of the Licensed Material is, connected\n          with, or sponsored, endorsed, or granted official status by,\n          the Licensor or others designated to receive attribution as\n          provided in Section 3(a)(1)(A)(i).\n\n  b. Other rights.\n\n       1. Moral rights, such as the right of integrity, are not\n          licensed under this Public License, nor are publicity,\n          privacy, and/or other similar personality rights; however, to\n          the extent possible, the Licensor waives and/or agrees not to\n          assert any such rights held by the Licensor to the limited\n          extent necessary to allow You to exercise the Licensed\n          Rights, but not otherwise.\n\n       2. Patent and trademark rights are not licensed under this\n          Public License.\n\n       3. To the extent possible, the Licensor waives any right to\n          collect royalties from You for the exercise of the Licensed\n          Rights, whether directly or through a collecting society\n          under any voluntary or waivable statutory or compulsory\n          licensing scheme. In all other cases the Licensor expressly\n          reserves any right to collect such royalties.\n\n\nSection 3 -- License Conditions.\n\nYour exercise of the Licensed Rights is expressly made subject to the\nfollowing conditions.\n\n  a. Attribution.\n\n       1. If You Share the Licensed Material (including in modified\n          form), You must:\n\n            a. retain the following if it is supplied by the Licensor\n               with the Licensed Material:\n\n                 i. identification of the creator(s) of the Licensed\n                    Material and any others designated to receive\n                    attribution, in any reasonable manner requested by\n                    the Licensor (including by pseudonym if\n                    designated);\n\n                ii. a copyright notice;\n\n               iii. a notice that refers to this Public License;\n\n                iv. a notice that refers to the disclaimer of\n                    warranties;\n\n                 v. a URI or hyperlink to the Licensed Material to the\n                    extent reasonably practicable;\n\n            b. indicate if You modified the Licensed Material and\n               retain an indication of any previous modifications; and\n\n            c. indicate the Licensed Material is licensed under this\n               Public License, and include the text of, or the URI or\n               hyperlink to, this Public License.\n\n       2. You may satisfy the conditions in Section 3(a)(1) in any\n          reasonable manner based on the medium, means, and context in\n          which You Share the Licensed Material. For example, it may be\n          reasonable to satisfy the conditions by providing a URI or\n          hyperlink to a resource that includes the required\n          information.\n\n       3. If requested by the Licensor, You must remove any of the\n          information required by Section 3(a)(1)(A) to the extent\n          reasonably practicable.\n\n       4. If You Share Adapted Material You produce, the Adapter's\n          License You apply must not prevent recipients of the Adapted\n          Material from complying with this Public License.\n\n\nSection 4 -- Sui Generis Database Rights.\n\nWhere the Licensed Rights include Sui Generis Database Rights that\napply to Your use of the Licensed Material:\n\n  a. for the avoidance of doubt, Section 2(a)(1) grants You the right\n     to extract, reuse, reproduce, and Share all or a substantial\n     portion of the contents of the database;\n\n  b. if You include all or a substantial portion of the database\n     contents in a database in which You have Sui Generis Database\n     Rights, then the database in which You have Sui Generis Database\n     Rights (but not its individual contents) is Adapted Material; and\n\n  c. You must comply with the conditions in Section 3(a) if You Share\n     all or a substantial portion of the contents of the database.\n\nFor the avoidance of doubt, this Section 4 supplements and does not\nreplace Your obligations under this Public License where the Licensed\nRights include other Copyright and Similar Rights.\n\n\nSection 5 -- Disclaimer of Warranties and Limitation of Liability.\n\n  a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE\n     EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS\n     AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF\n     ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS,\n     IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION,\n     WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR\n     PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS,\n     ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT\n     KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT\n     ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU.\n\n  b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE\n     TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION,\n     NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT,\n     INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES,\n     COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR\n     USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN\n     ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR\n     DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR\n     IN PART, THIS LIMITATION MAY NOT APPLY TO YOU.\n\n  c. The disclaimer of warranties and limitation of liability provided\n     above shall be interpreted in a manner that, to the extent\n     possible, most closely approximates an absolute disclaimer and\n     waiver of all liability.\n\n\nSection 6 -- Term and Termination.\n\n  a. This Public License applies for the term of the Copyright and\n     Similar Rights licensed here. However, if You fail to comply with\n     this Public License, then Your rights under this Public License\n     terminate automatically.\n\n  b. Where Your right to use the Licensed Material has terminated under\n     Section 6(a), it reinstates:\n\n       1. automatically as of the date the violation is cured, provided\n          it is cured within 30 days of Your discovery of the\n          violation; or\n\n       2. upon express reinstatement by the Licensor.\n\n     For the avoidance of doubt, this Section 6(b) does not affect any\n     right the Licensor may have to seek remedies for Your violations\n     of this Public License.\n\n  c. For the avoidance of doubt, the Licensor may also offer the\n     Licensed Material under separate terms or conditions or stop\n     distributing the Licensed Material at any time; however, doing so\n     will not terminate this Public License.\n\n  d. Sections 1, 5, 6, 7, and 8 survive termination of this Public\n     License.\n\n\nSection 7 -- Other Terms and Conditions.\n\n  a. The Licensor shall not be bound by any additional or different\n     terms or conditions communicated by You unless expressly agreed.\n\n  b. Any arrangements, understandings, or agreements regarding the\n     Licensed Material not stated herein are separate from and\n     independent of the terms and conditions of this Public License.\n\n\nSection 8 -- Interpretation.\n\n  a. For the avoidance of doubt, this Public License does not, and\n     shall not be interpreted to, reduce, limit, restrict, or impose\n     conditions on any use of the Licensed Material that could lawfully\n     be made without permission under this Public License.\n\n  b. To the extent possible, if any provision of this Public License is\n     deemed unenforceable, it shall be automatically reformed to the\n     minimum extent necessary to make it enforceable. If the provision\n     cannot be reformed, it shall be severed from this Public License\n     without affecting the enforceability of the remaining terms and\n     conditions.\n\n  c. No term or condition of this Public License will be waived and no\n     failure to comply consented to unless expressly agreed to by the\n     Licensor.\n\n  d. Nothing in this Public License constitutes or may be interpreted\n     as a limitation upon, or waiver of, any privileges and immunities\n     that apply to the Licensor or You, including from the legal\n     processes of any jurisdiction or authority.\n\n\n=======================================================================\n\nCreative Commons is not a party to its public\nlicenses. Notwithstanding, Creative Commons may elect to apply one of\nits public licenses to material it publishes and in those instances\nwill be considered the “Licensor.” The text of the Creative Commons\npublic licenses is dedicated to the public domain under the CC0 Public\nDomain Dedication. Except for the limited purpose of indicating that\nmaterial is shared under a Creative Commons public license or as\notherwise permitted by the Creative Commons policies published at\ncreativecommons.org/policies, Creative Commons does not authorize the\nuse of the trademark \"Creative Commons\" or any other trademark or logo\nof Creative Commons without its prior written consent including,\nwithout limitation, in connection with any unauthorized modifications\nto any of its public licenses or any other arrangements,\nunderstandings, or agreements concerning use of licensed material. For\nthe avoidance of doubt, this paragraph does not form part of the\npublic licenses.\n\nCreative Commons may be contacted at creativecommons.org.\n(/data/features/document-currentscript.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB FC GC\"},D:{\"1\":\"6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 I w J D E F A B C K L G M N O x g y z\"},E:{\"1\":\"E F A B C K L G MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D IC 0B JC KC LC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F B C G QC RC SC TC rB BC UC sB\"},G:{\"1\":\"E ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC CC WC XC YC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H uC vC\",\"2\":\"uB I qC rC sC tC CC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:1,C:\"document.currentScript\"};\n!/data/features/media-fragments.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"2\":\"C K L G M N O\",\"132\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB FC GC\",\"132\":\"BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\"},D:{\"2\":\"I w J D E F A B C K L G M N\",\"132\":\"0 1 2 3 4 5 6 7 8 9 O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"2\":\"I w IC 0B JC\",\"132\":\"J D E F A B C K L G KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"2\":\"F B C QC RC SC TC rB BC UC sB\",\"132\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\"},G:{\"2\":\"0B VC CC WC XC YC\",\"132\":\"E ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I qC rC sC tC CC\",\"132\":\"H uC vC\"},J:{\"2\":\"D A\"},K:{\"2\":\"A B C rB BC sB\",\"132\":\"h\"},L:{\"132\":\"H\"},M:{\"132\":\"f\"},N:{\"132\":\"A B\"},O:{\"132\":\"wC\"},P:{\"2\":\"I xC\",\"132\":\"g yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"132\":\"2B\"},R:{\"132\":\"AD\"},S:{\"132\":\"BD CD\"}},B:2,C:\"Media Fragments\"};\n/data/features/tabindex-attr.js\u0005module.exports={A:{A:{\"1\":\"D E F A B\",\"16\":\"J DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"16\":\"EC uB FC GC\",\"129\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"16\":\"I w J D E F A B C K L\"},E:{\"16\":\"I w IC 0B\",\"257\":\"J D E F A B C K L G JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\",\"16\":\"F\"},G:{\"769\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"16\":\"pC\"},I:{\"16\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"16\":\"D A\"},K:{\"1\":\"h\",\"16\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"16\":\"A B\"},O:{\"1\":\"wC\"},P:{\"16\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"129\":\"BD CD\"}},B:1,C:\"tabindex global attribute\"};\n/data/regions/KZ.js\u00119module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.102,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0.0255,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0.00364,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0.00364,\"99\":0.00364,\"100\":0,\"101\":0.00729,\"102\":0.01093,\"103\":0,\"104\":0.00364,\"105\":0.00364,\"106\":0.00364,\"107\":0.00729,\"108\":0.01822,\"109\":0.27687,\"110\":0.17851,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0.00729,\"50\":0,\"51\":0.00729,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0.00364,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0.00364,\"73\":0,\"74\":0.00364,\"75\":0,\"76\":0,\"77\":0.00364,\"78\":0.00364,\"79\":0.01093,\"80\":0.00729,\"81\":0.00729,\"83\":0.00364,\"84\":0.00729,\"85\":0.01457,\"86\":0.00729,\"87\":0.01457,\"88\":0.00364,\"89\":0.00364,\"90\":0.00364,\"91\":0.01093,\"92\":0.01093,\"93\":0.00364,\"94\":0.00729,\"95\":0.00729,\"96\":0.01822,\"97\":0.01822,\"98\":0.02186,\"99\":0.00729,\"100\":0.03643,\"101\":0.01093,\"102\":0.0255,\"103\":0.0255,\"104\":0.01457,\"105\":0.03279,\"106\":0.05829,\"107\":0.0765,\"108\":0.26958,\"109\":5.24956,\"110\":2.38252,\"111\":0.00364,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0.00729,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0.00364,\"85\":0.0255,\"86\":0.00364,\"87\":0.00364,\"88\":0.00364,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.0255,\"94\":0.38252,\"95\":0.35337,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0.17486,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0.00729,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0.00364,\"89\":0.00364,\"90\":0,\"91\":0,\"92\":0.00364,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0.00364,\"105\":0,\"106\":0.00364,\"107\":0.00729,\"108\":0.02186,\"109\":0.32058,\"110\":0.42987},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0.01457,\"15\":0,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0.0255,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0.00364,\"13.1\":0.01093,\"14.1\":0.02914,\"15.1\":0.01457,\"15.2-15.3\":0.00729,\"15.4\":0.02186,\"15.5\":0.0255,\"15.6\":0.09472,\"16.0\":0.01457,\"16.1\":0.07286,\"16.2\":0.11293,\"16.3\":0.08743,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0.0028,\"8.1-8.4\":0.00561,\"9.0-9.2\":0,\"9.3\":0.01963,\"10.0-10.2\":0.00841,\"10.3\":0.02805,\"11.0-11.2\":0.03085,\"11.3-11.4\":0.0028,\"12.0-12.1\":0.01683,\"12.2-12.5\":0.49083,\"13.0-13.1\":0.01683,\"13.2\":0.01402,\"13.3\":0.05329,\"13.4-13.7\":0.13463,\"14.0-14.4\":0.58619,\"14.5-14.8\":0.948,\"15.0-15.1\":0.28608,\"15.2-15.3\":0.43754,\"15.4\":0.70679,\"15.5\":1.35749,\"15.6\":2.47377,\"16.0\":5.71043,\"16.1\":5.35703,\"16.2\":4.8045,\"16.3\":3.0263,\"16.4\":0.01122},P:{\"4\":0.12154,\"20\":0.58743,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0.31397,\"8.2\":0,\"9.2\":0.02026,\"10.1\":0,\"11.1-11.2\":0.06077,\"12.0\":0.02026,\"13.0\":0.05064,\"14.0\":0.05064,\"15.0\":0.04051,\"16.0\":0.11141,\"17.0\":0.08102,\"18.0\":0.13167,\"19.0\":1.39768},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0.00273,\"4.4\":0,\"4.4.3-4.4.4\":0.02184},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.04007,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.31149},H:{\"0\":0.27083},L:{\"0\":53.66403},R:{_:\"0\"},M:{\"0\":0.06357},Q:{\"13.1\":0}};\n/data/regions/AF.js\u0012-module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0.00212,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0.00212,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0.00212,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0.00212,\"69\":0,\"70\":0,\"71\":0,\"72\":0.00212,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0.00212,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0.00212,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0.00212,\"100\":0,\"101\":0,\"102\":0.00424,\"103\":0.00424,\"104\":0.00212,\"105\":0.00212,\"106\":0.00212,\"107\":0.00212,\"108\":0.01485,\"109\":0.12938,\"110\":0.0806,\"111\":0.00212,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0.00212,\"35\":0,\"36\":0,\"37\":0,\"38\":0.00212,\"39\":0.00212,\"40\":0,\"41\":0,\"42\":0,\"43\":0.00212,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0.00212,\"49\":0.00212,\"50\":0,\"51\":0,\"52\":0.00212,\"53\":0,\"54\":0.00212,\"55\":0.00212,\"56\":0,\"57\":0,\"58\":0.00212,\"59\":0,\"60\":0,\"61\":0,\"62\":0.00636,\"63\":0.00212,\"64\":0.00212,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0.00848,\"70\":0.00212,\"71\":0.00848,\"72\":0.00424,\"73\":0.00424,\"74\":0.00212,\"75\":0.00212,\"76\":0.00212,\"77\":0.00212,\"78\":0.00848,\"79\":0.00848,\"80\":0.00848,\"81\":0.00636,\"83\":0.00212,\"84\":0.00424,\"85\":0.00212,\"86\":0.01485,\"87\":0.01485,\"88\":0.00212,\"89\":0.00424,\"90\":0.00212,\"91\":0.00636,\"92\":0.00848,\"93\":0,\"94\":0.00424,\"95\":0.00424,\"96\":0.00636,\"97\":0.00424,\"98\":0.00424,\"99\":0.00848,\"100\":0.00636,\"101\":0.00212,\"102\":0.00636,\"103\":0.01485,\"104\":0.00848,\"105\":0.00848,\"106\":0.01273,\"107\":0.02333,\"108\":0.07848,\"109\":1.46985,\"110\":0.67872,\"111\":0.00424,\"112\":0.00212,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0.01061,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0.00212,\"60\":0.00212,\"62\":0,\"63\":0.00212,\"64\":0.00212,\"65\":0,\"66\":0.00212,\"67\":0.02121,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0.00212,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0.00424,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0.00212,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00212,\"93\":0,\"94\":0.0509,\"95\":0.12514,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0.00212},B:{\"12\":0.01273,\"13\":0.00424,\"14\":0.00848,\"15\":0.00212,\"16\":0.00848,\"17\":0.00212,\"18\":0.02121,\"79\":0,\"80\":0,\"81\":0.00212,\"83\":0,\"84\":0.00424,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0.00636,\"90\":0.00848,\"91\":0,\"92\":0.02545,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0.00424,\"101\":0,\"102\":0.00212,\"103\":0.00212,\"104\":0,\"105\":0.00212,\"106\":0.00212,\"107\":0.00424,\"108\":0.01485,\"109\":0.11878,\"110\":0.16332},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0.00424,\"15\":0,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0.00636,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0.00212,\"13.1\":0.00424,\"14.1\":0.00212,\"15.1\":0.01909,\"15.2-15.3\":0.00848,\"15.4\":0.01909,\"15.5\":0.03182,\"15.6\":0.08484,\"16.0\":0.01061,\"16.1\":0.05727,\"16.2\":0.12302,\"16.3\":0.15483,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0.0136,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0.02947,\"10.0-10.2\":0,\"10.3\":0.01813,\"11.0-11.2\":0,\"11.3-11.4\":0.00453,\"12.0-12.1\":0.02267,\"12.2-12.5\":0.71396,\"13.0-13.1\":0.02493,\"13.2\":0.02493,\"13.3\":0.068,\"13.4-13.7\":0.10199,\"14.0-14.4\":0.37171,\"14.5-14.8\":0.42611,\"15.0-15.1\":0.36038,\"15.2-15.3\":0.52584,\"15.4\":0.56437,\"15.5\":0.93155,\"15.6\":1.56618,\"16.0\":2.45013,\"16.1\":3.68993,\"16.2\":4.06391,\"16.3\":4.23616,\"16.4\":0.02493},P:{\"4\":0.42533,\"20\":0.19241,\"5.0-5.4\":0.16203,\"6.2-6.4\":0.12152,\"7.2-7.4\":0.33419,\"8.2\":0.01013,\"9.2\":0.21266,\"10.1\":0.01013,\"11.1-11.2\":0.13165,\"12.0\":0.10127,\"13.0\":0.08101,\"14.0\":0.09114,\"15.0\":0.04051,\"16.0\":0.20254,\"17.0\":0.13165,\"18.0\":0.18228,\"19.0\":1.01268},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.00375,\"4.2-4.3\":0.00625,\"4.4\":0,\"4.4.3-4.4.4\":0.21635},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0.00424,\"10\":0,\"11\":0.09545,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0.00788,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":1.33943},H:{\"0\":0.7161},L:{\"0\":68.55879},R:{_:\"0\"},M:{\"0\":0.06303},Q:{\"13.1\":0}};\n/data/regions/MU.js\u0011@module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0.00327,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.00653,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.00327,\"79\":0,\"80\":0,\"81\":0,\"82\":0.00327,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.02614,\"93\":0,\"94\":0.00327,\"95\":0,\"96\":0,\"97\":0,\"98\":0.00327,\"99\":0,\"100\":0,\"101\":0,\"102\":0.01307,\"103\":0,\"104\":0.00327,\"105\":0,\"106\":0,\"107\":0.00653,\"108\":0.06207,\"109\":0.3365,\"110\":0.23522,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0.00653,\"35\":0,\"36\":0,\"37\":0,\"38\":0.00653,\"39\":0,\"40\":0.00327,\"41\":0,\"42\":0,\"43\":0.00327,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0.00327,\"50\":0.00327,\"51\":0,\"52\":0,\"53\":0.00327,\"54\":0,\"55\":0.00327,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0.00327,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.00327,\"79\":0.05881,\"80\":0.00653,\"81\":0.0392,\"83\":0.0098,\"84\":0,\"85\":0,\"86\":0.00327,\"87\":0.01634,\"88\":0.0098,\"89\":0,\"90\":0,\"91\":0.0196,\"92\":0.04247,\"93\":0.00327,\"94\":0.00327,\"95\":0.00327,\"96\":0.00327,\"97\":0.02287,\"98\":0.00327,\"99\":0.02287,\"100\":0.0392,\"101\":0.0098,\"102\":0.01307,\"103\":0.0294,\"104\":0.01307,\"105\":0.0098,\"106\":0.0196,\"107\":0.02287,\"108\":0.17642,\"109\":4.04455,\"110\":2.6136,\"111\":0.00327,\"112\":0.00327,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0.01634,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0.00327,\"64\":0,\"65\":0,\"66\":0.01634,\"67\":0.05227,\"68\":0,\"69\":0,\"70\":0,\"71\":0.00327,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0.00327,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.0098,\"94\":0.12741,\"95\":0.10128,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0.00327,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00653,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0.00327,\"104\":0,\"105\":0.00327,\"106\":0.00327,\"107\":0.02287,\"108\":0.01307,\"109\":0.42471,\"110\":0.6142},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0.00327,\"13\":0.00327,\"14\":0.01634,\"15\":0.00327,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0.00653,\"13.1\":0.01634,\"14.1\":0.04574,\"15.1\":0.00327,\"15.2-15.3\":0.01307,\"15.4\":0.01307,\"15.5\":0.03267,\"15.6\":0.11108,\"16.0\":0.01634,\"16.1\":0.07514,\"16.2\":0.12415,\"16.3\":0.14048,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0.00239,\"4.2-4.3\":0,\"5.0-5.1\":0.01077,\"6.0-6.1\":0,\"7.0-7.1\":0.03111,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0.08376,\"10.0-10.2\":0.00359,\"10.3\":0.06103,\"11.0-11.2\":0.00359,\"11.3-11.4\":0.0012,\"12.0-12.1\":0.01077,\"12.2-12.5\":0.40325,\"13.0-13.1\":0.0012,\"13.2\":0.00359,\"13.3\":0.00957,\"13.4-13.7\":0.0359,\"14.0-14.4\":0.09453,\"14.5-14.8\":0.33026,\"15.0-15.1\":0.06462,\"15.2-15.3\":0.17829,\"15.4\":0.11966,\"15.5\":0.21658,\"15.6\":0.86513,\"16.0\":1.1906,\"16.1\":2.43145,\"16.2\":2.71145,\"16.3\":2.29265,\"16.4\":0.01316},P:{\"4\":0.23468,\"20\":1.96926,\"5.0-5.4\":0.0102,\"6.2-6.4\":0,\"7.2-7.4\":0.21427,\"8.2\":0,\"9.2\":0.0102,\"10.1\":0.0102,\"11.1-11.2\":0.06122,\"12.0\":0.03061,\"13.0\":0.06122,\"14.0\":0.06122,\"15.0\":0.02041,\"16.0\":0.2959,\"17.0\":0.12244,\"18.0\":0.14285,\"19.0\":3.36712},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.00359,\"4.2-4.3\":0,\"4.4\":0,\"4.4.3-4.4.4\":0.07889},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.01307,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.53864},H:{\"0\":0.55457},L:{\"0\":67.88912},R:{_:\"0\"},M:{\"0\":0.39051},Q:{\"13.1\":0}};\n/data/regions/MD.js\rmodule.exports={C:{\"40\":0.00804,\"52\":0.04019,\"55\":0.00402,\"57\":0.00402,\"60\":0.00402,\"68\":0.00804,\"78\":0.00804,\"87\":0.22908,\"89\":0.00804,\"91\":0.02411,\"96\":0.00804,\"98\":0.00402,\"99\":0.00402,\"101\":0.01206,\"102\":0.20899,\"103\":0.00804,\"104\":0.01608,\"105\":0.0201,\"106\":0.01608,\"107\":0.03215,\"108\":0.04823,\"109\":1.12934,\"110\":0.61089,_:\"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 41 42 43 44 45 46 47 48 49 50 51 53 54 56 58 59 61 62 63 64 65 66 67 69 70 71 72 73 74 75 76 77 79 80 81 82 83 84 85 86 88 90 92 93 94 95 97 100 111 112 3.5\",\"3.6\":0.04823},D:{\"33\":0.0201,\"44\":0.00804,\"45\":0.00402,\"47\":0.00402,\"49\":0.08842,\"51\":0.01608,\"53\":0.00402,\"56\":0.02813,\"58\":0.00402,\"59\":0.00804,\"63\":0.00804,\"64\":0.00402,\"67\":0.01206,\"70\":0.00402,\"71\":0.00804,\"74\":0.00402,\"75\":0.01206,\"77\":0.00402,\"78\":0.01206,\"79\":0.03215,\"80\":0.04823,\"81\":0.00402,\"83\":0.01206,\"84\":0.01608,\"85\":0.05627,\"86\":0.01608,\"87\":0.03617,\"88\":0.01206,\"89\":0.00804,\"90\":0.01206,\"91\":0.01608,\"92\":0.12057,\"93\":0.00804,\"94\":0.00402,\"95\":0.01206,\"96\":0.0643,\"97\":0.0643,\"98\":0.0201,\"99\":0.04019,\"100\":0.05225,\"101\":0.04823,\"102\":0.11655,\"103\":0.0844,\"104\":0.04421,\"105\":0.0844,\"106\":0.18889,\"107\":0.12459,\"108\":0.66314,\"109\":17.55097,\"110\":8.79357,\"111\":0.00804,\"112\":0.01608,_:\"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 34 35 36 37 38 39 40 41 42 43 46 48 50 52 54 55 57 60 61 62 65 66 68 69 72 73 76 113\"},F:{\"28\":0.00402,\"46\":0.00804,\"63\":0.03617,\"70\":0.01206,\"74\":0.01206,\"79\":0.01608,\"85\":0.04421,\"87\":0.01608,\"90\":0.00402,\"93\":0.07234,\"94\":1.2901,\"95\":1.10924,_:\"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 47 48 49 50 51 52 53 54 55 56 57 58 60 62 64 65 66 67 68 69 71 72 73 75 76 77 78 80 81 82 83 84 86 88 89 91 92 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1\",\"10.0-10.1\":0},B:{\"18\":0.00402,\"92\":0.00804,\"106\":0.01206,\"107\":0.01206,\"108\":0.04421,\"109\":0.64304,\"110\":1.02886,_:\"12 13 14 15 16 17 79 80 81 83 84 85 86 87 88 89 90 91 93 94 95 96 97 98 99 100 101 102 103 104 105\"},E:{\"4\":0,\"14\":0.03215,\"15\":0.00804,_:\"0 5 6 7 8 9 10 11 12 13 3.1 3.2 6.1 7.1 9.1 10.1 11.1 16.4\",\"5.1\":0.00402,\"12.1\":0.00804,\"13.1\":0.03215,\"14.1\":0.08038,\"15.1\":0.02411,\"15.2-15.3\":0.01608,\"15.4\":0.05225,\"15.5\":0.03215,\"15.6\":0.22105,\"16.0\":0.03617,\"16.1\":0.09646,\"16.2\":0.20497,\"16.3\":0.16478},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0.00564,\"8.1-8.4\":0.00564,\"9.0-9.2\":0,\"9.3\":0.01693,\"10.0-10.2\":0.00141,\"10.3\":0.01552,\"11.0-11.2\":0.00564,\"11.3-11.4\":0.00847,\"12.0-12.1\":0.00847,\"12.2-12.5\":0.20463,\"13.0-13.1\":0.00564,\"13.2\":0.00564,\"13.3\":0.01129,\"13.4-13.7\":0.04657,\"14.0-14.4\":0.15664,\"14.5-14.8\":0.39091,\"15.0-15.1\":0.10725,\"15.2-15.3\":0.11572,\"15.4\":0.17076,\"15.5\":0.4022,\"15.6\":1.08946,\"16.0\":2.14645,\"16.1\":3.14982,\"16.2\":3.30929,\"16.3\":1.87268,\"16.4\":0.01693},P:{\"4\":0.11352,\"20\":0.78434,\"5.0-5.4\":0.01042,\"6.2-6.4\":0.01025,\"7.2-7.4\":0.03096,\"8.2\":0.02044,\"9.2\":0.02064,\"10.1\":0.0217,\"11.1-11.2\":0.04128,\"12.0\":0.02048,\"13.0\":0.02064,\"14.0\":0.02064,\"15.0\":0.01019,\"16.0\":0.0516,\"17.0\":0.06192,\"18.0\":0.08256,\"19.0\":1.33132},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.01123,\"4.2-4.3\":0.00817,\"4.4\":0,\"4.4.3-4.4.4\":0.02246},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"8\":0.04888,\"9\":0.00407,\"10\":0.00815,\"11\":0.24033,_:\"6 7 5.5\"},N:{\"10\":0.02102,\"11\":0.02035},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.07774},H:{\"0\":0.2944},L:{\"0\":44.87278},R:{_:\"0\"},M:{\"0\":0.16744},Q:{\"13.1\":0}};\n/data/features/mathml.js\u0005module.exports={A:{A:{\"2\":\"F A B DC\",\"8\":\"J D E\"},B:{\"2\":\"C K L G M N O\",\"8\":\"P Q R S T U V W X Y Z a b c d e i\",\"584\":\"j k l m n o p q r s t u\",\"1025\":\"v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"129\":\"EC uB FC GC\"},D:{\"1\":\"1\",\"8\":\"0 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i\",\"584\":\"j k l m n o p q r s t u\",\"1025\":\"v f H yB zB HC\"},E:{\"1\":\"A B C K L G 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"260\":\"I w J D E F IC 0B JC KC LC MC\"},F:{\"2\":\"F\",\"8\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB\",\"584\":\"S T U V W X Y Z a b c d\",\"1025\":\"e\",\"2052\":\"B C QC RC SC TC rB BC UC sB\"},G:{\"1\":\"E WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"8\":\"0B VC CC\"},H:{\"8\":\"pC\"},I:{\"8\":\"uB I qC rC sC tC CC uC vC\",\"1025\":\"H\"},J:{\"1\":\"A\",\"8\":\"D\"},K:{\"8\":\"A B C h rB BC sB\"},L:{\"1025\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"8\":\"wC\"},P:{\"8\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"8\":\"2B\"},R:{\"8\":\"AD\"},S:{\"1\":\"BD CD\"}},B:2,C:\"MathML\"};\n-/data/features/css-container-queries-style.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"2\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s\",\"194\":\"t u v f\",\"260\":\"H\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s\",\"194\":\"t u v f\",\"260\":\"H yB zB HC\"},E:{\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b QC RC SC TC rB BC UC sB\",\"194\":\"c d e\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I qC rC sC tC CC uC vC\",\"260\":\"H\"},J:{\"2\":\"D A\"},K:{\"2\":\"A B C rB BC sB\",\"194\":\"h\"},L:{\"260\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"2\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"2\":\"2B\"},R:{\"2\":\"AD\"},S:{\"2\":\"BD CD\"}},B:5,C:\"CSS Container Style Queries\"};\n'/data/features/font-family-system-ui.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"1\":\"b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB FC GC\",\"132\":\"KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a\"},D:{\"1\":\"XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB\",\"260\":\"UB VB WB\"},E:{\"1\":\"B C K L G rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E IC 0B JC KC LC\",\"16\":\"F\",\"132\":\"A MC 1B\"},F:{\"1\":\"KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB QC RC SC TC rB BC UC sB\"},G:{\"1\":\"eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC\",\"132\":\"aC bC cC dC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I xC\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"132\":\"BD CD\"}},B:5,C:\"system-ui value for font-family\"};\n/data/regions/DJ.js\u0010module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0.00443,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.00443,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0.00443,\"100\":0,\"101\":0,\"102\":0.00443,\"103\":0,\"104\":0,\"105\":0.00443,\"106\":0,\"107\":0.02656,\"108\":0.00885,\"109\":0.70389,\"110\":0.54009,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0.00443,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0.00443,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0.01771,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0.00443,\"80\":0,\"81\":0.02656,\"83\":0.00885,\"84\":0,\"85\":0,\"86\":0,\"87\":0.00443,\"88\":0,\"89\":0.00443,\"90\":0,\"91\":0,\"92\":0,\"93\":0.01328,\"94\":0.00885,\"95\":0,\"96\":0.01328,\"97\":0.00443,\"98\":0.00443,\"99\":0.02214,\"100\":0.00443,\"101\":0.00443,\"102\":0.00443,\"103\":0.01328,\"104\":0.00443,\"105\":0.01771,\"106\":0.01771,\"107\":0.06641,\"108\":0.17265,\"109\":7.54804,\"110\":4.49783,\"111\":0,\"112\":0.00443,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0.00443,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0.00443,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0.01328,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.0487,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0.00885,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0.30104,\"91\":0,\"92\":0,\"93\":0.00443,\"94\":0.10625,\"95\":0.07526,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0.00443,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0.00443,\"15\":0,\"16\":0,\"17\":0.00443,\"18\":0.01328,\"79\":0,\"80\":0,\"81\":0.00443,\"83\":0,\"84\":0.00443,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0.00443,\"90\":0.00443,\"91\":0,\"92\":0.00885,\"93\":0,\"94\":0,\"95\":0,\"96\":0.00443,\"97\":0,\"98\":0,\"99\":0,\"100\":0.00443,\"101\":0,\"102\":0,\"103\":0.00443,\"104\":0,\"105\":0.00443,\"106\":0,\"107\":0.00443,\"108\":0.03542,\"109\":0.50025,\"110\":0.87655},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0.00443,\"15\":0,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0,\"13.1\":0.00443,\"14.1\":0.01328,\"15.1\":0,\"15.2-15.3\":0,\"15.4\":0,\"15.5\":0.00443,\"15.6\":0.03099,\"16.0\":0,\"16.1\":0.01771,\"16.2\":0.01771,\"16.3\":0.01328,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0.03216,\"10.0-10.2\":0,\"10.3\":2.14206,\"11.0-11.2\":0.00419,\"11.3-11.4\":0,\"12.0-12.1\":0,\"12.2-12.5\":0.17617,\"13.0-13.1\":0.0014,\"13.2\":0,\"13.3\":0.00419,\"13.4-13.7\":0.06572,\"14.0-14.4\":0.73546,\"14.5-14.8\":0.12444,\"15.0-15.1\":0.44463,\"15.2-15.3\":0.13143,\"15.4\":0.12444,\"15.5\":0.96197,\"15.6\":0.783,\"16.0\":0.75363,\"16.1\":1.64429,\"16.2\":1.9491,\"16.3\":3.01314,\"16.4\":0.00699},P:{\"4\":0.06154,\"20\":0.91279,\"5.0-5.4\":0.02051,\"6.2-6.4\":0.02051,\"7.2-7.4\":0.53331,\"8.2\":0,\"9.2\":0.01026,\"10.1\":0,\"11.1-11.2\":0.21538,\"12.0\":0,\"13.0\":0.0923,\"14.0\":2.42043,\"15.0\":0.05128,\"16.0\":0.10256,\"17.0\":0.03077,\"18.0\":0.1641,\"19.0\":1.97942},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0.03048,\"4.4\":0,\"4.4.3-4.4.4\":0.02822},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.00443,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0.04458},O:{\"0\":1.44898},H:{\"0\":0.87057},L:{\"0\":57.53448},R:{_:\"0\"},M:{\"0\":0.15604},Q:{\"13.1\":0}};\n/data/regions/IT.js\u0011module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0.00465,\"48\":0.00465,\"49\":0,\"50\":0,\"51\":0,\"52\":0.03252,\"53\":0,\"54\":0,\"55\":0,\"56\":0.00465,\"57\":0,\"58\":0,\"59\":0.00929,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0.00465,\"69\":0,\"70\":0,\"71\":0,\"72\":0.00465,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.03252,\"79\":0.00465,\"80\":0.00465,\"81\":0.00929,\"82\":0.00465,\"83\":0.00465,\"84\":0,\"85\":0,\"86\":0,\"87\":0.01394,\"88\":0.00465,\"89\":0,\"90\":0,\"91\":0.00465,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0.00465,\"100\":0.00929,\"101\":0,\"102\":0.04646,\"103\":0.00465,\"104\":0.00465,\"105\":0.00465,\"106\":0.01394,\"107\":0.00929,\"108\":0.05111,\"109\":1.02677,\"110\":0.72013,\"111\":0.00465,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0.00465,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0.03717,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0.00465,\"61\":0,\"62\":0,\"63\":0.07898,\"64\":0,\"65\":0.00465,\"66\":0.05575,\"67\":0.00929,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0.00465,\"75\":0,\"76\":0,\"77\":0.00929,\"78\":0.00465,\"79\":0.02323,\"80\":0.00929,\"81\":0.01858,\"83\":0.02323,\"84\":0.03717,\"85\":0.04646,\"86\":0.05575,\"87\":0.06504,\"88\":0.00465,\"89\":0.01394,\"90\":0.00929,\"91\":0.00929,\"92\":0.05111,\"93\":0.00465,\"94\":0.00465,\"95\":0.00465,\"96\":0.00929,\"97\":0.00929,\"98\":0.00929,\"99\":0.00929,\"100\":0.02323,\"101\":0.02788,\"102\":0.01394,\"103\":0.07434,\"104\":0.02323,\"105\":0.03252,\"106\":0.03252,\"107\":0.05575,\"108\":0.25088,\"109\":7.65661,\"110\":4.98051,\"111\":0.00465,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0.00465,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.00929,\"68\":0,\"69\":0,\"70\":0,\"71\":0.00465,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.02788,\"94\":0.29734,\"95\":0.19513,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0.00465,\"16\":0,\"17\":0.00465,\"18\":0.00929,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0.00465,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00465,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0.00465,\"102\":0,\"103\":0,\"104\":0.00465,\"105\":0.00465,\"106\":0.00465,\"107\":0.01858,\"108\":0.05111,\"109\":0.83628,\"110\":1.14292},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.00929,\"14\":0.0604,\"15\":0.01394,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0.00929,\"12.1\":0.02323,\"13.1\":0.10686,\"14.1\":0.12544,\"15.1\":0.02788,\"15.2-15.3\":0.01858,\"15.4\":0.05111,\"15.5\":0.09292,\"15.6\":0.3531,\"16.0\":0.05575,\"16.1\":0.19513,\"16.2\":0.45531,\"16.3\":0.39026,\"16.4\":0},G:{\"8\":0.00482,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0.00241,\"6.0-6.1\":0.00723,\"7.0-7.1\":0.00482,\"8.1-8.4\":0,\"9.0-9.2\":0.00241,\"9.3\":0.1085,\"10.0-10.2\":0.00241,\"10.3\":0.09886,\"11.0-11.2\":0.01688,\"11.3-11.4\":0.05546,\"12.0-12.1\":0.02411,\"12.2-12.5\":0.40507,\"13.0-13.1\":0.01206,\"13.2\":0.01206,\"13.3\":0.04099,\"13.4-13.7\":0.16396,\"14.0-14.4\":0.37614,\"14.5-14.8\":0.67753,\"15.0-15.1\":0.1953,\"15.2-15.3\":0.2387,\"15.4\":0.26522,\"15.5\":0.54009,\"15.6\":1.67814,\"16.0\":2.88612,\"16.1\":5.4178,\"16.2\":5.66374,\"16.3\":4.1182,\"16.4\":0.0217},P:{\"4\":0.10291,\"20\":1.00852,\"5.0-5.4\":0.01029,\"6.2-6.4\":0,\"7.2-7.4\":0,\"8.2\":0,\"9.2\":0,\"10.1\":0.01029,\"11.1-11.2\":0.04116,\"12.0\":0.01029,\"13.0\":0.04116,\"14.0\":0.04116,\"15.0\":0.02058,\"16.0\":0.07204,\"17.0\":0.07204,\"18.0\":0.10291,\"19.0\":1.77006},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.03644,\"4.2-4.3\":0.01215,\"4.4\":0,\"4.4.3-4.4.4\":0.10323},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0.00485,\"9\":0.00485,\"10\":0,\"11\":0.10181,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.11779},H:{\"0\":0.25851},L:{\"0\":49.88642},R:{_:\"0\"},M:{\"0\":0.30518},Q:{\"13.1\":0}};\n/data/regions/JP.js\u0012\fmodule.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0.00573,\"49\":0,\"50\":0,\"51\":0,\"52\":0.01718,\"53\":0,\"54\":0,\"55\":0,\"56\":0.00573,\"57\":0,\"58\":0,\"59\":0,\"60\":0.00573,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0.00573,\"67\":0.00573,\"68\":0.00573,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.0229,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0.00573,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0.00573,\"89\":0,\"90\":0,\"91\":0.00573,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0.00573,\"98\":0,\"99\":0.00573,\"100\":0.00573,\"101\":0.00573,\"102\":0.05725,\"103\":0.00573,\"104\":0.01145,\"105\":0.00573,\"106\":0.02863,\"107\":0.01145,\"108\":0.04008,\"109\":1.05913,\"110\":0.69273,\"111\":0.00573,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0.0458,\"50\":0,\"51\":0,\"52\":0.00573,\"53\":0,\"54\":0,\"55\":0,\"56\":0.00573,\"57\":0,\"58\":0.0229,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0.00573,\"65\":0.00573,\"66\":0,\"67\":0.00573,\"68\":0,\"69\":0.00573,\"70\":0.00573,\"71\":0,\"72\":0.00573,\"73\":0.00573,\"74\":0.01145,\"75\":0.00573,\"76\":0.00573,\"77\":0.00573,\"78\":0.00573,\"79\":0.01718,\"80\":0.01145,\"81\":0.07443,\"83\":0.0229,\"84\":0.01718,\"85\":0.0229,\"86\":0.02863,\"87\":0.02863,\"88\":0.00573,\"89\":0.01718,\"90\":0.00573,\"91\":0.01145,\"92\":0.02863,\"93\":0.00573,\"94\":0.01718,\"95\":0.01718,\"96\":0.0229,\"97\":0.0229,\"98\":0.03435,\"99\":0.0229,\"100\":0.0229,\"101\":0.0229,\"102\":0.02863,\"103\":0.08588,\"104\":0.02863,\"105\":0.05725,\"106\":0.07443,\"107\":0.09733,\"108\":0.47518,\"109\":7.98638,\"110\":5.59905,\"111\":0.01145,\"112\":0.00573,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.00573,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.00573,\"94\":0.07443,\"95\":0.08588,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0.00573,\"18\":0.00573,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0.00573,\"85\":0.00573,\"86\":0.00573,\"87\":0,\"88\":0,\"89\":0,\"90\":0.00573,\"91\":0.00573,\"92\":0.00573,\"93\":0,\"94\":0.00573,\"95\":0,\"96\":0.00573,\"97\":0,\"98\":0.00573,\"99\":0.00573,\"100\":0.00573,\"101\":0.00573,\"102\":0.00573,\"103\":0.00573,\"104\":0.00573,\"105\":0.00573,\"106\":0.01718,\"107\":0.02863,\"108\":0.15458,\"109\":2.9999,\"110\":4.04758},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0.00573,\"13\":0.01718,\"14\":0.05725,\"15\":0.01145,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0.00573,\"12.1\":0.01718,\"13.1\":0.07443,\"14.1\":0.14313,\"15.1\":0.01718,\"15.2-15.3\":0.01718,\"15.4\":0.06298,\"15.5\":0.0916,\"15.6\":0.49235,\"16.0\":0.0458,\"16.1\":0.14313,\"16.2\":0.50953,\"16.3\":0.37213,\"16.4\":0},G:{\"8\":0.00932,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0.06523,\"8.1-8.4\":0.10716,\"9.0-9.2\":0.31215,\"9.3\":0.14909,\"10.0-10.2\":0.02329,\"10.3\":0.09784,\"11.0-11.2\":0.09784,\"11.3-11.4\":0.03727,\"12.0-12.1\":0.05125,\"12.2-12.5\":0.49851,\"13.0-13.1\":0.05125,\"13.2\":0.02329,\"13.3\":0.06988,\"13.4-13.7\":0.20965,\"14.0-14.4\":0.70817,\"14.5-14.8\":1.7378,\"15.0-15.1\":0.35874,\"15.2-15.3\":0.51715,\"15.4\":0.71748,\"15.5\":1.1927,\"15.6\":4.62638,\"16.0\":3.033,\"16.1\":11.59623,\"16.2\":12.05281,\"16.3\":5.73056,\"16.4\":0.01398},P:{\"4\":0.0104,\"20\":0.37422,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0,\"8.2\":0,\"9.2\":0,\"10.1\":0,\"11.1-11.2\":0.0104,\"12.0\":0.0104,\"13.0\":0.0104,\"14.0\":0.0104,\"15.0\":0,\"16.0\":0.02079,\"17.0\":0.02079,\"18.0\":0.02079,\"19.0\":0.49896},I:{\"0\":0,\"3\":0,\"4\":0.01027,\"2.1\":0,\"2.2\":0.01027,\"2.3\":0,\"4.1\":0.05135,\"4.2-4.3\":0.18487,\"4.4\":0,\"4.4.3-4.4.4\":0.28758},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0.00716,\"9\":0.02147,\"10\":0,\"11\":0.37213,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.21375},H:{\"0\":0.10523},L:{\"0\":25.09788},R:{_:\"0\"},M:{\"0\":0.3591},Q:{\"13.1\":0.02138}};\n/data/browserVersions.js\u0006module.exports={\"0\":\"23\",\"1\":\"24\",\"2\":\"25\",\"3\":\"26\",\"4\":\"27\",\"5\":\"28\",\"6\":\"29\",\"7\":\"30\",\"8\":\"31\",\"9\":\"32\",A:\"10\",B:\"11\",C:\"12\",D:\"7\",E:\"8\",F:\"9\",G:\"15\",H:\"111\",I:\"4\",J:\"6\",K:\"13\",L:\"14\",M:\"16\",N:\"17\",O:\"18\",P:\"79\",Q:\"80\",R:\"81\",S:\"83\",T:\"84\",U:\"85\",V:\"86\",W:\"87\",X:\"88\",Y:\"89\",Z:\"90\",a:\"91\",b:\"92\",c:\"93\",d:\"94\",e:\"95\",f:\"110\",g:\"20\",h:\"73\",i:\"96\",j:\"97\",k:\"98\",l:\"99\",m:\"100\",n:\"101\",o:\"102\",p:\"103\",q:\"104\",r:\"105\",s:\"106\",t:\"107\",u:\"108\",v:\"109\",w:\"5\",x:\"19\",y:\"21\",z:\"22\",AB:\"33\",BB:\"34\",CB:\"35\",DB:\"36\",EB:\"37\",FB:\"38\",GB:\"39\",HB:\"40\",IB:\"41\",JB:\"42\",KB:\"43\",LB:\"44\",MB:\"45\",NB:\"46\",OB:\"47\",PB:\"48\",QB:\"49\",RB:\"50\",SB:\"51\",TB:\"52\",UB:\"53\",VB:\"54\",WB:\"55\",XB:\"56\",YB:\"57\",ZB:\"58\",aB:\"60\",bB:\"62\",cB:\"63\",dB:\"64\",eB:\"65\",fB:\"66\",gB:\"67\",hB:\"68\",iB:\"69\",jB:\"70\",kB:\"71\",lB:\"72\",mB:\"74\",nB:\"75\",oB:\"76\",pB:\"77\",qB:\"78\",rB:\"11.1\",sB:\"12.1\",tB:\"16.0\",uB:\"3\",vB:\"59\",wB:\"61\",xB:\"82\",yB:\"112\",zB:\"113\",\"0B\":\"3.2\",\"1B\":\"10.1\",\"2B\":\"13.1\",\"3B\":\"15.2-15.3\",\"4B\":\"15.4\",\"5B\":\"15.5\",\"6B\":\"15.6\",\"7B\":\"16.1\",\"8B\":\"16.2\",\"9B\":\"16.3\",AC:\"16.4\",BC:\"11.5\",CC:\"4.2-4.3\",DC:\"5.5\",EC:\"2\",FC:\"3.5\",GC:\"3.6\",HC:\"114\",IC:\"3.1\",JC:\"5.1\",KC:\"6.1\",LC:\"7.1\",MC:\"9.1\",NC:\"14.1\",OC:\"15.1\",PC:\"TP\",QC:\"9.5-9.6\",RC:\"10.0-10.1\",SC:\"10.5\",TC:\"10.6\",UC:\"11.6\",VC:\"4.0-4.1\",WC:\"5.0-5.1\",XC:\"6.0-6.1\",YC:\"7.0-7.1\",ZC:\"8.1-8.4\",aC:\"9.0-9.2\",bC:\"9.3\",cC:\"10.0-10.2\",dC:\"10.3\",eC:\"11.0-11.2\",fC:\"11.3-11.4\",gC:\"12.0-12.1\",hC:\"12.2-12.5\",iC:\"13.0-13.1\",jC:\"13.2\",kC:\"13.3\",lC:\"13.4-13.7\",mC:\"14.0-14.4\",nC:\"14.5-14.8\",oC:\"15.0-15.1\",pC:\"all\",qC:\"2.1\",rC:\"2.2\",sC:\"2.3\",tC:\"4.1\",uC:\"4.4\",vC:\"4.4.3-4.4.4\",wC:\"13.4\",xC:\"5.0-5.4\",yC:\"6.2-6.4\",zC:\"7.2-7.4\",\"0C\":\"8.2\",\"1C\":\"9.2\",\"2C\":\"11.1-11.2\",\"3C\":\"12.0\",\"4C\":\"13.0\",\"5C\":\"14.0\",\"6C\":\"15.0\",\"7C\":\"17.0\",\"8C\":\"18.0\",\"9C\":\"19.0\",AD:\"13.18\",BD:\"2.5\",CD:\"3.0-3.1\"};\n/data/regions/TJ.js\u000e\u0010module.exports={C:{\"35\":0.00216,\"52\":0.01297,\"72\":0.03243,\"78\":0.06702,\"80\":0.14269,\"96\":0.00216,\"99\":0.00216,\"101\":0.05837,\"102\":0.02594,\"105\":0.00649,\"108\":0.03027,\"109\":0.47564,\"110\":0.25512,_:\"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 73 74 75 76 77 79 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 97 98 100 103 104 106 107 111 112 3.5 3.6\"},D:{\"27\":0.00216,\"32\":0.00432,\"35\":0.00865,\"38\":0.00649,\"39\":0.00216,\"41\":0.00432,\"44\":0.0454,\"47\":0.00649,\"49\":0.0173,\"56\":0.00216,\"59\":0.00216,\"62\":0.01081,\"63\":0.00216,\"65\":0.00216,\"67\":0.00216,\"68\":0.00216,\"69\":0.0173,\"70\":0.00649,\"71\":0.0173,\"74\":0.00649,\"75\":0.02594,\"76\":0.00432,\"78\":0.00865,\"79\":0.05837,\"80\":0.00432,\"81\":0.01081,\"83\":0.00432,\"84\":0.03243,\"85\":0.01297,\"86\":0.29619,\"87\":0.2335,\"88\":0.00865,\"89\":0.02811,\"90\":0.01513,\"91\":0.00432,\"92\":0.01297,\"93\":0.01081,\"94\":0.00432,\"95\":0.01297,\"96\":0.04324,\"97\":0.01513,\"98\":0.01946,\"99\":0.0173,\"100\":0.02594,\"101\":0.00649,\"102\":0.03892,\"103\":0.02378,\"104\":0.01081,\"105\":0.03027,\"106\":0.1535,\"107\":0.07135,\"108\":0.14702,\"109\":7.98643,\"110\":2.95978,_:\"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 28 29 30 31 33 34 36 37 40 42 43 45 46 48 50 51 52 53 54 55 57 58 60 61 64 66 72 73 77 111 112 113\"},F:{\"36\":0.0173,\"62\":0.00649,\"68\":0.00432,\"71\":0.00216,\"72\":0.00432,\"74\":0.00432,\"79\":0.05621,\"80\":0.00432,\"82\":0.00649,\"84\":0.00216,\"85\":0.01297,\"86\":0.00865,\"87\":0.00216,\"88\":0.00649,\"89\":0.00432,\"91\":0.00216,\"92\":0.00432,\"93\":0.00865,\"94\":0.32862,\"95\":0.58374,_:\"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 63 64 65 66 67 69 70 73 75 76 77 78 81 83 90 9.5-9.6 10.6 11.1 11.5 11.6\",\"10.0-10.1\":0,\"10.5\":0.03459,\"12.1\":0.00432},B:{\"13\":0.01081,\"14\":0.00649,\"16\":0.01081,\"18\":0.0454,\"84\":0.00432,\"89\":0.00649,\"92\":0.0173,\"98\":0.00649,\"100\":0.00649,\"103\":0.00649,\"106\":0.00216,\"107\":0.00865,\"108\":0.01946,\"109\":0.65725,\"110\":0.42159,_:\"12 15 17 79 80 81 83 85 86 87 88 90 91 93 94 95 96 97 99 101 102 104 105\"},E:{\"4\":0,\"13\":0.00216,\"14\":0.02594,_:\"0 5 6 7 8 9 10 11 12 15 3.1 3.2 6.1 7.1 9.1 10.1 11.1 16.4\",\"5.1\":0.4497,\"12.1\":0.00432,\"13.1\":0.00649,\"14.1\":0.04324,\"15.1\":0.0173,\"15.2-15.3\":0.03459,\"15.4\":0.00432,\"15.5\":0.0173,\"15.6\":0.09513,\"16.0\":0.03459,\"16.1\":0.03459,\"16.2\":0.07999,\"16.3\":0.18161},G:{\"8\":0.00281,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0.01687,\"6.0-6.1\":0.00094,\"7.0-7.1\":0.01312,\"8.1-8.4\":0,\"9.0-9.2\":0.00094,\"9.3\":0.08436,\"10.0-10.2\":0,\"10.3\":0.02625,\"11.0-11.2\":0.0225,\"11.3-11.4\":0.01031,\"12.0-12.1\":0.0225,\"12.2-12.5\":0.53993,\"13.0-13.1\":0.01968,\"13.2\":0.00469,\"13.3\":0.05718,\"13.4-13.7\":0.08905,\"14.0-14.4\":0.31965,\"14.5-14.8\":0.25872,\"15.0-15.1\":0.15186,\"15.2-15.3\":0.25215,\"15.4\":0.17998,\"15.5\":0.33746,\"15.6\":0.55399,\"16.0\":1.32264,\"16.1\":1.37232,\"16.2\":1.13798,\"16.3\":1.73415,\"16.4\":0.01031},P:{\"4\":0.57071,\"20\":0.2344,\"5.0-5.4\":0.09172,\"6.2-6.4\":0.09172,\"7.2-7.4\":0.4688,\"8.2\":0.01016,\"9.2\":0.10191,\"10.1\":0.01019,\"11.1-11.2\":0.09172,\"12.0\":0.07134,\"13.0\":0.1223,\"14.0\":0.14268,\"15.0\":0.14268,\"16.0\":0.41784,\"17.0\":0.2344,\"18.0\":0.48918,\"19.0\":1.67138},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.00748,\"4.2-4.3\":0.00641,\"4.4\":0,\"4.4.3-4.4.4\":0.03313},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"11\":0.11459,_:\"6 7 8 9 10 5.5\"},N:{\"10\":0.03712,\"11\":0.07423},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":1.18339},H:{\"0\":1.86231},L:{\"0\":63.04335},R:{_:\"0\"},M:{\"0\":0.04702},Q:{\"13.1\":0}};\n\"/data/features/publickeypinning.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"2\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"1\":\"FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB\",\"2\":\"F B C G M N O x fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\",\"4\":\"0\",\"16\":\"1 g y z\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"2\":\"A B C h rB BC sB\"},L:{\"2\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"1\":\"I xC yC zC 0C 1C 1B\",\"2\":\"g 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"2\":\"2B\"},R:{\"2\":\"AD\"},S:{\"1\":\"BD\",\"2\":\"CD\"}},B:6,C:\"HTTP Public Key Pinning\"};\n/data/regions/NU.js\u000emodule.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0,\"108\":0,\"109\":0,\"110\":0,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0,\"108\":2.11406,\"109\":4.46861,\"110\":1.88132,\"111\":0,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0,\"108\":0,\"109\":0,\"110\":0},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0,\"13.1\":0,\"14.1\":0,\"15.1\":0,\"15.2-15.3\":0.23662,\"15.4\":0,\"15.5\":0,\"15.6\":3.76263,\"16.0\":0,\"16.1\":0.46936,\"16.2\":0.93872,\"16.3\":0.70598,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0,\"10.0-10.2\":0,\"10.3\":0,\"11.0-11.2\":0,\"11.3-11.4\":0,\"12.0-12.1\":0,\"12.2-12.5\":0,\"13.0-13.1\":0,\"13.2\":0,\"13.3\":0,\"13.4-13.7\":0,\"14.0-14.4\":0,\"14.5-14.8\":0,\"15.0-15.1\":0,\"15.2-15.3\":2.80382,\"15.4\":0.93461,\"15.5\":0.93461,\"15.6\":6.54225,\"16.0\":0.93461,\"16.1\":29.90743,\"16.2\":21.49596,\"16.3\":20.56136,\"16.4\":0},P:{\"4\":0,\"20\":0,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0,\"8.2\":0,\"9.2\":0,\"10.1\":0,\"11.1-11.2\":0,\"12.0\":0,\"13.0\":0,\"14.0\":0,\"15.0\":0,\"16.0\":0,\"17.0\":0,\"18.0\":0,\"19.0\":0},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0,\"4.4\":0,\"4.4.3-4.4.4\":0},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0},H:{\"0\":0},L:{\"0\":0.8426},R:{_:\"0\"},M:{\"0\":0},Q:{\"13.1\":0}};\n/data/regions/PY.js\rmodule.exports={C:{\"17\":0.00221,\"24\":0.00221,\"30\":0.00221,\"35\":0.02868,\"43\":0.00221,\"45\":0.01765,\"52\":0.10809,\"61\":0.00221,\"65\":0.00441,\"69\":0.00221,\"71\":0.00662,\"73\":0.05515,\"82\":0.00441,\"88\":0.01765,\"91\":0.00441,\"99\":0.00662,\"101\":0.00441,\"102\":0.00882,\"103\":0.00662,\"104\":0.01103,\"105\":0.00662,\"106\":0.01103,\"107\":0.01765,\"108\":0.02206,\"109\":0.58459,\"110\":0.39267,_:\"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 18 19 20 21 22 23 25 26 27 28 29 31 32 33 34 36 37 38 39 40 41 42 44 46 47 48 49 50 51 53 54 55 56 57 58 59 60 62 63 64 66 67 68 70 72 74 75 76 77 78 79 80 81 83 84 85 86 87 89 90 92 93 94 95 96 97 98 100 111 112 3.5 3.6\"},D:{\"11\":0.00221,\"27\":0.00441,\"38\":0.00441,\"44\":0.00441,\"47\":0.03309,\"49\":0.02427,\"56\":0.00221,\"63\":0.00221,\"64\":0.01765,\"65\":0.03309,\"66\":0.00221,\"68\":0.01103,\"69\":0.00441,\"70\":0.00662,\"71\":0.00441,\"73\":0.00882,\"74\":0.00221,\"75\":0.00441,\"76\":0.00221,\"77\":0.00882,\"78\":0.00221,\"79\":0.0728,\"80\":0.00662,\"81\":0.02647,\"83\":0.00441,\"85\":0.00662,\"86\":0.00441,\"87\":0.55591,\"88\":0.00441,\"89\":0.0728,\"90\":0.00441,\"91\":0.10589,\"92\":0.01103,\"93\":0.00441,\"94\":0.00662,\"95\":0.01765,\"96\":0.02206,\"97\":0.02427,\"98\":0.01765,\"99\":0.01324,\"100\":0.0353,\"101\":0.00882,\"102\":0.02868,\"103\":0.05515,\"104\":0.04633,\"105\":0.05074,\"106\":0.04633,\"107\":0.39267,\"108\":0.24928,\"109\":8.56149,\"110\":5.42676,\"111\":0.00441,_:\"4 5 6 7 8 9 10 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 28 29 30 31 32 33 34 35 36 37 39 40 41 42 43 45 46 48 50 51 52 53 54 55 57 58 59 60 61 62 67 72 84 112 113\"},F:{\"85\":0.00221,\"93\":0.09265,\"94\":0.76989,\"95\":0.27796,_:\"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 86 87 88 89 90 91 92 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1\",\"10.0-10.1\":0},B:{\"12\":0.00221,\"17\":0.00221,\"18\":0.00882,\"80\":0.01765,\"84\":0.00221,\"92\":0.00441,\"94\":0.01324,\"102\":0.01103,\"103\":0.00662,\"104\":0.00662,\"105\":0.00662,\"106\":0.00221,\"107\":0.01324,\"108\":0.02206,\"109\":0.65518,\"110\":0.94858,_:\"13 14 15 16 79 81 83 85 86 87 88 89 90 91 93 95 96 97 98 99 100 101\"},E:{\"4\":0,\"13\":0.02206,\"14\":0.01544,\"15\":0.00441,_:\"0 5 6 7 8 9 10 11 12 3.1 3.2 6.1 7.1 9.1 10.1 11.1 16.4\",\"5.1\":0.01765,\"12.1\":0.00441,\"13.1\":0.01985,\"14.1\":0.02427,\"15.1\":0.00221,\"15.2-15.3\":0.00221,\"15.4\":0.01324,\"15.5\":0.04633,\"15.6\":0.07942,\"16.0\":0.00882,\"16.1\":0.05956,\"16.2\":0.10368,\"16.3\":0.09265},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0.00067,\"6.0-6.1\":0,\"7.0-7.1\":0.03232,\"8.1-8.4\":0.00067,\"9.0-9.2\":0.00404,\"9.3\":0.02828,\"10.0-10.2\":0,\"10.3\":0.00337,\"11.0-11.2\":0.00269,\"11.3-11.4\":0.00269,\"12.0-12.1\":0.00067,\"12.2-12.5\":0.19662,\"13.0-13.1\":0.00135,\"13.2\":0.00404,\"13.3\":0.00404,\"13.4-13.7\":0.02357,\"14.0-14.4\":0.10302,\"14.5-14.8\":0.21076,\"15.0-15.1\":0.03232,\"15.2-15.3\":0.0404,\"15.4\":0.06128,\"15.5\":0.14679,\"15.6\":0.51647,\"16.0\":0.6774,\"16.1\":1.39991,\"16.2\":1.59451,\"16.3\":0.84843,\"16.4\":0.00269},P:{\"4\":0.41738,\"20\":0.78385,\"5.0-5.4\":0.01042,\"6.2-6.4\":0.0206,\"7.2-7.4\":0.71259,\"8.2\":0.02044,\"9.2\":0.03054,\"10.1\":0.0217,\"11.1-11.2\":0.07126,\"12.0\":0.02036,\"13.0\":0.08144,\"14.0\":0.09162,\"15.0\":0.04072,\"16.0\":0.14252,\"17.0\":0.33594,\"18.0\":0.1527,\"19.0\":1.60843},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.00408,\"4.2-4.3\":0.02041,\"4.4\":0,\"4.4.3-4.4.4\":0.06124},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"8\":0.00882,\"11\":0.0375,_:\"6 7 9 10 5.5\"},N:{\"10\":0.03712,\"11\":0.07423},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.04676},H:{\"0\":0.21399},L:{\"0\":67.73316},R:{_:\"0\"},M:{\"0\":0.10132},Q:{\"13.1\":0}};\n/data/features/push-api.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"N O\",\"2\":\"C K L G M\",\"257\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB FC GC\",\"257\":\"LB NB OB PB QB RB SB UB VB WB XB YB ZB vB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"1281\":\"MB TB aB\"},D:{\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB\",\"257\":\"RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"388\":\"LB MB NB OB PB QB\"},E:{\"2\":\"I w J IC 0B JC KC\",\"514\":\"D E F A B C K L G LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB\",\"4612\":\"7B 8B 9B AC PC\"},F:{\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB QC RC SC TC rB BC UC sB\",\"16\":\"EB FB GB HB IB\",\"257\":\"JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B\",\"8196\":\"AC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"2\":\"AD\"},S:{\"257\":\"BD CD\"}},B:5,C:\"Push API\"};\n/data/features/menu.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"2\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"2\":\"EC uB I w J D FC GC\",\"132\":\"0 1 2 3 4 5 6 7 8 9 E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T\",\"450\":\"U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\"},D:{\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"66\":\"IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB\"},E:{\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\",\"66\":\"CB DB EB FB GB HB IB JB KB LB MB NB\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"2\":\"A B C h rB BC sB\"},L:{\"2\":\"H\"},M:{\"450\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"2\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"2\":\"2B\"},R:{\"2\":\"AD\"},S:{\"2\":\"BD CD\"}},B:7,C:\"Context menu item (menuitem element)\"};\n/data/regions/SY.js\u00111module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.00197,\"53\":0.00098,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0.00098,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0.00295,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0.00098,\"85\":0,\"86\":0,\"87\":0,\"88\":0.00098,\"89\":0,\"90\":0.00098,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0.00098,\"98\":0,\"99\":0.00098,\"100\":0,\"101\":0.00098,\"102\":0.00098,\"103\":0,\"104\":0.00098,\"105\":0.00098,\"106\":0.00098,\"107\":0.00098,\"108\":0.00393,\"109\":0.05701,\"110\":0.04718,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.00098,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0.00098,\"41\":0,\"42\":0,\"43\":0.00098,\"44\":0,\"45\":0,\"46\":0,\"47\":0.00098,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0.00098,\"56\":0.00098,\"57\":0,\"58\":0.00197,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0.00098,\"66\":0,\"67\":0,\"68\":0,\"69\":0.00098,\"70\":0.0059,\"71\":0.00197,\"72\":0,\"73\":0,\"74\":0,\"75\":0.00197,\"76\":0,\"77\":0,\"78\":0,\"79\":0.00098,\"80\":0.00098,\"81\":0.00393,\"83\":0.00098,\"84\":0,\"85\":0,\"86\":0,\"87\":0.00197,\"88\":0.00098,\"89\":0.00295,\"90\":0.00197,\"91\":0.00098,\"92\":0.00197,\"93\":0,\"94\":0.00098,\"95\":0.00197,\"96\":0.00098,\"97\":0,\"98\":0.00295,\"99\":0.00098,\"100\":0.00492,\"101\":0.00098,\"102\":0.00197,\"103\":0.00295,\"104\":0.00295,\"105\":0.00295,\"106\":0.00295,\"107\":0.0059,\"108\":0.01278,\"109\":0.32341,\"110\":0.1563,\"111\":0,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0.00098,\"55\":0,\"56\":0,\"57\":0,\"58\":0.00098,\"60\":0,\"62\":0,\"63\":0.00098,\"64\":0.00098,\"65\":0.00197,\"66\":0.00197,\"67\":0.00393,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0.00098,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0.01081,\"95\":0.02851,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0.00098,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00098,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0.00098,\"108\":0.00295,\"109\":0.02458,\"110\":0.02556},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0.00098,\"15\":0,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0.05407,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0,\"13.1\":0,\"14.1\":0.00295,\"15.1\":0,\"15.2-15.3\":0,\"15.4\":0.00098,\"15.5\":0,\"15.6\":0.00098,\"16.0\":0,\"16.1\":0.00098,\"16.2\":0.00098,\"16.3\":0.00098,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0.00574,\"5.0-5.1\":0.00096,\"6.0-6.1\":0,\"7.0-7.1\":0.0086,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0.01912,\"10.0-10.2\":0,\"10.3\":0.03633,\"11.0-11.2\":0.00096,\"11.3-11.4\":0.02103,\"12.0-12.1\":0.07935,\"12.2-12.5\":0.78972,\"13.0-13.1\":0.04398,\"13.2\":0.03251,\"13.3\":0.13767,\"13.4-13.7\":0.27248,\"14.0-14.4\":0.70749,\"14.5-14.8\":0.76868,\"15.0-15.1\":0.32793,\"15.2-15.3\":0.27535,\"15.4\":0.27631,\"15.5\":0.43406,\"15.6\":0.44075,\"16.0\":1.23238,\"16.1\":0.91305,\"16.2\":1.16641,\"16.3\":0.99145,\"16.4\":0},P:{\"4\":0.50828,\"20\":0.52861,\"5.0-5.4\":0.06099,\"6.2-6.4\":0.08133,\"7.2-7.4\":0.21348,\"8.2\":0.05083,\"9.2\":0.18298,\"10.1\":0.24398,\"11.1-11.2\":0.24398,\"12.0\":0.13215,\"13.0\":0.43712,\"14.0\":0.48795,\"15.0\":0.20331,\"16.0\":0.55911,\"17.0\":0.9759,\"18.0\":0.49812,\"19.0\":2.57191},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.00517,\"4.2-4.3\":0.02239,\"4.4\":0,\"4.4.3-4.4.4\":0.12057},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.00098,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.8476},H:{\"0\":0.77684},L:{\"0\":79.12116},R:{_:\"0\"},M:{\"0\":0.15329},Q:{\"13.1\":0}};\n/data/regions/AR.js\u0011bmodule.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.0135,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0.00338,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0.00338,\"67\":0,\"68\":0.00338,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0.00338,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.00338,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0.00675,\"87\":0,\"88\":0.00675,\"89\":0,\"90\":0,\"91\":0.03713,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0.00338,\"100\":0,\"101\":0,\"102\":0.00675,\"103\":0.00338,\"104\":0.00675,\"105\":0.00675,\"106\":0.00675,\"107\":0.00675,\"108\":0.0135,\"109\":0.243,\"110\":0.16538,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0.00338,\"35\":0,\"36\":0,\"37\":0,\"38\":0.00675,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0.05063,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0.00338,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0.01688,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0.00338,\"73\":0,\"74\":0.00338,\"75\":0.00338,\"76\":0.00338,\"77\":0.00338,\"78\":0.00338,\"79\":0.0135,\"80\":0.00338,\"81\":0.00675,\"83\":0.00338,\"84\":0.00338,\"85\":0.00675,\"86\":0.00338,\"87\":0.00338,\"88\":0.00338,\"89\":0.00338,\"90\":0.00338,\"91\":0.01013,\"92\":0.00338,\"93\":0.00338,\"94\":0.0135,\"95\":0.00675,\"96\":0.01688,\"97\":0.01013,\"98\":0.01013,\"99\":0.01688,\"100\":0.01013,\"101\":0.0135,\"102\":0.0135,\"103\":0.0405,\"104\":0.02363,\"105\":0.03375,\"106\":0.027,\"107\":0.04388,\"108\":0.16875,\"109\":5.184,\"110\":2.84513,\"111\":0,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0.00338,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0.00338,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.00675,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0.00338,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.06075,\"94\":0.46913,\"95\":0.14513,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0.00338,\"16\":0,\"17\":0.00338,\"18\":0.00338,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00338,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0.00675,\"108\":0.0135,\"109\":0.28013,\"110\":0.34763},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0.00675,\"15\":0.00338,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0.00338,\"12.1\":0,\"13.1\":0.01013,\"14.1\":0.01688,\"15.1\":0.00338,\"15.2-15.3\":0.00338,\"15.4\":0.00338,\"15.5\":0.00675,\"15.6\":0.04725,\"16.0\":0.00675,\"16.1\":0.02025,\"16.2\":0.03713,\"16.3\":0.03375,\"16.4\":0},G:{\"8\":0,\"3.2\":0.00144,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0.01442,\"6.0-6.1\":0.00072,\"7.0-7.1\":0.00144,\"8.1-8.4\":0.00144,\"9.0-9.2\":0,\"9.3\":0.02308,\"10.0-10.2\":0.00072,\"10.3\":0.01731,\"11.0-11.2\":0.00216,\"11.3-11.4\":0.06779,\"12.0-12.1\":0.00288,\"12.2-12.5\":0.16226,\"13.0-13.1\":0.00649,\"13.2\":0.00216,\"13.3\":0.00793,\"13.4-13.7\":0.02668,\"14.0-14.4\":0.0613,\"14.5-14.8\":0.17596,\"15.0-15.1\":0.03317,\"15.2-15.3\":0.04687,\"15.4\":0.075,\"15.5\":0.13413,\"15.6\":0.54302,\"16.0\":0.53581,\"16.1\":1.84614,\"16.2\":1.68316,\"16.3\":0.92451,\"16.4\":0.00361},P:{\"4\":0.11154,\"20\":0.69965,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0.22308,\"8.2\":0,\"9.2\":0.01014,\"10.1\":0,\"11.1-11.2\":0.03042,\"12.0\":0.01014,\"13.0\":0.04056,\"14.0\":0.03042,\"15.0\":0.02028,\"16.0\":0.06084,\"17.0\":0.16224,\"18.0\":0.08112,\"19.0\":1.17622},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.00277,\"4.2-4.3\":0.01386,\"4.4\":0,\"4.4.3-4.4.4\":0.06375},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.03375,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.01988},H:{\"0\":0.14426},L:{\"0\":78.51113},R:{_:\"0\"},M:{\"0\":0.11263},Q:{\"13.1\":0}};\n/data/regions/BD.js\u0011module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0.00797,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.00797,\"53\":0,\"54\":0,\"55\":0,\"56\":0.00266,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0.00266,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0.00266,\"80\":0.00266,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0.00531,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0.01062,\"103\":0.00266,\"104\":0.00266,\"105\":0.00797,\"106\":0.00797,\"107\":0.00797,\"108\":0.01328,\"109\":0.3956,\"110\":0.31595,\"111\":0.01859,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0.00266,\"57\":0,\"58\":0.00266,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.00266,\"68\":0,\"69\":0.00266,\"70\":0.00266,\"71\":0.00266,\"72\":0.00266,\"73\":0.00266,\"74\":0.01062,\"75\":0.00266,\"76\":0,\"77\":0.00266,\"78\":0.00531,\"79\":0.00531,\"80\":0.00266,\"81\":0.00797,\"83\":0.00797,\"84\":0.01062,\"85\":0.01328,\"86\":0.01593,\"87\":0.01062,\"88\":0.00266,\"89\":0.00266,\"90\":0.00266,\"91\":0.00266,\"92\":0.00531,\"93\":0.00266,\"94\":0.00266,\"95\":0.00797,\"96\":0.00531,\"97\":0.00531,\"98\":0.00531,\"99\":0.00531,\"100\":0.00797,\"101\":0.00531,\"102\":0.00797,\"103\":0.01328,\"104\":0.00797,\"105\":0.01593,\"106\":0.01859,\"107\":0.03186,\"108\":0.077,\"109\":2.57004,\"110\":1.66734,\"111\":0.00797,\"112\":0.00531,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0.00266,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0.00266,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0.00266,\"56\":0,\"57\":0,\"58\":0.00266,\"60\":0.00266,\"62\":0,\"63\":0.00531,\"64\":0.00797,\"65\":0.00266,\"66\":0.00797,\"67\":0.17523,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0.00266,\"74\":0.01328,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0.00266,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0.00266,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.00266,\"94\":0.06372,\"95\":0.08496,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0.00266,\"13\":0.00266,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0.00266,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0.00266,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00266,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0,\"106\":0.00266,\"107\":0.00266,\"108\":0.00531,\"109\":0.11682,\"110\":0.17258},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0.00266,\"15\":0,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0,\"13.1\":0.00266,\"14.1\":0.00266,\"15.1\":0,\"15.2-15.3\":0.00266,\"15.4\":0.00266,\"15.5\":0.00266,\"15.6\":0.01859,\"16.0\":0.00531,\"16.1\":0.00797,\"16.2\":0.01593,\"16.3\":0.01593,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0.0006,\"5.0-5.1\":0.0021,\"6.0-6.1\":0.0003,\"7.0-7.1\":0.04292,\"8.1-8.4\":0.0018,\"9.0-9.2\":0.0027,\"9.3\":0.02131,\"10.0-10.2\":0.0045,\"10.3\":0.01891,\"11.0-11.2\":0.0048,\"11.3-11.4\":0.0036,\"12.0-12.1\":0.0048,\"12.2-12.5\":0.20952,\"13.0-13.1\":0.0039,\"13.2\":0.0033,\"13.3\":0.00901,\"13.4-13.7\":0.03062,\"14.0-14.4\":0.05403,\"14.5-14.8\":0.08585,\"15.0-15.1\":0.02612,\"15.2-15.3\":0.03842,\"15.4\":0.05163,\"15.5\":0.11076,\"15.6\":0.20982,\"16.0\":0.19631,\"16.1\":0.44546,\"16.2\":0.50399,\"16.3\":0.5214,\"16.4\":0.0015},P:{\"4\":0.22419,\"20\":0.19362,\"5.0-5.4\":0,\"6.2-6.4\":0.01019,\"7.2-7.4\":0.08152,\"8.2\":0,\"9.2\":0.01019,\"10.1\":0,\"11.1-11.2\":0.02038,\"12.0\":0.01019,\"13.0\":0.02038,\"14.0\":0.01019,\"15.0\":0.01019,\"16.0\":0.02038,\"17.0\":0.05095,\"18.0\":0.03057,\"19.0\":0.43819},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0.01054,\"4.4\":0,\"4.4.3-4.4.4\":0.16866},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0.00266,\"9\":0,\"10\":0,\"11\":0.01859,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0.00735,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":2.22554},H:{\"0\":1.98182},L:{\"0\":83.93026},R:{_:\"0\"},M:{\"0\":0.11018},Q:{\"13.1\":0}};\n/data/regions/UA.js\u000emodule.exports={C:{\"52\":0.16127,\"60\":0.0657,\"68\":0.31657,\"78\":0.17322,\"80\":0.01195,\"81\":0.04778,\"82\":0.01195,\"83\":0.02987,\"84\":0.00597,\"88\":0.01792,\"91\":0.01195,\"95\":0.00597,\"96\":0.01195,\"97\":0.02389,\"99\":0.01792,\"100\":0.01195,\"101\":0.02389,\"102\":0.11349,\"103\":0.04181,\"104\":0.02987,\"105\":0.02389,\"106\":0.04778,\"107\":0.03584,\"108\":0.07168,\"109\":1.68439,\"110\":1.1946,\"111\":0.00597,_:\"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 53 54 55 56 57 58 59 61 62 63 64 65 66 67 69 70 71 72 73 74 75 76 77 79 85 86 87 89 90 92 93 94 98 112 3.5 3.6\"},D:{\"31\":0.00597,\"39\":0.00597,\"49\":0.18516,\"59\":0.13738,\"61\":0.02389,\"63\":0.01195,\"66\":0.00597,\"68\":0.00597,\"69\":0.01195,\"70\":0.01195,\"71\":0.01792,\"72\":0.01792,\"73\":0.01195,\"74\":0.02389,\"75\":0.00597,\"76\":0.00597,\"77\":0.01195,\"78\":0.00597,\"79\":0.04778,\"80\":0.04181,\"81\":0.04181,\"83\":0.05973,\"84\":0.09557,\"85\":0.12543,\"86\":0.12543,\"87\":0.0896,\"88\":0.02389,\"89\":0.04181,\"90\":0.35838,\"91\":0.34046,\"92\":0.33449,\"93\":0.33449,\"94\":0.32852,\"95\":0.05376,\"96\":0.07765,\"97\":0.0896,\"98\":0.10751,\"99\":0.0657,\"100\":0.10751,\"101\":0.08362,\"102\":0.19114,\"103\":0.16127,\"104\":0.09557,\"105\":0.10154,\"106\":0.1553,\"107\":0.28073,\"108\":0.65106,\"109\":17.73981,\"110\":10.39899,\"111\":0.02389,\"112\":0.02389,_:\"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 32 33 34 35 36 37 38 40 41 42 43 44 45 46 47 48 50 51 52 53 54 55 56 57 58 60 62 64 65 67 113\"},F:{\"36\":0.01792,\"45\":0.00597,\"46\":0.00597,\"68\":0.01195,\"69\":0.01195,\"70\":0.00597,\"71\":0.00597,\"72\":0.01195,\"74\":0.00597,\"77\":0.01195,\"79\":0.0896,\"80\":0.00597,\"82\":0.03584,\"83\":0.04778,\"84\":0.04778,\"85\":0.25684,\"86\":0.05973,\"87\":0.05376,\"88\":0.01195,\"89\":0.01792,\"90\":0.01792,\"91\":0.03584,\"92\":0.01195,\"93\":0.26281,\"94\":5.60865,\"95\":6.86895,_:\"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 37 38 39 40 41 42 43 44 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 73 75 76 78 81 9.5-9.6 10.5 10.6 11.1 11.5 11.6\",\"10.0-10.1\":0,\"12.1\":0.04778},B:{\"18\":0.01792,\"85\":0.01195,\"92\":0.00597,\"96\":0.04778,\"97\":0.01792,\"106\":0.02389,\"107\":0.01792,\"108\":0.01195,\"109\":0.61522,\"110\":0.92582,_:\"12 13 14 15 16 17 79 80 81 83 84 86 87 88 89 90 91 93 94 95 98 99 100 101 102 103 104 105\"},E:{\"4\":0,\"14\":0.07168,\"15\":0.02389,_:\"0 5 6 7 8 9 10 11 12 13 3.1 3.2 6.1 7.1 10.1 11.1\",\"5.1\":0.02987,\"9.1\":0.02389,\"12.1\":0.01792,\"13.1\":0.0657,\"14.1\":0.11349,\"15.1\":0.01792,\"15.2-15.3\":0.01195,\"15.4\":0.02987,\"15.5\":0.0657,\"15.6\":0.25087,\"16.0\":0.04181,\"16.1\":0.16127,\"16.2\":0.34046,\"16.3\":0.31657,\"16.4\":0.00597},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0.00183,\"6.0-6.1\":0.00275,\"7.0-7.1\":0.01743,\"8.1-8.4\":0.0055,\"9.0-9.2\":0.0055,\"9.3\":0.04312,\"10.0-10.2\":0.00275,\"10.3\":0.02936,\"11.0-11.2\":0.01468,\"11.3-11.4\":0.01284,\"12.0-12.1\":0.00642,\"12.2-12.5\":0.17248,\"13.0-13.1\":0.0055,\"13.2\":0.00734,\"13.3\":0.0211,\"13.4-13.7\":0.06055,\"14.0-14.4\":0.12202,\"14.5-14.8\":0.23303,\"15.0-15.1\":0.05505,\"15.2-15.3\":0.10184,\"15.4\":0.10276,\"15.5\":0.1789,\"15.6\":0.58258,\"16.0\":1.45692,\"16.1\":1.78354,\"16.2\":2.00739,\"16.3\":1.46977,\"16.4\":0.01009},P:{\"4\":0.03315,\"20\":0.39774,\"5.0-5.4\":0.01011,\"6.2-6.4\":0.03084,\"7.2-7.4\":0.07734,\"8.2\":0.01016,\"9.2\":0.0103,\"10.1\":0.01011,\"11.1-11.2\":0.0221,\"12.0\":0.07134,\"13.0\":0.01105,\"14.0\":0.04112,\"15.0\":0.01105,\"16.0\":0.01105,\"17.0\":0.03315,\"18.0\":0.04419,\"19.0\":0.65186},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0.00141,\"4.1\":0.00141,\"4.2-4.3\":0.00706,\"4.4\":0,\"4.4.3-4.4.4\":0.03038},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"8\":0.02464,\"10\":0.00616,\"11\":0.36342,_:\"6 7 9 5.5\"},N:{\"10\":0.03712,\"11\":0.07423},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.12886},H:{\"0\":5.44425},L:{\"0\":24.83215},R:{_:\"0\"},M:{\"0\":0.149},Q:{\"13.1\":0}};\n/data/features/blobbuilder.js\u0005module.exports={A:{A:{\"1\":\"A B\",\"2\":\"J D E F DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB I w FC GC\",\"36\":\"J D E F A B C\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"I w J D\",\"36\":\"E F A B C K L G M N O x\"},E:{\"1\":\"J D E F A B C K L G KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w IC 0B JC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e sB\",\"2\":\"F B C QC RC SC TC rB BC UC\"},G:{\"1\":\"E XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC CC WC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"qC rC sC\",\"36\":\"uB I tC CC uC vC\"},J:{\"1\":\"A\",\"2\":\"D\"},K:{\"1\":\"h sB\",\"2\":\"A B C rB BC\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:5,C:\"Blob constructing\"};\n/data/regions/GN.js\u0010tmodule.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0.0009,\"102\":0.0009,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0,\"108\":0.0018,\"109\":0.02607,\"110\":0.02427,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.0009,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0.0009,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0.00539,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0.0018,\"56\":0.0009,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0.0009,\"70\":0.0036,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.0009,\"79\":0.0009,\"80\":0,\"81\":0.00629,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0.0018,\"88\":0.0009,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0.0009,\"99\":0.00629,\"100\":0,\"101\":0,\"102\":0.0009,\"103\":0.0009,\"104\":0,\"105\":0.0009,\"106\":0.0018,\"107\":0.0027,\"108\":0.0036,\"109\":0.0872,\"110\":0.05664,\"111\":0,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0.0009,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0.0009,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0.0027,\"38\":0.0009,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0.0009,\"60\":0.00899,\"62\":0,\"63\":0.00719,\"64\":0.03057,\"65\":0.0045,\"66\":0.01978,\"67\":0.01438,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0.0018,\"95\":0.00539,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0.0009,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0.0009,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0.0036,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0.0009,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0.0009,\"108\":0.0018,\"109\":0.03686,\"110\":0.03956},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0,\"13.1\":0,\"14.1\":0,\"15.1\":0,\"15.2-15.3\":0,\"15.4\":0,\"15.5\":0,\"15.6\":0.0018,\"16.0\":0,\"16.1\":0.00719,\"16.2\":0.0009,\"16.3\":0.0009,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0.02061,\"8.1-8.4\":0,\"9.0-9.2\":0.01311,\"9.3\":0.01874,\"10.0-10.2\":0.09368,\"10.3\":0.12178,\"11.0-11.2\":0.08806,\"11.3-11.4\":0.16113,\"12.0-12.1\":0.41218,\"12.2-12.5\":3.97567,\"13.0-13.1\":0.71008,\"13.2\":0.05433,\"13.3\":0.34661,\"13.4-13.7\":0.93865,\"14.0-14.4\":1.26839,\"14.5-14.8\":1.14849,\"15.0-15.1\":1.10352,\"15.2-15.3\":0.69883,\"15.4\":0.32412,\"15.5\":0.56581,\"15.6\":1.4164,\"16.0\":1.37331,\"16.1\":0.9705,\"16.2\":0.83186,\"16.3\":0.82061,\"16.4\":0.00375},P:{\"4\":0.20152,\"20\":0.11084,\"5.0-5.4\":0.0403,\"6.2-6.4\":0.10076,\"7.2-7.4\":0.53403,\"8.2\":0.02015,\"9.2\":0.16122,\"10.1\":0.02015,\"11.1-11.2\":0.12091,\"12.0\":0.02015,\"13.0\":0.05038,\"14.0\":0.47358,\"15.0\":0.0403,\"16.0\":0.35266,\"17.0\":0.24183,\"18.0\":0.17129,\"19.0\":1.00761},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.00031,\"4.2-4.3\":0.01228,\"4.4\":0,\"4.4.3-4.4.4\":0.0328},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0.30943,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0.0091},O:{\"0\":0.08191},H:{\"0\":5.60056},L:{\"0\":71.15547},R:{_:\"0\"},M:{\"0\":0.0273},Q:{\"13.1\":0.0182}};\n/data/features/ac3-ec3.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"C K L G M N O\",\"2\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC\",\"132\":\"aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"2\":\"D\",\"132\":\"A\"},K:{\"2\":\"A B C h rB BC\",\"132\":\"sB\"},L:{\"2\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"2\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"2\":\"2B\"},R:{\"2\":\"AD\"},S:{\"2\":\"BD CD\"}},B:6,C:\"AC-3 (Dolby Digital) and EC-3 (Dolby Digital Plus) codecs\"};\n&/data/features/alternate-stylesheet.js\u0005module.exports={A:{A:{\"1\":\"E F A B\",\"2\":\"J D DC\"},B:{\"2\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"F B C QC RC SC TC rB BC UC sB\",\"16\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"16\":\"pC\"},I:{\"2\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"16\":\"D A\"},K:{\"2\":\"h\",\"16\":\"A B C rB BC sB\"},L:{\"16\":\"H\"},M:{\"16\":\"f\"},N:{\"16\":\"A B\"},O:{\"16\":\"wC\"},P:{\"16\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"2\":\"2B\"},R:{\"16\":\"AD\"},S:{\"1\":\"BD CD\"}},B:1,C:\"Alternate stylesheet\"};\n$/data/features/element-from-point.js\u0005module.exports={A:{A:{\"1\":\"J D E F A B\",\"16\":\"DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\",\"16\":\"EC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"16\":\"I w J D E F A B C K L\"},E:{\"1\":\"w J D E F A B C K L G JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"16\":\"I IC 0B\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e rB BC UC sB\",\"16\":\"F QC RC SC TC\"},G:{\"1\":\"E VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"16\":\"0B\"},H:{\"1\":\"pC\"},I:{\"1\":\"uB I H sC tC CC uC vC\",\"16\":\"qC rC\"},J:{\"1\":\"D A\"},K:{\"1\":\"C h sB\",\"16\":\"A B rB BC\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:5,C:\"document.elementFromPoint()\"};\n\"/data/features/css-writing-mode.js\u0006\u0003module.exports={A:{A:{\"132\":\"J D E F A B DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB FC GC\",\"322\":\"DB EB FB GB HB\"},D:{\"1\":\"PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"I w J\",\"16\":\"D\",\"33\":\"0 1 2 3 4 5 6 7 8 9 E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB\"},E:{\"1\":\"B C K L G rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I IC 0B\",\"16\":\"w\",\"33\":\"J D E F A JC KC LC MC 1B\"},F:{\"1\":\"CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F B C QC RC SC TC rB BC UC sB\",\"33\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB\"},G:{\"1\":\"eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"16\":\"0B VC CC\",\"33\":\"E WC XC YC ZC aC bC cC dC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"qC rC sC\",\"33\":\"uB I tC CC uC vC\"},J:{\"33\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"36\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"33\":\"I\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:2,C:\"CSS writing-mode property\"};\n /data/features/css-snappoints.js\u0006\u000bmodule.exports={A:{A:{\"2\":\"J D E F DC\",\"6308\":\"A\",\"6436\":\"B\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"6436\":\"C K L G M N O\"},C:{\"1\":\"hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB FC GC\",\"2052\":\"GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB\"},D:{\"1\":\"iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB\",\"8258\":\"fB gB hB\"},E:{\"1\":\"B C K L G rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E IC 0B JC KC LC\",\"3108\":\"F A MC 1B\"},F:{\"1\":\"dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB QC RC SC TC rB BC UC sB\",\"8258\":\"VB WB XB YB ZB aB bB cB\"},G:{\"1\":\"eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC\",\"3108\":\"aC bC cC dC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I xC yC zC 0C 1C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"2052\":\"BD\"}},B:4,C:\"CSS Scroll Snap\"};\n#/data/features/input-file-accept.js\u0006\"module.exports={A:{A:{\"1\":\"A B\",\"2\":\"J D E F DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"1\":\"EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB FC GC\",\"132\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB\"},D:{\"1\":\"3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"I\",\"16\":\"0 1 2 w J D E y z\",\"132\":\"F A B C K L G M N O x g\"},E:{\"1\":\"C K L G rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w IC 0B JC\",\"132\":\"J D E F A B KC LC MC 1B\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F B C QC RC SC TC rB BC UC sB\"},G:{\"2\":\"XC YC\",\"132\":\"E ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"514\":\"0B VC CC WC\"},H:{\"2\":\"pC\"},I:{\"2\":\"qC rC sC\",\"260\":\"uB I tC CC\",\"514\":\"H uC vC\"},J:{\"132\":\"A\",\"260\":\"D\"},K:{\"2\":\"A B C rB BC sB\",\"514\":\"h\"},L:{\"260\":\"H\"},M:{\"2\":\"f\"},N:{\"514\":\"A\",\"1028\":\"B\"},O:{\"2\":\"wC\"},P:{\"260\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"260\":\"2B\"},R:{\"260\":\"AD\"},S:{\"1\":\"BD CD\"}},B:1,C:\"accept attribute for file input\"};\n/data/features/flexbox.js\u0006\u0013module.exports={A:{A:{\"2\":\"J D E F DC\",\"1028\":\"B\",\"1316\":\"A\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"164\":\"EC uB I w J D E F A B C K L G M N O x g y FC GC\",\"516\":\"0 1 2 3 4 z\"},D:{\"1\":\"6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"33\":\"0 1 2 3 4 5 y z\",\"164\":\"I w J D E F A B C K L G M N O x g\"},E:{\"1\":\"F A B C K L G MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"33\":\"D E KC LC\",\"164\":\"I w J IC 0B JC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e sB\",\"2\":\"F B C QC RC SC TC rB BC UC\",\"33\":\"G M\"},G:{\"1\":\"aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"33\":\"E YC ZC\",\"164\":\"0B VC CC WC XC\"},H:{\"1\":\"pC\"},I:{\"1\":\"H uC vC\",\"164\":\"uB I qC rC sC tC CC\"},J:{\"1\":\"A\",\"164\":\"D\"},K:{\"1\":\"h sB\",\"2\":\"A B C rB BC\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"B\",\"292\":\"A\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:4,C:\"CSS Flexible Box Layout Module\"};\n/data/regions/PS.js\u0011jmodule.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0.00312,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.00624,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0.00312,\"100\":0,\"101\":0,\"102\":0.00312,\"103\":0.06864,\"104\":0.00312,\"105\":0.00624,\"106\":0.00936,\"107\":0.00624,\"108\":0.01872,\"109\":0.24024,\"110\":0.1248,\"111\":0.00312,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0.00312,\"39\":0,\"40\":0,\"41\":0,\"42\":0.00312,\"43\":0.00312,\"44\":0.00624,\"45\":0.00312,\"46\":0.00624,\"47\":0,\"48\":0,\"49\":0.00312,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0.00312,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0.00312,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0.00312,\"69\":0.00312,\"70\":0,\"71\":0.00312,\"72\":0.00312,\"73\":0,\"74\":0.00312,\"75\":0,\"76\":0.00624,\"77\":0.05304,\"78\":0.00312,\"79\":0.02808,\"80\":0.00312,\"81\":0.00936,\"83\":0.00624,\"84\":0.00312,\"85\":0.00312,\"86\":0.00312,\"87\":0.01248,\"88\":0.00312,\"89\":0.00624,\"90\":0.00312,\"91\":0.00312,\"92\":0.00624,\"93\":0.00312,\"94\":0.00312,\"95\":0.02496,\"96\":0.00624,\"97\":0.00312,\"98\":0.00936,\"99\":0.00624,\"100\":0.07488,\"101\":0.00624,\"102\":0.0156,\"103\":0.02184,\"104\":0.01872,\"105\":0.02184,\"106\":0.01872,\"107\":0.0312,\"108\":0.24024,\"109\":4.32432,\"110\":2.5272,\"111\":0,\"112\":0.00312,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0.00312,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0.00312,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.04992,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0.00312,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0.00312,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.0156,\"94\":0.11544,\"95\":0.08112,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0.00312,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0.00312,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0.00312,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00312,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0.00312,\"106\":0,\"107\":0.02496,\"108\":0.00936,\"109\":0.2652,\"110\":0.3588},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0.00936,\"15\":0.00312,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0.0156,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0,\"13.1\":0.00624,\"14.1\":0.01248,\"15.1\":0.00312,\"15.2-15.3\":0.00312,\"15.4\":0.00312,\"15.5\":0.01872,\"15.6\":0.05304,\"16.0\":0.00936,\"16.1\":0.08736,\"16.2\":0.0468,\"16.3\":0.03432,\"16.4\":0},G:{\"8\":0,\"3.2\":0.00153,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0.07511,\"8.1-8.4\":0.0092,\"9.0-9.2\":0,\"9.3\":0.01839,\"10.0-10.2\":0,\"10.3\":0.01686,\"11.0-11.2\":0.0046,\"11.3-11.4\":0.00307,\"12.0-12.1\":0.0092,\"12.2-12.5\":0.23299,\"13.0-13.1\":0.00153,\"13.2\":0.00307,\"13.3\":0.01839,\"13.4-13.7\":0.05825,\"14.0-14.4\":0.14715,\"14.5-14.8\":0.34949,\"15.0-15.1\":0.07204,\"15.2-15.3\":0.14409,\"15.4\":0.15482,\"15.5\":0.37555,\"15.6\":1.04541,\"16.0\":2.46636,\"16.1\":3.06418,\"16.2\":3.67579,\"16.3\":2.33607,\"16.4\":0.01686},P:{\"4\":0.08099,\"20\":1.0022,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0.08099,\"8.2\":0,\"9.2\":0.03037,\"10.1\":0.01012,\"11.1-11.2\":0.10123,\"12.0\":0.02025,\"13.0\":0.12148,\"14.0\":0.10123,\"15.0\":0.05062,\"16.0\":0.18222,\"17.0\":0.18222,\"18.0\":0.16197,\"19.0\":2.29797},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0,\"4.4\":0,\"4.4.3-4.4.4\":0.11808},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0.00672,\"9\":0,\"10\":0.00336,\"11\":0.0336,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.0688},H:{\"0\":0.35824},L:{\"0\":69.65264},R:{_:\"0\"},M:{\"0\":0.08256},Q:{\"13.1\":0}};\n/data/features/proximity.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"2\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB I w J D E F A B C K L FC GC\"},D:{\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"2\":\"A B C h rB BC sB\"},L:{\"2\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"2\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"2\":\"2B\"},R:{\"2\":\"AD\"},S:{\"1\":\"BD CD\"}},B:4,C:\"Proximity API\"};\n/data/features/do-not-track.js\u0005module.exports={A:{A:{\"2\":\"J D E DC\",\"164\":\"F A\",\"260\":\"B\"},B:{\"1\":\"N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"260\":\"C K L G M\"},C:{\"1\":\"9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB I w J D E FC GC\",\"516\":\"0 1 2 3 4 5 6 7 8 F A B C K L G M N O x g y z\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"I w J D E F A B C K L G M N O x g y z\"},E:{\"1\":\"J A B C JC MC 1B rB\",\"2\":\"I w K L G IC 0B sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"1028\":\"D E F KC LC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e sB\",\"2\":\"F B QC RC SC TC rB BC UC\"},G:{\"1\":\"aC bC cC dC eC fC gC\",\"2\":\"0B VC CC WC XC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"1028\":\"E YC ZC\"},H:{\"1\":\"pC\"},I:{\"1\":\"H uC vC\",\"2\":\"uB I qC rC sC tC CC\"},J:{\"16\":\"D\",\"1028\":\"A\"},K:{\"1\":\"h sB\",\"16\":\"A B C rB BC\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"164\":\"A\",\"260\":\"B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:7,C:\"Do Not Track API\"};\n\"/data/features/meta-theme-color.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"2\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB\",\"132\":\"h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"258\":\"GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB\"},E:{\"1\":\"G OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A B C K L IC 0B JC KC LC MC 1B rB sB 2B NC\"},F:{\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\"},G:{\"1\":\"oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"2\":\"A B C h rB BC sB\"},L:{\"513\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"1\":\"g yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I\",\"16\":\"xC\"},Q:{\"2\":\"2B\"},R:{\"2\":\"AD\"},S:{\"2\":\"BD CD\"}},B:1,C:\"theme-color Meta Tag\"};\n%/data/features/http-live-streaming.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"C K L G M N O\",\"2\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"J D E F A B C K L G KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w IC 0B JC\"},F:{\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\"},G:{\"1\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"1\":\"uB I H tC CC uC vC\",\"2\":\"qC rC sC\"},J:{\"1\":\"A\",\"2\":\"D\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"2\":\"BD CD\"}},B:7,C:\"HTTP Live Streaming (HLS)\"};\n!/data/features/permissions-api.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"1\":\"NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB FC GC\"},D:{\"1\":\"KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB\"},E:{\"1\":\"tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B\"},F:{\"1\":\"7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 F B C G M N O x g y z QC RC SC TC rB BC UC sB\"},G:{\"1\":\"tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:5,C:\"Permissions API\"};\n/data/regions/NZ.js\u0011module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0.00555,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.00555,\"53\":0,\"54\":0.00555,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0.01109,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.03882,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0.00555,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0.00555,\"97\":0,\"98\":0,\"99\":0.00555,\"100\":0,\"101\":0.00555,\"102\":0.03882,\"103\":0,\"104\":0.00555,\"105\":0.00555,\"106\":0.00555,\"107\":0.01109,\"108\":0.06101,\"109\":1.06483,\"110\":0.72653,\"111\":0.00555,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0.00555,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0.01664,\"35\":0,\"36\":0,\"37\":0,\"38\":0.07764,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0.02218,\"50\":0,\"51\":0,\"52\":0,\"53\":0.01109,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0.00555,\"60\":0,\"61\":0.00555,\"62\":0,\"63\":0,\"64\":0,\"65\":0.01109,\"66\":0.06655,\"67\":0.00555,\"68\":0.00555,\"69\":0.00555,\"70\":0.00555,\"71\":0.00555,\"72\":0.00555,\"73\":0.00555,\"74\":0.01109,\"75\":0.00555,\"76\":0.01664,\"77\":0.00555,\"78\":0.00555,\"79\":0.09428,\"80\":0.00555,\"81\":0.00555,\"83\":0.01109,\"84\":0.01664,\"85\":0.00555,\"86\":0.00555,\"87\":0.03882,\"88\":0.00555,\"89\":0.01109,\"90\":0.02773,\"91\":0.00555,\"92\":0.02773,\"93\":0.04991,\"94\":0.01109,\"95\":0.00555,\"96\":0.01664,\"97\":0.02773,\"98\":0.02218,\"99\":0.04437,\"100\":0.02218,\"101\":0.02218,\"102\":0.02773,\"103\":0.23848,\"104\":0.04437,\"105\":0.05546,\"106\":0.06101,\"107\":0.16638,\"108\":0.94837,\"109\":9.35056,\"110\":6.16715,\"111\":0.01109,\"112\":0.00555,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0.00555,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0.00555,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0.03328,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.00555,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.03882,\"94\":0.32167,\"95\":0.14974,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0.00555,\"18\":0.00555,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0.00555,\"103\":0.00555,\"104\":0.00555,\"105\":0.00555,\"106\":0.00555,\"107\":0.04991,\"108\":0.07764,\"109\":1.46414,\"110\":2.0853},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0.00555,\"13\":0.02773,\"14\":0.12756,\"15\":0.02218,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0.01664,\"12.1\":0.03328,\"13.1\":0.19411,\"14.1\":0.31612,\"15.1\":0.04437,\"15.2-15.3\":0.03882,\"15.4\":0.11647,\"15.5\":0.22184,\"15.6\":1.20348,\"16.0\":0.11092,\"16.1\":0.31612,\"16.2\":1.20903,\"16.3\":0.73207,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0.02046,\"7.0-7.1\":0.00682,\"8.1-8.4\":0.01364,\"9.0-9.2\":0.03751,\"9.3\":0.1978,\"10.0-10.2\":0.00341,\"10.3\":0.24214,\"11.0-11.2\":0.02728,\"11.3-11.4\":0.17393,\"12.0-12.1\":0.02387,\"12.2-12.5\":1.10496,\"13.0-13.1\":0.00682,\"13.2\":0,\"13.3\":0.05457,\"13.4-13.7\":0.10231,\"14.0-14.4\":0.3274,\"14.5-14.8\":0.8526,\"15.0-15.1\":0.25578,\"15.2-15.3\":0.31034,\"15.4\":0.32399,\"15.5\":0.67185,\"15.6\":2.9568,\"16.0\":2.72149,\"16.1\":8.95567,\"16.2\":8.73399,\"16.3\":3.93558,\"16.4\":0.01023},P:{\"4\":0.26441,\"20\":1.16342,\"5.0-5.4\":0.02115,\"6.2-6.4\":0,\"7.2-7.4\":0.01058,\"8.2\":0,\"9.2\":0,\"10.1\":0,\"11.1-11.2\":0.01058,\"12.0\":0,\"13.0\":0.03173,\"14.0\":0.02115,\"15.0\":0.02115,\"16.0\":0.03173,\"17.0\":0.04231,\"18.0\":0.07404,\"19.0\":1.72397},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0.01622,\"4.4\":0,\"4.4.3-4.4.4\":0.08924},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.1331,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.04454},H:{\"0\":0.18554},L:{\"0\":32.09473},R:{_:\"0\"},M:{\"0\":0.47212},Q:{\"13.1\":0.00445}};\n&/data/features/background-clip-text.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"G M N O\",\"33\":\"C K L P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB FC GC\"},D:{\"33\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"L G NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"16\":\"IC 0B\",\"33\":\"I w J D E F A B C K JC KC LC MC 1B rB sB 2B\"},F:{\"2\":\"F B C QC RC SC TC rB BC UC sB\",\"33\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\"},G:{\"1\":\"mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"16\":\"0B VC CC WC\",\"33\":\"E XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC\"},H:{\"2\":\"pC\"},I:{\"16\":\"uB qC rC sC\",\"33\":\"I H tC CC uC vC\"},J:{\"33\":\"D A\"},K:{\"16\":\"A B C rB BC sB\",\"33\":\"h\"},L:{\"33\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"33\":\"wC\"},P:{\"33\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"33\":\"2B\"},R:{\"33\":\"AD\"},S:{\"1\":\"BD CD\"}},B:7,C:\"Background-clip: text\"};\n/data/features/es6-number.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB I w J D E F A B C K L G FC GC\",\"132\":\"0 1 M N O x g y z\",\"260\":\"2 3 4 5 6 7\",\"516\":\"8\"},D:{\"1\":\"BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"I w J D E F A B C K L G M N O\",\"1028\":\"0 1 2 3 4 5 6 7 8 9 x g y z AB\"},E:{\"1\":\"F A B C K L G MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E IC 0B JC KC LC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F B C QC RC SC TC rB BC UC sB\",\"1028\":\"G M N O x g\"},G:{\"1\":\"aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC\",\"1028\":\"tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:6,C:\"ES6 Number\"};\n(/data/features/indeterminate-checkbox.js\u0005module.exports={A:{A:{\"1\":\"J D E F A B\",\"16\":\"DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB GC\",\"2\":\"EC uB\",\"16\":\"FC\"},D:{\"1\":\"5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 I w J D E F A B C K L G M N O x g y z\"},E:{\"1\":\"J D E F A B C K L G KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w IC 0B JC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e UC sB\",\"2\":\"F B QC RC SC TC rB BC\"},G:{\"1\":\"hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H uC vC\",\"2\":\"uB I qC rC sC tC CC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:1,C:\"indeterminate checkbox\"};\n(/data/features/css-content-visibility.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O P Q R S T\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"1\":\"U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T\"},E:{\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB QC RC SC TC rB BC UC sB\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"1\":\"g 5C 6C tB 7C 8C 9C\",\"2\":\"I xC yC zC 0C 1C 1B 2C 3C 4C\"},Q:{\"2\":\"2B\"},R:{\"1\":\"AD\"},S:{\"2\":\"BD CD\"}},B:5,C:\"CSS content-visibility\"};\n\"/data/features/array-find-index.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 EC uB I w J D E F A B C K L G M N O x g y z FC GC\"},D:{\"1\":\"MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB\"},E:{\"1\":\"E F A B C K L G LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D IC 0B JC KC\"},F:{\"1\":\"9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 F B C G M N O x g y z QC RC SC TC rB BC UC sB\"},G:{\"1\":\"E ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC CC WC XC YC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D\",\"16\":\"A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:6,C:\"Array.prototype.findIndex\"};\n/data/regions/LA.js\u0011module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.00224,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0.00224,\"67\":0,\"68\":0.00224,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.00224,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0.00224,\"95\":0,\"96\":0,\"97\":0,\"98\":0.00224,\"99\":0,\"100\":0,\"101\":0.00224,\"102\":0.00224,\"103\":0,\"104\":0,\"105\":0.00224,\"106\":0,\"107\":0.00448,\"108\":0.00448,\"109\":0.12326,\"110\":0.09412,\"111\":0.00448,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0.00224,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0.00448,\"44\":0,\"45\":0,\"46\":0.00224,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0.00224,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0.00224,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0.00224,\"63\":0.00224,\"64\":0,\"65\":0.00224,\"66\":0,\"67\":0,\"68\":0.00224,\"69\":0.00224,\"70\":0.00672,\"71\":0,\"72\":0.00224,\"73\":0.00448,\"74\":0.00224,\"75\":0.00448,\"76\":0,\"77\":0,\"78\":0.00448,\"79\":0.00672,\"80\":0.00448,\"81\":0.00224,\"83\":0.01121,\"84\":0.00448,\"85\":0,\"86\":0.00672,\"87\":0.01345,\"88\":0.00896,\"89\":0.00224,\"90\":0.00672,\"91\":0.00448,\"92\":0.00896,\"93\":0,\"94\":0.00448,\"95\":0.00224,\"96\":0.00448,\"97\":0.00672,\"98\":0.00448,\"99\":0.00672,\"100\":0.00672,\"101\":0.00448,\"102\":0.00672,\"103\":0.02017,\"104\":0.00896,\"105\":0.02241,\"106\":0.01793,\"107\":0.0381,\"108\":0.07171,\"109\":1.68747,\"110\":1.04431,\"111\":0.00224,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0.00224,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.00672,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0.00224,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0.02913,\"95\":0.02241,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0.00224,\"17\":0,\"18\":0.00448,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0.00224,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00672,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0.00224,\"102\":0,\"103\":0,\"104\":0,\"105\":0,\"106\":0.00224,\"107\":0.00224,\"108\":0.01121,\"109\":0.16135,\"110\":0.25323},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.00224,\"14\":0.00448,\"15\":0,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0.00224,\"10.1\":0,\"11.1\":0,\"12.1\":0.00448,\"13.1\":0.00896,\"14.1\":0.01569,\"15.1\":0.00448,\"15.2-15.3\":0.00672,\"15.4\":0.00672,\"15.5\":0.00672,\"15.6\":0.05378,\"16.0\":0.00448,\"16.1\":0.02241,\"16.2\":0.02913,\"16.3\":0.06051,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0.01654,\"7.0-7.1\":0.00236,\"8.1-8.4\":0.00472,\"9.0-9.2\":0.02835,\"9.3\":0.04252,\"10.0-10.2\":0.01181,\"10.3\":0.0567,\"11.0-11.2\":0.02835,\"11.3-11.4\":0.01654,\"12.0-12.1\":0.02362,\"12.2-12.5\":1.15758,\"13.0-13.1\":0.0189,\"13.2\":0.03307,\"13.3\":0.08268,\"13.4-13.7\":0.27876,\"14.0-14.4\":0.85756,\"14.5-14.8\":1.27807,\"15.0-15.1\":0.43941,\"15.2-15.3\":0.64966,\"15.4\":0.55044,\"15.5\":1.13868,\"15.6\":2.45927,\"16.0\":2.56086,\"16.1\":3.41605,\"16.2\":3.39715,\"16.3\":2.17815,\"16.4\":0.00709},P:{\"4\":0.16211,\"20\":0.68898,\"5.0-5.4\":0,\"6.2-6.4\":0.01013,\"7.2-7.4\":0.20264,\"8.2\":0.01013,\"9.2\":0.0304,\"10.1\":0,\"11.1-11.2\":0.08106,\"12.0\":0.0304,\"13.0\":0.0304,\"14.0\":0.13172,\"15.0\":0.07092,\"16.0\":0.20264,\"17.0\":0.13172,\"18.0\":0.20264,\"19.0\":1.82378},I:{\"0\":0,\"3\":0,\"4\":0.02418,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0.00967,\"4.4\":0,\"4.4.3-4.4.4\":0.06287},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0.00586,\"9\":0.00293,\"10\":0.00293,\"11\":0.02637,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":1.1173},H:{\"0\":0.30852},L:{\"0\":68.00315},R:{_:\"0\"},M:{\"0\":0.10087},Q:{\"13.1\":0.05431}};\n/data/regions/AS.js\u0010\u0015module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0,\"108\":0,\"109\":0.10962,\"110\":0.05116,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0.00731,\"73\":0,\"74\":0,\"75\":0.16078,\"76\":2.29471,\"77\":0.2704,\"78\":0,\"79\":0.10962,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0.02192,\"89\":0,\"90\":0,\"91\":0,\"92\":0.01462,\"93\":0.87696,\"94\":0.01462,\"95\":0,\"96\":0.07308,\"97\":0,\"98\":0,\"99\":0,\"100\":0.01462,\"101\":0,\"102\":0.02923,\"103\":1.732,\"104\":0.00731,\"105\":0.095,\"106\":0.00731,\"107\":0.07308,\"108\":2.99628,\"109\":12.43091,\"110\":3.60284,\"111\":0.00731,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00731,\"93\":0,\"94\":0.01462,\"95\":0.00731,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0.00731,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0.00731,\"100\":0,\"101\":0,\"102\":0,\"103\":0.00731,\"104\":0,\"105\":0,\"106\":0,\"107\":0.02923,\"108\":0.01462,\"109\":1.22044,\"110\":1.63699},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.05846,\"14\":0.04385,\"15\":0.00731,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0.00731,\"12.1\":0.05846,\"13.1\":0.13154,\"14.1\":0.54079,\"15.1\":5.91217,\"15.2-15.3\":0.65772,\"15.4\":0.60656,\"15.5\":0.59195,\"15.6\":4.45788,\"16.0\":0.39463,\"16.1\":2.23625,\"16.2\":4.90367,\"16.3\":2.25817,\"16.4\":0.02192},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0.02633,\"10.0-10.2\":0,\"10.3\":0.01316,\"11.0-11.2\":0.02194,\"11.3-11.4\":0,\"12.0-12.1\":0,\"12.2-12.5\":0.4476,\"13.0-13.1\":0,\"13.2\":0,\"13.3\":0.02194,\"13.4-13.7\":0.00439,\"14.0-14.4\":0.11848,\"14.5-14.8\":0.09215,\"15.0-15.1\":0.11409,\"15.2-15.3\":0.26329,\"15.4\":0.64068,\"15.5\":1.07072,\"15.6\":4.93234,\"16.0\":3.56761,\"16.1\":12.85305,\"16.2\":11.52342,\"16.3\":5.52036,\"16.4\":0.05266},P:{\"4\":0.041,\"20\":0.05125,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0.03075,\"8.2\":0,\"9.2\":0,\"10.1\":0,\"11.1-11.2\":0,\"12.0\":0,\"13.0\":0,\"14.0\":0.01025,\"15.0\":0,\"16.0\":0.01025,\"17.0\":0.0205,\"18.0\":0.01025,\"19.0\":0.09225},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0,\"4.4\":0,\"4.4.3-4.4.4\":0.13577},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.00538},H:{\"0\":0.0051},L:{\"0\":5.69668},R:{_:\"0\"},M:{\"0\":0.00808},Q:{\"13.1\":0.00808}};\n*/data/features/css-file-selector-button.js\u0005module.exports={A:{D:{\"1\":\"Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"33\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X\"},L:{\"1\":\"H\"},B:{\"1\":\"Y Z a b c d e i j k l m n o p q r s t u v f H\",\"33\":\"C K L G M N O P Q R S T U V W X\"},C:{\"1\":\"xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R FC GC\"},M:{\"1\":\"f\"},A:{\"2\":\"J D E F DC\",\"33\":\"A B\"},F:{\"1\":\"nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F B C QC RC SC TC rB BC UC sB\",\"33\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},E:{\"1\":\"G NC OC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"PC\",\"33\":\"I w J D E F A B C K L IC 0B JC KC LC MC 1B rB sB 2B\"},G:{\"1\":\"nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"33\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC\"},P:{\"1\":\"g 6C tB 7C 8C 9C\",\"33\":\"I xC yC zC 0C 1C 1B 2C 3C 4C 5C\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC\",\"33\":\"uC vC\"}},B:6,C:\"::file-selector-button CSS pseudo-element\"};\n\"/data/features/cookie-store-api.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\",\"194\":\"P Q R S T U V\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"1\":\"W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB\",\"194\":\"dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V\"},E:{\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB QC RC SC TC rB BC UC sB\",\"194\":\"SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"1\":\"g 5C 6C tB 7C 8C 9C\",\"2\":\"I xC yC zC 0C 1C 1B 2C 3C 4C\"},Q:{\"2\":\"2B\"},R:{\"1\":\"AD\"},S:{\"2\":\"BD CD\"}},B:7,C:\"Cookie Store API\"};\n/data/regions/RW.js\u0012Kmodule.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0.00472,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.00472,\"53\":0,\"54\":0,\"55\":0,\"56\":0.00943,\"57\":0,\"58\":0,\"59\":0,\"60\":0.00472,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0.00472,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.00472,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0.00472,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0.00472,\"99\":0.00472,\"100\":0,\"101\":0,\"102\":0.02829,\"103\":0.00472,\"104\":0.00472,\"105\":0.00472,\"106\":0.00472,\"107\":0.00943,\"108\":0.02829,\"109\":0.59409,\"110\":0.5328,\"111\":0.02829,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.00472,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0.00472,\"35\":0,\"36\":0,\"37\":0,\"38\":0.00472,\"39\":0,\"40\":0.00472,\"41\":0,\"42\":0,\"43\":0.00472,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0.00472,\"50\":0.00472,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0.00472,\"56\":0,\"57\":0,\"58\":0.00472,\"59\":0,\"60\":0,\"61\":0.00472,\"62\":0,\"63\":0,\"64\":0.00472,\"65\":0.01886,\"66\":0,\"67\":0.00472,\"68\":0,\"69\":0.01415,\"70\":0,\"71\":0.00472,\"72\":0.00472,\"73\":0,\"74\":0.01886,\"75\":0.00472,\"76\":0,\"77\":0.00472,\"78\":0,\"79\":0.01415,\"80\":0.03772,\"81\":0.00472,\"83\":0.01415,\"84\":0.03301,\"85\":0.00472,\"86\":0.00472,\"87\":0.01886,\"88\":0.00472,\"89\":0.00472,\"90\":0.00943,\"91\":0.01886,\"92\":0.00943,\"93\":0.01886,\"94\":0.00472,\"95\":0.04715,\"96\":0.00472,\"97\":0.01415,\"98\":0.02358,\"99\":0.01886,\"100\":0.02358,\"101\":0.00472,\"102\":0.02358,\"103\":0.07073,\"104\":0.02358,\"105\":0.04715,\"106\":0.05187,\"107\":0.14617,\"108\":0.44793,\"109\":8.49643,\"110\":5.87018,\"111\":0.01886,\"112\":0.00943,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0.00472,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0.00472,\"31\":0,\"32\":0,\"33\":0.00472,\"34\":0,\"35\":0.01415,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0.00943,\"47\":0.00472,\"48\":0,\"49\":0,\"50\":0,\"51\":0.00943,\"52\":0,\"53\":0.00943,\"54\":0,\"55\":0.00943,\"56\":0.00943,\"57\":0,\"58\":0.00472,\"60\":0.05658,\"62\":0,\"63\":0.25461,\"64\":0.05658,\"65\":0.01415,\"66\":0.23575,\"67\":0.35363,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0.0613,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.00943,\"94\":0.16031,\"95\":0.21689,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0.00472},B:{\"12\":0.03301,\"13\":0.04244,\"14\":0.01415,\"15\":0.00472,\"16\":0.00943,\"17\":0.00472,\"18\":0.09902,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0.00943,\"85\":0.00943,\"86\":0,\"87\":0,\"88\":0,\"89\":0.02358,\"90\":0.00472,\"91\":0,\"92\":0.04244,\"93\":0.00472,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0.00472,\"101\":0,\"102\":0.00472,\"103\":0,\"104\":0.00472,\"105\":0.00472,\"106\":0.02358,\"107\":0.03772,\"108\":0.04715,\"109\":0.99487,\"110\":1.01373},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.00943,\"14\":0.00943,\"15\":0,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0.00472,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0.00472,\"13.1\":0.01415,\"14.1\":0.02829,\"15.1\":0.00943,\"15.2-15.3\":0,\"15.4\":0.00472,\"15.5\":0.00943,\"15.6\":0.0613,\"16.0\":0.00472,\"16.1\":0.03301,\"16.2\":0.03301,\"16.3\":0.04715,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0.00833,\"6.0-6.1\":0,\"7.0-7.1\":0.06422,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0.04401,\"10.0-10.2\":0.00119,\"10.3\":0.02498,\"11.0-11.2\":0.00238,\"11.3-11.4\":0.00476,\"12.0-12.1\":0.01427,\"12.2-12.5\":1.06328,\"13.0-13.1\":0.0107,\"13.2\":0.00119,\"13.3\":0.0226,\"13.4-13.7\":0.08088,\"14.0-14.4\":0.27593,\"14.5-14.8\":0.30804,\"15.0-15.1\":0.15343,\"15.2-15.3\":0.28782,\"15.4\":0.24144,\"15.5\":0.41627,\"15.6\":0.7933,\"16.0\":0.65771,\"16.1\":1.44506,\"16.2\":2.89964,\"16.3\":1.33445,\"16.4\":0.00238},P:{\"4\":0.11506,\"20\":0.23012,\"5.0-5.4\":0.02092,\"6.2-6.4\":0,\"7.2-7.4\":0.09414,\"8.2\":0,\"9.2\":0.01046,\"10.1\":0,\"11.1-11.2\":0.01046,\"12.0\":0,\"13.0\":0.01046,\"14.0\":0,\"15.0\":0.01046,\"16.0\":0.08368,\"17.0\":0.08368,\"18.0\":0.03138,\"19.0\":0.80541},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.00524,\"4.2-4.3\":0.00699,\"4.4\":0,\"4.4.3-4.4.4\":0.09606},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.04244,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0.05285,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0.00529},O:{\"0\":0.22726},H:{\"0\":6.76473},L:{\"0\":55.93957},R:{_:\"0\"},M:{\"0\":0.06342},Q:{\"13.1\":0}};\n/data/features/rellist.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M\",\"132\":\"N\"},C:{\"1\":\"7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 EC uB I w J D E F A B C K L G M N O x g y z FC GC\"},D:{\"1\":\"eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB\",\"132\":\"RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB\"},E:{\"1\":\"F A B C K L G MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E IC 0B JC KC LC\"},F:{\"1\":\"TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB QC RC SC TC rB BC UC sB\",\"132\":\"EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB\"},G:{\"1\":\"aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I\",\"132\":\"xC yC zC 0C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:1,C:\"relList (DOMTokenList)\"};\n/data/regions/GE.js\u0011module.exports={C:{\"2\":0,\"3\":0,\"4\":0.00454,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0.00454,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.02722,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0.01361,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00907,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0.00907,\"100\":0,\"101\":0,\"102\":0.00907,\"103\":0,\"104\":0.01815,\"105\":0.00454,\"106\":0.00907,\"107\":0.00454,\"108\":0.02722,\"109\":0.40833,\"110\":0.24954,\"111\":0.00454,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0.00454,\"36\":0,\"37\":0,\"38\":0.00454,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0.01361,\"48\":0,\"49\":0.02722,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0.00454,\"57\":0,\"58\":0.00454,\"59\":0,\"60\":0,\"61\":0,\"62\":0.00454,\"63\":0.00907,\"64\":0,\"65\":0,\"66\":0.00454,\"67\":0,\"68\":0.01361,\"69\":0,\"70\":0.00454,\"71\":0,\"72\":0,\"73\":0.01815,\"74\":0.00907,\"75\":0.00454,\"76\":0,\"77\":0.00454,\"78\":0.01361,\"79\":0.09528,\"80\":0.00907,\"81\":0.00907,\"83\":0.07713,\"84\":0.00454,\"85\":0.00907,\"86\":0.05444,\"87\":0.0363,\"88\":0.00907,\"89\":0.00454,\"90\":0.01815,\"91\":0.01815,\"92\":0.00907,\"93\":0.00454,\"94\":0.00907,\"95\":0.01361,\"96\":0.00907,\"97\":0.01361,\"98\":0.03176,\"99\":0.01361,\"100\":0.01361,\"101\":0.00907,\"102\":0.05444,\"103\":0.06352,\"104\":0.02269,\"105\":0.03176,\"106\":0.04537,\"107\":0.07713,\"108\":0.38565,\"109\":8.44789,\"110\":4.55061,\"111\":0.00454,\"112\":0.00454,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0.00907,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0.00454,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0.01815,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0.00454,\"64\":0,\"65\":0,\"66\":0,\"67\":0.00454,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0.01361,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0.00454,\"85\":0.02269,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.06352,\"94\":0.75768,\"95\":0.73046,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0.00454,\"13\":0.01815,\"14\":0.07259,\"15\":0,\"16\":0.02722,\"17\":0,\"18\":0.02722,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.01361,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0.00454,\"99\":0.00454,\"100\":0,\"101\":0.00907,\"102\":0,\"103\":0.00454,\"104\":0,\"105\":0.00907,\"106\":0.00907,\"107\":0.02269,\"108\":0.0363,\"109\":0.65787,\"110\":0.8212},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.00454,\"14\":0.01815,\"15\":0.00907,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0.00454,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0.00454,\"13.1\":0.01815,\"14.1\":0.04537,\"15.1\":0.00907,\"15.2-15.3\":0.00454,\"15.4\":0.01815,\"15.5\":0.04083,\"15.6\":0.17241,\"16.0\":0.02269,\"16.1\":0.08167,\"16.2\":0.13611,\"16.3\":0.13157,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0.02446,\"6.0-6.1\":0,\"7.0-7.1\":0.16744,\"8.1-8.4\":0.00376,\"9.0-9.2\":0.00188,\"9.3\":0.0602,\"10.0-10.2\":0,\"10.3\":0.12041,\"11.0-11.2\":0.04515,\"11.3-11.4\":0.00753,\"12.0-12.1\":0.0301,\"12.2-12.5\":0.79205,\"13.0-13.1\":0.00564,\"13.2\":0.00376,\"13.3\":0.03763,\"13.4-13.7\":0.13169,\"14.0-14.4\":0.44024,\"14.5-14.8\":0.69422,\"15.0-15.1\":0.17497,\"15.2-15.3\":0.27468,\"15.4\":0.39132,\"15.5\":0.50797,\"15.6\":1.23041,\"16.0\":2.79946,\"16.1\":3.25663,\"16.2\":3.42031,\"16.3\":2.37992,\"16.4\":0.00941},P:{\"4\":0.55301,\"20\":0.38606,\"5.0-5.4\":0.01043,\"6.2-6.4\":0,\"7.2-7.4\":0.0626,\"8.2\":0,\"9.2\":0.01043,\"10.1\":0,\"11.1-11.2\":0.0313,\"12.0\":0,\"13.0\":0.04174,\"14.0\":0.01043,\"15.0\":0.01043,\"16.0\":0.07304,\"17.0\":0.0626,\"18.0\":0.0626,\"19.0\":0.8869},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.01964,\"4.2-4.3\":0.15713,\"4.4\":0,\"4.4.3-4.4.4\":0.74637},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.01815,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.0437},H:{\"0\":0.27412},L:{\"0\":58.28374},R:{_:\"0\"},M:{\"0\":0.07102},Q:{\"13.1\":0}};\n/data/regions/WS.js\f1module.exports={C:{\"30\":0.02382,\"95\":0.00397,\"102\":0.00397,\"107\":0.05161,\"108\":0.00794,\"109\":0.6749,\"110\":0.76224,_:\"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 96 97 98 99 100 101 103 104 105 106 111 112 3.5 3.6\"},D:{\"27\":0.0397,\"69\":0.0397,\"71\":0.01191,\"73\":0.01588,\"76\":0.00794,\"79\":0.01985,\"80\":0.00794,\"81\":0.01588,\"87\":0.01191,\"88\":0.00794,\"89\":0.00397,\"91\":0.01985,\"92\":0.03573,\"93\":0.01191,\"94\":0.00794,\"95\":0.3176,\"96\":0.01191,\"98\":0.04367,\"99\":0.01985,\"100\":0.02382,\"101\":0.00397,\"102\":0.01588,\"103\":0.1191,\"104\":0.07543,\"105\":0.08337,\"106\":0.08337,\"107\":0.12307,\"108\":0.76621,\"109\":12.35464,\"110\":6.91971,\"111\":0.08337,\"112\":0.14689,_:\"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 70 72 74 75 77 78 83 84 85 86 90 97 113\"},F:{\"36\":0.00794,\"81\":0.00397,\"94\":0.04367,\"95\":0.05955,_:\"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 82 83 84 85 86 87 88 89 90 91 92 93 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1\",\"10.0-10.1\":0},B:{\"15\":0.01588,\"16\":0.01191,\"17\":0.01588,\"18\":0.06749,\"84\":0.02382,\"90\":0.07543,\"99\":0.00794,\"101\":0.03573,\"102\":0.00397,\"103\":0.01191,\"105\":0.01985,\"106\":0.01191,\"107\":0.10719,\"108\":0.1588,\"109\":1.48081,\"110\":2.15968,_:\"12 13 14 79 80 81 83 85 86 87 88 89 91 92 93 94 95 96 97 98 100 104\"},E:{\"4\":0,\"13\":0.04367,\"14\":0.00794,\"15\":0.00397,_:\"0 5 6 7 8 9 10 11 12 3.1 3.2 5.1 6.1 7.1 9.1 10.1 11.1 12.1 16.4\",\"13.1\":0.54786,\"14.1\":0.13498,\"15.1\":0.03176,\"15.2-15.3\":0.00397,\"15.4\":0.36524,\"15.5\":0.00794,\"15.6\":0.27393,\"16.0\":0.00397,\"16.1\":0.03176,\"16.2\":0.18262,\"16.3\":0.05955},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0.00219,\"7.0-7.1\":0,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0.02961,\"10.0-10.2\":0,\"10.3\":0.02083,\"11.0-11.2\":0,\"11.3-11.4\":0.09759,\"12.0-12.1\":0.01864,\"12.2-12.5\":0.56472,\"13.0-13.1\":0.00219,\"13.2\":0.00219,\"13.3\":0.05812,\"13.4-13.7\":0.09869,\"14.0-14.4\":0.26866,\"14.5-14.8\":0.45178,\"15.0-15.1\":0.04496,\"15.2-15.3\":0.19738,\"15.4\":0.42766,\"15.5\":0.55266,\"15.6\":1.11739,\"16.0\":0.77307,\"16.1\":1.46609,\"16.2\":2.72603,\"16.3\":0.61297,\"16.4\":0},P:{\"4\":0.08127,\"20\":0.25398,\"5.0-5.4\":0.03048,\"6.2-6.4\":0.04064,\"7.2-7.4\":0.26414,\"8.2\":0.01016,\"9.2\":0.0307,\"10.1\":0.03048,\"11.1-11.2\":0.04064,\"12.0\":0.03048,\"13.0\":0.24382,\"14.0\":0.14223,\"15.0\":0.03048,\"16.0\":2.24522,\"17.0\":0.0508,\"18.0\":0.47749,\"19.0\":1.44263},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0.00164,\"4.4\":0,\"4.4.3-4.4.4\":0.01645},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"11\":0.02382,_:\"6 7 8 9 10 5.5\"},N:{\"10\":0.03712,\"11\":0.07423},S:{\"2.5\":0.02412,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.36783},H:{\"0\":2.00379},L:{\"0\":53.15773},R:{_:\"0\"},M:{\"0\":0.09648},Q:{\"13.1\":0.1206}};\n/data/features/text-overflow.js\u0005module.exports={A:{A:{\"1\":\"J D E F A B\",\"2\":\"DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"8\":\"EC uB I w J FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e rB BC UC sB\",\"33\":\"F QC RC SC TC\"},G:{\"1\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"1\":\"pC\"},I:{\"1\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"1\":\"D A\"},K:{\"1\":\"h sB\",\"33\":\"A B C rB BC\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:2,C:\"CSS3 Text-overflow\"};\n/package.json\u0002{\n  \"name\": \"caniuse-lite\",\n  \"version\": \"1.0.30001468\",\n  \"description\": \"A smaller version of caniuse-db, with only the essentials!\",\n  \"main\": \"dist/unpacker/index.js\",\n  \"files\": [\n    \"data\",\n    \"dist\"\n  ],\n  \"keywords\": [\n    \"support\"\n  ],\n  \"author\": {\n    \"name\": \"Ben Briggs\",\n    \"email\": \"beneb.info@gmail.com\",\n    \"url\": \"http://beneb.info\"\n  },\n  \"repository\": \"browserslist/caniuse-lite\",\n  \"funding\": [\n    {\n      \"type\": \"opencollective\",\n      \"url\": \"https://opencollective.com/browserslist\"\n    },\n    {\n      \"type\": \"tidelift\",\n      \"url\": \"https://tidelift.com/funding/github/npm/caniuse-lite\"\n    }\n  ],\n  \"license\": \"CC-BY-4.0\"\n}\n/data/regions/SV.js\u0011module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0.01292,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.01722,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0.00861,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.00861,\"79\":0,\"80\":0,\"81\":0,\"82\":0.00431,\"83\":0,\"84\":0.03014,\"85\":0,\"86\":0,\"87\":0,\"88\":0.00431,\"89\":0,\"90\":0,\"91\":0.01292,\"92\":0,\"93\":0,\"94\":0,\"95\":0.00431,\"96\":0,\"97\":0,\"98\":0,\"99\":0.00861,\"100\":0.00431,\"101\":0,\"102\":0.03444,\"103\":0.01292,\"104\":0.07749,\"105\":0.00431,\"106\":0.00861,\"107\":0.01292,\"108\":0.01292,\"109\":0.52521,\"110\":0.50799,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0.02153,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0.00431,\"66\":0,\"67\":0.00431,\"68\":0.00431,\"69\":0,\"70\":0.00431,\"71\":0,\"72\":0,\"73\":0,\"74\":0.00861,\"75\":0.00431,\"76\":0.00861,\"77\":0,\"78\":0,\"79\":0.04305,\"80\":0.01292,\"81\":0.00861,\"83\":0,\"84\":0.00861,\"85\":0.00431,\"86\":0.00431,\"87\":0.01722,\"88\":0.00861,\"89\":0.00431,\"90\":0.00431,\"91\":0.06458,\"92\":0.02153,\"93\":0.03014,\"94\":0.00861,\"95\":0.00431,\"96\":0.01292,\"97\":0.01722,\"98\":0.00431,\"99\":0.00861,\"100\":0.02583,\"101\":0.03875,\"102\":0.03444,\"103\":0.06027,\"104\":0.02583,\"105\":0.03014,\"106\":0.04305,\"107\":0.06458,\"108\":0.26261,\"109\":6.65123,\"110\":5.46735,\"111\":0.00431,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0.00431,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0.00431,\"63\":0,\"64\":0,\"65\":0,\"66\":0.00431,\"67\":0.03014,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.04736,\"94\":0.46925,\"95\":0.21525,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0.00431,\"15\":0.00861,\"16\":0,\"17\":0,\"18\":0.01292,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0.00431,\"91\":0,\"92\":0.00861,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0.00431,\"99\":0,\"100\":0.00431,\"101\":0.00431,\"102\":0.00431,\"103\":0.00431,\"104\":0.00431,\"105\":0.00861,\"106\":0.01292,\"107\":0.02153,\"108\":0.04305,\"109\":0.58979,\"110\":1.0289},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0.00861,\"15\":0.00431,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0.00431,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0.00431,\"13.1\":0.01722,\"14.1\":0.03444,\"15.1\":0.00431,\"15.2-15.3\":0.00431,\"15.4\":0.01292,\"15.5\":0.01292,\"15.6\":0.0861,\"16.0\":0.01292,\"16.1\":0.04736,\"16.2\":0.0861,\"16.3\":0.06888,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0.00325,\"6.0-6.1\":0.03796,\"7.0-7.1\":0.00759,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0.02928,\"10.0-10.2\":0,\"10.3\":0.0282,\"11.0-11.2\":0.01193,\"11.3-11.4\":0.00108,\"12.0-12.1\":0.00217,\"12.2-12.5\":0.26136,\"13.0-13.1\":0.00542,\"13.2\":0.00542,\"13.3\":0.01084,\"13.4-13.7\":0.04121,\"14.0-14.4\":0.15616,\"14.5-14.8\":0.27003,\"15.0-15.1\":0.05422,\"15.2-15.3\":0.07917,\"15.4\":0.07591,\"15.5\":0.20605,\"15.6\":0.80468,\"16.0\":1.07145,\"16.1\":2.29473,\"16.2\":2.86408,\"16.3\":1.61803,\"16.4\":0.01301},P:{\"4\":0.09186,\"20\":0.888,\"5.0-5.4\":0.01021,\"6.2-6.4\":0,\"7.2-7.4\":0.13269,\"8.2\":0,\"9.2\":0.01021,\"10.1\":0,\"11.1-11.2\":0.05103,\"12.0\":0.01021,\"13.0\":0.11228,\"14.0\":0.05103,\"15.0\":0.03062,\"16.0\":0.1531,\"17.0\":0.05103,\"18.0\":0.06124,\"19.0\":1.24524},I:{\"0\":0,\"3\":0,\"4\":0.01381,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0.01381,\"4.4\":0,\"4.4.3-4.4.4\":0.20722},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.01292,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0.0057,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.1196},H:{\"0\":0.32889},L:{\"0\":67.23856},R:{_:\"0\"},M:{\"0\":0.23919},Q:{\"13.1\":0}};\n/data/features/nav-timing.js\u0005module.exports={A:{A:{\"1\":\"F A B\",\"2\":\"J D E DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB I w J FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"I w\",\"33\":\"J D E F A B C\"},E:{\"1\":\"E F A B C K L G MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D IC 0B JC KC LC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F B C QC RC SC TC rB BC UC sB\"},G:{\"1\":\"E aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC CC WC XC YC ZC\"},H:{\"2\":\"pC\"},I:{\"1\":\"I H tC CC uC vC\",\"2\":\"uB qC rC sC\"},J:{\"1\":\"A\",\"2\":\"D\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:2,C:\"Navigation Timing API\"};\n\"/data/features/css-nth-child-of.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"H\",\"2\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f\"},C:{\"1\":\"zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB FC GC\"},D:{\"1\":\"H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f\"},E:{\"1\":\"F A B C K L G MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E IC 0B JC KC LC\"},F:{\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\"},G:{\"1\":\"aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"2\":\"A B C h rB BC sB\"},L:{\"1\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"2\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"2\":\"2B\"},R:{\"2\":\"AD\"},S:{\"2\":\"BD CD\"}},B:5,C:\"selector list argument of :nth-child and :nth-last-child CSS pseudo-classes\"};\n/data/regions/ST.js\u0010module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.33666,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0.00543,\"89\":0.00543,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0.00543,\"96\":0.00543,\"97\":0,\"98\":0,\"99\":0,\"100\":0.00543,\"101\":0.00543,\"102\":0.01629,\"103\":0,\"104\":0.00543,\"105\":0.00543,\"106\":0,\"107\":0,\"108\":0.01086,\"109\":0.29865,\"110\":0.14118,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0.01086,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0.01086,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0.01086,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0.01086,\"55\":0,\"56\":0,\"57\":0.02172,\"58\":0.03801,\"59\":0.00543,\"60\":0,\"61\":0,\"62\":0,\"63\":0.02715,\"64\":0.01086,\"65\":0.00543,\"66\":0,\"67\":0,\"68\":0.00543,\"69\":0,\"70\":0.03258,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0.02715,\"80\":0.01086,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0.00543,\"87\":0.02172,\"88\":0.02172,\"89\":1.31406,\"90\":0.00543,\"91\":0.00543,\"92\":0.00543,\"93\":0.00543,\"94\":0,\"95\":0.00543,\"96\":0.07059,\"97\":0.01086,\"98\":0,\"99\":0.01086,\"100\":0,\"101\":0.00543,\"102\":0.02172,\"103\":0.00543,\"104\":0.01629,\"105\":0.01086,\"106\":0.00543,\"107\":0.0543,\"108\":0.22263,\"109\":14.65014,\"110\":5.63091,\"111\":0,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0.01629,\"64\":0.00543,\"65\":0,\"66\":0,\"67\":0.01629,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0.00543,\"80\":0,\"81\":0,\"82\":0,\"83\":0.00543,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.00543,\"94\":0.13032,\"95\":0.1629,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"79\":0,\"80\":0.00543,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0.01086,\"91\":0,\"92\":0.01086,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0.02172,\"98\":0.00543,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0.02172,\"104\":0,\"105\":0,\"106\":0.00543,\"107\":0.01629,\"108\":0.02715,\"109\":0.72219,\"110\":0.96111},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0.00543,\"15\":0,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0.00543,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0,\"13.1\":0.00543,\"14.1\":0,\"15.1\":0,\"15.2-15.3\":0,\"15.4\":0,\"15.5\":0,\"15.6\":0.03801,\"16.0\":0.01086,\"16.1\":0.02172,\"16.2\":0.07059,\"16.3\":0.09774,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0.00881,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0.32957,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0,\"10.0-10.2\":0,\"10.3\":0.00881,\"11.0-11.2\":0,\"11.3-11.4\":0,\"12.0-12.1\":0.00881,\"12.2-12.5\":0.04257,\"13.0-13.1\":0,\"13.2\":0,\"13.3\":0,\"13.4-13.7\":0.01688,\"14.0-14.4\":0,\"14.5-14.8\":0.42279,\"15.0-15.1\":0.03376,\"15.2-15.3\":0.05065,\"15.4\":0.04257,\"15.5\":0.05945,\"15.6\":0.33838,\"16.0\":0.00881,\"16.1\":1.60673,\"16.2\":2.33413,\"16.3\":1.58104,\"16.4\":0},P:{\"4\":0.16277,\"20\":0.34588,\"5.0-5.4\":0,\"6.2-6.4\":0.02035,\"7.2-7.4\":0.1119,\"8.2\":0,\"9.2\":0.01017,\"10.1\":0,\"11.1-11.2\":0.02035,\"12.0\":0.02035,\"13.0\":0.01017,\"14.0\":0,\"15.0\":0.01017,\"16.0\":0.01017,\"17.0\":0.01017,\"18.0\":0.3764,\"19.0\":0.3764},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0.00139,\"2.3\":0,\"4.1\":0.0347,\"4.2-4.3\":0.05829,\"4.4\":0,\"4.4.3-4.4.4\":0.13879},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.04344,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":2.9248},H:{\"0\":0.22931},L:{\"0\":58.83212},R:{_:\"0\"},M:{\"0\":0.11425},Q:{\"13.1\":0}};\n/data/features/array-flat.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"1\":\"bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB FC GC\"},D:{\"1\":\"iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB\"},E:{\"1\":\"C K L G sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A B IC 0B JC KC LC MC 1B rB\"},F:{\"1\":\"XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB QC RC SC TC rB BC UC sB\"},G:{\"1\":\"gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I xC yC zC 0C 1C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"2\":\"BD\"}},B:6,C:\"flat & flatMap array methods\"};\n$/data/features/link-rel-prerender.js\u0005module.exports={A:{A:{\"1\":\"B\",\"2\":\"J D E F A DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"I w J D E F A B C\"},E:{\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F B C QC RC SC TC rB BC UC sB\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"2\":\"f\"},N:{\"1\":\"B\",\"2\":\"A\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"2\":\"BD CD\"}},B:5,C:\"Resource Hints: prerender\"};\n/data/features/webp.js\u0006\fmodule.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N\"},C:{\"1\":\"eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB FC GC\",\"8\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB\"},D:{\"1\":\"9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"I w\",\"8\":\"J D E\",\"132\":\"F A B C K L G M N O x g y z\",\"260\":\"0 1 2 3 4 5 6 7 8\"},E:{\"1\":\"tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A B C K IC 0B JC KC LC MC 1B rB sB 2B\",\"516\":\"L G NC OC 3B 4B 5B 6B\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F QC RC SC\",\"8\":\"B TC\",\"132\":\"rB BC UC\",\"260\":\"C G M N O sB\"},G:{\"1\":\"mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC\"},H:{\"1\":\"pC\"},I:{\"1\":\"H CC uC vC\",\"2\":\"uB qC rC sC\",\"132\":\"I tC\"},J:{\"2\":\"D A\"},K:{\"1\":\"C h rB BC sB\",\"2\":\"A\",\"132\":\"B\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"8\":\"BD\"}},B:6,C:\"WebP image format\"};\n/data/regions/LK.js\u0011module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.00409,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0.01635,\"88\":0.00409,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00409,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0.00409,\"100\":0,\"101\":0,\"102\":0.00817,\"103\":0.00409,\"104\":0.00409,\"105\":0.00409,\"106\":0.00409,\"107\":0.00817,\"108\":0.02044,\"109\":0.33513,\"110\":0.21252,\"111\":0.00409,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.00409,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0.00409,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0.00409,\"65\":0,\"66\":0,\"67\":0.00409,\"68\":0,\"69\":0.00409,\"70\":0.00817,\"71\":0,\"72\":0.00409,\"73\":0.00409,\"74\":0.04087,\"75\":0,\"76\":0.00409,\"77\":0.00817,\"78\":0.00409,\"79\":0.00817,\"80\":0.00409,\"81\":0.02452,\"83\":0.00409,\"84\":0.00409,\"85\":0.00817,\"86\":0.00817,\"87\":0.00817,\"88\":0.00409,\"89\":0.00817,\"90\":0.00817,\"91\":0.01226,\"92\":0.02044,\"93\":0.00409,\"94\":0.00817,\"95\":0.01226,\"96\":0.00817,\"97\":0.00817,\"98\":0.00817,\"99\":0.00817,\"100\":0.00817,\"101\":0.00817,\"102\":0.01226,\"103\":0.0327,\"104\":0.01635,\"105\":0.02452,\"106\":0.02861,\"107\":0.03678,\"108\":0.20026,\"109\":5.20684,\"110\":3.33091,\"111\":0.00409,\"112\":0.00409,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0.02452,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0.00409,\"60\":0.00817,\"62\":0,\"63\":0.01226,\"64\":0.01226,\"65\":0.00409,\"66\":0.02044,\"67\":0.07357,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0.00409,\"74\":0.00409,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0.00409,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0.00817,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00409,\"93\":0.01226,\"94\":0.17983,\"95\":0.20026,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0.00409,\"13\":0,\"14\":0.00409,\"15\":0.00409,\"16\":0,\"17\":0,\"18\":0.00817,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0.00409,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0.00409,\"90\":0,\"91\":0,\"92\":0.00817,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0.00409,\"104\":0.00409,\"105\":0.00409,\"106\":0.00409,\"107\":0.01226,\"108\":0.08174,\"109\":2.47264,\"110\":2.97534},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.00409,\"14\":0.01226,\"15\":0.00409,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0.00409,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0.00409,\"13.1\":0.00817,\"14.1\":0.01635,\"15.1\":0.00409,\"15.2-15.3\":0.00409,\"15.4\":0.00817,\"15.5\":0.01226,\"15.6\":0.03678,\"16.0\":0.00409,\"16.1\":0.02452,\"16.2\":0.03678,\"16.3\":0.03678,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0.00823,\"8.1-8.4\":0.00353,\"9.0-9.2\":0.0047,\"9.3\":0.04701,\"10.0-10.2\":0.00353,\"10.3\":0.04466,\"11.0-11.2\":0.01293,\"11.3-11.4\":0.01175,\"12.0-12.1\":0.03173,\"12.2-12.5\":0.64525,\"13.0-13.1\":0.02233,\"13.2\":0.01763,\"13.3\":0.06699,\"13.4-13.7\":0.12576,\"14.0-14.4\":0.45132,\"14.5-14.8\":0.5477,\"15.0-15.1\":0.28913,\"15.2-15.3\":0.26915,\"15.4\":0.24564,\"15.5\":0.476,\"15.6\":0.80039,\"16.0\":1.16474,\"16.1\":1.55495,\"16.2\":1.43506,\"16.3\":1.41273,\"16.4\":0.00235},P:{\"4\":0.41042,\"20\":0.25026,\"5.0-5.4\":0.02002,\"6.2-6.4\":0.02002,\"7.2-7.4\":0.83086,\"8.2\":0.03003,\"9.2\":0.07007,\"10.1\":0.02002,\"11.1-11.2\":0.13013,\"12.0\":0.02002,\"13.0\":0.11011,\"14.0\":0.11011,\"15.0\":0.06006,\"16.0\":0.15015,\"17.0\":0.16017,\"18.0\":0.1902,\"19.0\":1.10114},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.00396,\"4.2-4.3\":0.00198,\"4.4\":0,\"4.4.3-4.4.4\":0.05449},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.00817,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":1.21808},H:{\"0\":1.29315},L:{\"0\":65.10525},R:{_:\"0\"},M:{\"0\":0.11826},Q:{\"13.1\":0}};\n/data/regions/IE.js\u0011module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.00712,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0.00712,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0.00712,\"44\":0.02492,\"45\":0.00712,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.00356,\"53\":0.00356,\"54\":0,\"55\":0,\"56\":0.00356,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.01068,\"79\":0.00356,\"80\":0.00356,\"81\":0,\"82\":0,\"83\":0,\"84\":0.00356,\"85\":0,\"86\":0,\"87\":0.02136,\"88\":0.00356,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.00356,\"94\":0,\"95\":0.00712,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0.00356,\"102\":0.01068,\"103\":0.00356,\"104\":0,\"105\":0.00356,\"106\":0.00712,\"107\":0.01068,\"108\":0.0178,\"109\":0.4094,\"110\":0.25276,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0.00356,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0.00356,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0.00712,\"48\":0.06764,\"49\":0.02492,\"50\":0,\"51\":0,\"52\":0,\"53\":0.00356,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0.00356,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0.02136,\"75\":0,\"76\":0.00356,\"77\":0,\"78\":0,\"79\":0.02136,\"80\":0.00356,\"81\":0.0534,\"83\":0.00712,\"84\":0.01068,\"85\":0.00712,\"86\":0.00712,\"87\":0.0178,\"88\":0.00356,\"89\":0.01068,\"90\":0.00356,\"91\":0.00356,\"92\":0.00712,\"93\":0.00712,\"94\":0.00712,\"95\":0.00356,\"96\":0.1602,\"97\":0.00712,\"98\":0.00356,\"99\":0.00356,\"100\":0.01424,\"101\":0.0356,\"102\":0.01068,\"103\":0.06408,\"104\":0.01424,\"105\":0.03204,\"106\":0.26344,\"107\":0.089,\"108\":0.32752,\"109\":3.77004,\"110\":2.5098,\"111\":0.00356,\"112\":0.00356,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0.00356,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.00712,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.0178,\"94\":0.16376,\"95\":0.07832,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0.00356,\"13\":0.00356,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0.00356,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0.00356,\"101\":0,\"102\":0,\"103\":0.00356,\"104\":0,\"105\":0.00356,\"106\":0.00356,\"107\":0.04628,\"108\":0.03204,\"109\":0.59808,\"110\":0.77964},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0.00356,\"9\":0.01068,\"10\":0,\"11\":0,\"12\":0,\"13\":0.00712,\"14\":0.06052,\"15\":0.00712,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0.01068,\"13.1\":0.0534,\"14.1\":0.1246,\"15.1\":0.02136,\"15.2-15.3\":0.02492,\"15.4\":0.03916,\"15.5\":0.09256,\"15.6\":0.49128,\"16.0\":0.0356,\"16.1\":0.09256,\"16.2\":0.32752,\"16.3\":0.21716,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0.0199,\"8.1-8.4\":0.02388,\"9.0-9.2\":0.00398,\"9.3\":0.1353,\"10.0-10.2\":0,\"10.3\":0.16714,\"11.0-11.2\":0.00398,\"11.3-11.4\":0.12734,\"12.0-12.1\":0.01592,\"12.2-12.5\":0.88741,\"13.0-13.1\":0.01194,\"13.2\":0.00796,\"13.3\":0.03979,\"13.4-13.7\":0.1154,\"14.0-14.4\":0.44967,\"14.5-14.8\":1.31718,\"15.0-15.1\":0.30244,\"15.2-15.3\":0.45365,\"15.4\":0.42182,\"15.5\":1.09832,\"15.6\":4.39725,\"16.0\":3.97543,\"16.1\":10.58921,\"16.2\":9.31579,\"16.3\":3.89982,\"16.4\":0.01194},P:{\"4\":0.05214,\"20\":1.43898,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0.03128,\"8.2\":0,\"9.2\":0,\"10.1\":0,\"11.1-11.2\":0.03128,\"12.0\":0.01043,\"13.0\":0.03128,\"14.0\":0.04171,\"15.0\":0.02085,\"16.0\":0.06256,\"17.0\":0.04171,\"18.0\":0.10427,\"19.0\":2.37745},I:{\"0\":0,\"3\":0,\"4\":0.02984,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0.04974,\"4.4\":0,\"4.4.3-4.4.4\":0.13926},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0.09256,\"10\":0,\"11\":0.03204,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0.00644},O:{\"0\":0.02576},H:{\"0\":0.18901},L:{\"0\":43.10056},R:{_:\"0\"},M:{\"0\":0.48944},Q:{\"13.1\":0}};\n/data/regions/DE.js\u0012module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0.00531,\"49\":0,\"50\":0,\"51\":0,\"52\":0.0478,\"53\":0,\"54\":0,\"55\":0,\"56\":0.00531,\"57\":0,\"58\":0,\"59\":0.01062,\"60\":0.00531,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0.01062,\"69\":0.00531,\"70\":0.00531,\"71\":0,\"72\":0.00531,\"73\":0,\"74\":0,\"75\":0,\"76\":0.00531,\"77\":0.00531,\"78\":0.03187,\"79\":0.00531,\"80\":0.00531,\"81\":0.00531,\"82\":0.00531,\"83\":0.00531,\"84\":0.00531,\"85\":0,\"86\":0.03718,\"87\":0.00531,\"88\":0.00531,\"89\":0.00531,\"90\":0.00531,\"91\":0.02124,\"92\":0.00531,\"93\":0.00531,\"94\":0.00531,\"95\":0.02124,\"96\":0.01593,\"97\":0.00531,\"98\":0.00531,\"99\":0.01062,\"100\":0.00531,\"101\":0.00531,\"102\":0.20182,\"103\":0.01062,\"104\":0.01062,\"105\":0.02124,\"106\":0.02124,\"107\":0.03718,\"108\":0.10622,\"109\":2.94229,\"110\":1.96507,\"111\":0.00531,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0.02124,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0.01062,\"50\":0,\"51\":0,\"52\":0.01593,\"53\":0,\"54\":0,\"55\":0,\"56\":0.00531,\"57\":0,\"58\":0,\"59\":0,\"60\":0.00531,\"61\":0,\"62\":0,\"63\":0.01593,\"64\":0,\"65\":0,\"66\":0.0478,\"67\":0.00531,\"68\":0.00531,\"69\":0.00531,\"70\":0.00531,\"71\":0.01593,\"72\":0.01593,\"73\":0,\"74\":0.00531,\"75\":0.71167,\"76\":0.00531,\"77\":0.00531,\"78\":0.01062,\"79\":0.0478,\"80\":0.03718,\"81\":0.03187,\"83\":0.03187,\"84\":0.05311,\"85\":0.07435,\"86\":0.06373,\"87\":0.0478,\"88\":0.01062,\"89\":0.02124,\"90\":0.01062,\"91\":0.0956,\"92\":0.01593,\"93\":0.03718,\"94\":0.00531,\"95\":0.01062,\"96\":0.01062,\"97\":0.01062,\"98\":0.01062,\"99\":0.05842,\"100\":0.08498,\"101\":0.03187,\"102\":0.02656,\"103\":0.05311,\"104\":0.03187,\"105\":0.05842,\"106\":0.0956,\"107\":0.09029,\"108\":0.36646,\"109\":5.94832,\"110\":3.80268,\"111\":0.00531,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0.00531,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.01593,\"68\":0,\"69\":0.00531,\"70\":0.00531,\"71\":0.00531,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0.00531,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.13278,\"94\":1.13655,\"95\":0.56297,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0.00531,\"15\":0,\"16\":0,\"17\":0.00531,\"18\":0.01062,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0.00531,\"85\":0.00531,\"86\":0.00531,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00531,\"93\":0,\"94\":0,\"95\":0,\"96\":0.00531,\"97\":0.01593,\"98\":0,\"99\":0.00531,\"100\":0,\"101\":0.00531,\"102\":0.00531,\"103\":0.01062,\"104\":0.00531,\"105\":0.01062,\"106\":0.01062,\"107\":0.03718,\"108\":0.11153,\"109\":1.87478,\"110\":2.23593},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0.00531,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.01062,\"14\":0.05311,\"15\":0.01062,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0.00531,\"6.1\":0,\"7.1\":0,\"9.1\":0.01062,\"10.1\":0,\"11.1\":0.01062,\"12.1\":0.01593,\"13.1\":0.07967,\"14.1\":0.13278,\"15.1\":0.02656,\"15.2-15.3\":0.02124,\"15.4\":0.06373,\"15.5\":0.12215,\"15.6\":0.57359,\"16.0\":0.07967,\"16.1\":0.31335,\"16.2\":0.76478,\"16.3\":0.63732,\"16.4\":0},G:{\"8\":0.00545,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0.00545,\"6.0-6.1\":0,\"7.0-7.1\":0.00273,\"8.1-8.4\":0,\"9.0-9.2\":0.03543,\"9.3\":0.09539,\"10.0-10.2\":0.00545,\"10.3\":0.08994,\"11.0-11.2\":0.01908,\"11.3-11.4\":0.07904,\"12.0-12.1\":0.01635,\"12.2-12.5\":0.39245,\"13.0-13.1\":0.0109,\"13.2\":0.00818,\"13.3\":0.02998,\"13.4-13.7\":0.13354,\"14.0-14.4\":0.26163,\"14.5-14.8\":0.55325,\"15.0-15.1\":0.15262,\"15.2-15.3\":0.19623,\"15.4\":0.25891,\"15.5\":0.52872,\"15.6\":1.98406,\"16.0\":2.91069,\"16.1\":6.609,\"16.2\":6.81068,\"16.3\":4.76121,\"16.4\":0.0218},P:{\"4\":0.07273,\"20\":1.63133,\"5.0-5.4\":0.01039,\"6.2-6.4\":0,\"7.2-7.4\":0.01039,\"8.2\":0,\"9.2\":0,\"10.1\":0,\"11.1-11.2\":0.01039,\"12.0\":0.01039,\"13.0\":0.04156,\"14.0\":0.03117,\"15.0\":0.01039,\"16.0\":0.05195,\"17.0\":0.07273,\"18.0\":0.07273,\"19.0\":2.40024},I:{\"0\":0,\"3\":0,\"4\":0.02587,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.01035,\"4.2-4.3\":0.03622,\"4.4\":0,\"4.4.3-4.4.4\":0.13971},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0.01155,\"9\":0.00577,\"10\":0.00577,\"11\":0.10968,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.14067},H:{\"0\":0.48388},L:{\"0\":37.12595},R:{_:\"0\"},M:{\"0\":0.8956},Q:{\"13.1\":0.00469}};\n'/data/features/contentsecuritypolicy.js\u0006\u0002module.exports={A:{A:{\"2\":\"J D E F DC\",\"132\":\"A B\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB FC GC\",\"129\":\"I w J D E F A B C K L G M N O x g y z\"},D:{\"1\":\"2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"I w J D E F A B C K\",\"257\":\"0 1 L G M N O x g y z\"},E:{\"1\":\"D E F A B C K L G LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w IC 0B\",\"257\":\"J KC\",\"260\":\"JC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F B C QC RC SC TC rB BC UC sB\"},G:{\"1\":\"E YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC CC\",\"257\":\"XC\",\"260\":\"WC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H uC vC\",\"2\":\"uB I qC rC sC tC CC\"},J:{\"2\":\"D\",\"257\":\"A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"132\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:4,C:\"Content Security Policy 1.0\"};\n/data/regions/DK.js\u0010module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.0135,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.02025,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0.03376,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0.027,\"103\":0.02025,\"104\":0,\"105\":0.00675,\"106\":0.0135,\"107\":0.00675,\"108\":0.05401,\"109\":0.90463,\"110\":0.60084,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0.027,\"50\":0,\"51\":0,\"52\":0.03376,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0.0135,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0.0135,\"77\":0,\"78\":0.00675,\"79\":0.027,\"80\":0.00675,\"81\":0,\"83\":0.00675,\"84\":0.00675,\"85\":0.02025,\"86\":0.0135,\"87\":0.04726,\"88\":0,\"89\":0.02025,\"90\":0.027,\"91\":0.02025,\"92\":0.03376,\"93\":0.05401,\"94\":0.027,\"95\":0.00675,\"96\":0.0135,\"97\":0.02025,\"98\":0.0135,\"99\":0.02025,\"100\":0.03376,\"101\":0.3173,\"102\":0.02025,\"103\":0.22278,\"104\":0.04726,\"105\":0.08101,\"106\":0.04726,\"107\":0.20253,\"108\":1.27594,\"109\":17.55935,\"110\":10.51131,\"111\":0.0135,\"112\":0.00675,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0.0135,\"90\":0,\"91\":0,\"92\":0,\"93\":0.09451,\"94\":0.6751,\"95\":0.20253,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00675,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0.00675,\"98\":0.00675,\"99\":0,\"100\":0.00675,\"101\":0.00675,\"102\":0.02025,\"103\":0.00675,\"104\":0.00675,\"105\":0.0135,\"106\":0.0135,\"107\":0.04051,\"108\":0.12827,\"109\":2.75441,\"110\":3.13922},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0.00675,\"13\":0.00675,\"14\":0.12827,\"15\":0.027,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0.02025,\"13.1\":0.12827,\"14.1\":0.38481,\"15.1\":0.06076,\"15.2-15.3\":0.04051,\"15.4\":0.13502,\"15.5\":0.18903,\"15.6\":0.94514,\"16.0\":0.12152,\"16.1\":0.3443,\"16.2\":1.0059,\"16.3\":1.0194,\"16.4\":0.00675},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0,\"8.1-8.4\":0,\"9.0-9.2\":0.05706,\"9.3\":0.07489,\"10.0-10.2\":0,\"10.3\":0.11768,\"11.0-11.2\":0,\"11.3-11.4\":0.02496,\"12.0-12.1\":0.00713,\"12.2-12.5\":0.49212,\"13.0-13.1\":0.00357,\"13.2\":0.00357,\"13.3\":0.0107,\"13.4-13.7\":0.05349,\"14.0-14.4\":0.23536,\"14.5-14.8\":0.97355,\"15.0-15.1\":0.18187,\"15.2-15.3\":0.26389,\"15.4\":0.27459,\"15.5\":0.71322,\"15.6\":3.25943,\"16.0\":3.60891,\"16.1\":9.09361,\"16.2\":7.78484,\"16.3\":6.85052,\"16.4\":0.01426},P:{\"4\":0.03091,\"20\":0.59756,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0,\"8.2\":0,\"9.2\":0,\"10.1\":0,\"11.1-11.2\":0,\"12.0\":0,\"13.0\":0,\"14.0\":0.0103,\"15.0\":0.0103,\"16.0\":0.0103,\"17.0\":0.0103,\"18.0\":0.02061,\"19.0\":0.87573},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.00733,\"4.2-4.3\":0.01099,\"4.4\":0,\"4.4.3-4.4.4\":0.12092},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0.00696,\"8\":0.02089,\"9\":0.00696,\"10\":0.00696,\"11\":0.18101,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.02274},H:{\"0\":0.13534},L:{\"0\":17.58912},R:{_:\"0\"},M:{\"0\":0.27617},Q:{\"13.1\":0}};\n)/data/features/kerning-pairs-ligatures.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\",\"2\":\"EC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"w J D E F A B C K L G JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I IC 0B\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F B C QC RC SC TC rB BC UC sB\"},G:{\"1\":\"E CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"16\":\"0B VC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H uC vC\",\"2\":\"qC rC sC\",\"132\":\"uB I tC CC\"},J:{\"1\":\"A\",\"2\":\"D\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:7,C:\"High-quality kerning pairs & ligatures\"};\n!/data/features/css-crisp-edges.js\u0006Fmodule.exports={A:{A:{\"2\":\"J DC\",\"2340\":\"D E F A B\"},B:{\"2\":\"C K L G M N O\",\"1025\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB FC\",\"513\":\"eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b\",\"545\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB GC\"},D:{\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB\",\"1025\":\"IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"A B C K L G 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w IC 0B JC\",\"164\":\"J\",\"4644\":\"D E F KC LC MC\"},F:{\"2\":\"0 1 2 3 4 F B G M N O x g y z QC RC SC TC rB BC\",\"545\":\"C UC sB\",\"1025\":\"5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\"},G:{\"1\":\"cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC CC\",\"4260\":\"WC XC\",\"4644\":\"E YC ZC aC bC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I qC rC sC tC CC uC vC\",\"1025\":\"H\"},J:{\"2\":\"D\",\"4260\":\"A\"},K:{\"2\":\"A B rB BC\",\"545\":\"C sB\",\"1025\":\"h\"},L:{\"1025\":\"H\"},M:{\"1\":\"f\"},N:{\"2340\":\"A B\"},O:{\"1025\":\"wC\"},P:{\"1025\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1025\":\"2B\"},R:{\"1025\":\"AD\"},S:{\"1\":\"CD\",\"4097\":\"BD\"}},B:4,C:\"Crisp edges/pixelated images\"};\n!/data/features/arrow-functions.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB I w J D E F A B C K L G M N O x g y FC GC\"},D:{\"1\":\"MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB\"},E:{\"1\":\"A B C K L G 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F IC 0B JC KC LC MC\"},F:{\"1\":\"9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 F B C G M N O x g y z QC RC SC TC rB BC UC sB\"},G:{\"1\":\"cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:6,C:\"Arrow functions\"};\n/data/features/webvr.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"2\":\"C K L Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"66\":\"P\",\"257\":\"G M N O\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB FC GC\",\"129\":\"WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"194\":\"VB\"},D:{\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"66\":\"YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P\"},E:{\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\",\"66\":\"LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"2\":\"A B C h rB BC sB\"},L:{\"2\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"513\":\"I\",\"516\":\"g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"2\":\"2B\"},R:{\"2\":\"AD\"},S:{\"2\":\"BD CD\"}},B:7,C:\"WebVR API\"};\n/data/regions/NO.js\u0011\u0001module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.00623,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0.00623,\"59\":0.02494,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.01247,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0.00623,\"88\":0,\"89\":0,\"90\":0,\"91\":0.00623,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0.01247,\"102\":0.14338,\"103\":0,\"104\":0,\"105\":0.01247,\"106\":0.00623,\"107\":0.00623,\"108\":0.03117,\"109\":0.77925,\"110\":0.44885,\"111\":0.00623,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0.00623,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0.01247,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0.00623,\"65\":0,\"66\":0.11845,\"67\":0.00623,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0.00623,\"77\":0,\"78\":0.00623,\"79\":0.01247,\"80\":0.00623,\"81\":0.00623,\"83\":0,\"84\":0.00623,\"85\":3.26038,\"86\":0.01247,\"87\":0.03117,\"88\":0.00623,\"89\":0.0187,\"90\":0.01247,\"91\":0.21819,\"92\":0.02494,\"93\":0.0187,\"94\":0.01247,\"95\":0.00623,\"96\":0.00623,\"97\":0.00623,\"98\":0.01247,\"99\":0.00623,\"100\":0.0374,\"101\":0.02494,\"102\":0.0187,\"103\":0.15585,\"104\":0.03117,\"105\":0.20572,\"106\":0.03117,\"107\":0.17455,\"108\":1.12212,\"109\":14.41301,\"110\":6.98208,\"111\":0.00623,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.01247,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.06857,\"94\":0.59223,\"95\":0.25559,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0.01247,\"18\":0,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0.00623,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00623,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0.01247,\"104\":0,\"105\":0.00623,\"106\":0.00623,\"107\":0.02494,\"108\":0.09974,\"109\":1.93254,\"110\":2.25047},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.00623,\"14\":0.06857,\"15\":0.0187,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0.00623,\"10.1\":0,\"11.1\":0.02494,\"12.1\":0.01247,\"13.1\":0.08104,\"14.1\":0.24313,\"15.1\":0.04987,\"15.2-15.3\":0.04364,\"15.4\":0.11845,\"15.5\":0.17455,\"15.6\":0.86653,\"16.0\":0.06857,\"16.1\":0.3491,\"16.2\":0.90393,\"16.3\":0.88523,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0.08036,\"10.0-10.2\":0.00765,\"10.3\":0.09567,\"11.0-11.2\":0.01148,\"11.3-11.4\":0.21431,\"12.0-12.1\":0.01531,\"12.2-12.5\":0.41713,\"13.0-13.1\":0.00383,\"13.2\":0.00765,\"13.3\":0.01531,\"13.4-13.7\":0.04592,\"14.0-14.4\":0.22579,\"14.5-14.8\":0.83044,\"15.0-15.1\":0.16456,\"15.2-15.3\":0.33294,\"15.4\":0.32529,\"15.5\":0.82278,\"15.6\":3.26434,\"16.0\":4.71474,\"16.1\":11.03677,\"16.2\":9.5328,\"16.3\":4.88695,\"16.4\":0.01148},P:{\"4\":0.05093,\"20\":0.93711,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0,\"8.2\":0,\"9.2\":0,\"10.1\":0,\"11.1-11.2\":0,\"12.0\":0,\"13.0\":0,\"14.0\":0.01019,\"15.0\":0,\"16.0\":0.02037,\"17.0\":0.02037,\"18.0\":0.04074,\"19.0\":1.50753},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0.12076,\"4.4\":0,\"4.4.3-4.4.4\":0.02937},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.05611,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.01506},H:{\"0\":0.1747},L:{\"0\":19.69754},R:{_:\"0\"},M:{\"0\":0.30128},Q:{\"13.1\":0}};\n/data/features/css-scrollbar.js\u0005module.exports={A:{A:{\"132\":\"J D E F A B DC\"},B:{\"2\":\"C K L G M N O\",\"292\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB FC GC\",\"3074\":\"cB\",\"4100\":\"dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\"},D:{\"292\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"16\":\"I w IC 0B\",\"292\":\"J D E F A B C K L G JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"2\":\"F B C QC RC SC TC rB BC UC sB\",\"292\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\"},G:{\"2\":\"mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"16\":\"0B VC CC WC XC\",\"292\":\"YC\",\"804\":\"E ZC aC bC cC dC eC fC gC hC iC jC kC lC\"},H:{\"2\":\"pC\"},I:{\"16\":\"qC rC\",\"292\":\"uB I H sC tC CC uC vC\"},J:{\"292\":\"D A\"},K:{\"2\":\"A B C rB BC sB\",\"292\":\"h\"},L:{\"292\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"292\":\"wC\"},P:{\"292\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"292\":\"2B\"},R:{\"292\":\"AD\"},S:{\"2\":\"BD CD\"}},B:7,C:\"CSS scrollbar styling\"};\n/data/features/jpegxl.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"2\":\"C K L G M N O P Q R S T U V W X Y Z f H\",\"578\":\"a b c d e i j k l m n o p q r s t u v\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y FC GC\",\"322\":\"Z a b c d e i j k l m n o p q r s t u v f H yB zB\"},D:{\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z f H yB zB HC\",\"194\":\"a b c d e i j k l m n o p q r s t u v\"},E:{\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB QC RC SC TC rB BC UC sB\",\"194\":\"pB qB P Q R xB S T U V W X Y Z a b c d e\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"2\":\"A B C h rB BC sB\"},L:{\"2\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"2\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"2\":\"2B\"},R:{\"2\":\"AD\"},S:{\"2\":\"BD CD\"}},B:6,C:\"JPEG XL image format\"};\n'/data/features/link-rel-dns-prefetch.js\u0005module.exports={A:{A:{\"1\":\"A B\",\"2\":\"J D E DC\",\"132\":\"F\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"2\":\"EC uB\",\"260\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"w J D E F A B C K L G JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I IC 0B\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F B C QC RC SC TC rB BC UC sB\"},G:{\"16\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"16\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"16\":\"D A\"},K:{\"1\":\"h\",\"16\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"B\",\"2\":\"A\"},O:{\"1\":\"wC\"},P:{\"1\":\"g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"16\":\"I\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:5,C:\"Resource Hints: dns-prefetch\"};\n%/data/features/css-overflow-anchor.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"1\":\"fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB FC GC\"},D:{\"1\":\"XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB\"},E:{\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB QC RC SC TC rB BC UC sB\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"2\":\"BD\"}},B:5,C:\"CSS overflow-anchor (Scroll Anchoring)\"};\n/data/regions/GQ.js\u0010module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0.00783,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.00783,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0.00783,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0.00783,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.03134,\"94\":0,\"95\":0,\"96\":0,\"97\":0.00783,\"98\":0,\"99\":0.00783,\"100\":0,\"101\":0,\"102\":0.11751,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0,\"108\":0.00783,\"109\":0.35253,\"110\":0.18018,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.01567,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0.03917,\"51\":0,\"52\":0.047,\"53\":0,\"54\":0.0235,\"55\":0,\"56\":0,\"57\":0,\"58\":0.01567,\"59\":0,\"60\":0,\"61\":0,\"62\":0.00783,\"63\":0,\"64\":0.01567,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0.03917,\"77\":0,\"78\":0,\"79\":0.0235,\"80\":0,\"81\":0.00783,\"83\":0,\"84\":0,\"85\":0,\"86\":0.00783,\"87\":0,\"88\":0.21935,\"89\":0,\"90\":0,\"91\":0.00783,\"92\":0.0235,\"93\":0,\"94\":0.00783,\"95\":0,\"96\":0,\"97\":0.00783,\"98\":0,\"99\":0.03917,\"100\":0.17235,\"101\":0,\"102\":0.0235,\"103\":0.03134,\"104\":0.0235,\"105\":0,\"106\":0.00783,\"107\":0.00783,\"108\":0.047,\"109\":7.15244,\"110\":3.19627,\"111\":0,\"112\":0.00783,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0.01567,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0.00783,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0.00783,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0.20368,\"90\":0,\"91\":0,\"92\":0,\"93\":0.01567,\"94\":0.03917,\"95\":0.07051,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0.01567,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0.00783,\"18\":0.05484,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0.01567,\"90\":0,\"91\":0,\"92\":0.00783,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0.00783,\"105\":0.01567,\"106\":0.08617,\"107\":0.00783,\"108\":0.82257,\"109\":17.42282,\"110\":29.14248},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.0235,\"12\":0,\"13\":0,\"14\":0.01567,\"15\":0.07051,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0.0235,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0,\"13.1\":0,\"14.1\":0.01567,\"15.1\":0,\"15.2-15.3\":0.00783,\"15.4\":0,\"15.5\":0,\"15.6\":0.07051,\"16.0\":0,\"16.1\":0,\"16.2\":0,\"16.3\":0.01567,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0.00279,\"6.0-6.1\":0,\"7.0-7.1\":0.00975,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0.0209,\"10.0-10.2\":0,\"10.3\":0.01951,\"11.0-11.2\":0.03065,\"11.3-11.4\":0,\"12.0-12.1\":0.47653,\"12.2-12.5\":6.43314,\"13.0-13.1\":0.00418,\"13.2\":0.05016,\"13.3\":1.5522,\"13.4-13.7\":0.46956,\"14.0-14.4\":0.19786,\"14.5-14.8\":0.82905,\"15.0-15.1\":0.1254,\"15.2-15.3\":0.27171,\"15.4\":0.25359,\"15.5\":0.12401,\"15.6\":0.32047,\"16.0\":0.37899,\"16.1\":0.41104,\"16.2\":0.45702,\"16.3\":0.44727,\"16.4\":0},P:{\"4\":0.19614,\"20\":0.04129,\"5.0-5.4\":0,\"6.2-6.4\":0.01032,\"7.2-7.4\":0.03097,\"8.2\":0,\"9.2\":0,\"10.1\":0,\"11.1-11.2\":0.01032,\"12.0\":0,\"13.0\":0,\"14.0\":0.01032,\"15.0\":0,\"16.0\":0.02065,\"17.0\":0.01032,\"18.0\":0.01032,\"19.0\":0.14452},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.00069,\"4.2-4.3\":0.0309,\"4.4\":0,\"4.4.3-4.4.4\":0.15657},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.01567,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.15162},H:{\"0\":0.34246},L:{\"0\":24.80218},R:{_:\"0\"},M:{\"0\":0.03466},Q:{\"13.1\":0}};\n/data/features/transforms3d.js\u0005module.exports={A:{A:{\"2\":\"J D E F DC\",\"132\":\"A B\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB I w J D E F FC GC\",\"33\":\"A B C K L G\"},D:{\"1\":\"DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"I w J D E F A B\",\"33\":\"0 1 2 3 4 5 6 7 8 9 C K L G M N O x g y z AB BB CB\"},E:{\"1\":\"4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"IC 0B\",\"33\":\"I w J D E JC KC LC\",\"257\":\"F A B C K L G MC 1B rB sB 2B NC OC 3B\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F B C QC RC SC TC rB BC UC sB\",\"33\":\"G M N O x g y z\"},G:{\"1\":\"4B 5B 6B tB 7B 8B 9B AC\",\"33\":\"E 0B VC CC WC XC YC ZC\",\"257\":\"aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"qC rC sC\",\"33\":\"uB I tC CC uC vC\"},J:{\"33\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"132\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:5,C:\"CSS3 3D Transforms\"};\n\"/data/features/css-unicode-bidi.js\u0005module.exports={A:{A:{\"132\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"132\":\"C K L G M N O\"},C:{\"1\":\"RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"33\":\"0 1 2 3 4 5 6 7 8 9 N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB\",\"132\":\"EC uB I w J D E F FC GC\",\"292\":\"A B C K L G M\"},D:{\"1\":\"PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"132\":\"I w J D E F A B C K L G M\",\"548\":\"0 1 2 3 4 5 6 7 8 9 N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB\"},E:{\"132\":\"I w J D E IC 0B JC KC LC\",\"548\":\"F A B C K L G MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"132\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\"},G:{\"132\":\"E 0B VC CC WC XC YC ZC\",\"548\":\"aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"16\":\"pC\"},I:{\"1\":\"H\",\"16\":\"uB I qC rC sC tC CC uC vC\"},J:{\"16\":\"D A\"},K:{\"1\":\"h\",\"16\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"132\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"16\":\"I\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"33\":\"BD\"}},B:4,C:\"CSS unicode-bidi property\"};\n%/data/features/css-backdrop-filter.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M\",\"257\":\"N O\"},C:{\"1\":\"p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB FC GC\",\"578\":\"jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o\"},D:{\"1\":\"oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB\",\"194\":\"OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB\"},E:{\"2\":\"I w J D E IC 0B JC KC LC\",\"33\":\"F A B C K L G MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB QC RC SC TC rB BC UC sB\",\"194\":\"BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC\",\"33\":\"aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I\",\"194\":\"xC yC zC 0C 1C 1B 2C\"},Q:{\"2\":\"2B\"},R:{\"1\":\"AD\"},S:{\"2\":\"BD CD\"}},B:7,C:\"CSS Backdrop Filter\"};\n/data/features/colr.js\u0005module.exports={A:{A:{\"2\":\"J D E DC\",\"257\":\"F A B\"},B:{\"1\":\"C K L G M N O\",\"513\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 EC uB I w J D E F A B C K L G M N O x g y z FC GC\"},D:{\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB\",\"513\":\"kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"L G NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A IC 0B JC KC LC MC 1B\",\"129\":\"B C K rB sB 2B\"},F:{\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB QC RC SC TC rB BC UC sB\",\"513\":\"ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\"},G:{\"1\":\"eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"16\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"16\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I xC yC zC 0C 1C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:6,C:\"COLR/CPAL(v0) Font Formats\"};\n/data/regions/CL.js\u0011'module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.00405,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0.00405,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.00809,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0.00405,\"92\":0,\"93\":0,\"94\":0.00405,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0.00809,\"103\":0,\"104\":0.00809,\"105\":0.00809,\"106\":0.00809,\"107\":0.00809,\"108\":0.02023,\"109\":0.35596,\"110\":0.23866,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0.00809,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0.00405,\"49\":0.01618,\"50\":0,\"51\":0,\"52\":0,\"53\":0.00405,\"54\":0,\"55\":0,\"56\":0.00405,\"57\":0,\"58\":0.00405,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.00809,\"68\":0.00405,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0.00405,\"75\":0,\"76\":0.00405,\"77\":0,\"78\":0,\"79\":0.04854,\"80\":0,\"81\":0.00405,\"83\":0.00809,\"84\":0.01214,\"85\":0.02023,\"86\":0.01214,\"87\":0.02832,\"88\":0.00405,\"89\":0.00405,\"90\":0.00405,\"91\":0.01214,\"92\":0.01618,\"93\":0.00405,\"94\":0,\"95\":0.00405,\"96\":0.01214,\"97\":0.00809,\"98\":0.00809,\"99\":0.00809,\"100\":0.01618,\"101\":0.00809,\"102\":0.01618,\"103\":0.04854,\"104\":0.01214,\"105\":0.03236,\"106\":0.05259,\"107\":0.05259,\"108\":0.27506,\"109\":6.16054,\"110\":3.99242,\"111\":0.00405,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0.00405,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0.00809,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.21439,\"94\":1.51688,\"95\":0.39641,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00405,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0.01618,\"108\":0.02023,\"109\":0.51776,\"110\":0.68361},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.00405,\"14\":0.01214,\"15\":0.00405,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0.00405,\"13.1\":0.02023,\"14.1\":0.05259,\"15.1\":0.00809,\"15.2-15.3\":0.00809,\"15.4\":0.01214,\"15.5\":0.02832,\"15.6\":0.08899,\"16.0\":0.01618,\"16.1\":0.05259,\"16.2\":0.12135,\"16.3\":0.08899,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0.00624,\"6.0-6.1\":0,\"7.0-7.1\":0.00156,\"8.1-8.4\":0.00156,\"9.0-9.2\":0,\"9.3\":0.0546,\"10.0-10.2\":0,\"10.3\":0.01716,\"11.0-11.2\":0.00936,\"11.3-11.4\":0.00624,\"12.0-12.1\":0.01092,\"12.2-12.5\":0.29325,\"13.0-13.1\":0.00468,\"13.2\":0.00312,\"13.3\":0.02496,\"13.4-13.7\":0.07799,\"14.0-14.4\":0.19654,\"14.5-14.8\":0.4976,\"15.0-15.1\":0.07331,\"15.2-15.3\":0.14039,\"15.4\":0.14663,\"15.5\":0.45704,\"15.6\":1.59262,\"16.0\":1.59262,\"16.1\":3.76239,\"16.2\":3.74523,\"16.3\":1.9935,\"16.4\":0.00936},P:{\"4\":0.14377,\"20\":0.55453,\"5.0-5.4\":0.01027,\"6.2-6.4\":0,\"7.2-7.4\":0.05135,\"8.2\":0,\"9.2\":0,\"10.1\":0,\"11.1-11.2\":0.05135,\"12.0\":0.01027,\"13.0\":0.03081,\"14.0\":0.04108,\"15.0\":0.02054,\"16.0\":0.06161,\"17.0\":0.04108,\"18.0\":0.07188,\"19.0\":1.22202},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.01459,\"4.2-4.3\":0.00972,\"4.4\":0,\"4.4.3-4.4.4\":0.05591},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0.00917,\"9\":0.00458,\"10\":0.00458,\"11\":0.05043,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.01787},H:{\"0\":0.19732},L:{\"0\":65.4796},R:{_:\"0\"},M:{\"0\":0.18461},Q:{\"13.1\":0}};\n!/data/features/text-decoration.js\u0006\u001amodule.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"2\":\"C K L G M N O\",\"2052\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"2\":\"EC uB I w FC GC\",\"1028\":\"DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"1060\":\"0 1 2 3 4 5 6 7 8 9 J D E F A B C K L G M N O x g y z AB BB CB\"},D:{\"2\":\"0 1 2 I w J D E F A B C K L G M N O x g y z\",\"226\":\"3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB\",\"2052\":\"YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"2\":\"I w J D IC 0B JC KC\",\"772\":\"K L G sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"804\":\"E F A B C MC 1B rB\",\"1316\":\"LC\"},F:{\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB QC RC SC TC rB BC UC sB\",\"226\":\"CB DB EB FB GB HB IB JB KB\",\"2052\":\"LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\"},G:{\"2\":\"0B VC CC WC XC YC\",\"292\":\"E ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"2\":\"A B C rB BC sB\",\"2052\":\"h\"},L:{\"2052\":\"H\"},M:{\"1028\":\"f\"},N:{\"2\":\"A B\"},O:{\"2052\":\"wC\"},P:{\"2\":\"I xC yC\",\"2052\":\"g zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"2052\":\"2B\"},R:{\"2052\":\"AD\"},S:{\"1028\":\"BD CD\"}},B:4,C:\"text-decoration styling\"};\n\"/data/features/link-rel-preload.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M\",\"1028\":\"N O\"},C:{\"1\":\"U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB FC GC\",\"132\":\"XB\",\"578\":\"YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T\"},D:{\"1\":\"RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB\"},E:{\"1\":\"C K L G rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A IC 0B JC KC LC MC 1B\",\"322\":\"B\"},F:{\"1\":\"EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB QC RC SC TC rB BC UC sB\"},G:{\"1\":\"fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC\",\"322\":\"eC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"2\":\"BD CD\"}},B:4,C:\"Resource Hints: preload\"};\n/data/regions/IM.js\u0011zmodule.exports={C:{\"2\":0,\"3\":0.00509,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0.00509,\"39\":0,\"40\":0,\"41\":0,\"42\":0.01018,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.22392,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0.01018,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.00509,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0.01018,\"84\":0.01018,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0.00509,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0.00509,\"102\":0,\"103\":0,\"104\":0,\"105\":0,\"106\":0.00509,\"107\":0.01527,\"108\":0.04071,\"109\":0.8346,\"110\":0.45801,\"111\":0.00509,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0.00509,\"39\":0.01018,\"40\":0.00509,\"41\":0.00509,\"42\":0,\"43\":0.00509,\"44\":0.00509,\"45\":0.01018,\"46\":0,\"47\":0.01018,\"48\":0,\"49\":0.04071,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0.00509,\"66\":0,\"67\":0.07125,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0.00509,\"77\":0,\"78\":0,\"79\":0,\"80\":0.0916,\"81\":0,\"83\":0,\"84\":0,\"85\":0.02036,\"86\":0.00509,\"87\":0.01527,\"88\":0,\"89\":0,\"90\":0.01018,\"91\":0.00509,\"92\":0.00509,\"93\":0.01527,\"94\":0,\"95\":0.00509,\"96\":0.00509,\"97\":0,\"98\":0.03053,\"99\":0.00509,\"100\":0.03562,\"101\":0.00509,\"102\":0.00509,\"103\":0.12723,\"104\":0.02545,\"105\":0.29516,\"106\":0.02036,\"107\":0.03053,\"108\":0.30025,\"109\":6.07627,\"110\":3.79131,\"111\":0.00509,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0.00509,\"31\":0.00509,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.00509,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.01018,\"94\":0.42239,\"95\":0.16794,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0.00509},B:{\"12\":0,\"13\":0,\"14\":0.00509,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0.00509,\"88\":0,\"89\":0,\"90\":0.00509,\"91\":0.01018,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0.00509,\"104\":0,\"105\":0.01527,\"106\":0.01527,\"107\":0.09669,\"108\":0.11705,\"109\":2.49361,\"110\":2.69717},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.00509,\"14\":0.09669,\"15\":0.01527,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0.26972,\"13.1\":0.26463,\"14.1\":0.20865,\"15.1\":0.02545,\"15.2-15.3\":0.02036,\"15.4\":0.05598,\"15.5\":0.10178,\"15.6\":1.12467,\"16.0\":0.1374,\"16.1\":0.49872,\"16.2\":1.67428,\"16.3\":0.81933,\"16.4\":0.00509},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0.01406,\"8.1-8.4\":0.02343,\"9.0-9.2\":0.00469,\"9.3\":0.66996,\"10.0-10.2\":0,\"10.3\":0.14055,\"11.0-11.2\":0.0328,\"11.3-11.4\":0.01406,\"12.0-12.1\":0.01874,\"12.2-12.5\":1.43831,\"13.0-13.1\":0.00469,\"13.2\":0,\"13.3\":0.01874,\"13.4-13.7\":0.05154,\"14.0-14.4\":0.59032,\"14.5-14.8\":1.11973,\"15.0-15.1\":0.44039,\"15.2-15.3\":0.30453,\"15.4\":0.29984,\"15.5\":1.16189,\"15.6\":4.14627,\"16.0\":3.54189,\"16.1\":12.59809,\"16.2\":12.12958,\"16.3\":5.34095,\"16.4\":0.08433},P:{\"4\":0.10753,\"20\":1.2689,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0.01075,\"8.2\":0,\"9.2\":0.01075,\"10.1\":0.02151,\"11.1-11.2\":0,\"12.0\":0,\"13.0\":0.09678,\"14.0\":0,\"15.0\":0.01075,\"16.0\":0.03226,\"17.0\":0.01075,\"18.0\":0.17205,\"19.0\":2.00013},I:{\"0\":0,\"3\":0,\"4\":0.25428,\"2.1\":0.01429,\"2.2\":0.00857,\"2.3\":0.02571,\"4.1\":0.03714,\"4.2-4.3\":0.06857,\"4.4\":0,\"4.4.3-4.4.4\":0.25999},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0.00509,\"7\":0.00509,\"8\":0.0458,\"9\":0.01018,\"10\":0.01018,\"11\":0.06107,\"5.5\":0},N:{\"10\":0.00982,\"11\":0.00982},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0.00491},O:{\"0\":0.02947},H:{\"0\":0.05114},L:{\"0\":24.0835},R:{_:\"0\"},M:{\"0\":0.52548},Q:{\"13.1\":0}};\n/data/regions/DM.js\u0010module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.00527,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0,\"108\":0.02637,\"109\":0.40075,\"110\":0.30583,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0.00527,\"51\":0,\"52\":0,\"53\":0.00527,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0.01055,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0.00527,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0.00527,\"76\":0.76459,\"77\":0.08437,\"78\":0,\"79\":0.06328,\"80\":0,\"81\":0.06328,\"83\":0,\"84\":0.01582,\"85\":0.05273,\"86\":0,\"87\":0,\"88\":0.02109,\"89\":0.00527,\"90\":0.01582,\"91\":0,\"92\":0.01582,\"93\":0.02637,\"94\":0,\"95\":0.00527,\"96\":0.01055,\"97\":0.01055,\"98\":0,\"99\":0.00527,\"100\":0.05273,\"101\":0.00527,\"102\":0.00527,\"103\":0.10546,\"104\":0.00527,\"105\":0.06328,\"106\":0.02637,\"107\":0.04218,\"108\":0.6064,\"109\":9.2172,\"110\":5.22027,\"111\":0.01055,\"112\":0.01055,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0.00527,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0.08964,\"64\":0,\"65\":0,\"66\":0,\"67\":0.04746,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0.00527,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.01582,\"94\":0.18983,\"95\":0.10546,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0.00527,\"13\":0,\"14\":0.00527,\"15\":0,\"16\":0.01582,\"17\":0.01582,\"18\":0.01582,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0.00527,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0.058,\"104\":0.00527,\"105\":0.53785,\"106\":0,\"107\":0.01582,\"108\":0.16874,\"109\":1.46589,\"110\":1.95101},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.01055,\"14\":0.01582,\"15\":0.00527,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0.01055,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0.00527,\"13.1\":0.01582,\"14.1\":0.0791,\"15.1\":0.01582,\"15.2-15.3\":0,\"15.4\":0,\"15.5\":0.03691,\"15.6\":0.51148,\"16.0\":0.03164,\"16.1\":0.14237,\"16.2\":0.66967,\"16.3\":0.17401,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0.00372,\"6.0-6.1\":0,\"7.0-7.1\":0.00929,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0.00929,\"10.0-10.2\":0.00372,\"10.3\":0.00557,\"11.0-11.2\":0.01672,\"11.3-11.4\":0.0223,\"12.0-12.1\":0,\"12.2-12.5\":0.61131,\"13.0-13.1\":0,\"13.2\":0,\"13.3\":0,\"13.4-13.7\":0.05203,\"14.0-14.4\":0.06503,\"14.5-14.8\":0.20625,\"15.0-15.1\":0.11149,\"15.2-15.3\":0.17466,\"15.4\":0.08919,\"15.5\":1.47162,\"15.6\":1.09814,\"16.0\":1.56452,\"16.1\":2.37651,\"16.2\":5.37177,\"16.3\":2.74813,\"16.4\":0.04831},P:{\"4\":0.02113,\"20\":0.94039,\"5.0-5.4\":0.01057,\"6.2-6.4\":0,\"7.2-7.4\":0.13736,\"8.2\":0,\"9.2\":0.01057,\"10.1\":0,\"11.1-11.2\":0.01057,\"12.0\":0,\"13.0\":0.01057,\"14.0\":0,\"15.0\":0,\"16.0\":0.0317,\"17.0\":0.20076,\"18.0\":0.02113,\"19.0\":2.55703},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0.10516,\"4.4\":0,\"4.4.3-4.4.4\":0.81125},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0.00527,\"11\":0.00527,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0.00473},O:{\"0\":0.27417},H:{\"0\":0.46095},L:{\"0\":51.97387},R:{_:\"0\"},M:{\"0\":0.09927},Q:{\"13.1\":0}};\n)/data/features/comparedocumentposition.js\u0006\u0002module.exports={A:{A:{\"1\":\"F A B\",\"2\":\"J D E DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"16\":\"EC uB FC GC\"},D:{\"1\":\"7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"16\":\"I w J D E F A B C K L\",\"132\":\"0 1 2 3 4 5 6 G M N O x g y z\"},E:{\"1\":\"A B C K L G 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"16\":\"I w J IC 0B\",\"132\":\"D E F KC LC MC\",\"260\":\"JC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 C N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e UC sB\",\"16\":\"F B QC RC SC TC rB BC\",\"132\":\"G M\"},G:{\"1\":\"cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"16\":\"0B\",\"132\":\"E VC CC WC XC YC ZC aC bC\"},H:{\"1\":\"pC\"},I:{\"1\":\"H uC vC\",\"16\":\"qC rC\",\"132\":\"uB I sC tC CC\"},J:{\"132\":\"D A\"},K:{\"1\":\"C h sB\",\"16\":\"A B rB BC\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:1,C:\"Node.compareDocumentPosition()\"};\n!/data/features/css-unset-value.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C\"},C:{\"1\":\"4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 EC uB I w J D E F A B C K L G M N O x g y z FC GC\"},D:{\"1\":\"IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB\"},E:{\"1\":\"A B C K L G MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F IC 0B JC KC LC\"},F:{\"1\":\"5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 F B C G M N O x g y z QC RC SC TC rB BC UC sB\"},G:{\"1\":\"bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:2,C:\"CSS unset value\"};\n/data/regions/DZ.js\u0012module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0.00317,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0.01587,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0.00317,\"35\":0,\"36\":0,\"37\":0,\"38\":0.00317,\"39\":0,\"40\":0.00317,\"41\":0,\"42\":0,\"43\":0.00317,\"44\":0,\"45\":0,\"46\":0,\"47\":0.00635,\"48\":0.00635,\"49\":0,\"50\":0,\"51\":0,\"52\":0.0476,\"53\":0,\"54\":0,\"55\":0,\"56\":0.00317,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0.00317,\"65\":0,\"66\":0,\"67\":0,\"68\":0.00317,\"69\":0,\"70\":0,\"71\":0,\"72\":0.00317,\"73\":0,\"74\":0,\"75\":0.00317,\"76\":0,\"77\":0,\"78\":0.00317,\"79\":0,\"80\":0,\"81\":0.00317,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0.00317,\"92\":0,\"93\":0,\"94\":0.00317,\"95\":0.00317,\"96\":0,\"97\":0,\"98\":0,\"99\":0.00317,\"100\":0.00317,\"101\":0.00317,\"102\":0.01587,\"103\":0.00317,\"104\":0.00635,\"105\":0.00317,\"106\":0.00635,\"107\":0.01269,\"108\":0.02538,\"109\":0.3998,\"110\":0.31095,\"111\":0.00635,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0.00317,\"27\":0,\"28\":0.00317,\"29\":0,\"30\":0,\"31\":0.00317,\"32\":0.00952,\"33\":0.00952,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0.00317,\"39\":0,\"40\":0.00635,\"41\":0,\"42\":0,\"43\":0.05077,\"44\":0.00317,\"45\":0,\"46\":0.00317,\"47\":0.00317,\"48\":0.00317,\"49\":0.04125,\"50\":0.00317,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0.00317,\"56\":0.00635,\"57\":0,\"58\":0.00635,\"59\":0,\"60\":0.00635,\"61\":0.00317,\"62\":0.00317,\"63\":0.00952,\"64\":0.00635,\"65\":0.00317,\"66\":0.00317,\"67\":0.01269,\"68\":0.00952,\"69\":0.00635,\"70\":0.00635,\"71\":0.01269,\"72\":0.00635,\"73\":0.00317,\"74\":0.00952,\"75\":0.00317,\"76\":0.00635,\"77\":0.00635,\"78\":0.00317,\"79\":0.02221,\"80\":0.00952,\"81\":0.02221,\"83\":0.00952,\"84\":0.00635,\"85\":0.02221,\"86\":0.01269,\"87\":0.01269,\"88\":0.00635,\"89\":0.00635,\"90\":0.00635,\"91\":0.00952,\"92\":0.00952,\"93\":0.00317,\"94\":0.00317,\"95\":0.01904,\"96\":0.00635,\"97\":0.00952,\"98\":0.03173,\"99\":0.01269,\"100\":0.01269,\"101\":0.00952,\"102\":0.02856,\"103\":0.03173,\"104\":0.01269,\"105\":0.03173,\"106\":0.02538,\"107\":0.06029,\"108\":0.16817,\"109\":4.70556,\"110\":1.31045,\"111\":0.00317,\"112\":0.00317,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0.00317,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0.00317,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0.00317,\"62\":0,\"63\":0.00317,\"64\":0.00317,\"65\":0.00317,\"66\":0,\"67\":0.01904,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0.01269,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0.00317,\"85\":0.01587,\"86\":0.00317,\"87\":0.00317,\"88\":0,\"89\":0,\"90\":0,\"91\":0.00317,\"92\":0,\"93\":0.01269,\"94\":0.19038,\"95\":0.18086,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0.00317,\"13\":0.01269,\"14\":0,\"15\":0.00317,\"16\":0.00317,\"17\":0,\"18\":0.00635,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00635,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0,\"106\":0.00317,\"107\":0.00952,\"108\":0.00952,\"109\":0.20307,\"110\":0.26019},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0.00317,\"15\":0,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0.00317,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0,\"13.1\":0.00317,\"14.1\":0.00635,\"15.1\":0.00317,\"15.2-15.3\":0.00317,\"15.4\":0.00317,\"15.5\":0.00635,\"15.6\":0.02538,\"16.0\":0.00317,\"16.1\":0.01904,\"16.2\":0.02221,\"16.3\":0.02856,\"16.4\":0},G:{\"8\":0.00055,\"3.2\":0.00109,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0.01038,\"6.0-6.1\":0.00328,\"7.0-7.1\":0.04645,\"8.1-8.4\":0.00164,\"9.0-9.2\":0.00109,\"9.3\":0.08306,\"10.0-10.2\":0.00164,\"10.3\":0.04207,\"11.0-11.2\":0.01366,\"11.3-11.4\":0.00437,\"12.0-12.1\":0.0082,\"12.2-12.5\":0.2131,\"13.0-13.1\":0.00437,\"13.2\":0.0082,\"13.3\":0.01421,\"13.4-13.7\":0.03989,\"14.0-14.4\":0.10491,\"14.5-14.8\":0.18032,\"15.0-15.1\":0.07595,\"15.2-15.3\":0.10491,\"15.4\":0.1377,\"15.5\":0.21638,\"15.6\":0.38031,\"16.0\":0.61363,\"16.1\":0.89067,\"16.2\":0.86061,\"16.3\":0.77155,\"16.4\":0.00437},P:{\"4\":0.12422,\"20\":0.2588,\"5.0-5.4\":0.01035,\"6.2-6.4\":0,\"7.2-7.4\":0.09317,\"8.2\":0,\"9.2\":0.0207,\"10.1\":0.01035,\"11.1-11.2\":0.04141,\"12.0\":0.01035,\"13.0\":0.05176,\"14.0\":0.03106,\"15.0\":0.0207,\"16.0\":0.08282,\"17.0\":0.07246,\"18.0\":0.09317,\"19.0\":0.66253},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.00499,\"4.2-4.3\":0.02991,\"4.4\":0,\"4.4.3-4.4.4\":0.12712},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0.01363,\"9\":0.00341,\"10\":0.00341,\"11\":0.06816,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.32087},H:{\"0\":0.43305},L:{\"0\":82.49636},R:{_:\"0\"},M:{\"0\":0.10923},Q:{\"13.1\":0}};\n/data/features/pdf-viewer.js\u0005module.exports={A:{A:{\"2\":\"J D E F A DC\",\"132\":\"B\"},B:{\"1\":\"G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"16\":\"C K L\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB I w J D E F A B C K L G M N O FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"16\":\"I w J D E F A B C K L\"},E:{\"1\":\"I w J D E F A B C K L G JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"16\":\"IC 0B\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e sB\",\"2\":\"F B QC RC SC TC rB BC UC\"},G:{\"1\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"16\":\"D A\"},K:{\"2\":\"A B C h rB BC sB\"},L:{\"2\":\"H\"},M:{\"2\":\"f\"},N:{\"16\":\"A B\"},O:{\"2\":\"wC\"},P:{\"2\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"2\":\"AD\"},S:{\"2\":\"BD CD\"}},B:6,C:\"Built-in PDF viewer\"};\n/data/regions/NF.js\tmodule.exports={C:{\"109\":3.82263,\"110\":3.82263,_:\"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 111 112 3.5 3.6\"},D:{\"86\":0.15796,\"103\":0.15796,\"108\":0.15796,\"109\":6.36974,\"110\":5.73395,_:\"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 83 84 85 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 104 105 106 107 111 112 113\"},F:{_:\"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1\",\"10.0-10.1\":0},B:{\"109\":0.15796,\"110\":4.61638,_:\"12 13 14 15 16 17 18 79 80 81 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108\"},E:{\"4\":0,\"14\":0.15796,_:\"0 5 6 7 8 9 10 11 12 13 15 3.1 3.2 5.1 6.1 7.1 9.1 10.1 11.1 13.1 14.1 15.1 15.2-15.3 15.4 15.5 16.0 16.4\",\"12.1\":0.31987,\"15.6\":5.25612,\"16.1\":0.7977,\"16.2\":4.45842,\"16.3\":0.47783},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0,\"10.0-10.2\":0,\"10.3\":0,\"11.0-11.2\":0,\"11.3-11.4\":0,\"12.0-12.1\":0,\"12.2-12.5\":3.61563,\"13.0-13.1\":0,\"13.2\":0,\"13.3\":0,\"13.4-13.7\":0,\"14.0-14.4\":0.17267,\"14.5-14.8\":0.17267,\"15.0-15.1\":0.34534,\"15.2-15.3\":0,\"15.4\":0,\"15.5\":2.0642,\"15.6\":0.86074,\"16.0\":2.0642,\"16.1\":2.58222,\"16.2\":4.99176,\"16.3\":5.50716,\"16.4\":0},P:{\"4\":0.2888,\"20\":0.71644,\"5.0-5.4\":0.01042,\"6.2-6.4\":0.0206,\"7.2-7.4\":0.38163,\"8.2\":0.02044,\"9.2\":0.04126,\"10.1\":0.0217,\"11.1-11.2\":0.10314,\"12.0\":0.01031,\"13.0\":0.04126,\"14.0\":0.05157,\"15.0\":0.04126,\"16.0\":0.23723,\"17.0\":0.17534,\"18.0\":0.18566,\"19.0\":0.17911},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0,\"4.4\":0,\"4.4.3-4.4.4\":0},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"11\":2.70507,_:\"6 7 8 9 10 5.5\"},N:{\"10\":0.03712,\"11\":0.07423},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0},H:{\"0\":0.33799},L:{\"0\":37.03881},R:{_:\"0\"},M:{\"0\":0},Q:{\"13.1\":0}};\n/data/regions/LB.js\u0011 module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.00577,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0.00577,\"59\":0,\"60\":0,\"61\":0,\"62\":0.00289,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.01155,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0.00289,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0.00289,\"103\":0,\"104\":0.00289,\"105\":0.00289,\"106\":0.00289,\"107\":0.00577,\"108\":0.01155,\"109\":0.33489,\"110\":0.18477,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0.00289,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0.03176,\"62\":0,\"63\":0,\"64\":0,\"65\":0.00289,\"66\":0,\"67\":0,\"68\":0.00289,\"69\":0.00289,\"70\":0.00289,\"71\":0,\"72\":0.00289,\"73\":0,\"74\":0.00577,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0.00577,\"80\":0.00289,\"81\":0.00577,\"83\":0.00289,\"84\":0.00577,\"85\":0.00577,\"86\":0.00289,\"87\":0.00577,\"88\":0.00289,\"89\":0.00289,\"90\":0.00289,\"91\":0.00866,\"92\":0.00577,\"93\":0.00289,\"94\":0.00289,\"95\":0.00289,\"96\":0.01155,\"97\":0.00577,\"98\":0.00577,\"99\":0.00289,\"100\":0.01155,\"101\":0.00289,\"102\":0.01155,\"103\":0.02021,\"104\":0.01155,\"105\":0.00866,\"106\":0.01155,\"107\":0.02021,\"108\":0.11548,\"109\":3.48172,\"110\":1.82747,\"111\":0,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.00577,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0.00289,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.00577,\"94\":0.08084,\"95\":0.07218,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0.00289,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.01155,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0.00289,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0.00289,\"106\":0.00577,\"107\":0.00289,\"108\":0.01444,\"109\":0.27138,\"110\":0.3118},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.00289,\"14\":0.02021,\"15\":0.00289,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0.04331,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0.00577,\"13.1\":0.02598,\"14.1\":0.05197,\"15.1\":0.00577,\"15.2-15.3\":0.01444,\"15.4\":0.02021,\"15.5\":0.03464,\"15.6\":0.09527,\"16.0\":0.01155,\"16.1\":0.04908,\"16.2\":0.10105,\"16.3\":0.08372,\"16.4\":0.00289},G:{\"8\":0.00383,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0.00767,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0.04217,\"10.0-10.2\":0,\"10.3\":0.046,\"11.0-11.2\":0,\"11.3-11.4\":0,\"12.0-12.1\":0.02683,\"12.2-12.5\":0.61715,\"13.0-13.1\":0.01533,\"13.2\":0.00767,\"13.3\":0.0575,\"13.4-13.7\":0.11883,\"14.0-14.4\":0.36799,\"14.5-14.8\":1.18063,\"15.0-15.1\":0.26449,\"15.2-15.3\":0.42932,\"15.4\":0.45999,\"15.5\":0.98897,\"15.6\":2.66791,\"16.0\":5.55432,\"16.1\":8.28356,\"16.2\":8.48289,\"16.3\":6.63528,\"16.4\":0.0115},P:{\"4\":0.06086,\"20\":2.41417,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0.14201,\"8.2\":0.02029,\"9.2\":0.03043,\"10.1\":0,\"11.1-11.2\":0.08115,\"12.0\":0.03043,\"13.0\":0.11158,\"14.0\":0.08115,\"15.0\":0.05072,\"16.0\":0.14201,\"17.0\":0.18258,\"18.0\":0.21302,\"19.0\":3.36767},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0.00669,\"4.4\":0,\"4.4.3-4.4.4\":0.05218},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.01732,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.15649},H:{\"0\":0.15488},L:{\"0\":46.22017},R:{_:\"0\"},M:{\"0\":0.12803},Q:{\"13.1\":0}};\n*/data/features/input-autocomplete-onoff.js\u0005module.exports={A:{A:{\"1\":\"J D E F A DC\",\"132\":\"B\"},B:{\"132\":\"C K L G M N O\",\"260\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 EC uB I w J D E F A B C K L G M N O x g y z FC GC\",\"516\":\"7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\"},D:{\"1\":\"0 1 2 3 N O x g y z\",\"2\":\"I w J D E F A B C K L G M\",\"132\":\"4 5 6 7 8 9 AB BB CB DB EB FB GB HB\",\"260\":\"IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"J JC KC\",\"2\":\"I w IC 0B\",\"2052\":\"D E F A B C K L G LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\"},G:{\"2\":\"0B VC CC\",\"1025\":\"E WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"1025\":\"pC\"},I:{\"1\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"1\":\"D A\"},K:{\"1\":\"A B C h rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2052\":\"A B\"},O:{\"1025\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"260\":\"2B\"},R:{\"1\":\"AD\"},S:{\"516\":\"BD CD\"}},B:1,C:\"autocomplete attribute: on & off values\"};\n/data/features/svg.js\u0005module.exports={A:{A:{\"2\":\"DC\",\"8\":\"J D E\",\"772\":\"F A B\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"513\":\"C K L G M N O\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\",\"4\":\"EC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"I w J D E F A B C K L G 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"4\":\"IC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\"},G:{\"1\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"1\":\"pC\"},I:{\"1\":\"H uC vC\",\"2\":\"qC rC sC\",\"132\":\"uB I tC CC\"},J:{\"1\":\"D A\"},K:{\"1\":\"A B C h rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"257\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:4,C:\"SVG (basic support)\"};\n/data/features/sharedworkers.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"1\":\"6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 EC uB I w J D E F A B C K L G M N O x g y z FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"w J JC tB 7B 8B 9B AC PC\",\"2\":\"I D E F A B C K L G IC 0B KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e TC rB BC UC sB\",\"2\":\"F QC RC SC\"},G:{\"1\":\"WC XC tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"1\":\"D A\"},K:{\"1\":\"B C rB BC sB\",\"2\":\"h\",\"16\":\"A\"},L:{\"2\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"1\":\"I\",\"2\":\"g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"2\":\"2B\"},R:{\"2\":\"AD\"},S:{\"1\":\"BD CD\"}},B:1,C:\"Shared Web Workers\"};\n/data/regions/MS.js\u000fxmodule.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0.01202,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0,\"108\":0,\"109\":0.04807,\"110\":0.51077,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0.01803,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0.01202,\"91\":0,\"92\":0,\"93\":0,\"94\":0.01202,\"95\":0.01202,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0.01202,\"103\":0.10215,\"104\":0,\"105\":0,\"106\":0.01803,\"107\":0.03605,\"108\":0.72709,\"109\":11.60338,\"110\":10.49772,\"111\":0,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0.1322,\"95\":0.08413,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0.04807,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0,\"106\":0.04807,\"107\":0.01803,\"108\":0.07211,\"109\":1.11167,\"110\":2.75813},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0.24036,\"15\":0.03605,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0.07211,\"11.1\":0,\"12.1\":0,\"13.1\":0.01803,\"14.1\":0.10215,\"15.1\":0,\"15.2-15.3\":0,\"15.4\":0,\"15.5\":1.15373,\"15.6\":0.61292,\"16.0\":0.03605,\"16.1\":0.04807,\"16.2\":0.15623,\"16.3\":0.80521,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0.01978,\"10.0-10.2\":0,\"10.3\":0.03956,\"11.0-11.2\":0,\"11.3-11.4\":0.01978,\"12.0-12.1\":0,\"12.2-12.5\":0.01978,\"13.0-13.1\":0,\"13.2\":0,\"13.3\":0,\"13.4-13.7\":9.28217,\"14.0-14.4\":0,\"14.5-14.8\":0.01978,\"15.0-15.1\":0,\"15.2-15.3\":0.22006,\"15.4\":0,\"15.5\":0,\"15.6\":1.08053,\"16.0\":1.28081,\"16.1\":1.8594,\"16.2\":2.66053,\"16.3\":6.44114,\"16.4\":0},P:{\"4\":0.8809,\"20\":0.34567,\"5.0-5.4\":0.0223,\"6.2-6.4\":0,\"7.2-7.4\":0.12266,\"8.2\":0,\"9.2\":0,\"10.1\":0,\"11.1-11.2\":0,\"12.0\":0,\"13.0\":0,\"14.0\":0,\"15.0\":0,\"16.0\":0.0223,\"17.0\":0.03345,\"18.0\":0,\"19.0\":2.63156},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0,\"4.4\":0,\"4.4.3-4.4.4\":1.71857},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.01596},H:{\"0\":0},L:{\"0\":37.64293},R:{_:\"0\"},M:{\"0\":0},Q:{\"13.1\":0}};\n/data/features/setimmediate.js\u0005module.exports={A:{A:{\"1\":\"A B\",\"2\":\"J D E F DC\"},B:{\"1\":\"C K L G M N O\",\"2\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"2\":\"A B C h rB BC sB\"},L:{\"2\":\"H\"},M:{\"2\":\"f\"},N:{\"1\":\"A B\"},O:{\"2\":\"wC\"},P:{\"2\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"2\":\"2B\"},R:{\"2\":\"AD\"},S:{\"2\":\"BD CD\"}},B:7,C:\"Efficient Script Yielding: setImmediate()\"};\n(/data/features/passive-event-listener.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G\"},C:{\"1\":\"QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB FC GC\"},D:{\"1\":\"SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB\"},E:{\"1\":\"A B C K L G 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F IC 0B JC KC LC MC\"},F:{\"1\":\"FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB QC RC SC TC rB BC UC sB\"},G:{\"1\":\"cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"2\":\"BD\"}},B:1,C:\"Passive event listeners\"};\n/data/features/maxlength.js\u0006.module.exports={A:{A:{\"1\":\"A B\",\"16\":\"DC\",\"900\":\"J D E F\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"1025\":\"C K L G M N O\"},C:{\"1\":\"SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"900\":\"EC uB FC GC\",\"1025\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"J D E F A B C K L G JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"16\":\"w IC\",\"900\":\"I 0B\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"16\":\"F\",\"132\":\"B C QC RC SC TC rB BC UC sB\"},G:{\"1\":\"VC CC WC XC YC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"16\":\"0B\",\"2052\":\"E ZC\"},H:{\"132\":\"pC\"},I:{\"1\":\"uB I sC tC CC uC vC\",\"16\":\"qC rC\",\"4097\":\"H\"},J:{\"1\":\"D A\"},K:{\"132\":\"A B C rB BC sB\",\"4097\":\"h\"},L:{\"4097\":\"H\"},M:{\"4097\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"4097\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1025\":\"BD CD\"}},B:1,C:\"maxlength attribute for input and textarea elements\"};\n#/data/features/rtcpeerconnection.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L\",\"516\":\"G M N O\"},C:{\"1\":\"LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB I w J D E F A B C K L G M N O x g y FC GC\",\"33\":\"0 1 2 3 4 5 6 7 8 9 z AB BB CB DB EB FB GB HB IB JB KB\"},D:{\"1\":\"XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"I w J D E F A B C K L G M N O x g y z\",\"33\":\"0 1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB\"},E:{\"1\":\"B C K L G rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A IC 0B JC KC LC MC 1B\"},F:{\"1\":\"KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F B C G M N QC RC SC TC rB BC UC sB\",\"33\":\"0 1 2 3 4 5 6 7 8 9 O x g y z AB BB CB DB EB FB GB HB IB JB\"},G:{\"1\":\"eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D\",\"130\":\"A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"33\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:5,C:\"WebRTC Peer-to-peer connections\"};\n/data/features/documenthead.js\u0005module.exports={A:{A:{\"1\":\"F A B\",\"2\":\"J D E DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"J D E F A B C K L G JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I IC 0B\",\"16\":\"w\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e rB BC UC sB\",\"2\":\"F QC RC SC TC\"},G:{\"1\":\"E VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"16\":\"0B\"},H:{\"1\":\"pC\"},I:{\"1\":\"uB I H sC tC CC uC vC\",\"16\":\"qC rC\"},J:{\"1\":\"D A\"},K:{\"1\":\"B C h rB BC sB\",\"2\":\"A\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:1,C:\"document.head\"};\n!/data/features/urlsearchparams.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M\"},C:{\"1\":\"LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 EC uB I w J D E F A B C K L G M N O x g y z FC GC\",\"132\":\"6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB\"},D:{\"1\":\"QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB\"},E:{\"1\":\"B C K L G 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A IC 0B JC KC LC MC\"},F:{\"1\":\"DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB QC RC SC TC rB BC UC sB\"},G:{\"1\":\"dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:1,C:\"URLSearchParams\"};\n!/data/features/referrer-policy.js\u0006\u001cmodule.exports={A:{A:{\"2\":\"J D E F A DC\",\"132\":\"B\"},B:{\"1\":\"P Q R S\",\"132\":\"C K L G M N O\",\"513\":\"T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB FC GC\",\"513\":\"W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\"},D:{\"1\":\"wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T\",\"2\":\"I w J D E F A B C K L G M N O x g\",\"260\":\"0 1 2 3 4 5 6 7 8 9 y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB\",\"513\":\"U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"C rB sB\",\"2\":\"I w J D IC 0B JC KC\",\"132\":\"E F A B LC MC 1B\",\"1025\":\"K L G 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB\",\"2\":\"F B C QC RC SC TC rB BC UC sB\",\"513\":\"h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\"},G:{\"1\":\"gC hC iC jC\",\"2\":\"0B VC CC WC XC YC\",\"132\":\"E ZC aC bC cC dC eC fC\",\"1025\":\"kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"2\":\"A B C rB BC sB\",\"513\":\"h\"},L:{\"513\":\"H\"},M:{\"513\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I\"},Q:{\"1\":\"2B\"},R:{\"513\":\"AD\"},S:{\"1\":\"BD CD\"}},B:4,C:\"Referrer Policy\"};\n/data/regions/JM.js\u0011&module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0.02441,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.00407,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0.00407,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0.00814,\"108\":0.00814,\"109\":0.21154,\"110\":0.17899,\"111\":0.00814,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0.00407,\"50\":0,\"51\":0,\"52\":0,\"53\":0.00407,\"54\":0,\"55\":0.00407,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0.00407,\"64\":0,\"65\":0.00407,\"66\":0.00814,\"67\":0,\"68\":0,\"69\":0.00407,\"70\":0.00407,\"71\":0,\"72\":0,\"73\":0.02848,\"74\":0.00814,\"75\":0.0122,\"76\":0.03254,\"77\":0.01627,\"78\":0,\"79\":0.03661,\"80\":0.00407,\"81\":0.0122,\"83\":0.08136,\"84\":0.00814,\"85\":0.00407,\"86\":0.00407,\"87\":0.02441,\"88\":0.00407,\"89\":0.00407,\"90\":0.00407,\"91\":0.0122,\"92\":0.00814,\"93\":0.09356,\"94\":0.0122,\"95\":0.00814,\"96\":0.00407,\"97\":0.00814,\"98\":0.0122,\"99\":0.0122,\"100\":0.00814,\"101\":0.00407,\"102\":0.01627,\"103\":0.25628,\"104\":0.00814,\"105\":0.02848,\"106\":0.02848,\"107\":0.04068,\"108\":0.65902,\"109\":5.4918,\"110\":3.46594,\"111\":0.01627,\"112\":0.00814,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.0122,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.01627,\"94\":0.18713,\"95\":0.13424,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0.00407,\"17\":0.00407,\"18\":0.00407,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00814,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0.00407,\"104\":0,\"105\":0,\"106\":0.00407,\"107\":0.04882,\"108\":0.03254,\"109\":0.77292,\"110\":1.1309},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0.0122,\"15\":0.00407,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0.00407,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0.00407,\"12.1\":0.00814,\"13.1\":0.06916,\"14.1\":0.04882,\"15.1\":0.01627,\"15.2-15.3\":0.0122,\"15.4\":0.02034,\"15.5\":0.04882,\"15.6\":0.2034,\"16.0\":0.03254,\"16.1\":0.06916,\"16.2\":0.23188,\"16.3\":0.13424,\"16.4\":0},G:{\"8\":0.00743,\"3.2\":0.00248,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0.00495,\"6.0-6.1\":0,\"7.0-7.1\":0.20791,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0.13613,\"10.0-10.2\":0,\"10.3\":0.04455,\"11.0-11.2\":0.05445,\"11.3-11.4\":0.00743,\"12.0-12.1\":0.01485,\"12.2-12.5\":0.58166,\"13.0-13.1\":0.00495,\"13.2\":0,\"13.3\":0.02475,\"13.4-13.7\":0.06683,\"14.0-14.4\":0.24009,\"14.5-14.8\":0.52473,\"15.0-15.1\":0.14356,\"15.2-15.3\":0.18316,\"15.4\":0.30197,\"15.5\":0.39602,\"15.6\":1.63112,\"16.0\":2.75236,\"16.1\":4.67802,\"16.2\":6.06657,\"16.3\":3.8736,\"16.4\":0.02723},P:{\"4\":0.18048,\"20\":1.17846,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0.26542,\"8.2\":0,\"9.2\":0.01062,\"10.1\":0,\"11.1-11.2\":0.0637,\"12.0\":0,\"13.0\":0.0637,\"14.0\":0.04247,\"15.0\":0.02123,\"16.0\":0.11678,\"17.0\":0.0637,\"18.0\":0.1274,\"19.0\":2.00657},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0.19413,\"4.4\":0,\"4.4.3-4.4.4\":0.54709},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0.00407,\"11\":0.00407,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.40338},H:{\"0\":0.16848},L:{\"0\":56.08864},R:{_:\"0\"},M:{\"0\":0.12457},Q:{\"13.1\":0}};\n/data/features/web-serial.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\",\"66\":\"P Q R S T U V W X\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"1\":\"Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB\",\"66\":\"qB P Q R S T U V W X\"},E:{\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB QC RC SC TC rB BC UC sB\",\"66\":\"eB fB gB hB iB jB kB lB h mB nB\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"2\":\"A B C h rB BC sB\"},L:{\"2\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"2\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"2\":\"2B\"},R:{\"2\":\"AD\"},S:{\"2\":\"BD CD\"}},B:7,C:\"Web Serial API\"};\n/data/regions/GU.js\u0010module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0.00437,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.03061,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0.00875,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0.00437,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0.00437,\"108\":0.01312,\"109\":0.68219,\"110\":0.36296,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0.00875,\"50\":0,\"51\":0,\"52\":0,\"53\":0.01312,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0.00437,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0.00875,\"74\":0,\"75\":0,\"76\":0.00437,\"77\":0.00437,\"78\":0,\"79\":0.03936,\"80\":0,\"81\":0,\"83\":0.00875,\"84\":0,\"85\":0.00437,\"86\":0.00437,\"87\":0.01312,\"88\":0,\"89\":0,\"90\":0,\"91\":0.01312,\"92\":0.03498,\"93\":0.00875,\"94\":0,\"95\":0,\"96\":0.00875,\"97\":0.00437,\"98\":0.00875,\"99\":0.04373,\"100\":0.00437,\"101\":0.00437,\"102\":0,\"103\":0.09183,\"104\":0.00875,\"105\":0.03061,\"106\":0.01312,\"107\":0.03936,\"108\":0.33672,\"109\":5.84233,\"110\":3.59461,\"111\":0.03498,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0.00437,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.01749,\"94\":0.15743,\"95\":0.07434,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0.01749,\"18\":0,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00437,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0.00875,\"106\":0.00437,\"107\":0.0481,\"108\":0.03061,\"109\":1.60926,\"110\":1.30753},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.00875,\"14\":0.08746,\"15\":0.04373,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0.00437,\"12.1\":0.03936,\"13.1\":0.1137,\"14.1\":0.14431,\"15.1\":0.02187,\"15.2-15.3\":0.03498,\"15.4\":0.13119,\"15.5\":0.18367,\"15.6\":0.85711,\"16.0\":0.03498,\"16.1\":0.37171,\"16.2\":0.65595,\"16.3\":0.41981,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0.60974,\"10.0-10.2\":0,\"10.3\":0.04517,\"11.0-11.2\":0,\"11.3-11.4\":0.15808,\"12.0-12.1\":0.23486,\"12.2-12.5\":1.23754,\"13.0-13.1\":0.00903,\"13.2\":0.1355,\"13.3\":0.06775,\"13.4-13.7\":0.16711,\"14.0-14.4\":0.41552,\"14.5-14.8\":0.86718,\"15.0-15.1\":0.31164,\"15.2-15.3\":0.71362,\"15.4\":0.35229,\"15.5\":1.3098,\"15.6\":4.67012,\"16.0\":4.94112,\"16.1\":10.09903,\"16.2\":10.4197,\"16.3\":6.19672,\"16.4\":0.02258},P:{\"4\":0.23177,\"20\":1.78039,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0.0316,\"8.2\":0,\"9.2\":0.01053,\"10.1\":0,\"11.1-11.2\":0.0316,\"12.0\":0,\"13.0\":0.01053,\"14.0\":0.02107,\"15.0\":0.01053,\"16.0\":0.08428,\"17.0\":0.08428,\"18.0\":0.13695,\"19.0\":2.26499},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0,\"4.4\":0,\"4.4.3-4.4.4\":0.17306},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.00437,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.03376},H:{\"0\":0.1758},L:{\"0\":29.59092},R:{_:\"0\"},M:{\"0\":0.21945},Q:{\"13.1\":0}};\n)/data/features/background-position-x-y.js\u0005module.exports={A:{A:{\"1\":\"J D E F A B DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F B C QC RC SC TC rB BC UC sB\"},G:{\"1\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"1\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"1\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"2\":\"BD\"}},B:7,C:\"background-position-x & background-position-y\"};\n/data/features/run-in.js\u0005module.exports={A:{A:{\"1\":\"E F A B\",\"2\":\"J D DC\"},B:{\"2\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 I w J D E F A B C K L G M N O x g y z\",\"2\":\"9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"w J JC\",\"2\":\"D E F A B C K L G LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"16\":\"KC\",\"129\":\"I IC 0B\"},F:{\"1\":\"F B C G M N O QC RC SC TC rB BC UC sB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\"},G:{\"1\":\"VC CC WC XC YC\",\"2\":\"E ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"129\":\"0B\"},H:{\"1\":\"pC\"},I:{\"1\":\"uB I qC rC sC tC CC uC\",\"2\":\"H vC\"},J:{\"1\":\"D A\"},K:{\"1\":\"A B C rB BC sB\",\"2\":\"h\"},L:{\"2\":\"H\"},M:{\"2\":\"f\"},N:{\"1\":\"A B\"},O:{\"2\":\"wC\"},P:{\"2\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"2\":\"2B\"},R:{\"2\":\"AD\"},S:{\"2\":\"BD CD\"}},B:4,C:\"display: run-in\"};\n /data/features/css-exclusions.js\u0005module.exports={A:{A:{\"2\":\"J D E F DC\",\"33\":\"A B\"},B:{\"2\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"33\":\"C K L G M N O\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"2\":\"A B C h rB BC sB\"},L:{\"2\":\"H\"},M:{\"2\":\"f\"},N:{\"33\":\"A B\"},O:{\"2\":\"wC\"},P:{\"2\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"2\":\"2B\"},R:{\"2\":\"AD\"},S:{\"2\":\"BD CD\"}},B:5,C:\"CSS Exclusions Level 1\"};\n /data/features/object-entries.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K\"},C:{\"1\":\"OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB FC GC\"},D:{\"1\":\"VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB\"},E:{\"1\":\"B C K L G 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A IC 0B JC KC LC MC\"},F:{\"1\":\"IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB QC RC SC TC rB BC UC sB\"},G:{\"1\":\"dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D\",\"16\":\"A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I xC\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:6,C:\"Object.entries\"};\n'/data/features/css-container-queries.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"s t u v f H\",\"2\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q\",\"516\":\"r\"},C:{\"1\":\"f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v FC GC\"},D:{\"1\":\"s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a\",\"194\":\"c d e i j k l m n o p q\",\"450\":\"b\",\"516\":\"r\"},E:{\"1\":\"tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B\"},F:{\"1\":\"d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB QC RC SC TC rB BC UC sB\",\"194\":\"P Q R xB S T U V W X Y Z\",\"516\":\"a b c\"},G:{\"1\":\"tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"1\":\"g\",\"2\":\"I xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"2\":\"2B\"},R:{\"2\":\"AD\"},S:{\"2\":\"BD CD\"}},B:5,C:\"CSS Container Queries (Size)\"};\n/data/features/css-filters.js\u0006\nmodule.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"1028\":\"K L G M N O\",\"1346\":\"C\"},C:{\"1\":\"CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB FC\",\"196\":\"BB\",\"516\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB GC\"},D:{\"1\":\"UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"I w J D E F A B C K L G M N\",\"33\":\"0 1 2 3 4 5 6 7 8 9 O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB\"},E:{\"1\":\"A B C K L G MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w IC 0B JC\",\"33\":\"J D E F KC LC\"},F:{\"1\":\"HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F B C QC RC SC TC rB BC UC sB\",\"33\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB\"},G:{\"1\":\"bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC CC WC\",\"33\":\"E XC YC ZC aC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC\",\"33\":\"uC vC\"},J:{\"2\":\"D\",\"33\":\"A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"33\":\"I xC yC\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:5,C:\"CSS Filter Effects\"};\n!/data/features/resource-timing.js\u0005module.exports={A:{A:{\"1\":\"A B\",\"2\":\"J D E F DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 EC uB I w J D E F A B C K L G M N O x g y z FC GC\",\"194\":\"8 9 AB BB\"},D:{\"1\":\"2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 I w J D E F A B C K L G M N O x g y z\"},E:{\"1\":\"C K L G rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A IC 0B JC KC LC MC 1B\",\"260\":\"B\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F B C QC RC SC TC rB BC UC sB\"},G:{\"1\":\"eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H uC vC\",\"2\":\"uB I qC rC sC tC CC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:4,C:\"Resource Timing\"};\n/data/features/flexbox-gap.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O P Q R S\"},C:{\"1\":\"cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB FC GC\"},D:{\"1\":\"T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S\"},E:{\"1\":\"G NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A B C K L IC 0B JC KC LC MC 1B rB sB 2B\"},F:{\"1\":\"jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB QC RC SC TC rB BC UC sB\"},G:{\"1\":\"nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"1\":\"g 5C 6C tB 7C 8C 9C\",\"2\":\"I xC yC zC 0C 1C 1B 2C 3C 4C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"2\":\"BD\"}},B:5,C:\"gap property for Flexbox\"};\n(/data/features/form-submit-attributes.js\u0005module.exports={A:{A:{\"1\":\"A B\",\"2\":\"J D E F DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"16\":\"I w J D E F A B C K L\"},E:{\"1\":\"J D E F A B C K L G JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w IC 0B\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e TC rB BC UC sB\",\"2\":\"F QC\",\"16\":\"RC SC\"},G:{\"1\":\"E WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC CC\"},H:{\"1\":\"pC\"},I:{\"1\":\"I H tC CC uC vC\",\"2\":\"qC rC sC\",\"16\":\"uB\"},J:{\"1\":\"A\",\"2\":\"D\"},K:{\"1\":\"B C h rB BC sB\",\"16\":\"A\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:1,C:\"Attributes for form submission\"};\n+/data/features/document-scrollingelement.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"16\":\"C K\"},C:{\"1\":\"PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB FC GC\"},D:{\"1\":\"LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB\"},E:{\"1\":\"F A B C K L G MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E IC 0B JC KC LC\"},F:{\"1\":\"8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 F B C G M N O x g y z QC RC SC TC rB BC UC sB\"},G:{\"1\":\"aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:5,C:\"document.scrollingElement\"};\n$/data/features/unhandledrejection.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"1\":\"iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB FC GC\"},D:{\"1\":\"QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB\"},E:{\"1\":\"B C K L G rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A IC 0B JC KC LC MC 1B\"},F:{\"1\":\"DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB QC RC SC TC rB BC UC sB\"},G:{\"1\":\"fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC\",\"16\":\"eC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"2\":\"BD\"}},B:1,C:\"unhandledrejection/rejectionhandled events\"};\n/data/features/es6-module.js\u0006\u0014module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L\",\"4097\":\"M N O\",\"4290\":\"G\"},C:{\"1\":\"aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB FC GC\",\"322\":\"VB WB XB YB ZB vB\"},D:{\"1\":\"wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB\",\"194\":\"aB\"},E:{\"1\":\"B C K L G rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A IC 0B JC KC LC MC\",\"3076\":\"1B\"},F:{\"1\":\"PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB QC RC SC TC rB BC UC sB\",\"194\":\"OB\"},G:{\"1\":\"eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC\",\"3076\":\"dC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I xC yC zC\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"2\":\"BD\"}},B:1,C:\"JavaScript modules via script tag\"};\n/data/features/classlist.js\u0006\"module.exports={A:{A:{\"8\":\"J D E F DC\",\"1924\":\"A B\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"8\":\"EC uB FC\",\"516\":\"1 2\",\"772\":\"0 I w J D E F A B C K L G M N O x g y z GC\"},D:{\"1\":\"5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"8\":\"I w J D\",\"516\":\"1 2 3 4\",\"772\":\"0\",\"900\":\"E F A B C K L G M N O x g y z\"},E:{\"1\":\"D E F A B C K L G LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"8\":\"I w IC 0B\",\"900\":\"J JC KC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"8\":\"F B QC RC SC TC rB\",\"900\":\"C BC UC sB\"},G:{\"1\":\"E YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"8\":\"0B VC CC\",\"900\":\"WC XC\"},H:{\"900\":\"pC\"},I:{\"1\":\"H uC vC\",\"8\":\"qC rC sC\",\"900\":\"uB I tC CC\"},J:{\"1\":\"A\",\"900\":\"D\"},K:{\"1\":\"h\",\"8\":\"A B\",\"900\":\"C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"900\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:1,C:\"classList (DOMTokenList)\"};\n/data/features/wbr-element.js\u0005module.exports={A:{A:{\"1\":\"J D DC\",\"2\":\"E F A B\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"I w J D E F A B C K L G 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"16\":\"IC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\",\"16\":\"F\"},G:{\"1\":\"E WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"16\":\"0B VC CC\"},H:{\"1\":\"pC\"},I:{\"1\":\"uB I H sC tC CC uC vC\",\"16\":\"qC rC\"},J:{\"1\":\"D A\"},K:{\"1\":\"B C h rB BC sB\",\"2\":\"A\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:1,C:\"wbr (word break opportunity) element\"};\n/data/features/http2.js\u0006\u0002module.exports={A:{A:{\"2\":\"J D E F A DC\",\"132\":\"B\"},B:{\"1\":\"C K L G M N O\",\"513\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB FC GC\",\"513\":\"UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\"},D:{\"1\":\"IB JB KB LB MB NB OB PB QB RB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB\",\"513\":\"SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"B C K L G rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E IC 0B JC KC LC\",\"260\":\"F A MC 1B\"},F:{\"1\":\"5 6 7 8 9 AB BB CB DB EB\",\"2\":\"0 1 2 3 4 F B C G M N O x g y z QC RC SC TC rB BC UC sB\",\"513\":\"FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\"},G:{\"1\":\"aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I qC rC sC tC CC uC vC\",\"513\":\"H\"},J:{\"2\":\"D A\"},K:{\"2\":\"A B C rB BC sB\",\"513\":\"h\"},L:{\"513\":\"H\"},M:{\"513\":\"f\"},N:{\"2\":\"A B\"},O:{\"513\":\"wC\"},P:{\"1\":\"I\",\"513\":\"g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"513\":\"2B\"},R:{\"513\":\"AD\"},S:{\"1\":\"BD\",\"513\":\"CD\"}},B:6,C:\"HTTP/2 protocol\"};\n/data/regions/IR.js\u0012$module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0.00222,\"48\":0,\"49\":0,\"50\":0.00222,\"51\":0,\"52\":0.01109,\"53\":0,\"54\":0,\"55\":0,\"56\":0.00222,\"57\":0,\"58\":0,\"59\":0,\"60\":0.00222,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0.01331,\"69\":0,\"70\":0,\"71\":0,\"72\":0.00222,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0.00222,\"82\":0.00222,\"83\":0.00222,\"84\":0.00222,\"85\":0.00222,\"86\":0.00222,\"87\":0.00222,\"88\":0.00222,\"89\":0.00222,\"90\":0.00222,\"91\":0.00222,\"92\":0.00222,\"93\":0.00222,\"94\":0.01109,\"95\":0.00444,\"96\":0.00222,\"97\":0.00222,\"98\":0.00222,\"99\":0.00665,\"100\":0.00444,\"101\":0.00665,\"102\":0.02218,\"103\":0.00887,\"104\":0.01331,\"105\":0.01553,\"106\":0.01553,\"107\":0.02218,\"108\":0.05101,\"109\":0.4924,\"110\":0.3083,\"111\":0.00222,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0.00222,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0.00222,\"47\":0,\"48\":0,\"49\":0.00444,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0.00222,\"59\":0,\"60\":0,\"61\":0,\"62\":0.00222,\"63\":0.01109,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0.00222,\"70\":0.00222,\"71\":0.00444,\"72\":0.00222,\"73\":0,\"74\":0.00222,\"75\":0.00222,\"76\":0.00222,\"77\":0.00444,\"78\":0.00444,\"79\":0.00444,\"80\":0.00665,\"81\":0.00665,\"83\":0.00444,\"84\":0.00665,\"85\":0.00444,\"86\":0.00887,\"87\":0.00887,\"88\":0.00444,\"89\":0.00444,\"90\":0.00222,\"91\":0.00665,\"92\":0.00444,\"93\":0.00222,\"94\":0.00444,\"95\":0.00665,\"96\":0.00665,\"97\":0.00444,\"98\":0.00444,\"99\":0.00665,\"100\":0.01109,\"101\":0.00444,\"102\":0.01109,\"103\":0.01996,\"104\":0.01996,\"105\":0.02218,\"106\":0.01553,\"107\":0.02662,\"108\":0.06876,\"109\":1.87421,\"110\":0.79848,\"111\":0,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0.00222,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0.00222,\"73\":0.00444,\"74\":0.00222,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0.00444,\"80\":0,\"81\":0,\"82\":0,\"83\":0.00222,\"84\":0,\"85\":0.00222,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.00444,\"94\":0.03992,\"95\":0.03327,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0.00222,\"13\":0.00222,\"14\":0.00222,\"15\":0,\"16\":0,\"17\":0,\"18\":0.00444,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0.00222,\"90\":0.00222,\"91\":0,\"92\":0.00887,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0.00222,\"101\":0,\"102\":0,\"103\":0,\"104\":0.00222,\"105\":0.00222,\"106\":0,\"107\":0.00444,\"108\":0.00665,\"109\":0.07541,\"110\":0.07763},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0.00222,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0,\"13.1\":0.00222,\"14.1\":0.00222,\"15.1\":0,\"15.2-15.3\":0,\"15.4\":0,\"15.5\":0.00222,\"15.6\":0.00665,\"16.0\":0,\"16.1\":0.00222,\"16.2\":0.00222,\"16.3\":0.00444,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0.00131,\"7.0-7.1\":0.00327,\"8.1-8.4\":0,\"9.0-9.2\":0.00065,\"9.3\":0.00392,\"10.0-10.2\":0.00327,\"10.3\":0.02028,\"11.0-11.2\":0.00981,\"11.3-11.4\":0.00916,\"12.0-12.1\":0.02551,\"12.2-12.5\":0.50691,\"13.0-13.1\":0.01962,\"13.2\":0.01504,\"13.3\":0.04579,\"13.4-13.7\":0.09092,\"14.0-14.4\":0.26752,\"14.5-14.8\":0.31069,\"15.0-15.1\":0.19884,\"15.2-15.3\":0.22827,\"15.4\":0.22369,\"15.5\":0.32246,\"15.6\":0.44608,\"16.0\":0.58409,\"16.1\":0.71425,\"16.2\":0.84245,\"16.3\":0.78359,\"16.4\":0.00065},P:{\"4\":0.42482,\"20\":0.51585,\"5.0-5.4\":0.04046,\"6.2-6.4\":0.04046,\"7.2-7.4\":0.45516,\"8.2\":0.05057,\"9.2\":0.16184,\"10.1\":0.06069,\"11.1-11.2\":0.26298,\"12.0\":0.11126,\"13.0\":0.35402,\"14.0\":0.37425,\"15.0\":0.19218,\"16.0\":0.75861,\"17.0\":0.74849,\"18.0\":0.8901,\"19.0\":3.09512},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0.00595,\"4.4\":0,\"4.4.3-4.4.4\":0.02627},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0.00448,\"9\":0.00224,\"10\":0.00224,\"11\":0.47457,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.06226},H:{\"0\":0.42731},L:{\"0\":77.25523},R:{_:\"0\"},M:{\"0\":0.98831},Q:{\"13.1\":0}};\n\"/data/features/font-size-adjust.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"2\":\"C K L G M N O\",\"194\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\",\"2\":\"EC\"},D:{\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB\",\"194\":\"KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"AC PC\",\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B\"},F:{\"2\":\"0 1 2 3 4 5 6 F B C G M N O x g y z QC RC SC TC rB BC UC sB\",\"194\":\"7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\"},G:{\"1\":\"AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"2\":\"A B C h rB BC sB\"},L:{\"2\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"2\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"194\":\"2B\"},R:{\"2\":\"AD\"},S:{\"1\":\"CD\",\"2\":\"BD\"}},B:2,C:\"CSS font-size-adjust\"};\n/data/features/ping.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M\"},C:{\"2\":\"EC\",\"194\":\"0 1 2 3 4 5 6 7 8 9 uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"16\":\"I w J D E F A B C K L\"},E:{\"1\":\"J D E F A B C K L G KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w IC 0B JC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F B C QC RC SC TC rB BC UC sB\"},G:{\"1\":\"E WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC CC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H uC vC\",\"2\":\"uB I qC rC sC tC CC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"194\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"194\":\"BD CD\"}},B:1,C:\"Ping attribute\"};\n/data/features/flac.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G\"},C:{\"1\":\"SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB FC GC\"},D:{\"1\":\"XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB\",\"16\":\"LB MB NB\",\"388\":\"OB PB QB RB SB TB UB VB WB\"},E:{\"1\":\"K L G 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A IC 0B JC KC LC MC 1B\",\"516\":\"B C rB sB\"},F:{\"1\":\"JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB QC RC SC TC rB BC UC sB\"},G:{\"1\":\"eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"qC rC sC\",\"16\":\"uB I tC CC uC vC\"},J:{\"1\":\"A\",\"2\":\"D\"},K:{\"1\":\"h sB\",\"16\":\"A B C rB BC\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"129\":\"I\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"2\":\"BD\"}},B:6,C:\"FLAC audio format\"};\n/data/features/template.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C\",\"388\":\"K L\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB I w J D E F A B C K L G M N O x g y FC GC\"},D:{\"1\":\"CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 I w J D E F A B C K L G M N O x g y z\",\"132\":\"3 4 5 6 7 8 9 AB BB\"},E:{\"1\":\"F A B C K L G MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D IC 0B JC\",\"388\":\"E LC\",\"514\":\"KC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F B C QC RC SC TC rB BC UC sB\",\"132\":\"G M N O x g y\"},G:{\"1\":\"aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC CC WC XC YC\",\"388\":\"E ZC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H uC vC\",\"2\":\"uB I qC rC sC tC CC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:1,C:\"HTML templates\"};\n/data/regions/TT.js\u0011&module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.00429,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.00429,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0.00859,\"88\":0.00429,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0.00859,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0.00429,\"108\":0.00859,\"109\":0.39075,\"110\":0.2147,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0.00859,\"48\":0,\"49\":0.00859,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0.00429,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0.00429,\"66\":0,\"67\":0.00429,\"68\":0.00429,\"69\":0,\"70\":0.00859,\"71\":0,\"72\":0,\"73\":0,\"74\":0.02147,\"75\":0.01718,\"76\":0.00859,\"77\":0.00429,\"78\":0.00429,\"79\":0.09017,\"80\":0.00429,\"81\":0.03865,\"83\":0.00859,\"84\":0.00429,\"85\":0.00429,\"86\":0.00429,\"87\":0.01718,\"88\":0.00429,\"89\":0.00429,\"90\":0.00429,\"91\":0.00859,\"92\":0.00859,\"93\":0.03006,\"94\":0.00429,\"95\":0.01718,\"96\":0.00429,\"97\":0.00429,\"98\":0.01718,\"99\":0.03435,\"100\":0.00859,\"101\":0.01288,\"102\":0.01288,\"103\":0.24476,\"104\":0.01288,\"105\":0.01718,\"106\":0.04294,\"107\":0.03865,\"108\":0.45087,\"109\":6.06313,\"110\":3.99342,\"111\":0.00429,\"112\":0.00429,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0.01288,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0.00859,\"64\":0,\"65\":0,\"66\":0,\"67\":0.00859,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.01718,\"94\":0.25335,\"95\":0.12453,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0.00429,\"16\":0,\"17\":0,\"18\":0.00429,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00429,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0,\"106\":0.00429,\"107\":0.11594,\"108\":0.02576,\"109\":1.21091,\"110\":1.24955},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0.00859,\"15\":0.00859,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0.00859,\"10.1\":0,\"11.1\":0,\"12.1\":0.00429,\"13.1\":0.0687,\"14.1\":0.06012,\"15.1\":0.00429,\"15.2-15.3\":0.00429,\"15.4\":0.02147,\"15.5\":0.03435,\"15.6\":0.24476,\"16.0\":0.03865,\"16.1\":0.09876,\"16.2\":0.32205,\"16.3\":0.15888,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0.0117,\"6.0-6.1\":0,\"7.0-7.1\":0.06241,\"8.1-8.4\":0,\"9.0-9.2\":0.00585,\"9.3\":0.15018,\"10.0-10.2\":0,\"10.3\":0.11703,\"11.0-11.2\":0.0078,\"11.3-11.4\":0.00195,\"12.0-12.1\":0.0156,\"12.2-12.5\":0.44079,\"13.0-13.1\":0.0039,\"13.2\":0,\"13.3\":0.0156,\"13.4-13.7\":0.07022,\"14.0-14.4\":0.16188,\"14.5-14.8\":0.34327,\"15.0-15.1\":0.04876,\"15.2-15.3\":0.13263,\"15.4\":0.29451,\"15.5\":0.36863,\"15.6\":1.67346,\"16.0\":2.36391,\"16.1\":3.69019,\"16.2\":4.79412,\"16.3\":2.84956,\"16.4\":0.0117},P:{\"4\":0.3512,\"20\":1.77728,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0.30863,\"8.2\":0,\"9.2\":0.01064,\"10.1\":0,\"11.1-11.2\":0.05321,\"12.0\":0,\"13.0\":0.04257,\"14.0\":0.02128,\"15.0\":0.01064,\"16.0\":0.04257,\"17.0\":0.12771,\"18.0\":0.11707,\"19.0\":2.6606},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.05336,\"4.2-4.3\":0.33348,\"4.4\":0,\"4.4.3-4.4.4\":0.65361},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0.00859,\"11\":0.01288,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.03994},H:{\"0\":0.2485},L:{\"0\":56.50369},R:{_:\"0\"},M:{\"0\":0.16547},Q:{\"13.1\":0}};\n/data/features/woff.js\u0005module.exports={A:{A:{\"1\":\"F A B\",\"2\":\"J D E DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB GC\",\"2\":\"EC uB FC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"I\"},E:{\"1\":\"J D E F A B C K L G JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w IC 0B\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e rB BC UC sB\",\"2\":\"F B QC RC SC TC\"},G:{\"1\":\"E WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC CC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H uC vC\",\"2\":\"uB qC rC sC tC CC\",\"130\":\"I\"},J:{\"1\":\"D A\"},K:{\"1\":\"B C h rB BC sB\",\"2\":\"A\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:2,C:\"WOFF - Web Open Font Format\"};\n/data/regions/PL.js\fmodule.exports={C:{\"52\":0.04467,\"68\":0.00406,\"78\":0.01624,\"87\":0.02031,\"88\":0.00812,\"89\":0.00406,\"91\":0.01624,\"93\":0.01218,\"94\":0.01624,\"95\":0.00812,\"97\":0.00406,\"99\":0.00406,\"100\":0.00406,\"101\":0.00406,\"102\":0.0934,\"103\":0.00812,\"104\":0.01218,\"105\":0.00812,\"106\":0.01624,\"107\":0.02031,\"108\":0.08528,\"109\":2.65996,\"110\":1.85994,\"111\":0.00812,_:\"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 69 70 71 72 73 74 75 76 77 79 80 81 82 83 84 85 86 90 92 96 98 112 3.5 3.6\"},D:{\"49\":0.02031,\"60\":0.00812,\"66\":0.00406,\"78\":0.00812,\"79\":0.30051,\"80\":0.00406,\"83\":0.00812,\"84\":0.01218,\"85\":0.04061,\"86\":0.03655,\"87\":0.02843,\"88\":0.00406,\"89\":0.03249,\"90\":0.01218,\"91\":0.27209,\"92\":0.01218,\"93\":0.00812,\"94\":0.01218,\"95\":0.04873,\"96\":0.02031,\"97\":0.01624,\"98\":0.01218,\"99\":0.06498,\"100\":0.01624,\"101\":0.00812,\"102\":0.01624,\"103\":0.05279,\"104\":0.02031,\"105\":0.03655,\"106\":0.02843,\"107\":0.05685,\"108\":0.29239,\"109\":11.517,\"110\":7.82555,\"111\":0.00406,_:\"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 50 51 52 53 54 55 56 57 58 59 61 62 63 64 65 67 68 69 70 71 72 73 74 75 76 77 81 112 113\"},F:{\"79\":0.00406,\"84\":0.00406,\"85\":0.02031,\"91\":0.00406,\"92\":0.00812,\"93\":0.78377,\"94\":6.05495,\"95\":2.22137,_:\"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 80 81 82 83 86 87 88 89 90 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1\",\"10.0-10.1\":0},B:{\"18\":0.00406,\"92\":0.00406,\"104\":0.00812,\"105\":0.00406,\"107\":0.02031,\"108\":0.06092,\"109\":1.07617,\"110\":1.43759,_:\"12 13 14 15 16 17 79 80 81 83 84 85 86 87 88 89 90 91 93 94 95 96 97 98 99 100 101 102 103 106\"},E:{\"4\":0,\"14\":0.02031,\"15\":0.00812,_:\"0 5 6 7 8 9 10 11 12 13 3.1 3.2 5.1 6.1 7.1 9.1 10.1 11.1 16.4\",\"12.1\":0.00406,\"13.1\":0.02437,\"14.1\":0.04873,\"15.1\":0.01218,\"15.2-15.3\":0.01218,\"15.4\":0.02437,\"15.5\":0.04061,\"15.6\":0.13807,\"16.0\":0.03655,\"16.1\":0.10559,\"16.2\":0.21929,\"16.3\":0.20305},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0.00706,\"10.0-10.2\":0,\"10.3\":0.00883,\"11.0-11.2\":0,\"11.3-11.4\":0.00177,\"12.0-12.1\":0.00088,\"12.2-12.5\":0.05386,\"13.0-13.1\":0.0053,\"13.2\":0,\"13.3\":0.00618,\"13.4-13.7\":0.02737,\"14.0-14.4\":0.07241,\"14.5-14.8\":0.18279,\"15.0-15.1\":0.03974,\"15.2-15.3\":0.06888,\"15.4\":0.083,\"15.5\":0.1925,\"15.6\":0.5722,\"16.0\":0.94043,\"16.1\":2.35946,\"16.2\":2.19609,\"16.3\":1.57974,\"16.4\":0.00971},P:{\"4\":0.01043,\"20\":0.91754,\"5.0-5.4\":0.01042,\"6.2-6.4\":0.0206,\"7.2-7.4\":0.71259,\"8.2\":0.02044,\"9.2\":0.03054,\"10.1\":0.0217,\"11.1-11.2\":0.02085,\"12.0\":0.02036,\"13.0\":0.01043,\"14.0\":0.01043,\"15.0\":0.01043,\"16.0\":0.01043,\"17.0\":0.04171,\"18.0\":0.07299,\"19.0\":1.54313},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0.00548,\"4.4\":0,\"4.4.3-4.4.4\":0.01233},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"8\":0.00406,\"11\":0.02437,_:\"6 7 9 10 5.5\"},N:{\"10\":0.03712,\"11\":0.07423},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.02375},H:{\"0\":2.43982},L:{\"0\":46.40842},R:{_:\"0\"},M:{\"0\":0.61755},Q:{\"13.1\":0}};\n/data/features/css-gradients.js\u0006*module.exports={A:{A:{\"1\":\"A B\",\"2\":\"J D E F DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB FC\",\"260\":\"0 1 2 3 4 5 6 7 8 9 M N O x g y z AB BB CB\",\"292\":\"I w J D E F A B C K L G GC\"},D:{\"1\":\"3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"33\":\"0 1 2 A B C K L G M N O x g y z\",\"548\":\"I w J D E F\"},E:{\"1\":\"4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"IC 0B\",\"260\":\"D E F A B C K L G KC LC MC 1B rB sB 2B NC OC 3B\",\"292\":\"J JC\",\"804\":\"I w\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e sB\",\"2\":\"F B QC RC SC TC\",\"33\":\"C UC\",\"164\":\"rB BC\"},G:{\"1\":\"4B 5B 6B tB 7B 8B 9B AC\",\"260\":\"E YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B\",\"292\":\"WC XC\",\"804\":\"0B VC CC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H uC vC\",\"33\":\"I tC CC\",\"548\":\"uB qC rC sC\"},J:{\"1\":\"A\",\"548\":\"D\"},K:{\"1\":\"h sB\",\"2\":\"A B\",\"33\":\"C\",\"164\":\"rB BC\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:4,C:\"CSS Gradients\"};\n\"/data/features/intl-pluralrules.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N\",\"130\":\"O\"},C:{\"1\":\"ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB FC GC\"},D:{\"1\":\"cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB\"},E:{\"1\":\"K L G 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A B C IC 0B JC KC LC MC 1B rB sB\"},F:{\"1\":\"RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB QC RC SC TC rB BC UC sB\"},G:{\"1\":\"iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I xC yC zC\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"2\":\"BD\"}},B:6,C:\"Intl.PluralRules API\"};\n/data/regions/BS.js\u0011Emodule.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0.00465,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0.02789,\"49\":0,\"50\":0,\"51\":0,\"52\":0.00465,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.00465,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0.03719,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0.02325,\"103\":0,\"104\":0,\"105\":0,\"106\":0.00465,\"107\":0.00465,\"108\":0.06974,\"109\":0.46955,\"110\":0.2185,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0.00465,\"44\":0.00465,\"45\":0,\"46\":0.00465,\"47\":0,\"48\":0,\"49\":0.00465,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0.00465,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0.00465,\"72\":0,\"73\":0,\"74\":0,\"75\":0.0093,\"76\":0.06974,\"77\":0.00465,\"78\":0,\"79\":0.00465,\"80\":0.00465,\"81\":0,\"83\":0.0093,\"84\":0.00465,\"85\":0.00465,\"86\":0,\"87\":0.0093,\"88\":0.00465,\"89\":0.00465,\"90\":0.0093,\"91\":0.0093,\"92\":0,\"93\":0.05114,\"94\":0.01395,\"95\":0.00465,\"96\":0.00465,\"97\":0.0186,\"98\":0.0093,\"99\":0,\"100\":0.0093,\"101\":0.00465,\"102\":0.03719,\"103\":0.13947,\"104\":0.00465,\"105\":0.07438,\"106\":0.02325,\"107\":0.05114,\"108\":0.49744,\"109\":5.43468,\"110\":3.22641,\"111\":0.00465,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.00465,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0.0093,\"90\":0,\"91\":0,\"92\":0,\"93\":0.01395,\"94\":0.06974,\"95\":0.04184,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0.00465,\"13\":0,\"14\":0,\"15\":0.0093,\"16\":0.0093,\"17\":0.0093,\"18\":0.0093,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00465,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0.00465,\"104\":0,\"105\":0.01395,\"106\":0,\"107\":0.06044,\"108\":0.07903,\"109\":1.63645,\"110\":2.03626},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0.00465,\"10\":0,\"11\":0,\"12\":0,\"13\":0.00465,\"14\":0.04649,\"15\":0.01395,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0.03254,\"13.1\":0.16272,\"14.1\":0.18596,\"15.1\":0.04184,\"15.2-15.3\":0.06509,\"15.4\":0.08833,\"15.5\":0.24175,\"15.6\":0.99024,\"16.0\":0.07903,\"16.1\":0.26499,\"16.2\":1.10646,\"16.3\":0.58113,\"16.4\":0.00465},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0.00417,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0,\"8.1-8.4\":0.02083,\"9.0-9.2\":0,\"9.3\":0.12082,\"10.0-10.2\":0,\"10.3\":0.11249,\"11.0-11.2\":0.02916,\"11.3-11.4\":0.02916,\"12.0-12.1\":0.03333,\"12.2-12.5\":0.53329,\"13.0-13.1\":0.01667,\"13.2\":0,\"13.3\":0.02083,\"13.4-13.7\":0.04583,\"14.0-14.4\":0.36664,\"14.5-14.8\":0.83744,\"15.0-15.1\":0.20415,\"15.2-15.3\":0.4208,\"15.4\":0.62912,\"15.5\":0.96659,\"15.6\":4.50799,\"16.0\":3.83304,\"16.1\":11.36164,\"16.2\":10.5992,\"16.3\":4.89546,\"16.4\":0.01667},P:{\"4\":0.03098,\"20\":1.43535,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0.24783,\"8.2\":0,\"9.2\":0.02065,\"10.1\":0,\"11.1-11.2\":0.05163,\"12.0\":0.01033,\"13.0\":0.06196,\"14.0\":0.08261,\"15.0\":0.02065,\"16.0\":0.09294,\"17.0\":0.04131,\"18.0\":0.14457,\"19.0\":2.61255},I:{\"0\":0,\"3\":0,\"4\":0.03422,\"2.1\":0,\"2.2\":0.02053,\"2.3\":0.02053,\"4.1\":0.03422,\"4.2-4.3\":0.06844,\"4.4\":0,\"4.4.3-4.4.4\":0.34906},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0.0186,\"9\":0.00465,\"10\":0.00465,\"11\":0.04184,\"5.5\":0},N:{\"10\":0.0107,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0.00535},O:{\"0\":0.02676},H:{\"0\":0.07092},L:{\"0\":33.40748},R:{_:\"0\"},M:{\"0\":0.14983},Q:{\"13.1\":0}};\n/data/features/pointer.js\u0006$module.exports={A:{A:{\"1\":\"B\",\"2\":\"J D E F DC\",\"164\":\"A\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB I w FC GC\",\"8\":\"0 1 2 3 4 5 6 7 8 9 J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB\",\"328\":\"IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB\"},D:{\"1\":\"WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"I w J D E F A B C K L G M N O x g y\",\"8\":\"0 1 2 3 4 5 6 7 8 9 z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB\",\"584\":\"TB UB VB\"},E:{\"1\":\"K L G 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J IC 0B JC\",\"8\":\"D E F A B C KC LC MC 1B rB\",\"1096\":\"sB\"},F:{\"1\":\"JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F B C QC RC SC TC rB BC UC sB\",\"8\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB\",\"584\":\"GB HB IB\"},G:{\"1\":\"jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"8\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC\",\"6148\":\"iC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"8\":\"uB I qC rC sC tC CC uC vC\"},J:{\"8\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A\",\"8\":\"B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"B\",\"36\":\"A\"},O:{\"1\":\"wC\"},P:{\"1\":\"g yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"xC\",\"8\":\"I\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"328\":\"BD\"}},B:2,C:\"Pointer events\"};\n/data/features/passwordrules.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"2\":\"C K L G M N O\",\"16\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H FC GC\",\"16\":\"yB zB\"},D:{\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"16\":\"yB zB HC\"},E:{\"1\":\"C K sB\",\"2\":\"I w J D E F A B IC 0B JC KC LC MC 1B rB\",\"16\":\"L G 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB QC RC SC TC rB BC UC sB\",\"16\":\"UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"16\":\"pC\"},I:{\"2\":\"uB I qC rC sC tC CC uC vC\",\"16\":\"H\"},J:{\"2\":\"D\",\"16\":\"A\"},K:{\"2\":\"A B C rB BC sB\",\"16\":\"h\"},L:{\"16\":\"H\"},M:{\"16\":\"f\"},N:{\"2\":\"A\",\"16\":\"B\"},O:{\"16\":\"wC\"},P:{\"2\":\"I xC yC\",\"16\":\"g zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"16\":\"2B\"},R:{\"16\":\"AD\"},S:{\"2\":\"BD CD\"}},B:1,C:\"Password Rules\"};\n/data/features/es5.js\u0006\u0000module.exports={A:{A:{\"1\":\"A B\",\"2\":\"J D DC\",\"260\":\"F\",\"1026\":\"E\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"4\":\"EC uB FC GC\",\"132\":\"I w J D E F A B C K L G M N O x g\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"4\":\"I w J D E F A B C K L G M N O\",\"132\":\"x g y z\"},E:{\"1\":\"J D E F A B C K L G KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"4\":\"I w IC 0B JC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"4\":\"F B C QC RC SC TC rB BC UC\",\"132\":\"sB\"},G:{\"1\":\"E XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"4\":\"0B VC CC WC\"},H:{\"132\":\"pC\"},I:{\"1\":\"H uC vC\",\"4\":\"uB qC rC sC\",\"132\":\"tC CC\",\"900\":\"I\"},J:{\"1\":\"A\",\"4\":\"D\"},K:{\"1\":\"h\",\"4\":\"A B C rB BC\",\"132\":\"sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:6,C:\"ECMAScript 5\"};\n/data/features/download.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB I w J D E F A B C K L G M N O x FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"I w J D E F A B C K\"},E:{\"1\":\"B C K L G 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A IC 0B JC KC LC MC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F B C QC RC SC TC rB BC UC sB\"},G:{\"1\":\"iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H uC vC\",\"2\":\"uB I qC rC sC tC CC\"},J:{\"1\":\"A\",\"2\":\"D\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:1,C:\"Download attribute\"};\n/data/regions/TR.js\u0011emodule.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.00255,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.00255,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0.00255,\"103\":0,\"104\":0,\"105\":0,\"106\":0.00255,\"107\":0.00255,\"108\":0.00509,\"109\":0.08653,\"110\":0.06108,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0.00255,\"23\":0,\"24\":0,\"25\":0,\"26\":0.00255,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0.00764,\"35\":0,\"36\":0,\"37\":0,\"38\":0.00764,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0.01018,\"48\":0,\"49\":0.01273,\"50\":0,\"51\":0,\"52\":0,\"53\":0.00255,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0.01527,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0.00255,\"66\":0,\"67\":0,\"68\":0.00509,\"69\":0.00255,\"70\":0.00255,\"71\":0.00255,\"72\":0,\"73\":0.00255,\"74\":0,\"75\":0.00255,\"76\":0,\"77\":0,\"78\":0.00255,\"79\":0.03818,\"80\":0.00764,\"81\":0.00509,\"83\":0.01273,\"84\":0.01018,\"85\":0.01527,\"86\":0.01273,\"87\":0.01273,\"88\":0.00509,\"89\":0.00255,\"90\":0.00255,\"91\":0.00509,\"92\":0.02036,\"93\":0.00255,\"94\":0.00255,\"95\":0.00509,\"96\":0.00764,\"97\":0.00509,\"98\":0.00255,\"99\":0.00509,\"100\":0.01018,\"101\":0.00255,\"102\":0.00509,\"103\":0.01782,\"104\":0.00764,\"105\":0.01018,\"106\":0.01273,\"107\":0.02291,\"108\":0.0789,\"109\":2.66971,\"110\":1.39975,\"111\":0,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0.00509,\"29\":0,\"30\":0,\"31\":0,\"32\":0.00255,\"33\":0,\"34\":0,\"35\":0,\"36\":0.00255,\"37\":0,\"38\":0,\"39\":0,\"40\":0.00764,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0.02036,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0.00255,\"67\":0.05599,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0.00255,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0.00255,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.028,\"94\":0.25959,\"95\":0.15016,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0.00509,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00255,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0,\"106\":0.00255,\"107\":0.00509,\"108\":0.00764,\"109\":0.16034,\"110\":0.23923},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0.00509,\"15\":0.00255,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0.00255,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0.00255,\"13.1\":0.00764,\"14.1\":0.01273,\"15.1\":0.00255,\"15.2-15.3\":0.00255,\"15.4\":0.00509,\"15.5\":0.00764,\"15.6\":0.03818,\"16.0\":0.00509,\"16.1\":0.02036,\"16.2\":0.03818,\"16.3\":0.03054,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0.01864,\"8.1-8.4\":0,\"9.0-9.2\":0.00373,\"9.3\":0.03541,\"10.0-10.2\":0.00559,\"10.3\":0.1081,\"11.0-11.2\":0.00932,\"11.3-11.4\":0.01118,\"12.0-12.1\":0.0205,\"12.2-12.5\":1.43696,\"13.0-13.1\":0.01677,\"13.2\":0.00559,\"13.3\":0.04659,\"13.4-13.7\":0.16028,\"14.0-14.4\":0.32802,\"14.5-14.8\":0.75109,\"15.0-15.1\":0.11369,\"15.2-15.3\":0.17706,\"15.4\":0.2162,\"15.5\":0.42307,\"15.6\":1.17789,\"16.0\":1.42577,\"16.1\":3.38085,\"16.2\":3.5635,\"16.3\":2.33715,\"16.4\":0.00932},P:{\"4\":0.26302,\"20\":0.97115,\"5.0-5.4\":0.02023,\"6.2-6.4\":0,\"7.2-7.4\":0.16186,\"8.2\":0.01012,\"9.2\":0.03035,\"10.1\":0.01012,\"11.1-11.2\":0.0607,\"12.0\":0.02023,\"13.0\":0.08093,\"14.0\":0.03035,\"15.0\":0.02023,\"16.0\":0.07081,\"17.0\":0.19221,\"18.0\":0.11128,\"19.0\":1.80067},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.00132,\"4.2-4.3\":0.00659,\"4.4\":0,\"4.4.3-4.4.4\":0.03228},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.06872,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.15656},H:{\"0\":0.86107},L:{\"0\":70.94851},R:{_:\"0\"},M:{\"0\":0.11183},Q:{\"13.1\":0}};\n/data/regions/FM.js\u0010module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0.00604,\"71\":0.01208,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0.00604,\"89\":0,\"90\":0.00604,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0.00604,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0.08455,\"103\":0,\"104\":0,\"105\":0.01812,\"106\":0,\"107\":0.01812,\"108\":0.02416,\"109\":2.32502,\"110\":0.54351,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0.18117,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0.04227,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0.01208,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0.05435,\"64\":0,\"65\":0.00604,\"66\":0,\"67\":0,\"68\":0.00604,\"69\":0,\"70\":0.00604,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0.01208,\"76\":0.02416,\"77\":0,\"78\":0,\"79\":0.00604,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0.09059,\"90\":0,\"91\":0,\"92\":0.00604,\"93\":0.00604,\"94\":0.00604,\"95\":0,\"96\":0.03623,\"97\":0.00604,\"98\":0,\"99\":0,\"100\":0.01812,\"101\":0.00604,\"102\":0,\"103\":0.70052,\"104\":0.01208,\"105\":0.11474,\"106\":0.00604,\"107\":0,\"108\":0.39857,\"109\":11.63715,\"110\":6.94485,\"111\":0,\"112\":0.01812,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.04831,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0.00604,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0.09662,\"95\":0.02416,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0.01208,\"17\":0,\"18\":0.15701,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0.00604,\"85\":0,\"86\":0.01208,\"87\":0,\"88\":0,\"89\":0.00604,\"90\":0.00604,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0.00604,\"98\":0.01208,\"99\":0,\"100\":0.02416,\"101\":0.01812,\"102\":0,\"103\":0,\"104\":0.00604,\"105\":0,\"106\":0,\"107\":0.04227,\"108\":0.07851,\"109\":3.7623,\"110\":4.80704},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0.03623,\"15\":0.00604,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0.05435,\"13.1\":0.05435,\"14.1\":0.05435,\"15.1\":0.00604,\"15.2-15.3\":0,\"15.4\":0.06643,\"15.5\":0.02416,\"15.6\":0.15701,\"16.0\":0,\"16.1\":0.03623,\"16.2\":0.1389,\"16.3\":0.1087,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0.03538,\"7.0-7.1\":0,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0,\"10.0-10.2\":0,\"10.3\":0.00884,\"11.0-11.2\":0,\"11.3-11.4\":0.04422,\"12.0-12.1\":0.00884,\"12.2-12.5\":0.10466,\"13.0-13.1\":0,\"13.2\":0.00884,\"13.3\":0.09582,\"13.4-13.7\":0.08697,\"14.0-14.4\":0.27124,\"14.5-14.8\":0.54985,\"15.0-15.1\":0.2963,\"15.2-15.3\":0.17395,\"15.4\":2.02546,\"15.5\":0.79456,\"15.6\":0.70759,\"16.0\":1.22206,\"16.1\":2.71388,\"16.2\":3.54382,\"16.3\":1.22206,\"16.4\":0},P:{\"4\":0,\"20\":0.66143,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0.11368,\"8.2\":0,\"9.2\":0,\"10.1\":0,\"11.1-11.2\":0.09301,\"12.0\":0,\"13.0\":0,\"14.0\":0.09301,\"15.0\":0,\"16.0\":0.01033,\"17.0\":0.02067,\"18.0\":0.19636,\"19.0\":0.84745},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0,\"4.4\":0,\"4.4.3-4.4.4\":1.47352},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.01208,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.305},H:{\"0\":0.18},L:{\"0\":46.87594},R:{_:\"0\"},M:{\"0\":0.13864},Q:{\"13.1\":0}};\n/data/features/input-pattern.js\u0005module.exports={A:{A:{\"1\":\"A B\",\"2\":\"J D E F DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"I w J D E F\"},E:{\"1\":\"B C K L G 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I IC 0B\",\"16\":\"w\",\"388\":\"J D E F A JC KC LC MC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\",\"2\":\"F\"},G:{\"1\":\"dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"16\":\"0B VC CC\",\"388\":\"E WC XC YC ZC aC bC cC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H vC\",\"2\":\"uB I qC rC sC tC CC uC\"},J:{\"1\":\"A\",\"2\":\"D\"},K:{\"1\":\"A B C h rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"132\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:1,C:\"Pattern attribute for input fields\"};\n/data/features/sdch.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"2\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB\",\"2\":\"vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB\",\"2\":\"F B C h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"2\":\"A B C h rB BC sB\"},L:{\"2\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"1\":\"g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I\"},Q:{\"2\":\"2B\"},R:{\"2\":\"AD\"},S:{\"2\":\"BD CD\"}},B:6,C:\"SDCH Accept-Encoding/Content-Encoding\"};\n/data/features/svg-css.js\u0005module.exports={A:{A:{\"1\":\"F A B\",\"2\":\"J D E DC\"},B:{\"1\":\"M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"516\":\"C K L G\"},C:{\"1\":\"1 2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB FC GC\",\"260\":\"0 I w J D E F A B C K L G M N O x g y z\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"4\":\"I\"},E:{\"1\":\"w J D E F A B C K L G JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"IC\",\"132\":\"I 0B\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\",\"2\":\"F\"},G:{\"1\":\"E CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"132\":\"0B VC\"},H:{\"260\":\"pC\"},I:{\"1\":\"uB I H tC CC uC vC\",\"2\":\"qC rC sC\"},J:{\"1\":\"D A\"},K:{\"1\":\"h\",\"260\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:4,C:\"SVG in CSS backgrounds\"};\n#/data/features/css-focus-visible.js\u0006\u0002module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\",\"328\":\"P Q R S T U\"},C:{\"1\":\"U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB FC GC\",\"161\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T\"},D:{\"1\":\"V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB\",\"328\":\"gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U\"},E:{\"1\":\"4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A B C K L IC 0B JC KC LC MC 1B rB sB 2B NC\",\"578\":\"G OC 3B\"},F:{\"1\":\"lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB QC RC SC TC rB BC UC sB\",\"328\":\"fB gB hB iB jB kB\"},G:{\"1\":\"4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC\",\"578\":\"oC 3B\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"1\":\"g 5C 6C tB 7C 8C 9C\",\"2\":\"I xC yC zC 0C 1C 1B 2C 3C 4C\"},Q:{\"2\":\"2B\"},R:{\"1\":\"AD\"},S:{\"161\":\"BD CD\"}},B:5,C:\":focus-visible CSS pseudo-class\"};\n/data/features/fetch.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K\"},C:{\"1\":\"HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB FC GC\",\"1025\":\"GB\",\"1218\":\"BB CB DB EB FB\"},D:{\"1\":\"JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB\",\"260\":\"HB\",\"772\":\"IB\"},E:{\"1\":\"B C K L G 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A IC 0B JC KC LC MC\"},F:{\"1\":\"6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 F B C G M N O x g y z QC RC SC TC rB BC UC sB\",\"260\":\"4\",\"772\":\"5\"},G:{\"1\":\"dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:1,C:\"Fetch\"};\n/data/features/font-smooth.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"2\":\"C K L G M N O\",\"676\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"2\":\"0 1 EC uB I w J D E F A B C K L G M N O x g y z FC GC\",\"804\":\"2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\"},D:{\"2\":\"I\",\"676\":\"0 1 2 3 4 5 6 7 8 9 w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"2\":\"IC 0B\",\"676\":\"I w J D E F A B C K L G JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"2\":\"F B C QC RC SC TC rB BC UC sB\",\"676\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"2\":\"A B C h rB BC sB\"},L:{\"2\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"2\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"2\":\"2B\"},R:{\"2\":\"AD\"},S:{\"804\":\"BD CD\"}},B:7,C:\"CSS font-smooth\"};\n/data/features/brotli.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L\"},C:{\"1\":\"LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB FC GC\"},D:{\"1\":\"SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB\",\"194\":\"QB\",\"257\":\"RB\"},E:{\"1\":\"K L G 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A IC 0B JC KC LC MC 1B\",\"513\":\"B C rB sB\"},F:{\"1\":\"FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB QC RC SC TC rB BC UC sB\",\"194\":\"DB EB\"},G:{\"1\":\"eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:6,C:\"Brotli Accept-Encoding/Content-Encoding\"};\n/data/regions/CA.js\u0012nmodule.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0.01135,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0.01135,\"44\":0.03973,\"45\":0.01135,\"46\":0,\"47\":0.00568,\"48\":0.00568,\"49\":0,\"50\":0,\"51\":0,\"52\":0.0227,\"53\":0,\"54\":0,\"55\":0.02838,\"56\":0,\"57\":0.01135,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0.00568,\"67\":0,\"68\":0.00568,\"69\":0,\"70\":0,\"71\":0,\"72\":0.00568,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0.00568,\"78\":0.03973,\"79\":0.00568,\"80\":0.00568,\"81\":0.00568,\"82\":0.00568,\"83\":0.00568,\"84\":0,\"85\":0,\"86\":0,\"87\":0.01703,\"88\":0.00568,\"89\":0,\"90\":0,\"91\":0.01135,\"92\":0,\"93\":0,\"94\":0,\"95\":0.00568,\"96\":0,\"97\":0,\"98\":0,\"99\":0.00568,\"100\":0.00568,\"101\":0,\"102\":0.04541,\"103\":0.01135,\"104\":0.01135,\"105\":0.01703,\"106\":0.01135,\"107\":0.01703,\"108\":0.12487,\"109\":1.19764,\"110\":0.72085,\"111\":0.00568,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0.00568,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0.01135,\"48\":0.11352,\"49\":0.06244,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0.02838,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0.00568,\"66\":0.01135,\"67\":0.00568,\"68\":0.00568,\"69\":0.00568,\"70\":0.00568,\"71\":0.00568,\"72\":0.01135,\"73\":0.00568,\"74\":0.01135,\"75\":0.00568,\"76\":0.01135,\"77\":0.00568,\"78\":0.01135,\"79\":0.03973,\"80\":0.0227,\"81\":0.02838,\"83\":0.23839,\"84\":0.05676,\"85\":0.06244,\"86\":0.07946,\"87\":0.07946,\"88\":0.03406,\"89\":0.01135,\"90\":0.01135,\"91\":0.01135,\"92\":0.00568,\"93\":0.07946,\"94\":0.01135,\"95\":0.00568,\"96\":0.01703,\"97\":0.01135,\"98\":0.01703,\"99\":0.01703,\"100\":0.0227,\"101\":0.02838,\"102\":0.03406,\"103\":0.27812,\"104\":0.05108,\"105\":0.13055,\"106\":0.07946,\"107\":0.1419,\"108\":0.89113,\"109\":9.35405,\"110\":5.7952,\"111\":0.01135,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.00568,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.01135,\"68\":0,\"69\":0,\"70\":0,\"71\":0.00568,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.03406,\"94\":0.3065,\"95\":0.14758,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0.00568,\"13\":0.00568,\"14\":0,\"15\":0,\"16\":0,\"17\":0.00568,\"18\":0.01135,\"79\":0,\"80\":0,\"81\":0,\"83\":0.00568,\"84\":0.00568,\"85\":0.00568,\"86\":0.00568,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00568,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0.00568,\"101\":0,\"102\":0,\"103\":0.00568,\"104\":0.00568,\"105\":0.00568,\"106\":0.01135,\"107\":0.03973,\"108\":0.09649,\"109\":1.83902,\"110\":2.29878},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0.00568,\"9\":0.01703,\"10\":0,\"11\":0,\"12\":0.00568,\"13\":0.0227,\"14\":0.09649,\"15\":0.01703,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0.02838,\"10.1\":0,\"11.1\":0.00568,\"12.1\":0.05108,\"13.1\":0.20434,\"14.1\":0.31218,\"15.1\":0.03973,\"15.2-15.3\":0.05108,\"15.4\":0.10217,\"15.5\":0.17028,\"15.6\":1.03303,\"16.0\":0.10784,\"16.1\":0.29515,\"16.2\":1.19764,\"16.3\":0.80032,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0.00412,\"7.0-7.1\":0.00824,\"8.1-8.4\":0.01648,\"9.0-9.2\":0.0206,\"9.3\":0.23485,\"10.0-10.2\":0.01648,\"10.3\":0.22249,\"11.0-11.2\":0.1442,\"11.3-11.4\":0.0618,\"12.0-12.1\":0.0412,\"12.2-12.5\":1.02179,\"13.0-13.1\":0.02472,\"13.2\":0.02472,\"13.3\":0.0618,\"13.4-13.7\":0.21013,\"14.0-14.4\":0.42849,\"14.5-14.8\":1.17836,\"15.0-15.1\":0.34609,\"15.2-15.3\":0.46146,\"15.4\":0.40789,\"15.5\":0.86523,\"15.6\":4.72992,\"16.0\":3.0489,\"16.1\":9.91718,\"16.2\":10.62996,\"16.3\":5.11721,\"16.4\":0.02884},P:{\"4\":0.12609,\"20\":1.20838,\"5.0-5.4\":0.02102,\"6.2-6.4\":0,\"7.2-7.4\":0,\"8.2\":0,\"9.2\":0,\"10.1\":0.01051,\"11.1-11.2\":0.01051,\"12.0\":0.01051,\"13.0\":0.02102,\"14.0\":0.01051,\"15.0\":0.01051,\"16.0\":0.04203,\"17.0\":0.03152,\"18.0\":0.04203,\"19.0\":1.46056},I:{\"0\":0,\"3\":0,\"4\":0.01143,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.01143,\"4.2-4.3\":0.06287,\"4.4\":0,\"4.4.3-4.4.4\":0.18861},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0.01243,\"9\":0.01243,\"10\":0,\"11\":0.10568,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0.00432},O:{\"0\":0.07783},H:{\"0\":0.13919},L:{\"0\":24.16256},R:{_:\"0\"},M:{\"0\":0.4497},Q:{\"13.1\":0.00432}};\n/data/regions/KG.js\u0010module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.01185,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.00395,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0.00395,\"99\":0.00395,\"100\":0,\"101\":0,\"102\":0.01976,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0.09482,\"108\":0.00395,\"109\":0.11853,\"110\":0.06322,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0.00395,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0.02371,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0.01976,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.00395,\"68\":0,\"69\":0,\"70\":0,\"71\":0.0079,\"72\":0,\"73\":0.0079,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0.00395,\"80\":0.00395,\"81\":0.0079,\"83\":0.0079,\"84\":0,\"85\":0.00395,\"86\":0.00395,\"87\":0.01185,\"88\":0.00395,\"89\":0.0079,\"90\":0.00395,\"91\":0.00395,\"92\":0.0158,\"93\":0,\"94\":0.01976,\"95\":0.00395,\"96\":0.00395,\"97\":0.01185,\"98\":0.00395,\"99\":0.00395,\"100\":0.01976,\"101\":0.01185,\"102\":0.0158,\"103\":0.0158,\"104\":0.01185,\"105\":0.0079,\"106\":0.0158,\"107\":0.04346,\"108\":0.52153,\"109\":11.16948,\"110\":1.39865,\"111\":0,\"112\":0.00395,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0.00395,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.01976,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0.0079,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0.04741,\"86\":0.00395,\"87\":0,\"88\":0,\"89\":0,\"90\":0.0158,\"91\":0,\"92\":0,\"93\":0.0158,\"94\":0.15409,\"95\":0.22916,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0.00395,\"15\":0.0079,\"16\":0,\"17\":0,\"18\":0.00395,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00395,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0,\"108\":0.00395,\"109\":0.11458,\"110\":0.12248},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0.00395,\"15\":0,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0.05136,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0,\"13.1\":0.0079,\"14.1\":0.0079,\"15.1\":0.00395,\"15.2-15.3\":0.00395,\"15.4\":0.0079,\"15.5\":0.01976,\"15.6\":0.03556,\"16.0\":0.00395,\"16.1\":0.03556,\"16.2\":0.05927,\"16.3\":0.05136,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0.00152,\"6.0-6.1\":0,\"7.0-7.1\":0.00152,\"8.1-8.4\":0,\"9.0-9.2\":0.00304,\"9.3\":0.01978,\"10.0-10.2\":0,\"10.3\":0.00609,\"11.0-11.2\":0.00913,\"11.3-11.4\":0.00152,\"12.0-12.1\":0.01065,\"12.2-12.5\":0.32405,\"13.0-13.1\":0.01065,\"13.2\":0.00456,\"13.3\":0.0213,\"13.4-13.7\":0.04868,\"14.0-14.4\":0.35752,\"14.5-14.8\":0.51422,\"15.0-15.1\":0.26167,\"15.2-15.3\":0.32709,\"15.4\":0.37425,\"15.5\":0.86109,\"15.6\":1.31902,\"16.0\":2.65781,\"16.1\":2.46003,\"16.2\":2.35202,\"16.3\":1.86366,\"16.4\":0.01065},P:{\"4\":0.19945,\"20\":0.26926,\"5.0-5.4\":0.00997,\"6.2-6.4\":0.02992,\"7.2-7.4\":0.52855,\"8.2\":0,\"9.2\":0.02992,\"10.1\":0,\"11.1-11.2\":0.04986,\"12.0\":0.01995,\"13.0\":0.04986,\"14.0\":0.05984,\"15.0\":0.05984,\"16.0\":0.16954,\"17.0\":0.09973,\"18.0\":0.14959,\"19.0\":0.85765},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0.01354,\"4.4\":0,\"4.4.3-4.4.4\":0.02437},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.0079,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.48392},H:{\"0\":0.25198},L:{\"0\":65.1934},R:{_:\"0\"},M:{\"0\":0.03629},Q:{\"13.1\":0}};\n/data/regions/CG.js\u000bmodule.exports={C:{\"47\":0.00408,\"48\":0.00816,\"60\":0.02447,\"63\":0.01223,\"89\":0.01631,\"95\":0.04894,\"102\":0.10603,\"105\":0.00816,\"107\":0.00408,\"108\":0.01631,\"109\":1.48439,\"110\":0.95833,_:\"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 49 50 51 52 53 54 55 56 57 58 59 61 62 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 90 91 92 93 94 96 97 98 99 100 101 103 104 106 111 112 3.5 3.6\"},D:{\"11\":0.01223,\"47\":0.00816,\"49\":0.02039,\"60\":0.00816,\"63\":0.28546,\"65\":0.0367,\"69\":0.02855,\"73\":0.00408,\"75\":0.02447,\"78\":0.01631,\"79\":0.1305,\"81\":0.0734,\"83\":0.00816,\"84\":0.02855,\"86\":0.34255,\"87\":0.00408,\"89\":0.02447,\"91\":0.00408,\"95\":0.10195,\"97\":0.0734,\"98\":0.00408,\"99\":0.12234,\"101\":0.00408,\"102\":0.06933,\"103\":0.05301,\"104\":0.00816,\"105\":0.02447,\"106\":0.10195,\"107\":0.06117,\"108\":0.23652,\"109\":8.156,\"110\":9.53844,_:\"4 5 6 7 8 9 10 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 48 50 51 52 53 54 55 56 57 58 59 61 62 64 66 67 68 70 71 72 74 76 77 80 85 88 90 92 93 94 96 100 111 112 113\"},F:{\"40\":0.00408,\"58\":0.00408,\"79\":0.01631,\"85\":0.00816,\"94\":0.58315,\"95\":1.28049,_:\"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 80 81 82 83 84 86 87 88 89 90 91 92 93 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1\",\"10.0-10.1\":0},B:{\"12\":0.00816,\"14\":0.03262,\"15\":0.02447,\"16\":0.00408,\"17\":0.00408,\"18\":0.02039,\"84\":0.00408,\"90\":0.00408,\"92\":0.05301,\"105\":0.02447,\"107\":0.00408,\"108\":0.02447,\"109\":1.2968,\"110\":2.45088,_:\"13 79 80 81 83 85 86 87 88 89 91 93 94 95 96 97 98 99 100 101 102 103 104 106\"},E:{\"4\":0,_:\"0 5 6 7 8 9 10 11 12 13 14 15 3.1 3.2 5.1 6.1 7.1 9.1 10.1 11.1 12.1 14.1 15.1 15.2-15.3 15.4 15.5 16.0 16.1 16.4\",\"13.1\":0.32216,\"15.6\":0.04486,\"16.2\":0.00408,\"16.3\":0.02447},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0.00134,\"7.0-7.1\":0.04952,\"8.1-8.4\":0,\"9.0-9.2\":0.00535,\"9.3\":0.19271,\"10.0-10.2\":0.00268,\"10.3\":0.39612,\"11.0-11.2\":0.02007,\"11.3-11.4\":0.07227,\"12.0-12.1\":0.04818,\"12.2-12.5\":5.1242,\"13.0-13.1\":0.00268,\"13.2\":0,\"13.3\":0.05755,\"13.4-13.7\":0.20877,\"14.0-14.4\":0.27301,\"14.5-14.8\":0.25828,\"15.0-15.1\":0.41754,\"15.2-15.3\":0.31851,\"15.4\":0.33323,\"15.5\":0.30245,\"15.6\":0.76548,\"16.0\":0.25025,\"16.1\":0.34527,\"16.2\":0.58883,\"16.3\":0.83775,\"16.4\":0.00669},P:{\"4\":0.16318,\"20\":0.09325,\"5.0-5.4\":0.11512,\"6.2-6.4\":0.05233,\"7.2-7.4\":0.1049,\"8.2\":0,\"9.2\":0.05233,\"10.1\":0,\"11.1-11.2\":0.03497,\"12.0\":0,\"13.0\":0,\"14.0\":0.01166,\"15.0\":0,\"16.0\":0.0314,\"17.0\":0.03497,\"18.0\":0.01166,\"19.0\":0.27974},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.01752,\"4.2-4.3\":0.00284,\"4.4\":0,\"4.4.3-4.4.4\":0.1277},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"11\":0.02855,_:\"6 7 8 9 10 5.5\"},N:{\"10\":0,\"11\":0},S:{\"2.5\":0.42638,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.28426},H:{\"0\":1.53059},L:{\"0\":56.68904},R:{_:\"0\"},M:{\"0\":0.03553},Q:{\"13.1\":0.02961}};\n#/data/features/loading-lazy-attr.js\u0006\u001amodule.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB FC GC\",\"132\":\"nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\"},D:{\"1\":\"pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB\",\"66\":\"nB oB\"},E:{\"1\":\"AC PC\",\"2\":\"I w J D E F A B C K IC 0B JC KC LC MC 1B rB sB\",\"322\":\"L G 2B NC OC 3B\",\"580\":\"4B 5B 6B tB 7B 8B 9B\"},F:{\"1\":\"dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB QC RC SC TC rB BC UC sB\",\"66\":\"bB cB\"},G:{\"1\":\"AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC\",\"322\":\"lC mC nC oC 3B\",\"580\":\"4B 5B 6B tB 7B 8B 9B\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"132\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I xC yC zC 0C 1C 1B 2C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"2\":\"BD\",\"132\":\"CD\"}},B:1,C:\"Lazy loading via attribute for images & iframes\"};\n(/data/features/viewport-unit-variants.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"u v f H\",\"2\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q\",\"194\":\"r s t\"},C:{\"1\":\"n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m FC GC\"},D:{\"1\":\"u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l\",\"194\":\"m n o p q r s t\"},E:{\"1\":\"4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B\"},F:{\"1\":\"d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z QC RC SC TC rB BC UC sB\",\"194\":\"a b c\"},G:{\"1\":\"4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"2\":\"A B C h rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"2\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"2\":\"2B\"},R:{\"2\":\"AD\"},S:{\"2\":\"BD CD\"}},B:5,C:\"Small, Large, and Dynamic viewport units\"};\n/data/features/mediasource.js\u0005module.exports={A:{A:{\"2\":\"J D E F A DC\",\"132\":\"B\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 EC uB I w J D E F A B C K L G M N O x g y z FC GC\",\"66\":\"2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB\"},D:{\"1\":\"8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"I w J D E F A B C K L G M\",\"33\":\"0 1 2 3 4 5 6 7\",\"66\":\"N O x g y z\"},E:{\"1\":\"E F A B C K L G MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D IC 0B JC KC LC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F B C QC RC SC TC rB BC UC sB\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC\",\"260\":\"iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H vC\",\"2\":\"uB I qC rC sC tC CC uC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"B\",\"2\":\"A\"},O:{\"1\":\"wC\"},P:{\"1\":\"g 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I xC yC zC 0C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:2,C:\"Media Source Extensions\"};\n/data/features/colr-v1.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j\"},C:{\"1\":\"t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j FC GC\",\"258\":\"k l m n o p q\",\"578\":\"r s\"},D:{\"1\":\"k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y\",\"194\":\"Z a b c d e i j\"},E:{\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U QC RC SC TC rB BC UC sB\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"16\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"16\":\"A B\"},O:{\"2\":\"wC\"},P:{\"1\":\"g 8C 9C\",\"2\":\"I xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C\"},Q:{\"2\":\"2B\"},R:{\"2\":\"AD\"},S:{\"2\":\"BD CD\"}},B:6,C:\"COLR/CPAL(v1) Font Formats\"};\n/data/features/jpegxr.js\u0005module.exports={A:{A:{\"1\":\"F A B\",\"2\":\"J D E DC\"},B:{\"1\":\"C K L G M N O\",\"2\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"2\":\"A B C h rB BC sB\"},L:{\"2\":\"H\"},M:{\"2\":\"f\"},N:{\"1\":\"A B\"},O:{\"2\":\"wC\"},P:{\"2\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"2\":\"2B\"},R:{\"2\":\"AD\"},S:{\"2\":\"BD CD\"}},B:6,C:\"JPEG XR image format\"};\n/data/regions/ZW.js\u0012module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0.00351,\"49\":0,\"50\":0,\"51\":0,\"52\":0.00351,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0.00351,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0.00351,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0.00351,\"95\":0,\"96\":0.01054,\"97\":0,\"98\":0,\"99\":0.01054,\"100\":0.00351,\"101\":0.00351,\"102\":0.01054,\"103\":0.00702,\"104\":0.00351,\"105\":0.00702,\"106\":0.03863,\"107\":0.01054,\"108\":0.07726,\"109\":0.46007,\"110\":0.30554,\"111\":0.01054,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.00351,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0.01054,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0.00702,\"47\":0,\"48\":0,\"49\":0.00702,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0.01054,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0.00702,\"64\":0.00351,\"65\":0.00351,\"66\":0,\"67\":0,\"68\":0.00351,\"69\":0.00702,\"70\":0.01054,\"71\":0.00351,\"72\":0.00351,\"73\":0.00351,\"74\":0.01405,\"75\":0.00351,\"76\":0.00351,\"77\":0.00702,\"78\":0.00351,\"79\":0.01756,\"80\":0.00351,\"81\":0.02458,\"83\":0.00351,\"84\":0.00351,\"85\":0.00351,\"86\":0.00351,\"87\":0.01054,\"88\":0.00702,\"89\":0.00351,\"90\":0.00351,\"91\":0.00351,\"92\":0.01756,\"93\":0.00702,\"94\":0.00351,\"95\":0.02107,\"96\":0.01054,\"97\":0.00351,\"98\":0.01054,\"99\":0.00702,\"100\":0.00702,\"101\":0.01054,\"102\":0.02107,\"103\":0.04214,\"104\":0.0281,\"105\":0.03161,\"106\":0.0281,\"107\":0.06673,\"108\":0.18965,\"109\":3.43825,\"110\":2.04047,\"111\":0.00702,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0.01054,\"27\":0,\"28\":0.01054,\"29\":0,\"30\":0.00351,\"31\":0,\"32\":0.00702,\"33\":0,\"34\":0,\"35\":0.01405,\"36\":0,\"37\":0,\"38\":0.00351,\"39\":0,\"40\":0,\"41\":0,\"42\":0.01405,\"43\":0,\"44\":0,\"45\":0.00351,\"46\":0.00351,\"47\":0.07726,\"48\":0,\"49\":0,\"50\":0.03161,\"51\":0.00702,\"52\":0,\"53\":0,\"54\":0.01054,\"55\":0,\"56\":0,\"57\":0.01054,\"58\":0.0281,\"60\":0.14048,\"62\":0,\"63\":0.21072,\"64\":0.13697,\"65\":0.0597,\"66\":0.22477,\"67\":0.41793,\"68\":0,\"69\":0,\"70\":0.00351,\"71\":0,\"72\":0.00351,\"73\":0.00351,\"74\":0.00351,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0.01054,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0.01054,\"86\":0.00351,\"87\":0,\"88\":0,\"89\":0,\"90\":0.00351,\"91\":0.00351,\"92\":0.00351,\"93\":0.00702,\"94\":0.12643,\"95\":0.22477,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0.10887},B:{\"12\":0.01054,\"13\":0.00702,\"14\":0.03512,\"15\":0.01054,\"16\":0.01054,\"17\":0.01054,\"18\":0.03512,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0.00702,\"85\":0.00351,\"86\":0,\"87\":0,\"88\":0,\"89\":0.01756,\"90\":0.00702,\"91\":0,\"92\":0.02458,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0.00351,\"100\":0.00702,\"101\":0,\"102\":0.00351,\"103\":0.00702,\"104\":0.00351,\"105\":0.00702,\"106\":0.00702,\"107\":0.05619,\"108\":0.05619,\"109\":0.52329,\"110\":0.68133},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.00351,\"14\":0.00702,\"15\":0.00702,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0.00702,\"6.1\":0,\"7.1\":0,\"9.1\":0.00351,\"10.1\":0,\"11.1\":0.00351,\"12.1\":0.00351,\"13.1\":0.01054,\"14.1\":0.04214,\"15.1\":0.00351,\"15.2-15.3\":0.00351,\"15.4\":0.00702,\"15.5\":0.01405,\"15.6\":0.07726,\"16.0\":0.01054,\"16.1\":0.0281,\"16.2\":0.05619,\"16.3\":0.08078,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0.00104,\"6.0-6.1\":0,\"7.0-7.1\":0.00104,\"8.1-8.4\":0.00208,\"9.0-9.2\":0.00104,\"9.3\":0.06652,\"10.0-10.2\":0,\"10.3\":0.03014,\"11.0-11.2\":0.12161,\"11.3-11.4\":0.0052,\"12.0-12.1\":0.04365,\"12.2-12.5\":0.54567,\"13.0-13.1\":0.00831,\"13.2\":0.00728,\"13.3\":0.02702,\"13.4-13.7\":0.06132,\"14.0-14.4\":0.26816,\"14.5-14.8\":0.46252,\"15.0-15.1\":0.1715,\"15.2-15.3\":0.26816,\"15.4\":0.23594,\"15.5\":0.40639,\"15.6\":0.86164,\"16.0\":1.06743,\"16.1\":1.73159,\"16.2\":1.70665,\"16.3\":1.36157,\"16.4\":0.00312},P:{\"4\":0.10244,\"20\":0.27659,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0.17415,\"8.2\":0,\"9.2\":0.01024,\"10.1\":0,\"11.1-11.2\":0.02049,\"12.0\":0.01024,\"13.0\":0.05122,\"14.0\":0.08195,\"15.0\":0.04098,\"16.0\":0.14342,\"17.0\":0.06147,\"18.0\":0.08195,\"19.0\":1.08589},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0.00633,\"4.4\":0,\"4.4.3-4.4.4\":0.13421},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.02107,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0.00649,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":1.1873},H:{\"0\":8.31069},L:{\"0\":63.77162},R:{_:\"0\"},M:{\"0\":0.23357},Q:{\"13.1\":0.0519}};\n/data/features/iframe-srcdoc.js\u0005module.exports={A:{A:{\"2\":\"DC\",\"8\":\"J D E F A B\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"8\":\"C K L G M N O\"},C:{\"1\":\"2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC\",\"8\":\"0 1 uB I w J D E F A B C K L G M N O x g y z FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"I w J D E F A B C K\",\"8\":\"L G M N O x\"},E:{\"1\":\"J D E F A B C K L G KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"IC 0B\",\"8\":\"I w JC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F B QC RC SC TC\",\"8\":\"C rB BC UC sB\"},G:{\"1\":\"E XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B\",\"8\":\"VC CC WC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H uC vC\",\"8\":\"uB I qC rC sC tC CC\"},J:{\"1\":\"A\",\"8\":\"D\"},K:{\"1\":\"h\",\"2\":\"A B\",\"8\":\"C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"8\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:1,C:\"srcdoc attribute for iframes\"};\n'/data/features/constraint-validation.js\u0006_module.exports={A:{A:{\"2\":\"J D E F DC\",\"900\":\"A B\"},B:{\"1\":\"N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"388\":\"L G M\",\"900\":\"C K\"},C:{\"1\":\"SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB FC GC\",\"260\":\"QB RB\",\"388\":\"6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB\",\"900\":\"0 1 2 3 4 5 I w J D E F A B C K L G M N O x g y z\"},D:{\"1\":\"HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"16\":\"I w J D E F A B C K L\",\"388\":\"2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB\",\"900\":\"0 1 G M N O x g y z\"},E:{\"1\":\"A B C K L G 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"16\":\"I w IC 0B\",\"388\":\"E F LC MC\",\"900\":\"J D JC KC\"},F:{\"1\":\"4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"16\":\"F B QC RC SC TC rB BC\",\"388\":\"0 1 2 3 G M N O x g y z\",\"900\":\"C UC sB\"},G:{\"1\":\"cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"16\":\"0B VC CC\",\"388\":\"E YC ZC aC bC\",\"900\":\"WC XC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"16\":\"uB qC rC sC\",\"388\":\"uC vC\",\"900\":\"I tC CC\"},J:{\"16\":\"D\",\"388\":\"A\"},K:{\"1\":\"h\",\"16\":\"A B rB BC\",\"900\":\"C sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"900\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"388\":\"BD\"}},B:1,C:\"Constraint Validation API\"};\n/data/features/ogg-vorbis.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\",\"2\":\"EC uB\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"2\":\"I w J D E F A B C K L IC 0B JC KC LC MC 1B rB sB 2B\",\"132\":\"G NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e SC TC rB BC UC sB\",\"2\":\"F QC RC\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"1\":\"uB I H sC tC CC uC vC\",\"16\":\"qC rC\"},J:{\"1\":\"A\",\"2\":\"D\"},K:{\"1\":\"B C h rB BC sB\",\"2\":\"A\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:6,C:\"Ogg Vorbis audio format\"};\n!/data/features/payment-request.js\u00068module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K\",\"322\":\"L\",\"8196\":\"G M N O\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB FC GC\",\"4162\":\"WB XB YB ZB vB aB wB bB cB dB eB\",\"16452\":\"fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\"},D:{\"1\":\"qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB\",\"194\":\"UB VB WB XB YB ZB\",\"1090\":\"vB aB\",\"8196\":\"wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB\"},E:{\"1\":\"K L G sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F IC 0B JC KC LC MC\",\"514\":\"A B 1B\",\"8196\":\"C rB\"},F:{\"1\":\"fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB QC RC SC TC rB BC UC sB\",\"194\":\"HB IB JB KB LB MB NB OB\",\"8196\":\"PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB\"},G:{\"1\":\"hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC\",\"514\":\"cC dC eC\",\"8196\":\"fC gC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"2049\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"1\":\"g 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I\",\"8196\":\"xC yC zC 0C 1C 1B 2C\"},Q:{\"8196\":\"2B\"},R:{\"2\":\"AD\"},S:{\"2\":\"BD CD\"}},B:2,C:\"Payment Request API\"};\n/data/regions/BR.js\u0011module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0.00409,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.00819,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0.00409,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.00819,\"79\":0.00409,\"80\":0.00409,\"81\":0.00409,\"82\":0.00409,\"83\":0.00409,\"84\":0,\"85\":0,\"86\":0,\"87\":0.00409,\"88\":0.00409,\"89\":0,\"90\":0,\"91\":0.00409,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0.00409,\"100\":0,\"101\":0,\"102\":0.02866,\"103\":0.00409,\"104\":0.00819,\"105\":0.00409,\"106\":0.00819,\"107\":0.00819,\"108\":0.02047,\"109\":0.39712,\"110\":0.25383,\"111\":0.00409,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0.00409,\"39\":0,\"40\":0,\"41\":0.00409,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0.00409,\"48\":0,\"49\":0.00819,\"50\":0,\"51\":0.00409,\"52\":0,\"53\":0,\"54\":0,\"55\":0.00409,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0.00409,\"64\":0,\"65\":0.00409,\"66\":0,\"67\":0,\"68\":0.00409,\"69\":0.00409,\"70\":0.00409,\"71\":0.00409,\"72\":0.00409,\"73\":0.00409,\"74\":0.00819,\"75\":0.00819,\"76\":0.00819,\"77\":0.00409,\"78\":0.00819,\"79\":0.05322,\"80\":0.00819,\"81\":0.02047,\"83\":0.01638,\"84\":0.02456,\"85\":0.03685,\"86\":0.03275,\"87\":0.03685,\"88\":0.00819,\"89\":0.01228,\"90\":0.04094,\"91\":0.2702,\"92\":0.03275,\"93\":0.03275,\"94\":0.03275,\"95\":0.00409,\"96\":0.00819,\"97\":0.00819,\"98\":0.00819,\"99\":0.00819,\"100\":0.01638,\"101\":0.00819,\"102\":0.01228,\"103\":0.04094,\"104\":0.01638,\"105\":0.02866,\"106\":0.02866,\"107\":0.05322,\"108\":0.2047,\"109\":6.37436,\"110\":4.11038,\"111\":0.01228,\"112\":0.00409,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0.00409,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.00819,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0.00409,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0.00409,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.17604,\"94\":1.42062,\"95\":0.37255,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0.00409,\"13\":0,\"14\":0,\"15\":0.02866,\"16\":0,\"17\":0,\"18\":0.00819,\"79\":0,\"80\":0,\"81\":0,\"83\":0.00409,\"84\":0.00409,\"85\":0.00409,\"86\":0.00409,\"87\":0,\"88\":0,\"89\":0.00409,\"90\":0,\"91\":0,\"92\":0.00409,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0.02866,\"108\":0.01638,\"109\":0.58135,\"110\":0.8188},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0.00819,\"15\":0,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0.02047,\"10.1\":0,\"11.1\":0,\"12.1\":0,\"13.1\":0.01228,\"14.1\":0.01638,\"15.1\":0.00409,\"15.2-15.3\":0.00409,\"15.4\":0.00409,\"15.5\":0.00819,\"15.6\":0.04503,\"16.0\":0.00819,\"16.1\":0.02456,\"16.2\":0.04913,\"16.3\":0.04913,\"16.4\":0},G:{\"8\":0.0015,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0.0015,\"6.0-6.1\":0,\"7.0-7.1\":0,\"8.1-8.4\":0,\"9.0-9.2\":0.003,\"9.3\":0.03148,\"10.0-10.2\":0.003,\"10.3\":0.04497,\"11.0-11.2\":0.02249,\"11.3-11.4\":0.02998,\"12.0-12.1\":0.01949,\"12.2-12.5\":0.21587,\"13.0-13.1\":0.0075,\"13.2\":0.006,\"13.3\":0.01799,\"13.4-13.7\":0.07945,\"14.0-14.4\":0.15291,\"14.5-14.8\":0.37777,\"15.0-15.1\":0.06596,\"15.2-15.3\":0.09294,\"15.4\":0.13192,\"15.5\":0.28933,\"15.6\":1.1558,\"16.0\":1.69997,\"16.1\":3.4824,\"16.2\":3.58584,\"16.3\":2.08524,\"16.4\":0.01199},P:{\"4\":0.1429,\"20\":0.88804,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0.18373,\"8.2\":0,\"9.2\":0.01021,\"10.1\":0,\"11.1-11.2\":0.03062,\"12.0\":0.01021,\"13.0\":0.03062,\"14.0\":0.02041,\"15.0\":0.01021,\"16.0\":0.03062,\"17.0\":0.10207,\"18.0\":0.06124,\"19.0\":1.18405},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.01645,\"4.2-4.3\":0.02467,\"4.4\":0,\"4.4.3-4.4.4\":0.05345},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0.00441,\"9\":0.00882,\"10\":0,\"11\":0.04409,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.07678},H:{\"0\":0.21807},L:{\"0\":64.09088},R:{_:\"0\"},M:{\"0\":0.15946},Q:{\"13.1\":0}};\n/data/features/import-maps.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\",\"194\":\"P Q R S T U V W X\"},C:{\"1\":\"u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n FC GC\",\"322\":\"o p q r s t\"},D:{\"1\":\"Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h\",\"194\":\"mB nB oB pB qB P Q R S T U V W X\"},E:{\"1\":\"AC PC\",\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B\"},F:{\"1\":\"oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB QC RC SC TC rB BC UC sB\",\"194\":\"bB cB dB eB fB gB hB iB jB kB lB h mB nB\"},G:{\"1\":\"AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"1\":\"g 6C tB 7C 8C 9C\",\"2\":\"I xC yC zC 0C 1C 1B 2C 3C 4C 5C\"},Q:{\"2\":\"2B\"},R:{\"1\":\"AD\"},S:{\"2\":\"BD CD\"}},B:7,C:\"Import maps\"};\n/data/features/json.js\u0005module.exports={A:{A:{\"1\":\"F A B\",\"2\":\"J D DC\",\"129\":\"E\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\",\"2\":\"EC uB\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"I w J D E F A B C K L G JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"IC 0B\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e SC TC rB BC UC sB\",\"2\":\"F QC RC\"},G:{\"1\":\"E VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B\"},H:{\"1\":\"pC\"},I:{\"1\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"1\":\"D A\"},K:{\"1\":\"A B C h rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:6,C:\"JSON parsing\"};\n/data/features/textcontent.js\u0005module.exports={A:{A:{\"1\":\"F A B\",\"2\":\"J D E DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"I w J D E F A B C K L G 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"16\":\"IC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\",\"16\":\"F\"},G:{\"1\":\"E VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"16\":\"0B\"},H:{\"1\":\"pC\"},I:{\"1\":\"uB I H sC tC CC uC vC\",\"16\":\"qC rC\"},J:{\"1\":\"D A\"},K:{\"1\":\"A B C h rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:1,C:\"Node.textContent\"};\n /data/features/css-appearance.js\u0006\nmodule.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"33\":\"S\",\"164\":\"P Q R\",\"388\":\"C K L G M N O\"},C:{\"1\":\"Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"164\":\"CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P\",\"676\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB FC GC\"},D:{\"1\":\"T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"33\":\"S\",\"164\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R\"},E:{\"1\":\"4B 5B 6B tB 7B 8B 9B AC PC\",\"164\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B\"},F:{\"1\":\"h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F B C QC RC SC TC rB BC UC sB\",\"33\":\"jB kB lB\",\"164\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB\"},G:{\"1\":\"4B 5B 6B tB 7B 8B 9B AC\",\"164\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"164\":\"uB I qC rC sC tC CC uC vC\"},J:{\"164\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A\",\"388\":\"B\"},O:{\"164\":\"wC\"},P:{\"164\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"164\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"164\":\"BD\"}},B:5,C:\"CSS Appearance\"};\n\"/data/features/getcomputedstyle.js\u0005module.exports={A:{A:{\"1\":\"F A B\",\"2\":\"J D E DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC\",\"132\":\"uB FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"260\":\"I w J D E F A\"},E:{\"1\":\"w J D E F A B C K L G JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"260\":\"I IC 0B\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e TC rB BC UC sB\",\"260\":\"F QC RC SC\"},G:{\"1\":\"E WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"260\":\"0B VC CC\"},H:{\"260\":\"pC\"},I:{\"1\":\"I H tC CC uC vC\",\"260\":\"uB qC rC sC\"},J:{\"1\":\"A\",\"260\":\"D\"},K:{\"1\":\"B C h rB BC sB\",\"260\":\"A\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:2,C:\"getComputedStyle\"};\n./data/features/justify-content-space-evenly.js\u0006\nmodule.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G\",\"132\":\"M N O\"},C:{\"1\":\"TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB FC GC\"},D:{\"1\":\"aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB\",\"132\":\"YB ZB vB\"},E:{\"1\":\"B C K L G rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A IC 0B JC KC LC MC\",\"132\":\"1B\"},F:{\"1\":\"OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB QC RC SC TC rB BC UC sB\",\"132\":\"LB MB NB\"},G:{\"1\":\"eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC\",\"132\":\"dC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I xC yC\",\"132\":\"zC\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"132\":\"BD\"}},B:5,C:\"CSS justify-content: space-evenly\"};\n /data/features/resizeobserver.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"1\":\"iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB FC GC\"},D:{\"1\":\"dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB\",\"194\":\"VB WB XB YB ZB vB aB wB bB cB\"},E:{\"1\":\"L G 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A B C IC 0B JC KC LC MC 1B rB sB\",\"66\":\"K\"},F:{\"1\":\"TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB QC RC SC TC rB BC UC sB\",\"194\":\"IB JB KB LB MB NB OB PB QB RB SB\"},G:{\"1\":\"lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I xC yC zC 0C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"2\":\"BD\"}},B:5,C:\"Resize Observer\"};\n/data/features/multicolumn.js\u0006>module.exports={A:{A:{\"1\":\"A B\",\"2\":\"J D E F DC\"},B:{\"1\":\"C K L G M N O\",\"516\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"132\":\"TB UB VB WB XB YB ZB vB aB wB bB cB dB\",\"164\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB FC GC\",\"516\":\"eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a\",\"1028\":\"b c d e i j k l m n o p q r s t u v f H yB zB\"},D:{\"420\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB\",\"516\":\"RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"A B C K L G 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"132\":\"F MC\",\"164\":\"D E LC\",\"420\":\"I w J IC 0B JC KC\"},F:{\"1\":\"C rB BC UC sB\",\"2\":\"F B QC RC SC TC\",\"420\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB\",\"516\":\"EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\"},G:{\"1\":\"cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"132\":\"aC bC\",\"164\":\"E YC ZC\",\"420\":\"0B VC CC WC XC\"},H:{\"1\":\"pC\"},I:{\"420\":\"uB I qC rC sC tC CC uC vC\",\"516\":\"H\"},J:{\"420\":\"D A\"},K:{\"1\":\"C rB BC sB\",\"2\":\"A B\",\"516\":\"h\"},L:{\"516\":\"H\"},M:{\"1028\":\"f\"},N:{\"1\":\"A B\"},O:{\"516\":\"wC\"},P:{\"1\":\"g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"420\":\"I\"},Q:{\"516\":\"2B\"},R:{\"516\":\"AD\"},S:{\"164\":\"BD CD\"}},B:4,C:\"CSS3 Multiple column layout\"};\n$/data/features/screen-orientation.js\u0005module.exports={A:{A:{\"2\":\"J D E F A DC\",\"164\":\"B\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"36\":\"C K L G M N O\"},C:{\"1\":\"LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB I w J D E F A B C K L G M N FC GC\",\"36\":\"0 1 2 3 4 5 6 7 8 9 O x g y z AB BB CB DB EB FB GB HB IB JB KB\"},D:{\"1\":\"FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB\"},E:{\"1\":\"AC PC\",\"2\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B\"},F:{\"1\":\"2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 F B C G M N O x g y z QC RC SC TC rB BC UC sB\"},G:{\"1\":\"AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A\",\"36\":\"B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"16\":\"I\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:5,C:\"Screen Orientation\"};\n#/data/features/channel-messaging.js\u0005module.exports={A:{A:{\"1\":\"A B\",\"2\":\"J D E F DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 EC uB I w J D E F A B C K L G M N O x g y z FC GC\",\"194\":\"3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"w J D E F A B C K L G JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I IC 0B\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e TC rB BC UC sB\",\"2\":\"F QC RC\",\"16\":\"SC\"},G:{\"1\":\"E WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC CC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H uC vC\",\"2\":\"uB I qC rC sC tC CC\"},J:{\"1\":\"D A\"},K:{\"1\":\"B C h rB BC sB\",\"2\":\"A\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:1,C:\"Channel messaging\"};\n/data/features/user-timing.js\u0005module.exports={A:{A:{\"1\":\"A B\",\"2\":\"J D E F DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FC GC\"},D:{\"1\":\"2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 I w J D E F A B C K L G M N O x g y z\"},E:{\"1\":\"B C K L G rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F A IC 0B JC KC LC MC 1B\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F B C QC RC SC TC rB BC UC sB\"},G:{\"1\":\"eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H uC vC\",\"2\":\"uB I qC rC sC tC CC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:2,C:\"User Timing API\"};\n/data/regions/CY.js\u0011module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0.00476,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.04288,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.00476,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0.00476,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0.00476,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0.00953,\"103\":0.00476,\"104\":0.00476,\"105\":0.00476,\"106\":0.00476,\"107\":0.00953,\"108\":0.01906,\"109\":0.79559,\"110\":0.34777,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0.00953,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0.00476,\"45\":0.00476,\"46\":0,\"47\":0.00476,\"48\":0,\"49\":0.00953,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0.00476,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0.00476,\"69\":0.00476,\"70\":0.77177,\"71\":0.00476,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0.00476,\"77\":0.00476,\"78\":0.00476,\"79\":0.08575,\"80\":0.00476,\"81\":0.01429,\"83\":0.00953,\"84\":0.01429,\"85\":0.00953,\"86\":0.01906,\"87\":0.01906,\"88\":0.00476,\"89\":0,\"90\":0,\"91\":0.00953,\"92\":0.02858,\"93\":0.0524,\"94\":0,\"95\":0.00953,\"96\":0.00476,\"97\":0.00476,\"98\":0.01429,\"99\":0.00953,\"100\":0.01429,\"101\":0.00476,\"102\":0.00953,\"103\":0.07146,\"104\":0.01429,\"105\":0.05717,\"106\":0.04288,\"107\":0.02858,\"108\":1.02426,\"109\":9.94247,\"110\":3.84931,\"111\":0.00476,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0.00476,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0.00476,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0.00476,\"62\":0,\"63\":0.00476,\"64\":0,\"65\":0,\"66\":0,\"67\":0.02382,\"68\":0,\"69\":0,\"70\":0,\"71\":0.00476,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0.00476,\"90\":0,\"91\":0,\"92\":0,\"93\":0.04764,\"94\":0.5431,\"95\":0.20485,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0.00476,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0.00476,\"85\":0.00476,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00476,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0.00476,\"104\":0,\"105\":0,\"106\":0,\"107\":0.00953,\"108\":0.02382,\"109\":1.03379,\"110\":1.23864},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0.00476,\"10\":0,\"11\":0,\"12\":0,\"13\":0.00476,\"14\":0.04288,\"15\":0.00476,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0.00476,\"13.1\":0.20485,\"14.1\":0.0667,\"15.1\":0.02858,\"15.2-15.3\":0.01429,\"15.4\":0.01906,\"15.5\":0.04288,\"15.6\":0.23344,\"16.0\":0.02382,\"16.1\":0.07622,\"16.2\":0.33824,\"16.3\":0.21438,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0.00652,\"7.0-7.1\":0.01955,\"8.1-8.4\":0.00435,\"9.0-9.2\":0.00435,\"9.3\":0.06301,\"10.0-10.2\":0.00435,\"10.3\":0.06953,\"11.0-11.2\":0.01955,\"11.3-11.4\":0.01304,\"12.0-12.1\":0.01521,\"12.2-12.5\":0.34981,\"13.0-13.1\":0.00217,\"13.2\":0,\"13.3\":0.03259,\"13.4-13.7\":0.07822,\"14.0-14.4\":0.20206,\"14.5-14.8\":0.74524,\"15.0-15.1\":0.13471,\"15.2-15.3\":0.28463,\"15.4\":0.21075,\"15.5\":0.49755,\"15.6\":1.87289,\"16.0\":2.15534,\"16.1\":5.4796,\"16.2\":5.3601,\"16.3\":3.0744,\"16.4\":0.01086},P:{\"4\":0.14198,\"20\":1.39955,\"5.0-5.4\":0.01014,\"6.2-6.4\":0,\"7.2-7.4\":0.03043,\"8.2\":0,\"9.2\":0.01014,\"10.1\":0,\"11.1-11.2\":0.01014,\"12.0\":0,\"13.0\":0.01014,\"14.0\":0.02028,\"15.0\":0.01014,\"16.0\":0.05071,\"17.0\":0.06085,\"18.0\":0.07099,\"19.0\":2.51514},I:{\"0\":0,\"3\":0,\"4\":0.00876,\"2.1\":0,\"2.2\":0.02629,\"2.3\":0.00876,\"4.1\":0.00876,\"4.2-4.3\":0.01753,\"4.4\":0,\"4.4.3-4.4.4\":0.08325},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0.01429,\"9\":0,\"10\":0.00476,\"11\":0.06193,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0.01047,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.21468},H:{\"0\":0.36683},L:{\"0\":48.9476},R:{_:\"0\"},M:{\"0\":0.17279},Q:{\"13.1\":0}};\n/data/regions/alt-oc.js\u000e.module.exports={C:{\"11\":0.00517,\"34\":0.00517,\"52\":0.02069,\"54\":0.01552,\"59\":0.00517,\"66\":0.01035,\"78\":0.10863,\"81\":0.00517,\"83\":0.00517,\"87\":0.03104,\"91\":0.01035,\"94\":0.04656,\"102\":0.05173,\"103\":0.02587,\"104\":0.00517,\"105\":0.00517,\"106\":0.03104,\"107\":0.04138,\"108\":0.08794,\"109\":1.38636,\"110\":0.96735,\"111\":0.00517,_:\"2 3 4 5 6 7 8 9 10 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 53 55 56 57 58 60 61 62 63 64 65 67 68 69 70 71 72 73 74 75 76 77 79 80 82 84 85 86 88 89 90 92 93 95 96 97 98 99 100 101 112 3.5 3.6\"},D:{\"25\":0.02069,\"26\":0.01035,\"34\":0.03104,\"35\":0.0776,\"38\":0.10863,\"47\":0.00517,\"49\":0.03104,\"53\":0.01035,\"56\":0.00517,\"59\":0.02587,\"60\":0.06725,\"65\":0.01035,\"66\":0.04138,\"67\":0.03104,\"68\":0.01035,\"69\":0.26382,\"70\":0.00517,\"72\":0.00517,\"73\":0.00517,\"74\":0.02069,\"75\":0.01035,\"76\":0.02069,\"77\":0.01035,\"78\":0.01552,\"79\":0.12933,\"80\":0.02587,\"81\":0.04138,\"83\":0.03621,\"84\":0.03621,\"85\":0.0569,\"86\":0.11381,\"87\":0.09829,\"88\":0.02587,\"89\":0.01552,\"90\":0.02069,\"91\":0.01552,\"92\":0.03104,\"93\":0.03621,\"94\":0.02069,\"95\":0.03104,\"96\":0.0569,\"97\":0.06208,\"98\":0.04656,\"99\":0.0569,\"100\":0.07242,\"101\":0.10346,\"102\":0.06725,\"103\":0.40349,\"104\":0.15002,\"105\":0.1914,\"106\":0.12415,\"107\":0.34659,\"108\":1.37602,\"109\":15.41554,\"110\":9.94768,\"111\":0.01035,\"112\":0.01035,_:\"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 27 28 29 30 31 32 33 36 37 39 40 41 42 43 44 45 46 48 50 51 52 54 55 57 58 61 62 63 64 71 113\"},F:{\"28\":0.00517,\"46\":0.04656,\"89\":0.01552,\"93\":0.06725,\"94\":0.54317,\"95\":0.23279,_:\"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 90 91 92 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1\",\"10.0-10.1\":0},B:{\"17\":0.00517,\"18\":0.01035,\"85\":0.01035,\"92\":0.00517,\"95\":0.00517,\"102\":0.00517,\"103\":0.00517,\"104\":0.01552,\"105\":0.01552,\"106\":0.01035,\"107\":0.0776,\"108\":0.2483,\"109\":2.63306,\"110\":3.67283,_:\"12 13 14 15 16 79 80 81 83 84 86 87 88 89 90 91 93 94 96 97 98 99 100 101\"},E:{\"4\":0,\"12\":0.00517,\"13\":0.05173,\"14\":0.23279,\"15\":0.04656,_:\"0 5 6 7 8 9 10 11 3.1 3.2 5.1 6.1 7.1 9.1 10.1 16.4\",\"11.1\":0.01552,\"12.1\":0.07242,\"13.1\":0.30521,\"14.1\":0.64663,\"15.1\":0.11898,\"15.2-15.3\":0.08794,\"15.4\":0.21209,\"15.5\":0.41384,\"15.6\":2.37441,\"16.0\":0.19657,\"16.1\":0.66214,\"16.2\":2.18301,\"16.3\":1.29842},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0.01005,\"6.0-6.1\":0.01256,\"7.0-7.1\":0.01005,\"8.1-8.4\":0.01256,\"9.0-9.2\":0.01256,\"9.3\":0.1457,\"10.0-10.2\":0.00502,\"10.3\":0.18087,\"11.0-11.2\":0.03014,\"11.3-11.4\":0.07536,\"12.0-12.1\":0.04019,\"12.2-12.5\":0.77372,\"13.0-13.1\":0.01507,\"13.2\":0.01005,\"13.3\":0.05527,\"13.4-13.7\":0.11555,\"14.0-14.4\":0.32657,\"14.5-14.8\":0.74608,\"15.0-15.1\":0.17584,\"15.2-15.3\":0.23613,\"15.4\":0.28135,\"15.5\":0.54763,\"15.6\":2.3538,\"16.0\":2.02975,\"16.1\":6.41832,\"16.2\":6.28016,\"16.3\":2.83361,\"16.4\":0.01005},P:{\"4\":0.23382,\"20\":1.12658,\"5.0-5.4\":0.03188,\"6.2-6.4\":0.08151,\"7.2-7.4\":0.01063,\"8.2\":0.01016,\"9.2\":0.03097,\"10.1\":0.01011,\"11.1-11.2\":0.01063,\"12.0\":0.02065,\"13.0\":0.03188,\"14.0\":0.03188,\"15.0\":0.02126,\"16.0\":0.06377,\"17.0\":0.06377,\"18.0\":0.09565,\"19.0\":1.80678},I:{\"0\":0,\"3\":0,\"4\":0.00296,\"2.1\":0,\"2.2\":0.00591,\"2.3\":0.00197,\"4.1\":0.00296,\"4.2-4.3\":0.0069,\"4.4\":0,\"4.4.3-4.4.4\":0.02758},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"8\":0.05272,\"9\":0.04218,\"11\":0.17926,_:\"6 7 10 5.5\"},N:{\"10\":0.03712,\"11\":0.07423},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.08206},H:{\"0\":0.17823},L:{\"0\":21.15149},R:{_:\"0\"},M:{\"0\":0.44408},Q:{\"13.1\":0.00483}};\n/data/regions/BZ.js\u0012module.exports={C:{\"2\":0.00678,\"3\":0.01357,\"4\":0.00678,\"5\":0,\"6\":0.00678,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0.00678,\"13\":0,\"14\":0.00678,\"15\":0.00678,\"16\":0.00678,\"17\":0.00678,\"18\":0,\"19\":0,\"20\":0,\"21\":0.01357,\"22\":0,\"23\":0.00678,\"24\":0,\"25\":0.00678,\"26\":0.00678,\"27\":0,\"28\":0.00678,\"29\":0.00678,\"30\":0,\"31\":0.00678,\"32\":0.00678,\"33\":0.00678,\"34\":0.00678,\"35\":0.00678,\"36\":0.00678,\"37\":0.00678,\"38\":0.01357,\"39\":0.01357,\"40\":0.02714,\"41\":0.00678,\"42\":0,\"43\":0.00678,\"44\":0,\"45\":0,\"46\":0.00678,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.00678,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0.00678,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.00678,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0.00678,\"89\":0,\"90\":0,\"91\":0.00678,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0.05427,\"103\":0,\"104\":0.00678,\"105\":0,\"106\":0.02714,\"107\":0.02714,\"108\":0.06106,\"109\":0.39347,\"110\":0.19674,\"111\":0,\"112\":0,\"3.5\":0.00678,\"3.6\":0.02035},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.00678,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0.00678,\"20\":0.00678,\"21\":0.00678,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0.00678,\"29\":0,\"30\":0.00678,\"31\":0.00678,\"32\":0.00678,\"33\":0.00678,\"34\":0.00678,\"35\":0.00678,\"36\":0.00678,\"37\":0.01357,\"38\":0.01357,\"39\":0.01357,\"40\":0.09498,\"41\":0.02714,\"42\":0.02035,\"43\":0.0407,\"44\":0.06784,\"45\":0.0407,\"46\":0.02714,\"47\":0.02714,\"48\":0,\"49\":0,\"50\":0,\"51\":0.00678,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0.00678,\"71\":0,\"72\":0.00678,\"73\":0,\"74\":0,\"75\":0.01357,\"76\":0.02714,\"77\":0,\"78\":0,\"79\":0.01357,\"80\":0.00678,\"81\":0.00678,\"83\":0,\"84\":0.01357,\"85\":0.02035,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0.00678,\"91\":0.00678,\"92\":0.00678,\"93\":0.06106,\"94\":0.00678,\"95\":0.00678,\"96\":0,\"97\":0.00678,\"98\":0,\"99\":0,\"100\":0.01357,\"101\":0,\"102\":0.01357,\"103\":0.08141,\"104\":0.03392,\"105\":0.01357,\"106\":0.02035,\"107\":0.03392,\"108\":29.26618,\"109\":3.9008,\"110\":2.53043,\"111\":0.00678,\"112\":0.01357,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0.00678,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0.00678,\"27\":0,\"28\":0.00678,\"29\":0,\"30\":0.00678,\"31\":0.02035,\"32\":0.00678,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0.00678,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.00678,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.01357,\"94\":0.31206,\"95\":0.53594,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0.00678,\"11.6\":0,\"12.1\":0.01357},B:{\"12\":0.02035,\"13\":0.00678,\"14\":0.00678,\"15\":0,\"16\":0,\"17\":0,\"18\":0.00678,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0.00678,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0,\"106\":0.01357,\"107\":0.01357,\"108\":0.03392,\"109\":0.67162,\"110\":0.92941},E:{\"4\":0.00678,\"5\":0.00678,\"6\":0.00678,\"7\":0,\"8\":0.00678,\"9\":0.01357,\"10\":0,\"11\":0,\"12\":0,\"13\":0.00678,\"14\":0.02714,\"15\":0.00678,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0.02035,\"6.1\":0,\"7.1\":0.00678,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0.00678,\"13.1\":0.02714,\"14.1\":0.06106,\"15.1\":0.04749,\"15.2-15.3\":0.02035,\"15.4\":0.16282,\"15.5\":0.06106,\"15.6\":0.44096,\"16.0\":0.06106,\"16.1\":0.45453,\"16.2\":0.57664,\"16.3\":0.59021,\"16.4\":0.00678},G:{\"8\":0.01183,\"3.2\":0.00473,\"4.0-4.1\":0,\"4.2-4.3\":0.01183,\"5.0-5.1\":0.02603,\"6.0-6.1\":0.01893,\"7.0-7.1\":0.07572,\"8.1-8.4\":0.20114,\"9.0-9.2\":0.01893,\"9.3\":0.05916,\"10.0-10.2\":0,\"10.3\":0.21771,\"11.0-11.2\":0.08282,\"11.3-11.4\":0.08282,\"12.0-12.1\":0.04023,\"12.2-12.5\":0.24137,\"13.0-13.1\":0.00473,\"13.2\":0.00473,\"13.3\":0.01183,\"13.4-13.7\":0.0213,\"14.0-14.4\":0.08282,\"14.5-14.8\":0.2887,\"15.0-15.1\":0.14198,\"15.2-15.3\":0.66495,\"15.4\":0.39045,\"15.5\":0.60343,\"15.6\":1.84814,\"16.0\":1.58547,\"16.1\":4.62626,\"16.2\":6.29455,\"16.3\":4.21215,\"16.4\":0.03313},P:{\"4\":0.0829,\"20\":0.5285,\"5.0-5.4\":0,\"6.2-6.4\":0.01036,\"7.2-7.4\":0.06218,\"8.2\":0,\"9.2\":0,\"10.1\":0,\"11.1-11.2\":0.01036,\"12.0\":0,\"13.0\":0,\"14.0\":0.01036,\"15.0\":0.01036,\"16.0\":0.03109,\"17.0\":0.0829,\"18.0\":0.03109,\"19.0\":0.72539},I:{\"0\":0,\"3\":0.00848,\"4\":0.16113,\"2.1\":0.02827,\"2.2\":0.0424,\"2.3\":0.09894,\"4.1\":0.15547,\"4.2-4.3\":0.25724,\"4.4\":0,\"4.4.3-4.4.4\":0.68692},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0.0137,\"7\":0.03426,\"8\":0.33571,\"9\":0.05481,\"10\":0.06166,\"11\":0.16443,\"5.5\":0},N:{\"10\":0.0402,\"11\":0.0402},S:{\"2.5\":0.00322,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0.0193},O:{\"0\":0.12864},H:{\"0\":0.09134},L:{\"0\":29.09429},R:{_:\"0\"},M:{\"0\":0.10613},Q:{\"13.1\":0.00322}};\n /data/features/viewport-units.js\u0006\u0007module.exports={A:{A:{\"2\":\"J D E DC\",\"132\":\"F\",\"260\":\"A B\"},B:{\"1\":\"M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"260\":\"C K L G\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB I w J D E F A B C K L G M N O FC GC\"},D:{\"1\":\"3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"I w J D E F A B C K L G M N O x\",\"260\":\"0 1 2 g y z\"},E:{\"1\":\"D E F A B C K L G KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w IC 0B JC\",\"260\":\"J\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F B C QC RC SC TC rB BC UC sB\"},G:{\"1\":\"E ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC CC WC\",\"516\":\"YC\",\"772\":\"XC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H uC vC\",\"2\":\"uB I qC rC sC tC CC\"},J:{\"1\":\"A\",\"2\":\"D\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"260\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:4,C:\"Viewport units: vw, vh, vmin, vmax\"};\n/data/regions/KY.js\u0010>module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.00494,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0.01483,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0,\"108\":0.02472,\"109\":0.68227,\"110\":0.53395,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0.00494,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0.01483,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0.00494,\"77\":0,\"78\":0,\"79\":0.00989,\"80\":0,\"81\":0,\"83\":0.00494,\"84\":0,\"85\":0.01483,\"86\":0,\"87\":0.00989,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.03461,\"93\":0.05438,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0.00494,\"100\":0.00494,\"101\":0,\"102\":0.00494,\"103\":0.05933,\"104\":0.00494,\"105\":0.06922,\"106\":0.01483,\"107\":0.09888,\"108\":0.85037,\"109\":7.73242,\"110\":4.50398,\"111\":0.00494,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0.00989,\"94\":0.3708,\"95\":0.1681,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0.00494,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0.00494,\"101\":0.00494,\"102\":0,\"103\":0.00494,\"104\":0,\"105\":0,\"106\":0.00989,\"107\":0.01978,\"108\":0.09888,\"109\":1.6859,\"110\":1.94299},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.02472,\"14\":0.03955,\"15\":0.04944,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0.07416,\"13.1\":0.17304,\"14.1\":0.18787,\"15.1\":0.11371,\"15.2-15.3\":0.00989,\"15.4\":0.01978,\"15.5\":0.10877,\"15.6\":0.99374,\"16.0\":0.0791,\"16.1\":0.30158,\"16.2\":1.27061,\"16.3\":0.80587,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0.00807,\"10.0-10.2\":0,\"10.3\":0.0605,\"11.0-11.2\":0.00403,\"11.3-11.4\":0.01613,\"12.0-12.1\":0,\"12.2-12.5\":0.45171,\"13.0-13.1\":0,\"13.2\":0.0121,\"13.3\":0.0726,\"13.4-13.7\":0.10486,\"14.0-14.4\":0.12099,\"14.5-14.8\":0.41541,\"15.0-15.1\":0.10889,\"15.2-15.3\":0.17746,\"15.4\":0.14923,\"15.5\":0.52028,\"15.6\":4.21061,\"16.0\":3.30718,\"16.1\":8.7842,\"16.2\":12.59149,\"16.3\":6.95718,\"16.4\":0.10889},P:{\"4\":0.10355,\"20\":1.62575,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0.60059,\"8.2\":0,\"9.2\":0,\"10.1\":0,\"11.1-11.2\":0.0932,\"12.0\":0,\"13.0\":0,\"14.0\":0.01036,\"15.0\":0,\"16.0\":0.06213,\"17.0\":0.0932,\"18.0\":0.07249,\"19.0\":2.72339},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0.11031,\"4.4\":0,\"4.4.3-4.4.4\":0.08273},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.00989,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.07584},H:{\"0\":0.01436},L:{\"0\":29.57643},R:{_:\"0\"},M:{\"0\":0.11629},Q:{\"13.1\":0}};\n/data/features/css-rrggbbaa.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"1\":\"QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB FC GC\"},D:{\"1\":\"bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB\",\"194\":\"TB UB VB WB XB YB ZB vB aB wB\"},E:{\"1\":\"A B C K L G 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w J D E F IC 0B JC KC LC MC\"},F:{\"1\":\"TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB QC RC SC TC rB BC UC sB\",\"194\":\"GB HB IB JB KB LB MB NB OB PB QB RB SB\"},G:{\"1\":\"cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"E 0B VC CC WC XC YC ZC aC bC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I\",\"194\":\"xC yC zC\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"2\":\"BD\"}},B:4,C:\"#rrggbbaa hex color notation\"};\n/data/features/opus.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB I w J D E F A B C K L FC GC\"},D:{\"1\":\"AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z\"},E:{\"2\":\"I w J D E F A IC 0B JC KC LC MC 1B\",\"132\":\"B C K L G rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F B C G M N O x QC RC SC TC rB BC UC sB\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC\",\"132\":\"eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"I\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:6,C:\"Opus audio format\"};\n/data/regions/GH.js\u0012module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.00256,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0.00256,\"67\":0,\"68\":0.00256,\"69\":0,\"70\":0,\"71\":0,\"72\":0.00256,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.00256,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0.00256,\"86\":0,\"87\":0.00512,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0.00256,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0.00256,\"102\":0.00512,\"103\":0.00256,\"104\":0.00256,\"105\":0.00512,\"106\":0.00256,\"107\":0.00256,\"108\":0.01535,\"109\":0.26102,\"110\":0.17657,\"111\":0.00768,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0.00256,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0.00512,\"47\":0.00256,\"48\":0,\"49\":0.00256,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0.00256,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0.00256,\"64\":0.00256,\"65\":0,\"66\":0.00256,\"67\":0.00256,\"68\":0.00256,\"69\":0.00256,\"70\":0.00512,\"71\":0,\"72\":0.00256,\"73\":0.00256,\"74\":0.00768,\"75\":0.00256,\"76\":0.00512,\"77\":0.00512,\"78\":0.00256,\"79\":0.01024,\"80\":0.00512,\"81\":0.02303,\"83\":0.00256,\"84\":0,\"85\":0.00256,\"86\":0.00512,\"87\":0.00768,\"88\":0.00512,\"89\":0.00512,\"90\":0.00512,\"91\":0.00512,\"92\":0.00512,\"93\":0.00768,\"94\":0.00256,\"95\":0.01024,\"96\":0.00512,\"97\":0.00512,\"98\":0.00512,\"99\":0.00768,\"100\":0.00256,\"101\":0.00768,\"102\":0.00768,\"103\":0.03327,\"104\":0.00768,\"105\":0.01535,\"106\":0.01535,\"107\":0.02047,\"108\":0.09212,\"109\":2.01137,\"110\":1.12596,\"111\":0.00256,\"112\":0.00256,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0.00256,\"25\":0,\"26\":0.00256,\"27\":0.00256,\"28\":0.00512,\"29\":0,\"30\":0.00256,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0.00256,\"43\":0,\"44\":0,\"45\":0,\"46\":0.00256,\"47\":0,\"48\":0,\"49\":0,\"50\":0.00256,\"51\":0.00256,\"52\":0,\"53\":0,\"54\":0.00512,\"55\":0.00512,\"56\":0,\"57\":0.00256,\"58\":0.01535,\"60\":0.06398,\"62\":0,\"63\":0.09468,\"64\":0.03839,\"65\":0.02303,\"66\":0.53739,\"67\":0.6116,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0.00512,\"73\":0.01535,\"74\":0.00256,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0.00256,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0.00256,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.00256,\"93\":0.00256,\"94\":0.12027,\"95\":0.17145,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0.00768},B:{\"12\":0.00512,\"13\":0.00256,\"14\":0.00256,\"15\":0.0128,\"16\":0.00256,\"17\":0.00512,\"18\":0.01791,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0.00512,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0.0128,\"90\":0.01024,\"91\":0,\"92\":0.02303,\"93\":0,\"94\":0,\"95\":0.00256,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0.00256,\"101\":0,\"102\":0,\"103\":0.00256,\"104\":0.00256,\"105\":0.00256,\"106\":0.00256,\"107\":0.0128,\"108\":0.03327,\"109\":0.32755,\"110\":0.39409},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.00256,\"14\":0.00768,\"15\":0,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0.00512,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0,\"13.1\":0.01535,\"14.1\":0.01535,\"15.1\":0.00512,\"15.2-15.3\":0.00256,\"15.4\":0.00768,\"15.5\":0.0128,\"15.6\":0.02815,\"16.0\":0.00512,\"16.1\":0.02047,\"16.2\":0.02559,\"16.3\":0.04094,\"16.4\":0},G:{\"8\":0.00754,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0.01005,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0.08796,\"10.0-10.2\":0.00503,\"10.3\":0.24629,\"11.0-11.2\":0.02765,\"11.3-11.4\":0.01508,\"12.0-12.1\":0.16336,\"12.2-12.5\":1.87988,\"13.0-13.1\":0.08796,\"13.2\":0.03267,\"13.3\":0.12063,\"13.4-13.7\":0.23624,\"14.0-14.4\":1.89999,\"14.5-14.8\":1.62354,\"15.0-15.1\":1.02288,\"15.2-15.3\":1.23399,\"15.4\":0.65846,\"15.5\":1.14603,\"15.6\":1.17618,\"16.0\":2.58358,\"16.1\":2.27195,\"16.2\":2.62631,\"16.3\":2.74694,\"16.4\":0.01005},P:{\"4\":0.13338,\"20\":0.24625,\"5.0-5.4\":0.02052,\"6.2-6.4\":0,\"7.2-7.4\":0.14364,\"8.2\":0,\"9.2\":0.06156,\"10.1\":0,\"11.1-11.2\":0.0513,\"12.0\":0.04104,\"13.0\":0.02052,\"14.0\":0.03078,\"15.0\":0.03078,\"16.0\":0.1026,\"17.0\":0.0513,\"18.0\":0.08208,\"19.0\":0.63614},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.00645,\"4.2-4.3\":0.0137,\"4.4\":0,\"4.4.3-4.4.4\":0.08057},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0.00256,\"11\":0.00768,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0.00744,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0.02976},O:{\"0\":1.22032},H:{\"0\":11.29259},L:{\"0\":53.28138},R:{_:\"0\"},M:{\"0\":0.23067},Q:{\"13.1\":0.00744}};\n/data/features/audio.js\u0005module.exports={A:{A:{\"1\":\"F A B\",\"2\":\"J D E DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB\",\"132\":\"I w J D E F A B C K L G M N O x FC GC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"I w J D E F A B C K L G JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"IC 0B\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e SC TC rB BC UC sB\",\"2\":\"F\",\"4\":\"QC RC\"},G:{\"1\":\"E VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B\"},H:{\"2\":\"pC\"},I:{\"1\":\"uB I H sC tC CC uC vC\",\"2\":\"qC rC\"},J:{\"1\":\"D A\"},K:{\"1\":\"B C h rB BC sB\",\"2\":\"A\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:1,C:\"Audio element\"};\n/data/regions/SH.js\u000e:module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0,\"108\":0,\"109\":0,\"110\":0,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0,\"108\":0,\"109\":25,\"110\":0,\"111\":0,\"112\":0,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0,\"104\":0,\"105\":0,\"106\":0,\"107\":0,\"108\":0,\"109\":0,\"110\":0},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0,\"13.1\":0,\"14.1\":0,\"15.1\":0,\"15.2-15.3\":0,\"15.4\":0,\"15.5\":0,\"15.6\":0,\"16.0\":0,\"16.1\":0,\"16.2\":0,\"16.3\":0,\"16.4\":0},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0,\"8.1-8.4\":0,\"9.0-9.2\":0,\"9.3\":0,\"10.0-10.2\":0,\"10.3\":0,\"11.0-11.2\":0,\"11.3-11.4\":0,\"12.0-12.1\":0,\"12.2-12.5\":0,\"13.0-13.1\":0,\"13.2\":0,\"13.3\":0,\"13.4-13.7\":0,\"14.0-14.4\":0,\"14.5-14.8\":0,\"15.0-15.1\":0,\"15.2-15.3\":0,\"15.4\":9.375,\"15.5\":0,\"15.6\":0,\"16.0\":0,\"16.1\":0,\"16.2\":65.625,\"16.3\":0,\"16.4\":0},P:{\"4\":0,\"20\":0,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0,\"8.2\":0,\"9.2\":0,\"10.1\":0,\"11.1-11.2\":0,\"12.0\":0,\"13.0\":0,\"14.0\":0,\"15.0\":0,\"16.0\":0,\"17.0\":0,\"18.0\":0,\"19.0\":0},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0,\"4.4\":0,\"4.4.3-4.4.4\":0},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0},H:{\"0\":0},L:{\"0\":0},R:{_:\"0\"},M:{\"0\":0},Q:{\"13.1\":0}};\n#/data/features/createimagebitmap.js\u0006\u0014module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"1\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"2\":\"C K L G M N O\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB FC GC\",\"1028\":\"c d e i j\",\"3076\":\"JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b\",\"8196\":\"k l m n o p q r s t u v f H yB zB\"},D:{\"1\":\"vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB\",\"132\":\"RB SB\",\"260\":\"TB UB\",\"516\":\"VB WB XB YB ZB\"},E:{\"2\":\"I w J D E F A B C K L IC 0B JC KC LC MC 1B rB sB 2B NC\",\"4100\":\"G OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB QC RC SC TC rB BC UC sB\",\"132\":\"EB FB\",\"260\":\"GB HB\",\"516\":\"IB JB KB LB MB\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC\",\"4100\":\"oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"8196\":\"f\"},N:{\"2\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"16\":\"I xC\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"3076\":\"BD CD\"}},B:1,C:\"createImageBitmap\"};\n/data/features/css-overflow.js\u0006\u001cmodule.exports={A:{A:{\"388\":\"J D E F A B DC\"},B:{\"1\":\"Z a b c d e i j k l m n o p q r s t u v f H\",\"260\":\"P Q R S T U V W X Y\",\"388\":\"C K L G M N O\"},C:{\"1\":\"R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"260\":\"wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q\",\"388\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB FC GC\"},D:{\"1\":\"Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"260\":\"hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y\",\"388\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB\"},E:{\"1\":\"tB 7B 8B 9B AC PC\",\"260\":\"L G 2B NC OC 3B 4B 5B 6B\",\"388\":\"I w J D E F A B C K IC 0B JC KC LC MC 1B rB sB\"},F:{\"1\":\"oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"260\":\"WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB\",\"388\":\"0 1 2 3 4 5 6 7 8 9 F B C G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB QC RC SC TC rB BC UC sB\"},G:{\"1\":\"tB 7B 8B 9B AC\",\"260\":\"lC mC nC oC 3B 4B 5B 6B\",\"388\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC\"},H:{\"388\":\"pC\"},I:{\"1\":\"H\",\"388\":\"uB I qC rC sC tC CC uC vC\"},J:{\"388\":\"D A\"},K:{\"1\":\"h\",\"388\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"388\":\"A B\"},O:{\"388\":\"wC\"},P:{\"1\":\"g 6C tB 7C 8C 9C\",\"388\":\"I xC yC zC 0C 1C 1B 2C 3C 4C 5C\"},Q:{\"388\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"CD\",\"388\":\"BD\"}},B:5,C:\"CSS overflow property\"};\n/data/regions/DO.js\u0011module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0.00404,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0.00404,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0.02425,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.00404,\"79\":0,\"80\":0.00404,\"81\":0.01213,\"82\":0.00404,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0.00404,\"100\":0,\"101\":0,\"102\":0.00808,\"103\":0,\"104\":0.10509,\"105\":0.00404,\"106\":0.00404,\"107\":0.00404,\"108\":0.01213,\"109\":0.24656,\"110\":0.14147,\"111\":0.00404,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0.00808,\"48\":0.00808,\"49\":0.02829,\"50\":0,\"51\":0.00404,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0.00404,\"57\":0,\"58\":0,\"59\":0,\"60\":0,\"61\":0,\"62\":0,\"63\":0.00404,\"64\":0.00404,\"65\":0.00404,\"66\":0,\"67\":0,\"68\":0.00404,\"69\":0,\"70\":0.00404,\"71\":0,\"72\":0.00404,\"73\":0.00404,\"74\":0.00404,\"75\":0.00404,\"76\":0.06467,\"77\":0.00404,\"78\":0,\"79\":0.02829,\"80\":0.00404,\"81\":0.01617,\"83\":0.01213,\"84\":0.02021,\"85\":0.02829,\"86\":0.01617,\"87\":0.02829,\"88\":0.01213,\"89\":0.02021,\"90\":0.00808,\"91\":0.02021,\"92\":0.00404,\"93\":0.02425,\"94\":0.00808,\"95\":0.00808,\"96\":0.01213,\"97\":0.01213,\"98\":0.01213,\"99\":0.01617,\"100\":0.01213,\"101\":0.00808,\"102\":0.01213,\"103\":0.12126,\"104\":0.05255,\"105\":0.03638,\"106\":0.03234,\"107\":0.06871,\"108\":0.24656,\"109\":5.88515,\"110\":3.86415,\"111\":0.00404,\"112\":0.00404,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0.00404,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.00808,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0.00404,\"91\":0,\"92\":0,\"93\":0.05659,\"94\":0.49717,\"95\":0.19402,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0.00404,\"18\":0.02425,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0.00404,\"85\":0.00404,\"86\":0,\"87\":0.00404,\"88\":0,\"89\":0,\"90\":0,\"91\":0,\"92\":0.01213,\"93\":0,\"94\":0,\"95\":0,\"96\":0,\"97\":0.00404,\"98\":0,\"99\":0,\"100\":0,\"101\":0,\"102\":0,\"103\":0.00404,\"104\":0.00404,\"105\":0.00404,\"106\":0.00404,\"107\":0.01617,\"108\":0.02829,\"109\":0.62247,\"110\":0.84882},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.00404,\"14\":0.0485,\"15\":0.00808,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0.00808,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0,\"11.1\":0,\"12.1\":0.00404,\"13.1\":0.05659,\"14.1\":0.05255,\"15.1\":0.00808,\"15.2-15.3\":0.00808,\"15.4\":0.02021,\"15.5\":0.06063,\"15.6\":0.21827,\"16.0\":0.03638,\"16.1\":0.08488,\"16.2\":0.24656,\"16.3\":0.18593,\"16.4\":0.00808},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0,\"6.0-6.1\":0,\"7.0-7.1\":0.04682,\"8.1-8.4\":0.00624,\"9.0-9.2\":0,\"9.3\":0.04994,\"10.0-10.2\":0,\"10.3\":0.05618,\"11.0-11.2\":0.00312,\"11.3-11.4\":0.00624,\"12.0-12.1\":0.01561,\"12.2-12.5\":0.67415,\"13.0-13.1\":0.01248,\"13.2\":0.00624,\"13.3\":0.04057,\"13.4-13.7\":0.16542,\"14.0-14.4\":0.58676,\"14.5-14.8\":1.11109,\"15.0-15.1\":0.28089,\"15.2-15.3\":0.34956,\"15.4\":0.51497,\"15.5\":0.85829,\"15.6\":3.04926,\"16.0\":3.07735,\"16.1\":6.24833,\"16.2\":6.66655,\"16.3\":3.83576,\"16.4\":0.02497},P:{\"4\":0.1342,\"20\":0.48519,\"5.0-5.4\":0.01032,\"6.2-6.4\":0.01032,\"7.2-7.4\":0.10323,\"8.2\":0,\"9.2\":0.02065,\"10.1\":0,\"11.1-11.2\":0.08259,\"12.0\":0,\"13.0\":0.08259,\"14.0\":0.03097,\"15.0\":0.02065,\"16.0\":0.07226,\"17.0\":0.04129,\"18.0\":0.07226,\"19.0\":0.91877},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.01105,\"4.2-4.3\":0.09942,\"4.4\":0,\"4.4.3-4.4.4\":0.3314},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0.00472,\"7\":0,\"8\":0.01415,\"9\":0.00472,\"10\":0.00943,\"11\":0.02358,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.0715},H:{\"0\":0.16922},L:{\"0\":52.66392},R:{_:\"0\"},M:{\"0\":0.35152},Q:{\"13.1\":0}};\n/data/regions/RS.js\u000e/module.exports={C:{\"35\":0.00387,\"50\":0.00387,\"52\":0.11229,\"56\":0.00387,\"60\":0.00387,\"66\":0.00387,\"68\":0.01549,\"73\":0.00774,\"78\":0.01936,\"81\":0.00387,\"82\":0.00774,\"83\":0.00387,\"84\":0.01549,\"88\":0.02323,\"89\":0.00774,\"91\":0.00774,\"92\":0.16262,\"93\":0.01549,\"94\":0.00387,\"95\":0.00387,\"97\":0.00774,\"99\":0.03485,\"100\":0.00774,\"101\":0.00387,\"102\":0.07357,\"103\":0.00774,\"104\":0.01936,\"105\":0.0271,\"106\":0.01936,\"107\":0.03485,\"108\":0.09293,\"109\":2.27286,\"110\":1.57203,\"111\":0.00774,_:\"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 36 37 38 39 40 41 42 43 44 45 46 47 48 49 51 53 54 55 57 58 59 61 62 63 64 65 67 69 70 71 72 74 75 76 77 79 80 85 86 87 90 96 98 112 3.5 3.6\"},D:{\"38\":0.00774,\"43\":0.00774,\"47\":0.00387,\"48\":0.01936,\"49\":0.07357,\"52\":0.0968,\"53\":0.01162,\"56\":0.00387,\"58\":0.00387,\"64\":0.00387,\"67\":0.00387,\"68\":0.03872,\"69\":0.00387,\"70\":0.00387,\"71\":0.00387,\"72\":0.01162,\"73\":0.00774,\"74\":0.00774,\"75\":0.01936,\"76\":0.01162,\"77\":0.00774,\"78\":0.00774,\"79\":0.13939,\"80\":0.01162,\"81\":0.01936,\"83\":0.01936,\"84\":0.02323,\"85\":0.03872,\"86\":0.03485,\"87\":0.06582,\"88\":0.01549,\"89\":0.03098,\"90\":0.01936,\"91\":0.01549,\"92\":0.03485,\"93\":0.00774,\"94\":0.0271,\"95\":0.01936,\"96\":0.03872,\"97\":0.04259,\"98\":0.02323,\"99\":0.04259,\"100\":0.06195,\"101\":0.01936,\"102\":0.0271,\"103\":0.10842,\"104\":0.04646,\"105\":0.05808,\"106\":0.0697,\"107\":0.15101,\"108\":0.5111,\"109\":16.00298,\"110\":8.59584,\"111\":0.00774,_:\"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 39 40 41 42 44 45 46 50 51 54 55 57 59 60 61 62 63 65 66 112 113\"},F:{\"28\":0.01549,\"46\":0.00774,\"79\":0.01162,\"85\":0.05034,\"89\":0.00387,\"93\":0.07357,\"94\":1.08029,\"95\":1.04931,_:\"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 80 81 82 83 84 86 87 88 90 91 92 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1\",\"10.0-10.1\":0},B:{\"18\":0.00774,\"92\":0.00387,\"104\":0.00387,\"107\":0.01162,\"108\":0.03872,\"109\":0.73568,\"110\":1.01446,_:\"12 13 14 15 16 17 79 80 81 83 84 85 86 87 88 89 90 91 93 94 95 96 97 98 99 100 101 102 103 105 106\"},E:{\"4\":0.00387,\"14\":0.02323,\"15\":0.00774,_:\"0 5 6 7 8 9 10 11 12 13 3.1 3.2 5.1 6.1 7.1 9.1 10.1 16.4\",\"11.1\":0.00387,\"12.1\":0.00774,\"13.1\":0.05034,\"14.1\":0.05421,\"15.1\":0.01162,\"15.2-15.3\":0.00774,\"15.4\":0.01936,\"15.5\":0.02323,\"15.6\":0.14326,\"16.0\":0.02323,\"16.1\":0.05034,\"16.2\":0.17424,\"16.3\":0.15101},G:{\"8\":0,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0.00727,\"6.0-6.1\":0,\"7.0-7.1\":0.02036,\"8.1-8.4\":0.00582,\"9.0-9.2\":0,\"9.3\":0.03344,\"10.0-10.2\":0.00436,\"10.3\":0.04798,\"11.0-11.2\":0.01599,\"11.3-11.4\":0.00582,\"12.0-12.1\":0.00436,\"12.2-12.5\":0.27772,\"13.0-13.1\":0.00727,\"13.2\":0.00291,\"13.3\":0.02036,\"13.4-13.7\":0.07561,\"14.0-14.4\":0.22101,\"14.5-14.8\":0.69066,\"15.0-15.1\":0.07561,\"15.2-15.3\":0.15267,\"15.4\":0.20647,\"15.5\":0.40858,\"15.6\":1.51217,\"16.0\":1.86404,\"16.1\":3.07233,\"16.2\":3.02144,\"16.3\":1.71719,\"16.4\":0.01018},P:{\"4\":0.0521,\"20\":0.94821,\"5.0-5.4\":0.03048,\"6.2-6.4\":0.04064,\"7.2-7.4\":0.26414,\"8.2\":0.01016,\"9.2\":0.0307,\"10.1\":0.03048,\"11.1-11.2\":0.04168,\"12.0\":0.03048,\"13.0\":0.02084,\"14.0\":0.04168,\"15.0\":0.01042,\"16.0\":0.03126,\"17.0\":0.04168,\"18.0\":0.07294,\"19.0\":1.5213},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.00497,\"4.2-4.3\":0.00414,\"4.4\":0,\"4.4.3-4.4.4\":0.02153},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"8\":0.06695,\"9\":0.01339,\"10\":0.02232,\"11\":0.21871,_:\"6 7 5.5\"},N:{\"10\":0.03712,\"11\":0.07423},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.02451},H:{\"0\":0.32489},L:{\"0\":46.03818},R:{_:\"0\"},M:{\"0\":0.25125},Q:{\"13.1\":0}};\n!/data/features/mutation-events.js\u0006\u0004module.exports={A:{A:{\"2\":\"J D E DC\",\"260\":\"F A B\"},B:{\"132\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"260\":\"C K L G M N O\"},C:{\"2\":\"EC uB I w FC GC\",\"260\":\"0 1 2 3 4 5 6 7 8 9 J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\"},D:{\"16\":\"I w J D E F A B C K L\",\"132\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"16\":\"IC 0B\",\"132\":\"I w J D E F A B C K L G JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"1\":\"C UC sB\",\"2\":\"F QC RC SC TC\",\"16\":\"B rB BC\",\"132\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\"},G:{\"16\":\"0B VC\",\"132\":\"E CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"16\":\"qC rC\",\"132\":\"uB I H sC tC CC uC vC\"},J:{\"132\":\"D A\"},K:{\"1\":\"C sB\",\"2\":\"A\",\"16\":\"B rB BC\",\"132\":\"h\"},L:{\"132\":\"H\"},M:{\"260\":\"f\"},N:{\"260\":\"A B\"},O:{\"132\":\"wC\"},P:{\"132\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"132\":\"2B\"},R:{\"132\":\"AD\"},S:{\"260\":\"BD CD\"}},B:5,C:\"Mutation events\"};\n/data/regions/MA.js\rmodule.exports={C:{\"52\":0.13229,\"55\":0.01556,\"60\":0.00389,\"65\":0.05447,\"72\":0.00778,\"78\":0.01556,\"80\":0.00389,\"81\":0.00389,\"84\":0.00778,\"91\":0.00778,\"94\":0.00778,\"99\":0.01167,\"100\":0.00389,\"101\":0.00389,\"102\":0.03891,\"103\":0.00778,\"104\":0.06615,\"105\":0.00389,\"106\":0.01167,\"107\":0.03113,\"108\":0.06615,\"109\":1.33072,\"110\":0.98442,\"111\":0.01946,_:\"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 53 54 56 57 58 59 61 62 63 64 66 67 68 69 70 71 73 74 75 76 77 79 82 83 85 86 87 88 89 90 92 93 95 96 97 98 112 3.5 3.6\"},D:{\"29\":0.00778,\"43\":0.00778,\"49\":0.08171,\"50\":0.00389,\"56\":0.01946,\"63\":0.01556,\"64\":0.00389,\"65\":0.00389,\"66\":0.00389,\"67\":0.21401,\"68\":0.01556,\"69\":0.15953,\"70\":0.00778,\"71\":0.00389,\"72\":0.02335,\"73\":0.00778,\"74\":0.01556,\"75\":0.01167,\"76\":0.01167,\"77\":0.00778,\"78\":0.00778,\"79\":0.07393,\"80\":0.01556,\"81\":0.01167,\"83\":0.05058,\"84\":0.03891,\"85\":0.0428,\"86\":0.0428,\"87\":0.0856,\"88\":0.03113,\"89\":0.01167,\"90\":0.01556,\"91\":0.01946,\"92\":0.03113,\"93\":0.01946,\"94\":0.01556,\"95\":0.01946,\"96\":0.03502,\"97\":0.03113,\"98\":0.03113,\"99\":0.03891,\"100\":0.0428,\"101\":0.03502,\"102\":0.05447,\"103\":0.13619,\"104\":0.04669,\"105\":0.28015,\"106\":0.14008,\"107\":0.1751,\"108\":0.59921,\"109\":15.85583,\"110\":9.18665,\"111\":0.01167,\"112\":0.00778,_:\"4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 30 31 32 33 34 35 36 37 38 39 40 41 42 44 45 46 47 48 51 52 53 54 55 57 58 59 60 61 62 113\"},F:{\"28\":0.00778,\"79\":0.01556,\"85\":0.01946,\"89\":0.00778,\"92\":0.00778,\"93\":0.09728,\"94\":1.15174,\"95\":0.75875,_:\"9 11 12 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 80 81 82 83 84 86 87 88 90 91 9.5-9.6 10.5 10.6 11.1 11.5 11.6 12.1\",\"10.0-10.1\":0},B:{\"18\":0.02724,\"84\":0.00778,\"85\":0.00778,\"92\":0.02724,\"105\":0.00389,\"106\":0.00389,\"107\":0.01556,\"108\":0.07393,\"109\":1.14006,\"110\":1.66924,_:\"12 13 14 15 16 17 79 80 81 83 86 87 88 89 90 91 93 94 95 96 97 98 99 100 101 102 103 104\"},E:{\"4\":0,\"13\":0.00778,\"14\":0.08949,\"15\":0.00778,_:\"0 5 6 7 8 9 10 11 12 3.1 3.2 6.1 7.1 9.1 10.1 11.1 16.4\",\"5.1\":0.07393,\"12.1\":0.01167,\"13.1\":0.06226,\"14.1\":0.10895,\"15.1\":0.02724,\"15.2-15.3\":0.01556,\"15.4\":0.03113,\"15.5\":0.04669,\"15.6\":0.18677,\"16.0\":0.0428,\"16.1\":0.07782,\"16.2\":0.16731,\"16.3\":0.14008},G:{\"8\":0.00073,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0,\"5.0-5.1\":0.00364,\"6.0-6.1\":0.00291,\"7.0-7.1\":0.03926,\"8.1-8.4\":0.00582,\"9.0-9.2\":0.00218,\"9.3\":0.05598,\"10.0-10.2\":0.00145,\"10.3\":0.03999,\"11.0-11.2\":0.00654,\"11.3-11.4\":0.01381,\"12.0-12.1\":0.01599,\"12.2-12.5\":0.29953,\"13.0-13.1\":0.00945,\"13.2\":0.00945,\"13.3\":0.03053,\"13.4-13.7\":0.09088,\"14.0-14.4\":0.17957,\"14.5-14.8\":0.33879,\"15.0-15.1\":0.11414,\"15.2-15.3\":0.1614,\"15.4\":0.20647,\"15.5\":0.33443,\"15.6\":0.67831,\"16.0\":0.81353,\"16.1\":1.16468,\"16.2\":1.23956,\"16.3\":0.76991,\"16.4\":0.00436},P:{\"4\":0.28835,\"20\":0.76208,\"5.0-5.4\":0.01042,\"6.2-6.4\":0.0206,\"7.2-7.4\":0.21627,\"8.2\":0.02044,\"9.2\":0.04119,\"10.1\":0.0217,\"11.1-11.2\":0.06179,\"12.0\":0.0206,\"13.0\":0.10298,\"14.0\":0.07209,\"15.0\":0.05149,\"16.0\":0.08239,\"17.0\":0.12358,\"18.0\":0.13388,\"19.0\":1.56535},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0.00242,\"4.2-4.3\":0.0121,\"4.4\":0,\"4.4.3-4.4.4\":0.04657},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"8\":0.05373,\"9\":0.01343,\"10\":0.01791,\"11\":0.24178,_:\"6 7 5.5\"},N:{\"10\":0.03712,\"11\":0.07423},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.15881},H:{\"0\":0.399},L:{\"0\":51.27082},R:{_:\"0\"},M:{\"0\":0.16492},Q:{\"13.1\":0}};\n/data/regions/NC.js\u0011module.exports={C:{\"2\":0,\"3\":0,\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0.03329,\"46\":0,\"47\":0,\"48\":0.01902,\"49\":0,\"50\":0,\"51\":0,\"52\":0.09986,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0,\"60\":0.00476,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0.00951,\"69\":0,\"70\":0,\"71\":0,\"72\":0.00476,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0.06657,\"79\":0,\"80\":0.00476,\"81\":0,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0.00476,\"89\":0.00476,\"90\":0,\"91\":0.06657,\"92\":0,\"93\":0,\"94\":0.03329,\"95\":0,\"96\":0,\"97\":0,\"98\":0.00951,\"99\":0,\"100\":0.00951,\"101\":0,\"102\":0.22349,\"103\":0.00951,\"104\":0.00476,\"105\":0.01902,\"106\":0.01427,\"107\":0.03329,\"108\":0.04755,\"109\":1.5216,\"110\":1.20302,\"111\":0,\"112\":0,\"3.5\":0,\"3.6\":0},D:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0,\"14\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0.00476,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0.00476,\"48\":0,\"49\":0.00476,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"59\":0.00951,\"60\":0,\"61\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0.00476,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0.00951,\"80\":0.00951,\"81\":0.06182,\"83\":0,\"84\":0.00951,\"85\":0,\"86\":0.00476,\"87\":0.00476,\"88\":0,\"89\":0.00476,\"90\":0,\"91\":0.00476,\"92\":0.00476,\"93\":0.01427,\"94\":0.01902,\"95\":0,\"96\":0.05231,\"97\":0.06182,\"98\":0.02853,\"99\":0.02378,\"100\":0.01427,\"101\":0.01427,\"102\":0.00476,\"103\":0.0428,\"104\":0.00476,\"105\":0.0428,\"106\":0.02853,\"107\":0.1902,\"108\":0.19496,\"109\":6.51435,\"110\":4.48397,\"111\":0,\"112\":0.00476,\"113\":0},F:{\"9\":0,\"11\":0,\"12\":0,\"15\":0,\"16\":0,\"17\":0,\"18\":0,\"19\":0,\"20\":0,\"21\":0,\"22\":0,\"23\":0,\"24\":0,\"25\":0,\"26\":0,\"27\":0,\"28\":0,\"29\":0,\"30\":0,\"31\":0,\"32\":0,\"33\":0,\"34\":0,\"35\":0,\"36\":0,\"37\":0,\"38\":0,\"39\":0,\"40\":0,\"41\":0,\"42\":0,\"43\":0,\"44\":0,\"45\":0,\"46\":0,\"47\":0,\"48\":0,\"49\":0,\"50\":0,\"51\":0,\"52\":0,\"53\":0,\"54\":0,\"55\":0,\"56\":0,\"57\":0,\"58\":0,\"60\":0,\"62\":0,\"63\":0,\"64\":0,\"65\":0,\"66\":0,\"67\":0.00476,\"68\":0,\"69\":0,\"70\":0,\"71\":0,\"72\":0,\"73\":0,\"74\":0,\"75\":0,\"76\":0,\"77\":0,\"78\":0,\"79\":0,\"80\":0,\"81\":0.00476,\"82\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0,\"90\":0.00951,\"91\":0,\"92\":0,\"93\":0.00951,\"94\":0.64193,\"95\":0.18069,\"9.5-9.6\":0,\"10.0-10.1\":0,\"10.5\":0,\"10.6\":0,\"11.1\":0,\"11.5\":0,\"11.6\":0,\"12.1\":0},B:{\"12\":0,\"13\":0,\"14\":0.00476,\"15\":0,\"16\":0,\"17\":0.00476,\"18\":0.00951,\"79\":0,\"80\":0,\"81\":0,\"83\":0,\"84\":0,\"85\":0,\"86\":0,\"87\":0,\"88\":0,\"89\":0.00476,\"90\":0.00476,\"91\":0,\"92\":0.00476,\"93\":0.00476,\"94\":0,\"95\":0,\"96\":0,\"97\":0,\"98\":0,\"99\":0.00476,\"100\":0.01427,\"101\":0.00476,\"102\":0,\"103\":0.01902,\"104\":0.00951,\"105\":0.1379,\"106\":0.01427,\"107\":0.01427,\"108\":0.05706,\"109\":0.81786,\"110\":1.47405},E:{\"4\":0,\"5\":0,\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0,\"12\":0,\"13\":0.02378,\"14\":0.03329,\"15\":0.01427,_:\"0\",\"3.1\":0,\"3.2\":0,\"5.1\":0,\"6.1\":0,\"7.1\":0,\"9.1\":0,\"10.1\":0.00476,\"11.1\":0,\"12.1\":0.02378,\"13.1\":0.07133,\"14.1\":0.16167,\"15.1\":0.01427,\"15.2-15.3\":0.01427,\"15.4\":0.06182,\"15.5\":0.07608,\"15.6\":0.46124,\"16.0\":0.09035,\"16.1\":0.25677,\"16.2\":0.46124,\"16.3\":0.41844,\"16.4\":0},G:{\"8\":0.00501,\"3.2\":0,\"4.0-4.1\":0,\"4.2-4.3\":0.01003,\"5.0-5.1\":0,\"6.0-6.1\":0.01003,\"7.0-7.1\":0.01003,\"8.1-8.4\":0.00251,\"9.0-9.2\":0.00251,\"9.3\":0.07018,\"10.0-10.2\":0.00251,\"10.3\":0.1579,\"11.0-11.2\":0.11529,\"11.3-11.4\":0.43109,\"12.0-12.1\":0.00501,\"12.2-12.5\":0.60402,\"13.0-13.1\":0.01253,\"13.2\":0.00251,\"13.3\":0.18045,\"13.4-13.7\":0.08271,\"14.0-14.4\":0.22557,\"14.5-14.8\":1.10278,\"15.0-15.1\":0.29324,\"15.2-15.3\":0.21554,\"15.4\":0.52883,\"15.5\":0.6341,\"15.6\":1.85216,\"16.0\":1.79702,\"16.1\":6.10036,\"16.2\":6.58658,\"16.3\":2.40355,\"16.4\":0.01253},P:{\"4\":0.06352,\"20\":1.1962,\"5.0-5.4\":0,\"6.2-6.4\":0,\"7.2-7.4\":0.57164,\"8.2\":0,\"9.2\":0.01059,\"10.1\":0,\"11.1-11.2\":0.06352,\"12.0\":0.03176,\"13.0\":0.27523,\"14.0\":0.06352,\"15.0\":0.06352,\"16.0\":0.21172,\"17.0\":0.04234,\"18.0\":0.12703,\"19.0\":3.65211},I:{\"0\":0,\"3\":0,\"4\":0,\"2.1\":0,\"2.2\":0,\"2.3\":0,\"4.1\":0,\"4.2-4.3\":0,\"4.4\":0,\"4.4.3-4.4.4\":0.24986},K:{_:\"0 10 11 12 11.1 11.5 12.1\"},A:{\"6\":0,\"7\":0,\"8\":0,\"9\":0,\"10\":0,\"11\":0.02853,\"5.5\":0},N:{\"10\":0,\"11\":0},S:{\"2.5\":0,_:\"3.0-3.1\"},J:{\"7\":0,\"10\":0},O:{\"0\":0.02623},H:{\"0\":0.04469},L:{\"0\":44.50865},R:{_:\"0\"},M:{\"0\":0.54548},Q:{\"13.1\":0.01574}};\n /data/features/pointer-events.js\u0005module.exports={A:{A:{\"1\":\"B\",\"2\":\"J D E F A DC\"},B:{\"1\":\"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB GC\",\"2\":\"EC uB FC\"},D:{\"1\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"I w J D E F A B C K L G JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"IC 0B\"},F:{\"1\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"F B C QC RC SC TC rB BC UC sB\"},G:{\"1\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"1\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"1\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"1\":\"B\",\"2\":\"A\"},O:{\"1\":\"wC\"},P:{\"1\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:7,C:\"CSS pointer-events (for HTML)\"};\n/data/features/forms.js\u0005module.exports={A:{A:{\"2\":\"DC\",\"4\":\"A B\",\"8\":\"J D E F\"},B:{\"1\":\"M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"4\":\"C K L G\"},C:{\"4\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"8\":\"EC uB FC GC\"},D:{\"1\":\"wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"4\":\"0 1 2 3 4 5 6 7 8 9 I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB\"},E:{\"4\":\"I w J D E F A B C K L G JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"8\":\"IC 0B\"},F:{\"1\":\"F B C TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e QC RC SC TC rB BC UC sB\",\"4\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB\"},G:{\"2\":\"0B\",\"4\":\"E VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC CC\",\"4\":\"uC vC\"},J:{\"2\":\"D\",\"4\":\"A\"},K:{\"1\":\"A B C h rB BC sB\"},L:{\"1\":\"H\"},M:{\"4\":\"f\"},N:{\"4\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"4\":\"I xC yC zC\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"4\":\"BD CD\"}},B:1,C:\"HTML5 form features\"};\n\"/data/features/webkit-user-drag.js\u0005module.exports={A:{A:{\"2\":\"J D E F A B DC\"},B:{\"2\":\"C K L G M N O\",\"132\":\"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\"},C:{\"2\":\"0 1 2 3 4 5 6 7 8 9 EC uB I w J D E F A B C K L G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB FC GC\"},D:{\"16\":\"I w J D E F A B C K L G\",\"132\":\"0 1 2 3 4 5 6 7 8 9 M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\"},E:{\"1\":\"I w J D E F A B C K L G IC 0B JC KC LC MC 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\"},F:{\"2\":\"F B C QC RC SC TC rB BC UC sB\",\"132\":\"0 1 2 3 4 5 6 7 8 9 G M N O x g y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\"},G:{\"2\":\"E 0B VC CC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\"},H:{\"2\":\"pC\"},I:{\"2\":\"uB I H qC rC sC tC CC uC vC\"},J:{\"2\":\"D A\"},K:{\"2\":\"A B C h rB BC sB\"},L:{\"2\":\"H\"},M:{\"2\":\"f\"},N:{\"2\":\"A B\"},O:{\"2\":\"wC\"},P:{\"2\":\"I g xC yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\"},Q:{\"2\":\"2B\"},R:{\"2\":\"AD\"},S:{\"2\":\"BD CD\"}},B:7,C:\"CSS -webkit-user-drag property\"};\n/data/features/css-grid.js\u0006*module.exports={A:{A:{\"2\":\"J D E DC\",\"8\":\"F\",\"292\":\"A B\"},B:{\"1\":\"M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H\",\"292\":\"C K L G\"},C:{\"1\":\"VB WB XB YB ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB\",\"2\":\"EC uB I w J D E F A B C K L G M N O FC GC\",\"8\":\"0 1 2 3 4 5 6 7 8 9 x g y z AB BB CB DB EB FB GB\",\"584\":\"HB IB JB KB LB MB NB OB PB QB RB SB\",\"1025\":\"TB UB\"},D:{\"1\":\"ZB vB aB wB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u v f H yB zB HC\",\"2\":\"0 1 I w J D E F A B C K L G M N O x g y z\",\"8\":\"2 3 4 5\",\"200\":\"6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB\",\"1025\":\"YB\"},E:{\"1\":\"B C K L G 1B rB sB 2B NC OC 3B 4B 5B 6B tB 7B 8B 9B AC PC\",\"2\":\"I w IC 0B JC\",\"8\":\"J D E F A KC LC MC\"},F:{\"1\":\"LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB h mB nB oB pB qB P Q R xB S T U V W X Y Z a b c d e\",\"2\":\"0 1 2 3 4 F B C G M N O x g y z QC RC SC TC rB BC UC sB\",\"200\":\"5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB\"},G:{\"1\":\"dC eC fC gC hC iC jC kC lC mC nC oC 3B 4B 5B 6B tB 7B 8B 9B AC\",\"2\":\"0B VC CC WC\",\"8\":\"E XC YC ZC aC bC cC\"},H:{\"2\":\"pC\"},I:{\"1\":\"H\",\"2\":\"uB I qC rC sC tC\",\"8\":\"CC uC vC\"},J:{\"2\":\"D A\"},K:{\"1\":\"h\",\"2\":\"A B C rB BC sB\"},L:{\"1\":\"H\"},M:{\"1\":\"f\"},N:{\"292\":\"A B\"},O:{\"1\":\"wC\"},P:{\"1\":\"g yC zC 0C 1C 1B 2C 3C 4C 5C 6C tB 7C 8C 9C\",\"2\":\"xC\",\"8\":\"I\"},Q:{\"1\":\"2B\"},R:{\"1\":\"AD\"},S:{\"1\":\"BD CD\"}},B:4,C:\"CSS Grid Layout (level 1)\"};\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/Y2hhbGtAMi40LjI=",
    "content": "/package.json\u0004{\n\t\"name\": \"chalk\",\n\t\"version\": \"2.4.2\",\n\t\"description\": \"Terminal string styling done right\",\n\t\"license\": \"MIT\",\n\t\"repository\": \"chalk/chalk\",\n\t\"engines\": {\n\t\t\"node\": \">=4\"\n\t},\n\t\"scripts\": {\n\t\t\"test\": \"xo && tsc --project types && flow --max-warnings=0 && nyc ava\",\n\t\t\"bench\": \"matcha benchmark.js\",\n\t\t\"coveralls\": \"nyc report --reporter=text-lcov | coveralls\"\n\t},\n\t\"files\": [\n\t\t\"index.js\",\n\t\t\"templates.js\",\n\t\t\"types/index.d.ts\",\n\t\t\"index.js.flow\"\n\t],\n\t\"keywords\": [\n\t\t\"color\",\n\t\t\"colour\",\n\t\t\"colors\",\n\t\t\"terminal\",\n\t\t\"console\",\n\t\t\"cli\",\n\t\t\"string\",\n\t\t\"str\",\n\t\t\"ansi\",\n\t\t\"style\",\n\t\t\"styles\",\n\t\t\"tty\",\n\t\t\"formatting\",\n\t\t\"rgb\",\n\t\t\"256\",\n\t\t\"shell\",\n\t\t\"xterm\",\n\t\t\"log\",\n\t\t\"logging\",\n\t\t\"command-line\",\n\t\t\"text\"\n\t],\n\t\"dependencies\": {\n\t\t\"ansi-styles\": \"^3.2.1\",\n\t\t\"escape-string-regexp\": \"^1.0.5\",\n\t\t\"supports-color\": \"^5.3.0\"\n\t},\n\t\"devDependencies\": {\n\t\t\"ava\": \"*\",\n\t\t\"coveralls\": \"^3.0.0\",\n\t\t\"execa\": \"^0.9.0\",\n\t\t\"flow-bin\": \"^0.68.0\",\n\t\t\"import-fresh\": \"^2.0.0\",\n\t\t\"matcha\": \"^0.7.0\",\n\t\t\"nyc\": \"^11.0.2\",\n\t\t\"resolve-from\": \"^4.0.0\",\n\t\t\"typescript\": \"^2.5.3\",\n\t\t\"xo\": \"*\"\n\t},\n\t\"types\": \"types/index.d.ts\",\n\t\"xo\": {\n\t\t\"envs\": [\n\t\t\t\"node\",\n\t\t\t\"mocha\"\n\t\t],\n\t\t\"ignores\": [\n\t\t\t\"test/_flow.js\"\n\t\t]\n\t}\n}\n/license\u0004UMIT License\n\nCopyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)\n\nPermission 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:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE 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.\n/readme.md*\u0016<h1 align=\"center\">\n\t<br>\n\t<br>\n\t<img width=\"320\" src=\"media/logo.svg\" alt=\"Chalk\">\n\t<br>\n\t<br>\n\t<br>\n</h1>\n\n> Terminal string styling done right\n\n[![Build Status](https://travis-ci.org/chalk/chalk.svg?branch=master)](https://travis-ci.org/chalk/chalk) [![Coverage Status](https://coveralls.io/repos/github/chalk/chalk/badge.svg?branch=master)](https://coveralls.io/github/chalk/chalk?branch=master) [![](https://img.shields.io/badge/unicorn-approved-ff69b4.svg)](https://www.youtube.com/watch?v=9auOCbH5Ns4) [![XO code style](https://img.shields.io/badge/code_style-XO-5ed9c7.svg)](https://github.com/xojs/xo) [![Mentioned in Awesome Node.js](https://awesome.re/mentioned-badge.svg)](https://github.com/sindresorhus/awesome-nodejs)\n\n### [See what's new in Chalk 2](https://github.com/chalk/chalk/releases/tag/v2.0.0)\n\n<img src=\"https://cdn.rawgit.com/chalk/ansi-styles/8261697c95bf34b6c7767e2cbe9941a851d59385/screenshot.svg\" alt=\"\" width=\"900\">\n\n\n## Highlights\n\n- Expressive API\n- Highly performant\n- Ability to nest styles\n- [256/Truecolor color support](#256-and-truecolor-color-support)\n- Auto-detects color support\n- Doesn't extend `String.prototype`\n- Clean and focused\n- Actively maintained\n- [Used by ~23,000 packages](https://www.npmjs.com/browse/depended/chalk) as of December 31, 2017\n\n\n## Install\n\n```console\n$ npm install chalk\n```\n\n<a href=\"https://www.patreon.com/sindresorhus\">\n\t<img src=\"https://c5.patreon.com/external/logo/become_a_patron_button@2x.png\" width=\"160\">\n</a>\n\n\n## Usage\n\n```js\nconst chalk = require('chalk');\n\nconsole.log(chalk.blue('Hello world!'));\n```\n\nChalk comes with an easy to use composable API where you just chain and nest the styles you want.\n\n```js\nconst chalk = require('chalk');\nconst log = console.log;\n\n// Combine styled and normal strings\nlog(chalk.blue('Hello') + ' World' + chalk.red('!'));\n\n// Compose multiple styles using the chainable API\nlog(chalk.blue.bgRed.bold('Hello world!'));\n\n// Pass in multiple arguments\nlog(chalk.blue('Hello', 'World!', 'Foo', 'bar', 'biz', 'baz'));\n\n// Nest styles\nlog(chalk.red('Hello', chalk.underline.bgBlue('world') + '!'));\n\n// Nest styles of the same type even (color, underline, background)\nlog(chalk.green(\n\t'I am a green line ' +\n\tchalk.blue.underline.bold('with a blue substring') +\n\t' that becomes green again!'\n));\n\n// ES2015 template literal\nlog(`\nCPU: ${chalk.red('90%')}\nRAM: ${chalk.green('40%')}\nDISK: ${chalk.yellow('70%')}\n`);\n\n// ES2015 tagged template literal\nlog(chalk`\nCPU: {red ${cpu.totalPercent}%}\nRAM: {green ${ram.used / ram.total * 100}%}\nDISK: {rgb(255,131,0) ${disk.used / disk.total * 100}%}\n`);\n\n// Use RGB colors in terminal emulators that support it.\nlog(chalk.keyword('orange')('Yay for orange colored text!'));\nlog(chalk.rgb(123, 45, 67).underline('Underlined reddish color'));\nlog(chalk.hex('#DEADED').bold('Bold gray!'));\n```\n\nEasily define your own themes:\n\n```js\nconst chalk = require('chalk');\n\nconst error = chalk.bold.red;\nconst warning = chalk.keyword('orange');\n\nconsole.log(error('Error!'));\nconsole.log(warning('Warning!'));\n```\n\nTake advantage of console.log [string substitution](https://nodejs.org/docs/latest/api/console.html#console_console_log_data_args):\n\n```js\nconst name = 'Sindre';\nconsole.log(chalk.green('Hello %s'), name);\n//=> 'Hello Sindre'\n```\n\n\n## API\n\n### chalk.`<style>[.<style>...](string, [string...])`\n\nExample: `chalk.red.bold.underline('Hello', 'world');`\n\nChain [styles](#styles) and call the last one as a method with a string argument. Order doesn't matter, and later styles take precedent in case of a conflict. This simply means that `chalk.red.yellow.green` is equivalent to `chalk.green`.\n\nMultiple arguments will be separated by space.\n\n### chalk.enabled\n\nColor support is automatically detected, as is the level (see `chalk.level`). However, if you'd like to simply enable/disable Chalk, you can do so via the `.enabled` property.\n\nChalk is enabled by default unless explicitly disabled via the constructor or `chalk.level` is `0`.\n\nIf you need to change this in a reusable module, create a new instance:\n\n```js\nconst ctx = new chalk.constructor({enabled: false});\n```\n\n### chalk.level\n\nColor support is automatically detected, but you can override it by setting the `level` property. You should however only do this in your own code as it applies globally to all Chalk consumers.\n\nIf you need to change this in a reusable module, create a new instance:\n\n```js\nconst ctx = new chalk.constructor({level: 0});\n```\n\nLevels are as follows:\n\n0. All colors disabled\n1. Basic color support (16 colors)\n2. 256 color support\n3. Truecolor support (16 million colors)\n\n### chalk.supportsColor\n\nDetect whether the terminal [supports color](https://github.com/chalk/supports-color). Used internally and handled for you, but exposed for convenience.\n\nCan be overridden by the user with the flags `--color` and `--no-color`. For situations where using `--color` is not possible, add the environment variable `FORCE_COLOR=1` to forcefully enable color or `FORCE_COLOR=0` to forcefully disable. The use of `FORCE_COLOR` overrides all other color support checks.\n\nExplicit 256/Truecolor mode can be enabled using the `--color=256` and `--color=16m` flags, respectively.\n\n\n## Styles\n\n### Modifiers\n\n- `reset`\n- `bold`\n- `dim`\n- `italic` *(Not widely supported)*\n- `underline`\n- `inverse`\n- `hidden`\n- `strikethrough` *(Not widely supported)*\n- `visible` (Text is emitted only if enabled)\n\n### Colors\n\n- `black`\n- `red`\n- `green`\n- `yellow`\n- `blue` *(On Windows the bright version is used since normal blue is illegible)*\n- `magenta`\n- `cyan`\n- `white`\n- `gray` (\"bright black\")\n- `redBright`\n- `greenBright`\n- `yellowBright`\n- `blueBright`\n- `magentaBright`\n- `cyanBright`\n- `whiteBright`\n\n### Background colors\n\n- `bgBlack`\n- `bgRed`\n- `bgGreen`\n- `bgYellow`\n- `bgBlue`\n- `bgMagenta`\n- `bgCyan`\n- `bgWhite`\n- `bgBlackBright`\n- `bgRedBright`\n- `bgGreenBright`\n- `bgYellowBright`\n- `bgBlueBright`\n- `bgMagentaBright`\n- `bgCyanBright`\n- `bgWhiteBright`\n\n\n## Tagged template literal\n\nChalk can be used as a [tagged template literal](http://exploringjs.com/es6/ch_template-literals.html#_tagged-template-literals).\n\n```js\nconst chalk = require('chalk');\n\nconst miles = 18;\nconst calculateFeet = miles => miles * 5280;\n\nconsole.log(chalk`\n  There are {bold 5280 feet} in a mile.\n  In {bold ${miles} miles}, there are {green.bold ${calculateFeet(miles)} feet}.\n`);\n```\n\nBlocks are delimited by an opening curly brace (`{`), a style, some content, and a closing curly brace (`}`).\n\nTemplate styles are chained exactly like normal Chalk styles. The following two statements are equivalent:\n\n```js\nconsole.log(chalk.bold.rgb(10, 100, 200)('Hello!'));\nconsole.log(chalk`{bold.rgb(10,100,200) Hello!}`);\n```\n\nNote that function styles (`rgb()`, `hsl()`, `keyword()`, etc.) may not contain spaces between parameters.\n\nAll interpolated values (`` chalk`${foo}` ``) are converted to strings via the `.toString()` method. All curly braces (`{` and `}`) in interpolated value strings are escaped.\n\n\n## 256 and Truecolor color support\n\nChalk supports 256 colors and [Truecolor](https://gist.github.com/XVilka/8346728) (16 million colors) on supported terminal apps.\n\nColors are downsampled from 16 million RGB values to an ANSI color format that is supported by the terminal emulator (or by specifying `{level: n}` as a Chalk option). For example, Chalk configured to run at level 1 (basic color support) will downsample an RGB value of #FF0000 (red) to 31 (ANSI escape for red).\n\nExamples:\n\n- `chalk.hex('#DEADED').underline('Hello, world!')`\n- `chalk.keyword('orange')('Some orange text')`\n- `chalk.rgb(15, 100, 204).inverse('Hello!')`\n\nBackground versions of these models are prefixed with `bg` and the first level of the module capitalized (e.g. `keyword` for foreground colors and `bgKeyword` for background colors).\n\n- `chalk.bgHex('#DEADED').underline('Hello, world!')`\n- `chalk.bgKeyword('orange')('Some orange text')`\n- `chalk.bgRgb(15, 100, 204).inverse('Hello!')`\n\nThe following color models can be used:\n\n- [`rgb`](https://en.wikipedia.org/wiki/RGB_color_model) - Example: `chalk.rgb(255, 136, 0).bold('Orange!')`\n- [`hex`](https://en.wikipedia.org/wiki/Web_colors#Hex_triplet) - Example: `chalk.hex('#FF8800').bold('Orange!')`\n- [`keyword`](https://www.w3.org/wiki/CSS/Properties/color/keywords) (CSS keywords) - Example: `chalk.keyword('orange').bold('Orange!')`\n- [`hsl`](https://en.wikipedia.org/wiki/HSL_and_HSV) - Example: `chalk.hsl(32, 100, 50).bold('Orange!')`\n- [`hsv`](https://en.wikipedia.org/wiki/HSL_and_HSV) - Example: `chalk.hsv(32, 100, 100).bold('Orange!')`\n- [`hwb`](https://en.wikipedia.org/wiki/HWB_color_model)  - Example: `chalk.hwb(32, 0, 50).bold('Orange!')`\n- `ansi16`\n- `ansi256`\n\n\n## Windows\n\nIf you're on Windows, do yourself a favor and use [`cmder`](http://cmder.net/) instead of `cmd.exe`.\n\n\n## Origin story\n\n[colors.js](https://github.com/Marak/colors.js) used to be the most popular string styling module, but it has serious deficiencies like extending `String.prototype` which causes all kinds of [problems](https://github.com/yeoman/yo/issues/68) and the package is unmaintained. Although there are other packages, they either do too much or not enough. Chalk is a clean and focused alternative.\n\n\n## Related\n\n- [chalk-cli](https://github.com/chalk/chalk-cli) - CLI for this module\n- [ansi-styles](https://github.com/chalk/ansi-styles) - ANSI escape codes for styling strings in the terminal\n- [supports-color](https://github.com/chalk/supports-color) - Detect whether a terminal supports color\n- [strip-ansi](https://github.com/chalk/strip-ansi) - Strip ANSI escape codes\n- [strip-ansi-stream](https://github.com/chalk/strip-ansi-stream) - Strip ANSI escape codes from a stream\n- [has-ansi](https://github.com/chalk/has-ansi) - Check if a string has ANSI escape codes\n- [ansi-regex](https://github.com/chalk/ansi-regex) - Regular expression for matching ANSI escape codes\n- [wrap-ansi](https://github.com/chalk/wrap-ansi) - Wordwrap a string with ANSI escape codes\n- [slice-ansi](https://github.com/chalk/slice-ansi) - Slice a string with ANSI escape codes\n- [color-convert](https://github.com/qix-/color-convert) - Converts colors between different models\n- [chalk-animation](https://github.com/bokub/chalk-animation) - Animate strings in the terminal\n- [gradient-string](https://github.com/bokub/gradient-string) - Apply color gradients to strings\n- [chalk-pipe](https://github.com/LitoMore/chalk-pipe) - Create chalk style schemes with simpler style strings\n- [terminal-link](https://github.com/sindresorhus/terminal-link) - Create clickable links in the terminal\n\n\n## Maintainers\n\n- [Sindre Sorhus](https://github.com/sindresorhus)\n- [Josh Junon](https://github.com/qix-)\n\n\n## License\n\nMIT\n/templates.js\f='use strict';\nconst TEMPLATE_REGEX = /(?:\\\\(u[a-f\\d]{4}|x[a-f\\d]{2}|.))|(?:\\{(~)?(\\w+(?:\\([^)]*\\))?(?:\\.\\w+(?:\\([^)]*\\))?)*)(?:[ \\t]|(?=\\r?\\n)))|(\\})|((?:.|[\\r\\n\\f])+?)/gi;\nconst STYLE_REGEX = /(?:^|\\.)(\\w+)(?:\\(([^)]*)\\))?/g;\nconst STRING_REGEX = /^(['\"])((?:\\\\.|(?!\\1)[^\\\\])*)\\1$/;\nconst ESCAPE_REGEX = /\\\\(u[a-f\\d]{4}|x[a-f\\d]{2}|.)|([^\\\\])/gi;\n\nconst ESCAPES = new Map([\n\t['n', '\\n'],\n\t['r', '\\r'],\n\t['t', '\\t'],\n\t['b', '\\b'],\n\t['f', '\\f'],\n\t['v', '\\v'],\n\t['0', '\\0'],\n\t['\\\\', '\\\\'],\n\t['e', '\\u001B'],\n\t['a', '\\u0007']\n]);\n\nfunction unescape(c) {\n\tif ((c[0] === 'u' && c.length === 5) || (c[0] === 'x' && c.length === 3)) {\n\t\treturn String.fromCharCode(parseInt(c.slice(1), 16));\n\t}\n\n\treturn ESCAPES.get(c) || c;\n}\n\nfunction parseArguments(name, args) {\n\tconst results = [];\n\tconst chunks = args.trim().split(/\\s*,\\s*/g);\n\tlet matches;\n\n\tfor (const chunk of chunks) {\n\t\tif (!isNaN(chunk)) {\n\t\t\tresults.push(Number(chunk));\n\t\t} else if ((matches = chunk.match(STRING_REGEX))) {\n\t\t\tresults.push(matches[2].replace(ESCAPE_REGEX, (m, escape, chr) => escape ? unescape(escape) : chr));\n\t\t} else {\n\t\t\tthrow new Error(`Invalid Chalk template style argument: ${chunk} (in style '${name}')`);\n\t\t}\n\t}\n\n\treturn results;\n}\n\nfunction parseStyle(style) {\n\tSTYLE_REGEX.lastIndex = 0;\n\n\tconst results = [];\n\tlet matches;\n\n\twhile ((matches = STYLE_REGEX.exec(style)) !== null) {\n\t\tconst name = matches[1];\n\n\t\tif (matches[2]) {\n\t\t\tconst args = parseArguments(name, matches[2]);\n\t\t\tresults.push([name].concat(args));\n\t\t} else {\n\t\t\tresults.push([name]);\n\t\t}\n\t}\n\n\treturn results;\n}\n\nfunction buildStyle(chalk, styles) {\n\tconst enabled = {};\n\n\tfor (const layer of styles) {\n\t\tfor (const style of layer.styles) {\n\t\t\tenabled[style[0]] = layer.inverse ? null : style.slice(1);\n\t\t}\n\t}\n\n\tlet current = chalk;\n\tfor (const styleName of Object.keys(enabled)) {\n\t\tif (Array.isArray(enabled[styleName])) {\n\t\t\tif (!(styleName in current)) {\n\t\t\t\tthrow new Error(`Unknown Chalk style: ${styleName}`);\n\t\t\t}\n\n\t\t\tif (enabled[styleName].length > 0) {\n\t\t\t\tcurrent = current[styleName].apply(current, enabled[styleName]);\n\t\t\t} else {\n\t\t\t\tcurrent = current[styleName];\n\t\t\t}\n\t\t}\n\t}\n\n\treturn current;\n}\n\nmodule.exports = (chalk, tmp) => {\n\tconst styles = [];\n\tconst chunks = [];\n\tlet chunk = [];\n\n\t// eslint-disable-next-line max-params\n\ttmp.replace(TEMPLATE_REGEX, (m, escapeChar, inverse, style, close, chr) => {\n\t\tif (escapeChar) {\n\t\t\tchunk.push(unescape(escapeChar));\n\t\t} else if (style) {\n\t\t\tconst str = chunk.join('');\n\t\t\tchunk = [];\n\t\t\tchunks.push(styles.length === 0 ? str : buildStyle(chalk, styles)(str));\n\t\t\tstyles.push({inverse, styles: parseStyle(style)});\n\t\t} else if (close) {\n\t\t\tif (styles.length === 0) {\n\t\t\t\tthrow new Error('Found extraneous } in Chalk template literal');\n\t\t\t}\n\n\t\t\tchunks.push(buildStyle(chalk, styles)(chunk.join('')));\n\t\t\tchunk = [];\n\t\t\tstyles.pop();\n\t\t} else {\n\t\t\tchunk.push(chr);\n\t\t}\n\t});\n\n\tchunks.push(chunk.join(''));\n\n\tif (styles.length > 0) {\n\t\tconst errMsg = `Chalk template literal is missing ${styles.length} closing bracket${styles.length === 1 ? '' : 's'} (\\`}\\`)`;\n\t\tthrow new Error(errMsg);\n\t}\n\n\treturn chunks.join('');\n};\n/types/index.d.ts\t1// Type definitions for Chalk\n// Definitions by: Thomas Sauer <https://github.com/t-sauer>\n\nexport const enum Level {\n\tNone = 0,\n\tBasic = 1,\n\tAnsi256 = 2,\n\tTrueColor = 3\n}\n\nexport interface ChalkOptions {\n\tenabled?: boolean;\n\tlevel?: Level;\n}\n\nexport interface ChalkConstructor {\n\tnew (options?: ChalkOptions): Chalk;\n\t(options?: ChalkOptions): Chalk;\n}\n\nexport interface ColorSupport {\n\tlevel: Level;\n\thasBasic: boolean;\n\thas256: boolean;\n\thas16m: boolean;\n}\n\nexport interface Chalk {\n\t(...text: string[]): string;\n\t(text: TemplateStringsArray, ...placeholders: string[]): string;\n\tconstructor: ChalkConstructor;\n\tenabled: boolean;\n\tlevel: Level;\n\trgb(r: number, g: number, b: number): this;\n\thsl(h: number, s: number, l: number): this;\n\thsv(h: number, s: number, v: number): this;\n\thwb(h: number, w: number, b: number): this;\n\tbgHex(color: string): this;\n\tbgKeyword(color: string): this;\n\tbgRgb(r: number, g: number, b: number): this;\n\tbgHsl(h: number, s: number, l: number): this;\n\tbgHsv(h: number, s: number, v: number): this;\n\tbgHwb(h: number, w: number, b: number): this;\n\thex(color: string): this;\n\tkeyword(color: string): this;\n\n\treadonly reset: this;\n\treadonly bold: this;\n\treadonly dim: this;\n\treadonly italic: this;\n\treadonly underline: this;\n\treadonly inverse: this;\n\treadonly hidden: this;\n\treadonly strikethrough: this;\n\n\treadonly visible: this;\n\n\treadonly black: this;\n\treadonly red: this;\n\treadonly green: this;\n\treadonly yellow: this;\n\treadonly blue: this;\n\treadonly magenta: this;\n\treadonly cyan: this;\n\treadonly white: this;\n\treadonly gray: this;\n\treadonly grey: this;\n\treadonly blackBright: this;\n\treadonly redBright: this;\n\treadonly greenBright: this;\n\treadonly yellowBright: this;\n\treadonly blueBright: this;\n\treadonly magentaBright: this;\n\treadonly cyanBright: this;\n\treadonly whiteBright: this;\n\n\treadonly bgBlack: this;\n\treadonly bgRed: this;\n\treadonly bgGreen: this;\n\treadonly bgYellow: this;\n\treadonly bgBlue: this;\n\treadonly bgMagenta: this;\n\treadonly bgCyan: this;\n\treadonly bgWhite: this;\n\treadonly bgBlackBright: this;\n\treadonly bgRedBright: this;\n\treadonly bgGreenBright: this;\n\treadonly bgYellowBright: this;\n\treadonly bgBlueBright: this;\n\treadonly bgMagentaBright: this;\n\treadonly bgCyanBright: this;\n\treadonly bgWhiteBright: this;\n}\n\ndeclare const chalk: Chalk & { supportsColor: ColorSupport };\n\nexport default chalk\n/index.js\u0019''use strict';\nconst escapeStringRegexp = require('escape-string-regexp');\nconst ansiStyles = require('ansi-styles');\nconst stdoutColor = require('supports-color').stdout;\n\nconst template = require('./templates.js');\n\nconst isSimpleWindowsTerm = process.platform === 'win32' && !(process.env.TERM || '').toLowerCase().startsWith('xterm');\n\n// `supportsColor.level` → `ansiStyles.color[name]` mapping\nconst levelMapping = ['ansi', 'ansi', 'ansi256', 'ansi16m'];\n\n// `color-convert` models to exclude from the Chalk API due to conflicts and such\nconst skipModels = new Set(['gray']);\n\nconst styles = Object.create(null);\n\nfunction applyOptions(obj, options) {\n\toptions = options || {};\n\n\t// Detect level if not set manually\n\tconst scLevel = stdoutColor ? stdoutColor.level : 0;\n\tobj.level = options.level === undefined ? scLevel : options.level;\n\tobj.enabled = 'enabled' in options ? options.enabled : obj.level > 0;\n}\n\nfunction Chalk(options) {\n\t// We check for this.template here since calling `chalk.constructor()`\n\t// by itself will have a `this` of a previously constructed chalk object\n\tif (!this || !(this instanceof Chalk) || this.template) {\n\t\tconst chalk = {};\n\t\tapplyOptions(chalk, options);\n\n\t\tchalk.template = function () {\n\t\t\tconst args = [].slice.call(arguments);\n\t\t\treturn chalkTag.apply(null, [chalk.template].concat(args));\n\t\t};\n\n\t\tObject.setPrototypeOf(chalk, Chalk.prototype);\n\t\tObject.setPrototypeOf(chalk.template, chalk);\n\n\t\tchalk.template.constructor = Chalk;\n\n\t\treturn chalk.template;\n\t}\n\n\tapplyOptions(this, options);\n}\n\n// Use bright blue on Windows as the normal blue color is illegible\nif (isSimpleWindowsTerm) {\n\tansiStyles.blue.open = '\\u001B[94m';\n}\n\nfor (const key of Object.keys(ansiStyles)) {\n\tansiStyles[key].closeRe = new RegExp(escapeStringRegexp(ansiStyles[key].close), 'g');\n\n\tstyles[key] = {\n\t\tget() {\n\t\t\tconst codes = ansiStyles[key];\n\t\t\treturn build.call(this, this._styles ? this._styles.concat(codes) : [codes], this._empty, key);\n\t\t}\n\t};\n}\n\nstyles.visible = {\n\tget() {\n\t\treturn build.call(this, this._styles || [], true, 'visible');\n\t}\n};\n\nansiStyles.color.closeRe = new RegExp(escapeStringRegexp(ansiStyles.color.close), 'g');\nfor (const model of Object.keys(ansiStyles.color.ansi)) {\n\tif (skipModels.has(model)) {\n\t\tcontinue;\n\t}\n\n\tstyles[model] = {\n\t\tget() {\n\t\t\tconst level = this.level;\n\t\t\treturn function () {\n\t\t\t\tconst open = ansiStyles.color[levelMapping[level]][model].apply(null, arguments);\n\t\t\t\tconst codes = {\n\t\t\t\t\topen,\n\t\t\t\t\tclose: ansiStyles.color.close,\n\t\t\t\t\tcloseRe: ansiStyles.color.closeRe\n\t\t\t\t};\n\t\t\t\treturn build.call(this, this._styles ? this._styles.concat(codes) : [codes], this._empty, model);\n\t\t\t};\n\t\t}\n\t};\n}\n\nansiStyles.bgColor.closeRe = new RegExp(escapeStringRegexp(ansiStyles.bgColor.close), 'g');\nfor (const model of Object.keys(ansiStyles.bgColor.ansi)) {\n\tif (skipModels.has(model)) {\n\t\tcontinue;\n\t}\n\n\tconst bgModel = 'bg' + model[0].toUpperCase() + model.slice(1);\n\tstyles[bgModel] = {\n\t\tget() {\n\t\t\tconst level = this.level;\n\t\t\treturn function () {\n\t\t\t\tconst open = ansiStyles.bgColor[levelMapping[level]][model].apply(null, arguments);\n\t\t\t\tconst codes = {\n\t\t\t\t\topen,\n\t\t\t\t\tclose: ansiStyles.bgColor.close,\n\t\t\t\t\tcloseRe: ansiStyles.bgColor.closeRe\n\t\t\t\t};\n\t\t\t\treturn build.call(this, this._styles ? this._styles.concat(codes) : [codes], this._empty, model);\n\t\t\t};\n\t\t}\n\t};\n}\n\nconst proto = Object.defineProperties(() => {}, styles);\n\nfunction build(_styles, _empty, key) {\n\tconst builder = function () {\n\t\treturn applyStyle.apply(builder, arguments);\n\t};\n\n\tbuilder._styles = _styles;\n\tbuilder._empty = _empty;\n\n\tconst self = this;\n\n\tObject.defineProperty(builder, 'level', {\n\t\tenumerable: true,\n\t\tget() {\n\t\t\treturn self.level;\n\t\t},\n\t\tset(level) {\n\t\t\tself.level = level;\n\t\t}\n\t});\n\n\tObject.defineProperty(builder, 'enabled', {\n\t\tenumerable: true,\n\t\tget() {\n\t\t\treturn self.enabled;\n\t\t},\n\t\tset(enabled) {\n\t\t\tself.enabled = enabled;\n\t\t}\n\t});\n\n\t// See below for fix regarding invisible grey/dim combination on Windows\n\tbuilder.hasGrey = this.hasGrey || key === 'gray' || key === 'grey';\n\n\t// `__proto__` is used because we must return a function, but there is\n\t// no way to create a function with a different prototype\n\tbuilder.__proto__ = proto; // eslint-disable-line no-proto\n\n\treturn builder;\n}\n\nfunction applyStyle() {\n\t// Support varags, but simply cast to string in case there's only one arg\n\tconst args = arguments;\n\tconst argsLen = args.length;\n\tlet str = String(arguments[0]);\n\n\tif (argsLen === 0) {\n\t\treturn '';\n\t}\n\n\tif (argsLen > 1) {\n\t\t// Don't slice `arguments`, it prevents V8 optimizations\n\t\tfor (let a = 1; a < argsLen; a++) {\n\t\t\tstr += ' ' + args[a];\n\t\t}\n\t}\n\n\tif (!this.enabled || this.level <= 0 || !str) {\n\t\treturn this._empty ? '' : str;\n\t}\n\n\t// Turns out that on Windows dimmed gray text becomes invisible in cmd.exe,\n\t// see https://github.com/chalk/chalk/issues/58\n\t// If we're on Windows and we're dealing with a gray color, temporarily make 'dim' a noop.\n\tconst originalDim = ansiStyles.dim.open;\n\tif (isSimpleWindowsTerm && this.hasGrey) {\n\t\tansiStyles.dim.open = '';\n\t}\n\n\tfor (const code of this._styles.slice().reverse()) {\n\t\t// Replace any instances already present with a re-opening code\n\t\t// otherwise only the part of the string until said closing code\n\t\t// will be colored, and the rest will simply be 'plain'.\n\t\tstr = code.open + str.replace(code.closeRe, code.open) + code.close;\n\n\t\t// Close the styling before a linebreak and reopen\n\t\t// after next line to fix a bleed issue on macOS\n\t\t// https://github.com/chalk/chalk/pull/92\n\t\tstr = str.replace(/\\r?\\n/g, `${code.close}$&${code.open}`);\n\t}\n\n\t// Reset the original `dim` if we changed it to work around the Windows dimmed gray issue\n\tansiStyles.dim.open = originalDim;\n\n\treturn str;\n}\n\nfunction chalkTag(chalk, strings) {\n\tif (!Array.isArray(strings)) {\n\t\t// If chalk() was called by itself or with a string,\n\t\t// return the string itself as a string.\n\t\treturn [].slice.call(arguments, 1).join(' ');\n\t}\n\n\tconst args = [].slice.call(arguments, 2);\n\tconst parts = [strings.raw[0]];\n\n\tfor (let i = 1; i < strings.length; i++) {\n\t\tparts.push(String(args[i - 1]).replace(/[{}\\\\]/g, '\\\\$&'));\n\t\tparts.push(String(strings.raw[i]));\n\t}\n\n\treturn template(chalk, parts.join(''));\n}\n\nObject.defineProperties(Chalk.prototype, styles);\n\nmodule.exports = Chalk(); // eslint-disable-line new-cap\nmodule.exports.supportsColor = stdoutColor;\nmodule.exports.default = module.exports; // For TypeScript\n/index.js.flow\u0007// @flow strict\n\ntype TemplateStringsArray = $ReadOnlyArray<string>;\n\nexport type Level = $Values<{\n\tNone: 0,\n\tBasic: 1,\n\tAnsi256: 2,\n\tTrueColor: 3\n}>;\n\nexport type ChalkOptions = {|\n\tenabled?: boolean,\n\tlevel?: Level\n|};\n\nexport type ColorSupport = {|\n\tlevel: Level,\n\thasBasic: boolean,\n\thas256: boolean,\n\thas16m: boolean\n|};\n\nexport interface Chalk {\n\t(...text: string[]): string,\n\t(text: TemplateStringsArray, ...placeholders: string[]): string,\n\tconstructor(options?: ChalkOptions): Chalk,\n\tenabled: boolean,\n\tlevel: Level,\n\trgb(r: number, g: number, b: number): Chalk,\n\thsl(h: number, s: number, l: number): Chalk,\n\thsv(h: number, s: number, v: number): Chalk,\n\thwb(h: number, w: number, b: number): Chalk,\n\tbgHex(color: string): Chalk,\n\tbgKeyword(color: string): Chalk,\n\tbgRgb(r: number, g: number, b: number): Chalk,\n\tbgHsl(h: number, s: number, l: number): Chalk,\n\tbgHsv(h: number, s: number, v: number): Chalk,\n\tbgHwb(h: number, w: number, b: number): Chalk,\n\thex(color: string): Chalk,\n\tkeyword(color: string): Chalk,\n\n\t+reset: Chalk,\n\t+bold: Chalk,\n\t+dim: Chalk,\n\t+italic: Chalk,\n\t+underline: Chalk,\n\t+inverse: Chalk,\n\t+hidden: Chalk,\n\t+strikethrough: Chalk,\n\n\t+visible: Chalk,\n\n\t+black: Chalk,\n\t+red: Chalk,\n\t+green: Chalk,\n\t+yellow: Chalk,\n\t+blue: Chalk,\n\t+magenta: Chalk,\n\t+cyan: Chalk,\n\t+white: Chalk,\n\t+gray: Chalk,\n\t+grey: Chalk,\n\t+blackBright: Chalk,\n\t+redBright: Chalk,\n\t+greenBright: Chalk,\n\t+yellowBright: Chalk,\n\t+blueBright: Chalk,\n\t+magentaBright: Chalk,\n\t+cyanBright: Chalk,\n\t+whiteBright: Chalk,\n\n\t+bgBlack: Chalk,\n\t+bgRed: Chalk,\n\t+bgGreen: Chalk,\n\t+bgYellow: Chalk,\n\t+bgBlue: Chalk,\n\t+bgMagenta: Chalk,\n\t+bgCyan: Chalk,\n\t+bgWhite: Chalk,\n\t+bgBlackBright: Chalk,\n\t+bgRedBright: Chalk,\n\t+bgGreenBright: Chalk,\n\t+bgYellowBright: Chalk,\n\t+bgBlueBright: Chalk,\n\t+bgMagentaBright: Chalk,\n\t+bgCyanBright: Chalk,\n\t+bgWhiteBrigh: Chalk,\n\n\tsupportsColor: ColorSupport\n};\n\ndeclare module.exports: Chalk;\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/Y2hhbGtANC4xLjI=",
    "content": "/source/templates.js\r''use strict';\nconst TEMPLATE_REGEX = /(?:\\\\(u(?:[a-f\\d]{4}|\\{[a-f\\d]{1,6}\\})|x[a-f\\d]{2}|.))|(?:\\{(~)?(\\w+(?:\\([^)]*\\))?(?:\\.\\w+(?:\\([^)]*\\))?)*)(?:[ \\t]|(?=\\r?\\n)))|(\\})|((?:.|[\\r\\n\\f])+?)/gi;\nconst STYLE_REGEX = /(?:^|\\.)(\\w+)(?:\\(([^)]*)\\))?/g;\nconst STRING_REGEX = /^(['\"])((?:\\\\.|(?!\\1)[^\\\\])*)\\1$/;\nconst ESCAPE_REGEX = /\\\\(u(?:[a-f\\d]{4}|{[a-f\\d]{1,6}})|x[a-f\\d]{2}|.)|([^\\\\])/gi;\n\nconst ESCAPES = new Map([\n\t['n', '\\n'],\n\t['r', '\\r'],\n\t['t', '\\t'],\n\t['b', '\\b'],\n\t['f', '\\f'],\n\t['v', '\\v'],\n\t['0', '\\0'],\n\t['\\\\', '\\\\'],\n\t['e', '\\u001B'],\n\t['a', '\\u0007']\n]);\n\nfunction unescape(c) {\n\tconst u = c[0] === 'u';\n\tconst bracket = c[1] === '{';\n\n\tif ((u && !bracket && c.length === 5) || (c[0] === 'x' && c.length === 3)) {\n\t\treturn String.fromCharCode(parseInt(c.slice(1), 16));\n\t}\n\n\tif (u && bracket) {\n\t\treturn String.fromCodePoint(parseInt(c.slice(2, -1), 16));\n\t}\n\n\treturn ESCAPES.get(c) || c;\n}\n\nfunction parseArguments(name, arguments_) {\n\tconst results = [];\n\tconst chunks = arguments_.trim().split(/\\s*,\\s*/g);\n\tlet matches;\n\n\tfor (const chunk of chunks) {\n\t\tconst number = Number(chunk);\n\t\tif (!Number.isNaN(number)) {\n\t\t\tresults.push(number);\n\t\t} else if ((matches = chunk.match(STRING_REGEX))) {\n\t\t\tresults.push(matches[2].replace(ESCAPE_REGEX, (m, escape, character) => escape ? unescape(escape) : character));\n\t\t} else {\n\t\t\tthrow new Error(`Invalid Chalk template style argument: ${chunk} (in style '${name}')`);\n\t\t}\n\t}\n\n\treturn results;\n}\n\nfunction parseStyle(style) {\n\tSTYLE_REGEX.lastIndex = 0;\n\n\tconst results = [];\n\tlet matches;\n\n\twhile ((matches = STYLE_REGEX.exec(style)) !== null) {\n\t\tconst name = matches[1];\n\n\t\tif (matches[2]) {\n\t\t\tconst args = parseArguments(name, matches[2]);\n\t\t\tresults.push([name].concat(args));\n\t\t} else {\n\t\t\tresults.push([name]);\n\t\t}\n\t}\n\n\treturn results;\n}\n\nfunction buildStyle(chalk, styles) {\n\tconst enabled = {};\n\n\tfor (const layer of styles) {\n\t\tfor (const style of layer.styles) {\n\t\t\tenabled[style[0]] = layer.inverse ? null : style.slice(1);\n\t\t}\n\t}\n\n\tlet current = chalk;\n\tfor (const [styleName, styles] of Object.entries(enabled)) {\n\t\tif (!Array.isArray(styles)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (!(styleName in current)) {\n\t\t\tthrow new Error(`Unknown Chalk style: ${styleName}`);\n\t\t}\n\n\t\tcurrent = styles.length > 0 ? current[styleName](...styles) : current[styleName];\n\t}\n\n\treturn current;\n}\n\nmodule.exports = (chalk, temporary) => {\n\tconst styles = [];\n\tconst chunks = [];\n\tlet chunk = [];\n\n\t// eslint-disable-next-line max-params\n\ttemporary.replace(TEMPLATE_REGEX, (m, escapeCharacter, inverse, style, close, character) => {\n\t\tif (escapeCharacter) {\n\t\t\tchunk.push(unescape(escapeCharacter));\n\t\t} else if (style) {\n\t\t\tconst string = chunk.join('');\n\t\t\tchunk = [];\n\t\t\tchunks.push(styles.length === 0 ? string : buildStyle(chalk, styles)(string));\n\t\t\tstyles.push({inverse, styles: parseStyle(style)});\n\t\t} else if (close) {\n\t\t\tif (styles.length === 0) {\n\t\t\t\tthrow new Error('Found extraneous } in Chalk template literal');\n\t\t\t}\n\n\t\t\tchunks.push(buildStyle(chalk, styles)(chunk.join('')));\n\t\t\tchunk = [];\n\t\t\tstyles.pop();\n\t\t} else {\n\t\t\tchunk.push(character);\n\t\t}\n\t});\n\n\tchunks.push(chunk.join(''));\n\n\tif (styles.length > 0) {\n\t\tconst errMessage = `Chalk template literal is missing ${styles.length} closing bracket${styles.length === 1 ? '' : 's'} (\\`}\\`)`;\n\t\tthrow new Error(errMessage);\n\t}\n\n\treturn chunks.join('');\n};\n/package.json\u0004{\n\t\"name\": \"chalk\",\n\t\"version\": \"4.1.2\",\n\t\"description\": \"Terminal string styling done right\",\n\t\"license\": \"MIT\",\n\t\"repository\": \"chalk/chalk\",\n\t\"funding\": \"https://github.com/chalk/chalk?sponsor=1\",\n\t\"main\": \"source\",\n\t\"engines\": {\n\t\t\"node\": \">=10\"\n\t},\n\t\"scripts\": {\n\t\t\"test\": \"xo && nyc ava && tsd\",\n\t\t\"bench\": \"matcha benchmark.js\"\n\t},\n\t\"files\": [\n\t\t\"source\",\n\t\t\"index.d.ts\"\n\t],\n\t\"keywords\": [\n\t\t\"color\",\n\t\t\"colour\",\n\t\t\"colors\",\n\t\t\"terminal\",\n\t\t\"console\",\n\t\t\"cli\",\n\t\t\"string\",\n\t\t\"str\",\n\t\t\"ansi\",\n\t\t\"style\",\n\t\t\"styles\",\n\t\t\"tty\",\n\t\t\"formatting\",\n\t\t\"rgb\",\n\t\t\"256\",\n\t\t\"shell\",\n\t\t\"xterm\",\n\t\t\"log\",\n\t\t\"logging\",\n\t\t\"command-line\",\n\t\t\"text\"\n\t],\n\t\"dependencies\": {\n\t\t\"ansi-styles\": \"^4.1.0\",\n\t\t\"supports-color\": \"^7.1.0\"\n\t},\n\t\"devDependencies\": {\n\t\t\"ava\": \"^2.4.0\",\n\t\t\"coveralls\": \"^3.0.7\",\n\t\t\"execa\": \"^4.0.0\",\n\t\t\"import-fresh\": \"^3.1.0\",\n\t\t\"matcha\": \"^0.7.0\",\n\t\t\"nyc\": \"^15.0.0\",\n\t\t\"resolve-from\": \"^5.0.0\",\n\t\t\"tsd\": \"^0.7.4\",\n\t\t\"xo\": \"^0.28.2\"\n\t},\n\t\"xo\": {\n\t\t\"rules\": {\n\t\t\t\"unicorn/prefer-string-slice\": \"off\",\n\t\t\t\"unicorn/prefer-includes\": \"off\",\n\t\t\t\"@typescript-eslint/member-ordering\": \"off\",\n\t\t\t\"no-redeclare\": \"off\",\n\t\t\t\"unicorn/string-content\": \"off\",\n\t\t\t\"unicorn/better-regex\": \"off\"\n\t\t}\n\t}\n}\n/index.d.ts\"/**\nBasic foreground colors.\n\n[More colors here.](https://github.com/chalk/chalk/blob/master/readme.md#256-and-truecolor-color-support)\n*/\ndeclare type ForegroundColor =\n\t| 'black'\n\t| 'red'\n\t| 'green'\n\t| 'yellow'\n\t| 'blue'\n\t| 'magenta'\n\t| 'cyan'\n\t| 'white'\n\t| 'gray'\n\t| 'grey'\n\t| 'blackBright'\n\t| 'redBright'\n\t| 'greenBright'\n\t| 'yellowBright'\n\t| 'blueBright'\n\t| 'magentaBright'\n\t| 'cyanBright'\n\t| 'whiteBright';\n\n/**\nBasic background colors.\n\n[More colors here.](https://github.com/chalk/chalk/blob/master/readme.md#256-and-truecolor-color-support)\n*/\ndeclare type BackgroundColor =\n\t| 'bgBlack'\n\t| 'bgRed'\n\t| 'bgGreen'\n\t| 'bgYellow'\n\t| 'bgBlue'\n\t| 'bgMagenta'\n\t| 'bgCyan'\n\t| 'bgWhite'\n\t| 'bgGray'\n\t| 'bgGrey'\n\t| 'bgBlackBright'\n\t| 'bgRedBright'\n\t| 'bgGreenBright'\n\t| 'bgYellowBright'\n\t| 'bgBlueBright'\n\t| 'bgMagentaBright'\n\t| 'bgCyanBright'\n\t| 'bgWhiteBright';\n\n/**\nBasic colors.\n\n[More colors here.](https://github.com/chalk/chalk/blob/master/readme.md#256-and-truecolor-color-support)\n*/\ndeclare type Color = ForegroundColor | BackgroundColor;\n\ndeclare type Modifiers =\n\t| 'reset'\n\t| 'bold'\n\t| 'dim'\n\t| 'italic'\n\t| 'underline'\n\t| 'inverse'\n\t| 'hidden'\n\t| 'strikethrough'\n\t| 'visible';\n\ndeclare namespace chalk {\n\t/**\n\tLevels:\n\t- `0` - All colors disabled.\n\t- `1` - Basic 16 colors support.\n\t- `2` - ANSI 256 colors support.\n\t- `3` - Truecolor 16 million colors support.\n\t*/\n\ttype Level = 0 | 1 | 2 | 3;\n\n\tinterface Options {\n\t\t/**\n\t\tSpecify the color support for Chalk.\n\n\t\tBy default, color support is automatically detected based on the environment.\n\n\t\tLevels:\n\t\t- `0` - All colors disabled.\n\t\t- `1` - Basic 16 colors support.\n\t\t- `2` - ANSI 256 colors support.\n\t\t- `3` - Truecolor 16 million colors support.\n\t\t*/\n\t\tlevel?: Level;\n\t}\n\n\t/**\n\tReturn a new Chalk instance.\n\t*/\n\ttype Instance = new (options?: Options) => Chalk;\n\n\t/**\n\tDetect whether the terminal supports color.\n\t*/\n\tinterface ColorSupport {\n\t\t/**\n\t\tThe color level used by Chalk.\n\t\t*/\n\t\tlevel: Level;\n\n\t\t/**\n\t\tReturn whether Chalk supports basic 16 colors.\n\t\t*/\n\t\thasBasic: boolean;\n\n\t\t/**\n\t\tReturn whether Chalk supports ANSI 256 colors.\n\t\t*/\n\t\thas256: boolean;\n\n\t\t/**\n\t\tReturn whether Chalk supports Truecolor 16 million colors.\n\t\t*/\n\t\thas16m: boolean;\n\t}\n\n\tinterface ChalkFunction {\n\t\t/**\n\t\tUse a template string.\n\n\t\t@remarks Template literals are unsupported for nested calls (see [issue #341](https://github.com/chalk/chalk/issues/341))\n\n\t\t@example\n\t\t```\n\t\timport chalk = require('chalk');\n\n\t\tlog(chalk`\n\t\tCPU: {red ${cpu.totalPercent}%}\n\t\tRAM: {green ${ram.used / ram.total * 100}%}\n\t\tDISK: {rgb(255,131,0) ${disk.used / disk.total * 100}%}\n\t\t`);\n\t\t```\n\n\t\t@example\n\t\t```\n\t\timport chalk = require('chalk');\n\n\t\tlog(chalk.red.bgBlack`2 + 3 = {bold ${2 + 3}}`)\n\t\t```\n\t\t*/\n\t\t(text: TemplateStringsArray, ...placeholders: unknown[]): string;\n\n\t\t(...text: unknown[]): string;\n\t}\n\n\tinterface Chalk extends ChalkFunction {\n\t\t/**\n\t\tReturn a new Chalk instance.\n\t\t*/\n\t\tInstance: Instance;\n\n\t\t/**\n\t\tThe color support for Chalk.\n\n\t\tBy default, color support is automatically detected based on the environment.\n\n\t\tLevels:\n\t\t- `0` - All colors disabled.\n\t\t- `1` - Basic 16 colors support.\n\t\t- `2` - ANSI 256 colors support.\n\t\t- `3` - Truecolor 16 million colors support.\n\t\t*/\n\t\tlevel: Level;\n\n\t\t/**\n\t\tUse HEX value to set text color.\n\n\t\t@param color - Hexadecimal value representing the desired color.\n\n\t\t@example\n\t\t```\n\t\timport chalk = require('chalk');\n\n\t\tchalk.hex('#DEADED');\n\t\t```\n\t\t*/\n\t\thex(color: string): Chalk;\n\n\t\t/**\n\t\tUse keyword color value to set text color.\n\n\t\t@param color - Keyword value representing the desired color.\n\n\t\t@example\n\t\t```\n\t\timport chalk = require('chalk');\n\n\t\tchalk.keyword('orange');\n\t\t```\n\t\t*/\n\t\tkeyword(color: string): Chalk;\n\n\t\t/**\n\t\tUse RGB values to set text color.\n\t\t*/\n\t\trgb(red: number, green: number, blue: number): Chalk;\n\n\t\t/**\n\t\tUse HSL values to set text color.\n\t\t*/\n\t\thsl(hue: number, saturation: number, lightness: number): Chalk;\n\n\t\t/**\n\t\tUse HSV values to set text color.\n\t\t*/\n\t\thsv(hue: number, saturation: number, value: number): Chalk;\n\n\t\t/**\n\t\tUse HWB values to set text color.\n\t\t*/\n\t\thwb(hue: number, whiteness: number, blackness: number): Chalk;\n\n\t\t/**\n\t\tUse a [Select/Set Graphic Rendition](https://en.wikipedia.org/wiki/ANSI_escape_code#SGR_parameters) (SGR) [color code number](https://en.wikipedia.org/wiki/ANSI_escape_code#3/4_bit) to set text color.\n\n\t\t30 <= code && code < 38 || 90 <= code && code < 98\n\t\tFor example, 31 for red, 91 for redBright.\n\t\t*/\n\t\tansi(code: number): Chalk;\n\n\t\t/**\n\t\tUse a [8-bit unsigned number](https://en.wikipedia.org/wiki/ANSI_escape_code#8-bit) to set text color.\n\t\t*/\n\t\tansi256(index: number): Chalk;\n\n\t\t/**\n\t\tUse HEX value to set background color.\n\n\t\t@param color - Hexadecimal value representing the desired color.\n\n\t\t@example\n\t\t```\n\t\timport chalk = require('chalk');\n\n\t\tchalk.bgHex('#DEADED');\n\t\t```\n\t\t*/\n\t\tbgHex(color: string): Chalk;\n\n\t\t/**\n\t\tUse keyword color value to set background color.\n\n\t\t@param color - Keyword value representing the desired color.\n\n\t\t@example\n\t\t```\n\t\timport chalk = require('chalk');\n\n\t\tchalk.bgKeyword('orange');\n\t\t```\n\t\t*/\n\t\tbgKeyword(color: string): Chalk;\n\n\t\t/**\n\t\tUse RGB values to set background color.\n\t\t*/\n\t\tbgRgb(red: number, green: number, blue: number): Chalk;\n\n\t\t/**\n\t\tUse HSL values to set background color.\n\t\t*/\n\t\tbgHsl(hue: number, saturation: number, lightness: number): Chalk;\n\n\t\t/**\n\t\tUse HSV values to set background color.\n\t\t*/\n\t\tbgHsv(hue: number, saturation: number, value: number): Chalk;\n\n\t\t/**\n\t\tUse HWB values to set background color.\n\t\t*/\n\t\tbgHwb(hue: number, whiteness: number, blackness: number): Chalk;\n\n\t\t/**\n\t\tUse a [Select/Set Graphic Rendition](https://en.wikipedia.org/wiki/ANSI_escape_code#SGR_parameters) (SGR) [color code number](https://en.wikipedia.org/wiki/ANSI_escape_code#3/4_bit) to set background color.\n\n\t\t30 <= code && code < 38 || 90 <= code && code < 98\n\t\tFor example, 31 for red, 91 for redBright.\n\t\tUse the foreground code, not the background code (for example, not 41, nor 101).\n\t\t*/\n\t\tbgAnsi(code: number): Chalk;\n\n\t\t/**\n\t\tUse a [8-bit unsigned number](https://en.wikipedia.org/wiki/ANSI_escape_code#8-bit) to set background color.\n\t\t*/\n\t\tbgAnsi256(index: number): Chalk;\n\n\t\t/**\n\t\tModifier: Resets the current color chain.\n\t\t*/\n\t\treadonly reset: Chalk;\n\n\t\t/**\n\t\tModifier: Make text bold.\n\t\t*/\n\t\treadonly bold: Chalk;\n\n\t\t/**\n\t\tModifier: Emitting only a small amount of light.\n\t\t*/\n\t\treadonly dim: Chalk;\n\n\t\t/**\n\t\tModifier: Make text italic. (Not widely supported)\n\t\t*/\n\t\treadonly italic: Chalk;\n\n\t\t/**\n\t\tModifier: Make text underline. (Not widely supported)\n\t\t*/\n\t\treadonly underline: Chalk;\n\n\t\t/**\n\t\tModifier: Inverse background and foreground colors.\n\t\t*/\n\t\treadonly inverse: Chalk;\n\n\t\t/**\n\t\tModifier: Prints the text, but makes it invisible.\n\t\t*/\n\t\treadonly hidden: Chalk;\n\n\t\t/**\n\t\tModifier: Puts a horizontal line through the center of the text. (Not widely supported)\n\t\t*/\n\t\treadonly strikethrough: Chalk;\n\n\t\t/**\n\t\tModifier: Prints the text only when Chalk has a color support level > 0.\n\t\tCan be useful for things that are purely cosmetic.\n\t\t*/\n\t\treadonly visible: Chalk;\n\n\t\treadonly black: Chalk;\n\t\treadonly red: Chalk;\n\t\treadonly green: Chalk;\n\t\treadonly yellow: Chalk;\n\t\treadonly blue: Chalk;\n\t\treadonly magenta: Chalk;\n\t\treadonly cyan: Chalk;\n\t\treadonly white: Chalk;\n\n\t\t/*\n\t\tAlias for `blackBright`.\n\t\t*/\n\t\treadonly gray: Chalk;\n\n\t\t/*\n\t\tAlias for `blackBright`.\n\t\t*/\n\t\treadonly grey: Chalk;\n\n\t\treadonly blackBright: Chalk;\n\t\treadonly redBright: Chalk;\n\t\treadonly greenBright: Chalk;\n\t\treadonly yellowBright: Chalk;\n\t\treadonly blueBright: Chalk;\n\t\treadonly magentaBright: Chalk;\n\t\treadonly cyanBright: Chalk;\n\t\treadonly whiteBright: Chalk;\n\n\t\treadonly bgBlack: Chalk;\n\t\treadonly bgRed: Chalk;\n\t\treadonly bgGreen: Chalk;\n\t\treadonly bgYellow: Chalk;\n\t\treadonly bgBlue: Chalk;\n\t\treadonly bgMagenta: Chalk;\n\t\treadonly bgCyan: Chalk;\n\t\treadonly bgWhite: Chalk;\n\n\t\t/*\n\t\tAlias for `bgBlackBright`.\n\t\t*/\n\t\treadonly bgGray: Chalk;\n\n\t\t/*\n\t\tAlias for `bgBlackBright`.\n\t\t*/\n\t\treadonly bgGrey: Chalk;\n\n\t\treadonly bgBlackBright: Chalk;\n\t\treadonly bgRedBright: Chalk;\n\t\treadonly bgGreenBright: Chalk;\n\t\treadonly bgYellowBright: Chalk;\n\t\treadonly bgBlueBright: Chalk;\n\t\treadonly bgMagentaBright: Chalk;\n\t\treadonly bgCyanBright: Chalk;\n\t\treadonly bgWhiteBright: Chalk;\n\t}\n}\n\n/**\nMain Chalk object that allows to chain styles together.\nCall the last one as a method with a string argument.\nOrder doesn't matter, and later styles take precedent in case of a conflict.\nThis simply means that `chalk.red.yellow.green` is equivalent to `chalk.green`.\n*/\ndeclare const chalk: chalk.Chalk & chalk.ChalkFunction & {\n\tsupportsColor: chalk.ColorSupport | false;\n\tLevel: chalk.Level;\n\tColor: Color;\n\tForegroundColor: ForegroundColor;\n\tBackgroundColor: BackgroundColor;\n\tModifiers: Modifiers;\n\tstderr: chalk.Chalk & {supportsColor: chalk.ColorSupport | false};\n};\n\nexport = chalk;\n/readme.md45<h1 align=\"center\">\n\t<br>\n\t<br>\n\t<img width=\"320\" src=\"media/logo.svg\" alt=\"Chalk\">\n\t<br>\n\t<br>\n\t<br>\n</h1>\n\n> Terminal string styling done right\n\n[![Build Status](https://travis-ci.org/chalk/chalk.svg?branch=master)](https://travis-ci.org/chalk/chalk) [![Coverage Status](https://coveralls.io/repos/github/chalk/chalk/badge.svg?branch=master)](https://coveralls.io/github/chalk/chalk?branch=master) [![npm dependents](https://badgen.net/npm/dependents/chalk)](https://www.npmjs.com/package/chalk?activeTab=dependents) [![Downloads](https://badgen.net/npm/dt/chalk)](https://www.npmjs.com/package/chalk) [![](https://img.shields.io/badge/unicorn-approved-ff69b4.svg)](https://www.youtube.com/watch?v=9auOCbH5Ns4) [![XO code style](https://img.shields.io/badge/code_style-XO-5ed9c7.svg)](https://github.com/xojs/xo) ![TypeScript-ready](https://img.shields.io/npm/types/chalk.svg) [![run on repl.it](https://repl.it/badge/github/chalk/chalk)](https://repl.it/github/chalk/chalk)\n\n<img src=\"https://cdn.jsdelivr.net/gh/chalk/ansi-styles@8261697c95bf34b6c7767e2cbe9941a851d59385/screenshot.svg\" width=\"900\">\n\n<br>\n\n---\n\n<div align=\"center\">\n\t<p>\n\t\t<p>\n\t\t\t<sup>\n\t\t\t\tSindre Sorhus' open source work is supported by the community on <a href=\"https://github.com/sponsors/sindresorhus\">GitHub Sponsors</a> and <a href=\"https://stakes.social/0x44d871aebF0126Bf646753E2C976Aa7e68A66c15\">Dev</a>\n\t\t\t</sup>\n\t\t</p>\n\t\t<sup>Special thanks to:</sup>\n\t\t<br>\n\t\t<br>\n\t\t<a href=\"https://standardresume.co/tech\">\n\t\t\t<img src=\"https://sindresorhus.com/assets/thanks/standard-resume-logo.svg\" width=\"160\"/>\n\t\t</a>\n\t\t<br>\n\t\t<br>\n\t\t<a href=\"https://retool.com/?utm_campaign=sindresorhus\">\n\t\t\t<img src=\"https://sindresorhus.com/assets/thanks/retool-logo.svg\" width=\"230\"/>\n\t\t</a>\n\t\t<br>\n\t\t<br>\n\t\t<a href=\"https://doppler.com/?utm_campaign=github_repo&utm_medium=referral&utm_content=chalk&utm_source=github\">\n\t\t\t<div>\n\t\t\t\t<img src=\"https://dashboard.doppler.com/imgs/logo-long.svg\" width=\"240\" alt=\"Doppler\">\n\t\t\t</div>\n\t\t\t<b>All your environment variables, in one place</b>\n\t\t\t<div>\n\t\t\t\t<span>Stop struggling with scattered API keys, hacking together home-brewed tools,</span>\n\t\t\t\t<br>\n\t\t\t\t<span>and avoiding access controls. Keep your team and servers in sync with Doppler.</span>\n\t\t\t</div>\n\t\t</a>\n\t\t<br>\n\t\t<a href=\"https://uibakery.io/?utm_source=chalk&utm_medium=sponsor&utm_campaign=github\">\n\t\t\t<div>\n\t\t\t\t<img src=\"https://sindresorhus.com/assets/thanks/uibakery-logo.jpg\" width=\"270\" alt=\"UI Bakery\">\n\t\t\t</div>\n\t\t</a>\n\t</p>\n</div>\n\n---\n\n<br>\n\n## Highlights\n\n- Expressive API\n- Highly performant\n- Ability to nest styles\n- [256/Truecolor color support](#256-and-truecolor-color-support)\n- Auto-detects color support\n- Doesn't extend `String.prototype`\n- Clean and focused\n- Actively maintained\n- [Used by ~50,000 packages](https://www.npmjs.com/browse/depended/chalk) as of January 1, 2020\n\n## Install\n\n```console\n$ npm install chalk\n```\n\n## Usage\n\n```js\nconst chalk = require('chalk');\n\nconsole.log(chalk.blue('Hello world!'));\n```\n\nChalk comes with an easy to use composable API where you just chain and nest the styles you want.\n\n```js\nconst chalk = require('chalk');\nconst log = console.log;\n\n// Combine styled and normal strings\nlog(chalk.blue('Hello') + ' World' + chalk.red('!'));\n\n// Compose multiple styles using the chainable API\nlog(chalk.blue.bgRed.bold('Hello world!'));\n\n// Pass in multiple arguments\nlog(chalk.blue('Hello', 'World!', 'Foo', 'bar', 'biz', 'baz'));\n\n// Nest styles\nlog(chalk.red('Hello', chalk.underline.bgBlue('world') + '!'));\n\n// Nest styles of the same type even (color, underline, background)\nlog(chalk.green(\n\t'I am a green line ' +\n\tchalk.blue.underline.bold('with a blue substring') +\n\t' that becomes green again!'\n));\n\n// ES2015 template literal\nlog(`\nCPU: ${chalk.red('90%')}\nRAM: ${chalk.green('40%')}\nDISK: ${chalk.yellow('70%')}\n`);\n\n// ES2015 tagged template literal\nlog(chalk`\nCPU: {red ${cpu.totalPercent}%}\nRAM: {green ${ram.used / ram.total * 100}%}\nDISK: {rgb(255,131,0) ${disk.used / disk.total * 100}%}\n`);\n\n// Use RGB colors in terminal emulators that support it.\nlog(chalk.keyword('orange')('Yay for orange colored text!'));\nlog(chalk.rgb(123, 45, 67).underline('Underlined reddish color'));\nlog(chalk.hex('#DEADED').bold('Bold gray!'));\n```\n\nEasily define your own themes:\n\n```js\nconst chalk = require('chalk');\n\nconst error = chalk.bold.red;\nconst warning = chalk.keyword('orange');\n\nconsole.log(error('Error!'));\nconsole.log(warning('Warning!'));\n```\n\nTake advantage of console.log [string substitution](https://nodejs.org/docs/latest/api/console.html#console_console_log_data_args):\n\n```js\nconst name = 'Sindre';\nconsole.log(chalk.green('Hello %s'), name);\n//=> 'Hello Sindre'\n```\n\n## API\n\n### chalk.`<style>[.<style>...](string, [string...])`\n\nExample: `chalk.red.bold.underline('Hello', 'world');`\n\nChain [styles](#styles) and call the last one as a method with a string argument. Order doesn't matter, and later styles take precedent in case of a conflict. This simply means that `chalk.red.yellow.green` is equivalent to `chalk.green`.\n\nMultiple arguments will be separated by space.\n\n### chalk.level\n\nSpecifies the level of color support.\n\nColor support is automatically detected, but you can override it by setting the `level` property. You should however only do this in your own code as it applies globally to all Chalk consumers.\n\nIf you need to change this in a reusable module, create a new instance:\n\n```js\nconst ctx = new chalk.Instance({level: 0});\n```\n\n| Level | Description |\n| :---: | :--- |\n| `0` | All colors disabled |\n| `1` | Basic color support (16 colors) |\n| `2` | 256 color support |\n| `3` | Truecolor support (16 million colors) |\n\n### chalk.supportsColor\n\nDetect whether the terminal [supports color](https://github.com/chalk/supports-color). Used internally and handled for you, but exposed for convenience.\n\nCan be overridden by the user with the flags `--color` and `--no-color`. For situations where using `--color` is not possible, use the environment variable `FORCE_COLOR=1` (level 1), `FORCE_COLOR=2` (level 2), or `FORCE_COLOR=3` (level 3) to forcefully enable color, or `FORCE_COLOR=0` to forcefully disable. The use of `FORCE_COLOR` overrides all other color support checks.\n\nExplicit 256/Truecolor mode can be enabled using the `--color=256` and `--color=16m` flags, respectively.\n\n### chalk.stderr and chalk.stderr.supportsColor\n\n`chalk.stderr` contains a separate instance configured with color support detected for `stderr` stream instead of `stdout`. Override rules from `chalk.supportsColor` apply to this too. `chalk.stderr.supportsColor` is exposed for convenience.\n\n## Styles\n\n### Modifiers\n\n- `reset` - Resets the current color chain.\n- `bold` - Make text bold.\n- `dim` - Emitting only a small amount of light.\n- `italic` - Make text italic. *(Not widely supported)*\n- `underline` - Make text underline. *(Not widely supported)*\n- `inverse`- Inverse background and foreground colors.\n- `hidden` - Prints the text, but makes it invisible.\n- `strikethrough` - Puts a horizontal line through the center of the text. *(Not widely supported)*\n- `visible`- Prints the text only when Chalk has a color level > 0. Can be useful for things that are purely cosmetic.\n\n### Colors\n\n- `black`\n- `red`\n- `green`\n- `yellow`\n- `blue`\n- `magenta`\n- `cyan`\n- `white`\n- `blackBright` (alias: `gray`, `grey`)\n- `redBright`\n- `greenBright`\n- `yellowBright`\n- `blueBright`\n- `magentaBright`\n- `cyanBright`\n- `whiteBright`\n\n### Background colors\n\n- `bgBlack`\n- `bgRed`\n- `bgGreen`\n- `bgYellow`\n- `bgBlue`\n- `bgMagenta`\n- `bgCyan`\n- `bgWhite`\n- `bgBlackBright` (alias: `bgGray`, `bgGrey`)\n- `bgRedBright`\n- `bgGreenBright`\n- `bgYellowBright`\n- `bgBlueBright`\n- `bgMagentaBright`\n- `bgCyanBright`\n- `bgWhiteBright`\n\n## Tagged template literal\n\nChalk can be used as a [tagged template literal](https://exploringjs.com/es6/ch_template-literals.html#_tagged-template-literals).\n\n```js\nconst chalk = require('chalk');\n\nconst miles = 18;\nconst calculateFeet = miles => miles * 5280;\n\nconsole.log(chalk`\n\tThere are {bold 5280 feet} in a mile.\n\tIn {bold ${miles} miles}, there are {green.bold ${calculateFeet(miles)} feet}.\n`);\n```\n\nBlocks are delimited by an opening curly brace (`{`), a style, some content, and a closing curly brace (`}`).\n\nTemplate styles are chained exactly like normal Chalk styles. The following three statements are equivalent:\n\n```js\nconsole.log(chalk.bold.rgb(10, 100, 200)('Hello!'));\nconsole.log(chalk.bold.rgb(10, 100, 200)`Hello!`);\nconsole.log(chalk`{bold.rgb(10,100,200) Hello!}`);\n```\n\nNote that function styles (`rgb()`, `hsl()`, `keyword()`, etc.) may not contain spaces between parameters.\n\nAll interpolated values (`` chalk`${foo}` ``) are converted to strings via the `.toString()` method. All curly braces (`{` and `}`) in interpolated value strings are escaped.\n\n## 256 and Truecolor color support\n\nChalk supports 256 colors and [Truecolor](https://gist.github.com/XVilka/8346728) (16 million colors) on supported terminal apps.\n\nColors are downsampled from 16 million RGB values to an ANSI color format that is supported by the terminal emulator (or by specifying `{level: n}` as a Chalk option). For example, Chalk configured to run at level 1 (basic color support) will downsample an RGB value of #FF0000 (red) to 31 (ANSI escape for red).\n\nExamples:\n\n- `chalk.hex('#DEADED').underline('Hello, world!')`\n- `chalk.keyword('orange')('Some orange text')`\n- `chalk.rgb(15, 100, 204).inverse('Hello!')`\n\nBackground versions of these models are prefixed with `bg` and the first level of the module capitalized (e.g. `keyword` for foreground colors and `bgKeyword` for background colors).\n\n- `chalk.bgHex('#DEADED').underline('Hello, world!')`\n- `chalk.bgKeyword('orange')('Some orange text')`\n- `chalk.bgRgb(15, 100, 204).inverse('Hello!')`\n\nThe following color models can be used:\n\n- [`rgb`](https://en.wikipedia.org/wiki/RGB_color_model) - Example: `chalk.rgb(255, 136, 0).bold('Orange!')`\n- [`hex`](https://en.wikipedia.org/wiki/Web_colors#Hex_triplet) - Example: `chalk.hex('#FF8800').bold('Orange!')`\n- [`keyword`](https://www.w3.org/wiki/CSS/Properties/color/keywords) (CSS keywords) - Example: `chalk.keyword('orange').bold('Orange!')`\n- [`hsl`](https://en.wikipedia.org/wiki/HSL_and_HSV) - Example: `chalk.hsl(32, 100, 50).bold('Orange!')`\n- [`hsv`](https://en.wikipedia.org/wiki/HSL_and_HSV) - Example: `chalk.hsv(32, 100, 100).bold('Orange!')`\n- [`hwb`](https://en.wikipedia.org/wiki/HWB_color_model) - Example: `chalk.hwb(32, 0, 50).bold('Orange!')`\n- [`ansi`](https://en.wikipedia.org/wiki/ANSI_escape_code#3/4_bit) - Example: `chalk.ansi(31).bgAnsi(93)('red on yellowBright')`\n- [`ansi256`](https://en.wikipedia.org/wiki/ANSI_escape_code#8-bit) - Example: `chalk.bgAnsi256(194)('Honeydew, more or less')`\n\n## Windows\n\nIf you're on Windows, do yourself a favor and use [Windows Terminal](https://github.com/microsoft/terminal) instead of `cmd.exe`.\n\n## Origin story\n\n[colors.js](https://github.com/Marak/colors.js) used to be the most popular string styling module, but it has serious deficiencies like extending `String.prototype` which causes all kinds of [problems](https://github.com/yeoman/yo/issues/68) and the package is unmaintained. Although there are other packages, they either do too much or not enough. Chalk is a clean and focused alternative.\n\n## chalk for enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of chalk and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-chalk?utm_source=npm-chalk&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## Related\n\n- [chalk-cli](https://github.com/chalk/chalk-cli) - CLI for this module\n- [ansi-styles](https://github.com/chalk/ansi-styles) - ANSI escape codes for styling strings in the terminal\n- [supports-color](https://github.com/chalk/supports-color) - Detect whether a terminal supports color\n- [strip-ansi](https://github.com/chalk/strip-ansi) - Strip ANSI escape codes\n- [strip-ansi-stream](https://github.com/chalk/strip-ansi-stream) - Strip ANSI escape codes from a stream\n- [has-ansi](https://github.com/chalk/has-ansi) - Check if a string has ANSI escape codes\n- [ansi-regex](https://github.com/chalk/ansi-regex) - Regular expression for matching ANSI escape codes\n- [wrap-ansi](https://github.com/chalk/wrap-ansi) - Wordwrap a string with ANSI escape codes\n- [slice-ansi](https://github.com/chalk/slice-ansi) - Slice a string with ANSI escape codes\n- [color-convert](https://github.com/qix-/color-convert) - Converts colors between different models\n- [chalk-animation](https://github.com/bokub/chalk-animation) - Animate strings in the terminal\n- [gradient-string](https://github.com/bokub/gradient-string) - Apply color gradients to strings\n- [chalk-pipe](https://github.com/LitoMore/chalk-pipe) - Create chalk style schemes with simpler style strings\n- [terminal-link](https://github.com/sindresorhus/terminal-link) - Create clickable links in the terminal\n\n## Maintainers\n\n- [Sindre Sorhus](https://github.com/sindresorhus)\n- [Josh Junon](https://github.com/qix-)\n/license\u0004UMIT License\n\nCopyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)\n\nPermission 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:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE 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.\n/source/index.js\u0017'use strict';\nconst ansiStyles = require('ansi-styles');\nconst {stdout: stdoutColor, stderr: stderrColor} = require('supports-color');\nconst {\n\tstringReplaceAll,\n\tstringEncaseCRLFWithFirstIndex\n} = require('./util');\n\nconst {isArray} = Array;\n\n// `supportsColor.level` → `ansiStyles.color[name]` mapping\nconst levelMapping = [\n\t'ansi',\n\t'ansi',\n\t'ansi256',\n\t'ansi16m'\n];\n\nconst styles = Object.create(null);\n\nconst applyOptions = (object, options = {}) => {\n\tif (options.level && !(Number.isInteger(options.level) && options.level >= 0 && options.level <= 3)) {\n\t\tthrow new Error('The `level` option should be an integer from 0 to 3');\n\t}\n\n\t// Detect level if not set manually\n\tconst colorLevel = stdoutColor ? stdoutColor.level : 0;\n\tobject.level = options.level === undefined ? colorLevel : options.level;\n};\n\nclass ChalkClass {\n\tconstructor(options) {\n\t\t// eslint-disable-next-line no-constructor-return\n\t\treturn chalkFactory(options);\n\t}\n}\n\nconst chalkFactory = options => {\n\tconst chalk = {};\n\tapplyOptions(chalk, options);\n\n\tchalk.template = (...arguments_) => chalkTag(chalk.template, ...arguments_);\n\n\tObject.setPrototypeOf(chalk, Chalk.prototype);\n\tObject.setPrototypeOf(chalk.template, chalk);\n\n\tchalk.template.constructor = () => {\n\t\tthrow new Error('`chalk.constructor()` is deprecated. Use `new chalk.Instance()` instead.');\n\t};\n\n\tchalk.template.Instance = ChalkClass;\n\n\treturn chalk.template;\n};\n\nfunction Chalk(options) {\n\treturn chalkFactory(options);\n}\n\nfor (const [styleName, style] of Object.entries(ansiStyles)) {\n\tstyles[styleName] = {\n\t\tget() {\n\t\t\tconst builder = createBuilder(this, createStyler(style.open, style.close, this._styler), this._isEmpty);\n\t\t\tObject.defineProperty(this, styleName, {value: builder});\n\t\t\treturn builder;\n\t\t}\n\t};\n}\n\nstyles.visible = {\n\tget() {\n\t\tconst builder = createBuilder(this, this._styler, true);\n\t\tObject.defineProperty(this, 'visible', {value: builder});\n\t\treturn builder;\n\t}\n};\n\nconst usedModels = ['rgb', 'hex', 'keyword', 'hsl', 'hsv', 'hwb', 'ansi', 'ansi256'];\n\nfor (const model of usedModels) {\n\tstyles[model] = {\n\t\tget() {\n\t\t\tconst {level} = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(ansiStyles.color[levelMapping[level]][model](...arguments_), ansiStyles.color.close, this._styler);\n\t\t\t\treturn createBuilder(this, styler, this._isEmpty);\n\t\t\t};\n\t\t}\n\t};\n}\n\nfor (const model of usedModels) {\n\tconst bgModel = 'bg' + model[0].toUpperCase() + model.slice(1);\n\tstyles[bgModel] = {\n\t\tget() {\n\t\t\tconst {level} = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(ansiStyles.bgColor[levelMapping[level]][model](...arguments_), ansiStyles.bgColor.close, this._styler);\n\t\t\t\treturn createBuilder(this, styler, this._isEmpty);\n\t\t\t};\n\t\t}\n\t};\n}\n\nconst proto = Object.defineProperties(() => {}, {\n\t...styles,\n\tlevel: {\n\t\tenumerable: true,\n\t\tget() {\n\t\t\treturn this._generator.level;\n\t\t},\n\t\tset(level) {\n\t\t\tthis._generator.level = level;\n\t\t}\n\t}\n});\n\nconst createStyler = (open, close, parent) => {\n\tlet openAll;\n\tlet closeAll;\n\tif (parent === undefined) {\n\t\topenAll = open;\n\t\tcloseAll = close;\n\t} else {\n\t\topenAll = parent.openAll + open;\n\t\tcloseAll = close + parent.closeAll;\n\t}\n\n\treturn {\n\t\topen,\n\t\tclose,\n\t\topenAll,\n\t\tcloseAll,\n\t\tparent\n\t};\n};\n\nconst createBuilder = (self, _styler, _isEmpty) => {\n\tconst builder = (...arguments_) => {\n\t\tif (isArray(arguments_[0]) && isArray(arguments_[0].raw)) {\n\t\t\t// Called as a template literal, for example: chalk.red`2 + 3 = {bold ${2+3}}`\n\t\t\treturn applyStyle(builder, chalkTag(builder, ...arguments_));\n\t\t}\n\n\t\t// Single argument is hot path, implicit coercion is faster than anything\n\t\t// eslint-disable-next-line no-implicit-coercion\n\t\treturn applyStyle(builder, (arguments_.length === 1) ? ('' + arguments_[0]) : arguments_.join(' '));\n\t};\n\n\t// We alter the prototype because we must return a function, but there is\n\t// no way to create a function with a different prototype\n\tObject.setPrototypeOf(builder, proto);\n\n\tbuilder._generator = self;\n\tbuilder._styler = _styler;\n\tbuilder._isEmpty = _isEmpty;\n\n\treturn builder;\n};\n\nconst applyStyle = (self, string) => {\n\tif (self.level <= 0 || !string) {\n\t\treturn self._isEmpty ? '' : string;\n\t}\n\n\tlet styler = self._styler;\n\n\tif (styler === undefined) {\n\t\treturn string;\n\t}\n\n\tconst {openAll, closeAll} = styler;\n\tif (string.indexOf('\\u001B') !== -1) {\n\t\twhile (styler !== undefined) {\n\t\t\t// Replace any instances already present with a re-opening code\n\t\t\t// otherwise only the part of the string until said closing code\n\t\t\t// will be colored, and the rest will simply be 'plain'.\n\t\t\tstring = stringReplaceAll(string, styler.close, styler.open);\n\n\t\t\tstyler = styler.parent;\n\t\t}\n\t}\n\n\t// We can move both next actions out of loop, because remaining actions in loop won't have\n\t// any/visible effect on parts we add here. Close the styling before a linebreak and reopen\n\t// after next line to fix a bleed issue on macOS: https://github.com/chalk/chalk/pull/92\n\tconst lfIndex = string.indexOf('\\n');\n\tif (lfIndex !== -1) {\n\t\tstring = stringEncaseCRLFWithFirstIndex(string, closeAll, openAll, lfIndex);\n\t}\n\n\treturn openAll + string + closeAll;\n};\n\nlet template;\nconst chalkTag = (chalk, ...strings) => {\n\tconst [firstString] = strings;\n\n\tif (!isArray(firstString) || !isArray(firstString.raw)) {\n\t\t// If chalk() was called by itself or with a string,\n\t\t// return the string itself as a string.\n\t\treturn strings.join(' ');\n\t}\n\n\tconst arguments_ = strings.slice(1);\n\tconst parts = [firstString.raw[0]];\n\n\tfor (let i = 1; i < firstString.length; i++) {\n\t\tparts.push(\n\t\t\tString(arguments_[i - 1]).replace(/[{}\\\\]/g, '\\\\$&'),\n\t\t\tString(firstString.raw[i])\n\t\t);\n\t}\n\n\tif (template === undefined) {\n\t\ttemplate = require('./templates');\n\t}\n\n\treturn template(chalk, parts.join(''));\n};\n\nObject.defineProperties(Chalk.prototype, styles);\n\nconst chalk = Chalk(); // eslint-disable-line new-cap\nchalk.supportsColor = stdoutColor;\nchalk.stderr = Chalk({level: stderrColor ? stderrColor.level : 0}); // eslint-disable-line new-cap\nchalk.stderr.supportsColor = stderrColor;\n\nmodule.exports = chalk;\n/source/util.js\u0004\u000b'use strict';\n\nconst stringReplaceAll = (string, substring, replacer) => {\n\tlet index = string.indexOf(substring);\n\tif (index === -1) {\n\t\treturn string;\n\t}\n\n\tconst substringLength = substring.length;\n\tlet endIndex = 0;\n\tlet returnValue = '';\n\tdo {\n\t\treturnValue += string.substr(endIndex, index - endIndex) + substring + replacer;\n\t\tendIndex = index + substringLength;\n\t\tindex = string.indexOf(substring, endIndex);\n\t} while (index !== -1);\n\n\treturnValue += string.substr(endIndex);\n\treturn returnValue;\n};\n\nconst stringEncaseCRLFWithFirstIndex = (string, prefix, postfix, index) => {\n\tlet endIndex = 0;\n\tlet returnValue = '';\n\tdo {\n\t\tconst gotCR = string[index - 1] === '\\r';\n\t\treturnValue += string.substr(endIndex, (gotCR ? index - 1 : index) - endIndex) + prefix + (gotCR ? '\\r\\n' : '\\n') + postfix;\n\t\tendIndex = index + 1;\n\t\tindex = string.indexOf('\\n', endIndex);\n\t} while (index !== -1);\n\n\treturnValue += string.substr(endIndex);\n\treturn returnValue;\n};\n\nmodule.exports = {\n\tstringReplaceAll,\n\tstringEncaseCRLFWithFirstIndex\n};\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/Y2hhbGtANS4yLjA=",
    "content": "*/source/vendor/supports-color/browser.d.ts$export {default} from './index.js';\n/source/utilities.js\u0003// TODO: When targeting Node.js 16, use `String.prototype.replaceAll`.\nexport function stringReplaceAll(string, substring, replacer) {\n\tlet index = string.indexOf(substring);\n\tif (index === -1) {\n\t\treturn string;\n\t}\n\n\tconst substringLength = substring.length;\n\tlet endIndex = 0;\n\tlet returnValue = '';\n\tdo {\n\t\treturnValue += string.slice(endIndex, index) + substring + replacer;\n\t\tendIndex = index + substringLength;\n\t\tindex = string.indexOf(substring, endIndex);\n\t} while (index !== -1);\n\n\treturnValue += string.slice(endIndex);\n\treturn returnValue;\n}\n\nexport function stringEncaseCRLFWithFirstIndex(string, prefix, postfix, index) {\n\tlet endIndex = 0;\n\tlet returnValue = '';\n\tdo {\n\t\tconst gotCR = string[index - 1] === '\\r';\n\t\treturnValue += string.slice(endIndex, (gotCR ? index - 1 : index)) + prefix + (gotCR ? '\\r\\n' : '\\n') + postfix;\n\t\tendIndex = index + 1;\n\t\tindex = string.indexOf('\\n', endIndex);\n\t} while (index !== -1);\n\n\treturnValue += string.slice(endIndex);\n\treturn returnValue;\n}\n/package.json\u0006%{\n\t\"name\": \"chalk\",\n\t\"version\": \"5.2.0\",\n\t\"description\": \"Terminal string styling done right\",\n\t\"license\": \"MIT\",\n\t\"repository\": \"chalk/chalk\",\n\t\"funding\": \"https://github.com/chalk/chalk?sponsor=1\",\n\t\"type\": \"module\",\n\t\"main\": \"./source/index.js\",\n\t\"exports\": \"./source/index.js\",\n\t\"imports\": {\n\t\t\"#ansi-styles\": \"./source/vendor/ansi-styles/index.js\",\n\t\t\"#supports-color\": {\n\t\t\t\"node\": \"./source/vendor/supports-color/index.js\",\n\t\t\t\"default\": \"./source/vendor/supports-color/browser.js\"\n\t\t}\n\t},\n\t\"types\": \"./source/index.d.ts\",\n\t\"engines\": {\n\t\t\"node\": \"^12.17.0 || ^14.13 || >=16.0.0\"\n\t},\n\t\"scripts\": {\n\t\t\"test\": \"xo && c8 ava && tsd\",\n\t\t\"bench\": \"matcha benchmark.js\"\n\t},\n\t\"files\": [\n\t\t\"source\",\n\t\t\"!source/index.test-d.ts\"\n\t],\n\t\"keywords\": [\n\t\t\"color\",\n\t\t\"colour\",\n\t\t\"colors\",\n\t\t\"terminal\",\n\t\t\"console\",\n\t\t\"cli\",\n\t\t\"string\",\n\t\t\"ansi\",\n\t\t\"style\",\n\t\t\"styles\",\n\t\t\"tty\",\n\t\t\"formatting\",\n\t\t\"rgb\",\n\t\t\"256\",\n\t\t\"shell\",\n\t\t\"xterm\",\n\t\t\"log\",\n\t\t\"logging\",\n\t\t\"command-line\",\n\t\t\"text\"\n\t],\n\t\"devDependencies\": {\n\t\t\"@types/node\": \"^16.11.10\",\n\t\t\"ava\": \"^3.15.0\",\n\t\t\"c8\": \"^7.10.0\",\n\t\t\"color-convert\": \"^2.0.1\",\n\t\t\"execa\": \"^6.0.0\",\n\t\t\"log-update\": \"^5.0.0\",\n\t\t\"matcha\": \"^0.7.0\",\n\t\t\"tsd\": \"^0.19.0\",\n\t\t\"xo\": \"^0.53.0\",\n\t\t\"yoctodelay\": \"^2.0.0\"\n\t},\n\t\"xo\": {\n\t\t\"rules\": {\n\t\t\t\"unicorn/prefer-string-slice\": \"off\",\n\t\t\t\"@typescript-eslint/consistent-type-imports\": \"off\",\n\t\t\t\"@typescript-eslint/consistent-type-exports\": \"off\",\n\t\t\t\"@typescript-eslint/consistent-type-definitions\": \"off\"\n\t\t}\n\t},\n\t\"c8\": {\n\t\t\"reporter\": [\n\t\t\t\"text\",\n\t\t\t\"lcov\"\n\t\t],\n\t\t\"exclude\": [\n\t\t\t\"source/vendor\"\n\t\t]\n\t}\n}\n(/source/vendor/supports-color/browser.js\u0002\u0014/* eslint-env browser */\n\nconst level = (() => {\n\tif (navigator.userAgentData) {\n\t\tconst brand = navigator.userAgentData.brands.find(({brand}) => brand === 'Chromium');\n\t\tif (brand && brand.version > 93) {\n\t\t\treturn 3;\n\t\t}\n\t}\n\n\tif (/\\b(Chrome|Chromium)\\//.test(navigator.userAgent)) {\n\t\treturn 1;\n\t}\n\n\treturn 0;\n})();\n\nconst colorSupport = level !== 0 && {\n\tlevel,\n\thasBasic: true,\n\thas256: level >= 2,\n\thas16m: level >= 3,\n};\n\nconst supportsColor = {\n\tstdout: colorSupport,\n\tstderr: colorSupport,\n};\n\nexport default supportsColor;\n#/source/vendor/ansi-styles/index.js\u0014const ANSI_BACKGROUND_OFFSET = 10;\n\nconst wrapAnsi16 = (offset = 0) => code => `\\u001B[${code + offset}m`;\n\nconst wrapAnsi256 = (offset = 0) => code => `\\u001B[${38 + offset};5;${code}m`;\n\nconst wrapAnsi16m = (offset = 0) => (red, green, blue) => `\\u001B[${38 + offset};2;${red};${green};${blue}m`;\n\nconst styles = {\n\tmodifier: {\n\t\treset: [0, 0],\n\t\t// 21 isn't widely supported and 22 does the same thing\n\t\tbold: [1, 22],\n\t\tdim: [2, 22],\n\t\titalic: [3, 23],\n\t\tunderline: [4, 24],\n\t\toverline: [53, 55],\n\t\tinverse: [7, 27],\n\t\thidden: [8, 28],\n\t\tstrikethrough: [9, 29],\n\t},\n\tcolor: {\n\t\tblack: [30, 39],\n\t\tred: [31, 39],\n\t\tgreen: [32, 39],\n\t\tyellow: [33, 39],\n\t\tblue: [34, 39],\n\t\tmagenta: [35, 39],\n\t\tcyan: [36, 39],\n\t\twhite: [37, 39],\n\n\t\t// Bright color\n\t\tblackBright: [90, 39],\n\t\tgray: [90, 39], // Alias of `blackBright`\n\t\tgrey: [90, 39], // Alias of `blackBright`\n\t\tredBright: [91, 39],\n\t\tgreenBright: [92, 39],\n\t\tyellowBright: [93, 39],\n\t\tblueBright: [94, 39],\n\t\tmagentaBright: [95, 39],\n\t\tcyanBright: [96, 39],\n\t\twhiteBright: [97, 39],\n\t},\n\tbgColor: {\n\t\tbgBlack: [40, 49],\n\t\tbgRed: [41, 49],\n\t\tbgGreen: [42, 49],\n\t\tbgYellow: [43, 49],\n\t\tbgBlue: [44, 49],\n\t\tbgMagenta: [45, 49],\n\t\tbgCyan: [46, 49],\n\t\tbgWhite: [47, 49],\n\n\t\t// Bright color\n\t\tbgBlackBright: [100, 49],\n\t\tbgGray: [100, 49], // Alias of `bgBlackBright`\n\t\tbgGrey: [100, 49], // Alias of `bgBlackBright`\n\t\tbgRedBright: [101, 49],\n\t\tbgGreenBright: [102, 49],\n\t\tbgYellowBright: [103, 49],\n\t\tbgBlueBright: [104, 49],\n\t\tbgMagentaBright: [105, 49],\n\t\tbgCyanBright: [106, 49],\n\t\tbgWhiteBright: [107, 49],\n\t},\n};\n\nexport const modifierNames = Object.keys(styles.modifier);\nexport const foregroundColorNames = Object.keys(styles.color);\nexport const backgroundColorNames = Object.keys(styles.bgColor);\nexport const colorNames = [...foregroundColorNames, ...backgroundColorNames];\n\nfunction assembleStyles() {\n\tconst codes = new Map();\n\n\tfor (const [groupName, group] of Object.entries(styles)) {\n\t\tfor (const [styleName, style] of Object.entries(group)) {\n\t\t\tstyles[styleName] = {\n\t\t\t\topen: `\\u001B[${style[0]}m`,\n\t\t\t\tclose: `\\u001B[${style[1]}m`,\n\t\t\t};\n\n\t\t\tgroup[styleName] = styles[styleName];\n\n\t\t\tcodes.set(style[0], style[1]);\n\t\t}\n\n\t\tObject.defineProperty(styles, groupName, {\n\t\t\tvalue: group,\n\t\t\tenumerable: false,\n\t\t});\n\t}\n\n\tObject.defineProperty(styles, 'codes', {\n\t\tvalue: codes,\n\t\tenumerable: false,\n\t});\n\n\tstyles.color.close = '\\u001B[39m';\n\tstyles.bgColor.close = '\\u001B[49m';\n\n\tstyles.color.ansi = wrapAnsi16();\n\tstyles.color.ansi256 = wrapAnsi256();\n\tstyles.color.ansi16m = wrapAnsi16m();\n\tstyles.bgColor.ansi = wrapAnsi16(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi256 = wrapAnsi256(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi16m = wrapAnsi16m(ANSI_BACKGROUND_OFFSET);\n\n\t// From https://github.com/Qix-/color-convert/blob/3f0e0d4e92e235796ccb17f6e85c72094a651f49/conversions.js\n\tObject.defineProperties(styles, {\n\t\trgbToAnsi256: {\n\t\t\tvalue(red, green, blue) {\n\t\t\t\t// We use the extended greyscale palette here, with the exception of\n\t\t\t\t// black and white. normal palette only has 4 greyscale shades.\n\t\t\t\tif (red === green && green === blue) {\n\t\t\t\t\tif (red < 8) {\n\t\t\t\t\t\treturn 16;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (red > 248) {\n\t\t\t\t\t\treturn 231;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Math.round(((red - 8) / 247) * 24) + 232;\n\t\t\t\t}\n\n\t\t\t\treturn 16\n\t\t\t\t\t+ (36 * Math.round(red / 255 * 5))\n\t\t\t\t\t+ (6 * Math.round(green / 255 * 5))\n\t\t\t\t\t+ Math.round(blue / 255 * 5);\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToRgb: {\n\t\t\tvalue(hex) {\n\t\t\t\tconst matches = /[a-f\\d]{6}|[a-f\\d]{3}/i.exec(hex.toString(16));\n\t\t\t\tif (!matches) {\n\t\t\t\t\treturn [0, 0, 0];\n\t\t\t\t}\n\n\t\t\t\tlet [colorString] = matches;\n\n\t\t\t\tif (colorString.length === 3) {\n\t\t\t\t\tcolorString = [...colorString].map(character => character + character).join('');\n\t\t\t\t}\n\n\t\t\t\tconst integer = Number.parseInt(colorString, 16);\n\n\t\t\t\treturn [\n\t\t\t\t\t/* eslint-disable no-bitwise */\n\t\t\t\t\t(integer >> 16) & 0xFF,\n\t\t\t\t\t(integer >> 8) & 0xFF,\n\t\t\t\t\tinteger & 0xFF,\n\t\t\t\t\t/* eslint-enable no-bitwise */\n\t\t\t\t];\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi256: {\n\t\t\tvalue: hex => styles.rgbToAnsi256(...styles.hexToRgb(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t\tansi256ToAnsi: {\n\t\t\tvalue(code) {\n\t\t\t\tif (code < 8) {\n\t\t\t\t\treturn 30 + code;\n\t\t\t\t}\n\n\t\t\t\tif (code < 16) {\n\t\t\t\t\treturn 90 + (code - 8);\n\t\t\t\t}\n\n\t\t\t\tlet red;\n\t\t\t\tlet green;\n\t\t\t\tlet blue;\n\n\t\t\t\tif (code >= 232) {\n\t\t\t\t\tred = (((code - 232) * 10) + 8) / 255;\n\t\t\t\t\tgreen = red;\n\t\t\t\t\tblue = red;\n\t\t\t\t} else {\n\t\t\t\t\tcode -= 16;\n\n\t\t\t\t\tconst remainder = code % 36;\n\n\t\t\t\t\tred = Math.floor(code / 36) / 5;\n\t\t\t\t\tgreen = Math.floor(remainder / 6) / 5;\n\t\t\t\t\tblue = (remainder % 6) / 5;\n\t\t\t\t}\n\n\t\t\t\tconst value = Math.max(red, green, blue) * 2;\n\n\t\t\t\tif (value === 0) {\n\t\t\t\t\treturn 30;\n\t\t\t\t}\n\n\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\tlet result = 30 + ((Math.round(blue) << 2) | (Math.round(green) << 1) | Math.round(red));\n\n\t\t\t\tif (value === 2) {\n\t\t\t\t\tresult += 60;\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\trgbToAnsi: {\n\t\t\tvalue: (red, green, blue) => styles.ansi256ToAnsi(styles.rgbToAnsi256(red, green, blue)),\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi: {\n\t\t\tvalue: hex => styles.ansi256ToAnsi(styles.hexToAnsi256(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t});\n\n\treturn styles;\n}\n\nconst ansiStyles = assembleStyles();\n\nexport default ansiStyles;\n/readme.md,\u0012<h1 align=\"center\">\n\t<br>\n\t<br>\n\t<img width=\"320\" src=\"media/logo.svg\" alt=\"Chalk\">\n\t<br>\n\t<br>\n\t<br>\n</h1>\n\n> Terminal string styling done right\n\n[![Coverage Status](https://codecov.io/gh/chalk/chalk/branch/main/graph/badge.svg)](https://codecov.io/gh/chalk/chalk)\n[![npm dependents](https://badgen.net/npm/dependents/chalk)](https://www.npmjs.com/package/chalk?activeTab=dependents)\n[![Downloads](https://badgen.net/npm/dt/chalk)](https://www.npmjs.com/package/chalk)\n[![run on repl.it](https://img.shields.io/badge/Run_on_Replit-f26207?logo=replit&logoColor=white)](https://repl.it/github/chalk/chalk)\n\n![](media/screenshot.png)\n\n<br>\n\n---\n\n<div align=\"center\">\n\t<p>\n\t\t<p>\n\t\t\t<sup>\n\t\t\t\tSindre Sorhus' open source work is supported by the community on <a href=\"https://github.com/sponsors/sindresorhus\">GitHub Sponsors</a>\n\t\t\t</sup>\n\t\t</p>\n\t\t<sup>Special thanks to:</sup>\n\t\t<br>\n\t\t<br>\n\t\t<a href=\"https://standardresume.co/tech\">\n\t\t\t<img src=\"https://sindresorhus.com/assets/thanks/standard-resume-logo.svg\" width=\"160\">\n\t\t</a>\n\t\t<br>\n\t\t<br>\n\t\t<a href=\"https://retool.com/?utm_campaign=sindresorhus\">\n\t\t\t<img src=\"https://sindresorhus.com/assets/thanks/retool-logo.svg\" width=\"230\">\n\t\t</a>\n\t\t<br>\n\t\t<br>\n\t\t<a href=\"https://strapi.io/?ref=sindresorhus\">\n\t\t\t<div>\n\t\t\t\t<img src=\"https://sindresorhus.com/assets/thanks/strapi-logo-white-bg.png\" width=\"220\" alt=\"Strapi\">\n\t\t\t</div>\n\t\t\t<b>Strapi is the leading open-source headless CMS.</b>\n\t\t\t<div>\n\t\t\t\t<sup>It’s 100% JavaScript, fully customizable, and developer-first.</sup>\n\t\t\t</div>\n\t\t</a>\n\t\t<br>\n\t\t<br>\n\t\t<a href=\"https://www.stackaid.us/?utm_campaign=sindre\">\n\t\t\t<div>\n\t\t\t\t<img src=\"https://sindresorhus.com/assets/thanks/stackaid-logo.png\" width=\"230\" alt=\"StackAid\">\n\t\t\t</div>\n\t\t\t<b>Fund your open source dependencies</b>\n\t\t</a>\n\t\t<br>\n\t\t<br>\n\t</p>\n</div>\n\n---\n\n<br>\n\n## Highlights\n\n- Expressive API\n- Highly performant\n- No dependencies\n- Ability to nest styles\n- [256/Truecolor color support](#256-and-truecolor-color-support)\n- Auto-detects color support\n- Doesn't extend `String.prototype`\n- Clean and focused\n- Actively maintained\n- [Used by ~86,000 packages](https://www.npmjs.com/browse/depended/chalk) as of October 4, 2022\n\n## Install\n\n```sh\nnpm install chalk\n```\n\n**IMPORTANT:** Chalk 5 is ESM. If you want to use Chalk with TypeScript or a build tool, you will probably want to use Chalk 4 for now. [Read more.](https://github.com/chalk/chalk/releases/tag/v5.0.0)\n\n## Usage\n\n```js\nimport chalk from 'chalk';\n\nconsole.log(chalk.blue('Hello world!'));\n```\n\nChalk comes with an easy to use composable API where you just chain and nest the styles you want.\n\n```js\nimport chalk from 'chalk';\n\nconst log = console.log;\n\n// Combine styled and normal strings\nlog(chalk.blue('Hello') + ' World' + chalk.red('!'));\n\n// Compose multiple styles using the chainable API\nlog(chalk.blue.bgRed.bold('Hello world!'));\n\n// Pass in multiple arguments\nlog(chalk.blue('Hello', 'World!', 'Foo', 'bar', 'biz', 'baz'));\n\n// Nest styles\nlog(chalk.red('Hello', chalk.underline.bgBlue('world') + '!'));\n\n// Nest styles of the same type even (color, underline, background)\nlog(chalk.green(\n\t'I am a green line ' +\n\tchalk.blue.underline.bold('with a blue substring') +\n\t' that becomes green again!'\n));\n\n// ES2015 template literal\nlog(`\nCPU: ${chalk.red('90%')}\nRAM: ${chalk.green('40%')}\nDISK: ${chalk.yellow('70%')}\n`);\n\n// Use RGB colors in terminal emulators that support it.\nlog(chalk.rgb(123, 45, 67).underline('Underlined reddish color'));\nlog(chalk.hex('#DEADED').bold('Bold gray!'));\n```\n\nEasily define your own themes:\n\n```js\nimport chalk from 'chalk';\n\nconst error = chalk.bold.red;\nconst warning = chalk.hex('#FFA500'); // Orange color\n\nconsole.log(error('Error!'));\nconsole.log(warning('Warning!'));\n```\n\nTake advantage of console.log [string substitution](https://nodejs.org/docs/latest/api/console.html#console_console_log_data_args):\n\n```js\nimport chalk from 'chalk';\n\nconst name = 'Sindre';\nconsole.log(chalk.green('Hello %s'), name);\n//=> 'Hello Sindre'\n```\n\n## API\n\n### chalk.`<style>[.<style>...](string, [string...])`\n\nExample: `chalk.red.bold.underline('Hello', 'world');`\n\nChain [styles](#styles) and call the last one as a method with a string argument. Order doesn't matter, and later styles take precedent in case of a conflict. This simply means that `chalk.red.yellow.green` is equivalent to `chalk.green`.\n\nMultiple arguments will be separated by space.\n\n### chalk.level\n\nSpecifies the level of color support.\n\nColor support is automatically detected, but you can override it by setting the `level` property. You should however only do this in your own code as it applies globally to all Chalk consumers.\n\nIf you need to change this in a reusable module, create a new instance:\n\n```js\nimport {Chalk} from 'chalk';\n\nconst customChalk = new Chalk({level: 0});\n```\n\n| Level | Description |\n| :---: | :--- |\n| `0` | All colors disabled |\n| `1` | Basic color support (16 colors) |\n| `2` | 256 color support |\n| `3` | Truecolor support (16 million colors) |\n\n### supportsColor\n\nDetect whether the terminal [supports color](https://github.com/chalk/supports-color). Used internally and handled for you, but exposed for convenience.\n\nCan be overridden by the user with the flags `--color` and `--no-color`. For situations where using `--color` is not possible, use the environment variable `FORCE_COLOR=1` (level 1), `FORCE_COLOR=2` (level 2), or `FORCE_COLOR=3` (level 3) to forcefully enable color, or `FORCE_COLOR=0` to forcefully disable. The use of `FORCE_COLOR` overrides all other color support checks.\n\nExplicit 256/Truecolor mode can be enabled using the `--color=256` and `--color=16m` flags, respectively.\n\n### chalkStderr and supportsColorStderr\n\n`chalkStderr` contains a separate instance configured with color support detected for `stderr` stream instead of `stdout`. Override rules from `supportsColor` apply to this too. `supportsColorStderr` is exposed for convenience.\n\n### modifierNames, foregroundColorNames, backgroundColorNames, and colorNames\n\nAll supported style strings are exposed as an array of strings for convenience. `colorNames` is the combination of `foregroundColorNames` and `backgroundColorNames`.\n\nThis can be useful if you wrap Chalk and need to validate input:\n\n```js\nimport {modifierNames, foregroundColorNames} from 'chalk';\n\nconsole.log(modifierNames.includes('bold'));\n//=> true\n\nconsole.log(foregroundColorNames.includes('pink'));\n//=> false\n```\n\n## Styles\n\n### Modifiers\n\n- `reset` - Reset the current style.\n- `bold` - Make the text bold.\n- `dim` - Make the text have lower opacity.\n- `italic` - Make the text italic. *(Not widely supported)*\n- `underline` - Put a horizontal line below the text. *(Not widely supported)*\n- `overline` - Put a horizontal line above the text. *(Not widely supported)*\n- `inverse`- Invert background and foreground colors.\n- `hidden` - Print the text but make it invisible.\n- `strikethrough` - Puts a horizontal line through the center of the text. *(Not widely supported)*\n- `visible`- Print the text only when Chalk has a color level above zero. Can be useful for things that are purely cosmetic.\n\n### Colors\n\n- `black`\n- `red`\n- `green`\n- `yellow`\n- `blue`\n- `magenta`\n- `cyan`\n- `white`\n- `blackBright` (alias: `gray`, `grey`)\n- `redBright`\n- `greenBright`\n- `yellowBright`\n- `blueBright`\n- `magentaBright`\n- `cyanBright`\n- `whiteBright`\n\n### Background colors\n\n- `bgBlack`\n- `bgRed`\n- `bgGreen`\n- `bgYellow`\n- `bgBlue`\n- `bgMagenta`\n- `bgCyan`\n- `bgWhite`\n- `bgBlackBright` (alias: `bgGray`, `bgGrey`)\n- `bgRedBright`\n- `bgGreenBright`\n- `bgYellowBright`\n- `bgBlueBright`\n- `bgMagentaBright`\n- `bgCyanBright`\n- `bgWhiteBright`\n\n## 256 and Truecolor color support\n\nChalk supports 256 colors and [Truecolor](https://github.com/termstandard/colors) (16 million colors) on supported terminal apps.\n\nColors are downsampled from 16 million RGB values to an ANSI color format that is supported by the terminal emulator (or by specifying `{level: n}` as a Chalk option). For example, Chalk configured to run at level 1 (basic color support) will downsample an RGB value of #FF0000 (red) to 31 (ANSI escape for red).\n\nExamples:\n\n- `chalk.hex('#DEADED').underline('Hello, world!')`\n- `chalk.rgb(15, 100, 204).inverse('Hello!')`\n\nBackground versions of these models are prefixed with `bg` and the first level of the module capitalized (e.g. `hex` for foreground colors and `bgHex` for background colors).\n\n- `chalk.bgHex('#DEADED').underline('Hello, world!')`\n- `chalk.bgRgb(15, 100, 204).inverse('Hello!')`\n\nThe following color models can be used:\n\n- [`rgb`](https://en.wikipedia.org/wiki/RGB_color_model) - Example: `chalk.rgb(255, 136, 0).bold('Orange!')`\n- [`hex`](https://en.wikipedia.org/wiki/Web_colors#Hex_triplet) - Example: `chalk.hex('#FF8800').bold('Orange!')`\n- [`ansi256`](https://en.wikipedia.org/wiki/ANSI_escape_code#8-bit) - Example: `chalk.bgAnsi256(194)('Honeydew, more or less')`\n\n## Browser support\n\nSince Chrome 69, ANSI escape codes are natively supported in the developer console.\n\n## Windows\n\nIf you're on Windows, do yourself a favor and use [Windows Terminal](https://github.com/microsoft/terminal) instead of `cmd.exe`.\n\n## Origin story\n\n[colors.js](https://github.com/Marak/colors.js) used to be the most popular string styling module, but it has serious deficiencies like extending `String.prototype` which causes all kinds of [problems](https://github.com/yeoman/yo/issues/68) and the package is unmaintained. Although there are other packages, they either do too much or not enough. Chalk is a clean and focused alternative.\n\n## Related\n\n- [chalk-template](https://github.com/chalk/chalk-template) - [Tagged template literals](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#tagged_templates) support for this module\n- [chalk-cli](https://github.com/chalk/chalk-cli) - CLI for this module\n- [ansi-styles](https://github.com/chalk/ansi-styles) - ANSI escape codes for styling strings in the terminal\n- [supports-color](https://github.com/chalk/supports-color) - Detect whether a terminal supports color\n- [strip-ansi](https://github.com/chalk/strip-ansi) - Strip ANSI escape codes\n- [strip-ansi-stream](https://github.com/chalk/strip-ansi-stream) - Strip ANSI escape codes from a stream\n- [has-ansi](https://github.com/chalk/has-ansi) - Check if a string has ANSI escape codes\n- [ansi-regex](https://github.com/chalk/ansi-regex) - Regular expression for matching ANSI escape codes\n- [wrap-ansi](https://github.com/chalk/wrap-ansi) - Wordwrap a string with ANSI escape codes\n- [slice-ansi](https://github.com/chalk/slice-ansi) - Slice a string with ANSI escape codes\n- [color-convert](https://github.com/qix-/color-convert) - Converts colors between different models\n- [chalk-animation](https://github.com/bokub/chalk-animation) - Animate strings in the terminal\n- [gradient-string](https://github.com/bokub/gradient-string) - Apply color gradients to strings\n- [chalk-pipe](https://github.com/LitoMore/chalk-pipe) - Create chalk style schemes with simpler style strings\n- [terminal-link](https://github.com/sindresorhus/terminal-link) - Create clickable links in the terminal\n\n## Maintainers\n\n- [Sindre Sorhus](https://github.com/sindresorhus)\n- [Josh Junon](https://github.com/qix-)\n/source/index.js\u0017\u000eimport ansiStyles from '#ansi-styles';\nimport supportsColor from '#supports-color';\nimport { // eslint-disable-line import/order\n\tstringReplaceAll,\n\tstringEncaseCRLFWithFirstIndex,\n} from './utilities.js';\n\nconst {stdout: stdoutColor, stderr: stderrColor} = supportsColor;\n\nconst GENERATOR = Symbol('GENERATOR');\nconst STYLER = Symbol('STYLER');\nconst IS_EMPTY = Symbol('IS_EMPTY');\n\n// `supportsColor.level` → `ansiStyles.color[name]` mapping\nconst levelMapping = [\n\t'ansi',\n\t'ansi',\n\t'ansi256',\n\t'ansi16m',\n];\n\nconst styles = Object.create(null);\n\nconst applyOptions = (object, options = {}) => {\n\tif (options.level && !(Number.isInteger(options.level) && options.level >= 0 && options.level <= 3)) {\n\t\tthrow new Error('The `level` option should be an integer from 0 to 3');\n\t}\n\n\t// Detect level if not set manually\n\tconst colorLevel = stdoutColor ? stdoutColor.level : 0;\n\tobject.level = options.level === undefined ? colorLevel : options.level;\n};\n\nexport class Chalk {\n\tconstructor(options) {\n\t\t// eslint-disable-next-line no-constructor-return\n\t\treturn chalkFactory(options);\n\t}\n}\n\nconst chalkFactory = options => {\n\tconst chalk = (...strings) => strings.join(' ');\n\tapplyOptions(chalk, options);\n\n\tObject.setPrototypeOf(chalk, createChalk.prototype);\n\n\treturn chalk;\n};\n\nfunction createChalk(options) {\n\treturn chalkFactory(options);\n}\n\nObject.setPrototypeOf(createChalk.prototype, Function.prototype);\n\nfor (const [styleName, style] of Object.entries(ansiStyles)) {\n\tstyles[styleName] = {\n\t\tget() {\n\t\t\tconst builder = createBuilder(this, createStyler(style.open, style.close, this[STYLER]), this[IS_EMPTY]);\n\t\t\tObject.defineProperty(this, styleName, {value: builder});\n\t\t\treturn builder;\n\t\t},\n\t};\n}\n\nstyles.visible = {\n\tget() {\n\t\tconst builder = createBuilder(this, this[STYLER], true);\n\t\tObject.defineProperty(this, 'visible', {value: builder});\n\t\treturn builder;\n\t},\n};\n\nconst getModelAnsi = (model, level, type, ...arguments_) => {\n\tif (model === 'rgb') {\n\t\tif (level === 'ansi16m') {\n\t\t\treturn ansiStyles[type].ansi16m(...arguments_);\n\t\t}\n\n\t\tif (level === 'ansi256') {\n\t\t\treturn ansiStyles[type].ansi256(ansiStyles.rgbToAnsi256(...arguments_));\n\t\t}\n\n\t\treturn ansiStyles[type].ansi(ansiStyles.rgbToAnsi(...arguments_));\n\t}\n\n\tif (model === 'hex') {\n\t\treturn getModelAnsi('rgb', level, type, ...ansiStyles.hexToRgb(...arguments_));\n\t}\n\n\treturn ansiStyles[type][model](...arguments_);\n};\n\nconst usedModels = ['rgb', 'hex', 'ansi256'];\n\nfor (const model of usedModels) {\n\tstyles[model] = {\n\t\tget() {\n\t\t\tconst {level} = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(getModelAnsi(model, levelMapping[level], 'color', ...arguments_), ansiStyles.color.close, this[STYLER]);\n\t\t\t\treturn createBuilder(this, styler, this[IS_EMPTY]);\n\t\t\t};\n\t\t},\n\t};\n\n\tconst bgModel = 'bg' + model[0].toUpperCase() + model.slice(1);\n\tstyles[bgModel] = {\n\t\tget() {\n\t\t\tconst {level} = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(getModelAnsi(model, levelMapping[level], 'bgColor', ...arguments_), ansiStyles.bgColor.close, this[STYLER]);\n\t\t\t\treturn createBuilder(this, styler, this[IS_EMPTY]);\n\t\t\t};\n\t\t},\n\t};\n}\n\nconst proto = Object.defineProperties(() => {}, {\n\t...styles,\n\tlevel: {\n\t\tenumerable: true,\n\t\tget() {\n\t\t\treturn this[GENERATOR].level;\n\t\t},\n\t\tset(level) {\n\t\t\tthis[GENERATOR].level = level;\n\t\t},\n\t},\n});\n\nconst createStyler = (open, close, parent) => {\n\tlet openAll;\n\tlet closeAll;\n\tif (parent === undefined) {\n\t\topenAll = open;\n\t\tcloseAll = close;\n\t} else {\n\t\topenAll = parent.openAll + open;\n\t\tcloseAll = close + parent.closeAll;\n\t}\n\n\treturn {\n\t\topen,\n\t\tclose,\n\t\topenAll,\n\t\tcloseAll,\n\t\tparent,\n\t};\n};\n\nconst createBuilder = (self, _styler, _isEmpty) => {\n\t// Single argument is hot path, implicit coercion is faster than anything\n\t// eslint-disable-next-line no-implicit-coercion\n\tconst builder = (...arguments_) => applyStyle(builder, (arguments_.length === 1) ? ('' + arguments_[0]) : arguments_.join(' '));\n\n\t// We alter the prototype because we must return a function, but there is\n\t// no way to create a function with a different prototype\n\tObject.setPrototypeOf(builder, proto);\n\n\tbuilder[GENERATOR] = self;\n\tbuilder[STYLER] = _styler;\n\tbuilder[IS_EMPTY] = _isEmpty;\n\n\treturn builder;\n};\n\nconst applyStyle = (self, string) => {\n\tif (self.level <= 0 || !string) {\n\t\treturn self[IS_EMPTY] ? '' : string;\n\t}\n\n\tlet styler = self[STYLER];\n\n\tif (styler === undefined) {\n\t\treturn string;\n\t}\n\n\tconst {openAll, closeAll} = styler;\n\tif (string.includes('\\u001B')) {\n\t\twhile (styler !== undefined) {\n\t\t\t// Replace any instances already present with a re-opening code\n\t\t\t// otherwise only the part of the string until said closing code\n\t\t\t// will be colored, and the rest will simply be 'plain'.\n\t\t\tstring = stringReplaceAll(string, styler.close, styler.open);\n\n\t\t\tstyler = styler.parent;\n\t\t}\n\t}\n\n\t// We can move both next actions out of loop, because remaining actions in loop won't have\n\t// any/visible effect on parts we add here. Close the styling before a linebreak and reopen\n\t// after next line to fix a bleed issue on macOS: https://github.com/chalk/chalk/pull/92\n\tconst lfIndex = string.indexOf('\\n');\n\tif (lfIndex !== -1) {\n\t\tstring = stringEncaseCRLFWithFirstIndex(string, closeAll, openAll, lfIndex);\n\t}\n\n\treturn openAll + string + closeAll;\n};\n\nObject.defineProperties(createChalk.prototype, styles);\n\nconst chalk = createChalk();\nexport const chalkStderr = createChalk({level: stderrColor ? stderrColor.level : 0});\n\nexport {\n\tmodifierNames,\n\tforegroundColorNames,\n\tbackgroundColorNames,\n\tcolorNames,\n\n\t// TODO: Remove these aliases in the next major version\n\tmodifierNames as modifiers,\n\tforegroundColorNames as foregroundColors,\n\tbackgroundColorNames as backgroundColors,\n\tcolorNames as colors,\n} from './vendor/ansi-styles/index.js';\n\nexport {\n\tstdoutColor as supportsColor,\n\tstderrColor as supportsColorStderr,\n};\n\nexport default chalk;\n(/source/vendor/supports-color/index.d.ts\u0003import type {WriteStream} from 'node:tty';\n\nexport type Options = {\n\t/**\n\tWhether `process.argv` should be sniffed for `--color` and `--no-color` flags.\n\n\t@default true\n\t*/\n\treadonly sniffFlags?: boolean;\n};\n\n/**\nLevels:\n- `0` - All colors disabled.\n- `1` - Basic 16 colors support.\n- `2` - ANSI 256 colors support.\n- `3` - Truecolor 16 million colors support.\n*/\nexport type ColorSupportLevel = 0 | 1 | 2 | 3;\n\n/**\nDetect whether the terminal supports color.\n*/\nexport type ColorSupport = {\n\t/**\n\tThe color level.\n\t*/\n\tlevel: ColorSupportLevel;\n\n\t/**\n\tWhether basic 16 colors are supported.\n\t*/\n\thasBasic: boolean;\n\n\t/**\n\tWhether ANSI 256 colors are supported.\n\t*/\n\thas256: boolean;\n\n\t/**\n\tWhether Truecolor 16 million colors are supported.\n\t*/\n\thas16m: boolean;\n};\n\nexport type ColorInfo = ColorSupport | false;\n\nexport function createSupportsColor(stream?: WriteStream, options?: Options): ColorInfo;\n\ndeclare const supportsColor: {\n\tstdout: ColorInfo;\n\tstderr: ColorInfo;\n};\n\nexport default supportsColor;\n/license\u0004]MIT License\n\nCopyright (c) Sindre Sorhus <sindresorhus@gmail.com> (https://sindresorhus.com)\n\nPermission 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:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE 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.\n%/source/vendor/ansi-styles/index.d.ts\u0014Nexport interface CSPair { // eslint-disable-line @typescript-eslint/naming-convention\n\t/**\n\tThe ANSI terminal control sequence for starting this style.\n\t*/\n\treadonly open: string;\n\n\t/**\n\tThe ANSI terminal control sequence for ending this style.\n\t*/\n\treadonly close: string;\n}\n\nexport interface ColorBase {\n\t/**\n\tThe ANSI terminal control sequence for ending this color.\n\t*/\n\treadonly close: string;\n\n\tansi(code: number): string;\n\n\tansi256(code: number): string;\n\n\tansi16m(red: number, green: number, blue: number): string;\n}\n\nexport interface Modifier {\n\t/**\n\tResets the current color chain.\n\t*/\n\treadonly reset: CSPair;\n\n\t/**\n\tMake text bold.\n\t*/\n\treadonly bold: CSPair;\n\n\t/**\n\tEmitting only a small amount of light.\n\t*/\n\treadonly dim: CSPair;\n\n\t/**\n\tMake text italic. (Not widely supported)\n\t*/\n\treadonly italic: CSPair;\n\n\t/**\n\tMake text underline. (Not widely supported)\n\t*/\n\treadonly underline: CSPair;\n\n\t/**\n\tMake text overline.\n\n\tSupported on VTE-based terminals, the GNOME terminal, mintty, and Git Bash.\n\t*/\n\treadonly overline: CSPair;\n\n\t/**\n\tInverse background and foreground colors.\n\t*/\n\treadonly inverse: CSPair;\n\n\t/**\n\tPrints the text, but makes it invisible.\n\t*/\n\treadonly hidden: CSPair;\n\n\t/**\n\tPuts a horizontal line through the center of the text. (Not widely supported)\n\t*/\n\treadonly strikethrough: CSPair;\n}\n\nexport interface ForegroundColor {\n\treadonly black: CSPair;\n\treadonly red: CSPair;\n\treadonly green: CSPair;\n\treadonly yellow: CSPair;\n\treadonly blue: CSPair;\n\treadonly cyan: CSPair;\n\treadonly magenta: CSPair;\n\treadonly white: CSPair;\n\n\t/**\n\tAlias for `blackBright`.\n\t*/\n\treadonly gray: CSPair;\n\n\t/**\n\tAlias for `blackBright`.\n\t*/\n\treadonly grey: CSPair;\n\n\treadonly blackBright: CSPair;\n\treadonly redBright: CSPair;\n\treadonly greenBright: CSPair;\n\treadonly yellowBright: CSPair;\n\treadonly blueBright: CSPair;\n\treadonly cyanBright: CSPair;\n\treadonly magentaBright: CSPair;\n\treadonly whiteBright: CSPair;\n}\n\nexport interface BackgroundColor {\n\treadonly bgBlack: CSPair;\n\treadonly bgRed: CSPair;\n\treadonly bgGreen: CSPair;\n\treadonly bgYellow: CSPair;\n\treadonly bgBlue: CSPair;\n\treadonly bgCyan: CSPair;\n\treadonly bgMagenta: CSPair;\n\treadonly bgWhite: CSPair;\n\n\t/**\n\tAlias for `bgBlackBright`.\n\t*/\n\treadonly bgGray: CSPair;\n\n\t/**\n\tAlias for `bgBlackBright`.\n\t*/\n\treadonly bgGrey: CSPair;\n\n\treadonly bgBlackBright: CSPair;\n\treadonly bgRedBright: CSPair;\n\treadonly bgGreenBright: CSPair;\n\treadonly bgYellowBright: CSPair;\n\treadonly bgBlueBright: CSPair;\n\treadonly bgCyanBright: CSPair;\n\treadonly bgMagentaBright: CSPair;\n\treadonly bgWhiteBright: CSPair;\n}\n\nexport interface ConvertColor {\n\t/**\n\tConvert from the RGB color space to the ANSI 256 color space.\n\n\t@param red - (`0...255`)\n\t@param green - (`0...255`)\n\t@param blue - (`0...255`)\n\t*/\n\trgbToAnsi256(red: number, green: number, blue: number): number;\n\n\t/**\n\tConvert from the RGB HEX color space to the RGB color space.\n\n\t@param hex - A hexadecimal string containing RGB data.\n\t*/\n\thexToRgb(hex: string): [red: number, green: number, blue: number];\n\n\t/**\n\tConvert from the RGB HEX color space to the ANSI 256 color space.\n\n\t@param hex - A hexadecimal string containing RGB data.\n\t*/\n\thexToAnsi256(hex: string): number;\n\n\t/**\n\tConvert from the ANSI 256 color space to the ANSI 16 color space.\n\n\t@param code - A number representing the ANSI 256 color.\n\t*/\n\tansi256ToAnsi(code: number): number;\n\n\t/**\n\tConvert from the RGB color space to the ANSI 16 color space.\n\n\t@param red - (`0...255`)\n\t@param green - (`0...255`)\n\t@param blue - (`0...255`)\n\t*/\n\trgbToAnsi(red: number, green: number, blue: number): number;\n\n\t/**\n\tConvert from the RGB HEX color space to the ANSI 16 color space.\n\n\t@param hex - A hexadecimal string containing RGB data.\n\t*/\n\thexToAnsi(hex: string): number;\n}\n\n/**\nBasic modifier names.\n*/\nexport type ModifierName = keyof Modifier;\n\n/**\nBasic foreground color names.\n\n[More colors here.](https://github.com/chalk/chalk/blob/main/readme.md#256-and-truecolor-color-support)\n*/\nexport type ForegroundColorName = keyof ForegroundColor;\n\n/**\nBasic background color names.\n\n[More colors here.](https://github.com/chalk/chalk/blob/main/readme.md#256-and-truecolor-color-support)\n*/\nexport type BackgroundColorName = keyof BackgroundColor;\n\n/**\nBasic color names. The combination of foreground and background color names.\n\n[More colors here.](https://github.com/chalk/chalk/blob/main/readme.md#256-and-truecolor-color-support)\n*/\nexport type ColorName = ForegroundColorName | BackgroundColorName;\n\n/**\nBasic modifier names.\n*/\nexport const modifierNames: readonly ModifierName[];\n\n/**\nBasic foreground color names.\n*/\nexport const foregroundColorNames: readonly ForegroundColorName[];\n\n/**\nBasic background color names.\n*/\nexport const backgroundColorNames: readonly BackgroundColorName[];\n\n/*\nBasic color names. The combination of foreground and background color names.\n*/\nexport const colorNames: readonly ColorName[];\n\ndeclare const ansiStyles: {\n\treadonly modifier: Modifier;\n\treadonly color: ColorBase & ForegroundColor;\n\treadonly bgColor: ColorBase & BackgroundColor;\n\treadonly codes: ReadonlyMap<number, number>;\n} & ForegroundColor & BackgroundColor & Modifier & ConvertColor;\n\nexport default ansiStyles;\n/source/index.d.ts\u001a// TODO: Make it this when TS suports that.\n// import {ModifierName, ForegroundColor, BackgroundColor, ColorName} from '#ansi-styles';\n// import {ColorInfo, ColorSupportLevel} from '#supports-color';\nimport {ModifierName, ForegroundColorName, BackgroundColorName, ColorName} from './vendor/ansi-styles/index.js';\nimport {ColorInfo, ColorSupportLevel} from './vendor/supports-color/index.js';\n\nexport interface Options {\n\t/**\n\tSpecify the color support for Chalk.\n\n\tBy default, color support is automatically detected based on the environment.\n\n\tLevels:\n\t- `0` - All colors disabled.\n\t- `1` - Basic 16 colors support.\n\t- `2` - ANSI 256 colors support.\n\t- `3` - Truecolor 16 million colors support.\n\t*/\n\treadonly level?: ColorSupportLevel;\n}\n\n/**\nReturn a new Chalk instance.\n*/\nexport const Chalk: new (options?: Options) => ChalkInstance; // eslint-disable-line @typescript-eslint/naming-convention\n\nexport interface ChalkInstance {\n\t(...text: unknown[]): string;\n\n\t/**\n\tThe color support for Chalk.\n\n\tBy default, color support is automatically detected based on the environment.\n\n\tLevels:\n\t- `0` - All colors disabled.\n\t- `1` - Basic 16 colors support.\n\t- `2` - ANSI 256 colors support.\n\t- `3` - Truecolor 16 million colors support.\n\t*/\n\tlevel: ColorSupportLevel;\n\n\t/**\n\tUse RGB values to set text color.\n\n\t@example\n\t```\n\timport chalk from 'chalk';\n\n\tchalk.rgb(222, 173, 237);\n\t```\n\t*/\n\trgb: (red: number, green: number, blue: number) => this;\n\n\t/**\n\tUse HEX value to set text color.\n\n\t@param color - Hexadecimal value representing the desired color.\n\n\t@example\n\t```\n\timport chalk from 'chalk';\n\n\tchalk.hex('#DEADED');\n\t```\n\t*/\n\thex: (color: string) => this;\n\n\t/**\n\tUse an [8-bit unsigned number](https://en.wikipedia.org/wiki/ANSI_escape_code#8-bit) to set text color.\n\n\t@example\n\t```\n\timport chalk from 'chalk';\n\n\tchalk.ansi256(201);\n\t```\n\t*/\n\tansi256: (index: number) => this;\n\n\t/**\n\tUse RGB values to set background color.\n\n\t@example\n\t```\n\timport chalk from 'chalk';\n\n\tchalk.bgRgb(222, 173, 237);\n\t```\n\t*/\n\tbgRgb: (red: number, green: number, blue: number) => this;\n\n\t/**\n\tUse HEX value to set background color.\n\n\t@param color - Hexadecimal value representing the desired color.\n\n\t@example\n\t```\n\timport chalk from 'chalk';\n\n\tchalk.bgHex('#DEADED');\n\t```\n\t*/\n\tbgHex: (color: string) => this;\n\n\t/**\n\tUse a [8-bit unsigned number](https://en.wikipedia.org/wiki/ANSI_escape_code#8-bit) to set background color.\n\n\t@example\n\t```\n\timport chalk from 'chalk';\n\n\tchalk.bgAnsi256(201);\n\t```\n\t*/\n\tbgAnsi256: (index: number) => this;\n\n\t/**\n\tModifier: Reset the current style.\n\t*/\n\treadonly reset: this;\n\n\t/**\n\tModifier: Make the text bold.\n\t*/\n\treadonly bold: this;\n\n\t/**\n\tModifier: Make the text have lower opacity.\n\t*/\n\treadonly dim: this;\n\n\t/**\n\tModifier: Make the text italic. *(Not widely supported)*\n\t*/\n\treadonly italic: this;\n\n\t/**\n\tModifier: Put a horizontal line below the text. *(Not widely supported)*\n\t*/\n\treadonly underline: this;\n\n\t/**\n\tModifier: Put a horizontal line above the text. *(Not widely supported)*\n\t*/\n\treadonly overline: this;\n\n\t/**\n\tModifier: Invert background and foreground colors.\n\t*/\n\treadonly inverse: this;\n\n\t/**\n\tModifier: Print the text but make it invisible.\n\t*/\n\treadonly hidden: this;\n\n\t/**\n\tModifier: Puts a horizontal line through the center of the text. *(Not widely supported)*\n\t*/\n\treadonly strikethrough: this;\n\n\t/**\n\tModifier: Print the text only when Chalk has a color level above zero.\n\n\tCan be useful for things that are purely cosmetic.\n\t*/\n\treadonly visible: this;\n\n\treadonly black: this;\n\treadonly red: this;\n\treadonly green: this;\n\treadonly yellow: this;\n\treadonly blue: this;\n\treadonly magenta: this;\n\treadonly cyan: this;\n\treadonly white: this;\n\n\t/*\n\tAlias for `blackBright`.\n\t*/\n\treadonly gray: this;\n\n\t/*\n\tAlias for `blackBright`.\n\t*/\n\treadonly grey: this;\n\n\treadonly blackBright: this;\n\treadonly redBright: this;\n\treadonly greenBright: this;\n\treadonly yellowBright: this;\n\treadonly blueBright: this;\n\treadonly magentaBright: this;\n\treadonly cyanBright: this;\n\treadonly whiteBright: this;\n\n\treadonly bgBlack: this;\n\treadonly bgRed: this;\n\treadonly bgGreen: this;\n\treadonly bgYellow: this;\n\treadonly bgBlue: this;\n\treadonly bgMagenta: this;\n\treadonly bgCyan: this;\n\treadonly bgWhite: this;\n\n\t/*\n\tAlias for `bgBlackBright`.\n\t*/\n\treadonly bgGray: this;\n\n\t/*\n\tAlias for `bgBlackBright`.\n\t*/\n\treadonly bgGrey: this;\n\n\treadonly bgBlackBright: this;\n\treadonly bgRedBright: this;\n\treadonly bgGreenBright: this;\n\treadonly bgYellowBright: this;\n\treadonly bgBlueBright: this;\n\treadonly bgMagentaBright: this;\n\treadonly bgCyanBright: this;\n\treadonly bgWhiteBright: this;\n}\n\n/**\nMain Chalk object that allows to chain styles together.\n\nCall the last one as a method with a string argument.\n\nOrder doesn't matter, and later styles take precedent in case of a conflict.\n\nThis simply means that `chalk.red.yellow.green` is equivalent to `chalk.green`.\n*/\ndeclare const chalk: ChalkInstance;\n\nexport const supportsColor: ColorInfo;\n\nexport const chalkStderr: typeof chalk;\nexport const supportsColorStderr: typeof supportsColor;\n\nexport {\n\tModifierName, ForegroundColorName, BackgroundColorName, ColorName,\n\tmodifierNames, foregroundColorNames, backgroundColorNames, colorNames,\n// } from '#ansi-styles';\n} from './vendor/ansi-styles/index.js';\n\nexport {\n\tColorInfo,\n\tColorSupport,\n\tColorSupportLevel,\n// } from '#supports-color';\n} from './vendor/supports-color/index.js';\n\n// TODO: Remove these aliases in the next major version\n/**\n@deprecated Use `ModifierName` instead.\n\nBasic modifier names.\n*/\nexport type Modifiers = ModifierName;\n\n/**\n@deprecated Use `ForegroundColorName` instead.\n\nBasic foreground color names.\n\n[More colors here.](https://github.com/chalk/chalk/blob/main/readme.md#256-and-truecolor-color-support)\n*/\nexport type ForegroundColor = ForegroundColorName;\n\n/**\n@deprecated Use `BackgroundColorName` instead.\n\nBasic background color names.\n\n[More colors here.](https://github.com/chalk/chalk/blob/main/readme.md#256-and-truecolor-color-support)\n*/\nexport type BackgroundColor = BackgroundColorName;\n\n/**\n@deprecated Use `ColorName` instead.\n\nBasic color names. The combination of foreground and background color names.\n\n[More colors here.](https://github.com/chalk/chalk/blob/main/readme.md#256-and-truecolor-color-support)\n*/\nexport type Color = ColorName;\n\n/**\n@deprecated Use `modifierNames` instead.\n\nBasic modifier names.\n*/\nexport const modifiers: readonly Modifiers[];\n\n/**\n@deprecated Use `foregroundColorNames` instead.\n\nBasic foreground color names.\n*/\nexport const foregroundColors: readonly ForegroundColor[];\n\n/**\n@deprecated Use `backgroundColorNames` instead.\n\nBasic background color names.\n*/\nexport const backgroundColors: readonly BackgroundColor[];\n\n/**\n@deprecated Use `colorNames` instead.\n\nBasic color names. The combination of foreground and background color names.\n*/\nexport const colors: readonly Color[];\n\nexport default chalk;\n&/source/vendor/supports-color/index.js\u000eimport process from 'node:process';\nimport os from 'node:os';\nimport tty from 'node:tty';\n\n// From: https://github.com/sindresorhus/has-flag/blob/main/index.js\nfunction hasFlag(flag, argv = globalThis.Deno ? globalThis.Deno.args : process.argv) {\n\tconst prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--');\n\tconst position = argv.indexOf(prefix + flag);\n\tconst terminatorPosition = argv.indexOf('--');\n\treturn position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);\n}\n\nconst {env} = process;\n\nlet flagForceColor;\nif (\n\thasFlag('no-color')\n\t|| hasFlag('no-colors')\n\t|| hasFlag('color=false')\n\t|| hasFlag('color=never')\n) {\n\tflagForceColor = 0;\n} else if (\n\thasFlag('color')\n\t|| hasFlag('colors')\n\t|| hasFlag('color=true')\n\t|| hasFlag('color=always')\n) {\n\tflagForceColor = 1;\n}\n\nfunction envForceColor() {\n\tif ('FORCE_COLOR' in env) {\n\t\tif (env.FORCE_COLOR === 'true') {\n\t\t\treturn 1;\n\t\t}\n\n\t\tif (env.FORCE_COLOR === 'false') {\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn env.FORCE_COLOR.length === 0 ? 1 : Math.min(Number.parseInt(env.FORCE_COLOR, 10), 3);\n\t}\n}\n\nfunction translateLevel(level) {\n\tif (level === 0) {\n\t\treturn false;\n\t}\n\n\treturn {\n\t\tlevel,\n\t\thasBasic: true,\n\t\thas256: level >= 2,\n\t\thas16m: level >= 3,\n\t};\n}\n\nfunction _supportsColor(haveStream, {streamIsTTY, sniffFlags = true} = {}) {\n\tconst noFlagForceColor = envForceColor();\n\tif (noFlagForceColor !== undefined) {\n\t\tflagForceColor = noFlagForceColor;\n\t}\n\n\tconst forceColor = sniffFlags ? flagForceColor : noFlagForceColor;\n\n\tif (forceColor === 0) {\n\t\treturn 0;\n\t}\n\n\tif (sniffFlags) {\n\t\tif (hasFlag('color=16m')\n\t\t\t|| hasFlag('color=full')\n\t\t\t|| hasFlag('color=truecolor')) {\n\t\t\treturn 3;\n\t\t}\n\n\t\tif (hasFlag('color=256')) {\n\t\t\treturn 2;\n\t\t}\n\t}\n\n\t// Check for Azure DevOps pipelines.\n\t// Has to be above the `!streamIsTTY` check.\n\tif ('TF_BUILD' in env && 'AGENT_NAME' in env) {\n\t\treturn 1;\n\t}\n\n\tif (haveStream && !streamIsTTY && forceColor === undefined) {\n\t\treturn 0;\n\t}\n\n\tconst min = forceColor || 0;\n\n\tif (env.TERM === 'dumb') {\n\t\treturn min;\n\t}\n\n\tif (process.platform === 'win32') {\n\t\t// Windows 10 build 10586 is the first Windows release that supports 256 colors.\n\t\t// Windows 10 build 14931 is the first release that supports 16m/TrueColor.\n\t\tconst osRelease = os.release().split('.');\n\t\tif (\n\t\t\tNumber(osRelease[0]) >= 10\n\t\t\t&& Number(osRelease[2]) >= 10_586\n\t\t) {\n\t\t\treturn Number(osRelease[2]) >= 14_931 ? 3 : 2;\n\t\t}\n\n\t\treturn 1;\n\t}\n\n\tif ('CI' in env) {\n\t\tif ('GITHUB_ACTIONS' in env) {\n\t\t\treturn 3;\n\t\t}\n\n\t\tif (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI', 'BUILDKITE', 'DRONE'].some(sign => sign in env) || env.CI_NAME === 'codeship') {\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn min;\n\t}\n\n\tif ('TEAMCITY_VERSION' in env) {\n\t\treturn /^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;\n\t}\n\n\tif (env.COLORTERM === 'truecolor') {\n\t\treturn 3;\n\t}\n\n\tif (env.TERM === 'xterm-kitty') {\n\t\treturn 3;\n\t}\n\n\tif ('TERM_PROGRAM' in env) {\n\t\tconst version = Number.parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);\n\n\t\tswitch (env.TERM_PROGRAM) {\n\t\t\tcase 'iTerm.app': {\n\t\t\t\treturn version >= 3 ? 3 : 2;\n\t\t\t}\n\n\t\t\tcase 'Apple_Terminal': {\n\t\t\t\treturn 2;\n\t\t\t}\n\t\t\t// No default\n\t\t}\n\t}\n\n\tif (/-256(color)?$/i.test(env.TERM)) {\n\t\treturn 2;\n\t}\n\n\tif (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {\n\t\treturn 1;\n\t}\n\n\tif ('COLORTERM' in env) {\n\t\treturn 1;\n\t}\n\n\treturn min;\n}\n\nexport function createSupportsColor(stream, options = {}) {\n\tconst level = _supportsColor(stream, {\n\t\tstreamIsTTY: stream && stream.isTTY,\n\t\t...options,\n\t});\n\n\treturn translateLevel(level);\n}\n\nconst supportsColor = {\n\tstdout: createSupportsColor({isTTY: tty.isatty(1)}),\n\tstderr: createSupportsColor({isTTY: tty.isatty(2)}),\n};\n\nexport default supportsColor;\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/Y2hva2lkYXJAMy41LjM=",
    "content": "/lib/fsevents-handler.js?'use strict';\n\nconst fs = require('fs');\nconst sysPath = require('path');\nconst { promisify } = require('util');\n\nlet fsevents;\ntry {\n  fsevents = require('fsevents');\n} catch (error) {\n  if (process.env.CHOKIDAR_PRINT_FSEVENTS_REQUIRE_ERROR) console.error(error);\n}\n\nif (fsevents) {\n  // TODO: real check\n  const mtch = process.version.match(/v(\\d+)\\.(\\d+)/);\n  if (mtch && mtch[1] && mtch[2]) {\n    const maj = Number.parseInt(mtch[1], 10);\n    const min = Number.parseInt(mtch[2], 10);\n    if (maj === 8 && min < 16) {\n      fsevents = undefined;\n    }\n  }\n}\n\nconst {\n  EV_ADD,\n  EV_CHANGE,\n  EV_ADD_DIR,\n  EV_UNLINK,\n  EV_ERROR,\n  STR_DATA,\n  STR_END,\n  FSEVENT_CREATED,\n  FSEVENT_MODIFIED,\n  FSEVENT_DELETED,\n  FSEVENT_MOVED,\n  // FSEVENT_CLONED,\n  FSEVENT_UNKNOWN,\n  FSEVENT_TYPE_FILE,\n  FSEVENT_TYPE_DIRECTORY,\n  FSEVENT_TYPE_SYMLINK,\n\n  ROOT_GLOBSTAR,\n  DIR_SUFFIX,\n  DOT_SLASH,\n  FUNCTION_TYPE,\n  EMPTY_FN,\n  IDENTITY_FN\n} = require('./constants');\n\nconst Depth = (value) => isNaN(value) ? {} : {depth: value};\n\nconst stat = promisify(fs.stat);\nconst lstat = promisify(fs.lstat);\nconst realpath = promisify(fs.realpath);\n\nconst statMethods = { stat, lstat };\n\n/**\n * @typedef {String} Path\n */\n\n/**\n * @typedef {Object} FsEventsWatchContainer\n * @property {Set<Function>} listeners\n * @property {Function} rawEmitter\n * @property {{stop: Function}} watcher\n */\n\n// fsevents instance helper functions\n/**\n * Object to hold per-process fsevents instances (may be shared across chokidar FSWatcher instances)\n * @type {Map<Path,FsEventsWatchContainer>}\n */\nconst FSEventsWatchers = new Map();\n\n// Threshold of duplicate path prefixes at which to start\n// consolidating going forward\nconst consolidateThreshhold = 10;\n\nconst wrongEventFlags = new Set([\n  69888, 70400, 71424, 72704, 73472, 131328, 131840, 262912\n]);\n\n/**\n * Instantiates the fsevents interface\n * @param {Path} path path to be watched\n * @param {Function} callback called when fsevents is bound and ready\n * @returns {{stop: Function}} new fsevents instance\n */\nconst createFSEventsInstance = (path, callback) => {\n  const stop = fsevents.watch(path, callback);\n  return {stop};\n};\n\n/**\n * Instantiates the fsevents interface or binds listeners to an existing one covering\n * the same file tree.\n * @param {Path} path           - to be watched\n * @param {Path} realPath       - real path for symlinks\n * @param {Function} listener   - called when fsevents emits events\n * @param {Function} rawEmitter - passes data to listeners of the 'raw' event\n * @returns {Function} closer\n */\nfunction setFSEventsListener(path, realPath, listener, rawEmitter) {\n  let watchPath = sysPath.extname(realPath) ? sysPath.dirname(realPath) : realPath;\n\n  const parentPath = sysPath.dirname(watchPath);\n  let cont = FSEventsWatchers.get(watchPath);\n\n  // If we've accumulated a substantial number of paths that\n  // could have been consolidated by watching one directory\n  // above the current one, create a watcher on the parent\n  // path instead, so that we do consolidate going forward.\n  if (couldConsolidate(parentPath)) {\n    watchPath = parentPath;\n  }\n\n  const resolvedPath = sysPath.resolve(path);\n  const hasSymlink = resolvedPath !== realPath;\n\n  const filteredListener = (fullPath, flags, info) => {\n    if (hasSymlink) fullPath = fullPath.replace(realPath, resolvedPath);\n    if (\n      fullPath === resolvedPath ||\n      !fullPath.indexOf(resolvedPath + sysPath.sep)\n    ) listener(fullPath, flags, info);\n  };\n\n  // check if there is already a watcher on a parent path\n  // modifies `watchPath` to the parent path when it finds a match\n  let watchedParent = false;\n  for (const watchedPath of FSEventsWatchers.keys()) {\n    if (realPath.indexOf(sysPath.resolve(watchedPath) + sysPath.sep) === 0) {\n      watchPath = watchedPath;\n      cont = FSEventsWatchers.get(watchPath);\n      watchedParent = true;\n      break;\n    }\n  }\n\n  if (cont || watchedParent) {\n    cont.listeners.add(filteredListener);\n  } else {\n    cont = {\n      listeners: new Set([filteredListener]),\n      rawEmitter,\n      watcher: createFSEventsInstance(watchPath, (fullPath, flags) => {\n        if (!cont.listeners.size) return;\n        const info = fsevents.getInfo(fullPath, flags);\n        cont.listeners.forEach(list => {\n          list(fullPath, flags, info);\n        });\n\n        cont.rawEmitter(info.event, fullPath, info);\n      })\n    };\n    FSEventsWatchers.set(watchPath, cont);\n  }\n\n  // removes this instance's listeners and closes the underlying fsevents\n  // instance if there are no more listeners left\n  return () => {\n    const lst = cont.listeners;\n\n    lst.delete(filteredListener);\n    if (!lst.size) {\n      FSEventsWatchers.delete(watchPath);\n      if (cont.watcher) return cont.watcher.stop().then(() => {\n        cont.rawEmitter = cont.watcher = undefined;\n        Object.freeze(cont);\n      });\n    }\n  };\n}\n\n// Decide whether or not we should start a new higher-level\n// parent watcher\nconst couldConsolidate = (path) => {\n  let count = 0;\n  for (const watchPath of FSEventsWatchers.keys()) {\n    if (watchPath.indexOf(path) === 0) {\n      count++;\n      if (count >= consolidateThreshhold) {\n        return true;\n      }\n    }\n  }\n\n  return false;\n};\n\n// returns boolean indicating whether fsevents can be used\nconst canUse = () => fsevents && FSEventsWatchers.size < 128;\n\n// determines subdirectory traversal levels from root to path\nconst calcDepth = (path, root) => {\n  let i = 0;\n  while (!path.indexOf(root) && (path = sysPath.dirname(path)) !== root) i++;\n  return i;\n};\n\n// returns boolean indicating whether the fsevents' event info has the same type\n// as the one returned by fs.stat\nconst sameTypes = (info, stats) => (\n  info.type === FSEVENT_TYPE_DIRECTORY && stats.isDirectory() ||\n  info.type === FSEVENT_TYPE_SYMLINK && stats.isSymbolicLink() ||\n  info.type === FSEVENT_TYPE_FILE && stats.isFile()\n)\n\n/**\n * @mixin\n */\nclass FsEventsHandler {\n\n/**\n * @param {import('../index').FSWatcher} fsw\n */\nconstructor(fsw) {\n  this.fsw = fsw;\n}\ncheckIgnored(path, stats) {\n  const ipaths = this.fsw._ignoredPaths;\n  if (this.fsw._isIgnored(path, stats)) {\n    ipaths.add(path);\n    if (stats && stats.isDirectory()) {\n      ipaths.add(path + ROOT_GLOBSTAR);\n    }\n    return true;\n  }\n\n  ipaths.delete(path);\n  ipaths.delete(path + ROOT_GLOBSTAR);\n}\n\naddOrChange(path, fullPath, realPath, parent, watchedDir, item, info, opts) {\n  const event = watchedDir.has(item) ? EV_CHANGE : EV_ADD;\n  this.handleEvent(event, path, fullPath, realPath, parent, watchedDir, item, info, opts);\n}\n\nasync checkExists(path, fullPath, realPath, parent, watchedDir, item, info, opts) {\n  try {\n    const stats = await stat(path)\n    if (this.fsw.closed) return;\n    if (sameTypes(info, stats)) {\n      this.addOrChange(path, fullPath, realPath, parent, watchedDir, item, info, opts);\n    } else {\n      this.handleEvent(EV_UNLINK, path, fullPath, realPath, parent, watchedDir, item, info, opts);\n    }\n  } catch (error) {\n    if (error.code === 'EACCES') {\n      this.addOrChange(path, fullPath, realPath, parent, watchedDir, item, info, opts);\n    } else {\n      this.handleEvent(EV_UNLINK, path, fullPath, realPath, parent, watchedDir, item, info, opts);\n    }\n  }\n}\n\nhandleEvent(event, path, fullPath, realPath, parent, watchedDir, item, info, opts) {\n  if (this.fsw.closed || this.checkIgnored(path)) return;\n\n  if (event === EV_UNLINK) {\n    const isDirectory = info.type === FSEVENT_TYPE_DIRECTORY\n    // suppress unlink events on never before seen files\n    if (isDirectory || watchedDir.has(item)) {\n      this.fsw._remove(parent, item, isDirectory);\n    }\n  } else {\n    if (event === EV_ADD) {\n      // track new directories\n      if (info.type === FSEVENT_TYPE_DIRECTORY) this.fsw._getWatchedDir(path);\n\n      if (info.type === FSEVENT_TYPE_SYMLINK && opts.followSymlinks) {\n        // push symlinks back to the top of the stack to get handled\n        const curDepth = opts.depth === undefined ?\n          undefined : calcDepth(fullPath, realPath) + 1;\n        return this._addToFsEvents(path, false, true, curDepth);\n      }\n\n      // track new paths\n      // (other than symlinks being followed, which will be tracked soon)\n      this.fsw._getWatchedDir(parent).add(item);\n    }\n    /**\n     * @type {'add'|'addDir'|'unlink'|'unlinkDir'}\n     */\n    const eventName = info.type === FSEVENT_TYPE_DIRECTORY ? event + DIR_SUFFIX : event;\n    this.fsw._emit(eventName, path);\n    if (eventName === EV_ADD_DIR) this._addToFsEvents(path, false, true);\n  }\n}\n\n/**\n * Handle symlinks encountered during directory scan\n * @param {String} watchPath  - file/dir path to be watched with fsevents\n * @param {String} realPath   - real path (in case of symlinks)\n * @param {Function} transform  - path transformer\n * @param {Function} globFilter - path filter in case a glob pattern was provided\n * @returns {Function} closer for the watcher instance\n*/\n_watchWithFsEvents(watchPath, realPath, transform, globFilter) {\n  if (this.fsw.closed || this.fsw._isIgnored(watchPath)) return;\n  const opts = this.fsw.options;\n  const watchCallback = async (fullPath, flags, info) => {\n    if (this.fsw.closed) return;\n    if (\n      opts.depth !== undefined &&\n      calcDepth(fullPath, realPath) > opts.depth\n    ) return;\n    const path = transform(sysPath.join(\n      watchPath, sysPath.relative(watchPath, fullPath)\n    ));\n    if (globFilter && !globFilter(path)) return;\n    // ensure directories are tracked\n    const parent = sysPath.dirname(path);\n    const item = sysPath.basename(path);\n    const watchedDir = this.fsw._getWatchedDir(\n      info.type === FSEVENT_TYPE_DIRECTORY ? path : parent\n    );\n\n    // correct for wrong events emitted\n    if (wrongEventFlags.has(flags) || info.event === FSEVENT_UNKNOWN) {\n      if (typeof opts.ignored === FUNCTION_TYPE) {\n        let stats;\n        try {\n          stats = await stat(path);\n        } catch (error) {}\n        if (this.fsw.closed) return;\n        if (this.checkIgnored(path, stats)) return;\n        if (sameTypes(info, stats)) {\n          this.addOrChange(path, fullPath, realPath, parent, watchedDir, item, info, opts);\n        } else {\n          this.handleEvent(EV_UNLINK, path, fullPath, realPath, parent, watchedDir, item, info, opts);\n        }\n      } else {\n        this.checkExists(path, fullPath, realPath, parent, watchedDir, item, info, opts);\n      }\n    } else {\n      switch (info.event) {\n      case FSEVENT_CREATED:\n      case FSEVENT_MODIFIED:\n        return this.addOrChange(path, fullPath, realPath, parent, watchedDir, item, info, opts);\n      case FSEVENT_DELETED:\n      case FSEVENT_MOVED:\n        return this.checkExists(path, fullPath, realPath, parent, watchedDir, item, info, opts);\n      }\n    }\n  };\n\n  const closer = setFSEventsListener(\n    watchPath,\n    realPath,\n    watchCallback,\n    this.fsw._emitRaw\n  );\n\n  this.fsw._emitReady();\n  return closer;\n}\n\n/**\n * Handle symlinks encountered during directory scan\n * @param {String} linkPath path to symlink\n * @param {String} fullPath absolute path to the symlink\n * @param {Function} transform pre-existing path transformer\n * @param {Number} curDepth level of subdirectories traversed to where symlink is\n * @returns {Promise<void>}\n */\nasync _handleFsEventsSymlink(linkPath, fullPath, transform, curDepth) {\n  // don't follow the same symlink more than once\n  if (this.fsw.closed || this.fsw._symlinkPaths.has(fullPath)) return;\n\n  this.fsw._symlinkPaths.set(fullPath, true);\n  this.fsw._incrReadyCount();\n\n  try {\n    const linkTarget = await realpath(linkPath);\n    if (this.fsw.closed) return;\n    if (this.fsw._isIgnored(linkTarget)) {\n      return this.fsw._emitReady();\n    }\n\n    this.fsw._incrReadyCount();\n\n    // add the linkTarget for watching with a wrapper for transform\n    // that causes emitted paths to incorporate the link's path\n    this._addToFsEvents(linkTarget || linkPath, (path) => {\n      let aliasedPath = linkPath;\n      if (linkTarget && linkTarget !== DOT_SLASH) {\n        aliasedPath = path.replace(linkTarget, linkPath);\n      } else if (path !== DOT_SLASH) {\n        aliasedPath = sysPath.join(linkPath, path);\n      }\n      return transform(aliasedPath);\n    }, false, curDepth);\n  } catch(error) {\n    if (this.fsw._handleError(error)) {\n      return this.fsw._emitReady();\n    }\n  }\n}\n\n/**\n *\n * @param {Path} newPath\n * @param {fs.Stats} stats\n */\nemitAdd(newPath, stats, processPath, opts, forceAdd) {\n  const pp = processPath(newPath);\n  const isDir = stats.isDirectory();\n  const dirObj = this.fsw._getWatchedDir(sysPath.dirname(pp));\n  const base = sysPath.basename(pp);\n\n  // ensure empty dirs get tracked\n  if (isDir) this.fsw._getWatchedDir(pp);\n  if (dirObj.has(base)) return;\n  dirObj.add(base);\n\n  if (!opts.ignoreInitial || forceAdd === true) {\n    this.fsw._emit(isDir ? EV_ADD_DIR : EV_ADD, pp, stats);\n  }\n}\n\ninitWatch(realPath, path, wh, processPath) {\n  if (this.fsw.closed) return;\n  const closer = this._watchWithFsEvents(\n    wh.watchPath,\n    sysPath.resolve(realPath || wh.watchPath),\n    processPath,\n    wh.globFilter\n  );\n  this.fsw._addPathCloser(path, closer);\n}\n\n/**\n * Handle added path with fsevents\n * @param {String} path file/dir path or glob pattern\n * @param {Function|Boolean=} transform converts working path to what the user expects\n * @param {Boolean=} forceAdd ensure add is emitted\n * @param {Number=} priorDepth Level of subdirectories already traversed.\n * @returns {Promise<void>}\n */\nasync _addToFsEvents(path, transform, forceAdd, priorDepth) {\n  if (this.fsw.closed) {\n    return;\n  }\n  const opts = this.fsw.options;\n  const processPath = typeof transform === FUNCTION_TYPE ? transform : IDENTITY_FN;\n\n  const wh = this.fsw._getWatchHelpers(path);\n\n  // evaluate what is at the path we're being asked to watch\n  try {\n    const stats = await statMethods[wh.statMethod](wh.watchPath);\n    if (this.fsw.closed) return;\n    if (this.fsw._isIgnored(wh.watchPath, stats)) {\n      throw null;\n    }\n    if (stats.isDirectory()) {\n      // emit addDir unless this is a glob parent\n      if (!wh.globFilter) this.emitAdd(processPath(path), stats, processPath, opts, forceAdd);\n\n      // don't recurse further if it would exceed depth setting\n      if (priorDepth && priorDepth > opts.depth) return;\n\n      // scan the contents of the dir\n      this.fsw._readdirp(wh.watchPath, {\n        fileFilter: entry => wh.filterPath(entry),\n        directoryFilter: entry => wh.filterDir(entry),\n        ...Depth(opts.depth - (priorDepth || 0))\n      }).on(STR_DATA, (entry) => {\n        // need to check filterPath on dirs b/c filterDir is less restrictive\n        if (this.fsw.closed) {\n          return;\n        }\n        if (entry.stats.isDirectory() && !wh.filterPath(entry)) return;\n\n        const joinedPath = sysPath.join(wh.watchPath, entry.path);\n        const {fullPath} = entry;\n\n        if (wh.followSymlinks && entry.stats.isSymbolicLink()) {\n          // preserve the current depth here since it can't be derived from\n          // real paths past the symlink\n          const curDepth = opts.depth === undefined ?\n            undefined : calcDepth(joinedPath, sysPath.resolve(wh.watchPath)) + 1;\n\n          this._handleFsEventsSymlink(joinedPath, fullPath, processPath, curDepth);\n        } else {\n          this.emitAdd(joinedPath, entry.stats, processPath, opts, forceAdd);\n        }\n      }).on(EV_ERROR, EMPTY_FN).on(STR_END, () => {\n        this.fsw._emitReady();\n      });\n    } else {\n      this.emitAdd(wh.watchPath, stats, processPath, opts, forceAdd);\n      this.fsw._emitReady();\n    }\n  } catch (error) {\n    if (!error || this.fsw._handleError(error)) {\n      // TODO: Strange thing: \"should not choke on an ignored watch path\" will be failed without 2 ready calls -__-\n      this.fsw._emitReady();\n      this.fsw._emitReady();\n    }\n  }\n\n  if (opts.persistent && forceAdd !== true) {\n    if (typeof transform === FUNCTION_TYPE) {\n      // realpath has already been resolved\n      this.initWatch(undefined, path, wh, processPath);\n    } else {\n      let realPath;\n      try {\n        realPath = await realpath(wh.watchPath);\n      } catch (e) {}\n      this.initWatch(realPath, path, wh, processPath);\n    }\n  }\n}\n\n}\n\nmodule.exports = FsEventsHandler;\nmodule.exports.canUse = canUse;\n/lib/nodefs-handler.jsNc'use strict';\n\nconst fs = require('fs');\nconst sysPath = require('path');\nconst { promisify } = require('util');\nconst isBinaryPath = require('is-binary-path');\nconst {\n  isWindows,\n  isLinux,\n  EMPTY_FN,\n  EMPTY_STR,\n  KEY_LISTENERS,\n  KEY_ERR,\n  KEY_RAW,\n  HANDLER_KEYS,\n  EV_CHANGE,\n  EV_ADD,\n  EV_ADD_DIR,\n  EV_ERROR,\n  STR_DATA,\n  STR_END,\n  BRACE_START,\n  STAR\n} = require('./constants');\n\nconst THROTTLE_MODE_WATCH = 'watch';\n\nconst open = promisify(fs.open);\nconst stat = promisify(fs.stat);\nconst lstat = promisify(fs.lstat);\nconst close = promisify(fs.close);\nconst fsrealpath = promisify(fs.realpath);\n\nconst statMethods = { lstat, stat };\n\n// TODO: emit errors properly. Example: EMFILE on Macos.\nconst foreach = (val, fn) => {\n  if (val instanceof Set) {\n    val.forEach(fn);\n  } else {\n    fn(val);\n  }\n};\n\nconst addAndConvert = (main, prop, item) => {\n  let container = main[prop];\n  if (!(container instanceof Set)) {\n    main[prop] = container = new Set([container]);\n  }\n  container.add(item);\n};\n\nconst clearItem = cont => key => {\n  const set = cont[key];\n  if (set instanceof Set) {\n    set.clear();\n  } else {\n    delete cont[key];\n  }\n};\n\nconst delFromSet = (main, prop, item) => {\n  const container = main[prop];\n  if (container instanceof Set) {\n    container.delete(item);\n  } else if (container === item) {\n    delete main[prop];\n  }\n};\n\nconst isEmptySet = (val) => val instanceof Set ? val.size === 0 : !val;\n\n/**\n * @typedef {String} Path\n */\n\n// fs_watch helpers\n\n// object to hold per-process fs_watch instances\n// (may be shared across chokidar FSWatcher instances)\n\n/**\n * @typedef {Object} FsWatchContainer\n * @property {Set} listeners\n * @property {Set} errHandlers\n * @property {Set} rawEmitters\n * @property {fs.FSWatcher=} watcher\n * @property {Boolean=} watcherUnusable\n */\n\n/**\n * @type {Map<String,FsWatchContainer>}\n */\nconst FsWatchInstances = new Map();\n\n/**\n * Instantiates the fs_watch interface\n * @param {String} path to be watched\n * @param {Object} options to be passed to fs_watch\n * @param {Function} listener main event handler\n * @param {Function} errHandler emits info about errors\n * @param {Function} emitRaw emits raw event data\n * @returns {fs.FSWatcher} new fsevents instance\n */\nfunction createFsWatchInstance(path, options, listener, errHandler, emitRaw) {\n  const handleEvent = (rawEvent, evPath) => {\n    listener(path);\n    emitRaw(rawEvent, evPath, {watchedPath: path});\n\n    // emit based on events occurring for files from a directory's watcher in\n    // case the file's watcher misses it (and rely on throttling to de-dupe)\n    if (evPath && path !== evPath) {\n      fsWatchBroadcast(\n        sysPath.resolve(path, evPath), KEY_LISTENERS, sysPath.join(path, evPath)\n      );\n    }\n  };\n  try {\n    return fs.watch(path, options, handleEvent);\n  } catch (error) {\n    errHandler(error);\n  }\n}\n\n/**\n * Helper for passing fs_watch event data to a collection of listeners\n * @param {Path} fullPath absolute path bound to fs_watch instance\n * @param {String} type listener type\n * @param {*=} val1 arguments to be passed to listeners\n * @param {*=} val2\n * @param {*=} val3\n */\nconst fsWatchBroadcast = (fullPath, type, val1, val2, val3) => {\n  const cont = FsWatchInstances.get(fullPath);\n  if (!cont) return;\n  foreach(cont[type], (listener) => {\n    listener(val1, val2, val3);\n  });\n};\n\n/**\n * Instantiates the fs_watch interface or binds listeners\n * to an existing one covering the same file system entry\n * @param {String} path\n * @param {String} fullPath absolute path\n * @param {Object} options to be passed to fs_watch\n * @param {Object} handlers container for event listener functions\n */\nconst setFsWatchListener = (path, fullPath, options, handlers) => {\n  const {listener, errHandler, rawEmitter} = handlers;\n  let cont = FsWatchInstances.get(fullPath);\n\n  /** @type {fs.FSWatcher=} */\n  let watcher;\n  if (!options.persistent) {\n    watcher = createFsWatchInstance(\n      path, options, listener, errHandler, rawEmitter\n    );\n    return watcher.close.bind(watcher);\n  }\n  if (cont) {\n    addAndConvert(cont, KEY_LISTENERS, listener);\n    addAndConvert(cont, KEY_ERR, errHandler);\n    addAndConvert(cont, KEY_RAW, rawEmitter);\n  } else {\n    watcher = createFsWatchInstance(\n      path,\n      options,\n      fsWatchBroadcast.bind(null, fullPath, KEY_LISTENERS),\n      errHandler, // no need to use broadcast here\n      fsWatchBroadcast.bind(null, fullPath, KEY_RAW)\n    );\n    if (!watcher) return;\n    watcher.on(EV_ERROR, async (error) => {\n      const broadcastErr = fsWatchBroadcast.bind(null, fullPath, KEY_ERR);\n      cont.watcherUnusable = true; // documented since Node 10.4.1\n      // Workaround for https://github.com/joyent/node/issues/4337\n      if (isWindows && error.code === 'EPERM') {\n        try {\n          const fd = await open(path, 'r');\n          await close(fd);\n          broadcastErr(error);\n        } catch (err) {}\n      } else {\n        broadcastErr(error);\n      }\n    });\n    cont = {\n      listeners: listener,\n      errHandlers: errHandler,\n      rawEmitters: rawEmitter,\n      watcher\n    };\n    FsWatchInstances.set(fullPath, cont);\n  }\n  // const index = cont.listeners.indexOf(listener);\n\n  // removes this instance's listeners and closes the underlying fs_watch\n  // instance if there are no more listeners left\n  return () => {\n    delFromSet(cont, KEY_LISTENERS, listener);\n    delFromSet(cont, KEY_ERR, errHandler);\n    delFromSet(cont, KEY_RAW, rawEmitter);\n    if (isEmptySet(cont.listeners)) {\n      // Check to protect against issue gh-730.\n      // if (cont.watcherUnusable) {\n      cont.watcher.close();\n      // }\n      FsWatchInstances.delete(fullPath);\n      HANDLER_KEYS.forEach(clearItem(cont));\n      cont.watcher = undefined;\n      Object.freeze(cont);\n    }\n  };\n};\n\n// fs_watchFile helpers\n\n// object to hold per-process fs_watchFile instances\n// (may be shared across chokidar FSWatcher instances)\nconst FsWatchFileInstances = new Map();\n\n/**\n * Instantiates the fs_watchFile interface or binds listeners\n * to an existing one covering the same file system entry\n * @param {String} path to be watched\n * @param {String} fullPath absolute path\n * @param {Object} options options to be passed to fs_watchFile\n * @param {Object} handlers container for event listener functions\n * @returns {Function} closer\n */\nconst setFsWatchFileListener = (path, fullPath, options, handlers) => {\n  const {listener, rawEmitter} = handlers;\n  let cont = FsWatchFileInstances.get(fullPath);\n\n  /* eslint-disable no-unused-vars, prefer-destructuring */\n  let listeners = new Set();\n  let rawEmitters = new Set();\n\n  const copts = cont && cont.options;\n  if (copts && (copts.persistent < options.persistent || copts.interval > options.interval)) {\n    // \"Upgrade\" the watcher to persistence or a quicker interval.\n    // This creates some unlikely edge case issues if the user mixes\n    // settings in a very weird way, but solving for those cases\n    // doesn't seem worthwhile for the added complexity.\n    listeners = cont.listeners;\n    rawEmitters = cont.rawEmitters;\n    fs.unwatchFile(fullPath);\n    cont = undefined;\n  }\n\n  /* eslint-enable no-unused-vars, prefer-destructuring */\n\n  if (cont) {\n    addAndConvert(cont, KEY_LISTENERS, listener);\n    addAndConvert(cont, KEY_RAW, rawEmitter);\n  } else {\n    // TODO\n    // listeners.add(listener);\n    // rawEmitters.add(rawEmitter);\n    cont = {\n      listeners: listener,\n      rawEmitters: rawEmitter,\n      options,\n      watcher: fs.watchFile(fullPath, options, (curr, prev) => {\n        foreach(cont.rawEmitters, (rawEmitter) => {\n          rawEmitter(EV_CHANGE, fullPath, {curr, prev});\n        });\n        const currmtime = curr.mtimeMs;\n        if (curr.size !== prev.size || currmtime > prev.mtimeMs || currmtime === 0) {\n          foreach(cont.listeners, (listener) => listener(path, curr));\n        }\n      })\n    };\n    FsWatchFileInstances.set(fullPath, cont);\n  }\n  // const index = cont.listeners.indexOf(listener);\n\n  // Removes this instance's listeners and closes the underlying fs_watchFile\n  // instance if there are no more listeners left.\n  return () => {\n    delFromSet(cont, KEY_LISTENERS, listener);\n    delFromSet(cont, KEY_RAW, rawEmitter);\n    if (isEmptySet(cont.listeners)) {\n      FsWatchFileInstances.delete(fullPath);\n      fs.unwatchFile(fullPath);\n      cont.options = cont.watcher = undefined;\n      Object.freeze(cont);\n    }\n  };\n};\n\n/**\n * @mixin\n */\nclass NodeFsHandler {\n\n/**\n * @param {import(\"../index\").FSWatcher} fsW\n */\nconstructor(fsW) {\n  this.fsw = fsW;\n  this._boundHandleError = (error) => fsW._handleError(error);\n}\n\n/**\n * Watch file for changes with fs_watchFile or fs_watch.\n * @param {String} path to file or dir\n * @param {Function} listener on fs change\n * @returns {Function} closer for the watcher instance\n */\n_watchWithNodeFs(path, listener) {\n  const opts = this.fsw.options;\n  const directory = sysPath.dirname(path);\n  const basename = sysPath.basename(path);\n  const parent = this.fsw._getWatchedDir(directory);\n  parent.add(basename);\n  const absolutePath = sysPath.resolve(path);\n  const options = {persistent: opts.persistent};\n  if (!listener) listener = EMPTY_FN;\n\n  let closer;\n  if (opts.usePolling) {\n    options.interval = opts.enableBinaryInterval && isBinaryPath(basename) ?\n      opts.binaryInterval : opts.interval;\n    closer = setFsWatchFileListener(path, absolutePath, options, {\n      listener,\n      rawEmitter: this.fsw._emitRaw\n    });\n  } else {\n    closer = setFsWatchListener(path, absolutePath, options, {\n      listener,\n      errHandler: this._boundHandleError,\n      rawEmitter: this.fsw._emitRaw\n    });\n  }\n  return closer;\n}\n\n/**\n * Watch a file and emit add event if warranted.\n * @param {Path} file Path\n * @param {fs.Stats} stats result of fs_stat\n * @param {Boolean} initialAdd was the file added at watch instantiation?\n * @returns {Function} closer for the watcher instance\n */\n_handleFile(file, stats, initialAdd) {\n  if (this.fsw.closed) {\n    return;\n  }\n  const dirname = sysPath.dirname(file);\n  const basename = sysPath.basename(file);\n  const parent = this.fsw._getWatchedDir(dirname);\n  // stats is always present\n  let prevStats = stats;\n\n  // if the file is already being watched, do nothing\n  if (parent.has(basename)) return;\n\n  const listener = async (path, newStats) => {\n    if (!this.fsw._throttle(THROTTLE_MODE_WATCH, file, 5)) return;\n    if (!newStats || newStats.mtimeMs === 0) {\n      try {\n        const newStats = await stat(file);\n        if (this.fsw.closed) return;\n        // Check that change event was not fired because of changed only accessTime.\n        const at = newStats.atimeMs;\n        const mt = newStats.mtimeMs;\n        if (!at || at <= mt || mt !== prevStats.mtimeMs) {\n          this.fsw._emit(EV_CHANGE, file, newStats);\n        }\n        if (isLinux && prevStats.ino !== newStats.ino) {\n          this.fsw._closeFile(path)\n          prevStats = newStats;\n          this.fsw._addPathCloser(path, this._watchWithNodeFs(file, listener));\n        } else {\n          prevStats = newStats;\n        }\n      } catch (error) {\n        // Fix issues where mtime is null but file is still present\n        this.fsw._remove(dirname, basename);\n      }\n      // add is about to be emitted if file not already tracked in parent\n    } else if (parent.has(basename)) {\n      // Check that change event was not fired because of changed only accessTime.\n      const at = newStats.atimeMs;\n      const mt = newStats.mtimeMs;\n      if (!at || at <= mt || mt !== prevStats.mtimeMs) {\n        this.fsw._emit(EV_CHANGE, file, newStats);\n      }\n      prevStats = newStats;\n    }\n  }\n  // kick off the watcher\n  const closer = this._watchWithNodeFs(file, listener);\n\n  // emit an add event if we're supposed to\n  if (!(initialAdd && this.fsw.options.ignoreInitial) && this.fsw._isntIgnored(file)) {\n    if (!this.fsw._throttle(EV_ADD, file, 0)) return;\n    this.fsw._emit(EV_ADD, file, stats);\n  }\n\n  return closer;\n}\n\n/**\n * Handle symlinks encountered while reading a dir.\n * @param {Object} entry returned by readdirp\n * @param {String} directory path of dir being read\n * @param {String} path of this item\n * @param {String} item basename of this item\n * @returns {Promise<Boolean>} true if no more processing is needed for this entry.\n */\nasync _handleSymlink(entry, directory, path, item) {\n  if (this.fsw.closed) {\n    return;\n  }\n  const full = entry.fullPath;\n  const dir = this.fsw._getWatchedDir(directory);\n\n  if (!this.fsw.options.followSymlinks) {\n    // watch symlink directly (don't follow) and detect changes\n    this.fsw._incrReadyCount();\n\n    let linkPath;\n    try {\n      linkPath = await fsrealpath(path);\n    } catch (e) {\n      this.fsw._emitReady();\n      return true;\n    }\n\n    if (this.fsw.closed) return;\n    if (dir.has(item)) {\n      if (this.fsw._symlinkPaths.get(full) !== linkPath) {\n        this.fsw._symlinkPaths.set(full, linkPath);\n        this.fsw._emit(EV_CHANGE, path, entry.stats);\n      }\n    } else {\n      dir.add(item);\n      this.fsw._symlinkPaths.set(full, linkPath);\n      this.fsw._emit(EV_ADD, path, entry.stats);\n    }\n    this.fsw._emitReady();\n    return true;\n  }\n\n  // don't follow the same symlink more than once\n  if (this.fsw._symlinkPaths.has(full)) {\n    return true;\n  }\n\n  this.fsw._symlinkPaths.set(full, true);\n}\n\n_handleRead(directory, initialAdd, wh, target, dir, depth, throttler) {\n  // Normalize the directory name on Windows\n  directory = sysPath.join(directory, EMPTY_STR);\n\n  if (!wh.hasGlob) {\n    throttler = this.fsw._throttle('readdir', directory, 1000);\n    if (!throttler) return;\n  }\n\n  const previous = this.fsw._getWatchedDir(wh.path);\n  const current = new Set();\n\n  let stream = this.fsw._readdirp(directory, {\n    fileFilter: entry => wh.filterPath(entry),\n    directoryFilter: entry => wh.filterDir(entry),\n    depth: 0\n  }).on(STR_DATA, async (entry) => {\n    if (this.fsw.closed) {\n      stream = undefined;\n      return;\n    }\n    const item = entry.path;\n    let path = sysPath.join(directory, item);\n    current.add(item);\n\n    if (entry.stats.isSymbolicLink() && await this._handleSymlink(entry, directory, path, item)) {\n      return;\n    }\n\n    if (this.fsw.closed) {\n      stream = undefined;\n      return;\n    }\n    // Files that present in current directory snapshot\n    // but absent in previous are added to watch list and\n    // emit `add` event.\n    if (item === target || !target && !previous.has(item)) {\n      this.fsw._incrReadyCount();\n\n      // ensure relativeness of path is preserved in case of watcher reuse\n      path = sysPath.join(dir, sysPath.relative(dir, path));\n\n      this._addToNodeFs(path, initialAdd, wh, depth + 1);\n    }\n  }).on(EV_ERROR, this._boundHandleError);\n\n  return new Promise(resolve =>\n    stream.once(STR_END, () => {\n      if (this.fsw.closed) {\n        stream = undefined;\n        return;\n      }\n      const wasThrottled = throttler ? throttler.clear() : false;\n\n      resolve();\n\n      // Files that absent in current directory snapshot\n      // but present in previous emit `remove` event\n      // and are removed from @watched[directory].\n      previous.getChildren().filter((item) => {\n        return item !== directory &&\n          !current.has(item) &&\n          // in case of intersecting globs;\n          // a path may have been filtered out of this readdir, but\n          // shouldn't be removed because it matches a different glob\n          (!wh.hasGlob || wh.filterPath({\n            fullPath: sysPath.resolve(directory, item)\n          }));\n      }).forEach((item) => {\n        this.fsw._remove(directory, item);\n      });\n\n      stream = undefined;\n\n      // one more time for any missed in case changes came in extremely quickly\n      if (wasThrottled) this._handleRead(directory, false, wh, target, dir, depth, throttler);\n    })\n  );\n}\n\n/**\n * Read directory to add / remove files from `@watched` list and re-read it on change.\n * @param {String} dir fs path\n * @param {fs.Stats} stats\n * @param {Boolean} initialAdd\n * @param {Number} depth relative to user-supplied path\n * @param {String} target child path targeted for watch\n * @param {Object} wh Common watch helpers for this path\n * @param {String} realpath\n * @returns {Promise<Function>} closer for the watcher instance.\n */\nasync _handleDir(dir, stats, initialAdd, depth, target, wh, realpath) {\n  const parentDir = this.fsw._getWatchedDir(sysPath.dirname(dir));\n  const tracked = parentDir.has(sysPath.basename(dir));\n  if (!(initialAdd && this.fsw.options.ignoreInitial) && !target && !tracked) {\n    if (!wh.hasGlob || wh.globFilter(dir)) this.fsw._emit(EV_ADD_DIR, dir, stats);\n  }\n\n  // ensure dir is tracked (harmless if redundant)\n  parentDir.add(sysPath.basename(dir));\n  this.fsw._getWatchedDir(dir);\n  let throttler;\n  let closer;\n\n  const oDepth = this.fsw.options.depth;\n  if ((oDepth == null || depth <= oDepth) && !this.fsw._symlinkPaths.has(realpath)) {\n    if (!target) {\n      await this._handleRead(dir, initialAdd, wh, target, dir, depth, throttler);\n      if (this.fsw.closed) return;\n    }\n\n    closer = this._watchWithNodeFs(dir, (dirPath, stats) => {\n      // if current directory is removed, do nothing\n      if (stats && stats.mtimeMs === 0) return;\n\n      this._handleRead(dirPath, false, wh, target, dir, depth, throttler);\n    });\n  }\n  return closer;\n}\n\n/**\n * Handle added file, directory, or glob pattern.\n * Delegates call to _handleFile / _handleDir after checks.\n * @param {String} path to file or ir\n * @param {Boolean} initialAdd was the file added at watch instantiation?\n * @param {Object} priorWh depth relative to user-supplied path\n * @param {Number} depth Child path actually targeted for watch\n * @param {String=} target Child path actually targeted for watch\n * @returns {Promise}\n */\nasync _addToNodeFs(path, initialAdd, priorWh, depth, target) {\n  const ready = this.fsw._emitReady;\n  if (this.fsw._isIgnored(path) || this.fsw.closed) {\n    ready();\n    return false;\n  }\n\n  const wh = this.fsw._getWatchHelpers(path, depth);\n  if (!wh.hasGlob && priorWh) {\n    wh.hasGlob = priorWh.hasGlob;\n    wh.globFilter = priorWh.globFilter;\n    wh.filterPath = entry => priorWh.filterPath(entry);\n    wh.filterDir = entry => priorWh.filterDir(entry);\n  }\n\n  // evaluate what is at the path we're being asked to watch\n  try {\n    const stats = await statMethods[wh.statMethod](wh.watchPath);\n    if (this.fsw.closed) return;\n    if (this.fsw._isIgnored(wh.watchPath, stats)) {\n      ready();\n      return false;\n    }\n\n    const follow = this.fsw.options.followSymlinks && !path.includes(STAR) && !path.includes(BRACE_START);\n    let closer;\n    if (stats.isDirectory()) {\n      const absPath = sysPath.resolve(path);\n      const targetPath = follow ? await fsrealpath(path) : path;\n      if (this.fsw.closed) return;\n      closer = await this._handleDir(wh.watchPath, stats, initialAdd, depth, target, wh, targetPath);\n      if (this.fsw.closed) return;\n      // preserve this symlink's target path\n      if (absPath !== targetPath && targetPath !== undefined) {\n        this.fsw._symlinkPaths.set(absPath, targetPath);\n      }\n    } else if (stats.isSymbolicLink()) {\n      const targetPath = follow ? await fsrealpath(path) : path;\n      if (this.fsw.closed) return;\n      const parent = sysPath.dirname(wh.watchPath);\n      this.fsw._getWatchedDir(parent).add(wh.watchPath);\n      this.fsw._emit(EV_ADD, wh.watchPath, stats);\n      closer = await this._handleDir(parent, stats, initialAdd, depth, path, wh, targetPath);\n      if (this.fsw.closed) return;\n\n      // preserve this symlink's target path\n      if (targetPath !== undefined) {\n        this.fsw._symlinkPaths.set(sysPath.resolve(path), targetPath);\n      }\n    } else {\n      closer = this._handleFile(wh.watchPath, stats, initialAdd);\n    }\n    ready();\n\n    this.fsw._addPathCloser(path, closer);\n    return false;\n\n  } catch (error) {\n    if (this.fsw._handleError(error)) {\n      ready();\n      return path;\n    }\n  }\n}\n\n}\n\nmodule.exports = NodeFsHandler;\n/README.md7# Chokidar [![Weekly downloads](https://img.shields.io/npm/dw/chokidar.svg)](https://github.com/paulmillr/chokidar) [![Yearly downloads](https://img.shields.io/npm/dy/chokidar.svg)](https://github.com/paulmillr/chokidar)\n\n> Minimal and efficient cross-platform file watching library\n\n[![NPM](https://nodei.co/npm/chokidar.png)](https://www.npmjs.com/package/chokidar)\n\n## Why?\n\nNode.js `fs.watch`:\n\n* Doesn't report filenames on MacOS.\n* Doesn't report events at all when using editors like Sublime on MacOS.\n* Often reports events twice.\n* Emits most changes as `rename`.\n* Does not provide an easy way to recursively watch file trees.\n* Does not support recursive watching on Linux.\n\nNode.js `fs.watchFile`:\n\n* Almost as bad at event handling.\n* Also does not provide any recursive watching.\n* Results in high CPU utilization.\n\nChokidar resolves these problems.\n\nInitially made for **[Brunch](https://brunch.io/)** (an ultra-swift web app build tool), it is now used in\n[Microsoft's Visual Studio Code](https://github.com/microsoft/vscode),\n[gulp](https://github.com/gulpjs/gulp/),\n[karma](https://karma-runner.github.io/),\n[PM2](https://github.com/Unitech/PM2),\n[browserify](http://browserify.org/),\n[webpack](https://webpack.github.io/),\n[BrowserSync](https://www.browsersync.io/),\nand [many others](https://www.npmjs.com/browse/depended/chokidar).\nIt has proven itself in production environments.\n\nVersion 3 is out! Check out our blog post about it: [Chokidar 3: How to save 32TB of traffic every week](https://paulmillr.com/posts/chokidar-3-save-32tb-of-traffic/)\n\n## How?\n\nChokidar does still rely on the Node.js core `fs` module, but when using\n`fs.watch` and `fs.watchFile` for watching, it normalizes the events it\nreceives, often checking for truth by getting file stats and/or dir contents.\n\nOn MacOS, chokidar by default uses a native extension exposing the Darwin\n`FSEvents` API. This provides very efficient recursive watching compared with\nimplementations like `kqueue` available on most \\*nix platforms. Chokidar still\ndoes have to do some work to normalize the events received that way as well.\n\nOn most other platforms, the `fs.watch`-based implementation is the default, which\navoids polling and keeps CPU usage down. Be advised that chokidar will initiate\nwatchers recursively for everything within scope of the paths that have been\nspecified, so be judicious about not wasting system resources by watching much\nmore than needed.\n\n## Getting started\n\nInstall with npm:\n\n```sh\nnpm install chokidar\n```\n\nThen `require` and use it in your code:\n\n```javascript\nconst chokidar = require('chokidar');\n\n// One-liner for current directory\nchokidar.watch('.').on('all', (event, path) => {\n  console.log(event, path);\n});\n```\n\n## API\n\n```javascript\n// Example of a more typical implementation structure\n\n// Initialize watcher.\nconst watcher = chokidar.watch('file, dir, glob, or array', {\n  ignored: /(^|[\\/\\\\])\\../, // ignore dotfiles\n  persistent: true\n});\n\n// Something to use when events are received.\nconst log = console.log.bind(console);\n// Add event listeners.\nwatcher\n  .on('add', path => log(`File ${path} has been added`))\n  .on('change', path => log(`File ${path} has been changed`))\n  .on('unlink', path => log(`File ${path} has been removed`));\n\n// More possible events.\nwatcher\n  .on('addDir', path => log(`Directory ${path} has been added`))\n  .on('unlinkDir', path => log(`Directory ${path} has been removed`))\n  .on('error', error => log(`Watcher error: ${error}`))\n  .on('ready', () => log('Initial scan complete. Ready for changes'))\n  .on('raw', (event, path, details) => { // internal\n    log('Raw event info:', event, path, details);\n  });\n\n// 'add', 'addDir' and 'change' events also receive stat() results as second\n// argument when available: https://nodejs.org/api/fs.html#fs_class_fs_stats\nwatcher.on('change', (path, stats) => {\n  if (stats) console.log(`File ${path} changed size to ${stats.size}`);\n});\n\n// Watch new files.\nwatcher.add('new-file');\nwatcher.add(['new-file-2', 'new-file-3', '**/other-file*']);\n\n// Get list of actual paths being watched on the filesystem\nvar watchedPaths = watcher.getWatched();\n\n// Un-watch some files.\nawait watcher.unwatch('new-file*');\n\n// Stop watching.\n// The method is async!\nwatcher.close().then(() => console.log('closed'));\n\n// Full list of options. See below for descriptions.\n// Do not use this example!\nchokidar.watch('file', {\n  persistent: true,\n\n  ignored: '*.txt',\n  ignoreInitial: false,\n  followSymlinks: true,\n  cwd: '.',\n  disableGlobbing: false,\n\n  usePolling: false,\n  interval: 100,\n  binaryInterval: 300,\n  alwaysStat: false,\n  depth: 99,\n  awaitWriteFinish: {\n    stabilityThreshold: 2000,\n    pollInterval: 100\n  },\n\n  ignorePermissionErrors: false,\n  atomic: true // or a custom 'atomicity delay', in milliseconds (default 100)\n});\n\n```\n\n`chokidar.watch(paths, [options])`\n\n* `paths` (string or array of strings). Paths to files, dirs to be watched\nrecursively, or glob patterns.\n    - Note: globs must not contain windows separators (`\\`),\n    because that's how they work by the standard —\n    you'll need to replace them with forward slashes (`/`).\n    - Note 2: for additional glob documentation, check out low-level\n    library: [picomatch](https://github.com/micromatch/picomatch).\n* `options` (object) Options object as defined below:\n\n#### Persistence\n\n* `persistent` (default: `true`). Indicates whether the process\nshould continue to run as long as files are being watched. If set to\n`false` when using `fsevents` to watch, no more events will be emitted\nafter `ready`, even if the process continues to run.\n\n#### Path filtering\n\n* `ignored` ([anymatch](https://github.com/es128/anymatch)-compatible definition)\nDefines files/paths to be ignored. The whole relative or absolute path is\ntested, not just filename. If a function with two arguments is provided, it\ngets called twice per path - once with a single argument (the path), second\ntime with two arguments (the path and the\n[`fs.Stats`](https://nodejs.org/api/fs.html#fs_class_fs_stats)\nobject of that path).\n* `ignoreInitial` (default: `false`). If set to `false` then `add`/`addDir` events are also emitted for matching paths while\ninstantiating the watching as chokidar discovers these file paths (before the `ready` event).\n* `followSymlinks` (default: `true`). When `false`, only the\nsymlinks themselves will be watched for changes instead of following\nthe link references and bubbling events through the link's path.\n* `cwd` (no default). The base directory from which watch `paths` are to be\nderived. Paths emitted with events will be relative to this.\n* `disableGlobbing` (default: `false`). If set to `true` then the strings passed to `.watch()` and `.add()` are treated as\nliteral path names, even if they look like globs.\n\n#### Performance\n\n* `usePolling` (default: `false`).\nWhether to use fs.watchFile (backed by polling), or fs.watch. If polling\nleads to high CPU utilization, consider setting this to `false`. It is\ntypically necessary to **set this to `true` to successfully watch files over\na network**, and it may be necessary to successfully watch files in other\nnon-standard situations. Setting to `true` explicitly on MacOS overrides the\n`useFsEvents` default. You may also set the CHOKIDAR_USEPOLLING env variable\nto true (1) or false (0) in order to override this option.\n* _Polling-specific settings_ (effective when `usePolling: true`)\n  * `interval` (default: `100`). Interval of file system polling, in milliseconds. You may also\n    set the CHOKIDAR_INTERVAL env variable to override this option.\n  * `binaryInterval` (default: `300`). Interval of file system\n  polling for binary files.\n  ([see list of binary extensions](https://github.com/sindresorhus/binary-extensions/blob/master/binary-extensions.json))\n* `useFsEvents` (default: `true` on MacOS). Whether to use the\n`fsevents` watching interface if available. When set to `true` explicitly\nand `fsevents` is available this supercedes the `usePolling` setting. When\nset to `false` on MacOS, `usePolling: true` becomes the default.\n* `alwaysStat` (default: `false`). If relying upon the\n[`fs.Stats`](https://nodejs.org/api/fs.html#fs_class_fs_stats)\nobject that may get passed with `add`, `addDir`, and `change` events, set\nthis to `true` to ensure it is provided even in cases where it wasn't\nalready available from the underlying watch events.\n* `depth` (default: `undefined`). If set, limits how many levels of\nsubdirectories will be traversed.\n* `awaitWriteFinish` (default: `false`).\nBy default, the `add` event will fire when a file first appears on disk, before\nthe entire file has been written. Furthermore, in some cases some `change`\nevents will be emitted while the file is being written. In some cases,\nespecially when watching for large files there will be a need to wait for the\nwrite operation to finish before responding to a file creation or modification.\nSetting `awaitWriteFinish` to `true` (or a truthy value) will poll file size,\nholding its `add` and `change` events until the size does not change for a\nconfigurable amount of time. The appropriate duration setting is heavily\ndependent on the OS and hardware. For accurate detection this parameter should\nbe relatively high, making file watching much less responsive.\nUse with caution.\n  * *`options.awaitWriteFinish` can be set to an object in order to adjust\n  timing params:*\n  * `awaitWriteFinish.stabilityThreshold` (default: 2000). Amount of time in\n  milliseconds for a file size to remain constant before emitting its event.\n  * `awaitWriteFinish.pollInterval` (default: 100). File size polling interval, in milliseconds.\n\n#### Errors\n\n* `ignorePermissionErrors` (default: `false`). Indicates whether to watch files\nthat don't have read permissions if possible. If watching fails due to `EPERM`\nor `EACCES` with this set to `true`, the errors will be suppressed silently.\n* `atomic` (default: `true` if `useFsEvents` and `usePolling` are `false`).\nAutomatically filters out artifacts that occur when using editors that use\n\"atomic writes\" instead of writing directly to the source file. If a file is\nre-added within 100 ms of being deleted, Chokidar emits a `change` event\nrather than `unlink` then `add`. If the default of 100 ms does not work well\nfor you, you can override it by setting `atomic` to a custom value, in\nmilliseconds.\n\n### Methods & Events\n\n`chokidar.watch()` produces an instance of `FSWatcher`. Methods of `FSWatcher`:\n\n* `.add(path / paths)`: Add files, directories, or glob patterns for tracking.\nTakes an array of strings or just one string.\n* `.on(event, callback)`: Listen for an FS event.\nAvailable events: `add`, `addDir`, `change`, `unlink`, `unlinkDir`, `ready`,\n`raw`, `error`.\nAdditionally `all` is available which gets emitted with the underlying event\nname and path for every event other than `ready`, `raw`, and `error`.  `raw` is internal, use it carefully.\n* `.unwatch(path / paths)`: Stop watching files, directories, or glob patterns.\nTakes an array of strings or just one string.\n* `.close()`: **async** Removes all listeners from watched files. Asynchronous, returns Promise. Use with `await` to ensure bugs don't happen.\n* `.getWatched()`: Returns an object representing all the paths on the file\nsystem being watched by this `FSWatcher` instance. The object's keys are all the\ndirectories (using absolute paths unless the `cwd` option was used), and the\nvalues are arrays of the names of the items contained in each directory.\n\n## CLI\n\nIf you need a CLI interface for your file watching, check out\n[chokidar-cli](https://github.com/open-cli-tools/chokidar-cli), allowing you to\nexecute a command on each change, or get a stdio stream of change events.\n\n## Install Troubleshooting\n\n* `npm WARN optional dep failed, continuing fsevents@n.n.n`\n  * This message is normal part of how `npm` handles optional dependencies and is\n    not indicative of a problem. Even if accompanied by other related error messages,\n    Chokidar should function properly.\n\n* `TypeError: fsevents is not a constructor`\n  * Update chokidar by doing `rm -rf node_modules package-lock.json yarn.lock && npm install`, or update your dependency that uses chokidar.\n\n* Chokidar is producing `ENOSP` error on Linux, like this:\n  * `bash: cannot set terminal process group (-1): Inappropriate ioctl for device bash: no job control in this shell`\n  `Error: watch /home/ ENOSPC`\n  * This means Chokidar ran out of file handles and you'll need to increase their count by executing the following command in Terminal:\n  `echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p`\n\n## Changelog\n\nFor more detailed changelog, see [`full_changelog.md`](.github/full_changelog.md).\n- **v3.5 (Jan 6, 2021):** Support for ARM Macs with Apple Silicon. Fixes for deleted symlinks.\n- **v3.4 (Apr 26, 2020):** Support for directory-based symlinks. Fixes for macos file replacement.\n- **v3.3 (Nov 2, 2019):** `FSWatcher#close()` method became async. That fixes IO race conditions related to close method.\n- **v3.2 (Oct 1, 2019):** Improve Linux RAM usage by 50%. Race condition fixes. Windows glob fixes. Improve stability by using tight range of dependency versions.\n- **v3.1 (Sep 16, 2019):** dotfiles are no longer filtered out by default. Use `ignored` option if needed. Improve initial Linux scan time by 50%.\n- **v3 (Apr 30, 2019):** massive CPU & RAM consumption improvements; reduces deps / package size by a factor of 17x and bumps Node.js requirement to v8.16 and higher.\n- **v2 (Dec 29, 2017):** Globs are now posix-style-only; without windows support. Tons of bugfixes.\n- **v1 (Apr 7, 2015):** Glob support, symlink support, tons of bugfixes. Node 0.8+ is supported\n- **v0.1 (Apr 20, 2012):** Initial release, extracted from [Brunch](https://github.com/brunch/brunch/blob/9847a065aea300da99bd0753f90354cde9de1261/src/helpers.coffee#L66)\n\n## Also\n\nWhy was chokidar named this way? What's the meaning behind it?\n\n>Chowkidar is a transliteration of a Hindi word meaning 'watchman, gatekeeper', चौकीदार. This ultimately comes from Sanskrit _ चतुष्क_ (crossway, quadrangle, consisting-of-four).\n\n## License\n\nMIT (c) Paul Miller (<https://paulmillr.com>), see [LICENSE](LICENSE) file.\n/lib/constants.js\u0007*'use strict';\n\nconst {sep} = require('path');\nconst {platform} = process;\nconst os = require('os');\n\nexports.EV_ALL = 'all';\nexports.EV_READY = 'ready';\nexports.EV_ADD = 'add';\nexports.EV_CHANGE = 'change';\nexports.EV_ADD_DIR = 'addDir';\nexports.EV_UNLINK = 'unlink';\nexports.EV_UNLINK_DIR = 'unlinkDir';\nexports.EV_RAW = 'raw';\nexports.EV_ERROR = 'error';\n\nexports.STR_DATA = 'data';\nexports.STR_END = 'end';\nexports.STR_CLOSE = 'close';\n\nexports.FSEVENT_CREATED = 'created';\nexports.FSEVENT_MODIFIED = 'modified';\nexports.FSEVENT_DELETED = 'deleted';\nexports.FSEVENT_MOVED = 'moved';\nexports.FSEVENT_CLONED = 'cloned';\nexports.FSEVENT_UNKNOWN = 'unknown';\nexports.FSEVENT_TYPE_FILE = 'file';\nexports.FSEVENT_TYPE_DIRECTORY = 'directory';\nexports.FSEVENT_TYPE_SYMLINK = 'symlink';\n\nexports.KEY_LISTENERS = 'listeners';\nexports.KEY_ERR = 'errHandlers';\nexports.KEY_RAW = 'rawEmitters';\nexports.HANDLER_KEYS = [exports.KEY_LISTENERS, exports.KEY_ERR, exports.KEY_RAW];\n\nexports.DOT_SLASH = `.${sep}`;\n\nexports.BACK_SLASH_RE = /\\\\/g;\nexports.DOUBLE_SLASH_RE = /\\/\\//;\nexports.SLASH_OR_BACK_SLASH_RE = /[/\\\\]/;\nexports.DOT_RE = /\\..*\\.(sw[px])$|~$|\\.subl.*\\.tmp/;\nexports.REPLACER_RE = /^\\.[/\\\\]/;\n\nexports.SLASH = '/';\nexports.SLASH_SLASH = '//';\nexports.BRACE_START = '{';\nexports.BANG = '!';\nexports.ONE_DOT = '.';\nexports.TWO_DOTS = '..';\nexports.STAR = '*';\nexports.GLOBSTAR = '**';\nexports.ROOT_GLOBSTAR = '/**/*';\nexports.SLASH_GLOBSTAR = '/**';\nexports.DIR_SUFFIX = 'Dir';\nexports.ANYMATCH_OPTS = {dot: true};\nexports.STRING_TYPE = 'string';\nexports.FUNCTION_TYPE = 'function';\nexports.EMPTY_STR = '';\nexports.EMPTY_FN = () => {};\nexports.IDENTITY_FN = val => val;\n\nexports.isWindows = platform === 'win32';\nexports.isMacos = platform === 'darwin';\nexports.isLinux = platform === 'linux';\nexports.isIBMi = os.type() === 'OS400';\n/index.jsn'use strict';\n\nconst { EventEmitter } = require('events');\nconst fs = require('fs');\nconst sysPath = require('path');\nconst { promisify } = require('util');\nconst readdirp = require('readdirp');\nconst anymatch = require('anymatch').default;\nconst globParent = require('glob-parent');\nconst isGlob = require('is-glob');\nconst braces = require('braces');\nconst normalizePath = require('normalize-path');\n\nconst NodeFsHandler = require('./lib/nodefs-handler');\nconst FsEventsHandler = require('./lib/fsevents-handler');\nconst {\n  EV_ALL,\n  EV_READY,\n  EV_ADD,\n  EV_CHANGE,\n  EV_UNLINK,\n  EV_ADD_DIR,\n  EV_UNLINK_DIR,\n  EV_RAW,\n  EV_ERROR,\n\n  STR_CLOSE,\n  STR_END,\n\n  BACK_SLASH_RE,\n  DOUBLE_SLASH_RE,\n  SLASH_OR_BACK_SLASH_RE,\n  DOT_RE,\n  REPLACER_RE,\n\n  SLASH,\n  SLASH_SLASH,\n  BRACE_START,\n  BANG,\n  ONE_DOT,\n  TWO_DOTS,\n  GLOBSTAR,\n  SLASH_GLOBSTAR,\n  ANYMATCH_OPTS,\n  STRING_TYPE,\n  FUNCTION_TYPE,\n  EMPTY_STR,\n  EMPTY_FN,\n\n  isWindows,\n  isMacos,\n  isIBMi\n} = require('./lib/constants');\n\nconst stat = promisify(fs.stat);\nconst readdir = promisify(fs.readdir);\n\n/**\n * @typedef {String} Path\n * @typedef {'all'|'add'|'addDir'|'change'|'unlink'|'unlinkDir'|'raw'|'error'|'ready'} EventName\n * @typedef {'readdir'|'watch'|'add'|'remove'|'change'} ThrottleType\n */\n\n/**\n *\n * @typedef {Object} WatchHelpers\n * @property {Boolean} followSymlinks\n * @property {'stat'|'lstat'} statMethod\n * @property {Path} path\n * @property {Path} watchPath\n * @property {Function} entryPath\n * @property {Boolean} hasGlob\n * @property {Object} globFilter\n * @property {Function} filterPath\n * @property {Function} filterDir\n */\n\nconst arrify = (value = []) => Array.isArray(value) ? value : [value];\nconst flatten = (list, result = []) => {\n  list.forEach(item => {\n    if (Array.isArray(item)) {\n      flatten(item, result);\n    } else {\n      result.push(item);\n    }\n  });\n  return result;\n};\n\nconst unifyPaths = (paths_) => {\n  /**\n   * @type {Array<String>}\n   */\n  const paths = flatten(arrify(paths_));\n  if (!paths.every(p => typeof p === STRING_TYPE)) {\n    throw new TypeError(`Non-string provided as watch path: ${paths}`);\n  }\n  return paths.map(normalizePathToUnix);\n};\n\n// If SLASH_SLASH occurs at the beginning of path, it is not replaced\n//     because \"//StoragePC/DrivePool/Movies\" is a valid network path\nconst toUnix = (string) => {\n  let str = string.replace(BACK_SLASH_RE, SLASH);\n  let prepend = false;\n  if (str.startsWith(SLASH_SLASH)) {\n    prepend = true;\n  }\n  while (str.match(DOUBLE_SLASH_RE)) {\n    str = str.replace(DOUBLE_SLASH_RE, SLASH);\n  }\n  if (prepend) {\n    str = SLASH + str;\n  }\n  return str;\n};\n\n// Our version of upath.normalize\n// TODO: this is not equal to path-normalize module - investigate why\nconst normalizePathToUnix = (path) => toUnix(sysPath.normalize(toUnix(path)));\n\nconst normalizeIgnored = (cwd = EMPTY_STR) => (path) => {\n  if (typeof path !== STRING_TYPE) return path;\n  return normalizePathToUnix(sysPath.isAbsolute(path) ? path : sysPath.join(cwd, path));\n};\n\nconst getAbsolutePath = (path, cwd) => {\n  if (sysPath.isAbsolute(path)) {\n    return path;\n  }\n  if (path.startsWith(BANG)) {\n    return BANG + sysPath.join(cwd, path.slice(1));\n  }\n  return sysPath.join(cwd, path);\n};\n\nconst undef = (opts, key) => opts[key] === undefined;\n\n/**\n * Directory entry.\n * @property {Path} path\n * @property {Set<Path>} items\n */\nclass DirEntry {\n  /**\n   * @param {Path} dir\n   * @param {Function} removeWatcher\n   */\n  constructor(dir, removeWatcher) {\n    this.path = dir;\n    this._removeWatcher = removeWatcher;\n    /** @type {Set<Path>} */\n    this.items = new Set();\n  }\n\n  add(item) {\n    const {items} = this;\n    if (!items) return;\n    if (item !== ONE_DOT && item !== TWO_DOTS) items.add(item);\n  }\n\n  async remove(item) {\n    const {items} = this;\n    if (!items) return;\n    items.delete(item);\n    if (items.size > 0) return;\n\n    const dir = this.path;\n    try {\n      await readdir(dir);\n    } catch (err) {\n      if (this._removeWatcher) {\n        this._removeWatcher(sysPath.dirname(dir), sysPath.basename(dir));\n      }\n    }\n  }\n\n  has(item) {\n    const {items} = this;\n    if (!items) return;\n    return items.has(item);\n  }\n\n  /**\n   * @returns {Array<String>}\n   */\n  getChildren() {\n    const {items} = this;\n    if (!items) return;\n    return [...items.values()];\n  }\n\n  dispose() {\n    this.items.clear();\n    delete this.path;\n    delete this._removeWatcher;\n    delete this.items;\n    Object.freeze(this);\n  }\n}\n\nconst STAT_METHOD_F = 'stat';\nconst STAT_METHOD_L = 'lstat';\nclass WatchHelper {\n  constructor(path, watchPath, follow, fsw) {\n    this.fsw = fsw;\n    this.path = path = path.replace(REPLACER_RE, EMPTY_STR);\n    this.watchPath = watchPath;\n    this.fullWatchPath = sysPath.resolve(watchPath);\n    this.hasGlob = watchPath !== path;\n    /** @type {object|boolean} */\n    if (path === EMPTY_STR) this.hasGlob = false;\n    this.globSymlink = this.hasGlob && follow ? undefined : false;\n    this.globFilter = this.hasGlob ? anymatch(path, undefined, ANYMATCH_OPTS) : false;\n    this.dirParts = this.getDirParts(path);\n    this.dirParts.forEach((parts) => {\n      if (parts.length > 1) parts.pop();\n    });\n    this.followSymlinks = follow;\n    this.statMethod = follow ? STAT_METHOD_F : STAT_METHOD_L;\n  }\n\n  checkGlobSymlink(entry) {\n    // only need to resolve once\n    // first entry should always have entry.parentDir === EMPTY_STR\n    if (this.globSymlink === undefined) {\n      this.globSymlink = entry.fullParentDir === this.fullWatchPath ?\n        false : {realPath: entry.fullParentDir, linkPath: this.fullWatchPath};\n    }\n\n    if (this.globSymlink) {\n      return entry.fullPath.replace(this.globSymlink.realPath, this.globSymlink.linkPath);\n    }\n\n    return entry.fullPath;\n  }\n\n  entryPath(entry) {\n    return sysPath.join(this.watchPath,\n      sysPath.relative(this.watchPath, this.checkGlobSymlink(entry))\n    );\n  }\n\n  filterPath(entry) {\n    const {stats} = entry;\n    if (stats && stats.isSymbolicLink()) return this.filterDir(entry);\n    const resolvedPath = this.entryPath(entry);\n    const matchesGlob = this.hasGlob && typeof this.globFilter === FUNCTION_TYPE ?\n      this.globFilter(resolvedPath) : true;\n    return matchesGlob &&\n      this.fsw._isntIgnored(resolvedPath, stats) &&\n      this.fsw._hasReadPermissions(stats);\n  }\n\n  getDirParts(path) {\n    if (!this.hasGlob) return [];\n    const parts = [];\n    const expandedPath = path.includes(BRACE_START) ? braces.expand(path) : [path];\n    expandedPath.forEach((path) => {\n      parts.push(sysPath.relative(this.watchPath, path).split(SLASH_OR_BACK_SLASH_RE));\n    });\n    return parts;\n  }\n\n  filterDir(entry) {\n    if (this.hasGlob) {\n      const entryParts = this.getDirParts(this.checkGlobSymlink(entry));\n      let globstar = false;\n      this.unmatchedGlob = !this.dirParts.some((parts) => {\n        return parts.every((part, i) => {\n          if (part === GLOBSTAR) globstar = true;\n          return globstar || !entryParts[0][i] || anymatch(part, entryParts[0][i], ANYMATCH_OPTS);\n        });\n      });\n    }\n    return !this.unmatchedGlob && this.fsw._isntIgnored(this.entryPath(entry), entry.stats);\n  }\n}\n\n/**\n * Watches files & directories for changes. Emitted events:\n * `add`, `addDir`, `change`, `unlink`, `unlinkDir`, `all`, `error`\n *\n *     new FSWatcher()\n *       .add(directories)\n *       .on('add', path => log('File', path, 'was added'))\n */\nclass FSWatcher extends EventEmitter {\n// Not indenting methods for history sake; for now.\nconstructor(_opts) {\n  super();\n\n  const opts = {};\n  if (_opts) Object.assign(opts, _opts); // for frozen objects\n\n  /** @type {Map<String, DirEntry>} */\n  this._watched = new Map();\n  /** @type {Map<String, Array>} */\n  this._closers = new Map();\n  /** @type {Set<String>} */\n  this._ignoredPaths = new Set();\n\n  /** @type {Map<ThrottleType, Map>} */\n  this._throttled = new Map();\n\n  /** @type {Map<Path, String|Boolean>} */\n  this._symlinkPaths = new Map();\n\n  this._streams = new Set();\n  this.closed = false;\n\n  // Set up default options.\n  if (undef(opts, 'persistent')) opts.persistent = true;\n  if (undef(opts, 'ignoreInitial')) opts.ignoreInitial = false;\n  if (undef(opts, 'ignorePermissionErrors')) opts.ignorePermissionErrors = false;\n  if (undef(opts, 'interval')) opts.interval = 100;\n  if (undef(opts, 'binaryInterval')) opts.binaryInterval = 300;\n  if (undef(opts, 'disableGlobbing')) opts.disableGlobbing = false;\n  opts.enableBinaryInterval = opts.binaryInterval !== opts.interval;\n\n  // Enable fsevents on OS X when polling isn't explicitly enabled.\n  if (undef(opts, 'useFsEvents')) opts.useFsEvents = !opts.usePolling;\n\n  // If we can't use fsevents, ensure the options reflect it's disabled.\n  const canUseFsEvents = FsEventsHandler.canUse();\n  if (!canUseFsEvents) opts.useFsEvents = false;\n\n  // Use polling on Mac if not using fsevents.\n  // Other platforms use non-polling fs_watch.\n  if (undef(opts, 'usePolling') && !opts.useFsEvents) {\n    opts.usePolling = isMacos;\n  }\n\n  // Always default to polling on IBM i because fs.watch() is not available on IBM i.\n  if(isIBMi) {\n    opts.usePolling = true;\n  }\n\n  // Global override (useful for end-developers that need to force polling for all\n  // instances of chokidar, regardless of usage/dependency depth)\n  const envPoll = process.env.CHOKIDAR_USEPOLLING;\n  if (envPoll !== undefined) {\n    const envLower = envPoll.toLowerCase();\n\n    if (envLower === 'false' || envLower === '0') {\n      opts.usePolling = false;\n    } else if (envLower === 'true' || envLower === '1') {\n      opts.usePolling = true;\n    } else {\n      opts.usePolling = !!envLower;\n    }\n  }\n  const envInterval = process.env.CHOKIDAR_INTERVAL;\n  if (envInterval) {\n    opts.interval = Number.parseInt(envInterval, 10);\n  }\n\n  // Editor atomic write normalization enabled by default with fs.watch\n  if (undef(opts, 'atomic')) opts.atomic = !opts.usePolling && !opts.useFsEvents;\n  if (opts.atomic) this._pendingUnlinks = new Map();\n\n  if (undef(opts, 'followSymlinks')) opts.followSymlinks = true;\n\n  if (undef(opts, 'awaitWriteFinish')) opts.awaitWriteFinish = false;\n  if (opts.awaitWriteFinish === true) opts.awaitWriteFinish = {};\n  const awf = opts.awaitWriteFinish;\n  if (awf) {\n    if (!awf.stabilityThreshold) awf.stabilityThreshold = 2000;\n    if (!awf.pollInterval) awf.pollInterval = 100;\n    this._pendingWrites = new Map();\n  }\n  if (opts.ignored) opts.ignored = arrify(opts.ignored);\n\n  let readyCalls = 0;\n  this._emitReady = () => {\n    readyCalls++;\n    if (readyCalls >= this._readyCount) {\n      this._emitReady = EMPTY_FN;\n      this._readyEmitted = true;\n      // use process.nextTick to allow time for listener to be bound\n      process.nextTick(() => this.emit(EV_READY));\n    }\n  };\n  this._emitRaw = (...args) => this.emit(EV_RAW, ...args);\n  this._readyEmitted = false;\n  this.options = opts;\n\n  // Initialize with proper watcher.\n  if (opts.useFsEvents) {\n    this._fsEventsHandler = new FsEventsHandler(this);\n  } else {\n    this._nodeFsHandler = new NodeFsHandler(this);\n  }\n\n  // You’re frozen when your heart’s not open.\n  Object.freeze(opts);\n}\n\n// Public methods\n\n/**\n * Adds paths to be watched on an existing FSWatcher instance\n * @param {Path|Array<Path>} paths_\n * @param {String=} _origAdd private; for handling non-existent paths to be watched\n * @param {Boolean=} _internal private; indicates a non-user add\n * @returns {FSWatcher} for chaining\n */\nadd(paths_, _origAdd, _internal) {\n  const {cwd, disableGlobbing} = this.options;\n  this.closed = false;\n  let paths = unifyPaths(paths_);\n  if (cwd) {\n    paths = paths.map((path) => {\n      const absPath = getAbsolutePath(path, cwd);\n\n      // Check `path` instead of `absPath` because the cwd portion can't be a glob\n      if (disableGlobbing || !isGlob(path)) {\n        return absPath;\n      }\n      return normalizePath(absPath);\n    });\n  }\n\n  // set aside negated glob strings\n  paths = paths.filter((path) => {\n    if (path.startsWith(BANG)) {\n      this._ignoredPaths.add(path.slice(1));\n      return false;\n    }\n\n    // if a path is being added that was previously ignored, stop ignoring it\n    this._ignoredPaths.delete(path);\n    this._ignoredPaths.delete(path + SLASH_GLOBSTAR);\n\n    // reset the cached userIgnored anymatch fn\n    // to make ignoredPaths changes effective\n    this._userIgnored = undefined;\n\n    return true;\n  });\n\n  if (this.options.useFsEvents && this._fsEventsHandler) {\n    if (!this._readyCount) this._readyCount = paths.length;\n    if (this.options.persistent) this._readyCount *= 2;\n    paths.forEach((path) => this._fsEventsHandler._addToFsEvents(path));\n  } else {\n    if (!this._readyCount) this._readyCount = 0;\n    this._readyCount += paths.length;\n    Promise.all(\n      paths.map(async path => {\n        const res = await this._nodeFsHandler._addToNodeFs(path, !_internal, 0, 0, _origAdd);\n        if (res) this._emitReady();\n        return res;\n      })\n    ).then(results => {\n      if (this.closed) return;\n      results.filter(item => item).forEach(item => {\n        this.add(sysPath.dirname(item), sysPath.basename(_origAdd || item));\n      });\n    });\n  }\n\n  return this;\n}\n\n/**\n * Close watchers or start ignoring events from specified paths.\n * @param {Path|Array<Path>} paths_ - string or array of strings, file/directory paths and/or globs\n * @returns {FSWatcher} for chaining\n*/\nunwatch(paths_) {\n  if (this.closed) return this;\n  const paths = unifyPaths(paths_);\n  const {cwd} = this.options;\n\n  paths.forEach((path) => {\n    // convert to absolute path unless relative path already matches\n    if (!sysPath.isAbsolute(path) && !this._closers.has(path)) {\n      if (cwd) path = sysPath.join(cwd, path);\n      path = sysPath.resolve(path);\n    }\n\n    this._closePath(path);\n\n    this._ignoredPaths.add(path);\n    if (this._watched.has(path)) {\n      this._ignoredPaths.add(path + SLASH_GLOBSTAR);\n    }\n\n    // reset the cached userIgnored anymatch fn\n    // to make ignoredPaths changes effective\n    this._userIgnored = undefined;\n  });\n\n  return this;\n}\n\n/**\n * Close watchers and remove all listeners from watched paths.\n * @returns {Promise<void>}.\n*/\nclose() {\n  if (this.closed) return this._closePromise;\n  this.closed = true;\n\n  // Memory management.\n  this.removeAllListeners();\n  const closers = [];\n  this._closers.forEach(closerList => closerList.forEach(closer => {\n    const promise = closer();\n    if (promise instanceof Promise) closers.push(promise);\n  }));\n  this._streams.forEach(stream => stream.destroy());\n  this._userIgnored = undefined;\n  this._readyCount = 0;\n  this._readyEmitted = false;\n  this._watched.forEach(dirent => dirent.dispose());\n  ['closers', 'watched', 'streams', 'symlinkPaths', 'throttled'].forEach(key => {\n    this[`_${key}`].clear();\n  });\n\n  this._closePromise = closers.length ? Promise.all(closers).then(() => undefined) : Promise.resolve();\n  return this._closePromise;\n}\n\n/**\n * Expose list of watched paths\n * @returns {Object} for chaining\n*/\ngetWatched() {\n  const watchList = {};\n  this._watched.forEach((entry, dir) => {\n    const key = this.options.cwd ? sysPath.relative(this.options.cwd, dir) : dir;\n    watchList[key || ONE_DOT] = entry.getChildren().sort();\n  });\n  return watchList;\n}\n\nemitWithAll(event, args) {\n  this.emit(...args);\n  if (event !== EV_ERROR) this.emit(EV_ALL, ...args);\n}\n\n// Common helpers\n// --------------\n\n/**\n * Normalize and emit events.\n * Calling _emit DOES NOT MEAN emit() would be called!\n * @param {EventName} event Type of event\n * @param {Path} path File or directory path\n * @param {*=} val1 arguments to be passed with event\n * @param {*=} val2\n * @param {*=} val3\n * @returns the error if defined, otherwise the value of the FSWatcher instance's `closed` flag\n */\nasync _emit(event, path, val1, val2, val3) {\n  if (this.closed) return;\n\n  const opts = this.options;\n  if (isWindows) path = sysPath.normalize(path);\n  if (opts.cwd) path = sysPath.relative(opts.cwd, path);\n  /** @type Array<any> */\n  const args = [event, path];\n  if (val3 !== undefined) args.push(val1, val2, val3);\n  else if (val2 !== undefined) args.push(val1, val2);\n  else if (val1 !== undefined) args.push(val1);\n\n  const awf = opts.awaitWriteFinish;\n  let pw;\n  if (awf && (pw = this._pendingWrites.get(path))) {\n    pw.lastChange = new Date();\n    return this;\n  }\n\n  if (opts.atomic) {\n    if (event === EV_UNLINK) {\n      this._pendingUnlinks.set(path, args);\n      setTimeout(() => {\n        this._pendingUnlinks.forEach((entry, path) => {\n          this.emit(...entry);\n          this.emit(EV_ALL, ...entry);\n          this._pendingUnlinks.delete(path);\n        });\n      }, typeof opts.atomic === 'number' ? opts.atomic : 100);\n      return this;\n    }\n    if (event === EV_ADD && this._pendingUnlinks.has(path)) {\n      event = args[0] = EV_CHANGE;\n      this._pendingUnlinks.delete(path);\n    }\n  }\n\n  if (awf && (event === EV_ADD || event === EV_CHANGE) && this._readyEmitted) {\n    const awfEmit = (err, stats) => {\n      if (err) {\n        event = args[0] = EV_ERROR;\n        args[1] = err;\n        this.emitWithAll(event, args);\n      } else if (stats) {\n        // if stats doesn't exist the file must have been deleted\n        if (args.length > 2) {\n          args[2] = stats;\n        } else {\n          args.push(stats);\n        }\n        this.emitWithAll(event, args);\n      }\n    };\n\n    this._awaitWriteFinish(path, awf.stabilityThreshold, event, awfEmit);\n    return this;\n  }\n\n  if (event === EV_CHANGE) {\n    const isThrottled = !this._throttle(EV_CHANGE, path, 50);\n    if (isThrottled) return this;\n  }\n\n  if (opts.alwaysStat && val1 === undefined &&\n    (event === EV_ADD || event === EV_ADD_DIR || event === EV_CHANGE)\n  ) {\n    const fullPath = opts.cwd ? sysPath.join(opts.cwd, path) : path;\n    let stats;\n    try {\n      stats = await stat(fullPath);\n    } catch (err) {}\n    // Suppress event when fs_stat fails, to avoid sending undefined 'stat'\n    if (!stats || this.closed) return;\n    args.push(stats);\n  }\n  this.emitWithAll(event, args);\n\n  return this;\n}\n\n/**\n * Common handler for errors\n * @param {Error} error\n * @returns {Error|Boolean} The error if defined, otherwise the value of the FSWatcher instance's `closed` flag\n */\n_handleError(error) {\n  const code = error && error.code;\n  if (error && code !== 'ENOENT' && code !== 'ENOTDIR' &&\n    (!this.options.ignorePermissionErrors || (code !== 'EPERM' && code !== 'EACCES'))\n  ) {\n    this.emit(EV_ERROR, error);\n  }\n  return error || this.closed;\n}\n\n/**\n * Helper utility for throttling\n * @param {ThrottleType} actionType type being throttled\n * @param {Path} path being acted upon\n * @param {Number} timeout duration of time to suppress duplicate actions\n * @returns {Object|false} tracking object or false if action should be suppressed\n */\n_throttle(actionType, path, timeout) {\n  if (!this._throttled.has(actionType)) {\n    this._throttled.set(actionType, new Map());\n  }\n\n  /** @type {Map<Path, Object>} */\n  const action = this._throttled.get(actionType);\n  /** @type {Object} */\n  const actionPath = action.get(path);\n\n  if (actionPath) {\n    actionPath.count++;\n    return false;\n  }\n\n  let timeoutObject;\n  const clear = () => {\n    const item = action.get(path);\n    const count = item ? item.count : 0;\n    action.delete(path);\n    clearTimeout(timeoutObject);\n    if (item) clearTimeout(item.timeoutObject);\n    return count;\n  };\n  timeoutObject = setTimeout(clear, timeout);\n  const thr = {timeoutObject, clear, count: 0};\n  action.set(path, thr);\n  return thr;\n}\n\n_incrReadyCount() {\n  return this._readyCount++;\n}\n\n/**\n * Awaits write operation to finish.\n * Polls a newly created file for size variations. When files size does not change for 'threshold' milliseconds calls callback.\n * @param {Path} path being acted upon\n * @param {Number} threshold Time in milliseconds a file size must be fixed before acknowledging write OP is finished\n * @param {EventName} event\n * @param {Function} awfEmit Callback to be called when ready for event to be emitted.\n */\n_awaitWriteFinish(path, threshold, event, awfEmit) {\n  let timeoutHandler;\n\n  let fullPath = path;\n  if (this.options.cwd && !sysPath.isAbsolute(path)) {\n    fullPath = sysPath.join(this.options.cwd, path);\n  }\n\n  const now = new Date();\n\n  const awaitWriteFinish = (prevStat) => {\n    fs.stat(fullPath, (err, curStat) => {\n      if (err || !this._pendingWrites.has(path)) {\n        if (err && err.code !== 'ENOENT') awfEmit(err);\n        return;\n      }\n\n      const now = Number(new Date());\n\n      if (prevStat && curStat.size !== prevStat.size) {\n        this._pendingWrites.get(path).lastChange = now;\n      }\n      const pw = this._pendingWrites.get(path);\n      const df = now - pw.lastChange;\n\n      if (df >= threshold) {\n        this._pendingWrites.delete(path);\n        awfEmit(undefined, curStat);\n      } else {\n        timeoutHandler = setTimeout(\n          awaitWriteFinish,\n          this.options.awaitWriteFinish.pollInterval,\n          curStat\n        );\n      }\n    });\n  };\n\n  if (!this._pendingWrites.has(path)) {\n    this._pendingWrites.set(path, {\n      lastChange: now,\n      cancelWait: () => {\n        this._pendingWrites.delete(path);\n        clearTimeout(timeoutHandler);\n        return event;\n      }\n    });\n    timeoutHandler = setTimeout(\n      awaitWriteFinish,\n      this.options.awaitWriteFinish.pollInterval\n    );\n  }\n}\n\n_getGlobIgnored() {\n  return [...this._ignoredPaths.values()];\n}\n\n/**\n * Determines whether user has asked to ignore this path.\n * @param {Path} path filepath or dir\n * @param {fs.Stats=} stats result of fs.stat\n * @returns {Boolean}\n */\n_isIgnored(path, stats) {\n  if (this.options.atomic && DOT_RE.test(path)) return true;\n  if (!this._userIgnored) {\n    const {cwd} = this.options;\n    const ign = this.options.ignored;\n\n    const ignored = ign && ign.map(normalizeIgnored(cwd));\n    const paths = arrify(ignored)\n      .filter((path) => typeof path === STRING_TYPE && !isGlob(path))\n      .map((path) => path + SLASH_GLOBSTAR);\n    const list = this._getGlobIgnored().map(normalizeIgnored(cwd)).concat(ignored, paths);\n    this._userIgnored = anymatch(list, undefined, ANYMATCH_OPTS);\n  }\n\n  return this._userIgnored([path, stats]);\n}\n\n_isntIgnored(path, stat) {\n  return !this._isIgnored(path, stat);\n}\n\n/**\n * Provides a set of common helpers and properties relating to symlink and glob handling.\n * @param {Path} path file, directory, or glob pattern being watched\n * @param {Number=} depth at any depth > 0, this isn't a glob\n * @returns {WatchHelper} object containing helpers for this path\n */\n_getWatchHelpers(path, depth) {\n  const watchPath = depth || this.options.disableGlobbing || !isGlob(path) ? path : globParent(path);\n  const follow = this.options.followSymlinks;\n\n  return new WatchHelper(path, watchPath, follow, this);\n}\n\n// Directory helpers\n// -----------------\n\n/**\n * Provides directory tracking objects\n * @param {String} directory path of the directory\n * @returns {DirEntry} the directory's tracking object\n */\n_getWatchedDir(directory) {\n  if (!this._boundRemove) this._boundRemove = this._remove.bind(this);\n  const dir = sysPath.resolve(directory);\n  if (!this._watched.has(dir)) this._watched.set(dir, new DirEntry(dir, this._boundRemove));\n  return this._watched.get(dir);\n}\n\n// File helpers\n// ------------\n\n/**\n * Check for read permissions.\n * Based on this answer on SO: https://stackoverflow.com/a/11781404/1358405\n * @param {fs.Stats} stats - object, result of fs_stat\n * @returns {Boolean} indicates whether the file can be read\n*/\n_hasReadPermissions(stats) {\n  if (this.options.ignorePermissionErrors) return true;\n\n  // stats.mode may be bigint\n  const md = stats && Number.parseInt(stats.mode, 10);\n  const st = md & 0o777;\n  const it = Number.parseInt(st.toString(8)[0], 10);\n  return Boolean(4 & it);\n}\n\n/**\n * Handles emitting unlink events for\n * files and directories, and via recursion, for\n * files and directories within directories that are unlinked\n * @param {String} directory within which the following item is located\n * @param {String} item      base path of item/directory\n * @returns {void}\n*/\n_remove(directory, item, isDirectory) {\n  // if what is being deleted is a directory, get that directory's paths\n  // for recursive deleting and cleaning of watched object\n  // if it is not a directory, nestedDirectoryChildren will be empty array\n  const path = sysPath.join(directory, item);\n  const fullPath = sysPath.resolve(path);\n  isDirectory = isDirectory != null\n    ? isDirectory\n    : this._watched.has(path) || this._watched.has(fullPath);\n\n  // prevent duplicate handling in case of arriving here nearly simultaneously\n  // via multiple paths (such as _handleFile and _handleDir)\n  if (!this._throttle('remove', path, 100)) return;\n\n  // if the only watched file is removed, watch for its return\n  if (!isDirectory && !this.options.useFsEvents && this._watched.size === 1) {\n    this.add(directory, item, true);\n  }\n\n  // This will create a new entry in the watched object in either case\n  // so we got to do the directory check beforehand\n  const wp = this._getWatchedDir(path);\n  const nestedDirectoryChildren = wp.getChildren();\n\n  // Recursively remove children directories / files.\n  nestedDirectoryChildren.forEach(nested => this._remove(path, nested));\n\n  // Check if item was on the watched list and remove it\n  const parent = this._getWatchedDir(directory);\n  const wasTracked = parent.has(item);\n  parent.remove(item);\n\n  // Fixes issue #1042 -> Relative paths were detected and added as symlinks\n  // (https://github.com/paulmillr/chokidar/blob/e1753ddbc9571bdc33b4a4af172d52cb6e611c10/lib/nodefs-handler.js#L612),\n  // but never removed from the map in case the path was deleted.\n  // This leads to an incorrect state if the path was recreated:\n  // https://github.com/paulmillr/chokidar/blob/e1753ddbc9571bdc33b4a4af172d52cb6e611c10/lib/nodefs-handler.js#L553\n  if (this._symlinkPaths.has(fullPath)) {\n    this._symlinkPaths.delete(fullPath);\n  }\n\n  // If we wait for this file to be fully written, cancel the wait.\n  let relPath = path;\n  if (this.options.cwd) relPath = sysPath.relative(this.options.cwd, path);\n  if (this.options.awaitWriteFinish && this._pendingWrites.has(relPath)) {\n    const event = this._pendingWrites.get(relPath).cancelWait();\n    if (event === EV_ADD) return;\n  }\n\n  // The Entry will either be a directory that just got removed\n  // or a bogus entry to a file, in either case we have to remove it\n  this._watched.delete(path);\n  this._watched.delete(fullPath);\n  const eventName = isDirectory ? EV_UNLINK_DIR : EV_UNLINK;\n  if (wasTracked && !this._isIgnored(path)) this._emit(eventName, path);\n\n  // Avoid conflicts if we later create another file with the same name\n  if (!this.options.useFsEvents) {\n    this._closePath(path);\n  }\n}\n\n/**\n * Closes all watchers for a path\n * @param {Path} path\n */\n_closePath(path) {\n  this._closeFile(path)\n  const dir = sysPath.dirname(path);\n  this._getWatchedDir(dir).remove(sysPath.basename(path));\n}\n\n/**\n * Closes only file-specific watchers\n * @param {Path} path\n */\n_closeFile(path) {\n  const closers = this._closers.get(path);\n  if (!closers) return;\n  closers.forEach(closer => closer());\n  this._closers.delete(path);\n}\n\n/**\n *\n * @param {Path} path\n * @param {Function} closer\n */\n_addPathCloser(path, closer) {\n  if (!closer) return;\n  let list = this._closers.get(path);\n  if (!list) {\n    list = [];\n    this._closers.set(path, list);\n  }\n  list.push(closer);\n}\n\n_readdirp(root, opts) {\n  if (this.closed) return;\n  const options = {type: EV_ALL, alwaysStat: true, lstat: true, ...opts};\n  let stream = readdirp(root, options);\n  this._streams.add(stream);\n  stream.once(STR_CLOSE, () => {\n    stream = undefined;\n  });\n  stream.once(STR_END, () => {\n    if (stream) {\n      this._streams.delete(stream);\n      stream = undefined;\n    }\n  });\n  return stream;\n}\n\n}\n\n// Export FSWatcher class\nexports.FSWatcher = FSWatcher;\n\n/**\n * Instantiates watcher with paths to be tracked.\n * @param {String|Array<String>} paths file/directory paths and/or globs\n * @param {Object=} options chokidar opts\n * @returns an instance of FSWatcher for chaining.\n */\nconst watch = (paths, options) => {\n  const watcher = new FSWatcher(options);\n  watcher.add(paths);\n  return watcher;\n};\n\nexports.watch = watch;\n/LICENSE\u0004iThe MIT License (MIT)\n\nCopyright (c) 2012-2019 Paul Miller (https://paulmillr.com), Elan Shanker\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the “Software”), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n/package.json\u0007({\n  \"name\": \"chokidar\",\n  \"description\": \"Minimal and efficient cross-platform file watching library\",\n  \"version\": \"3.5.3\",\n  \"homepage\": \"https://github.com/paulmillr/chokidar\",\n  \"author\": \"Paul Miller (https://paulmillr.com)\",\n  \"contributors\": [\n    \"Paul Miller (https://paulmillr.com)\",\n    \"Elan Shanker\"\n  ],\n  \"engines\": {\n    \"node\": \">= 8.10.0\"\n  },\n  \"main\": \"index.js\",\n  \"dependencies\": {\n    \"anymatch\": \"~3.1.2\",\n    \"braces\": \"~3.0.2\",\n    \"glob-parent\": \"~5.1.2\",\n    \"is-binary-path\": \"~2.1.0\",\n    \"is-glob\": \"~4.0.1\",\n    \"normalize-path\": \"~3.0.0\",\n    \"readdirp\": \"~3.6.0\"\n  },\n  \"optionalDependencies\": {\n    \"fsevents\": \"~2.3.2\"\n  },\n  \"devDependencies\": {\n    \"@types/node\": \"^14\",\n    \"chai\": \"^4.3\",\n    \"dtslint\": \"^3.3.0\",\n    \"eslint\": \"^7.0.0\",\n    \"mocha\": \"^7.0.0\",\n    \"nyc\": \"^15.0.0\",\n    \"rimraf\": \"^3.0.0\",\n    \"sinon\": \"^9.0.1\",\n    \"sinon-chai\": \"^3.3.0\",\n    \"typescript\": \"~4.4.3\",\n    \"upath\": \"^1.2.0\"\n  },\n  \"files\": [\n    \"index.js\",\n    \"lib/*.js\",\n    \"types/index.d.ts\"\n  ],\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/paulmillr/chokidar.git\"\n  },\n  \"bugs\": {\n    \"url\": \"https://github.com/paulmillr/chokidar/issues\"\n  },\n  \"license\": \"MIT\",\n  \"scripts\": {\n    \"dtslint\": \"dtslint types\",\n    \"lint\": \"eslint --report-unused-disable-directives --ignore-path .gitignore .\",\n    \"mocha\": \"mocha --exit --timeout 90000\",\n    \"test\": \"npm run lint && npm run mocha\"\n  },\n  \"keywords\": [\n    \"fs\",\n    \"watch\",\n    \"watchFile\",\n    \"watcher\",\n    \"watching\",\n    \"file\",\n    \"fsevents\"\n  ],\n  \"types\": \"./types/index.d.ts\",\n  \"nyc\": {\n    \"include\": [\n      \"index.js\",\n      \"lib/*.js\"\n    ],\n    \"reporter\": [\n      \"html\",\n      \"text\"\n    ]\n  },\n  \"funding\": [\n    {\n      \"type\": \"individual\",\n      \"url\": \"https://paulmillr.com/funding/\"\n    }\n  ]\n}\n/types/index.d.ts\u0018// TypeScript Version: 3.0\n\n/// <reference types=\"node\" />\n\nimport * as fs from \"fs\";\nimport { EventEmitter } from \"events\";\nimport { Matcher } from 'anymatch';\n\nexport class FSWatcher extends EventEmitter implements fs.FSWatcher {\n  options: WatchOptions;\n\n  /**\n   * Constructs a new FSWatcher instance with optional WatchOptions parameter.\n   */\n  constructor(options?: WatchOptions);\n\n  /**\n   * Add files, directories, or glob patterns for tracking. Takes an array of strings or just one\n   * string.\n   */\n  add(paths: string | ReadonlyArray<string>): this;\n\n  /**\n   * Stop watching files, directories, or glob patterns. Takes an array of strings or just one\n   * string.\n   */\n  unwatch(paths: string | ReadonlyArray<string>): this;\n\n  /**\n   * Returns an object representing all the paths on the file system being watched by this\n   * `FSWatcher` instance. The object's keys are all the directories (using absolute paths unless\n   * the `cwd` option was used), and the values are arrays of the names of the items contained in\n   * each directory.\n   */\n  getWatched(): {\n    [directory: string]: string[];\n  };\n\n  /**\n   * Removes all listeners from watched files.\n   */\n  close(): Promise<void>;\n\n  on(event: 'add'|'addDir'|'change', listener: (path: string, stats?: fs.Stats) => void): this;\n\n  on(event: 'all', listener: (eventName: 'add'|'addDir'|'change'|'unlink'|'unlinkDir', path: string, stats?: fs.Stats) => void): this;\n\n  /**\n   * Error occurred\n   */\n  on(event: 'error', listener: (error: Error) => void): this;\n\n  /**\n   * Exposes the native Node `fs.FSWatcher events`\n   */\n  on(event: 'raw', listener: (eventName: string, path: string, details: any) => void): this;\n\n  /**\n   * Fires when the initial scan is complete\n   */\n  on(event: 'ready', listener: () => void): this;\n\n  on(event: 'unlink'|'unlinkDir', listener: (path: string) => void): this;\n\n  on(event: string, listener: (...args: any[]) => void): this;\n}\n\nexport interface WatchOptions {\n  /**\n   * Indicates whether the process should continue to run as long as files are being watched. If\n   * set to `false` when using `fsevents` to watch, no more events will be emitted after `ready`,\n   * even if the process continues to run.\n   */\n  persistent?: boolean;\n\n  /**\n   * ([anymatch](https://github.com/micromatch/anymatch)-compatible definition) Defines files/paths to\n   * be ignored. The whole relative or absolute path is tested, not just filename. If a function\n   * with two arguments is provided, it gets called twice per path - once with a single argument\n   * (the path), second time with two arguments (the path and the\n   * [`fs.Stats`](https://nodejs.org/api/fs.html#fs_class_fs_stats) object of that path).\n   */\n  ignored?: Matcher;\n\n  /**\n   * If set to `false` then `add`/`addDir` events are also emitted for matching paths while\n   * instantiating the watching as chokidar discovers these file paths (before the `ready` event).\n   */\n  ignoreInitial?: boolean;\n\n  /**\n   * When `false`, only the symlinks themselves will be watched for changes instead of following\n   * the link references and bubbling events through the link's path.\n   */\n  followSymlinks?: boolean;\n\n  /**\n   * The base directory from which watch `paths` are to be derived. Paths emitted with events will\n   * be relative to this.\n   */\n  cwd?: string;\n\n  /**\n   *  If set to true then the strings passed to .watch() and .add() are treated as literal path\n   *  names, even if they look like globs. Default: false.\n   */\n  disableGlobbing?: boolean;\n\n  /**\n   * Whether to use fs.watchFile (backed by polling), or fs.watch. If polling leads to high CPU\n   * utilization, consider setting this to `false`. It is typically necessary to **set this to\n   * `true` to successfully watch files over a network**, and it may be necessary to successfully\n   * watch files in other non-standard situations. Setting to `true` explicitly on OS X overrides\n   * the `useFsEvents` default.\n   */\n  usePolling?: boolean;\n\n  /**\n   * Whether to use the `fsevents` watching interface if available. When set to `true` explicitly\n   * and `fsevents` is available this supercedes the `usePolling` setting. When set to `false` on\n   * OS X, `usePolling: true` becomes the default.\n   */\n  useFsEvents?: boolean;\n\n  /**\n   * If relying upon the [`fs.Stats`](https://nodejs.org/api/fs.html#fs_class_fs_stats) object that\n   * may get passed with `add`, `addDir`, and `change` events, set this to `true` to ensure it is\n   * provided even in cases where it wasn't already available from the underlying watch events.\n   */\n  alwaysStat?: boolean;\n\n  /**\n   * If set, limits how many levels of subdirectories will be traversed.\n   */\n  depth?: number;\n\n  /**\n   * Interval of file system polling.\n   */\n  interval?: number;\n\n  /**\n   * Interval of file system polling for binary files. ([see list of binary extensions](https://gi\n   * thub.com/sindresorhus/binary-extensions/blob/master/binary-extensions.json))\n   */\n  binaryInterval?: number;\n\n  /**\n   *  Indicates whether to watch files that don't have read permissions if possible. If watching\n   *  fails due to `EPERM` or `EACCES` with this set to `true`, the errors will be suppressed\n   *  silently.\n   */\n  ignorePermissionErrors?: boolean;\n\n  /**\n   * `true` if `useFsEvents` and `usePolling` are `false`). Automatically filters out artifacts\n   * that occur when using editors that use \"atomic writes\" instead of writing directly to the\n   * source file. If a file is re-added within 100 ms of being deleted, Chokidar emits a `change`\n   * event rather than `unlink` then `add`. If the default of 100 ms does not work well for you,\n   * you can override it by setting `atomic` to a custom value, in milliseconds.\n   */\n  atomic?: boolean | number;\n\n  /**\n   * can be set to an object in order to adjust timing params:\n   */\n  awaitWriteFinish?: AwaitWriteFinishOptions | boolean;\n}\n\nexport interface AwaitWriteFinishOptions {\n  /**\n   * Amount of time in milliseconds for a file size to remain constant before emitting its event.\n   */\n  stabilityThreshold?: number;\n\n  /**\n   * File size polling interval.\n   */\n  pollInterval?: number;\n}\n\n/**\n * produces an instance of `FSWatcher`.\n */\nexport function watch(\n  paths: string | ReadonlyArray<string>,\n  options?: WatchOptions\n): FSWatcher;\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/Y2xpLWN1cnNvckA0LjAuMA==",
    "content": "/package.json\u0003W{\n\t\"name\": \"cli-cursor\",\n\t\"version\": \"4.0.0\",\n\t\"description\": \"Toggle the CLI cursor\",\n\t\"license\": \"MIT\",\n\t\"repository\": \"sindresorhus/cli-cursor\",\n\t\"funding\": \"https://github.com/sponsors/sindresorhus\",\n\t\"author\": {\n\t\t\"name\": \"Sindre Sorhus\",\n\t\t\"email\": \"sindresorhus@gmail.com\",\n\t\t\"url\": \"https://sindresorhus.com\"\n\t},\n\t\"type\": \"module\",\n\t\"exports\": \"./index.js\",\n\t\"engines\": {\n\t\t\"node\": \"^12.20.0 || ^14.13.1 || >=16.0.0\"\n\t},\n\t\"scripts\": {\n\t\t\"test\": \"xo && ava && tsd\"\n\t},\n\t\"files\": [\n\t\t\"index.js\",\n\t\t\"index.d.ts\"\n\t],\n\t\"keywords\": [\n\t\t\"cli\",\n\t\t\"cursor\",\n\t\t\"ansi\",\n\t\t\"toggle\",\n\t\t\"display\",\n\t\t\"show\",\n\t\t\"hide\",\n\t\t\"term\",\n\t\t\"terminal\",\n\t\t\"console\",\n\t\t\"tty\",\n\t\t\"shell\",\n\t\t\"command-line\"\n\t],\n\t\"dependencies\": {\n\t\t\"restore-cursor\": \"^4.0.0\"\n\t},\n\t\"devDependencies\": {\n\t\t\"@types/node\": \"^16.7.1\",\n\t\t\"ava\": \"^3.15.0\",\n\t\t\"tsd\": \"^0.17.0\",\n\t\t\"xo\": \"^0.44.0\"\n\t}\n}\n/index.d.ts\u0003\u0017declare const cliCursor: {\n\t/**\n\tShow cursor.\n\n\t@param stream - Default: `process.stderr`.\n\n\t@example\n\t```\n\timport cliCursor from 'cli-cursor';\n\n\tcliCursor.show();\n\t```\n\t*/\n\tshow(stream?: NodeJS.WritableStream): void;\n\n\t/**\n\tHide cursor.\n\n\t@param stream - Default: `process.stderr`.\n\n\t@example\n\t```\n\timport cliCursor from 'cli-cursor';\n\n\tcliCursor.hide();\n\t```\n\t*/\n\thide(stream?: NodeJS.WritableStream): void;\n\n\t/**\n\tToggle cursor visibility.\n\n\t@param force - Is useful to show or hide the cursor based on a boolean.\n\t@param stream - Default: `process.stderr`.\n\n\t@example\n\t```\n\timport cliCursor from 'cli-cursor';\n\n\tconst unicornsAreAwesome = true;\n\tcliCursor.toggle(unicornsAreAwesome);\n\t```\n\t*/\n\ttoggle(force?: boolean, stream?: NodeJS.WritableStream): void;\n};\n\nexport default cliCursor;\n/readme.md\u0003# cli-cursor\n\n> Toggle the CLI cursor\n\nThe cursor is [gracefully restored](https://github.com/sindresorhus/restore-cursor) if the process exits.\n\n## Install\n\n```\n$ npm install cli-cursor\n```\n\n## Usage\n\n```js\nimport cliCursor from 'cli-cursor';\n\ncliCursor.hide();\n\nconst unicornsAreAwesome = true;\ncliCursor.toggle(unicornsAreAwesome);\n```\n\n## API\n\n### .show(stream?)\n\n### .hide(stream?)\n\n### .toggle(force?, stream?)\n\n#### force\n\nUseful for showing or hiding the cursor based on a boolean.\n\n#### stream\n\nType: `stream.Writable`\\\nDefault: `process.stderr`\n\n---\n\n<div align=\"center\">\n\t<b>\n\t\t<a href=\"https://tidelift.com/subscription/pkg/npm-cli-cursor?utm_source=npm-cli-cursor&utm_medium=referral&utm_campaign=readme\">Get professional support for this package with a Tidelift subscription</a>\n\t</b>\n\t<br>\n\t<sub>\n\t\tTidelift helps make open source sustainable for maintainers while giving companies<br>assurances about security, maintenance, and licensing for their dependencies.\n\t</sub>\n</div>\n/license\u0004]MIT License\n\nCopyright (c) Sindre Sorhus <sindresorhus@gmail.com> (https://sindresorhus.com)\n\nPermission 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:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE 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.\n/index.js\u0002import process from 'node:process';\nimport restoreCursor from 'restore-cursor';\n\nlet isHidden = false;\n\nconst cliCursor = {};\n\ncliCursor.show = (writableStream = process.stderr) => {\n\tif (!writableStream.isTTY) {\n\t\treturn;\n\t}\n\n\tisHidden = false;\n\twritableStream.write('\\u001B[?25h');\n};\n\ncliCursor.hide = (writableStream = process.stderr) => {\n\tif (!writableStream.isTTY) {\n\t\treturn;\n\t}\n\n\trestoreCursor();\n\tisHidden = true;\n\twritableStream.write('\\u001B[?25l');\n};\n\ncliCursor.toggle = (force, writableStream) => {\n\tif (force !== undefined) {\n\t\tisHidden = force;\n\t}\n\n\tif (isHidden) {\n\t\tcliCursor.show(writableStream);\n\t} else {\n\t\tcliCursor.hide(writableStream);\n\t}\n};\n\nexport default cliCursor;\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/Y2xpLXNwaW5uZXJzQDIuNy4w",
    "content": "/package.json\u0003{\n\t\"name\": \"cli-spinners\",\n\t\"version\": \"2.7.0\",\n\t\"description\": \"Spinners for use in the terminal\",\n\t\"license\": \"MIT\",\n\t\"repository\": \"sindresorhus/cli-spinners\",\n\t\"funding\": \"https://github.com/sponsors/sindresorhus\",\n\t\"author\": {\n\t\t\"name\": \"Sindre Sorhus\",\n\t\t\"email\": \"sindresorhus@gmail.com\",\n\t\t\"url\": \"https://sindresorhus.com\"\n\t},\n\t\"engines\": {\n\t\t\"node\": \">=6\"\n\t},\n\t\"scripts\": {\n\t\t\"test\": \"xo && ava && tsd\",\n\t\t\"asciicast\": \"asciinema rec --command='node example-all.js' --title='cli-spinner' --quiet\"\n\t},\n\t\"files\": [\n\t\t\"index.js\",\n\t\t\"index.d.ts\",\n\t\t\"spinners.json\"\n\t],\n\t\"keywords\": [\n\t\t\"cli\",\n\t\t\"spinner\",\n\t\t\"spinners\",\n\t\t\"terminal\",\n\t\t\"term\",\n\t\t\"console\",\n\t\t\"ascii\",\n\t\t\"unicode\",\n\t\t\"loading\",\n\t\t\"indicator\",\n\t\t\"progress\",\n\t\t\"busy\",\n\t\t\"wait\",\n\t\t\"idle\",\n\t\t\"json\"\n\t],\n\t\"devDependencies\": {\n\t\t\"ava\": \"^1.4.1\",\n\t\t\"log-update\": \"^3.2.0\",\n\t\t\"string-length\": \"^4.0.1\",\n\t\t\"tsd\": \"^0.7.2\",\n\t\t\"xo\": \"^0.24.0\"\n\t}\n}\n/spinners.jsonWL{\n\t\"dots\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"⠋\",\n\t\t\t\"⠙\",\n\t\t\t\"⠹\",\n\t\t\t\"⠸\",\n\t\t\t\"⠼\",\n\t\t\t\"⠴\",\n\t\t\t\"⠦\",\n\t\t\t\"⠧\",\n\t\t\t\"⠇\",\n\t\t\t\"⠏\"\n\t\t]\n\t},\n\t\"dots2\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"⣾\",\n\t\t\t\"⣽\",\n\t\t\t\"⣻\",\n\t\t\t\"⢿\",\n\t\t\t\"⡿\",\n\t\t\t\"⣟\",\n\t\t\t\"⣯\",\n\t\t\t\"⣷\"\n\t\t]\n\t},\n\t\"dots3\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"⠋\",\n\t\t\t\"⠙\",\n\t\t\t\"⠚\",\n\t\t\t\"⠞\",\n\t\t\t\"⠖\",\n\t\t\t\"⠦\",\n\t\t\t\"⠴\",\n\t\t\t\"⠲\",\n\t\t\t\"⠳\",\n\t\t\t\"⠓\"\n\t\t]\n\t},\n\t\"dots4\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"⠄\",\n\t\t\t\"⠆\",\n\t\t\t\"⠇\",\n\t\t\t\"⠋\",\n\t\t\t\"⠙\",\n\t\t\t\"⠸\",\n\t\t\t\"⠰\",\n\t\t\t\"⠠\",\n\t\t\t\"⠰\",\n\t\t\t\"⠸\",\n\t\t\t\"⠙\",\n\t\t\t\"⠋\",\n\t\t\t\"⠇\",\n\t\t\t\"⠆\"\n\t\t]\n\t},\n\t\"dots5\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"⠋\",\n\t\t\t\"⠙\",\n\t\t\t\"⠚\",\n\t\t\t\"⠒\",\n\t\t\t\"⠂\",\n\t\t\t\"⠂\",\n\t\t\t\"⠒\",\n\t\t\t\"⠲\",\n\t\t\t\"⠴\",\n\t\t\t\"⠦\",\n\t\t\t\"⠖\",\n\t\t\t\"⠒\",\n\t\t\t\"⠐\",\n\t\t\t\"⠐\",\n\t\t\t\"⠒\",\n\t\t\t\"⠓\",\n\t\t\t\"⠋\"\n\t\t]\n\t},\n\t\"dots6\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"⠁\",\n\t\t\t\"⠉\",\n\t\t\t\"⠙\",\n\t\t\t\"⠚\",\n\t\t\t\"⠒\",\n\t\t\t\"⠂\",\n\t\t\t\"⠂\",\n\t\t\t\"⠒\",\n\t\t\t\"⠲\",\n\t\t\t\"⠴\",\n\t\t\t\"⠤\",\n\t\t\t\"⠄\",\n\t\t\t\"⠄\",\n\t\t\t\"⠤\",\n\t\t\t\"⠴\",\n\t\t\t\"⠲\",\n\t\t\t\"⠒\",\n\t\t\t\"⠂\",\n\t\t\t\"⠂\",\n\t\t\t\"⠒\",\n\t\t\t\"⠚\",\n\t\t\t\"⠙\",\n\t\t\t\"⠉\",\n\t\t\t\"⠁\"\n\t\t]\n\t},\n\t\"dots7\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"⠈\",\n\t\t\t\"⠉\",\n\t\t\t\"⠋\",\n\t\t\t\"⠓\",\n\t\t\t\"⠒\",\n\t\t\t\"⠐\",\n\t\t\t\"⠐\",\n\t\t\t\"⠒\",\n\t\t\t\"⠖\",\n\t\t\t\"⠦\",\n\t\t\t\"⠤\",\n\t\t\t\"⠠\",\n\t\t\t\"⠠\",\n\t\t\t\"⠤\",\n\t\t\t\"⠦\",\n\t\t\t\"⠖\",\n\t\t\t\"⠒\",\n\t\t\t\"⠐\",\n\t\t\t\"⠐\",\n\t\t\t\"⠒\",\n\t\t\t\"⠓\",\n\t\t\t\"⠋\",\n\t\t\t\"⠉\",\n\t\t\t\"⠈\"\n\t\t]\n\t},\n\t\"dots8\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"⠁\",\n\t\t\t\"⠁\",\n\t\t\t\"⠉\",\n\t\t\t\"⠙\",\n\t\t\t\"⠚\",\n\t\t\t\"⠒\",\n\t\t\t\"⠂\",\n\t\t\t\"⠂\",\n\t\t\t\"⠒\",\n\t\t\t\"⠲\",\n\t\t\t\"⠴\",\n\t\t\t\"⠤\",\n\t\t\t\"⠄\",\n\t\t\t\"⠄\",\n\t\t\t\"⠤\",\n\t\t\t\"⠠\",\n\t\t\t\"⠠\",\n\t\t\t\"⠤\",\n\t\t\t\"⠦\",\n\t\t\t\"⠖\",\n\t\t\t\"⠒\",\n\t\t\t\"⠐\",\n\t\t\t\"⠐\",\n\t\t\t\"⠒\",\n\t\t\t\"⠓\",\n\t\t\t\"⠋\",\n\t\t\t\"⠉\",\n\t\t\t\"⠈\",\n\t\t\t\"⠈\"\n\t\t]\n\t},\n\t\"dots9\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"⢹\",\n\t\t\t\"⢺\",\n\t\t\t\"⢼\",\n\t\t\t\"⣸\",\n\t\t\t\"⣇\",\n\t\t\t\"⡧\",\n\t\t\t\"⡗\",\n\t\t\t\"⡏\"\n\t\t]\n\t},\n\t\"dots10\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"⢄\",\n\t\t\t\"⢂\",\n\t\t\t\"⢁\",\n\t\t\t\"⡁\",\n\t\t\t\"⡈\",\n\t\t\t\"⡐\",\n\t\t\t\"⡠\"\n\t\t]\n\t},\n\t\"dots11\": {\n\t\t\"interval\": 100,\n\t\t\"frames\": [\n\t\t\t\"⠁\",\n\t\t\t\"⠂\",\n\t\t\t\"⠄\",\n\t\t\t\"⡀\",\n\t\t\t\"⢀\",\n\t\t\t\"⠠\",\n\t\t\t\"⠐\",\n\t\t\t\"⠈\"\n\t\t]\n\t},\n\t\"dots12\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"⢀⠀\",\n\t\t\t\"⡀⠀\",\n\t\t\t\"⠄⠀\",\n\t\t\t\"⢂⠀\",\n\t\t\t\"⡂⠀\",\n\t\t\t\"⠅⠀\",\n\t\t\t\"⢃⠀\",\n\t\t\t\"⡃⠀\",\n\t\t\t\"⠍⠀\",\n\t\t\t\"⢋⠀\",\n\t\t\t\"⡋⠀\",\n\t\t\t\"⠍⠁\",\n\t\t\t\"⢋⠁\",\n\t\t\t\"⡋⠁\",\n\t\t\t\"⠍⠉\",\n\t\t\t\"⠋⠉\",\n\t\t\t\"⠋⠉\",\n\t\t\t\"⠉⠙\",\n\t\t\t\"⠉⠙\",\n\t\t\t\"⠉⠩\",\n\t\t\t\"⠈⢙\",\n\t\t\t\"⠈⡙\",\n\t\t\t\"⢈⠩\",\n\t\t\t\"⡀⢙\",\n\t\t\t\"⠄⡙\",\n\t\t\t\"⢂⠩\",\n\t\t\t\"⡂⢘\",\n\t\t\t\"⠅⡘\",\n\t\t\t\"⢃⠨\",\n\t\t\t\"⡃⢐\",\n\t\t\t\"⠍⡐\",\n\t\t\t\"⢋⠠\",\n\t\t\t\"⡋⢀\",\n\t\t\t\"⠍⡁\",\n\t\t\t\"⢋⠁\",\n\t\t\t\"⡋⠁\",\n\t\t\t\"⠍⠉\",\n\t\t\t\"⠋⠉\",\n\t\t\t\"⠋⠉\",\n\t\t\t\"⠉⠙\",\n\t\t\t\"⠉⠙\",\n\t\t\t\"⠉⠩\",\n\t\t\t\"⠈⢙\",\n\t\t\t\"⠈⡙\",\n\t\t\t\"⠈⠩\",\n\t\t\t\"⠀⢙\",\n\t\t\t\"⠀⡙\",\n\t\t\t\"⠀⠩\",\n\t\t\t\"⠀⢘\",\n\t\t\t\"⠀⡘\",\n\t\t\t\"⠀⠨\",\n\t\t\t\"⠀⢐\",\n\t\t\t\"⠀⡐\",\n\t\t\t\"⠀⠠\",\n\t\t\t\"⠀⢀\",\n\t\t\t\"⠀⡀\"\n\t\t]\n\t},\n\t\"dots13\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"⣼\",\n\t\t\t\"⣹\",\n\t\t\t\"⢻\",\n\t\t\t\"⠿\",\n\t\t\t\"⡟\",\n\t\t\t\"⣏\",\n\t\t\t\"⣧\",\n\t\t\t\"⣶\"\n\t\t]\n\t},\n\t\"dots8Bit\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"⠀\",\n\t\t\t\"⠁\",\n\t\t\t\"⠂\",\n\t\t\t\"⠃\",\n\t\t\t\"⠄\",\n\t\t\t\"⠅\",\n\t\t\t\"⠆\",\n\t\t\t\"⠇\",\n\t\t\t\"⡀\",\n\t\t\t\"⡁\",\n\t\t\t\"⡂\",\n\t\t\t\"⡃\",\n\t\t\t\"⡄\",\n\t\t\t\"⡅\",\n\t\t\t\"⡆\",\n\t\t\t\"⡇\",\n\t\t\t\"⠈\",\n\t\t\t\"⠉\",\n\t\t\t\"⠊\",\n\t\t\t\"⠋\",\n\t\t\t\"⠌\",\n\t\t\t\"⠍\",\n\t\t\t\"⠎\",\n\t\t\t\"⠏\",\n\t\t\t\"⡈\",\n\t\t\t\"⡉\",\n\t\t\t\"⡊\",\n\t\t\t\"⡋\",\n\t\t\t\"⡌\",\n\t\t\t\"⡍\",\n\t\t\t\"⡎\",\n\t\t\t\"⡏\",\n\t\t\t\"⠐\",\n\t\t\t\"⠑\",\n\t\t\t\"⠒\",\n\t\t\t\"⠓\",\n\t\t\t\"⠔\",\n\t\t\t\"⠕\",\n\t\t\t\"⠖\",\n\t\t\t\"⠗\",\n\t\t\t\"⡐\",\n\t\t\t\"⡑\",\n\t\t\t\"⡒\",\n\t\t\t\"⡓\",\n\t\t\t\"⡔\",\n\t\t\t\"⡕\",\n\t\t\t\"⡖\",\n\t\t\t\"⡗\",\n\t\t\t\"⠘\",\n\t\t\t\"⠙\",\n\t\t\t\"⠚\",\n\t\t\t\"⠛\",\n\t\t\t\"⠜\",\n\t\t\t\"⠝\",\n\t\t\t\"⠞\",\n\t\t\t\"⠟\",\n\t\t\t\"⡘\",\n\t\t\t\"⡙\",\n\t\t\t\"⡚\",\n\t\t\t\"⡛\",\n\t\t\t\"⡜\",\n\t\t\t\"⡝\",\n\t\t\t\"⡞\",\n\t\t\t\"⡟\",\n\t\t\t\"⠠\",\n\t\t\t\"⠡\",\n\t\t\t\"⠢\",\n\t\t\t\"⠣\",\n\t\t\t\"⠤\",\n\t\t\t\"⠥\",\n\t\t\t\"⠦\",\n\t\t\t\"⠧\",\n\t\t\t\"⡠\",\n\t\t\t\"⡡\",\n\t\t\t\"⡢\",\n\t\t\t\"⡣\",\n\t\t\t\"⡤\",\n\t\t\t\"⡥\",\n\t\t\t\"⡦\",\n\t\t\t\"⡧\",\n\t\t\t\"⠨\",\n\t\t\t\"⠩\",\n\t\t\t\"⠪\",\n\t\t\t\"⠫\",\n\t\t\t\"⠬\",\n\t\t\t\"⠭\",\n\t\t\t\"⠮\",\n\t\t\t\"⠯\",\n\t\t\t\"⡨\",\n\t\t\t\"⡩\",\n\t\t\t\"⡪\",\n\t\t\t\"⡫\",\n\t\t\t\"⡬\",\n\t\t\t\"⡭\",\n\t\t\t\"⡮\",\n\t\t\t\"⡯\",\n\t\t\t\"⠰\",\n\t\t\t\"⠱\",\n\t\t\t\"⠲\",\n\t\t\t\"⠳\",\n\t\t\t\"⠴\",\n\t\t\t\"⠵\",\n\t\t\t\"⠶\",\n\t\t\t\"⠷\",\n\t\t\t\"⡰\",\n\t\t\t\"⡱\",\n\t\t\t\"⡲\",\n\t\t\t\"⡳\",\n\t\t\t\"⡴\",\n\t\t\t\"⡵\",\n\t\t\t\"⡶\",\n\t\t\t\"⡷\",\n\t\t\t\"⠸\",\n\t\t\t\"⠹\",\n\t\t\t\"⠺\",\n\t\t\t\"⠻\",\n\t\t\t\"⠼\",\n\t\t\t\"⠽\",\n\t\t\t\"⠾\",\n\t\t\t\"⠿\",\n\t\t\t\"⡸\",\n\t\t\t\"⡹\",\n\t\t\t\"⡺\",\n\t\t\t\"⡻\",\n\t\t\t\"⡼\",\n\t\t\t\"⡽\",\n\t\t\t\"⡾\",\n\t\t\t\"⡿\",\n\t\t\t\"⢀\",\n\t\t\t\"⢁\",\n\t\t\t\"⢂\",\n\t\t\t\"⢃\",\n\t\t\t\"⢄\",\n\t\t\t\"⢅\",\n\t\t\t\"⢆\",\n\t\t\t\"⢇\",\n\t\t\t\"⣀\",\n\t\t\t\"⣁\",\n\t\t\t\"⣂\",\n\t\t\t\"⣃\",\n\t\t\t\"⣄\",\n\t\t\t\"⣅\",\n\t\t\t\"⣆\",\n\t\t\t\"⣇\",\n\t\t\t\"⢈\",\n\t\t\t\"⢉\",\n\t\t\t\"⢊\",\n\t\t\t\"⢋\",\n\t\t\t\"⢌\",\n\t\t\t\"⢍\",\n\t\t\t\"⢎\",\n\t\t\t\"⢏\",\n\t\t\t\"⣈\",\n\t\t\t\"⣉\",\n\t\t\t\"⣊\",\n\t\t\t\"⣋\",\n\t\t\t\"⣌\",\n\t\t\t\"⣍\",\n\t\t\t\"⣎\",\n\t\t\t\"⣏\",\n\t\t\t\"⢐\",\n\t\t\t\"⢑\",\n\t\t\t\"⢒\",\n\t\t\t\"⢓\",\n\t\t\t\"⢔\",\n\t\t\t\"⢕\",\n\t\t\t\"⢖\",\n\t\t\t\"⢗\",\n\t\t\t\"⣐\",\n\t\t\t\"⣑\",\n\t\t\t\"⣒\",\n\t\t\t\"⣓\",\n\t\t\t\"⣔\",\n\t\t\t\"⣕\",\n\t\t\t\"⣖\",\n\t\t\t\"⣗\",\n\t\t\t\"⢘\",\n\t\t\t\"⢙\",\n\t\t\t\"⢚\",\n\t\t\t\"⢛\",\n\t\t\t\"⢜\",\n\t\t\t\"⢝\",\n\t\t\t\"⢞\",\n\t\t\t\"⢟\",\n\t\t\t\"⣘\",\n\t\t\t\"⣙\",\n\t\t\t\"⣚\",\n\t\t\t\"⣛\",\n\t\t\t\"⣜\",\n\t\t\t\"⣝\",\n\t\t\t\"⣞\",\n\t\t\t\"⣟\",\n\t\t\t\"⢠\",\n\t\t\t\"⢡\",\n\t\t\t\"⢢\",\n\t\t\t\"⢣\",\n\t\t\t\"⢤\",\n\t\t\t\"⢥\",\n\t\t\t\"⢦\",\n\t\t\t\"⢧\",\n\t\t\t\"⣠\",\n\t\t\t\"⣡\",\n\t\t\t\"⣢\",\n\t\t\t\"⣣\",\n\t\t\t\"⣤\",\n\t\t\t\"⣥\",\n\t\t\t\"⣦\",\n\t\t\t\"⣧\",\n\t\t\t\"⢨\",\n\t\t\t\"⢩\",\n\t\t\t\"⢪\",\n\t\t\t\"⢫\",\n\t\t\t\"⢬\",\n\t\t\t\"⢭\",\n\t\t\t\"⢮\",\n\t\t\t\"⢯\",\n\t\t\t\"⣨\",\n\t\t\t\"⣩\",\n\t\t\t\"⣪\",\n\t\t\t\"⣫\",\n\t\t\t\"⣬\",\n\t\t\t\"⣭\",\n\t\t\t\"⣮\",\n\t\t\t\"⣯\",\n\t\t\t\"⢰\",\n\t\t\t\"⢱\",\n\t\t\t\"⢲\",\n\t\t\t\"⢳\",\n\t\t\t\"⢴\",\n\t\t\t\"⢵\",\n\t\t\t\"⢶\",\n\t\t\t\"⢷\",\n\t\t\t\"⣰\",\n\t\t\t\"⣱\",\n\t\t\t\"⣲\",\n\t\t\t\"⣳\",\n\t\t\t\"⣴\",\n\t\t\t\"⣵\",\n\t\t\t\"⣶\",\n\t\t\t\"⣷\",\n\t\t\t\"⢸\",\n\t\t\t\"⢹\",\n\t\t\t\"⢺\",\n\t\t\t\"⢻\",\n\t\t\t\"⢼\",\n\t\t\t\"⢽\",\n\t\t\t\"⢾\",\n\t\t\t\"⢿\",\n\t\t\t\"⣸\",\n\t\t\t\"⣹\",\n\t\t\t\"⣺\",\n\t\t\t\"⣻\",\n\t\t\t\"⣼\",\n\t\t\t\"⣽\",\n\t\t\t\"⣾\",\n\t\t\t\"⣿\"\n\t\t]\n\t},\n\t\"sand\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"⠁\",\n\t\t\t\"⠂\",\n\t\t\t\"⠄\",\n\t\t\t\"⡀\",\n\t\t\t\"⡈\",\n\t\t\t\"⡐\",\n\t\t\t\"⡠\",\n\t\t\t\"⣀\",\n\t\t\t\"⣁\",\n\t\t\t\"⣂\",\n\t\t\t\"⣄\",\n\t\t\t\"⣌\",\n\t\t\t\"⣔\",\n\t\t\t\"⣤\",\n\t\t\t\"⣥\",\n\t\t\t\"⣦\",\n\t\t\t\"⣮\",\n\t\t\t\"⣶\",\n\t\t\t\"⣷\",\n\t\t\t\"⣿\",\n\t\t\t\"⡿\",\n\t\t\t\"⠿\",\n\t\t\t\"⢟\",\n\t\t\t\"⠟\",\n\t\t\t\"⡛\",\n\t\t\t\"⠛\",\n\t\t\t\"⠫\",\n\t\t\t\"⢋\",\n\t\t\t\"⠋\",\n\t\t\t\"⠍\",\n\t\t\t\"⡉\",\n\t\t\t\"⠉\",\n\t\t\t\"⠑\",\n\t\t\t\"⠡\",\n\t\t\t\"⢁\"\n\t\t]\n\t},\n\t\"line\": {\n\t\t\"interval\": 130,\n\t\t\"frames\": [\n\t\t\t\"-\",\n\t\t\t\"\\\\\",\n\t\t\t\"|\",\n\t\t\t\"/\"\n\t\t]\n\t},\n\t\"line2\": {\n\t\t\"interval\": 100,\n\t\t\"frames\": [\n\t\t\t\"⠂\",\n\t\t\t\"-\",\n\t\t\t\"–\",\n\t\t\t\"—\",\n\t\t\t\"–\",\n\t\t\t\"-\"\n\t\t]\n\t},\n\t\"pipe\": {\n\t\t\"interval\": 100,\n\t\t\"frames\": [\n\t\t\t\"┤\",\n\t\t\t\"┘\",\n\t\t\t\"┴\",\n\t\t\t\"└\",\n\t\t\t\"├\",\n\t\t\t\"┌\",\n\t\t\t\"┬\",\n\t\t\t\"┐\"\n\t\t]\n\t},\n\t\"simpleDots\": {\n\t\t\"interval\": 400,\n\t\t\"frames\": [\n\t\t\t\".  \",\n\t\t\t\".. \",\n\t\t\t\"...\",\n\t\t\t\"   \"\n\t\t]\n\t},\n\t\"simpleDotsScrolling\": {\n\t\t\"interval\": 200,\n\t\t\"frames\": [\n\t\t\t\".  \",\n\t\t\t\".. \",\n\t\t\t\"...\",\n\t\t\t\" ..\",\n\t\t\t\"  .\",\n\t\t\t\"   \"\n\t\t]\n\t},\n\t\"star\": {\n\t\t\"interval\": 70,\n\t\t\"frames\": [\n\t\t\t\"✶\",\n\t\t\t\"✸\",\n\t\t\t\"✹\",\n\t\t\t\"✺\",\n\t\t\t\"✹\",\n\t\t\t\"✷\"\n\t\t]\n\t},\n\t\"star2\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"+\",\n\t\t\t\"x\",\n\t\t\t\"*\"\n\t\t]\n\t},\n\t\"flip\": {\n\t\t\"interval\": 70,\n\t\t\"frames\": [\n\t\t\t\"_\",\n\t\t\t\"_\",\n\t\t\t\"_\",\n\t\t\t\"-\",\n\t\t\t\"`\",\n\t\t\t\"`\",\n\t\t\t\"'\",\n\t\t\t\"´\",\n\t\t\t\"-\",\n\t\t\t\"_\",\n\t\t\t\"_\",\n\t\t\t\"_\"\n\t\t]\n\t},\n\t\"hamburger\": {\n\t\t\"interval\": 100,\n\t\t\"frames\": [\n\t\t\t\"☱\",\n\t\t\t\"☲\",\n\t\t\t\"☴\"\n\t\t]\n\t},\n\t\"growVertical\": {\n\t\t\"interval\": 120,\n\t\t\"frames\": [\n\t\t\t\"▁\",\n\t\t\t\"▃\",\n\t\t\t\"▄\",\n\t\t\t\"▅\",\n\t\t\t\"▆\",\n\t\t\t\"▇\",\n\t\t\t\"▆\",\n\t\t\t\"▅\",\n\t\t\t\"▄\",\n\t\t\t\"▃\"\n\t\t]\n\t},\n\t\"growHorizontal\": {\n\t\t\"interval\": 120,\n\t\t\"frames\": [\n\t\t\t\"▏\",\n\t\t\t\"▎\",\n\t\t\t\"▍\",\n\t\t\t\"▌\",\n\t\t\t\"▋\",\n\t\t\t\"▊\",\n\t\t\t\"▉\",\n\t\t\t\"▊\",\n\t\t\t\"▋\",\n\t\t\t\"▌\",\n\t\t\t\"▍\",\n\t\t\t\"▎\"\n\t\t]\n\t},\n\t\"balloon\": {\n\t\t\"interval\": 140,\n\t\t\"frames\": [\n\t\t\t\" \",\n\t\t\t\".\",\n\t\t\t\"o\",\n\t\t\t\"O\",\n\t\t\t\"@\",\n\t\t\t\"*\",\n\t\t\t\" \"\n\t\t]\n\t},\n\t\"balloon2\": {\n\t\t\"interval\": 120,\n\t\t\"frames\": [\n\t\t\t\".\",\n\t\t\t\"o\",\n\t\t\t\"O\",\n\t\t\t\"°\",\n\t\t\t\"O\",\n\t\t\t\"o\",\n\t\t\t\".\"\n\t\t]\n\t},\n\t\"noise\": {\n\t\t\"interval\": 100,\n\t\t\"frames\": [\n\t\t\t\"▓\",\n\t\t\t\"▒\",\n\t\t\t\"░\"\n\t\t]\n\t},\n\t\"bounce\": {\n\t\t\"interval\": 120,\n\t\t\"frames\": [\n\t\t\t\"⠁\",\n\t\t\t\"⠂\",\n\t\t\t\"⠄\",\n\t\t\t\"⠂\"\n\t\t]\n\t},\n\t\"boxBounce\": {\n\t\t\"interval\": 120,\n\t\t\"frames\": [\n\t\t\t\"▖\",\n\t\t\t\"▘\",\n\t\t\t\"▝\",\n\t\t\t\"▗\"\n\t\t]\n\t},\n\t\"boxBounce2\": {\n\t\t\"interval\": 100,\n\t\t\"frames\": [\n\t\t\t\"▌\",\n\t\t\t\"▀\",\n\t\t\t\"▐\",\n\t\t\t\"▄\"\n\t\t]\n\t},\n\t\"triangle\": {\n\t\t\"interval\": 50,\n\t\t\"frames\": [\n\t\t\t\"◢\",\n\t\t\t\"◣\",\n\t\t\t\"◤\",\n\t\t\t\"◥\"\n\t\t]\n\t},\n\t\"arc\": {\n\t\t\"interval\": 100,\n\t\t\"frames\": [\n\t\t\t\"◜\",\n\t\t\t\"◠\",\n\t\t\t\"◝\",\n\t\t\t\"◞\",\n\t\t\t\"◡\",\n\t\t\t\"◟\"\n\t\t]\n\t},\n\t\"circle\": {\n\t\t\"interval\": 120,\n\t\t\"frames\": [\n\t\t\t\"◡\",\n\t\t\t\"⊙\",\n\t\t\t\"◠\"\n\t\t]\n\t},\n\t\"squareCorners\": {\n\t\t\"interval\": 180,\n\t\t\"frames\": [\n\t\t\t\"◰\",\n\t\t\t\"◳\",\n\t\t\t\"◲\",\n\t\t\t\"◱\"\n\t\t]\n\t},\n\t\"circleQuarters\": {\n\t\t\"interval\": 120,\n\t\t\"frames\": [\n\t\t\t\"◴\",\n\t\t\t\"◷\",\n\t\t\t\"◶\",\n\t\t\t\"◵\"\n\t\t]\n\t},\n\t\"circleHalves\": {\n\t\t\"interval\": 50,\n\t\t\"frames\": [\n\t\t\t\"◐\",\n\t\t\t\"◓\",\n\t\t\t\"◑\",\n\t\t\t\"◒\"\n\t\t]\n\t},\n\t\"squish\": {\n\t\t\"interval\": 100,\n\t\t\"frames\": [\n\t\t\t\"╫\",\n\t\t\t\"╪\"\n\t\t]\n\t},\n\t\"toggle\": {\n\t\t\"interval\": 250,\n\t\t\"frames\": [\n\t\t\t\"⊶\",\n\t\t\t\"⊷\"\n\t\t]\n\t},\n\t\"toggle2\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"▫\",\n\t\t\t\"▪\"\n\t\t]\n\t},\n\t\"toggle3\": {\n\t\t\"interval\": 120,\n\t\t\"frames\": [\n\t\t\t\"□\",\n\t\t\t\"■\"\n\t\t]\n\t},\n\t\"toggle4\": {\n\t\t\"interval\": 100,\n\t\t\"frames\": [\n\t\t\t\"■\",\n\t\t\t\"□\",\n\t\t\t\"▪\",\n\t\t\t\"▫\"\n\t\t]\n\t},\n\t\"toggle5\": {\n\t\t\"interval\": 100,\n\t\t\"frames\": [\n\t\t\t\"▮\",\n\t\t\t\"▯\"\n\t\t]\n\t},\n\t\"toggle6\": {\n\t\t\"interval\": 300,\n\t\t\"frames\": [\n\t\t\t\"ဝ\",\n\t\t\t\"၀\"\n\t\t]\n\t},\n\t\"toggle7\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"⦾\",\n\t\t\t\"⦿\"\n\t\t]\n\t},\n\t\"toggle8\": {\n\t\t\"interval\": 100,\n\t\t\"frames\": [\n\t\t\t\"◍\",\n\t\t\t\"◌\"\n\t\t]\n\t},\n\t\"toggle9\": {\n\t\t\"interval\": 100,\n\t\t\"frames\": [\n\t\t\t\"◉\",\n\t\t\t\"◎\"\n\t\t]\n\t},\n\t\"toggle10\": {\n\t\t\"interval\": 100,\n\t\t\"frames\": [\n\t\t\t\"㊂\",\n\t\t\t\"㊀\",\n\t\t\t\"㊁\"\n\t\t]\n\t},\n\t\"toggle11\": {\n\t\t\"interval\": 50,\n\t\t\"frames\": [\n\t\t\t\"⧇\",\n\t\t\t\"⧆\"\n\t\t]\n\t},\n\t\"toggle12\": {\n\t\t\"interval\": 120,\n\t\t\"frames\": [\n\t\t\t\"☗\",\n\t\t\t\"☖\"\n\t\t]\n\t},\n\t\"toggle13\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"=\",\n\t\t\t\"*\",\n\t\t\t\"-\"\n\t\t]\n\t},\n\t\"arrow\": {\n\t\t\"interval\": 100,\n\t\t\"frames\": [\n\t\t\t\"←\",\n\t\t\t\"↖\",\n\t\t\t\"↑\",\n\t\t\t\"↗\",\n\t\t\t\"→\",\n\t\t\t\"↘\",\n\t\t\t\"↓\",\n\t\t\t\"↙\"\n\t\t]\n\t},\n\t\"arrow2\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"⬆️ \",\n\t\t\t\"↗️ \",\n\t\t\t\"➡️ \",\n\t\t\t\"↘️ \",\n\t\t\t\"⬇️ \",\n\t\t\t\"↙️ \",\n\t\t\t\"⬅️ \",\n\t\t\t\"↖️ \"\n\t\t]\n\t},\n\t\"arrow3\": {\n\t\t\"interval\": 120,\n\t\t\"frames\": [\n\t\t\t\"▹▹▹▹▹\",\n\t\t\t\"▸▹▹▹▹\",\n\t\t\t\"▹▸▹▹▹\",\n\t\t\t\"▹▹▸▹▹\",\n\t\t\t\"▹▹▹▸▹\",\n\t\t\t\"▹▹▹▹▸\"\n\t\t]\n\t},\n\t\"bouncingBar\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"[    ]\",\n\t\t\t\"[=   ]\",\n\t\t\t\"[==  ]\",\n\t\t\t\"[=== ]\",\n\t\t\t\"[ ===]\",\n\t\t\t\"[  ==]\",\n\t\t\t\"[   =]\",\n\t\t\t\"[    ]\",\n\t\t\t\"[   =]\",\n\t\t\t\"[  ==]\",\n\t\t\t\"[ ===]\",\n\t\t\t\"[====]\",\n\t\t\t\"[=== ]\",\n\t\t\t\"[==  ]\",\n\t\t\t\"[=   ]\"\n\t\t]\n\t},\n\t\"bouncingBall\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"( ●    )\",\n\t\t\t\"(  ●   )\",\n\t\t\t\"(   ●  )\",\n\t\t\t\"(    ● )\",\n\t\t\t\"(     ●)\",\n\t\t\t\"(    ● )\",\n\t\t\t\"(   ●  )\",\n\t\t\t\"(  ●   )\",\n\t\t\t\"( ●    )\",\n\t\t\t\"(●     )\"\n\t\t]\n\t},\n\t\"smiley\": {\n\t\t\"interval\": 200,\n\t\t\"frames\": [\n\t\t\t\"😄 \",\n\t\t\t\"😝 \"\n\t\t]\n\t},\n\t\"monkey\": {\n\t\t\"interval\": 300,\n\t\t\"frames\": [\n\t\t\t\"🙈 \",\n\t\t\t\"🙈 \",\n\t\t\t\"🙉 \",\n\t\t\t\"🙊 \"\n\t\t]\n\t},\n\t\"hearts\": {\n\t\t\"interval\": 100,\n\t\t\"frames\": [\n\t\t\t\"💛 \",\n\t\t\t\"💙 \",\n\t\t\t\"💜 \",\n\t\t\t\"💚 \",\n\t\t\t\"❤️ \"\n\t\t]\n\t},\n\t\"clock\": {\n\t\t\"interval\": 100,\n\t\t\"frames\": [\n\t\t\t\"🕛 \",\n\t\t\t\"🕐 \",\n\t\t\t\"🕑 \",\n\t\t\t\"🕒 \",\n\t\t\t\"🕓 \",\n\t\t\t\"🕔 \",\n\t\t\t\"🕕 \",\n\t\t\t\"🕖 \",\n\t\t\t\"🕗 \",\n\t\t\t\"🕘 \",\n\t\t\t\"🕙 \",\n\t\t\t\"🕚 \"\n\t\t]\n\t},\n\t\"earth\": {\n\t\t\"interval\": 180,\n\t\t\"frames\": [\n\t\t\t\"🌍 \",\n\t\t\t\"🌎 \",\n\t\t\t\"🌏 \"\n\t\t]\n\t},\n\t\"material\": {\n\t\t\"interval\": 17,\n\t\t\"frames\": [\n\t\t\t\"█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\",\n\t\t\t\"██▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\",\n\t\t\t\"███▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\",\n\t\t\t\"████▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\",\n\t\t\t\"██████▁▁▁▁▁▁▁▁▁▁▁▁▁▁\",\n\t\t\t\"██████▁▁▁▁▁▁▁▁▁▁▁▁▁▁\",\n\t\t\t\"███████▁▁▁▁▁▁▁▁▁▁▁▁▁\",\n\t\t\t\"████████▁▁▁▁▁▁▁▁▁▁▁▁\",\n\t\t\t\"█████████▁▁▁▁▁▁▁▁▁▁▁\",\n\t\t\t\"█████████▁▁▁▁▁▁▁▁▁▁▁\",\n\t\t\t\"██████████▁▁▁▁▁▁▁▁▁▁\",\n\t\t\t\"███████████▁▁▁▁▁▁▁▁▁\",\n\t\t\t\"█████████████▁▁▁▁▁▁▁\",\n\t\t\t\"██████████████▁▁▁▁▁▁\",\n\t\t\t\"██████████████▁▁▁▁▁▁\",\n\t\t\t\"▁██████████████▁▁▁▁▁\",\n\t\t\t\"▁██████████████▁▁▁▁▁\",\n\t\t\t\"▁██████████████▁▁▁▁▁\",\n\t\t\t\"▁▁██████████████▁▁▁▁\",\n\t\t\t\"▁▁▁██████████████▁▁▁\",\n\t\t\t\"▁▁▁▁█████████████▁▁▁\",\n\t\t\t\"▁▁▁▁██████████████▁▁\",\n\t\t\t\"▁▁▁▁██████████████▁▁\",\n\t\t\t\"▁▁▁▁▁██████████████▁\",\n\t\t\t\"▁▁▁▁▁██████████████▁\",\n\t\t\t\"▁▁▁▁▁██████████████▁\",\n\t\t\t\"▁▁▁▁▁▁██████████████\",\n\t\t\t\"▁▁▁▁▁▁██████████████\",\n\t\t\t\"▁▁▁▁▁▁▁█████████████\",\n\t\t\t\"▁▁▁▁▁▁▁█████████████\",\n\t\t\t\"▁▁▁▁▁▁▁▁████████████\",\n\t\t\t\"▁▁▁▁▁▁▁▁████████████\",\n\t\t\t\"▁▁▁▁▁▁▁▁▁███████████\",\n\t\t\t\"▁▁▁▁▁▁▁▁▁███████████\",\n\t\t\t\"▁▁▁▁▁▁▁▁▁▁██████████\",\n\t\t\t\"▁▁▁▁▁▁▁▁▁▁██████████\",\n\t\t\t\"▁▁▁▁▁▁▁▁▁▁▁▁████████\",\n\t\t\t\"▁▁▁▁▁▁▁▁▁▁▁▁▁███████\",\n\t\t\t\"▁▁▁▁▁▁▁▁▁▁▁▁▁▁██████\",\n\t\t\t\"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█████\",\n\t\t\t\"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█████\",\n\t\t\t\"█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁████\",\n\t\t\t\"██▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁███\",\n\t\t\t\"██▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁███\",\n\t\t\t\"███▁▁▁▁▁▁▁▁▁▁▁▁▁▁███\",\n\t\t\t\"████▁▁▁▁▁▁▁▁▁▁▁▁▁▁██\",\n\t\t\t\"█████▁▁▁▁▁▁▁▁▁▁▁▁▁▁█\",\n\t\t\t\"█████▁▁▁▁▁▁▁▁▁▁▁▁▁▁█\",\n\t\t\t\"██████▁▁▁▁▁▁▁▁▁▁▁▁▁█\",\n\t\t\t\"████████▁▁▁▁▁▁▁▁▁▁▁▁\",\n\t\t\t\"█████████▁▁▁▁▁▁▁▁▁▁▁\",\n\t\t\t\"█████████▁▁▁▁▁▁▁▁▁▁▁\",\n\t\t\t\"█████████▁▁▁▁▁▁▁▁▁▁▁\",\n\t\t\t\"█████████▁▁▁▁▁▁▁▁▁▁▁\",\n\t\t\t\"███████████▁▁▁▁▁▁▁▁▁\",\n\t\t\t\"████████████▁▁▁▁▁▁▁▁\",\n\t\t\t\"████████████▁▁▁▁▁▁▁▁\",\n\t\t\t\"██████████████▁▁▁▁▁▁\",\n\t\t\t\"██████████████▁▁▁▁▁▁\",\n\t\t\t\"▁██████████████▁▁▁▁▁\",\n\t\t\t\"▁██████████████▁▁▁▁▁\",\n\t\t\t\"▁▁▁█████████████▁▁▁▁\",\n\t\t\t\"▁▁▁▁▁████████████▁▁▁\",\n\t\t\t\"▁▁▁▁▁████████████▁▁▁\",\n\t\t\t\"▁▁▁▁▁▁███████████▁▁▁\",\n\t\t\t\"▁▁▁▁▁▁▁▁█████████▁▁▁\",\n\t\t\t\"▁▁▁▁▁▁▁▁█████████▁▁▁\",\n\t\t\t\"▁▁▁▁▁▁▁▁▁█████████▁▁\",\n\t\t\t\"▁▁▁▁▁▁▁▁▁█████████▁▁\",\n\t\t\t\"▁▁▁▁▁▁▁▁▁▁█████████▁\",\n\t\t\t\"▁▁▁▁▁▁▁▁▁▁▁████████▁\",\n\t\t\t\"▁▁▁▁▁▁▁▁▁▁▁████████▁\",\n\t\t\t\"▁▁▁▁▁▁▁▁▁▁▁▁███████▁\",\n\t\t\t\"▁▁▁▁▁▁▁▁▁▁▁▁███████▁\",\n\t\t\t\"▁▁▁▁▁▁▁▁▁▁▁▁▁███████\",\n\t\t\t\"▁▁▁▁▁▁▁▁▁▁▁▁▁███████\",\n\t\t\t\"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█████\",\n\t\t\t\"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁████\",\n\t\t\t\"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁████\",\n\t\t\t\"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁████\",\n\t\t\t\"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁███\",\n\t\t\t\"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁███\",\n\t\t\t\"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁██\",\n\t\t\t\"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁██\",\n\t\t\t\"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁██\",\n\t\t\t\"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█\",\n\t\t\t\"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█\",\n\t\t\t\"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█\",\n\t\t\t\"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\",\n\t\t\t\"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\",\n\t\t\t\"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\",\n\t\t\t\"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\"\n\t\t]\n\t},\n\t\"moon\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"🌑 \",\n\t\t\t\"🌒 \",\n\t\t\t\"🌓 \",\n\t\t\t\"🌔 \",\n\t\t\t\"🌕 \",\n\t\t\t\"🌖 \",\n\t\t\t\"🌗 \",\n\t\t\t\"🌘 \"\n\t\t]\n\t},\n\t\"runner\": {\n\t\t\"interval\": 140,\n\t\t\"frames\": [\n\t\t\t\"🚶 \",\n\t\t\t\"🏃 \"\n\t\t]\n\t},\n\t\"pong\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"▐⠂       ▌\",\n\t\t\t\"▐⠈       ▌\",\n\t\t\t\"▐ ⠂      ▌\",\n\t\t\t\"▐ ⠠      ▌\",\n\t\t\t\"▐  ⡀     ▌\",\n\t\t\t\"▐  ⠠     ▌\",\n\t\t\t\"▐   ⠂    ▌\",\n\t\t\t\"▐   ⠈    ▌\",\n\t\t\t\"▐    ⠂   ▌\",\n\t\t\t\"▐    ⠠   ▌\",\n\t\t\t\"▐     ⡀  ▌\",\n\t\t\t\"▐     ⠠  ▌\",\n\t\t\t\"▐      ⠂ ▌\",\n\t\t\t\"▐      ⠈ ▌\",\n\t\t\t\"▐       ⠂▌\",\n\t\t\t\"▐       ⠠▌\",\n\t\t\t\"▐       ⡀▌\",\n\t\t\t\"▐      ⠠ ▌\",\n\t\t\t\"▐      ⠂ ▌\",\n\t\t\t\"▐     ⠈  ▌\",\n\t\t\t\"▐     ⠂  ▌\",\n\t\t\t\"▐    ⠠   ▌\",\n\t\t\t\"▐    ⡀   ▌\",\n\t\t\t\"▐   ⠠    ▌\",\n\t\t\t\"▐   ⠂    ▌\",\n\t\t\t\"▐  ⠈     ▌\",\n\t\t\t\"▐  ⠂     ▌\",\n\t\t\t\"▐ ⠠      ▌\",\n\t\t\t\"▐ ⡀      ▌\",\n\t\t\t\"▐⠠       ▌\"\n\t\t]\n\t},\n\t\"shark\": {\n\t\t\"interval\": 120,\n\t\t\"frames\": [\n\t\t\t\"▐|\\\\____________▌\",\n\t\t\t\"▐_|\\\\___________▌\",\n\t\t\t\"▐__|\\\\__________▌\",\n\t\t\t\"▐___|\\\\_________▌\",\n\t\t\t\"▐____|\\\\________▌\",\n\t\t\t\"▐_____|\\\\_______▌\",\n\t\t\t\"▐______|\\\\______▌\",\n\t\t\t\"▐_______|\\\\_____▌\",\n\t\t\t\"▐________|\\\\____▌\",\n\t\t\t\"▐_________|\\\\___▌\",\n\t\t\t\"▐__________|\\\\__▌\",\n\t\t\t\"▐___________|\\\\_▌\",\n\t\t\t\"▐____________|\\\\▌\",\n\t\t\t\"▐____________/|▌\",\n\t\t\t\"▐___________/|_▌\",\n\t\t\t\"▐__________/|__▌\",\n\t\t\t\"▐_________/|___▌\",\n\t\t\t\"▐________/|____▌\",\n\t\t\t\"▐_______/|_____▌\",\n\t\t\t\"▐______/|______▌\",\n\t\t\t\"▐_____/|_______▌\",\n\t\t\t\"▐____/|________▌\",\n\t\t\t\"▐___/|_________▌\",\n\t\t\t\"▐__/|__________▌\",\n\t\t\t\"▐_/|___________▌\",\n\t\t\t\"▐/|____________▌\"\n\t\t]\n\t},\n\t\"dqpb\": {\n\t\t\"interval\": 100,\n\t\t\"frames\": [\n\t\t\t\"d\",\n\t\t\t\"q\",\n\t\t\t\"p\",\n\t\t\t\"b\"\n\t\t]\n\t},\n\t\"weather\": {\n\t\t\"interval\": 100,\n\t\t\"frames\": [\n\t\t\t\"☀️ \",\n\t\t\t\"☀️ \",\n\t\t\t\"☀️ \",\n\t\t\t\"🌤 \",\n\t\t\t\"⛅️ \",\n\t\t\t\"🌥 \",\n\t\t\t\"☁️ \",\n\t\t\t\"🌧 \",\n\t\t\t\"🌨 \",\n\t\t\t\"🌧 \",\n\t\t\t\"🌨 \",\n\t\t\t\"🌧 \",\n\t\t\t\"🌨 \",\n\t\t\t\"⛈ \",\n\t\t\t\"🌨 \",\n\t\t\t\"🌧 \",\n\t\t\t\"🌨 \",\n\t\t\t\"☁️ \",\n\t\t\t\"🌥 \",\n\t\t\t\"⛅️ \",\n\t\t\t\"🌤 \",\n\t\t\t\"☀️ \",\n\t\t\t\"☀️ \"\n\t\t]\n\t},\n\t\"christmas\": {\n\t\t\"interval\": 400,\n\t\t\"frames\": [\n\t\t\t\"🌲\",\n\t\t\t\"🎄\"\n\t\t]\n\t},\n\t\"grenade\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"،  \",\n\t\t\t\"′  \",\n\t\t\t\" ´ \",\n\t\t\t\" ‾ \",\n\t\t\t\"  ⸌\",\n\t\t\t\"  ⸊\",\n\t\t\t\"  |\",\n\t\t\t\"  ⁎\",\n\t\t\t\"  ⁕\",\n\t\t\t\" ෴ \",\n\t\t\t\"  ⁓\",\n\t\t\t\"   \",\n\t\t\t\"   \",\n\t\t\t\"   \"\n\t\t]\n\t},\n\t\"point\": {\n\t\t\"interval\": 125,\n\t\t\"frames\": [\n\t\t\t\"∙∙∙\",\n\t\t\t\"●∙∙\",\n\t\t\t\"∙●∙\",\n\t\t\t\"∙∙●\",\n\t\t\t\"∙∙∙\"\n\t\t]\n\t},\n\t\"layer\": {\n\t\t\"interval\": 150,\n\t\t\"frames\": [\n\t\t\t\"-\",\n\t\t\t\"=\",\n\t\t\t\"≡\"\n\t\t]\n\t},\n\t\"betaWave\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"ρββββββ\",\n\t\t\t\"βρβββββ\",\n\t\t\t\"ββρββββ\",\n\t\t\t\"βββρβββ\",\n\t\t\t\"ββββρββ\",\n\t\t\t\"βββββρβ\",\n\t\t\t\"ββββββρ\"\n\t\t]\n\t},\n\t\"fingerDance\": {\n\t\t\"interval\": 160,\n\t\t\"frames\": [\n\t\t\t\"🤘 \",\n\t\t\t\"🤟 \",\n\t\t\t\"🖖 \",\n\t\t\t\"✋ \",\n\t\t\t\"🤚 \",\n\t\t\t\"👆 \"\n\t\t]\n\t},\n\t\"fistBump\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"🤜\\u3000\\u3000\\u3000\\u3000🤛 \",\n\t\t\t\"🤜\\u3000\\u3000\\u3000\\u3000🤛 \",\n\t\t\t\"🤜\\u3000\\u3000\\u3000\\u3000🤛 \",\n\t\t\t\"\\u3000🤜\\u3000\\u3000🤛\\u3000 \",\n\t\t\t\"\\u3000\\u3000🤜🤛\\u3000\\u3000 \",\n\t\t\t\"\\u3000🤜✨🤛\\u3000\\u3000 \",\n\t\t\t\"🤜\\u3000✨\\u3000🤛\\u3000 \"\n\t\t]\n\t},\n\t\"soccerHeader\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\" 🧑⚽️       🧑 \",\n\t\t\t\"🧑  ⚽️      🧑 \",\n\t\t\t\"🧑   ⚽️     🧑 \",\n\t\t\t\"🧑    ⚽️    🧑 \",\n\t\t\t\"🧑     ⚽️   🧑 \",\n\t\t\t\"🧑      ⚽️  🧑 \",\n\t\t\t\"🧑       ⚽️🧑  \",\n\t\t\t\"🧑      ⚽️  🧑 \",\n\t\t\t\"🧑     ⚽️   🧑 \",\n\t\t\t\"🧑    ⚽️    🧑 \",\n\t\t\t\"🧑   ⚽️     🧑 \",\n\t\t\t\"🧑  ⚽️      🧑 \"\n\t\t]\n\t},\n\t\"mindblown\": {\n\t\t\"interval\": 160,\n\t\t\"frames\": [\n\t\t\t\"😐 \",\n\t\t\t\"😐 \",\n\t\t\t\"😮 \",\n\t\t\t\"😮 \",\n\t\t\t\"😦 \",\n\t\t\t\"😦 \",\n\t\t\t\"😧 \",\n\t\t\t\"😧 \",\n\t\t\t\"🤯 \",\n\t\t\t\"💥 \",\n\t\t\t\"✨ \",\n\t\t\t\"\\u3000 \",\n\t\t\t\"\\u3000 \",\n\t\t\t\"\\u3000 \"\n\t\t]\n\t},\n\t\"speaker\": {\n\t\t\"interval\": 160,\n\t\t\"frames\": [\n\t\t\t\"🔈 \",\n\t\t\t\"🔉 \",\n\t\t\t\"🔊 \",\n\t\t\t\"🔉 \"\n\t\t]\n\t},\n\t\"orangePulse\": {\n\t\t\"interval\": 100,\n\t\t\"frames\": [\n\t\t\t\"🔸 \",\n\t\t\t\"🔶 \",\n\t\t\t\"🟠 \",\n\t\t\t\"🟠 \",\n\t\t\t\"🔶 \"\n\t\t]\n\t},\n\t\"bluePulse\": {\n\t\t\"interval\": 100,\n\t\t\"frames\": [\n\t\t\t\"🔹 \",\n\t\t\t\"🔷 \",\n\t\t\t\"🔵 \",\n\t\t\t\"🔵 \",\n\t\t\t\"🔷 \"\n\t\t]\n\t},\n\t\"orangeBluePulse\": {\n\t\t\"interval\": 100,\n\t\t\"frames\": [\n\t\t\t\"🔸 \",\n\t\t\t\"🔶 \",\n\t\t\t\"🟠 \",\n\t\t\t\"🟠 \",\n\t\t\t\"🔶 \",\n\t\t\t\"🔹 \",\n\t\t\t\"🔷 \",\n\t\t\t\"🔵 \",\n\t\t\t\"🔵 \",\n\t\t\t\"🔷 \"\n\t\t]\n\t},\n\t\"timeTravel\": {\n\t\t\"interval\": 100,\n\t\t\"frames\": [\n\t\t\t\"🕛 \",\n\t\t\t\"🕚 \",\n\t\t\t\"🕙 \",\n\t\t\t\"🕘 \",\n\t\t\t\"🕗 \",\n\t\t\t\"🕖 \",\n\t\t\t\"🕕 \",\n\t\t\t\"🕔 \",\n\t\t\t\"🕓 \",\n\t\t\t\"🕒 \",\n\t\t\t\"🕑 \",\n\t\t\t\"🕐 \"\n\t\t]\n\t},\n\t\"aesthetic\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"▰▱▱▱▱▱▱\",\n\t\t\t\"▰▰▱▱▱▱▱\",\n\t\t\t\"▰▰▰▱▱▱▱\",\n\t\t\t\"▰▰▰▰▱▱▱\",\n\t\t\t\"▰▰▰▰▰▱▱\",\n\t\t\t\"▰▰▰▰▰▰▱\",\n\t\t\t\"▰▰▰▰▰▰▰\",\n\t\t\t\"▰▱▱▱▱▱▱\"\n\t\t]\n\t}\n}\n/readme.md\u0005\u0016# cli-spinners\n\n> 70+ spinners for use in the terminal\n\n<p align=\"center\">\n\t<br>\n\t<img width=\"700\" src=\"screenshot.svg\">\n\t<br>\n\t<br>\n</p>\n\nThe list of spinners is just a [JSON file](spinners.json) and can be used wherever.\n\nYou probably want to use one of these spinners through the [`ora`](https://github.com/sindresorhus/ora) module.\n\n## Install\n\n```\n$ npm install cli-spinners\n```\n\n## Usage\n\n```js\nconst cliSpinners = require('cli-spinners');\n\nconsole.log(cliSpinners.dots);\n/*\n{\n\tinterval: 80,\n\tframes: ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏']\n}\n*/\n```\n\n## Preview\n\nThe header GIF is outdated. See all the [spinner at once](https://jsfiddle.net/sindresorhus/2eLtsbey/embedded/result/) or [one at the time](https://asciinema.org/a/95348?size=big).\n\n## API\n\nEach spinner comes with a recommended `interval` and an array of `frames`.\n\n[See the spinners.](spinners.json)\n\nThe `random` spinner will return a random spinner each time it's called.\n\n## Related\n\n- [ora](https://github.com/sindresorhus/ora) - Elegant terminal spinner\n- [CLISpinner](https://github.com/kiliankoe/CLISpinner) - Terminal spinners for Swift\n- [py-spinners](https://github.com/ManrajGrover/py-spinners) - Python port\n- [spinners](https://github.com/FGRibreau/spinners) - Terminal spinners for Rust\n/license\u0004]MIT License\n\nCopyright (c) Sindre Sorhus <sindresorhus@gmail.com> (https://sindresorhus.com)\n\nPermission 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:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE 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.\n/index.js\u0001'use strict';\n\nconst spinners = Object.assign({}, require('./spinners.json')); // eslint-disable-line import/extensions\n\nconst spinnersList = Object.keys(spinners);\n\nObject.defineProperty(spinners, 'random', {\n\tget() {\n\t\tconst randomIndex = Math.floor(Math.random() * spinnersList.length);\n\t\tconst spinnerName = spinnersList[randomIndex];\n\t\treturn spinners[spinnerName];\n\t}\n});\n\nmodule.exports = spinners;\n/index.d.ts\u0007declare namespace cliSpinners {\n\ttype SpinnerName =\n\t\t| 'dots'\n\t\t| 'dots2'\n\t\t| 'dots3'\n\t\t| 'dots4'\n\t\t| 'dots5'\n\t\t| 'dots6'\n\t\t| 'dots7'\n\t\t| 'dots8'\n\t\t| 'dots9'\n\t\t| 'dots10'\n\t\t| 'dots11'\n\t\t| 'dots12'\n\t\t| 'dots8Bit'\n\t\t| 'line'\n\t\t| 'line2'\n\t\t| 'pipe'\n\t\t| 'simpleDots'\n\t\t| 'simpleDotsScrolling'\n\t\t| 'star'\n\t\t| 'star2'\n\t\t| 'flip'\n\t\t| 'hamburger'\n\t\t| 'growVertical'\n\t\t| 'growHorizontal'\n\t\t| 'balloon'\n\t\t| 'balloon2'\n\t\t| 'noise'\n\t\t| 'bounce'\n\t\t| 'boxBounce'\n\t\t| 'boxBounce2'\n\t\t| 'triangle'\n\t\t| 'arc'\n\t\t| 'circle'\n\t\t| 'squareCorners'\n\t\t| 'circleQuarters'\n\t\t| 'circleHalves'\n\t\t| 'squish'\n\t\t| 'toggle'\n\t\t| 'toggle2'\n\t\t| 'toggle3'\n\t\t| 'toggle4'\n\t\t| 'toggle5'\n\t\t| 'toggle6'\n\t\t| 'toggle7'\n\t\t| 'toggle8'\n\t\t| 'toggle9'\n\t\t| 'toggle10'\n\t\t| 'toggle11'\n\t\t| 'toggle12'\n\t\t| 'toggle13'\n\t\t| 'arrow'\n\t\t| 'arrow2'\n\t\t| 'arrow3'\n\t\t| 'bouncingBar'\n\t\t| 'bouncingBall'\n\t\t| 'smiley'\n\t\t| 'monkey'\n\t\t| 'hearts'\n\t\t| 'clock'\n\t\t| 'earth'\n\t\t| 'material'\n\t\t| 'moon'\n\t\t| 'runner'\n\t\t| 'pong'\n\t\t| 'shark'\n\t\t| 'dqpb'\n\t\t| 'weather'\n\t\t| 'christmas'\n\t\t| 'grenade'\n\t\t| 'point'\n\t\t| 'layer'\n\t\t| 'betaWave'\n\t\t| 'fingerDance'\n\t\t| 'fistBump'\n\t\t| 'soccerHeader'\n\t\t| 'mindblown'\n\t\t| 'speaker'\n\t\t| 'orangePulse'\n\t\t| 'bluePulse'\n\t\t| 'orangeBluePulse'\n\t\t| 'timeTravel'\n\t\t| 'aesthetic';\n\n\tinterface Spinner {\n\t\t/**\n\t\tRecommended interval.\n\t\t*/\n\t\treadonly interval: number;\n\n\t\t/**\n\t\tA list of frames to show for the spinner.\n\t\t*/\n\t\treadonly frames: string[];\n\t}\n}\n\n/**\n70+ spinners for use in the terminal.\n\n@example\n```\nimport cliSpinners = require('cli-spinners');\n\nconsole.log(cliSpinners.dots);\n// {\n//   interval: 80,\n//   frames: ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏']\n// }\n```\n*/\ndeclare const cliSpinners: {\n\treadonly [spinnerName in cliSpinners.SpinnerName]: cliSpinners.Spinner;\n} & {\n\t/**\n\tReturns a random spinner each time it's called.\n\t*/\n\treadonly random: cliSpinners.Spinner;\n\n\t// TODO: Remove this for the next major release\n\tdefault: typeof cliSpinners;\n};\n\nexport = cliSpinners;\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/Y2xvbmVAMS4wLjQ=",
    "content": "/README.md\u000e\u0001# clone\n\n[![build status](https://secure.travis-ci.org/pvorb/node-clone.png)](http://travis-ci.org/pvorb/node-clone)\n\n[![info badge](https://nodei.co/npm/clone.png?downloads=true&downloadRank=true&stars=true)](http://npm-stat.com/charts.html?package=clone)\n\noffers foolproof _deep cloning_ of objects, arrays, numbers, strings etc. in JavaScript.\n\n\n## Installation\n\n    npm install clone\n\n(It also works with browserify, ender or standalone.)\n\n\n## Example\n\n~~~ javascript\nvar clone = require('clone');\n\nvar a, b;\n\na = { foo: { bar: 'baz' } };  // initial value of a\n\nb = clone(a);                 // clone a -> b\na.foo.bar = 'foo';            // change a\n\nconsole.log(a);               // show a\nconsole.log(b);               // show b\n~~~\n\nThis will print:\n\n~~~ javascript\n{ foo: { bar: 'foo' } }\n{ foo: { bar: 'baz' } }\n~~~\n\n**clone** masters cloning simple objects (even with custom prototype), arrays,\nDate objects, and RegExp objects. Everything is cloned recursively, so that you\ncan clone dates in arrays in objects, for example.\n\n\n## API\n\n`clone(val, circular, depth)`\n\n  * `val` -- the value that you want to clone, any type allowed\n  * `circular` -- boolean\n\n    Call `clone` with `circular` set to `false` if you are certain that `obj`\n    contains no circular references. This will give better performance if needed.\n    There is no error if `undefined` or `null` is passed as `obj`.\n  * `depth` -- depth to which the object is to be cloned (optional,\n    defaults to infinity)\n\n`clone.clonePrototype(obj)`\n\n  * `obj` -- the object that you want to clone\n\nDoes a prototype clone as\n[described by Oran Looney](http://oranlooney.com/functional-javascript/).\n\n\n## Circular References\n\n~~~ javascript\nvar a, b;\n\na = { hello: 'world' };\n\na.myself = a;\nb = clone(a);\n\nconsole.log(b);\n~~~\n\nThis will print:\n\n~~~ javascript\n{ hello: \"world\", myself: [Circular] }\n~~~\n\nSo, `b.myself` points to `b`, not `a`. Neat!\n\n\n## Test\n\n    npm test\n\n\n## Caveat\n\nSome special objects like a socket or `process.stdout`/`stderr` are known to not\nbe cloneable. If you find other objects that cannot be cloned, please [open an\nissue](https://github.com/pvorb/node-clone/issues/new).\n\n\n## Bugs and Issues\n\nIf you encounter any bugs or issues, feel free to [open an issue at\ngithub](https://github.com/pvorb/node-clone/issues) or send me an email to\n<paul@vorba.ch>. I also always like to hear from you, if you’re using my code.\n\n## License\n\nCopyright © 2011-2015 [Paul Vorbach](http://paul.vorba.ch/) and\n[contributors](https://github.com/pvorb/node-clone/graphs/contributors).\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the “Software”), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n/clone.iml\u0001<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<module type=\"WEB_MODULE\" version=\"4\">\n  <component name=\"NewModuleRootManager\" inherit-compiler-output=\"true\">\n    <exclude-output />\n    <content url=\"file://$MODULE_DIR$\" />\n    <orderEntry type=\"inheritedJdk\" />\n    <orderEntry type=\"sourceFolder\" forTests=\"false\" />\n    <orderEntry type=\"library\" name=\"clone node_modules\" level=\"project\" />\n  </component>\n</module>/clone.js\u0011%var clone = (function() {\n'use strict';\n\n/**\n * Clones (copies) an Object using deep copying.\n *\n * This function supports circular references by default, but if you are certain\n * there are no circular references in your object, you can save some CPU time\n * by calling clone(obj, false).\n *\n * Caution: if `circular` is false and `parent` contains circular references,\n * your program may enter an infinite loop and crash.\n *\n * @param `parent` - the object to be cloned\n * @param `circular` - set to true if the object to be cloned may contain\n *    circular references. (optional - true by default)\n * @param `depth` - set to a number if the object is only to be cloned to\n *    a particular depth. (optional - defaults to Infinity)\n * @param `prototype` - sets the prototype to be used when cloning an object.\n *    (optional - defaults to parent prototype).\n*/\nfunction clone(parent, circular, depth, prototype) {\n  var filter;\n  if (typeof circular === 'object') {\n    depth = circular.depth;\n    prototype = circular.prototype;\n    filter = circular.filter;\n    circular = circular.circular\n  }\n  // maintain two arrays for circular references, where corresponding parents\n  // and children have the same index\n  var allParents = [];\n  var allChildren = [];\n\n  var useBuffer = typeof Buffer != 'undefined';\n\n  if (typeof circular == 'undefined')\n    circular = true;\n\n  if (typeof depth == 'undefined')\n    depth = Infinity;\n\n  // recurse this function so we don't reset allParents and allChildren\n  function _clone(parent, depth) {\n    // cloning null always returns null\n    if (parent === null)\n      return null;\n\n    if (depth == 0)\n      return parent;\n\n    var child;\n    var proto;\n    if (typeof parent != 'object') {\n      return parent;\n    }\n\n    if (clone.__isArray(parent)) {\n      child = [];\n    } else if (clone.__isRegExp(parent)) {\n      child = new RegExp(parent.source, __getRegExpFlags(parent));\n      if (parent.lastIndex) child.lastIndex = parent.lastIndex;\n    } else if (clone.__isDate(parent)) {\n      child = new Date(parent.getTime());\n    } else if (useBuffer && Buffer.isBuffer(parent)) {\n      if (Buffer.allocUnsafe) {\n        // Node.js >= 4.5.0\n        child = Buffer.allocUnsafe(parent.length);\n      } else {\n        // Older Node.js versions\n        child = new Buffer(parent.length);\n      }\n      parent.copy(child);\n      return child;\n    } else {\n      if (typeof prototype == 'undefined') {\n        proto = Object.getPrototypeOf(parent);\n        child = Object.create(proto);\n      }\n      else {\n        child = Object.create(prototype);\n        proto = prototype;\n      }\n    }\n\n    if (circular) {\n      var index = allParents.indexOf(parent);\n\n      if (index != -1) {\n        return allChildren[index];\n      }\n      allParents.push(parent);\n      allChildren.push(child);\n    }\n\n    for (var i in parent) {\n      var attrs;\n      if (proto) {\n        attrs = Object.getOwnPropertyDescriptor(proto, i);\n      }\n\n      if (attrs && attrs.set == null) {\n        continue;\n      }\n      child[i] = _clone(parent[i], depth - 1);\n    }\n\n    return child;\n  }\n\n  return _clone(parent, depth);\n}\n\n/**\n * Simple flat clone using prototype, accepts only objects, usefull for property\n * override on FLAT configuration object (no nested props).\n *\n * USE WITH CAUTION! This may not behave as you wish if you do not know how this\n * works.\n */\nclone.clonePrototype = function clonePrototype(parent) {\n  if (parent === null)\n    return null;\n\n  var c = function () {};\n  c.prototype = parent;\n  return new c();\n};\n\n// private utility functions\n\nfunction __objToStr(o) {\n  return Object.prototype.toString.call(o);\n};\nclone.__objToStr = __objToStr;\n\nfunction __isDate(o) {\n  return typeof o === 'object' && __objToStr(o) === '[object Date]';\n};\nclone.__isDate = __isDate;\n\nfunction __isArray(o) {\n  return typeof o === 'object' && __objToStr(o) === '[object Array]';\n};\nclone.__isArray = __isArray;\n\nfunction __isRegExp(o) {\n  return typeof o === 'object' && __objToStr(o) === '[object RegExp]';\n};\nclone.__isRegExp = __isRegExp;\n\nfunction __getRegExpFlags(re) {\n  var flags = '';\n  if (re.global) flags += 'g';\n  if (re.ignoreCase) flags += 'i';\n  if (re.multiline) flags += 'm';\n  return flags;\n};\nclone.__getRegExpFlags = __getRegExpFlags;\n\nreturn clone;\n})();\n\nif (typeof module === 'object' && module.exports) {\n  module.exports = clone;\n}\n/.npmignore-/node_modules/\n/test.js\n/*.html\n/.travis.yml\n/package.json\u0006`{\n  \"name\": \"clone\",\n  \"description\": \"deep cloning of objects and arrays\",\n  \"tags\": [\n    \"clone\",\n    \"object\",\n    \"array\",\n    \"function\",\n    \"date\"\n  ],\n  \"version\": \"1.0.4\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git://github.com/pvorb/node-clone.git\"\n  },\n  \"bugs\": {\n    \"url\": \"https://github.com/pvorb/node-clone/issues\"\n  },\n  \"main\": \"clone.js\",\n  \"author\": \"Paul Vorbach <paul@vorba.ch> (http://paul.vorba.ch/)\",\n  \"contributors\": [\n    \"Blake Miner <miner.blake@gmail.com> (http://www.blakeminer.com/)\",\n    \"Tian You <axqd001@gmail.com> (http://blog.axqd.net/)\",\n    \"George Stagas <gstagas@gmail.com> (http://stagas.com/)\",\n    \"Tobiasz Cudnik <tobiasz.cudnik@gmail.com> (https://github.com/TobiaszCudnik)\",\n    \"Pavel Lang <langpavel@phpskelet.org> (https://github.com/langpavel)\",\n    \"Dan MacTough (http://yabfog.com/)\",\n    \"w1nk (https://github.com/w1nk)\",\n    \"Hugh Kennedy (http://twitter.com/hughskennedy)\",\n    \"Dustin Diaz (http://dustindiaz.com)\",\n    \"Ilya Shaisultanov (https://github.com/diversario)\",\n    \"Nathan MacInnes <nathan@macinn.es> (http://macinn.es/)\",\n    \"Benjamin E. Coe <ben@npmjs.com> (https://twitter.com/benjamincoe)\",\n    \"Nathan Zadoks (https://github.com/nathan7)\",\n    \"Róbert Oroszi <robert+gh@oroszi.net> (https://github.com/oroce)\",\n    \"Aurélio A. Heckert (http://softwarelivre.org/aurium)\",\n    \"Guy Ellis (http://www.guyellisrocks.com/)\"\n  ],\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"node\": \">=0.8\"\n  },\n  \"dependencies\": {},\n  \"devDependencies\": {\n    \"nodeunit\": \"~0.9.0\"\n  },\n  \"optionalDependencies\": {},\n  \"scripts\": {\n    \"test\": \"nodeunit test.js\"\n  }\n}\n/LICENSE\u0004.Copyright © 2011-2015 Paul Vorbach <paul@vorba.ch>\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the “Software”), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/Y3Jvc3Mtc3Bhd25ANy4wLjM=",
    "content": "/README.md\u0012x# cross-spawn\n\n[![NPM version][npm-image]][npm-url] [![Downloads][downloads-image]][npm-url] [![Build Status][travis-image]][travis-url] [![Build status][appveyor-image]][appveyor-url] [![Coverage Status][codecov-image]][codecov-url] [![Dependency status][david-dm-image]][david-dm-url] [![Dev Dependency status][david-dm-dev-image]][david-dm-dev-url]\n\n[npm-url]:https://npmjs.org/package/cross-spawn\n[downloads-image]:https://img.shields.io/npm/dm/cross-spawn.svg\n[npm-image]:https://img.shields.io/npm/v/cross-spawn.svg\n[travis-url]:https://travis-ci.org/moxystudio/node-cross-spawn\n[travis-image]:https://img.shields.io/travis/moxystudio/node-cross-spawn/master.svg\n[appveyor-url]:https://ci.appveyor.com/project/satazor/node-cross-spawn\n[appveyor-image]:https://img.shields.io/appveyor/ci/satazor/node-cross-spawn/master.svg\n[codecov-url]:https://codecov.io/gh/moxystudio/node-cross-spawn\n[codecov-image]:https://img.shields.io/codecov/c/github/moxystudio/node-cross-spawn/master.svg\n[david-dm-url]:https://david-dm.org/moxystudio/node-cross-spawn\n[david-dm-image]:https://img.shields.io/david/moxystudio/node-cross-spawn.svg\n[david-dm-dev-url]:https://david-dm.org/moxystudio/node-cross-spawn?type=dev\n[david-dm-dev-image]:https://img.shields.io/david/dev/moxystudio/node-cross-spawn.svg\n\nA cross platform solution to node's spawn and spawnSync.\n\n\n## Installation\n\nNode.js version 8 and up:\n`$ npm install cross-spawn`\n\nNode.js version 7 and under:\n`$ npm install cross-spawn@6`\n\n## Why\n\nNode has issues when using spawn on Windows:\n\n- It ignores [PATHEXT](https://github.com/joyent/node/issues/2318)\n- It does not support [shebangs](https://en.wikipedia.org/wiki/Shebang_(Unix))\n- Has problems running commands with [spaces](https://github.com/nodejs/node/issues/7367)\n- Has problems running commands with posix relative paths (e.g.: `./my-folder/my-executable`)\n- Has an [issue](https://github.com/moxystudio/node-cross-spawn/issues/82) with command shims (files in `node_modules/.bin/`), where arguments with quotes and parenthesis would result in [invalid syntax error](https://github.com/moxystudio/node-cross-spawn/blob/e77b8f22a416db46b6196767bcd35601d7e11d54/test/index.test.js#L149)\n- No `options.shell` support on node `<v4.8`\n\nAll these issues are handled correctly by `cross-spawn`.\nThere are some known modules, such as [win-spawn](https://github.com/ForbesLindesay/win-spawn), that try to solve this but they are either broken or provide faulty escaping of shell arguments.\n\n\n## Usage\n\nExactly the same way as node's [`spawn`](https://nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options) or [`spawnSync`](https://nodejs.org/api/child_process.html#child_process_child_process_spawnsync_command_args_options), so it's a drop in replacement.\n\n\n```js\nconst spawn = require('cross-spawn');\n\n// Spawn NPM asynchronously\nconst child = spawn('npm', ['list', '-g', '-depth', '0'], { stdio: 'inherit' });\n\n// Spawn NPM synchronously\nconst result = spawn.sync('npm', ['list', '-g', '-depth', '0'], { stdio: 'inherit' });\n```\n\n\n## Caveats\n\n### Using `options.shell` as an alternative to `cross-spawn`\n\nStarting from node `v4.8`, `spawn` has a `shell` option that allows you run commands from within a shell. This new option solves\nthe [PATHEXT](https://github.com/joyent/node/issues/2318) issue but:\n\n- It's not supported in node `<v4.8`\n- You must manually escape the command and arguments which is very error prone, specially when passing user input\n- There are a lot of other unresolved issues from the [Why](#why) section that you must take into account\n\nIf you are using the `shell` option to spawn a command in a cross platform way, consider using `cross-spawn` instead. You have been warned.\n\n### `options.shell` support\n\nWhile `cross-spawn` adds support for `options.shell` in node `<v4.8`, all of its enhancements are disabled.\n\nThis mimics the Node.js behavior. More specifically, the command and its arguments will not be automatically escaped nor shebang support will be offered. This is by design because if you are using `options.shell` you are probably targeting a specific platform anyway and you don't want things to get into your way.\n\n### Shebangs support\n\nWhile `cross-spawn` handles shebangs on Windows, its support is limited. More specifically, it just supports `#!/usr/bin/env <program>` where `<program>` must not contain any arguments.   \nIf you would like to have the shebang support improved, feel free to contribute via a pull-request.\n\nRemember to always test your code on Windows!\n\n\n## Tests\n\n`$ npm test`   \n`$ npm test -- --watch` during development\n\n\n## License\n\nReleased under the [MIT License](https://www.opensource.org/licenses/mit-license.php).\n/lib/util/readShebang.js\u0002%'use strict';\n\nconst fs = require('fs');\nconst shebangCommand = require('shebang-command');\n\nfunction readShebang(command) {\n    // Read the first 150 bytes from the file\n    const size = 150;\n    const buffer = Buffer.alloc(size);\n\n    let fd;\n\n    try {\n        fd = fs.openSync(command, 'r');\n        fs.readSync(fd, buffer, 0, size, 0);\n        fs.closeSync(fd);\n    } catch (e) { /* Empty */ }\n\n    // Attempt to extract shebang (null is returned if not a shebang)\n    return shebangCommand(buffer.toString());\n}\n\nmodule.exports = readShebang;\n/lib/parse.js\u000b'use strict';\n\nconst path = require('path');\nconst resolveCommand = require('./util/resolveCommand');\nconst escape = require('./util/escape');\nconst readShebang = require('./util/readShebang');\n\nconst isWin = process.platform === 'win32';\nconst isExecutableRegExp = /\\.(?:com|exe)$/i;\nconst isCmdShimRegExp = /node_modules[\\\\/].bin[\\\\/][^\\\\/]+\\.cmd$/i;\n\nfunction detectShebang(parsed) {\n    parsed.file = resolveCommand(parsed);\n\n    const shebang = parsed.file && readShebang(parsed.file);\n\n    if (shebang) {\n        parsed.args.unshift(parsed.file);\n        parsed.command = shebang;\n\n        return resolveCommand(parsed);\n    }\n\n    return parsed.file;\n}\n\nfunction parseNonShell(parsed) {\n    if (!isWin) {\n        return parsed;\n    }\n\n    // Detect & add support for shebangs\n    const commandFile = detectShebang(parsed);\n\n    // We don't need a shell if the command filename is an executable\n    const needsShell = !isExecutableRegExp.test(commandFile);\n\n    // If a shell is required, use cmd.exe and take care of escaping everything correctly\n    // Note that `forceShell` is an hidden option used only in tests\n    if (parsed.options.forceShell || needsShell) {\n        // Need to double escape meta chars if the command is a cmd-shim located in `node_modules/.bin/`\n        // The cmd-shim simply calls execute the package bin file with NodeJS, proxying any argument\n        // Because the escape of metachars with ^ gets interpreted when the cmd.exe is first called,\n        // we need to double escape them\n        const needsDoubleEscapeMetaChars = isCmdShimRegExp.test(commandFile);\n\n        // Normalize posix paths into OS compatible paths (e.g.: foo/bar -> foo\\bar)\n        // This is necessary otherwise it will always fail with ENOENT in those cases\n        parsed.command = path.normalize(parsed.command);\n\n        // Escape command & arguments\n        parsed.command = escape.command(parsed.command);\n        parsed.args = parsed.args.map((arg) => escape.argument(arg, needsDoubleEscapeMetaChars));\n\n        const shellCommand = [parsed.command].concat(parsed.args).join(' ');\n\n        parsed.args = ['/d', '/s', '/c', `\"${shellCommand}\"`];\n        parsed.command = process.env.comspec || 'cmd.exe';\n        parsed.options.windowsVerbatimArguments = true; // Tell node's spawn that the arguments are already escaped\n    }\n\n    return parsed;\n}\n\nfunction parse(command, args, options) {\n    // Normalize arguments, similar to nodejs\n    if (args && !Array.isArray(args)) {\n        options = args;\n        args = null;\n    }\n\n    args = args ? args.slice(0) : []; // Clone array to avoid changing the original\n    options = Object.assign({}, options); // Clone object to avoid changing the original\n\n    // Build our parsed object\n    const parsed = {\n        command,\n        args,\n        options,\n        file: undefined,\n        original: {\n            command,\n            args,\n        },\n    };\n\n    // Delegate further parsing to shell or non-shell\n    return options.shell ? parsed : parseNonShell(parsed);\n}\n\nmodule.exports = parse;\n/index.js\u0004'use strict';\n\nconst cp = require('child_process');\nconst parse = require('./lib/parse');\nconst enoent = require('./lib/enoent');\n\nfunction spawn(command, args, options) {\n    // Parse the arguments\n    const parsed = parse(command, args, options);\n\n    // Spawn the child process\n    const spawned = cp.spawn(parsed.command, parsed.args, parsed.options);\n\n    // Hook into child process \"exit\" event to emit an error if the command\n    // does not exists, see: https://github.com/IndigoUnited/node-cross-spawn/issues/16\n    enoent.hookChildProcess(spawned, parsed);\n\n    return spawned;\n}\n\nfunction spawnSync(command, args, options) {\n    // Parse the arguments\n    const parsed = parse(command, args, options);\n\n    // Spawn the child process\n    const result = cp.spawnSync(parsed.command, parsed.args, parsed.options);\n\n    // Analyze if the command does not exist, see: https://github.com/IndigoUnited/node-cross-spawn/issues/16\n    result.error = result.error || enoent.verifyENOENTSync(result.status, parsed);\n\n    return result;\n}\n\nmodule.exports = spawn;\nmodule.exports.spawn = spawn;\nmodule.exports.sync = spawnSync;\n\nmodule.exports._parse = parse;\nmodule.exports._enoent = enoent;\n/lib/util/resolveCommand.js\u0006\u0015'use strict';\n\nconst path = require('path');\nconst which = require('which');\nconst getPathKey = require('path-key');\n\nfunction resolveCommandAttempt(parsed, withoutPathExt) {\n    const env = parsed.options.env || process.env;\n    const cwd = process.cwd();\n    const hasCustomCwd = parsed.options.cwd != null;\n    // Worker threads do not have process.chdir()\n    const shouldSwitchCwd = hasCustomCwd && process.chdir !== undefined && !process.chdir.disabled;\n\n    // If a custom `cwd` was specified, we need to change the process cwd\n    // because `which` will do stat calls but does not support a custom cwd\n    if (shouldSwitchCwd) {\n        try {\n            process.chdir(parsed.options.cwd);\n        } catch (err) {\n            /* Empty */\n        }\n    }\n\n    let resolved;\n\n    try {\n        resolved = which.sync(parsed.command, {\n            path: env[getPathKey({ env })],\n            pathExt: withoutPathExt ? path.delimiter : undefined,\n        });\n    } catch (e) {\n        /* Empty */\n    } finally {\n        if (shouldSwitchCwd) {\n            process.chdir(cwd);\n        }\n    }\n\n    // If we successfully resolved, ensure that an absolute path is returned\n    // Note that when a custom `cwd` was used, we need to resolve to an absolute path based on it\n    if (resolved) {\n        resolved = path.resolve(hasCustomCwd ? parsed.options.cwd : '', resolved);\n    }\n\n    return resolved;\n}\n\nfunction resolveCommand(parsed) {\n    return resolveCommandAttempt(parsed) || resolveCommandAttempt(parsed, true);\n}\n\nmodule.exports = resolveCommand;\n/lib/util/escape.js\u0004'use strict';\n\n// See http://www.robvanderwoude.com/escapechars.php\nconst metaCharsRegExp = /([()\\][%!^\"`<>&|;, *?])/g;\n\nfunction escapeCommand(arg) {\n    // Escape meta chars\n    arg = arg.replace(metaCharsRegExp, '^$1');\n\n    return arg;\n}\n\nfunction escapeArgument(arg, doubleEscapeMetaChars) {\n    // Convert to string\n    arg = `${arg}`;\n\n    // Algorithm below is based on https://qntm.org/cmd\n\n    // Sequence of backslashes followed by a double quote:\n    // double up all the backslashes and escape the double quote\n    arg = arg.replace(/(\\\\*)\"/g, '$1$1\\\\\"');\n\n    // Sequence of backslashes followed by the end of the string\n    // (which will become a double quote later):\n    // double up all the backslashes\n    arg = arg.replace(/(\\\\*)$/, '$1$1');\n\n    // All other backslashes occur literally\n\n    // Quote the whole thing:\n    arg = `\"${arg}\"`;\n\n    // Escape meta chars\n    arg = arg.replace(metaCharsRegExp, '^$1');\n\n    // Double escape meta chars if necessary\n    if (doubleEscapeMetaChars) {\n        arg = arg.replace(metaCharsRegExp, '^$1');\n    }\n\n    return arg;\n}\n\nmodule.exports.command = escapeCommand;\nmodule.exports.argument = escapeArgument;\n/CHANGELOG.md\u0012`# Changelog\n\nAll notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.\n\n### [7.0.3](https://github.com/moxystudio/node-cross-spawn/compare/v7.0.2...v7.0.3) (2020-05-25)\n\n\n### Bug Fixes\n\n* detect path key based on correct environment ([#133](https://github.com/moxystudio/node-cross-spawn/issues/133)) ([159e7e9](https://github.com/moxystudio/node-cross-spawn/commit/159e7e9785e57451cba034ae51719f97135074ae))\n\n### [7.0.2](https://github.com/moxystudio/node-cross-spawn/compare/v7.0.1...v7.0.2) (2020-04-04)\n\n\n### Bug Fixes\n\n* fix worker threads in Node >=11.10.0 ([#132](https://github.com/moxystudio/node-cross-spawn/issues/132)) ([6c5b4f0](https://github.com/moxystudio/node-cross-spawn/commit/6c5b4f015814a6c4f6b33230dfd1a860aedc0aaf))\n\n### [7.0.1](https://github.com/moxystudio/node-cross-spawn/compare/v7.0.0...v7.0.1) (2019-10-07)\n\n\n### Bug Fixes\n\n* **core:** support worker threads ([#127](https://github.com/moxystudio/node-cross-spawn/issues/127)) ([cfd49c9](https://github.com/moxystudio/node-cross-spawn/commit/cfd49c9))\n\n## [7.0.0](https://github.com/moxystudio/node-cross-spawn/compare/v6.0.5...v7.0.0) (2019-09-03)\n\n\n### ⚠ BREAKING CHANGES\n\n* drop support for Node.js < 8\n\n* drop support for versions below Node.js 8 ([#125](https://github.com/moxystudio/node-cross-spawn/issues/125)) ([16feb53](https://github.com/moxystudio/node-cross-spawn/commit/16feb53))\n\n<a name=\"6.0.5\"></a>\n## [6.0.5](https://github.com/moxystudio/node-cross-spawn/compare/v6.0.4...v6.0.5) (2018-03-02)\n\n\n### Bug Fixes\n\n* avoid using deprecated Buffer constructor ([#94](https://github.com/moxystudio/node-cross-spawn/issues/94)) ([d5770df](https://github.com/moxystudio/node-cross-spawn/commit/d5770df)), closes [/nodejs.org/api/deprecations.html#deprecations_dep0005](https://github.com//nodejs.org/api/deprecations.html/issues/deprecations_dep0005)\n\n\n\n<a name=\"6.0.4\"></a>\n## [6.0.4](https://github.com/moxystudio/node-cross-spawn/compare/v6.0.3...v6.0.4) (2018-01-31)\n\n\n### Bug Fixes\n\n* fix paths being incorrectly normalized on unix ([06ee3c6](https://github.com/moxystudio/node-cross-spawn/commit/06ee3c6)), closes [#90](https://github.com/moxystudio/node-cross-spawn/issues/90)\n\n\n\n<a name=\"6.0.3\"></a>\n## [6.0.3](https://github.com/moxystudio/node-cross-spawn/compare/v6.0.2...v6.0.3) (2018-01-23)\n\n\n\n<a name=\"6.0.2\"></a>\n## [6.0.2](https://github.com/moxystudio/node-cross-spawn/compare/v6.0.1...v6.0.2) (2018-01-23)\n\n\n\n<a name=\"6.0.1\"></a>\n## [6.0.1](https://github.com/moxystudio/node-cross-spawn/compare/v6.0.0...v6.0.1) (2018-01-23)\n\n\n\n<a name=\"6.0.0\"></a>\n# [6.0.0](https://github.com/moxystudio/node-cross-spawn/compare/5.1.0...6.0.0) (2018-01-23)\n\n\n### Bug Fixes\n\n* fix certain arguments not being correctly escaped or causing batch syntax error ([900cf10](https://github.com/moxystudio/node-cross-spawn/commit/900cf10)), closes [#82](https://github.com/moxystudio/node-cross-spawn/issues/82) [#51](https://github.com/moxystudio/node-cross-spawn/issues/51)\n* fix commands as posix relatixe paths not working correctly, e.g.: `./my-command` ([900cf10](https://github.com/moxystudio/node-cross-spawn/commit/900cf10))\n* fix `options` argument being mutated ([900cf10](https://github.com/moxystudio/node-cross-spawn/commit/900cf10))\n* fix commands resolution when PATH was actually Path ([900cf10](https://github.com/moxystudio/node-cross-spawn/commit/900cf10))\n\n\n### Features\n\n* improve compliance with node's ENOENT errors ([900cf10](https://github.com/moxystudio/node-cross-spawn/commit/900cf10))\n* improve detection of node's shell option support ([900cf10](https://github.com/moxystudio/node-cross-spawn/commit/900cf10))\n\n\n### Chores\n\n* upgrade tooling\n* upgrate project to es6 (node v4)\n\n\n### BREAKING CHANGES\n\n* remove support for older nodejs versions, only `node >= 4` is supported\n\n\n<a name=\"5.1.0\"></a>\n## [5.1.0](https://github.com/moxystudio/node-cross-spawn/compare/5.0.1...5.1.0) (2017-02-26)\n\n\n### Bug Fixes\n\n* fix `options.shell` support for NodeJS [v4.8](https://github.com/nodejs/node/blob/master/doc/changelogs/CHANGELOG_V4.md#4.8.0)\n\n\n<a name=\"5.0.1\"></a>\n## [5.0.1](https://github.com/moxystudio/node-cross-spawn/compare/5.0.0...5.0.1) (2016-11-04)\n\n\n### Bug Fixes\n\n* fix `options.shell` support for NodeJS v7\n\n\n<a name=\"5.0.0\"></a>\n# [5.0.0](https://github.com/moxystudio/node-cross-spawn/compare/4.0.2...5.0.0) (2016-10-30)\n\n\n## Features\n\n* add support for `options.shell`\n* improve parsing of shebangs by using [`shebang-command`](https://github.com/kevva/shebang-command) module\n\n\n## Chores\n\n* refactor some code to make it more clear\n* update README caveats\n/lib/enoent.js\u0005'use strict';\n\nconst isWin = process.platform === 'win32';\n\nfunction notFoundError(original, syscall) {\n    return Object.assign(new Error(`${syscall} ${original.command} ENOENT`), {\n        code: 'ENOENT',\n        errno: 'ENOENT',\n        syscall: `${syscall} ${original.command}`,\n        path: original.command,\n        spawnargs: original.args,\n    });\n}\n\nfunction hookChildProcess(cp, parsed) {\n    if (!isWin) {\n        return;\n    }\n\n    const originalEmit = cp.emit;\n\n    cp.emit = function (name, arg1) {\n        // If emitting \"exit\" event and exit code is 1, we need to check if\n        // the command exists and emit an \"error\" instead\n        // See https://github.com/IndigoUnited/node-cross-spawn/issues/16\n        if (name === 'exit') {\n            const err = verifyENOENT(arg1, parsed, 'spawn');\n\n            if (err) {\n                return originalEmit.call(cp, 'error', err);\n            }\n        }\n\n        return originalEmit.apply(cp, arguments); // eslint-disable-line prefer-rest-params\n    };\n}\n\nfunction verifyENOENT(status, parsed) {\n    if (isWin && status === 1 && !parsed.file) {\n        return notFoundError(parsed.original, 'spawn');\n    }\n\n    return null;\n}\n\nfunction verifyENOENTSync(status, parsed) {\n    if (isWin && status === 1 && !parsed.file) {\n        return notFoundError(parsed.original, 'spawnSync');\n    }\n\n    return null;\n}\n\nmodule.exports = {\n    hookChildProcess,\n    verifyENOENT,\n    verifyENOENTSync,\n    notFoundError,\n};\n/package.json\u0006w{\n  \"name\": \"cross-spawn\",\n  \"version\": \"7.0.3\",\n  \"description\": \"Cross platform child_process#spawn and child_process#spawnSync\",\n  \"keywords\": [\n    \"spawn\",\n    \"spawnSync\",\n    \"windows\",\n    \"cross-platform\",\n    \"path-ext\",\n    \"shebang\",\n    \"cmd\",\n    \"execute\"\n  ],\n  \"author\": \"André Cruz <andre@moxy.studio>\",\n  \"homepage\": \"https://github.com/moxystudio/node-cross-spawn\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git@github.com:moxystudio/node-cross-spawn.git\"\n  },\n  \"license\": \"MIT\",\n  \"main\": \"index.js\",\n  \"files\": [\n    \"lib\"\n  ],\n  \"scripts\": {\n    \"lint\": \"eslint .\",\n    \"test\": \"jest --env node --coverage\",\n    \"prerelease\": \"npm t && npm run lint\",\n    \"release\": \"standard-version\",\n    \"postrelease\": \"git push --follow-tags origin HEAD && npm publish\"\n  },\n  \"husky\": {\n    \"hooks\": {\n      \"commit-msg\": \"commitlint -E HUSKY_GIT_PARAMS\",\n      \"pre-commit\": \"lint-staged\"\n    }\n  },\n  \"lint-staged\": {\n    \"*.js\": [\n      \"eslint --fix\",\n      \"git add\"\n    ]\n  },\n  \"commitlint\": {\n    \"extends\": [\n      \"@commitlint/config-conventional\"\n    ]\n  },\n  \"dependencies\": {\n    \"path-key\": \"^3.1.0\",\n    \"shebang-command\": \"^2.0.0\",\n    \"which\": \"^2.0.1\"\n  },\n  \"devDependencies\": {\n    \"@commitlint/cli\": \"^8.1.0\",\n    \"@commitlint/config-conventional\": \"^8.1.0\",\n    \"babel-core\": \"^6.26.3\",\n    \"babel-jest\": \"^24.9.0\",\n    \"babel-preset-moxy\": \"^3.1.0\",\n    \"eslint\": \"^5.16.0\",\n    \"eslint-config-moxy\": \"^7.1.0\",\n    \"husky\": \"^3.0.5\",\n    \"jest\": \"^24.9.0\",\n    \"lint-staged\": \"^9.2.5\",\n    \"mkdirp\": \"^0.5.1\",\n    \"rimraf\": \"^3.0.0\",\n    \"standard-version\": \"^7.0.0\"\n  },\n  \"engines\": {\n    \"node\": \">= 8\"\n  }\n}\n/LICENSE\u0004QThe MIT License (MIT)\n\nCopyright (c) 2018 Made With MOXY Lda <hello@moxy.studio>\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/Y3NzdHlwZUAyLjYuOQ==",
    "content": "/README.md\"f# CSSType\n\n[![npm](https://img.shields.io/npm/v/csstype.svg)](https://www.npmjs.com/package/csstype)\n\nTypeScript and Flow definitions for CSS, generated by [data from MDN](https://github.com/mdn/data). It provides autocompletion and type checking for CSS properties and values.\n\n```ts\nimport * as CSS from 'csstype';\n\nconst style: CSS.Properties = {\n  colour: 'white', // Type error on property\n  textAlign: 'middle', // Type error on value\n};\n```\n\n## Getting started\n\n```sh\n$ npm install csstype\n$ # or\n$ yarn add csstype\n```\n\n## Table of content\n\n- [Style types](#style-types)\n- [At-rule types](#at-rule-types)\n- [Pseudo types](#pseudo-types)\n- [Usage](#usage)\n- [What should I do when I get type errors?](#what-should-i-do-when-i-get-type-errors)\n- [Version 2.0](#version-20)\n- [Contributing](#contributing)\n  - [Commands](#commands)\n\n## Style types\n\nProperties are categorized in different uses and in several technical variations to provide typings that suits as many as possible.\n\nAll interfaces has one optional generic argument to define length. It defaults to `string | 0` because `0` is the only [length where the unit identifier is optional](https://drafts.csswg.org/css-values-3/#lengths). You can specify this, e.g. `string | number`, for platforms and libraries that accepts any numeric value as length with a specific unit.\n\n|                | Default              | `Hyphen`                   | `Fallback`                   | `HyphenFallback`                   |\n| -------------- | -------------------- | -------------------------- | ---------------------------- | ---------------------------------- |\n| **All**        | `Properties`         | `PropertiesHyphen`         | `PropertiesFallback`         | `PropertiesHyphenFallback`         |\n| **`Standard`** | `StandardProperties` | `StandardPropertiesHyphen` | `StandardPropertiesFallback` | `StandardPropertiesHyphenFallback` |\n| **`Vendor`**   | `VendorProperties`   | `VendorPropertiesHyphen`   | `VendorPropertiesFallback`   | `VendorPropertiesHyphenFallback`   |\n| **`Obsolete`** | `ObsoleteProperties` | `ObsoletePropertiesHyphen` | `ObsoletePropertiesFallback` | `ObsoletePropertiesHyphenFallback` |\n| **`Svg`**      | `SvgProperties`      | `SvgPropertiesHyphen`      | `SvgPropertiesFallback`      | `SvgPropertiesHyphenFallback`      |\n\nCategories:\n\n- **All** - Includes `Standard`, `Vendor`, `Obsolete` and `Svg`\n- **`Standard`** - Current properties and extends subcategories `StandardLonghand` and `StandardShorthand` _(e.g. `StandardShorthandProperties`)_\n- **`Vendor`** - Vendor prefixed properties and extends subcategories `VendorLonghand` and `VendorShorthand` _(e.g. `VendorShorthandProperties`)_\n- **`Obsolete`** - Removed or deprecated properties\n- **`Svg`** - SVG-specific properties\n\nVariations:\n\n- **Default** - JavaScript (camel) cased property names\n- **`Hyphen`** - CSS (kebab) cased property names\n- **`Fallback`** - Also accepts array of values e.g. `string | string[]`\n\n## At-rule types\n\nAt-rule interfaces with descriptors.\n\n|                      | Default        | `Hyphen`             | `Fallback`             | `HyphenFallback`             |\n| -------------------- | -------------- | -------------------- | ---------------------- | ---------------------------- |\n| **`@counter-style`** | `CounterStyle` | `CounterStyleHyphen` | `CounterStyleFallback` | `CounterStyleHyphenFallback` |\n| **`@font-face`**     | `FontFace`     | `FontFaceHyphen`     | `FontFaceFallback`     | `FontFaceHyphenFallback`     |\n| **`@page`**          | `Page`         | `PageHyphen`         | `PageFallback`         | `PageHyphenFallback`         |\n| **`@viewport`**      | `Viewport`     | `ViewportHyphen`     | `ViewportFallback`     | `ViewportHyphenFallback`     |\n\n## Pseudo types\n\nString literals of pseudo classes and pseudo elements\n\n- `Pseudos`\n\n  Extends:\n\n  - `AdvancedPseudos`\n\n    Function-like pseudos e.g. `:not(:first-child)`. The string literal contains the value excluding the parenthesis: `:not`. These are separated because they require an argument that results in infinite number of variations.\n\n  - `SimplePseudos`\n\n    Plain pseudos e.g. `:hover` that can only be **one** variation.\n\n## Usage\n\nLength defaults to `string | 0`. But it's possible to override it using generics.\n\n```ts\nimport * as CSS from 'csstype';\n\nconst style: CSS.Properties<string | number> = {\n  padding: 10,\n  margin: '1rem',\n};\n```\n\nIn some cases, like for CSS-in-JS libraries, an array of values is a way to provide fallback values in CSS. Using `CSS.PropertiesFallback` instead of `CSS.Properties` will add the possibility to use any property value as an array of values.\n\n```ts\nimport * as CSS from 'csstype';\n\nconst style: CSS.PropertiesFallback = {\n  display: ['-webkit-flex', 'flex'],\n  color: 'white',\n};\n```\n\nThere's even string literals for pseudo selectors and elements.\n\n```ts\nimport * as CSS from 'csstype';\n\nconst pseudos: { [P in CSS.SimplePseudos]?: CSS.Properties } = {\n  ':hover': {\n    display: 'flex',\n  },\n};\n```\n\nHyphen cased (kebab cased) properties are provided in `CSS.PropertiesHyphen` and `CSS.PropertiesHyphenFallback`. It's not **not** added by default in `CSS.Properties`. To allow both of them, you can simply extend with `CSS.PropertiesHyphen` or/and `CSS.PropertiesHyphenFallback`.\n\n```ts\nimport * as CSS from 'csstype';\n\ninterface Style extends CSS.Properties, CSS.PropertiesHyphen {}\n\nconst style: Style = {\n  'flex-grow': 1,\n  'flex-shrink': 0,\n  'font-weight': 'normal',\n  backgroundColor: 'white',\n};\n```\n\n## What should I do when I get type errors?\n\nThe goal is to have as perfect types as possible and we're trying to do our best. But with CSS Custom Properties, the CSS specification changing frequently and vendors implementing their own specifications with new releases sometimes causes type errors even if it should work. Here's some steps you could take to get it fixed:\n\n_If you're using CSS Custom Properties you can step directly to step 3._\n\n1.  **First of all, make sure you're doing it right.** A type error could also indicate that you're not :wink:\n\n    - Some CSS specs that some vendors has implemented could have been officially rejected or haven't yet received any official acceptance and are therefor not included\n    - If you're using TypeScript, [type widening](https://blog.mariusschulz.com/2017/02/04/typescript-2-1-literal-type-widening) could be the reason you get `Type 'string' is not assignable to...` errors\n\n2.  **Have a look in [issues](https://github.com/frenic/csstype/issues) to see if an issue already has been filed. If not, create a new one.** To help us out, please refer to any information you have found.\n3.  Fix the issue locally with **TypeScript** (Flow further down):\n\n    - The recommended way is to use **module augmentation**. Here's a few examples:\n\n      ```ts\n      // My css.d.ts file\n      import * as CSS from 'csstype';\n\n      declare module 'csstype' {\n        interface Properties {\n          // Add a missing property\n          WebkitRocketLauncher?: string;\n\n          // Add a CSS Custom Property\n          '--theme-color'?: 'black' | 'white';\n\n          // ...or allow any other property\n          [index: string]: any;\n        }\n      }\n      ```\n\n    - The alternative way is to use **type assertion**. Here's a few examples:\n\n      ```ts\n      const style: CSS.Properties = {\n        // Add a missing property\n        ['WebkitRocketLauncher' as any]: 'launching',\n\n        // Add a CSS Custom Property\n        ['--theme-color' as any]: 'black',\n      };\n      ```\n\n    Fix the issue locally with **Flow**:\n\n    - Use **type assertion**. Here's a few examples:\n\n      ```js\n      const style: $Exact<CSS.Properties<*>> = {\n        // Add a missing property\n        [('WebkitRocketLauncher': any)]: 'launching',\n\n        // Add a CSS Custom Property\n        [('--theme-color': any)]: 'black',\n      };\n      ```\n\n## Version 2.0\n\nThe casing of CSS vendor properties are changed matching the casing of prefixes in Javascript. So all of them are capitalized except for `ms`.\n\n- `msOverflowStyle` is still `msOverflowStyle`\n- `mozAppearance` is now `MozAppearance`\n- `webkitOverflowScrolling` is now `WebkitOverflowScrolling`\n\nMore info: https://www.andismith.com/blogs/2012/02/modernizr-prefixed/\n\n## Contributing\n\n**Never modify `index.d.ts` and `index.js.flow` directly. They are generated automatically and committed so that we can easily follow any change it results in.** Therefor it's important that you run `$ git config merge.ours.driver true` after you've forked and cloned. That setting prevents merge conflicts when doing rebase.\n\n### Commands\n\n- `yarn build` Generates typings and type checks them\n- `yarn watch` Runs build on each save\n- `yarn test` Runs the tests\n- `yarn lazy` Type checks, lints and formats everything\n/package.json\u0007{\n  \"name\": \"csstype\",\n  \"version\": \"2.6.9\",\n  \"main\": \"\",\n  \"types\": \"index.d.ts\",\n  \"description\": \"Strict TypeScript and Flow types for style based on MDN data\",\n  \"repository\": \"https://github.com/frenic/csstype\",\n  \"author\": \"Fredrik Nicol <fredrik.nicol@gmail.com>\",\n  \"license\": \"MIT\",\n  \"devDependencies\": {\n    \"@types/chokidar\": \"^2.1.3\",\n    \"@types/jest\": \"^24.0.21\",\n    \"@types/jsdom\": \"^12.2.4\",\n    \"@types/node\": \"^12.12.3\",\n    \"@types/prettier\": \"^1.18.3\",\n    \"chalk\": \"^2.4.2\",\n    \"chokidar\": \"^3.2.3\",\n    \"fast-glob\": \"^3.1.0\",\n    \"flow-bin\": \"^0.110.1\",\n    \"jest\": \"^24.9.0\",\n    \"jsdom\": \"^15.2.0\",\n    \"mdn-browser-compat-data\": \"git+https://github.com/mdn/browser-compat-data.git#1898331a758ceabd938ce7ac68427825a70f8d7b\",\n    \"mdn-data\": \"git+https://github.com/mdn/data.git#c3e407904413bb5c4b823ba1684cde2a3c4f11d0\",\n    \"prettier\": \"^1.18.2\",\n    \"sync-request\": \"^6.1.0\",\n    \"ts-node\": \"^8.4.1\",\n    \"tslint\": \"^5.20.0\",\n    \"tslint-config-prettier\": \"^1.18.0\",\n    \"turndown\": \"^5.0.3\",\n    \"typescript\": \"~3.6.4\"\n  },\n  \"scripts\": {\n    \"update\": \"ts-node --files update.ts\",\n    \"build\": \"ts-node --files build.ts --start\",\n    \"watch\": \"ts-node --files build.ts --watch\",\n    \"lint\": \"tslint --exclude node_modules/**/* --exclude **/*.d.ts --fix **/*.ts\",\n    \"pretty\": \"prettier --write build.ts **/*.{ts,js,json,md}\",\n    \"lazy\": \"tsc && npm run lint && npm run pretty\",\n    \"test\": \"jest --no-cache\",\n    \"typecheck\": \"tsc typecheck.ts --noEmit --pretty & flow check typecheck.js\",\n    \"prepublish\": \"tsc && npm run test && npm run build && npm run typecheck\",\n    \"rebase-build\": \"git rebase --exec \\\"yarn --ignore-scripts && yarn build && git commit -a --amend --no-verify --no-edit --allow-empty\\\"\"\n  },\n  \"files\": [\n    \"index.d.ts\",\n    \"index.js.flow\"\n  ],\n  \"keywords\": [\n    \"css\",\n    \"style\",\n    \"typescript\",\n    \"flow\",\n    \"typings\",\n    \"types\",\n    \"definitions\"\n  ]\n}\n/index.js.flow\u0000\u0004CS// @flow\nexport type StandardLonghandProperties<TLength = string | 0> = {\n  alignContent?: AlignContentProperty,\n  alignItems?: AlignItemsProperty,\n  alignSelf?: AlignSelfProperty,\n  animationDelay?: GlobalsString,\n  animationDirection?: AnimationDirectionProperty,\n  animationDuration?: GlobalsString,\n  animationFillMode?: AnimationFillModeProperty,\n  animationIterationCount?: AnimationIterationCountProperty,\n  animationName?: AnimationNameProperty,\n  animationPlayState?: AnimationPlayStateProperty,\n  animationTimingFunction?: AnimationTimingFunctionProperty,\n  appearance?: AppearanceProperty,\n  aspectRatio?: AspectRatioProperty,\n  backdropFilter?: BackdropFilterProperty,\n  backfaceVisibility?: BackfaceVisibilityProperty,\n  backgroundAttachment?: BackgroundAttachmentProperty,\n  backgroundBlendMode?: BackgroundBlendModeProperty,\n  backgroundClip?: BackgroundClipProperty,\n  backgroundColor?: BackgroundColorProperty,\n  backgroundImage?: BackgroundImageProperty,\n  backgroundOrigin?: BackgroundOriginProperty,\n  backgroundPosition?: BackgroundPositionProperty<TLength>,\n  backgroundPositionX?: BackgroundPositionXProperty<TLength>,\n  backgroundPositionY?: BackgroundPositionYProperty<TLength>,\n  backgroundRepeat?: BackgroundRepeatProperty,\n  backgroundSize?: BackgroundSizeProperty<TLength>,\n  blockOverflow?: BlockOverflowProperty,\n  blockSize?: BlockSizeProperty<TLength>,\n  borderBlockColor?: BorderBlockColorProperty,\n  borderBlockEndColor?: BorderBlockEndColorProperty,\n  borderBlockEndStyle?: BorderBlockEndStyleProperty,\n  borderBlockEndWidth?: BorderBlockEndWidthProperty<TLength>,\n  borderBlockStartColor?: BorderBlockStartColorProperty,\n  borderBlockStartStyle?: BorderBlockStartStyleProperty,\n  borderBlockStartWidth?: BorderBlockStartWidthProperty<TLength>,\n  borderBlockStyle?: BorderBlockStyleProperty,\n  borderBlockWidth?: BorderBlockWidthProperty<TLength>,\n  borderBottomColor?: BorderBottomColorProperty,\n  borderBottomLeftRadius?: BorderBottomLeftRadiusProperty<TLength>,\n  borderBottomRightRadius?: BorderBottomRightRadiusProperty<TLength>,\n  borderBottomStyle?: BorderBottomStyleProperty,\n  borderBottomWidth?: BorderBottomWidthProperty<TLength>,\n  borderCollapse?: BorderCollapseProperty,\n  borderEndEndRadius?: BorderEndEndRadiusProperty<TLength>,\n  borderEndStartRadius?: BorderEndStartRadiusProperty<TLength>,\n  borderImageOutset?: BorderImageOutsetProperty<TLength>,\n  borderImageRepeat?: BorderImageRepeatProperty,\n  borderImageSlice?: BorderImageSliceProperty,\n  borderImageSource?: BorderImageSourceProperty,\n  borderImageWidth?: BorderImageWidthProperty<TLength>,\n  borderInlineColor?: BorderInlineColorProperty,\n  borderInlineEndColor?: BorderInlineEndColorProperty,\n  borderInlineEndStyle?: BorderInlineEndStyleProperty,\n  borderInlineEndWidth?: BorderInlineEndWidthProperty<TLength>,\n  borderInlineStartColor?: BorderInlineStartColorProperty,\n  borderInlineStartStyle?: BorderInlineStartStyleProperty,\n  borderInlineStartWidth?: BorderInlineStartWidthProperty<TLength>,\n  borderInlineStyle?: BorderInlineStyleProperty,\n  borderInlineWidth?: BorderInlineWidthProperty<TLength>,\n  borderLeftColor?: BorderLeftColorProperty,\n  borderLeftStyle?: BorderLeftStyleProperty,\n  borderLeftWidth?: BorderLeftWidthProperty<TLength>,\n  borderRightColor?: BorderRightColorProperty,\n  borderRightStyle?: BorderRightStyleProperty,\n  borderRightWidth?: BorderRightWidthProperty<TLength>,\n  borderSpacing?: BorderSpacingProperty<TLength>,\n  borderStartEndRadius?: BorderStartEndRadiusProperty<TLength>,\n  borderStartStartRadius?: BorderStartStartRadiusProperty<TLength>,\n  borderTopColor?: BorderTopColorProperty,\n  borderTopLeftRadius?: BorderTopLeftRadiusProperty<TLength>,\n  borderTopRightRadius?: BorderTopRightRadiusProperty<TLength>,\n  borderTopStyle?: BorderTopStyleProperty,\n  borderTopWidth?: BorderTopWidthProperty<TLength>,\n  bottom?: BottomProperty<TLength>,\n  boxDecorationBreak?: BoxDecorationBreakProperty,\n  boxShadow?: BoxShadowProperty,\n  boxSizing?: BoxSizingProperty,\n  breakAfter?: BreakAfterProperty,\n  breakBefore?: BreakBeforeProperty,\n  breakInside?: BreakInsideProperty,\n  captionSide?: CaptionSideProperty,\n  caretColor?: CaretColorProperty,\n  clear?: ClearProperty,\n  clipPath?: ClipPathProperty,\n  color?: ColorProperty,\n  colorAdjust?: ColorAdjustProperty,\n  columnCount?: ColumnCountProperty,\n  columnFill?: ColumnFillProperty,\n  columnGap?: ColumnGapProperty<TLength>,\n  columnRuleColor?: ColumnRuleColorProperty,\n  columnRuleStyle?: ColumnRuleStyleProperty,\n  columnRuleWidth?: ColumnRuleWidthProperty<TLength>,\n  columnSpan?: ColumnSpanProperty,\n  columnWidth?: ColumnWidthProperty<TLength>,\n  contain?: ContainProperty,\n  content?: ContentProperty,\n  counterIncrement?: CounterIncrementProperty,\n  counterReset?: CounterResetProperty,\n  counterSet?: CounterSetProperty,\n  cursor?: CursorProperty,\n  direction?: DirectionProperty,\n  display?: DisplayProperty,\n  emptyCells?: EmptyCellsProperty,\n  filter?: FilterProperty,\n  flexBasis?: FlexBasisProperty<TLength>,\n  flexDirection?: FlexDirectionProperty,\n  flexGrow?: GlobalsNumber,\n  flexShrink?: GlobalsNumber,\n  flexWrap?: FlexWrapProperty,\n  float?: FloatProperty,\n  fontFamily?: FontFamilyProperty,\n  fontFeatureSettings?: FontFeatureSettingsProperty,\n  fontKerning?: FontKerningProperty,\n  fontLanguageOverride?: FontLanguageOverrideProperty,\n  fontOpticalSizing?: FontOpticalSizingProperty,\n  fontSize?: FontSizeProperty<TLength>,\n  fontSizeAdjust?: FontSizeAdjustProperty,\n  fontStretch?: FontStretchProperty,\n  fontStyle?: FontStyleProperty,\n  fontSynthesis?: FontSynthesisProperty,\n  fontVariant?: FontVariantProperty,\n  fontVariantCaps?: FontVariantCapsProperty,\n  fontVariantEastAsian?: FontVariantEastAsianProperty,\n  fontVariantLigatures?: FontVariantLigaturesProperty,\n  fontVariantNumeric?: FontVariantNumericProperty,\n  fontVariantPosition?: FontVariantPositionProperty,\n  fontVariationSettings?: FontVariationSettingsProperty,\n  fontWeight?: FontWeightProperty,\n  gridAutoColumns?: GridAutoColumnsProperty<TLength>,\n  gridAutoFlow?: GridAutoFlowProperty,\n  gridAutoRows?: GridAutoRowsProperty<TLength>,\n  gridColumnEnd?: GridColumnEndProperty,\n  gridColumnStart?: GridColumnStartProperty,\n  gridRowEnd?: GridRowEndProperty,\n  gridRowStart?: GridRowStartProperty,\n  gridTemplateAreas?: GridTemplateAreasProperty,\n  gridTemplateColumns?: GridTemplateColumnsProperty<TLength>,\n  gridTemplateRows?: GridTemplateRowsProperty<TLength>,\n  hangingPunctuation?: HangingPunctuationProperty,\n  height?: HeightProperty<TLength>,\n  hyphens?: HyphensProperty,\n  imageOrientation?: ImageOrientationProperty,\n  imageRendering?: ImageRenderingProperty,\n  imageResolution?: ImageResolutionProperty,\n  initialLetter?: InitialLetterProperty,\n  inlineSize?: InlineSizeProperty<TLength>,\n  inset?: InsetProperty<TLength>,\n  insetBlock?: InsetBlockProperty<TLength>,\n  insetBlockEnd?: InsetBlockEndProperty<TLength>,\n  insetBlockStart?: InsetBlockStartProperty<TLength>,\n  insetInline?: InsetInlineProperty<TLength>,\n  insetInlineEnd?: InsetInlineEndProperty<TLength>,\n  insetInlineStart?: InsetInlineStartProperty<TLength>,\n  isolation?: IsolationProperty,\n  justifyContent?: JustifyContentProperty,\n  justifyItems?: JustifyItemsProperty,\n  justifySelf?: JustifySelfProperty,\n  left?: LeftProperty<TLength>,\n  letterSpacing?: LetterSpacingProperty<TLength>,\n  lineBreak?: LineBreakProperty,\n  lineHeight?: LineHeightProperty<TLength>,\n  lineHeightStep?: LineHeightStepProperty<TLength>,\n  listStyleImage?: ListStyleImageProperty,\n  listStylePosition?: ListStylePositionProperty,\n  listStyleType?: ListStyleTypeProperty,\n  marginBlock?: MarginBlockProperty<TLength>,\n  marginBlockEnd?: MarginBlockEndProperty<TLength>,\n  marginBlockStart?: MarginBlockStartProperty<TLength>,\n  marginBottom?: MarginBottomProperty<TLength>,\n  marginInline?: MarginInlineProperty<TLength>,\n  marginInlineEnd?: MarginInlineEndProperty<TLength>,\n  marginInlineStart?: MarginInlineStartProperty<TLength>,\n  marginLeft?: MarginLeftProperty<TLength>,\n  marginRight?: MarginRightProperty<TLength>,\n  marginTop?: MarginTopProperty<TLength>,\n  maskBorderMode?: MaskBorderModeProperty,\n  maskBorderOutset?: MaskBorderOutsetProperty<TLength>,\n  maskBorderRepeat?: MaskBorderRepeatProperty,\n  maskBorderSlice?: MaskBorderSliceProperty,\n  maskBorderSource?: MaskBorderSourceProperty,\n  maskBorderWidth?: MaskBorderWidthProperty<TLength>,\n  maskClip?: MaskClipProperty,\n  maskComposite?: MaskCompositeProperty,\n  maskImage?: MaskImageProperty,\n  maskMode?: MaskModeProperty,\n  maskOrigin?: MaskOriginProperty,\n  maskPosition?: MaskPositionProperty<TLength>,\n  maskRepeat?: MaskRepeatProperty,\n  maskSize?: MaskSizeProperty<TLength>,\n  maskType?: MaskTypeProperty,\n  maxBlockSize?: MaxBlockSizeProperty<TLength>,\n  maxHeight?: MaxHeightProperty<TLength>,\n  maxInlineSize?: MaxInlineSizeProperty<TLength>,\n  maxLines?: MaxLinesProperty,\n  maxWidth?: MaxWidthProperty<TLength>,\n  minBlockSize?: MinBlockSizeProperty<TLength>,\n  minHeight?: MinHeightProperty<TLength>,\n  minInlineSize?: MinInlineSizeProperty<TLength>,\n  minWidth?: MinWidthProperty<TLength>,\n  mixBlendMode?: MixBlendModeProperty,\n  motionDistance?: OffsetDistanceProperty<TLength>,\n  motionPath?: OffsetPathProperty,\n  motionRotation?: OffsetRotateProperty,\n  objectFit?: ObjectFitProperty,\n  objectPosition?: ObjectPositionProperty<TLength>,\n  offsetAnchor?: OffsetAnchorProperty<TLength>,\n  offsetDistance?: OffsetDistanceProperty<TLength>,\n  offsetPath?: OffsetPathProperty,\n  offsetRotate?: OffsetRotateProperty,\n  offsetRotation?: OffsetRotateProperty,\n  opacity?: OpacityProperty,\n  order?: GlobalsNumber,\n  orphans?: GlobalsNumber,\n  outlineColor?: OutlineColorProperty,\n  outlineOffset?: OutlineOffsetProperty<TLength>,\n  outlineStyle?: OutlineStyleProperty,\n  outlineWidth?: OutlineWidthProperty<TLength>,\n  overflow?: OverflowProperty,\n  overflowAnchor?: OverflowAnchorProperty,\n  overflowBlock?: OverflowBlockProperty,\n  overflowClipBox?: OverflowClipBoxProperty,\n  overflowInline?: OverflowInlineProperty,\n  overflowWrap?: OverflowWrapProperty,\n  overflowX?: OverflowXProperty,\n  overflowY?: OverflowYProperty,\n  overscrollBehavior?: OverscrollBehaviorProperty,\n  overscrollBehaviorBlock?: OverscrollBehaviorBlockProperty,\n  overscrollBehaviorInline?: OverscrollBehaviorInlineProperty,\n  overscrollBehaviorX?: OverscrollBehaviorXProperty,\n  overscrollBehaviorY?: OverscrollBehaviorYProperty,\n  paddingBlock?: PaddingBlockProperty<TLength>,\n  paddingBlockEnd?: PaddingBlockEndProperty<TLength>,\n  paddingBlockStart?: PaddingBlockStartProperty<TLength>,\n  paddingBottom?: PaddingBottomProperty<TLength>,\n  paddingInline?: PaddingInlineProperty<TLength>,\n  paddingInlineEnd?: PaddingInlineEndProperty<TLength>,\n  paddingInlineStart?: PaddingInlineStartProperty<TLength>,\n  paddingLeft?: PaddingLeftProperty<TLength>,\n  paddingRight?: PaddingRightProperty<TLength>,\n  paddingTop?: PaddingTopProperty<TLength>,\n  pageBreakAfter?: PageBreakAfterProperty,\n  pageBreakBefore?: PageBreakBeforeProperty,\n  pageBreakInside?: PageBreakInsideProperty,\n  paintOrder?: PaintOrderProperty,\n  perspective?: PerspectiveProperty<TLength>,\n  perspectiveOrigin?: PerspectiveOriginProperty<TLength>,\n  placeContent?: PlaceContentProperty,\n  pointerEvents?: PointerEventsProperty,\n  position?: PositionProperty,\n  quotes?: QuotesProperty,\n  resize?: ResizeProperty,\n  right?: RightProperty<TLength>,\n  rotate?: RotateProperty,\n  rowGap?: RowGapProperty<TLength>,\n  rubyAlign?: RubyAlignProperty,\n  rubyMerge?: RubyMergeProperty,\n  rubyPosition?: RubyPositionProperty,\n  scale?: ScaleProperty,\n  scrollBehavior?: ScrollBehaviorProperty,\n  scrollMargin?: ScrollMarginProperty<TLength>,\n  scrollMarginBlock?: ScrollMarginBlockProperty<TLength>,\n  scrollMarginBlockEnd?: ScrollMarginBlockEndProperty<TLength>,\n  scrollMarginBlockStart?: ScrollMarginBlockStartProperty<TLength>,\n  scrollMarginBottom?: ScrollMarginBottomProperty<TLength>,\n  scrollMarginInline?: ScrollMarginInlineProperty<TLength>,\n  scrollMarginInlineEnd?: ScrollMarginInlineEndProperty<TLength>,\n  scrollMarginInlineStart?: ScrollMarginInlineStartProperty<TLength>,\n  scrollMarginLeft?: ScrollMarginLeftProperty<TLength>,\n  scrollMarginRight?: ScrollMarginRightProperty<TLength>,\n  scrollMarginTop?: ScrollMarginTopProperty<TLength>,\n  scrollPadding?: ScrollPaddingProperty<TLength>,\n  scrollPaddingBlock?: ScrollPaddingBlockProperty<TLength>,\n  scrollPaddingBlockEnd?: ScrollPaddingBlockEndProperty<TLength>,\n  scrollPaddingBlockStart?: ScrollPaddingBlockStartProperty<TLength>,\n  scrollPaddingBottom?: ScrollPaddingBottomProperty<TLength>,\n  scrollPaddingInline?: ScrollPaddingInlineProperty<TLength>,\n  scrollPaddingInlineEnd?: ScrollPaddingInlineEndProperty<TLength>,\n  scrollPaddingInlineStart?: ScrollPaddingInlineStartProperty<TLength>,\n  scrollPaddingLeft?: ScrollPaddingLeftProperty<TLength>,\n  scrollPaddingRight?: ScrollPaddingRightProperty<TLength>,\n  scrollPaddingTop?: ScrollPaddingTopProperty<TLength>,\n  scrollSnapAlign?: ScrollSnapAlignProperty,\n  scrollSnapStop?: ScrollSnapStopProperty,\n  scrollSnapType?: ScrollSnapTypeProperty,\n  scrollbarColor?: ScrollbarColorProperty,\n  scrollbarWidth?: ScrollbarWidthProperty,\n  shapeImageThreshold?: ShapeImageThresholdProperty,\n  shapeMargin?: ShapeMarginProperty<TLength>,\n  shapeOutside?: ShapeOutsideProperty,\n  tabSize?: TabSizeProperty<TLength>,\n  tableLayout?: TableLayoutProperty,\n  textAlign?: TextAlignProperty,\n  textAlignLast?: TextAlignLastProperty,\n  textCombineUpright?: TextCombineUprightProperty,\n  textDecorationColor?: TextDecorationColorProperty,\n  textDecorationLine?: TextDecorationLineProperty,\n  textDecorationSkip?: TextDecorationSkipProperty,\n  textDecorationSkipInk?: TextDecorationSkipInkProperty,\n  textDecorationStyle?: TextDecorationStyleProperty,\n  textDecorationThickness?: TextDecorationThicknessProperty<TLength>,\n  textDecorationWidth?: TextDecorationThicknessProperty<TLength>,\n  textEmphasisColor?: TextEmphasisColorProperty,\n  textEmphasisPosition?: GlobalsString,\n  textEmphasisStyle?: TextEmphasisStyleProperty,\n  textIndent?: TextIndentProperty<TLength>,\n  textJustify?: TextJustifyProperty,\n  textOrientation?: TextOrientationProperty,\n  textOverflow?: TextOverflowProperty,\n  textRendering?: TextRenderingProperty,\n  textShadow?: TextShadowProperty,\n  textSizeAdjust?: TextSizeAdjustProperty,\n  textTransform?: TextTransformProperty,\n  textUnderlineOffset?: TextUnderlineOffsetProperty<TLength>,\n  textUnderlinePosition?: TextUnderlinePositionProperty,\n  top?: TopProperty<TLength>,\n  touchAction?: TouchActionProperty,\n  transform?: TransformProperty,\n  transformBox?: TransformBoxProperty,\n  transformOrigin?: TransformOriginProperty<TLength>,\n  transformStyle?: TransformStyleProperty,\n  transitionDelay?: GlobalsString,\n  transitionDuration?: GlobalsString,\n  transitionProperty?: TransitionPropertyProperty,\n  transitionTimingFunction?: TransitionTimingFunctionProperty,\n  translate?: TranslateProperty<TLength>,\n  unicodeBidi?: UnicodeBidiProperty,\n  userSelect?: UserSelectProperty,\n  verticalAlign?: VerticalAlignProperty<TLength>,\n  visibility?: VisibilityProperty,\n  whiteSpace?: WhiteSpaceProperty,\n  widows?: GlobalsNumber,\n  width?: WidthProperty<TLength>,\n  willChange?: WillChangeProperty,\n  wordBreak?: WordBreakProperty,\n  wordSpacing?: WordSpacingProperty<TLength>,\n  wordWrap?: WordWrapProperty,\n  writingMode?: WritingModeProperty,\n  zIndex?: ZIndexProperty,\n  zoom?: ZoomProperty,\n};\n\nexport type StandardShorthandProperties<TLength = string | 0> = {\n  all?: Globals,\n  animation?: AnimationProperty,\n  background?: BackgroundProperty<TLength>,\n  border?: BorderProperty<TLength>,\n  borderBlock?: BorderBlockProperty<TLength>,\n  borderBlockEnd?: BorderBlockEndProperty<TLength>,\n  borderBlockStart?: BorderBlockStartProperty<TLength>,\n  borderBottom?: BorderBottomProperty<TLength>,\n  borderColor?: BorderColorProperty,\n  borderImage?: BorderImageProperty,\n  borderInline?: BorderInlineProperty<TLength>,\n  borderInlineEnd?: BorderInlineEndProperty<TLength>,\n  borderInlineStart?: BorderInlineStartProperty<TLength>,\n  borderLeft?: BorderLeftProperty<TLength>,\n  borderRadius?: BorderRadiusProperty<TLength>,\n  borderRight?: BorderRightProperty<TLength>,\n  borderStyle?: BorderStyleProperty,\n  borderTop?: BorderTopProperty<TLength>,\n  borderWidth?: BorderWidthProperty<TLength>,\n  columnRule?: ColumnRuleProperty<TLength>,\n  columns?: ColumnsProperty<TLength>,\n  flex?: FlexProperty<TLength>,\n  flexFlow?: FlexFlowProperty,\n  font?: FontProperty,\n  gap?: GapProperty<TLength>,\n  grid?: GridProperty,\n  gridArea?: GridAreaProperty,\n  gridColumn?: GridColumnProperty,\n  gridRow?: GridRowProperty,\n  gridTemplate?: GridTemplateProperty,\n  lineClamp?: LineClampProperty,\n  listStyle?: ListStyleProperty,\n  margin?: MarginProperty<TLength>,\n  mask?: MaskProperty<TLength>,\n  maskBorder?: MaskBorderProperty,\n  motion?: OffsetProperty<TLength>,\n  offset?: OffsetProperty<TLength>,\n  outline?: OutlineProperty<TLength>,\n  padding?: PaddingProperty<TLength>,\n  placeItems?: PlaceItemsProperty,\n  placeSelf?: PlaceSelfProperty,\n  textDecoration?: TextDecorationProperty<TLength>,\n  textEmphasis?: TextEmphasisProperty,\n  transition?: TransitionProperty,\n};\n\nexport type StandardProperties<TLength = string | 0> = StandardLonghandProperties<TLength> & StandardShorthandProperties<TLength>;\n\nexport type VendorLonghandProperties<TLength = string | 0> = {\n  MozAnimationDelay?: GlobalsString,\n  MozAnimationDirection?: AnimationDirectionProperty,\n  MozAnimationDuration?: GlobalsString,\n  MozAnimationFillMode?: AnimationFillModeProperty,\n  MozAnimationIterationCount?: AnimationIterationCountProperty,\n  MozAnimationName?: AnimationNameProperty,\n  MozAnimationPlayState?: AnimationPlayStateProperty,\n  MozAnimationTimingFunction?: AnimationTimingFunctionProperty,\n  MozAppearance?: MozAppearanceProperty,\n  MozBackfaceVisibility?: BackfaceVisibilityProperty,\n  MozBorderEndColor?: BorderInlineEndColorProperty,\n  MozBorderEndStyle?: BorderInlineEndStyleProperty,\n  MozBorderEndWidth?: BorderInlineEndWidthProperty<TLength>,\n  MozBorderStartColor?: BorderInlineStartColorProperty,\n  MozBorderStartStyle?: BorderInlineStartStyleProperty,\n  MozBoxSizing?: BoxSizingProperty,\n  MozColumnCount?: ColumnCountProperty,\n  MozColumnFill?: ColumnFillProperty,\n  MozColumnGap?: ColumnGapProperty<TLength>,\n  MozColumnRuleColor?: ColumnRuleColorProperty,\n  MozColumnRuleStyle?: ColumnRuleStyleProperty,\n  MozColumnRuleWidth?: ColumnRuleWidthProperty<TLength>,\n  MozColumnWidth?: ColumnWidthProperty<TLength>,\n  MozContextProperties?: MozContextPropertiesProperty,\n  MozFloatEdge?: MozFloatEdgeProperty,\n  MozFontFeatureSettings?: FontFeatureSettingsProperty,\n  MozFontLanguageOverride?: FontLanguageOverrideProperty,\n  MozForceBrokenImageIcon?: GlobalsNumber,\n  MozHyphens?: HyphensProperty,\n  MozImageRegion?: MozImageRegionProperty,\n  MozMarginEnd?: MarginInlineEndProperty<TLength>,\n  MozMarginStart?: MarginInlineStartProperty<TLength>,\n  MozOrient?: MozOrientProperty,\n  MozOutlineRadiusBottomleft?: MozOutlineRadiusBottomleftProperty<TLength>,\n  MozOutlineRadiusBottomright?: MozOutlineRadiusBottomrightProperty<TLength>,\n  MozOutlineRadiusTopleft?: MozOutlineRadiusTopleftProperty<TLength>,\n  MozOutlineRadiusTopright?: MozOutlineRadiusToprightProperty<TLength>,\n  MozPaddingEnd?: PaddingInlineEndProperty<TLength>,\n  MozPaddingStart?: PaddingInlineStartProperty<TLength>,\n  MozPerspective?: PerspectiveProperty<TLength>,\n  MozPerspectiveOrigin?: PerspectiveOriginProperty<TLength>,\n  MozStackSizing?: MozStackSizingProperty,\n  MozTabSize?: TabSizeProperty<TLength>,\n  MozTextSizeAdjust?: TextSizeAdjustProperty,\n  MozTransformOrigin?: TransformOriginProperty<TLength>,\n  MozTransformStyle?: TransformStyleProperty,\n  MozTransitionDelay?: GlobalsString,\n  MozTransitionDuration?: GlobalsString,\n  MozTransitionProperty?: TransitionPropertyProperty,\n  MozTransitionTimingFunction?: TransitionTimingFunctionProperty,\n  MozUserFocus?: MozUserFocusProperty,\n  MozUserModify?: MozUserModifyProperty,\n  MozUserSelect?: UserSelectProperty,\n  MozWindowDragging?: MozWindowDraggingProperty,\n  msAccelerator?: MsAcceleratorProperty,\n  msAlignSelf?: AlignSelfProperty,\n  msBlockProgression?: MsBlockProgressionProperty,\n  msContentZoomChaining?: MsContentZoomChainingProperty,\n  msContentZoomLimitMax?: GlobalsString,\n  msContentZoomLimitMin?: GlobalsString,\n  msContentZoomSnapPoints?: GlobalsString,\n  msContentZoomSnapType?: MsContentZoomSnapTypeProperty,\n  msContentZooming?: MsContentZoomingProperty,\n  msFilter?: GlobalsString,\n  msFlexDirection?: FlexDirectionProperty,\n  msFlexPositive?: GlobalsNumber,\n  msFlowFrom?: MsFlowFromProperty,\n  msFlowInto?: MsFlowIntoProperty,\n  msGridColumns?: GridAutoColumnsProperty<TLength>,\n  msGridRows?: GridAutoRowsProperty<TLength>,\n  msHighContrastAdjust?: MsHighContrastAdjustProperty,\n  msHyphenateLimitChars?: MsHyphenateLimitCharsProperty,\n  msHyphenateLimitLines?: MsHyphenateLimitLinesProperty,\n  msHyphenateLimitZone?: MsHyphenateLimitZoneProperty<TLength>,\n  msHyphens?: HyphensProperty,\n  msImeAlign?: MsImeAlignProperty,\n  msLineBreak?: LineBreakProperty,\n  msOrder?: GlobalsNumber,\n  msOverflowStyle?: MsOverflowStyleProperty,\n  msOverflowX?: OverflowXProperty,\n  msOverflowY?: OverflowYProperty,\n  msScrollChaining?: MsScrollChainingProperty,\n  msScrollLimitXMax?: MsScrollLimitXMaxProperty<TLength>,\n  msScrollLimitXMin?: MsScrollLimitXMinProperty<TLength>,\n  msScrollLimitYMax?: MsScrollLimitYMaxProperty<TLength>,\n  msScrollLimitYMin?: MsScrollLimitYMinProperty<TLength>,\n  msScrollRails?: MsScrollRailsProperty,\n  msScrollSnapPointsX?: GlobalsString,\n  msScrollSnapPointsY?: GlobalsString,\n  msScrollSnapType?: MsScrollSnapTypeProperty,\n  msScrollTranslation?: MsScrollTranslationProperty,\n  msScrollbar3dlightColor?: MsScrollbar3dlightColorProperty,\n  msScrollbarArrowColor?: MsScrollbarArrowColorProperty,\n  msScrollbarBaseColor?: MsScrollbarBaseColorProperty,\n  msScrollbarDarkshadowColor?: MsScrollbarDarkshadowColorProperty,\n  msScrollbarFaceColor?: MsScrollbarFaceColorProperty,\n  msScrollbarHighlightColor?: MsScrollbarHighlightColorProperty,\n  msScrollbarShadowColor?: MsScrollbarShadowColorProperty,\n  msTextAutospace?: MsTextAutospaceProperty,\n  msTextCombineHorizontal?: TextCombineUprightProperty,\n  msTextOverflow?: TextOverflowProperty,\n  msTouchAction?: TouchActionProperty,\n  msTouchSelect?: MsTouchSelectProperty,\n  msTransform?: TransformProperty,\n  msTransformOrigin?: TransformOriginProperty<TLength>,\n  msTransitionDelay?: GlobalsString,\n  msTransitionDuration?: GlobalsString,\n  msTransitionProperty?: TransitionPropertyProperty,\n  msTransitionTimingFunction?: TransitionTimingFunctionProperty,\n  msUserSelect?: MsUserSelectProperty,\n  msWordBreak?: WordBreakProperty,\n  msWrapFlow?: MsWrapFlowProperty,\n  msWrapMargin?: MsWrapMarginProperty<TLength>,\n  msWrapThrough?: MsWrapThroughProperty,\n  msWritingMode?: WritingModeProperty,\n  OObjectFit?: ObjectFitProperty,\n  OObjectPosition?: ObjectPositionProperty<TLength>,\n  OTabSize?: TabSizeProperty<TLength>,\n  OTextOverflow?: TextOverflowProperty,\n  OTransformOrigin?: TransformOriginProperty<TLength>,\n  WebkitAlignContent?: AlignContentProperty,\n  WebkitAlignItems?: AlignItemsProperty,\n  WebkitAlignSelf?: AlignSelfProperty,\n  WebkitAnimationDelay?: GlobalsString,\n  WebkitAnimationDirection?: AnimationDirectionProperty,\n  WebkitAnimationDuration?: GlobalsString,\n  WebkitAnimationFillMode?: AnimationFillModeProperty,\n  WebkitAnimationIterationCount?: AnimationIterationCountProperty,\n  WebkitAnimationName?: AnimationNameProperty,\n  WebkitAnimationPlayState?: AnimationPlayStateProperty,\n  WebkitAnimationTimingFunction?: AnimationTimingFunctionProperty,\n  WebkitAppearance?: WebkitAppearanceProperty,\n  WebkitBackdropFilter?: BackdropFilterProperty,\n  WebkitBackfaceVisibility?: BackfaceVisibilityProperty,\n  WebkitBackgroundClip?: BackgroundClipProperty,\n  WebkitBackgroundOrigin?: BackgroundOriginProperty,\n  WebkitBackgroundSize?: BackgroundSizeProperty<TLength>,\n  WebkitBorderBeforeColor?: WebkitBorderBeforeColorProperty,\n  WebkitBorderBeforeStyle?: WebkitBorderBeforeStyleProperty,\n  WebkitBorderBeforeWidth?: WebkitBorderBeforeWidthProperty<TLength>,\n  WebkitBorderBottomLeftRadius?: BorderBottomLeftRadiusProperty<TLength>,\n  WebkitBorderBottomRightRadius?: BorderBottomRightRadiusProperty<TLength>,\n  WebkitBorderImageSlice?: BorderImageSliceProperty,\n  WebkitBorderTopLeftRadius?: BorderTopLeftRadiusProperty<TLength>,\n  WebkitBorderTopRightRadius?: BorderTopRightRadiusProperty<TLength>,\n  WebkitBoxDecorationBreak?: BoxDecorationBreakProperty,\n  WebkitBoxReflect?: WebkitBoxReflectProperty<TLength>,\n  WebkitBoxShadow?: BoxShadowProperty,\n  WebkitBoxSizing?: BoxSizingProperty,\n  WebkitClipPath?: ClipPathProperty,\n  WebkitColorAdjust?: ColorAdjustProperty,\n  WebkitColumnCount?: ColumnCountProperty,\n  WebkitColumnFill?: ColumnFillProperty,\n  WebkitColumnGap?: ColumnGapProperty<TLength>,\n  WebkitColumnRuleColor?: ColumnRuleColorProperty,\n  WebkitColumnRuleStyle?: ColumnRuleStyleProperty,\n  WebkitColumnRuleWidth?: ColumnRuleWidthProperty<TLength>,\n  WebkitColumnSpan?: ColumnSpanProperty,\n  WebkitColumnWidth?: ColumnWidthProperty<TLength>,\n  WebkitFilter?: FilterProperty,\n  WebkitFlexBasis?: FlexBasisProperty<TLength>,\n  WebkitFlexDirection?: FlexDirectionProperty,\n  WebkitFlexGrow?: GlobalsNumber,\n  WebkitFlexShrink?: GlobalsNumber,\n  WebkitFlexWrap?: FlexWrapProperty,\n  WebkitFontFeatureSettings?: FontFeatureSettingsProperty,\n  WebkitFontKerning?: FontKerningProperty,\n  WebkitFontVariantLigatures?: FontVariantLigaturesProperty,\n  WebkitHyphens?: HyphensProperty,\n  WebkitJustifyContent?: JustifyContentProperty,\n  WebkitLineBreak?: LineBreakProperty,\n  WebkitLineClamp?: WebkitLineClampProperty,\n  WebkitMarginEnd?: MarginInlineEndProperty<TLength>,\n  WebkitMarginStart?: MarginInlineStartProperty<TLength>,\n  WebkitMaskAttachment?: WebkitMaskAttachmentProperty,\n  WebkitMaskClip?: WebkitMaskClipProperty,\n  WebkitMaskComposite?: WebkitMaskCompositeProperty,\n  WebkitMaskImage?: WebkitMaskImageProperty,\n  WebkitMaskOrigin?: WebkitMaskOriginProperty,\n  WebkitMaskPosition?: WebkitMaskPositionProperty<TLength>,\n  WebkitMaskPositionX?: WebkitMaskPositionXProperty<TLength>,\n  WebkitMaskPositionY?: WebkitMaskPositionYProperty<TLength>,\n  WebkitMaskRepeat?: WebkitMaskRepeatProperty,\n  WebkitMaskRepeatX?: WebkitMaskRepeatXProperty,\n  WebkitMaskRepeatY?: WebkitMaskRepeatYProperty,\n  WebkitMaskSize?: WebkitMaskSizeProperty<TLength>,\n  WebkitMaxInlineSize?: MaxInlineSizeProperty<TLength>,\n  WebkitOrder?: GlobalsNumber,\n  WebkitOverflowScrolling?: WebkitOverflowScrollingProperty,\n  WebkitPaddingEnd?: PaddingInlineEndProperty<TLength>,\n  WebkitPaddingStart?: PaddingInlineStartProperty<TLength>,\n  WebkitPerspective?: PerspectiveProperty<TLength>,\n  WebkitPerspectiveOrigin?: PerspectiveOriginProperty<TLength>,\n  WebkitScrollSnapType?: ScrollSnapTypeProperty,\n  WebkitShapeMargin?: ShapeMarginProperty<TLength>,\n  WebkitTapHighlightColor?: WebkitTapHighlightColorProperty,\n  WebkitTextCombine?: TextCombineUprightProperty,\n  WebkitTextDecorationColor?: TextDecorationColorProperty,\n  WebkitTextDecorationLine?: TextDecorationLineProperty,\n  WebkitTextDecorationSkip?: TextDecorationSkipProperty,\n  WebkitTextDecorationStyle?: TextDecorationStyleProperty,\n  WebkitTextEmphasisColor?: TextEmphasisColorProperty,\n  WebkitTextEmphasisPosition?: GlobalsString,\n  WebkitTextEmphasisStyle?: TextEmphasisStyleProperty,\n  WebkitTextFillColor?: WebkitTextFillColorProperty,\n  WebkitTextOrientation?: TextOrientationProperty,\n  WebkitTextSizeAdjust?: TextSizeAdjustProperty,\n  WebkitTextStrokeColor?: WebkitTextStrokeColorProperty,\n  WebkitTextStrokeWidth?: WebkitTextStrokeWidthProperty<TLength>,\n  WebkitTouchCallout?: WebkitTouchCalloutProperty,\n  WebkitTransform?: TransformProperty,\n  WebkitTransformOrigin?: TransformOriginProperty<TLength>,\n  WebkitTransformStyle?: TransformStyleProperty,\n  WebkitTransitionDelay?: GlobalsString,\n  WebkitTransitionDuration?: GlobalsString,\n  WebkitTransitionProperty?: TransitionPropertyProperty,\n  WebkitTransitionTimingFunction?: TransitionTimingFunctionProperty,\n  WebkitUserModify?: WebkitUserModifyProperty,\n  WebkitUserSelect?: UserSelectProperty,\n  WebkitWritingMode?: WritingModeProperty,\n};\n\nexport type VendorShorthandProperties<TLength = string | 0> = {\n  MozAnimation?: AnimationProperty,\n  MozBorderImage?: BorderImageProperty,\n  MozColumnRule?: ColumnRuleProperty<TLength>,\n  MozColumns?: ColumnsProperty<TLength>,\n  MozTransition?: TransitionProperty,\n  msContentZoomLimit?: GlobalsString,\n  msContentZoomSnap?: MsContentZoomSnapProperty,\n  msFlex?: FlexProperty<TLength>,\n  msScrollLimit?: GlobalsString,\n  msScrollSnapX?: GlobalsString,\n  msScrollSnapY?: GlobalsString,\n  msTransition?: TransitionProperty,\n  WebkitAnimation?: AnimationProperty,\n  WebkitBorderBefore?: WebkitBorderBeforeProperty<TLength>,\n  WebkitBorderImage?: BorderImageProperty,\n  WebkitBorderRadius?: BorderRadiusProperty<TLength>,\n  WebkitColumnRule?: ColumnRuleProperty<TLength>,\n  WebkitColumns?: ColumnsProperty<TLength>,\n  WebkitFlex?: FlexProperty<TLength>,\n  WebkitFlexFlow?: FlexFlowProperty,\n  WebkitMask?: WebkitMaskProperty<TLength>,\n  WebkitTextEmphasis?: TextEmphasisProperty,\n  WebkitTextStroke?: WebkitTextStrokeProperty<TLength>,\n  WebkitTransition?: TransitionProperty,\n};\n\nexport type VendorProperties<TLength = string | 0> = VendorLonghandProperties<TLength> & VendorShorthandProperties<TLength>;\n\nexport type ObsoleteProperties<TLength = string | 0> = {\n  boxAlign?: BoxAlignProperty,\n  boxDirection?: BoxDirectionProperty,\n  boxFlex?: GlobalsNumber,\n  boxFlexGroup?: GlobalsNumber,\n  boxLines?: BoxLinesProperty,\n  boxOrdinalGroup?: GlobalsNumber,\n  boxOrient?: BoxOrientProperty,\n  boxPack?: BoxPackProperty,\n  clip?: ClipProperty,\n  fontVariantAlternates?: FontVariantAlternatesProperty,\n  gridColumnGap?: GridColumnGapProperty<TLength>,\n  gridGap?: GridGapProperty<TLength>,\n  gridRowGap?: GridRowGapProperty<TLength>,\n  imeMode?: ImeModeProperty,\n  offsetBlock?: InsetBlockProperty<TLength>,\n  offsetBlockEnd?: InsetBlockEndProperty<TLength>,\n  offsetBlockStart?: InsetBlockStartProperty<TLength>,\n  offsetInline?: InsetInlineProperty<TLength>,\n  offsetInlineEnd?: InsetInlineEndProperty<TLength>,\n  offsetInlineStart?: InsetInlineStartProperty<TLength>,\n  scrollSnapCoordinate?: ScrollSnapCoordinateProperty<TLength>,\n  scrollSnapDestination?: ScrollSnapDestinationProperty<TLength>,\n  scrollSnapPointsX?: ScrollSnapPointsXProperty,\n  scrollSnapPointsY?: ScrollSnapPointsYProperty,\n  scrollSnapTypeX?: ScrollSnapTypeXProperty,\n  scrollSnapTypeY?: ScrollSnapTypeYProperty,\n  scrollbarTrackColor?: MsScrollbarTrackColorProperty,\n  textCombineHorizontal?: TextCombineUprightProperty,\n  KhtmlBoxAlign?: BoxAlignProperty,\n  KhtmlBoxDirection?: BoxDirectionProperty,\n  KhtmlBoxFlex?: GlobalsNumber,\n  KhtmlBoxFlexGroup?: GlobalsNumber,\n  KhtmlBoxLines?: BoxLinesProperty,\n  KhtmlBoxOrdinalGroup?: GlobalsNumber,\n  KhtmlBoxOrient?: BoxOrientProperty,\n  KhtmlBoxPack?: BoxPackProperty,\n  KhtmlLineBreak?: LineBreakProperty,\n  KhtmlOpacity?: OpacityProperty,\n  KhtmlUserSelect?: UserSelectProperty,\n  MozBackgroundClip?: BackgroundClipProperty,\n  MozBackgroundInlinePolicy?: BoxDecorationBreakProperty,\n  MozBackgroundOrigin?: BackgroundOriginProperty,\n  MozBackgroundSize?: BackgroundSizeProperty<TLength>,\n  MozBinding?: MozBindingProperty,\n  MozBorderBottomColors?: MozBorderBottomColorsProperty,\n  MozBorderLeftColors?: MozBorderLeftColorsProperty,\n  MozBorderRadius?: BorderRadiusProperty<TLength>,\n  MozBorderRadiusBottomleft?: BorderBottomLeftRadiusProperty<TLength>,\n  MozBorderRadiusBottomright?: BorderBottomRightRadiusProperty<TLength>,\n  MozBorderRadiusTopleft?: BorderTopLeftRadiusProperty<TLength>,\n  MozBorderRadiusTopright?: BorderTopRightRadiusProperty<TLength>,\n  MozBorderRightColors?: MozBorderRightColorsProperty,\n  MozBorderTopColors?: MozBorderTopColorsProperty,\n  MozBoxAlign?: BoxAlignProperty,\n  MozBoxDirection?: BoxDirectionProperty,\n  MozBoxFlex?: GlobalsNumber,\n  MozBoxOrdinalGroup?: GlobalsNumber,\n  MozBoxOrient?: BoxOrientProperty,\n  MozBoxPack?: BoxPackProperty,\n  MozBoxShadow?: BoxShadowProperty,\n  MozOpacity?: OpacityProperty,\n  MozOutline?: OutlineProperty<TLength>,\n  MozOutlineColor?: OutlineColorProperty,\n  MozOutlineRadius?: MozOutlineRadiusProperty<TLength>,\n  MozOutlineStyle?: OutlineStyleProperty,\n  MozOutlineWidth?: OutlineWidthProperty<TLength>,\n  MozTextAlignLast?: TextAlignLastProperty,\n  MozTextBlink?: MozTextBlinkProperty,\n  MozTextDecorationColor?: TextDecorationColorProperty,\n  MozTextDecorationLine?: TextDecorationLineProperty,\n  MozTextDecorationStyle?: TextDecorationStyleProperty,\n  MozUserInput?: MozUserInputProperty,\n  MozWindowShadow?: MozWindowShadowProperty,\n  msImeMode?: ImeModeProperty,\n  msScrollbarTrackColor?: MsScrollbarTrackColorProperty,\n  OAnimation?: AnimationProperty,\n  OAnimationDelay?: GlobalsString,\n  OAnimationDirection?: AnimationDirectionProperty,\n  OAnimationDuration?: GlobalsString,\n  OAnimationFillMode?: AnimationFillModeProperty,\n  OAnimationIterationCount?: AnimationIterationCountProperty,\n  OAnimationName?: AnimationNameProperty,\n  OAnimationPlayState?: AnimationPlayStateProperty,\n  OAnimationTimingFunction?: AnimationTimingFunctionProperty,\n  OBackgroundSize?: BackgroundSizeProperty<TLength>,\n  OBorderImage?: BorderImageProperty,\n  OTransform?: TransformProperty,\n  OTransition?: TransitionProperty,\n  OTransitionDelay?: GlobalsString,\n  OTransitionDuration?: GlobalsString,\n  OTransitionProperty?: TransitionPropertyProperty,\n  OTransitionTimingFunction?: TransitionTimingFunctionProperty,\n  WebkitBoxAlign?: BoxAlignProperty,\n  WebkitBoxDirection?: BoxDirectionProperty,\n  WebkitBoxFlex?: GlobalsNumber,\n  WebkitBoxFlexGroup?: GlobalsNumber,\n  WebkitBoxLines?: BoxLinesProperty,\n  WebkitBoxOrdinalGroup?: GlobalsNumber,\n  WebkitBoxOrient?: BoxOrientProperty,\n  WebkitBoxPack?: BoxPackProperty,\n  WebkitScrollSnapPointsX?: ScrollSnapPointsXProperty,\n  WebkitScrollSnapPointsY?: ScrollSnapPointsYProperty,\n};\n\nexport type SvgProperties<TLength = string | 0> = {\n  alignmentBaseline?: AlignmentBaselineProperty,\n  baselineShift?: BaselineShiftProperty<TLength>,\n  clip?: ClipProperty,\n  clipPath?: ClipPathProperty,\n  clipRule?: ClipRuleProperty,\n  color?: ColorProperty,\n  colorInterpolation?: ColorInterpolationProperty,\n  colorRendering?: ColorRenderingProperty,\n  cursor?: CursorProperty,\n  direction?: DirectionProperty,\n  display?: DisplayProperty,\n  dominantBaseline?: DominantBaselineProperty,\n  fill?: FillProperty,\n  fillOpacity?: GlobalsNumber,\n  fillRule?: FillRuleProperty,\n  filter?: FilterProperty,\n  floodColor?: FloodColorProperty,\n  floodOpacity?: GlobalsNumber,\n  font?: FontProperty,\n  fontFamily?: FontFamilyProperty,\n  fontSize?: FontSizeProperty<TLength>,\n  fontSizeAdjust?: FontSizeAdjustProperty,\n  fontStretch?: FontStretchProperty,\n  fontStyle?: FontStyleProperty,\n  fontVariant?: FontVariantProperty,\n  fontWeight?: FontWeightProperty,\n  glyphOrientationVertical?: GlyphOrientationVerticalProperty,\n  imageRendering?: ImageRenderingProperty,\n  letterSpacing?: LetterSpacingProperty<TLength>,\n  lightingColor?: LightingColorProperty,\n  lineHeight?: LineHeightProperty<TLength>,\n  marker?: MarkerProperty,\n  markerEnd?: MarkerEndProperty,\n  markerMid?: MarkerMidProperty,\n  markerStart?: MarkerStartProperty,\n  mask?: MaskProperty<TLength>,\n  opacity?: OpacityProperty,\n  overflow?: OverflowProperty,\n  paintOrder?: PaintOrderProperty,\n  pointerEvents?: PointerEventsProperty,\n  shapeRendering?: ShapeRenderingProperty,\n  stopColor?: StopColorProperty,\n  stopOpacity?: GlobalsNumber,\n  stroke?: StrokeProperty,\n  strokeDasharray?: StrokeDasharrayProperty<TLength>,\n  strokeDashoffset?: StrokeDashoffsetProperty<TLength>,\n  strokeLinecap?: StrokeLinecapProperty,\n  strokeLinejoin?: StrokeLinejoinProperty,\n  strokeMiterlimit?: GlobalsNumber,\n  strokeOpacity?: GlobalsNumber,\n  strokeWidth?: StrokeWidthProperty<TLength>,\n  textAnchor?: TextAnchorProperty,\n  textDecoration?: TextDecorationProperty<TLength>,\n  textRendering?: TextRenderingProperty,\n  unicodeBidi?: UnicodeBidiProperty,\n  vectorEffect?: VectorEffectProperty,\n  visibility?: VisibilityProperty,\n  whiteSpace?: WhiteSpaceProperty,\n  wordSpacing?: WordSpacingProperty<TLength>,\n  writingMode?: WritingModeProperty,\n};\n\nexport type Properties<TLength = string | 0> = StandardProperties<TLength> & VendorProperties<TLength> & ObsoleteProperties<TLength> & SvgProperties<TLength>;\n\nexport type StandardLonghandPropertiesHyphen<TLength = string | 0> = {\n  \"align-content\"?: AlignContentProperty,\n  \"align-items\"?: AlignItemsProperty,\n  \"align-self\"?: AlignSelfProperty,\n  \"animation-delay\"?: GlobalsString,\n  \"animation-direction\"?: AnimationDirectionProperty,\n  \"animation-duration\"?: GlobalsString,\n  \"animation-fill-mode\"?: AnimationFillModeProperty,\n  \"animation-iteration-count\"?: AnimationIterationCountProperty,\n  \"animation-name\"?: AnimationNameProperty,\n  \"animation-play-state\"?: AnimationPlayStateProperty,\n  \"animation-timing-function\"?: AnimationTimingFunctionProperty,\n  appearance?: AppearanceProperty,\n  \"aspect-ratio\"?: AspectRatioProperty,\n  \"backdrop-filter\"?: BackdropFilterProperty,\n  \"backface-visibility\"?: BackfaceVisibilityProperty,\n  \"background-attachment\"?: BackgroundAttachmentProperty,\n  \"background-blend-mode\"?: BackgroundBlendModeProperty,\n  \"background-clip\"?: BackgroundClipProperty,\n  \"background-color\"?: BackgroundColorProperty,\n  \"background-image\"?: BackgroundImageProperty,\n  \"background-origin\"?: BackgroundOriginProperty,\n  \"background-position\"?: BackgroundPositionProperty<TLength>,\n  \"background-position-x\"?: BackgroundPositionXProperty<TLength>,\n  \"background-position-y\"?: BackgroundPositionYProperty<TLength>,\n  \"background-repeat\"?: BackgroundRepeatProperty,\n  \"background-size\"?: BackgroundSizeProperty<TLength>,\n  \"block-overflow\"?: BlockOverflowProperty,\n  \"block-size\"?: BlockSizeProperty<TLength>,\n  \"border-block-color\"?: BorderBlockColorProperty,\n  \"border-block-end-color\"?: BorderBlockEndColorProperty,\n  \"border-block-end-style\"?: BorderBlockEndStyleProperty,\n  \"border-block-end-width\"?: BorderBlockEndWidthProperty<TLength>,\n  \"border-block-start-color\"?: BorderBlockStartColorProperty,\n  \"border-block-start-style\"?: BorderBlockStartStyleProperty,\n  \"border-block-start-width\"?: BorderBlockStartWidthProperty<TLength>,\n  \"border-block-style\"?: BorderBlockStyleProperty,\n  \"border-block-width\"?: BorderBlockWidthProperty<TLength>,\n  \"border-bottom-color\"?: BorderBottomColorProperty,\n  \"border-bottom-left-radius\"?: BorderBottomLeftRadiusProperty<TLength>,\n  \"border-bottom-right-radius\"?: BorderBottomRightRadiusProperty<TLength>,\n  \"border-bottom-style\"?: BorderBottomStyleProperty,\n  \"border-bottom-width\"?: BorderBottomWidthProperty<TLength>,\n  \"border-collapse\"?: BorderCollapseProperty,\n  \"border-end-end-radius\"?: BorderEndEndRadiusProperty<TLength>,\n  \"border-end-start-radius\"?: BorderEndStartRadiusProperty<TLength>,\n  \"border-image-outset\"?: BorderImageOutsetProperty<TLength>,\n  \"border-image-repeat\"?: BorderImageRepeatProperty,\n  \"border-image-slice\"?: BorderImageSliceProperty,\n  \"border-image-source\"?: BorderImageSourceProperty,\n  \"border-image-width\"?: BorderImageWidthProperty<TLength>,\n  \"border-inline-color\"?: BorderInlineColorProperty,\n  \"border-inline-end-color\"?: BorderInlineEndColorProperty,\n  \"border-inline-end-style\"?: BorderInlineEndStyleProperty,\n  \"border-inline-end-width\"?: BorderInlineEndWidthProperty<TLength>,\n  \"border-inline-start-color\"?: BorderInlineStartColorProperty,\n  \"border-inline-start-style\"?: BorderInlineStartStyleProperty,\n  \"border-inline-start-width\"?: BorderInlineStartWidthProperty<TLength>,\n  \"border-inline-style\"?: BorderInlineStyleProperty,\n  \"border-inline-width\"?: BorderInlineWidthProperty<TLength>,\n  \"border-left-color\"?: BorderLeftColorProperty,\n  \"border-left-style\"?: BorderLeftStyleProperty,\n  \"border-left-width\"?: BorderLeftWidthProperty<TLength>,\n  \"border-right-color\"?: BorderRightColorProperty,\n  \"border-right-style\"?: BorderRightStyleProperty,\n  \"border-right-width\"?: BorderRightWidthProperty<TLength>,\n  \"border-spacing\"?: BorderSpacingProperty<TLength>,\n  \"border-start-end-radius\"?: BorderStartEndRadiusProperty<TLength>,\n  \"border-start-start-radius\"?: BorderStartStartRadiusProperty<TLength>,\n  \"border-top-color\"?: BorderTopColorProperty,\n  \"border-top-left-radius\"?: BorderTopLeftRadiusProperty<TLength>,\n  \"border-top-right-radius\"?: BorderTopRightRadiusProperty<TLength>,\n  \"border-top-style\"?: BorderTopStyleProperty,\n  \"border-top-width\"?: BorderTopWidthProperty<TLength>,\n  bottom?: BottomProperty<TLength>,\n  \"box-decoration-break\"?: BoxDecorationBreakProperty,\n  \"box-shadow\"?: BoxShadowProperty,\n  \"box-sizing\"?: BoxSizingProperty,\n  \"break-after\"?: BreakAfterProperty,\n  \"break-before\"?: BreakBeforeProperty,\n  \"break-inside\"?: BreakInsideProperty,\n  \"caption-side\"?: CaptionSideProperty,\n  \"caret-color\"?: CaretColorProperty,\n  clear?: ClearProperty,\n  \"clip-path\"?: ClipPathProperty,\n  color?: ColorProperty,\n  \"color-adjust\"?: ColorAdjustProperty,\n  \"column-count\"?: ColumnCountProperty,\n  \"column-fill\"?: ColumnFillProperty,\n  \"column-gap\"?: ColumnGapProperty<TLength>,\n  \"column-rule-color\"?: ColumnRuleColorProperty,\n  \"column-rule-style\"?: ColumnRuleStyleProperty,\n  \"column-rule-width\"?: ColumnRuleWidthProperty<TLength>,\n  \"column-span\"?: ColumnSpanProperty,\n  \"column-width\"?: ColumnWidthProperty<TLength>,\n  contain?: ContainProperty,\n  content?: ContentProperty,\n  \"counter-increment\"?: CounterIncrementProperty,\n  \"counter-reset\"?: CounterResetProperty,\n  \"counter-set\"?: CounterSetProperty,\n  cursor?: CursorProperty,\n  direction?: DirectionProperty,\n  display?: DisplayProperty,\n  \"empty-cells\"?: EmptyCellsProperty,\n  filter?: FilterProperty,\n  \"flex-basis\"?: FlexBasisProperty<TLength>,\n  \"flex-direction\"?: FlexDirectionProperty,\n  \"flex-grow\"?: GlobalsNumber,\n  \"flex-shrink\"?: GlobalsNumber,\n  \"flex-wrap\"?: FlexWrapProperty,\n  float?: FloatProperty,\n  \"font-family\"?: FontFamilyProperty,\n  \"font-feature-settings\"?: FontFeatureSettingsProperty,\n  \"font-kerning\"?: FontKerningProperty,\n  \"font-language-override\"?: FontLanguageOverrideProperty,\n  \"font-optical-sizing\"?: FontOpticalSizingProperty,\n  \"font-size\"?: FontSizeProperty<TLength>,\n  \"font-size-adjust\"?: FontSizeAdjustProperty,\n  \"font-stretch\"?: FontStretchProperty,\n  \"font-style\"?: FontStyleProperty,\n  \"font-synthesis\"?: FontSynthesisProperty,\n  \"font-variant\"?: FontVariantProperty,\n  \"font-variant-caps\"?: FontVariantCapsProperty,\n  \"font-variant-east-asian\"?: FontVariantEastAsianProperty,\n  \"font-variant-ligatures\"?: FontVariantLigaturesProperty,\n  \"font-variant-numeric\"?: FontVariantNumericProperty,\n  \"font-variant-position\"?: FontVariantPositionProperty,\n  \"font-variation-settings\"?: FontVariationSettingsProperty,\n  \"font-weight\"?: FontWeightProperty,\n  \"grid-auto-columns\"?: GridAutoColumnsProperty<TLength>,\n  \"grid-auto-flow\"?: GridAutoFlowProperty,\n  \"grid-auto-rows\"?: GridAutoRowsProperty<TLength>,\n  \"grid-column-end\"?: GridColumnEndProperty,\n  \"grid-column-start\"?: GridColumnStartProperty,\n  \"grid-row-end\"?: GridRowEndProperty,\n  \"grid-row-start\"?: GridRowStartProperty,\n  \"grid-template-areas\"?: GridTemplateAreasProperty,\n  \"grid-template-columns\"?: GridTemplateColumnsProperty<TLength>,\n  \"grid-template-rows\"?: GridTemplateRowsProperty<TLength>,\n  \"hanging-punctuation\"?: HangingPunctuationProperty,\n  height?: HeightProperty<TLength>,\n  hyphens?: HyphensProperty,\n  \"image-orientation\"?: ImageOrientationProperty,\n  \"image-rendering\"?: ImageRenderingProperty,\n  \"image-resolution\"?: ImageResolutionProperty,\n  \"initial-letter\"?: InitialLetterProperty,\n  \"inline-size\"?: InlineSizeProperty<TLength>,\n  inset?: InsetProperty<TLength>,\n  \"inset-block\"?: InsetBlockProperty<TLength>,\n  \"inset-block-end\"?: InsetBlockEndProperty<TLength>,\n  \"inset-block-start\"?: InsetBlockStartProperty<TLength>,\n  \"inset-inline\"?: InsetInlineProperty<TLength>,\n  \"inset-inline-end\"?: InsetInlineEndProperty<TLength>,\n  \"inset-inline-start\"?: InsetInlineStartProperty<TLength>,\n  isolation?: IsolationProperty,\n  \"justify-content\"?: JustifyContentProperty,\n  \"justify-items\"?: JustifyItemsProperty,\n  \"justify-self\"?: JustifySelfProperty,\n  left?: LeftProperty<TLength>,\n  \"letter-spacing\"?: LetterSpacingProperty<TLength>,\n  \"line-break\"?: LineBreakProperty,\n  \"line-height\"?: LineHeightProperty<TLength>,\n  \"line-height-step\"?: LineHeightStepProperty<TLength>,\n  \"list-style-image\"?: ListStyleImageProperty,\n  \"list-style-position\"?: ListStylePositionProperty,\n  \"list-style-type\"?: ListStyleTypeProperty,\n  \"margin-block\"?: MarginBlockProperty<TLength>,\n  \"margin-block-end\"?: MarginBlockEndProperty<TLength>,\n  \"margin-block-start\"?: MarginBlockStartProperty<TLength>,\n  \"margin-bottom\"?: MarginBottomProperty<TLength>,\n  \"margin-inline\"?: MarginInlineProperty<TLength>,\n  \"margin-inline-end\"?: MarginInlineEndProperty<TLength>,\n  \"margin-inline-start\"?: MarginInlineStartProperty<TLength>,\n  \"margin-left\"?: MarginLeftProperty<TLength>,\n  \"margin-right\"?: MarginRightProperty<TLength>,\n  \"margin-top\"?: MarginTopProperty<TLength>,\n  \"mask-border-mode\"?: MaskBorderModeProperty,\n  \"mask-border-outset\"?: MaskBorderOutsetProperty<TLength>,\n  \"mask-border-repeat\"?: MaskBorderRepeatProperty,\n  \"mask-border-slice\"?: MaskBorderSliceProperty,\n  \"mask-border-source\"?: MaskBorderSourceProperty,\n  \"mask-border-width\"?: MaskBorderWidthProperty<TLength>,\n  \"mask-clip\"?: MaskClipProperty,\n  \"mask-composite\"?: MaskCompositeProperty,\n  \"mask-image\"?: MaskImageProperty,\n  \"mask-mode\"?: MaskModeProperty,\n  \"mask-origin\"?: MaskOriginProperty,\n  \"mask-position\"?: MaskPositionProperty<TLength>,\n  \"mask-repeat\"?: MaskRepeatProperty,\n  \"mask-size\"?: MaskSizeProperty<TLength>,\n  \"mask-type\"?: MaskTypeProperty,\n  \"max-block-size\"?: MaxBlockSizeProperty<TLength>,\n  \"max-height\"?: MaxHeightProperty<TLength>,\n  \"max-inline-size\"?: MaxInlineSizeProperty<TLength>,\n  \"max-lines\"?: MaxLinesProperty,\n  \"max-width\"?: MaxWidthProperty<TLength>,\n  \"min-block-size\"?: MinBlockSizeProperty<TLength>,\n  \"min-height\"?: MinHeightProperty<TLength>,\n  \"min-inline-size\"?: MinInlineSizeProperty<TLength>,\n  \"min-width\"?: MinWidthProperty<TLength>,\n  \"mix-blend-mode\"?: MixBlendModeProperty,\n  \"motion-distance\"?: OffsetDistanceProperty<TLength>,\n  \"motion-path\"?: OffsetPathProperty,\n  \"motion-rotation\"?: OffsetRotateProperty,\n  \"object-fit\"?: ObjectFitProperty,\n  \"object-position\"?: ObjectPositionProperty<TLength>,\n  \"offset-anchor\"?: OffsetAnchorProperty<TLength>,\n  \"offset-distance\"?: OffsetDistanceProperty<TLength>,\n  \"offset-path\"?: OffsetPathProperty,\n  \"offset-rotate\"?: OffsetRotateProperty,\n  \"offset-rotation\"?: OffsetRotateProperty,\n  opacity?: OpacityProperty,\n  order?: GlobalsNumber,\n  orphans?: GlobalsNumber,\n  \"outline-color\"?: OutlineColorProperty,\n  \"outline-offset\"?: OutlineOffsetProperty<TLength>,\n  \"outline-style\"?: OutlineStyleProperty,\n  \"outline-width\"?: OutlineWidthProperty<TLength>,\n  overflow?: OverflowProperty,\n  \"overflow-anchor\"?: OverflowAnchorProperty,\n  \"overflow-block\"?: OverflowBlockProperty,\n  \"overflow-clip-box\"?: OverflowClipBoxProperty,\n  \"overflow-inline\"?: OverflowInlineProperty,\n  \"overflow-wrap\"?: OverflowWrapProperty,\n  \"overflow-x\"?: OverflowXProperty,\n  \"overflow-y\"?: OverflowYProperty,\n  \"overscroll-behavior\"?: OverscrollBehaviorProperty,\n  \"overscroll-behavior-block\"?: OverscrollBehaviorBlockProperty,\n  \"overscroll-behavior-inline\"?: OverscrollBehaviorInlineProperty,\n  \"overscroll-behavior-x\"?: OverscrollBehaviorXProperty,\n  \"overscroll-behavior-y\"?: OverscrollBehaviorYProperty,\n  \"padding-block\"?: PaddingBlockProperty<TLength>,\n  \"padding-block-end\"?: PaddingBlockEndProperty<TLength>,\n  \"padding-block-start\"?: PaddingBlockStartProperty<TLength>,\n  \"padding-bottom\"?: PaddingBottomProperty<TLength>,\n  \"padding-inline\"?: PaddingInlineProperty<TLength>,\n  \"padding-inline-end\"?: PaddingInlineEndProperty<TLength>,\n  \"padding-inline-start\"?: PaddingInlineStartProperty<TLength>,\n  \"padding-left\"?: PaddingLeftProperty<TLength>,\n  \"padding-right\"?: PaddingRightProperty<TLength>,\n  \"padding-top\"?: PaddingTopProperty<TLength>,\n  \"page-break-after\"?: PageBreakAfterProperty,\n  \"page-break-before\"?: PageBreakBeforeProperty,\n  \"page-break-inside\"?: PageBreakInsideProperty,\n  \"paint-order\"?: PaintOrderProperty,\n  perspective?: PerspectiveProperty<TLength>,\n  \"perspective-origin\"?: PerspectiveOriginProperty<TLength>,\n  \"place-content\"?: PlaceContentProperty,\n  \"pointer-events\"?: PointerEventsProperty,\n  position?: PositionProperty,\n  quotes?: QuotesProperty,\n  resize?: ResizeProperty,\n  right?: RightProperty<TLength>,\n  rotate?: RotateProperty,\n  \"row-gap\"?: RowGapProperty<TLength>,\n  \"ruby-align\"?: RubyAlignProperty,\n  \"ruby-merge\"?: RubyMergeProperty,\n  \"ruby-position\"?: RubyPositionProperty,\n  scale?: ScaleProperty,\n  \"scroll-behavior\"?: ScrollBehaviorProperty,\n  \"scroll-margin\"?: ScrollMarginProperty<TLength>,\n  \"scroll-margin-block\"?: ScrollMarginBlockProperty<TLength>,\n  \"scroll-margin-block-end\"?: ScrollMarginBlockEndProperty<TLength>,\n  \"scroll-margin-block-start\"?: ScrollMarginBlockStartProperty<TLength>,\n  \"scroll-margin-bottom\"?: ScrollMarginBottomProperty<TLength>,\n  \"scroll-margin-inline\"?: ScrollMarginInlineProperty<TLength>,\n  \"scroll-margin-inline-end\"?: ScrollMarginInlineEndProperty<TLength>,\n  \"scroll-margin-inline-start\"?: ScrollMarginInlineStartProperty<TLength>,\n  \"scroll-margin-left\"?: ScrollMarginLeftProperty<TLength>,\n  \"scroll-margin-right\"?: ScrollMarginRightProperty<TLength>,\n  \"scroll-margin-top\"?: ScrollMarginTopProperty<TLength>,\n  \"scroll-padding\"?: ScrollPaddingProperty<TLength>,\n  \"scroll-padding-block\"?: ScrollPaddingBlockProperty<TLength>,\n  \"scroll-padding-block-end\"?: ScrollPaddingBlockEndProperty<TLength>,\n  \"scroll-padding-block-start\"?: ScrollPaddingBlockStartProperty<TLength>,\n  \"scroll-padding-bottom\"?: ScrollPaddingBottomProperty<TLength>,\n  \"scroll-padding-inline\"?: ScrollPaddingInlineProperty<TLength>,\n  \"scroll-padding-inline-end\"?: ScrollPaddingInlineEndProperty<TLength>,\n  \"scroll-padding-inline-start\"?: ScrollPaddingInlineStartProperty<TLength>,\n  \"scroll-padding-left\"?: ScrollPaddingLeftProperty<TLength>,\n  \"scroll-padding-right\"?: ScrollPaddingRightProperty<TLength>,\n  \"scroll-padding-top\"?: ScrollPaddingTopProperty<TLength>,\n  \"scroll-snap-align\"?: ScrollSnapAlignProperty,\n  \"scroll-snap-stop\"?: ScrollSnapStopProperty,\n  \"scroll-snap-type\"?: ScrollSnapTypeProperty,\n  \"scrollbar-color\"?: ScrollbarColorProperty,\n  \"scrollbar-width\"?: ScrollbarWidthProperty,\n  \"shape-image-threshold\"?: ShapeImageThresholdProperty,\n  \"shape-margin\"?: ShapeMarginProperty<TLength>,\n  \"shape-outside\"?: ShapeOutsideProperty,\n  \"tab-size\"?: TabSizeProperty<TLength>,\n  \"table-layout\"?: TableLayoutProperty,\n  \"text-align\"?: TextAlignProperty,\n  \"text-align-last\"?: TextAlignLastProperty,\n  \"text-combine-upright\"?: TextCombineUprightProperty,\n  \"text-decoration-color\"?: TextDecorationColorProperty,\n  \"text-decoration-line\"?: TextDecorationLineProperty,\n  \"text-decoration-skip\"?: TextDecorationSkipProperty,\n  \"text-decoration-skip-ink\"?: TextDecorationSkipInkProperty,\n  \"text-decoration-style\"?: TextDecorationStyleProperty,\n  \"text-decoration-thickness\"?: TextDecorationThicknessProperty<TLength>,\n  \"text-decoration-width\"?: TextDecorationThicknessProperty<TLength>,\n  \"text-emphasis-color\"?: TextEmphasisColorProperty,\n  \"text-emphasis-position\"?: GlobalsString,\n  \"text-emphasis-style\"?: TextEmphasisStyleProperty,\n  \"text-indent\"?: TextIndentProperty<TLength>,\n  \"text-justify\"?: TextJustifyProperty,\n  \"text-orientation\"?: TextOrientationProperty,\n  \"text-overflow\"?: TextOverflowProperty,\n  \"text-rendering\"?: TextRenderingProperty,\n  \"text-shadow\"?: TextShadowProperty,\n  \"text-size-adjust\"?: TextSizeAdjustProperty,\n  \"text-transform\"?: TextTransformProperty,\n  \"text-underline-offset\"?: TextUnderlineOffsetProperty<TLength>,\n  \"text-underline-position\"?: TextUnderlinePositionProperty,\n  top?: TopProperty<TLength>,\n  \"touch-action\"?: TouchActionProperty,\n  transform?: TransformProperty,\n  \"transform-box\"?: TransformBoxProperty,\n  \"transform-origin\"?: TransformOriginProperty<TLength>,\n  \"transform-style\"?: TransformStyleProperty,\n  \"transition-delay\"?: GlobalsString,\n  \"transition-duration\"?: GlobalsString,\n  \"transition-property\"?: TransitionPropertyProperty,\n  \"transition-timing-function\"?: TransitionTimingFunctionProperty,\n  translate?: TranslateProperty<TLength>,\n  \"unicode-bidi\"?: UnicodeBidiProperty,\n  \"user-select\"?: UserSelectProperty,\n  \"vertical-align\"?: VerticalAlignProperty<TLength>,\n  visibility?: VisibilityProperty,\n  \"white-space\"?: WhiteSpaceProperty,\n  widows?: GlobalsNumber,\n  width?: WidthProperty<TLength>,\n  \"will-change\"?: WillChangeProperty,\n  \"word-break\"?: WordBreakProperty,\n  \"word-spacing\"?: WordSpacingProperty<TLength>,\n  \"word-wrap\"?: WordWrapProperty,\n  \"writing-mode\"?: WritingModeProperty,\n  \"z-index\"?: ZIndexProperty,\n  zoom?: ZoomProperty,\n};\n\nexport type StandardShorthandPropertiesHyphen<TLength = string | 0> = {\n  all?: Globals,\n  animation?: AnimationProperty,\n  background?: BackgroundProperty<TLength>,\n  border?: BorderProperty<TLength>,\n  \"border-block\"?: BorderBlockProperty<TLength>,\n  \"border-block-end\"?: BorderBlockEndProperty<TLength>,\n  \"border-block-start\"?: BorderBlockStartProperty<TLength>,\n  \"border-bottom\"?: BorderBottomProperty<TLength>,\n  \"border-color\"?: BorderColorProperty,\n  \"border-image\"?: BorderImageProperty,\n  \"border-inline\"?: BorderInlineProperty<TLength>,\n  \"border-inline-end\"?: BorderInlineEndProperty<TLength>,\n  \"border-inline-start\"?: BorderInlineStartProperty<TLength>,\n  \"border-left\"?: BorderLeftProperty<TLength>,\n  \"border-radius\"?: BorderRadiusProperty<TLength>,\n  \"border-right\"?: BorderRightProperty<TLength>,\n  \"border-style\"?: BorderStyleProperty,\n  \"border-top\"?: BorderTopProperty<TLength>,\n  \"border-width\"?: BorderWidthProperty<TLength>,\n  \"column-rule\"?: ColumnRuleProperty<TLength>,\n  columns?: ColumnsProperty<TLength>,\n  flex?: FlexProperty<TLength>,\n  \"flex-flow\"?: FlexFlowProperty,\n  font?: FontProperty,\n  gap?: GapProperty<TLength>,\n  grid?: GridProperty,\n  \"grid-area\"?: GridAreaProperty,\n  \"grid-column\"?: GridColumnProperty,\n  \"grid-row\"?: GridRowProperty,\n  \"grid-template\"?: GridTemplateProperty,\n  \"line-clamp\"?: LineClampProperty,\n  \"list-style\"?: ListStyleProperty,\n  margin?: MarginProperty<TLength>,\n  mask?: MaskProperty<TLength>,\n  \"mask-border\"?: MaskBorderProperty,\n  motion?: OffsetProperty<TLength>,\n  offset?: OffsetProperty<TLength>,\n  outline?: OutlineProperty<TLength>,\n  padding?: PaddingProperty<TLength>,\n  \"place-items\"?: PlaceItemsProperty,\n  \"place-self\"?: PlaceSelfProperty,\n  \"text-decoration\"?: TextDecorationProperty<TLength>,\n  \"text-emphasis\"?: TextEmphasisProperty,\n  transition?: TransitionProperty,\n};\n\nexport type StandardPropertiesHyphen<TLength = string | 0> = StandardLonghandPropertiesHyphen<TLength> & StandardShorthandPropertiesHyphen<TLength>;\n\nexport type VendorLonghandPropertiesHyphen<TLength = string | 0> = {\n  \"-moz-animation-delay\"?: GlobalsString,\n  \"-moz-animation-direction\"?: AnimationDirectionProperty,\n  \"-moz-animation-duration\"?: GlobalsString,\n  \"-moz-animation-fill-mode\"?: AnimationFillModeProperty,\n  \"-moz-animation-iteration-count\"?: AnimationIterationCountProperty,\n  \"-moz-animation-name\"?: AnimationNameProperty,\n  \"-moz-animation-play-state\"?: AnimationPlayStateProperty,\n  \"-moz-animation-timing-function\"?: AnimationTimingFunctionProperty,\n  \"-moz-appearance\"?: MozAppearanceProperty,\n  \"-moz-backface-visibility\"?: BackfaceVisibilityProperty,\n  \"-moz-border-end-color\"?: BorderInlineEndColorProperty,\n  \"-moz-border-end-style\"?: BorderInlineEndStyleProperty,\n  \"-moz-border-end-width\"?: BorderInlineEndWidthProperty<TLength>,\n  \"-moz-border-start-color\"?: BorderInlineStartColorProperty,\n  \"-moz-border-start-style\"?: BorderInlineStartStyleProperty,\n  \"-moz-box-sizing\"?: BoxSizingProperty,\n  \"-moz-column-count\"?: ColumnCountProperty,\n  \"-moz-column-fill\"?: ColumnFillProperty,\n  \"-moz-column-gap\"?: ColumnGapProperty<TLength>,\n  \"-moz-column-rule-color\"?: ColumnRuleColorProperty,\n  \"-moz-column-rule-style\"?: ColumnRuleStyleProperty,\n  \"-moz-column-rule-width\"?: ColumnRuleWidthProperty<TLength>,\n  \"-moz-column-width\"?: ColumnWidthProperty<TLength>,\n  \"-moz-context-properties\"?: MozContextPropertiesProperty,\n  \"-moz-float-edge\"?: MozFloatEdgeProperty,\n  \"-moz-font-feature-settings\"?: FontFeatureSettingsProperty,\n  \"-moz-font-language-override\"?: FontLanguageOverrideProperty,\n  \"-moz-force-broken-image-icon\"?: GlobalsNumber,\n  \"-moz-hyphens\"?: HyphensProperty,\n  \"-moz-image-region\"?: MozImageRegionProperty,\n  \"-moz-margin-end\"?: MarginInlineEndProperty<TLength>,\n  \"-moz-margin-start\"?: MarginInlineStartProperty<TLength>,\n  \"-moz-orient\"?: MozOrientProperty,\n  \"-moz-outline-radius-bottomleft\"?: MozOutlineRadiusBottomleftProperty<TLength>,\n  \"-moz-outline-radius-bottomright\"?: MozOutlineRadiusBottomrightProperty<TLength>,\n  \"-moz-outline-radius-topleft\"?: MozOutlineRadiusTopleftProperty<TLength>,\n  \"-moz-outline-radius-topright\"?: MozOutlineRadiusToprightProperty<TLength>,\n  \"-moz-padding-end\"?: PaddingInlineEndProperty<TLength>,\n  \"-moz-padding-start\"?: PaddingInlineStartProperty<TLength>,\n  \"-moz-perspective\"?: PerspectiveProperty<TLength>,\n  \"-moz-perspective-origin\"?: PerspectiveOriginProperty<TLength>,\n  \"-moz-stack-sizing\"?: MozStackSizingProperty,\n  \"-moz-tab-size\"?: TabSizeProperty<TLength>,\n  \"-moz-text-size-adjust\"?: TextSizeAdjustProperty,\n  \"-moz-transform-origin\"?: TransformOriginProperty<TLength>,\n  \"-moz-transform-style\"?: TransformStyleProperty,\n  \"-moz-transition-delay\"?: GlobalsString,\n  \"-moz-transition-duration\"?: GlobalsString,\n  \"-moz-transition-property\"?: TransitionPropertyProperty,\n  \"-moz-transition-timing-function\"?: TransitionTimingFunctionProperty,\n  \"-moz-user-focus\"?: MozUserFocusProperty,\n  \"-moz-user-modify\"?: MozUserModifyProperty,\n  \"-moz-user-select\"?: UserSelectProperty,\n  \"-moz-window-dragging\"?: MozWindowDraggingProperty,\n  \"-ms-accelerator\"?: MsAcceleratorProperty,\n  \"-ms-align-self\"?: AlignSelfProperty,\n  \"-ms-block-progression\"?: MsBlockProgressionProperty,\n  \"-ms-content-zoom-chaining\"?: MsContentZoomChainingProperty,\n  \"-ms-content-zoom-limit-max\"?: GlobalsString,\n  \"-ms-content-zoom-limit-min\"?: GlobalsString,\n  \"-ms-content-zoom-snap-points\"?: GlobalsString,\n  \"-ms-content-zoom-snap-type\"?: MsContentZoomSnapTypeProperty,\n  \"-ms-content-zooming\"?: MsContentZoomingProperty,\n  \"-ms-filter\"?: GlobalsString,\n  \"-ms-flex-direction\"?: FlexDirectionProperty,\n  \"-ms-flex-positive\"?: GlobalsNumber,\n  \"-ms-flow-from\"?: MsFlowFromProperty,\n  \"-ms-flow-into\"?: MsFlowIntoProperty,\n  \"-ms-grid-columns\"?: GridAutoColumnsProperty<TLength>,\n  \"-ms-grid-rows\"?: GridAutoRowsProperty<TLength>,\n  \"-ms-high-contrast-adjust\"?: MsHighContrastAdjustProperty,\n  \"-ms-hyphenate-limit-chars\"?: MsHyphenateLimitCharsProperty,\n  \"-ms-hyphenate-limit-lines\"?: MsHyphenateLimitLinesProperty,\n  \"-ms-hyphenate-limit-zone\"?: MsHyphenateLimitZoneProperty<TLength>,\n  \"-ms-hyphens\"?: HyphensProperty,\n  \"-ms-ime-align\"?: MsImeAlignProperty,\n  \"-ms-line-break\"?: LineBreakProperty,\n  \"-ms-order\"?: GlobalsNumber,\n  \"-ms-overflow-style\"?: MsOverflowStyleProperty,\n  \"-ms-overflow-x\"?: OverflowXProperty,\n  \"-ms-overflow-y\"?: OverflowYProperty,\n  \"-ms-scroll-chaining\"?: MsScrollChainingProperty,\n  \"-ms-scroll-limit-x-max\"?: MsScrollLimitXMaxProperty<TLength>,\n  \"-ms-scroll-limit-x-min\"?: MsScrollLimitXMinProperty<TLength>,\n  \"-ms-scroll-limit-y-max\"?: MsScrollLimitYMaxProperty<TLength>,\n  \"-ms-scroll-limit-y-min\"?: MsScrollLimitYMinProperty<TLength>,\n  \"-ms-scroll-rails\"?: MsScrollRailsProperty,\n  \"-ms-scroll-snap-points-x\"?: GlobalsString,\n  \"-ms-scroll-snap-points-y\"?: GlobalsString,\n  \"-ms-scroll-snap-type\"?: MsScrollSnapTypeProperty,\n  \"-ms-scroll-translation\"?: MsScrollTranslationProperty,\n  \"-ms-scrollbar-3dlight-color\"?: MsScrollbar3dlightColorProperty,\n  \"-ms-scrollbar-arrow-color\"?: MsScrollbarArrowColorProperty,\n  \"-ms-scrollbar-base-color\"?: MsScrollbarBaseColorProperty,\n  \"-ms-scrollbar-darkshadow-color\"?: MsScrollbarDarkshadowColorProperty,\n  \"-ms-scrollbar-face-color\"?: MsScrollbarFaceColorProperty,\n  \"-ms-scrollbar-highlight-color\"?: MsScrollbarHighlightColorProperty,\n  \"-ms-scrollbar-shadow-color\"?: MsScrollbarShadowColorProperty,\n  \"-ms-text-autospace\"?: MsTextAutospaceProperty,\n  \"-ms-text-combine-horizontal\"?: TextCombineUprightProperty,\n  \"-ms-text-overflow\"?: TextOverflowProperty,\n  \"-ms-touch-action\"?: TouchActionProperty,\n  \"-ms-touch-select\"?: MsTouchSelectProperty,\n  \"-ms-transform\"?: TransformProperty,\n  \"-ms-transform-origin\"?: TransformOriginProperty<TLength>,\n  \"-ms-transition-delay\"?: GlobalsString,\n  \"-ms-transition-duration\"?: GlobalsString,\n  \"-ms-transition-property\"?: TransitionPropertyProperty,\n  \"-ms-transition-timing-function\"?: TransitionTimingFunctionProperty,\n  \"-ms-user-select\"?: MsUserSelectProperty,\n  \"-ms-word-break\"?: WordBreakProperty,\n  \"-ms-wrap-flow\"?: MsWrapFlowProperty,\n  \"-ms-wrap-margin\"?: MsWrapMarginProperty<TLength>,\n  \"-ms-wrap-through\"?: MsWrapThroughProperty,\n  \"-ms-writing-mode\"?: WritingModeProperty,\n  \"-o-object-fit\"?: ObjectFitProperty,\n  \"-o-object-position\"?: ObjectPositionProperty<TLength>,\n  \"-o-tab-size\"?: TabSizeProperty<TLength>,\n  \"-o-text-overflow\"?: TextOverflowProperty,\n  \"-o-transform-origin\"?: TransformOriginProperty<TLength>,\n  \"-webkit-align-content\"?: AlignContentProperty,\n  \"-webkit-align-items\"?: AlignItemsProperty,\n  \"-webkit-align-self\"?: AlignSelfProperty,\n  \"-webkit-animation-delay\"?: GlobalsString,\n  \"-webkit-animation-direction\"?: AnimationDirectionProperty,\n  \"-webkit-animation-duration\"?: GlobalsString,\n  \"-webkit-animation-fill-mode\"?: AnimationFillModeProperty,\n  \"-webkit-animation-iteration-count\"?: AnimationIterationCountProperty,\n  \"-webkit-animation-name\"?: AnimationNameProperty,\n  \"-webkit-animation-play-state\"?: AnimationPlayStateProperty,\n  \"-webkit-animation-timing-function\"?: AnimationTimingFunctionProperty,\n  \"-webkit-appearance\"?: WebkitAppearanceProperty,\n  \"-webkit-backdrop-filter\"?: BackdropFilterProperty,\n  \"-webkit-backface-visibility\"?: BackfaceVisibilityProperty,\n  \"-webkit-background-clip\"?: BackgroundClipProperty,\n  \"-webkit-background-origin\"?: BackgroundOriginProperty,\n  \"-webkit-background-size\"?: BackgroundSizeProperty<TLength>,\n  \"-webkit-border-before-color\"?: WebkitBorderBeforeColorProperty,\n  \"-webkit-border-before-style\"?: WebkitBorderBeforeStyleProperty,\n  \"-webkit-border-before-width\"?: WebkitBorderBeforeWidthProperty<TLength>,\n  \"-webkit-border-bottom-left-radius\"?: BorderBottomLeftRadiusProperty<TLength>,\n  \"-webkit-border-bottom-right-radius\"?: BorderBottomRightRadiusProperty<TLength>,\n  \"-webkit-border-image-slice\"?: BorderImageSliceProperty,\n  \"-webkit-border-top-left-radius\"?: BorderTopLeftRadiusProperty<TLength>,\n  \"-webkit-border-top-right-radius\"?: BorderTopRightRadiusProperty<TLength>,\n  \"-webkit-box-decoration-break\"?: BoxDecorationBreakProperty,\n  \"-webkit-box-reflect\"?: WebkitBoxReflectProperty<TLength>,\n  \"-webkit-box-shadow\"?: BoxShadowProperty,\n  \"-webkit-box-sizing\"?: BoxSizingProperty,\n  \"-webkit-clip-path\"?: ClipPathProperty,\n  \"-webkit-color-adjust\"?: ColorAdjustProperty,\n  \"-webkit-column-count\"?: ColumnCountProperty,\n  \"-webkit-column-fill\"?: ColumnFillProperty,\n  \"-webkit-column-gap\"?: ColumnGapProperty<TLength>,\n  \"-webkit-column-rule-color\"?: ColumnRuleColorProperty,\n  \"-webkit-column-rule-style\"?: ColumnRuleStyleProperty,\n  \"-webkit-column-rule-width\"?: ColumnRuleWidthProperty<TLength>,\n  \"-webkit-column-span\"?: ColumnSpanProperty,\n  \"-webkit-column-width\"?: ColumnWidthProperty<TLength>,\n  \"-webkit-filter\"?: FilterProperty,\n  \"-webkit-flex-basis\"?: FlexBasisProperty<TLength>,\n  \"-webkit-flex-direction\"?: FlexDirectionProperty,\n  \"-webkit-flex-grow\"?: GlobalsNumber,\n  \"-webkit-flex-shrink\"?: GlobalsNumber,\n  \"-webkit-flex-wrap\"?: FlexWrapProperty,\n  \"-webkit-font-feature-settings\"?: FontFeatureSettingsProperty,\n  \"-webkit-font-kerning\"?: FontKerningProperty,\n  \"-webkit-font-variant-ligatures\"?: FontVariantLigaturesProperty,\n  \"-webkit-hyphens\"?: HyphensProperty,\n  \"-webkit-justify-content\"?: JustifyContentProperty,\n  \"-webkit-line-break\"?: LineBreakProperty,\n  \"-webkit-line-clamp\"?: WebkitLineClampProperty,\n  \"-webkit-margin-end\"?: MarginInlineEndProperty<TLength>,\n  \"-webkit-margin-start\"?: MarginInlineStartProperty<TLength>,\n  \"-webkit-mask-attachment\"?: WebkitMaskAttachmentProperty,\n  \"-webkit-mask-clip\"?: WebkitMaskClipProperty,\n  \"-webkit-mask-composite\"?: WebkitMaskCompositeProperty,\n  \"-webkit-mask-image\"?: WebkitMaskImageProperty,\n  \"-webkit-mask-origin\"?: WebkitMaskOriginProperty,\n  \"-webkit-mask-position\"?: WebkitMaskPositionProperty<TLength>,\n  \"-webkit-mask-position-x\"?: WebkitMaskPositionXProperty<TLength>,\n  \"-webkit-mask-position-y\"?: WebkitMaskPositionYProperty<TLength>,\n  \"-webkit-mask-repeat\"?: WebkitMaskRepeatProperty,\n  \"-webkit-mask-repeat-x\"?: WebkitMaskRepeatXProperty,\n  \"-webkit-mask-repeat-y\"?: WebkitMaskRepeatYProperty,\n  \"-webkit-mask-size\"?: WebkitMaskSizeProperty<TLength>,\n  \"-webkit-max-inline-size\"?: MaxInlineSizeProperty<TLength>,\n  \"-webkit-order\"?: GlobalsNumber,\n  \"-webkit-overflow-scrolling\"?: WebkitOverflowScrollingProperty,\n  \"-webkit-padding-end\"?: PaddingInlineEndProperty<TLength>,\n  \"-webkit-padding-start\"?: PaddingInlineStartProperty<TLength>,\n  \"-webkit-perspective\"?: PerspectiveProperty<TLength>,\n  \"-webkit-perspective-origin\"?: PerspectiveOriginProperty<TLength>,\n  \"-webkit-scroll-snap-type\"?: ScrollSnapTypeProperty,\n  \"-webkit-shape-margin\"?: ShapeMarginProperty<TLength>,\n  \"-webkit-tap-highlight-color\"?: WebkitTapHighlightColorProperty,\n  \"-webkit-text-combine\"?: TextCombineUprightProperty,\n  \"-webkit-text-decoration-color\"?: TextDecorationColorProperty,\n  \"-webkit-text-decoration-line\"?: TextDecorationLineProperty,\n  \"-webkit-text-decoration-skip\"?: TextDecorationSkipProperty,\n  \"-webkit-text-decoration-style\"?: TextDecorationStyleProperty,\n  \"-webkit-text-emphasis-color\"?: TextEmphasisColorProperty,\n  \"-webkit-text-emphasis-position\"?: GlobalsString,\n  \"-webkit-text-emphasis-style\"?: TextEmphasisStyleProperty,\n  \"-webkit-text-fill-color\"?: WebkitTextFillColorProperty,\n  \"-webkit-text-orientation\"?: TextOrientationProperty,\n  \"-webkit-text-size-adjust\"?: TextSizeAdjustProperty,\n  \"-webkit-text-stroke-color\"?: WebkitTextStrokeColorProperty,\n  \"-webkit-text-stroke-width\"?: WebkitTextStrokeWidthProperty<TLength>,\n  \"-webkit-touch-callout\"?: WebkitTouchCalloutProperty,\n  \"-webkit-transform\"?: TransformProperty,\n  \"-webkit-transform-origin\"?: TransformOriginProperty<TLength>,\n  \"-webkit-transform-style\"?: TransformStyleProperty,\n  \"-webkit-transition-delay\"?: GlobalsString,\n  \"-webkit-transition-duration\"?: GlobalsString,\n  \"-webkit-transition-property\"?: TransitionPropertyProperty,\n  \"-webkit-transition-timing-function\"?: TransitionTimingFunctionProperty,\n  \"-webkit-user-modify\"?: WebkitUserModifyProperty,\n  \"-webkit-user-select\"?: UserSelectProperty,\n  \"-webkit-writing-mode\"?: WritingModeProperty,\n};\n\nexport type VendorShorthandPropertiesHyphen<TLength = string | 0> = {\n  \"-moz-animation\"?: AnimationProperty,\n  \"-moz-border-image\"?: BorderImageProperty,\n  \"-moz-column-rule\"?: ColumnRuleProperty<TLength>,\n  \"-moz-columns\"?: ColumnsProperty<TLength>,\n  \"-moz-transition\"?: TransitionProperty,\n  \"-ms-content-zoom-limit\"?: GlobalsString,\n  \"-ms-content-zoom-snap\"?: MsContentZoomSnapProperty,\n  \"-ms-flex\"?: FlexProperty<TLength>,\n  \"-ms-scroll-limit\"?: GlobalsString,\n  \"-ms-scroll-snap-x\"?: GlobalsString,\n  \"-ms-scroll-snap-y\"?: GlobalsString,\n  \"-ms-transition\"?: TransitionProperty,\n  \"-webkit-animation\"?: AnimationProperty,\n  \"-webkit-border-before\"?: WebkitBorderBeforeProperty<TLength>,\n  \"-webkit-border-image\"?: BorderImageProperty,\n  \"-webkit-border-radius\"?: BorderRadiusProperty<TLength>,\n  \"-webkit-column-rule\"?: ColumnRuleProperty<TLength>,\n  \"-webkit-columns\"?: ColumnsProperty<TLength>,\n  \"-webkit-flex\"?: FlexProperty<TLength>,\n  \"-webkit-flex-flow\"?: FlexFlowProperty,\n  \"-webkit-mask\"?: WebkitMaskProperty<TLength>,\n  \"-webkit-text-emphasis\"?: TextEmphasisProperty,\n  \"-webkit-text-stroke\"?: WebkitTextStrokeProperty<TLength>,\n  \"-webkit-transition\"?: TransitionProperty,\n};\n\nexport type VendorPropertiesHyphen<TLength = string | 0> = VendorLonghandPropertiesHyphen<TLength> & VendorShorthandPropertiesHyphen<TLength>;\n\nexport type ObsoletePropertiesHyphen<TLength = string | 0> = {\n  \"box-align\"?: BoxAlignProperty,\n  \"box-direction\"?: BoxDirectionProperty,\n  \"box-flex\"?: GlobalsNumber,\n  \"box-flex-group\"?: GlobalsNumber,\n  \"box-lines\"?: BoxLinesProperty,\n  \"box-ordinal-group\"?: GlobalsNumber,\n  \"box-orient\"?: BoxOrientProperty,\n  \"box-pack\"?: BoxPackProperty,\n  clip?: ClipProperty,\n  \"font-variant-alternates\"?: FontVariantAlternatesProperty,\n  \"grid-column-gap\"?: GridColumnGapProperty<TLength>,\n  \"grid-gap\"?: GridGapProperty<TLength>,\n  \"grid-row-gap\"?: GridRowGapProperty<TLength>,\n  \"ime-mode\"?: ImeModeProperty,\n  \"offset-block\"?: InsetBlockProperty<TLength>,\n  \"offset-block-end\"?: InsetBlockEndProperty<TLength>,\n  \"offset-block-start\"?: InsetBlockStartProperty<TLength>,\n  \"offset-inline\"?: InsetInlineProperty<TLength>,\n  \"offset-inline-end\"?: InsetInlineEndProperty<TLength>,\n  \"offset-inline-start\"?: InsetInlineStartProperty<TLength>,\n  \"scroll-snap-coordinate\"?: ScrollSnapCoordinateProperty<TLength>,\n  \"scroll-snap-destination\"?: ScrollSnapDestinationProperty<TLength>,\n  \"scroll-snap-points-x\"?: ScrollSnapPointsXProperty,\n  \"scroll-snap-points-y\"?: ScrollSnapPointsYProperty,\n  \"scroll-snap-type-x\"?: ScrollSnapTypeXProperty,\n  \"scroll-snap-type-y\"?: ScrollSnapTypeYProperty,\n  \"scrollbar-track-color\"?: MsScrollbarTrackColorProperty,\n  \"text-combine-horizontal\"?: TextCombineUprightProperty,\n  \"-khtml-box-align\"?: BoxAlignProperty,\n  \"-khtml-box-direction\"?: BoxDirectionProperty,\n  \"-khtml-box-flex\"?: GlobalsNumber,\n  \"-khtml-box-flex-group\"?: GlobalsNumber,\n  \"-khtml-box-lines\"?: BoxLinesProperty,\n  \"-khtml-box-ordinal-group\"?: GlobalsNumber,\n  \"-khtml-box-orient\"?: BoxOrientProperty,\n  \"-khtml-box-pack\"?: BoxPackProperty,\n  \"-khtml-line-break\"?: LineBreakProperty,\n  \"-khtml-opacity\"?: OpacityProperty,\n  \"-khtml-user-select\"?: UserSelectProperty,\n  \"-moz-background-clip\"?: BackgroundClipProperty,\n  \"-moz-background-inline-policy\"?: BoxDecorationBreakProperty,\n  \"-moz-background-origin\"?: BackgroundOriginProperty,\n  \"-moz-background-size\"?: BackgroundSizeProperty<TLength>,\n  \"-moz-binding\"?: MozBindingProperty,\n  \"-moz-border-bottom-colors\"?: MozBorderBottomColorsProperty,\n  \"-moz-border-left-colors\"?: MozBorderLeftColorsProperty,\n  \"-moz-border-radius\"?: BorderRadiusProperty<TLength>,\n  \"-moz-border-radius-bottomleft\"?: BorderBottomLeftRadiusProperty<TLength>,\n  \"-moz-border-radius-bottomright\"?: BorderBottomRightRadiusProperty<TLength>,\n  \"-moz-border-radius-topleft\"?: BorderTopLeftRadiusProperty<TLength>,\n  \"-moz-border-radius-topright\"?: BorderTopRightRadiusProperty<TLength>,\n  \"-moz-border-right-colors\"?: MozBorderRightColorsProperty,\n  \"-moz-border-top-colors\"?: MozBorderTopColorsProperty,\n  \"-moz-box-align\"?: BoxAlignProperty,\n  \"-moz-box-direction\"?: BoxDirectionProperty,\n  \"-moz-box-flex\"?: GlobalsNumber,\n  \"-moz-box-ordinal-group\"?: GlobalsNumber,\n  \"-moz-box-orient\"?: BoxOrientProperty,\n  \"-moz-box-pack\"?: BoxPackProperty,\n  \"-moz-box-shadow\"?: BoxShadowProperty,\n  \"-moz-opacity\"?: OpacityProperty,\n  \"-moz-outline\"?: OutlineProperty<TLength>,\n  \"-moz-outline-color\"?: OutlineColorProperty,\n  \"-moz-outline-radius\"?: MozOutlineRadiusProperty<TLength>,\n  \"-moz-outline-style\"?: OutlineStyleProperty,\n  \"-moz-outline-width\"?: OutlineWidthProperty<TLength>,\n  \"-moz-text-align-last\"?: TextAlignLastProperty,\n  \"-moz-text-blink\"?: MozTextBlinkProperty,\n  \"-moz-text-decoration-color\"?: TextDecorationColorProperty,\n  \"-moz-text-decoration-line\"?: TextDecorationLineProperty,\n  \"-moz-text-decoration-style\"?: TextDecorationStyleProperty,\n  \"-moz-user-input\"?: MozUserInputProperty,\n  \"-moz-window-shadow\"?: MozWindowShadowProperty,\n  \"-ms-ime-mode\"?: ImeModeProperty,\n  \"-ms-scrollbar-track-color\"?: MsScrollbarTrackColorProperty,\n  \"-o-animation\"?: AnimationProperty,\n  \"-o-animation-delay\"?: GlobalsString,\n  \"-o-animation-direction\"?: AnimationDirectionProperty,\n  \"-o-animation-duration\"?: GlobalsString,\n  \"-o-animation-fill-mode\"?: AnimationFillModeProperty,\n  \"-o-animation-iteration-count\"?: AnimationIterationCountProperty,\n  \"-o-animation-name\"?: AnimationNameProperty,\n  \"-o-animation-play-state\"?: AnimationPlayStateProperty,\n  \"-o-animation-timing-function\"?: AnimationTimingFunctionProperty,\n  \"-o-background-size\"?: BackgroundSizeProperty<TLength>,\n  \"-o-border-image\"?: BorderImageProperty,\n  \"-o-transform\"?: TransformProperty,\n  \"-o-transition\"?: TransitionProperty,\n  \"-o-transition-delay\"?: GlobalsString,\n  \"-o-transition-duration\"?: GlobalsString,\n  \"-o-transition-property\"?: TransitionPropertyProperty,\n  \"-o-transition-timing-function\"?: TransitionTimingFunctionProperty,\n  \"-webkit-box-align\"?: BoxAlignProperty,\n  \"-webkit-box-direction\"?: BoxDirectionProperty,\n  \"-webkit-box-flex\"?: GlobalsNumber,\n  \"-webkit-box-flex-group\"?: GlobalsNumber,\n  \"-webkit-box-lines\"?: BoxLinesProperty,\n  \"-webkit-box-ordinal-group\"?: GlobalsNumber,\n  \"-webkit-box-orient\"?: BoxOrientProperty,\n  \"-webkit-box-pack\"?: BoxPackProperty,\n  \"-webkit-scroll-snap-points-x\"?: ScrollSnapPointsXProperty,\n  \"-webkit-scroll-snap-points-y\"?: ScrollSnapPointsYProperty,\n};\n\nexport type SvgPropertiesHyphen<TLength = string | 0> = {\n  \"alignment-baseline\"?: AlignmentBaselineProperty,\n  \"baseline-shift\"?: BaselineShiftProperty<TLength>,\n  clip?: ClipProperty,\n  \"clip-path\"?: ClipPathProperty,\n  \"clip-rule\"?: ClipRuleProperty,\n  color?: ColorProperty,\n  \"color-interpolation\"?: ColorInterpolationProperty,\n  \"color-rendering\"?: ColorRenderingProperty,\n  cursor?: CursorProperty,\n  direction?: DirectionProperty,\n  display?: DisplayProperty,\n  \"dominant-baseline\"?: DominantBaselineProperty,\n  fill?: FillProperty,\n  \"fill-opacity\"?: GlobalsNumber,\n  \"fill-rule\"?: FillRuleProperty,\n  filter?: FilterProperty,\n  \"flood-color\"?: FloodColorProperty,\n  \"flood-opacity\"?: GlobalsNumber,\n  font?: FontProperty,\n  \"font-family\"?: FontFamilyProperty,\n  \"font-size\"?: FontSizeProperty<TLength>,\n  \"font-size-adjust\"?: FontSizeAdjustProperty,\n  \"font-stretch\"?: FontStretchProperty,\n  \"font-style\"?: FontStyleProperty,\n  \"font-variant\"?: FontVariantProperty,\n  \"font-weight\"?: FontWeightProperty,\n  \"glyph-orientation-vertical\"?: GlyphOrientationVerticalProperty,\n  \"image-rendering\"?: ImageRenderingProperty,\n  \"letter-spacing\"?: LetterSpacingProperty<TLength>,\n  \"lighting-color\"?: LightingColorProperty,\n  \"line-height\"?: LineHeightProperty<TLength>,\n  marker?: MarkerProperty,\n  \"marker-end\"?: MarkerEndProperty,\n  \"marker-mid\"?: MarkerMidProperty,\n  \"marker-start\"?: MarkerStartProperty,\n  mask?: MaskProperty<TLength>,\n  opacity?: OpacityProperty,\n  overflow?: OverflowProperty,\n  \"paint-order\"?: PaintOrderProperty,\n  \"pointer-events\"?: PointerEventsProperty,\n  \"shape-rendering\"?: ShapeRenderingProperty,\n  \"stop-color\"?: StopColorProperty,\n  \"stop-opacity\"?: GlobalsNumber,\n  stroke?: StrokeProperty,\n  \"stroke-dasharray\"?: StrokeDasharrayProperty<TLength>,\n  \"stroke-dashoffset\"?: StrokeDashoffsetProperty<TLength>,\n  \"stroke-linecap\"?: StrokeLinecapProperty,\n  \"stroke-linejoin\"?: StrokeLinejoinProperty,\n  \"stroke-miterlimit\"?: GlobalsNumber,\n  \"stroke-opacity\"?: GlobalsNumber,\n  \"stroke-width\"?: StrokeWidthProperty<TLength>,\n  \"text-anchor\"?: TextAnchorProperty,\n  \"text-decoration\"?: TextDecorationProperty<TLength>,\n  \"text-rendering\"?: TextRenderingProperty,\n  \"unicode-bidi\"?: UnicodeBidiProperty,\n  \"vector-effect\"?: VectorEffectProperty,\n  visibility?: VisibilityProperty,\n  \"white-space\"?: WhiteSpaceProperty,\n  \"word-spacing\"?: WordSpacingProperty<TLength>,\n  \"writing-mode\"?: WritingModeProperty,\n};\n\nexport type PropertiesHyphen<TLength = string | 0> = StandardPropertiesHyphen<TLength> &\n  VendorPropertiesHyphen<TLength> &\n  ObsoletePropertiesHyphen<TLength> &\n  SvgPropertiesHyphen<TLength>;\n\nexport type StandardLonghandPropertiesFallback<TLength = string | 0> = {\n  alignContent?: AlignContentProperty | AlignContentProperty[],\n  alignItems?: AlignItemsProperty | AlignItemsProperty[],\n  alignSelf?: AlignSelfProperty | AlignSelfProperty[],\n  animationDelay?: GlobalsString | GlobalsString[],\n  animationDirection?: AnimationDirectionProperty | AnimationDirectionProperty[],\n  animationDuration?: GlobalsString | GlobalsString[],\n  animationFillMode?: AnimationFillModeProperty | AnimationFillModeProperty[],\n  animationIterationCount?: AnimationIterationCountProperty | AnimationIterationCountProperty[],\n  animationName?: AnimationNameProperty | AnimationNameProperty[],\n  animationPlayState?: AnimationPlayStateProperty | AnimationPlayStateProperty[],\n  animationTimingFunction?: AnimationTimingFunctionProperty | AnimationTimingFunctionProperty[],\n  appearance?: AppearanceProperty | AppearanceProperty[],\n  aspectRatio?: AspectRatioProperty | AspectRatioProperty[],\n  backdropFilter?: BackdropFilterProperty | BackdropFilterProperty[],\n  backfaceVisibility?: BackfaceVisibilityProperty | BackfaceVisibilityProperty[],\n  backgroundAttachment?: BackgroundAttachmentProperty | BackgroundAttachmentProperty[],\n  backgroundBlendMode?: BackgroundBlendModeProperty | BackgroundBlendModeProperty[],\n  backgroundClip?: BackgroundClipProperty | BackgroundClipProperty[],\n  backgroundColor?: BackgroundColorProperty | BackgroundColorProperty[],\n  backgroundImage?: BackgroundImageProperty | BackgroundImageProperty[],\n  backgroundOrigin?: BackgroundOriginProperty | BackgroundOriginProperty[],\n  backgroundPosition?: BackgroundPositionProperty<TLength> | BackgroundPositionProperty<TLength>[],\n  backgroundPositionX?: BackgroundPositionXProperty<TLength> | BackgroundPositionXProperty<TLength>[],\n  backgroundPositionY?: BackgroundPositionYProperty<TLength> | BackgroundPositionYProperty<TLength>[],\n  backgroundRepeat?: BackgroundRepeatProperty | BackgroundRepeatProperty[],\n  backgroundSize?: BackgroundSizeProperty<TLength> | BackgroundSizeProperty<TLength>[],\n  blockOverflow?: BlockOverflowProperty | BlockOverflowProperty[],\n  blockSize?: BlockSizeProperty<TLength> | BlockSizeProperty<TLength>[],\n  borderBlockColor?: BorderBlockColorProperty | BorderBlockColorProperty[],\n  borderBlockEndColor?: BorderBlockEndColorProperty | BorderBlockEndColorProperty[],\n  borderBlockEndStyle?: BorderBlockEndStyleProperty | BorderBlockEndStyleProperty[],\n  borderBlockEndWidth?: BorderBlockEndWidthProperty<TLength> | BorderBlockEndWidthProperty<TLength>[],\n  borderBlockStartColor?: BorderBlockStartColorProperty | BorderBlockStartColorProperty[],\n  borderBlockStartStyle?: BorderBlockStartStyleProperty | BorderBlockStartStyleProperty[],\n  borderBlockStartWidth?: BorderBlockStartWidthProperty<TLength> | BorderBlockStartWidthProperty<TLength>[],\n  borderBlockStyle?: BorderBlockStyleProperty | BorderBlockStyleProperty[],\n  borderBlockWidth?: BorderBlockWidthProperty<TLength> | BorderBlockWidthProperty<TLength>[],\n  borderBottomColor?: BorderBottomColorProperty | BorderBottomColorProperty[],\n  borderBottomLeftRadius?: BorderBottomLeftRadiusProperty<TLength> | BorderBottomLeftRadiusProperty<TLength>[],\n  borderBottomRightRadius?: BorderBottomRightRadiusProperty<TLength> | BorderBottomRightRadiusProperty<TLength>[],\n  borderBottomStyle?: BorderBottomStyleProperty | BorderBottomStyleProperty[],\n  borderBottomWidth?: BorderBottomWidthProperty<TLength> | BorderBottomWidthProperty<TLength>[],\n  borderCollapse?: BorderCollapseProperty | BorderCollapseProperty[],\n  borderEndEndRadius?: BorderEndEndRadiusProperty<TLength> | BorderEndEndRadiusProperty<TLength>[],\n  borderEndStartRadius?: BorderEndStartRadiusProperty<TLength> | BorderEndStartRadiusProperty<TLength>[],\n  borderImageOutset?: BorderImageOutsetProperty<TLength> | BorderImageOutsetProperty<TLength>[],\n  borderImageRepeat?: BorderImageRepeatProperty | BorderImageRepeatProperty[],\n  borderImageSlice?: BorderImageSliceProperty | BorderImageSliceProperty[],\n  borderImageSource?: BorderImageSourceProperty | BorderImageSourceProperty[],\n  borderImageWidth?: BorderImageWidthProperty<TLength> | BorderImageWidthProperty<TLength>[],\n  borderInlineColor?: BorderInlineColorProperty | BorderInlineColorProperty[],\n  borderInlineEndColor?: BorderInlineEndColorProperty | BorderInlineEndColorProperty[],\n  borderInlineEndStyle?: BorderInlineEndStyleProperty | BorderInlineEndStyleProperty[],\n  borderInlineEndWidth?: BorderInlineEndWidthProperty<TLength> | BorderInlineEndWidthProperty<TLength>[],\n  borderInlineStartColor?: BorderInlineStartColorProperty | BorderInlineStartColorProperty[],\n  borderInlineStartStyle?: BorderInlineStartStyleProperty | BorderInlineStartStyleProperty[],\n  borderInlineStartWidth?: BorderInlineStartWidthProperty<TLength> | BorderInlineStartWidthProperty<TLength>[],\n  borderInlineStyle?: BorderInlineStyleProperty | BorderInlineStyleProperty[],\n  borderInlineWidth?: BorderInlineWidthProperty<TLength> | BorderInlineWidthProperty<TLength>[],\n  borderLeftColor?: BorderLeftColorProperty | BorderLeftColorProperty[],\n  borderLeftStyle?: BorderLeftStyleProperty | BorderLeftStyleProperty[],\n  borderLeftWidth?: BorderLeftWidthProperty<TLength> | BorderLeftWidthProperty<TLength>[],\n  borderRightColor?: BorderRightColorProperty | BorderRightColorProperty[],\n  borderRightStyle?: BorderRightStyleProperty | BorderRightStyleProperty[],\n  borderRightWidth?: BorderRightWidthProperty<TLength> | BorderRightWidthProperty<TLength>[],\n  borderSpacing?: BorderSpacingProperty<TLength> | BorderSpacingProperty<TLength>[],\n  borderStartEndRadius?: BorderStartEndRadiusProperty<TLength> | BorderStartEndRadiusProperty<TLength>[],\n  borderStartStartRadius?: BorderStartStartRadiusProperty<TLength> | BorderStartStartRadiusProperty<TLength>[],\n  borderTopColor?: BorderTopColorProperty | BorderTopColorProperty[],\n  borderTopLeftRadius?: BorderTopLeftRadiusProperty<TLength> | BorderTopLeftRadiusProperty<TLength>[],\n  borderTopRightRadius?: BorderTopRightRadiusProperty<TLength> | BorderTopRightRadiusProperty<TLength>[],\n  borderTopStyle?: BorderTopStyleProperty | BorderTopStyleProperty[],\n  borderTopWidth?: BorderTopWidthProperty<TLength> | BorderTopWidthProperty<TLength>[],\n  bottom?: BottomProperty<TLength> | BottomProperty<TLength>[],\n  boxDecorationBreak?: BoxDecorationBreakProperty | BoxDecorationBreakProperty[],\n  boxShadow?: BoxShadowProperty | BoxShadowProperty[],\n  boxSizing?: BoxSizingProperty | BoxSizingProperty[],\n  breakAfter?: BreakAfterProperty | BreakAfterProperty[],\n  breakBefore?: BreakBeforeProperty | BreakBeforeProperty[],\n  breakInside?: BreakInsideProperty | BreakInsideProperty[],\n  captionSide?: CaptionSideProperty | CaptionSideProperty[],\n  caretColor?: CaretColorProperty | CaretColorProperty[],\n  clear?: ClearProperty | ClearProperty[],\n  clipPath?: ClipPathProperty | ClipPathProperty[],\n  color?: ColorProperty | ColorProperty[],\n  colorAdjust?: ColorAdjustProperty | ColorAdjustProperty[],\n  columnCount?: ColumnCountProperty | ColumnCountProperty[],\n  columnFill?: ColumnFillProperty | ColumnFillProperty[],\n  columnGap?: ColumnGapProperty<TLength> | ColumnGapProperty<TLength>[],\n  columnRuleColor?: ColumnRuleColorProperty | ColumnRuleColorProperty[],\n  columnRuleStyle?: ColumnRuleStyleProperty | ColumnRuleStyleProperty[],\n  columnRuleWidth?: ColumnRuleWidthProperty<TLength> | ColumnRuleWidthProperty<TLength>[],\n  columnSpan?: ColumnSpanProperty | ColumnSpanProperty[],\n  columnWidth?: ColumnWidthProperty<TLength> | ColumnWidthProperty<TLength>[],\n  contain?: ContainProperty | ContainProperty[],\n  content?: ContentProperty | ContentProperty[],\n  counterIncrement?: CounterIncrementProperty | CounterIncrementProperty[],\n  counterReset?: CounterResetProperty | CounterResetProperty[],\n  counterSet?: CounterSetProperty | CounterSetProperty[],\n  cursor?: CursorProperty | CursorProperty[],\n  direction?: DirectionProperty | DirectionProperty[],\n  display?: DisplayProperty | DisplayProperty[],\n  emptyCells?: EmptyCellsProperty | EmptyCellsProperty[],\n  filter?: FilterProperty | FilterProperty[],\n  flexBasis?: FlexBasisProperty<TLength> | FlexBasisProperty<TLength>[],\n  flexDirection?: FlexDirectionProperty | FlexDirectionProperty[],\n  flexGrow?: GlobalsNumber | GlobalsNumber[],\n  flexShrink?: GlobalsNumber | GlobalsNumber[],\n  flexWrap?: FlexWrapProperty | FlexWrapProperty[],\n  float?: FloatProperty | FloatProperty[],\n  fontFamily?: FontFamilyProperty | FontFamilyProperty[],\n  fontFeatureSettings?: FontFeatureSettingsProperty | FontFeatureSettingsProperty[],\n  fontKerning?: FontKerningProperty | FontKerningProperty[],\n  fontLanguageOverride?: FontLanguageOverrideProperty | FontLanguageOverrideProperty[],\n  fontOpticalSizing?: FontOpticalSizingProperty | FontOpticalSizingProperty[],\n  fontSize?: FontSizeProperty<TLength> | FontSizeProperty<TLength>[],\n  fontSizeAdjust?: FontSizeAdjustProperty | FontSizeAdjustProperty[],\n  fontStretch?: FontStretchProperty | FontStretchProperty[],\n  fontStyle?: FontStyleProperty | FontStyleProperty[],\n  fontSynthesis?: FontSynthesisProperty | FontSynthesisProperty[],\n  fontVariant?: FontVariantProperty | FontVariantProperty[],\n  fontVariantCaps?: FontVariantCapsProperty | FontVariantCapsProperty[],\n  fontVariantEastAsian?: FontVariantEastAsianProperty | FontVariantEastAsianProperty[],\n  fontVariantLigatures?: FontVariantLigaturesProperty | FontVariantLigaturesProperty[],\n  fontVariantNumeric?: FontVariantNumericProperty | FontVariantNumericProperty[],\n  fontVariantPosition?: FontVariantPositionProperty | FontVariantPositionProperty[],\n  fontVariationSettings?: FontVariationSettingsProperty | FontVariationSettingsProperty[],\n  fontWeight?: FontWeightProperty | FontWeightProperty[],\n  gridAutoColumns?: GridAutoColumnsProperty<TLength> | GridAutoColumnsProperty<TLength>[],\n  gridAutoFlow?: GridAutoFlowProperty | GridAutoFlowProperty[],\n  gridAutoRows?: GridAutoRowsProperty<TLength> | GridAutoRowsProperty<TLength>[],\n  gridColumnEnd?: GridColumnEndProperty | GridColumnEndProperty[],\n  gridColumnStart?: GridColumnStartProperty | GridColumnStartProperty[],\n  gridRowEnd?: GridRowEndProperty | GridRowEndProperty[],\n  gridRowStart?: GridRowStartProperty | GridRowStartProperty[],\n  gridTemplateAreas?: GridTemplateAreasProperty | GridTemplateAreasProperty[],\n  gridTemplateColumns?: GridTemplateColumnsProperty<TLength> | GridTemplateColumnsProperty<TLength>[],\n  gridTemplateRows?: GridTemplateRowsProperty<TLength> | GridTemplateRowsProperty<TLength>[],\n  hangingPunctuation?: HangingPunctuationProperty | HangingPunctuationProperty[],\n  height?: HeightProperty<TLength> | HeightProperty<TLength>[],\n  hyphens?: HyphensProperty | HyphensProperty[],\n  imageOrientation?: ImageOrientationProperty | ImageOrientationProperty[],\n  imageRendering?: ImageRenderingProperty | ImageRenderingProperty[],\n  imageResolution?: ImageResolutionProperty | ImageResolutionProperty[],\n  initialLetter?: InitialLetterProperty | InitialLetterProperty[],\n  inlineSize?: InlineSizeProperty<TLength> | InlineSizeProperty<TLength>[],\n  inset?: InsetProperty<TLength> | InsetProperty<TLength>[],\n  insetBlock?: InsetBlockProperty<TLength> | InsetBlockProperty<TLength>[],\n  insetBlockEnd?: InsetBlockEndProperty<TLength> | InsetBlockEndProperty<TLength>[],\n  insetBlockStart?: InsetBlockStartProperty<TLength> | InsetBlockStartProperty<TLength>[],\n  insetInline?: InsetInlineProperty<TLength> | InsetInlineProperty<TLength>[],\n  insetInlineEnd?: InsetInlineEndProperty<TLength> | InsetInlineEndProperty<TLength>[],\n  insetInlineStart?: InsetInlineStartProperty<TLength> | InsetInlineStartProperty<TLength>[],\n  isolation?: IsolationProperty | IsolationProperty[],\n  justifyContent?: JustifyContentProperty | JustifyContentProperty[],\n  justifyItems?: JustifyItemsProperty | JustifyItemsProperty[],\n  justifySelf?: JustifySelfProperty | JustifySelfProperty[],\n  left?: LeftProperty<TLength> | LeftProperty<TLength>[],\n  letterSpacing?: LetterSpacingProperty<TLength> | LetterSpacingProperty<TLength>[],\n  lineBreak?: LineBreakProperty | LineBreakProperty[],\n  lineHeight?: LineHeightProperty<TLength> | LineHeightProperty<TLength>[],\n  lineHeightStep?: LineHeightStepProperty<TLength> | LineHeightStepProperty<TLength>[],\n  listStyleImage?: ListStyleImageProperty | ListStyleImageProperty[],\n  listStylePosition?: ListStylePositionProperty | ListStylePositionProperty[],\n  listStyleType?: ListStyleTypeProperty | ListStyleTypeProperty[],\n  marginBlock?: MarginBlockProperty<TLength> | MarginBlockProperty<TLength>[],\n  marginBlockEnd?: MarginBlockEndProperty<TLength> | MarginBlockEndProperty<TLength>[],\n  marginBlockStart?: MarginBlockStartProperty<TLength> | MarginBlockStartProperty<TLength>[],\n  marginBottom?: MarginBottomProperty<TLength> | MarginBottomProperty<TLength>[],\n  marginInline?: MarginInlineProperty<TLength> | MarginInlineProperty<TLength>[],\n  marginInlineEnd?: MarginInlineEndProperty<TLength> | MarginInlineEndProperty<TLength>[],\n  marginInlineStart?: MarginInlineStartProperty<TLength> | MarginInlineStartProperty<TLength>[],\n  marginLeft?: MarginLeftProperty<TLength> | MarginLeftProperty<TLength>[],\n  marginRight?: MarginRightProperty<TLength> | MarginRightProperty<TLength>[],\n  marginTop?: MarginTopProperty<TLength> | MarginTopProperty<TLength>[],\n  maskBorderMode?: MaskBorderModeProperty | MaskBorderModeProperty[],\n  maskBorderOutset?: MaskBorderOutsetProperty<TLength> | MaskBorderOutsetProperty<TLength>[],\n  maskBorderRepeat?: MaskBorderRepeatProperty | MaskBorderRepeatProperty[],\n  maskBorderSlice?: MaskBorderSliceProperty | MaskBorderSliceProperty[],\n  maskBorderSource?: MaskBorderSourceProperty | MaskBorderSourceProperty[],\n  maskBorderWidth?: MaskBorderWidthProperty<TLength> | MaskBorderWidthProperty<TLength>[],\n  maskClip?: MaskClipProperty | MaskClipProperty[],\n  maskComposite?: MaskCompositeProperty | MaskCompositeProperty[],\n  maskImage?: MaskImageProperty | MaskImageProperty[],\n  maskMode?: MaskModeProperty | MaskModeProperty[],\n  maskOrigin?: MaskOriginProperty | MaskOriginProperty[],\n  maskPosition?: MaskPositionProperty<TLength> | MaskPositionProperty<TLength>[],\n  maskRepeat?: MaskRepeatProperty | MaskRepeatProperty[],\n  maskSize?: MaskSizeProperty<TLength> | MaskSizeProperty<TLength>[],\n  maskType?: MaskTypeProperty | MaskTypeProperty[],\n  maxBlockSize?: MaxBlockSizeProperty<TLength> | MaxBlockSizeProperty<TLength>[],\n  maxHeight?: MaxHeightProperty<TLength> | MaxHeightProperty<TLength>[],\n  maxInlineSize?: MaxInlineSizeProperty<TLength> | MaxInlineSizeProperty<TLength>[],\n  maxLines?: MaxLinesProperty | MaxLinesProperty[],\n  maxWidth?: MaxWidthProperty<TLength> | MaxWidthProperty<TLength>[],\n  minBlockSize?: MinBlockSizeProperty<TLength> | MinBlockSizeProperty<TLength>[],\n  minHeight?: MinHeightProperty<TLength> | MinHeightProperty<TLength>[],\n  minInlineSize?: MinInlineSizeProperty<TLength> | MinInlineSizeProperty<TLength>[],\n  minWidth?: MinWidthProperty<TLength> | MinWidthProperty<TLength>[],\n  mixBlendMode?: MixBlendModeProperty | MixBlendModeProperty[],\n  motionDistance?: OffsetDistanceProperty<TLength> | OffsetDistanceProperty<TLength>[],\n  motionPath?: OffsetPathProperty | OffsetPathProperty[],\n  motionRotation?: OffsetRotateProperty | OffsetRotateProperty[],\n  objectFit?: ObjectFitProperty | ObjectFitProperty[],\n  objectPosition?: ObjectPositionProperty<TLength> | ObjectPositionProperty<TLength>[],\n  offsetAnchor?: OffsetAnchorProperty<TLength> | OffsetAnchorProperty<TLength>[],\n  offsetDistance?: OffsetDistanceProperty<TLength> | OffsetDistanceProperty<TLength>[],\n  offsetPath?: OffsetPathProperty | OffsetPathProperty[],\n  offsetRotate?: OffsetRotateProperty | OffsetRotateProperty[],\n  offsetRotation?: OffsetRotateProperty | OffsetRotateProperty[],\n  opacity?: OpacityProperty | OpacityProperty[],\n  order?: GlobalsNumber | GlobalsNumber[],\n  orphans?: GlobalsNumber | GlobalsNumber[],\n  outlineColor?: OutlineColorProperty | OutlineColorProperty[],\n  outlineOffset?: OutlineOffsetProperty<TLength> | OutlineOffsetProperty<TLength>[],\n  outlineStyle?: OutlineStyleProperty | OutlineStyleProperty[],\n  outlineWidth?: OutlineWidthProperty<TLength> | OutlineWidthProperty<TLength>[],\n  overflow?: OverflowProperty | OverflowProperty[],\n  overflowAnchor?: OverflowAnchorProperty | OverflowAnchorProperty[],\n  overflowBlock?: OverflowBlockProperty | OverflowBlockProperty[],\n  overflowClipBox?: OverflowClipBoxProperty | OverflowClipBoxProperty[],\n  overflowInline?: OverflowInlineProperty | OverflowInlineProperty[],\n  overflowWrap?: OverflowWrapProperty | OverflowWrapProperty[],\n  overflowX?: OverflowXProperty | OverflowXProperty[],\n  overflowY?: OverflowYProperty | OverflowYProperty[],\n  overscrollBehavior?: OverscrollBehaviorProperty | OverscrollBehaviorProperty[],\n  overscrollBehaviorBlock?: OverscrollBehaviorBlockProperty | OverscrollBehaviorBlockProperty[],\n  overscrollBehaviorInline?: OverscrollBehaviorInlineProperty | OverscrollBehaviorInlineProperty[],\n  overscrollBehaviorX?: OverscrollBehaviorXProperty | OverscrollBehaviorXProperty[],\n  overscrollBehaviorY?: OverscrollBehaviorYProperty | OverscrollBehaviorYProperty[],\n  paddingBlock?: PaddingBlockProperty<TLength> | PaddingBlockProperty<TLength>[],\n  paddingBlockEnd?: PaddingBlockEndProperty<TLength> | PaddingBlockEndProperty<TLength>[],\n  paddingBlockStart?: PaddingBlockStartProperty<TLength> | PaddingBlockStartProperty<TLength>[],\n  paddingBottom?: PaddingBottomProperty<TLength> | PaddingBottomProperty<TLength>[],\n  paddingInline?: PaddingInlineProperty<TLength> | PaddingInlineProperty<TLength>[],\n  paddingInlineEnd?: PaddingInlineEndProperty<TLength> | PaddingInlineEndProperty<TLength>[],\n  paddingInlineStart?: PaddingInlineStartProperty<TLength> | PaddingInlineStartProperty<TLength>[],\n  paddingLeft?: PaddingLeftProperty<TLength> | PaddingLeftProperty<TLength>[],\n  paddingRight?: PaddingRightProperty<TLength> | PaddingRightProperty<TLength>[],\n  paddingTop?: PaddingTopProperty<TLength> | PaddingTopProperty<TLength>[],\n  pageBreakAfter?: PageBreakAfterProperty | PageBreakAfterProperty[],\n  pageBreakBefore?: PageBreakBeforeProperty | PageBreakBeforeProperty[],\n  pageBreakInside?: PageBreakInsideProperty | PageBreakInsideProperty[],\n  paintOrder?: PaintOrderProperty | PaintOrderProperty[],\n  perspective?: PerspectiveProperty<TLength> | PerspectiveProperty<TLength>[],\n  perspectiveOrigin?: PerspectiveOriginProperty<TLength> | PerspectiveOriginProperty<TLength>[],\n  placeContent?: PlaceContentProperty | PlaceContentProperty[],\n  pointerEvents?: PointerEventsProperty | PointerEventsProperty[],\n  position?: PositionProperty | PositionProperty[],\n  quotes?: QuotesProperty | QuotesProperty[],\n  resize?: ResizeProperty | ResizeProperty[],\n  right?: RightProperty<TLength> | RightProperty<TLength>[],\n  rotate?: RotateProperty | RotateProperty[],\n  rowGap?: RowGapProperty<TLength> | RowGapProperty<TLength>[],\n  rubyAlign?: RubyAlignProperty | RubyAlignProperty[],\n  rubyMerge?: RubyMergeProperty | RubyMergeProperty[],\n  rubyPosition?: RubyPositionProperty | RubyPositionProperty[],\n  scale?: ScaleProperty | ScaleProperty[],\n  scrollBehavior?: ScrollBehaviorProperty | ScrollBehaviorProperty[],\n  scrollMargin?: ScrollMarginProperty<TLength> | ScrollMarginProperty<TLength>[],\n  scrollMarginBlock?: ScrollMarginBlockProperty<TLength> | ScrollMarginBlockProperty<TLength>[],\n  scrollMarginBlockEnd?: ScrollMarginBlockEndProperty<TLength> | ScrollMarginBlockEndProperty<TLength>[],\n  scrollMarginBlockStart?: ScrollMarginBlockStartProperty<TLength> | ScrollMarginBlockStartProperty<TLength>[],\n  scrollMarginBottom?: ScrollMarginBottomProperty<TLength> | ScrollMarginBottomProperty<TLength>[],\n  scrollMarginInline?: ScrollMarginInlineProperty<TLength> | ScrollMarginInlineProperty<TLength>[],\n  scrollMarginInlineEnd?: ScrollMarginInlineEndProperty<TLength> | ScrollMarginInlineEndProperty<TLength>[],\n  scrollMarginInlineStart?: ScrollMarginInlineStartProperty<TLength> | ScrollMarginInlineStartProperty<TLength>[],\n  scrollMarginLeft?: ScrollMarginLeftProperty<TLength> | ScrollMarginLeftProperty<TLength>[],\n  scrollMarginRight?: ScrollMarginRightProperty<TLength> | ScrollMarginRightProperty<TLength>[],\n  scrollMarginTop?: ScrollMarginTopProperty<TLength> | ScrollMarginTopProperty<TLength>[],\n  scrollPadding?: ScrollPaddingProperty<TLength> | ScrollPaddingProperty<TLength>[],\n  scrollPaddingBlock?: ScrollPaddingBlockProperty<TLength> | ScrollPaddingBlockProperty<TLength>[],\n  scrollPaddingBlockEnd?: ScrollPaddingBlockEndProperty<TLength> | ScrollPaddingBlockEndProperty<TLength>[],\n  scrollPaddingBlockStart?: ScrollPaddingBlockStartProperty<TLength> | ScrollPaddingBlockStartProperty<TLength>[],\n  scrollPaddingBottom?: ScrollPaddingBottomProperty<TLength> | ScrollPaddingBottomProperty<TLength>[],\n  scrollPaddingInline?: ScrollPaddingInlineProperty<TLength> | ScrollPaddingInlineProperty<TLength>[],\n  scrollPaddingInlineEnd?: ScrollPaddingInlineEndProperty<TLength> | ScrollPaddingInlineEndProperty<TLength>[],\n  scrollPaddingInlineStart?: ScrollPaddingInlineStartProperty<TLength> | ScrollPaddingInlineStartProperty<TLength>[],\n  scrollPaddingLeft?: ScrollPaddingLeftProperty<TLength> | ScrollPaddingLeftProperty<TLength>[],\n  scrollPaddingRight?: ScrollPaddingRightProperty<TLength> | ScrollPaddingRightProperty<TLength>[],\n  scrollPaddingTop?: ScrollPaddingTopProperty<TLength> | ScrollPaddingTopProperty<TLength>[],\n  scrollSnapAlign?: ScrollSnapAlignProperty | ScrollSnapAlignProperty[],\n  scrollSnapStop?: ScrollSnapStopProperty | ScrollSnapStopProperty[],\n  scrollSnapType?: ScrollSnapTypeProperty | ScrollSnapTypeProperty[],\n  scrollbarColor?: ScrollbarColorProperty | ScrollbarColorProperty[],\n  scrollbarWidth?: ScrollbarWidthProperty | ScrollbarWidthProperty[],\n  shapeImageThreshold?: ShapeImageThresholdProperty | ShapeImageThresholdProperty[],\n  shapeMargin?: ShapeMarginProperty<TLength> | ShapeMarginProperty<TLength>[],\n  shapeOutside?: ShapeOutsideProperty | ShapeOutsideProperty[],\n  tabSize?: TabSizeProperty<TLength> | TabSizeProperty<TLength>[],\n  tableLayout?: TableLayoutProperty | TableLayoutProperty[],\n  textAlign?: TextAlignProperty | TextAlignProperty[],\n  textAlignLast?: TextAlignLastProperty | TextAlignLastProperty[],\n  textCombineUpright?: TextCombineUprightProperty | TextCombineUprightProperty[],\n  textDecorationColor?: TextDecorationColorProperty | TextDecorationColorProperty[],\n  textDecorationLine?: TextDecorationLineProperty | TextDecorationLineProperty[],\n  textDecorationSkip?: TextDecorationSkipProperty | TextDecorationSkipProperty[],\n  textDecorationSkipInk?: TextDecorationSkipInkProperty | TextDecorationSkipInkProperty[],\n  textDecorationStyle?: TextDecorationStyleProperty | TextDecorationStyleProperty[],\n  textDecorationThickness?: TextDecorationThicknessProperty<TLength> | TextDecorationThicknessProperty<TLength>[],\n  textDecorationWidth?: TextDecorationThicknessProperty<TLength> | TextDecorationThicknessProperty<TLength>[],\n  textEmphasisColor?: TextEmphasisColorProperty | TextEmphasisColorProperty[],\n  textEmphasisPosition?: GlobalsString | GlobalsString[],\n  textEmphasisStyle?: TextEmphasisStyleProperty | TextEmphasisStyleProperty[],\n  textIndent?: TextIndentProperty<TLength> | TextIndentProperty<TLength>[],\n  textJustify?: TextJustifyProperty | TextJustifyProperty[],\n  textOrientation?: TextOrientationProperty | TextOrientationProperty[],\n  textOverflow?: TextOverflowProperty | TextOverflowProperty[],\n  textRendering?: TextRenderingProperty | TextRenderingProperty[],\n  textShadow?: TextShadowProperty | TextShadowProperty[],\n  textSizeAdjust?: TextSizeAdjustProperty | TextSizeAdjustProperty[],\n  textTransform?: TextTransformProperty | TextTransformProperty[],\n  textUnderlineOffset?: TextUnderlineOffsetProperty<TLength> | TextUnderlineOffsetProperty<TLength>[],\n  textUnderlinePosition?: TextUnderlinePositionProperty | TextUnderlinePositionProperty[],\n  top?: TopProperty<TLength> | TopProperty<TLength>[],\n  touchAction?: TouchActionProperty | TouchActionProperty[],\n  transform?: TransformProperty | TransformProperty[],\n  transformBox?: TransformBoxProperty | TransformBoxProperty[],\n  transformOrigin?: TransformOriginProperty<TLength> | TransformOriginProperty<TLength>[],\n  transformStyle?: TransformStyleProperty | TransformStyleProperty[],\n  transitionDelay?: GlobalsString | GlobalsString[],\n  transitionDuration?: GlobalsString | GlobalsString[],\n  transitionProperty?: TransitionPropertyProperty | TransitionPropertyProperty[],\n  transitionTimingFunction?: TransitionTimingFunctionProperty | TransitionTimingFunctionProperty[],\n  translate?: TranslateProperty<TLength> | TranslateProperty<TLength>[],\n  unicodeBidi?: UnicodeBidiProperty | UnicodeBidiProperty[],\n  userSelect?: UserSelectProperty | UserSelectProperty[],\n  verticalAlign?: VerticalAlignProperty<TLength> | VerticalAlignProperty<TLength>[],\n  visibility?: VisibilityProperty | VisibilityProperty[],\n  whiteSpace?: WhiteSpaceProperty | WhiteSpaceProperty[],\n  widows?: GlobalsNumber | GlobalsNumber[],\n  width?: WidthProperty<TLength> | WidthProperty<TLength>[],\n  willChange?: WillChangeProperty | WillChangeProperty[],\n  wordBreak?: WordBreakProperty | WordBreakProperty[],\n  wordSpacing?: WordSpacingProperty<TLength> | WordSpacingProperty<TLength>[],\n  wordWrap?: WordWrapProperty | WordWrapProperty[],\n  writingMode?: WritingModeProperty | WritingModeProperty[],\n  zIndex?: ZIndexProperty | ZIndexProperty[],\n  zoom?: ZoomProperty | ZoomProperty[],\n};\n\nexport type StandardShorthandPropertiesFallback<TLength = string | 0> = {\n  all?: Globals | Globals[],\n  animation?: AnimationProperty | AnimationProperty[],\n  background?: BackgroundProperty<TLength> | BackgroundProperty<TLength>[],\n  border?: BorderProperty<TLength> | BorderProperty<TLength>[],\n  borderBlock?: BorderBlockProperty<TLength> | BorderBlockProperty<TLength>[],\n  borderBlockEnd?: BorderBlockEndProperty<TLength> | BorderBlockEndProperty<TLength>[],\n  borderBlockStart?: BorderBlockStartProperty<TLength> | BorderBlockStartProperty<TLength>[],\n  borderBottom?: BorderBottomProperty<TLength> | BorderBottomProperty<TLength>[],\n  borderColor?: BorderColorProperty | BorderColorProperty[],\n  borderImage?: BorderImageProperty | BorderImageProperty[],\n  borderInline?: BorderInlineProperty<TLength> | BorderInlineProperty<TLength>[],\n  borderInlineEnd?: BorderInlineEndProperty<TLength> | BorderInlineEndProperty<TLength>[],\n  borderInlineStart?: BorderInlineStartProperty<TLength> | BorderInlineStartProperty<TLength>[],\n  borderLeft?: BorderLeftProperty<TLength> | BorderLeftProperty<TLength>[],\n  borderRadius?: BorderRadiusProperty<TLength> | BorderRadiusProperty<TLength>[],\n  borderRight?: BorderRightProperty<TLength> | BorderRightProperty<TLength>[],\n  borderStyle?: BorderStyleProperty | BorderStyleProperty[],\n  borderTop?: BorderTopProperty<TLength> | BorderTopProperty<TLength>[],\n  borderWidth?: BorderWidthProperty<TLength> | BorderWidthProperty<TLength>[],\n  columnRule?: ColumnRuleProperty<TLength> | ColumnRuleProperty<TLength>[],\n  columns?: ColumnsProperty<TLength> | ColumnsProperty<TLength>[],\n  flex?: FlexProperty<TLength> | FlexProperty<TLength>[],\n  flexFlow?: FlexFlowProperty | FlexFlowProperty[],\n  font?: FontProperty | FontProperty[],\n  gap?: GapProperty<TLength> | GapProperty<TLength>[],\n  grid?: GridProperty | GridProperty[],\n  gridArea?: GridAreaProperty | GridAreaProperty[],\n  gridColumn?: GridColumnProperty | GridColumnProperty[],\n  gridRow?: GridRowProperty | GridRowProperty[],\n  gridTemplate?: GridTemplateProperty | GridTemplateProperty[],\n  lineClamp?: LineClampProperty | LineClampProperty[],\n  listStyle?: ListStyleProperty | ListStyleProperty[],\n  margin?: MarginProperty<TLength> | MarginProperty<TLength>[],\n  mask?: MaskProperty<TLength> | MaskProperty<TLength>[],\n  maskBorder?: MaskBorderProperty | MaskBorderProperty[],\n  motion?: OffsetProperty<TLength> | OffsetProperty<TLength>[],\n  offset?: OffsetProperty<TLength> | OffsetProperty<TLength>[],\n  outline?: OutlineProperty<TLength> | OutlineProperty<TLength>[],\n  padding?: PaddingProperty<TLength> | PaddingProperty<TLength>[],\n  placeItems?: PlaceItemsProperty | PlaceItemsProperty[],\n  placeSelf?: PlaceSelfProperty | PlaceSelfProperty[],\n  textDecoration?: TextDecorationProperty<TLength> | TextDecorationProperty<TLength>[],\n  textEmphasis?: TextEmphasisProperty | TextEmphasisProperty[],\n  transition?: TransitionProperty | TransitionProperty[],\n};\n\nexport type StandardPropertiesFallback<TLength = string | 0> = StandardLonghandPropertiesFallback<TLength> & StandardShorthandPropertiesFallback<TLength>;\n\nexport type VendorLonghandPropertiesFallback<TLength = string | 0> = {\n  MozAnimationDelay?: GlobalsString | GlobalsString[],\n  MozAnimationDirection?: AnimationDirectionProperty | AnimationDirectionProperty[],\n  MozAnimationDuration?: GlobalsString | GlobalsString[],\n  MozAnimationFillMode?: AnimationFillModeProperty | AnimationFillModeProperty[],\n  MozAnimationIterationCount?: AnimationIterationCountProperty | AnimationIterationCountProperty[],\n  MozAnimationName?: AnimationNameProperty | AnimationNameProperty[],\n  MozAnimationPlayState?: AnimationPlayStateProperty | AnimationPlayStateProperty[],\n  MozAnimationTimingFunction?: AnimationTimingFunctionProperty | AnimationTimingFunctionProperty[],\n  MozAppearance?: MozAppearanceProperty | MozAppearanceProperty[],\n  MozBackfaceVisibility?: BackfaceVisibilityProperty | BackfaceVisibilityProperty[],\n  MozBorderEndColor?: BorderInlineEndColorProperty | BorderInlineEndColorProperty[],\n  MozBorderEndStyle?: BorderInlineEndStyleProperty | BorderInlineEndStyleProperty[],\n  MozBorderEndWidth?: BorderInlineEndWidthProperty<TLength> | BorderInlineEndWidthProperty<TLength>[],\n  MozBorderStartColor?: BorderInlineStartColorProperty | BorderInlineStartColorProperty[],\n  MozBorderStartStyle?: BorderInlineStartStyleProperty | BorderInlineStartStyleProperty[],\n  MozBoxSizing?: BoxSizingProperty | BoxSizingProperty[],\n  MozColumnCount?: ColumnCountProperty | ColumnCountProperty[],\n  MozColumnFill?: ColumnFillProperty | ColumnFillProperty[],\n  MozColumnGap?: ColumnGapProperty<TLength> | ColumnGapProperty<TLength>[],\n  MozColumnRuleColor?: ColumnRuleColorProperty | ColumnRuleColorProperty[],\n  MozColumnRuleStyle?: ColumnRuleStyleProperty | ColumnRuleStyleProperty[],\n  MozColumnRuleWidth?: ColumnRuleWidthProperty<TLength> | ColumnRuleWidthProperty<TLength>[],\n  MozColumnWidth?: ColumnWidthProperty<TLength> | ColumnWidthProperty<TLength>[],\n  MozContextProperties?: MozContextPropertiesProperty | MozContextPropertiesProperty[],\n  MozFloatEdge?: MozFloatEdgeProperty | MozFloatEdgeProperty[],\n  MozFontFeatureSettings?: FontFeatureSettingsProperty | FontFeatureSettingsProperty[],\n  MozFontLanguageOverride?: FontLanguageOverrideProperty | FontLanguageOverrideProperty[],\n  MozForceBrokenImageIcon?: GlobalsNumber | GlobalsNumber[],\n  MozHyphens?: HyphensProperty | HyphensProperty[],\n  MozImageRegion?: MozImageRegionProperty | MozImageRegionProperty[],\n  MozMarginEnd?: MarginInlineEndProperty<TLength> | MarginInlineEndProperty<TLength>[],\n  MozMarginStart?: MarginInlineStartProperty<TLength> | MarginInlineStartProperty<TLength>[],\n  MozOrient?: MozOrientProperty | MozOrientProperty[],\n  MozOutlineRadiusBottomleft?: MozOutlineRadiusBottomleftProperty<TLength> | MozOutlineRadiusBottomleftProperty<TLength>[],\n  MozOutlineRadiusBottomright?: MozOutlineRadiusBottomrightProperty<TLength> | MozOutlineRadiusBottomrightProperty<TLength>[],\n  MozOutlineRadiusTopleft?: MozOutlineRadiusTopleftProperty<TLength> | MozOutlineRadiusTopleftProperty<TLength>[],\n  MozOutlineRadiusTopright?: MozOutlineRadiusToprightProperty<TLength> | MozOutlineRadiusToprightProperty<TLength>[],\n  MozPaddingEnd?: PaddingInlineEndProperty<TLength> | PaddingInlineEndProperty<TLength>[],\n  MozPaddingStart?: PaddingInlineStartProperty<TLength> | PaddingInlineStartProperty<TLength>[],\n  MozPerspective?: PerspectiveProperty<TLength> | PerspectiveProperty<TLength>[],\n  MozPerspectiveOrigin?: PerspectiveOriginProperty<TLength> | PerspectiveOriginProperty<TLength>[],\n  MozStackSizing?: MozStackSizingProperty | MozStackSizingProperty[],\n  MozTabSize?: TabSizeProperty<TLength> | TabSizeProperty<TLength>[],\n  MozTextSizeAdjust?: TextSizeAdjustProperty | TextSizeAdjustProperty[],\n  MozTransformOrigin?: TransformOriginProperty<TLength> | TransformOriginProperty<TLength>[],\n  MozTransformStyle?: TransformStyleProperty | TransformStyleProperty[],\n  MozTransitionDelay?: GlobalsString | GlobalsString[],\n  MozTransitionDuration?: GlobalsString | GlobalsString[],\n  MozTransitionProperty?: TransitionPropertyProperty | TransitionPropertyProperty[],\n  MozTransitionTimingFunction?: TransitionTimingFunctionProperty | TransitionTimingFunctionProperty[],\n  MozUserFocus?: MozUserFocusProperty | MozUserFocusProperty[],\n  MozUserModify?: MozUserModifyProperty | MozUserModifyProperty[],\n  MozUserSelect?: UserSelectProperty | UserSelectProperty[],\n  MozWindowDragging?: MozWindowDraggingProperty | MozWindowDraggingProperty[],\n  msAccelerator?: MsAcceleratorProperty | MsAcceleratorProperty[],\n  msAlignSelf?: AlignSelfProperty | AlignSelfProperty[],\n  msBlockProgression?: MsBlockProgressionProperty | MsBlockProgressionProperty[],\n  msContentZoomChaining?: MsContentZoomChainingProperty | MsContentZoomChainingProperty[],\n  msContentZoomLimitMax?: GlobalsString | GlobalsString[],\n  msContentZoomLimitMin?: GlobalsString | GlobalsString[],\n  msContentZoomSnapPoints?: GlobalsString | GlobalsString[],\n  msContentZoomSnapType?: MsContentZoomSnapTypeProperty | MsContentZoomSnapTypeProperty[],\n  msContentZooming?: MsContentZoomingProperty | MsContentZoomingProperty[],\n  msFilter?: GlobalsString | GlobalsString[],\n  msFlexDirection?: FlexDirectionProperty | FlexDirectionProperty[],\n  msFlexPositive?: GlobalsNumber | GlobalsNumber[],\n  msFlowFrom?: MsFlowFromProperty | MsFlowFromProperty[],\n  msFlowInto?: MsFlowIntoProperty | MsFlowIntoProperty[],\n  msGridColumns?: GridAutoColumnsProperty<TLength> | GridAutoColumnsProperty<TLength>[],\n  msGridRows?: GridAutoRowsProperty<TLength> | GridAutoRowsProperty<TLength>[],\n  msHighContrastAdjust?: MsHighContrastAdjustProperty | MsHighContrastAdjustProperty[],\n  msHyphenateLimitChars?: MsHyphenateLimitCharsProperty | MsHyphenateLimitCharsProperty[],\n  msHyphenateLimitLines?: MsHyphenateLimitLinesProperty | MsHyphenateLimitLinesProperty[],\n  msHyphenateLimitZone?: MsHyphenateLimitZoneProperty<TLength> | MsHyphenateLimitZoneProperty<TLength>[],\n  msHyphens?: HyphensProperty | HyphensProperty[],\n  msImeAlign?: MsImeAlignProperty | MsImeAlignProperty[],\n  msLineBreak?: LineBreakProperty | LineBreakProperty[],\n  msOrder?: GlobalsNumber | GlobalsNumber[],\n  msOverflowStyle?: MsOverflowStyleProperty | MsOverflowStyleProperty[],\n  msOverflowX?: OverflowXProperty | OverflowXProperty[],\n  msOverflowY?: OverflowYProperty | OverflowYProperty[],\n  msScrollChaining?: MsScrollChainingProperty | MsScrollChainingProperty[],\n  msScrollLimitXMax?: MsScrollLimitXMaxProperty<TLength> | MsScrollLimitXMaxProperty<TLength>[],\n  msScrollLimitXMin?: MsScrollLimitXMinProperty<TLength> | MsScrollLimitXMinProperty<TLength>[],\n  msScrollLimitYMax?: MsScrollLimitYMaxProperty<TLength> | MsScrollLimitYMaxProperty<TLength>[],\n  msScrollLimitYMin?: MsScrollLimitYMinProperty<TLength> | MsScrollLimitYMinProperty<TLength>[],\n  msScrollRails?: MsScrollRailsProperty | MsScrollRailsProperty[],\n  msScrollSnapPointsX?: GlobalsString | GlobalsString[],\n  msScrollSnapPointsY?: GlobalsString | GlobalsString[],\n  msScrollSnapType?: MsScrollSnapTypeProperty | MsScrollSnapTypeProperty[],\n  msScrollTranslation?: MsScrollTranslationProperty | MsScrollTranslationProperty[],\n  msScrollbar3dlightColor?: MsScrollbar3dlightColorProperty | MsScrollbar3dlightColorProperty[],\n  msScrollbarArrowColor?: MsScrollbarArrowColorProperty | MsScrollbarArrowColorProperty[],\n  msScrollbarBaseColor?: MsScrollbarBaseColorProperty | MsScrollbarBaseColorProperty[],\n  msScrollbarDarkshadowColor?: MsScrollbarDarkshadowColorProperty | MsScrollbarDarkshadowColorProperty[],\n  msScrollbarFaceColor?: MsScrollbarFaceColorProperty | MsScrollbarFaceColorProperty[],\n  msScrollbarHighlightColor?: MsScrollbarHighlightColorProperty | MsScrollbarHighlightColorProperty[],\n  msScrollbarShadowColor?: MsScrollbarShadowColorProperty | MsScrollbarShadowColorProperty[],\n  msTextAutospace?: MsTextAutospaceProperty | MsTextAutospaceProperty[],\n  msTextCombineHorizontal?: TextCombineUprightProperty | TextCombineUprightProperty[],\n  msTextOverflow?: TextOverflowProperty | TextOverflowProperty[],\n  msTouchAction?: TouchActionProperty | TouchActionProperty[],\n  msTouchSelect?: MsTouchSelectProperty | MsTouchSelectProperty[],\n  msTransform?: TransformProperty | TransformProperty[],\n  msTransformOrigin?: TransformOriginProperty<TLength> | TransformOriginProperty<TLength>[],\n  msTransitionDelay?: GlobalsString | GlobalsString[],\n  msTransitionDuration?: GlobalsString | GlobalsString[],\n  msTransitionProperty?: TransitionPropertyProperty | TransitionPropertyProperty[],\n  msTransitionTimingFunction?: TransitionTimingFunctionProperty | TransitionTimingFunctionProperty[],\n  msUserSelect?: MsUserSelectProperty | MsUserSelectProperty[],\n  msWordBreak?: WordBreakProperty | WordBreakProperty[],\n  msWrapFlow?: MsWrapFlowProperty | MsWrapFlowProperty[],\n  msWrapMargin?: MsWrapMarginProperty<TLength> | MsWrapMarginProperty<TLength>[],\n  msWrapThrough?: MsWrapThroughProperty | MsWrapThroughProperty[],\n  msWritingMode?: WritingModeProperty | WritingModeProperty[],\n  OObjectFit?: ObjectFitProperty | ObjectFitProperty[],\n  OObjectPosition?: ObjectPositionProperty<TLength> | ObjectPositionProperty<TLength>[],\n  OTabSize?: TabSizeProperty<TLength> | TabSizeProperty<TLength>[],\n  OTextOverflow?: TextOverflowProperty | TextOverflowProperty[],\n  OTransformOrigin?: TransformOriginProperty<TLength> | TransformOriginProperty<TLength>[],\n  WebkitAlignContent?: AlignContentProperty | AlignContentProperty[],\n  WebkitAlignItems?: AlignItemsProperty | AlignItemsProperty[],\n  WebkitAlignSelf?: AlignSelfProperty | AlignSelfProperty[],\n  WebkitAnimationDelay?: GlobalsString | GlobalsString[],\n  WebkitAnimationDirection?: AnimationDirectionProperty | AnimationDirectionProperty[],\n  WebkitAnimationDuration?: GlobalsString | GlobalsString[],\n  WebkitAnimationFillMode?: AnimationFillModeProperty | AnimationFillModeProperty[],\n  WebkitAnimationIterationCount?: AnimationIterationCountProperty | AnimationIterationCountProperty[],\n  WebkitAnimationName?: AnimationNameProperty | AnimationNameProperty[],\n  WebkitAnimationPlayState?: AnimationPlayStateProperty | AnimationPlayStateProperty[],\n  WebkitAnimationTimingFunction?: AnimationTimingFunctionProperty | AnimationTimingFunctionProperty[],\n  WebkitAppearance?: WebkitAppearanceProperty | WebkitAppearanceProperty[],\n  WebkitBackdropFilter?: BackdropFilterProperty | BackdropFilterProperty[],\n  WebkitBackfaceVisibility?: BackfaceVisibilityProperty | BackfaceVisibilityProperty[],\n  WebkitBackgroundClip?: BackgroundClipProperty | BackgroundClipProperty[],\n  WebkitBackgroundOrigin?: BackgroundOriginProperty | BackgroundOriginProperty[],\n  WebkitBackgroundSize?: BackgroundSizeProperty<TLength> | BackgroundSizeProperty<TLength>[],\n  WebkitBorderBeforeColor?: WebkitBorderBeforeColorProperty | WebkitBorderBeforeColorProperty[],\n  WebkitBorderBeforeStyle?: WebkitBorderBeforeStyleProperty | WebkitBorderBeforeStyleProperty[],\n  WebkitBorderBeforeWidth?: WebkitBorderBeforeWidthProperty<TLength> | WebkitBorderBeforeWidthProperty<TLength>[],\n  WebkitBorderBottomLeftRadius?: BorderBottomLeftRadiusProperty<TLength> | BorderBottomLeftRadiusProperty<TLength>[],\n  WebkitBorderBottomRightRadius?: BorderBottomRightRadiusProperty<TLength> | BorderBottomRightRadiusProperty<TLength>[],\n  WebkitBorderImageSlice?: BorderImageSliceProperty | BorderImageSliceProperty[],\n  WebkitBorderTopLeftRadius?: BorderTopLeftRadiusProperty<TLength> | BorderTopLeftRadiusProperty<TLength>[],\n  WebkitBorderTopRightRadius?: BorderTopRightRadiusProperty<TLength> | BorderTopRightRadiusProperty<TLength>[],\n  WebkitBoxDecorationBreak?: BoxDecorationBreakProperty | BoxDecorationBreakProperty[],\n  WebkitBoxReflect?: WebkitBoxReflectProperty<TLength> | WebkitBoxReflectProperty<TLength>[],\n  WebkitBoxShadow?: BoxShadowProperty | BoxShadowProperty[],\n  WebkitBoxSizing?: BoxSizingProperty | BoxSizingProperty[],\n  WebkitClipPath?: ClipPathProperty | ClipPathProperty[],\n  WebkitColorAdjust?: ColorAdjustProperty | ColorAdjustProperty[],\n  WebkitColumnCount?: ColumnCountProperty | ColumnCountProperty[],\n  WebkitColumnFill?: ColumnFillProperty | ColumnFillProperty[],\n  WebkitColumnGap?: ColumnGapProperty<TLength> | ColumnGapProperty<TLength>[],\n  WebkitColumnRuleColor?: ColumnRuleColorProperty | ColumnRuleColorProperty[],\n  WebkitColumnRuleStyle?: ColumnRuleStyleProperty | ColumnRuleStyleProperty[],\n  WebkitColumnRuleWidth?: ColumnRuleWidthProperty<TLength> | ColumnRuleWidthProperty<TLength>[],\n  WebkitColumnSpan?: ColumnSpanProperty | ColumnSpanProperty[],\n  WebkitColumnWidth?: ColumnWidthProperty<TLength> | ColumnWidthProperty<TLength>[],\n  WebkitFilter?: FilterProperty | FilterProperty[],\n  WebkitFlexBasis?: FlexBasisProperty<TLength> | FlexBasisProperty<TLength>[],\n  WebkitFlexDirection?: FlexDirectionProperty | FlexDirectionProperty[],\n  WebkitFlexGrow?: GlobalsNumber | GlobalsNumber[],\n  WebkitFlexShrink?: GlobalsNumber | GlobalsNumber[],\n  WebkitFlexWrap?: FlexWrapProperty | FlexWrapProperty[],\n  WebkitFontFeatureSettings?: FontFeatureSettingsProperty | FontFeatureSettingsProperty[],\n  WebkitFontKerning?: FontKerningProperty | FontKerningProperty[],\n  WebkitFontVariantLigatures?: FontVariantLigaturesProperty | FontVariantLigaturesProperty[],\n  WebkitHyphens?: HyphensProperty | HyphensProperty[],\n  WebkitJustifyContent?: JustifyContentProperty | JustifyContentProperty[],\n  WebkitLineBreak?: LineBreakProperty | LineBreakProperty[],\n  WebkitLineClamp?: WebkitLineClampProperty | WebkitLineClampProperty[],\n  WebkitMarginEnd?: MarginInlineEndProperty<TLength> | MarginInlineEndProperty<TLength>[],\n  WebkitMarginStart?: MarginInlineStartProperty<TLength> | MarginInlineStartProperty<TLength>[],\n  WebkitMaskAttachment?: WebkitMaskAttachmentProperty | WebkitMaskAttachmentProperty[],\n  WebkitMaskClip?: WebkitMaskClipProperty | WebkitMaskClipProperty[],\n  WebkitMaskComposite?: WebkitMaskCompositeProperty | WebkitMaskCompositeProperty[],\n  WebkitMaskImage?: WebkitMaskImageProperty | WebkitMaskImageProperty[],\n  WebkitMaskOrigin?: WebkitMaskOriginProperty | WebkitMaskOriginProperty[],\n  WebkitMaskPosition?: WebkitMaskPositionProperty<TLength> | WebkitMaskPositionProperty<TLength>[],\n  WebkitMaskPositionX?: WebkitMaskPositionXProperty<TLength> | WebkitMaskPositionXProperty<TLength>[],\n  WebkitMaskPositionY?: WebkitMaskPositionYProperty<TLength> | WebkitMaskPositionYProperty<TLength>[],\n  WebkitMaskRepeat?: WebkitMaskRepeatProperty | WebkitMaskRepeatProperty[],\n  WebkitMaskRepeatX?: WebkitMaskRepeatXProperty | WebkitMaskRepeatXProperty[],\n  WebkitMaskRepeatY?: WebkitMaskRepeatYProperty | WebkitMaskRepeatYProperty[],\n  WebkitMaskSize?: WebkitMaskSizeProperty<TLength> | WebkitMaskSizeProperty<TLength>[],\n  WebkitMaxInlineSize?: MaxInlineSizeProperty<TLength> | MaxInlineSizeProperty<TLength>[],\n  WebkitOrder?: GlobalsNumber | GlobalsNumber[],\n  WebkitOverflowScrolling?: WebkitOverflowScrollingProperty | WebkitOverflowScrollingProperty[],\n  WebkitPaddingEnd?: PaddingInlineEndProperty<TLength> | PaddingInlineEndProperty<TLength>[],\n  WebkitPaddingStart?: PaddingInlineStartProperty<TLength> | PaddingInlineStartProperty<TLength>[],\n  WebkitPerspective?: PerspectiveProperty<TLength> | PerspectiveProperty<TLength>[],\n  WebkitPerspectiveOrigin?: PerspectiveOriginProperty<TLength> | PerspectiveOriginProperty<TLength>[],\n  WebkitScrollSnapType?: ScrollSnapTypeProperty | ScrollSnapTypeProperty[],\n  WebkitShapeMargin?: ShapeMarginProperty<TLength> | ShapeMarginProperty<TLength>[],\n  WebkitTapHighlightColor?: WebkitTapHighlightColorProperty | WebkitTapHighlightColorProperty[],\n  WebkitTextCombine?: TextCombineUprightProperty | TextCombineUprightProperty[],\n  WebkitTextDecorationColor?: TextDecorationColorProperty | TextDecorationColorProperty[],\n  WebkitTextDecorationLine?: TextDecorationLineProperty | TextDecorationLineProperty[],\n  WebkitTextDecorationSkip?: TextDecorationSkipProperty | TextDecorationSkipProperty[],\n  WebkitTextDecorationStyle?: TextDecorationStyleProperty | TextDecorationStyleProperty[],\n  WebkitTextEmphasisColor?: TextEmphasisColorProperty | TextEmphasisColorProperty[],\n  WebkitTextEmphasisPosition?: GlobalsString | GlobalsString[],\n  WebkitTextEmphasisStyle?: TextEmphasisStyleProperty | TextEmphasisStyleProperty[],\n  WebkitTextFillColor?: WebkitTextFillColorProperty | WebkitTextFillColorProperty[],\n  WebkitTextOrientation?: TextOrientationProperty | TextOrientationProperty[],\n  WebkitTextSizeAdjust?: TextSizeAdjustProperty | TextSizeAdjustProperty[],\n  WebkitTextStrokeColor?: WebkitTextStrokeColorProperty | WebkitTextStrokeColorProperty[],\n  WebkitTextStrokeWidth?: WebkitTextStrokeWidthProperty<TLength> | WebkitTextStrokeWidthProperty<TLength>[],\n  WebkitTouchCallout?: WebkitTouchCalloutProperty | WebkitTouchCalloutProperty[],\n  WebkitTransform?: TransformProperty | TransformProperty[],\n  WebkitTransformOrigin?: TransformOriginProperty<TLength> | TransformOriginProperty<TLength>[],\n  WebkitTransformStyle?: TransformStyleProperty | TransformStyleProperty[],\n  WebkitTransitionDelay?: GlobalsString | GlobalsString[],\n  WebkitTransitionDuration?: GlobalsString | GlobalsString[],\n  WebkitTransitionProperty?: TransitionPropertyProperty | TransitionPropertyProperty[],\n  WebkitTransitionTimingFunction?: TransitionTimingFunctionProperty | TransitionTimingFunctionProperty[],\n  WebkitUserModify?: WebkitUserModifyProperty | WebkitUserModifyProperty[],\n  WebkitUserSelect?: UserSelectProperty | UserSelectProperty[],\n  WebkitWritingMode?: WritingModeProperty | WritingModeProperty[],\n};\n\nexport type VendorShorthandPropertiesFallback<TLength = string | 0> = {\n  MozAnimation?: AnimationProperty | AnimationProperty[],\n  MozBorderImage?: BorderImageProperty | BorderImageProperty[],\n  MozColumnRule?: ColumnRuleProperty<TLength> | ColumnRuleProperty<TLength>[],\n  MozColumns?: ColumnsProperty<TLength> | ColumnsProperty<TLength>[],\n  MozTransition?: TransitionProperty | TransitionProperty[],\n  msContentZoomLimit?: GlobalsString | GlobalsString[],\n  msContentZoomSnap?: MsContentZoomSnapProperty | MsContentZoomSnapProperty[],\n  msFlex?: FlexProperty<TLength> | FlexProperty<TLength>[],\n  msScrollLimit?: GlobalsString | GlobalsString[],\n  msScrollSnapX?: GlobalsString | GlobalsString[],\n  msScrollSnapY?: GlobalsString | GlobalsString[],\n  msTransition?: TransitionProperty | TransitionProperty[],\n  WebkitAnimation?: AnimationProperty | AnimationProperty[],\n  WebkitBorderBefore?: WebkitBorderBeforeProperty<TLength> | WebkitBorderBeforeProperty<TLength>[],\n  WebkitBorderImage?: BorderImageProperty | BorderImageProperty[],\n  WebkitBorderRadius?: BorderRadiusProperty<TLength> | BorderRadiusProperty<TLength>[],\n  WebkitColumnRule?: ColumnRuleProperty<TLength> | ColumnRuleProperty<TLength>[],\n  WebkitColumns?: ColumnsProperty<TLength> | ColumnsProperty<TLength>[],\n  WebkitFlex?: FlexProperty<TLength> | FlexProperty<TLength>[],\n  WebkitFlexFlow?: FlexFlowProperty | FlexFlowProperty[],\n  WebkitMask?: WebkitMaskProperty<TLength> | WebkitMaskProperty<TLength>[],\n  WebkitTextEmphasis?: TextEmphasisProperty | TextEmphasisProperty[],\n  WebkitTextStroke?: WebkitTextStrokeProperty<TLength> | WebkitTextStrokeProperty<TLength>[],\n  WebkitTransition?: TransitionProperty | TransitionProperty[],\n};\n\nexport type VendorPropertiesFallback<TLength = string | 0> = VendorLonghandPropertiesFallback<TLength> & VendorShorthandPropertiesFallback<TLength>;\n\nexport type ObsoletePropertiesFallback<TLength = string | 0> = {\n  boxAlign?: BoxAlignProperty | BoxAlignProperty[],\n  boxDirection?: BoxDirectionProperty | BoxDirectionProperty[],\n  boxFlex?: GlobalsNumber | GlobalsNumber[],\n  boxFlexGroup?: GlobalsNumber | GlobalsNumber[],\n  boxLines?: BoxLinesProperty | BoxLinesProperty[],\n  boxOrdinalGroup?: GlobalsNumber | GlobalsNumber[],\n  boxOrient?: BoxOrientProperty | BoxOrientProperty[],\n  boxPack?: BoxPackProperty | BoxPackProperty[],\n  clip?: ClipProperty | ClipProperty[],\n  fontVariantAlternates?: FontVariantAlternatesProperty | FontVariantAlternatesProperty[],\n  gridColumnGap?: GridColumnGapProperty<TLength> | GridColumnGapProperty<TLength>[],\n  gridGap?: GridGapProperty<TLength> | GridGapProperty<TLength>[],\n  gridRowGap?: GridRowGapProperty<TLength> | GridRowGapProperty<TLength>[],\n  imeMode?: ImeModeProperty | ImeModeProperty[],\n  offsetBlock?: InsetBlockProperty<TLength> | InsetBlockProperty<TLength>[],\n  offsetBlockEnd?: InsetBlockEndProperty<TLength> | InsetBlockEndProperty<TLength>[],\n  offsetBlockStart?: InsetBlockStartProperty<TLength> | InsetBlockStartProperty<TLength>[],\n  offsetInline?: InsetInlineProperty<TLength> | InsetInlineProperty<TLength>[],\n  offsetInlineEnd?: InsetInlineEndProperty<TLength> | InsetInlineEndProperty<TLength>[],\n  offsetInlineStart?: InsetInlineStartProperty<TLength> | InsetInlineStartProperty<TLength>[],\n  scrollSnapCoordinate?: ScrollSnapCoordinateProperty<TLength> | ScrollSnapCoordinateProperty<TLength>[],\n  scrollSnapDestination?: ScrollSnapDestinationProperty<TLength> | ScrollSnapDestinationProperty<TLength>[],\n  scrollSnapPointsX?: ScrollSnapPointsXProperty | ScrollSnapPointsXProperty[],\n  scrollSnapPointsY?: ScrollSnapPointsYProperty | ScrollSnapPointsYProperty[],\n  scrollSnapTypeX?: ScrollSnapTypeXProperty | ScrollSnapTypeXProperty[],\n  scrollSnapTypeY?: ScrollSnapTypeYProperty | ScrollSnapTypeYProperty[],\n  scrollbarTrackColor?: MsScrollbarTrackColorProperty | MsScrollbarTrackColorProperty[],\n  textCombineHorizontal?: TextCombineUprightProperty | TextCombineUprightProperty[],\n  KhtmlBoxAlign?: BoxAlignProperty | BoxAlignProperty[],\n  KhtmlBoxDirection?: BoxDirectionProperty | BoxDirectionProperty[],\n  KhtmlBoxFlex?: GlobalsNumber | GlobalsNumber[],\n  KhtmlBoxFlexGroup?: GlobalsNumber | GlobalsNumber[],\n  KhtmlBoxLines?: BoxLinesProperty | BoxLinesProperty[],\n  KhtmlBoxOrdinalGroup?: GlobalsNumber | GlobalsNumber[],\n  KhtmlBoxOrient?: BoxOrientProperty | BoxOrientProperty[],\n  KhtmlBoxPack?: BoxPackProperty | BoxPackProperty[],\n  KhtmlLineBreak?: LineBreakProperty | LineBreakProperty[],\n  KhtmlOpacity?: OpacityProperty | OpacityProperty[],\n  KhtmlUserSelect?: UserSelectProperty | UserSelectProperty[],\n  MozBackgroundClip?: BackgroundClipProperty | BackgroundClipProperty[],\n  MozBackgroundInlinePolicy?: BoxDecorationBreakProperty | BoxDecorationBreakProperty[],\n  MozBackgroundOrigin?: BackgroundOriginProperty | BackgroundOriginProperty[],\n  MozBackgroundSize?: BackgroundSizeProperty<TLength> | BackgroundSizeProperty<TLength>[],\n  MozBinding?: MozBindingProperty | MozBindingProperty[],\n  MozBorderBottomColors?: MozBorderBottomColorsProperty | MozBorderBottomColorsProperty[],\n  MozBorderLeftColors?: MozBorderLeftColorsProperty | MozBorderLeftColorsProperty[],\n  MozBorderRadius?: BorderRadiusProperty<TLength> | BorderRadiusProperty<TLength>[],\n  MozBorderRadiusBottomleft?: BorderBottomLeftRadiusProperty<TLength> | BorderBottomLeftRadiusProperty<TLength>[],\n  MozBorderRadiusBottomright?: BorderBottomRightRadiusProperty<TLength> | BorderBottomRightRadiusProperty<TLength>[],\n  MozBorderRadiusTopleft?: BorderTopLeftRadiusProperty<TLength> | BorderTopLeftRadiusProperty<TLength>[],\n  MozBorderRadiusTopright?: BorderTopRightRadiusProperty<TLength> | BorderTopRightRadiusProperty<TLength>[],\n  MozBorderRightColors?: MozBorderRightColorsProperty | MozBorderRightColorsProperty[],\n  MozBorderTopColors?: MozBorderTopColorsProperty | MozBorderTopColorsProperty[],\n  MozBoxAlign?: BoxAlignProperty | BoxAlignProperty[],\n  MozBoxDirection?: BoxDirectionProperty | BoxDirectionProperty[],\n  MozBoxFlex?: GlobalsNumber | GlobalsNumber[],\n  MozBoxOrdinalGroup?: GlobalsNumber | GlobalsNumber[],\n  MozBoxOrient?: BoxOrientProperty | BoxOrientProperty[],\n  MozBoxPack?: BoxPackProperty | BoxPackProperty[],\n  MozBoxShadow?: BoxShadowProperty | BoxShadowProperty[],\n  MozOpacity?: OpacityProperty | OpacityProperty[],\n  MozOutline?: OutlineProperty<TLength> | OutlineProperty<TLength>[],\n  MozOutlineColor?: OutlineColorProperty | OutlineColorProperty[],\n  MozOutlineRadius?: MozOutlineRadiusProperty<TLength> | MozOutlineRadiusProperty<TLength>[],\n  MozOutlineStyle?: OutlineStyleProperty | OutlineStyleProperty[],\n  MozOutlineWidth?: OutlineWidthProperty<TLength> | OutlineWidthProperty<TLength>[],\n  MozTextAlignLast?: TextAlignLastProperty | TextAlignLastProperty[],\n  MozTextBlink?: MozTextBlinkProperty | MozTextBlinkProperty[],\n  MozTextDecorationColor?: TextDecorationColorProperty | TextDecorationColorProperty[],\n  MozTextDecorationLine?: TextDecorationLineProperty | TextDecorationLineProperty[],\n  MozTextDecorationStyle?: TextDecorationStyleProperty | TextDecorationStyleProperty[],\n  MozUserInput?: MozUserInputProperty | MozUserInputProperty[],\n  MozWindowShadow?: MozWindowShadowProperty | MozWindowShadowProperty[],\n  msImeMode?: ImeModeProperty | ImeModeProperty[],\n  msScrollbarTrackColor?: MsScrollbarTrackColorProperty | MsScrollbarTrackColorProperty[],\n  OAnimation?: AnimationProperty | AnimationProperty[],\n  OAnimationDelay?: GlobalsString | GlobalsString[],\n  OAnimationDirection?: AnimationDirectionProperty | AnimationDirectionProperty[],\n  OAnimationDuration?: GlobalsString | GlobalsString[],\n  OAnimationFillMode?: AnimationFillModeProperty | AnimationFillModeProperty[],\n  OAnimationIterationCount?: AnimationIterationCountProperty | AnimationIterationCountProperty[],\n  OAnimationName?: AnimationNameProperty | AnimationNameProperty[],\n  OAnimationPlayState?: AnimationPlayStateProperty | AnimationPlayStateProperty[],\n  OAnimationTimingFunction?: AnimationTimingFunctionProperty | AnimationTimingFunctionProperty[],\n  OBackgroundSize?: BackgroundSizeProperty<TLength> | BackgroundSizeProperty<TLength>[],\n  OBorderImage?: BorderImageProperty | BorderImageProperty[],\n  OTransform?: TransformProperty | TransformProperty[],\n  OTransition?: TransitionProperty | TransitionProperty[],\n  OTransitionDelay?: GlobalsString | GlobalsString[],\n  OTransitionDuration?: GlobalsString | GlobalsString[],\n  OTransitionProperty?: TransitionPropertyProperty | TransitionPropertyProperty[],\n  OTransitionTimingFunction?: TransitionTimingFunctionProperty | TransitionTimingFunctionProperty[],\n  WebkitBoxAlign?: BoxAlignProperty | BoxAlignProperty[],\n  WebkitBoxDirection?: BoxDirectionProperty | BoxDirectionProperty[],\n  WebkitBoxFlex?: GlobalsNumber | GlobalsNumber[],\n  WebkitBoxFlexGroup?: GlobalsNumber | GlobalsNumber[],\n  WebkitBoxLines?: BoxLinesProperty | BoxLinesProperty[],\n  WebkitBoxOrdinalGroup?: GlobalsNumber | GlobalsNumber[],\n  WebkitBoxOrient?: BoxOrientProperty | BoxOrientProperty[],\n  WebkitBoxPack?: BoxPackProperty | BoxPackProperty[],\n  WebkitScrollSnapPointsX?: ScrollSnapPointsXProperty | ScrollSnapPointsXProperty[],\n  WebkitScrollSnapPointsY?: ScrollSnapPointsYProperty | ScrollSnapPointsYProperty[],\n};\n\nexport type SvgPropertiesFallback<TLength = string | 0> = {\n  alignmentBaseline?: AlignmentBaselineProperty | AlignmentBaselineProperty[],\n  baselineShift?: BaselineShiftProperty<TLength> | BaselineShiftProperty<TLength>[],\n  clip?: ClipProperty | ClipProperty[],\n  clipPath?: ClipPathProperty | ClipPathProperty[],\n  clipRule?: ClipRuleProperty | ClipRuleProperty[],\n  color?: ColorProperty | ColorProperty[],\n  colorInterpolation?: ColorInterpolationProperty | ColorInterpolationProperty[],\n  colorRendering?: ColorRenderingProperty | ColorRenderingProperty[],\n  cursor?: CursorProperty | CursorProperty[],\n  direction?: DirectionProperty | DirectionProperty[],\n  display?: DisplayProperty | DisplayProperty[],\n  dominantBaseline?: DominantBaselineProperty | DominantBaselineProperty[],\n  fill?: FillProperty | FillProperty[],\n  fillOpacity?: GlobalsNumber | GlobalsNumber[],\n  fillRule?: FillRuleProperty | FillRuleProperty[],\n  filter?: FilterProperty | FilterProperty[],\n  floodColor?: FloodColorProperty | FloodColorProperty[],\n  floodOpacity?: GlobalsNumber | GlobalsNumber[],\n  font?: FontProperty | FontProperty[],\n  fontFamily?: FontFamilyProperty | FontFamilyProperty[],\n  fontSize?: FontSizeProperty<TLength> | FontSizeProperty<TLength>[],\n  fontSizeAdjust?: FontSizeAdjustProperty | FontSizeAdjustProperty[],\n  fontStretch?: FontStretchProperty | FontStretchProperty[],\n  fontStyle?: FontStyleProperty | FontStyleProperty[],\n  fontVariant?: FontVariantProperty | FontVariantProperty[],\n  fontWeight?: FontWeightProperty | FontWeightProperty[],\n  glyphOrientationVertical?: GlyphOrientationVerticalProperty | GlyphOrientationVerticalProperty[],\n  imageRendering?: ImageRenderingProperty | ImageRenderingProperty[],\n  letterSpacing?: LetterSpacingProperty<TLength> | LetterSpacingProperty<TLength>[],\n  lightingColor?: LightingColorProperty | LightingColorProperty[],\n  lineHeight?: LineHeightProperty<TLength> | LineHeightProperty<TLength>[],\n  marker?: MarkerProperty | MarkerProperty[],\n  markerEnd?: MarkerEndProperty | MarkerEndProperty[],\n  markerMid?: MarkerMidProperty | MarkerMidProperty[],\n  markerStart?: MarkerStartProperty | MarkerStartProperty[],\n  mask?: MaskProperty<TLength> | MaskProperty<TLength>[],\n  opacity?: OpacityProperty | OpacityProperty[],\n  overflow?: OverflowProperty | OverflowProperty[],\n  paintOrder?: PaintOrderProperty | PaintOrderProperty[],\n  pointerEvents?: PointerEventsProperty | PointerEventsProperty[],\n  shapeRendering?: ShapeRenderingProperty | ShapeRenderingProperty[],\n  stopColor?: StopColorProperty | StopColorProperty[],\n  stopOpacity?: GlobalsNumber | GlobalsNumber[],\n  stroke?: StrokeProperty | StrokeProperty[],\n  strokeDasharray?: StrokeDasharrayProperty<TLength> | StrokeDasharrayProperty<TLength>[],\n  strokeDashoffset?: StrokeDashoffsetProperty<TLength> | StrokeDashoffsetProperty<TLength>[],\n  strokeLinecap?: StrokeLinecapProperty | StrokeLinecapProperty[],\n  strokeLinejoin?: StrokeLinejoinProperty | StrokeLinejoinProperty[],\n  strokeMiterlimit?: GlobalsNumber | GlobalsNumber[],\n  strokeOpacity?: GlobalsNumber | GlobalsNumber[],\n  strokeWidth?: StrokeWidthProperty<TLength> | StrokeWidthProperty<TLength>[],\n  textAnchor?: TextAnchorProperty | TextAnchorProperty[],\n  textDecoration?: TextDecorationProperty<TLength> | TextDecorationProperty<TLength>[],\n  textRendering?: TextRenderingProperty | TextRenderingProperty[],\n  unicodeBidi?: UnicodeBidiProperty | UnicodeBidiProperty[],\n  vectorEffect?: VectorEffectProperty | VectorEffectProperty[],\n  visibility?: VisibilityProperty | VisibilityProperty[],\n  whiteSpace?: WhiteSpaceProperty | WhiteSpaceProperty[],\n  wordSpacing?: WordSpacingProperty<TLength> | WordSpacingProperty<TLength>[],\n  writingMode?: WritingModeProperty | WritingModeProperty[],\n};\n\nexport type PropertiesFallback<TLength = string | 0> = StandardPropertiesFallback<TLength> &\n  VendorPropertiesFallback<TLength> &\n  ObsoletePropertiesFallback<TLength> &\n  SvgPropertiesFallback<TLength>;\n\nexport type StandardLonghandPropertiesHyphenFallback<TLength = string | 0> = {\n  \"align-content\"?: AlignContentProperty | AlignContentProperty[],\n  \"align-items\"?: AlignItemsProperty | AlignItemsProperty[],\n  \"align-self\"?: AlignSelfProperty | AlignSelfProperty[],\n  \"animation-delay\"?: GlobalsString | GlobalsString[],\n  \"animation-direction\"?: AnimationDirectionProperty | AnimationDirectionProperty[],\n  \"animation-duration\"?: GlobalsString | GlobalsString[],\n  \"animation-fill-mode\"?: AnimationFillModeProperty | AnimationFillModeProperty[],\n  \"animation-iteration-count\"?: AnimationIterationCountProperty | AnimationIterationCountProperty[],\n  \"animation-name\"?: AnimationNameProperty | AnimationNameProperty[],\n  \"animation-play-state\"?: AnimationPlayStateProperty | AnimationPlayStateProperty[],\n  \"animation-timing-function\"?: AnimationTimingFunctionProperty | AnimationTimingFunctionProperty[],\n  appearance?: AppearanceProperty | AppearanceProperty[],\n  \"aspect-ratio\"?: AspectRatioProperty | AspectRatioProperty[],\n  \"backdrop-filter\"?: BackdropFilterProperty | BackdropFilterProperty[],\n  \"backface-visibility\"?: BackfaceVisibilityProperty | BackfaceVisibilityProperty[],\n  \"background-attachment\"?: BackgroundAttachmentProperty | BackgroundAttachmentProperty[],\n  \"background-blend-mode\"?: BackgroundBlendModeProperty | BackgroundBlendModeProperty[],\n  \"background-clip\"?: BackgroundClipProperty | BackgroundClipProperty[],\n  \"background-color\"?: BackgroundColorProperty | BackgroundColorProperty[],\n  \"background-image\"?: BackgroundImageProperty | BackgroundImageProperty[],\n  \"background-origin\"?: BackgroundOriginProperty | BackgroundOriginProperty[],\n  \"background-position\"?: BackgroundPositionProperty<TLength> | BackgroundPositionProperty<TLength>[],\n  \"background-position-x\"?: BackgroundPositionXProperty<TLength> | BackgroundPositionXProperty<TLength>[],\n  \"background-position-y\"?: BackgroundPositionYProperty<TLength> | BackgroundPositionYProperty<TLength>[],\n  \"background-repeat\"?: BackgroundRepeatProperty | BackgroundRepeatProperty[],\n  \"background-size\"?: BackgroundSizeProperty<TLength> | BackgroundSizeProperty<TLength>[],\n  \"block-overflow\"?: BlockOverflowProperty | BlockOverflowProperty[],\n  \"block-size\"?: BlockSizeProperty<TLength> | BlockSizeProperty<TLength>[],\n  \"border-block-color\"?: BorderBlockColorProperty | BorderBlockColorProperty[],\n  \"border-block-end-color\"?: BorderBlockEndColorProperty | BorderBlockEndColorProperty[],\n  \"border-block-end-style\"?: BorderBlockEndStyleProperty | BorderBlockEndStyleProperty[],\n  \"border-block-end-width\"?: BorderBlockEndWidthProperty<TLength> | BorderBlockEndWidthProperty<TLength>[],\n  \"border-block-start-color\"?: BorderBlockStartColorProperty | BorderBlockStartColorProperty[],\n  \"border-block-start-style\"?: BorderBlockStartStyleProperty | BorderBlockStartStyleProperty[],\n  \"border-block-start-width\"?: BorderBlockStartWidthProperty<TLength> | BorderBlockStartWidthProperty<TLength>[],\n  \"border-block-style\"?: BorderBlockStyleProperty | BorderBlockStyleProperty[],\n  \"border-block-width\"?: BorderBlockWidthProperty<TLength> | BorderBlockWidthProperty<TLength>[],\n  \"border-bottom-color\"?: BorderBottomColorProperty | BorderBottomColorProperty[],\n  \"border-bottom-left-radius\"?: BorderBottomLeftRadiusProperty<TLength> | BorderBottomLeftRadiusProperty<TLength>[],\n  \"border-bottom-right-radius\"?: BorderBottomRightRadiusProperty<TLength> | BorderBottomRightRadiusProperty<TLength>[],\n  \"border-bottom-style\"?: BorderBottomStyleProperty | BorderBottomStyleProperty[],\n  \"border-bottom-width\"?: BorderBottomWidthProperty<TLength> | BorderBottomWidthProperty<TLength>[],\n  \"border-collapse\"?: BorderCollapseProperty | BorderCollapseProperty[],\n  \"border-end-end-radius\"?: BorderEndEndRadiusProperty<TLength> | BorderEndEndRadiusProperty<TLength>[],\n  \"border-end-start-radius\"?: BorderEndStartRadiusProperty<TLength> | BorderEndStartRadiusProperty<TLength>[],\n  \"border-image-outset\"?: BorderImageOutsetProperty<TLength> | BorderImageOutsetProperty<TLength>[],\n  \"border-image-repeat\"?: BorderImageRepeatProperty | BorderImageRepeatProperty[],\n  \"border-image-slice\"?: BorderImageSliceProperty | BorderImageSliceProperty[],\n  \"border-image-source\"?: BorderImageSourceProperty | BorderImageSourceProperty[],\n  \"border-image-width\"?: BorderImageWidthProperty<TLength> | BorderImageWidthProperty<TLength>[],\n  \"border-inline-color\"?: BorderInlineColorProperty | BorderInlineColorProperty[],\n  \"border-inline-end-color\"?: BorderInlineEndColorProperty | BorderInlineEndColorProperty[],\n  \"border-inline-end-style\"?: BorderInlineEndStyleProperty | BorderInlineEndStyleProperty[],\n  \"border-inline-end-width\"?: BorderInlineEndWidthProperty<TLength> | BorderInlineEndWidthProperty<TLength>[],\n  \"border-inline-start-color\"?: BorderInlineStartColorProperty | BorderInlineStartColorProperty[],\n  \"border-inline-start-style\"?: BorderInlineStartStyleProperty | BorderInlineStartStyleProperty[],\n  \"border-inline-start-width\"?: BorderInlineStartWidthProperty<TLength> | BorderInlineStartWidthProperty<TLength>[],\n  \"border-inline-style\"?: BorderInlineStyleProperty | BorderInlineStyleProperty[],\n  \"border-inline-width\"?: BorderInlineWidthProperty<TLength> | BorderInlineWidthProperty<TLength>[],\n  \"border-left-color\"?: BorderLeftColorProperty | BorderLeftColorProperty[],\n  \"border-left-style\"?: BorderLeftStyleProperty | BorderLeftStyleProperty[],\n  \"border-left-width\"?: BorderLeftWidthProperty<TLength> | BorderLeftWidthProperty<TLength>[],\n  \"border-right-color\"?: BorderRightColorProperty | BorderRightColorProperty[],\n  \"border-right-style\"?: BorderRightStyleProperty | BorderRightStyleProperty[],\n  \"border-right-width\"?: BorderRightWidthProperty<TLength> | BorderRightWidthProperty<TLength>[],\n  \"border-spacing\"?: BorderSpacingProperty<TLength> | BorderSpacingProperty<TLength>[],\n  \"border-start-end-radius\"?: BorderStartEndRadiusProperty<TLength> | BorderStartEndRadiusProperty<TLength>[],\n  \"border-start-start-radius\"?: BorderStartStartRadiusProperty<TLength> | BorderStartStartRadiusProperty<TLength>[],\n  \"border-top-color\"?: BorderTopColorProperty | BorderTopColorProperty[],\n  \"border-top-left-radius\"?: BorderTopLeftRadiusProperty<TLength> | BorderTopLeftRadiusProperty<TLength>[],\n  \"border-top-right-radius\"?: BorderTopRightRadiusProperty<TLength> | BorderTopRightRadiusProperty<TLength>[],\n  \"border-top-style\"?: BorderTopStyleProperty | BorderTopStyleProperty[],\n  \"border-top-width\"?: BorderTopWidthProperty<TLength> | BorderTopWidthProperty<TLength>[],\n  bottom?: BottomProperty<TLength> | BottomProperty<TLength>[],\n  \"box-decoration-break\"?: BoxDecorationBreakProperty | BoxDecorationBreakProperty[],\n  \"box-shadow\"?: BoxShadowProperty | BoxShadowProperty[],\n  \"box-sizing\"?: BoxSizingProperty | BoxSizingProperty[],\n  \"break-after\"?: BreakAfterProperty | BreakAfterProperty[],\n  \"break-before\"?: BreakBeforeProperty | BreakBeforeProperty[],\n  \"break-inside\"?: BreakInsideProperty | BreakInsideProperty[],\n  \"caption-side\"?: CaptionSideProperty | CaptionSideProperty[],\n  \"caret-color\"?: CaretColorProperty | CaretColorProperty[],\n  clear?: ClearProperty | ClearProperty[],\n  \"clip-path\"?: ClipPathProperty | ClipPathProperty[],\n  color?: ColorProperty | ColorProperty[],\n  \"color-adjust\"?: ColorAdjustProperty | ColorAdjustProperty[],\n  \"column-count\"?: ColumnCountProperty | ColumnCountProperty[],\n  \"column-fill\"?: ColumnFillProperty | ColumnFillProperty[],\n  \"column-gap\"?: ColumnGapProperty<TLength> | ColumnGapProperty<TLength>[],\n  \"column-rule-color\"?: ColumnRuleColorProperty | ColumnRuleColorProperty[],\n  \"column-rule-style\"?: ColumnRuleStyleProperty | ColumnRuleStyleProperty[],\n  \"column-rule-width\"?: ColumnRuleWidthProperty<TLength> | ColumnRuleWidthProperty<TLength>[],\n  \"column-span\"?: ColumnSpanProperty | ColumnSpanProperty[],\n  \"column-width\"?: ColumnWidthProperty<TLength> | ColumnWidthProperty<TLength>[],\n  contain?: ContainProperty | ContainProperty[],\n  content?: ContentProperty | ContentProperty[],\n  \"counter-increment\"?: CounterIncrementProperty | CounterIncrementProperty[],\n  \"counter-reset\"?: CounterResetProperty | CounterResetProperty[],\n  \"counter-set\"?: CounterSetProperty | CounterSetProperty[],\n  cursor?: CursorProperty | CursorProperty[],\n  direction?: DirectionProperty | DirectionProperty[],\n  display?: DisplayProperty | DisplayProperty[],\n  \"empty-cells\"?: EmptyCellsProperty | EmptyCellsProperty[],\n  filter?: FilterProperty | FilterProperty[],\n  \"flex-basis\"?: FlexBasisProperty<TLength> | FlexBasisProperty<TLength>[],\n  \"flex-direction\"?: FlexDirectionProperty | FlexDirectionProperty[],\n  \"flex-grow\"?: GlobalsNumber | GlobalsNumber[],\n  \"flex-shrink\"?: GlobalsNumber | GlobalsNumber[],\n  \"flex-wrap\"?: FlexWrapProperty | FlexWrapProperty[],\n  float?: FloatProperty | FloatProperty[],\n  \"font-family\"?: FontFamilyProperty | FontFamilyProperty[],\n  \"font-feature-settings\"?: FontFeatureSettingsProperty | FontFeatureSettingsProperty[],\n  \"font-kerning\"?: FontKerningProperty | FontKerningProperty[],\n  \"font-language-override\"?: FontLanguageOverrideProperty | FontLanguageOverrideProperty[],\n  \"font-optical-sizing\"?: FontOpticalSizingProperty | FontOpticalSizingProperty[],\n  \"font-size\"?: FontSizeProperty<TLength> | FontSizeProperty<TLength>[],\n  \"font-size-adjust\"?: FontSizeAdjustProperty | FontSizeAdjustProperty[],\n  \"font-stretch\"?: FontStretchProperty | FontStretchProperty[],\n  \"font-style\"?: FontStyleProperty | FontStyleProperty[],\n  \"font-synthesis\"?: FontSynthesisProperty | FontSynthesisProperty[],\n  \"font-variant\"?: FontVariantProperty | FontVariantProperty[],\n  \"font-variant-caps\"?: FontVariantCapsProperty | FontVariantCapsProperty[],\n  \"font-variant-east-asian\"?: FontVariantEastAsianProperty | FontVariantEastAsianProperty[],\n  \"font-variant-ligatures\"?: FontVariantLigaturesProperty | FontVariantLigaturesProperty[],\n  \"font-variant-numeric\"?: FontVariantNumericProperty | FontVariantNumericProperty[],\n  \"font-variant-position\"?: FontVariantPositionProperty | FontVariantPositionProperty[],\n  \"font-variation-settings\"?: FontVariationSettingsProperty | FontVariationSettingsProperty[],\n  \"font-weight\"?: FontWeightProperty | FontWeightProperty[],\n  \"grid-auto-columns\"?: GridAutoColumnsProperty<TLength> | GridAutoColumnsProperty<TLength>[],\n  \"grid-auto-flow\"?: GridAutoFlowProperty | GridAutoFlowProperty[],\n  \"grid-auto-rows\"?: GridAutoRowsProperty<TLength> | GridAutoRowsProperty<TLength>[],\n  \"grid-column-end\"?: GridColumnEndProperty | GridColumnEndProperty[],\n  \"grid-column-start\"?: GridColumnStartProperty | GridColumnStartProperty[],\n  \"grid-row-end\"?: GridRowEndProperty | GridRowEndProperty[],\n  \"grid-row-start\"?: GridRowStartProperty | GridRowStartProperty[],\n  \"grid-template-areas\"?: GridTemplateAreasProperty | GridTemplateAreasProperty[],\n  \"grid-template-columns\"?: GridTemplateColumnsProperty<TLength> | GridTemplateColumnsProperty<TLength>[],\n  \"grid-template-rows\"?: GridTemplateRowsProperty<TLength> | GridTemplateRowsProperty<TLength>[],\n  \"hanging-punctuation\"?: HangingPunctuationProperty | HangingPunctuationProperty[],\n  height?: HeightProperty<TLength> | HeightProperty<TLength>[],\n  hyphens?: HyphensProperty | HyphensProperty[],\n  \"image-orientation\"?: ImageOrientationProperty | ImageOrientationProperty[],\n  \"image-rendering\"?: ImageRenderingProperty | ImageRenderingProperty[],\n  \"image-resolution\"?: ImageResolutionProperty | ImageResolutionProperty[],\n  \"initial-letter\"?: InitialLetterProperty | InitialLetterProperty[],\n  \"inline-size\"?: InlineSizeProperty<TLength> | InlineSizeProperty<TLength>[],\n  inset?: InsetProperty<TLength> | InsetProperty<TLength>[],\n  \"inset-block\"?: InsetBlockProperty<TLength> | InsetBlockProperty<TLength>[],\n  \"inset-block-end\"?: InsetBlockEndProperty<TLength> | InsetBlockEndProperty<TLength>[],\n  \"inset-block-start\"?: InsetBlockStartProperty<TLength> | InsetBlockStartProperty<TLength>[],\n  \"inset-inline\"?: InsetInlineProperty<TLength> | InsetInlineProperty<TLength>[],\n  \"inset-inline-end\"?: InsetInlineEndProperty<TLength> | InsetInlineEndProperty<TLength>[],\n  \"inset-inline-start\"?: InsetInlineStartProperty<TLength> | InsetInlineStartProperty<TLength>[],\n  isolation?: IsolationProperty | IsolationProperty[],\n  \"justify-content\"?: JustifyContentProperty | JustifyContentProperty[],\n  \"justify-items\"?: JustifyItemsProperty | JustifyItemsProperty[],\n  \"justify-self\"?: JustifySelfProperty | JustifySelfProperty[],\n  left?: LeftProperty<TLength> | LeftProperty<TLength>[],\n  \"letter-spacing\"?: LetterSpacingProperty<TLength> | LetterSpacingProperty<TLength>[],\n  \"line-break\"?: LineBreakProperty | LineBreakProperty[],\n  \"line-height\"?: LineHeightProperty<TLength> | LineHeightProperty<TLength>[],\n  \"line-height-step\"?: LineHeightStepProperty<TLength> | LineHeightStepProperty<TLength>[],\n  \"list-style-image\"?: ListStyleImageProperty | ListStyleImageProperty[],\n  \"list-style-position\"?: ListStylePositionProperty | ListStylePositionProperty[],\n  \"list-style-type\"?: ListStyleTypeProperty | ListStyleTypeProperty[],\n  \"margin-block\"?: MarginBlockProperty<TLength> | MarginBlockProperty<TLength>[],\n  \"margin-block-end\"?: MarginBlockEndProperty<TLength> | MarginBlockEndProperty<TLength>[],\n  \"margin-block-start\"?: MarginBlockStartProperty<TLength> | MarginBlockStartProperty<TLength>[],\n  \"margin-bottom\"?: MarginBottomProperty<TLength> | MarginBottomProperty<TLength>[],\n  \"margin-inline\"?: MarginInlineProperty<TLength> | MarginInlineProperty<TLength>[],\n  \"margin-inline-end\"?: MarginInlineEndProperty<TLength> | MarginInlineEndProperty<TLength>[],\n  \"margin-inline-start\"?: MarginInlineStartProperty<TLength> | MarginInlineStartProperty<TLength>[],\n  \"margin-left\"?: MarginLeftProperty<TLength> | MarginLeftProperty<TLength>[],\n  \"margin-right\"?: MarginRightProperty<TLength> | MarginRightProperty<TLength>[],\n  \"margin-top\"?: MarginTopProperty<TLength> | MarginTopProperty<TLength>[],\n  \"mask-border-mode\"?: MaskBorderModeProperty | MaskBorderModeProperty[],\n  \"mask-border-outset\"?: MaskBorderOutsetProperty<TLength> | MaskBorderOutsetProperty<TLength>[],\n  \"mask-border-repeat\"?: MaskBorderRepeatProperty | MaskBorderRepeatProperty[],\n  \"mask-border-slice\"?: MaskBorderSliceProperty | MaskBorderSliceProperty[],\n  \"mask-border-source\"?: MaskBorderSourceProperty | MaskBorderSourceProperty[],\n  \"mask-border-width\"?: MaskBorderWidthProperty<TLength> | MaskBorderWidthProperty<TLength>[],\n  \"mask-clip\"?: MaskClipProperty | MaskClipProperty[],\n  \"mask-composite\"?: MaskCompositeProperty | MaskCompositeProperty[],\n  \"mask-image\"?: MaskImageProperty | MaskImageProperty[],\n  \"mask-mode\"?: MaskModeProperty | MaskModeProperty[],\n  \"mask-origin\"?: MaskOriginProperty | MaskOriginProperty[],\n  \"mask-position\"?: MaskPositionProperty<TLength> | MaskPositionProperty<TLength>[],\n  \"mask-repeat\"?: MaskRepeatProperty | MaskRepeatProperty[],\n  \"mask-size\"?: MaskSizeProperty<TLength> | MaskSizeProperty<TLength>[],\n  \"mask-type\"?: MaskTypeProperty | MaskTypeProperty[],\n  \"max-block-size\"?: MaxBlockSizeProperty<TLength> | MaxBlockSizeProperty<TLength>[],\n  \"max-height\"?: MaxHeightProperty<TLength> | MaxHeightProperty<TLength>[],\n  \"max-inline-size\"?: MaxInlineSizeProperty<TLength> | MaxInlineSizeProperty<TLength>[],\n  \"max-lines\"?: MaxLinesProperty | MaxLinesProperty[],\n  \"max-width\"?: MaxWidthProperty<TLength> | MaxWidthProperty<TLength>[],\n  \"min-block-size\"?: MinBlockSizeProperty<TLength> | MinBlockSizeProperty<TLength>[],\n  \"min-height\"?: MinHeightProperty<TLength> | MinHeightProperty<TLength>[],\n  \"min-inline-size\"?: MinInlineSizeProperty<TLength> | MinInlineSizeProperty<TLength>[],\n  \"min-width\"?: MinWidthProperty<TLength> | MinWidthProperty<TLength>[],\n  \"mix-blend-mode\"?: MixBlendModeProperty | MixBlendModeProperty[],\n  \"motion-distance\"?: OffsetDistanceProperty<TLength> | OffsetDistanceProperty<TLength>[],\n  \"motion-path\"?: OffsetPathProperty | OffsetPathProperty[],\n  \"motion-rotation\"?: OffsetRotateProperty | OffsetRotateProperty[],\n  \"object-fit\"?: ObjectFitProperty | ObjectFitProperty[],\n  \"object-position\"?: ObjectPositionProperty<TLength> | ObjectPositionProperty<TLength>[],\n  \"offset-anchor\"?: OffsetAnchorProperty<TLength> | OffsetAnchorProperty<TLength>[],\n  \"offset-distance\"?: OffsetDistanceProperty<TLength> | OffsetDistanceProperty<TLength>[],\n  \"offset-path\"?: OffsetPathProperty | OffsetPathProperty[],\n  \"offset-rotate\"?: OffsetRotateProperty | OffsetRotateProperty[],\n  \"offset-rotation\"?: OffsetRotateProperty | OffsetRotateProperty[],\n  opacity?: OpacityProperty | OpacityProperty[],\n  order?: GlobalsNumber | GlobalsNumber[],\n  orphans?: GlobalsNumber | GlobalsNumber[],\n  \"outline-color\"?: OutlineColorProperty | OutlineColorProperty[],\n  \"outline-offset\"?: OutlineOffsetProperty<TLength> | OutlineOffsetProperty<TLength>[],\n  \"outline-style\"?: OutlineStyleProperty | OutlineStyleProperty[],\n  \"outline-width\"?: OutlineWidthProperty<TLength> | OutlineWidthProperty<TLength>[],\n  overflow?: OverflowProperty | OverflowProperty[],\n  \"overflow-anchor\"?: OverflowAnchorProperty | OverflowAnchorProperty[],\n  \"overflow-block\"?: OverflowBlockProperty | OverflowBlockProperty[],\n  \"overflow-clip-box\"?: OverflowClipBoxProperty | OverflowClipBoxProperty[],\n  \"overflow-inline\"?: OverflowInlineProperty | OverflowInlineProperty[],\n  \"overflow-wrap\"?: OverflowWrapProperty | OverflowWrapProperty[],\n  \"overflow-x\"?: OverflowXProperty | OverflowXProperty[],\n  \"overflow-y\"?: OverflowYProperty | OverflowYProperty[],\n  \"overscroll-behavior\"?: OverscrollBehaviorProperty | OverscrollBehaviorProperty[],\n  \"overscroll-behavior-block\"?: OverscrollBehaviorBlockProperty | OverscrollBehaviorBlockProperty[],\n  \"overscroll-behavior-inline\"?: OverscrollBehaviorInlineProperty | OverscrollBehaviorInlineProperty[],\n  \"overscroll-behavior-x\"?: OverscrollBehaviorXProperty | OverscrollBehaviorXProperty[],\n  \"overscroll-behavior-y\"?: OverscrollBehaviorYProperty | OverscrollBehaviorYProperty[],\n  \"padding-block\"?: PaddingBlockProperty<TLength> | PaddingBlockProperty<TLength>[],\n  \"padding-block-end\"?: PaddingBlockEndProperty<TLength> | PaddingBlockEndProperty<TLength>[],\n  \"padding-block-start\"?: PaddingBlockStartProperty<TLength> | PaddingBlockStartProperty<TLength>[],\n  \"padding-bottom\"?: PaddingBottomProperty<TLength> | PaddingBottomProperty<TLength>[],\n  \"padding-inline\"?: PaddingInlineProperty<TLength> | PaddingInlineProperty<TLength>[],\n  \"padding-inline-end\"?: PaddingInlineEndProperty<TLength> | PaddingInlineEndProperty<TLength>[],\n  \"padding-inline-start\"?: PaddingInlineStartProperty<TLength> | PaddingInlineStartProperty<TLength>[],\n  \"padding-left\"?: PaddingLeftProperty<TLength> | PaddingLeftProperty<TLength>[],\n  \"padding-right\"?: PaddingRightProperty<TLength> | PaddingRightProperty<TLength>[],\n  \"padding-top\"?: PaddingTopProperty<TLength> | PaddingTopProperty<TLength>[],\n  \"page-break-after\"?: PageBreakAfterProperty | PageBreakAfterProperty[],\n  \"page-break-before\"?: PageBreakBeforeProperty | PageBreakBeforeProperty[],\n  \"page-break-inside\"?: PageBreakInsideProperty | PageBreakInsideProperty[],\n  \"paint-order\"?: PaintOrderProperty | PaintOrderProperty[],\n  perspective?: PerspectiveProperty<TLength> | PerspectiveProperty<TLength>[],\n  \"perspective-origin\"?: PerspectiveOriginProperty<TLength> | PerspectiveOriginProperty<TLength>[],\n  \"place-content\"?: PlaceContentProperty | PlaceContentProperty[],\n  \"pointer-events\"?: PointerEventsProperty | PointerEventsProperty[],\n  position?: PositionProperty | PositionProperty[],\n  quotes?: QuotesProperty | QuotesProperty[],\n  resize?: ResizeProperty | ResizeProperty[],\n  right?: RightProperty<TLength> | RightProperty<TLength>[],\n  rotate?: RotateProperty | RotateProperty[],\n  \"row-gap\"?: RowGapProperty<TLength> | RowGapProperty<TLength>[],\n  \"ruby-align\"?: RubyAlignProperty | RubyAlignProperty[],\n  \"ruby-merge\"?: RubyMergeProperty | RubyMergeProperty[],\n  \"ruby-position\"?: RubyPositionProperty | RubyPositionProperty[],\n  scale?: ScaleProperty | ScaleProperty[],\n  \"scroll-behavior\"?: ScrollBehaviorProperty | ScrollBehaviorProperty[],\n  \"scroll-margin\"?: ScrollMarginProperty<TLength> | ScrollMarginProperty<TLength>[],\n  \"scroll-margin-block\"?: ScrollMarginBlockProperty<TLength> | ScrollMarginBlockProperty<TLength>[],\n  \"scroll-margin-block-end\"?: ScrollMarginBlockEndProperty<TLength> | ScrollMarginBlockEndProperty<TLength>[],\n  \"scroll-margin-block-start\"?: ScrollMarginBlockStartProperty<TLength> | ScrollMarginBlockStartProperty<TLength>[],\n  \"scroll-margin-bottom\"?: ScrollMarginBottomProperty<TLength> | ScrollMarginBottomProperty<TLength>[],\n  \"scroll-margin-inline\"?: ScrollMarginInlineProperty<TLength> | ScrollMarginInlineProperty<TLength>[],\n  \"scroll-margin-inline-end\"?: ScrollMarginInlineEndProperty<TLength> | ScrollMarginInlineEndProperty<TLength>[],\n  \"scroll-margin-inline-start\"?: ScrollMarginInlineStartProperty<TLength> | ScrollMarginInlineStartProperty<TLength>[],\n  \"scroll-margin-left\"?: ScrollMarginLeftProperty<TLength> | ScrollMarginLeftProperty<TLength>[],\n  \"scroll-margin-right\"?: ScrollMarginRightProperty<TLength> | ScrollMarginRightProperty<TLength>[],\n  \"scroll-margin-top\"?: ScrollMarginTopProperty<TLength> | ScrollMarginTopProperty<TLength>[],\n  \"scroll-padding\"?: ScrollPaddingProperty<TLength> | ScrollPaddingProperty<TLength>[],\n  \"scroll-padding-block\"?: ScrollPaddingBlockProperty<TLength> | ScrollPaddingBlockProperty<TLength>[],\n  \"scroll-padding-block-end\"?: ScrollPaddingBlockEndProperty<TLength> | ScrollPaddingBlockEndProperty<TLength>[],\n  \"scroll-padding-block-start\"?: ScrollPaddingBlockStartProperty<TLength> | ScrollPaddingBlockStartProperty<TLength>[],\n  \"scroll-padding-bottom\"?: ScrollPaddingBottomProperty<TLength> | ScrollPaddingBottomProperty<TLength>[],\n  \"scroll-padding-inline\"?: ScrollPaddingInlineProperty<TLength> | ScrollPaddingInlineProperty<TLength>[],\n  \"scroll-padding-inline-end\"?: ScrollPaddingInlineEndProperty<TLength> | ScrollPaddingInlineEndProperty<TLength>[],\n  \"scroll-padding-inline-start\"?: ScrollPaddingInlineStartProperty<TLength> | ScrollPaddingInlineStartProperty<TLength>[],\n  \"scroll-padding-left\"?: ScrollPaddingLeftProperty<TLength> | ScrollPaddingLeftProperty<TLength>[],\n  \"scroll-padding-right\"?: ScrollPaddingRightProperty<TLength> | ScrollPaddingRightProperty<TLength>[],\n  \"scroll-padding-top\"?: ScrollPaddingTopProperty<TLength> | ScrollPaddingTopProperty<TLength>[],\n  \"scroll-snap-align\"?: ScrollSnapAlignProperty | ScrollSnapAlignProperty[],\n  \"scroll-snap-stop\"?: ScrollSnapStopProperty | ScrollSnapStopProperty[],\n  \"scroll-snap-type\"?: ScrollSnapTypeProperty | ScrollSnapTypeProperty[],\n  \"scrollbar-color\"?: ScrollbarColorProperty | ScrollbarColorProperty[],\n  \"scrollbar-width\"?: ScrollbarWidthProperty | ScrollbarWidthProperty[],\n  \"shape-image-threshold\"?: ShapeImageThresholdProperty | ShapeImageThresholdProperty[],\n  \"shape-margin\"?: ShapeMarginProperty<TLength> | ShapeMarginProperty<TLength>[],\n  \"shape-outside\"?: ShapeOutsideProperty | ShapeOutsideProperty[],\n  \"tab-size\"?: TabSizeProperty<TLength> | TabSizeProperty<TLength>[],\n  \"table-layout\"?: TableLayoutProperty | TableLayoutProperty[],\n  \"text-align\"?: TextAlignProperty | TextAlignProperty[],\n  \"text-align-last\"?: TextAlignLastProperty | TextAlignLastProperty[],\n  \"text-combine-upright\"?: TextCombineUprightProperty | TextCombineUprightProperty[],\n  \"text-decoration-color\"?: TextDecorationColorProperty | TextDecorationColorProperty[],\n  \"text-decoration-line\"?: TextDecorationLineProperty | TextDecorationLineProperty[],\n  \"text-decoration-skip\"?: TextDecorationSkipProperty | TextDecorationSkipProperty[],\n  \"text-decoration-skip-ink\"?: TextDecorationSkipInkProperty | TextDecorationSkipInkProperty[],\n  \"text-decoration-style\"?: TextDecorationStyleProperty | TextDecorationStyleProperty[],\n  \"text-decoration-thickness\"?: TextDecorationThicknessProperty<TLength> | TextDecorationThicknessProperty<TLength>[],\n  \"text-decoration-width\"?: TextDecorationThicknessProperty<TLength> | TextDecorationThicknessProperty<TLength>[],\n  \"text-emphasis-color\"?: TextEmphasisColorProperty | TextEmphasisColorProperty[],\n  \"text-emphasis-position\"?: GlobalsString | GlobalsString[],\n  \"text-emphasis-style\"?: TextEmphasisStyleProperty | TextEmphasisStyleProperty[],\n  \"text-indent\"?: TextIndentProperty<TLength> | TextIndentProperty<TLength>[],\n  \"text-justify\"?: TextJustifyProperty | TextJustifyProperty[],\n  \"text-orientation\"?: TextOrientationProperty | TextOrientationProperty[],\n  \"text-overflow\"?: TextOverflowProperty | TextOverflowProperty[],\n  \"text-rendering\"?: TextRenderingProperty | TextRenderingProperty[],\n  \"text-shadow\"?: TextShadowProperty | TextShadowProperty[],\n  \"text-size-adjust\"?: TextSizeAdjustProperty | TextSizeAdjustProperty[],\n  \"text-transform\"?: TextTransformProperty | TextTransformProperty[],\n  \"text-underline-offset\"?: TextUnderlineOffsetProperty<TLength> | TextUnderlineOffsetProperty<TLength>[],\n  \"text-underline-position\"?: TextUnderlinePositionProperty | TextUnderlinePositionProperty[],\n  top?: TopProperty<TLength> | TopProperty<TLength>[],\n  \"touch-action\"?: TouchActionProperty | TouchActionProperty[],\n  transform?: TransformProperty | TransformProperty[],\n  \"transform-box\"?: TransformBoxProperty | TransformBoxProperty[],\n  \"transform-origin\"?: TransformOriginProperty<TLength> | TransformOriginProperty<TLength>[],\n  \"transform-style\"?: TransformStyleProperty | TransformStyleProperty[],\n  \"transition-delay\"?: GlobalsString | GlobalsString[],\n  \"transition-duration\"?: GlobalsString | GlobalsString[],\n  \"transition-property\"?: TransitionPropertyProperty | TransitionPropertyProperty[],\n  \"transition-timing-function\"?: TransitionTimingFunctionProperty | TransitionTimingFunctionProperty[],\n  translate?: TranslateProperty<TLength> | TranslateProperty<TLength>[],\n  \"unicode-bidi\"?: UnicodeBidiProperty | UnicodeBidiProperty[],\n  \"user-select\"?: UserSelectProperty | UserSelectProperty[],\n  \"vertical-align\"?: VerticalAlignProperty<TLength> | VerticalAlignProperty<TLength>[],\n  visibility?: VisibilityProperty | VisibilityProperty[],\n  \"white-space\"?: WhiteSpaceProperty | WhiteSpaceProperty[],\n  widows?: GlobalsNumber | GlobalsNumber[],\n  width?: WidthProperty<TLength> | WidthProperty<TLength>[],\n  \"will-change\"?: WillChangeProperty | WillChangeProperty[],\n  \"word-break\"?: WordBreakProperty | WordBreakProperty[],\n  \"word-spacing\"?: WordSpacingProperty<TLength> | WordSpacingProperty<TLength>[],\n  \"word-wrap\"?: WordWrapProperty | WordWrapProperty[],\n  \"writing-mode\"?: WritingModeProperty | WritingModeProperty[],\n  \"z-index\"?: ZIndexProperty | ZIndexProperty[],\n  zoom?: ZoomProperty | ZoomProperty[],\n};\n\nexport type StandardShorthandPropertiesHyphenFallback<TLength = string | 0> = {\n  all?: Globals | Globals[],\n  animation?: AnimationProperty | AnimationProperty[],\n  background?: BackgroundProperty<TLength> | BackgroundProperty<TLength>[],\n  border?: BorderProperty<TLength> | BorderProperty<TLength>[],\n  \"border-block\"?: BorderBlockProperty<TLength> | BorderBlockProperty<TLength>[],\n  \"border-block-end\"?: BorderBlockEndProperty<TLength> | BorderBlockEndProperty<TLength>[],\n  \"border-block-start\"?: BorderBlockStartProperty<TLength> | BorderBlockStartProperty<TLength>[],\n  \"border-bottom\"?: BorderBottomProperty<TLength> | BorderBottomProperty<TLength>[],\n  \"border-color\"?: BorderColorProperty | BorderColorProperty[],\n  \"border-image\"?: BorderImageProperty | BorderImageProperty[],\n  \"border-inline\"?: BorderInlineProperty<TLength> | BorderInlineProperty<TLength>[],\n  \"border-inline-end\"?: BorderInlineEndProperty<TLength> | BorderInlineEndProperty<TLength>[],\n  \"border-inline-start\"?: BorderInlineStartProperty<TLength> | BorderInlineStartProperty<TLength>[],\n  \"border-left\"?: BorderLeftProperty<TLength> | BorderLeftProperty<TLength>[],\n  \"border-radius\"?: BorderRadiusProperty<TLength> | BorderRadiusProperty<TLength>[],\n  \"border-right\"?: BorderRightProperty<TLength> | BorderRightProperty<TLength>[],\n  \"border-style\"?: BorderStyleProperty | BorderStyleProperty[],\n  \"border-top\"?: BorderTopProperty<TLength> | BorderTopProperty<TLength>[],\n  \"border-width\"?: BorderWidthProperty<TLength> | BorderWidthProperty<TLength>[],\n  \"column-rule\"?: ColumnRuleProperty<TLength> | ColumnRuleProperty<TLength>[],\n  columns?: ColumnsProperty<TLength> | ColumnsProperty<TLength>[],\n  flex?: FlexProperty<TLength> | FlexProperty<TLength>[],\n  \"flex-flow\"?: FlexFlowProperty | FlexFlowProperty[],\n  font?: FontProperty | FontProperty[],\n  gap?: GapProperty<TLength> | GapProperty<TLength>[],\n  grid?: GridProperty | GridProperty[],\n  \"grid-area\"?: GridAreaProperty | GridAreaProperty[],\n  \"grid-column\"?: GridColumnProperty | GridColumnProperty[],\n  \"grid-row\"?: GridRowProperty | GridRowProperty[],\n  \"grid-template\"?: GridTemplateProperty | GridTemplateProperty[],\n  \"line-clamp\"?: LineClampProperty | LineClampProperty[],\n  \"list-style\"?: ListStyleProperty | ListStyleProperty[],\n  margin?: MarginProperty<TLength> | MarginProperty<TLength>[],\n  mask?: MaskProperty<TLength> | MaskProperty<TLength>[],\n  \"mask-border\"?: MaskBorderProperty | MaskBorderProperty[],\n  motion?: OffsetProperty<TLength> | OffsetProperty<TLength>[],\n  offset?: OffsetProperty<TLength> | OffsetProperty<TLength>[],\n  outline?: OutlineProperty<TLength> | OutlineProperty<TLength>[],\n  padding?: PaddingProperty<TLength> | PaddingProperty<TLength>[],\n  \"place-items\"?: PlaceItemsProperty | PlaceItemsProperty[],\n  \"place-self\"?: PlaceSelfProperty | PlaceSelfProperty[],\n  \"text-decoration\"?: TextDecorationProperty<TLength> | TextDecorationProperty<TLength>[],\n  \"text-emphasis\"?: TextEmphasisProperty | TextEmphasisProperty[],\n  transition?: TransitionProperty | TransitionProperty[],\n};\n\nexport type StandardPropertiesHyphenFallback<TLength = string | 0> = StandardLonghandPropertiesHyphenFallback<TLength> & StandardShorthandPropertiesHyphenFallback<TLength>;\n\nexport type VendorLonghandPropertiesHyphenFallback<TLength = string | 0> = {\n  \"-moz-animation-delay\"?: GlobalsString | GlobalsString[],\n  \"-moz-animation-direction\"?: AnimationDirectionProperty | AnimationDirectionProperty[],\n  \"-moz-animation-duration\"?: GlobalsString | GlobalsString[],\n  \"-moz-animation-fill-mode\"?: AnimationFillModeProperty | AnimationFillModeProperty[],\n  \"-moz-animation-iteration-count\"?: AnimationIterationCountProperty | AnimationIterationCountProperty[],\n  \"-moz-animation-name\"?: AnimationNameProperty | AnimationNameProperty[],\n  \"-moz-animation-play-state\"?: AnimationPlayStateProperty | AnimationPlayStateProperty[],\n  \"-moz-animation-timing-function\"?: AnimationTimingFunctionProperty | AnimationTimingFunctionProperty[],\n  \"-moz-appearance\"?: MozAppearanceProperty | MozAppearanceProperty[],\n  \"-moz-backface-visibility\"?: BackfaceVisibilityProperty | BackfaceVisibilityProperty[],\n  \"-moz-border-end-color\"?: BorderInlineEndColorProperty | BorderInlineEndColorProperty[],\n  \"-moz-border-end-style\"?: BorderInlineEndStyleProperty | BorderInlineEndStyleProperty[],\n  \"-moz-border-end-width\"?: BorderInlineEndWidthProperty<TLength> | BorderInlineEndWidthProperty<TLength>[],\n  \"-moz-border-start-color\"?: BorderInlineStartColorProperty | BorderInlineStartColorProperty[],\n  \"-moz-border-start-style\"?: BorderInlineStartStyleProperty | BorderInlineStartStyleProperty[],\n  \"-moz-box-sizing\"?: BoxSizingProperty | BoxSizingProperty[],\n  \"-moz-column-count\"?: ColumnCountProperty | ColumnCountProperty[],\n  \"-moz-column-fill\"?: ColumnFillProperty | ColumnFillProperty[],\n  \"-moz-column-gap\"?: ColumnGapProperty<TLength> | ColumnGapProperty<TLength>[],\n  \"-moz-column-rule-color\"?: ColumnRuleColorProperty | ColumnRuleColorProperty[],\n  \"-moz-column-rule-style\"?: ColumnRuleStyleProperty | ColumnRuleStyleProperty[],\n  \"-moz-column-rule-width\"?: ColumnRuleWidthProperty<TLength> | ColumnRuleWidthProperty<TLength>[],\n  \"-moz-column-width\"?: ColumnWidthProperty<TLength> | ColumnWidthProperty<TLength>[],\n  \"-moz-context-properties\"?: MozContextPropertiesProperty | MozContextPropertiesProperty[],\n  \"-moz-float-edge\"?: MozFloatEdgeProperty | MozFloatEdgeProperty[],\n  \"-moz-font-feature-settings\"?: FontFeatureSettingsProperty | FontFeatureSettingsProperty[],\n  \"-moz-font-language-override\"?: FontLanguageOverrideProperty | FontLanguageOverrideProperty[],\n  \"-moz-force-broken-image-icon\"?: GlobalsNumber | GlobalsNumber[],\n  \"-moz-hyphens\"?: HyphensProperty | HyphensProperty[],\n  \"-moz-image-region\"?: MozImageRegionProperty | MozImageRegionProperty[],\n  \"-moz-margin-end\"?: MarginInlineEndProperty<TLength> | MarginInlineEndProperty<TLength>[],\n  \"-moz-margin-start\"?: MarginInlineStartProperty<TLength> | MarginInlineStartProperty<TLength>[],\n  \"-moz-orient\"?: MozOrientProperty | MozOrientProperty[],\n  \"-moz-outline-radius-bottomleft\"?: MozOutlineRadiusBottomleftProperty<TLength> | MozOutlineRadiusBottomleftProperty<TLength>[],\n  \"-moz-outline-radius-bottomright\"?: MozOutlineRadiusBottomrightProperty<TLength> | MozOutlineRadiusBottomrightProperty<TLength>[],\n  \"-moz-outline-radius-topleft\"?: MozOutlineRadiusTopleftProperty<TLength> | MozOutlineRadiusTopleftProperty<TLength>[],\n  \"-moz-outline-radius-topright\"?: MozOutlineRadiusToprightProperty<TLength> | MozOutlineRadiusToprightProperty<TLength>[],\n  \"-moz-padding-end\"?: PaddingInlineEndProperty<TLength> | PaddingInlineEndProperty<TLength>[],\n  \"-moz-padding-start\"?: PaddingInlineStartProperty<TLength> | PaddingInlineStartProperty<TLength>[],\n  \"-moz-perspective\"?: PerspectiveProperty<TLength> | PerspectiveProperty<TLength>[],\n  \"-moz-perspective-origin\"?: PerspectiveOriginProperty<TLength> | PerspectiveOriginProperty<TLength>[],\n  \"-moz-stack-sizing\"?: MozStackSizingProperty | MozStackSizingProperty[],\n  \"-moz-tab-size\"?: TabSizeProperty<TLength> | TabSizeProperty<TLength>[],\n  \"-moz-text-size-adjust\"?: TextSizeAdjustProperty | TextSizeAdjustProperty[],\n  \"-moz-transform-origin\"?: TransformOriginProperty<TLength> | TransformOriginProperty<TLength>[],\n  \"-moz-transform-style\"?: TransformStyleProperty | TransformStyleProperty[],\n  \"-moz-transition-delay\"?: GlobalsString | GlobalsString[],\n  \"-moz-transition-duration\"?: GlobalsString | GlobalsString[],\n  \"-moz-transition-property\"?: TransitionPropertyProperty | TransitionPropertyProperty[],\n  \"-moz-transition-timing-function\"?: TransitionTimingFunctionProperty | TransitionTimingFunctionProperty[],\n  \"-moz-user-focus\"?: MozUserFocusProperty | MozUserFocusProperty[],\n  \"-moz-user-modify\"?: MozUserModifyProperty | MozUserModifyProperty[],\n  \"-moz-user-select\"?: UserSelectProperty | UserSelectProperty[],\n  \"-moz-window-dragging\"?: MozWindowDraggingProperty | MozWindowDraggingProperty[],\n  \"-ms-accelerator\"?: MsAcceleratorProperty | MsAcceleratorProperty[],\n  \"-ms-align-self\"?: AlignSelfProperty | AlignSelfProperty[],\n  \"-ms-block-progression\"?: MsBlockProgressionProperty | MsBlockProgressionProperty[],\n  \"-ms-content-zoom-chaining\"?: MsContentZoomChainingProperty | MsContentZoomChainingProperty[],\n  \"-ms-content-zoom-limit-max\"?: GlobalsString | GlobalsString[],\n  \"-ms-content-zoom-limit-min\"?: GlobalsString | GlobalsString[],\n  \"-ms-content-zoom-snap-points\"?: GlobalsString | GlobalsString[],\n  \"-ms-content-zoom-snap-type\"?: MsContentZoomSnapTypeProperty | MsContentZoomSnapTypeProperty[],\n  \"-ms-content-zooming\"?: MsContentZoomingProperty | MsContentZoomingProperty[],\n  \"-ms-filter\"?: GlobalsString | GlobalsString[],\n  \"-ms-flex-direction\"?: FlexDirectionProperty | FlexDirectionProperty[],\n  \"-ms-flex-positive\"?: GlobalsNumber | GlobalsNumber[],\n  \"-ms-flow-from\"?: MsFlowFromProperty | MsFlowFromProperty[],\n  \"-ms-flow-into\"?: MsFlowIntoProperty | MsFlowIntoProperty[],\n  \"-ms-grid-columns\"?: GridAutoColumnsProperty<TLength> | GridAutoColumnsProperty<TLength>[],\n  \"-ms-grid-rows\"?: GridAutoRowsProperty<TLength> | GridAutoRowsProperty<TLength>[],\n  \"-ms-high-contrast-adjust\"?: MsHighContrastAdjustProperty | MsHighContrastAdjustProperty[],\n  \"-ms-hyphenate-limit-chars\"?: MsHyphenateLimitCharsProperty | MsHyphenateLimitCharsProperty[],\n  \"-ms-hyphenate-limit-lines\"?: MsHyphenateLimitLinesProperty | MsHyphenateLimitLinesProperty[],\n  \"-ms-hyphenate-limit-zone\"?: MsHyphenateLimitZoneProperty<TLength> | MsHyphenateLimitZoneProperty<TLength>[],\n  \"-ms-hyphens\"?: HyphensProperty | HyphensProperty[],\n  \"-ms-ime-align\"?: MsImeAlignProperty | MsImeAlignProperty[],\n  \"-ms-line-break\"?: LineBreakProperty | LineBreakProperty[],\n  \"-ms-order\"?: GlobalsNumber | GlobalsNumber[],\n  \"-ms-overflow-style\"?: MsOverflowStyleProperty | MsOverflowStyleProperty[],\n  \"-ms-overflow-x\"?: OverflowXProperty | OverflowXProperty[],\n  \"-ms-overflow-y\"?: OverflowYProperty | OverflowYProperty[],\n  \"-ms-scroll-chaining\"?: MsScrollChainingProperty | MsScrollChainingProperty[],\n  \"-ms-scroll-limit-x-max\"?: MsScrollLimitXMaxProperty<TLength> | MsScrollLimitXMaxProperty<TLength>[],\n  \"-ms-scroll-limit-x-min\"?: MsScrollLimitXMinProperty<TLength> | MsScrollLimitXMinProperty<TLength>[],\n  \"-ms-scroll-limit-y-max\"?: MsScrollLimitYMaxProperty<TLength> | MsScrollLimitYMaxProperty<TLength>[],\n  \"-ms-scroll-limit-y-min\"?: MsScrollLimitYMinProperty<TLength> | MsScrollLimitYMinProperty<TLength>[],\n  \"-ms-scroll-rails\"?: MsScrollRailsProperty | MsScrollRailsProperty[],\n  \"-ms-scroll-snap-points-x\"?: GlobalsString | GlobalsString[],\n  \"-ms-scroll-snap-points-y\"?: GlobalsString | GlobalsString[],\n  \"-ms-scroll-snap-type\"?: MsScrollSnapTypeProperty | MsScrollSnapTypeProperty[],\n  \"-ms-scroll-translation\"?: MsScrollTranslationProperty | MsScrollTranslationProperty[],\n  \"-ms-scrollbar-3dlight-color\"?: MsScrollbar3dlightColorProperty | MsScrollbar3dlightColorProperty[],\n  \"-ms-scrollbar-arrow-color\"?: MsScrollbarArrowColorProperty | MsScrollbarArrowColorProperty[],\n  \"-ms-scrollbar-base-color\"?: MsScrollbarBaseColorProperty | MsScrollbarBaseColorProperty[],\n  \"-ms-scrollbar-darkshadow-color\"?: MsScrollbarDarkshadowColorProperty | MsScrollbarDarkshadowColorProperty[],\n  \"-ms-scrollbar-face-color\"?: MsScrollbarFaceColorProperty | MsScrollbarFaceColorProperty[],\n  \"-ms-scrollbar-highlight-color\"?: MsScrollbarHighlightColorProperty | MsScrollbarHighlightColorProperty[],\n  \"-ms-scrollbar-shadow-color\"?: MsScrollbarShadowColorProperty | MsScrollbarShadowColorProperty[],\n  \"-ms-text-autospace\"?: MsTextAutospaceProperty | MsTextAutospaceProperty[],\n  \"-ms-text-combine-horizontal\"?: TextCombineUprightProperty | TextCombineUprightProperty[],\n  \"-ms-text-overflow\"?: TextOverflowProperty | TextOverflowProperty[],\n  \"-ms-touch-action\"?: TouchActionProperty | TouchActionProperty[],\n  \"-ms-touch-select\"?: MsTouchSelectProperty | MsTouchSelectProperty[],\n  \"-ms-transform\"?: TransformProperty | TransformProperty[],\n  \"-ms-transform-origin\"?: TransformOriginProperty<TLength> | TransformOriginProperty<TLength>[],\n  \"-ms-transition-delay\"?: GlobalsString | GlobalsString[],\n  \"-ms-transition-duration\"?: GlobalsString | GlobalsString[],\n  \"-ms-transition-property\"?: TransitionPropertyProperty | TransitionPropertyProperty[],\n  \"-ms-transition-timing-function\"?: TransitionTimingFunctionProperty | TransitionTimingFunctionProperty[],\n  \"-ms-user-select\"?: MsUserSelectProperty | MsUserSelectProperty[],\n  \"-ms-word-break\"?: WordBreakProperty | WordBreakProperty[],\n  \"-ms-wrap-flow\"?: MsWrapFlowProperty | MsWrapFlowProperty[],\n  \"-ms-wrap-margin\"?: MsWrapMarginProperty<TLength> | MsWrapMarginProperty<TLength>[],\n  \"-ms-wrap-through\"?: MsWrapThroughProperty | MsWrapThroughProperty[],\n  \"-ms-writing-mode\"?: WritingModeProperty | WritingModeProperty[],\n  \"-o-object-fit\"?: ObjectFitProperty | ObjectFitProperty[],\n  \"-o-object-position\"?: ObjectPositionProperty<TLength> | ObjectPositionProperty<TLength>[],\n  \"-o-tab-size\"?: TabSizeProperty<TLength> | TabSizeProperty<TLength>[],\n  \"-o-text-overflow\"?: TextOverflowProperty | TextOverflowProperty[],\n  \"-o-transform-origin\"?: TransformOriginProperty<TLength> | TransformOriginProperty<TLength>[],\n  \"-webkit-align-content\"?: AlignContentProperty | AlignContentProperty[],\n  \"-webkit-align-items\"?: AlignItemsProperty | AlignItemsProperty[],\n  \"-webkit-align-self\"?: AlignSelfProperty | AlignSelfProperty[],\n  \"-webkit-animation-delay\"?: GlobalsString | GlobalsString[],\n  \"-webkit-animation-direction\"?: AnimationDirectionProperty | AnimationDirectionProperty[],\n  \"-webkit-animation-duration\"?: GlobalsString | GlobalsString[],\n  \"-webkit-animation-fill-mode\"?: AnimationFillModeProperty | AnimationFillModeProperty[],\n  \"-webkit-animation-iteration-count\"?: AnimationIterationCountProperty | AnimationIterationCountProperty[],\n  \"-webkit-animation-name\"?: AnimationNameProperty | AnimationNameProperty[],\n  \"-webkit-animation-play-state\"?: AnimationPlayStateProperty | AnimationPlayStateProperty[],\n  \"-webkit-animation-timing-function\"?: AnimationTimingFunctionProperty | AnimationTimingFunctionProperty[],\n  \"-webkit-appearance\"?: WebkitAppearanceProperty | WebkitAppearanceProperty[],\n  \"-webkit-backdrop-filter\"?: BackdropFilterProperty | BackdropFilterProperty[],\n  \"-webkit-backface-visibility\"?: BackfaceVisibilityProperty | BackfaceVisibilityProperty[],\n  \"-webkit-background-clip\"?: BackgroundClipProperty | BackgroundClipProperty[],\n  \"-webkit-background-origin\"?: BackgroundOriginProperty | BackgroundOriginProperty[],\n  \"-webkit-background-size\"?: BackgroundSizeProperty<TLength> | BackgroundSizeProperty<TLength>[],\n  \"-webkit-border-before-color\"?: WebkitBorderBeforeColorProperty | WebkitBorderBeforeColorProperty[],\n  \"-webkit-border-before-style\"?: WebkitBorderBeforeStyleProperty | WebkitBorderBeforeStyleProperty[],\n  \"-webkit-border-before-width\"?: WebkitBorderBeforeWidthProperty<TLength> | WebkitBorderBeforeWidthProperty<TLength>[],\n  \"-webkit-border-bottom-left-radius\"?: BorderBottomLeftRadiusProperty<TLength> | BorderBottomLeftRadiusProperty<TLength>[],\n  \"-webkit-border-bottom-right-radius\"?: BorderBottomRightRadiusProperty<TLength> | BorderBottomRightRadiusProperty<TLength>[],\n  \"-webkit-border-image-slice\"?: BorderImageSliceProperty | BorderImageSliceProperty[],\n  \"-webkit-border-top-left-radius\"?: BorderTopLeftRadiusProperty<TLength> | BorderTopLeftRadiusProperty<TLength>[],\n  \"-webkit-border-top-right-radius\"?: BorderTopRightRadiusProperty<TLength> | BorderTopRightRadiusProperty<TLength>[],\n  \"-webkit-box-decoration-break\"?: BoxDecorationBreakProperty | BoxDecorationBreakProperty[],\n  \"-webkit-box-reflect\"?: WebkitBoxReflectProperty<TLength> | WebkitBoxReflectProperty<TLength>[],\n  \"-webkit-box-shadow\"?: BoxShadowProperty | BoxShadowProperty[],\n  \"-webkit-box-sizing\"?: BoxSizingProperty | BoxSizingProperty[],\n  \"-webkit-clip-path\"?: ClipPathProperty | ClipPathProperty[],\n  \"-webkit-color-adjust\"?: ColorAdjustProperty | ColorAdjustProperty[],\n  \"-webkit-column-count\"?: ColumnCountProperty | ColumnCountProperty[],\n  \"-webkit-column-fill\"?: ColumnFillProperty | ColumnFillProperty[],\n  \"-webkit-column-gap\"?: ColumnGapProperty<TLength> | ColumnGapProperty<TLength>[],\n  \"-webkit-column-rule-color\"?: ColumnRuleColorProperty | ColumnRuleColorProperty[],\n  \"-webkit-column-rule-style\"?: ColumnRuleStyleProperty | ColumnRuleStyleProperty[],\n  \"-webkit-column-rule-width\"?: ColumnRuleWidthProperty<TLength> | ColumnRuleWidthProperty<TLength>[],\n  \"-webkit-column-span\"?: ColumnSpanProperty | ColumnSpanProperty[],\n  \"-webkit-column-width\"?: ColumnWidthProperty<TLength> | ColumnWidthProperty<TLength>[],\n  \"-webkit-filter\"?: FilterProperty | FilterProperty[],\n  \"-webkit-flex-basis\"?: FlexBasisProperty<TLength> | FlexBasisProperty<TLength>[],\n  \"-webkit-flex-direction\"?: FlexDirectionProperty | FlexDirectionProperty[],\n  \"-webkit-flex-grow\"?: GlobalsNumber | GlobalsNumber[],\n  \"-webkit-flex-shrink\"?: GlobalsNumber | GlobalsNumber[],\n  \"-webkit-flex-wrap\"?: FlexWrapProperty | FlexWrapProperty[],\n  \"-webkit-font-feature-settings\"?: FontFeatureSettingsProperty | FontFeatureSettingsProperty[],\n  \"-webkit-font-kerning\"?: FontKerningProperty | FontKerningProperty[],\n  \"-webkit-font-variant-ligatures\"?: FontVariantLigaturesProperty | FontVariantLigaturesProperty[],\n  \"-webkit-hyphens\"?: HyphensProperty | HyphensProperty[],\n  \"-webkit-justify-content\"?: JustifyContentProperty | JustifyContentProperty[],\n  \"-webkit-line-break\"?: LineBreakProperty | LineBreakProperty[],\n  \"-webkit-line-clamp\"?: WebkitLineClampProperty | WebkitLineClampProperty[],\n  \"-webkit-margin-end\"?: MarginInlineEndProperty<TLength> | MarginInlineEndProperty<TLength>[],\n  \"-webkit-margin-start\"?: MarginInlineStartProperty<TLength> | MarginInlineStartProperty<TLength>[],\n  \"-webkit-mask-attachment\"?: WebkitMaskAttachmentProperty | WebkitMaskAttachmentProperty[],\n  \"-webkit-mask-clip\"?: WebkitMaskClipProperty | WebkitMaskClipProperty[],\n  \"-webkit-mask-composite\"?: WebkitMaskCompositeProperty | WebkitMaskCompositeProperty[],\n  \"-webkit-mask-image\"?: WebkitMaskImageProperty | WebkitMaskImageProperty[],\n  \"-webkit-mask-origin\"?: WebkitMaskOriginProperty | WebkitMaskOriginProperty[],\n  \"-webkit-mask-position\"?: WebkitMaskPositionProperty<TLength> | WebkitMaskPositionProperty<TLength>[],\n  \"-webkit-mask-position-x\"?: WebkitMaskPositionXProperty<TLength> | WebkitMaskPositionXProperty<TLength>[],\n  \"-webkit-mask-position-y\"?: WebkitMaskPositionYProperty<TLength> | WebkitMaskPositionYProperty<TLength>[],\n  \"-webkit-mask-repeat\"?: WebkitMaskRepeatProperty | WebkitMaskRepeatProperty[],\n  \"-webkit-mask-repeat-x\"?: WebkitMaskRepeatXProperty | WebkitMaskRepeatXProperty[],\n  \"-webkit-mask-repeat-y\"?: WebkitMaskRepeatYProperty | WebkitMaskRepeatYProperty[],\n  \"-webkit-mask-size\"?: WebkitMaskSizeProperty<TLength> | WebkitMaskSizeProperty<TLength>[],\n  \"-webkit-max-inline-size\"?: MaxInlineSizeProperty<TLength> | MaxInlineSizeProperty<TLength>[],\n  \"-webkit-order\"?: GlobalsNumber | GlobalsNumber[],\n  \"-webkit-overflow-scrolling\"?: WebkitOverflowScrollingProperty | WebkitOverflowScrollingProperty[],\n  \"-webkit-padding-end\"?: PaddingInlineEndProperty<TLength> | PaddingInlineEndProperty<TLength>[],\n  \"-webkit-padding-start\"?: PaddingInlineStartProperty<TLength> | PaddingInlineStartProperty<TLength>[],\n  \"-webkit-perspective\"?: PerspectiveProperty<TLength> | PerspectiveProperty<TLength>[],\n  \"-webkit-perspective-origin\"?: PerspectiveOriginProperty<TLength> | PerspectiveOriginProperty<TLength>[],\n  \"-webkit-scroll-snap-type\"?: ScrollSnapTypeProperty | ScrollSnapTypeProperty[],\n  \"-webkit-shape-margin\"?: ShapeMarginProperty<TLength> | ShapeMarginProperty<TLength>[],\n  \"-webkit-tap-highlight-color\"?: WebkitTapHighlightColorProperty | WebkitTapHighlightColorProperty[],\n  \"-webkit-text-combine\"?: TextCombineUprightProperty | TextCombineUprightProperty[],\n  \"-webkit-text-decoration-color\"?: TextDecorationColorProperty | TextDecorationColorProperty[],\n  \"-webkit-text-decoration-line\"?: TextDecorationLineProperty | TextDecorationLineProperty[],\n  \"-webkit-text-decoration-skip\"?: TextDecorationSkipProperty | TextDecorationSkipProperty[],\n  \"-webkit-text-decoration-style\"?: TextDecorationStyleProperty | TextDecorationStyleProperty[],\n  \"-webkit-text-emphasis-color\"?: TextEmphasisColorProperty | TextEmphasisColorProperty[],\n  \"-webkit-text-emphasis-position\"?: GlobalsString | GlobalsString[],\n  \"-webkit-text-emphasis-style\"?: TextEmphasisStyleProperty | TextEmphasisStyleProperty[],\n  \"-webkit-text-fill-color\"?: WebkitTextFillColorProperty | WebkitTextFillColorProperty[],\n  \"-webkit-text-orientation\"?: TextOrientationProperty | TextOrientationProperty[],\n  \"-webkit-text-size-adjust\"?: TextSizeAdjustProperty | TextSizeAdjustProperty[],\n  \"-webkit-text-stroke-color\"?: WebkitTextStrokeColorProperty | WebkitTextStrokeColorProperty[],\n  \"-webkit-text-stroke-width\"?: WebkitTextStrokeWidthProperty<TLength> | WebkitTextStrokeWidthProperty<TLength>[],\n  \"-webkit-touch-callout\"?: WebkitTouchCalloutProperty | WebkitTouchCalloutProperty[],\n  \"-webkit-transform\"?: TransformProperty | TransformProperty[],\n  \"-webkit-transform-origin\"?: TransformOriginProperty<TLength> | TransformOriginProperty<TLength>[],\n  \"-webkit-transform-style\"?: TransformStyleProperty | TransformStyleProperty[],\n  \"-webkit-transition-delay\"?: GlobalsString | GlobalsString[],\n  \"-webkit-transition-duration\"?: GlobalsString | GlobalsString[],\n  \"-webkit-transition-property\"?: TransitionPropertyProperty | TransitionPropertyProperty[],\n  \"-webkit-transition-timing-function\"?: TransitionTimingFunctionProperty | TransitionTimingFunctionProperty[],\n  \"-webkit-user-modify\"?: WebkitUserModifyProperty | WebkitUserModifyProperty[],\n  \"-webkit-user-select\"?: UserSelectProperty | UserSelectProperty[],\n  \"-webkit-writing-mode\"?: WritingModeProperty | WritingModeProperty[],\n};\n\nexport type VendorShorthandPropertiesHyphenFallback<TLength = string | 0> = {\n  \"-moz-animation\"?: AnimationProperty | AnimationProperty[],\n  \"-moz-border-image\"?: BorderImageProperty | BorderImageProperty[],\n  \"-moz-column-rule\"?: ColumnRuleProperty<TLength> | ColumnRuleProperty<TLength>[],\n  \"-moz-columns\"?: ColumnsProperty<TLength> | ColumnsProperty<TLength>[],\n  \"-moz-transition\"?: TransitionProperty | TransitionProperty[],\n  \"-ms-content-zoom-limit\"?: GlobalsString | GlobalsString[],\n  \"-ms-content-zoom-snap\"?: MsContentZoomSnapProperty | MsContentZoomSnapProperty[],\n  \"-ms-flex\"?: FlexProperty<TLength> | FlexProperty<TLength>[],\n  \"-ms-scroll-limit\"?: GlobalsString | GlobalsString[],\n  \"-ms-scroll-snap-x\"?: GlobalsString | GlobalsString[],\n  \"-ms-scroll-snap-y\"?: GlobalsString | GlobalsString[],\n  \"-ms-transition\"?: TransitionProperty | TransitionProperty[],\n  \"-webkit-animation\"?: AnimationProperty | AnimationProperty[],\n  \"-webkit-border-before\"?: WebkitBorderBeforeProperty<TLength> | WebkitBorderBeforeProperty<TLength>[],\n  \"-webkit-border-image\"?: BorderImageProperty | BorderImageProperty[],\n  \"-webkit-border-radius\"?: BorderRadiusProperty<TLength> | BorderRadiusProperty<TLength>[],\n  \"-webkit-column-rule\"?: ColumnRuleProperty<TLength> | ColumnRuleProperty<TLength>[],\n  \"-webkit-columns\"?: ColumnsProperty<TLength> | ColumnsProperty<TLength>[],\n  \"-webkit-flex\"?: FlexProperty<TLength> | FlexProperty<TLength>[],\n  \"-webkit-flex-flow\"?: FlexFlowProperty | FlexFlowProperty[],\n  \"-webkit-mask\"?: WebkitMaskProperty<TLength> | WebkitMaskProperty<TLength>[],\n  \"-webkit-text-emphasis\"?: TextEmphasisProperty | TextEmphasisProperty[],\n  \"-webkit-text-stroke\"?: WebkitTextStrokeProperty<TLength> | WebkitTextStrokeProperty<TLength>[],\n  \"-webkit-transition\"?: TransitionProperty | TransitionProperty[],\n};\n\nexport type VendorPropertiesHyphenFallback<TLength = string | 0> = VendorLonghandPropertiesHyphenFallback<TLength> & VendorShorthandPropertiesHyphenFallback<TLength>;\n\nexport type ObsoletePropertiesHyphenFallback<TLength = string | 0> = {\n  \"box-align\"?: BoxAlignProperty | BoxAlignProperty[],\n  \"box-direction\"?: BoxDirectionProperty | BoxDirectionProperty[],\n  \"box-flex\"?: GlobalsNumber | GlobalsNumber[],\n  \"box-flex-group\"?: GlobalsNumber | GlobalsNumber[],\n  \"box-lines\"?: BoxLinesProperty | BoxLinesProperty[],\n  \"box-ordinal-group\"?: GlobalsNumber | GlobalsNumber[],\n  \"box-orient\"?: BoxOrientProperty | BoxOrientProperty[],\n  \"box-pack\"?: BoxPackProperty | BoxPackProperty[],\n  clip?: ClipProperty | ClipProperty[],\n  \"font-variant-alternates\"?: FontVariantAlternatesProperty | FontVariantAlternatesProperty[],\n  \"grid-column-gap\"?: GridColumnGapProperty<TLength> | GridColumnGapProperty<TLength>[],\n  \"grid-gap\"?: GridGapProperty<TLength> | GridGapProperty<TLength>[],\n  \"grid-row-gap\"?: GridRowGapProperty<TLength> | GridRowGapProperty<TLength>[],\n  \"ime-mode\"?: ImeModeProperty | ImeModeProperty[],\n  \"offset-block\"?: InsetBlockProperty<TLength> | InsetBlockProperty<TLength>[],\n  \"offset-block-end\"?: InsetBlockEndProperty<TLength> | InsetBlockEndProperty<TLength>[],\n  \"offset-block-start\"?: InsetBlockStartProperty<TLength> | InsetBlockStartProperty<TLength>[],\n  \"offset-inline\"?: InsetInlineProperty<TLength> | InsetInlineProperty<TLength>[],\n  \"offset-inline-end\"?: InsetInlineEndProperty<TLength> | InsetInlineEndProperty<TLength>[],\n  \"offset-inline-start\"?: InsetInlineStartProperty<TLength> | InsetInlineStartProperty<TLength>[],\n  \"scroll-snap-coordinate\"?: ScrollSnapCoordinateProperty<TLength> | ScrollSnapCoordinateProperty<TLength>[],\n  \"scroll-snap-destination\"?: ScrollSnapDestinationProperty<TLength> | ScrollSnapDestinationProperty<TLength>[],\n  \"scroll-snap-points-x\"?: ScrollSnapPointsXProperty | ScrollSnapPointsXProperty[],\n  \"scroll-snap-points-y\"?: ScrollSnapPointsYProperty | ScrollSnapPointsYProperty[],\n  \"scroll-snap-type-x\"?: ScrollSnapTypeXProperty | ScrollSnapTypeXProperty[],\n  \"scroll-snap-type-y\"?: ScrollSnapTypeYProperty | ScrollSnapTypeYProperty[],\n  \"scrollbar-track-color\"?: MsScrollbarTrackColorProperty | MsScrollbarTrackColorProperty[],\n  \"text-combine-horizontal\"?: TextCombineUprightProperty | TextCombineUprightProperty[],\n  \"-khtml-box-align\"?: BoxAlignProperty | BoxAlignProperty[],\n  \"-khtml-box-direction\"?: BoxDirectionProperty | BoxDirectionProperty[],\n  \"-khtml-box-flex\"?: GlobalsNumber | GlobalsNumber[],\n  \"-khtml-box-flex-group\"?: GlobalsNumber | GlobalsNumber[],\n  \"-khtml-box-lines\"?: BoxLinesProperty | BoxLinesProperty[],\n  \"-khtml-box-ordinal-group\"?: GlobalsNumber | GlobalsNumber[],\n  \"-khtml-box-orient\"?: BoxOrientProperty | BoxOrientProperty[],\n  \"-khtml-box-pack\"?: BoxPackProperty | BoxPackProperty[],\n  \"-khtml-line-break\"?: LineBreakProperty | LineBreakProperty[],\n  \"-khtml-opacity\"?: OpacityProperty | OpacityProperty[],\n  \"-khtml-user-select\"?: UserSelectProperty | UserSelectProperty[],\n  \"-moz-background-clip\"?: BackgroundClipProperty | BackgroundClipProperty[],\n  \"-moz-background-inline-policy\"?: BoxDecorationBreakProperty | BoxDecorationBreakProperty[],\n  \"-moz-background-origin\"?: BackgroundOriginProperty | BackgroundOriginProperty[],\n  \"-moz-background-size\"?: BackgroundSizeProperty<TLength> | BackgroundSizeProperty<TLength>[],\n  \"-moz-binding\"?: MozBindingProperty | MozBindingProperty[],\n  \"-moz-border-bottom-colors\"?: MozBorderBottomColorsProperty | MozBorderBottomColorsProperty[],\n  \"-moz-border-left-colors\"?: MozBorderLeftColorsProperty | MozBorderLeftColorsProperty[],\n  \"-moz-border-radius\"?: BorderRadiusProperty<TLength> | BorderRadiusProperty<TLength>[],\n  \"-moz-border-radius-bottomleft\"?: BorderBottomLeftRadiusProperty<TLength> | BorderBottomLeftRadiusProperty<TLength>[],\n  \"-moz-border-radius-bottomright\"?: BorderBottomRightRadiusProperty<TLength> | BorderBottomRightRadiusProperty<TLength>[],\n  \"-moz-border-radius-topleft\"?: BorderTopLeftRadiusProperty<TLength> | BorderTopLeftRadiusProperty<TLength>[],\n  \"-moz-border-radius-topright\"?: BorderTopRightRadiusProperty<TLength> | BorderTopRightRadiusProperty<TLength>[],\n  \"-moz-border-right-colors\"?: MozBorderRightColorsProperty | MozBorderRightColorsProperty[],\n  \"-moz-border-top-colors\"?: MozBorderTopColorsProperty | MozBorderTopColorsProperty[],\n  \"-moz-box-align\"?: BoxAlignProperty | BoxAlignProperty[],\n  \"-moz-box-direction\"?: BoxDirectionProperty | BoxDirectionProperty[],\n  \"-moz-box-flex\"?: GlobalsNumber | GlobalsNumber[],\n  \"-moz-box-ordinal-group\"?: GlobalsNumber | GlobalsNumber[],\n  \"-moz-box-orient\"?: BoxOrientProperty | BoxOrientProperty[],\n  \"-moz-box-pack\"?: BoxPackProperty | BoxPackProperty[],\n  \"-moz-box-shadow\"?: BoxShadowProperty | BoxShadowProperty[],\n  \"-moz-opacity\"?: OpacityProperty | OpacityProperty[],\n  \"-moz-outline\"?: OutlineProperty<TLength> | OutlineProperty<TLength>[],\n  \"-moz-outline-color\"?: OutlineColorProperty | OutlineColorProperty[],\n  \"-moz-outline-radius\"?: MozOutlineRadiusProperty<TLength> | MozOutlineRadiusProperty<TLength>[],\n  \"-moz-outline-style\"?: OutlineStyleProperty | OutlineStyleProperty[],\n  \"-moz-outline-width\"?: OutlineWidthProperty<TLength> | OutlineWidthProperty<TLength>[],\n  \"-moz-text-align-last\"?: TextAlignLastProperty | TextAlignLastProperty[],\n  \"-moz-text-blink\"?: MozTextBlinkProperty | MozTextBlinkProperty[],\n  \"-moz-text-decoration-color\"?: TextDecorationColorProperty | TextDecorationColorProperty[],\n  \"-moz-text-decoration-line\"?: TextDecorationLineProperty | TextDecorationLineProperty[],\n  \"-moz-text-decoration-style\"?: TextDecorationStyleProperty | TextDecorationStyleProperty[],\n  \"-moz-user-input\"?: MozUserInputProperty | MozUserInputProperty[],\n  \"-moz-window-shadow\"?: MozWindowShadowProperty | MozWindowShadowProperty[],\n  \"-ms-ime-mode\"?: ImeModeProperty | ImeModeProperty[],\n  \"-ms-scrollbar-track-color\"?: MsScrollbarTrackColorProperty | MsScrollbarTrackColorProperty[],\n  \"-o-animation\"?: AnimationProperty | AnimationProperty[],\n  \"-o-animation-delay\"?: GlobalsString | GlobalsString[],\n  \"-o-animation-direction\"?: AnimationDirectionProperty | AnimationDirectionProperty[],\n  \"-o-animation-duration\"?: GlobalsString | GlobalsString[],\n  \"-o-animation-fill-mode\"?: AnimationFillModeProperty | AnimationFillModeProperty[],\n  \"-o-animation-iteration-count\"?: AnimationIterationCountProperty | AnimationIterationCountProperty[],\n  \"-o-animation-name\"?: AnimationNameProperty | AnimationNameProperty[],\n  \"-o-animation-play-state\"?: AnimationPlayStateProperty | AnimationPlayStateProperty[],\n  \"-o-animation-timing-function\"?: AnimationTimingFunctionProperty | AnimationTimingFunctionProperty[],\n  \"-o-background-size\"?: BackgroundSizeProperty<TLength> | BackgroundSizeProperty<TLength>[],\n  \"-o-border-image\"?: BorderImageProperty | BorderImageProperty[],\n  \"-o-transform\"?: TransformProperty | TransformProperty[],\n  \"-o-transition\"?: TransitionProperty | TransitionProperty[],\n  \"-o-transition-delay\"?: GlobalsString | GlobalsString[],\n  \"-o-transition-duration\"?: GlobalsString | GlobalsString[],\n  \"-o-transition-property\"?: TransitionPropertyProperty | TransitionPropertyProperty[],\n  \"-o-transition-timing-function\"?: TransitionTimingFunctionProperty | TransitionTimingFunctionProperty[],\n  \"-webkit-box-align\"?: BoxAlignProperty | BoxAlignProperty[],\n  \"-webkit-box-direction\"?: BoxDirectionProperty | BoxDirectionProperty[],\n  \"-webkit-box-flex\"?: GlobalsNumber | GlobalsNumber[],\n  \"-webkit-box-flex-group\"?: GlobalsNumber | GlobalsNumber[],\n  \"-webkit-box-lines\"?: BoxLinesProperty | BoxLinesProperty[],\n  \"-webkit-box-ordinal-group\"?: GlobalsNumber | GlobalsNumber[],\n  \"-webkit-box-orient\"?: BoxOrientProperty | BoxOrientProperty[],\n  \"-webkit-box-pack\"?: BoxPackProperty | BoxPackProperty[],\n  \"-webkit-scroll-snap-points-x\"?: ScrollSnapPointsXProperty | ScrollSnapPointsXProperty[],\n  \"-webkit-scroll-snap-points-y\"?: ScrollSnapPointsYProperty | ScrollSnapPointsYProperty[],\n};\n\nexport type SvgPropertiesHyphenFallback<TLength = string | 0> = {\n  \"alignment-baseline\"?: AlignmentBaselineProperty | AlignmentBaselineProperty[],\n  \"baseline-shift\"?: BaselineShiftProperty<TLength> | BaselineShiftProperty<TLength>[],\n  clip?: ClipProperty | ClipProperty[],\n  \"clip-path\"?: ClipPathProperty | ClipPathProperty[],\n  \"clip-rule\"?: ClipRuleProperty | ClipRuleProperty[],\n  color?: ColorProperty | ColorProperty[],\n  \"color-interpolation\"?: ColorInterpolationProperty | ColorInterpolationProperty[],\n  \"color-rendering\"?: ColorRenderingProperty | ColorRenderingProperty[],\n  cursor?: CursorProperty | CursorProperty[],\n  direction?: DirectionProperty | DirectionProperty[],\n  display?: DisplayProperty | DisplayProperty[],\n  \"dominant-baseline\"?: DominantBaselineProperty | DominantBaselineProperty[],\n  fill?: FillProperty | FillProperty[],\n  \"fill-opacity\"?: GlobalsNumber | GlobalsNumber[],\n  \"fill-rule\"?: FillRuleProperty | FillRuleProperty[],\n  filter?: FilterProperty | FilterProperty[],\n  \"flood-color\"?: FloodColorProperty | FloodColorProperty[],\n  \"flood-opacity\"?: GlobalsNumber | GlobalsNumber[],\n  font?: FontProperty | FontProperty[],\n  \"font-family\"?: FontFamilyProperty | FontFamilyProperty[],\n  \"font-size\"?: FontSizeProperty<TLength> | FontSizeProperty<TLength>[],\n  \"font-size-adjust\"?: FontSizeAdjustProperty | FontSizeAdjustProperty[],\n  \"font-stretch\"?: FontStretchProperty | FontStretchProperty[],\n  \"font-style\"?: FontStyleProperty | FontStyleProperty[],\n  \"font-variant\"?: FontVariantProperty | FontVariantProperty[],\n  \"font-weight\"?: FontWeightProperty | FontWeightProperty[],\n  \"glyph-orientation-vertical\"?: GlyphOrientationVerticalProperty | GlyphOrientationVerticalProperty[],\n  \"image-rendering\"?: ImageRenderingProperty | ImageRenderingProperty[],\n  \"letter-spacing\"?: LetterSpacingProperty<TLength> | LetterSpacingProperty<TLength>[],\n  \"lighting-color\"?: LightingColorProperty | LightingColorProperty[],\n  \"line-height\"?: LineHeightProperty<TLength> | LineHeightProperty<TLength>[],\n  marker?: MarkerProperty | MarkerProperty[],\n  \"marker-end\"?: MarkerEndProperty | MarkerEndProperty[],\n  \"marker-mid\"?: MarkerMidProperty | MarkerMidProperty[],\n  \"marker-start\"?: MarkerStartProperty | MarkerStartProperty[],\n  mask?: MaskProperty<TLength> | MaskProperty<TLength>[],\n  opacity?: OpacityProperty | OpacityProperty[],\n  overflow?: OverflowProperty | OverflowProperty[],\n  \"paint-order\"?: PaintOrderProperty | PaintOrderProperty[],\n  \"pointer-events\"?: PointerEventsProperty | PointerEventsProperty[],\n  \"shape-rendering\"?: ShapeRenderingProperty | ShapeRenderingProperty[],\n  \"stop-color\"?: StopColorProperty | StopColorProperty[],\n  \"stop-opacity\"?: GlobalsNumber | GlobalsNumber[],\n  stroke?: StrokeProperty | StrokeProperty[],\n  \"stroke-dasharray\"?: StrokeDasharrayProperty<TLength> | StrokeDasharrayProperty<TLength>[],\n  \"stroke-dashoffset\"?: StrokeDashoffsetProperty<TLength> | StrokeDashoffsetProperty<TLength>[],\n  \"stroke-linecap\"?: StrokeLinecapProperty | StrokeLinecapProperty[],\n  \"stroke-linejoin\"?: StrokeLinejoinProperty | StrokeLinejoinProperty[],\n  \"stroke-miterlimit\"?: GlobalsNumber | GlobalsNumber[],\n  \"stroke-opacity\"?: GlobalsNumber | GlobalsNumber[],\n  \"stroke-width\"?: StrokeWidthProperty<TLength> | StrokeWidthProperty<TLength>[],\n  \"text-anchor\"?: TextAnchorProperty | TextAnchorProperty[],\n  \"text-decoration\"?: TextDecorationProperty<TLength> | TextDecorationProperty<TLength>[],\n  \"text-rendering\"?: TextRenderingProperty | TextRenderingProperty[],\n  \"unicode-bidi\"?: UnicodeBidiProperty | UnicodeBidiProperty[],\n  \"vector-effect\"?: VectorEffectProperty | VectorEffectProperty[],\n  visibility?: VisibilityProperty | VisibilityProperty[],\n  \"white-space\"?: WhiteSpaceProperty | WhiteSpaceProperty[],\n  \"word-spacing\"?: WordSpacingProperty<TLength> | WordSpacingProperty<TLength>[],\n  \"writing-mode\"?: WritingModeProperty | WritingModeProperty[],\n};\n\nexport type PropertiesHyphenFallback<TLength = string | 0> = StandardPropertiesHyphenFallback<TLength> &\n  VendorPropertiesHyphenFallback<TLength> &\n  ObsoletePropertiesHyphenFallback<TLength> &\n  SvgPropertiesHyphenFallback<TLength>;\n\nexport type CounterStyle = {\n  additiveSymbols?: string,\n  fallback?: string,\n  negative?: string,\n  pad?: string,\n  prefix?: string,\n  range?: CounterStyleRangeProperty,\n  speakAs?: CounterStyleSpeakAsProperty,\n  suffix?: string,\n  symbols?: string,\n  system?: CounterStyleSystemProperty,\n};\n\nexport type CounterStyleHyphen = {\n  \"additive-symbols\"?: string,\n  fallback?: string,\n  negative?: string,\n  pad?: string,\n  prefix?: string,\n  range?: CounterStyleRangeProperty,\n  \"speak-as\"?: CounterStyleSpeakAsProperty,\n  suffix?: string,\n  symbols?: string,\n  system?: CounterStyleSystemProperty,\n};\n\nexport type CounterStyleFallback = {\n  additiveSymbols?: string | string[],\n  fallback?: string | string[],\n  negative?: string | string[],\n  pad?: string | string[],\n  prefix?: string | string[],\n  range?: CounterStyleRangeProperty | CounterStyleRangeProperty[],\n  speakAs?: CounterStyleSpeakAsProperty | CounterStyleSpeakAsProperty[],\n  suffix?: string | string[],\n  symbols?: string | string[],\n  system?: CounterStyleSystemProperty | CounterStyleSystemProperty[],\n};\n\nexport type CounterStyleHyphenFallback = {\n  \"additive-symbols\"?: string | string[],\n  fallback?: string | string[],\n  negative?: string | string[],\n  pad?: string | string[],\n  prefix?: string | string[],\n  range?: CounterStyleRangeProperty | CounterStyleRangeProperty[],\n  \"speak-as\"?: CounterStyleSpeakAsProperty | CounterStyleSpeakAsProperty[],\n  suffix?: string | string[],\n  symbols?: string | string[],\n  system?: CounterStyleSystemProperty | CounterStyleSystemProperty[],\n};\n\nexport type FontFace = {\n  MozFontFeatureSettings?: FontFaceFontFeatureSettingsProperty,\n  fontDisplay?: FontFaceFontDisplayProperty,\n  fontFamily?: string,\n  fontFeatureSettings?: FontFaceFontFeatureSettingsProperty,\n  fontStretch?: FontFaceFontStretchProperty,\n  fontStyle?: FontFaceFontStyleProperty,\n  fontVariant?: FontFaceFontVariantProperty,\n  fontVariationSettings?: FontFaceFontVariationSettingsProperty,\n  fontWeight?: FontFaceFontWeightProperty,\n  src?: string,\n  unicodeRange?: string,\n};\n\nexport type FontFaceHyphen = {\n  \"-moz-font-feature-settings\"?: FontFaceFontFeatureSettingsProperty,\n  \"font-display\"?: FontFaceFontDisplayProperty,\n  \"font-family\"?: string,\n  \"font-feature-settings\"?: FontFaceFontFeatureSettingsProperty,\n  \"font-stretch\"?: FontFaceFontStretchProperty,\n  \"font-style\"?: FontFaceFontStyleProperty,\n  \"font-variant\"?: FontFaceFontVariantProperty,\n  \"font-variation-settings\"?: FontFaceFontVariationSettingsProperty,\n  \"font-weight\"?: FontFaceFontWeightProperty,\n  src?: string,\n  \"unicode-range\"?: string,\n};\n\nexport type FontFaceFallback = {\n  MozFontFeatureSettings?: FontFaceFontFeatureSettingsProperty | FontFaceFontFeatureSettingsProperty[],\n  fontDisplay?: FontFaceFontDisplayProperty | FontFaceFontDisplayProperty[],\n  fontFamily?: string | string[],\n  fontFeatureSettings?: FontFaceFontFeatureSettingsProperty | FontFaceFontFeatureSettingsProperty[],\n  fontStretch?: FontFaceFontStretchProperty | FontFaceFontStretchProperty[],\n  fontStyle?: FontFaceFontStyleProperty | FontFaceFontStyleProperty[],\n  fontVariant?: FontFaceFontVariantProperty | FontFaceFontVariantProperty[],\n  fontVariationSettings?: FontFaceFontVariationSettingsProperty | FontFaceFontVariationSettingsProperty[],\n  fontWeight?: FontFaceFontWeightProperty | FontFaceFontWeightProperty[],\n  src?: string | string[],\n  unicodeRange?: string | string[],\n};\n\nexport type FontFaceHyphenFallback = {\n  \"-moz-font-feature-settings\"?: FontFaceFontFeatureSettingsProperty | FontFaceFontFeatureSettingsProperty[],\n  \"font-display\"?: FontFaceFontDisplayProperty | FontFaceFontDisplayProperty[],\n  \"font-family\"?: string | string[],\n  \"font-feature-settings\"?: FontFaceFontFeatureSettingsProperty | FontFaceFontFeatureSettingsProperty[],\n  \"font-stretch\"?: FontFaceFontStretchProperty | FontFaceFontStretchProperty[],\n  \"font-style\"?: FontFaceFontStyleProperty | FontFaceFontStyleProperty[],\n  \"font-variant\"?: FontFaceFontVariantProperty | FontFaceFontVariantProperty[],\n  \"font-variation-settings\"?: FontFaceFontVariationSettingsProperty | FontFaceFontVariationSettingsProperty[],\n  \"font-weight\"?: FontFaceFontWeightProperty | FontFaceFontWeightProperty[],\n  src?: string | string[],\n  \"unicode-range\"?: string | string[],\n};\n\nexport type Viewport<TLength = string | 0> = {\n  msHeight?: ViewportHeightProperty<TLength>,\n  msMaxHeight?: ViewportMaxHeightProperty<TLength>,\n  msMaxWidth?: ViewportMaxWidthProperty<TLength>,\n  msMaxZoom?: ViewportMaxZoomProperty,\n  msMinHeight?: ViewportMinHeightProperty<TLength>,\n  msMinWidth?: ViewportMinWidthProperty<TLength>,\n  msMinZoom?: ViewportMinZoomProperty,\n  msOrientation?: ViewportOrientationProperty,\n  msUserZoom?: ViewportUserZoomProperty,\n  msWidth?: ViewportWidthProperty<TLength>,\n  msZoom?: ViewportZoomProperty,\n  OOrientation?: ViewportOrientationProperty,\n  height?: ViewportHeightProperty<TLength>,\n  maxHeight?: ViewportMaxHeightProperty<TLength>,\n  maxWidth?: ViewportMaxWidthProperty<TLength>,\n  maxZoom?: ViewportMaxZoomProperty,\n  minHeight?: ViewportMinHeightProperty<TLength>,\n  minWidth?: ViewportMinWidthProperty<TLength>,\n  minZoom?: ViewportMinZoomProperty,\n  orientation?: ViewportOrientationProperty,\n  userZoom?: ViewportUserZoomProperty,\n  width?: ViewportWidthProperty<TLength>,\n  zoom?: ViewportZoomProperty,\n};\n\nexport type ViewportHyphen<TLength = string | 0> = {\n  \"-ms-height\"?: ViewportHeightProperty<TLength>,\n  \"-ms-max-height\"?: ViewportMaxHeightProperty<TLength>,\n  \"-ms-max-width\"?: ViewportMaxWidthProperty<TLength>,\n  \"-ms-max-zoom\"?: ViewportMaxZoomProperty,\n  \"-ms-min-height\"?: ViewportMinHeightProperty<TLength>,\n  \"-ms-min-width\"?: ViewportMinWidthProperty<TLength>,\n  \"-ms-min-zoom\"?: ViewportMinZoomProperty,\n  \"-ms-orientation\"?: ViewportOrientationProperty,\n  \"-ms-user-zoom\"?: ViewportUserZoomProperty,\n  \"-ms-width\"?: ViewportWidthProperty<TLength>,\n  \"-ms-zoom\"?: ViewportZoomProperty,\n  \"-o-orientation\"?: ViewportOrientationProperty,\n  height?: ViewportHeightProperty<TLength>,\n  \"max-height\"?: ViewportMaxHeightProperty<TLength>,\n  \"max-width\"?: ViewportMaxWidthProperty<TLength>,\n  \"max-zoom\"?: ViewportMaxZoomProperty,\n  \"min-height\"?: ViewportMinHeightProperty<TLength>,\n  \"min-width\"?: ViewportMinWidthProperty<TLength>,\n  \"min-zoom\"?: ViewportMinZoomProperty,\n  orientation?: ViewportOrientationProperty,\n  \"user-zoom\"?: ViewportUserZoomProperty,\n  width?: ViewportWidthProperty<TLength>,\n  zoom?: ViewportZoomProperty,\n};\n\nexport type ViewportFallback<TLength = string | 0> = {\n  msHeight?: ViewportHeightProperty<TLength> | ViewportHeightProperty<TLength>[],\n  msMaxHeight?: ViewportMaxHeightProperty<TLength> | ViewportMaxHeightProperty<TLength>[],\n  msMaxWidth?: ViewportMaxWidthProperty<TLength> | ViewportMaxWidthProperty<TLength>[],\n  msMaxZoom?: ViewportMaxZoomProperty | ViewportMaxZoomProperty[],\n  msMinHeight?: ViewportMinHeightProperty<TLength> | ViewportMinHeightProperty<TLength>[],\n  msMinWidth?: ViewportMinWidthProperty<TLength> | ViewportMinWidthProperty<TLength>[],\n  msMinZoom?: ViewportMinZoomProperty | ViewportMinZoomProperty[],\n  msOrientation?: ViewportOrientationProperty | ViewportOrientationProperty[],\n  msUserZoom?: ViewportUserZoomProperty | ViewportUserZoomProperty[],\n  msWidth?: ViewportWidthProperty<TLength> | ViewportWidthProperty<TLength>[],\n  msZoom?: ViewportZoomProperty | ViewportZoomProperty[],\n  OOrientation?: ViewportOrientationProperty | ViewportOrientationProperty[],\n  height?: ViewportHeightProperty<TLength> | ViewportHeightProperty<TLength>[],\n  maxHeight?: ViewportMaxHeightProperty<TLength> | ViewportMaxHeightProperty<TLength>[],\n  maxWidth?: ViewportMaxWidthProperty<TLength> | ViewportMaxWidthProperty<TLength>[],\n  maxZoom?: ViewportMaxZoomProperty | ViewportMaxZoomProperty[],\n  minHeight?: ViewportMinHeightProperty<TLength> | ViewportMinHeightProperty<TLength>[],\n  minWidth?: ViewportMinWidthProperty<TLength> | ViewportMinWidthProperty<TLength>[],\n  minZoom?: ViewportMinZoomProperty | ViewportMinZoomProperty[],\n  orientation?: ViewportOrientationProperty | ViewportOrientationProperty[],\n  userZoom?: ViewportUserZoomProperty | ViewportUserZoomProperty[],\n  width?: ViewportWidthProperty<TLength> | ViewportWidthProperty<TLength>[],\n  zoom?: ViewportZoomProperty | ViewportZoomProperty[],\n};\n\nexport type ViewportHyphenFallback<TLength = string | 0> = {\n  \"-ms-height\"?: ViewportHeightProperty<TLength> | ViewportHeightProperty<TLength>[],\n  \"-ms-max-height\"?: ViewportMaxHeightProperty<TLength> | ViewportMaxHeightProperty<TLength>[],\n  \"-ms-max-width\"?: ViewportMaxWidthProperty<TLength> | ViewportMaxWidthProperty<TLength>[],\n  \"-ms-max-zoom\"?: ViewportMaxZoomProperty | ViewportMaxZoomProperty[],\n  \"-ms-min-height\"?: ViewportMinHeightProperty<TLength> | ViewportMinHeightProperty<TLength>[],\n  \"-ms-min-width\"?: ViewportMinWidthProperty<TLength> | ViewportMinWidthProperty<TLength>[],\n  \"-ms-min-zoom\"?: ViewportMinZoomProperty | ViewportMinZoomProperty[],\n  \"-ms-orientation\"?: ViewportOrientationProperty | ViewportOrientationProperty[],\n  \"-ms-user-zoom\"?: ViewportUserZoomProperty | ViewportUserZoomProperty[],\n  \"-ms-width\"?: ViewportWidthProperty<TLength> | ViewportWidthProperty<TLength>[],\n  \"-ms-zoom\"?: ViewportZoomProperty | ViewportZoomProperty[],\n  \"-o-orientation\"?: ViewportOrientationProperty | ViewportOrientationProperty[],\n  height?: ViewportHeightProperty<TLength> | ViewportHeightProperty<TLength>[],\n  \"max-height\"?: ViewportMaxHeightProperty<TLength> | ViewportMaxHeightProperty<TLength>[],\n  \"max-width\"?: ViewportMaxWidthProperty<TLength> | ViewportMaxWidthProperty<TLength>[],\n  \"max-zoom\"?: ViewportMaxZoomProperty | ViewportMaxZoomProperty[],\n  \"min-height\"?: ViewportMinHeightProperty<TLength> | ViewportMinHeightProperty<TLength>[],\n  \"min-width\"?: ViewportMinWidthProperty<TLength> | ViewportMinWidthProperty<TLength>[],\n  \"min-zoom\"?: ViewportMinZoomProperty | ViewportMinZoomProperty[],\n  orientation?: ViewportOrientationProperty | ViewportOrientationProperty[],\n  \"user-zoom\"?: ViewportUserZoomProperty | ViewportUserZoomProperty[],\n  width?: ViewportWidthProperty<TLength> | ViewportWidthProperty<TLength>[],\n  zoom?: ViewportZoomProperty | ViewportZoomProperty[],\n};\n\nexport type AtRules =\n  | \"@charset\"\n  | \"@counter-style\"\n  | \"@document\"\n  | \"@font-face\"\n  | \"@font-feature-values\"\n  | \"@import\"\n  | \"@keyframes\"\n  | \"@media\"\n  | \"@namespace\"\n  | \"@page\"\n  | \"@supports\"\n  | \"@viewport\";\n\nexport type AdvancedPseudos =\n  | \":-moz-any()\"\n  | \":-moz-dir\"\n  | \":-webkit-any()\"\n  | \"::cue\"\n  | \"::part\"\n  | \"::slotted\"\n  | \":dir\"\n  | \":has\"\n  | \":host\"\n  | \":host-context\"\n  | \":is\"\n  | \":lang\"\n  | \":matches()\"\n  | \":not\"\n  | \":nth-child\"\n  | \":nth-last-child\"\n  | \":nth-last-of-type\"\n  | \":nth-of-type\"\n  | \":where\";\n\nexport type SimplePseudos =\n  | \":-khtml-any-link\"\n  | \":-moz-any-link\"\n  | \":-moz-focusring\"\n  | \":-moz-full-screen\"\n  | \":-moz-placeholder\"\n  | \":-moz-read-only\"\n  | \":-moz-read-write\"\n  | \":-ms-fullscreen\"\n  | \":-ms-input-placeholder\"\n  | \":-webkit-any-link\"\n  | \":-webkit-full-screen\"\n  | \"::-moz-placeholder\"\n  | \"::-moz-progress-bar\"\n  | \"::-moz-range-progress\"\n  | \"::-moz-range-thumb\"\n  | \"::-moz-range-track\"\n  | \"::-moz-selection\"\n  | \"::-ms-backdrop\"\n  | \"::-ms-browse\"\n  | \"::-ms-check\"\n  | \"::-ms-clear\"\n  | \"::-ms-fill\"\n  | \"::-ms-fill-lower\"\n  | \"::-ms-fill-upper\"\n  | \"::-ms-input-placeholder\"\n  | \"::-ms-reveal\"\n  | \"::-ms-thumb\"\n  | \"::-ms-ticks-after\"\n  | \"::-ms-ticks-before\"\n  | \"::-ms-tooltip\"\n  | \"::-ms-track\"\n  | \"::-ms-value\"\n  | \"::-webkit-backdrop\"\n  | \"::-webkit-input-placeholder\"\n  | \"::-webkit-progress-bar\"\n  | \"::-webkit-progress-inner-value\"\n  | \"::-webkit-progress-value\"\n  | \"::-webkit-slider-runnable-track\"\n  | \"::-webkit-slider-thumb\"\n  | \"::after\"\n  | \"::backdrop\"\n  | \"::before\"\n  | \"::cue\"\n  | \"::first-letter\"\n  | \"::first-line\"\n  | \"::grammar-error\"\n  | \"::marker\"\n  | \"::placeholder\"\n  | \"::selection\"\n  | \"::spelling-error\"\n  | \":active\"\n  | \":after\"\n  | \":any-link\"\n  | \":before\"\n  | \":blank\"\n  | \":checked\"\n  | \":default\"\n  | \":defined\"\n  | \":disabled\"\n  | \":empty\"\n  | \":enabled\"\n  | \":first\"\n  | \":first-child\"\n  | \":first-letter\"\n  | \":first-line\"\n  | \":first-of-type\"\n  | \":focus\"\n  | \":focus-visible\"\n  | \":focus-within\"\n  | \":fullscreen\"\n  | \":hover\"\n  | \":in-range\"\n  | \":indeterminate\"\n  | \":invalid\"\n  | \":last-child\"\n  | \":last-of-type\"\n  | \":left\"\n  | \":link\"\n  | \":only-child\"\n  | \":only-of-type\"\n  | \":optional\"\n  | \":out-of-range\"\n  | \":placeholder-shown\"\n  | \":read-only\"\n  | \":read-write\"\n  | \":required\"\n  | \":right\"\n  | \":root\"\n  | \":scope\"\n  | \":target\"\n  | \":valid\"\n  | \":visited\";\n\nexport type Pseudos = AdvancedPseudos | SimplePseudos;\n\nexport type HtmlAttributes =\n  | \"[-webkit-dropzone]\"\n  | \"[-webkit-slot]\"\n  | \"[abbr]\"\n  | \"[accept-charset]\"\n  | \"[accept]\"\n  | \"[accesskey]\"\n  | \"[action]\"\n  | \"[align]\"\n  | \"[alink]\"\n  | \"[allow]\"\n  | \"[allowfullscreen]\"\n  | \"[allowpaymentrequest]\"\n  | \"[alt]\"\n  | \"[archive]\"\n  | \"[async]\"\n  | \"[autobuffer]\"\n  | \"[autocapitalize]\"\n  | \"[autocomplete]\"\n  | \"[autofocus]\"\n  | \"[autoplay]\"\n  | \"[axis]\"\n  | \"[background]\"\n  | \"[behavior]\"\n  | \"[bgcolor]\"\n  | \"[border]\"\n  | \"[bottommargin]\"\n  | \"[buffered]\"\n  | \"[cellpadding]\"\n  | \"[cellspacing]\"\n  | \"[char]\"\n  | \"[charoff]\"\n  | \"[charset]\"\n  | \"[checked]\"\n  | \"[cite]\"\n  | \"[class]\"\n  | \"[classid]\"\n  | \"[clear]\"\n  | \"[code]\"\n  | \"[codebase]\"\n  | \"[codetype]\"\n  | \"[color]\"\n  | \"[cols]\"\n  | \"[colspan]\"\n  | \"[command]\"\n  | \"[compact]\"\n  | \"[content]\"\n  | \"[contenteditable]\"\n  | \"[contextmenu]\"\n  | \"[controls]\"\n  | \"[coords]\"\n  | \"[crossorigin]\"\n  | \"[data]\"\n  | \"[datafld]\"\n  | \"[datasrc]\"\n  | \"[datetime]\"\n  | \"[declare]\"\n  | \"[decoding]\"\n  | \"[default]\"\n  | \"[defer]\"\n  | \"[dir]\"\n  | \"[direction]\"\n  | \"[disabled]\"\n  | \"[download]\"\n  | \"[draggable]\"\n  | \"[dropzone]\"\n  | \"[enctype]\"\n  | \"[exportparts]\"\n  | \"[face]\"\n  | \"[for]\"\n  | \"[form]\"\n  | \"[formaction]\"\n  | \"[formenctype]\"\n  | \"[formmethod]\"\n  | \"[formnovalidate]\"\n  | \"[formtarget]\"\n  | \"[frame]\"\n  | \"[frameborder]\"\n  | \"[headers]\"\n  | \"[height]\"\n  | \"[hidden]\"\n  | \"[high]\"\n  | \"[href]\"\n  | \"[hreflang]\"\n  | \"[hspace]\"\n  | \"[http-equiv]\"\n  | \"[icon]\"\n  | \"[id]\"\n  | \"[inputmode]\"\n  | \"[integrity]\"\n  | \"[intrinsicsize]\"\n  | \"[is]\"\n  | \"[ismap]\"\n  | \"[itemid]\"\n  | \"[itemprop]\"\n  | \"[itemref]\"\n  | \"[itemscope]\"\n  | \"[itemtype]\"\n  | \"[kind]\"\n  | \"[label]\"\n  | \"[lang]\"\n  | \"[language]\"\n  | \"[leftmargin]\"\n  | \"[link]\"\n  | \"[loading]\"\n  | \"[longdesc]\"\n  | \"[loop]\"\n  | \"[low]\"\n  | \"[manifest]\"\n  | \"[marginheight]\"\n  | \"[marginwidth]\"\n  | \"[max]\"\n  | \"[maxlength]\"\n  | \"[mayscript]\"\n  | \"[media]\"\n  | \"[method]\"\n  | \"[methods]\"\n  | \"[min]\"\n  | \"[minlength]\"\n  | \"[moz-opaque]\"\n  | \"[mozallowfullscreen]\"\n  | \"[mozbrowser]\"\n  | \"[mozcurrentsampleoffset]\"\n  | \"[msallowfullscreen]\"\n  | \"[multiple]\"\n  | \"[muted]\"\n  | \"[name]\"\n  | \"[nohref]\"\n  | \"[nomodule]\"\n  | \"[noresize]\"\n  | \"[noshade]\"\n  | \"[novalidate]\"\n  | \"[nowrap]\"\n  | \"[object]\"\n  | \"[onafterprint]\"\n  | \"[onbeforeprint]\"\n  | \"[onbeforeunload]\"\n  | \"[onblur]\"\n  | \"[onerror]\"\n  | \"[onfocus]\"\n  | \"[onhashchange]\"\n  | \"[onlanguagechange]\"\n  | \"[onload]\"\n  | \"[onmessage]\"\n  | \"[onoffline]\"\n  | \"[ononline]\"\n  | \"[onpopstate]\"\n  | \"[onredo]\"\n  | \"[onresize]\"\n  | \"[onstorage]\"\n  | \"[onundo]\"\n  | \"[onunload]\"\n  | \"[open]\"\n  | \"[optimum]\"\n  | \"[part]\"\n  | \"[ping]\"\n  | \"[placeholder]\"\n  | \"[played]\"\n  | \"[poster]\"\n  | \"[prefetch]\"\n  | \"[preload]\"\n  | \"[profile]\"\n  | \"[prompt]\"\n  | \"[radiogroup]\"\n  | \"[readonly]\"\n  | \"[referrerPolicy]\"\n  | \"[referrerpolicy]\"\n  | \"[rel]\"\n  | \"[required]\"\n  | \"[rev]\"\n  | \"[reversed]\"\n  | \"[rightmargin]\"\n  | \"[rows]\"\n  | \"[rowspan]\"\n  | \"[rules]\"\n  | \"[sandbox-allow-modals]\"\n  | \"[sandbox-allow-popups-to-escape-sandbox]\"\n  | \"[sandbox-allow-popups]\"\n  | \"[sandbox-allow-presentation]\"\n  | \"[sandbox-allow-storage-access-by-user-activation]\"\n  | \"[sandbox-allow-top-navigation-by-user-activation]\"\n  | \"[sandbox]\"\n  | \"[scope]\"\n  | \"[scoped]\"\n  | \"[scrollamount]\"\n  | \"[scrolldelay]\"\n  | \"[scrolling]\"\n  | \"[selected]\"\n  | \"[shape]\"\n  | \"[size]\"\n  | \"[sizes]\"\n  | \"[slot]\"\n  | \"[span]\"\n  | \"[spellcheck]\"\n  | \"[src]\"\n  | \"[srcdoc]\"\n  | \"[srclang]\"\n  | \"[srcset]\"\n  | \"[standby]\"\n  | \"[start]\"\n  | \"[style]\"\n  | \"[summary]\"\n  | \"[tabindex]\"\n  | \"[target]\"\n  | \"[text]\"\n  | \"[title]\"\n  | \"[topmargin]\"\n  | \"[translate]\"\n  | \"[truespeed]\"\n  | \"[type]\"\n  | \"[typemustmatch]\"\n  | \"[usemap]\"\n  | \"[valign]\"\n  | \"[value]\"\n  | \"[valuetype]\"\n  | \"[version]\"\n  | \"[vlink]\"\n  | \"[volume]\"\n  | \"[vspace]\"\n  | \"[webkitallowfullscreen]\"\n  | \"[width]\"\n  | \"[wrap]\"\n  | \"[xmlns]\";\n\nexport type SvgAttributes =\n  | \"[accent-height]\"\n  | \"[alignment-baseline]\"\n  | \"[allowReorder]\"\n  | \"[alphabetic]\"\n  | \"[animation]\"\n  | \"[arabic-form]\"\n  | \"[ascent]\"\n  | \"[attributeName]\"\n  | \"[attributeType]\"\n  | \"[azimuth]\"\n  | \"[baseFrequency]\"\n  | \"[baseProfile]\"\n  | \"[baseline-shift]\"\n  | \"[bbox]\"\n  | \"[begin]\"\n  | \"[bias]\"\n  | \"[by]\"\n  | \"[calcMode]\"\n  | \"[cap-height]\"\n  | \"[class]\"\n  | \"[clip-path]\"\n  | \"[clip-rule]\"\n  | \"[clipPathUnits]\"\n  | \"[clip]\"\n  | \"[color-interpolation-filters]\"\n  | \"[color-interpolation]\"\n  | \"[color-profile]\"\n  | \"[color-rendering]\"\n  | \"[color]\"\n  | \"[contentScriptType]\"\n  | \"[contentStyleType]\"\n  | \"[cursor]\"\n  | \"[cx]\"\n  | \"[cy]\"\n  | \"[d]\"\n  | \"[descent]\"\n  | \"[diffuseConstant]\"\n  | \"[direction]\"\n  | \"[display]\"\n  | \"[divisor]\"\n  | \"[document]\"\n  | \"[dominant-baseline]\"\n  | \"[download]\"\n  | \"[dur]\"\n  | \"[dx]\"\n  | \"[dy]\"\n  | \"[edgeMode]\"\n  | \"[elevation]\"\n  | \"[enable-background]\"\n  | \"[externalResourcesRequired]\"\n  | \"[fill-opacity]\"\n  | \"[fill-rule]\"\n  | \"[fill]\"\n  | \"[filterRes]\"\n  | \"[filterUnits]\"\n  | \"[filter]\"\n  | \"[flood-color]\"\n  | \"[flood-opacity]\"\n  | \"[font-family]\"\n  | \"[font-size-adjust]\"\n  | \"[font-size]\"\n  | \"[font-stretch]\"\n  | \"[font-style]\"\n  | \"[font-variant]\"\n  | \"[font-weight]\"\n  | \"[format]\"\n  | \"[fr]\"\n  | \"[from]\"\n  | \"[fx]\"\n  | \"[fy]\"\n  | \"[g1]\"\n  | \"[g2]\"\n  | \"[global]\"\n  | \"[glyph-name]\"\n  | \"[glyph-orientation-horizontal]\"\n  | \"[glyph-orientation-vertical]\"\n  | \"[glyphRef]\"\n  | \"[gradientTransform]\"\n  | \"[gradientUnits]\"\n  | \"[graphical]\"\n  | \"[hanging]\"\n  | \"[hatchContentUnits]\"\n  | \"[hatchUnits]\"\n  | \"[height]\"\n  | \"[horiz-adv-x]\"\n  | \"[horiz-origin-x]\"\n  | \"[horiz-origin-y]\"\n  | \"[href]\"\n  | \"[hreflang]\"\n  | \"[id]\"\n  | \"[ideographic]\"\n  | \"[image-rendering]\"\n  | \"[in2]\"\n  | \"[in]\"\n  | \"[k1]\"\n  | \"[k2]\"\n  | \"[k3]\"\n  | \"[k4]\"\n  | \"[k]\"\n  | \"[kernelMatrix]\"\n  | \"[kernelUnitLength]\"\n  | \"[kerning]\"\n  | \"[keyPoints]\"\n  | \"[lang]\"\n  | \"[lengthAdjust]\"\n  | \"[letter-spacing]\"\n  | \"[lighterForError]\"\n  | \"[lighting-color]\"\n  | \"[limitingConeAngle]\"\n  | \"[local]\"\n  | \"[marker-end]\"\n  | \"[marker-mid]\"\n  | \"[marker-start]\"\n  | \"[markerHeight]\"\n  | \"[markerUnits]\"\n  | \"[markerWidth]\"\n  | \"[maskContentUnits]\"\n  | \"[maskUnits]\"\n  | \"[mask]\"\n  | \"[mathematical]\"\n  | \"[media]\"\n  | \"[method]\"\n  | \"[mode]\"\n  | \"[name]\"\n  | \"[numOctaves]\"\n  | \"[offset]\"\n  | \"[opacity]\"\n  | \"[operator]\"\n  | \"[order]\"\n  | \"[orient]\"\n  | \"[orientation]\"\n  | \"[origin]\"\n  | \"[overflow]\"\n  | \"[overline-position]\"\n  | \"[overline-thickness]\"\n  | \"[paint-order]\"\n  | \"[panose-1]\"\n  | \"[path]\"\n  | \"[patternContentUnits]\"\n  | \"[patternTransform]\"\n  | \"[patternUnits]\"\n  | \"[ping]\"\n  | \"[pitch]\"\n  | \"[pointer-events]\"\n  | \"[pointsAtX]\"\n  | \"[pointsAtY]\"\n  | \"[pointsAtZ]\"\n  | \"[points]\"\n  | \"[preserveAlpha]\"\n  | \"[preserveAspectRatio]\"\n  | \"[primitiveUnits]\"\n  | \"[r]\"\n  | \"[radius]\"\n  | \"[refX]\"\n  | \"[refY]\"\n  | \"[referrerPolicy]\"\n  | \"[rel]\"\n  | \"[rendering-intent]\"\n  | \"[repeatCount]\"\n  | \"[requiredExtensions]\"\n  | \"[requiredFeatures]\"\n  | \"[rotate]\"\n  | \"[rx]\"\n  | \"[ry]\"\n  | \"[scale]\"\n  | \"[seed]\"\n  | \"[shape-rendering]\"\n  | \"[side]\"\n  | \"[slope]\"\n  | \"[solid-color]\"\n  | \"[solid-opacity]\"\n  | \"[spacing]\"\n  | \"[specularConstant]\"\n  | \"[specularExponent]\"\n  | \"[spreadMethod]\"\n  | \"[startOffset]\"\n  | \"[stdDeviation]\"\n  | \"[stemh]\"\n  | \"[stemv]\"\n  | \"[stitchTiles]\"\n  | \"[stop-color]\"\n  | \"[stop-opacity]\"\n  | \"[strikethrough-position]\"\n  | \"[strikethrough-thickness]\"\n  | \"[string]\"\n  | \"[stroke-dasharray]\"\n  | \"[stroke-dashoffset]\"\n  | \"[stroke-linecap]\"\n  | \"[stroke-linejoin]\"\n  | \"[stroke-miterlimit]\"\n  | \"[stroke-opacity]\"\n  | \"[stroke-width]\"\n  | \"[stroke]\"\n  | \"[style]\"\n  | \"[surfaceScale]\"\n  | \"[systemLanguage]\"\n  | \"[tabindex]\"\n  | \"[targetX]\"\n  | \"[targetY]\"\n  | \"[target]\"\n  | \"[text-anchor]\"\n  | \"[text-decoration]\"\n  | \"[text-overflow]\"\n  | \"[text-rendering]\"\n  | \"[textLength]\"\n  | \"[title]\"\n  | \"[to]\"\n  | \"[transform]\"\n  | \"[type]\"\n  | \"[u1]\"\n  | \"[u2]\"\n  | \"[underline-position]\"\n  | \"[underline-thickness]\"\n  | \"[unicode-bidi]\"\n  | \"[unicode-range]\"\n  | \"[unicode]\"\n  | \"[units-per-em]\"\n  | \"[v-alphabetic]\"\n  | \"[v-hanging]\"\n  | \"[v-ideographic]\"\n  | \"[v-mathematical]\"\n  | \"[values]\"\n  | \"[vector-effect]\"\n  | \"[version]\"\n  | \"[vert-adv-y]\"\n  | \"[vert-origin-x]\"\n  | \"[vert-origin-y]\"\n  | \"[viewBox]\"\n  | \"[viewTarget]\"\n  | \"[visibility]\"\n  | \"[white-space]\"\n  | \"[width]\"\n  | \"[widths]\"\n  | \"[word-spacing]\"\n  | \"[writing-mode]\"\n  | \"[x-height]\"\n  | \"[x1]\"\n  | \"[x2]\"\n  | \"[xChannelSelector]\"\n  | \"[x]\"\n  | \"[y1]\"\n  | \"[y2]\"\n  | \"[yChannelSelector]\"\n  | \"[y]\"\n  | \"[z]\"\n  | \"[zoomAndPan]\";\n\nexport type Globals = \"-moz-initial\" | \"inherit\" | \"initial\" | \"revert\" | \"unset\";\n\ntype GlobalsString = Globals | string;\n\ntype GlobalsNumber = Globals | number;\n\nexport type AlignContentProperty = Globals | ContentDistribution | ContentPosition | \"baseline\" | \"normal\" | string;\n\nexport type AlignItemsProperty = Globals | SelfPosition | \"baseline\" | \"normal\" | \"stretch\" | string;\n\nexport type AlignSelfProperty = Globals | SelfPosition | \"auto\" | \"baseline\" | \"normal\" | \"stretch\" | string;\n\nexport type AnimationProperty = Globals | SingleAnimation | string;\n\nexport type AnimationDirectionProperty = Globals | SingleAnimationDirection | string;\n\nexport type AnimationFillModeProperty = Globals | SingleAnimationFillMode | string;\n\nexport type AnimationIterationCountProperty = Globals | \"infinite\" | string | number;\n\nexport type AnimationNameProperty = Globals | \"none\" | string;\n\nexport type AnimationPlayStateProperty = Globals | \"paused\" | \"running\" | string;\n\nexport type AnimationTimingFunctionProperty = Globals | TimingFunction | string;\n\nexport type AppearanceProperty = Globals | Compat | \"button\" | \"none\" | \"textfield\";\n\nexport type AspectRatioProperty = Globals | \"auto\" | string;\n\nexport type BackdropFilterProperty = Globals | \"none\" | string;\n\nexport type BackfaceVisibilityProperty = Globals | \"hidden\" | \"visible\";\n\nexport type BackgroundProperty<TLength> = Globals | FinalBgLayer<TLength> | string;\n\nexport type BackgroundAttachmentProperty = Globals | Attachment | string;\n\nexport type BackgroundBlendModeProperty = Globals | BlendMode | string;\n\nexport type BackgroundClipProperty = Globals | Box | string;\n\nexport type BackgroundColorProperty = Globals | Color;\n\nexport type BackgroundImageProperty = Globals | \"none\" | string;\n\nexport type BackgroundOriginProperty = Globals | Box | string;\n\nexport type BackgroundPositionProperty<TLength> = Globals | BgPosition<TLength> | string;\n\nexport type BackgroundPositionXProperty<TLength> = Globals | TLength | \"center\" | \"left\" | \"right\" | \"x-end\" | \"x-start\" | string;\n\nexport type BackgroundPositionYProperty<TLength> = Globals | TLength | \"bottom\" | \"center\" | \"top\" | \"y-end\" | \"y-start\" | string;\n\nexport type BackgroundRepeatProperty = Globals | RepeatStyle | string;\n\nexport type BackgroundSizeProperty<TLength> = Globals | BgSize<TLength> | string;\n\nexport type BlockOverflowProperty = Globals | \"clip\" | \"ellipsis\" | string;\n\nexport type BlockSizeProperty<TLength> =\n  | Globals\n  | TLength\n  | \"-moz-fit-content\"\n  | \"-moz-max-content\"\n  | \"-moz-min-content\"\n  | \"-webkit-fill-available\"\n  | \"auto\"\n  | \"available\"\n  | \"fit-content\"\n  | \"max-content\"\n  | \"min-content\"\n  | string;\n\nexport type BorderProperty<TLength> = Globals | LineWidth<TLength> | LineStyle | Color | string;\n\nexport type BorderBlockProperty<TLength> = Globals | LineWidth<TLength> | LineStyle | Color | string;\n\nexport type BorderBlockColorProperty = Globals | Color | string;\n\nexport type BorderBlockEndProperty<TLength> = Globals | LineWidth<TLength> | LineStyle | Color | string;\n\nexport type BorderBlockEndColorProperty = Globals | Color;\n\nexport type BorderBlockEndStyleProperty = Globals | LineStyle;\n\nexport type BorderBlockEndWidthProperty<TLength> = Globals | LineWidth<TLength>;\n\nexport type BorderBlockStartProperty<TLength> = Globals | LineWidth<TLength> | LineStyle | Color | string;\n\nexport type BorderBlockStartColorProperty = Globals | Color;\n\nexport type BorderBlockStartStyleProperty = Globals | LineStyle;\n\nexport type BorderBlockStartWidthProperty<TLength> = Globals | LineWidth<TLength>;\n\nexport type BorderBlockStyleProperty = Globals | LineStyle;\n\nexport type BorderBlockWidthProperty<TLength> = Globals | LineWidth<TLength>;\n\nexport type BorderBottomProperty<TLength> = Globals | LineWidth<TLength> | LineStyle | Color | string;\n\nexport type BorderBottomColorProperty = Globals | Color;\n\nexport type BorderBottomLeftRadiusProperty<TLength> = Globals | TLength | string;\n\nexport type BorderBottomRightRadiusProperty<TLength> = Globals | TLength | string;\n\nexport type BorderBottomStyleProperty = Globals | LineStyle;\n\nexport type BorderBottomWidthProperty<TLength> = Globals | LineWidth<TLength>;\n\nexport type BorderCollapseProperty = Globals | \"collapse\" | \"separate\";\n\nexport type BorderColorProperty = Globals | Color | string;\n\nexport type BorderEndEndRadiusProperty<TLength> = Globals | TLength | string;\n\nexport type BorderEndStartRadiusProperty<TLength> = Globals | TLength | string;\n\nexport type BorderImageProperty = Globals | \"none\" | \"repeat\" | \"round\" | \"space\" | \"stretch\" | string | number;\n\nexport type BorderImageOutsetProperty<TLength> = Globals | TLength | string | number;\n\nexport type BorderImageRepeatProperty = Globals | \"repeat\" | \"round\" | \"space\" | \"stretch\" | string;\n\nexport type BorderImageSliceProperty = Globals | string | number;\n\nexport type BorderImageSourceProperty = Globals | \"none\" | string;\n\nexport type BorderImageWidthProperty<TLength> = Globals | TLength | \"auto\" | string | number;\n\nexport type BorderInlineProperty<TLength> = Globals | LineWidth<TLength> | LineStyle | Color | string;\n\nexport type BorderInlineColorProperty = Globals | Color | string;\n\nexport type BorderInlineEndProperty<TLength> = Globals | LineWidth<TLength> | LineStyle | Color | string;\n\nexport type BorderInlineEndColorProperty = Globals | Color;\n\nexport type BorderInlineEndStyleProperty = Globals | LineStyle;\n\nexport type BorderInlineEndWidthProperty<TLength> = Globals | LineWidth<TLength>;\n\nexport type BorderInlineStartProperty<TLength> = Globals | LineWidth<TLength> | LineStyle | Color | string;\n\nexport type BorderInlineStartColorProperty = Globals | Color;\n\nexport type BorderInlineStartStyleProperty = Globals | LineStyle;\n\nexport type BorderInlineStartWidthProperty<TLength> = Globals | LineWidth<TLength>;\n\nexport type BorderInlineStyleProperty = Globals | LineStyle;\n\nexport type BorderInlineWidthProperty<TLength> = Globals | LineWidth<TLength>;\n\nexport type BorderLeftProperty<TLength> = Globals | LineWidth<TLength> | LineStyle | Color | string;\n\nexport type BorderLeftColorProperty = Globals | Color;\n\nexport type BorderLeftStyleProperty = Globals | LineStyle;\n\nexport type BorderLeftWidthProperty<TLength> = Globals | LineWidth<TLength>;\n\nexport type BorderRadiusProperty<TLength> = Globals | TLength | string;\n\nexport type BorderRightProperty<TLength> = Globals | LineWidth<TLength> | LineStyle | Color | string;\n\nexport type BorderRightColorProperty = Globals | Color;\n\nexport type BorderRightStyleProperty = Globals | LineStyle;\n\nexport type BorderRightWidthProperty<TLength> = Globals | LineWidth<TLength>;\n\nexport type BorderSpacingProperty<TLength> = Globals | TLength | string;\n\nexport type BorderStartEndRadiusProperty<TLength> = Globals | TLength | string;\n\nexport type BorderStartStartRadiusProperty<TLength> = Globals | TLength | string;\n\nexport type BorderStyleProperty = Globals | LineStyle | string;\n\nexport type BorderTopProperty<TLength> = Globals | LineWidth<TLength> | LineStyle | Color | string;\n\nexport type BorderTopColorProperty = Globals | Color;\n\nexport type BorderTopLeftRadiusProperty<TLength> = Globals | TLength | string;\n\nexport type BorderTopRightRadiusProperty<TLength> = Globals | TLength | string;\n\nexport type BorderTopStyleProperty = Globals | LineStyle;\n\nexport type BorderTopWidthProperty<TLength> = Globals | LineWidth<TLength>;\n\nexport type BorderWidthProperty<TLength> = Globals | LineWidth<TLength> | string;\n\nexport type BottomProperty<TLength> = Globals | TLength | \"auto\" | string;\n\nexport type BoxAlignProperty = Globals | \"baseline\" | \"center\" | \"end\" | \"start\" | \"stretch\";\n\nexport type BoxDecorationBreakProperty = Globals | \"clone\" | \"slice\";\n\nexport type BoxDirectionProperty = Globals | \"inherit\" | \"normal\" | \"reverse\";\n\nexport type BoxLinesProperty = Globals | \"multiple\" | \"single\";\n\nexport type BoxOrientProperty = Globals | \"block-axis\" | \"horizontal\" | \"inherit\" | \"inline-axis\" | \"vertical\";\n\nexport type BoxPackProperty = Globals | \"center\" | \"end\" | \"justify\" | \"start\";\n\nexport type BoxShadowProperty = Globals | \"none\" | string;\n\nexport type BoxSizingProperty = Globals | \"border-box\" | \"content-box\";\n\nexport type BreakAfterProperty =\n  | Globals\n  | \"all\"\n  | \"always\"\n  | \"auto\"\n  | \"avoid\"\n  | \"avoid-column\"\n  | \"avoid-page\"\n  | \"avoid-region\"\n  | \"column\"\n  | \"left\"\n  | \"page\"\n  | \"recto\"\n  | \"region\"\n  | \"right\"\n  | \"verso\";\n\nexport type BreakBeforeProperty =\n  | Globals\n  | \"all\"\n  | \"always\"\n  | \"auto\"\n  | \"avoid\"\n  | \"avoid-column\"\n  | \"avoid-page\"\n  | \"avoid-region\"\n  | \"column\"\n  | \"left\"\n  | \"page\"\n  | \"recto\"\n  | \"region\"\n  | \"right\"\n  | \"verso\";\n\nexport type BreakInsideProperty = Globals | \"auto\" | \"avoid\" | \"avoid-column\" | \"avoid-page\" | \"avoid-region\";\n\nexport type CaptionSideProperty = Globals | \"block-end\" | \"block-start\" | \"bottom\" | \"inline-end\" | \"inline-start\" | \"top\";\n\nexport type CaretColorProperty = Globals | Color | \"auto\";\n\nexport type ClearProperty = Globals | \"both\" | \"inline-end\" | \"inline-start\" | \"left\" | \"none\" | \"right\";\n\nexport type ClipProperty = Globals | \"auto\" | string;\n\nexport type ClipPathProperty = Globals | GeometryBox | \"none\" | string;\n\nexport type ColorProperty = Globals | Color;\n\nexport type ColorAdjustProperty = Globals | \"economy\" | \"exact\";\n\nexport type ColumnCountProperty = Globals | \"auto\" | number;\n\nexport type ColumnFillProperty = Globals | \"auto\" | \"balance\" | \"balance-all\";\n\nexport type ColumnGapProperty<TLength> = Globals | TLength | \"normal\" | string;\n\nexport type ColumnRuleProperty<TLength> = Globals | LineWidth<TLength> | LineStyle | Color | string;\n\nexport type ColumnRuleColorProperty = Globals | Color;\n\nexport type ColumnRuleStyleProperty = Globals | LineStyle | string;\n\nexport type ColumnRuleWidthProperty<TLength> = Globals | LineWidth<TLength> | string;\n\nexport type ColumnSpanProperty = Globals | \"all\" | \"none\";\n\nexport type ColumnWidthProperty<TLength> = Globals | TLength | \"auto\";\n\nexport type ColumnsProperty<TLength> = Globals | TLength | \"auto\" | string | number;\n\nexport type ContainProperty = Globals | \"content\" | \"layout\" | \"none\" | \"paint\" | \"size\" | \"strict\" | \"style\" | string;\n\nexport type ContentProperty = Globals | ContentList | \"none\" | \"normal\" | string;\n\nexport type CounterIncrementProperty = Globals | \"none\" | string;\n\nexport type CounterResetProperty = Globals | \"none\" | string;\n\nexport type CounterSetProperty = Globals | \"none\" | string;\n\nexport type CursorProperty =\n  | Globals\n  | \"-moz-grab\"\n  | \"-webkit-grab\"\n  | \"alias\"\n  | \"all-scroll\"\n  | \"auto\"\n  | \"cell\"\n  | \"col-resize\"\n  | \"context-menu\"\n  | \"copy\"\n  | \"crosshair\"\n  | \"default\"\n  | \"e-resize\"\n  | \"ew-resize\"\n  | \"grab\"\n  | \"grabbing\"\n  | \"help\"\n  | \"move\"\n  | \"n-resize\"\n  | \"ne-resize\"\n  | \"nesw-resize\"\n  | \"no-drop\"\n  | \"none\"\n  | \"not-allowed\"\n  | \"ns-resize\"\n  | \"nw-resize\"\n  | \"nwse-resize\"\n  | \"pointer\"\n  | \"progress\"\n  | \"row-resize\"\n  | \"s-resize\"\n  | \"se-resize\"\n  | \"sw-resize\"\n  | \"text\"\n  | \"vertical-text\"\n  | \"w-resize\"\n  | \"wait\"\n  | \"zoom-in\"\n  | \"zoom-out\"\n  | string;\n\nexport type DirectionProperty = Globals | \"ltr\" | \"rtl\";\n\nexport type DisplayProperty = Globals | DisplayOutside | DisplayInside | DisplayInternal | DisplayLegacy | \"contents\" | \"list-item\" | \"none\" | string;\n\nexport type EmptyCellsProperty = Globals | \"hide\" | \"show\";\n\nexport type FilterProperty = Globals | \"none\" | string;\n\nexport type FlexProperty<TLength> = Globals | TLength | \"auto\" | \"available\" | \"content\" | \"fit-content\" | \"max-content\" | \"min-content\" | \"none\" | string | number;\n\nexport type FlexBasisProperty<TLength> =\n  | Globals\n  | TLength\n  | \"-moz-max-content\"\n  | \"-moz-min-content\"\n  | \"-webkit-auto\"\n  | \"auto\"\n  | \"available\"\n  | \"content\"\n  | \"fit-content\"\n  | \"max-content\"\n  | \"min-content\"\n  | string;\n\nexport type FlexDirectionProperty = Globals | \"column\" | \"column-reverse\" | \"row\" | \"row-reverse\";\n\nexport type FlexFlowProperty = Globals | \"column\" | \"column-reverse\" | \"nowrap\" | \"row\" | \"row-reverse\" | \"wrap\" | \"wrap-reverse\" | string;\n\nexport type FlexWrapProperty = Globals | \"nowrap\" | \"wrap\" | \"wrap-reverse\";\n\nexport type FloatProperty = Globals | \"inline-end\" | \"inline-start\" | \"left\" | \"none\" | \"right\";\n\nexport type FontProperty = Globals | \"caption\" | \"icon\" | \"menu\" | \"message-box\" | \"small-caption\" | \"status-bar\" | string;\n\nexport type FontFamilyProperty = Globals | GenericFamily | string;\n\nexport type FontFeatureSettingsProperty = Globals | \"normal\" | string;\n\nexport type FontKerningProperty = Globals | \"auto\" | \"none\" | \"normal\";\n\nexport type FontLanguageOverrideProperty = Globals | \"normal\" | string;\n\nexport type FontOpticalSizingProperty = Globals | \"auto\" | \"none\";\n\nexport type FontSizeProperty<TLength> = Globals | AbsoluteSize | TLength | \"larger\" | \"smaller\" | string;\n\nexport type FontSizeAdjustProperty = Globals | \"none\" | number;\n\nexport type FontStretchProperty = Globals | FontStretchAbsolute;\n\nexport type FontStyleProperty = Globals | \"italic\" | \"normal\" | \"oblique\" | string;\n\nexport type FontSynthesisProperty = Globals | \"none\" | \"style\" | \"weight\" | string;\n\nexport type FontVariantProperty =\n  | Globals\n  | EastAsianVariantValues\n  | \"all-petite-caps\"\n  | \"all-small-caps\"\n  | \"common-ligatures\"\n  | \"contextual\"\n  | \"diagonal-fractions\"\n  | \"discretionary-ligatures\"\n  | \"full-width\"\n  | \"historical-forms\"\n  | \"historical-ligatures\"\n  | \"lining-nums\"\n  | \"no-common-ligatures\"\n  | \"no-contextual\"\n  | \"no-discretionary-ligatures\"\n  | \"no-historical-ligatures\"\n  | \"none\"\n  | \"normal\"\n  | \"oldstyle-nums\"\n  | \"ordinal\"\n  | \"petite-caps\"\n  | \"proportional-nums\"\n  | \"proportional-width\"\n  | \"ruby\"\n  | \"slashed-zero\"\n  | \"small-caps\"\n  | \"stacked-fractions\"\n  | \"tabular-nums\"\n  | \"titling-caps\"\n  | \"unicase\"\n  | string;\n\nexport type FontVariantAlternatesProperty = Globals | \"historical-forms\" | \"normal\" | string;\n\nexport type FontVariantCapsProperty = Globals | \"all-petite-caps\" | \"all-small-caps\" | \"normal\" | \"petite-caps\" | \"small-caps\" | \"titling-caps\" | \"unicase\";\n\nexport type FontVariantEastAsianProperty = Globals | EastAsianVariantValues | \"full-width\" | \"normal\" | \"proportional-width\" | \"ruby\" | string;\n\nexport type FontVariantLigaturesProperty =\n  | Globals\n  | \"common-ligatures\"\n  | \"contextual\"\n  | \"discretionary-ligatures\"\n  | \"historical-ligatures\"\n  | \"no-common-ligatures\"\n  | \"no-contextual\"\n  | \"no-discretionary-ligatures\"\n  | \"no-historical-ligatures\"\n  | \"none\"\n  | \"normal\"\n  | string;\n\nexport type FontVariantNumericProperty =\n  | Globals\n  | \"diagonal-fractions\"\n  | \"lining-nums\"\n  | \"normal\"\n  | \"oldstyle-nums\"\n  | \"ordinal\"\n  | \"proportional-nums\"\n  | \"slashed-zero\"\n  | \"stacked-fractions\"\n  | \"tabular-nums\"\n  | string;\n\nexport type FontVariantPositionProperty = Globals | \"normal\" | \"sub\" | \"super\";\n\nexport type FontVariationSettingsProperty = Globals | \"normal\" | string;\n\nexport type FontWeightProperty = Globals | FontWeightAbsolute | \"bolder\" | \"lighter\";\n\nexport type GapProperty<TLength> = Globals | TLength | \"normal\" | string;\n\nexport type GridProperty = Globals | \"none\" | string;\n\nexport type GridAreaProperty = Globals | GridLine | string;\n\nexport type GridAutoColumnsProperty<TLength> = Globals | TrackBreadth<TLength> | string;\n\nexport type GridAutoFlowProperty = Globals | \"column\" | \"dense\" | \"row\" | string;\n\nexport type GridAutoRowsProperty<TLength> = Globals | TrackBreadth<TLength> | string;\n\nexport type GridColumnProperty = Globals | GridLine | string;\n\nexport type GridColumnEndProperty = Globals | GridLine;\n\nexport type GridColumnGapProperty<TLength> = Globals | TLength | string;\n\nexport type GridColumnStartProperty = Globals | GridLine;\n\nexport type GridGapProperty<TLength> = Globals | TLength | string;\n\nexport type GridRowProperty = Globals | GridLine | string;\n\nexport type GridRowEndProperty = Globals | GridLine;\n\nexport type GridRowGapProperty<TLength> = Globals | TLength | string;\n\nexport type GridRowStartProperty = Globals | GridLine;\n\nexport type GridTemplateProperty = Globals | \"none\" | string;\n\nexport type GridTemplateAreasProperty = Globals | \"none\" | string;\n\nexport type GridTemplateColumnsProperty<TLength> = Globals | TrackBreadth<TLength> | \"none\" | \"subgrid\" | string;\n\nexport type GridTemplateRowsProperty<TLength> = Globals | TrackBreadth<TLength> | \"none\" | \"subgrid\" | string;\n\nexport type HangingPunctuationProperty = Globals | \"allow-end\" | \"first\" | \"force-end\" | \"last\" | \"none\" | string;\n\nexport type HeightProperty<TLength> =\n  | Globals\n  | TLength\n  | \"-moz-max-content\"\n  | \"-moz-min-content\"\n  | \"-webkit-fit-content\"\n  | \"auto\"\n  | \"available\"\n  | \"fit-content\"\n  | \"max-content\"\n  | \"min-content\"\n  | string;\n\nexport type HyphensProperty = Globals | \"auto\" | \"manual\" | \"none\";\n\nexport type ImageOrientationProperty = Globals | \"flip\" | \"from-image\" | string;\n\nexport type ImageRenderingProperty = Globals | \"-moz-crisp-edges\" | \"-webkit-optimize-contrast\" | \"auto\" | \"crisp-edges\" | \"pixelated\";\n\nexport type ImageResolutionProperty = Globals | \"from-image\" | string;\n\nexport type ImeModeProperty = Globals | \"active\" | \"auto\" | \"disabled\" | \"inactive\" | \"normal\";\n\nexport type InitialLetterProperty = Globals | \"normal\" | string | number;\n\nexport type InlineSizeProperty<TLength> =\n  | Globals\n  | TLength\n  | \"-moz-fit-content\"\n  | \"-moz-max-content\"\n  | \"-moz-min-content\"\n  | \"-webkit-fill-available\"\n  | \"auto\"\n  | \"available\"\n  | \"fit-content\"\n  | \"max-content\"\n  | \"min-content\"\n  | string;\n\nexport type InsetProperty<TLength> = Globals | TLength | \"auto\" | string;\n\nexport type InsetBlockProperty<TLength> = Globals | TLength | \"auto\" | string;\n\nexport type InsetBlockEndProperty<TLength> = Globals | TLength | \"auto\" | string;\n\nexport type InsetBlockStartProperty<TLength> = Globals | TLength | \"auto\" | string;\n\nexport type InsetInlineProperty<TLength> = Globals | TLength | \"auto\" | string;\n\nexport type InsetInlineEndProperty<TLength> = Globals | TLength | \"auto\" | string;\n\nexport type InsetInlineStartProperty<TLength> = Globals | TLength | \"auto\" | string;\n\nexport type IsolationProperty = Globals | \"auto\" | \"isolate\";\n\nexport type JustifyContentProperty = Globals | ContentDistribution | ContentPosition | \"left\" | \"normal\" | \"right\" | string;\n\nexport type JustifyItemsProperty = Globals | SelfPosition | \"baseline\" | \"left\" | \"legacy\" | \"normal\" | \"right\" | \"stretch\" | string;\n\nexport type JustifySelfProperty = Globals | SelfPosition | \"auto\" | \"baseline\" | \"left\" | \"normal\" | \"right\" | \"stretch\" | string;\n\nexport type LeftProperty<TLength> = Globals | TLength | \"auto\" | string;\n\nexport type LetterSpacingProperty<TLength> = Globals | TLength | \"normal\";\n\nexport type LineBreakProperty = Globals | \"anywhere\" | \"auto\" | \"loose\" | \"normal\" | \"strict\";\n\nexport type LineClampProperty = Globals | \"none\" | number;\n\nexport type LineHeightProperty<TLength> = Globals | TLength | \"normal\" | string | number;\n\nexport type LineHeightStepProperty<TLength> = Globals | TLength;\n\nexport type ListStyleProperty = Globals | \"inside\" | \"none\" | \"outside\" | string;\n\nexport type ListStyleImageProperty = Globals | \"none\" | string;\n\nexport type ListStylePositionProperty = Globals | \"inside\" | \"outside\";\n\nexport type ListStyleTypeProperty = Globals | \"none\" | string;\n\nexport type MarginProperty<TLength> = Globals | TLength | \"auto\" | string;\n\nexport type MarginBlockProperty<TLength> = Globals | TLength | \"auto\" | string;\n\nexport type MarginBlockEndProperty<TLength> = Globals | TLength | \"auto\" | string;\n\nexport type MarginBlockStartProperty<TLength> = Globals | TLength | \"auto\" | string;\n\nexport type MarginBottomProperty<TLength> = Globals | TLength | \"auto\" | string;\n\nexport type MarginInlineProperty<TLength> = Globals | TLength | \"auto\" | string;\n\nexport type MarginInlineEndProperty<TLength> = Globals | TLength | \"auto\" | string;\n\nexport type MarginInlineStartProperty<TLength> = Globals | TLength | \"auto\" | string;\n\nexport type MarginLeftProperty<TLength> = Globals | TLength | \"auto\" | string;\n\nexport type MarginRightProperty<TLength> = Globals | TLength | \"auto\" | string;\n\nexport type MarginTopProperty<TLength> = Globals | TLength | \"auto\" | string;\n\nexport type MaskProperty<TLength> = Globals | MaskLayer<TLength> | string;\n\nexport type MaskBorderProperty = Globals | \"alpha\" | \"luminance\" | \"none\" | \"repeat\" | \"round\" | \"space\" | \"stretch\" | string | number;\n\nexport type MaskBorderModeProperty = Globals | \"alpha\" | \"luminance\";\n\nexport type MaskBorderOutsetProperty<TLength> = Globals | TLength | string | number;\n\nexport type MaskBorderRepeatProperty = Globals | \"repeat\" | \"round\" | \"space\" | \"stretch\" | string;\n\nexport type MaskBorderSliceProperty = Globals | string | number;\n\nexport type MaskBorderSourceProperty = Globals | \"none\" | string;\n\nexport type MaskBorderWidthProperty<TLength> = Globals | TLength | \"auto\" | string | number;\n\nexport type MaskClipProperty = Globals | GeometryBox | \"no-clip\" | string;\n\nexport type MaskCompositeProperty = Globals | CompositingOperator | string;\n\nexport type MaskImageProperty = Globals | \"none\" | string;\n\nexport type MaskModeProperty = Globals | MaskingMode | string;\n\nexport type MaskOriginProperty = Globals | Box | \"margin-box\" | string;\n\nexport type MaskPositionProperty<TLength> = Globals | Position<TLength> | string;\n\nexport type MaskRepeatProperty = Globals | RepeatStyle | string;\n\nexport type MaskSizeProperty<TLength> = Globals | BgSize<TLength> | string;\n\nexport type MaskTypeProperty = Globals | \"alpha\" | \"luminance\";\n\nexport type MaxBlockSizeProperty<TLength> =\n  | Globals\n  | TLength\n  | \"-moz-max-content\"\n  | \"-moz-min-content\"\n  | \"-webkit-fill-available\"\n  | \"fill-available\"\n  | \"fit-content\"\n  | \"max-content\"\n  | \"min-content\"\n  | \"none\"\n  | string;\n\nexport type MaxHeightProperty<TLength> =\n  | Globals\n  | TLength\n  | \"-moz-fit-content\"\n  | \"-moz-max-content\"\n  | \"-moz-min-content\"\n  | \"-webkit-fit-content\"\n  | \"-webkit-max-content\"\n  | \"-webkit-min-content\"\n  | \"fill-available\"\n  | \"fit-content\"\n  | \"intrinsic\"\n  | \"max-content\"\n  | \"min-content\"\n  | \"none\"\n  | string;\n\nexport type MaxInlineSizeProperty<TLength> =\n  | Globals\n  | TLength\n  | \"-moz-fit-content\"\n  | \"-moz-max-content\"\n  | \"-moz-min-content\"\n  | \"-webkit-fill-available\"\n  | \"fill-available\"\n  | \"fit-content\"\n  | \"max-content\"\n  | \"min-content\"\n  | \"none\"\n  | string;\n\nexport type MaxLinesProperty = Globals | \"none\" | number;\n\nexport type MaxWidthProperty<TLength> =\n  | Globals\n  | TLength\n  | \"-moz-fit-content\"\n  | \"-moz-max-content\"\n  | \"-moz-min-content\"\n  | \"-webkit-fit-content\"\n  | \"-webkit-max-content\"\n  | \"-webkit-min-content\"\n  | \"fill-available\"\n  | \"fit-content\"\n  | \"intrinsic\"\n  | \"max-content\"\n  | \"min-content\"\n  | \"none\"\n  | string;\n\nexport type MinBlockSizeProperty<TLength> =\n  | Globals\n  | TLength\n  | \"-moz-max-content\"\n  | \"-moz-min-content\"\n  | \"-webkit-fill-available\"\n  | \"auto\"\n  | \"fill-available\"\n  | \"fit-content\"\n  | \"max-content\"\n  | \"min-content\"\n  | string;\n\nexport type MinHeightProperty<TLength> =\n  | Globals\n  | TLength\n  | \"-moz-fit-content\"\n  | \"-moz-max-content\"\n  | \"-moz-min-content\"\n  | \"-webkit-fit-content\"\n  | \"-webkit-max-content\"\n  | \"-webkit-min-content\"\n  | \"auto\"\n  | \"fill-available\"\n  | \"fit-content\"\n  | \"intrinsic\"\n  | \"max-content\"\n  | \"min-content\"\n  | string;\n\nexport type MinInlineSizeProperty<TLength> =\n  | Globals\n  | TLength\n  | \"-moz-fit-content\"\n  | \"-moz-max-content\"\n  | \"-moz-min-content\"\n  | \"-webkit-fill-available\"\n  | \"auto\"\n  | \"fill-available\"\n  | \"fit-content\"\n  | \"max-content\"\n  | \"min-content\"\n  | string;\n\nexport type MinWidthProperty<TLength> =\n  | Globals\n  | TLength\n  | \"-moz-fit-content\"\n  | \"-moz-max-content\"\n  | \"-moz-min-content\"\n  | \"-webkit-fill-available\"\n  | \"-webkit-fit-content\"\n  | \"-webkit-max-content\"\n  | \"-webkit-min-content\"\n  | \"auto\"\n  | \"fill-available\"\n  | \"fit-content\"\n  | \"intrinsic\"\n  | \"max-content\"\n  | \"min-content\"\n  | \"min-intrinsic\"\n  | string;\n\nexport type MixBlendModeProperty = Globals | BlendMode;\n\nexport type OffsetProperty<TLength> = Globals | Position<TLength> | GeometryBox | \"auto\" | \"none\" | string;\n\nexport type OffsetDistanceProperty<TLength> = Globals | TLength | string;\n\nexport type OffsetPathProperty = Globals | GeometryBox | \"none\" | string;\n\nexport type OffsetRotateProperty = Globals | \"auto\" | \"reverse\" | string;\n\nexport type ObjectFitProperty = Globals | \"contain\" | \"cover\" | \"fill\" | \"none\" | \"scale-down\";\n\nexport type ObjectPositionProperty<TLength> = Globals | Position<TLength>;\n\nexport type OffsetAnchorProperty<TLength> = Globals | Position<TLength> | \"auto\";\n\nexport type OpacityProperty = Globals | string | number;\n\nexport type OutlineProperty<TLength> = Globals | Color | LineStyle | LineWidth<TLength> | \"auto\" | \"invert\" | string;\n\nexport type OutlineColorProperty = Globals | Color | \"invert\";\n\nexport type OutlineOffsetProperty<TLength> = Globals | TLength;\n\nexport type OutlineStyleProperty = Globals | LineStyle | \"auto\" | string;\n\nexport type OutlineWidthProperty<TLength> = Globals | LineWidth<TLength>;\n\nexport type OverflowProperty = Globals | \"auto\" | \"hidden\" | \"scroll\" | \"visible\" | string;\n\nexport type OverflowAnchorProperty = Globals | \"auto\" | \"none\";\n\nexport type OverflowBlockProperty = Globals | \"auto\" | \"clip\" | \"hidden\" | \"scroll\" | \"visible\";\n\nexport type OverflowClipBoxProperty = Globals | \"content-box\" | \"padding-box\";\n\nexport type OverflowInlineProperty = Globals | \"auto\" | \"clip\" | \"hidden\" | \"scroll\" | \"visible\";\n\nexport type OverflowWrapProperty = Globals | \"anywhere\" | \"break-word\" | \"normal\";\n\nexport type OverflowXProperty = Globals | \"auto\" | \"hidden\" | \"scroll\" | \"visible\";\n\nexport type OverflowYProperty = Globals | \"auto\" | \"hidden\" | \"scroll\" | \"visible\";\n\nexport type OverscrollBehaviorProperty = Globals | \"auto\" | \"contain\" | \"none\" | string;\n\nexport type OverscrollBehaviorBlockProperty = Globals | \"auto\" | \"contain\" | \"none\";\n\nexport type OverscrollBehaviorInlineProperty = Globals | \"auto\" | \"contain\" | \"none\";\n\nexport type OverscrollBehaviorXProperty = Globals | \"auto\" | \"contain\" | \"none\";\n\nexport type OverscrollBehaviorYProperty = Globals | \"auto\" | \"contain\" | \"none\";\n\nexport type PaddingProperty<TLength> = Globals | TLength | string;\n\nexport type PaddingBlockProperty<TLength> = Globals | TLength | string;\n\nexport type PaddingBlockEndProperty<TLength> = Globals | TLength | string;\n\nexport type PaddingBlockStartProperty<TLength> = Globals | TLength | string;\n\nexport type PaddingBottomProperty<TLength> = Globals | TLength | string;\n\nexport type PaddingInlineProperty<TLength> = Globals | TLength | string;\n\nexport type PaddingInlineEndProperty<TLength> = Globals | TLength | string;\n\nexport type PaddingInlineStartProperty<TLength> = Globals | TLength | string;\n\nexport type PaddingLeftProperty<TLength> = Globals | TLength | string;\n\nexport type PaddingRightProperty<TLength> = Globals | TLength | string;\n\nexport type PaddingTopProperty<TLength> = Globals | TLength | string;\n\nexport type PageBreakAfterProperty = Globals | \"always\" | \"auto\" | \"avoid\" | \"left\" | \"recto\" | \"right\" | \"verso\";\n\nexport type PageBreakBeforeProperty = Globals | \"always\" | \"auto\" | \"avoid\" | \"left\" | \"recto\" | \"right\" | \"verso\";\n\nexport type PageBreakInsideProperty = Globals | \"auto\" | \"avoid\";\n\nexport type PaintOrderProperty = Globals | \"fill\" | \"markers\" | \"normal\" | \"stroke\" | string;\n\nexport type PerspectiveProperty<TLength> = Globals | TLength | \"none\";\n\nexport type PerspectiveOriginProperty<TLength> = Globals | Position<TLength>;\n\nexport type PlaceContentProperty = Globals | ContentDistribution | ContentPosition | \"baseline\" | \"normal\" | string;\n\nexport type PlaceItemsProperty = Globals | SelfPosition | \"baseline\" | \"normal\" | \"stretch\" | string;\n\nexport type PlaceSelfProperty = Globals | SelfPosition | \"auto\" | \"baseline\" | \"normal\" | \"stretch\" | string;\n\nexport type PointerEventsProperty = Globals | \"all\" | \"auto\" | \"fill\" | \"inherit\" | \"none\" | \"painted\" | \"stroke\" | \"visible\" | \"visibleFill\" | \"visiblePainted\" | \"visibleStroke\";\n\nexport type PositionProperty = Globals | \"-webkit-sticky\" | \"absolute\" | \"fixed\" | \"relative\" | \"static\" | \"sticky\";\n\nexport type QuotesProperty = Globals | \"auto\" | \"none\" | string;\n\nexport type ResizeProperty = Globals | \"block\" | \"both\" | \"horizontal\" | \"inline\" | \"none\" | \"vertical\";\n\nexport type RightProperty<TLength> = Globals | TLength | \"auto\" | string;\n\nexport type RotateProperty = Globals | \"none\" | string;\n\nexport type RowGapProperty<TLength> = Globals | TLength | \"normal\" | string;\n\nexport type RubyAlignProperty = Globals | \"center\" | \"space-around\" | \"space-between\" | \"start\";\n\nexport type RubyMergeProperty = Globals | \"auto\" | \"collapse\" | \"separate\";\n\nexport type RubyPositionProperty = Globals | \"over\" | \"under\";\n\nexport type ScaleProperty = Globals | \"none\" | string | number;\n\nexport type ScrollBehaviorProperty = Globals | \"auto\" | \"smooth\";\n\nexport type ScrollMarginProperty<TLength> = Globals | TLength | string;\n\nexport type ScrollMarginBlockProperty<TLength> = Globals | TLength | string;\n\nexport type ScrollMarginBlockEndProperty<TLength> = Globals | TLength;\n\nexport type ScrollMarginBlockStartProperty<TLength> = Globals | TLength;\n\nexport type ScrollMarginBottomProperty<TLength> = Globals | TLength;\n\nexport type ScrollMarginInlineProperty<TLength> = Globals | TLength | string;\n\nexport type ScrollMarginInlineEndProperty<TLength> = Globals | TLength;\n\nexport type ScrollMarginInlineStartProperty<TLength> = Globals | TLength;\n\nexport type ScrollMarginLeftProperty<TLength> = Globals | TLength;\n\nexport type ScrollMarginRightProperty<TLength> = Globals | TLength;\n\nexport type ScrollMarginTopProperty<TLength> = Globals | TLength;\n\nexport type ScrollPaddingProperty<TLength> = Globals | TLength | \"auto\" | string;\n\nexport type ScrollPaddingBlockProperty<TLength> = Globals | TLength | \"auto\" | string;\n\nexport type ScrollPaddingBlockEndProperty<TLength> = Globals | TLength | \"auto\" | string;\n\nexport type ScrollPaddingBlockStartProperty<TLength> = Globals | TLength | \"auto\" | string;\n\nexport type ScrollPaddingBottomProperty<TLength> = Globals | TLength | \"auto\" | string;\n\nexport type ScrollPaddingInlineProperty<TLength> = Globals | TLength | \"auto\" | string;\n\nexport type ScrollPaddingInlineEndProperty<TLength> = Globals | TLength | \"auto\" | string;\n\nexport type ScrollPaddingInlineStartProperty<TLength> = Globals | TLength | \"auto\" | string;\n\nexport type ScrollPaddingLeftProperty<TLength> = Globals | TLength | \"auto\" | string;\n\nexport type ScrollPaddingRightProperty<TLength> = Globals | TLength | \"auto\" | string;\n\nexport type ScrollPaddingTopProperty<TLength> = Globals | TLength | \"auto\" | string;\n\nexport type ScrollSnapAlignProperty = Globals | \"center\" | \"end\" | \"none\" | \"start\" | string;\n\nexport type ScrollSnapCoordinateProperty<TLength> = Globals | Position<TLength> | \"none\" | string;\n\nexport type ScrollSnapDestinationProperty<TLength> = Globals | Position<TLength>;\n\nexport type ScrollSnapPointsXProperty = Globals | \"none\" | string;\n\nexport type ScrollSnapPointsYProperty = Globals | \"none\" | string;\n\nexport type ScrollSnapStopProperty = Globals | \"always\" | \"normal\";\n\nexport type ScrollSnapTypeProperty = Globals | \"block\" | \"both\" | \"inline\" | \"none\" | \"x\" | \"y\" | string;\n\nexport type ScrollSnapTypeXProperty = Globals | \"mandatory\" | \"none\" | \"proximity\";\n\nexport type ScrollSnapTypeYProperty = Globals | \"mandatory\" | \"none\" | \"proximity\";\n\nexport type ScrollbarColorProperty = Globals | Color | \"auto\" | \"dark\" | \"light\";\n\nexport type MsScrollbarTrackColorProperty = Globals | Color;\n\nexport type ScrollbarWidthProperty = Globals | \"auto\" | \"none\" | \"thin\";\n\nexport type ShapeImageThresholdProperty = Globals | string | number;\n\nexport type ShapeMarginProperty<TLength> = Globals | TLength | string;\n\nexport type ShapeOutsideProperty = Globals | Box | \"margin-box\" | \"none\" | string;\n\nexport type TabSizeProperty<TLength> = Globals | TLength | number;\n\nexport type TableLayoutProperty = Globals | \"auto\" | \"fixed\";\n\nexport type TextAlignProperty = Globals | \"center\" | \"end\" | \"justify\" | \"left\" | \"match-parent\" | \"right\" | \"start\";\n\nexport type TextAlignLastProperty = Globals | \"auto\" | \"center\" | \"end\" | \"justify\" | \"left\" | \"right\" | \"start\";\n\nexport type TextCombineUprightProperty = Globals | \"all\" | \"digits\" | \"none\" | string;\n\nexport type TextDecorationProperty<TLength> =\n  | Globals\n  | Color\n  | TLength\n  | \"auto\"\n  | \"blink\"\n  | \"dashed\"\n  | \"dotted\"\n  | \"double\"\n  | \"from-font\"\n  | \"grammar-error\"\n  | \"line-through\"\n  | \"none\"\n  | \"overline\"\n  | \"solid\"\n  | \"spelling-error\"\n  | \"underline\"\n  | \"wavy\"\n  | string;\n\nexport type TextDecorationColorProperty = Globals | Color;\n\nexport type TextDecorationLineProperty = Globals | \"blink\" | \"grammar-error\" | \"line-through\" | \"none\" | \"overline\" | \"spelling-error\" | \"underline\" | string;\n\nexport type TextDecorationSkipProperty = Globals | \"box-decoration\" | \"edges\" | \"leading-spaces\" | \"none\" | \"objects\" | \"spaces\" | \"trailing-spaces\" | string;\n\nexport type TextDecorationSkipInkProperty = Globals | \"auto\" | \"none\";\n\nexport type TextDecorationStyleProperty = Globals | \"dashed\" | \"dotted\" | \"double\" | \"solid\" | \"wavy\";\n\nexport type TextDecorationThicknessProperty<TLength> = Globals | TLength | \"auto\" | \"from-font\";\n\nexport type TextEmphasisProperty = Globals | Color | \"circle\" | \"dot\" | \"double-circle\" | \"filled\" | \"none\" | \"open\" | \"sesame\" | \"triangle\" | string;\n\nexport type TextEmphasisColorProperty = Globals | Color;\n\nexport type TextEmphasisStyleProperty = Globals | \"circle\" | \"dot\" | \"double-circle\" | \"filled\" | \"none\" | \"open\" | \"sesame\" | \"triangle\" | string;\n\nexport type TextIndentProperty<TLength> = Globals | TLength | string;\n\nexport type TextJustifyProperty = Globals | \"auto\" | \"inter-character\" | \"inter-word\" | \"none\";\n\nexport type TextOrientationProperty = Globals | \"mixed\" | \"sideways\" | \"upright\";\n\nexport type TextOverflowProperty = Globals | \"clip\" | \"ellipsis\" | string;\n\nexport type TextRenderingProperty = Globals | \"auto\" | \"geometricPrecision\" | \"optimizeLegibility\" | \"optimizeSpeed\";\n\nexport type TextShadowProperty = Globals | \"none\" | string;\n\nexport type TextSizeAdjustProperty = Globals | \"auto\" | \"none\" | string;\n\nexport type TextTransformProperty = Globals | \"capitalize\" | \"full-size-kana\" | \"full-width\" | \"lowercase\" | \"none\" | \"uppercase\";\n\nexport type TextUnderlineOffsetProperty<TLength> = Globals | TLength | \"auto\" | \"from-font\";\n\nexport type TextUnderlinePositionProperty = Globals | \"auto\" | \"left\" | \"right\" | \"under\" | string;\n\nexport type TopProperty<TLength> = Globals | TLength | \"auto\" | string;\n\nexport type TouchActionProperty =\n  | Globals\n  | \"-ms-manipulation\"\n  | \"-ms-none\"\n  | \"-ms-pinch-zoom\"\n  | \"auto\"\n  | \"manipulation\"\n  | \"none\"\n  | \"pan-down\"\n  | \"pan-left\"\n  | \"pan-right\"\n  | \"pan-up\"\n  | \"pan-x\"\n  | \"pan-y\"\n  | \"pinch-zoom\"\n  | string;\n\nexport type TransformProperty = Globals | \"none\" | string;\n\nexport type TransformBoxProperty = Globals | \"border-box\" | \"fill-box\" | \"view-box\";\n\nexport type TransformOriginProperty<TLength> = Globals | TLength | \"bottom\" | \"center\" | \"left\" | \"right\" | \"top\" | string;\n\nexport type TransformStyleProperty = Globals | \"flat\" | \"preserve-3d\";\n\nexport type TransitionProperty = Globals | SingleTransition | string;\n\nexport type TransitionPropertyProperty = Globals | \"all\" | \"none\" | string;\n\nexport type TransitionTimingFunctionProperty = Globals | TimingFunction | string;\n\nexport type TranslateProperty<TLength> = Globals | TLength | \"none\" | string;\n\nexport type UnicodeBidiProperty =\n  | Globals\n  | \"-moz-isolate\"\n  | \"-moz-isolate-override\"\n  | \"-moz-plaintext\"\n  | \"-webkit-isolate\"\n  | \"bidi-override\"\n  | \"embed\"\n  | \"isolate\"\n  | \"isolate-override\"\n  | \"normal\"\n  | \"plaintext\";\n\nexport type UserSelectProperty = Globals | \"-moz-none\" | \"all\" | \"auto\" | \"contain\" | \"element\" | \"none\" | \"text\";\n\nexport type VerticalAlignProperty<TLength> = Globals | TLength | \"baseline\" | \"bottom\" | \"middle\" | \"sub\" | \"super\" | \"text-bottom\" | \"text-top\" | \"top\" | string;\n\nexport type VisibilityProperty = Globals | \"collapse\" | \"hidden\" | \"visible\";\n\nexport type WhiteSpaceProperty = Globals | \"-moz-pre-wrap\" | \"break-spaces\" | \"normal\" | \"nowrap\" | \"pre\" | \"pre-line\" | \"pre-wrap\";\n\nexport type WidthProperty<TLength> =\n  | Globals\n  | TLength\n  | \"-moz-fit-content\"\n  | \"-moz-max-content\"\n  | \"-moz-min-content\"\n  | \"-webkit-fill-available\"\n  | \"-webkit-fit-content\"\n  | \"-webkit-max-content\"\n  | \"auto\"\n  | \"available\"\n  | \"fit-content\"\n  | \"intrinsic\"\n  | \"max-content\"\n  | \"min-content\"\n  | \"min-intrinsic\"\n  | string;\n\nexport type WillChangeProperty = Globals | AnimateableFeature | \"auto\" | string;\n\nexport type WordBreakProperty = Globals | \"break-all\" | \"break-word\" | \"keep-all\" | \"normal\";\n\nexport type WordSpacingProperty<TLength> = Globals | TLength | \"normal\" | string;\n\nexport type WordWrapProperty = Globals | \"break-word\" | \"normal\";\n\nexport type WritingModeProperty = Globals | \"horizontal-tb\" | \"sideways-lr\" | \"sideways-rl\" | \"vertical-lr\" | \"vertical-rl\";\n\nexport type ZIndexProperty = Globals | \"auto\" | number;\n\nexport type ZoomProperty = Globals | \"normal\" | \"reset\" | string | number;\n\nexport type MozAppearanceProperty =\n  | Globals\n  | \"-moz-mac-unified-toolbar\"\n  | \"-moz-win-borderless-glass\"\n  | \"-moz-win-browsertabbar-toolbox\"\n  | \"-moz-win-communications-toolbox\"\n  | \"-moz-win-communicationstext\"\n  | \"-moz-win-exclude-glass\"\n  | \"-moz-win-glass\"\n  | \"-moz-win-media-toolbox\"\n  | \"-moz-win-mediatext\"\n  | \"-moz-window-button-box\"\n  | \"-moz-window-button-box-maximized\"\n  | \"-moz-window-button-close\"\n  | \"-moz-window-button-maximize\"\n  | \"-moz-window-button-minimize\"\n  | \"-moz-window-button-restore\"\n  | \"-moz-window-frame-bottom\"\n  | \"-moz-window-frame-left\"\n  | \"-moz-window-frame-right\"\n  | \"-moz-window-titlebar\"\n  | \"-moz-window-titlebar-maximized\"\n  | \"button\"\n  | \"button-arrow-down\"\n  | \"button-arrow-next\"\n  | \"button-arrow-previous\"\n  | \"button-arrow-up\"\n  | \"button-bevel\"\n  | \"button-focus\"\n  | \"caret\"\n  | \"checkbox\"\n  | \"checkbox-container\"\n  | \"checkbox-label\"\n  | \"checkmenuitem\"\n  | \"dualbutton\"\n  | \"groupbox\"\n  | \"listbox\"\n  | \"listitem\"\n  | \"menuarrow\"\n  | \"menubar\"\n  | \"menucheckbox\"\n  | \"menuimage\"\n  | \"menuitem\"\n  | \"menuitemtext\"\n  | \"menulist\"\n  | \"menulist-button\"\n  | \"menulist-text\"\n  | \"menulist-textfield\"\n  | \"menupopup\"\n  | \"menuradio\"\n  | \"menuseparator\"\n  | \"meterbar\"\n  | \"meterchunk\"\n  | \"none\"\n  | \"progressbar\"\n  | \"progressbar-vertical\"\n  | \"progresschunk\"\n  | \"progresschunk-vertical\"\n  | \"radio\"\n  | \"radio-container\"\n  | \"radio-label\"\n  | \"radiomenuitem\"\n  | \"range\"\n  | \"range-thumb\"\n  | \"resizer\"\n  | \"resizerpanel\"\n  | \"scale-horizontal\"\n  | \"scale-vertical\"\n  | \"scalethumb-horizontal\"\n  | \"scalethumb-vertical\"\n  | \"scalethumbend\"\n  | \"scalethumbstart\"\n  | \"scalethumbtick\"\n  | \"scrollbarbutton-down\"\n  | \"scrollbarbutton-left\"\n  | \"scrollbarbutton-right\"\n  | \"scrollbarbutton-up\"\n  | \"scrollbarthumb-horizontal\"\n  | \"scrollbarthumb-vertical\"\n  | \"scrollbartrack-horizontal\"\n  | \"scrollbartrack-vertical\"\n  | \"searchfield\"\n  | \"separator\"\n  | \"sheet\"\n  | \"spinner\"\n  | \"spinner-downbutton\"\n  | \"spinner-textfield\"\n  | \"spinner-upbutton\"\n  | \"splitter\"\n  | \"statusbar\"\n  | \"statusbarpanel\"\n  | \"tab\"\n  | \"tab-scroll-arrow-back\"\n  | \"tab-scroll-arrow-forward\"\n  | \"tabpanel\"\n  | \"tabpanels\"\n  | \"textfield\"\n  | \"textfield-multiline\"\n  | \"toolbar\"\n  | \"toolbarbutton\"\n  | \"toolbarbutton-dropdown\"\n  | \"toolbargripper\"\n  | \"toolbox\"\n  | \"tooltip\"\n  | \"treeheader\"\n  | \"treeheadercell\"\n  | \"treeheadersortarrow\"\n  | \"treeitem\"\n  | \"treeline\"\n  | \"treetwisty\"\n  | \"treetwistyopen\"\n  | \"treeview\";\n\nexport type MozBindingProperty = Globals | \"none\" | string;\n\nexport type MozBorderBottomColorsProperty = Globals | Color | \"none\" | string;\n\nexport type MozBorderLeftColorsProperty = Globals | Color | \"none\" | string;\n\nexport type MozBorderRightColorsProperty = Globals | Color | \"none\" | string;\n\nexport type MozBorderTopColorsProperty = Globals | Color | \"none\" | string;\n\nexport type MozContextPropertiesProperty = Globals | \"fill\" | \"fill-opacity\" | \"none\" | \"stroke\" | \"stroke-opacity\" | string;\n\nexport type MozFloatEdgeProperty = Globals | \"border-box\" | \"content-box\" | \"margin-box\" | \"padding-box\";\n\nexport type MozImageRegionProperty = Globals | \"auto\" | string;\n\nexport type MozOrientProperty = Globals | \"block\" | \"horizontal\" | \"inline\" | \"vertical\";\n\nexport type MozOutlineRadiusProperty<TLength> = Globals | TLength | string;\n\nexport type MozOutlineRadiusBottomleftProperty<TLength> = Globals | TLength | string;\n\nexport type MozOutlineRadiusBottomrightProperty<TLength> = Globals | TLength | string;\n\nexport type MozOutlineRadiusTopleftProperty<TLength> = Globals | TLength | string;\n\nexport type MozOutlineRadiusToprightProperty<TLength> = Globals | TLength | string;\n\nexport type MozStackSizingProperty = Globals | \"ignore\" | \"stretch-to-fit\";\n\nexport type MozTextBlinkProperty = Globals | \"blink\" | \"none\";\n\nexport type MozUserFocusProperty = Globals | \"ignore\" | \"none\" | \"normal\" | \"select-after\" | \"select-all\" | \"select-before\" | \"select-menu\" | \"select-same\";\n\nexport type MozUserInputProperty = Globals | \"auto\" | \"disabled\" | \"enabled\" | \"none\";\n\nexport type MozUserModifyProperty = Globals | \"read-only\" | \"read-write\" | \"write-only\";\n\nexport type MozWindowDraggingProperty = Globals | \"drag\" | \"no-drag\";\n\nexport type MozWindowShadowProperty = Globals | \"default\" | \"menu\" | \"none\" | \"sheet\" | \"tooltip\";\n\nexport type MsAcceleratorProperty = Globals | \"false\" | \"true\";\n\nexport type MsBlockProgressionProperty = Globals | \"bt\" | \"lr\" | \"rl\" | \"tb\";\n\nexport type MsContentZoomChainingProperty = Globals | \"chained\" | \"none\";\n\nexport type MsContentZoomSnapProperty = Globals | \"mandatory\" | \"none\" | \"proximity\" | string;\n\nexport type MsContentZoomSnapTypeProperty = Globals | \"mandatory\" | \"none\" | \"proximity\";\n\nexport type MsContentZoomingProperty = Globals | \"none\" | \"zoom\";\n\nexport type MsFlowFromProperty = Globals | \"none\" | string;\n\nexport type MsFlowIntoProperty = Globals | \"none\" | string;\n\nexport type MsHighContrastAdjustProperty = Globals | \"auto\" | \"none\";\n\nexport type MsHyphenateLimitCharsProperty = Globals | \"auto\" | string | number;\n\nexport type MsHyphenateLimitLinesProperty = Globals | \"no-limit\" | number;\n\nexport type MsHyphenateLimitZoneProperty<TLength> = Globals | TLength | string;\n\nexport type MsImeAlignProperty = Globals | \"after\" | \"auto\";\n\nexport type MsOverflowStyleProperty = Globals | \"-ms-autohiding-scrollbar\" | \"auto\" | \"none\" | \"scrollbar\";\n\nexport type MsScrollChainingProperty = Globals | \"chained\" | \"none\";\n\nexport type MsScrollLimitXMaxProperty<TLength> = Globals | TLength | \"auto\";\n\nexport type MsScrollLimitXMinProperty<TLength> = Globals | TLength;\n\nexport type MsScrollLimitYMaxProperty<TLength> = Globals | TLength | \"auto\";\n\nexport type MsScrollLimitYMinProperty<TLength> = Globals | TLength;\n\nexport type MsScrollRailsProperty = Globals | \"none\" | \"railed\";\n\nexport type MsScrollSnapTypeProperty = Globals | \"mandatory\" | \"none\" | \"proximity\";\n\nexport type MsScrollTranslationProperty = Globals | \"none\" | \"vertical-to-horizontal\";\n\nexport type MsScrollbar3dlightColorProperty = Globals | Color;\n\nexport type MsScrollbarArrowColorProperty = Globals | Color;\n\nexport type MsScrollbarBaseColorProperty = Globals | Color;\n\nexport type MsScrollbarDarkshadowColorProperty = Globals | Color;\n\nexport type MsScrollbarFaceColorProperty = Globals | Color;\n\nexport type MsScrollbarHighlightColorProperty = Globals | Color;\n\nexport type MsScrollbarShadowColorProperty = Globals | Color;\n\nexport type MsTextAutospaceProperty = Globals | \"ideograph-alpha\" | \"ideograph-numeric\" | \"ideograph-parenthesis\" | \"ideograph-space\" | \"none\";\n\nexport type MsTouchSelectProperty = Globals | \"grippers\" | \"none\";\n\nexport type MsUserSelectProperty = Globals | \"element\" | \"none\" | \"text\";\n\nexport type MsWrapFlowProperty = Globals | \"auto\" | \"both\" | \"clear\" | \"end\" | \"maximum\" | \"start\";\n\nexport type MsWrapMarginProperty<TLength> = Globals | TLength;\n\nexport type MsWrapThroughProperty = Globals | \"none\" | \"wrap\";\n\nexport type WebkitAppearanceProperty =\n  | Globals\n  | \"button\"\n  | \"button-bevel\"\n  | \"caret\"\n  | \"checkbox\"\n  | \"default-button\"\n  | \"inner-spin-button\"\n  | \"listbox\"\n  | \"listitem\"\n  | \"media-controls-background\"\n  | \"media-controls-fullscreen-background\"\n  | \"media-current-time-display\"\n  | \"media-enter-fullscreen-button\"\n  | \"media-exit-fullscreen-button\"\n  | \"media-fullscreen-button\"\n  | \"media-mute-button\"\n  | \"media-overlay-play-button\"\n  | \"media-play-button\"\n  | \"media-seek-back-button\"\n  | \"media-seek-forward-button\"\n  | \"media-slider\"\n  | \"media-sliderthumb\"\n  | \"media-time-remaining-display\"\n  | \"media-toggle-closed-captions-button\"\n  | \"media-volume-slider\"\n  | \"media-volume-slider-container\"\n  | \"media-volume-sliderthumb\"\n  | \"menulist\"\n  | \"menulist-button\"\n  | \"menulist-text\"\n  | \"menulist-textfield\"\n  | \"meter\"\n  | \"none\"\n  | \"progress-bar\"\n  | \"progress-bar-value\"\n  | \"push-button\"\n  | \"radio\"\n  | \"searchfield\"\n  | \"searchfield-cancel-button\"\n  | \"searchfield-decoration\"\n  | \"searchfield-results-button\"\n  | \"searchfield-results-decoration\"\n  | \"slider-horizontal\"\n  | \"slider-vertical\"\n  | \"sliderthumb-horizontal\"\n  | \"sliderthumb-vertical\"\n  | \"square-button\"\n  | \"textarea\"\n  | \"textfield\";\n\nexport type WebkitBorderBeforeProperty<TLength> = Globals | LineWidth<TLength> | LineStyle | Color | string;\n\nexport type WebkitBorderBeforeColorProperty = Globals | Color;\n\nexport type WebkitBorderBeforeStyleProperty = Globals | LineStyle | string;\n\nexport type WebkitBorderBeforeWidthProperty<TLength> = Globals | LineWidth<TLength> | string;\n\nexport type WebkitBoxReflectProperty<TLength> = Globals | TLength | \"above\" | \"below\" | \"left\" | \"right\" | string;\n\nexport type WebkitLineClampProperty = Globals | \"none\" | number;\n\nexport type WebkitMaskProperty<TLength> = Globals | Position<TLength> | RepeatStyle | Box | \"border\" | \"content\" | \"none\" | \"padding\" | \"text\" | string;\n\nexport type WebkitMaskAttachmentProperty = Globals | Attachment | string;\n\nexport type WebkitMaskClipProperty = Globals | Box | \"border\" | \"content\" | \"padding\" | \"text\" | string;\n\nexport type WebkitMaskCompositeProperty = Globals | CompositeStyle | string;\n\nexport type WebkitMaskImageProperty = Globals | \"none\" | string;\n\nexport type WebkitMaskOriginProperty = Globals | Box | \"border\" | \"content\" | \"padding\" | string;\n\nexport type WebkitMaskPositionProperty<TLength> = Globals | Position<TLength> | string;\n\nexport type WebkitMaskPositionXProperty<TLength> = Globals | TLength | \"center\" | \"left\" | \"right\" | string;\n\nexport type WebkitMaskPositionYProperty<TLength> = Globals | TLength | \"bottom\" | \"center\" | \"top\" | string;\n\nexport type WebkitMaskRepeatProperty = Globals | RepeatStyle | string;\n\nexport type WebkitMaskRepeatXProperty = Globals | \"no-repeat\" | \"repeat\" | \"round\" | \"space\";\n\nexport type WebkitMaskRepeatYProperty = Globals | \"no-repeat\" | \"repeat\" | \"round\" | \"space\";\n\nexport type WebkitMaskSizeProperty<TLength> = Globals | BgSize<TLength> | string;\n\nexport type WebkitOverflowScrollingProperty = Globals | \"auto\" | \"touch\";\n\nexport type WebkitTapHighlightColorProperty = Globals | Color;\n\nexport type WebkitTextFillColorProperty = Globals | Color;\n\nexport type WebkitTextStrokeProperty<TLength> = Globals | Color | TLength | string;\n\nexport type WebkitTextStrokeColorProperty = Globals | Color;\n\nexport type WebkitTextStrokeWidthProperty<TLength> = Globals | TLength;\n\nexport type WebkitTouchCalloutProperty = Globals | \"default\" | \"none\";\n\nexport type WebkitUserModifyProperty = Globals | \"read-only\" | \"read-write\" | \"read-write-plaintext-only\";\n\nexport type AlignmentBaselineProperty =\n  | Globals\n  | \"after-edge\"\n  | \"alphabetic\"\n  | \"auto\"\n  | \"baseline\"\n  | \"before-edge\"\n  | \"central\"\n  | \"hanging\"\n  | \"ideographic\"\n  | \"mathematical\"\n  | \"middle\"\n  | \"text-after-edge\"\n  | \"text-before-edge\";\n\nexport type BaselineShiftProperty<TLength> = Globals | TLength | \"baseline\" | \"sub\" | \"super\" | string;\n\nexport type ClipRuleProperty = Globals | \"evenodd\" | \"nonzero\";\n\nexport type ColorInterpolationProperty = Globals | \"auto\" | \"linearRGB\" | \"sRGB\";\n\nexport type ColorRenderingProperty = Globals | \"auto\" | \"optimizeQuality\" | \"optimizeSpeed\";\n\nexport type DominantBaselineProperty =\n  | Globals\n  | \"alphabetic\"\n  | \"auto\"\n  | \"central\"\n  | \"hanging\"\n  | \"ideographic\"\n  | \"mathematical\"\n  | \"middle\"\n  | \"no-change\"\n  | \"reset-size\"\n  | \"text-after-edge\"\n  | \"text-before-edge\"\n  | \"use-script\";\n\nexport type FillProperty = Globals | Paint;\n\nexport type FillRuleProperty = Globals | \"evenodd\" | \"nonzero\";\n\nexport type FloodColorProperty = Globals | Color | \"currentColor\";\n\nexport type GlyphOrientationVerticalProperty = Globals | \"auto\" | string | number;\n\nexport type LightingColorProperty = Globals | Color | \"currentColor\";\n\nexport type MarkerProperty = Globals | \"none\" | string;\n\nexport type MarkerEndProperty = Globals | \"none\" | string;\n\nexport type MarkerMidProperty = Globals | \"none\" | string;\n\nexport type MarkerStartProperty = Globals | \"none\" | string;\n\nexport type ShapeRenderingProperty = Globals | \"auto\" | \"crispEdges\" | \"geometricPrecision\" | \"optimizeSpeed\";\n\nexport type StopColorProperty = Globals | Color | \"currentColor\";\n\nexport type StrokeProperty = Globals | Paint;\n\nexport type StrokeDasharrayProperty<TLength> = Globals | Dasharray<TLength> | \"none\";\n\nexport type StrokeDashoffsetProperty<TLength> = Globals | TLength | string;\n\nexport type StrokeLinecapProperty = Globals | \"butt\" | \"round\" | \"square\";\n\nexport type StrokeLinejoinProperty = Globals | \"bevel\" | \"miter\" | \"round\";\n\nexport type StrokeWidthProperty<TLength> = Globals | TLength | string;\n\nexport type TextAnchorProperty = Globals | \"end\" | \"middle\" | \"start\";\n\nexport type VectorEffectProperty = Globals | \"non-scaling-stroke\" | \"none\";\n\ntype CounterStyleRangeProperty = \"auto\" | \"infinite\" | string | number;\n\ntype CounterStyleSpeakAsProperty = \"auto\" | \"bullets\" | \"numbers\" | \"spell-out\" | \"words\" | string;\n\ntype CounterStyleSystemProperty = \"additive\" | \"alphabetic\" | \"cyclic\" | \"fixed\" | \"numeric\" | \"symbolic\" | string;\n\ntype FontFaceFontFeatureSettingsProperty = \"normal\" | string;\n\ntype FontFaceFontDisplayProperty = \"auto\" | \"block\" | \"fallback\" | \"optional\" | \"swap\";\n\ntype FontFaceFontStretchProperty = FontStretchAbsolute | string;\n\ntype FontFaceFontStyleProperty = \"italic\" | \"normal\" | \"oblique\" | string;\n\ntype FontFaceFontVariantProperty =\n  | EastAsianVariantValues\n  | \"all-petite-caps\"\n  | \"all-small-caps\"\n  | \"common-ligatures\"\n  | \"contextual\"\n  | \"diagonal-fractions\"\n  | \"discretionary-ligatures\"\n  | \"full-width\"\n  | \"historical-forms\"\n  | \"historical-ligatures\"\n  | \"lining-nums\"\n  | \"no-common-ligatures\"\n  | \"no-contextual\"\n  | \"no-discretionary-ligatures\"\n  | \"no-historical-ligatures\"\n  | \"none\"\n  | \"normal\"\n  | \"oldstyle-nums\"\n  | \"ordinal\"\n  | \"petite-caps\"\n  | \"proportional-nums\"\n  | \"proportional-width\"\n  | \"ruby\"\n  | \"slashed-zero\"\n  | \"small-caps\"\n  | \"stacked-fractions\"\n  | \"tabular-nums\"\n  | \"titling-caps\"\n  | \"unicase\"\n  | string;\n\ntype FontFaceFontVariationSettingsProperty = \"normal\" | string;\n\ntype FontFaceFontWeightProperty = FontWeightAbsolute | string;\n\ntype ViewportHeightProperty<TLength> = ViewportLength<TLength> | string;\n\ntype ViewportMaxHeightProperty<TLength> = ViewportLength<TLength>;\n\ntype ViewportMaxWidthProperty<TLength> = ViewportLength<TLength>;\n\ntype ViewportMaxZoomProperty = \"auto\" | string | number;\n\ntype ViewportMinHeightProperty<TLength> = ViewportLength<TLength>;\n\ntype ViewportMinWidthProperty<TLength> = ViewportLength<TLength>;\n\ntype ViewportMinZoomProperty = \"auto\" | string | number;\n\ntype ViewportOrientationProperty = \"auto\" | \"landscape\" | \"portrait\";\n\ntype ViewportUserZoomProperty = \"-ms-zoom\" | \"fixed\" | \"zoom\";\n\ntype ViewportWidthProperty<TLength> = ViewportLength<TLength> | string;\n\ntype ViewportZoomProperty = \"auto\" | string | number;\n\ntype AbsoluteSize = \"large\" | \"medium\" | \"small\" | \"x-large\" | \"x-small\" | \"xx-large\" | \"xx-small\" | \"xxx-large\";\n\ntype AnimateableFeature = \"contents\" | \"scroll-position\" | string;\n\ntype Attachment = \"fixed\" | \"local\" | \"scroll\";\n\ntype BgPosition<TLength> = TLength | \"bottom\" | \"center\" | \"left\" | \"right\" | \"top\" | string;\n\ntype BgSize<TLength> = TLength | \"auto\" | \"contain\" | \"cover\" | string;\n\ntype BlendMode =\n  | \"color\"\n  | \"color-burn\"\n  | \"color-dodge\"\n  | \"darken\"\n  | \"difference\"\n  | \"exclusion\"\n  | \"hard-light\"\n  | \"hue\"\n  | \"lighten\"\n  | \"luminosity\"\n  | \"multiply\"\n  | \"normal\"\n  | \"overlay\"\n  | \"saturation\"\n  | \"screen\"\n  | \"soft-light\";\n\ntype Box = \"border-box\" | \"content-box\" | \"padding-box\";\n\ntype Color = NamedColor | DeprecatedSystemColor | \"currentcolor\" | string;\n\ntype Compat =\n  | \"button-bevel\"\n  | \"checkbox\"\n  | \"listbox\"\n  | \"menulist\"\n  | \"menulist-button\"\n  | \"meter\"\n  | \"progress-bar\"\n  | \"push-button\"\n  | \"radio\"\n  | \"searchfield\"\n  | \"slider-horizontal\"\n  | \"square-button\"\n  | \"textarea\";\n\ntype CompositeStyle =\n  | \"clear\"\n  | \"copy\"\n  | \"destination-atop\"\n  | \"destination-in\"\n  | \"destination-out\"\n  | \"destination-over\"\n  | \"source-atop\"\n  | \"source-in\"\n  | \"source-out\"\n  | \"source-over\"\n  | \"xor\";\n\ntype CompositingOperator = \"add\" | \"exclude\" | \"intersect\" | \"subtract\";\n\ntype ContentDistribution = \"space-around\" | \"space-between\" | \"space-evenly\" | \"stretch\";\n\ntype ContentList = Quote | \"contents\" | string;\n\ntype ContentPosition = \"center\" | \"end\" | \"flex-end\" | \"flex-start\" | \"start\";\n\ntype CubicBezierTimingFunction = \"ease\" | \"ease-in\" | \"ease-in-out\" | \"ease-out\" | string;\n\ntype Dasharray<TLength> = TLength | string | number;\n\ntype DeprecatedSystemColor =\n  | \"ActiveBorder\"\n  | \"ActiveCaption\"\n  | \"AppWorkspace\"\n  | \"Background\"\n  | \"ButtonFace\"\n  | \"ButtonHighlight\"\n  | \"ButtonShadow\"\n  | \"ButtonText\"\n  | \"CaptionText\"\n  | \"GrayText\"\n  | \"Highlight\"\n  | \"HighlightText\"\n  | \"InactiveBorder\"\n  | \"InactiveCaption\"\n  | \"InactiveCaptionText\"\n  | \"InfoBackground\"\n  | \"InfoText\"\n  | \"Menu\"\n  | \"MenuText\"\n  | \"Scrollbar\"\n  | \"ThreeDDarkShadow\"\n  | \"ThreeDFace\"\n  | \"ThreeDHighlight\"\n  | \"ThreeDLightShadow\"\n  | \"ThreeDShadow\"\n  | \"Window\"\n  | \"WindowFrame\"\n  | \"WindowText\";\n\ntype DisplayInside = \"-ms-flexbox\" | \"-ms-grid\" | \"-webkit-flex\" | \"flex\" | \"flow\" | \"flow-root\" | \"grid\" | \"ruby\" | \"table\";\n\ntype DisplayInternal =\n  | \"ruby-base\"\n  | \"ruby-base-container\"\n  | \"ruby-text\"\n  | \"ruby-text-container\"\n  | \"table-caption\"\n  | \"table-cell\"\n  | \"table-column\"\n  | \"table-column-group\"\n  | \"table-footer-group\"\n  | \"table-header-group\"\n  | \"table-row\"\n  | \"table-row-group\";\n\ntype DisplayLegacy = \"-ms-inline-flexbox\" | \"-ms-inline-grid\" | \"-webkit-inline-flex\" | \"inline-block\" | \"inline-flex\" | \"inline-grid\" | \"inline-list-item\" | \"inline-table\";\n\ntype DisplayOutside = \"block\" | \"inline\" | \"run-in\";\n\ntype EastAsianVariantValues = \"jis04\" | \"jis78\" | \"jis83\" | \"jis90\" | \"simplified\" | \"traditional\";\n\ntype FinalBgLayer<TLength> = Color | BgPosition<TLength> | RepeatStyle | Attachment | Box | \"none\" | string;\n\ntype FontStretchAbsolute =\n  | \"condensed\"\n  | \"expanded\"\n  | \"extra-condensed\"\n  | \"extra-expanded\"\n  | \"normal\"\n  | \"semi-condensed\"\n  | \"semi-expanded\"\n  | \"ultra-condensed\"\n  | \"ultra-expanded\"\n  | string;\n\ntype FontWeightAbsolute = \"bold\" | \"normal\" | number;\n\ntype GenericFamily = \"cursive\" | \"fantasy\" | \"monospace\" | \"sans-serif\" | \"serif\";\n\ntype GeometryBox = Box | \"fill-box\" | \"margin-box\" | \"stroke-box\" | \"view-box\";\n\ntype GridLine = \"auto\" | string | number;\n\ntype LineStyle = \"dashed\" | \"dotted\" | \"double\" | \"groove\" | \"hidden\" | \"inset\" | \"none\" | \"outset\" | \"ridge\" | \"solid\";\n\ntype LineWidth<TLength> = TLength | \"medium\" | \"thick\" | \"thin\";\n\ntype MaskLayer<TLength> = Position<TLength> | RepeatStyle | GeometryBox | CompositingOperator | MaskingMode | \"no-clip\" | \"none\" | string;\n\ntype MaskingMode = \"alpha\" | \"luminance\" | \"match-source\";\n\ntype NamedColor =\n  | \"aliceblue\"\n  | \"antiquewhite\"\n  | \"aqua\"\n  | \"aquamarine\"\n  | \"azure\"\n  | \"beige\"\n  | \"bisque\"\n  | \"black\"\n  | \"blanchedalmond\"\n  | \"blue\"\n  | \"blueviolet\"\n  | \"brown\"\n  | \"burlywood\"\n  | \"cadetblue\"\n  | \"chartreuse\"\n  | \"chocolate\"\n  | \"coral\"\n  | \"cornflowerblue\"\n  | \"cornsilk\"\n  | \"crimson\"\n  | \"cyan\"\n  | \"darkblue\"\n  | \"darkcyan\"\n  | \"darkgoldenrod\"\n  | \"darkgray\"\n  | \"darkgreen\"\n  | \"darkgrey\"\n  | \"darkkhaki\"\n  | \"darkmagenta\"\n  | \"darkolivegreen\"\n  | \"darkorange\"\n  | \"darkorchid\"\n  | \"darkred\"\n  | \"darksalmon\"\n  | \"darkseagreen\"\n  | \"darkslateblue\"\n  | \"darkslategray\"\n  | \"darkslategrey\"\n  | \"darkturquoise\"\n  | \"darkviolet\"\n  | \"deeppink\"\n  | \"deepskyblue\"\n  | \"dimgray\"\n  | \"dimgrey\"\n  | \"dodgerblue\"\n  | \"firebrick\"\n  | \"floralwhite\"\n  | \"forestgreen\"\n  | \"fuchsia\"\n  | \"gainsboro\"\n  | \"ghostwhite\"\n  | \"gold\"\n  | \"goldenrod\"\n  | \"gray\"\n  | \"green\"\n  | \"greenyellow\"\n  | \"grey\"\n  | \"honeydew\"\n  | \"hotpink\"\n  | \"indianred\"\n  | \"indigo\"\n  | \"ivory\"\n  | \"khaki\"\n  | \"lavender\"\n  | \"lavenderblush\"\n  | \"lawngreen\"\n  | \"lemonchiffon\"\n  | \"lightblue\"\n  | \"lightcoral\"\n  | \"lightcyan\"\n  | \"lightgoldenrodyellow\"\n  | \"lightgray\"\n  | \"lightgreen\"\n  | \"lightgrey\"\n  | \"lightpink\"\n  | \"lightsalmon\"\n  | \"lightseagreen\"\n  | \"lightskyblue\"\n  | \"lightslategray\"\n  | \"lightslategrey\"\n  | \"lightsteelblue\"\n  | \"lightyellow\"\n  | \"lime\"\n  | \"limegreen\"\n  | \"linen\"\n  | \"magenta\"\n  | \"maroon\"\n  | \"mediumaquamarine\"\n  | \"mediumblue\"\n  | \"mediumorchid\"\n  | \"mediumpurple\"\n  | \"mediumseagreen\"\n  | \"mediumslateblue\"\n  | \"mediumspringgreen\"\n  | \"mediumturquoise\"\n  | \"mediumvioletred\"\n  | \"midnightblue\"\n  | \"mintcream\"\n  | \"mistyrose\"\n  | \"moccasin\"\n  | \"navajowhite\"\n  | \"navy\"\n  | \"oldlace\"\n  | \"olive\"\n  | \"olivedrab\"\n  | \"orange\"\n  | \"orangered\"\n  | \"orchid\"\n  | \"palegoldenrod\"\n  | \"palegreen\"\n  | \"paleturquoise\"\n  | \"palevioletred\"\n  | \"papayawhip\"\n  | \"peachpuff\"\n  | \"peru\"\n  | \"pink\"\n  | \"plum\"\n  | \"powderblue\"\n  | \"purple\"\n  | \"rebeccapurple\"\n  | \"red\"\n  | \"rosybrown\"\n  | \"royalblue\"\n  | \"saddlebrown\"\n  | \"salmon\"\n  | \"sandybrown\"\n  | \"seagreen\"\n  | \"seashell\"\n  | \"sienna\"\n  | \"silver\"\n  | \"skyblue\"\n  | \"slateblue\"\n  | \"slategray\"\n  | \"slategrey\"\n  | \"snow\"\n  | \"springgreen\"\n  | \"steelblue\"\n  | \"tan\"\n  | \"teal\"\n  | \"thistle\"\n  | \"tomato\"\n  | \"transparent\"\n  | \"turquoise\"\n  | \"violet\"\n  | \"wheat\"\n  | \"white\"\n  | \"whitesmoke\"\n  | \"yellow\"\n  | \"yellowgreen\";\n\ntype Paint = Color | \"child\" | \"context-fill\" | \"context-stroke\" | \"none\" | string;\n\ntype Position<TLength> = TLength | \"bottom\" | \"center\" | \"left\" | \"right\" | \"top\" | string;\n\ntype Quote = \"close-quote\" | \"no-close-quote\" | \"no-open-quote\" | \"open-quote\";\n\ntype RepeatStyle = \"no-repeat\" | \"repeat\" | \"repeat-x\" | \"repeat-y\" | \"round\" | \"space\" | string;\n\ntype SelfPosition = \"center\" | \"end\" | \"flex-end\" | \"flex-start\" | \"self-end\" | \"self-start\" | \"start\";\n\ntype SingleAnimation = TimingFunction | SingleAnimationDirection | SingleAnimationFillMode | \"infinite\" | \"none\" | \"paused\" | \"running\" | string | number;\n\ntype SingleAnimationDirection = \"alternate\" | \"alternate-reverse\" | \"normal\" | \"reverse\";\n\ntype SingleAnimationFillMode = \"backwards\" | \"both\" | \"forwards\" | \"none\";\n\ntype SingleTransition = TimingFunction | \"all\" | \"none\" | string;\n\ntype StepTimingFunction = \"step-end\" | \"step-start\" | string;\n\ntype TimingFunction = CubicBezierTimingFunction | StepTimingFunction | \"linear\";\n\ntype TrackBreadth<TLength> = TLength | \"auto\" | \"max-content\" | \"min-content\" | string;\n\ntype ViewportLength<TLength> = TLength | \"auto\" | string;\n/index.d.ts\u0000\u0015\u0005\u0014export interface StandardLonghandProperties<TLength = string | 0> {\n  /**\n   * The CSS **`align-content`** property sets how the browser distributes space between and around content items along the cross-axis of a flexbox container, and the main-axis of a grid container.\n   *\n   * **Initial value**: `normal`\n   *\n   * ---\n   *\n   * _Supported in Flex Layout_\n   *\n   * |  Chrome  | Firefox |  Safari   |  Edge  |   IE   |\n   * | :------: | :-----: | :-------: | :----: | :----: |\n   * |  **29**  | **28**  |   **9**   | **12** | **11** |\n   * | 21 _-x-_ |         | 6.1 _-x-_ |        |        |\n   *\n   * ---\n   *\n   * _Supported in Grid Layout_\n   *\n   * | Chrome | Firefox |  Safari  |  Edge  | IE  |\n   * | :----: | :-----: | :------: | :----: | :-: |\n   * | **57** | **52**  | **10.1** | **16** | No  |\n   *\n   * ---\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/align-content\n   */\n  alignContent?: AlignContentProperty;\n  /**\n   * The CSS **`align-items`** property sets the `align-self` value on all direct children as a group. The align-self property sets the alignment of an item within its containing block. In Flexbox it controls the alignment of items on the Cross Axis, in Grid Layout it controls the alignment of items on the Block Axis within their grid area.\n   *\n   * **Initial value**: `normal`\n   *\n   * ---\n   *\n   * _Supported in Flex Layout_\n   *\n   * |  Chrome  | Firefox | Safari  |  Edge  |   IE   |\n   * | :------: | :-----: | :-----: | :----: | :----: |\n   * |  **52**  | **20**  |  **9**  | **12** | **11** |\n   * | 21 _-x-_ |         | 7 _-x-_ |        |        |\n   *\n   * ---\n   *\n   * _Supported in Grid Layout_\n   *\n   * | Chrome | Firefox |  Safari  |  Edge  | IE  |\n   * | :----: | :-----: | :------: | :----: | :-: |\n   * | **57** | **52**  | **10.1** | **16** | No  |\n   *\n   * ---\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/align-items\n   */\n  alignItems?: AlignItemsProperty;\n  /**\n   * The **`align-self`** CSS property aligns flex items of the current flex line overriding the `align-items` value. If any of the item's cross-axis margin is set to `auto`, then `align-self` is ignored. In Grid layout `align-self` aligns the item inside the grid area.\n   *\n   * **Initial value**: `auto`\n   *\n   * ---\n   *\n   * _Supported in Flex Layout_\n   *\n   * |  Chrome  | Firefox |  Safari   |  Edge  |   IE   |\n   * | :------: | :-----: | :-------: | :----: | :----: |\n   * |  **36**  | **20**  |   **9**   | **12** | **11** |\n   * | 21 _-x-_ |         | 6.1 _-x-_ |        |        |\n   *\n   * ---\n   *\n   * _Supported in Grid Layout_\n   *\n   * | Chrome | Firefox |  Safari  |  Edge  |      IE      |\n   * | :----: | :-----: | :------: | :----: | :----------: |\n   * | **57** | **52**  | **10.1** | **16** | **10** _-x-_ |\n   *\n   * ---\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/align-self\n   */\n  alignSelf?: AlignSelfProperty;\n  /**\n   * The **`animation-delay`** CSS property sets when an animation starts. The animation can start later, immediately from its beginning, or immediately and partway through the animation.\n   *\n   * **Initial value**: `0s`\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |\n   * | :-----: | :-----: | :-----: | :----: | :----: |\n   * | **43**  | **16**  |  **9**  | **12** | **10** |\n   * | 3 _-x-_ | 5 _-x-_ | 4 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/animation-delay\n   */\n  animationDelay?: GlobalsString;\n  /**\n   * The **`animation-direction`** CSS property sets whether an animation should play forwards, backwards, or alternating back and forth.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |\n   * | :-----: | :-----: | :-----: | :----: | :----: |\n   * | **43**  | **16**  |  **9**  | **12** | **10** |\n   * | 3 _-x-_ | 5 _-x-_ | 4 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/animation-direction\n   */\n  animationDirection?: AnimationDirectionProperty;\n  /**\n   * The **`animation-duration`** CSS property sets the length of time that an animation takes to complete one cycle.\n   *\n   * **Initial value**: `0s`\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |\n   * | :-----: | :-----: | :-----: | :----: | :----: |\n   * | **43**  | **16**  |  **9**  | **12** | **10** |\n   * | 3 _-x-_ | 5 _-x-_ | 4 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/animation-duration\n   */\n  animationDuration?: GlobalsString;\n  /**\n   * The **`animation-fill-mode`** CSS property sets how a CSS animation applies styles to its target before and after its execution.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |\n   * | :-----: | :-----: | :-----: | :----: | :----: |\n   * | **43**  | **16**  |  **9**  | **12** | **10** |\n   * | 3 _-x-_ | 5 _-x-_ | 5 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/animation-fill-mode\n   */\n  animationFillMode?: AnimationFillModeProperty;\n  /**\n   * The **`animation-iteration-count`** CSS property sets the number of times an animation cycle should be played before stopping.\n   *\n   * **Initial value**: `1`\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |\n   * | :-----: | :-----: | :-----: | :----: | :----: |\n   * | **43**  | **16**  |  **9**  | **12** | **10** |\n   * | 3 _-x-_ | 5 _-x-_ | 4 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/animation-iteration-count\n   */\n  animationIterationCount?: AnimationIterationCountProperty;\n  /**\n   * The **`animation-name`** CSS property sets one or more animations to apply to an element. Each name is an `@keyframes` at-rule that sets the property values for the animation sequence.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |\n   * | :-----: | :-----: | :-----: | :----: | :----: |\n   * | **43**  | **16**  |  **9**  | **12** | **10** |\n   * | 3 _-x-_ | 5 _-x-_ | 4 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/animation-name\n   */\n  animationName?: AnimationNameProperty;\n  /**\n   * The **`animation-play-state`** CSS property sets whether an animation is running or paused.\n   *\n   * **Initial value**: `running`\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |\n   * | :-----: | :-----: | :-----: | :----: | :----: |\n   * | **43**  | **16**  |  **9**  | **12** | **10** |\n   * | 3 _-x-_ | 5 _-x-_ | 4 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/animation-play-state\n   */\n  animationPlayState?: AnimationPlayStateProperty;\n  /**\n   * The `**animation-timing-function**` CSS property sets how an animation progresses through the duration of each cycle.\n   *\n   * **Initial value**: `ease`\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |\n   * | :-----: | :-----: | :-----: | :----: | :----: |\n   * | **43**  | **16**  |  **9**  | **12** | **10** |\n   * | 3 _-x-_ | 5 _-x-_ | 4 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/animation-timing-function\n   */\n  animationTimingFunction?: AnimationTimingFunctionProperty;\n  /**\n   * The **`-moz-appearance`** CSS property is used in Gecko (Firefox) to display an element using platform-native styling based on the operating system's theme.\n   *\n   * **Initial value**: `auto`\n   *\n   * |   Chrome    |   Firefox   |   Safari    |     Edge     | IE  |\n   * | :---------: | :---------: | :---------: | :----------: | :-: |\n   * | **1** _-x-_ | **1** _-x-_ | **3** _-x-_ | **12** _-x-_ | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/appearance\n   */\n  appearance?: AppearanceProperty;\n  /**\n   * The **`aspect-ratio`**    CSS property sets a _**preferred aspect ratio**_ for the box, which will be used in the calculation of auto sizes and some other layout functions.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **79** | **71**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/aspect-ratio\n   */\n  aspectRatio?: AspectRatioProperty;\n  /**\n   * The **`backdrop-filter`** CSS property lets you apply graphical effects such as blurring or color shifting to the area behind an element. Because it applies to everything _behind_ the element, to see the effect you must make the element or its background at least partially transparent.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox |   Safari    |  Edge  | IE  |\n   * | :----: | :-----: | :---------: | :----: | :-: |\n   * | **76** |   n/a   | **9** _-x-_ | **17** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/backdrop-filter\n   */\n  backdropFilter?: BackdropFilterProperty;\n  /**\n   * The **`backface-visibility`** CSS property sets whether the back face of an element is visible when turned towards the user.\n   *\n   * **Initial value**: `visible`\n   *\n   * |  Chrome  | Firefox  |    Safari     |  Edge  |   IE   |\n   * | :------: | :------: | :-----------: | :----: | :----: |\n   * |  **36**  |  **16**  | **5.1** _-x-_ | **12** | **10** |\n   * | 12 _-x-_ | 10 _-x-_ |               |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/backface-visibility\n   */\n  backfaceVisibility?: BackfaceVisibilityProperty;\n  /**\n   * The **`background-attachment`** CSS property sets whether a background image's position is fixed within the viewport, or scrolls with its containing block.\n   *\n   * **Initial value**: `scroll`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/background-attachment\n   */\n  backgroundAttachment?: BackgroundAttachmentProperty;\n  /**\n   * The **`background-blend-mode`** CSS property sets how an element's background images should blend with each other and with the element's background color.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **35** | **30**  | **8**  |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/background-blend-mode\n   */\n  backgroundBlendMode?: BackgroundBlendModeProperty;\n  /**\n   * The **`background-clip`** CSS property sets whether an element's background `<color>` or `<image>` extends underneath its border.\n   *\n   * **Initial value**: `border-box`\n   *\n   * | Chrome | Firefox |   Safari    |  Edge  |  IE   |\n   * | :----: | :-----: | :---------: | :----: | :---: |\n   * | **1**  |  **4**  | **3** _-x-_ | **12** | **9** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/background-clip\n   */\n  backgroundClip?: BackgroundClipProperty;\n  /**\n   * The **`background-color`** CSS property sets the background color of an element.\n   *\n   * **Initial value**: `transparent`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/background-color\n   */\n  backgroundColor?: BackgroundColorProperty;\n  /**\n   * The **`background-image`** CSS property sets one or more background images on an element.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/background-image\n   */\n  backgroundImage?: BackgroundImageProperty;\n  /**\n   * The **`background-origin`** CSS property sets the _background positioning area_. In other words, it sets the origin position of an image set with the `background-image` property.\n   *\n   * **Initial value**: `padding-box`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **4**  | **3**  | **12** | **9** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/background-origin\n   */\n  backgroundOrigin?: BackgroundOriginProperty;\n  /**\n   * The **`background-position`** CSS property sets the initial position for each background image. The position is relative to the position layer set by `background-origin`.\n   *\n   * **Initial value**: `0% 0%`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/background-position\n   */\n  backgroundPosition?: BackgroundPositionProperty<TLength>;\n  /**\n   * The **`background-position-x`** CSS property sets the initial horizontal position for each background image. The position is relative to the position layer set by `background-origin`.\n   *\n   * **Initial value**: `left`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  | **49**  | **1**  | **12** | **6** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/background-position-x\n   */\n  backgroundPositionX?: BackgroundPositionXProperty<TLength>;\n  /**\n   * The **`background-position-y`** CSS property sets the initial vertical position, relative to the background position layer defined by `background-origin`, for each defined background image.\n   *\n   * **Initial value**: `top`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  | **49**  | **1**  | **12** | **6** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/background-position-y\n   */\n  backgroundPositionY?: BackgroundPositionYProperty<TLength>;\n  /**\n   * The **`background-repeat`** CSS property sets how background images are repeated. A background image can be repeated along the horizontal and vertical axes, or not repeated at all.\n   *\n   * **Initial value**: `repeat`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/background-repeat\n   */\n  backgroundRepeat?: BackgroundRepeatProperty;\n  /**\n   * The **`background-size`** CSS property sets the size of the element's background image. The image can be left to its natural size, stretched, or constrained to fit the available space.\n   *\n   * **Initial value**: `auto auto`\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |  IE   |\n   * | :-----: | :-----: | :-----: | :----: | :---: |\n   * |  **3**  |  **4**  | **4.1** | **12** | **9** |\n   * | 1 _-x-_ |         | 3 _-x-_ |        |       |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/background-size\n   */\n  backgroundSize?: BackgroundSizeProperty<TLength>;\n  /** **Initial value**: `clip` */\n  blockOverflow?: BlockOverflowProperty;\n  /**\n   * The **`block-size`** CSS property defines the horizontal or vertical size of an element's block, depending on its writing mode. It corresponds to either the `width` or the `height` property, depending on the value of `writing-mode`.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **57** | **41**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/block-size\n   */\n  blockSize?: BlockSizeProperty<TLength>;\n  /**\n   * The **`border-block-color`** CSS property defines the color of the logical block borders of an element, which maps to a physical border color depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-color` and `border-bottom-color`, or `border-right-color` and `border-left-color` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `currentcolor`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |  n/a   | **66**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-block-color\n   */\n  borderBlockColor?: BorderBlockColorProperty;\n  /**\n   * The **`border-block-end-color`** CSS property defines the color of the logical block-end border of an element, which maps to a physical border color depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-color`, `border-right-color`, `border-bottom-color`, or `border-left-color` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `currentcolor`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **69** | **41**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-block-end-color\n   */\n  borderBlockEndColor?: BorderBlockEndColorProperty;\n  /**\n   * The **`border-block-end-style`** CSS property defines the style of the logical block end border of an element, which maps to a physical border style depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-style`, `border-right-style`, `border-bottom-style`, or `border-left-style` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **69** | **41**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-block-end-style\n   */\n  borderBlockEndStyle?: BorderBlockEndStyleProperty;\n  /**\n   * The **`border-block-end-width`** CSS property defines the width of the logical block-end border of an element, which maps to a physical border width depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-width`, `border-right-width`, `border-bottom-width`, or `border-left-width` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `medium`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **69** | **41**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-block-end-width\n   */\n  borderBlockEndWidth?: BorderBlockEndWidthProperty<TLength>;\n  /**\n   * The **`border-block-start-color`** CSS property defines the color of the logical block-start border of an element, which maps to a physical border color depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-color`, `border-right-color`, `border-bottom-color`, or `border-left-color` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `currentcolor`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **69** | **41**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-block-start-color\n   */\n  borderBlockStartColor?: BorderBlockStartColorProperty;\n  /**\n   * The **`border-block-start-style`** CSS property defines the style of the logical block start border of an element, which maps to a physical border style depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-style`, `border-right-style`, `border-bottom-style`, or `border-left-style` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **69** | **41**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-block-start-style\n   */\n  borderBlockStartStyle?: BorderBlockStartStyleProperty;\n  /**\n   * The **`border-block-start-width`** CSS property defines the width of the logical block-start border of an element, which maps to a physical border width depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-width`, `border-right-width`, `border-bottom-width`, or `border-left-width` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `medium`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **69** | **41**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-block-start-width\n   */\n  borderBlockStartWidth?: BorderBlockStartWidthProperty<TLength>;\n  /**\n   * The **`border-block-style`** CSS property defines the style of the logical block borders of an element, which maps to a physical border style depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-style` and `border-bottom-style`, or `border-left-style` and `border-right-style` properties depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **66**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-block-style\n   */\n  borderBlockStyle?: BorderBlockStyleProperty;\n  /**\n   * The **`border-block-width`** CSS property defines the width of the logical block borders of an element, which maps to a physical border width depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-width` and `border-bottom-width`, or `border-left-width`, and `border-right-width` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `medium`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **66**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-block-width\n   */\n  borderBlockWidth?: BorderBlockWidthProperty<TLength>;\n  /**\n   * The **`border-bottom-color`** CSS property sets the color of an element's bottom border. It can also be set with the shorthand CSS properties `border-color` or `border-bottom`.\n   *\n   * **Initial value**: `currentcolor`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-bottom-color\n   */\n  borderBottomColor?: BorderBottomColorProperty;\n  /**\n   * The **`border-bottom-left-radius`** CSS property rounds the bottom-left corner of an element.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |  IE   |\n   * | :-----: | :-----: | :-----: | :----: | :---: |\n   * |  **4**  |  **4**  |  **5**  | **12** | **9** |\n   * | 1 _-x-_ |         | 3 _-x-_ |        |       |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-bottom-left-radius\n   */\n  borderBottomLeftRadius?: BorderBottomLeftRadiusProperty<TLength>;\n  /**\n   * The **`border-bottom-right-radius`** CSS property rounds the bottom-right corner of an element.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |  IE   |\n   * | :-----: | :-----: | :-----: | :----: | :---: |\n   * |  **4**  |  **4**  |  **5**  | **12** | **9** |\n   * | 1 _-x-_ |         | 3 _-x-_ |        |       |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-bottom-right-radius\n   */\n  borderBottomRightRadius?: BorderBottomRightRadiusProperty<TLength>;\n  /**\n   * The **`border-bottom-style`** CSS property sets the line style of an element's bottom `border`.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE    |\n   * | :----: | :-----: | :----: | :----: | :-----: |\n   * | **1**  |  **1**  | **1**  | **12** | **5.5** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-bottom-style\n   */\n  borderBottomStyle?: BorderBottomStyleProperty;\n  /**\n   * The **`border-bottom-width`** CSS property sets the width of the bottom border of a box.\n   *\n   * **Initial value**: `medium`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-bottom-width\n   */\n  borderBottomWidth?: BorderBottomWidthProperty<TLength>;\n  /**\n   * The **`border-collapse`** CSS property sets whether cells inside a `<table>` have shared or separate borders.\n   *\n   * **Initial value**: `separate`\n   *\n   * | Chrome | Firefox | Safari  |  Edge  |  IE   |\n   * | :----: | :-----: | :-----: | :----: | :---: |\n   * | **1**  |  **1**  | **1.2** | **12** | **5** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-collapse\n   */\n  borderCollapse?: BorderCollapseProperty;\n  /**\n   * The **`border-end-end-radius`** CSS property defines a logical border radius on an element, which maps to a physical border radius that depends on on the element's `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **66**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-end-end-radius\n   */\n  borderEndEndRadius?: BorderEndEndRadiusProperty<TLength>;\n  /**\n   * The **`border-end-start-radius`** CSS property defines a logical border radius on an element, which maps to a physical border radius depending on the element's `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **66**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-end-start-radius\n   */\n  borderEndStartRadius?: BorderEndStartRadiusProperty<TLength>;\n  /**\n   * The **`border-image-outset`** CSS property sets the distance by which an element's border image is set out from its border box.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE   |\n   * | :----: | :-----: | :----: | :----: | :----: |\n   * | **15** | **15**  | **6**  | **12** | **11** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-image-outset\n   */\n  borderImageOutset?: BorderImageOutsetProperty<TLength>;\n  /**\n   * The **`border-image-repeat`** CSS property defines how the edge regions of a source image are adjusted to fit the dimensions of an element's border image.\n   *\n   * **Initial value**: `stretch`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE   |\n   * | :----: | :-----: | :----: | :----: | :----: |\n   * | **15** | **15**  | **6**  | **12** | **11** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-image-repeat\n   */\n  borderImageRepeat?: BorderImageRepeatProperty;\n  /**\n   * The **`border-image-slice`** CSS property divides the image specified by `border-image-source` into regions. These regions form the components of an element's border image.\n   *\n   * **Initial value**: `100%`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE   |\n   * | :----: | :-----: | :----: | :----: | :----: |\n   * | **15** | **15**  | **6**  | **12** | **11** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-image-slice\n   */\n  borderImageSlice?: BorderImageSliceProperty;\n  /**\n   * The **`border-image-source`** CSS property sets the source image used to create an element's border image.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE   |\n   * | :----: | :-----: | :----: | :----: | :----: |\n   * | **15** | **15**  | **6**  | **12** | **11** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-image-source\n   */\n  borderImageSource?: BorderImageSourceProperty;\n  /**\n   * The **`border-image-width`** CSS property sets the width of an element's border image.\n   *\n   * **Initial value**: `1`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE   |\n   * | :----: | :-----: | :----: | :----: | :----: |\n   * | **15** | **13**  | **6**  | **12** | **11** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-image-width\n   */\n  borderImageWidth?: BorderImageWidthProperty<TLength>;\n  /**\n   * The **`border-inline-color`** CSS property defines the color of the logical inline borders of an element, which maps to a physical border color depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-color` and `border-bottom-color`, or `border-right-color` and `border-left-color` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `currentcolor`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **66**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-inline-color\n   */\n  borderInlineColor?: BorderInlineColorProperty;\n  /**\n   * The **`border-inline-end-color`** CSS property defines the color of the logical inline-end border of an element, which maps to a physical border color depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-color`, `border-right-color`, `border-bottom-color`, or `border-left-color` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `currentcolor`\n   *\n   * | Chrome |           Firefox           |  Safari  | Edge | IE  |\n   * | :----: | :-------------------------: | :------: | :--: | :-: |\n   * | **69** |           **41**            | **12.1** |  No  | No  |\n   * |        | 3 _(-moz-border-end-color)_ |          |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-inline-end-color\n   */\n  borderInlineEndColor?: BorderInlineEndColorProperty;\n  /**\n   * The **`border-inline-end-style`** CSS property defines the style of the logical inline end border of an element, which maps to a physical border style depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-style`, `border-right-style`, `border-bottom-style`, or `border-left-style` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome |           Firefox           |  Safari  | Edge | IE  |\n   * | :----: | :-------------------------: | :------: | :--: | :-: |\n   * | **69** |           **41**            | **12.1** |  No  | No  |\n   * |        | 3 _(-moz-border-end-style)_ |          |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-inline-end-style\n   */\n  borderInlineEndStyle?: BorderInlineEndStyleProperty;\n  /**\n   * The **`border-inline-end-width`** CSS property defines the width of the logical inline-end border of an element, which maps to a physical border width depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-width`, `border-right-width`, `border-bottom-width`, or `border-left-width` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `medium`\n   *\n   * | Chrome |           Firefox           |  Safari  | Edge | IE  |\n   * | :----: | :-------------------------: | :------: | :--: | :-: |\n   * | **69** |           **41**            | **12.1** |  No  | No  |\n   * |        | 3 _(-moz-border-end-width)_ |          |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-inline-end-width\n   */\n  borderInlineEndWidth?: BorderInlineEndWidthProperty<TLength>;\n  /**\n   * The **`border-inline-start-color`** CSS property defines the color of the logical inline start border of an element, which maps to a physical border color depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-color`, `border-right-color`, `border-bottom-color`, or `border-left-color` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `currentcolor`\n   *\n   * | Chrome |            Firefox            |  Safari  | Edge | IE  |\n   * | :----: | :---------------------------: | :------: | :--: | :-: |\n   * | **69** |            **41**             | **12.1** |  No  | No  |\n   * |        | 3 _(-moz-border-start-color)_ |          |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-inline-start-color\n   */\n  borderInlineStartColor?: BorderInlineStartColorProperty;\n  /**\n   * The **`border-inline-start-style`** CSS property defines the style of the logical inline start border of an element, which maps to a physical border style depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-style`, `border-right-style`, `border-bottom-style`, or `border-left-style` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome |            Firefox            |  Safari  | Edge | IE  |\n   * | :----: | :---------------------------: | :------: | :--: | :-: |\n   * | **69** |            **41**             | **12.1** |  No  | No  |\n   * |        | 3 _(-moz-border-start-style)_ |          |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-inline-start-style\n   */\n  borderInlineStartStyle?: BorderInlineStartStyleProperty;\n  /**\n   * The **`border-inline-start-width`** CSS property defines the width of the logical inline-start border of an element, which maps to a physical border width depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-width`, `border-right-width`, `border-bottom-width`, or `border-left-width` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `medium`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **69** | **41**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-inline-start-width\n   */\n  borderInlineStartWidth?: BorderInlineStartWidthProperty<TLength>;\n  /**\n   * The **`border-inline-style`** CSS property defines the style of the logical inline borders of an element, which maps to a physical border style depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-style` and `border-bottom-style`, or `border-left-style` and `border-right-style` properties depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **66**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-inline-style\n   */\n  borderInlineStyle?: BorderInlineStyleProperty;\n  /**\n   * The **`border-inline-width`** CSS property defines the width of the logical inline borders of an element, which maps to a physical border width depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-width` and `border-bottom-width`, or `border-left-width`, and `border-right-width` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `medium`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **66**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-inline-width\n   */\n  borderInlineWidth?: BorderInlineWidthProperty<TLength>;\n  /**\n   * The **`border-left-color`** CSS property sets the color of an element's left border. It can also be set with the shorthand CSS properties `border-color` or `border-left`.\n   *\n   * **Initial value**: `currentcolor`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-left-color\n   */\n  borderLeftColor?: BorderLeftColorProperty;\n  /**\n   * The **`border-left-style`** CSS property sets the line style of an element's left `border`.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE    |\n   * | :----: | :-----: | :----: | :----: | :-----: |\n   * | **1**  |  **1**  | **1**  | **12** | **5.5** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-left-style\n   */\n  borderLeftStyle?: BorderLeftStyleProperty;\n  /**\n   * The **`border-left-width`** CSS property sets the width of the left border of an element.\n   *\n   * **Initial value**: `medium`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-left-width\n   */\n  borderLeftWidth?: BorderLeftWidthProperty<TLength>;\n  /**\n   * The **`border-right-color`** CSS property sets the color of an element's right border. It can also be set with the shorthand CSS properties `border-color` or `border-right`.\n   *\n   * **Initial value**: `currentcolor`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-right-color\n   */\n  borderRightColor?: BorderRightColorProperty;\n  /**\n   * The **`border-right-style`** CSS property sets the line style of an element's right `border`.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE    |\n   * | :----: | :-----: | :----: | :----: | :-----: |\n   * | **1**  |  **1**  | **1**  | **12** | **5.5** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-right-style\n   */\n  borderRightStyle?: BorderRightStyleProperty;\n  /**\n   * The **`border-right-width`** CSS property sets the width of the right border of an element.\n   *\n   * **Initial value**: `medium`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-right-width\n   */\n  borderRightWidth?: BorderRightWidthProperty<TLength>;\n  /**\n   * The **`border-spacing`** CSS property sets the distance between the borders of adjacent `<table>` cells. This property applies only when `border-collapse` is `separate`.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **8** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-spacing\n   */\n  borderSpacing?: BorderSpacingProperty<TLength>;\n  /**\n   * The **`border-start-end-radius`** CSS property defines a logical border radius on an element, which maps to a physical border radius depending on the element's `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **66**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-start-end-radius\n   */\n  borderStartEndRadius?: BorderStartEndRadiusProperty<TLength>;\n  /**\n   * The **`border-start-start-radius`** CSS property defines a logical border radius on an element, which maps to a physical border radius that depends on the element's `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **66**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-start-start-radius\n   */\n  borderStartStartRadius?: BorderStartStartRadiusProperty<TLength>;\n  /**\n   * The **`border-top-color`** CSS property sets the color of an element's top border. It can also be set with the shorthand CSS properties `border-color` or `border-top`.\n   *\n   * **Initial value**: `currentcolor`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-top-color\n   */\n  borderTopColor?: BorderTopColorProperty;\n  /**\n   * The **`border-top-left-radius`** CSS property rounds the top-left corner of an element.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |  IE   |\n   * | :-----: | :-----: | :-----: | :----: | :---: |\n   * |  **4**  |  **4**  |  **5**  | **12** | **9** |\n   * | 1 _-x-_ |         | 3 _-x-_ |        |       |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-top-left-radius\n   */\n  borderTopLeftRadius?: BorderTopLeftRadiusProperty<TLength>;\n  /**\n   * The **`border-top-right-radius`** CSS property rounds the top-right corner of an element.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |  IE   |\n   * | :-----: | :-----: | :-----: | :----: | :---: |\n   * |  **4**  |  **4**  |  **5**  | **12** | **9** |\n   * | 1 _-x-_ |         | 3 _-x-_ |        |       |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-top-right-radius\n   */\n  borderTopRightRadius?: BorderTopRightRadiusProperty<TLength>;\n  /**\n   * The **`border-top-style`** CSS property sets the line style of an element's top `border`.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE    |\n   * | :----: | :-----: | :----: | :----: | :-----: |\n   * | **1**  |  **1**  | **1**  | **12** | **5.5** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-top-style\n   */\n  borderTopStyle?: BorderTopStyleProperty;\n  /**\n   * The **`border-top-width`** CSS property sets the width of the top border of an element.\n   *\n   * **Initial value**: `medium`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-top-width\n   */\n  borderTopWidth?: BorderTopWidthProperty<TLength>;\n  /**\n   * The **`bottom`** CSS property participates in specifying the vertical position of a _positioned element_. It has no effect on non-positioned elements.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **5** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/bottom\n   */\n  bottom?: BottomProperty<TLength>;\n  /**\n   * The **`box-decoration-break`** CSS property specifies how an element's fragments should be rendered when broken across multiple lines, columns, or pages.\n   *\n   * **Initial value**: `slice`\n   *\n   * |    Chrome    | Firefox |    Safari     | Edge | IE  |\n   * | :----------: | :-----: | :-----------: | :--: | :-: |\n   * | **22** _-x-_ | **32**  | **6.1** _-x-_ |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/box-decoration-break\n   */\n  boxDecorationBreak?: BoxDecorationBreakProperty;\n  /**\n   * The **`box-shadow`** CSS property adds shadow effects around an element's frame. You can set multiple effects separated by commas. A box shadow is described by X and Y offsets relative to the element, blur and spread radii, and color.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |  IE   |\n   * | :-----: | :-----: | :-----: | :----: | :---: |\n   * | **10**  |  **4**  | **5.1** | **12** | **9** |\n   * | 1 _-x-_ |         | 3 _-x-_ |        |       |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/box-shadow\n   */\n  boxShadow?: BoxShadowProperty;\n  /**\n   * The **`box-sizing`** CSS property defines how the user agent should calculate the total width and height of an element.\n   *\n   * **Initial value**: `content-box`\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |  IE   |\n   * | :-----: | :-----: | :-----: | :----: | :---: |\n   * | **10**  | **29**  | **5.1** | **12** | **8** |\n   * | 1 _-x-_ | 1 _-x-_ | 3 _-x-_ |        |       |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/box-sizing\n   */\n  boxSizing?: BoxSizingProperty;\n  /**\n   * The **`break-after`** CSS property defines how page, column, or region breaks should behave after a generated box. If there is no generated box, the property is ignored.\n   *\n   * **Initial value**: `auto`\n   *\n   * ---\n   *\n   * _Supported in Multi-column Layout_\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE   |\n   * | :----: | :-----: | :----: | :----: | :----: |\n   * | **50** |   No    |   No   | **12** | **10** |\n   *\n   * ---\n   *\n   * _Supported in Paged Media_\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE   |\n   * | :----: | :-----: | :----: | :----: | :----: |\n   * | **50** | **65**  | **10** | **12** | **10** |\n   *\n   * ---\n   *\n   * _Supported in CSS Regions_\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   |   No    |   No   |  No  | No  |\n   *\n   * ---\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/break-after\n   */\n  breakAfter?: BreakAfterProperty;\n  /**\n   * The **`break-before`** CSS property sets how page, column, or region breaks should behave before a generated box. If there is no generated box, the property is ignored.\n   *\n   * **Initial value**: `auto`\n   *\n   * ---\n   *\n   * _Supported in Multi-column Layout_\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE   |\n   * | :----: | :-----: | :----: | :----: | :----: |\n   * | **50** | **65**  |   No   | **12** | **10** |\n   *\n   * ---\n   *\n   * _Supported in Paged Media_\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE   |\n   * | :----: | :-----: | :----: | :----: | :----: |\n   * | **50** | **65**  | **10** | **12** | **10** |\n   *\n   * ---\n   *\n   * _Supported in CSS Regions_\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   |   No    |   No   |  No  | No  |\n   *\n   * ---\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/break-before\n   */\n  breakBefore?: BreakBeforeProperty;\n  /**\n   * The **`break-inside`** CSS property defines how page, column, or region breaks should behave inside a generated box. If there is no generated box, the property is ignored.\n   *\n   * **Initial value**: `auto`\n   *\n   * ---\n   *\n   * _Supported in Multi-column Layout_\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE   |\n   * | :----: | :-----: | :----: | :----: | :----: |\n   * | **50** | **65**  | **10** | **12** | **10** |\n   *\n   * ---\n   *\n   * _Supported in Paged Media_\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE   |\n   * | :----: | :-----: | :----: | :----: | :----: |\n   * | **50** | **65**  | **10** | **12** | **10** |\n   *\n   * ---\n   *\n   * _Supported in CSS Regions_\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   |   No    |   No   |  No  | No  |\n   *\n   * ---\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/break-inside\n   */\n  breakInside?: BreakInsideProperty;\n  /**\n   * The **`caption-side`** CSS property puts the content of a table's `<caption>` on the specified side. The values are relative to the `writing-mode` of the table.\n   *\n   * **Initial value**: `top`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **8** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/caption-side\n   */\n  captionSide?: CaptionSideProperty;\n  /**\n   * The **`caret-color`** CSS property sets the color of the insertion caret, the visible marker where the next character typed will be inserted. The caret appears in elements such as `<input>` or those with the `contenteditable` attribute. The caret is typically a thin vertical line that flashes to help make it more noticeable. By default, it is black, but its color can be altered with this property.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **57** | **53**  | **11.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/caret-color\n   */\n  caretColor?: CaretColorProperty;\n  /**\n   * The **`clear`** CSS property sets whether an element must be moved below (cleared) floating elements that precede it. The `clear` property applies to floating and non-floating elements.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/clear\n   */\n  clear?: ClearProperty;\n  /**\n   * The `**clip-path**` CSS property creates a clipping region that sets what part of an element should be shown. Parts that are inside the region are shown, while those outside are hidden.\n   *\n   * **Initial value**: `none`\n   *\n   * |  Chrome  | Firefox |  Safari   |  Edge  |   IE   |\n   * | :------: | :-----: | :-------: | :----: | :----: |\n   * |  **55**  | **3.5** |  **9.1**  | **12** | **10** |\n   * | 23 _-x-_ |         | 6.1 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/clip-path\n   */\n  clipPath?: ClipPathProperty;\n  /**\n   * The **`color`** CSS property sets the foreground color value of an element's text and text decorations, and sets the `currentcolor` value. `currentcolor` may be used as an indirect value on _other_ properties and is the default for other color properties, such as `border-color`.\n   *\n   * **Initial value**: Varies from one browser to another\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **3** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/color\n   */\n  color?: ColorProperty;\n  /**\n   * The **`color-adjust`** CSS property sets what, if anything, the user agent may do to optimize the appearance of the element on the output device. By default, the browser is allowed to make any adjustments to the element's appearance it determines to be necessary and prudent given the type and capabilities of the output device.\n   *\n   * **Initial value**: `economy`\n   *\n   * |    Chrome    | Firefox |   Safari    | Edge | IE  |\n   * | :----------: | :-----: | :---------: | :--: | :-: |\n   * | **49** _-x-_ | **48**  | **6** _-x-_ |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/color-adjust\n   */\n  colorAdjust?: ColorAdjustProperty;\n  /**\n   * The **`column-count`** CSS property breaks an element's content into the specified number of columns.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |\n   * | :-----: | :-----: | :-----: | :----: | :----: |\n   * | **50**  | **52**  |  **9**  | **12** | **10** |\n   * | 1 _-x-_ |         | 3 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/column-count\n   */\n  columnCount?: ColumnCountProperty;\n  /**\n   * The **`column-fill`** CSS property controls how an element's contents are balanced when broken into columns.\n   *\n   * **Initial value**: `balance`\n   *\n   * | Chrome | Firefox | Safari  |  Edge  |   IE   |\n   * | :----: | :-----: | :-----: | :----: | :----: |\n   * | **50** | **52**  |  **9**  | **12** | **10** |\n   * |        |         | 8 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/column-fill\n   */\n  columnFill?: ColumnFillProperty;\n  /**\n   * The **`column-gap`** CSS property sets the size of the gap (gutter) between an element's columns.\n   *\n   * **Initial value**: `normal`\n   *\n   * ---\n   *\n   * _Supported in Flex Layout_\n   *\n   * | Chrome | Firefox |   Safari    | Edge | IE  |\n   * | :----: | :-----: | :---------: | :--: | :-: |\n   * |   No   | **63**  | **3** _-x-_ |  No  | No  |\n   *\n   * ---\n   *\n   * _Supported in Grid Layout_\n   *\n   * |     Chrome      |     Firefox     |        Safari         |  Edge  | IE  |\n   * | :-------------: | :-------------: | :-------------------: | :----: | :-: |\n   * |     **66**      |     **61**      | **10.1** _(grid-gap)_ | **16** | No  |\n   * | 57 _(grid-gap)_ | 52 _(grid-gap)_ |                       |        |     |\n   *\n   * ---\n   *\n   * _Supported in Multi-column Layout_\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |\n   * | :-----: | :-----: | :-----: | :----: | :----: |\n   * | **50**  | **52**  | **10**  | **12** | **10** |\n   * | 1 _-x-_ |         | 3 _-x-_ |        |        |\n   *\n   * ---\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/column-gap\n   */\n  columnGap?: ColumnGapProperty<TLength>;\n  /**\n   * The **`column-rule-color`** CSS property sets the color of the rule (line) drawn between columns in a multi-column layout.\n   *\n   * **Initial value**: `currentcolor`\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |\n   * | :-----: | :-----: | :-----: | :----: | :----: |\n   * | **50**  | **52**  |  **9**  | **12** | **10** |\n   * | 1 _-x-_ |         | 3 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/column-rule-color\n   */\n  columnRuleColor?: ColumnRuleColorProperty;\n  /**\n   * The **`column-rule-style`** CSS property sets the style of the line drawn between columns in a multi-column layout.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |\n   * | :-----: | :-----: | :-----: | :----: | :----: |\n   * | **50**  | **52**  |  **9**  | **12** | **10** |\n   * | 1 _-x-_ |         | 3 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/column-rule-style\n   */\n  columnRuleStyle?: ColumnRuleStyleProperty;\n  /**\n   * The **`column-rule-width`** CSS property sets the width of the rule (line) drawn between columns in a multi-column layout.\n   *\n   * **Initial value**: `medium`\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |\n   * | :-----: | :-----: | :-----: | :----: | :----: |\n   * | **50**  | **52**  |  **9**  | **12** | **10** |\n   * | 1 _-x-_ |         | 3 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/column-rule-width\n   */\n  columnRuleWidth?: ColumnRuleWidthProperty<TLength>;\n  /**\n   * The **`column-span`** CSS property makes it possible for an element to span across all columns when its value is set to `all`.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome  | Firefox |  Safari   |  Edge  |   IE   |\n   * | :-----: | :-----: | :-------: | :----: | :----: |\n   * | **50**  | **71**  |   **9**   | **12** | **10** |\n   * | 6 _-x-_ |         | 5.1 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/column-span\n   */\n  columnSpan?: ColumnSpanProperty;\n  /**\n   * The **`column-width`** CSS property specifies the ideal column width in a multi-column layout. The container will have as many columns as can fit without any of them having a width less than the `column-width` value. If the width of the container is narrower than the specified value, the single column's width will be smaller than the declared column width.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |\n   * | :-----: | :-----: | :-----: | :----: | :----: |\n   * | **50**  | **50**  |  **9**  | **12** | **10** |\n   * | 1 _-x-_ |         | 3 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/column-width\n   */\n  columnWidth?: ColumnWidthProperty<TLength>;\n  /**\n   * The **`contain`** CSS property allows an author to indicate that an element and its contents are, as much as possible, _independent_ of the rest of the document tree. This allows the browser to recalculate layout, style, paint, size, or any combination of them for a limited area of the DOM and not the entire page.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **52** | **69**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/contain\n   */\n  contain?: ContainProperty;\n  /**\n   * The **`content`** CSS property replaces an element with a generated value. Objects inserted using the `content` property are _anonymous replaced elements._\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **8** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/content\n   */\n  content?: ContentProperty;\n  /**\n   * The **`counter-increment`** CSS property increases or decreases the value of a CSS counter by a given value.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **2**  |  **1**  | **3**  | **12** | **8** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/counter-increment\n   */\n  counterIncrement?: CounterIncrementProperty;\n  /**\n   * The **`counter-reset`** CSS property resets a CSS counter to a given value.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **2**  |  **1**  | **3**  | **12** | **8** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/counter-reset\n   */\n  counterReset?: CounterResetProperty;\n  /**\n   * The **`counter-set`** CSS property sets a CSS counter to a given value. It manipulates the value of existing counters, and will only create new counters if there isn't already a counter of the given name on the element.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **68**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/counter-set\n   */\n  counterSet?: CounterSetProperty;\n  /**\n   * The **`cursor`** CSS property sets mouse cursor to display when the mouse pointer is over an element.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari  |  Edge  |  IE   |\n   * | :----: | :-----: | :-----: | :----: | :---: |\n   * | **1**  |  **1**  | **1.2** | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/cursor\n   */\n  cursor?: CursorProperty;\n  /**\n   * The **`direction`** CSS property sets the direction of text, table columns, and horizontal overflow. Use `rtl` for languages written from right to left (like Hebrew or Arabic), and `ltr` for those written from left to right (like English and most other languages).\n   *\n   * **Initial value**: `ltr`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE    |\n   * | :----: | :-----: | :----: | :----: | :-----: |\n   * | **2**  |  **1**  | **1**  | **12** | **5.5** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/direction\n   */\n  direction?: DirectionProperty;\n  /**\n   * The **`display`** CSS property defines the _display type_ of an element, which consists of the two basic qualities of how an element generates boxes — the **outer display type** defining how the box participates in flow layout, and the **inner display type** defining how the children of the box are laid out.\n   *\n   * **Initial value**: `inline`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/display\n   */\n  display?: DisplayProperty;\n  /**\n   * The **`empty-cells`** CSS property sets whether borders and backgrounds appear around `<table>` cells that have no visible content.\n   *\n   * **Initial value**: `show`\n   *\n   * | Chrome | Firefox | Safari  |  Edge  |  IE   |\n   * | :----: | :-----: | :-----: | :----: | :---: |\n   * | **1**  |  **1**  | **1.2** | **12** | **8** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/empty-cells\n   */\n  emptyCells?: EmptyCellsProperty;\n  /**\n   * The **`filter`** CSS property applies graphical effects like blur or color shift to an element. Filters are commonly used to adjust the rendering of images, backgrounds, and borders.\n   *\n   * **Initial value**: `none`\n   *\n   * |  Chrome  | Firefox | Safari  |  Edge  | IE  |\n   * | :------: | :-----: | :-----: | :----: | :-: |\n   * |  **53**  | **35**  | **9.1** | **12** | No  |\n   * | 18 _-x-_ |         | 6 _-x-_ |        |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/filter\n   */\n  filter?: FilterProperty;\n  /**\n   * The **`flex-basis`** CSS property sets the initial main size of a flex item. It sets the size of the content box unless otherwise set with `box-sizing`.\n   *\n   * **Initial value**: `auto`\n   *\n   * |  Chrome  | Firefox | Safari  |  Edge  |   IE   |\n   * | :------: | :-----: | :-----: | :----: | :----: |\n   * |  **29**  | **22**  |  **9**  | **12** | **11** |\n   * | 22 _-x-_ |         | 7 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/flex-basis\n   */\n  flexBasis?: FlexBasisProperty<TLength>;\n  /**\n   * The **`flex-direction`** CSS property sets how flex items are placed in the flex container defining the main axis and the direction (normal or reversed).\n   *\n   * **Initial value**: `row`\n   *\n   * |  Chrome  | Firefox | Safari  |  Edge  |    IE    |\n   * | :------: | :-----: | :-----: | :----: | :------: |\n   * |  **29**  | **20**  |  **9**  | **12** |  **11**  |\n   * | 21 _-x-_ |         | 7 _-x-_ |        | 10 _-x-_ |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/flex-direction\n   */\n  flexDirection?: FlexDirectionProperty;\n  /**\n   * The **`flex-grow`** CSS property sets how much of the available space in the flex container should be assigned to that item (the flex grow factor). If all sibling items have the same flex grow factor, then all items will receive the same share of available space, otherwise it is distributed according to the ratio defined by the different flex grow factors.\n   *\n   * **Initial value**: `0`\n   *\n   * |  Chrome  | Firefox |  Safari   |  Edge  |            IE            |\n   * | :------: | :-----: | :-------: | :----: | :----------------------: |\n   * |  **29**  | **20**  |   **9**   | **12** |          **11**          |\n   * | 22 _-x-_ |         | 6.1 _-x-_ |        | 10 _(-ms-flex-positive)_ |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/flex-grow\n   */\n  flexGrow?: GlobalsNumber;\n  /**\n   * The **`flex-shrink`** CSS property sets the flex shrink factor of a flex item. If the size of flex items is larger than the flex container, items shrink to fit according to `flex-shrink`.\n   *\n   * **Initial value**: `1`\n   *\n   * |  Chrome  | Firefox | Safari  |  Edge  |   IE   |\n   * | :------: | :-----: | :-----: | :----: | :----: |\n   * |  **29**  | **20**  |  **9**  | **12** | **10** |\n   * | 22 _-x-_ |         | 8 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/flex-shrink\n   */\n  flexShrink?: GlobalsNumber;\n  /**\n   * The **`flex-wrap`** CSS property sets whether flex items are forced onto one line or can wrap onto multiple lines. If wrapping is allowed, it sets the direction that lines are stacked.\n   *\n   * **Initial value**: `nowrap`\n   *\n   * |  Chrome  | Firefox |  Safari   |  Edge  |   IE   |\n   * | :------: | :-----: | :-------: | :----: | :----: |\n   * |  **29**  | **28**  |   **9**   | **12** | **11** |\n   * | 21 _-x-_ |         | 6.1 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/flex-wrap\n   */\n  flexWrap?: FlexWrapProperty;\n  /**\n   * The **`float`** CSS property places an element on the left or right side of its container, allowing text and inline elements to wrap around it. The element is removed from the normal flow of the page, though still remaining a part of the flow (in contrast to absolute positioning).\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/float\n   */\n  float?: FloatProperty;\n  /**\n   * The **`font-family`** CSS property specifies a prioritized list of one or more font family names and/or generic family names for the selected element.\n   *\n   * **Initial value**: depends on user agent\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **3** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/font-family\n   */\n  fontFamily?: FontFamilyProperty;\n  /**\n   * The **`font-feature-settings`** CSS property controls advanced typographic features in OpenType fonts.\n   *\n   * **Initial value**: `normal`\n   *\n   * |  Chrome  | Firefox  | Safari  |  Edge  |   IE   |\n   * | :------: | :------: | :-----: | :----: | :----: |\n   * |  **48**  |  **34**  | **9.1** | **15** | **10** |\n   * | 16 _-x-_ | 15 _-x-_ |         |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/font-feature-settings\n   */\n  fontFeatureSettings?: FontFeatureSettingsProperty;\n  /**\n   * The **`font-kerning`** CSS property sets the use of the kerning information stored in a font.\n   *\n   * **Initial value**: `auto`\n   *\n   * |    Chrome    | Firefox | Safari | Edge | IE  |\n   * | :----------: | :-----: | :----: | :--: | :-: |\n   * | **32** _-x-_ | **32**  | **7**  |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/font-kerning\n   */\n  fontKerning?: FontKerningProperty;\n  /**\n   * The **`font-language-override`** CSS property controls the use of language-specific glyphs in a typeface.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **34**  |   No   |  No  | No  |\n   * |        | 4 _-x-_ |        |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/font-language-override\n   */\n  fontLanguageOverride?: FontLanguageOverrideProperty;\n  /**\n   * The **`font-optical-sizing`** CSS property sets whether text rendering is optimized for viewing at different sizes. This only works for fonts that have an optical size variation axis.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari |  Edge  | IE  |\n   * | :----: | :-----: | :----: | :----: | :-: |\n   * | **79** | **62**  | **11** | **17** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/font-optical-sizing\n   */\n  fontOpticalSizing?: FontOpticalSizingProperty;\n  /**\n   * The **`font-size`** CSS property sets the size of the font. This property is also used to compute the size of `em`, `ex`, and other relative `<length>` units.\n   *\n   * **Initial value**: `medium`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE    |\n   * | :----: | :-----: | :----: | :----: | :-----: |\n   * | **1**  |  **1**  | **1**  | **12** | **5.5** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/font-size\n   */\n  fontSize?: FontSizeProperty<TLength>;\n  /**\n   * The **`font-size-adjust`** CSS property sets how the font size should be chosen based on the height of lowercase rather than capital letters.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **54** |  **1**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/font-size-adjust\n   */\n  fontSizeAdjust?: FontSizeAdjustProperty;\n  /**\n   * The **`font-stretch`** CSS property selects a normal, condensed, or expanded face from a font.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **60** |  **9**  | **11** | **12** | **9** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/font-stretch\n   */\n  fontStretch?: FontStretchProperty;\n  /**\n   * The **`font-style`** CSS property sets whether a font should be styled with a normal, italic, or oblique face from its `font-family`.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/font-style\n   */\n  fontStyle?: FontStyleProperty;\n  /**\n   * The **`font-synthesis`** CSS property controls which missing typefaces, bold or italic, may be synthesized by the browser.\n   *\n   * **Initial value**: `weight style`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **34**  | **9**  |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/font-synthesis\n   */\n  fontSynthesis?: FontSynthesisProperty;\n  /**\n   * The **font-variant** CSS property is a shorthand for the longhand properties `font-variant-caps`, `font-variant-numeric`, `font-variant-alternates`, `font-variant-ligatures`, and `font-variant-east-asian`. You can also set the CSS Level 2 (Revision 1) values of `font-variant`, (that is, `normal` or `small-caps`), by using the `font` shorthand.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/font-variant\n   */\n  fontVariant?: FontVariantProperty;\n  /**\n   * The **`font-variant-caps`** CSS property controls the use of alternate glyphs for capital letters.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **52** | **34**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/font-variant-caps\n   */\n  fontVariantCaps?: FontVariantCapsProperty;\n  /**\n   * The **`font-variant-east-asian`** CSS property controls the use of alternate glyphs for East Asian scripts, like Japanese and Chinese.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **63** | **34**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/font-variant-east-asian\n   */\n  fontVariantEastAsian?: FontVariantEastAsianProperty;\n  /**\n   * The **`font-variant-ligatures`** CSS property controls which ligatures and contextual forms are used in textual content of the elements it applies to. This leads to more harmonized forms in the resulting text.\n   *\n   * **Initial value**: `normal`\n   *\n   * |  Chrome  | Firefox | Safari  | Edge | IE  |\n   * | :------: | :-----: | :-----: | :--: | :-: |\n   * |  **34**  | **34**  | **9.1** |  No  | No  |\n   * | 31 _-x-_ |         | 7 _-x-_ |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/font-variant-ligatures\n   */\n  fontVariantLigatures?: FontVariantLigaturesProperty;\n  /**\n   * The **`font-variant-numeric`** CSS property controls the usage of alternate glyphs for numbers, fractions, and ordinal markers.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari  | Edge | IE  |\n   * | :----: | :-----: | :-----: | :--: | :-: |\n   * | **52** | **34**  | **9.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/font-variant-numeric\n   */\n  fontVariantNumeric?: FontVariantNumericProperty;\n  /**\n   * The **`font-variant-position`** CSS property controls the use of alternate, smaller glyphs that are positioned as superscript or subscript.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **34**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/font-variant-position\n   */\n  fontVariantPosition?: FontVariantPositionProperty;\n  /**\n   * The **`font-variation-settings`** CSS property provides low-level control over variable font characteristics, by specifying the four letter axis names of the characteristics you want to vary, along with their values.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari |  Edge  | IE  |\n   * | :----: | :-----: | :----: | :----: | :-: |\n   * | **62** | **62**  | **11** | **17** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/font-variation-settings\n   */\n  fontVariationSettings?: FontVariationSettingsProperty;\n  /**\n   * The **`font-weight`** CSS property specifies the weight (or boldness) of the font. The font weights available to you will depend on the `font-family` you are using. Some fonts are only available in `normal` and `bold`.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **2**  |  **1**  | **1**  | **12** | **3** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/font-weight\n   */\n  fontWeight?: FontWeightProperty;\n  /**\n   * The **`grid-auto-columns`** CSS property specifies the size of an implicitly-created grid column track.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox |  Safari  |          Edge           |             IE              |\n   * | :----: | :-----: | :------: | :---------------------: | :-------------------------: |\n   * | **57** | **70**  | **10.1** |         **16**          | **10** _(-ms-grid-columns)_ |\n   * |        |         |          | 12 _(-ms-grid-columns)_ |                             |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/grid-auto-columns\n   */\n  gridAutoColumns?: GridAutoColumnsProperty<TLength>;\n  /**\n   * The **`grid-auto-flow`** CSS property controls how the auto-placement algorithm works, specifying exactly how auto-placed items get flowed into the grid.\n   *\n   * **Initial value**: `row`\n   *\n   * | Chrome | Firefox |  Safari  |  Edge  | IE  |\n   * | :----: | :-----: | :------: | :----: | :-: |\n   * | **57** | **52**  | **10.1** | **16** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/grid-auto-flow\n   */\n  gridAutoFlow?: GridAutoFlowProperty;\n  /**\n   * The **`grid-auto-rows`** CSS property specifies the size of an implicitly-created grid row track.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox |  Safari  |         Edge         |            IE            |\n   * | :----: | :-----: | :------: | :------------------: | :----------------------: |\n   * | **57** | **70**  | **10.1** |        **16**        | **10** _(-ms-grid-rows)_ |\n   * |        |         |          | 12 _(-ms-grid-rows)_ |                          |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/grid-auto-rows\n   */\n  gridAutoRows?: GridAutoRowsProperty<TLength>;\n  /**\n   * The **`grid-column-end`** CSS property specifies a grid item’s end position within the grid column by contributing a line, a span, or nothing (automatic) to its grid placement, thereby specifying the block-end edge of its grid area.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox |  Safari  |  Edge  | IE  |\n   * | :----: | :-----: | :------: | :----: | :-: |\n   * | **57** | **52**  | **10.1** | **16** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/grid-column-end\n   */\n  gridColumnEnd?: GridColumnEndProperty;\n  /**\n   * The **`grid-column-start`** CSS property specifies a grid item’s start position within the grid column by contributing a line, a span, or nothing (automatic) to its grid placement. This start position defines the block-start edge of the grid area.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox |  Safari  |  Edge  | IE  |\n   * | :----: | :-----: | :------: | :----: | :-: |\n   * | **57** | **52**  | **10.1** | **16** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/grid-column-start\n   */\n  gridColumnStart?: GridColumnStartProperty;\n  /**\n   * The **`grid-row-end`** CSS property specifies a grid item’s end position within the grid row by contributing a line, a span, or nothing (automatic) to its grid placement, thereby specifying the inline-end edge of its grid area.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox |  Safari  |  Edge  | IE  |\n   * | :----: | :-----: | :------: | :----: | :-: |\n   * | **57** | **52**  | **10.1** | **16** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/grid-row-end\n   */\n  gridRowEnd?: GridRowEndProperty;\n  /**\n   * The **`grid-row-start`** CSS property specifies a grid item’s start position within the grid row by contributing a line, a span, or nothing (automatic) to its grid placement, thereby specifying the inline-start edge of its grid area.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox |  Safari  |  Edge  | IE  |\n   * | :----: | :-----: | :------: | :----: | :-: |\n   * | **57** | **52**  | **10.1** | **16** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/grid-row-start\n   */\n  gridRowStart?: GridRowStartProperty;\n  /**\n   * The **`grid-template-areas`** CSS property specifies named grid areas.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox |  Safari  |  Edge  | IE  |\n   * | :----: | :-----: | :------: | :----: | :-: |\n   * | **57** | **52**  | **10.1** | **16** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/grid-template-areas\n   */\n  gridTemplateAreas?: GridTemplateAreasProperty;\n  /**\n   * The **`grid-template-columns`** CSS property defines the line names and track sizing functions of the grid columns.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox |  Safari  |  Edge  | IE  |\n   * | :----: | :-----: | :------: | :----: | :-: |\n   * | **57** | **52**  | **10.1** | **16** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/grid-template-columns\n   */\n  gridTemplateColumns?: GridTemplateColumnsProperty<TLength>;\n  /**\n   * The **`grid-template-rows`** CSS property defines the line names and track sizing functions of the grid rows.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox |  Safari  |  Edge  | IE  |\n   * | :----: | :-----: | :------: | :----: | :-: |\n   * | **57** | **52**  | **10.1** | **16** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/grid-template-rows\n   */\n  gridTemplateRows?: GridTemplateRowsProperty<TLength>;\n  /**\n   * The **`hanging-punctuation`** CSS property specifies whether a punctuation mark should hang at the start or end of a line of text. Hanging punctuation may be placed outside the line box.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   |   No    | **10** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/hanging-punctuation\n   */\n  hangingPunctuation?: HangingPunctuationProperty;\n  /**\n   * The **`height`** CSS property specifies the height of an element. By default, the property defines the height of the content area. If `box-sizing` is set to `border-box`, however, it instead determines the height of the border area.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/height\n   */\n  height?: HeightProperty<TLength>;\n  /**\n   * The **`hyphens`** CSS property specifies how words should be hyphenated when text wraps across multiple lines. You can prevent hyphenation entirely, use hyphenation in manually-specified points within the text, or let the browser automatically insert hyphens where appropriate.\n   *\n   * **Initial value**: `manual`\n   *\n   * |  Chrome  | Firefox |    Safari     |     Edge     |      IE      |\n   * | :------: | :-----: | :-----------: | :----------: | :----------: |\n   * |  **55**  | **43**  | **5.1** _-x-_ | **12** _-x-_ | **10** _-x-_ |\n   * | 13 _-x-_ | 6 _-x-_ |               |              |              |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/hyphens\n   */\n  hyphens?: HyphensProperty;\n  /**\n   * The **`image-orientation`** CSS property specifies a layout-independent correction to the orientation of an image. It should _not_ be used for any other orientation adjustments; instead, the `transform` property should be used with the `rotate` `<transform-function>`.\n   *\n   * **Initial value**: `0deg`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **26**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/image-orientation\n   */\n  imageOrientation?: ImageOrientationProperty;\n  /**\n   * The **`image-rendering`** CSS property sets an image scaling algorithm. The property applies to an element itself, to any images set in its other properties, and to its descendants.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **13** | **3.6** | **6**  |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/image-rendering\n   */\n  imageRendering?: ImageRenderingProperty;\n  /** **Initial value**: `1dppx` */\n  imageResolution?: ImageResolutionProperty;\n  /**\n   * The `initial-letter` CSS property sets styling for dropped, raised, and sunken initial letters.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   |   No    | **9**  |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/initial-letter\n   */\n  initialLetter?: InitialLetterProperty;\n  /**\n   * The **`inline-size`** CSS property defines the horizontal or vertical size of an element's block, depending on its writing mode. It corresponds to either the `width` or the `height` property, depending on the value of `writing-mode`.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **57** | **41**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/inline-size\n   */\n  inlineSize?: InlineSizeProperty<TLength>;\n  /**\n   * The **`inset`** CSS property defines the logical block and inline start and end offsets of an element, which map to physical offsets depending on the element's writing mode, directionality, and text orientation. It corresponds to the `top` and `bottom`, or `right` and `left` properties depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **66**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/inset\n   */\n  inset?: InsetProperty<TLength>;\n  /**\n   * The **`inset-block`** CSS property defines the logical block start and end offsets of an element, which maps to physical offsets depending on the element's writing mode, directionality, and text orientation. It corresponds to the `top` and `bottom`, or `right` and `left` properties depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |  n/a   | **63**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/inset-block\n   */\n  insetBlock?: InsetBlockProperty<TLength>;\n  /**\n   * The **`inset-block-end`** CSS property defines the logical block end offset of an element, which maps to a physical inset depending on the element's writing mode, directionality, and text orientation. It corresponds to the `top`, `right`, `bottom`, or `left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |  n/a   | **63**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/inset-block-end\n   */\n  insetBlockEnd?: InsetBlockEndProperty<TLength>;\n  /**\n   * The **`inset-block-start`** CSS property defines the logical block start offset of an element, which maps to a physical inset depending on the element's writing mode, directionality, and text orientation. It corresponds to the `top`, `right`, `bottom`, or `left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |  n/a   | **63**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/inset-block-start\n   */\n  insetBlockStart?: InsetBlockStartProperty<TLength>;\n  /**\n   * The **`inset-inline`** CSS property defines the logical block start and end offsets of an element, which maps to physical offsets depending on the element's writing mode, directionality, and text orientation. It corresponds to the `top` and `bottom`, or `right` and `left` properties depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |  n/a   | **63**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/inset-inline\n   */\n  insetInline?: InsetInlineProperty<TLength>;\n  /**\n   * The **`inset-inline-end`** CSS property defines the logical inline end inset of an element, which maps to a physical inset depending on the element's writing mode, directionality, and text orientation. It corresponds to the `top`, `right`, `bottom`, or `left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |  n/a   | **63**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/inset-inline-end\n   */\n  insetInlineEnd?: InsetInlineEndProperty<TLength>;\n  /**\n   * The **`inset-inline-start`** CSS property defines the logical inline start inset of an element, which maps to a physical offset depending on the element's writing mode, directionality, and text orientation. It corresponds to the `top`, `right`, `bottom`, or `left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |  n/a   | **63**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/inset-inline-start\n   */\n  insetInlineStart?: InsetInlineStartProperty<TLength>;\n  /**\n   * The **`isolation`** CSS property determines whether an element must create a new stacking context.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **41** | **36**  | **8**  |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/isolation\n   */\n  isolation?: IsolationProperty;\n  /**\n   * The CSS **`justify-content`** property defines how the browser distributes space between and around content items along the main-axis of a flex container, and the inline axis of a grid container.\n   *\n   * **Initial value**: `normal`\n   *\n   * ---\n   *\n   * _Supported in Flex Layout_\n   *\n   * |  Chrome  | Firefox |  Safari   |  Edge  |   IE   |\n   * | :------: | :-----: | :-------: | :----: | :----: |\n   * |  **52**  | **20**  |   **9**   | **12** | **11** |\n   * | 21 _-x-_ |         | 6.1 _-x-_ |        |        |\n   *\n   * ---\n   *\n   * _Supported in Grid Layout_\n   *\n   * | Chrome | Firefox |  Safari  |  Edge  | IE  |\n   * | :----: | :-----: | :------: | :----: | :-: |\n   * | **57** | **52**  | **10.1** | **16** | No  |\n   *\n   * ---\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/justify-content\n   */\n  justifyContent?: JustifyContentProperty;\n  /**\n   * The CSS **`justify-items`** property defines the default `justify-self` for all items of the box, giving them all a default way of justifying each box along the appropriate axis.\n   *\n   * **Initial value**: `legacy`\n   *\n   * ---\n   *\n   * _Supported in Flex Layout_\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE   |\n   * | :----: | :-----: | :----: | :----: | :----: |\n   * | **52** | **20**  | **9**  | **12** | **11** |\n   *\n   * ---\n   *\n   * _Supported in Grid Layout_\n   *\n   * | Chrome | Firefox |  Safari  |  Edge  | IE  |\n   * | :----: | :-----: | :------: | :----: | :-: |\n   * | **57** | **45**  | **10.1** | **16** | No  |\n   *\n   * ---\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/justify-items\n   */\n  justifyItems?: JustifyItemsProperty;\n  /**\n   * The CSS **`justify-self`** property set the way a box is justified inside its alignment container along the appropriate axis.\n   *\n   * **Initial value**: `auto`\n   *\n   * ---\n   *\n   * _Supported in Flex Layout_\n   *\n   * | Chrome | Firefox |  Safari  |  Edge  | IE  |\n   * | :----: | :-----: | :------: | :----: | :-: |\n   * | **57** | **45**  | **10.1** | **16** | No  |\n   *\n   * ---\n   *\n   * _Supported in Grid Layout_\n   *\n   * | Chrome | Firefox |  Safari  |  Edge  | IE  |\n   * | :----: | :-----: | :------: | :----: | :-: |\n   * | **57** | **45**  | **10.1** | **16** | No  |\n   *\n   * ---\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/justify-self\n   */\n  justifySelf?: JustifySelfProperty;\n  /**\n   * The **`left`** CSS property participates in specifying the horizontal position of a _positioned element_. It has no effect on non-positioned elements.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE    |\n   * | :----: | :-----: | :----: | :----: | :-----: |\n   * | **1**  |  **1**  | **1**  | **12** | **5.5** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/left\n   */\n  left?: LeftProperty<TLength>;\n  /**\n   * The **`letter-spacing`** CSS property sets the spacing behavior between text characters.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/letter-spacing\n   */\n  letterSpacing?: LetterSpacingProperty<TLength>;\n  /**\n   * The **`line-break`** CSS property sets how to break lines of Chinese, Japanese, or Korean (CJK) text when working with punctuation and symbols.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome  | Firefox |   Safari    |  Edge  |   IE    |\n   * | :-----: | :-----: | :---------: | :----: | :-----: |\n   * | **58**  | **69**  | **3** _-x-_ | **14** | **5.5** |\n   * | 1 _-x-_ |         |             |        |         |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/line-break\n   */\n  lineBreak?: LineBreakProperty;\n  /**\n   * The **`line-height`** CSS property sets the amount of space used for lines, such as in text. On block-level elements, it specifies the minimum height of line boxes within the element. On non-replaced inline elements, it specifies the height that is used to calculate line box height.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/line-height\n   */\n  lineHeight?: LineHeightProperty<TLength>;\n  /**\n   * The **`line-height-step`** CSS property sets the step unit for line box heights. When the property is set, line box heights are rounded up to the closest multiple of the unit.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |  n/a   |   No    |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/line-height-step\n   */\n  lineHeightStep?: LineHeightStepProperty<TLength>;\n  /**\n   * The **`list-style-image`** CSS property sets an image to be used as the list item marker.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/list-style-image\n   */\n  listStyleImage?: ListStyleImageProperty;\n  /**\n   * The **`list-style-position`** CSS property sets the position of the `::marker` relative to a list item.\n   *\n   * **Initial value**: `outside`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/list-style-position\n   */\n  listStylePosition?: ListStylePositionProperty;\n  /**\n   * The **`list-style-type`** CSS property sets the marker (such as a disc, character, or custom counter style) of a list item element.\n   *\n   * **Initial value**: `disc`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/list-style-type\n   */\n  listStyleType?: ListStyleTypeProperty;\n  /**\n   * The **`margin-block`** CSS property defines the logical block start and end margins of an element, which maps to physical margins depending on the element's writing mode, directionality, and text orientation.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **66**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/margin-block\n   */\n  marginBlock?: MarginBlockProperty<TLength>;\n  /**\n   * The **`margin-block-end`** CSS property defines the logical block end margin of an element, which maps to a physical margin depending on the element's writing mode, directionality, and text orientation.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **69** | **41**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/margin-block-end\n   */\n  marginBlockEnd?: MarginBlockEndProperty<TLength>;\n  /**\n   * The **`margin-block-start`** CSS property defines the logical block start margin of an element, which maps to a physical margin depending on the element's writing mode, directionality, and text orientation.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **69** | **41**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/margin-block-start\n   */\n  marginBlockStart?: MarginBlockStartProperty<TLength>;\n  /**\n   * The **`margin-bottom`** CSS property sets the margin area on the bottom of an element. A positive value places it farther from its neighbors, while a negative value places it closer.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **3** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/margin-bottom\n   */\n  marginBottom?: MarginBottomProperty<TLength>;\n  /**\n   * The **`margin-inline`** CSS property defines the logical inline start and end margins of an element, which maps to physical margins depending on the element's writing mode, directionality, and text orientation.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **66**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/margin-inline\n   */\n  marginInline?: MarginInlineProperty<TLength>;\n  /**\n   * The **`margin-inline-end`** CSS property defines the logical inline end margin of an element, which maps to a physical margin depending on the element's writing mode, directionality, and text orientation. In other words, it corresponds to the `margin-top`, `margin-right`, `margin-bottom` or `margin-left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `0`\n   *\n   * |          Chrome          |        Firefox        |          Safari          | Edge | IE  |\n   * | :----------------------: | :-------------------: | :----------------------: | :--: | :-: |\n   * |          **69**          |        **41**         |         **12.1**         |  No  | No  |\n   * | 2 _(-webkit-margin-end)_ | 3 _(-moz-margin-end)_ | 3 _(-webkit-margin-end)_ |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/margin-inline-end\n   */\n  marginInlineEnd?: MarginInlineEndProperty<TLength>;\n  /**\n   * The **`margin-inline-start`** CSS property defines the logical inline start margin of an element, which maps to a physical margin depending on the element's writing mode, directionality, and text orientation. It corresponds to the `margin-top`, `margin-right`, `margin-bottom`, or `margin-left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `0`\n   *\n   * |           Chrome           |         Firefox         |           Safari           | Edge | IE  |\n   * | :------------------------: | :---------------------: | :------------------------: | :--: | :-: |\n   * |           **69**           |         **41**          |          **12.1**          |  No  | No  |\n   * | 2 _(-webkit-margin-start)_ | 3 _(-moz-margin-start)_ | 3 _(-webkit-margin-start)_ |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/margin-inline-start\n   */\n  marginInlineStart?: MarginInlineStartProperty<TLength>;\n  /**\n   * The **`margin-left`** CSS property sets the margin area on the left side of an element. A positive value places it farther from its neighbors, while a negative value places it closer.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **3** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/margin-left\n   */\n  marginLeft?: MarginLeftProperty<TLength>;\n  /**\n   * The **`margin-right`** CSS property sets the margin area on the right side of an element. A positive value places it farther from its neighbors, while a negative value places it closer.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **3** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/margin-right\n   */\n  marginRight?: MarginRightProperty<TLength>;\n  /**\n   * The **`margin-top`** CSS property sets the margin area on the top of an element. A positive value places it farther from its neighbors, while a negative value places it closer.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **3** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/margin-top\n   */\n  marginTop?: MarginTopProperty<TLength>;\n  /**\n   * The **`mask-border-mode`** CSS property specifies the blending mode used in a mask border.\n   *\n   * **Initial value**: `alpha`\n   */\n  maskBorderMode?: MaskBorderModeProperty;\n  /**\n   * The **`mask-border-outset`** CSS property specifies the distance by which an element's mask border is set out from its border box.\n   *\n   * **Initial value**: `0`\n   */\n  maskBorderOutset?: MaskBorderOutsetProperty<TLength>;\n  /**\n   * The **`mask-border-repeat`** CSS property sets how the edge regions of a source image are adjusted to fit the dimensions of an element's mask border.\n   *\n   * **Initial value**: `stretch`\n   */\n  maskBorderRepeat?: MaskBorderRepeatProperty;\n  /**\n   * The **`mask-border-slice`** CSS property divides the image set by `mask-border-source` into regions. These regions are used to form the components of an element's mask border.\n   *\n   * **Initial value**: `0`\n   */\n  maskBorderSlice?: MaskBorderSliceProperty;\n  /**\n   * The **`mask-border-source`** CSS property sets the source image used to create an element's mask border.\n   *\n   * **Initial value**: `none`\n   */\n  maskBorderSource?: MaskBorderSourceProperty;\n  /**\n   * The **`mask-border-width`** CSS property sets the width of an element's mask border.\n   *\n   * **Initial value**: `auto`\n   */\n  maskBorderWidth?: MaskBorderWidthProperty<TLength>;\n  /**\n   * The **`mask-clip`** CSS property determines the area, which is affected by a mask. The painted content of an element must be restricted to this area.\n   *\n   * **Initial value**: `border-box`\n   *\n   * |   Chrome    | Firefox |   Safari    | Edge | IE  |\n   * | :---------: | :-----: | :---------: | :--: | :-: |\n   * | **1** _-x-_ | **53**  | **4** _-x-_ |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/mask-clip\n   */\n  maskClip?: MaskClipProperty;\n  /**\n   * The **`mask-composite`** CSS property represents a compositing operation used on the current mask layer with the mask layers below it.\n   *\n   * **Initial value**: `add`\n   *\n   * | Chrome | Firefox | Safari |  Edge  | IE  |\n   * | :----: | :-----: | :----: | :----: | :-: |\n   * |   No   | **53**  |   No   | **18** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/mask-composite\n   */\n  maskComposite?: MaskCompositeProperty;\n  /**\n   * The **`mask-image`** CSS property sets the image that is used as mask layer for an element.\n   *\n   * **Initial value**: `none`\n   *\n   * |   Chrome    | Firefox |   Safari    |  Edge  | IE  |\n   * | :---------: | :-----: | :---------: | :----: | :-: |\n   * | **1** _-x-_ | **53**  | **4** _-x-_ | **16** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/mask-image\n   */\n  maskImage?: MaskImageProperty;\n  /**\n   * The **`mask-mode`** CSS property sets whether the mask reference defined by `mask-image` is treated as a luminance or alpha mask.\n   *\n   * **Initial value**: `match-source`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **53**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/mask-mode\n   */\n  maskMode?: MaskModeProperty;\n  /**\n   * The **`mask-origin`** CSS property sets the origin of a mask.\n   *\n   * **Initial value**: `border-box`\n   *\n   * |   Chrome    | Firefox |   Safari    | Edge | IE  |\n   * | :---------: | :-----: | :---------: | :--: | :-: |\n   * | **1** _-x-_ | **53**  | **4** _-x-_ |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/mask-origin\n   */\n  maskOrigin?: MaskOriginProperty;\n  /**\n   * The **`mask-position`** CSS property sets the initial position, relative to the mask position layer set by `mask-origin`, for each defined mask image.\n   *\n   * **Initial value**: `center`\n   *\n   * |   Chrome    | Firefox |    Safari     |  Edge  | IE  |\n   * | :---------: | :-----: | :-----------: | :----: | :-: |\n   * | **1** _-x-_ | **53**  | **3.2** _-x-_ | **18** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/mask-position\n   */\n  maskPosition?: MaskPositionProperty<TLength>;\n  /**\n   * The **`mask-repeat`** CSS property sets how mask images are repeated. A mask image can be repeated along the horizontal axis, the vertical axis, both axes, or not repeated at all.\n   *\n   * **Initial value**: `no-repeat`\n   *\n   * |   Chrome    | Firefox |    Safari     |  Edge  | IE  |\n   * | :---------: | :-----: | :-----------: | :----: | :-: |\n   * | **1** _-x-_ | **53**  | **3.2** _-x-_ | **18** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/mask-repeat\n   */\n  maskRepeat?: MaskRepeatProperty;\n  /**\n   * The **`mask-size`** CSS property specifies the sizes of the mask images. The size of the image can be fully or partially constrained in order to preserve its intrinsic ratio.\n   *\n   * **Initial value**: `auto`\n   *\n   * |   Chrome    | Firefox |   Safari    |  Edge  | IE  |\n   * | :---------: | :-----: | :---------: | :----: | :-: |\n   * | **4** _-x-_ | **53**  | **4** _-x-_ | **18** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/mask-size\n   */\n  maskSize?: MaskSizeProperty<TLength>;\n  /**\n   * The **`mask-type`** CSS property sets whether an SVG `<mask>` element is used as a _luminance_ or an _alpha_ mask. It applies to the `<mask>` element itself.\n   *\n   * **Initial value**: `luminance`\n   *\n   * | Chrome | Firefox | Safari  | Edge | IE  |\n   * | :----: | :-----: | :-----: | :--: | :-: |\n   * | **24** | **35**  | **6.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/mask-type\n   */\n  maskType?: MaskTypeProperty;\n  /**\n   * The `**max-block-size**` CSS property specifies the maximum size of an element in the direction opposite that of the writing direction as specified by `writing-mode`. That is, if the writing direction is horizontal, then `max-block-size` is equivalent to `max-height`; if the writing direction is vertical, `max-block-size` is the same as `max-width`.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **57** | **41**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/max-block-size\n   */\n  maxBlockSize?: MaxBlockSizeProperty<TLength>;\n  /**\n   * The **`max-height`** CSS property sets the maximum height of an element. It prevents the used value of the `height` property from becoming larger than the value specified for `max-height`.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari  |  Edge  |  IE   |\n   * | :----: | :-----: | :-----: | :----: | :---: |\n   * | **18** |  **1**  | **1.3** | **12** | **7** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/max-height\n   */\n  maxHeight?: MaxHeightProperty<TLength>;\n  /**\n   * The **`max-inline-size`** CSS property defines the horizontal or vertical maximum size of an element's block depending on its writing mode. It corresponds to the `max-width` or the `max-height` property depending on the value defined for `writing-mode`. If the writing mode is vertically oriented, the value of `max-inline-size` relates to the maximal height of the element, otherwise it relates to the maximal width of the element. It relates to `max-block-size`, which defines the other dimension of the element.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox |   Safari   | Edge | IE  |\n   * | :----: | :-----: | :--------: | :--: | :-: |\n   * | **57** | **41**  |  **12.1**  |  No  | No  |\n   * |        |         | 10.1 _-x-_ |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/max-inline-size\n   */\n  maxInlineSize?: MaxInlineSizeProperty<TLength>;\n  /** **Initial value**: `none` */\n  maxLines?: MaxLinesProperty;\n  /**\n   * The **`max-width`** CSS property sets the maximum width of an element. It prevents the used value of the `width` property from becoming larger than the value specified by `max-width`.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **7** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/max-width\n   */\n  maxWidth?: MaxWidthProperty<TLength>;\n  /**\n   * The **`min-block-size`** CSS property defines the minimum horizontal or vertical size of an element's block, depending on its writing mode. It corresponds to either the `min-width` or the `min-height` property, depending on the value of `writing-mode`.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **57** | **41**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/min-block-size\n   */\n  minBlockSize?: MinBlockSizeProperty<TLength>;\n  /**\n   * The **`min-height`** CSS property sets the minimum height of an element. It prevents the used value of the `height` property from becoming smaller than the value specified for `min-height`.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari  |  Edge  |  IE   |\n   * | :----: | :-----: | :-----: | :----: | :---: |\n   * | **1**  |  **3**  | **1.3** | **12** | **7** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/min-height\n   */\n  minHeight?: MinHeightProperty<TLength>;\n  /**\n   * The **`min-inline-size`** CSS property defines the horizontal or vertical minimal size of an element's block, depending on its writing mode. It corresponds to either the `min-width` or the `min-height` property, depending on the value of `writing-mode`.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **57** | **41**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/min-inline-size\n   */\n  minInlineSize?: MinInlineSizeProperty<TLength>;\n  /**\n   * The **`min-width`** CSS property sets the minimum width of an element. It prevents the used value of the `width` property from becoming smaller than the value specified for `min-width`.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **7** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/min-width\n   */\n  minWidth?: MinWidthProperty<TLength>;\n  /**\n   * The **`mix-blend-mode`** CSS property sets how an element's content should blend with the content of the element's parent and the element's background.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **41** | **32**  | **8**  |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/mix-blend-mode\n   */\n  mixBlendMode?: MixBlendModeProperty;\n  /**\n   * The **`offset-distance`** CSS property specifies a position along an `offset-path`.\n   *\n   * **Initial value**: `0`\n   *\n   * |         Chrome         | Firefox | Safari | Edge | IE  |\n   * | :--------------------: | :-----: | :----: | :--: | :-: |\n   * |         **55**         | **72**  |   No   |  No  | No  |\n   * | 46 _(motion-distance)_ |         |        |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/offset-distance\n   */\n  motionDistance?: OffsetDistanceProperty<TLength>;\n  /**\n   * The **`offset-path`** CSS property specifies a motion path for an element to follow and defines the element's positioning within the parent container or SVG coordinate system.\n   *\n   * **Initial value**: `none`\n   *\n   * |       Chrome       | Firefox | Safari | Edge | IE  |\n   * | :----------------: | :-----: | :----: | :--: | :-: |\n   * |       **55**       | **72**  |   No   |  No  | No  |\n   * | 46 _(motion-path)_ |         |        |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/offset-path\n   */\n  motionPath?: OffsetPathProperty;\n  /**\n   * The **`offset-rotate`** CSS property defines the direction of the element while positioning along the offset path.\n   *\n   * **Initial value**: `auto`\n   *\n   * |         Chrome         | Firefox | Safari | Edge | IE  |\n   * | :--------------------: | :-----: | :----: | :--: | :-: |\n   * |         **56**         | **72**  |   No   |  No  | No  |\n   * | 46 _(motion-rotation)_ |         |        |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/offset-rotate\n   */\n  motionRotation?: OffsetRotateProperty;\n  /**\n   * The **`object-fit`** CSS property sets how the content of a replaced element, such as an `<img>` or `<video>`, should be resized to fit its container.\n   *\n   * **Initial value**: `fill`\n   *\n   * | Chrome | Firefox | Safari |  Edge  | IE  |\n   * | :----: | :-----: | :----: | :----: | :-: |\n   * | **31** | **36**  | **10** | **16** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/object-fit\n   */\n  objectFit?: ObjectFitProperty;\n  /**\n   * The **`object-position`** CSS property specifies the alignment of the selected replaced element's contents within the element's box. Areas of the box which aren't covered by the replaced element's object will show the element's background.\n   *\n   * **Initial value**: `50% 50%`\n   *\n   * | Chrome | Firefox | Safari |  Edge  | IE  |\n   * | :----: | :-----: | :----: | :----: | :-: |\n   * | **31** | **36**  | **10** | **16** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/object-position\n   */\n  objectPosition?: ObjectPositionProperty<TLength>;\n  /**\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **79** | **72**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/offset-anchor\n   */\n  offsetAnchor?: OffsetAnchorProperty<TLength>;\n  /**\n   * The **`offset-distance`** CSS property specifies a position along an `offset-path`.\n   *\n   * **Initial value**: `0`\n   *\n   * |         Chrome         | Firefox | Safari | Edge | IE  |\n   * | :--------------------: | :-----: | :----: | :--: | :-: |\n   * |         **55**         | **72**  |   No   |  No  | No  |\n   * | 46 _(motion-distance)_ |         |        |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/offset-distance\n   */\n  offsetDistance?: OffsetDistanceProperty<TLength>;\n  /**\n   * The **`offset-path`** CSS property specifies a motion path for an element to follow and defines the element's positioning within the parent container or SVG coordinate system.\n   *\n   * **Initial value**: `none`\n   *\n   * |       Chrome       | Firefox | Safari | Edge | IE  |\n   * | :----------------: | :-----: | :----: | :--: | :-: |\n   * |       **55**       | **72**  |   No   |  No  | No  |\n   * | 46 _(motion-path)_ |         |        |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/offset-path\n   */\n  offsetPath?: OffsetPathProperty;\n  /**\n   * The **`offset-rotate`** CSS property defines the direction of the element while positioning along the offset path.\n   *\n   * **Initial value**: `auto`\n   *\n   * |         Chrome         | Firefox | Safari | Edge | IE  |\n   * | :--------------------: | :-----: | :----: | :--: | :-: |\n   * |         **56**         | **72**  |   No   |  No  | No  |\n   * | 46 _(motion-rotation)_ |         |        |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/offset-rotate\n   */\n  offsetRotate?: OffsetRotateProperty;\n  /**\n   * The **`offset-rotate`** CSS property defines the direction of the element while positioning along the offset path.\n   *\n   * **Initial value**: `auto`\n   *\n   * |         Chrome         | Firefox | Safari | Edge | IE  |\n   * | :--------------------: | :-----: | :----: | :--: | :-: |\n   * |         **56**         | **72**  |   No   |  No  | No  |\n   * | 46 _(motion-rotation)_ |         |        |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/offset-rotate\n   */\n  offsetRotation?: OffsetRotateProperty;\n  /**\n   * The **`opacity`** CSS property sets the transparency of an element or the degree to which content behind an element is visible.\n   *\n   * **Initial value**: `1.0`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **2**  | **12** | **9** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/opacity\n   */\n  opacity?: OpacityProperty;\n  /**\n   * The **`order`** CSS property sets the order to lay out an item in a flex or grid container. Items in a container are sorted by ascending `order` value and then by their source code order.\n   *\n   * **Initial value**: `0`\n   *\n   * |  Chrome  | Firefox | Safari  |  Edge  |    IE    |\n   * | :------: | :-----: | :-----: | :----: | :------: |\n   * |  **29**  | **20**  |  **9**  | **12** |  **11**  |\n   * | 21 _-x-_ |         | 7 _-x-_ |        | 10 _-x-_ |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/order\n   */\n  order?: GlobalsNumber;\n  /**\n   * The **`orphans`** CSS property sets the minimum number of lines in a block container that must be shown at the _bottom_ of a page, region, or column.\n   *\n   * **Initial value**: `2`\n   *\n   * | Chrome | Firefox | Safari  |  Edge  |  IE   |\n   * | :----: | :-----: | :-----: | :----: | :---: |\n   * | **25** |   No    | **1.3** | **12** | **8** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/orphans\n   */\n  orphans?: GlobalsNumber;\n  /**\n   * The **`outline-color`** CSS property sets the color of an element's outline.\n   *\n   * **Initial value**: `invert`, for browsers supporting it, `currentColor` for the other\n   *\n   * | Chrome | Firefox | Safari  |  Edge  |  IE   |\n   * | :----: | :-----: | :-----: | :----: | :---: |\n   * | **1**  | **1.5** | **1.2** | **12** | **8** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/outline-color\n   */\n  outlineColor?: OutlineColorProperty;\n  /**\n   * The **`outline-offset`** CSS property sets the amount of space between an outline and the edge or border of an element.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari  |  Edge  | IE  |\n   * | :----: | :-----: | :-----: | :----: | :-: |\n   * | **1**  | **1.5** | **1.2** | **15** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/outline-offset\n   */\n  outlineOffset?: OutlineOffsetProperty<TLength>;\n  /**\n   * The **`outline-style`** CSS property sets the style of an element's outline. An outline is a line that is drawn around an element, outside the `border`.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari  |  Edge  |  IE   |\n   * | :----: | :-----: | :-----: | :----: | :---: |\n   * | **1**  | **1.5** | **1.2** | **12** | **8** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/outline-style\n   */\n  outlineStyle?: OutlineStyleProperty;\n  /**\n   * The **`outline-width`** CSS property sets the thickness of an element's outline. An outline is a line that is drawn around an element, outside the `border`.\n   *\n   * **Initial value**: `medium`\n   *\n   * | Chrome | Firefox | Safari  |  Edge  |  IE   |\n   * | :----: | :-----: | :-----: | :----: | :---: |\n   * | **1**  | **1.5** | **1.2** | **12** | **8** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/outline-width\n   */\n  outlineWidth?: OutlineWidthProperty<TLength>;\n  /**\n   * The **`overflow`** CSS property sets what to do when an element's content is too big to fit in its block formatting context. It is a shorthand for `overflow-x` and `overflow-y`.\n   *\n   * **Initial value**: `visible`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/overflow\n   */\n  overflow?: OverflowProperty;\n  /**\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **56** | **66**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/overflow-anchor\n   */\n  overflowAnchor?: OverflowAnchorProperty;\n  /**\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **69**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/overflow-block\n   */\n  overflowBlock?: OverflowBlockProperty;\n  /**\n   * The **`overflow-clip-box`** CSS property specifies relative to which box the clipping happens when there is an overflow. It is short hand for the `overflow-clip-box-inline` and `overflow-clip-box-block` properties.\n   *\n   * **Initial value**: `padding-box`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **29**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Mozilla/CSS/overflow-clip-box\n   */\n  overflowClipBox?: OverflowClipBoxProperty;\n  /**\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **69**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/overflow-inline\n   */\n  overflowInline?: OverflowInlineProperty;\n  /**\n   * The `**overflow-wrap**` CSS property sets whether the browser should insert line breaks within words to prevent text from overflowing its content box.\n   *\n   * **Initial value**: `normal`\n   *\n   * |     Chrome      |      Firefox      |     Safari      |       Edge       |          IE           |\n   * | :-------------: | :---------------: | :-------------: | :--------------: | :-------------------: |\n   * |     **23**      |      **49**       |     **6.1**     |      **18**      | **5.5** _(word-wrap)_ |\n   * | 1 _(word-wrap)_ | 3.5 _(word-wrap)_ | 1 _(word-wrap)_ | 12 _(word-wrap)_ |                       |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/overflow-wrap\n   */\n  overflowWrap?: OverflowWrapProperty;\n  /**\n   * The **`overflow-x`** CSS property sets what shows when content overflows a block-level element's left and right edges. This may be nothing, a scroll bar, or the overflow content.\n   *\n   * **Initial value**: `visible`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  | **3.5** | **3**  | **12** | **5** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/overflow-x\n   */\n  overflowX?: OverflowXProperty;\n  /**\n   * The **`overflow-y`** CSS property sets what shows when content overflows a block-level element's top and bottom edges. This may be nothing, a scroll bar, or the overflow content.\n   *\n   * **Initial value**: `visible`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  | **1.5** | **3**  | **12** | **5** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/overflow-y\n   */\n  overflowY?: OverflowYProperty;\n  /**\n   * The **`overscroll-behavior`** CSS property sets what a browser does when reaching the boundary of a scrolling area. It's a shorthand for `overscroll-behavior-x` and `overscroll-behavior-y`.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari |  Edge  | IE  |\n   * | :----: | :-----: | :----: | :----: | :-: |\n   * | **63** | **59**  |   No   | **18** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/overscroll-behavior\n   */\n  overscrollBehavior?: OverscrollBehaviorProperty;\n  /**\n   * The **`overscroll-behavior-block`** CSS property sets the browser's behavior when the block direction boundary of a scrolling area is reached.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **77** | **73**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/overscroll-behavior-block\n   */\n  overscrollBehaviorBlock?: OverscrollBehaviorBlockProperty;\n  /**\n   * The **`overscroll-behavior-inline`** CSS property sets the browser's behavior when the inline direction boundary of a scrolling area is reached.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **77** | **73**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/overscroll-behavior-inline\n   */\n  overscrollBehaviorInline?: OverscrollBehaviorInlineProperty;\n  /**\n   * The **`overscroll-behavior-x`** CSS property sets the browser's behavior when the horizontal boundary of a scrolling area is reached.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari |  Edge  | IE  |\n   * | :----: | :-----: | :----: | :----: | :-: |\n   * | **63** | **59**  |   No   | **18** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/overscroll-behavior-x\n   */\n  overscrollBehaviorX?: OverscrollBehaviorXProperty;\n  /**\n   * The **`overscroll-behavior-y`** CSS property sets the browser's behavior when the vertical boundary of a scrolling area is reached.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari |  Edge  | IE  |\n   * | :----: | :-----: | :----: | :----: | :-: |\n   * | **63** | **59**  |   No   | **18** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/overscroll-behavior-y\n   */\n  overscrollBehaviorY?: OverscrollBehaviorYProperty;\n  /**\n   * The **`padding-block`** CSS property defines the logical block start and end padding of an element, which maps to physical padding properties depending on the element's writing mode, directionality, and text orientation.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **66**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/padding-block\n   */\n  paddingBlock?: PaddingBlockProperty<TLength>;\n  /**\n   * The **`padding-block-end`** CSS property defines the logical block end padding of an element, which maps to a physical padding depending on the element's writing mode, directionality, and text orientation. It corresponds to the `padding-top`, `padding-right`, `padding-bottom`, or `padding-left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **69** | **41**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/padding-block-end\n   */\n  paddingBlockEnd?: PaddingBlockEndProperty<TLength>;\n  /**\n   * The **`padding-block-start`** CSS property defines the logical block start padding of an element, which maps to a physical padding depending on the element's writing mode, directionality, and text orientation. It corresponds to the `padding-top`, `padding-right`, `padding-bottom`, or `padding-left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **69** | **41**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/padding-block-start\n   */\n  paddingBlockStart?: PaddingBlockStartProperty<TLength>;\n  /**\n   * The **`padding-bottom`** CSS property sets the height of the padding area on the bottom of an element.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/padding-bottom\n   */\n  paddingBottom?: PaddingBottomProperty<TLength>;\n  /**\n   * The **`padding-inline`** CSS property defines the logical inline start and end padding of an element, which maps to physical padding properties depending on the element's writing mode, directionality, and text orientation.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **66**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/padding-inline\n   */\n  paddingInline?: PaddingInlineProperty<TLength>;\n  /**\n   * The **`padding-inline-end`** CSS property defines the logical inline end padding of an element, which maps to a physical padding depending on the element's writing mode, directionality, and text orientation. It corresponds to the `padding-top`, `padding-right`, `padding-bottom`, or `padding-left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `0`\n   *\n   * |          Chrome           |        Firefox         |          Safari           | Edge | IE  |\n   * | :-----------------------: | :--------------------: | :-----------------------: | :--: | :-: |\n   * |          **69**           |         **41**         |         **12.1**          |  No  | No  |\n   * | 2 _(-webkit-padding-end)_ | 3 _(-moz-padding-end)_ | 3 _(-webkit-padding-end)_ |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/padding-inline-end\n   */\n  paddingInlineEnd?: PaddingInlineEndProperty<TLength>;\n  /**\n   * The **`padding-inline-start`** CSS property defines the logical inline start padding of an element, which maps to a physical padding depending on the element's writing mode, directionality, and text orientation. It corresponds to the `padding-top`, `padding-right`, `padding-bottom`, or `padding-left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `0`\n   *\n   * |           Chrome            |         Firefox          |           Safari            | Edge | IE  |\n   * | :-------------------------: | :----------------------: | :-------------------------: | :--: | :-: |\n   * |           **69**            |          **41**          |          **12.1**           |  No  | No  |\n   * | 2 _(-webkit-padding-start)_ | 3 _(-moz-padding-start)_ | 3 _(-webkit-padding-start)_ |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/padding-inline-start\n   */\n  paddingInlineStart?: PaddingInlineStartProperty<TLength>;\n  /**\n   * The **`padding-left`** CSS property sets the width of the padding area on the left side of an element.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/padding-left\n   */\n  paddingLeft?: PaddingLeftProperty<TLength>;\n  /**\n   * The **`padding-right`** CSS property sets the width of the padding area on the right side of an element.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/padding-right\n   */\n  paddingRight?: PaddingRightProperty<TLength>;\n  /**\n   * The **`padding-top`** padding area on the top of an element.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/padding-top\n   */\n  paddingTop?: PaddingTopProperty<TLength>;\n  /**\n   * The **`page-break-after`** CSS property adjusts page breaks _after_ the current element.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari  |  Edge  |  IE   |\n   * | :----: | :-----: | :-----: | :----: | :---: |\n   * | **1**  |  **1**  | **1.2** | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/page-break-after\n   */\n  pageBreakAfter?: PageBreakAfterProperty;\n  /**\n   * The **`page-break-before`** CSS property adjusts page breaks _before_ the current element.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari  |  Edge  |  IE   |\n   * | :----: | :-----: | :-----: | :----: | :---: |\n   * | **1**  |  **1**  | **1.2** | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/page-break-before\n   */\n  pageBreakBefore?: PageBreakBeforeProperty;\n  /**\n   * The **`page-break-inside`** CSS property adjusts page breaks _inside_ the current element.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari  |  Edge  |  IE   |\n   * | :----: | :-----: | :-----: | :----: | :---: |\n   * | **1**  | **19**  | **1.3** | **12** | **8** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/page-break-inside\n   */\n  pageBreakInside?: PageBreakInsideProperty;\n  /**\n   * The **`paint-order`** CSS property lets you control the order in which the fill and stroke (and painting markers) of text content and shapes are drawn.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari |  Edge  | IE  |\n   * | :----: | :-----: | :----: | :----: | :-: |\n   * | **35** | **60**  | **8**  | **17** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/paint-order\n   */\n  paintOrder?: PaintOrderProperty;\n  /**\n   * The **`perspective`** CSS property determines the distance between the z=0 plane and the user in order to give a 3D-positioned element some perspective. Each 3D element with z>0 becomes larger; each 3D-element with z<0 becomes smaller. The strength of the effect is determined by the value of this property.\n   *\n   * **Initial value**: `none`\n   *\n   * |  Chrome  | Firefox  | Safari  |  Edge  |   IE   |\n   * | :------: | :------: | :-----: | :----: | :----: |\n   * |  **36**  |  **16**  |  **9**  | **12** | **10** |\n   * | 12 _-x-_ | 10 _-x-_ | 4 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/perspective\n   */\n  perspective?: PerspectiveProperty<TLength>;\n  /**\n   * The **`perspective-origin`** CSS property determines the position at which the viewer is looking. It is used as the _vanishing point_ by the `perspective` property.\n   *\n   * **Initial value**: `50% 50%`\n   *\n   * |  Chrome  | Firefox  | Safari  |  Edge  |   IE   |\n   * | :------: | :------: | :-----: | :----: | :----: |\n   * |  **36**  |  **16**  |  **9**  | **12** | **10** |\n   * | 12 _-x-_ | 10 _-x-_ | 4 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/perspective-origin\n   */\n  perspectiveOrigin?: PerspectiveOriginProperty<TLength>;\n  /**\n   * The `**place-content**` CSS property is a shorthand for `align-content` and `justify-content`. It can be used in any layout method which utilizes both of these alignment values.\n   *\n   * **Initial value**: `normal`\n   *\n   * ---\n   *\n   * _Supported in Flex Layout_\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **59** | **45**  | **9**  |  No  | No  |\n   *\n   * ---\n   *\n   * _Supported in Grid Layout_\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **59** | **53**  | **11** |  No  | No  |\n   *\n   * ---\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/place-content\n   */\n  placeContent?: PlaceContentProperty;\n  /**\n   * The **`pointer-events`** CSS property sets under what circumstances (if any) a particular graphic element can become the target of mouse events.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE   |\n   * | :----: | :-----: | :----: | :----: | :----: |\n   * | **1**  | **1.5** | **4**  | **12** | **11** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/pointer-events\n   */\n  pointerEvents?: PointerEventsProperty;\n  /**\n   * The **`position`** CSS property sets how an element is positioned in a document. The `top`, `right`, `bottom`, and `left` properties determine the final location of positioned elements.\n   *\n   * **Initial value**: `static`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/position\n   */\n  position?: PositionProperty;\n  /**\n   * The **`quotes`** CSS property sets how quotation marks appear.\n   *\n   * **Initial value**: depends on user agent\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **11** | **1.5** | **9**  | **12** | **8** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/quotes\n   */\n  quotes?: QuotesProperty;\n  /**\n   * The **`resize`** CSS property sets whether an element is resizable, and if so, in which directions.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **1**  |  **4**  | **3**  |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/resize\n   */\n  resize?: ResizeProperty;\n  /**\n   * The **`right`** CSS property participates in specifying the horizontal position of a _positioned element_. It has no effect on non-positioned elements.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE    |\n   * | :----: | :-----: | :----: | :----: | :-----: |\n   * | **1**  |  **1**  | **1**  | **12** | **5.5** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/right\n   */\n  right?: RightProperty<TLength>;\n  /**\n   * The **`rotate`** CSS property allows you to specify rotation transforms individually and independantly of the `transform` property. This maps better to typical user interface usage, and saves having to remember the exact order of transform functions to specify in the `transform` value.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **72**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/rotate\n   */\n  rotate?: RotateProperty;\n  /**\n   * The **`row-gap`** CSS property sets the size of the gap (gutter) between an element's grid rows.\n   *\n   * **Initial value**: `normal`\n   *\n   * ---\n   *\n   * _Supported in Flex Layout_\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **63**  |   No   |  No  | No  |\n   *\n   * ---\n   *\n   * _Supported in Grid Layout_\n   *\n   * |       Chrome        |       Firefox       |          Safari           |  Edge  | IE  |\n   * | :-----------------: | :-----------------: | :-----------------------: | :----: | :-: |\n   * |       **66**        |       **61**        | **10.1** _(grid-row-gap)_ | **16** | No  |\n   * | 57 _(grid-row-gap)_ | 52 _(grid-row-gap)_ |                           |        |     |\n   *\n   * ---\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/row-gap\n   */\n  rowGap?: RowGapProperty<TLength>;\n  /**\n   * The `**ruby-align**` CSS property defines the distribution of the different ruby elements over the base.\n   *\n   * **Initial value**: `space-around`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **38**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/ruby-align\n   */\n  rubyAlign?: RubyAlignProperty;\n  /** **Initial value**: `separate` */\n  rubyMerge?: RubyMergeProperty;\n  /**\n   * The `**ruby-position**` CSS property defines the position of a ruby element relatives to its base element. It can be position over the element (`over`), under it (`under`), or between the characters, on their right side (`inter-character`).\n   *\n   * **Initial value**: `over`\n   *\n   * | Chrome | Firefox | Safari |  Edge  | IE  |\n   * | :----: | :-----: | :----: | :----: | :-: |\n   * |   No   | **38**  |   No   | **12** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/ruby-position\n   */\n  rubyPosition?: RubyPositionProperty;\n  /**\n   * The **`scale`** CSS property allows you to specify scale transforms individually and independantly of the `transform` property. This maps better to typical user interface usage, and saves having to remember the exact order of transform functions to specify in the `transform` value.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **72**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scale\n   */\n  scale?: ScaleProperty;\n  /**\n   * The **`scroll-behavior`** CSS property sets the behavior for a scrolling box when scrolling is triggered by the navigation or CSSOM scrolling APIs.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **61** | **36**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-behavior\n   */\n  scrollBehavior?: ScrollBehaviorProperty;\n  /**\n   * The **`scroll-margin`** property is a shorthand property which sets all of the `scroll-margin` longhands, assigning values much like the `margin` property does for the `margin-*` longhands.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **68**  | **11** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-margin\n   */\n  scrollMargin?: ScrollMarginProperty<TLength>;\n  /**\n   * The `scroll-margin-block` property is a shorthand property which sets the scroll-margin longhands in the block dimension.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **68**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-margin-block\n   */\n  scrollMarginBlock?: ScrollMarginBlockProperty<TLength>;\n  /**\n   * The `scroll-margin-block-end` property defines the margin of the scroll snap area at the end of the block dimension that is used for snapping this box to the snapport. The scroll snap area is determined by taking the transformed border box, finding its rectangular bounding box (axis-aligned in the scroll container’s coordinate space), then adding the specified outsets.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **68**  | **11** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-margin-block-end\n   */\n  scrollMarginBlockEnd?: ScrollMarginBlockEndProperty<TLength>;\n  /**\n   * The `scroll-margin-block-start` property defines the margin of the scroll snap area at the start of the block dimension that is used for snapping this box to the snapport. The scroll snap area is determined by taking the transformed border box, finding its rectangular bounding box (axis-aligned in the scroll container’s coordinate space), then adding the specified outsets.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **68**  | **11** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-margin-block-start\n   */\n  scrollMarginBlockStart?: ScrollMarginBlockStartProperty<TLength>;\n  /**\n   * The `scroll-margin-bottom` property defines the bottom margin of the scroll snap area that is used for snapping this box to the snapport. The scroll snap area is determined by taking the transformed border box, finding its rectangular bounding box (axis-aligned in the scroll container’s coordinate space), then adding the specified outsets.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **68**  | **11** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-margin-bottom\n   */\n  scrollMarginBottom?: ScrollMarginBottomProperty<TLength>;\n  /**\n   * The `scroll-margin-inline` property is a shorthand property which sets the scroll-margin longhands in the inline dimension.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **68**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-margin-inline\n   */\n  scrollMarginInline?: ScrollMarginInlineProperty<TLength>;\n  /**\n   * The `scroll-margin-inline-end` property defines the margin of the scroll snap area at the end of the inline dimension that is used for snapping this box to the snapport. The scroll snap area is determined by taking the transformed border box, finding its rectangular bounding box (axis-aligned in the scroll container’s coordinate space), then adding the specified outsets.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **68**  | **11** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-margin-inline-end\n   */\n  scrollMarginInlineEnd?: ScrollMarginInlineEndProperty<TLength>;\n  /**\n   * The `scroll-margin-inline-start` property defines the margin of the scroll snap area at the start of the inline dimension that is used for snapping this box to the snapport. The scroll snap area is determined by taking the transformed border box, finding its rectangular bounding box (axis-aligned in the scroll container’s coordinate space), then adding the specified outsets.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **68**  | **11** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-margin-inline-start\n   */\n  scrollMarginInlineStart?: ScrollMarginInlineStartProperty<TLength>;\n  /**\n   * The `scroll-margin-left` property defines the left margin of the scroll snap area that is used for snapping this box to the snapport. The scroll snap area is determined by taking the transformed border box, finding its rectangular bounding box (axis-aligned in the scroll container’s coordinate space), then adding the specified outsets.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **68**  | **11** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-margin-left\n   */\n  scrollMarginLeft?: ScrollMarginLeftProperty<TLength>;\n  /**\n   * The `scroll-margin-right` property defines the right margin of the scroll snap area that is used for snapping this box to the snapport. The scroll snap area is determined by taking the transformed border box, finding its rectangular bounding box (axis-aligned in the scroll container’s coordinate space), then adding the specified outsets.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **68**  | **11** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-margin-right\n   */\n  scrollMarginRight?: ScrollMarginRightProperty<TLength>;\n  /**\n   * The `scroll-margin-top` property defines the top margin of the scroll snap area that is used for snapping this box to the snapport. The scroll snap area is determined by taking the transformed border box, finding its rectangular bounding box (axis-aligned in the scroll container’s coordinate space), then adding the specified outsets.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **68**  | **11** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-margin-top\n   */\n  scrollMarginTop?: ScrollMarginTopProperty<TLength>;\n  /**\n * The scroll-padding property is a shorthand property which sets all of the scroll-padding longhands, assigning values much like the padding property does for the padding-\\* longhands.  \n  \nThe scroll-padding properties define offsets for the optimal viewing region of the scrollport: the region used as the target region for placing things in view of the user. This allows the author to exclude regions of the scrollport that are obscured by other content (such as fixed-positioned toolbars or sidebars) or simply to put more breathing room between a targetted element and the edges of the scrollport.\n * \n * **Initial value**: `auto`\n * \n * | Chrome | Firefox | Safari | Edge | IE  |\n * | :----: | :-----: | :----: | :--: | :-: |\n * | **69** | **68**  | **11** |  No  | No  |\n * \n * @see https://developer.mozilla.org/docs/Web/CSS/scroll-padding\n */\n  scrollPadding?: ScrollPaddingProperty<TLength>;\n  /**\n * The `scroll-padding-block` property is a shorthand property which sets the scroll-padding longhands for the block dimension.  \n  \nThe scroll-padding properties define offsets for the optimal viewing region of the scrollport: the region used as the target region for placing things in view of the user. This allows the author to exclude regions of the scrollport that are obscured by other content (such as fixed-positioned toolbars or sidebars) or simply to put more breathing room between a targetted element and the edges of the scrollport.\n * \n * **Initial value**: `auto`\n * \n * | Chrome | Firefox | Safari | Edge | IE  |\n * | :----: | :-----: | :----: | :--: | :-: |\n * | **69** | **68**  |   No   |  No  | No  |\n * \n * @see https://developer.mozilla.org/docs/Web/CSS/scroll-padding-block\n */\n  scrollPaddingBlock?: ScrollPaddingBlockProperty<TLength>;\n  /**\n   * The `scroll-padding-block-end` property defines offsets for the end edge in the block dimension of the optimal viewing region of the scrollport: the region used as the target region for placing things in view of the user. This allows the author to exclude regions of the scrollport that are obscured by other content (such as fixed-positioned toolbars or sidebars) or simply to put more breathing room between a targetted element and the edges of the scrollport.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **68**  | **11** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-padding-block-end\n   */\n  scrollPaddingBlockEnd?: ScrollPaddingBlockEndProperty<TLength>;\n  /**\n   * The `scroll-padding-block-start` property defines offsets for the start edge in the block dimension of the optimal viewing region of the scrollport: the region used as the target region for placing things in view of the user. This allows the author to exclude regions of the scrollport that are obscured by other content (such as fixed-positioned toolbars or sidebars) or simply to put more breathing room between a targetted element and the edges of the scrollport.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **68**  | **11** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-padding-block-start\n   */\n  scrollPaddingBlockStart?: ScrollPaddingBlockStartProperty<TLength>;\n  /**\n   * The `scroll-padding-bottom` property defines offsets for the bottom of the optimal viewing region of the scrollport: the region used as the target region for placing things in view of the user. This allows the author to exclude regions of the scrollport that are obscured by other content (such as fixed-positioned toolbars or sidebars) or simply to put more breathing room between a targetted element and the edges of the scrollport.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **68**  | **11** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-padding-bottom\n   */\n  scrollPaddingBottom?: ScrollPaddingBottomProperty<TLength>;\n  /**\n * The `scroll-padding-inline` property is a shorthand property which sets the scroll-padding longhands for the inline dimension.  \n  \nThe scroll-padding properties define offsets for the optimal viewing region of the scrollport: the region used as the target region for placing things in view of the user. This allows the author to exclude regions of the scrollport that are obscured by other content (such as fixed-positioned toolbars or sidebars) or simply to put more breathing room between a targetted element and the edges of the scrollport.\n * \n * **Initial value**: `auto`\n * \n * | Chrome | Firefox | Safari | Edge | IE  |\n * | :----: | :-----: | :----: | :--: | :-: |\n * | **69** | **68**  |   No   |  No  | No  |\n * \n * @see https://developer.mozilla.org/docs/Web/CSS/scroll-padding-inline\n */\n  scrollPaddingInline?: ScrollPaddingInlineProperty<TLength>;\n  /**\n   * The `scroll-padding-inline-end` property defines offsets for the end edge in the inline dimension of the optimal viewing region of the scrollport: the region used as the target region for placing things in view of the user. This allows the author to exclude regions of the scrollport that are obscured by other content (such as fixed-positioned toolbars or sidebars) or simply to put more breathing room between a targetted element and the edges of the scrollport.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **68**  | **11** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-padding-inline-end\n   */\n  scrollPaddingInlineEnd?: ScrollPaddingInlineEndProperty<TLength>;\n  /**\n   * The `scroll-padding-inline-start` property defines offsets for the start edge in the inline dimension of the optimal viewing region of the scrollport: the region used as the target region for placing things in view of the user. This allows the author to exclude regions of the scrollport that are obscured by other content (such as fixed-positioned toolbars or sidebars) or simply to put more breathing room between a targetted element and the edges of the scrollport.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **68**  | **11** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-padding-inline-start\n   */\n  scrollPaddingInlineStart?: ScrollPaddingInlineStartProperty<TLength>;\n  /**\n   * The `scroll-padding-left` property defines offsets for the left of the optimal viewing region of the scrollport: the region used as the target region for placing things in view of the user. This allows the author to exclude regions of the scrollport that are obscured by other content (such as fixed-positioned toolbars or sidebars) or simply to put more breathing room between a targetted element and the edges of the scrollport.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **68**  | **11** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-padding-left\n   */\n  scrollPaddingLeft?: ScrollPaddingLeftProperty<TLength>;\n  /**\n   * The `scroll-padding-right` property defines offsets for the right of the optimal viewing region of the scrollport: the region used as the target region for placing things in view of the user. This allows the author to exclude regions of the scrollport that are obscured by other content (such as fixed-positioned toolbars or sidebars) or simply to put more breathing room between a targetted element and the edges of the scrollport.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **68**  | **11** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-padding-right\n   */\n  scrollPaddingRight?: ScrollPaddingRightProperty<TLength>;\n  /**\n   * The `scroll-padding-top` property defines offsets for the top of the optimal viewing region of the scrollport: the region used as the target region for placing things in view of the user. This allows the author to exclude regions of the scrollport that are obscured by other content (such as fixed-positioned toolbars or sidebars) or simply to put more breathing room between a targetted element and the edges of the scrollport.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **68**  | **11** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-padding-top\n   */\n  scrollPaddingTop?: ScrollPaddingTopProperty<TLength>;\n  /**\n   * The `scroll-snap-align` property specifies the box’s snap position as an alignment of its snap area (as the alignment subject) within its snap container’s snapport (as the alignment container). The two values specify the snapping alignment in the block axis and inline axis, respectively. If only one value is specified, the second value defaults to the same value.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **68**  | **11** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-snap-align\n   */\n  scrollSnapAlign?: ScrollSnapAlignProperty;\n  /**\n   * The **`scroll-snap-stop`** CSS property defines whether the scroll container is allowed to \"pass over\" possible snap positions.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **75** |   No    |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-snap-stop\n   */\n  scrollSnapStop?: ScrollSnapStopProperty;\n  /**\n   * The **`scroll-snap-type`** CSS property sets how strictly snap points are enforced on the scroll container in case there is one.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari  |     Edge     |      IE      |\n   * | :----: | :-----: | :-----: | :----------: | :----------: |\n   * | **69** |  39-68  | **11**  | **12** _-x-_ | **10** _-x-_ |\n   * |        |         | 9 _-x-_ |              |              |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-snap-type\n   */\n  scrollSnapType?: ScrollSnapTypeProperty;\n  /**\n   * The **`scrollbar-color`** CSS property sets the color of the scrollbar track and thumb.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **64**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scrollbar-color\n   */\n  scrollbarColor?: ScrollbarColorProperty;\n  /**\n   * The `scrollbar-width` property allows the author to set the maximum thickness of an element’s scrollbars when they are shown.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **64**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scrollbar-width\n   */\n  scrollbarWidth?: ScrollbarWidthProperty;\n  /**\n   * The **`shape-image-threshold`** CSS property sets the alpha channel threshold used to extract the shape using an image as the value for `shape-outside`.\n   *\n   * **Initial value**: `0.0`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **37** | **62**  | **10.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/shape-image-threshold\n   */\n  shapeImageThreshold?: ShapeImageThresholdProperty;\n  /**\n   * The **`shape-margin`** CSS property sets a margin for a CSS shape created using `shape-outside`.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox |     Safari     | Edge | IE  |\n   * | :----: | :-----: | :------------: | :--: | :-: |\n   * | **37** | **62**  | **10.1** _-x-_ |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/shape-margin\n   */\n  shapeMargin?: ShapeMarginProperty<TLength>;\n  /**\n   * The **`shape-outside`** CSS property defines a shape—which may be non-rectangular—around which adjacent inline content should wrap. By default, inline content wraps around its margin box; `shape-outside` provides a way to customize this wrapping, making it possible to wrap text around complex objects rather than simple boxes.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **37** | **62**  | **10.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/shape-outside\n   */\n  shapeOutside?: ShapeOutsideProperty;\n  /**\n   * The **`tab-size`** CSS property is used to customize the width of a tab (`U+0009`) character.\n   *\n   * **Initial value**: `8`\n   *\n   * | Chrome |   Firefox   | Safari  | Edge | IE  |\n   * | :----: | :---------: | :-----: | :--: | :-: |\n   * | **21** | **4** _-x-_ | **6.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/tab-size\n   */\n  tabSize?: TabSizeProperty<TLength>;\n  /**\n   * The **`table-layout`** CSS property sets the algorithm used to lay out `<table>` cells, rows, and columns.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **14** |  **1**  | **1**  | **12** | **5** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/table-layout\n   */\n  tableLayout?: TableLayoutProperty;\n  /**\n   * The **`text-align`** CSS property sets the horizontal alignment of an inline or table-cell box. This means it works like `vertical-align` but in the horizontal direction.\n   *\n   * **Initial value**: `start`, or a nameless value that acts as `left` if _direction_ is `ltr`, `right` if _direction_ is `rtl` if `start` is not supported by the browser.\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **3** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-align\n   */\n  textAlign?: TextAlignProperty;\n  /**\n   * The **`text-align-last`** CSS property sets how the last line of a block or a line, right before a forced line break, is aligned.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE    |\n   * | :----: | :-----: | :----: | :----: | :-----: |\n   * | **47** | **49**  |   No   | **12** | **5.5** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-align-last\n   */\n  textAlignLast?: TextAlignLastProperty;\n  /**\n   * The **`text-combine-upright`** CSS property sets the combination of characters into the space of a single character. If the combined text is wider than 1em, the user agent must fit the contents within 1em. The resulting composition is treated as a single upright glyph for layout and decoration. This property only has an effect in vertical writing modes.\n   *\n   * **Initial value**: `none`\n   *\n   * |           Chrome           | Firefox |              Safari              |                  Edge                  |                   IE                   |\n   * | :------------------------: | :-----: | :------------------------------: | :------------------------------------: | :------------------------------------: |\n   * |           **48**           | **48**  | **5.1** _(-webkit-text-combine)_ | **12** _(-ms-text-combine-horizontal)_ | **11** _(-ms-text-combine-horizontal)_ |\n   * | 9 _(-webkit-text-combine)_ |         |                                  |                                        |                                        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-combine-upright\n   */\n  textCombineUpright?: TextCombineUprightProperty;\n  /**\n   * The **`text-decoration-color`** CSS property sets the color of decorations added to text by `text-decoration-line`.\n   *\n   * **Initial value**: `currentcolor`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **57** | **36**  | **12.1** |  No  | No  |\n   * |        |         | 8 _-x-_  |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-decoration-color\n   */\n  textDecorationColor?: TextDecorationColorProperty;\n  /**\n   * The **`text-decoration-line`** CSS property sets the kind of decoration that is used on text in an element, such as an underline or overline.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **57** | **36**  | **12.1** |  No  | No  |\n   * |        |         | 8 _-x-_  |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-decoration-line\n   */\n  textDecorationLine?: TextDecorationLineProperty;\n  /**\n   * The **`text-decoration-skip`** CSS property sets what parts of an element’s content any text decoration affecting the element must skip over. It controls all text decoration lines drawn by the element and also any text decoration lines drawn by its ancestors.\n   *\n   * **Initial value**: `objects`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | 57-64  |   No    | **12.1** |  No  | No  |\n   * |        |         | 8 _-x-_  |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-decoration-skip\n   */\n  textDecorationSkip?: TextDecorationSkipProperty;\n  /**\n   * The **`text-decoration-skip-ink`** CSS property specifies how overlines and underlines are drawn when they pass over glyph ascenders and descenders.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **64** | **70**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-decoration-skip-ink\n   */\n  textDecorationSkipInk?: TextDecorationSkipInkProperty;\n  /**\n   * The **`text-decoration-style`** CSS property sets the style of the lines specified by `text-decoration-line`. The style applies to all lines that are set with `text-decoration-line`.\n   *\n   * **Initial value**: `solid`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **57** | **36**  | **12.1** |  No  | No  |\n   * |        |         | 8 _-x-_  |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-decoration-style\n   */\n  textDecorationStyle?: TextDecorationStyleProperty;\n  /**\n   * The **`text-decoration-thickness`** CSS property sets the thickness, or width, of the decoration line that is used on text in an element, such as a line-through, underline, or overline.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * |   No   | **70**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-decoration-thickness\n   */\n  textDecorationThickness?: TextDecorationThicknessProperty<TLength>;\n  /**\n   * The **`text-decoration-thickness`** CSS property sets the thickness, or width, of the decoration line that is used on text in an element, such as a line-through, underline, or overline.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * |   No   | **70**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-decoration-thickness\n   */\n  textDecorationWidth?: TextDecorationThicknessProperty<TLength>;\n  /**\n   * The **`text-emphasis-color`** CSS property sets the color of emphasis marks. This value can also be set using the `text-emphasis` shorthand.\n   *\n   * **Initial value**: `currentcolor`\n   *\n   * | Chrome | Firefox | Safari  | Edge | IE  |\n   * | :----: | :-----: | :-----: | :--: | :-: |\n   * | **25** | **46**  | **6.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-emphasis-color\n   */\n  textEmphasisColor?: TextEmphasisColorProperty;\n  /**\n   * The **`text-emphasis-position`** CSS property sets where emphasis marks are drawn. Like ruby text, if there isn't enough room for emphasis marks, the line height is increased.\n   *\n   * **Initial value**: `over right`\n   *\n   * | Chrome | Firefox | Safari  | Edge | IE  |\n   * | :----: | :-----: | :-----: | :--: | :-: |\n   * | **25** | **46**  | **6.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-emphasis-position\n   */\n  textEmphasisPosition?: GlobalsString;\n  /**\n   * The **`text-emphasis-style`** CSS property sets the appearance of emphasis marks. It can also be set, and reset, using the `text-emphasis` shorthand.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari  | Edge | IE  |\n   * | :----: | :-----: | :-----: | :--: | :-: |\n   * | **25** | **46**  | **6.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-emphasis-style\n   */\n  textEmphasisStyle?: TextEmphasisStyleProperty;\n  /**\n   * The **`text-indent`** CSS property sets the length of empty space (indentation) that is put before lines of text in a block.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **3** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-indent\n   */\n  textIndent?: TextIndentProperty<TLength>;\n  /**\n   * The **`text-justify`** CSS property sets what type of justification should be applied to text when `text-align``: justify;` is set on an element.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE   |\n   * | :----: | :-----: | :----: | :----: | :----: |\n   * |  n/a   | **55**  |   No   | **12** | **11** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-justify\n   */\n  textJustify?: TextJustifyProperty;\n  /**\n   * The **`text-orientation`** CSS property sets the orientation of the text characters in a line. It only affects text in vertical mode (when `writing-mode` is not `horizontal-tb`). It is useful for controlling the display of languages that use vertical script, and also for making vertical table headers.\n   *\n   * **Initial value**: `mixed`\n   *\n   * |  Chrome  | Firefox |    Safari     | Edge | IE  |\n   * | :------: | :-----: | :-----------: | :--: | :-: |\n   * |  **48**  | **41**  | **5.1** _-x-_ |  No  | No  |\n   * | 11 _-x-_ |         |               |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-orientation\n   */\n  textOrientation?: TextOrientationProperty;\n  /**\n   * The **`text-overflow`** CSS property sets how hidden overflow content is signaled to users. It can be clipped, display an ellipsis ('`…`'), or display a custom string.\n   *\n   * **Initial value**: `clip`\n   *\n   * | Chrome | Firefox | Safari  |  Edge  |  IE   |\n   * | :----: | :-----: | :-----: | :----: | :---: |\n   * | **1**  |  **7**  | **1.3** | **12** | **6** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-overflow\n   */\n  textOverflow?: TextOverflowProperty;\n  /**\n   * The **`text-rendering`** CSS property provides information to the rendering engine about what to optimize for when rendering text.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **4**  |  **1**  | **5**  |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-rendering\n   */\n  textRendering?: TextRenderingProperty;\n  /**\n   * The **`text-shadow`** CSS property adds shadows to text. It accepts a comma-separated list of shadows to be applied to the text and any of its `decorations`. Each shadow is described by some combination of X and Y offsets from the element, blur radius, and color.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari  |  Edge  |   IE   |\n   * | :----: | :-----: | :-----: | :----: | :----: |\n   * | **2**  | **3.5** | **1.1** | **12** | **10** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-shadow\n   */\n  textShadow?: TextShadowProperty;\n  /**\n   * The **`text-size-adjust`** CSS property controls the text inflation algorithm used on some smartphones and tablets. Other browsers will ignore this property.\n   *\n   * **Initial value**: `auto` for smartphone browsers supporting inflation, `none` in other cases (and then not modifiable).\n   *\n   * | Chrome | Firefox | Safari |     Edge     | IE  |\n   * | :----: | :-----: | :----: | :----------: | :-: |\n   * | **54** |   No    |   No   | **12** _-x-_ | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-size-adjust\n   */\n  textSizeAdjust?: TextSizeAdjustProperty;\n  /**\n   * The **`text-transform`** CSS property specifies how to capitalize an element's text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized. It also can help improve legibility for ruby\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-transform\n   */\n  textTransform?: TextTransformProperty;\n  /**\n   * The **`text-underline-offset`** CSS property sets the offset distance of an underline text decoration line (applied using `text-decoration`) from its original position.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * |   No   | **70**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-underline-offset\n   */\n  textUnderlineOffset?: TextUnderlineOffsetProperty<TLength>;\n  /**\n   * The **`text-underline-position`** CSS property specifies the position of the underline which is set using the `text-decoration` property's `underline` value.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **33** |   No    |   No   | **12** | **6** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-underline-position\n   */\n  textUnderlinePosition?: TextUnderlinePositionProperty;\n  /**\n   * The **`top`** CSS property participates in specifying the vertical position of a _positioned element_. It has no effect on non-positioned elements.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **5** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/top\n   */\n  top?: TopProperty<TLength>;\n  /**\n   * The **`touch-action`** CSS property sets how a region can be manipulated by a touchscreen user (for example, by zooming features built into the browser).\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |    IE    |\n   * | :----: | :-----: | :----: | :----: | :------: |\n   * | **36** | **52**  | **13** | **12** |  **11**  |\n   * |        |         |        |        | 10 _-x-_ |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/touch-action\n   */\n  touchAction?: TouchActionProperty;\n  /**\n   * The **`transform`** CSS property lets you rotate, scale, skew, or translate an element. It modifies the coordinate space of the CSS visual formatting model.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome  | Firefox |  Safari   |  Edge  |   IE    |\n   * | :-----: | :-----: | :-------: | :----: | :-----: |\n   * | **36**  | **16**  |   **9**   | **12** | **10**  |\n   * | 1 _-x-_ |         | 3.1 _-x-_ |        | 9 _-x-_ |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/transform\n   */\n  transform?: TransformProperty;\n  /**\n   * The **`transform-box`** CSS property defines the layout box to which the `transform` and `transform-origin` properties relate.\n   *\n   * **Initial value**: `border-box `\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **64** | **55**  | **11** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/transform-box\n   */\n  transformBox?: TransformBoxProperty;\n  /**\n   * The **`transform-origin`** CSS property sets the origin for an element's transformations.\n   *\n   * **Initial value**: `50% 50% 0`\n   *\n   * | Chrome  |  Firefox  | Safari  |  Edge  |   IE    |\n   * | :-----: | :-------: | :-----: | :----: | :-----: |\n   * | **36**  |  **16**   |  **9**  | **12** | **10**  |\n   * | 1 _-x-_ | 3.5 _-x-_ | 2 _-x-_ |        | 9 _-x-_ |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/transform-origin\n   */\n  transformOrigin?: TransformOriginProperty<TLength>;\n  /**\n   * The **`transform-style`** CSS property sets whether children of an element are positioned in the 3D space or are flattened in the plane of the element.\n   *\n   * **Initial value**: `flat`\n   *\n   * |  Chrome  | Firefox  | Safari  |  Edge  | IE  |\n   * | :------: | :------: | :-----: | :----: | :-: |\n   * |  **36**  |  **16**  |  **9**  | **12** | No  |\n   * | 12 _-x-_ | 10 _-x-_ | 4 _-x-_ |        |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/transform-style\n   */\n  transformStyle?: TransformStyleProperty;\n  /**\n   * The **`transition-delay`** CSS property specifies the duration to wait before starting a property's transition effect when its value changes.\n   *\n   * **Initial value**: `0s`\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |\n   * | :-----: | :-----: | :-----: | :----: | :----: |\n   * | **26**  | **16**  |  **9**  | **12** | **10** |\n   * | 1 _-x-_ | 4 _-x-_ | 4 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/transition-delay\n   */\n  transitionDelay?: GlobalsString;\n  /**\n   * The **`transition-duration`** CSS property sets the length of time a transition animation should take to complete. By default, the value is `0s`, meaning that no animation will occur.\n   *\n   * **Initial value**: `0s`\n   *\n   * | Chrome  | Firefox |  Safari   |  Edge  |   IE   |\n   * | :-----: | :-----: | :-------: | :----: | :----: |\n   * | **26**  | **16**  |   **9**   | **12** | **10** |\n   * | 1 _-x-_ | 4 _-x-_ | 3.1 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/transition-duration\n   */\n  transitionDuration?: GlobalsString;\n  /**\n   * The **`transition-property`** CSS property sets the CSS properties to which a transition effect should be applied.\n   *\n   * **Initial value**: all\n   *\n   * | Chrome  | Firefox |  Safari   |  Edge  |   IE   |\n   * | :-----: | :-----: | :-------: | :----: | :----: |\n   * | **26**  | **16**  |   **9**   | **12** | **10** |\n   * | 1 _-x-_ | 4 _-x-_ | 3.1 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/transition-property\n   */\n  transitionProperty?: TransitionPropertyProperty;\n  /**\n   * The **`transition-timing-function`** CSS property sets how intermediate values are calculated for CSS properties being affected by a transition effect.\n   *\n   * **Initial value**: `ease`\n   *\n   * | Chrome  | Firefox |  Safari   |  Edge  |   IE   |\n   * | :-----: | :-----: | :-------: | :----: | :----: |\n   * | **26**  | **16**  |   **9**   | **12** | **10** |\n   * | 1 _-x-_ | 4 _-x-_ | 3.1 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/transition-timing-function\n   */\n  transitionTimingFunction?: TransitionTimingFunctionProperty;\n  /**\n   * The **`translate`** CSS property allows you to specify translation transforms individually and independantly of the `transform` property. This maps better to typical user interface usage, and saves having to remember the exact order of transform functions to specify in the `transform` value.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **72**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/translate\n   */\n  translate?: TranslateProperty<TLength>;\n  /**\n   * The **`unicode-bidi`** CSS property, together with the `direction` property, determines how bidirectional text in a document is handled. For example, if a block of content contains both left-to-right and right-to-left text, the user-agent uses a complex Unicode algorithm to decide how to display the text. The `unicode-bidi` property overrides this algorithm and allows the developer to control the text embedding.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari  |  Edge  |   IE    |\n   * | :----: | :-----: | :-----: | :----: | :-----: |\n   * | **2**  |  **1**  | **1.3** | **12** | **5.5** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/unicode-bidi\n   */\n  unicodeBidi?: UnicodeBidiProperty;\n  /**\n   * The `**user-select**` CSS property controls whether the user can select text. This doesn't have any effect on content loaded as chrome, except in textboxes.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome  | Firefox |   Safari    |     Edge     |      IE      |\n   * | :-----: | :-----: | :---------: | :----------: | :----------: |\n   * | **54**  | **69**  | **3** _-x-_ | **12** _-x-_ | **10** _-x-_ |\n   * | 1 _-x-_ | 1 _-x-_ |             |              |              |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/user-select\n   */\n  userSelect?: UserSelectProperty;\n  /**\n   * The **`vertical-align`** CSS property sets vertical alignment of an inline or table-cell box.\n   *\n   * **Initial value**: `baseline`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/vertical-align\n   */\n  verticalAlign?: VerticalAlignProperty<TLength>;\n  /**\n   * The **`visibility`** CSS property shows or hides an element without changing the layout of a document. The property can also hide rows or columns in a `<table>`.\n   *\n   * **Initial value**: `visible`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/visibility\n   */\n  visibility?: VisibilityProperty;\n  /**\n   * The **`white-space`** CSS property sets how white space inside an element is handled.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE    |\n   * | :----: | :-----: | :----: | :----: | :-----: |\n   * | **1**  |  **1**  | **1**  | **12** | **5.5** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/white-space\n   */\n  whiteSpace?: WhiteSpaceProperty;\n  /**\n   * The **`widows`** CSS property sets the minimum number of lines in a block container that must be shown at the _top_ of a page, region, or column.\n   *\n   * **Initial value**: `2`\n   *\n   * | Chrome | Firefox | Safari  |  Edge  |  IE   |\n   * | :----: | :-----: | :-----: | :----: | :---: |\n   * | **25** |   No    | **1.3** | **12** | **8** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/widows\n   */\n  widows?: GlobalsNumber;\n  /**\n   * The **`width`** CSS property sets an element's width. By default it sets the width of the content area, but if `box-sizing` is set to `border-box`, it sets the width of the border area.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/width\n   */\n  width?: WidthProperty<TLength>;\n  /**\n   * The **`will-change`** CSS property hints to browsers how an element is expected to change. Browsers may set up optimizations before an element is actually changed. These kinds of optimizations can increase the responsiveness of a page by doing potentially expensive work before they are actually required.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari  | Edge | IE  |\n   * | :----: | :-----: | :-----: | :--: | :-: |\n   * | **36** | **36**  | **9.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/will-change\n   */\n  willChange?: WillChangeProperty;\n  /**\n   * The **`word-break`** CSS property sets whether line breaks appear wherever the text would otherwise overflow its content box.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE    |\n   * | :----: | :-----: | :----: | :----: | :-----: |\n   * | **1**  | **15**  | **3**  | **12** | **5.5** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/word-break\n   */\n  wordBreak?: WordBreakProperty;\n  /**\n   * The **`word-spacing`** CSS property sets the length of space between words and between tags.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **6** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/word-spacing\n   */\n  wordSpacing?: WordSpacingProperty<TLength>;\n  /**\n   * The `**overflow-wrap**` CSS property sets whether the browser should insert line breaks within words to prevent text from overflowing its content box.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE    |\n   * | :----: | :-----: | :----: | :----: | :-----: |\n   * | **1**  | **3.5** | **2**  | **12** | **5.5** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/overflow-wrap\n   */\n  wordWrap?: WordWrapProperty;\n  /**\n   * The **`writing-mode`** CSS property sets whether lines of text are laid out horizontally or vertically, as well as the direction in which blocks progress.\n   *\n   * **Initial value**: `horizontal-tb`\n   *\n   * | Chrome  | Firefox |  Safari   |  Edge  |     IE      |\n   * | :-----: | :-----: | :-------: | :----: | :---------: |\n   * | **48**  | **41**  | **10.1**  | **12** | **9** _-x-_ |\n   * | 8 _-x-_ |         | 5.1 _-x-_ |        |             |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/writing-mode\n   */\n  writingMode?: WritingModeProperty;\n  /**\n   * The **`z-index`** CSS property sets the z-order of a positioned element and its descendants or flex items. Overlapping elements with a larger z-index cover those with a smaller one.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/z-index\n   */\n  zIndex?: ZIndexProperty;\n  /**\n   * The non-standard **`zoom`** CSS property can be used to control the magnification level of an element. `transform: scale()` should be used instead of this property, if possible. However, unlike CSS Transforms, `zoom` affects the layout size of the element.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari  |  Edge  |   IE    |\n   * | :----: | :-----: | :-----: | :----: | :-----: |\n   * | **1**  |   No    | **3.1** | **12** | **5.5** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/zoom\n   */\n  zoom?: ZoomProperty;\n}\n\nexport interface StandardShorthandProperties<TLength = string | 0> {\n  /**\n   * The `**all**` CSS shorthand property sets all of an element's properties (other than `unicode-bidi` and `direction`) to their initial or inherited values, or to the values specified in another stylesheet origin.\n   *\n   * **Initial value**: There is no practical initial value for it.\n   *\n   * | Chrome | Firefox | Safari  | Edge | IE  |\n   * | :----: | :-----: | :-----: | :--: | :-: |\n   * | **37** | **27**  | **9.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/all\n   */\n  all?: Globals;\n  /**\n   * The **`animation`** shorthand CSS property sets an animated transition between styles. It is a shorthand for `animation-name`, `animation-duration`, `animation-timing-function`, `animation-delay`, `animation-iteration-count`, `animation-direction`, `animation-fill-mode`, and `animation-play-state`.\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |\n   * | :-----: | :-----: | :-----: | :----: | :----: |\n   * | **43**  | **16**  |  **9**  | **12** | **10** |\n   * | 3 _-x-_ | 5 _-x-_ | 4 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/animation\n   */\n  animation?: AnimationProperty;\n  /**\n   * The **`background`** shorthand CSS property sets all background style properties at once, such as color, image, origin and size, or repeat method.\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/background\n   */\n  background?: BackgroundProperty<TLength>;\n  /**\n   * The **`border`** CSS property sets an element's border. It's a shorthand for `border-width`, `border-style`, and `border-color`.\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border\n   */\n  border?: BorderProperty<TLength>;\n  /**\n   * The **`border-block`** CSS property is a shorthand property for setting the individual logical block border property values in a single place in the style sheet.\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **66**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-block\n   */\n  borderBlock?: BorderBlockProperty<TLength>;\n  /**\n   * The **`border-block-end`** CSS property is a shorthand property for setting the individual logical block-end border property values in a single place in the style sheet.\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **69** | **41**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-block-end\n   */\n  borderBlockEnd?: BorderBlockEndProperty<TLength>;\n  /**\n   * The **`border-block-start`** CSS property is a shorthand property for setting the individual logical block-start border property values in a single place in the style sheet.\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **69** | **41**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-block-start\n   */\n  borderBlockStart?: BorderBlockStartProperty<TLength>;\n  /**\n   * The **`border-bottom`** CSS property is a shorthand that sets the values of `border-bottom-width`, `border-bottom-style` and `border-bottom-color`. These properties set an element's bottom border.\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-bottom\n   */\n  borderBottom?: BorderBottomProperty<TLength>;\n  /**\n   * The **`border-color`** shorthand CSS property sets the color of all sides of an element's border.\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-color\n   */\n  borderColor?: BorderColorProperty;\n  /**\n   * The **`border-image`** CSS property draws an image in place of an element's `border-style`.\n   *\n   * | Chrome  |  Firefox  | Safari  |  Edge  |   IE   |\n   * | :-----: | :-------: | :-----: | :----: | :----: |\n   * | **16**  |  **15**   |  **6**  | **12** | **11** |\n   * | 7 _-x-_ | 3.5 _-x-_ | 3 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-image\n   */\n  borderImage?: BorderImageProperty;\n  /**\n   * The **`border-inline`** CSS property is a shorthand property for setting the individual logical inline border property values in a single place in the style sheet.\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **66**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-inline\n   */\n  borderInline?: BorderInlineProperty<TLength>;\n  /**\n   * The **`border-inline-end`** CSS property is a shorthand property for setting the individual logical inline-end border property values in a single place in the style sheet.\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **69** | **41**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-inline-end\n   */\n  borderInlineEnd?: BorderInlineEndProperty<TLength>;\n  /**\n   * The **`border-inline-start`** CSS property is a shorthand property for setting the individual logical inline-start border property values in a single place in the style sheet.\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **69** | **41**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-inline-start\n   */\n  borderInlineStart?: BorderInlineStartProperty<TLength>;\n  /**\n   * The **`border-left`** CSS property is a shorthand that sets the values of `border-left-width`, `border-left-style` and `border-left-color`. These properties set an element's left border.\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-left\n   */\n  borderLeft?: BorderLeftProperty<TLength>;\n  /**\n   * The **`border-radius`** CSS property rounds the corners of an element's outer border edge. You can set a single radius to make circular corners, or two radii to make elliptical corners.\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |  IE   |\n   * | :-----: | :-----: | :-----: | :----: | :---: |\n   * |  **4**  |  **4**  |  **5**  | **12** | **9** |\n   * | 1 _-x-_ |         | 3 _-x-_ |        |       |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-radius\n   */\n  borderRadius?: BorderRadiusProperty<TLength>;\n  /**\n   * The **`border-right`** CSS property is a shorthand that sets the values of `border-right-width`, `border-right-style` and `border-right-color`. These properties set an element's right border.\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE    |\n   * | :----: | :-----: | :----: | :----: | :-----: |\n   * | **1**  |  **1**  | **1**  | **12** | **5.5** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-right\n   */\n  borderRight?: BorderRightProperty<TLength>;\n  /**\n   * The **`border-style`** CSS property is a shorthand property that sets the line style for all four sides of an element's border.\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-style\n   */\n  borderStyle?: BorderStyleProperty;\n  /**\n   * The **`border-top`** CSS property is a shorthand that sets the values of `border-top-width`, `border-top-style` and `border-top-color`. These properties set an element's top border.\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-top\n   */\n  borderTop?: BorderTopProperty<TLength>;\n  /**\n   * The **`border-width`** shorthand CSS property sets the widths of all four sides of an element's border.\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-width\n   */\n  borderWidth?: BorderWidthProperty<TLength>;\n  /**\n   * The **`column-rule`** CSS property sets the width, style, and color of the rule (line) drawn between columns in a multi-column layout.\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |\n   * | :-----: | :-----: | :-----: | :----: | :----: |\n   * | **50**  | **52**  |  **9**  | **12** | **10** |\n   * | 1 _-x-_ |         | 3 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/column-rule\n   */\n  columnRule?: ColumnRuleProperty<TLength>;\n  /**\n   * The **`columns`** CSS property sets the column width and column count of an element.\n   *\n   * | Chrome | Firefox | Safari  |  Edge  |   IE   |\n   * | :----: | :-----: | :-----: | :----: | :----: |\n   * | **50** | **52**  |  **9**  | **12** | **10** |\n   * |        |         | 3 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/columns\n   */\n  columns?: ColumnsProperty<TLength>;\n  /**\n   * The **`flex`** CSS property sets how a flex item will grow or shrink to fit the space available in its flex container. It is a shorthand for `flex-grow`, `flex-shrink`, and `flex-basis`.\n   *\n   * |  Chrome  | Firefox |  Safari   |  Edge  |    IE    |\n   * | :------: | :-----: | :-------: | :----: | :------: |\n   * |  **29**  | **20**  |   **9**   | **12** |  **11**  |\n   * | 21 _-x-_ |         | 6.1 _-x-_ |        | 10 _-x-_ |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/flex\n   */\n  flex?: FlexProperty<TLength>;\n  /**\n   * The **`flex-flow`** CSS property is a shorthand property for `flex-direction` and `flex-wrap` properties.\n   *\n   * |  Chrome  | Firefox |  Safari   |  Edge  |   IE   |\n   * | :------: | :-----: | :-------: | :----: | :----: |\n   * |  **29**  | **28**  |   **9**   | **12** | **11** |\n   * | 21 _-x-_ |         | 6.1 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/flex-flow\n   */\n  flexFlow?: FlexFlowProperty;\n  /**\n   * The **`font`** CSS property is a shorthand for `font-style`, `font-variant`, `font-weight`, `font-size`, `line-height`, and `font-family`. Alternatively, it sets an element's font to a system font.\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **3** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/font\n   */\n  font?: FontProperty;\n  /**\n   * The **`gap`** CSS property sets the gaps (gutters) between rows and columns. It is a shorthand for `row-gap` and `column-gap`.\n   *\n   * ---\n   *\n   * _Supported in Flex Layout_\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **63**  |   No   |  No  | No  |\n   *\n   * ---\n   *\n   * _Supported in Grid Layout_\n   *\n   * |     Chrome      |     Firefox     |        Safari         |  Edge  | IE  |\n   * | :-------------: | :-------------: | :-------------------: | :----: | :-: |\n   * |     **66**      |     **61**      | **10.1** _(grid-gap)_ | **16** | No  |\n   * | 57 _(grid-gap)_ | 52 _(grid-gap)_ |                       |        |     |\n   *\n   * ---\n   *\n   * _Supported in Multi-column Layout_\n   *\n   * | Chrome | Firefox | Safari |  Edge  | IE  |\n   * | :----: | :-----: | :----: | :----: | :-: |\n   * | **66** | **61**  |   No   | **16** | No  |\n   *\n   * ---\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/gap\n   */\n  gap?: GapProperty<TLength>;\n  /**\n   * The **`grid`** CSS property is a shorthand property that sets all of the explicit grid properties (`grid-template-rows`, `grid-template-columns`, and `grid-template-areas`), and all the implicit grid properties (`grid-auto-rows`, `grid-auto-columns`, and `grid-auto-flow`), in a single declaration.\n   *\n   * | Chrome | Firefox |  Safari  |  Edge  | IE  |\n   * | :----: | :-----: | :------: | :----: | :-: |\n   * | **57** | **52**  | **10.1** | **16** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/grid\n   */\n  grid?: GridProperty;\n  /**\n   * The **`grid-area`** CSS property is a shorthand property for `grid-row-start`, `grid-column-start`, `grid-row-end` and `grid-column-end`, specifying a grid item’s size and location within the grid row by contributing a line, a span, or nothing (automatic) to its grid placement, thereby specifying the edges of its grid area.\n   *\n   * | Chrome | Firefox |  Safari  |  Edge  | IE  |\n   * | :----: | :-----: | :------: | :----: | :-: |\n   * | **57** | **52**  | **10.1** | **16** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/grid-area\n   */\n  gridArea?: GridAreaProperty;\n  /**\n   * The **`grid-column`** CSS property is a shorthand property for `grid-column-start` and `grid-column-end` specifying a grid item's size and location within the grid column by contributing a line, a span, or nothing (automatic) to its grid placement, thereby specifying the inline-start and inline-end edge of its grid area.\n   *\n   * | Chrome | Firefox |  Safari  |  Edge  | IE  |\n   * | :----: | :-----: | :------: | :----: | :-: |\n   * | **57** | **52**  | **10.1** | **16** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/grid-column\n   */\n  gridColumn?: GridColumnProperty;\n  /**\n   * The **`grid-row`** CSS property is a shorthand property for `grid-row-start` and `grid-row-end` specifying a grid item’s size and location within the grid row by contributing a line, a span, or nothing (automatic) to its grid placement, thereby specifying the inline-start and inline-end edge of its grid area.\n   *\n   * | Chrome | Firefox |  Safari  |  Edge  | IE  |\n   * | :----: | :-----: | :------: | :----: | :-: |\n   * | **57** | **52**  | **10.1** | **16** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/grid-row\n   */\n  gridRow?: GridRowProperty;\n  /**\n   * The **`grid-template`** CSS property is a shorthand property for defining grid columns, rows, and areas.\n   *\n   * | Chrome | Firefox |  Safari  |  Edge  | IE  |\n   * | :----: | :-----: | :------: | :----: | :-: |\n   * | **57** | **52**  | **10.1** | **16** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/grid-template\n   */\n  gridTemplate?: GridTemplateProperty;\n  /** **Initial value**: `none` */\n  lineClamp?: LineClampProperty;\n  /**\n   * The **`list-style`** CSS property is a shorthand to set list style properties `list-style-type`, `list-style-image`, and `list-style-position`.\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/list-style\n   */\n  listStyle?: ListStyleProperty;\n  /**\n   * The **`margin`** CSS property sets the margin area on all four sides of an element. It is a shorthand for `margin-top`, `margin-right`, `margin-bottom`, and `margin-left`.\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **3** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/margin\n   */\n  margin?: MarginProperty<TLength>;\n  /**\n   * The **`mask`** CSS property hides an element (partially or fully) by masking or clipping the image at specific points.\n   *\n   * | Chrome | Firefox | Safari  |  Edge  | IE  |\n   * | :----: | :-----: | :-----: | :----: | :-: |\n   * | **1**  |  **2**  | **3.2** | **12** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/mask\n   */\n  mask?: MaskProperty<TLength>;\n  /** The **`mask-border`** CSS property lets you create a mask along the edge of an element's border. */\n  maskBorder?: MaskBorderProperty;\n  /**\n   * The **`offset`** CSS property is a shorthand property for animating an element along a defined path.\n   *\n   * |    Chrome     | Firefox | Safari | Edge | IE  |\n   * | :-----------: | :-----: | :----: | :--: | :-: |\n   * |    **55**     | **72**  |   No   |  No  | No  |\n   * | 46 _(motion)_ |         |        |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/offset\n   */\n  motion?: OffsetProperty<TLength>;\n  /**\n   * The **`offset`** CSS property is a shorthand property for animating an element along a defined path.\n   *\n   * |    Chrome     | Firefox | Safari | Edge | IE  |\n   * | :-----------: | :-----: | :----: | :--: | :-: |\n   * |    **55**     | **72**  |   No   |  No  | No  |\n   * | 46 _(motion)_ |         |        |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/offset\n   */\n  offset?: OffsetProperty<TLength>;\n  /**\n   * The **`outline`** CSS property is a shorthand to set various outline properties in a single declaration: `outline-style`, `outline-width`, and `outline-color`.\n   *\n   * | Chrome | Firefox | Safari  |  Edge  |  IE   |\n   * | :----: | :-----: | :-----: | :----: | :---: |\n   * | **1**  | **1.5** | **1.2** | **12** | **8** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/outline\n   */\n  outline?: OutlineProperty<TLength>;\n  /**\n   * The **`padding`** CSS property sets the padding area on all four sides of an element. It is a shorthand for `padding-top`, `padding-right`, `padding-bottom`, and `padding-left`.\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/padding\n   */\n  padding?: PaddingProperty<TLength>;\n  /**\n   * The CSS **`place-items`** shorthand property sets the `align-items` and `justify-items` properties, respectively. If the second value is not set, the first value is also used for it.\n   *\n   * ---\n   *\n   * _Supported in Flex Layout_\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **59** | **45**  | **11** |  No  | No  |\n   *\n   * ---\n   *\n   * _Supported in Grid Layout_\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **59** | **45**  | **11** |  No  | No  |\n   *\n   * ---\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/place-items\n   */\n  placeItems?: PlaceItemsProperty;\n  /**\n   * The **`place-self`** CSS property is a shorthand property sets both the `align-self` and `justify-self` properties. The first value is the `align-self` property value, the second the `justify-self` one. If the second value is not present, the first value is also used for it.\n   *\n   * ---\n   *\n   * _Supported in Flex Layout_\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **59** | **45**  |   No   |  No  | No  |\n   *\n   * ---\n   *\n   * _Supported in Grid Layout_\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **59** | **45**  |   No   |  No  | No  |\n   *\n   * ---\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/place-self\n   */\n  placeSelf?: PlaceSelfProperty;\n  /**\n   * The **`text-decoration`** CSS property sets the appearance of decorative lines on text. It is a shorthand for `text-decoration-line`, `text-decoration-color`, and `text-decoration-style`.\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **3** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-decoration\n   */\n  textDecoration?: TextDecorationProperty<TLength>;\n  /**\n   * The **`text-emphasis`** CSS property applies emphasis marks to text (except spaces and control characters). It is a shorthand for `text-emphasis-style` and `text-emphasis-color`.\n   *\n   * | Chrome | Firefox | Safari  | Edge | IE  |\n   * | :----: | :-----: | :-----: | :--: | :-: |\n   * | **25** | **46**  | **6.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-emphasis\n   */\n  textEmphasis?: TextEmphasisProperty;\n  /**\n   * The **`transition`** CSS property is a shorthand property for `transition-property`, `transition-duration`, `transition-timing-function`, and `transition-delay`.\n   *\n   * | Chrome  | Firefox |  Safari   |  Edge  |   IE   |\n   * | :-----: | :-----: | :-------: | :----: | :----: |\n   * | **26**  | **16**  |   **9**   | **12** | **10** |\n   * | 1 _-x-_ | 4 _-x-_ | 3.1 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/transition\n   */\n  transition?: TransitionProperty;\n}\n\nexport interface StandardProperties<TLength = string | 0> extends StandardLonghandProperties<TLength>, StandardShorthandProperties<TLength> {}\n\nexport interface VendorLonghandProperties<TLength = string | 0> {\n  /**\n   * The **`animation-delay`** CSS property sets when an animation starts. The animation can start later, immediately from its beginning, or immediately and partway through the animation.\n   *\n   * **Initial value**: `0s`\n   */\n  MozAnimationDelay?: GlobalsString;\n  /**\n   * The **`animation-direction`** CSS property sets whether an animation should play forwards, backwards, or alternating back and forth.\n   *\n   * **Initial value**: `normal`\n   */\n  MozAnimationDirection?: AnimationDirectionProperty;\n  /**\n   * The **`animation-duration`** CSS property sets the length of time that an animation takes to complete one cycle.\n   *\n   * **Initial value**: `0s`\n   */\n  MozAnimationDuration?: GlobalsString;\n  /**\n   * The **`animation-fill-mode`** CSS property sets how a CSS animation applies styles to its target before and after its execution.\n   *\n   * **Initial value**: `none`\n   */\n  MozAnimationFillMode?: AnimationFillModeProperty;\n  /**\n   * The **`animation-iteration-count`** CSS property sets the number of times an animation cycle should be played before stopping.\n   *\n   * **Initial value**: `1`\n   */\n  MozAnimationIterationCount?: AnimationIterationCountProperty;\n  /**\n   * The **`animation-name`** CSS property sets one or more animations to apply to an element. Each name is an `@keyframes` at-rule that sets the property values for the animation sequence.\n   *\n   * **Initial value**: `none`\n   */\n  MozAnimationName?: AnimationNameProperty;\n  /**\n   * The **`animation-play-state`** CSS property sets whether an animation is running or paused.\n   *\n   * **Initial value**: `running`\n   */\n  MozAnimationPlayState?: AnimationPlayStateProperty;\n  /**\n   * The `**animation-timing-function**` CSS property sets how an animation progresses through the duration of each cycle.\n   *\n   * **Initial value**: `ease`\n   */\n  MozAnimationTimingFunction?: AnimationTimingFunctionProperty;\n  /**\n   * The **`-moz-appearance`** CSS property is used in Gecko (Firefox) to display an element using platform-native styling based on the operating system's theme.\n   *\n   * **Initial value**: `none` (but this value is overridden in the user agent CSS)\n   */\n  MozAppearance?: MozAppearanceProperty;\n  /**\n   * The **`backface-visibility`** CSS property sets whether the back face of an element is visible when turned towards the user.\n   *\n   * **Initial value**: `visible`\n   */\n  MozBackfaceVisibility?: BackfaceVisibilityProperty;\n  /**\n   * The **`border-inline-end-color`** CSS property defines the color of the logical inline-end border of an element, which maps to a physical border color depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-color`, `border-right-color`, `border-bottom-color`, or `border-left-color` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `currentcolor`\n   */\n  MozBorderEndColor?: BorderInlineEndColorProperty;\n  /**\n   * The **`border-inline-end-style`** CSS property defines the style of the logical inline end border of an element, which maps to a physical border style depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-style`, `border-right-style`, `border-bottom-style`, or `border-left-style` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `none`\n   */\n  MozBorderEndStyle?: BorderInlineEndStyleProperty;\n  /**\n   * The **`border-inline-end-width`** CSS property defines the width of the logical inline-end border of an element, which maps to a physical border width depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-width`, `border-right-width`, `border-bottom-width`, or `border-left-width` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `medium`\n   */\n  MozBorderEndWidth?: BorderInlineEndWidthProperty<TLength>;\n  /**\n   * The **`border-inline-start-color`** CSS property defines the color of the logical inline start border of an element, which maps to a physical border color depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-color`, `border-right-color`, `border-bottom-color`, or `border-left-color` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `currentcolor`\n   */\n  MozBorderStartColor?: BorderInlineStartColorProperty;\n  /**\n   * The **`border-inline-start-style`** CSS property defines the style of the logical inline start border of an element, which maps to a physical border style depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-style`, `border-right-style`, `border-bottom-style`, or `border-left-style` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `none`\n   */\n  MozBorderStartStyle?: BorderInlineStartStyleProperty;\n  /**\n   * The **`box-sizing`** CSS property defines how the user agent should calculate the total width and height of an element.\n   *\n   * **Initial value**: `content-box`\n   */\n  MozBoxSizing?: BoxSizingProperty;\n  /**\n   * The **`column-count`** CSS property breaks an element's content into the specified number of columns.\n   *\n   * **Initial value**: `auto`\n   */\n  MozColumnCount?: ColumnCountProperty;\n  /**\n   * The **`column-fill`** CSS property controls how an element's contents are balanced when broken into columns.\n   *\n   * **Initial value**: `balance`\n   */\n  MozColumnFill?: ColumnFillProperty;\n  /**\n   * The **`column-gap`** CSS property sets the size of the gap (gutter) between an element's columns.\n   *\n   * **Initial value**: `normal`\n   */\n  MozColumnGap?: ColumnGapProperty<TLength>;\n  /**\n   * The **`column-rule-color`** CSS property sets the color of the rule (line) drawn between columns in a multi-column layout.\n   *\n   * **Initial value**: `currentcolor`\n   */\n  MozColumnRuleColor?: ColumnRuleColorProperty;\n  /**\n   * The **`column-rule-style`** CSS property sets the style of the line drawn between columns in a multi-column layout.\n   *\n   * **Initial value**: `none`\n   */\n  MozColumnRuleStyle?: ColumnRuleStyleProperty;\n  /**\n   * The **`column-rule-width`** CSS property sets the width of the rule (line) drawn between columns in a multi-column layout.\n   *\n   * **Initial value**: `medium`\n   */\n  MozColumnRuleWidth?: ColumnRuleWidthProperty<TLength>;\n  /**\n   * The **`column-width`** CSS property specifies the ideal column width in a multi-column layout. The container will have as many columns as can fit without any of them having a width less than the `column-width` value. If the width of the container is narrower than the specified value, the single column's width will be smaller than the declared column width.\n   *\n   * **Initial value**: `auto`\n   */\n  MozColumnWidth?: ColumnWidthProperty<TLength>;\n  /**\n   * If you reference an SVG image in a webpage (such as with the `<img>` element or as a background image), the SVG image can coordinate with the embedding element (its context) to have the image adopt property values set on the embedding element. To do this the embedding element needs to list the properties that are to be made available to the image by listing them as values of the **`-moz-context-properties`** property, and the image needs to opt in to using those properties by using values such as the `context-fill` value.\n   *\n   * **Initial value**: `none`\n   */\n  MozContextProperties?: MozContextPropertiesProperty;\n  /**\n   * The non-standard **`-moz-float-edge`** CSS property specifies whether the height and width properties of the element include the margin, border, or padding thickness.\n   *\n   * **Initial value**: `content-box`\n   */\n  MozFloatEdge?: MozFloatEdgeProperty;\n  /**\n   * The **`font-feature-settings`** CSS property controls advanced typographic features in OpenType fonts.\n   *\n   * **Initial value**: `normal`\n   */\n  MozFontFeatureSettings?: FontFeatureSettingsProperty;\n  /**\n   * The **`font-language-override`** CSS property controls the use of language-specific glyphs in a typeface.\n   *\n   * **Initial value**: `normal`\n   */\n  MozFontLanguageOverride?: FontLanguageOverrideProperty;\n  /**\n   * The **`-moz-force-broken-image-icon`** extended CSS property can be used to force the broken image icon to be shown even when a broken image has an `alt` attribute.\n   *\n   * **Initial value**: `0`\n   */\n  MozForceBrokenImageIcon?: GlobalsNumber;\n  /**\n   * The **`hyphens`** CSS property specifies how words should be hyphenated when text wraps across multiple lines. You can prevent hyphenation entirely, use hyphenation in manually-specified points within the text, or let the browser automatically insert hyphens where appropriate.\n   *\n   * **Initial value**: `manual`\n   */\n  MozHyphens?: HyphensProperty;\n  /**\n   * For certain XUL elements and pseudo-elements that use an image from the `list-style-image` property, this property specifies a region of the image that is used in place of the whole image. This allows elements to use different pieces of the same image to improve performance.\n   *\n   * **Initial value**: `auto`\n   */\n  MozImageRegion?: MozImageRegionProperty;\n  /**\n   * The **`margin-inline-end`** CSS property defines the logical inline end margin of an element, which maps to a physical margin depending on the element's writing mode, directionality, and text orientation. In other words, it corresponds to the `margin-top`, `margin-right`, `margin-bottom` or `margin-left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `0`\n   */\n  MozMarginEnd?: MarginInlineEndProperty<TLength>;\n  /**\n   * The **`margin-inline-start`** CSS property defines the logical inline start margin of an element, which maps to a physical margin depending on the element's writing mode, directionality, and text orientation. It corresponds to the `margin-top`, `margin-right`, `margin-bottom`, or `margin-left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `0`\n   */\n  MozMarginStart?: MarginInlineStartProperty<TLength>;\n  /**\n   * The **`-moz-orient`** CSS property specifies the orientation of the element to which it's applied.\n   *\n   * **Initial value**: `inline`\n   */\n  MozOrient?: MozOrientProperty;\n  /**\n   * In Mozilla applications, the **`-moz-outline-radius-bottomleft`** CSS property can be used to round the bottom-left corner of an element's `outline`.\n   *\n   * **Initial value**: `0`\n   */\n  MozOutlineRadiusBottomleft?: MozOutlineRadiusBottomleftProperty<TLength>;\n  /**\n   * In Mozilla applications, the **`-moz-outline-radius-bottomright`** CSS property can be used to round the bottom-right corner of an element's `outline`.\n   *\n   * **Initial value**: `0`\n   */\n  MozOutlineRadiusBottomright?: MozOutlineRadiusBottomrightProperty<TLength>;\n  /**\n   * In Mozilla applications, the **`-moz-outline-radius-topleft`** CSS property can be used to round the top-left corner of an element's `outline`.\n   *\n   * **Initial value**: `0`\n   */\n  MozOutlineRadiusTopleft?: MozOutlineRadiusTopleftProperty<TLength>;\n  /**\n   * In Mozilla applications, the **`-moz-outline-radius-topright`** CSS property can be used to round the top-right corner of an element's `outline`.\n   *\n   * **Initial value**: `0`\n   */\n  MozOutlineRadiusTopright?: MozOutlineRadiusToprightProperty<TLength>;\n  /**\n   * The **`padding-inline-end`** CSS property defines the logical inline end padding of an element, which maps to a physical padding depending on the element's writing mode, directionality, and text orientation. It corresponds to the `padding-top`, `padding-right`, `padding-bottom`, or `padding-left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `0`\n   */\n  MozPaddingEnd?: PaddingInlineEndProperty<TLength>;\n  /**\n   * The **`padding-inline-start`** CSS property defines the logical inline start padding of an element, which maps to a physical padding depending on the element's writing mode, directionality, and text orientation. It corresponds to the `padding-top`, `padding-right`, `padding-bottom`, or `padding-left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `0`\n   */\n  MozPaddingStart?: PaddingInlineStartProperty<TLength>;\n  /**\n   * The **`perspective`** CSS property determines the distance between the z=0 plane and the user in order to give a 3D-positioned element some perspective. Each 3D element with z>0 becomes larger; each 3D-element with z<0 becomes smaller. The strength of the effect is determined by the value of this property.\n   *\n   * **Initial value**: `none`\n   */\n  MozPerspective?: PerspectiveProperty<TLength>;\n  /**\n   * The **`perspective-origin`** CSS property determines the position at which the viewer is looking. It is used as the _vanishing point_ by the `perspective` property.\n   *\n   * **Initial value**: `50% 50%`\n   */\n  MozPerspectiveOrigin?: PerspectiveOriginProperty<TLength>;\n  /**\n   * **`-moz-stack-sizing`** is an extended CSS property. Normally, a `stack` will change its size so that all of its child elements are completely visible. For example, moving a child of the stack far to the right will widen the stack so the child remains visible.\n   *\n   * **Initial value**: `stretch-to-fit`\n   */\n  MozStackSizing?: MozStackSizingProperty;\n  /**\n   * The **`tab-size`** CSS property is used to customize the width of a tab (`U+0009`) character.\n   *\n   * **Initial value**: `8`\n   */\n  MozTabSize?: TabSizeProperty<TLength>;\n  /**\n   * The **`text-size-adjust`** CSS property controls the text inflation algorithm used on some smartphones and tablets. Other browsers will ignore this property.\n   *\n   * **Initial value**: `auto` for smartphone browsers supporting inflation, `none` in other cases (and then not modifiable).\n   */\n  MozTextSizeAdjust?: TextSizeAdjustProperty;\n  /**\n   * The **`transform-origin`** CSS property sets the origin for an element's transformations.\n   *\n   * **Initial value**: `50% 50% 0`\n   */\n  MozTransformOrigin?: TransformOriginProperty<TLength>;\n  /**\n   * The **`transform-style`** CSS property sets whether children of an element are positioned in the 3D space or are flattened in the plane of the element.\n   *\n   * **Initial value**: `flat`\n   */\n  MozTransformStyle?: TransformStyleProperty;\n  /**\n   * The **`transition-delay`** CSS property specifies the duration to wait before starting a property's transition effect when its value changes.\n   *\n   * **Initial value**: `0s`\n   */\n  MozTransitionDelay?: GlobalsString;\n  /**\n   * The **`transition-duration`** CSS property sets the length of time a transition animation should take to complete. By default, the value is `0s`, meaning that no animation will occur.\n   *\n   * **Initial value**: `0s`\n   */\n  MozTransitionDuration?: GlobalsString;\n  /**\n   * The **`transition-property`** CSS property sets the CSS properties to which a transition effect should be applied.\n   *\n   * **Initial value**: all\n   */\n  MozTransitionProperty?: TransitionPropertyProperty;\n  /**\n   * The **`transition-timing-function`** CSS property sets how intermediate values are calculated for CSS properties being affected by a transition effect.\n   *\n   * **Initial value**: `ease`\n   */\n  MozTransitionTimingFunction?: TransitionTimingFunctionProperty;\n  /**\n   * The **`-moz-user-focus`** CSS property is used to indicate whether an element can have the focus.\n   *\n   * **Initial value**: `none`\n   */\n  MozUserFocus?: MozUserFocusProperty;\n  /**\n   * The **`user-modify`** property has no effect in Firefox. It was originally planned to determine whether or not the content of an element can be edited by a user.\n   *\n   * **Initial value**: `read-only`\n   */\n  MozUserModify?: MozUserModifyProperty;\n  /**\n   * The `**user-select**` CSS property controls whether the user can select text. This doesn't have any effect on content loaded as chrome, except in textboxes.\n   *\n   * **Initial value**: `auto`\n   */\n  MozUserSelect?: UserSelectProperty;\n  /**\n   * The **`-moz-window-dragging`** CSS property specifies whether a window is draggable or not. It only works in Chrome code, and only on Mac OS X.\n   *\n   * **Initial value**: `drag`\n   */\n  MozWindowDragging?: MozWindowDraggingProperty;\n  /**\n   * The **`-ms-accelerator`** CSS property is a Microsoft extension that sets or retrieves a string indicating whether the object represents a keyboard shortcut.\n   *\n   * **Initial value**: `false`\n   */\n  msAccelerator?: MsAcceleratorProperty;\n  /**\n   * The **`align-self`** CSS property aligns flex items of the current flex line overriding the `align-items` value. If any of the item's cross-axis margin is set to `auto`, then `align-self` is ignored. In Grid layout `align-self` aligns the item inside the grid area.\n   *\n   * **Initial value**: `auto`\n   */\n  msAlignSelf?: AlignSelfProperty;\n  /**\n   * The **`-ms-block-progression`** CSS property is a Microsoft extension that specifies the block progression and layout orientation.\n   *\n   * **Initial value**: `tb`\n   */\n  msBlockProgression?: MsBlockProgressionProperty;\n  /**\n   * The **`-ms-content-zoom-chaining`** CSS property is a Microsoft extension specifying the zoom behavior that occurs when a user hits the zoom limit during page manipulation.\n   *\n   * **Initial value**: `none`\n   */\n  msContentZoomChaining?: MsContentZoomChainingProperty;\n  /**\n   * The **`-ms-content-zoom-limit-max`** CSS property is a Microsoft extension that specifies the selected elements' maximum zoom factor.\n   *\n   * **Initial value**: `400%`\n   */\n  msContentZoomLimitMax?: GlobalsString;\n  /**\n   * The **`-ms-content-zoom-limit-min`** CSS property is a Microsoft extension that specifies the minimum zoom factor.\n   *\n   * **Initial value**: `100%`\n   */\n  msContentZoomLimitMin?: GlobalsString;\n  /**\n   * The **`-ms-content-zoom-snap-points`** CSS property is a Microsoft extension that specifies where zoom snap-points are located.\n   *\n   * **Initial value**: `snapInterval(0%, 100%)`\n   */\n  msContentZoomSnapPoints?: GlobalsString;\n  /**\n   * The **`-ms-content-zoom-snap-type`** CSS property is a Microsoft extension that specifies how zooming is affected by defined snap-points.\n   *\n   * **Initial value**: `none`\n   */\n  msContentZoomSnapType?: MsContentZoomSnapTypeProperty;\n  /**\n   * The **`-ms-content-zooming`** CSS property is a Microsoft extension that specifies whether zooming is enabled.\n   *\n   * **Initial value**: zoom for the top level element, none for all other elements\n   */\n  msContentZooming?: MsContentZoomingProperty;\n  /**\n   * The `-ms-filter` CSS property is a Microsoft extension that sets or retrieves the filter or collection of filters applied to an object.\n   *\n   * **Initial value**: \"\" (the empty string)\n   */\n  msFilter?: GlobalsString;\n  /**\n   * The **`flex-direction`** CSS property sets how flex items are placed in the flex container defining the main axis and the direction (normal or reversed).\n   *\n   * **Initial value**: `row`\n   */\n  msFlexDirection?: FlexDirectionProperty;\n  /**\n   * The **`flex-grow`** CSS property sets how much of the available space in the flex container should be assigned to that item (the flex grow factor). If all sibling items have the same flex grow factor, then all items will receive the same share of available space, otherwise it is distributed according to the ratio defined by the different flex grow factors.\n   *\n   * **Initial value**: `0`\n   */\n  msFlexPositive?: GlobalsNumber;\n  /**\n   * The **`-ms-flow-from`** CSS property is a Microsoft extension that gets or sets a value identifying a region container in the document that accepts the content flow from the data source.\n   *\n   * **Initial value**: `none`\n   */\n  msFlowFrom?: MsFlowFromProperty;\n  /**\n   * The **`-ms-flow-into`** CSS property is a Microsoft extension that gets or sets a value identifying an iframe container in the document that serves as the region's data source.\n   *\n   * **Initial value**: `none`\n   */\n  msFlowInto?: MsFlowIntoProperty;\n  /**\n   * The **`grid-auto-columns`** CSS property specifies the size of an implicitly-created grid column track.\n   *\n   * **Initial value**: `auto`\n   */\n  msGridColumns?: GridAutoColumnsProperty<TLength>;\n  /**\n   * The **`grid-auto-rows`** CSS property specifies the size of an implicitly-created grid row track.\n   *\n   * **Initial value**: `auto`\n   */\n  msGridRows?: GridAutoRowsProperty<TLength>;\n  /**\n   * The **`-ms-high-contrast-adjust`** CSS property is a Microsoft extension that gets or sets a value indicating whether to override any CSS properties that would have been set in high contrast mode.\n   *\n   * **Initial value**: `auto`\n   */\n  msHighContrastAdjust?: MsHighContrastAdjustProperty;\n  /**\n   * The **`-ms-hyphenate-limit-chars`** CSS property is a Microsoft extension that specifies one to three values indicating the minimum number of characters in a hyphenated word. If the word does not meet the required minimum number of characters in the word, before the hyphen, or after the hyphen, then the word is not hyphenated.\n   *\n   * **Initial value**: `auto`\n   */\n  msHyphenateLimitChars?: MsHyphenateLimitCharsProperty;\n  /**\n   * The **`-ms-hyphenate-limit-lines`** CSS property is a Microsoft extension specifying the maximum number of consecutive lines in an element that may be ended with a hyphenated word.\n   *\n   * **Initial value**: `no-limit`\n   */\n  msHyphenateLimitLines?: MsHyphenateLimitLinesProperty;\n  /**\n   * The `**-ms-hyphenate-limit-zone**` CSS property is a Microsoft extension specifying the width of the hyphenation zone.\n   *\n   * **Initial value**: `0`\n   */\n  msHyphenateLimitZone?: MsHyphenateLimitZoneProperty<TLength>;\n  /**\n   * The **`hyphens`** CSS property specifies how words should be hyphenated when text wraps across multiple lines. You can prevent hyphenation entirely, use hyphenation in manually-specified points within the text, or let the browser automatically insert hyphens where appropriate.\n   *\n   * **Initial value**: `manual`\n   */\n  msHyphens?: HyphensProperty;\n  /**\n   * The **`-ms-ime-align`** CSS property is a Microsoft extension aligning the Input Method Editor (IME) candidate window box relative to the element on which the IME composition is active. The extension is implemented in Microsoft Edge and Internet Explorer 11.\n   *\n   * **Initial value**: `auto`\n   */\n  msImeAlign?: MsImeAlignProperty;\n  /**\n   * The **`line-break`** CSS property sets how to break lines of Chinese, Japanese, or Korean (CJK) text when working with punctuation and symbols.\n   *\n   * **Initial value**: `auto`\n   */\n  msLineBreak?: LineBreakProperty;\n  /**\n   * The **`order`** CSS property sets the order to lay out an item in a flex or grid container. Items in a container are sorted by ascending `order` value and then by their source code order.\n   *\n   * **Initial value**: `0`\n   */\n  msOrder?: GlobalsNumber;\n  /**\n   * The **`-ms-overflow-style`** CSS property is a Microsoft extension controlling the behavior of scrollbars when the content of an element overflows.\n   *\n   * **Initial value**: `auto`\n   */\n  msOverflowStyle?: MsOverflowStyleProperty;\n  /**\n   * The **`overflow-x`** CSS property sets what shows when content overflows a block-level element's left and right edges. This may be nothing, a scroll bar, or the overflow content.\n   *\n   * **Initial value**: `visible`\n   */\n  msOverflowX?: OverflowXProperty;\n  /**\n   * The **`overflow-y`** CSS property sets what shows when content overflows a block-level element's top and bottom edges. This may be nothing, a scroll bar, or the overflow content.\n   *\n   * **Initial value**: `visible`\n   */\n  msOverflowY?: OverflowYProperty;\n  /**\n   * The `**-ms-scroll-chaining**` CSS property is a Microsoft extension that specifies the scrolling behavior that occurs when a user hits the scroll limit during a manipulation.\n   *\n   * **Initial value**: `chained`\n   */\n  msScrollChaining?: MsScrollChainingProperty;\n  /**\n   * The `**-ms-scroll-limit-x-max**` CSS property is a Microsoft extension that specifies the maximum value for the `Element.scrollLeft` property.\n   *\n   * **Initial value**: `auto`\n   */\n  msScrollLimitXMax?: MsScrollLimitXMaxProperty<TLength>;\n  /**\n   * The **`-ms-scroll-limit-x-min`** CSS property is a Microsoft extension that specifies the minimum value for the `Element.scrollLeft` property.\n   *\n   * **Initial value**: `0`\n   */\n  msScrollLimitXMin?: MsScrollLimitXMinProperty<TLength>;\n  /**\n   * The **`-ms-scroll-limit-y-max`** CSS property is a Microsoft extension that specifies the maximum value for the `Element.scrollTop` property.\n   *\n   * **Initial value**: `auto`\n   */\n  msScrollLimitYMax?: MsScrollLimitYMaxProperty<TLength>;\n  /**\n   * The **`-ms-scroll-limit-y-min`** CSS property is a Microsoft extension that specifies the minimum value for the `Element.scrollTop` property.\n   *\n   * **Initial value**: `0`\n   */\n  msScrollLimitYMin?: MsScrollLimitYMinProperty<TLength>;\n  /**\n   * The **`-ms-scroll-rails`** CSS property is a Microsoft extension that specifies whether scrolling locks to the primary axis of motion.\n   *\n   * **Initial value**: `railed`\n   */\n  msScrollRails?: MsScrollRailsProperty;\n  /**\n   * The **`-ms-scroll-snap-points-x`** CSS property is a Microsoft extension that specifies where snap-points will be located along the x-axis.\n   *\n   * **Initial value**: `snapInterval(0px, 100%)`\n   */\n  msScrollSnapPointsX?: GlobalsString;\n  /**\n   * The **`-ms-scroll-snap-points-y`** CSS property is a Microsoft extension that specifies where snap-points will be located along the y-axis.\n   *\n   * **Initial value**: `snapInterval(0px, 100%)`\n   */\n  msScrollSnapPointsY?: GlobalsString;\n  /**\n   * The **`scroll-snap-type`** CSS property sets how strictly snap points are enforced on the scroll container in case there is one.\n   *\n   * **Initial value**: `none`\n   */\n  msScrollSnapType?: MsScrollSnapTypeProperty;\n  /**\n   * The **`-ms-scroll-translation`** CSS property is a Microsoft extension that specifies whether vertical-to-horizontal scroll wheel translation occurs on the specified element.\n   *\n   * **Initial value**: `none`\n   */\n  msScrollTranslation?: MsScrollTranslationProperty;\n  /**\n   * The **`-ms-scrollbar-3dlight-color`** CSS property is a Microsoft extension specifying the color of the top and left edges of the scroll box and scroll arrows of a scroll bar.\n   *\n   * **Initial value**: depends on user agent\n   */\n  msScrollbar3dlightColor?: MsScrollbar3dlightColorProperty;\n  /**\n   * The **`-ms-scrollbar-arrow-color`** CSS property is a Microsoft extension that specifies the color of the arrow elements of a scroll arrow.\n   *\n   * **Initial value**: `ButtonText`\n   */\n  msScrollbarArrowColor?: MsScrollbarArrowColorProperty;\n  /**\n   * The `**-ms-scrollbar-base-color**` CSS property is a Microsoft extension that specifies the base color of the main elements of a scroll bar.\n   *\n   * **Initial value**: depends on user agent\n   */\n  msScrollbarBaseColor?: MsScrollbarBaseColorProperty;\n  /**\n   * The **`-ms-scrollbar-darkshadow-color`** CSS property is a Microsoft extension that specifies the color of a scroll bar's gutter.\n   *\n   * **Initial value**: `ThreeDDarkShadow`\n   */\n  msScrollbarDarkshadowColor?: MsScrollbarDarkshadowColorProperty;\n  /**\n   * The `**-ms-scrollbar-face-color**` CSS property is a Microsoft extension that specifies the color of the scroll box and scroll arrows of a scroll bar.\n   *\n   * **Initial value**: `ThreeDFace`\n   */\n  msScrollbarFaceColor?: MsScrollbarFaceColorProperty;\n  /**\n   * The `**-ms-scrollbar-highlight-color**` CSS property is a Microsoft extension that specifies the color of the slider tray, the top and left edges of the scroll box, and the scroll arrows of a scroll bar.\n   *\n   * **Initial value**: `ThreeDHighlight`\n   */\n  msScrollbarHighlightColor?: MsScrollbarHighlightColorProperty;\n  /**\n   * The **`-ms-scrollbar-shadow-color`** CSS property is a Microsoft extension that specifies the color of the bottom and right edges of the scroll box and scroll arrows of a scroll bar.\n   *\n   * **Initial value**: `ThreeDDarkShadow`\n   */\n  msScrollbarShadowColor?: MsScrollbarShadowColorProperty;\n  /**\n   * The **`-ms-text-autospace`** CSS property is a Microsoft extension that specifies the autospacing and narrow space width adjustment of text.\n   *\n   * **Initial value**: `none`\n   */\n  msTextAutospace?: MsTextAutospaceProperty;\n  /**\n   * The **`text-combine-upright`** CSS property sets the combination of characters into the space of a single character. If the combined text is wider than 1em, the user agent must fit the contents within 1em. The resulting composition is treated as a single upright glyph for layout and decoration. This property only has an effect in vertical writing modes.\n   *\n   * **Initial value**: `none`\n   */\n  msTextCombineHorizontal?: TextCombineUprightProperty;\n  /**\n   * The **`text-overflow`** CSS property sets how hidden overflow content is signaled to users. It can be clipped, display an ellipsis ('`…`'), or display a custom string.\n   *\n   * **Initial value**: `clip`\n   */\n  msTextOverflow?: TextOverflowProperty;\n  /**\n   * The **`touch-action`** CSS property sets how a region can be manipulated by a touchscreen user (for example, by zooming features built into the browser).\n   *\n   * **Initial value**: `auto`\n   */\n  msTouchAction?: TouchActionProperty;\n  /**\n   * The **`-ms-touch-select`** CSS property is a Microsoft extension that toggles the gripper visual elements that enable touch text selection.\n   *\n   * **Initial value**: `grippers`\n   */\n  msTouchSelect?: MsTouchSelectProperty;\n  /**\n   * The **`transform`** CSS property lets you rotate, scale, skew, or translate an element. It modifies the coordinate space of the CSS visual formatting model.\n   *\n   * **Initial value**: `none`\n   */\n  msTransform?: TransformProperty;\n  /**\n   * The **`transform-origin`** CSS property sets the origin for an element's transformations.\n   *\n   * **Initial value**: `50% 50% 0`\n   */\n  msTransformOrigin?: TransformOriginProperty<TLength>;\n  /**\n   * The **`transition-delay`** CSS property specifies the duration to wait before starting a property's transition effect when its value changes.\n   *\n   * **Initial value**: `0s`\n   */\n  msTransitionDelay?: GlobalsString;\n  /**\n   * The **`transition-duration`** CSS property sets the length of time a transition animation should take to complete. By default, the value is `0s`, meaning that no animation will occur.\n   *\n   * **Initial value**: `0s`\n   */\n  msTransitionDuration?: GlobalsString;\n  /**\n   * The **`transition-property`** CSS property sets the CSS properties to which a transition effect should be applied.\n   *\n   * **Initial value**: all\n   */\n  msTransitionProperty?: TransitionPropertyProperty;\n  /**\n   * The **`transition-timing-function`** CSS property sets how intermediate values are calculated for CSS properties being affected by a transition effect.\n   *\n   * **Initial value**: `ease`\n   */\n  msTransitionTimingFunction?: TransitionTimingFunctionProperty;\n  /**\n   * The `**user-select**` CSS property controls whether the user can select text. This doesn't have any effect on content loaded as chrome, except in textboxes.\n   *\n   * **Initial value**: `text`\n   */\n  msUserSelect?: MsUserSelectProperty;\n  /**\n   * The **`word-break`** CSS property sets whether line breaks appear wherever the text would otherwise overflow its content box.\n   *\n   * **Initial value**: `normal`\n   */\n  msWordBreak?: WordBreakProperty;\n  /**\n   * The **`-ms-wrap-flow`** CSS property is a Microsoft extension that specifies how exclusions impact inline content within block-level elements.\n   *\n   * **Initial value**: `auto`\n   */\n  msWrapFlow?: MsWrapFlowProperty;\n  /**\n   * The **`-ms-wrap-margin`** CSS property is a Microsoft extension that specifies a margin that offsets the inner wrap shape from other shapes.\n   *\n   * **Initial value**: `0`\n   */\n  msWrapMargin?: MsWrapMarginProperty<TLength>;\n  /**\n   * The **`-ms-wrap-through`** CSS property is a Microsoft extension that specifies how content should wrap around an exclusion element.\n   *\n   * **Initial value**: `wrap`\n   */\n  msWrapThrough?: MsWrapThroughProperty;\n  /**\n   * The **`writing-mode`** CSS property sets whether lines of text are laid out horizontally or vertically, as well as the direction in which blocks progress.\n   *\n   * **Initial value**: `horizontal-tb`\n   */\n  msWritingMode?: WritingModeProperty;\n  /**\n   * The **`object-fit`** CSS property sets how the content of a replaced element, such as an `<img>` or `<video>`, should be resized to fit its container.\n   *\n   * **Initial value**: `fill`\n   */\n  OObjectFit?: ObjectFitProperty;\n  /**\n   * The **`object-position`** CSS property specifies the alignment of the selected replaced element's contents within the element's box. Areas of the box which aren't covered by the replaced element's object will show the element's background.\n   *\n   * **Initial value**: `50% 50%`\n   */\n  OObjectPosition?: ObjectPositionProperty<TLength>;\n  /**\n   * The **`tab-size`** CSS property is used to customize the width of a tab (`U+0009`) character.\n   *\n   * **Initial value**: `8`\n   */\n  OTabSize?: TabSizeProperty<TLength>;\n  /**\n   * The **`text-overflow`** CSS property sets how hidden overflow content is signaled to users. It can be clipped, display an ellipsis ('`…`'), or display a custom string.\n   *\n   * **Initial value**: `clip`\n   */\n  OTextOverflow?: TextOverflowProperty;\n  /**\n   * The **`transform-origin`** CSS property sets the origin for an element's transformations.\n   *\n   * **Initial value**: `50% 50% 0`\n   */\n  OTransformOrigin?: TransformOriginProperty<TLength>;\n  /**\n   * The CSS **`align-content`** property sets how the browser distributes space between and around content items along the cross-axis of a flexbox container, and the main-axis of a grid container.\n   *\n   * **Initial value**: `normal`\n   */\n  WebkitAlignContent?: AlignContentProperty;\n  /**\n   * The CSS **`align-items`** property sets the `align-self` value on all direct children as a group. The align-self property sets the alignment of an item within its containing block. In Flexbox it controls the alignment of items on the Cross Axis, in Grid Layout it controls the alignment of items on the Block Axis within their grid area.\n   *\n   * **Initial value**: `normal`\n   */\n  WebkitAlignItems?: AlignItemsProperty;\n  /**\n   * The **`align-self`** CSS property aligns flex items of the current flex line overriding the `align-items` value. If any of the item's cross-axis margin is set to `auto`, then `align-self` is ignored. In Grid layout `align-self` aligns the item inside the grid area.\n   *\n   * **Initial value**: `auto`\n   */\n  WebkitAlignSelf?: AlignSelfProperty;\n  /**\n   * The **`animation-delay`** CSS property sets when an animation starts. The animation can start later, immediately from its beginning, or immediately and partway through the animation.\n   *\n   * **Initial value**: `0s`\n   */\n  WebkitAnimationDelay?: GlobalsString;\n  /**\n   * The **`animation-direction`** CSS property sets whether an animation should play forwards, backwards, or alternating back and forth.\n   *\n   * **Initial value**: `normal`\n   */\n  WebkitAnimationDirection?: AnimationDirectionProperty;\n  /**\n   * The **`animation-duration`** CSS property sets the length of time that an animation takes to complete one cycle.\n   *\n   * **Initial value**: `0s`\n   */\n  WebkitAnimationDuration?: GlobalsString;\n  /**\n   * The **`animation-fill-mode`** CSS property sets how a CSS animation applies styles to its target before and after its execution.\n   *\n   * **Initial value**: `none`\n   */\n  WebkitAnimationFillMode?: AnimationFillModeProperty;\n  /**\n   * The **`animation-iteration-count`** CSS property sets the number of times an animation cycle should be played before stopping.\n   *\n   * **Initial value**: `1`\n   */\n  WebkitAnimationIterationCount?: AnimationIterationCountProperty;\n  /**\n   * The **`animation-name`** CSS property sets one or more animations to apply to an element. Each name is an `@keyframes` at-rule that sets the property values for the animation sequence.\n   *\n   * **Initial value**: `none`\n   */\n  WebkitAnimationName?: AnimationNameProperty;\n  /**\n   * The **`animation-play-state`** CSS property sets whether an animation is running or paused.\n   *\n   * **Initial value**: `running`\n   */\n  WebkitAnimationPlayState?: AnimationPlayStateProperty;\n  /**\n   * The `**animation-timing-function**` CSS property sets how an animation progresses through the duration of each cycle.\n   *\n   * **Initial value**: `ease`\n   */\n  WebkitAnimationTimingFunction?: AnimationTimingFunctionProperty;\n  /**\n   * The **`-moz-appearance`** CSS property is used in Gecko (Firefox) to display an element using platform-native styling based on the operating system's theme.\n   *\n   * **Initial value**: `none` (but this value is overridden in the user agent CSS)\n   */\n  WebkitAppearance?: WebkitAppearanceProperty;\n  /**\n   * The **`backdrop-filter`** CSS property lets you apply graphical effects such as blurring or color shifting to the area behind an element. Because it applies to everything _behind_ the element, to see the effect you must make the element or its background at least partially transparent.\n   *\n   * **Initial value**: `none`\n   */\n  WebkitBackdropFilter?: BackdropFilterProperty;\n  /**\n   * The **`backface-visibility`** CSS property sets whether the back face of an element is visible when turned towards the user.\n   *\n   * **Initial value**: `visible`\n   */\n  WebkitBackfaceVisibility?: BackfaceVisibilityProperty;\n  /**\n   * The **`background-clip`** CSS property sets whether an element's background `<color>` or `<image>` extends underneath its border.\n   *\n   * **Initial value**: `border-box`\n   */\n  WebkitBackgroundClip?: BackgroundClipProperty;\n  /**\n   * The **`background-origin`** CSS property sets the _background positioning area_. In other words, it sets the origin position of an image set with the `background-image` property.\n   *\n   * **Initial value**: `padding-box`\n   */\n  WebkitBackgroundOrigin?: BackgroundOriginProperty;\n  /**\n   * The **`background-size`** CSS property sets the size of the element's background image. The image can be left to its natural size, stretched, or constrained to fit the available space.\n   *\n   * **Initial value**: `auto auto`\n   */\n  WebkitBackgroundSize?: BackgroundSizeProperty<TLength>;\n  /** **Initial value**: `currentcolor` */\n  WebkitBorderBeforeColor?: WebkitBorderBeforeColorProperty;\n  /** **Initial value**: `none` */\n  WebkitBorderBeforeStyle?: WebkitBorderBeforeStyleProperty;\n  /** **Initial value**: `medium` */\n  WebkitBorderBeforeWidth?: WebkitBorderBeforeWidthProperty<TLength>;\n  /**\n   * The **`border-bottom-left-radius`** CSS property rounds the bottom-left corner of an element.\n   *\n   * **Initial value**: `0`\n   */\n  WebkitBorderBottomLeftRadius?: BorderBottomLeftRadiusProperty<TLength>;\n  /**\n   * The **`border-bottom-right-radius`** CSS property rounds the bottom-right corner of an element.\n   *\n   * **Initial value**: `0`\n   */\n  WebkitBorderBottomRightRadius?: BorderBottomRightRadiusProperty<TLength>;\n  /**\n   * The **`border-image-slice`** CSS property divides the image specified by `border-image-source` into regions. These regions form the components of an element's border image.\n   *\n   * **Initial value**: `100%`\n   */\n  WebkitBorderImageSlice?: BorderImageSliceProperty;\n  /**\n   * The **`border-top-left-radius`** CSS property rounds the top-left corner of an element.\n   *\n   * **Initial value**: `0`\n   */\n  WebkitBorderTopLeftRadius?: BorderTopLeftRadiusProperty<TLength>;\n  /**\n   * The **`border-top-right-radius`** CSS property rounds the top-right corner of an element.\n   *\n   * **Initial value**: `0`\n   */\n  WebkitBorderTopRightRadius?: BorderTopRightRadiusProperty<TLength>;\n  /**\n   * The **`box-decoration-break`** CSS property specifies how an element's fragments should be rendered when broken across multiple lines, columns, or pages.\n   *\n   * **Initial value**: `slice`\n   */\n  WebkitBoxDecorationBreak?: BoxDecorationBreakProperty;\n  /**\n   * The **`-webkit-box-reflect`** CSS property lets you reflect the content of an element in one specific direction.\n   *\n   * **Initial value**: `none`\n   */\n  WebkitBoxReflect?: WebkitBoxReflectProperty<TLength>;\n  /**\n   * The **`box-shadow`** CSS property adds shadow effects around an element's frame. You can set multiple effects separated by commas. A box shadow is described by X and Y offsets relative to the element, blur and spread radii, and color.\n   *\n   * **Initial value**: `none`\n   */\n  WebkitBoxShadow?: BoxShadowProperty;\n  /**\n   * The **`box-sizing`** CSS property defines how the user agent should calculate the total width and height of an element.\n   *\n   * **Initial value**: `content-box`\n   */\n  WebkitBoxSizing?: BoxSizingProperty;\n  /**\n   * The `**clip-path**` CSS property creates a clipping region that sets what part of an element should be shown. Parts that are inside the region are shown, while those outside are hidden.\n   *\n   * **Initial value**: `none`\n   */\n  WebkitClipPath?: ClipPathProperty;\n  /**\n   * The **`color-adjust`** CSS property sets what, if anything, the user agent may do to optimize the appearance of the element on the output device. By default, the browser is allowed to make any adjustments to the element's appearance it determines to be necessary and prudent given the type and capabilities of the output device.\n   *\n   * **Initial value**: `economy`\n   */\n  WebkitColorAdjust?: ColorAdjustProperty;\n  /**\n   * The **`column-count`** CSS property breaks an element's content into the specified number of columns.\n   *\n   * **Initial value**: `auto`\n   */\n  WebkitColumnCount?: ColumnCountProperty;\n  /**\n   * The **`column-fill`** CSS property controls how an element's contents are balanced when broken into columns.\n   *\n   * **Initial value**: `balance`\n   */\n  WebkitColumnFill?: ColumnFillProperty;\n  /**\n   * The **`column-gap`** CSS property sets the size of the gap (gutter) between an element's columns.\n   *\n   * **Initial value**: `normal`\n   */\n  WebkitColumnGap?: ColumnGapProperty<TLength>;\n  /**\n   * The **`column-rule-color`** CSS property sets the color of the rule (line) drawn between columns in a multi-column layout.\n   *\n   * **Initial value**: `currentcolor`\n   */\n  WebkitColumnRuleColor?: ColumnRuleColorProperty;\n  /**\n   * The **`column-rule-style`** CSS property sets the style of the line drawn between columns in a multi-column layout.\n   *\n   * **Initial value**: `none`\n   */\n  WebkitColumnRuleStyle?: ColumnRuleStyleProperty;\n  /**\n   * The **`column-rule-width`** CSS property sets the width of the rule (line) drawn between columns in a multi-column layout.\n   *\n   * **Initial value**: `medium`\n   */\n  WebkitColumnRuleWidth?: ColumnRuleWidthProperty<TLength>;\n  /**\n   * The **`column-span`** CSS property makes it possible for an element to span across all columns when its value is set to `all`.\n   *\n   * **Initial value**: `none`\n   */\n  WebkitColumnSpan?: ColumnSpanProperty;\n  /**\n   * The **`column-width`** CSS property specifies the ideal column width in a multi-column layout. The container will have as many columns as can fit without any of them having a width less than the `column-width` value. If the width of the container is narrower than the specified value, the single column's width will be smaller than the declared column width.\n   *\n   * **Initial value**: `auto`\n   */\n  WebkitColumnWidth?: ColumnWidthProperty<TLength>;\n  /**\n   * The **`filter`** CSS property applies graphical effects like blur or color shift to an element. Filters are commonly used to adjust the rendering of images, backgrounds, and borders.\n   *\n   * **Initial value**: `none`\n   */\n  WebkitFilter?: FilterProperty;\n  /**\n   * The **`flex-basis`** CSS property sets the initial main size of a flex item. It sets the size of the content box unless otherwise set with `box-sizing`.\n   *\n   * **Initial value**: `auto`\n   */\n  WebkitFlexBasis?: FlexBasisProperty<TLength>;\n  /**\n   * The **`flex-direction`** CSS property sets how flex items are placed in the flex container defining the main axis and the direction (normal or reversed).\n   *\n   * **Initial value**: `row`\n   */\n  WebkitFlexDirection?: FlexDirectionProperty;\n  /**\n   * The **`flex-grow`** CSS property sets how much of the available space in the flex container should be assigned to that item (the flex grow factor). If all sibling items have the same flex grow factor, then all items will receive the same share of available space, otherwise it is distributed according to the ratio defined by the different flex grow factors.\n   *\n   * **Initial value**: `0`\n   */\n  WebkitFlexGrow?: GlobalsNumber;\n  /**\n   * The **`flex-shrink`** CSS property sets the flex shrink factor of a flex item. If the size of flex items is larger than the flex container, items shrink to fit according to `flex-shrink`.\n   *\n   * **Initial value**: `1`\n   */\n  WebkitFlexShrink?: GlobalsNumber;\n  /**\n   * The **`flex-wrap`** CSS property sets whether flex items are forced onto one line or can wrap onto multiple lines. If wrapping is allowed, it sets the direction that lines are stacked.\n   *\n   * **Initial value**: `nowrap`\n   */\n  WebkitFlexWrap?: FlexWrapProperty;\n  /**\n   * The **`font-feature-settings`** CSS property controls advanced typographic features in OpenType fonts.\n   *\n   * **Initial value**: `normal`\n   */\n  WebkitFontFeatureSettings?: FontFeatureSettingsProperty;\n  /**\n   * The **`font-kerning`** CSS property sets the use of the kerning information stored in a font.\n   *\n   * **Initial value**: `auto`\n   */\n  WebkitFontKerning?: FontKerningProperty;\n  /**\n   * The **`font-variant-ligatures`** CSS property controls which ligatures and contextual forms are used in textual content of the elements it applies to. This leads to more harmonized forms in the resulting text.\n   *\n   * **Initial value**: `normal`\n   */\n  WebkitFontVariantLigatures?: FontVariantLigaturesProperty;\n  /**\n   * The **`hyphens`** CSS property specifies how words should be hyphenated when text wraps across multiple lines. You can prevent hyphenation entirely, use hyphenation in manually-specified points within the text, or let the browser automatically insert hyphens where appropriate.\n   *\n   * **Initial value**: `manual`\n   */\n  WebkitHyphens?: HyphensProperty;\n  /**\n   * The CSS **`justify-content`** property defines how the browser distributes space between and around content items along the main-axis of a flex container, and the inline axis of a grid container.\n   *\n   * **Initial value**: `normal`\n   */\n  WebkitJustifyContent?: JustifyContentProperty;\n  /**\n   * The **`line-break`** CSS property sets how to break lines of Chinese, Japanese, or Korean (CJK) text when working with punctuation and symbols.\n   *\n   * **Initial value**: `auto`\n   */\n  WebkitLineBreak?: LineBreakProperty;\n  /**\n   * The **`-webkit-line-clamp`** CSS property allows limiting of the contents of a block container to the specified number of lines.\n   *\n   * **Initial value**: `none`\n   */\n  WebkitLineClamp?: WebkitLineClampProperty;\n  /**\n   * The **`margin-inline-end`** CSS property defines the logical inline end margin of an element, which maps to a physical margin depending on the element's writing mode, directionality, and text orientation. In other words, it corresponds to the `margin-top`, `margin-right`, `margin-bottom` or `margin-left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `0`\n   */\n  WebkitMarginEnd?: MarginInlineEndProperty<TLength>;\n  /**\n   * The **`margin-inline-start`** CSS property defines the logical inline start margin of an element, which maps to a physical margin depending on the element's writing mode, directionality, and text orientation. It corresponds to the `margin-top`, `margin-right`, `margin-bottom`, or `margin-left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `0`\n   */\n  WebkitMarginStart?: MarginInlineStartProperty<TLength>;\n  /**\n   * If a `-webkit-mask-image` is specified, `-webkit-mask-attachment` determines whether the mask image's position is fixed within the viewport, or scrolls along with its containing block.\n   *\n   * **Initial value**: `scroll`\n   */\n  WebkitMaskAttachment?: WebkitMaskAttachmentProperty;\n  /**\n   * The **`mask-clip`** CSS property determines the area, which is affected by a mask. The painted content of an element must be restricted to this area.\n   *\n   * **Initial value**: `border`\n   */\n  WebkitMaskClip?: WebkitMaskClipProperty;\n  /**\n   * The **`-webkit-mask-composite`** property specifies the manner in which multiple mask images applied to the same element are composited with one another. Mask images are composited in the opposite order that they are declared with the `-webkit-mask-image` property.\n   *\n   * **Initial value**: `source-over`\n   */\n  WebkitMaskComposite?: WebkitMaskCompositeProperty;\n  /**\n   * The **`mask-image`** CSS property sets the image that is used as mask layer for an element.\n   *\n   * **Initial value**: `none`\n   */\n  WebkitMaskImage?: WebkitMaskImageProperty;\n  /**\n   * The **`mask-origin`** CSS property sets the origin of a mask.\n   *\n   * **Initial value**: `padding`\n   */\n  WebkitMaskOrigin?: WebkitMaskOriginProperty;\n  /**\n   * The **`mask-position`** CSS property sets the initial position, relative to the mask position layer set by `mask-origin`, for each defined mask image.\n   *\n   * **Initial value**: `0% 0%`\n   */\n  WebkitMaskPosition?: WebkitMaskPositionProperty<TLength>;\n  /**\n   * The `-webkit-mask-position-x` CSS property sets the initial horizontal position of a mask image.\n   *\n   * **Initial value**: `0%`\n   */\n  WebkitMaskPositionX?: WebkitMaskPositionXProperty<TLength>;\n  /**\n   * The `-webkit-mask-position-y` CSS property sets the initial vertical position of a mask image.\n   *\n   * **Initial value**: `0%`\n   */\n  WebkitMaskPositionY?: WebkitMaskPositionYProperty<TLength>;\n  /**\n   * The **`mask-repeat`** CSS property sets how mask images are repeated. A mask image can be repeated along the horizontal axis, the vertical axis, both axes, or not repeated at all.\n   *\n   * **Initial value**: `repeat`\n   */\n  WebkitMaskRepeat?: WebkitMaskRepeatProperty;\n  /**\n   * The `-webkit-mask-repeat-x` property specifies whether and how a mask image is repeated (tiled) horizontally.\n   *\n   * **Initial value**: `repeat`\n   */\n  WebkitMaskRepeatX?: WebkitMaskRepeatXProperty;\n  /**\n   * The `-webkit-mask-repeat-y` property sets whether and how a mask image is repeated (tiled) vertically.\n   *\n   * **Initial value**: `repeat`\n   */\n  WebkitMaskRepeatY?: WebkitMaskRepeatYProperty;\n  /**\n   * The **`mask-size`** CSS property specifies the sizes of the mask images. The size of the image can be fully or partially constrained in order to preserve its intrinsic ratio.\n   *\n   * **Initial value**: `auto auto`\n   */\n  WebkitMaskSize?: WebkitMaskSizeProperty<TLength>;\n  /**\n   * The **`max-inline-size`** CSS property defines the horizontal or vertical maximum size of an element's block depending on its writing mode. It corresponds to the `max-width` or the `max-height` property depending on the value defined for `writing-mode`. If the writing mode is vertically oriented, the value of `max-inline-size` relates to the maximal height of the element, otherwise it relates to the maximal width of the element. It relates to `max-block-size`, which defines the other dimension of the element.\n   *\n   * **Initial value**: `0`\n   */\n  WebkitMaxInlineSize?: MaxInlineSizeProperty<TLength>;\n  /**\n   * The **`order`** CSS property sets the order to lay out an item in a flex or grid container. Items in a container are sorted by ascending `order` value and then by their source code order.\n   *\n   * **Initial value**: `0`\n   */\n  WebkitOrder?: GlobalsNumber;\n  /**\n   * The `-webkit-overflow-scrolling` CSS property controls whether or not touch devices use momentum-based scrolling for a given element.\n   *\n   * **Initial value**: `auto`\n   */\n  WebkitOverflowScrolling?: WebkitOverflowScrollingProperty;\n  /**\n   * The **`padding-inline-end`** CSS property defines the logical inline end padding of an element, which maps to a physical padding depending on the element's writing mode, directionality, and text orientation. It corresponds to the `padding-top`, `padding-right`, `padding-bottom`, or `padding-left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `0`\n   */\n  WebkitPaddingEnd?: PaddingInlineEndProperty<TLength>;\n  /**\n   * The **`padding-inline-start`** CSS property defines the logical inline start padding of an element, which maps to a physical padding depending on the element's writing mode, directionality, and text orientation. It corresponds to the `padding-top`, `padding-right`, `padding-bottom`, or `padding-left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `0`\n   */\n  WebkitPaddingStart?: PaddingInlineStartProperty<TLength>;\n  /**\n   * The **`perspective`** CSS property determines the distance between the z=0 plane and the user in order to give a 3D-positioned element some perspective. Each 3D element with z>0 becomes larger; each 3D-element with z<0 becomes smaller. The strength of the effect is determined by the value of this property.\n   *\n   * **Initial value**: `none`\n   */\n  WebkitPerspective?: PerspectiveProperty<TLength>;\n  /**\n   * The **`perspective-origin`** CSS property determines the position at which the viewer is looking. It is used as the _vanishing point_ by the `perspective` property.\n   *\n   * **Initial value**: `50% 50%`\n   */\n  WebkitPerspectiveOrigin?: PerspectiveOriginProperty<TLength>;\n  /**\n   * The **`scroll-snap-type`** CSS property sets how strictly snap points are enforced on the scroll container in case there is one.\n   *\n   * **Initial value**: `none`\n   */\n  WebkitScrollSnapType?: ScrollSnapTypeProperty;\n  /**\n   * The **`shape-margin`** CSS property sets a margin for a CSS shape created using `shape-outside`.\n   *\n   * **Initial value**: `0`\n   */\n  WebkitShapeMargin?: ShapeMarginProperty<TLength>;\n  /**\n   * **`-webkit-tap-highlight-color`** is a non-standard CSS property that sets the color of the highlight that appears over a link while it's being tapped. The highlighting indicates to the user that their tap is being successfully recognized, and indicates which element they're tapping on.\n   *\n   * **Initial value**: `black`\n   */\n  WebkitTapHighlightColor?: WebkitTapHighlightColorProperty;\n  /**\n   * The **`text-combine-upright`** CSS property sets the combination of characters into the space of a single character. If the combined text is wider than 1em, the user agent must fit the contents within 1em. The resulting composition is treated as a single upright glyph for layout and decoration. This property only has an effect in vertical writing modes.\n   *\n   * **Initial value**: `none`\n   */\n  WebkitTextCombine?: TextCombineUprightProperty;\n  /**\n   * The **`text-decoration-color`** CSS property sets the color of decorations added to text by `text-decoration-line`.\n   *\n   * **Initial value**: `currentcolor`\n   */\n  WebkitTextDecorationColor?: TextDecorationColorProperty;\n  /**\n   * The **`text-decoration-line`** CSS property sets the kind of decoration that is used on text in an element, such as an underline or overline.\n   *\n   * **Initial value**: `none`\n   */\n  WebkitTextDecorationLine?: TextDecorationLineProperty;\n  /**\n   * The **`text-decoration-skip`** CSS property sets what parts of an element’s content any text decoration affecting the element must skip over. It controls all text decoration lines drawn by the element and also any text decoration lines drawn by its ancestors.\n   *\n   * **Initial value**: `objects`\n   */\n  WebkitTextDecorationSkip?: TextDecorationSkipProperty;\n  /**\n   * The **`text-decoration-style`** CSS property sets the style of the lines specified by `text-decoration-line`. The style applies to all lines that are set with `text-decoration-line`.\n   *\n   * **Initial value**: `solid`\n   */\n  WebkitTextDecorationStyle?: TextDecorationStyleProperty;\n  /**\n   * The **`text-emphasis-color`** CSS property sets the color of emphasis marks. This value can also be set using the `text-emphasis` shorthand.\n   *\n   * **Initial value**: `currentcolor`\n   */\n  WebkitTextEmphasisColor?: TextEmphasisColorProperty;\n  /**\n   * The **`text-emphasis-position`** CSS property sets where emphasis marks are drawn. Like ruby text, if there isn't enough room for emphasis marks, the line height is increased.\n   *\n   * **Initial value**: `over right`\n   */\n  WebkitTextEmphasisPosition?: GlobalsString;\n  /**\n   * The **`text-emphasis-style`** CSS property sets the appearance of emphasis marks. It can also be set, and reset, using the `text-emphasis` shorthand.\n   *\n   * **Initial value**: `none`\n   */\n  WebkitTextEmphasisStyle?: TextEmphasisStyleProperty;\n  /**\n   * The **`-webkit-text-fill-color`** CSS property specifies the fill color of characters of text. If this property is not set, the value of the `color` property is used.\n   *\n   * **Initial value**: `currentcolor`\n   */\n  WebkitTextFillColor?: WebkitTextFillColorProperty;\n  /**\n   * The **`text-orientation`** CSS property sets the orientation of the text characters in a line. It only affects text in vertical mode (when `writing-mode` is not `horizontal-tb`). It is useful for controlling the display of languages that use vertical script, and also for making vertical table headers.\n   *\n   * **Initial value**: `mixed`\n   */\n  WebkitTextOrientation?: TextOrientationProperty;\n  /**\n   * The **`text-size-adjust`** CSS property controls the text inflation algorithm used on some smartphones and tablets. Other browsers will ignore this property.\n   *\n   * **Initial value**: `auto` for smartphone browsers supporting inflation, `none` in other cases (and then not modifiable).\n   */\n  WebkitTextSizeAdjust?: TextSizeAdjustProperty;\n  /**\n   * The **`-webkit-text-stroke-color`** CSS property specifies the stroke color of characters of text. If this property is not set, the value of the `color` property is used.\n   *\n   * **Initial value**: `currentcolor`\n   */\n  WebkitTextStrokeColor?: WebkitTextStrokeColorProperty;\n  /**\n   * The **`-webkit-text-stroke-width`** CSS property specifies the width of the stroke for text.\n   *\n   * **Initial value**: `0`\n   */\n  WebkitTextStrokeWidth?: WebkitTextStrokeWidthProperty<TLength>;\n  /**\n   * The `-webkit-touch-callout` CSS property controls the display of the default callout shown when you touch and hold a touch target.\n   *\n   * **Initial value**: `default`\n   */\n  WebkitTouchCallout?: WebkitTouchCalloutProperty;\n  /**\n   * The **`transform`** CSS property lets you rotate, scale, skew, or translate an element. It modifies the coordinate space of the CSS visual formatting model.\n   *\n   * **Initial value**: `none`\n   */\n  WebkitTransform?: TransformProperty;\n  /**\n   * The **`transform-origin`** CSS property sets the origin for an element's transformations.\n   *\n   * **Initial value**: `50% 50% 0`\n   */\n  WebkitTransformOrigin?: TransformOriginProperty<TLength>;\n  /**\n   * The **`transform-style`** CSS property sets whether children of an element are positioned in the 3D space or are flattened in the plane of the element.\n   *\n   * **Initial value**: `flat`\n   */\n  WebkitTransformStyle?: TransformStyleProperty;\n  /**\n   * The **`transition-delay`** CSS property specifies the duration to wait before starting a property's transition effect when its value changes.\n   *\n   * **Initial value**: `0s`\n   */\n  WebkitTransitionDelay?: GlobalsString;\n  /**\n   * The **`transition-duration`** CSS property sets the length of time a transition animation should take to complete. By default, the value is `0s`, meaning that no animation will occur.\n   *\n   * **Initial value**: `0s`\n   */\n  WebkitTransitionDuration?: GlobalsString;\n  /**\n   * The **`transition-property`** CSS property sets the CSS properties to which a transition effect should be applied.\n   *\n   * **Initial value**: all\n   */\n  WebkitTransitionProperty?: TransitionPropertyProperty;\n  /**\n   * The **`transition-timing-function`** CSS property sets how intermediate values are calculated for CSS properties being affected by a transition effect.\n   *\n   * **Initial value**: `ease`\n   */\n  WebkitTransitionTimingFunction?: TransitionTimingFunctionProperty;\n  /** **Initial value**: `read-only` */\n  WebkitUserModify?: WebkitUserModifyProperty;\n  /**\n   * The `**user-select**` CSS property controls whether the user can select text. This doesn't have any effect on content loaded as chrome, except in textboxes.\n   *\n   * **Initial value**: `auto`\n   */\n  WebkitUserSelect?: UserSelectProperty;\n  /**\n   * The **`writing-mode`** CSS property sets whether lines of text are laid out horizontally or vertically, as well as the direction in which blocks progress.\n   *\n   * **Initial value**: `horizontal-tb`\n   */\n  WebkitWritingMode?: WritingModeProperty;\n}\n\nexport interface VendorShorthandProperties<TLength = string | 0> {\n  /** The **`animation`** shorthand CSS property sets an animated transition between styles. It is a shorthand for `animation-name`, `animation-duration`, `animation-timing-function`, `animation-delay`, `animation-iteration-count`, `animation-direction`, `animation-fill-mode`, and `animation-play-state`. */\n  MozAnimation?: AnimationProperty;\n  /** The **`border-image`** CSS property draws an image in place of an element's `border-style`. */\n  MozBorderImage?: BorderImageProperty;\n  /** The **`column-rule`** CSS property sets the width, style, and color of the rule (line) drawn between columns in a multi-column layout. */\n  MozColumnRule?: ColumnRuleProperty<TLength>;\n  /** The **`columns`** CSS property sets the column width and column count of an element. */\n  MozColumns?: ColumnsProperty<TLength>;\n  /** The **`transition`** CSS property is a shorthand property for `transition-property`, `transition-duration`, `transition-timing-function`, and `transition-delay`. */\n  MozTransition?: TransitionProperty;\n  /** The **`-ms-content-zoom-limit`** CSS shorthand property is a Microsoft extension that specifies values for the `-ms-content-zoom-limit-min` and `-ms-content-zoom-limit-max` properties. */\n  msContentZoomLimit?: GlobalsString;\n  /** The **`-ms-content-zoom-snap`** CSS shorthand property is a Microsoft extension that specifies values for the `-ms-content-zoom-snap-type` and `-ms-content-zoom-snap-points` properties. */\n  msContentZoomSnap?: MsContentZoomSnapProperty;\n  /** The **`flex`** CSS property sets how a flex item will grow or shrink to fit the space available in its flex container. It is a shorthand for `flex-grow`, `flex-shrink`, and `flex-basis`. */\n  msFlex?: FlexProperty<TLength>;\n  /** The **\\-ms-scroll-limit** CSS property is a Microsoft extension that specifies values for the `-ms-scroll-limit-x-min`, `-ms-scroll-limit-y-min`, `-ms-scroll-limit-x-max`, and `-ms-scroll-limit-y-max` properties. */\n  msScrollLimit?: GlobalsString;\n  /** The **`-ms-scroll-snap-x`** CSS shorthand property is a Microsoft extension that specifies values for the `-ms-scroll-snap-type` and `-ms-scroll-snap-points-x` properties. */\n  msScrollSnapX?: GlobalsString;\n  /** The **`-ms-scroll-snap-x`** CSS shorthand property is a Microsoft extension that specifies values for the `-ms-scroll-snap-type` and `-ms-scroll-snap-points-y` properties. */\n  msScrollSnapY?: GlobalsString;\n  /** The **`transition`** CSS property is a shorthand property for `transition-property`, `transition-duration`, `transition-timing-function`, and `transition-delay`. */\n  msTransition?: TransitionProperty;\n  /** The **`animation`** shorthand CSS property sets an animated transition between styles. It is a shorthand for `animation-name`, `animation-duration`, `animation-timing-function`, `animation-delay`, `animation-iteration-count`, `animation-direction`, `animation-fill-mode`, and `animation-play-state`. */\n  WebkitAnimation?: AnimationProperty;\n  /** The **`-webkit-border-before`** CSS property is a shorthand property for setting the individual logical block start border property values in a single place in the style sheet. */\n  WebkitBorderBefore?: WebkitBorderBeforeProperty<TLength>;\n  /** The **`border-image`** CSS property draws an image in place of an element's `border-style`. */\n  WebkitBorderImage?: BorderImageProperty;\n  /** The **`border-radius`** CSS property rounds the corners of an element's outer border edge. You can set a single radius to make circular corners, or two radii to make elliptical corners. */\n  WebkitBorderRadius?: BorderRadiusProperty<TLength>;\n  /** The **`column-rule`** CSS property sets the width, style, and color of the rule (line) drawn between columns in a multi-column layout. */\n  WebkitColumnRule?: ColumnRuleProperty<TLength>;\n  /** The **`columns`** CSS property sets the column width and column count of an element. */\n  WebkitColumns?: ColumnsProperty<TLength>;\n  /** The **`flex`** CSS property sets how a flex item will grow or shrink to fit the space available in its flex container. It is a shorthand for `flex-grow`, `flex-shrink`, and `flex-basis`. */\n  WebkitFlex?: FlexProperty<TLength>;\n  /** The **`flex-flow`** CSS property is a shorthand property for `flex-direction` and `flex-wrap` properties. */\n  WebkitFlexFlow?: FlexFlowProperty;\n  /** The **`mask`** CSS property hides an element (partially or fully) by masking or clipping the image at specific points. */\n  WebkitMask?: WebkitMaskProperty<TLength>;\n  /** The **`text-emphasis`** CSS property applies emphasis marks to text (except spaces and control characters). It is a shorthand for `text-emphasis-style` and `text-emphasis-color`. */\n  WebkitTextEmphasis?: TextEmphasisProperty;\n  /** The **`-webkit-text-stroke`** CSS property specifies the width and color of strokes for text characters. This is a shorthand property for the longhand properties `-webkit-text-stroke-width` and `-webkit-text-stroke-color`. */\n  WebkitTextStroke?: WebkitTextStrokeProperty<TLength>;\n  /** The **`transition`** CSS property is a shorthand property for `transition-property`, `transition-duration`, `transition-timing-function`, and `transition-delay`. */\n  WebkitTransition?: TransitionProperty;\n}\n\nexport interface VendorProperties<TLength = string | 0> extends VendorLonghandProperties<TLength>, VendorShorthandProperties<TLength> {}\n\nexport interface ObsoleteProperties<TLength = string | 0> {\n  /**\n   * The **`box-align`** CSS property specifies how an element aligns its contents across its layout in a perpendicular direction. The effect of the property is only visible if there is extra space in the box.\n   *\n   * **Initial value**: `stretch`\n   *\n   * @deprecated\n   */\n  boxAlign?: BoxAlignProperty;\n  /**\n   * The **`box-direction`** CSS property specifies whether a box lays out its contents normally (from the top or left edge), or in reverse (from the bottom or right edge).\n   *\n   * **Initial value**: `normal`\n   *\n   * @deprecated\n   */\n  boxDirection?: BoxDirectionProperty;\n  /**\n   * The **`-moz-box-flex`** and **`-webkit-box-flex`** CSS properties specify how a `-moz-box` or `-webkit-box` grows to fill the box that contains it, in the direction of the containing box's layout.\n   *\n   * **Initial value**: `0`\n   *\n   * @deprecated\n   */\n  boxFlex?: GlobalsNumber;\n  /**\n   * The **`box-flex-group`** CSS property assigns the flexbox's child elements to a flex group.\n   *\n   * **Initial value**: `1`\n   *\n   * @deprecated\n   */\n  boxFlexGroup?: GlobalsNumber;\n  /**\n   * The **`box-lines`** CSS property determines whether the box may have a single or multiple lines (rows for horizontally oriented boxes, columns for vertically oriented boxes).\n   *\n   * **Initial value**: `single`\n   *\n   * @deprecated\n   */\n  boxLines?: BoxLinesProperty;\n  /**\n   * The **`box-ordinal-group`** CSS property assigns the flexbox's child elements to an ordinal group.\n   *\n   * **Initial value**: `1`\n   *\n   * @deprecated\n   */\n  boxOrdinalGroup?: GlobalsNumber;\n  /**\n   * The **`box-orient`** CSS property specifies whether an element lays out its contents horizontally or vertically.\n   *\n   * **Initial value**: `inline-axis` (`horizontal` in XUL)\n   *\n   * @deprecated\n   */\n  boxOrient?: BoxOrientProperty;\n  /**\n   * The **`-moz-box-pack`** and **`-webkit-box-pack`** CSS properties specify how a `-moz-box` or `-webkit-box` packs its contents in the direction of its layout. The effect of this is only visible if there is extra space in the box.\n   *\n   * **Initial value**: `start`\n   *\n   * @deprecated\n   */\n  boxPack?: BoxPackProperty;\n  /**\n   * The **`clip`** CSS property defines what portion of an element is visible. The `clip` property applies only to absolutely positioned elements, that is elements with `position:absolute` or `position:fixed`.\n   *\n   * **Initial value**: `auto`\n   *\n   * @deprecated\n   */\n  clip?: ClipProperty;\n  /**\n   * The **`font-variant-alternates`** CSS property controls the usage of alternate glyphs. These alternate glyphs may be referenced by alternative names defined in `@font-feature-values`.\n   *\n   * **Initial value**: `normal`\n   *\n   * @deprecated\n   */\n  fontVariantAlternates?: FontVariantAlternatesProperty;\n  /**\n   * The **`column-gap`** CSS property sets the size of the gap (gutter) between an element's columns.\n   *\n   * **Initial value**: `0`\n   *\n   * @deprecated\n   */\n  gridColumnGap?: GridColumnGapProperty<TLength>;\n  /**\n   * The **`gap`** CSS property sets the gaps (gutters) between rows and columns. It is a shorthand for `row-gap` and `column-gap`.\n   *\n   * @deprecated\n   */\n  gridGap?: GridGapProperty<TLength>;\n  /**\n   * The **`row-gap`** CSS property sets the size of the gap (gutter) between an element's grid rows.\n   *\n   * **Initial value**: `0`\n   *\n   * @deprecated\n   */\n  gridRowGap?: GridRowGapProperty<TLength>;\n  /**\n   * The **`ime-mode`** CSS property controls the state of the input method editor (IME) for text fields. This property is obsolete.\n   *\n   * **Initial value**: `auto`\n   *\n   * @deprecated\n   */\n  imeMode?: ImeModeProperty;\n  /**\n   * The **`inset-block`** CSS property defines the logical block start and end offsets of an element, which maps to physical offsets depending on the element's writing mode, directionality, and text orientation. It corresponds to the `top` and `bottom`, or `right` and `left` properties depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `auto`\n   *\n   * @deprecated\n   */\n  offsetBlock?: InsetBlockProperty<TLength>;\n  /**\n   * The **`inset-block-end`** CSS property defines the logical block end offset of an element, which maps to a physical inset depending on the element's writing mode, directionality, and text orientation. It corresponds to the `top`, `right`, `bottom`, or `left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `auto`\n   *\n   * @deprecated\n   */\n  offsetBlockEnd?: InsetBlockEndProperty<TLength>;\n  /**\n   * The **`inset-block-start`** CSS property defines the logical block start offset of an element, which maps to a physical inset depending on the element's writing mode, directionality, and text orientation. It corresponds to the `top`, `right`, `bottom`, or `left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `auto`\n   *\n   * @deprecated\n   */\n  offsetBlockStart?: InsetBlockStartProperty<TLength>;\n  /**\n   * The **`inset-inline`** CSS property defines the logical block start and end offsets of an element, which maps to physical offsets depending on the element's writing mode, directionality, and text orientation. It corresponds to the `top` and `bottom`, or `right` and `left` properties depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `auto`\n   *\n   * @deprecated\n   */\n  offsetInline?: InsetInlineProperty<TLength>;\n  /**\n   * The **`inset-inline-end`** CSS property defines the logical inline end inset of an element, which maps to a physical inset depending on the element's writing mode, directionality, and text orientation. It corresponds to the `top`, `right`, `bottom`, or `left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `auto`\n   *\n   * @deprecated\n   */\n  offsetInlineEnd?: InsetInlineEndProperty<TLength>;\n  /**\n   * The **`inset-inline-start`** CSS property defines the logical inline start inset of an element, which maps to a physical offset depending on the element's writing mode, directionality, and text orientation. It corresponds to the `top`, `right`, `bottom`, or `left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `auto`\n   *\n   * @deprecated\n   */\n  offsetInlineStart?: InsetInlineStartProperty<TLength>;\n  /**\n   * The **`scroll-snap-coordinate`** CSS property defines the x and y coordinate positions within an element that will align with its nearest ancestor scroll container's `scroll-snap-destination` for each respective axis.\n   *\n   * **Initial value**: `none`\n   *\n   * @deprecated\n   */\n  scrollSnapCoordinate?: ScrollSnapCoordinateProperty<TLength>;\n  /**\n   * The **`scroll-snap-destination`** CSS property defines the position in x and y coordinates within the scroll container's visual viewport which element snap points align with.\n   *\n   * **Initial value**: `0px 0px`\n   *\n   * @deprecated\n   */\n  scrollSnapDestination?: ScrollSnapDestinationProperty<TLength>;\n  /**\n   * The **`scroll-snap-points-x`** CSS property defines the horizontal positioning of snap points within the content of the scroll container they are applied to.\n   *\n   * **Initial value**: `none`\n   *\n   * @deprecated\n   */\n  scrollSnapPointsX?: ScrollSnapPointsXProperty;\n  /**\n   * The **`scroll-snap-points-y`** CSS property defines the vertical positioning of snap points within the content of the scroll container they are applied to.\n   *\n   * **Initial value**: `none`\n   *\n   * @deprecated\n   */\n  scrollSnapPointsY?: ScrollSnapPointsYProperty;\n  /**\n   * The **`scroll-snap-type-x`** CSS property defines how strictly snap points are enforced on the horizontal axis of the scroll container in case there is one.\n   *\n   * **Initial value**: `none`\n   *\n   * @deprecated\n   */\n  scrollSnapTypeX?: ScrollSnapTypeXProperty;\n  /**\n   * The **`scroll-snap-type-y`** CSS property defines how strictly snap points are enforced on the vertical axis of the scroll container in case there is one.\n   *\n   * **Initial value**: `none`\n   *\n   * @deprecated\n   */\n  scrollSnapTypeY?: ScrollSnapTypeYProperty;\n  /**\n   * The **`-ms-scrollbar-track-color`** CSS property is a Microsoft extension that specifies the color of the track element of a scrollbar.\n   *\n   * **Initial value**: `Scrollbar`\n   *\n   * @deprecated\n   */\n  scrollbarTrackColor?: MsScrollbarTrackColorProperty;\n  /**\n   * The **`text-combine-upright`** CSS property sets the combination of characters into the space of a single character. If the combined text is wider than 1em, the user agent must fit the contents within 1em. The resulting composition is treated as a single upright glyph for layout and decoration. This property only has an effect in vertical writing modes.\n   *\n   * **Initial value**: `none`\n   *\n   * @deprecated\n   */\n  textCombineHorizontal?: TextCombineUprightProperty;\n  /**\n   * The **`box-align`** CSS property specifies how an element aligns its contents across its layout in a perpendicular direction. The effect of the property is only visible if there is extra space in the box.\n   *\n   * **Initial value**: `stretch`\n   *\n   * @deprecated\n   */\n  KhtmlBoxAlign?: BoxAlignProperty;\n  /**\n   * The **`box-direction`** CSS property specifies whether a box lays out its contents normally (from the top or left edge), or in reverse (from the bottom or right edge).\n   *\n   * **Initial value**: `normal`\n   *\n   * @deprecated\n   */\n  KhtmlBoxDirection?: BoxDirectionProperty;\n  /**\n   * The **`-moz-box-flex`** and **`-webkit-box-flex`** CSS properties specify how a `-moz-box` or `-webkit-box` grows to fill the box that contains it, in the direction of the containing box's layout.\n   *\n   * **Initial value**: `0`\n   *\n   * @deprecated\n   */\n  KhtmlBoxFlex?: GlobalsNumber;\n  /**\n   * The **`box-flex-group`** CSS property assigns the flexbox's child elements to a flex group.\n   *\n   * **Initial value**: `1`\n   *\n   * @deprecated\n   */\n  KhtmlBoxFlexGroup?: GlobalsNumber;\n  /**\n   * The **`box-lines`** CSS property determines whether the box may have a single or multiple lines (rows for horizontally oriented boxes, columns for vertically oriented boxes).\n   *\n   * **Initial value**: `single`\n   *\n   * @deprecated\n   */\n  KhtmlBoxLines?: BoxLinesProperty;\n  /**\n   * The **`box-ordinal-group`** CSS property assigns the flexbox's child elements to an ordinal group.\n   *\n   * **Initial value**: `1`\n   *\n   * @deprecated\n   */\n  KhtmlBoxOrdinalGroup?: GlobalsNumber;\n  /**\n   * The **`box-orient`** CSS property specifies whether an element lays out its contents horizontally or vertically.\n   *\n   * **Initial value**: `inline-axis` (`horizontal` in XUL)\n   *\n   * @deprecated\n   */\n  KhtmlBoxOrient?: BoxOrientProperty;\n  /**\n   * The **`-moz-box-pack`** and **`-webkit-box-pack`** CSS properties specify how a `-moz-box` or `-webkit-box` packs its contents in the direction of its layout. The effect of this is only visible if there is extra space in the box.\n   *\n   * **Initial value**: `start`\n   *\n   * @deprecated\n   */\n  KhtmlBoxPack?: BoxPackProperty;\n  /**\n   * The **`line-break`** CSS property sets how to break lines of Chinese, Japanese, or Korean (CJK) text when working with punctuation and symbols.\n   *\n   * **Initial value**: `auto`\n   *\n   * @deprecated\n   */\n  KhtmlLineBreak?: LineBreakProperty;\n  /**\n   * The **`opacity`** CSS property sets the transparency of an element or the degree to which content behind an element is visible.\n   *\n   * **Initial value**: `1.0`\n   *\n   * @deprecated\n   */\n  KhtmlOpacity?: OpacityProperty;\n  /**\n   * The `**user-select**` CSS property controls whether the user can select text. This doesn't have any effect on content loaded as chrome, except in textboxes.\n   *\n   * **Initial value**: `auto`\n   *\n   * @deprecated\n   */\n  KhtmlUserSelect?: UserSelectProperty;\n  /**\n   * The **`background-clip`** CSS property sets whether an element's background `<color>` or `<image>` extends underneath its border.\n   *\n   * **Initial value**: `border-box`\n   *\n   * @deprecated\n   */\n  MozBackgroundClip?: BackgroundClipProperty;\n  /**\n   * The **`box-decoration-break`** CSS property specifies how an element's fragments should be rendered when broken across multiple lines, columns, or pages.\n   *\n   * **Initial value**: `slice`\n   *\n   * @deprecated\n   */\n  MozBackgroundInlinePolicy?: BoxDecorationBreakProperty;\n  /**\n   * The **`background-origin`** CSS property sets the _background positioning area_. In other words, it sets the origin position of an image set with the `background-image` property.\n   *\n   * **Initial value**: `padding-box`\n   *\n   * @deprecated\n   */\n  MozBackgroundOrigin?: BackgroundOriginProperty;\n  /**\n   * The **`background-size`** CSS property sets the size of the element's background image. The image can be left to its natural size, stretched, or constrained to fit the available space.\n   *\n   * **Initial value**: `auto auto`\n   *\n   * @deprecated\n   */\n  MozBackgroundSize?: BackgroundSizeProperty<TLength>;\n  /**\n   * The **`-moz-binding`** CSS property is used by Mozilla-based applications to attach an XBL binding to a DOM element.\n   *\n   * **Initial value**: `none`\n   *\n   * @deprecated\n   */\n  MozBinding?: MozBindingProperty;\n  /**\n   * In Mozilla applications like Firefox, the **`-moz-border-bottom-colors`** CSS property sets a list of colors for the bottom border.\n   *\n   * **Initial value**: `none`\n   *\n   * @deprecated\n   */\n  MozBorderBottomColors?: MozBorderBottomColorsProperty;\n  /**\n   * In Mozilla applications like Firefox, the **`-moz-border-left-colors`** CSS property sets a list of colors for the left border.\n   *\n   * **Initial value**: `none`\n   *\n   * @deprecated\n   */\n  MozBorderLeftColors?: MozBorderLeftColorsProperty;\n  /**\n   * The **`border-radius`** CSS property rounds the corners of an element's outer border edge. You can set a single radius to make circular corners, or two radii to make elliptical corners.\n   *\n   * @deprecated\n   */\n  MozBorderRadius?: BorderRadiusProperty<TLength>;\n  /**\n   * The **`border-bottom-left-radius`** CSS property rounds the bottom-left corner of an element.\n   *\n   * **Initial value**: `0`\n   *\n   * @deprecated\n   */\n  MozBorderRadiusBottomleft?: BorderBottomLeftRadiusProperty<TLength>;\n  /**\n   * The **`border-bottom-right-radius`** CSS property rounds the bottom-right corner of an element.\n   *\n   * **Initial value**: `0`\n   *\n   * @deprecated\n   */\n  MozBorderRadiusBottomright?: BorderBottomRightRadiusProperty<TLength>;\n  /**\n   * The **`border-top-left-radius`** CSS property rounds the top-left corner of an element.\n   *\n   * **Initial value**: `0`\n   *\n   * @deprecated\n   */\n  MozBorderRadiusTopleft?: BorderTopLeftRadiusProperty<TLength>;\n  /**\n   * The **`border-top-right-radius`** CSS property rounds the top-right corner of an element.\n   *\n   * **Initial value**: `0`\n   *\n   * @deprecated\n   */\n  MozBorderRadiusTopright?: BorderTopRightRadiusProperty<TLength>;\n  /**\n   * In Mozilla applications like Firefox, the **`-moz-border-right-colors`** CSS property sets a list of colors for the right border.\n   *\n   * **Initial value**: `none`\n   *\n   * @deprecated\n   */\n  MozBorderRightColors?: MozBorderRightColorsProperty;\n  /**\n   * In Mozilla applications like Firefox, the **`-moz-border-top-colors`** CSS property sets a list of colors for the top border.\n   *\n   * **Initial value**: `none`\n   *\n   * @deprecated\n   */\n  MozBorderTopColors?: MozBorderTopColorsProperty;\n  /**\n   * The **`box-align`** CSS property specifies how an element aligns its contents across its layout in a perpendicular direction. The effect of the property is only visible if there is extra space in the box.\n   *\n   * **Initial value**: `stretch`\n   *\n   * @deprecated\n   */\n  MozBoxAlign?: BoxAlignProperty;\n  /**\n   * The **`box-direction`** CSS property specifies whether a box lays out its contents normally (from the top or left edge), or in reverse (from the bottom or right edge).\n   *\n   * **Initial value**: `normal`\n   *\n   * @deprecated\n   */\n  MozBoxDirection?: BoxDirectionProperty;\n  /**\n   * The **`-moz-box-flex`** and **`-webkit-box-flex`** CSS properties specify how a `-moz-box` or `-webkit-box` grows to fill the box that contains it, in the direction of the containing box's layout.\n   *\n   * **Initial value**: `0`\n   *\n   * @deprecated\n   */\n  MozBoxFlex?: GlobalsNumber;\n  /**\n   * The **`box-ordinal-group`** CSS property assigns the flexbox's child elements to an ordinal group.\n   *\n   * **Initial value**: `1`\n   *\n   * @deprecated\n   */\n  MozBoxOrdinalGroup?: GlobalsNumber;\n  /**\n   * The **`box-orient`** CSS property specifies whether an element lays out its contents horizontally or vertically.\n   *\n   * **Initial value**: `inline-axis` (`horizontal` in XUL)\n   *\n   * @deprecated\n   */\n  MozBoxOrient?: BoxOrientProperty;\n  /**\n   * The **`-moz-box-pack`** and **`-webkit-box-pack`** CSS properties specify how a `-moz-box` or `-webkit-box` packs its contents in the direction of its layout. The effect of this is only visible if there is extra space in the box.\n   *\n   * **Initial value**: `start`\n   *\n   * @deprecated\n   */\n  MozBoxPack?: BoxPackProperty;\n  /**\n   * The **`box-shadow`** CSS property adds shadow effects around an element's frame. You can set multiple effects separated by commas. A box shadow is described by X and Y offsets relative to the element, blur and spread radii, and color.\n   *\n   * **Initial value**: `none`\n   *\n   * @deprecated\n   */\n  MozBoxShadow?: BoxShadowProperty;\n  /**\n   * The **`opacity`** CSS property sets the transparency of an element or the degree to which content behind an element is visible.\n   *\n   * **Initial value**: `1.0`\n   *\n   * @deprecated\n   */\n  MozOpacity?: OpacityProperty;\n  /**\n   * The **`outline`** CSS property is a shorthand to set various outline properties in a single declaration: `outline-style`, `outline-width`, and `outline-color`.\n   *\n   * @deprecated\n   */\n  MozOutline?: OutlineProperty<TLength>;\n  /**\n   * The **`outline-color`** CSS property sets the color of an element's outline.\n   *\n   * **Initial value**: `invert`, for browsers supporting it, `currentColor` for the other\n   *\n   * @deprecated\n   */\n  MozOutlineColor?: OutlineColorProperty;\n  /**\n   * In Mozilla applications like Firefox, the **`-moz-outline-radius`** CSS property can be used to give an element's `outline` rounded corners.\n   *\n   * @deprecated\n   */\n  MozOutlineRadius?: MozOutlineRadiusProperty<TLength>;\n  /**\n   * The **`outline-style`** CSS property sets the style of an element's outline. An outline is a line that is drawn around an element, outside the `border`.\n   *\n   * **Initial value**: `none`\n   *\n   * @deprecated\n   */\n  MozOutlineStyle?: OutlineStyleProperty;\n  /**\n   * The **`outline-width`** CSS property sets the thickness of an element's outline. An outline is a line that is drawn around an element, outside the `border`.\n   *\n   * **Initial value**: `medium`\n   *\n   * @deprecated\n   */\n  MozOutlineWidth?: OutlineWidthProperty<TLength>;\n  /**\n   * The **`text-align-last`** CSS property sets how the last line of a block or a line, right before a forced line break, is aligned.\n   *\n   * **Initial value**: `auto`\n   *\n   * @deprecated\n   */\n  MozTextAlignLast?: TextAlignLastProperty;\n  /**\n   * The **`-moz-text-blink`** non-standard Mozilla CSS extension specifies the blink mode.\n   *\n   * **Initial value**: `none`\n   *\n   * @deprecated\n   */\n  MozTextBlink?: MozTextBlinkProperty;\n  /**\n   * The **`text-decoration-color`** CSS property sets the color of decorations added to text by `text-decoration-line`.\n   *\n   * **Initial value**: `currentcolor`\n   *\n   * @deprecated\n   */\n  MozTextDecorationColor?: TextDecorationColorProperty;\n  /**\n   * The **`text-decoration-line`** CSS property sets the kind of decoration that is used on text in an element, such as an underline or overline.\n   *\n   * **Initial value**: `none`\n   *\n   * @deprecated\n   */\n  MozTextDecorationLine?: TextDecorationLineProperty;\n  /**\n   * The **`text-decoration-style`** CSS property sets the style of the lines specified by `text-decoration-line`. The style applies to all lines that are set with `text-decoration-line`.\n   *\n   * **Initial value**: `solid`\n   *\n   * @deprecated\n   */\n  MozTextDecorationStyle?: TextDecorationStyleProperty;\n  /**\n   * In Mozilla applications, **`-moz-user-input`** determines if an element will accept user input.\n   *\n   * **Initial value**: `auto`\n   *\n   * @deprecated\n   */\n  MozUserInput?: MozUserInputProperty;\n  /**\n   * The **`-moz-window-shadow`** CSS property specifies whether a window will have a shadow. It only works on Mac OS X.\n   *\n   * **Initial value**: `default`\n   *\n   * @deprecated\n   */\n  MozWindowShadow?: MozWindowShadowProperty;\n  /**\n   * The **`ime-mode`** CSS property controls the state of the input method editor (IME) for text fields. This property is obsolete.\n   *\n   * **Initial value**: `auto`\n   *\n   * @deprecated\n   */\n  msImeMode?: ImeModeProperty;\n  /**\n   * The **`-ms-scrollbar-track-color`** CSS property is a Microsoft extension that specifies the color of the track element of a scrollbar.\n   *\n   * **Initial value**: `Scrollbar`\n   *\n   * @deprecated\n   */\n  msScrollbarTrackColor?: MsScrollbarTrackColorProperty;\n  /**\n   * The **`animation`** shorthand CSS property sets an animated transition between styles. It is a shorthand for `animation-name`, `animation-duration`, `animation-timing-function`, `animation-delay`, `animation-iteration-count`, `animation-direction`, `animation-fill-mode`, and `animation-play-state`.\n   *\n   * @deprecated\n   */\n  OAnimation?: AnimationProperty;\n  /**\n   * The **`animation-delay`** CSS property sets when an animation starts. The animation can start later, immediately from its beginning, or immediately and partway through the animation.\n   *\n   * **Initial value**: `0s`\n   *\n   * @deprecated\n   */\n  OAnimationDelay?: GlobalsString;\n  /**\n   * The **`animation-direction`** CSS property sets whether an animation should play forwards, backwards, or alternating back and forth.\n   *\n   * **Initial value**: `normal`\n   *\n   * @deprecated\n   */\n  OAnimationDirection?: AnimationDirectionProperty;\n  /**\n   * The **`animation-duration`** CSS property sets the length of time that an animation takes to complete one cycle.\n   *\n   * **Initial value**: `0s`\n   *\n   * @deprecated\n   */\n  OAnimationDuration?: GlobalsString;\n  /**\n   * The **`animation-fill-mode`** CSS property sets how a CSS animation applies styles to its target before and after its execution.\n   *\n   * **Initial value**: `none`\n   *\n   * @deprecated\n   */\n  OAnimationFillMode?: AnimationFillModeProperty;\n  /**\n   * The **`animation-iteration-count`** CSS property sets the number of times an animation cycle should be played before stopping.\n   *\n   * **Initial value**: `1`\n   *\n   * @deprecated\n   */\n  OAnimationIterationCount?: AnimationIterationCountProperty;\n  /**\n   * The **`animation-name`** CSS property sets one or more animations to apply to an element. Each name is an `@keyframes` at-rule that sets the property values for the animation sequence.\n   *\n   * **Initial value**: `none`\n   *\n   * @deprecated\n   */\n  OAnimationName?: AnimationNameProperty;\n  /**\n   * The **`animation-play-state`** CSS property sets whether an animation is running or paused.\n   *\n   * **Initial value**: `running`\n   *\n   * @deprecated\n   */\n  OAnimationPlayState?: AnimationPlayStateProperty;\n  /**\n   * The `**animation-timing-function**` CSS property sets how an animation progresses through the duration of each cycle.\n   *\n   * **Initial value**: `ease`\n   *\n   * @deprecated\n   */\n  OAnimationTimingFunction?: AnimationTimingFunctionProperty;\n  /**\n   * The **`background-size`** CSS property sets the size of the element's background image. The image can be left to its natural size, stretched, or constrained to fit the available space.\n   *\n   * **Initial value**: `auto auto`\n   *\n   * @deprecated\n   */\n  OBackgroundSize?: BackgroundSizeProperty<TLength>;\n  /**\n   * The **`border-image`** CSS property draws an image in place of an element's `border-style`.\n   *\n   * @deprecated\n   */\n  OBorderImage?: BorderImageProperty;\n  /**\n   * The **`transform`** CSS property lets you rotate, scale, skew, or translate an element. It modifies the coordinate space of the CSS visual formatting model.\n   *\n   * **Initial value**: `none`\n   *\n   * @deprecated\n   */\n  OTransform?: TransformProperty;\n  /**\n   * The **`transition`** CSS property is a shorthand property for `transition-property`, `transition-duration`, `transition-timing-function`, and `transition-delay`.\n   *\n   * @deprecated\n   */\n  OTransition?: TransitionProperty;\n  /**\n   * The **`transition-delay`** CSS property specifies the duration to wait before starting a property's transition effect when its value changes.\n   *\n   * **Initial value**: `0s`\n   *\n   * @deprecated\n   */\n  OTransitionDelay?: GlobalsString;\n  /**\n   * The **`transition-duration`** CSS property sets the length of time a transition animation should take to complete. By default, the value is `0s`, meaning that no animation will occur.\n   *\n   * **Initial value**: `0s`\n   *\n   * @deprecated\n   */\n  OTransitionDuration?: GlobalsString;\n  /**\n   * The **`transition-property`** CSS property sets the CSS properties to which a transition effect should be applied.\n   *\n   * **Initial value**: all\n   *\n   * @deprecated\n   */\n  OTransitionProperty?: TransitionPropertyProperty;\n  /**\n   * The **`transition-timing-function`** CSS property sets how intermediate values are calculated for CSS properties being affected by a transition effect.\n   *\n   * **Initial value**: `ease`\n   *\n   * @deprecated\n   */\n  OTransitionTimingFunction?: TransitionTimingFunctionProperty;\n  /**\n   * The **`box-align`** CSS property specifies how an element aligns its contents across its layout in a perpendicular direction. The effect of the property is only visible if there is extra space in the box.\n   *\n   * **Initial value**: `stretch`\n   *\n   * @deprecated\n   */\n  WebkitBoxAlign?: BoxAlignProperty;\n  /**\n   * The **`box-direction`** CSS property specifies whether a box lays out its contents normally (from the top or left edge), or in reverse (from the bottom or right edge).\n   *\n   * **Initial value**: `normal`\n   *\n   * @deprecated\n   */\n  WebkitBoxDirection?: BoxDirectionProperty;\n  /**\n   * The **`-moz-box-flex`** and **`-webkit-box-flex`** CSS properties specify how a `-moz-box` or `-webkit-box` grows to fill the box that contains it, in the direction of the containing box's layout.\n   *\n   * **Initial value**: `0`\n   *\n   * @deprecated\n   */\n  WebkitBoxFlex?: GlobalsNumber;\n  /**\n   * The **`box-flex-group`** CSS property assigns the flexbox's child elements to a flex group.\n   *\n   * **Initial value**: `1`\n   *\n   * @deprecated\n   */\n  WebkitBoxFlexGroup?: GlobalsNumber;\n  /**\n   * The **`box-lines`** CSS property determines whether the box may have a single or multiple lines (rows for horizontally oriented boxes, columns for vertically oriented boxes).\n   *\n   * **Initial value**: `single`\n   *\n   * @deprecated\n   */\n  WebkitBoxLines?: BoxLinesProperty;\n  /**\n   * The **`box-ordinal-group`** CSS property assigns the flexbox's child elements to an ordinal group.\n   *\n   * **Initial value**: `1`\n   *\n   * @deprecated\n   */\n  WebkitBoxOrdinalGroup?: GlobalsNumber;\n  /**\n   * The **`box-orient`** CSS property specifies whether an element lays out its contents horizontally or vertically.\n   *\n   * **Initial value**: `inline-axis` (`horizontal` in XUL)\n   *\n   * @deprecated\n   */\n  WebkitBoxOrient?: BoxOrientProperty;\n  /**\n   * The **`-moz-box-pack`** and **`-webkit-box-pack`** CSS properties specify how a `-moz-box` or `-webkit-box` packs its contents in the direction of its layout. The effect of this is only visible if there is extra space in the box.\n   *\n   * **Initial value**: `start`\n   *\n   * @deprecated\n   */\n  WebkitBoxPack?: BoxPackProperty;\n  /**\n   * The **`scroll-snap-points-x`** CSS property defines the horizontal positioning of snap points within the content of the scroll container they are applied to.\n   *\n   * **Initial value**: `none`\n   *\n   * @deprecated\n   */\n  WebkitScrollSnapPointsX?: ScrollSnapPointsXProperty;\n  /**\n   * The **`scroll-snap-points-y`** CSS property defines the vertical positioning of snap points within the content of the scroll container they are applied to.\n   *\n   * **Initial value**: `none`\n   *\n   * @deprecated\n   */\n  WebkitScrollSnapPointsY?: ScrollSnapPointsYProperty;\n}\n\nexport interface SvgProperties<TLength = string | 0> {\n  alignmentBaseline?: AlignmentBaselineProperty;\n  baselineShift?: BaselineShiftProperty<TLength>;\n  clip?: ClipProperty;\n  clipPath?: ClipPathProperty;\n  clipRule?: ClipRuleProperty;\n  color?: ColorProperty;\n  colorInterpolation?: ColorInterpolationProperty;\n  colorRendering?: ColorRenderingProperty;\n  cursor?: CursorProperty;\n  direction?: DirectionProperty;\n  display?: DisplayProperty;\n  dominantBaseline?: DominantBaselineProperty;\n  fill?: FillProperty;\n  fillOpacity?: GlobalsNumber;\n  fillRule?: FillRuleProperty;\n  filter?: FilterProperty;\n  floodColor?: FloodColorProperty;\n  floodOpacity?: GlobalsNumber;\n  font?: FontProperty;\n  fontFamily?: FontFamilyProperty;\n  fontSize?: FontSizeProperty<TLength>;\n  fontSizeAdjust?: FontSizeAdjustProperty;\n  fontStretch?: FontStretchProperty;\n  fontStyle?: FontStyleProperty;\n  fontVariant?: FontVariantProperty;\n  fontWeight?: FontWeightProperty;\n  glyphOrientationVertical?: GlyphOrientationVerticalProperty;\n  imageRendering?: ImageRenderingProperty;\n  letterSpacing?: LetterSpacingProperty<TLength>;\n  lightingColor?: LightingColorProperty;\n  lineHeight?: LineHeightProperty<TLength>;\n  marker?: MarkerProperty;\n  markerEnd?: MarkerEndProperty;\n  markerMid?: MarkerMidProperty;\n  markerStart?: MarkerStartProperty;\n  mask?: MaskProperty<TLength>;\n  opacity?: OpacityProperty;\n  overflow?: OverflowProperty;\n  paintOrder?: PaintOrderProperty;\n  pointerEvents?: PointerEventsProperty;\n  shapeRendering?: ShapeRenderingProperty;\n  stopColor?: StopColorProperty;\n  stopOpacity?: GlobalsNumber;\n  stroke?: StrokeProperty;\n  strokeDasharray?: StrokeDasharrayProperty<TLength>;\n  strokeDashoffset?: StrokeDashoffsetProperty<TLength>;\n  strokeLinecap?: StrokeLinecapProperty;\n  strokeLinejoin?: StrokeLinejoinProperty;\n  strokeMiterlimit?: GlobalsNumber;\n  strokeOpacity?: GlobalsNumber;\n  strokeWidth?: StrokeWidthProperty<TLength>;\n  textAnchor?: TextAnchorProperty;\n  textDecoration?: TextDecorationProperty<TLength>;\n  textRendering?: TextRenderingProperty;\n  unicodeBidi?: UnicodeBidiProperty;\n  vectorEffect?: VectorEffectProperty;\n  visibility?: VisibilityProperty;\n  whiteSpace?: WhiteSpaceProperty;\n  wordSpacing?: WordSpacingProperty<TLength>;\n  writingMode?: WritingModeProperty;\n}\n\nexport interface Properties<TLength = string | 0> extends StandardProperties<TLength>, VendorProperties<TLength>, ObsoleteProperties<TLength>, SvgProperties<TLength> {}\n\nexport interface StandardLonghandPropertiesHyphen<TLength = string | 0> {\n  /**\n   * The CSS **`align-content`** property sets how the browser distributes space between and around content items along the cross-axis of a flexbox container, and the main-axis of a grid container.\n   *\n   * **Initial value**: `normal`\n   *\n   * ---\n   *\n   * _Supported in Flex Layout_\n   *\n   * |  Chrome  | Firefox |  Safari   |  Edge  |   IE   |\n   * | :------: | :-----: | :-------: | :----: | :----: |\n   * |  **29**  | **28**  |   **9**   | **12** | **11** |\n   * | 21 _-x-_ |         | 6.1 _-x-_ |        |        |\n   *\n   * ---\n   *\n   * _Supported in Grid Layout_\n   *\n   * | Chrome | Firefox |  Safari  |  Edge  | IE  |\n   * | :----: | :-----: | :------: | :----: | :-: |\n   * | **57** | **52**  | **10.1** | **16** | No  |\n   *\n   * ---\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/align-content\n   */\n  \"align-content\"?: AlignContentProperty;\n  /**\n   * The CSS **`align-items`** property sets the `align-self` value on all direct children as a group. The align-self property sets the alignment of an item within its containing block. In Flexbox it controls the alignment of items on the Cross Axis, in Grid Layout it controls the alignment of items on the Block Axis within their grid area.\n   *\n   * **Initial value**: `normal`\n   *\n   * ---\n   *\n   * _Supported in Flex Layout_\n   *\n   * |  Chrome  | Firefox | Safari  |  Edge  |   IE   |\n   * | :------: | :-----: | :-----: | :----: | :----: |\n   * |  **52**  | **20**  |  **9**  | **12** | **11** |\n   * | 21 _-x-_ |         | 7 _-x-_ |        |        |\n   *\n   * ---\n   *\n   * _Supported in Grid Layout_\n   *\n   * | Chrome | Firefox |  Safari  |  Edge  | IE  |\n   * | :----: | :-----: | :------: | :----: | :-: |\n   * | **57** | **52**  | **10.1** | **16** | No  |\n   *\n   * ---\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/align-items\n   */\n  \"align-items\"?: AlignItemsProperty;\n  /**\n   * The **`align-self`** CSS property aligns flex items of the current flex line overriding the `align-items` value. If any of the item's cross-axis margin is set to `auto`, then `align-self` is ignored. In Grid layout `align-self` aligns the item inside the grid area.\n   *\n   * **Initial value**: `auto`\n   *\n   * ---\n   *\n   * _Supported in Flex Layout_\n   *\n   * |  Chrome  | Firefox |  Safari   |  Edge  |   IE   |\n   * | :------: | :-----: | :-------: | :----: | :----: |\n   * |  **36**  | **20**  |   **9**   | **12** | **11** |\n   * | 21 _-x-_ |         | 6.1 _-x-_ |        |        |\n   *\n   * ---\n   *\n   * _Supported in Grid Layout_\n   *\n   * | Chrome | Firefox |  Safari  |  Edge  |      IE      |\n   * | :----: | :-----: | :------: | :----: | :----------: |\n   * | **57** | **52**  | **10.1** | **16** | **10** _-x-_ |\n   *\n   * ---\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/align-self\n   */\n  \"align-self\"?: AlignSelfProperty;\n  /**\n   * The **`animation-delay`** CSS property sets when an animation starts. The animation can start later, immediately from its beginning, or immediately and partway through the animation.\n   *\n   * **Initial value**: `0s`\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |\n   * | :-----: | :-----: | :-----: | :----: | :----: |\n   * | **43**  | **16**  |  **9**  | **12** | **10** |\n   * | 3 _-x-_ | 5 _-x-_ | 4 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/animation-delay\n   */\n  \"animation-delay\"?: GlobalsString;\n  /**\n   * The **`animation-direction`** CSS property sets whether an animation should play forwards, backwards, or alternating back and forth.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |\n   * | :-----: | :-----: | :-----: | :----: | :----: |\n   * | **43**  | **16**  |  **9**  | **12** | **10** |\n   * | 3 _-x-_ | 5 _-x-_ | 4 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/animation-direction\n   */\n  \"animation-direction\"?: AnimationDirectionProperty;\n  /**\n   * The **`animation-duration`** CSS property sets the length of time that an animation takes to complete one cycle.\n   *\n   * **Initial value**: `0s`\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |\n   * | :-----: | :-----: | :-----: | :----: | :----: |\n   * | **43**  | **16**  |  **9**  | **12** | **10** |\n   * | 3 _-x-_ | 5 _-x-_ | 4 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/animation-duration\n   */\n  \"animation-duration\"?: GlobalsString;\n  /**\n   * The **`animation-fill-mode`** CSS property sets how a CSS animation applies styles to its target before and after its execution.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |\n   * | :-----: | :-----: | :-----: | :----: | :----: |\n   * | **43**  | **16**  |  **9**  | **12** | **10** |\n   * | 3 _-x-_ | 5 _-x-_ | 5 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/animation-fill-mode\n   */\n  \"animation-fill-mode\"?: AnimationFillModeProperty;\n  /**\n   * The **`animation-iteration-count`** CSS property sets the number of times an animation cycle should be played before stopping.\n   *\n   * **Initial value**: `1`\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |\n   * | :-----: | :-----: | :-----: | :----: | :----: |\n   * | **43**  | **16**  |  **9**  | **12** | **10** |\n   * | 3 _-x-_ | 5 _-x-_ | 4 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/animation-iteration-count\n   */\n  \"animation-iteration-count\"?: AnimationIterationCountProperty;\n  /**\n   * The **`animation-name`** CSS property sets one or more animations to apply to an element. Each name is an `@keyframes` at-rule that sets the property values for the animation sequence.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |\n   * | :-----: | :-----: | :-----: | :----: | :----: |\n   * | **43**  | **16**  |  **9**  | **12** | **10** |\n   * | 3 _-x-_ | 5 _-x-_ | 4 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/animation-name\n   */\n  \"animation-name\"?: AnimationNameProperty;\n  /**\n   * The **`animation-play-state`** CSS property sets whether an animation is running or paused.\n   *\n   * **Initial value**: `running`\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |\n   * | :-----: | :-----: | :-----: | :----: | :----: |\n   * | **43**  | **16**  |  **9**  | **12** | **10** |\n   * | 3 _-x-_ | 5 _-x-_ | 4 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/animation-play-state\n   */\n  \"animation-play-state\"?: AnimationPlayStateProperty;\n  /**\n   * The `**animation-timing-function**` CSS property sets how an animation progresses through the duration of each cycle.\n   *\n   * **Initial value**: `ease`\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |\n   * | :-----: | :-----: | :-----: | :----: | :----: |\n   * | **43**  | **16**  |  **9**  | **12** | **10** |\n   * | 3 _-x-_ | 5 _-x-_ | 4 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/animation-timing-function\n   */\n  \"animation-timing-function\"?: AnimationTimingFunctionProperty;\n  /**\n   * The **`-moz-appearance`** CSS property is used in Gecko (Firefox) to display an element using platform-native styling based on the operating system's theme.\n   *\n   * **Initial value**: `auto`\n   *\n   * |   Chrome    |   Firefox   |   Safari    |     Edge     | IE  |\n   * | :---------: | :---------: | :---------: | :----------: | :-: |\n   * | **1** _-x-_ | **1** _-x-_ | **3** _-x-_ | **12** _-x-_ | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/appearance\n   */\n  appearance?: AppearanceProperty;\n  /**\n   * The **`aspect-ratio`**    CSS property sets a _**preferred aspect ratio**_ for the box, which will be used in the calculation of auto sizes and some other layout functions.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **79** | **71**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/aspect-ratio\n   */\n  \"aspect-ratio\"?: AspectRatioProperty;\n  /**\n   * The **`backdrop-filter`** CSS property lets you apply graphical effects such as blurring or color shifting to the area behind an element. Because it applies to everything _behind_ the element, to see the effect you must make the element or its background at least partially transparent.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox |   Safari    |  Edge  | IE  |\n   * | :----: | :-----: | :---------: | :----: | :-: |\n   * | **76** |   n/a   | **9** _-x-_ | **17** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/backdrop-filter\n   */\n  \"backdrop-filter\"?: BackdropFilterProperty;\n  /**\n   * The **`backface-visibility`** CSS property sets whether the back face of an element is visible when turned towards the user.\n   *\n   * **Initial value**: `visible`\n   *\n   * |  Chrome  | Firefox  |    Safari     |  Edge  |   IE   |\n   * | :------: | :------: | :-----------: | :----: | :----: |\n   * |  **36**  |  **16**  | **5.1** _-x-_ | **12** | **10** |\n   * | 12 _-x-_ | 10 _-x-_ |               |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/backface-visibility\n   */\n  \"backface-visibility\"?: BackfaceVisibilityProperty;\n  /**\n   * The **`background-attachment`** CSS property sets whether a background image's position is fixed within the viewport, or scrolls with its containing block.\n   *\n   * **Initial value**: `scroll`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/background-attachment\n   */\n  \"background-attachment\"?: BackgroundAttachmentProperty;\n  /**\n   * The **`background-blend-mode`** CSS property sets how an element's background images should blend with each other and with the element's background color.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **35** | **30**  | **8**  |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/background-blend-mode\n   */\n  \"background-blend-mode\"?: BackgroundBlendModeProperty;\n  /**\n   * The **`background-clip`** CSS property sets whether an element's background `<color>` or `<image>` extends underneath its border.\n   *\n   * **Initial value**: `border-box`\n   *\n   * | Chrome | Firefox |   Safari    |  Edge  |  IE   |\n   * | :----: | :-----: | :---------: | :----: | :---: |\n   * | **1**  |  **4**  | **3** _-x-_ | **12** | **9** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/background-clip\n   */\n  \"background-clip\"?: BackgroundClipProperty;\n  /**\n   * The **`background-color`** CSS property sets the background color of an element.\n   *\n   * **Initial value**: `transparent`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/background-color\n   */\n  \"background-color\"?: BackgroundColorProperty;\n  /**\n   * The **`background-image`** CSS property sets one or more background images on an element.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/background-image\n   */\n  \"background-image\"?: BackgroundImageProperty;\n  /**\n   * The **`background-origin`** CSS property sets the _background positioning area_. In other words, it sets the origin position of an image set with the `background-image` property.\n   *\n   * **Initial value**: `padding-box`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **4**  | **3**  | **12** | **9** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/background-origin\n   */\n  \"background-origin\"?: BackgroundOriginProperty;\n  /**\n   * The **`background-position`** CSS property sets the initial position for each background image. The position is relative to the position layer set by `background-origin`.\n   *\n   * **Initial value**: `0% 0%`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/background-position\n   */\n  \"background-position\"?: BackgroundPositionProperty<TLength>;\n  /**\n   * The **`background-position-x`** CSS property sets the initial horizontal position for each background image. The position is relative to the position layer set by `background-origin`.\n   *\n   * **Initial value**: `left`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  | **49**  | **1**  | **12** | **6** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/background-position-x\n   */\n  \"background-position-x\"?: BackgroundPositionXProperty<TLength>;\n  /**\n   * The **`background-position-y`** CSS property sets the initial vertical position, relative to the background position layer defined by `background-origin`, for each defined background image.\n   *\n   * **Initial value**: `top`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  | **49**  | **1**  | **12** | **6** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/background-position-y\n   */\n  \"background-position-y\"?: BackgroundPositionYProperty<TLength>;\n  /**\n   * The **`background-repeat`** CSS property sets how background images are repeated. A background image can be repeated along the horizontal and vertical axes, or not repeated at all.\n   *\n   * **Initial value**: `repeat`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/background-repeat\n   */\n  \"background-repeat\"?: BackgroundRepeatProperty;\n  /**\n   * The **`background-size`** CSS property sets the size of the element's background image. The image can be left to its natural size, stretched, or constrained to fit the available space.\n   *\n   * **Initial value**: `auto auto`\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |  IE   |\n   * | :-----: | :-----: | :-----: | :----: | :---: |\n   * |  **3**  |  **4**  | **4.1** | **12** | **9** |\n   * | 1 _-x-_ |         | 3 _-x-_ |        |       |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/background-size\n   */\n  \"background-size\"?: BackgroundSizeProperty<TLength>;\n  /** **Initial value**: `clip` */\n  \"block-overflow\"?: BlockOverflowProperty;\n  /**\n   * The **`block-size`** CSS property defines the horizontal or vertical size of an element's block, depending on its writing mode. It corresponds to either the `width` or the `height` property, depending on the value of `writing-mode`.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **57** | **41**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/block-size\n   */\n  \"block-size\"?: BlockSizeProperty<TLength>;\n  /**\n   * The **`border-block-color`** CSS property defines the color of the logical block borders of an element, which maps to a physical border color depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-color` and `border-bottom-color`, or `border-right-color` and `border-left-color` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `currentcolor`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |  n/a   | **66**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-block-color\n   */\n  \"border-block-color\"?: BorderBlockColorProperty;\n  /**\n   * The **`border-block-end-color`** CSS property defines the color of the logical block-end border of an element, which maps to a physical border color depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-color`, `border-right-color`, `border-bottom-color`, or `border-left-color` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `currentcolor`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **69** | **41**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-block-end-color\n   */\n  \"border-block-end-color\"?: BorderBlockEndColorProperty;\n  /**\n   * The **`border-block-end-style`** CSS property defines the style of the logical block end border of an element, which maps to a physical border style depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-style`, `border-right-style`, `border-bottom-style`, or `border-left-style` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **69** | **41**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-block-end-style\n   */\n  \"border-block-end-style\"?: BorderBlockEndStyleProperty;\n  /**\n   * The **`border-block-end-width`** CSS property defines the width of the logical block-end border of an element, which maps to a physical border width depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-width`, `border-right-width`, `border-bottom-width`, or `border-left-width` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `medium`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **69** | **41**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-block-end-width\n   */\n  \"border-block-end-width\"?: BorderBlockEndWidthProperty<TLength>;\n  /**\n   * The **`border-block-start-color`** CSS property defines the color of the logical block-start border of an element, which maps to a physical border color depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-color`, `border-right-color`, `border-bottom-color`, or `border-left-color` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `currentcolor`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **69** | **41**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-block-start-color\n   */\n  \"border-block-start-color\"?: BorderBlockStartColorProperty;\n  /**\n   * The **`border-block-start-style`** CSS property defines the style of the logical block start border of an element, which maps to a physical border style depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-style`, `border-right-style`, `border-bottom-style`, or `border-left-style` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **69** | **41**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-block-start-style\n   */\n  \"border-block-start-style\"?: BorderBlockStartStyleProperty;\n  /**\n   * The **`border-block-start-width`** CSS property defines the width of the logical block-start border of an element, which maps to a physical border width depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-width`, `border-right-width`, `border-bottom-width`, or `border-left-width` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `medium`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **69** | **41**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-block-start-width\n   */\n  \"border-block-start-width\"?: BorderBlockStartWidthProperty<TLength>;\n  /**\n   * The **`border-block-style`** CSS property defines the style of the logical block borders of an element, which maps to a physical border style depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-style` and `border-bottom-style`, or `border-left-style` and `border-right-style` properties depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **66**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-block-style\n   */\n  \"border-block-style\"?: BorderBlockStyleProperty;\n  /**\n   * The **`border-block-width`** CSS property defines the width of the logical block borders of an element, which maps to a physical border width depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-width` and `border-bottom-width`, or `border-left-width`, and `border-right-width` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `medium`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **66**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-block-width\n   */\n  \"border-block-width\"?: BorderBlockWidthProperty<TLength>;\n  /**\n   * The **`border-bottom-color`** CSS property sets the color of an element's bottom border. It can also be set with the shorthand CSS properties `border-color` or `border-bottom`.\n   *\n   * **Initial value**: `currentcolor`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-bottom-color\n   */\n  \"border-bottom-color\"?: BorderBottomColorProperty;\n  /**\n   * The **`border-bottom-left-radius`** CSS property rounds the bottom-left corner of an element.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |  IE   |\n   * | :-----: | :-----: | :-----: | :----: | :---: |\n   * |  **4**  |  **4**  |  **5**  | **12** | **9** |\n   * | 1 _-x-_ |         | 3 _-x-_ |        |       |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-bottom-left-radius\n   */\n  \"border-bottom-left-radius\"?: BorderBottomLeftRadiusProperty<TLength>;\n  /**\n   * The **`border-bottom-right-radius`** CSS property rounds the bottom-right corner of an element.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |  IE   |\n   * | :-----: | :-----: | :-----: | :----: | :---: |\n   * |  **4**  |  **4**  |  **5**  | **12** | **9** |\n   * | 1 _-x-_ |         | 3 _-x-_ |        |       |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-bottom-right-radius\n   */\n  \"border-bottom-right-radius\"?: BorderBottomRightRadiusProperty<TLength>;\n  /**\n   * The **`border-bottom-style`** CSS property sets the line style of an element's bottom `border`.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE    |\n   * | :----: | :-----: | :----: | :----: | :-----: |\n   * | **1**  |  **1**  | **1**  | **12** | **5.5** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-bottom-style\n   */\n  \"border-bottom-style\"?: BorderBottomStyleProperty;\n  /**\n   * The **`border-bottom-width`** CSS property sets the width of the bottom border of a box.\n   *\n   * **Initial value**: `medium`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-bottom-width\n   */\n  \"border-bottom-width\"?: BorderBottomWidthProperty<TLength>;\n  /**\n   * The **`border-collapse`** CSS property sets whether cells inside a `<table>` have shared or separate borders.\n   *\n   * **Initial value**: `separate`\n   *\n   * | Chrome | Firefox | Safari  |  Edge  |  IE   |\n   * | :----: | :-----: | :-----: | :----: | :---: |\n   * | **1**  |  **1**  | **1.2** | **12** | **5** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-collapse\n   */\n  \"border-collapse\"?: BorderCollapseProperty;\n  /**\n   * The **`border-end-end-radius`** CSS property defines a logical border radius on an element, which maps to a physical border radius that depends on on the element's `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **66**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-end-end-radius\n   */\n  \"border-end-end-radius\"?: BorderEndEndRadiusProperty<TLength>;\n  /**\n   * The **`border-end-start-radius`** CSS property defines a logical border radius on an element, which maps to a physical border radius depending on the element's `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **66**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-end-start-radius\n   */\n  \"border-end-start-radius\"?: BorderEndStartRadiusProperty<TLength>;\n  /**\n   * The **`border-image-outset`** CSS property sets the distance by which an element's border image is set out from its border box.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE   |\n   * | :----: | :-----: | :----: | :----: | :----: |\n   * | **15** | **15**  | **6**  | **12** | **11** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-image-outset\n   */\n  \"border-image-outset\"?: BorderImageOutsetProperty<TLength>;\n  /**\n   * The **`border-image-repeat`** CSS property defines how the edge regions of a source image are adjusted to fit the dimensions of an element's border image.\n   *\n   * **Initial value**: `stretch`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE   |\n   * | :----: | :-----: | :----: | :----: | :----: |\n   * | **15** | **15**  | **6**  | **12** | **11** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-image-repeat\n   */\n  \"border-image-repeat\"?: BorderImageRepeatProperty;\n  /**\n   * The **`border-image-slice`** CSS property divides the image specified by `border-image-source` into regions. These regions form the components of an element's border image.\n   *\n   * **Initial value**: `100%`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE   |\n   * | :----: | :-----: | :----: | :----: | :----: |\n   * | **15** | **15**  | **6**  | **12** | **11** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-image-slice\n   */\n  \"border-image-slice\"?: BorderImageSliceProperty;\n  /**\n   * The **`border-image-source`** CSS property sets the source image used to create an element's border image.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE   |\n   * | :----: | :-----: | :----: | :----: | :----: |\n   * | **15** | **15**  | **6**  | **12** | **11** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-image-source\n   */\n  \"border-image-source\"?: BorderImageSourceProperty;\n  /**\n   * The **`border-image-width`** CSS property sets the width of an element's border image.\n   *\n   * **Initial value**: `1`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE   |\n   * | :----: | :-----: | :----: | :----: | :----: |\n   * | **15** | **13**  | **6**  | **12** | **11** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-image-width\n   */\n  \"border-image-width\"?: BorderImageWidthProperty<TLength>;\n  /**\n   * The **`border-inline-color`** CSS property defines the color of the logical inline borders of an element, which maps to a physical border color depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-color` and `border-bottom-color`, or `border-right-color` and `border-left-color` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `currentcolor`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **66**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-inline-color\n   */\n  \"border-inline-color\"?: BorderInlineColorProperty;\n  /**\n   * The **`border-inline-end-color`** CSS property defines the color of the logical inline-end border of an element, which maps to a physical border color depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-color`, `border-right-color`, `border-bottom-color`, or `border-left-color` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `currentcolor`\n   *\n   * | Chrome |           Firefox           |  Safari  | Edge | IE  |\n   * | :----: | :-------------------------: | :------: | :--: | :-: |\n   * | **69** |           **41**            | **12.1** |  No  | No  |\n   * |        | 3 _(-moz-border-end-color)_ |          |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-inline-end-color\n   */\n  \"border-inline-end-color\"?: BorderInlineEndColorProperty;\n  /**\n   * The **`border-inline-end-style`** CSS property defines the style of the logical inline end border of an element, which maps to a physical border style depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-style`, `border-right-style`, `border-bottom-style`, or `border-left-style` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome |           Firefox           |  Safari  | Edge | IE  |\n   * | :----: | :-------------------------: | :------: | :--: | :-: |\n   * | **69** |           **41**            | **12.1** |  No  | No  |\n   * |        | 3 _(-moz-border-end-style)_ |          |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-inline-end-style\n   */\n  \"border-inline-end-style\"?: BorderInlineEndStyleProperty;\n  /**\n   * The **`border-inline-end-width`** CSS property defines the width of the logical inline-end border of an element, which maps to a physical border width depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-width`, `border-right-width`, `border-bottom-width`, or `border-left-width` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `medium`\n   *\n   * | Chrome |           Firefox           |  Safari  | Edge | IE  |\n   * | :----: | :-------------------------: | :------: | :--: | :-: |\n   * | **69** |           **41**            | **12.1** |  No  | No  |\n   * |        | 3 _(-moz-border-end-width)_ |          |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-inline-end-width\n   */\n  \"border-inline-end-width\"?: BorderInlineEndWidthProperty<TLength>;\n  /**\n   * The **`border-inline-start-color`** CSS property defines the color of the logical inline start border of an element, which maps to a physical border color depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-color`, `border-right-color`, `border-bottom-color`, or `border-left-color` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `currentcolor`\n   *\n   * | Chrome |            Firefox            |  Safari  | Edge | IE  |\n   * | :----: | :---------------------------: | :------: | :--: | :-: |\n   * | **69** |            **41**             | **12.1** |  No  | No  |\n   * |        | 3 _(-moz-border-start-color)_ |          |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-inline-start-color\n   */\n  \"border-inline-start-color\"?: BorderInlineStartColorProperty;\n  /**\n   * The **`border-inline-start-style`** CSS property defines the style of the logical inline start border of an element, which maps to a physical border style depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-style`, `border-right-style`, `border-bottom-style`, or `border-left-style` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome |            Firefox            |  Safari  | Edge | IE  |\n   * | :----: | :---------------------------: | :------: | :--: | :-: |\n   * | **69** |            **41**             | **12.1** |  No  | No  |\n   * |        | 3 _(-moz-border-start-style)_ |          |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-inline-start-style\n   */\n  \"border-inline-start-style\"?: BorderInlineStartStyleProperty;\n  /**\n   * The **`border-inline-start-width`** CSS property defines the width of the logical inline-start border of an element, which maps to a physical border width depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-width`, `border-right-width`, `border-bottom-width`, or `border-left-width` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `medium`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **69** | **41**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-inline-start-width\n   */\n  \"border-inline-start-width\"?: BorderInlineStartWidthProperty<TLength>;\n  /**\n   * The **`border-inline-style`** CSS property defines the style of the logical inline borders of an element, which maps to a physical border style depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-style` and `border-bottom-style`, or `border-left-style` and `border-right-style` properties depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **66**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-inline-style\n   */\n  \"border-inline-style\"?: BorderInlineStyleProperty;\n  /**\n   * The **`border-inline-width`** CSS property defines the width of the logical inline borders of an element, which maps to a physical border width depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-width` and `border-bottom-width`, or `border-left-width`, and `border-right-width` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `medium`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **66**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-inline-width\n   */\n  \"border-inline-width\"?: BorderInlineWidthProperty<TLength>;\n  /**\n   * The **`border-left-color`** CSS property sets the color of an element's left border. It can also be set with the shorthand CSS properties `border-color` or `border-left`.\n   *\n   * **Initial value**: `currentcolor`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-left-color\n   */\n  \"border-left-color\"?: BorderLeftColorProperty;\n  /**\n   * The **`border-left-style`** CSS property sets the line style of an element's left `border`.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE    |\n   * | :----: | :-----: | :----: | :----: | :-----: |\n   * | **1**  |  **1**  | **1**  | **12** | **5.5** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-left-style\n   */\n  \"border-left-style\"?: BorderLeftStyleProperty;\n  /**\n   * The **`border-left-width`** CSS property sets the width of the left border of an element.\n   *\n   * **Initial value**: `medium`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-left-width\n   */\n  \"border-left-width\"?: BorderLeftWidthProperty<TLength>;\n  /**\n   * The **`border-right-color`** CSS property sets the color of an element's right border. It can also be set with the shorthand CSS properties `border-color` or `border-right`.\n   *\n   * **Initial value**: `currentcolor`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-right-color\n   */\n  \"border-right-color\"?: BorderRightColorProperty;\n  /**\n   * The **`border-right-style`** CSS property sets the line style of an element's right `border`.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE    |\n   * | :----: | :-----: | :----: | :----: | :-----: |\n   * | **1**  |  **1**  | **1**  | **12** | **5.5** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-right-style\n   */\n  \"border-right-style\"?: BorderRightStyleProperty;\n  /**\n   * The **`border-right-width`** CSS property sets the width of the right border of an element.\n   *\n   * **Initial value**: `medium`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-right-width\n   */\n  \"border-right-width\"?: BorderRightWidthProperty<TLength>;\n  /**\n   * The **`border-spacing`** CSS property sets the distance between the borders of adjacent `<table>` cells. This property applies only when `border-collapse` is `separate`.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **8** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-spacing\n   */\n  \"border-spacing\"?: BorderSpacingProperty<TLength>;\n  /**\n   * The **`border-start-end-radius`** CSS property defines a logical border radius on an element, which maps to a physical border radius depending on the element's `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **66**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-start-end-radius\n   */\n  \"border-start-end-radius\"?: BorderStartEndRadiusProperty<TLength>;\n  /**\n   * The **`border-start-start-radius`** CSS property defines a logical border radius on an element, which maps to a physical border radius that depends on the element's `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **66**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-start-start-radius\n   */\n  \"border-start-start-radius\"?: BorderStartStartRadiusProperty<TLength>;\n  /**\n   * The **`border-top-color`** CSS property sets the color of an element's top border. It can also be set with the shorthand CSS properties `border-color` or `border-top`.\n   *\n   * **Initial value**: `currentcolor`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-top-color\n   */\n  \"border-top-color\"?: BorderTopColorProperty;\n  /**\n   * The **`border-top-left-radius`** CSS property rounds the top-left corner of an element.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |  IE   |\n   * | :-----: | :-----: | :-----: | :----: | :---: |\n   * |  **4**  |  **4**  |  **5**  | **12** | **9** |\n   * | 1 _-x-_ |         | 3 _-x-_ |        |       |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-top-left-radius\n   */\n  \"border-top-left-radius\"?: BorderTopLeftRadiusProperty<TLength>;\n  /**\n   * The **`border-top-right-radius`** CSS property rounds the top-right corner of an element.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |  IE   |\n   * | :-----: | :-----: | :-----: | :----: | :---: |\n   * |  **4**  |  **4**  |  **5**  | **12** | **9** |\n   * | 1 _-x-_ |         | 3 _-x-_ |        |       |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-top-right-radius\n   */\n  \"border-top-right-radius\"?: BorderTopRightRadiusProperty<TLength>;\n  /**\n   * The **`border-top-style`** CSS property sets the line style of an element's top `border`.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE    |\n   * | :----: | :-----: | :----: | :----: | :-----: |\n   * | **1**  |  **1**  | **1**  | **12** | **5.5** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-top-style\n   */\n  \"border-top-style\"?: BorderTopStyleProperty;\n  /**\n   * The **`border-top-width`** CSS property sets the width of the top border of an element.\n   *\n   * **Initial value**: `medium`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-top-width\n   */\n  \"border-top-width\"?: BorderTopWidthProperty<TLength>;\n  /**\n   * The **`bottom`** CSS property participates in specifying the vertical position of a _positioned element_. It has no effect on non-positioned elements.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **5** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/bottom\n   */\n  bottom?: BottomProperty<TLength>;\n  /**\n   * The **`box-decoration-break`** CSS property specifies how an element's fragments should be rendered when broken across multiple lines, columns, or pages.\n   *\n   * **Initial value**: `slice`\n   *\n   * |    Chrome    | Firefox |    Safari     | Edge | IE  |\n   * | :----------: | :-----: | :-----------: | :--: | :-: |\n   * | **22** _-x-_ | **32**  | **6.1** _-x-_ |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/box-decoration-break\n   */\n  \"box-decoration-break\"?: BoxDecorationBreakProperty;\n  /**\n   * The **`box-shadow`** CSS property adds shadow effects around an element's frame. You can set multiple effects separated by commas. A box shadow is described by X and Y offsets relative to the element, blur and spread radii, and color.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |  IE   |\n   * | :-----: | :-----: | :-----: | :----: | :---: |\n   * | **10**  |  **4**  | **5.1** | **12** | **9** |\n   * | 1 _-x-_ |         | 3 _-x-_ |        |       |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/box-shadow\n   */\n  \"box-shadow\"?: BoxShadowProperty;\n  /**\n   * The **`box-sizing`** CSS property defines how the user agent should calculate the total width and height of an element.\n   *\n   * **Initial value**: `content-box`\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |  IE   |\n   * | :-----: | :-----: | :-----: | :----: | :---: |\n   * | **10**  | **29**  | **5.1** | **12** | **8** |\n   * | 1 _-x-_ | 1 _-x-_ | 3 _-x-_ |        |       |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/box-sizing\n   */\n  \"box-sizing\"?: BoxSizingProperty;\n  /**\n   * The **`break-after`** CSS property defines how page, column, or region breaks should behave after a generated box. If there is no generated box, the property is ignored.\n   *\n   * **Initial value**: `auto`\n   *\n   * ---\n   *\n   * _Supported in Multi-column Layout_\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE   |\n   * | :----: | :-----: | :----: | :----: | :----: |\n   * | **50** |   No    |   No   | **12** | **10** |\n   *\n   * ---\n   *\n   * _Supported in Paged Media_\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE   |\n   * | :----: | :-----: | :----: | :----: | :----: |\n   * | **50** | **65**  | **10** | **12** | **10** |\n   *\n   * ---\n   *\n   * _Supported in CSS Regions_\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   |   No    |   No   |  No  | No  |\n   *\n   * ---\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/break-after\n   */\n  \"break-after\"?: BreakAfterProperty;\n  /**\n   * The **`break-before`** CSS property sets how page, column, or region breaks should behave before a generated box. If there is no generated box, the property is ignored.\n   *\n   * **Initial value**: `auto`\n   *\n   * ---\n   *\n   * _Supported in Multi-column Layout_\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE   |\n   * | :----: | :-----: | :----: | :----: | :----: |\n   * | **50** | **65**  |   No   | **12** | **10** |\n   *\n   * ---\n   *\n   * _Supported in Paged Media_\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE   |\n   * | :----: | :-----: | :----: | :----: | :----: |\n   * | **50** | **65**  | **10** | **12** | **10** |\n   *\n   * ---\n   *\n   * _Supported in CSS Regions_\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   |   No    |   No   |  No  | No  |\n   *\n   * ---\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/break-before\n   */\n  \"break-before\"?: BreakBeforeProperty;\n  /**\n   * The **`break-inside`** CSS property defines how page, column, or region breaks should behave inside a generated box. If there is no generated box, the property is ignored.\n   *\n   * **Initial value**: `auto`\n   *\n   * ---\n   *\n   * _Supported in Multi-column Layout_\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE   |\n   * | :----: | :-----: | :----: | :----: | :----: |\n   * | **50** | **65**  | **10** | **12** | **10** |\n   *\n   * ---\n   *\n   * _Supported in Paged Media_\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE   |\n   * | :----: | :-----: | :----: | :----: | :----: |\n   * | **50** | **65**  | **10** | **12** | **10** |\n   *\n   * ---\n   *\n   * _Supported in CSS Regions_\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   |   No    |   No   |  No  | No  |\n   *\n   * ---\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/break-inside\n   */\n  \"break-inside\"?: BreakInsideProperty;\n  /**\n   * The **`caption-side`** CSS property puts the content of a table's `<caption>` on the specified side. The values are relative to the `writing-mode` of the table.\n   *\n   * **Initial value**: `top`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **8** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/caption-side\n   */\n  \"caption-side\"?: CaptionSideProperty;\n  /**\n   * The **`caret-color`** CSS property sets the color of the insertion caret, the visible marker where the next character typed will be inserted. The caret appears in elements such as `<input>` or those with the `contenteditable` attribute. The caret is typically a thin vertical line that flashes to help make it more noticeable. By default, it is black, but its color can be altered with this property.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **57** | **53**  | **11.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/caret-color\n   */\n  \"caret-color\"?: CaretColorProperty;\n  /**\n   * The **`clear`** CSS property sets whether an element must be moved below (cleared) floating elements that precede it. The `clear` property applies to floating and non-floating elements.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/clear\n   */\n  clear?: ClearProperty;\n  /**\n   * The `**clip-path**` CSS property creates a clipping region that sets what part of an element should be shown. Parts that are inside the region are shown, while those outside are hidden.\n   *\n   * **Initial value**: `none`\n   *\n   * |  Chrome  | Firefox |  Safari   |  Edge  |   IE   |\n   * | :------: | :-----: | :-------: | :----: | :----: |\n   * |  **55**  | **3.5** |  **9.1**  | **12** | **10** |\n   * | 23 _-x-_ |         | 6.1 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/clip-path\n   */\n  \"clip-path\"?: ClipPathProperty;\n  /**\n   * The **`color`** CSS property sets the foreground color value of an element's text and text decorations, and sets the `currentcolor` value. `currentcolor` may be used as an indirect value on _other_ properties and is the default for other color properties, such as `border-color`.\n   *\n   * **Initial value**: Varies from one browser to another\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **3** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/color\n   */\n  color?: ColorProperty;\n  /**\n   * The **`color-adjust`** CSS property sets what, if anything, the user agent may do to optimize the appearance of the element on the output device. By default, the browser is allowed to make any adjustments to the element's appearance it determines to be necessary and prudent given the type and capabilities of the output device.\n   *\n   * **Initial value**: `economy`\n   *\n   * |    Chrome    | Firefox |   Safari    | Edge | IE  |\n   * | :----------: | :-----: | :---------: | :--: | :-: |\n   * | **49** _-x-_ | **48**  | **6** _-x-_ |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/color-adjust\n   */\n  \"color-adjust\"?: ColorAdjustProperty;\n  /**\n   * The **`column-count`** CSS property breaks an element's content into the specified number of columns.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |\n   * | :-----: | :-----: | :-----: | :----: | :----: |\n   * | **50**  | **52**  |  **9**  | **12** | **10** |\n   * | 1 _-x-_ |         | 3 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/column-count\n   */\n  \"column-count\"?: ColumnCountProperty;\n  /**\n   * The **`column-fill`** CSS property controls how an element's contents are balanced when broken into columns.\n   *\n   * **Initial value**: `balance`\n   *\n   * | Chrome | Firefox | Safari  |  Edge  |   IE   |\n   * | :----: | :-----: | :-----: | :----: | :----: |\n   * | **50** | **52**  |  **9**  | **12** | **10** |\n   * |        |         | 8 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/column-fill\n   */\n  \"column-fill\"?: ColumnFillProperty;\n  /**\n   * The **`column-gap`** CSS property sets the size of the gap (gutter) between an element's columns.\n   *\n   * **Initial value**: `normal`\n   *\n   * ---\n   *\n   * _Supported in Flex Layout_\n   *\n   * | Chrome | Firefox |   Safari    | Edge | IE  |\n   * | :----: | :-----: | :---------: | :--: | :-: |\n   * |   No   | **63**  | **3** _-x-_ |  No  | No  |\n   *\n   * ---\n   *\n   * _Supported in Grid Layout_\n   *\n   * |     Chrome      |     Firefox     |        Safari         |  Edge  | IE  |\n   * | :-------------: | :-------------: | :-------------------: | :----: | :-: |\n   * |     **66**      |     **61**      | **10.1** _(grid-gap)_ | **16** | No  |\n   * | 57 _(grid-gap)_ | 52 _(grid-gap)_ |                       |        |     |\n   *\n   * ---\n   *\n   * _Supported in Multi-column Layout_\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |\n   * | :-----: | :-----: | :-----: | :----: | :----: |\n   * | **50**  | **52**  | **10**  | **12** | **10** |\n   * | 1 _-x-_ |         | 3 _-x-_ |        |        |\n   *\n   * ---\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/column-gap\n   */\n  \"column-gap\"?: ColumnGapProperty<TLength>;\n  /**\n   * The **`column-rule-color`** CSS property sets the color of the rule (line) drawn between columns in a multi-column layout.\n   *\n   * **Initial value**: `currentcolor`\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |\n   * | :-----: | :-----: | :-----: | :----: | :----: |\n   * | **50**  | **52**  |  **9**  | **12** | **10** |\n   * | 1 _-x-_ |         | 3 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/column-rule-color\n   */\n  \"column-rule-color\"?: ColumnRuleColorProperty;\n  /**\n   * The **`column-rule-style`** CSS property sets the style of the line drawn between columns in a multi-column layout.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |\n   * | :-----: | :-----: | :-----: | :----: | :----: |\n   * | **50**  | **52**  |  **9**  | **12** | **10** |\n   * | 1 _-x-_ |         | 3 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/column-rule-style\n   */\n  \"column-rule-style\"?: ColumnRuleStyleProperty;\n  /**\n   * The **`column-rule-width`** CSS property sets the width of the rule (line) drawn between columns in a multi-column layout.\n   *\n   * **Initial value**: `medium`\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |\n   * | :-----: | :-----: | :-----: | :----: | :----: |\n   * | **50**  | **52**  |  **9**  | **12** | **10** |\n   * | 1 _-x-_ |         | 3 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/column-rule-width\n   */\n  \"column-rule-width\"?: ColumnRuleWidthProperty<TLength>;\n  /**\n   * The **`column-span`** CSS property makes it possible for an element to span across all columns when its value is set to `all`.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome  | Firefox |  Safari   |  Edge  |   IE   |\n   * | :-----: | :-----: | :-------: | :----: | :----: |\n   * | **50**  | **71**  |   **9**   | **12** | **10** |\n   * | 6 _-x-_ |         | 5.1 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/column-span\n   */\n  \"column-span\"?: ColumnSpanProperty;\n  /**\n   * The **`column-width`** CSS property specifies the ideal column width in a multi-column layout. The container will have as many columns as can fit without any of them having a width less than the `column-width` value. If the width of the container is narrower than the specified value, the single column's width will be smaller than the declared column width.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |\n   * | :-----: | :-----: | :-----: | :----: | :----: |\n   * | **50**  | **50**  |  **9**  | **12** | **10** |\n   * | 1 _-x-_ |         | 3 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/column-width\n   */\n  \"column-width\"?: ColumnWidthProperty<TLength>;\n  /**\n   * The **`contain`** CSS property allows an author to indicate that an element and its contents are, as much as possible, _independent_ of the rest of the document tree. This allows the browser to recalculate layout, style, paint, size, or any combination of them for a limited area of the DOM and not the entire page.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **52** | **69**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/contain\n   */\n  contain?: ContainProperty;\n  /**\n   * The **`content`** CSS property replaces an element with a generated value. Objects inserted using the `content` property are _anonymous replaced elements._\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **8** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/content\n   */\n  content?: ContentProperty;\n  /**\n   * The **`counter-increment`** CSS property increases or decreases the value of a CSS counter by a given value.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **2**  |  **1**  | **3**  | **12** | **8** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/counter-increment\n   */\n  \"counter-increment\"?: CounterIncrementProperty;\n  /**\n   * The **`counter-reset`** CSS property resets a CSS counter to a given value.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **2**  |  **1**  | **3**  | **12** | **8** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/counter-reset\n   */\n  \"counter-reset\"?: CounterResetProperty;\n  /**\n   * The **`counter-set`** CSS property sets a CSS counter to a given value. It manipulates the value of existing counters, and will only create new counters if there isn't already a counter of the given name on the element.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **68**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/counter-set\n   */\n  \"counter-set\"?: CounterSetProperty;\n  /**\n   * The **`cursor`** CSS property sets mouse cursor to display when the mouse pointer is over an element.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari  |  Edge  |  IE   |\n   * | :----: | :-----: | :-----: | :----: | :---: |\n   * | **1**  |  **1**  | **1.2** | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/cursor\n   */\n  cursor?: CursorProperty;\n  /**\n   * The **`direction`** CSS property sets the direction of text, table columns, and horizontal overflow. Use `rtl` for languages written from right to left (like Hebrew or Arabic), and `ltr` for those written from left to right (like English and most other languages).\n   *\n   * **Initial value**: `ltr`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE    |\n   * | :----: | :-----: | :----: | :----: | :-----: |\n   * | **2**  |  **1**  | **1**  | **12** | **5.5** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/direction\n   */\n  direction?: DirectionProperty;\n  /**\n   * The **`display`** CSS property defines the _display type_ of an element, which consists of the two basic qualities of how an element generates boxes — the **outer display type** defining how the box participates in flow layout, and the **inner display type** defining how the children of the box are laid out.\n   *\n   * **Initial value**: `inline`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/display\n   */\n  display?: DisplayProperty;\n  /**\n   * The **`empty-cells`** CSS property sets whether borders and backgrounds appear around `<table>` cells that have no visible content.\n   *\n   * **Initial value**: `show`\n   *\n   * | Chrome | Firefox | Safari  |  Edge  |  IE   |\n   * | :----: | :-----: | :-----: | :----: | :---: |\n   * | **1**  |  **1**  | **1.2** | **12** | **8** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/empty-cells\n   */\n  \"empty-cells\"?: EmptyCellsProperty;\n  /**\n   * The **`filter`** CSS property applies graphical effects like blur or color shift to an element. Filters are commonly used to adjust the rendering of images, backgrounds, and borders.\n   *\n   * **Initial value**: `none`\n   *\n   * |  Chrome  | Firefox | Safari  |  Edge  | IE  |\n   * | :------: | :-----: | :-----: | :----: | :-: |\n   * |  **53**  | **35**  | **9.1** | **12** | No  |\n   * | 18 _-x-_ |         | 6 _-x-_ |        |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/filter\n   */\n  filter?: FilterProperty;\n  /**\n   * The **`flex-basis`** CSS property sets the initial main size of a flex item. It sets the size of the content box unless otherwise set with `box-sizing`.\n   *\n   * **Initial value**: `auto`\n   *\n   * |  Chrome  | Firefox | Safari  |  Edge  |   IE   |\n   * | :------: | :-----: | :-----: | :----: | :----: |\n   * |  **29**  | **22**  |  **9**  | **12** | **11** |\n   * | 22 _-x-_ |         | 7 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/flex-basis\n   */\n  \"flex-basis\"?: FlexBasisProperty<TLength>;\n  /**\n   * The **`flex-direction`** CSS property sets how flex items are placed in the flex container defining the main axis and the direction (normal or reversed).\n   *\n   * **Initial value**: `row`\n   *\n   * |  Chrome  | Firefox | Safari  |  Edge  |    IE    |\n   * | :------: | :-----: | :-----: | :----: | :------: |\n   * |  **29**  | **20**  |  **9**  | **12** |  **11**  |\n   * | 21 _-x-_ |         | 7 _-x-_ |        | 10 _-x-_ |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/flex-direction\n   */\n  \"flex-direction\"?: FlexDirectionProperty;\n  /**\n   * The **`flex-grow`** CSS property sets how much of the available space in the flex container should be assigned to that item (the flex grow factor). If all sibling items have the same flex grow factor, then all items will receive the same share of available space, otherwise it is distributed according to the ratio defined by the different flex grow factors.\n   *\n   * **Initial value**: `0`\n   *\n   * |  Chrome  | Firefox |  Safari   |  Edge  |            IE            |\n   * | :------: | :-----: | :-------: | :----: | :----------------------: |\n   * |  **29**  | **20**  |   **9**   | **12** |          **11**          |\n   * | 22 _-x-_ |         | 6.1 _-x-_ |        | 10 _(-ms-flex-positive)_ |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/flex-grow\n   */\n  \"flex-grow\"?: GlobalsNumber;\n  /**\n   * The **`flex-shrink`** CSS property sets the flex shrink factor of a flex item. If the size of flex items is larger than the flex container, items shrink to fit according to `flex-shrink`.\n   *\n   * **Initial value**: `1`\n   *\n   * |  Chrome  | Firefox | Safari  |  Edge  |   IE   |\n   * | :------: | :-----: | :-----: | :----: | :----: |\n   * |  **29**  | **20**  |  **9**  | **12** | **10** |\n   * | 22 _-x-_ |         | 8 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/flex-shrink\n   */\n  \"flex-shrink\"?: GlobalsNumber;\n  /**\n   * The **`flex-wrap`** CSS property sets whether flex items are forced onto one line or can wrap onto multiple lines. If wrapping is allowed, it sets the direction that lines are stacked.\n   *\n   * **Initial value**: `nowrap`\n   *\n   * |  Chrome  | Firefox |  Safari   |  Edge  |   IE   |\n   * | :------: | :-----: | :-------: | :----: | :----: |\n   * |  **29**  | **28**  |   **9**   | **12** | **11** |\n   * | 21 _-x-_ |         | 6.1 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/flex-wrap\n   */\n  \"flex-wrap\"?: FlexWrapProperty;\n  /**\n   * The **`float`** CSS property places an element on the left or right side of its container, allowing text and inline elements to wrap around it. The element is removed from the normal flow of the page, though still remaining a part of the flow (in contrast to absolute positioning).\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/float\n   */\n  float?: FloatProperty;\n  /**\n   * The **`font-family`** CSS property specifies a prioritized list of one or more font family names and/or generic family names for the selected element.\n   *\n   * **Initial value**: depends on user agent\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **3** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/font-family\n   */\n  \"font-family\"?: FontFamilyProperty;\n  /**\n   * The **`font-feature-settings`** CSS property controls advanced typographic features in OpenType fonts.\n   *\n   * **Initial value**: `normal`\n   *\n   * |  Chrome  | Firefox  | Safari  |  Edge  |   IE   |\n   * | :------: | :------: | :-----: | :----: | :----: |\n   * |  **48**  |  **34**  | **9.1** | **15** | **10** |\n   * | 16 _-x-_ | 15 _-x-_ |         |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/font-feature-settings\n   */\n  \"font-feature-settings\"?: FontFeatureSettingsProperty;\n  /**\n   * The **`font-kerning`** CSS property sets the use of the kerning information stored in a font.\n   *\n   * **Initial value**: `auto`\n   *\n   * |    Chrome    | Firefox | Safari | Edge | IE  |\n   * | :----------: | :-----: | :----: | :--: | :-: |\n   * | **32** _-x-_ | **32**  | **7**  |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/font-kerning\n   */\n  \"font-kerning\"?: FontKerningProperty;\n  /**\n   * The **`font-language-override`** CSS property controls the use of language-specific glyphs in a typeface.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **34**  |   No   |  No  | No  |\n   * |        | 4 _-x-_ |        |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/font-language-override\n   */\n  \"font-language-override\"?: FontLanguageOverrideProperty;\n  /**\n   * The **`font-optical-sizing`** CSS property sets whether text rendering is optimized for viewing at different sizes. This only works for fonts that have an optical size variation axis.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari |  Edge  | IE  |\n   * | :----: | :-----: | :----: | :----: | :-: |\n   * | **79** | **62**  | **11** | **17** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/font-optical-sizing\n   */\n  \"font-optical-sizing\"?: FontOpticalSizingProperty;\n  /**\n   * The **`font-size`** CSS property sets the size of the font. This property is also used to compute the size of `em`, `ex`, and other relative `<length>` units.\n   *\n   * **Initial value**: `medium`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE    |\n   * | :----: | :-----: | :----: | :----: | :-----: |\n   * | **1**  |  **1**  | **1**  | **12** | **5.5** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/font-size\n   */\n  \"font-size\"?: FontSizeProperty<TLength>;\n  /**\n   * The **`font-size-adjust`** CSS property sets how the font size should be chosen based on the height of lowercase rather than capital letters.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **54** |  **1**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/font-size-adjust\n   */\n  \"font-size-adjust\"?: FontSizeAdjustProperty;\n  /**\n   * The **`font-stretch`** CSS property selects a normal, condensed, or expanded face from a font.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **60** |  **9**  | **11** | **12** | **9** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/font-stretch\n   */\n  \"font-stretch\"?: FontStretchProperty;\n  /**\n   * The **`font-style`** CSS property sets whether a font should be styled with a normal, italic, or oblique face from its `font-family`.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/font-style\n   */\n  \"font-style\"?: FontStyleProperty;\n  /**\n   * The **`font-synthesis`** CSS property controls which missing typefaces, bold or italic, may be synthesized by the browser.\n   *\n   * **Initial value**: `weight style`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **34**  | **9**  |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/font-synthesis\n   */\n  \"font-synthesis\"?: FontSynthesisProperty;\n  /**\n   * The **font-variant** CSS property is a shorthand for the longhand properties `font-variant-caps`, `font-variant-numeric`, `font-variant-alternates`, `font-variant-ligatures`, and `font-variant-east-asian`. You can also set the CSS Level 2 (Revision 1) values of `font-variant`, (that is, `normal` or `small-caps`), by using the `font` shorthand.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/font-variant\n   */\n  \"font-variant\"?: FontVariantProperty;\n  /**\n   * The **`font-variant-caps`** CSS property controls the use of alternate glyphs for capital letters.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **52** | **34**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/font-variant-caps\n   */\n  \"font-variant-caps\"?: FontVariantCapsProperty;\n  /**\n   * The **`font-variant-east-asian`** CSS property controls the use of alternate glyphs for East Asian scripts, like Japanese and Chinese.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **63** | **34**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/font-variant-east-asian\n   */\n  \"font-variant-east-asian\"?: FontVariantEastAsianProperty;\n  /**\n   * The **`font-variant-ligatures`** CSS property controls which ligatures and contextual forms are used in textual content of the elements it applies to. This leads to more harmonized forms in the resulting text.\n   *\n   * **Initial value**: `normal`\n   *\n   * |  Chrome  | Firefox | Safari  | Edge | IE  |\n   * | :------: | :-----: | :-----: | :--: | :-: |\n   * |  **34**  | **34**  | **9.1** |  No  | No  |\n   * | 31 _-x-_ |         | 7 _-x-_ |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/font-variant-ligatures\n   */\n  \"font-variant-ligatures\"?: FontVariantLigaturesProperty;\n  /**\n   * The **`font-variant-numeric`** CSS property controls the usage of alternate glyphs for numbers, fractions, and ordinal markers.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari  | Edge | IE  |\n   * | :----: | :-----: | :-----: | :--: | :-: |\n   * | **52** | **34**  | **9.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/font-variant-numeric\n   */\n  \"font-variant-numeric\"?: FontVariantNumericProperty;\n  /**\n   * The **`font-variant-position`** CSS property controls the use of alternate, smaller glyphs that are positioned as superscript or subscript.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **34**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/font-variant-position\n   */\n  \"font-variant-position\"?: FontVariantPositionProperty;\n  /**\n   * The **`font-variation-settings`** CSS property provides low-level control over variable font characteristics, by specifying the four letter axis names of the characteristics you want to vary, along with their values.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari |  Edge  | IE  |\n   * | :----: | :-----: | :----: | :----: | :-: |\n   * | **62** | **62**  | **11** | **17** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/font-variation-settings\n   */\n  \"font-variation-settings\"?: FontVariationSettingsProperty;\n  /**\n   * The **`font-weight`** CSS property specifies the weight (or boldness) of the font. The font weights available to you will depend on the `font-family` you are using. Some fonts are only available in `normal` and `bold`.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **2**  |  **1**  | **1**  | **12** | **3** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/font-weight\n   */\n  \"font-weight\"?: FontWeightProperty;\n  /**\n   * The **`grid-auto-columns`** CSS property specifies the size of an implicitly-created grid column track.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox |  Safari  |          Edge           |             IE              |\n   * | :----: | :-----: | :------: | :---------------------: | :-------------------------: |\n   * | **57** | **70**  | **10.1** |         **16**          | **10** _(-ms-grid-columns)_ |\n   * |        |         |          | 12 _(-ms-grid-columns)_ |                             |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/grid-auto-columns\n   */\n  \"grid-auto-columns\"?: GridAutoColumnsProperty<TLength>;\n  /**\n   * The **`grid-auto-flow`** CSS property controls how the auto-placement algorithm works, specifying exactly how auto-placed items get flowed into the grid.\n   *\n   * **Initial value**: `row`\n   *\n   * | Chrome | Firefox |  Safari  |  Edge  | IE  |\n   * | :----: | :-----: | :------: | :----: | :-: |\n   * | **57** | **52**  | **10.1** | **16** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/grid-auto-flow\n   */\n  \"grid-auto-flow\"?: GridAutoFlowProperty;\n  /**\n   * The **`grid-auto-rows`** CSS property specifies the size of an implicitly-created grid row track.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox |  Safari  |         Edge         |            IE            |\n   * | :----: | :-----: | :------: | :------------------: | :----------------------: |\n   * | **57** | **70**  | **10.1** |        **16**        | **10** _(-ms-grid-rows)_ |\n   * |        |         |          | 12 _(-ms-grid-rows)_ |                          |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/grid-auto-rows\n   */\n  \"grid-auto-rows\"?: GridAutoRowsProperty<TLength>;\n  /**\n   * The **`grid-column-end`** CSS property specifies a grid item’s end position within the grid column by contributing a line, a span, or nothing (automatic) to its grid placement, thereby specifying the block-end edge of its grid area.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox |  Safari  |  Edge  | IE  |\n   * | :----: | :-----: | :------: | :----: | :-: |\n   * | **57** | **52**  | **10.1** | **16** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/grid-column-end\n   */\n  \"grid-column-end\"?: GridColumnEndProperty;\n  /**\n   * The **`grid-column-start`** CSS property specifies a grid item’s start position within the grid column by contributing a line, a span, or nothing (automatic) to its grid placement. This start position defines the block-start edge of the grid area.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox |  Safari  |  Edge  | IE  |\n   * | :----: | :-----: | :------: | :----: | :-: |\n   * | **57** | **52**  | **10.1** | **16** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/grid-column-start\n   */\n  \"grid-column-start\"?: GridColumnStartProperty;\n  /**\n   * The **`grid-row-end`** CSS property specifies a grid item’s end position within the grid row by contributing a line, a span, or nothing (automatic) to its grid placement, thereby specifying the inline-end edge of its grid area.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox |  Safari  |  Edge  | IE  |\n   * | :----: | :-----: | :------: | :----: | :-: |\n   * | **57** | **52**  | **10.1** | **16** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/grid-row-end\n   */\n  \"grid-row-end\"?: GridRowEndProperty;\n  /**\n   * The **`grid-row-start`** CSS property specifies a grid item’s start position within the grid row by contributing a line, a span, or nothing (automatic) to its grid placement, thereby specifying the inline-start edge of its grid area.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox |  Safari  |  Edge  | IE  |\n   * | :----: | :-----: | :------: | :----: | :-: |\n   * | **57** | **52**  | **10.1** | **16** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/grid-row-start\n   */\n  \"grid-row-start\"?: GridRowStartProperty;\n  /**\n   * The **`grid-template-areas`** CSS property specifies named grid areas.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox |  Safari  |  Edge  | IE  |\n   * | :----: | :-----: | :------: | :----: | :-: |\n   * | **57** | **52**  | **10.1** | **16** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/grid-template-areas\n   */\n  \"grid-template-areas\"?: GridTemplateAreasProperty;\n  /**\n   * The **`grid-template-columns`** CSS property defines the line names and track sizing functions of the grid columns.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox |  Safari  |  Edge  | IE  |\n   * | :----: | :-----: | :------: | :----: | :-: |\n   * | **57** | **52**  | **10.1** | **16** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/grid-template-columns\n   */\n  \"grid-template-columns\"?: GridTemplateColumnsProperty<TLength>;\n  /**\n   * The **`grid-template-rows`** CSS property defines the line names and track sizing functions of the grid rows.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox |  Safari  |  Edge  | IE  |\n   * | :----: | :-----: | :------: | :----: | :-: |\n   * | **57** | **52**  | **10.1** | **16** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/grid-template-rows\n   */\n  \"grid-template-rows\"?: GridTemplateRowsProperty<TLength>;\n  /**\n   * The **`hanging-punctuation`** CSS property specifies whether a punctuation mark should hang at the start or end of a line of text. Hanging punctuation may be placed outside the line box.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   |   No    | **10** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/hanging-punctuation\n   */\n  \"hanging-punctuation\"?: HangingPunctuationProperty;\n  /**\n   * The **`height`** CSS property specifies the height of an element. By default, the property defines the height of the content area. If `box-sizing` is set to `border-box`, however, it instead determines the height of the border area.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/height\n   */\n  height?: HeightProperty<TLength>;\n  /**\n   * The **`hyphens`** CSS property specifies how words should be hyphenated when text wraps across multiple lines. You can prevent hyphenation entirely, use hyphenation in manually-specified points within the text, or let the browser automatically insert hyphens where appropriate.\n   *\n   * **Initial value**: `manual`\n   *\n   * |  Chrome  | Firefox |    Safari     |     Edge     |      IE      |\n   * | :------: | :-----: | :-----------: | :----------: | :----------: |\n   * |  **55**  | **43**  | **5.1** _-x-_ | **12** _-x-_ | **10** _-x-_ |\n   * | 13 _-x-_ | 6 _-x-_ |               |              |              |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/hyphens\n   */\n  hyphens?: HyphensProperty;\n  /**\n   * The **`image-orientation`** CSS property specifies a layout-independent correction to the orientation of an image. It should _not_ be used for any other orientation adjustments; instead, the `transform` property should be used with the `rotate` `<transform-function>`.\n   *\n   * **Initial value**: `0deg`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **26**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/image-orientation\n   */\n  \"image-orientation\"?: ImageOrientationProperty;\n  /**\n   * The **`image-rendering`** CSS property sets an image scaling algorithm. The property applies to an element itself, to any images set in its other properties, and to its descendants.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **13** | **3.6** | **6**  |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/image-rendering\n   */\n  \"image-rendering\"?: ImageRenderingProperty;\n  /** **Initial value**: `1dppx` */\n  \"image-resolution\"?: ImageResolutionProperty;\n  /**\n   * The `initial-letter` CSS property sets styling for dropped, raised, and sunken initial letters.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   |   No    | **9**  |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/initial-letter\n   */\n  \"initial-letter\"?: InitialLetterProperty;\n  /**\n   * The **`inline-size`** CSS property defines the horizontal or vertical size of an element's block, depending on its writing mode. It corresponds to either the `width` or the `height` property, depending on the value of `writing-mode`.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **57** | **41**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/inline-size\n   */\n  \"inline-size\"?: InlineSizeProperty<TLength>;\n  /**\n   * The **`inset`** CSS property defines the logical block and inline start and end offsets of an element, which map to physical offsets depending on the element's writing mode, directionality, and text orientation. It corresponds to the `top` and `bottom`, or `right` and `left` properties depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **66**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/inset\n   */\n  inset?: InsetProperty<TLength>;\n  /**\n   * The **`inset-block`** CSS property defines the logical block start and end offsets of an element, which maps to physical offsets depending on the element's writing mode, directionality, and text orientation. It corresponds to the `top` and `bottom`, or `right` and `left` properties depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |  n/a   | **63**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/inset-block\n   */\n  \"inset-block\"?: InsetBlockProperty<TLength>;\n  /**\n   * The **`inset-block-end`** CSS property defines the logical block end offset of an element, which maps to a physical inset depending on the element's writing mode, directionality, and text orientation. It corresponds to the `top`, `right`, `bottom`, or `left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |  n/a   | **63**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/inset-block-end\n   */\n  \"inset-block-end\"?: InsetBlockEndProperty<TLength>;\n  /**\n   * The **`inset-block-start`** CSS property defines the logical block start offset of an element, which maps to a physical inset depending on the element's writing mode, directionality, and text orientation. It corresponds to the `top`, `right`, `bottom`, or `left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |  n/a   | **63**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/inset-block-start\n   */\n  \"inset-block-start\"?: InsetBlockStartProperty<TLength>;\n  /**\n   * The **`inset-inline`** CSS property defines the logical block start and end offsets of an element, which maps to physical offsets depending on the element's writing mode, directionality, and text orientation. It corresponds to the `top` and `bottom`, or `right` and `left` properties depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |  n/a   | **63**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/inset-inline\n   */\n  \"inset-inline\"?: InsetInlineProperty<TLength>;\n  /**\n   * The **`inset-inline-end`** CSS property defines the logical inline end inset of an element, which maps to a physical inset depending on the element's writing mode, directionality, and text orientation. It corresponds to the `top`, `right`, `bottom`, or `left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |  n/a   | **63**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/inset-inline-end\n   */\n  \"inset-inline-end\"?: InsetInlineEndProperty<TLength>;\n  /**\n   * The **`inset-inline-start`** CSS property defines the logical inline start inset of an element, which maps to a physical offset depending on the element's writing mode, directionality, and text orientation. It corresponds to the `top`, `right`, `bottom`, or `left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |  n/a   | **63**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/inset-inline-start\n   */\n  \"inset-inline-start\"?: InsetInlineStartProperty<TLength>;\n  /**\n   * The **`isolation`** CSS property determines whether an element must create a new stacking context.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **41** | **36**  | **8**  |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/isolation\n   */\n  isolation?: IsolationProperty;\n  /**\n   * The CSS **`justify-content`** property defines how the browser distributes space between and around content items along the main-axis of a flex container, and the inline axis of a grid container.\n   *\n   * **Initial value**: `normal`\n   *\n   * ---\n   *\n   * _Supported in Flex Layout_\n   *\n   * |  Chrome  | Firefox |  Safari   |  Edge  |   IE   |\n   * | :------: | :-----: | :-------: | :----: | :----: |\n   * |  **52**  | **20**  |   **9**   | **12** | **11** |\n   * | 21 _-x-_ |         | 6.1 _-x-_ |        |        |\n   *\n   * ---\n   *\n   * _Supported in Grid Layout_\n   *\n   * | Chrome | Firefox |  Safari  |  Edge  | IE  |\n   * | :----: | :-----: | :------: | :----: | :-: |\n   * | **57** | **52**  | **10.1** | **16** | No  |\n   *\n   * ---\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/justify-content\n   */\n  \"justify-content\"?: JustifyContentProperty;\n  /**\n   * The CSS **`justify-items`** property defines the default `justify-self` for all items of the box, giving them all a default way of justifying each box along the appropriate axis.\n   *\n   * **Initial value**: `legacy`\n   *\n   * ---\n   *\n   * _Supported in Flex Layout_\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE   |\n   * | :----: | :-----: | :----: | :----: | :----: |\n   * | **52** | **20**  | **9**  | **12** | **11** |\n   *\n   * ---\n   *\n   * _Supported in Grid Layout_\n   *\n   * | Chrome | Firefox |  Safari  |  Edge  | IE  |\n   * | :----: | :-----: | :------: | :----: | :-: |\n   * | **57** | **45**  | **10.1** | **16** | No  |\n   *\n   * ---\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/justify-items\n   */\n  \"justify-items\"?: JustifyItemsProperty;\n  /**\n   * The CSS **`justify-self`** property set the way a box is justified inside its alignment container along the appropriate axis.\n   *\n   * **Initial value**: `auto`\n   *\n   * ---\n   *\n   * _Supported in Flex Layout_\n   *\n   * | Chrome | Firefox |  Safari  |  Edge  | IE  |\n   * | :----: | :-----: | :------: | :----: | :-: |\n   * | **57** | **45**  | **10.1** | **16** | No  |\n   *\n   * ---\n   *\n   * _Supported in Grid Layout_\n   *\n   * | Chrome | Firefox |  Safari  |  Edge  | IE  |\n   * | :----: | :-----: | :------: | :----: | :-: |\n   * | **57** | **45**  | **10.1** | **16** | No  |\n   *\n   * ---\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/justify-self\n   */\n  \"justify-self\"?: JustifySelfProperty;\n  /**\n   * The **`left`** CSS property participates in specifying the horizontal position of a _positioned element_. It has no effect on non-positioned elements.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE    |\n   * | :----: | :-----: | :----: | :----: | :-----: |\n   * | **1**  |  **1**  | **1**  | **12** | **5.5** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/left\n   */\n  left?: LeftProperty<TLength>;\n  /**\n   * The **`letter-spacing`** CSS property sets the spacing behavior between text characters.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/letter-spacing\n   */\n  \"letter-spacing\"?: LetterSpacingProperty<TLength>;\n  /**\n   * The **`line-break`** CSS property sets how to break lines of Chinese, Japanese, or Korean (CJK) text when working with punctuation and symbols.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome  | Firefox |   Safari    |  Edge  |   IE    |\n   * | :-----: | :-----: | :---------: | :----: | :-----: |\n   * | **58**  | **69**  | **3** _-x-_ | **14** | **5.5** |\n   * | 1 _-x-_ |         |             |        |         |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/line-break\n   */\n  \"line-break\"?: LineBreakProperty;\n  /**\n   * The **`line-height`** CSS property sets the amount of space used for lines, such as in text. On block-level elements, it specifies the minimum height of line boxes within the element. On non-replaced inline elements, it specifies the height that is used to calculate line box height.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/line-height\n   */\n  \"line-height\"?: LineHeightProperty<TLength>;\n  /**\n   * The **`line-height-step`** CSS property sets the step unit for line box heights. When the property is set, line box heights are rounded up to the closest multiple of the unit.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |  n/a   |   No    |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/line-height-step\n   */\n  \"line-height-step\"?: LineHeightStepProperty<TLength>;\n  /**\n   * The **`list-style-image`** CSS property sets an image to be used as the list item marker.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/list-style-image\n   */\n  \"list-style-image\"?: ListStyleImageProperty;\n  /**\n   * The **`list-style-position`** CSS property sets the position of the `::marker` relative to a list item.\n   *\n   * **Initial value**: `outside`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/list-style-position\n   */\n  \"list-style-position\"?: ListStylePositionProperty;\n  /**\n   * The **`list-style-type`** CSS property sets the marker (such as a disc, character, or custom counter style) of a list item element.\n   *\n   * **Initial value**: `disc`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/list-style-type\n   */\n  \"list-style-type\"?: ListStyleTypeProperty;\n  /**\n   * The **`margin-block`** CSS property defines the logical block start and end margins of an element, which maps to physical margins depending on the element's writing mode, directionality, and text orientation.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **66**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/margin-block\n   */\n  \"margin-block\"?: MarginBlockProperty<TLength>;\n  /**\n   * The **`margin-block-end`** CSS property defines the logical block end margin of an element, which maps to a physical margin depending on the element's writing mode, directionality, and text orientation.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **69** | **41**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/margin-block-end\n   */\n  \"margin-block-end\"?: MarginBlockEndProperty<TLength>;\n  /**\n   * The **`margin-block-start`** CSS property defines the logical block start margin of an element, which maps to a physical margin depending on the element's writing mode, directionality, and text orientation.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **69** | **41**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/margin-block-start\n   */\n  \"margin-block-start\"?: MarginBlockStartProperty<TLength>;\n  /**\n   * The **`margin-bottom`** CSS property sets the margin area on the bottom of an element. A positive value places it farther from its neighbors, while a negative value places it closer.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **3** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/margin-bottom\n   */\n  \"margin-bottom\"?: MarginBottomProperty<TLength>;\n  /**\n   * The **`margin-inline`** CSS property defines the logical inline start and end margins of an element, which maps to physical margins depending on the element's writing mode, directionality, and text orientation.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **66**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/margin-inline\n   */\n  \"margin-inline\"?: MarginInlineProperty<TLength>;\n  /**\n   * The **`margin-inline-end`** CSS property defines the logical inline end margin of an element, which maps to a physical margin depending on the element's writing mode, directionality, and text orientation. In other words, it corresponds to the `margin-top`, `margin-right`, `margin-bottom` or `margin-left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `0`\n   *\n   * |          Chrome          |        Firefox        |          Safari          | Edge | IE  |\n   * | :----------------------: | :-------------------: | :----------------------: | :--: | :-: |\n   * |          **69**          |        **41**         |         **12.1**         |  No  | No  |\n   * | 2 _(-webkit-margin-end)_ | 3 _(-moz-margin-end)_ | 3 _(-webkit-margin-end)_ |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/margin-inline-end\n   */\n  \"margin-inline-end\"?: MarginInlineEndProperty<TLength>;\n  /**\n   * The **`margin-inline-start`** CSS property defines the logical inline start margin of an element, which maps to a physical margin depending on the element's writing mode, directionality, and text orientation. It corresponds to the `margin-top`, `margin-right`, `margin-bottom`, or `margin-left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `0`\n   *\n   * |           Chrome           |         Firefox         |           Safari           | Edge | IE  |\n   * | :------------------------: | :---------------------: | :------------------------: | :--: | :-: |\n   * |           **69**           |         **41**          |          **12.1**          |  No  | No  |\n   * | 2 _(-webkit-margin-start)_ | 3 _(-moz-margin-start)_ | 3 _(-webkit-margin-start)_ |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/margin-inline-start\n   */\n  \"margin-inline-start\"?: MarginInlineStartProperty<TLength>;\n  /**\n   * The **`margin-left`** CSS property sets the margin area on the left side of an element. A positive value places it farther from its neighbors, while a negative value places it closer.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **3** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/margin-left\n   */\n  \"margin-left\"?: MarginLeftProperty<TLength>;\n  /**\n   * The **`margin-right`** CSS property sets the margin area on the right side of an element. A positive value places it farther from its neighbors, while a negative value places it closer.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **3** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/margin-right\n   */\n  \"margin-right\"?: MarginRightProperty<TLength>;\n  /**\n   * The **`margin-top`** CSS property sets the margin area on the top of an element. A positive value places it farther from its neighbors, while a negative value places it closer.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **3** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/margin-top\n   */\n  \"margin-top\"?: MarginTopProperty<TLength>;\n  /**\n   * The **`mask-border-mode`** CSS property specifies the blending mode used in a mask border.\n   *\n   * **Initial value**: `alpha`\n   */\n  \"mask-border-mode\"?: MaskBorderModeProperty;\n  /**\n   * The **`mask-border-outset`** CSS property specifies the distance by which an element's mask border is set out from its border box.\n   *\n   * **Initial value**: `0`\n   */\n  \"mask-border-outset\"?: MaskBorderOutsetProperty<TLength>;\n  /**\n   * The **`mask-border-repeat`** CSS property sets how the edge regions of a source image are adjusted to fit the dimensions of an element's mask border.\n   *\n   * **Initial value**: `stretch`\n   */\n  \"mask-border-repeat\"?: MaskBorderRepeatProperty;\n  /**\n   * The **`mask-border-slice`** CSS property divides the image set by `mask-border-source` into regions. These regions are used to form the components of an element's mask border.\n   *\n   * **Initial value**: `0`\n   */\n  \"mask-border-slice\"?: MaskBorderSliceProperty;\n  /**\n   * The **`mask-border-source`** CSS property sets the source image used to create an element's mask border.\n   *\n   * **Initial value**: `none`\n   */\n  \"mask-border-source\"?: MaskBorderSourceProperty;\n  /**\n   * The **`mask-border-width`** CSS property sets the width of an element's mask border.\n   *\n   * **Initial value**: `auto`\n   */\n  \"mask-border-width\"?: MaskBorderWidthProperty<TLength>;\n  /**\n   * The **`mask-clip`** CSS property determines the area, which is affected by a mask. The painted content of an element must be restricted to this area.\n   *\n   * **Initial value**: `border-box`\n   *\n   * |   Chrome    | Firefox |   Safari    | Edge | IE  |\n   * | :---------: | :-----: | :---------: | :--: | :-: |\n   * | **1** _-x-_ | **53**  | **4** _-x-_ |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/mask-clip\n   */\n  \"mask-clip\"?: MaskClipProperty;\n  /**\n   * The **`mask-composite`** CSS property represents a compositing operation used on the current mask layer with the mask layers below it.\n   *\n   * **Initial value**: `add`\n   *\n   * | Chrome | Firefox | Safari |  Edge  | IE  |\n   * | :----: | :-----: | :----: | :----: | :-: |\n   * |   No   | **53**  |   No   | **18** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/mask-composite\n   */\n  \"mask-composite\"?: MaskCompositeProperty;\n  /**\n   * The **`mask-image`** CSS property sets the image that is used as mask layer for an element.\n   *\n   * **Initial value**: `none`\n   *\n   * |   Chrome    | Firefox |   Safari    |  Edge  | IE  |\n   * | :---------: | :-----: | :---------: | :----: | :-: |\n   * | **1** _-x-_ | **53**  | **4** _-x-_ | **16** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/mask-image\n   */\n  \"mask-image\"?: MaskImageProperty;\n  /**\n   * The **`mask-mode`** CSS property sets whether the mask reference defined by `mask-image` is treated as a luminance or alpha mask.\n   *\n   * **Initial value**: `match-source`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **53**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/mask-mode\n   */\n  \"mask-mode\"?: MaskModeProperty;\n  /**\n   * The **`mask-origin`** CSS property sets the origin of a mask.\n   *\n   * **Initial value**: `border-box`\n   *\n   * |   Chrome    | Firefox |   Safari    | Edge | IE  |\n   * | :---------: | :-----: | :---------: | :--: | :-: |\n   * | **1** _-x-_ | **53**  | **4** _-x-_ |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/mask-origin\n   */\n  \"mask-origin\"?: MaskOriginProperty;\n  /**\n   * The **`mask-position`** CSS property sets the initial position, relative to the mask position layer set by `mask-origin`, for each defined mask image.\n   *\n   * **Initial value**: `center`\n   *\n   * |   Chrome    | Firefox |    Safari     |  Edge  | IE  |\n   * | :---------: | :-----: | :-----------: | :----: | :-: |\n   * | **1** _-x-_ | **53**  | **3.2** _-x-_ | **18** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/mask-position\n   */\n  \"mask-position\"?: MaskPositionProperty<TLength>;\n  /**\n   * The **`mask-repeat`** CSS property sets how mask images are repeated. A mask image can be repeated along the horizontal axis, the vertical axis, both axes, or not repeated at all.\n   *\n   * **Initial value**: `no-repeat`\n   *\n   * |   Chrome    | Firefox |    Safari     |  Edge  | IE  |\n   * | :---------: | :-----: | :-----------: | :----: | :-: |\n   * | **1** _-x-_ | **53**  | **3.2** _-x-_ | **18** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/mask-repeat\n   */\n  \"mask-repeat\"?: MaskRepeatProperty;\n  /**\n   * The **`mask-size`** CSS property specifies the sizes of the mask images. The size of the image can be fully or partially constrained in order to preserve its intrinsic ratio.\n   *\n   * **Initial value**: `auto`\n   *\n   * |   Chrome    | Firefox |   Safari    |  Edge  | IE  |\n   * | :---------: | :-----: | :---------: | :----: | :-: |\n   * | **4** _-x-_ | **53**  | **4** _-x-_ | **18** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/mask-size\n   */\n  \"mask-size\"?: MaskSizeProperty<TLength>;\n  /**\n   * The **`mask-type`** CSS property sets whether an SVG `<mask>` element is used as a _luminance_ or an _alpha_ mask. It applies to the `<mask>` element itself.\n   *\n   * **Initial value**: `luminance`\n   *\n   * | Chrome | Firefox | Safari  | Edge | IE  |\n   * | :----: | :-----: | :-----: | :--: | :-: |\n   * | **24** | **35**  | **6.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/mask-type\n   */\n  \"mask-type\"?: MaskTypeProperty;\n  /**\n   * The `**max-block-size**` CSS property specifies the maximum size of an element in the direction opposite that of the writing direction as specified by `writing-mode`. That is, if the writing direction is horizontal, then `max-block-size` is equivalent to `max-height`; if the writing direction is vertical, `max-block-size` is the same as `max-width`.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **57** | **41**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/max-block-size\n   */\n  \"max-block-size\"?: MaxBlockSizeProperty<TLength>;\n  /**\n   * The **`max-height`** CSS property sets the maximum height of an element. It prevents the used value of the `height` property from becoming larger than the value specified for `max-height`.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari  |  Edge  |  IE   |\n   * | :----: | :-----: | :-----: | :----: | :---: |\n   * | **18** |  **1**  | **1.3** | **12** | **7** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/max-height\n   */\n  \"max-height\"?: MaxHeightProperty<TLength>;\n  /**\n   * The **`max-inline-size`** CSS property defines the horizontal or vertical maximum size of an element's block depending on its writing mode. It corresponds to the `max-width` or the `max-height` property depending on the value defined for `writing-mode`. If the writing mode is vertically oriented, the value of `max-inline-size` relates to the maximal height of the element, otherwise it relates to the maximal width of the element. It relates to `max-block-size`, which defines the other dimension of the element.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox |   Safari   | Edge | IE  |\n   * | :----: | :-----: | :--------: | :--: | :-: |\n   * | **57** | **41**  |  **12.1**  |  No  | No  |\n   * |        |         | 10.1 _-x-_ |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/max-inline-size\n   */\n  \"max-inline-size\"?: MaxInlineSizeProperty<TLength>;\n  /** **Initial value**: `none` */\n  \"max-lines\"?: MaxLinesProperty;\n  /**\n   * The **`max-width`** CSS property sets the maximum width of an element. It prevents the used value of the `width` property from becoming larger than the value specified by `max-width`.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **7** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/max-width\n   */\n  \"max-width\"?: MaxWidthProperty<TLength>;\n  /**\n   * The **`min-block-size`** CSS property defines the minimum horizontal or vertical size of an element's block, depending on its writing mode. It corresponds to either the `min-width` or the `min-height` property, depending on the value of `writing-mode`.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **57** | **41**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/min-block-size\n   */\n  \"min-block-size\"?: MinBlockSizeProperty<TLength>;\n  /**\n   * The **`min-height`** CSS property sets the minimum height of an element. It prevents the used value of the `height` property from becoming smaller than the value specified for `min-height`.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari  |  Edge  |  IE   |\n   * | :----: | :-----: | :-----: | :----: | :---: |\n   * | **1**  |  **3**  | **1.3** | **12** | **7** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/min-height\n   */\n  \"min-height\"?: MinHeightProperty<TLength>;\n  /**\n   * The **`min-inline-size`** CSS property defines the horizontal or vertical minimal size of an element's block, depending on its writing mode. It corresponds to either the `min-width` or the `min-height` property, depending on the value of `writing-mode`.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **57** | **41**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/min-inline-size\n   */\n  \"min-inline-size\"?: MinInlineSizeProperty<TLength>;\n  /**\n   * The **`min-width`** CSS property sets the minimum width of an element. It prevents the used value of the `width` property from becoming smaller than the value specified for `min-width`.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **7** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/min-width\n   */\n  \"min-width\"?: MinWidthProperty<TLength>;\n  /**\n   * The **`mix-blend-mode`** CSS property sets how an element's content should blend with the content of the element's parent and the element's background.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **41** | **32**  | **8**  |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/mix-blend-mode\n   */\n  \"mix-blend-mode\"?: MixBlendModeProperty;\n  /**\n   * The **`offset-distance`** CSS property specifies a position along an `offset-path`.\n   *\n   * **Initial value**: `0`\n   *\n   * |         Chrome         | Firefox | Safari | Edge | IE  |\n   * | :--------------------: | :-----: | :----: | :--: | :-: |\n   * |         **55**         | **72**  |   No   |  No  | No  |\n   * | 46 _(motion-distance)_ |         |        |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/offset-distance\n   */\n  \"motion-distance\"?: OffsetDistanceProperty<TLength>;\n  /**\n   * The **`offset-path`** CSS property specifies a motion path for an element to follow and defines the element's positioning within the parent container or SVG coordinate system.\n   *\n   * **Initial value**: `none`\n   *\n   * |       Chrome       | Firefox | Safari | Edge | IE  |\n   * | :----------------: | :-----: | :----: | :--: | :-: |\n   * |       **55**       | **72**  |   No   |  No  | No  |\n   * | 46 _(motion-path)_ |         |        |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/offset-path\n   */\n  \"motion-path\"?: OffsetPathProperty;\n  /**\n   * The **`offset-rotate`** CSS property defines the direction of the element while positioning along the offset path.\n   *\n   * **Initial value**: `auto`\n   *\n   * |         Chrome         | Firefox | Safari | Edge | IE  |\n   * | :--------------------: | :-----: | :----: | :--: | :-: |\n   * |         **56**         | **72**  |   No   |  No  | No  |\n   * | 46 _(motion-rotation)_ |         |        |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/offset-rotate\n   */\n  \"motion-rotation\"?: OffsetRotateProperty;\n  /**\n   * The **`object-fit`** CSS property sets how the content of a replaced element, such as an `<img>` or `<video>`, should be resized to fit its container.\n   *\n   * **Initial value**: `fill`\n   *\n   * | Chrome | Firefox | Safari |  Edge  | IE  |\n   * | :----: | :-----: | :----: | :----: | :-: |\n   * | **31** | **36**  | **10** | **16** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/object-fit\n   */\n  \"object-fit\"?: ObjectFitProperty;\n  /**\n   * The **`object-position`** CSS property specifies the alignment of the selected replaced element's contents within the element's box. Areas of the box which aren't covered by the replaced element's object will show the element's background.\n   *\n   * **Initial value**: `50% 50%`\n   *\n   * | Chrome | Firefox | Safari |  Edge  | IE  |\n   * | :----: | :-----: | :----: | :----: | :-: |\n   * | **31** | **36**  | **10** | **16** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/object-position\n   */\n  \"object-position\"?: ObjectPositionProperty<TLength>;\n  /**\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **79** | **72**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/offset-anchor\n   */\n  \"offset-anchor\"?: OffsetAnchorProperty<TLength>;\n  /**\n   * The **`offset-distance`** CSS property specifies a position along an `offset-path`.\n   *\n   * **Initial value**: `0`\n   *\n   * |         Chrome         | Firefox | Safari | Edge | IE  |\n   * | :--------------------: | :-----: | :----: | :--: | :-: |\n   * |         **55**         | **72**  |   No   |  No  | No  |\n   * | 46 _(motion-distance)_ |         |        |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/offset-distance\n   */\n  \"offset-distance\"?: OffsetDistanceProperty<TLength>;\n  /**\n   * The **`offset-path`** CSS property specifies a motion path for an element to follow and defines the element's positioning within the parent container or SVG coordinate system.\n   *\n   * **Initial value**: `none`\n   *\n   * |       Chrome       | Firefox | Safari | Edge | IE  |\n   * | :----------------: | :-----: | :----: | :--: | :-: |\n   * |       **55**       | **72**  |   No   |  No  | No  |\n   * | 46 _(motion-path)_ |         |        |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/offset-path\n   */\n  \"offset-path\"?: OffsetPathProperty;\n  /**\n   * The **`offset-rotate`** CSS property defines the direction of the element while positioning along the offset path.\n   *\n   * **Initial value**: `auto`\n   *\n   * |         Chrome         | Firefox | Safari | Edge | IE  |\n   * | :--------------------: | :-----: | :----: | :--: | :-: |\n   * |         **56**         | **72**  |   No   |  No  | No  |\n   * | 46 _(motion-rotation)_ |         |        |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/offset-rotate\n   */\n  \"offset-rotate\"?: OffsetRotateProperty;\n  /**\n   * The **`offset-rotate`** CSS property defines the direction of the element while positioning along the offset path.\n   *\n   * **Initial value**: `auto`\n   *\n   * |         Chrome         | Firefox | Safari | Edge | IE  |\n   * | :--------------------: | :-----: | :----: | :--: | :-: |\n   * |         **56**         | **72**  |   No   |  No  | No  |\n   * | 46 _(motion-rotation)_ |         |        |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/offset-rotate\n   */\n  \"offset-rotation\"?: OffsetRotateProperty;\n  /**\n   * The **`opacity`** CSS property sets the transparency of an element or the degree to which content behind an element is visible.\n   *\n   * **Initial value**: `1.0`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **2**  | **12** | **9** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/opacity\n   */\n  opacity?: OpacityProperty;\n  /**\n   * The **`order`** CSS property sets the order to lay out an item in a flex or grid container. Items in a container are sorted by ascending `order` value and then by their source code order.\n   *\n   * **Initial value**: `0`\n   *\n   * |  Chrome  | Firefox | Safari  |  Edge  |    IE    |\n   * | :------: | :-----: | :-----: | :----: | :------: |\n   * |  **29**  | **20**  |  **9**  | **12** |  **11**  |\n   * | 21 _-x-_ |         | 7 _-x-_ |        | 10 _-x-_ |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/order\n   */\n  order?: GlobalsNumber;\n  /**\n   * The **`orphans`** CSS property sets the minimum number of lines in a block container that must be shown at the _bottom_ of a page, region, or column.\n   *\n   * **Initial value**: `2`\n   *\n   * | Chrome | Firefox | Safari  |  Edge  |  IE   |\n   * | :----: | :-----: | :-----: | :----: | :---: |\n   * | **25** |   No    | **1.3** | **12** | **8** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/orphans\n   */\n  orphans?: GlobalsNumber;\n  /**\n   * The **`outline-color`** CSS property sets the color of an element's outline.\n   *\n   * **Initial value**: `invert`, for browsers supporting it, `currentColor` for the other\n   *\n   * | Chrome | Firefox | Safari  |  Edge  |  IE   |\n   * | :----: | :-----: | :-----: | :----: | :---: |\n   * | **1**  | **1.5** | **1.2** | **12** | **8** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/outline-color\n   */\n  \"outline-color\"?: OutlineColorProperty;\n  /**\n   * The **`outline-offset`** CSS property sets the amount of space between an outline and the edge or border of an element.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari  |  Edge  | IE  |\n   * | :----: | :-----: | :-----: | :----: | :-: |\n   * | **1**  | **1.5** | **1.2** | **15** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/outline-offset\n   */\n  \"outline-offset\"?: OutlineOffsetProperty<TLength>;\n  /**\n   * The **`outline-style`** CSS property sets the style of an element's outline. An outline is a line that is drawn around an element, outside the `border`.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari  |  Edge  |  IE   |\n   * | :----: | :-----: | :-----: | :----: | :---: |\n   * | **1**  | **1.5** | **1.2** | **12** | **8** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/outline-style\n   */\n  \"outline-style\"?: OutlineStyleProperty;\n  /**\n   * The **`outline-width`** CSS property sets the thickness of an element's outline. An outline is a line that is drawn around an element, outside the `border`.\n   *\n   * **Initial value**: `medium`\n   *\n   * | Chrome | Firefox | Safari  |  Edge  |  IE   |\n   * | :----: | :-----: | :-----: | :----: | :---: |\n   * | **1**  | **1.5** | **1.2** | **12** | **8** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/outline-width\n   */\n  \"outline-width\"?: OutlineWidthProperty<TLength>;\n  /**\n   * The **`overflow`** CSS property sets what to do when an element's content is too big to fit in its block formatting context. It is a shorthand for `overflow-x` and `overflow-y`.\n   *\n   * **Initial value**: `visible`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/overflow\n   */\n  overflow?: OverflowProperty;\n  /**\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **56** | **66**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/overflow-anchor\n   */\n  \"overflow-anchor\"?: OverflowAnchorProperty;\n  /**\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **69**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/overflow-block\n   */\n  \"overflow-block\"?: OverflowBlockProperty;\n  /**\n   * The **`overflow-clip-box`** CSS property specifies relative to which box the clipping happens when there is an overflow. It is short hand for the `overflow-clip-box-inline` and `overflow-clip-box-block` properties.\n   *\n   * **Initial value**: `padding-box`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **29**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Mozilla/CSS/overflow-clip-box\n   */\n  \"overflow-clip-box\"?: OverflowClipBoxProperty;\n  /**\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **69**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/overflow-inline\n   */\n  \"overflow-inline\"?: OverflowInlineProperty;\n  /**\n   * The `**overflow-wrap**` CSS property sets whether the browser should insert line breaks within words to prevent text from overflowing its content box.\n   *\n   * **Initial value**: `normal`\n   *\n   * |     Chrome      |      Firefox      |     Safari      |       Edge       |          IE           |\n   * | :-------------: | :---------------: | :-------------: | :--------------: | :-------------------: |\n   * |     **23**      |      **49**       |     **6.1**     |      **18**      | **5.5** _(word-wrap)_ |\n   * | 1 _(word-wrap)_ | 3.5 _(word-wrap)_ | 1 _(word-wrap)_ | 12 _(word-wrap)_ |                       |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/overflow-wrap\n   */\n  \"overflow-wrap\"?: OverflowWrapProperty;\n  /**\n   * The **`overflow-x`** CSS property sets what shows when content overflows a block-level element's left and right edges. This may be nothing, a scroll bar, or the overflow content.\n   *\n   * **Initial value**: `visible`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  | **3.5** | **3**  | **12** | **5** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/overflow-x\n   */\n  \"overflow-x\"?: OverflowXProperty;\n  /**\n   * The **`overflow-y`** CSS property sets what shows when content overflows a block-level element's top and bottom edges. This may be nothing, a scroll bar, or the overflow content.\n   *\n   * **Initial value**: `visible`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  | **1.5** | **3**  | **12** | **5** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/overflow-y\n   */\n  \"overflow-y\"?: OverflowYProperty;\n  /**\n   * The **`overscroll-behavior`** CSS property sets what a browser does when reaching the boundary of a scrolling area. It's a shorthand for `overscroll-behavior-x` and `overscroll-behavior-y`.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari |  Edge  | IE  |\n   * | :----: | :-----: | :----: | :----: | :-: |\n   * | **63** | **59**  |   No   | **18** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/overscroll-behavior\n   */\n  \"overscroll-behavior\"?: OverscrollBehaviorProperty;\n  /**\n   * The **`overscroll-behavior-block`** CSS property sets the browser's behavior when the block direction boundary of a scrolling area is reached.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **77** | **73**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/overscroll-behavior-block\n   */\n  \"overscroll-behavior-block\"?: OverscrollBehaviorBlockProperty;\n  /**\n   * The **`overscroll-behavior-inline`** CSS property sets the browser's behavior when the inline direction boundary of a scrolling area is reached.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **77** | **73**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/overscroll-behavior-inline\n   */\n  \"overscroll-behavior-inline\"?: OverscrollBehaviorInlineProperty;\n  /**\n   * The **`overscroll-behavior-x`** CSS property sets the browser's behavior when the horizontal boundary of a scrolling area is reached.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari |  Edge  | IE  |\n   * | :----: | :-----: | :----: | :----: | :-: |\n   * | **63** | **59**  |   No   | **18** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/overscroll-behavior-x\n   */\n  \"overscroll-behavior-x\"?: OverscrollBehaviorXProperty;\n  /**\n   * The **`overscroll-behavior-y`** CSS property sets the browser's behavior when the vertical boundary of a scrolling area is reached.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari |  Edge  | IE  |\n   * | :----: | :-----: | :----: | :----: | :-: |\n   * | **63** | **59**  |   No   | **18** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/overscroll-behavior-y\n   */\n  \"overscroll-behavior-y\"?: OverscrollBehaviorYProperty;\n  /**\n   * The **`padding-block`** CSS property defines the logical block start and end padding of an element, which maps to physical padding properties depending on the element's writing mode, directionality, and text orientation.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **66**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/padding-block\n   */\n  \"padding-block\"?: PaddingBlockProperty<TLength>;\n  /**\n   * The **`padding-block-end`** CSS property defines the logical block end padding of an element, which maps to a physical padding depending on the element's writing mode, directionality, and text orientation. It corresponds to the `padding-top`, `padding-right`, `padding-bottom`, or `padding-left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **69** | **41**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/padding-block-end\n   */\n  \"padding-block-end\"?: PaddingBlockEndProperty<TLength>;\n  /**\n   * The **`padding-block-start`** CSS property defines the logical block start padding of an element, which maps to a physical padding depending on the element's writing mode, directionality, and text orientation. It corresponds to the `padding-top`, `padding-right`, `padding-bottom`, or `padding-left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **69** | **41**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/padding-block-start\n   */\n  \"padding-block-start\"?: PaddingBlockStartProperty<TLength>;\n  /**\n   * The **`padding-bottom`** CSS property sets the height of the padding area on the bottom of an element.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/padding-bottom\n   */\n  \"padding-bottom\"?: PaddingBottomProperty<TLength>;\n  /**\n   * The **`padding-inline`** CSS property defines the logical inline start and end padding of an element, which maps to physical padding properties depending on the element's writing mode, directionality, and text orientation.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **66**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/padding-inline\n   */\n  \"padding-inline\"?: PaddingInlineProperty<TLength>;\n  /**\n   * The **`padding-inline-end`** CSS property defines the logical inline end padding of an element, which maps to a physical padding depending on the element's writing mode, directionality, and text orientation. It corresponds to the `padding-top`, `padding-right`, `padding-bottom`, or `padding-left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `0`\n   *\n   * |          Chrome           |        Firefox         |          Safari           | Edge | IE  |\n   * | :-----------------------: | :--------------------: | :-----------------------: | :--: | :-: |\n   * |          **69**           |         **41**         |         **12.1**          |  No  | No  |\n   * | 2 _(-webkit-padding-end)_ | 3 _(-moz-padding-end)_ | 3 _(-webkit-padding-end)_ |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/padding-inline-end\n   */\n  \"padding-inline-end\"?: PaddingInlineEndProperty<TLength>;\n  /**\n   * The **`padding-inline-start`** CSS property defines the logical inline start padding of an element, which maps to a physical padding depending on the element's writing mode, directionality, and text orientation. It corresponds to the `padding-top`, `padding-right`, `padding-bottom`, or `padding-left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `0`\n   *\n   * |           Chrome            |         Firefox          |           Safari            | Edge | IE  |\n   * | :-------------------------: | :----------------------: | :-------------------------: | :--: | :-: |\n   * |           **69**            |          **41**          |          **12.1**           |  No  | No  |\n   * | 2 _(-webkit-padding-start)_ | 3 _(-moz-padding-start)_ | 3 _(-webkit-padding-start)_ |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/padding-inline-start\n   */\n  \"padding-inline-start\"?: PaddingInlineStartProperty<TLength>;\n  /**\n   * The **`padding-left`** CSS property sets the width of the padding area on the left side of an element.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/padding-left\n   */\n  \"padding-left\"?: PaddingLeftProperty<TLength>;\n  /**\n   * The **`padding-right`** CSS property sets the width of the padding area on the right side of an element.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/padding-right\n   */\n  \"padding-right\"?: PaddingRightProperty<TLength>;\n  /**\n   * The **`padding-top`** padding area on the top of an element.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/padding-top\n   */\n  \"padding-top\"?: PaddingTopProperty<TLength>;\n  /**\n   * The **`page-break-after`** CSS property adjusts page breaks _after_ the current element.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari  |  Edge  |  IE   |\n   * | :----: | :-----: | :-----: | :----: | :---: |\n   * | **1**  |  **1**  | **1.2** | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/page-break-after\n   */\n  \"page-break-after\"?: PageBreakAfterProperty;\n  /**\n   * The **`page-break-before`** CSS property adjusts page breaks _before_ the current element.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari  |  Edge  |  IE   |\n   * | :----: | :-----: | :-----: | :----: | :---: |\n   * | **1**  |  **1**  | **1.2** | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/page-break-before\n   */\n  \"page-break-before\"?: PageBreakBeforeProperty;\n  /**\n   * The **`page-break-inside`** CSS property adjusts page breaks _inside_ the current element.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari  |  Edge  |  IE   |\n   * | :----: | :-----: | :-----: | :----: | :---: |\n   * | **1**  | **19**  | **1.3** | **12** | **8** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/page-break-inside\n   */\n  \"page-break-inside\"?: PageBreakInsideProperty;\n  /**\n   * The **`paint-order`** CSS property lets you control the order in which the fill and stroke (and painting markers) of text content and shapes are drawn.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari |  Edge  | IE  |\n   * | :----: | :-----: | :----: | :----: | :-: |\n   * | **35** | **60**  | **8**  | **17** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/paint-order\n   */\n  \"paint-order\"?: PaintOrderProperty;\n  /**\n   * The **`perspective`** CSS property determines the distance between the z=0 plane and the user in order to give a 3D-positioned element some perspective. Each 3D element with z>0 becomes larger; each 3D-element with z<0 becomes smaller. The strength of the effect is determined by the value of this property.\n   *\n   * **Initial value**: `none`\n   *\n   * |  Chrome  | Firefox  | Safari  |  Edge  |   IE   |\n   * | :------: | :------: | :-----: | :----: | :----: |\n   * |  **36**  |  **16**  |  **9**  | **12** | **10** |\n   * | 12 _-x-_ | 10 _-x-_ | 4 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/perspective\n   */\n  perspective?: PerspectiveProperty<TLength>;\n  /**\n   * The **`perspective-origin`** CSS property determines the position at which the viewer is looking. It is used as the _vanishing point_ by the `perspective` property.\n   *\n   * **Initial value**: `50% 50%`\n   *\n   * |  Chrome  | Firefox  | Safari  |  Edge  |   IE   |\n   * | :------: | :------: | :-----: | :----: | :----: |\n   * |  **36**  |  **16**  |  **9**  | **12** | **10** |\n   * | 12 _-x-_ | 10 _-x-_ | 4 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/perspective-origin\n   */\n  \"perspective-origin\"?: PerspectiveOriginProperty<TLength>;\n  /**\n   * The `**place-content**` CSS property is a shorthand for `align-content` and `justify-content`. It can be used in any layout method which utilizes both of these alignment values.\n   *\n   * **Initial value**: `normal`\n   *\n   * ---\n   *\n   * _Supported in Flex Layout_\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **59** | **45**  | **9**  |  No  | No  |\n   *\n   * ---\n   *\n   * _Supported in Grid Layout_\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **59** | **53**  | **11** |  No  | No  |\n   *\n   * ---\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/place-content\n   */\n  \"place-content\"?: PlaceContentProperty;\n  /**\n   * The **`pointer-events`** CSS property sets under what circumstances (if any) a particular graphic element can become the target of mouse events.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE   |\n   * | :----: | :-----: | :----: | :----: | :----: |\n   * | **1**  | **1.5** | **4**  | **12** | **11** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/pointer-events\n   */\n  \"pointer-events\"?: PointerEventsProperty;\n  /**\n   * The **`position`** CSS property sets how an element is positioned in a document. The `top`, `right`, `bottom`, and `left` properties determine the final location of positioned elements.\n   *\n   * **Initial value**: `static`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/position\n   */\n  position?: PositionProperty;\n  /**\n   * The **`quotes`** CSS property sets how quotation marks appear.\n   *\n   * **Initial value**: depends on user agent\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **11** | **1.5** | **9**  | **12** | **8** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/quotes\n   */\n  quotes?: QuotesProperty;\n  /**\n   * The **`resize`** CSS property sets whether an element is resizable, and if so, in which directions.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **1**  |  **4**  | **3**  |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/resize\n   */\n  resize?: ResizeProperty;\n  /**\n   * The **`right`** CSS property participates in specifying the horizontal position of a _positioned element_. It has no effect on non-positioned elements.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE    |\n   * | :----: | :-----: | :----: | :----: | :-----: |\n   * | **1**  |  **1**  | **1**  | **12** | **5.5** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/right\n   */\n  right?: RightProperty<TLength>;\n  /**\n   * The **`rotate`** CSS property allows you to specify rotation transforms individually and independantly of the `transform` property. This maps better to typical user interface usage, and saves having to remember the exact order of transform functions to specify in the `transform` value.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **72**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/rotate\n   */\n  rotate?: RotateProperty;\n  /**\n   * The **`row-gap`** CSS property sets the size of the gap (gutter) between an element's grid rows.\n   *\n   * **Initial value**: `normal`\n   *\n   * ---\n   *\n   * _Supported in Flex Layout_\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **63**  |   No   |  No  | No  |\n   *\n   * ---\n   *\n   * _Supported in Grid Layout_\n   *\n   * |       Chrome        |       Firefox       |          Safari           |  Edge  | IE  |\n   * | :-----------------: | :-----------------: | :-----------------------: | :----: | :-: |\n   * |       **66**        |       **61**        | **10.1** _(grid-row-gap)_ | **16** | No  |\n   * | 57 _(grid-row-gap)_ | 52 _(grid-row-gap)_ |                           |        |     |\n   *\n   * ---\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/row-gap\n   */\n  \"row-gap\"?: RowGapProperty<TLength>;\n  /**\n   * The `**ruby-align**` CSS property defines the distribution of the different ruby elements over the base.\n   *\n   * **Initial value**: `space-around`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **38**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/ruby-align\n   */\n  \"ruby-align\"?: RubyAlignProperty;\n  /** **Initial value**: `separate` */\n  \"ruby-merge\"?: RubyMergeProperty;\n  /**\n   * The `**ruby-position**` CSS property defines the position of a ruby element relatives to its base element. It can be position over the element (`over`), under it (`under`), or between the characters, on their right side (`inter-character`).\n   *\n   * **Initial value**: `over`\n   *\n   * | Chrome | Firefox | Safari |  Edge  | IE  |\n   * | :----: | :-----: | :----: | :----: | :-: |\n   * |   No   | **38**  |   No   | **12** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/ruby-position\n   */\n  \"ruby-position\"?: RubyPositionProperty;\n  /**\n   * The **`scale`** CSS property allows you to specify scale transforms individually and independantly of the `transform` property. This maps better to typical user interface usage, and saves having to remember the exact order of transform functions to specify in the `transform` value.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **72**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scale\n   */\n  scale?: ScaleProperty;\n  /**\n   * The **`scroll-behavior`** CSS property sets the behavior for a scrolling box when scrolling is triggered by the navigation or CSSOM scrolling APIs.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **61** | **36**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-behavior\n   */\n  \"scroll-behavior\"?: ScrollBehaviorProperty;\n  /**\n   * The **`scroll-margin`** property is a shorthand property which sets all of the `scroll-margin` longhands, assigning values much like the `margin` property does for the `margin-*` longhands.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **68**  | **11** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-margin\n   */\n  \"scroll-margin\"?: ScrollMarginProperty<TLength>;\n  /**\n   * The `scroll-margin-block` property is a shorthand property which sets the scroll-margin longhands in the block dimension.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **68**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-margin-block\n   */\n  \"scroll-margin-block\"?: ScrollMarginBlockProperty<TLength>;\n  /**\n   * The `scroll-margin-block-end` property defines the margin of the scroll snap area at the end of the block dimension that is used for snapping this box to the snapport. The scroll snap area is determined by taking the transformed border box, finding its rectangular bounding box (axis-aligned in the scroll container’s coordinate space), then adding the specified outsets.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **68**  | **11** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-margin-block-end\n   */\n  \"scroll-margin-block-end\"?: ScrollMarginBlockEndProperty<TLength>;\n  /**\n   * The `scroll-margin-block-start` property defines the margin of the scroll snap area at the start of the block dimension that is used for snapping this box to the snapport. The scroll snap area is determined by taking the transformed border box, finding its rectangular bounding box (axis-aligned in the scroll container’s coordinate space), then adding the specified outsets.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **68**  | **11** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-margin-block-start\n   */\n  \"scroll-margin-block-start\"?: ScrollMarginBlockStartProperty<TLength>;\n  /**\n   * The `scroll-margin-bottom` property defines the bottom margin of the scroll snap area that is used for snapping this box to the snapport. The scroll snap area is determined by taking the transformed border box, finding its rectangular bounding box (axis-aligned in the scroll container’s coordinate space), then adding the specified outsets.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **68**  | **11** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-margin-bottom\n   */\n  \"scroll-margin-bottom\"?: ScrollMarginBottomProperty<TLength>;\n  /**\n   * The `scroll-margin-inline` property is a shorthand property which sets the scroll-margin longhands in the inline dimension.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **68**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-margin-inline\n   */\n  \"scroll-margin-inline\"?: ScrollMarginInlineProperty<TLength>;\n  /**\n   * The `scroll-margin-inline-end` property defines the margin of the scroll snap area at the end of the inline dimension that is used for snapping this box to the snapport. The scroll snap area is determined by taking the transformed border box, finding its rectangular bounding box (axis-aligned in the scroll container’s coordinate space), then adding the specified outsets.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **68**  | **11** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-margin-inline-end\n   */\n  \"scroll-margin-inline-end\"?: ScrollMarginInlineEndProperty<TLength>;\n  /**\n   * The `scroll-margin-inline-start` property defines the margin of the scroll snap area at the start of the inline dimension that is used for snapping this box to the snapport. The scroll snap area is determined by taking the transformed border box, finding its rectangular bounding box (axis-aligned in the scroll container’s coordinate space), then adding the specified outsets.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **68**  | **11** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-margin-inline-start\n   */\n  \"scroll-margin-inline-start\"?: ScrollMarginInlineStartProperty<TLength>;\n  /**\n   * The `scroll-margin-left` property defines the left margin of the scroll snap area that is used for snapping this box to the snapport. The scroll snap area is determined by taking the transformed border box, finding its rectangular bounding box (axis-aligned in the scroll container’s coordinate space), then adding the specified outsets.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **68**  | **11** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-margin-left\n   */\n  \"scroll-margin-left\"?: ScrollMarginLeftProperty<TLength>;\n  /**\n   * The `scroll-margin-right` property defines the right margin of the scroll snap area that is used for snapping this box to the snapport. The scroll snap area is determined by taking the transformed border box, finding its rectangular bounding box (axis-aligned in the scroll container’s coordinate space), then adding the specified outsets.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **68**  | **11** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-margin-right\n   */\n  \"scroll-margin-right\"?: ScrollMarginRightProperty<TLength>;\n  /**\n   * The `scroll-margin-top` property defines the top margin of the scroll snap area that is used for snapping this box to the snapport. The scroll snap area is determined by taking the transformed border box, finding its rectangular bounding box (axis-aligned in the scroll container’s coordinate space), then adding the specified outsets.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **68**  | **11** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-margin-top\n   */\n  \"scroll-margin-top\"?: ScrollMarginTopProperty<TLength>;\n  /**\n * The scroll-padding property is a shorthand property which sets all of the scroll-padding longhands, assigning values much like the padding property does for the padding-\\* longhands.  \n  \nThe scroll-padding properties define offsets for the optimal viewing region of the scrollport: the region used as the target region for placing things in view of the user. This allows the author to exclude regions of the scrollport that are obscured by other content (such as fixed-positioned toolbars or sidebars) or simply to put more breathing room between a targetted element and the edges of the scrollport.\n * \n * **Initial value**: `auto`\n * \n * | Chrome | Firefox | Safari | Edge | IE  |\n * | :----: | :-----: | :----: | :--: | :-: |\n * | **69** | **68**  | **11** |  No  | No  |\n * \n * @see https://developer.mozilla.org/docs/Web/CSS/scroll-padding\n */\n  \"scroll-padding\"?: ScrollPaddingProperty<TLength>;\n  /**\n * The `scroll-padding-block` property is a shorthand property which sets the scroll-padding longhands for the block dimension.  \n  \nThe scroll-padding properties define offsets for the optimal viewing region of the scrollport: the region used as the target region for placing things in view of the user. This allows the author to exclude regions of the scrollport that are obscured by other content (such as fixed-positioned toolbars or sidebars) or simply to put more breathing room between a targetted element and the edges of the scrollport.\n * \n * **Initial value**: `auto`\n * \n * | Chrome | Firefox | Safari | Edge | IE  |\n * | :----: | :-----: | :----: | :--: | :-: |\n * | **69** | **68**  |   No   |  No  | No  |\n * \n * @see https://developer.mozilla.org/docs/Web/CSS/scroll-padding-block\n */\n  \"scroll-padding-block\"?: ScrollPaddingBlockProperty<TLength>;\n  /**\n   * The `scroll-padding-block-end` property defines offsets for the end edge in the block dimension of the optimal viewing region of the scrollport: the region used as the target region for placing things in view of the user. This allows the author to exclude regions of the scrollport that are obscured by other content (such as fixed-positioned toolbars or sidebars) or simply to put more breathing room between a targetted element and the edges of the scrollport.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **68**  | **11** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-padding-block-end\n   */\n  \"scroll-padding-block-end\"?: ScrollPaddingBlockEndProperty<TLength>;\n  /**\n   * The `scroll-padding-block-start` property defines offsets for the start edge in the block dimension of the optimal viewing region of the scrollport: the region used as the target region for placing things in view of the user. This allows the author to exclude regions of the scrollport that are obscured by other content (such as fixed-positioned toolbars or sidebars) or simply to put more breathing room between a targetted element and the edges of the scrollport.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **68**  | **11** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-padding-block-start\n   */\n  \"scroll-padding-block-start\"?: ScrollPaddingBlockStartProperty<TLength>;\n  /**\n   * The `scroll-padding-bottom` property defines offsets for the bottom of the optimal viewing region of the scrollport: the region used as the target region for placing things in view of the user. This allows the author to exclude regions of the scrollport that are obscured by other content (such as fixed-positioned toolbars or sidebars) or simply to put more breathing room between a targetted element and the edges of the scrollport.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **68**  | **11** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-padding-bottom\n   */\n  \"scroll-padding-bottom\"?: ScrollPaddingBottomProperty<TLength>;\n  /**\n * The `scroll-padding-inline` property is a shorthand property which sets the scroll-padding longhands for the inline dimension.  \n  \nThe scroll-padding properties define offsets for the optimal viewing region of the scrollport: the region used as the target region for placing things in view of the user. This allows the author to exclude regions of the scrollport that are obscured by other content (such as fixed-positioned toolbars or sidebars) or simply to put more breathing room between a targetted element and the edges of the scrollport.\n * \n * **Initial value**: `auto`\n * \n * | Chrome | Firefox | Safari | Edge | IE  |\n * | :----: | :-----: | :----: | :--: | :-: |\n * | **69** | **68**  |   No   |  No  | No  |\n * \n * @see https://developer.mozilla.org/docs/Web/CSS/scroll-padding-inline\n */\n  \"scroll-padding-inline\"?: ScrollPaddingInlineProperty<TLength>;\n  /**\n   * The `scroll-padding-inline-end` property defines offsets for the end edge in the inline dimension of the optimal viewing region of the scrollport: the region used as the target region for placing things in view of the user. This allows the author to exclude regions of the scrollport that are obscured by other content (such as fixed-positioned toolbars or sidebars) or simply to put more breathing room between a targetted element and the edges of the scrollport.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **68**  | **11** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-padding-inline-end\n   */\n  \"scroll-padding-inline-end\"?: ScrollPaddingInlineEndProperty<TLength>;\n  /**\n   * The `scroll-padding-inline-start` property defines offsets for the start edge in the inline dimension of the optimal viewing region of the scrollport: the region used as the target region for placing things in view of the user. This allows the author to exclude regions of the scrollport that are obscured by other content (such as fixed-positioned toolbars or sidebars) or simply to put more breathing room between a targetted element and the edges of the scrollport.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **68**  | **11** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-padding-inline-start\n   */\n  \"scroll-padding-inline-start\"?: ScrollPaddingInlineStartProperty<TLength>;\n  /**\n   * The `scroll-padding-left` property defines offsets for the left of the optimal viewing region of the scrollport: the region used as the target region for placing things in view of the user. This allows the author to exclude regions of the scrollport that are obscured by other content (such as fixed-positioned toolbars or sidebars) or simply to put more breathing room between a targetted element and the edges of the scrollport.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **68**  | **11** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-padding-left\n   */\n  \"scroll-padding-left\"?: ScrollPaddingLeftProperty<TLength>;\n  /**\n   * The `scroll-padding-right` property defines offsets for the right of the optimal viewing region of the scrollport: the region used as the target region for placing things in view of the user. This allows the author to exclude regions of the scrollport that are obscured by other content (such as fixed-positioned toolbars or sidebars) or simply to put more breathing room between a targetted element and the edges of the scrollport.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **68**  | **11** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-padding-right\n   */\n  \"scroll-padding-right\"?: ScrollPaddingRightProperty<TLength>;\n  /**\n   * The `scroll-padding-top` property defines offsets for the top of the optimal viewing region of the scrollport: the region used as the target region for placing things in view of the user. This allows the author to exclude regions of the scrollport that are obscured by other content (such as fixed-positioned toolbars or sidebars) or simply to put more breathing room between a targetted element and the edges of the scrollport.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **68**  | **11** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-padding-top\n   */\n  \"scroll-padding-top\"?: ScrollPaddingTopProperty<TLength>;\n  /**\n   * The `scroll-snap-align` property specifies the box’s snap position as an alignment of its snap area (as the alignment subject) within its snap container’s snapport (as the alignment container). The two values specify the snapping alignment in the block axis and inline axis, respectively. If only one value is specified, the second value defaults to the same value.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **68**  | **11** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-snap-align\n   */\n  \"scroll-snap-align\"?: ScrollSnapAlignProperty;\n  /**\n   * The **`scroll-snap-stop`** CSS property defines whether the scroll container is allowed to \"pass over\" possible snap positions.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **75** |   No    |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-snap-stop\n   */\n  \"scroll-snap-stop\"?: ScrollSnapStopProperty;\n  /**\n   * The **`scroll-snap-type`** CSS property sets how strictly snap points are enforced on the scroll container in case there is one.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari  |     Edge     |      IE      |\n   * | :----: | :-----: | :-----: | :----------: | :----------: |\n   * | **69** |  39-68  | **11**  | **12** _-x-_ | **10** _-x-_ |\n   * |        |         | 9 _-x-_ |              |              |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-snap-type\n   */\n  \"scroll-snap-type\"?: ScrollSnapTypeProperty;\n  /**\n   * The **`scrollbar-color`** CSS property sets the color of the scrollbar track and thumb.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **64**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scrollbar-color\n   */\n  \"scrollbar-color\"?: ScrollbarColorProperty;\n  /**\n   * The `scrollbar-width` property allows the author to set the maximum thickness of an element’s scrollbars when they are shown.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **64**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scrollbar-width\n   */\n  \"scrollbar-width\"?: ScrollbarWidthProperty;\n  /**\n   * The **`shape-image-threshold`** CSS property sets the alpha channel threshold used to extract the shape using an image as the value for `shape-outside`.\n   *\n   * **Initial value**: `0.0`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **37** | **62**  | **10.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/shape-image-threshold\n   */\n  \"shape-image-threshold\"?: ShapeImageThresholdProperty;\n  /**\n   * The **`shape-margin`** CSS property sets a margin for a CSS shape created using `shape-outside`.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox |     Safari     | Edge | IE  |\n   * | :----: | :-----: | :------------: | :--: | :-: |\n   * | **37** | **62**  | **10.1** _-x-_ |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/shape-margin\n   */\n  \"shape-margin\"?: ShapeMarginProperty<TLength>;\n  /**\n   * The **`shape-outside`** CSS property defines a shape—which may be non-rectangular—around which adjacent inline content should wrap. By default, inline content wraps around its margin box; `shape-outside` provides a way to customize this wrapping, making it possible to wrap text around complex objects rather than simple boxes.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **37** | **62**  | **10.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/shape-outside\n   */\n  \"shape-outside\"?: ShapeOutsideProperty;\n  /**\n   * The **`tab-size`** CSS property is used to customize the width of a tab (`U+0009`) character.\n   *\n   * **Initial value**: `8`\n   *\n   * | Chrome |   Firefox   | Safari  | Edge | IE  |\n   * | :----: | :---------: | :-----: | :--: | :-: |\n   * | **21** | **4** _-x-_ | **6.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/tab-size\n   */\n  \"tab-size\"?: TabSizeProperty<TLength>;\n  /**\n   * The **`table-layout`** CSS property sets the algorithm used to lay out `<table>` cells, rows, and columns.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **14** |  **1**  | **1**  | **12** | **5** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/table-layout\n   */\n  \"table-layout\"?: TableLayoutProperty;\n  /**\n   * The **`text-align`** CSS property sets the horizontal alignment of an inline or table-cell box. This means it works like `vertical-align` but in the horizontal direction.\n   *\n   * **Initial value**: `start`, or a nameless value that acts as `left` if _direction_ is `ltr`, `right` if _direction_ is `rtl` if `start` is not supported by the browser.\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **3** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-align\n   */\n  \"text-align\"?: TextAlignProperty;\n  /**\n   * The **`text-align-last`** CSS property sets how the last line of a block or a line, right before a forced line break, is aligned.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE    |\n   * | :----: | :-----: | :----: | :----: | :-----: |\n   * | **47** | **49**  |   No   | **12** | **5.5** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-align-last\n   */\n  \"text-align-last\"?: TextAlignLastProperty;\n  /**\n   * The **`text-combine-upright`** CSS property sets the combination of characters into the space of a single character. If the combined text is wider than 1em, the user agent must fit the contents within 1em. The resulting composition is treated as a single upright glyph for layout and decoration. This property only has an effect in vertical writing modes.\n   *\n   * **Initial value**: `none`\n   *\n   * |           Chrome           | Firefox |              Safari              |                  Edge                  |                   IE                   |\n   * | :------------------------: | :-----: | :------------------------------: | :------------------------------------: | :------------------------------------: |\n   * |           **48**           | **48**  | **5.1** _(-webkit-text-combine)_ | **12** _(-ms-text-combine-horizontal)_ | **11** _(-ms-text-combine-horizontal)_ |\n   * | 9 _(-webkit-text-combine)_ |         |                                  |                                        |                                        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-combine-upright\n   */\n  \"text-combine-upright\"?: TextCombineUprightProperty;\n  /**\n   * The **`text-decoration-color`** CSS property sets the color of decorations added to text by `text-decoration-line`.\n   *\n   * **Initial value**: `currentcolor`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **57** | **36**  | **12.1** |  No  | No  |\n   * |        |         | 8 _-x-_  |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-decoration-color\n   */\n  \"text-decoration-color\"?: TextDecorationColorProperty;\n  /**\n   * The **`text-decoration-line`** CSS property sets the kind of decoration that is used on text in an element, such as an underline or overline.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **57** | **36**  | **12.1** |  No  | No  |\n   * |        |         | 8 _-x-_  |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-decoration-line\n   */\n  \"text-decoration-line\"?: TextDecorationLineProperty;\n  /**\n   * The **`text-decoration-skip`** CSS property sets what parts of an element’s content any text decoration affecting the element must skip over. It controls all text decoration lines drawn by the element and also any text decoration lines drawn by its ancestors.\n   *\n   * **Initial value**: `objects`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | 57-64  |   No    | **12.1** |  No  | No  |\n   * |        |         | 8 _-x-_  |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-decoration-skip\n   */\n  \"text-decoration-skip\"?: TextDecorationSkipProperty;\n  /**\n   * The **`text-decoration-skip-ink`** CSS property specifies how overlines and underlines are drawn when they pass over glyph ascenders and descenders.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **64** | **70**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-decoration-skip-ink\n   */\n  \"text-decoration-skip-ink\"?: TextDecorationSkipInkProperty;\n  /**\n   * The **`text-decoration-style`** CSS property sets the style of the lines specified by `text-decoration-line`. The style applies to all lines that are set with `text-decoration-line`.\n   *\n   * **Initial value**: `solid`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **57** | **36**  | **12.1** |  No  | No  |\n   * |        |         | 8 _-x-_  |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-decoration-style\n   */\n  \"text-decoration-style\"?: TextDecorationStyleProperty;\n  /**\n   * The **`text-decoration-thickness`** CSS property sets the thickness, or width, of the decoration line that is used on text in an element, such as a line-through, underline, or overline.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * |   No   | **70**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-decoration-thickness\n   */\n  \"text-decoration-thickness\"?: TextDecorationThicknessProperty<TLength>;\n  /**\n   * The **`text-decoration-thickness`** CSS property sets the thickness, or width, of the decoration line that is used on text in an element, such as a line-through, underline, or overline.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * |   No   | **70**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-decoration-thickness\n   */\n  \"text-decoration-width\"?: TextDecorationThicknessProperty<TLength>;\n  /**\n   * The **`text-emphasis-color`** CSS property sets the color of emphasis marks. This value can also be set using the `text-emphasis` shorthand.\n   *\n   * **Initial value**: `currentcolor`\n   *\n   * | Chrome | Firefox | Safari  | Edge | IE  |\n   * | :----: | :-----: | :-----: | :--: | :-: |\n   * | **25** | **46**  | **6.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-emphasis-color\n   */\n  \"text-emphasis-color\"?: TextEmphasisColorProperty;\n  /**\n   * The **`text-emphasis-position`** CSS property sets where emphasis marks are drawn. Like ruby text, if there isn't enough room for emphasis marks, the line height is increased.\n   *\n   * **Initial value**: `over right`\n   *\n   * | Chrome | Firefox | Safari  | Edge | IE  |\n   * | :----: | :-----: | :-----: | :--: | :-: |\n   * | **25** | **46**  | **6.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-emphasis-position\n   */\n  \"text-emphasis-position\"?: GlobalsString;\n  /**\n   * The **`text-emphasis-style`** CSS property sets the appearance of emphasis marks. It can also be set, and reset, using the `text-emphasis` shorthand.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari  | Edge | IE  |\n   * | :----: | :-----: | :-----: | :--: | :-: |\n   * | **25** | **46**  | **6.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-emphasis-style\n   */\n  \"text-emphasis-style\"?: TextEmphasisStyleProperty;\n  /**\n   * The **`text-indent`** CSS property sets the length of empty space (indentation) that is put before lines of text in a block.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **3** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-indent\n   */\n  \"text-indent\"?: TextIndentProperty<TLength>;\n  /**\n   * The **`text-justify`** CSS property sets what type of justification should be applied to text when `text-align``: justify;` is set on an element.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE   |\n   * | :----: | :-----: | :----: | :----: | :----: |\n   * |  n/a   | **55**  |   No   | **12** | **11** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-justify\n   */\n  \"text-justify\"?: TextJustifyProperty;\n  /**\n   * The **`text-orientation`** CSS property sets the orientation of the text characters in a line. It only affects text in vertical mode (when `writing-mode` is not `horizontal-tb`). It is useful for controlling the display of languages that use vertical script, and also for making vertical table headers.\n   *\n   * **Initial value**: `mixed`\n   *\n   * |  Chrome  | Firefox |    Safari     | Edge | IE  |\n   * | :------: | :-----: | :-----------: | :--: | :-: |\n   * |  **48**  | **41**  | **5.1** _-x-_ |  No  | No  |\n   * | 11 _-x-_ |         |               |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-orientation\n   */\n  \"text-orientation\"?: TextOrientationProperty;\n  /**\n   * The **`text-overflow`** CSS property sets how hidden overflow content is signaled to users. It can be clipped, display an ellipsis ('`…`'), or display a custom string.\n   *\n   * **Initial value**: `clip`\n   *\n   * | Chrome | Firefox | Safari  |  Edge  |  IE   |\n   * | :----: | :-----: | :-----: | :----: | :---: |\n   * | **1**  |  **7**  | **1.3** | **12** | **6** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-overflow\n   */\n  \"text-overflow\"?: TextOverflowProperty;\n  /**\n   * The **`text-rendering`** CSS property provides information to the rendering engine about what to optimize for when rendering text.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **4**  |  **1**  | **5**  |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-rendering\n   */\n  \"text-rendering\"?: TextRenderingProperty;\n  /**\n   * The **`text-shadow`** CSS property adds shadows to text. It accepts a comma-separated list of shadows to be applied to the text and any of its `decorations`. Each shadow is described by some combination of X and Y offsets from the element, blur radius, and color.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari  |  Edge  |   IE   |\n   * | :----: | :-----: | :-----: | :----: | :----: |\n   * | **2**  | **3.5** | **1.1** | **12** | **10** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-shadow\n   */\n  \"text-shadow\"?: TextShadowProperty;\n  /**\n   * The **`text-size-adjust`** CSS property controls the text inflation algorithm used on some smartphones and tablets. Other browsers will ignore this property.\n   *\n   * **Initial value**: `auto` for smartphone browsers supporting inflation, `none` in other cases (and then not modifiable).\n   *\n   * | Chrome | Firefox | Safari |     Edge     | IE  |\n   * | :----: | :-----: | :----: | :----------: | :-: |\n   * | **54** |   No    |   No   | **12** _-x-_ | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-size-adjust\n   */\n  \"text-size-adjust\"?: TextSizeAdjustProperty;\n  /**\n   * The **`text-transform`** CSS property specifies how to capitalize an element's text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized. It also can help improve legibility for ruby\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-transform\n   */\n  \"text-transform\"?: TextTransformProperty;\n  /**\n   * The **`text-underline-offset`** CSS property sets the offset distance of an underline text decoration line (applied using `text-decoration`) from its original position.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * |   No   | **70**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-underline-offset\n   */\n  \"text-underline-offset\"?: TextUnderlineOffsetProperty<TLength>;\n  /**\n   * The **`text-underline-position`** CSS property specifies the position of the underline which is set using the `text-decoration` property's `underline` value.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **33** |   No    |   No   | **12** | **6** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-underline-position\n   */\n  \"text-underline-position\"?: TextUnderlinePositionProperty;\n  /**\n   * The **`top`** CSS property participates in specifying the vertical position of a _positioned element_. It has no effect on non-positioned elements.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **5** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/top\n   */\n  top?: TopProperty<TLength>;\n  /**\n   * The **`touch-action`** CSS property sets how a region can be manipulated by a touchscreen user (for example, by zooming features built into the browser).\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |    IE    |\n   * | :----: | :-----: | :----: | :----: | :------: |\n   * | **36** | **52**  | **13** | **12** |  **11**  |\n   * |        |         |        |        | 10 _-x-_ |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/touch-action\n   */\n  \"touch-action\"?: TouchActionProperty;\n  /**\n   * The **`transform`** CSS property lets you rotate, scale, skew, or translate an element. It modifies the coordinate space of the CSS visual formatting model.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome  | Firefox |  Safari   |  Edge  |   IE    |\n   * | :-----: | :-----: | :-------: | :----: | :-----: |\n   * | **36**  | **16**  |   **9**   | **12** | **10**  |\n   * | 1 _-x-_ |         | 3.1 _-x-_ |        | 9 _-x-_ |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/transform\n   */\n  transform?: TransformProperty;\n  /**\n   * The **`transform-box`** CSS property defines the layout box to which the `transform` and `transform-origin` properties relate.\n   *\n   * **Initial value**: `border-box `\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **64** | **55**  | **11** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/transform-box\n   */\n  \"transform-box\"?: TransformBoxProperty;\n  /**\n   * The **`transform-origin`** CSS property sets the origin for an element's transformations.\n   *\n   * **Initial value**: `50% 50% 0`\n   *\n   * | Chrome  |  Firefox  | Safari  |  Edge  |   IE    |\n   * | :-----: | :-------: | :-----: | :----: | :-----: |\n   * | **36**  |  **16**   |  **9**  | **12** | **10**  |\n   * | 1 _-x-_ | 3.5 _-x-_ | 2 _-x-_ |        | 9 _-x-_ |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/transform-origin\n   */\n  \"transform-origin\"?: TransformOriginProperty<TLength>;\n  /**\n   * The **`transform-style`** CSS property sets whether children of an element are positioned in the 3D space or are flattened in the plane of the element.\n   *\n   * **Initial value**: `flat`\n   *\n   * |  Chrome  | Firefox  | Safari  |  Edge  | IE  |\n   * | :------: | :------: | :-----: | :----: | :-: |\n   * |  **36**  |  **16**  |  **9**  | **12** | No  |\n   * | 12 _-x-_ | 10 _-x-_ | 4 _-x-_ |        |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/transform-style\n   */\n  \"transform-style\"?: TransformStyleProperty;\n  /**\n   * The **`transition-delay`** CSS property specifies the duration to wait before starting a property's transition effect when its value changes.\n   *\n   * **Initial value**: `0s`\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |\n   * | :-----: | :-----: | :-----: | :----: | :----: |\n   * | **26**  | **16**  |  **9**  | **12** | **10** |\n   * | 1 _-x-_ | 4 _-x-_ | 4 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/transition-delay\n   */\n  \"transition-delay\"?: GlobalsString;\n  /**\n   * The **`transition-duration`** CSS property sets the length of time a transition animation should take to complete. By default, the value is `0s`, meaning that no animation will occur.\n   *\n   * **Initial value**: `0s`\n   *\n   * | Chrome  | Firefox |  Safari   |  Edge  |   IE   |\n   * | :-----: | :-----: | :-------: | :----: | :----: |\n   * | **26**  | **16**  |   **9**   | **12** | **10** |\n   * | 1 _-x-_ | 4 _-x-_ | 3.1 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/transition-duration\n   */\n  \"transition-duration\"?: GlobalsString;\n  /**\n   * The **`transition-property`** CSS property sets the CSS properties to which a transition effect should be applied.\n   *\n   * **Initial value**: all\n   *\n   * | Chrome  | Firefox |  Safari   |  Edge  |   IE   |\n   * | :-----: | :-----: | :-------: | :----: | :----: |\n   * | **26**  | **16**  |   **9**   | **12** | **10** |\n   * | 1 _-x-_ | 4 _-x-_ | 3.1 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/transition-property\n   */\n  \"transition-property\"?: TransitionPropertyProperty;\n  /**\n   * The **`transition-timing-function`** CSS property sets how intermediate values are calculated for CSS properties being affected by a transition effect.\n   *\n   * **Initial value**: `ease`\n   *\n   * | Chrome  | Firefox |  Safari   |  Edge  |   IE   |\n   * | :-----: | :-----: | :-------: | :----: | :----: |\n   * | **26**  | **16**  |   **9**   | **12** | **10** |\n   * | 1 _-x-_ | 4 _-x-_ | 3.1 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/transition-timing-function\n   */\n  \"transition-timing-function\"?: TransitionTimingFunctionProperty;\n  /**\n   * The **`translate`** CSS property allows you to specify translation transforms individually and independantly of the `transform` property. This maps better to typical user interface usage, and saves having to remember the exact order of transform functions to specify in the `transform` value.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **72**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/translate\n   */\n  translate?: TranslateProperty<TLength>;\n  /**\n   * The **`unicode-bidi`** CSS property, together with the `direction` property, determines how bidirectional text in a document is handled. For example, if a block of content contains both left-to-right and right-to-left text, the user-agent uses a complex Unicode algorithm to decide how to display the text. The `unicode-bidi` property overrides this algorithm and allows the developer to control the text embedding.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari  |  Edge  |   IE    |\n   * | :----: | :-----: | :-----: | :----: | :-----: |\n   * | **2**  |  **1**  | **1.3** | **12** | **5.5** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/unicode-bidi\n   */\n  \"unicode-bidi\"?: UnicodeBidiProperty;\n  /**\n   * The `**user-select**` CSS property controls whether the user can select text. This doesn't have any effect on content loaded as chrome, except in textboxes.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome  | Firefox |   Safari    |     Edge     |      IE      |\n   * | :-----: | :-----: | :---------: | :----------: | :----------: |\n   * | **54**  | **69**  | **3** _-x-_ | **12** _-x-_ | **10** _-x-_ |\n   * | 1 _-x-_ | 1 _-x-_ |             |              |              |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/user-select\n   */\n  \"user-select\"?: UserSelectProperty;\n  /**\n   * The **`vertical-align`** CSS property sets vertical alignment of an inline or table-cell box.\n   *\n   * **Initial value**: `baseline`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/vertical-align\n   */\n  \"vertical-align\"?: VerticalAlignProperty<TLength>;\n  /**\n   * The **`visibility`** CSS property shows or hides an element without changing the layout of a document. The property can also hide rows or columns in a `<table>`.\n   *\n   * **Initial value**: `visible`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/visibility\n   */\n  visibility?: VisibilityProperty;\n  /**\n   * The **`white-space`** CSS property sets how white space inside an element is handled.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE    |\n   * | :----: | :-----: | :----: | :----: | :-----: |\n   * | **1**  |  **1**  | **1**  | **12** | **5.5** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/white-space\n   */\n  \"white-space\"?: WhiteSpaceProperty;\n  /**\n   * The **`widows`** CSS property sets the minimum number of lines in a block container that must be shown at the _top_ of a page, region, or column.\n   *\n   * **Initial value**: `2`\n   *\n   * | Chrome | Firefox | Safari  |  Edge  |  IE   |\n   * | :----: | :-----: | :-----: | :----: | :---: |\n   * | **25** |   No    | **1.3** | **12** | **8** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/widows\n   */\n  widows?: GlobalsNumber;\n  /**\n   * The **`width`** CSS property sets an element's width. By default it sets the width of the content area, but if `box-sizing` is set to `border-box`, it sets the width of the border area.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/width\n   */\n  width?: WidthProperty<TLength>;\n  /**\n   * The **`will-change`** CSS property hints to browsers how an element is expected to change. Browsers may set up optimizations before an element is actually changed. These kinds of optimizations can increase the responsiveness of a page by doing potentially expensive work before they are actually required.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari  | Edge | IE  |\n   * | :----: | :-----: | :-----: | :--: | :-: |\n   * | **36** | **36**  | **9.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/will-change\n   */\n  \"will-change\"?: WillChangeProperty;\n  /**\n   * The **`word-break`** CSS property sets whether line breaks appear wherever the text would otherwise overflow its content box.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE    |\n   * | :----: | :-----: | :----: | :----: | :-----: |\n   * | **1**  | **15**  | **3**  | **12** | **5.5** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/word-break\n   */\n  \"word-break\"?: WordBreakProperty;\n  /**\n   * The **`word-spacing`** CSS property sets the length of space between words and between tags.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **6** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/word-spacing\n   */\n  \"word-spacing\"?: WordSpacingProperty<TLength>;\n  /**\n   * The `**overflow-wrap**` CSS property sets whether the browser should insert line breaks within words to prevent text from overflowing its content box.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE    |\n   * | :----: | :-----: | :----: | :----: | :-----: |\n   * | **1**  | **3.5** | **2**  | **12** | **5.5** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/overflow-wrap\n   */\n  \"word-wrap\"?: WordWrapProperty;\n  /**\n   * The **`writing-mode`** CSS property sets whether lines of text are laid out horizontally or vertically, as well as the direction in which blocks progress.\n   *\n   * **Initial value**: `horizontal-tb`\n   *\n   * | Chrome  | Firefox |  Safari   |  Edge  |     IE      |\n   * | :-----: | :-----: | :-------: | :----: | :---------: |\n   * | **48**  | **41**  | **10.1**  | **12** | **9** _-x-_ |\n   * | 8 _-x-_ |         | 5.1 _-x-_ |        |             |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/writing-mode\n   */\n  \"writing-mode\"?: WritingModeProperty;\n  /**\n   * The **`z-index`** CSS property sets the z-order of a positioned element and its descendants or flex items. Overlapping elements with a larger z-index cover those with a smaller one.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/z-index\n   */\n  \"z-index\"?: ZIndexProperty;\n  /**\n   * The non-standard **`zoom`** CSS property can be used to control the magnification level of an element. `transform: scale()` should be used instead of this property, if possible. However, unlike CSS Transforms, `zoom` affects the layout size of the element.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari  |  Edge  |   IE    |\n   * | :----: | :-----: | :-----: | :----: | :-----: |\n   * | **1**  |   No    | **3.1** | **12** | **5.5** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/zoom\n   */\n  zoom?: ZoomProperty;\n}\n\nexport interface StandardShorthandPropertiesHyphen<TLength = string | 0> {\n  /**\n   * The `**all**` CSS shorthand property sets all of an element's properties (other than `unicode-bidi` and `direction`) to their initial or inherited values, or to the values specified in another stylesheet origin.\n   *\n   * **Initial value**: There is no practical initial value for it.\n   *\n   * | Chrome | Firefox | Safari  | Edge | IE  |\n   * | :----: | :-----: | :-----: | :--: | :-: |\n   * | **37** | **27**  | **9.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/all\n   */\n  all?: Globals;\n  /**\n   * The **`animation`** shorthand CSS property sets an animated transition between styles. It is a shorthand for `animation-name`, `animation-duration`, `animation-timing-function`, `animation-delay`, `animation-iteration-count`, `animation-direction`, `animation-fill-mode`, and `animation-play-state`.\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |\n   * | :-----: | :-----: | :-----: | :----: | :----: |\n   * | **43**  | **16**  |  **9**  | **12** | **10** |\n   * | 3 _-x-_ | 5 _-x-_ | 4 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/animation\n   */\n  animation?: AnimationProperty;\n  /**\n   * The **`background`** shorthand CSS property sets all background style properties at once, such as color, image, origin and size, or repeat method.\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/background\n   */\n  background?: BackgroundProperty<TLength>;\n  /**\n   * The **`border`** CSS property sets an element's border. It's a shorthand for `border-width`, `border-style`, and `border-color`.\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border\n   */\n  border?: BorderProperty<TLength>;\n  /**\n   * The **`border-block`** CSS property is a shorthand property for setting the individual logical block border property values in a single place in the style sheet.\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **66**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-block\n   */\n  \"border-block\"?: BorderBlockProperty<TLength>;\n  /**\n   * The **`border-block-end`** CSS property is a shorthand property for setting the individual logical block-end border property values in a single place in the style sheet.\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **69** | **41**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-block-end\n   */\n  \"border-block-end\"?: BorderBlockEndProperty<TLength>;\n  /**\n   * The **`border-block-start`** CSS property is a shorthand property for setting the individual logical block-start border property values in a single place in the style sheet.\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **69** | **41**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-block-start\n   */\n  \"border-block-start\"?: BorderBlockStartProperty<TLength>;\n  /**\n   * The **`border-bottom`** CSS property is a shorthand that sets the values of `border-bottom-width`, `border-bottom-style` and `border-bottom-color`. These properties set an element's bottom border.\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-bottom\n   */\n  \"border-bottom\"?: BorderBottomProperty<TLength>;\n  /**\n   * The **`border-color`** shorthand CSS property sets the color of all sides of an element's border.\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-color\n   */\n  \"border-color\"?: BorderColorProperty;\n  /**\n   * The **`border-image`** CSS property draws an image in place of an element's `border-style`.\n   *\n   * | Chrome  |  Firefox  | Safari  |  Edge  |   IE   |\n   * | :-----: | :-------: | :-----: | :----: | :----: |\n   * | **16**  |  **15**   |  **6**  | **12** | **11** |\n   * | 7 _-x-_ | 3.5 _-x-_ | 3 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-image\n   */\n  \"border-image\"?: BorderImageProperty;\n  /**\n   * The **`border-inline`** CSS property is a shorthand property for setting the individual logical inline border property values in a single place in the style sheet.\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **66**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-inline\n   */\n  \"border-inline\"?: BorderInlineProperty<TLength>;\n  /**\n   * The **`border-inline-end`** CSS property is a shorthand property for setting the individual logical inline-end border property values in a single place in the style sheet.\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **69** | **41**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-inline-end\n   */\n  \"border-inline-end\"?: BorderInlineEndProperty<TLength>;\n  /**\n   * The **`border-inline-start`** CSS property is a shorthand property for setting the individual logical inline-start border property values in a single place in the style sheet.\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **69** | **41**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-inline-start\n   */\n  \"border-inline-start\"?: BorderInlineStartProperty<TLength>;\n  /**\n   * The **`border-left`** CSS property is a shorthand that sets the values of `border-left-width`, `border-left-style` and `border-left-color`. These properties set an element's left border.\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-left\n   */\n  \"border-left\"?: BorderLeftProperty<TLength>;\n  /**\n   * The **`border-radius`** CSS property rounds the corners of an element's outer border edge. You can set a single radius to make circular corners, or two radii to make elliptical corners.\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |  IE   |\n   * | :-----: | :-----: | :-----: | :----: | :---: |\n   * |  **4**  |  **4**  |  **5**  | **12** | **9** |\n   * | 1 _-x-_ |         | 3 _-x-_ |        |       |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-radius\n   */\n  \"border-radius\"?: BorderRadiusProperty<TLength>;\n  /**\n   * The **`border-right`** CSS property is a shorthand that sets the values of `border-right-width`, `border-right-style` and `border-right-color`. These properties set an element's right border.\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE    |\n   * | :----: | :-----: | :----: | :----: | :-----: |\n   * | **1**  |  **1**  | **1**  | **12** | **5.5** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-right\n   */\n  \"border-right\"?: BorderRightProperty<TLength>;\n  /**\n   * The **`border-style`** CSS property is a shorthand property that sets the line style for all four sides of an element's border.\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-style\n   */\n  \"border-style\"?: BorderStyleProperty;\n  /**\n   * The **`border-top`** CSS property is a shorthand that sets the values of `border-top-width`, `border-top-style` and `border-top-color`. These properties set an element's top border.\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-top\n   */\n  \"border-top\"?: BorderTopProperty<TLength>;\n  /**\n   * The **`border-width`** shorthand CSS property sets the widths of all four sides of an element's border.\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-width\n   */\n  \"border-width\"?: BorderWidthProperty<TLength>;\n  /**\n   * The **`column-rule`** CSS property sets the width, style, and color of the rule (line) drawn between columns in a multi-column layout.\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |\n   * | :-----: | :-----: | :-----: | :----: | :----: |\n   * | **50**  | **52**  |  **9**  | **12** | **10** |\n   * | 1 _-x-_ |         | 3 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/column-rule\n   */\n  \"column-rule\"?: ColumnRuleProperty<TLength>;\n  /**\n   * The **`columns`** CSS property sets the column width and column count of an element.\n   *\n   * | Chrome | Firefox | Safari  |  Edge  |   IE   |\n   * | :----: | :-----: | :-----: | :----: | :----: |\n   * | **50** | **52**  |  **9**  | **12** | **10** |\n   * |        |         | 3 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/columns\n   */\n  columns?: ColumnsProperty<TLength>;\n  /**\n   * The **`flex`** CSS property sets how a flex item will grow or shrink to fit the space available in its flex container. It is a shorthand for `flex-grow`, `flex-shrink`, and `flex-basis`.\n   *\n   * |  Chrome  | Firefox |  Safari   |  Edge  |    IE    |\n   * | :------: | :-----: | :-------: | :----: | :------: |\n   * |  **29**  | **20**  |   **9**   | **12** |  **11**  |\n   * | 21 _-x-_ |         | 6.1 _-x-_ |        | 10 _-x-_ |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/flex\n   */\n  flex?: FlexProperty<TLength>;\n  /**\n   * The **`flex-flow`** CSS property is a shorthand property for `flex-direction` and `flex-wrap` properties.\n   *\n   * |  Chrome  | Firefox |  Safari   |  Edge  |   IE   |\n   * | :------: | :-----: | :-------: | :----: | :----: |\n   * |  **29**  | **28**  |   **9**   | **12** | **11** |\n   * | 21 _-x-_ |         | 6.1 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/flex-flow\n   */\n  \"flex-flow\"?: FlexFlowProperty;\n  /**\n   * The **`font`** CSS property is a shorthand for `font-style`, `font-variant`, `font-weight`, `font-size`, `line-height`, and `font-family`. Alternatively, it sets an element's font to a system font.\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **3** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/font\n   */\n  font?: FontProperty;\n  /**\n   * The **`gap`** CSS property sets the gaps (gutters) between rows and columns. It is a shorthand for `row-gap` and `column-gap`.\n   *\n   * ---\n   *\n   * _Supported in Flex Layout_\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **63**  |   No   |  No  | No  |\n   *\n   * ---\n   *\n   * _Supported in Grid Layout_\n   *\n   * |     Chrome      |     Firefox     |        Safari         |  Edge  | IE  |\n   * | :-------------: | :-------------: | :-------------------: | :----: | :-: |\n   * |     **66**      |     **61**      | **10.1** _(grid-gap)_ | **16** | No  |\n   * | 57 _(grid-gap)_ | 52 _(grid-gap)_ |                       |        |     |\n   *\n   * ---\n   *\n   * _Supported in Multi-column Layout_\n   *\n   * | Chrome | Firefox | Safari |  Edge  | IE  |\n   * | :----: | :-----: | :----: | :----: | :-: |\n   * | **66** | **61**  |   No   | **16** | No  |\n   *\n   * ---\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/gap\n   */\n  gap?: GapProperty<TLength>;\n  /**\n   * The **`grid`** CSS property is a shorthand property that sets all of the explicit grid properties (`grid-template-rows`, `grid-template-columns`, and `grid-template-areas`), and all the implicit grid properties (`grid-auto-rows`, `grid-auto-columns`, and `grid-auto-flow`), in a single declaration.\n   *\n   * | Chrome | Firefox |  Safari  |  Edge  | IE  |\n   * | :----: | :-----: | :------: | :----: | :-: |\n   * | **57** | **52**  | **10.1** | **16** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/grid\n   */\n  grid?: GridProperty;\n  /**\n   * The **`grid-area`** CSS property is a shorthand property for `grid-row-start`, `grid-column-start`, `grid-row-end` and `grid-column-end`, specifying a grid item’s size and location within the grid row by contributing a line, a span, or nothing (automatic) to its grid placement, thereby specifying the edges of its grid area.\n   *\n   * | Chrome | Firefox |  Safari  |  Edge  | IE  |\n   * | :----: | :-----: | :------: | :----: | :-: |\n   * | **57** | **52**  | **10.1** | **16** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/grid-area\n   */\n  \"grid-area\"?: GridAreaProperty;\n  /**\n   * The **`grid-column`** CSS property is a shorthand property for `grid-column-start` and `grid-column-end` specifying a grid item's size and location within the grid column by contributing a line, a span, or nothing (automatic) to its grid placement, thereby specifying the inline-start and inline-end edge of its grid area.\n   *\n   * | Chrome | Firefox |  Safari  |  Edge  | IE  |\n   * | :----: | :-----: | :------: | :----: | :-: |\n   * | **57** | **52**  | **10.1** | **16** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/grid-column\n   */\n  \"grid-column\"?: GridColumnProperty;\n  /**\n   * The **`grid-row`** CSS property is a shorthand property for `grid-row-start` and `grid-row-end` specifying a grid item’s size and location within the grid row by contributing a line, a span, or nothing (automatic) to its grid placement, thereby specifying the inline-start and inline-end edge of its grid area.\n   *\n   * | Chrome | Firefox |  Safari  |  Edge  | IE  |\n   * | :----: | :-----: | :------: | :----: | :-: |\n   * | **57** | **52**  | **10.1** | **16** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/grid-row\n   */\n  \"grid-row\"?: GridRowProperty;\n  /**\n   * The **`grid-template`** CSS property is a shorthand property for defining grid columns, rows, and areas.\n   *\n   * | Chrome | Firefox |  Safari  |  Edge  | IE  |\n   * | :----: | :-----: | :------: | :----: | :-: |\n   * | **57** | **52**  | **10.1** | **16** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/grid-template\n   */\n  \"grid-template\"?: GridTemplateProperty;\n  /** **Initial value**: `none` */\n  \"line-clamp\"?: LineClampProperty;\n  /**\n   * The **`list-style`** CSS property is a shorthand to set list style properties `list-style-type`, `list-style-image`, and `list-style-position`.\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/list-style\n   */\n  \"list-style\"?: ListStyleProperty;\n  /**\n   * The **`margin`** CSS property sets the margin area on all four sides of an element. It is a shorthand for `margin-top`, `margin-right`, `margin-bottom`, and `margin-left`.\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **3** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/margin\n   */\n  margin?: MarginProperty<TLength>;\n  /**\n   * The **`mask`** CSS property hides an element (partially or fully) by masking or clipping the image at specific points.\n   *\n   * | Chrome | Firefox | Safari  |  Edge  | IE  |\n   * | :----: | :-----: | :-----: | :----: | :-: |\n   * | **1**  |  **2**  | **3.2** | **12** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/mask\n   */\n  mask?: MaskProperty<TLength>;\n  /** The **`mask-border`** CSS property lets you create a mask along the edge of an element's border. */\n  \"mask-border\"?: MaskBorderProperty;\n  /**\n   * The **`offset`** CSS property is a shorthand property for animating an element along a defined path.\n   *\n   * |    Chrome     | Firefox | Safari | Edge | IE  |\n   * | :-----------: | :-----: | :----: | :--: | :-: |\n   * |    **55**     | **72**  |   No   |  No  | No  |\n   * | 46 _(motion)_ |         |        |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/offset\n   */\n  motion?: OffsetProperty<TLength>;\n  /**\n   * The **`offset`** CSS property is a shorthand property for animating an element along a defined path.\n   *\n   * |    Chrome     | Firefox | Safari | Edge | IE  |\n   * | :-----------: | :-----: | :----: | :--: | :-: |\n   * |    **55**     | **72**  |   No   |  No  | No  |\n   * | 46 _(motion)_ |         |        |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/offset\n   */\n  offset?: OffsetProperty<TLength>;\n  /**\n   * The **`outline`** CSS property is a shorthand to set various outline properties in a single declaration: `outline-style`, `outline-width`, and `outline-color`.\n   *\n   * | Chrome | Firefox | Safari  |  Edge  |  IE   |\n   * | :----: | :-----: | :-----: | :----: | :---: |\n   * | **1**  | **1.5** | **1.2** | **12** | **8** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/outline\n   */\n  outline?: OutlineProperty<TLength>;\n  /**\n   * The **`padding`** CSS property sets the padding area on all four sides of an element. It is a shorthand for `padding-top`, `padding-right`, `padding-bottom`, and `padding-left`.\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/padding\n   */\n  padding?: PaddingProperty<TLength>;\n  /**\n   * The CSS **`place-items`** shorthand property sets the `align-items` and `justify-items` properties, respectively. If the second value is not set, the first value is also used for it.\n   *\n   * ---\n   *\n   * _Supported in Flex Layout_\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **59** | **45**  | **11** |  No  | No  |\n   *\n   * ---\n   *\n   * _Supported in Grid Layout_\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **59** | **45**  | **11** |  No  | No  |\n   *\n   * ---\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/place-items\n   */\n  \"place-items\"?: PlaceItemsProperty;\n  /**\n   * The **`place-self`** CSS property is a shorthand property sets both the `align-self` and `justify-self` properties. The first value is the `align-self` property value, the second the `justify-self` one. If the second value is not present, the first value is also used for it.\n   *\n   * ---\n   *\n   * _Supported in Flex Layout_\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **59** | **45**  |   No   |  No  | No  |\n   *\n   * ---\n   *\n   * _Supported in Grid Layout_\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **59** | **45**  |   No   |  No  | No  |\n   *\n   * ---\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/place-self\n   */\n  \"place-self\"?: PlaceSelfProperty;\n  /**\n   * The **`text-decoration`** CSS property sets the appearance of decorative lines on text. It is a shorthand for `text-decoration-line`, `text-decoration-color`, and `text-decoration-style`.\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **3** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-decoration\n   */\n  \"text-decoration\"?: TextDecorationProperty<TLength>;\n  /**\n   * The **`text-emphasis`** CSS property applies emphasis marks to text (except spaces and control characters). It is a shorthand for `text-emphasis-style` and `text-emphasis-color`.\n   *\n   * | Chrome | Firefox | Safari  | Edge | IE  |\n   * | :----: | :-----: | :-----: | :--: | :-: |\n   * | **25** | **46**  | **6.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-emphasis\n   */\n  \"text-emphasis\"?: TextEmphasisProperty;\n  /**\n   * The **`transition`** CSS property is a shorthand property for `transition-property`, `transition-duration`, `transition-timing-function`, and `transition-delay`.\n   *\n   * | Chrome  | Firefox |  Safari   |  Edge  |   IE   |\n   * | :-----: | :-----: | :-------: | :----: | :----: |\n   * | **26**  | **16**  |   **9**   | **12** | **10** |\n   * | 1 _-x-_ | 4 _-x-_ | 3.1 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/transition\n   */\n  transition?: TransitionProperty;\n}\n\nexport interface StandardPropertiesHyphen<TLength = string | 0> extends StandardLonghandPropertiesHyphen<TLength>, StandardShorthandPropertiesHyphen<TLength> {}\n\nexport interface VendorLonghandPropertiesHyphen<TLength = string | 0> {\n  /**\n   * The **`animation-delay`** CSS property sets when an animation starts. The animation can start later, immediately from its beginning, or immediately and partway through the animation.\n   *\n   * **Initial value**: `0s`\n   */\n  \"-moz-animation-delay\"?: GlobalsString;\n  /**\n   * The **`animation-direction`** CSS property sets whether an animation should play forwards, backwards, or alternating back and forth.\n   *\n   * **Initial value**: `normal`\n   */\n  \"-moz-animation-direction\"?: AnimationDirectionProperty;\n  /**\n   * The **`animation-duration`** CSS property sets the length of time that an animation takes to complete one cycle.\n   *\n   * **Initial value**: `0s`\n   */\n  \"-moz-animation-duration\"?: GlobalsString;\n  /**\n   * The **`animation-fill-mode`** CSS property sets how a CSS animation applies styles to its target before and after its execution.\n   *\n   * **Initial value**: `none`\n   */\n  \"-moz-animation-fill-mode\"?: AnimationFillModeProperty;\n  /**\n   * The **`animation-iteration-count`** CSS property sets the number of times an animation cycle should be played before stopping.\n   *\n   * **Initial value**: `1`\n   */\n  \"-moz-animation-iteration-count\"?: AnimationIterationCountProperty;\n  /**\n   * The **`animation-name`** CSS property sets one or more animations to apply to an element. Each name is an `@keyframes` at-rule that sets the property values for the animation sequence.\n   *\n   * **Initial value**: `none`\n   */\n  \"-moz-animation-name\"?: AnimationNameProperty;\n  /**\n   * The **`animation-play-state`** CSS property sets whether an animation is running or paused.\n   *\n   * **Initial value**: `running`\n   */\n  \"-moz-animation-play-state\"?: AnimationPlayStateProperty;\n  /**\n   * The `**animation-timing-function**` CSS property sets how an animation progresses through the duration of each cycle.\n   *\n   * **Initial value**: `ease`\n   */\n  \"-moz-animation-timing-function\"?: AnimationTimingFunctionProperty;\n  /**\n   * The **`-moz-appearance`** CSS property is used in Gecko (Firefox) to display an element using platform-native styling based on the operating system's theme.\n   *\n   * **Initial value**: `none` (but this value is overridden in the user agent CSS)\n   */\n  \"-moz-appearance\"?: MozAppearanceProperty;\n  /**\n   * The **`backface-visibility`** CSS property sets whether the back face of an element is visible when turned towards the user.\n   *\n   * **Initial value**: `visible`\n   */\n  \"-moz-backface-visibility\"?: BackfaceVisibilityProperty;\n  /**\n   * The **`border-inline-end-color`** CSS property defines the color of the logical inline-end border of an element, which maps to a physical border color depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-color`, `border-right-color`, `border-bottom-color`, or `border-left-color` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `currentcolor`\n   */\n  \"-moz-border-end-color\"?: BorderInlineEndColorProperty;\n  /**\n   * The **`border-inline-end-style`** CSS property defines the style of the logical inline end border of an element, which maps to a physical border style depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-style`, `border-right-style`, `border-bottom-style`, or `border-left-style` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `none`\n   */\n  \"-moz-border-end-style\"?: BorderInlineEndStyleProperty;\n  /**\n   * The **`border-inline-end-width`** CSS property defines the width of the logical inline-end border of an element, which maps to a physical border width depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-width`, `border-right-width`, `border-bottom-width`, or `border-left-width` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `medium`\n   */\n  \"-moz-border-end-width\"?: BorderInlineEndWidthProperty<TLength>;\n  /**\n   * The **`border-inline-start-color`** CSS property defines the color of the logical inline start border of an element, which maps to a physical border color depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-color`, `border-right-color`, `border-bottom-color`, or `border-left-color` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `currentcolor`\n   */\n  \"-moz-border-start-color\"?: BorderInlineStartColorProperty;\n  /**\n   * The **`border-inline-start-style`** CSS property defines the style of the logical inline start border of an element, which maps to a physical border style depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-style`, `border-right-style`, `border-bottom-style`, or `border-left-style` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `none`\n   */\n  \"-moz-border-start-style\"?: BorderInlineStartStyleProperty;\n  /**\n   * The **`box-sizing`** CSS property defines how the user agent should calculate the total width and height of an element.\n   *\n   * **Initial value**: `content-box`\n   */\n  \"-moz-box-sizing\"?: BoxSizingProperty;\n  /**\n   * The **`column-count`** CSS property breaks an element's content into the specified number of columns.\n   *\n   * **Initial value**: `auto`\n   */\n  \"-moz-column-count\"?: ColumnCountProperty;\n  /**\n   * The **`column-fill`** CSS property controls how an element's contents are balanced when broken into columns.\n   *\n   * **Initial value**: `balance`\n   */\n  \"-moz-column-fill\"?: ColumnFillProperty;\n  /**\n   * The **`column-gap`** CSS property sets the size of the gap (gutter) between an element's columns.\n   *\n   * **Initial value**: `normal`\n   */\n  \"-moz-column-gap\"?: ColumnGapProperty<TLength>;\n  /**\n   * The **`column-rule-color`** CSS property sets the color of the rule (line) drawn between columns in a multi-column layout.\n   *\n   * **Initial value**: `currentcolor`\n   */\n  \"-moz-column-rule-color\"?: ColumnRuleColorProperty;\n  /**\n   * The **`column-rule-style`** CSS property sets the style of the line drawn between columns in a multi-column layout.\n   *\n   * **Initial value**: `none`\n   */\n  \"-moz-column-rule-style\"?: ColumnRuleStyleProperty;\n  /**\n   * The **`column-rule-width`** CSS property sets the width of the rule (line) drawn between columns in a multi-column layout.\n   *\n   * **Initial value**: `medium`\n   */\n  \"-moz-column-rule-width\"?: ColumnRuleWidthProperty<TLength>;\n  /**\n   * The **`column-width`** CSS property specifies the ideal column width in a multi-column layout. The container will have as many columns as can fit without any of them having a width less than the `column-width` value. If the width of the container is narrower than the specified value, the single column's width will be smaller than the declared column width.\n   *\n   * **Initial value**: `auto`\n   */\n  \"-moz-column-width\"?: ColumnWidthProperty<TLength>;\n  /**\n   * If you reference an SVG image in a webpage (such as with the `<img>` element or as a background image), the SVG image can coordinate with the embedding element (its context) to have the image adopt property values set on the embedding element. To do this the embedding element needs to list the properties that are to be made available to the image by listing them as values of the **`-moz-context-properties`** property, and the image needs to opt in to using those properties by using values such as the `context-fill` value.\n   *\n   * **Initial value**: `none`\n   */\n  \"-moz-context-properties\"?: MozContextPropertiesProperty;\n  /**\n   * The non-standard **`-moz-float-edge`** CSS property specifies whether the height and width properties of the element include the margin, border, or padding thickness.\n   *\n   * **Initial value**: `content-box`\n   */\n  \"-moz-float-edge\"?: MozFloatEdgeProperty;\n  /**\n   * The **`font-feature-settings`** CSS property controls advanced typographic features in OpenType fonts.\n   *\n   * **Initial value**: `normal`\n   */\n  \"-moz-font-feature-settings\"?: FontFeatureSettingsProperty;\n  /**\n   * The **`font-language-override`** CSS property controls the use of language-specific glyphs in a typeface.\n   *\n   * **Initial value**: `normal`\n   */\n  \"-moz-font-language-override\"?: FontLanguageOverrideProperty;\n  /**\n   * The **`-moz-force-broken-image-icon`** extended CSS property can be used to force the broken image icon to be shown even when a broken image has an `alt` attribute.\n   *\n   * **Initial value**: `0`\n   */\n  \"-moz-force-broken-image-icon\"?: GlobalsNumber;\n  /**\n   * The **`hyphens`** CSS property specifies how words should be hyphenated when text wraps across multiple lines. You can prevent hyphenation entirely, use hyphenation in manually-specified points within the text, or let the browser automatically insert hyphens where appropriate.\n   *\n   * **Initial value**: `manual`\n   */\n  \"-moz-hyphens\"?: HyphensProperty;\n  /**\n   * For certain XUL elements and pseudo-elements that use an image from the `list-style-image` property, this property specifies a region of the image that is used in place of the whole image. This allows elements to use different pieces of the same image to improve performance.\n   *\n   * **Initial value**: `auto`\n   */\n  \"-moz-image-region\"?: MozImageRegionProperty;\n  /**\n   * The **`margin-inline-end`** CSS property defines the logical inline end margin of an element, which maps to a physical margin depending on the element's writing mode, directionality, and text orientation. In other words, it corresponds to the `margin-top`, `margin-right`, `margin-bottom` or `margin-left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `0`\n   */\n  \"-moz-margin-end\"?: MarginInlineEndProperty<TLength>;\n  /**\n   * The **`margin-inline-start`** CSS property defines the logical inline start margin of an element, which maps to a physical margin depending on the element's writing mode, directionality, and text orientation. It corresponds to the `margin-top`, `margin-right`, `margin-bottom`, or `margin-left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `0`\n   */\n  \"-moz-margin-start\"?: MarginInlineStartProperty<TLength>;\n  /**\n   * The **`-moz-orient`** CSS property specifies the orientation of the element to which it's applied.\n   *\n   * **Initial value**: `inline`\n   */\n  \"-moz-orient\"?: MozOrientProperty;\n  /**\n   * In Mozilla applications, the **`-moz-outline-radius-bottomleft`** CSS property can be used to round the bottom-left corner of an element's `outline`.\n   *\n   * **Initial value**: `0`\n   */\n  \"-moz-outline-radius-bottomleft\"?: MozOutlineRadiusBottomleftProperty<TLength>;\n  /**\n   * In Mozilla applications, the **`-moz-outline-radius-bottomright`** CSS property can be used to round the bottom-right corner of an element's `outline`.\n   *\n   * **Initial value**: `0`\n   */\n  \"-moz-outline-radius-bottomright\"?: MozOutlineRadiusBottomrightProperty<TLength>;\n  /**\n   * In Mozilla applications, the **`-moz-outline-radius-topleft`** CSS property can be used to round the top-left corner of an element's `outline`.\n   *\n   * **Initial value**: `0`\n   */\n  \"-moz-outline-radius-topleft\"?: MozOutlineRadiusTopleftProperty<TLength>;\n  /**\n   * In Mozilla applications, the **`-moz-outline-radius-topright`** CSS property can be used to round the top-right corner of an element's `outline`.\n   *\n   * **Initial value**: `0`\n   */\n  \"-moz-outline-radius-topright\"?: MozOutlineRadiusToprightProperty<TLength>;\n  /**\n   * The **`padding-inline-end`** CSS property defines the logical inline end padding of an element, which maps to a physical padding depending on the element's writing mode, directionality, and text orientation. It corresponds to the `padding-top`, `padding-right`, `padding-bottom`, or `padding-left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `0`\n   */\n  \"-moz-padding-end\"?: PaddingInlineEndProperty<TLength>;\n  /**\n   * The **`padding-inline-start`** CSS property defines the logical inline start padding of an element, which maps to a physical padding depending on the element's writing mode, directionality, and text orientation. It corresponds to the `padding-top`, `padding-right`, `padding-bottom`, or `padding-left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `0`\n   */\n  \"-moz-padding-start\"?: PaddingInlineStartProperty<TLength>;\n  /**\n   * The **`perspective`** CSS property determines the distance between the z=0 plane and the user in order to give a 3D-positioned element some perspective. Each 3D element with z>0 becomes larger; each 3D-element with z<0 becomes smaller. The strength of the effect is determined by the value of this property.\n   *\n   * **Initial value**: `none`\n   */\n  \"-moz-perspective\"?: PerspectiveProperty<TLength>;\n  /**\n   * The **`perspective-origin`** CSS property determines the position at which the viewer is looking. It is used as the _vanishing point_ by the `perspective` property.\n   *\n   * **Initial value**: `50% 50%`\n   */\n  \"-moz-perspective-origin\"?: PerspectiveOriginProperty<TLength>;\n  /**\n   * **`-moz-stack-sizing`** is an extended CSS property. Normally, a `stack` will change its size so that all of its child elements are completely visible. For example, moving a child of the stack far to the right will widen the stack so the child remains visible.\n   *\n   * **Initial value**: `stretch-to-fit`\n   */\n  \"-moz-stack-sizing\"?: MozStackSizingProperty;\n  /**\n   * The **`tab-size`** CSS property is used to customize the width of a tab (`U+0009`) character.\n   *\n   * **Initial value**: `8`\n   */\n  \"-moz-tab-size\"?: TabSizeProperty<TLength>;\n  /**\n   * The **`text-size-adjust`** CSS property controls the text inflation algorithm used on some smartphones and tablets. Other browsers will ignore this property.\n   *\n   * **Initial value**: `auto` for smartphone browsers supporting inflation, `none` in other cases (and then not modifiable).\n   */\n  \"-moz-text-size-adjust\"?: TextSizeAdjustProperty;\n  /**\n   * The **`transform-origin`** CSS property sets the origin for an element's transformations.\n   *\n   * **Initial value**: `50% 50% 0`\n   */\n  \"-moz-transform-origin\"?: TransformOriginProperty<TLength>;\n  /**\n   * The **`transform-style`** CSS property sets whether children of an element are positioned in the 3D space or are flattened in the plane of the element.\n   *\n   * **Initial value**: `flat`\n   */\n  \"-moz-transform-style\"?: TransformStyleProperty;\n  /**\n   * The **`transition-delay`** CSS property specifies the duration to wait before starting a property's transition effect when its value changes.\n   *\n   * **Initial value**: `0s`\n   */\n  \"-moz-transition-delay\"?: GlobalsString;\n  /**\n   * The **`transition-duration`** CSS property sets the length of time a transition animation should take to complete. By default, the value is `0s`, meaning that no animation will occur.\n   *\n   * **Initial value**: `0s`\n   */\n  \"-moz-transition-duration\"?: GlobalsString;\n  /**\n   * The **`transition-property`** CSS property sets the CSS properties to which a transition effect should be applied.\n   *\n   * **Initial value**: all\n   */\n  \"-moz-transition-property\"?: TransitionPropertyProperty;\n  /**\n   * The **`transition-timing-function`** CSS property sets how intermediate values are calculated for CSS properties being affected by a transition effect.\n   *\n   * **Initial value**: `ease`\n   */\n  \"-moz-transition-timing-function\"?: TransitionTimingFunctionProperty;\n  /**\n   * The **`-moz-user-focus`** CSS property is used to indicate whether an element can have the focus.\n   *\n   * **Initial value**: `none`\n   */\n  \"-moz-user-focus\"?: MozUserFocusProperty;\n  /**\n   * The **`user-modify`** property has no effect in Firefox. It was originally planned to determine whether or not the content of an element can be edited by a user.\n   *\n   * **Initial value**: `read-only`\n   */\n  \"-moz-user-modify\"?: MozUserModifyProperty;\n  /**\n   * The `**user-select**` CSS property controls whether the user can select text. This doesn't have any effect on content loaded as chrome, except in textboxes.\n   *\n   * **Initial value**: `auto`\n   */\n  \"-moz-user-select\"?: UserSelectProperty;\n  /**\n   * The **`-moz-window-dragging`** CSS property specifies whether a window is draggable or not. It only works in Chrome code, and only on Mac OS X.\n   *\n   * **Initial value**: `drag`\n   */\n  \"-moz-window-dragging\"?: MozWindowDraggingProperty;\n  /**\n   * The **`-ms-accelerator`** CSS property is a Microsoft extension that sets or retrieves a string indicating whether the object represents a keyboard shortcut.\n   *\n   * **Initial value**: `false`\n   */\n  \"-ms-accelerator\"?: MsAcceleratorProperty;\n  /**\n   * The **`align-self`** CSS property aligns flex items of the current flex line overriding the `align-items` value. If any of the item's cross-axis margin is set to `auto`, then `align-self` is ignored. In Grid layout `align-self` aligns the item inside the grid area.\n   *\n   * **Initial value**: `auto`\n   */\n  \"-ms-align-self\"?: AlignSelfProperty;\n  /**\n   * The **`-ms-block-progression`** CSS property is a Microsoft extension that specifies the block progression and layout orientation.\n   *\n   * **Initial value**: `tb`\n   */\n  \"-ms-block-progression\"?: MsBlockProgressionProperty;\n  /**\n   * The **`-ms-content-zoom-chaining`** CSS property is a Microsoft extension specifying the zoom behavior that occurs when a user hits the zoom limit during page manipulation.\n   *\n   * **Initial value**: `none`\n   */\n  \"-ms-content-zoom-chaining\"?: MsContentZoomChainingProperty;\n  /**\n   * The **`-ms-content-zoom-limit-max`** CSS property is a Microsoft extension that specifies the selected elements' maximum zoom factor.\n   *\n   * **Initial value**: `400%`\n   */\n  \"-ms-content-zoom-limit-max\"?: GlobalsString;\n  /**\n   * The **`-ms-content-zoom-limit-min`** CSS property is a Microsoft extension that specifies the minimum zoom factor.\n   *\n   * **Initial value**: `100%`\n   */\n  \"-ms-content-zoom-limit-min\"?: GlobalsString;\n  /**\n   * The **`-ms-content-zoom-snap-points`** CSS property is a Microsoft extension that specifies where zoom snap-points are located.\n   *\n   * **Initial value**: `snapInterval(0%, 100%)`\n   */\n  \"-ms-content-zoom-snap-points\"?: GlobalsString;\n  /**\n   * The **`-ms-content-zoom-snap-type`** CSS property is a Microsoft extension that specifies how zooming is affected by defined snap-points.\n   *\n   * **Initial value**: `none`\n   */\n  \"-ms-content-zoom-snap-type\"?: MsContentZoomSnapTypeProperty;\n  /**\n   * The **`-ms-content-zooming`** CSS property is a Microsoft extension that specifies whether zooming is enabled.\n   *\n   * **Initial value**: zoom for the top level element, none for all other elements\n   */\n  \"-ms-content-zooming\"?: MsContentZoomingProperty;\n  /**\n   * The `-ms-filter` CSS property is a Microsoft extension that sets or retrieves the filter or collection of filters applied to an object.\n   *\n   * **Initial value**: \"\" (the empty string)\n   */\n  \"-ms-filter\"?: GlobalsString;\n  /**\n   * The **`flex-direction`** CSS property sets how flex items are placed in the flex container defining the main axis and the direction (normal or reversed).\n   *\n   * **Initial value**: `row`\n   */\n  \"-ms-flex-direction\"?: FlexDirectionProperty;\n  /**\n   * The **`flex-grow`** CSS property sets how much of the available space in the flex container should be assigned to that item (the flex grow factor). If all sibling items have the same flex grow factor, then all items will receive the same share of available space, otherwise it is distributed according to the ratio defined by the different flex grow factors.\n   *\n   * **Initial value**: `0`\n   */\n  \"-ms-flex-positive\"?: GlobalsNumber;\n  /**\n   * The **`-ms-flow-from`** CSS property is a Microsoft extension that gets or sets a value identifying a region container in the document that accepts the content flow from the data source.\n   *\n   * **Initial value**: `none`\n   */\n  \"-ms-flow-from\"?: MsFlowFromProperty;\n  /**\n   * The **`-ms-flow-into`** CSS property is a Microsoft extension that gets or sets a value identifying an iframe container in the document that serves as the region's data source.\n   *\n   * **Initial value**: `none`\n   */\n  \"-ms-flow-into\"?: MsFlowIntoProperty;\n  /**\n   * The **`grid-auto-columns`** CSS property specifies the size of an implicitly-created grid column track.\n   *\n   * **Initial value**: `auto`\n   */\n  \"-ms-grid-columns\"?: GridAutoColumnsProperty<TLength>;\n  /**\n   * The **`grid-auto-rows`** CSS property specifies the size of an implicitly-created grid row track.\n   *\n   * **Initial value**: `auto`\n   */\n  \"-ms-grid-rows\"?: GridAutoRowsProperty<TLength>;\n  /**\n   * The **`-ms-high-contrast-adjust`** CSS property is a Microsoft extension that gets or sets a value indicating whether to override any CSS properties that would have been set in high contrast mode.\n   *\n   * **Initial value**: `auto`\n   */\n  \"-ms-high-contrast-adjust\"?: MsHighContrastAdjustProperty;\n  /**\n   * The **`-ms-hyphenate-limit-chars`** CSS property is a Microsoft extension that specifies one to three values indicating the minimum number of characters in a hyphenated word. If the word does not meet the required minimum number of characters in the word, before the hyphen, or after the hyphen, then the word is not hyphenated.\n   *\n   * **Initial value**: `auto`\n   */\n  \"-ms-hyphenate-limit-chars\"?: MsHyphenateLimitCharsProperty;\n  /**\n   * The **`-ms-hyphenate-limit-lines`** CSS property is a Microsoft extension specifying the maximum number of consecutive lines in an element that may be ended with a hyphenated word.\n   *\n   * **Initial value**: `no-limit`\n   */\n  \"-ms-hyphenate-limit-lines\"?: MsHyphenateLimitLinesProperty;\n  /**\n   * The `**-ms-hyphenate-limit-zone**` CSS property is a Microsoft extension specifying the width of the hyphenation zone.\n   *\n   * **Initial value**: `0`\n   */\n  \"-ms-hyphenate-limit-zone\"?: MsHyphenateLimitZoneProperty<TLength>;\n  /**\n   * The **`hyphens`** CSS property specifies how words should be hyphenated when text wraps across multiple lines. You can prevent hyphenation entirely, use hyphenation in manually-specified points within the text, or let the browser automatically insert hyphens where appropriate.\n   *\n   * **Initial value**: `manual`\n   */\n  \"-ms-hyphens\"?: HyphensProperty;\n  /**\n   * The **`-ms-ime-align`** CSS property is a Microsoft extension aligning the Input Method Editor (IME) candidate window box relative to the element on which the IME composition is active. The extension is implemented in Microsoft Edge and Internet Explorer 11.\n   *\n   * **Initial value**: `auto`\n   */\n  \"-ms-ime-align\"?: MsImeAlignProperty;\n  /**\n   * The **`line-break`** CSS property sets how to break lines of Chinese, Japanese, or Korean (CJK) text when working with punctuation and symbols.\n   *\n   * **Initial value**: `auto`\n   */\n  \"-ms-line-break\"?: LineBreakProperty;\n  /**\n   * The **`order`** CSS property sets the order to lay out an item in a flex or grid container. Items in a container are sorted by ascending `order` value and then by their source code order.\n   *\n   * **Initial value**: `0`\n   */\n  \"-ms-order\"?: GlobalsNumber;\n  /**\n   * The **`-ms-overflow-style`** CSS property is a Microsoft extension controlling the behavior of scrollbars when the content of an element overflows.\n   *\n   * **Initial value**: `auto`\n   */\n  \"-ms-overflow-style\"?: MsOverflowStyleProperty;\n  /**\n   * The **`overflow-x`** CSS property sets what shows when content overflows a block-level element's left and right edges. This may be nothing, a scroll bar, or the overflow content.\n   *\n   * **Initial value**: `visible`\n   */\n  \"-ms-overflow-x\"?: OverflowXProperty;\n  /**\n   * The **`overflow-y`** CSS property sets what shows when content overflows a block-level element's top and bottom edges. This may be nothing, a scroll bar, or the overflow content.\n   *\n   * **Initial value**: `visible`\n   */\n  \"-ms-overflow-y\"?: OverflowYProperty;\n  /**\n   * The `**-ms-scroll-chaining**` CSS property is a Microsoft extension that specifies the scrolling behavior that occurs when a user hits the scroll limit during a manipulation.\n   *\n   * **Initial value**: `chained`\n   */\n  \"-ms-scroll-chaining\"?: MsScrollChainingProperty;\n  /**\n   * The `**-ms-scroll-limit-x-max**` CSS property is a Microsoft extension that specifies the maximum value for the `Element.scrollLeft` property.\n   *\n   * **Initial value**: `auto`\n   */\n  \"-ms-scroll-limit-x-max\"?: MsScrollLimitXMaxProperty<TLength>;\n  /**\n   * The **`-ms-scroll-limit-x-min`** CSS property is a Microsoft extension that specifies the minimum value for the `Element.scrollLeft` property.\n   *\n   * **Initial value**: `0`\n   */\n  \"-ms-scroll-limit-x-min\"?: MsScrollLimitXMinProperty<TLength>;\n  /**\n   * The **`-ms-scroll-limit-y-max`** CSS property is a Microsoft extension that specifies the maximum value for the `Element.scrollTop` property.\n   *\n   * **Initial value**: `auto`\n   */\n  \"-ms-scroll-limit-y-max\"?: MsScrollLimitYMaxProperty<TLength>;\n  /**\n   * The **`-ms-scroll-limit-y-min`** CSS property is a Microsoft extension that specifies the minimum value for the `Element.scrollTop` property.\n   *\n   * **Initial value**: `0`\n   */\n  \"-ms-scroll-limit-y-min\"?: MsScrollLimitYMinProperty<TLength>;\n  /**\n   * The **`-ms-scroll-rails`** CSS property is a Microsoft extension that specifies whether scrolling locks to the primary axis of motion.\n   *\n   * **Initial value**: `railed`\n   */\n  \"-ms-scroll-rails\"?: MsScrollRailsProperty;\n  /**\n   * The **`-ms-scroll-snap-points-x`** CSS property is a Microsoft extension that specifies where snap-points will be located along the x-axis.\n   *\n   * **Initial value**: `snapInterval(0px, 100%)`\n   */\n  \"-ms-scroll-snap-points-x\"?: GlobalsString;\n  /**\n   * The **`-ms-scroll-snap-points-y`** CSS property is a Microsoft extension that specifies where snap-points will be located along the y-axis.\n   *\n   * **Initial value**: `snapInterval(0px, 100%)`\n   */\n  \"-ms-scroll-snap-points-y\"?: GlobalsString;\n  /**\n   * The **`scroll-snap-type`** CSS property sets how strictly snap points are enforced on the scroll container in case there is one.\n   *\n   * **Initial value**: `none`\n   */\n  \"-ms-scroll-snap-type\"?: MsScrollSnapTypeProperty;\n  /**\n   * The **`-ms-scroll-translation`** CSS property is a Microsoft extension that specifies whether vertical-to-horizontal scroll wheel translation occurs on the specified element.\n   *\n   * **Initial value**: `none`\n   */\n  \"-ms-scroll-translation\"?: MsScrollTranslationProperty;\n  /**\n   * The **`-ms-scrollbar-3dlight-color`** CSS property is a Microsoft extension specifying the color of the top and left edges of the scroll box and scroll arrows of a scroll bar.\n   *\n   * **Initial value**: depends on user agent\n   */\n  \"-ms-scrollbar-3dlight-color\"?: MsScrollbar3dlightColorProperty;\n  /**\n   * The **`-ms-scrollbar-arrow-color`** CSS property is a Microsoft extension that specifies the color of the arrow elements of a scroll arrow.\n   *\n   * **Initial value**: `ButtonText`\n   */\n  \"-ms-scrollbar-arrow-color\"?: MsScrollbarArrowColorProperty;\n  /**\n   * The `**-ms-scrollbar-base-color**` CSS property is a Microsoft extension that specifies the base color of the main elements of a scroll bar.\n   *\n   * **Initial value**: depends on user agent\n   */\n  \"-ms-scrollbar-base-color\"?: MsScrollbarBaseColorProperty;\n  /**\n   * The **`-ms-scrollbar-darkshadow-color`** CSS property is a Microsoft extension that specifies the color of a scroll bar's gutter.\n   *\n   * **Initial value**: `ThreeDDarkShadow`\n   */\n  \"-ms-scrollbar-darkshadow-color\"?: MsScrollbarDarkshadowColorProperty;\n  /**\n   * The `**-ms-scrollbar-face-color**` CSS property is a Microsoft extension that specifies the color of the scroll box and scroll arrows of a scroll bar.\n   *\n   * **Initial value**: `ThreeDFace`\n   */\n  \"-ms-scrollbar-face-color\"?: MsScrollbarFaceColorProperty;\n  /**\n   * The `**-ms-scrollbar-highlight-color**` CSS property is a Microsoft extension that specifies the color of the slider tray, the top and left edges of the scroll box, and the scroll arrows of a scroll bar.\n   *\n   * **Initial value**: `ThreeDHighlight`\n   */\n  \"-ms-scrollbar-highlight-color\"?: MsScrollbarHighlightColorProperty;\n  /**\n   * The **`-ms-scrollbar-shadow-color`** CSS property is a Microsoft extension that specifies the color of the bottom and right edges of the scroll box and scroll arrows of a scroll bar.\n   *\n   * **Initial value**: `ThreeDDarkShadow`\n   */\n  \"-ms-scrollbar-shadow-color\"?: MsScrollbarShadowColorProperty;\n  /**\n   * The **`-ms-text-autospace`** CSS property is a Microsoft extension that specifies the autospacing and narrow space width adjustment of text.\n   *\n   * **Initial value**: `none`\n   */\n  \"-ms-text-autospace\"?: MsTextAutospaceProperty;\n  /**\n   * The **`text-combine-upright`** CSS property sets the combination of characters into the space of a single character. If the combined text is wider than 1em, the user agent must fit the contents within 1em. The resulting composition is treated as a single upright glyph for layout and decoration. This property only has an effect in vertical writing modes.\n   *\n   * **Initial value**: `none`\n   */\n  \"-ms-text-combine-horizontal\"?: TextCombineUprightProperty;\n  /**\n   * The **`text-overflow`** CSS property sets how hidden overflow content is signaled to users. It can be clipped, display an ellipsis ('`…`'), or display a custom string.\n   *\n   * **Initial value**: `clip`\n   */\n  \"-ms-text-overflow\"?: TextOverflowProperty;\n  /**\n   * The **`touch-action`** CSS property sets how a region can be manipulated by a touchscreen user (for example, by zooming features built into the browser).\n   *\n   * **Initial value**: `auto`\n   */\n  \"-ms-touch-action\"?: TouchActionProperty;\n  /**\n   * The **`-ms-touch-select`** CSS property is a Microsoft extension that toggles the gripper visual elements that enable touch text selection.\n   *\n   * **Initial value**: `grippers`\n   */\n  \"-ms-touch-select\"?: MsTouchSelectProperty;\n  /**\n   * The **`transform`** CSS property lets you rotate, scale, skew, or translate an element. It modifies the coordinate space of the CSS visual formatting model.\n   *\n   * **Initial value**: `none`\n   */\n  \"-ms-transform\"?: TransformProperty;\n  /**\n   * The **`transform-origin`** CSS property sets the origin for an element's transformations.\n   *\n   * **Initial value**: `50% 50% 0`\n   */\n  \"-ms-transform-origin\"?: TransformOriginProperty<TLength>;\n  /**\n   * The **`transition-delay`** CSS property specifies the duration to wait before starting a property's transition effect when its value changes.\n   *\n   * **Initial value**: `0s`\n   */\n  \"-ms-transition-delay\"?: GlobalsString;\n  /**\n   * The **`transition-duration`** CSS property sets the length of time a transition animation should take to complete. By default, the value is `0s`, meaning that no animation will occur.\n   *\n   * **Initial value**: `0s`\n   */\n  \"-ms-transition-duration\"?: GlobalsString;\n  /**\n   * The **`transition-property`** CSS property sets the CSS properties to which a transition effect should be applied.\n   *\n   * **Initial value**: all\n   */\n  \"-ms-transition-property\"?: TransitionPropertyProperty;\n  /**\n   * The **`transition-timing-function`** CSS property sets how intermediate values are calculated for CSS properties being affected by a transition effect.\n   *\n   * **Initial value**: `ease`\n   */\n  \"-ms-transition-timing-function\"?: TransitionTimingFunctionProperty;\n  /**\n   * The `**user-select**` CSS property controls whether the user can select text. This doesn't have any effect on content loaded as chrome, except in textboxes.\n   *\n   * **Initial value**: `text`\n   */\n  \"-ms-user-select\"?: MsUserSelectProperty;\n  /**\n   * The **`word-break`** CSS property sets whether line breaks appear wherever the text would otherwise overflow its content box.\n   *\n   * **Initial value**: `normal`\n   */\n  \"-ms-word-break\"?: WordBreakProperty;\n  /**\n   * The **`-ms-wrap-flow`** CSS property is a Microsoft extension that specifies how exclusions impact inline content within block-level elements.\n   *\n   * **Initial value**: `auto`\n   */\n  \"-ms-wrap-flow\"?: MsWrapFlowProperty;\n  /**\n   * The **`-ms-wrap-margin`** CSS property is a Microsoft extension that specifies a margin that offsets the inner wrap shape from other shapes.\n   *\n   * **Initial value**: `0`\n   */\n  \"-ms-wrap-margin\"?: MsWrapMarginProperty<TLength>;\n  /**\n   * The **`-ms-wrap-through`** CSS property is a Microsoft extension that specifies how content should wrap around an exclusion element.\n   *\n   * **Initial value**: `wrap`\n   */\n  \"-ms-wrap-through\"?: MsWrapThroughProperty;\n  /**\n   * The **`writing-mode`** CSS property sets whether lines of text are laid out horizontally or vertically, as well as the direction in which blocks progress.\n   *\n   * **Initial value**: `horizontal-tb`\n   */\n  \"-ms-writing-mode\"?: WritingModeProperty;\n  /**\n   * The **`object-fit`** CSS property sets how the content of a replaced element, such as an `<img>` or `<video>`, should be resized to fit its container.\n   *\n   * **Initial value**: `fill`\n   */\n  \"-o-object-fit\"?: ObjectFitProperty;\n  /**\n   * The **`object-position`** CSS property specifies the alignment of the selected replaced element's contents within the element's box. Areas of the box which aren't covered by the replaced element's object will show the element's background.\n   *\n   * **Initial value**: `50% 50%`\n   */\n  \"-o-object-position\"?: ObjectPositionProperty<TLength>;\n  /**\n   * The **`tab-size`** CSS property is used to customize the width of a tab (`U+0009`) character.\n   *\n   * **Initial value**: `8`\n   */\n  \"-o-tab-size\"?: TabSizeProperty<TLength>;\n  /**\n   * The **`text-overflow`** CSS property sets how hidden overflow content is signaled to users. It can be clipped, display an ellipsis ('`…`'), or display a custom string.\n   *\n   * **Initial value**: `clip`\n   */\n  \"-o-text-overflow\"?: TextOverflowProperty;\n  /**\n   * The **`transform-origin`** CSS property sets the origin for an element's transformations.\n   *\n   * **Initial value**: `50% 50% 0`\n   */\n  \"-o-transform-origin\"?: TransformOriginProperty<TLength>;\n  /**\n   * The CSS **`align-content`** property sets how the browser distributes space between and around content items along the cross-axis of a flexbox container, and the main-axis of a grid container.\n   *\n   * **Initial value**: `normal`\n   */\n  \"-webkit-align-content\"?: AlignContentProperty;\n  /**\n   * The CSS **`align-items`** property sets the `align-self` value on all direct children as a group. The align-self property sets the alignment of an item within its containing block. In Flexbox it controls the alignment of items on the Cross Axis, in Grid Layout it controls the alignment of items on the Block Axis within their grid area.\n   *\n   * **Initial value**: `normal`\n   */\n  \"-webkit-align-items\"?: AlignItemsProperty;\n  /**\n   * The **`align-self`** CSS property aligns flex items of the current flex line overriding the `align-items` value. If any of the item's cross-axis margin is set to `auto`, then `align-self` is ignored. In Grid layout `align-self` aligns the item inside the grid area.\n   *\n   * **Initial value**: `auto`\n   */\n  \"-webkit-align-self\"?: AlignSelfProperty;\n  /**\n   * The **`animation-delay`** CSS property sets when an animation starts. The animation can start later, immediately from its beginning, or immediately and partway through the animation.\n   *\n   * **Initial value**: `0s`\n   */\n  \"-webkit-animation-delay\"?: GlobalsString;\n  /**\n   * The **`animation-direction`** CSS property sets whether an animation should play forwards, backwards, or alternating back and forth.\n   *\n   * **Initial value**: `normal`\n   */\n  \"-webkit-animation-direction\"?: AnimationDirectionProperty;\n  /**\n   * The **`animation-duration`** CSS property sets the length of time that an animation takes to complete one cycle.\n   *\n   * **Initial value**: `0s`\n   */\n  \"-webkit-animation-duration\"?: GlobalsString;\n  /**\n   * The **`animation-fill-mode`** CSS property sets how a CSS animation applies styles to its target before and after its execution.\n   *\n   * **Initial value**: `none`\n   */\n  \"-webkit-animation-fill-mode\"?: AnimationFillModeProperty;\n  /**\n   * The **`animation-iteration-count`** CSS property sets the number of times an animation cycle should be played before stopping.\n   *\n   * **Initial value**: `1`\n   */\n  \"-webkit-animation-iteration-count\"?: AnimationIterationCountProperty;\n  /**\n   * The **`animation-name`** CSS property sets one or more animations to apply to an element. Each name is an `@keyframes` at-rule that sets the property values for the animation sequence.\n   *\n   * **Initial value**: `none`\n   */\n  \"-webkit-animation-name\"?: AnimationNameProperty;\n  /**\n   * The **`animation-play-state`** CSS property sets whether an animation is running or paused.\n   *\n   * **Initial value**: `running`\n   */\n  \"-webkit-animation-play-state\"?: AnimationPlayStateProperty;\n  /**\n   * The `**animation-timing-function**` CSS property sets how an animation progresses through the duration of each cycle.\n   *\n   * **Initial value**: `ease`\n   */\n  \"-webkit-animation-timing-function\"?: AnimationTimingFunctionProperty;\n  /**\n   * The **`-moz-appearance`** CSS property is used in Gecko (Firefox) to display an element using platform-native styling based on the operating system's theme.\n   *\n   * **Initial value**: `none` (but this value is overridden in the user agent CSS)\n   */\n  \"-webkit-appearance\"?: WebkitAppearanceProperty;\n  /**\n   * The **`backdrop-filter`** CSS property lets you apply graphical effects such as blurring or color shifting to the area behind an element. Because it applies to everything _behind_ the element, to see the effect you must make the element or its background at least partially transparent.\n   *\n   * **Initial value**: `none`\n   */\n  \"-webkit-backdrop-filter\"?: BackdropFilterProperty;\n  /**\n   * The **`backface-visibility`** CSS property sets whether the back face of an element is visible when turned towards the user.\n   *\n   * **Initial value**: `visible`\n   */\n  \"-webkit-backface-visibility\"?: BackfaceVisibilityProperty;\n  /**\n   * The **`background-clip`** CSS property sets whether an element's background `<color>` or `<image>` extends underneath its border.\n   *\n   * **Initial value**: `border-box`\n   */\n  \"-webkit-background-clip\"?: BackgroundClipProperty;\n  /**\n   * The **`background-origin`** CSS property sets the _background positioning area_. In other words, it sets the origin position of an image set with the `background-image` property.\n   *\n   * **Initial value**: `padding-box`\n   */\n  \"-webkit-background-origin\"?: BackgroundOriginProperty;\n  /**\n   * The **`background-size`** CSS property sets the size of the element's background image. The image can be left to its natural size, stretched, or constrained to fit the available space.\n   *\n   * **Initial value**: `auto auto`\n   */\n  \"-webkit-background-size\"?: BackgroundSizeProperty<TLength>;\n  /** **Initial value**: `currentcolor` */\n  \"-webkit-border-before-color\"?: WebkitBorderBeforeColorProperty;\n  /** **Initial value**: `none` */\n  \"-webkit-border-before-style\"?: WebkitBorderBeforeStyleProperty;\n  /** **Initial value**: `medium` */\n  \"-webkit-border-before-width\"?: WebkitBorderBeforeWidthProperty<TLength>;\n  /**\n   * The **`border-bottom-left-radius`** CSS property rounds the bottom-left corner of an element.\n   *\n   * **Initial value**: `0`\n   */\n  \"-webkit-border-bottom-left-radius\"?: BorderBottomLeftRadiusProperty<TLength>;\n  /**\n   * The **`border-bottom-right-radius`** CSS property rounds the bottom-right corner of an element.\n   *\n   * **Initial value**: `0`\n   */\n  \"-webkit-border-bottom-right-radius\"?: BorderBottomRightRadiusProperty<TLength>;\n  /**\n   * The **`border-image-slice`** CSS property divides the image specified by `border-image-source` into regions. These regions form the components of an element's border image.\n   *\n   * **Initial value**: `100%`\n   */\n  \"-webkit-border-image-slice\"?: BorderImageSliceProperty;\n  /**\n   * The **`border-top-left-radius`** CSS property rounds the top-left corner of an element.\n   *\n   * **Initial value**: `0`\n   */\n  \"-webkit-border-top-left-radius\"?: BorderTopLeftRadiusProperty<TLength>;\n  /**\n   * The **`border-top-right-radius`** CSS property rounds the top-right corner of an element.\n   *\n   * **Initial value**: `0`\n   */\n  \"-webkit-border-top-right-radius\"?: BorderTopRightRadiusProperty<TLength>;\n  /**\n   * The **`box-decoration-break`** CSS property specifies how an element's fragments should be rendered when broken across multiple lines, columns, or pages.\n   *\n   * **Initial value**: `slice`\n   */\n  \"-webkit-box-decoration-break\"?: BoxDecorationBreakProperty;\n  /**\n   * The **`-webkit-box-reflect`** CSS property lets you reflect the content of an element in one specific direction.\n   *\n   * **Initial value**: `none`\n   */\n  \"-webkit-box-reflect\"?: WebkitBoxReflectProperty<TLength>;\n  /**\n   * The **`box-shadow`** CSS property adds shadow effects around an element's frame. You can set multiple effects separated by commas. A box shadow is described by X and Y offsets relative to the element, blur and spread radii, and color.\n   *\n   * **Initial value**: `none`\n   */\n  \"-webkit-box-shadow\"?: BoxShadowProperty;\n  /**\n   * The **`box-sizing`** CSS property defines how the user agent should calculate the total width and height of an element.\n   *\n   * **Initial value**: `content-box`\n   */\n  \"-webkit-box-sizing\"?: BoxSizingProperty;\n  /**\n   * The `**clip-path**` CSS property creates a clipping region that sets what part of an element should be shown. Parts that are inside the region are shown, while those outside are hidden.\n   *\n   * **Initial value**: `none`\n   */\n  \"-webkit-clip-path\"?: ClipPathProperty;\n  /**\n   * The **`color-adjust`** CSS property sets what, if anything, the user agent may do to optimize the appearance of the element on the output device. By default, the browser is allowed to make any adjustments to the element's appearance it determines to be necessary and prudent given the type and capabilities of the output device.\n   *\n   * **Initial value**: `economy`\n   */\n  \"-webkit-color-adjust\"?: ColorAdjustProperty;\n  /**\n   * The **`column-count`** CSS property breaks an element's content into the specified number of columns.\n   *\n   * **Initial value**: `auto`\n   */\n  \"-webkit-column-count\"?: ColumnCountProperty;\n  /**\n   * The **`column-fill`** CSS property controls how an element's contents are balanced when broken into columns.\n   *\n   * **Initial value**: `balance`\n   */\n  \"-webkit-column-fill\"?: ColumnFillProperty;\n  /**\n   * The **`column-gap`** CSS property sets the size of the gap (gutter) between an element's columns.\n   *\n   * **Initial value**: `normal`\n   */\n  \"-webkit-column-gap\"?: ColumnGapProperty<TLength>;\n  /**\n   * The **`column-rule-color`** CSS property sets the color of the rule (line) drawn between columns in a multi-column layout.\n   *\n   * **Initial value**: `currentcolor`\n   */\n  \"-webkit-column-rule-color\"?: ColumnRuleColorProperty;\n  /**\n   * The **`column-rule-style`** CSS property sets the style of the line drawn between columns in a multi-column layout.\n   *\n   * **Initial value**: `none`\n   */\n  \"-webkit-column-rule-style\"?: ColumnRuleStyleProperty;\n  /**\n   * The **`column-rule-width`** CSS property sets the width of the rule (line) drawn between columns in a multi-column layout.\n   *\n   * **Initial value**: `medium`\n   */\n  \"-webkit-column-rule-width\"?: ColumnRuleWidthProperty<TLength>;\n  /**\n   * The **`column-span`** CSS property makes it possible for an element to span across all columns when its value is set to `all`.\n   *\n   * **Initial value**: `none`\n   */\n  \"-webkit-column-span\"?: ColumnSpanProperty;\n  /**\n   * The **`column-width`** CSS property specifies the ideal column width in a multi-column layout. The container will have as many columns as can fit without any of them having a width less than the `column-width` value. If the width of the container is narrower than the specified value, the single column's width will be smaller than the declared column width.\n   *\n   * **Initial value**: `auto`\n   */\n  \"-webkit-column-width\"?: ColumnWidthProperty<TLength>;\n  /**\n   * The **`filter`** CSS property applies graphical effects like blur or color shift to an element. Filters are commonly used to adjust the rendering of images, backgrounds, and borders.\n   *\n   * **Initial value**: `none`\n   */\n  \"-webkit-filter\"?: FilterProperty;\n  /**\n   * The **`flex-basis`** CSS property sets the initial main size of a flex item. It sets the size of the content box unless otherwise set with `box-sizing`.\n   *\n   * **Initial value**: `auto`\n   */\n  \"-webkit-flex-basis\"?: FlexBasisProperty<TLength>;\n  /**\n   * The **`flex-direction`** CSS property sets how flex items are placed in the flex container defining the main axis and the direction (normal or reversed).\n   *\n   * **Initial value**: `row`\n   */\n  \"-webkit-flex-direction\"?: FlexDirectionProperty;\n  /**\n   * The **`flex-grow`** CSS property sets how much of the available space in the flex container should be assigned to that item (the flex grow factor). If all sibling items have the same flex grow factor, then all items will receive the same share of available space, otherwise it is distributed according to the ratio defined by the different flex grow factors.\n   *\n   * **Initial value**: `0`\n   */\n  \"-webkit-flex-grow\"?: GlobalsNumber;\n  /**\n   * The **`flex-shrink`** CSS property sets the flex shrink factor of a flex item. If the size of flex items is larger than the flex container, items shrink to fit according to `flex-shrink`.\n   *\n   * **Initial value**: `1`\n   */\n  \"-webkit-flex-shrink\"?: GlobalsNumber;\n  /**\n   * The **`flex-wrap`** CSS property sets whether flex items are forced onto one line or can wrap onto multiple lines. If wrapping is allowed, it sets the direction that lines are stacked.\n   *\n   * **Initial value**: `nowrap`\n   */\n  \"-webkit-flex-wrap\"?: FlexWrapProperty;\n  /**\n   * The **`font-feature-settings`** CSS property controls advanced typographic features in OpenType fonts.\n   *\n   * **Initial value**: `normal`\n   */\n  \"-webkit-font-feature-settings\"?: FontFeatureSettingsProperty;\n  /**\n   * The **`font-kerning`** CSS property sets the use of the kerning information stored in a font.\n   *\n   * **Initial value**: `auto`\n   */\n  \"-webkit-font-kerning\"?: FontKerningProperty;\n  /**\n   * The **`font-variant-ligatures`** CSS property controls which ligatures and contextual forms are used in textual content of the elements it applies to. This leads to more harmonized forms in the resulting text.\n   *\n   * **Initial value**: `normal`\n   */\n  \"-webkit-font-variant-ligatures\"?: FontVariantLigaturesProperty;\n  /**\n   * The **`hyphens`** CSS property specifies how words should be hyphenated when text wraps across multiple lines. You can prevent hyphenation entirely, use hyphenation in manually-specified points within the text, or let the browser automatically insert hyphens where appropriate.\n   *\n   * **Initial value**: `manual`\n   */\n  \"-webkit-hyphens\"?: HyphensProperty;\n  /**\n   * The CSS **`justify-content`** property defines how the browser distributes space between and around content items along the main-axis of a flex container, and the inline axis of a grid container.\n   *\n   * **Initial value**: `normal`\n   */\n  \"-webkit-justify-content\"?: JustifyContentProperty;\n  /**\n   * The **`line-break`** CSS property sets how to break lines of Chinese, Japanese, or Korean (CJK) text when working with punctuation and symbols.\n   *\n   * **Initial value**: `auto`\n   */\n  \"-webkit-line-break\"?: LineBreakProperty;\n  /**\n   * The **`-webkit-line-clamp`** CSS property allows limiting of the contents of a block container to the specified number of lines.\n   *\n   * **Initial value**: `none`\n   */\n  \"-webkit-line-clamp\"?: WebkitLineClampProperty;\n  /**\n   * The **`margin-inline-end`** CSS property defines the logical inline end margin of an element, which maps to a physical margin depending on the element's writing mode, directionality, and text orientation. In other words, it corresponds to the `margin-top`, `margin-right`, `margin-bottom` or `margin-left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `0`\n   */\n  \"-webkit-margin-end\"?: MarginInlineEndProperty<TLength>;\n  /**\n   * The **`margin-inline-start`** CSS property defines the logical inline start margin of an element, which maps to a physical margin depending on the element's writing mode, directionality, and text orientation. It corresponds to the `margin-top`, `margin-right`, `margin-bottom`, or `margin-left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `0`\n   */\n  \"-webkit-margin-start\"?: MarginInlineStartProperty<TLength>;\n  /**\n   * If a `-webkit-mask-image` is specified, `-webkit-mask-attachment` determines whether the mask image's position is fixed within the viewport, or scrolls along with its containing block.\n   *\n   * **Initial value**: `scroll`\n   */\n  \"-webkit-mask-attachment\"?: WebkitMaskAttachmentProperty;\n  /**\n   * The **`mask-clip`** CSS property determines the area, which is affected by a mask. The painted content of an element must be restricted to this area.\n   *\n   * **Initial value**: `border`\n   */\n  \"-webkit-mask-clip\"?: WebkitMaskClipProperty;\n  /**\n   * The **`-webkit-mask-composite`** property specifies the manner in which multiple mask images applied to the same element are composited with one another. Mask images are composited in the opposite order that they are declared with the `-webkit-mask-image` property.\n   *\n   * **Initial value**: `source-over`\n   */\n  \"-webkit-mask-composite\"?: WebkitMaskCompositeProperty;\n  /**\n   * The **`mask-image`** CSS property sets the image that is used as mask layer for an element.\n   *\n   * **Initial value**: `none`\n   */\n  \"-webkit-mask-image\"?: WebkitMaskImageProperty;\n  /**\n   * The **`mask-origin`** CSS property sets the origin of a mask.\n   *\n   * **Initial value**: `padding`\n   */\n  \"-webkit-mask-origin\"?: WebkitMaskOriginProperty;\n  /**\n   * The **`mask-position`** CSS property sets the initial position, relative to the mask position layer set by `mask-origin`, for each defined mask image.\n   *\n   * **Initial value**: `0% 0%`\n   */\n  \"-webkit-mask-position\"?: WebkitMaskPositionProperty<TLength>;\n  /**\n   * The `-webkit-mask-position-x` CSS property sets the initial horizontal position of a mask image.\n   *\n   * **Initial value**: `0%`\n   */\n  \"-webkit-mask-position-x\"?: WebkitMaskPositionXProperty<TLength>;\n  /**\n   * The `-webkit-mask-position-y` CSS property sets the initial vertical position of a mask image.\n   *\n   * **Initial value**: `0%`\n   */\n  \"-webkit-mask-position-y\"?: WebkitMaskPositionYProperty<TLength>;\n  /**\n   * The **`mask-repeat`** CSS property sets how mask images are repeated. A mask image can be repeated along the horizontal axis, the vertical axis, both axes, or not repeated at all.\n   *\n   * **Initial value**: `repeat`\n   */\n  \"-webkit-mask-repeat\"?: WebkitMaskRepeatProperty;\n  /**\n   * The `-webkit-mask-repeat-x` property specifies whether and how a mask image is repeated (tiled) horizontally.\n   *\n   * **Initial value**: `repeat`\n   */\n  \"-webkit-mask-repeat-x\"?: WebkitMaskRepeatXProperty;\n  /**\n   * The `-webkit-mask-repeat-y` property sets whether and how a mask image is repeated (tiled) vertically.\n   *\n   * **Initial value**: `repeat`\n   */\n  \"-webkit-mask-repeat-y\"?: WebkitMaskRepeatYProperty;\n  /**\n   * The **`mask-size`** CSS property specifies the sizes of the mask images. The size of the image can be fully or partially constrained in order to preserve its intrinsic ratio.\n   *\n   * **Initial value**: `auto auto`\n   */\n  \"-webkit-mask-size\"?: WebkitMaskSizeProperty<TLength>;\n  /**\n   * The **`max-inline-size`** CSS property defines the horizontal or vertical maximum size of an element's block depending on its writing mode. It corresponds to the `max-width` or the `max-height` property depending on the value defined for `writing-mode`. If the writing mode is vertically oriented, the value of `max-inline-size` relates to the maximal height of the element, otherwise it relates to the maximal width of the element. It relates to `max-block-size`, which defines the other dimension of the element.\n   *\n   * **Initial value**: `0`\n   */\n  \"-webkit-max-inline-size\"?: MaxInlineSizeProperty<TLength>;\n  /**\n   * The **`order`** CSS property sets the order to lay out an item in a flex or grid container. Items in a container are sorted by ascending `order` value and then by their source code order.\n   *\n   * **Initial value**: `0`\n   */\n  \"-webkit-order\"?: GlobalsNumber;\n  /**\n   * The `-webkit-overflow-scrolling` CSS property controls whether or not touch devices use momentum-based scrolling for a given element.\n   *\n   * **Initial value**: `auto`\n   */\n  \"-webkit-overflow-scrolling\"?: WebkitOverflowScrollingProperty;\n  /**\n   * The **`padding-inline-end`** CSS property defines the logical inline end padding of an element, which maps to a physical padding depending on the element's writing mode, directionality, and text orientation. It corresponds to the `padding-top`, `padding-right`, `padding-bottom`, or `padding-left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `0`\n   */\n  \"-webkit-padding-end\"?: PaddingInlineEndProperty<TLength>;\n  /**\n   * The **`padding-inline-start`** CSS property defines the logical inline start padding of an element, which maps to a physical padding depending on the element's writing mode, directionality, and text orientation. It corresponds to the `padding-top`, `padding-right`, `padding-bottom`, or `padding-left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `0`\n   */\n  \"-webkit-padding-start\"?: PaddingInlineStartProperty<TLength>;\n  /**\n   * The **`perspective`** CSS property determines the distance between the z=0 plane and the user in order to give a 3D-positioned element some perspective. Each 3D element with z>0 becomes larger; each 3D-element with z<0 becomes smaller. The strength of the effect is determined by the value of this property.\n   *\n   * **Initial value**: `none`\n   */\n  \"-webkit-perspective\"?: PerspectiveProperty<TLength>;\n  /**\n   * The **`perspective-origin`** CSS property determines the position at which the viewer is looking. It is used as the _vanishing point_ by the `perspective` property.\n   *\n   * **Initial value**: `50% 50%`\n   */\n  \"-webkit-perspective-origin\"?: PerspectiveOriginProperty<TLength>;\n  /**\n   * The **`scroll-snap-type`** CSS property sets how strictly snap points are enforced on the scroll container in case there is one.\n   *\n   * **Initial value**: `none`\n   */\n  \"-webkit-scroll-snap-type\"?: ScrollSnapTypeProperty;\n  /**\n   * The **`shape-margin`** CSS property sets a margin for a CSS shape created using `shape-outside`.\n   *\n   * **Initial value**: `0`\n   */\n  \"-webkit-shape-margin\"?: ShapeMarginProperty<TLength>;\n  /**\n   * **`-webkit-tap-highlight-color`** is a non-standard CSS property that sets the color of the highlight that appears over a link while it's being tapped. The highlighting indicates to the user that their tap is being successfully recognized, and indicates which element they're tapping on.\n   *\n   * **Initial value**: `black`\n   */\n  \"-webkit-tap-highlight-color\"?: WebkitTapHighlightColorProperty;\n  /**\n   * The **`text-combine-upright`** CSS property sets the combination of characters into the space of a single character. If the combined text is wider than 1em, the user agent must fit the contents within 1em. The resulting composition is treated as a single upright glyph for layout and decoration. This property only has an effect in vertical writing modes.\n   *\n   * **Initial value**: `none`\n   */\n  \"-webkit-text-combine\"?: TextCombineUprightProperty;\n  /**\n   * The **`text-decoration-color`** CSS property sets the color of decorations added to text by `text-decoration-line`.\n   *\n   * **Initial value**: `currentcolor`\n   */\n  \"-webkit-text-decoration-color\"?: TextDecorationColorProperty;\n  /**\n   * The **`text-decoration-line`** CSS property sets the kind of decoration that is used on text in an element, such as an underline or overline.\n   *\n   * **Initial value**: `none`\n   */\n  \"-webkit-text-decoration-line\"?: TextDecorationLineProperty;\n  /**\n   * The **`text-decoration-skip`** CSS property sets what parts of an element’s content any text decoration affecting the element must skip over. It controls all text decoration lines drawn by the element and also any text decoration lines drawn by its ancestors.\n   *\n   * **Initial value**: `objects`\n   */\n  \"-webkit-text-decoration-skip\"?: TextDecorationSkipProperty;\n  /**\n   * The **`text-decoration-style`** CSS property sets the style of the lines specified by `text-decoration-line`. The style applies to all lines that are set with `text-decoration-line`.\n   *\n   * **Initial value**: `solid`\n   */\n  \"-webkit-text-decoration-style\"?: TextDecorationStyleProperty;\n  /**\n   * The **`text-emphasis-color`** CSS property sets the color of emphasis marks. This value can also be set using the `text-emphasis` shorthand.\n   *\n   * **Initial value**: `currentcolor`\n   */\n  \"-webkit-text-emphasis-color\"?: TextEmphasisColorProperty;\n  /**\n   * The **`text-emphasis-position`** CSS property sets where emphasis marks are drawn. Like ruby text, if there isn't enough room for emphasis marks, the line height is increased.\n   *\n   * **Initial value**: `over right`\n   */\n  \"-webkit-text-emphasis-position\"?: GlobalsString;\n  /**\n   * The **`text-emphasis-style`** CSS property sets the appearance of emphasis marks. It can also be set, and reset, using the `text-emphasis` shorthand.\n   *\n   * **Initial value**: `none`\n   */\n  \"-webkit-text-emphasis-style\"?: TextEmphasisStyleProperty;\n  /**\n   * The **`-webkit-text-fill-color`** CSS property specifies the fill color of characters of text. If this property is not set, the value of the `color` property is used.\n   *\n   * **Initial value**: `currentcolor`\n   */\n  \"-webkit-text-fill-color\"?: WebkitTextFillColorProperty;\n  /**\n   * The **`text-orientation`** CSS property sets the orientation of the text characters in a line. It only affects text in vertical mode (when `writing-mode` is not `horizontal-tb`). It is useful for controlling the display of languages that use vertical script, and also for making vertical table headers.\n   *\n   * **Initial value**: `mixed`\n   */\n  \"-webkit-text-orientation\"?: TextOrientationProperty;\n  /**\n   * The **`text-size-adjust`** CSS property controls the text inflation algorithm used on some smartphones and tablets. Other browsers will ignore this property.\n   *\n   * **Initial value**: `auto` for smartphone browsers supporting inflation, `none` in other cases (and then not modifiable).\n   */\n  \"-webkit-text-size-adjust\"?: TextSizeAdjustProperty;\n  /**\n   * The **`-webkit-text-stroke-color`** CSS property specifies the stroke color of characters of text. If this property is not set, the value of the `color` property is used.\n   *\n   * **Initial value**: `currentcolor`\n   */\n  \"-webkit-text-stroke-color\"?: WebkitTextStrokeColorProperty;\n  /**\n   * The **`-webkit-text-stroke-width`** CSS property specifies the width of the stroke for text.\n   *\n   * **Initial value**: `0`\n   */\n  \"-webkit-text-stroke-width\"?: WebkitTextStrokeWidthProperty<TLength>;\n  /**\n   * The `-webkit-touch-callout` CSS property controls the display of the default callout shown when you touch and hold a touch target.\n   *\n   * **Initial value**: `default`\n   */\n  \"-webkit-touch-callout\"?: WebkitTouchCalloutProperty;\n  /**\n   * The **`transform`** CSS property lets you rotate, scale, skew, or translate an element. It modifies the coordinate space of the CSS visual formatting model.\n   *\n   * **Initial value**: `none`\n   */\n  \"-webkit-transform\"?: TransformProperty;\n  /**\n   * The **`transform-origin`** CSS property sets the origin for an element's transformations.\n   *\n   * **Initial value**: `50% 50% 0`\n   */\n  \"-webkit-transform-origin\"?: TransformOriginProperty<TLength>;\n  /**\n   * The **`transform-style`** CSS property sets whether children of an element are positioned in the 3D space or are flattened in the plane of the element.\n   *\n   * **Initial value**: `flat`\n   */\n  \"-webkit-transform-style\"?: TransformStyleProperty;\n  /**\n   * The **`transition-delay`** CSS property specifies the duration to wait before starting a property's transition effect when its value changes.\n   *\n   * **Initial value**: `0s`\n   */\n  \"-webkit-transition-delay\"?: GlobalsString;\n  /**\n   * The **`transition-duration`** CSS property sets the length of time a transition animation should take to complete. By default, the value is `0s`, meaning that no animation will occur.\n   *\n   * **Initial value**: `0s`\n   */\n  \"-webkit-transition-duration\"?: GlobalsString;\n  /**\n   * The **`transition-property`** CSS property sets the CSS properties to which a transition effect should be applied.\n   *\n   * **Initial value**: all\n   */\n  \"-webkit-transition-property\"?: TransitionPropertyProperty;\n  /**\n   * The **`transition-timing-function`** CSS property sets how intermediate values are calculated for CSS properties being affected by a transition effect.\n   *\n   * **Initial value**: `ease`\n   */\n  \"-webkit-transition-timing-function\"?: TransitionTimingFunctionProperty;\n  /** **Initial value**: `read-only` */\n  \"-webkit-user-modify\"?: WebkitUserModifyProperty;\n  /**\n   * The `**user-select**` CSS property controls whether the user can select text. This doesn't have any effect on content loaded as chrome, except in textboxes.\n   *\n   * **Initial value**: `auto`\n   */\n  \"-webkit-user-select\"?: UserSelectProperty;\n  /**\n   * The **`writing-mode`** CSS property sets whether lines of text are laid out horizontally or vertically, as well as the direction in which blocks progress.\n   *\n   * **Initial value**: `horizontal-tb`\n   */\n  \"-webkit-writing-mode\"?: WritingModeProperty;\n}\n\nexport interface VendorShorthandPropertiesHyphen<TLength = string | 0> {\n  /** The **`animation`** shorthand CSS property sets an animated transition between styles. It is a shorthand for `animation-name`, `animation-duration`, `animation-timing-function`, `animation-delay`, `animation-iteration-count`, `animation-direction`, `animation-fill-mode`, and `animation-play-state`. */\n  \"-moz-animation\"?: AnimationProperty;\n  /** The **`border-image`** CSS property draws an image in place of an element's `border-style`. */\n  \"-moz-border-image\"?: BorderImageProperty;\n  /** The **`column-rule`** CSS property sets the width, style, and color of the rule (line) drawn between columns in a multi-column layout. */\n  \"-moz-column-rule\"?: ColumnRuleProperty<TLength>;\n  /** The **`columns`** CSS property sets the column width and column count of an element. */\n  \"-moz-columns\"?: ColumnsProperty<TLength>;\n  /** The **`transition`** CSS property is a shorthand property for `transition-property`, `transition-duration`, `transition-timing-function`, and `transition-delay`. */\n  \"-moz-transition\"?: TransitionProperty;\n  /** The **`-ms-content-zoom-limit`** CSS shorthand property is a Microsoft extension that specifies values for the `-ms-content-zoom-limit-min` and `-ms-content-zoom-limit-max` properties. */\n  \"-ms-content-zoom-limit\"?: GlobalsString;\n  /** The **`-ms-content-zoom-snap`** CSS shorthand property is a Microsoft extension that specifies values for the `-ms-content-zoom-snap-type` and `-ms-content-zoom-snap-points` properties. */\n  \"-ms-content-zoom-snap\"?: MsContentZoomSnapProperty;\n  /** The **`flex`** CSS property sets how a flex item will grow or shrink to fit the space available in its flex container. It is a shorthand for `flex-grow`, `flex-shrink`, and `flex-basis`. */\n  \"-ms-flex\"?: FlexProperty<TLength>;\n  /** The **\\-ms-scroll-limit** CSS property is a Microsoft extension that specifies values for the `-ms-scroll-limit-x-min`, `-ms-scroll-limit-y-min`, `-ms-scroll-limit-x-max`, and `-ms-scroll-limit-y-max` properties. */\n  \"-ms-scroll-limit\"?: GlobalsString;\n  /** The **`-ms-scroll-snap-x`** CSS shorthand property is a Microsoft extension that specifies values for the `-ms-scroll-snap-type` and `-ms-scroll-snap-points-x` properties. */\n  \"-ms-scroll-snap-x\"?: GlobalsString;\n  /** The **`-ms-scroll-snap-x`** CSS shorthand property is a Microsoft extension that specifies values for the `-ms-scroll-snap-type` and `-ms-scroll-snap-points-y` properties. */\n  \"-ms-scroll-snap-y\"?: GlobalsString;\n  /** The **`transition`** CSS property is a shorthand property for `transition-property`, `transition-duration`, `transition-timing-function`, and `transition-delay`. */\n  \"-ms-transition\"?: TransitionProperty;\n  /** The **`animation`** shorthand CSS property sets an animated transition between styles. It is a shorthand for `animation-name`, `animation-duration`, `animation-timing-function`, `animation-delay`, `animation-iteration-count`, `animation-direction`, `animation-fill-mode`, and `animation-play-state`. */\n  \"-webkit-animation\"?: AnimationProperty;\n  /** The **`-webkit-border-before`** CSS property is a shorthand property for setting the individual logical block start border property values in a single place in the style sheet. */\n  \"-webkit-border-before\"?: WebkitBorderBeforeProperty<TLength>;\n  /** The **`border-image`** CSS property draws an image in place of an element's `border-style`. */\n  \"-webkit-border-image\"?: BorderImageProperty;\n  /** The **`border-radius`** CSS property rounds the corners of an element's outer border edge. You can set a single radius to make circular corners, or two radii to make elliptical corners. */\n  \"-webkit-border-radius\"?: BorderRadiusProperty<TLength>;\n  /** The **`column-rule`** CSS property sets the width, style, and color of the rule (line) drawn between columns in a multi-column layout. */\n  \"-webkit-column-rule\"?: ColumnRuleProperty<TLength>;\n  /** The **`columns`** CSS property sets the column width and column count of an element. */\n  \"-webkit-columns\"?: ColumnsProperty<TLength>;\n  /** The **`flex`** CSS property sets how a flex item will grow or shrink to fit the space available in its flex container. It is a shorthand for `flex-grow`, `flex-shrink`, and `flex-basis`. */\n  \"-webkit-flex\"?: FlexProperty<TLength>;\n  /** The **`flex-flow`** CSS property is a shorthand property for `flex-direction` and `flex-wrap` properties. */\n  \"-webkit-flex-flow\"?: FlexFlowProperty;\n  /** The **`mask`** CSS property hides an element (partially or fully) by masking or clipping the image at specific points. */\n  \"-webkit-mask\"?: WebkitMaskProperty<TLength>;\n  /** The **`text-emphasis`** CSS property applies emphasis marks to text (except spaces and control characters). It is a shorthand for `text-emphasis-style` and `text-emphasis-color`. */\n  \"-webkit-text-emphasis\"?: TextEmphasisProperty;\n  /** The **`-webkit-text-stroke`** CSS property specifies the width and color of strokes for text characters. This is a shorthand property for the longhand properties `-webkit-text-stroke-width` and `-webkit-text-stroke-color`. */\n  \"-webkit-text-stroke\"?: WebkitTextStrokeProperty<TLength>;\n  /** The **`transition`** CSS property is a shorthand property for `transition-property`, `transition-duration`, `transition-timing-function`, and `transition-delay`. */\n  \"-webkit-transition\"?: TransitionProperty;\n}\n\nexport interface VendorPropertiesHyphen<TLength = string | 0> extends VendorLonghandPropertiesHyphen<TLength>, VendorShorthandPropertiesHyphen<TLength> {}\n\nexport interface ObsoletePropertiesHyphen<TLength = string | 0> {\n  /**\n   * The **`box-align`** CSS property specifies how an element aligns its contents across its layout in a perpendicular direction. The effect of the property is only visible if there is extra space in the box.\n   *\n   * **Initial value**: `stretch`\n   *\n   * @deprecated\n   */\n  \"box-align\"?: BoxAlignProperty;\n  /**\n   * The **`box-direction`** CSS property specifies whether a box lays out its contents normally (from the top or left edge), or in reverse (from the bottom or right edge).\n   *\n   * **Initial value**: `normal`\n   *\n   * @deprecated\n   */\n  \"box-direction\"?: BoxDirectionProperty;\n  /**\n   * The **`-moz-box-flex`** and **`-webkit-box-flex`** CSS properties specify how a `-moz-box` or `-webkit-box` grows to fill the box that contains it, in the direction of the containing box's layout.\n   *\n   * **Initial value**: `0`\n   *\n   * @deprecated\n   */\n  \"box-flex\"?: GlobalsNumber;\n  /**\n   * The **`box-flex-group`** CSS property assigns the flexbox's child elements to a flex group.\n   *\n   * **Initial value**: `1`\n   *\n   * @deprecated\n   */\n  \"box-flex-group\"?: GlobalsNumber;\n  /**\n   * The **`box-lines`** CSS property determines whether the box may have a single or multiple lines (rows for horizontally oriented boxes, columns for vertically oriented boxes).\n   *\n   * **Initial value**: `single`\n   *\n   * @deprecated\n   */\n  \"box-lines\"?: BoxLinesProperty;\n  /**\n   * The **`box-ordinal-group`** CSS property assigns the flexbox's child elements to an ordinal group.\n   *\n   * **Initial value**: `1`\n   *\n   * @deprecated\n   */\n  \"box-ordinal-group\"?: GlobalsNumber;\n  /**\n   * The **`box-orient`** CSS property specifies whether an element lays out its contents horizontally or vertically.\n   *\n   * **Initial value**: `inline-axis` (`horizontal` in XUL)\n   *\n   * @deprecated\n   */\n  \"box-orient\"?: BoxOrientProperty;\n  /**\n   * The **`-moz-box-pack`** and **`-webkit-box-pack`** CSS properties specify how a `-moz-box` or `-webkit-box` packs its contents in the direction of its layout. The effect of this is only visible if there is extra space in the box.\n   *\n   * **Initial value**: `start`\n   *\n   * @deprecated\n   */\n  \"box-pack\"?: BoxPackProperty;\n  /**\n   * The **`clip`** CSS property defines what portion of an element is visible. The `clip` property applies only to absolutely positioned elements, that is elements with `position:absolute` or `position:fixed`.\n   *\n   * **Initial value**: `auto`\n   *\n   * @deprecated\n   */\n  clip?: ClipProperty;\n  /**\n   * The **`font-variant-alternates`** CSS property controls the usage of alternate glyphs. These alternate glyphs may be referenced by alternative names defined in `@font-feature-values`.\n   *\n   * **Initial value**: `normal`\n   *\n   * @deprecated\n   */\n  \"font-variant-alternates\"?: FontVariantAlternatesProperty;\n  /**\n   * The **`column-gap`** CSS property sets the size of the gap (gutter) between an element's columns.\n   *\n   * **Initial value**: `0`\n   *\n   * @deprecated\n   */\n  \"grid-column-gap\"?: GridColumnGapProperty<TLength>;\n  /**\n   * The **`gap`** CSS property sets the gaps (gutters) between rows and columns. It is a shorthand for `row-gap` and `column-gap`.\n   *\n   * @deprecated\n   */\n  \"grid-gap\"?: GridGapProperty<TLength>;\n  /**\n   * The **`row-gap`** CSS property sets the size of the gap (gutter) between an element's grid rows.\n   *\n   * **Initial value**: `0`\n   *\n   * @deprecated\n   */\n  \"grid-row-gap\"?: GridRowGapProperty<TLength>;\n  /**\n   * The **`ime-mode`** CSS property controls the state of the input method editor (IME) for text fields. This property is obsolete.\n   *\n   * **Initial value**: `auto`\n   *\n   * @deprecated\n   */\n  \"ime-mode\"?: ImeModeProperty;\n  /**\n   * The **`inset-block`** CSS property defines the logical block start and end offsets of an element, which maps to physical offsets depending on the element's writing mode, directionality, and text orientation. It corresponds to the `top` and `bottom`, or `right` and `left` properties depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `auto`\n   *\n   * @deprecated\n   */\n  \"offset-block\"?: InsetBlockProperty<TLength>;\n  /**\n   * The **`inset-block-end`** CSS property defines the logical block end offset of an element, which maps to a physical inset depending on the element's writing mode, directionality, and text orientation. It corresponds to the `top`, `right`, `bottom`, or `left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `auto`\n   *\n   * @deprecated\n   */\n  \"offset-block-end\"?: InsetBlockEndProperty<TLength>;\n  /**\n   * The **`inset-block-start`** CSS property defines the logical block start offset of an element, which maps to a physical inset depending on the element's writing mode, directionality, and text orientation. It corresponds to the `top`, `right`, `bottom`, or `left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `auto`\n   *\n   * @deprecated\n   */\n  \"offset-block-start\"?: InsetBlockStartProperty<TLength>;\n  /**\n   * The **`inset-inline`** CSS property defines the logical block start and end offsets of an element, which maps to physical offsets depending on the element's writing mode, directionality, and text orientation. It corresponds to the `top` and `bottom`, or `right` and `left` properties depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `auto`\n   *\n   * @deprecated\n   */\n  \"offset-inline\"?: InsetInlineProperty<TLength>;\n  /**\n   * The **`inset-inline-end`** CSS property defines the logical inline end inset of an element, which maps to a physical inset depending on the element's writing mode, directionality, and text orientation. It corresponds to the `top`, `right`, `bottom`, or `left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `auto`\n   *\n   * @deprecated\n   */\n  \"offset-inline-end\"?: InsetInlineEndProperty<TLength>;\n  /**\n   * The **`inset-inline-start`** CSS property defines the logical inline start inset of an element, which maps to a physical offset depending on the element's writing mode, directionality, and text orientation. It corresponds to the `top`, `right`, `bottom`, or `left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `auto`\n   *\n   * @deprecated\n   */\n  \"offset-inline-start\"?: InsetInlineStartProperty<TLength>;\n  /**\n   * The **`scroll-snap-coordinate`** CSS property defines the x and y coordinate positions within an element that will align with its nearest ancestor scroll container's `scroll-snap-destination` for each respective axis.\n   *\n   * **Initial value**: `none`\n   *\n   * @deprecated\n   */\n  \"scroll-snap-coordinate\"?: ScrollSnapCoordinateProperty<TLength>;\n  /**\n   * The **`scroll-snap-destination`** CSS property defines the position in x and y coordinates within the scroll container's visual viewport which element snap points align with.\n   *\n   * **Initial value**: `0px 0px`\n   *\n   * @deprecated\n   */\n  \"scroll-snap-destination\"?: ScrollSnapDestinationProperty<TLength>;\n  /**\n   * The **`scroll-snap-points-x`** CSS property defines the horizontal positioning of snap points within the content of the scroll container they are applied to.\n   *\n   * **Initial value**: `none`\n   *\n   * @deprecated\n   */\n  \"scroll-snap-points-x\"?: ScrollSnapPointsXProperty;\n  /**\n   * The **`scroll-snap-points-y`** CSS property defines the vertical positioning of snap points within the content of the scroll container they are applied to.\n   *\n   * **Initial value**: `none`\n   *\n   * @deprecated\n   */\n  \"scroll-snap-points-y\"?: ScrollSnapPointsYProperty;\n  /**\n   * The **`scroll-snap-type-x`** CSS property defines how strictly snap points are enforced on the horizontal axis of the scroll container in case there is one.\n   *\n   * **Initial value**: `none`\n   *\n   * @deprecated\n   */\n  \"scroll-snap-type-x\"?: ScrollSnapTypeXProperty;\n  /**\n   * The **`scroll-snap-type-y`** CSS property defines how strictly snap points are enforced on the vertical axis of the scroll container in case there is one.\n   *\n   * **Initial value**: `none`\n   *\n   * @deprecated\n   */\n  \"scroll-snap-type-y\"?: ScrollSnapTypeYProperty;\n  /**\n   * The **`-ms-scrollbar-track-color`** CSS property is a Microsoft extension that specifies the color of the track element of a scrollbar.\n   *\n   * **Initial value**: `Scrollbar`\n   *\n   * @deprecated\n   */\n  \"scrollbar-track-color\"?: MsScrollbarTrackColorProperty;\n  /**\n   * The **`text-combine-upright`** CSS property sets the combination of characters into the space of a single character. If the combined text is wider than 1em, the user agent must fit the contents within 1em. The resulting composition is treated as a single upright glyph for layout and decoration. This property only has an effect in vertical writing modes.\n   *\n   * **Initial value**: `none`\n   *\n   * @deprecated\n   */\n  \"text-combine-horizontal\"?: TextCombineUprightProperty;\n  /**\n   * The **`box-align`** CSS property specifies how an element aligns its contents across its layout in a perpendicular direction. The effect of the property is only visible if there is extra space in the box.\n   *\n   * **Initial value**: `stretch`\n   *\n   * @deprecated\n   */\n  \"-khtml-box-align\"?: BoxAlignProperty;\n  /**\n   * The **`box-direction`** CSS property specifies whether a box lays out its contents normally (from the top or left edge), or in reverse (from the bottom or right edge).\n   *\n   * **Initial value**: `normal`\n   *\n   * @deprecated\n   */\n  \"-khtml-box-direction\"?: BoxDirectionProperty;\n  /**\n   * The **`-moz-box-flex`** and **`-webkit-box-flex`** CSS properties specify how a `-moz-box` or `-webkit-box` grows to fill the box that contains it, in the direction of the containing box's layout.\n   *\n   * **Initial value**: `0`\n   *\n   * @deprecated\n   */\n  \"-khtml-box-flex\"?: GlobalsNumber;\n  /**\n   * The **`box-flex-group`** CSS property assigns the flexbox's child elements to a flex group.\n   *\n   * **Initial value**: `1`\n   *\n   * @deprecated\n   */\n  \"-khtml-box-flex-group\"?: GlobalsNumber;\n  /**\n   * The **`box-lines`** CSS property determines whether the box may have a single or multiple lines (rows for horizontally oriented boxes, columns for vertically oriented boxes).\n   *\n   * **Initial value**: `single`\n   *\n   * @deprecated\n   */\n  \"-khtml-box-lines\"?: BoxLinesProperty;\n  /**\n   * The **`box-ordinal-group`** CSS property assigns the flexbox's child elements to an ordinal group.\n   *\n   * **Initial value**: `1`\n   *\n   * @deprecated\n   */\n  \"-khtml-box-ordinal-group\"?: GlobalsNumber;\n  /**\n   * The **`box-orient`** CSS property specifies whether an element lays out its contents horizontally or vertically.\n   *\n   * **Initial value**: `inline-axis` (`horizontal` in XUL)\n   *\n   * @deprecated\n   */\n  \"-khtml-box-orient\"?: BoxOrientProperty;\n  /**\n   * The **`-moz-box-pack`** and **`-webkit-box-pack`** CSS properties specify how a `-moz-box` or `-webkit-box` packs its contents in the direction of its layout. The effect of this is only visible if there is extra space in the box.\n   *\n   * **Initial value**: `start`\n   *\n   * @deprecated\n   */\n  \"-khtml-box-pack\"?: BoxPackProperty;\n  /**\n   * The **`line-break`** CSS property sets how to break lines of Chinese, Japanese, or Korean (CJK) text when working with punctuation and symbols.\n   *\n   * **Initial value**: `auto`\n   *\n   * @deprecated\n   */\n  \"-khtml-line-break\"?: LineBreakProperty;\n  /**\n   * The **`opacity`** CSS property sets the transparency of an element or the degree to which content behind an element is visible.\n   *\n   * **Initial value**: `1.0`\n   *\n   * @deprecated\n   */\n  \"-khtml-opacity\"?: OpacityProperty;\n  /**\n   * The `**user-select**` CSS property controls whether the user can select text. This doesn't have any effect on content loaded as chrome, except in textboxes.\n   *\n   * **Initial value**: `auto`\n   *\n   * @deprecated\n   */\n  \"-khtml-user-select\"?: UserSelectProperty;\n  /**\n   * The **`background-clip`** CSS property sets whether an element's background `<color>` or `<image>` extends underneath its border.\n   *\n   * **Initial value**: `border-box`\n   *\n   * @deprecated\n   */\n  \"-moz-background-clip\"?: BackgroundClipProperty;\n  /**\n   * The **`box-decoration-break`** CSS property specifies how an element's fragments should be rendered when broken across multiple lines, columns, or pages.\n   *\n   * **Initial value**: `slice`\n   *\n   * @deprecated\n   */\n  \"-moz-background-inline-policy\"?: BoxDecorationBreakProperty;\n  /**\n   * The **`background-origin`** CSS property sets the _background positioning area_. In other words, it sets the origin position of an image set with the `background-image` property.\n   *\n   * **Initial value**: `padding-box`\n   *\n   * @deprecated\n   */\n  \"-moz-background-origin\"?: BackgroundOriginProperty;\n  /**\n   * The **`background-size`** CSS property sets the size of the element's background image. The image can be left to its natural size, stretched, or constrained to fit the available space.\n   *\n   * **Initial value**: `auto auto`\n   *\n   * @deprecated\n   */\n  \"-moz-background-size\"?: BackgroundSizeProperty<TLength>;\n  /**\n   * The **`-moz-binding`** CSS property is used by Mozilla-based applications to attach an XBL binding to a DOM element.\n   *\n   * **Initial value**: `none`\n   *\n   * @deprecated\n   */\n  \"-moz-binding\"?: MozBindingProperty;\n  /**\n   * In Mozilla applications like Firefox, the **`-moz-border-bottom-colors`** CSS property sets a list of colors for the bottom border.\n   *\n   * **Initial value**: `none`\n   *\n   * @deprecated\n   */\n  \"-moz-border-bottom-colors\"?: MozBorderBottomColorsProperty;\n  /**\n   * In Mozilla applications like Firefox, the **`-moz-border-left-colors`** CSS property sets a list of colors for the left border.\n   *\n   * **Initial value**: `none`\n   *\n   * @deprecated\n   */\n  \"-moz-border-left-colors\"?: MozBorderLeftColorsProperty;\n  /**\n   * The **`border-radius`** CSS property rounds the corners of an element's outer border edge. You can set a single radius to make circular corners, or two radii to make elliptical corners.\n   *\n   * @deprecated\n   */\n  \"-moz-border-radius\"?: BorderRadiusProperty<TLength>;\n  /**\n   * The **`border-bottom-left-radius`** CSS property rounds the bottom-left corner of an element.\n   *\n   * **Initial value**: `0`\n   *\n   * @deprecated\n   */\n  \"-moz-border-radius-bottomleft\"?: BorderBottomLeftRadiusProperty<TLength>;\n  /**\n   * The **`border-bottom-right-radius`** CSS property rounds the bottom-right corner of an element.\n   *\n   * **Initial value**: `0`\n   *\n   * @deprecated\n   */\n  \"-moz-border-radius-bottomright\"?: BorderBottomRightRadiusProperty<TLength>;\n  /**\n   * The **`border-top-left-radius`** CSS property rounds the top-left corner of an element.\n   *\n   * **Initial value**: `0`\n   *\n   * @deprecated\n   */\n  \"-moz-border-radius-topleft\"?: BorderTopLeftRadiusProperty<TLength>;\n  /**\n   * The **`border-top-right-radius`** CSS property rounds the top-right corner of an element.\n   *\n   * **Initial value**: `0`\n   *\n   * @deprecated\n   */\n  \"-moz-border-radius-topright\"?: BorderTopRightRadiusProperty<TLength>;\n  /**\n   * In Mozilla applications like Firefox, the **`-moz-border-right-colors`** CSS property sets a list of colors for the right border.\n   *\n   * **Initial value**: `none`\n   *\n   * @deprecated\n   */\n  \"-moz-border-right-colors\"?: MozBorderRightColorsProperty;\n  /**\n   * In Mozilla applications like Firefox, the **`-moz-border-top-colors`** CSS property sets a list of colors for the top border.\n   *\n   * **Initial value**: `none`\n   *\n   * @deprecated\n   */\n  \"-moz-border-top-colors\"?: MozBorderTopColorsProperty;\n  /**\n   * The **`box-align`** CSS property specifies how an element aligns its contents across its layout in a perpendicular direction. The effect of the property is only visible if there is extra space in the box.\n   *\n   * **Initial value**: `stretch`\n   *\n   * @deprecated\n   */\n  \"-moz-box-align\"?: BoxAlignProperty;\n  /**\n   * The **`box-direction`** CSS property specifies whether a box lays out its contents normally (from the top or left edge), or in reverse (from the bottom or right edge).\n   *\n   * **Initial value**: `normal`\n   *\n   * @deprecated\n   */\n  \"-moz-box-direction\"?: BoxDirectionProperty;\n  /**\n   * The **`-moz-box-flex`** and **`-webkit-box-flex`** CSS properties specify how a `-moz-box` or `-webkit-box` grows to fill the box that contains it, in the direction of the containing box's layout.\n   *\n   * **Initial value**: `0`\n   *\n   * @deprecated\n   */\n  \"-moz-box-flex\"?: GlobalsNumber;\n  /**\n   * The **`box-ordinal-group`** CSS property assigns the flexbox's child elements to an ordinal group.\n   *\n   * **Initial value**: `1`\n   *\n   * @deprecated\n   */\n  \"-moz-box-ordinal-group\"?: GlobalsNumber;\n  /**\n   * The **`box-orient`** CSS property specifies whether an element lays out its contents horizontally or vertically.\n   *\n   * **Initial value**: `inline-axis` (`horizontal` in XUL)\n   *\n   * @deprecated\n   */\n  \"-moz-box-orient\"?: BoxOrientProperty;\n  /**\n   * The **`-moz-box-pack`** and **`-webkit-box-pack`** CSS properties specify how a `-moz-box` or `-webkit-box` packs its contents in the direction of its layout. The effect of this is only visible if there is extra space in the box.\n   *\n   * **Initial value**: `start`\n   *\n   * @deprecated\n   */\n  \"-moz-box-pack\"?: BoxPackProperty;\n  /**\n   * The **`box-shadow`** CSS property adds shadow effects around an element's frame. You can set multiple effects separated by commas. A box shadow is described by X and Y offsets relative to the element, blur and spread radii, and color.\n   *\n   * **Initial value**: `none`\n   *\n   * @deprecated\n   */\n  \"-moz-box-shadow\"?: BoxShadowProperty;\n  /**\n   * The **`opacity`** CSS property sets the transparency of an element or the degree to which content behind an element is visible.\n   *\n   * **Initial value**: `1.0`\n   *\n   * @deprecated\n   */\n  \"-moz-opacity\"?: OpacityProperty;\n  /**\n   * The **`outline`** CSS property is a shorthand to set various outline properties in a single declaration: `outline-style`, `outline-width`, and `outline-color`.\n   *\n   * @deprecated\n   */\n  \"-moz-outline\"?: OutlineProperty<TLength>;\n  /**\n   * The **`outline-color`** CSS property sets the color of an element's outline.\n   *\n   * **Initial value**: `invert`, for browsers supporting it, `currentColor` for the other\n   *\n   * @deprecated\n   */\n  \"-moz-outline-color\"?: OutlineColorProperty;\n  /**\n   * In Mozilla applications like Firefox, the **`-moz-outline-radius`** CSS property can be used to give an element's `outline` rounded corners.\n   *\n   * @deprecated\n   */\n  \"-moz-outline-radius\"?: MozOutlineRadiusProperty<TLength>;\n  /**\n   * The **`outline-style`** CSS property sets the style of an element's outline. An outline is a line that is drawn around an element, outside the `border`.\n   *\n   * **Initial value**: `none`\n   *\n   * @deprecated\n   */\n  \"-moz-outline-style\"?: OutlineStyleProperty;\n  /**\n   * The **`outline-width`** CSS property sets the thickness of an element's outline. An outline is a line that is drawn around an element, outside the `border`.\n   *\n   * **Initial value**: `medium`\n   *\n   * @deprecated\n   */\n  \"-moz-outline-width\"?: OutlineWidthProperty<TLength>;\n  /**\n   * The **`text-align-last`** CSS property sets how the last line of a block or a line, right before a forced line break, is aligned.\n   *\n   * **Initial value**: `auto`\n   *\n   * @deprecated\n   */\n  \"-moz-text-align-last\"?: TextAlignLastProperty;\n  /**\n   * The **`-moz-text-blink`** non-standard Mozilla CSS extension specifies the blink mode.\n   *\n   * **Initial value**: `none`\n   *\n   * @deprecated\n   */\n  \"-moz-text-blink\"?: MozTextBlinkProperty;\n  /**\n   * The **`text-decoration-color`** CSS property sets the color of decorations added to text by `text-decoration-line`.\n   *\n   * **Initial value**: `currentcolor`\n   *\n   * @deprecated\n   */\n  \"-moz-text-decoration-color\"?: TextDecorationColorProperty;\n  /**\n   * The **`text-decoration-line`** CSS property sets the kind of decoration that is used on text in an element, such as an underline or overline.\n   *\n   * **Initial value**: `none`\n   *\n   * @deprecated\n   */\n  \"-moz-text-decoration-line\"?: TextDecorationLineProperty;\n  /**\n   * The **`text-decoration-style`** CSS property sets the style of the lines specified by `text-decoration-line`. The style applies to all lines that are set with `text-decoration-line`.\n   *\n   * **Initial value**: `solid`\n   *\n   * @deprecated\n   */\n  \"-moz-text-decoration-style\"?: TextDecorationStyleProperty;\n  /**\n   * In Mozilla applications, **`-moz-user-input`** determines if an element will accept user input.\n   *\n   * **Initial value**: `auto`\n   *\n   * @deprecated\n   */\n  \"-moz-user-input\"?: MozUserInputProperty;\n  /**\n   * The **`-moz-window-shadow`** CSS property specifies whether a window will have a shadow. It only works on Mac OS X.\n   *\n   * **Initial value**: `default`\n   *\n   * @deprecated\n   */\n  \"-moz-window-shadow\"?: MozWindowShadowProperty;\n  /**\n   * The **`ime-mode`** CSS property controls the state of the input method editor (IME) for text fields. This property is obsolete.\n   *\n   * **Initial value**: `auto`\n   *\n   * @deprecated\n   */\n  \"-ms-ime-mode\"?: ImeModeProperty;\n  /**\n   * The **`-ms-scrollbar-track-color`** CSS property is a Microsoft extension that specifies the color of the track element of a scrollbar.\n   *\n   * **Initial value**: `Scrollbar`\n   *\n   * @deprecated\n   */\n  \"-ms-scrollbar-track-color\"?: MsScrollbarTrackColorProperty;\n  /**\n   * The **`animation`** shorthand CSS property sets an animated transition between styles. It is a shorthand for `animation-name`, `animation-duration`, `animation-timing-function`, `animation-delay`, `animation-iteration-count`, `animation-direction`, `animation-fill-mode`, and `animation-play-state`.\n   *\n   * @deprecated\n   */\n  \"-o-animation\"?: AnimationProperty;\n  /**\n   * The **`animation-delay`** CSS property sets when an animation starts. The animation can start later, immediately from its beginning, or immediately and partway through the animation.\n   *\n   * **Initial value**: `0s`\n   *\n   * @deprecated\n   */\n  \"-o-animation-delay\"?: GlobalsString;\n  /**\n   * The **`animation-direction`** CSS property sets whether an animation should play forwards, backwards, or alternating back and forth.\n   *\n   * **Initial value**: `normal`\n   *\n   * @deprecated\n   */\n  \"-o-animation-direction\"?: AnimationDirectionProperty;\n  /**\n   * The **`animation-duration`** CSS property sets the length of time that an animation takes to complete one cycle.\n   *\n   * **Initial value**: `0s`\n   *\n   * @deprecated\n   */\n  \"-o-animation-duration\"?: GlobalsString;\n  /**\n   * The **`animation-fill-mode`** CSS property sets how a CSS animation applies styles to its target before and after its execution.\n   *\n   * **Initial value**: `none`\n   *\n   * @deprecated\n   */\n  \"-o-animation-fill-mode\"?: AnimationFillModeProperty;\n  /**\n   * The **`animation-iteration-count`** CSS property sets the number of times an animation cycle should be played before stopping.\n   *\n   * **Initial value**: `1`\n   *\n   * @deprecated\n   */\n  \"-o-animation-iteration-count\"?: AnimationIterationCountProperty;\n  /**\n   * The **`animation-name`** CSS property sets one or more animations to apply to an element. Each name is an `@keyframes` at-rule that sets the property values for the animation sequence.\n   *\n   * **Initial value**: `none`\n   *\n   * @deprecated\n   */\n  \"-o-animation-name\"?: AnimationNameProperty;\n  /**\n   * The **`animation-play-state`** CSS property sets whether an animation is running or paused.\n   *\n   * **Initial value**: `running`\n   *\n   * @deprecated\n   */\n  \"-o-animation-play-state\"?: AnimationPlayStateProperty;\n  /**\n   * The `**animation-timing-function**` CSS property sets how an animation progresses through the duration of each cycle.\n   *\n   * **Initial value**: `ease`\n   *\n   * @deprecated\n   */\n  \"-o-animation-timing-function\"?: AnimationTimingFunctionProperty;\n  /**\n   * The **`background-size`** CSS property sets the size of the element's background image. The image can be left to its natural size, stretched, or constrained to fit the available space.\n   *\n   * **Initial value**: `auto auto`\n   *\n   * @deprecated\n   */\n  \"-o-background-size\"?: BackgroundSizeProperty<TLength>;\n  /**\n   * The **`border-image`** CSS property draws an image in place of an element's `border-style`.\n   *\n   * @deprecated\n   */\n  \"-o-border-image\"?: BorderImageProperty;\n  /**\n   * The **`transform`** CSS property lets you rotate, scale, skew, or translate an element. It modifies the coordinate space of the CSS visual formatting model.\n   *\n   * **Initial value**: `none`\n   *\n   * @deprecated\n   */\n  \"-o-transform\"?: TransformProperty;\n  /**\n   * The **`transition`** CSS property is a shorthand property for `transition-property`, `transition-duration`, `transition-timing-function`, and `transition-delay`.\n   *\n   * @deprecated\n   */\n  \"-o-transition\"?: TransitionProperty;\n  /**\n   * The **`transition-delay`** CSS property specifies the duration to wait before starting a property's transition effect when its value changes.\n   *\n   * **Initial value**: `0s`\n   *\n   * @deprecated\n   */\n  \"-o-transition-delay\"?: GlobalsString;\n  /**\n   * The **`transition-duration`** CSS property sets the length of time a transition animation should take to complete. By default, the value is `0s`, meaning that no animation will occur.\n   *\n   * **Initial value**: `0s`\n   *\n   * @deprecated\n   */\n  \"-o-transition-duration\"?: GlobalsString;\n  /**\n   * The **`transition-property`** CSS property sets the CSS properties to which a transition effect should be applied.\n   *\n   * **Initial value**: all\n   *\n   * @deprecated\n   */\n  \"-o-transition-property\"?: TransitionPropertyProperty;\n  /**\n   * The **`transition-timing-function`** CSS property sets how intermediate values are calculated for CSS properties being affected by a transition effect.\n   *\n   * **Initial value**: `ease`\n   *\n   * @deprecated\n   */\n  \"-o-transition-timing-function\"?: TransitionTimingFunctionProperty;\n  /**\n   * The **`box-align`** CSS property specifies how an element aligns its contents across its layout in a perpendicular direction. The effect of the property is only visible if there is extra space in the box.\n   *\n   * **Initial value**: `stretch`\n   *\n   * @deprecated\n   */\n  \"-webkit-box-align\"?: BoxAlignProperty;\n  /**\n   * The **`box-direction`** CSS property specifies whether a box lays out its contents normally (from the top or left edge), or in reverse (from the bottom or right edge).\n   *\n   * **Initial value**: `normal`\n   *\n   * @deprecated\n   */\n  \"-webkit-box-direction\"?: BoxDirectionProperty;\n  /**\n   * The **`-moz-box-flex`** and **`-webkit-box-flex`** CSS properties specify how a `-moz-box` or `-webkit-box` grows to fill the box that contains it, in the direction of the containing box's layout.\n   *\n   * **Initial value**: `0`\n   *\n   * @deprecated\n   */\n  \"-webkit-box-flex\"?: GlobalsNumber;\n  /**\n   * The **`box-flex-group`** CSS property assigns the flexbox's child elements to a flex group.\n   *\n   * **Initial value**: `1`\n   *\n   * @deprecated\n   */\n  \"-webkit-box-flex-group\"?: GlobalsNumber;\n  /**\n   * The **`box-lines`** CSS property determines whether the box may have a single or multiple lines (rows for horizontally oriented boxes, columns for vertically oriented boxes).\n   *\n   * **Initial value**: `single`\n   *\n   * @deprecated\n   */\n  \"-webkit-box-lines\"?: BoxLinesProperty;\n  /**\n   * The **`box-ordinal-group`** CSS property assigns the flexbox's child elements to an ordinal group.\n   *\n   * **Initial value**: `1`\n   *\n   * @deprecated\n   */\n  \"-webkit-box-ordinal-group\"?: GlobalsNumber;\n  /**\n   * The **`box-orient`** CSS property specifies whether an element lays out its contents horizontally or vertically.\n   *\n   * **Initial value**: `inline-axis` (`horizontal` in XUL)\n   *\n   * @deprecated\n   */\n  \"-webkit-box-orient\"?: BoxOrientProperty;\n  /**\n   * The **`-moz-box-pack`** and **`-webkit-box-pack`** CSS properties specify how a `-moz-box` or `-webkit-box` packs its contents in the direction of its layout. The effect of this is only visible if there is extra space in the box.\n   *\n   * **Initial value**: `start`\n   *\n   * @deprecated\n   */\n  \"-webkit-box-pack\"?: BoxPackProperty;\n  /**\n   * The **`scroll-snap-points-x`** CSS property defines the horizontal positioning of snap points within the content of the scroll container they are applied to.\n   *\n   * **Initial value**: `none`\n   *\n   * @deprecated\n   */\n  \"-webkit-scroll-snap-points-x\"?: ScrollSnapPointsXProperty;\n  /**\n   * The **`scroll-snap-points-y`** CSS property defines the vertical positioning of snap points within the content of the scroll container they are applied to.\n   *\n   * **Initial value**: `none`\n   *\n   * @deprecated\n   */\n  \"-webkit-scroll-snap-points-y\"?: ScrollSnapPointsYProperty;\n}\n\nexport interface SvgPropertiesHyphen<TLength = string | 0> {\n  \"alignment-baseline\"?: AlignmentBaselineProperty;\n  \"baseline-shift\"?: BaselineShiftProperty<TLength>;\n  clip?: ClipProperty;\n  \"clip-path\"?: ClipPathProperty;\n  \"clip-rule\"?: ClipRuleProperty;\n  color?: ColorProperty;\n  \"color-interpolation\"?: ColorInterpolationProperty;\n  \"color-rendering\"?: ColorRenderingProperty;\n  cursor?: CursorProperty;\n  direction?: DirectionProperty;\n  display?: DisplayProperty;\n  \"dominant-baseline\"?: DominantBaselineProperty;\n  fill?: FillProperty;\n  \"fill-opacity\"?: GlobalsNumber;\n  \"fill-rule\"?: FillRuleProperty;\n  filter?: FilterProperty;\n  \"flood-color\"?: FloodColorProperty;\n  \"flood-opacity\"?: GlobalsNumber;\n  font?: FontProperty;\n  \"font-family\"?: FontFamilyProperty;\n  \"font-size\"?: FontSizeProperty<TLength>;\n  \"font-size-adjust\"?: FontSizeAdjustProperty;\n  \"font-stretch\"?: FontStretchProperty;\n  \"font-style\"?: FontStyleProperty;\n  \"font-variant\"?: FontVariantProperty;\n  \"font-weight\"?: FontWeightProperty;\n  \"glyph-orientation-vertical\"?: GlyphOrientationVerticalProperty;\n  \"image-rendering\"?: ImageRenderingProperty;\n  \"letter-spacing\"?: LetterSpacingProperty<TLength>;\n  \"lighting-color\"?: LightingColorProperty;\n  \"line-height\"?: LineHeightProperty<TLength>;\n  marker?: MarkerProperty;\n  \"marker-end\"?: MarkerEndProperty;\n  \"marker-mid\"?: MarkerMidProperty;\n  \"marker-start\"?: MarkerStartProperty;\n  mask?: MaskProperty<TLength>;\n  opacity?: OpacityProperty;\n  overflow?: OverflowProperty;\n  \"paint-order\"?: PaintOrderProperty;\n  \"pointer-events\"?: PointerEventsProperty;\n  \"shape-rendering\"?: ShapeRenderingProperty;\n  \"stop-color\"?: StopColorProperty;\n  \"stop-opacity\"?: GlobalsNumber;\n  stroke?: StrokeProperty;\n  \"stroke-dasharray\"?: StrokeDasharrayProperty<TLength>;\n  \"stroke-dashoffset\"?: StrokeDashoffsetProperty<TLength>;\n  \"stroke-linecap\"?: StrokeLinecapProperty;\n  \"stroke-linejoin\"?: StrokeLinejoinProperty;\n  \"stroke-miterlimit\"?: GlobalsNumber;\n  \"stroke-opacity\"?: GlobalsNumber;\n  \"stroke-width\"?: StrokeWidthProperty<TLength>;\n  \"text-anchor\"?: TextAnchorProperty;\n  \"text-decoration\"?: TextDecorationProperty<TLength>;\n  \"text-rendering\"?: TextRenderingProperty;\n  \"unicode-bidi\"?: UnicodeBidiProperty;\n  \"vector-effect\"?: VectorEffectProperty;\n  visibility?: VisibilityProperty;\n  \"white-space\"?: WhiteSpaceProperty;\n  \"word-spacing\"?: WordSpacingProperty<TLength>;\n  \"writing-mode\"?: WritingModeProperty;\n}\n\nexport interface PropertiesHyphen<TLength = string | 0>\n  extends StandardPropertiesHyphen<TLength>,\n    VendorPropertiesHyphen<TLength>,\n    ObsoletePropertiesHyphen<TLength>,\n    SvgPropertiesHyphen<TLength> {}\n\nexport interface StandardLonghandPropertiesFallback<TLength = string | 0> {\n  /**\n   * The CSS **`align-content`** property sets how the browser distributes space between and around content items along the cross-axis of a flexbox container, and the main-axis of a grid container.\n   *\n   * **Initial value**: `normal`\n   *\n   * ---\n   *\n   * _Supported in Flex Layout_\n   *\n   * |  Chrome  | Firefox |  Safari   |  Edge  |   IE   |\n   * | :------: | :-----: | :-------: | :----: | :----: |\n   * |  **29**  | **28**  |   **9**   | **12** | **11** |\n   * | 21 _-x-_ |         | 6.1 _-x-_ |        |        |\n   *\n   * ---\n   *\n   * _Supported in Grid Layout_\n   *\n   * | Chrome | Firefox |  Safari  |  Edge  | IE  |\n   * | :----: | :-----: | :------: | :----: | :-: |\n   * | **57** | **52**  | **10.1** | **16** | No  |\n   *\n   * ---\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/align-content\n   */\n  alignContent?: AlignContentProperty | AlignContentProperty[];\n  /**\n   * The CSS **`align-items`** property sets the `align-self` value on all direct children as a group. The align-self property sets the alignment of an item within its containing block. In Flexbox it controls the alignment of items on the Cross Axis, in Grid Layout it controls the alignment of items on the Block Axis within their grid area.\n   *\n   * **Initial value**: `normal`\n   *\n   * ---\n   *\n   * _Supported in Flex Layout_\n   *\n   * |  Chrome  | Firefox | Safari  |  Edge  |   IE   |\n   * | :------: | :-----: | :-----: | :----: | :----: |\n   * |  **52**  | **20**  |  **9**  | **12** | **11** |\n   * | 21 _-x-_ |         | 7 _-x-_ |        |        |\n   *\n   * ---\n   *\n   * _Supported in Grid Layout_\n   *\n   * | Chrome | Firefox |  Safari  |  Edge  | IE  |\n   * | :----: | :-----: | :------: | :----: | :-: |\n   * | **57** | **52**  | **10.1** | **16** | No  |\n   *\n   * ---\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/align-items\n   */\n  alignItems?: AlignItemsProperty | AlignItemsProperty[];\n  /**\n   * The **`align-self`** CSS property aligns flex items of the current flex line overriding the `align-items` value. If any of the item's cross-axis margin is set to `auto`, then `align-self` is ignored. In Grid layout `align-self` aligns the item inside the grid area.\n   *\n   * **Initial value**: `auto`\n   *\n   * ---\n   *\n   * _Supported in Flex Layout_\n   *\n   * |  Chrome  | Firefox |  Safari   |  Edge  |   IE   |\n   * | :------: | :-----: | :-------: | :----: | :----: |\n   * |  **36**  | **20**  |   **9**   | **12** | **11** |\n   * | 21 _-x-_ |         | 6.1 _-x-_ |        |        |\n   *\n   * ---\n   *\n   * _Supported in Grid Layout_\n   *\n   * | Chrome | Firefox |  Safari  |  Edge  |      IE      |\n   * | :----: | :-----: | :------: | :----: | :----------: |\n   * | **57** | **52**  | **10.1** | **16** | **10** _-x-_ |\n   *\n   * ---\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/align-self\n   */\n  alignSelf?: AlignSelfProperty | AlignSelfProperty[];\n  /**\n   * The **`animation-delay`** CSS property sets when an animation starts. The animation can start later, immediately from its beginning, or immediately and partway through the animation.\n   *\n   * **Initial value**: `0s`\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |\n   * | :-----: | :-----: | :-----: | :----: | :----: |\n   * | **43**  | **16**  |  **9**  | **12** | **10** |\n   * | 3 _-x-_ | 5 _-x-_ | 4 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/animation-delay\n   */\n  animationDelay?: GlobalsString | GlobalsString[];\n  /**\n   * The **`animation-direction`** CSS property sets whether an animation should play forwards, backwards, or alternating back and forth.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |\n   * | :-----: | :-----: | :-----: | :----: | :----: |\n   * | **43**  | **16**  |  **9**  | **12** | **10** |\n   * | 3 _-x-_ | 5 _-x-_ | 4 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/animation-direction\n   */\n  animationDirection?: AnimationDirectionProperty | AnimationDirectionProperty[];\n  /**\n   * The **`animation-duration`** CSS property sets the length of time that an animation takes to complete one cycle.\n   *\n   * **Initial value**: `0s`\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |\n   * | :-----: | :-----: | :-----: | :----: | :----: |\n   * | **43**  | **16**  |  **9**  | **12** | **10** |\n   * | 3 _-x-_ | 5 _-x-_ | 4 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/animation-duration\n   */\n  animationDuration?: GlobalsString | GlobalsString[];\n  /**\n   * The **`animation-fill-mode`** CSS property sets how a CSS animation applies styles to its target before and after its execution.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |\n   * | :-----: | :-----: | :-----: | :----: | :----: |\n   * | **43**  | **16**  |  **9**  | **12** | **10** |\n   * | 3 _-x-_ | 5 _-x-_ | 5 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/animation-fill-mode\n   */\n  animationFillMode?: AnimationFillModeProperty | AnimationFillModeProperty[];\n  /**\n   * The **`animation-iteration-count`** CSS property sets the number of times an animation cycle should be played before stopping.\n   *\n   * **Initial value**: `1`\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |\n   * | :-----: | :-----: | :-----: | :----: | :----: |\n   * | **43**  | **16**  |  **9**  | **12** | **10** |\n   * | 3 _-x-_ | 5 _-x-_ | 4 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/animation-iteration-count\n   */\n  animationIterationCount?: AnimationIterationCountProperty | AnimationIterationCountProperty[];\n  /**\n   * The **`animation-name`** CSS property sets one or more animations to apply to an element. Each name is an `@keyframes` at-rule that sets the property values for the animation sequence.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |\n   * | :-----: | :-----: | :-----: | :----: | :----: |\n   * | **43**  | **16**  |  **9**  | **12** | **10** |\n   * | 3 _-x-_ | 5 _-x-_ | 4 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/animation-name\n   */\n  animationName?: AnimationNameProperty | AnimationNameProperty[];\n  /**\n   * The **`animation-play-state`** CSS property sets whether an animation is running or paused.\n   *\n   * **Initial value**: `running`\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |\n   * | :-----: | :-----: | :-----: | :----: | :----: |\n   * | **43**  | **16**  |  **9**  | **12** | **10** |\n   * | 3 _-x-_ | 5 _-x-_ | 4 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/animation-play-state\n   */\n  animationPlayState?: AnimationPlayStateProperty | AnimationPlayStateProperty[];\n  /**\n   * The `**animation-timing-function**` CSS property sets how an animation progresses through the duration of each cycle.\n   *\n   * **Initial value**: `ease`\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |\n   * | :-----: | :-----: | :-----: | :----: | :----: |\n   * | **43**  | **16**  |  **9**  | **12** | **10** |\n   * | 3 _-x-_ | 5 _-x-_ | 4 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/animation-timing-function\n   */\n  animationTimingFunction?: AnimationTimingFunctionProperty | AnimationTimingFunctionProperty[];\n  /**\n   * The **`-moz-appearance`** CSS property is used in Gecko (Firefox) to display an element using platform-native styling based on the operating system's theme.\n   *\n   * **Initial value**: `auto`\n   *\n   * |   Chrome    |   Firefox   |   Safari    |     Edge     | IE  |\n   * | :---------: | :---------: | :---------: | :----------: | :-: |\n   * | **1** _-x-_ | **1** _-x-_ | **3** _-x-_ | **12** _-x-_ | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/appearance\n   */\n  appearance?: AppearanceProperty | AppearanceProperty[];\n  /**\n   * The **`aspect-ratio`**    CSS property sets a _**preferred aspect ratio**_ for the box, which will be used in the calculation of auto sizes and some other layout functions.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **79** | **71**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/aspect-ratio\n   */\n  aspectRatio?: AspectRatioProperty | AspectRatioProperty[];\n  /**\n   * The **`backdrop-filter`** CSS property lets you apply graphical effects such as blurring or color shifting to the area behind an element. Because it applies to everything _behind_ the element, to see the effect you must make the element or its background at least partially transparent.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox |   Safari    |  Edge  | IE  |\n   * | :----: | :-----: | :---------: | :----: | :-: |\n   * | **76** |   n/a   | **9** _-x-_ | **17** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/backdrop-filter\n   */\n  backdropFilter?: BackdropFilterProperty | BackdropFilterProperty[];\n  /**\n   * The **`backface-visibility`** CSS property sets whether the back face of an element is visible when turned towards the user.\n   *\n   * **Initial value**: `visible`\n   *\n   * |  Chrome  | Firefox  |    Safari     |  Edge  |   IE   |\n   * | :------: | :------: | :-----------: | :----: | :----: |\n   * |  **36**  |  **16**  | **5.1** _-x-_ | **12** | **10** |\n   * | 12 _-x-_ | 10 _-x-_ |               |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/backface-visibility\n   */\n  backfaceVisibility?: BackfaceVisibilityProperty | BackfaceVisibilityProperty[];\n  /**\n   * The **`background-attachment`** CSS property sets whether a background image's position is fixed within the viewport, or scrolls with its containing block.\n   *\n   * **Initial value**: `scroll`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/background-attachment\n   */\n  backgroundAttachment?: BackgroundAttachmentProperty | BackgroundAttachmentProperty[];\n  /**\n   * The **`background-blend-mode`** CSS property sets how an element's background images should blend with each other and with the element's background color.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **35** | **30**  | **8**  |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/background-blend-mode\n   */\n  backgroundBlendMode?: BackgroundBlendModeProperty | BackgroundBlendModeProperty[];\n  /**\n   * The **`background-clip`** CSS property sets whether an element's background `<color>` or `<image>` extends underneath its border.\n   *\n   * **Initial value**: `border-box`\n   *\n   * | Chrome | Firefox |   Safari    |  Edge  |  IE   |\n   * | :----: | :-----: | :---------: | :----: | :---: |\n   * | **1**  |  **4**  | **3** _-x-_ | **12** | **9** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/background-clip\n   */\n  backgroundClip?: BackgroundClipProperty | BackgroundClipProperty[];\n  /**\n   * The **`background-color`** CSS property sets the background color of an element.\n   *\n   * **Initial value**: `transparent`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/background-color\n   */\n  backgroundColor?: BackgroundColorProperty | BackgroundColorProperty[];\n  /**\n   * The **`background-image`** CSS property sets one or more background images on an element.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/background-image\n   */\n  backgroundImage?: BackgroundImageProperty | BackgroundImageProperty[];\n  /**\n   * The **`background-origin`** CSS property sets the _background positioning area_. In other words, it sets the origin position of an image set with the `background-image` property.\n   *\n   * **Initial value**: `padding-box`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **4**  | **3**  | **12** | **9** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/background-origin\n   */\n  backgroundOrigin?: BackgroundOriginProperty | BackgroundOriginProperty[];\n  /**\n   * The **`background-position`** CSS property sets the initial position for each background image. The position is relative to the position layer set by `background-origin`.\n   *\n   * **Initial value**: `0% 0%`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/background-position\n   */\n  backgroundPosition?: BackgroundPositionProperty<TLength> | BackgroundPositionProperty<TLength>[];\n  /**\n   * The **`background-position-x`** CSS property sets the initial horizontal position for each background image. The position is relative to the position layer set by `background-origin`.\n   *\n   * **Initial value**: `left`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  | **49**  | **1**  | **12** | **6** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/background-position-x\n   */\n  backgroundPositionX?: BackgroundPositionXProperty<TLength> | BackgroundPositionXProperty<TLength>[];\n  /**\n   * The **`background-position-y`** CSS property sets the initial vertical position, relative to the background position layer defined by `background-origin`, for each defined background image.\n   *\n   * **Initial value**: `top`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  | **49**  | **1**  | **12** | **6** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/background-position-y\n   */\n  backgroundPositionY?: BackgroundPositionYProperty<TLength> | BackgroundPositionYProperty<TLength>[];\n  /**\n   * The **`background-repeat`** CSS property sets how background images are repeated. A background image can be repeated along the horizontal and vertical axes, or not repeated at all.\n   *\n   * **Initial value**: `repeat`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/background-repeat\n   */\n  backgroundRepeat?: BackgroundRepeatProperty | BackgroundRepeatProperty[];\n  /**\n   * The **`background-size`** CSS property sets the size of the element's background image. The image can be left to its natural size, stretched, or constrained to fit the available space.\n   *\n   * **Initial value**: `auto auto`\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |  IE   |\n   * | :-----: | :-----: | :-----: | :----: | :---: |\n   * |  **3**  |  **4**  | **4.1** | **12** | **9** |\n   * | 1 _-x-_ |         | 3 _-x-_ |        |       |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/background-size\n   */\n  backgroundSize?: BackgroundSizeProperty<TLength> | BackgroundSizeProperty<TLength>[];\n  /** **Initial value**: `clip` */\n  blockOverflow?: BlockOverflowProperty | BlockOverflowProperty[];\n  /**\n   * The **`block-size`** CSS property defines the horizontal or vertical size of an element's block, depending on its writing mode. It corresponds to either the `width` or the `height` property, depending on the value of `writing-mode`.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **57** | **41**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/block-size\n   */\n  blockSize?: BlockSizeProperty<TLength> | BlockSizeProperty<TLength>[];\n  /**\n   * The **`border-block-color`** CSS property defines the color of the logical block borders of an element, which maps to a physical border color depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-color` and `border-bottom-color`, or `border-right-color` and `border-left-color` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `currentcolor`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |  n/a   | **66**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-block-color\n   */\n  borderBlockColor?: BorderBlockColorProperty | BorderBlockColorProperty[];\n  /**\n   * The **`border-block-end-color`** CSS property defines the color of the logical block-end border of an element, which maps to a physical border color depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-color`, `border-right-color`, `border-bottom-color`, or `border-left-color` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `currentcolor`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **69** | **41**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-block-end-color\n   */\n  borderBlockEndColor?: BorderBlockEndColorProperty | BorderBlockEndColorProperty[];\n  /**\n   * The **`border-block-end-style`** CSS property defines the style of the logical block end border of an element, which maps to a physical border style depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-style`, `border-right-style`, `border-bottom-style`, or `border-left-style` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **69** | **41**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-block-end-style\n   */\n  borderBlockEndStyle?: BorderBlockEndStyleProperty | BorderBlockEndStyleProperty[];\n  /**\n   * The **`border-block-end-width`** CSS property defines the width of the logical block-end border of an element, which maps to a physical border width depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-width`, `border-right-width`, `border-bottom-width`, or `border-left-width` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `medium`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **69** | **41**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-block-end-width\n   */\n  borderBlockEndWidth?: BorderBlockEndWidthProperty<TLength> | BorderBlockEndWidthProperty<TLength>[];\n  /**\n   * The **`border-block-start-color`** CSS property defines the color of the logical block-start border of an element, which maps to a physical border color depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-color`, `border-right-color`, `border-bottom-color`, or `border-left-color` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `currentcolor`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **69** | **41**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-block-start-color\n   */\n  borderBlockStartColor?: BorderBlockStartColorProperty | BorderBlockStartColorProperty[];\n  /**\n   * The **`border-block-start-style`** CSS property defines the style of the logical block start border of an element, which maps to a physical border style depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-style`, `border-right-style`, `border-bottom-style`, or `border-left-style` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **69** | **41**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-block-start-style\n   */\n  borderBlockStartStyle?: BorderBlockStartStyleProperty | BorderBlockStartStyleProperty[];\n  /**\n   * The **`border-block-start-width`** CSS property defines the width of the logical block-start border of an element, which maps to a physical border width depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-width`, `border-right-width`, `border-bottom-width`, or `border-left-width` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `medium`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **69** | **41**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-block-start-width\n   */\n  borderBlockStartWidth?: BorderBlockStartWidthProperty<TLength> | BorderBlockStartWidthProperty<TLength>[];\n  /**\n   * The **`border-block-style`** CSS property defines the style of the logical block borders of an element, which maps to a physical border style depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-style` and `border-bottom-style`, or `border-left-style` and `border-right-style` properties depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **66**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-block-style\n   */\n  borderBlockStyle?: BorderBlockStyleProperty | BorderBlockStyleProperty[];\n  /**\n   * The **`border-block-width`** CSS property defines the width of the logical block borders of an element, which maps to a physical border width depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-width` and `border-bottom-width`, or `border-left-width`, and `border-right-width` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `medium`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **66**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-block-width\n   */\n  borderBlockWidth?: BorderBlockWidthProperty<TLength> | BorderBlockWidthProperty<TLength>[];\n  /**\n   * The **`border-bottom-color`** CSS property sets the color of an element's bottom border. It can also be set with the shorthand CSS properties `border-color` or `border-bottom`.\n   *\n   * **Initial value**: `currentcolor`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-bottom-color\n   */\n  borderBottomColor?: BorderBottomColorProperty | BorderBottomColorProperty[];\n  /**\n   * The **`border-bottom-left-radius`** CSS property rounds the bottom-left corner of an element.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |  IE   |\n   * | :-----: | :-----: | :-----: | :----: | :---: |\n   * |  **4**  |  **4**  |  **5**  | **12** | **9** |\n   * | 1 _-x-_ |         | 3 _-x-_ |        |       |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-bottom-left-radius\n   */\n  borderBottomLeftRadius?: BorderBottomLeftRadiusProperty<TLength> | BorderBottomLeftRadiusProperty<TLength>[];\n  /**\n   * The **`border-bottom-right-radius`** CSS property rounds the bottom-right corner of an element.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |  IE   |\n   * | :-----: | :-----: | :-----: | :----: | :---: |\n   * |  **4**  |  **4**  |  **5**  | **12** | **9** |\n   * | 1 _-x-_ |         | 3 _-x-_ |        |       |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-bottom-right-radius\n   */\n  borderBottomRightRadius?: BorderBottomRightRadiusProperty<TLength> | BorderBottomRightRadiusProperty<TLength>[];\n  /**\n   * The **`border-bottom-style`** CSS property sets the line style of an element's bottom `border`.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE    |\n   * | :----: | :-----: | :----: | :----: | :-----: |\n   * | **1**  |  **1**  | **1**  | **12** | **5.5** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-bottom-style\n   */\n  borderBottomStyle?: BorderBottomStyleProperty | BorderBottomStyleProperty[];\n  /**\n   * The **`border-bottom-width`** CSS property sets the width of the bottom border of a box.\n   *\n   * **Initial value**: `medium`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-bottom-width\n   */\n  borderBottomWidth?: BorderBottomWidthProperty<TLength> | BorderBottomWidthProperty<TLength>[];\n  /**\n   * The **`border-collapse`** CSS property sets whether cells inside a `<table>` have shared or separate borders.\n   *\n   * **Initial value**: `separate`\n   *\n   * | Chrome | Firefox | Safari  |  Edge  |  IE   |\n   * | :----: | :-----: | :-----: | :----: | :---: |\n   * | **1**  |  **1**  | **1.2** | **12** | **5** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-collapse\n   */\n  borderCollapse?: BorderCollapseProperty | BorderCollapseProperty[];\n  /**\n   * The **`border-end-end-radius`** CSS property defines a logical border radius on an element, which maps to a physical border radius that depends on on the element's `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **66**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-end-end-radius\n   */\n  borderEndEndRadius?: BorderEndEndRadiusProperty<TLength> | BorderEndEndRadiusProperty<TLength>[];\n  /**\n   * The **`border-end-start-radius`** CSS property defines a logical border radius on an element, which maps to a physical border radius depending on the element's `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **66**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-end-start-radius\n   */\n  borderEndStartRadius?: BorderEndStartRadiusProperty<TLength> | BorderEndStartRadiusProperty<TLength>[];\n  /**\n   * The **`border-image-outset`** CSS property sets the distance by which an element's border image is set out from its border box.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE   |\n   * | :----: | :-----: | :----: | :----: | :----: |\n   * | **15** | **15**  | **6**  | **12** | **11** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-image-outset\n   */\n  borderImageOutset?: BorderImageOutsetProperty<TLength> | BorderImageOutsetProperty<TLength>[];\n  /**\n   * The **`border-image-repeat`** CSS property defines how the edge regions of a source image are adjusted to fit the dimensions of an element's border image.\n   *\n   * **Initial value**: `stretch`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE   |\n   * | :----: | :-----: | :----: | :----: | :----: |\n   * | **15** | **15**  | **6**  | **12** | **11** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-image-repeat\n   */\n  borderImageRepeat?: BorderImageRepeatProperty | BorderImageRepeatProperty[];\n  /**\n   * The **`border-image-slice`** CSS property divides the image specified by `border-image-source` into regions. These regions form the components of an element's border image.\n   *\n   * **Initial value**: `100%`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE   |\n   * | :----: | :-----: | :----: | :----: | :----: |\n   * | **15** | **15**  | **6**  | **12** | **11** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-image-slice\n   */\n  borderImageSlice?: BorderImageSliceProperty | BorderImageSliceProperty[];\n  /**\n   * The **`border-image-source`** CSS property sets the source image used to create an element's border image.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE   |\n   * | :----: | :-----: | :----: | :----: | :----: |\n   * | **15** | **15**  | **6**  | **12** | **11** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-image-source\n   */\n  borderImageSource?: BorderImageSourceProperty | BorderImageSourceProperty[];\n  /**\n   * The **`border-image-width`** CSS property sets the width of an element's border image.\n   *\n   * **Initial value**: `1`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE   |\n   * | :----: | :-----: | :----: | :----: | :----: |\n   * | **15** | **13**  | **6**  | **12** | **11** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-image-width\n   */\n  borderImageWidth?: BorderImageWidthProperty<TLength> | BorderImageWidthProperty<TLength>[];\n  /**\n   * The **`border-inline-color`** CSS property defines the color of the logical inline borders of an element, which maps to a physical border color depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-color` and `border-bottom-color`, or `border-right-color` and `border-left-color` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `currentcolor`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **66**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-inline-color\n   */\n  borderInlineColor?: BorderInlineColorProperty | BorderInlineColorProperty[];\n  /**\n   * The **`border-inline-end-color`** CSS property defines the color of the logical inline-end border of an element, which maps to a physical border color depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-color`, `border-right-color`, `border-bottom-color`, or `border-left-color` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `currentcolor`\n   *\n   * | Chrome |           Firefox           |  Safari  | Edge | IE  |\n   * | :----: | :-------------------------: | :------: | :--: | :-: |\n   * | **69** |           **41**            | **12.1** |  No  | No  |\n   * |        | 3 _(-moz-border-end-color)_ |          |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-inline-end-color\n   */\n  borderInlineEndColor?: BorderInlineEndColorProperty | BorderInlineEndColorProperty[];\n  /**\n   * The **`border-inline-end-style`** CSS property defines the style of the logical inline end border of an element, which maps to a physical border style depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-style`, `border-right-style`, `border-bottom-style`, or `border-left-style` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome |           Firefox           |  Safari  | Edge | IE  |\n   * | :----: | :-------------------------: | :------: | :--: | :-: |\n   * | **69** |           **41**            | **12.1** |  No  | No  |\n   * |        | 3 _(-moz-border-end-style)_ |          |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-inline-end-style\n   */\n  borderInlineEndStyle?: BorderInlineEndStyleProperty | BorderInlineEndStyleProperty[];\n  /**\n   * The **`border-inline-end-width`** CSS property defines the width of the logical inline-end border of an element, which maps to a physical border width depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-width`, `border-right-width`, `border-bottom-width`, or `border-left-width` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `medium`\n   *\n   * | Chrome |           Firefox           |  Safari  | Edge | IE  |\n   * | :----: | :-------------------------: | :------: | :--: | :-: |\n   * | **69** |           **41**            | **12.1** |  No  | No  |\n   * |        | 3 _(-moz-border-end-width)_ |          |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-inline-end-width\n   */\n  borderInlineEndWidth?: BorderInlineEndWidthProperty<TLength> | BorderInlineEndWidthProperty<TLength>[];\n  /**\n   * The **`border-inline-start-color`** CSS property defines the color of the logical inline start border of an element, which maps to a physical border color depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-color`, `border-right-color`, `border-bottom-color`, or `border-left-color` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `currentcolor`\n   *\n   * | Chrome |            Firefox            |  Safari  | Edge | IE  |\n   * | :----: | :---------------------------: | :------: | :--: | :-: |\n   * | **69** |            **41**             | **12.1** |  No  | No  |\n   * |        | 3 _(-moz-border-start-color)_ |          |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-inline-start-color\n   */\n  borderInlineStartColor?: BorderInlineStartColorProperty | BorderInlineStartColorProperty[];\n  /**\n   * The **`border-inline-start-style`** CSS property defines the style of the logical inline start border of an element, which maps to a physical border style depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-style`, `border-right-style`, `border-bottom-style`, or `border-left-style` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome |            Firefox            |  Safari  | Edge | IE  |\n   * | :----: | :---------------------------: | :------: | :--: | :-: |\n   * | **69** |            **41**             | **12.1** |  No  | No  |\n   * |        | 3 _(-moz-border-start-style)_ |          |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-inline-start-style\n   */\n  borderInlineStartStyle?: BorderInlineStartStyleProperty | BorderInlineStartStyleProperty[];\n  /**\n   * The **`border-inline-start-width`** CSS property defines the width of the logical inline-start border of an element, which maps to a physical border width depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-width`, `border-right-width`, `border-bottom-width`, or `border-left-width` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `medium`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **69** | **41**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-inline-start-width\n   */\n  borderInlineStartWidth?: BorderInlineStartWidthProperty<TLength> | BorderInlineStartWidthProperty<TLength>[];\n  /**\n   * The **`border-inline-style`** CSS property defines the style of the logical inline borders of an element, which maps to a physical border style depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-style` and `border-bottom-style`, or `border-left-style` and `border-right-style` properties depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **66**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-inline-style\n   */\n  borderInlineStyle?: BorderInlineStyleProperty | BorderInlineStyleProperty[];\n  /**\n   * The **`border-inline-width`** CSS property defines the width of the logical inline borders of an element, which maps to a physical border width depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-width` and `border-bottom-width`, or `border-left-width`, and `border-right-width` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `medium`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **66**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-inline-width\n   */\n  borderInlineWidth?: BorderInlineWidthProperty<TLength> | BorderInlineWidthProperty<TLength>[];\n  /**\n   * The **`border-left-color`** CSS property sets the color of an element's left border. It can also be set with the shorthand CSS properties `border-color` or `border-left`.\n   *\n   * **Initial value**: `currentcolor`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-left-color\n   */\n  borderLeftColor?: BorderLeftColorProperty | BorderLeftColorProperty[];\n  /**\n   * The **`border-left-style`** CSS property sets the line style of an element's left `border`.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE    |\n   * | :----: | :-----: | :----: | :----: | :-----: |\n   * | **1**  |  **1**  | **1**  | **12** | **5.5** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-left-style\n   */\n  borderLeftStyle?: BorderLeftStyleProperty | BorderLeftStyleProperty[];\n  /**\n   * The **`border-left-width`** CSS property sets the width of the left border of an element.\n   *\n   * **Initial value**: `medium`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-left-width\n   */\n  borderLeftWidth?: BorderLeftWidthProperty<TLength> | BorderLeftWidthProperty<TLength>[];\n  /**\n   * The **`border-right-color`** CSS property sets the color of an element's right border. It can also be set with the shorthand CSS properties `border-color` or `border-right`.\n   *\n   * **Initial value**: `currentcolor`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-right-color\n   */\n  borderRightColor?: BorderRightColorProperty | BorderRightColorProperty[];\n  /**\n   * The **`border-right-style`** CSS property sets the line style of an element's right `border`.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE    |\n   * | :----: | :-----: | :----: | :----: | :-----: |\n   * | **1**  |  **1**  | **1**  | **12** | **5.5** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-right-style\n   */\n  borderRightStyle?: BorderRightStyleProperty | BorderRightStyleProperty[];\n  /**\n   * The **`border-right-width`** CSS property sets the width of the right border of an element.\n   *\n   * **Initial value**: `medium`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-right-width\n   */\n  borderRightWidth?: BorderRightWidthProperty<TLength> | BorderRightWidthProperty<TLength>[];\n  /**\n   * The **`border-spacing`** CSS property sets the distance between the borders of adjacent `<table>` cells. This property applies only when `border-collapse` is `separate`.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **8** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-spacing\n   */\n  borderSpacing?: BorderSpacingProperty<TLength> | BorderSpacingProperty<TLength>[];\n  /**\n   * The **`border-start-end-radius`** CSS property defines a logical border radius on an element, which maps to a physical border radius depending on the element's `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **66**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-start-end-radius\n   */\n  borderStartEndRadius?: BorderStartEndRadiusProperty<TLength> | BorderStartEndRadiusProperty<TLength>[];\n  /**\n   * The **`border-start-start-radius`** CSS property defines a logical border radius on an element, which maps to a physical border radius that depends on the element's `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **66**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-start-start-radius\n   */\n  borderStartStartRadius?: BorderStartStartRadiusProperty<TLength> | BorderStartStartRadiusProperty<TLength>[];\n  /**\n   * The **`border-top-color`** CSS property sets the color of an element's top border. It can also be set with the shorthand CSS properties `border-color` or `border-top`.\n   *\n   * **Initial value**: `currentcolor`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-top-color\n   */\n  borderTopColor?: BorderTopColorProperty | BorderTopColorProperty[];\n  /**\n   * The **`border-top-left-radius`** CSS property rounds the top-left corner of an element.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |  IE   |\n   * | :-----: | :-----: | :-----: | :----: | :---: |\n   * |  **4**  |  **4**  |  **5**  | **12** | **9** |\n   * | 1 _-x-_ |         | 3 _-x-_ |        |       |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-top-left-radius\n   */\n  borderTopLeftRadius?: BorderTopLeftRadiusProperty<TLength> | BorderTopLeftRadiusProperty<TLength>[];\n  /**\n   * The **`border-top-right-radius`** CSS property rounds the top-right corner of an element.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |  IE   |\n   * | :-----: | :-----: | :-----: | :----: | :---: |\n   * |  **4**  |  **4**  |  **5**  | **12** | **9** |\n   * | 1 _-x-_ |         | 3 _-x-_ |        |       |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-top-right-radius\n   */\n  borderTopRightRadius?: BorderTopRightRadiusProperty<TLength> | BorderTopRightRadiusProperty<TLength>[];\n  /**\n   * The **`border-top-style`** CSS property sets the line style of an element's top `border`.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE    |\n   * | :----: | :-----: | :----: | :----: | :-----: |\n   * | **1**  |  **1**  | **1**  | **12** | **5.5** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-top-style\n   */\n  borderTopStyle?: BorderTopStyleProperty | BorderTopStyleProperty[];\n  /**\n   * The **`border-top-width`** CSS property sets the width of the top border of an element.\n   *\n   * **Initial value**: `medium`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-top-width\n   */\n  borderTopWidth?: BorderTopWidthProperty<TLength> | BorderTopWidthProperty<TLength>[];\n  /**\n   * The **`bottom`** CSS property participates in specifying the vertical position of a _positioned element_. It has no effect on non-positioned elements.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **5** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/bottom\n   */\n  bottom?: BottomProperty<TLength> | BottomProperty<TLength>[];\n  /**\n   * The **`box-decoration-break`** CSS property specifies how an element's fragments should be rendered when broken across multiple lines, columns, or pages.\n   *\n   * **Initial value**: `slice`\n   *\n   * |    Chrome    | Firefox |    Safari     | Edge | IE  |\n   * | :----------: | :-----: | :-----------: | :--: | :-: |\n   * | **22** _-x-_ | **32**  | **6.1** _-x-_ |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/box-decoration-break\n   */\n  boxDecorationBreak?: BoxDecorationBreakProperty | BoxDecorationBreakProperty[];\n  /**\n   * The **`box-shadow`** CSS property adds shadow effects around an element's frame. You can set multiple effects separated by commas. A box shadow is described by X and Y offsets relative to the element, blur and spread radii, and color.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |  IE   |\n   * | :-----: | :-----: | :-----: | :----: | :---: |\n   * | **10**  |  **4**  | **5.1** | **12** | **9** |\n   * | 1 _-x-_ |         | 3 _-x-_ |        |       |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/box-shadow\n   */\n  boxShadow?: BoxShadowProperty | BoxShadowProperty[];\n  /**\n   * The **`box-sizing`** CSS property defines how the user agent should calculate the total width and height of an element.\n   *\n   * **Initial value**: `content-box`\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |  IE   |\n   * | :-----: | :-----: | :-----: | :----: | :---: |\n   * | **10**  | **29**  | **5.1** | **12** | **8** |\n   * | 1 _-x-_ | 1 _-x-_ | 3 _-x-_ |        |       |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/box-sizing\n   */\n  boxSizing?: BoxSizingProperty | BoxSizingProperty[];\n  /**\n   * The **`break-after`** CSS property defines how page, column, or region breaks should behave after a generated box. If there is no generated box, the property is ignored.\n   *\n   * **Initial value**: `auto`\n   *\n   * ---\n   *\n   * _Supported in Multi-column Layout_\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE   |\n   * | :----: | :-----: | :----: | :----: | :----: |\n   * | **50** |   No    |   No   | **12** | **10** |\n   *\n   * ---\n   *\n   * _Supported in Paged Media_\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE   |\n   * | :----: | :-----: | :----: | :----: | :----: |\n   * | **50** | **65**  | **10** | **12** | **10** |\n   *\n   * ---\n   *\n   * _Supported in CSS Regions_\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   |   No    |   No   |  No  | No  |\n   *\n   * ---\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/break-after\n   */\n  breakAfter?: BreakAfterProperty | BreakAfterProperty[];\n  /**\n   * The **`break-before`** CSS property sets how page, column, or region breaks should behave before a generated box. If there is no generated box, the property is ignored.\n   *\n   * **Initial value**: `auto`\n   *\n   * ---\n   *\n   * _Supported in Multi-column Layout_\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE   |\n   * | :----: | :-----: | :----: | :----: | :----: |\n   * | **50** | **65**  |   No   | **12** | **10** |\n   *\n   * ---\n   *\n   * _Supported in Paged Media_\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE   |\n   * | :----: | :-----: | :----: | :----: | :----: |\n   * | **50** | **65**  | **10** | **12** | **10** |\n   *\n   * ---\n   *\n   * _Supported in CSS Regions_\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   |   No    |   No   |  No  | No  |\n   *\n   * ---\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/break-before\n   */\n  breakBefore?: BreakBeforeProperty | BreakBeforeProperty[];\n  /**\n   * The **`break-inside`** CSS property defines how page, column, or region breaks should behave inside a generated box. If there is no generated box, the property is ignored.\n   *\n   * **Initial value**: `auto`\n   *\n   * ---\n   *\n   * _Supported in Multi-column Layout_\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE   |\n   * | :----: | :-----: | :----: | :----: | :----: |\n   * | **50** | **65**  | **10** | **12** | **10** |\n   *\n   * ---\n   *\n   * _Supported in Paged Media_\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE   |\n   * | :----: | :-----: | :----: | :----: | :----: |\n   * | **50** | **65**  | **10** | **12** | **10** |\n   *\n   * ---\n   *\n   * _Supported in CSS Regions_\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   |   No    |   No   |  No  | No  |\n   *\n   * ---\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/break-inside\n   */\n  breakInside?: BreakInsideProperty | BreakInsideProperty[];\n  /**\n   * The **`caption-side`** CSS property puts the content of a table's `<caption>` on the specified side. The values are relative to the `writing-mode` of the table.\n   *\n   * **Initial value**: `top`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **8** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/caption-side\n   */\n  captionSide?: CaptionSideProperty | CaptionSideProperty[];\n  /**\n   * The **`caret-color`** CSS property sets the color of the insertion caret, the visible marker where the next character typed will be inserted. The caret appears in elements such as `<input>` or those with the `contenteditable` attribute. The caret is typically a thin vertical line that flashes to help make it more noticeable. By default, it is black, but its color can be altered with this property.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **57** | **53**  | **11.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/caret-color\n   */\n  caretColor?: CaretColorProperty | CaretColorProperty[];\n  /**\n   * The **`clear`** CSS property sets whether an element must be moved below (cleared) floating elements that precede it. The `clear` property applies to floating and non-floating elements.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/clear\n   */\n  clear?: ClearProperty | ClearProperty[];\n  /**\n   * The `**clip-path**` CSS property creates a clipping region that sets what part of an element should be shown. Parts that are inside the region are shown, while those outside are hidden.\n   *\n   * **Initial value**: `none`\n   *\n   * |  Chrome  | Firefox |  Safari   |  Edge  |   IE   |\n   * | :------: | :-----: | :-------: | :----: | :----: |\n   * |  **55**  | **3.5** |  **9.1**  | **12** | **10** |\n   * | 23 _-x-_ |         | 6.1 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/clip-path\n   */\n  clipPath?: ClipPathProperty | ClipPathProperty[];\n  /**\n   * The **`color`** CSS property sets the foreground color value of an element's text and text decorations, and sets the `currentcolor` value. `currentcolor` may be used as an indirect value on _other_ properties and is the default for other color properties, such as `border-color`.\n   *\n   * **Initial value**: Varies from one browser to another\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **3** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/color\n   */\n  color?: ColorProperty | ColorProperty[];\n  /**\n   * The **`color-adjust`** CSS property sets what, if anything, the user agent may do to optimize the appearance of the element on the output device. By default, the browser is allowed to make any adjustments to the element's appearance it determines to be necessary and prudent given the type and capabilities of the output device.\n   *\n   * **Initial value**: `economy`\n   *\n   * |    Chrome    | Firefox |   Safari    | Edge | IE  |\n   * | :----------: | :-----: | :---------: | :--: | :-: |\n   * | **49** _-x-_ | **48**  | **6** _-x-_ |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/color-adjust\n   */\n  colorAdjust?: ColorAdjustProperty | ColorAdjustProperty[];\n  /**\n   * The **`column-count`** CSS property breaks an element's content into the specified number of columns.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |\n   * | :-----: | :-----: | :-----: | :----: | :----: |\n   * | **50**  | **52**  |  **9**  | **12** | **10** |\n   * | 1 _-x-_ |         | 3 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/column-count\n   */\n  columnCount?: ColumnCountProperty | ColumnCountProperty[];\n  /**\n   * The **`column-fill`** CSS property controls how an element's contents are balanced when broken into columns.\n   *\n   * **Initial value**: `balance`\n   *\n   * | Chrome | Firefox | Safari  |  Edge  |   IE   |\n   * | :----: | :-----: | :-----: | :----: | :----: |\n   * | **50** | **52**  |  **9**  | **12** | **10** |\n   * |        |         | 8 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/column-fill\n   */\n  columnFill?: ColumnFillProperty | ColumnFillProperty[];\n  /**\n   * The **`column-gap`** CSS property sets the size of the gap (gutter) between an element's columns.\n   *\n   * **Initial value**: `normal`\n   *\n   * ---\n   *\n   * _Supported in Flex Layout_\n   *\n   * | Chrome | Firefox |   Safari    | Edge | IE  |\n   * | :----: | :-----: | :---------: | :--: | :-: |\n   * |   No   | **63**  | **3** _-x-_ |  No  | No  |\n   *\n   * ---\n   *\n   * _Supported in Grid Layout_\n   *\n   * |     Chrome      |     Firefox     |        Safari         |  Edge  | IE  |\n   * | :-------------: | :-------------: | :-------------------: | :----: | :-: |\n   * |     **66**      |     **61**      | **10.1** _(grid-gap)_ | **16** | No  |\n   * | 57 _(grid-gap)_ | 52 _(grid-gap)_ |                       |        |     |\n   *\n   * ---\n   *\n   * _Supported in Multi-column Layout_\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |\n   * | :-----: | :-----: | :-----: | :----: | :----: |\n   * | **50**  | **52**  | **10**  | **12** | **10** |\n   * | 1 _-x-_ |         | 3 _-x-_ |        |        |\n   *\n   * ---\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/column-gap\n   */\n  columnGap?: ColumnGapProperty<TLength> | ColumnGapProperty<TLength>[];\n  /**\n   * The **`column-rule-color`** CSS property sets the color of the rule (line) drawn between columns in a multi-column layout.\n   *\n   * **Initial value**: `currentcolor`\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |\n   * | :-----: | :-----: | :-----: | :----: | :----: |\n   * | **50**  | **52**  |  **9**  | **12** | **10** |\n   * | 1 _-x-_ |         | 3 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/column-rule-color\n   */\n  columnRuleColor?: ColumnRuleColorProperty | ColumnRuleColorProperty[];\n  /**\n   * The **`column-rule-style`** CSS property sets the style of the line drawn between columns in a multi-column layout.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |\n   * | :-----: | :-----: | :-----: | :----: | :----: |\n   * | **50**  | **52**  |  **9**  | **12** | **10** |\n   * | 1 _-x-_ |         | 3 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/column-rule-style\n   */\n  columnRuleStyle?: ColumnRuleStyleProperty | ColumnRuleStyleProperty[];\n  /**\n   * The **`column-rule-width`** CSS property sets the width of the rule (line) drawn between columns in a multi-column layout.\n   *\n   * **Initial value**: `medium`\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |\n   * | :-----: | :-----: | :-----: | :----: | :----: |\n   * | **50**  | **52**  |  **9**  | **12** | **10** |\n   * | 1 _-x-_ |         | 3 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/column-rule-width\n   */\n  columnRuleWidth?: ColumnRuleWidthProperty<TLength> | ColumnRuleWidthProperty<TLength>[];\n  /**\n   * The **`column-span`** CSS property makes it possible for an element to span across all columns when its value is set to `all`.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome  | Firefox |  Safari   |  Edge  |   IE   |\n   * | :-----: | :-----: | :-------: | :----: | :----: |\n   * | **50**  | **71**  |   **9**   | **12** | **10** |\n   * | 6 _-x-_ |         | 5.1 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/column-span\n   */\n  columnSpan?: ColumnSpanProperty | ColumnSpanProperty[];\n  /**\n   * The **`column-width`** CSS property specifies the ideal column width in a multi-column layout. The container will have as many columns as can fit without any of them having a width less than the `column-width` value. If the width of the container is narrower than the specified value, the single column's width will be smaller than the declared column width.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |\n   * | :-----: | :-----: | :-----: | :----: | :----: |\n   * | **50**  | **50**  |  **9**  | **12** | **10** |\n   * | 1 _-x-_ |         | 3 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/column-width\n   */\n  columnWidth?: ColumnWidthProperty<TLength> | ColumnWidthProperty<TLength>[];\n  /**\n   * The **`contain`** CSS property allows an author to indicate that an element and its contents are, as much as possible, _independent_ of the rest of the document tree. This allows the browser to recalculate layout, style, paint, size, or any combination of them for a limited area of the DOM and not the entire page.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **52** | **69**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/contain\n   */\n  contain?: ContainProperty | ContainProperty[];\n  /**\n   * The **`content`** CSS property replaces an element with a generated value. Objects inserted using the `content` property are _anonymous replaced elements._\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **8** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/content\n   */\n  content?: ContentProperty | ContentProperty[];\n  /**\n   * The **`counter-increment`** CSS property increases or decreases the value of a CSS counter by a given value.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **2**  |  **1**  | **3**  | **12** | **8** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/counter-increment\n   */\n  counterIncrement?: CounterIncrementProperty | CounterIncrementProperty[];\n  /**\n   * The **`counter-reset`** CSS property resets a CSS counter to a given value.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **2**  |  **1**  | **3**  | **12** | **8** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/counter-reset\n   */\n  counterReset?: CounterResetProperty | CounterResetProperty[];\n  /**\n   * The **`counter-set`** CSS property sets a CSS counter to a given value. It manipulates the value of existing counters, and will only create new counters if there isn't already a counter of the given name on the element.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **68**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/counter-set\n   */\n  counterSet?: CounterSetProperty | CounterSetProperty[];\n  /**\n   * The **`cursor`** CSS property sets mouse cursor to display when the mouse pointer is over an element.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari  |  Edge  |  IE   |\n   * | :----: | :-----: | :-----: | :----: | :---: |\n   * | **1**  |  **1**  | **1.2** | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/cursor\n   */\n  cursor?: CursorProperty | CursorProperty[];\n  /**\n   * The **`direction`** CSS property sets the direction of text, table columns, and horizontal overflow. Use `rtl` for languages written from right to left (like Hebrew or Arabic), and `ltr` for those written from left to right (like English and most other languages).\n   *\n   * **Initial value**: `ltr`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE    |\n   * | :----: | :-----: | :----: | :----: | :-----: |\n   * | **2**  |  **1**  | **1**  | **12** | **5.5** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/direction\n   */\n  direction?: DirectionProperty | DirectionProperty[];\n  /**\n   * The **`display`** CSS property defines the _display type_ of an element, which consists of the two basic qualities of how an element generates boxes — the **outer display type** defining how the box participates in flow layout, and the **inner display type** defining how the children of the box are laid out.\n   *\n   * **Initial value**: `inline`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/display\n   */\n  display?: DisplayProperty | DisplayProperty[];\n  /**\n   * The **`empty-cells`** CSS property sets whether borders and backgrounds appear around `<table>` cells that have no visible content.\n   *\n   * **Initial value**: `show`\n   *\n   * | Chrome | Firefox | Safari  |  Edge  |  IE   |\n   * | :----: | :-----: | :-----: | :----: | :---: |\n   * | **1**  |  **1**  | **1.2** | **12** | **8** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/empty-cells\n   */\n  emptyCells?: EmptyCellsProperty | EmptyCellsProperty[];\n  /**\n   * The **`filter`** CSS property applies graphical effects like blur or color shift to an element. Filters are commonly used to adjust the rendering of images, backgrounds, and borders.\n   *\n   * **Initial value**: `none`\n   *\n   * |  Chrome  | Firefox | Safari  |  Edge  | IE  |\n   * | :------: | :-----: | :-----: | :----: | :-: |\n   * |  **53**  | **35**  | **9.1** | **12** | No  |\n   * | 18 _-x-_ |         | 6 _-x-_ |        |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/filter\n   */\n  filter?: FilterProperty | FilterProperty[];\n  /**\n   * The **`flex-basis`** CSS property sets the initial main size of a flex item. It sets the size of the content box unless otherwise set with `box-sizing`.\n   *\n   * **Initial value**: `auto`\n   *\n   * |  Chrome  | Firefox | Safari  |  Edge  |   IE   |\n   * | :------: | :-----: | :-----: | :----: | :----: |\n   * |  **29**  | **22**  |  **9**  | **12** | **11** |\n   * | 22 _-x-_ |         | 7 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/flex-basis\n   */\n  flexBasis?: FlexBasisProperty<TLength> | FlexBasisProperty<TLength>[];\n  /**\n   * The **`flex-direction`** CSS property sets how flex items are placed in the flex container defining the main axis and the direction (normal or reversed).\n   *\n   * **Initial value**: `row`\n   *\n   * |  Chrome  | Firefox | Safari  |  Edge  |    IE    |\n   * | :------: | :-----: | :-----: | :----: | :------: |\n   * |  **29**  | **20**  |  **9**  | **12** |  **11**  |\n   * | 21 _-x-_ |         | 7 _-x-_ |        | 10 _-x-_ |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/flex-direction\n   */\n  flexDirection?: FlexDirectionProperty | FlexDirectionProperty[];\n  /**\n   * The **`flex-grow`** CSS property sets how much of the available space in the flex container should be assigned to that item (the flex grow factor). If all sibling items have the same flex grow factor, then all items will receive the same share of available space, otherwise it is distributed according to the ratio defined by the different flex grow factors.\n   *\n   * **Initial value**: `0`\n   *\n   * |  Chrome  | Firefox |  Safari   |  Edge  |            IE            |\n   * | :------: | :-----: | :-------: | :----: | :----------------------: |\n   * |  **29**  | **20**  |   **9**   | **12** |          **11**          |\n   * | 22 _-x-_ |         | 6.1 _-x-_ |        | 10 _(-ms-flex-positive)_ |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/flex-grow\n   */\n  flexGrow?: GlobalsNumber | GlobalsNumber[];\n  /**\n   * The **`flex-shrink`** CSS property sets the flex shrink factor of a flex item. If the size of flex items is larger than the flex container, items shrink to fit according to `flex-shrink`.\n   *\n   * **Initial value**: `1`\n   *\n   * |  Chrome  | Firefox | Safari  |  Edge  |   IE   |\n   * | :------: | :-----: | :-----: | :----: | :----: |\n   * |  **29**  | **20**  |  **9**  | **12** | **10** |\n   * | 22 _-x-_ |         | 8 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/flex-shrink\n   */\n  flexShrink?: GlobalsNumber | GlobalsNumber[];\n  /**\n   * The **`flex-wrap`** CSS property sets whether flex items are forced onto one line or can wrap onto multiple lines. If wrapping is allowed, it sets the direction that lines are stacked.\n   *\n   * **Initial value**: `nowrap`\n   *\n   * |  Chrome  | Firefox |  Safari   |  Edge  |   IE   |\n   * | :------: | :-----: | :-------: | :----: | :----: |\n   * |  **29**  | **28**  |   **9**   | **12** | **11** |\n   * | 21 _-x-_ |         | 6.1 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/flex-wrap\n   */\n  flexWrap?: FlexWrapProperty | FlexWrapProperty[];\n  /**\n   * The **`float`** CSS property places an element on the left or right side of its container, allowing text and inline elements to wrap around it. The element is removed from the normal flow of the page, though still remaining a part of the flow (in contrast to absolute positioning).\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/float\n   */\n  float?: FloatProperty | FloatProperty[];\n  /**\n   * The **`font-family`** CSS property specifies a prioritized list of one or more font family names and/or generic family names for the selected element.\n   *\n   * **Initial value**: depends on user agent\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **3** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/font-family\n   */\n  fontFamily?: FontFamilyProperty | FontFamilyProperty[];\n  /**\n   * The **`font-feature-settings`** CSS property controls advanced typographic features in OpenType fonts.\n   *\n   * **Initial value**: `normal`\n   *\n   * |  Chrome  | Firefox  | Safari  |  Edge  |   IE   |\n   * | :------: | :------: | :-----: | :----: | :----: |\n   * |  **48**  |  **34**  | **9.1** | **15** | **10** |\n   * | 16 _-x-_ | 15 _-x-_ |         |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/font-feature-settings\n   */\n  fontFeatureSettings?: FontFeatureSettingsProperty | FontFeatureSettingsProperty[];\n  /**\n   * The **`font-kerning`** CSS property sets the use of the kerning information stored in a font.\n   *\n   * **Initial value**: `auto`\n   *\n   * |    Chrome    | Firefox | Safari | Edge | IE  |\n   * | :----------: | :-----: | :----: | :--: | :-: |\n   * | **32** _-x-_ | **32**  | **7**  |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/font-kerning\n   */\n  fontKerning?: FontKerningProperty | FontKerningProperty[];\n  /**\n   * The **`font-language-override`** CSS property controls the use of language-specific glyphs in a typeface.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **34**  |   No   |  No  | No  |\n   * |        | 4 _-x-_ |        |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/font-language-override\n   */\n  fontLanguageOverride?: FontLanguageOverrideProperty | FontLanguageOverrideProperty[];\n  /**\n   * The **`font-optical-sizing`** CSS property sets whether text rendering is optimized for viewing at different sizes. This only works for fonts that have an optical size variation axis.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari |  Edge  | IE  |\n   * | :----: | :-----: | :----: | :----: | :-: |\n   * | **79** | **62**  | **11** | **17** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/font-optical-sizing\n   */\n  fontOpticalSizing?: FontOpticalSizingProperty | FontOpticalSizingProperty[];\n  /**\n   * The **`font-size`** CSS property sets the size of the font. This property is also used to compute the size of `em`, `ex`, and other relative `<length>` units.\n   *\n   * **Initial value**: `medium`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE    |\n   * | :----: | :-----: | :----: | :----: | :-----: |\n   * | **1**  |  **1**  | **1**  | **12** | **5.5** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/font-size\n   */\n  fontSize?: FontSizeProperty<TLength> | FontSizeProperty<TLength>[];\n  /**\n   * The **`font-size-adjust`** CSS property sets how the font size should be chosen based on the height of lowercase rather than capital letters.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **54** |  **1**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/font-size-adjust\n   */\n  fontSizeAdjust?: FontSizeAdjustProperty | FontSizeAdjustProperty[];\n  /**\n   * The **`font-stretch`** CSS property selects a normal, condensed, or expanded face from a font.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **60** |  **9**  | **11** | **12** | **9** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/font-stretch\n   */\n  fontStretch?: FontStretchProperty | FontStretchProperty[];\n  /**\n   * The **`font-style`** CSS property sets whether a font should be styled with a normal, italic, or oblique face from its `font-family`.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/font-style\n   */\n  fontStyle?: FontStyleProperty | FontStyleProperty[];\n  /**\n   * The **`font-synthesis`** CSS property controls which missing typefaces, bold or italic, may be synthesized by the browser.\n   *\n   * **Initial value**: `weight style`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **34**  | **9**  |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/font-synthesis\n   */\n  fontSynthesis?: FontSynthesisProperty | FontSynthesisProperty[];\n  /**\n   * The **font-variant** CSS property is a shorthand for the longhand properties `font-variant-caps`, `font-variant-numeric`, `font-variant-alternates`, `font-variant-ligatures`, and `font-variant-east-asian`. You can also set the CSS Level 2 (Revision 1) values of `font-variant`, (that is, `normal` or `small-caps`), by using the `font` shorthand.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/font-variant\n   */\n  fontVariant?: FontVariantProperty | FontVariantProperty[];\n  /**\n   * The **`font-variant-caps`** CSS property controls the use of alternate glyphs for capital letters.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **52** | **34**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/font-variant-caps\n   */\n  fontVariantCaps?: FontVariantCapsProperty | FontVariantCapsProperty[];\n  /**\n   * The **`font-variant-east-asian`** CSS property controls the use of alternate glyphs for East Asian scripts, like Japanese and Chinese.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **63** | **34**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/font-variant-east-asian\n   */\n  fontVariantEastAsian?: FontVariantEastAsianProperty | FontVariantEastAsianProperty[];\n  /**\n   * The **`font-variant-ligatures`** CSS property controls which ligatures and contextual forms are used in textual content of the elements it applies to. This leads to more harmonized forms in the resulting text.\n   *\n   * **Initial value**: `normal`\n   *\n   * |  Chrome  | Firefox | Safari  | Edge | IE  |\n   * | :------: | :-----: | :-----: | :--: | :-: |\n   * |  **34**  | **34**  | **9.1** |  No  | No  |\n   * | 31 _-x-_ |         | 7 _-x-_ |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/font-variant-ligatures\n   */\n  fontVariantLigatures?: FontVariantLigaturesProperty | FontVariantLigaturesProperty[];\n  /**\n   * The **`font-variant-numeric`** CSS property controls the usage of alternate glyphs for numbers, fractions, and ordinal markers.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari  | Edge | IE  |\n   * | :----: | :-----: | :-----: | :--: | :-: |\n   * | **52** | **34**  | **9.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/font-variant-numeric\n   */\n  fontVariantNumeric?: FontVariantNumericProperty | FontVariantNumericProperty[];\n  /**\n   * The **`font-variant-position`** CSS property controls the use of alternate, smaller glyphs that are positioned as superscript or subscript.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **34**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/font-variant-position\n   */\n  fontVariantPosition?: FontVariantPositionProperty | FontVariantPositionProperty[];\n  /**\n   * The **`font-variation-settings`** CSS property provides low-level control over variable font characteristics, by specifying the four letter axis names of the characteristics you want to vary, along with their values.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari |  Edge  | IE  |\n   * | :----: | :-----: | :----: | :----: | :-: |\n   * | **62** | **62**  | **11** | **17** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/font-variation-settings\n   */\n  fontVariationSettings?: FontVariationSettingsProperty | FontVariationSettingsProperty[];\n  /**\n   * The **`font-weight`** CSS property specifies the weight (or boldness) of the font. The font weights available to you will depend on the `font-family` you are using. Some fonts are only available in `normal` and `bold`.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **2**  |  **1**  | **1**  | **12** | **3** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/font-weight\n   */\n  fontWeight?: FontWeightProperty | FontWeightProperty[];\n  /**\n   * The **`grid-auto-columns`** CSS property specifies the size of an implicitly-created grid column track.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox |  Safari  |          Edge           |             IE              |\n   * | :----: | :-----: | :------: | :---------------------: | :-------------------------: |\n   * | **57** | **70**  | **10.1** |         **16**          | **10** _(-ms-grid-columns)_ |\n   * |        |         |          | 12 _(-ms-grid-columns)_ |                             |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/grid-auto-columns\n   */\n  gridAutoColumns?: GridAutoColumnsProperty<TLength> | GridAutoColumnsProperty<TLength>[];\n  /**\n   * The **`grid-auto-flow`** CSS property controls how the auto-placement algorithm works, specifying exactly how auto-placed items get flowed into the grid.\n   *\n   * **Initial value**: `row`\n   *\n   * | Chrome | Firefox |  Safari  |  Edge  | IE  |\n   * | :----: | :-----: | :------: | :----: | :-: |\n   * | **57** | **52**  | **10.1** | **16** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/grid-auto-flow\n   */\n  gridAutoFlow?: GridAutoFlowProperty | GridAutoFlowProperty[];\n  /**\n   * The **`grid-auto-rows`** CSS property specifies the size of an implicitly-created grid row track.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox |  Safari  |         Edge         |            IE            |\n   * | :----: | :-----: | :------: | :------------------: | :----------------------: |\n   * | **57** | **70**  | **10.1** |        **16**        | **10** _(-ms-grid-rows)_ |\n   * |        |         |          | 12 _(-ms-grid-rows)_ |                          |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/grid-auto-rows\n   */\n  gridAutoRows?: GridAutoRowsProperty<TLength> | GridAutoRowsProperty<TLength>[];\n  /**\n   * The **`grid-column-end`** CSS property specifies a grid item’s end position within the grid column by contributing a line, a span, or nothing (automatic) to its grid placement, thereby specifying the block-end edge of its grid area.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox |  Safari  |  Edge  | IE  |\n   * | :----: | :-----: | :------: | :----: | :-: |\n   * | **57** | **52**  | **10.1** | **16** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/grid-column-end\n   */\n  gridColumnEnd?: GridColumnEndProperty | GridColumnEndProperty[];\n  /**\n   * The **`grid-column-start`** CSS property specifies a grid item’s start position within the grid column by contributing a line, a span, or nothing (automatic) to its grid placement. This start position defines the block-start edge of the grid area.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox |  Safari  |  Edge  | IE  |\n   * | :----: | :-----: | :------: | :----: | :-: |\n   * | **57** | **52**  | **10.1** | **16** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/grid-column-start\n   */\n  gridColumnStart?: GridColumnStartProperty | GridColumnStartProperty[];\n  /**\n   * The **`grid-row-end`** CSS property specifies a grid item’s end position within the grid row by contributing a line, a span, or nothing (automatic) to its grid placement, thereby specifying the inline-end edge of its grid area.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox |  Safari  |  Edge  | IE  |\n   * | :----: | :-----: | :------: | :----: | :-: |\n   * | **57** | **52**  | **10.1** | **16** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/grid-row-end\n   */\n  gridRowEnd?: GridRowEndProperty | GridRowEndProperty[];\n  /**\n   * The **`grid-row-start`** CSS property specifies a grid item’s start position within the grid row by contributing a line, a span, or nothing (automatic) to its grid placement, thereby specifying the inline-start edge of its grid area.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox |  Safari  |  Edge  | IE  |\n   * | :----: | :-----: | :------: | :----: | :-: |\n   * | **57** | **52**  | **10.1** | **16** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/grid-row-start\n   */\n  gridRowStart?: GridRowStartProperty | GridRowStartProperty[];\n  /**\n   * The **`grid-template-areas`** CSS property specifies named grid areas.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox |  Safari  |  Edge  | IE  |\n   * | :----: | :-----: | :------: | :----: | :-: |\n   * | **57** | **52**  | **10.1** | **16** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/grid-template-areas\n   */\n  gridTemplateAreas?: GridTemplateAreasProperty | GridTemplateAreasProperty[];\n  /**\n   * The **`grid-template-columns`** CSS property defines the line names and track sizing functions of the grid columns.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox |  Safari  |  Edge  | IE  |\n   * | :----: | :-----: | :------: | :----: | :-: |\n   * | **57** | **52**  | **10.1** | **16** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/grid-template-columns\n   */\n  gridTemplateColumns?: GridTemplateColumnsProperty<TLength> | GridTemplateColumnsProperty<TLength>[];\n  /**\n   * The **`grid-template-rows`** CSS property defines the line names and track sizing functions of the grid rows.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox |  Safari  |  Edge  | IE  |\n   * | :----: | :-----: | :------: | :----: | :-: |\n   * | **57** | **52**  | **10.1** | **16** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/grid-template-rows\n   */\n  gridTemplateRows?: GridTemplateRowsProperty<TLength> | GridTemplateRowsProperty<TLength>[];\n  /**\n   * The **`hanging-punctuation`** CSS property specifies whether a punctuation mark should hang at the start or end of a line of text. Hanging punctuation may be placed outside the line box.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   |   No    | **10** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/hanging-punctuation\n   */\n  hangingPunctuation?: HangingPunctuationProperty | HangingPunctuationProperty[];\n  /**\n   * The **`height`** CSS property specifies the height of an element. By default, the property defines the height of the content area. If `box-sizing` is set to `border-box`, however, it instead determines the height of the border area.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/height\n   */\n  height?: HeightProperty<TLength> | HeightProperty<TLength>[];\n  /**\n   * The **`hyphens`** CSS property specifies how words should be hyphenated when text wraps across multiple lines. You can prevent hyphenation entirely, use hyphenation in manually-specified points within the text, or let the browser automatically insert hyphens where appropriate.\n   *\n   * **Initial value**: `manual`\n   *\n   * |  Chrome  | Firefox |    Safari     |     Edge     |      IE      |\n   * | :------: | :-----: | :-----------: | :----------: | :----------: |\n   * |  **55**  | **43**  | **5.1** _-x-_ | **12** _-x-_ | **10** _-x-_ |\n   * | 13 _-x-_ | 6 _-x-_ |               |              |              |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/hyphens\n   */\n  hyphens?: HyphensProperty | HyphensProperty[];\n  /**\n   * The **`image-orientation`** CSS property specifies a layout-independent correction to the orientation of an image. It should _not_ be used for any other orientation adjustments; instead, the `transform` property should be used with the `rotate` `<transform-function>`.\n   *\n   * **Initial value**: `0deg`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **26**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/image-orientation\n   */\n  imageOrientation?: ImageOrientationProperty | ImageOrientationProperty[];\n  /**\n   * The **`image-rendering`** CSS property sets an image scaling algorithm. The property applies to an element itself, to any images set in its other properties, and to its descendants.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **13** | **3.6** | **6**  |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/image-rendering\n   */\n  imageRendering?: ImageRenderingProperty | ImageRenderingProperty[];\n  /** **Initial value**: `1dppx` */\n  imageResolution?: ImageResolutionProperty | ImageResolutionProperty[];\n  /**\n   * The `initial-letter` CSS property sets styling for dropped, raised, and sunken initial letters.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   |   No    | **9**  |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/initial-letter\n   */\n  initialLetter?: InitialLetterProperty | InitialLetterProperty[];\n  /**\n   * The **`inline-size`** CSS property defines the horizontal or vertical size of an element's block, depending on its writing mode. It corresponds to either the `width` or the `height` property, depending on the value of `writing-mode`.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **57** | **41**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/inline-size\n   */\n  inlineSize?: InlineSizeProperty<TLength> | InlineSizeProperty<TLength>[];\n  /**\n   * The **`inset`** CSS property defines the logical block and inline start and end offsets of an element, which map to physical offsets depending on the element's writing mode, directionality, and text orientation. It corresponds to the `top` and `bottom`, or `right` and `left` properties depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **66**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/inset\n   */\n  inset?: InsetProperty<TLength> | InsetProperty<TLength>[];\n  /**\n   * The **`inset-block`** CSS property defines the logical block start and end offsets of an element, which maps to physical offsets depending on the element's writing mode, directionality, and text orientation. It corresponds to the `top` and `bottom`, or `right` and `left` properties depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |  n/a   | **63**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/inset-block\n   */\n  insetBlock?: InsetBlockProperty<TLength> | InsetBlockProperty<TLength>[];\n  /**\n   * The **`inset-block-end`** CSS property defines the logical block end offset of an element, which maps to a physical inset depending on the element's writing mode, directionality, and text orientation. It corresponds to the `top`, `right`, `bottom`, or `left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |  n/a   | **63**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/inset-block-end\n   */\n  insetBlockEnd?: InsetBlockEndProperty<TLength> | InsetBlockEndProperty<TLength>[];\n  /**\n   * The **`inset-block-start`** CSS property defines the logical block start offset of an element, which maps to a physical inset depending on the element's writing mode, directionality, and text orientation. It corresponds to the `top`, `right`, `bottom`, or `left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |  n/a   | **63**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/inset-block-start\n   */\n  insetBlockStart?: InsetBlockStartProperty<TLength> | InsetBlockStartProperty<TLength>[];\n  /**\n   * The **`inset-inline`** CSS property defines the logical block start and end offsets of an element, which maps to physical offsets depending on the element's writing mode, directionality, and text orientation. It corresponds to the `top` and `bottom`, or `right` and `left` properties depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |  n/a   | **63**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/inset-inline\n   */\n  insetInline?: InsetInlineProperty<TLength> | InsetInlineProperty<TLength>[];\n  /**\n   * The **`inset-inline-end`** CSS property defines the logical inline end inset of an element, which maps to a physical inset depending on the element's writing mode, directionality, and text orientation. It corresponds to the `top`, `right`, `bottom`, or `left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |  n/a   | **63**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/inset-inline-end\n   */\n  insetInlineEnd?: InsetInlineEndProperty<TLength> | InsetInlineEndProperty<TLength>[];\n  /**\n   * The **`inset-inline-start`** CSS property defines the logical inline start inset of an element, which maps to a physical offset depending on the element's writing mode, directionality, and text orientation. It corresponds to the `top`, `right`, `bottom`, or `left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |  n/a   | **63**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/inset-inline-start\n   */\n  insetInlineStart?: InsetInlineStartProperty<TLength> | InsetInlineStartProperty<TLength>[];\n  /**\n   * The **`isolation`** CSS property determines whether an element must create a new stacking context.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **41** | **36**  | **8**  |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/isolation\n   */\n  isolation?: IsolationProperty | IsolationProperty[];\n  /**\n   * The CSS **`justify-content`** property defines how the browser distributes space between and around content items along the main-axis of a flex container, and the inline axis of a grid container.\n   *\n   * **Initial value**: `normal`\n   *\n   * ---\n   *\n   * _Supported in Flex Layout_\n   *\n   * |  Chrome  | Firefox |  Safari   |  Edge  |   IE   |\n   * | :------: | :-----: | :-------: | :----: | :----: |\n   * |  **52**  | **20**  |   **9**   | **12** | **11** |\n   * | 21 _-x-_ |         | 6.1 _-x-_ |        |        |\n   *\n   * ---\n   *\n   * _Supported in Grid Layout_\n   *\n   * | Chrome | Firefox |  Safari  |  Edge  | IE  |\n   * | :----: | :-----: | :------: | :----: | :-: |\n   * | **57** | **52**  | **10.1** | **16** | No  |\n   *\n   * ---\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/justify-content\n   */\n  justifyContent?: JustifyContentProperty | JustifyContentProperty[];\n  /**\n   * The CSS **`justify-items`** property defines the default `justify-self` for all items of the box, giving them all a default way of justifying each box along the appropriate axis.\n   *\n   * **Initial value**: `legacy`\n   *\n   * ---\n   *\n   * _Supported in Flex Layout_\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE   |\n   * | :----: | :-----: | :----: | :----: | :----: |\n   * | **52** | **20**  | **9**  | **12** | **11** |\n   *\n   * ---\n   *\n   * _Supported in Grid Layout_\n   *\n   * | Chrome | Firefox |  Safari  |  Edge  | IE  |\n   * | :----: | :-----: | :------: | :----: | :-: |\n   * | **57** | **45**  | **10.1** | **16** | No  |\n   *\n   * ---\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/justify-items\n   */\n  justifyItems?: JustifyItemsProperty | JustifyItemsProperty[];\n  /**\n   * The CSS **`justify-self`** property set the way a box is justified inside its alignment container along the appropriate axis.\n   *\n   * **Initial value**: `auto`\n   *\n   * ---\n   *\n   * _Supported in Flex Layout_\n   *\n   * | Chrome | Firefox |  Safari  |  Edge  | IE  |\n   * | :----: | :-----: | :------: | :----: | :-: |\n   * | **57** | **45**  | **10.1** | **16** | No  |\n   *\n   * ---\n   *\n   * _Supported in Grid Layout_\n   *\n   * | Chrome | Firefox |  Safari  |  Edge  | IE  |\n   * | :----: | :-----: | :------: | :----: | :-: |\n   * | **57** | **45**  | **10.1** | **16** | No  |\n   *\n   * ---\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/justify-self\n   */\n  justifySelf?: JustifySelfProperty | JustifySelfProperty[];\n  /**\n   * The **`left`** CSS property participates in specifying the horizontal position of a _positioned element_. It has no effect on non-positioned elements.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE    |\n   * | :----: | :-----: | :----: | :----: | :-----: |\n   * | **1**  |  **1**  | **1**  | **12** | **5.5** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/left\n   */\n  left?: LeftProperty<TLength> | LeftProperty<TLength>[];\n  /**\n   * The **`letter-spacing`** CSS property sets the spacing behavior between text characters.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/letter-spacing\n   */\n  letterSpacing?: LetterSpacingProperty<TLength> | LetterSpacingProperty<TLength>[];\n  /**\n   * The **`line-break`** CSS property sets how to break lines of Chinese, Japanese, or Korean (CJK) text when working with punctuation and symbols.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome  | Firefox |   Safari    |  Edge  |   IE    |\n   * | :-----: | :-----: | :---------: | :----: | :-----: |\n   * | **58**  | **69**  | **3** _-x-_ | **14** | **5.5** |\n   * | 1 _-x-_ |         |             |        |         |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/line-break\n   */\n  lineBreak?: LineBreakProperty | LineBreakProperty[];\n  /**\n   * The **`line-height`** CSS property sets the amount of space used for lines, such as in text. On block-level elements, it specifies the minimum height of line boxes within the element. On non-replaced inline elements, it specifies the height that is used to calculate line box height.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/line-height\n   */\n  lineHeight?: LineHeightProperty<TLength> | LineHeightProperty<TLength>[];\n  /**\n   * The **`line-height-step`** CSS property sets the step unit for line box heights. When the property is set, line box heights are rounded up to the closest multiple of the unit.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |  n/a   |   No    |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/line-height-step\n   */\n  lineHeightStep?: LineHeightStepProperty<TLength> | LineHeightStepProperty<TLength>[];\n  /**\n   * The **`list-style-image`** CSS property sets an image to be used as the list item marker.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/list-style-image\n   */\n  listStyleImage?: ListStyleImageProperty | ListStyleImageProperty[];\n  /**\n   * The **`list-style-position`** CSS property sets the position of the `::marker` relative to a list item.\n   *\n   * **Initial value**: `outside`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/list-style-position\n   */\n  listStylePosition?: ListStylePositionProperty | ListStylePositionProperty[];\n  /**\n   * The **`list-style-type`** CSS property sets the marker (such as a disc, character, or custom counter style) of a list item element.\n   *\n   * **Initial value**: `disc`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/list-style-type\n   */\n  listStyleType?: ListStyleTypeProperty | ListStyleTypeProperty[];\n  /**\n   * The **`margin-block`** CSS property defines the logical block start and end margins of an element, which maps to physical margins depending on the element's writing mode, directionality, and text orientation.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **66**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/margin-block\n   */\n  marginBlock?: MarginBlockProperty<TLength> | MarginBlockProperty<TLength>[];\n  /**\n   * The **`margin-block-end`** CSS property defines the logical block end margin of an element, which maps to a physical margin depending on the element's writing mode, directionality, and text orientation.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **69** | **41**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/margin-block-end\n   */\n  marginBlockEnd?: MarginBlockEndProperty<TLength> | MarginBlockEndProperty<TLength>[];\n  /**\n   * The **`margin-block-start`** CSS property defines the logical block start margin of an element, which maps to a physical margin depending on the element's writing mode, directionality, and text orientation.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **69** | **41**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/margin-block-start\n   */\n  marginBlockStart?: MarginBlockStartProperty<TLength> | MarginBlockStartProperty<TLength>[];\n  /**\n   * The **`margin-bottom`** CSS property sets the margin area on the bottom of an element. A positive value places it farther from its neighbors, while a negative value places it closer.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **3** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/margin-bottom\n   */\n  marginBottom?: MarginBottomProperty<TLength> | MarginBottomProperty<TLength>[];\n  /**\n   * The **`margin-inline`** CSS property defines the logical inline start and end margins of an element, which maps to physical margins depending on the element's writing mode, directionality, and text orientation.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **66**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/margin-inline\n   */\n  marginInline?: MarginInlineProperty<TLength> | MarginInlineProperty<TLength>[];\n  /**\n   * The **`margin-inline-end`** CSS property defines the logical inline end margin of an element, which maps to a physical margin depending on the element's writing mode, directionality, and text orientation. In other words, it corresponds to the `margin-top`, `margin-right`, `margin-bottom` or `margin-left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `0`\n   *\n   * |          Chrome          |        Firefox        |          Safari          | Edge | IE  |\n   * | :----------------------: | :-------------------: | :----------------------: | :--: | :-: |\n   * |          **69**          |        **41**         |         **12.1**         |  No  | No  |\n   * | 2 _(-webkit-margin-end)_ | 3 _(-moz-margin-end)_ | 3 _(-webkit-margin-end)_ |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/margin-inline-end\n   */\n  marginInlineEnd?: MarginInlineEndProperty<TLength> | MarginInlineEndProperty<TLength>[];\n  /**\n   * The **`margin-inline-start`** CSS property defines the logical inline start margin of an element, which maps to a physical margin depending on the element's writing mode, directionality, and text orientation. It corresponds to the `margin-top`, `margin-right`, `margin-bottom`, or `margin-left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `0`\n   *\n   * |           Chrome           |         Firefox         |           Safari           | Edge | IE  |\n   * | :------------------------: | :---------------------: | :------------------------: | :--: | :-: |\n   * |           **69**           |         **41**          |          **12.1**          |  No  | No  |\n   * | 2 _(-webkit-margin-start)_ | 3 _(-moz-margin-start)_ | 3 _(-webkit-margin-start)_ |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/margin-inline-start\n   */\n  marginInlineStart?: MarginInlineStartProperty<TLength> | MarginInlineStartProperty<TLength>[];\n  /**\n   * The **`margin-left`** CSS property sets the margin area on the left side of an element. A positive value places it farther from its neighbors, while a negative value places it closer.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **3** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/margin-left\n   */\n  marginLeft?: MarginLeftProperty<TLength> | MarginLeftProperty<TLength>[];\n  /**\n   * The **`margin-right`** CSS property sets the margin area on the right side of an element. A positive value places it farther from its neighbors, while a negative value places it closer.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **3** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/margin-right\n   */\n  marginRight?: MarginRightProperty<TLength> | MarginRightProperty<TLength>[];\n  /**\n   * The **`margin-top`** CSS property sets the margin area on the top of an element. A positive value places it farther from its neighbors, while a negative value places it closer.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **3** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/margin-top\n   */\n  marginTop?: MarginTopProperty<TLength> | MarginTopProperty<TLength>[];\n  /**\n   * The **`mask-border-mode`** CSS property specifies the blending mode used in a mask border.\n   *\n   * **Initial value**: `alpha`\n   */\n  maskBorderMode?: MaskBorderModeProperty | MaskBorderModeProperty[];\n  /**\n   * The **`mask-border-outset`** CSS property specifies the distance by which an element's mask border is set out from its border box.\n   *\n   * **Initial value**: `0`\n   */\n  maskBorderOutset?: MaskBorderOutsetProperty<TLength> | MaskBorderOutsetProperty<TLength>[];\n  /**\n   * The **`mask-border-repeat`** CSS property sets how the edge regions of a source image are adjusted to fit the dimensions of an element's mask border.\n   *\n   * **Initial value**: `stretch`\n   */\n  maskBorderRepeat?: MaskBorderRepeatProperty | MaskBorderRepeatProperty[];\n  /**\n   * The **`mask-border-slice`** CSS property divides the image set by `mask-border-source` into regions. These regions are used to form the components of an element's mask border.\n   *\n   * **Initial value**: `0`\n   */\n  maskBorderSlice?: MaskBorderSliceProperty | MaskBorderSliceProperty[];\n  /**\n   * The **`mask-border-source`** CSS property sets the source image used to create an element's mask border.\n   *\n   * **Initial value**: `none`\n   */\n  maskBorderSource?: MaskBorderSourceProperty | MaskBorderSourceProperty[];\n  /**\n   * The **`mask-border-width`** CSS property sets the width of an element's mask border.\n   *\n   * **Initial value**: `auto`\n   */\n  maskBorderWidth?: MaskBorderWidthProperty<TLength> | MaskBorderWidthProperty<TLength>[];\n  /**\n   * The **`mask-clip`** CSS property determines the area, which is affected by a mask. The painted content of an element must be restricted to this area.\n   *\n   * **Initial value**: `border-box`\n   *\n   * |   Chrome    | Firefox |   Safari    | Edge | IE  |\n   * | :---------: | :-----: | :---------: | :--: | :-: |\n   * | **1** _-x-_ | **53**  | **4** _-x-_ |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/mask-clip\n   */\n  maskClip?: MaskClipProperty | MaskClipProperty[];\n  /**\n   * The **`mask-composite`** CSS property represents a compositing operation used on the current mask layer with the mask layers below it.\n   *\n   * **Initial value**: `add`\n   *\n   * | Chrome | Firefox | Safari |  Edge  | IE  |\n   * | :----: | :-----: | :----: | :----: | :-: |\n   * |   No   | **53**  |   No   | **18** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/mask-composite\n   */\n  maskComposite?: MaskCompositeProperty | MaskCompositeProperty[];\n  /**\n   * The **`mask-image`** CSS property sets the image that is used as mask layer for an element.\n   *\n   * **Initial value**: `none`\n   *\n   * |   Chrome    | Firefox |   Safari    |  Edge  | IE  |\n   * | :---------: | :-----: | :---------: | :----: | :-: |\n   * | **1** _-x-_ | **53**  | **4** _-x-_ | **16** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/mask-image\n   */\n  maskImage?: MaskImageProperty | MaskImageProperty[];\n  /**\n   * The **`mask-mode`** CSS property sets whether the mask reference defined by `mask-image` is treated as a luminance or alpha mask.\n   *\n   * **Initial value**: `match-source`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **53**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/mask-mode\n   */\n  maskMode?: MaskModeProperty | MaskModeProperty[];\n  /**\n   * The **`mask-origin`** CSS property sets the origin of a mask.\n   *\n   * **Initial value**: `border-box`\n   *\n   * |   Chrome    | Firefox |   Safari    | Edge | IE  |\n   * | :---------: | :-----: | :---------: | :--: | :-: |\n   * | **1** _-x-_ | **53**  | **4** _-x-_ |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/mask-origin\n   */\n  maskOrigin?: MaskOriginProperty | MaskOriginProperty[];\n  /**\n   * The **`mask-position`** CSS property sets the initial position, relative to the mask position layer set by `mask-origin`, for each defined mask image.\n   *\n   * **Initial value**: `center`\n   *\n   * |   Chrome    | Firefox |    Safari     |  Edge  | IE  |\n   * | :---------: | :-----: | :-----------: | :----: | :-: |\n   * | **1** _-x-_ | **53**  | **3.2** _-x-_ | **18** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/mask-position\n   */\n  maskPosition?: MaskPositionProperty<TLength> | MaskPositionProperty<TLength>[];\n  /**\n   * The **`mask-repeat`** CSS property sets how mask images are repeated. A mask image can be repeated along the horizontal axis, the vertical axis, both axes, or not repeated at all.\n   *\n   * **Initial value**: `no-repeat`\n   *\n   * |   Chrome    | Firefox |    Safari     |  Edge  | IE  |\n   * | :---------: | :-----: | :-----------: | :----: | :-: |\n   * | **1** _-x-_ | **53**  | **3.2** _-x-_ | **18** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/mask-repeat\n   */\n  maskRepeat?: MaskRepeatProperty | MaskRepeatProperty[];\n  /**\n   * The **`mask-size`** CSS property specifies the sizes of the mask images. The size of the image can be fully or partially constrained in order to preserve its intrinsic ratio.\n   *\n   * **Initial value**: `auto`\n   *\n   * |   Chrome    | Firefox |   Safari    |  Edge  | IE  |\n   * | :---------: | :-----: | :---------: | :----: | :-: |\n   * | **4** _-x-_ | **53**  | **4** _-x-_ | **18** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/mask-size\n   */\n  maskSize?: MaskSizeProperty<TLength> | MaskSizeProperty<TLength>[];\n  /**\n   * The **`mask-type`** CSS property sets whether an SVG `<mask>` element is used as a _luminance_ or an _alpha_ mask. It applies to the `<mask>` element itself.\n   *\n   * **Initial value**: `luminance`\n   *\n   * | Chrome | Firefox | Safari  | Edge | IE  |\n   * | :----: | :-----: | :-----: | :--: | :-: |\n   * | **24** | **35**  | **6.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/mask-type\n   */\n  maskType?: MaskTypeProperty | MaskTypeProperty[];\n  /**\n   * The `**max-block-size**` CSS property specifies the maximum size of an element in the direction opposite that of the writing direction as specified by `writing-mode`. That is, if the writing direction is horizontal, then `max-block-size` is equivalent to `max-height`; if the writing direction is vertical, `max-block-size` is the same as `max-width`.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **57** | **41**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/max-block-size\n   */\n  maxBlockSize?: MaxBlockSizeProperty<TLength> | MaxBlockSizeProperty<TLength>[];\n  /**\n   * The **`max-height`** CSS property sets the maximum height of an element. It prevents the used value of the `height` property from becoming larger than the value specified for `max-height`.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari  |  Edge  |  IE   |\n   * | :----: | :-----: | :-----: | :----: | :---: |\n   * | **18** |  **1**  | **1.3** | **12** | **7** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/max-height\n   */\n  maxHeight?: MaxHeightProperty<TLength> | MaxHeightProperty<TLength>[];\n  /**\n   * The **`max-inline-size`** CSS property defines the horizontal or vertical maximum size of an element's block depending on its writing mode. It corresponds to the `max-width` or the `max-height` property depending on the value defined for `writing-mode`. If the writing mode is vertically oriented, the value of `max-inline-size` relates to the maximal height of the element, otherwise it relates to the maximal width of the element. It relates to `max-block-size`, which defines the other dimension of the element.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox |   Safari   | Edge | IE  |\n   * | :----: | :-----: | :--------: | :--: | :-: |\n   * | **57** | **41**  |  **12.1**  |  No  | No  |\n   * |        |         | 10.1 _-x-_ |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/max-inline-size\n   */\n  maxInlineSize?: MaxInlineSizeProperty<TLength> | MaxInlineSizeProperty<TLength>[];\n  /** **Initial value**: `none` */\n  maxLines?: MaxLinesProperty | MaxLinesProperty[];\n  /**\n   * The **`max-width`** CSS property sets the maximum width of an element. It prevents the used value of the `width` property from becoming larger than the value specified by `max-width`.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **7** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/max-width\n   */\n  maxWidth?: MaxWidthProperty<TLength> | MaxWidthProperty<TLength>[];\n  /**\n   * The **`min-block-size`** CSS property defines the minimum horizontal or vertical size of an element's block, depending on its writing mode. It corresponds to either the `min-width` or the `min-height` property, depending on the value of `writing-mode`.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **57** | **41**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/min-block-size\n   */\n  minBlockSize?: MinBlockSizeProperty<TLength> | MinBlockSizeProperty<TLength>[];\n  /**\n   * The **`min-height`** CSS property sets the minimum height of an element. It prevents the used value of the `height` property from becoming smaller than the value specified for `min-height`.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari  |  Edge  |  IE   |\n   * | :----: | :-----: | :-----: | :----: | :---: |\n   * | **1**  |  **3**  | **1.3** | **12** | **7** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/min-height\n   */\n  minHeight?: MinHeightProperty<TLength> | MinHeightProperty<TLength>[];\n  /**\n   * The **`min-inline-size`** CSS property defines the horizontal or vertical minimal size of an element's block, depending on its writing mode. It corresponds to either the `min-width` or the `min-height` property, depending on the value of `writing-mode`.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **57** | **41**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/min-inline-size\n   */\n  minInlineSize?: MinInlineSizeProperty<TLength> | MinInlineSizeProperty<TLength>[];\n  /**\n   * The **`min-width`** CSS property sets the minimum width of an element. It prevents the used value of the `width` property from becoming smaller than the value specified for `min-width`.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **7** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/min-width\n   */\n  minWidth?: MinWidthProperty<TLength> | MinWidthProperty<TLength>[];\n  /**\n   * The **`mix-blend-mode`** CSS property sets how an element's content should blend with the content of the element's parent and the element's background.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **41** | **32**  | **8**  |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/mix-blend-mode\n   */\n  mixBlendMode?: MixBlendModeProperty | MixBlendModeProperty[];\n  /**\n   * The **`offset-distance`** CSS property specifies a position along an `offset-path`.\n   *\n   * **Initial value**: `0`\n   *\n   * |         Chrome         | Firefox | Safari | Edge | IE  |\n   * | :--------------------: | :-----: | :----: | :--: | :-: |\n   * |         **55**         | **72**  |   No   |  No  | No  |\n   * | 46 _(motion-distance)_ |         |        |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/offset-distance\n   */\n  motionDistance?: OffsetDistanceProperty<TLength> | OffsetDistanceProperty<TLength>[];\n  /**\n   * The **`offset-path`** CSS property specifies a motion path for an element to follow and defines the element's positioning within the parent container or SVG coordinate system.\n   *\n   * **Initial value**: `none`\n   *\n   * |       Chrome       | Firefox | Safari | Edge | IE  |\n   * | :----------------: | :-----: | :----: | :--: | :-: |\n   * |       **55**       | **72**  |   No   |  No  | No  |\n   * | 46 _(motion-path)_ |         |        |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/offset-path\n   */\n  motionPath?: OffsetPathProperty | OffsetPathProperty[];\n  /**\n   * The **`offset-rotate`** CSS property defines the direction of the element while positioning along the offset path.\n   *\n   * **Initial value**: `auto`\n   *\n   * |         Chrome         | Firefox | Safari | Edge | IE  |\n   * | :--------------------: | :-----: | :----: | :--: | :-: |\n   * |         **56**         | **72**  |   No   |  No  | No  |\n   * | 46 _(motion-rotation)_ |         |        |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/offset-rotate\n   */\n  motionRotation?: OffsetRotateProperty | OffsetRotateProperty[];\n  /**\n   * The **`object-fit`** CSS property sets how the content of a replaced element, such as an `<img>` or `<video>`, should be resized to fit its container.\n   *\n   * **Initial value**: `fill`\n   *\n   * | Chrome | Firefox | Safari |  Edge  | IE  |\n   * | :----: | :-----: | :----: | :----: | :-: |\n   * | **31** | **36**  | **10** | **16** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/object-fit\n   */\n  objectFit?: ObjectFitProperty | ObjectFitProperty[];\n  /**\n   * The **`object-position`** CSS property specifies the alignment of the selected replaced element's contents within the element's box. Areas of the box which aren't covered by the replaced element's object will show the element's background.\n   *\n   * **Initial value**: `50% 50%`\n   *\n   * | Chrome | Firefox | Safari |  Edge  | IE  |\n   * | :----: | :-----: | :----: | :----: | :-: |\n   * | **31** | **36**  | **10** | **16** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/object-position\n   */\n  objectPosition?: ObjectPositionProperty<TLength> | ObjectPositionProperty<TLength>[];\n  /**\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **79** | **72**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/offset-anchor\n   */\n  offsetAnchor?: OffsetAnchorProperty<TLength> | OffsetAnchorProperty<TLength>[];\n  /**\n   * The **`offset-distance`** CSS property specifies a position along an `offset-path`.\n   *\n   * **Initial value**: `0`\n   *\n   * |         Chrome         | Firefox | Safari | Edge | IE  |\n   * | :--------------------: | :-----: | :----: | :--: | :-: |\n   * |         **55**         | **72**  |   No   |  No  | No  |\n   * | 46 _(motion-distance)_ |         |        |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/offset-distance\n   */\n  offsetDistance?: OffsetDistanceProperty<TLength> | OffsetDistanceProperty<TLength>[];\n  /**\n   * The **`offset-path`** CSS property specifies a motion path for an element to follow and defines the element's positioning within the parent container or SVG coordinate system.\n   *\n   * **Initial value**: `none`\n   *\n   * |       Chrome       | Firefox | Safari | Edge | IE  |\n   * | :----------------: | :-----: | :----: | :--: | :-: |\n   * |       **55**       | **72**  |   No   |  No  | No  |\n   * | 46 _(motion-path)_ |         |        |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/offset-path\n   */\n  offsetPath?: OffsetPathProperty | OffsetPathProperty[];\n  /**\n   * The **`offset-rotate`** CSS property defines the direction of the element while positioning along the offset path.\n   *\n   * **Initial value**: `auto`\n   *\n   * |         Chrome         | Firefox | Safari | Edge | IE  |\n   * | :--------------------: | :-----: | :----: | :--: | :-: |\n   * |         **56**         | **72**  |   No   |  No  | No  |\n   * | 46 _(motion-rotation)_ |         |        |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/offset-rotate\n   */\n  offsetRotate?: OffsetRotateProperty | OffsetRotateProperty[];\n  /**\n   * The **`offset-rotate`** CSS property defines the direction of the element while positioning along the offset path.\n   *\n   * **Initial value**: `auto`\n   *\n   * |         Chrome         | Firefox | Safari | Edge | IE  |\n   * | :--------------------: | :-----: | :----: | :--: | :-: |\n   * |         **56**         | **72**  |   No   |  No  | No  |\n   * | 46 _(motion-rotation)_ |         |        |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/offset-rotate\n   */\n  offsetRotation?: OffsetRotateProperty | OffsetRotateProperty[];\n  /**\n   * The **`opacity`** CSS property sets the transparency of an element or the degree to which content behind an element is visible.\n   *\n   * **Initial value**: `1.0`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **2**  | **12** | **9** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/opacity\n   */\n  opacity?: OpacityProperty | OpacityProperty[];\n  /**\n   * The **`order`** CSS property sets the order to lay out an item in a flex or grid container. Items in a container are sorted by ascending `order` value and then by their source code order.\n   *\n   * **Initial value**: `0`\n   *\n   * |  Chrome  | Firefox | Safari  |  Edge  |    IE    |\n   * | :------: | :-----: | :-----: | :----: | :------: |\n   * |  **29**  | **20**  |  **9**  | **12** |  **11**  |\n   * | 21 _-x-_ |         | 7 _-x-_ |        | 10 _-x-_ |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/order\n   */\n  order?: GlobalsNumber | GlobalsNumber[];\n  /**\n   * The **`orphans`** CSS property sets the minimum number of lines in a block container that must be shown at the _bottom_ of a page, region, or column.\n   *\n   * **Initial value**: `2`\n   *\n   * | Chrome | Firefox | Safari  |  Edge  |  IE   |\n   * | :----: | :-----: | :-----: | :----: | :---: |\n   * | **25** |   No    | **1.3** | **12** | **8** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/orphans\n   */\n  orphans?: GlobalsNumber | GlobalsNumber[];\n  /**\n   * The **`outline-color`** CSS property sets the color of an element's outline.\n   *\n   * **Initial value**: `invert`, for browsers supporting it, `currentColor` for the other\n   *\n   * | Chrome | Firefox | Safari  |  Edge  |  IE   |\n   * | :----: | :-----: | :-----: | :----: | :---: |\n   * | **1**  | **1.5** | **1.2** | **12** | **8** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/outline-color\n   */\n  outlineColor?: OutlineColorProperty | OutlineColorProperty[];\n  /**\n   * The **`outline-offset`** CSS property sets the amount of space between an outline and the edge or border of an element.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari  |  Edge  | IE  |\n   * | :----: | :-----: | :-----: | :----: | :-: |\n   * | **1**  | **1.5** | **1.2** | **15** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/outline-offset\n   */\n  outlineOffset?: OutlineOffsetProperty<TLength> | OutlineOffsetProperty<TLength>[];\n  /**\n   * The **`outline-style`** CSS property sets the style of an element's outline. An outline is a line that is drawn around an element, outside the `border`.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari  |  Edge  |  IE   |\n   * | :----: | :-----: | :-----: | :----: | :---: |\n   * | **1**  | **1.5** | **1.2** | **12** | **8** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/outline-style\n   */\n  outlineStyle?: OutlineStyleProperty | OutlineStyleProperty[];\n  /**\n   * The **`outline-width`** CSS property sets the thickness of an element's outline. An outline is a line that is drawn around an element, outside the `border`.\n   *\n   * **Initial value**: `medium`\n   *\n   * | Chrome | Firefox | Safari  |  Edge  |  IE   |\n   * | :----: | :-----: | :-----: | :----: | :---: |\n   * | **1**  | **1.5** | **1.2** | **12** | **8** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/outline-width\n   */\n  outlineWidth?: OutlineWidthProperty<TLength> | OutlineWidthProperty<TLength>[];\n  /**\n   * The **`overflow`** CSS property sets what to do when an element's content is too big to fit in its block formatting context. It is a shorthand for `overflow-x` and `overflow-y`.\n   *\n   * **Initial value**: `visible`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/overflow\n   */\n  overflow?: OverflowProperty | OverflowProperty[];\n  /**\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **56** | **66**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/overflow-anchor\n   */\n  overflowAnchor?: OverflowAnchorProperty | OverflowAnchorProperty[];\n  /**\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **69**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/overflow-block\n   */\n  overflowBlock?: OverflowBlockProperty | OverflowBlockProperty[];\n  /**\n   * The **`overflow-clip-box`** CSS property specifies relative to which box the clipping happens when there is an overflow. It is short hand for the `overflow-clip-box-inline` and `overflow-clip-box-block` properties.\n   *\n   * **Initial value**: `padding-box`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **29**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Mozilla/CSS/overflow-clip-box\n   */\n  overflowClipBox?: OverflowClipBoxProperty | OverflowClipBoxProperty[];\n  /**\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **69**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/overflow-inline\n   */\n  overflowInline?: OverflowInlineProperty | OverflowInlineProperty[];\n  /**\n   * The `**overflow-wrap**` CSS property sets whether the browser should insert line breaks within words to prevent text from overflowing its content box.\n   *\n   * **Initial value**: `normal`\n   *\n   * |     Chrome      |      Firefox      |     Safari      |       Edge       |          IE           |\n   * | :-------------: | :---------------: | :-------------: | :--------------: | :-------------------: |\n   * |     **23**      |      **49**       |     **6.1**     |      **18**      | **5.5** _(word-wrap)_ |\n   * | 1 _(word-wrap)_ | 3.5 _(word-wrap)_ | 1 _(word-wrap)_ | 12 _(word-wrap)_ |                       |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/overflow-wrap\n   */\n  overflowWrap?: OverflowWrapProperty | OverflowWrapProperty[];\n  /**\n   * The **`overflow-x`** CSS property sets what shows when content overflows a block-level element's left and right edges. This may be nothing, a scroll bar, or the overflow content.\n   *\n   * **Initial value**: `visible`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  | **3.5** | **3**  | **12** | **5** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/overflow-x\n   */\n  overflowX?: OverflowXProperty | OverflowXProperty[];\n  /**\n   * The **`overflow-y`** CSS property sets what shows when content overflows a block-level element's top and bottom edges. This may be nothing, a scroll bar, or the overflow content.\n   *\n   * **Initial value**: `visible`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  | **1.5** | **3**  | **12** | **5** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/overflow-y\n   */\n  overflowY?: OverflowYProperty | OverflowYProperty[];\n  /**\n   * The **`overscroll-behavior`** CSS property sets what a browser does when reaching the boundary of a scrolling area. It's a shorthand for `overscroll-behavior-x` and `overscroll-behavior-y`.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari |  Edge  | IE  |\n   * | :----: | :-----: | :----: | :----: | :-: |\n   * | **63** | **59**  |   No   | **18** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/overscroll-behavior\n   */\n  overscrollBehavior?: OverscrollBehaviorProperty | OverscrollBehaviorProperty[];\n  /**\n   * The **`overscroll-behavior-block`** CSS property sets the browser's behavior when the block direction boundary of a scrolling area is reached.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **77** | **73**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/overscroll-behavior-block\n   */\n  overscrollBehaviorBlock?: OverscrollBehaviorBlockProperty | OverscrollBehaviorBlockProperty[];\n  /**\n   * The **`overscroll-behavior-inline`** CSS property sets the browser's behavior when the inline direction boundary of a scrolling area is reached.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **77** | **73**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/overscroll-behavior-inline\n   */\n  overscrollBehaviorInline?: OverscrollBehaviorInlineProperty | OverscrollBehaviorInlineProperty[];\n  /**\n   * The **`overscroll-behavior-x`** CSS property sets the browser's behavior when the horizontal boundary of a scrolling area is reached.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari |  Edge  | IE  |\n   * | :----: | :-----: | :----: | :----: | :-: |\n   * | **63** | **59**  |   No   | **18** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/overscroll-behavior-x\n   */\n  overscrollBehaviorX?: OverscrollBehaviorXProperty | OverscrollBehaviorXProperty[];\n  /**\n   * The **`overscroll-behavior-y`** CSS property sets the browser's behavior when the vertical boundary of a scrolling area is reached.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari |  Edge  | IE  |\n   * | :----: | :-----: | :----: | :----: | :-: |\n   * | **63** | **59**  |   No   | **18** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/overscroll-behavior-y\n   */\n  overscrollBehaviorY?: OverscrollBehaviorYProperty | OverscrollBehaviorYProperty[];\n  /**\n   * The **`padding-block`** CSS property defines the logical block start and end padding of an element, which maps to physical padding properties depending on the element's writing mode, directionality, and text orientation.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **66**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/padding-block\n   */\n  paddingBlock?: PaddingBlockProperty<TLength> | PaddingBlockProperty<TLength>[];\n  /**\n   * The **`padding-block-end`** CSS property defines the logical block end padding of an element, which maps to a physical padding depending on the element's writing mode, directionality, and text orientation. It corresponds to the `padding-top`, `padding-right`, `padding-bottom`, or `padding-left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **69** | **41**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/padding-block-end\n   */\n  paddingBlockEnd?: PaddingBlockEndProperty<TLength> | PaddingBlockEndProperty<TLength>[];\n  /**\n   * The **`padding-block-start`** CSS property defines the logical block start padding of an element, which maps to a physical padding depending on the element's writing mode, directionality, and text orientation. It corresponds to the `padding-top`, `padding-right`, `padding-bottom`, or `padding-left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **69** | **41**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/padding-block-start\n   */\n  paddingBlockStart?: PaddingBlockStartProperty<TLength> | PaddingBlockStartProperty<TLength>[];\n  /**\n   * The **`padding-bottom`** CSS property sets the height of the padding area on the bottom of an element.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/padding-bottom\n   */\n  paddingBottom?: PaddingBottomProperty<TLength> | PaddingBottomProperty<TLength>[];\n  /**\n   * The **`padding-inline`** CSS property defines the logical inline start and end padding of an element, which maps to physical padding properties depending on the element's writing mode, directionality, and text orientation.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **66**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/padding-inline\n   */\n  paddingInline?: PaddingInlineProperty<TLength> | PaddingInlineProperty<TLength>[];\n  /**\n   * The **`padding-inline-end`** CSS property defines the logical inline end padding of an element, which maps to a physical padding depending on the element's writing mode, directionality, and text orientation. It corresponds to the `padding-top`, `padding-right`, `padding-bottom`, or `padding-left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `0`\n   *\n   * |          Chrome           |        Firefox         |          Safari           | Edge | IE  |\n   * | :-----------------------: | :--------------------: | :-----------------------: | :--: | :-: |\n   * |          **69**           |         **41**         |         **12.1**          |  No  | No  |\n   * | 2 _(-webkit-padding-end)_ | 3 _(-moz-padding-end)_ | 3 _(-webkit-padding-end)_ |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/padding-inline-end\n   */\n  paddingInlineEnd?: PaddingInlineEndProperty<TLength> | PaddingInlineEndProperty<TLength>[];\n  /**\n   * The **`padding-inline-start`** CSS property defines the logical inline start padding of an element, which maps to a physical padding depending on the element's writing mode, directionality, and text orientation. It corresponds to the `padding-top`, `padding-right`, `padding-bottom`, or `padding-left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `0`\n   *\n   * |           Chrome            |         Firefox          |           Safari            | Edge | IE  |\n   * | :-------------------------: | :----------------------: | :-------------------------: | :--: | :-: |\n   * |           **69**            |          **41**          |          **12.1**           |  No  | No  |\n   * | 2 _(-webkit-padding-start)_ | 3 _(-moz-padding-start)_ | 3 _(-webkit-padding-start)_ |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/padding-inline-start\n   */\n  paddingInlineStart?: PaddingInlineStartProperty<TLength> | PaddingInlineStartProperty<TLength>[];\n  /**\n   * The **`padding-left`** CSS property sets the width of the padding area on the left side of an element.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/padding-left\n   */\n  paddingLeft?: PaddingLeftProperty<TLength> | PaddingLeftProperty<TLength>[];\n  /**\n   * The **`padding-right`** CSS property sets the width of the padding area on the right side of an element.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/padding-right\n   */\n  paddingRight?: PaddingRightProperty<TLength> | PaddingRightProperty<TLength>[];\n  /**\n   * The **`padding-top`** padding area on the top of an element.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/padding-top\n   */\n  paddingTop?: PaddingTopProperty<TLength> | PaddingTopProperty<TLength>[];\n  /**\n   * The **`page-break-after`** CSS property adjusts page breaks _after_ the current element.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari  |  Edge  |  IE   |\n   * | :----: | :-----: | :-----: | :----: | :---: |\n   * | **1**  |  **1**  | **1.2** | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/page-break-after\n   */\n  pageBreakAfter?: PageBreakAfterProperty | PageBreakAfterProperty[];\n  /**\n   * The **`page-break-before`** CSS property adjusts page breaks _before_ the current element.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari  |  Edge  |  IE   |\n   * | :----: | :-----: | :-----: | :----: | :---: |\n   * | **1**  |  **1**  | **1.2** | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/page-break-before\n   */\n  pageBreakBefore?: PageBreakBeforeProperty | PageBreakBeforeProperty[];\n  /**\n   * The **`page-break-inside`** CSS property adjusts page breaks _inside_ the current element.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari  |  Edge  |  IE   |\n   * | :----: | :-----: | :-----: | :----: | :---: |\n   * | **1**  | **19**  | **1.3** | **12** | **8** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/page-break-inside\n   */\n  pageBreakInside?: PageBreakInsideProperty | PageBreakInsideProperty[];\n  /**\n   * The **`paint-order`** CSS property lets you control the order in which the fill and stroke (and painting markers) of text content and shapes are drawn.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari |  Edge  | IE  |\n   * | :----: | :-----: | :----: | :----: | :-: |\n   * | **35** | **60**  | **8**  | **17** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/paint-order\n   */\n  paintOrder?: PaintOrderProperty | PaintOrderProperty[];\n  /**\n   * The **`perspective`** CSS property determines the distance between the z=0 plane and the user in order to give a 3D-positioned element some perspective. Each 3D element with z>0 becomes larger; each 3D-element with z<0 becomes smaller. The strength of the effect is determined by the value of this property.\n   *\n   * **Initial value**: `none`\n   *\n   * |  Chrome  | Firefox  | Safari  |  Edge  |   IE   |\n   * | :------: | :------: | :-----: | :----: | :----: |\n   * |  **36**  |  **16**  |  **9**  | **12** | **10** |\n   * | 12 _-x-_ | 10 _-x-_ | 4 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/perspective\n   */\n  perspective?: PerspectiveProperty<TLength> | PerspectiveProperty<TLength>[];\n  /**\n   * The **`perspective-origin`** CSS property determines the position at which the viewer is looking. It is used as the _vanishing point_ by the `perspective` property.\n   *\n   * **Initial value**: `50% 50%`\n   *\n   * |  Chrome  | Firefox  | Safari  |  Edge  |   IE   |\n   * | :------: | :------: | :-----: | :----: | :----: |\n   * |  **36**  |  **16**  |  **9**  | **12** | **10** |\n   * | 12 _-x-_ | 10 _-x-_ | 4 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/perspective-origin\n   */\n  perspectiveOrigin?: PerspectiveOriginProperty<TLength> | PerspectiveOriginProperty<TLength>[];\n  /**\n   * The `**place-content**` CSS property is a shorthand for `align-content` and `justify-content`. It can be used in any layout method which utilizes both of these alignment values.\n   *\n   * **Initial value**: `normal`\n   *\n   * ---\n   *\n   * _Supported in Flex Layout_\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **59** | **45**  | **9**  |  No  | No  |\n   *\n   * ---\n   *\n   * _Supported in Grid Layout_\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **59** | **53**  | **11** |  No  | No  |\n   *\n   * ---\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/place-content\n   */\n  placeContent?: PlaceContentProperty | PlaceContentProperty[];\n  /**\n   * The **`pointer-events`** CSS property sets under what circumstances (if any) a particular graphic element can become the target of mouse events.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE   |\n   * | :----: | :-----: | :----: | :----: | :----: |\n   * | **1**  | **1.5** | **4**  | **12** | **11** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/pointer-events\n   */\n  pointerEvents?: PointerEventsProperty | PointerEventsProperty[];\n  /**\n   * The **`position`** CSS property sets how an element is positioned in a document. The `top`, `right`, `bottom`, and `left` properties determine the final location of positioned elements.\n   *\n   * **Initial value**: `static`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/position\n   */\n  position?: PositionProperty | PositionProperty[];\n  /**\n   * The **`quotes`** CSS property sets how quotation marks appear.\n   *\n   * **Initial value**: depends on user agent\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **11** | **1.5** | **9**  | **12** | **8** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/quotes\n   */\n  quotes?: QuotesProperty | QuotesProperty[];\n  /**\n   * The **`resize`** CSS property sets whether an element is resizable, and if so, in which directions.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **1**  |  **4**  | **3**  |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/resize\n   */\n  resize?: ResizeProperty | ResizeProperty[];\n  /**\n   * The **`right`** CSS property participates in specifying the horizontal position of a _positioned element_. It has no effect on non-positioned elements.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE    |\n   * | :----: | :-----: | :----: | :----: | :-----: |\n   * | **1**  |  **1**  | **1**  | **12** | **5.5** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/right\n   */\n  right?: RightProperty<TLength> | RightProperty<TLength>[];\n  /**\n   * The **`rotate`** CSS property allows you to specify rotation transforms individually and independantly of the `transform` property. This maps better to typical user interface usage, and saves having to remember the exact order of transform functions to specify in the `transform` value.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **72**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/rotate\n   */\n  rotate?: RotateProperty | RotateProperty[];\n  /**\n   * The **`row-gap`** CSS property sets the size of the gap (gutter) between an element's grid rows.\n   *\n   * **Initial value**: `normal`\n   *\n   * ---\n   *\n   * _Supported in Flex Layout_\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **63**  |   No   |  No  | No  |\n   *\n   * ---\n   *\n   * _Supported in Grid Layout_\n   *\n   * |       Chrome        |       Firefox       |          Safari           |  Edge  | IE  |\n   * | :-----------------: | :-----------------: | :-----------------------: | :----: | :-: |\n   * |       **66**        |       **61**        | **10.1** _(grid-row-gap)_ | **16** | No  |\n   * | 57 _(grid-row-gap)_ | 52 _(grid-row-gap)_ |                           |        |     |\n   *\n   * ---\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/row-gap\n   */\n  rowGap?: RowGapProperty<TLength> | RowGapProperty<TLength>[];\n  /**\n   * The `**ruby-align**` CSS property defines the distribution of the different ruby elements over the base.\n   *\n   * **Initial value**: `space-around`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **38**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/ruby-align\n   */\n  rubyAlign?: RubyAlignProperty | RubyAlignProperty[];\n  /** **Initial value**: `separate` */\n  rubyMerge?: RubyMergeProperty | RubyMergeProperty[];\n  /**\n   * The `**ruby-position**` CSS property defines the position of a ruby element relatives to its base element. It can be position over the element (`over`), under it (`under`), or between the characters, on their right side (`inter-character`).\n   *\n   * **Initial value**: `over`\n   *\n   * | Chrome | Firefox | Safari |  Edge  | IE  |\n   * | :----: | :-----: | :----: | :----: | :-: |\n   * |   No   | **38**  |   No   | **12** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/ruby-position\n   */\n  rubyPosition?: RubyPositionProperty | RubyPositionProperty[];\n  /**\n   * The **`scale`** CSS property allows you to specify scale transforms individually and independantly of the `transform` property. This maps better to typical user interface usage, and saves having to remember the exact order of transform functions to specify in the `transform` value.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **72**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scale\n   */\n  scale?: ScaleProperty | ScaleProperty[];\n  /**\n   * The **`scroll-behavior`** CSS property sets the behavior for a scrolling box when scrolling is triggered by the navigation or CSSOM scrolling APIs.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **61** | **36**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-behavior\n   */\n  scrollBehavior?: ScrollBehaviorProperty | ScrollBehaviorProperty[];\n  /**\n   * The **`scroll-margin`** property is a shorthand property which sets all of the `scroll-margin` longhands, assigning values much like the `margin` property does for the `margin-*` longhands.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **68**  | **11** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-margin\n   */\n  scrollMargin?: ScrollMarginProperty<TLength> | ScrollMarginProperty<TLength>[];\n  /**\n   * The `scroll-margin-block` property is a shorthand property which sets the scroll-margin longhands in the block dimension.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **68**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-margin-block\n   */\n  scrollMarginBlock?: ScrollMarginBlockProperty<TLength> | ScrollMarginBlockProperty<TLength>[];\n  /**\n   * The `scroll-margin-block-end` property defines the margin of the scroll snap area at the end of the block dimension that is used for snapping this box to the snapport. The scroll snap area is determined by taking the transformed border box, finding its rectangular bounding box (axis-aligned in the scroll container’s coordinate space), then adding the specified outsets.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **68**  | **11** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-margin-block-end\n   */\n  scrollMarginBlockEnd?: ScrollMarginBlockEndProperty<TLength> | ScrollMarginBlockEndProperty<TLength>[];\n  /**\n   * The `scroll-margin-block-start` property defines the margin of the scroll snap area at the start of the block dimension that is used for snapping this box to the snapport. The scroll snap area is determined by taking the transformed border box, finding its rectangular bounding box (axis-aligned in the scroll container’s coordinate space), then adding the specified outsets.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **68**  | **11** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-margin-block-start\n   */\n  scrollMarginBlockStart?: ScrollMarginBlockStartProperty<TLength> | ScrollMarginBlockStartProperty<TLength>[];\n  /**\n   * The `scroll-margin-bottom` property defines the bottom margin of the scroll snap area that is used for snapping this box to the snapport. The scroll snap area is determined by taking the transformed border box, finding its rectangular bounding box (axis-aligned in the scroll container’s coordinate space), then adding the specified outsets.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **68**  | **11** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-margin-bottom\n   */\n  scrollMarginBottom?: ScrollMarginBottomProperty<TLength> | ScrollMarginBottomProperty<TLength>[];\n  /**\n   * The `scroll-margin-inline` property is a shorthand property which sets the scroll-margin longhands in the inline dimension.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **68**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-margin-inline\n   */\n  scrollMarginInline?: ScrollMarginInlineProperty<TLength> | ScrollMarginInlineProperty<TLength>[];\n  /**\n   * The `scroll-margin-inline-end` property defines the margin of the scroll snap area at the end of the inline dimension that is used for snapping this box to the snapport. The scroll snap area is determined by taking the transformed border box, finding its rectangular bounding box (axis-aligned in the scroll container’s coordinate space), then adding the specified outsets.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **68**  | **11** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-margin-inline-end\n   */\n  scrollMarginInlineEnd?: ScrollMarginInlineEndProperty<TLength> | ScrollMarginInlineEndProperty<TLength>[];\n  /**\n   * The `scroll-margin-inline-start` property defines the margin of the scroll snap area at the start of the inline dimension that is used for snapping this box to the snapport. The scroll snap area is determined by taking the transformed border box, finding its rectangular bounding box (axis-aligned in the scroll container’s coordinate space), then adding the specified outsets.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **68**  | **11** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-margin-inline-start\n   */\n  scrollMarginInlineStart?: ScrollMarginInlineStartProperty<TLength> | ScrollMarginInlineStartProperty<TLength>[];\n  /**\n   * The `scroll-margin-left` property defines the left margin of the scroll snap area that is used for snapping this box to the snapport. The scroll snap area is determined by taking the transformed border box, finding its rectangular bounding box (axis-aligned in the scroll container’s coordinate space), then adding the specified outsets.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **68**  | **11** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-margin-left\n   */\n  scrollMarginLeft?: ScrollMarginLeftProperty<TLength> | ScrollMarginLeftProperty<TLength>[];\n  /**\n   * The `scroll-margin-right` property defines the right margin of the scroll snap area that is used for snapping this box to the snapport. The scroll snap area is determined by taking the transformed border box, finding its rectangular bounding box (axis-aligned in the scroll container’s coordinate space), then adding the specified outsets.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **68**  | **11** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-margin-right\n   */\n  scrollMarginRight?: ScrollMarginRightProperty<TLength> | ScrollMarginRightProperty<TLength>[];\n  /**\n   * The `scroll-margin-top` property defines the top margin of the scroll snap area that is used for snapping this box to the snapport. The scroll snap area is determined by taking the transformed border box, finding its rectangular bounding box (axis-aligned in the scroll container’s coordinate space), then adding the specified outsets.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **68**  | **11** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-margin-top\n   */\n  scrollMarginTop?: ScrollMarginTopProperty<TLength> | ScrollMarginTopProperty<TLength>[];\n  /**\n * The scroll-padding property is a shorthand property which sets all of the scroll-padding longhands, assigning values much like the padding property does for the padding-\\* longhands.  \n  \nThe scroll-padding properties define offsets for the optimal viewing region of the scrollport: the region used as the target region for placing things in view of the user. This allows the author to exclude regions of the scrollport that are obscured by other content (such as fixed-positioned toolbars or sidebars) or simply to put more breathing room between a targetted element and the edges of the scrollport.\n * \n * **Initial value**: `auto`\n * \n * | Chrome | Firefox | Safari | Edge | IE  |\n * | :----: | :-----: | :----: | :--: | :-: |\n * | **69** | **68**  | **11** |  No  | No  |\n * \n * @see https://developer.mozilla.org/docs/Web/CSS/scroll-padding\n */\n  scrollPadding?: ScrollPaddingProperty<TLength> | ScrollPaddingProperty<TLength>[];\n  /**\n * The `scroll-padding-block` property is a shorthand property which sets the scroll-padding longhands for the block dimension.  \n  \nThe scroll-padding properties define offsets for the optimal viewing region of the scrollport: the region used as the target region for placing things in view of the user. This allows the author to exclude regions of the scrollport that are obscured by other content (such as fixed-positioned toolbars or sidebars) or simply to put more breathing room between a targetted element and the edges of the scrollport.\n * \n * **Initial value**: `auto`\n * \n * | Chrome | Firefox | Safari | Edge | IE  |\n * | :----: | :-----: | :----: | :--: | :-: |\n * | **69** | **68**  |   No   |  No  | No  |\n * \n * @see https://developer.mozilla.org/docs/Web/CSS/scroll-padding-block\n */\n  scrollPaddingBlock?: ScrollPaddingBlockProperty<TLength> | ScrollPaddingBlockProperty<TLength>[];\n  /**\n   * The `scroll-padding-block-end` property defines offsets for the end edge in the block dimension of the optimal viewing region of the scrollport: the region used as the target region for placing things in view of the user. This allows the author to exclude regions of the scrollport that are obscured by other content (such as fixed-positioned toolbars or sidebars) or simply to put more breathing room between a targetted element and the edges of the scrollport.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **68**  | **11** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-padding-block-end\n   */\n  scrollPaddingBlockEnd?: ScrollPaddingBlockEndProperty<TLength> | ScrollPaddingBlockEndProperty<TLength>[];\n  /**\n   * The `scroll-padding-block-start` property defines offsets for the start edge in the block dimension of the optimal viewing region of the scrollport: the region used as the target region for placing things in view of the user. This allows the author to exclude regions of the scrollport that are obscured by other content (such as fixed-positioned toolbars or sidebars) or simply to put more breathing room between a targetted element and the edges of the scrollport.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **68**  | **11** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-padding-block-start\n   */\n  scrollPaddingBlockStart?: ScrollPaddingBlockStartProperty<TLength> | ScrollPaddingBlockStartProperty<TLength>[];\n  /**\n   * The `scroll-padding-bottom` property defines offsets for the bottom of the optimal viewing region of the scrollport: the region used as the target region for placing things in view of the user. This allows the author to exclude regions of the scrollport that are obscured by other content (such as fixed-positioned toolbars or sidebars) or simply to put more breathing room between a targetted element and the edges of the scrollport.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **68**  | **11** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-padding-bottom\n   */\n  scrollPaddingBottom?: ScrollPaddingBottomProperty<TLength> | ScrollPaddingBottomProperty<TLength>[];\n  /**\n * The `scroll-padding-inline` property is a shorthand property which sets the scroll-padding longhands for the inline dimension.  \n  \nThe scroll-padding properties define offsets for the optimal viewing region of the scrollport: the region used as the target region for placing things in view of the user. This allows the author to exclude regions of the scrollport that are obscured by other content (such as fixed-positioned toolbars or sidebars) or simply to put more breathing room between a targetted element and the edges of the scrollport.\n * \n * **Initial value**: `auto`\n * \n * | Chrome | Firefox | Safari | Edge | IE  |\n * | :----: | :-----: | :----: | :--: | :-: |\n * | **69** | **68**  |   No   |  No  | No  |\n * \n * @see https://developer.mozilla.org/docs/Web/CSS/scroll-padding-inline\n */\n  scrollPaddingInline?: ScrollPaddingInlineProperty<TLength> | ScrollPaddingInlineProperty<TLength>[];\n  /**\n   * The `scroll-padding-inline-end` property defines offsets for the end edge in the inline dimension of the optimal viewing region of the scrollport: the region used as the target region for placing things in view of the user. This allows the author to exclude regions of the scrollport that are obscured by other content (such as fixed-positioned toolbars or sidebars) or simply to put more breathing room between a targetted element and the edges of the scrollport.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **68**  | **11** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-padding-inline-end\n   */\n  scrollPaddingInlineEnd?: ScrollPaddingInlineEndProperty<TLength> | ScrollPaddingInlineEndProperty<TLength>[];\n  /**\n   * The `scroll-padding-inline-start` property defines offsets for the start edge in the inline dimension of the optimal viewing region of the scrollport: the region used as the target region for placing things in view of the user. This allows the author to exclude regions of the scrollport that are obscured by other content (such as fixed-positioned toolbars or sidebars) or simply to put more breathing room between a targetted element and the edges of the scrollport.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **68**  | **11** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-padding-inline-start\n   */\n  scrollPaddingInlineStart?: ScrollPaddingInlineStartProperty<TLength> | ScrollPaddingInlineStartProperty<TLength>[];\n  /**\n   * The `scroll-padding-left` property defines offsets for the left of the optimal viewing region of the scrollport: the region used as the target region for placing things in view of the user. This allows the author to exclude regions of the scrollport that are obscured by other content (such as fixed-positioned toolbars or sidebars) or simply to put more breathing room between a targetted element and the edges of the scrollport.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **68**  | **11** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-padding-left\n   */\n  scrollPaddingLeft?: ScrollPaddingLeftProperty<TLength> | ScrollPaddingLeftProperty<TLength>[];\n  /**\n   * The `scroll-padding-right` property defines offsets for the right of the optimal viewing region of the scrollport: the region used as the target region for placing things in view of the user. This allows the author to exclude regions of the scrollport that are obscured by other content (such as fixed-positioned toolbars or sidebars) or simply to put more breathing room between a targetted element and the edges of the scrollport.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **68**  | **11** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-padding-right\n   */\n  scrollPaddingRight?: ScrollPaddingRightProperty<TLength> | ScrollPaddingRightProperty<TLength>[];\n  /**\n   * The `scroll-padding-top` property defines offsets for the top of the optimal viewing region of the scrollport: the region used as the target region for placing things in view of the user. This allows the author to exclude regions of the scrollport that are obscured by other content (such as fixed-positioned toolbars or sidebars) or simply to put more breathing room between a targetted element and the edges of the scrollport.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **68**  | **11** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-padding-top\n   */\n  scrollPaddingTop?: ScrollPaddingTopProperty<TLength> | ScrollPaddingTopProperty<TLength>[];\n  /**\n   * The `scroll-snap-align` property specifies the box’s snap position as an alignment of its snap area (as the alignment subject) within its snap container’s snapport (as the alignment container). The two values specify the snapping alignment in the block axis and inline axis, respectively. If only one value is specified, the second value defaults to the same value.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **68**  | **11** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-snap-align\n   */\n  scrollSnapAlign?: ScrollSnapAlignProperty | ScrollSnapAlignProperty[];\n  /**\n   * The **`scroll-snap-stop`** CSS property defines whether the scroll container is allowed to \"pass over\" possible snap positions.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **75** |   No    |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-snap-stop\n   */\n  scrollSnapStop?: ScrollSnapStopProperty | ScrollSnapStopProperty[];\n  /**\n   * The **`scroll-snap-type`** CSS property sets how strictly snap points are enforced on the scroll container in case there is one.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari  |     Edge     |      IE      |\n   * | :----: | :-----: | :-----: | :----------: | :----------: |\n   * | **69** |  39-68  | **11**  | **12** _-x-_ | **10** _-x-_ |\n   * |        |         | 9 _-x-_ |              |              |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-snap-type\n   */\n  scrollSnapType?: ScrollSnapTypeProperty | ScrollSnapTypeProperty[];\n  /**\n   * The **`scrollbar-color`** CSS property sets the color of the scrollbar track and thumb.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **64**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scrollbar-color\n   */\n  scrollbarColor?: ScrollbarColorProperty | ScrollbarColorProperty[];\n  /**\n   * The `scrollbar-width` property allows the author to set the maximum thickness of an element’s scrollbars when they are shown.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **64**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scrollbar-width\n   */\n  scrollbarWidth?: ScrollbarWidthProperty | ScrollbarWidthProperty[];\n  /**\n   * The **`shape-image-threshold`** CSS property sets the alpha channel threshold used to extract the shape using an image as the value for `shape-outside`.\n   *\n   * **Initial value**: `0.0`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **37** | **62**  | **10.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/shape-image-threshold\n   */\n  shapeImageThreshold?: ShapeImageThresholdProperty | ShapeImageThresholdProperty[];\n  /**\n   * The **`shape-margin`** CSS property sets a margin for a CSS shape created using `shape-outside`.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox |     Safari     | Edge | IE  |\n   * | :----: | :-----: | :------------: | :--: | :-: |\n   * | **37** | **62**  | **10.1** _-x-_ |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/shape-margin\n   */\n  shapeMargin?: ShapeMarginProperty<TLength> | ShapeMarginProperty<TLength>[];\n  /**\n   * The **`shape-outside`** CSS property defines a shape—which may be non-rectangular—around which adjacent inline content should wrap. By default, inline content wraps around its margin box; `shape-outside` provides a way to customize this wrapping, making it possible to wrap text around complex objects rather than simple boxes.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **37** | **62**  | **10.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/shape-outside\n   */\n  shapeOutside?: ShapeOutsideProperty | ShapeOutsideProperty[];\n  /**\n   * The **`tab-size`** CSS property is used to customize the width of a tab (`U+0009`) character.\n   *\n   * **Initial value**: `8`\n   *\n   * | Chrome |   Firefox   | Safari  | Edge | IE  |\n   * | :----: | :---------: | :-----: | :--: | :-: |\n   * | **21** | **4** _-x-_ | **6.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/tab-size\n   */\n  tabSize?: TabSizeProperty<TLength> | TabSizeProperty<TLength>[];\n  /**\n   * The **`table-layout`** CSS property sets the algorithm used to lay out `<table>` cells, rows, and columns.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **14** |  **1**  | **1**  | **12** | **5** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/table-layout\n   */\n  tableLayout?: TableLayoutProperty | TableLayoutProperty[];\n  /**\n   * The **`text-align`** CSS property sets the horizontal alignment of an inline or table-cell box. This means it works like `vertical-align` but in the horizontal direction.\n   *\n   * **Initial value**: `start`, or a nameless value that acts as `left` if _direction_ is `ltr`, `right` if _direction_ is `rtl` if `start` is not supported by the browser.\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **3** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-align\n   */\n  textAlign?: TextAlignProperty | TextAlignProperty[];\n  /**\n   * The **`text-align-last`** CSS property sets how the last line of a block or a line, right before a forced line break, is aligned.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE    |\n   * | :----: | :-----: | :----: | :----: | :-----: |\n   * | **47** | **49**  |   No   | **12** | **5.5** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-align-last\n   */\n  textAlignLast?: TextAlignLastProperty | TextAlignLastProperty[];\n  /**\n   * The **`text-combine-upright`** CSS property sets the combination of characters into the space of a single character. If the combined text is wider than 1em, the user agent must fit the contents within 1em. The resulting composition is treated as a single upright glyph for layout and decoration. This property only has an effect in vertical writing modes.\n   *\n   * **Initial value**: `none`\n   *\n   * |           Chrome           | Firefox |              Safari              |                  Edge                  |                   IE                   |\n   * | :------------------------: | :-----: | :------------------------------: | :------------------------------------: | :------------------------------------: |\n   * |           **48**           | **48**  | **5.1** _(-webkit-text-combine)_ | **12** _(-ms-text-combine-horizontal)_ | **11** _(-ms-text-combine-horizontal)_ |\n   * | 9 _(-webkit-text-combine)_ |         |                                  |                                        |                                        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-combine-upright\n   */\n  textCombineUpright?: TextCombineUprightProperty | TextCombineUprightProperty[];\n  /**\n   * The **`text-decoration-color`** CSS property sets the color of decorations added to text by `text-decoration-line`.\n   *\n   * **Initial value**: `currentcolor`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **57** | **36**  | **12.1** |  No  | No  |\n   * |        |         | 8 _-x-_  |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-decoration-color\n   */\n  textDecorationColor?: TextDecorationColorProperty | TextDecorationColorProperty[];\n  /**\n   * The **`text-decoration-line`** CSS property sets the kind of decoration that is used on text in an element, such as an underline or overline.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **57** | **36**  | **12.1** |  No  | No  |\n   * |        |         | 8 _-x-_  |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-decoration-line\n   */\n  textDecorationLine?: TextDecorationLineProperty | TextDecorationLineProperty[];\n  /**\n   * The **`text-decoration-skip`** CSS property sets what parts of an element’s content any text decoration affecting the element must skip over. It controls all text decoration lines drawn by the element and also any text decoration lines drawn by its ancestors.\n   *\n   * **Initial value**: `objects`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | 57-64  |   No    | **12.1** |  No  | No  |\n   * |        |         | 8 _-x-_  |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-decoration-skip\n   */\n  textDecorationSkip?: TextDecorationSkipProperty | TextDecorationSkipProperty[];\n  /**\n   * The **`text-decoration-skip-ink`** CSS property specifies how overlines and underlines are drawn when they pass over glyph ascenders and descenders.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **64** | **70**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-decoration-skip-ink\n   */\n  textDecorationSkipInk?: TextDecorationSkipInkProperty | TextDecorationSkipInkProperty[];\n  /**\n   * The **`text-decoration-style`** CSS property sets the style of the lines specified by `text-decoration-line`. The style applies to all lines that are set with `text-decoration-line`.\n   *\n   * **Initial value**: `solid`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **57** | **36**  | **12.1** |  No  | No  |\n   * |        |         | 8 _-x-_  |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-decoration-style\n   */\n  textDecorationStyle?: TextDecorationStyleProperty | TextDecorationStyleProperty[];\n  /**\n   * The **`text-decoration-thickness`** CSS property sets the thickness, or width, of the decoration line that is used on text in an element, such as a line-through, underline, or overline.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * |   No   | **70**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-decoration-thickness\n   */\n  textDecorationThickness?: TextDecorationThicknessProperty<TLength> | TextDecorationThicknessProperty<TLength>[];\n  /**\n   * The **`text-decoration-thickness`** CSS property sets the thickness, or width, of the decoration line that is used on text in an element, such as a line-through, underline, or overline.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * |   No   | **70**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-decoration-thickness\n   */\n  textDecorationWidth?: TextDecorationThicknessProperty<TLength> | TextDecorationThicknessProperty<TLength>[];\n  /**\n   * The **`text-emphasis-color`** CSS property sets the color of emphasis marks. This value can also be set using the `text-emphasis` shorthand.\n   *\n   * **Initial value**: `currentcolor`\n   *\n   * | Chrome | Firefox | Safari  | Edge | IE  |\n   * | :----: | :-----: | :-----: | :--: | :-: |\n   * | **25** | **46**  | **6.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-emphasis-color\n   */\n  textEmphasisColor?: TextEmphasisColorProperty | TextEmphasisColorProperty[];\n  /**\n   * The **`text-emphasis-position`** CSS property sets where emphasis marks are drawn. Like ruby text, if there isn't enough room for emphasis marks, the line height is increased.\n   *\n   * **Initial value**: `over right`\n   *\n   * | Chrome | Firefox | Safari  | Edge | IE  |\n   * | :----: | :-----: | :-----: | :--: | :-: |\n   * | **25** | **46**  | **6.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-emphasis-position\n   */\n  textEmphasisPosition?: GlobalsString | GlobalsString[];\n  /**\n   * The **`text-emphasis-style`** CSS property sets the appearance of emphasis marks. It can also be set, and reset, using the `text-emphasis` shorthand.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari  | Edge | IE  |\n   * | :----: | :-----: | :-----: | :--: | :-: |\n   * | **25** | **46**  | **6.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-emphasis-style\n   */\n  textEmphasisStyle?: TextEmphasisStyleProperty | TextEmphasisStyleProperty[];\n  /**\n   * The **`text-indent`** CSS property sets the length of empty space (indentation) that is put before lines of text in a block.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **3** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-indent\n   */\n  textIndent?: TextIndentProperty<TLength> | TextIndentProperty<TLength>[];\n  /**\n   * The **`text-justify`** CSS property sets what type of justification should be applied to text when `text-align``: justify;` is set on an element.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE   |\n   * | :----: | :-----: | :----: | :----: | :----: |\n   * |  n/a   | **55**  |   No   | **12** | **11** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-justify\n   */\n  textJustify?: TextJustifyProperty | TextJustifyProperty[];\n  /**\n   * The **`text-orientation`** CSS property sets the orientation of the text characters in a line. It only affects text in vertical mode (when `writing-mode` is not `horizontal-tb`). It is useful for controlling the display of languages that use vertical script, and also for making vertical table headers.\n   *\n   * **Initial value**: `mixed`\n   *\n   * |  Chrome  | Firefox |    Safari     | Edge | IE  |\n   * | :------: | :-----: | :-----------: | :--: | :-: |\n   * |  **48**  | **41**  | **5.1** _-x-_ |  No  | No  |\n   * | 11 _-x-_ |         |               |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-orientation\n   */\n  textOrientation?: TextOrientationProperty | TextOrientationProperty[];\n  /**\n   * The **`text-overflow`** CSS property sets how hidden overflow content is signaled to users. It can be clipped, display an ellipsis ('`…`'), or display a custom string.\n   *\n   * **Initial value**: `clip`\n   *\n   * | Chrome | Firefox | Safari  |  Edge  |  IE   |\n   * | :----: | :-----: | :-----: | :----: | :---: |\n   * | **1**  |  **7**  | **1.3** | **12** | **6** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-overflow\n   */\n  textOverflow?: TextOverflowProperty | TextOverflowProperty[];\n  /**\n   * The **`text-rendering`** CSS property provides information to the rendering engine about what to optimize for when rendering text.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **4**  |  **1**  | **5**  |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-rendering\n   */\n  textRendering?: TextRenderingProperty | TextRenderingProperty[];\n  /**\n   * The **`text-shadow`** CSS property adds shadows to text. It accepts a comma-separated list of shadows to be applied to the text and any of its `decorations`. Each shadow is described by some combination of X and Y offsets from the element, blur radius, and color.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari  |  Edge  |   IE   |\n   * | :----: | :-----: | :-----: | :----: | :----: |\n   * | **2**  | **3.5** | **1.1** | **12** | **10** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-shadow\n   */\n  textShadow?: TextShadowProperty | TextShadowProperty[];\n  /**\n   * The **`text-size-adjust`** CSS property controls the text inflation algorithm used on some smartphones and tablets. Other browsers will ignore this property.\n   *\n   * **Initial value**: `auto` for smartphone browsers supporting inflation, `none` in other cases (and then not modifiable).\n   *\n   * | Chrome | Firefox | Safari |     Edge     | IE  |\n   * | :----: | :-----: | :----: | :----------: | :-: |\n   * | **54** |   No    |   No   | **12** _-x-_ | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-size-adjust\n   */\n  textSizeAdjust?: TextSizeAdjustProperty | TextSizeAdjustProperty[];\n  /**\n   * The **`text-transform`** CSS property specifies how to capitalize an element's text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized. It also can help improve legibility for ruby\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-transform\n   */\n  textTransform?: TextTransformProperty | TextTransformProperty[];\n  /**\n   * The **`text-underline-offset`** CSS property sets the offset distance of an underline text decoration line (applied using `text-decoration`) from its original position.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * |   No   | **70**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-underline-offset\n   */\n  textUnderlineOffset?: TextUnderlineOffsetProperty<TLength> | TextUnderlineOffsetProperty<TLength>[];\n  /**\n   * The **`text-underline-position`** CSS property specifies the position of the underline which is set using the `text-decoration` property's `underline` value.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **33** |   No    |   No   | **12** | **6** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-underline-position\n   */\n  textUnderlinePosition?: TextUnderlinePositionProperty | TextUnderlinePositionProperty[];\n  /**\n   * The **`top`** CSS property participates in specifying the vertical position of a _positioned element_. It has no effect on non-positioned elements.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **5** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/top\n   */\n  top?: TopProperty<TLength> | TopProperty<TLength>[];\n  /**\n   * The **`touch-action`** CSS property sets how a region can be manipulated by a touchscreen user (for example, by zooming features built into the browser).\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |    IE    |\n   * | :----: | :-----: | :----: | :----: | :------: |\n   * | **36** | **52**  | **13** | **12** |  **11**  |\n   * |        |         |        |        | 10 _-x-_ |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/touch-action\n   */\n  touchAction?: TouchActionProperty | TouchActionProperty[];\n  /**\n   * The **`transform`** CSS property lets you rotate, scale, skew, or translate an element. It modifies the coordinate space of the CSS visual formatting model.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome  | Firefox |  Safari   |  Edge  |   IE    |\n   * | :-----: | :-----: | :-------: | :----: | :-----: |\n   * | **36**  | **16**  |   **9**   | **12** | **10**  |\n   * | 1 _-x-_ |         | 3.1 _-x-_ |        | 9 _-x-_ |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/transform\n   */\n  transform?: TransformProperty | TransformProperty[];\n  /**\n   * The **`transform-box`** CSS property defines the layout box to which the `transform` and `transform-origin` properties relate.\n   *\n   * **Initial value**: `border-box `\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **64** | **55**  | **11** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/transform-box\n   */\n  transformBox?: TransformBoxProperty | TransformBoxProperty[];\n  /**\n   * The **`transform-origin`** CSS property sets the origin for an element's transformations.\n   *\n   * **Initial value**: `50% 50% 0`\n   *\n   * | Chrome  |  Firefox  | Safari  |  Edge  |   IE    |\n   * | :-----: | :-------: | :-----: | :----: | :-----: |\n   * | **36**  |  **16**   |  **9**  | **12** | **10**  |\n   * | 1 _-x-_ | 3.5 _-x-_ | 2 _-x-_ |        | 9 _-x-_ |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/transform-origin\n   */\n  transformOrigin?: TransformOriginProperty<TLength> | TransformOriginProperty<TLength>[];\n  /**\n   * The **`transform-style`** CSS property sets whether children of an element are positioned in the 3D space or are flattened in the plane of the element.\n   *\n   * **Initial value**: `flat`\n   *\n   * |  Chrome  | Firefox  | Safari  |  Edge  | IE  |\n   * | :------: | :------: | :-----: | :----: | :-: |\n   * |  **36**  |  **16**  |  **9**  | **12** | No  |\n   * | 12 _-x-_ | 10 _-x-_ | 4 _-x-_ |        |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/transform-style\n   */\n  transformStyle?: TransformStyleProperty | TransformStyleProperty[];\n  /**\n   * The **`transition-delay`** CSS property specifies the duration to wait before starting a property's transition effect when its value changes.\n   *\n   * **Initial value**: `0s`\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |\n   * | :-----: | :-----: | :-----: | :----: | :----: |\n   * | **26**  | **16**  |  **9**  | **12** | **10** |\n   * | 1 _-x-_ | 4 _-x-_ | 4 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/transition-delay\n   */\n  transitionDelay?: GlobalsString | GlobalsString[];\n  /**\n   * The **`transition-duration`** CSS property sets the length of time a transition animation should take to complete. By default, the value is `0s`, meaning that no animation will occur.\n   *\n   * **Initial value**: `0s`\n   *\n   * | Chrome  | Firefox |  Safari   |  Edge  |   IE   |\n   * | :-----: | :-----: | :-------: | :----: | :----: |\n   * | **26**  | **16**  |   **9**   | **12** | **10** |\n   * | 1 _-x-_ | 4 _-x-_ | 3.1 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/transition-duration\n   */\n  transitionDuration?: GlobalsString | GlobalsString[];\n  /**\n   * The **`transition-property`** CSS property sets the CSS properties to which a transition effect should be applied.\n   *\n   * **Initial value**: all\n   *\n   * | Chrome  | Firefox |  Safari   |  Edge  |   IE   |\n   * | :-----: | :-----: | :-------: | :----: | :----: |\n   * | **26**  | **16**  |   **9**   | **12** | **10** |\n   * | 1 _-x-_ | 4 _-x-_ | 3.1 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/transition-property\n   */\n  transitionProperty?: TransitionPropertyProperty | TransitionPropertyProperty[];\n  /**\n   * The **`transition-timing-function`** CSS property sets how intermediate values are calculated for CSS properties being affected by a transition effect.\n   *\n   * **Initial value**: `ease`\n   *\n   * | Chrome  | Firefox |  Safari   |  Edge  |   IE   |\n   * | :-----: | :-----: | :-------: | :----: | :----: |\n   * | **26**  | **16**  |   **9**   | **12** | **10** |\n   * | 1 _-x-_ | 4 _-x-_ | 3.1 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/transition-timing-function\n   */\n  transitionTimingFunction?: TransitionTimingFunctionProperty | TransitionTimingFunctionProperty[];\n  /**\n   * The **`translate`** CSS property allows you to specify translation transforms individually and independantly of the `transform` property. This maps better to typical user interface usage, and saves having to remember the exact order of transform functions to specify in the `transform` value.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **72**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/translate\n   */\n  translate?: TranslateProperty<TLength> | TranslateProperty<TLength>[];\n  /**\n   * The **`unicode-bidi`** CSS property, together with the `direction` property, determines how bidirectional text in a document is handled. For example, if a block of content contains both left-to-right and right-to-left text, the user-agent uses a complex Unicode algorithm to decide how to display the text. The `unicode-bidi` property overrides this algorithm and allows the developer to control the text embedding.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari  |  Edge  |   IE    |\n   * | :----: | :-----: | :-----: | :----: | :-----: |\n   * | **2**  |  **1**  | **1.3** | **12** | **5.5** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/unicode-bidi\n   */\n  unicodeBidi?: UnicodeBidiProperty | UnicodeBidiProperty[];\n  /**\n   * The `**user-select**` CSS property controls whether the user can select text. This doesn't have any effect on content loaded as chrome, except in textboxes.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome  | Firefox |   Safari    |     Edge     |      IE      |\n   * | :-----: | :-----: | :---------: | :----------: | :----------: |\n   * | **54**  | **69**  | **3** _-x-_ | **12** _-x-_ | **10** _-x-_ |\n   * | 1 _-x-_ | 1 _-x-_ |             |              |              |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/user-select\n   */\n  userSelect?: UserSelectProperty | UserSelectProperty[];\n  /**\n   * The **`vertical-align`** CSS property sets vertical alignment of an inline or table-cell box.\n   *\n   * **Initial value**: `baseline`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/vertical-align\n   */\n  verticalAlign?: VerticalAlignProperty<TLength> | VerticalAlignProperty<TLength>[];\n  /**\n   * The **`visibility`** CSS property shows or hides an element without changing the layout of a document. The property can also hide rows or columns in a `<table>`.\n   *\n   * **Initial value**: `visible`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/visibility\n   */\n  visibility?: VisibilityProperty | VisibilityProperty[];\n  /**\n   * The **`white-space`** CSS property sets how white space inside an element is handled.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE    |\n   * | :----: | :-----: | :----: | :----: | :-----: |\n   * | **1**  |  **1**  | **1**  | **12** | **5.5** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/white-space\n   */\n  whiteSpace?: WhiteSpaceProperty | WhiteSpaceProperty[];\n  /**\n   * The **`widows`** CSS property sets the minimum number of lines in a block container that must be shown at the _top_ of a page, region, or column.\n   *\n   * **Initial value**: `2`\n   *\n   * | Chrome | Firefox | Safari  |  Edge  |  IE   |\n   * | :----: | :-----: | :-----: | :----: | :---: |\n   * | **25** |   No    | **1.3** | **12** | **8** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/widows\n   */\n  widows?: GlobalsNumber | GlobalsNumber[];\n  /**\n   * The **`width`** CSS property sets an element's width. By default it sets the width of the content area, but if `box-sizing` is set to `border-box`, it sets the width of the border area.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/width\n   */\n  width?: WidthProperty<TLength> | WidthProperty<TLength>[];\n  /**\n   * The **`will-change`** CSS property hints to browsers how an element is expected to change. Browsers may set up optimizations before an element is actually changed. These kinds of optimizations can increase the responsiveness of a page by doing potentially expensive work before they are actually required.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari  | Edge | IE  |\n   * | :----: | :-----: | :-----: | :--: | :-: |\n   * | **36** | **36**  | **9.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/will-change\n   */\n  willChange?: WillChangeProperty | WillChangeProperty[];\n  /**\n   * The **`word-break`** CSS property sets whether line breaks appear wherever the text would otherwise overflow its content box.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE    |\n   * | :----: | :-----: | :----: | :----: | :-----: |\n   * | **1**  | **15**  | **3**  | **12** | **5.5** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/word-break\n   */\n  wordBreak?: WordBreakProperty | WordBreakProperty[];\n  /**\n   * The **`word-spacing`** CSS property sets the length of space between words and between tags.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **6** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/word-spacing\n   */\n  wordSpacing?: WordSpacingProperty<TLength> | WordSpacingProperty<TLength>[];\n  /**\n   * The `**overflow-wrap**` CSS property sets whether the browser should insert line breaks within words to prevent text from overflowing its content box.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE    |\n   * | :----: | :-----: | :----: | :----: | :-----: |\n   * | **1**  | **3.5** | **2**  | **12** | **5.5** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/overflow-wrap\n   */\n  wordWrap?: WordWrapProperty | WordWrapProperty[];\n  /**\n   * The **`writing-mode`** CSS property sets whether lines of text are laid out horizontally or vertically, as well as the direction in which blocks progress.\n   *\n   * **Initial value**: `horizontal-tb`\n   *\n   * | Chrome  | Firefox |  Safari   |  Edge  |     IE      |\n   * | :-----: | :-----: | :-------: | :----: | :---------: |\n   * | **48**  | **41**  | **10.1**  | **12** | **9** _-x-_ |\n   * | 8 _-x-_ |         | 5.1 _-x-_ |        |             |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/writing-mode\n   */\n  writingMode?: WritingModeProperty | WritingModeProperty[];\n  /**\n   * The **`z-index`** CSS property sets the z-order of a positioned element and its descendants or flex items. Overlapping elements with a larger z-index cover those with a smaller one.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/z-index\n   */\n  zIndex?: ZIndexProperty | ZIndexProperty[];\n  /**\n   * The non-standard **`zoom`** CSS property can be used to control the magnification level of an element. `transform: scale()` should be used instead of this property, if possible. However, unlike CSS Transforms, `zoom` affects the layout size of the element.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari  |  Edge  |   IE    |\n   * | :----: | :-----: | :-----: | :----: | :-----: |\n   * | **1**  |   No    | **3.1** | **12** | **5.5** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/zoom\n   */\n  zoom?: ZoomProperty | ZoomProperty[];\n}\n\nexport interface StandardShorthandPropertiesFallback<TLength = string | 0> {\n  /**\n   * The `**all**` CSS shorthand property sets all of an element's properties (other than `unicode-bidi` and `direction`) to their initial or inherited values, or to the values specified in another stylesheet origin.\n   *\n   * **Initial value**: There is no practical initial value for it.\n   *\n   * | Chrome | Firefox | Safari  | Edge | IE  |\n   * | :----: | :-----: | :-----: | :--: | :-: |\n   * | **37** | **27**  | **9.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/all\n   */\n  all?: Globals | Globals[];\n  /**\n   * The **`animation`** shorthand CSS property sets an animated transition between styles. It is a shorthand for `animation-name`, `animation-duration`, `animation-timing-function`, `animation-delay`, `animation-iteration-count`, `animation-direction`, `animation-fill-mode`, and `animation-play-state`.\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |\n   * | :-----: | :-----: | :-----: | :----: | :----: |\n   * | **43**  | **16**  |  **9**  | **12** | **10** |\n   * | 3 _-x-_ | 5 _-x-_ | 4 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/animation\n   */\n  animation?: AnimationProperty | AnimationProperty[];\n  /**\n   * The **`background`** shorthand CSS property sets all background style properties at once, such as color, image, origin and size, or repeat method.\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/background\n   */\n  background?: BackgroundProperty<TLength> | BackgroundProperty<TLength>[];\n  /**\n   * The **`border`** CSS property sets an element's border. It's a shorthand for `border-width`, `border-style`, and `border-color`.\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border\n   */\n  border?: BorderProperty<TLength> | BorderProperty<TLength>[];\n  /**\n   * The **`border-block`** CSS property is a shorthand property for setting the individual logical block border property values in a single place in the style sheet.\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **66**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-block\n   */\n  borderBlock?: BorderBlockProperty<TLength> | BorderBlockProperty<TLength>[];\n  /**\n   * The **`border-block-end`** CSS property is a shorthand property for setting the individual logical block-end border property values in a single place in the style sheet.\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **69** | **41**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-block-end\n   */\n  borderBlockEnd?: BorderBlockEndProperty<TLength> | BorderBlockEndProperty<TLength>[];\n  /**\n   * The **`border-block-start`** CSS property is a shorthand property for setting the individual logical block-start border property values in a single place in the style sheet.\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **69** | **41**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-block-start\n   */\n  borderBlockStart?: BorderBlockStartProperty<TLength> | BorderBlockStartProperty<TLength>[];\n  /**\n   * The **`border-bottom`** CSS property is a shorthand that sets the values of `border-bottom-width`, `border-bottom-style` and `border-bottom-color`. These properties set an element's bottom border.\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-bottom\n   */\n  borderBottom?: BorderBottomProperty<TLength> | BorderBottomProperty<TLength>[];\n  /**\n   * The **`border-color`** shorthand CSS property sets the color of all sides of an element's border.\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-color\n   */\n  borderColor?: BorderColorProperty | BorderColorProperty[];\n  /**\n   * The **`border-image`** CSS property draws an image in place of an element's `border-style`.\n   *\n   * | Chrome  |  Firefox  | Safari  |  Edge  |   IE   |\n   * | :-----: | :-------: | :-----: | :----: | :----: |\n   * | **16**  |  **15**   |  **6**  | **12** | **11** |\n   * | 7 _-x-_ | 3.5 _-x-_ | 3 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-image\n   */\n  borderImage?: BorderImageProperty | BorderImageProperty[];\n  /**\n   * The **`border-inline`** CSS property is a shorthand property for setting the individual logical inline border property values in a single place in the style sheet.\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **66**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-inline\n   */\n  borderInline?: BorderInlineProperty<TLength> | BorderInlineProperty<TLength>[];\n  /**\n   * The **`border-inline-end`** CSS property is a shorthand property for setting the individual logical inline-end border property values in a single place in the style sheet.\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **69** | **41**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-inline-end\n   */\n  borderInlineEnd?: BorderInlineEndProperty<TLength> | BorderInlineEndProperty<TLength>[];\n  /**\n   * The **`border-inline-start`** CSS property is a shorthand property for setting the individual logical inline-start border property values in a single place in the style sheet.\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **69** | **41**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-inline-start\n   */\n  borderInlineStart?: BorderInlineStartProperty<TLength> | BorderInlineStartProperty<TLength>[];\n  /**\n   * The **`border-left`** CSS property is a shorthand that sets the values of `border-left-width`, `border-left-style` and `border-left-color`. These properties set an element's left border.\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-left\n   */\n  borderLeft?: BorderLeftProperty<TLength> | BorderLeftProperty<TLength>[];\n  /**\n   * The **`border-radius`** CSS property rounds the corners of an element's outer border edge. You can set a single radius to make circular corners, or two radii to make elliptical corners.\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |  IE   |\n   * | :-----: | :-----: | :-----: | :----: | :---: |\n   * |  **4**  |  **4**  |  **5**  | **12** | **9** |\n   * | 1 _-x-_ |         | 3 _-x-_ |        |       |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-radius\n   */\n  borderRadius?: BorderRadiusProperty<TLength> | BorderRadiusProperty<TLength>[];\n  /**\n   * The **`border-right`** CSS property is a shorthand that sets the values of `border-right-width`, `border-right-style` and `border-right-color`. These properties set an element's right border.\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE    |\n   * | :----: | :-----: | :----: | :----: | :-----: |\n   * | **1**  |  **1**  | **1**  | **12** | **5.5** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-right\n   */\n  borderRight?: BorderRightProperty<TLength> | BorderRightProperty<TLength>[];\n  /**\n   * The **`border-style`** CSS property is a shorthand property that sets the line style for all four sides of an element's border.\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-style\n   */\n  borderStyle?: BorderStyleProperty | BorderStyleProperty[];\n  /**\n   * The **`border-top`** CSS property is a shorthand that sets the values of `border-top-width`, `border-top-style` and `border-top-color`. These properties set an element's top border.\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-top\n   */\n  borderTop?: BorderTopProperty<TLength> | BorderTopProperty<TLength>[];\n  /**\n   * The **`border-width`** shorthand CSS property sets the widths of all four sides of an element's border.\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-width\n   */\n  borderWidth?: BorderWidthProperty<TLength> | BorderWidthProperty<TLength>[];\n  /**\n   * The **`column-rule`** CSS property sets the width, style, and color of the rule (line) drawn between columns in a multi-column layout.\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |\n   * | :-----: | :-----: | :-----: | :----: | :----: |\n   * | **50**  | **52**  |  **9**  | **12** | **10** |\n   * | 1 _-x-_ |         | 3 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/column-rule\n   */\n  columnRule?: ColumnRuleProperty<TLength> | ColumnRuleProperty<TLength>[];\n  /**\n   * The **`columns`** CSS property sets the column width and column count of an element.\n   *\n   * | Chrome | Firefox | Safari  |  Edge  |   IE   |\n   * | :----: | :-----: | :-----: | :----: | :----: |\n   * | **50** | **52**  |  **9**  | **12** | **10** |\n   * |        |         | 3 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/columns\n   */\n  columns?: ColumnsProperty<TLength> | ColumnsProperty<TLength>[];\n  /**\n   * The **`flex`** CSS property sets how a flex item will grow or shrink to fit the space available in its flex container. It is a shorthand for `flex-grow`, `flex-shrink`, and `flex-basis`.\n   *\n   * |  Chrome  | Firefox |  Safari   |  Edge  |    IE    |\n   * | :------: | :-----: | :-------: | :----: | :------: |\n   * |  **29**  | **20**  |   **9**   | **12** |  **11**  |\n   * | 21 _-x-_ |         | 6.1 _-x-_ |        | 10 _-x-_ |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/flex\n   */\n  flex?: FlexProperty<TLength> | FlexProperty<TLength>[];\n  /**\n   * The **`flex-flow`** CSS property is a shorthand property for `flex-direction` and `flex-wrap` properties.\n   *\n   * |  Chrome  | Firefox |  Safari   |  Edge  |   IE   |\n   * | :------: | :-----: | :-------: | :----: | :----: |\n   * |  **29**  | **28**  |   **9**   | **12** | **11** |\n   * | 21 _-x-_ |         | 6.1 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/flex-flow\n   */\n  flexFlow?: FlexFlowProperty | FlexFlowProperty[];\n  /**\n   * The **`font`** CSS property is a shorthand for `font-style`, `font-variant`, `font-weight`, `font-size`, `line-height`, and `font-family`. Alternatively, it sets an element's font to a system font.\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **3** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/font\n   */\n  font?: FontProperty | FontProperty[];\n  /**\n   * The **`gap`** CSS property sets the gaps (gutters) between rows and columns. It is a shorthand for `row-gap` and `column-gap`.\n   *\n   * ---\n   *\n   * _Supported in Flex Layout_\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **63**  |   No   |  No  | No  |\n   *\n   * ---\n   *\n   * _Supported in Grid Layout_\n   *\n   * |     Chrome      |     Firefox     |        Safari         |  Edge  | IE  |\n   * | :-------------: | :-------------: | :-------------------: | :----: | :-: |\n   * |     **66**      |     **61**      | **10.1** _(grid-gap)_ | **16** | No  |\n   * | 57 _(grid-gap)_ | 52 _(grid-gap)_ |                       |        |     |\n   *\n   * ---\n   *\n   * _Supported in Multi-column Layout_\n   *\n   * | Chrome | Firefox | Safari |  Edge  | IE  |\n   * | :----: | :-----: | :----: | :----: | :-: |\n   * | **66** | **61**  |   No   | **16** | No  |\n   *\n   * ---\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/gap\n   */\n  gap?: GapProperty<TLength> | GapProperty<TLength>[];\n  /**\n   * The **`grid`** CSS property is a shorthand property that sets all of the explicit grid properties (`grid-template-rows`, `grid-template-columns`, and `grid-template-areas`), and all the implicit grid properties (`grid-auto-rows`, `grid-auto-columns`, and `grid-auto-flow`), in a single declaration.\n   *\n   * | Chrome | Firefox |  Safari  |  Edge  | IE  |\n   * | :----: | :-----: | :------: | :----: | :-: |\n   * | **57** | **52**  | **10.1** | **16** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/grid\n   */\n  grid?: GridProperty | GridProperty[];\n  /**\n   * The **`grid-area`** CSS property is a shorthand property for `grid-row-start`, `grid-column-start`, `grid-row-end` and `grid-column-end`, specifying a grid item’s size and location within the grid row by contributing a line, a span, or nothing (automatic) to its grid placement, thereby specifying the edges of its grid area.\n   *\n   * | Chrome | Firefox |  Safari  |  Edge  | IE  |\n   * | :----: | :-----: | :------: | :----: | :-: |\n   * | **57** | **52**  | **10.1** | **16** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/grid-area\n   */\n  gridArea?: GridAreaProperty | GridAreaProperty[];\n  /**\n   * The **`grid-column`** CSS property is a shorthand property for `grid-column-start` and `grid-column-end` specifying a grid item's size and location within the grid column by contributing a line, a span, or nothing (automatic) to its grid placement, thereby specifying the inline-start and inline-end edge of its grid area.\n   *\n   * | Chrome | Firefox |  Safari  |  Edge  | IE  |\n   * | :----: | :-----: | :------: | :----: | :-: |\n   * | **57** | **52**  | **10.1** | **16** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/grid-column\n   */\n  gridColumn?: GridColumnProperty | GridColumnProperty[];\n  /**\n   * The **`grid-row`** CSS property is a shorthand property for `grid-row-start` and `grid-row-end` specifying a grid item’s size and location within the grid row by contributing a line, a span, or nothing (automatic) to its grid placement, thereby specifying the inline-start and inline-end edge of its grid area.\n   *\n   * | Chrome | Firefox |  Safari  |  Edge  | IE  |\n   * | :----: | :-----: | :------: | :----: | :-: |\n   * | **57** | **52**  | **10.1** | **16** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/grid-row\n   */\n  gridRow?: GridRowProperty | GridRowProperty[];\n  /**\n   * The **`grid-template`** CSS property is a shorthand property for defining grid columns, rows, and areas.\n   *\n   * | Chrome | Firefox |  Safari  |  Edge  | IE  |\n   * | :----: | :-----: | :------: | :----: | :-: |\n   * | **57** | **52**  | **10.1** | **16** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/grid-template\n   */\n  gridTemplate?: GridTemplateProperty | GridTemplateProperty[];\n  /** **Initial value**: `none` */\n  lineClamp?: LineClampProperty | LineClampProperty[];\n  /**\n   * The **`list-style`** CSS property is a shorthand to set list style properties `list-style-type`, `list-style-image`, and `list-style-position`.\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/list-style\n   */\n  listStyle?: ListStyleProperty | ListStyleProperty[];\n  /**\n   * The **`margin`** CSS property sets the margin area on all four sides of an element. It is a shorthand for `margin-top`, `margin-right`, `margin-bottom`, and `margin-left`.\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **3** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/margin\n   */\n  margin?: MarginProperty<TLength> | MarginProperty<TLength>[];\n  /**\n   * The **`mask`** CSS property hides an element (partially or fully) by masking or clipping the image at specific points.\n   *\n   * | Chrome | Firefox | Safari  |  Edge  | IE  |\n   * | :----: | :-----: | :-----: | :----: | :-: |\n   * | **1**  |  **2**  | **3.2** | **12** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/mask\n   */\n  mask?: MaskProperty<TLength> | MaskProperty<TLength>[];\n  /** The **`mask-border`** CSS property lets you create a mask along the edge of an element's border. */\n  maskBorder?: MaskBorderProperty | MaskBorderProperty[];\n  /**\n   * The **`offset`** CSS property is a shorthand property for animating an element along a defined path.\n   *\n   * |    Chrome     | Firefox | Safari | Edge | IE  |\n   * | :-----------: | :-----: | :----: | :--: | :-: |\n   * |    **55**     | **72**  |   No   |  No  | No  |\n   * | 46 _(motion)_ |         |        |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/offset\n   */\n  motion?: OffsetProperty<TLength> | OffsetProperty<TLength>[];\n  /**\n   * The **`offset`** CSS property is a shorthand property for animating an element along a defined path.\n   *\n   * |    Chrome     | Firefox | Safari | Edge | IE  |\n   * | :-----------: | :-----: | :----: | :--: | :-: |\n   * |    **55**     | **72**  |   No   |  No  | No  |\n   * | 46 _(motion)_ |         |        |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/offset\n   */\n  offset?: OffsetProperty<TLength> | OffsetProperty<TLength>[];\n  /**\n   * The **`outline`** CSS property is a shorthand to set various outline properties in a single declaration: `outline-style`, `outline-width`, and `outline-color`.\n   *\n   * | Chrome | Firefox | Safari  |  Edge  |  IE   |\n   * | :----: | :-----: | :-----: | :----: | :---: |\n   * | **1**  | **1.5** | **1.2** | **12** | **8** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/outline\n   */\n  outline?: OutlineProperty<TLength> | OutlineProperty<TLength>[];\n  /**\n   * The **`padding`** CSS property sets the padding area on all four sides of an element. It is a shorthand for `padding-top`, `padding-right`, `padding-bottom`, and `padding-left`.\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/padding\n   */\n  padding?: PaddingProperty<TLength> | PaddingProperty<TLength>[];\n  /**\n   * The CSS **`place-items`** shorthand property sets the `align-items` and `justify-items` properties, respectively. If the second value is not set, the first value is also used for it.\n   *\n   * ---\n   *\n   * _Supported in Flex Layout_\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **59** | **45**  | **11** |  No  | No  |\n   *\n   * ---\n   *\n   * _Supported in Grid Layout_\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **59** | **45**  | **11** |  No  | No  |\n   *\n   * ---\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/place-items\n   */\n  placeItems?: PlaceItemsProperty | PlaceItemsProperty[];\n  /**\n   * The **`place-self`** CSS property is a shorthand property sets both the `align-self` and `justify-self` properties. The first value is the `align-self` property value, the second the `justify-self` one. If the second value is not present, the first value is also used for it.\n   *\n   * ---\n   *\n   * _Supported in Flex Layout_\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **59** | **45**  |   No   |  No  | No  |\n   *\n   * ---\n   *\n   * _Supported in Grid Layout_\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **59** | **45**  |   No   |  No  | No  |\n   *\n   * ---\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/place-self\n   */\n  placeSelf?: PlaceSelfProperty | PlaceSelfProperty[];\n  /**\n   * The **`text-decoration`** CSS property sets the appearance of decorative lines on text. It is a shorthand for `text-decoration-line`, `text-decoration-color`, and `text-decoration-style`.\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **3** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-decoration\n   */\n  textDecoration?: TextDecorationProperty<TLength> | TextDecorationProperty<TLength>[];\n  /**\n   * The **`text-emphasis`** CSS property applies emphasis marks to text (except spaces and control characters). It is a shorthand for `text-emphasis-style` and `text-emphasis-color`.\n   *\n   * | Chrome | Firefox | Safari  | Edge | IE  |\n   * | :----: | :-----: | :-----: | :--: | :-: |\n   * | **25** | **46**  | **6.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-emphasis\n   */\n  textEmphasis?: TextEmphasisProperty | TextEmphasisProperty[];\n  /**\n   * The **`transition`** CSS property is a shorthand property for `transition-property`, `transition-duration`, `transition-timing-function`, and `transition-delay`.\n   *\n   * | Chrome  | Firefox |  Safari   |  Edge  |   IE   |\n   * | :-----: | :-----: | :-------: | :----: | :----: |\n   * | **26**  | **16**  |   **9**   | **12** | **10** |\n   * | 1 _-x-_ | 4 _-x-_ | 3.1 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/transition\n   */\n  transition?: TransitionProperty | TransitionProperty[];\n}\n\nexport interface StandardPropertiesFallback<TLength = string | 0> extends StandardLonghandPropertiesFallback<TLength>, StandardShorthandPropertiesFallback<TLength> {}\n\nexport interface VendorLonghandPropertiesFallback<TLength = string | 0> {\n  /**\n   * The **`animation-delay`** CSS property sets when an animation starts. The animation can start later, immediately from its beginning, or immediately and partway through the animation.\n   *\n   * **Initial value**: `0s`\n   */\n  MozAnimationDelay?: GlobalsString | GlobalsString[];\n  /**\n   * The **`animation-direction`** CSS property sets whether an animation should play forwards, backwards, or alternating back and forth.\n   *\n   * **Initial value**: `normal`\n   */\n  MozAnimationDirection?: AnimationDirectionProperty | AnimationDirectionProperty[];\n  /**\n   * The **`animation-duration`** CSS property sets the length of time that an animation takes to complete one cycle.\n   *\n   * **Initial value**: `0s`\n   */\n  MozAnimationDuration?: GlobalsString | GlobalsString[];\n  /**\n   * The **`animation-fill-mode`** CSS property sets how a CSS animation applies styles to its target before and after its execution.\n   *\n   * **Initial value**: `none`\n   */\n  MozAnimationFillMode?: AnimationFillModeProperty | AnimationFillModeProperty[];\n  /**\n   * The **`animation-iteration-count`** CSS property sets the number of times an animation cycle should be played before stopping.\n   *\n   * **Initial value**: `1`\n   */\n  MozAnimationIterationCount?: AnimationIterationCountProperty | AnimationIterationCountProperty[];\n  /**\n   * The **`animation-name`** CSS property sets one or more animations to apply to an element. Each name is an `@keyframes` at-rule that sets the property values for the animation sequence.\n   *\n   * **Initial value**: `none`\n   */\n  MozAnimationName?: AnimationNameProperty | AnimationNameProperty[];\n  /**\n   * The **`animation-play-state`** CSS property sets whether an animation is running or paused.\n   *\n   * **Initial value**: `running`\n   */\n  MozAnimationPlayState?: AnimationPlayStateProperty | AnimationPlayStateProperty[];\n  /**\n   * The `**animation-timing-function**` CSS property sets how an animation progresses through the duration of each cycle.\n   *\n   * **Initial value**: `ease`\n   */\n  MozAnimationTimingFunction?: AnimationTimingFunctionProperty | AnimationTimingFunctionProperty[];\n  /**\n   * The **`-moz-appearance`** CSS property is used in Gecko (Firefox) to display an element using platform-native styling based on the operating system's theme.\n   *\n   * **Initial value**: `none` (but this value is overridden in the user agent CSS)\n   */\n  MozAppearance?: MozAppearanceProperty | MozAppearanceProperty[];\n  /**\n   * The **`backface-visibility`** CSS property sets whether the back face of an element is visible when turned towards the user.\n   *\n   * **Initial value**: `visible`\n   */\n  MozBackfaceVisibility?: BackfaceVisibilityProperty | BackfaceVisibilityProperty[];\n  /**\n   * The **`border-inline-end-color`** CSS property defines the color of the logical inline-end border of an element, which maps to a physical border color depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-color`, `border-right-color`, `border-bottom-color`, or `border-left-color` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `currentcolor`\n   */\n  MozBorderEndColor?: BorderInlineEndColorProperty | BorderInlineEndColorProperty[];\n  /**\n   * The **`border-inline-end-style`** CSS property defines the style of the logical inline end border of an element, which maps to a physical border style depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-style`, `border-right-style`, `border-bottom-style`, or `border-left-style` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `none`\n   */\n  MozBorderEndStyle?: BorderInlineEndStyleProperty | BorderInlineEndStyleProperty[];\n  /**\n   * The **`border-inline-end-width`** CSS property defines the width of the logical inline-end border of an element, which maps to a physical border width depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-width`, `border-right-width`, `border-bottom-width`, or `border-left-width` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `medium`\n   */\n  MozBorderEndWidth?: BorderInlineEndWidthProperty<TLength> | BorderInlineEndWidthProperty<TLength>[];\n  /**\n   * The **`border-inline-start-color`** CSS property defines the color of the logical inline start border of an element, which maps to a physical border color depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-color`, `border-right-color`, `border-bottom-color`, or `border-left-color` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `currentcolor`\n   */\n  MozBorderStartColor?: BorderInlineStartColorProperty | BorderInlineStartColorProperty[];\n  /**\n   * The **`border-inline-start-style`** CSS property defines the style of the logical inline start border of an element, which maps to a physical border style depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-style`, `border-right-style`, `border-bottom-style`, or `border-left-style` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `none`\n   */\n  MozBorderStartStyle?: BorderInlineStartStyleProperty | BorderInlineStartStyleProperty[];\n  /**\n   * The **`box-sizing`** CSS property defines how the user agent should calculate the total width and height of an element.\n   *\n   * **Initial value**: `content-box`\n   */\n  MozBoxSizing?: BoxSizingProperty | BoxSizingProperty[];\n  /**\n   * The **`column-count`** CSS property breaks an element's content into the specified number of columns.\n   *\n   * **Initial value**: `auto`\n   */\n  MozColumnCount?: ColumnCountProperty | ColumnCountProperty[];\n  /**\n   * The **`column-fill`** CSS property controls how an element's contents are balanced when broken into columns.\n   *\n   * **Initial value**: `balance`\n   */\n  MozColumnFill?: ColumnFillProperty | ColumnFillProperty[];\n  /**\n   * The **`column-gap`** CSS property sets the size of the gap (gutter) between an element's columns.\n   *\n   * **Initial value**: `normal`\n   */\n  MozColumnGap?: ColumnGapProperty<TLength> | ColumnGapProperty<TLength>[];\n  /**\n   * The **`column-rule-color`** CSS property sets the color of the rule (line) drawn between columns in a multi-column layout.\n   *\n   * **Initial value**: `currentcolor`\n   */\n  MozColumnRuleColor?: ColumnRuleColorProperty | ColumnRuleColorProperty[];\n  /**\n   * The **`column-rule-style`** CSS property sets the style of the line drawn between columns in a multi-column layout.\n   *\n   * **Initial value**: `none`\n   */\n  MozColumnRuleStyle?: ColumnRuleStyleProperty | ColumnRuleStyleProperty[];\n  /**\n   * The **`column-rule-width`** CSS property sets the width of the rule (line) drawn between columns in a multi-column layout.\n   *\n   * **Initial value**: `medium`\n   */\n  MozColumnRuleWidth?: ColumnRuleWidthProperty<TLength> | ColumnRuleWidthProperty<TLength>[];\n  /**\n   * The **`column-width`** CSS property specifies the ideal column width in a multi-column layout. The container will have as many columns as can fit without any of them having a width less than the `column-width` value. If the width of the container is narrower than the specified value, the single column's width will be smaller than the declared column width.\n   *\n   * **Initial value**: `auto`\n   */\n  MozColumnWidth?: ColumnWidthProperty<TLength> | ColumnWidthProperty<TLength>[];\n  /**\n   * If you reference an SVG image in a webpage (such as with the `<img>` element or as a background image), the SVG image can coordinate with the embedding element (its context) to have the image adopt property values set on the embedding element. To do this the embedding element needs to list the properties that are to be made available to the image by listing them as values of the **`-moz-context-properties`** property, and the image needs to opt in to using those properties by using values such as the `context-fill` value.\n   *\n   * **Initial value**: `none`\n   */\n  MozContextProperties?: MozContextPropertiesProperty | MozContextPropertiesProperty[];\n  /**\n   * The non-standard **`-moz-float-edge`** CSS property specifies whether the height and width properties of the element include the margin, border, or padding thickness.\n   *\n   * **Initial value**: `content-box`\n   */\n  MozFloatEdge?: MozFloatEdgeProperty | MozFloatEdgeProperty[];\n  /**\n   * The **`font-feature-settings`** CSS property controls advanced typographic features in OpenType fonts.\n   *\n   * **Initial value**: `normal`\n   */\n  MozFontFeatureSettings?: FontFeatureSettingsProperty | FontFeatureSettingsProperty[];\n  /**\n   * The **`font-language-override`** CSS property controls the use of language-specific glyphs in a typeface.\n   *\n   * **Initial value**: `normal`\n   */\n  MozFontLanguageOverride?: FontLanguageOverrideProperty | FontLanguageOverrideProperty[];\n  /**\n   * The **`-moz-force-broken-image-icon`** extended CSS property can be used to force the broken image icon to be shown even when a broken image has an `alt` attribute.\n   *\n   * **Initial value**: `0`\n   */\n  MozForceBrokenImageIcon?: GlobalsNumber | GlobalsNumber[];\n  /**\n   * The **`hyphens`** CSS property specifies how words should be hyphenated when text wraps across multiple lines. You can prevent hyphenation entirely, use hyphenation in manually-specified points within the text, or let the browser automatically insert hyphens where appropriate.\n   *\n   * **Initial value**: `manual`\n   */\n  MozHyphens?: HyphensProperty | HyphensProperty[];\n  /**\n   * For certain XUL elements and pseudo-elements that use an image from the `list-style-image` property, this property specifies a region of the image that is used in place of the whole image. This allows elements to use different pieces of the same image to improve performance.\n   *\n   * **Initial value**: `auto`\n   */\n  MozImageRegion?: MozImageRegionProperty | MozImageRegionProperty[];\n  /**\n   * The **`margin-inline-end`** CSS property defines the logical inline end margin of an element, which maps to a physical margin depending on the element's writing mode, directionality, and text orientation. In other words, it corresponds to the `margin-top`, `margin-right`, `margin-bottom` or `margin-left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `0`\n   */\n  MozMarginEnd?: MarginInlineEndProperty<TLength> | MarginInlineEndProperty<TLength>[];\n  /**\n   * The **`margin-inline-start`** CSS property defines the logical inline start margin of an element, which maps to a physical margin depending on the element's writing mode, directionality, and text orientation. It corresponds to the `margin-top`, `margin-right`, `margin-bottom`, or `margin-left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `0`\n   */\n  MozMarginStart?: MarginInlineStartProperty<TLength> | MarginInlineStartProperty<TLength>[];\n  /**\n   * The **`-moz-orient`** CSS property specifies the orientation of the element to which it's applied.\n   *\n   * **Initial value**: `inline`\n   */\n  MozOrient?: MozOrientProperty | MozOrientProperty[];\n  /**\n   * In Mozilla applications, the **`-moz-outline-radius-bottomleft`** CSS property can be used to round the bottom-left corner of an element's `outline`.\n   *\n   * **Initial value**: `0`\n   */\n  MozOutlineRadiusBottomleft?: MozOutlineRadiusBottomleftProperty<TLength> | MozOutlineRadiusBottomleftProperty<TLength>[];\n  /**\n   * In Mozilla applications, the **`-moz-outline-radius-bottomright`** CSS property can be used to round the bottom-right corner of an element's `outline`.\n   *\n   * **Initial value**: `0`\n   */\n  MozOutlineRadiusBottomright?: MozOutlineRadiusBottomrightProperty<TLength> | MozOutlineRadiusBottomrightProperty<TLength>[];\n  /**\n   * In Mozilla applications, the **`-moz-outline-radius-topleft`** CSS property can be used to round the top-left corner of an element's `outline`.\n   *\n   * **Initial value**: `0`\n   */\n  MozOutlineRadiusTopleft?: MozOutlineRadiusTopleftProperty<TLength> | MozOutlineRadiusTopleftProperty<TLength>[];\n  /**\n   * In Mozilla applications, the **`-moz-outline-radius-topright`** CSS property can be used to round the top-right corner of an element's `outline`.\n   *\n   * **Initial value**: `0`\n   */\n  MozOutlineRadiusTopright?: MozOutlineRadiusToprightProperty<TLength> | MozOutlineRadiusToprightProperty<TLength>[];\n  /**\n   * The **`padding-inline-end`** CSS property defines the logical inline end padding of an element, which maps to a physical padding depending on the element's writing mode, directionality, and text orientation. It corresponds to the `padding-top`, `padding-right`, `padding-bottom`, or `padding-left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `0`\n   */\n  MozPaddingEnd?: PaddingInlineEndProperty<TLength> | PaddingInlineEndProperty<TLength>[];\n  /**\n   * The **`padding-inline-start`** CSS property defines the logical inline start padding of an element, which maps to a physical padding depending on the element's writing mode, directionality, and text orientation. It corresponds to the `padding-top`, `padding-right`, `padding-bottom`, or `padding-left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `0`\n   */\n  MozPaddingStart?: PaddingInlineStartProperty<TLength> | PaddingInlineStartProperty<TLength>[];\n  /**\n   * The **`perspective`** CSS property determines the distance between the z=0 plane and the user in order to give a 3D-positioned element some perspective. Each 3D element with z>0 becomes larger; each 3D-element with z<0 becomes smaller. The strength of the effect is determined by the value of this property.\n   *\n   * **Initial value**: `none`\n   */\n  MozPerspective?: PerspectiveProperty<TLength> | PerspectiveProperty<TLength>[];\n  /**\n   * The **`perspective-origin`** CSS property determines the position at which the viewer is looking. It is used as the _vanishing point_ by the `perspective` property.\n   *\n   * **Initial value**: `50% 50%`\n   */\n  MozPerspectiveOrigin?: PerspectiveOriginProperty<TLength> | PerspectiveOriginProperty<TLength>[];\n  /**\n   * **`-moz-stack-sizing`** is an extended CSS property. Normally, a `stack` will change its size so that all of its child elements are completely visible. For example, moving a child of the stack far to the right will widen the stack so the child remains visible.\n   *\n   * **Initial value**: `stretch-to-fit`\n   */\n  MozStackSizing?: MozStackSizingProperty | MozStackSizingProperty[];\n  /**\n   * The **`tab-size`** CSS property is used to customize the width of a tab (`U+0009`) character.\n   *\n   * **Initial value**: `8`\n   */\n  MozTabSize?: TabSizeProperty<TLength> | TabSizeProperty<TLength>[];\n  /**\n   * The **`text-size-adjust`** CSS property controls the text inflation algorithm used on some smartphones and tablets. Other browsers will ignore this property.\n   *\n   * **Initial value**: `auto` for smartphone browsers supporting inflation, `none` in other cases (and then not modifiable).\n   */\n  MozTextSizeAdjust?: TextSizeAdjustProperty | TextSizeAdjustProperty[];\n  /**\n   * The **`transform-origin`** CSS property sets the origin for an element's transformations.\n   *\n   * **Initial value**: `50% 50% 0`\n   */\n  MozTransformOrigin?: TransformOriginProperty<TLength> | TransformOriginProperty<TLength>[];\n  /**\n   * The **`transform-style`** CSS property sets whether children of an element are positioned in the 3D space or are flattened in the plane of the element.\n   *\n   * **Initial value**: `flat`\n   */\n  MozTransformStyle?: TransformStyleProperty | TransformStyleProperty[];\n  /**\n   * The **`transition-delay`** CSS property specifies the duration to wait before starting a property's transition effect when its value changes.\n   *\n   * **Initial value**: `0s`\n   */\n  MozTransitionDelay?: GlobalsString | GlobalsString[];\n  /**\n   * The **`transition-duration`** CSS property sets the length of time a transition animation should take to complete. By default, the value is `0s`, meaning that no animation will occur.\n   *\n   * **Initial value**: `0s`\n   */\n  MozTransitionDuration?: GlobalsString | GlobalsString[];\n  /**\n   * The **`transition-property`** CSS property sets the CSS properties to which a transition effect should be applied.\n   *\n   * **Initial value**: all\n   */\n  MozTransitionProperty?: TransitionPropertyProperty | TransitionPropertyProperty[];\n  /**\n   * The **`transition-timing-function`** CSS property sets how intermediate values are calculated for CSS properties being affected by a transition effect.\n   *\n   * **Initial value**: `ease`\n   */\n  MozTransitionTimingFunction?: TransitionTimingFunctionProperty | TransitionTimingFunctionProperty[];\n  /**\n   * The **`-moz-user-focus`** CSS property is used to indicate whether an element can have the focus.\n   *\n   * **Initial value**: `none`\n   */\n  MozUserFocus?: MozUserFocusProperty | MozUserFocusProperty[];\n  /**\n   * The **`user-modify`** property has no effect in Firefox. It was originally planned to determine whether or not the content of an element can be edited by a user.\n   *\n   * **Initial value**: `read-only`\n   */\n  MozUserModify?: MozUserModifyProperty | MozUserModifyProperty[];\n  /**\n   * The `**user-select**` CSS property controls whether the user can select text. This doesn't have any effect on content loaded as chrome, except in textboxes.\n   *\n   * **Initial value**: `auto`\n   */\n  MozUserSelect?: UserSelectProperty | UserSelectProperty[];\n  /**\n   * The **`-moz-window-dragging`** CSS property specifies whether a window is draggable or not. It only works in Chrome code, and only on Mac OS X.\n   *\n   * **Initial value**: `drag`\n   */\n  MozWindowDragging?: MozWindowDraggingProperty | MozWindowDraggingProperty[];\n  /**\n   * The **`-ms-accelerator`** CSS property is a Microsoft extension that sets or retrieves a string indicating whether the object represents a keyboard shortcut.\n   *\n   * **Initial value**: `false`\n   */\n  msAccelerator?: MsAcceleratorProperty | MsAcceleratorProperty[];\n  /**\n   * The **`align-self`** CSS property aligns flex items of the current flex line overriding the `align-items` value. If any of the item's cross-axis margin is set to `auto`, then `align-self` is ignored. In Grid layout `align-self` aligns the item inside the grid area.\n   *\n   * **Initial value**: `auto`\n   */\n  msAlignSelf?: AlignSelfProperty | AlignSelfProperty[];\n  /**\n   * The **`-ms-block-progression`** CSS property is a Microsoft extension that specifies the block progression and layout orientation.\n   *\n   * **Initial value**: `tb`\n   */\n  msBlockProgression?: MsBlockProgressionProperty | MsBlockProgressionProperty[];\n  /**\n   * The **`-ms-content-zoom-chaining`** CSS property is a Microsoft extension specifying the zoom behavior that occurs when a user hits the zoom limit during page manipulation.\n   *\n   * **Initial value**: `none`\n   */\n  msContentZoomChaining?: MsContentZoomChainingProperty | MsContentZoomChainingProperty[];\n  /**\n   * The **`-ms-content-zoom-limit-max`** CSS property is a Microsoft extension that specifies the selected elements' maximum zoom factor.\n   *\n   * **Initial value**: `400%`\n   */\n  msContentZoomLimitMax?: GlobalsString | GlobalsString[];\n  /**\n   * The **`-ms-content-zoom-limit-min`** CSS property is a Microsoft extension that specifies the minimum zoom factor.\n   *\n   * **Initial value**: `100%`\n   */\n  msContentZoomLimitMin?: GlobalsString | GlobalsString[];\n  /**\n   * The **`-ms-content-zoom-snap-points`** CSS property is a Microsoft extension that specifies where zoom snap-points are located.\n   *\n   * **Initial value**: `snapInterval(0%, 100%)`\n   */\n  msContentZoomSnapPoints?: GlobalsString | GlobalsString[];\n  /**\n   * The **`-ms-content-zoom-snap-type`** CSS property is a Microsoft extension that specifies how zooming is affected by defined snap-points.\n   *\n   * **Initial value**: `none`\n   */\n  msContentZoomSnapType?: MsContentZoomSnapTypeProperty | MsContentZoomSnapTypeProperty[];\n  /**\n   * The **`-ms-content-zooming`** CSS property is a Microsoft extension that specifies whether zooming is enabled.\n   *\n   * **Initial value**: zoom for the top level element, none for all other elements\n   */\n  msContentZooming?: MsContentZoomingProperty | MsContentZoomingProperty[];\n  /**\n   * The `-ms-filter` CSS property is a Microsoft extension that sets or retrieves the filter or collection of filters applied to an object.\n   *\n   * **Initial value**: \"\" (the empty string)\n   */\n  msFilter?: GlobalsString | GlobalsString[];\n  /**\n   * The **`flex-direction`** CSS property sets how flex items are placed in the flex container defining the main axis and the direction (normal or reversed).\n   *\n   * **Initial value**: `row`\n   */\n  msFlexDirection?: FlexDirectionProperty | FlexDirectionProperty[];\n  /**\n   * The **`flex-grow`** CSS property sets how much of the available space in the flex container should be assigned to that item (the flex grow factor). If all sibling items have the same flex grow factor, then all items will receive the same share of available space, otherwise it is distributed according to the ratio defined by the different flex grow factors.\n   *\n   * **Initial value**: `0`\n   */\n  msFlexPositive?: GlobalsNumber | GlobalsNumber[];\n  /**\n   * The **`-ms-flow-from`** CSS property is a Microsoft extension that gets or sets a value identifying a region container in the document that accepts the content flow from the data source.\n   *\n   * **Initial value**: `none`\n   */\n  msFlowFrom?: MsFlowFromProperty | MsFlowFromProperty[];\n  /**\n   * The **`-ms-flow-into`** CSS property is a Microsoft extension that gets or sets a value identifying an iframe container in the document that serves as the region's data source.\n   *\n   * **Initial value**: `none`\n   */\n  msFlowInto?: MsFlowIntoProperty | MsFlowIntoProperty[];\n  /**\n   * The **`grid-auto-columns`** CSS property specifies the size of an implicitly-created grid column track.\n   *\n   * **Initial value**: `auto`\n   */\n  msGridColumns?: GridAutoColumnsProperty<TLength> | GridAutoColumnsProperty<TLength>[];\n  /**\n   * The **`grid-auto-rows`** CSS property specifies the size of an implicitly-created grid row track.\n   *\n   * **Initial value**: `auto`\n   */\n  msGridRows?: GridAutoRowsProperty<TLength> | GridAutoRowsProperty<TLength>[];\n  /**\n   * The **`-ms-high-contrast-adjust`** CSS property is a Microsoft extension that gets or sets a value indicating whether to override any CSS properties that would have been set in high contrast mode.\n   *\n   * **Initial value**: `auto`\n   */\n  msHighContrastAdjust?: MsHighContrastAdjustProperty | MsHighContrastAdjustProperty[];\n  /**\n   * The **`-ms-hyphenate-limit-chars`** CSS property is a Microsoft extension that specifies one to three values indicating the minimum number of characters in a hyphenated word. If the word does not meet the required minimum number of characters in the word, before the hyphen, or after the hyphen, then the word is not hyphenated.\n   *\n   * **Initial value**: `auto`\n   */\n  msHyphenateLimitChars?: MsHyphenateLimitCharsProperty | MsHyphenateLimitCharsProperty[];\n  /**\n   * The **`-ms-hyphenate-limit-lines`** CSS property is a Microsoft extension specifying the maximum number of consecutive lines in an element that may be ended with a hyphenated word.\n   *\n   * **Initial value**: `no-limit`\n   */\n  msHyphenateLimitLines?: MsHyphenateLimitLinesProperty | MsHyphenateLimitLinesProperty[];\n  /**\n   * The `**-ms-hyphenate-limit-zone**` CSS property is a Microsoft extension specifying the width of the hyphenation zone.\n   *\n   * **Initial value**: `0`\n   */\n  msHyphenateLimitZone?: MsHyphenateLimitZoneProperty<TLength> | MsHyphenateLimitZoneProperty<TLength>[];\n  /**\n   * The **`hyphens`** CSS property specifies how words should be hyphenated when text wraps across multiple lines. You can prevent hyphenation entirely, use hyphenation in manually-specified points within the text, or let the browser automatically insert hyphens where appropriate.\n   *\n   * **Initial value**: `manual`\n   */\n  msHyphens?: HyphensProperty | HyphensProperty[];\n  /**\n   * The **`-ms-ime-align`** CSS property is a Microsoft extension aligning the Input Method Editor (IME) candidate window box relative to the element on which the IME composition is active. The extension is implemented in Microsoft Edge and Internet Explorer 11.\n   *\n   * **Initial value**: `auto`\n   */\n  msImeAlign?: MsImeAlignProperty | MsImeAlignProperty[];\n  /**\n   * The **`line-break`** CSS property sets how to break lines of Chinese, Japanese, or Korean (CJK) text when working with punctuation and symbols.\n   *\n   * **Initial value**: `auto`\n   */\n  msLineBreak?: LineBreakProperty | LineBreakProperty[];\n  /**\n   * The **`order`** CSS property sets the order to lay out an item in a flex or grid container. Items in a container are sorted by ascending `order` value and then by their source code order.\n   *\n   * **Initial value**: `0`\n   */\n  msOrder?: GlobalsNumber | GlobalsNumber[];\n  /**\n   * The **`-ms-overflow-style`** CSS property is a Microsoft extension controlling the behavior of scrollbars when the content of an element overflows.\n   *\n   * **Initial value**: `auto`\n   */\n  msOverflowStyle?: MsOverflowStyleProperty | MsOverflowStyleProperty[];\n  /**\n   * The **`overflow-x`** CSS property sets what shows when content overflows a block-level element's left and right edges. This may be nothing, a scroll bar, or the overflow content.\n   *\n   * **Initial value**: `visible`\n   */\n  msOverflowX?: OverflowXProperty | OverflowXProperty[];\n  /**\n   * The **`overflow-y`** CSS property sets what shows when content overflows a block-level element's top and bottom edges. This may be nothing, a scroll bar, or the overflow content.\n   *\n   * **Initial value**: `visible`\n   */\n  msOverflowY?: OverflowYProperty | OverflowYProperty[];\n  /**\n   * The `**-ms-scroll-chaining**` CSS property is a Microsoft extension that specifies the scrolling behavior that occurs when a user hits the scroll limit during a manipulation.\n   *\n   * **Initial value**: `chained`\n   */\n  msScrollChaining?: MsScrollChainingProperty | MsScrollChainingProperty[];\n  /**\n   * The `**-ms-scroll-limit-x-max**` CSS property is a Microsoft extension that specifies the maximum value for the `Element.scrollLeft` property.\n   *\n   * **Initial value**: `auto`\n   */\n  msScrollLimitXMax?: MsScrollLimitXMaxProperty<TLength> | MsScrollLimitXMaxProperty<TLength>[];\n  /**\n   * The **`-ms-scroll-limit-x-min`** CSS property is a Microsoft extension that specifies the minimum value for the `Element.scrollLeft` property.\n   *\n   * **Initial value**: `0`\n   */\n  msScrollLimitXMin?: MsScrollLimitXMinProperty<TLength> | MsScrollLimitXMinProperty<TLength>[];\n  /**\n   * The **`-ms-scroll-limit-y-max`** CSS property is a Microsoft extension that specifies the maximum value for the `Element.scrollTop` property.\n   *\n   * **Initial value**: `auto`\n   */\n  msScrollLimitYMax?: MsScrollLimitYMaxProperty<TLength> | MsScrollLimitYMaxProperty<TLength>[];\n  /**\n   * The **`-ms-scroll-limit-y-min`** CSS property is a Microsoft extension that specifies the minimum value for the `Element.scrollTop` property.\n   *\n   * **Initial value**: `0`\n   */\n  msScrollLimitYMin?: MsScrollLimitYMinProperty<TLength> | MsScrollLimitYMinProperty<TLength>[];\n  /**\n   * The **`-ms-scroll-rails`** CSS property is a Microsoft extension that specifies whether scrolling locks to the primary axis of motion.\n   *\n   * **Initial value**: `railed`\n   */\n  msScrollRails?: MsScrollRailsProperty | MsScrollRailsProperty[];\n  /**\n   * The **`-ms-scroll-snap-points-x`** CSS property is a Microsoft extension that specifies where snap-points will be located along the x-axis.\n   *\n   * **Initial value**: `snapInterval(0px, 100%)`\n   */\n  msScrollSnapPointsX?: GlobalsString | GlobalsString[];\n  /**\n   * The **`-ms-scroll-snap-points-y`** CSS property is a Microsoft extension that specifies where snap-points will be located along the y-axis.\n   *\n   * **Initial value**: `snapInterval(0px, 100%)`\n   */\n  msScrollSnapPointsY?: GlobalsString | GlobalsString[];\n  /**\n   * The **`scroll-snap-type`** CSS property sets how strictly snap points are enforced on the scroll container in case there is one.\n   *\n   * **Initial value**: `none`\n   */\n  msScrollSnapType?: MsScrollSnapTypeProperty | MsScrollSnapTypeProperty[];\n  /**\n   * The **`-ms-scroll-translation`** CSS property is a Microsoft extension that specifies whether vertical-to-horizontal scroll wheel translation occurs on the specified element.\n   *\n   * **Initial value**: `none`\n   */\n  msScrollTranslation?: MsScrollTranslationProperty | MsScrollTranslationProperty[];\n  /**\n   * The **`-ms-scrollbar-3dlight-color`** CSS property is a Microsoft extension specifying the color of the top and left edges of the scroll box and scroll arrows of a scroll bar.\n   *\n   * **Initial value**: depends on user agent\n   */\n  msScrollbar3dlightColor?: MsScrollbar3dlightColorProperty | MsScrollbar3dlightColorProperty[];\n  /**\n   * The **`-ms-scrollbar-arrow-color`** CSS property is a Microsoft extension that specifies the color of the arrow elements of a scroll arrow.\n   *\n   * **Initial value**: `ButtonText`\n   */\n  msScrollbarArrowColor?: MsScrollbarArrowColorProperty | MsScrollbarArrowColorProperty[];\n  /**\n   * The `**-ms-scrollbar-base-color**` CSS property is a Microsoft extension that specifies the base color of the main elements of a scroll bar.\n   *\n   * **Initial value**: depends on user agent\n   */\n  msScrollbarBaseColor?: MsScrollbarBaseColorProperty | MsScrollbarBaseColorProperty[];\n  /**\n   * The **`-ms-scrollbar-darkshadow-color`** CSS property is a Microsoft extension that specifies the color of a scroll bar's gutter.\n   *\n   * **Initial value**: `ThreeDDarkShadow`\n   */\n  msScrollbarDarkshadowColor?: MsScrollbarDarkshadowColorProperty | MsScrollbarDarkshadowColorProperty[];\n  /**\n   * The `**-ms-scrollbar-face-color**` CSS property is a Microsoft extension that specifies the color of the scroll box and scroll arrows of a scroll bar.\n   *\n   * **Initial value**: `ThreeDFace`\n   */\n  msScrollbarFaceColor?: MsScrollbarFaceColorProperty | MsScrollbarFaceColorProperty[];\n  /**\n   * The `**-ms-scrollbar-highlight-color**` CSS property is a Microsoft extension that specifies the color of the slider tray, the top and left edges of the scroll box, and the scroll arrows of a scroll bar.\n   *\n   * **Initial value**: `ThreeDHighlight`\n   */\n  msScrollbarHighlightColor?: MsScrollbarHighlightColorProperty | MsScrollbarHighlightColorProperty[];\n  /**\n   * The **`-ms-scrollbar-shadow-color`** CSS property is a Microsoft extension that specifies the color of the bottom and right edges of the scroll box and scroll arrows of a scroll bar.\n   *\n   * **Initial value**: `ThreeDDarkShadow`\n   */\n  msScrollbarShadowColor?: MsScrollbarShadowColorProperty | MsScrollbarShadowColorProperty[];\n  /**\n   * The **`-ms-text-autospace`** CSS property is a Microsoft extension that specifies the autospacing and narrow space width adjustment of text.\n   *\n   * **Initial value**: `none`\n   */\n  msTextAutospace?: MsTextAutospaceProperty | MsTextAutospaceProperty[];\n  /**\n   * The **`text-combine-upright`** CSS property sets the combination of characters into the space of a single character. If the combined text is wider than 1em, the user agent must fit the contents within 1em. The resulting composition is treated as a single upright glyph for layout and decoration. This property only has an effect in vertical writing modes.\n   *\n   * **Initial value**: `none`\n   */\n  msTextCombineHorizontal?: TextCombineUprightProperty | TextCombineUprightProperty[];\n  /**\n   * The **`text-overflow`** CSS property sets how hidden overflow content is signaled to users. It can be clipped, display an ellipsis ('`…`'), or display a custom string.\n   *\n   * **Initial value**: `clip`\n   */\n  msTextOverflow?: TextOverflowProperty | TextOverflowProperty[];\n  /**\n   * The **`touch-action`** CSS property sets how a region can be manipulated by a touchscreen user (for example, by zooming features built into the browser).\n   *\n   * **Initial value**: `auto`\n   */\n  msTouchAction?: TouchActionProperty | TouchActionProperty[];\n  /**\n   * The **`-ms-touch-select`** CSS property is a Microsoft extension that toggles the gripper visual elements that enable touch text selection.\n   *\n   * **Initial value**: `grippers`\n   */\n  msTouchSelect?: MsTouchSelectProperty | MsTouchSelectProperty[];\n  /**\n   * The **`transform`** CSS property lets you rotate, scale, skew, or translate an element. It modifies the coordinate space of the CSS visual formatting model.\n   *\n   * **Initial value**: `none`\n   */\n  msTransform?: TransformProperty | TransformProperty[];\n  /**\n   * The **`transform-origin`** CSS property sets the origin for an element's transformations.\n   *\n   * **Initial value**: `50% 50% 0`\n   */\n  msTransformOrigin?: TransformOriginProperty<TLength> | TransformOriginProperty<TLength>[];\n  /**\n   * The **`transition-delay`** CSS property specifies the duration to wait before starting a property's transition effect when its value changes.\n   *\n   * **Initial value**: `0s`\n   */\n  msTransitionDelay?: GlobalsString | GlobalsString[];\n  /**\n   * The **`transition-duration`** CSS property sets the length of time a transition animation should take to complete. By default, the value is `0s`, meaning that no animation will occur.\n   *\n   * **Initial value**: `0s`\n   */\n  msTransitionDuration?: GlobalsString | GlobalsString[];\n  /**\n   * The **`transition-property`** CSS property sets the CSS properties to which a transition effect should be applied.\n   *\n   * **Initial value**: all\n   */\n  msTransitionProperty?: TransitionPropertyProperty | TransitionPropertyProperty[];\n  /**\n   * The **`transition-timing-function`** CSS property sets how intermediate values are calculated for CSS properties being affected by a transition effect.\n   *\n   * **Initial value**: `ease`\n   */\n  msTransitionTimingFunction?: TransitionTimingFunctionProperty | TransitionTimingFunctionProperty[];\n  /**\n   * The `**user-select**` CSS property controls whether the user can select text. This doesn't have any effect on content loaded as chrome, except in textboxes.\n   *\n   * **Initial value**: `text`\n   */\n  msUserSelect?: MsUserSelectProperty | MsUserSelectProperty[];\n  /**\n   * The **`word-break`** CSS property sets whether line breaks appear wherever the text would otherwise overflow its content box.\n   *\n   * **Initial value**: `normal`\n   */\n  msWordBreak?: WordBreakProperty | WordBreakProperty[];\n  /**\n   * The **`-ms-wrap-flow`** CSS property is a Microsoft extension that specifies how exclusions impact inline content within block-level elements.\n   *\n   * **Initial value**: `auto`\n   */\n  msWrapFlow?: MsWrapFlowProperty | MsWrapFlowProperty[];\n  /**\n   * The **`-ms-wrap-margin`** CSS property is a Microsoft extension that specifies a margin that offsets the inner wrap shape from other shapes.\n   *\n   * **Initial value**: `0`\n   */\n  msWrapMargin?: MsWrapMarginProperty<TLength> | MsWrapMarginProperty<TLength>[];\n  /**\n   * The **`-ms-wrap-through`** CSS property is a Microsoft extension that specifies how content should wrap around an exclusion element.\n   *\n   * **Initial value**: `wrap`\n   */\n  msWrapThrough?: MsWrapThroughProperty | MsWrapThroughProperty[];\n  /**\n   * The **`writing-mode`** CSS property sets whether lines of text are laid out horizontally or vertically, as well as the direction in which blocks progress.\n   *\n   * **Initial value**: `horizontal-tb`\n   */\n  msWritingMode?: WritingModeProperty | WritingModeProperty[];\n  /**\n   * The **`object-fit`** CSS property sets how the content of a replaced element, such as an `<img>` or `<video>`, should be resized to fit its container.\n   *\n   * **Initial value**: `fill`\n   */\n  OObjectFit?: ObjectFitProperty | ObjectFitProperty[];\n  /**\n   * The **`object-position`** CSS property specifies the alignment of the selected replaced element's contents within the element's box. Areas of the box which aren't covered by the replaced element's object will show the element's background.\n   *\n   * **Initial value**: `50% 50%`\n   */\n  OObjectPosition?: ObjectPositionProperty<TLength> | ObjectPositionProperty<TLength>[];\n  /**\n   * The **`tab-size`** CSS property is used to customize the width of a tab (`U+0009`) character.\n   *\n   * **Initial value**: `8`\n   */\n  OTabSize?: TabSizeProperty<TLength> | TabSizeProperty<TLength>[];\n  /**\n   * The **`text-overflow`** CSS property sets how hidden overflow content is signaled to users. It can be clipped, display an ellipsis ('`…`'), or display a custom string.\n   *\n   * **Initial value**: `clip`\n   */\n  OTextOverflow?: TextOverflowProperty | TextOverflowProperty[];\n  /**\n   * The **`transform-origin`** CSS property sets the origin for an element's transformations.\n   *\n   * **Initial value**: `50% 50% 0`\n   */\n  OTransformOrigin?: TransformOriginProperty<TLength> | TransformOriginProperty<TLength>[];\n  /**\n   * The CSS **`align-content`** property sets how the browser distributes space between and around content items along the cross-axis of a flexbox container, and the main-axis of a grid container.\n   *\n   * **Initial value**: `normal`\n   */\n  WebkitAlignContent?: AlignContentProperty | AlignContentProperty[];\n  /**\n   * The CSS **`align-items`** property sets the `align-self` value on all direct children as a group. The align-self property sets the alignment of an item within its containing block. In Flexbox it controls the alignment of items on the Cross Axis, in Grid Layout it controls the alignment of items on the Block Axis within their grid area.\n   *\n   * **Initial value**: `normal`\n   */\n  WebkitAlignItems?: AlignItemsProperty | AlignItemsProperty[];\n  /**\n   * The **`align-self`** CSS property aligns flex items of the current flex line overriding the `align-items` value. If any of the item's cross-axis margin is set to `auto`, then `align-self` is ignored. In Grid layout `align-self` aligns the item inside the grid area.\n   *\n   * **Initial value**: `auto`\n   */\n  WebkitAlignSelf?: AlignSelfProperty | AlignSelfProperty[];\n  /**\n   * The **`animation-delay`** CSS property sets when an animation starts. The animation can start later, immediately from its beginning, or immediately and partway through the animation.\n   *\n   * **Initial value**: `0s`\n   */\n  WebkitAnimationDelay?: GlobalsString | GlobalsString[];\n  /**\n   * The **`animation-direction`** CSS property sets whether an animation should play forwards, backwards, or alternating back and forth.\n   *\n   * **Initial value**: `normal`\n   */\n  WebkitAnimationDirection?: AnimationDirectionProperty | AnimationDirectionProperty[];\n  /**\n   * The **`animation-duration`** CSS property sets the length of time that an animation takes to complete one cycle.\n   *\n   * **Initial value**: `0s`\n   */\n  WebkitAnimationDuration?: GlobalsString | GlobalsString[];\n  /**\n   * The **`animation-fill-mode`** CSS property sets how a CSS animation applies styles to its target before and after its execution.\n   *\n   * **Initial value**: `none`\n   */\n  WebkitAnimationFillMode?: AnimationFillModeProperty | AnimationFillModeProperty[];\n  /**\n   * The **`animation-iteration-count`** CSS property sets the number of times an animation cycle should be played before stopping.\n   *\n   * **Initial value**: `1`\n   */\n  WebkitAnimationIterationCount?: AnimationIterationCountProperty | AnimationIterationCountProperty[];\n  /**\n   * The **`animation-name`** CSS property sets one or more animations to apply to an element. Each name is an `@keyframes` at-rule that sets the property values for the animation sequence.\n   *\n   * **Initial value**: `none`\n   */\n  WebkitAnimationName?: AnimationNameProperty | AnimationNameProperty[];\n  /**\n   * The **`animation-play-state`** CSS property sets whether an animation is running or paused.\n   *\n   * **Initial value**: `running`\n   */\n  WebkitAnimationPlayState?: AnimationPlayStateProperty | AnimationPlayStateProperty[];\n  /**\n   * The `**animation-timing-function**` CSS property sets how an animation progresses through the duration of each cycle.\n   *\n   * **Initial value**: `ease`\n   */\n  WebkitAnimationTimingFunction?: AnimationTimingFunctionProperty | AnimationTimingFunctionProperty[];\n  /**\n   * The **`-moz-appearance`** CSS property is used in Gecko (Firefox) to display an element using platform-native styling based on the operating system's theme.\n   *\n   * **Initial value**: `none` (but this value is overridden in the user agent CSS)\n   */\n  WebkitAppearance?: WebkitAppearanceProperty | WebkitAppearanceProperty[];\n  /**\n   * The **`backdrop-filter`** CSS property lets you apply graphical effects such as blurring or color shifting to the area behind an element. Because it applies to everything _behind_ the element, to see the effect you must make the element or its background at least partially transparent.\n   *\n   * **Initial value**: `none`\n   */\n  WebkitBackdropFilter?: BackdropFilterProperty | BackdropFilterProperty[];\n  /**\n   * The **`backface-visibility`** CSS property sets whether the back face of an element is visible when turned towards the user.\n   *\n   * **Initial value**: `visible`\n   */\n  WebkitBackfaceVisibility?: BackfaceVisibilityProperty | BackfaceVisibilityProperty[];\n  /**\n   * The **`background-clip`** CSS property sets whether an element's background `<color>` or `<image>` extends underneath its border.\n   *\n   * **Initial value**: `border-box`\n   */\n  WebkitBackgroundClip?: BackgroundClipProperty | BackgroundClipProperty[];\n  /**\n   * The **`background-origin`** CSS property sets the _background positioning area_. In other words, it sets the origin position of an image set with the `background-image` property.\n   *\n   * **Initial value**: `padding-box`\n   */\n  WebkitBackgroundOrigin?: BackgroundOriginProperty | BackgroundOriginProperty[];\n  /**\n   * The **`background-size`** CSS property sets the size of the element's background image. The image can be left to its natural size, stretched, or constrained to fit the available space.\n   *\n   * **Initial value**: `auto auto`\n   */\n  WebkitBackgroundSize?: BackgroundSizeProperty<TLength> | BackgroundSizeProperty<TLength>[];\n  /** **Initial value**: `currentcolor` */\n  WebkitBorderBeforeColor?: WebkitBorderBeforeColorProperty | WebkitBorderBeforeColorProperty[];\n  /** **Initial value**: `none` */\n  WebkitBorderBeforeStyle?: WebkitBorderBeforeStyleProperty | WebkitBorderBeforeStyleProperty[];\n  /** **Initial value**: `medium` */\n  WebkitBorderBeforeWidth?: WebkitBorderBeforeWidthProperty<TLength> | WebkitBorderBeforeWidthProperty<TLength>[];\n  /**\n   * The **`border-bottom-left-radius`** CSS property rounds the bottom-left corner of an element.\n   *\n   * **Initial value**: `0`\n   */\n  WebkitBorderBottomLeftRadius?: BorderBottomLeftRadiusProperty<TLength> | BorderBottomLeftRadiusProperty<TLength>[];\n  /**\n   * The **`border-bottom-right-radius`** CSS property rounds the bottom-right corner of an element.\n   *\n   * **Initial value**: `0`\n   */\n  WebkitBorderBottomRightRadius?: BorderBottomRightRadiusProperty<TLength> | BorderBottomRightRadiusProperty<TLength>[];\n  /**\n   * The **`border-image-slice`** CSS property divides the image specified by `border-image-source` into regions. These regions form the components of an element's border image.\n   *\n   * **Initial value**: `100%`\n   */\n  WebkitBorderImageSlice?: BorderImageSliceProperty | BorderImageSliceProperty[];\n  /**\n   * The **`border-top-left-radius`** CSS property rounds the top-left corner of an element.\n   *\n   * **Initial value**: `0`\n   */\n  WebkitBorderTopLeftRadius?: BorderTopLeftRadiusProperty<TLength> | BorderTopLeftRadiusProperty<TLength>[];\n  /**\n   * The **`border-top-right-radius`** CSS property rounds the top-right corner of an element.\n   *\n   * **Initial value**: `0`\n   */\n  WebkitBorderTopRightRadius?: BorderTopRightRadiusProperty<TLength> | BorderTopRightRadiusProperty<TLength>[];\n  /**\n   * The **`box-decoration-break`** CSS property specifies how an element's fragments should be rendered when broken across multiple lines, columns, or pages.\n   *\n   * **Initial value**: `slice`\n   */\n  WebkitBoxDecorationBreak?: BoxDecorationBreakProperty | BoxDecorationBreakProperty[];\n  /**\n   * The **`-webkit-box-reflect`** CSS property lets you reflect the content of an element in one specific direction.\n   *\n   * **Initial value**: `none`\n   */\n  WebkitBoxReflect?: WebkitBoxReflectProperty<TLength> | WebkitBoxReflectProperty<TLength>[];\n  /**\n   * The **`box-shadow`** CSS property adds shadow effects around an element's frame. You can set multiple effects separated by commas. A box shadow is described by X and Y offsets relative to the element, blur and spread radii, and color.\n   *\n   * **Initial value**: `none`\n   */\n  WebkitBoxShadow?: BoxShadowProperty | BoxShadowProperty[];\n  /**\n   * The **`box-sizing`** CSS property defines how the user agent should calculate the total width and height of an element.\n   *\n   * **Initial value**: `content-box`\n   */\n  WebkitBoxSizing?: BoxSizingProperty | BoxSizingProperty[];\n  /**\n   * The `**clip-path**` CSS property creates a clipping region that sets what part of an element should be shown. Parts that are inside the region are shown, while those outside are hidden.\n   *\n   * **Initial value**: `none`\n   */\n  WebkitClipPath?: ClipPathProperty | ClipPathProperty[];\n  /**\n   * The **`color-adjust`** CSS property sets what, if anything, the user agent may do to optimize the appearance of the element on the output device. By default, the browser is allowed to make any adjustments to the element's appearance it determines to be necessary and prudent given the type and capabilities of the output device.\n   *\n   * **Initial value**: `economy`\n   */\n  WebkitColorAdjust?: ColorAdjustProperty | ColorAdjustProperty[];\n  /**\n   * The **`column-count`** CSS property breaks an element's content into the specified number of columns.\n   *\n   * **Initial value**: `auto`\n   */\n  WebkitColumnCount?: ColumnCountProperty | ColumnCountProperty[];\n  /**\n   * The **`column-fill`** CSS property controls how an element's contents are balanced when broken into columns.\n   *\n   * **Initial value**: `balance`\n   */\n  WebkitColumnFill?: ColumnFillProperty | ColumnFillProperty[];\n  /**\n   * The **`column-gap`** CSS property sets the size of the gap (gutter) between an element's columns.\n   *\n   * **Initial value**: `normal`\n   */\n  WebkitColumnGap?: ColumnGapProperty<TLength> | ColumnGapProperty<TLength>[];\n  /**\n   * The **`column-rule-color`** CSS property sets the color of the rule (line) drawn between columns in a multi-column layout.\n   *\n   * **Initial value**: `currentcolor`\n   */\n  WebkitColumnRuleColor?: ColumnRuleColorProperty | ColumnRuleColorProperty[];\n  /**\n   * The **`column-rule-style`** CSS property sets the style of the line drawn between columns in a multi-column layout.\n   *\n   * **Initial value**: `none`\n   */\n  WebkitColumnRuleStyle?: ColumnRuleStyleProperty | ColumnRuleStyleProperty[];\n  /**\n   * The **`column-rule-width`** CSS property sets the width of the rule (line) drawn between columns in a multi-column layout.\n   *\n   * **Initial value**: `medium`\n   */\n  WebkitColumnRuleWidth?: ColumnRuleWidthProperty<TLength> | ColumnRuleWidthProperty<TLength>[];\n  /**\n   * The **`column-span`** CSS property makes it possible for an element to span across all columns when its value is set to `all`.\n   *\n   * **Initial value**: `none`\n   */\n  WebkitColumnSpan?: ColumnSpanProperty | ColumnSpanProperty[];\n  /**\n   * The **`column-width`** CSS property specifies the ideal column width in a multi-column layout. The container will have as many columns as can fit without any of them having a width less than the `column-width` value. If the width of the container is narrower than the specified value, the single column's width will be smaller than the declared column width.\n   *\n   * **Initial value**: `auto`\n   */\n  WebkitColumnWidth?: ColumnWidthProperty<TLength> | ColumnWidthProperty<TLength>[];\n  /**\n   * The **`filter`** CSS property applies graphical effects like blur or color shift to an element. Filters are commonly used to adjust the rendering of images, backgrounds, and borders.\n   *\n   * **Initial value**: `none`\n   */\n  WebkitFilter?: FilterProperty | FilterProperty[];\n  /**\n   * The **`flex-basis`** CSS property sets the initial main size of a flex item. It sets the size of the content box unless otherwise set with `box-sizing`.\n   *\n   * **Initial value**: `auto`\n   */\n  WebkitFlexBasis?: FlexBasisProperty<TLength> | FlexBasisProperty<TLength>[];\n  /**\n   * The **`flex-direction`** CSS property sets how flex items are placed in the flex container defining the main axis and the direction (normal or reversed).\n   *\n   * **Initial value**: `row`\n   */\n  WebkitFlexDirection?: FlexDirectionProperty | FlexDirectionProperty[];\n  /**\n   * The **`flex-grow`** CSS property sets how much of the available space in the flex container should be assigned to that item (the flex grow factor). If all sibling items have the same flex grow factor, then all items will receive the same share of available space, otherwise it is distributed according to the ratio defined by the different flex grow factors.\n   *\n   * **Initial value**: `0`\n   */\n  WebkitFlexGrow?: GlobalsNumber | GlobalsNumber[];\n  /**\n   * The **`flex-shrink`** CSS property sets the flex shrink factor of a flex item. If the size of flex items is larger than the flex container, items shrink to fit according to `flex-shrink`.\n   *\n   * **Initial value**: `1`\n   */\n  WebkitFlexShrink?: GlobalsNumber | GlobalsNumber[];\n  /**\n   * The **`flex-wrap`** CSS property sets whether flex items are forced onto one line or can wrap onto multiple lines. If wrapping is allowed, it sets the direction that lines are stacked.\n   *\n   * **Initial value**: `nowrap`\n   */\n  WebkitFlexWrap?: FlexWrapProperty | FlexWrapProperty[];\n  /**\n   * The **`font-feature-settings`** CSS property controls advanced typographic features in OpenType fonts.\n   *\n   * **Initial value**: `normal`\n   */\n  WebkitFontFeatureSettings?: FontFeatureSettingsProperty | FontFeatureSettingsProperty[];\n  /**\n   * The **`font-kerning`** CSS property sets the use of the kerning information stored in a font.\n   *\n   * **Initial value**: `auto`\n   */\n  WebkitFontKerning?: FontKerningProperty | FontKerningProperty[];\n  /**\n   * The **`font-variant-ligatures`** CSS property controls which ligatures and contextual forms are used in textual content of the elements it applies to. This leads to more harmonized forms in the resulting text.\n   *\n   * **Initial value**: `normal`\n   */\n  WebkitFontVariantLigatures?: FontVariantLigaturesProperty | FontVariantLigaturesProperty[];\n  /**\n   * The **`hyphens`** CSS property specifies how words should be hyphenated when text wraps across multiple lines. You can prevent hyphenation entirely, use hyphenation in manually-specified points within the text, or let the browser automatically insert hyphens where appropriate.\n   *\n   * **Initial value**: `manual`\n   */\n  WebkitHyphens?: HyphensProperty | HyphensProperty[];\n  /**\n   * The CSS **`justify-content`** property defines how the browser distributes space between and around content items along the main-axis of a flex container, and the inline axis of a grid container.\n   *\n   * **Initial value**: `normal`\n   */\n  WebkitJustifyContent?: JustifyContentProperty | JustifyContentProperty[];\n  /**\n   * The **`line-break`** CSS property sets how to break lines of Chinese, Japanese, or Korean (CJK) text when working with punctuation and symbols.\n   *\n   * **Initial value**: `auto`\n   */\n  WebkitLineBreak?: LineBreakProperty | LineBreakProperty[];\n  /**\n   * The **`-webkit-line-clamp`** CSS property allows limiting of the contents of a block container to the specified number of lines.\n   *\n   * **Initial value**: `none`\n   */\n  WebkitLineClamp?: WebkitLineClampProperty | WebkitLineClampProperty[];\n  /**\n   * The **`margin-inline-end`** CSS property defines the logical inline end margin of an element, which maps to a physical margin depending on the element's writing mode, directionality, and text orientation. In other words, it corresponds to the `margin-top`, `margin-right`, `margin-bottom` or `margin-left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `0`\n   */\n  WebkitMarginEnd?: MarginInlineEndProperty<TLength> | MarginInlineEndProperty<TLength>[];\n  /**\n   * The **`margin-inline-start`** CSS property defines the logical inline start margin of an element, which maps to a physical margin depending on the element's writing mode, directionality, and text orientation. It corresponds to the `margin-top`, `margin-right`, `margin-bottom`, or `margin-left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `0`\n   */\n  WebkitMarginStart?: MarginInlineStartProperty<TLength> | MarginInlineStartProperty<TLength>[];\n  /**\n   * If a `-webkit-mask-image` is specified, `-webkit-mask-attachment` determines whether the mask image's position is fixed within the viewport, or scrolls along with its containing block.\n   *\n   * **Initial value**: `scroll`\n   */\n  WebkitMaskAttachment?: WebkitMaskAttachmentProperty | WebkitMaskAttachmentProperty[];\n  /**\n   * The **`mask-clip`** CSS property determines the area, which is affected by a mask. The painted content of an element must be restricted to this area.\n   *\n   * **Initial value**: `border`\n   */\n  WebkitMaskClip?: WebkitMaskClipProperty | WebkitMaskClipProperty[];\n  /**\n   * The **`-webkit-mask-composite`** property specifies the manner in which multiple mask images applied to the same element are composited with one another. Mask images are composited in the opposite order that they are declared with the `-webkit-mask-image` property.\n   *\n   * **Initial value**: `source-over`\n   */\n  WebkitMaskComposite?: WebkitMaskCompositeProperty | WebkitMaskCompositeProperty[];\n  /**\n   * The **`mask-image`** CSS property sets the image that is used as mask layer for an element.\n   *\n   * **Initial value**: `none`\n   */\n  WebkitMaskImage?: WebkitMaskImageProperty | WebkitMaskImageProperty[];\n  /**\n   * The **`mask-origin`** CSS property sets the origin of a mask.\n   *\n   * **Initial value**: `padding`\n   */\n  WebkitMaskOrigin?: WebkitMaskOriginProperty | WebkitMaskOriginProperty[];\n  /**\n   * The **`mask-position`** CSS property sets the initial position, relative to the mask position layer set by `mask-origin`, for each defined mask image.\n   *\n   * **Initial value**: `0% 0%`\n   */\n  WebkitMaskPosition?: WebkitMaskPositionProperty<TLength> | WebkitMaskPositionProperty<TLength>[];\n  /**\n   * The `-webkit-mask-position-x` CSS property sets the initial horizontal position of a mask image.\n   *\n   * **Initial value**: `0%`\n   */\n  WebkitMaskPositionX?: WebkitMaskPositionXProperty<TLength> | WebkitMaskPositionXProperty<TLength>[];\n  /**\n   * The `-webkit-mask-position-y` CSS property sets the initial vertical position of a mask image.\n   *\n   * **Initial value**: `0%`\n   */\n  WebkitMaskPositionY?: WebkitMaskPositionYProperty<TLength> | WebkitMaskPositionYProperty<TLength>[];\n  /**\n   * The **`mask-repeat`** CSS property sets how mask images are repeated. A mask image can be repeated along the horizontal axis, the vertical axis, both axes, or not repeated at all.\n   *\n   * **Initial value**: `repeat`\n   */\n  WebkitMaskRepeat?: WebkitMaskRepeatProperty | WebkitMaskRepeatProperty[];\n  /**\n   * The `-webkit-mask-repeat-x` property specifies whether and how a mask image is repeated (tiled) horizontally.\n   *\n   * **Initial value**: `repeat`\n   */\n  WebkitMaskRepeatX?: WebkitMaskRepeatXProperty | WebkitMaskRepeatXProperty[];\n  /**\n   * The `-webkit-mask-repeat-y` property sets whether and how a mask image is repeated (tiled) vertically.\n   *\n   * **Initial value**: `repeat`\n   */\n  WebkitMaskRepeatY?: WebkitMaskRepeatYProperty | WebkitMaskRepeatYProperty[];\n  /**\n   * The **`mask-size`** CSS property specifies the sizes of the mask images. The size of the image can be fully or partially constrained in order to preserve its intrinsic ratio.\n   *\n   * **Initial value**: `auto auto`\n   */\n  WebkitMaskSize?: WebkitMaskSizeProperty<TLength> | WebkitMaskSizeProperty<TLength>[];\n  /**\n   * The **`max-inline-size`** CSS property defines the horizontal or vertical maximum size of an element's block depending on its writing mode. It corresponds to the `max-width` or the `max-height` property depending on the value defined for `writing-mode`. If the writing mode is vertically oriented, the value of `max-inline-size` relates to the maximal height of the element, otherwise it relates to the maximal width of the element. It relates to `max-block-size`, which defines the other dimension of the element.\n   *\n   * **Initial value**: `0`\n   */\n  WebkitMaxInlineSize?: MaxInlineSizeProperty<TLength> | MaxInlineSizeProperty<TLength>[];\n  /**\n   * The **`order`** CSS property sets the order to lay out an item in a flex or grid container. Items in a container are sorted by ascending `order` value and then by their source code order.\n   *\n   * **Initial value**: `0`\n   */\n  WebkitOrder?: GlobalsNumber | GlobalsNumber[];\n  /**\n   * The `-webkit-overflow-scrolling` CSS property controls whether or not touch devices use momentum-based scrolling for a given element.\n   *\n   * **Initial value**: `auto`\n   */\n  WebkitOverflowScrolling?: WebkitOverflowScrollingProperty | WebkitOverflowScrollingProperty[];\n  /**\n   * The **`padding-inline-end`** CSS property defines the logical inline end padding of an element, which maps to a physical padding depending on the element's writing mode, directionality, and text orientation. It corresponds to the `padding-top`, `padding-right`, `padding-bottom`, or `padding-left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `0`\n   */\n  WebkitPaddingEnd?: PaddingInlineEndProperty<TLength> | PaddingInlineEndProperty<TLength>[];\n  /**\n   * The **`padding-inline-start`** CSS property defines the logical inline start padding of an element, which maps to a physical padding depending on the element's writing mode, directionality, and text orientation. It corresponds to the `padding-top`, `padding-right`, `padding-bottom`, or `padding-left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `0`\n   */\n  WebkitPaddingStart?: PaddingInlineStartProperty<TLength> | PaddingInlineStartProperty<TLength>[];\n  /**\n   * The **`perspective`** CSS property determines the distance between the z=0 plane and the user in order to give a 3D-positioned element some perspective. Each 3D element with z>0 becomes larger; each 3D-element with z<0 becomes smaller. The strength of the effect is determined by the value of this property.\n   *\n   * **Initial value**: `none`\n   */\n  WebkitPerspective?: PerspectiveProperty<TLength> | PerspectiveProperty<TLength>[];\n  /**\n   * The **`perspective-origin`** CSS property determines the position at which the viewer is looking. It is used as the _vanishing point_ by the `perspective` property.\n   *\n   * **Initial value**: `50% 50%`\n   */\n  WebkitPerspectiveOrigin?: PerspectiveOriginProperty<TLength> | PerspectiveOriginProperty<TLength>[];\n  /**\n   * The **`scroll-snap-type`** CSS property sets how strictly snap points are enforced on the scroll container in case there is one.\n   *\n   * **Initial value**: `none`\n   */\n  WebkitScrollSnapType?: ScrollSnapTypeProperty | ScrollSnapTypeProperty[];\n  /**\n   * The **`shape-margin`** CSS property sets a margin for a CSS shape created using `shape-outside`.\n   *\n   * **Initial value**: `0`\n   */\n  WebkitShapeMargin?: ShapeMarginProperty<TLength> | ShapeMarginProperty<TLength>[];\n  /**\n   * **`-webkit-tap-highlight-color`** is a non-standard CSS property that sets the color of the highlight that appears over a link while it's being tapped. The highlighting indicates to the user that their tap is being successfully recognized, and indicates which element they're tapping on.\n   *\n   * **Initial value**: `black`\n   */\n  WebkitTapHighlightColor?: WebkitTapHighlightColorProperty | WebkitTapHighlightColorProperty[];\n  /**\n   * The **`text-combine-upright`** CSS property sets the combination of characters into the space of a single character. If the combined text is wider than 1em, the user agent must fit the contents within 1em. The resulting composition is treated as a single upright glyph for layout and decoration. This property only has an effect in vertical writing modes.\n   *\n   * **Initial value**: `none`\n   */\n  WebkitTextCombine?: TextCombineUprightProperty | TextCombineUprightProperty[];\n  /**\n   * The **`text-decoration-color`** CSS property sets the color of decorations added to text by `text-decoration-line`.\n   *\n   * **Initial value**: `currentcolor`\n   */\n  WebkitTextDecorationColor?: TextDecorationColorProperty | TextDecorationColorProperty[];\n  /**\n   * The **`text-decoration-line`** CSS property sets the kind of decoration that is used on text in an element, such as an underline or overline.\n   *\n   * **Initial value**: `none`\n   */\n  WebkitTextDecorationLine?: TextDecorationLineProperty | TextDecorationLineProperty[];\n  /**\n   * The **`text-decoration-skip`** CSS property sets what parts of an element’s content any text decoration affecting the element must skip over. It controls all text decoration lines drawn by the element and also any text decoration lines drawn by its ancestors.\n   *\n   * **Initial value**: `objects`\n   */\n  WebkitTextDecorationSkip?: TextDecorationSkipProperty | TextDecorationSkipProperty[];\n  /**\n   * The **`text-decoration-style`** CSS property sets the style of the lines specified by `text-decoration-line`. The style applies to all lines that are set with `text-decoration-line`.\n   *\n   * **Initial value**: `solid`\n   */\n  WebkitTextDecorationStyle?: TextDecorationStyleProperty | TextDecorationStyleProperty[];\n  /**\n   * The **`text-emphasis-color`** CSS property sets the color of emphasis marks. This value can also be set using the `text-emphasis` shorthand.\n   *\n   * **Initial value**: `currentcolor`\n   */\n  WebkitTextEmphasisColor?: TextEmphasisColorProperty | TextEmphasisColorProperty[];\n  /**\n   * The **`text-emphasis-position`** CSS property sets where emphasis marks are drawn. Like ruby text, if there isn't enough room for emphasis marks, the line height is increased.\n   *\n   * **Initial value**: `over right`\n   */\n  WebkitTextEmphasisPosition?: GlobalsString | GlobalsString[];\n  /**\n   * The **`text-emphasis-style`** CSS property sets the appearance of emphasis marks. It can also be set, and reset, using the `text-emphasis` shorthand.\n   *\n   * **Initial value**: `none`\n   */\n  WebkitTextEmphasisStyle?: TextEmphasisStyleProperty | TextEmphasisStyleProperty[];\n  /**\n   * The **`-webkit-text-fill-color`** CSS property specifies the fill color of characters of text. If this property is not set, the value of the `color` property is used.\n   *\n   * **Initial value**: `currentcolor`\n   */\n  WebkitTextFillColor?: WebkitTextFillColorProperty | WebkitTextFillColorProperty[];\n  /**\n   * The **`text-orientation`** CSS property sets the orientation of the text characters in a line. It only affects text in vertical mode (when `writing-mode` is not `horizontal-tb`). It is useful for controlling the display of languages that use vertical script, and also for making vertical table headers.\n   *\n   * **Initial value**: `mixed`\n   */\n  WebkitTextOrientation?: TextOrientationProperty | TextOrientationProperty[];\n  /**\n   * The **`text-size-adjust`** CSS property controls the text inflation algorithm used on some smartphones and tablets. Other browsers will ignore this property.\n   *\n   * **Initial value**: `auto` for smartphone browsers supporting inflation, `none` in other cases (and then not modifiable).\n   */\n  WebkitTextSizeAdjust?: TextSizeAdjustProperty | TextSizeAdjustProperty[];\n  /**\n   * The **`-webkit-text-stroke-color`** CSS property specifies the stroke color of characters of text. If this property is not set, the value of the `color` property is used.\n   *\n   * **Initial value**: `currentcolor`\n   */\n  WebkitTextStrokeColor?: WebkitTextStrokeColorProperty | WebkitTextStrokeColorProperty[];\n  /**\n   * The **`-webkit-text-stroke-width`** CSS property specifies the width of the stroke for text.\n   *\n   * **Initial value**: `0`\n   */\n  WebkitTextStrokeWidth?: WebkitTextStrokeWidthProperty<TLength> | WebkitTextStrokeWidthProperty<TLength>[];\n  /**\n   * The `-webkit-touch-callout` CSS property controls the display of the default callout shown when you touch and hold a touch target.\n   *\n   * **Initial value**: `default`\n   */\n  WebkitTouchCallout?: WebkitTouchCalloutProperty | WebkitTouchCalloutProperty[];\n  /**\n   * The **`transform`** CSS property lets you rotate, scale, skew, or translate an element. It modifies the coordinate space of the CSS visual formatting model.\n   *\n   * **Initial value**: `none`\n   */\n  WebkitTransform?: TransformProperty | TransformProperty[];\n  /**\n   * The **`transform-origin`** CSS property sets the origin for an element's transformations.\n   *\n   * **Initial value**: `50% 50% 0`\n   */\n  WebkitTransformOrigin?: TransformOriginProperty<TLength> | TransformOriginProperty<TLength>[];\n  /**\n   * The **`transform-style`** CSS property sets whether children of an element are positioned in the 3D space or are flattened in the plane of the element.\n   *\n   * **Initial value**: `flat`\n   */\n  WebkitTransformStyle?: TransformStyleProperty | TransformStyleProperty[];\n  /**\n   * The **`transition-delay`** CSS property specifies the duration to wait before starting a property's transition effect when its value changes.\n   *\n   * **Initial value**: `0s`\n   */\n  WebkitTransitionDelay?: GlobalsString | GlobalsString[];\n  /**\n   * The **`transition-duration`** CSS property sets the length of time a transition animation should take to complete. By default, the value is `0s`, meaning that no animation will occur.\n   *\n   * **Initial value**: `0s`\n   */\n  WebkitTransitionDuration?: GlobalsString | GlobalsString[];\n  /**\n   * The **`transition-property`** CSS property sets the CSS properties to which a transition effect should be applied.\n   *\n   * **Initial value**: all\n   */\n  WebkitTransitionProperty?: TransitionPropertyProperty | TransitionPropertyProperty[];\n  /**\n   * The **`transition-timing-function`** CSS property sets how intermediate values are calculated for CSS properties being affected by a transition effect.\n   *\n   * **Initial value**: `ease`\n   */\n  WebkitTransitionTimingFunction?: TransitionTimingFunctionProperty | TransitionTimingFunctionProperty[];\n  /** **Initial value**: `read-only` */\n  WebkitUserModify?: WebkitUserModifyProperty | WebkitUserModifyProperty[];\n  /**\n   * The `**user-select**` CSS property controls whether the user can select text. This doesn't have any effect on content loaded as chrome, except in textboxes.\n   *\n   * **Initial value**: `auto`\n   */\n  WebkitUserSelect?: UserSelectProperty | UserSelectProperty[];\n  /**\n   * The **`writing-mode`** CSS property sets whether lines of text are laid out horizontally or vertically, as well as the direction in which blocks progress.\n   *\n   * **Initial value**: `horizontal-tb`\n   */\n  WebkitWritingMode?: WritingModeProperty | WritingModeProperty[];\n}\n\nexport interface VendorShorthandPropertiesFallback<TLength = string | 0> {\n  /** The **`animation`** shorthand CSS property sets an animated transition between styles. It is a shorthand for `animation-name`, `animation-duration`, `animation-timing-function`, `animation-delay`, `animation-iteration-count`, `animation-direction`, `animation-fill-mode`, and `animation-play-state`. */\n  MozAnimation?: AnimationProperty | AnimationProperty[];\n  /** The **`border-image`** CSS property draws an image in place of an element's `border-style`. */\n  MozBorderImage?: BorderImageProperty | BorderImageProperty[];\n  /** The **`column-rule`** CSS property sets the width, style, and color of the rule (line) drawn between columns in a multi-column layout. */\n  MozColumnRule?: ColumnRuleProperty<TLength> | ColumnRuleProperty<TLength>[];\n  /** The **`columns`** CSS property sets the column width and column count of an element. */\n  MozColumns?: ColumnsProperty<TLength> | ColumnsProperty<TLength>[];\n  /** The **`transition`** CSS property is a shorthand property for `transition-property`, `transition-duration`, `transition-timing-function`, and `transition-delay`. */\n  MozTransition?: TransitionProperty | TransitionProperty[];\n  /** The **`-ms-content-zoom-limit`** CSS shorthand property is a Microsoft extension that specifies values for the `-ms-content-zoom-limit-min` and `-ms-content-zoom-limit-max` properties. */\n  msContentZoomLimit?: GlobalsString | GlobalsString[];\n  /** The **`-ms-content-zoom-snap`** CSS shorthand property is a Microsoft extension that specifies values for the `-ms-content-zoom-snap-type` and `-ms-content-zoom-snap-points` properties. */\n  msContentZoomSnap?: MsContentZoomSnapProperty | MsContentZoomSnapProperty[];\n  /** The **`flex`** CSS property sets how a flex item will grow or shrink to fit the space available in its flex container. It is a shorthand for `flex-grow`, `flex-shrink`, and `flex-basis`. */\n  msFlex?: FlexProperty<TLength> | FlexProperty<TLength>[];\n  /** The **\\-ms-scroll-limit** CSS property is a Microsoft extension that specifies values for the `-ms-scroll-limit-x-min`, `-ms-scroll-limit-y-min`, `-ms-scroll-limit-x-max`, and `-ms-scroll-limit-y-max` properties. */\n  msScrollLimit?: GlobalsString | GlobalsString[];\n  /** The **`-ms-scroll-snap-x`** CSS shorthand property is a Microsoft extension that specifies values for the `-ms-scroll-snap-type` and `-ms-scroll-snap-points-x` properties. */\n  msScrollSnapX?: GlobalsString | GlobalsString[];\n  /** The **`-ms-scroll-snap-x`** CSS shorthand property is a Microsoft extension that specifies values for the `-ms-scroll-snap-type` and `-ms-scroll-snap-points-y` properties. */\n  msScrollSnapY?: GlobalsString | GlobalsString[];\n  /** The **`transition`** CSS property is a shorthand property for `transition-property`, `transition-duration`, `transition-timing-function`, and `transition-delay`. */\n  msTransition?: TransitionProperty | TransitionProperty[];\n  /** The **`animation`** shorthand CSS property sets an animated transition between styles. It is a shorthand for `animation-name`, `animation-duration`, `animation-timing-function`, `animation-delay`, `animation-iteration-count`, `animation-direction`, `animation-fill-mode`, and `animation-play-state`. */\n  WebkitAnimation?: AnimationProperty | AnimationProperty[];\n  /** The **`-webkit-border-before`** CSS property is a shorthand property for setting the individual logical block start border property values in a single place in the style sheet. */\n  WebkitBorderBefore?: WebkitBorderBeforeProperty<TLength> | WebkitBorderBeforeProperty<TLength>[];\n  /** The **`border-image`** CSS property draws an image in place of an element's `border-style`. */\n  WebkitBorderImage?: BorderImageProperty | BorderImageProperty[];\n  /** The **`border-radius`** CSS property rounds the corners of an element's outer border edge. You can set a single radius to make circular corners, or two radii to make elliptical corners. */\n  WebkitBorderRadius?: BorderRadiusProperty<TLength> | BorderRadiusProperty<TLength>[];\n  /** The **`column-rule`** CSS property sets the width, style, and color of the rule (line) drawn between columns in a multi-column layout. */\n  WebkitColumnRule?: ColumnRuleProperty<TLength> | ColumnRuleProperty<TLength>[];\n  /** The **`columns`** CSS property sets the column width and column count of an element. */\n  WebkitColumns?: ColumnsProperty<TLength> | ColumnsProperty<TLength>[];\n  /** The **`flex`** CSS property sets how a flex item will grow or shrink to fit the space available in its flex container. It is a shorthand for `flex-grow`, `flex-shrink`, and `flex-basis`. */\n  WebkitFlex?: FlexProperty<TLength> | FlexProperty<TLength>[];\n  /** The **`flex-flow`** CSS property is a shorthand property for `flex-direction` and `flex-wrap` properties. */\n  WebkitFlexFlow?: FlexFlowProperty | FlexFlowProperty[];\n  /** The **`mask`** CSS property hides an element (partially or fully) by masking or clipping the image at specific points. */\n  WebkitMask?: WebkitMaskProperty<TLength> | WebkitMaskProperty<TLength>[];\n  /** The **`text-emphasis`** CSS property applies emphasis marks to text (except spaces and control characters). It is a shorthand for `text-emphasis-style` and `text-emphasis-color`. */\n  WebkitTextEmphasis?: TextEmphasisProperty | TextEmphasisProperty[];\n  /** The **`-webkit-text-stroke`** CSS property specifies the width and color of strokes for text characters. This is a shorthand property for the longhand properties `-webkit-text-stroke-width` and `-webkit-text-stroke-color`. */\n  WebkitTextStroke?: WebkitTextStrokeProperty<TLength> | WebkitTextStrokeProperty<TLength>[];\n  /** The **`transition`** CSS property is a shorthand property for `transition-property`, `transition-duration`, `transition-timing-function`, and `transition-delay`. */\n  WebkitTransition?: TransitionProperty | TransitionProperty[];\n}\n\nexport interface VendorPropertiesFallback<TLength = string | 0> extends VendorLonghandPropertiesFallback<TLength>, VendorShorthandPropertiesFallback<TLength> {}\n\nexport interface ObsoletePropertiesFallback<TLength = string | 0> {\n  /**\n   * The **`box-align`** CSS property specifies how an element aligns its contents across its layout in a perpendicular direction. The effect of the property is only visible if there is extra space in the box.\n   *\n   * **Initial value**: `stretch`\n   *\n   * @deprecated\n   */\n  boxAlign?: BoxAlignProperty | BoxAlignProperty[];\n  /**\n   * The **`box-direction`** CSS property specifies whether a box lays out its contents normally (from the top or left edge), or in reverse (from the bottom or right edge).\n   *\n   * **Initial value**: `normal`\n   *\n   * @deprecated\n   */\n  boxDirection?: BoxDirectionProperty | BoxDirectionProperty[];\n  /**\n   * The **`-moz-box-flex`** and **`-webkit-box-flex`** CSS properties specify how a `-moz-box` or `-webkit-box` grows to fill the box that contains it, in the direction of the containing box's layout.\n   *\n   * **Initial value**: `0`\n   *\n   * @deprecated\n   */\n  boxFlex?: GlobalsNumber | GlobalsNumber[];\n  /**\n   * The **`box-flex-group`** CSS property assigns the flexbox's child elements to a flex group.\n   *\n   * **Initial value**: `1`\n   *\n   * @deprecated\n   */\n  boxFlexGroup?: GlobalsNumber | GlobalsNumber[];\n  /**\n   * The **`box-lines`** CSS property determines whether the box may have a single or multiple lines (rows for horizontally oriented boxes, columns for vertically oriented boxes).\n   *\n   * **Initial value**: `single`\n   *\n   * @deprecated\n   */\n  boxLines?: BoxLinesProperty | BoxLinesProperty[];\n  /**\n   * The **`box-ordinal-group`** CSS property assigns the flexbox's child elements to an ordinal group.\n   *\n   * **Initial value**: `1`\n   *\n   * @deprecated\n   */\n  boxOrdinalGroup?: GlobalsNumber | GlobalsNumber[];\n  /**\n   * The **`box-orient`** CSS property specifies whether an element lays out its contents horizontally or vertically.\n   *\n   * **Initial value**: `inline-axis` (`horizontal` in XUL)\n   *\n   * @deprecated\n   */\n  boxOrient?: BoxOrientProperty | BoxOrientProperty[];\n  /**\n   * The **`-moz-box-pack`** and **`-webkit-box-pack`** CSS properties specify how a `-moz-box` or `-webkit-box` packs its contents in the direction of its layout. The effect of this is only visible if there is extra space in the box.\n   *\n   * **Initial value**: `start`\n   *\n   * @deprecated\n   */\n  boxPack?: BoxPackProperty | BoxPackProperty[];\n  /**\n   * The **`clip`** CSS property defines what portion of an element is visible. The `clip` property applies only to absolutely positioned elements, that is elements with `position:absolute` or `position:fixed`.\n   *\n   * **Initial value**: `auto`\n   *\n   * @deprecated\n   */\n  clip?: ClipProperty | ClipProperty[];\n  /**\n   * The **`font-variant-alternates`** CSS property controls the usage of alternate glyphs. These alternate glyphs may be referenced by alternative names defined in `@font-feature-values`.\n   *\n   * **Initial value**: `normal`\n   *\n   * @deprecated\n   */\n  fontVariantAlternates?: FontVariantAlternatesProperty | FontVariantAlternatesProperty[];\n  /**\n   * The **`column-gap`** CSS property sets the size of the gap (gutter) between an element's columns.\n   *\n   * **Initial value**: `0`\n   *\n   * @deprecated\n   */\n  gridColumnGap?: GridColumnGapProperty<TLength> | GridColumnGapProperty<TLength>[];\n  /**\n   * The **`gap`** CSS property sets the gaps (gutters) between rows and columns. It is a shorthand for `row-gap` and `column-gap`.\n   *\n   * @deprecated\n   */\n  gridGap?: GridGapProperty<TLength> | GridGapProperty<TLength>[];\n  /**\n   * The **`row-gap`** CSS property sets the size of the gap (gutter) between an element's grid rows.\n   *\n   * **Initial value**: `0`\n   *\n   * @deprecated\n   */\n  gridRowGap?: GridRowGapProperty<TLength> | GridRowGapProperty<TLength>[];\n  /**\n   * The **`ime-mode`** CSS property controls the state of the input method editor (IME) for text fields. This property is obsolete.\n   *\n   * **Initial value**: `auto`\n   *\n   * @deprecated\n   */\n  imeMode?: ImeModeProperty | ImeModeProperty[];\n  /**\n   * The **`inset-block`** CSS property defines the logical block start and end offsets of an element, which maps to physical offsets depending on the element's writing mode, directionality, and text orientation. It corresponds to the `top` and `bottom`, or `right` and `left` properties depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `auto`\n   *\n   * @deprecated\n   */\n  offsetBlock?: InsetBlockProperty<TLength> | InsetBlockProperty<TLength>[];\n  /**\n   * The **`inset-block-end`** CSS property defines the logical block end offset of an element, which maps to a physical inset depending on the element's writing mode, directionality, and text orientation. It corresponds to the `top`, `right`, `bottom`, or `left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `auto`\n   *\n   * @deprecated\n   */\n  offsetBlockEnd?: InsetBlockEndProperty<TLength> | InsetBlockEndProperty<TLength>[];\n  /**\n   * The **`inset-block-start`** CSS property defines the logical block start offset of an element, which maps to a physical inset depending on the element's writing mode, directionality, and text orientation. It corresponds to the `top`, `right`, `bottom`, or `left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `auto`\n   *\n   * @deprecated\n   */\n  offsetBlockStart?: InsetBlockStartProperty<TLength> | InsetBlockStartProperty<TLength>[];\n  /**\n   * The **`inset-inline`** CSS property defines the logical block start and end offsets of an element, which maps to physical offsets depending on the element's writing mode, directionality, and text orientation. It corresponds to the `top` and `bottom`, or `right` and `left` properties depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `auto`\n   *\n   * @deprecated\n   */\n  offsetInline?: InsetInlineProperty<TLength> | InsetInlineProperty<TLength>[];\n  /**\n   * The **`inset-inline-end`** CSS property defines the logical inline end inset of an element, which maps to a physical inset depending on the element's writing mode, directionality, and text orientation. It corresponds to the `top`, `right`, `bottom`, or `left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `auto`\n   *\n   * @deprecated\n   */\n  offsetInlineEnd?: InsetInlineEndProperty<TLength> | InsetInlineEndProperty<TLength>[];\n  /**\n   * The **`inset-inline-start`** CSS property defines the logical inline start inset of an element, which maps to a physical offset depending on the element's writing mode, directionality, and text orientation. It corresponds to the `top`, `right`, `bottom`, or `left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `auto`\n   *\n   * @deprecated\n   */\n  offsetInlineStart?: InsetInlineStartProperty<TLength> | InsetInlineStartProperty<TLength>[];\n  /**\n   * The **`scroll-snap-coordinate`** CSS property defines the x and y coordinate positions within an element that will align with its nearest ancestor scroll container's `scroll-snap-destination` for each respective axis.\n   *\n   * **Initial value**: `none`\n   *\n   * @deprecated\n   */\n  scrollSnapCoordinate?: ScrollSnapCoordinateProperty<TLength> | ScrollSnapCoordinateProperty<TLength>[];\n  /**\n   * The **`scroll-snap-destination`** CSS property defines the position in x and y coordinates within the scroll container's visual viewport which element snap points align with.\n   *\n   * **Initial value**: `0px 0px`\n   *\n   * @deprecated\n   */\n  scrollSnapDestination?: ScrollSnapDestinationProperty<TLength> | ScrollSnapDestinationProperty<TLength>[];\n  /**\n   * The **`scroll-snap-points-x`** CSS property defines the horizontal positioning of snap points within the content of the scroll container they are applied to.\n   *\n   * **Initial value**: `none`\n   *\n   * @deprecated\n   */\n  scrollSnapPointsX?: ScrollSnapPointsXProperty | ScrollSnapPointsXProperty[];\n  /**\n   * The **`scroll-snap-points-y`** CSS property defines the vertical positioning of snap points within the content of the scroll container they are applied to.\n   *\n   * **Initial value**: `none`\n   *\n   * @deprecated\n   */\n  scrollSnapPointsY?: ScrollSnapPointsYProperty | ScrollSnapPointsYProperty[];\n  /**\n   * The **`scroll-snap-type-x`** CSS property defines how strictly snap points are enforced on the horizontal axis of the scroll container in case there is one.\n   *\n   * **Initial value**: `none`\n   *\n   * @deprecated\n   */\n  scrollSnapTypeX?: ScrollSnapTypeXProperty | ScrollSnapTypeXProperty[];\n  /**\n   * The **`scroll-snap-type-y`** CSS property defines how strictly snap points are enforced on the vertical axis of the scroll container in case there is one.\n   *\n   * **Initial value**: `none`\n   *\n   * @deprecated\n   */\n  scrollSnapTypeY?: ScrollSnapTypeYProperty | ScrollSnapTypeYProperty[];\n  /**\n   * The **`-ms-scrollbar-track-color`** CSS property is a Microsoft extension that specifies the color of the track element of a scrollbar.\n   *\n   * **Initial value**: `Scrollbar`\n   *\n   * @deprecated\n   */\n  scrollbarTrackColor?: MsScrollbarTrackColorProperty | MsScrollbarTrackColorProperty[];\n  /**\n   * The **`text-combine-upright`** CSS property sets the combination of characters into the space of a single character. If the combined text is wider than 1em, the user agent must fit the contents within 1em. The resulting composition is treated as a single upright glyph for layout and decoration. This property only has an effect in vertical writing modes.\n   *\n   * **Initial value**: `none`\n   *\n   * @deprecated\n   */\n  textCombineHorizontal?: TextCombineUprightProperty | TextCombineUprightProperty[];\n  /**\n   * The **`box-align`** CSS property specifies how an element aligns its contents across its layout in a perpendicular direction. The effect of the property is only visible if there is extra space in the box.\n   *\n   * **Initial value**: `stretch`\n   *\n   * @deprecated\n   */\n  KhtmlBoxAlign?: BoxAlignProperty | BoxAlignProperty[];\n  /**\n   * The **`box-direction`** CSS property specifies whether a box lays out its contents normally (from the top or left edge), or in reverse (from the bottom or right edge).\n   *\n   * **Initial value**: `normal`\n   *\n   * @deprecated\n   */\n  KhtmlBoxDirection?: BoxDirectionProperty | BoxDirectionProperty[];\n  /**\n   * The **`-moz-box-flex`** and **`-webkit-box-flex`** CSS properties specify how a `-moz-box` or `-webkit-box` grows to fill the box that contains it, in the direction of the containing box's layout.\n   *\n   * **Initial value**: `0`\n   *\n   * @deprecated\n   */\n  KhtmlBoxFlex?: GlobalsNumber | GlobalsNumber[];\n  /**\n   * The **`box-flex-group`** CSS property assigns the flexbox's child elements to a flex group.\n   *\n   * **Initial value**: `1`\n   *\n   * @deprecated\n   */\n  KhtmlBoxFlexGroup?: GlobalsNumber | GlobalsNumber[];\n  /**\n   * The **`box-lines`** CSS property determines whether the box may have a single or multiple lines (rows for horizontally oriented boxes, columns for vertically oriented boxes).\n   *\n   * **Initial value**: `single`\n   *\n   * @deprecated\n   */\n  KhtmlBoxLines?: BoxLinesProperty | BoxLinesProperty[];\n  /**\n   * The **`box-ordinal-group`** CSS property assigns the flexbox's child elements to an ordinal group.\n   *\n   * **Initial value**: `1`\n   *\n   * @deprecated\n   */\n  KhtmlBoxOrdinalGroup?: GlobalsNumber | GlobalsNumber[];\n  /**\n   * The **`box-orient`** CSS property specifies whether an element lays out its contents horizontally or vertically.\n   *\n   * **Initial value**: `inline-axis` (`horizontal` in XUL)\n   *\n   * @deprecated\n   */\n  KhtmlBoxOrient?: BoxOrientProperty | BoxOrientProperty[];\n  /**\n   * The **`-moz-box-pack`** and **`-webkit-box-pack`** CSS properties specify how a `-moz-box` or `-webkit-box` packs its contents in the direction of its layout. The effect of this is only visible if there is extra space in the box.\n   *\n   * **Initial value**: `start`\n   *\n   * @deprecated\n   */\n  KhtmlBoxPack?: BoxPackProperty | BoxPackProperty[];\n  /**\n   * The **`line-break`** CSS property sets how to break lines of Chinese, Japanese, or Korean (CJK) text when working with punctuation and symbols.\n   *\n   * **Initial value**: `auto`\n   *\n   * @deprecated\n   */\n  KhtmlLineBreak?: LineBreakProperty | LineBreakProperty[];\n  /**\n   * The **`opacity`** CSS property sets the transparency of an element or the degree to which content behind an element is visible.\n   *\n   * **Initial value**: `1.0`\n   *\n   * @deprecated\n   */\n  KhtmlOpacity?: OpacityProperty | OpacityProperty[];\n  /**\n   * The `**user-select**` CSS property controls whether the user can select text. This doesn't have any effect on content loaded as chrome, except in textboxes.\n   *\n   * **Initial value**: `auto`\n   *\n   * @deprecated\n   */\n  KhtmlUserSelect?: UserSelectProperty | UserSelectProperty[];\n  /**\n   * The **`background-clip`** CSS property sets whether an element's background `<color>` or `<image>` extends underneath its border.\n   *\n   * **Initial value**: `border-box`\n   *\n   * @deprecated\n   */\n  MozBackgroundClip?: BackgroundClipProperty | BackgroundClipProperty[];\n  /**\n   * The **`box-decoration-break`** CSS property specifies how an element's fragments should be rendered when broken across multiple lines, columns, or pages.\n   *\n   * **Initial value**: `slice`\n   *\n   * @deprecated\n   */\n  MozBackgroundInlinePolicy?: BoxDecorationBreakProperty | BoxDecorationBreakProperty[];\n  /**\n   * The **`background-origin`** CSS property sets the _background positioning area_. In other words, it sets the origin position of an image set with the `background-image` property.\n   *\n   * **Initial value**: `padding-box`\n   *\n   * @deprecated\n   */\n  MozBackgroundOrigin?: BackgroundOriginProperty | BackgroundOriginProperty[];\n  /**\n   * The **`background-size`** CSS property sets the size of the element's background image. The image can be left to its natural size, stretched, or constrained to fit the available space.\n   *\n   * **Initial value**: `auto auto`\n   *\n   * @deprecated\n   */\n  MozBackgroundSize?: BackgroundSizeProperty<TLength> | BackgroundSizeProperty<TLength>[];\n  /**\n   * The **`-moz-binding`** CSS property is used by Mozilla-based applications to attach an XBL binding to a DOM element.\n   *\n   * **Initial value**: `none`\n   *\n   * @deprecated\n   */\n  MozBinding?: MozBindingProperty | MozBindingProperty[];\n  /**\n   * In Mozilla applications like Firefox, the **`-moz-border-bottom-colors`** CSS property sets a list of colors for the bottom border.\n   *\n   * **Initial value**: `none`\n   *\n   * @deprecated\n   */\n  MozBorderBottomColors?: MozBorderBottomColorsProperty | MozBorderBottomColorsProperty[];\n  /**\n   * In Mozilla applications like Firefox, the **`-moz-border-left-colors`** CSS property sets a list of colors for the left border.\n   *\n   * **Initial value**: `none`\n   *\n   * @deprecated\n   */\n  MozBorderLeftColors?: MozBorderLeftColorsProperty | MozBorderLeftColorsProperty[];\n  /**\n   * The **`border-radius`** CSS property rounds the corners of an element's outer border edge. You can set a single radius to make circular corners, or two radii to make elliptical corners.\n   *\n   * @deprecated\n   */\n  MozBorderRadius?: BorderRadiusProperty<TLength> | BorderRadiusProperty<TLength>[];\n  /**\n   * The **`border-bottom-left-radius`** CSS property rounds the bottom-left corner of an element.\n   *\n   * **Initial value**: `0`\n   *\n   * @deprecated\n   */\n  MozBorderRadiusBottomleft?: BorderBottomLeftRadiusProperty<TLength> | BorderBottomLeftRadiusProperty<TLength>[];\n  /**\n   * The **`border-bottom-right-radius`** CSS property rounds the bottom-right corner of an element.\n   *\n   * **Initial value**: `0`\n   *\n   * @deprecated\n   */\n  MozBorderRadiusBottomright?: BorderBottomRightRadiusProperty<TLength> | BorderBottomRightRadiusProperty<TLength>[];\n  /**\n   * The **`border-top-left-radius`** CSS property rounds the top-left corner of an element.\n   *\n   * **Initial value**: `0`\n   *\n   * @deprecated\n   */\n  MozBorderRadiusTopleft?: BorderTopLeftRadiusProperty<TLength> | BorderTopLeftRadiusProperty<TLength>[];\n  /**\n   * The **`border-top-right-radius`** CSS property rounds the top-right corner of an element.\n   *\n   * **Initial value**: `0`\n   *\n   * @deprecated\n   */\n  MozBorderRadiusTopright?: BorderTopRightRadiusProperty<TLength> | BorderTopRightRadiusProperty<TLength>[];\n  /**\n   * In Mozilla applications like Firefox, the **`-moz-border-right-colors`** CSS property sets a list of colors for the right border.\n   *\n   * **Initial value**: `none`\n   *\n   * @deprecated\n   */\n  MozBorderRightColors?: MozBorderRightColorsProperty | MozBorderRightColorsProperty[];\n  /**\n   * In Mozilla applications like Firefox, the **`-moz-border-top-colors`** CSS property sets a list of colors for the top border.\n   *\n   * **Initial value**: `none`\n   *\n   * @deprecated\n   */\n  MozBorderTopColors?: MozBorderTopColorsProperty | MozBorderTopColorsProperty[];\n  /**\n   * The **`box-align`** CSS property specifies how an element aligns its contents across its layout in a perpendicular direction. The effect of the property is only visible if there is extra space in the box.\n   *\n   * **Initial value**: `stretch`\n   *\n   * @deprecated\n   */\n  MozBoxAlign?: BoxAlignProperty | BoxAlignProperty[];\n  /**\n   * The **`box-direction`** CSS property specifies whether a box lays out its contents normally (from the top or left edge), or in reverse (from the bottom or right edge).\n   *\n   * **Initial value**: `normal`\n   *\n   * @deprecated\n   */\n  MozBoxDirection?: BoxDirectionProperty | BoxDirectionProperty[];\n  /**\n   * The **`-moz-box-flex`** and **`-webkit-box-flex`** CSS properties specify how a `-moz-box` or `-webkit-box` grows to fill the box that contains it, in the direction of the containing box's layout.\n   *\n   * **Initial value**: `0`\n   *\n   * @deprecated\n   */\n  MozBoxFlex?: GlobalsNumber | GlobalsNumber[];\n  /**\n   * The **`box-ordinal-group`** CSS property assigns the flexbox's child elements to an ordinal group.\n   *\n   * **Initial value**: `1`\n   *\n   * @deprecated\n   */\n  MozBoxOrdinalGroup?: GlobalsNumber | GlobalsNumber[];\n  /**\n   * The **`box-orient`** CSS property specifies whether an element lays out its contents horizontally or vertically.\n   *\n   * **Initial value**: `inline-axis` (`horizontal` in XUL)\n   *\n   * @deprecated\n   */\n  MozBoxOrient?: BoxOrientProperty | BoxOrientProperty[];\n  /**\n   * The **`-moz-box-pack`** and **`-webkit-box-pack`** CSS properties specify how a `-moz-box` or `-webkit-box` packs its contents in the direction of its layout. The effect of this is only visible if there is extra space in the box.\n   *\n   * **Initial value**: `start`\n   *\n   * @deprecated\n   */\n  MozBoxPack?: BoxPackProperty | BoxPackProperty[];\n  /**\n   * The **`box-shadow`** CSS property adds shadow effects around an element's frame. You can set multiple effects separated by commas. A box shadow is described by X and Y offsets relative to the element, blur and spread radii, and color.\n   *\n   * **Initial value**: `none`\n   *\n   * @deprecated\n   */\n  MozBoxShadow?: BoxShadowProperty | BoxShadowProperty[];\n  /**\n   * The **`opacity`** CSS property sets the transparency of an element or the degree to which content behind an element is visible.\n   *\n   * **Initial value**: `1.0`\n   *\n   * @deprecated\n   */\n  MozOpacity?: OpacityProperty | OpacityProperty[];\n  /**\n   * The **`outline`** CSS property is a shorthand to set various outline properties in a single declaration: `outline-style`, `outline-width`, and `outline-color`.\n   *\n   * @deprecated\n   */\n  MozOutline?: OutlineProperty<TLength> | OutlineProperty<TLength>[];\n  /**\n   * The **`outline-color`** CSS property sets the color of an element's outline.\n   *\n   * **Initial value**: `invert`, for browsers supporting it, `currentColor` for the other\n   *\n   * @deprecated\n   */\n  MozOutlineColor?: OutlineColorProperty | OutlineColorProperty[];\n  /**\n   * In Mozilla applications like Firefox, the **`-moz-outline-radius`** CSS property can be used to give an element's `outline` rounded corners.\n   *\n   * @deprecated\n   */\n  MozOutlineRadius?: MozOutlineRadiusProperty<TLength> | MozOutlineRadiusProperty<TLength>[];\n  /**\n   * The **`outline-style`** CSS property sets the style of an element's outline. An outline is a line that is drawn around an element, outside the `border`.\n   *\n   * **Initial value**: `none`\n   *\n   * @deprecated\n   */\n  MozOutlineStyle?: OutlineStyleProperty | OutlineStyleProperty[];\n  /**\n   * The **`outline-width`** CSS property sets the thickness of an element's outline. An outline is a line that is drawn around an element, outside the `border`.\n   *\n   * **Initial value**: `medium`\n   *\n   * @deprecated\n   */\n  MozOutlineWidth?: OutlineWidthProperty<TLength> | OutlineWidthProperty<TLength>[];\n  /**\n   * The **`text-align-last`** CSS property sets how the last line of a block or a line, right before a forced line break, is aligned.\n   *\n   * **Initial value**: `auto`\n   *\n   * @deprecated\n   */\n  MozTextAlignLast?: TextAlignLastProperty | TextAlignLastProperty[];\n  /**\n   * The **`-moz-text-blink`** non-standard Mozilla CSS extension specifies the blink mode.\n   *\n   * **Initial value**: `none`\n   *\n   * @deprecated\n   */\n  MozTextBlink?: MozTextBlinkProperty | MozTextBlinkProperty[];\n  /**\n   * The **`text-decoration-color`** CSS property sets the color of decorations added to text by `text-decoration-line`.\n   *\n   * **Initial value**: `currentcolor`\n   *\n   * @deprecated\n   */\n  MozTextDecorationColor?: TextDecorationColorProperty | TextDecorationColorProperty[];\n  /**\n   * The **`text-decoration-line`** CSS property sets the kind of decoration that is used on text in an element, such as an underline or overline.\n   *\n   * **Initial value**: `none`\n   *\n   * @deprecated\n   */\n  MozTextDecorationLine?: TextDecorationLineProperty | TextDecorationLineProperty[];\n  /**\n   * The **`text-decoration-style`** CSS property sets the style of the lines specified by `text-decoration-line`. The style applies to all lines that are set with `text-decoration-line`.\n   *\n   * **Initial value**: `solid`\n   *\n   * @deprecated\n   */\n  MozTextDecorationStyle?: TextDecorationStyleProperty | TextDecorationStyleProperty[];\n  /**\n   * In Mozilla applications, **`-moz-user-input`** determines if an element will accept user input.\n   *\n   * **Initial value**: `auto`\n   *\n   * @deprecated\n   */\n  MozUserInput?: MozUserInputProperty | MozUserInputProperty[];\n  /**\n   * The **`-moz-window-shadow`** CSS property specifies whether a window will have a shadow. It only works on Mac OS X.\n   *\n   * **Initial value**: `default`\n   *\n   * @deprecated\n   */\n  MozWindowShadow?: MozWindowShadowProperty | MozWindowShadowProperty[];\n  /**\n   * The **`ime-mode`** CSS property controls the state of the input method editor (IME) for text fields. This property is obsolete.\n   *\n   * **Initial value**: `auto`\n   *\n   * @deprecated\n   */\n  msImeMode?: ImeModeProperty | ImeModeProperty[];\n  /**\n   * The **`-ms-scrollbar-track-color`** CSS property is a Microsoft extension that specifies the color of the track element of a scrollbar.\n   *\n   * **Initial value**: `Scrollbar`\n   *\n   * @deprecated\n   */\n  msScrollbarTrackColor?: MsScrollbarTrackColorProperty | MsScrollbarTrackColorProperty[];\n  /**\n   * The **`animation`** shorthand CSS property sets an animated transition between styles. It is a shorthand for `animation-name`, `animation-duration`, `animation-timing-function`, `animation-delay`, `animation-iteration-count`, `animation-direction`, `animation-fill-mode`, and `animation-play-state`.\n   *\n   * @deprecated\n   */\n  OAnimation?: AnimationProperty | AnimationProperty[];\n  /**\n   * The **`animation-delay`** CSS property sets when an animation starts. The animation can start later, immediately from its beginning, or immediately and partway through the animation.\n   *\n   * **Initial value**: `0s`\n   *\n   * @deprecated\n   */\n  OAnimationDelay?: GlobalsString | GlobalsString[];\n  /**\n   * The **`animation-direction`** CSS property sets whether an animation should play forwards, backwards, or alternating back and forth.\n   *\n   * **Initial value**: `normal`\n   *\n   * @deprecated\n   */\n  OAnimationDirection?: AnimationDirectionProperty | AnimationDirectionProperty[];\n  /**\n   * The **`animation-duration`** CSS property sets the length of time that an animation takes to complete one cycle.\n   *\n   * **Initial value**: `0s`\n   *\n   * @deprecated\n   */\n  OAnimationDuration?: GlobalsString | GlobalsString[];\n  /**\n   * The **`animation-fill-mode`** CSS property sets how a CSS animation applies styles to its target before and after its execution.\n   *\n   * **Initial value**: `none`\n   *\n   * @deprecated\n   */\n  OAnimationFillMode?: AnimationFillModeProperty | AnimationFillModeProperty[];\n  /**\n   * The **`animation-iteration-count`** CSS property sets the number of times an animation cycle should be played before stopping.\n   *\n   * **Initial value**: `1`\n   *\n   * @deprecated\n   */\n  OAnimationIterationCount?: AnimationIterationCountProperty | AnimationIterationCountProperty[];\n  /**\n   * The **`animation-name`** CSS property sets one or more animations to apply to an element. Each name is an `@keyframes` at-rule that sets the property values for the animation sequence.\n   *\n   * **Initial value**: `none`\n   *\n   * @deprecated\n   */\n  OAnimationName?: AnimationNameProperty | AnimationNameProperty[];\n  /**\n   * The **`animation-play-state`** CSS property sets whether an animation is running or paused.\n   *\n   * **Initial value**: `running`\n   *\n   * @deprecated\n   */\n  OAnimationPlayState?: AnimationPlayStateProperty | AnimationPlayStateProperty[];\n  /**\n   * The `**animation-timing-function**` CSS property sets how an animation progresses through the duration of each cycle.\n   *\n   * **Initial value**: `ease`\n   *\n   * @deprecated\n   */\n  OAnimationTimingFunction?: AnimationTimingFunctionProperty | AnimationTimingFunctionProperty[];\n  /**\n   * The **`background-size`** CSS property sets the size of the element's background image. The image can be left to its natural size, stretched, or constrained to fit the available space.\n   *\n   * **Initial value**: `auto auto`\n   *\n   * @deprecated\n   */\n  OBackgroundSize?: BackgroundSizeProperty<TLength> | BackgroundSizeProperty<TLength>[];\n  /**\n   * The **`border-image`** CSS property draws an image in place of an element's `border-style`.\n   *\n   * @deprecated\n   */\n  OBorderImage?: BorderImageProperty | BorderImageProperty[];\n  /**\n   * The **`transform`** CSS property lets you rotate, scale, skew, or translate an element. It modifies the coordinate space of the CSS visual formatting model.\n   *\n   * **Initial value**: `none`\n   *\n   * @deprecated\n   */\n  OTransform?: TransformProperty | TransformProperty[];\n  /**\n   * The **`transition`** CSS property is a shorthand property for `transition-property`, `transition-duration`, `transition-timing-function`, and `transition-delay`.\n   *\n   * @deprecated\n   */\n  OTransition?: TransitionProperty | TransitionProperty[];\n  /**\n   * The **`transition-delay`** CSS property specifies the duration to wait before starting a property's transition effect when its value changes.\n   *\n   * **Initial value**: `0s`\n   *\n   * @deprecated\n   */\n  OTransitionDelay?: GlobalsString | GlobalsString[];\n  /**\n   * The **`transition-duration`** CSS property sets the length of time a transition animation should take to complete. By default, the value is `0s`, meaning that no animation will occur.\n   *\n   * **Initial value**: `0s`\n   *\n   * @deprecated\n   */\n  OTransitionDuration?: GlobalsString | GlobalsString[];\n  /**\n   * The **`transition-property`** CSS property sets the CSS properties to which a transition effect should be applied.\n   *\n   * **Initial value**: all\n   *\n   * @deprecated\n   */\n  OTransitionProperty?: TransitionPropertyProperty | TransitionPropertyProperty[];\n  /**\n   * The **`transition-timing-function`** CSS property sets how intermediate values are calculated for CSS properties being affected by a transition effect.\n   *\n   * **Initial value**: `ease`\n   *\n   * @deprecated\n   */\n  OTransitionTimingFunction?: TransitionTimingFunctionProperty | TransitionTimingFunctionProperty[];\n  /**\n   * The **`box-align`** CSS property specifies how an element aligns its contents across its layout in a perpendicular direction. The effect of the property is only visible if there is extra space in the box.\n   *\n   * **Initial value**: `stretch`\n   *\n   * @deprecated\n   */\n  WebkitBoxAlign?: BoxAlignProperty | BoxAlignProperty[];\n  /**\n   * The **`box-direction`** CSS property specifies whether a box lays out its contents normally (from the top or left edge), or in reverse (from the bottom or right edge).\n   *\n   * **Initial value**: `normal`\n   *\n   * @deprecated\n   */\n  WebkitBoxDirection?: BoxDirectionProperty | BoxDirectionProperty[];\n  /**\n   * The **`-moz-box-flex`** and **`-webkit-box-flex`** CSS properties specify how a `-moz-box` or `-webkit-box` grows to fill the box that contains it, in the direction of the containing box's layout.\n   *\n   * **Initial value**: `0`\n   *\n   * @deprecated\n   */\n  WebkitBoxFlex?: GlobalsNumber | GlobalsNumber[];\n  /**\n   * The **`box-flex-group`** CSS property assigns the flexbox's child elements to a flex group.\n   *\n   * **Initial value**: `1`\n   *\n   * @deprecated\n   */\n  WebkitBoxFlexGroup?: GlobalsNumber | GlobalsNumber[];\n  /**\n   * The **`box-lines`** CSS property determines whether the box may have a single or multiple lines (rows for horizontally oriented boxes, columns for vertically oriented boxes).\n   *\n   * **Initial value**: `single`\n   *\n   * @deprecated\n   */\n  WebkitBoxLines?: BoxLinesProperty | BoxLinesProperty[];\n  /**\n   * The **`box-ordinal-group`** CSS property assigns the flexbox's child elements to an ordinal group.\n   *\n   * **Initial value**: `1`\n   *\n   * @deprecated\n   */\n  WebkitBoxOrdinalGroup?: GlobalsNumber | GlobalsNumber[];\n  /**\n   * The **`box-orient`** CSS property specifies whether an element lays out its contents horizontally or vertically.\n   *\n   * **Initial value**: `inline-axis` (`horizontal` in XUL)\n   *\n   * @deprecated\n   */\n  WebkitBoxOrient?: BoxOrientProperty | BoxOrientProperty[];\n  /**\n   * The **`-moz-box-pack`** and **`-webkit-box-pack`** CSS properties specify how a `-moz-box` or `-webkit-box` packs its contents in the direction of its layout. The effect of this is only visible if there is extra space in the box.\n   *\n   * **Initial value**: `start`\n   *\n   * @deprecated\n   */\n  WebkitBoxPack?: BoxPackProperty | BoxPackProperty[];\n  /**\n   * The **`scroll-snap-points-x`** CSS property defines the horizontal positioning of snap points within the content of the scroll container they are applied to.\n   *\n   * **Initial value**: `none`\n   *\n   * @deprecated\n   */\n  WebkitScrollSnapPointsX?: ScrollSnapPointsXProperty | ScrollSnapPointsXProperty[];\n  /**\n   * The **`scroll-snap-points-y`** CSS property defines the vertical positioning of snap points within the content of the scroll container they are applied to.\n   *\n   * **Initial value**: `none`\n   *\n   * @deprecated\n   */\n  WebkitScrollSnapPointsY?: ScrollSnapPointsYProperty | ScrollSnapPointsYProperty[];\n}\n\nexport interface SvgPropertiesFallback<TLength = string | 0> {\n  alignmentBaseline?: AlignmentBaselineProperty | AlignmentBaselineProperty[];\n  baselineShift?: BaselineShiftProperty<TLength> | BaselineShiftProperty<TLength>[];\n  clip?: ClipProperty | ClipProperty[];\n  clipPath?: ClipPathProperty | ClipPathProperty[];\n  clipRule?: ClipRuleProperty | ClipRuleProperty[];\n  color?: ColorProperty | ColorProperty[];\n  colorInterpolation?: ColorInterpolationProperty | ColorInterpolationProperty[];\n  colorRendering?: ColorRenderingProperty | ColorRenderingProperty[];\n  cursor?: CursorProperty | CursorProperty[];\n  direction?: DirectionProperty | DirectionProperty[];\n  display?: DisplayProperty | DisplayProperty[];\n  dominantBaseline?: DominantBaselineProperty | DominantBaselineProperty[];\n  fill?: FillProperty | FillProperty[];\n  fillOpacity?: GlobalsNumber | GlobalsNumber[];\n  fillRule?: FillRuleProperty | FillRuleProperty[];\n  filter?: FilterProperty | FilterProperty[];\n  floodColor?: FloodColorProperty | FloodColorProperty[];\n  floodOpacity?: GlobalsNumber | GlobalsNumber[];\n  font?: FontProperty | FontProperty[];\n  fontFamily?: FontFamilyProperty | FontFamilyProperty[];\n  fontSize?: FontSizeProperty<TLength> | FontSizeProperty<TLength>[];\n  fontSizeAdjust?: FontSizeAdjustProperty | FontSizeAdjustProperty[];\n  fontStretch?: FontStretchProperty | FontStretchProperty[];\n  fontStyle?: FontStyleProperty | FontStyleProperty[];\n  fontVariant?: FontVariantProperty | FontVariantProperty[];\n  fontWeight?: FontWeightProperty | FontWeightProperty[];\n  glyphOrientationVertical?: GlyphOrientationVerticalProperty | GlyphOrientationVerticalProperty[];\n  imageRendering?: ImageRenderingProperty | ImageRenderingProperty[];\n  letterSpacing?: LetterSpacingProperty<TLength> | LetterSpacingProperty<TLength>[];\n  lightingColor?: LightingColorProperty | LightingColorProperty[];\n  lineHeight?: LineHeightProperty<TLength> | LineHeightProperty<TLength>[];\n  marker?: MarkerProperty | MarkerProperty[];\n  markerEnd?: MarkerEndProperty | MarkerEndProperty[];\n  markerMid?: MarkerMidProperty | MarkerMidProperty[];\n  markerStart?: MarkerStartProperty | MarkerStartProperty[];\n  mask?: MaskProperty<TLength> | MaskProperty<TLength>[];\n  opacity?: OpacityProperty | OpacityProperty[];\n  overflow?: OverflowProperty | OverflowProperty[];\n  paintOrder?: PaintOrderProperty | PaintOrderProperty[];\n  pointerEvents?: PointerEventsProperty | PointerEventsProperty[];\n  shapeRendering?: ShapeRenderingProperty | ShapeRenderingProperty[];\n  stopColor?: StopColorProperty | StopColorProperty[];\n  stopOpacity?: GlobalsNumber | GlobalsNumber[];\n  stroke?: StrokeProperty | StrokeProperty[];\n  strokeDasharray?: StrokeDasharrayProperty<TLength> | StrokeDasharrayProperty<TLength>[];\n  strokeDashoffset?: StrokeDashoffsetProperty<TLength> | StrokeDashoffsetProperty<TLength>[];\n  strokeLinecap?: StrokeLinecapProperty | StrokeLinecapProperty[];\n  strokeLinejoin?: StrokeLinejoinProperty | StrokeLinejoinProperty[];\n  strokeMiterlimit?: GlobalsNumber | GlobalsNumber[];\n  strokeOpacity?: GlobalsNumber | GlobalsNumber[];\n  strokeWidth?: StrokeWidthProperty<TLength> | StrokeWidthProperty<TLength>[];\n  textAnchor?: TextAnchorProperty | TextAnchorProperty[];\n  textDecoration?: TextDecorationProperty<TLength> | TextDecorationProperty<TLength>[];\n  textRendering?: TextRenderingProperty | TextRenderingProperty[];\n  unicodeBidi?: UnicodeBidiProperty | UnicodeBidiProperty[];\n  vectorEffect?: VectorEffectProperty | VectorEffectProperty[];\n  visibility?: VisibilityProperty | VisibilityProperty[];\n  whiteSpace?: WhiteSpaceProperty | WhiteSpaceProperty[];\n  wordSpacing?: WordSpacingProperty<TLength> | WordSpacingProperty<TLength>[];\n  writingMode?: WritingModeProperty | WritingModeProperty[];\n}\n\nexport interface PropertiesFallback<TLength = string | 0>\n  extends StandardPropertiesFallback<TLength>,\n    VendorPropertiesFallback<TLength>,\n    ObsoletePropertiesFallback<TLength>,\n    SvgPropertiesFallback<TLength> {}\n\nexport interface StandardLonghandPropertiesHyphenFallback<TLength = string | 0> {\n  /**\n   * The CSS **`align-content`** property sets how the browser distributes space between and around content items along the cross-axis of a flexbox container, and the main-axis of a grid container.\n   *\n   * **Initial value**: `normal`\n   *\n   * ---\n   *\n   * _Supported in Flex Layout_\n   *\n   * |  Chrome  | Firefox |  Safari   |  Edge  |   IE   |\n   * | :------: | :-----: | :-------: | :----: | :----: |\n   * |  **29**  | **28**  |   **9**   | **12** | **11** |\n   * | 21 _-x-_ |         | 6.1 _-x-_ |        |        |\n   *\n   * ---\n   *\n   * _Supported in Grid Layout_\n   *\n   * | Chrome | Firefox |  Safari  |  Edge  | IE  |\n   * | :----: | :-----: | :------: | :----: | :-: |\n   * | **57** | **52**  | **10.1** | **16** | No  |\n   *\n   * ---\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/align-content\n   */\n  \"align-content\"?: AlignContentProperty | AlignContentProperty[];\n  /**\n   * The CSS **`align-items`** property sets the `align-self` value on all direct children as a group. The align-self property sets the alignment of an item within its containing block. In Flexbox it controls the alignment of items on the Cross Axis, in Grid Layout it controls the alignment of items on the Block Axis within their grid area.\n   *\n   * **Initial value**: `normal`\n   *\n   * ---\n   *\n   * _Supported in Flex Layout_\n   *\n   * |  Chrome  | Firefox | Safari  |  Edge  |   IE   |\n   * | :------: | :-----: | :-----: | :----: | :----: |\n   * |  **52**  | **20**  |  **9**  | **12** | **11** |\n   * | 21 _-x-_ |         | 7 _-x-_ |        |        |\n   *\n   * ---\n   *\n   * _Supported in Grid Layout_\n   *\n   * | Chrome | Firefox |  Safari  |  Edge  | IE  |\n   * | :----: | :-----: | :------: | :----: | :-: |\n   * | **57** | **52**  | **10.1** | **16** | No  |\n   *\n   * ---\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/align-items\n   */\n  \"align-items\"?: AlignItemsProperty | AlignItemsProperty[];\n  /**\n   * The **`align-self`** CSS property aligns flex items of the current flex line overriding the `align-items` value. If any of the item's cross-axis margin is set to `auto`, then `align-self` is ignored. In Grid layout `align-self` aligns the item inside the grid area.\n   *\n   * **Initial value**: `auto`\n   *\n   * ---\n   *\n   * _Supported in Flex Layout_\n   *\n   * |  Chrome  | Firefox |  Safari   |  Edge  |   IE   |\n   * | :------: | :-----: | :-------: | :----: | :----: |\n   * |  **36**  | **20**  |   **9**   | **12** | **11** |\n   * | 21 _-x-_ |         | 6.1 _-x-_ |        |        |\n   *\n   * ---\n   *\n   * _Supported in Grid Layout_\n   *\n   * | Chrome | Firefox |  Safari  |  Edge  |      IE      |\n   * | :----: | :-----: | :------: | :----: | :----------: |\n   * | **57** | **52**  | **10.1** | **16** | **10** _-x-_ |\n   *\n   * ---\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/align-self\n   */\n  \"align-self\"?: AlignSelfProperty | AlignSelfProperty[];\n  /**\n   * The **`animation-delay`** CSS property sets when an animation starts. The animation can start later, immediately from its beginning, or immediately and partway through the animation.\n   *\n   * **Initial value**: `0s`\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |\n   * | :-----: | :-----: | :-----: | :----: | :----: |\n   * | **43**  | **16**  |  **9**  | **12** | **10** |\n   * | 3 _-x-_ | 5 _-x-_ | 4 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/animation-delay\n   */\n  \"animation-delay\"?: GlobalsString | GlobalsString[];\n  /**\n   * The **`animation-direction`** CSS property sets whether an animation should play forwards, backwards, or alternating back and forth.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |\n   * | :-----: | :-----: | :-----: | :----: | :----: |\n   * | **43**  | **16**  |  **9**  | **12** | **10** |\n   * | 3 _-x-_ | 5 _-x-_ | 4 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/animation-direction\n   */\n  \"animation-direction\"?: AnimationDirectionProperty | AnimationDirectionProperty[];\n  /**\n   * The **`animation-duration`** CSS property sets the length of time that an animation takes to complete one cycle.\n   *\n   * **Initial value**: `0s`\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |\n   * | :-----: | :-----: | :-----: | :----: | :----: |\n   * | **43**  | **16**  |  **9**  | **12** | **10** |\n   * | 3 _-x-_ | 5 _-x-_ | 4 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/animation-duration\n   */\n  \"animation-duration\"?: GlobalsString | GlobalsString[];\n  /**\n   * The **`animation-fill-mode`** CSS property sets how a CSS animation applies styles to its target before and after its execution.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |\n   * | :-----: | :-----: | :-----: | :----: | :----: |\n   * | **43**  | **16**  |  **9**  | **12** | **10** |\n   * | 3 _-x-_ | 5 _-x-_ | 5 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/animation-fill-mode\n   */\n  \"animation-fill-mode\"?: AnimationFillModeProperty | AnimationFillModeProperty[];\n  /**\n   * The **`animation-iteration-count`** CSS property sets the number of times an animation cycle should be played before stopping.\n   *\n   * **Initial value**: `1`\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |\n   * | :-----: | :-----: | :-----: | :----: | :----: |\n   * | **43**  | **16**  |  **9**  | **12** | **10** |\n   * | 3 _-x-_ | 5 _-x-_ | 4 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/animation-iteration-count\n   */\n  \"animation-iteration-count\"?: AnimationIterationCountProperty | AnimationIterationCountProperty[];\n  /**\n   * The **`animation-name`** CSS property sets one or more animations to apply to an element. Each name is an `@keyframes` at-rule that sets the property values for the animation sequence.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |\n   * | :-----: | :-----: | :-----: | :----: | :----: |\n   * | **43**  | **16**  |  **9**  | **12** | **10** |\n   * | 3 _-x-_ | 5 _-x-_ | 4 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/animation-name\n   */\n  \"animation-name\"?: AnimationNameProperty | AnimationNameProperty[];\n  /**\n   * The **`animation-play-state`** CSS property sets whether an animation is running or paused.\n   *\n   * **Initial value**: `running`\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |\n   * | :-----: | :-----: | :-----: | :----: | :----: |\n   * | **43**  | **16**  |  **9**  | **12** | **10** |\n   * | 3 _-x-_ | 5 _-x-_ | 4 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/animation-play-state\n   */\n  \"animation-play-state\"?: AnimationPlayStateProperty | AnimationPlayStateProperty[];\n  /**\n   * The `**animation-timing-function**` CSS property sets how an animation progresses through the duration of each cycle.\n   *\n   * **Initial value**: `ease`\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |\n   * | :-----: | :-----: | :-----: | :----: | :----: |\n   * | **43**  | **16**  |  **9**  | **12** | **10** |\n   * | 3 _-x-_ | 5 _-x-_ | 4 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/animation-timing-function\n   */\n  \"animation-timing-function\"?: AnimationTimingFunctionProperty | AnimationTimingFunctionProperty[];\n  /**\n   * The **`-moz-appearance`** CSS property is used in Gecko (Firefox) to display an element using platform-native styling based on the operating system's theme.\n   *\n   * **Initial value**: `auto`\n   *\n   * |   Chrome    |   Firefox   |   Safari    |     Edge     | IE  |\n   * | :---------: | :---------: | :---------: | :----------: | :-: |\n   * | **1** _-x-_ | **1** _-x-_ | **3** _-x-_ | **12** _-x-_ | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/appearance\n   */\n  appearance?: AppearanceProperty | AppearanceProperty[];\n  /**\n   * The **`aspect-ratio`**    CSS property sets a _**preferred aspect ratio**_ for the box, which will be used in the calculation of auto sizes and some other layout functions.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **79** | **71**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/aspect-ratio\n   */\n  \"aspect-ratio\"?: AspectRatioProperty | AspectRatioProperty[];\n  /**\n   * The **`backdrop-filter`** CSS property lets you apply graphical effects such as blurring or color shifting to the area behind an element. Because it applies to everything _behind_ the element, to see the effect you must make the element or its background at least partially transparent.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox |   Safari    |  Edge  | IE  |\n   * | :----: | :-----: | :---------: | :----: | :-: |\n   * | **76** |   n/a   | **9** _-x-_ | **17** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/backdrop-filter\n   */\n  \"backdrop-filter\"?: BackdropFilterProperty | BackdropFilterProperty[];\n  /**\n   * The **`backface-visibility`** CSS property sets whether the back face of an element is visible when turned towards the user.\n   *\n   * **Initial value**: `visible`\n   *\n   * |  Chrome  | Firefox  |    Safari     |  Edge  |   IE   |\n   * | :------: | :------: | :-----------: | :----: | :----: |\n   * |  **36**  |  **16**  | **5.1** _-x-_ | **12** | **10** |\n   * | 12 _-x-_ | 10 _-x-_ |               |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/backface-visibility\n   */\n  \"backface-visibility\"?: BackfaceVisibilityProperty | BackfaceVisibilityProperty[];\n  /**\n   * The **`background-attachment`** CSS property sets whether a background image's position is fixed within the viewport, or scrolls with its containing block.\n   *\n   * **Initial value**: `scroll`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/background-attachment\n   */\n  \"background-attachment\"?: BackgroundAttachmentProperty | BackgroundAttachmentProperty[];\n  /**\n   * The **`background-blend-mode`** CSS property sets how an element's background images should blend with each other and with the element's background color.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **35** | **30**  | **8**  |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/background-blend-mode\n   */\n  \"background-blend-mode\"?: BackgroundBlendModeProperty | BackgroundBlendModeProperty[];\n  /**\n   * The **`background-clip`** CSS property sets whether an element's background `<color>` or `<image>` extends underneath its border.\n   *\n   * **Initial value**: `border-box`\n   *\n   * | Chrome | Firefox |   Safari    |  Edge  |  IE   |\n   * | :----: | :-----: | :---------: | :----: | :---: |\n   * | **1**  |  **4**  | **3** _-x-_ | **12** | **9** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/background-clip\n   */\n  \"background-clip\"?: BackgroundClipProperty | BackgroundClipProperty[];\n  /**\n   * The **`background-color`** CSS property sets the background color of an element.\n   *\n   * **Initial value**: `transparent`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/background-color\n   */\n  \"background-color\"?: BackgroundColorProperty | BackgroundColorProperty[];\n  /**\n   * The **`background-image`** CSS property sets one or more background images on an element.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/background-image\n   */\n  \"background-image\"?: BackgroundImageProperty | BackgroundImageProperty[];\n  /**\n   * The **`background-origin`** CSS property sets the _background positioning area_. In other words, it sets the origin position of an image set with the `background-image` property.\n   *\n   * **Initial value**: `padding-box`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **4**  | **3**  | **12** | **9** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/background-origin\n   */\n  \"background-origin\"?: BackgroundOriginProperty | BackgroundOriginProperty[];\n  /**\n   * The **`background-position`** CSS property sets the initial position for each background image. The position is relative to the position layer set by `background-origin`.\n   *\n   * **Initial value**: `0% 0%`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/background-position\n   */\n  \"background-position\"?: BackgroundPositionProperty<TLength> | BackgroundPositionProperty<TLength>[];\n  /**\n   * The **`background-position-x`** CSS property sets the initial horizontal position for each background image. The position is relative to the position layer set by `background-origin`.\n   *\n   * **Initial value**: `left`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  | **49**  | **1**  | **12** | **6** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/background-position-x\n   */\n  \"background-position-x\"?: BackgroundPositionXProperty<TLength> | BackgroundPositionXProperty<TLength>[];\n  /**\n   * The **`background-position-y`** CSS property sets the initial vertical position, relative to the background position layer defined by `background-origin`, for each defined background image.\n   *\n   * **Initial value**: `top`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  | **49**  | **1**  | **12** | **6** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/background-position-y\n   */\n  \"background-position-y\"?: BackgroundPositionYProperty<TLength> | BackgroundPositionYProperty<TLength>[];\n  /**\n   * The **`background-repeat`** CSS property sets how background images are repeated. A background image can be repeated along the horizontal and vertical axes, or not repeated at all.\n   *\n   * **Initial value**: `repeat`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/background-repeat\n   */\n  \"background-repeat\"?: BackgroundRepeatProperty | BackgroundRepeatProperty[];\n  /**\n   * The **`background-size`** CSS property sets the size of the element's background image. The image can be left to its natural size, stretched, or constrained to fit the available space.\n   *\n   * **Initial value**: `auto auto`\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |  IE   |\n   * | :-----: | :-----: | :-----: | :----: | :---: |\n   * |  **3**  |  **4**  | **4.1** | **12** | **9** |\n   * | 1 _-x-_ |         | 3 _-x-_ |        |       |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/background-size\n   */\n  \"background-size\"?: BackgroundSizeProperty<TLength> | BackgroundSizeProperty<TLength>[];\n  /** **Initial value**: `clip` */\n  \"block-overflow\"?: BlockOverflowProperty | BlockOverflowProperty[];\n  /**\n   * The **`block-size`** CSS property defines the horizontal or vertical size of an element's block, depending on its writing mode. It corresponds to either the `width` or the `height` property, depending on the value of `writing-mode`.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **57** | **41**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/block-size\n   */\n  \"block-size\"?: BlockSizeProperty<TLength> | BlockSizeProperty<TLength>[];\n  /**\n   * The **`border-block-color`** CSS property defines the color of the logical block borders of an element, which maps to a physical border color depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-color` and `border-bottom-color`, or `border-right-color` and `border-left-color` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `currentcolor`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |  n/a   | **66**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-block-color\n   */\n  \"border-block-color\"?: BorderBlockColorProperty | BorderBlockColorProperty[];\n  /**\n   * The **`border-block-end-color`** CSS property defines the color of the logical block-end border of an element, which maps to a physical border color depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-color`, `border-right-color`, `border-bottom-color`, or `border-left-color` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `currentcolor`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **69** | **41**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-block-end-color\n   */\n  \"border-block-end-color\"?: BorderBlockEndColorProperty | BorderBlockEndColorProperty[];\n  /**\n   * The **`border-block-end-style`** CSS property defines the style of the logical block end border of an element, which maps to a physical border style depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-style`, `border-right-style`, `border-bottom-style`, or `border-left-style` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **69** | **41**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-block-end-style\n   */\n  \"border-block-end-style\"?: BorderBlockEndStyleProperty | BorderBlockEndStyleProperty[];\n  /**\n   * The **`border-block-end-width`** CSS property defines the width of the logical block-end border of an element, which maps to a physical border width depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-width`, `border-right-width`, `border-bottom-width`, or `border-left-width` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `medium`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **69** | **41**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-block-end-width\n   */\n  \"border-block-end-width\"?: BorderBlockEndWidthProperty<TLength> | BorderBlockEndWidthProperty<TLength>[];\n  /**\n   * The **`border-block-start-color`** CSS property defines the color of the logical block-start border of an element, which maps to a physical border color depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-color`, `border-right-color`, `border-bottom-color`, or `border-left-color` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `currentcolor`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **69** | **41**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-block-start-color\n   */\n  \"border-block-start-color\"?: BorderBlockStartColorProperty | BorderBlockStartColorProperty[];\n  /**\n   * The **`border-block-start-style`** CSS property defines the style of the logical block start border of an element, which maps to a physical border style depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-style`, `border-right-style`, `border-bottom-style`, or `border-left-style` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **69** | **41**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-block-start-style\n   */\n  \"border-block-start-style\"?: BorderBlockStartStyleProperty | BorderBlockStartStyleProperty[];\n  /**\n   * The **`border-block-start-width`** CSS property defines the width of the logical block-start border of an element, which maps to a physical border width depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-width`, `border-right-width`, `border-bottom-width`, or `border-left-width` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `medium`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **69** | **41**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-block-start-width\n   */\n  \"border-block-start-width\"?: BorderBlockStartWidthProperty<TLength> | BorderBlockStartWidthProperty<TLength>[];\n  /**\n   * The **`border-block-style`** CSS property defines the style of the logical block borders of an element, which maps to a physical border style depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-style` and `border-bottom-style`, or `border-left-style` and `border-right-style` properties depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **66**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-block-style\n   */\n  \"border-block-style\"?: BorderBlockStyleProperty | BorderBlockStyleProperty[];\n  /**\n   * The **`border-block-width`** CSS property defines the width of the logical block borders of an element, which maps to a physical border width depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-width` and `border-bottom-width`, or `border-left-width`, and `border-right-width` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `medium`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **66**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-block-width\n   */\n  \"border-block-width\"?: BorderBlockWidthProperty<TLength> | BorderBlockWidthProperty<TLength>[];\n  /**\n   * The **`border-bottom-color`** CSS property sets the color of an element's bottom border. It can also be set with the shorthand CSS properties `border-color` or `border-bottom`.\n   *\n   * **Initial value**: `currentcolor`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-bottom-color\n   */\n  \"border-bottom-color\"?: BorderBottomColorProperty | BorderBottomColorProperty[];\n  /**\n   * The **`border-bottom-left-radius`** CSS property rounds the bottom-left corner of an element.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |  IE   |\n   * | :-----: | :-----: | :-----: | :----: | :---: |\n   * |  **4**  |  **4**  |  **5**  | **12** | **9** |\n   * | 1 _-x-_ |         | 3 _-x-_ |        |       |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-bottom-left-radius\n   */\n  \"border-bottom-left-radius\"?: BorderBottomLeftRadiusProperty<TLength> | BorderBottomLeftRadiusProperty<TLength>[];\n  /**\n   * The **`border-bottom-right-radius`** CSS property rounds the bottom-right corner of an element.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |  IE   |\n   * | :-----: | :-----: | :-----: | :----: | :---: |\n   * |  **4**  |  **4**  |  **5**  | **12** | **9** |\n   * | 1 _-x-_ |         | 3 _-x-_ |        |       |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-bottom-right-radius\n   */\n  \"border-bottom-right-radius\"?: BorderBottomRightRadiusProperty<TLength> | BorderBottomRightRadiusProperty<TLength>[];\n  /**\n   * The **`border-bottom-style`** CSS property sets the line style of an element's bottom `border`.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE    |\n   * | :----: | :-----: | :----: | :----: | :-----: |\n   * | **1**  |  **1**  | **1**  | **12** | **5.5** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-bottom-style\n   */\n  \"border-bottom-style\"?: BorderBottomStyleProperty | BorderBottomStyleProperty[];\n  /**\n   * The **`border-bottom-width`** CSS property sets the width of the bottom border of a box.\n   *\n   * **Initial value**: `medium`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-bottom-width\n   */\n  \"border-bottom-width\"?: BorderBottomWidthProperty<TLength> | BorderBottomWidthProperty<TLength>[];\n  /**\n   * The **`border-collapse`** CSS property sets whether cells inside a `<table>` have shared or separate borders.\n   *\n   * **Initial value**: `separate`\n   *\n   * | Chrome | Firefox | Safari  |  Edge  |  IE   |\n   * | :----: | :-----: | :-----: | :----: | :---: |\n   * | **1**  |  **1**  | **1.2** | **12** | **5** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-collapse\n   */\n  \"border-collapse\"?: BorderCollapseProperty | BorderCollapseProperty[];\n  /**\n   * The **`border-end-end-radius`** CSS property defines a logical border radius on an element, which maps to a physical border radius that depends on on the element's `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **66**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-end-end-radius\n   */\n  \"border-end-end-radius\"?: BorderEndEndRadiusProperty<TLength> | BorderEndEndRadiusProperty<TLength>[];\n  /**\n   * The **`border-end-start-radius`** CSS property defines a logical border radius on an element, which maps to a physical border radius depending on the element's `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **66**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-end-start-radius\n   */\n  \"border-end-start-radius\"?: BorderEndStartRadiusProperty<TLength> | BorderEndStartRadiusProperty<TLength>[];\n  /**\n   * The **`border-image-outset`** CSS property sets the distance by which an element's border image is set out from its border box.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE   |\n   * | :----: | :-----: | :----: | :----: | :----: |\n   * | **15** | **15**  | **6**  | **12** | **11** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-image-outset\n   */\n  \"border-image-outset\"?: BorderImageOutsetProperty<TLength> | BorderImageOutsetProperty<TLength>[];\n  /**\n   * The **`border-image-repeat`** CSS property defines how the edge regions of a source image are adjusted to fit the dimensions of an element's border image.\n   *\n   * **Initial value**: `stretch`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE   |\n   * | :----: | :-----: | :----: | :----: | :----: |\n   * | **15** | **15**  | **6**  | **12** | **11** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-image-repeat\n   */\n  \"border-image-repeat\"?: BorderImageRepeatProperty | BorderImageRepeatProperty[];\n  /**\n   * The **`border-image-slice`** CSS property divides the image specified by `border-image-source` into regions. These regions form the components of an element's border image.\n   *\n   * **Initial value**: `100%`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE   |\n   * | :----: | :-----: | :----: | :----: | :----: |\n   * | **15** | **15**  | **6**  | **12** | **11** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-image-slice\n   */\n  \"border-image-slice\"?: BorderImageSliceProperty | BorderImageSliceProperty[];\n  /**\n   * The **`border-image-source`** CSS property sets the source image used to create an element's border image.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE   |\n   * | :----: | :-----: | :----: | :----: | :----: |\n   * | **15** | **15**  | **6**  | **12** | **11** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-image-source\n   */\n  \"border-image-source\"?: BorderImageSourceProperty | BorderImageSourceProperty[];\n  /**\n   * The **`border-image-width`** CSS property sets the width of an element's border image.\n   *\n   * **Initial value**: `1`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE   |\n   * | :----: | :-----: | :----: | :----: | :----: |\n   * | **15** | **13**  | **6**  | **12** | **11** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-image-width\n   */\n  \"border-image-width\"?: BorderImageWidthProperty<TLength> | BorderImageWidthProperty<TLength>[];\n  /**\n   * The **`border-inline-color`** CSS property defines the color of the logical inline borders of an element, which maps to a physical border color depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-color` and `border-bottom-color`, or `border-right-color` and `border-left-color` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `currentcolor`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **66**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-inline-color\n   */\n  \"border-inline-color\"?: BorderInlineColorProperty | BorderInlineColorProperty[];\n  /**\n   * The **`border-inline-end-color`** CSS property defines the color of the logical inline-end border of an element, which maps to a physical border color depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-color`, `border-right-color`, `border-bottom-color`, or `border-left-color` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `currentcolor`\n   *\n   * | Chrome |           Firefox           |  Safari  | Edge | IE  |\n   * | :----: | :-------------------------: | :------: | :--: | :-: |\n   * | **69** |           **41**            | **12.1** |  No  | No  |\n   * |        | 3 _(-moz-border-end-color)_ |          |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-inline-end-color\n   */\n  \"border-inline-end-color\"?: BorderInlineEndColorProperty | BorderInlineEndColorProperty[];\n  /**\n   * The **`border-inline-end-style`** CSS property defines the style of the logical inline end border of an element, which maps to a physical border style depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-style`, `border-right-style`, `border-bottom-style`, or `border-left-style` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome |           Firefox           |  Safari  | Edge | IE  |\n   * | :----: | :-------------------------: | :------: | :--: | :-: |\n   * | **69** |           **41**            | **12.1** |  No  | No  |\n   * |        | 3 _(-moz-border-end-style)_ |          |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-inline-end-style\n   */\n  \"border-inline-end-style\"?: BorderInlineEndStyleProperty | BorderInlineEndStyleProperty[];\n  /**\n   * The **`border-inline-end-width`** CSS property defines the width of the logical inline-end border of an element, which maps to a physical border width depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-width`, `border-right-width`, `border-bottom-width`, or `border-left-width` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `medium`\n   *\n   * | Chrome |           Firefox           |  Safari  | Edge | IE  |\n   * | :----: | :-------------------------: | :------: | :--: | :-: |\n   * | **69** |           **41**            | **12.1** |  No  | No  |\n   * |        | 3 _(-moz-border-end-width)_ |          |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-inline-end-width\n   */\n  \"border-inline-end-width\"?: BorderInlineEndWidthProperty<TLength> | BorderInlineEndWidthProperty<TLength>[];\n  /**\n   * The **`border-inline-start-color`** CSS property defines the color of the logical inline start border of an element, which maps to a physical border color depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-color`, `border-right-color`, `border-bottom-color`, or `border-left-color` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `currentcolor`\n   *\n   * | Chrome |            Firefox            |  Safari  | Edge | IE  |\n   * | :----: | :---------------------------: | :------: | :--: | :-: |\n   * | **69** |            **41**             | **12.1** |  No  | No  |\n   * |        | 3 _(-moz-border-start-color)_ |          |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-inline-start-color\n   */\n  \"border-inline-start-color\"?: BorderInlineStartColorProperty | BorderInlineStartColorProperty[];\n  /**\n   * The **`border-inline-start-style`** CSS property defines the style of the logical inline start border of an element, which maps to a physical border style depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-style`, `border-right-style`, `border-bottom-style`, or `border-left-style` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome |            Firefox            |  Safari  | Edge | IE  |\n   * | :----: | :---------------------------: | :------: | :--: | :-: |\n   * | **69** |            **41**             | **12.1** |  No  | No  |\n   * |        | 3 _(-moz-border-start-style)_ |          |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-inline-start-style\n   */\n  \"border-inline-start-style\"?: BorderInlineStartStyleProperty | BorderInlineStartStyleProperty[];\n  /**\n   * The **`border-inline-start-width`** CSS property defines the width of the logical inline-start border of an element, which maps to a physical border width depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-width`, `border-right-width`, `border-bottom-width`, or `border-left-width` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `medium`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **69** | **41**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-inline-start-width\n   */\n  \"border-inline-start-width\"?: BorderInlineStartWidthProperty<TLength> | BorderInlineStartWidthProperty<TLength>[];\n  /**\n   * The **`border-inline-style`** CSS property defines the style of the logical inline borders of an element, which maps to a physical border style depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-style` and `border-bottom-style`, or `border-left-style` and `border-right-style` properties depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **66**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-inline-style\n   */\n  \"border-inline-style\"?: BorderInlineStyleProperty | BorderInlineStyleProperty[];\n  /**\n   * The **`border-inline-width`** CSS property defines the width of the logical inline borders of an element, which maps to a physical border width depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-width` and `border-bottom-width`, or `border-left-width`, and `border-right-width` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `medium`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **66**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-inline-width\n   */\n  \"border-inline-width\"?: BorderInlineWidthProperty<TLength> | BorderInlineWidthProperty<TLength>[];\n  /**\n   * The **`border-left-color`** CSS property sets the color of an element's left border. It can also be set with the shorthand CSS properties `border-color` or `border-left`.\n   *\n   * **Initial value**: `currentcolor`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-left-color\n   */\n  \"border-left-color\"?: BorderLeftColorProperty | BorderLeftColorProperty[];\n  /**\n   * The **`border-left-style`** CSS property sets the line style of an element's left `border`.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE    |\n   * | :----: | :-----: | :----: | :----: | :-----: |\n   * | **1**  |  **1**  | **1**  | **12** | **5.5** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-left-style\n   */\n  \"border-left-style\"?: BorderLeftStyleProperty | BorderLeftStyleProperty[];\n  /**\n   * The **`border-left-width`** CSS property sets the width of the left border of an element.\n   *\n   * **Initial value**: `medium`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-left-width\n   */\n  \"border-left-width\"?: BorderLeftWidthProperty<TLength> | BorderLeftWidthProperty<TLength>[];\n  /**\n   * The **`border-right-color`** CSS property sets the color of an element's right border. It can also be set with the shorthand CSS properties `border-color` or `border-right`.\n   *\n   * **Initial value**: `currentcolor`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-right-color\n   */\n  \"border-right-color\"?: BorderRightColorProperty | BorderRightColorProperty[];\n  /**\n   * The **`border-right-style`** CSS property sets the line style of an element's right `border`.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE    |\n   * | :----: | :-----: | :----: | :----: | :-----: |\n   * | **1**  |  **1**  | **1**  | **12** | **5.5** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-right-style\n   */\n  \"border-right-style\"?: BorderRightStyleProperty | BorderRightStyleProperty[];\n  /**\n   * The **`border-right-width`** CSS property sets the width of the right border of an element.\n   *\n   * **Initial value**: `medium`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-right-width\n   */\n  \"border-right-width\"?: BorderRightWidthProperty<TLength> | BorderRightWidthProperty<TLength>[];\n  /**\n   * The **`border-spacing`** CSS property sets the distance between the borders of adjacent `<table>` cells. This property applies only when `border-collapse` is `separate`.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **8** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-spacing\n   */\n  \"border-spacing\"?: BorderSpacingProperty<TLength> | BorderSpacingProperty<TLength>[];\n  /**\n   * The **`border-start-end-radius`** CSS property defines a logical border radius on an element, which maps to a physical border radius depending on the element's `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **66**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-start-end-radius\n   */\n  \"border-start-end-radius\"?: BorderStartEndRadiusProperty<TLength> | BorderStartEndRadiusProperty<TLength>[];\n  /**\n   * The **`border-start-start-radius`** CSS property defines a logical border radius on an element, which maps to a physical border radius that depends on the element's `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **66**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-start-start-radius\n   */\n  \"border-start-start-radius\"?: BorderStartStartRadiusProperty<TLength> | BorderStartStartRadiusProperty<TLength>[];\n  /**\n   * The **`border-top-color`** CSS property sets the color of an element's top border. It can also be set with the shorthand CSS properties `border-color` or `border-top`.\n   *\n   * **Initial value**: `currentcolor`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-top-color\n   */\n  \"border-top-color\"?: BorderTopColorProperty | BorderTopColorProperty[];\n  /**\n   * The **`border-top-left-radius`** CSS property rounds the top-left corner of an element.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |  IE   |\n   * | :-----: | :-----: | :-----: | :----: | :---: |\n   * |  **4**  |  **4**  |  **5**  | **12** | **9** |\n   * | 1 _-x-_ |         | 3 _-x-_ |        |       |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-top-left-radius\n   */\n  \"border-top-left-radius\"?: BorderTopLeftRadiusProperty<TLength> | BorderTopLeftRadiusProperty<TLength>[];\n  /**\n   * The **`border-top-right-radius`** CSS property rounds the top-right corner of an element.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |  IE   |\n   * | :-----: | :-----: | :-----: | :----: | :---: |\n   * |  **4**  |  **4**  |  **5**  | **12** | **9** |\n   * | 1 _-x-_ |         | 3 _-x-_ |        |       |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-top-right-radius\n   */\n  \"border-top-right-radius\"?: BorderTopRightRadiusProperty<TLength> | BorderTopRightRadiusProperty<TLength>[];\n  /**\n   * The **`border-top-style`** CSS property sets the line style of an element's top `border`.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE    |\n   * | :----: | :-----: | :----: | :----: | :-----: |\n   * | **1**  |  **1**  | **1**  | **12** | **5.5** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-top-style\n   */\n  \"border-top-style\"?: BorderTopStyleProperty | BorderTopStyleProperty[];\n  /**\n   * The **`border-top-width`** CSS property sets the width of the top border of an element.\n   *\n   * **Initial value**: `medium`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-top-width\n   */\n  \"border-top-width\"?: BorderTopWidthProperty<TLength> | BorderTopWidthProperty<TLength>[];\n  /**\n   * The **`bottom`** CSS property participates in specifying the vertical position of a _positioned element_. It has no effect on non-positioned elements.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **5** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/bottom\n   */\n  bottom?: BottomProperty<TLength> | BottomProperty<TLength>[];\n  /**\n   * The **`box-decoration-break`** CSS property specifies how an element's fragments should be rendered when broken across multiple lines, columns, or pages.\n   *\n   * **Initial value**: `slice`\n   *\n   * |    Chrome    | Firefox |    Safari     | Edge | IE  |\n   * | :----------: | :-----: | :-----------: | :--: | :-: |\n   * | **22** _-x-_ | **32**  | **6.1** _-x-_ |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/box-decoration-break\n   */\n  \"box-decoration-break\"?: BoxDecorationBreakProperty | BoxDecorationBreakProperty[];\n  /**\n   * The **`box-shadow`** CSS property adds shadow effects around an element's frame. You can set multiple effects separated by commas. A box shadow is described by X and Y offsets relative to the element, blur and spread radii, and color.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |  IE   |\n   * | :-----: | :-----: | :-----: | :----: | :---: |\n   * | **10**  |  **4**  | **5.1** | **12** | **9** |\n   * | 1 _-x-_ |         | 3 _-x-_ |        |       |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/box-shadow\n   */\n  \"box-shadow\"?: BoxShadowProperty | BoxShadowProperty[];\n  /**\n   * The **`box-sizing`** CSS property defines how the user agent should calculate the total width and height of an element.\n   *\n   * **Initial value**: `content-box`\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |  IE   |\n   * | :-----: | :-----: | :-----: | :----: | :---: |\n   * | **10**  | **29**  | **5.1** | **12** | **8** |\n   * | 1 _-x-_ | 1 _-x-_ | 3 _-x-_ |        |       |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/box-sizing\n   */\n  \"box-sizing\"?: BoxSizingProperty | BoxSizingProperty[];\n  /**\n   * The **`break-after`** CSS property defines how page, column, or region breaks should behave after a generated box. If there is no generated box, the property is ignored.\n   *\n   * **Initial value**: `auto`\n   *\n   * ---\n   *\n   * _Supported in Multi-column Layout_\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE   |\n   * | :----: | :-----: | :----: | :----: | :----: |\n   * | **50** |   No    |   No   | **12** | **10** |\n   *\n   * ---\n   *\n   * _Supported in Paged Media_\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE   |\n   * | :----: | :-----: | :----: | :----: | :----: |\n   * | **50** | **65**  | **10** | **12** | **10** |\n   *\n   * ---\n   *\n   * _Supported in CSS Regions_\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   |   No    |   No   |  No  | No  |\n   *\n   * ---\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/break-after\n   */\n  \"break-after\"?: BreakAfterProperty | BreakAfterProperty[];\n  /**\n   * The **`break-before`** CSS property sets how page, column, or region breaks should behave before a generated box. If there is no generated box, the property is ignored.\n   *\n   * **Initial value**: `auto`\n   *\n   * ---\n   *\n   * _Supported in Multi-column Layout_\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE   |\n   * | :----: | :-----: | :----: | :----: | :----: |\n   * | **50** | **65**  |   No   | **12** | **10** |\n   *\n   * ---\n   *\n   * _Supported in Paged Media_\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE   |\n   * | :----: | :-----: | :----: | :----: | :----: |\n   * | **50** | **65**  | **10** | **12** | **10** |\n   *\n   * ---\n   *\n   * _Supported in CSS Regions_\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   |   No    |   No   |  No  | No  |\n   *\n   * ---\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/break-before\n   */\n  \"break-before\"?: BreakBeforeProperty | BreakBeforeProperty[];\n  /**\n   * The **`break-inside`** CSS property defines how page, column, or region breaks should behave inside a generated box. If there is no generated box, the property is ignored.\n   *\n   * **Initial value**: `auto`\n   *\n   * ---\n   *\n   * _Supported in Multi-column Layout_\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE   |\n   * | :----: | :-----: | :----: | :----: | :----: |\n   * | **50** | **65**  | **10** | **12** | **10** |\n   *\n   * ---\n   *\n   * _Supported in Paged Media_\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE   |\n   * | :----: | :-----: | :----: | :----: | :----: |\n   * | **50** | **65**  | **10** | **12** | **10** |\n   *\n   * ---\n   *\n   * _Supported in CSS Regions_\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   |   No    |   No   |  No  | No  |\n   *\n   * ---\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/break-inside\n   */\n  \"break-inside\"?: BreakInsideProperty | BreakInsideProperty[];\n  /**\n   * The **`caption-side`** CSS property puts the content of a table's `<caption>` on the specified side. The values are relative to the `writing-mode` of the table.\n   *\n   * **Initial value**: `top`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **8** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/caption-side\n   */\n  \"caption-side\"?: CaptionSideProperty | CaptionSideProperty[];\n  /**\n   * The **`caret-color`** CSS property sets the color of the insertion caret, the visible marker where the next character typed will be inserted. The caret appears in elements such as `<input>` or those with the `contenteditable` attribute. The caret is typically a thin vertical line that flashes to help make it more noticeable. By default, it is black, but its color can be altered with this property.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **57** | **53**  | **11.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/caret-color\n   */\n  \"caret-color\"?: CaretColorProperty | CaretColorProperty[];\n  /**\n   * The **`clear`** CSS property sets whether an element must be moved below (cleared) floating elements that precede it. The `clear` property applies to floating and non-floating elements.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/clear\n   */\n  clear?: ClearProperty | ClearProperty[];\n  /**\n   * The `**clip-path**` CSS property creates a clipping region that sets what part of an element should be shown. Parts that are inside the region are shown, while those outside are hidden.\n   *\n   * **Initial value**: `none`\n   *\n   * |  Chrome  | Firefox |  Safari   |  Edge  |   IE   |\n   * | :------: | :-----: | :-------: | :----: | :----: |\n   * |  **55**  | **3.5** |  **9.1**  | **12** | **10** |\n   * | 23 _-x-_ |         | 6.1 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/clip-path\n   */\n  \"clip-path\"?: ClipPathProperty | ClipPathProperty[];\n  /**\n   * The **`color`** CSS property sets the foreground color value of an element's text and text decorations, and sets the `currentcolor` value. `currentcolor` may be used as an indirect value on _other_ properties and is the default for other color properties, such as `border-color`.\n   *\n   * **Initial value**: Varies from one browser to another\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **3** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/color\n   */\n  color?: ColorProperty | ColorProperty[];\n  /**\n   * The **`color-adjust`** CSS property sets what, if anything, the user agent may do to optimize the appearance of the element on the output device. By default, the browser is allowed to make any adjustments to the element's appearance it determines to be necessary and prudent given the type and capabilities of the output device.\n   *\n   * **Initial value**: `economy`\n   *\n   * |    Chrome    | Firefox |   Safari    | Edge | IE  |\n   * | :----------: | :-----: | :---------: | :--: | :-: |\n   * | **49** _-x-_ | **48**  | **6** _-x-_ |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/color-adjust\n   */\n  \"color-adjust\"?: ColorAdjustProperty | ColorAdjustProperty[];\n  /**\n   * The **`column-count`** CSS property breaks an element's content into the specified number of columns.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |\n   * | :-----: | :-----: | :-----: | :----: | :----: |\n   * | **50**  | **52**  |  **9**  | **12** | **10** |\n   * | 1 _-x-_ |         | 3 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/column-count\n   */\n  \"column-count\"?: ColumnCountProperty | ColumnCountProperty[];\n  /**\n   * The **`column-fill`** CSS property controls how an element's contents are balanced when broken into columns.\n   *\n   * **Initial value**: `balance`\n   *\n   * | Chrome | Firefox | Safari  |  Edge  |   IE   |\n   * | :----: | :-----: | :-----: | :----: | :----: |\n   * | **50** | **52**  |  **9**  | **12** | **10** |\n   * |        |         | 8 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/column-fill\n   */\n  \"column-fill\"?: ColumnFillProperty | ColumnFillProperty[];\n  /**\n   * The **`column-gap`** CSS property sets the size of the gap (gutter) between an element's columns.\n   *\n   * **Initial value**: `normal`\n   *\n   * ---\n   *\n   * _Supported in Flex Layout_\n   *\n   * | Chrome | Firefox |   Safari    | Edge | IE  |\n   * | :----: | :-----: | :---------: | :--: | :-: |\n   * |   No   | **63**  | **3** _-x-_ |  No  | No  |\n   *\n   * ---\n   *\n   * _Supported in Grid Layout_\n   *\n   * |     Chrome      |     Firefox     |        Safari         |  Edge  | IE  |\n   * | :-------------: | :-------------: | :-------------------: | :----: | :-: |\n   * |     **66**      |     **61**      | **10.1** _(grid-gap)_ | **16** | No  |\n   * | 57 _(grid-gap)_ | 52 _(grid-gap)_ |                       |        |     |\n   *\n   * ---\n   *\n   * _Supported in Multi-column Layout_\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |\n   * | :-----: | :-----: | :-----: | :----: | :----: |\n   * | **50**  | **52**  | **10**  | **12** | **10** |\n   * | 1 _-x-_ |         | 3 _-x-_ |        |        |\n   *\n   * ---\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/column-gap\n   */\n  \"column-gap\"?: ColumnGapProperty<TLength> | ColumnGapProperty<TLength>[];\n  /**\n   * The **`column-rule-color`** CSS property sets the color of the rule (line) drawn between columns in a multi-column layout.\n   *\n   * **Initial value**: `currentcolor`\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |\n   * | :-----: | :-----: | :-----: | :----: | :----: |\n   * | **50**  | **52**  |  **9**  | **12** | **10** |\n   * | 1 _-x-_ |         | 3 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/column-rule-color\n   */\n  \"column-rule-color\"?: ColumnRuleColorProperty | ColumnRuleColorProperty[];\n  /**\n   * The **`column-rule-style`** CSS property sets the style of the line drawn between columns in a multi-column layout.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |\n   * | :-----: | :-----: | :-----: | :----: | :----: |\n   * | **50**  | **52**  |  **9**  | **12** | **10** |\n   * | 1 _-x-_ |         | 3 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/column-rule-style\n   */\n  \"column-rule-style\"?: ColumnRuleStyleProperty | ColumnRuleStyleProperty[];\n  /**\n   * The **`column-rule-width`** CSS property sets the width of the rule (line) drawn between columns in a multi-column layout.\n   *\n   * **Initial value**: `medium`\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |\n   * | :-----: | :-----: | :-----: | :----: | :----: |\n   * | **50**  | **52**  |  **9**  | **12** | **10** |\n   * | 1 _-x-_ |         | 3 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/column-rule-width\n   */\n  \"column-rule-width\"?: ColumnRuleWidthProperty<TLength> | ColumnRuleWidthProperty<TLength>[];\n  /**\n   * The **`column-span`** CSS property makes it possible for an element to span across all columns when its value is set to `all`.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome  | Firefox |  Safari   |  Edge  |   IE   |\n   * | :-----: | :-----: | :-------: | :----: | :----: |\n   * | **50**  | **71**  |   **9**   | **12** | **10** |\n   * | 6 _-x-_ |         | 5.1 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/column-span\n   */\n  \"column-span\"?: ColumnSpanProperty | ColumnSpanProperty[];\n  /**\n   * The **`column-width`** CSS property specifies the ideal column width in a multi-column layout. The container will have as many columns as can fit without any of them having a width less than the `column-width` value. If the width of the container is narrower than the specified value, the single column's width will be smaller than the declared column width.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |\n   * | :-----: | :-----: | :-----: | :----: | :----: |\n   * | **50**  | **50**  |  **9**  | **12** | **10** |\n   * | 1 _-x-_ |         | 3 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/column-width\n   */\n  \"column-width\"?: ColumnWidthProperty<TLength> | ColumnWidthProperty<TLength>[];\n  /**\n   * The **`contain`** CSS property allows an author to indicate that an element and its contents are, as much as possible, _independent_ of the rest of the document tree. This allows the browser to recalculate layout, style, paint, size, or any combination of them for a limited area of the DOM and not the entire page.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **52** | **69**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/contain\n   */\n  contain?: ContainProperty | ContainProperty[];\n  /**\n   * The **`content`** CSS property replaces an element with a generated value. Objects inserted using the `content` property are _anonymous replaced elements._\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **8** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/content\n   */\n  content?: ContentProperty | ContentProperty[];\n  /**\n   * The **`counter-increment`** CSS property increases or decreases the value of a CSS counter by a given value.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **2**  |  **1**  | **3**  | **12** | **8** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/counter-increment\n   */\n  \"counter-increment\"?: CounterIncrementProperty | CounterIncrementProperty[];\n  /**\n   * The **`counter-reset`** CSS property resets a CSS counter to a given value.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **2**  |  **1**  | **3**  | **12** | **8** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/counter-reset\n   */\n  \"counter-reset\"?: CounterResetProperty | CounterResetProperty[];\n  /**\n   * The **`counter-set`** CSS property sets a CSS counter to a given value. It manipulates the value of existing counters, and will only create new counters if there isn't already a counter of the given name on the element.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **68**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/counter-set\n   */\n  \"counter-set\"?: CounterSetProperty | CounterSetProperty[];\n  /**\n   * The **`cursor`** CSS property sets mouse cursor to display when the mouse pointer is over an element.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari  |  Edge  |  IE   |\n   * | :----: | :-----: | :-----: | :----: | :---: |\n   * | **1**  |  **1**  | **1.2** | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/cursor\n   */\n  cursor?: CursorProperty | CursorProperty[];\n  /**\n   * The **`direction`** CSS property sets the direction of text, table columns, and horizontal overflow. Use `rtl` for languages written from right to left (like Hebrew or Arabic), and `ltr` for those written from left to right (like English and most other languages).\n   *\n   * **Initial value**: `ltr`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE    |\n   * | :----: | :-----: | :----: | :----: | :-----: |\n   * | **2**  |  **1**  | **1**  | **12** | **5.5** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/direction\n   */\n  direction?: DirectionProperty | DirectionProperty[];\n  /**\n   * The **`display`** CSS property defines the _display type_ of an element, which consists of the two basic qualities of how an element generates boxes — the **outer display type** defining how the box participates in flow layout, and the **inner display type** defining how the children of the box are laid out.\n   *\n   * **Initial value**: `inline`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/display\n   */\n  display?: DisplayProperty | DisplayProperty[];\n  /**\n   * The **`empty-cells`** CSS property sets whether borders and backgrounds appear around `<table>` cells that have no visible content.\n   *\n   * **Initial value**: `show`\n   *\n   * | Chrome | Firefox | Safari  |  Edge  |  IE   |\n   * | :----: | :-----: | :-----: | :----: | :---: |\n   * | **1**  |  **1**  | **1.2** | **12** | **8** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/empty-cells\n   */\n  \"empty-cells\"?: EmptyCellsProperty | EmptyCellsProperty[];\n  /**\n   * The **`filter`** CSS property applies graphical effects like blur or color shift to an element. Filters are commonly used to adjust the rendering of images, backgrounds, and borders.\n   *\n   * **Initial value**: `none`\n   *\n   * |  Chrome  | Firefox | Safari  |  Edge  | IE  |\n   * | :------: | :-----: | :-----: | :----: | :-: |\n   * |  **53**  | **35**  | **9.1** | **12** | No  |\n   * | 18 _-x-_ |         | 6 _-x-_ |        |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/filter\n   */\n  filter?: FilterProperty | FilterProperty[];\n  /**\n   * The **`flex-basis`** CSS property sets the initial main size of a flex item. It sets the size of the content box unless otherwise set with `box-sizing`.\n   *\n   * **Initial value**: `auto`\n   *\n   * |  Chrome  | Firefox | Safari  |  Edge  |   IE   |\n   * | :------: | :-----: | :-----: | :----: | :----: |\n   * |  **29**  | **22**  |  **9**  | **12** | **11** |\n   * | 22 _-x-_ |         | 7 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/flex-basis\n   */\n  \"flex-basis\"?: FlexBasisProperty<TLength> | FlexBasisProperty<TLength>[];\n  /**\n   * The **`flex-direction`** CSS property sets how flex items are placed in the flex container defining the main axis and the direction (normal or reversed).\n   *\n   * **Initial value**: `row`\n   *\n   * |  Chrome  | Firefox | Safari  |  Edge  |    IE    |\n   * | :------: | :-----: | :-----: | :----: | :------: |\n   * |  **29**  | **20**  |  **9**  | **12** |  **11**  |\n   * | 21 _-x-_ |         | 7 _-x-_ |        | 10 _-x-_ |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/flex-direction\n   */\n  \"flex-direction\"?: FlexDirectionProperty | FlexDirectionProperty[];\n  /**\n   * The **`flex-grow`** CSS property sets how much of the available space in the flex container should be assigned to that item (the flex grow factor). If all sibling items have the same flex grow factor, then all items will receive the same share of available space, otherwise it is distributed according to the ratio defined by the different flex grow factors.\n   *\n   * **Initial value**: `0`\n   *\n   * |  Chrome  | Firefox |  Safari   |  Edge  |            IE            |\n   * | :------: | :-----: | :-------: | :----: | :----------------------: |\n   * |  **29**  | **20**  |   **9**   | **12** |          **11**          |\n   * | 22 _-x-_ |         | 6.1 _-x-_ |        | 10 _(-ms-flex-positive)_ |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/flex-grow\n   */\n  \"flex-grow\"?: GlobalsNumber | GlobalsNumber[];\n  /**\n   * The **`flex-shrink`** CSS property sets the flex shrink factor of a flex item. If the size of flex items is larger than the flex container, items shrink to fit according to `flex-shrink`.\n   *\n   * **Initial value**: `1`\n   *\n   * |  Chrome  | Firefox | Safari  |  Edge  |   IE   |\n   * | :------: | :-----: | :-----: | :----: | :----: |\n   * |  **29**  | **20**  |  **9**  | **12** | **10** |\n   * | 22 _-x-_ |         | 8 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/flex-shrink\n   */\n  \"flex-shrink\"?: GlobalsNumber | GlobalsNumber[];\n  /**\n   * The **`flex-wrap`** CSS property sets whether flex items are forced onto one line or can wrap onto multiple lines. If wrapping is allowed, it sets the direction that lines are stacked.\n   *\n   * **Initial value**: `nowrap`\n   *\n   * |  Chrome  | Firefox |  Safari   |  Edge  |   IE   |\n   * | :------: | :-----: | :-------: | :----: | :----: |\n   * |  **29**  | **28**  |   **9**   | **12** | **11** |\n   * | 21 _-x-_ |         | 6.1 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/flex-wrap\n   */\n  \"flex-wrap\"?: FlexWrapProperty | FlexWrapProperty[];\n  /**\n   * The **`float`** CSS property places an element on the left or right side of its container, allowing text and inline elements to wrap around it. The element is removed from the normal flow of the page, though still remaining a part of the flow (in contrast to absolute positioning).\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/float\n   */\n  float?: FloatProperty | FloatProperty[];\n  /**\n   * The **`font-family`** CSS property specifies a prioritized list of one or more font family names and/or generic family names for the selected element.\n   *\n   * **Initial value**: depends on user agent\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **3** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/font-family\n   */\n  \"font-family\"?: FontFamilyProperty | FontFamilyProperty[];\n  /**\n   * The **`font-feature-settings`** CSS property controls advanced typographic features in OpenType fonts.\n   *\n   * **Initial value**: `normal`\n   *\n   * |  Chrome  | Firefox  | Safari  |  Edge  |   IE   |\n   * | :------: | :------: | :-----: | :----: | :----: |\n   * |  **48**  |  **34**  | **9.1** | **15** | **10** |\n   * | 16 _-x-_ | 15 _-x-_ |         |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/font-feature-settings\n   */\n  \"font-feature-settings\"?: FontFeatureSettingsProperty | FontFeatureSettingsProperty[];\n  /**\n   * The **`font-kerning`** CSS property sets the use of the kerning information stored in a font.\n   *\n   * **Initial value**: `auto`\n   *\n   * |    Chrome    | Firefox | Safari | Edge | IE  |\n   * | :----------: | :-----: | :----: | :--: | :-: |\n   * | **32** _-x-_ | **32**  | **7**  |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/font-kerning\n   */\n  \"font-kerning\"?: FontKerningProperty | FontKerningProperty[];\n  /**\n   * The **`font-language-override`** CSS property controls the use of language-specific glyphs in a typeface.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **34**  |   No   |  No  | No  |\n   * |        | 4 _-x-_ |        |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/font-language-override\n   */\n  \"font-language-override\"?: FontLanguageOverrideProperty | FontLanguageOverrideProperty[];\n  /**\n   * The **`font-optical-sizing`** CSS property sets whether text rendering is optimized for viewing at different sizes. This only works for fonts that have an optical size variation axis.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari |  Edge  | IE  |\n   * | :----: | :-----: | :----: | :----: | :-: |\n   * | **79** | **62**  | **11** | **17** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/font-optical-sizing\n   */\n  \"font-optical-sizing\"?: FontOpticalSizingProperty | FontOpticalSizingProperty[];\n  /**\n   * The **`font-size`** CSS property sets the size of the font. This property is also used to compute the size of `em`, `ex`, and other relative `<length>` units.\n   *\n   * **Initial value**: `medium`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE    |\n   * | :----: | :-----: | :----: | :----: | :-----: |\n   * | **1**  |  **1**  | **1**  | **12** | **5.5** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/font-size\n   */\n  \"font-size\"?: FontSizeProperty<TLength> | FontSizeProperty<TLength>[];\n  /**\n   * The **`font-size-adjust`** CSS property sets how the font size should be chosen based on the height of lowercase rather than capital letters.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **54** |  **1**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/font-size-adjust\n   */\n  \"font-size-adjust\"?: FontSizeAdjustProperty | FontSizeAdjustProperty[];\n  /**\n   * The **`font-stretch`** CSS property selects a normal, condensed, or expanded face from a font.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **60** |  **9**  | **11** | **12** | **9** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/font-stretch\n   */\n  \"font-stretch\"?: FontStretchProperty | FontStretchProperty[];\n  /**\n   * The **`font-style`** CSS property sets whether a font should be styled with a normal, italic, or oblique face from its `font-family`.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/font-style\n   */\n  \"font-style\"?: FontStyleProperty | FontStyleProperty[];\n  /**\n   * The **`font-synthesis`** CSS property controls which missing typefaces, bold or italic, may be synthesized by the browser.\n   *\n   * **Initial value**: `weight style`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **34**  | **9**  |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/font-synthesis\n   */\n  \"font-synthesis\"?: FontSynthesisProperty | FontSynthesisProperty[];\n  /**\n   * The **font-variant** CSS property is a shorthand for the longhand properties `font-variant-caps`, `font-variant-numeric`, `font-variant-alternates`, `font-variant-ligatures`, and `font-variant-east-asian`. You can also set the CSS Level 2 (Revision 1) values of `font-variant`, (that is, `normal` or `small-caps`), by using the `font` shorthand.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/font-variant\n   */\n  \"font-variant\"?: FontVariantProperty | FontVariantProperty[];\n  /**\n   * The **`font-variant-caps`** CSS property controls the use of alternate glyphs for capital letters.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **52** | **34**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/font-variant-caps\n   */\n  \"font-variant-caps\"?: FontVariantCapsProperty | FontVariantCapsProperty[];\n  /**\n   * The **`font-variant-east-asian`** CSS property controls the use of alternate glyphs for East Asian scripts, like Japanese and Chinese.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **63** | **34**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/font-variant-east-asian\n   */\n  \"font-variant-east-asian\"?: FontVariantEastAsianProperty | FontVariantEastAsianProperty[];\n  /**\n   * The **`font-variant-ligatures`** CSS property controls which ligatures and contextual forms are used in textual content of the elements it applies to. This leads to more harmonized forms in the resulting text.\n   *\n   * **Initial value**: `normal`\n   *\n   * |  Chrome  | Firefox | Safari  | Edge | IE  |\n   * | :------: | :-----: | :-----: | :--: | :-: |\n   * |  **34**  | **34**  | **9.1** |  No  | No  |\n   * | 31 _-x-_ |         | 7 _-x-_ |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/font-variant-ligatures\n   */\n  \"font-variant-ligatures\"?: FontVariantLigaturesProperty | FontVariantLigaturesProperty[];\n  /**\n   * The **`font-variant-numeric`** CSS property controls the usage of alternate glyphs for numbers, fractions, and ordinal markers.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari  | Edge | IE  |\n   * | :----: | :-----: | :-----: | :--: | :-: |\n   * | **52** | **34**  | **9.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/font-variant-numeric\n   */\n  \"font-variant-numeric\"?: FontVariantNumericProperty | FontVariantNumericProperty[];\n  /**\n   * The **`font-variant-position`** CSS property controls the use of alternate, smaller glyphs that are positioned as superscript or subscript.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **34**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/font-variant-position\n   */\n  \"font-variant-position\"?: FontVariantPositionProperty | FontVariantPositionProperty[];\n  /**\n   * The **`font-variation-settings`** CSS property provides low-level control over variable font characteristics, by specifying the four letter axis names of the characteristics you want to vary, along with their values.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari |  Edge  | IE  |\n   * | :----: | :-----: | :----: | :----: | :-: |\n   * | **62** | **62**  | **11** | **17** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/font-variation-settings\n   */\n  \"font-variation-settings\"?: FontVariationSettingsProperty | FontVariationSettingsProperty[];\n  /**\n   * The **`font-weight`** CSS property specifies the weight (or boldness) of the font. The font weights available to you will depend on the `font-family` you are using. Some fonts are only available in `normal` and `bold`.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **2**  |  **1**  | **1**  | **12** | **3** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/font-weight\n   */\n  \"font-weight\"?: FontWeightProperty | FontWeightProperty[];\n  /**\n   * The **`grid-auto-columns`** CSS property specifies the size of an implicitly-created grid column track.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox |  Safari  |          Edge           |             IE              |\n   * | :----: | :-----: | :------: | :---------------------: | :-------------------------: |\n   * | **57** | **70**  | **10.1** |         **16**          | **10** _(-ms-grid-columns)_ |\n   * |        |         |          | 12 _(-ms-grid-columns)_ |                             |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/grid-auto-columns\n   */\n  \"grid-auto-columns\"?: GridAutoColumnsProperty<TLength> | GridAutoColumnsProperty<TLength>[];\n  /**\n   * The **`grid-auto-flow`** CSS property controls how the auto-placement algorithm works, specifying exactly how auto-placed items get flowed into the grid.\n   *\n   * **Initial value**: `row`\n   *\n   * | Chrome | Firefox |  Safari  |  Edge  | IE  |\n   * | :----: | :-----: | :------: | :----: | :-: |\n   * | **57** | **52**  | **10.1** | **16** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/grid-auto-flow\n   */\n  \"grid-auto-flow\"?: GridAutoFlowProperty | GridAutoFlowProperty[];\n  /**\n   * The **`grid-auto-rows`** CSS property specifies the size of an implicitly-created grid row track.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox |  Safari  |         Edge         |            IE            |\n   * | :----: | :-----: | :------: | :------------------: | :----------------------: |\n   * | **57** | **70**  | **10.1** |        **16**        | **10** _(-ms-grid-rows)_ |\n   * |        |         |          | 12 _(-ms-grid-rows)_ |                          |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/grid-auto-rows\n   */\n  \"grid-auto-rows\"?: GridAutoRowsProperty<TLength> | GridAutoRowsProperty<TLength>[];\n  /**\n   * The **`grid-column-end`** CSS property specifies a grid item’s end position within the grid column by contributing a line, a span, or nothing (automatic) to its grid placement, thereby specifying the block-end edge of its grid area.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox |  Safari  |  Edge  | IE  |\n   * | :----: | :-----: | :------: | :----: | :-: |\n   * | **57** | **52**  | **10.1** | **16** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/grid-column-end\n   */\n  \"grid-column-end\"?: GridColumnEndProperty | GridColumnEndProperty[];\n  /**\n   * The **`grid-column-start`** CSS property specifies a grid item’s start position within the grid column by contributing a line, a span, or nothing (automatic) to its grid placement. This start position defines the block-start edge of the grid area.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox |  Safari  |  Edge  | IE  |\n   * | :----: | :-----: | :------: | :----: | :-: |\n   * | **57** | **52**  | **10.1** | **16** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/grid-column-start\n   */\n  \"grid-column-start\"?: GridColumnStartProperty | GridColumnStartProperty[];\n  /**\n   * The **`grid-row-end`** CSS property specifies a grid item’s end position within the grid row by contributing a line, a span, or nothing (automatic) to its grid placement, thereby specifying the inline-end edge of its grid area.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox |  Safari  |  Edge  | IE  |\n   * | :----: | :-----: | :------: | :----: | :-: |\n   * | **57** | **52**  | **10.1** | **16** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/grid-row-end\n   */\n  \"grid-row-end\"?: GridRowEndProperty | GridRowEndProperty[];\n  /**\n   * The **`grid-row-start`** CSS property specifies a grid item’s start position within the grid row by contributing a line, a span, or nothing (automatic) to its grid placement, thereby specifying the inline-start edge of its grid area.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox |  Safari  |  Edge  | IE  |\n   * | :----: | :-----: | :------: | :----: | :-: |\n   * | **57** | **52**  | **10.1** | **16** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/grid-row-start\n   */\n  \"grid-row-start\"?: GridRowStartProperty | GridRowStartProperty[];\n  /**\n   * The **`grid-template-areas`** CSS property specifies named grid areas.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox |  Safari  |  Edge  | IE  |\n   * | :----: | :-----: | :------: | :----: | :-: |\n   * | **57** | **52**  | **10.1** | **16** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/grid-template-areas\n   */\n  \"grid-template-areas\"?: GridTemplateAreasProperty | GridTemplateAreasProperty[];\n  /**\n   * The **`grid-template-columns`** CSS property defines the line names and track sizing functions of the grid columns.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox |  Safari  |  Edge  | IE  |\n   * | :----: | :-----: | :------: | :----: | :-: |\n   * | **57** | **52**  | **10.1** | **16** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/grid-template-columns\n   */\n  \"grid-template-columns\"?: GridTemplateColumnsProperty<TLength> | GridTemplateColumnsProperty<TLength>[];\n  /**\n   * The **`grid-template-rows`** CSS property defines the line names and track sizing functions of the grid rows.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox |  Safari  |  Edge  | IE  |\n   * | :----: | :-----: | :------: | :----: | :-: |\n   * | **57** | **52**  | **10.1** | **16** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/grid-template-rows\n   */\n  \"grid-template-rows\"?: GridTemplateRowsProperty<TLength> | GridTemplateRowsProperty<TLength>[];\n  /**\n   * The **`hanging-punctuation`** CSS property specifies whether a punctuation mark should hang at the start or end of a line of text. Hanging punctuation may be placed outside the line box.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   |   No    | **10** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/hanging-punctuation\n   */\n  \"hanging-punctuation\"?: HangingPunctuationProperty | HangingPunctuationProperty[];\n  /**\n   * The **`height`** CSS property specifies the height of an element. By default, the property defines the height of the content area. If `box-sizing` is set to `border-box`, however, it instead determines the height of the border area.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/height\n   */\n  height?: HeightProperty<TLength> | HeightProperty<TLength>[];\n  /**\n   * The **`hyphens`** CSS property specifies how words should be hyphenated when text wraps across multiple lines. You can prevent hyphenation entirely, use hyphenation in manually-specified points within the text, or let the browser automatically insert hyphens where appropriate.\n   *\n   * **Initial value**: `manual`\n   *\n   * |  Chrome  | Firefox |    Safari     |     Edge     |      IE      |\n   * | :------: | :-----: | :-----------: | :----------: | :----------: |\n   * |  **55**  | **43**  | **5.1** _-x-_ | **12** _-x-_ | **10** _-x-_ |\n   * | 13 _-x-_ | 6 _-x-_ |               |              |              |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/hyphens\n   */\n  hyphens?: HyphensProperty | HyphensProperty[];\n  /**\n   * The **`image-orientation`** CSS property specifies a layout-independent correction to the orientation of an image. It should _not_ be used for any other orientation adjustments; instead, the `transform` property should be used with the `rotate` `<transform-function>`.\n   *\n   * **Initial value**: `0deg`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **26**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/image-orientation\n   */\n  \"image-orientation\"?: ImageOrientationProperty | ImageOrientationProperty[];\n  /**\n   * The **`image-rendering`** CSS property sets an image scaling algorithm. The property applies to an element itself, to any images set in its other properties, and to its descendants.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **13** | **3.6** | **6**  |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/image-rendering\n   */\n  \"image-rendering\"?: ImageRenderingProperty | ImageRenderingProperty[];\n  /** **Initial value**: `1dppx` */\n  \"image-resolution\"?: ImageResolutionProperty | ImageResolutionProperty[];\n  /**\n   * The `initial-letter` CSS property sets styling for dropped, raised, and sunken initial letters.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   |   No    | **9**  |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/initial-letter\n   */\n  \"initial-letter\"?: InitialLetterProperty | InitialLetterProperty[];\n  /**\n   * The **`inline-size`** CSS property defines the horizontal or vertical size of an element's block, depending on its writing mode. It corresponds to either the `width` or the `height` property, depending on the value of `writing-mode`.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **57** | **41**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/inline-size\n   */\n  \"inline-size\"?: InlineSizeProperty<TLength> | InlineSizeProperty<TLength>[];\n  /**\n   * The **`inset`** CSS property defines the logical block and inline start and end offsets of an element, which map to physical offsets depending on the element's writing mode, directionality, and text orientation. It corresponds to the `top` and `bottom`, or `right` and `left` properties depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **66**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/inset\n   */\n  inset?: InsetProperty<TLength> | InsetProperty<TLength>[];\n  /**\n   * The **`inset-block`** CSS property defines the logical block start and end offsets of an element, which maps to physical offsets depending on the element's writing mode, directionality, and text orientation. It corresponds to the `top` and `bottom`, or `right` and `left` properties depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |  n/a   | **63**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/inset-block\n   */\n  \"inset-block\"?: InsetBlockProperty<TLength> | InsetBlockProperty<TLength>[];\n  /**\n   * The **`inset-block-end`** CSS property defines the logical block end offset of an element, which maps to a physical inset depending on the element's writing mode, directionality, and text orientation. It corresponds to the `top`, `right`, `bottom`, or `left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |  n/a   | **63**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/inset-block-end\n   */\n  \"inset-block-end\"?: InsetBlockEndProperty<TLength> | InsetBlockEndProperty<TLength>[];\n  /**\n   * The **`inset-block-start`** CSS property defines the logical block start offset of an element, which maps to a physical inset depending on the element's writing mode, directionality, and text orientation. It corresponds to the `top`, `right`, `bottom`, or `left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |  n/a   | **63**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/inset-block-start\n   */\n  \"inset-block-start\"?: InsetBlockStartProperty<TLength> | InsetBlockStartProperty<TLength>[];\n  /**\n   * The **`inset-inline`** CSS property defines the logical block start and end offsets of an element, which maps to physical offsets depending on the element's writing mode, directionality, and text orientation. It corresponds to the `top` and `bottom`, or `right` and `left` properties depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |  n/a   | **63**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/inset-inline\n   */\n  \"inset-inline\"?: InsetInlineProperty<TLength> | InsetInlineProperty<TLength>[];\n  /**\n   * The **`inset-inline-end`** CSS property defines the logical inline end inset of an element, which maps to a physical inset depending on the element's writing mode, directionality, and text orientation. It corresponds to the `top`, `right`, `bottom`, or `left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |  n/a   | **63**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/inset-inline-end\n   */\n  \"inset-inline-end\"?: InsetInlineEndProperty<TLength> | InsetInlineEndProperty<TLength>[];\n  /**\n   * The **`inset-inline-start`** CSS property defines the logical inline start inset of an element, which maps to a physical offset depending on the element's writing mode, directionality, and text orientation. It corresponds to the `top`, `right`, `bottom`, or `left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |  n/a   | **63**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/inset-inline-start\n   */\n  \"inset-inline-start\"?: InsetInlineStartProperty<TLength> | InsetInlineStartProperty<TLength>[];\n  /**\n   * The **`isolation`** CSS property determines whether an element must create a new stacking context.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **41** | **36**  | **8**  |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/isolation\n   */\n  isolation?: IsolationProperty | IsolationProperty[];\n  /**\n   * The CSS **`justify-content`** property defines how the browser distributes space between and around content items along the main-axis of a flex container, and the inline axis of a grid container.\n   *\n   * **Initial value**: `normal`\n   *\n   * ---\n   *\n   * _Supported in Flex Layout_\n   *\n   * |  Chrome  | Firefox |  Safari   |  Edge  |   IE   |\n   * | :------: | :-----: | :-------: | :----: | :----: |\n   * |  **52**  | **20**  |   **9**   | **12** | **11** |\n   * | 21 _-x-_ |         | 6.1 _-x-_ |        |        |\n   *\n   * ---\n   *\n   * _Supported in Grid Layout_\n   *\n   * | Chrome | Firefox |  Safari  |  Edge  | IE  |\n   * | :----: | :-----: | :------: | :----: | :-: |\n   * | **57** | **52**  | **10.1** | **16** | No  |\n   *\n   * ---\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/justify-content\n   */\n  \"justify-content\"?: JustifyContentProperty | JustifyContentProperty[];\n  /**\n   * The CSS **`justify-items`** property defines the default `justify-self` for all items of the box, giving them all a default way of justifying each box along the appropriate axis.\n   *\n   * **Initial value**: `legacy`\n   *\n   * ---\n   *\n   * _Supported in Flex Layout_\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE   |\n   * | :----: | :-----: | :----: | :----: | :----: |\n   * | **52** | **20**  | **9**  | **12** | **11** |\n   *\n   * ---\n   *\n   * _Supported in Grid Layout_\n   *\n   * | Chrome | Firefox |  Safari  |  Edge  | IE  |\n   * | :----: | :-----: | :------: | :----: | :-: |\n   * | **57** | **45**  | **10.1** | **16** | No  |\n   *\n   * ---\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/justify-items\n   */\n  \"justify-items\"?: JustifyItemsProperty | JustifyItemsProperty[];\n  /**\n   * The CSS **`justify-self`** property set the way a box is justified inside its alignment container along the appropriate axis.\n   *\n   * **Initial value**: `auto`\n   *\n   * ---\n   *\n   * _Supported in Flex Layout_\n   *\n   * | Chrome | Firefox |  Safari  |  Edge  | IE  |\n   * | :----: | :-----: | :------: | :----: | :-: |\n   * | **57** | **45**  | **10.1** | **16** | No  |\n   *\n   * ---\n   *\n   * _Supported in Grid Layout_\n   *\n   * | Chrome | Firefox |  Safari  |  Edge  | IE  |\n   * | :----: | :-----: | :------: | :----: | :-: |\n   * | **57** | **45**  | **10.1** | **16** | No  |\n   *\n   * ---\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/justify-self\n   */\n  \"justify-self\"?: JustifySelfProperty | JustifySelfProperty[];\n  /**\n   * The **`left`** CSS property participates in specifying the horizontal position of a _positioned element_. It has no effect on non-positioned elements.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE    |\n   * | :----: | :-----: | :----: | :----: | :-----: |\n   * | **1**  |  **1**  | **1**  | **12** | **5.5** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/left\n   */\n  left?: LeftProperty<TLength> | LeftProperty<TLength>[];\n  /**\n   * The **`letter-spacing`** CSS property sets the spacing behavior between text characters.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/letter-spacing\n   */\n  \"letter-spacing\"?: LetterSpacingProperty<TLength> | LetterSpacingProperty<TLength>[];\n  /**\n   * The **`line-break`** CSS property sets how to break lines of Chinese, Japanese, or Korean (CJK) text when working with punctuation and symbols.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome  | Firefox |   Safari    |  Edge  |   IE    |\n   * | :-----: | :-----: | :---------: | :----: | :-----: |\n   * | **58**  | **69**  | **3** _-x-_ | **14** | **5.5** |\n   * | 1 _-x-_ |         |             |        |         |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/line-break\n   */\n  \"line-break\"?: LineBreakProperty | LineBreakProperty[];\n  /**\n   * The **`line-height`** CSS property sets the amount of space used for lines, such as in text. On block-level elements, it specifies the minimum height of line boxes within the element. On non-replaced inline elements, it specifies the height that is used to calculate line box height.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/line-height\n   */\n  \"line-height\"?: LineHeightProperty<TLength> | LineHeightProperty<TLength>[];\n  /**\n   * The **`line-height-step`** CSS property sets the step unit for line box heights. When the property is set, line box heights are rounded up to the closest multiple of the unit.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |  n/a   |   No    |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/line-height-step\n   */\n  \"line-height-step\"?: LineHeightStepProperty<TLength> | LineHeightStepProperty<TLength>[];\n  /**\n   * The **`list-style-image`** CSS property sets an image to be used as the list item marker.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/list-style-image\n   */\n  \"list-style-image\"?: ListStyleImageProperty | ListStyleImageProperty[];\n  /**\n   * The **`list-style-position`** CSS property sets the position of the `::marker` relative to a list item.\n   *\n   * **Initial value**: `outside`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/list-style-position\n   */\n  \"list-style-position\"?: ListStylePositionProperty | ListStylePositionProperty[];\n  /**\n   * The **`list-style-type`** CSS property sets the marker (such as a disc, character, or custom counter style) of a list item element.\n   *\n   * **Initial value**: `disc`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/list-style-type\n   */\n  \"list-style-type\"?: ListStyleTypeProperty | ListStyleTypeProperty[];\n  /**\n   * The **`margin-block`** CSS property defines the logical block start and end margins of an element, which maps to physical margins depending on the element's writing mode, directionality, and text orientation.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **66**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/margin-block\n   */\n  \"margin-block\"?: MarginBlockProperty<TLength> | MarginBlockProperty<TLength>[];\n  /**\n   * The **`margin-block-end`** CSS property defines the logical block end margin of an element, which maps to a physical margin depending on the element's writing mode, directionality, and text orientation.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **69** | **41**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/margin-block-end\n   */\n  \"margin-block-end\"?: MarginBlockEndProperty<TLength> | MarginBlockEndProperty<TLength>[];\n  /**\n   * The **`margin-block-start`** CSS property defines the logical block start margin of an element, which maps to a physical margin depending on the element's writing mode, directionality, and text orientation.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **69** | **41**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/margin-block-start\n   */\n  \"margin-block-start\"?: MarginBlockStartProperty<TLength> | MarginBlockStartProperty<TLength>[];\n  /**\n   * The **`margin-bottom`** CSS property sets the margin area on the bottom of an element. A positive value places it farther from its neighbors, while a negative value places it closer.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **3** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/margin-bottom\n   */\n  \"margin-bottom\"?: MarginBottomProperty<TLength> | MarginBottomProperty<TLength>[];\n  /**\n   * The **`margin-inline`** CSS property defines the logical inline start and end margins of an element, which maps to physical margins depending on the element's writing mode, directionality, and text orientation.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **66**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/margin-inline\n   */\n  \"margin-inline\"?: MarginInlineProperty<TLength> | MarginInlineProperty<TLength>[];\n  /**\n   * The **`margin-inline-end`** CSS property defines the logical inline end margin of an element, which maps to a physical margin depending on the element's writing mode, directionality, and text orientation. In other words, it corresponds to the `margin-top`, `margin-right`, `margin-bottom` or `margin-left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `0`\n   *\n   * |          Chrome          |        Firefox        |          Safari          | Edge | IE  |\n   * | :----------------------: | :-------------------: | :----------------------: | :--: | :-: |\n   * |          **69**          |        **41**         |         **12.1**         |  No  | No  |\n   * | 2 _(-webkit-margin-end)_ | 3 _(-moz-margin-end)_ | 3 _(-webkit-margin-end)_ |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/margin-inline-end\n   */\n  \"margin-inline-end\"?: MarginInlineEndProperty<TLength> | MarginInlineEndProperty<TLength>[];\n  /**\n   * The **`margin-inline-start`** CSS property defines the logical inline start margin of an element, which maps to a physical margin depending on the element's writing mode, directionality, and text orientation. It corresponds to the `margin-top`, `margin-right`, `margin-bottom`, or `margin-left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `0`\n   *\n   * |           Chrome           |         Firefox         |           Safari           | Edge | IE  |\n   * | :------------------------: | :---------------------: | :------------------------: | :--: | :-: |\n   * |           **69**           |         **41**          |          **12.1**          |  No  | No  |\n   * | 2 _(-webkit-margin-start)_ | 3 _(-moz-margin-start)_ | 3 _(-webkit-margin-start)_ |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/margin-inline-start\n   */\n  \"margin-inline-start\"?: MarginInlineStartProperty<TLength> | MarginInlineStartProperty<TLength>[];\n  /**\n   * The **`margin-left`** CSS property sets the margin area on the left side of an element. A positive value places it farther from its neighbors, while a negative value places it closer.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **3** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/margin-left\n   */\n  \"margin-left\"?: MarginLeftProperty<TLength> | MarginLeftProperty<TLength>[];\n  /**\n   * The **`margin-right`** CSS property sets the margin area on the right side of an element. A positive value places it farther from its neighbors, while a negative value places it closer.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **3** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/margin-right\n   */\n  \"margin-right\"?: MarginRightProperty<TLength> | MarginRightProperty<TLength>[];\n  /**\n   * The **`margin-top`** CSS property sets the margin area on the top of an element. A positive value places it farther from its neighbors, while a negative value places it closer.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **3** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/margin-top\n   */\n  \"margin-top\"?: MarginTopProperty<TLength> | MarginTopProperty<TLength>[];\n  /**\n   * The **`mask-border-mode`** CSS property specifies the blending mode used in a mask border.\n   *\n   * **Initial value**: `alpha`\n   */\n  \"mask-border-mode\"?: MaskBorderModeProperty | MaskBorderModeProperty[];\n  /**\n   * The **`mask-border-outset`** CSS property specifies the distance by which an element's mask border is set out from its border box.\n   *\n   * **Initial value**: `0`\n   */\n  \"mask-border-outset\"?: MaskBorderOutsetProperty<TLength> | MaskBorderOutsetProperty<TLength>[];\n  /**\n   * The **`mask-border-repeat`** CSS property sets how the edge regions of a source image are adjusted to fit the dimensions of an element's mask border.\n   *\n   * **Initial value**: `stretch`\n   */\n  \"mask-border-repeat\"?: MaskBorderRepeatProperty | MaskBorderRepeatProperty[];\n  /**\n   * The **`mask-border-slice`** CSS property divides the image set by `mask-border-source` into regions. These regions are used to form the components of an element's mask border.\n   *\n   * **Initial value**: `0`\n   */\n  \"mask-border-slice\"?: MaskBorderSliceProperty | MaskBorderSliceProperty[];\n  /**\n   * The **`mask-border-source`** CSS property sets the source image used to create an element's mask border.\n   *\n   * **Initial value**: `none`\n   */\n  \"mask-border-source\"?: MaskBorderSourceProperty | MaskBorderSourceProperty[];\n  /**\n   * The **`mask-border-width`** CSS property sets the width of an element's mask border.\n   *\n   * **Initial value**: `auto`\n   */\n  \"mask-border-width\"?: MaskBorderWidthProperty<TLength> | MaskBorderWidthProperty<TLength>[];\n  /**\n   * The **`mask-clip`** CSS property determines the area, which is affected by a mask. The painted content of an element must be restricted to this area.\n   *\n   * **Initial value**: `border-box`\n   *\n   * |   Chrome    | Firefox |   Safari    | Edge | IE  |\n   * | :---------: | :-----: | :---------: | :--: | :-: |\n   * | **1** _-x-_ | **53**  | **4** _-x-_ |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/mask-clip\n   */\n  \"mask-clip\"?: MaskClipProperty | MaskClipProperty[];\n  /**\n   * The **`mask-composite`** CSS property represents a compositing operation used on the current mask layer with the mask layers below it.\n   *\n   * **Initial value**: `add`\n   *\n   * | Chrome | Firefox | Safari |  Edge  | IE  |\n   * | :----: | :-----: | :----: | :----: | :-: |\n   * |   No   | **53**  |   No   | **18** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/mask-composite\n   */\n  \"mask-composite\"?: MaskCompositeProperty | MaskCompositeProperty[];\n  /**\n   * The **`mask-image`** CSS property sets the image that is used as mask layer for an element.\n   *\n   * **Initial value**: `none`\n   *\n   * |   Chrome    | Firefox |   Safari    |  Edge  | IE  |\n   * | :---------: | :-----: | :---------: | :----: | :-: |\n   * | **1** _-x-_ | **53**  | **4** _-x-_ | **16** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/mask-image\n   */\n  \"mask-image\"?: MaskImageProperty | MaskImageProperty[];\n  /**\n   * The **`mask-mode`** CSS property sets whether the mask reference defined by `mask-image` is treated as a luminance or alpha mask.\n   *\n   * **Initial value**: `match-source`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **53**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/mask-mode\n   */\n  \"mask-mode\"?: MaskModeProperty | MaskModeProperty[];\n  /**\n   * The **`mask-origin`** CSS property sets the origin of a mask.\n   *\n   * **Initial value**: `border-box`\n   *\n   * |   Chrome    | Firefox |   Safari    | Edge | IE  |\n   * | :---------: | :-----: | :---------: | :--: | :-: |\n   * | **1** _-x-_ | **53**  | **4** _-x-_ |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/mask-origin\n   */\n  \"mask-origin\"?: MaskOriginProperty | MaskOriginProperty[];\n  /**\n   * The **`mask-position`** CSS property sets the initial position, relative to the mask position layer set by `mask-origin`, for each defined mask image.\n   *\n   * **Initial value**: `center`\n   *\n   * |   Chrome    | Firefox |    Safari     |  Edge  | IE  |\n   * | :---------: | :-----: | :-----------: | :----: | :-: |\n   * | **1** _-x-_ | **53**  | **3.2** _-x-_ | **18** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/mask-position\n   */\n  \"mask-position\"?: MaskPositionProperty<TLength> | MaskPositionProperty<TLength>[];\n  /**\n   * The **`mask-repeat`** CSS property sets how mask images are repeated. A mask image can be repeated along the horizontal axis, the vertical axis, both axes, or not repeated at all.\n   *\n   * **Initial value**: `no-repeat`\n   *\n   * |   Chrome    | Firefox |    Safari     |  Edge  | IE  |\n   * | :---------: | :-----: | :-----------: | :----: | :-: |\n   * | **1** _-x-_ | **53**  | **3.2** _-x-_ | **18** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/mask-repeat\n   */\n  \"mask-repeat\"?: MaskRepeatProperty | MaskRepeatProperty[];\n  /**\n   * The **`mask-size`** CSS property specifies the sizes of the mask images. The size of the image can be fully or partially constrained in order to preserve its intrinsic ratio.\n   *\n   * **Initial value**: `auto`\n   *\n   * |   Chrome    | Firefox |   Safari    |  Edge  | IE  |\n   * | :---------: | :-----: | :---------: | :----: | :-: |\n   * | **4** _-x-_ | **53**  | **4** _-x-_ | **18** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/mask-size\n   */\n  \"mask-size\"?: MaskSizeProperty<TLength> | MaskSizeProperty<TLength>[];\n  /**\n   * The **`mask-type`** CSS property sets whether an SVG `<mask>` element is used as a _luminance_ or an _alpha_ mask. It applies to the `<mask>` element itself.\n   *\n   * **Initial value**: `luminance`\n   *\n   * | Chrome | Firefox | Safari  | Edge | IE  |\n   * | :----: | :-----: | :-----: | :--: | :-: |\n   * | **24** | **35**  | **6.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/mask-type\n   */\n  \"mask-type\"?: MaskTypeProperty | MaskTypeProperty[];\n  /**\n   * The `**max-block-size**` CSS property specifies the maximum size of an element in the direction opposite that of the writing direction as specified by `writing-mode`. That is, if the writing direction is horizontal, then `max-block-size` is equivalent to `max-height`; if the writing direction is vertical, `max-block-size` is the same as `max-width`.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **57** | **41**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/max-block-size\n   */\n  \"max-block-size\"?: MaxBlockSizeProperty<TLength> | MaxBlockSizeProperty<TLength>[];\n  /**\n   * The **`max-height`** CSS property sets the maximum height of an element. It prevents the used value of the `height` property from becoming larger than the value specified for `max-height`.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari  |  Edge  |  IE   |\n   * | :----: | :-----: | :-----: | :----: | :---: |\n   * | **18** |  **1**  | **1.3** | **12** | **7** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/max-height\n   */\n  \"max-height\"?: MaxHeightProperty<TLength> | MaxHeightProperty<TLength>[];\n  /**\n   * The **`max-inline-size`** CSS property defines the horizontal or vertical maximum size of an element's block depending on its writing mode. It corresponds to the `max-width` or the `max-height` property depending on the value defined for `writing-mode`. If the writing mode is vertically oriented, the value of `max-inline-size` relates to the maximal height of the element, otherwise it relates to the maximal width of the element. It relates to `max-block-size`, which defines the other dimension of the element.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox |   Safari   | Edge | IE  |\n   * | :----: | :-----: | :--------: | :--: | :-: |\n   * | **57** | **41**  |  **12.1**  |  No  | No  |\n   * |        |         | 10.1 _-x-_ |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/max-inline-size\n   */\n  \"max-inline-size\"?: MaxInlineSizeProperty<TLength> | MaxInlineSizeProperty<TLength>[];\n  /** **Initial value**: `none` */\n  \"max-lines\"?: MaxLinesProperty | MaxLinesProperty[];\n  /**\n   * The **`max-width`** CSS property sets the maximum width of an element. It prevents the used value of the `width` property from becoming larger than the value specified by `max-width`.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **7** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/max-width\n   */\n  \"max-width\"?: MaxWidthProperty<TLength> | MaxWidthProperty<TLength>[];\n  /**\n   * The **`min-block-size`** CSS property defines the minimum horizontal or vertical size of an element's block, depending on its writing mode. It corresponds to either the `min-width` or the `min-height` property, depending on the value of `writing-mode`.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **57** | **41**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/min-block-size\n   */\n  \"min-block-size\"?: MinBlockSizeProperty<TLength> | MinBlockSizeProperty<TLength>[];\n  /**\n   * The **`min-height`** CSS property sets the minimum height of an element. It prevents the used value of the `height` property from becoming smaller than the value specified for `min-height`.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari  |  Edge  |  IE   |\n   * | :----: | :-----: | :-----: | :----: | :---: |\n   * | **1**  |  **3**  | **1.3** | **12** | **7** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/min-height\n   */\n  \"min-height\"?: MinHeightProperty<TLength> | MinHeightProperty<TLength>[];\n  /**\n   * The **`min-inline-size`** CSS property defines the horizontal or vertical minimal size of an element's block, depending on its writing mode. It corresponds to either the `min-width` or the `min-height` property, depending on the value of `writing-mode`.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **57** | **41**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/min-inline-size\n   */\n  \"min-inline-size\"?: MinInlineSizeProperty<TLength> | MinInlineSizeProperty<TLength>[];\n  /**\n   * The **`min-width`** CSS property sets the minimum width of an element. It prevents the used value of the `width` property from becoming smaller than the value specified for `min-width`.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **7** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/min-width\n   */\n  \"min-width\"?: MinWidthProperty<TLength> | MinWidthProperty<TLength>[];\n  /**\n   * The **`mix-blend-mode`** CSS property sets how an element's content should blend with the content of the element's parent and the element's background.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **41** | **32**  | **8**  |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/mix-blend-mode\n   */\n  \"mix-blend-mode\"?: MixBlendModeProperty | MixBlendModeProperty[];\n  /**\n   * The **`offset-distance`** CSS property specifies a position along an `offset-path`.\n   *\n   * **Initial value**: `0`\n   *\n   * |         Chrome         | Firefox | Safari | Edge | IE  |\n   * | :--------------------: | :-----: | :----: | :--: | :-: |\n   * |         **55**         | **72**  |   No   |  No  | No  |\n   * | 46 _(motion-distance)_ |         |        |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/offset-distance\n   */\n  \"motion-distance\"?: OffsetDistanceProperty<TLength> | OffsetDistanceProperty<TLength>[];\n  /**\n   * The **`offset-path`** CSS property specifies a motion path for an element to follow and defines the element's positioning within the parent container or SVG coordinate system.\n   *\n   * **Initial value**: `none`\n   *\n   * |       Chrome       | Firefox | Safari | Edge | IE  |\n   * | :----------------: | :-----: | :----: | :--: | :-: |\n   * |       **55**       | **72**  |   No   |  No  | No  |\n   * | 46 _(motion-path)_ |         |        |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/offset-path\n   */\n  \"motion-path\"?: OffsetPathProperty | OffsetPathProperty[];\n  /**\n   * The **`offset-rotate`** CSS property defines the direction of the element while positioning along the offset path.\n   *\n   * **Initial value**: `auto`\n   *\n   * |         Chrome         | Firefox | Safari | Edge | IE  |\n   * | :--------------------: | :-----: | :----: | :--: | :-: |\n   * |         **56**         | **72**  |   No   |  No  | No  |\n   * | 46 _(motion-rotation)_ |         |        |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/offset-rotate\n   */\n  \"motion-rotation\"?: OffsetRotateProperty | OffsetRotateProperty[];\n  /**\n   * The **`object-fit`** CSS property sets how the content of a replaced element, such as an `<img>` or `<video>`, should be resized to fit its container.\n   *\n   * **Initial value**: `fill`\n   *\n   * | Chrome | Firefox | Safari |  Edge  | IE  |\n   * | :----: | :-----: | :----: | :----: | :-: |\n   * | **31** | **36**  | **10** | **16** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/object-fit\n   */\n  \"object-fit\"?: ObjectFitProperty | ObjectFitProperty[];\n  /**\n   * The **`object-position`** CSS property specifies the alignment of the selected replaced element's contents within the element's box. Areas of the box which aren't covered by the replaced element's object will show the element's background.\n   *\n   * **Initial value**: `50% 50%`\n   *\n   * | Chrome | Firefox | Safari |  Edge  | IE  |\n   * | :----: | :-----: | :----: | :----: | :-: |\n   * | **31** | **36**  | **10** | **16** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/object-position\n   */\n  \"object-position\"?: ObjectPositionProperty<TLength> | ObjectPositionProperty<TLength>[];\n  /**\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **79** | **72**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/offset-anchor\n   */\n  \"offset-anchor\"?: OffsetAnchorProperty<TLength> | OffsetAnchorProperty<TLength>[];\n  /**\n   * The **`offset-distance`** CSS property specifies a position along an `offset-path`.\n   *\n   * **Initial value**: `0`\n   *\n   * |         Chrome         | Firefox | Safari | Edge | IE  |\n   * | :--------------------: | :-----: | :----: | :--: | :-: |\n   * |         **55**         | **72**  |   No   |  No  | No  |\n   * | 46 _(motion-distance)_ |         |        |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/offset-distance\n   */\n  \"offset-distance\"?: OffsetDistanceProperty<TLength> | OffsetDistanceProperty<TLength>[];\n  /**\n   * The **`offset-path`** CSS property specifies a motion path for an element to follow and defines the element's positioning within the parent container or SVG coordinate system.\n   *\n   * **Initial value**: `none`\n   *\n   * |       Chrome       | Firefox | Safari | Edge | IE  |\n   * | :----------------: | :-----: | :----: | :--: | :-: |\n   * |       **55**       | **72**  |   No   |  No  | No  |\n   * | 46 _(motion-path)_ |         |        |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/offset-path\n   */\n  \"offset-path\"?: OffsetPathProperty | OffsetPathProperty[];\n  /**\n   * The **`offset-rotate`** CSS property defines the direction of the element while positioning along the offset path.\n   *\n   * **Initial value**: `auto`\n   *\n   * |         Chrome         | Firefox | Safari | Edge | IE  |\n   * | :--------------------: | :-----: | :----: | :--: | :-: |\n   * |         **56**         | **72**  |   No   |  No  | No  |\n   * | 46 _(motion-rotation)_ |         |        |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/offset-rotate\n   */\n  \"offset-rotate\"?: OffsetRotateProperty | OffsetRotateProperty[];\n  /**\n   * The **`offset-rotate`** CSS property defines the direction of the element while positioning along the offset path.\n   *\n   * **Initial value**: `auto`\n   *\n   * |         Chrome         | Firefox | Safari | Edge | IE  |\n   * | :--------------------: | :-----: | :----: | :--: | :-: |\n   * |         **56**         | **72**  |   No   |  No  | No  |\n   * | 46 _(motion-rotation)_ |         |        |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/offset-rotate\n   */\n  \"offset-rotation\"?: OffsetRotateProperty | OffsetRotateProperty[];\n  /**\n   * The **`opacity`** CSS property sets the transparency of an element or the degree to which content behind an element is visible.\n   *\n   * **Initial value**: `1.0`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **2**  | **12** | **9** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/opacity\n   */\n  opacity?: OpacityProperty | OpacityProperty[];\n  /**\n   * The **`order`** CSS property sets the order to lay out an item in a flex or grid container. Items in a container are sorted by ascending `order` value and then by their source code order.\n   *\n   * **Initial value**: `0`\n   *\n   * |  Chrome  | Firefox | Safari  |  Edge  |    IE    |\n   * | :------: | :-----: | :-----: | :----: | :------: |\n   * |  **29**  | **20**  |  **9**  | **12** |  **11**  |\n   * | 21 _-x-_ |         | 7 _-x-_ |        | 10 _-x-_ |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/order\n   */\n  order?: GlobalsNumber | GlobalsNumber[];\n  /**\n   * The **`orphans`** CSS property sets the minimum number of lines in a block container that must be shown at the _bottom_ of a page, region, or column.\n   *\n   * **Initial value**: `2`\n   *\n   * | Chrome | Firefox | Safari  |  Edge  |  IE   |\n   * | :----: | :-----: | :-----: | :----: | :---: |\n   * | **25** |   No    | **1.3** | **12** | **8** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/orphans\n   */\n  orphans?: GlobalsNumber | GlobalsNumber[];\n  /**\n   * The **`outline-color`** CSS property sets the color of an element's outline.\n   *\n   * **Initial value**: `invert`, for browsers supporting it, `currentColor` for the other\n   *\n   * | Chrome | Firefox | Safari  |  Edge  |  IE   |\n   * | :----: | :-----: | :-----: | :----: | :---: |\n   * | **1**  | **1.5** | **1.2** | **12** | **8** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/outline-color\n   */\n  \"outline-color\"?: OutlineColorProperty | OutlineColorProperty[];\n  /**\n   * The **`outline-offset`** CSS property sets the amount of space between an outline and the edge or border of an element.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari  |  Edge  | IE  |\n   * | :----: | :-----: | :-----: | :----: | :-: |\n   * | **1**  | **1.5** | **1.2** | **15** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/outline-offset\n   */\n  \"outline-offset\"?: OutlineOffsetProperty<TLength> | OutlineOffsetProperty<TLength>[];\n  /**\n   * The **`outline-style`** CSS property sets the style of an element's outline. An outline is a line that is drawn around an element, outside the `border`.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari  |  Edge  |  IE   |\n   * | :----: | :-----: | :-----: | :----: | :---: |\n   * | **1**  | **1.5** | **1.2** | **12** | **8** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/outline-style\n   */\n  \"outline-style\"?: OutlineStyleProperty | OutlineStyleProperty[];\n  /**\n   * The **`outline-width`** CSS property sets the thickness of an element's outline. An outline is a line that is drawn around an element, outside the `border`.\n   *\n   * **Initial value**: `medium`\n   *\n   * | Chrome | Firefox | Safari  |  Edge  |  IE   |\n   * | :----: | :-----: | :-----: | :----: | :---: |\n   * | **1**  | **1.5** | **1.2** | **12** | **8** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/outline-width\n   */\n  \"outline-width\"?: OutlineWidthProperty<TLength> | OutlineWidthProperty<TLength>[];\n  /**\n   * The **`overflow`** CSS property sets what to do when an element's content is too big to fit in its block formatting context. It is a shorthand for `overflow-x` and `overflow-y`.\n   *\n   * **Initial value**: `visible`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/overflow\n   */\n  overflow?: OverflowProperty | OverflowProperty[];\n  /**\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **56** | **66**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/overflow-anchor\n   */\n  \"overflow-anchor\"?: OverflowAnchorProperty | OverflowAnchorProperty[];\n  /**\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **69**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/overflow-block\n   */\n  \"overflow-block\"?: OverflowBlockProperty | OverflowBlockProperty[];\n  /**\n   * The **`overflow-clip-box`** CSS property specifies relative to which box the clipping happens when there is an overflow. It is short hand for the `overflow-clip-box-inline` and `overflow-clip-box-block` properties.\n   *\n   * **Initial value**: `padding-box`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **29**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Mozilla/CSS/overflow-clip-box\n   */\n  \"overflow-clip-box\"?: OverflowClipBoxProperty | OverflowClipBoxProperty[];\n  /**\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **69**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/overflow-inline\n   */\n  \"overflow-inline\"?: OverflowInlineProperty | OverflowInlineProperty[];\n  /**\n   * The `**overflow-wrap**` CSS property sets whether the browser should insert line breaks within words to prevent text from overflowing its content box.\n   *\n   * **Initial value**: `normal`\n   *\n   * |     Chrome      |      Firefox      |     Safari      |       Edge       |          IE           |\n   * | :-------------: | :---------------: | :-------------: | :--------------: | :-------------------: |\n   * |     **23**      |      **49**       |     **6.1**     |      **18**      | **5.5** _(word-wrap)_ |\n   * | 1 _(word-wrap)_ | 3.5 _(word-wrap)_ | 1 _(word-wrap)_ | 12 _(word-wrap)_ |                       |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/overflow-wrap\n   */\n  \"overflow-wrap\"?: OverflowWrapProperty | OverflowWrapProperty[];\n  /**\n   * The **`overflow-x`** CSS property sets what shows when content overflows a block-level element's left and right edges. This may be nothing, a scroll bar, or the overflow content.\n   *\n   * **Initial value**: `visible`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  | **3.5** | **3**  | **12** | **5** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/overflow-x\n   */\n  \"overflow-x\"?: OverflowXProperty | OverflowXProperty[];\n  /**\n   * The **`overflow-y`** CSS property sets what shows when content overflows a block-level element's top and bottom edges. This may be nothing, a scroll bar, or the overflow content.\n   *\n   * **Initial value**: `visible`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  | **1.5** | **3**  | **12** | **5** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/overflow-y\n   */\n  \"overflow-y\"?: OverflowYProperty | OverflowYProperty[];\n  /**\n   * The **`overscroll-behavior`** CSS property sets what a browser does when reaching the boundary of a scrolling area. It's a shorthand for `overscroll-behavior-x` and `overscroll-behavior-y`.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari |  Edge  | IE  |\n   * | :----: | :-----: | :----: | :----: | :-: |\n   * | **63** | **59**  |   No   | **18** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/overscroll-behavior\n   */\n  \"overscroll-behavior\"?: OverscrollBehaviorProperty | OverscrollBehaviorProperty[];\n  /**\n   * The **`overscroll-behavior-block`** CSS property sets the browser's behavior when the block direction boundary of a scrolling area is reached.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **77** | **73**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/overscroll-behavior-block\n   */\n  \"overscroll-behavior-block\"?: OverscrollBehaviorBlockProperty | OverscrollBehaviorBlockProperty[];\n  /**\n   * The **`overscroll-behavior-inline`** CSS property sets the browser's behavior when the inline direction boundary of a scrolling area is reached.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **77** | **73**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/overscroll-behavior-inline\n   */\n  \"overscroll-behavior-inline\"?: OverscrollBehaviorInlineProperty | OverscrollBehaviorInlineProperty[];\n  /**\n   * The **`overscroll-behavior-x`** CSS property sets the browser's behavior when the horizontal boundary of a scrolling area is reached.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari |  Edge  | IE  |\n   * | :----: | :-----: | :----: | :----: | :-: |\n   * | **63** | **59**  |   No   | **18** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/overscroll-behavior-x\n   */\n  \"overscroll-behavior-x\"?: OverscrollBehaviorXProperty | OverscrollBehaviorXProperty[];\n  /**\n   * The **`overscroll-behavior-y`** CSS property sets the browser's behavior when the vertical boundary of a scrolling area is reached.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari |  Edge  | IE  |\n   * | :----: | :-----: | :----: | :----: | :-: |\n   * | **63** | **59**  |   No   | **18** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/overscroll-behavior-y\n   */\n  \"overscroll-behavior-y\"?: OverscrollBehaviorYProperty | OverscrollBehaviorYProperty[];\n  /**\n   * The **`padding-block`** CSS property defines the logical block start and end padding of an element, which maps to physical padding properties depending on the element's writing mode, directionality, and text orientation.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **66**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/padding-block\n   */\n  \"padding-block\"?: PaddingBlockProperty<TLength> | PaddingBlockProperty<TLength>[];\n  /**\n   * The **`padding-block-end`** CSS property defines the logical block end padding of an element, which maps to a physical padding depending on the element's writing mode, directionality, and text orientation. It corresponds to the `padding-top`, `padding-right`, `padding-bottom`, or `padding-left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **69** | **41**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/padding-block-end\n   */\n  \"padding-block-end\"?: PaddingBlockEndProperty<TLength> | PaddingBlockEndProperty<TLength>[];\n  /**\n   * The **`padding-block-start`** CSS property defines the logical block start padding of an element, which maps to a physical padding depending on the element's writing mode, directionality, and text orientation. It corresponds to the `padding-top`, `padding-right`, `padding-bottom`, or `padding-left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **69** | **41**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/padding-block-start\n   */\n  \"padding-block-start\"?: PaddingBlockStartProperty<TLength> | PaddingBlockStartProperty<TLength>[];\n  /**\n   * The **`padding-bottom`** CSS property sets the height of the padding area on the bottom of an element.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/padding-bottom\n   */\n  \"padding-bottom\"?: PaddingBottomProperty<TLength> | PaddingBottomProperty<TLength>[];\n  /**\n   * The **`padding-inline`** CSS property defines the logical inline start and end padding of an element, which maps to physical padding properties depending on the element's writing mode, directionality, and text orientation.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **66**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/padding-inline\n   */\n  \"padding-inline\"?: PaddingInlineProperty<TLength> | PaddingInlineProperty<TLength>[];\n  /**\n   * The **`padding-inline-end`** CSS property defines the logical inline end padding of an element, which maps to a physical padding depending on the element's writing mode, directionality, and text orientation. It corresponds to the `padding-top`, `padding-right`, `padding-bottom`, or `padding-left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `0`\n   *\n   * |          Chrome           |        Firefox         |          Safari           | Edge | IE  |\n   * | :-----------------------: | :--------------------: | :-----------------------: | :--: | :-: |\n   * |          **69**           |         **41**         |         **12.1**          |  No  | No  |\n   * | 2 _(-webkit-padding-end)_ | 3 _(-moz-padding-end)_ | 3 _(-webkit-padding-end)_ |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/padding-inline-end\n   */\n  \"padding-inline-end\"?: PaddingInlineEndProperty<TLength> | PaddingInlineEndProperty<TLength>[];\n  /**\n   * The **`padding-inline-start`** CSS property defines the logical inline start padding of an element, which maps to a physical padding depending on the element's writing mode, directionality, and text orientation. It corresponds to the `padding-top`, `padding-right`, `padding-bottom`, or `padding-left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `0`\n   *\n   * |           Chrome            |         Firefox          |           Safari            | Edge | IE  |\n   * | :-------------------------: | :----------------------: | :-------------------------: | :--: | :-: |\n   * |           **69**            |          **41**          |          **12.1**           |  No  | No  |\n   * | 2 _(-webkit-padding-start)_ | 3 _(-moz-padding-start)_ | 3 _(-webkit-padding-start)_ |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/padding-inline-start\n   */\n  \"padding-inline-start\"?: PaddingInlineStartProperty<TLength> | PaddingInlineStartProperty<TLength>[];\n  /**\n   * The **`padding-left`** CSS property sets the width of the padding area on the left side of an element.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/padding-left\n   */\n  \"padding-left\"?: PaddingLeftProperty<TLength> | PaddingLeftProperty<TLength>[];\n  /**\n   * The **`padding-right`** CSS property sets the width of the padding area on the right side of an element.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/padding-right\n   */\n  \"padding-right\"?: PaddingRightProperty<TLength> | PaddingRightProperty<TLength>[];\n  /**\n   * The **`padding-top`** padding area on the top of an element.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/padding-top\n   */\n  \"padding-top\"?: PaddingTopProperty<TLength> | PaddingTopProperty<TLength>[];\n  /**\n   * The **`page-break-after`** CSS property adjusts page breaks _after_ the current element.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari  |  Edge  |  IE   |\n   * | :----: | :-----: | :-----: | :----: | :---: |\n   * | **1**  |  **1**  | **1.2** | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/page-break-after\n   */\n  \"page-break-after\"?: PageBreakAfterProperty | PageBreakAfterProperty[];\n  /**\n   * The **`page-break-before`** CSS property adjusts page breaks _before_ the current element.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari  |  Edge  |  IE   |\n   * | :----: | :-----: | :-----: | :----: | :---: |\n   * | **1**  |  **1**  | **1.2** | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/page-break-before\n   */\n  \"page-break-before\"?: PageBreakBeforeProperty | PageBreakBeforeProperty[];\n  /**\n   * The **`page-break-inside`** CSS property adjusts page breaks _inside_ the current element.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari  |  Edge  |  IE   |\n   * | :----: | :-----: | :-----: | :----: | :---: |\n   * | **1**  | **19**  | **1.3** | **12** | **8** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/page-break-inside\n   */\n  \"page-break-inside\"?: PageBreakInsideProperty | PageBreakInsideProperty[];\n  /**\n   * The **`paint-order`** CSS property lets you control the order in which the fill and stroke (and painting markers) of text content and shapes are drawn.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari |  Edge  | IE  |\n   * | :----: | :-----: | :----: | :----: | :-: |\n   * | **35** | **60**  | **8**  | **17** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/paint-order\n   */\n  \"paint-order\"?: PaintOrderProperty | PaintOrderProperty[];\n  /**\n   * The **`perspective`** CSS property determines the distance between the z=0 plane and the user in order to give a 3D-positioned element some perspective. Each 3D element with z>0 becomes larger; each 3D-element with z<0 becomes smaller. The strength of the effect is determined by the value of this property.\n   *\n   * **Initial value**: `none`\n   *\n   * |  Chrome  | Firefox  | Safari  |  Edge  |   IE   |\n   * | :------: | :------: | :-----: | :----: | :----: |\n   * |  **36**  |  **16**  |  **9**  | **12** | **10** |\n   * | 12 _-x-_ | 10 _-x-_ | 4 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/perspective\n   */\n  perspective?: PerspectiveProperty<TLength> | PerspectiveProperty<TLength>[];\n  /**\n   * The **`perspective-origin`** CSS property determines the position at which the viewer is looking. It is used as the _vanishing point_ by the `perspective` property.\n   *\n   * **Initial value**: `50% 50%`\n   *\n   * |  Chrome  | Firefox  | Safari  |  Edge  |   IE   |\n   * | :------: | :------: | :-----: | :----: | :----: |\n   * |  **36**  |  **16**  |  **9**  | **12** | **10** |\n   * | 12 _-x-_ | 10 _-x-_ | 4 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/perspective-origin\n   */\n  \"perspective-origin\"?: PerspectiveOriginProperty<TLength> | PerspectiveOriginProperty<TLength>[];\n  /**\n   * The `**place-content**` CSS property is a shorthand for `align-content` and `justify-content`. It can be used in any layout method which utilizes both of these alignment values.\n   *\n   * **Initial value**: `normal`\n   *\n   * ---\n   *\n   * _Supported in Flex Layout_\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **59** | **45**  | **9**  |  No  | No  |\n   *\n   * ---\n   *\n   * _Supported in Grid Layout_\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **59** | **53**  | **11** |  No  | No  |\n   *\n   * ---\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/place-content\n   */\n  \"place-content\"?: PlaceContentProperty | PlaceContentProperty[];\n  /**\n   * The **`pointer-events`** CSS property sets under what circumstances (if any) a particular graphic element can become the target of mouse events.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE   |\n   * | :----: | :-----: | :----: | :----: | :----: |\n   * | **1**  | **1.5** | **4**  | **12** | **11** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/pointer-events\n   */\n  \"pointer-events\"?: PointerEventsProperty | PointerEventsProperty[];\n  /**\n   * The **`position`** CSS property sets how an element is positioned in a document. The `top`, `right`, `bottom`, and `left` properties determine the final location of positioned elements.\n   *\n   * **Initial value**: `static`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/position\n   */\n  position?: PositionProperty | PositionProperty[];\n  /**\n   * The **`quotes`** CSS property sets how quotation marks appear.\n   *\n   * **Initial value**: depends on user agent\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **11** | **1.5** | **9**  | **12** | **8** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/quotes\n   */\n  quotes?: QuotesProperty | QuotesProperty[];\n  /**\n   * The **`resize`** CSS property sets whether an element is resizable, and if so, in which directions.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **1**  |  **4**  | **3**  |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/resize\n   */\n  resize?: ResizeProperty | ResizeProperty[];\n  /**\n   * The **`right`** CSS property participates in specifying the horizontal position of a _positioned element_. It has no effect on non-positioned elements.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE    |\n   * | :----: | :-----: | :----: | :----: | :-----: |\n   * | **1**  |  **1**  | **1**  | **12** | **5.5** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/right\n   */\n  right?: RightProperty<TLength> | RightProperty<TLength>[];\n  /**\n   * The **`rotate`** CSS property allows you to specify rotation transforms individually and independantly of the `transform` property. This maps better to typical user interface usage, and saves having to remember the exact order of transform functions to specify in the `transform` value.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **72**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/rotate\n   */\n  rotate?: RotateProperty | RotateProperty[];\n  /**\n   * The **`row-gap`** CSS property sets the size of the gap (gutter) between an element's grid rows.\n   *\n   * **Initial value**: `normal`\n   *\n   * ---\n   *\n   * _Supported in Flex Layout_\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **63**  |   No   |  No  | No  |\n   *\n   * ---\n   *\n   * _Supported in Grid Layout_\n   *\n   * |       Chrome        |       Firefox       |          Safari           |  Edge  | IE  |\n   * | :-----------------: | :-----------------: | :-----------------------: | :----: | :-: |\n   * |       **66**        |       **61**        | **10.1** _(grid-row-gap)_ | **16** | No  |\n   * | 57 _(grid-row-gap)_ | 52 _(grid-row-gap)_ |                           |        |     |\n   *\n   * ---\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/row-gap\n   */\n  \"row-gap\"?: RowGapProperty<TLength> | RowGapProperty<TLength>[];\n  /**\n   * The `**ruby-align**` CSS property defines the distribution of the different ruby elements over the base.\n   *\n   * **Initial value**: `space-around`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **38**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/ruby-align\n   */\n  \"ruby-align\"?: RubyAlignProperty | RubyAlignProperty[];\n  /** **Initial value**: `separate` */\n  \"ruby-merge\"?: RubyMergeProperty | RubyMergeProperty[];\n  /**\n   * The `**ruby-position**` CSS property defines the position of a ruby element relatives to its base element. It can be position over the element (`over`), under it (`under`), or between the characters, on their right side (`inter-character`).\n   *\n   * **Initial value**: `over`\n   *\n   * | Chrome | Firefox | Safari |  Edge  | IE  |\n   * | :----: | :-----: | :----: | :----: | :-: |\n   * |   No   | **38**  |   No   | **12** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/ruby-position\n   */\n  \"ruby-position\"?: RubyPositionProperty | RubyPositionProperty[];\n  /**\n   * The **`scale`** CSS property allows you to specify scale transforms individually and independantly of the `transform` property. This maps better to typical user interface usage, and saves having to remember the exact order of transform functions to specify in the `transform` value.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **72**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scale\n   */\n  scale?: ScaleProperty | ScaleProperty[];\n  /**\n   * The **`scroll-behavior`** CSS property sets the behavior for a scrolling box when scrolling is triggered by the navigation or CSSOM scrolling APIs.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **61** | **36**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-behavior\n   */\n  \"scroll-behavior\"?: ScrollBehaviorProperty | ScrollBehaviorProperty[];\n  /**\n   * The **`scroll-margin`** property is a shorthand property which sets all of the `scroll-margin` longhands, assigning values much like the `margin` property does for the `margin-*` longhands.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **68**  | **11** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-margin\n   */\n  \"scroll-margin\"?: ScrollMarginProperty<TLength> | ScrollMarginProperty<TLength>[];\n  /**\n   * The `scroll-margin-block` property is a shorthand property which sets the scroll-margin longhands in the block dimension.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **68**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-margin-block\n   */\n  \"scroll-margin-block\"?: ScrollMarginBlockProperty<TLength> | ScrollMarginBlockProperty<TLength>[];\n  /**\n   * The `scroll-margin-block-end` property defines the margin of the scroll snap area at the end of the block dimension that is used for snapping this box to the snapport. The scroll snap area is determined by taking the transformed border box, finding its rectangular bounding box (axis-aligned in the scroll container’s coordinate space), then adding the specified outsets.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **68**  | **11** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-margin-block-end\n   */\n  \"scroll-margin-block-end\"?: ScrollMarginBlockEndProperty<TLength> | ScrollMarginBlockEndProperty<TLength>[];\n  /**\n   * The `scroll-margin-block-start` property defines the margin of the scroll snap area at the start of the block dimension that is used for snapping this box to the snapport. The scroll snap area is determined by taking the transformed border box, finding its rectangular bounding box (axis-aligned in the scroll container’s coordinate space), then adding the specified outsets.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **68**  | **11** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-margin-block-start\n   */\n  \"scroll-margin-block-start\"?: ScrollMarginBlockStartProperty<TLength> | ScrollMarginBlockStartProperty<TLength>[];\n  /**\n   * The `scroll-margin-bottom` property defines the bottom margin of the scroll snap area that is used for snapping this box to the snapport. The scroll snap area is determined by taking the transformed border box, finding its rectangular bounding box (axis-aligned in the scroll container’s coordinate space), then adding the specified outsets.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **68**  | **11** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-margin-bottom\n   */\n  \"scroll-margin-bottom\"?: ScrollMarginBottomProperty<TLength> | ScrollMarginBottomProperty<TLength>[];\n  /**\n   * The `scroll-margin-inline` property is a shorthand property which sets the scroll-margin longhands in the inline dimension.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **68**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-margin-inline\n   */\n  \"scroll-margin-inline\"?: ScrollMarginInlineProperty<TLength> | ScrollMarginInlineProperty<TLength>[];\n  /**\n   * The `scroll-margin-inline-end` property defines the margin of the scroll snap area at the end of the inline dimension that is used for snapping this box to the snapport. The scroll snap area is determined by taking the transformed border box, finding its rectangular bounding box (axis-aligned in the scroll container’s coordinate space), then adding the specified outsets.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **68**  | **11** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-margin-inline-end\n   */\n  \"scroll-margin-inline-end\"?: ScrollMarginInlineEndProperty<TLength> | ScrollMarginInlineEndProperty<TLength>[];\n  /**\n   * The `scroll-margin-inline-start` property defines the margin of the scroll snap area at the start of the inline dimension that is used for snapping this box to the snapport. The scroll snap area is determined by taking the transformed border box, finding its rectangular bounding box (axis-aligned in the scroll container’s coordinate space), then adding the specified outsets.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **68**  | **11** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-margin-inline-start\n   */\n  \"scroll-margin-inline-start\"?: ScrollMarginInlineStartProperty<TLength> | ScrollMarginInlineStartProperty<TLength>[];\n  /**\n   * The `scroll-margin-left` property defines the left margin of the scroll snap area that is used for snapping this box to the snapport. The scroll snap area is determined by taking the transformed border box, finding its rectangular bounding box (axis-aligned in the scroll container’s coordinate space), then adding the specified outsets.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **68**  | **11** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-margin-left\n   */\n  \"scroll-margin-left\"?: ScrollMarginLeftProperty<TLength> | ScrollMarginLeftProperty<TLength>[];\n  /**\n   * The `scroll-margin-right` property defines the right margin of the scroll snap area that is used for snapping this box to the snapport. The scroll snap area is determined by taking the transformed border box, finding its rectangular bounding box (axis-aligned in the scroll container’s coordinate space), then adding the specified outsets.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **68**  | **11** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-margin-right\n   */\n  \"scroll-margin-right\"?: ScrollMarginRightProperty<TLength> | ScrollMarginRightProperty<TLength>[];\n  /**\n   * The `scroll-margin-top` property defines the top margin of the scroll snap area that is used for snapping this box to the snapport. The scroll snap area is determined by taking the transformed border box, finding its rectangular bounding box (axis-aligned in the scroll container’s coordinate space), then adding the specified outsets.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **68**  | **11** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-margin-top\n   */\n  \"scroll-margin-top\"?: ScrollMarginTopProperty<TLength> | ScrollMarginTopProperty<TLength>[];\n  /**\n * The scroll-padding property is a shorthand property which sets all of the scroll-padding longhands, assigning values much like the padding property does for the padding-\\* longhands.  \n  \nThe scroll-padding properties define offsets for the optimal viewing region of the scrollport: the region used as the target region for placing things in view of the user. This allows the author to exclude regions of the scrollport that are obscured by other content (such as fixed-positioned toolbars or sidebars) or simply to put more breathing room between a targetted element and the edges of the scrollport.\n * \n * **Initial value**: `auto`\n * \n * | Chrome | Firefox | Safari | Edge | IE  |\n * | :----: | :-----: | :----: | :--: | :-: |\n * | **69** | **68**  | **11** |  No  | No  |\n * \n * @see https://developer.mozilla.org/docs/Web/CSS/scroll-padding\n */\n  \"scroll-padding\"?: ScrollPaddingProperty<TLength> | ScrollPaddingProperty<TLength>[];\n  /**\n * The `scroll-padding-block` property is a shorthand property which sets the scroll-padding longhands for the block dimension.  \n  \nThe scroll-padding properties define offsets for the optimal viewing region of the scrollport: the region used as the target region for placing things in view of the user. This allows the author to exclude regions of the scrollport that are obscured by other content (such as fixed-positioned toolbars or sidebars) or simply to put more breathing room between a targetted element and the edges of the scrollport.\n * \n * **Initial value**: `auto`\n * \n * | Chrome | Firefox | Safari | Edge | IE  |\n * | :----: | :-----: | :----: | :--: | :-: |\n * | **69** | **68**  |   No   |  No  | No  |\n * \n * @see https://developer.mozilla.org/docs/Web/CSS/scroll-padding-block\n */\n  \"scroll-padding-block\"?: ScrollPaddingBlockProperty<TLength> | ScrollPaddingBlockProperty<TLength>[];\n  /**\n   * The `scroll-padding-block-end` property defines offsets for the end edge in the block dimension of the optimal viewing region of the scrollport: the region used as the target region for placing things in view of the user. This allows the author to exclude regions of the scrollport that are obscured by other content (such as fixed-positioned toolbars or sidebars) or simply to put more breathing room between a targetted element and the edges of the scrollport.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **68**  | **11** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-padding-block-end\n   */\n  \"scroll-padding-block-end\"?: ScrollPaddingBlockEndProperty<TLength> | ScrollPaddingBlockEndProperty<TLength>[];\n  /**\n   * The `scroll-padding-block-start` property defines offsets for the start edge in the block dimension of the optimal viewing region of the scrollport: the region used as the target region for placing things in view of the user. This allows the author to exclude regions of the scrollport that are obscured by other content (such as fixed-positioned toolbars or sidebars) or simply to put more breathing room between a targetted element and the edges of the scrollport.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **68**  | **11** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-padding-block-start\n   */\n  \"scroll-padding-block-start\"?: ScrollPaddingBlockStartProperty<TLength> | ScrollPaddingBlockStartProperty<TLength>[];\n  /**\n   * The `scroll-padding-bottom` property defines offsets for the bottom of the optimal viewing region of the scrollport: the region used as the target region for placing things in view of the user. This allows the author to exclude regions of the scrollport that are obscured by other content (such as fixed-positioned toolbars or sidebars) or simply to put more breathing room between a targetted element and the edges of the scrollport.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **68**  | **11** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-padding-bottom\n   */\n  \"scroll-padding-bottom\"?: ScrollPaddingBottomProperty<TLength> | ScrollPaddingBottomProperty<TLength>[];\n  /**\n * The `scroll-padding-inline` property is a shorthand property which sets the scroll-padding longhands for the inline dimension.  \n  \nThe scroll-padding properties define offsets for the optimal viewing region of the scrollport: the region used as the target region for placing things in view of the user. This allows the author to exclude regions of the scrollport that are obscured by other content (such as fixed-positioned toolbars or sidebars) or simply to put more breathing room between a targetted element and the edges of the scrollport.\n * \n * **Initial value**: `auto`\n * \n * | Chrome | Firefox | Safari | Edge | IE  |\n * | :----: | :-----: | :----: | :--: | :-: |\n * | **69** | **68**  |   No   |  No  | No  |\n * \n * @see https://developer.mozilla.org/docs/Web/CSS/scroll-padding-inline\n */\n  \"scroll-padding-inline\"?: ScrollPaddingInlineProperty<TLength> | ScrollPaddingInlineProperty<TLength>[];\n  /**\n   * The `scroll-padding-inline-end` property defines offsets for the end edge in the inline dimension of the optimal viewing region of the scrollport: the region used as the target region for placing things in view of the user. This allows the author to exclude regions of the scrollport that are obscured by other content (such as fixed-positioned toolbars or sidebars) or simply to put more breathing room between a targetted element and the edges of the scrollport.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **68**  | **11** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-padding-inline-end\n   */\n  \"scroll-padding-inline-end\"?: ScrollPaddingInlineEndProperty<TLength> | ScrollPaddingInlineEndProperty<TLength>[];\n  /**\n   * The `scroll-padding-inline-start` property defines offsets for the start edge in the inline dimension of the optimal viewing region of the scrollport: the region used as the target region for placing things in view of the user. This allows the author to exclude regions of the scrollport that are obscured by other content (such as fixed-positioned toolbars or sidebars) or simply to put more breathing room between a targetted element and the edges of the scrollport.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **68**  | **11** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-padding-inline-start\n   */\n  \"scroll-padding-inline-start\"?: ScrollPaddingInlineStartProperty<TLength> | ScrollPaddingInlineStartProperty<TLength>[];\n  /**\n   * The `scroll-padding-left` property defines offsets for the left of the optimal viewing region of the scrollport: the region used as the target region for placing things in view of the user. This allows the author to exclude regions of the scrollport that are obscured by other content (such as fixed-positioned toolbars or sidebars) or simply to put more breathing room between a targetted element and the edges of the scrollport.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **68**  | **11** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-padding-left\n   */\n  \"scroll-padding-left\"?: ScrollPaddingLeftProperty<TLength> | ScrollPaddingLeftProperty<TLength>[];\n  /**\n   * The `scroll-padding-right` property defines offsets for the right of the optimal viewing region of the scrollport: the region used as the target region for placing things in view of the user. This allows the author to exclude regions of the scrollport that are obscured by other content (such as fixed-positioned toolbars or sidebars) or simply to put more breathing room between a targetted element and the edges of the scrollport.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **68**  | **11** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-padding-right\n   */\n  \"scroll-padding-right\"?: ScrollPaddingRightProperty<TLength> | ScrollPaddingRightProperty<TLength>[];\n  /**\n   * The `scroll-padding-top` property defines offsets for the top of the optimal viewing region of the scrollport: the region used as the target region for placing things in view of the user. This allows the author to exclude regions of the scrollport that are obscured by other content (such as fixed-positioned toolbars or sidebars) or simply to put more breathing room between a targetted element and the edges of the scrollport.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **68**  | **11** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-padding-top\n   */\n  \"scroll-padding-top\"?: ScrollPaddingTopProperty<TLength> | ScrollPaddingTopProperty<TLength>[];\n  /**\n   * The `scroll-snap-align` property specifies the box’s snap position as an alignment of its snap area (as the alignment subject) within its snap container’s snapport (as the alignment container). The two values specify the snapping alignment in the block axis and inline axis, respectively. If only one value is specified, the second value defaults to the same value.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **68**  | **11** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-snap-align\n   */\n  \"scroll-snap-align\"?: ScrollSnapAlignProperty | ScrollSnapAlignProperty[];\n  /**\n   * The **`scroll-snap-stop`** CSS property defines whether the scroll container is allowed to \"pass over\" possible snap positions.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **75** |   No    |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-snap-stop\n   */\n  \"scroll-snap-stop\"?: ScrollSnapStopProperty | ScrollSnapStopProperty[];\n  /**\n   * The **`scroll-snap-type`** CSS property sets how strictly snap points are enforced on the scroll container in case there is one.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari  |     Edge     |      IE      |\n   * | :----: | :-----: | :-----: | :----------: | :----------: |\n   * | **69** |  39-68  | **11**  | **12** _-x-_ | **10** _-x-_ |\n   * |        |         | 9 _-x-_ |              |              |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-snap-type\n   */\n  \"scroll-snap-type\"?: ScrollSnapTypeProperty | ScrollSnapTypeProperty[];\n  /**\n   * The **`scrollbar-color`** CSS property sets the color of the scrollbar track and thumb.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **64**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scrollbar-color\n   */\n  \"scrollbar-color\"?: ScrollbarColorProperty | ScrollbarColorProperty[];\n  /**\n   * The `scrollbar-width` property allows the author to set the maximum thickness of an element’s scrollbars when they are shown.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **64**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/scrollbar-width\n   */\n  \"scrollbar-width\"?: ScrollbarWidthProperty | ScrollbarWidthProperty[];\n  /**\n   * The **`shape-image-threshold`** CSS property sets the alpha channel threshold used to extract the shape using an image as the value for `shape-outside`.\n   *\n   * **Initial value**: `0.0`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **37** | **62**  | **10.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/shape-image-threshold\n   */\n  \"shape-image-threshold\"?: ShapeImageThresholdProperty | ShapeImageThresholdProperty[];\n  /**\n   * The **`shape-margin`** CSS property sets a margin for a CSS shape created using `shape-outside`.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox |     Safari     | Edge | IE  |\n   * | :----: | :-----: | :------------: | :--: | :-: |\n   * | **37** | **62**  | **10.1** _-x-_ |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/shape-margin\n   */\n  \"shape-margin\"?: ShapeMarginProperty<TLength> | ShapeMarginProperty<TLength>[];\n  /**\n   * The **`shape-outside`** CSS property defines a shape—which may be non-rectangular—around which adjacent inline content should wrap. By default, inline content wraps around its margin box; `shape-outside` provides a way to customize this wrapping, making it possible to wrap text around complex objects rather than simple boxes.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **37** | **62**  | **10.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/shape-outside\n   */\n  \"shape-outside\"?: ShapeOutsideProperty | ShapeOutsideProperty[];\n  /**\n   * The **`tab-size`** CSS property is used to customize the width of a tab (`U+0009`) character.\n   *\n   * **Initial value**: `8`\n   *\n   * | Chrome |   Firefox   | Safari  | Edge | IE  |\n   * | :----: | :---------: | :-----: | :--: | :-: |\n   * | **21** | **4** _-x-_ | **6.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/tab-size\n   */\n  \"tab-size\"?: TabSizeProperty<TLength> | TabSizeProperty<TLength>[];\n  /**\n   * The **`table-layout`** CSS property sets the algorithm used to lay out `<table>` cells, rows, and columns.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **14** |  **1**  | **1**  | **12** | **5** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/table-layout\n   */\n  \"table-layout\"?: TableLayoutProperty | TableLayoutProperty[];\n  /**\n   * The **`text-align`** CSS property sets the horizontal alignment of an inline or table-cell box. This means it works like `vertical-align` but in the horizontal direction.\n   *\n   * **Initial value**: `start`, or a nameless value that acts as `left` if _direction_ is `ltr`, `right` if _direction_ is `rtl` if `start` is not supported by the browser.\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **3** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-align\n   */\n  \"text-align\"?: TextAlignProperty | TextAlignProperty[];\n  /**\n   * The **`text-align-last`** CSS property sets how the last line of a block or a line, right before a forced line break, is aligned.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE    |\n   * | :----: | :-----: | :----: | :----: | :-----: |\n   * | **47** | **49**  |   No   | **12** | **5.5** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-align-last\n   */\n  \"text-align-last\"?: TextAlignLastProperty | TextAlignLastProperty[];\n  /**\n   * The **`text-combine-upright`** CSS property sets the combination of characters into the space of a single character. If the combined text is wider than 1em, the user agent must fit the contents within 1em. The resulting composition is treated as a single upright glyph for layout and decoration. This property only has an effect in vertical writing modes.\n   *\n   * **Initial value**: `none`\n   *\n   * |           Chrome           | Firefox |              Safari              |                  Edge                  |                   IE                   |\n   * | :------------------------: | :-----: | :------------------------------: | :------------------------------------: | :------------------------------------: |\n   * |           **48**           | **48**  | **5.1** _(-webkit-text-combine)_ | **12** _(-ms-text-combine-horizontal)_ | **11** _(-ms-text-combine-horizontal)_ |\n   * | 9 _(-webkit-text-combine)_ |         |                                  |                                        |                                        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-combine-upright\n   */\n  \"text-combine-upright\"?: TextCombineUprightProperty | TextCombineUprightProperty[];\n  /**\n   * The **`text-decoration-color`** CSS property sets the color of decorations added to text by `text-decoration-line`.\n   *\n   * **Initial value**: `currentcolor`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **57** | **36**  | **12.1** |  No  | No  |\n   * |        |         | 8 _-x-_  |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-decoration-color\n   */\n  \"text-decoration-color\"?: TextDecorationColorProperty | TextDecorationColorProperty[];\n  /**\n   * The **`text-decoration-line`** CSS property sets the kind of decoration that is used on text in an element, such as an underline or overline.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **57** | **36**  | **12.1** |  No  | No  |\n   * |        |         | 8 _-x-_  |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-decoration-line\n   */\n  \"text-decoration-line\"?: TextDecorationLineProperty | TextDecorationLineProperty[];\n  /**\n   * The **`text-decoration-skip`** CSS property sets what parts of an element’s content any text decoration affecting the element must skip over. It controls all text decoration lines drawn by the element and also any text decoration lines drawn by its ancestors.\n   *\n   * **Initial value**: `objects`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | 57-64  |   No    | **12.1** |  No  | No  |\n   * |        |         | 8 _-x-_  |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-decoration-skip\n   */\n  \"text-decoration-skip\"?: TextDecorationSkipProperty | TextDecorationSkipProperty[];\n  /**\n   * The **`text-decoration-skip-ink`** CSS property specifies how overlines and underlines are drawn when they pass over glyph ascenders and descenders.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **64** | **70**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-decoration-skip-ink\n   */\n  \"text-decoration-skip-ink\"?: TextDecorationSkipInkProperty | TextDecorationSkipInkProperty[];\n  /**\n   * The **`text-decoration-style`** CSS property sets the style of the lines specified by `text-decoration-line`. The style applies to all lines that are set with `text-decoration-line`.\n   *\n   * **Initial value**: `solid`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **57** | **36**  | **12.1** |  No  | No  |\n   * |        |         | 8 _-x-_  |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-decoration-style\n   */\n  \"text-decoration-style\"?: TextDecorationStyleProperty | TextDecorationStyleProperty[];\n  /**\n   * The **`text-decoration-thickness`** CSS property sets the thickness, or width, of the decoration line that is used on text in an element, such as a line-through, underline, or overline.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * |   No   | **70**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-decoration-thickness\n   */\n  \"text-decoration-thickness\"?: TextDecorationThicknessProperty<TLength> | TextDecorationThicknessProperty<TLength>[];\n  /**\n   * The **`text-decoration-thickness`** CSS property sets the thickness, or width, of the decoration line that is used on text in an element, such as a line-through, underline, or overline.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * |   No   | **70**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-decoration-thickness\n   */\n  \"text-decoration-width\"?: TextDecorationThicknessProperty<TLength> | TextDecorationThicknessProperty<TLength>[];\n  /**\n   * The **`text-emphasis-color`** CSS property sets the color of emphasis marks. This value can also be set using the `text-emphasis` shorthand.\n   *\n   * **Initial value**: `currentcolor`\n   *\n   * | Chrome | Firefox | Safari  | Edge | IE  |\n   * | :----: | :-----: | :-----: | :--: | :-: |\n   * | **25** | **46**  | **6.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-emphasis-color\n   */\n  \"text-emphasis-color\"?: TextEmphasisColorProperty | TextEmphasisColorProperty[];\n  /**\n   * The **`text-emphasis-position`** CSS property sets where emphasis marks are drawn. Like ruby text, if there isn't enough room for emphasis marks, the line height is increased.\n   *\n   * **Initial value**: `over right`\n   *\n   * | Chrome | Firefox | Safari  | Edge | IE  |\n   * | :----: | :-----: | :-----: | :--: | :-: |\n   * | **25** | **46**  | **6.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-emphasis-position\n   */\n  \"text-emphasis-position\"?: GlobalsString | GlobalsString[];\n  /**\n   * The **`text-emphasis-style`** CSS property sets the appearance of emphasis marks. It can also be set, and reset, using the `text-emphasis` shorthand.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari  | Edge | IE  |\n   * | :----: | :-----: | :-----: | :--: | :-: |\n   * | **25** | **46**  | **6.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-emphasis-style\n   */\n  \"text-emphasis-style\"?: TextEmphasisStyleProperty | TextEmphasisStyleProperty[];\n  /**\n   * The **`text-indent`** CSS property sets the length of empty space (indentation) that is put before lines of text in a block.\n   *\n   * **Initial value**: `0`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **3** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-indent\n   */\n  \"text-indent\"?: TextIndentProperty<TLength> | TextIndentProperty<TLength>[];\n  /**\n   * The **`text-justify`** CSS property sets what type of justification should be applied to text when `text-align``: justify;` is set on an element.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE   |\n   * | :----: | :-----: | :----: | :----: | :----: |\n   * |  n/a   | **55**  |   No   | **12** | **11** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-justify\n   */\n  \"text-justify\"?: TextJustifyProperty | TextJustifyProperty[];\n  /**\n   * The **`text-orientation`** CSS property sets the orientation of the text characters in a line. It only affects text in vertical mode (when `writing-mode` is not `horizontal-tb`). It is useful for controlling the display of languages that use vertical script, and also for making vertical table headers.\n   *\n   * **Initial value**: `mixed`\n   *\n   * |  Chrome  | Firefox |    Safari     | Edge | IE  |\n   * | :------: | :-----: | :-----------: | :--: | :-: |\n   * |  **48**  | **41**  | **5.1** _-x-_ |  No  | No  |\n   * | 11 _-x-_ |         |               |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-orientation\n   */\n  \"text-orientation\"?: TextOrientationProperty | TextOrientationProperty[];\n  /**\n   * The **`text-overflow`** CSS property sets how hidden overflow content is signaled to users. It can be clipped, display an ellipsis ('`…`'), or display a custom string.\n   *\n   * **Initial value**: `clip`\n   *\n   * | Chrome | Firefox | Safari  |  Edge  |  IE   |\n   * | :----: | :-----: | :-----: | :----: | :---: |\n   * | **1**  |  **7**  | **1.3** | **12** | **6** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-overflow\n   */\n  \"text-overflow\"?: TextOverflowProperty | TextOverflowProperty[];\n  /**\n   * The **`text-rendering`** CSS property provides information to the rendering engine about what to optimize for when rendering text.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **4**  |  **1**  | **5**  |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-rendering\n   */\n  \"text-rendering\"?: TextRenderingProperty | TextRenderingProperty[];\n  /**\n   * The **`text-shadow`** CSS property adds shadows to text. It accepts a comma-separated list of shadows to be applied to the text and any of its `decorations`. Each shadow is described by some combination of X and Y offsets from the element, blur radius, and color.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari  |  Edge  |   IE   |\n   * | :----: | :-----: | :-----: | :----: | :----: |\n   * | **2**  | **3.5** | **1.1** | **12** | **10** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-shadow\n   */\n  \"text-shadow\"?: TextShadowProperty | TextShadowProperty[];\n  /**\n   * The **`text-size-adjust`** CSS property controls the text inflation algorithm used on some smartphones and tablets. Other browsers will ignore this property.\n   *\n   * **Initial value**: `auto` for smartphone browsers supporting inflation, `none` in other cases (and then not modifiable).\n   *\n   * | Chrome | Firefox | Safari |     Edge     | IE  |\n   * | :----: | :-----: | :----: | :----------: | :-: |\n   * | **54** |   No    |   No   | **12** _-x-_ | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-size-adjust\n   */\n  \"text-size-adjust\"?: TextSizeAdjustProperty | TextSizeAdjustProperty[];\n  /**\n   * The **`text-transform`** CSS property specifies how to capitalize an element's text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized. It also can help improve legibility for ruby\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-transform\n   */\n  \"text-transform\"?: TextTransformProperty | TextTransformProperty[];\n  /**\n   * The **`text-underline-offset`** CSS property sets the offset distance of an underline text decoration line (applied using `text-decoration`) from its original position.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * |   No   | **70**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-underline-offset\n   */\n  \"text-underline-offset\"?: TextUnderlineOffsetProperty<TLength> | TextUnderlineOffsetProperty<TLength>[];\n  /**\n   * The **`text-underline-position`** CSS property specifies the position of the underline which is set using the `text-decoration` property's `underline` value.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **33** |   No    |   No   | **12** | **6** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-underline-position\n   */\n  \"text-underline-position\"?: TextUnderlinePositionProperty | TextUnderlinePositionProperty[];\n  /**\n   * The **`top`** CSS property participates in specifying the vertical position of a _positioned element_. It has no effect on non-positioned elements.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **5** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/top\n   */\n  top?: TopProperty<TLength> | TopProperty<TLength>[];\n  /**\n   * The **`touch-action`** CSS property sets how a region can be manipulated by a touchscreen user (for example, by zooming features built into the browser).\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |    IE    |\n   * | :----: | :-----: | :----: | :----: | :------: |\n   * | **36** | **52**  | **13** | **12** |  **11**  |\n   * |        |         |        |        | 10 _-x-_ |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/touch-action\n   */\n  \"touch-action\"?: TouchActionProperty | TouchActionProperty[];\n  /**\n   * The **`transform`** CSS property lets you rotate, scale, skew, or translate an element. It modifies the coordinate space of the CSS visual formatting model.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome  | Firefox |  Safari   |  Edge  |   IE    |\n   * | :-----: | :-----: | :-------: | :----: | :-----: |\n   * | **36**  | **16**  |   **9**   | **12** | **10**  |\n   * | 1 _-x-_ |         | 3.1 _-x-_ |        | 9 _-x-_ |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/transform\n   */\n  transform?: TransformProperty | TransformProperty[];\n  /**\n   * The **`transform-box`** CSS property defines the layout box to which the `transform` and `transform-origin` properties relate.\n   *\n   * **Initial value**: `border-box `\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **64** | **55**  | **11** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/transform-box\n   */\n  \"transform-box\"?: TransformBoxProperty | TransformBoxProperty[];\n  /**\n   * The **`transform-origin`** CSS property sets the origin for an element's transformations.\n   *\n   * **Initial value**: `50% 50% 0`\n   *\n   * | Chrome  |  Firefox  | Safari  |  Edge  |   IE    |\n   * | :-----: | :-------: | :-----: | :----: | :-----: |\n   * | **36**  |  **16**   |  **9**  | **12** | **10**  |\n   * | 1 _-x-_ | 3.5 _-x-_ | 2 _-x-_ |        | 9 _-x-_ |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/transform-origin\n   */\n  \"transform-origin\"?: TransformOriginProperty<TLength> | TransformOriginProperty<TLength>[];\n  /**\n   * The **`transform-style`** CSS property sets whether children of an element are positioned in the 3D space or are flattened in the plane of the element.\n   *\n   * **Initial value**: `flat`\n   *\n   * |  Chrome  | Firefox  | Safari  |  Edge  | IE  |\n   * | :------: | :------: | :-----: | :----: | :-: |\n   * |  **36**  |  **16**  |  **9**  | **12** | No  |\n   * | 12 _-x-_ | 10 _-x-_ | 4 _-x-_ |        |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/transform-style\n   */\n  \"transform-style\"?: TransformStyleProperty | TransformStyleProperty[];\n  /**\n   * The **`transition-delay`** CSS property specifies the duration to wait before starting a property's transition effect when its value changes.\n   *\n   * **Initial value**: `0s`\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |\n   * | :-----: | :-----: | :-----: | :----: | :----: |\n   * | **26**  | **16**  |  **9**  | **12** | **10** |\n   * | 1 _-x-_ | 4 _-x-_ | 4 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/transition-delay\n   */\n  \"transition-delay\"?: GlobalsString | GlobalsString[];\n  /**\n   * The **`transition-duration`** CSS property sets the length of time a transition animation should take to complete. By default, the value is `0s`, meaning that no animation will occur.\n   *\n   * **Initial value**: `0s`\n   *\n   * | Chrome  | Firefox |  Safari   |  Edge  |   IE   |\n   * | :-----: | :-----: | :-------: | :----: | :----: |\n   * | **26**  | **16**  |   **9**   | **12** | **10** |\n   * | 1 _-x-_ | 4 _-x-_ | 3.1 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/transition-duration\n   */\n  \"transition-duration\"?: GlobalsString | GlobalsString[];\n  /**\n   * The **`transition-property`** CSS property sets the CSS properties to which a transition effect should be applied.\n   *\n   * **Initial value**: all\n   *\n   * | Chrome  | Firefox |  Safari   |  Edge  |   IE   |\n   * | :-----: | :-----: | :-------: | :----: | :----: |\n   * | **26**  | **16**  |   **9**   | **12** | **10** |\n   * | 1 _-x-_ | 4 _-x-_ | 3.1 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/transition-property\n   */\n  \"transition-property\"?: TransitionPropertyProperty | TransitionPropertyProperty[];\n  /**\n   * The **`transition-timing-function`** CSS property sets how intermediate values are calculated for CSS properties being affected by a transition effect.\n   *\n   * **Initial value**: `ease`\n   *\n   * | Chrome  | Firefox |  Safari   |  Edge  |   IE   |\n   * | :-----: | :-----: | :-------: | :----: | :----: |\n   * | **26**  | **16**  |   **9**   | **12** | **10** |\n   * | 1 _-x-_ | 4 _-x-_ | 3.1 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/transition-timing-function\n   */\n  \"transition-timing-function\"?: TransitionTimingFunctionProperty | TransitionTimingFunctionProperty[];\n  /**\n   * The **`translate`** CSS property allows you to specify translation transforms individually and independantly of the `transform` property. This maps better to typical user interface usage, and saves having to remember the exact order of transform functions to specify in the `transform` value.\n   *\n   * **Initial value**: `none`\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **72**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/translate\n   */\n  translate?: TranslateProperty<TLength> | TranslateProperty<TLength>[];\n  /**\n   * The **`unicode-bidi`** CSS property, together with the `direction` property, determines how bidirectional text in a document is handled. For example, if a block of content contains both left-to-right and right-to-left text, the user-agent uses a complex Unicode algorithm to decide how to display the text. The `unicode-bidi` property overrides this algorithm and allows the developer to control the text embedding.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari  |  Edge  |   IE    |\n   * | :----: | :-----: | :-----: | :----: | :-----: |\n   * | **2**  |  **1**  | **1.3** | **12** | **5.5** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/unicode-bidi\n   */\n  \"unicode-bidi\"?: UnicodeBidiProperty | UnicodeBidiProperty[];\n  /**\n   * The `**user-select**` CSS property controls whether the user can select text. This doesn't have any effect on content loaded as chrome, except in textboxes.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome  | Firefox |   Safari    |     Edge     |      IE      |\n   * | :-----: | :-----: | :---------: | :----------: | :----------: |\n   * | **54**  | **69**  | **3** _-x-_ | **12** _-x-_ | **10** _-x-_ |\n   * | 1 _-x-_ | 1 _-x-_ |             |              |              |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/user-select\n   */\n  \"user-select\"?: UserSelectProperty | UserSelectProperty[];\n  /**\n   * The **`vertical-align`** CSS property sets vertical alignment of an inline or table-cell box.\n   *\n   * **Initial value**: `baseline`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/vertical-align\n   */\n  \"vertical-align\"?: VerticalAlignProperty<TLength> | VerticalAlignProperty<TLength>[];\n  /**\n   * The **`visibility`** CSS property shows or hides an element without changing the layout of a document. The property can also hide rows or columns in a `<table>`.\n   *\n   * **Initial value**: `visible`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/visibility\n   */\n  visibility?: VisibilityProperty | VisibilityProperty[];\n  /**\n   * The **`white-space`** CSS property sets how white space inside an element is handled.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE    |\n   * | :----: | :-----: | :----: | :----: | :-----: |\n   * | **1**  |  **1**  | **1**  | **12** | **5.5** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/white-space\n   */\n  \"white-space\"?: WhiteSpaceProperty | WhiteSpaceProperty[];\n  /**\n   * The **`widows`** CSS property sets the minimum number of lines in a block container that must be shown at the _top_ of a page, region, or column.\n   *\n   * **Initial value**: `2`\n   *\n   * | Chrome | Firefox | Safari  |  Edge  |  IE   |\n   * | :----: | :-----: | :-----: | :----: | :---: |\n   * | **25** |   No    | **1.3** | **12** | **8** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/widows\n   */\n  widows?: GlobalsNumber | GlobalsNumber[];\n  /**\n   * The **`width`** CSS property sets an element's width. By default it sets the width of the content area, but if `box-sizing` is set to `border-box`, it sets the width of the border area.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/width\n   */\n  width?: WidthProperty<TLength> | WidthProperty<TLength>[];\n  /**\n   * The **`will-change`** CSS property hints to browsers how an element is expected to change. Browsers may set up optimizations before an element is actually changed. These kinds of optimizations can increase the responsiveness of a page by doing potentially expensive work before they are actually required.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari  | Edge | IE  |\n   * | :----: | :-----: | :-----: | :--: | :-: |\n   * | **36** | **36**  | **9.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/will-change\n   */\n  \"will-change\"?: WillChangeProperty | WillChangeProperty[];\n  /**\n   * The **`word-break`** CSS property sets whether line breaks appear wherever the text would otherwise overflow its content box.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE    |\n   * | :----: | :-----: | :----: | :----: | :-----: |\n   * | **1**  | **15**  | **3**  | **12** | **5.5** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/word-break\n   */\n  \"word-break\"?: WordBreakProperty | WordBreakProperty[];\n  /**\n   * The **`word-spacing`** CSS property sets the length of space between words and between tags.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **6** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/word-spacing\n   */\n  \"word-spacing\"?: WordSpacingProperty<TLength> | WordSpacingProperty<TLength>[];\n  /**\n   * The `**overflow-wrap**` CSS property sets whether the browser should insert line breaks within words to prevent text from overflowing its content box.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE    |\n   * | :----: | :-----: | :----: | :----: | :-----: |\n   * | **1**  | **3.5** | **2**  | **12** | **5.5** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/overflow-wrap\n   */\n  \"word-wrap\"?: WordWrapProperty | WordWrapProperty[];\n  /**\n   * The **`writing-mode`** CSS property sets whether lines of text are laid out horizontally or vertically, as well as the direction in which blocks progress.\n   *\n   * **Initial value**: `horizontal-tb`\n   *\n   * | Chrome  | Firefox |  Safari   |  Edge  |     IE      |\n   * | :-----: | :-----: | :-------: | :----: | :---------: |\n   * | **48**  | **41**  | **10.1**  | **12** | **9** _-x-_ |\n   * | 8 _-x-_ |         | 5.1 _-x-_ |        |             |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/writing-mode\n   */\n  \"writing-mode\"?: WritingModeProperty | WritingModeProperty[];\n  /**\n   * The **`z-index`** CSS property sets the z-order of a positioned element and its descendants or flex items. Overlapping elements with a larger z-index cover those with a smaller one.\n   *\n   * **Initial value**: `auto`\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/z-index\n   */\n  \"z-index\"?: ZIndexProperty | ZIndexProperty[];\n  /**\n   * The non-standard **`zoom`** CSS property can be used to control the magnification level of an element. `transform: scale()` should be used instead of this property, if possible. However, unlike CSS Transforms, `zoom` affects the layout size of the element.\n   *\n   * **Initial value**: `normal`\n   *\n   * | Chrome | Firefox | Safari  |  Edge  |   IE    |\n   * | :----: | :-----: | :-----: | :----: | :-----: |\n   * | **1**  |   No    | **3.1** | **12** | **5.5** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/zoom\n   */\n  zoom?: ZoomProperty | ZoomProperty[];\n}\n\nexport interface StandardShorthandPropertiesHyphenFallback<TLength = string | 0> {\n  /**\n   * The `**all**` CSS shorthand property sets all of an element's properties (other than `unicode-bidi` and `direction`) to their initial or inherited values, or to the values specified in another stylesheet origin.\n   *\n   * **Initial value**: There is no practical initial value for it.\n   *\n   * | Chrome | Firefox | Safari  | Edge | IE  |\n   * | :----: | :-----: | :-----: | :--: | :-: |\n   * | **37** | **27**  | **9.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/all\n   */\n  all?: Globals | Globals[];\n  /**\n   * The **`animation`** shorthand CSS property sets an animated transition between styles. It is a shorthand for `animation-name`, `animation-duration`, `animation-timing-function`, `animation-delay`, `animation-iteration-count`, `animation-direction`, `animation-fill-mode`, and `animation-play-state`.\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |\n   * | :-----: | :-----: | :-----: | :----: | :----: |\n   * | **43**  | **16**  |  **9**  | **12** | **10** |\n   * | 3 _-x-_ | 5 _-x-_ | 4 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/animation\n   */\n  animation?: AnimationProperty | AnimationProperty[];\n  /**\n   * The **`background`** shorthand CSS property sets all background style properties at once, such as color, image, origin and size, or repeat method.\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/background\n   */\n  background?: BackgroundProperty<TLength> | BackgroundProperty<TLength>[];\n  /**\n   * The **`border`** CSS property sets an element's border. It's a shorthand for `border-width`, `border-style`, and `border-color`.\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border\n   */\n  border?: BorderProperty<TLength> | BorderProperty<TLength>[];\n  /**\n   * The **`border-block`** CSS property is a shorthand property for setting the individual logical block border property values in a single place in the style sheet.\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **66**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-block\n   */\n  \"border-block\"?: BorderBlockProperty<TLength> | BorderBlockProperty<TLength>[];\n  /**\n   * The **`border-block-end`** CSS property is a shorthand property for setting the individual logical block-end border property values in a single place in the style sheet.\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **69** | **41**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-block-end\n   */\n  \"border-block-end\"?: BorderBlockEndProperty<TLength> | BorderBlockEndProperty<TLength>[];\n  /**\n   * The **`border-block-start`** CSS property is a shorthand property for setting the individual logical block-start border property values in a single place in the style sheet.\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **69** | **41**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-block-start\n   */\n  \"border-block-start\"?: BorderBlockStartProperty<TLength> | BorderBlockStartProperty<TLength>[];\n  /**\n   * The **`border-bottom`** CSS property is a shorthand that sets the values of `border-bottom-width`, `border-bottom-style` and `border-bottom-color`. These properties set an element's bottom border.\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-bottom\n   */\n  \"border-bottom\"?: BorderBottomProperty<TLength> | BorderBottomProperty<TLength>[];\n  /**\n   * The **`border-color`** shorthand CSS property sets the color of all sides of an element's border.\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-color\n   */\n  \"border-color\"?: BorderColorProperty | BorderColorProperty[];\n  /**\n   * The **`border-image`** CSS property draws an image in place of an element's `border-style`.\n   *\n   * | Chrome  |  Firefox  | Safari  |  Edge  |   IE   |\n   * | :-----: | :-------: | :-----: | :----: | :----: |\n   * | **16**  |  **15**   |  **6**  | **12** | **11** |\n   * | 7 _-x-_ | 3.5 _-x-_ | 3 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-image\n   */\n  \"border-image\"?: BorderImageProperty | BorderImageProperty[];\n  /**\n   * The **`border-inline`** CSS property is a shorthand property for setting the individual logical inline border property values in a single place in the style sheet.\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **69** | **66**  |   No   |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-inline\n   */\n  \"border-inline\"?: BorderInlineProperty<TLength> | BorderInlineProperty<TLength>[];\n  /**\n   * The **`border-inline-end`** CSS property is a shorthand property for setting the individual logical inline-end border property values in a single place in the style sheet.\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **69** | **41**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-inline-end\n   */\n  \"border-inline-end\"?: BorderInlineEndProperty<TLength> | BorderInlineEndProperty<TLength>[];\n  /**\n   * The **`border-inline-start`** CSS property is a shorthand property for setting the individual logical inline-start border property values in a single place in the style sheet.\n   *\n   * | Chrome | Firefox |  Safari  | Edge | IE  |\n   * | :----: | :-----: | :------: | :--: | :-: |\n   * | **69** | **41**  | **12.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-inline-start\n   */\n  \"border-inline-start\"?: BorderInlineStartProperty<TLength> | BorderInlineStartProperty<TLength>[];\n  /**\n   * The **`border-left`** CSS property is a shorthand that sets the values of `border-left-width`, `border-left-style` and `border-left-color`. These properties set an element's left border.\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-left\n   */\n  \"border-left\"?: BorderLeftProperty<TLength> | BorderLeftProperty<TLength>[];\n  /**\n   * The **`border-radius`** CSS property rounds the corners of an element's outer border edge. You can set a single radius to make circular corners, or two radii to make elliptical corners.\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |  IE   |\n   * | :-----: | :-----: | :-----: | :----: | :---: |\n   * |  **4**  |  **4**  |  **5**  | **12** | **9** |\n   * | 1 _-x-_ |         | 3 _-x-_ |        |       |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-radius\n   */\n  \"border-radius\"?: BorderRadiusProperty<TLength> | BorderRadiusProperty<TLength>[];\n  /**\n   * The **`border-right`** CSS property is a shorthand that sets the values of `border-right-width`, `border-right-style` and `border-right-color`. These properties set an element's right border.\n   *\n   * | Chrome | Firefox | Safari |  Edge  |   IE    |\n   * | :----: | :-----: | :----: | :----: | :-----: |\n   * | **1**  |  **1**  | **1**  | **12** | **5.5** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-right\n   */\n  \"border-right\"?: BorderRightProperty<TLength> | BorderRightProperty<TLength>[];\n  /**\n   * The **`border-style`** CSS property is a shorthand property that sets the line style for all four sides of an element's border.\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-style\n   */\n  \"border-style\"?: BorderStyleProperty | BorderStyleProperty[];\n  /**\n   * The **`border-top`** CSS property is a shorthand that sets the values of `border-top-width`, `border-top-style` and `border-top-color`. These properties set an element's top border.\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-top\n   */\n  \"border-top\"?: BorderTopProperty<TLength> | BorderTopProperty<TLength>[];\n  /**\n   * The **`border-width`** shorthand CSS property sets the widths of all four sides of an element's border.\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/border-width\n   */\n  \"border-width\"?: BorderWidthProperty<TLength> | BorderWidthProperty<TLength>[];\n  /**\n   * The **`column-rule`** CSS property sets the width, style, and color of the rule (line) drawn between columns in a multi-column layout.\n   *\n   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |\n   * | :-----: | :-----: | :-----: | :----: | :----: |\n   * | **50**  | **52**  |  **9**  | **12** | **10** |\n   * | 1 _-x-_ |         | 3 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/column-rule\n   */\n  \"column-rule\"?: ColumnRuleProperty<TLength> | ColumnRuleProperty<TLength>[];\n  /**\n   * The **`columns`** CSS property sets the column width and column count of an element.\n   *\n   * | Chrome | Firefox | Safari  |  Edge  |   IE   |\n   * | :----: | :-----: | :-----: | :----: | :----: |\n   * | **50** | **52**  |  **9**  | **12** | **10** |\n   * |        |         | 3 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/columns\n   */\n  columns?: ColumnsProperty<TLength> | ColumnsProperty<TLength>[];\n  /**\n   * The **`flex`** CSS property sets how a flex item will grow or shrink to fit the space available in its flex container. It is a shorthand for `flex-grow`, `flex-shrink`, and `flex-basis`.\n   *\n   * |  Chrome  | Firefox |  Safari   |  Edge  |    IE    |\n   * | :------: | :-----: | :-------: | :----: | :------: |\n   * |  **29**  | **20**  |   **9**   | **12** |  **11**  |\n   * | 21 _-x-_ |         | 6.1 _-x-_ |        | 10 _-x-_ |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/flex\n   */\n  flex?: FlexProperty<TLength> | FlexProperty<TLength>[];\n  /**\n   * The **`flex-flow`** CSS property is a shorthand property for `flex-direction` and `flex-wrap` properties.\n   *\n   * |  Chrome  | Firefox |  Safari   |  Edge  |   IE   |\n   * | :------: | :-----: | :-------: | :----: | :----: |\n   * |  **29**  | **28**  |   **9**   | **12** | **11** |\n   * | 21 _-x-_ |         | 6.1 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/flex-flow\n   */\n  \"flex-flow\"?: FlexFlowProperty | FlexFlowProperty[];\n  /**\n   * The **`font`** CSS property is a shorthand for `font-style`, `font-variant`, `font-weight`, `font-size`, `line-height`, and `font-family`. Alternatively, it sets an element's font to a system font.\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **3** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/font\n   */\n  font?: FontProperty | FontProperty[];\n  /**\n   * The **`gap`** CSS property sets the gaps (gutters) between rows and columns. It is a shorthand for `row-gap` and `column-gap`.\n   *\n   * ---\n   *\n   * _Supported in Flex Layout_\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * |   No   | **63**  |   No   |  No  | No  |\n   *\n   * ---\n   *\n   * _Supported in Grid Layout_\n   *\n   * |     Chrome      |     Firefox     |        Safari         |  Edge  | IE  |\n   * | :-------------: | :-------------: | :-------------------: | :----: | :-: |\n   * |     **66**      |     **61**      | **10.1** _(grid-gap)_ | **16** | No  |\n   * | 57 _(grid-gap)_ | 52 _(grid-gap)_ |                       |        |     |\n   *\n   * ---\n   *\n   * _Supported in Multi-column Layout_\n   *\n   * | Chrome | Firefox | Safari |  Edge  | IE  |\n   * | :----: | :-----: | :----: | :----: | :-: |\n   * | **66** | **61**  |   No   | **16** | No  |\n   *\n   * ---\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/gap\n   */\n  gap?: GapProperty<TLength> | GapProperty<TLength>[];\n  /**\n   * The **`grid`** CSS property is a shorthand property that sets all of the explicit grid properties (`grid-template-rows`, `grid-template-columns`, and `grid-template-areas`), and all the implicit grid properties (`grid-auto-rows`, `grid-auto-columns`, and `grid-auto-flow`), in a single declaration.\n   *\n   * | Chrome | Firefox |  Safari  |  Edge  | IE  |\n   * | :----: | :-----: | :------: | :----: | :-: |\n   * | **57** | **52**  | **10.1** | **16** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/grid\n   */\n  grid?: GridProperty | GridProperty[];\n  /**\n   * The **`grid-area`** CSS property is a shorthand property for `grid-row-start`, `grid-column-start`, `grid-row-end` and `grid-column-end`, specifying a grid item’s size and location within the grid row by contributing a line, a span, or nothing (automatic) to its grid placement, thereby specifying the edges of its grid area.\n   *\n   * | Chrome | Firefox |  Safari  |  Edge  | IE  |\n   * | :----: | :-----: | :------: | :----: | :-: |\n   * | **57** | **52**  | **10.1** | **16** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/grid-area\n   */\n  \"grid-area\"?: GridAreaProperty | GridAreaProperty[];\n  /**\n   * The **`grid-column`** CSS property is a shorthand property for `grid-column-start` and `grid-column-end` specifying a grid item's size and location within the grid column by contributing a line, a span, or nothing (automatic) to its grid placement, thereby specifying the inline-start and inline-end edge of its grid area.\n   *\n   * | Chrome | Firefox |  Safari  |  Edge  | IE  |\n   * | :----: | :-----: | :------: | :----: | :-: |\n   * | **57** | **52**  | **10.1** | **16** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/grid-column\n   */\n  \"grid-column\"?: GridColumnProperty | GridColumnProperty[];\n  /**\n   * The **`grid-row`** CSS property is a shorthand property for `grid-row-start` and `grid-row-end` specifying a grid item’s size and location within the grid row by contributing a line, a span, or nothing (automatic) to its grid placement, thereby specifying the inline-start and inline-end edge of its grid area.\n   *\n   * | Chrome | Firefox |  Safari  |  Edge  | IE  |\n   * | :----: | :-----: | :------: | :----: | :-: |\n   * | **57** | **52**  | **10.1** | **16** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/grid-row\n   */\n  \"grid-row\"?: GridRowProperty | GridRowProperty[];\n  /**\n   * The **`grid-template`** CSS property is a shorthand property for defining grid columns, rows, and areas.\n   *\n   * | Chrome | Firefox |  Safari  |  Edge  | IE  |\n   * | :----: | :-----: | :------: | :----: | :-: |\n   * | **57** | **52**  | **10.1** | **16** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/grid-template\n   */\n  \"grid-template\"?: GridTemplateProperty | GridTemplateProperty[];\n  /** **Initial value**: `none` */\n  \"line-clamp\"?: LineClampProperty | LineClampProperty[];\n  /**\n   * The **`list-style`** CSS property is a shorthand to set list style properties `list-style-type`, `list-style-image`, and `list-style-position`.\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/list-style\n   */\n  \"list-style\"?: ListStyleProperty | ListStyleProperty[];\n  /**\n   * The **`margin`** CSS property sets the margin area on all four sides of an element. It is a shorthand for `margin-top`, `margin-right`, `margin-bottom`, and `margin-left`.\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **3** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/margin\n   */\n  margin?: MarginProperty<TLength> | MarginProperty<TLength>[];\n  /**\n   * The **`mask`** CSS property hides an element (partially or fully) by masking or clipping the image at specific points.\n   *\n   * | Chrome | Firefox | Safari  |  Edge  | IE  |\n   * | :----: | :-----: | :-----: | :----: | :-: |\n   * | **1**  |  **2**  | **3.2** | **12** | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/mask\n   */\n  mask?: MaskProperty<TLength> | MaskProperty<TLength>[];\n  /** The **`mask-border`** CSS property lets you create a mask along the edge of an element's border. */\n  \"mask-border\"?: MaskBorderProperty | MaskBorderProperty[];\n  /**\n   * The **`offset`** CSS property is a shorthand property for animating an element along a defined path.\n   *\n   * |    Chrome     | Firefox | Safari | Edge | IE  |\n   * | :-----------: | :-----: | :----: | :--: | :-: |\n   * |    **55**     | **72**  |   No   |  No  | No  |\n   * | 46 _(motion)_ |         |        |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/offset\n   */\n  motion?: OffsetProperty<TLength> | OffsetProperty<TLength>[];\n  /**\n   * The **`offset`** CSS property is a shorthand property for animating an element along a defined path.\n   *\n   * |    Chrome     | Firefox | Safari | Edge | IE  |\n   * | :-----------: | :-----: | :----: | :--: | :-: |\n   * |    **55**     | **72**  |   No   |  No  | No  |\n   * | 46 _(motion)_ |         |        |      |     |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/offset\n   */\n  offset?: OffsetProperty<TLength> | OffsetProperty<TLength>[];\n  /**\n   * The **`outline`** CSS property is a shorthand to set various outline properties in a single declaration: `outline-style`, `outline-width`, and `outline-color`.\n   *\n   * | Chrome | Firefox | Safari  |  Edge  |  IE   |\n   * | :----: | :-----: | :-----: | :----: | :---: |\n   * | **1**  | **1.5** | **1.2** | **12** | **8** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/outline\n   */\n  outline?: OutlineProperty<TLength> | OutlineProperty<TLength>[];\n  /**\n   * The **`padding`** CSS property sets the padding area on all four sides of an element. It is a shorthand for `padding-top`, `padding-right`, `padding-bottom`, and `padding-left`.\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **4** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/padding\n   */\n  padding?: PaddingProperty<TLength> | PaddingProperty<TLength>[];\n  /**\n   * The CSS **`place-items`** shorthand property sets the `align-items` and `justify-items` properties, respectively. If the second value is not set, the first value is also used for it.\n   *\n   * ---\n   *\n   * _Supported in Flex Layout_\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **59** | **45**  | **11** |  No  | No  |\n   *\n   * ---\n   *\n   * _Supported in Grid Layout_\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **59** | **45**  | **11** |  No  | No  |\n   *\n   * ---\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/place-items\n   */\n  \"place-items\"?: PlaceItemsProperty | PlaceItemsProperty[];\n  /**\n   * The **`place-self`** CSS property is a shorthand property sets both the `align-self` and `justify-self` properties. The first value is the `align-self` property value, the second the `justify-self` one. If the second value is not present, the first value is also used for it.\n   *\n   * ---\n   *\n   * _Supported in Flex Layout_\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **59** | **45**  |   No   |  No  | No  |\n   *\n   * ---\n   *\n   * _Supported in Grid Layout_\n   *\n   * | Chrome | Firefox | Safari | Edge | IE  |\n   * | :----: | :-----: | :----: | :--: | :-: |\n   * | **59** | **45**  |   No   |  No  | No  |\n   *\n   * ---\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/place-self\n   */\n  \"place-self\"?: PlaceSelfProperty | PlaceSelfProperty[];\n  /**\n   * The **`text-decoration`** CSS property sets the appearance of decorative lines on text. It is a shorthand for `text-decoration-line`, `text-decoration-color`, and `text-decoration-style`.\n   *\n   * | Chrome | Firefox | Safari |  Edge  |  IE   |\n   * | :----: | :-----: | :----: | :----: | :---: |\n   * | **1**  |  **1**  | **1**  | **12** | **3** |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-decoration\n   */\n  \"text-decoration\"?: TextDecorationProperty<TLength> | TextDecorationProperty<TLength>[];\n  /**\n   * The **`text-emphasis`** CSS property applies emphasis marks to text (except spaces and control characters). It is a shorthand for `text-emphasis-style` and `text-emphasis-color`.\n   *\n   * | Chrome | Firefox | Safari  | Edge | IE  |\n   * | :----: | :-----: | :-----: | :--: | :-: |\n   * | **25** | **46**  | **6.1** |  No  | No  |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/text-emphasis\n   */\n  \"text-emphasis\"?: TextEmphasisProperty | TextEmphasisProperty[];\n  /**\n   * The **`transition`** CSS property is a shorthand property for `transition-property`, `transition-duration`, `transition-timing-function`, and `transition-delay`.\n   *\n   * | Chrome  | Firefox |  Safari   |  Edge  |   IE   |\n   * | :-----: | :-----: | :-------: | :----: | :----: |\n   * | **26**  | **16**  |   **9**   | **12** | **10** |\n   * | 1 _-x-_ | 4 _-x-_ | 3.1 _-x-_ |        |        |\n   *\n   * @see https://developer.mozilla.org/docs/Web/CSS/transition\n   */\n  transition?: TransitionProperty | TransitionProperty[];\n}\n\nexport interface StandardPropertiesHyphenFallback<TLength = string | 0>\n  extends StandardLonghandPropertiesHyphenFallback<TLength>,\n    StandardShorthandPropertiesHyphenFallback<TLength> {}\n\nexport interface VendorLonghandPropertiesHyphenFallback<TLength = string | 0> {\n  /**\n   * The **`animation-delay`** CSS property sets when an animation starts. The animation can start later, immediately from its beginning, or immediately and partway through the animation.\n   *\n   * **Initial value**: `0s`\n   */\n  \"-moz-animation-delay\"?: GlobalsString | GlobalsString[];\n  /**\n   * The **`animation-direction`** CSS property sets whether an animation should play forwards, backwards, or alternating back and forth.\n   *\n   * **Initial value**: `normal`\n   */\n  \"-moz-animation-direction\"?: AnimationDirectionProperty | AnimationDirectionProperty[];\n  /**\n   * The **`animation-duration`** CSS property sets the length of time that an animation takes to complete one cycle.\n   *\n   * **Initial value**: `0s`\n   */\n  \"-moz-animation-duration\"?: GlobalsString | GlobalsString[];\n  /**\n   * The **`animation-fill-mode`** CSS property sets how a CSS animation applies styles to its target before and after its execution.\n   *\n   * **Initial value**: `none`\n   */\n  \"-moz-animation-fill-mode\"?: AnimationFillModeProperty | AnimationFillModeProperty[];\n  /**\n   * The **`animation-iteration-count`** CSS property sets the number of times an animation cycle should be played before stopping.\n   *\n   * **Initial value**: `1`\n   */\n  \"-moz-animation-iteration-count\"?: AnimationIterationCountProperty | AnimationIterationCountProperty[];\n  /**\n   * The **`animation-name`** CSS property sets one or more animations to apply to an element. Each name is an `@keyframes` at-rule that sets the property values for the animation sequence.\n   *\n   * **Initial value**: `none`\n   */\n  \"-moz-animation-name\"?: AnimationNameProperty | AnimationNameProperty[];\n  /**\n   * The **`animation-play-state`** CSS property sets whether an animation is running or paused.\n   *\n   * **Initial value**: `running`\n   */\n  \"-moz-animation-play-state\"?: AnimationPlayStateProperty | AnimationPlayStateProperty[];\n  /**\n   * The `**animation-timing-function**` CSS property sets how an animation progresses through the duration of each cycle.\n   *\n   * **Initial value**: `ease`\n   */\n  \"-moz-animation-timing-function\"?: AnimationTimingFunctionProperty | AnimationTimingFunctionProperty[];\n  /**\n   * The **`-moz-appearance`** CSS property is used in Gecko (Firefox) to display an element using platform-native styling based on the operating system's theme.\n   *\n   * **Initial value**: `none` (but this value is overridden in the user agent CSS)\n   */\n  \"-moz-appearance\"?: MozAppearanceProperty | MozAppearanceProperty[];\n  /**\n   * The **`backface-visibility`** CSS property sets whether the back face of an element is visible when turned towards the user.\n   *\n   * **Initial value**: `visible`\n   */\n  \"-moz-backface-visibility\"?: BackfaceVisibilityProperty | BackfaceVisibilityProperty[];\n  /**\n   * The **`border-inline-end-color`** CSS property defines the color of the logical inline-end border of an element, which maps to a physical border color depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-color`, `border-right-color`, `border-bottom-color`, or `border-left-color` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `currentcolor`\n   */\n  \"-moz-border-end-color\"?: BorderInlineEndColorProperty | BorderInlineEndColorProperty[];\n  /**\n   * The **`border-inline-end-style`** CSS property defines the style of the logical inline end border of an element, which maps to a physical border style depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-style`, `border-right-style`, `border-bottom-style`, or `border-left-style` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `none`\n   */\n  \"-moz-border-end-style\"?: BorderInlineEndStyleProperty | BorderInlineEndStyleProperty[];\n  /**\n   * The **`border-inline-end-width`** CSS property defines the width of the logical inline-end border of an element, which maps to a physical border width depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-width`, `border-right-width`, `border-bottom-width`, or `border-left-width` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `medium`\n   */\n  \"-moz-border-end-width\"?: BorderInlineEndWidthProperty<TLength> | BorderInlineEndWidthProperty<TLength>[];\n  /**\n   * The **`border-inline-start-color`** CSS property defines the color of the logical inline start border of an element, which maps to a physical border color depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-color`, `border-right-color`, `border-bottom-color`, or `border-left-color` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `currentcolor`\n   */\n  \"-moz-border-start-color\"?: BorderInlineStartColorProperty | BorderInlineStartColorProperty[];\n  /**\n   * The **`border-inline-start-style`** CSS property defines the style of the logical inline start border of an element, which maps to a physical border style depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-style`, `border-right-style`, `border-bottom-style`, or `border-left-style` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `none`\n   */\n  \"-moz-border-start-style\"?: BorderInlineStartStyleProperty | BorderInlineStartStyleProperty[];\n  /**\n   * The **`box-sizing`** CSS property defines how the user agent should calculate the total width and height of an element.\n   *\n   * **Initial value**: `content-box`\n   */\n  \"-moz-box-sizing\"?: BoxSizingProperty | BoxSizingProperty[];\n  /**\n   * The **`column-count`** CSS property breaks an element's content into the specified number of columns.\n   *\n   * **Initial value**: `auto`\n   */\n  \"-moz-column-count\"?: ColumnCountProperty | ColumnCountProperty[];\n  /**\n   * The **`column-fill`** CSS property controls how an element's contents are balanced when broken into columns.\n   *\n   * **Initial value**: `balance`\n   */\n  \"-moz-column-fill\"?: ColumnFillProperty | ColumnFillProperty[];\n  /**\n   * The **`column-gap`** CSS property sets the size of the gap (gutter) between an element's columns.\n   *\n   * **Initial value**: `normal`\n   */\n  \"-moz-column-gap\"?: ColumnGapProperty<TLength> | ColumnGapProperty<TLength>[];\n  /**\n   * The **`column-rule-color`** CSS property sets the color of the rule (line) drawn between columns in a multi-column layout.\n   *\n   * **Initial value**: `currentcolor`\n   */\n  \"-moz-column-rule-color\"?: ColumnRuleColorProperty | ColumnRuleColorProperty[];\n  /**\n   * The **`column-rule-style`** CSS property sets the style of the line drawn between columns in a multi-column layout.\n   *\n   * **Initial value**: `none`\n   */\n  \"-moz-column-rule-style\"?: ColumnRuleStyleProperty | ColumnRuleStyleProperty[];\n  /**\n   * The **`column-rule-width`** CSS property sets the width of the rule (line) drawn between columns in a multi-column layout.\n   *\n   * **Initial value**: `medium`\n   */\n  \"-moz-column-rule-width\"?: ColumnRuleWidthProperty<TLength> | ColumnRuleWidthProperty<TLength>[];\n  /**\n   * The **`column-width`** CSS property specifies the ideal column width in a multi-column layout. The container will have as many columns as can fit without any of them having a width less than the `column-width` value. If the width of the container is narrower than the specified value, the single column's width will be smaller than the declared column width.\n   *\n   * **Initial value**: `auto`\n   */\n  \"-moz-column-width\"?: ColumnWidthProperty<TLength> | ColumnWidthProperty<TLength>[];\n  /**\n   * If you reference an SVG image in a webpage (such as with the `<img>` element or as a background image), the SVG image can coordinate with the embedding element (its context) to have the image adopt property values set on the embedding element. To do this the embedding element needs to list the properties that are to be made available to the image by listing them as values of the **`-moz-context-properties`** property, and the image needs to opt in to using those properties by using values such as the `context-fill` value.\n   *\n   * **Initial value**: `none`\n   */\n  \"-moz-context-properties\"?: MozContextPropertiesProperty | MozContextPropertiesProperty[];\n  /**\n   * The non-standard **`-moz-float-edge`** CSS property specifies whether the height and width properties of the element include the margin, border, or padding thickness.\n   *\n   * **Initial value**: `content-box`\n   */\n  \"-moz-float-edge\"?: MozFloatEdgeProperty | MozFloatEdgeProperty[];\n  /**\n   * The **`font-feature-settings`** CSS property controls advanced typographic features in OpenType fonts.\n   *\n   * **Initial value**: `normal`\n   */\n  \"-moz-font-feature-settings\"?: FontFeatureSettingsProperty | FontFeatureSettingsProperty[];\n  /**\n   * The **`font-language-override`** CSS property controls the use of language-specific glyphs in a typeface.\n   *\n   * **Initial value**: `normal`\n   */\n  \"-moz-font-language-override\"?: FontLanguageOverrideProperty | FontLanguageOverrideProperty[];\n  /**\n   * The **`-moz-force-broken-image-icon`** extended CSS property can be used to force the broken image icon to be shown even when a broken image has an `alt` attribute.\n   *\n   * **Initial value**: `0`\n   */\n  \"-moz-force-broken-image-icon\"?: GlobalsNumber | GlobalsNumber[];\n  /**\n   * The **`hyphens`** CSS property specifies how words should be hyphenated when text wraps across multiple lines. You can prevent hyphenation entirely, use hyphenation in manually-specified points within the text, or let the browser automatically insert hyphens where appropriate.\n   *\n   * **Initial value**: `manual`\n   */\n  \"-moz-hyphens\"?: HyphensProperty | HyphensProperty[];\n  /**\n   * For certain XUL elements and pseudo-elements that use an image from the `list-style-image` property, this property specifies a region of the image that is used in place of the whole image. This allows elements to use different pieces of the same image to improve performance.\n   *\n   * **Initial value**: `auto`\n   */\n  \"-moz-image-region\"?: MozImageRegionProperty | MozImageRegionProperty[];\n  /**\n   * The **`margin-inline-end`** CSS property defines the logical inline end margin of an element, which maps to a physical margin depending on the element's writing mode, directionality, and text orientation. In other words, it corresponds to the `margin-top`, `margin-right`, `margin-bottom` or `margin-left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `0`\n   */\n  \"-moz-margin-end\"?: MarginInlineEndProperty<TLength> | MarginInlineEndProperty<TLength>[];\n  /**\n   * The **`margin-inline-start`** CSS property defines the logical inline start margin of an element, which maps to a physical margin depending on the element's writing mode, directionality, and text orientation. It corresponds to the `margin-top`, `margin-right`, `margin-bottom`, or `margin-left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `0`\n   */\n  \"-moz-margin-start\"?: MarginInlineStartProperty<TLength> | MarginInlineStartProperty<TLength>[];\n  /**\n   * The **`-moz-orient`** CSS property specifies the orientation of the element to which it's applied.\n   *\n   * **Initial value**: `inline`\n   */\n  \"-moz-orient\"?: MozOrientProperty | MozOrientProperty[];\n  /**\n   * In Mozilla applications, the **`-moz-outline-radius-bottomleft`** CSS property can be used to round the bottom-left corner of an element's `outline`.\n   *\n   * **Initial value**: `0`\n   */\n  \"-moz-outline-radius-bottomleft\"?: MozOutlineRadiusBottomleftProperty<TLength> | MozOutlineRadiusBottomleftProperty<TLength>[];\n  /**\n   * In Mozilla applications, the **`-moz-outline-radius-bottomright`** CSS property can be used to round the bottom-right corner of an element's `outline`.\n   *\n   * **Initial value**: `0`\n   */\n  \"-moz-outline-radius-bottomright\"?: MozOutlineRadiusBottomrightProperty<TLength> | MozOutlineRadiusBottomrightProperty<TLength>[];\n  /**\n   * In Mozilla applications, the **`-moz-outline-radius-topleft`** CSS property can be used to round the top-left corner of an element's `outline`.\n   *\n   * **Initial value**: `0`\n   */\n  \"-moz-outline-radius-topleft\"?: MozOutlineRadiusTopleftProperty<TLength> | MozOutlineRadiusTopleftProperty<TLength>[];\n  /**\n   * In Mozilla applications, the **`-moz-outline-radius-topright`** CSS property can be used to round the top-right corner of an element's `outline`.\n   *\n   * **Initial value**: `0`\n   */\n  \"-moz-outline-radius-topright\"?: MozOutlineRadiusToprightProperty<TLength> | MozOutlineRadiusToprightProperty<TLength>[];\n  /**\n   * The **`padding-inline-end`** CSS property defines the logical inline end padding of an element, which maps to a physical padding depending on the element's writing mode, directionality, and text orientation. It corresponds to the `padding-top`, `padding-right`, `padding-bottom`, or `padding-left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `0`\n   */\n  \"-moz-padding-end\"?: PaddingInlineEndProperty<TLength> | PaddingInlineEndProperty<TLength>[];\n  /**\n   * The **`padding-inline-start`** CSS property defines the logical inline start padding of an element, which maps to a physical padding depending on the element's writing mode, directionality, and text orientation. It corresponds to the `padding-top`, `padding-right`, `padding-bottom`, or `padding-left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `0`\n   */\n  \"-moz-padding-start\"?: PaddingInlineStartProperty<TLength> | PaddingInlineStartProperty<TLength>[];\n  /**\n   * The **`perspective`** CSS property determines the distance between the z=0 plane and the user in order to give a 3D-positioned element some perspective. Each 3D element with z>0 becomes larger; each 3D-element with z<0 becomes smaller. The strength of the effect is determined by the value of this property.\n   *\n   * **Initial value**: `none`\n   */\n  \"-moz-perspective\"?: PerspectiveProperty<TLength> | PerspectiveProperty<TLength>[];\n  /**\n   * The **`perspective-origin`** CSS property determines the position at which the viewer is looking. It is used as the _vanishing point_ by the `perspective` property.\n   *\n   * **Initial value**: `50% 50%`\n   */\n  \"-moz-perspective-origin\"?: PerspectiveOriginProperty<TLength> | PerspectiveOriginProperty<TLength>[];\n  /**\n   * **`-moz-stack-sizing`** is an extended CSS property. Normally, a `stack` will change its size so that all of its child elements are completely visible. For example, moving a child of the stack far to the right will widen the stack so the child remains visible.\n   *\n   * **Initial value**: `stretch-to-fit`\n   */\n  \"-moz-stack-sizing\"?: MozStackSizingProperty | MozStackSizingProperty[];\n  /**\n   * The **`tab-size`** CSS property is used to customize the width of a tab (`U+0009`) character.\n   *\n   * **Initial value**: `8`\n   */\n  \"-moz-tab-size\"?: TabSizeProperty<TLength> | TabSizeProperty<TLength>[];\n  /**\n   * The **`text-size-adjust`** CSS property controls the text inflation algorithm used on some smartphones and tablets. Other browsers will ignore this property.\n   *\n   * **Initial value**: `auto` for smartphone browsers supporting inflation, `none` in other cases (and then not modifiable).\n   */\n  \"-moz-text-size-adjust\"?: TextSizeAdjustProperty | TextSizeAdjustProperty[];\n  /**\n   * The **`transform-origin`** CSS property sets the origin for an element's transformations.\n   *\n   * **Initial value**: `50% 50% 0`\n   */\n  \"-moz-transform-origin\"?: TransformOriginProperty<TLength> | TransformOriginProperty<TLength>[];\n  /**\n   * The **`transform-style`** CSS property sets whether children of an element are positioned in the 3D space or are flattened in the plane of the element.\n   *\n   * **Initial value**: `flat`\n   */\n  \"-moz-transform-style\"?: TransformStyleProperty | TransformStyleProperty[];\n  /**\n   * The **`transition-delay`** CSS property specifies the duration to wait before starting a property's transition effect when its value changes.\n   *\n   * **Initial value**: `0s`\n   */\n  \"-moz-transition-delay\"?: GlobalsString | GlobalsString[];\n  /**\n   * The **`transition-duration`** CSS property sets the length of time a transition animation should take to complete. By default, the value is `0s`, meaning that no animation will occur.\n   *\n   * **Initial value**: `0s`\n   */\n  \"-moz-transition-duration\"?: GlobalsString | GlobalsString[];\n  /**\n   * The **`transition-property`** CSS property sets the CSS properties to which a transition effect should be applied.\n   *\n   * **Initial value**: all\n   */\n  \"-moz-transition-property\"?: TransitionPropertyProperty | TransitionPropertyProperty[];\n  /**\n   * The **`transition-timing-function`** CSS property sets how intermediate values are calculated for CSS properties being affected by a transition effect.\n   *\n   * **Initial value**: `ease`\n   */\n  \"-moz-transition-timing-function\"?: TransitionTimingFunctionProperty | TransitionTimingFunctionProperty[];\n  /**\n   * The **`-moz-user-focus`** CSS property is used to indicate whether an element can have the focus.\n   *\n   * **Initial value**: `none`\n   */\n  \"-moz-user-focus\"?: MozUserFocusProperty | MozUserFocusProperty[];\n  /**\n   * The **`user-modify`** property has no effect in Firefox. It was originally planned to determine whether or not the content of an element can be edited by a user.\n   *\n   * **Initial value**: `read-only`\n   */\n  \"-moz-user-modify\"?: MozUserModifyProperty | MozUserModifyProperty[];\n  /**\n   * The `**user-select**` CSS property controls whether the user can select text. This doesn't have any effect on content loaded as chrome, except in textboxes.\n   *\n   * **Initial value**: `auto`\n   */\n  \"-moz-user-select\"?: UserSelectProperty | UserSelectProperty[];\n  /**\n   * The **`-moz-window-dragging`** CSS property specifies whether a window is draggable or not. It only works in Chrome code, and only on Mac OS X.\n   *\n   * **Initial value**: `drag`\n   */\n  \"-moz-window-dragging\"?: MozWindowDraggingProperty | MozWindowDraggingProperty[];\n  /**\n   * The **`-ms-accelerator`** CSS property is a Microsoft extension that sets or retrieves a string indicating whether the object represents a keyboard shortcut.\n   *\n   * **Initial value**: `false`\n   */\n  \"-ms-accelerator\"?: MsAcceleratorProperty | MsAcceleratorProperty[];\n  /**\n   * The **`align-self`** CSS property aligns flex items of the current flex line overriding the `align-items` value. If any of the item's cross-axis margin is set to `auto`, then `align-self` is ignored. In Grid layout `align-self` aligns the item inside the grid area.\n   *\n   * **Initial value**: `auto`\n   */\n  \"-ms-align-self\"?: AlignSelfProperty | AlignSelfProperty[];\n  /**\n   * The **`-ms-block-progression`** CSS property is a Microsoft extension that specifies the block progression and layout orientation.\n   *\n   * **Initial value**: `tb`\n   */\n  \"-ms-block-progression\"?: MsBlockProgressionProperty | MsBlockProgressionProperty[];\n  /**\n   * The **`-ms-content-zoom-chaining`** CSS property is a Microsoft extension specifying the zoom behavior that occurs when a user hits the zoom limit during page manipulation.\n   *\n   * **Initial value**: `none`\n   */\n  \"-ms-content-zoom-chaining\"?: MsContentZoomChainingProperty | MsContentZoomChainingProperty[];\n  /**\n   * The **`-ms-content-zoom-limit-max`** CSS property is a Microsoft extension that specifies the selected elements' maximum zoom factor.\n   *\n   * **Initial value**: `400%`\n   */\n  \"-ms-content-zoom-limit-max\"?: GlobalsString | GlobalsString[];\n  /**\n   * The **`-ms-content-zoom-limit-min`** CSS property is a Microsoft extension that specifies the minimum zoom factor.\n   *\n   * **Initial value**: `100%`\n   */\n  \"-ms-content-zoom-limit-min\"?: GlobalsString | GlobalsString[];\n  /**\n   * The **`-ms-content-zoom-snap-points`** CSS property is a Microsoft extension that specifies where zoom snap-points are located.\n   *\n   * **Initial value**: `snapInterval(0%, 100%)`\n   */\n  \"-ms-content-zoom-snap-points\"?: GlobalsString | GlobalsString[];\n  /**\n   * The **`-ms-content-zoom-snap-type`** CSS property is a Microsoft extension that specifies how zooming is affected by defined snap-points.\n   *\n   * **Initial value**: `none`\n   */\n  \"-ms-content-zoom-snap-type\"?: MsContentZoomSnapTypeProperty | MsContentZoomSnapTypeProperty[];\n  /**\n   * The **`-ms-content-zooming`** CSS property is a Microsoft extension that specifies whether zooming is enabled.\n   *\n   * **Initial value**: zoom for the top level element, none for all other elements\n   */\n  \"-ms-content-zooming\"?: MsContentZoomingProperty | MsContentZoomingProperty[];\n  /**\n   * The `-ms-filter` CSS property is a Microsoft extension that sets or retrieves the filter or collection of filters applied to an object.\n   *\n   * **Initial value**: \"\" (the empty string)\n   */\n  \"-ms-filter\"?: GlobalsString | GlobalsString[];\n  /**\n   * The **`flex-direction`** CSS property sets how flex items are placed in the flex container defining the main axis and the direction (normal or reversed).\n   *\n   * **Initial value**: `row`\n   */\n  \"-ms-flex-direction\"?: FlexDirectionProperty | FlexDirectionProperty[];\n  /**\n   * The **`flex-grow`** CSS property sets how much of the available space in the flex container should be assigned to that item (the flex grow factor). If all sibling items have the same flex grow factor, then all items will receive the same share of available space, otherwise it is distributed according to the ratio defined by the different flex grow factors.\n   *\n   * **Initial value**: `0`\n   */\n  \"-ms-flex-positive\"?: GlobalsNumber | GlobalsNumber[];\n  /**\n   * The **`-ms-flow-from`** CSS property is a Microsoft extension that gets or sets a value identifying a region container in the document that accepts the content flow from the data source.\n   *\n   * **Initial value**: `none`\n   */\n  \"-ms-flow-from\"?: MsFlowFromProperty | MsFlowFromProperty[];\n  /**\n   * The **`-ms-flow-into`** CSS property is a Microsoft extension that gets or sets a value identifying an iframe container in the document that serves as the region's data source.\n   *\n   * **Initial value**: `none`\n   */\n  \"-ms-flow-into\"?: MsFlowIntoProperty | MsFlowIntoProperty[];\n  /**\n   * The **`grid-auto-columns`** CSS property specifies the size of an implicitly-created grid column track.\n   *\n   * **Initial value**: `auto`\n   */\n  \"-ms-grid-columns\"?: GridAutoColumnsProperty<TLength> | GridAutoColumnsProperty<TLength>[];\n  /**\n   * The **`grid-auto-rows`** CSS property specifies the size of an implicitly-created grid row track.\n   *\n   * **Initial value**: `auto`\n   */\n  \"-ms-grid-rows\"?: GridAutoRowsProperty<TLength> | GridAutoRowsProperty<TLength>[];\n  /**\n   * The **`-ms-high-contrast-adjust`** CSS property is a Microsoft extension that gets or sets a value indicating whether to override any CSS properties that would have been set in high contrast mode.\n   *\n   * **Initial value**: `auto`\n   */\n  \"-ms-high-contrast-adjust\"?: MsHighContrastAdjustProperty | MsHighContrastAdjustProperty[];\n  /**\n   * The **`-ms-hyphenate-limit-chars`** CSS property is a Microsoft extension that specifies one to three values indicating the minimum number of characters in a hyphenated word. If the word does not meet the required minimum number of characters in the word, before the hyphen, or after the hyphen, then the word is not hyphenated.\n   *\n   * **Initial value**: `auto`\n   */\n  \"-ms-hyphenate-limit-chars\"?: MsHyphenateLimitCharsProperty | MsHyphenateLimitCharsProperty[];\n  /**\n   * The **`-ms-hyphenate-limit-lines`** CSS property is a Microsoft extension specifying the maximum number of consecutive lines in an element that may be ended with a hyphenated word.\n   *\n   * **Initial value**: `no-limit`\n   */\n  \"-ms-hyphenate-limit-lines\"?: MsHyphenateLimitLinesProperty | MsHyphenateLimitLinesProperty[];\n  /**\n   * The `**-ms-hyphenate-limit-zone**` CSS property is a Microsoft extension specifying the width of the hyphenation zone.\n   *\n   * **Initial value**: `0`\n   */\n  \"-ms-hyphenate-limit-zone\"?: MsHyphenateLimitZoneProperty<TLength> | MsHyphenateLimitZoneProperty<TLength>[];\n  /**\n   * The **`hyphens`** CSS property specifies how words should be hyphenated when text wraps across multiple lines. You can prevent hyphenation entirely, use hyphenation in manually-specified points within the text, or let the browser automatically insert hyphens where appropriate.\n   *\n   * **Initial value**: `manual`\n   */\n  \"-ms-hyphens\"?: HyphensProperty | HyphensProperty[];\n  /**\n   * The **`-ms-ime-align`** CSS property is a Microsoft extension aligning the Input Method Editor (IME) candidate window box relative to the element on which the IME composition is active. The extension is implemented in Microsoft Edge and Internet Explorer 11.\n   *\n   * **Initial value**: `auto`\n   */\n  \"-ms-ime-align\"?: MsImeAlignProperty | MsImeAlignProperty[];\n  /**\n   * The **`line-break`** CSS property sets how to break lines of Chinese, Japanese, or Korean (CJK) text when working with punctuation and symbols.\n   *\n   * **Initial value**: `auto`\n   */\n  \"-ms-line-break\"?: LineBreakProperty | LineBreakProperty[];\n  /**\n   * The **`order`** CSS property sets the order to lay out an item in a flex or grid container. Items in a container are sorted by ascending `order` value and then by their source code order.\n   *\n   * **Initial value**: `0`\n   */\n  \"-ms-order\"?: GlobalsNumber | GlobalsNumber[];\n  /**\n   * The **`-ms-overflow-style`** CSS property is a Microsoft extension controlling the behavior of scrollbars when the content of an element overflows.\n   *\n   * **Initial value**: `auto`\n   */\n  \"-ms-overflow-style\"?: MsOverflowStyleProperty | MsOverflowStyleProperty[];\n  /**\n   * The **`overflow-x`** CSS property sets what shows when content overflows a block-level element's left and right edges. This may be nothing, a scroll bar, or the overflow content.\n   *\n   * **Initial value**: `visible`\n   */\n  \"-ms-overflow-x\"?: OverflowXProperty | OverflowXProperty[];\n  /**\n   * The **`overflow-y`** CSS property sets what shows when content overflows a block-level element's top and bottom edges. This may be nothing, a scroll bar, or the overflow content.\n   *\n   * **Initial value**: `visible`\n   */\n  \"-ms-overflow-y\"?: OverflowYProperty | OverflowYProperty[];\n  /**\n   * The `**-ms-scroll-chaining**` CSS property is a Microsoft extension that specifies the scrolling behavior that occurs when a user hits the scroll limit during a manipulation.\n   *\n   * **Initial value**: `chained`\n   */\n  \"-ms-scroll-chaining\"?: MsScrollChainingProperty | MsScrollChainingProperty[];\n  /**\n   * The `**-ms-scroll-limit-x-max**` CSS property is a Microsoft extension that specifies the maximum value for the `Element.scrollLeft` property.\n   *\n   * **Initial value**: `auto`\n   */\n  \"-ms-scroll-limit-x-max\"?: MsScrollLimitXMaxProperty<TLength> | MsScrollLimitXMaxProperty<TLength>[];\n  /**\n   * The **`-ms-scroll-limit-x-min`** CSS property is a Microsoft extension that specifies the minimum value for the `Element.scrollLeft` property.\n   *\n   * **Initial value**: `0`\n   */\n  \"-ms-scroll-limit-x-min\"?: MsScrollLimitXMinProperty<TLength> | MsScrollLimitXMinProperty<TLength>[];\n  /**\n   * The **`-ms-scroll-limit-y-max`** CSS property is a Microsoft extension that specifies the maximum value for the `Element.scrollTop` property.\n   *\n   * **Initial value**: `auto`\n   */\n  \"-ms-scroll-limit-y-max\"?: MsScrollLimitYMaxProperty<TLength> | MsScrollLimitYMaxProperty<TLength>[];\n  /**\n   * The **`-ms-scroll-limit-y-min`** CSS property is a Microsoft extension that specifies the minimum value for the `Element.scrollTop` property.\n   *\n   * **Initial value**: `0`\n   */\n  \"-ms-scroll-limit-y-min\"?: MsScrollLimitYMinProperty<TLength> | MsScrollLimitYMinProperty<TLength>[];\n  /**\n   * The **`-ms-scroll-rails`** CSS property is a Microsoft extension that specifies whether scrolling locks to the primary axis of motion.\n   *\n   * **Initial value**: `railed`\n   */\n  \"-ms-scroll-rails\"?: MsScrollRailsProperty | MsScrollRailsProperty[];\n  /**\n   * The **`-ms-scroll-snap-points-x`** CSS property is a Microsoft extension that specifies where snap-points will be located along the x-axis.\n   *\n   * **Initial value**: `snapInterval(0px, 100%)`\n   */\n  \"-ms-scroll-snap-points-x\"?: GlobalsString | GlobalsString[];\n  /**\n   * The **`-ms-scroll-snap-points-y`** CSS property is a Microsoft extension that specifies where snap-points will be located along the y-axis.\n   *\n   * **Initial value**: `snapInterval(0px, 100%)`\n   */\n  \"-ms-scroll-snap-points-y\"?: GlobalsString | GlobalsString[];\n  /**\n   * The **`scroll-snap-type`** CSS property sets how strictly snap points are enforced on the scroll container in case there is one.\n   *\n   * **Initial value**: `none`\n   */\n  \"-ms-scroll-snap-type\"?: MsScrollSnapTypeProperty | MsScrollSnapTypeProperty[];\n  /**\n   * The **`-ms-scroll-translation`** CSS property is a Microsoft extension that specifies whether vertical-to-horizontal scroll wheel translation occurs on the specified element.\n   *\n   * **Initial value**: `none`\n   */\n  \"-ms-scroll-translation\"?: MsScrollTranslationProperty | MsScrollTranslationProperty[];\n  /**\n   * The **`-ms-scrollbar-3dlight-color`** CSS property is a Microsoft extension specifying the color of the top and left edges of the scroll box and scroll arrows of a scroll bar.\n   *\n   * **Initial value**: depends on user agent\n   */\n  \"-ms-scrollbar-3dlight-color\"?: MsScrollbar3dlightColorProperty | MsScrollbar3dlightColorProperty[];\n  /**\n   * The **`-ms-scrollbar-arrow-color`** CSS property is a Microsoft extension that specifies the color of the arrow elements of a scroll arrow.\n   *\n   * **Initial value**: `ButtonText`\n   */\n  \"-ms-scrollbar-arrow-color\"?: MsScrollbarArrowColorProperty | MsScrollbarArrowColorProperty[];\n  /**\n   * The `**-ms-scrollbar-base-color**` CSS property is a Microsoft extension that specifies the base color of the main elements of a scroll bar.\n   *\n   * **Initial value**: depends on user agent\n   */\n  \"-ms-scrollbar-base-color\"?: MsScrollbarBaseColorProperty | MsScrollbarBaseColorProperty[];\n  /**\n   * The **`-ms-scrollbar-darkshadow-color`** CSS property is a Microsoft extension that specifies the color of a scroll bar's gutter.\n   *\n   * **Initial value**: `ThreeDDarkShadow`\n   */\n  \"-ms-scrollbar-darkshadow-color\"?: MsScrollbarDarkshadowColorProperty | MsScrollbarDarkshadowColorProperty[];\n  /**\n   * The `**-ms-scrollbar-face-color**` CSS property is a Microsoft extension that specifies the color of the scroll box and scroll arrows of a scroll bar.\n   *\n   * **Initial value**: `ThreeDFace`\n   */\n  \"-ms-scrollbar-face-color\"?: MsScrollbarFaceColorProperty | MsScrollbarFaceColorProperty[];\n  /**\n   * The `**-ms-scrollbar-highlight-color**` CSS property is a Microsoft extension that specifies the color of the slider tray, the top and left edges of the scroll box, and the scroll arrows of a scroll bar.\n   *\n   * **Initial value**: `ThreeDHighlight`\n   */\n  \"-ms-scrollbar-highlight-color\"?: MsScrollbarHighlightColorProperty | MsScrollbarHighlightColorProperty[];\n  /**\n   * The **`-ms-scrollbar-shadow-color`** CSS property is a Microsoft extension that specifies the color of the bottom and right edges of the scroll box and scroll arrows of a scroll bar.\n   *\n   * **Initial value**: `ThreeDDarkShadow`\n   */\n  \"-ms-scrollbar-shadow-color\"?: MsScrollbarShadowColorProperty | MsScrollbarShadowColorProperty[];\n  /**\n   * The **`-ms-text-autospace`** CSS property is a Microsoft extension that specifies the autospacing and narrow space width adjustment of text.\n   *\n   * **Initial value**: `none`\n   */\n  \"-ms-text-autospace\"?: MsTextAutospaceProperty | MsTextAutospaceProperty[];\n  /**\n   * The **`text-combine-upright`** CSS property sets the combination of characters into the space of a single character. If the combined text is wider than 1em, the user agent must fit the contents within 1em. The resulting composition is treated as a single upright glyph for layout and decoration. This property only has an effect in vertical writing modes.\n   *\n   * **Initial value**: `none`\n   */\n  \"-ms-text-combine-horizontal\"?: TextCombineUprightProperty | TextCombineUprightProperty[];\n  /**\n   * The **`text-overflow`** CSS property sets how hidden overflow content is signaled to users. It can be clipped, display an ellipsis ('`…`'), or display a custom string.\n   *\n   * **Initial value**: `clip`\n   */\n  \"-ms-text-overflow\"?: TextOverflowProperty | TextOverflowProperty[];\n  /**\n   * The **`touch-action`** CSS property sets how a region can be manipulated by a touchscreen user (for example, by zooming features built into the browser).\n   *\n   * **Initial value**: `auto`\n   */\n  \"-ms-touch-action\"?: TouchActionProperty | TouchActionProperty[];\n  /**\n   * The **`-ms-touch-select`** CSS property is a Microsoft extension that toggles the gripper visual elements that enable touch text selection.\n   *\n   * **Initial value**: `grippers`\n   */\n  \"-ms-touch-select\"?: MsTouchSelectProperty | MsTouchSelectProperty[];\n  /**\n   * The **`transform`** CSS property lets you rotate, scale, skew, or translate an element. It modifies the coordinate space of the CSS visual formatting model.\n   *\n   * **Initial value**: `none`\n   */\n  \"-ms-transform\"?: TransformProperty | TransformProperty[];\n  /**\n   * The **`transform-origin`** CSS property sets the origin for an element's transformations.\n   *\n   * **Initial value**: `50% 50% 0`\n   */\n  \"-ms-transform-origin\"?: TransformOriginProperty<TLength> | TransformOriginProperty<TLength>[];\n  /**\n   * The **`transition-delay`** CSS property specifies the duration to wait before starting a property's transition effect when its value changes.\n   *\n   * **Initial value**: `0s`\n   */\n  \"-ms-transition-delay\"?: GlobalsString | GlobalsString[];\n  /**\n   * The **`transition-duration`** CSS property sets the length of time a transition animation should take to complete. By default, the value is `0s`, meaning that no animation will occur.\n   *\n   * **Initial value**: `0s`\n   */\n  \"-ms-transition-duration\"?: GlobalsString | GlobalsString[];\n  /**\n   * The **`transition-property`** CSS property sets the CSS properties to which a transition effect should be applied.\n   *\n   * **Initial value**: all\n   */\n  \"-ms-transition-property\"?: TransitionPropertyProperty | TransitionPropertyProperty[];\n  /**\n   * The **`transition-timing-function`** CSS property sets how intermediate values are calculated for CSS properties being affected by a transition effect.\n   *\n   * **Initial value**: `ease`\n   */\n  \"-ms-transition-timing-function\"?: TransitionTimingFunctionProperty | TransitionTimingFunctionProperty[];\n  /**\n   * The `**user-select**` CSS property controls whether the user can select text. This doesn't have any effect on content loaded as chrome, except in textboxes.\n   *\n   * **Initial value**: `text`\n   */\n  \"-ms-user-select\"?: MsUserSelectProperty | MsUserSelectProperty[];\n  /**\n   * The **`word-break`** CSS property sets whether line breaks appear wherever the text would otherwise overflow its content box.\n   *\n   * **Initial value**: `normal`\n   */\n  \"-ms-word-break\"?: WordBreakProperty | WordBreakProperty[];\n  /**\n   * The **`-ms-wrap-flow`** CSS property is a Microsoft extension that specifies how exclusions impact inline content within block-level elements.\n   *\n   * **Initial value**: `auto`\n   */\n  \"-ms-wrap-flow\"?: MsWrapFlowProperty | MsWrapFlowProperty[];\n  /**\n   * The **`-ms-wrap-margin`** CSS property is a Microsoft extension that specifies a margin that offsets the inner wrap shape from other shapes.\n   *\n   * **Initial value**: `0`\n   */\n  \"-ms-wrap-margin\"?: MsWrapMarginProperty<TLength> | MsWrapMarginProperty<TLength>[];\n  /**\n   * The **`-ms-wrap-through`** CSS property is a Microsoft extension that specifies how content should wrap around an exclusion element.\n   *\n   * **Initial value**: `wrap`\n   */\n  \"-ms-wrap-through\"?: MsWrapThroughProperty | MsWrapThroughProperty[];\n  /**\n   * The **`writing-mode`** CSS property sets whether lines of text are laid out horizontally or vertically, as well as the direction in which blocks progress.\n   *\n   * **Initial value**: `horizontal-tb`\n   */\n  \"-ms-writing-mode\"?: WritingModeProperty | WritingModeProperty[];\n  /**\n   * The **`object-fit`** CSS property sets how the content of a replaced element, such as an `<img>` or `<video>`, should be resized to fit its container.\n   *\n   * **Initial value**: `fill`\n   */\n  \"-o-object-fit\"?: ObjectFitProperty | ObjectFitProperty[];\n  /**\n   * The **`object-position`** CSS property specifies the alignment of the selected replaced element's contents within the element's box. Areas of the box which aren't covered by the replaced element's object will show the element's background.\n   *\n   * **Initial value**: `50% 50%`\n   */\n  \"-o-object-position\"?: ObjectPositionProperty<TLength> | ObjectPositionProperty<TLength>[];\n  /**\n   * The **`tab-size`** CSS property is used to customize the width of a tab (`U+0009`) character.\n   *\n   * **Initial value**: `8`\n   */\n  \"-o-tab-size\"?: TabSizeProperty<TLength> | TabSizeProperty<TLength>[];\n  /**\n   * The **`text-overflow`** CSS property sets how hidden overflow content is signaled to users. It can be clipped, display an ellipsis ('`…`'), or display a custom string.\n   *\n   * **Initial value**: `clip`\n   */\n  \"-o-text-overflow\"?: TextOverflowProperty | TextOverflowProperty[];\n  /**\n   * The **`transform-origin`** CSS property sets the origin for an element's transformations.\n   *\n   * **Initial value**: `50% 50% 0`\n   */\n  \"-o-transform-origin\"?: TransformOriginProperty<TLength> | TransformOriginProperty<TLength>[];\n  /**\n   * The CSS **`align-content`** property sets how the browser distributes space between and around content items along the cross-axis of a flexbox container, and the main-axis of a grid container.\n   *\n   * **Initial value**: `normal`\n   */\n  \"-webkit-align-content\"?: AlignContentProperty | AlignContentProperty[];\n  /**\n   * The CSS **`align-items`** property sets the `align-self` value on all direct children as a group. The align-self property sets the alignment of an item within its containing block. In Flexbox it controls the alignment of items on the Cross Axis, in Grid Layout it controls the alignment of items on the Block Axis within their grid area.\n   *\n   * **Initial value**: `normal`\n   */\n  \"-webkit-align-items\"?: AlignItemsProperty | AlignItemsProperty[];\n  /**\n   * The **`align-self`** CSS property aligns flex items of the current flex line overriding the `align-items` value. If any of the item's cross-axis margin is set to `auto`, then `align-self` is ignored. In Grid layout `align-self` aligns the item inside the grid area.\n   *\n   * **Initial value**: `auto`\n   */\n  \"-webkit-align-self\"?: AlignSelfProperty | AlignSelfProperty[];\n  /**\n   * The **`animation-delay`** CSS property sets when an animation starts. The animation can start later, immediately from its beginning, or immediately and partway through the animation.\n   *\n   * **Initial value**: `0s`\n   */\n  \"-webkit-animation-delay\"?: GlobalsString | GlobalsString[];\n  /**\n   * The **`animation-direction`** CSS property sets whether an animation should play forwards, backwards, or alternating back and forth.\n   *\n   * **Initial value**: `normal`\n   */\n  \"-webkit-animation-direction\"?: AnimationDirectionProperty | AnimationDirectionProperty[];\n  /**\n   * The **`animation-duration`** CSS property sets the length of time that an animation takes to complete one cycle.\n   *\n   * **Initial value**: `0s`\n   */\n  \"-webkit-animation-duration\"?: GlobalsString | GlobalsString[];\n  /**\n   * The **`animation-fill-mode`** CSS property sets how a CSS animation applies styles to its target before and after its execution.\n   *\n   * **Initial value**: `none`\n   */\n  \"-webkit-animation-fill-mode\"?: AnimationFillModeProperty | AnimationFillModeProperty[];\n  /**\n   * The **`animation-iteration-count`** CSS property sets the number of times an animation cycle should be played before stopping.\n   *\n   * **Initial value**: `1`\n   */\n  \"-webkit-animation-iteration-count\"?: AnimationIterationCountProperty | AnimationIterationCountProperty[];\n  /**\n   * The **`animation-name`** CSS property sets one or more animations to apply to an element. Each name is an `@keyframes` at-rule that sets the property values for the animation sequence.\n   *\n   * **Initial value**: `none`\n   */\n  \"-webkit-animation-name\"?: AnimationNameProperty | AnimationNameProperty[];\n  /**\n   * The **`animation-play-state`** CSS property sets whether an animation is running or paused.\n   *\n   * **Initial value**: `running`\n   */\n  \"-webkit-animation-play-state\"?: AnimationPlayStateProperty | AnimationPlayStateProperty[];\n  /**\n   * The `**animation-timing-function**` CSS property sets how an animation progresses through the duration of each cycle.\n   *\n   * **Initial value**: `ease`\n   */\n  \"-webkit-animation-timing-function\"?: AnimationTimingFunctionProperty | AnimationTimingFunctionProperty[];\n  /**\n   * The **`-moz-appearance`** CSS property is used in Gecko (Firefox) to display an element using platform-native styling based on the operating system's theme.\n   *\n   * **Initial value**: `none` (but this value is overridden in the user agent CSS)\n   */\n  \"-webkit-appearance\"?: WebkitAppearanceProperty | WebkitAppearanceProperty[];\n  /**\n   * The **`backdrop-filter`** CSS property lets you apply graphical effects such as blurring or color shifting to the area behind an element. Because it applies to everything _behind_ the element, to see the effect you must make the element or its background at least partially transparent.\n   *\n   * **Initial value**: `none`\n   */\n  \"-webkit-backdrop-filter\"?: BackdropFilterProperty | BackdropFilterProperty[];\n  /**\n   * The **`backface-visibility`** CSS property sets whether the back face of an element is visible when turned towards the user.\n   *\n   * **Initial value**: `visible`\n   */\n  \"-webkit-backface-visibility\"?: BackfaceVisibilityProperty | BackfaceVisibilityProperty[];\n  /**\n   * The **`background-clip`** CSS property sets whether an element's background `<color>` or `<image>` extends underneath its border.\n   *\n   * **Initial value**: `border-box`\n   */\n  \"-webkit-background-clip\"?: BackgroundClipProperty | BackgroundClipProperty[];\n  /**\n   * The **`background-origin`** CSS property sets the _background positioning area_. In other words, it sets the origin position of an image set with the `background-image` property.\n   *\n   * **Initial value**: `padding-box`\n   */\n  \"-webkit-background-origin\"?: BackgroundOriginProperty | BackgroundOriginProperty[];\n  /**\n   * The **`background-size`** CSS property sets the size of the element's background image. The image can be left to its natural size, stretched, or constrained to fit the available space.\n   *\n   * **Initial value**: `auto auto`\n   */\n  \"-webkit-background-size\"?: BackgroundSizeProperty<TLength> | BackgroundSizeProperty<TLength>[];\n  /** **Initial value**: `currentcolor` */\n  \"-webkit-border-before-color\"?: WebkitBorderBeforeColorProperty | WebkitBorderBeforeColorProperty[];\n  /** **Initial value**: `none` */\n  \"-webkit-border-before-style\"?: WebkitBorderBeforeStyleProperty | WebkitBorderBeforeStyleProperty[];\n  /** **Initial value**: `medium` */\n  \"-webkit-border-before-width\"?: WebkitBorderBeforeWidthProperty<TLength> | WebkitBorderBeforeWidthProperty<TLength>[];\n  /**\n   * The **`border-bottom-left-radius`** CSS property rounds the bottom-left corner of an element.\n   *\n   * **Initial value**: `0`\n   */\n  \"-webkit-border-bottom-left-radius\"?: BorderBottomLeftRadiusProperty<TLength> | BorderBottomLeftRadiusProperty<TLength>[];\n  /**\n   * The **`border-bottom-right-radius`** CSS property rounds the bottom-right corner of an element.\n   *\n   * **Initial value**: `0`\n   */\n  \"-webkit-border-bottom-right-radius\"?: BorderBottomRightRadiusProperty<TLength> | BorderBottomRightRadiusProperty<TLength>[];\n  /**\n   * The **`border-image-slice`** CSS property divides the image specified by `border-image-source` into regions. These regions form the components of an element's border image.\n   *\n   * **Initial value**: `100%`\n   */\n  \"-webkit-border-image-slice\"?: BorderImageSliceProperty | BorderImageSliceProperty[];\n  /**\n   * The **`border-top-left-radius`** CSS property rounds the top-left corner of an element.\n   *\n   * **Initial value**: `0`\n   */\n  \"-webkit-border-top-left-radius\"?: BorderTopLeftRadiusProperty<TLength> | BorderTopLeftRadiusProperty<TLength>[];\n  /**\n   * The **`border-top-right-radius`** CSS property rounds the top-right corner of an element.\n   *\n   * **Initial value**: `0`\n   */\n  \"-webkit-border-top-right-radius\"?: BorderTopRightRadiusProperty<TLength> | BorderTopRightRadiusProperty<TLength>[];\n  /**\n   * The **`box-decoration-break`** CSS property specifies how an element's fragments should be rendered when broken across multiple lines, columns, or pages.\n   *\n   * **Initial value**: `slice`\n   */\n  \"-webkit-box-decoration-break\"?: BoxDecorationBreakProperty | BoxDecorationBreakProperty[];\n  /**\n   * The **`-webkit-box-reflect`** CSS property lets you reflect the content of an element in one specific direction.\n   *\n   * **Initial value**: `none`\n   */\n  \"-webkit-box-reflect\"?: WebkitBoxReflectProperty<TLength> | WebkitBoxReflectProperty<TLength>[];\n  /**\n   * The **`box-shadow`** CSS property adds shadow effects around an element's frame. You can set multiple effects separated by commas. A box shadow is described by X and Y offsets relative to the element, blur and spread radii, and color.\n   *\n   * **Initial value**: `none`\n   */\n  \"-webkit-box-shadow\"?: BoxShadowProperty | BoxShadowProperty[];\n  /**\n   * The **`box-sizing`** CSS property defines how the user agent should calculate the total width and height of an element.\n   *\n   * **Initial value**: `content-box`\n   */\n  \"-webkit-box-sizing\"?: BoxSizingProperty | BoxSizingProperty[];\n  /**\n   * The `**clip-path**` CSS property creates a clipping region that sets what part of an element should be shown. Parts that are inside the region are shown, while those outside are hidden.\n   *\n   * **Initial value**: `none`\n   */\n  \"-webkit-clip-path\"?: ClipPathProperty | ClipPathProperty[];\n  /**\n   * The **`color-adjust`** CSS property sets what, if anything, the user agent may do to optimize the appearance of the element on the output device. By default, the browser is allowed to make any adjustments to the element's appearance it determines to be necessary and prudent given the type and capabilities of the output device.\n   *\n   * **Initial value**: `economy`\n   */\n  \"-webkit-color-adjust\"?: ColorAdjustProperty | ColorAdjustProperty[];\n  /**\n   * The **`column-count`** CSS property breaks an element's content into the specified number of columns.\n   *\n   * **Initial value**: `auto`\n   */\n  \"-webkit-column-count\"?: ColumnCountProperty | ColumnCountProperty[];\n  /**\n   * The **`column-fill`** CSS property controls how an element's contents are balanced when broken into columns.\n   *\n   * **Initial value**: `balance`\n   */\n  \"-webkit-column-fill\"?: ColumnFillProperty | ColumnFillProperty[];\n  /**\n   * The **`column-gap`** CSS property sets the size of the gap (gutter) between an element's columns.\n   *\n   * **Initial value**: `normal`\n   */\n  \"-webkit-column-gap\"?: ColumnGapProperty<TLength> | ColumnGapProperty<TLength>[];\n  /**\n   * The **`column-rule-color`** CSS property sets the color of the rule (line) drawn between columns in a multi-column layout.\n   *\n   * **Initial value**: `currentcolor`\n   */\n  \"-webkit-column-rule-color\"?: ColumnRuleColorProperty | ColumnRuleColorProperty[];\n  /**\n   * The **`column-rule-style`** CSS property sets the style of the line drawn between columns in a multi-column layout.\n   *\n   * **Initial value**: `none`\n   */\n  \"-webkit-column-rule-style\"?: ColumnRuleStyleProperty | ColumnRuleStyleProperty[];\n  /**\n   * The **`column-rule-width`** CSS property sets the width of the rule (line) drawn between columns in a multi-column layout.\n   *\n   * **Initial value**: `medium`\n   */\n  \"-webkit-column-rule-width\"?: ColumnRuleWidthProperty<TLength> | ColumnRuleWidthProperty<TLength>[];\n  /**\n   * The **`column-span`** CSS property makes it possible for an element to span across all columns when its value is set to `all`.\n   *\n   * **Initial value**: `none`\n   */\n  \"-webkit-column-span\"?: ColumnSpanProperty | ColumnSpanProperty[];\n  /**\n   * The **`column-width`** CSS property specifies the ideal column width in a multi-column layout. The container will have as many columns as can fit without any of them having a width less than the `column-width` value. If the width of the container is narrower than the specified value, the single column's width will be smaller than the declared column width.\n   *\n   * **Initial value**: `auto`\n   */\n  \"-webkit-column-width\"?: ColumnWidthProperty<TLength> | ColumnWidthProperty<TLength>[];\n  /**\n   * The **`filter`** CSS property applies graphical effects like blur or color shift to an element. Filters are commonly used to adjust the rendering of images, backgrounds, and borders.\n   *\n   * **Initial value**: `none`\n   */\n  \"-webkit-filter\"?: FilterProperty | FilterProperty[];\n  /**\n   * The **`flex-basis`** CSS property sets the initial main size of a flex item. It sets the size of the content box unless otherwise set with `box-sizing`.\n   *\n   * **Initial value**: `auto`\n   */\n  \"-webkit-flex-basis\"?: FlexBasisProperty<TLength> | FlexBasisProperty<TLength>[];\n  /**\n   * The **`flex-direction`** CSS property sets how flex items are placed in the flex container defining the main axis and the direction (normal or reversed).\n   *\n   * **Initial value**: `row`\n   */\n  \"-webkit-flex-direction\"?: FlexDirectionProperty | FlexDirectionProperty[];\n  /**\n   * The **`flex-grow`** CSS property sets how much of the available space in the flex container should be assigned to that item (the flex grow factor). If all sibling items have the same flex grow factor, then all items will receive the same share of available space, otherwise it is distributed according to the ratio defined by the different flex grow factors.\n   *\n   * **Initial value**: `0`\n   */\n  \"-webkit-flex-grow\"?: GlobalsNumber | GlobalsNumber[];\n  /**\n   * The **`flex-shrink`** CSS property sets the flex shrink factor of a flex item. If the size of flex items is larger than the flex container, items shrink to fit according to `flex-shrink`.\n   *\n   * **Initial value**: `1`\n   */\n  \"-webkit-flex-shrink\"?: GlobalsNumber | GlobalsNumber[];\n  /**\n   * The **`flex-wrap`** CSS property sets whether flex items are forced onto one line or can wrap onto multiple lines. If wrapping is allowed, it sets the direction that lines are stacked.\n   *\n   * **Initial value**: `nowrap`\n   */\n  \"-webkit-flex-wrap\"?: FlexWrapProperty | FlexWrapProperty[];\n  /**\n   * The **`font-feature-settings`** CSS property controls advanced typographic features in OpenType fonts.\n   *\n   * **Initial value**: `normal`\n   */\n  \"-webkit-font-feature-settings\"?: FontFeatureSettingsProperty | FontFeatureSettingsProperty[];\n  /**\n   * The **`font-kerning`** CSS property sets the use of the kerning information stored in a font.\n   *\n   * **Initial value**: `auto`\n   */\n  \"-webkit-font-kerning\"?: FontKerningProperty | FontKerningProperty[];\n  /**\n   * The **`font-variant-ligatures`** CSS property controls which ligatures and contextual forms are used in textual content of the elements it applies to. This leads to more harmonized forms in the resulting text.\n   *\n   * **Initial value**: `normal`\n   */\n  \"-webkit-font-variant-ligatures\"?: FontVariantLigaturesProperty | FontVariantLigaturesProperty[];\n  /**\n   * The **`hyphens`** CSS property specifies how words should be hyphenated when text wraps across multiple lines. You can prevent hyphenation entirely, use hyphenation in manually-specified points within the text, or let the browser automatically insert hyphens where appropriate.\n   *\n   * **Initial value**: `manual`\n   */\n  \"-webkit-hyphens\"?: HyphensProperty | HyphensProperty[];\n  /**\n   * The CSS **`justify-content`** property defines how the browser distributes space between and around content items along the main-axis of a flex container, and the inline axis of a grid container.\n   *\n   * **Initial value**: `normal`\n   */\n  \"-webkit-justify-content\"?: JustifyContentProperty | JustifyContentProperty[];\n  /**\n   * The **`line-break`** CSS property sets how to break lines of Chinese, Japanese, or Korean (CJK) text when working with punctuation and symbols.\n   *\n   * **Initial value**: `auto`\n   */\n  \"-webkit-line-break\"?: LineBreakProperty | LineBreakProperty[];\n  /**\n   * The **`-webkit-line-clamp`** CSS property allows limiting of the contents of a block container to the specified number of lines.\n   *\n   * **Initial value**: `none`\n   */\n  \"-webkit-line-clamp\"?: WebkitLineClampProperty | WebkitLineClampProperty[];\n  /**\n   * The **`margin-inline-end`** CSS property defines the logical inline end margin of an element, which maps to a physical margin depending on the element's writing mode, directionality, and text orientation. In other words, it corresponds to the `margin-top`, `margin-right`, `margin-bottom` or `margin-left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `0`\n   */\n  \"-webkit-margin-end\"?: MarginInlineEndProperty<TLength> | MarginInlineEndProperty<TLength>[];\n  /**\n   * The **`margin-inline-start`** CSS property defines the logical inline start margin of an element, which maps to a physical margin depending on the element's writing mode, directionality, and text orientation. It corresponds to the `margin-top`, `margin-right`, `margin-bottom`, or `margin-left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `0`\n   */\n  \"-webkit-margin-start\"?: MarginInlineStartProperty<TLength> | MarginInlineStartProperty<TLength>[];\n  /**\n   * If a `-webkit-mask-image` is specified, `-webkit-mask-attachment` determines whether the mask image's position is fixed within the viewport, or scrolls along with its containing block.\n   *\n   * **Initial value**: `scroll`\n   */\n  \"-webkit-mask-attachment\"?: WebkitMaskAttachmentProperty | WebkitMaskAttachmentProperty[];\n  /**\n   * The **`mask-clip`** CSS property determines the area, which is affected by a mask. The painted content of an element must be restricted to this area.\n   *\n   * **Initial value**: `border`\n   */\n  \"-webkit-mask-clip\"?: WebkitMaskClipProperty | WebkitMaskClipProperty[];\n  /**\n   * The **`-webkit-mask-composite`** property specifies the manner in which multiple mask images applied to the same element are composited with one another. Mask images are composited in the opposite order that they are declared with the `-webkit-mask-image` property.\n   *\n   * **Initial value**: `source-over`\n   */\n  \"-webkit-mask-composite\"?: WebkitMaskCompositeProperty | WebkitMaskCompositeProperty[];\n  /**\n   * The **`mask-image`** CSS property sets the image that is used as mask layer for an element.\n   *\n   * **Initial value**: `none`\n   */\n  \"-webkit-mask-image\"?: WebkitMaskImageProperty | WebkitMaskImageProperty[];\n  /**\n   * The **`mask-origin`** CSS property sets the origin of a mask.\n   *\n   * **Initial value**: `padding`\n   */\n  \"-webkit-mask-origin\"?: WebkitMaskOriginProperty | WebkitMaskOriginProperty[];\n  /**\n   * The **`mask-position`** CSS property sets the initial position, relative to the mask position layer set by `mask-origin`, for each defined mask image.\n   *\n   * **Initial value**: `0% 0%`\n   */\n  \"-webkit-mask-position\"?: WebkitMaskPositionProperty<TLength> | WebkitMaskPositionProperty<TLength>[];\n  /**\n   * The `-webkit-mask-position-x` CSS property sets the initial horizontal position of a mask image.\n   *\n   * **Initial value**: `0%`\n   */\n  \"-webkit-mask-position-x\"?: WebkitMaskPositionXProperty<TLength> | WebkitMaskPositionXProperty<TLength>[];\n  /**\n   * The `-webkit-mask-position-y` CSS property sets the initial vertical position of a mask image.\n   *\n   * **Initial value**: `0%`\n   */\n  \"-webkit-mask-position-y\"?: WebkitMaskPositionYProperty<TLength> | WebkitMaskPositionYProperty<TLength>[];\n  /**\n   * The **`mask-repeat`** CSS property sets how mask images are repeated. A mask image can be repeated along the horizontal axis, the vertical axis, both axes, or not repeated at all.\n   *\n   * **Initial value**: `repeat`\n   */\n  \"-webkit-mask-repeat\"?: WebkitMaskRepeatProperty | WebkitMaskRepeatProperty[];\n  /**\n   * The `-webkit-mask-repeat-x` property specifies whether and how a mask image is repeated (tiled) horizontally.\n   *\n   * **Initial value**: `repeat`\n   */\n  \"-webkit-mask-repeat-x\"?: WebkitMaskRepeatXProperty | WebkitMaskRepeatXProperty[];\n  /**\n   * The `-webkit-mask-repeat-y` property sets whether and how a mask image is repeated (tiled) vertically.\n   *\n   * **Initial value**: `repeat`\n   */\n  \"-webkit-mask-repeat-y\"?: WebkitMaskRepeatYProperty | WebkitMaskRepeatYProperty[];\n  /**\n   * The **`mask-size`** CSS property specifies the sizes of the mask images. The size of the image can be fully or partially constrained in order to preserve its intrinsic ratio.\n   *\n   * **Initial value**: `auto auto`\n   */\n  \"-webkit-mask-size\"?: WebkitMaskSizeProperty<TLength> | WebkitMaskSizeProperty<TLength>[];\n  /**\n   * The **`max-inline-size`** CSS property defines the horizontal or vertical maximum size of an element's block depending on its writing mode. It corresponds to the `max-width` or the `max-height` property depending on the value defined for `writing-mode`. If the writing mode is vertically oriented, the value of `max-inline-size` relates to the maximal height of the element, otherwise it relates to the maximal width of the element. It relates to `max-block-size`, which defines the other dimension of the element.\n   *\n   * **Initial value**: `0`\n   */\n  \"-webkit-max-inline-size\"?: MaxInlineSizeProperty<TLength> | MaxInlineSizeProperty<TLength>[];\n  /**\n   * The **`order`** CSS property sets the order to lay out an item in a flex or grid container. Items in a container are sorted by ascending `order` value and then by their source code order.\n   *\n   * **Initial value**: `0`\n   */\n  \"-webkit-order\"?: GlobalsNumber | GlobalsNumber[];\n  /**\n   * The `-webkit-overflow-scrolling` CSS property controls whether or not touch devices use momentum-based scrolling for a given element.\n   *\n   * **Initial value**: `auto`\n   */\n  \"-webkit-overflow-scrolling\"?: WebkitOverflowScrollingProperty | WebkitOverflowScrollingProperty[];\n  /**\n   * The **`padding-inline-end`** CSS property defines the logical inline end padding of an element, which maps to a physical padding depending on the element's writing mode, directionality, and text orientation. It corresponds to the `padding-top`, `padding-right`, `padding-bottom`, or `padding-left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `0`\n   */\n  \"-webkit-padding-end\"?: PaddingInlineEndProperty<TLength> | PaddingInlineEndProperty<TLength>[];\n  /**\n   * The **`padding-inline-start`** CSS property defines the logical inline start padding of an element, which maps to a physical padding depending on the element's writing mode, directionality, and text orientation. It corresponds to the `padding-top`, `padding-right`, `padding-bottom`, or `padding-left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `0`\n   */\n  \"-webkit-padding-start\"?: PaddingInlineStartProperty<TLength> | PaddingInlineStartProperty<TLength>[];\n  /**\n   * The **`perspective`** CSS property determines the distance between the z=0 plane and the user in order to give a 3D-positioned element some perspective. Each 3D element with z>0 becomes larger; each 3D-element with z<0 becomes smaller. The strength of the effect is determined by the value of this property.\n   *\n   * **Initial value**: `none`\n   */\n  \"-webkit-perspective\"?: PerspectiveProperty<TLength> | PerspectiveProperty<TLength>[];\n  /**\n   * The **`perspective-origin`** CSS property determines the position at which the viewer is looking. It is used as the _vanishing point_ by the `perspective` property.\n   *\n   * **Initial value**: `50% 50%`\n   */\n  \"-webkit-perspective-origin\"?: PerspectiveOriginProperty<TLength> | PerspectiveOriginProperty<TLength>[];\n  /**\n   * The **`scroll-snap-type`** CSS property sets how strictly snap points are enforced on the scroll container in case there is one.\n   *\n   * **Initial value**: `none`\n   */\n  \"-webkit-scroll-snap-type\"?: ScrollSnapTypeProperty | ScrollSnapTypeProperty[];\n  /**\n   * The **`shape-margin`** CSS property sets a margin for a CSS shape created using `shape-outside`.\n   *\n   * **Initial value**: `0`\n   */\n  \"-webkit-shape-margin\"?: ShapeMarginProperty<TLength> | ShapeMarginProperty<TLength>[];\n  /**\n   * **`-webkit-tap-highlight-color`** is a non-standard CSS property that sets the color of the highlight that appears over a link while it's being tapped. The highlighting indicates to the user that their tap is being successfully recognized, and indicates which element they're tapping on.\n   *\n   * **Initial value**: `black`\n   */\n  \"-webkit-tap-highlight-color\"?: WebkitTapHighlightColorProperty | WebkitTapHighlightColorProperty[];\n  /**\n   * The **`text-combine-upright`** CSS property sets the combination of characters into the space of a single character. If the combined text is wider than 1em, the user agent must fit the contents within 1em. The resulting composition is treated as a single upright glyph for layout and decoration. This property only has an effect in vertical writing modes.\n   *\n   * **Initial value**: `none`\n   */\n  \"-webkit-text-combine\"?: TextCombineUprightProperty | TextCombineUprightProperty[];\n  /**\n   * The **`text-decoration-color`** CSS property sets the color of decorations added to text by `text-decoration-line`.\n   *\n   * **Initial value**: `currentcolor`\n   */\n  \"-webkit-text-decoration-color\"?: TextDecorationColorProperty | TextDecorationColorProperty[];\n  /**\n   * The **`text-decoration-line`** CSS property sets the kind of decoration that is used on text in an element, such as an underline or overline.\n   *\n   * **Initial value**: `none`\n   */\n  \"-webkit-text-decoration-line\"?: TextDecorationLineProperty | TextDecorationLineProperty[];\n  /**\n   * The **`text-decoration-skip`** CSS property sets what parts of an element’s content any text decoration affecting the element must skip over. It controls all text decoration lines drawn by the element and also any text decoration lines drawn by its ancestors.\n   *\n   * **Initial value**: `objects`\n   */\n  \"-webkit-text-decoration-skip\"?: TextDecorationSkipProperty | TextDecorationSkipProperty[];\n  /**\n   * The **`text-decoration-style`** CSS property sets the style of the lines specified by `text-decoration-line`. The style applies to all lines that are set with `text-decoration-line`.\n   *\n   * **Initial value**: `solid`\n   */\n  \"-webkit-text-decoration-style\"?: TextDecorationStyleProperty | TextDecorationStyleProperty[];\n  /**\n   * The **`text-emphasis-color`** CSS property sets the color of emphasis marks. This value can also be set using the `text-emphasis` shorthand.\n   *\n   * **Initial value**: `currentcolor`\n   */\n  \"-webkit-text-emphasis-color\"?: TextEmphasisColorProperty | TextEmphasisColorProperty[];\n  /**\n   * The **`text-emphasis-position`** CSS property sets where emphasis marks are drawn. Like ruby text, if there isn't enough room for emphasis marks, the line height is increased.\n   *\n   * **Initial value**: `over right`\n   */\n  \"-webkit-text-emphasis-position\"?: GlobalsString | GlobalsString[];\n  /**\n   * The **`text-emphasis-style`** CSS property sets the appearance of emphasis marks. It can also be set, and reset, using the `text-emphasis` shorthand.\n   *\n   * **Initial value**: `none`\n   */\n  \"-webkit-text-emphasis-style\"?: TextEmphasisStyleProperty | TextEmphasisStyleProperty[];\n  /**\n   * The **`-webkit-text-fill-color`** CSS property specifies the fill color of characters of text. If this property is not set, the value of the `color` property is used.\n   *\n   * **Initial value**: `currentcolor`\n   */\n  \"-webkit-text-fill-color\"?: WebkitTextFillColorProperty | WebkitTextFillColorProperty[];\n  /**\n   * The **`text-orientation`** CSS property sets the orientation of the text characters in a line. It only affects text in vertical mode (when `writing-mode` is not `horizontal-tb`). It is useful for controlling the display of languages that use vertical script, and also for making vertical table headers.\n   *\n   * **Initial value**: `mixed`\n   */\n  \"-webkit-text-orientation\"?: TextOrientationProperty | TextOrientationProperty[];\n  /**\n   * The **`text-size-adjust`** CSS property controls the text inflation algorithm used on some smartphones and tablets. Other browsers will ignore this property.\n   *\n   * **Initial value**: `auto` for smartphone browsers supporting inflation, `none` in other cases (and then not modifiable).\n   */\n  \"-webkit-text-size-adjust\"?: TextSizeAdjustProperty | TextSizeAdjustProperty[];\n  /**\n   * The **`-webkit-text-stroke-color`** CSS property specifies the stroke color of characters of text. If this property is not set, the value of the `color` property is used.\n   *\n   * **Initial value**: `currentcolor`\n   */\n  \"-webkit-text-stroke-color\"?: WebkitTextStrokeColorProperty | WebkitTextStrokeColorProperty[];\n  /**\n   * The **`-webkit-text-stroke-width`** CSS property specifies the width of the stroke for text.\n   *\n   * **Initial value**: `0`\n   */\n  \"-webkit-text-stroke-width\"?: WebkitTextStrokeWidthProperty<TLength> | WebkitTextStrokeWidthProperty<TLength>[];\n  /**\n   * The `-webkit-touch-callout` CSS property controls the display of the default callout shown when you touch and hold a touch target.\n   *\n   * **Initial value**: `default`\n   */\n  \"-webkit-touch-callout\"?: WebkitTouchCalloutProperty | WebkitTouchCalloutProperty[];\n  /**\n   * The **`transform`** CSS property lets you rotate, scale, skew, or translate an element. It modifies the coordinate space of the CSS visual formatting model.\n   *\n   * **Initial value**: `none`\n   */\n  \"-webkit-transform\"?: TransformProperty | TransformProperty[];\n  /**\n   * The **`transform-origin`** CSS property sets the origin for an element's transformations.\n   *\n   * **Initial value**: `50% 50% 0`\n   */\n  \"-webkit-transform-origin\"?: TransformOriginProperty<TLength> | TransformOriginProperty<TLength>[];\n  /**\n   * The **`transform-style`** CSS property sets whether children of an element are positioned in the 3D space or are flattened in the plane of the element.\n   *\n   * **Initial value**: `flat`\n   */\n  \"-webkit-transform-style\"?: TransformStyleProperty | TransformStyleProperty[];\n  /**\n   * The **`transition-delay`** CSS property specifies the duration to wait before starting a property's transition effect when its value changes.\n   *\n   * **Initial value**: `0s`\n   */\n  \"-webkit-transition-delay\"?: GlobalsString | GlobalsString[];\n  /**\n   * The **`transition-duration`** CSS property sets the length of time a transition animation should take to complete. By default, the value is `0s`, meaning that no animation will occur.\n   *\n   * **Initial value**: `0s`\n   */\n  \"-webkit-transition-duration\"?: GlobalsString | GlobalsString[];\n  /**\n   * The **`transition-property`** CSS property sets the CSS properties to which a transition effect should be applied.\n   *\n   * **Initial value**: all\n   */\n  \"-webkit-transition-property\"?: TransitionPropertyProperty | TransitionPropertyProperty[];\n  /**\n   * The **`transition-timing-function`** CSS property sets how intermediate values are calculated for CSS properties being affected by a transition effect.\n   *\n   * **Initial value**: `ease`\n   */\n  \"-webkit-transition-timing-function\"?: TransitionTimingFunctionProperty | TransitionTimingFunctionProperty[];\n  /** **Initial value**: `read-only` */\n  \"-webkit-user-modify\"?: WebkitUserModifyProperty | WebkitUserModifyProperty[];\n  /**\n   * The `**user-select**` CSS property controls whether the user can select text. This doesn't have any effect on content loaded as chrome, except in textboxes.\n   *\n   * **Initial value**: `auto`\n   */\n  \"-webkit-user-select\"?: UserSelectProperty | UserSelectProperty[];\n  /**\n   * The **`writing-mode`** CSS property sets whether lines of text are laid out horizontally or vertically, as well as the direction in which blocks progress.\n   *\n   * **Initial value**: `horizontal-tb`\n   */\n  \"-webkit-writing-mode\"?: WritingModeProperty | WritingModeProperty[];\n}\n\nexport interface VendorShorthandPropertiesHyphenFallback<TLength = string | 0> {\n  /** The **`animation`** shorthand CSS property sets an animated transition between styles. It is a shorthand for `animation-name`, `animation-duration`, `animation-timing-function`, `animation-delay`, `animation-iteration-count`, `animation-direction`, `animation-fill-mode`, and `animation-play-state`. */\n  \"-moz-animation\"?: AnimationProperty | AnimationProperty[];\n  /** The **`border-image`** CSS property draws an image in place of an element's `border-style`. */\n  \"-moz-border-image\"?: BorderImageProperty | BorderImageProperty[];\n  /** The **`column-rule`** CSS property sets the width, style, and color of the rule (line) drawn between columns in a multi-column layout. */\n  \"-moz-column-rule\"?: ColumnRuleProperty<TLength> | ColumnRuleProperty<TLength>[];\n  /** The **`columns`** CSS property sets the column width and column count of an element. */\n  \"-moz-columns\"?: ColumnsProperty<TLength> | ColumnsProperty<TLength>[];\n  /** The **`transition`** CSS property is a shorthand property for `transition-property`, `transition-duration`, `transition-timing-function`, and `transition-delay`. */\n  \"-moz-transition\"?: TransitionProperty | TransitionProperty[];\n  /** The **`-ms-content-zoom-limit`** CSS shorthand property is a Microsoft extension that specifies values for the `-ms-content-zoom-limit-min` and `-ms-content-zoom-limit-max` properties. */\n  \"-ms-content-zoom-limit\"?: GlobalsString | GlobalsString[];\n  /** The **`-ms-content-zoom-snap`** CSS shorthand property is a Microsoft extension that specifies values for the `-ms-content-zoom-snap-type` and `-ms-content-zoom-snap-points` properties. */\n  \"-ms-content-zoom-snap\"?: MsContentZoomSnapProperty | MsContentZoomSnapProperty[];\n  /** The **`flex`** CSS property sets how a flex item will grow or shrink to fit the space available in its flex container. It is a shorthand for `flex-grow`, `flex-shrink`, and `flex-basis`. */\n  \"-ms-flex\"?: FlexProperty<TLength> | FlexProperty<TLength>[];\n  /** The **\\-ms-scroll-limit** CSS property is a Microsoft extension that specifies values for the `-ms-scroll-limit-x-min`, `-ms-scroll-limit-y-min`, `-ms-scroll-limit-x-max`, and `-ms-scroll-limit-y-max` properties. */\n  \"-ms-scroll-limit\"?: GlobalsString | GlobalsString[];\n  /** The **`-ms-scroll-snap-x`** CSS shorthand property is a Microsoft extension that specifies values for the `-ms-scroll-snap-type` and `-ms-scroll-snap-points-x` properties. */\n  \"-ms-scroll-snap-x\"?: GlobalsString | GlobalsString[];\n  /** The **`-ms-scroll-snap-x`** CSS shorthand property is a Microsoft extension that specifies values for the `-ms-scroll-snap-type` and `-ms-scroll-snap-points-y` properties. */\n  \"-ms-scroll-snap-y\"?: GlobalsString | GlobalsString[];\n  /** The **`transition`** CSS property is a shorthand property for `transition-property`, `transition-duration`, `transition-timing-function`, and `transition-delay`. */\n  \"-ms-transition\"?: TransitionProperty | TransitionProperty[];\n  /** The **`animation`** shorthand CSS property sets an animated transition between styles. It is a shorthand for `animation-name`, `animation-duration`, `animation-timing-function`, `animation-delay`, `animation-iteration-count`, `animation-direction`, `animation-fill-mode`, and `animation-play-state`. */\n  \"-webkit-animation\"?: AnimationProperty | AnimationProperty[];\n  /** The **`-webkit-border-before`** CSS property is a shorthand property for setting the individual logical block start border property values in a single place in the style sheet. */\n  \"-webkit-border-before\"?: WebkitBorderBeforeProperty<TLength> | WebkitBorderBeforeProperty<TLength>[];\n  /** The **`border-image`** CSS property draws an image in place of an element's `border-style`. */\n  \"-webkit-border-image\"?: BorderImageProperty | BorderImageProperty[];\n  /** The **`border-radius`** CSS property rounds the corners of an element's outer border edge. You can set a single radius to make circular corners, or two radii to make elliptical corners. */\n  \"-webkit-border-radius\"?: BorderRadiusProperty<TLength> | BorderRadiusProperty<TLength>[];\n  /** The **`column-rule`** CSS property sets the width, style, and color of the rule (line) drawn between columns in a multi-column layout. */\n  \"-webkit-column-rule\"?: ColumnRuleProperty<TLength> | ColumnRuleProperty<TLength>[];\n  /** The **`columns`** CSS property sets the column width and column count of an element. */\n  \"-webkit-columns\"?: ColumnsProperty<TLength> | ColumnsProperty<TLength>[];\n  /** The **`flex`** CSS property sets how a flex item will grow or shrink to fit the space available in its flex container. It is a shorthand for `flex-grow`, `flex-shrink`, and `flex-basis`. */\n  \"-webkit-flex\"?: FlexProperty<TLength> | FlexProperty<TLength>[];\n  /** The **`flex-flow`** CSS property is a shorthand property for `flex-direction` and `flex-wrap` properties. */\n  \"-webkit-flex-flow\"?: FlexFlowProperty | FlexFlowProperty[];\n  /** The **`mask`** CSS property hides an element (partially or fully) by masking or clipping the image at specific points. */\n  \"-webkit-mask\"?: WebkitMaskProperty<TLength> | WebkitMaskProperty<TLength>[];\n  /** The **`text-emphasis`** CSS property applies emphasis marks to text (except spaces and control characters). It is a shorthand for `text-emphasis-style` and `text-emphasis-color`. */\n  \"-webkit-text-emphasis\"?: TextEmphasisProperty | TextEmphasisProperty[];\n  /** The **`-webkit-text-stroke`** CSS property specifies the width and color of strokes for text characters. This is a shorthand property for the longhand properties `-webkit-text-stroke-width` and `-webkit-text-stroke-color`. */\n  \"-webkit-text-stroke\"?: WebkitTextStrokeProperty<TLength> | WebkitTextStrokeProperty<TLength>[];\n  /** The **`transition`** CSS property is a shorthand property for `transition-property`, `transition-duration`, `transition-timing-function`, and `transition-delay`. */\n  \"-webkit-transition\"?: TransitionProperty | TransitionProperty[];\n}\n\nexport interface VendorPropertiesHyphenFallback<TLength = string | 0> extends VendorLonghandPropertiesHyphenFallback<TLength>, VendorShorthandPropertiesHyphenFallback<TLength> {}\n\nexport interface ObsoletePropertiesHyphenFallback<TLength = string | 0> {\n  /**\n   * The **`box-align`** CSS property specifies how an element aligns its contents across its layout in a perpendicular direction. The effect of the property is only visible if there is extra space in the box.\n   *\n   * **Initial value**: `stretch`\n   *\n   * @deprecated\n   */\n  \"box-align\"?: BoxAlignProperty | BoxAlignProperty[];\n  /**\n   * The **`box-direction`** CSS property specifies whether a box lays out its contents normally (from the top or left edge), or in reverse (from the bottom or right edge).\n   *\n   * **Initial value**: `normal`\n   *\n   * @deprecated\n   */\n  \"box-direction\"?: BoxDirectionProperty | BoxDirectionProperty[];\n  /**\n   * The **`-moz-box-flex`** and **`-webkit-box-flex`** CSS properties specify how a `-moz-box` or `-webkit-box` grows to fill the box that contains it, in the direction of the containing box's layout.\n   *\n   * **Initial value**: `0`\n   *\n   * @deprecated\n   */\n  \"box-flex\"?: GlobalsNumber | GlobalsNumber[];\n  /**\n   * The **`box-flex-group`** CSS property assigns the flexbox's child elements to a flex group.\n   *\n   * **Initial value**: `1`\n   *\n   * @deprecated\n   */\n  \"box-flex-group\"?: GlobalsNumber | GlobalsNumber[];\n  /**\n   * The **`box-lines`** CSS property determines whether the box may have a single or multiple lines (rows for horizontally oriented boxes, columns for vertically oriented boxes).\n   *\n   * **Initial value**: `single`\n   *\n   * @deprecated\n   */\n  \"box-lines\"?: BoxLinesProperty | BoxLinesProperty[];\n  /**\n   * The **`box-ordinal-group`** CSS property assigns the flexbox's child elements to an ordinal group.\n   *\n   * **Initial value**: `1`\n   *\n   * @deprecated\n   */\n  \"box-ordinal-group\"?: GlobalsNumber | GlobalsNumber[];\n  /**\n   * The **`box-orient`** CSS property specifies whether an element lays out its contents horizontally or vertically.\n   *\n   * **Initial value**: `inline-axis` (`horizontal` in XUL)\n   *\n   * @deprecated\n   */\n  \"box-orient\"?: BoxOrientProperty | BoxOrientProperty[];\n  /**\n   * The **`-moz-box-pack`** and **`-webkit-box-pack`** CSS properties specify how a `-moz-box` or `-webkit-box` packs its contents in the direction of its layout. The effect of this is only visible if there is extra space in the box.\n   *\n   * **Initial value**: `start`\n   *\n   * @deprecated\n   */\n  \"box-pack\"?: BoxPackProperty | BoxPackProperty[];\n  /**\n   * The **`clip`** CSS property defines what portion of an element is visible. The `clip` property applies only to absolutely positioned elements, that is elements with `position:absolute` or `position:fixed`.\n   *\n   * **Initial value**: `auto`\n   *\n   * @deprecated\n   */\n  clip?: ClipProperty | ClipProperty[];\n  /**\n   * The **`font-variant-alternates`** CSS property controls the usage of alternate glyphs. These alternate glyphs may be referenced by alternative names defined in `@font-feature-values`.\n   *\n   * **Initial value**: `normal`\n   *\n   * @deprecated\n   */\n  \"font-variant-alternates\"?: FontVariantAlternatesProperty | FontVariantAlternatesProperty[];\n  /**\n   * The **`column-gap`** CSS property sets the size of the gap (gutter) between an element's columns.\n   *\n   * **Initial value**: `0`\n   *\n   * @deprecated\n   */\n  \"grid-column-gap\"?: GridColumnGapProperty<TLength> | GridColumnGapProperty<TLength>[];\n  /**\n   * The **`gap`** CSS property sets the gaps (gutters) between rows and columns. It is a shorthand for `row-gap` and `column-gap`.\n   *\n   * @deprecated\n   */\n  \"grid-gap\"?: GridGapProperty<TLength> | GridGapProperty<TLength>[];\n  /**\n   * The **`row-gap`** CSS property sets the size of the gap (gutter) between an element's grid rows.\n   *\n   * **Initial value**: `0`\n   *\n   * @deprecated\n   */\n  \"grid-row-gap\"?: GridRowGapProperty<TLength> | GridRowGapProperty<TLength>[];\n  /**\n   * The **`ime-mode`** CSS property controls the state of the input method editor (IME) for text fields. This property is obsolete.\n   *\n   * **Initial value**: `auto`\n   *\n   * @deprecated\n   */\n  \"ime-mode\"?: ImeModeProperty | ImeModeProperty[];\n  /**\n   * The **`inset-block`** CSS property defines the logical block start and end offsets of an element, which maps to physical offsets depending on the element's writing mode, directionality, and text orientation. It corresponds to the `top` and `bottom`, or `right` and `left` properties depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `auto`\n   *\n   * @deprecated\n   */\n  \"offset-block\"?: InsetBlockProperty<TLength> | InsetBlockProperty<TLength>[];\n  /**\n   * The **`inset-block-end`** CSS property defines the logical block end offset of an element, which maps to a physical inset depending on the element's writing mode, directionality, and text orientation. It corresponds to the `top`, `right`, `bottom`, or `left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `auto`\n   *\n   * @deprecated\n   */\n  \"offset-block-end\"?: InsetBlockEndProperty<TLength> | InsetBlockEndProperty<TLength>[];\n  /**\n   * The **`inset-block-start`** CSS property defines the logical block start offset of an element, which maps to a physical inset depending on the element's writing mode, directionality, and text orientation. It corresponds to the `top`, `right`, `bottom`, or `left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `auto`\n   *\n   * @deprecated\n   */\n  \"offset-block-start\"?: InsetBlockStartProperty<TLength> | InsetBlockStartProperty<TLength>[];\n  /**\n   * The **`inset-inline`** CSS property defines the logical block start and end offsets of an element, which maps to physical offsets depending on the element's writing mode, directionality, and text orientation. It corresponds to the `top` and `bottom`, or `right` and `left` properties depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `auto`\n   *\n   * @deprecated\n   */\n  \"offset-inline\"?: InsetInlineProperty<TLength> | InsetInlineProperty<TLength>[];\n  /**\n   * The **`inset-inline-end`** CSS property defines the logical inline end inset of an element, which maps to a physical inset depending on the element's writing mode, directionality, and text orientation. It corresponds to the `top`, `right`, `bottom`, or `left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `auto`\n   *\n   * @deprecated\n   */\n  \"offset-inline-end\"?: InsetInlineEndProperty<TLength> | InsetInlineEndProperty<TLength>[];\n  /**\n   * The **`inset-inline-start`** CSS property defines the logical inline start inset of an element, which maps to a physical offset depending on the element's writing mode, directionality, and text orientation. It corresponds to the `top`, `right`, `bottom`, or `left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.\n   *\n   * **Initial value**: `auto`\n   *\n   * @deprecated\n   */\n  \"offset-inline-start\"?: InsetInlineStartProperty<TLength> | InsetInlineStartProperty<TLength>[];\n  /**\n   * The **`scroll-snap-coordinate`** CSS property defines the x and y coordinate positions within an element that will align with its nearest ancestor scroll container's `scroll-snap-destination` for each respective axis.\n   *\n   * **Initial value**: `none`\n   *\n   * @deprecated\n   */\n  \"scroll-snap-coordinate\"?: ScrollSnapCoordinateProperty<TLength> | ScrollSnapCoordinateProperty<TLength>[];\n  /**\n   * The **`scroll-snap-destination`** CSS property defines the position in x and y coordinates within the scroll container's visual viewport which element snap points align with.\n   *\n   * **Initial value**: `0px 0px`\n   *\n   * @deprecated\n   */\n  \"scroll-snap-destination\"?: ScrollSnapDestinationProperty<TLength> | ScrollSnapDestinationProperty<TLength>[];\n  /**\n   * The **`scroll-snap-points-x`** CSS property defines the horizontal positioning of snap points within the content of the scroll container they are applied to.\n   *\n   * **Initial value**: `none`\n   *\n   * @deprecated\n   */\n  \"scroll-snap-points-x\"?: ScrollSnapPointsXProperty | ScrollSnapPointsXProperty[];\n  /**\n   * The **`scroll-snap-points-y`** CSS property defines the vertical positioning of snap points within the content of the scroll container they are applied to.\n   *\n   * **Initial value**: `none`\n   *\n   * @deprecated\n   */\n  \"scroll-snap-points-y\"?: ScrollSnapPointsYProperty | ScrollSnapPointsYProperty[];\n  /**\n   * The **`scroll-snap-type-x`** CSS property defines how strictly snap points are enforced on the horizontal axis of the scroll container in case there is one.\n   *\n   * **Initial value**: `none`\n   *\n   * @deprecated\n   */\n  \"scroll-snap-type-x\"?: ScrollSnapTypeXProperty | ScrollSnapTypeXProperty[];\n  /**\n   * The **`scroll-snap-type-y`** CSS property defines how strictly snap points are enforced on the vertical axis of the scroll container in case there is one.\n   *\n   * **Initial value**: `none`\n   *\n   * @deprecated\n   */\n  \"scroll-snap-type-y\"?: ScrollSnapTypeYProperty | ScrollSnapTypeYProperty[];\n  /**\n   * The **`-ms-scrollbar-track-color`** CSS property is a Microsoft extension that specifies the color of the track element of a scrollbar.\n   *\n   * **Initial value**: `Scrollbar`\n   *\n   * @deprecated\n   */\n  \"scrollbar-track-color\"?: MsScrollbarTrackColorProperty | MsScrollbarTrackColorProperty[];\n  /**\n   * The **`text-combine-upright`** CSS property sets the combination of characters into the space of a single character. If the combined text is wider than 1em, the user agent must fit the contents within 1em. The resulting composition is treated as a single upright glyph for layout and decoration. This property only has an effect in vertical writing modes.\n   *\n   * **Initial value**: `none`\n   *\n   * @deprecated\n   */\n  \"text-combine-horizontal\"?: TextCombineUprightProperty | TextCombineUprightProperty[];\n  /**\n   * The **`box-align`** CSS property specifies how an element aligns its contents across its layout in a perpendicular direction. The effect of the property is only visible if there is extra space in the box.\n   *\n   * **Initial value**: `stretch`\n   *\n   * @deprecated\n   */\n  \"-khtml-box-align\"?: BoxAlignProperty | BoxAlignProperty[];\n  /**\n   * The **`box-direction`** CSS property specifies whether a box lays out its contents normally (from the top or left edge), or in reverse (from the bottom or right edge).\n   *\n   * **Initial value**: `normal`\n   *\n   * @deprecated\n   */\n  \"-khtml-box-direction\"?: BoxDirectionProperty | BoxDirectionProperty[];\n  /**\n   * The **`-moz-box-flex`** and **`-webkit-box-flex`** CSS properties specify how a `-moz-box` or `-webkit-box` grows to fill the box that contains it, in the direction of the containing box's layout.\n   *\n   * **Initial value**: `0`\n   *\n   * @deprecated\n   */\n  \"-khtml-box-flex\"?: GlobalsNumber | GlobalsNumber[];\n  /**\n   * The **`box-flex-group`** CSS property assigns the flexbox's child elements to a flex group.\n   *\n   * **Initial value**: `1`\n   *\n   * @deprecated\n   */\n  \"-khtml-box-flex-group\"?: GlobalsNumber | GlobalsNumber[];\n  /**\n   * The **`box-lines`** CSS property determines whether the box may have a single or multiple lines (rows for horizontally oriented boxes, columns for vertically oriented boxes).\n   *\n   * **Initial value**: `single`\n   *\n   * @deprecated\n   */\n  \"-khtml-box-lines\"?: BoxLinesProperty | BoxLinesProperty[];\n  /**\n   * The **`box-ordinal-group`** CSS property assigns the flexbox's child elements to an ordinal group.\n   *\n   * **Initial value**: `1`\n   *\n   * @deprecated\n   */\n  \"-khtml-box-ordinal-group\"?: GlobalsNumber | GlobalsNumber[];\n  /**\n   * The **`box-orient`** CSS property specifies whether an element lays out its contents horizontally or vertically.\n   *\n   * **Initial value**: `inline-axis` (`horizontal` in XUL)\n   *\n   * @deprecated\n   */\n  \"-khtml-box-orient\"?: BoxOrientProperty | BoxOrientProperty[];\n  /**\n   * The **`-moz-box-pack`** and **`-webkit-box-pack`** CSS properties specify how a `-moz-box` or `-webkit-box` packs its contents in the direction of its layout. The effect of this is only visible if there is extra space in the box.\n   *\n   * **Initial value**: `start`\n   *\n   * @deprecated\n   */\n  \"-khtml-box-pack\"?: BoxPackProperty | BoxPackProperty[];\n  /**\n   * The **`line-break`** CSS property sets how to break lines of Chinese, Japanese, or Korean (CJK) text when working with punctuation and symbols.\n   *\n   * **Initial value**: `auto`\n   *\n   * @deprecated\n   */\n  \"-khtml-line-break\"?: LineBreakProperty | LineBreakProperty[];\n  /**\n   * The **`opacity`** CSS property sets the transparency of an element or the degree to which content behind an element is visible.\n   *\n   * **Initial value**: `1.0`\n   *\n   * @deprecated\n   */\n  \"-khtml-opacity\"?: OpacityProperty | OpacityProperty[];\n  /**\n   * The `**user-select**` CSS property controls whether the user can select text. This doesn't have any effect on content loaded as chrome, except in textboxes.\n   *\n   * **Initial value**: `auto`\n   *\n   * @deprecated\n   */\n  \"-khtml-user-select\"?: UserSelectProperty | UserSelectProperty[];\n  /**\n   * The **`background-clip`** CSS property sets whether an element's background `<color>` or `<image>` extends underneath its border.\n   *\n   * **Initial value**: `border-box`\n   *\n   * @deprecated\n   */\n  \"-moz-background-clip\"?: BackgroundClipProperty | BackgroundClipProperty[];\n  /**\n   * The **`box-decoration-break`** CSS property specifies how an element's fragments should be rendered when broken across multiple lines, columns, or pages.\n   *\n   * **Initial value**: `slice`\n   *\n   * @deprecated\n   */\n  \"-moz-background-inline-policy\"?: BoxDecorationBreakProperty | BoxDecorationBreakProperty[];\n  /**\n   * The **`background-origin`** CSS property sets the _background positioning area_. In other words, it sets the origin position of an image set with the `background-image` property.\n   *\n   * **Initial value**: `padding-box`\n   *\n   * @deprecated\n   */\n  \"-moz-background-origin\"?: BackgroundOriginProperty | BackgroundOriginProperty[];\n  /**\n   * The **`background-size`** CSS property sets the size of the element's background image. The image can be left to its natural size, stretched, or constrained to fit the available space.\n   *\n   * **Initial value**: `auto auto`\n   *\n   * @deprecated\n   */\n  \"-moz-background-size\"?: BackgroundSizeProperty<TLength> | BackgroundSizeProperty<TLength>[];\n  /**\n   * The **`-moz-binding`** CSS property is used by Mozilla-based applications to attach an XBL binding to a DOM element.\n   *\n   * **Initial value**: `none`\n   *\n   * @deprecated\n   */\n  \"-moz-binding\"?: MozBindingProperty | MozBindingProperty[];\n  /**\n   * In Mozilla applications like Firefox, the **`-moz-border-bottom-colors`** CSS property sets a list of colors for the bottom border.\n   *\n   * **Initial value**: `none`\n   *\n   * @deprecated\n   */\n  \"-moz-border-bottom-colors\"?: MozBorderBottomColorsProperty | MozBorderBottomColorsProperty[];\n  /**\n   * In Mozilla applications like Firefox, the **`-moz-border-left-colors`** CSS property sets a list of colors for the left border.\n   *\n   * **Initial value**: `none`\n   *\n   * @deprecated\n   */\n  \"-moz-border-left-colors\"?: MozBorderLeftColorsProperty | MozBorderLeftColorsProperty[];\n  /**\n   * The **`border-radius`** CSS property rounds the corners of an element's outer border edge. You can set a single radius to make circular corners, or two radii to make elliptical corners.\n   *\n   * @deprecated\n   */\n  \"-moz-border-radius\"?: BorderRadiusProperty<TLength> | BorderRadiusProperty<TLength>[];\n  /**\n   * The **`border-bottom-left-radius`** CSS property rounds the bottom-left corner of an element.\n   *\n   * **Initial value**: `0`\n   *\n   * @deprecated\n   */\n  \"-moz-border-radius-bottomleft\"?: BorderBottomLeftRadiusProperty<TLength> | BorderBottomLeftRadiusProperty<TLength>[];\n  /**\n   * The **`border-bottom-right-radius`** CSS property rounds the bottom-right corner of an element.\n   *\n   * **Initial value**: `0`\n   *\n   * @deprecated\n   */\n  \"-moz-border-radius-bottomright\"?: BorderBottomRightRadiusProperty<TLength> | BorderBottomRightRadiusProperty<TLength>[];\n  /**\n   * The **`border-top-left-radius`** CSS property rounds the top-left corner of an element.\n   *\n   * **Initial value**: `0`\n   *\n   * @deprecated\n   */\n  \"-moz-border-radius-topleft\"?: BorderTopLeftRadiusProperty<TLength> | BorderTopLeftRadiusProperty<TLength>[];\n  /**\n   * The **`border-top-right-radius`** CSS property rounds the top-right corner of an element.\n   *\n   * **Initial value**: `0`\n   *\n   * @deprecated\n   */\n  \"-moz-border-radius-topright\"?: BorderTopRightRadiusProperty<TLength> | BorderTopRightRadiusProperty<TLength>[];\n  /**\n   * In Mozilla applications like Firefox, the **`-moz-border-right-colors`** CSS property sets a list of colors for the right border.\n   *\n   * **Initial value**: `none`\n   *\n   * @deprecated\n   */\n  \"-moz-border-right-colors\"?: MozBorderRightColorsProperty | MozBorderRightColorsProperty[];\n  /**\n   * In Mozilla applications like Firefox, the **`-moz-border-top-colors`** CSS property sets a list of colors for the top border.\n   *\n   * **Initial value**: `none`\n   *\n   * @deprecated\n   */\n  \"-moz-border-top-colors\"?: MozBorderTopColorsProperty | MozBorderTopColorsProperty[];\n  /**\n   * The **`box-align`** CSS property specifies how an element aligns its contents across its layout in a perpendicular direction. The effect of the property is only visible if there is extra space in the box.\n   *\n   * **Initial value**: `stretch`\n   *\n   * @deprecated\n   */\n  \"-moz-box-align\"?: BoxAlignProperty | BoxAlignProperty[];\n  /**\n   * The **`box-direction`** CSS property specifies whether a box lays out its contents normally (from the top or left edge), or in reverse (from the bottom or right edge).\n   *\n   * **Initial value**: `normal`\n   *\n   * @deprecated\n   */\n  \"-moz-box-direction\"?: BoxDirectionProperty | BoxDirectionProperty[];\n  /**\n   * The **`-moz-box-flex`** and **`-webkit-box-flex`** CSS properties specify how a `-moz-box` or `-webkit-box` grows to fill the box that contains it, in the direction of the containing box's layout.\n   *\n   * **Initial value**: `0`\n   *\n   * @deprecated\n   */\n  \"-moz-box-flex\"?: GlobalsNumber | GlobalsNumber[];\n  /**\n   * The **`box-ordinal-group`** CSS property assigns the flexbox's child elements to an ordinal group.\n   *\n   * **Initial value**: `1`\n   *\n   * @deprecated\n   */\n  \"-moz-box-ordinal-group\"?: GlobalsNumber | GlobalsNumber[];\n  /**\n   * The **`box-orient`** CSS property specifies whether an element lays out its contents horizontally or vertically.\n   *\n   * **Initial value**: `inline-axis` (`horizontal` in XUL)\n   *\n   * @deprecated\n   */\n  \"-moz-box-orient\"?: BoxOrientProperty | BoxOrientProperty[];\n  /**\n   * The **`-moz-box-pack`** and **`-webkit-box-pack`** CSS properties specify how a `-moz-box` or `-webkit-box` packs its contents in the direction of its layout. The effect of this is only visible if there is extra space in the box.\n   *\n   * **Initial value**: `start`\n   *\n   * @deprecated\n   */\n  \"-moz-box-pack\"?: BoxPackProperty | BoxPackProperty[];\n  /**\n   * The **`box-shadow`** CSS property adds shadow effects around an element's frame. You can set multiple effects separated by commas. A box shadow is described by X and Y offsets relative to the element, blur and spread radii, and color.\n   *\n   * **Initial value**: `none`\n   *\n   * @deprecated\n   */\n  \"-moz-box-shadow\"?: BoxShadowProperty | BoxShadowProperty[];\n  /**\n   * The **`opacity`** CSS property sets the transparency of an element or the degree to which content behind an element is visible.\n   *\n   * **Initial value**: `1.0`\n   *\n   * @deprecated\n   */\n  \"-moz-opacity\"?: OpacityProperty | OpacityProperty[];\n  /**\n   * The **`outline`** CSS property is a shorthand to set various outline properties in a single declaration: `outline-style`, `outline-width`, and `outline-color`.\n   *\n   * @deprecated\n   */\n  \"-moz-outline\"?: OutlineProperty<TLength> | OutlineProperty<TLength>[];\n  /**\n   * The **`outline-color`** CSS property sets the color of an element's outline.\n   *\n   * **Initial value**: `invert`, for browsers supporting it, `currentColor` for the other\n   *\n   * @deprecated\n   */\n  \"-moz-outline-color\"?: OutlineColorProperty | OutlineColorProperty[];\n  /**\n   * In Mozilla applications like Firefox, the **`-moz-outline-radius`** CSS property can be used to give an element's `outline` rounded corners.\n   *\n   * @deprecated\n   */\n  \"-moz-outline-radius\"?: MozOutlineRadiusProperty<TLength> | MozOutlineRadiusProperty<TLength>[];\n  /**\n   * The **`outline-style`** CSS property sets the style of an element's outline. An outline is a line that is drawn around an element, outside the `border`.\n   *\n   * **Initial value**: `none`\n   *\n   * @deprecated\n   */\n  \"-moz-outline-style\"?: OutlineStyleProperty | OutlineStyleProperty[];\n  /**\n   * The **`outline-width`** CSS property sets the thickness of an element's outline. An outline is a line that is drawn around an element, outside the `border`.\n   *\n   * **Initial value**: `medium`\n   *\n   * @deprecated\n   */\n  \"-moz-outline-width\"?: OutlineWidthProperty<TLength> | OutlineWidthProperty<TLength>[];\n  /**\n   * The **`text-align-last`** CSS property sets how the last line of a block or a line, right before a forced line break, is aligned.\n   *\n   * **Initial value**: `auto`\n   *\n   * @deprecated\n   */\n  \"-moz-text-align-last\"?: TextAlignLastProperty | TextAlignLastProperty[];\n  /**\n   * The **`-moz-text-blink`** non-standard Mozilla CSS extension specifies the blink mode.\n   *\n   * **Initial value**: `none`\n   *\n   * @deprecated\n   */\n  \"-moz-text-blink\"?: MozTextBlinkProperty | MozTextBlinkProperty[];\n  /**\n   * The **`text-decoration-color`** CSS property sets the color of decorations added to text by `text-decoration-line`.\n   *\n   * **Initial value**: `currentcolor`\n   *\n   * @deprecated\n   */\n  \"-moz-text-decoration-color\"?: TextDecorationColorProperty | TextDecorationColorProperty[];\n  /**\n   * The **`text-decoration-line`** CSS property sets the kind of decoration that is used on text in an element, such as an underline or overline.\n   *\n   * **Initial value**: `none`\n   *\n   * @deprecated\n   */\n  \"-moz-text-decoration-line\"?: TextDecorationLineProperty | TextDecorationLineProperty[];\n  /**\n   * The **`text-decoration-style`** CSS property sets the style of the lines specified by `text-decoration-line`. The style applies to all lines that are set with `text-decoration-line`.\n   *\n   * **Initial value**: `solid`\n   *\n   * @deprecated\n   */\n  \"-moz-text-decoration-style\"?: TextDecorationStyleProperty | TextDecorationStyleProperty[];\n  /**\n   * In Mozilla applications, **`-moz-user-input`** determines if an element will accept user input.\n   *\n   * **Initial value**: `auto`\n   *\n   * @deprecated\n   */\n  \"-moz-user-input\"?: MozUserInputProperty | MozUserInputProperty[];\n  /**\n   * The **`-moz-window-shadow`** CSS property specifies whether a window will have a shadow. It only works on Mac OS X.\n   *\n   * **Initial value**: `default`\n   *\n   * @deprecated\n   */\n  \"-moz-window-shadow\"?: MozWindowShadowProperty | MozWindowShadowProperty[];\n  /**\n   * The **`ime-mode`** CSS property controls the state of the input method editor (IME) for text fields. This property is obsolete.\n   *\n   * **Initial value**: `auto`\n   *\n   * @deprecated\n   */\n  \"-ms-ime-mode\"?: ImeModeProperty | ImeModeProperty[];\n  /**\n   * The **`-ms-scrollbar-track-color`** CSS property is a Microsoft extension that specifies the color of the track element of a scrollbar.\n   *\n   * **Initial value**: `Scrollbar`\n   *\n   * @deprecated\n   */\n  \"-ms-scrollbar-track-color\"?: MsScrollbarTrackColorProperty | MsScrollbarTrackColorProperty[];\n  /**\n   * The **`animation`** shorthand CSS property sets an animated transition between styles. It is a shorthand for `animation-name`, `animation-duration`, `animation-timing-function`, `animation-delay`, `animation-iteration-count`, `animation-direction`, `animation-fill-mode`, and `animation-play-state`.\n   *\n   * @deprecated\n   */\n  \"-o-animation\"?: AnimationProperty | AnimationProperty[];\n  /**\n   * The **`animation-delay`** CSS property sets when an animation starts. The animation can start later, immediately from its beginning, or immediately and partway through the animation.\n   *\n   * **Initial value**: `0s`\n   *\n   * @deprecated\n   */\n  \"-o-animation-delay\"?: GlobalsString | GlobalsString[];\n  /**\n   * The **`animation-direction`** CSS property sets whether an animation should play forwards, backwards, or alternating back and forth.\n   *\n   * **Initial value**: `normal`\n   *\n   * @deprecated\n   */\n  \"-o-animation-direction\"?: AnimationDirectionProperty | AnimationDirectionProperty[];\n  /**\n   * The **`animation-duration`** CSS property sets the length of time that an animation takes to complete one cycle.\n   *\n   * **Initial value**: `0s`\n   *\n   * @deprecated\n   */\n  \"-o-animation-duration\"?: GlobalsString | GlobalsString[];\n  /**\n   * The **`animation-fill-mode`** CSS property sets how a CSS animation applies styles to its target before and after its execution.\n   *\n   * **Initial value**: `none`\n   *\n   * @deprecated\n   */\n  \"-o-animation-fill-mode\"?: AnimationFillModeProperty | AnimationFillModeProperty[];\n  /**\n   * The **`animation-iteration-count`** CSS property sets the number of times an animation cycle should be played before stopping.\n   *\n   * **Initial value**: `1`\n   *\n   * @deprecated\n   */\n  \"-o-animation-iteration-count\"?: AnimationIterationCountProperty | AnimationIterationCountProperty[];\n  /**\n   * The **`animation-name`** CSS property sets one or more animations to apply to an element. Each name is an `@keyframes` at-rule that sets the property values for the animation sequence.\n   *\n   * **Initial value**: `none`\n   *\n   * @deprecated\n   */\n  \"-o-animation-name\"?: AnimationNameProperty | AnimationNameProperty[];\n  /**\n   * The **`animation-play-state`** CSS property sets whether an animation is running or paused.\n   *\n   * **Initial value**: `running`\n   *\n   * @deprecated\n   */\n  \"-o-animation-play-state\"?: AnimationPlayStateProperty | AnimationPlayStateProperty[];\n  /**\n   * The `**animation-timing-function**` CSS property sets how an animation progresses through the duration of each cycle.\n   *\n   * **Initial value**: `ease`\n   *\n   * @deprecated\n   */\n  \"-o-animation-timing-function\"?: AnimationTimingFunctionProperty | AnimationTimingFunctionProperty[];\n  /**\n   * The **`background-size`** CSS property sets the size of the element's background image. The image can be left to its natural size, stretched, or constrained to fit the available space.\n   *\n   * **Initial value**: `auto auto`\n   *\n   * @deprecated\n   */\n  \"-o-background-size\"?: BackgroundSizeProperty<TLength> | BackgroundSizeProperty<TLength>[];\n  /**\n   * The **`border-image`** CSS property draws an image in place of an element's `border-style`.\n   *\n   * @deprecated\n   */\n  \"-o-border-image\"?: BorderImageProperty | BorderImageProperty[];\n  /**\n   * The **`transform`** CSS property lets you rotate, scale, skew, or translate an element. It modifies the coordinate space of the CSS visual formatting model.\n   *\n   * **Initial value**: `none`\n   *\n   * @deprecated\n   */\n  \"-o-transform\"?: TransformProperty | TransformProperty[];\n  /**\n   * The **`transition`** CSS property is a shorthand property for `transition-property`, `transition-duration`, `transition-timing-function`, and `transition-delay`.\n   *\n   * @deprecated\n   */\n  \"-o-transition\"?: TransitionProperty | TransitionProperty[];\n  /**\n   * The **`transition-delay`** CSS property specifies the duration to wait before starting a property's transition effect when its value changes.\n   *\n   * **Initial value**: `0s`\n   *\n   * @deprecated\n   */\n  \"-o-transition-delay\"?: GlobalsString | GlobalsString[];\n  /**\n   * The **`transition-duration`** CSS property sets the length of time a transition animation should take to complete. By default, the value is `0s`, meaning that no animation will occur.\n   *\n   * **Initial value**: `0s`\n   *\n   * @deprecated\n   */\n  \"-o-transition-duration\"?: GlobalsString | GlobalsString[];\n  /**\n   * The **`transition-property`** CSS property sets the CSS properties to which a transition effect should be applied.\n   *\n   * **Initial value**: all\n   *\n   * @deprecated\n   */\n  \"-o-transition-property\"?: TransitionPropertyProperty | TransitionPropertyProperty[];\n  /**\n   * The **`transition-timing-function`** CSS property sets how intermediate values are calculated for CSS properties being affected by a transition effect.\n   *\n   * **Initial value**: `ease`\n   *\n   * @deprecated\n   */\n  \"-o-transition-timing-function\"?: TransitionTimingFunctionProperty | TransitionTimingFunctionProperty[];\n  /**\n   * The **`box-align`** CSS property specifies how an element aligns its contents across its layout in a perpendicular direction. The effect of the property is only visible if there is extra space in the box.\n   *\n   * **Initial value**: `stretch`\n   *\n   * @deprecated\n   */\n  \"-webkit-box-align\"?: BoxAlignProperty | BoxAlignProperty[];\n  /**\n   * The **`box-direction`** CSS property specifies whether a box lays out its contents normally (from the top or left edge), or in reverse (from the bottom or right edge).\n   *\n   * **Initial value**: `normal`\n   *\n   * @deprecated\n   */\n  \"-webkit-box-direction\"?: BoxDirectionProperty | BoxDirectionProperty[];\n  /**\n   * The **`-moz-box-flex`** and **`-webkit-box-flex`** CSS properties specify how a `-moz-box` or `-webkit-box` grows to fill the box that contains it, in the direction of the containing box's layout.\n   *\n   * **Initial value**: `0`\n   *\n   * @deprecated\n   */\n  \"-webkit-box-flex\"?: GlobalsNumber | GlobalsNumber[];\n  /**\n   * The **`box-flex-group`** CSS property assigns the flexbox's child elements to a flex group.\n   *\n   * **Initial value**: `1`\n   *\n   * @deprecated\n   */\n  \"-webkit-box-flex-group\"?: GlobalsNumber | GlobalsNumber[];\n  /**\n   * The **`box-lines`** CSS property determines whether the box may have a single or multiple lines (rows for horizontally oriented boxes, columns for vertically oriented boxes).\n   *\n   * **Initial value**: `single`\n   *\n   * @deprecated\n   */\n  \"-webkit-box-lines\"?: BoxLinesProperty | BoxLinesProperty[];\n  /**\n   * The **`box-ordinal-group`** CSS property assigns the flexbox's child elements to an ordinal group.\n   *\n   * **Initial value**: `1`\n   *\n   * @deprecated\n   */\n  \"-webkit-box-ordinal-group\"?: GlobalsNumber | GlobalsNumber[];\n  /**\n   * The **`box-orient`** CSS property specifies whether an element lays out its contents horizontally or vertically.\n   *\n   * **Initial value**: `inline-axis` (`horizontal` in XUL)\n   *\n   * @deprecated\n   */\n  \"-webkit-box-orient\"?: BoxOrientProperty | BoxOrientProperty[];\n  /**\n   * The **`-moz-box-pack`** and **`-webkit-box-pack`** CSS properties specify how a `-moz-box` or `-webkit-box` packs its contents in the direction of its layout. The effect of this is only visible if there is extra space in the box.\n   *\n   * **Initial value**: `start`\n   *\n   * @deprecated\n   */\n  \"-webkit-box-pack\"?: BoxPackProperty | BoxPackProperty[];\n  /**\n   * The **`scroll-snap-points-x`** CSS property defines the horizontal positioning of snap points within the content of the scroll container they are applied to.\n   *\n   * **Initial value**: `none`\n   *\n   * @deprecated\n   */\n  \"-webkit-scroll-snap-points-x\"?: ScrollSnapPointsXProperty | ScrollSnapPointsXProperty[];\n  /**\n   * The **`scroll-snap-points-y`** CSS property defines the vertical positioning of snap points within the content of the scroll container they are applied to.\n   *\n   * **Initial value**: `none`\n   *\n   * @deprecated\n   */\n  \"-webkit-scroll-snap-points-y\"?: ScrollSnapPointsYProperty | ScrollSnapPointsYProperty[];\n}\n\nexport interface SvgPropertiesHyphenFallback<TLength = string | 0> {\n  \"alignment-baseline\"?: AlignmentBaselineProperty | AlignmentBaselineProperty[];\n  \"baseline-shift\"?: BaselineShiftProperty<TLength> | BaselineShiftProperty<TLength>[];\n  clip?: ClipProperty | ClipProperty[];\n  \"clip-path\"?: ClipPathProperty | ClipPathProperty[];\n  \"clip-rule\"?: ClipRuleProperty | ClipRuleProperty[];\n  color?: ColorProperty | ColorProperty[];\n  \"color-interpolation\"?: ColorInterpolationProperty | ColorInterpolationProperty[];\n  \"color-rendering\"?: ColorRenderingProperty | ColorRenderingProperty[];\n  cursor?: CursorProperty | CursorProperty[];\n  direction?: DirectionProperty | DirectionProperty[];\n  display?: DisplayProperty | DisplayProperty[];\n  \"dominant-baseline\"?: DominantBaselineProperty | DominantBaselineProperty[];\n  fill?: FillProperty | FillProperty[];\n  \"fill-opacity\"?: GlobalsNumber | GlobalsNumber[];\n  \"fill-rule\"?: FillRuleProperty | FillRuleProperty[];\n  filter?: FilterProperty | FilterProperty[];\n  \"flood-color\"?: FloodColorProperty | FloodColorProperty[];\n  \"flood-opacity\"?: GlobalsNumber | GlobalsNumber[];\n  font?: FontProperty | FontProperty[];\n  \"font-family\"?: FontFamilyProperty | FontFamilyProperty[];\n  \"font-size\"?: FontSizeProperty<TLength> | FontSizeProperty<TLength>[];\n  \"font-size-adjust\"?: FontSizeAdjustProperty | FontSizeAdjustProperty[];\n  \"font-stretch\"?: FontStretchProperty | FontStretchProperty[];\n  \"font-style\"?: FontStyleProperty | FontStyleProperty[];\n  \"font-variant\"?: FontVariantProperty | FontVariantProperty[];\n  \"font-weight\"?: FontWeightProperty | FontWeightProperty[];\n  \"glyph-orientation-vertical\"?: GlyphOrientationVerticalProperty | GlyphOrientationVerticalProperty[];\n  \"image-rendering\"?: ImageRenderingProperty | ImageRenderingProperty[];\n  \"letter-spacing\"?: LetterSpacingProperty<TLength> | LetterSpacingProperty<TLength>[];\n  \"lighting-color\"?: LightingColorProperty | LightingColorProperty[];\n  \"line-height\"?: LineHeightProperty<TLength> | LineHeightProperty<TLength>[];\n  marker?: MarkerProperty | MarkerProperty[];\n  \"marker-end\"?: MarkerEndProperty | MarkerEndProperty[];\n  \"marker-mid\"?: MarkerMidProperty | MarkerMidProperty[];\n  \"marker-start\"?: MarkerStartProperty | MarkerStartProperty[];\n  mask?: MaskProperty<TLength> | MaskProperty<TLength>[];\n  opacity?: OpacityProperty | OpacityProperty[];\n  overflow?: OverflowProperty | OverflowProperty[];\n  \"paint-order\"?: PaintOrderProperty | PaintOrderProperty[];\n  \"pointer-events\"?: PointerEventsProperty | PointerEventsProperty[];\n  \"shape-rendering\"?: ShapeRenderingProperty | ShapeRenderingProperty[];\n  \"stop-color\"?: StopColorProperty | StopColorProperty[];\n  \"stop-opacity\"?: GlobalsNumber | GlobalsNumber[];\n  stroke?: StrokeProperty | StrokeProperty[];\n  \"stroke-dasharray\"?: StrokeDasharrayProperty<TLength> | StrokeDasharrayProperty<TLength>[];\n  \"stroke-dashoffset\"?: StrokeDashoffsetProperty<TLength> | StrokeDashoffsetProperty<TLength>[];\n  \"stroke-linecap\"?: StrokeLinecapProperty | StrokeLinecapProperty[];\n  \"stroke-linejoin\"?: StrokeLinejoinProperty | StrokeLinejoinProperty[];\n  \"stroke-miterlimit\"?: GlobalsNumber | GlobalsNumber[];\n  \"stroke-opacity\"?: GlobalsNumber | GlobalsNumber[];\n  \"stroke-width\"?: StrokeWidthProperty<TLength> | StrokeWidthProperty<TLength>[];\n  \"text-anchor\"?: TextAnchorProperty | TextAnchorProperty[];\n  \"text-decoration\"?: TextDecorationProperty<TLength> | TextDecorationProperty<TLength>[];\n  \"text-rendering\"?: TextRenderingProperty | TextRenderingProperty[];\n  \"unicode-bidi\"?: UnicodeBidiProperty | UnicodeBidiProperty[];\n  \"vector-effect\"?: VectorEffectProperty | VectorEffectProperty[];\n  visibility?: VisibilityProperty | VisibilityProperty[];\n  \"white-space\"?: WhiteSpaceProperty | WhiteSpaceProperty[];\n  \"word-spacing\"?: WordSpacingProperty<TLength> | WordSpacingProperty<TLength>[];\n  \"writing-mode\"?: WritingModeProperty | WritingModeProperty[];\n}\n\nexport interface PropertiesHyphenFallback<TLength = string | 0>\n  extends StandardPropertiesHyphenFallback<TLength>,\n    VendorPropertiesHyphenFallback<TLength>,\n    ObsoletePropertiesHyphenFallback<TLength>,\n    SvgPropertiesHyphenFallback<TLength> {}\n\nexport interface CounterStyle {\n  additiveSymbols?: string;\n  fallback?: string;\n  negative?: string;\n  pad?: string;\n  prefix?: string;\n  range?: CounterStyleRangeProperty;\n  speakAs?: CounterStyleSpeakAsProperty;\n  suffix?: string;\n  symbols?: string;\n  system?: CounterStyleSystemProperty;\n}\n\nexport interface CounterStyleHyphen {\n  \"additive-symbols\"?: string;\n  fallback?: string;\n  negative?: string;\n  pad?: string;\n  prefix?: string;\n  range?: CounterStyleRangeProperty;\n  \"speak-as\"?: CounterStyleSpeakAsProperty;\n  suffix?: string;\n  symbols?: string;\n  system?: CounterStyleSystemProperty;\n}\n\nexport interface CounterStyleFallback {\n  additiveSymbols?: string | string[];\n  fallback?: string | string[];\n  negative?: string | string[];\n  pad?: string | string[];\n  prefix?: string | string[];\n  range?: CounterStyleRangeProperty | CounterStyleRangeProperty[];\n  speakAs?: CounterStyleSpeakAsProperty | CounterStyleSpeakAsProperty[];\n  suffix?: string | string[];\n  symbols?: string | string[];\n  system?: CounterStyleSystemProperty | CounterStyleSystemProperty[];\n}\n\nexport interface CounterStyleHyphenFallback {\n  \"additive-symbols\"?: string | string[];\n  fallback?: string | string[];\n  negative?: string | string[];\n  pad?: string | string[];\n  prefix?: string | string[];\n  range?: CounterStyleRangeProperty | CounterStyleRangeProperty[];\n  \"speak-as\"?: CounterStyleSpeakAsProperty | CounterStyleSpeakAsProperty[];\n  suffix?: string | string[];\n  symbols?: string | string[];\n  system?: CounterStyleSystemProperty | CounterStyleSystemProperty[];\n}\n\nexport interface FontFace {\n  MozFontFeatureSettings?: FontFaceFontFeatureSettingsProperty;\n  fontDisplay?: FontFaceFontDisplayProperty;\n  fontFamily?: string;\n  fontFeatureSettings?: FontFaceFontFeatureSettingsProperty;\n  fontStretch?: FontFaceFontStretchProperty;\n  fontStyle?: FontFaceFontStyleProperty;\n  fontVariant?: FontFaceFontVariantProperty;\n  fontVariationSettings?: FontFaceFontVariationSettingsProperty;\n  fontWeight?: FontFaceFontWeightProperty;\n  src?: string;\n  unicodeRange?: string;\n}\n\nexport interface FontFaceHyphen {\n  \"-moz-font-feature-settings\"?: FontFaceFontFeatureSettingsProperty;\n  \"font-display\"?: FontFaceFontDisplayProperty;\n  \"font-family\"?: string;\n  \"font-feature-settings\"?: FontFaceFontFeatureSettingsProperty;\n  \"font-stretch\"?: FontFaceFontStretchProperty;\n  \"font-style\"?: FontFaceFontStyleProperty;\n  \"font-variant\"?: FontFaceFontVariantProperty;\n  \"font-variation-settings\"?: FontFaceFontVariationSettingsProperty;\n  \"font-weight\"?: FontFaceFontWeightProperty;\n  src?: string;\n  \"unicode-range\"?: string;\n}\n\nexport interface FontFaceFallback {\n  MozFontFeatureSettings?: FontFaceFontFeatureSettingsProperty | FontFaceFontFeatureSettingsProperty[];\n  fontDisplay?: FontFaceFontDisplayProperty | FontFaceFontDisplayProperty[];\n  fontFamily?: string | string[];\n  fontFeatureSettings?: FontFaceFontFeatureSettingsProperty | FontFaceFontFeatureSettingsProperty[];\n  fontStretch?: FontFaceFontStretchProperty | FontFaceFontStretchProperty[];\n  fontStyle?: FontFaceFontStyleProperty | FontFaceFontStyleProperty[];\n  fontVariant?: FontFaceFontVariantProperty | FontFaceFontVariantProperty[];\n  fontVariationSettings?: FontFaceFontVariationSettingsProperty | FontFaceFontVariationSettingsProperty[];\n  fontWeight?: FontFaceFontWeightProperty | FontFaceFontWeightProperty[];\n  src?: string | string[];\n  unicodeRange?: string | string[];\n}\n\nexport interface FontFaceHyphenFallback {\n  \"-moz-font-feature-settings\"?: FontFaceFontFeatureSettingsProperty | FontFaceFontFeatureSettingsProperty[];\n  \"font-display\"?: FontFaceFontDisplayProperty | FontFaceFontDisplayProperty[];\n  \"font-family\"?: string | string[];\n  \"font-feature-settings\"?: FontFaceFontFeatureSettingsProperty | FontFaceFontFeatureSettingsProperty[];\n  \"font-stretch\"?: FontFaceFontStretchProperty | FontFaceFontStretchProperty[];\n  \"font-style\"?: FontFaceFontStyleProperty | FontFaceFontStyleProperty[];\n  \"font-variant\"?: FontFaceFontVariantProperty | FontFaceFontVariantProperty[];\n  \"font-variation-settings\"?: FontFaceFontVariationSettingsProperty | FontFaceFontVariationSettingsProperty[];\n  \"font-weight\"?: FontFaceFontWeightProperty | FontFaceFontWeightProperty[];\n  src?: string | string[];\n  \"unicode-range\"?: string | string[];\n}\n\nexport interface Viewport<TLength = string | 0> {\n  msHeight?: ViewportHeightProperty<TLength>;\n  msMaxHeight?: ViewportMaxHeightProperty<TLength>;\n  msMaxWidth?: ViewportMaxWidthProperty<TLength>;\n  msMaxZoom?: ViewportMaxZoomProperty;\n  msMinHeight?: ViewportMinHeightProperty<TLength>;\n  msMinWidth?: ViewportMinWidthProperty<TLength>;\n  msMinZoom?: ViewportMinZoomProperty;\n  msOrientation?: ViewportOrientationProperty;\n  msUserZoom?: ViewportUserZoomProperty;\n  msWidth?: ViewportWidthProperty<TLength>;\n  msZoom?: ViewportZoomProperty;\n  OOrientation?: ViewportOrientationProperty;\n  height?: ViewportHeightProperty<TLength>;\n  maxHeight?: ViewportMaxHeightProperty<TLength>;\n  maxWidth?: ViewportMaxWidthProperty<TLength>;\n  maxZoom?: ViewportMaxZoomProperty;\n  minHeight?: ViewportMinHeightProperty<TLength>;\n  minWidth?: ViewportMinWidthProperty<TLength>;\n  minZoom?: ViewportMinZoomProperty;\n  orientation?: ViewportOrientationProperty;\n  userZoom?: ViewportUserZoomProperty;\n  width?: ViewportWidthProperty<TLength>;\n  zoom?: ViewportZoomProperty;\n}\n\nexport interface ViewportHyphen<TLength = string | 0> {\n  \"-ms-height\"?: ViewportHeightProperty<TLength>;\n  \"-ms-max-height\"?: ViewportMaxHeightProperty<TLength>;\n  \"-ms-max-width\"?: ViewportMaxWidthProperty<TLength>;\n  \"-ms-max-zoom\"?: ViewportMaxZoomProperty;\n  \"-ms-min-height\"?: ViewportMinHeightProperty<TLength>;\n  \"-ms-min-width\"?: ViewportMinWidthProperty<TLength>;\n  \"-ms-min-zoom\"?: ViewportMinZoomProperty;\n  \"-ms-orientation\"?: ViewportOrientationProperty;\n  \"-ms-user-zoom\"?: ViewportUserZoomProperty;\n  \"-ms-width\"?: ViewportWidthProperty<TLength>;\n  \"-ms-zoom\"?: ViewportZoomProperty;\n  \"-o-orientation\"?: ViewportOrientationProperty;\n  height?: ViewportHeightProperty<TLength>;\n  \"max-height\"?: ViewportMaxHeightProperty<TLength>;\n  \"max-width\"?: ViewportMaxWidthProperty<TLength>;\n  \"max-zoom\"?: ViewportMaxZoomProperty;\n  \"min-height\"?: ViewportMinHeightProperty<TLength>;\n  \"min-width\"?: ViewportMinWidthProperty<TLength>;\n  \"min-zoom\"?: ViewportMinZoomProperty;\n  orientation?: ViewportOrientationProperty;\n  \"user-zoom\"?: ViewportUserZoomProperty;\n  width?: ViewportWidthProperty<TLength>;\n  zoom?: ViewportZoomProperty;\n}\n\nexport interface ViewportFallback<TLength = string | 0> {\n  msHeight?: ViewportHeightProperty<TLength> | ViewportHeightProperty<TLength>[];\n  msMaxHeight?: ViewportMaxHeightProperty<TLength> | ViewportMaxHeightProperty<TLength>[];\n  msMaxWidth?: ViewportMaxWidthProperty<TLength> | ViewportMaxWidthProperty<TLength>[];\n  msMaxZoom?: ViewportMaxZoomProperty | ViewportMaxZoomProperty[];\n  msMinHeight?: ViewportMinHeightProperty<TLength> | ViewportMinHeightProperty<TLength>[];\n  msMinWidth?: ViewportMinWidthProperty<TLength> | ViewportMinWidthProperty<TLength>[];\n  msMinZoom?: ViewportMinZoomProperty | ViewportMinZoomProperty[];\n  msOrientation?: ViewportOrientationProperty | ViewportOrientationProperty[];\n  msUserZoom?: ViewportUserZoomProperty | ViewportUserZoomProperty[];\n  msWidth?: ViewportWidthProperty<TLength> | ViewportWidthProperty<TLength>[];\n  msZoom?: ViewportZoomProperty | ViewportZoomProperty[];\n  OOrientation?: ViewportOrientationProperty | ViewportOrientationProperty[];\n  height?: ViewportHeightProperty<TLength> | ViewportHeightProperty<TLength>[];\n  maxHeight?: ViewportMaxHeightProperty<TLength> | ViewportMaxHeightProperty<TLength>[];\n  maxWidth?: ViewportMaxWidthProperty<TLength> | ViewportMaxWidthProperty<TLength>[];\n  maxZoom?: ViewportMaxZoomProperty | ViewportMaxZoomProperty[];\n  minHeight?: ViewportMinHeightProperty<TLength> | ViewportMinHeightProperty<TLength>[];\n  minWidth?: ViewportMinWidthProperty<TLength> | ViewportMinWidthProperty<TLength>[];\n  minZoom?: ViewportMinZoomProperty | ViewportMinZoomProperty[];\n  orientation?: ViewportOrientationProperty | ViewportOrientationProperty[];\n  userZoom?: ViewportUserZoomProperty | ViewportUserZoomProperty[];\n  width?: ViewportWidthProperty<TLength> | ViewportWidthProperty<TLength>[];\n  zoom?: ViewportZoomProperty | ViewportZoomProperty[];\n}\n\nexport interface ViewportHyphenFallback<TLength = string | 0> {\n  \"-ms-height\"?: ViewportHeightProperty<TLength> | ViewportHeightProperty<TLength>[];\n  \"-ms-max-height\"?: ViewportMaxHeightProperty<TLength> | ViewportMaxHeightProperty<TLength>[];\n  \"-ms-max-width\"?: ViewportMaxWidthProperty<TLength> | ViewportMaxWidthProperty<TLength>[];\n  \"-ms-max-zoom\"?: ViewportMaxZoomProperty | ViewportMaxZoomProperty[];\n  \"-ms-min-height\"?: ViewportMinHeightProperty<TLength> | ViewportMinHeightProperty<TLength>[];\n  \"-ms-min-width\"?: ViewportMinWidthProperty<TLength> | ViewportMinWidthProperty<TLength>[];\n  \"-ms-min-zoom\"?: ViewportMinZoomProperty | ViewportMinZoomProperty[];\n  \"-ms-orientation\"?: ViewportOrientationProperty | ViewportOrientationProperty[];\n  \"-ms-user-zoom\"?: ViewportUserZoomProperty | ViewportUserZoomProperty[];\n  \"-ms-width\"?: ViewportWidthProperty<TLength> | ViewportWidthProperty<TLength>[];\n  \"-ms-zoom\"?: ViewportZoomProperty | ViewportZoomProperty[];\n  \"-o-orientation\"?: ViewportOrientationProperty | ViewportOrientationProperty[];\n  height?: ViewportHeightProperty<TLength> | ViewportHeightProperty<TLength>[];\n  \"max-height\"?: ViewportMaxHeightProperty<TLength> | ViewportMaxHeightProperty<TLength>[];\n  \"max-width\"?: ViewportMaxWidthProperty<TLength> | ViewportMaxWidthProperty<TLength>[];\n  \"max-zoom\"?: ViewportMaxZoomProperty | ViewportMaxZoomProperty[];\n  \"min-height\"?: ViewportMinHeightProperty<TLength> | ViewportMinHeightProperty<TLength>[];\n  \"min-width\"?: ViewportMinWidthProperty<TLength> | ViewportMinWidthProperty<TLength>[];\n  \"min-zoom\"?: ViewportMinZoomProperty | ViewportMinZoomProperty[];\n  orientation?: ViewportOrientationProperty | ViewportOrientationProperty[];\n  \"user-zoom\"?: ViewportUserZoomProperty | ViewportUserZoomProperty[];\n  width?: ViewportWidthProperty<TLength> | ViewportWidthProperty<TLength>[];\n  zoom?: ViewportZoomProperty | ViewportZoomProperty[];\n}\n\nexport type AtRules =\n  | \"@charset\"\n  | \"@counter-style\"\n  | \"@document\"\n  | \"@font-face\"\n  | \"@font-feature-values\"\n  | \"@import\"\n  | \"@keyframes\"\n  | \"@media\"\n  | \"@namespace\"\n  | \"@page\"\n  | \"@supports\"\n  | \"@viewport\";\n\nexport type AdvancedPseudos =\n  | \":-moz-any()\"\n  | \":-moz-dir\"\n  | \":-webkit-any()\"\n  | \"::cue\"\n  | \"::part\"\n  | \"::slotted\"\n  | \":dir\"\n  | \":has\"\n  | \":host\"\n  | \":host-context\"\n  | \":is\"\n  | \":lang\"\n  | \":matches()\"\n  | \":not\"\n  | \":nth-child\"\n  | \":nth-last-child\"\n  | \":nth-last-of-type\"\n  | \":nth-of-type\"\n  | \":where\";\n\nexport type SimplePseudos =\n  | \":-khtml-any-link\"\n  | \":-moz-any-link\"\n  | \":-moz-focusring\"\n  | \":-moz-full-screen\"\n  | \":-moz-placeholder\"\n  | \":-moz-read-only\"\n  | \":-moz-read-write\"\n  | \":-ms-fullscreen\"\n  | \":-ms-input-placeholder\"\n  | \":-webkit-any-link\"\n  | \":-webkit-full-screen\"\n  | \"::-moz-placeholder\"\n  | \"::-moz-progress-bar\"\n  | \"::-moz-range-progress\"\n  | \"::-moz-range-thumb\"\n  | \"::-moz-range-track\"\n  | \"::-moz-selection\"\n  | \"::-ms-backdrop\"\n  | \"::-ms-browse\"\n  | \"::-ms-check\"\n  | \"::-ms-clear\"\n  | \"::-ms-fill\"\n  | \"::-ms-fill-lower\"\n  | \"::-ms-fill-upper\"\n  | \"::-ms-input-placeholder\"\n  | \"::-ms-reveal\"\n  | \"::-ms-thumb\"\n  | \"::-ms-ticks-after\"\n  | \"::-ms-ticks-before\"\n  | \"::-ms-tooltip\"\n  | \"::-ms-track\"\n  | \"::-ms-value\"\n  | \"::-webkit-backdrop\"\n  | \"::-webkit-input-placeholder\"\n  | \"::-webkit-progress-bar\"\n  | \"::-webkit-progress-inner-value\"\n  | \"::-webkit-progress-value\"\n  | \"::-webkit-slider-runnable-track\"\n  | \"::-webkit-slider-thumb\"\n  | \"::after\"\n  | \"::backdrop\"\n  | \"::before\"\n  | \"::cue\"\n  | \"::first-letter\"\n  | \"::first-line\"\n  | \"::grammar-error\"\n  | \"::marker\"\n  | \"::placeholder\"\n  | \"::selection\"\n  | \"::spelling-error\"\n  | \":active\"\n  | \":after\"\n  | \":any-link\"\n  | \":before\"\n  | \":blank\"\n  | \":checked\"\n  | \":default\"\n  | \":defined\"\n  | \":disabled\"\n  | \":empty\"\n  | \":enabled\"\n  | \":first\"\n  | \":first-child\"\n  | \":first-letter\"\n  | \":first-line\"\n  | \":first-of-type\"\n  | \":focus\"\n  | \":focus-visible\"\n  | \":focus-within\"\n  | \":fullscreen\"\n  | \":hover\"\n  | \":in-range\"\n  | \":indeterminate\"\n  | \":invalid\"\n  | \":last-child\"\n  | \":last-of-type\"\n  | \":left\"\n  | \":link\"\n  | \":only-child\"\n  | \":only-of-type\"\n  | \":optional\"\n  | \":out-of-range\"\n  | \":placeholder-shown\"\n  | \":read-only\"\n  | \":read-write\"\n  | \":required\"\n  | \":right\"\n  | \":root\"\n  | \":scope\"\n  | \":target\"\n  | \":valid\"\n  | \":visited\";\n\nexport type Pseudos = AdvancedPseudos | SimplePseudos;\n\nexport type HtmlAttributes =\n  | \"[-webkit-dropzone]\"\n  | \"[-webkit-slot]\"\n  | \"[abbr]\"\n  | \"[accept-charset]\"\n  | \"[accept]\"\n  | \"[accesskey]\"\n  | \"[action]\"\n  | \"[align]\"\n  | \"[alink]\"\n  | \"[allow]\"\n  | \"[allowfullscreen]\"\n  | \"[allowpaymentrequest]\"\n  | \"[alt]\"\n  | \"[archive]\"\n  | \"[async]\"\n  | \"[autobuffer]\"\n  | \"[autocapitalize]\"\n  | \"[autocomplete]\"\n  | \"[autofocus]\"\n  | \"[autoplay]\"\n  | \"[axis]\"\n  | \"[background]\"\n  | \"[behavior]\"\n  | \"[bgcolor]\"\n  | \"[border]\"\n  | \"[bottommargin]\"\n  | \"[buffered]\"\n  | \"[cellpadding]\"\n  | \"[cellspacing]\"\n  | \"[char]\"\n  | \"[charoff]\"\n  | \"[charset]\"\n  | \"[checked]\"\n  | \"[cite]\"\n  | \"[class]\"\n  | \"[classid]\"\n  | \"[clear]\"\n  | \"[code]\"\n  | \"[codebase]\"\n  | \"[codetype]\"\n  | \"[color]\"\n  | \"[cols]\"\n  | \"[colspan]\"\n  | \"[command]\"\n  | \"[compact]\"\n  | \"[content]\"\n  | \"[contenteditable]\"\n  | \"[contextmenu]\"\n  | \"[controls]\"\n  | \"[coords]\"\n  | \"[crossorigin]\"\n  | \"[data]\"\n  | \"[datafld]\"\n  | \"[datasrc]\"\n  | \"[datetime]\"\n  | \"[declare]\"\n  | \"[decoding]\"\n  | \"[default]\"\n  | \"[defer]\"\n  | \"[dir]\"\n  | \"[direction]\"\n  | \"[disabled]\"\n  | \"[download]\"\n  | \"[draggable]\"\n  | \"[dropzone]\"\n  | \"[enctype]\"\n  | \"[exportparts]\"\n  | \"[face]\"\n  | \"[for]\"\n  | \"[form]\"\n  | \"[formaction]\"\n  | \"[formenctype]\"\n  | \"[formmethod]\"\n  | \"[formnovalidate]\"\n  | \"[formtarget]\"\n  | \"[frame]\"\n  | \"[frameborder]\"\n  | \"[headers]\"\n  | \"[height]\"\n  | \"[hidden]\"\n  | \"[high]\"\n  | \"[href]\"\n  | \"[hreflang]\"\n  | \"[hspace]\"\n  | \"[http-equiv]\"\n  | \"[icon]\"\n  | \"[id]\"\n  | \"[inputmode]\"\n  | \"[integrity]\"\n  | \"[intrinsicsize]\"\n  | \"[is]\"\n  | \"[ismap]\"\n  | \"[itemid]\"\n  | \"[itemprop]\"\n  | \"[itemref]\"\n  | \"[itemscope]\"\n  | \"[itemtype]\"\n  | \"[kind]\"\n  | \"[label]\"\n  | \"[lang]\"\n  | \"[language]\"\n  | \"[leftmargin]\"\n  | \"[link]\"\n  | \"[loading]\"\n  | \"[longdesc]\"\n  | \"[loop]\"\n  | \"[low]\"\n  | \"[manifest]\"\n  | \"[marginheight]\"\n  | \"[marginwidth]\"\n  | \"[max]\"\n  | \"[maxlength]\"\n  | \"[mayscript]\"\n  | \"[media]\"\n  | \"[method]\"\n  | \"[methods]\"\n  | \"[min]\"\n  | \"[minlength]\"\n  | \"[moz-opaque]\"\n  | \"[mozallowfullscreen]\"\n  | \"[mozbrowser]\"\n  | \"[mozcurrentsampleoffset]\"\n  | \"[msallowfullscreen]\"\n  | \"[multiple]\"\n  | \"[muted]\"\n  | \"[name]\"\n  | \"[nohref]\"\n  | \"[nomodule]\"\n  | \"[noresize]\"\n  | \"[noshade]\"\n  | \"[novalidate]\"\n  | \"[nowrap]\"\n  | \"[object]\"\n  | \"[onafterprint]\"\n  | \"[onbeforeprint]\"\n  | \"[onbeforeunload]\"\n  | \"[onblur]\"\n  | \"[onerror]\"\n  | \"[onfocus]\"\n  | \"[onhashchange]\"\n  | \"[onlanguagechange]\"\n  | \"[onload]\"\n  | \"[onmessage]\"\n  | \"[onoffline]\"\n  | \"[ononline]\"\n  | \"[onpopstate]\"\n  | \"[onredo]\"\n  | \"[onresize]\"\n  | \"[onstorage]\"\n  | \"[onundo]\"\n  | \"[onunload]\"\n  | \"[open]\"\n  | \"[optimum]\"\n  | \"[part]\"\n  | \"[ping]\"\n  | \"[placeholder]\"\n  | \"[played]\"\n  | \"[poster]\"\n  | \"[prefetch]\"\n  | \"[preload]\"\n  | \"[profile]\"\n  | \"[prompt]\"\n  | \"[radiogroup]\"\n  | \"[readonly]\"\n  | \"[referrerPolicy]\"\n  | \"[referrerpolicy]\"\n  | \"[rel]\"\n  | \"[required]\"\n  | \"[rev]\"\n  | \"[reversed]\"\n  | \"[rightmargin]\"\n  | \"[rows]\"\n  | \"[rowspan]\"\n  | \"[rules]\"\n  | \"[sandbox-allow-modals]\"\n  | \"[sandbox-allow-popups-to-escape-sandbox]\"\n  | \"[sandbox-allow-popups]\"\n  | \"[sandbox-allow-presentation]\"\n  | \"[sandbox-allow-storage-access-by-user-activation]\"\n  | \"[sandbox-allow-top-navigation-by-user-activation]\"\n  | \"[sandbox]\"\n  | \"[scope]\"\n  | \"[scoped]\"\n  | \"[scrollamount]\"\n  | \"[scrolldelay]\"\n  | \"[scrolling]\"\n  | \"[selected]\"\n  | \"[shape]\"\n  | \"[size]\"\n  | \"[sizes]\"\n  | \"[slot]\"\n  | \"[span]\"\n  | \"[spellcheck]\"\n  | \"[src]\"\n  | \"[srcdoc]\"\n  | \"[srclang]\"\n  | \"[srcset]\"\n  | \"[standby]\"\n  | \"[start]\"\n  | \"[style]\"\n  | \"[summary]\"\n  | \"[tabindex]\"\n  | \"[target]\"\n  | \"[text]\"\n  | \"[title]\"\n  | \"[topmargin]\"\n  | \"[translate]\"\n  | \"[truespeed]\"\n  | \"[type]\"\n  | \"[typemustmatch]\"\n  | \"[usemap]\"\n  | \"[valign]\"\n  | \"[value]\"\n  | \"[valuetype]\"\n  | \"[version]\"\n  | \"[vlink]\"\n  | \"[volume]\"\n  | \"[vspace]\"\n  | \"[webkitallowfullscreen]\"\n  | \"[width]\"\n  | \"[wrap]\"\n  | \"[xmlns]\";\n\nexport type SvgAttributes =\n  | \"[accent-height]\"\n  | \"[alignment-baseline]\"\n  | \"[allowReorder]\"\n  | \"[alphabetic]\"\n  | \"[animation]\"\n  | \"[arabic-form]\"\n  | \"[ascent]\"\n  | \"[attributeName]\"\n  | \"[attributeType]\"\n  | \"[azimuth]\"\n  | \"[baseFrequency]\"\n  | \"[baseProfile]\"\n  | \"[baseline-shift]\"\n  | \"[bbox]\"\n  | \"[begin]\"\n  | \"[bias]\"\n  | \"[by]\"\n  | \"[calcMode]\"\n  | \"[cap-height]\"\n  | \"[class]\"\n  | \"[clip-path]\"\n  | \"[clip-rule]\"\n  | \"[clipPathUnits]\"\n  | \"[clip]\"\n  | \"[color-interpolation-filters]\"\n  | \"[color-interpolation]\"\n  | \"[color-profile]\"\n  | \"[color-rendering]\"\n  | \"[color]\"\n  | \"[contentScriptType]\"\n  | \"[contentStyleType]\"\n  | \"[cursor]\"\n  | \"[cx]\"\n  | \"[cy]\"\n  | \"[d]\"\n  | \"[descent]\"\n  | \"[diffuseConstant]\"\n  | \"[direction]\"\n  | \"[display]\"\n  | \"[divisor]\"\n  | \"[document]\"\n  | \"[dominant-baseline]\"\n  | \"[download]\"\n  | \"[dur]\"\n  | \"[dx]\"\n  | \"[dy]\"\n  | \"[edgeMode]\"\n  | \"[elevation]\"\n  | \"[enable-background]\"\n  | \"[externalResourcesRequired]\"\n  | \"[fill-opacity]\"\n  | \"[fill-rule]\"\n  | \"[fill]\"\n  | \"[filterRes]\"\n  | \"[filterUnits]\"\n  | \"[filter]\"\n  | \"[flood-color]\"\n  | \"[flood-opacity]\"\n  | \"[font-family]\"\n  | \"[font-size-adjust]\"\n  | \"[font-size]\"\n  | \"[font-stretch]\"\n  | \"[font-style]\"\n  | \"[font-variant]\"\n  | \"[font-weight]\"\n  | \"[format]\"\n  | \"[fr]\"\n  | \"[from]\"\n  | \"[fx]\"\n  | \"[fy]\"\n  | \"[g1]\"\n  | \"[g2]\"\n  | \"[global]\"\n  | \"[glyph-name]\"\n  | \"[glyph-orientation-horizontal]\"\n  | \"[glyph-orientation-vertical]\"\n  | \"[glyphRef]\"\n  | \"[gradientTransform]\"\n  | \"[gradientUnits]\"\n  | \"[graphical]\"\n  | \"[hanging]\"\n  | \"[hatchContentUnits]\"\n  | \"[hatchUnits]\"\n  | \"[height]\"\n  | \"[horiz-adv-x]\"\n  | \"[horiz-origin-x]\"\n  | \"[horiz-origin-y]\"\n  | \"[href]\"\n  | \"[hreflang]\"\n  | \"[id]\"\n  | \"[ideographic]\"\n  | \"[image-rendering]\"\n  | \"[in2]\"\n  | \"[in]\"\n  | \"[k1]\"\n  | \"[k2]\"\n  | \"[k3]\"\n  | \"[k4]\"\n  | \"[k]\"\n  | \"[kernelMatrix]\"\n  | \"[kernelUnitLength]\"\n  | \"[kerning]\"\n  | \"[keyPoints]\"\n  | \"[lang]\"\n  | \"[lengthAdjust]\"\n  | \"[letter-spacing]\"\n  | \"[lighterForError]\"\n  | \"[lighting-color]\"\n  | \"[limitingConeAngle]\"\n  | \"[local]\"\n  | \"[marker-end]\"\n  | \"[marker-mid]\"\n  | \"[marker-start]\"\n  | \"[markerHeight]\"\n  | \"[markerUnits]\"\n  | \"[markerWidth]\"\n  | \"[maskContentUnits]\"\n  | \"[maskUnits]\"\n  | \"[mask]\"\n  | \"[mathematical]\"\n  | \"[media]\"\n  | \"[method]\"\n  | \"[mode]\"\n  | \"[name]\"\n  | \"[numOctaves]\"\n  | \"[offset]\"\n  | \"[opacity]\"\n  | \"[operator]\"\n  | \"[order]\"\n  | \"[orient]\"\n  | \"[orientation]\"\n  | \"[origin]\"\n  | \"[overflow]\"\n  | \"[overline-position]\"\n  | \"[overline-thickness]\"\n  | \"[paint-order]\"\n  | \"[panose-1]\"\n  | \"[path]\"\n  | \"[patternContentUnits]\"\n  | \"[patternTransform]\"\n  | \"[patternUnits]\"\n  | \"[ping]\"\n  | \"[pitch]\"\n  | \"[pointer-events]\"\n  | \"[pointsAtX]\"\n  | \"[pointsAtY]\"\n  | \"[pointsAtZ]\"\n  | \"[points]\"\n  | \"[preserveAlpha]\"\n  | \"[preserveAspectRatio]\"\n  | \"[primitiveUnits]\"\n  | \"[r]\"\n  | \"[radius]\"\n  | \"[refX]\"\n  | \"[refY]\"\n  | \"[referrerPolicy]\"\n  | \"[rel]\"\n  | \"[rendering-intent]\"\n  | \"[repeatCount]\"\n  | \"[requiredExtensions]\"\n  | \"[requiredFeatures]\"\n  | \"[rotate]\"\n  | \"[rx]\"\n  | \"[ry]\"\n  | \"[scale]\"\n  | \"[seed]\"\n  | \"[shape-rendering]\"\n  | \"[side]\"\n  | \"[slope]\"\n  | \"[solid-color]\"\n  | \"[solid-opacity]\"\n  | \"[spacing]\"\n  | \"[specularConstant]\"\n  | \"[specularExponent]\"\n  | \"[spreadMethod]\"\n  | \"[startOffset]\"\n  | \"[stdDeviation]\"\n  | \"[stemh]\"\n  | \"[stemv]\"\n  | \"[stitchTiles]\"\n  | \"[stop-color]\"\n  | \"[stop-opacity]\"\n  | \"[strikethrough-position]\"\n  | \"[strikethrough-thickness]\"\n  | \"[string]\"\n  | \"[stroke-dasharray]\"\n  | \"[stroke-dashoffset]\"\n  | \"[stroke-linecap]\"\n  | \"[stroke-linejoin]\"\n  | \"[stroke-miterlimit]\"\n  | \"[stroke-opacity]\"\n  | \"[stroke-width]\"\n  | \"[stroke]\"\n  | \"[style]\"\n  | \"[surfaceScale]\"\n  | \"[systemLanguage]\"\n  | \"[tabindex]\"\n  | \"[targetX]\"\n  | \"[targetY]\"\n  | \"[target]\"\n  | \"[text-anchor]\"\n  | \"[text-decoration]\"\n  | \"[text-overflow]\"\n  | \"[text-rendering]\"\n  | \"[textLength]\"\n  | \"[title]\"\n  | \"[to]\"\n  | \"[transform]\"\n  | \"[type]\"\n  | \"[u1]\"\n  | \"[u2]\"\n  | \"[underline-position]\"\n  | \"[underline-thickness]\"\n  | \"[unicode-bidi]\"\n  | \"[unicode-range]\"\n  | \"[unicode]\"\n  | \"[units-per-em]\"\n  | \"[v-alphabetic]\"\n  | \"[v-hanging]\"\n  | \"[v-ideographic]\"\n  | \"[v-mathematical]\"\n  | \"[values]\"\n  | \"[vector-effect]\"\n  | \"[version]\"\n  | \"[vert-adv-y]\"\n  | \"[vert-origin-x]\"\n  | \"[vert-origin-y]\"\n  | \"[viewBox]\"\n  | \"[viewTarget]\"\n  | \"[visibility]\"\n  | \"[white-space]\"\n  | \"[width]\"\n  | \"[widths]\"\n  | \"[word-spacing]\"\n  | \"[writing-mode]\"\n  | \"[x-height]\"\n  | \"[x1]\"\n  | \"[x2]\"\n  | \"[xChannelSelector]\"\n  | \"[x]\"\n  | \"[y1]\"\n  | \"[y2]\"\n  | \"[yChannelSelector]\"\n  | \"[y]\"\n  | \"[z]\"\n  | \"[zoomAndPan]\";\n\nexport type Globals = \"-moz-initial\" | \"inherit\" | \"initial\" | \"revert\" | \"unset\";\n\ntype GlobalsString = Globals | string;\n\ntype GlobalsNumber = Globals | number;\n\nexport type AlignContentProperty = Globals | ContentDistribution | ContentPosition | \"baseline\" | \"normal\" | string;\n\nexport type AlignItemsProperty = Globals | SelfPosition | \"baseline\" | \"normal\" | \"stretch\" | string;\n\nexport type AlignSelfProperty = Globals | SelfPosition | \"auto\" | \"baseline\" | \"normal\" | \"stretch\" | string;\n\nexport type AnimationProperty = Globals | SingleAnimation | string;\n\nexport type AnimationDirectionProperty = Globals | SingleAnimationDirection | string;\n\nexport type AnimationFillModeProperty = Globals | SingleAnimationFillMode | string;\n\nexport type AnimationIterationCountProperty = Globals | \"infinite\" | string | number;\n\nexport type AnimationNameProperty = Globals | \"none\" | string;\n\nexport type AnimationPlayStateProperty = Globals | \"paused\" | \"running\" | string;\n\nexport type AnimationTimingFunctionProperty = Globals | TimingFunction | string;\n\nexport type AppearanceProperty = Globals | Compat | \"button\" | \"none\" | \"textfield\";\n\nexport type AspectRatioProperty = Globals | \"auto\" | string;\n\nexport type BackdropFilterProperty = Globals | \"none\" | string;\n\nexport type BackfaceVisibilityProperty = Globals | \"hidden\" | \"visible\";\n\nexport type BackgroundProperty<TLength> = Globals | FinalBgLayer<TLength> | string;\n\nexport type BackgroundAttachmentProperty = Globals | Attachment | string;\n\nexport type BackgroundBlendModeProperty = Globals | BlendMode | string;\n\nexport type BackgroundClipProperty = Globals | Box | string;\n\nexport type BackgroundColorProperty = Globals | Color;\n\nexport type BackgroundImageProperty = Globals | \"none\" | string;\n\nexport type BackgroundOriginProperty = Globals | Box | string;\n\nexport type BackgroundPositionProperty<TLength> = Globals | BgPosition<TLength> | string;\n\nexport type BackgroundPositionXProperty<TLength> = Globals | TLength | \"center\" | \"left\" | \"right\" | \"x-end\" | \"x-start\" | string;\n\nexport type BackgroundPositionYProperty<TLength> = Globals | TLength | \"bottom\" | \"center\" | \"top\" | \"y-end\" | \"y-start\" | string;\n\nexport type BackgroundRepeatProperty = Globals | RepeatStyle | string;\n\nexport type BackgroundSizeProperty<TLength> = Globals | BgSize<TLength> | string;\n\nexport type BlockOverflowProperty = Globals | \"clip\" | \"ellipsis\" | string;\n\nexport type BlockSizeProperty<TLength> =\n  | Globals\n  | TLength\n  | \"-moz-fit-content\"\n  | \"-moz-max-content\"\n  | \"-moz-min-content\"\n  | \"-webkit-fill-available\"\n  | \"auto\"\n  | \"available\"\n  | \"fit-content\"\n  | \"max-content\"\n  | \"min-content\"\n  | string;\n\nexport type BorderProperty<TLength> = Globals | LineWidth<TLength> | LineStyle | Color | string;\n\nexport type BorderBlockProperty<TLength> = Globals | LineWidth<TLength> | LineStyle | Color | string;\n\nexport type BorderBlockColorProperty = Globals | Color | string;\n\nexport type BorderBlockEndProperty<TLength> = Globals | LineWidth<TLength> | LineStyle | Color | string;\n\nexport type BorderBlockEndColorProperty = Globals | Color;\n\nexport type BorderBlockEndStyleProperty = Globals | LineStyle;\n\nexport type BorderBlockEndWidthProperty<TLength> = Globals | LineWidth<TLength>;\n\nexport type BorderBlockStartProperty<TLength> = Globals | LineWidth<TLength> | LineStyle | Color | string;\n\nexport type BorderBlockStartColorProperty = Globals | Color;\n\nexport type BorderBlockStartStyleProperty = Globals | LineStyle;\n\nexport type BorderBlockStartWidthProperty<TLength> = Globals | LineWidth<TLength>;\n\nexport type BorderBlockStyleProperty = Globals | LineStyle;\n\nexport type BorderBlockWidthProperty<TLength> = Globals | LineWidth<TLength>;\n\nexport type BorderBottomProperty<TLength> = Globals | LineWidth<TLength> | LineStyle | Color | string;\n\nexport type BorderBottomColorProperty = Globals | Color;\n\nexport type BorderBottomLeftRadiusProperty<TLength> = Globals | TLength | string;\n\nexport type BorderBottomRightRadiusProperty<TLength> = Globals | TLength | string;\n\nexport type BorderBottomStyleProperty = Globals | LineStyle;\n\nexport type BorderBottomWidthProperty<TLength> = Globals | LineWidth<TLength>;\n\nexport type BorderCollapseProperty = Globals | \"collapse\" | \"separate\";\n\nexport type BorderColorProperty = Globals | Color | string;\n\nexport type BorderEndEndRadiusProperty<TLength> = Globals | TLength | string;\n\nexport type BorderEndStartRadiusProperty<TLength> = Globals | TLength | string;\n\nexport type BorderImageProperty = Globals | \"none\" | \"repeat\" | \"round\" | \"space\" | \"stretch\" | string | number;\n\nexport type BorderImageOutsetProperty<TLength> = Globals | TLength | string | number;\n\nexport type BorderImageRepeatProperty = Globals | \"repeat\" | \"round\" | \"space\" | \"stretch\" | string;\n\nexport type BorderImageSliceProperty = Globals | string | number;\n\nexport type BorderImageSourceProperty = Globals | \"none\" | string;\n\nexport type BorderImageWidthProperty<TLength> = Globals | TLength | \"auto\" | string | number;\n\nexport type BorderInlineProperty<TLength> = Globals | LineWidth<TLength> | LineStyle | Color | string;\n\nexport type BorderInlineColorProperty = Globals | Color | string;\n\nexport type BorderInlineEndProperty<TLength> = Globals | LineWidth<TLength> | LineStyle | Color | string;\n\nexport type BorderInlineEndColorProperty = Globals | Color;\n\nexport type BorderInlineEndStyleProperty = Globals | LineStyle;\n\nexport type BorderInlineEndWidthProperty<TLength> = Globals | LineWidth<TLength>;\n\nexport type BorderInlineStartProperty<TLength> = Globals | LineWidth<TLength> | LineStyle | Color | string;\n\nexport type BorderInlineStartColorProperty = Globals | Color;\n\nexport type BorderInlineStartStyleProperty = Globals | LineStyle;\n\nexport type BorderInlineStartWidthProperty<TLength> = Globals | LineWidth<TLength>;\n\nexport type BorderInlineStyleProperty = Globals | LineStyle;\n\nexport type BorderInlineWidthProperty<TLength> = Globals | LineWidth<TLength>;\n\nexport type BorderLeftProperty<TLength> = Globals | LineWidth<TLength> | LineStyle | Color | string;\n\nexport type BorderLeftColorProperty = Globals | Color;\n\nexport type BorderLeftStyleProperty = Globals | LineStyle;\n\nexport type BorderLeftWidthProperty<TLength> = Globals | LineWidth<TLength>;\n\nexport type BorderRadiusProperty<TLength> = Globals | TLength | string;\n\nexport type BorderRightProperty<TLength> = Globals | LineWidth<TLength> | LineStyle | Color | string;\n\nexport type BorderRightColorProperty = Globals | Color;\n\nexport type BorderRightStyleProperty = Globals | LineStyle;\n\nexport type BorderRightWidthProperty<TLength> = Globals | LineWidth<TLength>;\n\nexport type BorderSpacingProperty<TLength> = Globals | TLength | string;\n\nexport type BorderStartEndRadiusProperty<TLength> = Globals | TLength | string;\n\nexport type BorderStartStartRadiusProperty<TLength> = Globals | TLength | string;\n\nexport type BorderStyleProperty = Globals | LineStyle | string;\n\nexport type BorderTopProperty<TLength> = Globals | LineWidth<TLength> | LineStyle | Color | string;\n\nexport type BorderTopColorProperty = Globals | Color;\n\nexport type BorderTopLeftRadiusProperty<TLength> = Globals | TLength | string;\n\nexport type BorderTopRightRadiusProperty<TLength> = Globals | TLength | string;\n\nexport type BorderTopStyleProperty = Globals | LineStyle;\n\nexport type BorderTopWidthProperty<TLength> = Globals | LineWidth<TLength>;\n\nexport type BorderWidthProperty<TLength> = Globals | LineWidth<TLength> | string;\n\nexport type BottomProperty<TLength> = Globals | TLength | \"auto\" | string;\n\nexport type BoxAlignProperty = Globals | \"baseline\" | \"center\" | \"end\" | \"start\" | \"stretch\";\n\nexport type BoxDecorationBreakProperty = Globals | \"clone\" | \"slice\";\n\nexport type BoxDirectionProperty = Globals | \"inherit\" | \"normal\" | \"reverse\";\n\nexport type BoxLinesProperty = Globals | \"multiple\" | \"single\";\n\nexport type BoxOrientProperty = Globals | \"block-axis\" | \"horizontal\" | \"inherit\" | \"inline-axis\" | \"vertical\";\n\nexport type BoxPackProperty = Globals | \"center\" | \"end\" | \"justify\" | \"start\";\n\nexport type BoxShadowProperty = Globals | \"none\" | string;\n\nexport type BoxSizingProperty = Globals | \"border-box\" | \"content-box\";\n\nexport type BreakAfterProperty =\n  | Globals\n  | \"all\"\n  | \"always\"\n  | \"auto\"\n  | \"avoid\"\n  | \"avoid-column\"\n  | \"avoid-page\"\n  | \"avoid-region\"\n  | \"column\"\n  | \"left\"\n  | \"page\"\n  | \"recto\"\n  | \"region\"\n  | \"right\"\n  | \"verso\";\n\nexport type BreakBeforeProperty =\n  | Globals\n  | \"all\"\n  | \"always\"\n  | \"auto\"\n  | \"avoid\"\n  | \"avoid-column\"\n  | \"avoid-page\"\n  | \"avoid-region\"\n  | \"column\"\n  | \"left\"\n  | \"page\"\n  | \"recto\"\n  | \"region\"\n  | \"right\"\n  | \"verso\";\n\nexport type BreakInsideProperty = Globals | \"auto\" | \"avoid\" | \"avoid-column\" | \"avoid-page\" | \"avoid-region\";\n\nexport type CaptionSideProperty = Globals | \"block-end\" | \"block-start\" | \"bottom\" | \"inline-end\" | \"inline-start\" | \"top\";\n\nexport type CaretColorProperty = Globals | Color | \"auto\";\n\nexport type ClearProperty = Globals | \"both\" | \"inline-end\" | \"inline-start\" | \"left\" | \"none\" | \"right\";\n\nexport type ClipProperty = Globals | \"auto\" | string;\n\nexport type ClipPathProperty = Globals | GeometryBox | \"none\" | string;\n\nexport type ColorProperty = Globals | Color;\n\nexport type ColorAdjustProperty = Globals | \"economy\" | \"exact\";\n\nexport type ColumnCountProperty = Globals | \"auto\" | number;\n\nexport type ColumnFillProperty = Globals | \"auto\" | \"balance\" | \"balance-all\";\n\nexport type ColumnGapProperty<TLength> = Globals | TLength | \"normal\" | string;\n\nexport type ColumnRuleProperty<TLength> = Globals | LineWidth<TLength> | LineStyle | Color | string;\n\nexport type ColumnRuleColorProperty = Globals | Color;\n\nexport type ColumnRuleStyleProperty = Globals | LineStyle | string;\n\nexport type ColumnRuleWidthProperty<TLength> = Globals | LineWidth<TLength> | string;\n\nexport type ColumnSpanProperty = Globals | \"all\" | \"none\";\n\nexport type ColumnWidthProperty<TLength> = Globals | TLength | \"auto\";\n\nexport type ColumnsProperty<TLength> = Globals | TLength | \"auto\" | string | number;\n\nexport type ContainProperty = Globals | \"content\" | \"layout\" | \"none\" | \"paint\" | \"size\" | \"strict\" | \"style\" | string;\n\nexport type ContentProperty = Globals | ContentList | \"none\" | \"normal\" | string;\n\nexport type CounterIncrementProperty = Globals | \"none\" | string;\n\nexport type CounterResetProperty = Globals | \"none\" | string;\n\nexport type CounterSetProperty = Globals | \"none\" | string;\n\nexport type CursorProperty =\n  | Globals\n  | \"-moz-grab\"\n  | \"-webkit-grab\"\n  | \"alias\"\n  | \"all-scroll\"\n  | \"auto\"\n  | \"cell\"\n  | \"col-resize\"\n  | \"context-menu\"\n  | \"copy\"\n  | \"crosshair\"\n  | \"default\"\n  | \"e-resize\"\n  | \"ew-resize\"\n  | \"grab\"\n  | \"grabbing\"\n  | \"help\"\n  | \"move\"\n  | \"n-resize\"\n  | \"ne-resize\"\n  | \"nesw-resize\"\n  | \"no-drop\"\n  | \"none\"\n  | \"not-allowed\"\n  | \"ns-resize\"\n  | \"nw-resize\"\n  | \"nwse-resize\"\n  | \"pointer\"\n  | \"progress\"\n  | \"row-resize\"\n  | \"s-resize\"\n  | \"se-resize\"\n  | \"sw-resize\"\n  | \"text\"\n  | \"vertical-text\"\n  | \"w-resize\"\n  | \"wait\"\n  | \"zoom-in\"\n  | \"zoom-out\"\n  | string;\n\nexport type DirectionProperty = Globals | \"ltr\" | \"rtl\";\n\nexport type DisplayProperty = Globals | DisplayOutside | DisplayInside | DisplayInternal | DisplayLegacy | \"contents\" | \"list-item\" | \"none\" | string;\n\nexport type EmptyCellsProperty = Globals | \"hide\" | \"show\";\n\nexport type FilterProperty = Globals | \"none\" | string;\n\nexport type FlexProperty<TLength> = Globals | TLength | \"auto\" | \"available\" | \"content\" | \"fit-content\" | \"max-content\" | \"min-content\" | \"none\" | string | number;\n\nexport type FlexBasisProperty<TLength> =\n  | Globals\n  | TLength\n  | \"-moz-max-content\"\n  | \"-moz-min-content\"\n  | \"-webkit-auto\"\n  | \"auto\"\n  | \"available\"\n  | \"content\"\n  | \"fit-content\"\n  | \"max-content\"\n  | \"min-content\"\n  | string;\n\nexport type FlexDirectionProperty = Globals | \"column\" | \"column-reverse\" | \"row\" | \"row-reverse\";\n\nexport type FlexFlowProperty = Globals | \"column\" | \"column-reverse\" | \"nowrap\" | \"row\" | \"row-reverse\" | \"wrap\" | \"wrap-reverse\" | string;\n\nexport type FlexWrapProperty = Globals | \"nowrap\" | \"wrap\" | \"wrap-reverse\";\n\nexport type FloatProperty = Globals | \"inline-end\" | \"inline-start\" | \"left\" | \"none\" | \"right\";\n\nexport type FontProperty = Globals | \"caption\" | \"icon\" | \"menu\" | \"message-box\" | \"small-caption\" | \"status-bar\" | string;\n\nexport type FontFamilyProperty = Globals | GenericFamily | string;\n\nexport type FontFeatureSettingsProperty = Globals | \"normal\" | string;\n\nexport type FontKerningProperty = Globals | \"auto\" | \"none\" | \"normal\";\n\nexport type FontLanguageOverrideProperty = Globals | \"normal\" | string;\n\nexport type FontOpticalSizingProperty = Globals | \"auto\" | \"none\";\n\nexport type FontSizeProperty<TLength> = Globals | AbsoluteSize | TLength | \"larger\" | \"smaller\" | string;\n\nexport type FontSizeAdjustProperty = Globals | \"none\" | number;\n\nexport type FontStretchProperty = Globals | FontStretchAbsolute;\n\nexport type FontStyleProperty = Globals | \"italic\" | \"normal\" | \"oblique\" | string;\n\nexport type FontSynthesisProperty = Globals | \"none\" | \"style\" | \"weight\" | string;\n\nexport type FontVariantProperty =\n  | Globals\n  | EastAsianVariantValues\n  | \"all-petite-caps\"\n  | \"all-small-caps\"\n  | \"common-ligatures\"\n  | \"contextual\"\n  | \"diagonal-fractions\"\n  | \"discretionary-ligatures\"\n  | \"full-width\"\n  | \"historical-forms\"\n  | \"historical-ligatures\"\n  | \"lining-nums\"\n  | \"no-common-ligatures\"\n  | \"no-contextual\"\n  | \"no-discretionary-ligatures\"\n  | \"no-historical-ligatures\"\n  | \"none\"\n  | \"normal\"\n  | \"oldstyle-nums\"\n  | \"ordinal\"\n  | \"petite-caps\"\n  | \"proportional-nums\"\n  | \"proportional-width\"\n  | \"ruby\"\n  | \"slashed-zero\"\n  | \"small-caps\"\n  | \"stacked-fractions\"\n  | \"tabular-nums\"\n  | \"titling-caps\"\n  | \"unicase\"\n  | string;\n\nexport type FontVariantAlternatesProperty = Globals | \"historical-forms\" | \"normal\" | string;\n\nexport type FontVariantCapsProperty = Globals | \"all-petite-caps\" | \"all-small-caps\" | \"normal\" | \"petite-caps\" | \"small-caps\" | \"titling-caps\" | \"unicase\";\n\nexport type FontVariantEastAsianProperty = Globals | EastAsianVariantValues | \"full-width\" | \"normal\" | \"proportional-width\" | \"ruby\" | string;\n\nexport type FontVariantLigaturesProperty =\n  | Globals\n  | \"common-ligatures\"\n  | \"contextual\"\n  | \"discretionary-ligatures\"\n  | \"historical-ligatures\"\n  | \"no-common-ligatures\"\n  | \"no-contextual\"\n  | \"no-discretionary-ligatures\"\n  | \"no-historical-ligatures\"\n  | \"none\"\n  | \"normal\"\n  | string;\n\nexport type FontVariantNumericProperty =\n  | Globals\n  | \"diagonal-fractions\"\n  | \"lining-nums\"\n  | \"normal\"\n  | \"oldstyle-nums\"\n  | \"ordinal\"\n  | \"proportional-nums\"\n  | \"slashed-zero\"\n  | \"stacked-fractions\"\n  | \"tabular-nums\"\n  | string;\n\nexport type FontVariantPositionProperty = Globals | \"normal\" | \"sub\" | \"super\";\n\nexport type FontVariationSettingsProperty = Globals | \"normal\" | string;\n\nexport type FontWeightProperty = Globals | FontWeightAbsolute | \"bolder\" | \"lighter\";\n\nexport type GapProperty<TLength> = Globals | TLength | \"normal\" | string;\n\nexport type GridProperty = Globals | \"none\" | string;\n\nexport type GridAreaProperty = Globals | GridLine | string;\n\nexport type GridAutoColumnsProperty<TLength> = Globals | TrackBreadth<TLength> | string;\n\nexport type GridAutoFlowProperty = Globals | \"column\" | \"dense\" | \"row\" | string;\n\nexport type GridAutoRowsProperty<TLength> = Globals | TrackBreadth<TLength> | string;\n\nexport type GridColumnProperty = Globals | GridLine | string;\n\nexport type GridColumnEndProperty = Globals | GridLine;\n\nexport type GridColumnGapProperty<TLength> = Globals | TLength | string;\n\nexport type GridColumnStartProperty = Globals | GridLine;\n\nexport type GridGapProperty<TLength> = Globals | TLength | string;\n\nexport type GridRowProperty = Globals | GridLine | string;\n\nexport type GridRowEndProperty = Globals | GridLine;\n\nexport type GridRowGapProperty<TLength> = Globals | TLength | string;\n\nexport type GridRowStartProperty = Globals | GridLine;\n\nexport type GridTemplateProperty = Globals | \"none\" | string;\n\nexport type GridTemplateAreasProperty = Globals | \"none\" | string;\n\nexport type GridTemplateColumnsProperty<TLength> = Globals | TrackBreadth<TLength> | \"none\" | \"subgrid\" | string;\n\nexport type GridTemplateRowsProperty<TLength> = Globals | TrackBreadth<TLength> | \"none\" | \"subgrid\" | string;\n\nexport type HangingPunctuationProperty = Globals | \"allow-end\" | \"first\" | \"force-end\" | \"last\" | \"none\" | string;\n\nexport type HeightProperty<TLength> =\n  | Globals\n  | TLength\n  | \"-moz-max-content\"\n  | \"-moz-min-content\"\n  | \"-webkit-fit-content\"\n  | \"auto\"\n  | \"available\"\n  | \"fit-content\"\n  | \"max-content\"\n  | \"min-content\"\n  | string;\n\nexport type HyphensProperty = Globals | \"auto\" | \"manual\" | \"none\";\n\nexport type ImageOrientationProperty = Globals | \"flip\" | \"from-image\" | string;\n\nexport type ImageRenderingProperty = Globals | \"-moz-crisp-edges\" | \"-webkit-optimize-contrast\" | \"auto\" | \"crisp-edges\" | \"pixelated\";\n\nexport type ImageResolutionProperty = Globals | \"from-image\" | string;\n\nexport type ImeModeProperty = Globals | \"active\" | \"auto\" | \"disabled\" | \"inactive\" | \"normal\";\n\nexport type InitialLetterProperty = Globals | \"normal\" | string | number;\n\nexport type InlineSizeProperty<TLength> =\n  | Globals\n  | TLength\n  | \"-moz-fit-content\"\n  | \"-moz-max-content\"\n  | \"-moz-min-content\"\n  | \"-webkit-fill-available\"\n  | \"auto\"\n  | \"available\"\n  | \"fit-content\"\n  | \"max-content\"\n  | \"min-content\"\n  | string;\n\nexport type InsetProperty<TLength> = Globals | TLength | \"auto\" | string;\n\nexport type InsetBlockProperty<TLength> = Globals | TLength | \"auto\" | string;\n\nexport type InsetBlockEndProperty<TLength> = Globals | TLength | \"auto\" | string;\n\nexport type InsetBlockStartProperty<TLength> = Globals | TLength | \"auto\" | string;\n\nexport type InsetInlineProperty<TLength> = Globals | TLength | \"auto\" | string;\n\nexport type InsetInlineEndProperty<TLength> = Globals | TLength | \"auto\" | string;\n\nexport type InsetInlineStartProperty<TLength> = Globals | TLength | \"auto\" | string;\n\nexport type IsolationProperty = Globals | \"auto\" | \"isolate\";\n\nexport type JustifyContentProperty = Globals | ContentDistribution | ContentPosition | \"left\" | \"normal\" | \"right\" | string;\n\nexport type JustifyItemsProperty = Globals | SelfPosition | \"baseline\" | \"left\" | \"legacy\" | \"normal\" | \"right\" | \"stretch\" | string;\n\nexport type JustifySelfProperty = Globals | SelfPosition | \"auto\" | \"baseline\" | \"left\" | \"normal\" | \"right\" | \"stretch\" | string;\n\nexport type LeftProperty<TLength> = Globals | TLength | \"auto\" | string;\n\nexport type LetterSpacingProperty<TLength> = Globals | TLength | \"normal\";\n\nexport type LineBreakProperty = Globals | \"anywhere\" | \"auto\" | \"loose\" | \"normal\" | \"strict\";\n\nexport type LineClampProperty = Globals | \"none\" | number;\n\nexport type LineHeightProperty<TLength> = Globals | TLength | \"normal\" | string | number;\n\nexport type LineHeightStepProperty<TLength> = Globals | TLength;\n\nexport type ListStyleProperty = Globals | \"inside\" | \"none\" | \"outside\" | string;\n\nexport type ListStyleImageProperty = Globals | \"none\" | string;\n\nexport type ListStylePositionProperty = Globals | \"inside\" | \"outside\";\n\nexport type ListStyleTypeProperty = Globals | \"none\" | string;\n\nexport type MarginProperty<TLength> = Globals | TLength | \"auto\" | string;\n\nexport type MarginBlockProperty<TLength> = Globals | TLength | \"auto\" | string;\n\nexport type MarginBlockEndProperty<TLength> = Globals | TLength | \"auto\" | string;\n\nexport type MarginBlockStartProperty<TLength> = Globals | TLength | \"auto\" | string;\n\nexport type MarginBottomProperty<TLength> = Globals | TLength | \"auto\" | string;\n\nexport type MarginInlineProperty<TLength> = Globals | TLength | \"auto\" | string;\n\nexport type MarginInlineEndProperty<TLength> = Globals | TLength | \"auto\" | string;\n\nexport type MarginInlineStartProperty<TLength> = Globals | TLength | \"auto\" | string;\n\nexport type MarginLeftProperty<TLength> = Globals | TLength | \"auto\" | string;\n\nexport type MarginRightProperty<TLength> = Globals | TLength | \"auto\" | string;\n\nexport type MarginTopProperty<TLength> = Globals | TLength | \"auto\" | string;\n\nexport type MaskProperty<TLength> = Globals | MaskLayer<TLength> | string;\n\nexport type MaskBorderProperty = Globals | \"alpha\" | \"luminance\" | \"none\" | \"repeat\" | \"round\" | \"space\" | \"stretch\" | string | number;\n\nexport type MaskBorderModeProperty = Globals | \"alpha\" | \"luminance\";\n\nexport type MaskBorderOutsetProperty<TLength> = Globals | TLength | string | number;\n\nexport type MaskBorderRepeatProperty = Globals | \"repeat\" | \"round\" | \"space\" | \"stretch\" | string;\n\nexport type MaskBorderSliceProperty = Globals | string | number;\n\nexport type MaskBorderSourceProperty = Globals | \"none\" | string;\n\nexport type MaskBorderWidthProperty<TLength> = Globals | TLength | \"auto\" | string | number;\n\nexport type MaskClipProperty = Globals | GeometryBox | \"no-clip\" | string;\n\nexport type MaskCompositeProperty = Globals | CompositingOperator | string;\n\nexport type MaskImageProperty = Globals | \"none\" | string;\n\nexport type MaskModeProperty = Globals | MaskingMode | string;\n\nexport type MaskOriginProperty = Globals | Box | \"margin-box\" | string;\n\nexport type MaskPositionProperty<TLength> = Globals | Position<TLength> | string;\n\nexport type MaskRepeatProperty = Globals | RepeatStyle | string;\n\nexport type MaskSizeProperty<TLength> = Globals | BgSize<TLength> | string;\n\nexport type MaskTypeProperty = Globals | \"alpha\" | \"luminance\";\n\nexport type MaxBlockSizeProperty<TLength> =\n  | Globals\n  | TLength\n  | \"-moz-max-content\"\n  | \"-moz-min-content\"\n  | \"-webkit-fill-available\"\n  | \"fill-available\"\n  | \"fit-content\"\n  | \"max-content\"\n  | \"min-content\"\n  | \"none\"\n  | string;\n\nexport type MaxHeightProperty<TLength> =\n  | Globals\n  | TLength\n  | \"-moz-fit-content\"\n  | \"-moz-max-content\"\n  | \"-moz-min-content\"\n  | \"-webkit-fit-content\"\n  | \"-webkit-max-content\"\n  | \"-webkit-min-content\"\n  | \"fill-available\"\n  | \"fit-content\"\n  | \"intrinsic\"\n  | \"max-content\"\n  | \"min-content\"\n  | \"none\"\n  | string;\n\nexport type MaxInlineSizeProperty<TLength> =\n  | Globals\n  | TLength\n  | \"-moz-fit-content\"\n  | \"-moz-max-content\"\n  | \"-moz-min-content\"\n  | \"-webkit-fill-available\"\n  | \"fill-available\"\n  | \"fit-content\"\n  | \"max-content\"\n  | \"min-content\"\n  | \"none\"\n  | string;\n\nexport type MaxLinesProperty = Globals | \"none\" | number;\n\nexport type MaxWidthProperty<TLength> =\n  | Globals\n  | TLength\n  | \"-moz-fit-content\"\n  | \"-moz-max-content\"\n  | \"-moz-min-content\"\n  | \"-webkit-fit-content\"\n  | \"-webkit-max-content\"\n  | \"-webkit-min-content\"\n  | \"fill-available\"\n  | \"fit-content\"\n  | \"intrinsic\"\n  | \"max-content\"\n  | \"min-content\"\n  | \"none\"\n  | string;\n\nexport type MinBlockSizeProperty<TLength> =\n  | Globals\n  | TLength\n  | \"-moz-max-content\"\n  | \"-moz-min-content\"\n  | \"-webkit-fill-available\"\n  | \"auto\"\n  | \"fill-available\"\n  | \"fit-content\"\n  | \"max-content\"\n  | \"min-content\"\n  | string;\n\nexport type MinHeightProperty<TLength> =\n  | Globals\n  | TLength\n  | \"-moz-fit-content\"\n  | \"-moz-max-content\"\n  | \"-moz-min-content\"\n  | \"-webkit-fit-content\"\n  | \"-webkit-max-content\"\n  | \"-webkit-min-content\"\n  | \"auto\"\n  | \"fill-available\"\n  | \"fit-content\"\n  | \"intrinsic\"\n  | \"max-content\"\n  | \"min-content\"\n  | string;\n\nexport type MinInlineSizeProperty<TLength> =\n  | Globals\n  | TLength\n  | \"-moz-fit-content\"\n  | \"-moz-max-content\"\n  | \"-moz-min-content\"\n  | \"-webkit-fill-available\"\n  | \"auto\"\n  | \"fill-available\"\n  | \"fit-content\"\n  | \"max-content\"\n  | \"min-content\"\n  | string;\n\nexport type MinWidthProperty<TLength> =\n  | Globals\n  | TLength\n  | \"-moz-fit-content\"\n  | \"-moz-max-content\"\n  | \"-moz-min-content\"\n  | \"-webkit-fill-available\"\n  | \"-webkit-fit-content\"\n  | \"-webkit-max-content\"\n  | \"-webkit-min-content\"\n  | \"auto\"\n  | \"fill-available\"\n  | \"fit-content\"\n  | \"intrinsic\"\n  | \"max-content\"\n  | \"min-content\"\n  | \"min-intrinsic\"\n  | string;\n\nexport type MixBlendModeProperty = Globals | BlendMode;\n\nexport type OffsetProperty<TLength> = Globals | Position<TLength> | GeometryBox | \"auto\" | \"none\" | string;\n\nexport type OffsetDistanceProperty<TLength> = Globals | TLength | string;\n\nexport type OffsetPathProperty = Globals | GeometryBox | \"none\" | string;\n\nexport type OffsetRotateProperty = Globals | \"auto\" | \"reverse\" | string;\n\nexport type ObjectFitProperty = Globals | \"contain\" | \"cover\" | \"fill\" | \"none\" | \"scale-down\";\n\nexport type ObjectPositionProperty<TLength> = Globals | Position<TLength>;\n\nexport type OffsetAnchorProperty<TLength> = Globals | Position<TLength> | \"auto\";\n\nexport type OpacityProperty = Globals | string | number;\n\nexport type OutlineProperty<TLength> = Globals | Color | LineStyle | LineWidth<TLength> | \"auto\" | \"invert\" | string;\n\nexport type OutlineColorProperty = Globals | Color | \"invert\";\n\nexport type OutlineOffsetProperty<TLength> = Globals | TLength;\n\nexport type OutlineStyleProperty = Globals | LineStyle | \"auto\" | string;\n\nexport type OutlineWidthProperty<TLength> = Globals | LineWidth<TLength>;\n\nexport type OverflowProperty = Globals | \"auto\" | \"hidden\" | \"scroll\" | \"visible\" | string;\n\nexport type OverflowAnchorProperty = Globals | \"auto\" | \"none\";\n\nexport type OverflowBlockProperty = Globals | \"auto\" | \"clip\" | \"hidden\" | \"scroll\" | \"visible\";\n\nexport type OverflowClipBoxProperty = Globals | \"content-box\" | \"padding-box\";\n\nexport type OverflowInlineProperty = Globals | \"auto\" | \"clip\" | \"hidden\" | \"scroll\" | \"visible\";\n\nexport type OverflowWrapProperty = Globals | \"anywhere\" | \"break-word\" | \"normal\";\n\nexport type OverflowXProperty = Globals | \"auto\" | \"hidden\" | \"scroll\" | \"visible\";\n\nexport type OverflowYProperty = Globals | \"auto\" | \"hidden\" | \"scroll\" | \"visible\";\n\nexport type OverscrollBehaviorProperty = Globals | \"auto\" | \"contain\" | \"none\" | string;\n\nexport type OverscrollBehaviorBlockProperty = Globals | \"auto\" | \"contain\" | \"none\";\n\nexport type OverscrollBehaviorInlineProperty = Globals | \"auto\" | \"contain\" | \"none\";\n\nexport type OverscrollBehaviorXProperty = Globals | \"auto\" | \"contain\" | \"none\";\n\nexport type OverscrollBehaviorYProperty = Globals | \"auto\" | \"contain\" | \"none\";\n\nexport type PaddingProperty<TLength> = Globals | TLength | string;\n\nexport type PaddingBlockProperty<TLength> = Globals | TLength | string;\n\nexport type PaddingBlockEndProperty<TLength> = Globals | TLength | string;\n\nexport type PaddingBlockStartProperty<TLength> = Globals | TLength | string;\n\nexport type PaddingBottomProperty<TLength> = Globals | TLength | string;\n\nexport type PaddingInlineProperty<TLength> = Globals | TLength | string;\n\nexport type PaddingInlineEndProperty<TLength> = Globals | TLength | string;\n\nexport type PaddingInlineStartProperty<TLength> = Globals | TLength | string;\n\nexport type PaddingLeftProperty<TLength> = Globals | TLength | string;\n\nexport type PaddingRightProperty<TLength> = Globals | TLength | string;\n\nexport type PaddingTopProperty<TLength> = Globals | TLength | string;\n\nexport type PageBreakAfterProperty = Globals | \"always\" | \"auto\" | \"avoid\" | \"left\" | \"recto\" | \"right\" | \"verso\";\n\nexport type PageBreakBeforeProperty = Globals | \"always\" | \"auto\" | \"avoid\" | \"left\" | \"recto\" | \"right\" | \"verso\";\n\nexport type PageBreakInsideProperty = Globals | \"auto\" | \"avoid\";\n\nexport type PaintOrderProperty = Globals | \"fill\" | \"markers\" | \"normal\" | \"stroke\" | string;\n\nexport type PerspectiveProperty<TLength> = Globals | TLength | \"none\";\n\nexport type PerspectiveOriginProperty<TLength> = Globals | Position<TLength>;\n\nexport type PlaceContentProperty = Globals | ContentDistribution | ContentPosition | \"baseline\" | \"normal\" | string;\n\nexport type PlaceItemsProperty = Globals | SelfPosition | \"baseline\" | \"normal\" | \"stretch\" | string;\n\nexport type PlaceSelfProperty = Globals | SelfPosition | \"auto\" | \"baseline\" | \"normal\" | \"stretch\" | string;\n\nexport type PointerEventsProperty = Globals | \"all\" | \"auto\" | \"fill\" | \"inherit\" | \"none\" | \"painted\" | \"stroke\" | \"visible\" | \"visibleFill\" | \"visiblePainted\" | \"visibleStroke\";\n\nexport type PositionProperty = Globals | \"-webkit-sticky\" | \"absolute\" | \"fixed\" | \"relative\" | \"static\" | \"sticky\";\n\nexport type QuotesProperty = Globals | \"auto\" | \"none\" | string;\n\nexport type ResizeProperty = Globals | \"block\" | \"both\" | \"horizontal\" | \"inline\" | \"none\" | \"vertical\";\n\nexport type RightProperty<TLength> = Globals | TLength | \"auto\" | string;\n\nexport type RotateProperty = Globals | \"none\" | string;\n\nexport type RowGapProperty<TLength> = Globals | TLength | \"normal\" | string;\n\nexport type RubyAlignProperty = Globals | \"center\" | \"space-around\" | \"space-between\" | \"start\";\n\nexport type RubyMergeProperty = Globals | \"auto\" | \"collapse\" | \"separate\";\n\nexport type RubyPositionProperty = Globals | \"over\" | \"under\";\n\nexport type ScaleProperty = Globals | \"none\" | string | number;\n\nexport type ScrollBehaviorProperty = Globals | \"auto\" | \"smooth\";\n\nexport type ScrollMarginProperty<TLength> = Globals | TLength | string;\n\nexport type ScrollMarginBlockProperty<TLength> = Globals | TLength | string;\n\nexport type ScrollMarginBlockEndProperty<TLength> = Globals | TLength;\n\nexport type ScrollMarginBlockStartProperty<TLength> = Globals | TLength;\n\nexport type ScrollMarginBottomProperty<TLength> = Globals | TLength;\n\nexport type ScrollMarginInlineProperty<TLength> = Globals | TLength | string;\n\nexport type ScrollMarginInlineEndProperty<TLength> = Globals | TLength;\n\nexport type ScrollMarginInlineStartProperty<TLength> = Globals | TLength;\n\nexport type ScrollMarginLeftProperty<TLength> = Globals | TLength;\n\nexport type ScrollMarginRightProperty<TLength> = Globals | TLength;\n\nexport type ScrollMarginTopProperty<TLength> = Globals | TLength;\n\nexport type ScrollPaddingProperty<TLength> = Globals | TLength | \"auto\" | string;\n\nexport type ScrollPaddingBlockProperty<TLength> = Globals | TLength | \"auto\" | string;\n\nexport type ScrollPaddingBlockEndProperty<TLength> = Globals | TLength | \"auto\" | string;\n\nexport type ScrollPaddingBlockStartProperty<TLength> = Globals | TLength | \"auto\" | string;\n\nexport type ScrollPaddingBottomProperty<TLength> = Globals | TLength | \"auto\" | string;\n\nexport type ScrollPaddingInlineProperty<TLength> = Globals | TLength | \"auto\" | string;\n\nexport type ScrollPaddingInlineEndProperty<TLength> = Globals | TLength | \"auto\" | string;\n\nexport type ScrollPaddingInlineStartProperty<TLength> = Globals | TLength | \"auto\" | string;\n\nexport type ScrollPaddingLeftProperty<TLength> = Globals | TLength | \"auto\" | string;\n\nexport type ScrollPaddingRightProperty<TLength> = Globals | TLength | \"auto\" | string;\n\nexport type ScrollPaddingTopProperty<TLength> = Globals | TLength | \"auto\" | string;\n\nexport type ScrollSnapAlignProperty = Globals | \"center\" | \"end\" | \"none\" | \"start\" | string;\n\nexport type ScrollSnapCoordinateProperty<TLength> = Globals | Position<TLength> | \"none\" | string;\n\nexport type ScrollSnapDestinationProperty<TLength> = Globals | Position<TLength>;\n\nexport type ScrollSnapPointsXProperty = Globals | \"none\" | string;\n\nexport type ScrollSnapPointsYProperty = Globals | \"none\" | string;\n\nexport type ScrollSnapStopProperty = Globals | \"always\" | \"normal\";\n\nexport type ScrollSnapTypeProperty = Globals | \"block\" | \"both\" | \"inline\" | \"none\" | \"x\" | \"y\" | string;\n\nexport type ScrollSnapTypeXProperty = Globals | \"mandatory\" | \"none\" | \"proximity\";\n\nexport type ScrollSnapTypeYProperty = Globals | \"mandatory\" | \"none\" | \"proximity\";\n\nexport type ScrollbarColorProperty = Globals | Color | \"auto\" | \"dark\" | \"light\";\n\nexport type MsScrollbarTrackColorProperty = Globals | Color;\n\nexport type ScrollbarWidthProperty = Globals | \"auto\" | \"none\" | \"thin\";\n\nexport type ShapeImageThresholdProperty = Globals | string | number;\n\nexport type ShapeMarginProperty<TLength> = Globals | TLength | string;\n\nexport type ShapeOutsideProperty = Globals | Box | \"margin-box\" | \"none\" | string;\n\nexport type TabSizeProperty<TLength> = Globals | TLength | number;\n\nexport type TableLayoutProperty = Globals | \"auto\" | \"fixed\";\n\nexport type TextAlignProperty = Globals | \"center\" | \"end\" | \"justify\" | \"left\" | \"match-parent\" | \"right\" | \"start\";\n\nexport type TextAlignLastProperty = Globals | \"auto\" | \"center\" | \"end\" | \"justify\" | \"left\" | \"right\" | \"start\";\n\nexport type TextCombineUprightProperty = Globals | \"all\" | \"digits\" | \"none\" | string;\n\nexport type TextDecorationProperty<TLength> =\n  | Globals\n  | Color\n  | TLength\n  | \"auto\"\n  | \"blink\"\n  | \"dashed\"\n  | \"dotted\"\n  | \"double\"\n  | \"from-font\"\n  | \"grammar-error\"\n  | \"line-through\"\n  | \"none\"\n  | \"overline\"\n  | \"solid\"\n  | \"spelling-error\"\n  | \"underline\"\n  | \"wavy\"\n  | string;\n\nexport type TextDecorationColorProperty = Globals | Color;\n\nexport type TextDecorationLineProperty = Globals | \"blink\" | \"grammar-error\" | \"line-through\" | \"none\" | \"overline\" | \"spelling-error\" | \"underline\" | string;\n\nexport type TextDecorationSkipProperty = Globals | \"box-decoration\" | \"edges\" | \"leading-spaces\" | \"none\" | \"objects\" | \"spaces\" | \"trailing-spaces\" | string;\n\nexport type TextDecorationSkipInkProperty = Globals | \"auto\" | \"none\";\n\nexport type TextDecorationStyleProperty = Globals | \"dashed\" | \"dotted\" | \"double\" | \"solid\" | \"wavy\";\n\nexport type TextDecorationThicknessProperty<TLength> = Globals | TLength | \"auto\" | \"from-font\";\n\nexport type TextEmphasisProperty = Globals | Color | \"circle\" | \"dot\" | \"double-circle\" | \"filled\" | \"none\" | \"open\" | \"sesame\" | \"triangle\" | string;\n\nexport type TextEmphasisColorProperty = Globals | Color;\n\nexport type TextEmphasisStyleProperty = Globals | \"circle\" | \"dot\" | \"double-circle\" | \"filled\" | \"none\" | \"open\" | \"sesame\" | \"triangle\" | string;\n\nexport type TextIndentProperty<TLength> = Globals | TLength | string;\n\nexport type TextJustifyProperty = Globals | \"auto\" | \"inter-character\" | \"inter-word\" | \"none\";\n\nexport type TextOrientationProperty = Globals | \"mixed\" | \"sideways\" | \"upright\";\n\nexport type TextOverflowProperty = Globals | \"clip\" | \"ellipsis\" | string;\n\nexport type TextRenderingProperty = Globals | \"auto\" | \"geometricPrecision\" | \"optimizeLegibility\" | \"optimizeSpeed\";\n\nexport type TextShadowProperty = Globals | \"none\" | string;\n\nexport type TextSizeAdjustProperty = Globals | \"auto\" | \"none\" | string;\n\nexport type TextTransformProperty = Globals | \"capitalize\" | \"full-size-kana\" | \"full-width\" | \"lowercase\" | \"none\" | \"uppercase\";\n\nexport type TextUnderlineOffsetProperty<TLength> = Globals | TLength | \"auto\" | \"from-font\";\n\nexport type TextUnderlinePositionProperty = Globals | \"auto\" | \"left\" | \"right\" | \"under\" | string;\n\nexport type TopProperty<TLength> = Globals | TLength | \"auto\" | string;\n\nexport type TouchActionProperty =\n  | Globals\n  | \"-ms-manipulation\"\n  | \"-ms-none\"\n  | \"-ms-pinch-zoom\"\n  | \"auto\"\n  | \"manipulation\"\n  | \"none\"\n  | \"pan-down\"\n  | \"pan-left\"\n  | \"pan-right\"\n  | \"pan-up\"\n  | \"pan-x\"\n  | \"pan-y\"\n  | \"pinch-zoom\"\n  | string;\n\nexport type TransformProperty = Globals | \"none\" | string;\n\nexport type TransformBoxProperty = Globals | \"border-box\" | \"fill-box\" | \"view-box\";\n\nexport type TransformOriginProperty<TLength> = Globals | TLength | \"bottom\" | \"center\" | \"left\" | \"right\" | \"top\" | string;\n\nexport type TransformStyleProperty = Globals | \"flat\" | \"preserve-3d\";\n\nexport type TransitionProperty = Globals | SingleTransition | string;\n\nexport type TransitionPropertyProperty = Globals | \"all\" | \"none\" | string;\n\nexport type TransitionTimingFunctionProperty = Globals | TimingFunction | string;\n\nexport type TranslateProperty<TLength> = Globals | TLength | \"none\" | string;\n\nexport type UnicodeBidiProperty =\n  | Globals\n  | \"-moz-isolate\"\n  | \"-moz-isolate-override\"\n  | \"-moz-plaintext\"\n  | \"-webkit-isolate\"\n  | \"bidi-override\"\n  | \"embed\"\n  | \"isolate\"\n  | \"isolate-override\"\n  | \"normal\"\n  | \"plaintext\";\n\nexport type UserSelectProperty = Globals | \"-moz-none\" | \"all\" | \"auto\" | \"contain\" | \"element\" | \"none\" | \"text\";\n\nexport type VerticalAlignProperty<TLength> = Globals | TLength | \"baseline\" | \"bottom\" | \"middle\" | \"sub\" | \"super\" | \"text-bottom\" | \"text-top\" | \"top\" | string;\n\nexport type VisibilityProperty = Globals | \"collapse\" | \"hidden\" | \"visible\";\n\nexport type WhiteSpaceProperty = Globals | \"-moz-pre-wrap\" | \"break-spaces\" | \"normal\" | \"nowrap\" | \"pre\" | \"pre-line\" | \"pre-wrap\";\n\nexport type WidthProperty<TLength> =\n  | Globals\n  | TLength\n  | \"-moz-fit-content\"\n  | \"-moz-max-content\"\n  | \"-moz-min-content\"\n  | \"-webkit-fill-available\"\n  | \"-webkit-fit-content\"\n  | \"-webkit-max-content\"\n  | \"auto\"\n  | \"available\"\n  | \"fit-content\"\n  | \"intrinsic\"\n  | \"max-content\"\n  | \"min-content\"\n  | \"min-intrinsic\"\n  | string;\n\nexport type WillChangeProperty = Globals | AnimateableFeature | \"auto\" | string;\n\nexport type WordBreakProperty = Globals | \"break-all\" | \"break-word\" | \"keep-all\" | \"normal\";\n\nexport type WordSpacingProperty<TLength> = Globals | TLength | \"normal\" | string;\n\nexport type WordWrapProperty = Globals | \"break-word\" | \"normal\";\n\nexport type WritingModeProperty = Globals | \"horizontal-tb\" | \"sideways-lr\" | \"sideways-rl\" | \"vertical-lr\" | \"vertical-rl\";\n\nexport type ZIndexProperty = Globals | \"auto\" | number;\n\nexport type ZoomProperty = Globals | \"normal\" | \"reset\" | string | number;\n\nexport type MozAppearanceProperty =\n  | Globals\n  | \"-moz-mac-unified-toolbar\"\n  | \"-moz-win-borderless-glass\"\n  | \"-moz-win-browsertabbar-toolbox\"\n  | \"-moz-win-communications-toolbox\"\n  | \"-moz-win-communicationstext\"\n  | \"-moz-win-exclude-glass\"\n  | \"-moz-win-glass\"\n  | \"-moz-win-media-toolbox\"\n  | \"-moz-win-mediatext\"\n  | \"-moz-window-button-box\"\n  | \"-moz-window-button-box-maximized\"\n  | \"-moz-window-button-close\"\n  | \"-moz-window-button-maximize\"\n  | \"-moz-window-button-minimize\"\n  | \"-moz-window-button-restore\"\n  | \"-moz-window-frame-bottom\"\n  | \"-moz-window-frame-left\"\n  | \"-moz-window-frame-right\"\n  | \"-moz-window-titlebar\"\n  | \"-moz-window-titlebar-maximized\"\n  | \"button\"\n  | \"button-arrow-down\"\n  | \"button-arrow-next\"\n  | \"button-arrow-previous\"\n  | \"button-arrow-up\"\n  | \"button-bevel\"\n  | \"button-focus\"\n  | \"caret\"\n  | \"checkbox\"\n  | \"checkbox-container\"\n  | \"checkbox-label\"\n  | \"checkmenuitem\"\n  | \"dualbutton\"\n  | \"groupbox\"\n  | \"listbox\"\n  | \"listitem\"\n  | \"menuarrow\"\n  | \"menubar\"\n  | \"menucheckbox\"\n  | \"menuimage\"\n  | \"menuitem\"\n  | \"menuitemtext\"\n  | \"menulist\"\n  | \"menulist-button\"\n  | \"menulist-text\"\n  | \"menulist-textfield\"\n  | \"menupopup\"\n  | \"menuradio\"\n  | \"menuseparator\"\n  | \"meterbar\"\n  | \"meterchunk\"\n  | \"none\"\n  | \"progressbar\"\n  | \"progressbar-vertical\"\n  | \"progresschunk\"\n  | \"progresschunk-vertical\"\n  | \"radio\"\n  | \"radio-container\"\n  | \"radio-label\"\n  | \"radiomenuitem\"\n  | \"range\"\n  | \"range-thumb\"\n  | \"resizer\"\n  | \"resizerpanel\"\n  | \"scale-horizontal\"\n  | \"scale-vertical\"\n  | \"scalethumb-horizontal\"\n  | \"scalethumb-vertical\"\n  | \"scalethumbend\"\n  | \"scalethumbstart\"\n  | \"scalethumbtick\"\n  | \"scrollbarbutton-down\"\n  | \"scrollbarbutton-left\"\n  | \"scrollbarbutton-right\"\n  | \"scrollbarbutton-up\"\n  | \"scrollbarthumb-horizontal\"\n  | \"scrollbarthumb-vertical\"\n  | \"scrollbartrack-horizontal\"\n  | \"scrollbartrack-vertical\"\n  | \"searchfield\"\n  | \"separator\"\n  | \"sheet\"\n  | \"spinner\"\n  | \"spinner-downbutton\"\n  | \"spinner-textfield\"\n  | \"spinner-upbutton\"\n  | \"splitter\"\n  | \"statusbar\"\n  | \"statusbarpanel\"\n  | \"tab\"\n  | \"tab-scroll-arrow-back\"\n  | \"tab-scroll-arrow-forward\"\n  | \"tabpanel\"\n  | \"tabpanels\"\n  | \"textfield\"\n  | \"textfield-multiline\"\n  | \"toolbar\"\n  | \"toolbarbutton\"\n  | \"toolbarbutton-dropdown\"\n  | \"toolbargripper\"\n  | \"toolbox\"\n  | \"tooltip\"\n  | \"treeheader\"\n  | \"treeheadercell\"\n  | \"treeheadersortarrow\"\n  | \"treeitem\"\n  | \"treeline\"\n  | \"treetwisty\"\n  | \"treetwistyopen\"\n  | \"treeview\";\n\nexport type MozBindingProperty = Globals | \"none\" | string;\n\nexport type MozBorderBottomColorsProperty = Globals | Color | \"none\" | string;\n\nexport type MozBorderLeftColorsProperty = Globals | Color | \"none\" | string;\n\nexport type MozBorderRightColorsProperty = Globals | Color | \"none\" | string;\n\nexport type MozBorderTopColorsProperty = Globals | Color | \"none\" | string;\n\nexport type MozContextPropertiesProperty = Globals | \"fill\" | \"fill-opacity\" | \"none\" | \"stroke\" | \"stroke-opacity\" | string;\n\nexport type MozFloatEdgeProperty = Globals | \"border-box\" | \"content-box\" | \"margin-box\" | \"padding-box\";\n\nexport type MozImageRegionProperty = Globals | \"auto\" | string;\n\nexport type MozOrientProperty = Globals | \"block\" | \"horizontal\" | \"inline\" | \"vertical\";\n\nexport type MozOutlineRadiusProperty<TLength> = Globals | TLength | string;\n\nexport type MozOutlineRadiusBottomleftProperty<TLength> = Globals | TLength | string;\n\nexport type MozOutlineRadiusBottomrightProperty<TLength> = Globals | TLength | string;\n\nexport type MozOutlineRadiusTopleftProperty<TLength> = Globals | TLength | string;\n\nexport type MozOutlineRadiusToprightProperty<TLength> = Globals | TLength | string;\n\nexport type MozStackSizingProperty = Globals | \"ignore\" | \"stretch-to-fit\";\n\nexport type MozTextBlinkProperty = Globals | \"blink\" | \"none\";\n\nexport type MozUserFocusProperty = Globals | \"ignore\" | \"none\" | \"normal\" | \"select-after\" | \"select-all\" | \"select-before\" | \"select-menu\" | \"select-same\";\n\nexport type MozUserInputProperty = Globals | \"auto\" | \"disabled\" | \"enabled\" | \"none\";\n\nexport type MozUserModifyProperty = Globals | \"read-only\" | \"read-write\" | \"write-only\";\n\nexport type MozWindowDraggingProperty = Globals | \"drag\" | \"no-drag\";\n\nexport type MozWindowShadowProperty = Globals | \"default\" | \"menu\" | \"none\" | \"sheet\" | \"tooltip\";\n\nexport type MsAcceleratorProperty = Globals | \"false\" | \"true\";\n\nexport type MsBlockProgressionProperty = Globals | \"bt\" | \"lr\" | \"rl\" | \"tb\";\n\nexport type MsContentZoomChainingProperty = Globals | \"chained\" | \"none\";\n\nexport type MsContentZoomSnapProperty = Globals | \"mandatory\" | \"none\" | \"proximity\" | string;\n\nexport type MsContentZoomSnapTypeProperty = Globals | \"mandatory\" | \"none\" | \"proximity\";\n\nexport type MsContentZoomingProperty = Globals | \"none\" | \"zoom\";\n\nexport type MsFlowFromProperty = Globals | \"none\" | string;\n\nexport type MsFlowIntoProperty = Globals | \"none\" | string;\n\nexport type MsHighContrastAdjustProperty = Globals | \"auto\" | \"none\";\n\nexport type MsHyphenateLimitCharsProperty = Globals | \"auto\" | string | number;\n\nexport type MsHyphenateLimitLinesProperty = Globals | \"no-limit\" | number;\n\nexport type MsHyphenateLimitZoneProperty<TLength> = Globals | TLength | string;\n\nexport type MsImeAlignProperty = Globals | \"after\" | \"auto\";\n\nexport type MsOverflowStyleProperty = Globals | \"-ms-autohiding-scrollbar\" | \"auto\" | \"none\" | \"scrollbar\";\n\nexport type MsScrollChainingProperty = Globals | \"chained\" | \"none\";\n\nexport type MsScrollLimitXMaxProperty<TLength> = Globals | TLength | \"auto\";\n\nexport type MsScrollLimitXMinProperty<TLength> = Globals | TLength;\n\nexport type MsScrollLimitYMaxProperty<TLength> = Globals | TLength | \"auto\";\n\nexport type MsScrollLimitYMinProperty<TLength> = Globals | TLength;\n\nexport type MsScrollRailsProperty = Globals | \"none\" | \"railed\";\n\nexport type MsScrollSnapTypeProperty = Globals | \"mandatory\" | \"none\" | \"proximity\";\n\nexport type MsScrollTranslationProperty = Globals | \"none\" | \"vertical-to-horizontal\";\n\nexport type MsScrollbar3dlightColorProperty = Globals | Color;\n\nexport type MsScrollbarArrowColorProperty = Globals | Color;\n\nexport type MsScrollbarBaseColorProperty = Globals | Color;\n\nexport type MsScrollbarDarkshadowColorProperty = Globals | Color;\n\nexport type MsScrollbarFaceColorProperty = Globals | Color;\n\nexport type MsScrollbarHighlightColorProperty = Globals | Color;\n\nexport type MsScrollbarShadowColorProperty = Globals | Color;\n\nexport type MsTextAutospaceProperty = Globals | \"ideograph-alpha\" | \"ideograph-numeric\" | \"ideograph-parenthesis\" | \"ideograph-space\" | \"none\";\n\nexport type MsTouchSelectProperty = Globals | \"grippers\" | \"none\";\n\nexport type MsUserSelectProperty = Globals | \"element\" | \"none\" | \"text\";\n\nexport type MsWrapFlowProperty = Globals | \"auto\" | \"both\" | \"clear\" | \"end\" | \"maximum\" | \"start\";\n\nexport type MsWrapMarginProperty<TLength> = Globals | TLength;\n\nexport type MsWrapThroughProperty = Globals | \"none\" | \"wrap\";\n\nexport type WebkitAppearanceProperty =\n  | Globals\n  | \"button\"\n  | \"button-bevel\"\n  | \"caret\"\n  | \"checkbox\"\n  | \"default-button\"\n  | \"inner-spin-button\"\n  | \"listbox\"\n  | \"listitem\"\n  | \"media-controls-background\"\n  | \"media-controls-fullscreen-background\"\n  | \"media-current-time-display\"\n  | \"media-enter-fullscreen-button\"\n  | \"media-exit-fullscreen-button\"\n  | \"media-fullscreen-button\"\n  | \"media-mute-button\"\n  | \"media-overlay-play-button\"\n  | \"media-play-button\"\n  | \"media-seek-back-button\"\n  | \"media-seek-forward-button\"\n  | \"media-slider\"\n  | \"media-sliderthumb\"\n  | \"media-time-remaining-display\"\n  | \"media-toggle-closed-captions-button\"\n  | \"media-volume-slider\"\n  | \"media-volume-slider-container\"\n  | \"media-volume-sliderthumb\"\n  | \"menulist\"\n  | \"menulist-button\"\n  | \"menulist-text\"\n  | \"menulist-textfield\"\n  | \"meter\"\n  | \"none\"\n  | \"progress-bar\"\n  | \"progress-bar-value\"\n  | \"push-button\"\n  | \"radio\"\n  | \"searchfield\"\n  | \"searchfield-cancel-button\"\n  | \"searchfield-decoration\"\n  | \"searchfield-results-button\"\n  | \"searchfield-results-decoration\"\n  | \"slider-horizontal\"\n  | \"slider-vertical\"\n  | \"sliderthumb-horizontal\"\n  | \"sliderthumb-vertical\"\n  | \"square-button\"\n  | \"textarea\"\n  | \"textfield\";\n\nexport type WebkitBorderBeforeProperty<TLength> = Globals | LineWidth<TLength> | LineStyle | Color | string;\n\nexport type WebkitBorderBeforeColorProperty = Globals | Color;\n\nexport type WebkitBorderBeforeStyleProperty = Globals | LineStyle | string;\n\nexport type WebkitBorderBeforeWidthProperty<TLength> = Globals | LineWidth<TLength> | string;\n\nexport type WebkitBoxReflectProperty<TLength> = Globals | TLength | \"above\" | \"below\" | \"left\" | \"right\" | string;\n\nexport type WebkitLineClampProperty = Globals | \"none\" | number;\n\nexport type WebkitMaskProperty<TLength> = Globals | Position<TLength> | RepeatStyle | Box | \"border\" | \"content\" | \"none\" | \"padding\" | \"text\" | string;\n\nexport type WebkitMaskAttachmentProperty = Globals | Attachment | string;\n\nexport type WebkitMaskClipProperty = Globals | Box | \"border\" | \"content\" | \"padding\" | \"text\" | string;\n\nexport type WebkitMaskCompositeProperty = Globals | CompositeStyle | string;\n\nexport type WebkitMaskImageProperty = Globals | \"none\" | string;\n\nexport type WebkitMaskOriginProperty = Globals | Box | \"border\" | \"content\" | \"padding\" | string;\n\nexport type WebkitMaskPositionProperty<TLength> = Globals | Position<TLength> | string;\n\nexport type WebkitMaskPositionXProperty<TLength> = Globals | TLength | \"center\" | \"left\" | \"right\" | string;\n\nexport type WebkitMaskPositionYProperty<TLength> = Globals | TLength | \"bottom\" | \"center\" | \"top\" | string;\n\nexport type WebkitMaskRepeatProperty = Globals | RepeatStyle | string;\n\nexport type WebkitMaskRepeatXProperty = Globals | \"no-repeat\" | \"repeat\" | \"round\" | \"space\";\n\nexport type WebkitMaskRepeatYProperty = Globals | \"no-repeat\" | \"repeat\" | \"round\" | \"space\";\n\nexport type WebkitMaskSizeProperty<TLength> = Globals | BgSize<TLength> | string;\n\nexport type WebkitOverflowScrollingProperty = Globals | \"auto\" | \"touch\";\n\nexport type WebkitTapHighlightColorProperty = Globals | Color;\n\nexport type WebkitTextFillColorProperty = Globals | Color;\n\nexport type WebkitTextStrokeProperty<TLength> = Globals | Color | TLength | string;\n\nexport type WebkitTextStrokeColorProperty = Globals | Color;\n\nexport type WebkitTextStrokeWidthProperty<TLength> = Globals | TLength;\n\nexport type WebkitTouchCalloutProperty = Globals | \"default\" | \"none\";\n\nexport type WebkitUserModifyProperty = Globals | \"read-only\" | \"read-write\" | \"read-write-plaintext-only\";\n\nexport type AlignmentBaselineProperty =\n  | Globals\n  | \"after-edge\"\n  | \"alphabetic\"\n  | \"auto\"\n  | \"baseline\"\n  | \"before-edge\"\n  | \"central\"\n  | \"hanging\"\n  | \"ideographic\"\n  | \"mathematical\"\n  | \"middle\"\n  | \"text-after-edge\"\n  | \"text-before-edge\";\n\nexport type BaselineShiftProperty<TLength> = Globals | TLength | \"baseline\" | \"sub\" | \"super\" | string;\n\nexport type ClipRuleProperty = Globals | \"evenodd\" | \"nonzero\";\n\nexport type ColorInterpolationProperty = Globals | \"auto\" | \"linearRGB\" | \"sRGB\";\n\nexport type ColorRenderingProperty = Globals | \"auto\" | \"optimizeQuality\" | \"optimizeSpeed\";\n\nexport type DominantBaselineProperty =\n  | Globals\n  | \"alphabetic\"\n  | \"auto\"\n  | \"central\"\n  | \"hanging\"\n  | \"ideographic\"\n  | \"mathematical\"\n  | \"middle\"\n  | \"no-change\"\n  | \"reset-size\"\n  | \"text-after-edge\"\n  | \"text-before-edge\"\n  | \"use-script\";\n\nexport type FillProperty = Globals | Paint;\n\nexport type FillRuleProperty = Globals | \"evenodd\" | \"nonzero\";\n\nexport type FloodColorProperty = Globals | Color | \"currentColor\";\n\nexport type GlyphOrientationVerticalProperty = Globals | \"auto\" | string | number;\n\nexport type LightingColorProperty = Globals | Color | \"currentColor\";\n\nexport type MarkerProperty = Globals | \"none\" | string;\n\nexport type MarkerEndProperty = Globals | \"none\" | string;\n\nexport type MarkerMidProperty = Globals | \"none\" | string;\n\nexport type MarkerStartProperty = Globals | \"none\" | string;\n\nexport type ShapeRenderingProperty = Globals | \"auto\" | \"crispEdges\" | \"geometricPrecision\" | \"optimizeSpeed\";\n\nexport type StopColorProperty = Globals | Color | \"currentColor\";\n\nexport type StrokeProperty = Globals | Paint;\n\nexport type StrokeDasharrayProperty<TLength> = Globals | Dasharray<TLength> | \"none\";\n\nexport type StrokeDashoffsetProperty<TLength> = Globals | TLength | string;\n\nexport type StrokeLinecapProperty = Globals | \"butt\" | \"round\" | \"square\";\n\nexport type StrokeLinejoinProperty = Globals | \"bevel\" | \"miter\" | \"round\";\n\nexport type StrokeWidthProperty<TLength> = Globals | TLength | string;\n\nexport type TextAnchorProperty = Globals | \"end\" | \"middle\" | \"start\";\n\nexport type VectorEffectProperty = Globals | \"non-scaling-stroke\" | \"none\";\n\ntype CounterStyleRangeProperty = \"auto\" | \"infinite\" | string | number;\n\ntype CounterStyleSpeakAsProperty = \"auto\" | \"bullets\" | \"numbers\" | \"spell-out\" | \"words\" | string;\n\ntype CounterStyleSystemProperty = \"additive\" | \"alphabetic\" | \"cyclic\" | \"fixed\" | \"numeric\" | \"symbolic\" | string;\n\ntype FontFaceFontFeatureSettingsProperty = \"normal\" | string;\n\ntype FontFaceFontDisplayProperty = \"auto\" | \"block\" | \"fallback\" | \"optional\" | \"swap\";\n\ntype FontFaceFontStretchProperty = FontStretchAbsolute | string;\n\ntype FontFaceFontStyleProperty = \"italic\" | \"normal\" | \"oblique\" | string;\n\ntype FontFaceFontVariantProperty =\n  | EastAsianVariantValues\n  | \"all-petite-caps\"\n  | \"all-small-caps\"\n  | \"common-ligatures\"\n  | \"contextual\"\n  | \"diagonal-fractions\"\n  | \"discretionary-ligatures\"\n  | \"full-width\"\n  | \"historical-forms\"\n  | \"historical-ligatures\"\n  | \"lining-nums\"\n  | \"no-common-ligatures\"\n  | \"no-contextual\"\n  | \"no-discretionary-ligatures\"\n  | \"no-historical-ligatures\"\n  | \"none\"\n  | \"normal\"\n  | \"oldstyle-nums\"\n  | \"ordinal\"\n  | \"petite-caps\"\n  | \"proportional-nums\"\n  | \"proportional-width\"\n  | \"ruby\"\n  | \"slashed-zero\"\n  | \"small-caps\"\n  | \"stacked-fractions\"\n  | \"tabular-nums\"\n  | \"titling-caps\"\n  | \"unicase\"\n  | string;\n\ntype FontFaceFontVariationSettingsProperty = \"normal\" | string;\n\ntype FontFaceFontWeightProperty = FontWeightAbsolute | string;\n\ntype ViewportHeightProperty<TLength> = ViewportLength<TLength> | string;\n\ntype ViewportMaxHeightProperty<TLength> = ViewportLength<TLength>;\n\ntype ViewportMaxWidthProperty<TLength> = ViewportLength<TLength>;\n\ntype ViewportMaxZoomProperty = \"auto\" | string | number;\n\ntype ViewportMinHeightProperty<TLength> = ViewportLength<TLength>;\n\ntype ViewportMinWidthProperty<TLength> = ViewportLength<TLength>;\n\ntype ViewportMinZoomProperty = \"auto\" | string | number;\n\ntype ViewportOrientationProperty = \"auto\" | \"landscape\" | \"portrait\";\n\ntype ViewportUserZoomProperty = \"-ms-zoom\" | \"fixed\" | \"zoom\";\n\ntype ViewportWidthProperty<TLength> = ViewportLength<TLength> | string;\n\ntype ViewportZoomProperty = \"auto\" | string | number;\n\ntype AbsoluteSize = \"large\" | \"medium\" | \"small\" | \"x-large\" | \"x-small\" | \"xx-large\" | \"xx-small\" | \"xxx-large\";\n\ntype AnimateableFeature = \"contents\" | \"scroll-position\" | string;\n\ntype Attachment = \"fixed\" | \"local\" | \"scroll\";\n\ntype BgPosition<TLength> = TLength | \"bottom\" | \"center\" | \"left\" | \"right\" | \"top\" | string;\n\ntype BgSize<TLength> = TLength | \"auto\" | \"contain\" | \"cover\" | string;\n\ntype BlendMode =\n  | \"color\"\n  | \"color-burn\"\n  | \"color-dodge\"\n  | \"darken\"\n  | \"difference\"\n  | \"exclusion\"\n  | \"hard-light\"\n  | \"hue\"\n  | \"lighten\"\n  | \"luminosity\"\n  | \"multiply\"\n  | \"normal\"\n  | \"overlay\"\n  | \"saturation\"\n  | \"screen\"\n  | \"soft-light\";\n\ntype Box = \"border-box\" | \"content-box\" | \"padding-box\";\n\ntype Color = NamedColor | DeprecatedSystemColor | \"currentcolor\" | string;\n\ntype Compat =\n  | \"button-bevel\"\n  | \"checkbox\"\n  | \"listbox\"\n  | \"menulist\"\n  | \"menulist-button\"\n  | \"meter\"\n  | \"progress-bar\"\n  | \"push-button\"\n  | \"radio\"\n  | \"searchfield\"\n  | \"slider-horizontal\"\n  | \"square-button\"\n  | \"textarea\";\n\ntype CompositeStyle =\n  | \"clear\"\n  | \"copy\"\n  | \"destination-atop\"\n  | \"destination-in\"\n  | \"destination-out\"\n  | \"destination-over\"\n  | \"source-atop\"\n  | \"source-in\"\n  | \"source-out\"\n  | \"source-over\"\n  | \"xor\";\n\ntype CompositingOperator = \"add\" | \"exclude\" | \"intersect\" | \"subtract\";\n\ntype ContentDistribution = \"space-around\" | \"space-between\" | \"space-evenly\" | \"stretch\";\n\ntype ContentList = Quote | \"contents\" | string;\n\ntype ContentPosition = \"center\" | \"end\" | \"flex-end\" | \"flex-start\" | \"start\";\n\ntype CubicBezierTimingFunction = \"ease\" | \"ease-in\" | \"ease-in-out\" | \"ease-out\" | string;\n\ntype Dasharray<TLength> = TLength | string | number;\n\ntype DeprecatedSystemColor =\n  | \"ActiveBorder\"\n  | \"ActiveCaption\"\n  | \"AppWorkspace\"\n  | \"Background\"\n  | \"ButtonFace\"\n  | \"ButtonHighlight\"\n  | \"ButtonShadow\"\n  | \"ButtonText\"\n  | \"CaptionText\"\n  | \"GrayText\"\n  | \"Highlight\"\n  | \"HighlightText\"\n  | \"InactiveBorder\"\n  | \"InactiveCaption\"\n  | \"InactiveCaptionText\"\n  | \"InfoBackground\"\n  | \"InfoText\"\n  | \"Menu\"\n  | \"MenuText\"\n  | \"Scrollbar\"\n  | \"ThreeDDarkShadow\"\n  | \"ThreeDFace\"\n  | \"ThreeDHighlight\"\n  | \"ThreeDLightShadow\"\n  | \"ThreeDShadow\"\n  | \"Window\"\n  | \"WindowFrame\"\n  | \"WindowText\";\n\ntype DisplayInside = \"-ms-flexbox\" | \"-ms-grid\" | \"-webkit-flex\" | \"flex\" | \"flow\" | \"flow-root\" | \"grid\" | \"ruby\" | \"table\";\n\ntype DisplayInternal =\n  | \"ruby-base\"\n  | \"ruby-base-container\"\n  | \"ruby-text\"\n  | \"ruby-text-container\"\n  | \"table-caption\"\n  | \"table-cell\"\n  | \"table-column\"\n  | \"table-column-group\"\n  | \"table-footer-group\"\n  | \"table-header-group\"\n  | \"table-row\"\n  | \"table-row-group\";\n\ntype DisplayLegacy = \"-ms-inline-flexbox\" | \"-ms-inline-grid\" | \"-webkit-inline-flex\" | \"inline-block\" | \"inline-flex\" | \"inline-grid\" | \"inline-list-item\" | \"inline-table\";\n\ntype DisplayOutside = \"block\" | \"inline\" | \"run-in\";\n\ntype EastAsianVariantValues = \"jis04\" | \"jis78\" | \"jis83\" | \"jis90\" | \"simplified\" | \"traditional\";\n\ntype FinalBgLayer<TLength> = Color | BgPosition<TLength> | RepeatStyle | Attachment | Box | \"none\" | string;\n\ntype FontStretchAbsolute =\n  | \"condensed\"\n  | \"expanded\"\n  | \"extra-condensed\"\n  | \"extra-expanded\"\n  | \"normal\"\n  | \"semi-condensed\"\n  | \"semi-expanded\"\n  | \"ultra-condensed\"\n  | \"ultra-expanded\"\n  | string;\n\ntype FontWeightAbsolute = \"bold\" | \"normal\" | number;\n\ntype GenericFamily = \"cursive\" | \"fantasy\" | \"monospace\" | \"sans-serif\" | \"serif\";\n\ntype GeometryBox = Box | \"fill-box\" | \"margin-box\" | \"stroke-box\" | \"view-box\";\n\ntype GridLine = \"auto\" | string | number;\n\ntype LineStyle = \"dashed\" | \"dotted\" | \"double\" | \"groove\" | \"hidden\" | \"inset\" | \"none\" | \"outset\" | \"ridge\" | \"solid\";\n\ntype LineWidth<TLength> = TLength | \"medium\" | \"thick\" | \"thin\";\n\ntype MaskLayer<TLength> = Position<TLength> | RepeatStyle | GeometryBox | CompositingOperator | MaskingMode | \"no-clip\" | \"none\" | string;\n\ntype MaskingMode = \"alpha\" | \"luminance\" | \"match-source\";\n\ntype NamedColor =\n  | \"aliceblue\"\n  | \"antiquewhite\"\n  | \"aqua\"\n  | \"aquamarine\"\n  | \"azure\"\n  | \"beige\"\n  | \"bisque\"\n  | \"black\"\n  | \"blanchedalmond\"\n  | \"blue\"\n  | \"blueviolet\"\n  | \"brown\"\n  | \"burlywood\"\n  | \"cadetblue\"\n  | \"chartreuse\"\n  | \"chocolate\"\n  | \"coral\"\n  | \"cornflowerblue\"\n  | \"cornsilk\"\n  | \"crimson\"\n  | \"cyan\"\n  | \"darkblue\"\n  | \"darkcyan\"\n  | \"darkgoldenrod\"\n  | \"darkgray\"\n  | \"darkgreen\"\n  | \"darkgrey\"\n  | \"darkkhaki\"\n  | \"darkmagenta\"\n  | \"darkolivegreen\"\n  | \"darkorange\"\n  | \"darkorchid\"\n  | \"darkred\"\n  | \"darksalmon\"\n  | \"darkseagreen\"\n  | \"darkslateblue\"\n  | \"darkslategray\"\n  | \"darkslategrey\"\n  | \"darkturquoise\"\n  | \"darkviolet\"\n  | \"deeppink\"\n  | \"deepskyblue\"\n  | \"dimgray\"\n  | \"dimgrey\"\n  | \"dodgerblue\"\n  | \"firebrick\"\n  | \"floralwhite\"\n  | \"forestgreen\"\n  | \"fuchsia\"\n  | \"gainsboro\"\n  | \"ghostwhite\"\n  | \"gold\"\n  | \"goldenrod\"\n  | \"gray\"\n  | \"green\"\n  | \"greenyellow\"\n  | \"grey\"\n  | \"honeydew\"\n  | \"hotpink\"\n  | \"indianred\"\n  | \"indigo\"\n  | \"ivory\"\n  | \"khaki\"\n  | \"lavender\"\n  | \"lavenderblush\"\n  | \"lawngreen\"\n  | \"lemonchiffon\"\n  | \"lightblue\"\n  | \"lightcoral\"\n  | \"lightcyan\"\n  | \"lightgoldenrodyellow\"\n  | \"lightgray\"\n  | \"lightgreen\"\n  | \"lightgrey\"\n  | \"lightpink\"\n  | \"lightsalmon\"\n  | \"lightseagreen\"\n  | \"lightskyblue\"\n  | \"lightslategray\"\n  | \"lightslategrey\"\n  | \"lightsteelblue\"\n  | \"lightyellow\"\n  | \"lime\"\n  | \"limegreen\"\n  | \"linen\"\n  | \"magenta\"\n  | \"maroon\"\n  | \"mediumaquamarine\"\n  | \"mediumblue\"\n  | \"mediumorchid\"\n  | \"mediumpurple\"\n  | \"mediumseagreen\"\n  | \"mediumslateblue\"\n  | \"mediumspringgreen\"\n  | \"mediumturquoise\"\n  | \"mediumvioletred\"\n  | \"midnightblue\"\n  | \"mintcream\"\n  | \"mistyrose\"\n  | \"moccasin\"\n  | \"navajowhite\"\n  | \"navy\"\n  | \"oldlace\"\n  | \"olive\"\n  | \"olivedrab\"\n  | \"orange\"\n  | \"orangered\"\n  | \"orchid\"\n  | \"palegoldenrod\"\n  | \"palegreen\"\n  | \"paleturquoise\"\n  | \"palevioletred\"\n  | \"papayawhip\"\n  | \"peachpuff\"\n  | \"peru\"\n  | \"pink\"\n  | \"plum\"\n  | \"powderblue\"\n  | \"purple\"\n  | \"rebeccapurple\"\n  | \"red\"\n  | \"rosybrown\"\n  | \"royalblue\"\n  | \"saddlebrown\"\n  | \"salmon\"\n  | \"sandybrown\"\n  | \"seagreen\"\n  | \"seashell\"\n  | \"sienna\"\n  | \"silver\"\n  | \"skyblue\"\n  | \"slateblue\"\n  | \"slategray\"\n  | \"slategrey\"\n  | \"snow\"\n  | \"springgreen\"\n  | \"steelblue\"\n  | \"tan\"\n  | \"teal\"\n  | \"thistle\"\n  | \"tomato\"\n  | \"transparent\"\n  | \"turquoise\"\n  | \"violet\"\n  | \"wheat\"\n  | \"white\"\n  | \"whitesmoke\"\n  | \"yellow\"\n  | \"yellowgreen\";\n\ntype Paint = Color | \"child\" | \"context-fill\" | \"context-stroke\" | \"none\" | string;\n\ntype Position<TLength> = TLength | \"bottom\" | \"center\" | \"left\" | \"right\" | \"top\" | string;\n\ntype Quote = \"close-quote\" | \"no-close-quote\" | \"no-open-quote\" | \"open-quote\";\n\ntype RepeatStyle = \"no-repeat\" | \"repeat\" | \"repeat-x\" | \"repeat-y\" | \"round\" | \"space\" | string;\n\ntype SelfPosition = \"center\" | \"end\" | \"flex-end\" | \"flex-start\" | \"self-end\" | \"self-start\" | \"start\";\n\ntype SingleAnimation = TimingFunction | SingleAnimationDirection | SingleAnimationFillMode | \"infinite\" | \"none\" | \"paused\" | \"running\" | string | number;\n\ntype SingleAnimationDirection = \"alternate\" | \"alternate-reverse\" | \"normal\" | \"reverse\";\n\ntype SingleAnimationFillMode = \"backwards\" | \"both\" | \"forwards\" | \"none\";\n\ntype SingleTransition = TimingFunction | \"all\" | \"none\" | string;\n\ntype StepTimingFunction = \"step-end\" | \"step-start\" | string;\n\ntype TimingFunction = CubicBezierTimingFunction | StepTimingFunction | \"linear\";\n\ntype TrackBreadth<TLength> = TLength | \"auto\" | \"max-content\" | \"min-content\" | string;\n\ntype ViewportLength<TLength> = TLength | \"auto\" | string;\n/LICENSE\u0004&Copyright (c) 2017-2018 Fredrik Nicol\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/YW55bWF0Y2hAMy4xLjM=",
    "content": "/package.json\u0003{\n  \"name\": \"anymatch\",\n  \"version\": \"3.1.3\",\n  \"description\": \"Matches strings against configurable strings, globs, regular expressions, and/or functions\",\n  \"files\": [\n    \"index.js\",\n    \"index.d.ts\"\n  ],\n  \"dependencies\": {\n    \"normalize-path\": \"^3.0.0\",\n    \"picomatch\": \"^2.0.4\"\n  },\n  \"author\": {\n    \"name\": \"Elan Shanker\",\n    \"url\": \"https://github.com/es128\"\n  },\n  \"license\": \"ISC\",\n  \"homepage\": \"https://github.com/micromatch/anymatch\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/micromatch/anymatch\"\n  },\n  \"keywords\": [\n    \"match\",\n    \"any\",\n    \"string\",\n    \"file\",\n    \"fs\",\n    \"list\",\n    \"glob\",\n    \"regex\",\n    \"regexp\",\n    \"regular\",\n    \"expression\",\n    \"function\"\n  ],\n  \"scripts\": {\n    \"test\": \"nyc mocha\",\n    \"mocha\": \"mocha\"\n  },\n  \"devDependencies\": {\n    \"mocha\": \"^6.1.3\",\n    \"nyc\": \"^14.0.0\"\n  },\n  \"engines\": {\n    \"node\": \">= 8\"\n  }\n}\n/LICENSE\u0003\u0010The ISC License\n\nCopyright (c) 2019 Elan Shanker, Paul Miller (https://paulmillr.com)\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted, provided that the above\ncopyright notice and this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\nWITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\nANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\nACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR\nIN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n/README.md\u000fanymatch [![Build Status](https://travis-ci.org/micromatch/anymatch.svg?branch=master)](https://travis-ci.org/micromatch/anymatch) [![Coverage Status](https://img.shields.io/coveralls/micromatch/anymatch.svg?branch=master)](https://coveralls.io/r/micromatch/anymatch?branch=master)\n======\nJavascript module to match a string against a regular expression, glob, string,\nor function that takes the string as an argument and returns a truthy or falsy\nvalue. The matcher can also be an array of any or all of these. Useful for\nallowing a very flexible user-defined config to define things like file paths.\n\n__Note: This module has Bash-parity, please be aware that Windows-style backslashes are not supported as separators. See https://github.com/micromatch/micromatch#backslashes for more information.__\n\n\nUsage\n-----\n```sh\nnpm install anymatch\n```\n\n#### anymatch(matchers, testString, [returnIndex], [options])\n* __matchers__: (_Array|String|RegExp|Function_)\nString to be directly matched, string with glob patterns, regular expression\ntest, function that takes the testString as an argument and returns a truthy\nvalue if it should be matched, or an array of any number and mix of these types.\n* __testString__: (_String|Array_) The string to test against the matchers. If\npassed as an array, the first element of the array will be used as the\n`testString` for non-function matchers, while the entire array will be applied\nas the arguments for function matchers.\n* __options__: (_Object_ [optional]_) Any of the [picomatch](https://github.com/micromatch/picomatch#options) options.\n    * __returnIndex__: (_Boolean [optional]_) If true, return the array index of\nthe first matcher that that testString matched, or -1 if no match, instead of a\nboolean result.\n\n```js\nconst anymatch = require('anymatch');\n\nconst matchers = [ 'path/to/file.js', 'path/anyjs/**/*.js', /foo.js$/, string => string.includes('bar') && string.length > 10 ] ;\n\nanymatch(matchers, 'path/to/file.js'); // true\nanymatch(matchers, 'path/anyjs/baz.js'); // true\nanymatch(matchers, 'path/to/foo.js'); // true\nanymatch(matchers, 'path/to/bar.js'); // true\nanymatch(matchers, 'bar.js'); // false\n\n// returnIndex = true\nanymatch(matchers, 'foo.js', {returnIndex: true}); // 2\nanymatch(matchers, 'path/anyjs/foo.js', {returnIndex: true}); // 1\n\n// any picomatc\n\n// using globs to match directories and their children\nanymatch('node_modules', 'node_modules'); // true\nanymatch('node_modules', 'node_modules/somelib/index.js'); // false\nanymatch('node_modules/**', 'node_modules/somelib/index.js'); // true\nanymatch('node_modules/**', '/absolute/path/to/node_modules/somelib/index.js'); // false\nanymatch('**/node_modules/**', '/absolute/path/to/node_modules/somelib/index.js'); // true\n\nconst matcher = anymatch(matchers);\n['foo.js', 'bar.js'].filter(matcher);  // [ 'foo.js' ]\nanymatch master* ❯\n\n```\n\n#### anymatch(matchers)\nYou can also pass in only your matcher(s) to get a curried function that has\nalready been bound to the provided matching criteria. This can be used as an\n`Array#filter` callback.\n\n```js\nvar matcher = anymatch(matchers);\n\nmatcher('path/to/file.js'); // true\nmatcher('path/anyjs/baz.js', true); // 1\n\n['foo.js', 'bar.js'].filter(matcher); // ['foo.js']\n```\n\nChangelog\n----------\n[See release notes page on GitHub](https://github.com/micromatch/anymatch/releases)\n\n- **v3.0:** Removed `startIndex` and `endIndex` arguments. Node 8.x-only.\n- **v2.0:** [micromatch](https://github.com/jonschlinkert/micromatch) moves away from minimatch-parity and inline with Bash. This includes handling backslashes differently (see https://github.com/micromatch/micromatch#backslashes for more information).\n- **v1.2:** anymatch uses [micromatch](https://github.com/jonschlinkert/micromatch)\nfor glob pattern matching. Issues with glob pattern matching should be\nreported directly to the [micromatch issue tracker](https://github.com/jonschlinkert/micromatch/issues).\n\nLicense\n-------\n[ISC](https://raw.github.com/micromatch/anymatch/master/LICENSE)\n/index.d.ts\u0002type AnymatchFn = (testString: string) => boolean;\ntype AnymatchPattern = string|RegExp|AnymatchFn;\ntype AnymatchMatcher = AnymatchPattern|AnymatchPattern[]\ntype AnymatchTester = {\n  (testString: string|any[], returnIndex: true): number;\n  (testString: string|any[]): boolean;\n}\n\ntype PicomatchOptions = {dot: boolean};\n\ndeclare const anymatch: {\n  (matchers: AnymatchMatcher): AnymatchTester;\n  (matchers: AnymatchMatcher, testString: null, returnIndex: true | PicomatchOptions): AnymatchTester;\n  (matchers: AnymatchMatcher, testString: string|any[], returnIndex: true | PicomatchOptions): number;\n  (matchers: AnymatchMatcher, testString: string|any[]): boolean;\n}\n\nexport {AnymatchMatcher as Matcher}\nexport {AnymatchTester as Tester}\nexport default anymatch\n/index.js\fl'use strict';\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\n\nconst picomatch = require('picomatch');\nconst normalizePath = require('normalize-path');\n\n/**\n * @typedef {(testString: string) => boolean} AnymatchFn\n * @typedef {string|RegExp|AnymatchFn} AnymatchPattern\n * @typedef {AnymatchPattern|AnymatchPattern[]} AnymatchMatcher\n */\nconst BANG = '!';\nconst DEFAULT_OPTIONS = {returnIndex: false};\nconst arrify = (item) => Array.isArray(item) ? item : [item];\n\n/**\n * @param {AnymatchPattern} matcher\n * @param {object} options\n * @returns {AnymatchFn}\n */\nconst createPattern = (matcher, options) => {\n  if (typeof matcher === 'function') {\n    return matcher;\n  }\n  if (typeof matcher === 'string') {\n    const glob = picomatch(matcher, options);\n    return (string) => matcher === string || glob(string);\n  }\n  if (matcher instanceof RegExp) {\n    return (string) => matcher.test(string);\n  }\n  return (string) => false;\n};\n\n/**\n * @param {Array<Function>} patterns\n * @param {Array<Function>} negPatterns\n * @param {String|Array} args\n * @param {Boolean} returnIndex\n * @returns {boolean|number}\n */\nconst matchPatterns = (patterns, negPatterns, args, returnIndex) => {\n  const isList = Array.isArray(args);\n  const _path = isList ? args[0] : args;\n  if (!isList && typeof _path !== 'string') {\n    throw new TypeError('anymatch: second argument must be a string: got ' +\n      Object.prototype.toString.call(_path))\n  }\n  const path = normalizePath(_path, false);\n\n  for (let index = 0; index < negPatterns.length; index++) {\n    const nglob = negPatterns[index];\n    if (nglob(path)) {\n      return returnIndex ? -1 : false;\n    }\n  }\n\n  const applied = isList && [path].concat(args.slice(1));\n  for (let index = 0; index < patterns.length; index++) {\n    const pattern = patterns[index];\n    if (isList ? pattern(...applied) : pattern(path)) {\n      return returnIndex ? index : true;\n    }\n  }\n\n  return returnIndex ? -1 : false;\n};\n\n/**\n * @param {AnymatchMatcher} matchers\n * @param {Array|string} testString\n * @param {object} options\n * @returns {boolean|number|Function}\n */\nconst anymatch = (matchers, testString, options = DEFAULT_OPTIONS) => {\n  if (matchers == null) {\n    throw new TypeError('anymatch: specify first argument');\n  }\n  const opts = typeof options === 'boolean' ? {returnIndex: options} : options;\n  const returnIndex = opts.returnIndex || false;\n\n  // Early cache for matchers.\n  const mtchers = arrify(matchers);\n  const negatedGlobs = mtchers\n    .filter(item => typeof item === 'string' && item.charAt(0) === BANG)\n    .map(item => item.slice(1))\n    .map(item => picomatch(item, opts));\n  const patterns = mtchers\n    .filter(item => typeof item !== 'string' || (typeof item === 'string' && item.charAt(0) !== BANG))\n    .map(matcher => createPattern(matcher, opts));\n\n  if (testString == null) {\n    return (testString, ri = false) => {\n      const returnIndex = typeof ri === 'boolean' ? ri : false;\n      return matchPatterns(patterns, negatedGlobs, testString, returnIndex);\n    }\n  }\n\n  return matchPatterns(patterns, negatedGlobs, testString, returnIndex);\n};\n\nanymatch.default = anymatch;\nmodule.exports = anymatch;\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/YW5zaS1yZWdleEA1LjAuMQ==",
    "content": "/readme.md\n\u0005# ansi-regex\n\n> Regular expression for matching [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code)\n\n\n## Install\n\n```\n$ npm install ansi-regex\n```\n\n\n## Usage\n\n```js\nconst ansiRegex = require('ansi-regex');\n\nansiRegex().test('\\u001B[4mcake\\u001B[0m');\n//=> true\n\nansiRegex().test('cake');\n//=> false\n\n'\\u001B[4mcake\\u001B[0m'.match(ansiRegex());\n//=> ['\\u001B[4m', '\\u001B[0m']\n\n'\\u001B[4mcake\\u001B[0m'.match(ansiRegex({onlyFirst: true}));\n//=> ['\\u001B[4m']\n\n'\\u001B]8;;https://github.com\\u0007click\\u001B]8;;\\u0007'.match(ansiRegex());\n//=> ['\\u001B]8;;https://github.com\\u0007', '\\u001B]8;;\\u0007']\n```\n\n\n## API\n\n### ansiRegex(options?)\n\nReturns a regex for matching ANSI escape codes.\n\n#### options\n\nType: `object`\n\n##### onlyFirst\n\nType: `boolean`<br>\nDefault: `false` *(Matches any ANSI escape codes in a string)*\n\nMatch only the first ANSI escape.\n\n\n## FAQ\n\n### Why do you test for codes not in the ECMA 48 standard?\n\nSome of the codes we run as a test are codes that we acquired finding various lists of non-standard or manufacturer specific codes. We test for both standard and non-standard codes, as most of them follow the same or similar format and can be safely matched in strings without the risk of removing actual string content. There are a few non-standard control codes that do not follow the traditional format (i.e. they end in numbers) thus forcing us to exclude them from the test because we cannot reliably match them.\n\nOn the historical side, those ECMA standards were established in the early 90's whereas the VT100, for example, was designed in the mid/late 70's. At that point in time, control codes were still pretty ungoverned and engineers used them for a multitude of things, namely to activate hardware ports that may have been proprietary. Somewhere else you see a similar 'anarchy' of codes is in the x86 architecture for processors; there are a ton of \"interrupts\" that can mean different things on certain brands of processors, most of which have been phased out.\n\n\n## Maintainers\n\n- [Sindre Sorhus](https://github.com/sindresorhus)\n- [Josh Junon](https://github.com/qix-)\n\n\n---\n\n<div align=\"center\">\n\t<b>\n\t\t<a href=\"https://tidelift.com/subscription/pkg/npm-ansi-regex?utm_source=npm-ansi-regex&utm_medium=referral&utm_campaign=readme\">Get professional support for this package with a Tidelift subscription</a>\n\t</b>\n\t<br>\n\t<sub>\n\t\tTidelift helps make open source sustainable for maintainers while giving companies<br>assurances about security, maintenance, and licensing for their dependencies.\n\t</sub>\n</div>\n/index.d.ts\u0002declare namespace ansiRegex {\n\tinterface Options {\n\t\t/**\n\t\tMatch only the first ANSI escape.\n\n\t\t@default false\n\t\t*/\n\t\tonlyFirst: boolean;\n\t}\n}\n\n/**\nRegular expression for matching ANSI escape codes.\n\n@example\n```\nimport ansiRegex = require('ansi-regex');\n\nansiRegex().test('\\u001B[4mcake\\u001B[0m');\n//=> true\n\nansiRegex().test('cake');\n//=> false\n\n'\\u001B[4mcake\\u001B[0m'.match(ansiRegex());\n//=> ['\\u001B[4m', '\\u001B[0m']\n\n'\\u001B[4mcake\\u001B[0m'.match(ansiRegex({onlyFirst: true}));\n//=> ['\\u001B[4m']\n\n'\\u001B]8;;https://github.com\\u0007click\\u001B]8;;\\u0007'.match(ansiRegex());\n//=> ['\\u001B]8;;https://github.com\\u0007', '\\u001B]8;;\\u0007']\n```\n*/\ndeclare function ansiRegex(options?: ansiRegex.Options): RegExp;\n\nexport = ansiRegex;\n/license\u0004UMIT License\n\nCopyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)\n\nPermission 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:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE 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.\n/index.js\u0001^'use strict';\n\nmodule.exports = ({onlyFirst = false} = {}) => {\n\tconst pattern = [\n\t\t'[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?\\\\u0007)',\n\t\t'(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-ntqry=><~]))'\n\t].join('|');\n\n\treturn new RegExp(pattern, onlyFirst ? undefined : 'g');\n};\n/package.json\u0003I{\n\t\"name\": \"ansi-regex\",\n\t\"version\": \"5.0.1\",\n\t\"description\": \"Regular expression for matching ANSI escape codes\",\n\t\"license\": \"MIT\",\n\t\"repository\": \"chalk/ansi-regex\",\n\t\"author\": {\n\t\t\"name\": \"Sindre Sorhus\",\n\t\t\"email\": \"sindresorhus@gmail.com\",\n\t\t\"url\": \"sindresorhus.com\"\n\t},\n\t\"engines\": {\n\t\t\"node\": \">=8\"\n\t},\n\t\"scripts\": {\n\t\t\"test\": \"xo && ava && tsd\",\n\t\t\"view-supported\": \"node fixtures/view-codes.js\"\n\t},\n\t\"files\": [\n\t\t\"index.js\",\n\t\t\"index.d.ts\"\n\t],\n\t\"keywords\": [\n\t\t\"ansi\",\n\t\t\"styles\",\n\t\t\"color\",\n\t\t\"colour\",\n\t\t\"colors\",\n\t\t\"terminal\",\n\t\t\"console\",\n\t\t\"cli\",\n\t\t\"string\",\n\t\t\"tty\",\n\t\t\"escape\",\n\t\t\"formatting\",\n\t\t\"rgb\",\n\t\t\"256\",\n\t\t\"shell\",\n\t\t\"xterm\",\n\t\t\"command-line\",\n\t\t\"text\",\n\t\t\"regex\",\n\t\t\"regexp\",\n\t\t\"re\",\n\t\t\"match\",\n\t\t\"test\",\n\t\t\"find\",\n\t\t\"pattern\"\n\t],\n\t\"devDependencies\": {\n\t\t\"ava\": \"^2.4.0\",\n\t\t\"tsd\": \"^0.9.0\",\n\t\t\"xo\": \"^0.25.3\"\n\t}\n}\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/YW5zaS1yZWdleEA2LjAuMQ==",
    "content": "/package.json\u0003{\n\t\"name\": \"ansi-regex\",\n\t\"version\": \"6.0.1\",\n\t\"description\": \"Regular expression for matching ANSI escape codes\",\n\t\"license\": \"MIT\",\n\t\"repository\": \"chalk/ansi-regex\",\n\t\"funding\": \"https://github.com/chalk/ansi-regex?sponsor=1\",\n\t\"author\": {\n\t\t\"name\": \"Sindre Sorhus\",\n\t\t\"email\": \"sindresorhus@gmail.com\",\n\t\t\"url\": \"https://sindresorhus.com\"\n\t},\n\t\"type\": \"module\",\n\t\"exports\": \"./index.js\",\n\t\"engines\": {\n\t\t\"node\": \">=12\"\n\t},\n\t\"scripts\": {\n\t\t\"test\": \"xo && ava && tsd\",\n\t\t\"view-supported\": \"node fixtures/view-codes.js\"\n\t},\n\t\"files\": [\n\t\t\"index.js\",\n\t\t\"index.d.ts\"\n\t],\n\t\"keywords\": [\n\t\t\"ansi\",\n\t\t\"styles\",\n\t\t\"color\",\n\t\t\"colour\",\n\t\t\"colors\",\n\t\t\"terminal\",\n\t\t\"console\",\n\t\t\"cli\",\n\t\t\"string\",\n\t\t\"tty\",\n\t\t\"escape\",\n\t\t\"formatting\",\n\t\t\"rgb\",\n\t\t\"256\",\n\t\t\"shell\",\n\t\t\"xterm\",\n\t\t\"command-line\",\n\t\t\"text\",\n\t\t\"regex\",\n\t\t\"regexp\",\n\t\t\"re\",\n\t\t\"match\",\n\t\t\"test\",\n\t\t\"find\",\n\t\t\"pattern\"\n\t],\n\t\"devDependencies\": {\n\t\t\"ava\": \"^3.15.0\",\n\t\t\"tsd\": \"^0.14.0\",\n\t\t\"xo\": \"^0.38.2\"\n\t}\n}\n/index.d.ts\u0002export interface Options {\n\t/**\n\tMatch only the first ANSI escape.\n\n\t@default false\n\t*/\n\treadonly onlyFirst: boolean;\n}\n\n/**\nRegular expression for matching ANSI escape codes.\n\n@example\n```\nimport ansiRegex from 'ansi-regex';\n\nansiRegex().test('\\u001B[4mcake\\u001B[0m');\n//=> true\n\nansiRegex().test('cake');\n//=> false\n\n'\\u001B[4mcake\\u001B[0m'.match(ansiRegex());\n//=> ['\\u001B[4m', '\\u001B[0m']\n\n'\\u001B[4mcake\\u001B[0m'.match(ansiRegex({onlyFirst: true}));\n//=> ['\\u001B[4m']\n\n'\\u001B]8;;https://github.com\\u0007click\\u001B]8;;\\u0007'.match(ansiRegex());\n//=> ['\\u001B]8;;https://github.com\\u0007', '\\u001B]8;;\\u0007']\n```\n*/\nexport default function ansiRegex(options?: Options): RegExp;\n/index.js\u0001^export default function ansiRegex({onlyFirst = false} = {}) {\n\tconst pattern = [\n\t    '[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?\\\\u0007)',\n\t\t'(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-ntqry=><~]))'\n\t].join('|');\n\n\treturn new RegExp(pattern, onlyFirst ? undefined : 'g');\n}\n/license\u0004]MIT License\n\nCopyright (c) Sindre Sorhus <sindresorhus@gmail.com> (https://sindresorhus.com)\n\nPermission 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:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE 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.\n/readme.md\t# ansi-regex\n\n> Regular expression for matching [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code)\n\n## Install\n\n```\n$ npm install ansi-regex\n```\n\n## Usage\n\n```js\nimport ansiRegex from 'ansi-regex';\n\nansiRegex().test('\\u001B[4mcake\\u001B[0m');\n//=> true\n\nansiRegex().test('cake');\n//=> false\n\n'\\u001B[4mcake\\u001B[0m'.match(ansiRegex());\n//=> ['\\u001B[4m', '\\u001B[0m']\n\n'\\u001B[4mcake\\u001B[0m'.match(ansiRegex({onlyFirst: true}));\n//=> ['\\u001B[4m']\n\n'\\u001B]8;;https://github.com\\u0007click\\u001B]8;;\\u0007'.match(ansiRegex());\n//=> ['\\u001B]8;;https://github.com\\u0007', '\\u001B]8;;\\u0007']\n```\n\n## API\n\n### ansiRegex(options?)\n\nReturns a regex for matching ANSI escape codes.\n\n#### options\n\nType: `object`\n\n##### onlyFirst\n\nType: `boolean`\\\nDefault: `false` *(Matches any ANSI escape codes in a string)*\n\nMatch only the first ANSI escape.\n\n## FAQ\n\n### Why do you test for codes not in the ECMA 48 standard?\n\nSome of the codes we run as a test are codes that we acquired finding various lists of non-standard or manufacturer specific codes. We test for both standard and non-standard codes, as most of them follow the same or similar format and can be safely matched in strings without the risk of removing actual string content. There are a few non-standard control codes that do not follow the traditional format (i.e. they end in numbers) thus forcing us to exclude them from the test because we cannot reliably match them.\n\nOn the historical side, those ECMA standards were established in the early 90's whereas the VT100, for example, was designed in the mid/late 70's. At that point in time, control codes were still pretty ungoverned and engineers used them for a multitude of things, namely to activate hardware ports that may have been proprietary. Somewhere else you see a similar 'anarchy' of codes is in the x86 architecture for processors; there are a ton of \"interrupts\" that can mean different things on certain brands of processors, most of which have been phased out.\n\n## Maintainers\n\n- [Sindre Sorhus](https://github.com/sindresorhus)\n- [Josh Junon](https://github.com/qix-)\n\n---\n\n<div align=\"center\">\n\t<b>\n\t\t<a href=\"https://tidelift.com/subscription/pkg/npm-ansi-regex?utm_source=npm-ansi-regex&utm_medium=referral&utm_campaign=readme\">Get professional support for this package with a Tidelift subscription</a>\n\t</b>\n\t<br>\n\t<sub>\n\t\tTidelift helps make open source sustainable for maintainers while giving companies<br>assurances about security, maintenance, and licensing for their dependencies.\n\t</sub>\n</div>\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/YW5zaS1zdHlsZXNAMy4yLjE=",
    "content": "/package.json\u0003{\n\t\"name\": \"ansi-styles\",\n\t\"version\": \"3.2.1\",\n\t\"description\": \"ANSI escape codes for styling strings in the terminal\",\n\t\"license\": \"MIT\",\n\t\"repository\": \"chalk/ansi-styles\",\n\t\"author\": {\n\t\t\"name\": \"Sindre Sorhus\",\n\t\t\"email\": \"sindresorhus@gmail.com\",\n\t\t\"url\": \"sindresorhus.com\"\n\t},\n\t\"engines\": {\n\t\t\"node\": \">=4\"\n\t},\n\t\"scripts\": {\n\t\t\"test\": \"xo && ava\",\n\t\t\"screenshot\": \"svg-term --command='node screenshot' --out=screenshot.svg --padding=3 --width=55 --height=3 --at=1000 --no-cursor\"\n\t},\n\t\"files\": [\n\t\t\"index.js\"\n\t],\n\t\"keywords\": [\n\t\t\"ansi\",\n\t\t\"styles\",\n\t\t\"color\",\n\t\t\"colour\",\n\t\t\"colors\",\n\t\t\"terminal\",\n\t\t\"console\",\n\t\t\"cli\",\n\t\t\"string\",\n\t\t\"tty\",\n\t\t\"escape\",\n\t\t\"formatting\",\n\t\t\"rgb\",\n\t\t\"256\",\n\t\t\"shell\",\n\t\t\"xterm\",\n\t\t\"log\",\n\t\t\"logging\",\n\t\t\"command-line\",\n\t\t\"text\"\n\t],\n\t\"dependencies\": {\n\t\t\"color-convert\": \"^1.9.0\"\n\t},\n\t\"devDependencies\": {\n\t\t\"ava\": \"*\",\n\t\t\"babel-polyfill\": \"^6.23.0\",\n\t\t\"svg-term-cli\": \"^2.1.1\",\n\t\t\"xo\": \"*\"\n\t},\n\t\"ava\": {\n\t\t\"require\": \"babel-polyfill\"\n\t}\n}\n/readme.md\u000e# ansi-styles [![Build Status](https://travis-ci.org/chalk/ansi-styles.svg?branch=master)](https://travis-ci.org/chalk/ansi-styles)\n\n> [ANSI escape codes](http://en.wikipedia.org/wiki/ANSI_escape_code#Colors_and_Styles) for styling strings in the terminal\n\nYou probably want the higher-level [chalk](https://github.com/chalk/chalk) module for styling your strings.\n\n<img src=\"https://cdn.rawgit.com/chalk/ansi-styles/8261697c95bf34b6c7767e2cbe9941a851d59385/screenshot.svg\" width=\"900\">\n\n\n## Install\n\n```\n$ npm install ansi-styles\n```\n\n\n## Usage\n\n```js\nconst style = require('ansi-styles');\n\nconsole.log(`${style.green.open}Hello world!${style.green.close}`);\n\n\n// Color conversion between 16/256/truecolor\n// NOTE: If conversion goes to 16 colors or 256 colors, the original color\n//       may be degraded to fit that color palette. This means terminals\n//       that do not support 16 million colors will best-match the\n//       original color.\nconsole.log(style.bgColor.ansi.hsl(120, 80, 72) + 'Hello world!' + style.bgColor.close);\nconsole.log(style.color.ansi256.rgb(199, 20, 250) + 'Hello world!' + style.color.close);\nconsole.log(style.color.ansi16m.hex('#ABCDEF') + 'Hello world!' + style.color.close);\n```\n\n## API\n\nEach style has an `open` and `close` property.\n\n\n## Styles\n\n### Modifiers\n\n- `reset`\n- `bold`\n- `dim`\n- `italic` *(Not widely supported)*\n- `underline`\n- `inverse`\n- `hidden`\n- `strikethrough` *(Not widely supported)*\n\n### Colors\n\n- `black`\n- `red`\n- `green`\n- `yellow`\n- `blue`\n- `magenta`\n- `cyan`\n- `white`\n- `gray` (\"bright black\")\n- `redBright`\n- `greenBright`\n- `yellowBright`\n- `blueBright`\n- `magentaBright`\n- `cyanBright`\n- `whiteBright`\n\n### Background colors\n\n- `bgBlack`\n- `bgRed`\n- `bgGreen`\n- `bgYellow`\n- `bgBlue`\n- `bgMagenta`\n- `bgCyan`\n- `bgWhite`\n- `bgBlackBright`\n- `bgRedBright`\n- `bgGreenBright`\n- `bgYellowBright`\n- `bgBlueBright`\n- `bgMagentaBright`\n- `bgCyanBright`\n- `bgWhiteBright`\n\n\n## Advanced usage\n\nBy default, you get a map of styles, but the styles are also available as groups. They are non-enumerable so they don't show up unless you access them explicitly. This makes it easier to expose only a subset in a higher-level module.\n\n- `style.modifier`\n- `style.color`\n- `style.bgColor`\n\n###### Example\n\n```js\nconsole.log(style.color.green.open);\n```\n\nRaw escape codes (i.e. without the CSI escape prefix `\\u001B[` and render mode postfix `m`) are available under `style.codes`, which returns a `Map` with the open codes as keys and close codes as values.\n\n###### Example\n\n```js\nconsole.log(style.codes.get(36));\n//=> 39\n```\n\n\n## [256 / 16 million (TrueColor) support](https://gist.github.com/XVilka/8346728)\n\n`ansi-styles` uses the [`color-convert`](https://github.com/Qix-/color-convert) package to allow for converting between various colors and ANSI escapes, with support for 256 and 16 million colors.\n\nTo use these, call the associated conversion function with the intended output, for example:\n\n```js\nstyle.color.ansi.rgb(100, 200, 15); // RGB to 16 color ansi foreground code\nstyle.bgColor.ansi.rgb(100, 200, 15); // RGB to 16 color ansi background code\n\nstyle.color.ansi256.hsl(120, 100, 60); // HSL to 256 color ansi foreground code\nstyle.bgColor.ansi256.hsl(120, 100, 60); // HSL to 256 color ansi foreground code\n\nstyle.color.ansi16m.hex('#C0FFEE'); // Hex (RGB) to 16 million color foreground code\nstyle.bgColor.ansi16m.hex('#C0FFEE'); // Hex (RGB) to 16 million color background code\n```\n\n\n## Related\n\n- [ansi-escapes](https://github.com/sindresorhus/ansi-escapes) - ANSI escape codes for manipulating the terminal\n\n\n## Maintainers\n\n- [Sindre Sorhus](https://github.com/sindresorhus)\n- [Josh Junon](https://github.com/qix-)\n\n\n## License\n\nMIT\n/license\u0004UMIT License\n\nCopyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)\n\nPermission 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:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE 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.\n/index.js\r'use strict';\nconst colorConvert = require('color-convert');\n\nconst wrapAnsi16 = (fn, offset) => function () {\n\tconst code = fn.apply(colorConvert, arguments);\n\treturn `\\u001B[${code + offset}m`;\n};\n\nconst wrapAnsi256 = (fn, offset) => function () {\n\tconst code = fn.apply(colorConvert, arguments);\n\treturn `\\u001B[${38 + offset};5;${code}m`;\n};\n\nconst wrapAnsi16m = (fn, offset) => function () {\n\tconst rgb = fn.apply(colorConvert, arguments);\n\treturn `\\u001B[${38 + offset};2;${rgb[0]};${rgb[1]};${rgb[2]}m`;\n};\n\nfunction assembleStyles() {\n\tconst codes = new Map();\n\tconst styles = {\n\t\tmodifier: {\n\t\t\treset: [0, 0],\n\t\t\t// 21 isn't widely supported and 22 does the same thing\n\t\t\tbold: [1, 22],\n\t\t\tdim: [2, 22],\n\t\t\titalic: [3, 23],\n\t\t\tunderline: [4, 24],\n\t\t\tinverse: [7, 27],\n\t\t\thidden: [8, 28],\n\t\t\tstrikethrough: [9, 29]\n\t\t},\n\t\tcolor: {\n\t\t\tblack: [30, 39],\n\t\t\tred: [31, 39],\n\t\t\tgreen: [32, 39],\n\t\t\tyellow: [33, 39],\n\t\t\tblue: [34, 39],\n\t\t\tmagenta: [35, 39],\n\t\t\tcyan: [36, 39],\n\t\t\twhite: [37, 39],\n\t\t\tgray: [90, 39],\n\n\t\t\t// Bright color\n\t\t\tredBright: [91, 39],\n\t\t\tgreenBright: [92, 39],\n\t\t\tyellowBright: [93, 39],\n\t\t\tblueBright: [94, 39],\n\t\t\tmagentaBright: [95, 39],\n\t\t\tcyanBright: [96, 39],\n\t\t\twhiteBright: [97, 39]\n\t\t},\n\t\tbgColor: {\n\t\t\tbgBlack: [40, 49],\n\t\t\tbgRed: [41, 49],\n\t\t\tbgGreen: [42, 49],\n\t\t\tbgYellow: [43, 49],\n\t\t\tbgBlue: [44, 49],\n\t\t\tbgMagenta: [45, 49],\n\t\t\tbgCyan: [46, 49],\n\t\t\tbgWhite: [47, 49],\n\n\t\t\t// Bright color\n\t\t\tbgBlackBright: [100, 49],\n\t\t\tbgRedBright: [101, 49],\n\t\t\tbgGreenBright: [102, 49],\n\t\t\tbgYellowBright: [103, 49],\n\t\t\tbgBlueBright: [104, 49],\n\t\t\tbgMagentaBright: [105, 49],\n\t\t\tbgCyanBright: [106, 49],\n\t\t\tbgWhiteBright: [107, 49]\n\t\t}\n\t};\n\n\t// Fix humans\n\tstyles.color.grey = styles.color.gray;\n\n\tfor (const groupName of Object.keys(styles)) {\n\t\tconst group = styles[groupName];\n\n\t\tfor (const styleName of Object.keys(group)) {\n\t\t\tconst style = group[styleName];\n\n\t\t\tstyles[styleName] = {\n\t\t\t\topen: `\\u001B[${style[0]}m`,\n\t\t\t\tclose: `\\u001B[${style[1]}m`\n\t\t\t};\n\n\t\t\tgroup[styleName] = styles[styleName];\n\n\t\t\tcodes.set(style[0], style[1]);\n\t\t}\n\n\t\tObject.defineProperty(styles, groupName, {\n\t\t\tvalue: group,\n\t\t\tenumerable: false\n\t\t});\n\n\t\tObject.defineProperty(styles, 'codes', {\n\t\t\tvalue: codes,\n\t\t\tenumerable: false\n\t\t});\n\t}\n\n\tconst ansi2ansi = n => n;\n\tconst rgb2rgb = (r, g, b) => [r, g, b];\n\n\tstyles.color.close = '\\u001B[39m';\n\tstyles.bgColor.close = '\\u001B[49m';\n\n\tstyles.color.ansi = {\n\t\tansi: wrapAnsi16(ansi2ansi, 0)\n\t};\n\tstyles.color.ansi256 = {\n\t\tansi256: wrapAnsi256(ansi2ansi, 0)\n\t};\n\tstyles.color.ansi16m = {\n\t\trgb: wrapAnsi16m(rgb2rgb, 0)\n\t};\n\n\tstyles.bgColor.ansi = {\n\t\tansi: wrapAnsi16(ansi2ansi, 10)\n\t};\n\tstyles.bgColor.ansi256 = {\n\t\tansi256: wrapAnsi256(ansi2ansi, 10)\n\t};\n\tstyles.bgColor.ansi16m = {\n\t\trgb: wrapAnsi16m(rgb2rgb, 10)\n\t};\n\n\tfor (let key of Object.keys(colorConvert)) {\n\t\tif (typeof colorConvert[key] !== 'object') {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst suite = colorConvert[key];\n\n\t\tif (key === 'ansi16') {\n\t\t\tkey = 'ansi';\n\t\t}\n\n\t\tif ('ansi16' in suite) {\n\t\t\tstyles.color.ansi[key] = wrapAnsi16(suite.ansi16, 0);\n\t\t\tstyles.bgColor.ansi[key] = wrapAnsi16(suite.ansi16, 10);\n\t\t}\n\n\t\tif ('ansi256' in suite) {\n\t\t\tstyles.color.ansi256[key] = wrapAnsi256(suite.ansi256, 0);\n\t\t\tstyles.bgColor.ansi256[key] = wrapAnsi256(suite.ansi256, 10);\n\t\t}\n\n\t\tif ('rgb' in suite) {\n\t\t\tstyles.color.ansi16m[key] = wrapAnsi16m(suite.rgb, 0);\n\t\t\tstyles.bgColor.ansi16m[key] = wrapAnsi16m(suite.rgb, 10);\n\t\t}\n\t}\n\n\treturn styles;\n}\n\n// Make the export immutable\nObject.defineProperty(module, 'exports', {\n\tenumerable: true,\n\tget: assembleStyles\n});\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/YW5zaS1zdHlsZXNANC4zLjA=",
    "content": "/package.json\u0004\u001e{\n\t\"name\": \"ansi-styles\",\n\t\"version\": \"4.3.0\",\n\t\"description\": \"ANSI escape codes for styling strings in the terminal\",\n\t\"license\": \"MIT\",\n\t\"repository\": \"chalk/ansi-styles\",\n\t\"funding\": \"https://github.com/chalk/ansi-styles?sponsor=1\",\n\t\"author\": {\n\t\t\"name\": \"Sindre Sorhus\",\n\t\t\"email\": \"sindresorhus@gmail.com\",\n\t\t\"url\": \"sindresorhus.com\"\n\t},\n\t\"engines\": {\n\t\t\"node\": \">=8\"\n\t},\n\t\"scripts\": {\n\t\t\"test\": \"xo && ava && tsd\",\n\t\t\"screenshot\": \"svg-term --command='node screenshot' --out=screenshot.svg --padding=3 --width=55 --height=3 --at=1000 --no-cursor\"\n\t},\n\t\"files\": [\n\t\t\"index.js\",\n\t\t\"index.d.ts\"\n\t],\n\t\"keywords\": [\n\t\t\"ansi\",\n\t\t\"styles\",\n\t\t\"color\",\n\t\t\"colour\",\n\t\t\"colors\",\n\t\t\"terminal\",\n\t\t\"console\",\n\t\t\"cli\",\n\t\t\"string\",\n\t\t\"tty\",\n\t\t\"escape\",\n\t\t\"formatting\",\n\t\t\"rgb\",\n\t\t\"256\",\n\t\t\"shell\",\n\t\t\"xterm\",\n\t\t\"log\",\n\t\t\"logging\",\n\t\t\"command-line\",\n\t\t\"text\"\n\t],\n\t\"dependencies\": {\n\t\t\"color-convert\": \"^2.0.1\"\n\t},\n\t\"devDependencies\": {\n\t\t\"@types/color-convert\": \"^1.9.0\",\n\t\t\"ava\": \"^2.3.0\",\n\t\t\"svg-term-cli\": \"^2.1.1\",\n\t\t\"tsd\": \"^0.11.0\",\n\t\t\"xo\": \"^0.25.3\"\n\t}\n}\n/index.js\u0010+'use strict';\n\nconst wrapAnsi16 = (fn, offset) => (...args) => {\n\tconst code = fn(...args);\n\treturn `\\u001B[${code + offset}m`;\n};\n\nconst wrapAnsi256 = (fn, offset) => (...args) => {\n\tconst code = fn(...args);\n\treturn `\\u001B[${38 + offset};5;${code}m`;\n};\n\nconst wrapAnsi16m = (fn, offset) => (...args) => {\n\tconst rgb = fn(...args);\n\treturn `\\u001B[${38 + offset};2;${rgb[0]};${rgb[1]};${rgb[2]}m`;\n};\n\nconst ansi2ansi = n => n;\nconst rgb2rgb = (r, g, b) => [r, g, b];\n\nconst setLazyProperty = (object, property, get) => {\n\tObject.defineProperty(object, property, {\n\t\tget: () => {\n\t\t\tconst value = get();\n\n\t\t\tObject.defineProperty(object, property, {\n\t\t\t\tvalue,\n\t\t\t\tenumerable: true,\n\t\t\t\tconfigurable: true\n\t\t\t});\n\n\t\t\treturn value;\n\t\t},\n\t\tenumerable: true,\n\t\tconfigurable: true\n\t});\n};\n\n/** @type {typeof import('color-convert')} */\nlet colorConvert;\nconst makeDynamicStyles = (wrap, targetSpace, identity, isBackground) => {\n\tif (colorConvert === undefined) {\n\t\tcolorConvert = require('color-convert');\n\t}\n\n\tconst offset = isBackground ? 10 : 0;\n\tconst styles = {};\n\n\tfor (const [sourceSpace, suite] of Object.entries(colorConvert)) {\n\t\tconst name = sourceSpace === 'ansi16' ? 'ansi' : sourceSpace;\n\t\tif (sourceSpace === targetSpace) {\n\t\t\tstyles[name] = wrap(identity, offset);\n\t\t} else if (typeof suite === 'object') {\n\t\t\tstyles[name] = wrap(suite[targetSpace], offset);\n\t\t}\n\t}\n\n\treturn styles;\n};\n\nfunction assembleStyles() {\n\tconst codes = new Map();\n\tconst styles = {\n\t\tmodifier: {\n\t\t\treset: [0, 0],\n\t\t\t// 21 isn't widely supported and 22 does the same thing\n\t\t\tbold: [1, 22],\n\t\t\tdim: [2, 22],\n\t\t\titalic: [3, 23],\n\t\t\tunderline: [4, 24],\n\t\t\tinverse: [7, 27],\n\t\t\thidden: [8, 28],\n\t\t\tstrikethrough: [9, 29]\n\t\t},\n\t\tcolor: {\n\t\t\tblack: [30, 39],\n\t\t\tred: [31, 39],\n\t\t\tgreen: [32, 39],\n\t\t\tyellow: [33, 39],\n\t\t\tblue: [34, 39],\n\t\t\tmagenta: [35, 39],\n\t\t\tcyan: [36, 39],\n\t\t\twhite: [37, 39],\n\n\t\t\t// Bright color\n\t\t\tblackBright: [90, 39],\n\t\t\tredBright: [91, 39],\n\t\t\tgreenBright: [92, 39],\n\t\t\tyellowBright: [93, 39],\n\t\t\tblueBright: [94, 39],\n\t\t\tmagentaBright: [95, 39],\n\t\t\tcyanBright: [96, 39],\n\t\t\twhiteBright: [97, 39]\n\t\t},\n\t\tbgColor: {\n\t\t\tbgBlack: [40, 49],\n\t\t\tbgRed: [41, 49],\n\t\t\tbgGreen: [42, 49],\n\t\t\tbgYellow: [43, 49],\n\t\t\tbgBlue: [44, 49],\n\t\t\tbgMagenta: [45, 49],\n\t\t\tbgCyan: [46, 49],\n\t\t\tbgWhite: [47, 49],\n\n\t\t\t// Bright color\n\t\t\tbgBlackBright: [100, 49],\n\t\t\tbgRedBright: [101, 49],\n\t\t\tbgGreenBright: [102, 49],\n\t\t\tbgYellowBright: [103, 49],\n\t\t\tbgBlueBright: [104, 49],\n\t\t\tbgMagentaBright: [105, 49],\n\t\t\tbgCyanBright: [106, 49],\n\t\t\tbgWhiteBright: [107, 49]\n\t\t}\n\t};\n\n\t// Alias bright black as gray (and grey)\n\tstyles.color.gray = styles.color.blackBright;\n\tstyles.bgColor.bgGray = styles.bgColor.bgBlackBright;\n\tstyles.color.grey = styles.color.blackBright;\n\tstyles.bgColor.bgGrey = styles.bgColor.bgBlackBright;\n\n\tfor (const [groupName, group] of Object.entries(styles)) {\n\t\tfor (const [styleName, style] of Object.entries(group)) {\n\t\t\tstyles[styleName] = {\n\t\t\t\topen: `\\u001B[${style[0]}m`,\n\t\t\t\tclose: `\\u001B[${style[1]}m`\n\t\t\t};\n\n\t\t\tgroup[styleName] = styles[styleName];\n\n\t\t\tcodes.set(style[0], style[1]);\n\t\t}\n\n\t\tObject.defineProperty(styles, groupName, {\n\t\t\tvalue: group,\n\t\t\tenumerable: false\n\t\t});\n\t}\n\n\tObject.defineProperty(styles, 'codes', {\n\t\tvalue: codes,\n\t\tenumerable: false\n\t});\n\n\tstyles.color.close = '\\u001B[39m';\n\tstyles.bgColor.close = '\\u001B[49m';\n\n\tsetLazyProperty(styles.color, 'ansi', () => makeDynamicStyles(wrapAnsi16, 'ansi16', ansi2ansi, false));\n\tsetLazyProperty(styles.color, 'ansi256', () => makeDynamicStyles(wrapAnsi256, 'ansi256', ansi2ansi, false));\n\tsetLazyProperty(styles.color, 'ansi16m', () => makeDynamicStyles(wrapAnsi16m, 'rgb', rgb2rgb, false));\n\tsetLazyProperty(styles.bgColor, 'ansi', () => makeDynamicStyles(wrapAnsi16, 'ansi16', ansi2ansi, true));\n\tsetLazyProperty(styles.bgColor, 'ansi256', () => makeDynamicStyles(wrapAnsi256, 'ansi256', ansi2ansi, true));\n\tsetLazyProperty(styles.bgColor, 'ansi16m', () => makeDynamicStyles(wrapAnsi16m, 'rgb', rgb2rgb, true));\n\n\treturn styles;\n}\n\n// Make the export immutable\nObject.defineProperty(module, 'exports', {\n\tenumerable: true,\n\tget: assembleStyles\n});\n/license\u0004UMIT License\n\nCopyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)\n\nPermission 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:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE 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.\n/readme.md\u0010# ansi-styles [![Build Status](https://travis-ci.org/chalk/ansi-styles.svg?branch=master)](https://travis-ci.org/chalk/ansi-styles)\n\n> [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code#Colors_and_Styles) for styling strings in the terminal\n\nYou probably want the higher-level [chalk](https://github.com/chalk/chalk) module for styling your strings.\n\n<img src=\"screenshot.svg\" width=\"900\">\n\n## Install\n\n```\n$ npm install ansi-styles\n```\n\n## Usage\n\n```js\nconst style = require('ansi-styles');\n\nconsole.log(`${style.green.open}Hello world!${style.green.close}`);\n\n\n// Color conversion between 16/256/truecolor\n// NOTE: If conversion goes to 16 colors or 256 colors, the original color\n//       may be degraded to fit that color palette. This means terminals\n//       that do not support 16 million colors will best-match the\n//       original color.\nconsole.log(style.bgColor.ansi.hsl(120, 80, 72) + 'Hello world!' + style.bgColor.close);\nconsole.log(style.color.ansi256.rgb(199, 20, 250) + 'Hello world!' + style.color.close);\nconsole.log(style.color.ansi16m.hex('#abcdef') + 'Hello world!' + style.color.close);\n```\n\n## API\n\nEach style has an `open` and `close` property.\n\n## Styles\n\n### Modifiers\n\n- `reset`\n- `bold`\n- `dim`\n- `italic` *(Not widely supported)*\n- `underline`\n- `inverse`\n- `hidden`\n- `strikethrough` *(Not widely supported)*\n\n### Colors\n\n- `black`\n- `red`\n- `green`\n- `yellow`\n- `blue`\n- `magenta`\n- `cyan`\n- `white`\n- `blackBright` (alias: `gray`, `grey`)\n- `redBright`\n- `greenBright`\n- `yellowBright`\n- `blueBright`\n- `magentaBright`\n- `cyanBright`\n- `whiteBright`\n\n### Background colors\n\n- `bgBlack`\n- `bgRed`\n- `bgGreen`\n- `bgYellow`\n- `bgBlue`\n- `bgMagenta`\n- `bgCyan`\n- `bgWhite`\n- `bgBlackBright` (alias: `bgGray`, `bgGrey`)\n- `bgRedBright`\n- `bgGreenBright`\n- `bgYellowBright`\n- `bgBlueBright`\n- `bgMagentaBright`\n- `bgCyanBright`\n- `bgWhiteBright`\n\n## Advanced usage\n\nBy default, you get a map of styles, but the styles are also available as groups. They are non-enumerable so they don't show up unless you access them explicitly. This makes it easier to expose only a subset in a higher-level module.\n\n- `style.modifier`\n- `style.color`\n- `style.bgColor`\n\n###### Example\n\n```js\nconsole.log(style.color.green.open);\n```\n\nRaw escape codes (i.e. without the CSI escape prefix `\\u001B[` and render mode postfix `m`) are available under `style.codes`, which returns a `Map` with the open codes as keys and close codes as values.\n\n###### Example\n\n```js\nconsole.log(style.codes.get(36));\n//=> 39\n```\n\n## [256 / 16 million (TrueColor) support](https://gist.github.com/XVilka/8346728)\n\n`ansi-styles` uses the [`color-convert`](https://github.com/Qix-/color-convert) package to allow for converting between various colors and ANSI escapes, with support for 256 and 16 million colors.\n\nThe following color spaces from `color-convert` are supported:\n\n- `rgb`\n- `hex`\n- `keyword`\n- `hsl`\n- `hsv`\n- `hwb`\n- `ansi`\n- `ansi256`\n\nTo use these, call the associated conversion function with the intended output, for example:\n\n```js\nstyle.color.ansi.rgb(100, 200, 15); // RGB to 16 color ansi foreground code\nstyle.bgColor.ansi.rgb(100, 200, 15); // RGB to 16 color ansi background code\n\nstyle.color.ansi256.hsl(120, 100, 60); // HSL to 256 color ansi foreground code\nstyle.bgColor.ansi256.hsl(120, 100, 60); // HSL to 256 color ansi foreground code\n\nstyle.color.ansi16m.hex('#C0FFEE'); // Hex (RGB) to 16 million color foreground code\nstyle.bgColor.ansi16m.hex('#C0FFEE'); // Hex (RGB) to 16 million color background code\n```\n\n## Related\n\n- [ansi-escapes](https://github.com/sindresorhus/ansi-escapes) - ANSI escape codes for manipulating the terminal\n\n## Maintainers\n\n- [Sindre Sorhus](https://github.com/sindresorhus)\n- [Josh Junon](https://github.com/qix-)\n\n## For enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `ansi-styles` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ansi-styles?utm_source=npm-ansi-styles&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n/index.d.ts\u0018declare type CSSColor =\n\t| 'aliceblue'\n\t| 'antiquewhite'\n\t| 'aqua'\n\t| 'aquamarine'\n\t| 'azure'\n\t| 'beige'\n\t| 'bisque'\n\t| 'black'\n\t| 'blanchedalmond'\n\t| 'blue'\n\t| 'blueviolet'\n\t| 'brown'\n\t| 'burlywood'\n\t| 'cadetblue'\n\t| 'chartreuse'\n\t| 'chocolate'\n\t| 'coral'\n\t| 'cornflowerblue'\n\t| 'cornsilk'\n\t| 'crimson'\n\t| 'cyan'\n\t| 'darkblue'\n\t| 'darkcyan'\n\t| 'darkgoldenrod'\n\t| 'darkgray'\n\t| 'darkgreen'\n\t| 'darkgrey'\n\t| 'darkkhaki'\n\t| 'darkmagenta'\n\t| 'darkolivegreen'\n\t| 'darkorange'\n\t| 'darkorchid'\n\t| 'darkred'\n\t| 'darksalmon'\n\t| 'darkseagreen'\n\t| 'darkslateblue'\n\t| 'darkslategray'\n\t| 'darkslategrey'\n\t| 'darkturquoise'\n\t| 'darkviolet'\n\t| 'deeppink'\n\t| 'deepskyblue'\n\t| 'dimgray'\n\t| 'dimgrey'\n\t| 'dodgerblue'\n\t| 'firebrick'\n\t| 'floralwhite'\n\t| 'forestgreen'\n\t| 'fuchsia'\n\t| 'gainsboro'\n\t| 'ghostwhite'\n\t| 'gold'\n\t| 'goldenrod'\n\t| 'gray'\n\t| 'green'\n\t| 'greenyellow'\n\t| 'grey'\n\t| 'honeydew'\n\t| 'hotpink'\n\t| 'indianred'\n\t| 'indigo'\n\t| 'ivory'\n\t| 'khaki'\n\t| 'lavender'\n\t| 'lavenderblush'\n\t| 'lawngreen'\n\t| 'lemonchiffon'\n\t| 'lightblue'\n\t| 'lightcoral'\n\t| 'lightcyan'\n\t| 'lightgoldenrodyellow'\n\t| 'lightgray'\n\t| 'lightgreen'\n\t| 'lightgrey'\n\t| 'lightpink'\n\t| 'lightsalmon'\n\t| 'lightseagreen'\n\t| 'lightskyblue'\n\t| 'lightslategray'\n\t| 'lightslategrey'\n\t| 'lightsteelblue'\n\t| 'lightyellow'\n\t| 'lime'\n\t| 'limegreen'\n\t| 'linen'\n\t| 'magenta'\n\t| 'maroon'\n\t| 'mediumaquamarine'\n\t| 'mediumblue'\n\t| 'mediumorchid'\n\t| 'mediumpurple'\n\t| 'mediumseagreen'\n\t| 'mediumslateblue'\n\t| 'mediumspringgreen'\n\t| 'mediumturquoise'\n\t| 'mediumvioletred'\n\t| 'midnightblue'\n\t| 'mintcream'\n\t| 'mistyrose'\n\t| 'moccasin'\n\t| 'navajowhite'\n\t| 'navy'\n\t| 'oldlace'\n\t| 'olive'\n\t| 'olivedrab'\n\t| 'orange'\n\t| 'orangered'\n\t| 'orchid'\n\t| 'palegoldenrod'\n\t| 'palegreen'\n\t| 'paleturquoise'\n\t| 'palevioletred'\n\t| 'papayawhip'\n\t| 'peachpuff'\n\t| 'peru'\n\t| 'pink'\n\t| 'plum'\n\t| 'powderblue'\n\t| 'purple'\n\t| 'rebeccapurple'\n\t| 'red'\n\t| 'rosybrown'\n\t| 'royalblue'\n\t| 'saddlebrown'\n\t| 'salmon'\n\t| 'sandybrown'\n\t| 'seagreen'\n\t| 'seashell'\n\t| 'sienna'\n\t| 'silver'\n\t| 'skyblue'\n\t| 'slateblue'\n\t| 'slategray'\n\t| 'slategrey'\n\t| 'snow'\n\t| 'springgreen'\n\t| 'steelblue'\n\t| 'tan'\n\t| 'teal'\n\t| 'thistle'\n\t| 'tomato'\n\t| 'turquoise'\n\t| 'violet'\n\t| 'wheat'\n\t| 'white'\n\t| 'whitesmoke'\n\t| 'yellow'\n\t| 'yellowgreen';\n\ndeclare namespace ansiStyles {\n\tinterface ColorConvert {\n\t\t/**\n\t\tThe RGB color space.\n\n\t\t@param red - (`0`-`255`)\n\t\t@param green - (`0`-`255`)\n\t\t@param blue - (`0`-`255`)\n\t\t*/\n\t\trgb(red: number, green: number, blue: number): string;\n\n\t\t/**\n\t\tThe RGB HEX color space.\n\n\t\t@param hex - A hexadecimal string containing RGB data.\n\t\t*/\n\t\thex(hex: string): string;\n\n\t\t/**\n\t\t@param keyword - A CSS color name.\n\t\t*/\n\t\tkeyword(keyword: CSSColor): string;\n\n\t\t/**\n\t\tThe HSL color space.\n\n\t\t@param hue - (`0`-`360`)\n\t\t@param saturation - (`0`-`100`)\n\t\t@param lightness - (`0`-`100`)\n\t\t*/\n\t\thsl(hue: number, saturation: number, lightness: number): string;\n\n\t\t/**\n\t\tThe HSV color space.\n\n\t\t@param hue - (`0`-`360`)\n\t\t@param saturation - (`0`-`100`)\n\t\t@param value - (`0`-`100`)\n\t\t*/\n\t\thsv(hue: number, saturation: number, value: number): string;\n\n\t\t/**\n\t\tThe HSV color space.\n\n\t\t@param hue - (`0`-`360`)\n\t\t@param whiteness - (`0`-`100`)\n\t\t@param blackness - (`0`-`100`)\n\t\t*/\n\t\thwb(hue: number, whiteness: number, blackness: number): string;\n\n\t\t/**\n\t\tUse a [4-bit unsigned number](https://en.wikipedia.org/wiki/ANSI_escape_code#3/4-bit) to set text color.\n\t\t*/\n\t\tansi(ansi: number): string;\n\n\t\t/**\n\t\tUse an [8-bit unsigned number](https://en.wikipedia.org/wiki/ANSI_escape_code#8-bit) to set text color.\n\t\t*/\n\t\tansi256(ansi: number): string;\n\t}\n\n\tinterface CSPair {\n\t\t/**\n\t\tThe ANSI terminal control sequence for starting this style.\n\t\t*/\n\t\treadonly open: string;\n\n\t\t/**\n\t\tThe ANSI terminal control sequence for ending this style.\n\t\t*/\n\t\treadonly close: string;\n\t}\n\n\tinterface ColorBase {\n\t\treadonly ansi: ColorConvert;\n\t\treadonly ansi256: ColorConvert;\n\t\treadonly ansi16m: ColorConvert;\n\n\t\t/**\n\t\tThe ANSI terminal control sequence for ending this color.\n\t\t*/\n\t\treadonly close: string;\n\t}\n\n\tinterface Modifier {\n\t\t/**\n\t\tResets the current color chain.\n\t\t*/\n\t\treadonly reset: CSPair;\n\n\t\t/**\n\t\tMake text bold.\n\t\t*/\n\t\treadonly bold: CSPair;\n\n\t\t/**\n\t\tEmitting only a small amount of light.\n\t\t*/\n\t\treadonly dim: CSPair;\n\n\t\t/**\n\t\tMake text italic. (Not widely supported)\n\t\t*/\n\t\treadonly italic: CSPair;\n\n\t\t/**\n\t\tMake text underline. (Not widely supported)\n\t\t*/\n\t\treadonly underline: CSPair;\n\n\t\t/**\n\t\tInverse background and foreground colors.\n\t\t*/\n\t\treadonly inverse: CSPair;\n\n\t\t/**\n\t\tPrints the text, but makes it invisible.\n\t\t*/\n\t\treadonly hidden: CSPair;\n\n\t\t/**\n\t\tPuts a horizontal line through the center of the text. (Not widely supported)\n\t\t*/\n\t\treadonly strikethrough: CSPair;\n\t}\n\n\tinterface ForegroundColor {\n\t\treadonly black: CSPair;\n\t\treadonly red: CSPair;\n\t\treadonly green: CSPair;\n\t\treadonly yellow: CSPair;\n\t\treadonly blue: CSPair;\n\t\treadonly cyan: CSPair;\n\t\treadonly magenta: CSPair;\n\t\treadonly white: CSPair;\n\n\t\t/**\n\t\tAlias for `blackBright`.\n\t\t*/\n\t\treadonly gray: CSPair;\n\n\t\t/**\n\t\tAlias for `blackBright`.\n\t\t*/\n\t\treadonly grey: CSPair;\n\n\t\treadonly blackBright: CSPair;\n\t\treadonly redBright: CSPair;\n\t\treadonly greenBright: CSPair;\n\t\treadonly yellowBright: CSPair;\n\t\treadonly blueBright: CSPair;\n\t\treadonly cyanBright: CSPair;\n\t\treadonly magentaBright: CSPair;\n\t\treadonly whiteBright: CSPair;\n\t}\n\n\tinterface BackgroundColor {\n\t\treadonly bgBlack: CSPair;\n\t\treadonly bgRed: CSPair;\n\t\treadonly bgGreen: CSPair;\n\t\treadonly bgYellow: CSPair;\n\t\treadonly bgBlue: CSPair;\n\t\treadonly bgCyan: CSPair;\n\t\treadonly bgMagenta: CSPair;\n\t\treadonly bgWhite: CSPair;\n\n\t\t/**\n\t\tAlias for `bgBlackBright`.\n\t\t*/\n\t\treadonly bgGray: CSPair;\n\n\t\t/**\n\t\tAlias for `bgBlackBright`.\n\t\t*/\n\t\treadonly bgGrey: CSPair;\n\n\t\treadonly bgBlackBright: CSPair;\n\t\treadonly bgRedBright: CSPair;\n\t\treadonly bgGreenBright: CSPair;\n\t\treadonly bgYellowBright: CSPair;\n\t\treadonly bgBlueBright: CSPair;\n\t\treadonly bgCyanBright: CSPair;\n\t\treadonly bgMagentaBright: CSPair;\n\t\treadonly bgWhiteBright: CSPair;\n\t}\n}\n\ndeclare const ansiStyles: {\n\treadonly modifier: ansiStyles.Modifier;\n\treadonly color: ansiStyles.ForegroundColor & ansiStyles.ColorBase;\n\treadonly bgColor: ansiStyles.BackgroundColor & ansiStyles.ColorBase;\n\treadonly codes: ReadonlyMap<number, number>;\n} & ansiStyles.BackgroundColor & ansiStyles.ForegroundColor & ansiStyles.Modifier;\n\nexport = ansiStyles;\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/YWJvcnQtY29udHJvbGxlckAzLjAuMA==",
    "content": "/browser.js\u0001/*globals self, window */\n\"use strict\"\n\n/*eslint-disable @mysticatea/prettier */\nconst { AbortController, AbortSignal } =\n    typeof self !== \"undefined\" ? self :\n    typeof window !== \"undefined\" ? window :\n    /* otherwise */ undefined\n/*eslint-enable @mysticatea/prettier */\n\nmodule.exports = AbortController\nmodule.exports.AbortSignal = AbortSignal\nmodule.exports.default = AbortController\n/dist/abort-controller.js\u000e\u001a/**\n * @author Toru Nagashima <https://github.com/mysticatea>\n * See LICENSE file in root directory for full license.\n */\n'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar eventTargetShim = require('event-target-shim');\n\n/**\n * The signal class.\n * @see https://dom.spec.whatwg.org/#abortsignal\n */\nclass AbortSignal extends eventTargetShim.EventTarget {\n    /**\n     * AbortSignal cannot be constructed directly.\n     */\n    constructor() {\n        super();\n        throw new TypeError(\"AbortSignal cannot be constructed directly\");\n    }\n    /**\n     * Returns `true` if this `AbortSignal`'s `AbortController` has signaled to abort, and `false` otherwise.\n     */\n    get aborted() {\n        const aborted = abortedFlags.get(this);\n        if (typeof aborted !== \"boolean\") {\n            throw new TypeError(`Expected 'this' to be an 'AbortSignal' object, but got ${this === null ? \"null\" : typeof this}`);\n        }\n        return aborted;\n    }\n}\neventTargetShim.defineEventAttribute(AbortSignal.prototype, \"abort\");\n/**\n * Create an AbortSignal object.\n */\nfunction createAbortSignal() {\n    const signal = Object.create(AbortSignal.prototype);\n    eventTargetShim.EventTarget.call(signal);\n    abortedFlags.set(signal, false);\n    return signal;\n}\n/**\n * Abort a given signal.\n */\nfunction abortSignal(signal) {\n    if (abortedFlags.get(signal) !== false) {\n        return;\n    }\n    abortedFlags.set(signal, true);\n    signal.dispatchEvent({ type: \"abort\" });\n}\n/**\n * Aborted flag for each instances.\n */\nconst abortedFlags = new WeakMap();\n// Properties should be enumerable.\nObject.defineProperties(AbortSignal.prototype, {\n    aborted: { enumerable: true },\n});\n// `toString()` should return `\"[object AbortSignal]\"`\nif (typeof Symbol === \"function\" && typeof Symbol.toStringTag === \"symbol\") {\n    Object.defineProperty(AbortSignal.prototype, Symbol.toStringTag, {\n        configurable: true,\n        value: \"AbortSignal\",\n    });\n}\n\n/**\n * The AbortController.\n * @see https://dom.spec.whatwg.org/#abortcontroller\n */\nclass AbortController {\n    /**\n     * Initialize this controller.\n     */\n    constructor() {\n        signals.set(this, createAbortSignal());\n    }\n    /**\n     * Returns the `AbortSignal` object associated with this object.\n     */\n    get signal() {\n        return getSignal(this);\n    }\n    /**\n     * Abort and signal to any observers that the associated activity is to be aborted.\n     */\n    abort() {\n        abortSignal(getSignal(this));\n    }\n}\n/**\n * Associated signals.\n */\nconst signals = new WeakMap();\n/**\n * Get the associated signal of a given controller.\n */\nfunction getSignal(controller) {\n    const signal = signals.get(controller);\n    if (signal == null) {\n        throw new TypeError(`Expected 'this' to be an 'AbortController' object, but got ${controller === null ? \"null\" : typeof controller}`);\n    }\n    return signal;\n}\n// Properties should be enumerable.\nObject.defineProperties(AbortController.prototype, {\n    signal: { enumerable: true },\n    abort: { enumerable: true },\n});\nif (typeof Symbol === \"function\" && typeof Symbol.toStringTag === \"symbol\") {\n    Object.defineProperty(AbortController.prototype, Symbol.toStringTag, {\n        configurable: true,\n        value: \"AbortController\",\n    });\n}\n\nexports.AbortController = AbortController;\nexports.AbortSignal = AbortSignal;\nexports.default = AbortController;\n\nmodule.exports = AbortController\nmodule.exports.AbortController = module.exports[\"default\"] = AbortController\nmodule.exports.AbortSignal = AbortSignal\n//# sourceMappingURL=abort-controller.js.map\n!/dist/abort-controller.umd.js.mapŒ\u0005{\"version\":3,\"file\":\"abort-controller.umd.js\",\"sources\":[\"../node_modules/event-target-shim/dist/event-target-shim.mjs\",\"../src/abort-signal.ts\",\"../src/abort-controller.ts\"],\"sourcesContent\":[\"/**\\n * @author Toru Nagashima <https://github.com/mysticatea>\\n * @copyright 2015 Toru Nagashima. All rights reserved.\\n * See LICENSE file in root directory for full license.\\n */\\n/**\\n * @typedef {object} PrivateData\\n * @property {EventTarget} eventTarget The event target.\\n * @property {{type:string}} event The original event object.\\n * @property {number} eventPhase The current event phase.\\n * @property {EventTarget|null} currentTarget The current event target.\\n * @property {boolean} canceled The flag to prevent default.\\n * @property {boolean} stopped The flag to stop propagation.\\n * @property {boolean} immediateStopped The flag to stop propagation immediately.\\n * @property {Function|null} passiveListener The listener if the current listener is passive. Otherwise this is null.\\n * @property {number} timeStamp The unix time.\\n * @private\\n */\\n\\n/**\\n * Private data for event wrappers.\\n * @type {WeakMap<Event, PrivateData>}\\n * @private\\n */\\nconst privateData = new WeakMap();\\n\\n/**\\n * Cache for wrapper classes.\\n * @type {WeakMap<Object, Function>}\\n * @private\\n */\\nconst wrappers = new WeakMap();\\n\\n/**\\n * Get private data.\\n * @param {Event} event The event object to get private data.\\n * @returns {PrivateData} The private data of the event.\\n * @private\\n */\\nfunction pd(event) {\\n    const retv = privateData.get(event);\\n    console.assert(\\n        retv != null,\\n        \\\"'this' is expected an Event object, but got\\\",\\n        event\\n    );\\n    return retv\\n}\\n\\n/**\\n * https://dom.spec.whatwg.org/#set-the-canceled-flag\\n * @param data {PrivateData} private data.\\n */\\nfunction setCancelFlag(data) {\\n    if (data.passiveListener != null) {\\n        if (\\n            typeof console !== \\\"undefined\\\" &&\\n            typeof console.error === \\\"function\\\"\\n        ) {\\n            console.error(\\n                \\\"Unable to preventDefault inside passive event listener invocation.\\\",\\n                data.passiveListener\\n            );\\n        }\\n        return\\n    }\\n    if (!data.event.cancelable) {\\n        return\\n    }\\n\\n    data.canceled = true;\\n    if (typeof data.event.preventDefault === \\\"function\\\") {\\n        data.event.preventDefault();\\n    }\\n}\\n\\n/**\\n * @see https://dom.spec.whatwg.org/#interface-event\\n * @private\\n */\\n/**\\n * The event wrapper.\\n * @constructor\\n * @param {EventTarget} eventTarget The event target of this dispatching.\\n * @param {Event|{type:string}} event The original event to wrap.\\n */\\nfunction Event(eventTarget, event) {\\n    privateData.set(this, {\\n        eventTarget,\\n        event,\\n        eventPhase: 2,\\n        currentTarget: eventTarget,\\n        canceled: false,\\n        stopped: false,\\n        immediateStopped: false,\\n        passiveListener: null,\\n        timeStamp: event.timeStamp || Date.now(),\\n    });\\n\\n    // https://heycam.github.io/webidl/#Unforgeable\\n    Object.defineProperty(this, \\\"isTrusted\\\", { value: false, enumerable: true });\\n\\n    // Define accessors\\n    const keys = Object.keys(event);\\n    for (let i = 0; i < keys.length; ++i) {\\n        const key = keys[i];\\n        if (!(key in this)) {\\n            Object.defineProperty(this, key, defineRedirectDescriptor(key));\\n        }\\n    }\\n}\\n\\n// Should be enumerable, but class methods are not enumerable.\\nEvent.prototype = {\\n    /**\\n     * The type of this event.\\n     * @type {string}\\n     */\\n    get type() {\\n        return pd(this).event.type\\n    },\\n\\n    /**\\n     * The target of this event.\\n     * @type {EventTarget}\\n     */\\n    get target() {\\n        return pd(this).eventTarget\\n    },\\n\\n    /**\\n     * The target of this event.\\n     * @type {EventTarget}\\n     */\\n    get currentTarget() {\\n        return pd(this).currentTarget\\n    },\\n\\n    /**\\n     * @returns {EventTarget[]} The composed path of this event.\\n     */\\n    composedPath() {\\n        const currentTarget = pd(this).currentTarget;\\n        if (currentTarget == null) {\\n            return []\\n        }\\n        return [currentTarget]\\n    },\\n\\n    /**\\n     * Constant of NONE.\\n     * @type {number}\\n     */\\n    get NONE() {\\n        return 0\\n    },\\n\\n    /**\\n     * Constant of CAPTURING_PHASE.\\n     * @type {number}\\n     */\\n    get CAPTURING_PHASE() {\\n        return 1\\n    },\\n\\n    /**\\n     * Constant of AT_TARGET.\\n     * @type {number}\\n     */\\n    get AT_TARGET() {\\n        return 2\\n    },\\n\\n    /**\\n     * Constant of BUBBLING_PHASE.\\n     * @type {number}\\n     */\\n    get BUBBLING_PHASE() {\\n        return 3\\n    },\\n\\n    /**\\n     * The target of this event.\\n     * @type {number}\\n     */\\n    get eventPhase() {\\n        return pd(this).eventPhase\\n    },\\n\\n    /**\\n     * Stop event bubbling.\\n     * @returns {void}\\n     */\\n    stopPropagation() {\\n        const data = pd(this);\\n\\n        data.stopped = true;\\n        if (typeof data.event.stopPropagation === \\\"function\\\") {\\n            data.event.stopPropagation();\\n        }\\n    },\\n\\n    /**\\n     * Stop event bubbling.\\n     * @returns {void}\\n     */\\n    stopImmediatePropagation() {\\n        const data = pd(this);\\n\\n        data.stopped = true;\\n        data.immediateStopped = true;\\n        if (typeof data.event.stopImmediatePropagation === \\\"function\\\") {\\n            data.event.stopImmediatePropagation();\\n        }\\n    },\\n\\n    /**\\n     * The flag to be bubbling.\\n     * @type {boolean}\\n     */\\n    get bubbles() {\\n        return Boolean(pd(this).event.bubbles)\\n    },\\n\\n    /**\\n     * The flag to be cancelable.\\n     * @type {boolean}\\n     */\\n    get cancelable() {\\n        return Boolean(pd(this).event.cancelable)\\n    },\\n\\n    /**\\n     * Cancel this event.\\n     * @returns {void}\\n     */\\n    preventDefault() {\\n        setCancelFlag(pd(this));\\n    },\\n\\n    /**\\n     * The flag to indicate cancellation state.\\n     * @type {boolean}\\n     */\\n    get defaultPrevented() {\\n        return pd(this).canceled\\n    },\\n\\n    /**\\n     * The flag to be composed.\\n     * @type {boolean}\\n     */\\n    get composed() {\\n        return Boolean(pd(this).event.composed)\\n    },\\n\\n    /**\\n     * The unix time of this event.\\n     * @type {number}\\n     */\\n    get timeStamp() {\\n        return pd(this).timeStamp\\n    },\\n\\n    /**\\n     * The target of this event.\\n     * @type {EventTarget}\\n     * @deprecated\\n     */\\n    get srcElement() {\\n        return pd(this).eventTarget\\n    },\\n\\n    /**\\n     * The flag to stop event bubbling.\\n     * @type {boolean}\\n     * @deprecated\\n     */\\n    get cancelBubble() {\\n        return pd(this).stopped\\n    },\\n    set cancelBubble(value) {\\n        if (!value) {\\n            return\\n        }\\n        const data = pd(this);\\n\\n        data.stopped = true;\\n        if (typeof data.event.cancelBubble === \\\"boolean\\\") {\\n            data.event.cancelBubble = true;\\n        }\\n    },\\n\\n    /**\\n     * The flag to indicate cancellation state.\\n     * @type {boolean}\\n     * @deprecated\\n     */\\n    get returnValue() {\\n        return !pd(this).canceled\\n    },\\n    set returnValue(value) {\\n        if (!value) {\\n            setCancelFlag(pd(this));\\n        }\\n    },\\n\\n    /**\\n     * Initialize this event object. But do nothing under event dispatching.\\n     * @param {string} type The event type.\\n     * @param {boolean} [bubbles=false] The flag to be possible to bubble up.\\n     * @param {boolean} [cancelable=false] The flag to be possible to cancel.\\n     * @deprecated\\n     */\\n    initEvent() {\\n        // Do nothing.\\n    },\\n};\\n\\n// `constructor` is not enumerable.\\nObject.defineProperty(Event.prototype, \\\"constructor\\\", {\\n    value: Event,\\n    configurable: true,\\n    writable: true,\\n});\\n\\n// Ensure `event instanceof window.Event` is `true`.\\nif (typeof window !== \\\"undefined\\\" && typeof window.Event !== \\\"undefined\\\") {\\n    Object.setPrototypeOf(Event.prototype, window.Event.prototype);\\n\\n    // Make association for wrappers.\\n    wrappers.set(window.Event.prototype, Event);\\n}\\n\\n/**\\n * Get the property descriptor to redirect a given property.\\n * @param {string} key Property name to define property descriptor.\\n * @returns {PropertyDescriptor} The property descriptor to redirect the property.\\n * @private\\n */\\nfunction defineRedirectDescriptor(key) {\\n    return {\\n        get() {\\n            return pd(this).event[key]\\n        },\\n        set(value) {\\n            pd(this).event[key] = value;\\n        },\\n        configurable: true,\\n        enumerable: true,\\n    }\\n}\\n\\n/**\\n * Get the property descriptor to call a given method property.\\n * @param {string} key Property name to define property descriptor.\\n * @returns {PropertyDescriptor} The property descriptor to call the method property.\\n * @private\\n */\\nfunction defineCallDescriptor(key) {\\n    return {\\n        value() {\\n            const event = pd(this).event;\\n            return event[key].apply(event, arguments)\\n        },\\n        configurable: true,\\n        enumerable: true,\\n    }\\n}\\n\\n/**\\n * Define new wrapper class.\\n * @param {Function} BaseEvent The base wrapper class.\\n * @param {Object} proto The prototype of the original event.\\n * @returns {Function} The defined wrapper class.\\n * @private\\n */\\nfunction defineWrapper(BaseEvent, proto) {\\n    const keys = Object.keys(proto);\\n    if (keys.length === 0) {\\n        return BaseEvent\\n    }\\n\\n    /** CustomEvent */\\n    function CustomEvent(eventTarget, event) {\\n        BaseEvent.call(this, eventTarget, event);\\n    }\\n\\n    CustomEvent.prototype = Object.create(BaseEvent.prototype, {\\n        constructor: { value: CustomEvent, configurable: true, writable: true },\\n    });\\n\\n    // Define accessors.\\n    for (let i = 0; i < keys.length; ++i) {\\n        const key = keys[i];\\n        if (!(key in BaseEvent.prototype)) {\\n            const descriptor = Object.getOwnPropertyDescriptor(proto, key);\\n            const isFunc = typeof descriptor.value === \\\"function\\\";\\n            Object.defineProperty(\\n                CustomEvent.prototype,\\n                key,\\n                isFunc\\n                    ? defineCallDescriptor(key)\\n                    : defineRedirectDescriptor(key)\\n            );\\n        }\\n    }\\n\\n    return CustomEvent\\n}\\n\\n/**\\n * Get the wrapper class of a given prototype.\\n * @param {Object} proto The prototype of the original event to get its wrapper.\\n * @returns {Function} The wrapper class.\\n * @private\\n */\\nfunction getWrapper(proto) {\\n    if (proto == null || proto === Object.prototype) {\\n        return Event\\n    }\\n\\n    let wrapper = wrappers.get(proto);\\n    if (wrapper == null) {\\n        wrapper = defineWrapper(getWrapper(Object.getPrototypeOf(proto)), proto);\\n        wrappers.set(proto, wrapper);\\n    }\\n    return wrapper\\n}\\n\\n/**\\n * Wrap a given event to management a dispatching.\\n * @param {EventTarget} eventTarget The event target of this dispatching.\\n * @param {Object} event The event to wrap.\\n * @returns {Event} The wrapper instance.\\n * @private\\n */\\nfunction wrapEvent(eventTarget, event) {\\n    const Wrapper = getWrapper(Object.getPrototypeOf(event));\\n    return new Wrapper(eventTarget, event)\\n}\\n\\n/**\\n * Get the immediateStopped flag of a given event.\\n * @param {Event} event The event to get.\\n * @returns {boolean} The flag to stop propagation immediately.\\n * @private\\n */\\nfunction isStopped(event) {\\n    return pd(event).immediateStopped\\n}\\n\\n/**\\n * Set the current event phase of a given event.\\n * @param {Event} event The event to set current target.\\n * @param {number} eventPhase New event phase.\\n * @returns {void}\\n * @private\\n */\\nfunction setEventPhase(event, eventPhase) {\\n    pd(event).eventPhase = eventPhase;\\n}\\n\\n/**\\n * Set the current target of a given event.\\n * @param {Event} event The event to set current target.\\n * @param {EventTarget|null} currentTarget New current target.\\n * @returns {void}\\n * @private\\n */\\nfunction setCurrentTarget(event, currentTarget) {\\n    pd(event).currentTarget = currentTarget;\\n}\\n\\n/**\\n * Set a passive listener of a given event.\\n * @param {Event} event The event to set current target.\\n * @param {Function|null} passiveListener New passive listener.\\n * @returns {void}\\n * @private\\n */\\nfunction setPassiveListener(event, passiveListener) {\\n    pd(event).passiveListener = passiveListener;\\n}\\n\\n/**\\n * @typedef {object} ListenerNode\\n * @property {Function} listener\\n * @property {1|2|3} listenerType\\n * @property {boolean} passive\\n * @property {boolean} once\\n * @property {ListenerNode|null} next\\n * @private\\n */\\n\\n/**\\n * @type {WeakMap<object, Map<string, ListenerNode>>}\\n * @private\\n */\\nconst listenersMap = new WeakMap();\\n\\n// Listener types\\nconst CAPTURE = 1;\\nconst BUBBLE = 2;\\nconst ATTRIBUTE = 3;\\n\\n/**\\n * Check whether a given value is an object or not.\\n * @param {any} x The value to check.\\n * @returns {boolean} `true` if the value is an object.\\n */\\nfunction isObject(x) {\\n    return x !== null && typeof x === \\\"object\\\" //eslint-disable-line no-restricted-syntax\\n}\\n\\n/**\\n * Get listeners.\\n * @param {EventTarget} eventTarget The event target to get.\\n * @returns {Map<string, ListenerNode>} The listeners.\\n * @private\\n */\\nfunction getListeners(eventTarget) {\\n    const listeners = listenersMap.get(eventTarget);\\n    if (listeners == null) {\\n        throw new TypeError(\\n            \\\"'this' is expected an EventTarget object, but got another value.\\\"\\n        )\\n    }\\n    return listeners\\n}\\n\\n/**\\n * Get the property descriptor for the event attribute of a given event.\\n * @param {string} eventName The event name to get property descriptor.\\n * @returns {PropertyDescriptor} The property descriptor.\\n * @private\\n */\\nfunction defineEventAttributeDescriptor(eventName) {\\n    return {\\n        get() {\\n            const listeners = getListeners(this);\\n            let node = listeners.get(eventName);\\n            while (node != null) {\\n                if (node.listenerType === ATTRIBUTE) {\\n                    return node.listener\\n                }\\n                node = node.next;\\n            }\\n            return null\\n        },\\n\\n        set(listener) {\\n            if (typeof listener !== \\\"function\\\" && !isObject(listener)) {\\n                listener = null; // eslint-disable-line no-param-reassign\\n            }\\n            const listeners = getListeners(this);\\n\\n            // Traverse to the tail while removing old value.\\n            let prev = null;\\n            let node = listeners.get(eventName);\\n            while (node != null) {\\n                if (node.listenerType === ATTRIBUTE) {\\n                    // Remove old value.\\n                    if (prev !== null) {\\n                        prev.next = node.next;\\n                    } else if (node.next !== null) {\\n                        listeners.set(eventName, node.next);\\n                    } else {\\n                        listeners.delete(eventName);\\n                    }\\n                } else {\\n                    prev = node;\\n                }\\n\\n                node = node.next;\\n            }\\n\\n            // Add new value.\\n            if (listener !== null) {\\n                const newNode = {\\n                    listener,\\n                    listenerType: ATTRIBUTE,\\n                    passive: false,\\n                    once: false,\\n                    next: null,\\n                };\\n                if (prev === null) {\\n                    listeners.set(eventName, newNode);\\n                } else {\\n                    prev.next = newNode;\\n                }\\n            }\\n        },\\n        configurable: true,\\n        enumerable: true,\\n    }\\n}\\n\\n/**\\n * Define an event attribute (e.g. `eventTarget.onclick`).\\n * @param {Object} eventTargetPrototype The event target prototype to define an event attrbite.\\n * @param {string} eventName The event name to define.\\n * @returns {void}\\n */\\nfunction defineEventAttribute(eventTargetPrototype, eventName) {\\n    Object.defineProperty(\\n        eventTargetPrototype,\\n        `on${eventName}`,\\n        defineEventAttributeDescriptor(eventName)\\n    );\\n}\\n\\n/**\\n * Define a custom EventTarget with event attributes.\\n * @param {string[]} eventNames Event names for event attributes.\\n * @returns {EventTarget} The custom EventTarget.\\n * @private\\n */\\nfunction defineCustomEventTarget(eventNames) {\\n    /** CustomEventTarget */\\n    function CustomEventTarget() {\\n        EventTarget.call(this);\\n    }\\n\\n    CustomEventTarget.prototype = Object.create(EventTarget.prototype, {\\n        constructor: {\\n            value: CustomEventTarget,\\n            configurable: true,\\n            writable: true,\\n        },\\n    });\\n\\n    for (let i = 0; i < eventNames.length; ++i) {\\n        defineEventAttribute(CustomEventTarget.prototype, eventNames[i]);\\n    }\\n\\n    return CustomEventTarget\\n}\\n\\n/**\\n * EventTarget.\\n *\\n * - This is constructor if no arguments.\\n * - This is a function which returns a CustomEventTarget constructor if there are arguments.\\n *\\n * For example:\\n *\\n *     class A extends EventTarget {}\\n *     class B extends EventTarget(\\\"message\\\") {}\\n *     class C extends EventTarget(\\\"message\\\", \\\"error\\\") {}\\n *     class D extends EventTarget([\\\"message\\\", \\\"error\\\"]) {}\\n */\\nfunction EventTarget() {\\n    /*eslint-disable consistent-return */\\n    if (this instanceof EventTarget) {\\n        listenersMap.set(this, new Map());\\n        return\\n    }\\n    if (arguments.length === 1 && Array.isArray(arguments[0])) {\\n        return defineCustomEventTarget(arguments[0])\\n    }\\n    if (arguments.length > 0) {\\n        const types = new Array(arguments.length);\\n        for (let i = 0; i < arguments.length; ++i) {\\n            types[i] = arguments[i];\\n        }\\n        return defineCustomEventTarget(types)\\n    }\\n    throw new TypeError(\\\"Cannot call a class as a function\\\")\\n    /*eslint-enable consistent-return */\\n}\\n\\n// Should be enumerable, but class methods are not enumerable.\\nEventTarget.prototype = {\\n    /**\\n     * Add a given listener to this event target.\\n     * @param {string} eventName The event name to add.\\n     * @param {Function} listener The listener to add.\\n     * @param {boolean|{capture?:boolean,passive?:boolean,once?:boolean}} [options] The options for this listener.\\n     * @returns {void}\\n     */\\n    addEventListener(eventName, listener, options) {\\n        if (listener == null) {\\n            return\\n        }\\n        if (typeof listener !== \\\"function\\\" && !isObject(listener)) {\\n            throw new TypeError(\\\"'listener' should be a function or an object.\\\")\\n        }\\n\\n        const listeners = getListeners(this);\\n        const optionsIsObj = isObject(options);\\n        const capture = optionsIsObj\\n            ? Boolean(options.capture)\\n            : Boolean(options);\\n        const listenerType = capture ? CAPTURE : BUBBLE;\\n        const newNode = {\\n            listener,\\n            listenerType,\\n            passive: optionsIsObj && Boolean(options.passive),\\n            once: optionsIsObj && Boolean(options.once),\\n            next: null,\\n        };\\n\\n        // Set it as the first node if the first node is null.\\n        let node = listeners.get(eventName);\\n        if (node === undefined) {\\n            listeners.set(eventName, newNode);\\n            return\\n        }\\n\\n        // Traverse to the tail while checking duplication..\\n        let prev = null;\\n        while (node != null) {\\n            if (\\n                node.listener === listener &&\\n                node.listenerType === listenerType\\n            ) {\\n                // Should ignore duplication.\\n                return\\n            }\\n            prev = node;\\n            node = node.next;\\n        }\\n\\n        // Add it.\\n        prev.next = newNode;\\n    },\\n\\n    /**\\n     * Remove a given listener from this event target.\\n     * @param {string} eventName The event name to remove.\\n     * @param {Function} listener The listener to remove.\\n     * @param {boolean|{capture?:boolean,passive?:boolean,once?:boolean}} [options] The options for this listener.\\n     * @returns {void}\\n     */\\n    removeEventListener(eventName, listener, options) {\\n        if (listener == null) {\\n            return\\n        }\\n\\n        const listeners = getListeners(this);\\n        const capture = isObject(options)\\n            ? Boolean(options.capture)\\n            : Boolean(options);\\n        const listenerType = capture ? CAPTURE : BUBBLE;\\n\\n        let prev = null;\\n        let node = listeners.get(eventName);\\n        while (node != null) {\\n            if (\\n                node.listener === listener &&\\n                node.listenerType === listenerType\\n            ) {\\n                if (prev !== null) {\\n                    prev.next = node.next;\\n                } else if (node.next !== null) {\\n                    listeners.set(eventName, node.next);\\n                } else {\\n                    listeners.delete(eventName);\\n                }\\n                return\\n            }\\n\\n            prev = node;\\n            node = node.next;\\n        }\\n    },\\n\\n    /**\\n     * Dispatch a given event.\\n     * @param {Event|{type:string}} event The event to dispatch.\\n     * @returns {boolean} `false` if canceled.\\n     */\\n    dispatchEvent(event) {\\n        if (event == null || typeof event.type !== \\\"string\\\") {\\n            throw new TypeError('\\\"event.type\\\" should be a string.')\\n        }\\n\\n        // If listeners aren't registered, terminate.\\n        const listeners = getListeners(this);\\n        const eventName = event.type;\\n        let node = listeners.get(eventName);\\n        if (node == null) {\\n            return true\\n        }\\n\\n        // Since we cannot rewrite several properties, so wrap object.\\n        const wrappedEvent = wrapEvent(this, event);\\n\\n        // This doesn't process capturing phase and bubbling phase.\\n        // This isn't participating in a tree.\\n        let prev = null;\\n        while (node != null) {\\n            // Remove this listener if it's once\\n            if (node.once) {\\n                if (prev !== null) {\\n                    prev.next = node.next;\\n                } else if (node.next !== null) {\\n                    listeners.set(eventName, node.next);\\n                } else {\\n                    listeners.delete(eventName);\\n                }\\n            } else {\\n                prev = node;\\n            }\\n\\n            // Call this listener\\n            setPassiveListener(\\n                wrappedEvent,\\n                node.passive ? node.listener : null\\n            );\\n            if (typeof node.listener === \\\"function\\\") {\\n                try {\\n                    node.listener.call(this, wrappedEvent);\\n                } catch (err) {\\n                    if (\\n                        typeof console !== \\\"undefined\\\" &&\\n                        typeof console.error === \\\"function\\\"\\n                    ) {\\n                        console.error(err);\\n                    }\\n                }\\n            } else if (\\n                node.listenerType !== ATTRIBUTE &&\\n                typeof node.listener.handleEvent === \\\"function\\\"\\n            ) {\\n                node.listener.handleEvent(wrappedEvent);\\n            }\\n\\n            // Break if `event.stopImmediatePropagation` was called.\\n            if (isStopped(wrappedEvent)) {\\n                break\\n            }\\n\\n            node = node.next;\\n        }\\n        setPassiveListener(wrappedEvent, null);\\n        setEventPhase(wrappedEvent, 0);\\n        setCurrentTarget(wrappedEvent, null);\\n\\n        return !wrappedEvent.defaultPrevented\\n    },\\n};\\n\\n// `constructor` is not enumerable.\\nObject.defineProperty(EventTarget.prototype, \\\"constructor\\\", {\\n    value: EventTarget,\\n    configurable: true,\\n    writable: true,\\n});\\n\\n// Ensure `eventTarget instanceof window.EventTarget` is `true`.\\nif (\\n    typeof window !== \\\"undefined\\\" &&\\n    typeof window.EventTarget !== \\\"undefined\\\"\\n) {\\n    Object.setPrototypeOf(EventTarget.prototype, window.EventTarget.prototype);\\n}\\n\\nexport default EventTarget;\\nexport { defineEventAttribute, EventTarget };\\n//# sourceMappingURL=event-target-shim.mjs.map\\n\",\"import {\\n    // Event,\\n    EventTarget,\\n    // Type,\\n    defineEventAttribute,\\n} from \\\"event-target-shim\\\"\\n\\n// Known Limitation\\n//   Use `any` because the type of `AbortSignal` in `lib.dom.d.ts` is wrong and\\n//   to make assignable our `AbortSignal` into that.\\n//   https://github.com/Microsoft/TSJS-lib-generator/pull/623\\ntype Events = {\\n    abort: any // Event & Type<\\\"abort\\\">\\n}\\ntype EventAttributes = {\\n    onabort: any // Event & Type<\\\"abort\\\">\\n}\\n\\n/**\\n * The signal class.\\n * @see https://dom.spec.whatwg.org/#abortsignal\\n */\\nexport default class AbortSignal extends EventTarget<Events, EventAttributes> {\\n    /**\\n     * AbortSignal cannot be constructed directly.\\n     */\\n    public constructor() {\\n        super()\\n        throw new TypeError(\\\"AbortSignal cannot be constructed directly\\\")\\n    }\\n\\n    /**\\n     * Returns `true` if this `AbortSignal`'s `AbortController` has signaled to abort, and `false` otherwise.\\n     */\\n    public get aborted(): boolean {\\n        const aborted = abortedFlags.get(this)\\n        if (typeof aborted !== \\\"boolean\\\") {\\n            throw new TypeError(\\n                `Expected 'this' to be an 'AbortSignal' object, but got ${\\n                    this === null ? \\\"null\\\" : typeof this\\n                }`,\\n            )\\n        }\\n        return aborted\\n    }\\n}\\ndefineEventAttribute(AbortSignal.prototype, \\\"abort\\\")\\n\\n/**\\n * Create an AbortSignal object.\\n */\\nexport function createAbortSignal(): AbortSignal {\\n    const signal = Object.create(AbortSignal.prototype)\\n    EventTarget.call(signal)\\n    abortedFlags.set(signal, false)\\n    return signal\\n}\\n\\n/**\\n * Abort a given signal.\\n */\\nexport function abortSignal(signal: AbortSignal): void {\\n    if (abortedFlags.get(signal) !== false) {\\n        return\\n    }\\n\\n    abortedFlags.set(signal, true)\\n    signal.dispatchEvent<\\\"abort\\\">({ type: \\\"abort\\\" })\\n}\\n\\n/**\\n * Aborted flag for each instances.\\n */\\nconst abortedFlags = new WeakMap<AbortSignal, boolean>()\\n\\n// Properties should be enumerable.\\nObject.defineProperties(AbortSignal.prototype, {\\n    aborted: { enumerable: true },\\n})\\n\\n// `toString()` should return `\\\"[object AbortSignal]\\\"`\\nif (typeof Symbol === \\\"function\\\" && typeof Symbol.toStringTag === \\\"symbol\\\") {\\n    Object.defineProperty(AbortSignal.prototype, Symbol.toStringTag, {\\n        configurable: true,\\n        value: \\\"AbortSignal\\\",\\n    })\\n}\\n\",\"import AbortSignal, { abortSignal, createAbortSignal } from \\\"./abort-signal\\\"\\n\\n/**\\n * The AbortController.\\n * @see https://dom.spec.whatwg.org/#abortcontroller\\n */\\nexport default class AbortController {\\n    /**\\n     * Initialize this controller.\\n     */\\n    public constructor() {\\n        signals.set(this, createAbortSignal())\\n    }\\n\\n    /**\\n     * Returns the `AbortSignal` object associated with this object.\\n     */\\n    public get signal(): AbortSignal {\\n        return getSignal(this)\\n    }\\n\\n    /**\\n     * Abort and signal to any observers that the associated activity is to be aborted.\\n     */\\n    public abort(): void {\\n        abortSignal(getSignal(this))\\n    }\\n}\\n\\n/**\\n * Associated signals.\\n */\\nconst signals = new WeakMap<AbortController, AbortSignal>()\\n\\n/**\\n * Get the associated signal of a given controller.\\n */\\nfunction getSignal(controller: AbortController): AbortSignal {\\n    const signal = signals.get(controller)\\n    if (signal == null) {\\n        throw new TypeError(\\n            `Expected 'this' to be an 'AbortController' object, but got ${\\n                controller === null ? \\\"null\\\" : typeof controller\\n            }`,\\n        )\\n    }\\n    return signal\\n}\\n\\n// Properties should be enumerable.\\nObject.defineProperties(AbortController.prototype, {\\n    signal: { enumerable: true },\\n    abort: { enumerable: true },\\n})\\n\\nif (typeof Symbol === \\\"function\\\" && typeof Symbol.toStringTag === \\\"symbol\\\") {\\n    Object.defineProperty(AbortController.prototype, Symbol.toStringTag, {\\n        configurable: true,\\n        value: \\\"AbortController\\\",\\n    })\\n}\\n\\nexport { AbortController, AbortSignal }\\n\"],\"names\":[\"pd\",\"event\",\"retv\",\"privateData\",\"get\",\"console\",\"assert\",\"setCancelFlag\",\"data\",\"passiveListener\",\"cancelable\",\"canceled\",\"preventDefault\",\"error\",\"Event\",\"eventTarget\",\"set\",\"eventPhase\",\"currentTarget\",\"stopped\",\"immediateStopped\",\"timeStamp\",\"Date\",\"now\",\"Object\",\"defineProperty\",\"value\",\"enumerable\",\"key\",\"keys\",\"i\",\"length\",\"defineRedirectDescriptor\",\"configurable\",\"defineCallDescriptor\",\"apply\",\"arguments\",\"defineWrapper\",\"BaseEvent\",\"proto\",\"CustomEvent\",\"call\",\"prototype\",\"create\",\"constructor\",\"writable\",\"descriptor\",\"getOwnPropertyDescriptor\",\"isFunc\",\"getWrapper\",\"wrapper\",\"wrappers\",\"getPrototypeOf\",\"wrapEvent\",\"Wrapper\",\"isStopped\",\"setEventPhase\",\"setCurrentTarget\",\"setPassiveListener\",\"createAbortSignal\",\"signal\",\"AbortSignal\",\"EventTarget\",\"abortedFlags\",\"abortSignal\",\"dispatchEvent\",\"type\",\"getSignal\",\"controller\",\"signals\",\"TypeError\",\"WeakMap\",\"target\",\"composedPath\",\"NONE\",\"CAPTURING_PHASE\",\"AT_TARGET\",\"BUBBLING_PHASE\",\"stopPropagation\",\"stopImmediatePropagation\",\"bubbles\",\"defaultPrevented\",\"composed\",\"srcElement\",\"cancelBubble\",\"returnValue\",\"initEvent\",\"window\",\"setPrototypeOf\",\"aborted\",\"defineEventAttribute\",\"defineProperties\",\"Symbol\",\"_typeof\",\"toStringTag\",\"AbortController\",\"abort\"],\"mappings\":\";;;+3CAkCA,QAASA,CAAAA,CAAT,CAAYC,CAAZ,CAAmB,IACTC,CAAAA,CAAI,CAAGC,CAAW,CAACC,GAAZ,CAAgBH,CAAhB,QACbI,CAAAA,OAAO,CAACC,MAAR,CACY,IAAR,EAAAJ,CADJ,CAEI,6CAFJ,CAGID,CAHJ,EAKOC,EAOX,QAASK,CAAAA,CAAT,CAAuBC,CAAvB,CAA6B,OACG,KAAxB,EAAAA,CAAI,CAACC,eADgB,MAarB,CAACD,CAAI,CAACP,KAAL,CAAWS,UAbS,GAiBzBF,CAAI,CAACG,QAAL,GAjByB,CAkBgB,UAArC,QAAOH,CAAAA,CAAI,CAACP,KAAL,CAAWW,cAlBG,EAmBrBJ,CAAI,CAACP,KAAL,CAAWW,cAAX,EAnBqB,QAGE,WAAnB,QAAOP,CAAAA,OAAP,EACyB,UAAzB,QAAOA,CAAAA,OAAO,CAACQ,KAJE,EAMjBR,OAAO,CAACQ,KAAR,CACI,oEADJ,CAEIL,CAAI,CAACC,eAFT,CANiB,EAiC7B,QAASK,CAAAA,CAAT,CAAeC,CAAf,CAA4Bd,CAA5B,CAAmC,CAC/BE,CAAW,CAACa,GAAZ,CAAgB,IAAhB,CAAsB,CAClBD,WAAW,CAAXA,CADkB,CAElBd,KAAK,CAALA,CAFkB,CAGlBgB,UAAU,CAAE,CAHM,CAIlBC,aAAa,CAAEH,CAJG,CAKlBJ,QAAQ,GALU,CAMlBQ,OAAO,GANW,CAOlBC,gBAAgB,GAPE,CAQlBX,eAAe,CAAE,IARC,CASlBY,SAAS,CAAEpB,CAAK,CAACoB,SAAN,EAAmBC,IAAI,CAACC,GAAL,EATZ,CAAtB,CAD+B,CAc/BC,MAAM,CAACC,cAAP,CAAsB,IAAtB,CAA4B,WAA5B,CAAyC,CAAEC,KAAK,GAAP,CAAgBC,UAAU,GAA1B,CAAzC,CAd+B,QAmBrBC,CAAAA,EAFJC,CAAI,CAAGL,MAAM,CAACK,IAAP,CAAY5B,CAAZ,EACJ6B,CAAC,CAAG,EAAGA,CAAC,CAAGD,CAAI,CAACE,OAAQ,EAAED,EACzBF,EAAMC,CAAI,CAACC,CAAD,EACVF,CAAG,GAAI,OACTJ,MAAM,CAACC,cAAP,CAAsB,IAAtB,CAA4BG,CAA5B,CAAiCI,CAAwB,CAACJ,CAAD,CAAzD,EAyOZ,QAASI,CAAAA,CAAT,CAAkCJ,CAAlC,CAAuC,OAC5B,CACHxB,GADG,WACG,OACKJ,CAAAA,CAAE,CAAC,IAAD,CAAF,CAASC,KAAT,CAAe2B,CAAf,CAFR,CAAA,CAIHZ,GAJG,UAICU,EAAO,CACP1B,CAAE,CAAC,IAAD,CAAF,CAASC,KAAT,CAAe2B,CAAf,EAAsBF,CALvB,CAAA,CAOHO,YAAY,GAPT,CAQHN,UAAU,GARP,EAkBX,QAASO,CAAAA,CAAT,CAA8BN,CAA9B,CAAmC,OACxB,CACHF,KADG,WACK,IACEzB,CAAAA,CAAK,CAAGD,CAAE,CAAC,IAAD,CAAF,CAASC,YAChBA,CAAAA,CAAK,CAAC2B,CAAD,CAAL,CAAWO,KAAX,CAAiBlC,CAAjB,CAAwBmC,SAAxB,CAHR,CAAA,CAKHH,YAAY,GALT,CAMHN,UAAU,GANP,EAiBX,QAASU,CAAAA,CAAT,CAAuBC,CAAvB,CAAkCC,CAAlC,CAAyC,SAO5BC,CAAAA,EAAYzB,EAAad,EAAO,CACrCqC,CAAS,CAACG,IAAV,CAAe,IAAf,CAAqB1B,CAArB,CAAkCd,CAAlC,KAPE4B,CAAAA,CAAI,CAAGL,MAAM,CAACK,IAAP,CAAYU,CAAZ,KACO,CAAhB,GAAAV,CAAI,CAACE,aACEO,CAAAA,EAQXE,CAAW,CAACE,SAAZ,CAAwBlB,MAAM,CAACmB,MAAP,CAAcL,CAAS,CAACI,SAAxB,CAAmC,CACvDE,WAAW,CAAE,CAAElB,KAAK,CAAEc,CAAT,CAAsBP,YAAY,GAAlC,CAA0CY,QAAQ,GAAlD,CAD0C,CAAnC,CAXa,KAgBhC,GACKjB,CAAAA,CADL,CAAIE,CAAC,CAAG,EAAGA,CAAC,CAAGD,CAAI,CAACE,OAAQ,EAAED,KACzBF,EAAMC,CAAI,CAACC,CAAD,EACZ,EAAEF,CAAG,GAAIU,CAAAA,CAAS,CAACI,SAAnB,EAA+B,IACzBI,CAAAA,CAAU,CAAGtB,MAAM,CAACuB,wBAAP,CAAgCR,CAAhC,CAAuCX,CAAvC,CADY,CAEzBoB,CAAM,CAA+B,UAA5B,QAAOF,CAAAA,CAAU,CAACpB,KAFF,CAG/BF,MAAM,CAACC,cAAP,CACIe,CAAW,CAACE,SADhB,CAEId,CAFJ,CAGIoB,CAAM,CACAd,CAAoB,CAACN,CAAD,CADpB,CAEAI,CAAwB,CAACJ,CAAD,CALlC,QAUDY,CAAAA,EASX,QAASS,CAAAA,CAAT,CAAoBV,CAApB,CAA2B,IACV,IAAT,EAAAA,CAAK,EAAYA,CAAK,GAAKf,MAAM,CAACkB,gBAC3B5B,CAAAA,KAGPoC,CAAAA,CAAO,CAAGC,CAAQ,CAAC/C,GAAT,CAAamC,CAAb,QACC,KAAX,EAAAW,IACAA,CAAO,CAAGb,CAAa,CAACY,CAAU,CAACzB,MAAM,CAAC4B,cAAP,CAAsBb,CAAtB,CAAD,CAAX,CAA2CA,CAA3C,EACvBY,CAAQ,CAACnC,GAAT,CAAauB,CAAb,CAAoBW,CAApB,GAEGA,EAUJ,QAASG,CAAAA,CAAT,CAAmBtC,CAAnB,CAAgCd,CAAhC,CAAuC,IACpCqD,CAAAA,CAAO,CAAGL,CAAU,CAACzB,MAAM,CAAC4B,cAAP,CAAsBnD,CAAtB,CAAD,QACnB,IAAIqD,CAAAA,CAAJ,CAAYvC,CAAZ,CAAyBd,CAAzB,EASJ,QAASsD,CAAAA,CAAT,CAAmBtD,CAAnB,CAA0B,OACtBD,CAAAA,CAAE,CAACC,CAAD,CAAF,CAAUmB,iBAUd,QAASoC,CAAAA,CAAT,CAAuBvD,CAAvB,CAA8BgB,CAA9B,CAA0C,CAC7CjB,CAAE,CAACC,CAAD,CAAF,CAAUgB,UAAV,CAAuBA,EAUpB,QAASwC,CAAAA,CAAT,CAA0BxD,CAA1B,CAAiCiB,CAAjC,CAAgD,CACnDlB,CAAE,CAACC,CAAD,CAAF,CAAUiB,aAAV,CAA0BA,EAUvB,QAASwC,CAAAA,CAAT,CAA4BzD,CAA5B,CAAmCQ,CAAnC,CAAoD,CACvDT,CAAE,CAACC,CAAD,CAAF,CAAUQ,eAAV,CAA4BA,ysCC1ahBkD,CAAAA,OACNC,CAAAA,CAAM,CAAGpC,MAAM,CAACmB,MAAPnB,CAAcqC,CAAW,CAACnB,SAA1BlB,QACfsC,CAAAA,CAAW,CAACrB,IAAZqB,CAAiBF,CAAjBE,EACAC,CAAY,CAAC/C,GAAb+C,CAAiBH,CAAjBG,KACOH,UAMKI,CAAAA,EAAYJ,GACpBG,KAAAA,CAAY,CAAC3D,GAAb2D,CAAiBH,CAAjBG,IAIJA,CAAY,CAAC/C,GAAb+C,CAAiBH,CAAjBG,KACAH,CAAM,CAACK,aAAPL,CAA8B,CAAEM,IAAI,CAAE,OAAR,CAA9BN,GC9BJ,QAASO,CAAAA,CAAT,CAAmBC,CAAnB,KACUR,CAAAA,CAAM,CAAGS,CAAO,CAACjE,GAARiE,CAAYD,CAAZC,KACD,IAAVT,EAAAA,OACM,IAAIU,CAAAA,SAAJ,sEAEiB,IAAfF,GAAAA,CAAU,CAAY,MAAZ,GAA4BA,GAFxC,QAMHR,CAAAA,KF3BLzD,CAAAA,CAAW,CAAG,GAAIoE,CAAAA,QAOlBpB,CAAQ,CAAG,GAAIoB,CAAAA,QAkFrBzD,CAAK,CAAC4B,SAAN,CAAkB,IAKVwB,CAAAA,MAAO,OACAlE,CAAAA,CAAE,CAAC,IAAD,CAAF,CAASC,KAAT,CAAeiE,IANZ,CAAA,IAaVM,CAAAA,QAAS,OACFxE,CAAAA,CAAE,CAAC,IAAD,CAAF,CAASe,WAdN,CAAA,IAqBVG,CAAAA,eAAgB,OACTlB,CAAAA,CAAE,CAAC,IAAD,CAAF,CAASkB,aAtBN,CAAA,CA4BduD,YA5Bc,WA4BC,IACLvD,CAAAA,CAAa,CAAGlB,CAAE,CAAC,IAAD,CAAF,CAASkB,cADpB,MAEU,KAAjB,EAAAA,CAFO,CAGA,EAHA,CAKJ,CAACA,CAAD,CAjCG,CAAA,IAwCVwD,CAAAA,MAAO,OACA,EAzCG,CAAA,IAgDVC,CAAAA,iBAAkB,OACX,EAjDG,CAAA,IAwDVC,CAAAA,WAAY,OACL,EAzDG,CAAA,IAgEVC,CAAAA,gBAAiB,OACV,EAjEG,CAAA,IAwEV5D,CAAAA,YAAa,OACNjB,CAAAA,CAAE,CAAC,IAAD,CAAF,CAASiB,UAzEN,CAAA,CAgFd6D,eAhFc,WAgFI,IACRtE,CAAAA,CAAI,CAAGR,CAAE,CAAC,IAAD,EAEfQ,CAAI,CAACW,OAAL,GAHc,CAI4B,UAAtC,QAAOX,CAAAA,CAAI,CAACP,KAAL,CAAW6E,eAJR,EAKVtE,CAAI,CAACP,KAAL,CAAW6E,eAAX,EArFM,CAAA,CA6FdC,wBA7Fc,WA6Fa,IACjBvE,CAAAA,CAAI,CAAGR,CAAE,CAAC,IAAD,EAEfQ,CAAI,CAACW,OAAL,GAHuB,CAIvBX,CAAI,CAACY,gBAAL,GAJuB,CAK4B,UAA/C,QAAOZ,CAAAA,CAAI,CAACP,KAAL,CAAW8E,wBALC,EAMnBvE,CAAI,CAACP,KAAL,CAAW8E,wBAAX,EAnGM,CAAA,IA2GVC,CAAAA,SAAU,SACKhF,CAAE,CAAC,IAAD,CAAF,CAASC,KAAT,CAAe+E,OA5GpB,CAAA,IAmHVtE,CAAAA,YAAa,SACEV,CAAE,CAAC,IAAD,CAAF,CAASC,KAAT,CAAeS,UApHpB,CAAA,CA2HdE,cA3Hc,WA2HG,CACbL,CAAa,CAACP,CAAE,CAAC,IAAD,CAAH,CA5HH,CAAA,IAmIViF,CAAAA,kBAAmB,OACZjF,CAAAA,CAAE,CAAC,IAAD,CAAF,CAASW,QApIN,CAAA,IA2IVuE,CAAAA,UAAW,SACIlF,CAAE,CAAC,IAAD,CAAF,CAASC,KAAT,CAAeiF,QA5IpB,CAAA,IAmJV7D,CAAAA,WAAY,OACLrB,CAAAA,CAAE,CAAC,IAAD,CAAF,CAASqB,SApJN,CAAA,IA4JV8D,CAAAA,YAAa,OACNnF,CAAAA,CAAE,CAAC,IAAD,CAAF,CAASe,WA7JN,CAAA,IAqKVqE,CAAAA,cAAe,OACRpF,CAAAA,CAAE,CAAC,IAAD,CAAF,CAASmB,OAtKN,CAAA,IAwKViE,CAAAA,aAAa1D,EAAO,IACfA,MAGClB,CAAAA,CAAI,CAAGR,CAAE,CAAC,IAAD,EAEfQ,CAAI,CAACW,OAAL,IACuC,SAAnC,QAAOX,CAAAA,CAAI,CAACP,KAAL,CAAWmF,eAClB5E,CAAI,CAACP,KAAL,CAAWmF,YAAX,KAhLM,CAAA,IAyLVC,CAAAA,aAAc,OACP,CAACrF,CAAE,CAAC,IAAD,CAAF,CAASW,QA1LP,CAAA,IA4LV0E,CAAAA,YAAY3D,EAAO,CACdA,CADc,EAEfnB,CAAa,CAACP,CAAE,CAAC,IAAD,CAAH,CA9LP,CAAA,CAyMdsF,SAzMc,WAyMF,EAzME,EA+MlB9D,MAAM,CAACC,cAAP,CAAsBX,CAAK,CAAC4B,SAA5B,CAAuC,aAAvC,CAAsD,CAClDhB,KAAK,CAAEZ,CAD2C,CAElDmB,YAAY,GAFsC,CAGlDY,QAAQ,GAH0C,CAAtD,EAOsB,WAAlB,QAAO0C,CAAAA,MAAP,EAAyD,WAAxB,QAAOA,CAAAA,MAAM,CAACzE,QAC/CU,MAAM,CAACgE,cAAP,CAAsB1E,CAAK,CAAC4B,SAA5B,CAAuC6C,MAAM,CAACzE,KAAP,CAAa4B,SAApD,EAGAS,CAAQ,CAACnC,GAAT,CAAauE,MAAM,CAACzE,KAAP,CAAa4B,SAA1B,CAAqC5B,CAArC,wiDChTiB+C,CAAAA,2EAMP,GAAIS,CAAAA,SAAJ,CAAc,4CAAd,sDAOAmB,CAAAA,CAAO,CAAG1B,CAAY,CAAC3D,GAAb2D,CAAiB,IAAjBA,KACO,SAAnB,QAAO0B,CAAAA,OACD,IAAInB,CAAAA,SAAJ,kEAEW,IAAT,QAAgB,MAAhB,GAAgC,MAFlC,QAMHmB,CAAAA,SArB0B3B,GAwBzC4B,CAAoB,CAAC7B,CAAW,CAACnB,SAAb,CAAwB,OAAxB,EA2BpB,GAAMqB,CAAAA,CAAY,CAAG,GAAIQ,CAAAA,OAAzB,CAGA/C,MAAM,CAACmE,gBAAPnE,CAAwBqC,CAAW,CAACnB,SAApClB,CAA+C,CAC3CiE,OAAO,CAAE,CAAE9D,UAAU,GAAZ,CADkC,CAA/CH,EAKsB,UAAlB,QAAOoE,CAAAA,MAAP,EAA8D,QAA9B,GAAAC,EAAOD,MAAM,CAACE,cAC9CtE,MAAM,CAACC,cAAPD,CAAsBqC,CAAW,CAACnB,SAAlClB,CAA6CoE,MAAM,CAACE,WAApDtE,CAAiE,CAC7DS,YAAY,GADiD,CAE7DP,KAAK,CAAE,aAFsD,CAAjEF,KC5EiBuE,CAAAA,oCAKb1B,CAAO,CAACrD,GAARqD,CAAY,IAAZA,CAAkBV,CAAiB,EAAnCU,4CAcAL,CAAW,CAACG,CAAS,CAAC,IAAD,CAAV,uCAPJA,CAAAA,CAAS,CAAC,IAAD,WAclBE,CAAO,CAAG,GAAIE,CAAAA,WAkBpB/C,MAAM,CAACmE,gBAAPnE,CAAwBuE,CAAe,CAACrD,SAAxClB,CAAmD,CAC/CoC,MAAM,CAAE,CAAEjC,UAAU,GAAZ,CADuC,CAE/CqE,KAAK,CAAE,CAAErE,UAAU,GAAZ,CAFwC,CAAnDH,EAKsB,UAAlB,QAAOoE,CAAAA,MAAP,EAA8D,QAA9B,GAAAC,EAAOD,MAAM,CAACE,cAC9CtE,MAAM,CAACC,cAAPD,CAAsBuE,CAAe,CAACrD,SAAtClB,CAAiDoE,MAAM,CAACE,WAAxDtE,CAAqE,CACjES,YAAY,GADqD,CAEjEP,KAAK,CAAE,iBAF0D,CAArEF\"}/browser.mjs\u0001Q/*globals self, window */\n\n/*eslint-disable @mysticatea/prettier */\nconst { AbortController, AbortSignal } =\n    typeof self !== \"undefined\" ? self :\n    typeof window !== \"undefined\" ? window :\n    /* otherwise */ undefined\n/*eslint-enable @mysticatea/prettier */\n\nexport default AbortController\nexport { AbortController, AbortSignal }\n/polyfill.js\u0002./*globals require, self, window */\n\"use strict\"\n\nconst ac = require(\"./dist/abort-controller\")\n\n/*eslint-disable @mysticatea/prettier */\nconst g =\n    typeof self !== \"undefined\" ? self :\n    typeof window !== \"undefined\" ? window :\n    typeof global !== \"undefined\" ? global :\n    /* otherwise */ undefined\n/*eslint-enable @mysticatea/prettier */\n\nif (g) {\n    if (typeof g.AbortController === \"undefined\") {\n        g.AbortController = ac.AbortController\n    }\n    if (typeof g.AbortSignal === \"undefined\") {\n        g.AbortSignal = ac.AbortSignal\n    }\n}\n/dist/abort-controller.js.map\u0018{\"version\":3,\"file\":\"abort-controller.js\",\"sources\":[\"../src/abort-signal.ts\",\"../src/abort-controller.ts\"],\"sourcesContent\":[\"import {\\n    // Event,\\n    EventTarget,\\n    // Type,\\n    defineEventAttribute,\\n} from \\\"event-target-shim\\\"\\n\\n// Known Limitation\\n//   Use `any` because the type of `AbortSignal` in `lib.dom.d.ts` is wrong and\\n//   to make assignable our `AbortSignal` into that.\\n//   https://github.com/Microsoft/TSJS-lib-generator/pull/623\\ntype Events = {\\n    abort: any // Event & Type<\\\"abort\\\">\\n}\\ntype EventAttributes = {\\n    onabort: any // Event & Type<\\\"abort\\\">\\n}\\n\\n/**\\n * The signal class.\\n * @see https://dom.spec.whatwg.org/#abortsignal\\n */\\nexport default class AbortSignal extends EventTarget<Events, EventAttributes> {\\n    /**\\n     * AbortSignal cannot be constructed directly.\\n     */\\n    public constructor() {\\n        super()\\n        throw new TypeError(\\\"AbortSignal cannot be constructed directly\\\")\\n    }\\n\\n    /**\\n     * Returns `true` if this `AbortSignal`'s `AbortController` has signaled to abort, and `false` otherwise.\\n     */\\n    public get aborted(): boolean {\\n        const aborted = abortedFlags.get(this)\\n        if (typeof aborted !== \\\"boolean\\\") {\\n            throw new TypeError(\\n                `Expected 'this' to be an 'AbortSignal' object, but got ${\\n                    this === null ? \\\"null\\\" : typeof this\\n                }`,\\n            )\\n        }\\n        return aborted\\n    }\\n}\\ndefineEventAttribute(AbortSignal.prototype, \\\"abort\\\")\\n\\n/**\\n * Create an AbortSignal object.\\n */\\nexport function createAbortSignal(): AbortSignal {\\n    const signal = Object.create(AbortSignal.prototype)\\n    EventTarget.call(signal)\\n    abortedFlags.set(signal, false)\\n    return signal\\n}\\n\\n/**\\n * Abort a given signal.\\n */\\nexport function abortSignal(signal: AbortSignal): void {\\n    if (abortedFlags.get(signal) !== false) {\\n        return\\n    }\\n\\n    abortedFlags.set(signal, true)\\n    signal.dispatchEvent<\\\"abort\\\">({ type: \\\"abort\\\" })\\n}\\n\\n/**\\n * Aborted flag for each instances.\\n */\\nconst abortedFlags = new WeakMap<AbortSignal, boolean>()\\n\\n// Properties should be enumerable.\\nObject.defineProperties(AbortSignal.prototype, {\\n    aborted: { enumerable: true },\\n})\\n\\n// `toString()` should return `\\\"[object AbortSignal]\\\"`\\nif (typeof Symbol === \\\"function\\\" && typeof Symbol.toStringTag === \\\"symbol\\\") {\\n    Object.defineProperty(AbortSignal.prototype, Symbol.toStringTag, {\\n        configurable: true,\\n        value: \\\"AbortSignal\\\",\\n    })\\n}\\n\",\"import AbortSignal, { abortSignal, createAbortSignal } from \\\"./abort-signal\\\"\\n\\n/**\\n * The AbortController.\\n * @see https://dom.spec.whatwg.org/#abortcontroller\\n */\\nexport default class AbortController {\\n    /**\\n     * Initialize this controller.\\n     */\\n    public constructor() {\\n        signals.set(this, createAbortSignal())\\n    }\\n\\n    /**\\n     * Returns the `AbortSignal` object associated with this object.\\n     */\\n    public get signal(): AbortSignal {\\n        return getSignal(this)\\n    }\\n\\n    /**\\n     * Abort and signal to any observers that the associated activity is to be aborted.\\n     */\\n    public abort(): void {\\n        abortSignal(getSignal(this))\\n    }\\n}\\n\\n/**\\n * Associated signals.\\n */\\nconst signals = new WeakMap<AbortController, AbortSignal>()\\n\\n/**\\n * Get the associated signal of a given controller.\\n */\\nfunction getSignal(controller: AbortController): AbortSignal {\\n    const signal = signals.get(controller)\\n    if (signal == null) {\\n        throw new TypeError(\\n            `Expected 'this' to be an 'AbortController' object, but got ${\\n                controller === null ? \\\"null\\\" : typeof controller\\n            }`,\\n        )\\n    }\\n    return signal\\n}\\n\\n// Properties should be enumerable.\\nObject.defineProperties(AbortController.prototype, {\\n    signal: { enumerable: true },\\n    abort: { enumerable: true },\\n})\\n\\nif (typeof Symbol === \\\"function\\\" && typeof Symbol.toStringTag === \\\"symbol\\\") {\\n    Object.defineProperty(AbortController.prototype, Symbol.toStringTag, {\\n        configurable: true,\\n        value: \\\"AbortController\\\",\\n    })\\n}\\n\\nexport { AbortController, AbortSignal }\\n\"],\"names\":[\"EventTarget\",\"defineEventAttribute\"],\"mappings\":\"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\"}/dist/abort-controller.mjs.map\u0018{\"version\":3,\"file\":\"abort-controller.mjs\",\"sources\":[\"../src/abort-signal.ts\",\"../src/abort-controller.ts\"],\"sourcesContent\":[\"import {\\n    // Event,\\n    EventTarget,\\n    // Type,\\n    defineEventAttribute,\\n} from \\\"event-target-shim\\\"\\n\\n// Known Limitation\\n//   Use `any` because the type of `AbortSignal` in `lib.dom.d.ts` is wrong and\\n//   to make assignable our `AbortSignal` into that.\\n//   https://github.com/Microsoft/TSJS-lib-generator/pull/623\\ntype Events = {\\n    abort: any // Event & Type<\\\"abort\\\">\\n}\\ntype EventAttributes = {\\n    onabort: any // Event & Type<\\\"abort\\\">\\n}\\n\\n/**\\n * The signal class.\\n * @see https://dom.spec.whatwg.org/#abortsignal\\n */\\nexport default class AbortSignal extends EventTarget<Events, EventAttributes> {\\n    /**\\n     * AbortSignal cannot be constructed directly.\\n     */\\n    public constructor() {\\n        super()\\n        throw new TypeError(\\\"AbortSignal cannot be constructed directly\\\")\\n    }\\n\\n    /**\\n     * Returns `true` if this `AbortSignal`'s `AbortController` has signaled to abort, and `false` otherwise.\\n     */\\n    public get aborted(): boolean {\\n        const aborted = abortedFlags.get(this)\\n        if (typeof aborted !== \\\"boolean\\\") {\\n            throw new TypeError(\\n                `Expected 'this' to be an 'AbortSignal' object, but got ${\\n                    this === null ? \\\"null\\\" : typeof this\\n                }`,\\n            )\\n        }\\n        return aborted\\n    }\\n}\\ndefineEventAttribute(AbortSignal.prototype, \\\"abort\\\")\\n\\n/**\\n * Create an AbortSignal object.\\n */\\nexport function createAbortSignal(): AbortSignal {\\n    const signal = Object.create(AbortSignal.prototype)\\n    EventTarget.call(signal)\\n    abortedFlags.set(signal, false)\\n    return signal\\n}\\n\\n/**\\n * Abort a given signal.\\n */\\nexport function abortSignal(signal: AbortSignal): void {\\n    if (abortedFlags.get(signal) !== false) {\\n        return\\n    }\\n\\n    abortedFlags.set(signal, true)\\n    signal.dispatchEvent<\\\"abort\\\">({ type: \\\"abort\\\" })\\n}\\n\\n/**\\n * Aborted flag for each instances.\\n */\\nconst abortedFlags = new WeakMap<AbortSignal, boolean>()\\n\\n// Properties should be enumerable.\\nObject.defineProperties(AbortSignal.prototype, {\\n    aborted: { enumerable: true },\\n})\\n\\n// `toString()` should return `\\\"[object AbortSignal]\\\"`\\nif (typeof Symbol === \\\"function\\\" && typeof Symbol.toStringTag === \\\"symbol\\\") {\\n    Object.defineProperty(AbortSignal.prototype, Symbol.toStringTag, {\\n        configurable: true,\\n        value: \\\"AbortSignal\\\",\\n    })\\n}\\n\",\"import AbortSignal, { abortSignal, createAbortSignal } from \\\"./abort-signal\\\"\\n\\n/**\\n * The AbortController.\\n * @see https://dom.spec.whatwg.org/#abortcontroller\\n */\\nexport default class AbortController {\\n    /**\\n     * Initialize this controller.\\n     */\\n    public constructor() {\\n        signals.set(this, createAbortSignal())\\n    }\\n\\n    /**\\n     * Returns the `AbortSignal` object associated with this object.\\n     */\\n    public get signal(): AbortSignal {\\n        return getSignal(this)\\n    }\\n\\n    /**\\n     * Abort and signal to any observers that the associated activity is to be aborted.\\n     */\\n    public abort(): void {\\n        abortSignal(getSignal(this))\\n    }\\n}\\n\\n/**\\n * Associated signals.\\n */\\nconst signals = new WeakMap<AbortController, AbortSignal>()\\n\\n/**\\n * Get the associated signal of a given controller.\\n */\\nfunction getSignal(controller: AbortController): AbortSignal {\\n    const signal = signals.get(controller)\\n    if (signal == null) {\\n        throw new TypeError(\\n            `Expected 'this' to be an 'AbortController' object, but got ${\\n                controller === null ? \\\"null\\\" : typeof controller\\n            }`,\\n        )\\n    }\\n    return signal\\n}\\n\\n// Properties should be enumerable.\\nObject.defineProperties(AbortController.prototype, {\\n    signal: { enumerable: true },\\n    abort: { enumerable: true },\\n})\\n\\nif (typeof Symbol === \\\"function\\\" && typeof Symbol.toStringTag === \\\"symbol\\\") {\\n    Object.defineProperty(AbortController.prototype, Symbol.toStringTag, {\\n        configurable: true,\\n        value: \\\"AbortController\\\",\\n    })\\n}\\n\\nexport { AbortController, AbortSignal }\\n\"],\"names\":[],\"mappings\":\"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\"}/README.md\f# abort-controller\n\n[![npm version](https://img.shields.io/npm/v/abort-controller.svg)](https://www.npmjs.com/package/abort-controller)\n[![Downloads/month](https://img.shields.io/npm/dm/abort-controller.svg)](http://www.npmtrends.com/abort-controller)\n[![Build Status](https://travis-ci.org/mysticatea/abort-controller.svg?branch=master)](https://travis-ci.org/mysticatea/abort-controller)\n[![Coverage Status](https://codecov.io/gh/mysticatea/abort-controller/branch/master/graph/badge.svg)](https://codecov.io/gh/mysticatea/abort-controller)\n[![Dependency Status](https://david-dm.org/mysticatea/abort-controller.svg)](https://david-dm.org/mysticatea/abort-controller)\n\nAn implementation of [WHATWG AbortController interface](https://dom.spec.whatwg.org/#interface-abortcontroller).\n\n```js\nimport AbortController from \"abort-controller\"\n\nconst controller = new AbortController()\nconst signal = controller.signal\n\nsignal.addEventListener(\"abort\", () => {\n    console.log(\"aborted!\")\n})\n\ncontroller.abort()\n```\n\n> https://jsfiddle.net/1r2994qp/1/\n\n## 💿 Installation\n\nUse [npm](https://www.npmjs.com/) to install then use a bundler.\n\n```\nnpm install abort-controller\n```\n\nOr download from [`dist` directory](./dist).\n\n- [dist/abort-controller.mjs](dist/abort-controller.mjs) ... ES modules version.\n- [dist/abort-controller.js](dist/abort-controller.js) ... Common JS version.\n- [dist/abort-controller.umd.js](dist/abort-controller.umd.js) ... UMD (Universal Module Definition) version. This is transpiled by [Babel](https://babeljs.io/) for IE 11.\n\n## 📖 Usage\n\n### Basic\n\n```js\nimport AbortController from \"abort-controller\"\n// or\nconst AbortController = require(\"abort-controller\")\n\n// or UMD version defines a global variable:\nconst AbortController = window.AbortControllerShim\n```\n\nIf your bundler recognizes `browser` field of `package.json`, the imported `AbortController` is the native one and it doesn't contain shim (even if the native implementation was nothing).\nIf you wanted to polyfill `AbortController` for IE, use `abort-controller/polyfill`.\n\n### Polyfilling\n\nImporting `abort-controller/polyfill` assigns the `AbortController` shim to the `AbortController` global variable if the native implementation was nothing.\n\n```js\nimport \"abort-controller/polyfill\"\n// or\nrequire(\"abort-controller/polyfill\")\n```\n\n### API\n\n#### AbortController\n\n> https://dom.spec.whatwg.org/#interface-abortcontroller\n\n##### controller.signal\n\nThe [AbortSignal](https://dom.spec.whatwg.org/#interface-AbortSignal) object which is associated to this controller.\n\n##### controller.abort()\n\nNotify `abort` event to listeners that the `signal` has.\n\n## 📰 Changelog\n\n- See [GitHub releases](https://github.com/mysticatea/abort-controller/releases).\n\n## 🍻 Contributing\n\nContributing is welcome ❤️\n\nPlease use GitHub issues/PRs.\n\n### Development tools\n\n- `npm install` installs dependencies for development.\n- `npm test` runs tests and measures code coverage.\n- `npm run clean` removes temporary files of tests.\n- `npm run coverage` opens code coverage of the previous test with your default browser.\n- `npm run lint` runs ESLint.\n- `npm run build` generates `dist` codes.\n- `npm run watch` runs tests on each file change.\n/LICENSE\u0004/MIT License\n\nCopyright (c) 2017 Toru Nagashima\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n/package.json\u000bc{\n  \"name\": \"abort-controller\",\n  \"version\": \"3.0.0\",\n  \"description\": \"An implementation of WHATWG AbortController interface.\",\n  \"main\": \"dist/abort-controller\",\n  \"files\": [\n    \"dist\",\n    \"polyfill.*\",\n    \"browser.*\"\n  ],\n  \"engines\": {\n    \"node\": \">=6.5\"\n  },\n  \"dependencies\": {\n    \"event-target-shim\": \"^5.0.0\"\n  },\n  \"browser\": \"./browser.js\",\n  \"devDependencies\": {\n    \"@babel/core\": \"^7.2.2\",\n    \"@babel/plugin-transform-modules-commonjs\": \"^7.2.0\",\n    \"@babel/preset-env\": \"^7.3.0\",\n    \"@babel/register\": \"^7.0.0\",\n    \"@mysticatea/eslint-plugin\": \"^8.0.1\",\n    \"@mysticatea/spy\": \"^0.1.2\",\n    \"@types/mocha\": \"^5.2.5\",\n    \"@types/node\": \"^10.12.18\",\n    \"assert\": \"^1.4.1\",\n    \"codecov\": \"^3.1.0\",\n    \"dts-bundle-generator\": \"^2.0.0\",\n    \"eslint\": \"^5.12.1\",\n    \"karma\": \"^3.1.4\",\n    \"karma-chrome-launcher\": \"^2.2.0\",\n    \"karma-coverage\": \"^1.1.2\",\n    \"karma-firefox-launcher\": \"^1.1.0\",\n    \"karma-growl-reporter\": \"^1.0.0\",\n    \"karma-ie-launcher\": \"^1.0.0\",\n    \"karma-mocha\": \"^1.3.0\",\n    \"karma-rollup-preprocessor\": \"^7.0.0-rc.2\",\n    \"mocha\": \"^5.2.0\",\n    \"npm-run-all\": \"^4.1.5\",\n    \"nyc\": \"^13.1.0\",\n    \"opener\": \"^1.5.1\",\n    \"rimraf\": \"^2.6.3\",\n    \"rollup\": \"^1.1.2\",\n    \"rollup-plugin-babel\": \"^4.3.2\",\n    \"rollup-plugin-babel-minify\": \"^7.0.0\",\n    \"rollup-plugin-commonjs\": \"^9.2.0\",\n    \"rollup-plugin-node-resolve\": \"^4.0.0\",\n    \"rollup-plugin-sourcemaps\": \"^0.4.2\",\n    \"rollup-plugin-typescript\": \"^1.0.0\",\n    \"rollup-watch\": \"^4.3.1\",\n    \"ts-node\": \"^8.0.1\",\n    \"type-tester\": \"^1.0.0\",\n    \"typescript\": \"^3.2.4\"\n  },\n  \"scripts\": {\n    \"preversion\": \"npm test\",\n    \"version\": \"npm run -s build && git add dist/*\",\n    \"postversion\": \"git push && git push --tags\",\n    \"clean\": \"rimraf .nyc_output coverage\",\n    \"coverage\": \"opener coverage/lcov-report/index.html\",\n    \"lint\": \"eslint . --ext .ts\",\n    \"build\": \"run-s -s build:*\",\n    \"build:rollup\": \"rollup -c\",\n    \"build:dts\": \"dts-bundle-generator -o dist/abort-controller.d.ts src/abort-controller.ts && ts-node scripts/fix-dts\",\n    \"test\": \"run-s -s lint test:*\",\n    \"test:mocha\": \"nyc mocha test/*.ts\",\n    \"test:karma\": \"karma start --single-run\",\n    \"watch\": \"run-p -s watch:*\",\n    \"watch:mocha\": \"mocha test/*.ts --require ts-node/register --watch-extensions ts --watch --growl\",\n    \"watch:karma\": \"karma start --watch\",\n    \"codecov\": \"codecov\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/mysticatea/abort-controller.git\"\n  },\n  \"keywords\": [\n    \"w3c\",\n    \"whatwg\",\n    \"event\",\n    \"events\",\n    \"abort\",\n    \"cancel\",\n    \"abortcontroller\",\n    \"abortsignal\",\n    \"controller\",\n    \"signal\",\n    \"shim\"\n  ],\n  \"author\": \"Toru Nagashima (https://github.com/mysticatea)\",\n  \"license\": \"MIT\",\n  \"bugs\": {\n    \"url\": \"https://github.com/mysticatea/abort-controller/issues\"\n  },\n  \"homepage\": \"https://github.com/mysticatea/abort-controller#readme\"\n}\n/dist/abort-controller.d.ts\u0003import { EventTarget } from \"event-target-shim\"\n\ntype Events = {\n    abort: any\n}\ntype EventAttributes = {\n    onabort: any\n}\n/**\n * The signal class.\n * @see https://dom.spec.whatwg.org/#abortsignal\n */\ndeclare class AbortSignal extends EventTarget<Events, EventAttributes> {\n    /**\n     * AbortSignal cannot be constructed directly.\n     */\n    constructor()\n    /**\n     * Returns `true` if this `AbortSignal`\"s `AbortController` has signaled to abort, and `false` otherwise.\n     */\n    readonly aborted: boolean\n}\n/**\n * The AbortController.\n * @see https://dom.spec.whatwg.org/#abortcontroller\n */\ndeclare class AbortController {\n    /**\n     * Initialize this controller.\n     */\n    constructor()\n    /**\n     * Returns the `AbortSignal` object associated with this object.\n     */\n    readonly signal: AbortSignal\n    /**\n     * Abort and signal to any observers that the associated activity is to be aborted.\n     */\n    abort(): void\n}\n\nexport default AbortController\nexport { AbortController, AbortSignal }\n/dist/abort-controller.umd.js$2/**\n * @author Toru Nagashima <https://github.com/mysticatea>\n * See LICENSE file in root directory for full license.\n */(function(a,b){\"object\"==typeof exports&&\"undefined\"!=typeof module?b(exports):\"function\"==typeof define&&define.amd?define([\"exports\"],b):(a=a||self,b(a.AbortControllerShim={}))})(this,function(a){'use strict';function b(a){return b=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&\"function\"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?\"symbol\":typeof a},b(a)}function c(a,b){if(!(a instanceof b))throw new TypeError(\"Cannot call a class as a function\")}function d(a,b){for(var c,d=0;d<b.length;d++)c=b[d],c.enumerable=c.enumerable||!1,c.configurable=!0,\"value\"in c&&(c.writable=!0),Object.defineProperty(a,c.key,c)}function e(a,b,c){return b&&d(a.prototype,b),c&&d(a,c),a}function f(a,b){if(\"function\"!=typeof b&&null!==b)throw new TypeError(\"Super expression must either be null or a function\");a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,writable:!0,configurable:!0}}),b&&h(a,b)}function g(a){return g=Object.setPrototypeOf?Object.getPrototypeOf:function(a){return a.__proto__||Object.getPrototypeOf(a)},g(a)}function h(a,b){return h=Object.setPrototypeOf||function(a,b){return a.__proto__=b,a},h(a,b)}function i(a){if(void 0===a)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return a}function j(a,b){return b&&(\"object\"==typeof b||\"function\"==typeof b)?b:i(a)}function k(a){var b=F.get(a);return console.assert(null!=b,\"'this' is expected an Event object, but got\",a),b}function l(a){return null==a.passiveListener?void(!a.event.cancelable||(a.canceled=!0,\"function\"==typeof a.event.preventDefault&&a.event.preventDefault())):void(\"undefined\"!=typeof console&&\"function\"==typeof console.error&&console.error(\"Unable to preventDefault inside passive event listener invocation.\",a.passiveListener))}function m(a,b){F.set(this,{eventTarget:a,event:b,eventPhase:2,currentTarget:a,canceled:!1,stopped:!1,immediateStopped:!1,passiveListener:null,timeStamp:b.timeStamp||Date.now()}),Object.defineProperty(this,\"isTrusted\",{value:!1,enumerable:!0});for(var c,d=Object.keys(b),e=0;e<d.length;++e)c=d[e],c in this||Object.defineProperty(this,c,n(c))}function n(a){return{get:function(){return k(this).event[a]},set:function(b){k(this).event[a]=b},configurable:!0,enumerable:!0}}function o(a){return{value:function(){var b=k(this).event;return b[a].apply(b,arguments)},configurable:!0,enumerable:!0}}function p(a,b){function c(b,c){a.call(this,b,c)}var d=Object.keys(b);if(0===d.length)return a;c.prototype=Object.create(a.prototype,{constructor:{value:c,configurable:!0,writable:!0}});for(var e,f=0;f<d.length;++f)if(e=d[f],!(e in a.prototype)){var g=Object.getOwnPropertyDescriptor(b,e),h=\"function\"==typeof g.value;Object.defineProperty(c.prototype,e,h?o(e):n(e))}return c}function q(a){if(null==a||a===Object.prototype)return m;var b=G.get(a);return null==b&&(b=p(q(Object.getPrototypeOf(a)),a),G.set(a,b)),b}function r(a,b){var c=q(Object.getPrototypeOf(b));return new c(a,b)}function s(a){return k(a).immediateStopped}function t(a,b){k(a).eventPhase=b}function u(a,b){k(a).currentTarget=b}function v(a,b){k(a).passiveListener=b}function w(a){return null!==a&&\"object\"===b(a)}function x(a){var b=H.get(a);if(null==b)throw new TypeError(\"'this' is expected an EventTarget object, but got another value.\");return b}function y(a){return{get:function(){for(var b=x(this),c=b.get(a);null!=c;){if(3===c.listenerType)return c.listener;c=c.next}return null},set:function(b){\"function\"==typeof b||w(b)||(b=null);for(var c=x(this),d=null,e=c.get(a);null!=e;)3===e.listenerType?null===d?null===e.next?c.delete(a):c.set(a,e.next):d.next=e.next:d=e,e=e.next;if(null!==b){var f={listener:b,listenerType:3,passive:!1,once:!1,next:null};null===d?c.set(a,f):d.next=f}},configurable:!0,enumerable:!0}}function z(a,b){Object.defineProperty(a,\"on\".concat(b),y(b))}function A(a){function b(){B.call(this)}b.prototype=Object.create(B.prototype,{constructor:{value:b,configurable:!0,writable:!0}});for(var c=0;c<a.length;++c)z(b.prototype,a[c]);return b}function B(){if(this instanceof B)return void H.set(this,new Map);if(1===arguments.length&&Array.isArray(arguments[0]))return A(arguments[0]);if(0<arguments.length){for(var a=Array(arguments.length),b=0;b<arguments.length;++b)a[b]=arguments[b];return A(a)}throw new TypeError(\"Cannot call a class as a function\")}function C(){var a=Object.create(K.prototype);return B.call(a),L.set(a,!1),a}function D(a){!1!==L.get(a)||(L.set(a,!0),a.dispatchEvent({type:\"abort\"}))}function E(a){var c=N.get(a);if(null==c)throw new TypeError(\"Expected 'this' to be an 'AbortController' object, but got \".concat(null===a?\"null\":b(a)));return c}var F=new WeakMap,G=new WeakMap;m.prototype={get type(){return k(this).event.type},get target(){return k(this).eventTarget},get currentTarget(){return k(this).currentTarget},composedPath:function(){var a=k(this).currentTarget;return null==a?[]:[a]},get NONE(){return 0},get CAPTURING_PHASE(){return 1},get AT_TARGET(){return 2},get BUBBLING_PHASE(){return 3},get eventPhase(){return k(this).eventPhase},stopPropagation:function(){var a=k(this);a.stopped=!0,\"function\"==typeof a.event.stopPropagation&&a.event.stopPropagation()},stopImmediatePropagation:function(){var a=k(this);a.stopped=!0,a.immediateStopped=!0,\"function\"==typeof a.event.stopImmediatePropagation&&a.event.stopImmediatePropagation()},get bubbles(){return!!k(this).event.bubbles},get cancelable(){return!!k(this).event.cancelable},preventDefault:function(){l(k(this))},get defaultPrevented(){return k(this).canceled},get composed(){return!!k(this).event.composed},get timeStamp(){return k(this).timeStamp},get srcElement(){return k(this).eventTarget},get cancelBubble(){return k(this).stopped},set cancelBubble(a){if(a){var b=k(this);b.stopped=!0,\"boolean\"==typeof b.event.cancelBubble&&(b.event.cancelBubble=!0)}},get returnValue(){return!k(this).canceled},set returnValue(a){a||l(k(this))},initEvent:function(){}},Object.defineProperty(m.prototype,\"constructor\",{value:m,configurable:!0,writable:!0}),\"undefined\"!=typeof window&&\"undefined\"!=typeof window.Event&&(Object.setPrototypeOf(m.prototype,window.Event.prototype),G.set(window.Event.prototype,m));var H=new WeakMap,I=1,J=2;B.prototype={addEventListener:function(a,b,c){if(null!=b){if(\"function\"!=typeof b&&!w(b))throw new TypeError(\"'listener' should be a function or an object.\");var d=x(this),e=w(c),f=e?!!c.capture:!!c,g=f?I:J,h={listener:b,listenerType:g,passive:e&&!!c.passive,once:e&&!!c.once,next:null},i=d.get(a);if(void 0===i)return void d.set(a,h);for(var j=null;null!=i;){if(i.listener===b&&i.listenerType===g)return;j=i,i=i.next}j.next=h}},removeEventListener:function(a,b,c){if(null!=b)for(var d=x(this),e=w(c)?!!c.capture:!!c,f=e?I:J,g=null,h=d.get(a);null!=h;){if(h.listener===b&&h.listenerType===f)return void(null===g?null===h.next?d.delete(a):d.set(a,h.next):g.next=h.next);g=h,h=h.next}},dispatchEvent:function(a){if(null==a||\"string\"!=typeof a.type)throw new TypeError(\"\\\"event.type\\\" should be a string.\");var b=x(this),c=a.type,d=b.get(c);if(null==d)return!0;for(var e=r(this,a),f=null;null!=d;){if(d.once?null===f?null===d.next?b.delete(c):b.set(c,d.next):f.next=d.next:f=d,v(e,d.passive?d.listener:null),\"function\"==typeof d.listener)try{d.listener.call(this,e)}catch(a){\"undefined\"!=typeof console&&\"function\"==typeof console.error&&console.error(a)}else d.listenerType!==3&&\"function\"==typeof d.listener.handleEvent&&d.listener.handleEvent(e);if(s(e))break;d=d.next}return v(e,null),t(e,0),u(e,null),!e.defaultPrevented}},Object.defineProperty(B.prototype,\"constructor\",{value:B,configurable:!0,writable:!0}),\"undefined\"!=typeof window&&\"undefined\"!=typeof window.EventTarget&&Object.setPrototypeOf(B.prototype,window.EventTarget.prototype);var K=function(a){function d(){var a;throw c(this,d),a=j(this,g(d).call(this)),new TypeError(\"AbortSignal cannot be constructed directly\")}return f(d,a),e(d,[{key:\"aborted\",get:function(){var a=L.get(this);if(\"boolean\"!=typeof a)throw new TypeError(\"Expected 'this' to be an 'AbortSignal' object, but got \".concat(null===this?\"null\":b(this)));return a}}]),d}(B);z(K.prototype,\"abort\");var L=new WeakMap;Object.defineProperties(K.prototype,{aborted:{enumerable:!0}}),\"function\"==typeof Symbol&&\"symbol\"===b(Symbol.toStringTag)&&Object.defineProperty(K.prototype,Symbol.toStringTag,{configurable:!0,value:\"AbortSignal\"});var M=function(){function a(){c(this,a),N.set(this,C())}return e(a,[{key:\"abort\",value:function(){D(E(this))}},{key:\"signal\",get:function(){return E(this)}}]),a}(),N=new WeakMap;if(Object.defineProperties(M.prototype,{signal:{enumerable:!0},abort:{enumerable:!0}}),\"function\"==typeof Symbol&&\"symbol\"===b(Symbol.toStringTag)&&Object.defineProperty(M.prototype,Symbol.toStringTag,{configurable:!0,value:\"AbortController\"}),a.AbortController=M,a.AbortSignal=K,a.default=M,Object.defineProperty(a,\"__esModule\",{value:!0}),\"undefined\"==typeof module&&\"undefined\"==typeof define){var O=Function(\"return this\")();\"undefined\"==typeof O.AbortController&&(O.AbortController=M,O.AbortSignal=K)}});\n//# sourceMappingURL=abort-controller.umd.js.map\n/polyfill.mjs\u0002\u0017/*globals self, window */\nimport * as ac from \"./dist/abort-controller\"\n\n/*eslint-disable @mysticatea/prettier */\nconst g =\n    typeof self !== \"undefined\" ? self :\n    typeof window !== \"undefined\" ? window :\n    typeof global !== \"undefined\" ? global :\n    /* otherwise */ undefined\n/*eslint-enable @mysticatea/prettier */\n\nif (g) {\n    if (typeof g.AbortController === \"undefined\") {\n        g.AbortController = ac.AbortController\n    }\n    if (typeof g.AbortSignal === \"undefined\") {\n        g.AbortSignal = ac.AbortSignal\n    }\n}\n/dist/abort-controller.mjs\f/**\n * @author Toru Nagashima <https://github.com/mysticatea>\n * See LICENSE file in root directory for full license.\n */\nimport { EventTarget, defineEventAttribute } from 'event-target-shim';\n\n/**\n * The signal class.\n * @see https://dom.spec.whatwg.org/#abortsignal\n */\nclass AbortSignal extends EventTarget {\n    /**\n     * AbortSignal cannot be constructed directly.\n     */\n    constructor() {\n        super();\n        throw new TypeError(\"AbortSignal cannot be constructed directly\");\n    }\n    /**\n     * Returns `true` if this `AbortSignal`'s `AbortController` has signaled to abort, and `false` otherwise.\n     */\n    get aborted() {\n        const aborted = abortedFlags.get(this);\n        if (typeof aborted !== \"boolean\") {\n            throw new TypeError(`Expected 'this' to be an 'AbortSignal' object, but got ${this === null ? \"null\" : typeof this}`);\n        }\n        return aborted;\n    }\n}\ndefineEventAttribute(AbortSignal.prototype, \"abort\");\n/**\n * Create an AbortSignal object.\n */\nfunction createAbortSignal() {\n    const signal = Object.create(AbortSignal.prototype);\n    EventTarget.call(signal);\n    abortedFlags.set(signal, false);\n    return signal;\n}\n/**\n * Abort a given signal.\n */\nfunction abortSignal(signal) {\n    if (abortedFlags.get(signal) !== false) {\n        return;\n    }\n    abortedFlags.set(signal, true);\n    signal.dispatchEvent({ type: \"abort\" });\n}\n/**\n * Aborted flag for each instances.\n */\nconst abortedFlags = new WeakMap();\n// Properties should be enumerable.\nObject.defineProperties(AbortSignal.prototype, {\n    aborted: { enumerable: true },\n});\n// `toString()` should return `\"[object AbortSignal]\"`\nif (typeof Symbol === \"function\" && typeof Symbol.toStringTag === \"symbol\") {\n    Object.defineProperty(AbortSignal.prototype, Symbol.toStringTag, {\n        configurable: true,\n        value: \"AbortSignal\",\n    });\n}\n\n/**\n * The AbortController.\n * @see https://dom.spec.whatwg.org/#abortcontroller\n */\nclass AbortController {\n    /**\n     * Initialize this controller.\n     */\n    constructor() {\n        signals.set(this, createAbortSignal());\n    }\n    /**\n     * Returns the `AbortSignal` object associated with this object.\n     */\n    get signal() {\n        return getSignal(this);\n    }\n    /**\n     * Abort and signal to any observers that the associated activity is to be aborted.\n     */\n    abort() {\n        abortSignal(getSignal(this));\n    }\n}\n/**\n * Associated signals.\n */\nconst signals = new WeakMap();\n/**\n * Get the associated signal of a given controller.\n */\nfunction getSignal(controller) {\n    const signal = signals.get(controller);\n    if (signal == null) {\n        throw new TypeError(`Expected 'this' to be an 'AbortController' object, but got ${controller === null ? \"null\" : typeof controller}`);\n    }\n    return signal;\n}\n// Properties should be enumerable.\nObject.defineProperties(AbortController.prototype, {\n    signal: { enumerable: true },\n    abort: { enumerable: true },\n});\nif (typeof Symbol === \"function\" && typeof Symbol.toStringTag === \"symbol\") {\n    Object.defineProperty(AbortController.prototype, Symbol.toStringTag, {\n        configurable: true,\n        value: \"AbortController\",\n    });\n}\n\nexport default AbortController;\nexport { AbortController, AbortSignal };\n//# sourceMappingURL=abort-controller.mjs.map\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/YWJzdHJhY3QtbG9nZ2luZ0AyLjAuMQ==",
    "content": "/package.json\u0002{\n  \"name\": \"abstract-logging\",\n  \"version\": \"2.0.1\",\n  \"description\": \"A noop logger that conforms to the Log4j interface for modules to stub out internal logging\",\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"test\": \"node test.js\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/jsumners/abstract-logging.git\"\n  },\n  \"keywords\": [\n    \"log\",\n    \"logging\",\n    \"logger\",\n    \"pino\"\n  ],\n  \"author\": \"James Sumners <james.sumners@gmail.com>\",\n  \"license\": \"MIT\",\n  \"bugs\": {\n    \"url\": \"https://github.com/jsumners/abstract-logging/issues\"\n  },\n  \"homepage\": \"https://github.com/jsumners/abstract-logging#readme\"\n}\n/Readme.md\u0004.# abstract-logging\n\nThis module provides an interface for modules to include so that they can\nsupport logging via an external logger that conforms to the standard Log4j\ninterface. One such logger is [Pino](https://npm.im/pino). This module\nis intended for modules that are meant to be used by other modules.\n\nExample:\n\n```js\n'use strict'\n\nfunction AwesomeLibrary (options) {\n  this.log = (options.logger) ? options.logger : require('abstract-logging')\n}\n\nAwesomeLibrary.prototype.coolMethod = function () {\n  this.log.trace('AwesomeLibrary.coolMethod was invoked')\n  return {}\n}\n\nmodule.exports = AwesomeLibrary\n```\n\n## Interface\n\nAvailable methods:\n\n+ `fatal`\n+ `error`\n+ `warn`\n+ `info`\n+ `debug`\n+ `trace`\n\nAll methods are no operation functions.\n\nSome loggers, like [Pino](https://getpino.io/), implement a `child()` method. This method can be easily added to an `abstract-logging` instance when stubbing out such loggers:\n\n```js\nconst logger = require('abstract-logging')\nlogger.child = () => logger\n```\n\n## License\n\n[MIT License](http://jsumners.mit-license.org/)\n/index.js'use strict'\n\nfunction noop () { }\n\nconst proto = {\n  fatal: noop,\n  error: noop,\n  warn: noop,\n  info: noop,\n  debug: noop,\n  trace: noop\n}\n\nObject.defineProperty(module, 'exports', {\n  get () {\n    return Object.create(proto)\n  }\n})\n/test.js\u0001a'use strict'\n\nconst assert = require('assert')\n\nconst one = require('./')\nconst two = require('./')\n\nassert.notEqual(one, two)\nassert.ok(one.info)\nassert.equal(Function.prototype.isPrototypeOf(one.info), true)\ntwo.info = () => 'info'\n\nconst result1 = one.info()\nassert.equal(result1, undefined)\n\nconst result2 = two.info()\nassert.equal(result2, 'info')\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/YWNjZXB0c0AxLjMuOA==",
    "content": "/HISTORY.md\u00131.3.8 / 2022-02-02\n==================\n\n  * deps: mime-types@~2.1.34\n    - deps: mime-db@~1.51.0\n  * deps: negotiator@0.6.3\n\n1.3.7 / 2019-04-29\n==================\n\n  * deps: negotiator@0.6.2\n    - Fix sorting charset, encoding, and language with extra parameters\n\n1.3.6 / 2019-04-28\n==================\n\n  * deps: mime-types@~2.1.24\n    - deps: mime-db@~1.40.0\n\n1.3.5 / 2018-02-28\n==================\n\n  * deps: mime-types@~2.1.18\n    - deps: mime-db@~1.33.0\n\n1.3.4 / 2017-08-22\n==================\n\n  * deps: mime-types@~2.1.16\n    - deps: mime-db@~1.29.0\n\n1.3.3 / 2016-05-02\n==================\n\n  * deps: mime-types@~2.1.11\n    - deps: mime-db@~1.23.0\n  * deps: negotiator@0.6.1\n    - perf: improve `Accept` parsing speed\n    - perf: improve `Accept-Charset` parsing speed\n    - perf: improve `Accept-Encoding` parsing speed\n    - perf: improve `Accept-Language` parsing speed\n\n1.3.2 / 2016-03-08\n==================\n\n  * deps: mime-types@~2.1.10\n    - Fix extension of `application/dash+xml`\n    - Update primary extension for `audio/mp4`\n    - deps: mime-db@~1.22.0\n\n1.3.1 / 2016-01-19\n==================\n\n  * deps: mime-types@~2.1.9\n    - deps: mime-db@~1.21.0\n\n1.3.0 / 2015-09-29\n==================\n\n  * deps: mime-types@~2.1.7\n    - deps: mime-db@~1.19.0\n  * deps: negotiator@0.6.0\n    - Fix including type extensions in parameters in `Accept` parsing\n    - Fix parsing `Accept` parameters with quoted equals\n    - Fix parsing `Accept` parameters with quoted semicolons\n    - Lazy-load modules from main entry point\n    - perf: delay type concatenation until needed\n    - perf: enable strict mode\n    - perf: hoist regular expressions\n    - perf: remove closures getting spec properties\n    - perf: remove a closure from media type parsing\n    - perf: remove property delete from media type parsing\n\n1.2.13 / 2015-09-06\n===================\n\n  * deps: mime-types@~2.1.6\n    - deps: mime-db@~1.18.0\n\n1.2.12 / 2015-07-30\n===================\n\n  * deps: mime-types@~2.1.4\n    - deps: mime-db@~1.16.0\n\n1.2.11 / 2015-07-16\n===================\n\n  * deps: mime-types@~2.1.3\n    - deps: mime-db@~1.15.0\n\n1.2.10 / 2015-07-01\n===================\n\n  * deps: mime-types@~2.1.2\n    - deps: mime-db@~1.14.0\n\n1.2.9 / 2015-06-08\n==================\n\n  * deps: mime-types@~2.1.1\n    - perf: fix deopt during mapping\n\n1.2.8 / 2015-06-07\n==================\n\n  * deps: mime-types@~2.1.0\n    - deps: mime-db@~1.13.0\n  * perf: avoid argument reassignment & argument slice\n  * perf: avoid negotiator recursive construction\n  * perf: enable strict mode\n  * perf: remove unnecessary bitwise operator\n\n1.2.7 / 2015-05-10\n==================\n\n  * deps: negotiator@0.5.3\n    - Fix media type parameter matching to be case-insensitive\n\n1.2.6 / 2015-05-07\n==================\n\n  * deps: mime-types@~2.0.11\n    - deps: mime-db@~1.9.1\n  * deps: negotiator@0.5.2\n    - Fix comparing media types with quoted values\n    - Fix splitting media types with quoted commas\n\n1.2.5 / 2015-03-13\n==================\n\n  * deps: mime-types@~2.0.10\n    - deps: mime-db@~1.8.0\n\n1.2.4 / 2015-02-14\n==================\n\n  * Support Node.js 0.6\n  * deps: mime-types@~2.0.9\n    - deps: mime-db@~1.7.0\n  * deps: negotiator@0.5.1\n    - Fix preference sorting to be stable for long acceptable lists\n\n1.2.3 / 2015-01-31\n==================\n\n  * deps: mime-types@~2.0.8\n    - deps: mime-db@~1.6.0\n\n1.2.2 / 2014-12-30\n==================\n\n  * deps: mime-types@~2.0.7\n    - deps: mime-db@~1.5.0\n\n1.2.1 / 2014-12-30\n==================\n\n  * deps: mime-types@~2.0.5\n    - deps: mime-db@~1.3.1\n\n1.2.0 / 2014-12-19\n==================\n\n  * deps: negotiator@0.5.0\n    - Fix list return order when large accepted list\n    - Fix missing identity encoding when q=0 exists\n    - Remove dynamic building of Negotiator class\n\n1.1.4 / 2014-12-10\n==================\n\n  * deps: mime-types@~2.0.4\n    - deps: mime-db@~1.3.0\n\n1.1.3 / 2014-11-09\n==================\n\n  * deps: mime-types@~2.0.3\n    - deps: mime-db@~1.2.0\n\n1.1.2 / 2014-10-14\n==================\n\n  * deps: negotiator@0.4.9\n    - Fix error when media type has invalid parameter\n\n1.1.1 / 2014-09-28\n==================\n\n  * deps: mime-types@~2.0.2\n    - deps: mime-db@~1.1.0\n  * deps: negotiator@0.4.8\n    - Fix all negotiations to be case-insensitive\n    - Stable sort preferences of same quality according to client order\n\n1.1.0 / 2014-09-02\n==================\n\n  * update `mime-types`\n\n1.0.7 / 2014-07-04\n==================\n\n  * Fix wrong type returned from `type` when match after unknown extension\n\n1.0.6 / 2014-06-24\n==================\n\n  * deps: negotiator@0.4.7\n\n1.0.5 / 2014-06-20\n==================\n\n * fix crash when unknown extension given\n\n1.0.4 / 2014-06-19\n==================\n\n  * use `mime-types`\n\n1.0.3 / 2014-06-11\n==================\n\n  * deps: negotiator@0.4.6\n    - Order by specificity when quality is the same\n\n1.0.2 / 2014-05-29\n==================\n\n  * Fix interpretation when header not in request\n  * deps: pin negotiator@0.4.5\n\n1.0.1 / 2014-01-18\n==================\n\n  * Identity encoding isn't always acceptable\n  * deps: negotiator@~0.4.0\n\n1.0.0 / 2013-12-27\n==================\n\n  * Genesis\n/LICENSE\u0004(The MIT License)\n\nCopyright (c) 2014 Jonathan Ong <me@jongleberry.com>\nCopyright (c) 2015 Douglas Christopher Wilson <doug@somethingdoug.com>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n/index.js\u0014/*!\n * accepts\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar Negotiator = require('negotiator')\nvar mime = require('mime-types')\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = Accepts\n\n/**\n * Create a new Accepts object for the given req.\n *\n * @param {object} req\n * @public\n */\n\nfunction Accepts (req) {\n  if (!(this instanceof Accepts)) {\n    return new Accepts(req)\n  }\n\n  this.headers = req.headers\n  this.negotiator = new Negotiator(req)\n}\n\n/**\n * Check if the given `type(s)` is acceptable, returning\n * the best match when true, otherwise `undefined`, in which\n * case you should respond with 406 \"Not Acceptable\".\n *\n * The `type` value may be a single mime type string\n * such as \"application/json\", the extension name\n * such as \"json\" or an array `[\"json\", \"html\", \"text/plain\"]`. When a list\n * or array is given the _best_ match, if any is returned.\n *\n * Examples:\n *\n *     // Accept: text/html\n *     this.types('html');\n *     // => \"html\"\n *\n *     // Accept: text/*, application/json\n *     this.types('html');\n *     // => \"html\"\n *     this.types('text/html');\n *     // => \"text/html\"\n *     this.types('json', 'text');\n *     // => \"json\"\n *     this.types('application/json');\n *     // => \"application/json\"\n *\n *     // Accept: text/*, application/json\n *     this.types('image/png');\n *     this.types('png');\n *     // => undefined\n *\n *     // Accept: text/*;q=.5, application/json\n *     this.types(['html', 'json']);\n *     this.types('html', 'json');\n *     // => \"json\"\n *\n * @param {String|Array} types...\n * @return {String|Array|Boolean}\n * @public\n */\n\nAccepts.prototype.type =\nAccepts.prototype.types = function (types_) {\n  var types = types_\n\n  // support flattened arguments\n  if (types && !Array.isArray(types)) {\n    types = new Array(arguments.length)\n    for (var i = 0; i < types.length; i++) {\n      types[i] = arguments[i]\n    }\n  }\n\n  // no types, return all requested types\n  if (!types || types.length === 0) {\n    return this.negotiator.mediaTypes()\n  }\n\n  // no accept header, return first given type\n  if (!this.headers.accept) {\n    return types[0]\n  }\n\n  var mimes = types.map(extToMime)\n  var accepts = this.negotiator.mediaTypes(mimes.filter(validMime))\n  var first = accepts[0]\n\n  return first\n    ? types[mimes.indexOf(first)]\n    : false\n}\n\n/**\n * Return accepted encodings or best fit based on `encodings`.\n *\n * Given `Accept-Encoding: gzip, deflate`\n * an array sorted by quality is returned:\n *\n *     ['gzip', 'deflate']\n *\n * @param {String|Array} encodings...\n * @return {String|Array}\n * @public\n */\n\nAccepts.prototype.encoding =\nAccepts.prototype.encodings = function (encodings_) {\n  var encodings = encodings_\n\n  // support flattened arguments\n  if (encodings && !Array.isArray(encodings)) {\n    encodings = new Array(arguments.length)\n    for (var i = 0; i < encodings.length; i++) {\n      encodings[i] = arguments[i]\n    }\n  }\n\n  // no encodings, return all requested encodings\n  if (!encodings || encodings.length === 0) {\n    return this.negotiator.encodings()\n  }\n\n  return this.negotiator.encodings(encodings)[0] || false\n}\n\n/**\n * Return accepted charsets or best fit based on `charsets`.\n *\n * Given `Accept-Charset: utf-8, iso-8859-1;q=0.2, utf-7;q=0.5`\n * an array sorted by quality is returned:\n *\n *     ['utf-8', 'utf-7', 'iso-8859-1']\n *\n * @param {String|Array} charsets...\n * @return {String|Array}\n * @public\n */\n\nAccepts.prototype.charset =\nAccepts.prototype.charsets = function (charsets_) {\n  var charsets = charsets_\n\n  // support flattened arguments\n  if (charsets && !Array.isArray(charsets)) {\n    charsets = new Array(arguments.length)\n    for (var i = 0; i < charsets.length; i++) {\n      charsets[i] = arguments[i]\n    }\n  }\n\n  // no charsets, return all requested charsets\n  if (!charsets || charsets.length === 0) {\n    return this.negotiator.charsets()\n  }\n\n  return this.negotiator.charsets(charsets)[0] || false\n}\n\n/**\n * Return accepted languages or best fit based on `langs`.\n *\n * Given `Accept-Language: en;q=0.8, es, pt`\n * an array sorted by quality is returned:\n *\n *     ['es', 'pt', 'en']\n *\n * @param {String|Array} langs...\n * @return {Array|String}\n * @public\n */\n\nAccepts.prototype.lang =\nAccepts.prototype.langs =\nAccepts.prototype.language =\nAccepts.prototype.languages = function (languages_) {\n  var languages = languages_\n\n  // support flattened arguments\n  if (languages && !Array.isArray(languages)) {\n    languages = new Array(arguments.length)\n    for (var i = 0; i < languages.length; i++) {\n      languages[i] = arguments[i]\n    }\n  }\n\n  // no languages, return all requested languages\n  if (!languages || languages.length === 0) {\n    return this.negotiator.languages()\n  }\n\n  return this.negotiator.languages(languages)[0] || false\n}\n\n/**\n * Convert extnames to mime.\n *\n * @param {String} type\n * @return {String}\n * @private\n */\n\nfunction extToMime (type) {\n  return type.indexOf('/') === -1\n    ? mime.lookup(type)\n    : type\n}\n\n/**\n * Check if mime is valid.\n *\n * @param {String} type\n * @return {String}\n * @private\n */\n\nfunction validMime (type) {\n  return typeof type === 'string'\n}\n/package.json\u0004{\n  \"name\": \"accepts\",\n  \"description\": \"Higher-level content negotiation\",\n  \"version\": \"1.3.8\",\n  \"contributors\": [\n    \"Douglas Christopher Wilson <doug@somethingdoug.com>\",\n    \"Jonathan Ong <me@jongleberry.com> (http://jongleberry.com)\"\n  ],\n  \"license\": \"MIT\",\n  \"repository\": \"jshttp/accepts\",\n  \"dependencies\": {\n    \"mime-types\": \"~2.1.34\",\n    \"negotiator\": \"0.6.3\"\n  },\n  \"devDependencies\": {\n    \"deep-equal\": \"1.0.1\",\n    \"eslint\": \"7.32.0\",\n    \"eslint-config-standard\": \"14.1.1\",\n    \"eslint-plugin-import\": \"2.25.4\",\n    \"eslint-plugin-markdown\": \"2.2.1\",\n    \"eslint-plugin-node\": \"11.1.0\",\n    \"eslint-plugin-promise\": \"4.3.1\",\n    \"eslint-plugin-standard\": \"4.1.0\",\n    \"mocha\": \"9.2.0\",\n    \"nyc\": \"15.1.0\"\n  },\n  \"files\": [\n    \"LICENSE\",\n    \"HISTORY.md\",\n    \"index.js\"\n  ],\n  \"engines\": {\n    \"node\": \">= 0.6\"\n  },\n  \"scripts\": {\n    \"lint\": \"eslint .\",\n    \"test\": \"mocha --reporter spec --check-leaks --bail test/\",\n    \"test-ci\": \"nyc --reporter=lcov --reporter=text npm test\",\n    \"test-cov\": \"nyc --reporter=html --reporter=text npm test\"\n  },\n  \"keywords\": [\n    \"content\",\n    \"negotiation\",\n    \"accept\",\n    \"accepts\"\n  ]\n}\n/README.md\u0010\u001b# accepts\n\n[![NPM Version][npm-version-image]][npm-url]\n[![NPM Downloads][npm-downloads-image]][npm-url]\n[![Node.js Version][node-version-image]][node-version-url]\n[![Build Status][github-actions-ci-image]][github-actions-ci-url]\n[![Test Coverage][coveralls-image]][coveralls-url]\n\nHigher level content negotiation based on [negotiator](https://www.npmjs.com/package/negotiator).\nExtracted from [koa](https://www.npmjs.com/package/koa) for general use.\n\nIn addition to negotiator, it allows:\n\n- Allows types as an array or arguments list, ie `(['text/html', 'application/json'])`\n  as well as `('text/html', 'application/json')`.\n- Allows type shorthands such as `json`.\n- Returns `false` when no types match\n- Treats non-existent headers as `*`\n\n## Installation\n\nThis is a [Node.js](https://nodejs.org/en/) module available through the\n[npm registry](https://www.npmjs.com/). Installation is done using the\n[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally):\n\n```sh\n$ npm install accepts\n```\n\n## API\n\n```js\nvar accepts = require('accepts')\n```\n\n### accepts(req)\n\nCreate a new `Accepts` object for the given `req`.\n\n#### .charset(charsets)\n\nReturn the first accepted charset. If nothing in `charsets` is accepted,\nthen `false` is returned.\n\n#### .charsets()\n\nReturn the charsets that the request accepts, in the order of the client's\npreference (most preferred first).\n\n#### .encoding(encodings)\n\nReturn the first accepted encoding. If nothing in `encodings` is accepted,\nthen `false` is returned.\n\n#### .encodings()\n\nReturn the encodings that the request accepts, in the order of the client's\npreference (most preferred first).\n\n#### .language(languages)\n\nReturn the first accepted language. If nothing in `languages` is accepted,\nthen `false` is returned.\n\n#### .languages()\n\nReturn the languages that the request accepts, in the order of the client's\npreference (most preferred first).\n\n#### .type(types)\n\nReturn the first accepted type (and it is returned as the same text as what\nappears in the `types` array). If nothing in `types` is accepted, then `false`\nis returned.\n\nThe `types` array can contain full MIME types or file extensions. Any value\nthat is not a full MIME types is passed to `require('mime-types').lookup`.\n\n#### .types()\n\nReturn the types that the request accepts, in the order of the client's\npreference (most preferred first).\n\n## Examples\n\n### Simple type negotiation\n\nThis simple example shows how to use `accepts` to return a different typed\nrespond body based on what the client wants to accept. The server lists it's\npreferences in order and will get back the best match between the client and\nserver.\n\n```js\nvar accepts = require('accepts')\nvar http = require('http')\n\nfunction app (req, res) {\n  var accept = accepts(req)\n\n  // the order of this list is significant; should be server preferred order\n  switch (accept.type(['json', 'html'])) {\n    case 'json':\n      res.setHeader('Content-Type', 'application/json')\n      res.write('{\"hello\":\"world!\"}')\n      break\n    case 'html':\n      res.setHeader('Content-Type', 'text/html')\n      res.write('<b>hello, world!</b>')\n      break\n    default:\n      // the fallback is text/plain, so no need to specify it above\n      res.setHeader('Content-Type', 'text/plain')\n      res.write('hello, world!')\n      break\n  }\n\n  res.end()\n}\n\nhttp.createServer(app).listen(3000)\n```\n\nYou can test this out with the cURL program:\n```sh\ncurl -I -H'Accept: text/html' http://localhost:3000/\n```\n\n## License\n\n[MIT](LICENSE)\n\n[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/accepts/master\n[coveralls-url]: https://coveralls.io/r/jshttp/accepts?branch=master\n[github-actions-ci-image]: https://badgen.net/github/checks/jshttp/accepts/master?label=ci\n[github-actions-ci-url]: https://github.com/jshttp/accepts/actions/workflows/ci.yml\n[node-version-image]: https://badgen.net/npm/node/accepts\n[node-version-url]: https://nodejs.org/en/download\n[npm-downloads-image]: https://badgen.net/npm/dm/accepts\n[npm-url]: https://npmjs.org/package/accepts\n[npm-version-image]: https://badgen.net/npm/v/accepts\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/YWNvcm4tanN4QDUuMy4y",
    "content": "/index.js='use strict';\n\nconst XHTMLEntities = require('./xhtml');\n\nconst hexNumber = /^[\\da-fA-F]+$/;\nconst decimalNumber = /^\\d+$/;\n\n// The map to `acorn-jsx` tokens from `acorn` namespace objects.\nconst acornJsxMap = new WeakMap();\n\n// Get the original tokens for the given `acorn` namespace object.\nfunction getJsxTokens(acorn) {\n  acorn = acorn.Parser.acorn || acorn;\n  let acornJsx = acornJsxMap.get(acorn);\n  if (!acornJsx) {\n    const tt = acorn.tokTypes;\n    const TokContext = acorn.TokContext;\n    const TokenType = acorn.TokenType;\n    const tc_oTag = new TokContext('<tag', false);\n    const tc_cTag = new TokContext('</tag', false);\n    const tc_expr = new TokContext('<tag>...</tag>', true, true);\n    const tokContexts = {\n      tc_oTag: tc_oTag,\n      tc_cTag: tc_cTag,\n      tc_expr: tc_expr\n    };\n    const tokTypes = {\n      jsxName: new TokenType('jsxName'),\n      jsxText: new TokenType('jsxText', {beforeExpr: true}),\n      jsxTagStart: new TokenType('jsxTagStart', {startsExpr: true}),\n      jsxTagEnd: new TokenType('jsxTagEnd')\n    };\n\n    tokTypes.jsxTagStart.updateContext = function() {\n      this.context.push(tc_expr); // treat as beginning of JSX expression\n      this.context.push(tc_oTag); // start opening tag context\n      this.exprAllowed = false;\n    };\n    tokTypes.jsxTagEnd.updateContext = function(prevType) {\n      let out = this.context.pop();\n      if (out === tc_oTag && prevType === tt.slash || out === tc_cTag) {\n        this.context.pop();\n        this.exprAllowed = this.curContext() === tc_expr;\n      } else {\n        this.exprAllowed = true;\n      }\n    };\n\n    acornJsx = { tokContexts: tokContexts, tokTypes: tokTypes };\n    acornJsxMap.set(acorn, acornJsx);\n  }\n\n  return acornJsx;\n}\n\n// Transforms JSX element name to string.\n\nfunction getQualifiedJSXName(object) {\n  if (!object)\n    return object;\n\n  if (object.type === 'JSXIdentifier')\n    return object.name;\n\n  if (object.type === 'JSXNamespacedName')\n    return object.namespace.name + ':' + object.name.name;\n\n  if (object.type === 'JSXMemberExpression')\n    return getQualifiedJSXName(object.object) + '.' +\n    getQualifiedJSXName(object.property);\n}\n\nmodule.exports = function(options) {\n  options = options || {};\n  return function(Parser) {\n    return plugin({\n      allowNamespaces: options.allowNamespaces !== false,\n      allowNamespacedObjects: !!options.allowNamespacedObjects\n    }, Parser);\n  };\n};\n\n// This is `tokTypes` of the peer dep.\n// This can be different instances from the actual `tokTypes` this plugin uses.\nObject.defineProperty(module.exports, \"tokTypes\", {\n  get: function get_tokTypes() {\n    return getJsxTokens(require(\"acorn\")).tokTypes;\n  },\n  configurable: true,\n  enumerable: true\n});\n\nfunction plugin(options, Parser) {\n  const acorn = Parser.acorn || require(\"acorn\");\n  const acornJsx = getJsxTokens(acorn);\n  const tt = acorn.tokTypes;\n  const tok = acornJsx.tokTypes;\n  const tokContexts = acorn.tokContexts;\n  const tc_oTag = acornJsx.tokContexts.tc_oTag;\n  const tc_cTag = acornJsx.tokContexts.tc_cTag;\n  const tc_expr = acornJsx.tokContexts.tc_expr;\n  const isNewLine = acorn.isNewLine;\n  const isIdentifierStart = acorn.isIdentifierStart;\n  const isIdentifierChar = acorn.isIdentifierChar;\n\n  return class extends Parser {\n    // Expose actual `tokTypes` and `tokContexts` to other plugins.\n    static get acornJsx() {\n      return acornJsx;\n    }\n\n    // Reads inline JSX contents token.\n    jsx_readToken() {\n      let out = '', chunkStart = this.pos;\n      for (;;) {\n        if (this.pos >= this.input.length)\n          this.raise(this.start, 'Unterminated JSX contents');\n        let ch = this.input.charCodeAt(this.pos);\n\n        switch (ch) {\n        case 60: // '<'\n        case 123: // '{'\n          if (this.pos === this.start) {\n            if (ch === 60 && this.exprAllowed) {\n              ++this.pos;\n              return this.finishToken(tok.jsxTagStart);\n            }\n            return this.getTokenFromCode(ch);\n          }\n          out += this.input.slice(chunkStart, this.pos);\n          return this.finishToken(tok.jsxText, out);\n\n        case 38: // '&'\n          out += this.input.slice(chunkStart, this.pos);\n          out += this.jsx_readEntity();\n          chunkStart = this.pos;\n          break;\n\n        case 62: // '>'\n        case 125: // '}'\n          this.raise(\n            this.pos,\n            \"Unexpected token `\" + this.input[this.pos] + \"`. Did you mean `\" +\n              (ch === 62 ? \"&gt;\" : \"&rbrace;\") + \"` or \" + \"`{\\\"\" + this.input[this.pos] + \"\\\"}\" + \"`?\"\n          );\n\n        default:\n          if (isNewLine(ch)) {\n            out += this.input.slice(chunkStart, this.pos);\n            out += this.jsx_readNewLine(true);\n            chunkStart = this.pos;\n          } else {\n            ++this.pos;\n          }\n        }\n      }\n    }\n\n    jsx_readNewLine(normalizeCRLF) {\n      let ch = this.input.charCodeAt(this.pos);\n      let out;\n      ++this.pos;\n      if (ch === 13 && this.input.charCodeAt(this.pos) === 10) {\n        ++this.pos;\n        out = normalizeCRLF ? '\\n' : '\\r\\n';\n      } else {\n        out = String.fromCharCode(ch);\n      }\n      if (this.options.locations) {\n        ++this.curLine;\n        this.lineStart = this.pos;\n      }\n\n      return out;\n    }\n\n    jsx_readString(quote) {\n      let out = '', chunkStart = ++this.pos;\n      for (;;) {\n        if (this.pos >= this.input.length)\n          this.raise(this.start, 'Unterminated string constant');\n        let ch = this.input.charCodeAt(this.pos);\n        if (ch === quote) break;\n        if (ch === 38) { // '&'\n          out += this.input.slice(chunkStart, this.pos);\n          out += this.jsx_readEntity();\n          chunkStart = this.pos;\n        } else if (isNewLine(ch)) {\n          out += this.input.slice(chunkStart, this.pos);\n          out += this.jsx_readNewLine(false);\n          chunkStart = this.pos;\n        } else {\n          ++this.pos;\n        }\n      }\n      out += this.input.slice(chunkStart, this.pos++);\n      return this.finishToken(tt.string, out);\n    }\n\n    jsx_readEntity() {\n      let str = '', count = 0, entity;\n      let ch = this.input[this.pos];\n      if (ch !== '&')\n        this.raise(this.pos, 'Entity must start with an ampersand');\n      let startPos = ++this.pos;\n      while (this.pos < this.input.length && count++ < 10) {\n        ch = this.input[this.pos++];\n        if (ch === ';') {\n          if (str[0] === '#') {\n            if (str[1] === 'x') {\n              str = str.substr(2);\n              if (hexNumber.test(str))\n                entity = String.fromCharCode(parseInt(str, 16));\n            } else {\n              str = str.substr(1);\n              if (decimalNumber.test(str))\n                entity = String.fromCharCode(parseInt(str, 10));\n            }\n          } else {\n            entity = XHTMLEntities[str];\n          }\n          break;\n        }\n        str += ch;\n      }\n      if (!entity) {\n        this.pos = startPos;\n        return '&';\n      }\n      return entity;\n    }\n\n    // Read a JSX identifier (valid tag or attribute name).\n    //\n    // Optimized version since JSX identifiers can't contain\n    // escape characters and so can be read as single slice.\n    // Also assumes that first character was already checked\n    // by isIdentifierStart in readToken.\n\n    jsx_readWord() {\n      let ch, start = this.pos;\n      do {\n        ch = this.input.charCodeAt(++this.pos);\n      } while (isIdentifierChar(ch) || ch === 45); // '-'\n      return this.finishToken(tok.jsxName, this.input.slice(start, this.pos));\n    }\n\n    // Parse next token as JSX identifier\n\n    jsx_parseIdentifier() {\n      let node = this.startNode();\n      if (this.type === tok.jsxName)\n        node.name = this.value;\n      else if (this.type.keyword)\n        node.name = this.type.keyword;\n      else\n        this.unexpected();\n      this.next();\n      return this.finishNode(node, 'JSXIdentifier');\n    }\n\n    // Parse namespaced identifier.\n\n    jsx_parseNamespacedName() {\n      let startPos = this.start, startLoc = this.startLoc;\n      let name = this.jsx_parseIdentifier();\n      if (!options.allowNamespaces || !this.eat(tt.colon)) return name;\n      var node = this.startNodeAt(startPos, startLoc);\n      node.namespace = name;\n      node.name = this.jsx_parseIdentifier();\n      return this.finishNode(node, 'JSXNamespacedName');\n    }\n\n    // Parses element name in any form - namespaced, member\n    // or single identifier.\n\n    jsx_parseElementName() {\n      if (this.type === tok.jsxTagEnd) return '';\n      let startPos = this.start, startLoc = this.startLoc;\n      let node = this.jsx_parseNamespacedName();\n      if (this.type === tt.dot && node.type === 'JSXNamespacedName' && !options.allowNamespacedObjects) {\n        this.unexpected();\n      }\n      while (this.eat(tt.dot)) {\n        let newNode = this.startNodeAt(startPos, startLoc);\n        newNode.object = node;\n        newNode.property = this.jsx_parseIdentifier();\n        node = this.finishNode(newNode, 'JSXMemberExpression');\n      }\n      return node;\n    }\n\n    // Parses any type of JSX attribute value.\n\n    jsx_parseAttributeValue() {\n      switch (this.type) {\n      case tt.braceL:\n        let node = this.jsx_parseExpressionContainer();\n        if (node.expression.type === 'JSXEmptyExpression')\n          this.raise(node.start, 'JSX attributes must only be assigned a non-empty expression');\n        return node;\n\n      case tok.jsxTagStart:\n      case tt.string:\n        return this.parseExprAtom();\n\n      default:\n        this.raise(this.start, 'JSX value should be either an expression or a quoted JSX text');\n      }\n    }\n\n    // JSXEmptyExpression is unique type since it doesn't actually parse anything,\n    // and so it should start at the end of last read token (left brace) and finish\n    // at the beginning of the next one (right brace).\n\n    jsx_parseEmptyExpression() {\n      let node = this.startNodeAt(this.lastTokEnd, this.lastTokEndLoc);\n      return this.finishNodeAt(node, 'JSXEmptyExpression', this.start, this.startLoc);\n    }\n\n    // Parses JSX expression enclosed into curly brackets.\n\n    jsx_parseExpressionContainer() {\n      let node = this.startNode();\n      this.next();\n      node.expression = this.type === tt.braceR\n        ? this.jsx_parseEmptyExpression()\n        : this.parseExpression();\n      this.expect(tt.braceR);\n      return this.finishNode(node, 'JSXExpressionContainer');\n    }\n\n    // Parses following JSX attribute name-value pair.\n\n    jsx_parseAttribute() {\n      let node = this.startNode();\n      if (this.eat(tt.braceL)) {\n        this.expect(tt.ellipsis);\n        node.argument = this.parseMaybeAssign();\n        this.expect(tt.braceR);\n        return this.finishNode(node, 'JSXSpreadAttribute');\n      }\n      node.name = this.jsx_parseNamespacedName();\n      node.value = this.eat(tt.eq) ? this.jsx_parseAttributeValue() : null;\n      return this.finishNode(node, 'JSXAttribute');\n    }\n\n    // Parses JSX opening tag starting after '<'.\n\n    jsx_parseOpeningElementAt(startPos, startLoc) {\n      let node = this.startNodeAt(startPos, startLoc);\n      node.attributes = [];\n      let nodeName = this.jsx_parseElementName();\n      if (nodeName) node.name = nodeName;\n      while (this.type !== tt.slash && this.type !== tok.jsxTagEnd)\n        node.attributes.push(this.jsx_parseAttribute());\n      node.selfClosing = this.eat(tt.slash);\n      this.expect(tok.jsxTagEnd);\n      return this.finishNode(node, nodeName ? 'JSXOpeningElement' : 'JSXOpeningFragment');\n    }\n\n    // Parses JSX closing tag starting after '</'.\n\n    jsx_parseClosingElementAt(startPos, startLoc) {\n      let node = this.startNodeAt(startPos, startLoc);\n      let nodeName = this.jsx_parseElementName();\n      if (nodeName) node.name = nodeName;\n      this.expect(tok.jsxTagEnd);\n      return this.finishNode(node, nodeName ? 'JSXClosingElement' : 'JSXClosingFragment');\n    }\n\n    // Parses entire JSX element, including it's opening tag\n    // (starting after '<'), attributes, contents and closing tag.\n\n    jsx_parseElementAt(startPos, startLoc) {\n      let node = this.startNodeAt(startPos, startLoc);\n      let children = [];\n      let openingElement = this.jsx_parseOpeningElementAt(startPos, startLoc);\n      let closingElement = null;\n\n      if (!openingElement.selfClosing) {\n        contents: for (;;) {\n          switch (this.type) {\n          case tok.jsxTagStart:\n            startPos = this.start; startLoc = this.startLoc;\n            this.next();\n            if (this.eat(tt.slash)) {\n              closingElement = this.jsx_parseClosingElementAt(startPos, startLoc);\n              break contents;\n            }\n            children.push(this.jsx_parseElementAt(startPos, startLoc));\n            break;\n\n          case tok.jsxText:\n            children.push(this.parseExprAtom());\n            break;\n\n          case tt.braceL:\n            children.push(this.jsx_parseExpressionContainer());\n            break;\n\n          default:\n            this.unexpected();\n          }\n        }\n        if (getQualifiedJSXName(closingElement.name) !== getQualifiedJSXName(openingElement.name)) {\n          this.raise(\n            closingElement.start,\n            'Expected corresponding JSX closing tag for <' + getQualifiedJSXName(openingElement.name) + '>');\n        }\n      }\n      let fragmentOrElement = openingElement.name ? 'Element' : 'Fragment';\n\n      node['opening' + fragmentOrElement] = openingElement;\n      node['closing' + fragmentOrElement] = closingElement;\n      node.children = children;\n      if (this.type === tt.relational && this.value === \"<\") {\n        this.raise(this.start, \"Adjacent JSX elements must be wrapped in an enclosing tag\");\n      }\n      return this.finishNode(node, 'JSX' + fragmentOrElement);\n    }\n\n    // Parse JSX text\n\n    jsx_parseText() {\n      let node = this.parseLiteral(this.value);\n      node.type = \"JSXText\";\n      return node;\n    }\n\n    // Parses entire JSX element from current position.\n\n    jsx_parseElement() {\n      let startPos = this.start, startLoc = this.startLoc;\n      this.next();\n      return this.jsx_parseElementAt(startPos, startLoc);\n    }\n\n    parseExprAtom(refShortHandDefaultPos) {\n      if (this.type === tok.jsxText)\n        return this.jsx_parseText();\n      else if (this.type === tok.jsxTagStart)\n        return this.jsx_parseElement();\n      else\n        return super.parseExprAtom(refShortHandDefaultPos);\n    }\n\n    readToken(code) {\n      let context = this.curContext();\n\n      if (context === tc_expr) return this.jsx_readToken();\n\n      if (context === tc_oTag || context === tc_cTag) {\n        if (isIdentifierStart(code)) return this.jsx_readWord();\n\n        if (code == 62) {\n          ++this.pos;\n          return this.finishToken(tok.jsxTagEnd);\n        }\n\n        if ((code === 34 || code === 39) && context == tc_oTag)\n          return this.jsx_readString(code);\n      }\n\n      if (code === 60 && this.exprAllowed && this.input.charCodeAt(this.pos + 1) !== 33) {\n        ++this.pos;\n        return this.finishToken(tok.jsxTagStart);\n      }\n      return super.readToken(code);\n    }\n\n    updateContext(prevType) {\n      if (this.type == tt.braceL) {\n        var curContext = this.curContext();\n        if (curContext == tc_oTag) this.context.push(tokContexts.b_expr);\n        else if (curContext == tc_expr) this.context.push(tokContexts.b_tmpl);\n        else super.updateContext(prevType);\n        this.exprAllowed = true;\n      } else if (this.type === tt.slash && prevType === tok.jsxTagStart) {\n        this.context.length -= 2; // do not consider JSX expr -> JSX open tag -> ... anymore\n        this.context.push(tc_cTag); // reconsider as closing tag context\n        this.exprAllowed = false;\n      } else {\n        return super.updateContext(prevType);\n      }\n    }\n  };\n}\n/LICENSE\u0004,Copyright (C) 2012-2017 by Ingvar Stepanyan\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n/index.d.ts\u0001\u0006import { Parser } from 'acorn' \n\ndeclare const jsx: (options?: jsx.Options) => (BaseParser: typeof Parser) => typeof Parser;\n\ndeclare namespace jsx {\n  interface Options {\n    allowNamespacedObjects?: boolean;\n    allowNamespaces?: boolean;\n  }\n}\n\nexport = jsx;\n/xhtml.js\u0012nmodule.exports = {\n  quot: '\\u0022',\n  amp: '&',\n  apos: '\\u0027',\n  lt: '<',\n  gt: '>',\n  nbsp: '\\u00A0',\n  iexcl: '\\u00A1',\n  cent: '\\u00A2',\n  pound: '\\u00A3',\n  curren: '\\u00A4',\n  yen: '\\u00A5',\n  brvbar: '\\u00A6',\n  sect: '\\u00A7',\n  uml: '\\u00A8',\n  copy: '\\u00A9',\n  ordf: '\\u00AA',\n  laquo: '\\u00AB',\n  not: '\\u00AC',\n  shy: '\\u00AD',\n  reg: '\\u00AE',\n  macr: '\\u00AF',\n  deg: '\\u00B0',\n  plusmn: '\\u00B1',\n  sup2: '\\u00B2',\n  sup3: '\\u00B3',\n  acute: '\\u00B4',\n  micro: '\\u00B5',\n  para: '\\u00B6',\n  middot: '\\u00B7',\n  cedil: '\\u00B8',\n  sup1: '\\u00B9',\n  ordm: '\\u00BA',\n  raquo: '\\u00BB',\n  frac14: '\\u00BC',\n  frac12: '\\u00BD',\n  frac34: '\\u00BE',\n  iquest: '\\u00BF',\n  Agrave: '\\u00C0',\n  Aacute: '\\u00C1',\n  Acirc: '\\u00C2',\n  Atilde: '\\u00C3',\n  Auml: '\\u00C4',\n  Aring: '\\u00C5',\n  AElig: '\\u00C6',\n  Ccedil: '\\u00C7',\n  Egrave: '\\u00C8',\n  Eacute: '\\u00C9',\n  Ecirc: '\\u00CA',\n  Euml: '\\u00CB',\n  Igrave: '\\u00CC',\n  Iacute: '\\u00CD',\n  Icirc: '\\u00CE',\n  Iuml: '\\u00CF',\n  ETH: '\\u00D0',\n  Ntilde: '\\u00D1',\n  Ograve: '\\u00D2',\n  Oacute: '\\u00D3',\n  Ocirc: '\\u00D4',\n  Otilde: '\\u00D5',\n  Ouml: '\\u00D6',\n  times: '\\u00D7',\n  Oslash: '\\u00D8',\n  Ugrave: '\\u00D9',\n  Uacute: '\\u00DA',\n  Ucirc: '\\u00DB',\n  Uuml: '\\u00DC',\n  Yacute: '\\u00DD',\n  THORN: '\\u00DE',\n  szlig: '\\u00DF',\n  agrave: '\\u00E0',\n  aacute: '\\u00E1',\n  acirc: '\\u00E2',\n  atilde: '\\u00E3',\n  auml: '\\u00E4',\n  aring: '\\u00E5',\n  aelig: '\\u00E6',\n  ccedil: '\\u00E7',\n  egrave: '\\u00E8',\n  eacute: '\\u00E9',\n  ecirc: '\\u00EA',\n  euml: '\\u00EB',\n  igrave: '\\u00EC',\n  iacute: '\\u00ED',\n  icirc: '\\u00EE',\n  iuml: '\\u00EF',\n  eth: '\\u00F0',\n  ntilde: '\\u00F1',\n  ograve: '\\u00F2',\n  oacute: '\\u00F3',\n  ocirc: '\\u00F4',\n  otilde: '\\u00F5',\n  ouml: '\\u00F6',\n  divide: '\\u00F7',\n  oslash: '\\u00F8',\n  ugrave: '\\u00F9',\n  uacute: '\\u00FA',\n  ucirc: '\\u00FB',\n  uuml: '\\u00FC',\n  yacute: '\\u00FD',\n  thorn: '\\u00FE',\n  yuml: '\\u00FF',\n  OElig: '\\u0152',\n  oelig: '\\u0153',\n  Scaron: '\\u0160',\n  scaron: '\\u0161',\n  Yuml: '\\u0178',\n  fnof: '\\u0192',\n  circ: '\\u02C6',\n  tilde: '\\u02DC',\n  Alpha: '\\u0391',\n  Beta: '\\u0392',\n  Gamma: '\\u0393',\n  Delta: '\\u0394',\n  Epsilon: '\\u0395',\n  Zeta: '\\u0396',\n  Eta: '\\u0397',\n  Theta: '\\u0398',\n  Iota: '\\u0399',\n  Kappa: '\\u039A',\n  Lambda: '\\u039B',\n  Mu: '\\u039C',\n  Nu: '\\u039D',\n  Xi: '\\u039E',\n  Omicron: '\\u039F',\n  Pi: '\\u03A0',\n  Rho: '\\u03A1',\n  Sigma: '\\u03A3',\n  Tau: '\\u03A4',\n  Upsilon: '\\u03A5',\n  Phi: '\\u03A6',\n  Chi: '\\u03A7',\n  Psi: '\\u03A8',\n  Omega: '\\u03A9',\n  alpha: '\\u03B1',\n  beta: '\\u03B2',\n  gamma: '\\u03B3',\n  delta: '\\u03B4',\n  epsilon: '\\u03B5',\n  zeta: '\\u03B6',\n  eta: '\\u03B7',\n  theta: '\\u03B8',\n  iota: '\\u03B9',\n  kappa: '\\u03BA',\n  lambda: '\\u03BB',\n  mu: '\\u03BC',\n  nu: '\\u03BD',\n  xi: '\\u03BE',\n  omicron: '\\u03BF',\n  pi: '\\u03C0',\n  rho: '\\u03C1',\n  sigmaf: '\\u03C2',\n  sigma: '\\u03C3',\n  tau: '\\u03C4',\n  upsilon: '\\u03C5',\n  phi: '\\u03C6',\n  chi: '\\u03C7',\n  psi: '\\u03C8',\n  omega: '\\u03C9',\n  thetasym: '\\u03D1',\n  upsih: '\\u03D2',\n  piv: '\\u03D6',\n  ensp: '\\u2002',\n  emsp: '\\u2003',\n  thinsp: '\\u2009',\n  zwnj: '\\u200C',\n  zwj: '\\u200D',\n  lrm: '\\u200E',\n  rlm: '\\u200F',\n  ndash: '\\u2013',\n  mdash: '\\u2014',\n  lsquo: '\\u2018',\n  rsquo: '\\u2019',\n  sbquo: '\\u201A',\n  ldquo: '\\u201C',\n  rdquo: '\\u201D',\n  bdquo: '\\u201E',\n  dagger: '\\u2020',\n  Dagger: '\\u2021',\n  bull: '\\u2022',\n  hellip: '\\u2026',\n  permil: '\\u2030',\n  prime: '\\u2032',\n  Prime: '\\u2033',\n  lsaquo: '\\u2039',\n  rsaquo: '\\u203A',\n  oline: '\\u203E',\n  frasl: '\\u2044',\n  euro: '\\u20AC',\n  image: '\\u2111',\n  weierp: '\\u2118',\n  real: '\\u211C',\n  trade: '\\u2122',\n  alefsym: '\\u2135',\n  larr: '\\u2190',\n  uarr: '\\u2191',\n  rarr: '\\u2192',\n  darr: '\\u2193',\n  harr: '\\u2194',\n  crarr: '\\u21B5',\n  lArr: '\\u21D0',\n  uArr: '\\u21D1',\n  rArr: '\\u21D2',\n  dArr: '\\u21D3',\n  hArr: '\\u21D4',\n  forall: '\\u2200',\n  part: '\\u2202',\n  exist: '\\u2203',\n  empty: '\\u2205',\n  nabla: '\\u2207',\n  isin: '\\u2208',\n  notin: '\\u2209',\n  ni: '\\u220B',\n  prod: '\\u220F',\n  sum: '\\u2211',\n  minus: '\\u2212',\n  lowast: '\\u2217',\n  radic: '\\u221A',\n  prop: '\\u221D',\n  infin: '\\u221E',\n  ang: '\\u2220',\n  and: '\\u2227',\n  or: '\\u2228',\n  cap: '\\u2229',\n  cup: '\\u222A',\n  'int': '\\u222B',\n  there4: '\\u2234',\n  sim: '\\u223C',\n  cong: '\\u2245',\n  asymp: '\\u2248',\n  ne: '\\u2260',\n  equiv: '\\u2261',\n  le: '\\u2264',\n  ge: '\\u2265',\n  sub: '\\u2282',\n  sup: '\\u2283',\n  nsub: '\\u2284',\n  sube: '\\u2286',\n  supe: '\\u2287',\n  oplus: '\\u2295',\n  otimes: '\\u2297',\n  perp: '\\u22A5',\n  sdot: '\\u22C5',\n  lceil: '\\u2308',\n  rceil: '\\u2309',\n  lfloor: '\\u230A',\n  rfloor: '\\u230B',\n  lang: '\\u2329',\n  rang: '\\u232A',\n  loz: '\\u25CA',\n  spades: '\\u2660',\n  clubs: '\\u2663',\n  hearts: '\\u2665',\n  diams: '\\u2666'\n};\n/package.json\u0002E{\n  \"name\": \"acorn-jsx\",\n  \"description\": \"Modern, fast React.js JSX parser\",\n  \"homepage\": \"https://github.com/acornjs/acorn-jsx\",\n  \"version\": \"5.3.2\",\n  \"maintainers\": [\n    {\n      \"name\": \"Ingvar Stepanyan\",\n      \"email\": \"me@rreverser.com\",\n      \"web\": \"http://rreverser.com/\"\n    }\n  ],\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/acornjs/acorn-jsx\"\n  },\n  \"license\": \"MIT\",\n  \"scripts\": {\n    \"test\": \"node test/run.js\"\n  },\n  \"peerDependencies\": {\n    \"acorn\": \"^6.0.0 || ^7.0.0 || ^8.0.0\"\n  },\n  \"devDependencies\": {\n    \"acorn\": \"^8.0.1\"\n  }\n}\n/README.md\u0007# Acorn-JSX\n\n[![Build Status](https://travis-ci.org/acornjs/acorn-jsx.svg?branch=master)](https://travis-ci.org/acornjs/acorn-jsx)\n[![NPM version](https://img.shields.io/npm/v/acorn-jsx.svg)](https://www.npmjs.org/package/acorn-jsx)\n\nThis is plugin for [Acorn](http://marijnhaverbeke.nl/acorn/) - a tiny, fast JavaScript parser, written completely in JavaScript.\n\nIt was created as an experimental alternative, faster [React.js JSX](http://facebook.github.io/react/docs/jsx-in-depth.html) parser. Later, it replaced the [official parser](https://github.com/facebookarchive/esprima) and these days is used by many prominent development tools.\n\n## Transpiler\n\nPlease note that this tool only parses source code to JSX AST, which is useful for various language tools and services. If you want to transpile your code to regular ES5-compliant JavaScript with source map, check out [Babel](https://babeljs.io/) and [Buble](https://buble.surge.sh/) transpilers which use `acorn-jsx` under the hood.\n\n## Usage\n\nRequiring this module provides you with an Acorn plugin that you can use like this:\n\n```javascript\nvar acorn = require(\"acorn\");\nvar jsx = require(\"acorn-jsx\");\nacorn.Parser.extend(jsx()).parse(\"my(<jsx/>, 'code');\");\n```\n\nNote that official spec doesn't support mix of XML namespaces and object-style access in tag names (#27) like in `<namespace:Object.Property />`, so it was deprecated in `acorn-jsx@3.0`. If you still want to opt-in to support of such constructions, you can pass the following option:\n\n```javascript\nacorn.Parser.extend(jsx({ allowNamespacedObjects: true }))\n```\n\nAlso, since most apps use pure React transformer, a new option was introduced that allows to prohibit namespaces completely:\n\n```javascript\nacorn.Parser.extend(jsx({ allowNamespaces: false }))\n```\n\nNote that by default `allowNamespaces` is enabled for spec compliancy.\n\n## License\n\nThis plugin is issued under the [MIT license](./LICENSE).\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/YWNvcm5AOC44LjI=",
    "content": "/dist/bin.js\f'use strict';\n\nvar path = require('path');\nvar fs = require('fs');\nvar acorn = require('./acorn.js');\n\nfunction _interopNamespaceDefault(e) {\n  var n = Object.create(null);\n  if (e) {\n    Object.keys(e).forEach(function (k) {\n      if (k !== 'default') {\n        var d = Object.getOwnPropertyDescriptor(e, k);\n        Object.defineProperty(n, k, d.get ? d : {\n          enumerable: true,\n          get: function () { return e[k]; }\n        });\n      }\n    });\n  }\n  n.default = e;\n  return Object.freeze(n);\n}\n\nvar acorn__namespace = /*#__PURE__*/_interopNamespaceDefault(acorn);\n\nvar inputFilePaths = [], forceFileName = false, fileMode = false, silent = false, compact = false, tokenize = false;\nvar options = {};\n\nfunction help(status) {\n  var print = (status === 0) ? console.log : console.error;\n  print(\"usage: \" + path.basename(process.argv[1]) + \" [--ecma3|--ecma5|--ecma6|--ecma7|--ecma8|--ecma9|...|--ecma2015|--ecma2016|--ecma2017|--ecma2018|...]\");\n  print(\"        [--tokenize] [--locations] [--allow-hash-bang] [--allow-await-outside-function] [--compact] [--silent] [--module] [--help] [--] [<infile>...]\");\n  process.exit(status);\n}\n\nfor (var i = 2; i < process.argv.length; ++i) {\n  var arg = process.argv[i];\n  if (arg[0] !== \"-\" || arg === \"-\") { inputFilePaths.push(arg); }\n  else if (arg === \"--\") {\n    inputFilePaths.push.apply(inputFilePaths, process.argv.slice(i + 1));\n    forceFileName = true;\n    break\n  } else if (arg === \"--locations\") { options.locations = true; }\n  else if (arg === \"--allow-hash-bang\") { options.allowHashBang = true; }\n  else if (arg === \"--allow-await-outside-function\") { options.allowAwaitOutsideFunction = true; }\n  else if (arg === \"--silent\") { silent = true; }\n  else if (arg === \"--compact\") { compact = true; }\n  else if (arg === \"--help\") { help(0); }\n  else if (arg === \"--tokenize\") { tokenize = true; }\n  else if (arg === \"--module\") { options.sourceType = \"module\"; }\n  else {\n    var match = arg.match(/^--ecma(\\d+)$/);\n    if (match)\n      { options.ecmaVersion = +match[1]; }\n    else\n      { help(1); }\n  }\n}\n\nfunction run(codeList) {\n  var result = [], fileIdx = 0;\n  try {\n    codeList.forEach(function (code, idx) {\n      fileIdx = idx;\n      if (!tokenize) {\n        result = acorn__namespace.parse(code, options);\n        options.program = result;\n      } else {\n        var tokenizer = acorn__namespace.tokenizer(code, options), token;\n        do {\n          token = tokenizer.getToken();\n          result.push(token);\n        } while (token.type !== acorn__namespace.tokTypes.eof)\n      }\n    });\n  } catch (e) {\n    console.error(fileMode ? e.message.replace(/\\(\\d+:\\d+\\)$/, function (m) { return m.slice(0, 1) + inputFilePaths[fileIdx] + \" \" + m.slice(1); }) : e.message);\n    process.exit(1);\n  }\n  if (!silent) { console.log(JSON.stringify(result, null, compact ? null : 2)); }\n}\n\nif (fileMode = inputFilePaths.length && (forceFileName || !inputFilePaths.includes(\"-\") || inputFilePaths.length !== 1)) {\n  run(inputFilePaths.map(function (path) { return fs.readFileSync(path, \"utf8\"); }));\n} else {\n  var code = \"\";\n  process.stdin.resume();\n  process.stdin.on(\"data\", function (chunk) { return code += chunk; });\n  process.stdin.on(\"end\", function () { return run([code]); });\n}\n/CHANGELOG.mdM~## 8.8.2 (2023-01-23)\n\n### Bug fixes\n\nFix a bug that caused `allowHashBang` to be set to false when not provided, even with `ecmaVersion >= 14`.\n\nFix an exception when passing no option object to `parse` or `new Parser`.\n\nFix incorrect parse error on `if (0) let\\n[astral identifier char]`.\n\n## 8.8.1 (2022-10-24)\n\n### Bug fixes\n\nMake type for `Comment` compatible with estree types.\n\n## 8.8.0 (2022-07-21)\n\n### Bug fixes\n\nAllow parentheses around spread args in destructuring object assignment.\n\nFix an issue where the tree contained `directive` properties in when parsing with a language version that doesn't support them.\n\n### New features\n\nSupport hashbang comments by default in ECMAScript 2023 and later.\n\n## 8.7.1 (2021-04-26)\n\n### Bug fixes\n\nStop handling `\"use strict\"` directives in ECMAScript versions before 5.\n\nFix an issue where duplicate quoted export names in `export *` syntax were incorrectly checked.\n\nAdd missing type for `tokTypes`.\n\n## 8.7.0 (2021-12-27)\n\n### New features\n\nSupport quoted export names.\n\nUpgrade to Unicode 14.\n\nAdd support for Unicode 13 properties in regular expressions.\n\n### Bug fixes\n\nUse a loop to find line breaks, because the existing regexp search would overrun the end of the searched range and waste a lot of time in minified code.\n\n## 8.6.0 (2021-11-18)\n\n### Bug fixes\n\nFix a bug where an object literal with multiple `__proto__` properties would incorrectly be accepted if a later property value held an assigment.\n\n### New features\n\nSupport class private fields with the `in` operator.\n\n## 8.5.0 (2021-09-06)\n\n### Bug fixes\n\nImprove context-dependent tokenization in a number of corner cases.\n\nFix location tracking after a 0x2028 or 0x2029 character in a string literal (which before did not increase the line number).\n\nFix an issue where arrow function bodies in for loop context would inappropriately consume `in` operators.\n\nFix wrong end locations stored on SequenceExpression nodes.\n\nImplement restriction that `for`/`of` loop LHS can't start with `let`.\n\n### New features\n\nAdd support for ES2022 class static blocks.\n\nAllow multiple input files to be passed to the CLI tool.\n\n## 8.4.1 (2021-06-24)\n\n### Bug fixes\n\nFix a bug where `allowAwaitOutsideFunction` would allow `await` in class field initializers, and setting `ecmaVersion` to 13 or higher would allow top-level await in non-module sources.\n\n## 8.4.0 (2021-06-11)\n\n### New features\n\nA new option, `allowSuperOutsideMethod`, can be used to suppress the error when `super` is used in the wrong context.\n\n## 8.3.0 (2021-05-31)\n\n### New features\n\nDefault `allowAwaitOutsideFunction` to true for ECMAScript 2022 an higher.\n\nAdd support for the `d` ([indices](https://github.com/tc39/proposal-regexp-match-indices)) regexp flag.\n\n## 8.2.4 (2021-05-04)\n\n### Bug fixes\n\nFix spec conformity in corner case 'for await (async of ...)'.\n\n## 8.2.3 (2021-05-04)\n\n### Bug fixes\n\nFix an issue where the library couldn't parse 'for (async of ...)'.\n\nFix a bug in UTF-16 decoding that would read characters incorrectly in some circumstances.\n\n## 8.2.2 (2021-04-29)\n\n### Bug fixes\n\nFix a bug where a class field initialized to an async arrow function wouldn't allow await inside it. Same issue existed for generator arrow functions with yield.\n\n## 8.2.1 (2021-04-24)\n\n### Bug fixes\n\nFix a regression introduced in 8.2.0 where static or async class methods with keyword names fail to parse.\n\n## 8.2.0 (2021-04-24)\n\n### New features\n\nAdd support for ES2022 class fields and private methods.\n\n## 8.1.1 (2021-04-12)\n\n### Various\n\nStop shipping source maps in the NPM package.\n\n## 8.1.0 (2021-03-09)\n\n### Bug fixes\n\nFix a spurious error in nested destructuring arrays.\n\n### New features\n\nExpose `allowAwaitOutsideFunction` in CLI interface.\n\nMake `allowImportExportAnywhere` also apply to `import.meta`.\n\n## 8.0.5 (2021-01-25)\n\n### Bug fixes\n\nAdjust package.json to work with Node 12.16.0 and 13.0-13.6.\n\n## 8.0.4 (2020-10-05)\n\n### Bug fixes\n\nMake `await x ** y` an error, following the spec.\n\nFix potentially exponential regular expression.\n\n## 8.0.3 (2020-10-02)\n\n### Bug fixes\n\nFix a wasteful loop during `Parser` creation when setting `ecmaVersion` to `\"latest\"`.\n\n## 8.0.2 (2020-09-30)\n\n### Bug fixes\n\nMake the TypeScript types reflect the current allowed values for `ecmaVersion`.\n\nFix another regexp/division tokenizer issue.\n\n## 8.0.1 (2020-08-12)\n\n### Bug fixes\n\nProvide the correct value in the `version` export.\n\n## 8.0.0 (2020-08-12)\n\n### Bug fixes\n\nDisallow expressions like `(a = b) = c`.\n\nMake non-octal escape sequences a syntax error in strict mode.\n\n### New features\n\nThe package can now be loaded directly as an ECMAScript module in node 13+.\n\nUpdate to the set of Unicode properties from ES2021.\n\n### Breaking changes\n\nThe `ecmaVersion` option is now required. For the moment, omitting it will still work with a warning, but that will change in a future release.\n\nSome changes to method signatures that may be used by plugins.\n\n## 7.4.0 (2020-08-03)\n\n### New features\n\nAdd support for logical assignment operators.\n\nAdd support for numeric separators.\n\n## 7.3.1 (2020-06-11)\n\n### Bug fixes\n\nMake the string in the `version` export match the actual library version.\n\n## 7.3.0 (2020-06-11)\n\n### Bug fixes\n\nFix a bug that caused parsing of object patterns with a property named `set` that had a default value to fail.\n\n### New features\n\nAdd support for optional chaining (`?.`).\n\n## 7.2.0 (2020-05-09)\n\n### Bug fixes\n\nFix precedence issue in parsing of async arrow functions.\n\n### New features\n\nAdd support for nullish coalescing.\n\nAdd support for `import.meta`.\n\nSupport `export * as ...` syntax.\n\nUpgrade to Unicode 13.\n\n## 6.4.1 (2020-03-09)\n\n### Bug fixes\n\nMore carefully check for valid UTF16 surrogate pairs in regexp validator.\n\n## 7.1.1 (2020-03-01)\n\n### Bug fixes\n\nTreat `\\8` and `\\9` as invalid escapes in template strings.\n\nAllow unicode escapes in property names that are keywords.\n\nDon't error on an exponential operator expression as argument to `await`.\n\nMore carefully check for valid UTF16 surrogate pairs in regexp validator.\n\n## 7.1.0 (2019-09-24)\n\n### Bug fixes\n\nDisallow trailing object literal commas when ecmaVersion is less than 5.\n\n### New features\n\nAdd a static `acorn` property to the `Parser` class that contains the entire module interface, to allow plugins to access the instance of the library that they are acting on.\n\n## 7.0.0 (2019-08-13)\n\n### Breaking changes\n\nChanges the node format for dynamic imports to use the `ImportExpression` node type, as defined in [ESTree](https://github.com/estree/estree/blob/master/es2020.md#importexpression).\n\nMakes 10 (ES2019) the default value for the `ecmaVersion` option.\n\n## 6.3.0 (2019-08-12)\n\n### New features\n\n`sourceType: \"module\"` can now be used even when `ecmaVersion` is less than 6, to parse module-style code that otherwise conforms to an older standard.\n\n## 6.2.1 (2019-07-21)\n\n### Bug fixes\n\nFix bug causing Acorn to treat some characters as identifier characters that shouldn't be treated as such.\n\nFix issue where setting the `allowReserved` option to `\"never\"` allowed reserved words in some circumstances.\n\n## 6.2.0 (2019-07-04)\n\n### Bug fixes\n\nImprove valid assignment checking in `for`/`in` and `for`/`of` loops.\n\nDisallow binding `let` in patterns.\n\n### New features\n\nSupport bigint syntax with `ecmaVersion` >= 11.\n\nSupport dynamic `import` syntax with `ecmaVersion` >= 11.\n\nUpgrade to Unicode version 12.\n\n## 6.1.1 (2019-02-27)\n\n### Bug fixes\n\nFix bug that caused parsing default exports of with names to fail.\n\n## 6.1.0 (2019-02-08)\n\n### Bug fixes\n\nFix scope checking when redefining a `var` as a lexical binding.\n\n### New features\n\nSplit up `parseSubscripts` to use an internal `parseSubscript` method to make it easier to extend with plugins.\n\n## 6.0.7 (2019-02-04)\n\n### Bug fixes\n\nCheck that exported bindings are defined.\n\nDon't treat `\\u180e` as a whitespace character.\n\nCheck for duplicate parameter names in methods.\n\nDon't allow shorthand properties when they are generators or async methods.\n\nForbid binding `await` in async arrow function's parameter list.\n\n## 6.0.6 (2019-01-30)\n\n### Bug fixes\n\nThe content of class declarations and expressions is now always parsed in strict mode.\n\nDon't allow `let` or `const` to bind the variable name `let`.\n\nTreat class declarations as lexical.\n\nDon't allow a generator function declaration as the sole body of an `if` or `else`.\n\nIgnore `\"use strict\"` when after an empty statement.\n\nAllow string line continuations with special line terminator characters.\n\nTreat `for` bodies as part of the `for` scope when checking for conflicting bindings.\n\nFix bug with parsing `yield` in a `for` loop initializer.\n\nImplement special cases around scope checking for functions.\n\n## 6.0.5 (2019-01-02)\n\n### Bug fixes\n\nFix TypeScript type for `Parser.extend` and add `allowAwaitOutsideFunction` to options type.\n\nDon't treat `let` as a keyword when the next token is `{` on the next line.\n\nFix bug that broke checking for parentheses around an object pattern in a destructuring assignment when `preserveParens` was on.\n\n## 6.0.4 (2018-11-05)\n\n### Bug fixes\n\nFurther improvements to tokenizing regular expressions in corner cases.\n\n## 6.0.3 (2018-11-04)\n\n### Bug fixes\n\nFix bug in tokenizing an expression-less return followed by a function followed by a regular expression.\n\nRemove stray symlink in the package tarball.\n\n## 6.0.2 (2018-09-26)\n\n### Bug fixes\n\nFix bug where default expressions could fail to parse inside an object destructuring assignment expression.\n\n## 6.0.1 (2018-09-14)\n\n### Bug fixes\n\nFix wrong value in `version` export.\n\n## 6.0.0 (2018-09-14)\n\n### Bug fixes\n\nBetter handle variable-redefinition checks for catch bindings and functions directly under if statements.\n\nForbid `new.target` in top-level arrow functions.\n\nFix issue with parsing a regexp after `yield` in some contexts.\n\n### New features\n\nThe package now comes with TypeScript definitions.\n\n### Breaking changes\n\nThe default value of the `ecmaVersion` option is now 9 (2018).\n\nPlugins work differently, and will have to be rewritten to work with this version.\n\nThe loose parser and walker have been moved into separate packages (`acorn-loose` and `acorn-walk`).\n\n## 5.7.3 (2018-09-10)\n\n### Bug fixes\n\nFix failure to tokenize regexps after expressions like `x.of`.\n\nBetter error message for unterminated template literals.\n\n## 5.7.2 (2018-08-24)\n\n### Bug fixes\n\nProperly handle `allowAwaitOutsideFunction` in for statements.\n\nTreat function declarations at the top level of modules like let bindings.\n\nDon't allow async function declarations as the only statement under a label.\n\n## 5.7.0 (2018-06-15)\n\n### New features\n\nUpgraded to Unicode 11.\n\n## 5.6.0 (2018-05-31)\n\n### New features\n\nAllow U+2028 and U+2029 in string when ECMAVersion >= 10.\n\nAllow binding-less catch statements when ECMAVersion >= 10.\n\nAdd `allowAwaitOutsideFunction` option for parsing top-level `await`.\n\n## 5.5.3 (2018-03-08)\n\n### Bug fixes\n\nA _second_ republish of the code in 5.5.1, this time with yarn, to hopefully get valid timestamps.\n\n## 5.5.2 (2018-03-08)\n\n### Bug fixes\n\nA republish of the code in 5.5.1 in an attempt to solve an issue with the file timestamps in the npm package being 0.\n\n## 5.5.1 (2018-03-06)\n\n### Bug fixes\n\nFix misleading error message for octal escapes in template strings.\n\n## 5.5.0 (2018-02-27)\n\n### New features\n\nThe identifier character categorization is now based on Unicode version 10.\n\nAcorn will now validate the content of regular expressions, including new ES9 features.\n\n## 5.4.0 (2018-02-01)\n\n### Bug fixes\n\nDisallow duplicate or escaped flags on regular expressions.\n\nDisallow octal escapes in strings in strict mode.\n\n### New features\n\nAdd support for async iteration.\n\nAdd support for object spread and rest.\n\n## 5.3.0 (2017-12-28)\n\n### Bug fixes\n\nFix parsing of floating point literals with leading zeroes in loose mode.\n\nAllow duplicate property names in object patterns.\n\nDon't allow static class methods named `prototype`.\n\nDisallow async functions directly under `if` or `else`.\n\nParse right-hand-side of `for`/`of` as an assignment expression.\n\nStricter parsing of `for`/`in`.\n\nDon't allow unicode escapes in contextual keywords.\n\n### New features\n\nParsing class members was factored into smaller methods to allow plugins to hook into it.\n\n## 5.2.1 (2017-10-30)\n\n### Bug fixes\n\nFix a token context corruption bug.\n\n## 5.2.0 (2017-10-30)\n\n### Bug fixes\n\nFix token context tracking for `class` and `function` in property-name position.\n\nMake sure `%*` isn't parsed as a valid operator.\n\nAllow shorthand properties `get` and `set` to be followed by default values.\n\nDisallow `super` when not in callee or object position.\n\n### New features\n\nSupport [`directive` property](https://github.com/estree/estree/compare/b3de58c9997504d6fba04b72f76e6dd1619ee4eb...1da8e603237144f44710360f8feb7a9977e905e0) on directive expression statements.\n\n## 5.1.2 (2017-09-04)\n\n### Bug fixes\n\nDisable parsing of legacy HTML-style comments in modules.\n\nFix parsing of async methods whose names are keywords.\n\n## 5.1.1 (2017-07-06)\n\n### Bug fixes\n\nFix problem with disambiguating regexp and division after a class.\n\n## 5.1.0 (2017-07-05)\n\n### Bug fixes\n\nFix tokenizing of regexps in an object-desctructuring `for`/`of` loop and after `yield`.\n\nParse zero-prefixed numbers with non-octal digits as decimal.\n\nAllow object/array patterns in rest parameters.\n\nDon't error when `yield` is used as a property name.\n\nAllow `async` as a shorthand object property.\n\n### New features\n\nImplement the [template literal revision proposal](https://github.com/tc39/proposal-template-literal-revision) for ES9.\n\n## 5.0.3 (2017-04-01)\n\n### Bug fixes\n\nFix spurious duplicate variable definition errors for named functions.\n\n## 5.0.2 (2017-03-30)\n\n### Bug fixes\n\nA binary operator after a parenthesized arrow expression is no longer incorrectly treated as an error.\n\n## 5.0.0 (2017-03-28)\n\n### Bug fixes\n\nRaise an error for duplicated lexical bindings.\n\nFix spurious error when an assignement expression occurred after a spread expression.\n\nAccept regular expressions after `of` (in `for`/`of`), `yield` (in a generator), and braced arrow functions.\n\nAllow labels in front or `var` declarations, even in strict mode.\n\n### Breaking changes\n\nParse declarations following `export default` as declaration nodes, not expressions. This means that class and function declarations nodes can now have `null` as their `id`.\n\n## 4.0.11 (2017-02-07)\n\n### Bug fixes\n\nAllow all forms of member expressions to be parenthesized as lvalue.\n\n## 4.0.10 (2017-02-07)\n\n### Bug fixes\n\nDon't expect semicolons after default-exported functions or classes, even when they are expressions.\n\nCheck for use of `'use strict'` directives in non-simple parameter functions, even when already in strict mode.\n\n## 4.0.9 (2017-02-06)\n\n### Bug fixes\n\nFix incorrect error raised for parenthesized simple assignment targets, so that `(x) = 1` parses again.\n\n## 4.0.8 (2017-02-03)\n\n### Bug fixes\n\nSolve spurious parenthesized pattern errors by temporarily erring on the side of accepting programs that our delayed errors don't handle correctly yet.\n\n## 4.0.7 (2017-02-02)\n\n### Bug fixes\n\nAccept invalidly rejected code like `(x).y = 2` again.\n\nDon't raise an error when a function _inside_ strict code has a non-simple parameter list.\n\n## 4.0.6 (2017-02-02)\n\n### Bug fixes\n\nFix exponential behavior (manifesting itself as a complete hang for even relatively small source files) introduced by the new 'use strict' check.\n\n## 4.0.5 (2017-02-02)\n\n### Bug fixes\n\nDisallow parenthesized pattern expressions.\n\nAllow keywords as export names.\n\nDon't allow the `async` keyword to be parenthesized.\n\nProperly raise an error when a keyword contains a character escape.\n\nAllow `\"use strict\"` to appear after other string literal expressions.\n\nDisallow labeled declarations.\n\n## 4.0.4 (2016-12-19)\n\n### Bug fixes\n\nFix crash when `export` was followed by a keyword that can't be\nexported.\n\n## 4.0.3 (2016-08-16)\n\n### Bug fixes\n\nAllow regular function declarations inside single-statement `if` branches in loose mode. Forbid them entirely in strict mode.\n\nProperly parse properties named `async` in ES2017 mode.\n\nFix bug where reserved words were broken in ES2017 mode.\n\n## 4.0.2 (2016-08-11)\n\n### Bug fixes\n\nDon't ignore period or 'e' characters after octal numbers.\n\nFix broken parsing for call expressions in default parameter values of arrow functions.\n\n## 4.0.1 (2016-08-08)\n\n### Bug fixes\n\nFix false positives in duplicated export name errors.\n\n## 4.0.0 (2016-08-07)\n\n### Breaking changes\n\nThe default `ecmaVersion` option value is now 7.\n\nA number of internal method signatures changed, so plugins might need to be updated.\n\n### Bug fixes\n\nThe parser now raises errors on duplicated export names.\n\n`arguments` and `eval` can now be used in shorthand properties.\n\nDuplicate parameter names in non-simple argument lists now always produce an error.\n\n### New features\n\nThe `ecmaVersion` option now also accepts year-style version numbers\n(2015, etc).\n\nSupport for `async`/`await` syntax when `ecmaVersion` is >= 8.\n\nSupport for trailing commas in call expressions when `ecmaVersion` is >= 8.\n\n## 3.3.0 (2016-07-25)\n\n### Bug fixes\n\nFix bug in tokenizing of regexp operator after a function declaration.\n\nFix parser crash when parsing an array pattern with a hole.\n\n### New features\n\nImplement check against complex argument lists in functions that enable strict mode in ES7.\n\n## 3.2.0 (2016-06-07)\n\n### Bug fixes\n\nImprove handling of lack of unicode regexp support in host\nenvironment.\n\nProperly reject shorthand properties whose name is a keyword.\n\n### New features\n\nVisitors created with `visit.make` now have their base as _prototype_, rather than copying properties into a fresh object.\n\n## 3.1.0 (2016-04-18)\n\n### Bug fixes\n\nProperly tokenize the division operator directly after a function expression.\n\nAllow trailing comma in destructuring arrays.\n\n## 3.0.4 (2016-02-25)\n\n### Fixes\n\nAllow update expressions as left-hand-side of the ES7 exponential operator.\n\n## 3.0.2 (2016-02-10)\n\n### Fixes\n\nFix bug that accidentally made `undefined` a reserved word when parsing ES7.\n\n## 3.0.0 (2016-02-10)\n\n### Breaking changes\n\nThe default value of the `ecmaVersion` option is now 6 (used to be 5).\n\nSupport for comprehension syntax (which was dropped from the draft spec) has been removed.\n\n### Fixes\n\n`let` and `yield` are now “contextual keywords”, meaning you can mostly use them as identifiers in ES5 non-strict code.\n\nA parenthesized class or function expression after `export default` is now parsed correctly.\n\n### New features\n\nWhen `ecmaVersion` is set to 7, Acorn will parse the exponentiation operator (`**`).\n\nThe identifier character ranges are now based on Unicode 8.0.0.\n\nPlugins can now override the `raiseRecoverable` method to override the way non-critical errors are handled.\n\n## 2.7.0 (2016-01-04)\n\n### Fixes\n\nStop allowing rest parameters in setters.\n\nDisallow `y` rexexp flag in ES5.\n\nDisallow `\\00` and `\\000` escapes in strict mode.\n\nRaise an error when an import name is a reserved word.\n\n## 2.6.2 (2015-11-10)\n\n### Fixes\n\nDon't crash when no options object is passed.\n\n## 2.6.0 (2015-11-09)\n\n### Fixes\n\nAdd `await` as a reserved word in module sources.\n\nDisallow `yield` in a parameter default value for a generator.\n\nForbid using a comma after a rest pattern in an array destructuring.\n\n### New features\n\nSupport parsing stdin in command-line tool.\n\n## 2.5.0 (2015-10-27)\n\n### Fixes\n\nFix tokenizer support in the command-line tool.\n\nStop allowing `new.target` outside of functions.\n\nRemove legacy `guard` and `guardedHandler` properties from try nodes.\n\nStop allowing multiple `__proto__` properties on an object literal in strict mode.\n\nDon't allow rest parameters to be non-identifier patterns.\n\nCheck for duplicate paramter names in arrow functions.\n/dist/acorn.js\u0000\u0003S(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n  typeof define === 'function' && define.amd ? define(['exports'], factory) :\n  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.acorn = {}));\n})(this, (function (exports) { 'use strict';\n\n  // This file was generated. Do not modify manually!\n  var astralIdentifierCodes = [509, 0, 227, 0, 150, 4, 294, 9, 1368, 2, 2, 1, 6, 3, 41, 2, 5, 0, 166, 1, 574, 3, 9, 9, 370, 1, 81, 2, 71, 10, 50, 3, 123, 2, 54, 14, 32, 10, 3, 1, 11, 3, 46, 10, 8, 0, 46, 9, 7, 2, 37, 13, 2, 9, 6, 1, 45, 0, 13, 2, 49, 13, 9, 3, 2, 11, 83, 11, 7, 0, 3, 0, 158, 11, 6, 9, 7, 3, 56, 1, 2, 6, 3, 1, 3, 2, 10, 0, 11, 1, 3, 6, 4, 4, 193, 17, 10, 9, 5, 0, 82, 19, 13, 9, 214, 6, 3, 8, 28, 1, 83, 16, 16, 9, 82, 12, 9, 9, 84, 14, 5, 9, 243, 14, 166, 9, 71, 5, 2, 1, 3, 3, 2, 0, 2, 1, 13, 9, 120, 6, 3, 6, 4, 0, 29, 9, 41, 6, 2, 3, 9, 0, 10, 10, 47, 15, 406, 7, 2, 7, 17, 9, 57, 21, 2, 13, 123, 5, 4, 0, 2, 1, 2, 6, 2, 0, 9, 9, 49, 4, 2, 1, 2, 4, 9, 9, 330, 3, 10, 1, 2, 0, 49, 6, 4, 4, 14, 9, 5351, 0, 7, 14, 13835, 9, 87, 9, 39, 4, 60, 6, 26, 9, 1014, 0, 2, 54, 8, 3, 82, 0, 12, 1, 19628, 1, 4706, 45, 3, 22, 543, 4, 4, 5, 9, 7, 3, 6, 31, 3, 149, 2, 1418, 49, 513, 54, 5, 49, 9, 0, 15, 0, 23, 4, 2, 14, 1361, 6, 2, 16, 3, 6, 2, 1, 2, 4, 101, 0, 161, 6, 10, 9, 357, 0, 62, 13, 499, 13, 983, 6, 110, 6, 6, 9, 4759, 9, 787719, 239];\n\n  // This file was generated. Do not modify manually!\n  var astralIdentifierStartCodes = [0, 11, 2, 25, 2, 18, 2, 1, 2, 14, 3, 13, 35, 122, 70, 52, 268, 28, 4, 48, 48, 31, 14, 29, 6, 37, 11, 29, 3, 35, 5, 7, 2, 4, 43, 157, 19, 35, 5, 35, 5, 39, 9, 51, 13, 10, 2, 14, 2, 6, 2, 1, 2, 10, 2, 14, 2, 6, 2, 1, 68, 310, 10, 21, 11, 7, 25, 5, 2, 41, 2, 8, 70, 5, 3, 0, 2, 43, 2, 1, 4, 0, 3, 22, 11, 22, 10, 30, 66, 18, 2, 1, 11, 21, 11, 25, 71, 55, 7, 1, 65, 0, 16, 3, 2, 2, 2, 28, 43, 28, 4, 28, 36, 7, 2, 27, 28, 53, 11, 21, 11, 18, 14, 17, 111, 72, 56, 50, 14, 50, 14, 35, 349, 41, 7, 1, 79, 28, 11, 0, 9, 21, 43, 17, 47, 20, 28, 22, 13, 52, 58, 1, 3, 0, 14, 44, 33, 24, 27, 35, 30, 0, 3, 0, 9, 34, 4, 0, 13, 47, 15, 3, 22, 0, 2, 0, 36, 17, 2, 24, 20, 1, 64, 6, 2, 0, 2, 3, 2, 14, 2, 9, 8, 46, 39, 7, 3, 1, 3, 21, 2, 6, 2, 1, 2, 4, 4, 0, 19, 0, 13, 4, 159, 52, 19, 3, 21, 2, 31, 47, 21, 1, 2, 0, 185, 46, 42, 3, 37, 47, 21, 0, 60, 42, 14, 0, 72, 26, 38, 6, 186, 43, 117, 63, 32, 7, 3, 0, 3, 7, 2, 1, 2, 23, 16, 0, 2, 0, 95, 7, 3, 38, 17, 0, 2, 0, 29, 0, 11, 39, 8, 0, 22, 0, 12, 45, 20, 0, 19, 72, 264, 8, 2, 36, 18, 0, 50, 29, 113, 6, 2, 1, 2, 37, 22, 0, 26, 5, 2, 1, 2, 31, 15, 0, 328, 18, 16, 0, 2, 12, 2, 33, 125, 0, 80, 921, 103, 110, 18, 195, 2637, 96, 16, 1071, 18, 5, 4026, 582, 8634, 568, 8, 30, 18, 78, 18, 29, 19, 47, 17, 3, 32, 20, 6, 18, 689, 63, 129, 74, 6, 0, 67, 12, 65, 1, 2, 0, 29, 6135, 9, 1237, 43, 8, 8936, 3, 2, 6, 2, 1, 2, 290, 16, 0, 30, 2, 3, 0, 15, 3, 9, 395, 2309, 106, 6, 12, 4, 8, 8, 9, 5991, 84, 2, 70, 2, 1, 3, 0, 3, 1, 3, 3, 2, 11, 2, 0, 2, 6, 2, 64, 2, 3, 3, 7, 2, 6, 2, 27, 2, 3, 2, 4, 2, 0, 4, 6, 2, 339, 3, 24, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 7, 1845, 30, 7, 5, 262, 61, 147, 44, 11, 6, 17, 0, 322, 29, 19, 43, 485, 27, 757, 6, 2, 3, 2, 1, 2, 14, 2, 196, 60, 67, 8, 0, 1205, 3, 2, 26, 2, 1, 2, 0, 3, 0, 2, 9, 2, 3, 2, 0, 2, 0, 7, 0, 5, 0, 2, 0, 2, 0, 2, 2, 2, 1, 2, 0, 3, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 1, 2, 0, 3, 3, 2, 6, 2, 3, 2, 3, 2, 0, 2, 9, 2, 16, 6, 2, 2, 4, 2, 16, 4421, 42719, 33, 4153, 7, 221, 3, 5761, 15, 7472, 3104, 541, 1507, 4938, 6, 4191];\n\n  // This file was generated. Do not modify manually!\n  var nonASCIIidentifierChars = \"\\u200c\\u200d\\xb7\\u0300-\\u036f\\u0387\\u0483-\\u0487\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u064b-\\u0669\\u0670\\u06d6-\\u06dc\\u06df-\\u06e4\\u06e7\\u06e8\\u06ea-\\u06ed\\u06f0-\\u06f9\\u0711\\u0730-\\u074a\\u07a6-\\u07b0\\u07c0-\\u07c9\\u07eb-\\u07f3\\u07fd\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0859-\\u085b\\u0898-\\u089f\\u08ca-\\u08e1\\u08e3-\\u0903\\u093a-\\u093c\\u093e-\\u094f\\u0951-\\u0957\\u0962\\u0963\\u0966-\\u096f\\u0981-\\u0983\\u09bc\\u09be-\\u09c4\\u09c7\\u09c8\\u09cb-\\u09cd\\u09d7\\u09e2\\u09e3\\u09e6-\\u09ef\\u09fe\\u0a01-\\u0a03\\u0a3c\\u0a3e-\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a66-\\u0a71\\u0a75\\u0a81-\\u0a83\\u0abc\\u0abe-\\u0ac5\\u0ac7-\\u0ac9\\u0acb-\\u0acd\\u0ae2\\u0ae3\\u0ae6-\\u0aef\\u0afa-\\u0aff\\u0b01-\\u0b03\\u0b3c\\u0b3e-\\u0b44\\u0b47\\u0b48\\u0b4b-\\u0b4d\\u0b55-\\u0b57\\u0b62\\u0b63\\u0b66-\\u0b6f\\u0b82\\u0bbe-\\u0bc2\\u0bc6-\\u0bc8\\u0bca-\\u0bcd\\u0bd7\\u0be6-\\u0bef\\u0c00-\\u0c04\\u0c3c\\u0c3e-\\u0c44\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62\\u0c63\\u0c66-\\u0c6f\\u0c81-\\u0c83\\u0cbc\\u0cbe-\\u0cc4\\u0cc6-\\u0cc8\\u0cca-\\u0ccd\\u0cd5\\u0cd6\\u0ce2\\u0ce3\\u0ce6-\\u0cef\\u0cf3\\u0d00-\\u0d03\\u0d3b\\u0d3c\\u0d3e-\\u0d44\\u0d46-\\u0d48\\u0d4a-\\u0d4d\\u0d57\\u0d62\\u0d63\\u0d66-\\u0d6f\\u0d81-\\u0d83\\u0dca\\u0dcf-\\u0dd4\\u0dd6\\u0dd8-\\u0ddf\\u0de6-\\u0def\\u0df2\\u0df3\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0e50-\\u0e59\\u0eb1\\u0eb4-\\u0ebc\\u0ec8-\\u0ece\\u0ed0-\\u0ed9\\u0f18\\u0f19\\u0f20-\\u0f29\\u0f35\\u0f37\\u0f39\\u0f3e\\u0f3f\\u0f71-\\u0f84\\u0f86\\u0f87\\u0f8d-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u102b-\\u103e\\u1040-\\u1049\\u1056-\\u1059\\u105e-\\u1060\\u1062-\\u1064\\u1067-\\u106d\\u1071-\\u1074\\u1082-\\u108d\\u108f-\\u109d\\u135d-\\u135f\\u1369-\\u1371\\u1712-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b4-\\u17d3\\u17dd\\u17e0-\\u17e9\\u180b-\\u180d\\u180f-\\u1819\\u18a9\\u1920-\\u192b\\u1930-\\u193b\\u1946-\\u194f\\u19d0-\\u19da\\u1a17-\\u1a1b\\u1a55-\\u1a5e\\u1a60-\\u1a7c\\u1a7f-\\u1a89\\u1a90-\\u1a99\\u1ab0-\\u1abd\\u1abf-\\u1ace\\u1b00-\\u1b04\\u1b34-\\u1b44\\u1b50-\\u1b59\\u1b6b-\\u1b73\\u1b80-\\u1b82\\u1ba1-\\u1bad\\u1bb0-\\u1bb9\\u1be6-\\u1bf3\\u1c24-\\u1c37\\u1c40-\\u1c49\\u1c50-\\u1c59\\u1cd0-\\u1cd2\\u1cd4-\\u1ce8\\u1ced\\u1cf4\\u1cf7-\\u1cf9\\u1dc0-\\u1dff\\u203f\\u2040\\u2054\\u20d0-\\u20dc\\u20e1\\u20e5-\\u20f0\\u2cef-\\u2cf1\\u2d7f\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\ua620-\\ua629\\ua66f\\ua674-\\ua67d\\ua69e\\ua69f\\ua6f0\\ua6f1\\ua802\\ua806\\ua80b\\ua823-\\ua827\\ua82c\\ua880\\ua881\\ua8b4-\\ua8c5\\ua8d0-\\ua8d9\\ua8e0-\\ua8f1\\ua8ff-\\ua909\\ua926-\\ua92d\\ua947-\\ua953\\ua980-\\ua983\\ua9b3-\\ua9c0\\ua9d0-\\ua9d9\\ua9e5\\ua9f0-\\ua9f9\\uaa29-\\uaa36\\uaa43\\uaa4c\\uaa4d\\uaa50-\\uaa59\\uaa7b-\\uaa7d\\uaab0\\uaab2-\\uaab4\\uaab7\\uaab8\\uaabe\\uaabf\\uaac1\\uaaeb-\\uaaef\\uaaf5\\uaaf6\\uabe3-\\uabea\\uabec\\uabed\\uabf0-\\uabf9\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe2f\\ufe33\\ufe34\\ufe4d-\\ufe4f\\uff10-\\uff19\\uff3f\";\n\n  // This file was generated. Do not modify manually!\n  var nonASCIIidentifierStartChars = \"\\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\\u0560-\\u0588\\u05d0-\\u05ea\\u05ef-\\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\\u0860-\\u086a\\u0870-\\u0887\\u0889-\\u088e\\u08a0-\\u08c9\\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\\u09fc\\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\\u0c5d\\u0c60\\u0c61\\u0c80\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd\\u0cdd\\u0cde\\u0ce0\\u0ce1\\u0cf1\\u0cf2\\u0d04-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d\\u0d4e\\u0d54-\\u0d56\\u0d5f-\\u0d61\\u0d7a-\\u0d7f\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0e01-\\u0e30\\u0e32\\u0e33\\u0e40-\\u0e46\\u0e81\\u0e82\\u0e84\\u0e86-\\u0e8a\\u0e8c-\\u0ea3\\u0ea5\\u0ea7-\\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-\\u1711\\u171f-\\u1731\\u1740-\\u1751\\u1760-\\u176c\\u176e-\\u1770\\u1780-\\u17b3\\u17d7\\u17dc\\u1820-\\u1878\\u1880-\\u18a8\\u18aa\\u18b0-\\u18f5\\u1900-\\u191e\\u1950-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19b0-\\u19c9\\u1a00-\\u1a16\\u1a20-\\u1a54\\u1aa7\\u1b05-\\u1b33\\u1b45-\\u1b4c\\u1b83-\\u1ba0\\u1bae\\u1baf\\u1bba-\\u1be5\\u1c00-\\u1c23\\u1c4d-\\u1c4f\\u1c5a-\\u1c7d\\u1c80-\\u1c88\\u1c90-\\u1cba\\u1cbd-\\u1cbf\\u1ce9-\\u1cec\\u1cee-\\u1cf3\\u1cf5\\u1cf6\\u1cfa\\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-\\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-\\u312f\\u3131-\\u318e\\u31a0-\\u31bf\\u31f0-\\u31ff\\u3400-\\u4dbf\\u4e00-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a\\ua62b\\ua640-\\ua66e\\ua67f-\\ua69d\\ua6a0-\\ua6ef\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua7ca\\ua7d0\\ua7d1\\ua7d3\\ua7d5-\\ua7d9\\ua7f2-\\ua801\\ua803-\\ua805\\ua807-\\ua80a\\ua80c-\\ua822\\ua840-\\ua873\\ua882-\\ua8b3\\ua8f2-\\ua8f7\\ua8fb\\ua8fd\\ua8fe\\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-\\uab69\\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\";\n\n  // These are a run-length and offset encoded representation of the\n\n  // Reserved word lists for various dialects of the language\n\n  var reservedWords = {\n    3: \"abstract boolean byte char class double enum export extends final float goto implements import int interface long native package private protected public short static super synchronized throws transient volatile\",\n    5: \"class enum extends super const export import\",\n    6: \"enum\",\n    strict: \"implements interface let package private protected public static yield\",\n    strictBind: \"eval arguments\"\n  };\n\n  // And the keywords\n\n  var ecma5AndLessKeywords = \"break case catch continue debugger default do else finally for function if return switch throw try var while with null true false instanceof typeof void delete new in this\";\n\n  var keywords$1 = {\n    5: ecma5AndLessKeywords,\n    \"5module\": ecma5AndLessKeywords + \" export import\",\n    6: ecma5AndLessKeywords + \" const class extends export import super\"\n  };\n\n  var keywordRelationalOperator = /^in(stanceof)?$/;\n\n  // ## Character categories\n\n  var nonASCIIidentifierStart = new RegExp(\"[\" + nonASCIIidentifierStartChars + \"]\");\n  var nonASCIIidentifier = new RegExp(\"[\" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + \"]\");\n\n  // This has a complexity linear to the value of the code. The\n  // assumption is that looking up astral identifier characters is\n  // rare.\n  function isInAstralSet(code, set) {\n    var pos = 0x10000;\n    for (var i = 0; i < set.length; i += 2) {\n      pos += set[i];\n      if (pos > code) { return false }\n      pos += set[i + 1];\n      if (pos >= code) { return true }\n    }\n    return false\n  }\n\n  // Test whether a given character code starts an identifier.\n\n  function isIdentifierStart(code, astral) {\n    if (code < 65) { return code === 36 }\n    if (code < 91) { return true }\n    if (code < 97) { return code === 95 }\n    if (code < 123) { return true }\n    if (code <= 0xffff) { return code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code)) }\n    if (astral === false) { return false }\n    return isInAstralSet(code, astralIdentifierStartCodes)\n  }\n\n  // Test whether a given character is part of an identifier.\n\n  function isIdentifierChar(code, astral) {\n    if (code < 48) { return code === 36 }\n    if (code < 58) { return true }\n    if (code < 65) { return false }\n    if (code < 91) { return true }\n    if (code < 97) { return code === 95 }\n    if (code < 123) { return true }\n    if (code <= 0xffff) { return code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code)) }\n    if (astral === false) { return false }\n    return isInAstralSet(code, astralIdentifierStartCodes) || isInAstralSet(code, astralIdentifierCodes)\n  }\n\n  // ## Token types\n\n  // The assignment of fine-grained, information-carrying type objects\n  // allows the tokenizer to store the information it has about a\n  // token in a way that is very cheap for the parser to look up.\n\n  // All token type variables start with an underscore, to make them\n  // easy to recognize.\n\n  // The `beforeExpr` property is used to disambiguate between regular\n  // expressions and divisions. It is set on all token types that can\n  // be followed by an expression (thus, a slash after them would be a\n  // regular expression).\n  //\n  // The `startsExpr` property is used to check if the token ends a\n  // `yield` expression. It is set on all token types that either can\n  // directly start an expression (like a quotation mark) or can\n  // continue an expression (like the body of a string).\n  //\n  // `isLoop` marks a keyword as starting a loop, which is important\n  // to know when parsing a label, in order to allow or disallow\n  // continue jumps to that label.\n\n  var TokenType = function TokenType(label, conf) {\n    if ( conf === void 0 ) conf = {};\n\n    this.label = label;\n    this.keyword = conf.keyword;\n    this.beforeExpr = !!conf.beforeExpr;\n    this.startsExpr = !!conf.startsExpr;\n    this.isLoop = !!conf.isLoop;\n    this.isAssign = !!conf.isAssign;\n    this.prefix = !!conf.prefix;\n    this.postfix = !!conf.postfix;\n    this.binop = conf.binop || null;\n    this.updateContext = null;\n  };\n\n  function binop(name, prec) {\n    return new TokenType(name, {beforeExpr: true, binop: prec})\n  }\n  var beforeExpr = {beforeExpr: true}, startsExpr = {startsExpr: true};\n\n  // Map keyword names to token types.\n\n  var keywords = {};\n\n  // Succinct definitions of keyword token types\n  function kw(name, options) {\n    if ( options === void 0 ) options = {};\n\n    options.keyword = name;\n    return keywords[name] = new TokenType(name, options)\n  }\n\n  var types$1 = {\n    num: new TokenType(\"num\", startsExpr),\n    regexp: new TokenType(\"regexp\", startsExpr),\n    string: new TokenType(\"string\", startsExpr),\n    name: new TokenType(\"name\", startsExpr),\n    privateId: new TokenType(\"privateId\", startsExpr),\n    eof: new TokenType(\"eof\"),\n\n    // Punctuation token types.\n    bracketL: new TokenType(\"[\", {beforeExpr: true, startsExpr: true}),\n    bracketR: new TokenType(\"]\"),\n    braceL: new TokenType(\"{\", {beforeExpr: true, startsExpr: true}),\n    braceR: new TokenType(\"}\"),\n    parenL: new TokenType(\"(\", {beforeExpr: true, startsExpr: true}),\n    parenR: new TokenType(\")\"),\n    comma: new TokenType(\",\", beforeExpr),\n    semi: new TokenType(\";\", beforeExpr),\n    colon: new TokenType(\":\", beforeExpr),\n    dot: new TokenType(\".\"),\n    question: new TokenType(\"?\", beforeExpr),\n    questionDot: new TokenType(\"?.\"),\n    arrow: new TokenType(\"=>\", beforeExpr),\n    template: new TokenType(\"template\"),\n    invalidTemplate: new TokenType(\"invalidTemplate\"),\n    ellipsis: new TokenType(\"...\", beforeExpr),\n    backQuote: new TokenType(\"`\", startsExpr),\n    dollarBraceL: new TokenType(\"${\", {beforeExpr: true, startsExpr: true}),\n\n    // Operators. These carry several kinds of properties to help the\n    // parser use them properly (the presence of these properties is\n    // what categorizes them as operators).\n    //\n    // `binop`, when present, specifies that this operator is a binary\n    // operator, and will refer to its precedence.\n    //\n    // `prefix` and `postfix` mark the operator as a prefix or postfix\n    // unary operator.\n    //\n    // `isAssign` marks all of `=`, `+=`, `-=` etcetera, which act as\n    // binary operators with a very low precedence, that should result\n    // in AssignmentExpression nodes.\n\n    eq: new TokenType(\"=\", {beforeExpr: true, isAssign: true}),\n    assign: new TokenType(\"_=\", {beforeExpr: true, isAssign: true}),\n    incDec: new TokenType(\"++/--\", {prefix: true, postfix: true, startsExpr: true}),\n    prefix: new TokenType(\"!/~\", {beforeExpr: true, prefix: true, startsExpr: true}),\n    logicalOR: binop(\"||\", 1),\n    logicalAND: binop(\"&&\", 2),\n    bitwiseOR: binop(\"|\", 3),\n    bitwiseXOR: binop(\"^\", 4),\n    bitwiseAND: binop(\"&\", 5),\n    equality: binop(\"==/!=/===/!==\", 6),\n    relational: binop(\"</>/<=/>=\", 7),\n    bitShift: binop(\"<</>>/>>>\", 8),\n    plusMin: new TokenType(\"+/-\", {beforeExpr: true, binop: 9, prefix: true, startsExpr: true}),\n    modulo: binop(\"%\", 10),\n    star: binop(\"*\", 10),\n    slash: binop(\"/\", 10),\n    starstar: new TokenType(\"**\", {beforeExpr: true}),\n    coalesce: binop(\"??\", 1),\n\n    // Keyword token types.\n    _break: kw(\"break\"),\n    _case: kw(\"case\", beforeExpr),\n    _catch: kw(\"catch\"),\n    _continue: kw(\"continue\"),\n    _debugger: kw(\"debugger\"),\n    _default: kw(\"default\", beforeExpr),\n    _do: kw(\"do\", {isLoop: true, beforeExpr: true}),\n    _else: kw(\"else\", beforeExpr),\n    _finally: kw(\"finally\"),\n    _for: kw(\"for\", {isLoop: true}),\n    _function: kw(\"function\", startsExpr),\n    _if: kw(\"if\"),\n    _return: kw(\"return\", beforeExpr),\n    _switch: kw(\"switch\"),\n    _throw: kw(\"throw\", beforeExpr),\n    _try: kw(\"try\"),\n    _var: kw(\"var\"),\n    _const: kw(\"const\"),\n    _while: kw(\"while\", {isLoop: true}),\n    _with: kw(\"with\"),\n    _new: kw(\"new\", {beforeExpr: true, startsExpr: true}),\n    _this: kw(\"this\", startsExpr),\n    _super: kw(\"super\", startsExpr),\n    _class: kw(\"class\", startsExpr),\n    _extends: kw(\"extends\", beforeExpr),\n    _export: kw(\"export\"),\n    _import: kw(\"import\", startsExpr),\n    _null: kw(\"null\", startsExpr),\n    _true: kw(\"true\", startsExpr),\n    _false: kw(\"false\", startsExpr),\n    _in: kw(\"in\", {beforeExpr: true, binop: 7}),\n    _instanceof: kw(\"instanceof\", {beforeExpr: true, binop: 7}),\n    _typeof: kw(\"typeof\", {beforeExpr: true, prefix: true, startsExpr: true}),\n    _void: kw(\"void\", {beforeExpr: true, prefix: true, startsExpr: true}),\n    _delete: kw(\"delete\", {beforeExpr: true, prefix: true, startsExpr: true})\n  };\n\n  // Matches a whole line break (where CRLF is considered a single\n  // line break). Used to count lines.\n\n  var lineBreak = /\\r\\n?|\\n|\\u2028|\\u2029/;\n  var lineBreakG = new RegExp(lineBreak.source, \"g\");\n\n  function isNewLine(code) {\n    return code === 10 || code === 13 || code === 0x2028 || code === 0x2029\n  }\n\n  function nextLineBreak(code, from, end) {\n    if ( end === void 0 ) end = code.length;\n\n    for (var i = from; i < end; i++) {\n      var next = code.charCodeAt(i);\n      if (isNewLine(next))\n        { return i < end - 1 && next === 13 && code.charCodeAt(i + 1) === 10 ? i + 2 : i + 1 }\n    }\n    return -1\n  }\n\n  var nonASCIIwhitespace = /[\\u1680\\u2000-\\u200a\\u202f\\u205f\\u3000\\ufeff]/;\n\n  var skipWhiteSpace = /(?:\\s|\\/\\/.*|\\/\\*[^]*?\\*\\/)*/g;\n\n  var ref = Object.prototype;\n  var hasOwnProperty = ref.hasOwnProperty;\n  var toString = ref.toString;\n\n  var hasOwn = Object.hasOwn || (function (obj, propName) { return (\n    hasOwnProperty.call(obj, propName)\n  ); });\n\n  var isArray = Array.isArray || (function (obj) { return (\n    toString.call(obj) === \"[object Array]\"\n  ); });\n\n  function wordsRegexp(words) {\n    return new RegExp(\"^(?:\" + words.replace(/ /g, \"|\") + \")$\")\n  }\n\n  function codePointToString(code) {\n    // UTF-16 Decoding\n    if (code <= 0xFFFF) { return String.fromCharCode(code) }\n    code -= 0x10000;\n    return String.fromCharCode((code >> 10) + 0xD800, (code & 1023) + 0xDC00)\n  }\n\n  var loneSurrogate = /(?:[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])/;\n\n  // These are used when `options.locations` is on, for the\n  // `startLoc` and `endLoc` properties.\n\n  var Position = function Position(line, col) {\n    this.line = line;\n    this.column = col;\n  };\n\n  Position.prototype.offset = function offset (n) {\n    return new Position(this.line, this.column + n)\n  };\n\n  var SourceLocation = function SourceLocation(p, start, end) {\n    this.start = start;\n    this.end = end;\n    if (p.sourceFile !== null) { this.source = p.sourceFile; }\n  };\n\n  // The `getLineInfo` function is mostly useful when the\n  // `locations` option is off (for performance reasons) and you\n  // want to find the line/column position for a given character\n  // offset. `input` should be the code string that the offset refers\n  // into.\n\n  function getLineInfo(input, offset) {\n    for (var line = 1, cur = 0;;) {\n      var nextBreak = nextLineBreak(input, cur, offset);\n      if (nextBreak < 0) { return new Position(line, offset - cur) }\n      ++line;\n      cur = nextBreak;\n    }\n  }\n\n  // A second argument must be given to configure the parser process.\n  // These options are recognized (only `ecmaVersion` is required):\n\n  var defaultOptions = {\n    // `ecmaVersion` indicates the ECMAScript version to parse. Must be\n    // either 3, 5, 6 (or 2015), 7 (2016), 8 (2017), 9 (2018), 10\n    // (2019), 11 (2020), 12 (2021), 13 (2022), 14 (2023), or `\"latest\"`\n    // (the latest version the library supports). This influences\n    // support for strict mode, the set of reserved words, and support\n    // for new syntax features.\n    ecmaVersion: null,\n    // `sourceType` indicates the mode the code should be parsed in.\n    // Can be either `\"script\"` or `\"module\"`. This influences global\n    // strict mode and parsing of `import` and `export` declarations.\n    sourceType: \"script\",\n    // `onInsertedSemicolon` can be a callback that will be called\n    // when a semicolon is automatically inserted. It will be passed\n    // the position of the comma as an offset, and if `locations` is\n    // enabled, it is given the location as a `{line, column}` object\n    // as second argument.\n    onInsertedSemicolon: null,\n    // `onTrailingComma` is similar to `onInsertedSemicolon`, but for\n    // trailing commas.\n    onTrailingComma: null,\n    // By default, reserved words are only enforced if ecmaVersion >= 5.\n    // Set `allowReserved` to a boolean value to explicitly turn this on\n    // an off. When this option has the value \"never\", reserved words\n    // and keywords can also not be used as property names.\n    allowReserved: null,\n    // When enabled, a return at the top level is not considered an\n    // error.\n    allowReturnOutsideFunction: false,\n    // When enabled, import/export statements are not constrained to\n    // appearing at the top of the program, and an import.meta expression\n    // in a script isn't considered an error.\n    allowImportExportEverywhere: false,\n    // By default, await identifiers are allowed to appear at the top-level scope only if ecmaVersion >= 2022.\n    // When enabled, await identifiers are allowed to appear at the top-level scope,\n    // but they are still not allowed in non-async functions.\n    allowAwaitOutsideFunction: null,\n    // When enabled, super identifiers are not constrained to\n    // appearing in methods and do not raise an error when they appear elsewhere.\n    allowSuperOutsideMethod: null,\n    // When enabled, hashbang directive in the beginning of file is\n    // allowed and treated as a line comment. Enabled by default when\n    // `ecmaVersion` >= 2023.\n    allowHashBang: false,\n    // When `locations` is on, `loc` properties holding objects with\n    // `start` and `end` properties in `{line, column}` form (with\n    // line being 1-based and column 0-based) will be attached to the\n    // nodes.\n    locations: false,\n    // A function can be passed as `onToken` option, which will\n    // cause Acorn to call that function with object in the same\n    // format as tokens returned from `tokenizer().getToken()`. Note\n    // that you are not allowed to call the parser from the\n    // callback—that will corrupt its internal state.\n    onToken: null,\n    // A function can be passed as `onComment` option, which will\n    // cause Acorn to call that function with `(block, text, start,\n    // end)` parameters whenever a comment is skipped. `block` is a\n    // boolean indicating whether this is a block (`/* */`) comment,\n    // `text` is the content of the comment, and `start` and `end` are\n    // character offsets that denote the start and end of the comment.\n    // When the `locations` option is on, two more parameters are\n    // passed, the full `{line, column}` locations of the start and\n    // end of the comments. Note that you are not allowed to call the\n    // parser from the callback—that will corrupt its internal state.\n    onComment: null,\n    // Nodes have their start and end characters offsets recorded in\n    // `start` and `end` properties (directly on the node, rather than\n    // the `loc` object, which holds line/column data. To also add a\n    // [semi-standardized][range] `range` property holding a `[start,\n    // end]` array with the same numbers, set the `ranges` option to\n    // `true`.\n    //\n    // [range]: https://bugzilla.mozilla.org/show_bug.cgi?id=745678\n    ranges: false,\n    // It is possible to parse multiple files into a single AST by\n    // passing the tree produced by parsing the first file as\n    // `program` option in subsequent parses. This will add the\n    // toplevel forms of the parsed file to the `Program` (top) node\n    // of an existing parse tree.\n    program: null,\n    // When `locations` is on, you can pass this to record the source\n    // file in every node's `loc` object.\n    sourceFile: null,\n    // This value, if given, is stored in every node, whether\n    // `locations` is on or off.\n    directSourceFile: null,\n    // When enabled, parenthesized expressions are represented by\n    // (non-standard) ParenthesizedExpression nodes\n    preserveParens: false\n  };\n\n  // Interpret and default an options object\n\n  var warnedAboutEcmaVersion = false;\n\n  function getOptions(opts) {\n    var options = {};\n\n    for (var opt in defaultOptions)\n      { options[opt] = opts && hasOwn(opts, opt) ? opts[opt] : defaultOptions[opt]; }\n\n    if (options.ecmaVersion === \"latest\") {\n      options.ecmaVersion = 1e8;\n    } else if (options.ecmaVersion == null) {\n      if (!warnedAboutEcmaVersion && typeof console === \"object\" && console.warn) {\n        warnedAboutEcmaVersion = true;\n        console.warn(\"Since Acorn 8.0.0, options.ecmaVersion is required.\\nDefaulting to 2020, but this will stop working in the future.\");\n      }\n      options.ecmaVersion = 11;\n    } else if (options.ecmaVersion >= 2015) {\n      options.ecmaVersion -= 2009;\n    }\n\n    if (options.allowReserved == null)\n      { options.allowReserved = options.ecmaVersion < 5; }\n\n    if (!opts || opts.allowHashBang == null)\n      { options.allowHashBang = options.ecmaVersion >= 14; }\n\n    if (isArray(options.onToken)) {\n      var tokens = options.onToken;\n      options.onToken = function (token) { return tokens.push(token); };\n    }\n    if (isArray(options.onComment))\n      { options.onComment = pushComment(options, options.onComment); }\n\n    return options\n  }\n\n  function pushComment(options, array) {\n    return function(block, text, start, end, startLoc, endLoc) {\n      var comment = {\n        type: block ? \"Block\" : \"Line\",\n        value: text,\n        start: start,\n        end: end\n      };\n      if (options.locations)\n        { comment.loc = new SourceLocation(this, startLoc, endLoc); }\n      if (options.ranges)\n        { comment.range = [start, end]; }\n      array.push(comment);\n    }\n  }\n\n  // Each scope gets a bitset that may contain these flags\n  var\n      SCOPE_TOP = 1,\n      SCOPE_FUNCTION = 2,\n      SCOPE_ASYNC = 4,\n      SCOPE_GENERATOR = 8,\n      SCOPE_ARROW = 16,\n      SCOPE_SIMPLE_CATCH = 32,\n      SCOPE_SUPER = 64,\n      SCOPE_DIRECT_SUPER = 128,\n      SCOPE_CLASS_STATIC_BLOCK = 256,\n      SCOPE_VAR = SCOPE_TOP | SCOPE_FUNCTION | SCOPE_CLASS_STATIC_BLOCK;\n\n  function functionFlags(async, generator) {\n    return SCOPE_FUNCTION | (async ? SCOPE_ASYNC : 0) | (generator ? SCOPE_GENERATOR : 0)\n  }\n\n  // Used in checkLVal* and declareName to determine the type of a binding\n  var\n      BIND_NONE = 0, // Not a binding\n      BIND_VAR = 1, // Var-style binding\n      BIND_LEXICAL = 2, // Let- or const-style binding\n      BIND_FUNCTION = 3, // Function declaration\n      BIND_SIMPLE_CATCH = 4, // Simple (identifier pattern) catch binding\n      BIND_OUTSIDE = 5; // Special case for function names as bound inside the function\n\n  var Parser = function Parser(options, input, startPos) {\n    this.options = options = getOptions(options);\n    this.sourceFile = options.sourceFile;\n    this.keywords = wordsRegexp(keywords$1[options.ecmaVersion >= 6 ? 6 : options.sourceType === \"module\" ? \"5module\" : 5]);\n    var reserved = \"\";\n    if (options.allowReserved !== true) {\n      reserved = reservedWords[options.ecmaVersion >= 6 ? 6 : options.ecmaVersion === 5 ? 5 : 3];\n      if (options.sourceType === \"module\") { reserved += \" await\"; }\n    }\n    this.reservedWords = wordsRegexp(reserved);\n    var reservedStrict = (reserved ? reserved + \" \" : \"\") + reservedWords.strict;\n    this.reservedWordsStrict = wordsRegexp(reservedStrict);\n    this.reservedWordsStrictBind = wordsRegexp(reservedStrict + \" \" + reservedWords.strictBind);\n    this.input = String(input);\n\n    // Used to signal to callers of `readWord1` whether the word\n    // contained any escape sequences. This is needed because words with\n    // escape sequences must not be interpreted as keywords.\n    this.containsEsc = false;\n\n    // Set up token state\n\n    // The current position of the tokenizer in the input.\n    if (startPos) {\n      this.pos = startPos;\n      this.lineStart = this.input.lastIndexOf(\"\\n\", startPos - 1) + 1;\n      this.curLine = this.input.slice(0, this.lineStart).split(lineBreak).length;\n    } else {\n      this.pos = this.lineStart = 0;\n      this.curLine = 1;\n    }\n\n    // Properties of the current token:\n    // Its type\n    this.type = types$1.eof;\n    // For tokens that include more information than their type, the value\n    this.value = null;\n    // Its start and end offset\n    this.start = this.end = this.pos;\n    // And, if locations are used, the {line, column} object\n    // corresponding to those offsets\n    this.startLoc = this.endLoc = this.curPosition();\n\n    // Position information for the previous token\n    this.lastTokEndLoc = this.lastTokStartLoc = null;\n    this.lastTokStart = this.lastTokEnd = this.pos;\n\n    // The context stack is used to superficially track syntactic\n    // context to predict whether a regular expression is allowed in a\n    // given position.\n    this.context = this.initialContext();\n    this.exprAllowed = true;\n\n    // Figure out if it's a module code.\n    this.inModule = options.sourceType === \"module\";\n    this.strict = this.inModule || this.strictDirective(this.pos);\n\n    // Used to signify the start of a potential arrow function\n    this.potentialArrowAt = -1;\n    this.potentialArrowInForAwait = false;\n\n    // Positions to delayed-check that yield/await does not exist in default parameters.\n    this.yieldPos = this.awaitPos = this.awaitIdentPos = 0;\n    // Labels in scope.\n    this.labels = [];\n    // Thus-far undefined exports.\n    this.undefinedExports = Object.create(null);\n\n    // If enabled, skip leading hashbang line.\n    if (this.pos === 0 && options.allowHashBang && this.input.slice(0, 2) === \"#!\")\n      { this.skipLineComment(2); }\n\n    // Scope tracking for duplicate variable names (see scope.js)\n    this.scopeStack = [];\n    this.enterScope(SCOPE_TOP);\n\n    // For RegExp validation\n    this.regexpState = null;\n\n    // The stack of private names.\n    // Each element has two properties: 'declared' and 'used'.\n    // When it exited from the outermost class definition, all used private names must be declared.\n    this.privateNameStack = [];\n  };\n\n  var prototypeAccessors = { inFunction: { configurable: true },inGenerator: { configurable: true },inAsync: { configurable: true },canAwait: { configurable: true },allowSuper: { configurable: true },allowDirectSuper: { configurable: true },treatFunctionsAsVar: { configurable: true },allowNewDotTarget: { configurable: true },inClassStaticBlock: { configurable: true } };\n\n  Parser.prototype.parse = function parse () {\n    var node = this.options.program || this.startNode();\n    this.nextToken();\n    return this.parseTopLevel(node)\n  };\n\n  prototypeAccessors.inFunction.get = function () { return (this.currentVarScope().flags & SCOPE_FUNCTION) > 0 };\n\n  prototypeAccessors.inGenerator.get = function () { return (this.currentVarScope().flags & SCOPE_GENERATOR) > 0 && !this.currentVarScope().inClassFieldInit };\n\n  prototypeAccessors.inAsync.get = function () { return (this.currentVarScope().flags & SCOPE_ASYNC) > 0 && !this.currentVarScope().inClassFieldInit };\n\n  prototypeAccessors.canAwait.get = function () {\n    for (var i = this.scopeStack.length - 1; i >= 0; i--) {\n      var scope = this.scopeStack[i];\n      if (scope.inClassFieldInit || scope.flags & SCOPE_CLASS_STATIC_BLOCK) { return false }\n      if (scope.flags & SCOPE_FUNCTION) { return (scope.flags & SCOPE_ASYNC) > 0 }\n    }\n    return (this.inModule && this.options.ecmaVersion >= 13) || this.options.allowAwaitOutsideFunction\n  };\n\n  prototypeAccessors.allowSuper.get = function () {\n    var ref = this.currentThisScope();\n      var flags = ref.flags;\n      var inClassFieldInit = ref.inClassFieldInit;\n    return (flags & SCOPE_SUPER) > 0 || inClassFieldInit || this.options.allowSuperOutsideMethod\n  };\n\n  prototypeAccessors.allowDirectSuper.get = function () { return (this.currentThisScope().flags & SCOPE_DIRECT_SUPER) > 0 };\n\n  prototypeAccessors.treatFunctionsAsVar.get = function () { return this.treatFunctionsAsVarInScope(this.currentScope()) };\n\n  prototypeAccessors.allowNewDotTarget.get = function () {\n    var ref = this.currentThisScope();\n      var flags = ref.flags;\n      var inClassFieldInit = ref.inClassFieldInit;\n    return (flags & (SCOPE_FUNCTION | SCOPE_CLASS_STATIC_BLOCK)) > 0 || inClassFieldInit\n  };\n\n  prototypeAccessors.inClassStaticBlock.get = function () {\n    return (this.currentVarScope().flags & SCOPE_CLASS_STATIC_BLOCK) > 0\n  };\n\n  Parser.extend = function extend () {\n      var plugins = [], len = arguments.length;\n      while ( len-- ) plugins[ len ] = arguments[ len ];\n\n    var cls = this;\n    for (var i = 0; i < plugins.length; i++) { cls = plugins[i](cls); }\n    return cls\n  };\n\n  Parser.parse = function parse (input, options) {\n    return new this(options, input).parse()\n  };\n\n  Parser.parseExpressionAt = function parseExpressionAt (input, pos, options) {\n    var parser = new this(options, input, pos);\n    parser.nextToken();\n    return parser.parseExpression()\n  };\n\n  Parser.tokenizer = function tokenizer (input, options) {\n    return new this(options, input)\n  };\n\n  Object.defineProperties( Parser.prototype, prototypeAccessors );\n\n  var pp$9 = Parser.prototype;\n\n  // ## Parser utilities\n\n  var literal = /^(?:'((?:\\\\.|[^'\\\\])*?)'|\"((?:\\\\.|[^\"\\\\])*?)\")/;\n  pp$9.strictDirective = function(start) {\n    if (this.options.ecmaVersion < 5) { return false }\n    for (;;) {\n      // Try to find string literal.\n      skipWhiteSpace.lastIndex = start;\n      start += skipWhiteSpace.exec(this.input)[0].length;\n      var match = literal.exec(this.input.slice(start));\n      if (!match) { return false }\n      if ((match[1] || match[2]) === \"use strict\") {\n        skipWhiteSpace.lastIndex = start + match[0].length;\n        var spaceAfter = skipWhiteSpace.exec(this.input), end = spaceAfter.index + spaceAfter[0].length;\n        var next = this.input.charAt(end);\n        return next === \";\" || next === \"}\" ||\n          (lineBreak.test(spaceAfter[0]) &&\n           !(/[(`.[+\\-/*%<>=,?^&]/.test(next) || next === \"!\" && this.input.charAt(end + 1) === \"=\"))\n      }\n      start += match[0].length;\n\n      // Skip semicolon, if any.\n      skipWhiteSpace.lastIndex = start;\n      start += skipWhiteSpace.exec(this.input)[0].length;\n      if (this.input[start] === \";\")\n        { start++; }\n    }\n  };\n\n  // Predicate that tests whether the next token is of the given\n  // type, and if yes, consumes it as a side effect.\n\n  pp$9.eat = function(type) {\n    if (this.type === type) {\n      this.next();\n      return true\n    } else {\n      return false\n    }\n  };\n\n  // Tests whether parsed token is a contextual keyword.\n\n  pp$9.isContextual = function(name) {\n    return this.type === types$1.name && this.value === name && !this.containsEsc\n  };\n\n  // Consumes contextual keyword if possible.\n\n  pp$9.eatContextual = function(name) {\n    if (!this.isContextual(name)) { return false }\n    this.next();\n    return true\n  };\n\n  // Asserts that following token is given contextual keyword.\n\n  pp$9.expectContextual = function(name) {\n    if (!this.eatContextual(name)) { this.unexpected(); }\n  };\n\n  // Test whether a semicolon can be inserted at the current position.\n\n  pp$9.canInsertSemicolon = function() {\n    return this.type === types$1.eof ||\n      this.type === types$1.braceR ||\n      lineBreak.test(this.input.slice(this.lastTokEnd, this.start))\n  };\n\n  pp$9.insertSemicolon = function() {\n    if (this.canInsertSemicolon()) {\n      if (this.options.onInsertedSemicolon)\n        { this.options.onInsertedSemicolon(this.lastTokEnd, this.lastTokEndLoc); }\n      return true\n    }\n  };\n\n  // Consume a semicolon, or, failing that, see if we are allowed to\n  // pretend that there is a semicolon at this position.\n\n  pp$9.semicolon = function() {\n    if (!this.eat(types$1.semi) && !this.insertSemicolon()) { this.unexpected(); }\n  };\n\n  pp$9.afterTrailingComma = function(tokType, notNext) {\n    if (this.type === tokType) {\n      if (this.options.onTrailingComma)\n        { this.options.onTrailingComma(this.lastTokStart, this.lastTokStartLoc); }\n      if (!notNext)\n        { this.next(); }\n      return true\n    }\n  };\n\n  // Expect a token of a given type. If found, consume it, otherwise,\n  // raise an unexpected token error.\n\n  pp$9.expect = function(type) {\n    this.eat(type) || this.unexpected();\n  };\n\n  // Raise an unexpected token error.\n\n  pp$9.unexpected = function(pos) {\n    this.raise(pos != null ? pos : this.start, \"Unexpected token\");\n  };\n\n  var DestructuringErrors = function DestructuringErrors() {\n    this.shorthandAssign =\n    this.trailingComma =\n    this.parenthesizedAssign =\n    this.parenthesizedBind =\n    this.doubleProto =\n      -1;\n  };\n\n  pp$9.checkPatternErrors = function(refDestructuringErrors, isAssign) {\n    if (!refDestructuringErrors) { return }\n    if (refDestructuringErrors.trailingComma > -1)\n      { this.raiseRecoverable(refDestructuringErrors.trailingComma, \"Comma is not permitted after the rest element\"); }\n    var parens = isAssign ? refDestructuringErrors.parenthesizedAssign : refDestructuringErrors.parenthesizedBind;\n    if (parens > -1) { this.raiseRecoverable(parens, isAssign ? \"Assigning to rvalue\" : \"Parenthesized pattern\"); }\n  };\n\n  pp$9.checkExpressionErrors = function(refDestructuringErrors, andThrow) {\n    if (!refDestructuringErrors) { return false }\n    var shorthandAssign = refDestructuringErrors.shorthandAssign;\n    var doubleProto = refDestructuringErrors.doubleProto;\n    if (!andThrow) { return shorthandAssign >= 0 || doubleProto >= 0 }\n    if (shorthandAssign >= 0)\n      { this.raise(shorthandAssign, \"Shorthand property assignments are valid only in destructuring patterns\"); }\n    if (doubleProto >= 0)\n      { this.raiseRecoverable(doubleProto, \"Redefinition of __proto__ property\"); }\n  };\n\n  pp$9.checkYieldAwaitInDefaultParams = function() {\n    if (this.yieldPos && (!this.awaitPos || this.yieldPos < this.awaitPos))\n      { this.raise(this.yieldPos, \"Yield expression cannot be a default value\"); }\n    if (this.awaitPos)\n      { this.raise(this.awaitPos, \"Await expression cannot be a default value\"); }\n  };\n\n  pp$9.isSimpleAssignTarget = function(expr) {\n    if (expr.type === \"ParenthesizedExpression\")\n      { return this.isSimpleAssignTarget(expr.expression) }\n    return expr.type === \"Identifier\" || expr.type === \"MemberExpression\"\n  };\n\n  var pp$8 = Parser.prototype;\n\n  // ### Statement parsing\n\n  // Parse a program. Initializes the parser, reads any number of\n  // statements, and wraps them in a Program node.  Optionally takes a\n  // `program` argument.  If present, the statements will be appended\n  // to its body instead of creating a new node.\n\n  pp$8.parseTopLevel = function(node) {\n    var exports = Object.create(null);\n    if (!node.body) { node.body = []; }\n    while (this.type !== types$1.eof) {\n      var stmt = this.parseStatement(null, true, exports);\n      node.body.push(stmt);\n    }\n    if (this.inModule)\n      { for (var i = 0, list = Object.keys(this.undefinedExports); i < list.length; i += 1)\n        {\n          var name = list[i];\n\n          this.raiseRecoverable(this.undefinedExports[name].start, (\"Export '\" + name + \"' is not defined\"));\n        } }\n    this.adaptDirectivePrologue(node.body);\n    this.next();\n    node.sourceType = this.options.sourceType;\n    return this.finishNode(node, \"Program\")\n  };\n\n  var loopLabel = {kind: \"loop\"}, switchLabel = {kind: \"switch\"};\n\n  pp$8.isLet = function(context) {\n    if (this.options.ecmaVersion < 6 || !this.isContextual(\"let\")) { return false }\n    skipWhiteSpace.lastIndex = this.pos;\n    var skip = skipWhiteSpace.exec(this.input);\n    var next = this.pos + skip[0].length, nextCh = this.input.charCodeAt(next);\n    // For ambiguous cases, determine if a LexicalDeclaration (or only a\n    // Statement) is allowed here. If context is not empty then only a Statement\n    // is allowed. However, `let [` is an explicit negative lookahead for\n    // ExpressionStatement, so special-case it first.\n    if (nextCh === 91 || nextCh === 92) { return true } // '[', '/'\n    if (context) { return false }\n\n    if (nextCh === 123 || nextCh > 0xd7ff && nextCh < 0xdc00) { return true } // '{', astral\n    if (isIdentifierStart(nextCh, true)) {\n      var pos = next + 1;\n      while (isIdentifierChar(nextCh = this.input.charCodeAt(pos), true)) { ++pos; }\n      if (nextCh === 92 || nextCh > 0xd7ff && nextCh < 0xdc00) { return true }\n      var ident = this.input.slice(next, pos);\n      if (!keywordRelationalOperator.test(ident)) { return true }\n    }\n    return false\n  };\n\n  // check 'async [no LineTerminator here] function'\n  // - 'async /*foo*/ function' is OK.\n  // - 'async /*\\n*/ function' is invalid.\n  pp$8.isAsyncFunction = function() {\n    if (this.options.ecmaVersion < 8 || !this.isContextual(\"async\"))\n      { return false }\n\n    skipWhiteSpace.lastIndex = this.pos;\n    var skip = skipWhiteSpace.exec(this.input);\n    var next = this.pos + skip[0].length, after;\n    return !lineBreak.test(this.input.slice(this.pos, next)) &&\n      this.input.slice(next, next + 8) === \"function\" &&\n      (next + 8 === this.input.length ||\n       !(isIdentifierChar(after = this.input.charCodeAt(next + 8)) || after > 0xd7ff && after < 0xdc00))\n  };\n\n  // Parse a single statement.\n  //\n  // If expecting a statement and finding a slash operator, parse a\n  // regular expression literal. This is to handle cases like\n  // `if (foo) /blah/.exec(foo)`, where looking at the previous token\n  // does not help.\n\n  pp$8.parseStatement = function(context, topLevel, exports) {\n    var starttype = this.type, node = this.startNode(), kind;\n\n    if (this.isLet(context)) {\n      starttype = types$1._var;\n      kind = \"let\";\n    }\n\n    // Most types of statements are recognized by the keyword they\n    // start with. Many are trivial to parse, some require a bit of\n    // complexity.\n\n    switch (starttype) {\n    case types$1._break: case types$1._continue: return this.parseBreakContinueStatement(node, starttype.keyword)\n    case types$1._debugger: return this.parseDebuggerStatement(node)\n    case types$1._do: return this.parseDoStatement(node)\n    case types$1._for: return this.parseForStatement(node)\n    case types$1._function:\n      // Function as sole body of either an if statement or a labeled statement\n      // works, but not when it is part of a labeled statement that is the sole\n      // body of an if statement.\n      if ((context && (this.strict || context !== \"if\" && context !== \"label\")) && this.options.ecmaVersion >= 6) { this.unexpected(); }\n      return this.parseFunctionStatement(node, false, !context)\n    case types$1._class:\n      if (context) { this.unexpected(); }\n      return this.parseClass(node, true)\n    case types$1._if: return this.parseIfStatement(node)\n    case types$1._return: return this.parseReturnStatement(node)\n    case types$1._switch: return this.parseSwitchStatement(node)\n    case types$1._throw: return this.parseThrowStatement(node)\n    case types$1._try: return this.parseTryStatement(node)\n    case types$1._const: case types$1._var:\n      kind = kind || this.value;\n      if (context && kind !== \"var\") { this.unexpected(); }\n      return this.parseVarStatement(node, kind)\n    case types$1._while: return this.parseWhileStatement(node)\n    case types$1._with: return this.parseWithStatement(node)\n    case types$1.braceL: return this.parseBlock(true, node)\n    case types$1.semi: return this.parseEmptyStatement(node)\n    case types$1._export:\n    case types$1._import:\n      if (this.options.ecmaVersion > 10 && starttype === types$1._import) {\n        skipWhiteSpace.lastIndex = this.pos;\n        var skip = skipWhiteSpace.exec(this.input);\n        var next = this.pos + skip[0].length, nextCh = this.input.charCodeAt(next);\n        if (nextCh === 40 || nextCh === 46) // '(' or '.'\n          { return this.parseExpressionStatement(node, this.parseExpression()) }\n      }\n\n      if (!this.options.allowImportExportEverywhere) {\n        if (!topLevel)\n          { this.raise(this.start, \"'import' and 'export' may only appear at the top level\"); }\n        if (!this.inModule)\n          { this.raise(this.start, \"'import' and 'export' may appear only with 'sourceType: module'\"); }\n      }\n      return starttype === types$1._import ? this.parseImport(node) : this.parseExport(node, exports)\n\n      // If the statement does not start with a statement keyword or a\n      // brace, it's an ExpressionStatement or LabeledStatement. We\n      // simply start parsing an expression, and afterwards, if the\n      // next token is a colon and the expression was a simple\n      // Identifier node, we switch to interpreting it as a label.\n    default:\n      if (this.isAsyncFunction()) {\n        if (context) { this.unexpected(); }\n        this.next();\n        return this.parseFunctionStatement(node, true, !context)\n      }\n\n      var maybeName = this.value, expr = this.parseExpression();\n      if (starttype === types$1.name && expr.type === \"Identifier\" && this.eat(types$1.colon))\n        { return this.parseLabeledStatement(node, maybeName, expr, context) }\n      else { return this.parseExpressionStatement(node, expr) }\n    }\n  };\n\n  pp$8.parseBreakContinueStatement = function(node, keyword) {\n    var isBreak = keyword === \"break\";\n    this.next();\n    if (this.eat(types$1.semi) || this.insertSemicolon()) { node.label = null; }\n    else if (this.type !== types$1.name) { this.unexpected(); }\n    else {\n      node.label = this.parseIdent();\n      this.semicolon();\n    }\n\n    // Verify that there is an actual destination to break or\n    // continue to.\n    var i = 0;\n    for (; i < this.labels.length; ++i) {\n      var lab = this.labels[i];\n      if (node.label == null || lab.name === node.label.name) {\n        if (lab.kind != null && (isBreak || lab.kind === \"loop\")) { break }\n        if (node.label && isBreak) { break }\n      }\n    }\n    if (i === this.labels.length) { this.raise(node.start, \"Unsyntactic \" + keyword); }\n    return this.finishNode(node, isBreak ? \"BreakStatement\" : \"ContinueStatement\")\n  };\n\n  pp$8.parseDebuggerStatement = function(node) {\n    this.next();\n    this.semicolon();\n    return this.finishNode(node, \"DebuggerStatement\")\n  };\n\n  pp$8.parseDoStatement = function(node) {\n    this.next();\n    this.labels.push(loopLabel);\n    node.body = this.parseStatement(\"do\");\n    this.labels.pop();\n    this.expect(types$1._while);\n    node.test = this.parseParenExpression();\n    if (this.options.ecmaVersion >= 6)\n      { this.eat(types$1.semi); }\n    else\n      { this.semicolon(); }\n    return this.finishNode(node, \"DoWhileStatement\")\n  };\n\n  // Disambiguating between a `for` and a `for`/`in` or `for`/`of`\n  // loop is non-trivial. Basically, we have to parse the init `var`\n  // statement or expression, disallowing the `in` operator (see\n  // the second parameter to `parseExpression`), and then check\n  // whether the next token is `in` or `of`. When there is no init\n  // part (semicolon immediately after the opening parenthesis), it\n  // is a regular `for` loop.\n\n  pp$8.parseForStatement = function(node) {\n    this.next();\n    var awaitAt = (this.options.ecmaVersion >= 9 && this.canAwait && this.eatContextual(\"await\")) ? this.lastTokStart : -1;\n    this.labels.push(loopLabel);\n    this.enterScope(0);\n    this.expect(types$1.parenL);\n    if (this.type === types$1.semi) {\n      if (awaitAt > -1) { this.unexpected(awaitAt); }\n      return this.parseFor(node, null)\n    }\n    var isLet = this.isLet();\n    if (this.type === types$1._var || this.type === types$1._const || isLet) {\n      var init$1 = this.startNode(), kind = isLet ? \"let\" : this.value;\n      this.next();\n      this.parseVar(init$1, true, kind);\n      this.finishNode(init$1, \"VariableDeclaration\");\n      if ((this.type === types$1._in || (this.options.ecmaVersion >= 6 && this.isContextual(\"of\"))) && init$1.declarations.length === 1) {\n        if (this.options.ecmaVersion >= 9) {\n          if (this.type === types$1._in) {\n            if (awaitAt > -1) { this.unexpected(awaitAt); }\n          } else { node.await = awaitAt > -1; }\n        }\n        return this.parseForIn(node, init$1)\n      }\n      if (awaitAt > -1) { this.unexpected(awaitAt); }\n      return this.parseFor(node, init$1)\n    }\n    var startsWithLet = this.isContextual(\"let\"), isForOf = false;\n    var refDestructuringErrors = new DestructuringErrors;\n    var init = this.parseExpression(awaitAt > -1 ? \"await\" : true, refDestructuringErrors);\n    if (this.type === types$1._in || (isForOf = this.options.ecmaVersion >= 6 && this.isContextual(\"of\"))) {\n      if (this.options.ecmaVersion >= 9) {\n        if (this.type === types$1._in) {\n          if (awaitAt > -1) { this.unexpected(awaitAt); }\n        } else { node.await = awaitAt > -1; }\n      }\n      if (startsWithLet && isForOf) { this.raise(init.start, \"The left-hand side of a for-of loop may not start with 'let'.\"); }\n      this.toAssignable(init, false, refDestructuringErrors);\n      this.checkLValPattern(init);\n      return this.parseForIn(node, init)\n    } else {\n      this.checkExpressionErrors(refDestructuringErrors, true);\n    }\n    if (awaitAt > -1) { this.unexpected(awaitAt); }\n    return this.parseFor(node, init)\n  };\n\n  pp$8.parseFunctionStatement = function(node, isAsync, declarationPosition) {\n    this.next();\n    return this.parseFunction(node, FUNC_STATEMENT | (declarationPosition ? 0 : FUNC_HANGING_STATEMENT), false, isAsync)\n  };\n\n  pp$8.parseIfStatement = function(node) {\n    this.next();\n    node.test = this.parseParenExpression();\n    // allow function declarations in branches, but only in non-strict mode\n    node.consequent = this.parseStatement(\"if\");\n    node.alternate = this.eat(types$1._else) ? this.parseStatement(\"if\") : null;\n    return this.finishNode(node, \"IfStatement\")\n  };\n\n  pp$8.parseReturnStatement = function(node) {\n    if (!this.inFunction && !this.options.allowReturnOutsideFunction)\n      { this.raise(this.start, \"'return' outside of function\"); }\n    this.next();\n\n    // In `return` (and `break`/`continue`), the keywords with\n    // optional arguments, we eagerly look for a semicolon or the\n    // possibility to insert one.\n\n    if (this.eat(types$1.semi) || this.insertSemicolon()) { node.argument = null; }\n    else { node.argument = this.parseExpression(); this.semicolon(); }\n    return this.finishNode(node, \"ReturnStatement\")\n  };\n\n  pp$8.parseSwitchStatement = function(node) {\n    this.next();\n    node.discriminant = this.parseParenExpression();\n    node.cases = [];\n    this.expect(types$1.braceL);\n    this.labels.push(switchLabel);\n    this.enterScope(0);\n\n    // Statements under must be grouped (by label) in SwitchCase\n    // nodes. `cur` is used to keep the node that we are currently\n    // adding statements to.\n\n    var cur;\n    for (var sawDefault = false; this.type !== types$1.braceR;) {\n      if (this.type === types$1._case || this.type === types$1._default) {\n        var isCase = this.type === types$1._case;\n        if (cur) { this.finishNode(cur, \"SwitchCase\"); }\n        node.cases.push(cur = this.startNode());\n        cur.consequent = [];\n        this.next();\n        if (isCase) {\n          cur.test = this.parseExpression();\n        } else {\n          if (sawDefault) { this.raiseRecoverable(this.lastTokStart, \"Multiple default clauses\"); }\n          sawDefault = true;\n          cur.test = null;\n        }\n        this.expect(types$1.colon);\n      } else {\n        if (!cur) { this.unexpected(); }\n        cur.consequent.push(this.parseStatement(null));\n      }\n    }\n    this.exitScope();\n    if (cur) { this.finishNode(cur, \"SwitchCase\"); }\n    this.next(); // Closing brace\n    this.labels.pop();\n    return this.finishNode(node, \"SwitchStatement\")\n  };\n\n  pp$8.parseThrowStatement = function(node) {\n    this.next();\n    if (lineBreak.test(this.input.slice(this.lastTokEnd, this.start)))\n      { this.raise(this.lastTokEnd, \"Illegal newline after throw\"); }\n    node.argument = this.parseExpression();\n    this.semicolon();\n    return this.finishNode(node, \"ThrowStatement\")\n  };\n\n  // Reused empty array added for node fields that are always empty.\n\n  var empty$1 = [];\n\n  pp$8.parseTryStatement = function(node) {\n    this.next();\n    node.block = this.parseBlock();\n    node.handler = null;\n    if (this.type === types$1._catch) {\n      var clause = this.startNode();\n      this.next();\n      if (this.eat(types$1.parenL)) {\n        clause.param = this.parseBindingAtom();\n        var simple = clause.param.type === \"Identifier\";\n        this.enterScope(simple ? SCOPE_SIMPLE_CATCH : 0);\n        this.checkLValPattern(clause.param, simple ? BIND_SIMPLE_CATCH : BIND_LEXICAL);\n        this.expect(types$1.parenR);\n      } else {\n        if (this.options.ecmaVersion < 10) { this.unexpected(); }\n        clause.param = null;\n        this.enterScope(0);\n      }\n      clause.body = this.parseBlock(false);\n      this.exitScope();\n      node.handler = this.finishNode(clause, \"CatchClause\");\n    }\n    node.finalizer = this.eat(types$1._finally) ? this.parseBlock() : null;\n    if (!node.handler && !node.finalizer)\n      { this.raise(node.start, \"Missing catch or finally clause\"); }\n    return this.finishNode(node, \"TryStatement\")\n  };\n\n  pp$8.parseVarStatement = function(node, kind) {\n    this.next();\n    this.parseVar(node, false, kind);\n    this.semicolon();\n    return this.finishNode(node, \"VariableDeclaration\")\n  };\n\n  pp$8.parseWhileStatement = function(node) {\n    this.next();\n    node.test = this.parseParenExpression();\n    this.labels.push(loopLabel);\n    node.body = this.parseStatement(\"while\");\n    this.labels.pop();\n    return this.finishNode(node, \"WhileStatement\")\n  };\n\n  pp$8.parseWithStatement = function(node) {\n    if (this.strict) { this.raise(this.start, \"'with' in strict mode\"); }\n    this.next();\n    node.object = this.parseParenExpression();\n    node.body = this.parseStatement(\"with\");\n    return this.finishNode(node, \"WithStatement\")\n  };\n\n  pp$8.parseEmptyStatement = function(node) {\n    this.next();\n    return this.finishNode(node, \"EmptyStatement\")\n  };\n\n  pp$8.parseLabeledStatement = function(node, maybeName, expr, context) {\n    for (var i$1 = 0, list = this.labels; i$1 < list.length; i$1 += 1)\n      {\n      var label = list[i$1];\n\n      if (label.name === maybeName)\n        { this.raise(expr.start, \"Label '\" + maybeName + \"' is already declared\");\n    } }\n    var kind = this.type.isLoop ? \"loop\" : this.type === types$1._switch ? \"switch\" : null;\n    for (var i = this.labels.length - 1; i >= 0; i--) {\n      var label$1 = this.labels[i];\n      if (label$1.statementStart === node.start) {\n        // Update information about previous labels on this node\n        label$1.statementStart = this.start;\n        label$1.kind = kind;\n      } else { break }\n    }\n    this.labels.push({name: maybeName, kind: kind, statementStart: this.start});\n    node.body = this.parseStatement(context ? context.indexOf(\"label\") === -1 ? context + \"label\" : context : \"label\");\n    this.labels.pop();\n    node.label = expr;\n    return this.finishNode(node, \"LabeledStatement\")\n  };\n\n  pp$8.parseExpressionStatement = function(node, expr) {\n    node.expression = expr;\n    this.semicolon();\n    return this.finishNode(node, \"ExpressionStatement\")\n  };\n\n  // Parse a semicolon-enclosed block of statements, handling `\"use\n  // strict\"` declarations when `allowStrict` is true (used for\n  // function bodies).\n\n  pp$8.parseBlock = function(createNewLexicalScope, node, exitStrict) {\n    if ( createNewLexicalScope === void 0 ) createNewLexicalScope = true;\n    if ( node === void 0 ) node = this.startNode();\n\n    node.body = [];\n    this.expect(types$1.braceL);\n    if (createNewLexicalScope) { this.enterScope(0); }\n    while (this.type !== types$1.braceR) {\n      var stmt = this.parseStatement(null);\n      node.body.push(stmt);\n    }\n    if (exitStrict) { this.strict = false; }\n    this.next();\n    if (createNewLexicalScope) { this.exitScope(); }\n    return this.finishNode(node, \"BlockStatement\")\n  };\n\n  // Parse a regular `for` loop. The disambiguation code in\n  // `parseStatement` will already have parsed the init statement or\n  // expression.\n\n  pp$8.parseFor = function(node, init) {\n    node.init = init;\n    this.expect(types$1.semi);\n    node.test = this.type === types$1.semi ? null : this.parseExpression();\n    this.expect(types$1.semi);\n    node.update = this.type === types$1.parenR ? null : this.parseExpression();\n    this.expect(types$1.parenR);\n    node.body = this.parseStatement(\"for\");\n    this.exitScope();\n    this.labels.pop();\n    return this.finishNode(node, \"ForStatement\")\n  };\n\n  // Parse a `for`/`in` and `for`/`of` loop, which are almost\n  // same from parser's perspective.\n\n  pp$8.parseForIn = function(node, init) {\n    var isForIn = this.type === types$1._in;\n    this.next();\n\n    if (\n      init.type === \"VariableDeclaration\" &&\n      init.declarations[0].init != null &&\n      (\n        !isForIn ||\n        this.options.ecmaVersion < 8 ||\n        this.strict ||\n        init.kind !== \"var\" ||\n        init.declarations[0].id.type !== \"Identifier\"\n      )\n    ) {\n      this.raise(\n        init.start,\n        ((isForIn ? \"for-in\" : \"for-of\") + \" loop variable declaration may not have an initializer\")\n      );\n    }\n    node.left = init;\n    node.right = isForIn ? this.parseExpression() : this.parseMaybeAssign();\n    this.expect(types$1.parenR);\n    node.body = this.parseStatement(\"for\");\n    this.exitScope();\n    this.labels.pop();\n    return this.finishNode(node, isForIn ? \"ForInStatement\" : \"ForOfStatement\")\n  };\n\n  // Parse a list of variable declarations.\n\n  pp$8.parseVar = function(node, isFor, kind) {\n    node.declarations = [];\n    node.kind = kind;\n    for (;;) {\n      var decl = this.startNode();\n      this.parseVarId(decl, kind);\n      if (this.eat(types$1.eq)) {\n        decl.init = this.parseMaybeAssign(isFor);\n      } else if (kind === \"const\" && !(this.type === types$1._in || (this.options.ecmaVersion >= 6 && this.isContextual(\"of\")))) {\n        this.unexpected();\n      } else if (decl.id.type !== \"Identifier\" && !(isFor && (this.type === types$1._in || this.isContextual(\"of\")))) {\n        this.raise(this.lastTokEnd, \"Complex binding patterns require an initialization value\");\n      } else {\n        decl.init = null;\n      }\n      node.declarations.push(this.finishNode(decl, \"VariableDeclarator\"));\n      if (!this.eat(types$1.comma)) { break }\n    }\n    return node\n  };\n\n  pp$8.parseVarId = function(decl, kind) {\n    decl.id = this.parseBindingAtom();\n    this.checkLValPattern(decl.id, kind === \"var\" ? BIND_VAR : BIND_LEXICAL, false);\n  };\n\n  var FUNC_STATEMENT = 1, FUNC_HANGING_STATEMENT = 2, FUNC_NULLABLE_ID = 4;\n\n  // Parse a function declaration or literal (depending on the\n  // `statement & FUNC_STATEMENT`).\n\n  // Remove `allowExpressionBody` for 7.0.0, as it is only called with false\n  pp$8.parseFunction = function(node, statement, allowExpressionBody, isAsync, forInit) {\n    this.initFunction(node);\n    if (this.options.ecmaVersion >= 9 || this.options.ecmaVersion >= 6 && !isAsync) {\n      if (this.type === types$1.star && (statement & FUNC_HANGING_STATEMENT))\n        { this.unexpected(); }\n      node.generator = this.eat(types$1.star);\n    }\n    if (this.options.ecmaVersion >= 8)\n      { node.async = !!isAsync; }\n\n    if (statement & FUNC_STATEMENT) {\n      node.id = (statement & FUNC_NULLABLE_ID) && this.type !== types$1.name ? null : this.parseIdent();\n      if (node.id && !(statement & FUNC_HANGING_STATEMENT))\n        // If it is a regular function declaration in sloppy mode, then it is\n        // subject to Annex B semantics (BIND_FUNCTION). Otherwise, the binding\n        // mode depends on properties of the current scope (see\n        // treatFunctionsAsVar).\n        { this.checkLValSimple(node.id, (this.strict || node.generator || node.async) ? this.treatFunctionsAsVar ? BIND_VAR : BIND_LEXICAL : BIND_FUNCTION); }\n    }\n\n    var oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n    this.yieldPos = 0;\n    this.awaitPos = 0;\n    this.awaitIdentPos = 0;\n    this.enterScope(functionFlags(node.async, node.generator));\n\n    if (!(statement & FUNC_STATEMENT))\n      { node.id = this.type === types$1.name ? this.parseIdent() : null; }\n\n    this.parseFunctionParams(node);\n    this.parseFunctionBody(node, allowExpressionBody, false, forInit);\n\n    this.yieldPos = oldYieldPos;\n    this.awaitPos = oldAwaitPos;\n    this.awaitIdentPos = oldAwaitIdentPos;\n    return this.finishNode(node, (statement & FUNC_STATEMENT) ? \"FunctionDeclaration\" : \"FunctionExpression\")\n  };\n\n  pp$8.parseFunctionParams = function(node) {\n    this.expect(types$1.parenL);\n    node.params = this.parseBindingList(types$1.parenR, false, this.options.ecmaVersion >= 8);\n    this.checkYieldAwaitInDefaultParams();\n  };\n\n  // Parse a class declaration or literal (depending on the\n  // `isStatement` parameter).\n\n  pp$8.parseClass = function(node, isStatement) {\n    this.next();\n\n    // ecma-262 14.6 Class Definitions\n    // A class definition is always strict mode code.\n    var oldStrict = this.strict;\n    this.strict = true;\n\n    this.parseClassId(node, isStatement);\n    this.parseClassSuper(node);\n    var privateNameMap = this.enterClassBody();\n    var classBody = this.startNode();\n    var hadConstructor = false;\n    classBody.body = [];\n    this.expect(types$1.braceL);\n    while (this.type !== types$1.braceR) {\n      var element = this.parseClassElement(node.superClass !== null);\n      if (element) {\n        classBody.body.push(element);\n        if (element.type === \"MethodDefinition\" && element.kind === \"constructor\") {\n          if (hadConstructor) { this.raise(element.start, \"Duplicate constructor in the same class\"); }\n          hadConstructor = true;\n        } else if (element.key && element.key.type === \"PrivateIdentifier\" && isPrivateNameConflicted(privateNameMap, element)) {\n          this.raiseRecoverable(element.key.start, (\"Identifier '#\" + (element.key.name) + \"' has already been declared\"));\n        }\n      }\n    }\n    this.strict = oldStrict;\n    this.next();\n    node.body = this.finishNode(classBody, \"ClassBody\");\n    this.exitClassBody();\n    return this.finishNode(node, isStatement ? \"ClassDeclaration\" : \"ClassExpression\")\n  };\n\n  pp$8.parseClassElement = function(constructorAllowsSuper) {\n    if (this.eat(types$1.semi)) { return null }\n\n    var ecmaVersion = this.options.ecmaVersion;\n    var node = this.startNode();\n    var keyName = \"\";\n    var isGenerator = false;\n    var isAsync = false;\n    var kind = \"method\";\n    var isStatic = false;\n\n    if (this.eatContextual(\"static\")) {\n      // Parse static init block\n      if (ecmaVersion >= 13 && this.eat(types$1.braceL)) {\n        this.parseClassStaticBlock(node);\n        return node\n      }\n      if (this.isClassElementNameStart() || this.type === types$1.star) {\n        isStatic = true;\n      } else {\n        keyName = \"static\";\n      }\n    }\n    node.static = isStatic;\n    if (!keyName && ecmaVersion >= 8 && this.eatContextual(\"async\")) {\n      if ((this.isClassElementNameStart() || this.type === types$1.star) && !this.canInsertSemicolon()) {\n        isAsync = true;\n      } else {\n        keyName = \"async\";\n      }\n    }\n    if (!keyName && (ecmaVersion >= 9 || !isAsync) && this.eat(types$1.star)) {\n      isGenerator = true;\n    }\n    if (!keyName && !isAsync && !isGenerator) {\n      var lastValue = this.value;\n      if (this.eatContextual(\"get\") || this.eatContextual(\"set\")) {\n        if (this.isClassElementNameStart()) {\n          kind = lastValue;\n        } else {\n          keyName = lastValue;\n        }\n      }\n    }\n\n    // Parse element name\n    if (keyName) {\n      // 'async', 'get', 'set', or 'static' were not a keyword contextually.\n      // The last token is any of those. Make it the element name.\n      node.computed = false;\n      node.key = this.startNodeAt(this.lastTokStart, this.lastTokStartLoc);\n      node.key.name = keyName;\n      this.finishNode(node.key, \"Identifier\");\n    } else {\n      this.parseClassElementName(node);\n    }\n\n    // Parse element value\n    if (ecmaVersion < 13 || this.type === types$1.parenL || kind !== \"method\" || isGenerator || isAsync) {\n      var isConstructor = !node.static && checkKeyName(node, \"constructor\");\n      var allowsDirectSuper = isConstructor && constructorAllowsSuper;\n      // Couldn't move this check into the 'parseClassMethod' method for backward compatibility.\n      if (isConstructor && kind !== \"method\") { this.raise(node.key.start, \"Constructor can't have get/set modifier\"); }\n      node.kind = isConstructor ? \"constructor\" : kind;\n      this.parseClassMethod(node, isGenerator, isAsync, allowsDirectSuper);\n    } else {\n      this.parseClassField(node);\n    }\n\n    return node\n  };\n\n  pp$8.isClassElementNameStart = function() {\n    return (\n      this.type === types$1.name ||\n      this.type === types$1.privateId ||\n      this.type === types$1.num ||\n      this.type === types$1.string ||\n      this.type === types$1.bracketL ||\n      this.type.keyword\n    )\n  };\n\n  pp$8.parseClassElementName = function(element) {\n    if (this.type === types$1.privateId) {\n      if (this.value === \"constructor\") {\n        this.raise(this.start, \"Classes can't have an element named '#constructor'\");\n      }\n      element.computed = false;\n      element.key = this.parsePrivateIdent();\n    } else {\n      this.parsePropertyName(element);\n    }\n  };\n\n  pp$8.parseClassMethod = function(method, isGenerator, isAsync, allowsDirectSuper) {\n    // Check key and flags\n    var key = method.key;\n    if (method.kind === \"constructor\") {\n      if (isGenerator) { this.raise(key.start, \"Constructor can't be a generator\"); }\n      if (isAsync) { this.raise(key.start, \"Constructor can't be an async method\"); }\n    } else if (method.static && checkKeyName(method, \"prototype\")) {\n      this.raise(key.start, \"Classes may not have a static property named prototype\");\n    }\n\n    // Parse value\n    var value = method.value = this.parseMethod(isGenerator, isAsync, allowsDirectSuper);\n\n    // Check value\n    if (method.kind === \"get\" && value.params.length !== 0)\n      { this.raiseRecoverable(value.start, \"getter should have no params\"); }\n    if (method.kind === \"set\" && value.params.length !== 1)\n      { this.raiseRecoverable(value.start, \"setter should have exactly one param\"); }\n    if (method.kind === \"set\" && value.params[0].type === \"RestElement\")\n      { this.raiseRecoverable(value.params[0].start, \"Setter cannot use rest params\"); }\n\n    return this.finishNode(method, \"MethodDefinition\")\n  };\n\n  pp$8.parseClassField = function(field) {\n    if (checkKeyName(field, \"constructor\")) {\n      this.raise(field.key.start, \"Classes can't have a field named 'constructor'\");\n    } else if (field.static && checkKeyName(field, \"prototype\")) {\n      this.raise(field.key.start, \"Classes can't have a static field named 'prototype'\");\n    }\n\n    if (this.eat(types$1.eq)) {\n      // To raise SyntaxError if 'arguments' exists in the initializer.\n      var scope = this.currentThisScope();\n      var inClassFieldInit = scope.inClassFieldInit;\n      scope.inClassFieldInit = true;\n      field.value = this.parseMaybeAssign();\n      scope.inClassFieldInit = inClassFieldInit;\n    } else {\n      field.value = null;\n    }\n    this.semicolon();\n\n    return this.finishNode(field, \"PropertyDefinition\")\n  };\n\n  pp$8.parseClassStaticBlock = function(node) {\n    node.body = [];\n\n    var oldLabels = this.labels;\n    this.labels = [];\n    this.enterScope(SCOPE_CLASS_STATIC_BLOCK | SCOPE_SUPER);\n    while (this.type !== types$1.braceR) {\n      var stmt = this.parseStatement(null);\n      node.body.push(stmt);\n    }\n    this.next();\n    this.exitScope();\n    this.labels = oldLabels;\n\n    return this.finishNode(node, \"StaticBlock\")\n  };\n\n  pp$8.parseClassId = function(node, isStatement) {\n    if (this.type === types$1.name) {\n      node.id = this.parseIdent();\n      if (isStatement)\n        { this.checkLValSimple(node.id, BIND_LEXICAL, false); }\n    } else {\n      if (isStatement === true)\n        { this.unexpected(); }\n      node.id = null;\n    }\n  };\n\n  pp$8.parseClassSuper = function(node) {\n    node.superClass = this.eat(types$1._extends) ? this.parseExprSubscripts(null, false) : null;\n  };\n\n  pp$8.enterClassBody = function() {\n    var element = {declared: Object.create(null), used: []};\n    this.privateNameStack.push(element);\n    return element.declared\n  };\n\n  pp$8.exitClassBody = function() {\n    var ref = this.privateNameStack.pop();\n    var declared = ref.declared;\n    var used = ref.used;\n    var len = this.privateNameStack.length;\n    var parent = len === 0 ? null : this.privateNameStack[len - 1];\n    for (var i = 0; i < used.length; ++i) {\n      var id = used[i];\n      if (!hasOwn(declared, id.name)) {\n        if (parent) {\n          parent.used.push(id);\n        } else {\n          this.raiseRecoverable(id.start, (\"Private field '#\" + (id.name) + \"' must be declared in an enclosing class\"));\n        }\n      }\n    }\n  };\n\n  function isPrivateNameConflicted(privateNameMap, element) {\n    var name = element.key.name;\n    var curr = privateNameMap[name];\n\n    var next = \"true\";\n    if (element.type === \"MethodDefinition\" && (element.kind === \"get\" || element.kind === \"set\")) {\n      next = (element.static ? \"s\" : \"i\") + element.kind;\n    }\n\n    // `class { get #a(){}; static set #a(_){} }` is also conflict.\n    if (\n      curr === \"iget\" && next === \"iset\" ||\n      curr === \"iset\" && next === \"iget\" ||\n      curr === \"sget\" && next === \"sset\" ||\n      curr === \"sset\" && next === \"sget\"\n    ) {\n      privateNameMap[name] = \"true\";\n      return false\n    } else if (!curr) {\n      privateNameMap[name] = next;\n      return false\n    } else {\n      return true\n    }\n  }\n\n  function checkKeyName(node, name) {\n    var computed = node.computed;\n    var key = node.key;\n    return !computed && (\n      key.type === \"Identifier\" && key.name === name ||\n      key.type === \"Literal\" && key.value === name\n    )\n  }\n\n  // Parses module export declaration.\n\n  pp$8.parseExport = function(node, exports) {\n    this.next();\n    // export * from '...'\n    if (this.eat(types$1.star)) {\n      if (this.options.ecmaVersion >= 11) {\n        if (this.eatContextual(\"as\")) {\n          node.exported = this.parseModuleExportName();\n          this.checkExport(exports, node.exported, this.lastTokStart);\n        } else {\n          node.exported = null;\n        }\n      }\n      this.expectContextual(\"from\");\n      if (this.type !== types$1.string) { this.unexpected(); }\n      node.source = this.parseExprAtom();\n      this.semicolon();\n      return this.finishNode(node, \"ExportAllDeclaration\")\n    }\n    if (this.eat(types$1._default)) { // export default ...\n      this.checkExport(exports, \"default\", this.lastTokStart);\n      var isAsync;\n      if (this.type === types$1._function || (isAsync = this.isAsyncFunction())) {\n        var fNode = this.startNode();\n        this.next();\n        if (isAsync) { this.next(); }\n        node.declaration = this.parseFunction(fNode, FUNC_STATEMENT | FUNC_NULLABLE_ID, false, isAsync);\n      } else if (this.type === types$1._class) {\n        var cNode = this.startNode();\n        node.declaration = this.parseClass(cNode, \"nullableID\");\n      } else {\n        node.declaration = this.parseMaybeAssign();\n        this.semicolon();\n      }\n      return this.finishNode(node, \"ExportDefaultDeclaration\")\n    }\n    // export var|const|let|function|class ...\n    if (this.shouldParseExportStatement()) {\n      node.declaration = this.parseStatement(null);\n      if (node.declaration.type === \"VariableDeclaration\")\n        { this.checkVariableExport(exports, node.declaration.declarations); }\n      else\n        { this.checkExport(exports, node.declaration.id, node.declaration.id.start); }\n      node.specifiers = [];\n      node.source = null;\n    } else { // export { x, y as z } [from '...']\n      node.declaration = null;\n      node.specifiers = this.parseExportSpecifiers(exports);\n      if (this.eatContextual(\"from\")) {\n        if (this.type !== types$1.string) { this.unexpected(); }\n        node.source = this.parseExprAtom();\n      } else {\n        for (var i = 0, list = node.specifiers; i < list.length; i += 1) {\n          // check for keywords used as local names\n          var spec = list[i];\n\n          this.checkUnreserved(spec.local);\n          // check if export is defined\n          this.checkLocalExport(spec.local);\n\n          if (spec.local.type === \"Literal\") {\n            this.raise(spec.local.start, \"A string literal cannot be used as an exported binding without `from`.\");\n          }\n        }\n\n        node.source = null;\n      }\n      this.semicolon();\n    }\n    return this.finishNode(node, \"ExportNamedDeclaration\")\n  };\n\n  pp$8.checkExport = function(exports, name, pos) {\n    if (!exports) { return }\n    if (typeof name !== \"string\")\n      { name = name.type === \"Identifier\" ? name.name : name.value; }\n    if (hasOwn(exports, name))\n      { this.raiseRecoverable(pos, \"Duplicate export '\" + name + \"'\"); }\n    exports[name] = true;\n  };\n\n  pp$8.checkPatternExport = function(exports, pat) {\n    var type = pat.type;\n    if (type === \"Identifier\")\n      { this.checkExport(exports, pat, pat.start); }\n    else if (type === \"ObjectPattern\")\n      { for (var i = 0, list = pat.properties; i < list.length; i += 1)\n        {\n          var prop = list[i];\n\n          this.checkPatternExport(exports, prop);\n        } }\n    else if (type === \"ArrayPattern\")\n      { for (var i$1 = 0, list$1 = pat.elements; i$1 < list$1.length; i$1 += 1) {\n        var elt = list$1[i$1];\n\n          if (elt) { this.checkPatternExport(exports, elt); }\n      } }\n    else if (type === \"Property\")\n      { this.checkPatternExport(exports, pat.value); }\n    else if (type === \"AssignmentPattern\")\n      { this.checkPatternExport(exports, pat.left); }\n    else if (type === \"RestElement\")\n      { this.checkPatternExport(exports, pat.argument); }\n    else if (type === \"ParenthesizedExpression\")\n      { this.checkPatternExport(exports, pat.expression); }\n  };\n\n  pp$8.checkVariableExport = function(exports, decls) {\n    if (!exports) { return }\n    for (var i = 0, list = decls; i < list.length; i += 1)\n      {\n      var decl = list[i];\n\n      this.checkPatternExport(exports, decl.id);\n    }\n  };\n\n  pp$8.shouldParseExportStatement = function() {\n    return this.type.keyword === \"var\" ||\n      this.type.keyword === \"const\" ||\n      this.type.keyword === \"class\" ||\n      this.type.keyword === \"function\" ||\n      this.isLet() ||\n      this.isAsyncFunction()\n  };\n\n  // Parses a comma-separated list of module exports.\n\n  pp$8.parseExportSpecifiers = function(exports) {\n    var nodes = [], first = true;\n    // export { x, y as z } [from '...']\n    this.expect(types$1.braceL);\n    while (!this.eat(types$1.braceR)) {\n      if (!first) {\n        this.expect(types$1.comma);\n        if (this.afterTrailingComma(types$1.braceR)) { break }\n      } else { first = false; }\n\n      var node = this.startNode();\n      node.local = this.parseModuleExportName();\n      node.exported = this.eatContextual(\"as\") ? this.parseModuleExportName() : node.local;\n      this.checkExport(\n        exports,\n        node.exported,\n        node.exported.start\n      );\n      nodes.push(this.finishNode(node, \"ExportSpecifier\"));\n    }\n    return nodes\n  };\n\n  // Parses import declaration.\n\n  pp$8.parseImport = function(node) {\n    this.next();\n    // import '...'\n    if (this.type === types$1.string) {\n      node.specifiers = empty$1;\n      node.source = this.parseExprAtom();\n    } else {\n      node.specifiers = this.parseImportSpecifiers();\n      this.expectContextual(\"from\");\n      node.source = this.type === types$1.string ? this.parseExprAtom() : this.unexpected();\n    }\n    this.semicolon();\n    return this.finishNode(node, \"ImportDeclaration\")\n  };\n\n  // Parses a comma-separated list of module imports.\n\n  pp$8.parseImportSpecifiers = function() {\n    var nodes = [], first = true;\n    if (this.type === types$1.name) {\n      // import defaultObj, { x, y as z } from '...'\n      var node = this.startNode();\n      node.local = this.parseIdent();\n      this.checkLValSimple(node.local, BIND_LEXICAL);\n      nodes.push(this.finishNode(node, \"ImportDefaultSpecifier\"));\n      if (!this.eat(types$1.comma)) { return nodes }\n    }\n    if (this.type === types$1.star) {\n      var node$1 = this.startNode();\n      this.next();\n      this.expectContextual(\"as\");\n      node$1.local = this.parseIdent();\n      this.checkLValSimple(node$1.local, BIND_LEXICAL);\n      nodes.push(this.finishNode(node$1, \"ImportNamespaceSpecifier\"));\n      return nodes\n    }\n    this.expect(types$1.braceL);\n    while (!this.eat(types$1.braceR)) {\n      if (!first) {\n        this.expect(types$1.comma);\n        if (this.afterTrailingComma(types$1.braceR)) { break }\n      } else { first = false; }\n\n      var node$2 = this.startNode();\n      node$2.imported = this.parseModuleExportName();\n      if (this.eatContextual(\"as\")) {\n        node$2.local = this.parseIdent();\n      } else {\n        this.checkUnreserved(node$2.imported);\n        node$2.local = node$2.imported;\n      }\n      this.checkLValSimple(node$2.local, BIND_LEXICAL);\n      nodes.push(this.finishNode(node$2, \"ImportSpecifier\"));\n    }\n    return nodes\n  };\n\n  pp$8.parseModuleExportName = function() {\n    if (this.options.ecmaVersion >= 13 && this.type === types$1.string) {\n      var stringLiteral = this.parseLiteral(this.value);\n      if (loneSurrogate.test(stringLiteral.value)) {\n        this.raise(stringLiteral.start, \"An export name cannot include a lone surrogate.\");\n      }\n      return stringLiteral\n    }\n    return this.parseIdent(true)\n  };\n\n  // Set `ExpressionStatement#directive` property for directive prologues.\n  pp$8.adaptDirectivePrologue = function(statements) {\n    for (var i = 0; i < statements.length && this.isDirectiveCandidate(statements[i]); ++i) {\n      statements[i].directive = statements[i].expression.raw.slice(1, -1);\n    }\n  };\n  pp$8.isDirectiveCandidate = function(statement) {\n    return (\n      this.options.ecmaVersion >= 5 &&\n      statement.type === \"ExpressionStatement\" &&\n      statement.expression.type === \"Literal\" &&\n      typeof statement.expression.value === \"string\" &&\n      // Reject parenthesized strings.\n      (this.input[statement.start] === \"\\\"\" || this.input[statement.start] === \"'\")\n    )\n  };\n\n  var pp$7 = Parser.prototype;\n\n  // Convert existing expression atom to assignable pattern\n  // if possible.\n\n  pp$7.toAssignable = function(node, isBinding, refDestructuringErrors) {\n    if (this.options.ecmaVersion >= 6 && node) {\n      switch (node.type) {\n      case \"Identifier\":\n        if (this.inAsync && node.name === \"await\")\n          { this.raise(node.start, \"Cannot use 'await' as identifier inside an async function\"); }\n        break\n\n      case \"ObjectPattern\":\n      case \"ArrayPattern\":\n      case \"AssignmentPattern\":\n      case \"RestElement\":\n        break\n\n      case \"ObjectExpression\":\n        node.type = \"ObjectPattern\";\n        if (refDestructuringErrors) { this.checkPatternErrors(refDestructuringErrors, true); }\n        for (var i = 0, list = node.properties; i < list.length; i += 1) {\n          var prop = list[i];\n\n        this.toAssignable(prop, isBinding);\n          // Early error:\n          //   AssignmentRestProperty[Yield, Await] :\n          //     `...` DestructuringAssignmentTarget[Yield, Await]\n          //\n          //   It is a Syntax Error if |DestructuringAssignmentTarget| is an |ArrayLiteral| or an |ObjectLiteral|.\n          if (\n            prop.type === \"RestElement\" &&\n            (prop.argument.type === \"ArrayPattern\" || prop.argument.type === \"ObjectPattern\")\n          ) {\n            this.raise(prop.argument.start, \"Unexpected token\");\n          }\n        }\n        break\n\n      case \"Property\":\n        // AssignmentProperty has type === \"Property\"\n        if (node.kind !== \"init\") { this.raise(node.key.start, \"Object pattern can't contain getter or setter\"); }\n        this.toAssignable(node.value, isBinding);\n        break\n\n      case \"ArrayExpression\":\n        node.type = \"ArrayPattern\";\n        if (refDestructuringErrors) { this.checkPatternErrors(refDestructuringErrors, true); }\n        this.toAssignableList(node.elements, isBinding);\n        break\n\n      case \"SpreadElement\":\n        node.type = \"RestElement\";\n        this.toAssignable(node.argument, isBinding);\n        if (node.argument.type === \"AssignmentPattern\")\n          { this.raise(node.argument.start, \"Rest elements cannot have a default value\"); }\n        break\n\n      case \"AssignmentExpression\":\n        if (node.operator !== \"=\") { this.raise(node.left.end, \"Only '=' operator can be used for specifying default value.\"); }\n        node.type = \"AssignmentPattern\";\n        delete node.operator;\n        this.toAssignable(node.left, isBinding);\n        break\n\n      case \"ParenthesizedExpression\":\n        this.toAssignable(node.expression, isBinding, refDestructuringErrors);\n        break\n\n      case \"ChainExpression\":\n        this.raiseRecoverable(node.start, \"Optional chaining cannot appear in left-hand side\");\n        break\n\n      case \"MemberExpression\":\n        if (!isBinding) { break }\n\n      default:\n        this.raise(node.start, \"Assigning to rvalue\");\n      }\n    } else if (refDestructuringErrors) { this.checkPatternErrors(refDestructuringErrors, true); }\n    return node\n  };\n\n  // Convert list of expression atoms to binding list.\n\n  pp$7.toAssignableList = function(exprList, isBinding) {\n    var end = exprList.length;\n    for (var i = 0; i < end; i++) {\n      var elt = exprList[i];\n      if (elt) { this.toAssignable(elt, isBinding); }\n    }\n    if (end) {\n      var last = exprList[end - 1];\n      if (this.options.ecmaVersion === 6 && isBinding && last && last.type === \"RestElement\" && last.argument.type !== \"Identifier\")\n        { this.unexpected(last.argument.start); }\n    }\n    return exprList\n  };\n\n  // Parses spread element.\n\n  pp$7.parseSpread = function(refDestructuringErrors) {\n    var node = this.startNode();\n    this.next();\n    node.argument = this.parseMaybeAssign(false, refDestructuringErrors);\n    return this.finishNode(node, \"SpreadElement\")\n  };\n\n  pp$7.parseRestBinding = function() {\n    var node = this.startNode();\n    this.next();\n\n    // RestElement inside of a function parameter must be an identifier\n    if (this.options.ecmaVersion === 6 && this.type !== types$1.name)\n      { this.unexpected(); }\n\n    node.argument = this.parseBindingAtom();\n\n    return this.finishNode(node, \"RestElement\")\n  };\n\n  // Parses lvalue (assignable) atom.\n\n  pp$7.parseBindingAtom = function() {\n    if (this.options.ecmaVersion >= 6) {\n      switch (this.type) {\n      case types$1.bracketL:\n        var node = this.startNode();\n        this.next();\n        node.elements = this.parseBindingList(types$1.bracketR, true, true);\n        return this.finishNode(node, \"ArrayPattern\")\n\n      case types$1.braceL:\n        return this.parseObj(true)\n      }\n    }\n    return this.parseIdent()\n  };\n\n  pp$7.parseBindingList = function(close, allowEmpty, allowTrailingComma) {\n    var elts = [], first = true;\n    while (!this.eat(close)) {\n      if (first) { first = false; }\n      else { this.expect(types$1.comma); }\n      if (allowEmpty && this.type === types$1.comma) {\n        elts.push(null);\n      } else if (allowTrailingComma && this.afterTrailingComma(close)) {\n        break\n      } else if (this.type === types$1.ellipsis) {\n        var rest = this.parseRestBinding();\n        this.parseBindingListItem(rest);\n        elts.push(rest);\n        if (this.type === types$1.comma) { this.raise(this.start, \"Comma is not permitted after the rest element\"); }\n        this.expect(close);\n        break\n      } else {\n        var elem = this.parseMaybeDefault(this.start, this.startLoc);\n        this.parseBindingListItem(elem);\n        elts.push(elem);\n      }\n    }\n    return elts\n  };\n\n  pp$7.parseBindingListItem = function(param) {\n    return param\n  };\n\n  // Parses assignment pattern around given atom if possible.\n\n  pp$7.parseMaybeDefault = function(startPos, startLoc, left) {\n    left = left || this.parseBindingAtom();\n    if (this.options.ecmaVersion < 6 || !this.eat(types$1.eq)) { return left }\n    var node = this.startNodeAt(startPos, startLoc);\n    node.left = left;\n    node.right = this.parseMaybeAssign();\n    return this.finishNode(node, \"AssignmentPattern\")\n  };\n\n  // The following three functions all verify that a node is an lvalue —\n  // something that can be bound, or assigned to. In order to do so, they perform\n  // a variety of checks:\n  //\n  // - Check that none of the bound/assigned-to identifiers are reserved words.\n  // - Record name declarations for bindings in the appropriate scope.\n  // - Check duplicate argument names, if checkClashes is set.\n  //\n  // If a complex binding pattern is encountered (e.g., object and array\n  // destructuring), the entire pattern is recursively checked.\n  //\n  // There are three versions of checkLVal*() appropriate for different\n  // circumstances:\n  //\n  // - checkLValSimple() shall be used if the syntactic construct supports\n  //   nothing other than identifiers and member expressions. Parenthesized\n  //   expressions are also correctly handled. This is generally appropriate for\n  //   constructs for which the spec says\n  //\n  //   > It is a Syntax Error if AssignmentTargetType of [the production] is not\n  //   > simple.\n  //\n  //   It is also appropriate for checking if an identifier is valid and not\n  //   defined elsewhere, like import declarations or function/class identifiers.\n  //\n  //   Examples where this is used include:\n  //     a += …;\n  //     import a from '…';\n  //   where a is the node to be checked.\n  //\n  // - checkLValPattern() shall be used if the syntactic construct supports\n  //   anything checkLValSimple() supports, as well as object and array\n  //   destructuring patterns. This is generally appropriate for constructs for\n  //   which the spec says\n  //\n  //   > It is a Syntax Error if [the production] is neither an ObjectLiteral nor\n  //   > an ArrayLiteral and AssignmentTargetType of [the production] is not\n  //   > simple.\n  //\n  //   Examples where this is used include:\n  //     (a = …);\n  //     const a = …;\n  //     try { … } catch (a) { … }\n  //   where a is the node to be checked.\n  //\n  // - checkLValInnerPattern() shall be used if the syntactic construct supports\n  //   anything checkLValPattern() supports, as well as default assignment\n  //   patterns, rest elements, and other constructs that may appear within an\n  //   object or array destructuring pattern.\n  //\n  //   As a special case, function parameters also use checkLValInnerPattern(),\n  //   as they also support defaults and rest constructs.\n  //\n  // These functions deliberately support both assignment and binding constructs,\n  // as the logic for both is exceedingly similar. If the node is the target of\n  // an assignment, then bindingType should be set to BIND_NONE. Otherwise, it\n  // should be set to the appropriate BIND_* constant, like BIND_VAR or\n  // BIND_LEXICAL.\n  //\n  // If the function is called with a non-BIND_NONE bindingType, then\n  // additionally a checkClashes object may be specified to allow checking for\n  // duplicate argument names. checkClashes is ignored if the provided construct\n  // is an assignment (i.e., bindingType is BIND_NONE).\n\n  pp$7.checkLValSimple = function(expr, bindingType, checkClashes) {\n    if ( bindingType === void 0 ) bindingType = BIND_NONE;\n\n    var isBind = bindingType !== BIND_NONE;\n\n    switch (expr.type) {\n    case \"Identifier\":\n      if (this.strict && this.reservedWordsStrictBind.test(expr.name))\n        { this.raiseRecoverable(expr.start, (isBind ? \"Binding \" : \"Assigning to \") + expr.name + \" in strict mode\"); }\n      if (isBind) {\n        if (bindingType === BIND_LEXICAL && expr.name === \"let\")\n          { this.raiseRecoverable(expr.start, \"let is disallowed as a lexically bound name\"); }\n        if (checkClashes) {\n          if (hasOwn(checkClashes, expr.name))\n            { this.raiseRecoverable(expr.start, \"Argument name clash\"); }\n          checkClashes[expr.name] = true;\n        }\n        if (bindingType !== BIND_OUTSIDE) { this.declareName(expr.name, bindingType, expr.start); }\n      }\n      break\n\n    case \"ChainExpression\":\n      this.raiseRecoverable(expr.start, \"Optional chaining cannot appear in left-hand side\");\n      break\n\n    case \"MemberExpression\":\n      if (isBind) { this.raiseRecoverable(expr.start, \"Binding member expression\"); }\n      break\n\n    case \"ParenthesizedExpression\":\n      if (isBind) { this.raiseRecoverable(expr.start, \"Binding parenthesized expression\"); }\n      return this.checkLValSimple(expr.expression, bindingType, checkClashes)\n\n    default:\n      this.raise(expr.start, (isBind ? \"Binding\" : \"Assigning to\") + \" rvalue\");\n    }\n  };\n\n  pp$7.checkLValPattern = function(expr, bindingType, checkClashes) {\n    if ( bindingType === void 0 ) bindingType = BIND_NONE;\n\n    switch (expr.type) {\n    case \"ObjectPattern\":\n      for (var i = 0, list = expr.properties; i < list.length; i += 1) {\n        var prop = list[i];\n\n      this.checkLValInnerPattern(prop, bindingType, checkClashes);\n      }\n      break\n\n    case \"ArrayPattern\":\n      for (var i$1 = 0, list$1 = expr.elements; i$1 < list$1.length; i$1 += 1) {\n        var elem = list$1[i$1];\n\n      if (elem) { this.checkLValInnerPattern(elem, bindingType, checkClashes); }\n      }\n      break\n\n    default:\n      this.checkLValSimple(expr, bindingType, checkClashes);\n    }\n  };\n\n  pp$7.checkLValInnerPattern = function(expr, bindingType, checkClashes) {\n    if ( bindingType === void 0 ) bindingType = BIND_NONE;\n\n    switch (expr.type) {\n    case \"Property\":\n      // AssignmentProperty has type === \"Property\"\n      this.checkLValInnerPattern(expr.value, bindingType, checkClashes);\n      break\n\n    case \"AssignmentPattern\":\n      this.checkLValPattern(expr.left, bindingType, checkClashes);\n      break\n\n    case \"RestElement\":\n      this.checkLValPattern(expr.argument, bindingType, checkClashes);\n      break\n\n    default:\n      this.checkLValPattern(expr, bindingType, checkClashes);\n    }\n  };\n\n  // The algorithm used to determine whether a regexp can appear at a\n\n  var TokContext = function TokContext(token, isExpr, preserveSpace, override, generator) {\n    this.token = token;\n    this.isExpr = !!isExpr;\n    this.preserveSpace = !!preserveSpace;\n    this.override = override;\n    this.generator = !!generator;\n  };\n\n  var types = {\n    b_stat: new TokContext(\"{\", false),\n    b_expr: new TokContext(\"{\", true),\n    b_tmpl: new TokContext(\"${\", false),\n    p_stat: new TokContext(\"(\", false),\n    p_expr: new TokContext(\"(\", true),\n    q_tmpl: new TokContext(\"`\", true, true, function (p) { return p.tryReadTemplateToken(); }),\n    f_stat: new TokContext(\"function\", false),\n    f_expr: new TokContext(\"function\", true),\n    f_expr_gen: new TokContext(\"function\", true, false, null, true),\n    f_gen: new TokContext(\"function\", false, false, null, true)\n  };\n\n  var pp$6 = Parser.prototype;\n\n  pp$6.initialContext = function() {\n    return [types.b_stat]\n  };\n\n  pp$6.curContext = function() {\n    return this.context[this.context.length - 1]\n  };\n\n  pp$6.braceIsBlock = function(prevType) {\n    var parent = this.curContext();\n    if (parent === types.f_expr || parent === types.f_stat)\n      { return true }\n    if (prevType === types$1.colon && (parent === types.b_stat || parent === types.b_expr))\n      { return !parent.isExpr }\n\n    // The check for `tt.name && exprAllowed` detects whether we are\n    // after a `yield` or `of` construct. See the `updateContext` for\n    // `tt.name`.\n    if (prevType === types$1._return || prevType === types$1.name && this.exprAllowed)\n      { return lineBreak.test(this.input.slice(this.lastTokEnd, this.start)) }\n    if (prevType === types$1._else || prevType === types$1.semi || prevType === types$1.eof || prevType === types$1.parenR || prevType === types$1.arrow)\n      { return true }\n    if (prevType === types$1.braceL)\n      { return parent === types.b_stat }\n    if (prevType === types$1._var || prevType === types$1._const || prevType === types$1.name)\n      { return false }\n    return !this.exprAllowed\n  };\n\n  pp$6.inGeneratorContext = function() {\n    for (var i = this.context.length - 1; i >= 1; i--) {\n      var context = this.context[i];\n      if (context.token === \"function\")\n        { return context.generator }\n    }\n    return false\n  };\n\n  pp$6.updateContext = function(prevType) {\n    var update, type = this.type;\n    if (type.keyword && prevType === types$1.dot)\n      { this.exprAllowed = false; }\n    else if (update = type.updateContext)\n      { update.call(this, prevType); }\n    else\n      { this.exprAllowed = type.beforeExpr; }\n  };\n\n  // Used to handle egde cases when token context could not be inferred correctly during tokenization phase\n\n  pp$6.overrideContext = function(tokenCtx) {\n    if (this.curContext() !== tokenCtx) {\n      this.context[this.context.length - 1] = tokenCtx;\n    }\n  };\n\n  // Token-specific context update code\n\n  types$1.parenR.updateContext = types$1.braceR.updateContext = function() {\n    if (this.context.length === 1) {\n      this.exprAllowed = true;\n      return\n    }\n    var out = this.context.pop();\n    if (out === types.b_stat && this.curContext().token === \"function\") {\n      out = this.context.pop();\n    }\n    this.exprAllowed = !out.isExpr;\n  };\n\n  types$1.braceL.updateContext = function(prevType) {\n    this.context.push(this.braceIsBlock(prevType) ? types.b_stat : types.b_expr);\n    this.exprAllowed = true;\n  };\n\n  types$1.dollarBraceL.updateContext = function() {\n    this.context.push(types.b_tmpl);\n    this.exprAllowed = true;\n  };\n\n  types$1.parenL.updateContext = function(prevType) {\n    var statementParens = prevType === types$1._if || prevType === types$1._for || prevType === types$1._with || prevType === types$1._while;\n    this.context.push(statementParens ? types.p_stat : types.p_expr);\n    this.exprAllowed = true;\n  };\n\n  types$1.incDec.updateContext = function() {\n    // tokExprAllowed stays unchanged\n  };\n\n  types$1._function.updateContext = types$1._class.updateContext = function(prevType) {\n    if (prevType.beforeExpr && prevType !== types$1._else &&\n        !(prevType === types$1.semi && this.curContext() !== types.p_stat) &&\n        !(prevType === types$1._return && lineBreak.test(this.input.slice(this.lastTokEnd, this.start))) &&\n        !((prevType === types$1.colon || prevType === types$1.braceL) && this.curContext() === types.b_stat))\n      { this.context.push(types.f_expr); }\n    else\n      { this.context.push(types.f_stat); }\n    this.exprAllowed = false;\n  };\n\n  types$1.backQuote.updateContext = function() {\n    if (this.curContext() === types.q_tmpl)\n      { this.context.pop(); }\n    else\n      { this.context.push(types.q_tmpl); }\n    this.exprAllowed = false;\n  };\n\n  types$1.star.updateContext = function(prevType) {\n    if (prevType === types$1._function) {\n      var index = this.context.length - 1;\n      if (this.context[index] === types.f_expr)\n        { this.context[index] = types.f_expr_gen; }\n      else\n        { this.context[index] = types.f_gen; }\n    }\n    this.exprAllowed = true;\n  };\n\n  types$1.name.updateContext = function(prevType) {\n    var allowed = false;\n    if (this.options.ecmaVersion >= 6 && prevType !== types$1.dot) {\n      if (this.value === \"of\" && !this.exprAllowed ||\n          this.value === \"yield\" && this.inGeneratorContext())\n        { allowed = true; }\n    }\n    this.exprAllowed = allowed;\n  };\n\n  // A recursive descent parser operates by defining functions for all\n\n  var pp$5 = Parser.prototype;\n\n  // Check if property name clashes with already added.\n  // Object/class getters and setters are not allowed to clash —\n  // either with each other or with an init property — and in\n  // strict mode, init properties are also not allowed to be repeated.\n\n  pp$5.checkPropClash = function(prop, propHash, refDestructuringErrors) {\n    if (this.options.ecmaVersion >= 9 && prop.type === \"SpreadElement\")\n      { return }\n    if (this.options.ecmaVersion >= 6 && (prop.computed || prop.method || prop.shorthand))\n      { return }\n    var key = prop.key;\n    var name;\n    switch (key.type) {\n    case \"Identifier\": name = key.name; break\n    case \"Literal\": name = String(key.value); break\n    default: return\n    }\n    var kind = prop.kind;\n    if (this.options.ecmaVersion >= 6) {\n      if (name === \"__proto__\" && kind === \"init\") {\n        if (propHash.proto) {\n          if (refDestructuringErrors) {\n            if (refDestructuringErrors.doubleProto < 0) {\n              refDestructuringErrors.doubleProto = key.start;\n            }\n          } else {\n            this.raiseRecoverable(key.start, \"Redefinition of __proto__ property\");\n          }\n        }\n        propHash.proto = true;\n      }\n      return\n    }\n    name = \"$\" + name;\n    var other = propHash[name];\n    if (other) {\n      var redefinition;\n      if (kind === \"init\") {\n        redefinition = this.strict && other.init || other.get || other.set;\n      } else {\n        redefinition = other.init || other[kind];\n      }\n      if (redefinition)\n        { this.raiseRecoverable(key.start, \"Redefinition of property\"); }\n    } else {\n      other = propHash[name] = {\n        init: false,\n        get: false,\n        set: false\n      };\n    }\n    other[kind] = true;\n  };\n\n  // ### Expression parsing\n\n  // These nest, from the most general expression type at the top to\n  // 'atomic', nondivisible expression types at the bottom. Most of\n  // the functions will simply let the function(s) below them parse,\n  // and, *if* the syntactic construct they handle is present, wrap\n  // the AST node that the inner parser gave them in another node.\n\n  // Parse a full expression. The optional arguments are used to\n  // forbid the `in` operator (in for loops initalization expressions)\n  // and provide reference for storing '=' operator inside shorthand\n  // property assignment in contexts where both object expression\n  // and object pattern might appear (so it's possible to raise\n  // delayed syntax error at correct position).\n\n  pp$5.parseExpression = function(forInit, refDestructuringErrors) {\n    var startPos = this.start, startLoc = this.startLoc;\n    var expr = this.parseMaybeAssign(forInit, refDestructuringErrors);\n    if (this.type === types$1.comma) {\n      var node = this.startNodeAt(startPos, startLoc);\n      node.expressions = [expr];\n      while (this.eat(types$1.comma)) { node.expressions.push(this.parseMaybeAssign(forInit, refDestructuringErrors)); }\n      return this.finishNode(node, \"SequenceExpression\")\n    }\n    return expr\n  };\n\n  // Parse an assignment expression. This includes applications of\n  // operators like `+=`.\n\n  pp$5.parseMaybeAssign = function(forInit, refDestructuringErrors, afterLeftParse) {\n    if (this.isContextual(\"yield\")) {\n      if (this.inGenerator) { return this.parseYield(forInit) }\n      // The tokenizer will assume an expression is allowed after\n      // `yield`, but this isn't that kind of yield\n      else { this.exprAllowed = false; }\n    }\n\n    var ownDestructuringErrors = false, oldParenAssign = -1, oldTrailingComma = -1, oldDoubleProto = -1;\n    if (refDestructuringErrors) {\n      oldParenAssign = refDestructuringErrors.parenthesizedAssign;\n      oldTrailingComma = refDestructuringErrors.trailingComma;\n      oldDoubleProto = refDestructuringErrors.doubleProto;\n      refDestructuringErrors.parenthesizedAssign = refDestructuringErrors.trailingComma = -1;\n    } else {\n      refDestructuringErrors = new DestructuringErrors;\n      ownDestructuringErrors = true;\n    }\n\n    var startPos = this.start, startLoc = this.startLoc;\n    if (this.type === types$1.parenL || this.type === types$1.name) {\n      this.potentialArrowAt = this.start;\n      this.potentialArrowInForAwait = forInit === \"await\";\n    }\n    var left = this.parseMaybeConditional(forInit, refDestructuringErrors);\n    if (afterLeftParse) { left = afterLeftParse.call(this, left, startPos, startLoc); }\n    if (this.type.isAssign) {\n      var node = this.startNodeAt(startPos, startLoc);\n      node.operator = this.value;\n      if (this.type === types$1.eq)\n        { left = this.toAssignable(left, false, refDestructuringErrors); }\n      if (!ownDestructuringErrors) {\n        refDestructuringErrors.parenthesizedAssign = refDestructuringErrors.trailingComma = refDestructuringErrors.doubleProto = -1;\n      }\n      if (refDestructuringErrors.shorthandAssign >= left.start)\n        { refDestructuringErrors.shorthandAssign = -1; } // reset because shorthand default was used correctly\n      if (this.type === types$1.eq)\n        { this.checkLValPattern(left); }\n      else\n        { this.checkLValSimple(left); }\n      node.left = left;\n      this.next();\n      node.right = this.parseMaybeAssign(forInit);\n      if (oldDoubleProto > -1) { refDestructuringErrors.doubleProto = oldDoubleProto; }\n      return this.finishNode(node, \"AssignmentExpression\")\n    } else {\n      if (ownDestructuringErrors) { this.checkExpressionErrors(refDestructuringErrors, true); }\n    }\n    if (oldParenAssign > -1) { refDestructuringErrors.parenthesizedAssign = oldParenAssign; }\n    if (oldTrailingComma > -1) { refDestructuringErrors.trailingComma = oldTrailingComma; }\n    return left\n  };\n\n  // Parse a ternary conditional (`?:`) operator.\n\n  pp$5.parseMaybeConditional = function(forInit, refDestructuringErrors) {\n    var startPos = this.start, startLoc = this.startLoc;\n    var expr = this.parseExprOps(forInit, refDestructuringErrors);\n    if (this.checkExpressionErrors(refDestructuringErrors)) { return expr }\n    if (this.eat(types$1.question)) {\n      var node = this.startNodeAt(startPos, startLoc);\n      node.test = expr;\n      node.consequent = this.parseMaybeAssign();\n      this.expect(types$1.colon);\n      node.alternate = this.parseMaybeAssign(forInit);\n      return this.finishNode(node, \"ConditionalExpression\")\n    }\n    return expr\n  };\n\n  // Start the precedence parser.\n\n  pp$5.parseExprOps = function(forInit, refDestructuringErrors) {\n    var startPos = this.start, startLoc = this.startLoc;\n    var expr = this.parseMaybeUnary(refDestructuringErrors, false, false, forInit);\n    if (this.checkExpressionErrors(refDestructuringErrors)) { return expr }\n    return expr.start === startPos && expr.type === \"ArrowFunctionExpression\" ? expr : this.parseExprOp(expr, startPos, startLoc, -1, forInit)\n  };\n\n  // Parse binary operators with the operator precedence parsing\n  // algorithm. `left` is the left-hand side of the operator.\n  // `minPrec` provides context that allows the function to stop and\n  // defer further parser to one of its callers when it encounters an\n  // operator that has a lower precedence than the set it is parsing.\n\n  pp$5.parseExprOp = function(left, leftStartPos, leftStartLoc, minPrec, forInit) {\n    var prec = this.type.binop;\n    if (prec != null && (!forInit || this.type !== types$1._in)) {\n      if (prec > minPrec) {\n        var logical = this.type === types$1.logicalOR || this.type === types$1.logicalAND;\n        var coalesce = this.type === types$1.coalesce;\n        if (coalesce) {\n          // Handle the precedence of `tt.coalesce` as equal to the range of logical expressions.\n          // In other words, `node.right` shouldn't contain logical expressions in order to check the mixed error.\n          prec = types$1.logicalAND.binop;\n        }\n        var op = this.value;\n        this.next();\n        var startPos = this.start, startLoc = this.startLoc;\n        var right = this.parseExprOp(this.parseMaybeUnary(null, false, false, forInit), startPos, startLoc, prec, forInit);\n        var node = this.buildBinary(leftStartPos, leftStartLoc, left, right, op, logical || coalesce);\n        if ((logical && this.type === types$1.coalesce) || (coalesce && (this.type === types$1.logicalOR || this.type === types$1.logicalAND))) {\n          this.raiseRecoverable(this.start, \"Logical expressions and coalesce expressions cannot be mixed. Wrap either by parentheses\");\n        }\n        return this.parseExprOp(node, leftStartPos, leftStartLoc, minPrec, forInit)\n      }\n    }\n    return left\n  };\n\n  pp$5.buildBinary = function(startPos, startLoc, left, right, op, logical) {\n    if (right.type === \"PrivateIdentifier\") { this.raise(right.start, \"Private identifier can only be left side of binary expression\"); }\n    var node = this.startNodeAt(startPos, startLoc);\n    node.left = left;\n    node.operator = op;\n    node.right = right;\n    return this.finishNode(node, logical ? \"LogicalExpression\" : \"BinaryExpression\")\n  };\n\n  // Parse unary operators, both prefix and postfix.\n\n  pp$5.parseMaybeUnary = function(refDestructuringErrors, sawUnary, incDec, forInit) {\n    var startPos = this.start, startLoc = this.startLoc, expr;\n    if (this.isContextual(\"await\") && this.canAwait) {\n      expr = this.parseAwait(forInit);\n      sawUnary = true;\n    } else if (this.type.prefix) {\n      var node = this.startNode(), update = this.type === types$1.incDec;\n      node.operator = this.value;\n      node.prefix = true;\n      this.next();\n      node.argument = this.parseMaybeUnary(null, true, update, forInit);\n      this.checkExpressionErrors(refDestructuringErrors, true);\n      if (update) { this.checkLValSimple(node.argument); }\n      else if (this.strict && node.operator === \"delete\" &&\n               node.argument.type === \"Identifier\")\n        { this.raiseRecoverable(node.start, \"Deleting local variable in strict mode\"); }\n      else if (node.operator === \"delete\" && isPrivateFieldAccess(node.argument))\n        { this.raiseRecoverable(node.start, \"Private fields can not be deleted\"); }\n      else { sawUnary = true; }\n      expr = this.finishNode(node, update ? \"UpdateExpression\" : \"UnaryExpression\");\n    } else if (!sawUnary && this.type === types$1.privateId) {\n      if (forInit || this.privateNameStack.length === 0) { this.unexpected(); }\n      expr = this.parsePrivateIdent();\n      // only could be private fields in 'in', such as #x in obj\n      if (this.type !== types$1._in) { this.unexpected(); }\n    } else {\n      expr = this.parseExprSubscripts(refDestructuringErrors, forInit);\n      if (this.checkExpressionErrors(refDestructuringErrors)) { return expr }\n      while (this.type.postfix && !this.canInsertSemicolon()) {\n        var node$1 = this.startNodeAt(startPos, startLoc);\n        node$1.operator = this.value;\n        node$1.prefix = false;\n        node$1.argument = expr;\n        this.checkLValSimple(expr);\n        this.next();\n        expr = this.finishNode(node$1, \"UpdateExpression\");\n      }\n    }\n\n    if (!incDec && this.eat(types$1.starstar)) {\n      if (sawUnary)\n        { this.unexpected(this.lastTokStart); }\n      else\n        { return this.buildBinary(startPos, startLoc, expr, this.parseMaybeUnary(null, false, false, forInit), \"**\", false) }\n    } else {\n      return expr\n    }\n  };\n\n  function isPrivateFieldAccess(node) {\n    return (\n      node.type === \"MemberExpression\" && node.property.type === \"PrivateIdentifier\" ||\n      node.type === \"ChainExpression\" && isPrivateFieldAccess(node.expression)\n    )\n  }\n\n  // Parse call, dot, and `[]`-subscript expressions.\n\n  pp$5.parseExprSubscripts = function(refDestructuringErrors, forInit) {\n    var startPos = this.start, startLoc = this.startLoc;\n    var expr = this.parseExprAtom(refDestructuringErrors, forInit);\n    if (expr.type === \"ArrowFunctionExpression\" && this.input.slice(this.lastTokStart, this.lastTokEnd) !== \")\")\n      { return expr }\n    var result = this.parseSubscripts(expr, startPos, startLoc, false, forInit);\n    if (refDestructuringErrors && result.type === \"MemberExpression\") {\n      if (refDestructuringErrors.parenthesizedAssign >= result.start) { refDestructuringErrors.parenthesizedAssign = -1; }\n      if (refDestructuringErrors.parenthesizedBind >= result.start) { refDestructuringErrors.parenthesizedBind = -1; }\n      if (refDestructuringErrors.trailingComma >= result.start) { refDestructuringErrors.trailingComma = -1; }\n    }\n    return result\n  };\n\n  pp$5.parseSubscripts = function(base, startPos, startLoc, noCalls, forInit) {\n    var maybeAsyncArrow = this.options.ecmaVersion >= 8 && base.type === \"Identifier\" && base.name === \"async\" &&\n        this.lastTokEnd === base.end && !this.canInsertSemicolon() && base.end - base.start === 5 &&\n        this.potentialArrowAt === base.start;\n    var optionalChained = false;\n\n    while (true) {\n      var element = this.parseSubscript(base, startPos, startLoc, noCalls, maybeAsyncArrow, optionalChained, forInit);\n\n      if (element.optional) { optionalChained = true; }\n      if (element === base || element.type === \"ArrowFunctionExpression\") {\n        if (optionalChained) {\n          var chainNode = this.startNodeAt(startPos, startLoc);\n          chainNode.expression = element;\n          element = this.finishNode(chainNode, \"ChainExpression\");\n        }\n        return element\n      }\n\n      base = element;\n    }\n  };\n\n  pp$5.parseSubscript = function(base, startPos, startLoc, noCalls, maybeAsyncArrow, optionalChained, forInit) {\n    var optionalSupported = this.options.ecmaVersion >= 11;\n    var optional = optionalSupported && this.eat(types$1.questionDot);\n    if (noCalls && optional) { this.raise(this.lastTokStart, \"Optional chaining cannot appear in the callee of new expressions\"); }\n\n    var computed = this.eat(types$1.bracketL);\n    if (computed || (optional && this.type !== types$1.parenL && this.type !== types$1.backQuote) || this.eat(types$1.dot)) {\n      var node = this.startNodeAt(startPos, startLoc);\n      node.object = base;\n      if (computed) {\n        node.property = this.parseExpression();\n        this.expect(types$1.bracketR);\n      } else if (this.type === types$1.privateId && base.type !== \"Super\") {\n        node.property = this.parsePrivateIdent();\n      } else {\n        node.property = this.parseIdent(this.options.allowReserved !== \"never\");\n      }\n      node.computed = !!computed;\n      if (optionalSupported) {\n        node.optional = optional;\n      }\n      base = this.finishNode(node, \"MemberExpression\");\n    } else if (!noCalls && this.eat(types$1.parenL)) {\n      var refDestructuringErrors = new DestructuringErrors, oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n      this.yieldPos = 0;\n      this.awaitPos = 0;\n      this.awaitIdentPos = 0;\n      var exprList = this.parseExprList(types$1.parenR, this.options.ecmaVersion >= 8, false, refDestructuringErrors);\n      if (maybeAsyncArrow && !optional && !this.canInsertSemicolon() && this.eat(types$1.arrow)) {\n        this.checkPatternErrors(refDestructuringErrors, false);\n        this.checkYieldAwaitInDefaultParams();\n        if (this.awaitIdentPos > 0)\n          { this.raise(this.awaitIdentPos, \"Cannot use 'await' as identifier inside an async function\"); }\n        this.yieldPos = oldYieldPos;\n        this.awaitPos = oldAwaitPos;\n        this.awaitIdentPos = oldAwaitIdentPos;\n        return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), exprList, true, forInit)\n      }\n      this.checkExpressionErrors(refDestructuringErrors, true);\n      this.yieldPos = oldYieldPos || this.yieldPos;\n      this.awaitPos = oldAwaitPos || this.awaitPos;\n      this.awaitIdentPos = oldAwaitIdentPos || this.awaitIdentPos;\n      var node$1 = this.startNodeAt(startPos, startLoc);\n      node$1.callee = base;\n      node$1.arguments = exprList;\n      if (optionalSupported) {\n        node$1.optional = optional;\n      }\n      base = this.finishNode(node$1, \"CallExpression\");\n    } else if (this.type === types$1.backQuote) {\n      if (optional || optionalChained) {\n        this.raise(this.start, \"Optional chaining cannot appear in the tag of tagged template expressions\");\n      }\n      var node$2 = this.startNodeAt(startPos, startLoc);\n      node$2.tag = base;\n      node$2.quasi = this.parseTemplate({isTagged: true});\n      base = this.finishNode(node$2, \"TaggedTemplateExpression\");\n    }\n    return base\n  };\n\n  // Parse an atomic expression — either a single token that is an\n  // expression, an expression started by a keyword like `function` or\n  // `new`, or an expression wrapped in punctuation like `()`, `[]`,\n  // or `{}`.\n\n  pp$5.parseExprAtom = function(refDestructuringErrors, forInit) {\n    // If a division operator appears in an expression position, the\n    // tokenizer got confused, and we force it to read a regexp instead.\n    if (this.type === types$1.slash) { this.readRegexp(); }\n\n    var node, canBeArrow = this.potentialArrowAt === this.start;\n    switch (this.type) {\n    case types$1._super:\n      if (!this.allowSuper)\n        { this.raise(this.start, \"'super' keyword outside a method\"); }\n      node = this.startNode();\n      this.next();\n      if (this.type === types$1.parenL && !this.allowDirectSuper)\n        { this.raise(node.start, \"super() call outside constructor of a subclass\"); }\n      // The `super` keyword can appear at below:\n      // SuperProperty:\n      //     super [ Expression ]\n      //     super . IdentifierName\n      // SuperCall:\n      //     super ( Arguments )\n      if (this.type !== types$1.dot && this.type !== types$1.bracketL && this.type !== types$1.parenL)\n        { this.unexpected(); }\n      return this.finishNode(node, \"Super\")\n\n    case types$1._this:\n      node = this.startNode();\n      this.next();\n      return this.finishNode(node, \"ThisExpression\")\n\n    case types$1.name:\n      var startPos = this.start, startLoc = this.startLoc, containsEsc = this.containsEsc;\n      var id = this.parseIdent(false);\n      if (this.options.ecmaVersion >= 8 && !containsEsc && id.name === \"async\" && !this.canInsertSemicolon() && this.eat(types$1._function)) {\n        this.overrideContext(types.f_expr);\n        return this.parseFunction(this.startNodeAt(startPos, startLoc), 0, false, true, forInit)\n      }\n      if (canBeArrow && !this.canInsertSemicolon()) {\n        if (this.eat(types$1.arrow))\n          { return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), [id], false, forInit) }\n        if (this.options.ecmaVersion >= 8 && id.name === \"async\" && this.type === types$1.name && !containsEsc &&\n            (!this.potentialArrowInForAwait || this.value !== \"of\" || this.containsEsc)) {\n          id = this.parseIdent(false);\n          if (this.canInsertSemicolon() || !this.eat(types$1.arrow))\n            { this.unexpected(); }\n          return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), [id], true, forInit)\n        }\n      }\n      return id\n\n    case types$1.regexp:\n      var value = this.value;\n      node = this.parseLiteral(value.value);\n      node.regex = {pattern: value.pattern, flags: value.flags};\n      return node\n\n    case types$1.num: case types$1.string:\n      return this.parseLiteral(this.value)\n\n    case types$1._null: case types$1._true: case types$1._false:\n      node = this.startNode();\n      node.value = this.type === types$1._null ? null : this.type === types$1._true;\n      node.raw = this.type.keyword;\n      this.next();\n      return this.finishNode(node, \"Literal\")\n\n    case types$1.parenL:\n      var start = this.start, expr = this.parseParenAndDistinguishExpression(canBeArrow, forInit);\n      if (refDestructuringErrors) {\n        if (refDestructuringErrors.parenthesizedAssign < 0 && !this.isSimpleAssignTarget(expr))\n          { refDestructuringErrors.parenthesizedAssign = start; }\n        if (refDestructuringErrors.parenthesizedBind < 0)\n          { refDestructuringErrors.parenthesizedBind = start; }\n      }\n      return expr\n\n    case types$1.bracketL:\n      node = this.startNode();\n      this.next();\n      node.elements = this.parseExprList(types$1.bracketR, true, true, refDestructuringErrors);\n      return this.finishNode(node, \"ArrayExpression\")\n\n    case types$1.braceL:\n      this.overrideContext(types.b_expr);\n      return this.parseObj(false, refDestructuringErrors)\n\n    case types$1._function:\n      node = this.startNode();\n      this.next();\n      return this.parseFunction(node, 0)\n\n    case types$1._class:\n      return this.parseClass(this.startNode(), false)\n\n    case types$1._new:\n      return this.parseNew()\n\n    case types$1.backQuote:\n      return this.parseTemplate()\n\n    case types$1._import:\n      if (this.options.ecmaVersion >= 11) {\n        return this.parseExprImport()\n      } else {\n        return this.unexpected()\n      }\n\n    default:\n      this.unexpected();\n    }\n  };\n\n  pp$5.parseExprImport = function() {\n    var node = this.startNode();\n\n    // Consume `import` as an identifier for `import.meta`.\n    // Because `this.parseIdent(true)` doesn't check escape sequences, it needs the check of `this.containsEsc`.\n    if (this.containsEsc) { this.raiseRecoverable(this.start, \"Escape sequence in keyword import\"); }\n    var meta = this.parseIdent(true);\n\n    switch (this.type) {\n    case types$1.parenL:\n      return this.parseDynamicImport(node)\n    case types$1.dot:\n      node.meta = meta;\n      return this.parseImportMeta(node)\n    default:\n      this.unexpected();\n    }\n  };\n\n  pp$5.parseDynamicImport = function(node) {\n    this.next(); // skip `(`\n\n    // Parse node.source.\n    node.source = this.parseMaybeAssign();\n\n    // Verify ending.\n    if (!this.eat(types$1.parenR)) {\n      var errorPos = this.start;\n      if (this.eat(types$1.comma) && this.eat(types$1.parenR)) {\n        this.raiseRecoverable(errorPos, \"Trailing comma is not allowed in import()\");\n      } else {\n        this.unexpected(errorPos);\n      }\n    }\n\n    return this.finishNode(node, \"ImportExpression\")\n  };\n\n  pp$5.parseImportMeta = function(node) {\n    this.next(); // skip `.`\n\n    var containsEsc = this.containsEsc;\n    node.property = this.parseIdent(true);\n\n    if (node.property.name !== \"meta\")\n      { this.raiseRecoverable(node.property.start, \"The only valid meta property for import is 'import.meta'\"); }\n    if (containsEsc)\n      { this.raiseRecoverable(node.start, \"'import.meta' must not contain escaped characters\"); }\n    if (this.options.sourceType !== \"module\" && !this.options.allowImportExportEverywhere)\n      { this.raiseRecoverable(node.start, \"Cannot use 'import.meta' outside a module\"); }\n\n    return this.finishNode(node, \"MetaProperty\")\n  };\n\n  pp$5.parseLiteral = function(value) {\n    var node = this.startNode();\n    node.value = value;\n    node.raw = this.input.slice(this.start, this.end);\n    if (node.raw.charCodeAt(node.raw.length - 1) === 110) { node.bigint = node.raw.slice(0, -1).replace(/_/g, \"\"); }\n    this.next();\n    return this.finishNode(node, \"Literal\")\n  };\n\n  pp$5.parseParenExpression = function() {\n    this.expect(types$1.parenL);\n    var val = this.parseExpression();\n    this.expect(types$1.parenR);\n    return val\n  };\n\n  pp$5.parseParenAndDistinguishExpression = function(canBeArrow, forInit) {\n    var startPos = this.start, startLoc = this.startLoc, val, allowTrailingComma = this.options.ecmaVersion >= 8;\n    if (this.options.ecmaVersion >= 6) {\n      this.next();\n\n      var innerStartPos = this.start, innerStartLoc = this.startLoc;\n      var exprList = [], first = true, lastIsComma = false;\n      var refDestructuringErrors = new DestructuringErrors, oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, spreadStart;\n      this.yieldPos = 0;\n      this.awaitPos = 0;\n      // Do not save awaitIdentPos to allow checking awaits nested in parameters\n      while (this.type !== types$1.parenR) {\n        first ? first = false : this.expect(types$1.comma);\n        if (allowTrailingComma && this.afterTrailingComma(types$1.parenR, true)) {\n          lastIsComma = true;\n          break\n        } else if (this.type === types$1.ellipsis) {\n          spreadStart = this.start;\n          exprList.push(this.parseParenItem(this.parseRestBinding()));\n          if (this.type === types$1.comma) { this.raise(this.start, \"Comma is not permitted after the rest element\"); }\n          break\n        } else {\n          exprList.push(this.parseMaybeAssign(false, refDestructuringErrors, this.parseParenItem));\n        }\n      }\n      var innerEndPos = this.lastTokEnd, innerEndLoc = this.lastTokEndLoc;\n      this.expect(types$1.parenR);\n\n      if (canBeArrow && !this.canInsertSemicolon() && this.eat(types$1.arrow)) {\n        this.checkPatternErrors(refDestructuringErrors, false);\n        this.checkYieldAwaitInDefaultParams();\n        this.yieldPos = oldYieldPos;\n        this.awaitPos = oldAwaitPos;\n        return this.parseParenArrowList(startPos, startLoc, exprList, forInit)\n      }\n\n      if (!exprList.length || lastIsComma) { this.unexpected(this.lastTokStart); }\n      if (spreadStart) { this.unexpected(spreadStart); }\n      this.checkExpressionErrors(refDestructuringErrors, true);\n      this.yieldPos = oldYieldPos || this.yieldPos;\n      this.awaitPos = oldAwaitPos || this.awaitPos;\n\n      if (exprList.length > 1) {\n        val = this.startNodeAt(innerStartPos, innerStartLoc);\n        val.expressions = exprList;\n        this.finishNodeAt(val, \"SequenceExpression\", innerEndPos, innerEndLoc);\n      } else {\n        val = exprList[0];\n      }\n    } else {\n      val = this.parseParenExpression();\n    }\n\n    if (this.options.preserveParens) {\n      var par = this.startNodeAt(startPos, startLoc);\n      par.expression = val;\n      return this.finishNode(par, \"ParenthesizedExpression\")\n    } else {\n      return val\n    }\n  };\n\n  pp$5.parseParenItem = function(item) {\n    return item\n  };\n\n  pp$5.parseParenArrowList = function(startPos, startLoc, exprList, forInit) {\n    return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), exprList, false, forInit)\n  };\n\n  // New's precedence is slightly tricky. It must allow its argument to\n  // be a `[]` or dot subscript expression, but not a call — at least,\n  // not without wrapping it in parentheses. Thus, it uses the noCalls\n  // argument to parseSubscripts to prevent it from consuming the\n  // argument list.\n\n  var empty = [];\n\n  pp$5.parseNew = function() {\n    if (this.containsEsc) { this.raiseRecoverable(this.start, \"Escape sequence in keyword new\"); }\n    var node = this.startNode();\n    var meta = this.parseIdent(true);\n    if (this.options.ecmaVersion >= 6 && this.eat(types$1.dot)) {\n      node.meta = meta;\n      var containsEsc = this.containsEsc;\n      node.property = this.parseIdent(true);\n      if (node.property.name !== \"target\")\n        { this.raiseRecoverable(node.property.start, \"The only valid meta property for new is 'new.target'\"); }\n      if (containsEsc)\n        { this.raiseRecoverable(node.start, \"'new.target' must not contain escaped characters\"); }\n      if (!this.allowNewDotTarget)\n        { this.raiseRecoverable(node.start, \"'new.target' can only be used in functions and class static block\"); }\n      return this.finishNode(node, \"MetaProperty\")\n    }\n    var startPos = this.start, startLoc = this.startLoc, isImport = this.type === types$1._import;\n    node.callee = this.parseSubscripts(this.parseExprAtom(), startPos, startLoc, true, false);\n    if (isImport && node.callee.type === \"ImportExpression\") {\n      this.raise(startPos, \"Cannot use new with import()\");\n    }\n    if (this.eat(types$1.parenL)) { node.arguments = this.parseExprList(types$1.parenR, this.options.ecmaVersion >= 8, false); }\n    else { node.arguments = empty; }\n    return this.finishNode(node, \"NewExpression\")\n  };\n\n  // Parse template expression.\n\n  pp$5.parseTemplateElement = function(ref) {\n    var isTagged = ref.isTagged;\n\n    var elem = this.startNode();\n    if (this.type === types$1.invalidTemplate) {\n      if (!isTagged) {\n        this.raiseRecoverable(this.start, \"Bad escape sequence in untagged template literal\");\n      }\n      elem.value = {\n        raw: this.value,\n        cooked: null\n      };\n    } else {\n      elem.value = {\n        raw: this.input.slice(this.start, this.end).replace(/\\r\\n?/g, \"\\n\"),\n        cooked: this.value\n      };\n    }\n    this.next();\n    elem.tail = this.type === types$1.backQuote;\n    return this.finishNode(elem, \"TemplateElement\")\n  };\n\n  pp$5.parseTemplate = function(ref) {\n    if ( ref === void 0 ) ref = {};\n    var isTagged = ref.isTagged; if ( isTagged === void 0 ) isTagged = false;\n\n    var node = this.startNode();\n    this.next();\n    node.expressions = [];\n    var curElt = this.parseTemplateElement({isTagged: isTagged});\n    node.quasis = [curElt];\n    while (!curElt.tail) {\n      if (this.type === types$1.eof) { this.raise(this.pos, \"Unterminated template literal\"); }\n      this.expect(types$1.dollarBraceL);\n      node.expressions.push(this.parseExpression());\n      this.expect(types$1.braceR);\n      node.quasis.push(curElt = this.parseTemplateElement({isTagged: isTagged}));\n    }\n    this.next();\n    return this.finishNode(node, \"TemplateLiteral\")\n  };\n\n  pp$5.isAsyncProp = function(prop) {\n    return !prop.computed && prop.key.type === \"Identifier\" && prop.key.name === \"async\" &&\n      (this.type === types$1.name || this.type === types$1.num || this.type === types$1.string || this.type === types$1.bracketL || this.type.keyword || (this.options.ecmaVersion >= 9 && this.type === types$1.star)) &&\n      !lineBreak.test(this.input.slice(this.lastTokEnd, this.start))\n  };\n\n  // Parse an object literal or binding pattern.\n\n  pp$5.parseObj = function(isPattern, refDestructuringErrors) {\n    var node = this.startNode(), first = true, propHash = {};\n    node.properties = [];\n    this.next();\n    while (!this.eat(types$1.braceR)) {\n      if (!first) {\n        this.expect(types$1.comma);\n        if (this.options.ecmaVersion >= 5 && this.afterTrailingComma(types$1.braceR)) { break }\n      } else { first = false; }\n\n      var prop = this.parseProperty(isPattern, refDestructuringErrors);\n      if (!isPattern) { this.checkPropClash(prop, propHash, refDestructuringErrors); }\n      node.properties.push(prop);\n    }\n    return this.finishNode(node, isPattern ? \"ObjectPattern\" : \"ObjectExpression\")\n  };\n\n  pp$5.parseProperty = function(isPattern, refDestructuringErrors) {\n    var prop = this.startNode(), isGenerator, isAsync, startPos, startLoc;\n    if (this.options.ecmaVersion >= 9 && this.eat(types$1.ellipsis)) {\n      if (isPattern) {\n        prop.argument = this.parseIdent(false);\n        if (this.type === types$1.comma) {\n          this.raise(this.start, \"Comma is not permitted after the rest element\");\n        }\n        return this.finishNode(prop, \"RestElement\")\n      }\n      // Parse argument.\n      prop.argument = this.parseMaybeAssign(false, refDestructuringErrors);\n      // To disallow trailing comma via `this.toAssignable()`.\n      if (this.type === types$1.comma && refDestructuringErrors && refDestructuringErrors.trailingComma < 0) {\n        refDestructuringErrors.trailingComma = this.start;\n      }\n      // Finish\n      return this.finishNode(prop, \"SpreadElement\")\n    }\n    if (this.options.ecmaVersion >= 6) {\n      prop.method = false;\n      prop.shorthand = false;\n      if (isPattern || refDestructuringErrors) {\n        startPos = this.start;\n        startLoc = this.startLoc;\n      }\n      if (!isPattern)\n        { isGenerator = this.eat(types$1.star); }\n    }\n    var containsEsc = this.containsEsc;\n    this.parsePropertyName(prop);\n    if (!isPattern && !containsEsc && this.options.ecmaVersion >= 8 && !isGenerator && this.isAsyncProp(prop)) {\n      isAsync = true;\n      isGenerator = this.options.ecmaVersion >= 9 && this.eat(types$1.star);\n      this.parsePropertyName(prop);\n    } else {\n      isAsync = false;\n    }\n    this.parsePropertyValue(prop, isPattern, isGenerator, isAsync, startPos, startLoc, refDestructuringErrors, containsEsc);\n    return this.finishNode(prop, \"Property\")\n  };\n\n  pp$5.parsePropertyValue = function(prop, isPattern, isGenerator, isAsync, startPos, startLoc, refDestructuringErrors, containsEsc) {\n    if ((isGenerator || isAsync) && this.type === types$1.colon)\n      { this.unexpected(); }\n\n    if (this.eat(types$1.colon)) {\n      prop.value = isPattern ? this.parseMaybeDefault(this.start, this.startLoc) : this.parseMaybeAssign(false, refDestructuringErrors);\n      prop.kind = \"init\";\n    } else if (this.options.ecmaVersion >= 6 && this.type === types$1.parenL) {\n      if (isPattern) { this.unexpected(); }\n      prop.kind = \"init\";\n      prop.method = true;\n      prop.value = this.parseMethod(isGenerator, isAsync);\n    } else if (!isPattern && !containsEsc &&\n               this.options.ecmaVersion >= 5 && !prop.computed && prop.key.type === \"Identifier\" &&\n               (prop.key.name === \"get\" || prop.key.name === \"set\") &&\n               (this.type !== types$1.comma && this.type !== types$1.braceR && this.type !== types$1.eq)) {\n      if (isGenerator || isAsync) { this.unexpected(); }\n      prop.kind = prop.key.name;\n      this.parsePropertyName(prop);\n      prop.value = this.parseMethod(false);\n      var paramCount = prop.kind === \"get\" ? 0 : 1;\n      if (prop.value.params.length !== paramCount) {\n        var start = prop.value.start;\n        if (prop.kind === \"get\")\n          { this.raiseRecoverable(start, \"getter should have no params\"); }\n        else\n          { this.raiseRecoverable(start, \"setter should have exactly one param\"); }\n      } else {\n        if (prop.kind === \"set\" && prop.value.params[0].type === \"RestElement\")\n          { this.raiseRecoverable(prop.value.params[0].start, \"Setter cannot use rest params\"); }\n      }\n    } else if (this.options.ecmaVersion >= 6 && !prop.computed && prop.key.type === \"Identifier\") {\n      if (isGenerator || isAsync) { this.unexpected(); }\n      this.checkUnreserved(prop.key);\n      if (prop.key.name === \"await\" && !this.awaitIdentPos)\n        { this.awaitIdentPos = startPos; }\n      prop.kind = \"init\";\n      if (isPattern) {\n        prop.value = this.parseMaybeDefault(startPos, startLoc, this.copyNode(prop.key));\n      } else if (this.type === types$1.eq && refDestructuringErrors) {\n        if (refDestructuringErrors.shorthandAssign < 0)\n          { refDestructuringErrors.shorthandAssign = this.start; }\n        prop.value = this.parseMaybeDefault(startPos, startLoc, this.copyNode(prop.key));\n      } else {\n        prop.value = this.copyNode(prop.key);\n      }\n      prop.shorthand = true;\n    } else { this.unexpected(); }\n  };\n\n  pp$5.parsePropertyName = function(prop) {\n    if (this.options.ecmaVersion >= 6) {\n      if (this.eat(types$1.bracketL)) {\n        prop.computed = true;\n        prop.key = this.parseMaybeAssign();\n        this.expect(types$1.bracketR);\n        return prop.key\n      } else {\n        prop.computed = false;\n      }\n    }\n    return prop.key = this.type === types$1.num || this.type === types$1.string ? this.parseExprAtom() : this.parseIdent(this.options.allowReserved !== \"never\")\n  };\n\n  // Initialize empty function node.\n\n  pp$5.initFunction = function(node) {\n    node.id = null;\n    if (this.options.ecmaVersion >= 6) { node.generator = node.expression = false; }\n    if (this.options.ecmaVersion >= 8) { node.async = false; }\n  };\n\n  // Parse object or class method.\n\n  pp$5.parseMethod = function(isGenerator, isAsync, allowDirectSuper) {\n    var node = this.startNode(), oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n\n    this.initFunction(node);\n    if (this.options.ecmaVersion >= 6)\n      { node.generator = isGenerator; }\n    if (this.options.ecmaVersion >= 8)\n      { node.async = !!isAsync; }\n\n    this.yieldPos = 0;\n    this.awaitPos = 0;\n    this.awaitIdentPos = 0;\n    this.enterScope(functionFlags(isAsync, node.generator) | SCOPE_SUPER | (allowDirectSuper ? SCOPE_DIRECT_SUPER : 0));\n\n    this.expect(types$1.parenL);\n    node.params = this.parseBindingList(types$1.parenR, false, this.options.ecmaVersion >= 8);\n    this.checkYieldAwaitInDefaultParams();\n    this.parseFunctionBody(node, false, true, false);\n\n    this.yieldPos = oldYieldPos;\n    this.awaitPos = oldAwaitPos;\n    this.awaitIdentPos = oldAwaitIdentPos;\n    return this.finishNode(node, \"FunctionExpression\")\n  };\n\n  // Parse arrow function expression with given parameters.\n\n  pp$5.parseArrowExpression = function(node, params, isAsync, forInit) {\n    var oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n\n    this.enterScope(functionFlags(isAsync, false) | SCOPE_ARROW);\n    this.initFunction(node);\n    if (this.options.ecmaVersion >= 8) { node.async = !!isAsync; }\n\n    this.yieldPos = 0;\n    this.awaitPos = 0;\n    this.awaitIdentPos = 0;\n\n    node.params = this.toAssignableList(params, true);\n    this.parseFunctionBody(node, true, false, forInit);\n\n    this.yieldPos = oldYieldPos;\n    this.awaitPos = oldAwaitPos;\n    this.awaitIdentPos = oldAwaitIdentPos;\n    return this.finishNode(node, \"ArrowFunctionExpression\")\n  };\n\n  // Parse function body and check parameters.\n\n  pp$5.parseFunctionBody = function(node, isArrowFunction, isMethod, forInit) {\n    var isExpression = isArrowFunction && this.type !== types$1.braceL;\n    var oldStrict = this.strict, useStrict = false;\n\n    if (isExpression) {\n      node.body = this.parseMaybeAssign(forInit);\n      node.expression = true;\n      this.checkParams(node, false);\n    } else {\n      var nonSimple = this.options.ecmaVersion >= 7 && !this.isSimpleParamList(node.params);\n      if (!oldStrict || nonSimple) {\n        useStrict = this.strictDirective(this.end);\n        // If this is a strict mode function, verify that argument names\n        // are not repeated, and it does not try to bind the words `eval`\n        // or `arguments`.\n        if (useStrict && nonSimple)\n          { this.raiseRecoverable(node.start, \"Illegal 'use strict' directive in function with non-simple parameter list\"); }\n      }\n      // Start a new scope with regard to labels and the `inFunction`\n      // flag (restore them to their old value afterwards).\n      var oldLabels = this.labels;\n      this.labels = [];\n      if (useStrict) { this.strict = true; }\n\n      // Add the params to varDeclaredNames to ensure that an error is thrown\n      // if a let/const declaration in the function clashes with one of the params.\n      this.checkParams(node, !oldStrict && !useStrict && !isArrowFunction && !isMethod && this.isSimpleParamList(node.params));\n      // Ensure the function name isn't a forbidden identifier in strict mode, e.g. 'eval'\n      if (this.strict && node.id) { this.checkLValSimple(node.id, BIND_OUTSIDE); }\n      node.body = this.parseBlock(false, undefined, useStrict && !oldStrict);\n      node.expression = false;\n      this.adaptDirectivePrologue(node.body.body);\n      this.labels = oldLabels;\n    }\n    this.exitScope();\n  };\n\n  pp$5.isSimpleParamList = function(params) {\n    for (var i = 0, list = params; i < list.length; i += 1)\n      {\n      var param = list[i];\n\n      if (param.type !== \"Identifier\") { return false\n    } }\n    return true\n  };\n\n  // Checks function params for various disallowed patterns such as using \"eval\"\n  // or \"arguments\" and duplicate parameters.\n\n  pp$5.checkParams = function(node, allowDuplicates) {\n    var nameHash = Object.create(null);\n    for (var i = 0, list = node.params; i < list.length; i += 1)\n      {\n      var param = list[i];\n\n      this.checkLValInnerPattern(param, BIND_VAR, allowDuplicates ? null : nameHash);\n    }\n  };\n\n  // Parses a comma-separated list of expressions, and returns them as\n  // an array. `close` is the token type that ends the list, and\n  // `allowEmpty` can be turned on to allow subsequent commas with\n  // nothing in between them to be parsed as `null` (which is needed\n  // for array literals).\n\n  pp$5.parseExprList = function(close, allowTrailingComma, allowEmpty, refDestructuringErrors) {\n    var elts = [], first = true;\n    while (!this.eat(close)) {\n      if (!first) {\n        this.expect(types$1.comma);\n        if (allowTrailingComma && this.afterTrailingComma(close)) { break }\n      } else { first = false; }\n\n      var elt = (void 0);\n      if (allowEmpty && this.type === types$1.comma)\n        { elt = null; }\n      else if (this.type === types$1.ellipsis) {\n        elt = this.parseSpread(refDestructuringErrors);\n        if (refDestructuringErrors && this.type === types$1.comma && refDestructuringErrors.trailingComma < 0)\n          { refDestructuringErrors.trailingComma = this.start; }\n      } else {\n        elt = this.parseMaybeAssign(false, refDestructuringErrors);\n      }\n      elts.push(elt);\n    }\n    return elts\n  };\n\n  pp$5.checkUnreserved = function(ref) {\n    var start = ref.start;\n    var end = ref.end;\n    var name = ref.name;\n\n    if (this.inGenerator && name === \"yield\")\n      { this.raiseRecoverable(start, \"Cannot use 'yield' as identifier inside a generator\"); }\n    if (this.inAsync && name === \"await\")\n      { this.raiseRecoverable(start, \"Cannot use 'await' as identifier inside an async function\"); }\n    if (this.currentThisScope().inClassFieldInit && name === \"arguments\")\n      { this.raiseRecoverable(start, \"Cannot use 'arguments' in class field initializer\"); }\n    if (this.inClassStaticBlock && (name === \"arguments\" || name === \"await\"))\n      { this.raise(start, (\"Cannot use \" + name + \" in class static initialization block\")); }\n    if (this.keywords.test(name))\n      { this.raise(start, (\"Unexpected keyword '\" + name + \"'\")); }\n    if (this.options.ecmaVersion < 6 &&\n      this.input.slice(start, end).indexOf(\"\\\\\") !== -1) { return }\n    var re = this.strict ? this.reservedWordsStrict : this.reservedWords;\n    if (re.test(name)) {\n      if (!this.inAsync && name === \"await\")\n        { this.raiseRecoverable(start, \"Cannot use keyword 'await' outside an async function\"); }\n      this.raiseRecoverable(start, (\"The keyword '\" + name + \"' is reserved\"));\n    }\n  };\n\n  // Parse the next token as an identifier. If `liberal` is true (used\n  // when parsing properties), it will also convert keywords into\n  // identifiers.\n\n  pp$5.parseIdent = function(liberal) {\n    var node = this.startNode();\n    if (this.type === types$1.name) {\n      node.name = this.value;\n    } else if (this.type.keyword) {\n      node.name = this.type.keyword;\n\n      // To fix https://github.com/acornjs/acorn/issues/575\n      // `class` and `function` keywords push new context into this.context.\n      // But there is no chance to pop the context if the keyword is consumed as an identifier such as a property name.\n      // If the previous token is a dot, this does not apply because the context-managing code already ignored the keyword\n      if ((node.name === \"class\" || node.name === \"function\") &&\n          (this.lastTokEnd !== this.lastTokStart + 1 || this.input.charCodeAt(this.lastTokStart) !== 46)) {\n        this.context.pop();\n      }\n    } else {\n      this.unexpected();\n    }\n    this.next(!!liberal);\n    this.finishNode(node, \"Identifier\");\n    if (!liberal) {\n      this.checkUnreserved(node);\n      if (node.name === \"await\" && !this.awaitIdentPos)\n        { this.awaitIdentPos = node.start; }\n    }\n    return node\n  };\n\n  pp$5.parsePrivateIdent = function() {\n    var node = this.startNode();\n    if (this.type === types$1.privateId) {\n      node.name = this.value;\n    } else {\n      this.unexpected();\n    }\n    this.next();\n    this.finishNode(node, \"PrivateIdentifier\");\n\n    // For validating existence\n    if (this.privateNameStack.length === 0) {\n      this.raise(node.start, (\"Private field '#\" + (node.name) + \"' must be declared in an enclosing class\"));\n    } else {\n      this.privateNameStack[this.privateNameStack.length - 1].used.push(node);\n    }\n\n    return node\n  };\n\n  // Parses yield expression inside generator.\n\n  pp$5.parseYield = function(forInit) {\n    if (!this.yieldPos) { this.yieldPos = this.start; }\n\n    var node = this.startNode();\n    this.next();\n    if (this.type === types$1.semi || this.canInsertSemicolon() || (this.type !== types$1.star && !this.type.startsExpr)) {\n      node.delegate = false;\n      node.argument = null;\n    } else {\n      node.delegate = this.eat(types$1.star);\n      node.argument = this.parseMaybeAssign(forInit);\n    }\n    return this.finishNode(node, \"YieldExpression\")\n  };\n\n  pp$5.parseAwait = function(forInit) {\n    if (!this.awaitPos) { this.awaitPos = this.start; }\n\n    var node = this.startNode();\n    this.next();\n    node.argument = this.parseMaybeUnary(null, true, false, forInit);\n    return this.finishNode(node, \"AwaitExpression\")\n  };\n\n  var pp$4 = Parser.prototype;\n\n  // This function is used to raise exceptions on parse errors. It\n  // takes an offset integer (into the current `input`) to indicate\n  // the location of the error, attaches the position to the end\n  // of the error message, and then raises a `SyntaxError` with that\n  // message.\n\n  pp$4.raise = function(pos, message) {\n    var loc = getLineInfo(this.input, pos);\n    message += \" (\" + loc.line + \":\" + loc.column + \")\";\n    var err = new SyntaxError(message);\n    err.pos = pos; err.loc = loc; err.raisedAt = this.pos;\n    throw err\n  };\n\n  pp$4.raiseRecoverable = pp$4.raise;\n\n  pp$4.curPosition = function() {\n    if (this.options.locations) {\n      return new Position(this.curLine, this.pos - this.lineStart)\n    }\n  };\n\n  var pp$3 = Parser.prototype;\n\n  var Scope = function Scope(flags) {\n    this.flags = flags;\n    // A list of var-declared names in the current lexical scope\n    this.var = [];\n    // A list of lexically-declared names in the current lexical scope\n    this.lexical = [];\n    // A list of lexically-declared FunctionDeclaration names in the current lexical scope\n    this.functions = [];\n    // A switch to disallow the identifier reference 'arguments'\n    this.inClassFieldInit = false;\n  };\n\n  // The functions in this module keep track of declared variables in the current scope in order to detect duplicate variable names.\n\n  pp$3.enterScope = function(flags) {\n    this.scopeStack.push(new Scope(flags));\n  };\n\n  pp$3.exitScope = function() {\n    this.scopeStack.pop();\n  };\n\n  // The spec says:\n  // > At the top level of a function, or script, function declarations are\n  // > treated like var declarations rather than like lexical declarations.\n  pp$3.treatFunctionsAsVarInScope = function(scope) {\n    return (scope.flags & SCOPE_FUNCTION) || !this.inModule && (scope.flags & SCOPE_TOP)\n  };\n\n  pp$3.declareName = function(name, bindingType, pos) {\n    var redeclared = false;\n    if (bindingType === BIND_LEXICAL) {\n      var scope = this.currentScope();\n      redeclared = scope.lexical.indexOf(name) > -1 || scope.functions.indexOf(name) > -1 || scope.var.indexOf(name) > -1;\n      scope.lexical.push(name);\n      if (this.inModule && (scope.flags & SCOPE_TOP))\n        { delete this.undefinedExports[name]; }\n    } else if (bindingType === BIND_SIMPLE_CATCH) {\n      var scope$1 = this.currentScope();\n      scope$1.lexical.push(name);\n    } else if (bindingType === BIND_FUNCTION) {\n      var scope$2 = this.currentScope();\n      if (this.treatFunctionsAsVar)\n        { redeclared = scope$2.lexical.indexOf(name) > -1; }\n      else\n        { redeclared = scope$2.lexical.indexOf(name) > -1 || scope$2.var.indexOf(name) > -1; }\n      scope$2.functions.push(name);\n    } else {\n      for (var i = this.scopeStack.length - 1; i >= 0; --i) {\n        var scope$3 = this.scopeStack[i];\n        if (scope$3.lexical.indexOf(name) > -1 && !((scope$3.flags & SCOPE_SIMPLE_CATCH) && scope$3.lexical[0] === name) ||\n            !this.treatFunctionsAsVarInScope(scope$3) && scope$3.functions.indexOf(name) > -1) {\n          redeclared = true;\n          break\n        }\n        scope$3.var.push(name);\n        if (this.inModule && (scope$3.flags & SCOPE_TOP))\n          { delete this.undefinedExports[name]; }\n        if (scope$3.flags & SCOPE_VAR) { break }\n      }\n    }\n    if (redeclared) { this.raiseRecoverable(pos, (\"Identifier '\" + name + \"' has already been declared\")); }\n  };\n\n  pp$3.checkLocalExport = function(id) {\n    // scope.functions must be empty as Module code is always strict.\n    if (this.scopeStack[0].lexical.indexOf(id.name) === -1 &&\n        this.scopeStack[0].var.indexOf(id.name) === -1) {\n      this.undefinedExports[id.name] = id;\n    }\n  };\n\n  pp$3.currentScope = function() {\n    return this.scopeStack[this.scopeStack.length - 1]\n  };\n\n  pp$3.currentVarScope = function() {\n    for (var i = this.scopeStack.length - 1;; i--) {\n      var scope = this.scopeStack[i];\n      if (scope.flags & SCOPE_VAR) { return scope }\n    }\n  };\n\n  // Could be useful for `this`, `new.target`, `super()`, `super.property`, and `super[property]`.\n  pp$3.currentThisScope = function() {\n    for (var i = this.scopeStack.length - 1;; i--) {\n      var scope = this.scopeStack[i];\n      if (scope.flags & SCOPE_VAR && !(scope.flags & SCOPE_ARROW)) { return scope }\n    }\n  };\n\n  var Node = function Node(parser, pos, loc) {\n    this.type = \"\";\n    this.start = pos;\n    this.end = 0;\n    if (parser.options.locations)\n      { this.loc = new SourceLocation(parser, loc); }\n    if (parser.options.directSourceFile)\n      { this.sourceFile = parser.options.directSourceFile; }\n    if (parser.options.ranges)\n      { this.range = [pos, 0]; }\n  };\n\n  // Start an AST node, attaching a start offset.\n\n  var pp$2 = Parser.prototype;\n\n  pp$2.startNode = function() {\n    return new Node(this, this.start, this.startLoc)\n  };\n\n  pp$2.startNodeAt = function(pos, loc) {\n    return new Node(this, pos, loc)\n  };\n\n  // Finish an AST node, adding `type` and `end` properties.\n\n  function finishNodeAt(node, type, pos, loc) {\n    node.type = type;\n    node.end = pos;\n    if (this.options.locations)\n      { node.loc.end = loc; }\n    if (this.options.ranges)\n      { node.range[1] = pos; }\n    return node\n  }\n\n  pp$2.finishNode = function(node, type) {\n    return finishNodeAt.call(this, node, type, this.lastTokEnd, this.lastTokEndLoc)\n  };\n\n  // Finish node at given position\n\n  pp$2.finishNodeAt = function(node, type, pos, loc) {\n    return finishNodeAt.call(this, node, type, pos, loc)\n  };\n\n  pp$2.copyNode = function(node) {\n    var newNode = new Node(this, node.start, this.startLoc);\n    for (var prop in node) { newNode[prop] = node[prop]; }\n    return newNode\n  };\n\n  // This file contains Unicode properties extracted from the ECMAScript specification.\n  // The lists are extracted like so:\n  // $$('#table-binary-unicode-properties > figure > table > tbody > tr > td:nth-child(1) code').map(el => el.innerText)\n\n  // #table-binary-unicode-properties\n  var ecma9BinaryProperties = \"ASCII ASCII_Hex_Digit AHex Alphabetic Alpha Any Assigned Bidi_Control Bidi_C Bidi_Mirrored Bidi_M Case_Ignorable CI Cased Changes_When_Casefolded CWCF Changes_When_Casemapped CWCM Changes_When_Lowercased CWL Changes_When_NFKC_Casefolded CWKCF Changes_When_Titlecased CWT Changes_When_Uppercased CWU Dash Default_Ignorable_Code_Point DI Deprecated Dep Diacritic Dia Emoji Emoji_Component Emoji_Modifier Emoji_Modifier_Base Emoji_Presentation Extender Ext Grapheme_Base Gr_Base Grapheme_Extend Gr_Ext Hex_Digit Hex IDS_Binary_Operator IDSB IDS_Trinary_Operator IDST ID_Continue IDC ID_Start IDS Ideographic Ideo Join_Control Join_C Logical_Order_Exception LOE Lowercase Lower Math Noncharacter_Code_Point NChar Pattern_Syntax Pat_Syn Pattern_White_Space Pat_WS Quotation_Mark QMark Radical Regional_Indicator RI Sentence_Terminal STerm Soft_Dotted SD Terminal_Punctuation Term Unified_Ideograph UIdeo Uppercase Upper Variation_Selector VS White_Space space XID_Continue XIDC XID_Start XIDS\";\n  var ecma10BinaryProperties = ecma9BinaryProperties + \" Extended_Pictographic\";\n  var ecma11BinaryProperties = ecma10BinaryProperties;\n  var ecma12BinaryProperties = ecma11BinaryProperties + \" EBase EComp EMod EPres ExtPict\";\n  var ecma13BinaryProperties = ecma12BinaryProperties;\n  var ecma14BinaryProperties = ecma13BinaryProperties;\n\n  var unicodeBinaryProperties = {\n    9: ecma9BinaryProperties,\n    10: ecma10BinaryProperties,\n    11: ecma11BinaryProperties,\n    12: ecma12BinaryProperties,\n    13: ecma13BinaryProperties,\n    14: ecma14BinaryProperties\n  };\n\n  // #table-unicode-general-category-values\n  var unicodeGeneralCategoryValues = \"Cased_Letter LC Close_Punctuation Pe Connector_Punctuation Pc Control Cc cntrl Currency_Symbol Sc Dash_Punctuation Pd Decimal_Number Nd digit Enclosing_Mark Me Final_Punctuation Pf Format Cf Initial_Punctuation Pi Letter L Letter_Number Nl Line_Separator Zl Lowercase_Letter Ll Mark M Combining_Mark Math_Symbol Sm Modifier_Letter Lm Modifier_Symbol Sk Nonspacing_Mark Mn Number N Open_Punctuation Ps Other C Other_Letter Lo Other_Number No Other_Punctuation Po Other_Symbol So Paragraph_Separator Zp Private_Use Co Punctuation P punct Separator Z Space_Separator Zs Spacing_Mark Mc Surrogate Cs Symbol S Titlecase_Letter Lt Unassigned Cn Uppercase_Letter Lu\";\n\n  // #table-unicode-script-values\n  var ecma9ScriptValues = \"Adlam Adlm Ahom Anatolian_Hieroglyphs Hluw Arabic Arab Armenian Armn Avestan Avst Balinese Bali Bamum Bamu Bassa_Vah Bass Batak Batk Bengali Beng Bhaiksuki Bhks Bopomofo Bopo Brahmi Brah Braille Brai Buginese Bugi Buhid Buhd Canadian_Aboriginal Cans Carian Cari Caucasian_Albanian Aghb Chakma Cakm Cham Cham Cherokee Cher Common Zyyy Coptic Copt Qaac Cuneiform Xsux Cypriot Cprt Cyrillic Cyrl Deseret Dsrt Devanagari Deva Duployan Dupl Egyptian_Hieroglyphs Egyp Elbasan Elba Ethiopic Ethi Georgian Geor Glagolitic Glag Gothic Goth Grantha Gran Greek Grek Gujarati Gujr Gurmukhi Guru Han Hani Hangul Hang Hanunoo Hano Hatran Hatr Hebrew Hebr Hiragana Hira Imperial_Aramaic Armi Inherited Zinh Qaai Inscriptional_Pahlavi Phli Inscriptional_Parthian Prti Javanese Java Kaithi Kthi Kannada Knda Katakana Kana Kayah_Li Kali Kharoshthi Khar Khmer Khmr Khojki Khoj Khudawadi Sind Lao Laoo Latin Latn Lepcha Lepc Limbu Limb Linear_A Lina Linear_B Linb Lisu Lisu Lycian Lyci Lydian Lydi Mahajani Mahj Malayalam Mlym Mandaic Mand Manichaean Mani Marchen Marc Masaram_Gondi Gonm Meetei_Mayek Mtei Mende_Kikakui Mend Meroitic_Cursive Merc Meroitic_Hieroglyphs Mero Miao Plrd Modi Mongolian Mong Mro Mroo Multani Mult Myanmar Mymr Nabataean Nbat New_Tai_Lue Talu Newa Newa Nko Nkoo Nushu Nshu Ogham Ogam Ol_Chiki Olck Old_Hungarian Hung Old_Italic Ital Old_North_Arabian Narb Old_Permic Perm Old_Persian Xpeo Old_South_Arabian Sarb Old_Turkic Orkh Oriya Orya Osage Osge Osmanya Osma Pahawh_Hmong Hmng Palmyrene Palm Pau_Cin_Hau Pauc Phags_Pa Phag Phoenician Phnx Psalter_Pahlavi Phlp Rejang Rjng Runic Runr Samaritan Samr Saurashtra Saur Sharada Shrd Shavian Shaw Siddham Sidd SignWriting Sgnw Sinhala Sinh Sora_Sompeng Sora Soyombo Soyo Sundanese Sund Syloti_Nagri Sylo Syriac Syrc Tagalog Tglg Tagbanwa Tagb Tai_Le Tale Tai_Tham Lana Tai_Viet Tavt Takri Takr Tamil Taml Tangut Tang Telugu Telu Thaana Thaa Thai Thai Tibetan Tibt Tifinagh Tfng Tirhuta Tirh Ugaritic Ugar Vai Vaii Warang_Citi Wara Yi Yiii Zanabazar_Square Zanb\";\n  var ecma10ScriptValues = ecma9ScriptValues + \" Dogra Dogr Gunjala_Gondi Gong Hanifi_Rohingya Rohg Makasar Maka Medefaidrin Medf Old_Sogdian Sogo Sogdian Sogd\";\n  var ecma11ScriptValues = ecma10ScriptValues + \" Elymaic Elym Nandinagari Nand Nyiakeng_Puachue_Hmong Hmnp Wancho Wcho\";\n  var ecma12ScriptValues = ecma11ScriptValues + \" Chorasmian Chrs Diak Dives_Akuru Khitan_Small_Script Kits Yezi Yezidi\";\n  var ecma13ScriptValues = ecma12ScriptValues + \" Cypro_Minoan Cpmn Old_Uyghur Ougr Tangsa Tnsa Toto Vithkuqi Vith\";\n  var ecma14ScriptValues = ecma13ScriptValues + \" Kawi Nag_Mundari Nagm\";\n\n  var unicodeScriptValues = {\n    9: ecma9ScriptValues,\n    10: ecma10ScriptValues,\n    11: ecma11ScriptValues,\n    12: ecma12ScriptValues,\n    13: ecma13ScriptValues,\n    14: ecma14ScriptValues\n  };\n\n  var data = {};\n  function buildUnicodeData(ecmaVersion) {\n    var d = data[ecmaVersion] = {\n      binary: wordsRegexp(unicodeBinaryProperties[ecmaVersion] + \" \" + unicodeGeneralCategoryValues),\n      nonBinary: {\n        General_Category: wordsRegexp(unicodeGeneralCategoryValues),\n        Script: wordsRegexp(unicodeScriptValues[ecmaVersion])\n      }\n    };\n    d.nonBinary.Script_Extensions = d.nonBinary.Script;\n\n    d.nonBinary.gc = d.nonBinary.General_Category;\n    d.nonBinary.sc = d.nonBinary.Script;\n    d.nonBinary.scx = d.nonBinary.Script_Extensions;\n  }\n\n  for (var i = 0, list = [9, 10, 11, 12, 13, 14]; i < list.length; i += 1) {\n    var ecmaVersion = list[i];\n\n    buildUnicodeData(ecmaVersion);\n  }\n\n  var pp$1 = Parser.prototype;\n\n  var RegExpValidationState = function RegExpValidationState(parser) {\n    this.parser = parser;\n    this.validFlags = \"gim\" + (parser.options.ecmaVersion >= 6 ? \"uy\" : \"\") + (parser.options.ecmaVersion >= 9 ? \"s\" : \"\") + (parser.options.ecmaVersion >= 13 ? \"d\" : \"\");\n    this.unicodeProperties = data[parser.options.ecmaVersion >= 14 ? 14 : parser.options.ecmaVersion];\n    this.source = \"\";\n    this.flags = \"\";\n    this.start = 0;\n    this.switchU = false;\n    this.switchN = false;\n    this.pos = 0;\n    this.lastIntValue = 0;\n    this.lastStringValue = \"\";\n    this.lastAssertionIsQuantifiable = false;\n    this.numCapturingParens = 0;\n    this.maxBackReference = 0;\n    this.groupNames = [];\n    this.backReferenceNames = [];\n  };\n\n  RegExpValidationState.prototype.reset = function reset (start, pattern, flags) {\n    var unicode = flags.indexOf(\"u\") !== -1;\n    this.start = start | 0;\n    this.source = pattern + \"\";\n    this.flags = flags;\n    this.switchU = unicode && this.parser.options.ecmaVersion >= 6;\n    this.switchN = unicode && this.parser.options.ecmaVersion >= 9;\n  };\n\n  RegExpValidationState.prototype.raise = function raise (message) {\n    this.parser.raiseRecoverable(this.start, (\"Invalid regular expression: /\" + (this.source) + \"/: \" + message));\n  };\n\n  // If u flag is given, this returns the code point at the index (it combines a surrogate pair).\n  // Otherwise, this returns the code unit of the index (can be a part of a surrogate pair).\n  RegExpValidationState.prototype.at = function at (i, forceU) {\n      if ( forceU === void 0 ) forceU = false;\n\n    var s = this.source;\n    var l = s.length;\n    if (i >= l) {\n      return -1\n    }\n    var c = s.charCodeAt(i);\n    if (!(forceU || this.switchU) || c <= 0xD7FF || c >= 0xE000 || i + 1 >= l) {\n      return c\n    }\n    var next = s.charCodeAt(i + 1);\n    return next >= 0xDC00 && next <= 0xDFFF ? (c << 10) + next - 0x35FDC00 : c\n  };\n\n  RegExpValidationState.prototype.nextIndex = function nextIndex (i, forceU) {\n      if ( forceU === void 0 ) forceU = false;\n\n    var s = this.source;\n    var l = s.length;\n    if (i >= l) {\n      return l\n    }\n    var c = s.charCodeAt(i), next;\n    if (!(forceU || this.switchU) || c <= 0xD7FF || c >= 0xE000 || i + 1 >= l ||\n        (next = s.charCodeAt(i + 1)) < 0xDC00 || next > 0xDFFF) {\n      return i + 1\n    }\n    return i + 2\n  };\n\n  RegExpValidationState.prototype.current = function current (forceU) {\n      if ( forceU === void 0 ) forceU = false;\n\n    return this.at(this.pos, forceU)\n  };\n\n  RegExpValidationState.prototype.lookahead = function lookahead (forceU) {\n      if ( forceU === void 0 ) forceU = false;\n\n    return this.at(this.nextIndex(this.pos, forceU), forceU)\n  };\n\n  RegExpValidationState.prototype.advance = function advance (forceU) {\n      if ( forceU === void 0 ) forceU = false;\n\n    this.pos = this.nextIndex(this.pos, forceU);\n  };\n\n  RegExpValidationState.prototype.eat = function eat (ch, forceU) {\n      if ( forceU === void 0 ) forceU = false;\n\n    if (this.current(forceU) === ch) {\n      this.advance(forceU);\n      return true\n    }\n    return false\n  };\n\n  /**\n   * Validate the flags part of a given RegExpLiteral.\n   *\n   * @param {RegExpValidationState} state The state to validate RegExp.\n   * @returns {void}\n   */\n  pp$1.validateRegExpFlags = function(state) {\n    var validFlags = state.validFlags;\n    var flags = state.flags;\n\n    for (var i = 0; i < flags.length; i++) {\n      var flag = flags.charAt(i);\n      if (validFlags.indexOf(flag) === -1) {\n        this.raise(state.start, \"Invalid regular expression flag\");\n      }\n      if (flags.indexOf(flag, i + 1) > -1) {\n        this.raise(state.start, \"Duplicate regular expression flag\");\n      }\n    }\n  };\n\n  /**\n   * Validate the pattern part of a given RegExpLiteral.\n   *\n   * @param {RegExpValidationState} state The state to validate RegExp.\n   * @returns {void}\n   */\n  pp$1.validateRegExpPattern = function(state) {\n    this.regexp_pattern(state);\n\n    // The goal symbol for the parse is |Pattern[~U, ~N]|. If the result of\n    // parsing contains a |GroupName|, reparse with the goal symbol\n    // |Pattern[~U, +N]| and use this result instead. Throw a *SyntaxError*\n    // exception if _P_ did not conform to the grammar, if any elements of _P_\n    // were not matched by the parse, or if any Early Error conditions exist.\n    if (!state.switchN && this.options.ecmaVersion >= 9 && state.groupNames.length > 0) {\n      state.switchN = true;\n      this.regexp_pattern(state);\n    }\n  };\n\n  // https://www.ecma-international.org/ecma-262/8.0/#prod-Pattern\n  pp$1.regexp_pattern = function(state) {\n    state.pos = 0;\n    state.lastIntValue = 0;\n    state.lastStringValue = \"\";\n    state.lastAssertionIsQuantifiable = false;\n    state.numCapturingParens = 0;\n    state.maxBackReference = 0;\n    state.groupNames.length = 0;\n    state.backReferenceNames.length = 0;\n\n    this.regexp_disjunction(state);\n\n    if (state.pos !== state.source.length) {\n      // Make the same messages as V8.\n      if (state.eat(0x29 /* ) */)) {\n        state.raise(\"Unmatched ')'\");\n      }\n      if (state.eat(0x5D /* ] */) || state.eat(0x7D /* } */)) {\n        state.raise(\"Lone quantifier brackets\");\n      }\n    }\n    if (state.maxBackReference > state.numCapturingParens) {\n      state.raise(\"Invalid escape\");\n    }\n    for (var i = 0, list = state.backReferenceNames; i < list.length; i += 1) {\n      var name = list[i];\n\n      if (state.groupNames.indexOf(name) === -1) {\n        state.raise(\"Invalid named capture referenced\");\n      }\n    }\n  };\n\n  // https://www.ecma-international.org/ecma-262/8.0/#prod-Disjunction\n  pp$1.regexp_disjunction = function(state) {\n    this.regexp_alternative(state);\n    while (state.eat(0x7C /* | */)) {\n      this.regexp_alternative(state);\n    }\n\n    // Make the same message as V8.\n    if (this.regexp_eatQuantifier(state, true)) {\n      state.raise(\"Nothing to repeat\");\n    }\n    if (state.eat(0x7B /* { */)) {\n      state.raise(\"Lone quantifier brackets\");\n    }\n  };\n\n  // https://www.ecma-international.org/ecma-262/8.0/#prod-Alternative\n  pp$1.regexp_alternative = function(state) {\n    while (state.pos < state.source.length && this.regexp_eatTerm(state))\n      { }\n  };\n\n  // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-Term\n  pp$1.regexp_eatTerm = function(state) {\n    if (this.regexp_eatAssertion(state)) {\n      // Handle `QuantifiableAssertion Quantifier` alternative.\n      // `state.lastAssertionIsQuantifiable` is true if the last eaten Assertion\n      // is a QuantifiableAssertion.\n      if (state.lastAssertionIsQuantifiable && this.regexp_eatQuantifier(state)) {\n        // Make the same message as V8.\n        if (state.switchU) {\n          state.raise(\"Invalid quantifier\");\n        }\n      }\n      return true\n    }\n\n    if (state.switchU ? this.regexp_eatAtom(state) : this.regexp_eatExtendedAtom(state)) {\n      this.regexp_eatQuantifier(state);\n      return true\n    }\n\n    return false\n  };\n\n  // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-Assertion\n  pp$1.regexp_eatAssertion = function(state) {\n    var start = state.pos;\n    state.lastAssertionIsQuantifiable = false;\n\n    // ^, $\n    if (state.eat(0x5E /* ^ */) || state.eat(0x24 /* $ */)) {\n      return true\n    }\n\n    // \\b \\B\n    if (state.eat(0x5C /* \\ */)) {\n      if (state.eat(0x42 /* B */) || state.eat(0x62 /* b */)) {\n        return true\n      }\n      state.pos = start;\n    }\n\n    // Lookahead / Lookbehind\n    if (state.eat(0x28 /* ( */) && state.eat(0x3F /* ? */)) {\n      var lookbehind = false;\n      if (this.options.ecmaVersion >= 9) {\n        lookbehind = state.eat(0x3C /* < */);\n      }\n      if (state.eat(0x3D /* = */) || state.eat(0x21 /* ! */)) {\n        this.regexp_disjunction(state);\n        if (!state.eat(0x29 /* ) */)) {\n          state.raise(\"Unterminated group\");\n        }\n        state.lastAssertionIsQuantifiable = !lookbehind;\n        return true\n      }\n    }\n\n    state.pos = start;\n    return false\n  };\n\n  // https://www.ecma-international.org/ecma-262/8.0/#prod-Quantifier\n  pp$1.regexp_eatQuantifier = function(state, noError) {\n    if ( noError === void 0 ) noError = false;\n\n    if (this.regexp_eatQuantifierPrefix(state, noError)) {\n      state.eat(0x3F /* ? */);\n      return true\n    }\n    return false\n  };\n\n  // https://www.ecma-international.org/ecma-262/8.0/#prod-QuantifierPrefix\n  pp$1.regexp_eatQuantifierPrefix = function(state, noError) {\n    return (\n      state.eat(0x2A /* * */) ||\n      state.eat(0x2B /* + */) ||\n      state.eat(0x3F /* ? */) ||\n      this.regexp_eatBracedQuantifier(state, noError)\n    )\n  };\n  pp$1.regexp_eatBracedQuantifier = function(state, noError) {\n    var start = state.pos;\n    if (state.eat(0x7B /* { */)) {\n      var min = 0, max = -1;\n      if (this.regexp_eatDecimalDigits(state)) {\n        min = state.lastIntValue;\n        if (state.eat(0x2C /* , */) && this.regexp_eatDecimalDigits(state)) {\n          max = state.lastIntValue;\n        }\n        if (state.eat(0x7D /* } */)) {\n          // SyntaxError in https://www.ecma-international.org/ecma-262/8.0/#sec-term\n          if (max !== -1 && max < min && !noError) {\n            state.raise(\"numbers out of order in {} quantifier\");\n          }\n          return true\n        }\n      }\n      if (state.switchU && !noError) {\n        state.raise(\"Incomplete quantifier\");\n      }\n      state.pos = start;\n    }\n    return false\n  };\n\n  // https://www.ecma-international.org/ecma-262/8.0/#prod-Atom\n  pp$1.regexp_eatAtom = function(state) {\n    return (\n      this.regexp_eatPatternCharacters(state) ||\n      state.eat(0x2E /* . */) ||\n      this.regexp_eatReverseSolidusAtomEscape(state) ||\n      this.regexp_eatCharacterClass(state) ||\n      this.regexp_eatUncapturingGroup(state) ||\n      this.regexp_eatCapturingGroup(state)\n    )\n  };\n  pp$1.regexp_eatReverseSolidusAtomEscape = function(state) {\n    var start = state.pos;\n    if (state.eat(0x5C /* \\ */)) {\n      if (this.regexp_eatAtomEscape(state)) {\n        return true\n      }\n      state.pos = start;\n    }\n    return false\n  };\n  pp$1.regexp_eatUncapturingGroup = function(state) {\n    var start = state.pos;\n    if (state.eat(0x28 /* ( */)) {\n      if (state.eat(0x3F /* ? */) && state.eat(0x3A /* : */)) {\n        this.regexp_disjunction(state);\n        if (state.eat(0x29 /* ) */)) {\n          return true\n        }\n        state.raise(\"Unterminated group\");\n      }\n      state.pos = start;\n    }\n    return false\n  };\n  pp$1.regexp_eatCapturingGroup = function(state) {\n    if (state.eat(0x28 /* ( */)) {\n      if (this.options.ecmaVersion >= 9) {\n        this.regexp_groupSpecifier(state);\n      } else if (state.current() === 0x3F /* ? */) {\n        state.raise(\"Invalid group\");\n      }\n      this.regexp_disjunction(state);\n      if (state.eat(0x29 /* ) */)) {\n        state.numCapturingParens += 1;\n        return true\n      }\n      state.raise(\"Unterminated group\");\n    }\n    return false\n  };\n\n  // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ExtendedAtom\n  pp$1.regexp_eatExtendedAtom = function(state) {\n    return (\n      state.eat(0x2E /* . */) ||\n      this.regexp_eatReverseSolidusAtomEscape(state) ||\n      this.regexp_eatCharacterClass(state) ||\n      this.regexp_eatUncapturingGroup(state) ||\n      this.regexp_eatCapturingGroup(state) ||\n      this.regexp_eatInvalidBracedQuantifier(state) ||\n      this.regexp_eatExtendedPatternCharacter(state)\n    )\n  };\n\n  // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-InvalidBracedQuantifier\n  pp$1.regexp_eatInvalidBracedQuantifier = function(state) {\n    if (this.regexp_eatBracedQuantifier(state, true)) {\n      state.raise(\"Nothing to repeat\");\n    }\n    return false\n  };\n\n  // https://www.ecma-international.org/ecma-262/8.0/#prod-SyntaxCharacter\n  pp$1.regexp_eatSyntaxCharacter = function(state) {\n    var ch = state.current();\n    if (isSyntaxCharacter(ch)) {\n      state.lastIntValue = ch;\n      state.advance();\n      return true\n    }\n    return false\n  };\n  function isSyntaxCharacter(ch) {\n    return (\n      ch === 0x24 /* $ */ ||\n      ch >= 0x28 /* ( */ && ch <= 0x2B /* + */ ||\n      ch === 0x2E /* . */ ||\n      ch === 0x3F /* ? */ ||\n      ch >= 0x5B /* [ */ && ch <= 0x5E /* ^ */ ||\n      ch >= 0x7B /* { */ && ch <= 0x7D /* } */\n    )\n  }\n\n  // https://www.ecma-international.org/ecma-262/8.0/#prod-PatternCharacter\n  // But eat eager.\n  pp$1.regexp_eatPatternCharacters = function(state) {\n    var start = state.pos;\n    var ch = 0;\n    while ((ch = state.current()) !== -1 && !isSyntaxCharacter(ch)) {\n      state.advance();\n    }\n    return state.pos !== start\n  };\n\n  // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ExtendedPatternCharacter\n  pp$1.regexp_eatExtendedPatternCharacter = function(state) {\n    var ch = state.current();\n    if (\n      ch !== -1 &&\n      ch !== 0x24 /* $ */ &&\n      !(ch >= 0x28 /* ( */ && ch <= 0x2B /* + */) &&\n      ch !== 0x2E /* . */ &&\n      ch !== 0x3F /* ? */ &&\n      ch !== 0x5B /* [ */ &&\n      ch !== 0x5E /* ^ */ &&\n      ch !== 0x7C /* | */\n    ) {\n      state.advance();\n      return true\n    }\n    return false\n  };\n\n  // GroupSpecifier ::\n  //   [empty]\n  //   `?` GroupName\n  pp$1.regexp_groupSpecifier = function(state) {\n    if (state.eat(0x3F /* ? */)) {\n      if (this.regexp_eatGroupName(state)) {\n        if (state.groupNames.indexOf(state.lastStringValue) !== -1) {\n          state.raise(\"Duplicate capture group name\");\n        }\n        state.groupNames.push(state.lastStringValue);\n        return\n      }\n      state.raise(\"Invalid group\");\n    }\n  };\n\n  // GroupName ::\n  //   `<` RegExpIdentifierName `>`\n  // Note: this updates `state.lastStringValue` property with the eaten name.\n  pp$1.regexp_eatGroupName = function(state) {\n    state.lastStringValue = \"\";\n    if (state.eat(0x3C /* < */)) {\n      if (this.regexp_eatRegExpIdentifierName(state) && state.eat(0x3E /* > */)) {\n        return true\n      }\n      state.raise(\"Invalid capture group name\");\n    }\n    return false\n  };\n\n  // RegExpIdentifierName ::\n  //   RegExpIdentifierStart\n  //   RegExpIdentifierName RegExpIdentifierPart\n  // Note: this updates `state.lastStringValue` property with the eaten name.\n  pp$1.regexp_eatRegExpIdentifierName = function(state) {\n    state.lastStringValue = \"\";\n    if (this.regexp_eatRegExpIdentifierStart(state)) {\n      state.lastStringValue += codePointToString(state.lastIntValue);\n      while (this.regexp_eatRegExpIdentifierPart(state)) {\n        state.lastStringValue += codePointToString(state.lastIntValue);\n      }\n      return true\n    }\n    return false\n  };\n\n  // RegExpIdentifierStart ::\n  //   UnicodeIDStart\n  //   `$`\n  //   `_`\n  //   `\\` RegExpUnicodeEscapeSequence[+U]\n  pp$1.regexp_eatRegExpIdentifierStart = function(state) {\n    var start = state.pos;\n    var forceU = this.options.ecmaVersion >= 11;\n    var ch = state.current(forceU);\n    state.advance(forceU);\n\n    if (ch === 0x5C /* \\ */ && this.regexp_eatRegExpUnicodeEscapeSequence(state, forceU)) {\n      ch = state.lastIntValue;\n    }\n    if (isRegExpIdentifierStart(ch)) {\n      state.lastIntValue = ch;\n      return true\n    }\n\n    state.pos = start;\n    return false\n  };\n  function isRegExpIdentifierStart(ch) {\n    return isIdentifierStart(ch, true) || ch === 0x24 /* $ */ || ch === 0x5F /* _ */\n  }\n\n  // RegExpIdentifierPart ::\n  //   UnicodeIDContinue\n  //   `$`\n  //   `_`\n  //   `\\` RegExpUnicodeEscapeSequence[+U]\n  //   <ZWNJ>\n  //   <ZWJ>\n  pp$1.regexp_eatRegExpIdentifierPart = function(state) {\n    var start = state.pos;\n    var forceU = this.options.ecmaVersion >= 11;\n    var ch = state.current(forceU);\n    state.advance(forceU);\n\n    if (ch === 0x5C /* \\ */ && this.regexp_eatRegExpUnicodeEscapeSequence(state, forceU)) {\n      ch = state.lastIntValue;\n    }\n    if (isRegExpIdentifierPart(ch)) {\n      state.lastIntValue = ch;\n      return true\n    }\n\n    state.pos = start;\n    return false\n  };\n  function isRegExpIdentifierPart(ch) {\n    return isIdentifierChar(ch, true) || ch === 0x24 /* $ */ || ch === 0x5F /* _ */ || ch === 0x200C /* <ZWNJ> */ || ch === 0x200D /* <ZWJ> */\n  }\n\n  // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-AtomEscape\n  pp$1.regexp_eatAtomEscape = function(state) {\n    if (\n      this.regexp_eatBackReference(state) ||\n      this.regexp_eatCharacterClassEscape(state) ||\n      this.regexp_eatCharacterEscape(state) ||\n      (state.switchN && this.regexp_eatKGroupName(state))\n    ) {\n      return true\n    }\n    if (state.switchU) {\n      // Make the same message as V8.\n      if (state.current() === 0x63 /* c */) {\n        state.raise(\"Invalid unicode escape\");\n      }\n      state.raise(\"Invalid escape\");\n    }\n    return false\n  };\n  pp$1.regexp_eatBackReference = function(state) {\n    var start = state.pos;\n    if (this.regexp_eatDecimalEscape(state)) {\n      var n = state.lastIntValue;\n      if (state.switchU) {\n        // For SyntaxError in https://www.ecma-international.org/ecma-262/8.0/#sec-atomescape\n        if (n > state.maxBackReference) {\n          state.maxBackReference = n;\n        }\n        return true\n      }\n      if (n <= state.numCapturingParens) {\n        return true\n      }\n      state.pos = start;\n    }\n    return false\n  };\n  pp$1.regexp_eatKGroupName = function(state) {\n    if (state.eat(0x6B /* k */)) {\n      if (this.regexp_eatGroupName(state)) {\n        state.backReferenceNames.push(state.lastStringValue);\n        return true\n      }\n      state.raise(\"Invalid named reference\");\n    }\n    return false\n  };\n\n  // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-CharacterEscape\n  pp$1.regexp_eatCharacterEscape = function(state) {\n    return (\n      this.regexp_eatControlEscape(state) ||\n      this.regexp_eatCControlLetter(state) ||\n      this.regexp_eatZero(state) ||\n      this.regexp_eatHexEscapeSequence(state) ||\n      this.regexp_eatRegExpUnicodeEscapeSequence(state, false) ||\n      (!state.switchU && this.regexp_eatLegacyOctalEscapeSequence(state)) ||\n      this.regexp_eatIdentityEscape(state)\n    )\n  };\n  pp$1.regexp_eatCControlLetter = function(state) {\n    var start = state.pos;\n    if (state.eat(0x63 /* c */)) {\n      if (this.regexp_eatControlLetter(state)) {\n        return true\n      }\n      state.pos = start;\n    }\n    return false\n  };\n  pp$1.regexp_eatZero = function(state) {\n    if (state.current() === 0x30 /* 0 */ && !isDecimalDigit(state.lookahead())) {\n      state.lastIntValue = 0;\n      state.advance();\n      return true\n    }\n    return false\n  };\n\n  // https://www.ecma-international.org/ecma-262/8.0/#prod-ControlEscape\n  pp$1.regexp_eatControlEscape = function(state) {\n    var ch = state.current();\n    if (ch === 0x74 /* t */) {\n      state.lastIntValue = 0x09; /* \\t */\n      state.advance();\n      return true\n    }\n    if (ch === 0x6E /* n */) {\n      state.lastIntValue = 0x0A; /* \\n */\n      state.advance();\n      return true\n    }\n    if (ch === 0x76 /* v */) {\n      state.lastIntValue = 0x0B; /* \\v */\n      state.advance();\n      return true\n    }\n    if (ch === 0x66 /* f */) {\n      state.lastIntValue = 0x0C; /* \\f */\n      state.advance();\n      return true\n    }\n    if (ch === 0x72 /* r */) {\n      state.lastIntValue = 0x0D; /* \\r */\n      state.advance();\n      return true\n    }\n    return false\n  };\n\n  // https://www.ecma-international.org/ecma-262/8.0/#prod-ControlLetter\n  pp$1.regexp_eatControlLetter = function(state) {\n    var ch = state.current();\n    if (isControlLetter(ch)) {\n      state.lastIntValue = ch % 0x20;\n      state.advance();\n      return true\n    }\n    return false\n  };\n  function isControlLetter(ch) {\n    return (\n      (ch >= 0x41 /* A */ && ch <= 0x5A /* Z */) ||\n      (ch >= 0x61 /* a */ && ch <= 0x7A /* z */)\n    )\n  }\n\n  // https://www.ecma-international.org/ecma-262/8.0/#prod-RegExpUnicodeEscapeSequence\n  pp$1.regexp_eatRegExpUnicodeEscapeSequence = function(state, forceU) {\n    if ( forceU === void 0 ) forceU = false;\n\n    var start = state.pos;\n    var switchU = forceU || state.switchU;\n\n    if (state.eat(0x75 /* u */)) {\n      if (this.regexp_eatFixedHexDigits(state, 4)) {\n        var lead = state.lastIntValue;\n        if (switchU && lead >= 0xD800 && lead <= 0xDBFF) {\n          var leadSurrogateEnd = state.pos;\n          if (state.eat(0x5C /* \\ */) && state.eat(0x75 /* u */) && this.regexp_eatFixedHexDigits(state, 4)) {\n            var trail = state.lastIntValue;\n            if (trail >= 0xDC00 && trail <= 0xDFFF) {\n              state.lastIntValue = (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000;\n              return true\n            }\n          }\n          state.pos = leadSurrogateEnd;\n          state.lastIntValue = lead;\n        }\n        return true\n      }\n      if (\n        switchU &&\n        state.eat(0x7B /* { */) &&\n        this.regexp_eatHexDigits(state) &&\n        state.eat(0x7D /* } */) &&\n        isValidUnicode(state.lastIntValue)\n      ) {\n        return true\n      }\n      if (switchU) {\n        state.raise(\"Invalid unicode escape\");\n      }\n      state.pos = start;\n    }\n\n    return false\n  };\n  function isValidUnicode(ch) {\n    return ch >= 0 && ch <= 0x10FFFF\n  }\n\n  // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-IdentityEscape\n  pp$1.regexp_eatIdentityEscape = function(state) {\n    if (state.switchU) {\n      if (this.regexp_eatSyntaxCharacter(state)) {\n        return true\n      }\n      if (state.eat(0x2F /* / */)) {\n        state.lastIntValue = 0x2F; /* / */\n        return true\n      }\n      return false\n    }\n\n    var ch = state.current();\n    if (ch !== 0x63 /* c */ && (!state.switchN || ch !== 0x6B /* k */)) {\n      state.lastIntValue = ch;\n      state.advance();\n      return true\n    }\n\n    return false\n  };\n\n  // https://www.ecma-international.org/ecma-262/8.0/#prod-DecimalEscape\n  pp$1.regexp_eatDecimalEscape = function(state) {\n    state.lastIntValue = 0;\n    var ch = state.current();\n    if (ch >= 0x31 /* 1 */ && ch <= 0x39 /* 9 */) {\n      do {\n        state.lastIntValue = 10 * state.lastIntValue + (ch - 0x30 /* 0 */);\n        state.advance();\n      } while ((ch = state.current()) >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */)\n      return true\n    }\n    return false\n  };\n\n  // https://www.ecma-international.org/ecma-262/8.0/#prod-CharacterClassEscape\n  pp$1.regexp_eatCharacterClassEscape = function(state) {\n    var ch = state.current();\n\n    if (isCharacterClassEscape(ch)) {\n      state.lastIntValue = -1;\n      state.advance();\n      return true\n    }\n\n    if (\n      state.switchU &&\n      this.options.ecmaVersion >= 9 &&\n      (ch === 0x50 /* P */ || ch === 0x70 /* p */)\n    ) {\n      state.lastIntValue = -1;\n      state.advance();\n      if (\n        state.eat(0x7B /* { */) &&\n        this.regexp_eatUnicodePropertyValueExpression(state) &&\n        state.eat(0x7D /* } */)\n      ) {\n        return true\n      }\n      state.raise(\"Invalid property name\");\n    }\n\n    return false\n  };\n  function isCharacterClassEscape(ch) {\n    return (\n      ch === 0x64 /* d */ ||\n      ch === 0x44 /* D */ ||\n      ch === 0x73 /* s */ ||\n      ch === 0x53 /* S */ ||\n      ch === 0x77 /* w */ ||\n      ch === 0x57 /* W */\n    )\n  }\n\n  // UnicodePropertyValueExpression ::\n  //   UnicodePropertyName `=` UnicodePropertyValue\n  //   LoneUnicodePropertyNameOrValue\n  pp$1.regexp_eatUnicodePropertyValueExpression = function(state) {\n    var start = state.pos;\n\n    // UnicodePropertyName `=` UnicodePropertyValue\n    if (this.regexp_eatUnicodePropertyName(state) && state.eat(0x3D /* = */)) {\n      var name = state.lastStringValue;\n      if (this.regexp_eatUnicodePropertyValue(state)) {\n        var value = state.lastStringValue;\n        this.regexp_validateUnicodePropertyNameAndValue(state, name, value);\n        return true\n      }\n    }\n    state.pos = start;\n\n    // LoneUnicodePropertyNameOrValue\n    if (this.regexp_eatLoneUnicodePropertyNameOrValue(state)) {\n      var nameOrValue = state.lastStringValue;\n      this.regexp_validateUnicodePropertyNameOrValue(state, nameOrValue);\n      return true\n    }\n    return false\n  };\n  pp$1.regexp_validateUnicodePropertyNameAndValue = function(state, name, value) {\n    if (!hasOwn(state.unicodeProperties.nonBinary, name))\n      { state.raise(\"Invalid property name\"); }\n    if (!state.unicodeProperties.nonBinary[name].test(value))\n      { state.raise(\"Invalid property value\"); }\n  };\n  pp$1.regexp_validateUnicodePropertyNameOrValue = function(state, nameOrValue) {\n    if (!state.unicodeProperties.binary.test(nameOrValue))\n      { state.raise(\"Invalid property name\"); }\n  };\n\n  // UnicodePropertyName ::\n  //   UnicodePropertyNameCharacters\n  pp$1.regexp_eatUnicodePropertyName = function(state) {\n    var ch = 0;\n    state.lastStringValue = \"\";\n    while (isUnicodePropertyNameCharacter(ch = state.current())) {\n      state.lastStringValue += codePointToString(ch);\n      state.advance();\n    }\n    return state.lastStringValue !== \"\"\n  };\n  function isUnicodePropertyNameCharacter(ch) {\n    return isControlLetter(ch) || ch === 0x5F /* _ */\n  }\n\n  // UnicodePropertyValue ::\n  //   UnicodePropertyValueCharacters\n  pp$1.regexp_eatUnicodePropertyValue = function(state) {\n    var ch = 0;\n    state.lastStringValue = \"\";\n    while (isUnicodePropertyValueCharacter(ch = state.current())) {\n      state.lastStringValue += codePointToString(ch);\n      state.advance();\n    }\n    return state.lastStringValue !== \"\"\n  };\n  function isUnicodePropertyValueCharacter(ch) {\n    return isUnicodePropertyNameCharacter(ch) || isDecimalDigit(ch)\n  }\n\n  // LoneUnicodePropertyNameOrValue ::\n  //   UnicodePropertyValueCharacters\n  pp$1.regexp_eatLoneUnicodePropertyNameOrValue = function(state) {\n    return this.regexp_eatUnicodePropertyValue(state)\n  };\n\n  // https://www.ecma-international.org/ecma-262/8.0/#prod-CharacterClass\n  pp$1.regexp_eatCharacterClass = function(state) {\n    if (state.eat(0x5B /* [ */)) {\n      state.eat(0x5E /* ^ */);\n      this.regexp_classRanges(state);\n      if (state.eat(0x5D /* ] */)) {\n        return true\n      }\n      // Unreachable since it threw \"unterminated regular expression\" error before.\n      state.raise(\"Unterminated character class\");\n    }\n    return false\n  };\n\n  // https://www.ecma-international.org/ecma-262/8.0/#prod-ClassRanges\n  // https://www.ecma-international.org/ecma-262/8.0/#prod-NonemptyClassRanges\n  // https://www.ecma-international.org/ecma-262/8.0/#prod-NonemptyClassRangesNoDash\n  pp$1.regexp_classRanges = function(state) {\n    while (this.regexp_eatClassAtom(state)) {\n      var left = state.lastIntValue;\n      if (state.eat(0x2D /* - */) && this.regexp_eatClassAtom(state)) {\n        var right = state.lastIntValue;\n        if (state.switchU && (left === -1 || right === -1)) {\n          state.raise(\"Invalid character class\");\n        }\n        if (left !== -1 && right !== -1 && left > right) {\n          state.raise(\"Range out of order in character class\");\n        }\n      }\n    }\n  };\n\n  // https://www.ecma-international.org/ecma-262/8.0/#prod-ClassAtom\n  // https://www.ecma-international.org/ecma-262/8.0/#prod-ClassAtomNoDash\n  pp$1.regexp_eatClassAtom = function(state) {\n    var start = state.pos;\n\n    if (state.eat(0x5C /* \\ */)) {\n      if (this.regexp_eatClassEscape(state)) {\n        return true\n      }\n      if (state.switchU) {\n        // Make the same message as V8.\n        var ch$1 = state.current();\n        if (ch$1 === 0x63 /* c */ || isOctalDigit(ch$1)) {\n          state.raise(\"Invalid class escape\");\n        }\n        state.raise(\"Invalid escape\");\n      }\n      state.pos = start;\n    }\n\n    var ch = state.current();\n    if (ch !== 0x5D /* ] */) {\n      state.lastIntValue = ch;\n      state.advance();\n      return true\n    }\n\n    return false\n  };\n\n  // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ClassEscape\n  pp$1.regexp_eatClassEscape = function(state) {\n    var start = state.pos;\n\n    if (state.eat(0x62 /* b */)) {\n      state.lastIntValue = 0x08; /* <BS> */\n      return true\n    }\n\n    if (state.switchU && state.eat(0x2D /* - */)) {\n      state.lastIntValue = 0x2D; /* - */\n      return true\n    }\n\n    if (!state.switchU && state.eat(0x63 /* c */)) {\n      if (this.regexp_eatClassControlLetter(state)) {\n        return true\n      }\n      state.pos = start;\n    }\n\n    return (\n      this.regexp_eatCharacterClassEscape(state) ||\n      this.regexp_eatCharacterEscape(state)\n    )\n  };\n\n  // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ClassControlLetter\n  pp$1.regexp_eatClassControlLetter = function(state) {\n    var ch = state.current();\n    if (isDecimalDigit(ch) || ch === 0x5F /* _ */) {\n      state.lastIntValue = ch % 0x20;\n      state.advance();\n      return true\n    }\n    return false\n  };\n\n  // https://www.ecma-international.org/ecma-262/8.0/#prod-HexEscapeSequence\n  pp$1.regexp_eatHexEscapeSequence = function(state) {\n    var start = state.pos;\n    if (state.eat(0x78 /* x */)) {\n      if (this.regexp_eatFixedHexDigits(state, 2)) {\n        return true\n      }\n      if (state.switchU) {\n        state.raise(\"Invalid escape\");\n      }\n      state.pos = start;\n    }\n    return false\n  };\n\n  // https://www.ecma-international.org/ecma-262/8.0/#prod-DecimalDigits\n  pp$1.regexp_eatDecimalDigits = function(state) {\n    var start = state.pos;\n    var ch = 0;\n    state.lastIntValue = 0;\n    while (isDecimalDigit(ch = state.current())) {\n      state.lastIntValue = 10 * state.lastIntValue + (ch - 0x30 /* 0 */);\n      state.advance();\n    }\n    return state.pos !== start\n  };\n  function isDecimalDigit(ch) {\n    return ch >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */\n  }\n\n  // https://www.ecma-international.org/ecma-262/8.0/#prod-HexDigits\n  pp$1.regexp_eatHexDigits = function(state) {\n    var start = state.pos;\n    var ch = 0;\n    state.lastIntValue = 0;\n    while (isHexDigit(ch = state.current())) {\n      state.lastIntValue = 16 * state.lastIntValue + hexToInt(ch);\n      state.advance();\n    }\n    return state.pos !== start\n  };\n  function isHexDigit(ch) {\n    return (\n      (ch >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */) ||\n      (ch >= 0x41 /* A */ && ch <= 0x46 /* F */) ||\n      (ch >= 0x61 /* a */ && ch <= 0x66 /* f */)\n    )\n  }\n  function hexToInt(ch) {\n    if (ch >= 0x41 /* A */ && ch <= 0x46 /* F */) {\n      return 10 + (ch - 0x41 /* A */)\n    }\n    if (ch >= 0x61 /* a */ && ch <= 0x66 /* f */) {\n      return 10 + (ch - 0x61 /* a */)\n    }\n    return ch - 0x30 /* 0 */\n  }\n\n  // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-LegacyOctalEscapeSequence\n  // Allows only 0-377(octal) i.e. 0-255(decimal).\n  pp$1.regexp_eatLegacyOctalEscapeSequence = function(state) {\n    if (this.regexp_eatOctalDigit(state)) {\n      var n1 = state.lastIntValue;\n      if (this.regexp_eatOctalDigit(state)) {\n        var n2 = state.lastIntValue;\n        if (n1 <= 3 && this.regexp_eatOctalDigit(state)) {\n          state.lastIntValue = n1 * 64 + n2 * 8 + state.lastIntValue;\n        } else {\n          state.lastIntValue = n1 * 8 + n2;\n        }\n      } else {\n        state.lastIntValue = n1;\n      }\n      return true\n    }\n    return false\n  };\n\n  // https://www.ecma-international.org/ecma-262/8.0/#prod-OctalDigit\n  pp$1.regexp_eatOctalDigit = function(state) {\n    var ch = state.current();\n    if (isOctalDigit(ch)) {\n      state.lastIntValue = ch - 0x30; /* 0 */\n      state.advance();\n      return true\n    }\n    state.lastIntValue = 0;\n    return false\n  };\n  function isOctalDigit(ch) {\n    return ch >= 0x30 /* 0 */ && ch <= 0x37 /* 7 */\n  }\n\n  // https://www.ecma-international.org/ecma-262/8.0/#prod-Hex4Digits\n  // https://www.ecma-international.org/ecma-262/8.0/#prod-HexDigit\n  // And HexDigit HexDigit in https://www.ecma-international.org/ecma-262/8.0/#prod-HexEscapeSequence\n  pp$1.regexp_eatFixedHexDigits = function(state, length) {\n    var start = state.pos;\n    state.lastIntValue = 0;\n    for (var i = 0; i < length; ++i) {\n      var ch = state.current();\n      if (!isHexDigit(ch)) {\n        state.pos = start;\n        return false\n      }\n      state.lastIntValue = 16 * state.lastIntValue + hexToInt(ch);\n      state.advance();\n    }\n    return true\n  };\n\n  // Object type used to represent tokens. Note that normally, tokens\n  // simply exist as properties on the parser object. This is only\n  // used for the onToken callback and the external tokenizer.\n\n  var Token = function Token(p) {\n    this.type = p.type;\n    this.value = p.value;\n    this.start = p.start;\n    this.end = p.end;\n    if (p.options.locations)\n      { this.loc = new SourceLocation(p, p.startLoc, p.endLoc); }\n    if (p.options.ranges)\n      { this.range = [p.start, p.end]; }\n  };\n\n  // ## Tokenizer\n\n  var pp = Parser.prototype;\n\n  // Move to the next token\n\n  pp.next = function(ignoreEscapeSequenceInKeyword) {\n    if (!ignoreEscapeSequenceInKeyword && this.type.keyword && this.containsEsc)\n      { this.raiseRecoverable(this.start, \"Escape sequence in keyword \" + this.type.keyword); }\n    if (this.options.onToken)\n      { this.options.onToken(new Token(this)); }\n\n    this.lastTokEnd = this.end;\n    this.lastTokStart = this.start;\n    this.lastTokEndLoc = this.endLoc;\n    this.lastTokStartLoc = this.startLoc;\n    this.nextToken();\n  };\n\n  pp.getToken = function() {\n    this.next();\n    return new Token(this)\n  };\n\n  // If we're in an ES6 environment, make parsers iterable\n  if (typeof Symbol !== \"undefined\")\n    { pp[Symbol.iterator] = function() {\n      var this$1$1 = this;\n\n      return {\n        next: function () {\n          var token = this$1$1.getToken();\n          return {\n            done: token.type === types$1.eof,\n            value: token\n          }\n        }\n      }\n    }; }\n\n  // Toggle strict mode. Re-reads the next number or string to please\n  // pedantic tests (`\"use strict\"; 010;` should fail).\n\n  // Read a single token, updating the parser object's token-related\n  // properties.\n\n  pp.nextToken = function() {\n    var curContext = this.curContext();\n    if (!curContext || !curContext.preserveSpace) { this.skipSpace(); }\n\n    this.start = this.pos;\n    if (this.options.locations) { this.startLoc = this.curPosition(); }\n    if (this.pos >= this.input.length) { return this.finishToken(types$1.eof) }\n\n    if (curContext.override) { return curContext.override(this) }\n    else { this.readToken(this.fullCharCodeAtPos()); }\n  };\n\n  pp.readToken = function(code) {\n    // Identifier or keyword. '\\uXXXX' sequences are allowed in\n    // identifiers, so '\\' also dispatches to that.\n    if (isIdentifierStart(code, this.options.ecmaVersion >= 6) || code === 92 /* '\\' */)\n      { return this.readWord() }\n\n    return this.getTokenFromCode(code)\n  };\n\n  pp.fullCharCodeAtPos = function() {\n    var code = this.input.charCodeAt(this.pos);\n    if (code <= 0xd7ff || code >= 0xdc00) { return code }\n    var next = this.input.charCodeAt(this.pos + 1);\n    return next <= 0xdbff || next >= 0xe000 ? code : (code << 10) + next - 0x35fdc00\n  };\n\n  pp.skipBlockComment = function() {\n    var startLoc = this.options.onComment && this.curPosition();\n    var start = this.pos, end = this.input.indexOf(\"*/\", this.pos += 2);\n    if (end === -1) { this.raise(this.pos - 2, \"Unterminated comment\"); }\n    this.pos = end + 2;\n    if (this.options.locations) {\n      for (var nextBreak = (void 0), pos = start; (nextBreak = nextLineBreak(this.input, pos, this.pos)) > -1;) {\n        ++this.curLine;\n        pos = this.lineStart = nextBreak;\n      }\n    }\n    if (this.options.onComment)\n      { this.options.onComment(true, this.input.slice(start + 2, end), start, this.pos,\n                             startLoc, this.curPosition()); }\n  };\n\n  pp.skipLineComment = function(startSkip) {\n    var start = this.pos;\n    var startLoc = this.options.onComment && this.curPosition();\n    var ch = this.input.charCodeAt(this.pos += startSkip);\n    while (this.pos < this.input.length && !isNewLine(ch)) {\n      ch = this.input.charCodeAt(++this.pos);\n    }\n    if (this.options.onComment)\n      { this.options.onComment(false, this.input.slice(start + startSkip, this.pos), start, this.pos,\n                             startLoc, this.curPosition()); }\n  };\n\n  // Called at the start of the parse and after every token. Skips\n  // whitespace and comments, and.\n\n  pp.skipSpace = function() {\n    loop: while (this.pos < this.input.length) {\n      var ch = this.input.charCodeAt(this.pos);\n      switch (ch) {\n      case 32: case 160: // ' '\n        ++this.pos;\n        break\n      case 13:\n        if (this.input.charCodeAt(this.pos + 1) === 10) {\n          ++this.pos;\n        }\n      case 10: case 8232: case 8233:\n        ++this.pos;\n        if (this.options.locations) {\n          ++this.curLine;\n          this.lineStart = this.pos;\n        }\n        break\n      case 47: // '/'\n        switch (this.input.charCodeAt(this.pos + 1)) {\n        case 42: // '*'\n          this.skipBlockComment();\n          break\n        case 47:\n          this.skipLineComment(2);\n          break\n        default:\n          break loop\n        }\n        break\n      default:\n        if (ch > 8 && ch < 14 || ch >= 5760 && nonASCIIwhitespace.test(String.fromCharCode(ch))) {\n          ++this.pos;\n        } else {\n          break loop\n        }\n      }\n    }\n  };\n\n  // Called at the end of every token. Sets `end`, `val`, and\n  // maintains `context` and `exprAllowed`, and skips the space after\n  // the token, so that the next one's `start` will point at the\n  // right position.\n\n  pp.finishToken = function(type, val) {\n    this.end = this.pos;\n    if (this.options.locations) { this.endLoc = this.curPosition(); }\n    var prevType = this.type;\n    this.type = type;\n    this.value = val;\n\n    this.updateContext(prevType);\n  };\n\n  // ### Token reading\n\n  // This is the function that is called to fetch the next token. It\n  // is somewhat obscure, because it works in character codes rather\n  // than characters, and because operator parsing has been inlined\n  // into it.\n  //\n  // All in the name of speed.\n  //\n  pp.readToken_dot = function() {\n    var next = this.input.charCodeAt(this.pos + 1);\n    if (next >= 48 && next <= 57) { return this.readNumber(true) }\n    var next2 = this.input.charCodeAt(this.pos + 2);\n    if (this.options.ecmaVersion >= 6 && next === 46 && next2 === 46) { // 46 = dot '.'\n      this.pos += 3;\n      return this.finishToken(types$1.ellipsis)\n    } else {\n      ++this.pos;\n      return this.finishToken(types$1.dot)\n    }\n  };\n\n  pp.readToken_slash = function() { // '/'\n    var next = this.input.charCodeAt(this.pos + 1);\n    if (this.exprAllowed) { ++this.pos; return this.readRegexp() }\n    if (next === 61) { return this.finishOp(types$1.assign, 2) }\n    return this.finishOp(types$1.slash, 1)\n  };\n\n  pp.readToken_mult_modulo_exp = function(code) { // '%*'\n    var next = this.input.charCodeAt(this.pos + 1);\n    var size = 1;\n    var tokentype = code === 42 ? types$1.star : types$1.modulo;\n\n    // exponentiation operator ** and **=\n    if (this.options.ecmaVersion >= 7 && code === 42 && next === 42) {\n      ++size;\n      tokentype = types$1.starstar;\n      next = this.input.charCodeAt(this.pos + 2);\n    }\n\n    if (next === 61) { return this.finishOp(types$1.assign, size + 1) }\n    return this.finishOp(tokentype, size)\n  };\n\n  pp.readToken_pipe_amp = function(code) { // '|&'\n    var next = this.input.charCodeAt(this.pos + 1);\n    if (next === code) {\n      if (this.options.ecmaVersion >= 12) {\n        var next2 = this.input.charCodeAt(this.pos + 2);\n        if (next2 === 61) { return this.finishOp(types$1.assign, 3) }\n      }\n      return this.finishOp(code === 124 ? types$1.logicalOR : types$1.logicalAND, 2)\n    }\n    if (next === 61) { return this.finishOp(types$1.assign, 2) }\n    return this.finishOp(code === 124 ? types$1.bitwiseOR : types$1.bitwiseAND, 1)\n  };\n\n  pp.readToken_caret = function() { // '^'\n    var next = this.input.charCodeAt(this.pos + 1);\n    if (next === 61) { return this.finishOp(types$1.assign, 2) }\n    return this.finishOp(types$1.bitwiseXOR, 1)\n  };\n\n  pp.readToken_plus_min = function(code) { // '+-'\n    var next = this.input.charCodeAt(this.pos + 1);\n    if (next === code) {\n      if (next === 45 && !this.inModule && this.input.charCodeAt(this.pos + 2) === 62 &&\n          (this.lastTokEnd === 0 || lineBreak.test(this.input.slice(this.lastTokEnd, this.pos)))) {\n        // A `-->` line comment\n        this.skipLineComment(3);\n        this.skipSpace();\n        return this.nextToken()\n      }\n      return this.finishOp(types$1.incDec, 2)\n    }\n    if (next === 61) { return this.finishOp(types$1.assign, 2) }\n    return this.finishOp(types$1.plusMin, 1)\n  };\n\n  pp.readToken_lt_gt = function(code) { // '<>'\n    var next = this.input.charCodeAt(this.pos + 1);\n    var size = 1;\n    if (next === code) {\n      size = code === 62 && this.input.charCodeAt(this.pos + 2) === 62 ? 3 : 2;\n      if (this.input.charCodeAt(this.pos + size) === 61) { return this.finishOp(types$1.assign, size + 1) }\n      return this.finishOp(types$1.bitShift, size)\n    }\n    if (next === 33 && code === 60 && !this.inModule && this.input.charCodeAt(this.pos + 2) === 45 &&\n        this.input.charCodeAt(this.pos + 3) === 45) {\n      // `<!--`, an XML-style comment that should be interpreted as a line comment\n      this.skipLineComment(4);\n      this.skipSpace();\n      return this.nextToken()\n    }\n    if (next === 61) { size = 2; }\n    return this.finishOp(types$1.relational, size)\n  };\n\n  pp.readToken_eq_excl = function(code) { // '=!'\n    var next = this.input.charCodeAt(this.pos + 1);\n    if (next === 61) { return this.finishOp(types$1.equality, this.input.charCodeAt(this.pos + 2) === 61 ? 3 : 2) }\n    if (code === 61 && next === 62 && this.options.ecmaVersion >= 6) { // '=>'\n      this.pos += 2;\n      return this.finishToken(types$1.arrow)\n    }\n    return this.finishOp(code === 61 ? types$1.eq : types$1.prefix, 1)\n  };\n\n  pp.readToken_question = function() { // '?'\n    var ecmaVersion = this.options.ecmaVersion;\n    if (ecmaVersion >= 11) {\n      var next = this.input.charCodeAt(this.pos + 1);\n      if (next === 46) {\n        var next2 = this.input.charCodeAt(this.pos + 2);\n        if (next2 < 48 || next2 > 57) { return this.finishOp(types$1.questionDot, 2) }\n      }\n      if (next === 63) {\n        if (ecmaVersion >= 12) {\n          var next2$1 = this.input.charCodeAt(this.pos + 2);\n          if (next2$1 === 61) { return this.finishOp(types$1.assign, 3) }\n        }\n        return this.finishOp(types$1.coalesce, 2)\n      }\n    }\n    return this.finishOp(types$1.question, 1)\n  };\n\n  pp.readToken_numberSign = function() { // '#'\n    var ecmaVersion = this.options.ecmaVersion;\n    var code = 35; // '#'\n    if (ecmaVersion >= 13) {\n      ++this.pos;\n      code = this.fullCharCodeAtPos();\n      if (isIdentifierStart(code, true) || code === 92 /* '\\' */) {\n        return this.finishToken(types$1.privateId, this.readWord1())\n      }\n    }\n\n    this.raise(this.pos, \"Unexpected character '\" + codePointToString(code) + \"'\");\n  };\n\n  pp.getTokenFromCode = function(code) {\n    switch (code) {\n    // The interpretation of a dot depends on whether it is followed\n    // by a digit or another two dots.\n    case 46: // '.'\n      return this.readToken_dot()\n\n    // Punctuation tokens.\n    case 40: ++this.pos; return this.finishToken(types$1.parenL)\n    case 41: ++this.pos; return this.finishToken(types$1.parenR)\n    case 59: ++this.pos; return this.finishToken(types$1.semi)\n    case 44: ++this.pos; return this.finishToken(types$1.comma)\n    case 91: ++this.pos; return this.finishToken(types$1.bracketL)\n    case 93: ++this.pos; return this.finishToken(types$1.bracketR)\n    case 123: ++this.pos; return this.finishToken(types$1.braceL)\n    case 125: ++this.pos; return this.finishToken(types$1.braceR)\n    case 58: ++this.pos; return this.finishToken(types$1.colon)\n\n    case 96: // '`'\n      if (this.options.ecmaVersion < 6) { break }\n      ++this.pos;\n      return this.finishToken(types$1.backQuote)\n\n    case 48: // '0'\n      var next = this.input.charCodeAt(this.pos + 1);\n      if (next === 120 || next === 88) { return this.readRadixNumber(16) } // '0x', '0X' - hex number\n      if (this.options.ecmaVersion >= 6) {\n        if (next === 111 || next === 79) { return this.readRadixNumber(8) } // '0o', '0O' - octal number\n        if (next === 98 || next === 66) { return this.readRadixNumber(2) } // '0b', '0B' - binary number\n      }\n\n    // Anything else beginning with a digit is an integer, octal\n    // number, or float.\n    case 49: case 50: case 51: case 52: case 53: case 54: case 55: case 56: case 57: // 1-9\n      return this.readNumber(false)\n\n    // Quotes produce strings.\n    case 34: case 39: // '\"', \"'\"\n      return this.readString(code)\n\n    // Operators are parsed inline in tiny state machines. '=' (61) is\n    // often referred to. `finishOp` simply skips the amount of\n    // characters it is given as second argument, and returns a token\n    // of the type given by its first argument.\n    case 47: // '/'\n      return this.readToken_slash()\n\n    case 37: case 42: // '%*'\n      return this.readToken_mult_modulo_exp(code)\n\n    case 124: case 38: // '|&'\n      return this.readToken_pipe_amp(code)\n\n    case 94: // '^'\n      return this.readToken_caret()\n\n    case 43: case 45: // '+-'\n      return this.readToken_plus_min(code)\n\n    case 60: case 62: // '<>'\n      return this.readToken_lt_gt(code)\n\n    case 61: case 33: // '=!'\n      return this.readToken_eq_excl(code)\n\n    case 63: // '?'\n      return this.readToken_question()\n\n    case 126: // '~'\n      return this.finishOp(types$1.prefix, 1)\n\n    case 35: // '#'\n      return this.readToken_numberSign()\n    }\n\n    this.raise(this.pos, \"Unexpected character '\" + codePointToString(code) + \"'\");\n  };\n\n  pp.finishOp = function(type, size) {\n    var str = this.input.slice(this.pos, this.pos + size);\n    this.pos += size;\n    return this.finishToken(type, str)\n  };\n\n  pp.readRegexp = function() {\n    var escaped, inClass, start = this.pos;\n    for (;;) {\n      if (this.pos >= this.input.length) { this.raise(start, \"Unterminated regular expression\"); }\n      var ch = this.input.charAt(this.pos);\n      if (lineBreak.test(ch)) { this.raise(start, \"Unterminated regular expression\"); }\n      if (!escaped) {\n        if (ch === \"[\") { inClass = true; }\n        else if (ch === \"]\" && inClass) { inClass = false; }\n        else if (ch === \"/\" && !inClass) { break }\n        escaped = ch === \"\\\\\";\n      } else { escaped = false; }\n      ++this.pos;\n    }\n    var pattern = this.input.slice(start, this.pos);\n    ++this.pos;\n    var flagsStart = this.pos;\n    var flags = this.readWord1();\n    if (this.containsEsc) { this.unexpected(flagsStart); }\n\n    // Validate pattern\n    var state = this.regexpState || (this.regexpState = new RegExpValidationState(this));\n    state.reset(start, pattern, flags);\n    this.validateRegExpFlags(state);\n    this.validateRegExpPattern(state);\n\n    // Create Literal#value property value.\n    var value = null;\n    try {\n      value = new RegExp(pattern, flags);\n    } catch (e) {\n      // ESTree requires null if it failed to instantiate RegExp object.\n      // https://github.com/estree/estree/blob/a27003adf4fd7bfad44de9cef372a2eacd527b1c/es5.md#regexpliteral\n    }\n\n    return this.finishToken(types$1.regexp, {pattern: pattern, flags: flags, value: value})\n  };\n\n  // Read an integer in the given radix. Return null if zero digits\n  // were read, the integer value otherwise. When `len` is given, this\n  // will return `null` unless the integer has exactly `len` digits.\n\n  pp.readInt = function(radix, len, maybeLegacyOctalNumericLiteral) {\n    // `len` is used for character escape sequences. In that case, disallow separators.\n    var allowSeparators = this.options.ecmaVersion >= 12 && len === undefined;\n\n    // `maybeLegacyOctalNumericLiteral` is true if it doesn't have prefix (0x,0o,0b)\n    // and isn't fraction part nor exponent part. In that case, if the first digit\n    // is zero then disallow separators.\n    var isLegacyOctalNumericLiteral = maybeLegacyOctalNumericLiteral && this.input.charCodeAt(this.pos) === 48;\n\n    var start = this.pos, total = 0, lastCode = 0;\n    for (var i = 0, e = len == null ? Infinity : len; i < e; ++i, ++this.pos) {\n      var code = this.input.charCodeAt(this.pos), val = (void 0);\n\n      if (allowSeparators && code === 95) {\n        if (isLegacyOctalNumericLiteral) { this.raiseRecoverable(this.pos, \"Numeric separator is not allowed in legacy octal numeric literals\"); }\n        if (lastCode === 95) { this.raiseRecoverable(this.pos, \"Numeric separator must be exactly one underscore\"); }\n        if (i === 0) { this.raiseRecoverable(this.pos, \"Numeric separator is not allowed at the first of digits\"); }\n        lastCode = code;\n        continue\n      }\n\n      if (code >= 97) { val = code - 97 + 10; } // a\n      else if (code >= 65) { val = code - 65 + 10; } // A\n      else if (code >= 48 && code <= 57) { val = code - 48; } // 0-9\n      else { val = Infinity; }\n      if (val >= radix) { break }\n      lastCode = code;\n      total = total * radix + val;\n    }\n\n    if (allowSeparators && lastCode === 95) { this.raiseRecoverable(this.pos - 1, \"Numeric separator is not allowed at the last of digits\"); }\n    if (this.pos === start || len != null && this.pos - start !== len) { return null }\n\n    return total\n  };\n\n  function stringToNumber(str, isLegacyOctalNumericLiteral) {\n    if (isLegacyOctalNumericLiteral) {\n      return parseInt(str, 8)\n    }\n\n    // `parseFloat(value)` stops parsing at the first numeric separator then returns a wrong value.\n    return parseFloat(str.replace(/_/g, \"\"))\n  }\n\n  function stringToBigInt(str) {\n    if (typeof BigInt !== \"function\") {\n      return null\n    }\n\n    // `BigInt(value)` throws syntax error if the string contains numeric separators.\n    return BigInt(str.replace(/_/g, \"\"))\n  }\n\n  pp.readRadixNumber = function(radix) {\n    var start = this.pos;\n    this.pos += 2; // 0x\n    var val = this.readInt(radix);\n    if (val == null) { this.raise(this.start + 2, \"Expected number in radix \" + radix); }\n    if (this.options.ecmaVersion >= 11 && this.input.charCodeAt(this.pos) === 110) {\n      val = stringToBigInt(this.input.slice(start, this.pos));\n      ++this.pos;\n    } else if (isIdentifierStart(this.fullCharCodeAtPos())) { this.raise(this.pos, \"Identifier directly after number\"); }\n    return this.finishToken(types$1.num, val)\n  };\n\n  // Read an integer, octal integer, or floating-point number.\n\n  pp.readNumber = function(startsWithDot) {\n    var start = this.pos;\n    if (!startsWithDot && this.readInt(10, undefined, true) === null) { this.raise(start, \"Invalid number\"); }\n    var octal = this.pos - start >= 2 && this.input.charCodeAt(start) === 48;\n    if (octal && this.strict) { this.raise(start, \"Invalid number\"); }\n    var next = this.input.charCodeAt(this.pos);\n    if (!octal && !startsWithDot && this.options.ecmaVersion >= 11 && next === 110) {\n      var val$1 = stringToBigInt(this.input.slice(start, this.pos));\n      ++this.pos;\n      if (isIdentifierStart(this.fullCharCodeAtPos())) { this.raise(this.pos, \"Identifier directly after number\"); }\n      return this.finishToken(types$1.num, val$1)\n    }\n    if (octal && /[89]/.test(this.input.slice(start, this.pos))) { octal = false; }\n    if (next === 46 && !octal) { // '.'\n      ++this.pos;\n      this.readInt(10);\n      next = this.input.charCodeAt(this.pos);\n    }\n    if ((next === 69 || next === 101) && !octal) { // 'eE'\n      next = this.input.charCodeAt(++this.pos);\n      if (next === 43 || next === 45) { ++this.pos; } // '+-'\n      if (this.readInt(10) === null) { this.raise(start, \"Invalid number\"); }\n    }\n    if (isIdentifierStart(this.fullCharCodeAtPos())) { this.raise(this.pos, \"Identifier directly after number\"); }\n\n    var val = stringToNumber(this.input.slice(start, this.pos), octal);\n    return this.finishToken(types$1.num, val)\n  };\n\n  // Read a string value, interpreting backslash-escapes.\n\n  pp.readCodePoint = function() {\n    var ch = this.input.charCodeAt(this.pos), code;\n\n    if (ch === 123) { // '{'\n      if (this.options.ecmaVersion < 6) { this.unexpected(); }\n      var codePos = ++this.pos;\n      code = this.readHexChar(this.input.indexOf(\"}\", this.pos) - this.pos);\n      ++this.pos;\n      if (code > 0x10FFFF) { this.invalidStringToken(codePos, \"Code point out of bounds\"); }\n    } else {\n      code = this.readHexChar(4);\n    }\n    return code\n  };\n\n  pp.readString = function(quote) {\n    var out = \"\", chunkStart = ++this.pos;\n    for (;;) {\n      if (this.pos >= this.input.length) { this.raise(this.start, \"Unterminated string constant\"); }\n      var ch = this.input.charCodeAt(this.pos);\n      if (ch === quote) { break }\n      if (ch === 92) { // '\\'\n        out += this.input.slice(chunkStart, this.pos);\n        out += this.readEscapedChar(false);\n        chunkStart = this.pos;\n      } else if (ch === 0x2028 || ch === 0x2029) {\n        if (this.options.ecmaVersion < 10) { this.raise(this.start, \"Unterminated string constant\"); }\n        ++this.pos;\n        if (this.options.locations) {\n          this.curLine++;\n          this.lineStart = this.pos;\n        }\n      } else {\n        if (isNewLine(ch)) { this.raise(this.start, \"Unterminated string constant\"); }\n        ++this.pos;\n      }\n    }\n    out += this.input.slice(chunkStart, this.pos++);\n    return this.finishToken(types$1.string, out)\n  };\n\n  // Reads template string tokens.\n\n  var INVALID_TEMPLATE_ESCAPE_ERROR = {};\n\n  pp.tryReadTemplateToken = function() {\n    this.inTemplateElement = true;\n    try {\n      this.readTmplToken();\n    } catch (err) {\n      if (err === INVALID_TEMPLATE_ESCAPE_ERROR) {\n        this.readInvalidTemplateToken();\n      } else {\n        throw err\n      }\n    }\n\n    this.inTemplateElement = false;\n  };\n\n  pp.invalidStringToken = function(position, message) {\n    if (this.inTemplateElement && this.options.ecmaVersion >= 9) {\n      throw INVALID_TEMPLATE_ESCAPE_ERROR\n    } else {\n      this.raise(position, message);\n    }\n  };\n\n  pp.readTmplToken = function() {\n    var out = \"\", chunkStart = this.pos;\n    for (;;) {\n      if (this.pos >= this.input.length) { this.raise(this.start, \"Unterminated template\"); }\n      var ch = this.input.charCodeAt(this.pos);\n      if (ch === 96 || ch === 36 && this.input.charCodeAt(this.pos + 1) === 123) { // '`', '${'\n        if (this.pos === this.start && (this.type === types$1.template || this.type === types$1.invalidTemplate)) {\n          if (ch === 36) {\n            this.pos += 2;\n            return this.finishToken(types$1.dollarBraceL)\n          } else {\n            ++this.pos;\n            return this.finishToken(types$1.backQuote)\n          }\n        }\n        out += this.input.slice(chunkStart, this.pos);\n        return this.finishToken(types$1.template, out)\n      }\n      if (ch === 92) { // '\\'\n        out += this.input.slice(chunkStart, this.pos);\n        out += this.readEscapedChar(true);\n        chunkStart = this.pos;\n      } else if (isNewLine(ch)) {\n        out += this.input.slice(chunkStart, this.pos);\n        ++this.pos;\n        switch (ch) {\n        case 13:\n          if (this.input.charCodeAt(this.pos) === 10) { ++this.pos; }\n        case 10:\n          out += \"\\n\";\n          break\n        default:\n          out += String.fromCharCode(ch);\n          break\n        }\n        if (this.options.locations) {\n          ++this.curLine;\n          this.lineStart = this.pos;\n        }\n        chunkStart = this.pos;\n      } else {\n        ++this.pos;\n      }\n    }\n  };\n\n  // Reads a template token to search for the end, without validating any escape sequences\n  pp.readInvalidTemplateToken = function() {\n    for (; this.pos < this.input.length; this.pos++) {\n      switch (this.input[this.pos]) {\n      case \"\\\\\":\n        ++this.pos;\n        break\n\n      case \"$\":\n        if (this.input[this.pos + 1] !== \"{\") {\n          break\n        }\n\n      // falls through\n      case \"`\":\n        return this.finishToken(types$1.invalidTemplate, this.input.slice(this.start, this.pos))\n\n      // no default\n      }\n    }\n    this.raise(this.start, \"Unterminated template\");\n  };\n\n  // Used to read escaped characters\n\n  pp.readEscapedChar = function(inTemplate) {\n    var ch = this.input.charCodeAt(++this.pos);\n    ++this.pos;\n    switch (ch) {\n    case 110: return \"\\n\" // 'n' -> '\\n'\n    case 114: return \"\\r\" // 'r' -> '\\r'\n    case 120: return String.fromCharCode(this.readHexChar(2)) // 'x'\n    case 117: return codePointToString(this.readCodePoint()) // 'u'\n    case 116: return \"\\t\" // 't' -> '\\t'\n    case 98: return \"\\b\" // 'b' -> '\\b'\n    case 118: return \"\\u000b\" // 'v' -> '\\u000b'\n    case 102: return \"\\f\" // 'f' -> '\\f'\n    case 13: if (this.input.charCodeAt(this.pos) === 10) { ++this.pos; } // '\\r\\n'\n    case 10: // ' \\n'\n      if (this.options.locations) { this.lineStart = this.pos; ++this.curLine; }\n      return \"\"\n    case 56:\n    case 57:\n      if (this.strict) {\n        this.invalidStringToken(\n          this.pos - 1,\n          \"Invalid escape sequence\"\n        );\n      }\n      if (inTemplate) {\n        var codePos = this.pos - 1;\n\n        this.invalidStringToken(\n          codePos,\n          \"Invalid escape sequence in template string\"\n        );\n      }\n    default:\n      if (ch >= 48 && ch <= 55) {\n        var octalStr = this.input.substr(this.pos - 1, 3).match(/^[0-7]+/)[0];\n        var octal = parseInt(octalStr, 8);\n        if (octal > 255) {\n          octalStr = octalStr.slice(0, -1);\n          octal = parseInt(octalStr, 8);\n        }\n        this.pos += octalStr.length - 1;\n        ch = this.input.charCodeAt(this.pos);\n        if ((octalStr !== \"0\" || ch === 56 || ch === 57) && (this.strict || inTemplate)) {\n          this.invalidStringToken(\n            this.pos - 1 - octalStr.length,\n            inTemplate\n              ? \"Octal literal in template string\"\n              : \"Octal literal in strict mode\"\n          );\n        }\n        return String.fromCharCode(octal)\n      }\n      if (isNewLine(ch)) {\n        // Unicode new line characters after \\ get removed from output in both\n        // template literals and strings\n        return \"\"\n      }\n      return String.fromCharCode(ch)\n    }\n  };\n\n  // Used to read character escape sequences ('\\x', '\\u', '\\U').\n\n  pp.readHexChar = function(len) {\n    var codePos = this.pos;\n    var n = this.readInt(16, len);\n    if (n === null) { this.invalidStringToken(codePos, \"Bad character escape sequence\"); }\n    return n\n  };\n\n  // Read an identifier, and return it as a string. Sets `this.containsEsc`\n  // to whether the word contained a '\\u' escape.\n  //\n  // Incrementally adds only escaped chars, adding other chunks as-is\n  // as a micro-optimization.\n\n  pp.readWord1 = function() {\n    this.containsEsc = false;\n    var word = \"\", first = true, chunkStart = this.pos;\n    var astral = this.options.ecmaVersion >= 6;\n    while (this.pos < this.input.length) {\n      var ch = this.fullCharCodeAtPos();\n      if (isIdentifierChar(ch, astral)) {\n        this.pos += ch <= 0xffff ? 1 : 2;\n      } else if (ch === 92) { // \"\\\"\n        this.containsEsc = true;\n        word += this.input.slice(chunkStart, this.pos);\n        var escStart = this.pos;\n        if (this.input.charCodeAt(++this.pos) !== 117) // \"u\"\n          { this.invalidStringToken(this.pos, \"Expecting Unicode escape sequence \\\\uXXXX\"); }\n        ++this.pos;\n        var esc = this.readCodePoint();\n        if (!(first ? isIdentifierStart : isIdentifierChar)(esc, astral))\n          { this.invalidStringToken(escStart, \"Invalid Unicode escape\"); }\n        word += codePointToString(esc);\n        chunkStart = this.pos;\n      } else {\n        break\n      }\n      first = false;\n    }\n    return word + this.input.slice(chunkStart, this.pos)\n  };\n\n  // Read an identifier or keyword token. Will check for reserved\n  // words when necessary.\n\n  pp.readWord = function() {\n    var word = this.readWord1();\n    var type = types$1.name;\n    if (this.keywords.test(word)) {\n      type = keywords[word];\n    }\n    return this.finishToken(type, word)\n  };\n\n  // Acorn is a tiny, fast JavaScript parser written in JavaScript.\n\n  var version = \"8.8.2\";\n\n  Parser.acorn = {\n    Parser: Parser,\n    version: version,\n    defaultOptions: defaultOptions,\n    Position: Position,\n    SourceLocation: SourceLocation,\n    getLineInfo: getLineInfo,\n    Node: Node,\n    TokenType: TokenType,\n    tokTypes: types$1,\n    keywordTypes: keywords,\n    TokContext: TokContext,\n    tokContexts: types,\n    isIdentifierChar: isIdentifierChar,\n    isIdentifierStart: isIdentifierStart,\n    Token: Token,\n    isNewLine: isNewLine,\n    lineBreak: lineBreak,\n    lineBreakG: lineBreakG,\n    nonASCIIwhitespace: nonASCIIwhitespace\n  };\n\n  // The main exported interface (under `self.acorn` when in the\n  // browser) is a `parse` function that takes a code string and\n  // returns an abstract syntax tree as specified by [Mozilla parser\n  // API][api].\n  //\n  // [api]: https://developer.mozilla.org/en-US/docs/SpiderMonkey/Parser_API\n\n  function parse(input, options) {\n    return Parser.parse(input, options)\n  }\n\n  // This function tries to parse a single expression at a given\n  // offset in a string. Useful for parsing mixed-language formats\n  // that embed JavaScript expressions.\n\n  function parseExpressionAt(input, pos, options) {\n    return Parser.parseExpressionAt(input, pos, options)\n  }\n\n  // Acorn is organized as a tokenizer and a recursive-descent parser.\n  // The `tokenizer` export provides an interface to the tokenizer.\n\n  function tokenizer(input, options) {\n    return Parser.tokenizer(input, options)\n  }\n\n  exports.Node = Node;\n  exports.Parser = Parser;\n  exports.Position = Position;\n  exports.SourceLocation = SourceLocation;\n  exports.TokContext = TokContext;\n  exports.Token = Token;\n  exports.TokenType = TokenType;\n  exports.defaultOptions = defaultOptions;\n  exports.getLineInfo = getLineInfo;\n  exports.isIdentifierChar = isIdentifierChar;\n  exports.isIdentifierStart = isIdentifierStart;\n  exports.isNewLine = isNewLine;\n  exports.keywordTypes = keywords;\n  exports.lineBreak = lineBreak;\n  exports.lineBreakG = lineBreakG;\n  exports.nonASCIIwhitespace = nonASCIIwhitespace;\n  exports.parse = parse;\n  exports.parseExpressionAt = parseExpressionAt;\n  exports.tokContexts = types;\n  exports.tokTypes = types$1;\n  exports.tokenizer = tokenizer;\n  exports.version = version;\n\n}));\n/README.md(|# Acorn\n\nA tiny, fast JavaScript parser written in JavaScript.\n\n## Community\n\nAcorn is open source software released under an\n[MIT license](https://github.com/acornjs/acorn/blob/master/acorn/LICENSE).\n\nYou are welcome to\n[report bugs](https://github.com/acornjs/acorn/issues) or create pull\nrequests on [github](https://github.com/acornjs/acorn). For questions\nand discussion, please use the\n[Tern discussion forum](https://discuss.ternjs.net).\n\n## Installation\n\nThe easiest way to install acorn is from [`npm`](https://www.npmjs.com/):\n\n```sh\nnpm install acorn\n```\n\nAlternately, you can download the source and build acorn yourself:\n\n```sh\ngit clone https://github.com/acornjs/acorn.git\ncd acorn\nnpm install\n```\n\n## Interface\n\n**parse**`(input, options)` is the main interface to the library. The\n`input` parameter is a string, `options` must be an object setting\nsome of the options listed below. The return value will be an abstract\nsyntax tree object as specified by the [ESTree\nspec](https://github.com/estree/estree).\n\n```javascript\nlet acorn = require(\"acorn\");\nconsole.log(acorn.parse(\"1 + 1\", {ecmaVersion: 2020}));\n```\n\nWhen encountering a syntax error, the parser will raise a\n`SyntaxError` object with a meaningful message. The error object will\nhave a `pos` property that indicates the string offset at which the\nerror occurred, and a `loc` object that contains a `{line, column}`\nobject referring to that same position.\n\nOptions are provided by in a second argument, which should be an\nobject containing any of these fields (only `ecmaVersion` is\nrequired):\n\n- **ecmaVersion**: Indicates the ECMAScript version to parse. Must be\n  either 3, 5, 6 (or 2015), 7 (2016), 8 (2017), 9 (2018), 10 (2019),\n  11 (2020), 12 (2021), 13 (2022), 14 (2023), or `\"latest\"` (the\n  latest the library supports). This influences support for strict\n  mode, the set of reserved words, and support for new syntax\n  features.\n\n  **NOTE**: Only 'stage 4' (finalized) ECMAScript features are being\n  implemented by Acorn. Other proposed new features must be\n  implemented through plugins.\n\n- **sourceType**: Indicate the mode the code should be parsed in. Can be\n  either `\"script\"` or `\"module\"`. This influences global strict mode\n  and parsing of `import` and `export` declarations.\n\n  **NOTE**: If set to `\"module\"`, then static `import` / `export` syntax\n  will be valid, even if `ecmaVersion` is less than 6.\n\n- **onInsertedSemicolon**: If given a callback, that callback will be\n  called whenever a missing semicolon is inserted by the parser. The\n  callback will be given the character offset of the point where the\n  semicolon is inserted as argument, and if `locations` is on, also a\n  `{line, column}` object representing this position.\n\n- **onTrailingComma**: Like `onInsertedSemicolon`, but for trailing\n  commas.\n\n- **allowReserved**: If `false`, using a reserved word will generate\n  an error. Defaults to `true` for `ecmaVersion` 3, `false` for higher\n  versions. When given the value `\"never\"`, reserved words and\n  keywords can also not be used as property names (as in Internet\n  Explorer's old parser).\n\n- **allowReturnOutsideFunction**: By default, a return statement at\n  the top level raises an error. Set this to `true` to accept such\n  code.\n\n- **allowImportExportEverywhere**: By default, `import` and `export`\n  declarations can only appear at a program's top level. Setting this\n  option to `true` allows them anywhere where a statement is allowed,\n  and also allows `import.meta` expressions to appear in scripts\n  (when `sourceType` is not `\"module\"`).\n\n- **allowAwaitOutsideFunction**: If `false`, `await` expressions can\n  only appear inside `async` functions. Defaults to `true` for\n  `ecmaVersion` 2022 and later, `false` for lower versions. Setting this option to\n  `true` allows to have top-level `await` expressions. They are\n  still not allowed in non-`async` functions, though.\n\n- **allowSuperOutsideMethod**: By default, `super` outside a method\n  raises an error. Set this to `true` to accept such code.\n\n- **allowHashBang**: When this is enabled, if the code starts with the\n  characters `#!` (as in a shellscript), the first line will be\n  treated as a comment. Defaults to true when `ecmaVersion` >= 2023.\n\n- **locations**: When `true`, each node has a `loc` object attached\n  with `start` and `end` subobjects, each of which contains the\n  one-based line and zero-based column numbers in `{line, column}`\n  form. Default is `false`.\n\n- **onToken**: If a function is passed for this option, each found\n  token will be passed in same format as tokens returned from\n  `tokenizer().getToken()`.\n\n  If array is passed, each found token is pushed to it.\n\n  Note that you are not allowed to call the parser from the\n  callback—that will corrupt its internal state.\n\n- **onComment**: If a function is passed for this option, whenever a\n  comment is encountered the function will be called with the\n  following parameters:\n\n  - `block`: `true` if the comment is a block comment, false if it\n    is a line comment.\n  - `text`: The content of the comment.\n  - `start`: Character offset of the start of the comment.\n  - `end`: Character offset of the end of the comment.\n\n  When the `locations` options is on, the `{line, column}` locations\n  of the comment’s start and end are passed as two additional\n  parameters.\n\n  If array is passed for this option, each found comment is pushed\n  to it as object in Esprima format:\n\n  ```javascript\n  {\n    \"type\": \"Line\" | \"Block\",\n    \"value\": \"comment text\",\n    \"start\": Number,\n    \"end\": Number,\n    // If `locations` option is on:\n    \"loc\": {\n      \"start\": {line: Number, column: Number}\n      \"end\": {line: Number, column: Number}\n    },\n    // If `ranges` option is on:\n    \"range\": [Number, Number]\n  }\n  ```\n\n  Note that you are not allowed to call the parser from the\n  callback—that will corrupt its internal state.\n\n- **ranges**: Nodes have their start and end characters offsets\n  recorded in `start` and `end` properties (directly on the node,\n  rather than the `loc` object, which holds line/column data. To also\n  add a\n  [semi-standardized](https://bugzilla.mozilla.org/show_bug.cgi?id=745678)\n  `range` property holding a `[start, end]` array with the same\n  numbers, set the `ranges` option to `true`.\n\n- **program**: It is possible to parse multiple files into a single\n  AST by passing the tree produced by parsing the first file as the\n  `program` option in subsequent parses. This will add the toplevel\n  forms of the parsed file to the \"Program\" (top) node of an existing\n  parse tree.\n\n- **sourceFile**: When the `locations` option is `true`, you can pass\n  this option to add a `source` attribute in every node’s `loc`\n  object. Note that the contents of this option are not examined or\n  processed in any way; you are free to use whatever format you\n  choose.\n\n- **directSourceFile**: Like `sourceFile`, but a `sourceFile` property\n  will be added (regardless of the `location` option) directly to the\n  nodes, rather than the `loc` object.\n\n- **preserveParens**: If this option is `true`, parenthesized expressions\n  are represented by (non-standard) `ParenthesizedExpression` nodes\n  that have a single `expression` property containing the expression\n  inside parentheses.\n\n**parseExpressionAt**`(input, offset, options)` will parse a single\nexpression in a string, and return its AST. It will not complain if\nthere is more of the string left after the expression.\n\n**tokenizer**`(input, options)` returns an object with a `getToken`\nmethod that can be called repeatedly to get the next token, a `{start,\nend, type, value}` object (with added `loc` property when the\n`locations` option is enabled and `range` property when the `ranges`\noption is enabled). When the token's type is `tokTypes.eof`, you\nshould stop calling the method, since it will keep returning that same\ntoken forever.\n\nIn ES6 environment, returned result can be used as any other\nprotocol-compliant iterable:\n\n```javascript\nfor (let token of acorn.tokenizer(str)) {\n  // iterate over the tokens\n}\n\n// transform code to array of tokens:\nvar tokens = [...acorn.tokenizer(str)];\n```\n\n**tokTypes** holds an object mapping names to the token type objects\nthat end up in the `type` properties of tokens.\n\n**getLineInfo**`(input, offset)` can be used to get a `{line,\ncolumn}` object for a given program string and offset.\n\n### The `Parser` class\n\nInstances of the **`Parser`** class contain all the state and logic\nthat drives a parse. It has static methods `parse`,\n`parseExpressionAt`, and `tokenizer` that match the top-level\nfunctions by the same name.\n\nWhen extending the parser with plugins, you need to call these methods\non the extended version of the class. To extend a parser with plugins,\nyou can use its static `extend` method.\n\n```javascript\nvar acorn = require(\"acorn\");\nvar jsx = require(\"acorn-jsx\");\nvar JSXParser = acorn.Parser.extend(jsx());\nJSXParser.parse(\"foo(<bar/>)\", {ecmaVersion: 2020});\n```\n\nThe `extend` method takes any number of plugin values, and returns a\nnew `Parser` class that includes the extra parser logic provided by\nthe plugins.\n\n## Command line interface\n\nThe `bin/acorn` utility can be used to parse a file from the command\nline. It accepts as arguments its input file and the following\noptions:\n\n- `--ecma3|--ecma5|--ecma6|--ecma7|--ecma8|--ecma9|--ecma10`: Sets the ECMAScript version\n  to parse. Default is version 9.\n\n- `--module`: Sets the parsing mode to `\"module\"`. Is set to `\"script\"` otherwise.\n\n- `--locations`: Attaches a \"loc\" object to each node with \"start\" and\n  \"end\" subobjects, each of which contains the one-based line and\n  zero-based column numbers in `{line, column}` form.\n\n- `--allow-hash-bang`: If the code starts with the characters #! (as\n  in a shellscript), the first line will be treated as a comment.\n\n- `--allow-await-outside-function`: Allows top-level `await` expressions.\n  See the `allowAwaitOutsideFunction` option for more information.\n\n- `--compact`: No whitespace is used in the AST output.\n\n- `--silent`: Do not output the AST, just return the exit status.\n\n- `--help`: Print the usage information and quit.\n\nThe utility spits out the syntax tree as JSON data.\n\n## Existing plugins\n\n - [`acorn-jsx`](https://github.com/RReverser/acorn-jsx): Parse [Facebook JSX syntax extensions](https://github.com/facebook/jsx)\n/LICENSE\u0004KMIT License\n\nCopyright (C) 2012-2022 by various contributors (see AUTHORS)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n/bin/acorn<#!/usr/bin/env node\n\"use strict\"\n\nrequire(\"../dist/bin.js\")\n/package.json\u0004\"{\n  \"name\": \"acorn\",\n  \"description\": \"ECMAScript parser\",\n  \"homepage\": \"https://github.com/acornjs/acorn\",\n  \"main\": \"dist/acorn.js\",\n  \"types\": \"dist/acorn.d.ts\",\n  \"module\": \"dist/acorn.mjs\",\n  \"exports\": {\n    \".\": [\n      {\n        \"import\": \"./dist/acorn.mjs\",\n        \"require\": \"./dist/acorn.js\",\n        \"default\": \"./dist/acorn.js\"\n      },\n      \"./dist/acorn.js\"\n    ],\n    \"./package.json\": \"./package.json\"\n  },\n  \"version\": \"8.8.2\",\n  \"engines\": {\n    \"node\": \">=0.4.0\"\n  },\n  \"maintainers\": [\n    {\n      \"name\": \"Marijn Haverbeke\",\n      \"email\": \"marijnh@gmail.com\",\n      \"web\": \"https://marijnhaverbeke.nl\"\n    },\n    {\n      \"name\": \"Ingvar Stepanyan\",\n      \"email\": \"me@rreverser.com\",\n      \"web\": \"https://rreverser.com/\"\n    },\n    {\n      \"name\": \"Adrian Heine\",\n      \"web\": \"http://adrianheine.de\"\n    }\n  ],\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/acornjs/acorn.git\"\n  },\n  \"license\": \"MIT\",\n  \"scripts\": {\n    \"prepare\": \"cd ..; npm run build:main\"\n  },\n  \"bin\": {\n    \"acorn\": \"./bin/acorn\"\n  }\n}\n/dist/acorn.d.ts\u0018Dexport as namespace acorn\nexport = acorn\n\ndeclare namespace acorn {\n  function parse(input: string, options: Options): Node\n\n  function parseExpressionAt(input: string, pos: number, options: Options): Node\n\n  function tokenizer(input: string, options: Options): {\n    getToken(): Token\n    [Symbol.iterator](): Iterator<Token>\n  }\n\n  type ecmaVersion = 3 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 2015 | 2016 | 2017 | 2018 | 2019 | 2020 | 2021 | 2022 | 2023 | 'latest'\n\n  interface Options {\n    ecmaVersion: ecmaVersion\n    sourceType?: 'script' | 'module'\n    onInsertedSemicolon?: (lastTokEnd: number, lastTokEndLoc?: Position) => void\n    onTrailingComma?: (lastTokEnd: number, lastTokEndLoc?: Position) => void\n    allowReserved?: boolean | 'never'\n    allowReturnOutsideFunction?: boolean\n    allowImportExportEverywhere?: boolean\n    allowAwaitOutsideFunction?: boolean\n    allowSuperOutsideMethod?: boolean\n    allowHashBang?: boolean\n    locations?: boolean\n    onToken?: ((token: Token) => any) | Token[]\n    onComment?: ((\n      isBlock: boolean, text: string, start: number, end: number, startLoc?: Position,\n      endLoc?: Position\n    ) => void) | Comment[]\n    ranges?: boolean\n    program?: Node\n    sourceFile?: string\n    directSourceFile?: string\n    preserveParens?: boolean\n  }\n\n  class Parser {\n    // state.js\n    lineStart: number;\n    options: Options;\n    curLine: number;\n    start: number;\n    end: number;\n    input: string;\n    type: TokenType;\n\n    // state.js\n    constructor(options: Options, input: string, startPos?: number)\n    parse(this: Parser): Node\n\n    // tokenize.js\n    next(): void;\n    nextToken(): void;\n\n    // statement.js\n    parseTopLevel(node: Node): Node;\n\n    // node.js\n    finishNode(node: Node, type: string): Node;\n    finishNodeAt(node: Node, type: string, pos: number, loc: Position): Node;\n\n    // location.js\n    raise(pos: number, message: string) : void;\n    raiseRecoverable?(pos: number, message: string) : void;\n\n    // parseutils.js\n    unexpected(pos: number) : void;\n\n    // index.js\n    static acorn: typeof acorn;\n\n    // state.js\n    static parse(this: typeof Parser, input: string, options: Options): Node\n    static parseExpressionAt(this: typeof Parser, input: string, pos: number, options: Options): Node\n    static tokenizer(this: typeof Parser, input: string, options: Options): {\n      getToken(): Token\n      [Symbol.iterator](): Iterator<Token>\n    }\n    static extend(this: typeof Parser, ...plugins: ((BaseParser: typeof Parser) => typeof Parser)[]): typeof Parser\n  }\n\n  interface Position { line: number; column: number; offset: number }\n\n  const defaultOptions: Options\n\n  function getLineInfo(input: string, offset: number): Position\n\n  class SourceLocation {\n    start: Position\n    end: Position\n    source?: string | null\n    constructor(p: Parser, start: Position, end: Position)\n  }\n\n  class Node {\n    type: string\n    start: number\n    end: number\n    loc?: SourceLocation\n    sourceFile?: string\n    range?: [number, number]\n    constructor(parser: Parser, pos: number, loc?: SourceLocation)\n  }\n\n  class TokenType {\n    label: string\n    keyword: string\n    beforeExpr: boolean\n    startsExpr: boolean\n    isLoop: boolean\n    isAssign: boolean\n    prefix: boolean\n    postfix: boolean\n    binop: number\n    updateContext?: (prevType: TokenType) => void\n    constructor(label: string, conf?: any)\n  }\n\n  const tokTypes: {\n    num: TokenType\n    regexp: TokenType\n    string: TokenType\n    name: TokenType\n    privateId: TokenType\n    eof: TokenType\n    bracketL: TokenType\n    bracketR: TokenType\n    braceL: TokenType\n    braceR: TokenType\n    parenL: TokenType\n    parenR: TokenType\n    comma: TokenType\n    semi: TokenType\n    colon: TokenType\n    dot: TokenType\n    question: TokenType\n    questionDot: TokenType\n    arrow: TokenType\n    template: TokenType\n    invalidTemplate: TokenType\n    ellipsis: TokenType\n    backQuote: TokenType\n    dollarBraceL: TokenType\n    eq: TokenType\n    assign: TokenType\n    incDec: TokenType\n    prefix: TokenType\n    logicalOR: TokenType\n    logicalAND: TokenType\n    bitwiseOR: TokenType\n    bitwiseXOR: TokenType\n    bitwiseAND: TokenType\n    equality: TokenType\n    relational: TokenType\n    bitShift: TokenType\n    plusMin: TokenType\n    modulo: TokenType\n    star: TokenType\n    slash: TokenType\n    starstar: TokenType\n    coalesce: TokenType\n    _break: TokenType\n    _case: TokenType\n    _catch: TokenType\n    _continue: TokenType\n    _debugger: TokenType\n    _default: TokenType\n    _do: TokenType\n    _else: TokenType\n    _finally: TokenType\n    _for: TokenType\n    _function: TokenType\n    _if: TokenType\n    _return: TokenType\n    _switch: TokenType\n    _throw: TokenType\n    _try: TokenType\n    _var: TokenType\n    _const: TokenType\n    _while: TokenType\n    _with: TokenType\n    _new: TokenType\n    _this: TokenType\n    _super: TokenType\n    _class: TokenType\n    _extends: TokenType\n    _export: TokenType\n    _import: TokenType\n    _null: TokenType\n    _true: TokenType\n    _false: TokenType\n    _in: TokenType\n    _instanceof: TokenType\n    _typeof: TokenType\n    _void: TokenType\n    _delete: TokenType\n  }\n\n  class TokContext {\n    constructor(token: string, isExpr: boolean, preserveSpace: boolean, override?: (p: Parser) => void)\n  }\n\n  const tokContexts: {\n    b_stat: TokContext\n    b_expr: TokContext\n    b_tmpl: TokContext\n    p_stat: TokContext\n    p_expr: TokContext\n    q_tmpl: TokContext\n    f_expr: TokContext\n    f_stat: TokContext\n    f_expr_gen: TokContext\n    f_gen: TokContext\n  }\n\n  function isIdentifierStart(code: number, astral?: boolean): boolean\n\n  function isIdentifierChar(code: number, astral?: boolean): boolean\n\n  interface AbstractToken {\n  }\n\n  interface Comment extends AbstractToken {\n    type: 'Line' | 'Block'\n    value: string\n    start: number\n    end: number\n    loc?: SourceLocation\n    range?: [number, number]\n  }\n\n  class Token {\n    type: TokenType\n    value: any\n    start: number\n    end: number\n    loc?: SourceLocation\n    range?: [number, number]\n    constructor(p: Parser)\n  }\n\n  function isNewLine(code: number): boolean\n\n  const lineBreak: RegExp\n\n  const lineBreakG: RegExp\n\n  const version: string\n}\n/dist/acorn.mjs.d.ts1import * as acorn from \"./acorn\";\nexport = acorn;/dist/acorn.mjs\u0000\u0003*?// This file was generated. Do not modify manually!\nvar astralIdentifierCodes = [509, 0, 227, 0, 150, 4, 294, 9, 1368, 2, 2, 1, 6, 3, 41, 2, 5, 0, 166, 1, 574, 3, 9, 9, 370, 1, 81, 2, 71, 10, 50, 3, 123, 2, 54, 14, 32, 10, 3, 1, 11, 3, 46, 10, 8, 0, 46, 9, 7, 2, 37, 13, 2, 9, 6, 1, 45, 0, 13, 2, 49, 13, 9, 3, 2, 11, 83, 11, 7, 0, 3, 0, 158, 11, 6, 9, 7, 3, 56, 1, 2, 6, 3, 1, 3, 2, 10, 0, 11, 1, 3, 6, 4, 4, 193, 17, 10, 9, 5, 0, 82, 19, 13, 9, 214, 6, 3, 8, 28, 1, 83, 16, 16, 9, 82, 12, 9, 9, 84, 14, 5, 9, 243, 14, 166, 9, 71, 5, 2, 1, 3, 3, 2, 0, 2, 1, 13, 9, 120, 6, 3, 6, 4, 0, 29, 9, 41, 6, 2, 3, 9, 0, 10, 10, 47, 15, 406, 7, 2, 7, 17, 9, 57, 21, 2, 13, 123, 5, 4, 0, 2, 1, 2, 6, 2, 0, 9, 9, 49, 4, 2, 1, 2, 4, 9, 9, 330, 3, 10, 1, 2, 0, 49, 6, 4, 4, 14, 9, 5351, 0, 7, 14, 13835, 9, 87, 9, 39, 4, 60, 6, 26, 9, 1014, 0, 2, 54, 8, 3, 82, 0, 12, 1, 19628, 1, 4706, 45, 3, 22, 543, 4, 4, 5, 9, 7, 3, 6, 31, 3, 149, 2, 1418, 49, 513, 54, 5, 49, 9, 0, 15, 0, 23, 4, 2, 14, 1361, 6, 2, 16, 3, 6, 2, 1, 2, 4, 101, 0, 161, 6, 10, 9, 357, 0, 62, 13, 499, 13, 983, 6, 110, 6, 6, 9, 4759, 9, 787719, 239];\n\n// This file was generated. Do not modify manually!\nvar astralIdentifierStartCodes = [0, 11, 2, 25, 2, 18, 2, 1, 2, 14, 3, 13, 35, 122, 70, 52, 268, 28, 4, 48, 48, 31, 14, 29, 6, 37, 11, 29, 3, 35, 5, 7, 2, 4, 43, 157, 19, 35, 5, 35, 5, 39, 9, 51, 13, 10, 2, 14, 2, 6, 2, 1, 2, 10, 2, 14, 2, 6, 2, 1, 68, 310, 10, 21, 11, 7, 25, 5, 2, 41, 2, 8, 70, 5, 3, 0, 2, 43, 2, 1, 4, 0, 3, 22, 11, 22, 10, 30, 66, 18, 2, 1, 11, 21, 11, 25, 71, 55, 7, 1, 65, 0, 16, 3, 2, 2, 2, 28, 43, 28, 4, 28, 36, 7, 2, 27, 28, 53, 11, 21, 11, 18, 14, 17, 111, 72, 56, 50, 14, 50, 14, 35, 349, 41, 7, 1, 79, 28, 11, 0, 9, 21, 43, 17, 47, 20, 28, 22, 13, 52, 58, 1, 3, 0, 14, 44, 33, 24, 27, 35, 30, 0, 3, 0, 9, 34, 4, 0, 13, 47, 15, 3, 22, 0, 2, 0, 36, 17, 2, 24, 20, 1, 64, 6, 2, 0, 2, 3, 2, 14, 2, 9, 8, 46, 39, 7, 3, 1, 3, 21, 2, 6, 2, 1, 2, 4, 4, 0, 19, 0, 13, 4, 159, 52, 19, 3, 21, 2, 31, 47, 21, 1, 2, 0, 185, 46, 42, 3, 37, 47, 21, 0, 60, 42, 14, 0, 72, 26, 38, 6, 186, 43, 117, 63, 32, 7, 3, 0, 3, 7, 2, 1, 2, 23, 16, 0, 2, 0, 95, 7, 3, 38, 17, 0, 2, 0, 29, 0, 11, 39, 8, 0, 22, 0, 12, 45, 20, 0, 19, 72, 264, 8, 2, 36, 18, 0, 50, 29, 113, 6, 2, 1, 2, 37, 22, 0, 26, 5, 2, 1, 2, 31, 15, 0, 328, 18, 16, 0, 2, 12, 2, 33, 125, 0, 80, 921, 103, 110, 18, 195, 2637, 96, 16, 1071, 18, 5, 4026, 582, 8634, 568, 8, 30, 18, 78, 18, 29, 19, 47, 17, 3, 32, 20, 6, 18, 689, 63, 129, 74, 6, 0, 67, 12, 65, 1, 2, 0, 29, 6135, 9, 1237, 43, 8, 8936, 3, 2, 6, 2, 1, 2, 290, 16, 0, 30, 2, 3, 0, 15, 3, 9, 395, 2309, 106, 6, 12, 4, 8, 8, 9, 5991, 84, 2, 70, 2, 1, 3, 0, 3, 1, 3, 3, 2, 11, 2, 0, 2, 6, 2, 64, 2, 3, 3, 7, 2, 6, 2, 27, 2, 3, 2, 4, 2, 0, 4, 6, 2, 339, 3, 24, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 7, 1845, 30, 7, 5, 262, 61, 147, 44, 11, 6, 17, 0, 322, 29, 19, 43, 485, 27, 757, 6, 2, 3, 2, 1, 2, 14, 2, 196, 60, 67, 8, 0, 1205, 3, 2, 26, 2, 1, 2, 0, 3, 0, 2, 9, 2, 3, 2, 0, 2, 0, 7, 0, 5, 0, 2, 0, 2, 0, 2, 2, 2, 1, 2, 0, 3, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 1, 2, 0, 3, 3, 2, 6, 2, 3, 2, 3, 2, 0, 2, 9, 2, 16, 6, 2, 2, 4, 2, 16, 4421, 42719, 33, 4153, 7, 221, 3, 5761, 15, 7472, 3104, 541, 1507, 4938, 6, 4191];\n\n// This file was generated. Do not modify manually!\nvar nonASCIIidentifierChars = \"\\u200c\\u200d\\xb7\\u0300-\\u036f\\u0387\\u0483-\\u0487\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u064b-\\u0669\\u0670\\u06d6-\\u06dc\\u06df-\\u06e4\\u06e7\\u06e8\\u06ea-\\u06ed\\u06f0-\\u06f9\\u0711\\u0730-\\u074a\\u07a6-\\u07b0\\u07c0-\\u07c9\\u07eb-\\u07f3\\u07fd\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0859-\\u085b\\u0898-\\u089f\\u08ca-\\u08e1\\u08e3-\\u0903\\u093a-\\u093c\\u093e-\\u094f\\u0951-\\u0957\\u0962\\u0963\\u0966-\\u096f\\u0981-\\u0983\\u09bc\\u09be-\\u09c4\\u09c7\\u09c8\\u09cb-\\u09cd\\u09d7\\u09e2\\u09e3\\u09e6-\\u09ef\\u09fe\\u0a01-\\u0a03\\u0a3c\\u0a3e-\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a66-\\u0a71\\u0a75\\u0a81-\\u0a83\\u0abc\\u0abe-\\u0ac5\\u0ac7-\\u0ac9\\u0acb-\\u0acd\\u0ae2\\u0ae3\\u0ae6-\\u0aef\\u0afa-\\u0aff\\u0b01-\\u0b03\\u0b3c\\u0b3e-\\u0b44\\u0b47\\u0b48\\u0b4b-\\u0b4d\\u0b55-\\u0b57\\u0b62\\u0b63\\u0b66-\\u0b6f\\u0b82\\u0bbe-\\u0bc2\\u0bc6-\\u0bc8\\u0bca-\\u0bcd\\u0bd7\\u0be6-\\u0bef\\u0c00-\\u0c04\\u0c3c\\u0c3e-\\u0c44\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62\\u0c63\\u0c66-\\u0c6f\\u0c81-\\u0c83\\u0cbc\\u0cbe-\\u0cc4\\u0cc6-\\u0cc8\\u0cca-\\u0ccd\\u0cd5\\u0cd6\\u0ce2\\u0ce3\\u0ce6-\\u0cef\\u0cf3\\u0d00-\\u0d03\\u0d3b\\u0d3c\\u0d3e-\\u0d44\\u0d46-\\u0d48\\u0d4a-\\u0d4d\\u0d57\\u0d62\\u0d63\\u0d66-\\u0d6f\\u0d81-\\u0d83\\u0dca\\u0dcf-\\u0dd4\\u0dd6\\u0dd8-\\u0ddf\\u0de6-\\u0def\\u0df2\\u0df3\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0e50-\\u0e59\\u0eb1\\u0eb4-\\u0ebc\\u0ec8-\\u0ece\\u0ed0-\\u0ed9\\u0f18\\u0f19\\u0f20-\\u0f29\\u0f35\\u0f37\\u0f39\\u0f3e\\u0f3f\\u0f71-\\u0f84\\u0f86\\u0f87\\u0f8d-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u102b-\\u103e\\u1040-\\u1049\\u1056-\\u1059\\u105e-\\u1060\\u1062-\\u1064\\u1067-\\u106d\\u1071-\\u1074\\u1082-\\u108d\\u108f-\\u109d\\u135d-\\u135f\\u1369-\\u1371\\u1712-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b4-\\u17d3\\u17dd\\u17e0-\\u17e9\\u180b-\\u180d\\u180f-\\u1819\\u18a9\\u1920-\\u192b\\u1930-\\u193b\\u1946-\\u194f\\u19d0-\\u19da\\u1a17-\\u1a1b\\u1a55-\\u1a5e\\u1a60-\\u1a7c\\u1a7f-\\u1a89\\u1a90-\\u1a99\\u1ab0-\\u1abd\\u1abf-\\u1ace\\u1b00-\\u1b04\\u1b34-\\u1b44\\u1b50-\\u1b59\\u1b6b-\\u1b73\\u1b80-\\u1b82\\u1ba1-\\u1bad\\u1bb0-\\u1bb9\\u1be6-\\u1bf3\\u1c24-\\u1c37\\u1c40-\\u1c49\\u1c50-\\u1c59\\u1cd0-\\u1cd2\\u1cd4-\\u1ce8\\u1ced\\u1cf4\\u1cf7-\\u1cf9\\u1dc0-\\u1dff\\u203f\\u2040\\u2054\\u20d0-\\u20dc\\u20e1\\u20e5-\\u20f0\\u2cef-\\u2cf1\\u2d7f\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\ua620-\\ua629\\ua66f\\ua674-\\ua67d\\ua69e\\ua69f\\ua6f0\\ua6f1\\ua802\\ua806\\ua80b\\ua823-\\ua827\\ua82c\\ua880\\ua881\\ua8b4-\\ua8c5\\ua8d0-\\ua8d9\\ua8e0-\\ua8f1\\ua8ff-\\ua909\\ua926-\\ua92d\\ua947-\\ua953\\ua980-\\ua983\\ua9b3-\\ua9c0\\ua9d0-\\ua9d9\\ua9e5\\ua9f0-\\ua9f9\\uaa29-\\uaa36\\uaa43\\uaa4c\\uaa4d\\uaa50-\\uaa59\\uaa7b-\\uaa7d\\uaab0\\uaab2-\\uaab4\\uaab7\\uaab8\\uaabe\\uaabf\\uaac1\\uaaeb-\\uaaef\\uaaf5\\uaaf6\\uabe3-\\uabea\\uabec\\uabed\\uabf0-\\uabf9\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe2f\\ufe33\\ufe34\\ufe4d-\\ufe4f\\uff10-\\uff19\\uff3f\";\n\n// This file was generated. Do not modify manually!\nvar nonASCIIidentifierStartChars = \"\\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\\u0560-\\u0588\\u05d0-\\u05ea\\u05ef-\\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\\u0860-\\u086a\\u0870-\\u0887\\u0889-\\u088e\\u08a0-\\u08c9\\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\\u09fc\\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\\u0c5d\\u0c60\\u0c61\\u0c80\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd\\u0cdd\\u0cde\\u0ce0\\u0ce1\\u0cf1\\u0cf2\\u0d04-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d\\u0d4e\\u0d54-\\u0d56\\u0d5f-\\u0d61\\u0d7a-\\u0d7f\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0e01-\\u0e30\\u0e32\\u0e33\\u0e40-\\u0e46\\u0e81\\u0e82\\u0e84\\u0e86-\\u0e8a\\u0e8c-\\u0ea3\\u0ea5\\u0ea7-\\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-\\u1711\\u171f-\\u1731\\u1740-\\u1751\\u1760-\\u176c\\u176e-\\u1770\\u1780-\\u17b3\\u17d7\\u17dc\\u1820-\\u1878\\u1880-\\u18a8\\u18aa\\u18b0-\\u18f5\\u1900-\\u191e\\u1950-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19b0-\\u19c9\\u1a00-\\u1a16\\u1a20-\\u1a54\\u1aa7\\u1b05-\\u1b33\\u1b45-\\u1b4c\\u1b83-\\u1ba0\\u1bae\\u1baf\\u1bba-\\u1be5\\u1c00-\\u1c23\\u1c4d-\\u1c4f\\u1c5a-\\u1c7d\\u1c80-\\u1c88\\u1c90-\\u1cba\\u1cbd-\\u1cbf\\u1ce9-\\u1cec\\u1cee-\\u1cf3\\u1cf5\\u1cf6\\u1cfa\\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-\\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-\\u312f\\u3131-\\u318e\\u31a0-\\u31bf\\u31f0-\\u31ff\\u3400-\\u4dbf\\u4e00-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a\\ua62b\\ua640-\\ua66e\\ua67f-\\ua69d\\ua6a0-\\ua6ef\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua7ca\\ua7d0\\ua7d1\\ua7d3\\ua7d5-\\ua7d9\\ua7f2-\\ua801\\ua803-\\ua805\\ua807-\\ua80a\\ua80c-\\ua822\\ua840-\\ua873\\ua882-\\ua8b3\\ua8f2-\\ua8f7\\ua8fb\\ua8fd\\ua8fe\\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-\\uab69\\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\";\n\n// These are a run-length and offset encoded representation of the\n\n// Reserved word lists for various dialects of the language\n\nvar reservedWords = {\n  3: \"abstract boolean byte char class double enum export extends final float goto implements import int interface long native package private protected public short static super synchronized throws transient volatile\",\n  5: \"class enum extends super const export import\",\n  6: \"enum\",\n  strict: \"implements interface let package private protected public static yield\",\n  strictBind: \"eval arguments\"\n};\n\n// And the keywords\n\nvar ecma5AndLessKeywords = \"break case catch continue debugger default do else finally for function if return switch throw try var while with null true false instanceof typeof void delete new in this\";\n\nvar keywords$1 = {\n  5: ecma5AndLessKeywords,\n  \"5module\": ecma5AndLessKeywords + \" export import\",\n  6: ecma5AndLessKeywords + \" const class extends export import super\"\n};\n\nvar keywordRelationalOperator = /^in(stanceof)?$/;\n\n// ## Character categories\n\nvar nonASCIIidentifierStart = new RegExp(\"[\" + nonASCIIidentifierStartChars + \"]\");\nvar nonASCIIidentifier = new RegExp(\"[\" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + \"]\");\n\n// This has a complexity linear to the value of the code. The\n// assumption is that looking up astral identifier characters is\n// rare.\nfunction isInAstralSet(code, set) {\n  var pos = 0x10000;\n  for (var i = 0; i < set.length; i += 2) {\n    pos += set[i];\n    if (pos > code) { return false }\n    pos += set[i + 1];\n    if (pos >= code) { return true }\n  }\n  return false\n}\n\n// Test whether a given character code starts an identifier.\n\nfunction isIdentifierStart(code, astral) {\n  if (code < 65) { return code === 36 }\n  if (code < 91) { return true }\n  if (code < 97) { return code === 95 }\n  if (code < 123) { return true }\n  if (code <= 0xffff) { return code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code)) }\n  if (astral === false) { return false }\n  return isInAstralSet(code, astralIdentifierStartCodes)\n}\n\n// Test whether a given character is part of an identifier.\n\nfunction isIdentifierChar(code, astral) {\n  if (code < 48) { return code === 36 }\n  if (code < 58) { return true }\n  if (code < 65) { return false }\n  if (code < 91) { return true }\n  if (code < 97) { return code === 95 }\n  if (code < 123) { return true }\n  if (code <= 0xffff) { return code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code)) }\n  if (astral === false) { return false }\n  return isInAstralSet(code, astralIdentifierStartCodes) || isInAstralSet(code, astralIdentifierCodes)\n}\n\n// ## Token types\n\n// The assignment of fine-grained, information-carrying type objects\n// allows the tokenizer to store the information it has about a\n// token in a way that is very cheap for the parser to look up.\n\n// All token type variables start with an underscore, to make them\n// easy to recognize.\n\n// The `beforeExpr` property is used to disambiguate between regular\n// expressions and divisions. It is set on all token types that can\n// be followed by an expression (thus, a slash after them would be a\n// regular expression).\n//\n// The `startsExpr` property is used to check if the token ends a\n// `yield` expression. It is set on all token types that either can\n// directly start an expression (like a quotation mark) or can\n// continue an expression (like the body of a string).\n//\n// `isLoop` marks a keyword as starting a loop, which is important\n// to know when parsing a label, in order to allow or disallow\n// continue jumps to that label.\n\nvar TokenType = function TokenType(label, conf) {\n  if ( conf === void 0 ) conf = {};\n\n  this.label = label;\n  this.keyword = conf.keyword;\n  this.beforeExpr = !!conf.beforeExpr;\n  this.startsExpr = !!conf.startsExpr;\n  this.isLoop = !!conf.isLoop;\n  this.isAssign = !!conf.isAssign;\n  this.prefix = !!conf.prefix;\n  this.postfix = !!conf.postfix;\n  this.binop = conf.binop || null;\n  this.updateContext = null;\n};\n\nfunction binop(name, prec) {\n  return new TokenType(name, {beforeExpr: true, binop: prec})\n}\nvar beforeExpr = {beforeExpr: true}, startsExpr = {startsExpr: true};\n\n// Map keyword names to token types.\n\nvar keywords = {};\n\n// Succinct definitions of keyword token types\nfunction kw(name, options) {\n  if ( options === void 0 ) options = {};\n\n  options.keyword = name;\n  return keywords[name] = new TokenType(name, options)\n}\n\nvar types$1 = {\n  num: new TokenType(\"num\", startsExpr),\n  regexp: new TokenType(\"regexp\", startsExpr),\n  string: new TokenType(\"string\", startsExpr),\n  name: new TokenType(\"name\", startsExpr),\n  privateId: new TokenType(\"privateId\", startsExpr),\n  eof: new TokenType(\"eof\"),\n\n  // Punctuation token types.\n  bracketL: new TokenType(\"[\", {beforeExpr: true, startsExpr: true}),\n  bracketR: new TokenType(\"]\"),\n  braceL: new TokenType(\"{\", {beforeExpr: true, startsExpr: true}),\n  braceR: new TokenType(\"}\"),\n  parenL: new TokenType(\"(\", {beforeExpr: true, startsExpr: true}),\n  parenR: new TokenType(\")\"),\n  comma: new TokenType(\",\", beforeExpr),\n  semi: new TokenType(\";\", beforeExpr),\n  colon: new TokenType(\":\", beforeExpr),\n  dot: new TokenType(\".\"),\n  question: new TokenType(\"?\", beforeExpr),\n  questionDot: new TokenType(\"?.\"),\n  arrow: new TokenType(\"=>\", beforeExpr),\n  template: new TokenType(\"template\"),\n  invalidTemplate: new TokenType(\"invalidTemplate\"),\n  ellipsis: new TokenType(\"...\", beforeExpr),\n  backQuote: new TokenType(\"`\", startsExpr),\n  dollarBraceL: new TokenType(\"${\", {beforeExpr: true, startsExpr: true}),\n\n  // Operators. These carry several kinds of properties to help the\n  // parser use them properly (the presence of these properties is\n  // what categorizes them as operators).\n  //\n  // `binop`, when present, specifies that this operator is a binary\n  // operator, and will refer to its precedence.\n  //\n  // `prefix` and `postfix` mark the operator as a prefix or postfix\n  // unary operator.\n  //\n  // `isAssign` marks all of `=`, `+=`, `-=` etcetera, which act as\n  // binary operators with a very low precedence, that should result\n  // in AssignmentExpression nodes.\n\n  eq: new TokenType(\"=\", {beforeExpr: true, isAssign: true}),\n  assign: new TokenType(\"_=\", {beforeExpr: true, isAssign: true}),\n  incDec: new TokenType(\"++/--\", {prefix: true, postfix: true, startsExpr: true}),\n  prefix: new TokenType(\"!/~\", {beforeExpr: true, prefix: true, startsExpr: true}),\n  logicalOR: binop(\"||\", 1),\n  logicalAND: binop(\"&&\", 2),\n  bitwiseOR: binop(\"|\", 3),\n  bitwiseXOR: binop(\"^\", 4),\n  bitwiseAND: binop(\"&\", 5),\n  equality: binop(\"==/!=/===/!==\", 6),\n  relational: binop(\"</>/<=/>=\", 7),\n  bitShift: binop(\"<</>>/>>>\", 8),\n  plusMin: new TokenType(\"+/-\", {beforeExpr: true, binop: 9, prefix: true, startsExpr: true}),\n  modulo: binop(\"%\", 10),\n  star: binop(\"*\", 10),\n  slash: binop(\"/\", 10),\n  starstar: new TokenType(\"**\", {beforeExpr: true}),\n  coalesce: binop(\"??\", 1),\n\n  // Keyword token types.\n  _break: kw(\"break\"),\n  _case: kw(\"case\", beforeExpr),\n  _catch: kw(\"catch\"),\n  _continue: kw(\"continue\"),\n  _debugger: kw(\"debugger\"),\n  _default: kw(\"default\", beforeExpr),\n  _do: kw(\"do\", {isLoop: true, beforeExpr: true}),\n  _else: kw(\"else\", beforeExpr),\n  _finally: kw(\"finally\"),\n  _for: kw(\"for\", {isLoop: true}),\n  _function: kw(\"function\", startsExpr),\n  _if: kw(\"if\"),\n  _return: kw(\"return\", beforeExpr),\n  _switch: kw(\"switch\"),\n  _throw: kw(\"throw\", beforeExpr),\n  _try: kw(\"try\"),\n  _var: kw(\"var\"),\n  _const: kw(\"const\"),\n  _while: kw(\"while\", {isLoop: true}),\n  _with: kw(\"with\"),\n  _new: kw(\"new\", {beforeExpr: true, startsExpr: true}),\n  _this: kw(\"this\", startsExpr),\n  _super: kw(\"super\", startsExpr),\n  _class: kw(\"class\", startsExpr),\n  _extends: kw(\"extends\", beforeExpr),\n  _export: kw(\"export\"),\n  _import: kw(\"import\", startsExpr),\n  _null: kw(\"null\", startsExpr),\n  _true: kw(\"true\", startsExpr),\n  _false: kw(\"false\", startsExpr),\n  _in: kw(\"in\", {beforeExpr: true, binop: 7}),\n  _instanceof: kw(\"instanceof\", {beforeExpr: true, binop: 7}),\n  _typeof: kw(\"typeof\", {beforeExpr: true, prefix: true, startsExpr: true}),\n  _void: kw(\"void\", {beforeExpr: true, prefix: true, startsExpr: true}),\n  _delete: kw(\"delete\", {beforeExpr: true, prefix: true, startsExpr: true})\n};\n\n// Matches a whole line break (where CRLF is considered a single\n// line break). Used to count lines.\n\nvar lineBreak = /\\r\\n?|\\n|\\u2028|\\u2029/;\nvar lineBreakG = new RegExp(lineBreak.source, \"g\");\n\nfunction isNewLine(code) {\n  return code === 10 || code === 13 || code === 0x2028 || code === 0x2029\n}\n\nfunction nextLineBreak(code, from, end) {\n  if ( end === void 0 ) end = code.length;\n\n  for (var i = from; i < end; i++) {\n    var next = code.charCodeAt(i);\n    if (isNewLine(next))\n      { return i < end - 1 && next === 13 && code.charCodeAt(i + 1) === 10 ? i + 2 : i + 1 }\n  }\n  return -1\n}\n\nvar nonASCIIwhitespace = /[\\u1680\\u2000-\\u200a\\u202f\\u205f\\u3000\\ufeff]/;\n\nvar skipWhiteSpace = /(?:\\s|\\/\\/.*|\\/\\*[^]*?\\*\\/)*/g;\n\nvar ref = Object.prototype;\nvar hasOwnProperty = ref.hasOwnProperty;\nvar toString = ref.toString;\n\nvar hasOwn = Object.hasOwn || (function (obj, propName) { return (\n  hasOwnProperty.call(obj, propName)\n); });\n\nvar isArray = Array.isArray || (function (obj) { return (\n  toString.call(obj) === \"[object Array]\"\n); });\n\nfunction wordsRegexp(words) {\n  return new RegExp(\"^(?:\" + words.replace(/ /g, \"|\") + \")$\")\n}\n\nfunction codePointToString(code) {\n  // UTF-16 Decoding\n  if (code <= 0xFFFF) { return String.fromCharCode(code) }\n  code -= 0x10000;\n  return String.fromCharCode((code >> 10) + 0xD800, (code & 1023) + 0xDC00)\n}\n\nvar loneSurrogate = /(?:[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])/;\n\n// These are used when `options.locations` is on, for the\n// `startLoc` and `endLoc` properties.\n\nvar Position = function Position(line, col) {\n  this.line = line;\n  this.column = col;\n};\n\nPosition.prototype.offset = function offset (n) {\n  return new Position(this.line, this.column + n)\n};\n\nvar SourceLocation = function SourceLocation(p, start, end) {\n  this.start = start;\n  this.end = end;\n  if (p.sourceFile !== null) { this.source = p.sourceFile; }\n};\n\n// The `getLineInfo` function is mostly useful when the\n// `locations` option is off (for performance reasons) and you\n// want to find the line/column position for a given character\n// offset. `input` should be the code string that the offset refers\n// into.\n\nfunction getLineInfo(input, offset) {\n  for (var line = 1, cur = 0;;) {\n    var nextBreak = nextLineBreak(input, cur, offset);\n    if (nextBreak < 0) { return new Position(line, offset - cur) }\n    ++line;\n    cur = nextBreak;\n  }\n}\n\n// A second argument must be given to configure the parser process.\n// These options are recognized (only `ecmaVersion` is required):\n\nvar defaultOptions = {\n  // `ecmaVersion` indicates the ECMAScript version to parse. Must be\n  // either 3, 5, 6 (or 2015), 7 (2016), 8 (2017), 9 (2018), 10\n  // (2019), 11 (2020), 12 (2021), 13 (2022), 14 (2023), or `\"latest\"`\n  // (the latest version the library supports). This influences\n  // support for strict mode, the set of reserved words, and support\n  // for new syntax features.\n  ecmaVersion: null,\n  // `sourceType` indicates the mode the code should be parsed in.\n  // Can be either `\"script\"` or `\"module\"`. This influences global\n  // strict mode and parsing of `import` and `export` declarations.\n  sourceType: \"script\",\n  // `onInsertedSemicolon` can be a callback that will be called\n  // when a semicolon is automatically inserted. It will be passed\n  // the position of the comma as an offset, and if `locations` is\n  // enabled, it is given the location as a `{line, column}` object\n  // as second argument.\n  onInsertedSemicolon: null,\n  // `onTrailingComma` is similar to `onInsertedSemicolon`, but for\n  // trailing commas.\n  onTrailingComma: null,\n  // By default, reserved words are only enforced if ecmaVersion >= 5.\n  // Set `allowReserved` to a boolean value to explicitly turn this on\n  // an off. When this option has the value \"never\", reserved words\n  // and keywords can also not be used as property names.\n  allowReserved: null,\n  // When enabled, a return at the top level is not considered an\n  // error.\n  allowReturnOutsideFunction: false,\n  // When enabled, import/export statements are not constrained to\n  // appearing at the top of the program, and an import.meta expression\n  // in a script isn't considered an error.\n  allowImportExportEverywhere: false,\n  // By default, await identifiers are allowed to appear at the top-level scope only if ecmaVersion >= 2022.\n  // When enabled, await identifiers are allowed to appear at the top-level scope,\n  // but they are still not allowed in non-async functions.\n  allowAwaitOutsideFunction: null,\n  // When enabled, super identifiers are not constrained to\n  // appearing in methods and do not raise an error when they appear elsewhere.\n  allowSuperOutsideMethod: null,\n  // When enabled, hashbang directive in the beginning of file is\n  // allowed and treated as a line comment. Enabled by default when\n  // `ecmaVersion` >= 2023.\n  allowHashBang: false,\n  // When `locations` is on, `loc` properties holding objects with\n  // `start` and `end` properties in `{line, column}` form (with\n  // line being 1-based and column 0-based) will be attached to the\n  // nodes.\n  locations: false,\n  // A function can be passed as `onToken` option, which will\n  // cause Acorn to call that function with object in the same\n  // format as tokens returned from `tokenizer().getToken()`. Note\n  // that you are not allowed to call the parser from the\n  // callback—that will corrupt its internal state.\n  onToken: null,\n  // A function can be passed as `onComment` option, which will\n  // cause Acorn to call that function with `(block, text, start,\n  // end)` parameters whenever a comment is skipped. `block` is a\n  // boolean indicating whether this is a block (`/* */`) comment,\n  // `text` is the content of the comment, and `start` and `end` are\n  // character offsets that denote the start and end of the comment.\n  // When the `locations` option is on, two more parameters are\n  // passed, the full `{line, column}` locations of the start and\n  // end of the comments. Note that you are not allowed to call the\n  // parser from the callback—that will corrupt its internal state.\n  onComment: null,\n  // Nodes have their start and end characters offsets recorded in\n  // `start` and `end` properties (directly on the node, rather than\n  // the `loc` object, which holds line/column data. To also add a\n  // [semi-standardized][range] `range` property holding a `[start,\n  // end]` array with the same numbers, set the `ranges` option to\n  // `true`.\n  //\n  // [range]: https://bugzilla.mozilla.org/show_bug.cgi?id=745678\n  ranges: false,\n  // It is possible to parse multiple files into a single AST by\n  // passing the tree produced by parsing the first file as\n  // `program` option in subsequent parses. This will add the\n  // toplevel forms of the parsed file to the `Program` (top) node\n  // of an existing parse tree.\n  program: null,\n  // When `locations` is on, you can pass this to record the source\n  // file in every node's `loc` object.\n  sourceFile: null,\n  // This value, if given, is stored in every node, whether\n  // `locations` is on or off.\n  directSourceFile: null,\n  // When enabled, parenthesized expressions are represented by\n  // (non-standard) ParenthesizedExpression nodes\n  preserveParens: false\n};\n\n// Interpret and default an options object\n\nvar warnedAboutEcmaVersion = false;\n\nfunction getOptions(opts) {\n  var options = {};\n\n  for (var opt in defaultOptions)\n    { options[opt] = opts && hasOwn(opts, opt) ? opts[opt] : defaultOptions[opt]; }\n\n  if (options.ecmaVersion === \"latest\") {\n    options.ecmaVersion = 1e8;\n  } else if (options.ecmaVersion == null) {\n    if (!warnedAboutEcmaVersion && typeof console === \"object\" && console.warn) {\n      warnedAboutEcmaVersion = true;\n      console.warn(\"Since Acorn 8.0.0, options.ecmaVersion is required.\\nDefaulting to 2020, but this will stop working in the future.\");\n    }\n    options.ecmaVersion = 11;\n  } else if (options.ecmaVersion >= 2015) {\n    options.ecmaVersion -= 2009;\n  }\n\n  if (options.allowReserved == null)\n    { options.allowReserved = options.ecmaVersion < 5; }\n\n  if (!opts || opts.allowHashBang == null)\n    { options.allowHashBang = options.ecmaVersion >= 14; }\n\n  if (isArray(options.onToken)) {\n    var tokens = options.onToken;\n    options.onToken = function (token) { return tokens.push(token); };\n  }\n  if (isArray(options.onComment))\n    { options.onComment = pushComment(options, options.onComment); }\n\n  return options\n}\n\nfunction pushComment(options, array) {\n  return function(block, text, start, end, startLoc, endLoc) {\n    var comment = {\n      type: block ? \"Block\" : \"Line\",\n      value: text,\n      start: start,\n      end: end\n    };\n    if (options.locations)\n      { comment.loc = new SourceLocation(this, startLoc, endLoc); }\n    if (options.ranges)\n      { comment.range = [start, end]; }\n    array.push(comment);\n  }\n}\n\n// Each scope gets a bitset that may contain these flags\nvar\n    SCOPE_TOP = 1,\n    SCOPE_FUNCTION = 2,\n    SCOPE_ASYNC = 4,\n    SCOPE_GENERATOR = 8,\n    SCOPE_ARROW = 16,\n    SCOPE_SIMPLE_CATCH = 32,\n    SCOPE_SUPER = 64,\n    SCOPE_DIRECT_SUPER = 128,\n    SCOPE_CLASS_STATIC_BLOCK = 256,\n    SCOPE_VAR = SCOPE_TOP | SCOPE_FUNCTION | SCOPE_CLASS_STATIC_BLOCK;\n\nfunction functionFlags(async, generator) {\n  return SCOPE_FUNCTION | (async ? SCOPE_ASYNC : 0) | (generator ? SCOPE_GENERATOR : 0)\n}\n\n// Used in checkLVal* and declareName to determine the type of a binding\nvar\n    BIND_NONE = 0, // Not a binding\n    BIND_VAR = 1, // Var-style binding\n    BIND_LEXICAL = 2, // Let- or const-style binding\n    BIND_FUNCTION = 3, // Function declaration\n    BIND_SIMPLE_CATCH = 4, // Simple (identifier pattern) catch binding\n    BIND_OUTSIDE = 5; // Special case for function names as bound inside the function\n\nvar Parser = function Parser(options, input, startPos) {\n  this.options = options = getOptions(options);\n  this.sourceFile = options.sourceFile;\n  this.keywords = wordsRegexp(keywords$1[options.ecmaVersion >= 6 ? 6 : options.sourceType === \"module\" ? \"5module\" : 5]);\n  var reserved = \"\";\n  if (options.allowReserved !== true) {\n    reserved = reservedWords[options.ecmaVersion >= 6 ? 6 : options.ecmaVersion === 5 ? 5 : 3];\n    if (options.sourceType === \"module\") { reserved += \" await\"; }\n  }\n  this.reservedWords = wordsRegexp(reserved);\n  var reservedStrict = (reserved ? reserved + \" \" : \"\") + reservedWords.strict;\n  this.reservedWordsStrict = wordsRegexp(reservedStrict);\n  this.reservedWordsStrictBind = wordsRegexp(reservedStrict + \" \" + reservedWords.strictBind);\n  this.input = String(input);\n\n  // Used to signal to callers of `readWord1` whether the word\n  // contained any escape sequences. This is needed because words with\n  // escape sequences must not be interpreted as keywords.\n  this.containsEsc = false;\n\n  // Set up token state\n\n  // The current position of the tokenizer in the input.\n  if (startPos) {\n    this.pos = startPos;\n    this.lineStart = this.input.lastIndexOf(\"\\n\", startPos - 1) + 1;\n    this.curLine = this.input.slice(0, this.lineStart).split(lineBreak).length;\n  } else {\n    this.pos = this.lineStart = 0;\n    this.curLine = 1;\n  }\n\n  // Properties of the current token:\n  // Its type\n  this.type = types$1.eof;\n  // For tokens that include more information than their type, the value\n  this.value = null;\n  // Its start and end offset\n  this.start = this.end = this.pos;\n  // And, if locations are used, the {line, column} object\n  // corresponding to those offsets\n  this.startLoc = this.endLoc = this.curPosition();\n\n  // Position information for the previous token\n  this.lastTokEndLoc = this.lastTokStartLoc = null;\n  this.lastTokStart = this.lastTokEnd = this.pos;\n\n  // The context stack is used to superficially track syntactic\n  // context to predict whether a regular expression is allowed in a\n  // given position.\n  this.context = this.initialContext();\n  this.exprAllowed = true;\n\n  // Figure out if it's a module code.\n  this.inModule = options.sourceType === \"module\";\n  this.strict = this.inModule || this.strictDirective(this.pos);\n\n  // Used to signify the start of a potential arrow function\n  this.potentialArrowAt = -1;\n  this.potentialArrowInForAwait = false;\n\n  // Positions to delayed-check that yield/await does not exist in default parameters.\n  this.yieldPos = this.awaitPos = this.awaitIdentPos = 0;\n  // Labels in scope.\n  this.labels = [];\n  // Thus-far undefined exports.\n  this.undefinedExports = Object.create(null);\n\n  // If enabled, skip leading hashbang line.\n  if (this.pos === 0 && options.allowHashBang && this.input.slice(0, 2) === \"#!\")\n    { this.skipLineComment(2); }\n\n  // Scope tracking for duplicate variable names (see scope.js)\n  this.scopeStack = [];\n  this.enterScope(SCOPE_TOP);\n\n  // For RegExp validation\n  this.regexpState = null;\n\n  // The stack of private names.\n  // Each element has two properties: 'declared' and 'used'.\n  // When it exited from the outermost class definition, all used private names must be declared.\n  this.privateNameStack = [];\n};\n\nvar prototypeAccessors = { inFunction: { configurable: true },inGenerator: { configurable: true },inAsync: { configurable: true },canAwait: { configurable: true },allowSuper: { configurable: true },allowDirectSuper: { configurable: true },treatFunctionsAsVar: { configurable: true },allowNewDotTarget: { configurable: true },inClassStaticBlock: { configurable: true } };\n\nParser.prototype.parse = function parse () {\n  var node = this.options.program || this.startNode();\n  this.nextToken();\n  return this.parseTopLevel(node)\n};\n\nprototypeAccessors.inFunction.get = function () { return (this.currentVarScope().flags & SCOPE_FUNCTION) > 0 };\n\nprototypeAccessors.inGenerator.get = function () { return (this.currentVarScope().flags & SCOPE_GENERATOR) > 0 && !this.currentVarScope().inClassFieldInit };\n\nprototypeAccessors.inAsync.get = function () { return (this.currentVarScope().flags & SCOPE_ASYNC) > 0 && !this.currentVarScope().inClassFieldInit };\n\nprototypeAccessors.canAwait.get = function () {\n  for (var i = this.scopeStack.length - 1; i >= 0; i--) {\n    var scope = this.scopeStack[i];\n    if (scope.inClassFieldInit || scope.flags & SCOPE_CLASS_STATIC_BLOCK) { return false }\n    if (scope.flags & SCOPE_FUNCTION) { return (scope.flags & SCOPE_ASYNC) > 0 }\n  }\n  return (this.inModule && this.options.ecmaVersion >= 13) || this.options.allowAwaitOutsideFunction\n};\n\nprototypeAccessors.allowSuper.get = function () {\n  var ref = this.currentThisScope();\n    var flags = ref.flags;\n    var inClassFieldInit = ref.inClassFieldInit;\n  return (flags & SCOPE_SUPER) > 0 || inClassFieldInit || this.options.allowSuperOutsideMethod\n};\n\nprototypeAccessors.allowDirectSuper.get = function () { return (this.currentThisScope().flags & SCOPE_DIRECT_SUPER) > 0 };\n\nprototypeAccessors.treatFunctionsAsVar.get = function () { return this.treatFunctionsAsVarInScope(this.currentScope()) };\n\nprototypeAccessors.allowNewDotTarget.get = function () {\n  var ref = this.currentThisScope();\n    var flags = ref.flags;\n    var inClassFieldInit = ref.inClassFieldInit;\n  return (flags & (SCOPE_FUNCTION | SCOPE_CLASS_STATIC_BLOCK)) > 0 || inClassFieldInit\n};\n\nprototypeAccessors.inClassStaticBlock.get = function () {\n  return (this.currentVarScope().flags & SCOPE_CLASS_STATIC_BLOCK) > 0\n};\n\nParser.extend = function extend () {\n    var plugins = [], len = arguments.length;\n    while ( len-- ) plugins[ len ] = arguments[ len ];\n\n  var cls = this;\n  for (var i = 0; i < plugins.length; i++) { cls = plugins[i](cls); }\n  return cls\n};\n\nParser.parse = function parse (input, options) {\n  return new this(options, input).parse()\n};\n\nParser.parseExpressionAt = function parseExpressionAt (input, pos, options) {\n  var parser = new this(options, input, pos);\n  parser.nextToken();\n  return parser.parseExpression()\n};\n\nParser.tokenizer = function tokenizer (input, options) {\n  return new this(options, input)\n};\n\nObject.defineProperties( Parser.prototype, prototypeAccessors );\n\nvar pp$9 = Parser.prototype;\n\n// ## Parser utilities\n\nvar literal = /^(?:'((?:\\\\.|[^'\\\\])*?)'|\"((?:\\\\.|[^\"\\\\])*?)\")/;\npp$9.strictDirective = function(start) {\n  if (this.options.ecmaVersion < 5) { return false }\n  for (;;) {\n    // Try to find string literal.\n    skipWhiteSpace.lastIndex = start;\n    start += skipWhiteSpace.exec(this.input)[0].length;\n    var match = literal.exec(this.input.slice(start));\n    if (!match) { return false }\n    if ((match[1] || match[2]) === \"use strict\") {\n      skipWhiteSpace.lastIndex = start + match[0].length;\n      var spaceAfter = skipWhiteSpace.exec(this.input), end = spaceAfter.index + spaceAfter[0].length;\n      var next = this.input.charAt(end);\n      return next === \";\" || next === \"}\" ||\n        (lineBreak.test(spaceAfter[0]) &&\n         !(/[(`.[+\\-/*%<>=,?^&]/.test(next) || next === \"!\" && this.input.charAt(end + 1) === \"=\"))\n    }\n    start += match[0].length;\n\n    // Skip semicolon, if any.\n    skipWhiteSpace.lastIndex = start;\n    start += skipWhiteSpace.exec(this.input)[0].length;\n    if (this.input[start] === \";\")\n      { start++; }\n  }\n};\n\n// Predicate that tests whether the next token is of the given\n// type, and if yes, consumes it as a side effect.\n\npp$9.eat = function(type) {\n  if (this.type === type) {\n    this.next();\n    return true\n  } else {\n    return false\n  }\n};\n\n// Tests whether parsed token is a contextual keyword.\n\npp$9.isContextual = function(name) {\n  return this.type === types$1.name && this.value === name && !this.containsEsc\n};\n\n// Consumes contextual keyword if possible.\n\npp$9.eatContextual = function(name) {\n  if (!this.isContextual(name)) { return false }\n  this.next();\n  return true\n};\n\n// Asserts that following token is given contextual keyword.\n\npp$9.expectContextual = function(name) {\n  if (!this.eatContextual(name)) { this.unexpected(); }\n};\n\n// Test whether a semicolon can be inserted at the current position.\n\npp$9.canInsertSemicolon = function() {\n  return this.type === types$1.eof ||\n    this.type === types$1.braceR ||\n    lineBreak.test(this.input.slice(this.lastTokEnd, this.start))\n};\n\npp$9.insertSemicolon = function() {\n  if (this.canInsertSemicolon()) {\n    if (this.options.onInsertedSemicolon)\n      { this.options.onInsertedSemicolon(this.lastTokEnd, this.lastTokEndLoc); }\n    return true\n  }\n};\n\n// Consume a semicolon, or, failing that, see if we are allowed to\n// pretend that there is a semicolon at this position.\n\npp$9.semicolon = function() {\n  if (!this.eat(types$1.semi) && !this.insertSemicolon()) { this.unexpected(); }\n};\n\npp$9.afterTrailingComma = function(tokType, notNext) {\n  if (this.type === tokType) {\n    if (this.options.onTrailingComma)\n      { this.options.onTrailingComma(this.lastTokStart, this.lastTokStartLoc); }\n    if (!notNext)\n      { this.next(); }\n    return true\n  }\n};\n\n// Expect a token of a given type. If found, consume it, otherwise,\n// raise an unexpected token error.\n\npp$9.expect = function(type) {\n  this.eat(type) || this.unexpected();\n};\n\n// Raise an unexpected token error.\n\npp$9.unexpected = function(pos) {\n  this.raise(pos != null ? pos : this.start, \"Unexpected token\");\n};\n\nvar DestructuringErrors = function DestructuringErrors() {\n  this.shorthandAssign =\n  this.trailingComma =\n  this.parenthesizedAssign =\n  this.parenthesizedBind =\n  this.doubleProto =\n    -1;\n};\n\npp$9.checkPatternErrors = function(refDestructuringErrors, isAssign) {\n  if (!refDestructuringErrors) { return }\n  if (refDestructuringErrors.trailingComma > -1)\n    { this.raiseRecoverable(refDestructuringErrors.trailingComma, \"Comma is not permitted after the rest element\"); }\n  var parens = isAssign ? refDestructuringErrors.parenthesizedAssign : refDestructuringErrors.parenthesizedBind;\n  if (parens > -1) { this.raiseRecoverable(parens, isAssign ? \"Assigning to rvalue\" : \"Parenthesized pattern\"); }\n};\n\npp$9.checkExpressionErrors = function(refDestructuringErrors, andThrow) {\n  if (!refDestructuringErrors) { return false }\n  var shorthandAssign = refDestructuringErrors.shorthandAssign;\n  var doubleProto = refDestructuringErrors.doubleProto;\n  if (!andThrow) { return shorthandAssign >= 0 || doubleProto >= 0 }\n  if (shorthandAssign >= 0)\n    { this.raise(shorthandAssign, \"Shorthand property assignments are valid only in destructuring patterns\"); }\n  if (doubleProto >= 0)\n    { this.raiseRecoverable(doubleProto, \"Redefinition of __proto__ property\"); }\n};\n\npp$9.checkYieldAwaitInDefaultParams = function() {\n  if (this.yieldPos && (!this.awaitPos || this.yieldPos < this.awaitPos))\n    { this.raise(this.yieldPos, \"Yield expression cannot be a default value\"); }\n  if (this.awaitPos)\n    { this.raise(this.awaitPos, \"Await expression cannot be a default value\"); }\n};\n\npp$9.isSimpleAssignTarget = function(expr) {\n  if (expr.type === \"ParenthesizedExpression\")\n    { return this.isSimpleAssignTarget(expr.expression) }\n  return expr.type === \"Identifier\" || expr.type === \"MemberExpression\"\n};\n\nvar pp$8 = Parser.prototype;\n\n// ### Statement parsing\n\n// Parse a program. Initializes the parser, reads any number of\n// statements, and wraps them in a Program node.  Optionally takes a\n// `program` argument.  If present, the statements will be appended\n// to its body instead of creating a new node.\n\npp$8.parseTopLevel = function(node) {\n  var exports = Object.create(null);\n  if (!node.body) { node.body = []; }\n  while (this.type !== types$1.eof) {\n    var stmt = this.parseStatement(null, true, exports);\n    node.body.push(stmt);\n  }\n  if (this.inModule)\n    { for (var i = 0, list = Object.keys(this.undefinedExports); i < list.length; i += 1)\n      {\n        var name = list[i];\n\n        this.raiseRecoverable(this.undefinedExports[name].start, (\"Export '\" + name + \"' is not defined\"));\n      } }\n  this.adaptDirectivePrologue(node.body);\n  this.next();\n  node.sourceType = this.options.sourceType;\n  return this.finishNode(node, \"Program\")\n};\n\nvar loopLabel = {kind: \"loop\"}, switchLabel = {kind: \"switch\"};\n\npp$8.isLet = function(context) {\n  if (this.options.ecmaVersion < 6 || !this.isContextual(\"let\")) { return false }\n  skipWhiteSpace.lastIndex = this.pos;\n  var skip = skipWhiteSpace.exec(this.input);\n  var next = this.pos + skip[0].length, nextCh = this.input.charCodeAt(next);\n  // For ambiguous cases, determine if a LexicalDeclaration (or only a\n  // Statement) is allowed here. If context is not empty then only a Statement\n  // is allowed. However, `let [` is an explicit negative lookahead for\n  // ExpressionStatement, so special-case it first.\n  if (nextCh === 91 || nextCh === 92) { return true } // '[', '/'\n  if (context) { return false }\n\n  if (nextCh === 123 || nextCh > 0xd7ff && nextCh < 0xdc00) { return true } // '{', astral\n  if (isIdentifierStart(nextCh, true)) {\n    var pos = next + 1;\n    while (isIdentifierChar(nextCh = this.input.charCodeAt(pos), true)) { ++pos; }\n    if (nextCh === 92 || nextCh > 0xd7ff && nextCh < 0xdc00) { return true }\n    var ident = this.input.slice(next, pos);\n    if (!keywordRelationalOperator.test(ident)) { return true }\n  }\n  return false\n};\n\n// check 'async [no LineTerminator here] function'\n// - 'async /*foo*/ function' is OK.\n// - 'async /*\\n*/ function' is invalid.\npp$8.isAsyncFunction = function() {\n  if (this.options.ecmaVersion < 8 || !this.isContextual(\"async\"))\n    { return false }\n\n  skipWhiteSpace.lastIndex = this.pos;\n  var skip = skipWhiteSpace.exec(this.input);\n  var next = this.pos + skip[0].length, after;\n  return !lineBreak.test(this.input.slice(this.pos, next)) &&\n    this.input.slice(next, next + 8) === \"function\" &&\n    (next + 8 === this.input.length ||\n     !(isIdentifierChar(after = this.input.charCodeAt(next + 8)) || after > 0xd7ff && after < 0xdc00))\n};\n\n// Parse a single statement.\n//\n// If expecting a statement and finding a slash operator, parse a\n// regular expression literal. This is to handle cases like\n// `if (foo) /blah/.exec(foo)`, where looking at the previous token\n// does not help.\n\npp$8.parseStatement = function(context, topLevel, exports) {\n  var starttype = this.type, node = this.startNode(), kind;\n\n  if (this.isLet(context)) {\n    starttype = types$1._var;\n    kind = \"let\";\n  }\n\n  // Most types of statements are recognized by the keyword they\n  // start with. Many are trivial to parse, some require a bit of\n  // complexity.\n\n  switch (starttype) {\n  case types$1._break: case types$1._continue: return this.parseBreakContinueStatement(node, starttype.keyword)\n  case types$1._debugger: return this.parseDebuggerStatement(node)\n  case types$1._do: return this.parseDoStatement(node)\n  case types$1._for: return this.parseForStatement(node)\n  case types$1._function:\n    // Function as sole body of either an if statement or a labeled statement\n    // works, but not when it is part of a labeled statement that is the sole\n    // body of an if statement.\n    if ((context && (this.strict || context !== \"if\" && context !== \"label\")) && this.options.ecmaVersion >= 6) { this.unexpected(); }\n    return this.parseFunctionStatement(node, false, !context)\n  case types$1._class:\n    if (context) { this.unexpected(); }\n    return this.parseClass(node, true)\n  case types$1._if: return this.parseIfStatement(node)\n  case types$1._return: return this.parseReturnStatement(node)\n  case types$1._switch: return this.parseSwitchStatement(node)\n  case types$1._throw: return this.parseThrowStatement(node)\n  case types$1._try: return this.parseTryStatement(node)\n  case types$1._const: case types$1._var:\n    kind = kind || this.value;\n    if (context && kind !== \"var\") { this.unexpected(); }\n    return this.parseVarStatement(node, kind)\n  case types$1._while: return this.parseWhileStatement(node)\n  case types$1._with: return this.parseWithStatement(node)\n  case types$1.braceL: return this.parseBlock(true, node)\n  case types$1.semi: return this.parseEmptyStatement(node)\n  case types$1._export:\n  case types$1._import:\n    if (this.options.ecmaVersion > 10 && starttype === types$1._import) {\n      skipWhiteSpace.lastIndex = this.pos;\n      var skip = skipWhiteSpace.exec(this.input);\n      var next = this.pos + skip[0].length, nextCh = this.input.charCodeAt(next);\n      if (nextCh === 40 || nextCh === 46) // '(' or '.'\n        { return this.parseExpressionStatement(node, this.parseExpression()) }\n    }\n\n    if (!this.options.allowImportExportEverywhere) {\n      if (!topLevel)\n        { this.raise(this.start, \"'import' and 'export' may only appear at the top level\"); }\n      if (!this.inModule)\n        { this.raise(this.start, \"'import' and 'export' may appear only with 'sourceType: module'\"); }\n    }\n    return starttype === types$1._import ? this.parseImport(node) : this.parseExport(node, exports)\n\n    // If the statement does not start with a statement keyword or a\n    // brace, it's an ExpressionStatement or LabeledStatement. We\n    // simply start parsing an expression, and afterwards, if the\n    // next token is a colon and the expression was a simple\n    // Identifier node, we switch to interpreting it as a label.\n  default:\n    if (this.isAsyncFunction()) {\n      if (context) { this.unexpected(); }\n      this.next();\n      return this.parseFunctionStatement(node, true, !context)\n    }\n\n    var maybeName = this.value, expr = this.parseExpression();\n    if (starttype === types$1.name && expr.type === \"Identifier\" && this.eat(types$1.colon))\n      { return this.parseLabeledStatement(node, maybeName, expr, context) }\n    else { return this.parseExpressionStatement(node, expr) }\n  }\n};\n\npp$8.parseBreakContinueStatement = function(node, keyword) {\n  var isBreak = keyword === \"break\";\n  this.next();\n  if (this.eat(types$1.semi) || this.insertSemicolon()) { node.label = null; }\n  else if (this.type !== types$1.name) { this.unexpected(); }\n  else {\n    node.label = this.parseIdent();\n    this.semicolon();\n  }\n\n  // Verify that there is an actual destination to break or\n  // continue to.\n  var i = 0;\n  for (; i < this.labels.length; ++i) {\n    var lab = this.labels[i];\n    if (node.label == null || lab.name === node.label.name) {\n      if (lab.kind != null && (isBreak || lab.kind === \"loop\")) { break }\n      if (node.label && isBreak) { break }\n    }\n  }\n  if (i === this.labels.length) { this.raise(node.start, \"Unsyntactic \" + keyword); }\n  return this.finishNode(node, isBreak ? \"BreakStatement\" : \"ContinueStatement\")\n};\n\npp$8.parseDebuggerStatement = function(node) {\n  this.next();\n  this.semicolon();\n  return this.finishNode(node, \"DebuggerStatement\")\n};\n\npp$8.parseDoStatement = function(node) {\n  this.next();\n  this.labels.push(loopLabel);\n  node.body = this.parseStatement(\"do\");\n  this.labels.pop();\n  this.expect(types$1._while);\n  node.test = this.parseParenExpression();\n  if (this.options.ecmaVersion >= 6)\n    { this.eat(types$1.semi); }\n  else\n    { this.semicolon(); }\n  return this.finishNode(node, \"DoWhileStatement\")\n};\n\n// Disambiguating between a `for` and a `for`/`in` or `for`/`of`\n// loop is non-trivial. Basically, we have to parse the init `var`\n// statement or expression, disallowing the `in` operator (see\n// the second parameter to `parseExpression`), and then check\n// whether the next token is `in` or `of`. When there is no init\n// part (semicolon immediately after the opening parenthesis), it\n// is a regular `for` loop.\n\npp$8.parseForStatement = function(node) {\n  this.next();\n  var awaitAt = (this.options.ecmaVersion >= 9 && this.canAwait && this.eatContextual(\"await\")) ? this.lastTokStart : -1;\n  this.labels.push(loopLabel);\n  this.enterScope(0);\n  this.expect(types$1.parenL);\n  if (this.type === types$1.semi) {\n    if (awaitAt > -1) { this.unexpected(awaitAt); }\n    return this.parseFor(node, null)\n  }\n  var isLet = this.isLet();\n  if (this.type === types$1._var || this.type === types$1._const || isLet) {\n    var init$1 = this.startNode(), kind = isLet ? \"let\" : this.value;\n    this.next();\n    this.parseVar(init$1, true, kind);\n    this.finishNode(init$1, \"VariableDeclaration\");\n    if ((this.type === types$1._in || (this.options.ecmaVersion >= 6 && this.isContextual(\"of\"))) && init$1.declarations.length === 1) {\n      if (this.options.ecmaVersion >= 9) {\n        if (this.type === types$1._in) {\n          if (awaitAt > -1) { this.unexpected(awaitAt); }\n        } else { node.await = awaitAt > -1; }\n      }\n      return this.parseForIn(node, init$1)\n    }\n    if (awaitAt > -1) { this.unexpected(awaitAt); }\n    return this.parseFor(node, init$1)\n  }\n  var startsWithLet = this.isContextual(\"let\"), isForOf = false;\n  var refDestructuringErrors = new DestructuringErrors;\n  var init = this.parseExpression(awaitAt > -1 ? \"await\" : true, refDestructuringErrors);\n  if (this.type === types$1._in || (isForOf = this.options.ecmaVersion >= 6 && this.isContextual(\"of\"))) {\n    if (this.options.ecmaVersion >= 9) {\n      if (this.type === types$1._in) {\n        if (awaitAt > -1) { this.unexpected(awaitAt); }\n      } else { node.await = awaitAt > -1; }\n    }\n    if (startsWithLet && isForOf) { this.raise(init.start, \"The left-hand side of a for-of loop may not start with 'let'.\"); }\n    this.toAssignable(init, false, refDestructuringErrors);\n    this.checkLValPattern(init);\n    return this.parseForIn(node, init)\n  } else {\n    this.checkExpressionErrors(refDestructuringErrors, true);\n  }\n  if (awaitAt > -1) { this.unexpected(awaitAt); }\n  return this.parseFor(node, init)\n};\n\npp$8.parseFunctionStatement = function(node, isAsync, declarationPosition) {\n  this.next();\n  return this.parseFunction(node, FUNC_STATEMENT | (declarationPosition ? 0 : FUNC_HANGING_STATEMENT), false, isAsync)\n};\n\npp$8.parseIfStatement = function(node) {\n  this.next();\n  node.test = this.parseParenExpression();\n  // allow function declarations in branches, but only in non-strict mode\n  node.consequent = this.parseStatement(\"if\");\n  node.alternate = this.eat(types$1._else) ? this.parseStatement(\"if\") : null;\n  return this.finishNode(node, \"IfStatement\")\n};\n\npp$8.parseReturnStatement = function(node) {\n  if (!this.inFunction && !this.options.allowReturnOutsideFunction)\n    { this.raise(this.start, \"'return' outside of function\"); }\n  this.next();\n\n  // In `return` (and `break`/`continue`), the keywords with\n  // optional arguments, we eagerly look for a semicolon or the\n  // possibility to insert one.\n\n  if (this.eat(types$1.semi) || this.insertSemicolon()) { node.argument = null; }\n  else { node.argument = this.parseExpression(); this.semicolon(); }\n  return this.finishNode(node, \"ReturnStatement\")\n};\n\npp$8.parseSwitchStatement = function(node) {\n  this.next();\n  node.discriminant = this.parseParenExpression();\n  node.cases = [];\n  this.expect(types$1.braceL);\n  this.labels.push(switchLabel);\n  this.enterScope(0);\n\n  // Statements under must be grouped (by label) in SwitchCase\n  // nodes. `cur` is used to keep the node that we are currently\n  // adding statements to.\n\n  var cur;\n  for (var sawDefault = false; this.type !== types$1.braceR;) {\n    if (this.type === types$1._case || this.type === types$1._default) {\n      var isCase = this.type === types$1._case;\n      if (cur) { this.finishNode(cur, \"SwitchCase\"); }\n      node.cases.push(cur = this.startNode());\n      cur.consequent = [];\n      this.next();\n      if (isCase) {\n        cur.test = this.parseExpression();\n      } else {\n        if (sawDefault) { this.raiseRecoverable(this.lastTokStart, \"Multiple default clauses\"); }\n        sawDefault = true;\n        cur.test = null;\n      }\n      this.expect(types$1.colon);\n    } else {\n      if (!cur) { this.unexpected(); }\n      cur.consequent.push(this.parseStatement(null));\n    }\n  }\n  this.exitScope();\n  if (cur) { this.finishNode(cur, \"SwitchCase\"); }\n  this.next(); // Closing brace\n  this.labels.pop();\n  return this.finishNode(node, \"SwitchStatement\")\n};\n\npp$8.parseThrowStatement = function(node) {\n  this.next();\n  if (lineBreak.test(this.input.slice(this.lastTokEnd, this.start)))\n    { this.raise(this.lastTokEnd, \"Illegal newline after throw\"); }\n  node.argument = this.parseExpression();\n  this.semicolon();\n  return this.finishNode(node, \"ThrowStatement\")\n};\n\n// Reused empty array added for node fields that are always empty.\n\nvar empty$1 = [];\n\npp$8.parseTryStatement = function(node) {\n  this.next();\n  node.block = this.parseBlock();\n  node.handler = null;\n  if (this.type === types$1._catch) {\n    var clause = this.startNode();\n    this.next();\n    if (this.eat(types$1.parenL)) {\n      clause.param = this.parseBindingAtom();\n      var simple = clause.param.type === \"Identifier\";\n      this.enterScope(simple ? SCOPE_SIMPLE_CATCH : 0);\n      this.checkLValPattern(clause.param, simple ? BIND_SIMPLE_CATCH : BIND_LEXICAL);\n      this.expect(types$1.parenR);\n    } else {\n      if (this.options.ecmaVersion < 10) { this.unexpected(); }\n      clause.param = null;\n      this.enterScope(0);\n    }\n    clause.body = this.parseBlock(false);\n    this.exitScope();\n    node.handler = this.finishNode(clause, \"CatchClause\");\n  }\n  node.finalizer = this.eat(types$1._finally) ? this.parseBlock() : null;\n  if (!node.handler && !node.finalizer)\n    { this.raise(node.start, \"Missing catch or finally clause\"); }\n  return this.finishNode(node, \"TryStatement\")\n};\n\npp$8.parseVarStatement = function(node, kind) {\n  this.next();\n  this.parseVar(node, false, kind);\n  this.semicolon();\n  return this.finishNode(node, \"VariableDeclaration\")\n};\n\npp$8.parseWhileStatement = function(node) {\n  this.next();\n  node.test = this.parseParenExpression();\n  this.labels.push(loopLabel);\n  node.body = this.parseStatement(\"while\");\n  this.labels.pop();\n  return this.finishNode(node, \"WhileStatement\")\n};\n\npp$8.parseWithStatement = function(node) {\n  if (this.strict) { this.raise(this.start, \"'with' in strict mode\"); }\n  this.next();\n  node.object = this.parseParenExpression();\n  node.body = this.parseStatement(\"with\");\n  return this.finishNode(node, \"WithStatement\")\n};\n\npp$8.parseEmptyStatement = function(node) {\n  this.next();\n  return this.finishNode(node, \"EmptyStatement\")\n};\n\npp$8.parseLabeledStatement = function(node, maybeName, expr, context) {\n  for (var i$1 = 0, list = this.labels; i$1 < list.length; i$1 += 1)\n    {\n    var label = list[i$1];\n\n    if (label.name === maybeName)\n      { this.raise(expr.start, \"Label '\" + maybeName + \"' is already declared\");\n  } }\n  var kind = this.type.isLoop ? \"loop\" : this.type === types$1._switch ? \"switch\" : null;\n  for (var i = this.labels.length - 1; i >= 0; i--) {\n    var label$1 = this.labels[i];\n    if (label$1.statementStart === node.start) {\n      // Update information about previous labels on this node\n      label$1.statementStart = this.start;\n      label$1.kind = kind;\n    } else { break }\n  }\n  this.labels.push({name: maybeName, kind: kind, statementStart: this.start});\n  node.body = this.parseStatement(context ? context.indexOf(\"label\") === -1 ? context + \"label\" : context : \"label\");\n  this.labels.pop();\n  node.label = expr;\n  return this.finishNode(node, \"LabeledStatement\")\n};\n\npp$8.parseExpressionStatement = function(node, expr) {\n  node.expression = expr;\n  this.semicolon();\n  return this.finishNode(node, \"ExpressionStatement\")\n};\n\n// Parse a semicolon-enclosed block of statements, handling `\"use\n// strict\"` declarations when `allowStrict` is true (used for\n// function bodies).\n\npp$8.parseBlock = function(createNewLexicalScope, node, exitStrict) {\n  if ( createNewLexicalScope === void 0 ) createNewLexicalScope = true;\n  if ( node === void 0 ) node = this.startNode();\n\n  node.body = [];\n  this.expect(types$1.braceL);\n  if (createNewLexicalScope) { this.enterScope(0); }\n  while (this.type !== types$1.braceR) {\n    var stmt = this.parseStatement(null);\n    node.body.push(stmt);\n  }\n  if (exitStrict) { this.strict = false; }\n  this.next();\n  if (createNewLexicalScope) { this.exitScope(); }\n  return this.finishNode(node, \"BlockStatement\")\n};\n\n// Parse a regular `for` loop. The disambiguation code in\n// `parseStatement` will already have parsed the init statement or\n// expression.\n\npp$8.parseFor = function(node, init) {\n  node.init = init;\n  this.expect(types$1.semi);\n  node.test = this.type === types$1.semi ? null : this.parseExpression();\n  this.expect(types$1.semi);\n  node.update = this.type === types$1.parenR ? null : this.parseExpression();\n  this.expect(types$1.parenR);\n  node.body = this.parseStatement(\"for\");\n  this.exitScope();\n  this.labels.pop();\n  return this.finishNode(node, \"ForStatement\")\n};\n\n// Parse a `for`/`in` and `for`/`of` loop, which are almost\n// same from parser's perspective.\n\npp$8.parseForIn = function(node, init) {\n  var isForIn = this.type === types$1._in;\n  this.next();\n\n  if (\n    init.type === \"VariableDeclaration\" &&\n    init.declarations[0].init != null &&\n    (\n      !isForIn ||\n      this.options.ecmaVersion < 8 ||\n      this.strict ||\n      init.kind !== \"var\" ||\n      init.declarations[0].id.type !== \"Identifier\"\n    )\n  ) {\n    this.raise(\n      init.start,\n      ((isForIn ? \"for-in\" : \"for-of\") + \" loop variable declaration may not have an initializer\")\n    );\n  }\n  node.left = init;\n  node.right = isForIn ? this.parseExpression() : this.parseMaybeAssign();\n  this.expect(types$1.parenR);\n  node.body = this.parseStatement(\"for\");\n  this.exitScope();\n  this.labels.pop();\n  return this.finishNode(node, isForIn ? \"ForInStatement\" : \"ForOfStatement\")\n};\n\n// Parse a list of variable declarations.\n\npp$8.parseVar = function(node, isFor, kind) {\n  node.declarations = [];\n  node.kind = kind;\n  for (;;) {\n    var decl = this.startNode();\n    this.parseVarId(decl, kind);\n    if (this.eat(types$1.eq)) {\n      decl.init = this.parseMaybeAssign(isFor);\n    } else if (kind === \"const\" && !(this.type === types$1._in || (this.options.ecmaVersion >= 6 && this.isContextual(\"of\")))) {\n      this.unexpected();\n    } else if (decl.id.type !== \"Identifier\" && !(isFor && (this.type === types$1._in || this.isContextual(\"of\")))) {\n      this.raise(this.lastTokEnd, \"Complex binding patterns require an initialization value\");\n    } else {\n      decl.init = null;\n    }\n    node.declarations.push(this.finishNode(decl, \"VariableDeclarator\"));\n    if (!this.eat(types$1.comma)) { break }\n  }\n  return node\n};\n\npp$8.parseVarId = function(decl, kind) {\n  decl.id = this.parseBindingAtom();\n  this.checkLValPattern(decl.id, kind === \"var\" ? BIND_VAR : BIND_LEXICAL, false);\n};\n\nvar FUNC_STATEMENT = 1, FUNC_HANGING_STATEMENT = 2, FUNC_NULLABLE_ID = 4;\n\n// Parse a function declaration or literal (depending on the\n// `statement & FUNC_STATEMENT`).\n\n// Remove `allowExpressionBody` for 7.0.0, as it is only called with false\npp$8.parseFunction = function(node, statement, allowExpressionBody, isAsync, forInit) {\n  this.initFunction(node);\n  if (this.options.ecmaVersion >= 9 || this.options.ecmaVersion >= 6 && !isAsync) {\n    if (this.type === types$1.star && (statement & FUNC_HANGING_STATEMENT))\n      { this.unexpected(); }\n    node.generator = this.eat(types$1.star);\n  }\n  if (this.options.ecmaVersion >= 8)\n    { node.async = !!isAsync; }\n\n  if (statement & FUNC_STATEMENT) {\n    node.id = (statement & FUNC_NULLABLE_ID) && this.type !== types$1.name ? null : this.parseIdent();\n    if (node.id && !(statement & FUNC_HANGING_STATEMENT))\n      // If it is a regular function declaration in sloppy mode, then it is\n      // subject to Annex B semantics (BIND_FUNCTION). Otherwise, the binding\n      // mode depends on properties of the current scope (see\n      // treatFunctionsAsVar).\n      { this.checkLValSimple(node.id, (this.strict || node.generator || node.async) ? this.treatFunctionsAsVar ? BIND_VAR : BIND_LEXICAL : BIND_FUNCTION); }\n  }\n\n  var oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n  this.yieldPos = 0;\n  this.awaitPos = 0;\n  this.awaitIdentPos = 0;\n  this.enterScope(functionFlags(node.async, node.generator));\n\n  if (!(statement & FUNC_STATEMENT))\n    { node.id = this.type === types$1.name ? this.parseIdent() : null; }\n\n  this.parseFunctionParams(node);\n  this.parseFunctionBody(node, allowExpressionBody, false, forInit);\n\n  this.yieldPos = oldYieldPos;\n  this.awaitPos = oldAwaitPos;\n  this.awaitIdentPos = oldAwaitIdentPos;\n  return this.finishNode(node, (statement & FUNC_STATEMENT) ? \"FunctionDeclaration\" : \"FunctionExpression\")\n};\n\npp$8.parseFunctionParams = function(node) {\n  this.expect(types$1.parenL);\n  node.params = this.parseBindingList(types$1.parenR, false, this.options.ecmaVersion >= 8);\n  this.checkYieldAwaitInDefaultParams();\n};\n\n// Parse a class declaration or literal (depending on the\n// `isStatement` parameter).\n\npp$8.parseClass = function(node, isStatement) {\n  this.next();\n\n  // ecma-262 14.6 Class Definitions\n  // A class definition is always strict mode code.\n  var oldStrict = this.strict;\n  this.strict = true;\n\n  this.parseClassId(node, isStatement);\n  this.parseClassSuper(node);\n  var privateNameMap = this.enterClassBody();\n  var classBody = this.startNode();\n  var hadConstructor = false;\n  classBody.body = [];\n  this.expect(types$1.braceL);\n  while (this.type !== types$1.braceR) {\n    var element = this.parseClassElement(node.superClass !== null);\n    if (element) {\n      classBody.body.push(element);\n      if (element.type === \"MethodDefinition\" && element.kind === \"constructor\") {\n        if (hadConstructor) { this.raise(element.start, \"Duplicate constructor in the same class\"); }\n        hadConstructor = true;\n      } else if (element.key && element.key.type === \"PrivateIdentifier\" && isPrivateNameConflicted(privateNameMap, element)) {\n        this.raiseRecoverable(element.key.start, (\"Identifier '#\" + (element.key.name) + \"' has already been declared\"));\n      }\n    }\n  }\n  this.strict = oldStrict;\n  this.next();\n  node.body = this.finishNode(classBody, \"ClassBody\");\n  this.exitClassBody();\n  return this.finishNode(node, isStatement ? \"ClassDeclaration\" : \"ClassExpression\")\n};\n\npp$8.parseClassElement = function(constructorAllowsSuper) {\n  if (this.eat(types$1.semi)) { return null }\n\n  var ecmaVersion = this.options.ecmaVersion;\n  var node = this.startNode();\n  var keyName = \"\";\n  var isGenerator = false;\n  var isAsync = false;\n  var kind = \"method\";\n  var isStatic = false;\n\n  if (this.eatContextual(\"static\")) {\n    // Parse static init block\n    if (ecmaVersion >= 13 && this.eat(types$1.braceL)) {\n      this.parseClassStaticBlock(node);\n      return node\n    }\n    if (this.isClassElementNameStart() || this.type === types$1.star) {\n      isStatic = true;\n    } else {\n      keyName = \"static\";\n    }\n  }\n  node.static = isStatic;\n  if (!keyName && ecmaVersion >= 8 && this.eatContextual(\"async\")) {\n    if ((this.isClassElementNameStart() || this.type === types$1.star) && !this.canInsertSemicolon()) {\n      isAsync = true;\n    } else {\n      keyName = \"async\";\n    }\n  }\n  if (!keyName && (ecmaVersion >= 9 || !isAsync) && this.eat(types$1.star)) {\n    isGenerator = true;\n  }\n  if (!keyName && !isAsync && !isGenerator) {\n    var lastValue = this.value;\n    if (this.eatContextual(\"get\") || this.eatContextual(\"set\")) {\n      if (this.isClassElementNameStart()) {\n        kind = lastValue;\n      } else {\n        keyName = lastValue;\n      }\n    }\n  }\n\n  // Parse element name\n  if (keyName) {\n    // 'async', 'get', 'set', or 'static' were not a keyword contextually.\n    // The last token is any of those. Make it the element name.\n    node.computed = false;\n    node.key = this.startNodeAt(this.lastTokStart, this.lastTokStartLoc);\n    node.key.name = keyName;\n    this.finishNode(node.key, \"Identifier\");\n  } else {\n    this.parseClassElementName(node);\n  }\n\n  // Parse element value\n  if (ecmaVersion < 13 || this.type === types$1.parenL || kind !== \"method\" || isGenerator || isAsync) {\n    var isConstructor = !node.static && checkKeyName(node, \"constructor\");\n    var allowsDirectSuper = isConstructor && constructorAllowsSuper;\n    // Couldn't move this check into the 'parseClassMethod' method for backward compatibility.\n    if (isConstructor && kind !== \"method\") { this.raise(node.key.start, \"Constructor can't have get/set modifier\"); }\n    node.kind = isConstructor ? \"constructor\" : kind;\n    this.parseClassMethod(node, isGenerator, isAsync, allowsDirectSuper);\n  } else {\n    this.parseClassField(node);\n  }\n\n  return node\n};\n\npp$8.isClassElementNameStart = function() {\n  return (\n    this.type === types$1.name ||\n    this.type === types$1.privateId ||\n    this.type === types$1.num ||\n    this.type === types$1.string ||\n    this.type === types$1.bracketL ||\n    this.type.keyword\n  )\n};\n\npp$8.parseClassElementName = function(element) {\n  if (this.type === types$1.privateId) {\n    if (this.value === \"constructor\") {\n      this.raise(this.start, \"Classes can't have an element named '#constructor'\");\n    }\n    element.computed = false;\n    element.key = this.parsePrivateIdent();\n  } else {\n    this.parsePropertyName(element);\n  }\n};\n\npp$8.parseClassMethod = function(method, isGenerator, isAsync, allowsDirectSuper) {\n  // Check key and flags\n  var key = method.key;\n  if (method.kind === \"constructor\") {\n    if (isGenerator) { this.raise(key.start, \"Constructor can't be a generator\"); }\n    if (isAsync) { this.raise(key.start, \"Constructor can't be an async method\"); }\n  } else if (method.static && checkKeyName(method, \"prototype\")) {\n    this.raise(key.start, \"Classes may not have a static property named prototype\");\n  }\n\n  // Parse value\n  var value = method.value = this.parseMethod(isGenerator, isAsync, allowsDirectSuper);\n\n  // Check value\n  if (method.kind === \"get\" && value.params.length !== 0)\n    { this.raiseRecoverable(value.start, \"getter should have no params\"); }\n  if (method.kind === \"set\" && value.params.length !== 1)\n    { this.raiseRecoverable(value.start, \"setter should have exactly one param\"); }\n  if (method.kind === \"set\" && value.params[0].type === \"RestElement\")\n    { this.raiseRecoverable(value.params[0].start, \"Setter cannot use rest params\"); }\n\n  return this.finishNode(method, \"MethodDefinition\")\n};\n\npp$8.parseClassField = function(field) {\n  if (checkKeyName(field, \"constructor\")) {\n    this.raise(field.key.start, \"Classes can't have a field named 'constructor'\");\n  } else if (field.static && checkKeyName(field, \"prototype\")) {\n    this.raise(field.key.start, \"Classes can't have a static field named 'prototype'\");\n  }\n\n  if (this.eat(types$1.eq)) {\n    // To raise SyntaxError if 'arguments' exists in the initializer.\n    var scope = this.currentThisScope();\n    var inClassFieldInit = scope.inClassFieldInit;\n    scope.inClassFieldInit = true;\n    field.value = this.parseMaybeAssign();\n    scope.inClassFieldInit = inClassFieldInit;\n  } else {\n    field.value = null;\n  }\n  this.semicolon();\n\n  return this.finishNode(field, \"PropertyDefinition\")\n};\n\npp$8.parseClassStaticBlock = function(node) {\n  node.body = [];\n\n  var oldLabels = this.labels;\n  this.labels = [];\n  this.enterScope(SCOPE_CLASS_STATIC_BLOCK | SCOPE_SUPER);\n  while (this.type !== types$1.braceR) {\n    var stmt = this.parseStatement(null);\n    node.body.push(stmt);\n  }\n  this.next();\n  this.exitScope();\n  this.labels = oldLabels;\n\n  return this.finishNode(node, \"StaticBlock\")\n};\n\npp$8.parseClassId = function(node, isStatement) {\n  if (this.type === types$1.name) {\n    node.id = this.parseIdent();\n    if (isStatement)\n      { this.checkLValSimple(node.id, BIND_LEXICAL, false); }\n  } else {\n    if (isStatement === true)\n      { this.unexpected(); }\n    node.id = null;\n  }\n};\n\npp$8.parseClassSuper = function(node) {\n  node.superClass = this.eat(types$1._extends) ? this.parseExprSubscripts(null, false) : null;\n};\n\npp$8.enterClassBody = function() {\n  var element = {declared: Object.create(null), used: []};\n  this.privateNameStack.push(element);\n  return element.declared\n};\n\npp$8.exitClassBody = function() {\n  var ref = this.privateNameStack.pop();\n  var declared = ref.declared;\n  var used = ref.used;\n  var len = this.privateNameStack.length;\n  var parent = len === 0 ? null : this.privateNameStack[len - 1];\n  for (var i = 0; i < used.length; ++i) {\n    var id = used[i];\n    if (!hasOwn(declared, id.name)) {\n      if (parent) {\n        parent.used.push(id);\n      } else {\n        this.raiseRecoverable(id.start, (\"Private field '#\" + (id.name) + \"' must be declared in an enclosing class\"));\n      }\n    }\n  }\n};\n\nfunction isPrivateNameConflicted(privateNameMap, element) {\n  var name = element.key.name;\n  var curr = privateNameMap[name];\n\n  var next = \"true\";\n  if (element.type === \"MethodDefinition\" && (element.kind === \"get\" || element.kind === \"set\")) {\n    next = (element.static ? \"s\" : \"i\") + element.kind;\n  }\n\n  // `class { get #a(){}; static set #a(_){} }` is also conflict.\n  if (\n    curr === \"iget\" && next === \"iset\" ||\n    curr === \"iset\" && next === \"iget\" ||\n    curr === \"sget\" && next === \"sset\" ||\n    curr === \"sset\" && next === \"sget\"\n  ) {\n    privateNameMap[name] = \"true\";\n    return false\n  } else if (!curr) {\n    privateNameMap[name] = next;\n    return false\n  } else {\n    return true\n  }\n}\n\nfunction checkKeyName(node, name) {\n  var computed = node.computed;\n  var key = node.key;\n  return !computed && (\n    key.type === \"Identifier\" && key.name === name ||\n    key.type === \"Literal\" && key.value === name\n  )\n}\n\n// Parses module export declaration.\n\npp$8.parseExport = function(node, exports) {\n  this.next();\n  // export * from '...'\n  if (this.eat(types$1.star)) {\n    if (this.options.ecmaVersion >= 11) {\n      if (this.eatContextual(\"as\")) {\n        node.exported = this.parseModuleExportName();\n        this.checkExport(exports, node.exported, this.lastTokStart);\n      } else {\n        node.exported = null;\n      }\n    }\n    this.expectContextual(\"from\");\n    if (this.type !== types$1.string) { this.unexpected(); }\n    node.source = this.parseExprAtom();\n    this.semicolon();\n    return this.finishNode(node, \"ExportAllDeclaration\")\n  }\n  if (this.eat(types$1._default)) { // export default ...\n    this.checkExport(exports, \"default\", this.lastTokStart);\n    var isAsync;\n    if (this.type === types$1._function || (isAsync = this.isAsyncFunction())) {\n      var fNode = this.startNode();\n      this.next();\n      if (isAsync) { this.next(); }\n      node.declaration = this.parseFunction(fNode, FUNC_STATEMENT | FUNC_NULLABLE_ID, false, isAsync);\n    } else if (this.type === types$1._class) {\n      var cNode = this.startNode();\n      node.declaration = this.parseClass(cNode, \"nullableID\");\n    } else {\n      node.declaration = this.parseMaybeAssign();\n      this.semicolon();\n    }\n    return this.finishNode(node, \"ExportDefaultDeclaration\")\n  }\n  // export var|const|let|function|class ...\n  if (this.shouldParseExportStatement()) {\n    node.declaration = this.parseStatement(null);\n    if (node.declaration.type === \"VariableDeclaration\")\n      { this.checkVariableExport(exports, node.declaration.declarations); }\n    else\n      { this.checkExport(exports, node.declaration.id, node.declaration.id.start); }\n    node.specifiers = [];\n    node.source = null;\n  } else { // export { x, y as z } [from '...']\n    node.declaration = null;\n    node.specifiers = this.parseExportSpecifiers(exports);\n    if (this.eatContextual(\"from\")) {\n      if (this.type !== types$1.string) { this.unexpected(); }\n      node.source = this.parseExprAtom();\n    } else {\n      for (var i = 0, list = node.specifiers; i < list.length; i += 1) {\n        // check for keywords used as local names\n        var spec = list[i];\n\n        this.checkUnreserved(spec.local);\n        // check if export is defined\n        this.checkLocalExport(spec.local);\n\n        if (spec.local.type === \"Literal\") {\n          this.raise(spec.local.start, \"A string literal cannot be used as an exported binding without `from`.\");\n        }\n      }\n\n      node.source = null;\n    }\n    this.semicolon();\n  }\n  return this.finishNode(node, \"ExportNamedDeclaration\")\n};\n\npp$8.checkExport = function(exports, name, pos) {\n  if (!exports) { return }\n  if (typeof name !== \"string\")\n    { name = name.type === \"Identifier\" ? name.name : name.value; }\n  if (hasOwn(exports, name))\n    { this.raiseRecoverable(pos, \"Duplicate export '\" + name + \"'\"); }\n  exports[name] = true;\n};\n\npp$8.checkPatternExport = function(exports, pat) {\n  var type = pat.type;\n  if (type === \"Identifier\")\n    { this.checkExport(exports, pat, pat.start); }\n  else if (type === \"ObjectPattern\")\n    { for (var i = 0, list = pat.properties; i < list.length; i += 1)\n      {\n        var prop = list[i];\n\n        this.checkPatternExport(exports, prop);\n      } }\n  else if (type === \"ArrayPattern\")\n    { for (var i$1 = 0, list$1 = pat.elements; i$1 < list$1.length; i$1 += 1) {\n      var elt = list$1[i$1];\n\n        if (elt) { this.checkPatternExport(exports, elt); }\n    } }\n  else if (type === \"Property\")\n    { this.checkPatternExport(exports, pat.value); }\n  else if (type === \"AssignmentPattern\")\n    { this.checkPatternExport(exports, pat.left); }\n  else if (type === \"RestElement\")\n    { this.checkPatternExport(exports, pat.argument); }\n  else if (type === \"ParenthesizedExpression\")\n    { this.checkPatternExport(exports, pat.expression); }\n};\n\npp$8.checkVariableExport = function(exports, decls) {\n  if (!exports) { return }\n  for (var i = 0, list = decls; i < list.length; i += 1)\n    {\n    var decl = list[i];\n\n    this.checkPatternExport(exports, decl.id);\n  }\n};\n\npp$8.shouldParseExportStatement = function() {\n  return this.type.keyword === \"var\" ||\n    this.type.keyword === \"const\" ||\n    this.type.keyword === \"class\" ||\n    this.type.keyword === \"function\" ||\n    this.isLet() ||\n    this.isAsyncFunction()\n};\n\n// Parses a comma-separated list of module exports.\n\npp$8.parseExportSpecifiers = function(exports) {\n  var nodes = [], first = true;\n  // export { x, y as z } [from '...']\n  this.expect(types$1.braceL);\n  while (!this.eat(types$1.braceR)) {\n    if (!first) {\n      this.expect(types$1.comma);\n      if (this.afterTrailingComma(types$1.braceR)) { break }\n    } else { first = false; }\n\n    var node = this.startNode();\n    node.local = this.parseModuleExportName();\n    node.exported = this.eatContextual(\"as\") ? this.parseModuleExportName() : node.local;\n    this.checkExport(\n      exports,\n      node.exported,\n      node.exported.start\n    );\n    nodes.push(this.finishNode(node, \"ExportSpecifier\"));\n  }\n  return nodes\n};\n\n// Parses import declaration.\n\npp$8.parseImport = function(node) {\n  this.next();\n  // import '...'\n  if (this.type === types$1.string) {\n    node.specifiers = empty$1;\n    node.source = this.parseExprAtom();\n  } else {\n    node.specifiers = this.parseImportSpecifiers();\n    this.expectContextual(\"from\");\n    node.source = this.type === types$1.string ? this.parseExprAtom() : this.unexpected();\n  }\n  this.semicolon();\n  return this.finishNode(node, \"ImportDeclaration\")\n};\n\n// Parses a comma-separated list of module imports.\n\npp$8.parseImportSpecifiers = function() {\n  var nodes = [], first = true;\n  if (this.type === types$1.name) {\n    // import defaultObj, { x, y as z } from '...'\n    var node = this.startNode();\n    node.local = this.parseIdent();\n    this.checkLValSimple(node.local, BIND_LEXICAL);\n    nodes.push(this.finishNode(node, \"ImportDefaultSpecifier\"));\n    if (!this.eat(types$1.comma)) { return nodes }\n  }\n  if (this.type === types$1.star) {\n    var node$1 = this.startNode();\n    this.next();\n    this.expectContextual(\"as\");\n    node$1.local = this.parseIdent();\n    this.checkLValSimple(node$1.local, BIND_LEXICAL);\n    nodes.push(this.finishNode(node$1, \"ImportNamespaceSpecifier\"));\n    return nodes\n  }\n  this.expect(types$1.braceL);\n  while (!this.eat(types$1.braceR)) {\n    if (!first) {\n      this.expect(types$1.comma);\n      if (this.afterTrailingComma(types$1.braceR)) { break }\n    } else { first = false; }\n\n    var node$2 = this.startNode();\n    node$2.imported = this.parseModuleExportName();\n    if (this.eatContextual(\"as\")) {\n      node$2.local = this.parseIdent();\n    } else {\n      this.checkUnreserved(node$2.imported);\n      node$2.local = node$2.imported;\n    }\n    this.checkLValSimple(node$2.local, BIND_LEXICAL);\n    nodes.push(this.finishNode(node$2, \"ImportSpecifier\"));\n  }\n  return nodes\n};\n\npp$8.parseModuleExportName = function() {\n  if (this.options.ecmaVersion >= 13 && this.type === types$1.string) {\n    var stringLiteral = this.parseLiteral(this.value);\n    if (loneSurrogate.test(stringLiteral.value)) {\n      this.raise(stringLiteral.start, \"An export name cannot include a lone surrogate.\");\n    }\n    return stringLiteral\n  }\n  return this.parseIdent(true)\n};\n\n// Set `ExpressionStatement#directive` property for directive prologues.\npp$8.adaptDirectivePrologue = function(statements) {\n  for (var i = 0; i < statements.length && this.isDirectiveCandidate(statements[i]); ++i) {\n    statements[i].directive = statements[i].expression.raw.slice(1, -1);\n  }\n};\npp$8.isDirectiveCandidate = function(statement) {\n  return (\n    this.options.ecmaVersion >= 5 &&\n    statement.type === \"ExpressionStatement\" &&\n    statement.expression.type === \"Literal\" &&\n    typeof statement.expression.value === \"string\" &&\n    // Reject parenthesized strings.\n    (this.input[statement.start] === \"\\\"\" || this.input[statement.start] === \"'\")\n  )\n};\n\nvar pp$7 = Parser.prototype;\n\n// Convert existing expression atom to assignable pattern\n// if possible.\n\npp$7.toAssignable = function(node, isBinding, refDestructuringErrors) {\n  if (this.options.ecmaVersion >= 6 && node) {\n    switch (node.type) {\n    case \"Identifier\":\n      if (this.inAsync && node.name === \"await\")\n        { this.raise(node.start, \"Cannot use 'await' as identifier inside an async function\"); }\n      break\n\n    case \"ObjectPattern\":\n    case \"ArrayPattern\":\n    case \"AssignmentPattern\":\n    case \"RestElement\":\n      break\n\n    case \"ObjectExpression\":\n      node.type = \"ObjectPattern\";\n      if (refDestructuringErrors) { this.checkPatternErrors(refDestructuringErrors, true); }\n      for (var i = 0, list = node.properties; i < list.length; i += 1) {\n        var prop = list[i];\n\n      this.toAssignable(prop, isBinding);\n        // Early error:\n        //   AssignmentRestProperty[Yield, Await] :\n        //     `...` DestructuringAssignmentTarget[Yield, Await]\n        //\n        //   It is a Syntax Error if |DestructuringAssignmentTarget| is an |ArrayLiteral| or an |ObjectLiteral|.\n        if (\n          prop.type === \"RestElement\" &&\n          (prop.argument.type === \"ArrayPattern\" || prop.argument.type === \"ObjectPattern\")\n        ) {\n          this.raise(prop.argument.start, \"Unexpected token\");\n        }\n      }\n      break\n\n    case \"Property\":\n      // AssignmentProperty has type === \"Property\"\n      if (node.kind !== \"init\") { this.raise(node.key.start, \"Object pattern can't contain getter or setter\"); }\n      this.toAssignable(node.value, isBinding);\n      break\n\n    case \"ArrayExpression\":\n      node.type = \"ArrayPattern\";\n      if (refDestructuringErrors) { this.checkPatternErrors(refDestructuringErrors, true); }\n      this.toAssignableList(node.elements, isBinding);\n      break\n\n    case \"SpreadElement\":\n      node.type = \"RestElement\";\n      this.toAssignable(node.argument, isBinding);\n      if (node.argument.type === \"AssignmentPattern\")\n        { this.raise(node.argument.start, \"Rest elements cannot have a default value\"); }\n      break\n\n    case \"AssignmentExpression\":\n      if (node.operator !== \"=\") { this.raise(node.left.end, \"Only '=' operator can be used for specifying default value.\"); }\n      node.type = \"AssignmentPattern\";\n      delete node.operator;\n      this.toAssignable(node.left, isBinding);\n      break\n\n    case \"ParenthesizedExpression\":\n      this.toAssignable(node.expression, isBinding, refDestructuringErrors);\n      break\n\n    case \"ChainExpression\":\n      this.raiseRecoverable(node.start, \"Optional chaining cannot appear in left-hand side\");\n      break\n\n    case \"MemberExpression\":\n      if (!isBinding) { break }\n\n    default:\n      this.raise(node.start, \"Assigning to rvalue\");\n    }\n  } else if (refDestructuringErrors) { this.checkPatternErrors(refDestructuringErrors, true); }\n  return node\n};\n\n// Convert list of expression atoms to binding list.\n\npp$7.toAssignableList = function(exprList, isBinding) {\n  var end = exprList.length;\n  for (var i = 0; i < end; i++) {\n    var elt = exprList[i];\n    if (elt) { this.toAssignable(elt, isBinding); }\n  }\n  if (end) {\n    var last = exprList[end - 1];\n    if (this.options.ecmaVersion === 6 && isBinding && last && last.type === \"RestElement\" && last.argument.type !== \"Identifier\")\n      { this.unexpected(last.argument.start); }\n  }\n  return exprList\n};\n\n// Parses spread element.\n\npp$7.parseSpread = function(refDestructuringErrors) {\n  var node = this.startNode();\n  this.next();\n  node.argument = this.parseMaybeAssign(false, refDestructuringErrors);\n  return this.finishNode(node, \"SpreadElement\")\n};\n\npp$7.parseRestBinding = function() {\n  var node = this.startNode();\n  this.next();\n\n  // RestElement inside of a function parameter must be an identifier\n  if (this.options.ecmaVersion === 6 && this.type !== types$1.name)\n    { this.unexpected(); }\n\n  node.argument = this.parseBindingAtom();\n\n  return this.finishNode(node, \"RestElement\")\n};\n\n// Parses lvalue (assignable) atom.\n\npp$7.parseBindingAtom = function() {\n  if (this.options.ecmaVersion >= 6) {\n    switch (this.type) {\n    case types$1.bracketL:\n      var node = this.startNode();\n      this.next();\n      node.elements = this.parseBindingList(types$1.bracketR, true, true);\n      return this.finishNode(node, \"ArrayPattern\")\n\n    case types$1.braceL:\n      return this.parseObj(true)\n    }\n  }\n  return this.parseIdent()\n};\n\npp$7.parseBindingList = function(close, allowEmpty, allowTrailingComma) {\n  var elts = [], first = true;\n  while (!this.eat(close)) {\n    if (first) { first = false; }\n    else { this.expect(types$1.comma); }\n    if (allowEmpty && this.type === types$1.comma) {\n      elts.push(null);\n    } else if (allowTrailingComma && this.afterTrailingComma(close)) {\n      break\n    } else if (this.type === types$1.ellipsis) {\n      var rest = this.parseRestBinding();\n      this.parseBindingListItem(rest);\n      elts.push(rest);\n      if (this.type === types$1.comma) { this.raise(this.start, \"Comma is not permitted after the rest element\"); }\n      this.expect(close);\n      break\n    } else {\n      var elem = this.parseMaybeDefault(this.start, this.startLoc);\n      this.parseBindingListItem(elem);\n      elts.push(elem);\n    }\n  }\n  return elts\n};\n\npp$7.parseBindingListItem = function(param) {\n  return param\n};\n\n// Parses assignment pattern around given atom if possible.\n\npp$7.parseMaybeDefault = function(startPos, startLoc, left) {\n  left = left || this.parseBindingAtom();\n  if (this.options.ecmaVersion < 6 || !this.eat(types$1.eq)) { return left }\n  var node = this.startNodeAt(startPos, startLoc);\n  node.left = left;\n  node.right = this.parseMaybeAssign();\n  return this.finishNode(node, \"AssignmentPattern\")\n};\n\n// The following three functions all verify that a node is an lvalue —\n// something that can be bound, or assigned to. In order to do so, they perform\n// a variety of checks:\n//\n// - Check that none of the bound/assigned-to identifiers are reserved words.\n// - Record name declarations for bindings in the appropriate scope.\n// - Check duplicate argument names, if checkClashes is set.\n//\n// If a complex binding pattern is encountered (e.g., object and array\n// destructuring), the entire pattern is recursively checked.\n//\n// There are three versions of checkLVal*() appropriate for different\n// circumstances:\n//\n// - checkLValSimple() shall be used if the syntactic construct supports\n//   nothing other than identifiers and member expressions. Parenthesized\n//   expressions are also correctly handled. This is generally appropriate for\n//   constructs for which the spec says\n//\n//   > It is a Syntax Error if AssignmentTargetType of [the production] is not\n//   > simple.\n//\n//   It is also appropriate for checking if an identifier is valid and not\n//   defined elsewhere, like import declarations or function/class identifiers.\n//\n//   Examples where this is used include:\n//     a += …;\n//     import a from '…';\n//   where a is the node to be checked.\n//\n// - checkLValPattern() shall be used if the syntactic construct supports\n//   anything checkLValSimple() supports, as well as object and array\n//   destructuring patterns. This is generally appropriate for constructs for\n//   which the spec says\n//\n//   > It is a Syntax Error if [the production] is neither an ObjectLiteral nor\n//   > an ArrayLiteral and AssignmentTargetType of [the production] is not\n//   > simple.\n//\n//   Examples where this is used include:\n//     (a = …);\n//     const a = …;\n//     try { … } catch (a) { … }\n//   where a is the node to be checked.\n//\n// - checkLValInnerPattern() shall be used if the syntactic construct supports\n//   anything checkLValPattern() supports, as well as default assignment\n//   patterns, rest elements, and other constructs that may appear within an\n//   object or array destructuring pattern.\n//\n//   As a special case, function parameters also use checkLValInnerPattern(),\n//   as they also support defaults and rest constructs.\n//\n// These functions deliberately support both assignment and binding constructs,\n// as the logic for both is exceedingly similar. If the node is the target of\n// an assignment, then bindingType should be set to BIND_NONE. Otherwise, it\n// should be set to the appropriate BIND_* constant, like BIND_VAR or\n// BIND_LEXICAL.\n//\n// If the function is called with a non-BIND_NONE bindingType, then\n// additionally a checkClashes object may be specified to allow checking for\n// duplicate argument names. checkClashes is ignored if the provided construct\n// is an assignment (i.e., bindingType is BIND_NONE).\n\npp$7.checkLValSimple = function(expr, bindingType, checkClashes) {\n  if ( bindingType === void 0 ) bindingType = BIND_NONE;\n\n  var isBind = bindingType !== BIND_NONE;\n\n  switch (expr.type) {\n  case \"Identifier\":\n    if (this.strict && this.reservedWordsStrictBind.test(expr.name))\n      { this.raiseRecoverable(expr.start, (isBind ? \"Binding \" : \"Assigning to \") + expr.name + \" in strict mode\"); }\n    if (isBind) {\n      if (bindingType === BIND_LEXICAL && expr.name === \"let\")\n        { this.raiseRecoverable(expr.start, \"let is disallowed as a lexically bound name\"); }\n      if (checkClashes) {\n        if (hasOwn(checkClashes, expr.name))\n          { this.raiseRecoverable(expr.start, \"Argument name clash\"); }\n        checkClashes[expr.name] = true;\n      }\n      if (bindingType !== BIND_OUTSIDE) { this.declareName(expr.name, bindingType, expr.start); }\n    }\n    break\n\n  case \"ChainExpression\":\n    this.raiseRecoverable(expr.start, \"Optional chaining cannot appear in left-hand side\");\n    break\n\n  case \"MemberExpression\":\n    if (isBind) { this.raiseRecoverable(expr.start, \"Binding member expression\"); }\n    break\n\n  case \"ParenthesizedExpression\":\n    if (isBind) { this.raiseRecoverable(expr.start, \"Binding parenthesized expression\"); }\n    return this.checkLValSimple(expr.expression, bindingType, checkClashes)\n\n  default:\n    this.raise(expr.start, (isBind ? \"Binding\" : \"Assigning to\") + \" rvalue\");\n  }\n};\n\npp$7.checkLValPattern = function(expr, bindingType, checkClashes) {\n  if ( bindingType === void 0 ) bindingType = BIND_NONE;\n\n  switch (expr.type) {\n  case \"ObjectPattern\":\n    for (var i = 0, list = expr.properties; i < list.length; i += 1) {\n      var prop = list[i];\n\n    this.checkLValInnerPattern(prop, bindingType, checkClashes);\n    }\n    break\n\n  case \"ArrayPattern\":\n    for (var i$1 = 0, list$1 = expr.elements; i$1 < list$1.length; i$1 += 1) {\n      var elem = list$1[i$1];\n\n    if (elem) { this.checkLValInnerPattern(elem, bindingType, checkClashes); }\n    }\n    break\n\n  default:\n    this.checkLValSimple(expr, bindingType, checkClashes);\n  }\n};\n\npp$7.checkLValInnerPattern = function(expr, bindingType, checkClashes) {\n  if ( bindingType === void 0 ) bindingType = BIND_NONE;\n\n  switch (expr.type) {\n  case \"Property\":\n    // AssignmentProperty has type === \"Property\"\n    this.checkLValInnerPattern(expr.value, bindingType, checkClashes);\n    break\n\n  case \"AssignmentPattern\":\n    this.checkLValPattern(expr.left, bindingType, checkClashes);\n    break\n\n  case \"RestElement\":\n    this.checkLValPattern(expr.argument, bindingType, checkClashes);\n    break\n\n  default:\n    this.checkLValPattern(expr, bindingType, checkClashes);\n  }\n};\n\n// The algorithm used to determine whether a regexp can appear at a\n\nvar TokContext = function TokContext(token, isExpr, preserveSpace, override, generator) {\n  this.token = token;\n  this.isExpr = !!isExpr;\n  this.preserveSpace = !!preserveSpace;\n  this.override = override;\n  this.generator = !!generator;\n};\n\nvar types = {\n  b_stat: new TokContext(\"{\", false),\n  b_expr: new TokContext(\"{\", true),\n  b_tmpl: new TokContext(\"${\", false),\n  p_stat: new TokContext(\"(\", false),\n  p_expr: new TokContext(\"(\", true),\n  q_tmpl: new TokContext(\"`\", true, true, function (p) { return p.tryReadTemplateToken(); }),\n  f_stat: new TokContext(\"function\", false),\n  f_expr: new TokContext(\"function\", true),\n  f_expr_gen: new TokContext(\"function\", true, false, null, true),\n  f_gen: new TokContext(\"function\", false, false, null, true)\n};\n\nvar pp$6 = Parser.prototype;\n\npp$6.initialContext = function() {\n  return [types.b_stat]\n};\n\npp$6.curContext = function() {\n  return this.context[this.context.length - 1]\n};\n\npp$6.braceIsBlock = function(prevType) {\n  var parent = this.curContext();\n  if (parent === types.f_expr || parent === types.f_stat)\n    { return true }\n  if (prevType === types$1.colon && (parent === types.b_stat || parent === types.b_expr))\n    { return !parent.isExpr }\n\n  // The check for `tt.name && exprAllowed` detects whether we are\n  // after a `yield` or `of` construct. See the `updateContext` for\n  // `tt.name`.\n  if (prevType === types$1._return || prevType === types$1.name && this.exprAllowed)\n    { return lineBreak.test(this.input.slice(this.lastTokEnd, this.start)) }\n  if (prevType === types$1._else || prevType === types$1.semi || prevType === types$1.eof || prevType === types$1.parenR || prevType === types$1.arrow)\n    { return true }\n  if (prevType === types$1.braceL)\n    { return parent === types.b_stat }\n  if (prevType === types$1._var || prevType === types$1._const || prevType === types$1.name)\n    { return false }\n  return !this.exprAllowed\n};\n\npp$6.inGeneratorContext = function() {\n  for (var i = this.context.length - 1; i >= 1; i--) {\n    var context = this.context[i];\n    if (context.token === \"function\")\n      { return context.generator }\n  }\n  return false\n};\n\npp$6.updateContext = function(prevType) {\n  var update, type = this.type;\n  if (type.keyword && prevType === types$1.dot)\n    { this.exprAllowed = false; }\n  else if (update = type.updateContext)\n    { update.call(this, prevType); }\n  else\n    { this.exprAllowed = type.beforeExpr; }\n};\n\n// Used to handle egde cases when token context could not be inferred correctly during tokenization phase\n\npp$6.overrideContext = function(tokenCtx) {\n  if (this.curContext() !== tokenCtx) {\n    this.context[this.context.length - 1] = tokenCtx;\n  }\n};\n\n// Token-specific context update code\n\ntypes$1.parenR.updateContext = types$1.braceR.updateContext = function() {\n  if (this.context.length === 1) {\n    this.exprAllowed = true;\n    return\n  }\n  var out = this.context.pop();\n  if (out === types.b_stat && this.curContext().token === \"function\") {\n    out = this.context.pop();\n  }\n  this.exprAllowed = !out.isExpr;\n};\n\ntypes$1.braceL.updateContext = function(prevType) {\n  this.context.push(this.braceIsBlock(prevType) ? types.b_stat : types.b_expr);\n  this.exprAllowed = true;\n};\n\ntypes$1.dollarBraceL.updateContext = function() {\n  this.context.push(types.b_tmpl);\n  this.exprAllowed = true;\n};\n\ntypes$1.parenL.updateContext = function(prevType) {\n  var statementParens = prevType === types$1._if || prevType === types$1._for || prevType === types$1._with || prevType === types$1._while;\n  this.context.push(statementParens ? types.p_stat : types.p_expr);\n  this.exprAllowed = true;\n};\n\ntypes$1.incDec.updateContext = function() {\n  // tokExprAllowed stays unchanged\n};\n\ntypes$1._function.updateContext = types$1._class.updateContext = function(prevType) {\n  if (prevType.beforeExpr && prevType !== types$1._else &&\n      !(prevType === types$1.semi && this.curContext() !== types.p_stat) &&\n      !(prevType === types$1._return && lineBreak.test(this.input.slice(this.lastTokEnd, this.start))) &&\n      !((prevType === types$1.colon || prevType === types$1.braceL) && this.curContext() === types.b_stat))\n    { this.context.push(types.f_expr); }\n  else\n    { this.context.push(types.f_stat); }\n  this.exprAllowed = false;\n};\n\ntypes$1.backQuote.updateContext = function() {\n  if (this.curContext() === types.q_tmpl)\n    { this.context.pop(); }\n  else\n    { this.context.push(types.q_tmpl); }\n  this.exprAllowed = false;\n};\n\ntypes$1.star.updateContext = function(prevType) {\n  if (prevType === types$1._function) {\n    var index = this.context.length - 1;\n    if (this.context[index] === types.f_expr)\n      { this.context[index] = types.f_expr_gen; }\n    else\n      { this.context[index] = types.f_gen; }\n  }\n  this.exprAllowed = true;\n};\n\ntypes$1.name.updateContext = function(prevType) {\n  var allowed = false;\n  if (this.options.ecmaVersion >= 6 && prevType !== types$1.dot) {\n    if (this.value === \"of\" && !this.exprAllowed ||\n        this.value === \"yield\" && this.inGeneratorContext())\n      { allowed = true; }\n  }\n  this.exprAllowed = allowed;\n};\n\n// A recursive descent parser operates by defining functions for all\n\nvar pp$5 = Parser.prototype;\n\n// Check if property name clashes with already added.\n// Object/class getters and setters are not allowed to clash —\n// either with each other or with an init property — and in\n// strict mode, init properties are also not allowed to be repeated.\n\npp$5.checkPropClash = function(prop, propHash, refDestructuringErrors) {\n  if (this.options.ecmaVersion >= 9 && prop.type === \"SpreadElement\")\n    { return }\n  if (this.options.ecmaVersion >= 6 && (prop.computed || prop.method || prop.shorthand))\n    { return }\n  var key = prop.key;\n  var name;\n  switch (key.type) {\n  case \"Identifier\": name = key.name; break\n  case \"Literal\": name = String(key.value); break\n  default: return\n  }\n  var kind = prop.kind;\n  if (this.options.ecmaVersion >= 6) {\n    if (name === \"__proto__\" && kind === \"init\") {\n      if (propHash.proto) {\n        if (refDestructuringErrors) {\n          if (refDestructuringErrors.doubleProto < 0) {\n            refDestructuringErrors.doubleProto = key.start;\n          }\n        } else {\n          this.raiseRecoverable(key.start, \"Redefinition of __proto__ property\");\n        }\n      }\n      propHash.proto = true;\n    }\n    return\n  }\n  name = \"$\" + name;\n  var other = propHash[name];\n  if (other) {\n    var redefinition;\n    if (kind === \"init\") {\n      redefinition = this.strict && other.init || other.get || other.set;\n    } else {\n      redefinition = other.init || other[kind];\n    }\n    if (redefinition)\n      { this.raiseRecoverable(key.start, \"Redefinition of property\"); }\n  } else {\n    other = propHash[name] = {\n      init: false,\n      get: false,\n      set: false\n    };\n  }\n  other[kind] = true;\n};\n\n// ### Expression parsing\n\n// These nest, from the most general expression type at the top to\n// 'atomic', nondivisible expression types at the bottom. Most of\n// the functions will simply let the function(s) below them parse,\n// and, *if* the syntactic construct they handle is present, wrap\n// the AST node that the inner parser gave them in another node.\n\n// Parse a full expression. The optional arguments are used to\n// forbid the `in` operator (in for loops initalization expressions)\n// and provide reference for storing '=' operator inside shorthand\n// property assignment in contexts where both object expression\n// and object pattern might appear (so it's possible to raise\n// delayed syntax error at correct position).\n\npp$5.parseExpression = function(forInit, refDestructuringErrors) {\n  var startPos = this.start, startLoc = this.startLoc;\n  var expr = this.parseMaybeAssign(forInit, refDestructuringErrors);\n  if (this.type === types$1.comma) {\n    var node = this.startNodeAt(startPos, startLoc);\n    node.expressions = [expr];\n    while (this.eat(types$1.comma)) { node.expressions.push(this.parseMaybeAssign(forInit, refDestructuringErrors)); }\n    return this.finishNode(node, \"SequenceExpression\")\n  }\n  return expr\n};\n\n// Parse an assignment expression. This includes applications of\n// operators like `+=`.\n\npp$5.parseMaybeAssign = function(forInit, refDestructuringErrors, afterLeftParse) {\n  if (this.isContextual(\"yield\")) {\n    if (this.inGenerator) { return this.parseYield(forInit) }\n    // The tokenizer will assume an expression is allowed after\n    // `yield`, but this isn't that kind of yield\n    else { this.exprAllowed = false; }\n  }\n\n  var ownDestructuringErrors = false, oldParenAssign = -1, oldTrailingComma = -1, oldDoubleProto = -1;\n  if (refDestructuringErrors) {\n    oldParenAssign = refDestructuringErrors.parenthesizedAssign;\n    oldTrailingComma = refDestructuringErrors.trailingComma;\n    oldDoubleProto = refDestructuringErrors.doubleProto;\n    refDestructuringErrors.parenthesizedAssign = refDestructuringErrors.trailingComma = -1;\n  } else {\n    refDestructuringErrors = new DestructuringErrors;\n    ownDestructuringErrors = true;\n  }\n\n  var startPos = this.start, startLoc = this.startLoc;\n  if (this.type === types$1.parenL || this.type === types$1.name) {\n    this.potentialArrowAt = this.start;\n    this.potentialArrowInForAwait = forInit === \"await\";\n  }\n  var left = this.parseMaybeConditional(forInit, refDestructuringErrors);\n  if (afterLeftParse) { left = afterLeftParse.call(this, left, startPos, startLoc); }\n  if (this.type.isAssign) {\n    var node = this.startNodeAt(startPos, startLoc);\n    node.operator = this.value;\n    if (this.type === types$1.eq)\n      { left = this.toAssignable(left, false, refDestructuringErrors); }\n    if (!ownDestructuringErrors) {\n      refDestructuringErrors.parenthesizedAssign = refDestructuringErrors.trailingComma = refDestructuringErrors.doubleProto = -1;\n    }\n    if (refDestructuringErrors.shorthandAssign >= left.start)\n      { refDestructuringErrors.shorthandAssign = -1; } // reset because shorthand default was used correctly\n    if (this.type === types$1.eq)\n      { this.checkLValPattern(left); }\n    else\n      { this.checkLValSimple(left); }\n    node.left = left;\n    this.next();\n    node.right = this.parseMaybeAssign(forInit);\n    if (oldDoubleProto > -1) { refDestructuringErrors.doubleProto = oldDoubleProto; }\n    return this.finishNode(node, \"AssignmentExpression\")\n  } else {\n    if (ownDestructuringErrors) { this.checkExpressionErrors(refDestructuringErrors, true); }\n  }\n  if (oldParenAssign > -1) { refDestructuringErrors.parenthesizedAssign = oldParenAssign; }\n  if (oldTrailingComma > -1) { refDestructuringErrors.trailingComma = oldTrailingComma; }\n  return left\n};\n\n// Parse a ternary conditional (`?:`) operator.\n\npp$5.parseMaybeConditional = function(forInit, refDestructuringErrors) {\n  var startPos = this.start, startLoc = this.startLoc;\n  var expr = this.parseExprOps(forInit, refDestructuringErrors);\n  if (this.checkExpressionErrors(refDestructuringErrors)) { return expr }\n  if (this.eat(types$1.question)) {\n    var node = this.startNodeAt(startPos, startLoc);\n    node.test = expr;\n    node.consequent = this.parseMaybeAssign();\n    this.expect(types$1.colon);\n    node.alternate = this.parseMaybeAssign(forInit);\n    return this.finishNode(node, \"ConditionalExpression\")\n  }\n  return expr\n};\n\n// Start the precedence parser.\n\npp$5.parseExprOps = function(forInit, refDestructuringErrors) {\n  var startPos = this.start, startLoc = this.startLoc;\n  var expr = this.parseMaybeUnary(refDestructuringErrors, false, false, forInit);\n  if (this.checkExpressionErrors(refDestructuringErrors)) { return expr }\n  return expr.start === startPos && expr.type === \"ArrowFunctionExpression\" ? expr : this.parseExprOp(expr, startPos, startLoc, -1, forInit)\n};\n\n// Parse binary operators with the operator precedence parsing\n// algorithm. `left` is the left-hand side of the operator.\n// `minPrec` provides context that allows the function to stop and\n// defer further parser to one of its callers when it encounters an\n// operator that has a lower precedence than the set it is parsing.\n\npp$5.parseExprOp = function(left, leftStartPos, leftStartLoc, minPrec, forInit) {\n  var prec = this.type.binop;\n  if (prec != null && (!forInit || this.type !== types$1._in)) {\n    if (prec > minPrec) {\n      var logical = this.type === types$1.logicalOR || this.type === types$1.logicalAND;\n      var coalesce = this.type === types$1.coalesce;\n      if (coalesce) {\n        // Handle the precedence of `tt.coalesce` as equal to the range of logical expressions.\n        // In other words, `node.right` shouldn't contain logical expressions in order to check the mixed error.\n        prec = types$1.logicalAND.binop;\n      }\n      var op = this.value;\n      this.next();\n      var startPos = this.start, startLoc = this.startLoc;\n      var right = this.parseExprOp(this.parseMaybeUnary(null, false, false, forInit), startPos, startLoc, prec, forInit);\n      var node = this.buildBinary(leftStartPos, leftStartLoc, left, right, op, logical || coalesce);\n      if ((logical && this.type === types$1.coalesce) || (coalesce && (this.type === types$1.logicalOR || this.type === types$1.logicalAND))) {\n        this.raiseRecoverable(this.start, \"Logical expressions and coalesce expressions cannot be mixed. Wrap either by parentheses\");\n      }\n      return this.parseExprOp(node, leftStartPos, leftStartLoc, minPrec, forInit)\n    }\n  }\n  return left\n};\n\npp$5.buildBinary = function(startPos, startLoc, left, right, op, logical) {\n  if (right.type === \"PrivateIdentifier\") { this.raise(right.start, \"Private identifier can only be left side of binary expression\"); }\n  var node = this.startNodeAt(startPos, startLoc);\n  node.left = left;\n  node.operator = op;\n  node.right = right;\n  return this.finishNode(node, logical ? \"LogicalExpression\" : \"BinaryExpression\")\n};\n\n// Parse unary operators, both prefix and postfix.\n\npp$5.parseMaybeUnary = function(refDestructuringErrors, sawUnary, incDec, forInit) {\n  var startPos = this.start, startLoc = this.startLoc, expr;\n  if (this.isContextual(\"await\") && this.canAwait) {\n    expr = this.parseAwait(forInit);\n    sawUnary = true;\n  } else if (this.type.prefix) {\n    var node = this.startNode(), update = this.type === types$1.incDec;\n    node.operator = this.value;\n    node.prefix = true;\n    this.next();\n    node.argument = this.parseMaybeUnary(null, true, update, forInit);\n    this.checkExpressionErrors(refDestructuringErrors, true);\n    if (update) { this.checkLValSimple(node.argument); }\n    else if (this.strict && node.operator === \"delete\" &&\n             node.argument.type === \"Identifier\")\n      { this.raiseRecoverable(node.start, \"Deleting local variable in strict mode\"); }\n    else if (node.operator === \"delete\" && isPrivateFieldAccess(node.argument))\n      { this.raiseRecoverable(node.start, \"Private fields can not be deleted\"); }\n    else { sawUnary = true; }\n    expr = this.finishNode(node, update ? \"UpdateExpression\" : \"UnaryExpression\");\n  } else if (!sawUnary && this.type === types$1.privateId) {\n    if (forInit || this.privateNameStack.length === 0) { this.unexpected(); }\n    expr = this.parsePrivateIdent();\n    // only could be private fields in 'in', such as #x in obj\n    if (this.type !== types$1._in) { this.unexpected(); }\n  } else {\n    expr = this.parseExprSubscripts(refDestructuringErrors, forInit);\n    if (this.checkExpressionErrors(refDestructuringErrors)) { return expr }\n    while (this.type.postfix && !this.canInsertSemicolon()) {\n      var node$1 = this.startNodeAt(startPos, startLoc);\n      node$1.operator = this.value;\n      node$1.prefix = false;\n      node$1.argument = expr;\n      this.checkLValSimple(expr);\n      this.next();\n      expr = this.finishNode(node$1, \"UpdateExpression\");\n    }\n  }\n\n  if (!incDec && this.eat(types$1.starstar)) {\n    if (sawUnary)\n      { this.unexpected(this.lastTokStart); }\n    else\n      { return this.buildBinary(startPos, startLoc, expr, this.parseMaybeUnary(null, false, false, forInit), \"**\", false) }\n  } else {\n    return expr\n  }\n};\n\nfunction isPrivateFieldAccess(node) {\n  return (\n    node.type === \"MemberExpression\" && node.property.type === \"PrivateIdentifier\" ||\n    node.type === \"ChainExpression\" && isPrivateFieldAccess(node.expression)\n  )\n}\n\n// Parse call, dot, and `[]`-subscript expressions.\n\npp$5.parseExprSubscripts = function(refDestructuringErrors, forInit) {\n  var startPos = this.start, startLoc = this.startLoc;\n  var expr = this.parseExprAtom(refDestructuringErrors, forInit);\n  if (expr.type === \"ArrowFunctionExpression\" && this.input.slice(this.lastTokStart, this.lastTokEnd) !== \")\")\n    { return expr }\n  var result = this.parseSubscripts(expr, startPos, startLoc, false, forInit);\n  if (refDestructuringErrors && result.type === \"MemberExpression\") {\n    if (refDestructuringErrors.parenthesizedAssign >= result.start) { refDestructuringErrors.parenthesizedAssign = -1; }\n    if (refDestructuringErrors.parenthesizedBind >= result.start) { refDestructuringErrors.parenthesizedBind = -1; }\n    if (refDestructuringErrors.trailingComma >= result.start) { refDestructuringErrors.trailingComma = -1; }\n  }\n  return result\n};\n\npp$5.parseSubscripts = function(base, startPos, startLoc, noCalls, forInit) {\n  var maybeAsyncArrow = this.options.ecmaVersion >= 8 && base.type === \"Identifier\" && base.name === \"async\" &&\n      this.lastTokEnd === base.end && !this.canInsertSemicolon() && base.end - base.start === 5 &&\n      this.potentialArrowAt === base.start;\n  var optionalChained = false;\n\n  while (true) {\n    var element = this.parseSubscript(base, startPos, startLoc, noCalls, maybeAsyncArrow, optionalChained, forInit);\n\n    if (element.optional) { optionalChained = true; }\n    if (element === base || element.type === \"ArrowFunctionExpression\") {\n      if (optionalChained) {\n        var chainNode = this.startNodeAt(startPos, startLoc);\n        chainNode.expression = element;\n        element = this.finishNode(chainNode, \"ChainExpression\");\n      }\n      return element\n    }\n\n    base = element;\n  }\n};\n\npp$5.parseSubscript = function(base, startPos, startLoc, noCalls, maybeAsyncArrow, optionalChained, forInit) {\n  var optionalSupported = this.options.ecmaVersion >= 11;\n  var optional = optionalSupported && this.eat(types$1.questionDot);\n  if (noCalls && optional) { this.raise(this.lastTokStart, \"Optional chaining cannot appear in the callee of new expressions\"); }\n\n  var computed = this.eat(types$1.bracketL);\n  if (computed || (optional && this.type !== types$1.parenL && this.type !== types$1.backQuote) || this.eat(types$1.dot)) {\n    var node = this.startNodeAt(startPos, startLoc);\n    node.object = base;\n    if (computed) {\n      node.property = this.parseExpression();\n      this.expect(types$1.bracketR);\n    } else if (this.type === types$1.privateId && base.type !== \"Super\") {\n      node.property = this.parsePrivateIdent();\n    } else {\n      node.property = this.parseIdent(this.options.allowReserved !== \"never\");\n    }\n    node.computed = !!computed;\n    if (optionalSupported) {\n      node.optional = optional;\n    }\n    base = this.finishNode(node, \"MemberExpression\");\n  } else if (!noCalls && this.eat(types$1.parenL)) {\n    var refDestructuringErrors = new DestructuringErrors, oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n    this.yieldPos = 0;\n    this.awaitPos = 0;\n    this.awaitIdentPos = 0;\n    var exprList = this.parseExprList(types$1.parenR, this.options.ecmaVersion >= 8, false, refDestructuringErrors);\n    if (maybeAsyncArrow && !optional && !this.canInsertSemicolon() && this.eat(types$1.arrow)) {\n      this.checkPatternErrors(refDestructuringErrors, false);\n      this.checkYieldAwaitInDefaultParams();\n      if (this.awaitIdentPos > 0)\n        { this.raise(this.awaitIdentPos, \"Cannot use 'await' as identifier inside an async function\"); }\n      this.yieldPos = oldYieldPos;\n      this.awaitPos = oldAwaitPos;\n      this.awaitIdentPos = oldAwaitIdentPos;\n      return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), exprList, true, forInit)\n    }\n    this.checkExpressionErrors(refDestructuringErrors, true);\n    this.yieldPos = oldYieldPos || this.yieldPos;\n    this.awaitPos = oldAwaitPos || this.awaitPos;\n    this.awaitIdentPos = oldAwaitIdentPos || this.awaitIdentPos;\n    var node$1 = this.startNodeAt(startPos, startLoc);\n    node$1.callee = base;\n    node$1.arguments = exprList;\n    if (optionalSupported) {\n      node$1.optional = optional;\n    }\n    base = this.finishNode(node$1, \"CallExpression\");\n  } else if (this.type === types$1.backQuote) {\n    if (optional || optionalChained) {\n      this.raise(this.start, \"Optional chaining cannot appear in the tag of tagged template expressions\");\n    }\n    var node$2 = this.startNodeAt(startPos, startLoc);\n    node$2.tag = base;\n    node$2.quasi = this.parseTemplate({isTagged: true});\n    base = this.finishNode(node$2, \"TaggedTemplateExpression\");\n  }\n  return base\n};\n\n// Parse an atomic expression — either a single token that is an\n// expression, an expression started by a keyword like `function` or\n// `new`, or an expression wrapped in punctuation like `()`, `[]`,\n// or `{}`.\n\npp$5.parseExprAtom = function(refDestructuringErrors, forInit) {\n  // If a division operator appears in an expression position, the\n  // tokenizer got confused, and we force it to read a regexp instead.\n  if (this.type === types$1.slash) { this.readRegexp(); }\n\n  var node, canBeArrow = this.potentialArrowAt === this.start;\n  switch (this.type) {\n  case types$1._super:\n    if (!this.allowSuper)\n      { this.raise(this.start, \"'super' keyword outside a method\"); }\n    node = this.startNode();\n    this.next();\n    if (this.type === types$1.parenL && !this.allowDirectSuper)\n      { this.raise(node.start, \"super() call outside constructor of a subclass\"); }\n    // The `super` keyword can appear at below:\n    // SuperProperty:\n    //     super [ Expression ]\n    //     super . IdentifierName\n    // SuperCall:\n    //     super ( Arguments )\n    if (this.type !== types$1.dot && this.type !== types$1.bracketL && this.type !== types$1.parenL)\n      { this.unexpected(); }\n    return this.finishNode(node, \"Super\")\n\n  case types$1._this:\n    node = this.startNode();\n    this.next();\n    return this.finishNode(node, \"ThisExpression\")\n\n  case types$1.name:\n    var startPos = this.start, startLoc = this.startLoc, containsEsc = this.containsEsc;\n    var id = this.parseIdent(false);\n    if (this.options.ecmaVersion >= 8 && !containsEsc && id.name === \"async\" && !this.canInsertSemicolon() && this.eat(types$1._function)) {\n      this.overrideContext(types.f_expr);\n      return this.parseFunction(this.startNodeAt(startPos, startLoc), 0, false, true, forInit)\n    }\n    if (canBeArrow && !this.canInsertSemicolon()) {\n      if (this.eat(types$1.arrow))\n        { return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), [id], false, forInit) }\n      if (this.options.ecmaVersion >= 8 && id.name === \"async\" && this.type === types$1.name && !containsEsc &&\n          (!this.potentialArrowInForAwait || this.value !== \"of\" || this.containsEsc)) {\n        id = this.parseIdent(false);\n        if (this.canInsertSemicolon() || !this.eat(types$1.arrow))\n          { this.unexpected(); }\n        return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), [id], true, forInit)\n      }\n    }\n    return id\n\n  case types$1.regexp:\n    var value = this.value;\n    node = this.parseLiteral(value.value);\n    node.regex = {pattern: value.pattern, flags: value.flags};\n    return node\n\n  case types$1.num: case types$1.string:\n    return this.parseLiteral(this.value)\n\n  case types$1._null: case types$1._true: case types$1._false:\n    node = this.startNode();\n    node.value = this.type === types$1._null ? null : this.type === types$1._true;\n    node.raw = this.type.keyword;\n    this.next();\n    return this.finishNode(node, \"Literal\")\n\n  case types$1.parenL:\n    var start = this.start, expr = this.parseParenAndDistinguishExpression(canBeArrow, forInit);\n    if (refDestructuringErrors) {\n      if (refDestructuringErrors.parenthesizedAssign < 0 && !this.isSimpleAssignTarget(expr))\n        { refDestructuringErrors.parenthesizedAssign = start; }\n      if (refDestructuringErrors.parenthesizedBind < 0)\n        { refDestructuringErrors.parenthesizedBind = start; }\n    }\n    return expr\n\n  case types$1.bracketL:\n    node = this.startNode();\n    this.next();\n    node.elements = this.parseExprList(types$1.bracketR, true, true, refDestructuringErrors);\n    return this.finishNode(node, \"ArrayExpression\")\n\n  case types$1.braceL:\n    this.overrideContext(types.b_expr);\n    return this.parseObj(false, refDestructuringErrors)\n\n  case types$1._function:\n    node = this.startNode();\n    this.next();\n    return this.parseFunction(node, 0)\n\n  case types$1._class:\n    return this.parseClass(this.startNode(), false)\n\n  case types$1._new:\n    return this.parseNew()\n\n  case types$1.backQuote:\n    return this.parseTemplate()\n\n  case types$1._import:\n    if (this.options.ecmaVersion >= 11) {\n      return this.parseExprImport()\n    } else {\n      return this.unexpected()\n    }\n\n  default:\n    this.unexpected();\n  }\n};\n\npp$5.parseExprImport = function() {\n  var node = this.startNode();\n\n  // Consume `import` as an identifier for `import.meta`.\n  // Because `this.parseIdent(true)` doesn't check escape sequences, it needs the check of `this.containsEsc`.\n  if (this.containsEsc) { this.raiseRecoverable(this.start, \"Escape sequence in keyword import\"); }\n  var meta = this.parseIdent(true);\n\n  switch (this.type) {\n  case types$1.parenL:\n    return this.parseDynamicImport(node)\n  case types$1.dot:\n    node.meta = meta;\n    return this.parseImportMeta(node)\n  default:\n    this.unexpected();\n  }\n};\n\npp$5.parseDynamicImport = function(node) {\n  this.next(); // skip `(`\n\n  // Parse node.source.\n  node.source = this.parseMaybeAssign();\n\n  // Verify ending.\n  if (!this.eat(types$1.parenR)) {\n    var errorPos = this.start;\n    if (this.eat(types$1.comma) && this.eat(types$1.parenR)) {\n      this.raiseRecoverable(errorPos, \"Trailing comma is not allowed in import()\");\n    } else {\n      this.unexpected(errorPos);\n    }\n  }\n\n  return this.finishNode(node, \"ImportExpression\")\n};\n\npp$5.parseImportMeta = function(node) {\n  this.next(); // skip `.`\n\n  var containsEsc = this.containsEsc;\n  node.property = this.parseIdent(true);\n\n  if (node.property.name !== \"meta\")\n    { this.raiseRecoverable(node.property.start, \"The only valid meta property for import is 'import.meta'\"); }\n  if (containsEsc)\n    { this.raiseRecoverable(node.start, \"'import.meta' must not contain escaped characters\"); }\n  if (this.options.sourceType !== \"module\" && !this.options.allowImportExportEverywhere)\n    { this.raiseRecoverable(node.start, \"Cannot use 'import.meta' outside a module\"); }\n\n  return this.finishNode(node, \"MetaProperty\")\n};\n\npp$5.parseLiteral = function(value) {\n  var node = this.startNode();\n  node.value = value;\n  node.raw = this.input.slice(this.start, this.end);\n  if (node.raw.charCodeAt(node.raw.length - 1) === 110) { node.bigint = node.raw.slice(0, -1).replace(/_/g, \"\"); }\n  this.next();\n  return this.finishNode(node, \"Literal\")\n};\n\npp$5.parseParenExpression = function() {\n  this.expect(types$1.parenL);\n  var val = this.parseExpression();\n  this.expect(types$1.parenR);\n  return val\n};\n\npp$5.parseParenAndDistinguishExpression = function(canBeArrow, forInit) {\n  var startPos = this.start, startLoc = this.startLoc, val, allowTrailingComma = this.options.ecmaVersion >= 8;\n  if (this.options.ecmaVersion >= 6) {\n    this.next();\n\n    var innerStartPos = this.start, innerStartLoc = this.startLoc;\n    var exprList = [], first = true, lastIsComma = false;\n    var refDestructuringErrors = new DestructuringErrors, oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, spreadStart;\n    this.yieldPos = 0;\n    this.awaitPos = 0;\n    // Do not save awaitIdentPos to allow checking awaits nested in parameters\n    while (this.type !== types$1.parenR) {\n      first ? first = false : this.expect(types$1.comma);\n      if (allowTrailingComma && this.afterTrailingComma(types$1.parenR, true)) {\n        lastIsComma = true;\n        break\n      } else if (this.type === types$1.ellipsis) {\n        spreadStart = this.start;\n        exprList.push(this.parseParenItem(this.parseRestBinding()));\n        if (this.type === types$1.comma) { this.raise(this.start, \"Comma is not permitted after the rest element\"); }\n        break\n      } else {\n        exprList.push(this.parseMaybeAssign(false, refDestructuringErrors, this.parseParenItem));\n      }\n    }\n    var innerEndPos = this.lastTokEnd, innerEndLoc = this.lastTokEndLoc;\n    this.expect(types$1.parenR);\n\n    if (canBeArrow && !this.canInsertSemicolon() && this.eat(types$1.arrow)) {\n      this.checkPatternErrors(refDestructuringErrors, false);\n      this.checkYieldAwaitInDefaultParams();\n      this.yieldPos = oldYieldPos;\n      this.awaitPos = oldAwaitPos;\n      return this.parseParenArrowList(startPos, startLoc, exprList, forInit)\n    }\n\n    if (!exprList.length || lastIsComma) { this.unexpected(this.lastTokStart); }\n    if (spreadStart) { this.unexpected(spreadStart); }\n    this.checkExpressionErrors(refDestructuringErrors, true);\n    this.yieldPos = oldYieldPos || this.yieldPos;\n    this.awaitPos = oldAwaitPos || this.awaitPos;\n\n    if (exprList.length > 1) {\n      val = this.startNodeAt(innerStartPos, innerStartLoc);\n      val.expressions = exprList;\n      this.finishNodeAt(val, \"SequenceExpression\", innerEndPos, innerEndLoc);\n    } else {\n      val = exprList[0];\n    }\n  } else {\n    val = this.parseParenExpression();\n  }\n\n  if (this.options.preserveParens) {\n    var par = this.startNodeAt(startPos, startLoc);\n    par.expression = val;\n    return this.finishNode(par, \"ParenthesizedExpression\")\n  } else {\n    return val\n  }\n};\n\npp$5.parseParenItem = function(item) {\n  return item\n};\n\npp$5.parseParenArrowList = function(startPos, startLoc, exprList, forInit) {\n  return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), exprList, false, forInit)\n};\n\n// New's precedence is slightly tricky. It must allow its argument to\n// be a `[]` or dot subscript expression, but not a call — at least,\n// not without wrapping it in parentheses. Thus, it uses the noCalls\n// argument to parseSubscripts to prevent it from consuming the\n// argument list.\n\nvar empty = [];\n\npp$5.parseNew = function() {\n  if (this.containsEsc) { this.raiseRecoverable(this.start, \"Escape sequence in keyword new\"); }\n  var node = this.startNode();\n  var meta = this.parseIdent(true);\n  if (this.options.ecmaVersion >= 6 && this.eat(types$1.dot)) {\n    node.meta = meta;\n    var containsEsc = this.containsEsc;\n    node.property = this.parseIdent(true);\n    if (node.property.name !== \"target\")\n      { this.raiseRecoverable(node.property.start, \"The only valid meta property for new is 'new.target'\"); }\n    if (containsEsc)\n      { this.raiseRecoverable(node.start, \"'new.target' must not contain escaped characters\"); }\n    if (!this.allowNewDotTarget)\n      { this.raiseRecoverable(node.start, \"'new.target' can only be used in functions and class static block\"); }\n    return this.finishNode(node, \"MetaProperty\")\n  }\n  var startPos = this.start, startLoc = this.startLoc, isImport = this.type === types$1._import;\n  node.callee = this.parseSubscripts(this.parseExprAtom(), startPos, startLoc, true, false);\n  if (isImport && node.callee.type === \"ImportExpression\") {\n    this.raise(startPos, \"Cannot use new with import()\");\n  }\n  if (this.eat(types$1.parenL)) { node.arguments = this.parseExprList(types$1.parenR, this.options.ecmaVersion >= 8, false); }\n  else { node.arguments = empty; }\n  return this.finishNode(node, \"NewExpression\")\n};\n\n// Parse template expression.\n\npp$5.parseTemplateElement = function(ref) {\n  var isTagged = ref.isTagged;\n\n  var elem = this.startNode();\n  if (this.type === types$1.invalidTemplate) {\n    if (!isTagged) {\n      this.raiseRecoverable(this.start, \"Bad escape sequence in untagged template literal\");\n    }\n    elem.value = {\n      raw: this.value,\n      cooked: null\n    };\n  } else {\n    elem.value = {\n      raw: this.input.slice(this.start, this.end).replace(/\\r\\n?/g, \"\\n\"),\n      cooked: this.value\n    };\n  }\n  this.next();\n  elem.tail = this.type === types$1.backQuote;\n  return this.finishNode(elem, \"TemplateElement\")\n};\n\npp$5.parseTemplate = function(ref) {\n  if ( ref === void 0 ) ref = {};\n  var isTagged = ref.isTagged; if ( isTagged === void 0 ) isTagged = false;\n\n  var node = this.startNode();\n  this.next();\n  node.expressions = [];\n  var curElt = this.parseTemplateElement({isTagged: isTagged});\n  node.quasis = [curElt];\n  while (!curElt.tail) {\n    if (this.type === types$1.eof) { this.raise(this.pos, \"Unterminated template literal\"); }\n    this.expect(types$1.dollarBraceL);\n    node.expressions.push(this.parseExpression());\n    this.expect(types$1.braceR);\n    node.quasis.push(curElt = this.parseTemplateElement({isTagged: isTagged}));\n  }\n  this.next();\n  return this.finishNode(node, \"TemplateLiteral\")\n};\n\npp$5.isAsyncProp = function(prop) {\n  return !prop.computed && prop.key.type === \"Identifier\" && prop.key.name === \"async\" &&\n    (this.type === types$1.name || this.type === types$1.num || this.type === types$1.string || this.type === types$1.bracketL || this.type.keyword || (this.options.ecmaVersion >= 9 && this.type === types$1.star)) &&\n    !lineBreak.test(this.input.slice(this.lastTokEnd, this.start))\n};\n\n// Parse an object literal or binding pattern.\n\npp$5.parseObj = function(isPattern, refDestructuringErrors) {\n  var node = this.startNode(), first = true, propHash = {};\n  node.properties = [];\n  this.next();\n  while (!this.eat(types$1.braceR)) {\n    if (!first) {\n      this.expect(types$1.comma);\n      if (this.options.ecmaVersion >= 5 && this.afterTrailingComma(types$1.braceR)) { break }\n    } else { first = false; }\n\n    var prop = this.parseProperty(isPattern, refDestructuringErrors);\n    if (!isPattern) { this.checkPropClash(prop, propHash, refDestructuringErrors); }\n    node.properties.push(prop);\n  }\n  return this.finishNode(node, isPattern ? \"ObjectPattern\" : \"ObjectExpression\")\n};\n\npp$5.parseProperty = function(isPattern, refDestructuringErrors) {\n  var prop = this.startNode(), isGenerator, isAsync, startPos, startLoc;\n  if (this.options.ecmaVersion >= 9 && this.eat(types$1.ellipsis)) {\n    if (isPattern) {\n      prop.argument = this.parseIdent(false);\n      if (this.type === types$1.comma) {\n        this.raise(this.start, \"Comma is not permitted after the rest element\");\n      }\n      return this.finishNode(prop, \"RestElement\")\n    }\n    // Parse argument.\n    prop.argument = this.parseMaybeAssign(false, refDestructuringErrors);\n    // To disallow trailing comma via `this.toAssignable()`.\n    if (this.type === types$1.comma && refDestructuringErrors && refDestructuringErrors.trailingComma < 0) {\n      refDestructuringErrors.trailingComma = this.start;\n    }\n    // Finish\n    return this.finishNode(prop, \"SpreadElement\")\n  }\n  if (this.options.ecmaVersion >= 6) {\n    prop.method = false;\n    prop.shorthand = false;\n    if (isPattern || refDestructuringErrors) {\n      startPos = this.start;\n      startLoc = this.startLoc;\n    }\n    if (!isPattern)\n      { isGenerator = this.eat(types$1.star); }\n  }\n  var containsEsc = this.containsEsc;\n  this.parsePropertyName(prop);\n  if (!isPattern && !containsEsc && this.options.ecmaVersion >= 8 && !isGenerator && this.isAsyncProp(prop)) {\n    isAsync = true;\n    isGenerator = this.options.ecmaVersion >= 9 && this.eat(types$1.star);\n    this.parsePropertyName(prop);\n  } else {\n    isAsync = false;\n  }\n  this.parsePropertyValue(prop, isPattern, isGenerator, isAsync, startPos, startLoc, refDestructuringErrors, containsEsc);\n  return this.finishNode(prop, \"Property\")\n};\n\npp$5.parsePropertyValue = function(prop, isPattern, isGenerator, isAsync, startPos, startLoc, refDestructuringErrors, containsEsc) {\n  if ((isGenerator || isAsync) && this.type === types$1.colon)\n    { this.unexpected(); }\n\n  if (this.eat(types$1.colon)) {\n    prop.value = isPattern ? this.parseMaybeDefault(this.start, this.startLoc) : this.parseMaybeAssign(false, refDestructuringErrors);\n    prop.kind = \"init\";\n  } else if (this.options.ecmaVersion >= 6 && this.type === types$1.parenL) {\n    if (isPattern) { this.unexpected(); }\n    prop.kind = \"init\";\n    prop.method = true;\n    prop.value = this.parseMethod(isGenerator, isAsync);\n  } else if (!isPattern && !containsEsc &&\n             this.options.ecmaVersion >= 5 && !prop.computed && prop.key.type === \"Identifier\" &&\n             (prop.key.name === \"get\" || prop.key.name === \"set\") &&\n             (this.type !== types$1.comma && this.type !== types$1.braceR && this.type !== types$1.eq)) {\n    if (isGenerator || isAsync) { this.unexpected(); }\n    prop.kind = prop.key.name;\n    this.parsePropertyName(prop);\n    prop.value = this.parseMethod(false);\n    var paramCount = prop.kind === \"get\" ? 0 : 1;\n    if (prop.value.params.length !== paramCount) {\n      var start = prop.value.start;\n      if (prop.kind === \"get\")\n        { this.raiseRecoverable(start, \"getter should have no params\"); }\n      else\n        { this.raiseRecoverable(start, \"setter should have exactly one param\"); }\n    } else {\n      if (prop.kind === \"set\" && prop.value.params[0].type === \"RestElement\")\n        { this.raiseRecoverable(prop.value.params[0].start, \"Setter cannot use rest params\"); }\n    }\n  } else if (this.options.ecmaVersion >= 6 && !prop.computed && prop.key.type === \"Identifier\") {\n    if (isGenerator || isAsync) { this.unexpected(); }\n    this.checkUnreserved(prop.key);\n    if (prop.key.name === \"await\" && !this.awaitIdentPos)\n      { this.awaitIdentPos = startPos; }\n    prop.kind = \"init\";\n    if (isPattern) {\n      prop.value = this.parseMaybeDefault(startPos, startLoc, this.copyNode(prop.key));\n    } else if (this.type === types$1.eq && refDestructuringErrors) {\n      if (refDestructuringErrors.shorthandAssign < 0)\n        { refDestructuringErrors.shorthandAssign = this.start; }\n      prop.value = this.parseMaybeDefault(startPos, startLoc, this.copyNode(prop.key));\n    } else {\n      prop.value = this.copyNode(prop.key);\n    }\n    prop.shorthand = true;\n  } else { this.unexpected(); }\n};\n\npp$5.parsePropertyName = function(prop) {\n  if (this.options.ecmaVersion >= 6) {\n    if (this.eat(types$1.bracketL)) {\n      prop.computed = true;\n      prop.key = this.parseMaybeAssign();\n      this.expect(types$1.bracketR);\n      return prop.key\n    } else {\n      prop.computed = false;\n    }\n  }\n  return prop.key = this.type === types$1.num || this.type === types$1.string ? this.parseExprAtom() : this.parseIdent(this.options.allowReserved !== \"never\")\n};\n\n// Initialize empty function node.\n\npp$5.initFunction = function(node) {\n  node.id = null;\n  if (this.options.ecmaVersion >= 6) { node.generator = node.expression = false; }\n  if (this.options.ecmaVersion >= 8) { node.async = false; }\n};\n\n// Parse object or class method.\n\npp$5.parseMethod = function(isGenerator, isAsync, allowDirectSuper) {\n  var node = this.startNode(), oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n\n  this.initFunction(node);\n  if (this.options.ecmaVersion >= 6)\n    { node.generator = isGenerator; }\n  if (this.options.ecmaVersion >= 8)\n    { node.async = !!isAsync; }\n\n  this.yieldPos = 0;\n  this.awaitPos = 0;\n  this.awaitIdentPos = 0;\n  this.enterScope(functionFlags(isAsync, node.generator) | SCOPE_SUPER | (allowDirectSuper ? SCOPE_DIRECT_SUPER : 0));\n\n  this.expect(types$1.parenL);\n  node.params = this.parseBindingList(types$1.parenR, false, this.options.ecmaVersion >= 8);\n  this.checkYieldAwaitInDefaultParams();\n  this.parseFunctionBody(node, false, true, false);\n\n  this.yieldPos = oldYieldPos;\n  this.awaitPos = oldAwaitPos;\n  this.awaitIdentPos = oldAwaitIdentPos;\n  return this.finishNode(node, \"FunctionExpression\")\n};\n\n// Parse arrow function expression with given parameters.\n\npp$5.parseArrowExpression = function(node, params, isAsync, forInit) {\n  var oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n\n  this.enterScope(functionFlags(isAsync, false) | SCOPE_ARROW);\n  this.initFunction(node);\n  if (this.options.ecmaVersion >= 8) { node.async = !!isAsync; }\n\n  this.yieldPos = 0;\n  this.awaitPos = 0;\n  this.awaitIdentPos = 0;\n\n  node.params = this.toAssignableList(params, true);\n  this.parseFunctionBody(node, true, false, forInit);\n\n  this.yieldPos = oldYieldPos;\n  this.awaitPos = oldAwaitPos;\n  this.awaitIdentPos = oldAwaitIdentPos;\n  return this.finishNode(node, \"ArrowFunctionExpression\")\n};\n\n// Parse function body and check parameters.\n\npp$5.parseFunctionBody = function(node, isArrowFunction, isMethod, forInit) {\n  var isExpression = isArrowFunction && this.type !== types$1.braceL;\n  var oldStrict = this.strict, useStrict = false;\n\n  if (isExpression) {\n    node.body = this.parseMaybeAssign(forInit);\n    node.expression = true;\n    this.checkParams(node, false);\n  } else {\n    var nonSimple = this.options.ecmaVersion >= 7 && !this.isSimpleParamList(node.params);\n    if (!oldStrict || nonSimple) {\n      useStrict = this.strictDirective(this.end);\n      // If this is a strict mode function, verify that argument names\n      // are not repeated, and it does not try to bind the words `eval`\n      // or `arguments`.\n      if (useStrict && nonSimple)\n        { this.raiseRecoverable(node.start, \"Illegal 'use strict' directive in function with non-simple parameter list\"); }\n    }\n    // Start a new scope with regard to labels and the `inFunction`\n    // flag (restore them to their old value afterwards).\n    var oldLabels = this.labels;\n    this.labels = [];\n    if (useStrict) { this.strict = true; }\n\n    // Add the params to varDeclaredNames to ensure that an error is thrown\n    // if a let/const declaration in the function clashes with one of the params.\n    this.checkParams(node, !oldStrict && !useStrict && !isArrowFunction && !isMethod && this.isSimpleParamList(node.params));\n    // Ensure the function name isn't a forbidden identifier in strict mode, e.g. 'eval'\n    if (this.strict && node.id) { this.checkLValSimple(node.id, BIND_OUTSIDE); }\n    node.body = this.parseBlock(false, undefined, useStrict && !oldStrict);\n    node.expression = false;\n    this.adaptDirectivePrologue(node.body.body);\n    this.labels = oldLabels;\n  }\n  this.exitScope();\n};\n\npp$5.isSimpleParamList = function(params) {\n  for (var i = 0, list = params; i < list.length; i += 1)\n    {\n    var param = list[i];\n\n    if (param.type !== \"Identifier\") { return false\n  } }\n  return true\n};\n\n// Checks function params for various disallowed patterns such as using \"eval\"\n// or \"arguments\" and duplicate parameters.\n\npp$5.checkParams = function(node, allowDuplicates) {\n  var nameHash = Object.create(null);\n  for (var i = 0, list = node.params; i < list.length; i += 1)\n    {\n    var param = list[i];\n\n    this.checkLValInnerPattern(param, BIND_VAR, allowDuplicates ? null : nameHash);\n  }\n};\n\n// Parses a comma-separated list of expressions, and returns them as\n// an array. `close` is the token type that ends the list, and\n// `allowEmpty` can be turned on to allow subsequent commas with\n// nothing in between them to be parsed as `null` (which is needed\n// for array literals).\n\npp$5.parseExprList = function(close, allowTrailingComma, allowEmpty, refDestructuringErrors) {\n  var elts = [], first = true;\n  while (!this.eat(close)) {\n    if (!first) {\n      this.expect(types$1.comma);\n      if (allowTrailingComma && this.afterTrailingComma(close)) { break }\n    } else { first = false; }\n\n    var elt = (void 0);\n    if (allowEmpty && this.type === types$1.comma)\n      { elt = null; }\n    else if (this.type === types$1.ellipsis) {\n      elt = this.parseSpread(refDestructuringErrors);\n      if (refDestructuringErrors && this.type === types$1.comma && refDestructuringErrors.trailingComma < 0)\n        { refDestructuringErrors.trailingComma = this.start; }\n    } else {\n      elt = this.parseMaybeAssign(false, refDestructuringErrors);\n    }\n    elts.push(elt);\n  }\n  return elts\n};\n\npp$5.checkUnreserved = function(ref) {\n  var start = ref.start;\n  var end = ref.end;\n  var name = ref.name;\n\n  if (this.inGenerator && name === \"yield\")\n    { this.raiseRecoverable(start, \"Cannot use 'yield' as identifier inside a generator\"); }\n  if (this.inAsync && name === \"await\")\n    { this.raiseRecoverable(start, \"Cannot use 'await' as identifier inside an async function\"); }\n  if (this.currentThisScope().inClassFieldInit && name === \"arguments\")\n    { this.raiseRecoverable(start, \"Cannot use 'arguments' in class field initializer\"); }\n  if (this.inClassStaticBlock && (name === \"arguments\" || name === \"await\"))\n    { this.raise(start, (\"Cannot use \" + name + \" in class static initialization block\")); }\n  if (this.keywords.test(name))\n    { this.raise(start, (\"Unexpected keyword '\" + name + \"'\")); }\n  if (this.options.ecmaVersion < 6 &&\n    this.input.slice(start, end).indexOf(\"\\\\\") !== -1) { return }\n  var re = this.strict ? this.reservedWordsStrict : this.reservedWords;\n  if (re.test(name)) {\n    if (!this.inAsync && name === \"await\")\n      { this.raiseRecoverable(start, \"Cannot use keyword 'await' outside an async function\"); }\n    this.raiseRecoverable(start, (\"The keyword '\" + name + \"' is reserved\"));\n  }\n};\n\n// Parse the next token as an identifier. If `liberal` is true (used\n// when parsing properties), it will also convert keywords into\n// identifiers.\n\npp$5.parseIdent = function(liberal) {\n  var node = this.startNode();\n  if (this.type === types$1.name) {\n    node.name = this.value;\n  } else if (this.type.keyword) {\n    node.name = this.type.keyword;\n\n    // To fix https://github.com/acornjs/acorn/issues/575\n    // `class` and `function` keywords push new context into this.context.\n    // But there is no chance to pop the context if the keyword is consumed as an identifier such as a property name.\n    // If the previous token is a dot, this does not apply because the context-managing code already ignored the keyword\n    if ((node.name === \"class\" || node.name === \"function\") &&\n        (this.lastTokEnd !== this.lastTokStart + 1 || this.input.charCodeAt(this.lastTokStart) !== 46)) {\n      this.context.pop();\n    }\n  } else {\n    this.unexpected();\n  }\n  this.next(!!liberal);\n  this.finishNode(node, \"Identifier\");\n  if (!liberal) {\n    this.checkUnreserved(node);\n    if (node.name === \"await\" && !this.awaitIdentPos)\n      { this.awaitIdentPos = node.start; }\n  }\n  return node\n};\n\npp$5.parsePrivateIdent = function() {\n  var node = this.startNode();\n  if (this.type === types$1.privateId) {\n    node.name = this.value;\n  } else {\n    this.unexpected();\n  }\n  this.next();\n  this.finishNode(node, \"PrivateIdentifier\");\n\n  // For validating existence\n  if (this.privateNameStack.length === 0) {\n    this.raise(node.start, (\"Private field '#\" + (node.name) + \"' must be declared in an enclosing class\"));\n  } else {\n    this.privateNameStack[this.privateNameStack.length - 1].used.push(node);\n  }\n\n  return node\n};\n\n// Parses yield expression inside generator.\n\npp$5.parseYield = function(forInit) {\n  if (!this.yieldPos) { this.yieldPos = this.start; }\n\n  var node = this.startNode();\n  this.next();\n  if (this.type === types$1.semi || this.canInsertSemicolon() || (this.type !== types$1.star && !this.type.startsExpr)) {\n    node.delegate = false;\n    node.argument = null;\n  } else {\n    node.delegate = this.eat(types$1.star);\n    node.argument = this.parseMaybeAssign(forInit);\n  }\n  return this.finishNode(node, \"YieldExpression\")\n};\n\npp$5.parseAwait = function(forInit) {\n  if (!this.awaitPos) { this.awaitPos = this.start; }\n\n  var node = this.startNode();\n  this.next();\n  node.argument = this.parseMaybeUnary(null, true, false, forInit);\n  return this.finishNode(node, \"AwaitExpression\")\n};\n\nvar pp$4 = Parser.prototype;\n\n// This function is used to raise exceptions on parse errors. It\n// takes an offset integer (into the current `input`) to indicate\n// the location of the error, attaches the position to the end\n// of the error message, and then raises a `SyntaxError` with that\n// message.\n\npp$4.raise = function(pos, message) {\n  var loc = getLineInfo(this.input, pos);\n  message += \" (\" + loc.line + \":\" + loc.column + \")\";\n  var err = new SyntaxError(message);\n  err.pos = pos; err.loc = loc; err.raisedAt = this.pos;\n  throw err\n};\n\npp$4.raiseRecoverable = pp$4.raise;\n\npp$4.curPosition = function() {\n  if (this.options.locations) {\n    return new Position(this.curLine, this.pos - this.lineStart)\n  }\n};\n\nvar pp$3 = Parser.prototype;\n\nvar Scope = function Scope(flags) {\n  this.flags = flags;\n  // A list of var-declared names in the current lexical scope\n  this.var = [];\n  // A list of lexically-declared names in the current lexical scope\n  this.lexical = [];\n  // A list of lexically-declared FunctionDeclaration names in the current lexical scope\n  this.functions = [];\n  // A switch to disallow the identifier reference 'arguments'\n  this.inClassFieldInit = false;\n};\n\n// The functions in this module keep track of declared variables in the current scope in order to detect duplicate variable names.\n\npp$3.enterScope = function(flags) {\n  this.scopeStack.push(new Scope(flags));\n};\n\npp$3.exitScope = function() {\n  this.scopeStack.pop();\n};\n\n// The spec says:\n// > At the top level of a function, or script, function declarations are\n// > treated like var declarations rather than like lexical declarations.\npp$3.treatFunctionsAsVarInScope = function(scope) {\n  return (scope.flags & SCOPE_FUNCTION) || !this.inModule && (scope.flags & SCOPE_TOP)\n};\n\npp$3.declareName = function(name, bindingType, pos) {\n  var redeclared = false;\n  if (bindingType === BIND_LEXICAL) {\n    var scope = this.currentScope();\n    redeclared = scope.lexical.indexOf(name) > -1 || scope.functions.indexOf(name) > -1 || scope.var.indexOf(name) > -1;\n    scope.lexical.push(name);\n    if (this.inModule && (scope.flags & SCOPE_TOP))\n      { delete this.undefinedExports[name]; }\n  } else if (bindingType === BIND_SIMPLE_CATCH) {\n    var scope$1 = this.currentScope();\n    scope$1.lexical.push(name);\n  } else if (bindingType === BIND_FUNCTION) {\n    var scope$2 = this.currentScope();\n    if (this.treatFunctionsAsVar)\n      { redeclared = scope$2.lexical.indexOf(name) > -1; }\n    else\n      { redeclared = scope$2.lexical.indexOf(name) > -1 || scope$2.var.indexOf(name) > -1; }\n    scope$2.functions.push(name);\n  } else {\n    for (var i = this.scopeStack.length - 1; i >= 0; --i) {\n      var scope$3 = this.scopeStack[i];\n      if (scope$3.lexical.indexOf(name) > -1 && !((scope$3.flags & SCOPE_SIMPLE_CATCH) && scope$3.lexical[0] === name) ||\n          !this.treatFunctionsAsVarInScope(scope$3) && scope$3.functions.indexOf(name) > -1) {\n        redeclared = true;\n        break\n      }\n      scope$3.var.push(name);\n      if (this.inModule && (scope$3.flags & SCOPE_TOP))\n        { delete this.undefinedExports[name]; }\n      if (scope$3.flags & SCOPE_VAR) { break }\n    }\n  }\n  if (redeclared) { this.raiseRecoverable(pos, (\"Identifier '\" + name + \"' has already been declared\")); }\n};\n\npp$3.checkLocalExport = function(id) {\n  // scope.functions must be empty as Module code is always strict.\n  if (this.scopeStack[0].lexical.indexOf(id.name) === -1 &&\n      this.scopeStack[0].var.indexOf(id.name) === -1) {\n    this.undefinedExports[id.name] = id;\n  }\n};\n\npp$3.currentScope = function() {\n  return this.scopeStack[this.scopeStack.length - 1]\n};\n\npp$3.currentVarScope = function() {\n  for (var i = this.scopeStack.length - 1;; i--) {\n    var scope = this.scopeStack[i];\n    if (scope.flags & SCOPE_VAR) { return scope }\n  }\n};\n\n// Could be useful for `this`, `new.target`, `super()`, `super.property`, and `super[property]`.\npp$3.currentThisScope = function() {\n  for (var i = this.scopeStack.length - 1;; i--) {\n    var scope = this.scopeStack[i];\n    if (scope.flags & SCOPE_VAR && !(scope.flags & SCOPE_ARROW)) { return scope }\n  }\n};\n\nvar Node = function Node(parser, pos, loc) {\n  this.type = \"\";\n  this.start = pos;\n  this.end = 0;\n  if (parser.options.locations)\n    { this.loc = new SourceLocation(parser, loc); }\n  if (parser.options.directSourceFile)\n    { this.sourceFile = parser.options.directSourceFile; }\n  if (parser.options.ranges)\n    { this.range = [pos, 0]; }\n};\n\n// Start an AST node, attaching a start offset.\n\nvar pp$2 = Parser.prototype;\n\npp$2.startNode = function() {\n  return new Node(this, this.start, this.startLoc)\n};\n\npp$2.startNodeAt = function(pos, loc) {\n  return new Node(this, pos, loc)\n};\n\n// Finish an AST node, adding `type` and `end` properties.\n\nfunction finishNodeAt(node, type, pos, loc) {\n  node.type = type;\n  node.end = pos;\n  if (this.options.locations)\n    { node.loc.end = loc; }\n  if (this.options.ranges)\n    { node.range[1] = pos; }\n  return node\n}\n\npp$2.finishNode = function(node, type) {\n  return finishNodeAt.call(this, node, type, this.lastTokEnd, this.lastTokEndLoc)\n};\n\n// Finish node at given position\n\npp$2.finishNodeAt = function(node, type, pos, loc) {\n  return finishNodeAt.call(this, node, type, pos, loc)\n};\n\npp$2.copyNode = function(node) {\n  var newNode = new Node(this, node.start, this.startLoc);\n  for (var prop in node) { newNode[prop] = node[prop]; }\n  return newNode\n};\n\n// This file contains Unicode properties extracted from the ECMAScript specification.\n// The lists are extracted like so:\n// $$('#table-binary-unicode-properties > figure > table > tbody > tr > td:nth-child(1) code').map(el => el.innerText)\n\n// #table-binary-unicode-properties\nvar ecma9BinaryProperties = \"ASCII ASCII_Hex_Digit AHex Alphabetic Alpha Any Assigned Bidi_Control Bidi_C Bidi_Mirrored Bidi_M Case_Ignorable CI Cased Changes_When_Casefolded CWCF Changes_When_Casemapped CWCM Changes_When_Lowercased CWL Changes_When_NFKC_Casefolded CWKCF Changes_When_Titlecased CWT Changes_When_Uppercased CWU Dash Default_Ignorable_Code_Point DI Deprecated Dep Diacritic Dia Emoji Emoji_Component Emoji_Modifier Emoji_Modifier_Base Emoji_Presentation Extender Ext Grapheme_Base Gr_Base Grapheme_Extend Gr_Ext Hex_Digit Hex IDS_Binary_Operator IDSB IDS_Trinary_Operator IDST ID_Continue IDC ID_Start IDS Ideographic Ideo Join_Control Join_C Logical_Order_Exception LOE Lowercase Lower Math Noncharacter_Code_Point NChar Pattern_Syntax Pat_Syn Pattern_White_Space Pat_WS Quotation_Mark QMark Radical Regional_Indicator RI Sentence_Terminal STerm Soft_Dotted SD Terminal_Punctuation Term Unified_Ideograph UIdeo Uppercase Upper Variation_Selector VS White_Space space XID_Continue XIDC XID_Start XIDS\";\nvar ecma10BinaryProperties = ecma9BinaryProperties + \" Extended_Pictographic\";\nvar ecma11BinaryProperties = ecma10BinaryProperties;\nvar ecma12BinaryProperties = ecma11BinaryProperties + \" EBase EComp EMod EPres ExtPict\";\nvar ecma13BinaryProperties = ecma12BinaryProperties;\nvar ecma14BinaryProperties = ecma13BinaryProperties;\n\nvar unicodeBinaryProperties = {\n  9: ecma9BinaryProperties,\n  10: ecma10BinaryProperties,\n  11: ecma11BinaryProperties,\n  12: ecma12BinaryProperties,\n  13: ecma13BinaryProperties,\n  14: ecma14BinaryProperties\n};\n\n// #table-unicode-general-category-values\nvar unicodeGeneralCategoryValues = \"Cased_Letter LC Close_Punctuation Pe Connector_Punctuation Pc Control Cc cntrl Currency_Symbol Sc Dash_Punctuation Pd Decimal_Number Nd digit Enclosing_Mark Me Final_Punctuation Pf Format Cf Initial_Punctuation Pi Letter L Letter_Number Nl Line_Separator Zl Lowercase_Letter Ll Mark M Combining_Mark Math_Symbol Sm Modifier_Letter Lm Modifier_Symbol Sk Nonspacing_Mark Mn Number N Open_Punctuation Ps Other C Other_Letter Lo Other_Number No Other_Punctuation Po Other_Symbol So Paragraph_Separator Zp Private_Use Co Punctuation P punct Separator Z Space_Separator Zs Spacing_Mark Mc Surrogate Cs Symbol S Titlecase_Letter Lt Unassigned Cn Uppercase_Letter Lu\";\n\n// #table-unicode-script-values\nvar ecma9ScriptValues = \"Adlam Adlm Ahom Anatolian_Hieroglyphs Hluw Arabic Arab Armenian Armn Avestan Avst Balinese Bali Bamum Bamu Bassa_Vah Bass Batak Batk Bengali Beng Bhaiksuki Bhks Bopomofo Bopo Brahmi Brah Braille Brai Buginese Bugi Buhid Buhd Canadian_Aboriginal Cans Carian Cari Caucasian_Albanian Aghb Chakma Cakm Cham Cham Cherokee Cher Common Zyyy Coptic Copt Qaac Cuneiform Xsux Cypriot Cprt Cyrillic Cyrl Deseret Dsrt Devanagari Deva Duployan Dupl Egyptian_Hieroglyphs Egyp Elbasan Elba Ethiopic Ethi Georgian Geor Glagolitic Glag Gothic Goth Grantha Gran Greek Grek Gujarati Gujr Gurmukhi Guru Han Hani Hangul Hang Hanunoo Hano Hatran Hatr Hebrew Hebr Hiragana Hira Imperial_Aramaic Armi Inherited Zinh Qaai Inscriptional_Pahlavi Phli Inscriptional_Parthian Prti Javanese Java Kaithi Kthi Kannada Knda Katakana Kana Kayah_Li Kali Kharoshthi Khar Khmer Khmr Khojki Khoj Khudawadi Sind Lao Laoo Latin Latn Lepcha Lepc Limbu Limb Linear_A Lina Linear_B Linb Lisu Lisu Lycian Lyci Lydian Lydi Mahajani Mahj Malayalam Mlym Mandaic Mand Manichaean Mani Marchen Marc Masaram_Gondi Gonm Meetei_Mayek Mtei Mende_Kikakui Mend Meroitic_Cursive Merc Meroitic_Hieroglyphs Mero Miao Plrd Modi Mongolian Mong Mro Mroo Multani Mult Myanmar Mymr Nabataean Nbat New_Tai_Lue Talu Newa Newa Nko Nkoo Nushu Nshu Ogham Ogam Ol_Chiki Olck Old_Hungarian Hung Old_Italic Ital Old_North_Arabian Narb Old_Permic Perm Old_Persian Xpeo Old_South_Arabian Sarb Old_Turkic Orkh Oriya Orya Osage Osge Osmanya Osma Pahawh_Hmong Hmng Palmyrene Palm Pau_Cin_Hau Pauc Phags_Pa Phag Phoenician Phnx Psalter_Pahlavi Phlp Rejang Rjng Runic Runr Samaritan Samr Saurashtra Saur Sharada Shrd Shavian Shaw Siddham Sidd SignWriting Sgnw Sinhala Sinh Sora_Sompeng Sora Soyombo Soyo Sundanese Sund Syloti_Nagri Sylo Syriac Syrc Tagalog Tglg Tagbanwa Tagb Tai_Le Tale Tai_Tham Lana Tai_Viet Tavt Takri Takr Tamil Taml Tangut Tang Telugu Telu Thaana Thaa Thai Thai Tibetan Tibt Tifinagh Tfng Tirhuta Tirh Ugaritic Ugar Vai Vaii Warang_Citi Wara Yi Yiii Zanabazar_Square Zanb\";\nvar ecma10ScriptValues = ecma9ScriptValues + \" Dogra Dogr Gunjala_Gondi Gong Hanifi_Rohingya Rohg Makasar Maka Medefaidrin Medf Old_Sogdian Sogo Sogdian Sogd\";\nvar ecma11ScriptValues = ecma10ScriptValues + \" Elymaic Elym Nandinagari Nand Nyiakeng_Puachue_Hmong Hmnp Wancho Wcho\";\nvar ecma12ScriptValues = ecma11ScriptValues + \" Chorasmian Chrs Diak Dives_Akuru Khitan_Small_Script Kits Yezi Yezidi\";\nvar ecma13ScriptValues = ecma12ScriptValues + \" Cypro_Minoan Cpmn Old_Uyghur Ougr Tangsa Tnsa Toto Vithkuqi Vith\";\nvar ecma14ScriptValues = ecma13ScriptValues + \" Kawi Nag_Mundari Nagm\";\n\nvar unicodeScriptValues = {\n  9: ecma9ScriptValues,\n  10: ecma10ScriptValues,\n  11: ecma11ScriptValues,\n  12: ecma12ScriptValues,\n  13: ecma13ScriptValues,\n  14: ecma14ScriptValues\n};\n\nvar data = {};\nfunction buildUnicodeData(ecmaVersion) {\n  var d = data[ecmaVersion] = {\n    binary: wordsRegexp(unicodeBinaryProperties[ecmaVersion] + \" \" + unicodeGeneralCategoryValues),\n    nonBinary: {\n      General_Category: wordsRegexp(unicodeGeneralCategoryValues),\n      Script: wordsRegexp(unicodeScriptValues[ecmaVersion])\n    }\n  };\n  d.nonBinary.Script_Extensions = d.nonBinary.Script;\n\n  d.nonBinary.gc = d.nonBinary.General_Category;\n  d.nonBinary.sc = d.nonBinary.Script;\n  d.nonBinary.scx = d.nonBinary.Script_Extensions;\n}\n\nfor (var i = 0, list = [9, 10, 11, 12, 13, 14]; i < list.length; i += 1) {\n  var ecmaVersion = list[i];\n\n  buildUnicodeData(ecmaVersion);\n}\n\nvar pp$1 = Parser.prototype;\n\nvar RegExpValidationState = function RegExpValidationState(parser) {\n  this.parser = parser;\n  this.validFlags = \"gim\" + (parser.options.ecmaVersion >= 6 ? \"uy\" : \"\") + (parser.options.ecmaVersion >= 9 ? \"s\" : \"\") + (parser.options.ecmaVersion >= 13 ? \"d\" : \"\");\n  this.unicodeProperties = data[parser.options.ecmaVersion >= 14 ? 14 : parser.options.ecmaVersion];\n  this.source = \"\";\n  this.flags = \"\";\n  this.start = 0;\n  this.switchU = false;\n  this.switchN = false;\n  this.pos = 0;\n  this.lastIntValue = 0;\n  this.lastStringValue = \"\";\n  this.lastAssertionIsQuantifiable = false;\n  this.numCapturingParens = 0;\n  this.maxBackReference = 0;\n  this.groupNames = [];\n  this.backReferenceNames = [];\n};\n\nRegExpValidationState.prototype.reset = function reset (start, pattern, flags) {\n  var unicode = flags.indexOf(\"u\") !== -1;\n  this.start = start | 0;\n  this.source = pattern + \"\";\n  this.flags = flags;\n  this.switchU = unicode && this.parser.options.ecmaVersion >= 6;\n  this.switchN = unicode && this.parser.options.ecmaVersion >= 9;\n};\n\nRegExpValidationState.prototype.raise = function raise (message) {\n  this.parser.raiseRecoverable(this.start, (\"Invalid regular expression: /\" + (this.source) + \"/: \" + message));\n};\n\n// If u flag is given, this returns the code point at the index (it combines a surrogate pair).\n// Otherwise, this returns the code unit of the index (can be a part of a surrogate pair).\nRegExpValidationState.prototype.at = function at (i, forceU) {\n    if ( forceU === void 0 ) forceU = false;\n\n  var s = this.source;\n  var l = s.length;\n  if (i >= l) {\n    return -1\n  }\n  var c = s.charCodeAt(i);\n  if (!(forceU || this.switchU) || c <= 0xD7FF || c >= 0xE000 || i + 1 >= l) {\n    return c\n  }\n  var next = s.charCodeAt(i + 1);\n  return next >= 0xDC00 && next <= 0xDFFF ? (c << 10) + next - 0x35FDC00 : c\n};\n\nRegExpValidationState.prototype.nextIndex = function nextIndex (i, forceU) {\n    if ( forceU === void 0 ) forceU = false;\n\n  var s = this.source;\n  var l = s.length;\n  if (i >= l) {\n    return l\n  }\n  var c = s.charCodeAt(i), next;\n  if (!(forceU || this.switchU) || c <= 0xD7FF || c >= 0xE000 || i + 1 >= l ||\n      (next = s.charCodeAt(i + 1)) < 0xDC00 || next > 0xDFFF) {\n    return i + 1\n  }\n  return i + 2\n};\n\nRegExpValidationState.prototype.current = function current (forceU) {\n    if ( forceU === void 0 ) forceU = false;\n\n  return this.at(this.pos, forceU)\n};\n\nRegExpValidationState.prototype.lookahead = function lookahead (forceU) {\n    if ( forceU === void 0 ) forceU = false;\n\n  return this.at(this.nextIndex(this.pos, forceU), forceU)\n};\n\nRegExpValidationState.prototype.advance = function advance (forceU) {\n    if ( forceU === void 0 ) forceU = false;\n\n  this.pos = this.nextIndex(this.pos, forceU);\n};\n\nRegExpValidationState.prototype.eat = function eat (ch, forceU) {\n    if ( forceU === void 0 ) forceU = false;\n\n  if (this.current(forceU) === ch) {\n    this.advance(forceU);\n    return true\n  }\n  return false\n};\n\n/**\n * Validate the flags part of a given RegExpLiteral.\n *\n * @param {RegExpValidationState} state The state to validate RegExp.\n * @returns {void}\n */\npp$1.validateRegExpFlags = function(state) {\n  var validFlags = state.validFlags;\n  var flags = state.flags;\n\n  for (var i = 0; i < flags.length; i++) {\n    var flag = flags.charAt(i);\n    if (validFlags.indexOf(flag) === -1) {\n      this.raise(state.start, \"Invalid regular expression flag\");\n    }\n    if (flags.indexOf(flag, i + 1) > -1) {\n      this.raise(state.start, \"Duplicate regular expression flag\");\n    }\n  }\n};\n\n/**\n * Validate the pattern part of a given RegExpLiteral.\n *\n * @param {RegExpValidationState} state The state to validate RegExp.\n * @returns {void}\n */\npp$1.validateRegExpPattern = function(state) {\n  this.regexp_pattern(state);\n\n  // The goal symbol for the parse is |Pattern[~U, ~N]|. If the result of\n  // parsing contains a |GroupName|, reparse with the goal symbol\n  // |Pattern[~U, +N]| and use this result instead. Throw a *SyntaxError*\n  // exception if _P_ did not conform to the grammar, if any elements of _P_\n  // were not matched by the parse, or if any Early Error conditions exist.\n  if (!state.switchN && this.options.ecmaVersion >= 9 && state.groupNames.length > 0) {\n    state.switchN = true;\n    this.regexp_pattern(state);\n  }\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Pattern\npp$1.regexp_pattern = function(state) {\n  state.pos = 0;\n  state.lastIntValue = 0;\n  state.lastStringValue = \"\";\n  state.lastAssertionIsQuantifiable = false;\n  state.numCapturingParens = 0;\n  state.maxBackReference = 0;\n  state.groupNames.length = 0;\n  state.backReferenceNames.length = 0;\n\n  this.regexp_disjunction(state);\n\n  if (state.pos !== state.source.length) {\n    // Make the same messages as V8.\n    if (state.eat(0x29 /* ) */)) {\n      state.raise(\"Unmatched ')'\");\n    }\n    if (state.eat(0x5D /* ] */) || state.eat(0x7D /* } */)) {\n      state.raise(\"Lone quantifier brackets\");\n    }\n  }\n  if (state.maxBackReference > state.numCapturingParens) {\n    state.raise(\"Invalid escape\");\n  }\n  for (var i = 0, list = state.backReferenceNames; i < list.length; i += 1) {\n    var name = list[i];\n\n    if (state.groupNames.indexOf(name) === -1) {\n      state.raise(\"Invalid named capture referenced\");\n    }\n  }\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Disjunction\npp$1.regexp_disjunction = function(state) {\n  this.regexp_alternative(state);\n  while (state.eat(0x7C /* | */)) {\n    this.regexp_alternative(state);\n  }\n\n  // Make the same message as V8.\n  if (this.regexp_eatQuantifier(state, true)) {\n    state.raise(\"Nothing to repeat\");\n  }\n  if (state.eat(0x7B /* { */)) {\n    state.raise(\"Lone quantifier brackets\");\n  }\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Alternative\npp$1.regexp_alternative = function(state) {\n  while (state.pos < state.source.length && this.regexp_eatTerm(state))\n    { }\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-Term\npp$1.regexp_eatTerm = function(state) {\n  if (this.regexp_eatAssertion(state)) {\n    // Handle `QuantifiableAssertion Quantifier` alternative.\n    // `state.lastAssertionIsQuantifiable` is true if the last eaten Assertion\n    // is a QuantifiableAssertion.\n    if (state.lastAssertionIsQuantifiable && this.regexp_eatQuantifier(state)) {\n      // Make the same message as V8.\n      if (state.switchU) {\n        state.raise(\"Invalid quantifier\");\n      }\n    }\n    return true\n  }\n\n  if (state.switchU ? this.regexp_eatAtom(state) : this.regexp_eatExtendedAtom(state)) {\n    this.regexp_eatQuantifier(state);\n    return true\n  }\n\n  return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-Assertion\npp$1.regexp_eatAssertion = function(state) {\n  var start = state.pos;\n  state.lastAssertionIsQuantifiable = false;\n\n  // ^, $\n  if (state.eat(0x5E /* ^ */) || state.eat(0x24 /* $ */)) {\n    return true\n  }\n\n  // \\b \\B\n  if (state.eat(0x5C /* \\ */)) {\n    if (state.eat(0x42 /* B */) || state.eat(0x62 /* b */)) {\n      return true\n    }\n    state.pos = start;\n  }\n\n  // Lookahead / Lookbehind\n  if (state.eat(0x28 /* ( */) && state.eat(0x3F /* ? */)) {\n    var lookbehind = false;\n    if (this.options.ecmaVersion >= 9) {\n      lookbehind = state.eat(0x3C /* < */);\n    }\n    if (state.eat(0x3D /* = */) || state.eat(0x21 /* ! */)) {\n      this.regexp_disjunction(state);\n      if (!state.eat(0x29 /* ) */)) {\n        state.raise(\"Unterminated group\");\n      }\n      state.lastAssertionIsQuantifiable = !lookbehind;\n      return true\n    }\n  }\n\n  state.pos = start;\n  return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Quantifier\npp$1.regexp_eatQuantifier = function(state, noError) {\n  if ( noError === void 0 ) noError = false;\n\n  if (this.regexp_eatQuantifierPrefix(state, noError)) {\n    state.eat(0x3F /* ? */);\n    return true\n  }\n  return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-QuantifierPrefix\npp$1.regexp_eatQuantifierPrefix = function(state, noError) {\n  return (\n    state.eat(0x2A /* * */) ||\n    state.eat(0x2B /* + */) ||\n    state.eat(0x3F /* ? */) ||\n    this.regexp_eatBracedQuantifier(state, noError)\n  )\n};\npp$1.regexp_eatBracedQuantifier = function(state, noError) {\n  var start = state.pos;\n  if (state.eat(0x7B /* { */)) {\n    var min = 0, max = -1;\n    if (this.regexp_eatDecimalDigits(state)) {\n      min = state.lastIntValue;\n      if (state.eat(0x2C /* , */) && this.regexp_eatDecimalDigits(state)) {\n        max = state.lastIntValue;\n      }\n      if (state.eat(0x7D /* } */)) {\n        // SyntaxError in https://www.ecma-international.org/ecma-262/8.0/#sec-term\n        if (max !== -1 && max < min && !noError) {\n          state.raise(\"numbers out of order in {} quantifier\");\n        }\n        return true\n      }\n    }\n    if (state.switchU && !noError) {\n      state.raise(\"Incomplete quantifier\");\n    }\n    state.pos = start;\n  }\n  return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Atom\npp$1.regexp_eatAtom = function(state) {\n  return (\n    this.regexp_eatPatternCharacters(state) ||\n    state.eat(0x2E /* . */) ||\n    this.regexp_eatReverseSolidusAtomEscape(state) ||\n    this.regexp_eatCharacterClass(state) ||\n    this.regexp_eatUncapturingGroup(state) ||\n    this.regexp_eatCapturingGroup(state)\n  )\n};\npp$1.regexp_eatReverseSolidusAtomEscape = function(state) {\n  var start = state.pos;\n  if (state.eat(0x5C /* \\ */)) {\n    if (this.regexp_eatAtomEscape(state)) {\n      return true\n    }\n    state.pos = start;\n  }\n  return false\n};\npp$1.regexp_eatUncapturingGroup = function(state) {\n  var start = state.pos;\n  if (state.eat(0x28 /* ( */)) {\n    if (state.eat(0x3F /* ? */) && state.eat(0x3A /* : */)) {\n      this.regexp_disjunction(state);\n      if (state.eat(0x29 /* ) */)) {\n        return true\n      }\n      state.raise(\"Unterminated group\");\n    }\n    state.pos = start;\n  }\n  return false\n};\npp$1.regexp_eatCapturingGroup = function(state) {\n  if (state.eat(0x28 /* ( */)) {\n    if (this.options.ecmaVersion >= 9) {\n      this.regexp_groupSpecifier(state);\n    } else if (state.current() === 0x3F /* ? */) {\n      state.raise(\"Invalid group\");\n    }\n    this.regexp_disjunction(state);\n    if (state.eat(0x29 /* ) */)) {\n      state.numCapturingParens += 1;\n      return true\n    }\n    state.raise(\"Unterminated group\");\n  }\n  return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ExtendedAtom\npp$1.regexp_eatExtendedAtom = function(state) {\n  return (\n    state.eat(0x2E /* . */) ||\n    this.regexp_eatReverseSolidusAtomEscape(state) ||\n    this.regexp_eatCharacterClass(state) ||\n    this.regexp_eatUncapturingGroup(state) ||\n    this.regexp_eatCapturingGroup(state) ||\n    this.regexp_eatInvalidBracedQuantifier(state) ||\n    this.regexp_eatExtendedPatternCharacter(state)\n  )\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-InvalidBracedQuantifier\npp$1.regexp_eatInvalidBracedQuantifier = function(state) {\n  if (this.regexp_eatBracedQuantifier(state, true)) {\n    state.raise(\"Nothing to repeat\");\n  }\n  return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-SyntaxCharacter\npp$1.regexp_eatSyntaxCharacter = function(state) {\n  var ch = state.current();\n  if (isSyntaxCharacter(ch)) {\n    state.lastIntValue = ch;\n    state.advance();\n    return true\n  }\n  return false\n};\nfunction isSyntaxCharacter(ch) {\n  return (\n    ch === 0x24 /* $ */ ||\n    ch >= 0x28 /* ( */ && ch <= 0x2B /* + */ ||\n    ch === 0x2E /* . */ ||\n    ch === 0x3F /* ? */ ||\n    ch >= 0x5B /* [ */ && ch <= 0x5E /* ^ */ ||\n    ch >= 0x7B /* { */ && ch <= 0x7D /* } */\n  )\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-PatternCharacter\n// But eat eager.\npp$1.regexp_eatPatternCharacters = function(state) {\n  var start = state.pos;\n  var ch = 0;\n  while ((ch = state.current()) !== -1 && !isSyntaxCharacter(ch)) {\n    state.advance();\n  }\n  return state.pos !== start\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ExtendedPatternCharacter\npp$1.regexp_eatExtendedPatternCharacter = function(state) {\n  var ch = state.current();\n  if (\n    ch !== -1 &&\n    ch !== 0x24 /* $ */ &&\n    !(ch >= 0x28 /* ( */ && ch <= 0x2B /* + */) &&\n    ch !== 0x2E /* . */ &&\n    ch !== 0x3F /* ? */ &&\n    ch !== 0x5B /* [ */ &&\n    ch !== 0x5E /* ^ */ &&\n    ch !== 0x7C /* | */\n  ) {\n    state.advance();\n    return true\n  }\n  return false\n};\n\n// GroupSpecifier ::\n//   [empty]\n//   `?` GroupName\npp$1.regexp_groupSpecifier = function(state) {\n  if (state.eat(0x3F /* ? */)) {\n    if (this.regexp_eatGroupName(state)) {\n      if (state.groupNames.indexOf(state.lastStringValue) !== -1) {\n        state.raise(\"Duplicate capture group name\");\n      }\n      state.groupNames.push(state.lastStringValue);\n      return\n    }\n    state.raise(\"Invalid group\");\n  }\n};\n\n// GroupName ::\n//   `<` RegExpIdentifierName `>`\n// Note: this updates `state.lastStringValue` property with the eaten name.\npp$1.regexp_eatGroupName = function(state) {\n  state.lastStringValue = \"\";\n  if (state.eat(0x3C /* < */)) {\n    if (this.regexp_eatRegExpIdentifierName(state) && state.eat(0x3E /* > */)) {\n      return true\n    }\n    state.raise(\"Invalid capture group name\");\n  }\n  return false\n};\n\n// RegExpIdentifierName ::\n//   RegExpIdentifierStart\n//   RegExpIdentifierName RegExpIdentifierPart\n// Note: this updates `state.lastStringValue` property with the eaten name.\npp$1.regexp_eatRegExpIdentifierName = function(state) {\n  state.lastStringValue = \"\";\n  if (this.regexp_eatRegExpIdentifierStart(state)) {\n    state.lastStringValue += codePointToString(state.lastIntValue);\n    while (this.regexp_eatRegExpIdentifierPart(state)) {\n      state.lastStringValue += codePointToString(state.lastIntValue);\n    }\n    return true\n  }\n  return false\n};\n\n// RegExpIdentifierStart ::\n//   UnicodeIDStart\n//   `$`\n//   `_`\n//   `\\` RegExpUnicodeEscapeSequence[+U]\npp$1.regexp_eatRegExpIdentifierStart = function(state) {\n  var start = state.pos;\n  var forceU = this.options.ecmaVersion >= 11;\n  var ch = state.current(forceU);\n  state.advance(forceU);\n\n  if (ch === 0x5C /* \\ */ && this.regexp_eatRegExpUnicodeEscapeSequence(state, forceU)) {\n    ch = state.lastIntValue;\n  }\n  if (isRegExpIdentifierStart(ch)) {\n    state.lastIntValue = ch;\n    return true\n  }\n\n  state.pos = start;\n  return false\n};\nfunction isRegExpIdentifierStart(ch) {\n  return isIdentifierStart(ch, true) || ch === 0x24 /* $ */ || ch === 0x5F /* _ */\n}\n\n// RegExpIdentifierPart ::\n//   UnicodeIDContinue\n//   `$`\n//   `_`\n//   `\\` RegExpUnicodeEscapeSequence[+U]\n//   <ZWNJ>\n//   <ZWJ>\npp$1.regexp_eatRegExpIdentifierPart = function(state) {\n  var start = state.pos;\n  var forceU = this.options.ecmaVersion >= 11;\n  var ch = state.current(forceU);\n  state.advance(forceU);\n\n  if (ch === 0x5C /* \\ */ && this.regexp_eatRegExpUnicodeEscapeSequence(state, forceU)) {\n    ch = state.lastIntValue;\n  }\n  if (isRegExpIdentifierPart(ch)) {\n    state.lastIntValue = ch;\n    return true\n  }\n\n  state.pos = start;\n  return false\n};\nfunction isRegExpIdentifierPart(ch) {\n  return isIdentifierChar(ch, true) || ch === 0x24 /* $ */ || ch === 0x5F /* _ */ || ch === 0x200C /* <ZWNJ> */ || ch === 0x200D /* <ZWJ> */\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-AtomEscape\npp$1.regexp_eatAtomEscape = function(state) {\n  if (\n    this.regexp_eatBackReference(state) ||\n    this.regexp_eatCharacterClassEscape(state) ||\n    this.regexp_eatCharacterEscape(state) ||\n    (state.switchN && this.regexp_eatKGroupName(state))\n  ) {\n    return true\n  }\n  if (state.switchU) {\n    // Make the same message as V8.\n    if (state.current() === 0x63 /* c */) {\n      state.raise(\"Invalid unicode escape\");\n    }\n    state.raise(\"Invalid escape\");\n  }\n  return false\n};\npp$1.regexp_eatBackReference = function(state) {\n  var start = state.pos;\n  if (this.regexp_eatDecimalEscape(state)) {\n    var n = state.lastIntValue;\n    if (state.switchU) {\n      // For SyntaxError in https://www.ecma-international.org/ecma-262/8.0/#sec-atomescape\n      if (n > state.maxBackReference) {\n        state.maxBackReference = n;\n      }\n      return true\n    }\n    if (n <= state.numCapturingParens) {\n      return true\n    }\n    state.pos = start;\n  }\n  return false\n};\npp$1.regexp_eatKGroupName = function(state) {\n  if (state.eat(0x6B /* k */)) {\n    if (this.regexp_eatGroupName(state)) {\n      state.backReferenceNames.push(state.lastStringValue);\n      return true\n    }\n    state.raise(\"Invalid named reference\");\n  }\n  return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-CharacterEscape\npp$1.regexp_eatCharacterEscape = function(state) {\n  return (\n    this.regexp_eatControlEscape(state) ||\n    this.regexp_eatCControlLetter(state) ||\n    this.regexp_eatZero(state) ||\n    this.regexp_eatHexEscapeSequence(state) ||\n    this.regexp_eatRegExpUnicodeEscapeSequence(state, false) ||\n    (!state.switchU && this.regexp_eatLegacyOctalEscapeSequence(state)) ||\n    this.regexp_eatIdentityEscape(state)\n  )\n};\npp$1.regexp_eatCControlLetter = function(state) {\n  var start = state.pos;\n  if (state.eat(0x63 /* c */)) {\n    if (this.regexp_eatControlLetter(state)) {\n      return true\n    }\n    state.pos = start;\n  }\n  return false\n};\npp$1.regexp_eatZero = function(state) {\n  if (state.current() === 0x30 /* 0 */ && !isDecimalDigit(state.lookahead())) {\n    state.lastIntValue = 0;\n    state.advance();\n    return true\n  }\n  return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ControlEscape\npp$1.regexp_eatControlEscape = function(state) {\n  var ch = state.current();\n  if (ch === 0x74 /* t */) {\n    state.lastIntValue = 0x09; /* \\t */\n    state.advance();\n    return true\n  }\n  if (ch === 0x6E /* n */) {\n    state.lastIntValue = 0x0A; /* \\n */\n    state.advance();\n    return true\n  }\n  if (ch === 0x76 /* v */) {\n    state.lastIntValue = 0x0B; /* \\v */\n    state.advance();\n    return true\n  }\n  if (ch === 0x66 /* f */) {\n    state.lastIntValue = 0x0C; /* \\f */\n    state.advance();\n    return true\n  }\n  if (ch === 0x72 /* r */) {\n    state.lastIntValue = 0x0D; /* \\r */\n    state.advance();\n    return true\n  }\n  return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ControlLetter\npp$1.regexp_eatControlLetter = function(state) {\n  var ch = state.current();\n  if (isControlLetter(ch)) {\n    state.lastIntValue = ch % 0x20;\n    state.advance();\n    return true\n  }\n  return false\n};\nfunction isControlLetter(ch) {\n  return (\n    (ch >= 0x41 /* A */ && ch <= 0x5A /* Z */) ||\n    (ch >= 0x61 /* a */ && ch <= 0x7A /* z */)\n  )\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-RegExpUnicodeEscapeSequence\npp$1.regexp_eatRegExpUnicodeEscapeSequence = function(state, forceU) {\n  if ( forceU === void 0 ) forceU = false;\n\n  var start = state.pos;\n  var switchU = forceU || state.switchU;\n\n  if (state.eat(0x75 /* u */)) {\n    if (this.regexp_eatFixedHexDigits(state, 4)) {\n      var lead = state.lastIntValue;\n      if (switchU && lead >= 0xD800 && lead <= 0xDBFF) {\n        var leadSurrogateEnd = state.pos;\n        if (state.eat(0x5C /* \\ */) && state.eat(0x75 /* u */) && this.regexp_eatFixedHexDigits(state, 4)) {\n          var trail = state.lastIntValue;\n          if (trail >= 0xDC00 && trail <= 0xDFFF) {\n            state.lastIntValue = (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000;\n            return true\n          }\n        }\n        state.pos = leadSurrogateEnd;\n        state.lastIntValue = lead;\n      }\n      return true\n    }\n    if (\n      switchU &&\n      state.eat(0x7B /* { */) &&\n      this.regexp_eatHexDigits(state) &&\n      state.eat(0x7D /* } */) &&\n      isValidUnicode(state.lastIntValue)\n    ) {\n      return true\n    }\n    if (switchU) {\n      state.raise(\"Invalid unicode escape\");\n    }\n    state.pos = start;\n  }\n\n  return false\n};\nfunction isValidUnicode(ch) {\n  return ch >= 0 && ch <= 0x10FFFF\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-IdentityEscape\npp$1.regexp_eatIdentityEscape = function(state) {\n  if (state.switchU) {\n    if (this.regexp_eatSyntaxCharacter(state)) {\n      return true\n    }\n    if (state.eat(0x2F /* / */)) {\n      state.lastIntValue = 0x2F; /* / */\n      return true\n    }\n    return false\n  }\n\n  var ch = state.current();\n  if (ch !== 0x63 /* c */ && (!state.switchN || ch !== 0x6B /* k */)) {\n    state.lastIntValue = ch;\n    state.advance();\n    return true\n  }\n\n  return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-DecimalEscape\npp$1.regexp_eatDecimalEscape = function(state) {\n  state.lastIntValue = 0;\n  var ch = state.current();\n  if (ch >= 0x31 /* 1 */ && ch <= 0x39 /* 9 */) {\n    do {\n      state.lastIntValue = 10 * state.lastIntValue + (ch - 0x30 /* 0 */);\n      state.advance();\n    } while ((ch = state.current()) >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */)\n    return true\n  }\n  return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-CharacterClassEscape\npp$1.regexp_eatCharacterClassEscape = function(state) {\n  var ch = state.current();\n\n  if (isCharacterClassEscape(ch)) {\n    state.lastIntValue = -1;\n    state.advance();\n    return true\n  }\n\n  if (\n    state.switchU &&\n    this.options.ecmaVersion >= 9 &&\n    (ch === 0x50 /* P */ || ch === 0x70 /* p */)\n  ) {\n    state.lastIntValue = -1;\n    state.advance();\n    if (\n      state.eat(0x7B /* { */) &&\n      this.regexp_eatUnicodePropertyValueExpression(state) &&\n      state.eat(0x7D /* } */)\n    ) {\n      return true\n    }\n    state.raise(\"Invalid property name\");\n  }\n\n  return false\n};\nfunction isCharacterClassEscape(ch) {\n  return (\n    ch === 0x64 /* d */ ||\n    ch === 0x44 /* D */ ||\n    ch === 0x73 /* s */ ||\n    ch === 0x53 /* S */ ||\n    ch === 0x77 /* w */ ||\n    ch === 0x57 /* W */\n  )\n}\n\n// UnicodePropertyValueExpression ::\n//   UnicodePropertyName `=` UnicodePropertyValue\n//   LoneUnicodePropertyNameOrValue\npp$1.regexp_eatUnicodePropertyValueExpression = function(state) {\n  var start = state.pos;\n\n  // UnicodePropertyName `=` UnicodePropertyValue\n  if (this.regexp_eatUnicodePropertyName(state) && state.eat(0x3D /* = */)) {\n    var name = state.lastStringValue;\n    if (this.regexp_eatUnicodePropertyValue(state)) {\n      var value = state.lastStringValue;\n      this.regexp_validateUnicodePropertyNameAndValue(state, name, value);\n      return true\n    }\n  }\n  state.pos = start;\n\n  // LoneUnicodePropertyNameOrValue\n  if (this.regexp_eatLoneUnicodePropertyNameOrValue(state)) {\n    var nameOrValue = state.lastStringValue;\n    this.regexp_validateUnicodePropertyNameOrValue(state, nameOrValue);\n    return true\n  }\n  return false\n};\npp$1.regexp_validateUnicodePropertyNameAndValue = function(state, name, value) {\n  if (!hasOwn(state.unicodeProperties.nonBinary, name))\n    { state.raise(\"Invalid property name\"); }\n  if (!state.unicodeProperties.nonBinary[name].test(value))\n    { state.raise(\"Invalid property value\"); }\n};\npp$1.regexp_validateUnicodePropertyNameOrValue = function(state, nameOrValue) {\n  if (!state.unicodeProperties.binary.test(nameOrValue))\n    { state.raise(\"Invalid property name\"); }\n};\n\n// UnicodePropertyName ::\n//   UnicodePropertyNameCharacters\npp$1.regexp_eatUnicodePropertyName = function(state) {\n  var ch = 0;\n  state.lastStringValue = \"\";\n  while (isUnicodePropertyNameCharacter(ch = state.current())) {\n    state.lastStringValue += codePointToString(ch);\n    state.advance();\n  }\n  return state.lastStringValue !== \"\"\n};\nfunction isUnicodePropertyNameCharacter(ch) {\n  return isControlLetter(ch) || ch === 0x5F /* _ */\n}\n\n// UnicodePropertyValue ::\n//   UnicodePropertyValueCharacters\npp$1.regexp_eatUnicodePropertyValue = function(state) {\n  var ch = 0;\n  state.lastStringValue = \"\";\n  while (isUnicodePropertyValueCharacter(ch = state.current())) {\n    state.lastStringValue += codePointToString(ch);\n    state.advance();\n  }\n  return state.lastStringValue !== \"\"\n};\nfunction isUnicodePropertyValueCharacter(ch) {\n  return isUnicodePropertyNameCharacter(ch) || isDecimalDigit(ch)\n}\n\n// LoneUnicodePropertyNameOrValue ::\n//   UnicodePropertyValueCharacters\npp$1.regexp_eatLoneUnicodePropertyNameOrValue = function(state) {\n  return this.regexp_eatUnicodePropertyValue(state)\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-CharacterClass\npp$1.regexp_eatCharacterClass = function(state) {\n  if (state.eat(0x5B /* [ */)) {\n    state.eat(0x5E /* ^ */);\n    this.regexp_classRanges(state);\n    if (state.eat(0x5D /* ] */)) {\n      return true\n    }\n    // Unreachable since it threw \"unterminated regular expression\" error before.\n    state.raise(\"Unterminated character class\");\n  }\n  return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ClassRanges\n// https://www.ecma-international.org/ecma-262/8.0/#prod-NonemptyClassRanges\n// https://www.ecma-international.org/ecma-262/8.0/#prod-NonemptyClassRangesNoDash\npp$1.regexp_classRanges = function(state) {\n  while (this.regexp_eatClassAtom(state)) {\n    var left = state.lastIntValue;\n    if (state.eat(0x2D /* - */) && this.regexp_eatClassAtom(state)) {\n      var right = state.lastIntValue;\n      if (state.switchU && (left === -1 || right === -1)) {\n        state.raise(\"Invalid character class\");\n      }\n      if (left !== -1 && right !== -1 && left > right) {\n        state.raise(\"Range out of order in character class\");\n      }\n    }\n  }\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ClassAtom\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ClassAtomNoDash\npp$1.regexp_eatClassAtom = function(state) {\n  var start = state.pos;\n\n  if (state.eat(0x5C /* \\ */)) {\n    if (this.regexp_eatClassEscape(state)) {\n      return true\n    }\n    if (state.switchU) {\n      // Make the same message as V8.\n      var ch$1 = state.current();\n      if (ch$1 === 0x63 /* c */ || isOctalDigit(ch$1)) {\n        state.raise(\"Invalid class escape\");\n      }\n      state.raise(\"Invalid escape\");\n    }\n    state.pos = start;\n  }\n\n  var ch = state.current();\n  if (ch !== 0x5D /* ] */) {\n    state.lastIntValue = ch;\n    state.advance();\n    return true\n  }\n\n  return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ClassEscape\npp$1.regexp_eatClassEscape = function(state) {\n  var start = state.pos;\n\n  if (state.eat(0x62 /* b */)) {\n    state.lastIntValue = 0x08; /* <BS> */\n    return true\n  }\n\n  if (state.switchU && state.eat(0x2D /* - */)) {\n    state.lastIntValue = 0x2D; /* - */\n    return true\n  }\n\n  if (!state.switchU && state.eat(0x63 /* c */)) {\n    if (this.regexp_eatClassControlLetter(state)) {\n      return true\n    }\n    state.pos = start;\n  }\n\n  return (\n    this.regexp_eatCharacterClassEscape(state) ||\n    this.regexp_eatCharacterEscape(state)\n  )\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ClassControlLetter\npp$1.regexp_eatClassControlLetter = function(state) {\n  var ch = state.current();\n  if (isDecimalDigit(ch) || ch === 0x5F /* _ */) {\n    state.lastIntValue = ch % 0x20;\n    state.advance();\n    return true\n  }\n  return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-HexEscapeSequence\npp$1.regexp_eatHexEscapeSequence = function(state) {\n  var start = state.pos;\n  if (state.eat(0x78 /* x */)) {\n    if (this.regexp_eatFixedHexDigits(state, 2)) {\n      return true\n    }\n    if (state.switchU) {\n      state.raise(\"Invalid escape\");\n    }\n    state.pos = start;\n  }\n  return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-DecimalDigits\npp$1.regexp_eatDecimalDigits = function(state) {\n  var start = state.pos;\n  var ch = 0;\n  state.lastIntValue = 0;\n  while (isDecimalDigit(ch = state.current())) {\n    state.lastIntValue = 10 * state.lastIntValue + (ch - 0x30 /* 0 */);\n    state.advance();\n  }\n  return state.pos !== start\n};\nfunction isDecimalDigit(ch) {\n  return ch >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-HexDigits\npp$1.regexp_eatHexDigits = function(state) {\n  var start = state.pos;\n  var ch = 0;\n  state.lastIntValue = 0;\n  while (isHexDigit(ch = state.current())) {\n    state.lastIntValue = 16 * state.lastIntValue + hexToInt(ch);\n    state.advance();\n  }\n  return state.pos !== start\n};\nfunction isHexDigit(ch) {\n  return (\n    (ch >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */) ||\n    (ch >= 0x41 /* A */ && ch <= 0x46 /* F */) ||\n    (ch >= 0x61 /* a */ && ch <= 0x66 /* f */)\n  )\n}\nfunction hexToInt(ch) {\n  if (ch >= 0x41 /* A */ && ch <= 0x46 /* F */) {\n    return 10 + (ch - 0x41 /* A */)\n  }\n  if (ch >= 0x61 /* a */ && ch <= 0x66 /* f */) {\n    return 10 + (ch - 0x61 /* a */)\n  }\n  return ch - 0x30 /* 0 */\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-LegacyOctalEscapeSequence\n// Allows only 0-377(octal) i.e. 0-255(decimal).\npp$1.regexp_eatLegacyOctalEscapeSequence = function(state) {\n  if (this.regexp_eatOctalDigit(state)) {\n    var n1 = state.lastIntValue;\n    if (this.regexp_eatOctalDigit(state)) {\n      var n2 = state.lastIntValue;\n      if (n1 <= 3 && this.regexp_eatOctalDigit(state)) {\n        state.lastIntValue = n1 * 64 + n2 * 8 + state.lastIntValue;\n      } else {\n        state.lastIntValue = n1 * 8 + n2;\n      }\n    } else {\n      state.lastIntValue = n1;\n    }\n    return true\n  }\n  return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-OctalDigit\npp$1.regexp_eatOctalDigit = function(state) {\n  var ch = state.current();\n  if (isOctalDigit(ch)) {\n    state.lastIntValue = ch - 0x30; /* 0 */\n    state.advance();\n    return true\n  }\n  state.lastIntValue = 0;\n  return false\n};\nfunction isOctalDigit(ch) {\n  return ch >= 0x30 /* 0 */ && ch <= 0x37 /* 7 */\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Hex4Digits\n// https://www.ecma-international.org/ecma-262/8.0/#prod-HexDigit\n// And HexDigit HexDigit in https://www.ecma-international.org/ecma-262/8.0/#prod-HexEscapeSequence\npp$1.regexp_eatFixedHexDigits = function(state, length) {\n  var start = state.pos;\n  state.lastIntValue = 0;\n  for (var i = 0; i < length; ++i) {\n    var ch = state.current();\n    if (!isHexDigit(ch)) {\n      state.pos = start;\n      return false\n    }\n    state.lastIntValue = 16 * state.lastIntValue + hexToInt(ch);\n    state.advance();\n  }\n  return true\n};\n\n// Object type used to represent tokens. Note that normally, tokens\n// simply exist as properties on the parser object. This is only\n// used for the onToken callback and the external tokenizer.\n\nvar Token = function Token(p) {\n  this.type = p.type;\n  this.value = p.value;\n  this.start = p.start;\n  this.end = p.end;\n  if (p.options.locations)\n    { this.loc = new SourceLocation(p, p.startLoc, p.endLoc); }\n  if (p.options.ranges)\n    { this.range = [p.start, p.end]; }\n};\n\n// ## Tokenizer\n\nvar pp = Parser.prototype;\n\n// Move to the next token\n\npp.next = function(ignoreEscapeSequenceInKeyword) {\n  if (!ignoreEscapeSequenceInKeyword && this.type.keyword && this.containsEsc)\n    { this.raiseRecoverable(this.start, \"Escape sequence in keyword \" + this.type.keyword); }\n  if (this.options.onToken)\n    { this.options.onToken(new Token(this)); }\n\n  this.lastTokEnd = this.end;\n  this.lastTokStart = this.start;\n  this.lastTokEndLoc = this.endLoc;\n  this.lastTokStartLoc = this.startLoc;\n  this.nextToken();\n};\n\npp.getToken = function() {\n  this.next();\n  return new Token(this)\n};\n\n// If we're in an ES6 environment, make parsers iterable\nif (typeof Symbol !== \"undefined\")\n  { pp[Symbol.iterator] = function() {\n    var this$1$1 = this;\n\n    return {\n      next: function () {\n        var token = this$1$1.getToken();\n        return {\n          done: token.type === types$1.eof,\n          value: token\n        }\n      }\n    }\n  }; }\n\n// Toggle strict mode. Re-reads the next number or string to please\n// pedantic tests (`\"use strict\"; 010;` should fail).\n\n// Read a single token, updating the parser object's token-related\n// properties.\n\npp.nextToken = function() {\n  var curContext = this.curContext();\n  if (!curContext || !curContext.preserveSpace) { this.skipSpace(); }\n\n  this.start = this.pos;\n  if (this.options.locations) { this.startLoc = this.curPosition(); }\n  if (this.pos >= this.input.length) { return this.finishToken(types$1.eof) }\n\n  if (curContext.override) { return curContext.override(this) }\n  else { this.readToken(this.fullCharCodeAtPos()); }\n};\n\npp.readToken = function(code) {\n  // Identifier or keyword. '\\uXXXX' sequences are allowed in\n  // identifiers, so '\\' also dispatches to that.\n  if (isIdentifierStart(code, this.options.ecmaVersion >= 6) || code === 92 /* '\\' */)\n    { return this.readWord() }\n\n  return this.getTokenFromCode(code)\n};\n\npp.fullCharCodeAtPos = function() {\n  var code = this.input.charCodeAt(this.pos);\n  if (code <= 0xd7ff || code >= 0xdc00) { return code }\n  var next = this.input.charCodeAt(this.pos + 1);\n  return next <= 0xdbff || next >= 0xe000 ? code : (code << 10) + next - 0x35fdc00\n};\n\npp.skipBlockComment = function() {\n  var startLoc = this.options.onComment && this.curPosition();\n  var start = this.pos, end = this.input.indexOf(\"*/\", this.pos += 2);\n  if (end === -1) { this.raise(this.pos - 2, \"Unterminated comment\"); }\n  this.pos = end + 2;\n  if (this.options.locations) {\n    for (var nextBreak = (void 0), pos = start; (nextBreak = nextLineBreak(this.input, pos, this.pos)) > -1;) {\n      ++this.curLine;\n      pos = this.lineStart = nextBreak;\n    }\n  }\n  if (this.options.onComment)\n    { this.options.onComment(true, this.input.slice(start + 2, end), start, this.pos,\n                           startLoc, this.curPosition()); }\n};\n\npp.skipLineComment = function(startSkip) {\n  var start = this.pos;\n  var startLoc = this.options.onComment && this.curPosition();\n  var ch = this.input.charCodeAt(this.pos += startSkip);\n  while (this.pos < this.input.length && !isNewLine(ch)) {\n    ch = this.input.charCodeAt(++this.pos);\n  }\n  if (this.options.onComment)\n    { this.options.onComment(false, this.input.slice(start + startSkip, this.pos), start, this.pos,\n                           startLoc, this.curPosition()); }\n};\n\n// Called at the start of the parse and after every token. Skips\n// whitespace and comments, and.\n\npp.skipSpace = function() {\n  loop: while (this.pos < this.input.length) {\n    var ch = this.input.charCodeAt(this.pos);\n    switch (ch) {\n    case 32: case 160: // ' '\n      ++this.pos;\n      break\n    case 13:\n      if (this.input.charCodeAt(this.pos + 1) === 10) {\n        ++this.pos;\n      }\n    case 10: case 8232: case 8233:\n      ++this.pos;\n      if (this.options.locations) {\n        ++this.curLine;\n        this.lineStart = this.pos;\n      }\n      break\n    case 47: // '/'\n      switch (this.input.charCodeAt(this.pos + 1)) {\n      case 42: // '*'\n        this.skipBlockComment();\n        break\n      case 47:\n        this.skipLineComment(2);\n        break\n      default:\n        break loop\n      }\n      break\n    default:\n      if (ch > 8 && ch < 14 || ch >= 5760 && nonASCIIwhitespace.test(String.fromCharCode(ch))) {\n        ++this.pos;\n      } else {\n        break loop\n      }\n    }\n  }\n};\n\n// Called at the end of every token. Sets `end`, `val`, and\n// maintains `context` and `exprAllowed`, and skips the space after\n// the token, so that the next one's `start` will point at the\n// right position.\n\npp.finishToken = function(type, val) {\n  this.end = this.pos;\n  if (this.options.locations) { this.endLoc = this.curPosition(); }\n  var prevType = this.type;\n  this.type = type;\n  this.value = val;\n\n  this.updateContext(prevType);\n};\n\n// ### Token reading\n\n// This is the function that is called to fetch the next token. It\n// is somewhat obscure, because it works in character codes rather\n// than characters, and because operator parsing has been inlined\n// into it.\n//\n// All in the name of speed.\n//\npp.readToken_dot = function() {\n  var next = this.input.charCodeAt(this.pos + 1);\n  if (next >= 48 && next <= 57) { return this.readNumber(true) }\n  var next2 = this.input.charCodeAt(this.pos + 2);\n  if (this.options.ecmaVersion >= 6 && next === 46 && next2 === 46) { // 46 = dot '.'\n    this.pos += 3;\n    return this.finishToken(types$1.ellipsis)\n  } else {\n    ++this.pos;\n    return this.finishToken(types$1.dot)\n  }\n};\n\npp.readToken_slash = function() { // '/'\n  var next = this.input.charCodeAt(this.pos + 1);\n  if (this.exprAllowed) { ++this.pos; return this.readRegexp() }\n  if (next === 61) { return this.finishOp(types$1.assign, 2) }\n  return this.finishOp(types$1.slash, 1)\n};\n\npp.readToken_mult_modulo_exp = function(code) { // '%*'\n  var next = this.input.charCodeAt(this.pos + 1);\n  var size = 1;\n  var tokentype = code === 42 ? types$1.star : types$1.modulo;\n\n  // exponentiation operator ** and **=\n  if (this.options.ecmaVersion >= 7 && code === 42 && next === 42) {\n    ++size;\n    tokentype = types$1.starstar;\n    next = this.input.charCodeAt(this.pos + 2);\n  }\n\n  if (next === 61) { return this.finishOp(types$1.assign, size + 1) }\n  return this.finishOp(tokentype, size)\n};\n\npp.readToken_pipe_amp = function(code) { // '|&'\n  var next = this.input.charCodeAt(this.pos + 1);\n  if (next === code) {\n    if (this.options.ecmaVersion >= 12) {\n      var next2 = this.input.charCodeAt(this.pos + 2);\n      if (next2 === 61) { return this.finishOp(types$1.assign, 3) }\n    }\n    return this.finishOp(code === 124 ? types$1.logicalOR : types$1.logicalAND, 2)\n  }\n  if (next === 61) { return this.finishOp(types$1.assign, 2) }\n  return this.finishOp(code === 124 ? types$1.bitwiseOR : types$1.bitwiseAND, 1)\n};\n\npp.readToken_caret = function() { // '^'\n  var next = this.input.charCodeAt(this.pos + 1);\n  if (next === 61) { return this.finishOp(types$1.assign, 2) }\n  return this.finishOp(types$1.bitwiseXOR, 1)\n};\n\npp.readToken_plus_min = function(code) { // '+-'\n  var next = this.input.charCodeAt(this.pos + 1);\n  if (next === code) {\n    if (next === 45 && !this.inModule && this.input.charCodeAt(this.pos + 2) === 62 &&\n        (this.lastTokEnd === 0 || lineBreak.test(this.input.slice(this.lastTokEnd, this.pos)))) {\n      // A `-->` line comment\n      this.skipLineComment(3);\n      this.skipSpace();\n      return this.nextToken()\n    }\n    return this.finishOp(types$1.incDec, 2)\n  }\n  if (next === 61) { return this.finishOp(types$1.assign, 2) }\n  return this.finishOp(types$1.plusMin, 1)\n};\n\npp.readToken_lt_gt = function(code) { // '<>'\n  var next = this.input.charCodeAt(this.pos + 1);\n  var size = 1;\n  if (next === code) {\n    size = code === 62 && this.input.charCodeAt(this.pos + 2) === 62 ? 3 : 2;\n    if (this.input.charCodeAt(this.pos + size) === 61) { return this.finishOp(types$1.assign, size + 1) }\n    return this.finishOp(types$1.bitShift, size)\n  }\n  if (next === 33 && code === 60 && !this.inModule && this.input.charCodeAt(this.pos + 2) === 45 &&\n      this.input.charCodeAt(this.pos + 3) === 45) {\n    // `<!--`, an XML-style comment that should be interpreted as a line comment\n    this.skipLineComment(4);\n    this.skipSpace();\n    return this.nextToken()\n  }\n  if (next === 61) { size = 2; }\n  return this.finishOp(types$1.relational, size)\n};\n\npp.readToken_eq_excl = function(code) { // '=!'\n  var next = this.input.charCodeAt(this.pos + 1);\n  if (next === 61) { return this.finishOp(types$1.equality, this.input.charCodeAt(this.pos + 2) === 61 ? 3 : 2) }\n  if (code === 61 && next === 62 && this.options.ecmaVersion >= 6) { // '=>'\n    this.pos += 2;\n    return this.finishToken(types$1.arrow)\n  }\n  return this.finishOp(code === 61 ? types$1.eq : types$1.prefix, 1)\n};\n\npp.readToken_question = function() { // '?'\n  var ecmaVersion = this.options.ecmaVersion;\n  if (ecmaVersion >= 11) {\n    var next = this.input.charCodeAt(this.pos + 1);\n    if (next === 46) {\n      var next2 = this.input.charCodeAt(this.pos + 2);\n      if (next2 < 48 || next2 > 57) { return this.finishOp(types$1.questionDot, 2) }\n    }\n    if (next === 63) {\n      if (ecmaVersion >= 12) {\n        var next2$1 = this.input.charCodeAt(this.pos + 2);\n        if (next2$1 === 61) { return this.finishOp(types$1.assign, 3) }\n      }\n      return this.finishOp(types$1.coalesce, 2)\n    }\n  }\n  return this.finishOp(types$1.question, 1)\n};\n\npp.readToken_numberSign = function() { // '#'\n  var ecmaVersion = this.options.ecmaVersion;\n  var code = 35; // '#'\n  if (ecmaVersion >= 13) {\n    ++this.pos;\n    code = this.fullCharCodeAtPos();\n    if (isIdentifierStart(code, true) || code === 92 /* '\\' */) {\n      return this.finishToken(types$1.privateId, this.readWord1())\n    }\n  }\n\n  this.raise(this.pos, \"Unexpected character '\" + codePointToString(code) + \"'\");\n};\n\npp.getTokenFromCode = function(code) {\n  switch (code) {\n  // The interpretation of a dot depends on whether it is followed\n  // by a digit or another two dots.\n  case 46: // '.'\n    return this.readToken_dot()\n\n  // Punctuation tokens.\n  case 40: ++this.pos; return this.finishToken(types$1.parenL)\n  case 41: ++this.pos; return this.finishToken(types$1.parenR)\n  case 59: ++this.pos; return this.finishToken(types$1.semi)\n  case 44: ++this.pos; return this.finishToken(types$1.comma)\n  case 91: ++this.pos; return this.finishToken(types$1.bracketL)\n  case 93: ++this.pos; return this.finishToken(types$1.bracketR)\n  case 123: ++this.pos; return this.finishToken(types$1.braceL)\n  case 125: ++this.pos; return this.finishToken(types$1.braceR)\n  case 58: ++this.pos; return this.finishToken(types$1.colon)\n\n  case 96: // '`'\n    if (this.options.ecmaVersion < 6) { break }\n    ++this.pos;\n    return this.finishToken(types$1.backQuote)\n\n  case 48: // '0'\n    var next = this.input.charCodeAt(this.pos + 1);\n    if (next === 120 || next === 88) { return this.readRadixNumber(16) } // '0x', '0X' - hex number\n    if (this.options.ecmaVersion >= 6) {\n      if (next === 111 || next === 79) { return this.readRadixNumber(8) } // '0o', '0O' - octal number\n      if (next === 98 || next === 66) { return this.readRadixNumber(2) } // '0b', '0B' - binary number\n    }\n\n  // Anything else beginning with a digit is an integer, octal\n  // number, or float.\n  case 49: case 50: case 51: case 52: case 53: case 54: case 55: case 56: case 57: // 1-9\n    return this.readNumber(false)\n\n  // Quotes produce strings.\n  case 34: case 39: // '\"', \"'\"\n    return this.readString(code)\n\n  // Operators are parsed inline in tiny state machines. '=' (61) is\n  // often referred to. `finishOp` simply skips the amount of\n  // characters it is given as second argument, and returns a token\n  // of the type given by its first argument.\n  case 47: // '/'\n    return this.readToken_slash()\n\n  case 37: case 42: // '%*'\n    return this.readToken_mult_modulo_exp(code)\n\n  case 124: case 38: // '|&'\n    return this.readToken_pipe_amp(code)\n\n  case 94: // '^'\n    return this.readToken_caret()\n\n  case 43: case 45: // '+-'\n    return this.readToken_plus_min(code)\n\n  case 60: case 62: // '<>'\n    return this.readToken_lt_gt(code)\n\n  case 61: case 33: // '=!'\n    return this.readToken_eq_excl(code)\n\n  case 63: // '?'\n    return this.readToken_question()\n\n  case 126: // '~'\n    return this.finishOp(types$1.prefix, 1)\n\n  case 35: // '#'\n    return this.readToken_numberSign()\n  }\n\n  this.raise(this.pos, \"Unexpected character '\" + codePointToString(code) + \"'\");\n};\n\npp.finishOp = function(type, size) {\n  var str = this.input.slice(this.pos, this.pos + size);\n  this.pos += size;\n  return this.finishToken(type, str)\n};\n\npp.readRegexp = function() {\n  var escaped, inClass, start = this.pos;\n  for (;;) {\n    if (this.pos >= this.input.length) { this.raise(start, \"Unterminated regular expression\"); }\n    var ch = this.input.charAt(this.pos);\n    if (lineBreak.test(ch)) { this.raise(start, \"Unterminated regular expression\"); }\n    if (!escaped) {\n      if (ch === \"[\") { inClass = true; }\n      else if (ch === \"]\" && inClass) { inClass = false; }\n      else if (ch === \"/\" && !inClass) { break }\n      escaped = ch === \"\\\\\";\n    } else { escaped = false; }\n    ++this.pos;\n  }\n  var pattern = this.input.slice(start, this.pos);\n  ++this.pos;\n  var flagsStart = this.pos;\n  var flags = this.readWord1();\n  if (this.containsEsc) { this.unexpected(flagsStart); }\n\n  // Validate pattern\n  var state = this.regexpState || (this.regexpState = new RegExpValidationState(this));\n  state.reset(start, pattern, flags);\n  this.validateRegExpFlags(state);\n  this.validateRegExpPattern(state);\n\n  // Create Literal#value property value.\n  var value = null;\n  try {\n    value = new RegExp(pattern, flags);\n  } catch (e) {\n    // ESTree requires null if it failed to instantiate RegExp object.\n    // https://github.com/estree/estree/blob/a27003adf4fd7bfad44de9cef372a2eacd527b1c/es5.md#regexpliteral\n  }\n\n  return this.finishToken(types$1.regexp, {pattern: pattern, flags: flags, value: value})\n};\n\n// Read an integer in the given radix. Return null if zero digits\n// were read, the integer value otherwise. When `len` is given, this\n// will return `null` unless the integer has exactly `len` digits.\n\npp.readInt = function(radix, len, maybeLegacyOctalNumericLiteral) {\n  // `len` is used for character escape sequences. In that case, disallow separators.\n  var allowSeparators = this.options.ecmaVersion >= 12 && len === undefined;\n\n  // `maybeLegacyOctalNumericLiteral` is true if it doesn't have prefix (0x,0o,0b)\n  // and isn't fraction part nor exponent part. In that case, if the first digit\n  // is zero then disallow separators.\n  var isLegacyOctalNumericLiteral = maybeLegacyOctalNumericLiteral && this.input.charCodeAt(this.pos) === 48;\n\n  var start = this.pos, total = 0, lastCode = 0;\n  for (var i = 0, e = len == null ? Infinity : len; i < e; ++i, ++this.pos) {\n    var code = this.input.charCodeAt(this.pos), val = (void 0);\n\n    if (allowSeparators && code === 95) {\n      if (isLegacyOctalNumericLiteral) { this.raiseRecoverable(this.pos, \"Numeric separator is not allowed in legacy octal numeric literals\"); }\n      if (lastCode === 95) { this.raiseRecoverable(this.pos, \"Numeric separator must be exactly one underscore\"); }\n      if (i === 0) { this.raiseRecoverable(this.pos, \"Numeric separator is not allowed at the first of digits\"); }\n      lastCode = code;\n      continue\n    }\n\n    if (code >= 97) { val = code - 97 + 10; } // a\n    else if (code >= 65) { val = code - 65 + 10; } // A\n    else if (code >= 48 && code <= 57) { val = code - 48; } // 0-9\n    else { val = Infinity; }\n    if (val >= radix) { break }\n    lastCode = code;\n    total = total * radix + val;\n  }\n\n  if (allowSeparators && lastCode === 95) { this.raiseRecoverable(this.pos - 1, \"Numeric separator is not allowed at the last of digits\"); }\n  if (this.pos === start || len != null && this.pos - start !== len) { return null }\n\n  return total\n};\n\nfunction stringToNumber(str, isLegacyOctalNumericLiteral) {\n  if (isLegacyOctalNumericLiteral) {\n    return parseInt(str, 8)\n  }\n\n  // `parseFloat(value)` stops parsing at the first numeric separator then returns a wrong value.\n  return parseFloat(str.replace(/_/g, \"\"))\n}\n\nfunction stringToBigInt(str) {\n  if (typeof BigInt !== \"function\") {\n    return null\n  }\n\n  // `BigInt(value)` throws syntax error if the string contains numeric separators.\n  return BigInt(str.replace(/_/g, \"\"))\n}\n\npp.readRadixNumber = function(radix) {\n  var start = this.pos;\n  this.pos += 2; // 0x\n  var val = this.readInt(radix);\n  if (val == null) { this.raise(this.start + 2, \"Expected number in radix \" + radix); }\n  if (this.options.ecmaVersion >= 11 && this.input.charCodeAt(this.pos) === 110) {\n    val = stringToBigInt(this.input.slice(start, this.pos));\n    ++this.pos;\n  } else if (isIdentifierStart(this.fullCharCodeAtPos())) { this.raise(this.pos, \"Identifier directly after number\"); }\n  return this.finishToken(types$1.num, val)\n};\n\n// Read an integer, octal integer, or floating-point number.\n\npp.readNumber = function(startsWithDot) {\n  var start = this.pos;\n  if (!startsWithDot && this.readInt(10, undefined, true) === null) { this.raise(start, \"Invalid number\"); }\n  var octal = this.pos - start >= 2 && this.input.charCodeAt(start) === 48;\n  if (octal && this.strict) { this.raise(start, \"Invalid number\"); }\n  var next = this.input.charCodeAt(this.pos);\n  if (!octal && !startsWithDot && this.options.ecmaVersion >= 11 && next === 110) {\n    var val$1 = stringToBigInt(this.input.slice(start, this.pos));\n    ++this.pos;\n    if (isIdentifierStart(this.fullCharCodeAtPos())) { this.raise(this.pos, \"Identifier directly after number\"); }\n    return this.finishToken(types$1.num, val$1)\n  }\n  if (octal && /[89]/.test(this.input.slice(start, this.pos))) { octal = false; }\n  if (next === 46 && !octal) { // '.'\n    ++this.pos;\n    this.readInt(10);\n    next = this.input.charCodeAt(this.pos);\n  }\n  if ((next === 69 || next === 101) && !octal) { // 'eE'\n    next = this.input.charCodeAt(++this.pos);\n    if (next === 43 || next === 45) { ++this.pos; } // '+-'\n    if (this.readInt(10) === null) { this.raise(start, \"Invalid number\"); }\n  }\n  if (isIdentifierStart(this.fullCharCodeAtPos())) { this.raise(this.pos, \"Identifier directly after number\"); }\n\n  var val = stringToNumber(this.input.slice(start, this.pos), octal);\n  return this.finishToken(types$1.num, val)\n};\n\n// Read a string value, interpreting backslash-escapes.\n\npp.readCodePoint = function() {\n  var ch = this.input.charCodeAt(this.pos), code;\n\n  if (ch === 123) { // '{'\n    if (this.options.ecmaVersion < 6) { this.unexpected(); }\n    var codePos = ++this.pos;\n    code = this.readHexChar(this.input.indexOf(\"}\", this.pos) - this.pos);\n    ++this.pos;\n    if (code > 0x10FFFF) { this.invalidStringToken(codePos, \"Code point out of bounds\"); }\n  } else {\n    code = this.readHexChar(4);\n  }\n  return code\n};\n\npp.readString = function(quote) {\n  var out = \"\", chunkStart = ++this.pos;\n  for (;;) {\n    if (this.pos >= this.input.length) { this.raise(this.start, \"Unterminated string constant\"); }\n    var ch = this.input.charCodeAt(this.pos);\n    if (ch === quote) { break }\n    if (ch === 92) { // '\\'\n      out += this.input.slice(chunkStart, this.pos);\n      out += this.readEscapedChar(false);\n      chunkStart = this.pos;\n    } else if (ch === 0x2028 || ch === 0x2029) {\n      if (this.options.ecmaVersion < 10) { this.raise(this.start, \"Unterminated string constant\"); }\n      ++this.pos;\n      if (this.options.locations) {\n        this.curLine++;\n        this.lineStart = this.pos;\n      }\n    } else {\n      if (isNewLine(ch)) { this.raise(this.start, \"Unterminated string constant\"); }\n      ++this.pos;\n    }\n  }\n  out += this.input.slice(chunkStart, this.pos++);\n  return this.finishToken(types$1.string, out)\n};\n\n// Reads template string tokens.\n\nvar INVALID_TEMPLATE_ESCAPE_ERROR = {};\n\npp.tryReadTemplateToken = function() {\n  this.inTemplateElement = true;\n  try {\n    this.readTmplToken();\n  } catch (err) {\n    if (err === INVALID_TEMPLATE_ESCAPE_ERROR) {\n      this.readInvalidTemplateToken();\n    } else {\n      throw err\n    }\n  }\n\n  this.inTemplateElement = false;\n};\n\npp.invalidStringToken = function(position, message) {\n  if (this.inTemplateElement && this.options.ecmaVersion >= 9) {\n    throw INVALID_TEMPLATE_ESCAPE_ERROR\n  } else {\n    this.raise(position, message);\n  }\n};\n\npp.readTmplToken = function() {\n  var out = \"\", chunkStart = this.pos;\n  for (;;) {\n    if (this.pos >= this.input.length) { this.raise(this.start, \"Unterminated template\"); }\n    var ch = this.input.charCodeAt(this.pos);\n    if (ch === 96 || ch === 36 && this.input.charCodeAt(this.pos + 1) === 123) { // '`', '${'\n      if (this.pos === this.start && (this.type === types$1.template || this.type === types$1.invalidTemplate)) {\n        if (ch === 36) {\n          this.pos += 2;\n          return this.finishToken(types$1.dollarBraceL)\n        } else {\n          ++this.pos;\n          return this.finishToken(types$1.backQuote)\n        }\n      }\n      out += this.input.slice(chunkStart, this.pos);\n      return this.finishToken(types$1.template, out)\n    }\n    if (ch === 92) { // '\\'\n      out += this.input.slice(chunkStart, this.pos);\n      out += this.readEscapedChar(true);\n      chunkStart = this.pos;\n    } else if (isNewLine(ch)) {\n      out += this.input.slice(chunkStart, this.pos);\n      ++this.pos;\n      switch (ch) {\n      case 13:\n        if (this.input.charCodeAt(this.pos) === 10) { ++this.pos; }\n      case 10:\n        out += \"\\n\";\n        break\n      default:\n        out += String.fromCharCode(ch);\n        break\n      }\n      if (this.options.locations) {\n        ++this.curLine;\n        this.lineStart = this.pos;\n      }\n      chunkStart = this.pos;\n    } else {\n      ++this.pos;\n    }\n  }\n};\n\n// Reads a template token to search for the end, without validating any escape sequences\npp.readInvalidTemplateToken = function() {\n  for (; this.pos < this.input.length; this.pos++) {\n    switch (this.input[this.pos]) {\n    case \"\\\\\":\n      ++this.pos;\n      break\n\n    case \"$\":\n      if (this.input[this.pos + 1] !== \"{\") {\n        break\n      }\n\n    // falls through\n    case \"`\":\n      return this.finishToken(types$1.invalidTemplate, this.input.slice(this.start, this.pos))\n\n    // no default\n    }\n  }\n  this.raise(this.start, \"Unterminated template\");\n};\n\n// Used to read escaped characters\n\npp.readEscapedChar = function(inTemplate) {\n  var ch = this.input.charCodeAt(++this.pos);\n  ++this.pos;\n  switch (ch) {\n  case 110: return \"\\n\" // 'n' -> '\\n'\n  case 114: return \"\\r\" // 'r' -> '\\r'\n  case 120: return String.fromCharCode(this.readHexChar(2)) // 'x'\n  case 117: return codePointToString(this.readCodePoint()) // 'u'\n  case 116: return \"\\t\" // 't' -> '\\t'\n  case 98: return \"\\b\" // 'b' -> '\\b'\n  case 118: return \"\\u000b\" // 'v' -> '\\u000b'\n  case 102: return \"\\f\" // 'f' -> '\\f'\n  case 13: if (this.input.charCodeAt(this.pos) === 10) { ++this.pos; } // '\\r\\n'\n  case 10: // ' \\n'\n    if (this.options.locations) { this.lineStart = this.pos; ++this.curLine; }\n    return \"\"\n  case 56:\n  case 57:\n    if (this.strict) {\n      this.invalidStringToken(\n        this.pos - 1,\n        \"Invalid escape sequence\"\n      );\n    }\n    if (inTemplate) {\n      var codePos = this.pos - 1;\n\n      this.invalidStringToken(\n        codePos,\n        \"Invalid escape sequence in template string\"\n      );\n    }\n  default:\n    if (ch >= 48 && ch <= 55) {\n      var octalStr = this.input.substr(this.pos - 1, 3).match(/^[0-7]+/)[0];\n      var octal = parseInt(octalStr, 8);\n      if (octal > 255) {\n        octalStr = octalStr.slice(0, -1);\n        octal = parseInt(octalStr, 8);\n      }\n      this.pos += octalStr.length - 1;\n      ch = this.input.charCodeAt(this.pos);\n      if ((octalStr !== \"0\" || ch === 56 || ch === 57) && (this.strict || inTemplate)) {\n        this.invalidStringToken(\n          this.pos - 1 - octalStr.length,\n          inTemplate\n            ? \"Octal literal in template string\"\n            : \"Octal literal in strict mode\"\n        );\n      }\n      return String.fromCharCode(octal)\n    }\n    if (isNewLine(ch)) {\n      // Unicode new line characters after \\ get removed from output in both\n      // template literals and strings\n      return \"\"\n    }\n    return String.fromCharCode(ch)\n  }\n};\n\n// Used to read character escape sequences ('\\x', '\\u', '\\U').\n\npp.readHexChar = function(len) {\n  var codePos = this.pos;\n  var n = this.readInt(16, len);\n  if (n === null) { this.invalidStringToken(codePos, \"Bad character escape sequence\"); }\n  return n\n};\n\n// Read an identifier, and return it as a string. Sets `this.containsEsc`\n// to whether the word contained a '\\u' escape.\n//\n// Incrementally adds only escaped chars, adding other chunks as-is\n// as a micro-optimization.\n\npp.readWord1 = function() {\n  this.containsEsc = false;\n  var word = \"\", first = true, chunkStart = this.pos;\n  var astral = this.options.ecmaVersion >= 6;\n  while (this.pos < this.input.length) {\n    var ch = this.fullCharCodeAtPos();\n    if (isIdentifierChar(ch, astral)) {\n      this.pos += ch <= 0xffff ? 1 : 2;\n    } else if (ch === 92) { // \"\\\"\n      this.containsEsc = true;\n      word += this.input.slice(chunkStart, this.pos);\n      var escStart = this.pos;\n      if (this.input.charCodeAt(++this.pos) !== 117) // \"u\"\n        { this.invalidStringToken(this.pos, \"Expecting Unicode escape sequence \\\\uXXXX\"); }\n      ++this.pos;\n      var esc = this.readCodePoint();\n      if (!(first ? isIdentifierStart : isIdentifierChar)(esc, astral))\n        { this.invalidStringToken(escStart, \"Invalid Unicode escape\"); }\n      word += codePointToString(esc);\n      chunkStart = this.pos;\n    } else {\n      break\n    }\n    first = false;\n  }\n  return word + this.input.slice(chunkStart, this.pos)\n};\n\n// Read an identifier or keyword token. Will check for reserved\n// words when necessary.\n\npp.readWord = function() {\n  var word = this.readWord1();\n  var type = types$1.name;\n  if (this.keywords.test(word)) {\n    type = keywords[word];\n  }\n  return this.finishToken(type, word)\n};\n\n// Acorn is a tiny, fast JavaScript parser written in JavaScript.\n\nvar version = \"8.8.2\";\n\nParser.acorn = {\n  Parser: Parser,\n  version: version,\n  defaultOptions: defaultOptions,\n  Position: Position,\n  SourceLocation: SourceLocation,\n  getLineInfo: getLineInfo,\n  Node: Node,\n  TokenType: TokenType,\n  tokTypes: types$1,\n  keywordTypes: keywords,\n  TokContext: TokContext,\n  tokContexts: types,\n  isIdentifierChar: isIdentifierChar,\n  isIdentifierStart: isIdentifierStart,\n  Token: Token,\n  isNewLine: isNewLine,\n  lineBreak: lineBreak,\n  lineBreakG: lineBreakG,\n  nonASCIIwhitespace: nonASCIIwhitespace\n};\n\n// The main exported interface (under `self.acorn` when in the\n// browser) is a `parse` function that takes a code string and\n// returns an abstract syntax tree as specified by [Mozilla parser\n// API][api].\n//\n// [api]: https://developer.mozilla.org/en-US/docs/SpiderMonkey/Parser_API\n\nfunction parse(input, options) {\n  return Parser.parse(input, options)\n}\n\n// This function tries to parse a single expression at a given\n// offset in a string. Useful for parsing mixed-language formats\n// that embed JavaScript expressions.\n\nfunction parseExpressionAt(input, pos, options) {\n  return Parser.parseExpressionAt(input, pos, options)\n}\n\n// Acorn is organized as a tokenizer and a recursive-descent parser.\n// The `tokenizer` export provides an interface to the tokenizer.\n\nfunction tokenizer(input, options) {\n  return Parser.tokenizer(input, options)\n}\n\nexport { Node, Parser, Position, SourceLocation, TokContext, Token, TokenType, defaultOptions, getLineInfo, isIdentifierChar, isIdentifierStart, isNewLine, keywords as keywordTypes, lineBreak, lineBreakG, nonASCIIwhitespace, parse, parseExpressionAt, types as tokContexts, types$1 as tokTypes, tokenizer, version };\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/YWp2LWZvcm1hdHNAMi4xLjE=",
    "content": "/dist/index.js\u0005\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst formats_1 = require(\"./formats\");\nconst limit_1 = require(\"./limit\");\nconst codegen_1 = require(\"ajv/dist/compile/codegen\");\nconst fullName = new codegen_1.Name(\"fullFormats\");\nconst fastName = new codegen_1.Name(\"fastFormats\");\nconst formatsPlugin = (ajv, opts = { keywords: true }) => {\n    if (Array.isArray(opts)) {\n        addFormats(ajv, opts, formats_1.fullFormats, fullName);\n        return ajv;\n    }\n    const [formats, exportName] = opts.mode === \"fast\" ? [formats_1.fastFormats, fastName] : [formats_1.fullFormats, fullName];\n    const list = opts.formats || formats_1.formatNames;\n    addFormats(ajv, list, formats, exportName);\n    if (opts.keywords)\n        limit_1.default(ajv);\n    return ajv;\n};\nformatsPlugin.get = (name, mode = \"full\") => {\n    const formats = mode === \"fast\" ? formats_1.fastFormats : formats_1.fullFormats;\n    const f = formats[name];\n    if (!f)\n        throw new Error(`Unknown format \"${name}\"`);\n    return f;\n};\nfunction addFormats(ajv, list, fs, exportName) {\n    var _a;\n    var _b;\n    (_a = (_b = ajv.opts.code).formats) !== null && _a !== void 0 ? _a : (_b.formats = codegen_1._ `require(\"ajv-formats/dist/formats\").${exportName}`);\n    for (const f of list)\n        ajv.addFormat(f, fs[f]);\n}\nmodule.exports = exports = formatsPlugin;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = formatsPlugin;\n//# sourceMappingURL=index.js.map/README.md\u0017# ajv-formats\n\nJSON Schema formats for Ajv\n\n[![Build Status](https://travis-ci.org/ajv-validator/ajv-formats.svg?branch=master)](https://travis-ci.org/ajv-validator/ajv-formats)\n[![npm](https://img.shields.io/npm/v/ajv-formats.svg)](https://www.npmjs.com/package/ajv-formats)\n[![Gitter](https://img.shields.io/gitter/room/ajv-validator/ajv.svg)](https://gitter.im/ajv-validator/ajv)\n[![GitHub Sponsors](https://img.shields.io/badge/$-sponsors-brightgreen)](https://github.com/sponsors/epoberezkin)\n\n## Usage\n\n```javascript\n// ESM/TypeScript import\nimport Ajv from \"ajv\"\nimport addFormats from \"ajv-formats\"\n// Node.js require:\nconst Ajv = require(\"ajv\")\nconst addFormats = require(\"ajv-formats\")\n\nconst ajv = new Ajv()\naddFormats(ajv)\n```\n\n## Formats\n\nThe package defines these formats:\n\n- _date_: full-date according to [RFC3339](http://tools.ietf.org/html/rfc3339#section-5.6).\n- _time_: time with optional time-zone.\n- _date-time_: date-time from the same source (time-zone is mandatory).\n- _duration_: duration from [RFC3339](https://tools.ietf.org/html/rfc3339#appendix-A)\n- _uri_: full URI.\n- _uri-reference_: URI reference, including full and relative URIs.\n- _uri-template_: URI template according to [RFC6570](https://tools.ietf.org/html/rfc6570)\n- _url_ (deprecated): [URL record](https://url.spec.whatwg.org/#concept-url).\n- _email_: email address.\n- _hostname_: host name according to [RFC1034](http://tools.ietf.org/html/rfc1034#section-3.5).\n- _ipv4_: IP address v4.\n- _ipv6_: IP address v6.\n- _regex_: tests whether a string is a valid regular expression by passing it to RegExp constructor.\n- _uuid_: Universally Unique IDentifier according to [RFC4122](http://tools.ietf.org/html/rfc4122).\n- _json-pointer_: JSON-pointer according to [RFC6901](https://tools.ietf.org/html/rfc6901).\n- _relative-json-pointer_: relative JSON-pointer according to [this draft](http://tools.ietf.org/html/draft-luff-relative-json-pointer-00).\n- _byte_: base64 encoded data according to the [openApi 3.0.0 specification](https://spec.openapis.org/oas/v3.0.0#data-types)\n- _int32_: signed 32 bits integer according to the [openApi 3.0.0 specification](https://spec.openapis.org/oas/v3.0.0#data-types)\n- _int64_: signed 64 bits according to the [openApi 3.0.0 specification](https://spec.openapis.org/oas/v3.0.0#data-types)\n- _float_: float according to the [openApi 3.0.0 specification](https://spec.openapis.org/oas/v3.0.0#data-types)\n- _double_: double according to the [openApi 3.0.0 specification](https://spec.openapis.org/oas/v3.0.0#data-types)\n- _password_: password string according to the [openApi 3.0.0 specification](https://spec.openapis.org/oas/v3.0.0#data-types)\n- _binary_: binary string according to the [openApi 3.0.0 specification](https://spec.openapis.org/oas/v3.0.0#data-types)\n\nSee regular expressions used for format validation and the sources that were used in [formats.ts](https://github.com/ajv-validator/ajv-formats/blob/master/src/formats.ts).\n\n**Please note**: JSON Schema draft-07 also defines formats `iri`, `iri-reference`, `idn-hostname` and `idn-email` for URLs, hostnames and emails with international characters. These formats are available in [ajv-formats-draft2019](https://github.com/luzlab/ajv-formats-draft2019) plugin.\n\n## Keywords to compare values: `formatMaximum` / `formatMinimum` and `formatExclusiveMaximum` / `formatExclusiveMinimum`\n\nThese keywords allow to define minimum/maximum constraints when the format keyword defines ordering (`compare` function in format definition).\n\nThese keywords are added to ajv instance when ajv-formats is used without options or with option `keywords: true`.\n\nThese keywords apply only to strings. If the data is not a string, the validation succeeds.\n\nThe value of keywords `formatMaximum`/`formatMinimum` and `formatExclusiveMaximum`/`formatExclusiveMinimum` should be a string or [\\$data reference](https://github.com/ajv-validator/ajv/blob/master/docs/validation.md#data-reference). This value is the maximum (minimum) allowed value for the data to be valid as determined by `format` keyword. If `format` keyword is not present schema compilation will throw exception.\n\nWhen these keyword are added, they also add comparison functions to formats `\"date\"`, `\"time\"` and `\"date-time\"`. User-defined formats also can have comparison functions. See [addFormat](https://github.com/ajv-validator/ajv/blob/master/docs/api.md#api-addformat) method.\n\n```javascript\nrequire(\"ajv-formats\")(ajv)\n\nconst schema = {\n  type: \"string\",\n  format: \"date\",\n  formatMinimum: \"2016-02-06\",\n  formatExclusiveMaximum: \"2016-12-27\",\n}\n\nconst validDataList = [\"2016-02-06\", \"2016-12-26\"]\n\nconst invalidDataList = [\"2016-02-05\", \"2016-12-27\", \"abc\"]\n```\n\n## Options\n\nOptions can be passed via the second parameter. Options value can be\n\n1. The list of format names that will be added to ajv instance:\n\n```javascript\naddFormats(ajv, [\"date\", \"time\"])\n```\n\n**Please note**: when ajv encounters an undefined format it throws exception (unless ajv instance was configured with `strict: false` option). To allow specific undefined formats they have to be passed to ajv instance via `formats` option with `true` value:\n\n```javascript\nconst ajv = new Ajv((formats: {date: true, time: true})) // to ignore \"date\" and \"time\" formats in schemas.\n```\n\n2. Format validation mode (default is `\"full\"`) with optional list of format names and `keywords` option to add additional format comparison keywords:\n\n```javascript\naddFormats(ajv, {mode: \"fast\"})\n```\n\nor\n\n```javascript\naddFormats(ajv, {mode: \"fast\", formats: [\"date\", \"time\"], keywords: true})\n```\n\nIn `\"fast\"` mode the following formats are simplified: `\"date\"`, `\"time\"`, `\"date-time\"`, `\"uri\"`, `\"uri-reference\"`, `\"email\"`. For example `\"date\"`, `\"time\"` and `\"date-time\"` do not validate ranges in `\"fast\"` mode, only string structure, and other formats have simplified regular expressions.\n\n## Tests\n\n```bash\nnpm install\ngit submodule update --init\nnpm test\n```\n\n## License\n\n[MIT](https://github.com/ajv-validator/ajv-formats/blob/master/LICENSE)\n/dist/limit.js.map\u000b\u0002{\"version\":3,\"file\":\"limit.js\",\"sourceRoot\":\"\",\"sources\":[\"../src/limit.ts\"],\"names\":[],\"mappings\":\"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\"}/dist/limit.d.ts\u0001import type { Plugin, CodeKeywordDefinition, ErrorObject } from \"ajv\";\ndeclare type Kwd = \"formatMaximum\" | \"formatMinimum\" | \"formatExclusiveMaximum\" | \"formatExclusiveMinimum\";\ndeclare type Comparison = \"<=\" | \">=\" | \"<\" | \">\";\nexport declare type LimitFormatError = ErrorObject<Kwd, {\n    limit: string;\n    comparison: Comparison;\n}>;\nexport declare const formatLimitDefinition: CodeKeywordDefinition;\ndeclare const formatLimitPlugin: Plugin<undefined>;\nexport default formatLimitPlugin;\n/dist/formats.d.ts\u0002import type { Format } from \"ajv\";\nexport declare type FormatMode = \"fast\" | \"full\";\nexport declare type FormatName = \"date\" | \"time\" | \"date-time\" | \"duration\" | \"uri\" | \"uri-reference\" | \"uri-template\" | \"url\" | \"email\" | \"hostname\" | \"ipv4\" | \"ipv6\" | \"regex\" | \"uuid\" | \"json-pointer\" | \"json-pointer-uri-fragment\" | \"relative-json-pointer\" | \"byte\" | \"int32\" | \"int64\" | \"float\" | \"double\" | \"password\" | \"binary\";\nexport declare type DefinedFormats = {\n    [key in FormatName]: Format;\n};\nexport declare const fullFormats: DefinedFormats;\nexport declare const fastFormats: DefinedFormats;\nexport declare const formatNames: FormatName[];\n/package.json\u0007i{\n  \"name\": \"ajv-formats\",\n  \"version\": \"2.1.1\",\n  \"description\": \"Format validation for Ajv v7+\",\n  \"main\": \"dist/index.js\",\n  \"types\": \"dist/index.d.ts\",\n  \"files\": [\n    \"src/\",\n    \"dist/\"\n  ],\n  \"scripts\": {\n    \"build\": \"tsc\",\n    \"prettier:write\": \"prettier --write \\\"./**/*.{md,json,yaml,js,ts}\\\"\",\n    \"prettier:check\": \"prettier --list-different \\\"./**/*.{md,json,yaml,js,ts}\\\"\",\n    \"eslint\": \"eslint --ext .ts ./src/**/*\",\n    \"test-spec\": \"jest\",\n    \"test-cov\": \"jest --coverage\",\n    \"test\": \"npm run prettier:check && npm run build && npm run eslint && npm run test-cov\",\n    \"ci-test\": \"npm run test\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/ajv-validator/ajv-formats.git\"\n  },\n  \"keywords\": [\n    \"Ajv\",\n    \"JSON-Schema\",\n    \"format\",\n    \"validation\"\n  ],\n  \"author\": \"Evgeny Poberezkin\",\n  \"license\": \"MIT\",\n  \"bugs\": {\n    \"url\": \"https://github.com/ajv-validator/ajv-formats/issues\"\n  },\n  \"homepage\": \"https://github.com/ajv-validator/ajv-formats#readme\",\n  \"dependencies\": {\n    \"ajv\": \"^8.0.0\"\n  },\n  \"peerDependencies\": {\n    \"ajv\": \"^8.0.0\"\n  },\n  \"peerDependenciesMeta\": {\n    \"ajv\": {\n      \"optional\": true\n    }\n  },\n  \"devDependencies\": {\n    \"@ajv-validator/config\": \"^0.3.0\",\n    \"@types/jest\": \"^26.0.5\",\n    \"@types/node\": \"^14.10.1\",\n    \"@typescript-eslint/eslint-plugin\": \"^3.7.0\",\n    \"@typescript-eslint/parser\": \"^3.7.0\",\n    \"ajv\": \"^8.0.0\",\n    \"eslint\": \"^7.5.0\",\n    \"eslint-config-prettier\": \"^6.11.0\",\n    \"husky\": \"^4.2.5\",\n    \"jest\": \"^26.1.0\",\n    \"json-schema-test\": \"^2.0.0\",\n    \"lint-staged\": \"^10.2.11\",\n    \"prettier\": \"^2.3.2\",\n    \"ts-jest\": \"^26.1.3\",\n    \"typescript\": \"^4.0.0\"\n  },\n  \"prettier\": \"@ajv-validator/config/prettierrc.json\",\n  \"husky\": {\n    \"hooks\": {\n      \"pre-commit\": \"lint-staged && npm test\"\n    }\n  },\n  \"lint-staged\": {\n    \"*.{md,json,yaml,js,ts}\": \"prettier --write\"\n  }\n}\n/dist/limit.js\u000b\"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.formatLimitDefinition = void 0;\nconst ajv_1 = require(\"ajv\");\nconst codegen_1 = require(\"ajv/dist/compile/codegen\");\nconst ops = codegen_1.operators;\nconst KWDs = {\n    formatMaximum: { okStr: \"<=\", ok: ops.LTE, fail: ops.GT },\n    formatMinimum: { okStr: \">=\", ok: ops.GTE, fail: ops.LT },\n    formatExclusiveMaximum: { okStr: \"<\", ok: ops.LT, fail: ops.GTE },\n    formatExclusiveMinimum: { okStr: \">\", ok: ops.GT, fail: ops.LTE },\n};\nconst error = {\n    message: ({ keyword, schemaCode }) => codegen_1.str `should be ${KWDs[keyword].okStr} ${schemaCode}`,\n    params: ({ keyword, schemaCode }) => codegen_1._ `{comparison: ${KWDs[keyword].okStr}, limit: ${schemaCode}}`,\n};\nexports.formatLimitDefinition = {\n    keyword: Object.keys(KWDs),\n    type: \"string\",\n    schemaType: \"string\",\n    $data: true,\n    error,\n    code(cxt) {\n        const { gen, data, schemaCode, keyword, it } = cxt;\n        const { opts, self } = it;\n        if (!opts.validateFormats)\n            return;\n        const fCxt = new ajv_1.KeywordCxt(it, self.RULES.all.format.definition, \"format\");\n        if (fCxt.$data)\n            validate$DataFormat();\n        else\n            validateFormat();\n        function validate$DataFormat() {\n            const fmts = gen.scopeValue(\"formats\", {\n                ref: self.formats,\n                code: opts.code.formats,\n            });\n            const fmt = gen.const(\"fmt\", codegen_1._ `${fmts}[${fCxt.schemaCode}]`);\n            cxt.fail$data(codegen_1.or(codegen_1._ `typeof ${fmt} != \"object\"`, codegen_1._ `${fmt} instanceof RegExp`, codegen_1._ `typeof ${fmt}.compare != \"function\"`, compareCode(fmt)));\n        }\n        function validateFormat() {\n            const format = fCxt.schema;\n            const fmtDef = self.formats[format];\n            if (!fmtDef || fmtDef === true)\n                return;\n            if (typeof fmtDef != \"object\" ||\n                fmtDef instanceof RegExp ||\n                typeof fmtDef.compare != \"function\") {\n                throw new Error(`\"${keyword}\": format \"${format}\" does not define \"compare\" function`);\n            }\n            const fmt = gen.scopeValue(\"formats\", {\n                key: format,\n                ref: fmtDef,\n                code: opts.code.formats ? codegen_1._ `${opts.code.formats}${codegen_1.getProperty(format)}` : undefined,\n            });\n            cxt.fail$data(compareCode(fmt));\n        }\n        function compareCode(fmt) {\n            return codegen_1._ `${fmt}.compare(${data}, ${schemaCode}) ${KWDs[keyword].fail} 0`;\n        }\n    },\n    dependencies: [\"format\"],\n};\nconst formatLimitPlugin = (ajv) => {\n    ajv.addKeyword(exports.formatLimitDefinition);\n    return ajv;\n};\nexports.default = formatLimitPlugin;\n//# sourceMappingURL=limit.js.map/dist/formats.js.map\u0015{\"version\":3,\"file\":\"formats.js\",\"sourceRoot\":\"\",\"sources\":[\"../src/formats.ts\"],\"names\":[],\"mappings\":\"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\"}/src/formats.ts,import type {Format, FormatDefinition} from \"ajv\"\nimport type {FormatValidator, FormatCompare} from \"ajv/dist/types\"\n\nexport type FormatMode = \"fast\" | \"full\"\n\nexport type FormatName =\n  | \"date\"\n  | \"time\"\n  | \"date-time\"\n  | \"duration\"\n  | \"uri\"\n  | \"uri-reference\"\n  | \"uri-template\"\n  | \"url\"\n  | \"email\"\n  | \"hostname\"\n  | \"ipv4\"\n  | \"ipv6\"\n  | \"regex\"\n  | \"uuid\"\n  | \"json-pointer\"\n  | \"json-pointer-uri-fragment\"\n  | \"relative-json-pointer\"\n  | \"byte\"\n  | \"int32\"\n  | \"int64\"\n  | \"float\"\n  | \"double\"\n  | \"password\"\n  | \"binary\"\n\nexport type DefinedFormats = {\n  [key in FormatName]: Format\n}\n\nfunction fmtDef(\n  validate: RegExp | FormatValidator<string>,\n  compare: FormatCompare<string>\n): FormatDefinition<string> {\n  return {validate, compare}\n}\n\nexport const fullFormats: DefinedFormats = {\n  // date: http://tools.ietf.org/html/rfc3339#section-5.6\n  date: fmtDef(date, compareDate),\n  // date-time: http://tools.ietf.org/html/rfc3339#section-5.6\n  time: fmtDef(time, compareTime),\n  \"date-time\": fmtDef(date_time, compareDateTime),\n  // duration: https://tools.ietf.org/html/rfc3339#appendix-A\n  duration: /^P(?!$)((\\d+Y)?(\\d+M)?(\\d+D)?(T(?=\\d)(\\d+H)?(\\d+M)?(\\d+S)?)?|(\\d+W)?)$/,\n  uri,\n  \"uri-reference\":\n    /^(?:[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,\n  // uri-template: https://tools.ietf.org/html/rfc6570\n  \"uri-template\":\n    /^(?:(?:[^\\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,\n  // For the source: https://gist.github.com/dperini/729294\n  // For test cases: https://mathiasbynens.be/demo/url-regex\n  url: /^(?:https?|ftp):\\/\\/(?:\\S+(?::\\S*)?@)?(?:(?!(?:10|127)(?:\\.\\d{1,3}){3})(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z0-9\\u{00a1}-\\u{ffff}]+-)*[a-z0-9\\u{00a1}-\\u{ffff}]+)(?:\\.(?:[a-z0-9\\u{00a1}-\\u{ffff}]+-)*[a-z0-9\\u{00a1}-\\u{ffff}]+)*(?:\\.(?:[a-z\\u{00a1}-\\u{ffff}]{2,})))(?::\\d{2,5})?(?:\\/[^\\s]*)?$/iu,\n  email:\n    /^[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,\n  hostname:\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,\n  // optimized https://www.safaribooksonline.com/library/view/regular-expressions-cookbook/9780596802837/ch07s16.html\n  ipv4: /^(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$/,\n  ipv6: /^((([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}))|:)))$/i,\n  regex,\n  // uuid: http://tools.ietf.org/html/rfc4122\n  uuid: /^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i,\n  // JSON-pointer: https://tools.ietf.org/html/rfc6901\n  // uri fragment: https://tools.ietf.org/html/rfc3986#appendix-A\n  \"json-pointer\": /^(?:\\/(?:[^~/]|~0|~1)*)*$/,\n  \"json-pointer-uri-fragment\": /^#(?:\\/(?:[a-z0-9_\\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i,\n  // relative JSON-pointer: http://tools.ietf.org/html/draft-luff-relative-json-pointer-00\n  \"relative-json-pointer\": /^(?:0|[1-9][0-9]*)(?:#|(?:\\/(?:[^~/]|~0|~1)*)*)$/,\n  // the following formats are used by the openapi specification: https://spec.openapis.org/oas/v3.0.0#data-types\n  // byte: https://github.com/miguelmota/is-base64\n  byte,\n  // signed 32 bit integer\n  int32: {type: \"number\", validate: validateInt32},\n  // signed 64 bit integer\n  int64: {type: \"number\", validate: validateInt64},\n  // C-type float\n  float: {type: \"number\", validate: validateNumber},\n  // C-type double\n  double: {type: \"number\", validate: validateNumber},\n  // hint to the UI to hide input strings\n  password: true,\n  // unchecked string payload\n  binary: true,\n}\n\nexport const fastFormats: DefinedFormats = {\n  ...fullFormats,\n  date: fmtDef(/^\\d\\d\\d\\d-[0-1]\\d-[0-3]\\d$/, compareDate),\n  time: fmtDef(\n    /^(?:[0-2]\\d:[0-5]\\d:[0-5]\\d|23:59:60)(?:\\.\\d+)?(?:z|[+-]\\d\\d(?::?\\d\\d)?)?$/i,\n    compareTime\n  ),\n  \"date-time\": fmtDef(\n    /^\\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,\n    compareDateTime\n  ),\n  // uri: https://github.com/mafintosh/is-my-json-valid/blob/master/formats.js\n  uri: /^(?:[a-z][a-z0-9+\\-.]*:)(?:\\/?\\/)?[^\\s]*$/i,\n  \"uri-reference\": /^(?:(?:[a-z][a-z0-9+\\-.]*:)?\\/?\\/)?(?:[^\\\\\\s#][^\\s#]*)?(?:#[^\\\\\\s]*)?$/i,\n  // email (sources from jsen validator):\n  // http://stackoverflow.com/questions/201323/using-a-regular-expression-to-validate-an-email-address#answer-8829363\n  // http://www.w3.org/TR/html5/forms.html#valid-e-mail-address (search for 'wilful violation')\n  email:\n    /^[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,\n}\n\nexport const formatNames = Object.keys(fullFormats) as FormatName[]\n\nfunction isLeapYear(year: number): boolean {\n  // https://tools.ietf.org/html/rfc3339#appendix-C\n  return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0)\n}\n\nconst DATE = /^(\\d\\d\\d\\d)-(\\d\\d)-(\\d\\d)$/\nconst DAYS = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\n\nfunction date(str: string): boolean {\n  // full-date from http://tools.ietf.org/html/rfc3339#section-5.6\n  const matches: string[] | null = DATE.exec(str)\n  if (!matches) return false\n  const year: number = +matches[1]\n  const month: number = +matches[2]\n  const day: number = +matches[3]\n  return (\n    month >= 1 &&\n    month <= 12 &&\n    day >= 1 &&\n    day <= (month === 2 && isLeapYear(year) ? 29 : DAYS[month])\n  )\n}\n\nfunction compareDate(d1: string, d2: string): number | undefined {\n  if (!(d1 && d2)) return undefined\n  if (d1 > d2) return 1\n  if (d1 < d2) return -1\n  return 0\n}\n\nconst TIME = /^(\\d\\d):(\\d\\d):(\\d\\d)(\\.\\d+)?(z|[+-]\\d\\d(?::?\\d\\d)?)?$/i\n\nfunction time(str: string, withTimeZone?: boolean): boolean {\n  const matches: string[] | null = TIME.exec(str)\n  if (!matches) return false\n\n  const hour: number = +matches[1]\n  const minute: number = +matches[2]\n  const second: number = +matches[3]\n  const timeZone: string = matches[5]\n  return (\n    ((hour <= 23 && minute <= 59 && second <= 59) ||\n      (hour === 23 && minute === 59 && second === 60)) &&\n    (!withTimeZone || timeZone !== \"\")\n  )\n}\n\nfunction compareTime(t1: string, t2: string): number | undefined {\n  if (!(t1 && t2)) return undefined\n  const a1 = TIME.exec(t1)\n  const a2 = TIME.exec(t2)\n  if (!(a1 && a2)) return undefined\n  t1 = a1[1] + a1[2] + a1[3] + (a1[4] || \"\")\n  t2 = a2[1] + a2[2] + a2[3] + (a2[4] || \"\")\n  if (t1 > t2) return 1\n  if (t1 < t2) return -1\n  return 0\n}\n\nconst DATE_TIME_SEPARATOR = /t|\\s/i\nfunction date_time(str: string): boolean {\n  // http://tools.ietf.org/html/rfc3339#section-5.6\n  const dateTime: string[] = str.split(DATE_TIME_SEPARATOR)\n  return dateTime.length === 2 && date(dateTime[0]) && time(dateTime[1], true)\n}\n\nfunction compareDateTime(dt1: string, dt2: string): number | undefined {\n  if (!(dt1 && dt2)) return undefined\n  const [d1, t1] = dt1.split(DATE_TIME_SEPARATOR)\n  const [d2, t2] = dt2.split(DATE_TIME_SEPARATOR)\n  const res = compareDate(d1, d2)\n  if (res === undefined) return undefined\n  return res || compareTime(t1, t2)\n}\n\nconst NOT_URI_FRAGMENT = /\\/|:/\nconst URI =\n  /^(?:[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\n\nfunction uri(str: string): boolean {\n  // http://jmrware.com/articles/2009/uri_regexp/URI_regex.html + optional protocol + required \".\"\n  return NOT_URI_FRAGMENT.test(str) && URI.test(str)\n}\n\nconst BYTE = /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/gm\n\nfunction byte(str: string): boolean {\n  BYTE.lastIndex = 0\n  return BYTE.test(str)\n}\n\nconst MIN_INT32 = -(2 ** 31)\nconst MAX_INT32 = 2 ** 31 - 1\n\nfunction validateInt32(value: number): boolean {\n  return Number.isInteger(value) && value <= MAX_INT32 && value >= MIN_INT32\n}\n\nfunction validateInt64(value: number): boolean {\n  // JSON and javascript max Int is 2**53, so any int that passes isInteger is valid for Int64\n  return Number.isInteger(value)\n}\n\nfunction validateNumber(): boolean {\n  return true\n}\n\nconst Z_ANCHOR = /[^\\\\]\\\\Z/\nfunction regex(str: string): boolean {\n  if (Z_ANCHOR.test(str)) return false\n  try {\n    new RegExp(str)\n    return true\n  } catch (e) {\n    return false\n  }\n}\n/dist/formats.js*v\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.formatNames = exports.fastFormats = exports.fullFormats = void 0;\nfunction fmtDef(validate, compare) {\n    return { validate, compare };\n}\nexports.fullFormats = {\n    // date: http://tools.ietf.org/html/rfc3339#section-5.6\n    date: fmtDef(date, compareDate),\n    // date-time: http://tools.ietf.org/html/rfc3339#section-5.6\n    time: fmtDef(time, compareTime),\n    \"date-time\": fmtDef(date_time, compareDateTime),\n    // duration: https://tools.ietf.org/html/rfc3339#appendix-A\n    duration: /^P(?!$)((\\d+Y)?(\\d+M)?(\\d+D)?(T(?=\\d)(\\d+H)?(\\d+M)?(\\d+S)?)?|(\\d+W)?)$/,\n    uri,\n    \"uri-reference\": /^(?:[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,\n    // uri-template: https://tools.ietf.org/html/rfc6570\n    \"uri-template\": /^(?:(?:[^\\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,\n    // For the source: https://gist.github.com/dperini/729294\n    // For test cases: https://mathiasbynens.be/demo/url-regex\n    url: /^(?:https?|ftp):\\/\\/(?:\\S+(?::\\S*)?@)?(?:(?!(?:10|127)(?:\\.\\d{1,3}){3})(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z0-9\\u{00a1}-\\u{ffff}]+-)*[a-z0-9\\u{00a1}-\\u{ffff}]+)(?:\\.(?:[a-z0-9\\u{00a1}-\\u{ffff}]+-)*[a-z0-9\\u{00a1}-\\u{ffff}]+)*(?:\\.(?:[a-z\\u{00a1}-\\u{ffff}]{2,})))(?::\\d{2,5})?(?:\\/[^\\s]*)?$/iu,\n    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,\n    hostname: /^(?=.{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,\n    // optimized https://www.safaribooksonline.com/library/view/regular-expressions-cookbook/9780596802837/ch07s16.html\n    ipv4: /^(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$/,\n    ipv6: /^((([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}))|:)))$/i,\n    regex,\n    // uuid: http://tools.ietf.org/html/rfc4122\n    uuid: /^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i,\n    // JSON-pointer: https://tools.ietf.org/html/rfc6901\n    // uri fragment: https://tools.ietf.org/html/rfc3986#appendix-A\n    \"json-pointer\": /^(?:\\/(?:[^~/]|~0|~1)*)*$/,\n    \"json-pointer-uri-fragment\": /^#(?:\\/(?:[a-z0-9_\\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i,\n    // relative JSON-pointer: http://tools.ietf.org/html/draft-luff-relative-json-pointer-00\n    \"relative-json-pointer\": /^(?:0|[1-9][0-9]*)(?:#|(?:\\/(?:[^~/]|~0|~1)*)*)$/,\n    // the following formats are used by the openapi specification: https://spec.openapis.org/oas/v3.0.0#data-types\n    // byte: https://github.com/miguelmota/is-base64\n    byte,\n    // signed 32 bit integer\n    int32: { type: \"number\", validate: validateInt32 },\n    // signed 64 bit integer\n    int64: { type: \"number\", validate: validateInt64 },\n    // C-type float\n    float: { type: \"number\", validate: validateNumber },\n    // C-type double\n    double: { type: \"number\", validate: validateNumber },\n    // hint to the UI to hide input strings\n    password: true,\n    // unchecked string payload\n    binary: true,\n};\nexports.fastFormats = {\n    ...exports.fullFormats,\n    date: fmtDef(/^\\d\\d\\d\\d-[0-1]\\d-[0-3]\\d$/, compareDate),\n    time: fmtDef(/^(?:[0-2]\\d:[0-5]\\d:[0-5]\\d|23:59:60)(?:\\.\\d+)?(?:z|[+-]\\d\\d(?::?\\d\\d)?)?$/i, compareTime),\n    \"date-time\": fmtDef(/^\\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, compareDateTime),\n    // uri: https://github.com/mafintosh/is-my-json-valid/blob/master/formats.js\n    uri: /^(?:[a-z][a-z0-9+\\-.]*:)(?:\\/?\\/)?[^\\s]*$/i,\n    \"uri-reference\": /^(?:(?:[a-z][a-z0-9+\\-.]*:)?\\/?\\/)?(?:[^\\\\\\s#][^\\s#]*)?(?:#[^\\\\\\s]*)?$/i,\n    // email (sources from jsen validator):\n    // http://stackoverflow.com/questions/201323/using-a-regular-expression-to-validate-an-email-address#answer-8829363\n    // http://www.w3.org/TR/html5/forms.html#valid-e-mail-address (search for 'wilful violation')\n    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,\n};\nexports.formatNames = Object.keys(exports.fullFormats);\nfunction isLeapYear(year) {\n    // https://tools.ietf.org/html/rfc3339#appendix-C\n    return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);\n}\nconst DATE = /^(\\d\\d\\d\\d)-(\\d\\d)-(\\d\\d)$/;\nconst DAYS = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\nfunction date(str) {\n    // full-date from http://tools.ietf.org/html/rfc3339#section-5.6\n    const matches = DATE.exec(str);\n    if (!matches)\n        return false;\n    const year = +matches[1];\n    const month = +matches[2];\n    const day = +matches[3];\n    return (month >= 1 &&\n        month <= 12 &&\n        day >= 1 &&\n        day <= (month === 2 && isLeapYear(year) ? 29 : DAYS[month]));\n}\nfunction compareDate(d1, d2) {\n    if (!(d1 && d2))\n        return undefined;\n    if (d1 > d2)\n        return 1;\n    if (d1 < d2)\n        return -1;\n    return 0;\n}\nconst TIME = /^(\\d\\d):(\\d\\d):(\\d\\d)(\\.\\d+)?(z|[+-]\\d\\d(?::?\\d\\d)?)?$/i;\nfunction time(str, withTimeZone) {\n    const matches = TIME.exec(str);\n    if (!matches)\n        return false;\n    const hour = +matches[1];\n    const minute = +matches[2];\n    const second = +matches[3];\n    const timeZone = matches[5];\n    return (((hour <= 23 && minute <= 59 && second <= 59) ||\n        (hour === 23 && minute === 59 && second === 60)) &&\n        (!withTimeZone || timeZone !== \"\"));\n}\nfunction compareTime(t1, t2) {\n    if (!(t1 && t2))\n        return undefined;\n    const a1 = TIME.exec(t1);\n    const a2 = TIME.exec(t2);\n    if (!(a1 && a2))\n        return undefined;\n    t1 = a1[1] + a1[2] + a1[3] + (a1[4] || \"\");\n    t2 = a2[1] + a2[2] + a2[3] + (a2[4] || \"\");\n    if (t1 > t2)\n        return 1;\n    if (t1 < t2)\n        return -1;\n    return 0;\n}\nconst DATE_TIME_SEPARATOR = /t|\\s/i;\nfunction date_time(str) {\n    // http://tools.ietf.org/html/rfc3339#section-5.6\n    const dateTime = str.split(DATE_TIME_SEPARATOR);\n    return dateTime.length === 2 && date(dateTime[0]) && time(dateTime[1], true);\n}\nfunction compareDateTime(dt1, dt2) {\n    if (!(dt1 && dt2))\n        return undefined;\n    const [d1, t1] = dt1.split(DATE_TIME_SEPARATOR);\n    const [d2, t2] = dt2.split(DATE_TIME_SEPARATOR);\n    const res = compareDate(d1, d2);\n    if (res === undefined)\n        return undefined;\n    return res || compareTime(t1, t2);\n}\nconst NOT_URI_FRAGMENT = /\\/|:/;\nconst URI = /^(?:[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;\nfunction uri(str) {\n    // http://jmrware.com/articles/2009/uri_regexp/URI_regex.html + optional protocol + required \".\"\n    return NOT_URI_FRAGMENT.test(str) && URI.test(str);\n}\nconst BYTE = /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/gm;\nfunction byte(str) {\n    BYTE.lastIndex = 0;\n    return BYTE.test(str);\n}\nconst MIN_INT32 = -(2 ** 31);\nconst MAX_INT32 = 2 ** 31 - 1;\nfunction validateInt32(value) {\n    return Number.isInteger(value) && value <= MAX_INT32 && value >= MIN_INT32;\n}\nfunction validateInt64(value) {\n    // JSON and javascript max Int is 2**53, so any int that passes isInteger is valid for Int64\n    return Number.isInteger(value);\n}\nfunction validateNumber() {\n    return true;\n}\nconst Z_ANCHOR = /[^\\\\]\\\\Z/;\nfunction regex(str) {\n    if (Z_ANCHOR.test(str))\n        return false;\n    try {\n        new RegExp(str);\n        return true;\n    }\n    catch (e) {\n        return false;\n    }\n}\n//# sourceMappingURL=formats.js.map/LICENSE\u00042MIT License\n\nCopyright (c) 2020 Evgeny Poberezkin\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n/src/limit.ts\f\u0002import type Ajv from \"ajv\"\nimport type {\n  Plugin,\n  CodeKeywordDefinition,\n  KeywordErrorDefinition,\n  Code,\n  Name,\n  ErrorObject,\n} from \"ajv\"\nimport type {AddedFormat} from \"ajv/dist/types\"\nimport type {Rule} from \"ajv/dist/compile/rules\"\nimport {KeywordCxt} from \"ajv\"\nimport {_, str, or, getProperty, operators} from \"ajv/dist/compile/codegen\"\n\ntype Kwd = \"formatMaximum\" | \"formatMinimum\" | \"formatExclusiveMaximum\" | \"formatExclusiveMinimum\"\n\ntype Comparison = \"<=\" | \">=\" | \"<\" | \">\"\n\nconst ops = operators\n\nconst KWDs: {[K in Kwd]: {okStr: Comparison; ok: Code; fail: Code}} = {\n  formatMaximum: {okStr: \"<=\", ok: ops.LTE, fail: ops.GT},\n  formatMinimum: {okStr: \">=\", ok: ops.GTE, fail: ops.LT},\n  formatExclusiveMaximum: {okStr: \"<\", ok: ops.LT, fail: ops.GTE},\n  formatExclusiveMinimum: {okStr: \">\", ok: ops.GT, fail: ops.LTE},\n}\n\nexport type LimitFormatError = ErrorObject<Kwd, {limit: string; comparison: Comparison}>\n\nconst error: KeywordErrorDefinition = {\n  message: ({keyword, schemaCode}) => str`should be ${KWDs[keyword as Kwd].okStr} ${schemaCode}`,\n  params: ({keyword, schemaCode}) =>\n    _`{comparison: ${KWDs[keyword as Kwd].okStr}, limit: ${schemaCode}}`,\n}\n\nexport const formatLimitDefinition: CodeKeywordDefinition = {\n  keyword: Object.keys(KWDs),\n  type: \"string\",\n  schemaType: \"string\",\n  $data: true,\n  error,\n  code(cxt) {\n    const {gen, data, schemaCode, keyword, it} = cxt\n    const {opts, self} = it\n    if (!opts.validateFormats) return\n\n    const fCxt = new KeywordCxt(it, (self.RULES.all.format as Rule).definition, \"format\")\n    if (fCxt.$data) validate$DataFormat()\n    else validateFormat()\n\n    function validate$DataFormat(): void {\n      const fmts = gen.scopeValue(\"formats\", {\n        ref: self.formats,\n        code: opts.code.formats,\n      })\n      const fmt = gen.const(\"fmt\", _`${fmts}[${fCxt.schemaCode}]`)\n      cxt.fail$data(\n        or(\n          _`typeof ${fmt} != \"object\"`,\n          _`${fmt} instanceof RegExp`,\n          _`typeof ${fmt}.compare != \"function\"`,\n          compareCode(fmt)\n        )\n      )\n    }\n\n    function validateFormat(): void {\n      const format = fCxt.schema as string\n      const fmtDef: AddedFormat | undefined = self.formats[format]\n      if (!fmtDef || fmtDef === true) return\n      if (\n        typeof fmtDef != \"object\" ||\n        fmtDef instanceof RegExp ||\n        typeof fmtDef.compare != \"function\"\n      ) {\n        throw new Error(`\"${keyword}\": format \"${format}\" does not define \"compare\" function`)\n      }\n      const fmt = gen.scopeValue(\"formats\", {\n        key: format,\n        ref: fmtDef,\n        code: opts.code.formats ? _`${opts.code.formats}${getProperty(format)}` : undefined,\n      })\n\n      cxt.fail$data(compareCode(fmt))\n    }\n\n    function compareCode(fmt: Name): Code {\n      return _`${fmt}.compare(${data}, ${schemaCode}) ${KWDs[keyword as Kwd].fail} 0`\n    }\n  },\n  dependencies: [\"format\"],\n}\n\nconst formatLimitPlugin: Plugin<undefined> = (ajv: Ajv): Ajv => {\n  ajv.addKeyword(formatLimitDefinition)\n  return ajv\n}\n\nexport default formatLimitPlugin\n/src/index.ts\u0007\u0001import {\n  DefinedFormats,\n  FormatMode,\n  FormatName,\n  formatNames,\n  fastFormats,\n  fullFormats,\n} from \"./formats\"\nimport formatLimit from \"./limit\"\nimport type Ajv from \"ajv\"\nimport type {Plugin, Format} from \"ajv\"\nimport {_, Name} from \"ajv/dist/compile/codegen\"\n\nexport {FormatMode, FormatName} from \"./formats\"\nexport {LimitFormatError} from \"./limit\"\nexport interface FormatOptions {\n  mode?: FormatMode\n  formats?: FormatName[]\n  keywords?: boolean\n}\n\nexport type FormatsPluginOptions = FormatName[] | FormatOptions\n\nexport interface FormatsPlugin extends Plugin<FormatsPluginOptions> {\n  get: (format: FormatName, mode?: FormatMode) => Format\n}\n\nconst fullName = new Name(\"fullFormats\")\nconst fastName = new Name(\"fastFormats\")\n\nconst formatsPlugin: FormatsPlugin = (\n  ajv: Ajv,\n  opts: FormatsPluginOptions = {keywords: true}\n): Ajv => {\n  if (Array.isArray(opts)) {\n    addFormats(ajv, opts, fullFormats, fullName)\n    return ajv\n  }\n  const [formats, exportName] =\n    opts.mode === \"fast\" ? [fastFormats, fastName] : [fullFormats, fullName]\n  const list = opts.formats || formatNames\n  addFormats(ajv, list, formats, exportName)\n  if (opts.keywords) formatLimit(ajv)\n  return ajv\n}\n\nformatsPlugin.get = (name: FormatName, mode: FormatMode = \"full\"): Format => {\n  const formats = mode === \"fast\" ? fastFormats : fullFormats\n  const f = formats[name]\n  if (!f) throw new Error(`Unknown format \"${name}\"`)\n  return f\n}\n\nfunction addFormats(ajv: Ajv, list: FormatName[], fs: DefinedFormats, exportName: Name): void {\n  ajv.opts.code.formats ??= _`require(\"ajv-formats/dist/formats\").${exportName}`\n  for (const f of list) ajv.addFormat(f, fs[f])\n}\n\nmodule.exports = exports = formatsPlugin\nObject.defineProperty(exports, \"__esModule\", {value: true})\n\nexport default formatsPlugin\n/dist/index.d.ts\u0002Dimport { FormatMode, FormatName } from \"./formats\";\nimport type { Plugin, Format } from \"ajv\";\nexport { FormatMode, FormatName } from \"./formats\";\nexport { LimitFormatError } from \"./limit\";\nexport interface FormatOptions {\n    mode?: FormatMode;\n    formats?: FormatName[];\n    keywords?: boolean;\n}\nexport declare type FormatsPluginOptions = FormatName[] | FormatOptions;\nexport interface FormatsPlugin extends Plugin<FormatsPluginOptions> {\n    get: (format: FormatName, mode?: FormatMode) => Format;\n}\ndeclare const formatsPlugin: FormatsPlugin;\nexport default formatsPlugin;\n/dist/index.js.map\u0005{\"version\":3,\"file\":\"index.js\",\"sourceRoot\":\"\",\"sources\":[\"../src/index.ts\"],\"names\":[],\"mappings\":\";;AAAA,uCAOkB;AAClB,mCAAiC;AAGjC,sDAAgD;AAgBhD,MAAM,QAAQ,GAAG,IAAI,cAAI,CAAC,aAAa,CAAC,CAAA;AACxC,MAAM,QAAQ,GAAG,IAAI,cAAI,CAAC,aAAa,CAAC,CAAA;AAExC,MAAM,aAAa,GAAkB,CACnC,GAAQ,EACR,OAA6B,EAAC,QAAQ,EAAE,IAAI,EAAC,EACxC,EAAE;IACP,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QACvB,UAAU,CAAC,GAAG,EAAE,IAAI,EAAE,qBAAW,EAAE,QAAQ,CAAC,CAAA;QAC5C,OAAO,GAAG,CAAA;KACX;IACD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GACzB,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,qBAAW,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,qBAAW,EAAE,QAAQ,CAAC,CAAA;IAC1E,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,IAAI,qBAAW,CAAA;IACxC,UAAU,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,CAAC,CAAA;IAC1C,IAAI,IAAI,CAAC,QAAQ;QAAE,eAAW,CAAC,GAAG,CAAC,CAAA;IACnC,OAAO,GAAG,CAAA;AACZ,CAAC,CAAA;AAED,aAAa,CAAC,GAAG,GAAG,CAAC,IAAgB,EAAE,OAAmB,MAAM,EAAU,EAAE;IAC1E,MAAM,OAAO,GAAG,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,qBAAW,CAAC,CAAC,CAAC,qBAAW,CAAA;IAC3D,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACvB,IAAI,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,IAAI,GAAG,CAAC,CAAA;IACnD,OAAO,CAAC,CAAA;AACV,CAAC,CAAA;AAED,SAAS,UAAU,CAAC,GAAQ,EAAE,IAAkB,EAAE,EAAkB,EAAE,UAAgB;;;IACpF,YAAA,GAAG,CAAC,IAAI,CAAC,IAAI,EAAC,OAAO,uCAAP,OAAO,GAAK,WAAC,CAAA,uCAAuC,UAAU,EAAE,EAAA;IAC9E,KAAK,MAAM,CAAC,IAAI,IAAI;QAAE,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;AAC/C,CAAC;AAED,MAAM,CAAC,OAAO,GAAG,OAAO,GAAG,aAAa,CAAA;AACxC,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,YAAY,EAAE,EAAC,KAAK,EAAE,IAAI,EAAC,CAAC,CAAA;AAE3D,kBAAe,aAAa,CAAA\"}"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/YWp2QDguMTIuMA==",
    "content": "\u00010/dist/vocabularies/applicator/additionalItems.js\u0007\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.validateAdditionalItems = void 0;\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst error = {\n    message: ({ params: { len } }) => (0, codegen_1.str) `must NOT have more than ${len} items`,\n    params: ({ params: { len } }) => (0, codegen_1._) `{limit: ${len}}`,\n};\nconst def = {\n    keyword: \"additionalItems\",\n    type: \"array\",\n    schemaType: [\"boolean\", \"object\"],\n    before: \"uniqueItems\",\n    error,\n    code(cxt) {\n        const { parentSchema, it } = cxt;\n        const { items } = parentSchema;\n        if (!Array.isArray(items)) {\n            (0, util_1.checkStrictMode)(it, '\"additionalItems\" is ignored when \"items\" is not an array of schemas');\n            return;\n        }\n        validateAdditionalItems(cxt, items);\n    },\n};\nfunction validateAdditionalItems(cxt, items) {\n    const { gen, schema, data, keyword, it } = cxt;\n    it.items = true;\n    const len = gen.const(\"len\", (0, codegen_1._) `${data}.length`);\n    if (schema === false) {\n        cxt.setParams({ len: items.length });\n        cxt.pass((0, codegen_1._) `${len} <= ${items.length}`);\n    }\n    else if (typeof schema == \"object\" && !(0, util_1.alwaysValidSchema)(it, schema)) {\n        const valid = gen.var(\"valid\", (0, codegen_1._) `${len} <= ${items.length}`); // TODO var\n        gen.if((0, codegen_1.not)(valid), () => validateItems(valid));\n        cxt.ok(valid);\n    }\n    function validateItems(valid) {\n        gen.forRange(\"i\", items.length, len, (i) => {\n            cxt.subschema({ keyword, dataProp: i, dataPropType: util_1.Type.Num }, valid);\n            if (!it.allErrors)\n                gen.if((0, codegen_1.not)(valid), () => gen.break());\n        });\n    }\n}\nexports.validateAdditionalItems = validateAdditionalItems;\nexports.default = def;\n//# sourceMappingURL=additionalItems.js.map./dist/vocabularies/validation/uniqueItems.d.ts\u0001\u0005import type { CodeKeywordDefinition, ErrorObject } from \"../../types\";\nexport type UniqueItemsError = ErrorObject<\"uniqueItems\", {\n    i: number;\n    j: number;\n}, boolean | {\n    $data: string;\n}>;\ndeclare const def: CodeKeywordDefinition;\nexport default def;\n!/lib/compile/validate/defaults.ts\u0004import type {SchemaObjCxt} from \"..\"\nimport {_, getProperty, stringify} from \"../codegen\"\nimport {checkStrictMode} from \"../util\"\n\nexport function assignDefaults(it: SchemaObjCxt, ty?: string): void {\n  const {properties, items} = it.schema\n  if (ty === \"object\" && properties) {\n    for (const key in properties) {\n      assignDefault(it, key, properties[key].default)\n    }\n  } else if (ty === \"array\" && Array.isArray(items)) {\n    items.forEach((sch, i: number) => assignDefault(it, i, sch.default))\n  }\n}\n\nfunction assignDefault(it: SchemaObjCxt, prop: string | number, defaultValue: unknown): void {\n  const {gen, compositeRule, data, opts} = it\n  if (defaultValue === undefined) return\n  const childData = _`${data}${getProperty(prop)}`\n  if (compositeRule) {\n    checkStrictMode(it, `default is ignored for: ${childData}`)\n    return\n  }\n\n  let condition = _`${childData} === undefined`\n  if (opts.useDefaults === \"empty\") {\n    condition = _`${condition} || ${childData} === null || ${childData} === \"\"`\n  }\n  // `${childData} === undefined` +\n  // (opts.useDefaults === \"empty\" ? ` || ${childData} === null || ${childData} === \"\"` : \"\")\n  gen.if(condition, _`${childData} = ${stringify(defaultValue)}`)\n}\n/dist/compile/util.js.map\u001bn{\"version\":3,\"file\":\"util.js\",\"sourceRoot\":\"\",\"sources\":[\"../../lib/compile/util.ts\"],\"names\":[],\"mappings\":\"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\"}'/dist/refs/json-schema-2020-12/index.js\u0004\u0002\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst metaSchema = require(\"./schema.json\");\nconst applicator = require(\"./meta/applicator.json\");\nconst unevaluated = require(\"./meta/unevaluated.json\");\nconst content = require(\"./meta/content.json\");\nconst core = require(\"./meta/core.json\");\nconst format = require(\"./meta/format-annotation.json\");\nconst metadata = require(\"./meta/meta-data.json\");\nconst validation = require(\"./meta/validation.json\");\nconst META_SUPPORT_DATA = [\"/properties\"];\nfunction addMetaSchema2020($data) {\n    ;\n    [\n        metaSchema,\n        applicator,\n        unevaluated,\n        content,\n        core,\n        with$data(this, format),\n        metadata,\n        with$data(this, validation),\n    ].forEach((sch) => this.addMetaSchema(sch, undefined, false));\n    return this;\n    function with$data(ajv, sch) {\n        return $data ? ajv.$dataMetaSchema(sch, META_SUPPORT_DATA) : sch;\n    }\n}\nexports.default = addMetaSchema2020;\n//# sourceMappingURL=index.js.map)/dist/vocabularies/unevaluated/index.d.tsrimport type { Vocabulary } from \"../../types\";\ndeclare const unevaluated: Vocabulary;\nexport default unevaluated;\n/dist/compile/rules.d.ts\u0003'import type { AddedKeywordDefinition } from \"../types\";\ndeclare const _jsonTypes: readonly [\"string\", \"number\", \"integer\", \"boolean\", \"null\", \"object\", \"array\"];\nexport type JSONType = typeof _jsonTypes[number];\nexport declare function isJSONType(x: unknown): x is JSONType;\ntype ValidationTypes = {\n    [K in JSONType]: boolean | RuleGroup | undefined;\n};\nexport interface ValidationRules {\n    rules: RuleGroup[];\n    post: RuleGroup;\n    all: {\n        [Key in string]?: boolean | Rule;\n    };\n    keywords: {\n        [Key in string]?: boolean;\n    };\n    types: ValidationTypes;\n}\nexport interface RuleGroup {\n    type?: JSONType;\n    rules: Rule[];\n}\nexport interface Rule {\n    keyword: string;\n    definition: AddedKeywordDefinition;\n}\nexport declare function getRules(): ValidationRules;\nexport {};\n/dist/vocabularies/jtd/type.js\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.intRange = void 0;\nconst codegen_1 = require(\"../../compile/codegen\");\nconst timestamp_1 = require(\"../../runtime/timestamp\");\nconst util_1 = require(\"../../compile/util\");\nconst metadata_1 = require(\"./metadata\");\nconst error_1 = require(\"./error\");\nexports.intRange = {\n    int8: [-128, 127, 3],\n    uint8: [0, 255, 3],\n    int16: [-32768, 32767, 5],\n    uint16: [0, 65535, 5],\n    int32: [-2147483648, 2147483647, 10],\n    uint32: [0, 4294967295, 10],\n};\nconst error = {\n    message: (cxt) => (0, error_1.typeErrorMessage)(cxt, cxt.schema),\n    params: (cxt) => (0, error_1.typeErrorParams)(cxt, cxt.schema),\n};\nfunction timestampCode(cxt) {\n    const { gen, data, it } = cxt;\n    const { timestamp, allowDate } = it.opts;\n    if (timestamp === \"date\")\n        return (0, codegen_1._) `${data} instanceof Date `;\n    const vts = (0, util_1.useFunc)(gen, timestamp_1.default);\n    const allowDateArg = allowDate ? (0, codegen_1._) `, true` : codegen_1.nil;\n    const validString = (0, codegen_1._) `typeof ${data} == \"string\" && ${vts}(${data}${allowDateArg})`;\n    return timestamp === \"string\" ? validString : (0, codegen_1.or)((0, codegen_1._) `${data} instanceof Date`, validString);\n}\nconst def = {\n    keyword: \"type\",\n    schemaType: \"string\",\n    error,\n    code(cxt) {\n        (0, metadata_1.checkMetadata)(cxt);\n        const { data, schema, parentSchema, it } = cxt;\n        let cond;\n        switch (schema) {\n            case \"boolean\":\n            case \"string\":\n                cond = (0, codegen_1._) `typeof ${data} == ${schema}`;\n                break;\n            case \"timestamp\": {\n                cond = timestampCode(cxt);\n                break;\n            }\n            case \"float32\":\n            case \"float64\":\n                cond = (0, codegen_1._) `typeof ${data} == \"number\"`;\n                break;\n            default: {\n                const sch = schema;\n                cond = (0, codegen_1._) `typeof ${data} == \"number\" && isFinite(${data}) && !(${data} % 1)`;\n                if (!it.opts.int32range && (sch === \"int32\" || sch === \"uint32\")) {\n                    if (sch === \"uint32\")\n                        cond = (0, codegen_1._) `${cond} && ${data} >= 0`;\n                }\n                else {\n                    const [min, max] = exports.intRange[sch];\n                    cond = (0, codegen_1._) `${cond} && ${data} >= ${min} && ${data} <= ${max}`;\n                }\n            }\n        }\n        cxt.pass(parentSchema.nullable ? (0, codegen_1.or)((0, codegen_1._) `${data} === null`, cond) : cond);\n    },\n};\nexports.default = def;\n//# sourceMappingURL=type.js.map /dist/vocabularies/jtd/type.d.ts\u0001import type { CodeKeywordDefinition } from \"../../types\";\nimport { _JTDTypeError } from \"./error\";\nexport type JTDTypeError = _JTDTypeError<\"type\", JTDType, JTDType>;\nexport type IntType = \"int8\" | \"uint8\" | \"int16\" | \"uint16\" | \"int32\" | \"uint32\";\nexport declare const intRange: {\n    [T in IntType]: [number, number, number];\n};\nexport type JTDType = \"boolean\" | \"string\" | \"timestamp\" | \"float32\" | \"float64\" | IntType;\ndeclare const def: CodeKeywordDefinition;\nexport default def;\n$/dist/vocabularies/applicator/not.js\u0003\u0005\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst util_1 = require(\"../../compile/util\");\nconst def = {\n    keyword: \"not\",\n    schemaType: [\"object\", \"boolean\"],\n    trackErrors: true,\n    code(cxt) {\n        const { gen, schema, it } = cxt;\n        if ((0, util_1.alwaysValidSchema)(it, schema)) {\n            cxt.fail();\n            return;\n        }\n        const valid = gen.name(\"valid\");\n        cxt.subschema({\n            keyword: \"not\",\n            compositeRule: true,\n            createErrors: false,\n            allErrors: false,\n        }, valid);\n        cxt.failResult(valid, () => cxt.reset(), () => cxt.error());\n    },\n    error: { message: \"must NOT be valid\" },\n};\nexports.default = def;\n//# sourceMappingURL=not.js.map\"/dist/vocabularies/jtd/metadata.js\u0003*\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.checkMetadata = void 0;\nconst util_1 = require(\"../../compile/util\");\nconst def = {\n    keyword: \"metadata\",\n    schemaType: \"object\",\n    code(cxt) {\n        checkMetadata(cxt);\n        const { gen, schema, it } = cxt;\n        if ((0, util_1.alwaysValidSchema)(it, schema))\n            return;\n        const valid = gen.name(\"valid\");\n        cxt.subschema({ keyword: \"metadata\", jtdMetadata: true }, valid);\n        cxt.ok(valid);\n    },\n};\nfunction checkMetadata({ it, keyword }, metadata) {\n    if (it.jtdMetadata !== metadata) {\n        throw new Error(`JTD: \"${keyword}\" cannot be used in this schema location`);\n    }\n}\nexports.checkMetadata = checkMetadata;\nexports.default = def;\n//# sourceMappingURL=metadata.js.map/lib/compile/errors.ts\u0014import type {KeywordErrorCxt, KeywordErrorDefinition} from \"../types\"\nimport type {SchemaCxt} from \"./index\"\nimport {CodeGen, _, str, strConcat, Code, Name} from \"./codegen\"\nimport {SafeExpr} from \"./codegen/code\"\nimport {getErrorPath, Type} from \"./util\"\nimport N from \"./names\"\n\nexport const keywordError: KeywordErrorDefinition = {\n  message: ({keyword}) => str`must pass \"${keyword}\" keyword validation`,\n}\n\nexport const keyword$DataError: KeywordErrorDefinition = {\n  message: ({keyword, schemaType}) =>\n    schemaType\n      ? str`\"${keyword}\" keyword must be ${schemaType} ($data)`\n      : str`\"${keyword}\" keyword is invalid ($data)`,\n}\n\nexport interface ErrorPaths {\n  instancePath?: Code\n  schemaPath?: string\n  parentSchema?: boolean\n}\n\nexport function reportError(\n  cxt: KeywordErrorCxt,\n  error: KeywordErrorDefinition = keywordError,\n  errorPaths?: ErrorPaths,\n  overrideAllErrors?: boolean\n): void {\n  const {it} = cxt\n  const {gen, compositeRule, allErrors} = it\n  const errObj = errorObjectCode(cxt, error, errorPaths)\n  if (overrideAllErrors ?? (compositeRule || allErrors)) {\n    addError(gen, errObj)\n  } else {\n    returnErrors(it, _`[${errObj}]`)\n  }\n}\n\nexport function reportExtraError(\n  cxt: KeywordErrorCxt,\n  error: KeywordErrorDefinition = keywordError,\n  errorPaths?: ErrorPaths\n): void {\n  const {it} = cxt\n  const {gen, compositeRule, allErrors} = it\n  const errObj = errorObjectCode(cxt, error, errorPaths)\n  addError(gen, errObj)\n  if (!(compositeRule || allErrors)) {\n    returnErrors(it, N.vErrors)\n  }\n}\n\nexport function resetErrorsCount(gen: CodeGen, errsCount: Name): void {\n  gen.assign(N.errors, errsCount)\n  gen.if(_`${N.vErrors} !== null`, () =>\n    gen.if(\n      errsCount,\n      () => gen.assign(_`${N.vErrors}.length`, errsCount),\n      () => gen.assign(N.vErrors, null)\n    )\n  )\n}\n\nexport function extendErrors({\n  gen,\n  keyword,\n  schemaValue,\n  data,\n  errsCount,\n  it,\n}: KeywordErrorCxt): void {\n  /* istanbul ignore if */\n  if (errsCount === undefined) throw new Error(\"ajv implementation error\")\n  const err = gen.name(\"err\")\n  gen.forRange(\"i\", errsCount, N.errors, (i) => {\n    gen.const(err, _`${N.vErrors}[${i}]`)\n    gen.if(_`${err}.instancePath === undefined`, () =>\n      gen.assign(_`${err}.instancePath`, strConcat(N.instancePath, it.errorPath))\n    )\n    gen.assign(_`${err}.schemaPath`, str`${it.errSchemaPath}/${keyword}`)\n    if (it.opts.verbose) {\n      gen.assign(_`${err}.schema`, schemaValue)\n      gen.assign(_`${err}.data`, data)\n    }\n  })\n}\n\nfunction addError(gen: CodeGen, errObj: Code): void {\n  const err = gen.const(\"err\", errObj)\n  gen.if(\n    _`${N.vErrors} === null`,\n    () => gen.assign(N.vErrors, _`[${err}]`),\n    _`${N.vErrors}.push(${err})`\n  )\n  gen.code(_`${N.errors}++`)\n}\n\nfunction returnErrors(it: SchemaCxt, errs: Code): void {\n  const {gen, validateName, schemaEnv} = it\n  if (schemaEnv.$async) {\n    gen.throw(_`new ${it.ValidationError as Name}(${errs})`)\n  } else {\n    gen.assign(_`${validateName}.errors`, errs)\n    gen.return(false)\n  }\n}\n\nconst E = {\n  keyword: new Name(\"keyword\"),\n  schemaPath: new Name(\"schemaPath\"), // also used in JTD errors\n  params: new Name(\"params\"),\n  propertyName: new Name(\"propertyName\"),\n  message: new Name(\"message\"),\n  schema: new Name(\"schema\"),\n  parentSchema: new Name(\"parentSchema\"),\n}\n\nfunction errorObjectCode(\n  cxt: KeywordErrorCxt,\n  error: KeywordErrorDefinition,\n  errorPaths?: ErrorPaths\n): Code {\n  const {createErrors} = cxt.it\n  if (createErrors === false) return _`{}`\n  return errorObject(cxt, error, errorPaths)\n}\n\nfunction errorObject(\n  cxt: KeywordErrorCxt,\n  error: KeywordErrorDefinition,\n  errorPaths: ErrorPaths = {}\n): Code {\n  const {gen, it} = cxt\n  const keyValues: [Name, SafeExpr | string][] = [\n    errorInstancePath(it, errorPaths),\n    errorSchemaPath(cxt, errorPaths),\n  ]\n  extraErrorProps(cxt, error, keyValues)\n  return gen.object(...keyValues)\n}\n\nfunction errorInstancePath({errorPath}: SchemaCxt, {instancePath}: ErrorPaths): [Name, Code] {\n  const instPath = instancePath\n    ? str`${errorPath}${getErrorPath(instancePath, Type.Str)}`\n    : errorPath\n  return [N.instancePath, strConcat(N.instancePath, instPath)]\n}\n\nfunction errorSchemaPath(\n  {keyword, it: {errSchemaPath}}: KeywordErrorCxt,\n  {schemaPath, parentSchema}: ErrorPaths\n): [Name, string | Code] {\n  let schPath = parentSchema ? errSchemaPath : str`${errSchemaPath}/${keyword}`\n  if (schemaPath) {\n    schPath = str`${schPath}${getErrorPath(schemaPath, Type.Str)}`\n  }\n  return [E.schemaPath, schPath]\n}\n\nfunction extraErrorProps(\n  cxt: KeywordErrorCxt,\n  {params, message}: KeywordErrorDefinition,\n  keyValues: [Name, SafeExpr | string][]\n): void {\n  const {keyword, data, schemaValue, it} = cxt\n  const {opts, propertyName, topSchemaRef, schemaPath} = it\n  keyValues.push(\n    [E.keyword, keyword],\n    [E.params, typeof params == \"function\" ? params(cxt) : params || _`{}`]\n  )\n  if (opts.messages) {\n    keyValues.push([E.message, typeof message == \"function\" ? message(cxt) : message])\n  }\n  if (opts.verbose) {\n    keyValues.push(\n      [E.schema, schemaValue],\n      [E.parentSchema, _`${topSchemaRef}${schemaPath}`],\n      [N.data, data]\n    )\n  }\n  if (propertyName) keyValues.push([E.propertyName, propertyName])\n}\n/dist/compile/jtd/types.js\u0001#\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.jtdForms = void 0;\nexports.jtdForms = [\n    \"elements\",\n    \"values\",\n    \"discriminator\",\n    \"properties\",\n    \"optionalProperties\",\n    \"enum\",\n    \"type\",\n    \"ref\",\n];\n//# sourceMappingURL=types.js.map6/dist/vocabularies/validation/dependentRequired.js.map\u0001x{\"version\":3,\"file\":\"dependentRequired.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../lib/vocabularies/validation/dependentRequired.ts\"],\"names\":[],\"mappings\":\";;AACA,6DAKmC;AAQnC,MAAM,GAAG,GAA0B;IACjC,OAAO,EAAE,mBAAmB;IAC5B,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE,QAAQ;IACpB,KAAK,EAAL,oBAAK;IACL,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAA,mCAAoB,EAAC,GAAG,CAAC;CACzC,CAAA;AAED,kBAAe,GAAG,CAAA\"})/lib/refs/json-schema-2020-12/schema.json\bv{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"$id\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"$vocabulary\": {\n    \"https://json-schema.org/draft/2020-12/vocab/core\": true,\n    \"https://json-schema.org/draft/2020-12/vocab/applicator\": true,\n    \"https://json-schema.org/draft/2020-12/vocab/unevaluated\": true,\n    \"https://json-schema.org/draft/2020-12/vocab/validation\": true,\n    \"https://json-schema.org/draft/2020-12/vocab/meta-data\": true,\n    \"https://json-schema.org/draft/2020-12/vocab/format-annotation\": true,\n    \"https://json-schema.org/draft/2020-12/vocab/content\": true\n  },\n  \"$dynamicAnchor\": \"meta\",\n\n  \"title\": \"Core and Validation specifications meta-schema\",\n  \"allOf\": [\n    {\"$ref\": \"meta/core\"},\n    {\"$ref\": \"meta/applicator\"},\n    {\"$ref\": \"meta/unevaluated\"},\n    {\"$ref\": \"meta/validation\"},\n    {\"$ref\": \"meta/meta-data\"},\n    {\"$ref\": \"meta/format-annotation\"},\n    {\"$ref\": \"meta/content\"}\n  ],\n  \"type\": [\"object\", \"boolean\"],\n  \"$comment\": \"This meta-schema also defines keywords that have appeared in previous drafts in order to prevent incompatible extensions as they remain in common use.\",\n  \"properties\": {\n    \"definitions\": {\n      \"$comment\": \"\\\"definitions\\\" has been replaced by \\\"$defs\\\".\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\"$dynamicRef\": \"#meta\"},\n      \"deprecated\": true,\n      \"default\": {}\n    },\n    \"dependencies\": {\n      \"$comment\": \"\\\"dependencies\\\" has been split and replaced by \\\"dependentSchemas\\\" and \\\"dependentRequired\\\" in order to serve their differing semantics.\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\n        \"anyOf\": [{\"$dynamicRef\": \"#meta\"}, {\"$ref\": \"meta/validation#/$defs/stringArray\"}]\n      },\n      \"deprecated\": true,\n      \"default\": {}\n    },\n    \"$recursiveAnchor\": {\n      \"$comment\": \"\\\"$recursiveAnchor\\\" has been replaced by \\\"$dynamicAnchor\\\".\",\n      \"$ref\": \"meta/core#/$defs/anchorString\",\n      \"deprecated\": true\n    },\n    \"$recursiveRef\": {\n      \"$comment\": \"\\\"$recursiveRef\\\" has been replaced by \\\"$dynamicRef\\\".\",\n      \"$ref\": \"meta/core#/$defs/uriReferenceString\",\n      \"deprecated\": true\n    }\n  }\n}\n(/lib/vocabularies/applicator/thenElse.ts\u0001import type {CodeKeywordDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {checkStrictMode} from \"../../compile/util\"\n\nconst def: CodeKeywordDefinition = {\n  keyword: [\"then\", \"else\"],\n  schemaType: [\"object\", \"boolean\"],\n  code({keyword, parentSchema, it}: KeywordCxt) {\n    if (parentSchema.if === undefined) checkStrictMode(it, `\"${keyword}\" without \"if\" is ignored`)\n  },\n}\n\nexport default def\n/dist/runtime/equal.d.tsĕimport * as equal from \"fast-deep-equal\";\ntype Equal = typeof equal & {\n    code: string;\n};\ndeclare const _default: Equal;\nexport default _default;\n1/dist/vocabularies/dynamic/recursiveAnchor.js.map\u0001{\"version\":3,\"file\":\"recursiveAnchor.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../lib/vocabularies/dynamic/recursiveAnchor.ts\"],\"names\":[],\"mappings\":\";;AACA,mDAA6C;AAC7C,6CAAkD;AAElD,MAAM,GAAG,GAA0B;IACjC,OAAO,EAAE,kBAAkB;IAC3B,UAAU,EAAE,SAAS;IACrB,IAAI,CAAC,GAAG;QACN,IAAI,GAAG,CAAC,MAAM;YAAE,IAAA,6BAAa,EAAC,GAAG,EAAE,EAAE,CAAC,CAAA;;YACjC,IAAA,sBAAe,EAAC,GAAG,CAAC,EAAE,EAAE,oCAAoC,CAAC,CAAA;IACpE,CAAC;CACF,CAAA;AAED,kBAAe,GAAG,CAAA\"}/dist/compile/jtd/parse.js.map<{\"version\":3,\"file\":\"parse.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../lib/compile/jtd/parse.ts\"],\"names\":[],\"mappings\":\"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\"})/dist/vocabularies/validation/required.js\ft\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst code_1 = require(\"../code\");\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst error = {\n    message: ({ params: { missingProperty } }) => (0, codegen_1.str) `must have required property '${missingProperty}'`,\n    params: ({ params: { missingProperty } }) => (0, codegen_1._) `{missingProperty: ${missingProperty}}`,\n};\nconst def = {\n    keyword: \"required\",\n    type: \"object\",\n    schemaType: \"array\",\n    $data: true,\n    error,\n    code(cxt) {\n        const { gen, schema, schemaCode, data, $data, it } = cxt;\n        const { opts } = it;\n        if (!$data && schema.length === 0)\n            return;\n        const useLoop = schema.length >= opts.loopRequired;\n        if (it.allErrors)\n            allErrorsMode();\n        else\n            exitOnErrorMode();\n        if (opts.strictRequired) {\n            const props = cxt.parentSchema.properties;\n            const { definedProperties } = cxt.it;\n            for (const requiredKey of schema) {\n                if ((props === null || props === void 0 ? void 0 : props[requiredKey]) === undefined && !definedProperties.has(requiredKey)) {\n                    const schemaPath = it.schemaEnv.baseId + it.errSchemaPath;\n                    const msg = `required property \"${requiredKey}\" is not defined at \"${schemaPath}\" (strictRequired)`;\n                    (0, util_1.checkStrictMode)(it, msg, it.opts.strictRequired);\n                }\n            }\n        }\n        function allErrorsMode() {\n            if (useLoop || $data) {\n                cxt.block$data(codegen_1.nil, loopAllRequired);\n            }\n            else {\n                for (const prop of schema) {\n                    (0, code_1.checkReportMissingProp)(cxt, prop);\n                }\n            }\n        }\n        function exitOnErrorMode() {\n            const missing = gen.let(\"missing\");\n            if (useLoop || $data) {\n                const valid = gen.let(\"valid\", true);\n                cxt.block$data(valid, () => loopUntilMissing(missing, valid));\n                cxt.ok(valid);\n            }\n            else {\n                gen.if((0, code_1.checkMissingProp)(cxt, schema, missing));\n                (0, code_1.reportMissingProp)(cxt, missing);\n                gen.else();\n            }\n        }\n        function loopAllRequired() {\n            gen.forOf(\"prop\", schemaCode, (prop) => {\n                cxt.setParams({ missingProperty: prop });\n                gen.if((0, code_1.noPropertyInData)(gen, data, prop, opts.ownProperties), () => cxt.error());\n            });\n        }\n        function loopUntilMissing(missing, valid) {\n            cxt.setParams({ missingProperty: missing });\n            gen.forOf(missing, schemaCode, () => {\n                gen.assign(valid, (0, code_1.propertyInData)(gen, data, missing, opts.ownProperties));\n                gen.if((0, codegen_1.not)(valid), () => {\n                    cxt.error();\n                    gen.break();\n                });\n            }, codegen_1.nil);\n        }\n    },\n};\nexports.default = def;\n//# sourceMappingURL=required.js.map-/dist/vocabularies/applicator/properties.d.tsximport type { CodeKeywordDefinition } from \"../../types\";\ndeclare const def: CodeKeywordDefinition;\nexport default def;\n/.runkit_example.js\u0001const Ajv = require(\"ajv\")\nconst ajv = new Ajv({allErrors: true})\n\nconst schema = {\n  type: \"object\",\n  properties: {\n    foo: {type: \"string\"},\n    bar: {type: \"number\", maximum: 3},\n  },\n  required: [\"foo\", \"bar\"],\n  additionalProperties: false,\n}\n\nconst validate = ajv.compile(schema)\n\ntest({foo: \"abc\", bar: 2})\ntest({foo: 2, bar: 4})\n\nfunction test(data) {\n  const valid = validate(data)\n  if (valid) console.log(\"Valid!\")\n  else console.log(\"Invalid: \" + ajv.errorsText(validate.errors))\n}\n+/dist/vocabularies/discriminator/index.d.ts\u0001 import type { CodeKeywordDefinition } from \"../../types\";\nimport { DiscrError, DiscrErrorObj } from \"../discriminator/types\";\nexport type DiscriminatorError = DiscrErrorObj<DiscrError.Tag> | DiscrErrorObj<DiscrError.Mapping>;\ndeclare const def: CodeKeywordDefinition;\nexport default def;\n /dist/compile/jtd/serialize.d.tsimport type Ajv from \"../../core\";\nimport { SchemaObjectMap } from \"./types\";\nimport { SchemaEnv } from \"..\";\nexport default function compileSerializer(this: Ajv, sch: SchemaEnv, definitions: SchemaObjectMap): SchemaEnv;\n-/dist/vocabularies/discriminator/index.js.map\u000f{\"version\":3,\"file\":\"index.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../lib/vocabularies/discriminator/index.ts\"],\"names\":[],\"mappings\":\"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\"}*/dist/vocabularies/validation/index.js.map\u0002S{\"version\":3,\"file\":\"index.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../lib/vocabularies/validation/index.ts\"],\"names\":[],\"mappings\":\";;AACA,+CAA2D;AAC3D,6CAAwD;AACxD,+CAAuC;AACvC,uCAA+C;AAC/C,uDAA+C;AAC/C,yCAAkD;AAClD,6CAAqC;AACrC,+CAA2D;AAC3D,mCAAgD;AAChD,iCAA6C;AAE7C,MAAM,UAAU,GAAe;IAC7B,SAAS;IACT,qBAAW;IACX,oBAAU;IACV,SAAS;IACT,qBAAW;IACX,iBAAO;IACP,SAAS;IACT,yBAAe;IACf,kBAAQ;IACR,QAAQ;IACR,oBAAU;IACV,qBAAW;IACX,MAAM;IACN,EAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAC;IAClD,EAAC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAC;IAC5C,eAAY;IACZ,cAAW;CACZ,CAAA;AAED,kBAAe,UAAU,CAAA\"}/lib/compile/ref_error.ts\u0002\u0001import {resolveUrl, normalizeId, getFullPath} from \"./resolve\"\nimport type {UriResolver} from \"../types\"\n\nexport default class MissingRefError extends Error {\n  readonly missingRef: string\n  readonly missingSchema: string\n\n  constructor(resolver: UriResolver, baseId: string, ref: string, msg?: string) {\n    super(msg || `can't resolve reference ${ref} from id ${baseId}`)\n    this.missingRef = resolveUrl(resolver, baseId, ref)\n    this.missingSchema = normalizeId(getFullPath(resolver, this.missingRef))\n  }\n}\n&/lib/compile/validate/applicability.ts\u0002import type {AnySchemaObject} from \"../../types\"\nimport type {SchemaObjCxt} from \"..\"\nimport type {JSONType, RuleGroup, Rule} from \"../rules\"\n\nexport function schemaHasRulesForType(\n  {schema, self}: SchemaObjCxt,\n  type: JSONType\n): boolean | undefined {\n  const group = self.RULES.types[type]\n  return group && group !== true && shouldUseGroup(schema, group)\n}\n\nexport function shouldUseGroup(schema: AnySchemaObject, group: RuleGroup): boolean {\n  return group.rules.some((rule) => shouldUseRule(schema, rule))\n}\n\nexport function shouldUseRule(schema: AnySchemaObject, rule: Rule): boolean | undefined {\n  return (\n    schema[rule.keyword] !== undefined ||\n    rule.definition.implements?.some((kwd) => schema[kwd] !== undefined)\n  )\n}\n*/dist/vocabularies/validation/pattern.d.tsimport type { CodeKeywordDefinition, ErrorObject } from \"../../types\";\nexport type PatternError = ErrorObject<\"pattern\", {\n    pattern: string;\n}, string | {\n    $data: string;\n}>;\ndeclare const def: CodeKeywordDefinition;\nexport default def;\n/lib/runtime/ucs2length.ts\u0002u// https://mathiasbynens.be/notes/javascript-encoding\n// https://github.com/bestiejs/punycode.js - punycode.ucs2.decode\nexport default function ucs2length(str: string): number {\n  const len = str.length\n  let length = 0\n  let pos = 0\n  let value: number\n  while (pos < len) {\n    length++\n    value = str.charCodeAt(pos++)\n    if (value >= 0xd800 && value <= 0xdbff && pos < len) {\n      // high surrogate, and there is a next character\n      value = str.charCodeAt(pos)\n      if ((value & 0xfc00) === 0xdc00) pos++ // low surrogate\n    }\n  }\n  return length\n}\n\nucs2length.code = 'require(\"ajv/dist/runtime/ucs2length\").default'\n1/lib/vocabularies/unevaluated/unevaluatedItems.ts\u0005import type {\n  CodeKeywordDefinition,\n  ErrorObject,\n  KeywordErrorDefinition,\n  AnySchema,\n} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str, not, Name} from \"../../compile/codegen\"\nimport {alwaysValidSchema, Type} from \"../../compile/util\"\n\nexport type UnevaluatedItemsError = ErrorObject<\"unevaluatedItems\", {limit: number}, AnySchema>\n\nconst error: KeywordErrorDefinition = {\n  message: ({params: {len}}) => str`must NOT have more than ${len} items`,\n  params: ({params: {len}}) => _`{limit: ${len}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"unevaluatedItems\",\n  type: \"array\",\n  schemaType: [\"boolean\", \"object\"],\n  error,\n  code(cxt: KeywordCxt) {\n    const {gen, schema, data, it} = cxt\n    const items = it.items || 0\n    if (items === true) return\n    const len = gen.const(\"len\", _`${data}.length`)\n    if (schema === false) {\n      cxt.setParams({len: items})\n      cxt.fail(_`${len} > ${items}`)\n    } else if (typeof schema == \"object\" && !alwaysValidSchema(it, schema)) {\n      const valid = gen.var(\"valid\", _`${len} <= ${items}`)\n      gen.if(not(valid), () => validateItems(valid, items))\n      cxt.ok(valid)\n    }\n    it.items = true\n\n    function validateItems(valid: Name, from: Name | number): void {\n      gen.forRange(\"i\", from, len, (i) => {\n        cxt.subschema({keyword: \"unevaluatedItems\", dataProp: i, dataPropType: Type.Num}, valid)\n        if (!it.allErrors) gen.if(not(valid), () => gen.break())\n      })\n    }\n  },\n}\n\nexport default def\n'/lib/vocabularies/dynamic/dynamicRef.ts\u0007\u0005import type {CodeKeywordDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, getProperty, Code, Name} from \"../../compile/codegen\"\nimport N from \"../../compile/names\"\nimport {callRef} from \"../core/ref\"\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"$dynamicRef\",\n  schemaType: \"string\",\n  code: (cxt) => dynamicRef(cxt, cxt.schema),\n}\n\nexport function dynamicRef(cxt: KeywordCxt, ref: string): void {\n  const {gen, keyword, it} = cxt\n  if (ref[0] !== \"#\") throw new Error(`\"${keyword}\" only supports hash fragment reference`)\n  const anchor = ref.slice(1)\n  if (it.allErrors) {\n    _dynamicRef()\n  } else {\n    const valid = gen.let(\"valid\", false)\n    _dynamicRef(valid)\n    cxt.ok(valid)\n  }\n\n  function _dynamicRef(valid?: Name): void {\n    // TODO the assumption here is that `recursiveRef: #` always points to the root\n    // of the schema object, which is not correct, because there may be $id that\n    // makes # point to it, and the target schema may not contain dynamic/recursiveAnchor.\n    // Because of that 2 tests in recursiveRef.json fail.\n    // This is a similar problem to #815 (`$id` doesn't alter resolution scope for `{ \"$ref\": \"#\" }`).\n    // (This problem is not tested in JSON-Schema-Test-Suite)\n    if (it.schemaEnv.root.dynamicAnchors[anchor]) {\n      const v = gen.let(\"_v\", _`${N.dynamicAnchors}${getProperty(anchor)}`)\n      gen.if(v, _callRef(v, valid), _callRef(it.validateName, valid))\n    } else {\n      _callRef(it.validateName, valid)()\n    }\n  }\n\n  function _callRef(validate: Code, valid?: Name): () => void {\n    return valid\n      ? () =>\n          gen.block(() => {\n            callRef(cxt, validate)\n            gen.let(valid, true)\n          })\n      : () => callRef(cxt, validate)\n  }\n}\n\nexport default def\n'/dist/vocabularies/applicator/if.js.map\to{\"version\":3,\"file\":\"if.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../lib/vocabularies/applicator/if.ts\"],\"names\":[],\"mappings\":\";;AAQA,mDAAuD;AACvD,6CAAqE;AAIrE,MAAM,KAAK,GAA2B;IACpC,OAAO,EAAE,CAAC,EAAC,MAAM,EAAC,EAAE,EAAE,CAAC,IAAA,aAAG,EAAA,eAAe,MAAM,CAAC,QAAQ,UAAU;IAClE,MAAM,EAAE,CAAC,EAAC,MAAM,EAAC,EAAE,EAAE,CAAC,IAAA,WAAC,EAAA,oBAAoB,MAAM,CAAC,QAAQ,GAAG;CAC9D,CAAA;AAED,MAAM,GAAG,GAA0B;IACjC,OAAO,EAAE,IAAI;IACb,UAAU,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC;IACjC,WAAW,EAAE,IAAI;IACjB,KAAK;IACL,IAAI,CAAC,GAAe;QAClB,MAAM,EAAC,GAAG,EAAE,YAAY,EAAE,EAAE,EAAC,GAAG,GAAG,CAAA;QACnC,IAAI,YAAY,CAAC,IAAI,KAAK,SAAS,IAAI,YAAY,CAAC,IAAI,KAAK,SAAS,EAAE;YACtE,IAAA,sBAAe,EAAC,EAAE,EAAE,2CAA2C,CAAC,CAAA;SACjE;QACD,MAAM,OAAO,GAAG,SAAS,CAAC,EAAE,EAAE,MAAM,CAAC,CAAA;QACrC,MAAM,OAAO,GAAG,SAAS,CAAC,EAAE,EAAE,MAAM,CAAC,CAAA;QACrC,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO;YAAE,OAAM;QAEhC,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;QACpC,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QACnC,UAAU,EAAE,CAAA;QACZ,GAAG,CAAC,KAAK,EAAE,CAAA;QAEX,IAAI,OAAO,IAAI,OAAO,EAAE;YACtB,MAAM,QAAQ,GAAG,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;YACpC,GAAG,CAAC,SAAS,CAAC,EAAC,QAAQ,EAAC,CAAC,CAAA;YACzB,GAAG,CAAC,EAAE,CAAC,QAAQ,EAAE,cAAc,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,cAAc,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAA;SACrF;aAAM,IAAI,OAAO,EAAE;YAClB,GAAG,CAAC,EAAE,CAAC,QAAQ,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC,CAAA;SACzC;aAAM;YACL,GAAG,CAAC,EAAE,CAAC,IAAA,aAAG,EAAC,QAAQ,CAAC,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC,CAAA;SAC9C;QAED,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAA;QAEtC,SAAS,UAAU;YACjB,MAAM,MAAM,GAAG,GAAG,CAAC,SAAS,CAC1B;gBACE,OAAO,EAAE,IAAI;gBACb,aAAa,EAAE,IAAI;gBACnB,YAAY,EAAE,KAAK;gBACnB,SAAS,EAAE,KAAK;aACjB,EACD,QAAQ,CACT,CAAA;YACD,GAAG,CAAC,cAAc,CAAC,MAAM,CAAC,CAAA;QAC5B,CAAC;QAED,SAAS,cAAc,CAAC,OAAe,EAAE,QAAe;YACtD,OAAO,GAAG,EAAE;gBACV,MAAM,MAAM,GAAG,GAAG,CAAC,SAAS,CAAC,EAAC,OAAO,EAAC,EAAE,QAAQ,CAAC,CAAA;gBACjD,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;gBAC3B,GAAG,CAAC,mBAAmB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;gBACtC,IAAI,QAAQ;oBAAE,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAA,WAAC,EAAA,GAAG,OAAO,EAAE,CAAC,CAAA;;oBAC5C,GAAG,CAAC,SAAS,CAAC,EAAC,QAAQ,EAAE,OAAO,EAAC,CAAC,CAAA;YACzC,CAAC,CAAA;QACH,CAAC;IACH,CAAC;CACF,CAAA;AAED,SAAS,SAAS,CAAC,EAAgB,EAAE,OAAe;IAClD,MAAM,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IACjC,OAAO,MAAM,KAAK,SAAS,IAAI,CAAC,IAAA,wBAAiB,EAAC,EAAE,EAAE,MAAM,CAAC,CAAA;AAC/D,CAAC;AAED,kBAAe,GAAG,CAAA\"}/lib/compile/util.ts\u0019import type {AnySchema, EvaluatedProperties, EvaluatedItems} from \"../types\"\nimport type {SchemaCxt, SchemaObjCxt} from \".\"\nimport {_, getProperty, Code, Name, CodeGen} from \"./codegen\"\nimport {_Code} from \"./codegen/code\"\nimport type {Rule, ValidationRules} from \"./rules\"\n\n// TODO refactor to use Set\nexport function toHash<T extends string = string>(arr: T[]): {[K in T]?: true} {\n  const hash: {[K in T]?: true} = {}\n  for (const item of arr) hash[item] = true\n  return hash\n}\n\nexport function alwaysValidSchema(it: SchemaCxt, schema: AnySchema): boolean | void {\n  if (typeof schema == \"boolean\") return schema\n  if (Object.keys(schema).length === 0) return true\n  checkUnknownRules(it, schema)\n  return !schemaHasRules(schema, it.self.RULES.all)\n}\n\nexport function checkUnknownRules(it: SchemaCxt, schema: AnySchema = it.schema): void {\n  const {opts, self} = it\n  if (!opts.strictSchema) return\n  if (typeof schema === \"boolean\") return\n  const rules = self.RULES.keywords\n  for (const key in schema) {\n    if (!rules[key]) checkStrictMode(it, `unknown keyword: \"${key}\"`)\n  }\n}\n\nexport function schemaHasRules(\n  schema: AnySchema,\n  rules: {[Key in string]?: boolean | Rule}\n): boolean {\n  if (typeof schema == \"boolean\") return !schema\n  for (const key in schema) if (rules[key]) return true\n  return false\n}\n\nexport function schemaHasRulesButRef(schema: AnySchema, RULES: ValidationRules): boolean {\n  if (typeof schema == \"boolean\") return !schema\n  for (const key in schema) if (key !== \"$ref\" && RULES.all[key]) return true\n  return false\n}\n\nexport function schemaRefOrVal(\n  {topSchemaRef, schemaPath}: SchemaObjCxt,\n  schema: unknown,\n  keyword: string,\n  $data?: string | false\n): Code | number | boolean {\n  if (!$data) {\n    if (typeof schema == \"number\" || typeof schema == \"boolean\") return schema\n    if (typeof schema == \"string\") return _`${schema}`\n  }\n  return _`${topSchemaRef}${schemaPath}${getProperty(keyword)}`\n}\n\nexport function unescapeFragment(str: string): string {\n  return unescapeJsonPointer(decodeURIComponent(str))\n}\n\nexport function escapeFragment(str: string | number): string {\n  return encodeURIComponent(escapeJsonPointer(str))\n}\n\nexport function escapeJsonPointer(str: string | number): string {\n  if (typeof str == \"number\") return `${str}`\n  return str.replace(/~/g, \"~0\").replace(/\\//g, \"~1\")\n}\n\nexport function unescapeJsonPointer(str: string): string {\n  return str.replace(/~1/g, \"/\").replace(/~0/g, \"~\")\n}\n\nexport function eachItem<T>(xs: T | T[], f: (x: T) => void): void {\n  if (Array.isArray(xs)) {\n    for (const x of xs) f(x)\n  } else {\n    f(xs)\n  }\n}\n\ntype SomeEvaluated = EvaluatedProperties | EvaluatedItems\n\ntype MergeEvaluatedFunc<T extends SomeEvaluated> = (\n  gen: CodeGen,\n  from: Name | T,\n  to: Name | Exclude<T, true> | undefined,\n  toName?: typeof Name\n) => Name | T\n\ninterface MakeMergeFuncArgs<T extends SomeEvaluated> {\n  mergeNames: (gen: CodeGen, from: Name, to: Name) => void\n  mergeToName: (gen: CodeGen, from: T, to: Name) => void\n  mergeValues: (from: T, to: Exclude<T, true>) => T\n  resultToName: (gen: CodeGen, res?: T) => Name\n}\n\nfunction makeMergeEvaluated<T extends SomeEvaluated>({\n  mergeNames,\n  mergeToName,\n  mergeValues,\n  resultToName,\n}: MakeMergeFuncArgs<T>): MergeEvaluatedFunc<T> {\n  return (gen, from, to, toName) => {\n    const res =\n      to === undefined\n        ? from\n        : to instanceof Name\n        ? (from instanceof Name ? mergeNames(gen, from, to) : mergeToName(gen, from, to), to)\n        : from instanceof Name\n        ? (mergeToName(gen, to, from), from)\n        : mergeValues(from, to)\n    return toName === Name && !(res instanceof Name) ? resultToName(gen, res) : res\n  }\n}\n\ninterface MergeEvaluated {\n  props: MergeEvaluatedFunc<EvaluatedProperties>\n  items: MergeEvaluatedFunc<EvaluatedItems>\n}\n\nexport const mergeEvaluated: MergeEvaluated = {\n  props: makeMergeEvaluated({\n    mergeNames: (gen, from, to) =>\n      gen.if(_`${to} !== true && ${from} !== undefined`, () => {\n        gen.if(\n          _`${from} === true`,\n          () => gen.assign(to, true),\n          () => gen.assign(to, _`${to} || {}`).code(_`Object.assign(${to}, ${from})`)\n        )\n      }),\n    mergeToName: (gen, from, to) =>\n      gen.if(_`${to} !== true`, () => {\n        if (from === true) {\n          gen.assign(to, true)\n        } else {\n          gen.assign(to, _`${to} || {}`)\n          setEvaluated(gen, to, from)\n        }\n      }),\n    mergeValues: (from, to) => (from === true ? true : {...from, ...to}),\n    resultToName: evaluatedPropsToName,\n  }),\n  items: makeMergeEvaluated({\n    mergeNames: (gen, from, to) =>\n      gen.if(_`${to} !== true && ${from} !== undefined`, () =>\n        gen.assign(to, _`${from} === true ? true : ${to} > ${from} ? ${to} : ${from}`)\n      ),\n    mergeToName: (gen, from, to) =>\n      gen.if(_`${to} !== true`, () =>\n        gen.assign(to, from === true ? true : _`${to} > ${from} ? ${to} : ${from}`)\n      ),\n    mergeValues: (from, to) => (from === true ? true : Math.max(from, to)),\n    resultToName: (gen, items) => gen.var(\"items\", items),\n  }),\n}\n\nexport function evaluatedPropsToName(gen: CodeGen, ps?: EvaluatedProperties): Name {\n  if (ps === true) return gen.var(\"props\", true)\n  const props = gen.var(\"props\", _`{}`)\n  if (ps !== undefined) setEvaluated(gen, props, ps)\n  return props\n}\n\nexport function setEvaluated(gen: CodeGen, props: Name, ps: {[K in string]?: true}): void {\n  Object.keys(ps).forEach((p) => gen.assign(_`${props}${getProperty(p)}`, true))\n}\n\nconst snippets: {[S in string]?: _Code} = {}\n\nexport function useFunc(gen: CodeGen, f: {code: string}): Name {\n  return gen.scopeValue(\"func\", {\n    ref: f,\n    code: snippets[f.code] || (snippets[f.code] = new _Code(f.code)),\n  })\n}\n\nexport enum Type {\n  Num,\n  Str,\n}\n\nexport function getErrorPath(\n  dataProp: Name | string | number,\n  dataPropType?: Type,\n  jsPropertySyntax?: boolean\n): Code | string {\n  // let path\n  if (dataProp instanceof Name) {\n    const isNumber = dataPropType === Type.Num\n    return jsPropertySyntax\n      ? isNumber\n        ? _`\"[\" + ${dataProp} + \"]\"`\n        : _`\"['\" + ${dataProp} + \"']\"`\n      : isNumber\n      ? _`\"/\" + ${dataProp}`\n      : _`\"/\" + ${dataProp}.replace(/~/g, \"~0\").replace(/\\\\//g, \"~1\")` // TODO maybe use global escapePointer\n  }\n  return jsPropertySyntax ? getProperty(dataProp).toString() : \"/\" + escapeJsonPointer(dataProp)\n}\n\nexport function checkStrictMode(\n  it: SchemaCxt,\n  msg: string,\n  mode: boolean | \"log\" = it.opts.strictSchema\n): void {\n  if (!mode) return\n  msg = `strict mode: ${msg}`\n  if (mode === true) throw new Error(msg)\n  it.self.logger.warn(msg)\n}\n/lib/compile/codegen/code.ts\u00117export abstract class _CodeOrName {\n  abstract readonly str: string\n  abstract readonly names: UsedNames\n  abstract toString(): string\n  abstract emptyStr(): boolean\n}\n\nexport const IDENTIFIER = /^[a-z$_][a-z$_0-9]*$/i\n\nexport class Name extends _CodeOrName {\n  readonly str: string\n  constructor(s: string) {\n    super()\n    if (!IDENTIFIER.test(s)) throw new Error(\"CodeGen: name must be a valid identifier\")\n    this.str = s\n  }\n\n  toString(): string {\n    return this.str\n  }\n\n  emptyStr(): boolean {\n    return false\n  }\n\n  get names(): UsedNames {\n    return {[this.str]: 1}\n  }\n}\n\nexport class _Code extends _CodeOrName {\n  readonly _items: readonly CodeItem[]\n  private _str?: string\n  private _names?: UsedNames\n\n  constructor(code: string | readonly CodeItem[]) {\n    super()\n    this._items = typeof code === \"string\" ? [code] : code\n  }\n\n  toString(): string {\n    return this.str\n  }\n\n  emptyStr(): boolean {\n    if (this._items.length > 1) return false\n    const item = this._items[0]\n    return item === \"\" || item === '\"\"'\n  }\n\n  get str(): string {\n    return (this._str ??= this._items.reduce((s: string, c: CodeItem) => `${s}${c}`, \"\"))\n  }\n\n  get names(): UsedNames {\n    return (this._names ??= this._items.reduce((names: UsedNames, c) => {\n      if (c instanceof Name) names[c.str] = (names[c.str] || 0) + 1\n      return names\n    }, {}))\n  }\n}\n\nexport type CodeItem = Name | string | number | boolean | null\n\nexport type UsedNames = Record<string, number | undefined>\n\nexport type Code = _Code | Name\n\nexport type SafeExpr = Code | number | boolean | null\n\nexport const nil = new _Code(\"\")\n\ntype CodeArg = SafeExpr | string | undefined\n\nexport function _(strs: TemplateStringsArray, ...args: CodeArg[]): _Code {\n  const code: CodeItem[] = [strs[0]]\n  let i = 0\n  while (i < args.length) {\n    addCodeArg(code, args[i])\n    code.push(strs[++i])\n  }\n  return new _Code(code)\n}\n\nconst plus = new _Code(\"+\")\n\nexport function str(strs: TemplateStringsArray, ...args: (CodeArg | string[])[]): _Code {\n  const expr: CodeItem[] = [safeStringify(strs[0])]\n  let i = 0\n  while (i < args.length) {\n    expr.push(plus)\n    addCodeArg(expr, args[i])\n    expr.push(plus, safeStringify(strs[++i]))\n  }\n  optimize(expr)\n  return new _Code(expr)\n}\n\nexport function addCodeArg(code: CodeItem[], arg: CodeArg | string[]): void {\n  if (arg instanceof _Code) code.push(...arg._items)\n  else if (arg instanceof Name) code.push(arg)\n  else code.push(interpolate(arg))\n}\n\nfunction optimize(expr: CodeItem[]): void {\n  let i = 1\n  while (i < expr.length - 1) {\n    if (expr[i] === plus) {\n      const res = mergeExprItems(expr[i - 1], expr[i + 1])\n      if (res !== undefined) {\n        expr.splice(i - 1, 3, res)\n        continue\n      }\n      expr[i++] = \"+\"\n    }\n    i++\n  }\n}\n\nfunction mergeExprItems(a: CodeItem, b: CodeItem): CodeItem | undefined {\n  if (b === '\"\"') return a\n  if (a === '\"\"') return b\n  if (typeof a == \"string\") {\n    if (b instanceof Name || a[a.length - 1] !== '\"') return\n    if (typeof b != \"string\") return `${a.slice(0, -1)}${b}\"`\n    if (b[0] === '\"') return a.slice(0, -1) + b.slice(1)\n    return\n  }\n  if (typeof b == \"string\" && b[0] === '\"' && !(a instanceof Name)) return `\"${a}${b.slice(1)}`\n  return\n}\n\nexport function strConcat(c1: Code, c2: Code): Code {\n  return c2.emptyStr() ? c1 : c1.emptyStr() ? c2 : str`${c1}${c2}`\n}\n\n// TODO do not allow arrays here\nfunction interpolate(x?: string | string[] | number | boolean | null): SafeExpr | string {\n  return typeof x == \"number\" || typeof x == \"boolean\" || x === null\n    ? x\n    : safeStringify(Array.isArray(x) ? x.join(\",\") : x)\n}\n\nexport function stringify(x: unknown): Code {\n  return new _Code(safeStringify(x))\n}\n\nexport function safeStringify(x: unknown): string {\n  return JSON.stringify(x)\n    .replace(/\\u2028/g, \"\\\\u2028\")\n    .replace(/\\u2029/g, \"\\\\u2029\")\n}\n\nexport function getProperty(key: Code | string | number): Code {\n  return typeof key == \"string\" && IDENTIFIER.test(key) ? new _Code(`.${key}`) : _`[${key}]`\n}\n\n//Does best effort to format the name properly\nexport function getEsmExportName(key: Code | string | number): Code {\n  if (typeof key == \"string\" && IDENTIFIER.test(key)) {\n    return new _Code(`${key}`)\n  }\n  throw new Error(`CodeGen: invalid export name: ${key}, use explicit $id name mapping`)\n}\n\nexport function regexpCode(rx: RegExp): Code {\n  return new _Code(rx.toString())\n}\n./dist/vocabularies/validation/limitNumber.d.ts\u0001import type { CodeKeywordDefinition, ErrorObject } from \"../../types\";\ntype Kwd = \"maximum\" | \"minimum\" | \"exclusiveMaximum\" | \"exclusiveMinimum\";\ntype Comparison = \"<=\" | \">=\" | \"<\" | \">\";\nexport type LimitNumberError = ErrorObject<Kwd, {\n    limit: number;\n    comparison: Comparison;\n}, number | {\n    $data: string;\n}>;\ndeclare const def: CodeKeywordDefinition;\nexport default def;\n/dist/standalone/index.d.tsimport type AjvCore from \"../core\";\nimport type { AnyValidateFunction } from \"../types\";\ndeclare function standaloneCode(ajv: AjvCore, refsOrFunc?: {\n    [K in string]?: string;\n} | AnyValidateFunction): string;\nexport default standaloneCode;\n/dist/compile/rules.js.map\u0004\u0006{\"version\":3,\"file\":\"rules.js\",\"sourceRoot\":\"\",\"sources\":[\"../../lib/compile/rules.ts\"],\"names\":[],\"mappings\":\";;;AAEA,MAAM,UAAU,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAU,CAAA;AAIjG,MAAM,SAAS,GAAgB,IAAI,GAAG,CAAC,UAAU,CAAC,CAAA;AAElD,SAAgB,UAAU,CAAC,CAAU;IACnC,OAAO,OAAO,CAAC,IAAI,QAAQ,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;AACjD,CAAC;AAFD,gCAEC;AAyBD,SAAgB,QAAQ;IACtB,MAAM,MAAM,GAAgE;QAC1E,MAAM,EAAE,EAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAC;QACnC,MAAM,EAAE,EAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAC;QACnC,KAAK,EAAE,EAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAC;QACjC,MAAM,EAAE,EAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAC;KACpC,CAAA;IACD,OAAO;QACL,KAAK,EAAE,EAAC,GAAG,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAC;QAC5D,KAAK,EAAE,CAAC,EAAC,KAAK,EAAE,EAAE,EAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC;QAC/E,IAAI,EAAE,EAAC,KAAK,EAAE,EAAE,EAAC;QACjB,GAAG,EAAE,EAAE;QACP,QAAQ,EAAE,EAAE;KACb,CAAA;AACH,CAAC;AAdD,4BAcC\"}2/lib/refs/json-schema-2020-12/meta/validation.json\b{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"$id\": \"https://json-schema.org/draft/2020-12/meta/validation\",\n  \"$vocabulary\": {\n    \"https://json-schema.org/draft/2020-12/vocab/validation\": true\n  },\n  \"$dynamicAnchor\": \"meta\",\n\n  \"title\": \"Validation vocabulary meta-schema\",\n  \"type\": [\"object\", \"boolean\"],\n  \"properties\": {\n    \"type\": {\n      \"anyOf\": [\n        {\"$ref\": \"#/$defs/simpleTypes\"},\n        {\n          \"type\": \"array\",\n          \"items\": {\"$ref\": \"#/$defs/simpleTypes\"},\n          \"minItems\": 1,\n          \"uniqueItems\": true\n        }\n      ]\n    },\n    \"const\": true,\n    \"enum\": {\n      \"type\": \"array\",\n      \"items\": true\n    },\n    \"multipleOf\": {\n      \"type\": \"number\",\n      \"exclusiveMinimum\": 0\n    },\n    \"maximum\": {\n      \"type\": \"number\"\n    },\n    \"exclusiveMaximum\": {\n      \"type\": \"number\"\n    },\n    \"minimum\": {\n      \"type\": \"number\"\n    },\n    \"exclusiveMinimum\": {\n      \"type\": \"number\"\n    },\n    \"maxLength\": {\"$ref\": \"#/$defs/nonNegativeInteger\"},\n    \"minLength\": {\"$ref\": \"#/$defs/nonNegativeIntegerDefault0\"},\n    \"pattern\": {\n      \"type\": \"string\",\n      \"format\": \"regex\"\n    },\n    \"maxItems\": {\"$ref\": \"#/$defs/nonNegativeInteger\"},\n    \"minItems\": {\"$ref\": \"#/$defs/nonNegativeIntegerDefault0\"},\n    \"uniqueItems\": {\n      \"type\": \"boolean\",\n      \"default\": false\n    },\n    \"maxContains\": {\"$ref\": \"#/$defs/nonNegativeInteger\"},\n    \"minContains\": {\n      \"$ref\": \"#/$defs/nonNegativeInteger\",\n      \"default\": 1\n    },\n    \"maxProperties\": {\"$ref\": \"#/$defs/nonNegativeInteger\"},\n    \"minProperties\": {\"$ref\": \"#/$defs/nonNegativeIntegerDefault0\"},\n    \"required\": {\"$ref\": \"#/$defs/stringArray\"},\n    \"dependentRequired\": {\n      \"type\": \"object\",\n      \"additionalProperties\": {\n        \"$ref\": \"#/$defs/stringArray\"\n      }\n    }\n  },\n  \"$defs\": {\n    \"nonNegativeInteger\": {\n      \"type\": \"integer\",\n      \"minimum\": 0\n    },\n    \"nonNegativeIntegerDefault0\": {\n      \"$ref\": \"#/$defs/nonNegativeInteger\",\n      \"default\": 0\n    },\n    \"simpleTypes\": {\n      \"enum\": [\"array\", \"boolean\", \"integer\", \"null\", \"number\", \"object\", \"string\"]\n    },\n    \"stringArray\": {\n      \"type\": \"array\",\n      \"items\": {\"type\": \"string\"},\n      \"uniqueItems\": true,\n      \"default\": []\n    }\n  }\n}\n!/lib/compile/validate/dataType.ts\u001bhimport type {\n  KeywordErrorDefinition,\n  KeywordErrorCxt,\n  ErrorObject,\n  AnySchemaObject,\n} from \"../../types\"\nimport type {SchemaObjCxt} from \"..\"\nimport {isJSONType, JSONType} from \"../rules\"\nimport {schemaHasRulesForType} from \"./applicability\"\nimport {reportError} from \"../errors\"\nimport {_, nil, and, not, operators, Code, Name} from \"../codegen\"\nimport {toHash, schemaRefOrVal} from \"../util\"\n\nexport enum DataType {\n  Correct,\n  Wrong,\n}\n\nexport function getSchemaTypes(schema: AnySchemaObject): JSONType[] {\n  const types = getJSONTypes(schema.type)\n  const hasNull = types.includes(\"null\")\n  if (hasNull) {\n    if (schema.nullable === false) throw new Error(\"type: null contradicts nullable: false\")\n  } else {\n    if (!types.length && schema.nullable !== undefined) {\n      throw new Error('\"nullable\" cannot be used without \"type\"')\n    }\n    if (schema.nullable === true) types.push(\"null\")\n  }\n  return types\n}\n\nexport function getJSONTypes(ts: unknown | unknown[]): JSONType[] {\n  const types: unknown[] = Array.isArray(ts) ? ts : ts ? [ts] : []\n  if (types.every(isJSONType)) return types\n  throw new Error(\"type must be JSONType or JSONType[]: \" + types.join(\",\"))\n}\n\nexport function coerceAndCheckDataType(it: SchemaObjCxt, types: JSONType[]): boolean {\n  const {gen, data, opts} = it\n  const coerceTo = coerceToTypes(types, opts.coerceTypes)\n  const checkTypes =\n    types.length > 0 &&\n    !(coerceTo.length === 0 && types.length === 1 && schemaHasRulesForType(it, types[0]))\n  if (checkTypes) {\n    const wrongType = checkDataTypes(types, data, opts.strictNumbers, DataType.Wrong)\n    gen.if(wrongType, () => {\n      if (coerceTo.length) coerceData(it, types, coerceTo)\n      else reportTypeError(it)\n    })\n  }\n  return checkTypes\n}\n\nconst COERCIBLE: Set<JSONType> = new Set([\"string\", \"number\", \"integer\", \"boolean\", \"null\"])\nfunction coerceToTypes(types: JSONType[], coerceTypes?: boolean | \"array\"): JSONType[] {\n  return coerceTypes\n    ? types.filter((t) => COERCIBLE.has(t) || (coerceTypes === \"array\" && t === \"array\"))\n    : []\n}\n\nfunction coerceData(it: SchemaObjCxt, types: JSONType[], coerceTo: JSONType[]): void {\n  const {gen, data, opts} = it\n  const dataType = gen.let(\"dataType\", _`typeof ${data}`)\n  const coerced = gen.let(\"coerced\", _`undefined`)\n  if (opts.coerceTypes === \"array\") {\n    gen.if(_`${dataType} == 'object' && Array.isArray(${data}) && ${data}.length == 1`, () =>\n      gen\n        .assign(data, _`${data}[0]`)\n        .assign(dataType, _`typeof ${data}`)\n        .if(checkDataTypes(types, data, opts.strictNumbers), () => gen.assign(coerced, data))\n    )\n  }\n  gen.if(_`${coerced} !== undefined`)\n  for (const t of coerceTo) {\n    if (COERCIBLE.has(t) || (t === \"array\" && opts.coerceTypes === \"array\")) {\n      coerceSpecificType(t)\n    }\n  }\n  gen.else()\n  reportTypeError(it)\n  gen.endIf()\n\n  gen.if(_`${coerced} !== undefined`, () => {\n    gen.assign(data, coerced)\n    assignParentData(it, coerced)\n  })\n\n  function coerceSpecificType(t: string): void {\n    switch (t) {\n      case \"string\":\n        gen\n          .elseIf(_`${dataType} == \"number\" || ${dataType} == \"boolean\"`)\n          .assign(coerced, _`\"\" + ${data}`)\n          .elseIf(_`${data} === null`)\n          .assign(coerced, _`\"\"`)\n        return\n      case \"number\":\n        gen\n          .elseIf(\n            _`${dataType} == \"boolean\" || ${data} === null\n              || (${dataType} == \"string\" && ${data} && ${data} == +${data})`\n          )\n          .assign(coerced, _`+${data}`)\n        return\n      case \"integer\":\n        gen\n          .elseIf(\n            _`${dataType} === \"boolean\" || ${data} === null\n              || (${dataType} === \"string\" && ${data} && ${data} == +${data} && !(${data} % 1))`\n          )\n          .assign(coerced, _`+${data}`)\n        return\n      case \"boolean\":\n        gen\n          .elseIf(_`${data} === \"false\" || ${data} === 0 || ${data} === null`)\n          .assign(coerced, false)\n          .elseIf(_`${data} === \"true\" || ${data} === 1`)\n          .assign(coerced, true)\n        return\n      case \"null\":\n        gen.elseIf(_`${data} === \"\" || ${data} === 0 || ${data} === false`)\n        gen.assign(coerced, null)\n        return\n\n      case \"array\":\n        gen\n          .elseIf(\n            _`${dataType} === \"string\" || ${dataType} === \"number\"\n              || ${dataType} === \"boolean\" || ${data} === null`\n          )\n          .assign(coerced, _`[${data}]`)\n    }\n  }\n}\n\nfunction assignParentData({gen, parentData, parentDataProperty}: SchemaObjCxt, expr: Name): void {\n  // TODO use gen.property\n  gen.if(_`${parentData} !== undefined`, () =>\n    gen.assign(_`${parentData}[${parentDataProperty}]`, expr)\n  )\n}\n\nexport function checkDataType(\n  dataType: JSONType,\n  data: Name,\n  strictNums?: boolean | \"log\",\n  correct = DataType.Correct\n): Code {\n  const EQ = correct === DataType.Correct ? operators.EQ : operators.NEQ\n  let cond: Code\n  switch (dataType) {\n    case \"null\":\n      return _`${data} ${EQ} null`\n    case \"array\":\n      cond = _`Array.isArray(${data})`\n      break\n    case \"object\":\n      cond = _`${data} && typeof ${data} == \"object\" && !Array.isArray(${data})`\n      break\n    case \"integer\":\n      cond = numCond(_`!(${data} % 1) && !isNaN(${data})`)\n      break\n    case \"number\":\n      cond = numCond()\n      break\n    default:\n      return _`typeof ${data} ${EQ} ${dataType}`\n  }\n  return correct === DataType.Correct ? cond : not(cond)\n\n  function numCond(_cond: Code = nil): Code {\n    return and(_`typeof ${data} == \"number\"`, _cond, strictNums ? _`isFinite(${data})` : nil)\n  }\n}\n\nexport function checkDataTypes(\n  dataTypes: JSONType[],\n  data: Name,\n  strictNums?: boolean | \"log\",\n  correct?: DataType\n): Code {\n  if (dataTypes.length === 1) {\n    return checkDataType(dataTypes[0], data, strictNums, correct)\n  }\n  let cond: Code\n  const types = toHash(dataTypes)\n  if (types.array && types.object) {\n    const notObj = _`typeof ${data} != \"object\"`\n    cond = types.null ? notObj : _`!${data} || ${notObj}`\n    delete types.null\n    delete types.array\n    delete types.object\n  } else {\n    cond = nil\n  }\n  if (types.number) delete types.integer\n  for (const t in types) cond = and(cond, checkDataType(t as JSONType, data, strictNums, correct))\n  return cond\n}\n\nexport type TypeError = ErrorObject<\"type\", {type: string}>\n\nconst typeError: KeywordErrorDefinition = {\n  message: ({schema}) => `must be ${schema}`,\n  params: ({schema, schemaValue}) =>\n    typeof schema == \"string\" ? _`{type: ${schema}}` : _`{type: ${schemaValue}}`,\n}\n\nexport function reportTypeError(it: SchemaObjCxt): void {\n  const cxt = getTypeErrorContext(it)\n  reportError(cxt, typeError)\n}\n\nfunction getTypeErrorContext(it: SchemaObjCxt): KeywordErrorCxt {\n  const {gen, data, schema} = it\n  const schemaCode = schemaRefOrVal(it, schema, \"type\")\n  return {\n    gen,\n    keyword: \"type\",\n    data,\n    schema: schema.type,\n    schemaCode,\n    schemaValue: schemaCode,\n    parentSchema: schema,\n    params: {},\n    it,\n  }\n}\n/dist/compile/ref_error.js.map\u0001{\"version\":3,\"file\":\"ref_error.js\",\"sourceRoot\":\"\",\"sources\":[\"../../lib/compile/ref_error.ts\"],\"names\":[],\"mappings\":\";;AAAA,uCAA8D;AAG9D,MAAqB,eAAgB,SAAQ,KAAK;IAIhD,YAAY,QAAqB,EAAE,MAAc,EAAE,GAAW,EAAE,GAAY;QAC1E,KAAK,CAAC,GAAG,IAAI,2BAA2B,GAAG,YAAY,MAAM,EAAE,CAAC,CAAA;QAChE,IAAI,CAAC,UAAU,GAAG,IAAA,oBAAU,EAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,CAAC,CAAA;QACnD,IAAI,CAAC,aAAa,GAAG,IAAA,qBAAW,EAAC,IAAA,qBAAW,EAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAA;IAC1E,CAAC;CACF;AATD,kCASC\"}#/lib/vocabularies/applicator/not.ts\u0003[import type {CodeKeywordDefinition, ErrorNoParams, AnySchema} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {alwaysValidSchema} from \"../../compile/util\"\n\nexport type NotKeywordError = ErrorNoParams<\"not\", AnySchema>\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"not\",\n  schemaType: [\"object\", \"boolean\"],\n  trackErrors: true,\n  code(cxt: KeywordCxt) {\n    const {gen, schema, it} = cxt\n    if (alwaysValidSchema(it, schema)) {\n      cxt.fail()\n      return\n    }\n\n    const valid = gen.name(\"valid\")\n    cxt.subschema(\n      {\n        keyword: \"not\",\n        compositeRule: true,\n        createErrors: false,\n        allErrors: false,\n      },\n      valid\n    )\n\n    cxt.failResult(\n      valid,\n      () => cxt.reset(),\n      () => cxt.error()\n    )\n  },\n  error: {message: \"must NOT be valid\"},\n}\n\nexport default def\n6/dist/vocabularies/unevaluated/unevaluatedItems.js.map\u0007\u0001{\"version\":3,\"file\":\"unevaluatedItems.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../lib/vocabularies/unevaluated/unevaluatedItems.ts\"],\"names\":[],\"mappings\":\";;AAOA,mDAAuD;AACvD,6CAA0D;AAI1D,MAAM,KAAK,GAA2B;IACpC,OAAO,EAAE,CAAC,EAAC,MAAM,EAAE,EAAC,GAAG,EAAC,EAAC,EAAE,EAAE,CAAC,IAAA,aAAG,EAAA,2BAA2B,GAAG,QAAQ;IACvE,MAAM,EAAE,CAAC,EAAC,MAAM,EAAE,EAAC,GAAG,EAAC,EAAC,EAAE,EAAE,CAAC,IAAA,WAAC,EAAA,WAAW,GAAG,GAAG;CAChD,CAAA;AAED,MAAM,GAAG,GAA0B;IACjC,OAAO,EAAE,kBAAkB;IAC3B,IAAI,EAAE,OAAO;IACb,UAAU,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC;IACjC,KAAK;IACL,IAAI,CAAC,GAAe;QAClB,MAAM,EAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAC,GAAG,GAAG,CAAA;QACnC,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,IAAI,CAAC,CAAA;QAC3B,IAAI,KAAK,KAAK,IAAI;YAAE,OAAM;QAC1B,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,IAAA,WAAC,EAAA,GAAG,IAAI,SAAS,CAAC,CAAA;QAC/C,IAAI,MAAM,KAAK,KAAK,EAAE;YACpB,GAAG,CAAC,SAAS,CAAC,EAAC,GAAG,EAAE,KAAK,EAAC,CAAC,CAAA;YAC3B,GAAG,CAAC,IAAI,CAAC,IAAA,WAAC,EAAA,GAAG,GAAG,MAAM,KAAK,EAAE,CAAC,CAAA;SAC/B;aAAM,IAAI,OAAO,MAAM,IAAI,QAAQ,IAAI,CAAC,IAAA,wBAAiB,EAAC,EAAE,EAAE,MAAM,CAAC,EAAE;YACtE,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,IAAA,WAAC,EAAA,GAAG,GAAG,OAAO,KAAK,EAAE,CAAC,CAAA;YACrD,GAAG,CAAC,EAAE,CAAC,IAAA,aAAG,EAAC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAA;YACrD,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,CAAA;SACd;QACD,EAAE,CAAC,KAAK,GAAG,IAAI,CAAA;QAEf,SAAS,aAAa,CAAC,KAAW,EAAE,IAAmB;YACrD,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE;gBACjC,GAAG,CAAC,SAAS,CAAC,EAAC,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,CAAC,EAAE,YAAY,EAAE,WAAI,CAAC,GAAG,EAAC,EAAE,KAAK,CAAC,CAAA;gBACxF,IAAI,CAAC,EAAE,CAAC,SAAS;oBAAE,GAAG,CAAC,EAAE,CAAC,IAAA,aAAG,EAAC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAA;YAC1D,CAAC,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;CACF,CAAA;AAED,kBAAe,GAAG,CAAA\"} /dist/vocabularies/jtd/values.js\u0007.\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst util_1 = require(\"../../compile/util\");\nconst codegen_1 = require(\"../../compile/codegen\");\nconst metadata_1 = require(\"./metadata\");\nconst nullable_1 = require(\"./nullable\");\nconst error_1 = require(\"./error\");\nconst def = {\n    keyword: \"values\",\n    schemaType: \"object\",\n    error: (0, error_1.typeError)(\"object\"),\n    code(cxt) {\n        (0, metadata_1.checkMetadata)(cxt);\n        const { gen, data, schema, it } = cxt;\n        const [valid, cond] = (0, nullable_1.checkNullableObject)(cxt, data);\n        if ((0, util_1.alwaysValidSchema)(it, schema)) {\n            gen.if((0, codegen_1.not)((0, codegen_1.or)(cond, valid)), () => cxt.error());\n        }\n        else {\n            gen.if(cond);\n            gen.assign(valid, validateMap());\n            gen.elseIf((0, codegen_1.not)(valid));\n            cxt.error();\n            gen.endIf();\n        }\n        cxt.ok(valid);\n        function validateMap() {\n            const _valid = gen.name(\"valid\");\n            if (it.allErrors) {\n                const validMap = gen.let(\"valid\", true);\n                validateValues(() => gen.assign(validMap, false));\n                return validMap;\n            }\n            gen.var(_valid, true);\n            validateValues(() => gen.break());\n            return _valid;\n            function validateValues(notValid) {\n                gen.forIn(\"key\", data, (key) => {\n                    cxt.subschema({\n                        keyword: \"values\",\n                        dataProp: key,\n                        dataPropType: util_1.Type.Str,\n                    }, _valid);\n                    gen.if((0, codegen_1.not)(_valid), notValid);\n                });\n            }\n        }\n    },\n};\nexports.default = def;\n//# sourceMappingURL=values.js.map)/dist/refs/json-schema-2020-12/index.d.tsoimport type Ajv from \"../../core\";\nexport default function addMetaSchema2020(this: Ajv, $data?: boolean): Ajv;\n%/dist/vocabularies/dynamic/index.d.tsjimport type { Vocabulary } from \"../../types\";\ndeclare const dynamic: Vocabulary;\nexport default dynamic;\n/lib/refs/data.json\u0001{\n  \"$id\": \"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#\",\n  \"description\": \"Meta-schema for $data reference (JSON AnySchema extension proposal)\",\n  \"type\": \"object\",\n  \"required\": [\"$data\"],\n  \"properties\": {\n    \"$data\": {\n      \"type\": \"string\",\n      \"anyOf\": [{\"format\": \"relative-json-pointer\"}, {\"format\": \"json-pointer\"}]\n    }\n  },\n  \"additionalProperties\": false\n}\n)/lib/vocabularies/dynamic/recursiveRef.tsimport type {CodeKeywordDefinition} from \"../../types\"\nimport {dynamicRef} from \"./dynamicRef\"\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"$recursiveRef\",\n  schemaType: \"string\",\n  code: (cxt) => dynamicRef(cxt, cxt.schema),\n}\n\nexport default def\n/lib/jtd.ts\u0010,import type {AnySchemaObject, SchemaObject, JTDParser} from \"./types\"\nimport type {JTDSchemaType, SomeJTDSchemaType, JTDDataType} from \"./types/jtd-schema\"\nimport AjvCore, {CurrentOptions} from \"./core\"\nimport jtdVocabulary from \"./vocabularies/jtd\"\nimport jtdMetaSchema from \"./refs/jtd-schema\"\nimport compileSerializer from \"./compile/jtd/serialize\"\nimport compileParser from \"./compile/jtd/parse\"\nimport {SchemaEnv} from \"./compile\"\n\nconst META_SCHEMA_ID = \"JTD-meta-schema\"\n\ntype JTDOptions = CurrentOptions & {\n  // strict mode options not supported with JTD:\n  strict?: never\n  allowMatchingProperties?: never\n  allowUnionTypes?: never\n  validateFormats?: never\n  // validation and reporting options not supported with JTD:\n  $data?: never\n  verbose?: boolean\n  $comment?: never\n  formats?: never\n  loadSchema?: never\n  // options to modify validated data:\n  useDefaults?: never\n  coerceTypes?: never\n  // advanced options:\n  next?: never\n  unevaluated?: never\n  dynamicRef?: never\n  meta?: boolean\n  defaultMeta?: never\n  inlineRefs?: boolean\n  loopRequired?: never\n  multipleOfPrecision?: never\n}\n\nclass Ajv extends AjvCore {\n  constructor(opts: JTDOptions = {}) {\n    super({\n      ...opts,\n      jtd: true,\n    })\n  }\n\n  _addVocabularies(): void {\n    super._addVocabularies()\n    this.addVocabulary(jtdVocabulary)\n  }\n\n  _addDefaultMetaSchema(): void {\n    super._addDefaultMetaSchema()\n    if (!this.opts.meta) return\n    this.addMetaSchema(jtdMetaSchema, META_SCHEMA_ID, false)\n  }\n\n  defaultMeta(): string | AnySchemaObject | undefined {\n    return (this.opts.defaultMeta =\n      super.defaultMeta() || (this.getSchema(META_SCHEMA_ID) ? META_SCHEMA_ID : undefined))\n  }\n\n  compileSerializer<T = unknown>(schema: SchemaObject): (data: T) => string\n  // Separated for type inference to work\n  // eslint-disable-next-line @typescript-eslint/unified-signatures\n  compileSerializer<T = unknown>(schema: JTDSchemaType<T>): (data: T) => string\n  compileSerializer<T = unknown>(schema: SchemaObject): (data: T) => string {\n    const sch = this._addSchema(schema)\n    return sch.serialize || this._compileSerializer(sch)\n  }\n\n  compileParser<T = unknown>(schema: SchemaObject): JTDParser<T>\n  // Separated for type inference to work\n  // eslint-disable-next-line @typescript-eslint/unified-signatures\n  compileParser<T = unknown>(schema: JTDSchemaType<T>): JTDParser<T>\n  compileParser<T = unknown>(schema: SchemaObject): JTDParser<T> {\n    const sch = this._addSchema(schema)\n    return (sch.parse || this._compileParser(sch)) as JTDParser<T>\n  }\n\n  private _compileSerializer<T>(sch: SchemaEnv): (data: T) => string {\n    compileSerializer.call(this, sch, (sch.schema as AnySchemaObject).definitions || {})\n    /* istanbul ignore if */\n    if (!sch.serialize) throw new Error(\"ajv implementation error\")\n    return sch.serialize\n  }\n\n  private _compileParser(sch: SchemaEnv): JTDParser {\n    compileParser.call(this, sch, (sch.schema as AnySchemaObject).definitions || {})\n    /* istanbul ignore if */\n    if (!sch.parse) throw new Error(\"ajv implementation error\")\n    return sch.parse\n  }\n}\n\nmodule.exports = exports = Ajv\nObject.defineProperty(exports, \"__esModule\", {value: true})\n\nexport default Ajv\n\nexport {\n  Format,\n  FormatDefinition,\n  AsyncFormatDefinition,\n  KeywordDefinition,\n  KeywordErrorDefinition,\n  CodeKeywordDefinition,\n  MacroKeywordDefinition,\n  FuncKeywordDefinition,\n  Vocabulary,\n  Schema,\n  SchemaObject,\n  AnySchemaObject,\n  AsyncSchema,\n  AnySchema,\n  ValidateFunction,\n  AsyncValidateFunction,\n  ErrorObject,\n  ErrorNoParams,\n  JTDParser,\n} from \"./types\"\n\nexport {Plugin, Options, CodeOptions, InstanceOptions, Logger, ErrorsTextOptions} from \"./core\"\nexport {SchemaCxt, SchemaObjCxt} from \"./compile\"\nexport {KeywordCxt} from \"./compile/validate\"\nexport {JTDErrorObject} from \"./vocabularies/jtd\"\nexport {_, str, stringify, nil, Name, Code, CodeGen, CodeGenOptions} from \"./compile/codegen\"\n\nexport {JTDSchemaType, SomeJTDSchemaType, JTDDataType}\nexport {JTDOptions}\nexport {default as ValidationError} from \"./runtime/validation_error\"\nexport {default as MissingRefError} from \"./compile/ref_error\"\n/dist/compile/codegen/code.d.ts\u0006fexport declare abstract class _CodeOrName {\n    abstract readonly str: string;\n    abstract readonly names: UsedNames;\n    abstract toString(): string;\n    abstract emptyStr(): boolean;\n}\nexport declare const IDENTIFIER: RegExp;\nexport declare class Name extends _CodeOrName {\n    readonly str: string;\n    constructor(s: string);\n    toString(): string;\n    emptyStr(): boolean;\n    get names(): UsedNames;\n}\nexport declare class _Code extends _CodeOrName {\n    readonly _items: readonly CodeItem[];\n    private _str?;\n    private _names?;\n    constructor(code: string | readonly CodeItem[]);\n    toString(): string;\n    emptyStr(): boolean;\n    get str(): string;\n    get names(): UsedNames;\n}\nexport type CodeItem = Name | string | number | boolean | null;\nexport type UsedNames = Record<string, number | undefined>;\nexport type Code = _Code | Name;\nexport type SafeExpr = Code | number | boolean | null;\nexport declare const nil: _Code;\ntype CodeArg = SafeExpr | string | undefined;\nexport declare function _(strs: TemplateStringsArray, ...args: CodeArg[]): _Code;\nexport declare function str(strs: TemplateStringsArray, ...args: (CodeArg | string[])[]): _Code;\nexport declare function addCodeArg(code: CodeItem[], arg: CodeArg | string[]): void;\nexport declare function strConcat(c1: Code, c2: Code): Code;\nexport declare function stringify(x: unknown): Code;\nexport declare function safeStringify(x: unknown): string;\nexport declare function getProperty(key: Code | string | number): Code;\nexport declare function getEsmExportName(key: Code | string | number): Code;\nexport declare function regexpCode(rx: RegExp): Code;\nexport {};\n2/lib/refs/json-schema-2019-09/meta/validation.json\b{\n  \"$schema\": \"https://json-schema.org/draft/2019-09/schema\",\n  \"$id\": \"https://json-schema.org/draft/2019-09/meta/validation\",\n  \"$vocabulary\": {\n    \"https://json-schema.org/draft/2019-09/vocab/validation\": true\n  },\n  \"$recursiveAnchor\": true,\n\n  \"title\": \"Validation vocabulary meta-schema\",\n  \"type\": [\"object\", \"boolean\"],\n  \"properties\": {\n    \"multipleOf\": {\n      \"type\": \"number\",\n      \"exclusiveMinimum\": 0\n    },\n    \"maximum\": {\n      \"type\": \"number\"\n    },\n    \"exclusiveMaximum\": {\n      \"type\": \"number\"\n    },\n    \"minimum\": {\n      \"type\": \"number\"\n    },\n    \"exclusiveMinimum\": {\n      \"type\": \"number\"\n    },\n    \"maxLength\": {\"$ref\": \"#/$defs/nonNegativeInteger\"},\n    \"minLength\": {\"$ref\": \"#/$defs/nonNegativeIntegerDefault0\"},\n    \"pattern\": {\n      \"type\": \"string\",\n      \"format\": \"regex\"\n    },\n    \"maxItems\": {\"$ref\": \"#/$defs/nonNegativeInteger\"},\n    \"minItems\": {\"$ref\": \"#/$defs/nonNegativeIntegerDefault0\"},\n    \"uniqueItems\": {\n      \"type\": \"boolean\",\n      \"default\": false\n    },\n    \"maxContains\": {\"$ref\": \"#/$defs/nonNegativeInteger\"},\n    \"minContains\": {\n      \"$ref\": \"#/$defs/nonNegativeInteger\",\n      \"default\": 1\n    },\n    \"maxProperties\": {\"$ref\": \"#/$defs/nonNegativeInteger\"},\n    \"minProperties\": {\"$ref\": \"#/$defs/nonNegativeIntegerDefault0\"},\n    \"required\": {\"$ref\": \"#/$defs/stringArray\"},\n    \"dependentRequired\": {\n      \"type\": \"object\",\n      \"additionalProperties\": {\n        \"$ref\": \"#/$defs/stringArray\"\n      }\n    },\n    \"const\": true,\n    \"enum\": {\n      \"type\": \"array\",\n      \"items\": true\n    },\n    \"type\": {\n      \"anyOf\": [\n        {\"$ref\": \"#/$defs/simpleTypes\"},\n        {\n          \"type\": \"array\",\n          \"items\": {\"$ref\": \"#/$defs/simpleTypes\"},\n          \"minItems\": 1,\n          \"uniqueItems\": true\n        }\n      ]\n    }\n  },\n  \"$defs\": {\n    \"nonNegativeInteger\": {\n      \"type\": \"integer\",\n      \"minimum\": 0\n    },\n    \"nonNegativeIntegerDefault0\": {\n      \"$ref\": \"#/$defs/nonNegativeInteger\",\n      \"default\": 0\n    },\n    \"simpleTypes\": {\n      \"enum\": [\"array\", \"boolean\", \"integer\", \"null\", \"number\", \"object\", \"string\"]\n    },\n    \"stringArray\": {\n      \"type\": \"array\",\n      \"items\": {\"type\": \"string\"},\n      \"uniqueItems\": true,\n      \"default\": []\n    }\n  }\n}\n,/dist/vocabularies/dynamic/dynamicRef.js.map\u0006g{\"version\":3,\"file\":\"dynamicRef.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../lib/vocabularies/dynamic/dynamicRef.ts\"],\"names\":[],\"mappings\":\";;;AAEA,mDAAgE;AAChE,+CAAmC;AACnC,qCAAmC;AAEnC,MAAM,GAAG,GAA0B;IACjC,OAAO,EAAE,aAAa;IACtB,UAAU,EAAE,QAAQ;IACpB,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC;CAC3C,CAAA;AAED,SAAgB,UAAU,CAAC,GAAe,EAAE,GAAW;IACrD,MAAM,EAAC,GAAG,EAAE,OAAO,EAAE,EAAE,EAAC,GAAG,GAAG,CAAA;IAC9B,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,IAAI,OAAO,yCAAyC,CAAC,CAAA;IACzF,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAC3B,IAAI,EAAE,CAAC,SAAS,EAAE;QAChB,WAAW,EAAE,CAAA;KACd;SAAM;QACL,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;QACrC,WAAW,CAAC,KAAK,CAAC,CAAA;QAClB,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,CAAA;KACd;IAED,SAAS,WAAW,CAAC,KAAY;QAC/B,+EAA+E;QAC/E,4EAA4E;QAC5E,sFAAsF;QACtF,qDAAqD;QACrD,kGAAkG;QAClG,yDAAyD;QACzD,IAAI,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE;YAC5C,MAAM,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,IAAA,WAAC,EAAA,GAAG,eAAC,CAAC,cAAc,GAAG,IAAA,qBAAW,EAAC,MAAM,CAAC,EAAE,CAAC,CAAA;YACrE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC,CAAA;SAChE;aAAM;YACL,QAAQ,CAAC,EAAE,CAAC,YAAY,EAAE,KAAK,CAAC,EAAE,CAAA;SACnC;IACH,CAAC;IAED,SAAS,QAAQ,CAAC,QAAc,EAAE,KAAY;QAC5C,OAAO,KAAK;YACV,CAAC,CAAC,GAAG,EAAE,CACH,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE;gBACb,IAAA,aAAO,EAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;gBACtB,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;YACtB,CAAC,CAAC;YACN,CAAC,CAAC,GAAG,EAAE,CAAC,IAAA,aAAO,EAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;IAClC,CAAC;AACH,CAAC;AApCD,gCAoCC;AAED,kBAAe,GAAG,CAAA\"}/dist/vocabularies/next.js\u0001\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst dependentRequired_1 = require(\"./validation/dependentRequired\");\nconst dependentSchemas_1 = require(\"./applicator/dependentSchemas\");\nconst limitContains_1 = require(\"./validation/limitContains\");\nconst next = [dependentRequired_1.default, dependentSchemas_1.default, limitContains_1.default];\nexports.default = next;\n//# sourceMappingURL=next.js.map/dist/runtime/uri.js\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst uri = require(\"uri-js\");\nuri.code = 'require(\"ajv/dist/runtime/uri\").default';\nexports.default = uri;\n//# sourceMappingURL=uri.js.map/lib/2019.ts\timport type {AnySchemaObject} from \"./types\"\nimport AjvCore, {Options} from \"./core\"\n\nimport draft7Vocabularies from \"./vocabularies/draft7\"\nimport dynamicVocabulary from \"./vocabularies/dynamic\"\nimport nextVocabulary from \"./vocabularies/next\"\nimport unevaluatedVocabulary from \"./vocabularies/unevaluated\"\nimport discriminator from \"./vocabularies/discriminator\"\nimport addMetaSchema2019 from \"./refs/json-schema-2019-09\"\n\nconst META_SCHEMA_ID = \"https://json-schema.org/draft/2019-09/schema\"\n\nclass Ajv2019 extends AjvCore {\n  constructor(opts: Options = {}) {\n    super({\n      ...opts,\n      dynamicRef: true,\n      next: true,\n      unevaluated: true,\n    })\n  }\n\n  _addVocabularies(): void {\n    super._addVocabularies()\n    this.addVocabulary(dynamicVocabulary)\n    draft7Vocabularies.forEach((v) => this.addVocabulary(v))\n    this.addVocabulary(nextVocabulary)\n    this.addVocabulary(unevaluatedVocabulary)\n    if (this.opts.discriminator) this.addKeyword(discriminator)\n  }\n\n  _addDefaultMetaSchema(): void {\n    super._addDefaultMetaSchema()\n    const {$data, meta} = this.opts\n    if (!meta) return\n    addMetaSchema2019.call(this, $data)\n    this.refs[\"http://json-schema.org/schema\"] = META_SCHEMA_ID\n  }\n\n  defaultMeta(): string | AnySchemaObject | undefined {\n    return (this.opts.defaultMeta =\n      super.defaultMeta() || (this.getSchema(META_SCHEMA_ID) ? META_SCHEMA_ID : undefined))\n  }\n}\n\nmodule.exports = exports = Ajv2019\nObject.defineProperty(exports, \"__esModule\", {value: true})\n\nexport default Ajv2019\n\nexport {\n  Format,\n  FormatDefinition,\n  AsyncFormatDefinition,\n  KeywordDefinition,\n  KeywordErrorDefinition,\n  CodeKeywordDefinition,\n  MacroKeywordDefinition,\n  FuncKeywordDefinition,\n  Vocabulary,\n  Schema,\n  SchemaObject,\n  AnySchemaObject,\n  AsyncSchema,\n  AnySchema,\n  ValidateFunction,\n  AsyncValidateFunction,\n  ErrorObject,\n  ErrorNoParams,\n} from \"./types\"\n\nexport {Plugin, Options, CodeOptions, InstanceOptions, Logger, ErrorsTextOptions} from \"./core\"\nexport {SchemaCxt, SchemaObjCxt} from \"./compile\"\nexport {KeywordCxt} from \"./compile/validate\"\nexport {DefinedError} from \"./vocabularies/errors\"\nexport {JSONType} from \"./compile/rules\"\nexport {JSONSchemaType} from \"./types/json-schema\"\nexport {_, str, stringify, nil, Name, Code, CodeGen, CodeGenOptions} from \"./compile/codegen\"\nexport {default as ValidationError} from \"./runtime/validation_error\"\nexport {default as MissingRefError} from \"./compile/ref_error\"\n/dist/refs/jtd-schema.d.tsrimport { SchemaObject } from \"../types\";\ndeclare const jtdMetaSchema: SchemaObject;\nexport default jtdMetaSchema;\n3/dist/vocabularies/applicator/dependentSchemas.d.tsximport type { CodeKeywordDefinition } from \"../../types\";\ndeclare const def: CodeKeywordDefinition;\nexport default def;\n$/dist/compile/validate/defaults.d.tsuimport type { SchemaObjCxt } from \"..\";\nexport declare function assignDefaults(it: SchemaObjCxt, ty?: string): void;\n./lib/refs/json-schema-2019-09/meta/format.json\u0001w{\n  \"$schema\": \"https://json-schema.org/draft/2019-09/schema\",\n  \"$id\": \"https://json-schema.org/draft/2019-09/meta/format\",\n  \"$vocabulary\": {\n    \"https://json-schema.org/draft/2019-09/vocab/format\": true\n  },\n  \"$recursiveAnchor\": true,\n\n  \"title\": \"Format vocabulary meta-schema\",\n  \"type\": [\"object\", \"boolean\"],\n  \"properties\": {\n    \"format\": {\"type\": \"string\"}\n  }\n}\n/dist/2020.js\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MissingRefError = exports.ValidationError = exports.CodeGen = exports.Name = exports.nil = exports.stringify = exports.str = exports._ = exports.KeywordCxt = void 0;\nconst core_1 = require(\"./core\");\nconst draft2020_1 = require(\"./vocabularies/draft2020\");\nconst discriminator_1 = require(\"./vocabularies/discriminator\");\nconst json_schema_2020_12_1 = require(\"./refs/json-schema-2020-12\");\nconst META_SCHEMA_ID = \"https://json-schema.org/draft/2020-12/schema\";\nclass Ajv2020 extends core_1.default {\n    constructor(opts = {}) {\n        super({\n            ...opts,\n            dynamicRef: true,\n            next: true,\n            unevaluated: true,\n        });\n    }\n    _addVocabularies() {\n        super._addVocabularies();\n        draft2020_1.default.forEach((v) => this.addVocabulary(v));\n        if (this.opts.discriminator)\n            this.addKeyword(discriminator_1.default);\n    }\n    _addDefaultMetaSchema() {\n        super._addDefaultMetaSchema();\n        const { $data, meta } = this.opts;\n        if (!meta)\n            return;\n        json_schema_2020_12_1.default.call(this, $data);\n        this.refs[\"http://json-schema.org/schema\"] = META_SCHEMA_ID;\n    }\n    defaultMeta() {\n        return (this.opts.defaultMeta =\n            super.defaultMeta() || (this.getSchema(META_SCHEMA_ID) ? META_SCHEMA_ID : undefined));\n    }\n}\nmodule.exports = exports = Ajv2020;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = Ajv2020;\nvar validate_1 = require(\"./compile/validate\");\nObject.defineProperty(exports, \"KeywordCxt\", { enumerable: true, get: function () { return validate_1.KeywordCxt; } });\nvar codegen_1 = require(\"./compile/codegen\");\nObject.defineProperty(exports, \"_\", { enumerable: true, get: function () { return codegen_1._; } });\nObject.defineProperty(exports, \"str\", { enumerable: true, get: function () { return codegen_1.str; } });\nObject.defineProperty(exports, \"stringify\", { enumerable: true, get: function () { return codegen_1.stringify; } });\nObject.defineProperty(exports, \"nil\", { enumerable: true, get: function () { return codegen_1.nil; } });\nObject.defineProperty(exports, \"Name\", { enumerable: true, get: function () { return codegen_1.Name; } });\nObject.defineProperty(exports, \"CodeGen\", { enumerable: true, get: function () { return codegen_1.CodeGen; } });\nvar validation_error_1 = require(\"./runtime/validation_error\");\nObject.defineProperty(exports, \"ValidationError\", { enumerable: true, get: function () { return validation_error_1.default; } });\nvar ref_error_1 = require(\"./compile/ref_error\");\nObject.defineProperty(exports, \"MissingRefError\", { enumerable: true, get: function () { return ref_error_1.default; } });\n//# sourceMappingURL=2020.js.map%/dist/compile/validate/subschema.d.ts\u0006import type { AnySchema } from \"../../types\";\nimport type { SchemaObjCxt } from \"..\";\nimport { Code, Name } from \"../codegen\";\nimport { Type } from \"../util\";\nimport type { JSONType } from \"../rules\";\nexport interface SubschemaContext {\n    schema: AnySchema;\n    schemaPath: Code;\n    errSchemaPath: string;\n    topSchemaRef?: Code;\n    errorPath?: Code;\n    dataLevel?: number;\n    dataTypes?: JSONType[];\n    data?: Name;\n    parentData?: Name;\n    parentDataProperty?: Code | number;\n    dataNames?: Name[];\n    dataPathArr?: (Code | number)[];\n    propertyName?: Name;\n    jtdDiscriminator?: string;\n    jtdMetadata?: boolean;\n    compositeRule?: true;\n    createErrors?: boolean;\n    allErrors?: boolean;\n}\nexport type SubschemaArgs = Partial<{\n    keyword: string;\n    schemaProp: string | number;\n    schema: AnySchema;\n    schemaPath: Code;\n    errSchemaPath: string;\n    topSchemaRef: Code;\n    data: Name | Code;\n    dataProp: Code | string | number;\n    dataTypes: JSONType[];\n    definedProperties: Set<string>;\n    propertyName: Name;\n    dataPropType: Type;\n    jtdDiscriminator: string;\n    jtdMetadata: boolean;\n    compositeRule: true;\n    createErrors: boolean;\n    allErrors: boolean;\n}>;\nexport declare function getSubschema(it: SchemaObjCxt, { keyword, schemaProp, schema, schemaPath, errSchemaPath, topSchemaRef }: SubschemaArgs): SubschemaContext;\nexport declare function extendSubschemaData(subschema: SubschemaContext, it: SchemaObjCxt, { dataProp, dataPropType: dpType, data, dataTypes, propertyName }: SubschemaArgs): void;\nexport declare function extendSubschemaMode(subschema: SubschemaContext, { jtdDiscriminator, jtdMetadata, compositeRule, createErrors, allErrors }: SubschemaArgs): void;\n*/dist/vocabularies/applicator/items2020.js\u0004\r\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst code_1 = require(\"../code\");\nconst additionalItems_1 = require(\"./additionalItems\");\nconst error = {\n    message: ({ params: { len } }) => (0, codegen_1.str) `must NOT have more than ${len} items`,\n    params: ({ params: { len } }) => (0, codegen_1._) `{limit: ${len}}`,\n};\nconst def = {\n    keyword: \"items\",\n    type: \"array\",\n    schemaType: [\"object\", \"boolean\"],\n    before: \"uniqueItems\",\n    error,\n    code(cxt) {\n        const { schema, parentSchema, it } = cxt;\n        const { prefixItems } = parentSchema;\n        it.items = true;\n        if ((0, util_1.alwaysValidSchema)(it, schema))\n            return;\n        if (prefixItems)\n            (0, additionalItems_1.validateAdditionalItems)(cxt, prefixItems);\n        else\n            cxt.ok((0, code_1.validateArray)(cxt));\n    },\n};\nexports.default = def;\n//# sourceMappingURL=items2020.js.map/lib/compile/rules.ts\u0005import type {AddedKeywordDefinition} from \"../types\"\n\nconst _jsonTypes = [\"string\", \"number\", \"integer\", \"boolean\", \"null\", \"object\", \"array\"] as const\n\nexport type JSONType = typeof _jsonTypes[number]\n\nconst jsonTypes: Set<string> = new Set(_jsonTypes)\n\nexport function isJSONType(x: unknown): x is JSONType {\n  return typeof x == \"string\" && jsonTypes.has(x)\n}\n\ntype ValidationTypes = {\n  [K in JSONType]: boolean | RuleGroup | undefined\n}\n\nexport interface ValidationRules {\n  rules: RuleGroup[]\n  post: RuleGroup\n  all: {[Key in string]?: boolean | Rule} // rules that have to be validated\n  keywords: {[Key in string]?: boolean} // all known keywords (superset of \"all\")\n  types: ValidationTypes\n}\n\nexport interface RuleGroup {\n  type?: JSONType\n  rules: Rule[]\n}\n\n// This interface wraps KeywordDefinition because definition can have multiple keywords\nexport interface Rule {\n  keyword: string\n  definition: AddedKeywordDefinition\n}\n\nexport function getRules(): ValidationRules {\n  const groups: Record<\"number\" | \"string\" | \"array\" | \"object\", RuleGroup> = {\n    number: {type: \"number\", rules: []},\n    string: {type: \"string\", rules: []},\n    array: {type: \"array\", rules: []},\n    object: {type: \"object\", rules: []},\n  }\n  return {\n    types: {...groups, integer: true, boolean: true, null: true},\n    rules: [{rules: []}, groups.number, groups.string, groups.array, groups.object],\n    post: {rules: []},\n    all: {},\n    keywords: {},\n  }\n}\n/lib/vocabularies/jtd/enum.ts\u0006[import type {CodeKeywordDefinition, KeywordErrorDefinition, ErrorObject} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, or, and, Code} from \"../../compile/codegen\"\nimport {checkMetadata} from \"./metadata\"\nimport {checkNullable} from \"./nullable\"\n\nexport type JTDEnumError = ErrorObject<\"enum\", {allowedValues: string[]}, string[]>\n\nconst error: KeywordErrorDefinition = {\n  message: \"must be equal to one of the allowed values\",\n  params: ({schemaCode}) => _`{allowedValues: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"enum\",\n  schemaType: \"array\",\n  error,\n  code(cxt: KeywordCxt) {\n    checkMetadata(cxt)\n    const {gen, data, schema, schemaValue, parentSchema, it} = cxt\n    if (schema.length === 0) throw new Error(\"enum must have non-empty array\")\n    if (schema.length !== new Set(schema).size) throw new Error(\"enum items must be unique\")\n    let valid: Code\n    const isString = _`typeof ${data} == \"string\"`\n    if (schema.length >= it.opts.loopEnum) {\n      let cond: Code\n      ;[valid, cond] = checkNullable(cxt, isString)\n      gen.if(cond, loopEnum)\n    } else {\n      /* istanbul ignore if */\n      if (!Array.isArray(schema)) throw new Error(\"ajv implementation error\")\n      valid = and(isString, or(...schema.map((value: string) => _`${data} === ${value}`)))\n      if (parentSchema.nullable) valid = or(_`${data} === null`, valid)\n    }\n    cxt.pass(valid)\n\n    function loopEnum(): void {\n      gen.forOf(\"v\", schemaValue as Code, (v) =>\n        gen.if(_`${valid} = ${data} === ${v}`, () => gen.break())\n      )\n    }\n  },\n}\n\nexport default def\n/dist/runtime/timestamp.js\u0006\u0000\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst DT_SEPARATOR = /t|\\s/i;\nconst DATE = /^(\\d\\d\\d\\d)-(\\d\\d)-(\\d\\d)$/;\nconst TIME = /^(\\d\\d):(\\d\\d):(\\d\\d)(?:\\.\\d+)?(?:z|([+-]\\d\\d)(?::?(\\d\\d))?)$/i;\nconst DAYS = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\nfunction validTimestamp(str, allowDate) {\n    // http://tools.ietf.org/html/rfc3339#section-5.6\n    const dt = str.split(DT_SEPARATOR);\n    return ((dt.length === 2 && validDate(dt[0]) && validTime(dt[1])) ||\n        (allowDate && dt.length === 1 && validDate(dt[0])));\n}\nexports.default = validTimestamp;\nfunction validDate(str) {\n    const matches = DATE.exec(str);\n    if (!matches)\n        return false;\n    const y = +matches[1];\n    const m = +matches[2];\n    const d = +matches[3];\n    return (m >= 1 &&\n        m <= 12 &&\n        d >= 1 &&\n        (d <= DAYS[m] ||\n            // leap year: https://tools.ietf.org/html/rfc3339#appendix-C\n            (m === 2 && d === 29 && (y % 100 === 0 ? y % 400 === 0 : y % 4 === 0))));\n}\nfunction validTime(str) {\n    const matches = TIME.exec(str);\n    if (!matches)\n        return false;\n    const hr = +matches[1];\n    const min = +matches[2];\n    const sec = +matches[3];\n    const tzH = +(matches[4] || 0);\n    const tzM = +(matches[5] || 0);\n    return ((hr <= 23 && min <= 59 && sec <= 59) ||\n        // leap second\n        (hr - tzH === 23 && min - tzM === 59 && sec === 60));\n}\nvalidTimestamp.code = 'require(\"ajv/dist/runtime/timestamp\").default';\n//# sourceMappingURL=timestamp.js.map&/dist/vocabularies/format/index.js.map{\"version\":3,\"file\":\"index.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../lib/vocabularies/format/index.ts\"],\"names\":[],\"mappings\":\";;AACA,qCAAoC;AAEpC,MAAM,MAAM,GAAe,CAAC,gBAAa,CAAC,CAAA;AAE1C,kBAAe,MAAM,CAAA\"}\"/dist/vocabularies/jtd/elements.js\u0003\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst util_1 = require(\"../../compile/util\");\nconst code_1 = require(\"../code\");\nconst codegen_1 = require(\"../../compile/codegen\");\nconst metadata_1 = require(\"./metadata\");\nconst nullable_1 = require(\"./nullable\");\nconst error_1 = require(\"./error\");\nconst def = {\n    keyword: \"elements\",\n    schemaType: \"object\",\n    error: (0, error_1.typeError)(\"array\"),\n    code(cxt) {\n        (0, metadata_1.checkMetadata)(cxt);\n        const { gen, data, schema, it } = cxt;\n        if ((0, util_1.alwaysValidSchema)(it, schema))\n            return;\n        const [valid] = (0, nullable_1.checkNullable)(cxt);\n        gen.if((0, codegen_1.not)(valid), () => gen.if((0, codegen_1._) `Array.isArray(${data})`, () => gen.assign(valid, (0, code_1.validateArray)(cxt)), () => cxt.error()));\n        cxt.ok(valid);\n    },\n};\nexports.default = def;\n//# sourceMappingURL=elements.js.map$/dist/compile/validate/dataType.d.ts\u0003timport type { ErrorObject, AnySchemaObject } from \"../../types\";\nimport type { SchemaObjCxt } from \"..\";\nimport { JSONType } from \"../rules\";\nimport { Code, Name } from \"../codegen\";\nexport declare enum DataType {\n    Correct = 0,\n    Wrong = 1\n}\nexport declare function getSchemaTypes(schema: AnySchemaObject): JSONType[];\nexport declare function getJSONTypes(ts: unknown | unknown[]): JSONType[];\nexport declare function coerceAndCheckDataType(it: SchemaObjCxt, types: JSONType[]): boolean;\nexport declare function checkDataType(dataType: JSONType, data: Name, strictNums?: boolean | \"log\", correct?: DataType): Code;\nexport declare function checkDataTypes(dataTypes: JSONType[], data: Name, strictNums?: boolean | \"log\", correct?: DataType): Code;\nexport type TypeError = ErrorObject<\"type\", {\n    type: string;\n}>;\nexport declare function reportTypeError(it: SchemaObjCxt): void;\n'/dist/vocabularies/validation/enum.d.tsimport type { CodeKeywordDefinition, ErrorObject } from \"../../types\";\nexport type EnumError = ErrorObject<\"enum\", {\n    allowedValues: any[];\n}, any[] | {\n    $data: string;\n}>;\ndeclare const def: CodeKeywordDefinition;\nexport default def;\n)/dist/vocabularies/discriminator/types.js\u0001<\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DiscrError = void 0;\nvar DiscrError;\n(function (DiscrError) {\n    DiscrError[\"Tag\"] = \"tag\";\n    DiscrError[\"Mapping\"] = \"mapping\";\n})(DiscrError = exports.DiscrError || (exports.DiscrError = {}));\n//# sourceMappingURL=types.js.map./dist/vocabularies/applicator/items2020.js.map\u0003{\"version\":3,\"file\":\"items2020.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../lib/vocabularies/applicator/items2020.ts\"],\"names\":[],\"mappings\":\";;AAOA,mDAA4C;AAC5C,6CAAoD;AACpD,kCAAqC;AACrC,uDAAyD;AAIzD,MAAM,KAAK,GAA2B;IACpC,OAAO,EAAE,CAAC,EAAC,MAAM,EAAE,EAAC,GAAG,EAAC,EAAC,EAAE,EAAE,CAAC,IAAA,aAAG,EAAA,2BAA2B,GAAG,QAAQ;IACvE,MAAM,EAAE,CAAC,EAAC,MAAM,EAAE,EAAC,GAAG,EAAC,EAAC,EAAE,EAAE,CAAC,IAAA,WAAC,EAAA,WAAW,GAAG,GAAG;CAChD,CAAA;AAED,MAAM,GAAG,GAA0B;IACjC,OAAO,EAAE,OAAO;IAChB,IAAI,EAAE,OAAO;IACb,UAAU,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC;IACjC,MAAM,EAAE,aAAa;IACrB,KAAK;IACL,IAAI,CAAC,GAAe;QAClB,MAAM,EAAC,MAAM,EAAE,YAAY,EAAE,EAAE,EAAC,GAAG,GAAG,CAAA;QACtC,MAAM,EAAC,WAAW,EAAC,GAAG,YAAY,CAAA;QAClC,EAAE,CAAC,KAAK,GAAG,IAAI,CAAA;QACf,IAAI,IAAA,wBAAiB,EAAC,EAAE,EAAE,MAAM,CAAC;YAAE,OAAM;QACzC,IAAI,WAAW;YAAE,IAAA,yCAAuB,EAAC,GAAG,EAAE,WAAW,CAAC,CAAA;;YACrD,GAAG,CAAC,EAAE,CAAC,IAAA,oBAAa,EAAC,GAAG,CAAC,CAAC,CAAA;IACjC,CAAC;CACF,CAAA;AAED,kBAAe,GAAG,CAAA\"}+/dist/vocabularies/dynamic/dynamicAnchor.js\u0004\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.dynamicAnchor = void 0;\nconst codegen_1 = require(\"../../compile/codegen\");\nconst names_1 = require(\"../../compile/names\");\nconst compile_1 = require(\"../../compile\");\nconst ref_1 = require(\"../core/ref\");\nconst def = {\n    keyword: \"$dynamicAnchor\",\n    schemaType: \"string\",\n    code: (cxt) => dynamicAnchor(cxt, cxt.schema),\n};\nfunction dynamicAnchor(cxt, anchor) {\n    const { gen, it } = cxt;\n    it.schemaEnv.root.dynamicAnchors[anchor] = true;\n    const v = (0, codegen_1._) `${names_1.default.dynamicAnchors}${(0, codegen_1.getProperty)(anchor)}`;\n    const validate = it.errSchemaPath === \"#\" ? it.validateName : _getValidate(cxt);\n    gen.if((0, codegen_1._) `!${v}`, () => gen.assign(v, validate));\n}\nexports.dynamicAnchor = dynamicAnchor;\nfunction _getValidate(cxt) {\n    const { schemaEnv, schema, self } = cxt.it;\n    const { root, baseId, localRefs, meta } = schemaEnv.root;\n    const { schemaId } = self.opts;\n    const sch = new compile_1.SchemaEnv({ schema, schemaId, root, baseId, localRefs, meta });\n    compile_1.compileSchema.call(self, sch);\n    return (0, ref_1.getValidate)(cxt, sch);\n}\nexports.default = def;\n//# sourceMappingURL=dynamicAnchor.js.map+/lib/vocabularies/applicator/prefixItems.ts\u0001$import type {CodeKeywordDefinition} from \"../../types\"\nimport {validateTuple} from \"./items\"\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"prefixItems\",\n  type: \"array\",\n  schemaType: [\"array\"],\n  before: \"uniqueItems\",\n  code: (cxt) => validateTuple(cxt, \"items\"),\n}\n\nexport default def\n/dist/compile/rules.js\u0003\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getRules = exports.isJSONType = void 0;\nconst _jsonTypes = [\"string\", \"number\", \"integer\", \"boolean\", \"null\", \"object\", \"array\"];\nconst jsonTypes = new Set(_jsonTypes);\nfunction isJSONType(x) {\n    return typeof x == \"string\" && jsonTypes.has(x);\n}\nexports.isJSONType = isJSONType;\nfunction getRules() {\n    const groups = {\n        number: { type: \"number\", rules: [] },\n        string: { type: \"string\", rules: [] },\n        array: { type: \"array\", rules: [] },\n        object: { type: \"object\", rules: [] },\n    };\n    return {\n        types: { ...groups, integer: true, boolean: true, null: true },\n        rules: [{ rules: [] }, groups.number, groups.string, groups.array, groups.object],\n        post: { rules: [] },\n        all: {},\n        keywords: {},\n    };\n}\nexports.getRules = getRules;\n//# sourceMappingURL=rules.js.map/dist/runtime/parseJson.js\u0014\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.parseJsonString = exports.parseJsonNumber = exports.parseJson = void 0;\nconst rxParseJson = /position\\s(\\d+)$/;\nfunction parseJson(s, pos) {\n    let endPos;\n    parseJson.message = undefined;\n    let matches;\n    if (pos)\n        s = s.slice(pos);\n    try {\n        parseJson.position = pos + s.length;\n        return JSON.parse(s);\n    }\n    catch (e) {\n        matches = rxParseJson.exec(e.message);\n        if (!matches) {\n            parseJson.message = \"unexpected end\";\n            return undefined;\n        }\n        endPos = +matches[1];\n        const c = s[endPos];\n        s = s.slice(0, endPos);\n        parseJson.position = pos + endPos;\n        try {\n            return JSON.parse(s);\n        }\n        catch (e1) {\n            parseJson.message = `unexpected token ${c}`;\n            return undefined;\n        }\n    }\n}\nexports.parseJson = parseJson;\nparseJson.message = undefined;\nparseJson.position = 0;\nparseJson.code = 'require(\"ajv/dist/runtime/parseJson\").parseJson';\nfunction parseJsonNumber(s, pos, maxDigits) {\n    let numStr = \"\";\n    let c;\n    parseJsonNumber.message = undefined;\n    if (s[pos] === \"-\") {\n        numStr += \"-\";\n        pos++;\n    }\n    if (s[pos] === \"0\") {\n        numStr += \"0\";\n        pos++;\n    }\n    else {\n        if (!parseDigits(maxDigits)) {\n            errorMessage();\n            return undefined;\n        }\n    }\n    if (maxDigits) {\n        parseJsonNumber.position = pos;\n        return +numStr;\n    }\n    if (s[pos] === \".\") {\n        numStr += \".\";\n        pos++;\n        if (!parseDigits()) {\n            errorMessage();\n            return undefined;\n        }\n    }\n    if (((c = s[pos]), c === \"e\" || c === \"E\")) {\n        numStr += \"e\";\n        pos++;\n        if (((c = s[pos]), c === \"+\" || c === \"-\")) {\n            numStr += c;\n            pos++;\n        }\n        if (!parseDigits()) {\n            errorMessage();\n            return undefined;\n        }\n    }\n    parseJsonNumber.position = pos;\n    return +numStr;\n    function parseDigits(maxLen) {\n        let digit = false;\n        while (((c = s[pos]), c >= \"0\" && c <= \"9\" && (maxLen === undefined || maxLen-- > 0))) {\n            digit = true;\n            numStr += c;\n            pos++;\n        }\n        return digit;\n    }\n    function errorMessage() {\n        parseJsonNumber.position = pos;\n        parseJsonNumber.message = pos < s.length ? `unexpected token ${s[pos]}` : \"unexpected end\";\n    }\n}\nexports.parseJsonNumber = parseJsonNumber;\nparseJsonNumber.message = undefined;\nparseJsonNumber.position = 0;\nparseJsonNumber.code = 'require(\"ajv/dist/runtime/parseJson\").parseJsonNumber';\nconst escapedChars = {\n    b: \"\\b\",\n    f: \"\\f\",\n    n: \"\\n\",\n    r: \"\\r\",\n    t: \"\\t\",\n    '\"': '\"',\n    \"/\": \"/\",\n    \"\\\\\": \"\\\\\",\n};\nconst CODE_A = \"a\".charCodeAt(0);\nconst CODE_0 = \"0\".charCodeAt(0);\nfunction parseJsonString(s, pos) {\n    let str = \"\";\n    let c;\n    parseJsonString.message = undefined;\n    // eslint-disable-next-line no-constant-condition, @typescript-eslint/no-unnecessary-condition\n    while (true) {\n        c = s[pos++];\n        if (c === '\"')\n            break;\n        if (c === \"\\\\\") {\n            c = s[pos];\n            if (c in escapedChars) {\n                str += escapedChars[c];\n                pos++;\n            }\n            else if (c === \"u\") {\n                pos++;\n                let count = 4;\n                let code = 0;\n                while (count--) {\n                    code <<= 4;\n                    c = s[pos];\n                    if (c === undefined) {\n                        errorMessage(\"unexpected end\");\n                        return undefined;\n                    }\n                    c = c.toLowerCase();\n                    if (c >= \"a\" && c <= \"f\") {\n                        code += c.charCodeAt(0) - CODE_A + 10;\n                    }\n                    else if (c >= \"0\" && c <= \"9\") {\n                        code += c.charCodeAt(0) - CODE_0;\n                    }\n                    else {\n                        errorMessage(`unexpected token ${c}`);\n                        return undefined;\n                    }\n                    pos++;\n                }\n                str += String.fromCharCode(code);\n            }\n            else {\n                errorMessage(`unexpected token ${c}`);\n                return undefined;\n            }\n            // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n        }\n        else if (c === undefined) {\n            errorMessage(\"unexpected end\");\n            return undefined;\n        }\n        else {\n            if (c.charCodeAt(0) >= 0x20) {\n                str += c;\n            }\n            else {\n                errorMessage(`unexpected token ${c}`);\n                return undefined;\n            }\n        }\n    }\n    parseJsonString.position = pos;\n    return str;\n    function errorMessage(msg) {\n        parseJsonString.position = pos;\n        parseJsonString.message = msg;\n    }\n}\nexports.parseJsonString = parseJsonString;\nparseJsonString.message = undefined;\nparseJsonString.position = 0;\nparseJsonString.code = 'require(\"ajv/dist/runtime/parseJson\").parseJsonString';\n//# sourceMappingURL=parseJson.js.map'/dist/refs/json-schema-2019-09/index.js\u0003\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst metaSchema = require(\"./schema.json\");\nconst applicator = require(\"./meta/applicator.json\");\nconst content = require(\"./meta/content.json\");\nconst core = require(\"./meta/core.json\");\nconst format = require(\"./meta/format.json\");\nconst metadata = require(\"./meta/meta-data.json\");\nconst validation = require(\"./meta/validation.json\");\nconst META_SUPPORT_DATA = [\"/properties\"];\nfunction addMetaSchema2019($data) {\n    ;\n    [\n        metaSchema,\n        applicator,\n        content,\n        core,\n        with$data(this, format),\n        metadata,\n        with$data(this, validation),\n    ].forEach((sch) => this.addMetaSchema(sch, undefined, false));\n    return this;\n    function with$data(ajv, sch) {\n        return $data ? ajv.$dataMetaSchema(sch, META_SUPPORT_DATA) : sch;\n    }\n}\nexports.default = addMetaSchema2019;\n//# sourceMappingURL=index.js.map!/lib/vocabularies/format/index.tsĔimport type {Vocabulary} from \"../../types\"\nimport formatKeyword from \"./format\"\n\nconst format: Vocabulary = [formatKeyword]\n\nexport default format\n/dist/vocabularies/jtd/index.js\u0003\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst ref_1 = require(\"./ref\");\nconst type_1 = require(\"./type\");\nconst enum_1 = require(\"./enum\");\nconst elements_1 = require(\"./elements\");\nconst properties_1 = require(\"./properties\");\nconst optionalProperties_1 = require(\"./optionalProperties\");\nconst discriminator_1 = require(\"./discriminator\");\nconst values_1 = require(\"./values\");\nconst union_1 = require(\"./union\");\nconst metadata_1 = require(\"./metadata\");\nconst jtdVocabulary = [\n    \"definitions\",\n    ref_1.default,\n    type_1.default,\n    enum_1.default,\n    elements_1.default,\n    properties_1.default,\n    optionalProperties_1.default,\n    discriminator_1.default,\n    values_1.default,\n    union_1.default,\n    metadata_1.default,\n    { keyword: \"additionalProperties\", schemaType: \"boolean\" },\n    { keyword: \"nullable\", schemaType: \"boolean\" },\n];\nexports.default = jtdVocabulary;\n//# sourceMappingURL=index.js.map/dist/standalone/index.js\u0011\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst scope_1 = require(\"../compile/codegen/scope\");\nconst code_1 = require(\"../compile/codegen/code\");\nfunction standaloneCode(ajv, refsOrFunc) {\n    if (!ajv.opts.code.source) {\n        throw new Error(\"moduleCode: ajv instance must have code.source option\");\n    }\n    const { _n } = ajv.scope.opts;\n    return typeof refsOrFunc == \"function\"\n        ? funcExportCode(refsOrFunc.source)\n        : refsOrFunc !== undefined\n            ? multiExportsCode(refsOrFunc, getValidate)\n            : multiExportsCode(ajv.schemas, (sch) => sch.meta ? undefined : ajv.compile(sch.schema));\n    function getValidate(id) {\n        const v = ajv.getSchema(id);\n        if (!v)\n            throw new Error(`moduleCode: no schema with id ${id}`);\n        return v;\n    }\n    function funcExportCode(source) {\n        const usedValues = {};\n        const n = source === null || source === void 0 ? void 0 : source.validateName;\n        const vCode = validateCode(usedValues, source);\n        if (ajv.opts.code.esm) {\n            // Always do named export as `validate` rather than the variable `n` which is `validateXX` for known export value\n            return `\"use strict\";${_n}export const validate = ${n};${_n}export default ${n};${_n}${vCode}`;\n        }\n        return `\"use strict\";${_n}module.exports = ${n};${_n}module.exports.default = ${n};${_n}${vCode}`;\n    }\n    function multiExportsCode(schemas, getValidateFunc) {\n        var _a;\n        const usedValues = {};\n        let code = (0, code_1._) `\"use strict\";`;\n        for (const name in schemas) {\n            const v = getValidateFunc(schemas[name]);\n            if (v) {\n                const vCode = validateCode(usedValues, v.source);\n                const exportSyntax = ajv.opts.code.esm\n                    ? (0, code_1._) `export const ${(0, code_1.getEsmExportName)(name)}`\n                    : (0, code_1._) `exports${(0, code_1.getProperty)(name)}`;\n                code = (0, code_1._) `${code}${_n}${exportSyntax} = ${(_a = v.source) === null || _a === void 0 ? void 0 : _a.validateName};${_n}${vCode}`;\n            }\n        }\n        return `${code}`;\n    }\n    function validateCode(usedValues, s) {\n        if (!s)\n            throw new Error('moduleCode: function does not have \"source\" property');\n        if (usedState(s.validateName) === scope_1.UsedValueState.Completed)\n            return code_1.nil;\n        setUsedState(s.validateName, scope_1.UsedValueState.Started);\n        const scopeCode = ajv.scope.scopeCode(s.scopeValues, usedValues, refValidateCode);\n        const code = new code_1._Code(`${scopeCode}${_n}${s.validateCode}`);\n        return s.evaluated ? (0, code_1._) `${code}${s.validateName}.evaluated = ${s.evaluated};${_n}` : code;\n        function refValidateCode(n) {\n            var _a;\n            const vRef = (_a = n.value) === null || _a === void 0 ? void 0 : _a.ref;\n            if (n.prefix === \"validate\" && typeof vRef == \"function\") {\n                const v = vRef;\n                return validateCode(usedValues, v.source);\n            }\n            else if ((n.prefix === \"root\" || n.prefix === \"wrapper\") && typeof vRef == \"object\") {\n                const { validate, validateName } = vRef;\n                if (!validateName)\n                    throw new Error(\"ajv internal error\");\n                const def = ajv.opts.code.es5 ? scope_1.varKinds.var : scope_1.varKinds.const;\n                const wrapper = (0, code_1._) `${def} ${n} = {validate: ${validateName}};`;\n                if (usedState(validateName) === scope_1.UsedValueState.Started)\n                    return wrapper;\n                const vCode = validateCode(usedValues, validate === null || validate === void 0 ? void 0 : validate.source);\n                return (0, code_1._) `${wrapper}${_n}${vCode}`;\n            }\n            return undefined;\n        }\n        function usedState(name) {\n            var _a;\n            return (_a = usedValues[name.prefix]) === null || _a === void 0 ? void 0 : _a.get(name);\n        }\n        function setUsedState(name, state) {\n            const { prefix } = name;\n            const names = (usedValues[prefix] = usedValues[prefix] || new Map());\n            names.set(name, state);\n        }\n    }\n}\nmodule.exports = exports = standaloneCode;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = standaloneCode;\n//# sourceMappingURL=index.js.map/dist/ajv.js.map\u0005{\"version\":3,\"file\":\"ajv.js\",\"sourceRoot\":\"\",\"sources\":[\"../lib/ajv.ts\"],\"names\":[],\"mappings\":\";;;AACA,iCAA4B;AAC5B,kDAAsD;AACtD,gEAAwD;AACxD,qEAAoE;AAEpE,MAAM,iBAAiB,GAAG,CAAC,aAAa,CAAC,CAAA;AAEzC,MAAM,cAAc,GAAG,wCAAwC,CAAA;AAE/D,MAAM,GAAI,SAAQ,cAAO;IACvB,gBAAgB;QACd,KAAK,CAAC,gBAAgB,EAAE,CAAA;QACxB,gBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAA;QACxD,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa;YAAE,IAAI,CAAC,UAAU,CAAC,uBAAa,CAAC,CAAA;IAC7D,CAAC;IAED,qBAAqB;QACnB,KAAK,CAAC,qBAAqB,EAAE,CAAA;QAC7B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE,OAAM;QAC3B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK;YAChC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,gBAAgB,EAAE,iBAAiB,CAAC;YAC3D,CAAC,CAAC,gBAAgB,CAAA;QACpB,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,cAAc,EAAE,KAAK,CAAC,CAAA;QACrD,IAAI,CAAC,IAAI,CAAC,+BAA+B,CAAC,GAAG,cAAc,CAAA;IAC7D,CAAC;IAED,WAAW;QACT,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW;YAC3B,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAA;IACzF,CAAC;CACF;AAED,MAAM,CAAC,OAAO,GAAG,OAAO,GAAG,GAAG,CAAA;AAC9B,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,YAAY,EAAE,EAAC,KAAK,EAAE,IAAI,EAAC,CAAC,CAAA;AAE3D,kBAAe,GAAG,CAAA;AA0BlB,+CAA6C;AAArC,sGAAA,UAAU,OAAA;AAIlB,6CAA6F;AAArF,4FAAA,CAAC,OAAA;AAAE,8FAAA,GAAG,OAAA;AAAE,oGAAA,SAAS,OAAA;AAAE,8FAAA,GAAG,OAAA;AAAE,+FAAA,IAAI,OAAA;AAAQ,kGAAA,OAAO,OAAA;AACnD,+DAAqE;AAA7D,mHAAA,OAAO,OAAmB;AAClC,iDAA8D;AAAtD,4GAAA,OAAO,OAAmB\"}./dist/vocabularies/jtd/optionalProperties.d.tsximport type { CodeKeywordDefinition } from \"../../types\";\ndeclare const def: CodeKeywordDefinition;\nexport default def;\n/lib/compile/codegen/index.tsYimport type {ScopeValueSets, NameValue, ValueScope, ValueScopeName} from \"./scope\"\nimport {_, nil, _Code, Code, Name, UsedNames, CodeItem, addCodeArg, _CodeOrName} from \"./code\"\nimport {Scope, varKinds} from \"./scope\"\n\nexport {_, str, strConcat, nil, getProperty, stringify, regexpCode, Name, Code} from \"./code\"\nexport {Scope, ScopeStore, ValueScope, ValueScopeName, ScopeValueSets, varKinds} from \"./scope\"\n\n// type for expressions that can be safely inserted in code without quotes\nexport type SafeExpr = Code | number | boolean | null\n\n// type that is either Code of function that adds code to CodeGen instance using its methods\nexport type Block = Code | (() => void)\n\nexport const operators = {\n  GT: new _Code(\">\"),\n  GTE: new _Code(\">=\"),\n  LT: new _Code(\"<\"),\n  LTE: new _Code(\"<=\"),\n  EQ: new _Code(\"===\"),\n  NEQ: new _Code(\"!==\"),\n  NOT: new _Code(\"!\"),\n  OR: new _Code(\"||\"),\n  AND: new _Code(\"&&\"),\n  ADD: new _Code(\"+\"),\n}\n\nabstract class Node {\n  abstract readonly names: UsedNames\n\n  optimizeNodes(): this | ChildNode | ChildNode[] | undefined {\n    return this\n  }\n\n  optimizeNames(_names: UsedNames, _constants: Constants): this | undefined {\n    return this\n  }\n\n  // get count(): number {\n  //   return 1\n  // }\n}\n\nclass Def extends Node {\n  constructor(private readonly varKind: Name, private readonly name: Name, private rhs?: SafeExpr) {\n    super()\n  }\n\n  render({es5, _n}: CGOptions): string {\n    const varKind = es5 ? varKinds.var : this.varKind\n    const rhs = this.rhs === undefined ? \"\" : ` = ${this.rhs}`\n    return `${varKind} ${this.name}${rhs};` + _n\n  }\n\n  optimizeNames(names: UsedNames, constants: Constants): this | undefined {\n    if (!names[this.name.str]) return\n    if (this.rhs) this.rhs = optimizeExpr(this.rhs, names, constants)\n    return this\n  }\n\n  get names(): UsedNames {\n    return this.rhs instanceof _CodeOrName ? this.rhs.names : {}\n  }\n}\n\nclass Assign extends Node {\n  constructor(readonly lhs: Code, public rhs: SafeExpr, private readonly sideEffects?: boolean) {\n    super()\n  }\n\n  render({_n}: CGOptions): string {\n    return `${this.lhs} = ${this.rhs};` + _n\n  }\n\n  optimizeNames(names: UsedNames, constants: Constants): this | undefined {\n    if (this.lhs instanceof Name && !names[this.lhs.str] && !this.sideEffects) return\n    this.rhs = optimizeExpr(this.rhs, names, constants)\n    return this\n  }\n\n  get names(): UsedNames {\n    const names = this.lhs instanceof Name ? {} : {...this.lhs.names}\n    return addExprNames(names, this.rhs)\n  }\n}\n\nclass AssignOp extends Assign {\n  constructor(lhs: Code, private readonly op: Code, rhs: SafeExpr, sideEffects?: boolean) {\n    super(lhs, rhs, sideEffects)\n  }\n\n  render({_n}: CGOptions): string {\n    return `${this.lhs} ${this.op}= ${this.rhs};` + _n\n  }\n}\n\nclass Label extends Node {\n  readonly names: UsedNames = {}\n  constructor(readonly label: Name) {\n    super()\n  }\n\n  render({_n}: CGOptions): string {\n    return `${this.label}:` + _n\n  }\n}\n\nclass Break extends Node {\n  readonly names: UsedNames = {}\n  constructor(readonly label?: Code) {\n    super()\n  }\n\n  render({_n}: CGOptions): string {\n    const label = this.label ? ` ${this.label}` : \"\"\n    return `break${label};` + _n\n  }\n}\n\nclass Throw extends Node {\n  constructor(readonly error: Code) {\n    super()\n  }\n\n  render({_n}: CGOptions): string {\n    return `throw ${this.error};` + _n\n  }\n\n  get names(): UsedNames {\n    return this.error.names\n  }\n}\n\nclass AnyCode extends Node {\n  constructor(private code: SafeExpr) {\n    super()\n  }\n\n  render({_n}: CGOptions): string {\n    return `${this.code};` + _n\n  }\n\n  optimizeNodes(): this | undefined {\n    return `${this.code}` ? this : undefined\n  }\n\n  optimizeNames(names: UsedNames, constants: Constants): this {\n    this.code = optimizeExpr(this.code, names, constants)\n    return this\n  }\n\n  get names(): UsedNames {\n    return this.code instanceof _CodeOrName ? this.code.names : {}\n  }\n}\n\nabstract class ParentNode extends Node {\n  constructor(readonly nodes: ChildNode[] = []) {\n    super()\n  }\n\n  render(opts: CGOptions): string {\n    return this.nodes.reduce((code, n) => code + n.render(opts), \"\")\n  }\n\n  optimizeNodes(): this | ChildNode | ChildNode[] | undefined {\n    const {nodes} = this\n    let i = nodes.length\n    while (i--) {\n      const n = nodes[i].optimizeNodes()\n      if (Array.isArray(n)) nodes.splice(i, 1, ...n)\n      else if (n) nodes[i] = n\n      else nodes.splice(i, 1)\n    }\n    return nodes.length > 0 ? this : undefined\n  }\n\n  optimizeNames(names: UsedNames, constants: Constants): this | undefined {\n    const {nodes} = this\n    let i = nodes.length\n    while (i--) {\n      // iterating backwards improves 1-pass optimization\n      const n = nodes[i]\n      if (n.optimizeNames(names, constants)) continue\n      subtractNames(names, n.names)\n      nodes.splice(i, 1)\n    }\n    return nodes.length > 0 ? this : undefined\n  }\n\n  get names(): UsedNames {\n    return this.nodes.reduce((names: UsedNames, n) => addNames(names, n.names), {})\n  }\n\n  // get count(): number {\n  //   return this.nodes.reduce((c, n) => c + n.count, 1)\n  // }\n}\n\nabstract class BlockNode extends ParentNode {\n  render(opts: CGOptions): string {\n    return \"{\" + opts._n + super.render(opts) + \"}\" + opts._n\n  }\n}\n\nclass Root extends ParentNode {}\n\nclass Else extends BlockNode {\n  static readonly kind = \"else\"\n}\n\nclass If extends BlockNode {\n  static readonly kind = \"if\"\n  else?: If | Else\n  constructor(private condition: Code | boolean, nodes?: ChildNode[]) {\n    super(nodes)\n  }\n\n  render(opts: CGOptions): string {\n    let code = `if(${this.condition})` + super.render(opts)\n    if (this.else) code += \"else \" + this.else.render(opts)\n    return code\n  }\n\n  optimizeNodes(): If | ChildNode[] | undefined {\n    super.optimizeNodes()\n    const cond = this.condition\n    if (cond === true) return this.nodes // else is ignored here\n    let e = this.else\n    if (e) {\n      const ns = e.optimizeNodes()\n      e = this.else = Array.isArray(ns) ? new Else(ns) : (ns as Else | undefined)\n    }\n    if (e) {\n      if (cond === false) return e instanceof If ? e : e.nodes\n      if (this.nodes.length) return this\n      return new If(not(cond), e instanceof If ? [e] : e.nodes)\n    }\n    if (cond === false || !this.nodes.length) return undefined\n    return this\n  }\n\n  optimizeNames(names: UsedNames, constants: Constants): this | undefined {\n    this.else = this.else?.optimizeNames(names, constants)\n    if (!(super.optimizeNames(names, constants) || this.else)) return\n    this.condition = optimizeExpr(this.condition, names, constants)\n    return this\n  }\n\n  get names(): UsedNames {\n    const names = super.names\n    addExprNames(names, this.condition)\n    if (this.else) addNames(names, this.else.names)\n    return names\n  }\n\n  // get count(): number {\n  //   return super.count + (this.else?.count || 0)\n  // }\n}\n\nabstract class For extends BlockNode {\n  static readonly kind = \"for\"\n}\n\nclass ForLoop extends For {\n  constructor(private iteration: Code) {\n    super()\n  }\n\n  render(opts: CGOptions): string {\n    return `for(${this.iteration})` + super.render(opts)\n  }\n\n  optimizeNames(names: UsedNames, constants: Constants): this | undefined {\n    if (!super.optimizeNames(names, constants)) return\n    this.iteration = optimizeExpr(this.iteration, names, constants)\n    return this\n  }\n\n  get names(): UsedNames {\n    return addNames(super.names, this.iteration.names)\n  }\n}\n\nclass ForRange extends For {\n  constructor(\n    private readonly varKind: Name,\n    private readonly name: Name,\n    private readonly from: SafeExpr,\n    private readonly to: SafeExpr\n  ) {\n    super()\n  }\n\n  render(opts: CGOptions): string {\n    const varKind = opts.es5 ? varKinds.var : this.varKind\n    const {name, from, to} = this\n    return `for(${varKind} ${name}=${from}; ${name}<${to}; ${name}++)` + super.render(opts)\n  }\n\n  get names(): UsedNames {\n    const names = addExprNames(super.names, this.from)\n    return addExprNames(names, this.to)\n  }\n}\n\nclass ForIter extends For {\n  constructor(\n    private readonly loop: \"of\" | \"in\",\n    private readonly varKind: Name,\n    private readonly name: Name,\n    private iterable: Code\n  ) {\n    super()\n  }\n\n  render(opts: CGOptions): string {\n    return `for(${this.varKind} ${this.name} ${this.loop} ${this.iterable})` + super.render(opts)\n  }\n\n  optimizeNames(names: UsedNames, constants: Constants): this | undefined {\n    if (!super.optimizeNames(names, constants)) return\n    this.iterable = optimizeExpr(this.iterable, names, constants)\n    return this\n  }\n\n  get names(): UsedNames {\n    return addNames(super.names, this.iterable.names)\n  }\n}\n\nclass Func extends BlockNode {\n  static readonly kind = \"func\"\n  constructor(public name: Name, public args: Code, public async?: boolean) {\n    super()\n  }\n\n  render(opts: CGOptions): string {\n    const _async = this.async ? \"async \" : \"\"\n    return `${_async}function ${this.name}(${this.args})` + super.render(opts)\n  }\n}\n\nclass Return extends ParentNode {\n  static readonly kind = \"return\"\n\n  render(opts: CGOptions): string {\n    return \"return \" + super.render(opts)\n  }\n}\n\nclass Try extends BlockNode {\n  catch?: Catch\n  finally?: Finally\n\n  render(opts: CGOptions): string {\n    let code = \"try\" + super.render(opts)\n    if (this.catch) code += this.catch.render(opts)\n    if (this.finally) code += this.finally.render(opts)\n    return code\n  }\n\n  optimizeNodes(): this {\n    super.optimizeNodes()\n    this.catch?.optimizeNodes() as Catch | undefined\n    this.finally?.optimizeNodes() as Finally | undefined\n    return this\n  }\n\n  optimizeNames(names: UsedNames, constants: Constants): this {\n    super.optimizeNames(names, constants)\n    this.catch?.optimizeNames(names, constants)\n    this.finally?.optimizeNames(names, constants)\n    return this\n  }\n\n  get names(): UsedNames {\n    const names = super.names\n    if (this.catch) addNames(names, this.catch.names)\n    if (this.finally) addNames(names, this.finally.names)\n    return names\n  }\n\n  // get count(): number {\n  //   return super.count + (this.catch?.count || 0) + (this.finally?.count || 0)\n  // }\n}\n\nclass Catch extends BlockNode {\n  static readonly kind = \"catch\"\n  constructor(readonly error: Name) {\n    super()\n  }\n\n  render(opts: CGOptions): string {\n    return `catch(${this.error})` + super.render(opts)\n  }\n}\n\nclass Finally extends BlockNode {\n  static readonly kind = \"finally\"\n  render(opts: CGOptions): string {\n    return \"finally\" + super.render(opts)\n  }\n}\n\ntype StartBlockNode = If | For | Func | Return | Try\n\ntype LeafNode = Def | Assign | Label | Break | Throw | AnyCode\n\ntype ChildNode = StartBlockNode | LeafNode\n\ntype EndBlockNodeType =\n  | typeof If\n  | typeof Else\n  | typeof For\n  | typeof Func\n  | typeof Return\n  | typeof Catch\n  | typeof Finally\n\ntype Constants = Record<string, SafeExpr | undefined>\n\nexport interface CodeGenOptions {\n  es5?: boolean\n  lines?: boolean\n  ownProperties?: boolean\n}\n\ninterface CGOptions extends CodeGenOptions {\n  _n: \"\\n\" | \"\"\n}\n\nexport class CodeGen {\n  readonly _scope: Scope\n  readonly _extScope: ValueScope\n  readonly _values: ScopeValueSets = {}\n  private readonly _nodes: ParentNode[]\n  private readonly _blockStarts: number[] = []\n  private readonly _constants: Constants = {}\n  private readonly opts: CGOptions\n\n  constructor(extScope: ValueScope, opts: CodeGenOptions = {}) {\n    this.opts = {...opts, _n: opts.lines ? \"\\n\" : \"\"}\n    this._extScope = extScope\n    this._scope = new Scope({parent: extScope})\n    this._nodes = [new Root()]\n  }\n\n  toString(): string {\n    return this._root.render(this.opts)\n  }\n\n  // returns unique name in the internal scope\n  name(prefix: string): Name {\n    return this._scope.name(prefix)\n  }\n\n  // reserves unique name in the external scope\n  scopeName(prefix: string): ValueScopeName {\n    return this._extScope.name(prefix)\n  }\n\n  // reserves unique name in the external scope and assigns value to it\n  scopeValue(prefixOrName: ValueScopeName | string, value: NameValue): Name {\n    const name = this._extScope.value(prefixOrName, value)\n    const vs = this._values[name.prefix] || (this._values[name.prefix] = new Set())\n    vs.add(name)\n    return name\n  }\n\n  getScopeValue(prefix: string, keyOrRef: unknown): ValueScopeName | undefined {\n    return this._extScope.getValue(prefix, keyOrRef)\n  }\n\n  // return code that assigns values in the external scope to the names that are used internally\n  // (same names that were returned by gen.scopeName or gen.scopeValue)\n  scopeRefs(scopeName: Name): Code {\n    return this._extScope.scopeRefs(scopeName, this._values)\n  }\n\n  scopeCode(): Code {\n    return this._extScope.scopeCode(this._values)\n  }\n\n  private _def(\n    varKind: Name,\n    nameOrPrefix: Name | string,\n    rhs?: SafeExpr,\n    constant?: boolean\n  ): Name {\n    const name = this._scope.toName(nameOrPrefix)\n    if (rhs !== undefined && constant) this._constants[name.str] = rhs\n    this._leafNode(new Def(varKind, name, rhs))\n    return name\n  }\n\n  // `const` declaration (`var` in es5 mode)\n  const(nameOrPrefix: Name | string, rhs: SafeExpr, _constant?: boolean): Name {\n    return this._def(varKinds.const, nameOrPrefix, rhs, _constant)\n  }\n\n  // `let` declaration with optional assignment (`var` in es5 mode)\n  let(nameOrPrefix: Name | string, rhs?: SafeExpr, _constant?: boolean): Name {\n    return this._def(varKinds.let, nameOrPrefix, rhs, _constant)\n  }\n\n  // `var` declaration with optional assignment\n  var(nameOrPrefix: Name | string, rhs?: SafeExpr, _constant?: boolean): Name {\n    return this._def(varKinds.var, nameOrPrefix, rhs, _constant)\n  }\n\n  // assignment code\n  assign(lhs: Code, rhs: SafeExpr, sideEffects?: boolean): CodeGen {\n    return this._leafNode(new Assign(lhs, rhs, sideEffects))\n  }\n\n  // `+=` code\n  add(lhs: Code, rhs: SafeExpr): CodeGen {\n    return this._leafNode(new AssignOp(lhs, operators.ADD, rhs))\n  }\n\n  // appends passed SafeExpr to code or executes Block\n  code(c: Block | SafeExpr): CodeGen {\n    if (typeof c == \"function\") c()\n    else if (c !== nil) this._leafNode(new AnyCode(c))\n    return this\n  }\n\n  // returns code for object literal for the passed argument list of key-value pairs\n  object(...keyValues: [Name | string, SafeExpr | string][]): _Code {\n    const code: CodeItem[] = [\"{\"]\n    for (const [key, value] of keyValues) {\n      if (code.length > 1) code.push(\",\")\n      code.push(key)\n      if (key !== value || this.opts.es5) {\n        code.push(\":\")\n        addCodeArg(code, value)\n      }\n    }\n    code.push(\"}\")\n    return new _Code(code)\n  }\n\n  // `if` clause (or statement if `thenBody` and, optionally, `elseBody` are passed)\n  if(condition: Code | boolean, thenBody?: Block, elseBody?: Block): CodeGen {\n    this._blockNode(new If(condition))\n\n    if (thenBody && elseBody) {\n      this.code(thenBody).else().code(elseBody).endIf()\n    } else if (thenBody) {\n      this.code(thenBody).endIf()\n    } else if (elseBody) {\n      throw new Error('CodeGen: \"else\" body without \"then\" body')\n    }\n    return this\n  }\n\n  // `else if` clause - invalid without `if` or after `else` clauses\n  elseIf(condition: Code | boolean): CodeGen {\n    return this._elseNode(new If(condition))\n  }\n\n  // `else` clause - only valid after `if` or `else if` clauses\n  else(): CodeGen {\n    return this._elseNode(new Else())\n  }\n\n  // end `if` statement (needed if gen.if was used only with condition)\n  endIf(): CodeGen {\n    return this._endBlockNode(If, Else)\n  }\n\n  private _for(node: For, forBody?: Block): CodeGen {\n    this._blockNode(node)\n    if (forBody) this.code(forBody).endFor()\n    return this\n  }\n\n  // a generic `for` clause (or statement if `forBody` is passed)\n  for(iteration: Code, forBody?: Block): CodeGen {\n    return this._for(new ForLoop(iteration), forBody)\n  }\n\n  // `for` statement for a range of values\n  forRange(\n    nameOrPrefix: Name | string,\n    from: SafeExpr,\n    to: SafeExpr,\n    forBody: (index: Name) => void,\n    varKind: Code = this.opts.es5 ? varKinds.var : varKinds.let\n  ): CodeGen {\n    const name = this._scope.toName(nameOrPrefix)\n    return this._for(new ForRange(varKind, name, from, to), () => forBody(name))\n  }\n\n  // `for-of` statement (in es5 mode replace with a normal for loop)\n  forOf(\n    nameOrPrefix: Name | string,\n    iterable: Code,\n    forBody: (item: Name) => void,\n    varKind: Code = varKinds.const\n  ): CodeGen {\n    const name = this._scope.toName(nameOrPrefix)\n    if (this.opts.es5) {\n      const arr = iterable instanceof Name ? iterable : this.var(\"_arr\", iterable)\n      return this.forRange(\"_i\", 0, _`${arr}.length`, (i) => {\n        this.var(name, _`${arr}[${i}]`)\n        forBody(name)\n      })\n    }\n    return this._for(new ForIter(\"of\", varKind, name, iterable), () => forBody(name))\n  }\n\n  // `for-in` statement.\n  // With option `ownProperties` replaced with a `for-of` loop for object keys\n  forIn(\n    nameOrPrefix: Name | string,\n    obj: Code,\n    forBody: (item: Name) => void,\n    varKind: Code = this.opts.es5 ? varKinds.var : varKinds.const\n  ): CodeGen {\n    if (this.opts.ownProperties) {\n      return this.forOf(nameOrPrefix, _`Object.keys(${obj})`, forBody)\n    }\n    const name = this._scope.toName(nameOrPrefix)\n    return this._for(new ForIter(\"in\", varKind, name, obj), () => forBody(name))\n  }\n\n  // end `for` loop\n  endFor(): CodeGen {\n    return this._endBlockNode(For)\n  }\n\n  // `label` statement\n  label(label: Name): CodeGen {\n    return this._leafNode(new Label(label))\n  }\n\n  // `break` statement\n  break(label?: Code): CodeGen {\n    return this._leafNode(new Break(label))\n  }\n\n  // `return` statement\n  return(value: Block | SafeExpr): CodeGen {\n    const node = new Return()\n    this._blockNode(node)\n    this.code(value)\n    if (node.nodes.length !== 1) throw new Error('CodeGen: \"return\" should have one node')\n    return this._endBlockNode(Return)\n  }\n\n  // `try` statement\n  try(tryBody: Block, catchCode?: (e: Name) => void, finallyCode?: Block): CodeGen {\n    if (!catchCode && !finallyCode) throw new Error('CodeGen: \"try\" without \"catch\" and \"finally\"')\n    const node = new Try()\n    this._blockNode(node)\n    this.code(tryBody)\n    if (catchCode) {\n      const error = this.name(\"e\")\n      this._currNode = node.catch = new Catch(error)\n      catchCode(error)\n    }\n    if (finallyCode) {\n      this._currNode = node.finally = new Finally()\n      this.code(finallyCode)\n    }\n    return this._endBlockNode(Catch, Finally)\n  }\n\n  // `throw` statement\n  throw(error: Code): CodeGen {\n    return this._leafNode(new Throw(error))\n  }\n\n  // start self-balancing block\n  block(body?: Block, nodeCount?: number): CodeGen {\n    this._blockStarts.push(this._nodes.length)\n    if (body) this.code(body).endBlock(nodeCount)\n    return this\n  }\n\n  // end the current self-balancing block\n  endBlock(nodeCount?: number): CodeGen {\n    const len = this._blockStarts.pop()\n    if (len === undefined) throw new Error(\"CodeGen: not in self-balancing block\")\n    const toClose = this._nodes.length - len\n    if (toClose < 0 || (nodeCount !== undefined && toClose !== nodeCount)) {\n      throw new Error(`CodeGen: wrong number of nodes: ${toClose} vs ${nodeCount} expected`)\n    }\n    this._nodes.length = len\n    return this\n  }\n\n  // `function` heading (or definition if funcBody is passed)\n  func(name: Name, args: Code = nil, async?: boolean, funcBody?: Block): CodeGen {\n    this._blockNode(new Func(name, args, async))\n    if (funcBody) this.code(funcBody).endFunc()\n    return this\n  }\n\n  // end function definition\n  endFunc(): CodeGen {\n    return this._endBlockNode(Func)\n  }\n\n  optimize(n = 1): void {\n    while (n-- > 0) {\n      this._root.optimizeNodes()\n      this._root.optimizeNames(this._root.names, this._constants)\n    }\n  }\n\n  private _leafNode(node: LeafNode): CodeGen {\n    this._currNode.nodes.push(node)\n    return this\n  }\n\n  private _blockNode(node: StartBlockNode): void {\n    this._currNode.nodes.push(node)\n    this._nodes.push(node)\n  }\n\n  private _endBlockNode(N1: EndBlockNodeType, N2?: EndBlockNodeType): CodeGen {\n    const n = this._currNode\n    if (n instanceof N1 || (N2 && n instanceof N2)) {\n      this._nodes.pop()\n      return this\n    }\n    throw new Error(`CodeGen: not in block \"${N2 ? `${N1.kind}/${N2.kind}` : N1.kind}\"`)\n  }\n\n  private _elseNode(node: If | Else): CodeGen {\n    const n = this._currNode\n    if (!(n instanceof If)) {\n      throw new Error('CodeGen: \"else\" without \"if\"')\n    }\n    this._currNode = n.else = node\n    return this\n  }\n\n  private get _root(): Root {\n    return this._nodes[0] as Root\n  }\n\n  private get _currNode(): ParentNode {\n    const ns = this._nodes\n    return ns[ns.length - 1]\n  }\n\n  private set _currNode(node: ParentNode) {\n    const ns = this._nodes\n    ns[ns.length - 1] = node\n  }\n\n  // get nodeCount(): number {\n  //   return this._root.count\n  // }\n}\n\nfunction addNames(names: UsedNames, from: UsedNames): UsedNames {\n  for (const n in from) names[n] = (names[n] || 0) + (from[n] || 0)\n  return names\n}\n\nfunction addExprNames(names: UsedNames, from: SafeExpr): UsedNames {\n  return from instanceof _CodeOrName ? addNames(names, from.names) : names\n}\n\nfunction optimizeExpr<T extends SafeExpr | Code>(expr: T, names: UsedNames, constants: Constants): T\nfunction optimizeExpr(expr: SafeExpr, names: UsedNames, constants: Constants): SafeExpr {\n  if (expr instanceof Name) return replaceName(expr)\n  if (!canOptimize(expr)) return expr\n  return new _Code(\n    expr._items.reduce((items: CodeItem[], c: SafeExpr | string) => {\n      if (c instanceof Name) c = replaceName(c)\n      if (c instanceof _Code) items.push(...c._items)\n      else items.push(c)\n      return items\n    }, [])\n  )\n\n  function replaceName(n: Name): SafeExpr {\n    const c = constants[n.str]\n    if (c === undefined || names[n.str] !== 1) return n\n    delete names[n.str]\n    return c\n  }\n\n  function canOptimize(e: SafeExpr): e is _Code {\n    return (\n      e instanceof _Code &&\n      e._items.some(\n        (c) => c instanceof Name && names[c.str] === 1 && constants[c.str] !== undefined\n      )\n    )\n  }\n}\n\nfunction subtractNames(names: UsedNames, from: UsedNames): void {\n  for (const n in from) names[n] = (names[n] || 0) - (from[n] || 0)\n}\n\nexport function not<T extends Code | SafeExpr>(x: T): T\nexport function not(x: Code | SafeExpr): Code | SafeExpr {\n  return typeof x == \"boolean\" || typeof x == \"number\" || x === null ? !x : _`!${par(x)}`\n}\n\nconst andCode = mappend(operators.AND)\n\n// boolean AND (&&) expression with the passed arguments\nexport function and(...args: Code[]): Code {\n  return args.reduce(andCode)\n}\n\nconst orCode = mappend(operators.OR)\n\n// boolean OR (||) expression with the passed arguments\nexport function or(...args: Code[]): Code {\n  return args.reduce(orCode)\n}\n\ntype MAppend = (x: Code, y: Code) => Code\n\nfunction mappend(op: Code): MAppend {\n  return (x, y) => (x === nil ? y : y === nil ? x : _`${par(x)} ${op} ${par(y)}`)\n}\n\nfunction par(x: Code): Code {\n  return x instanceof Name ? x : _`(${x})`\n}\n!/dist/compile/validate/keyword.js\u0016?\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.validateKeywordUsage = exports.validSchemaType = exports.funcKeywordCode = exports.macroKeywordCode = void 0;\nconst codegen_1 = require(\"../codegen\");\nconst names_1 = require(\"../names\");\nconst code_1 = require(\"../../vocabularies/code\");\nconst errors_1 = require(\"../errors\");\nfunction macroKeywordCode(cxt, def) {\n    const { gen, keyword, schema, parentSchema, it } = cxt;\n    const macroSchema = def.macro.call(it.self, schema, parentSchema, it);\n    const schemaRef = useKeyword(gen, keyword, macroSchema);\n    if (it.opts.validateSchema !== false)\n        it.self.validateSchema(macroSchema, true);\n    const valid = gen.name(\"valid\");\n    cxt.subschema({\n        schema: macroSchema,\n        schemaPath: codegen_1.nil,\n        errSchemaPath: `${it.errSchemaPath}/${keyword}`,\n        topSchemaRef: schemaRef,\n        compositeRule: true,\n    }, valid);\n    cxt.pass(valid, () => cxt.error(true));\n}\nexports.macroKeywordCode = macroKeywordCode;\nfunction funcKeywordCode(cxt, def) {\n    var _a;\n    const { gen, keyword, schema, parentSchema, $data, it } = cxt;\n    checkAsyncKeyword(it, def);\n    const validate = !$data && def.compile ? def.compile.call(it.self, schema, parentSchema, it) : def.validate;\n    const validateRef = useKeyword(gen, keyword, validate);\n    const valid = gen.let(\"valid\");\n    cxt.block$data(valid, validateKeyword);\n    cxt.ok((_a = def.valid) !== null && _a !== void 0 ? _a : valid);\n    function validateKeyword() {\n        if (def.errors === false) {\n            assignValid();\n            if (def.modifying)\n                modifyData(cxt);\n            reportErrs(() => cxt.error());\n        }\n        else {\n            const ruleErrs = def.async ? validateAsync() : validateSync();\n            if (def.modifying)\n                modifyData(cxt);\n            reportErrs(() => addErrs(cxt, ruleErrs));\n        }\n    }\n    function validateAsync() {\n        const ruleErrs = gen.let(\"ruleErrs\", null);\n        gen.try(() => assignValid((0, codegen_1._) `await `), (e) => gen.assign(valid, false).if((0, codegen_1._) `${e} instanceof ${it.ValidationError}`, () => gen.assign(ruleErrs, (0, codegen_1._) `${e}.errors`), () => gen.throw(e)));\n        return ruleErrs;\n    }\n    function validateSync() {\n        const validateErrs = (0, codegen_1._) `${validateRef}.errors`;\n        gen.assign(validateErrs, null);\n        assignValid(codegen_1.nil);\n        return validateErrs;\n    }\n    function assignValid(_await = def.async ? (0, codegen_1._) `await ` : codegen_1.nil) {\n        const passCxt = it.opts.passContext ? names_1.default.this : names_1.default.self;\n        const passSchema = !((\"compile\" in def && !$data) || def.schema === false);\n        gen.assign(valid, (0, codegen_1._) `${_await}${(0, code_1.callValidateCode)(cxt, validateRef, passCxt, passSchema)}`, def.modifying);\n    }\n    function reportErrs(errors) {\n        var _a;\n        gen.if((0, codegen_1.not)((_a = def.valid) !== null && _a !== void 0 ? _a : valid), errors);\n    }\n}\nexports.funcKeywordCode = funcKeywordCode;\nfunction modifyData(cxt) {\n    const { gen, data, it } = cxt;\n    gen.if(it.parentData, () => gen.assign(data, (0, codegen_1._) `${it.parentData}[${it.parentDataProperty}]`));\n}\nfunction addErrs(cxt, errs) {\n    const { gen } = cxt;\n    gen.if((0, codegen_1._) `Array.isArray(${errs})`, () => {\n        gen\n            .assign(names_1.default.vErrors, (0, codegen_1._) `${names_1.default.vErrors} === null ? ${errs} : ${names_1.default.vErrors}.concat(${errs})`)\n            .assign(names_1.default.errors, (0, codegen_1._) `${names_1.default.vErrors}.length`);\n        (0, errors_1.extendErrors)(cxt);\n    }, () => cxt.error());\n}\nfunction checkAsyncKeyword({ schemaEnv }, def) {\n    if (def.async && !schemaEnv.$async)\n        throw new Error(\"async keyword in sync schema\");\n}\nfunction useKeyword(gen, keyword, result) {\n    if (result === undefined)\n        throw new Error(`keyword \"${keyword}\" failed to compile`);\n    return gen.scopeValue(\"keyword\", typeof result == \"function\" ? { ref: result } : { ref: result, code: (0, codegen_1.stringify)(result) });\n}\nfunction validSchemaType(schema, schemaType, allowUndefined = false) {\n    // TODO add tests\n    return (!schemaType.length ||\n        schemaType.some((st) => st === \"array\"\n            ? Array.isArray(schema)\n            : st === \"object\"\n                ? schema && typeof schema == \"object\" && !Array.isArray(schema)\n                : typeof schema == st || (allowUndefined && typeof schema == \"undefined\")));\n}\nexports.validSchemaType = validSchemaType;\nfunction validateKeywordUsage({ schema, opts, self, errSchemaPath }, def, keyword) {\n    /* istanbul ignore if */\n    if (Array.isArray(def.keyword) ? !def.keyword.includes(keyword) : def.keyword !== keyword) {\n        throw new Error(\"ajv implementation error\");\n    }\n    const deps = def.dependencies;\n    if (deps === null || deps === void 0 ? void 0 : deps.some((kwd) => !Object.prototype.hasOwnProperty.call(schema, kwd))) {\n        throw new Error(`parent schema must have dependencies of ${keyword}: ${deps.join(\",\")}`);\n    }\n    if (def.validateSchema) {\n        const valid = def.validateSchema(schema[keyword]);\n        if (!valid) {\n            const msg = `keyword \"${keyword}\" value is invalid at path \"${errSchemaPath}\": ` +\n                self.errorsText(def.validateSchema.errors);\n            if (opts.validateSchema === \"log\")\n                self.logger.error(msg);\n            else\n                throw new Error(msg);\n        }\n    }\n}\nexports.validateKeywordUsage = validateKeywordUsage;\n//# sourceMappingURL=keyword.js.map/dist/runtime/ucs2length.js.map\u0002{\"version\":3,\"file\":\"ucs2length.js\",\"sourceRoot\":\"\",\"sources\":[\"../../lib/runtime/ucs2length.ts\"],\"names\":[],\"mappings\":\";;AAAA,qDAAqD;AACrD,iEAAiE;AACjE,SAAwB,UAAU,CAAC,GAAW;IAC5C,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAA;IACtB,IAAI,MAAM,GAAG,CAAC,CAAA;IACd,IAAI,GAAG,GAAG,CAAC,CAAA;IACX,IAAI,KAAa,CAAA;IACjB,OAAO,GAAG,GAAG,GAAG,EAAE;QAChB,MAAM,EAAE,CAAA;QACR,KAAK,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,CAAA;QAC7B,IAAI,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,MAAM,IAAI,GAAG,GAAG,GAAG,EAAE;YACnD,gDAAgD;YAChD,KAAK,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;YAC3B,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,MAAM;gBAAE,GAAG,EAAE,CAAA,CAAC,gBAAgB;SACxD;KACF;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AAfD,6BAeC;AAED,UAAU,CAAC,IAAI,GAAG,gDAAgD,CAAA\"}/dist/compile/index.d.ts\u000bbimport type { AnySchema, AnySchemaObject, AnyValidateFunction, EvaluatedProperties, EvaluatedItems } from \"../types\";\nimport type Ajv from \"../core\";\nimport type { InstanceOptions } from \"../core\";\nimport { CodeGen, Name, Code, ValueScopeName } from \"./codegen\";\nimport { LocalRefs } from \"./resolve\";\nimport { JSONType } from \"./rules\";\nexport type SchemaRefs = {\n    [Ref in string]?: SchemaEnv | AnySchema;\n};\nexport interface SchemaCxt {\n    readonly gen: CodeGen;\n    readonly allErrors?: boolean;\n    readonly data: Name;\n    readonly parentData: Name;\n    readonly parentDataProperty: Code | number;\n    readonly dataNames: Name[];\n    readonly dataPathArr: (Code | number)[];\n    readonly dataLevel: number;\n    dataTypes: JSONType[];\n    definedProperties: Set<string>;\n    readonly topSchemaRef: Code;\n    readonly validateName: Name;\n    evaluated?: Name;\n    readonly ValidationError?: Name;\n    readonly schema: AnySchema;\n    readonly schemaEnv: SchemaEnv;\n    readonly rootId: string;\n    baseId: string;\n    readonly schemaPath: Code;\n    readonly errSchemaPath: string;\n    readonly errorPath: Code;\n    readonly propertyName?: Name;\n    readonly compositeRule?: boolean;\n    props?: EvaluatedProperties | Name;\n    items?: EvaluatedItems | Name;\n    jtdDiscriminator?: string;\n    jtdMetadata?: boolean;\n    readonly createErrors?: boolean;\n    readonly opts: InstanceOptions;\n    readonly self: Ajv;\n}\nexport interface SchemaObjCxt extends SchemaCxt {\n    readonly schema: AnySchemaObject;\n}\ninterface SchemaEnvArgs {\n    readonly schema: AnySchema;\n    readonly schemaId?: \"$id\" | \"id\";\n    readonly root?: SchemaEnv;\n    readonly baseId?: string;\n    readonly schemaPath?: string;\n    readonly localRefs?: LocalRefs;\n    readonly meta?: boolean;\n}\nexport declare class SchemaEnv implements SchemaEnvArgs {\n    readonly schema: AnySchema;\n    readonly schemaId?: \"$id\" | \"id\";\n    readonly root: SchemaEnv;\n    baseId: string;\n    schemaPath?: string;\n    localRefs?: LocalRefs;\n    readonly meta?: boolean;\n    readonly $async?: boolean;\n    readonly refs: SchemaRefs;\n    readonly dynamicAnchors: {\n        [Ref in string]?: true;\n    };\n    validate?: AnyValidateFunction;\n    validateName?: ValueScopeName;\n    serialize?: (data: unknown) => string;\n    serializeName?: ValueScopeName;\n    parse?: (data: string) => unknown;\n    parseName?: ValueScopeName;\n    constructor(env: SchemaEnvArgs);\n}\nexport declare function compileSchema(this: Ajv, sch: SchemaEnv): SchemaEnv;\nexport declare function resolveRef(this: Ajv, root: SchemaEnv, baseId: string, ref: string): AnySchema | SchemaEnv | undefined;\nexport declare function getCompilingSchema(this: Ajv, schEnv: SchemaEnv): SchemaEnv | void;\nexport declare function resolveSchema(this: Ajv, root: SchemaEnv, // root object with properties schema, refs TODO below SchemaEnv is assigned to it\nref: string): SchemaEnv | undefined;\nexport {};\n/dist/compile/codegen/code.js\u0012\u0001\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.regexpCode = exports.getEsmExportName = exports.getProperty = exports.safeStringify = exports.stringify = exports.strConcat = exports.addCodeArg = exports.str = exports._ = exports.nil = exports._Code = exports.Name = exports.IDENTIFIER = exports._CodeOrName = void 0;\nclass _CodeOrName {\n}\nexports._CodeOrName = _CodeOrName;\nexports.IDENTIFIER = /^[a-z$_][a-z$_0-9]*$/i;\nclass Name extends _CodeOrName {\n    constructor(s) {\n        super();\n        if (!exports.IDENTIFIER.test(s))\n            throw new Error(\"CodeGen: name must be a valid identifier\");\n        this.str = s;\n    }\n    toString() {\n        return this.str;\n    }\n    emptyStr() {\n        return false;\n    }\n    get names() {\n        return { [this.str]: 1 };\n    }\n}\nexports.Name = Name;\nclass _Code extends _CodeOrName {\n    constructor(code) {\n        super();\n        this._items = typeof code === \"string\" ? [code] : code;\n    }\n    toString() {\n        return this.str;\n    }\n    emptyStr() {\n        if (this._items.length > 1)\n            return false;\n        const item = this._items[0];\n        return item === \"\" || item === '\"\"';\n    }\n    get str() {\n        var _a;\n        return ((_a = this._str) !== null && _a !== void 0 ? _a : (this._str = this._items.reduce((s, c) => `${s}${c}`, \"\")));\n    }\n    get names() {\n        var _a;\n        return ((_a = this._names) !== null && _a !== void 0 ? _a : (this._names = this._items.reduce((names, c) => {\n            if (c instanceof Name)\n                names[c.str] = (names[c.str] || 0) + 1;\n            return names;\n        }, {})));\n    }\n}\nexports._Code = _Code;\nexports.nil = new _Code(\"\");\nfunction _(strs, ...args) {\n    const code = [strs[0]];\n    let i = 0;\n    while (i < args.length) {\n        addCodeArg(code, args[i]);\n        code.push(strs[++i]);\n    }\n    return new _Code(code);\n}\nexports._ = _;\nconst plus = new _Code(\"+\");\nfunction str(strs, ...args) {\n    const expr = [safeStringify(strs[0])];\n    let i = 0;\n    while (i < args.length) {\n        expr.push(plus);\n        addCodeArg(expr, args[i]);\n        expr.push(plus, safeStringify(strs[++i]));\n    }\n    optimize(expr);\n    return new _Code(expr);\n}\nexports.str = str;\nfunction addCodeArg(code, arg) {\n    if (arg instanceof _Code)\n        code.push(...arg._items);\n    else if (arg instanceof Name)\n        code.push(arg);\n    else\n        code.push(interpolate(arg));\n}\nexports.addCodeArg = addCodeArg;\nfunction optimize(expr) {\n    let i = 1;\n    while (i < expr.length - 1) {\n        if (expr[i] === plus) {\n            const res = mergeExprItems(expr[i - 1], expr[i + 1]);\n            if (res !== undefined) {\n                expr.splice(i - 1, 3, res);\n                continue;\n            }\n            expr[i++] = \"+\";\n        }\n        i++;\n    }\n}\nfunction mergeExprItems(a, b) {\n    if (b === '\"\"')\n        return a;\n    if (a === '\"\"')\n        return b;\n    if (typeof a == \"string\") {\n        if (b instanceof Name || a[a.length - 1] !== '\"')\n            return;\n        if (typeof b != \"string\")\n            return `${a.slice(0, -1)}${b}\"`;\n        if (b[0] === '\"')\n            return a.slice(0, -1) + b.slice(1);\n        return;\n    }\n    if (typeof b == \"string\" && b[0] === '\"' && !(a instanceof Name))\n        return `\"${a}${b.slice(1)}`;\n    return;\n}\nfunction strConcat(c1, c2) {\n    return c2.emptyStr() ? c1 : c1.emptyStr() ? c2 : str `${c1}${c2}`;\n}\nexports.strConcat = strConcat;\n// TODO do not allow arrays here\nfunction interpolate(x) {\n    return typeof x == \"number\" || typeof x == \"boolean\" || x === null\n        ? x\n        : safeStringify(Array.isArray(x) ? x.join(\",\") : x);\n}\nfunction stringify(x) {\n    return new _Code(safeStringify(x));\n}\nexports.stringify = stringify;\nfunction safeStringify(x) {\n    return JSON.stringify(x)\n        .replace(/\\u2028/g, \"\\\\u2028\")\n        .replace(/\\u2029/g, \"\\\\u2029\");\n}\nexports.safeStringify = safeStringify;\nfunction getProperty(key) {\n    return typeof key == \"string\" && exports.IDENTIFIER.test(key) ? new _Code(`.${key}`) : _ `[${key}]`;\n}\nexports.getProperty = getProperty;\n//Does best effort to format the name properly\nfunction getEsmExportName(key) {\n    if (typeof key == \"string\" && exports.IDENTIFIER.test(key)) {\n        return new _Code(`${key}`);\n    }\n    throw new Error(`CodeGen: invalid export name: ${key}, use explicit $id name mapping`);\n}\nexports.getEsmExportName = getEsmExportName;\nfunction regexpCode(rx) {\n    return new _Code(rx.toString());\n}\nexports.regexpCode = regexpCode;\n//# sourceMappingURL=code.js.map3/lib/refs/json-schema-2020-12/meta/unevaluated.json\u0001{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"$id\": \"https://json-schema.org/draft/2020-12/meta/unevaluated\",\n  \"$vocabulary\": {\n    \"https://json-schema.org/draft/2020-12/vocab/unevaluated\": true\n  },\n  \"$dynamicAnchor\": \"meta\",\n\n  \"title\": \"Unevaluated applicator vocabulary meta-schema\",\n  \"type\": [\"object\", \"boolean\"],\n  \"properties\": {\n    \"unevaluatedItems\": {\"$dynamicRef\": \"#meta\"},\n    \"unevaluatedProperties\": {\"$dynamicRef\": \"#meta\"}\n  }\n}\n)/dist/vocabularies/applicator/thenElse.js\u0001\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst util_1 = require(\"../../compile/util\");\nconst def = {\n    keyword: [\"then\", \"else\"],\n    schemaType: [\"object\", \"boolean\"],\n    code({ keyword, parentSchema, it }) {\n        if (parentSchema.if === undefined)\n            (0, util_1.checkStrictMode)(it, `\"${keyword}\" without \"if\" is ignored`);\n    },\n};\nexports.default = def;\n//# sourceMappingURL=thenElse.js.map1/dist/vocabularies/applicator/dependentSchemas.js\u0001b\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst dependencies_1 = require(\"./dependencies\");\nconst def = {\n    keyword: \"dependentSchemas\",\n    type: \"object\",\n    schemaType: \"object\",\n    code: (cxt) => (0, dependencies_1.validateSchemaDeps)(cxt),\n};\nexports.default = def;\n//# sourceMappingURL=dependentSchemas.js.map/lib/compile/jtd/types.ts\u00015import type {SchemaObject} from \"../../types\"\n\nexport type SchemaObjectMap = {[Ref in string]?: SchemaObject}\n\nexport const jtdForms = [\n  \"elements\",\n  \"values\",\n  \"discriminator\",\n  \"properties\",\n  \"optionalProperties\",\n  \"enum\",\n  \"type\",\n  \"ref\",\n] as const\n\nexport type JTDForm = typeof jtdForms[number]\n,/dist/vocabularies/applicator/prefixItems.js\u0001b\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst items_1 = require(\"./items\");\nconst def = {\n    keyword: \"prefixItems\",\n    type: \"array\",\n    schemaType: [\"array\"],\n    before: \"uniqueItems\",\n    code: (cxt) => (0, items_1.validateTuple)(cxt, \"items\"),\n};\nexports.default = def;\n//# sourceMappingURL=prefixItems.js.map$/dist/refs/json-schema-draft-07.json\u000e{\n  \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n  \"$id\": \"http://json-schema.org/draft-07/schema#\",\n  \"title\": \"Core schema meta-schema\",\n  \"definitions\": {\n    \"schemaArray\": {\n      \"type\": \"array\",\n      \"minItems\": 1,\n      \"items\": {\"$ref\": \"#\"}\n    },\n    \"nonNegativeInteger\": {\n      \"type\": \"integer\",\n      \"minimum\": 0\n    },\n    \"nonNegativeIntegerDefault0\": {\n      \"allOf\": [{\"$ref\": \"#/definitions/nonNegativeInteger\"}, {\"default\": 0}]\n    },\n    \"simpleTypes\": {\n      \"enum\": [\"array\", \"boolean\", \"integer\", \"null\", \"number\", \"object\", \"string\"]\n    },\n    \"stringArray\": {\n      \"type\": \"array\",\n      \"items\": {\"type\": \"string\"},\n      \"uniqueItems\": true,\n      \"default\": []\n    }\n  },\n  \"type\": [\"object\", \"boolean\"],\n  \"properties\": {\n    \"$id\": {\n      \"type\": \"string\",\n      \"format\": \"uri-reference\"\n    },\n    \"$schema\": {\n      \"type\": \"string\",\n      \"format\": \"uri\"\n    },\n    \"$ref\": {\n      \"type\": \"string\",\n      \"format\": \"uri-reference\"\n    },\n    \"$comment\": {\n      \"type\": \"string\"\n    },\n    \"title\": {\n      \"type\": \"string\"\n    },\n    \"description\": {\n      \"type\": \"string\"\n    },\n    \"default\": true,\n    \"readOnly\": {\n      \"type\": \"boolean\",\n      \"default\": false\n    },\n    \"examples\": {\n      \"type\": \"array\",\n      \"items\": true\n    },\n    \"multipleOf\": {\n      \"type\": \"number\",\n      \"exclusiveMinimum\": 0\n    },\n    \"maximum\": {\n      \"type\": \"number\"\n    },\n    \"exclusiveMaximum\": {\n      \"type\": \"number\"\n    },\n    \"minimum\": {\n      \"type\": \"number\"\n    },\n    \"exclusiveMinimum\": {\n      \"type\": \"number\"\n    },\n    \"maxLength\": {\"$ref\": \"#/definitions/nonNegativeInteger\"},\n    \"minLength\": {\"$ref\": \"#/definitions/nonNegativeIntegerDefault0\"},\n    \"pattern\": {\n      \"type\": \"string\",\n      \"format\": \"regex\"\n    },\n    \"additionalItems\": {\"$ref\": \"#\"},\n    \"items\": {\n      \"anyOf\": [{\"$ref\": \"#\"}, {\"$ref\": \"#/definitions/schemaArray\"}],\n      \"default\": true\n    },\n    \"maxItems\": {\"$ref\": \"#/definitions/nonNegativeInteger\"},\n    \"minItems\": {\"$ref\": \"#/definitions/nonNegativeIntegerDefault0\"},\n    \"uniqueItems\": {\n      \"type\": \"boolean\",\n      \"default\": false\n    },\n    \"contains\": {\"$ref\": \"#\"},\n    \"maxProperties\": {\"$ref\": \"#/definitions/nonNegativeInteger\"},\n    \"minProperties\": {\"$ref\": \"#/definitions/nonNegativeIntegerDefault0\"},\n    \"required\": {\"$ref\": \"#/definitions/stringArray\"},\n    \"additionalProperties\": {\"$ref\": \"#\"},\n    \"definitions\": {\n      \"type\": \"object\",\n      \"additionalProperties\": {\"$ref\": \"#\"},\n      \"default\": {}\n    },\n    \"properties\": {\n      \"type\": \"object\",\n      \"additionalProperties\": {\"$ref\": \"#\"},\n      \"default\": {}\n    },\n    \"patternProperties\": {\n      \"type\": \"object\",\n      \"additionalProperties\": {\"$ref\": \"#\"},\n      \"propertyNames\": {\"format\": \"regex\"},\n      \"default\": {}\n    },\n    \"dependencies\": {\n      \"type\": \"object\",\n      \"additionalProperties\": {\n        \"anyOf\": [{\"$ref\": \"#\"}, {\"$ref\": \"#/definitions/stringArray\"}]\n      }\n    },\n    \"propertyNames\": {\"$ref\": \"#\"},\n    \"const\": true,\n    \"enum\": {\n      \"type\": \"array\",\n      \"items\": true,\n      \"minItems\": 1,\n      \"uniqueItems\": true\n    },\n    \"type\": {\n      \"anyOf\": [\n        {\"$ref\": \"#/definitions/simpleTypes\"},\n        {\n          \"type\": \"array\",\n          \"items\": {\"$ref\": \"#/definitions/simpleTypes\"},\n          \"minItems\": 1,\n          \"uniqueItems\": true\n        }\n      ]\n    },\n    \"format\": {\"type\": \"string\"},\n    \"contentMediaType\": {\"type\": \"string\"},\n    \"contentEncoding\": {\"type\": \"string\"},\n    \"if\": {\"$ref\": \"#\"},\n    \"then\": {\"$ref\": \"#\"},\n    \"else\": {\"$ref\": \"#\"},\n    \"allOf\": {\"$ref\": \"#/definitions/schemaArray\"},\n    \"anyOf\": {\"$ref\": \"#/definitions/schemaArray\"},\n    \"oneOf\": {\"$ref\": \"#/definitions/schemaArray\"},\n    \"not\": {\"$ref\": \"#\"}\n  },\n  \"default\": true\n}\n/dist/vocabularies/errors.d.ts\u0002import type { TypeError } from \"../compile/validate/dataType\";\nimport type { ApplicatorKeywordError } from \"./applicator\";\nimport type { ValidationKeywordError } from \"./validation\";\nimport type { FormatError } from \"./format/format\";\nimport type { UnevaluatedPropertiesError } from \"./unevaluated/unevaluatedProperties\";\nimport type { UnevaluatedItemsError } from \"./unevaluated/unevaluatedItems\";\nimport type { DependentRequiredError } from \"./validation/dependentRequired\";\nimport type { DiscriminatorError } from \"./discriminator\";\nexport type DefinedError = TypeError | ApplicatorKeywordError | ValidationKeywordError | FormatError | UnevaluatedPropertiesError | UnevaluatedItemsError | DependentRequiredError | DiscriminatorError;\n4/dist/refs/json-schema-2020-12/meta/unevaluated.json\u0001{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"$id\": \"https://json-schema.org/draft/2020-12/meta/unevaluated\",\n  \"$vocabulary\": {\n    \"https://json-schema.org/draft/2020-12/vocab/unevaluated\": true\n  },\n  \"$dynamicAnchor\": \"meta\",\n\n  \"title\": \"Unevaluated applicator vocabulary meta-schema\",\n  \"type\": [\"object\", \"boolean\"],\n  \"properties\": {\n    \"unevaluatedItems\": {\"$dynamicRef\": \"#meta\"},\n    \"unevaluatedProperties\": {\"$dynamicRef\": \"#meta\"}\n  }\n}\n/dist/jtd.js\f\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MissingRefError = exports.ValidationError = exports.CodeGen = exports.Name = exports.nil = exports.stringify = exports.str = exports._ = exports.KeywordCxt = void 0;\nconst core_1 = require(\"./core\");\nconst jtd_1 = require(\"./vocabularies/jtd\");\nconst jtd_schema_1 = require(\"./refs/jtd-schema\");\nconst serialize_1 = require(\"./compile/jtd/serialize\");\nconst parse_1 = require(\"./compile/jtd/parse\");\nconst META_SCHEMA_ID = \"JTD-meta-schema\";\nclass Ajv extends core_1.default {\n    constructor(opts = {}) {\n        super({\n            ...opts,\n            jtd: true,\n        });\n    }\n    _addVocabularies() {\n        super._addVocabularies();\n        this.addVocabulary(jtd_1.default);\n    }\n    _addDefaultMetaSchema() {\n        super._addDefaultMetaSchema();\n        if (!this.opts.meta)\n            return;\n        this.addMetaSchema(jtd_schema_1.default, META_SCHEMA_ID, false);\n    }\n    defaultMeta() {\n        return (this.opts.defaultMeta =\n            super.defaultMeta() || (this.getSchema(META_SCHEMA_ID) ? META_SCHEMA_ID : undefined));\n    }\n    compileSerializer(schema) {\n        const sch = this._addSchema(schema);\n        return sch.serialize || this._compileSerializer(sch);\n    }\n    compileParser(schema) {\n        const sch = this._addSchema(schema);\n        return (sch.parse || this._compileParser(sch));\n    }\n    _compileSerializer(sch) {\n        serialize_1.default.call(this, sch, sch.schema.definitions || {});\n        /* istanbul ignore if */\n        if (!sch.serialize)\n            throw new Error(\"ajv implementation error\");\n        return sch.serialize;\n    }\n    _compileParser(sch) {\n        parse_1.default.call(this, sch, sch.schema.definitions || {});\n        /* istanbul ignore if */\n        if (!sch.parse)\n            throw new Error(\"ajv implementation error\");\n        return sch.parse;\n    }\n}\nmodule.exports = exports = Ajv;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = Ajv;\nvar validate_1 = require(\"./compile/validate\");\nObject.defineProperty(exports, \"KeywordCxt\", { enumerable: true, get: function () { return validate_1.KeywordCxt; } });\nvar codegen_1 = require(\"./compile/codegen\");\nObject.defineProperty(exports, \"_\", { enumerable: true, get: function () { return codegen_1._; } });\nObject.defineProperty(exports, \"str\", { enumerable: true, get: function () { return codegen_1.str; } });\nObject.defineProperty(exports, \"stringify\", { enumerable: true, get: function () { return codegen_1.stringify; } });\nObject.defineProperty(exports, \"nil\", { enumerable: true, get: function () { return codegen_1.nil; } });\nObject.defineProperty(exports, \"Name\", { enumerable: true, get: function () { return codegen_1.Name; } });\nObject.defineProperty(exports, \"CodeGen\", { enumerable: true, get: function () { return codegen_1.CodeGen; } });\nvar validation_error_1 = require(\"./runtime/validation_error\");\nObject.defineProperty(exports, \"ValidationError\", { enumerable: true, get: function () { return validation_error_1.default; } });\nvar ref_error_1 = require(\"./compile/ref_error\");\nObject.defineProperty(exports, \"MissingRefError\", { enumerable: true, get: function () { return ref_error_1.default; } });\n//# sourceMappingURL=jtd.js.map/dist/compile/names.js.map\u0003{\"version\":3,\"file\":\"names.js\",\"sourceRoot\":\"\",\"sources\":[\"../../lib/compile/names.ts\"],\"names\":[],\"mappings\":\";;AAAA,uCAA8B;AAE9B,MAAM,KAAK,GAAG;IACZ,gCAAgC;IAChC,IAAI,EAAE,IAAI,cAAI,CAAC,MAAM,CAAC;IACtB,sCAAsC;IACtC,MAAM,EAAE,IAAI,cAAI,CAAC,QAAQ,CAAC;IAC1B,YAAY,EAAE,IAAI,cAAI,CAAC,cAAc,CAAC;IACtC,UAAU,EAAE,IAAI,cAAI,CAAC,YAAY,CAAC;IAClC,kBAAkB,EAAE,IAAI,cAAI,CAAC,oBAAoB,CAAC;IAClD,QAAQ,EAAE,IAAI,cAAI,CAAC,UAAU,CAAC;IAC9B,cAAc,EAAE,IAAI,cAAI,CAAC,gBAAgB,CAAC;IAC1C,4BAA4B;IAC5B,OAAO,EAAE,IAAI,cAAI,CAAC,SAAS,CAAC;IAC5B,MAAM,EAAE,IAAI,cAAI,CAAC,QAAQ,CAAC;IAC1B,IAAI,EAAE,IAAI,cAAI,CAAC,MAAM,CAAC;IACtB,YAAY;IACZ,IAAI,EAAE,IAAI,cAAI,CAAC,MAAM,CAAC;IACtB,KAAK,EAAE,IAAI,cAAI,CAAC,OAAO,CAAC;IACxB,wDAAwD;IACxD,IAAI,EAAE,IAAI,cAAI,CAAC,MAAM,CAAC;IACtB,OAAO,EAAE,IAAI,cAAI,CAAC,SAAS,CAAC;IAC5B,OAAO,EAAE,IAAI,cAAI,CAAC,SAAS,CAAC;IAC5B,QAAQ,EAAE,IAAI,cAAI,CAAC,UAAU,CAAC;CAC/B,CAAA;AAED,kBAAe,KAAK,CAAA\"},/dist/vocabularies/jtd/optionalProperties.js\u0001\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst properties_1 = require(\"./properties\");\nconst def = {\n    keyword: \"optionalProperties\",\n    schemaType: \"object\",\n    error: properties_1.error,\n    code(cxt) {\n        if (cxt.parentSchema.properties)\n            return;\n        (0, properties_1.validateProperties)(cxt);\n    },\n};\nexports.default = def;\n//# sourceMappingURL=optionalProperties.js.map/dist/vocabularies/jtd/enum.js\u0006\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst metadata_1 = require(\"./metadata\");\nconst nullable_1 = require(\"./nullable\");\nconst error = {\n    message: \"must be equal to one of the allowed values\",\n    params: ({ schemaCode }) => (0, codegen_1._) `{allowedValues: ${schemaCode}}`,\n};\nconst def = {\n    keyword: \"enum\",\n    schemaType: \"array\",\n    error,\n    code(cxt) {\n        (0, metadata_1.checkMetadata)(cxt);\n        const { gen, data, schema, schemaValue, parentSchema, it } = cxt;\n        if (schema.length === 0)\n            throw new Error(\"enum must have non-empty array\");\n        if (schema.length !== new Set(schema).size)\n            throw new Error(\"enum items must be unique\");\n        let valid;\n        const isString = (0, codegen_1._) `typeof ${data} == \"string\"`;\n        if (schema.length >= it.opts.loopEnum) {\n            let cond;\n            [valid, cond] = (0, nullable_1.checkNullable)(cxt, isString);\n            gen.if(cond, loopEnum);\n        }\n        else {\n            /* istanbul ignore if */\n            if (!Array.isArray(schema))\n                throw new Error(\"ajv implementation error\");\n            valid = (0, codegen_1.and)(isString, (0, codegen_1.or)(...schema.map((value) => (0, codegen_1._) `${data} === ${value}`)));\n            if (parentSchema.nullable)\n                valid = (0, codegen_1.or)((0, codegen_1._) `${data} === null`, valid);\n        }\n        cxt.pass(valid);\n        function loopEnum() {\n            gen.forOf(\"v\", schemaValue, (v) => gen.if((0, codegen_1._) `${valid} = ${data} === ${v}`, () => gen.break()));\n        }\n    },\n};\nexports.default = def;\n//# sourceMappingURL=enum.js.map!/dist/vocabularies/core/id.js.map\u0001\u0001{\"version\":3,\"file\":\"id.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../lib/vocabularies/core/id.ts\"],\"names\":[],\"mappings\":\";;AAEA,MAAM,GAAG,GAA0B;IACjC,OAAO,EAAE,IAAI;IACb,IAAI;QACF,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAA;IACzE,CAAC;CACF,CAAA;AAED,kBAAe,GAAG,CAAA\"}/lib/vocabularies/errors.ts\u0002import type {TypeError} from \"../compile/validate/dataType\"\nimport type {ApplicatorKeywordError} from \"./applicator\"\nimport type {ValidationKeywordError} from \"./validation\"\nimport type {FormatError} from \"./format/format\"\nimport type {UnevaluatedPropertiesError} from \"./unevaluated/unevaluatedProperties\"\nimport type {UnevaluatedItemsError} from \"./unevaluated/unevaluatedItems\"\nimport type {DependentRequiredError} from \"./validation/dependentRequired\"\nimport type {DiscriminatorError} from \"./discriminator\"\n\nexport type DefinedError =\n  | TypeError\n  | ApplicatorKeywordError\n  | ValidationKeywordError\n  | FormatError\n  | UnevaluatedPropertiesError\n  | UnevaluatedItemsError\n  | DependentRequiredError\n  | DiscriminatorError\n/dist/refs/jtd-schema.js\u000bB\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst shared = (root) => {\n    const sch = {\n        nullable: { type: \"boolean\" },\n        metadata: {\n            optionalProperties: {\n                union: { elements: { ref: \"schema\" } },\n            },\n            additionalProperties: true,\n        },\n    };\n    if (root)\n        sch.definitions = { values: { ref: \"schema\" } };\n    return sch;\n};\nconst emptyForm = (root) => ({\n    optionalProperties: shared(root),\n});\nconst refForm = (root) => ({\n    properties: {\n        ref: { type: \"string\" },\n    },\n    optionalProperties: shared(root),\n});\nconst typeForm = (root) => ({\n    properties: {\n        type: {\n            enum: [\n                \"boolean\",\n                \"timestamp\",\n                \"string\",\n                \"float32\",\n                \"float64\",\n                \"int8\",\n                \"uint8\",\n                \"int16\",\n                \"uint16\",\n                \"int32\",\n                \"uint32\",\n            ],\n        },\n    },\n    optionalProperties: shared(root),\n});\nconst enumForm = (root) => ({\n    properties: {\n        enum: { elements: { type: \"string\" } },\n    },\n    optionalProperties: shared(root),\n});\nconst elementsForm = (root) => ({\n    properties: {\n        elements: { ref: \"schema\" },\n    },\n    optionalProperties: shared(root),\n});\nconst propertiesForm = (root) => ({\n    properties: {\n        properties: { values: { ref: \"schema\" } },\n    },\n    optionalProperties: {\n        optionalProperties: { values: { ref: \"schema\" } },\n        additionalProperties: { type: \"boolean\" },\n        ...shared(root),\n    },\n});\nconst optionalPropertiesForm = (root) => ({\n    properties: {\n        optionalProperties: { values: { ref: \"schema\" } },\n    },\n    optionalProperties: {\n        additionalProperties: { type: \"boolean\" },\n        ...shared(root),\n    },\n});\nconst discriminatorForm = (root) => ({\n    properties: {\n        discriminator: { type: \"string\" },\n        mapping: {\n            values: {\n                metadata: {\n                    union: [propertiesForm(false), optionalPropertiesForm(false)],\n                },\n            },\n        },\n    },\n    optionalProperties: shared(root),\n});\nconst valuesForm = (root) => ({\n    properties: {\n        values: { ref: \"schema\" },\n    },\n    optionalProperties: shared(root),\n});\nconst schema = (root) => ({\n    metadata: {\n        union: [\n            emptyForm,\n            refForm,\n            typeForm,\n            enumForm,\n            elementsForm,\n            propertiesForm,\n            optionalPropertiesForm,\n            discriminatorForm,\n            valuesForm,\n        ].map((s) => s(root)),\n    },\n});\nconst jtdMetaSchema = {\n    definitions: {\n        schema: schema(false),\n    },\n    ...schema(true),\n};\nexports.default = jtdMetaSchema;\n//# sourceMappingURL=jtd-schema.js.map*/dist/refs/json-schema-2020-12/schema.json\bv{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"$id\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"$vocabulary\": {\n    \"https://json-schema.org/draft/2020-12/vocab/core\": true,\n    \"https://json-schema.org/draft/2020-12/vocab/applicator\": true,\n    \"https://json-schema.org/draft/2020-12/vocab/unevaluated\": true,\n    \"https://json-schema.org/draft/2020-12/vocab/validation\": true,\n    \"https://json-schema.org/draft/2020-12/vocab/meta-data\": true,\n    \"https://json-schema.org/draft/2020-12/vocab/format-annotation\": true,\n    \"https://json-schema.org/draft/2020-12/vocab/content\": true\n  },\n  \"$dynamicAnchor\": \"meta\",\n\n  \"title\": \"Core and Validation specifications meta-schema\",\n  \"allOf\": [\n    {\"$ref\": \"meta/core\"},\n    {\"$ref\": \"meta/applicator\"},\n    {\"$ref\": \"meta/unevaluated\"},\n    {\"$ref\": \"meta/validation\"},\n    {\"$ref\": \"meta/meta-data\"},\n    {\"$ref\": \"meta/format-annotation\"},\n    {\"$ref\": \"meta/content\"}\n  ],\n  \"type\": [\"object\", \"boolean\"],\n  \"$comment\": \"This meta-schema also defines keywords that have appeared in previous drafts in order to prevent incompatible extensions as they remain in common use.\",\n  \"properties\": {\n    \"definitions\": {\n      \"$comment\": \"\\\"definitions\\\" has been replaced by \\\"$defs\\\".\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\"$dynamicRef\": \"#meta\"},\n      \"deprecated\": true,\n      \"default\": {}\n    },\n    \"dependencies\": {\n      \"$comment\": \"\\\"dependencies\\\" has been split and replaced by \\\"dependentSchemas\\\" and \\\"dependentRequired\\\" in order to serve their differing semantics.\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\n        \"anyOf\": [{\"$dynamicRef\": \"#meta\"}, {\"$ref\": \"meta/validation#/$defs/stringArray\"}]\n      },\n      \"deprecated\": true,\n      \"default\": {}\n    },\n    \"$recursiveAnchor\": {\n      \"$comment\": \"\\\"$recursiveAnchor\\\" has been replaced by \\\"$dynamicAnchor\\\".\",\n      \"$ref\": \"meta/core#/$defs/anchorString\",\n      \"deprecated\": true\n    },\n    \"$recursiveRef\": {\n      \"$comment\": \"\\\"$recursiveRef\\\" has been replaced by \\\"$dynamicRef\\\".\",\n      \"$ref\": \"meta/core#/$defs/uriReferenceString\",\n      \"deprecated\": true\n    }\n  }\n}\n4/dist/vocabularies/applicator/patternProperties.d.tsximport type { CodeKeywordDefinition } from \"../../types\";\ndeclare const def: CodeKeywordDefinition;\nexport default def;\n#/dist/compile/validate/keyword.d.ts\u0002import type { KeywordCxt } from \".\";\nimport type { AddedKeywordDefinition, MacroKeywordDefinition, FuncKeywordDefinition } from \"../../types\";\nimport type { SchemaObjCxt } from \"..\";\nimport type { JSONType } from \"../rules\";\nexport declare function macroKeywordCode(cxt: KeywordCxt, def: MacroKeywordDefinition): void;\nexport declare function funcKeywordCode(cxt: KeywordCxt, def: FuncKeywordDefinition): void;\nexport declare function validSchemaType(schema: unknown, schemaType: JSONType[], allowUndefined?: boolean): boolean;\nexport declare function validateKeywordUsage({ schema, opts, self, errSchemaPath }: SchemaObjCxt, def: AddedKeywordDefinition, keyword: string): void;\n2/dist/vocabularies/validation/dependentRequired.js\u0001\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst dependencies_1 = require(\"../applicator/dependencies\");\nconst def = {\n    keyword: \"dependentRequired\",\n    type: \"object\",\n    schemaType: \"object\",\n    error: dependencies_1.error,\n    code: (cxt) => (0, dependencies_1.validatePropertyDeps)(cxt),\n};\nexports.default = def;\n//# sourceMappingURL=dependentRequired.js.map(/dist/vocabularies/dynamic/dynamicRef.js\u0007\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.dynamicRef = void 0;\nconst codegen_1 = require(\"../../compile/codegen\");\nconst names_1 = require(\"../../compile/names\");\nconst ref_1 = require(\"../core/ref\");\nconst def = {\n    keyword: \"$dynamicRef\",\n    schemaType: \"string\",\n    code: (cxt) => dynamicRef(cxt, cxt.schema),\n};\nfunction dynamicRef(cxt, ref) {\n    const { gen, keyword, it } = cxt;\n    if (ref[0] !== \"#\")\n        throw new Error(`\"${keyword}\" only supports hash fragment reference`);\n    const anchor = ref.slice(1);\n    if (it.allErrors) {\n        _dynamicRef();\n    }\n    else {\n        const valid = gen.let(\"valid\", false);\n        _dynamicRef(valid);\n        cxt.ok(valid);\n    }\n    function _dynamicRef(valid) {\n        // TODO the assumption here is that `recursiveRef: #` always points to the root\n        // of the schema object, which is not correct, because there may be $id that\n        // makes # point to it, and the target schema may not contain dynamic/recursiveAnchor.\n        // Because of that 2 tests in recursiveRef.json fail.\n        // This is a similar problem to #815 (`$id` doesn't alter resolution scope for `{ \"$ref\": \"#\" }`).\n        // (This problem is not tested in JSON-Schema-Test-Suite)\n        if (it.schemaEnv.root.dynamicAnchors[anchor]) {\n            const v = gen.let(\"_v\", (0, codegen_1._) `${names_1.default.dynamicAnchors}${(0, codegen_1.getProperty)(anchor)}`);\n            gen.if(v, _callRef(v, valid), _callRef(it.validateName, valid));\n        }\n        else {\n            _callRef(it.validateName, valid)();\n        }\n    }\n    function _callRef(validate, valid) {\n        return valid\n            ? () => gen.block(() => {\n                (0, ref_1.callRef)(cxt, validate);\n                gen.let(valid, true);\n            })\n            : () => (0, ref_1.callRef)(cxt, validate);\n    }\n}\nexports.dynamicRef = dynamicRef;\nexports.default = def;\n//# sourceMappingURL=dynamicRef.js.map/dist/types/index.jsn\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=index.js.map3/dist/refs/json-schema-2020-12/meta/validation.json\b{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"$id\": \"https://json-schema.org/draft/2020-12/meta/validation\",\n  \"$vocabulary\": {\n    \"https://json-schema.org/draft/2020-12/vocab/validation\": true\n  },\n  \"$dynamicAnchor\": \"meta\",\n\n  \"title\": \"Validation vocabulary meta-schema\",\n  \"type\": [\"object\", \"boolean\"],\n  \"properties\": {\n    \"type\": {\n      \"anyOf\": [\n        {\"$ref\": \"#/$defs/simpleTypes\"},\n        {\n          \"type\": \"array\",\n          \"items\": {\"$ref\": \"#/$defs/simpleTypes\"},\n          \"minItems\": 1,\n          \"uniqueItems\": true\n        }\n      ]\n    },\n    \"const\": true,\n    \"enum\": {\n      \"type\": \"array\",\n      \"items\": true\n    },\n    \"multipleOf\": {\n      \"type\": \"number\",\n      \"exclusiveMinimum\": 0\n    },\n    \"maximum\": {\n      \"type\": \"number\"\n    },\n    \"exclusiveMaximum\": {\n      \"type\": \"number\"\n    },\n    \"minimum\": {\n      \"type\": \"number\"\n    },\n    \"exclusiveMinimum\": {\n      \"type\": \"number\"\n    },\n    \"maxLength\": {\"$ref\": \"#/$defs/nonNegativeInteger\"},\n    \"minLength\": {\"$ref\": \"#/$defs/nonNegativeIntegerDefault0\"},\n    \"pattern\": {\n      \"type\": \"string\",\n      \"format\": \"regex\"\n    },\n    \"maxItems\": {\"$ref\": \"#/$defs/nonNegativeInteger\"},\n    \"minItems\": {\"$ref\": \"#/$defs/nonNegativeIntegerDefault0\"},\n    \"uniqueItems\": {\n      \"type\": \"boolean\",\n      \"default\": false\n    },\n    \"maxContains\": {\"$ref\": \"#/$defs/nonNegativeInteger\"},\n    \"minContains\": {\n      \"$ref\": \"#/$defs/nonNegativeInteger\",\n      \"default\": 1\n    },\n    \"maxProperties\": {\"$ref\": \"#/$defs/nonNegativeInteger\"},\n    \"minProperties\": {\"$ref\": \"#/$defs/nonNegativeIntegerDefault0\"},\n    \"required\": {\"$ref\": \"#/$defs/stringArray\"},\n    \"dependentRequired\": {\n      \"type\": \"object\",\n      \"additionalProperties\": {\n        \"$ref\": \"#/$defs/stringArray\"\n      }\n    }\n  },\n  \"$defs\": {\n    \"nonNegativeInteger\": {\n      \"type\": \"integer\",\n      \"minimum\": 0\n    },\n    \"nonNegativeIntegerDefault0\": {\n      \"$ref\": \"#/$defs/nonNegativeInteger\",\n      \"default\": 0\n    },\n    \"simpleTypes\": {\n      \"enum\": [\"array\", \"boolean\", \"integer\", \"null\", \"number\", \"object\", \"string\"]\n    },\n    \"stringArray\": {\n      \"type\": \"array\",\n      \"items\": {\"type\": \"string\"},\n      \"uniqueItems\": true,\n      \"default\": []\n    }\n  }\n}\n/dist/types/json-schema.jst\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=json-schema.js.map$/lib/vocabularies/validation/enum.ts\u0007-import type {CodeKeywordDefinition, ErrorObject, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, or, Name, Code} from \"../../compile/codegen\"\nimport {useFunc} from \"../../compile/util\"\nimport equal from \"../../runtime/equal\"\n\nexport type EnumError = ErrorObject<\"enum\", {allowedValues: any[]}, any[] | {$data: string}>\n\nconst error: KeywordErrorDefinition = {\n  message: \"must be equal to one of the allowed values\",\n  params: ({schemaCode}) => _`{allowedValues: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"enum\",\n  schemaType: \"array\",\n  $data: true,\n  error,\n  code(cxt: KeywordCxt) {\n    const {gen, data, $data, schema, schemaCode, it} = cxt\n    if (!$data && schema.length === 0) throw new Error(\"enum must have non-empty array\")\n    const useLoop = schema.length >= it.opts.loopEnum\n    let eql: Name | undefined\n    const getEql = (): Name => (eql ??= useFunc(gen, equal))\n\n    let valid: Code\n    if (useLoop || $data) {\n      valid = gen.let(\"valid\")\n      cxt.block$data(valid, loopEnum)\n    } else {\n      /* istanbul ignore if */\n      if (!Array.isArray(schema)) throw new Error(\"ajv implementation error\")\n      const vSchema = gen.const(\"vSchema\", schemaCode)\n      valid = or(...schema.map((_x: unknown, i: number) => equalCode(vSchema, i)))\n    }\n    cxt.pass(valid)\n\n    function loopEnum(): void {\n      gen.assign(valid, false)\n      gen.forOf(\"v\", schemaCode as Code, (v) =>\n        gen.if(_`${getEql()}(${data}, ${v})`, () => gen.assign(valid, true).break())\n      )\n    }\n\n    function equalCode(vSchema: Name, i: number): Code {\n      const sch = schema[i]\n      return typeof sch === \"object\" && sch !== null\n        ? _`${getEql()}(${data}, ${vSchema}[${i}])`\n        : _`${data} === ${sch}`\n    }\n  },\n}\n\nexport default def\n+/dist/vocabularies/applicator/properties.js\bi\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst validate_1 = require(\"../../compile/validate\");\nconst code_1 = require(\"../code\");\nconst util_1 = require(\"../../compile/util\");\nconst additionalProperties_1 = require(\"./additionalProperties\");\nconst def = {\n    keyword: \"properties\",\n    type: \"object\",\n    schemaType: \"object\",\n    code(cxt) {\n        const { gen, schema, parentSchema, data, it } = cxt;\n        if (it.opts.removeAdditional === \"all\" && parentSchema.additionalProperties === undefined) {\n            additionalProperties_1.default.code(new validate_1.KeywordCxt(it, additionalProperties_1.default, \"additionalProperties\"));\n        }\n        const allProps = (0, code_1.allSchemaProperties)(schema);\n        for (const prop of allProps) {\n            it.definedProperties.add(prop);\n        }\n        if (it.opts.unevaluated && allProps.length && it.props !== true) {\n            it.props = util_1.mergeEvaluated.props(gen, (0, util_1.toHash)(allProps), it.props);\n        }\n        const properties = allProps.filter((p) => !(0, util_1.alwaysValidSchema)(it, schema[p]));\n        if (properties.length === 0)\n            return;\n        const valid = gen.name(\"valid\");\n        for (const prop of properties) {\n            if (hasDefault(prop)) {\n                applyPropertySchema(prop);\n            }\n            else {\n                gen.if((0, code_1.propertyInData)(gen, data, prop, it.opts.ownProperties));\n                applyPropertySchema(prop);\n                if (!it.allErrors)\n                    gen.else().var(valid, true);\n                gen.endIf();\n            }\n            cxt.it.definedProperties.add(prop);\n            cxt.ok(valid);\n        }\n        function hasDefault(prop) {\n            return it.opts.useDefaults && !it.compositeRule && schema[prop].default !== undefined;\n        }\n        function applyPropertySchema(prop) {\n            cxt.subschema({\n                keyword: \"properties\",\n                schemaProp: prop,\n                dataProp: prop,\n            }, valid);\n        }\n    },\n};\nexports.default = def;\n//# sourceMappingURL=properties.js.map2/lib/refs/json-schema-2019-09/meta/applicator.json\u0006\u001e{\n  \"$schema\": \"https://json-schema.org/draft/2019-09/schema\",\n  \"$id\": \"https://json-schema.org/draft/2019-09/meta/applicator\",\n  \"$vocabulary\": {\n    \"https://json-schema.org/draft/2019-09/vocab/applicator\": true\n  },\n  \"$recursiveAnchor\": true,\n\n  \"title\": \"Applicator vocabulary meta-schema\",\n  \"type\": [\"object\", \"boolean\"],\n  \"properties\": {\n    \"additionalItems\": {\"$recursiveRef\": \"#\"},\n    \"unevaluatedItems\": {\"$recursiveRef\": \"#\"},\n    \"items\": {\n      \"anyOf\": [{\"$recursiveRef\": \"#\"}, {\"$ref\": \"#/$defs/schemaArray\"}]\n    },\n    \"contains\": {\"$recursiveRef\": \"#\"},\n    \"additionalProperties\": {\"$recursiveRef\": \"#\"},\n    \"unevaluatedProperties\": {\"$recursiveRef\": \"#\"},\n    \"properties\": {\n      \"type\": \"object\",\n      \"additionalProperties\": {\"$recursiveRef\": \"#\"},\n      \"default\": {}\n    },\n    \"patternProperties\": {\n      \"type\": \"object\",\n      \"additionalProperties\": {\"$recursiveRef\": \"#\"},\n      \"propertyNames\": {\"format\": \"regex\"},\n      \"default\": {}\n    },\n    \"dependentSchemas\": {\n      \"type\": \"object\",\n      \"additionalProperties\": {\n        \"$recursiveRef\": \"#\"\n      }\n    },\n    \"propertyNames\": {\"$recursiveRef\": \"#\"},\n    \"if\": {\"$recursiveRef\": \"#\"},\n    \"then\": {\"$recursiveRef\": \"#\"},\n    \"else\": {\"$recursiveRef\": \"#\"},\n    \"allOf\": {\"$ref\": \"#/$defs/schemaArray\"},\n    \"anyOf\": {\"$ref\": \"#/$defs/schemaArray\"},\n    \"oneOf\": {\"$ref\": \"#/$defs/schemaArray\"},\n    \"not\": {\"$recursiveRef\": \"#\"}\n  },\n  \"$defs\": {\n    \"schemaArray\": {\n      \"type\": \"array\",\n      \"minItems\": 1,\n      \"items\": {\"$recursiveRef\": \"#\"}\n    }\n  }\n}\n0/dist/refs/json-schema-2019-09/meta/content.json\u0001{\n  \"$schema\": \"https://json-schema.org/draft/2019-09/schema\",\n  \"$id\": \"https://json-schema.org/draft/2019-09/meta/content\",\n  \"$vocabulary\": {\n    \"https://json-schema.org/draft/2019-09/vocab/content\": true\n  },\n  \"$recursiveAnchor\": true,\n\n  \"title\": \"Content vocabulary meta-schema\",\n\n  \"type\": [\"object\", \"boolean\"],\n  \"properties\": {\n    \"contentMediaType\": {\"type\": \"string\"},\n    \"contentEncoding\": {\"type\": \"string\"},\n    \"contentSchema\": {\"$recursiveRef\": \"#\"}\n  }\n}\n3/dist/refs/json-schema-2019-09/meta/validation.json\b{\n  \"$schema\": \"https://json-schema.org/draft/2019-09/schema\",\n  \"$id\": \"https://json-schema.org/draft/2019-09/meta/validation\",\n  \"$vocabulary\": {\n    \"https://json-schema.org/draft/2019-09/vocab/validation\": true\n  },\n  \"$recursiveAnchor\": true,\n\n  \"title\": \"Validation vocabulary meta-schema\",\n  \"type\": [\"object\", \"boolean\"],\n  \"properties\": {\n    \"multipleOf\": {\n      \"type\": \"number\",\n      \"exclusiveMinimum\": 0\n    },\n    \"maximum\": {\n      \"type\": \"number\"\n    },\n    \"exclusiveMaximum\": {\n      \"type\": \"number\"\n    },\n    \"minimum\": {\n      \"type\": \"number\"\n    },\n    \"exclusiveMinimum\": {\n      \"type\": \"number\"\n    },\n    \"maxLength\": {\"$ref\": \"#/$defs/nonNegativeInteger\"},\n    \"minLength\": {\"$ref\": \"#/$defs/nonNegativeIntegerDefault0\"},\n    \"pattern\": {\n      \"type\": \"string\",\n      \"format\": \"regex\"\n    },\n    \"maxItems\": {\"$ref\": \"#/$defs/nonNegativeInteger\"},\n    \"minItems\": {\"$ref\": \"#/$defs/nonNegativeIntegerDefault0\"},\n    \"uniqueItems\": {\n      \"type\": \"boolean\",\n      \"default\": false\n    },\n    \"maxContains\": {\"$ref\": \"#/$defs/nonNegativeInteger\"},\n    \"minContains\": {\n      \"$ref\": \"#/$defs/nonNegativeInteger\",\n      \"default\": 1\n    },\n    \"maxProperties\": {\"$ref\": \"#/$defs/nonNegativeInteger\"},\n    \"minProperties\": {\"$ref\": \"#/$defs/nonNegativeIntegerDefault0\"},\n    \"required\": {\"$ref\": \"#/$defs/stringArray\"},\n    \"dependentRequired\": {\n      \"type\": \"object\",\n      \"additionalProperties\": {\n        \"$ref\": \"#/$defs/stringArray\"\n      }\n    },\n    \"const\": true,\n    \"enum\": {\n      \"type\": \"array\",\n      \"items\": true\n    },\n    \"type\": {\n      \"anyOf\": [\n        {\"$ref\": \"#/$defs/simpleTypes\"},\n        {\n          \"type\": \"array\",\n          \"items\": {\"$ref\": \"#/$defs/simpleTypes\"},\n          \"minItems\": 1,\n          \"uniqueItems\": true\n        }\n      ]\n    }\n  },\n  \"$defs\": {\n    \"nonNegativeInteger\": {\n      \"type\": \"integer\",\n      \"minimum\": 0\n    },\n    \"nonNegativeIntegerDefault0\": {\n      \"$ref\": \"#/$defs/nonNegativeInteger\",\n      \"default\": 0\n    },\n    \"simpleTypes\": {\n      \"enum\": [\"array\", \"boolean\", \"integer\", \"null\", \"number\", \"object\", \"string\"]\n    },\n    \"stringArray\": {\n      \"type\": \"array\",\n      \"items\": {\"type\": \"string\"},\n      \"uniqueItems\": true,\n      \"default\": []\n    }\n  }\n}\n /dist/vocabularies/errors.js.mapx{\"version\":3,\"file\":\"errors.js\",\"sourceRoot\":\"\",\"sources\":[\"../../lib/vocabularies/errors.ts\"],\"names\":[],\"mappings\":\"\"}/lib/compile/validate/index.tsKimport type {\n  AddedKeywordDefinition,\n  AnySchema,\n  AnySchemaObject,\n  KeywordErrorCxt,\n  KeywordCxtParams,\n} from \"../../types\"\nimport type {SchemaCxt, SchemaObjCxt} from \"..\"\nimport type {InstanceOptions} from \"../../core\"\nimport {boolOrEmptySchema, topBoolOrEmptySchema} from \"./boolSchema\"\nimport {coerceAndCheckDataType, getSchemaTypes} from \"./dataType\"\nimport {shouldUseGroup, shouldUseRule} from \"./applicability\"\nimport {checkDataType, checkDataTypes, reportTypeError, DataType} from \"./dataType\"\nimport {assignDefaults} from \"./defaults\"\nimport {funcKeywordCode, macroKeywordCode, validateKeywordUsage, validSchemaType} from \"./keyword\"\nimport {getSubschema, extendSubschemaData, SubschemaArgs, extendSubschemaMode} from \"./subschema\"\nimport {_, nil, str, or, not, getProperty, Block, Code, Name, CodeGen} from \"../codegen\"\nimport N from \"../names\"\nimport {resolveUrl} from \"../resolve\"\nimport {\n  schemaRefOrVal,\n  schemaHasRulesButRef,\n  checkUnknownRules,\n  checkStrictMode,\n  unescapeJsonPointer,\n  mergeEvaluated,\n} from \"../util\"\nimport type {JSONType, Rule, RuleGroup} from \"../rules\"\nimport {\n  ErrorPaths,\n  reportError,\n  reportExtraError,\n  resetErrorsCount,\n  keyword$DataError,\n} from \"../errors\"\n\n// schema compilation - generates validation function, subschemaCode (below) is used for subschemas\nexport function validateFunctionCode(it: SchemaCxt): void {\n  if (isSchemaObj(it)) {\n    checkKeywords(it)\n    if (schemaCxtHasRules(it)) {\n      topSchemaObjCode(it)\n      return\n    }\n  }\n  validateFunction(it, () => topBoolOrEmptySchema(it))\n}\n\nfunction validateFunction(\n  {gen, validateName, schema, schemaEnv, opts}: SchemaCxt,\n  body: Block\n): void {\n  if (opts.code.es5) {\n    gen.func(validateName, _`${N.data}, ${N.valCxt}`, schemaEnv.$async, () => {\n      gen.code(_`\"use strict\"; ${funcSourceUrl(schema, opts)}`)\n      destructureValCxtES5(gen, opts)\n      gen.code(body)\n    })\n  } else {\n    gen.func(validateName, _`${N.data}, ${destructureValCxt(opts)}`, schemaEnv.$async, () =>\n      gen.code(funcSourceUrl(schema, opts)).code(body)\n    )\n  }\n}\n\nfunction destructureValCxt(opts: InstanceOptions): Code {\n  return _`{${N.instancePath}=\"\", ${N.parentData}, ${N.parentDataProperty}, ${N.rootData}=${\n    N.data\n  }${opts.dynamicRef ? _`, ${N.dynamicAnchors}={}` : nil}}={}`\n}\n\nfunction destructureValCxtES5(gen: CodeGen, opts: InstanceOptions): void {\n  gen.if(\n    N.valCxt,\n    () => {\n      gen.var(N.instancePath, _`${N.valCxt}.${N.instancePath}`)\n      gen.var(N.parentData, _`${N.valCxt}.${N.parentData}`)\n      gen.var(N.parentDataProperty, _`${N.valCxt}.${N.parentDataProperty}`)\n      gen.var(N.rootData, _`${N.valCxt}.${N.rootData}`)\n      if (opts.dynamicRef) gen.var(N.dynamicAnchors, _`${N.valCxt}.${N.dynamicAnchors}`)\n    },\n    () => {\n      gen.var(N.instancePath, _`\"\"`)\n      gen.var(N.parentData, _`undefined`)\n      gen.var(N.parentDataProperty, _`undefined`)\n      gen.var(N.rootData, N.data)\n      if (opts.dynamicRef) gen.var(N.dynamicAnchors, _`{}`)\n    }\n  )\n}\n\nfunction topSchemaObjCode(it: SchemaObjCxt): void {\n  const {schema, opts, gen} = it\n  validateFunction(it, () => {\n    if (opts.$comment && schema.$comment) commentKeyword(it)\n    checkNoDefault(it)\n    gen.let(N.vErrors, null)\n    gen.let(N.errors, 0)\n    if (opts.unevaluated) resetEvaluated(it)\n    typeAndKeywords(it)\n    returnResults(it)\n  })\n  return\n}\n\nfunction resetEvaluated(it: SchemaObjCxt): void {\n  // TODO maybe some hook to execute it in the end to check whether props/items are Name, as in assignEvaluated\n  const {gen, validateName} = it\n  it.evaluated = gen.const(\"evaluated\", _`${validateName}.evaluated`)\n  gen.if(_`${it.evaluated}.dynamicProps`, () => gen.assign(_`${it.evaluated}.props`, _`undefined`))\n  gen.if(_`${it.evaluated}.dynamicItems`, () => gen.assign(_`${it.evaluated}.items`, _`undefined`))\n}\n\nfunction funcSourceUrl(schema: AnySchema, opts: InstanceOptions): Code {\n  const schId = typeof schema == \"object\" && schema[opts.schemaId]\n  return schId && (opts.code.source || opts.code.process) ? _`/*# sourceURL=${schId} */` : nil\n}\n\n// schema compilation - this function is used recursively to generate code for sub-schemas\nfunction subschemaCode(it: SchemaCxt, valid: Name): void {\n  if (isSchemaObj(it)) {\n    checkKeywords(it)\n    if (schemaCxtHasRules(it)) {\n      subSchemaObjCode(it, valid)\n      return\n    }\n  }\n  boolOrEmptySchema(it, valid)\n}\n\nfunction schemaCxtHasRules({schema, self}: SchemaCxt): boolean {\n  if (typeof schema == \"boolean\") return !schema\n  for (const key in schema) if (self.RULES.all[key]) return true\n  return false\n}\n\nfunction isSchemaObj(it: SchemaCxt): it is SchemaObjCxt {\n  return typeof it.schema != \"boolean\"\n}\n\nfunction subSchemaObjCode(it: SchemaObjCxt, valid: Name): void {\n  const {schema, gen, opts} = it\n  if (opts.$comment && schema.$comment) commentKeyword(it)\n  updateContext(it)\n  checkAsyncSchema(it)\n  const errsCount = gen.const(\"_errs\", N.errors)\n  typeAndKeywords(it, errsCount)\n  // TODO var\n  gen.var(valid, _`${errsCount} === ${N.errors}`)\n}\n\nfunction checkKeywords(it: SchemaObjCxt): void {\n  checkUnknownRules(it)\n  checkRefsAndKeywords(it)\n}\n\nfunction typeAndKeywords(it: SchemaObjCxt, errsCount?: Name): void {\n  if (it.opts.jtd) return schemaKeywords(it, [], false, errsCount)\n  const types = getSchemaTypes(it.schema)\n  const checkedTypes = coerceAndCheckDataType(it, types)\n  schemaKeywords(it, types, !checkedTypes, errsCount)\n}\n\nfunction checkRefsAndKeywords(it: SchemaObjCxt): void {\n  const {schema, errSchemaPath, opts, self} = it\n  if (schema.$ref && opts.ignoreKeywordsWithRef && schemaHasRulesButRef(schema, self.RULES)) {\n    self.logger.warn(`$ref: keywords ignored in schema at path \"${errSchemaPath}\"`)\n  }\n}\n\nfunction checkNoDefault(it: SchemaObjCxt): void {\n  const {schema, opts} = it\n  if (schema.default !== undefined && opts.useDefaults && opts.strictSchema) {\n    checkStrictMode(it, \"default is ignored in the schema root\")\n  }\n}\n\nfunction updateContext(it: SchemaObjCxt): void {\n  const schId = it.schema[it.opts.schemaId]\n  if (schId) it.baseId = resolveUrl(it.opts.uriResolver, it.baseId, schId)\n}\n\nfunction checkAsyncSchema(it: SchemaObjCxt): void {\n  if (it.schema.$async && !it.schemaEnv.$async) throw new Error(\"async schema in sync schema\")\n}\n\nfunction commentKeyword({gen, schemaEnv, schema, errSchemaPath, opts}: SchemaObjCxt): void {\n  const msg = schema.$comment\n  if (opts.$comment === true) {\n    gen.code(_`${N.self}.logger.log(${msg})`)\n  } else if (typeof opts.$comment == \"function\") {\n    const schemaPath = str`${errSchemaPath}/$comment`\n    const rootName = gen.scopeValue(\"root\", {ref: schemaEnv.root})\n    gen.code(_`${N.self}.opts.$comment(${msg}, ${schemaPath}, ${rootName}.schema)`)\n  }\n}\n\nfunction returnResults(it: SchemaCxt): void {\n  const {gen, schemaEnv, validateName, ValidationError, opts} = it\n  if (schemaEnv.$async) {\n    // TODO assign unevaluated\n    gen.if(\n      _`${N.errors} === 0`,\n      () => gen.return(N.data),\n      () => gen.throw(_`new ${ValidationError as Name}(${N.vErrors})`)\n    )\n  } else {\n    gen.assign(_`${validateName}.errors`, N.vErrors)\n    if (opts.unevaluated) assignEvaluated(it)\n    gen.return(_`${N.errors} === 0`)\n  }\n}\n\nfunction assignEvaluated({gen, evaluated, props, items}: SchemaCxt): void {\n  if (props instanceof Name) gen.assign(_`${evaluated}.props`, props)\n  if (items instanceof Name) gen.assign(_`${evaluated}.items`, items)\n}\n\nfunction schemaKeywords(\n  it: SchemaObjCxt,\n  types: JSONType[],\n  typeErrors: boolean,\n  errsCount?: Name\n): void {\n  const {gen, schema, data, allErrors, opts, self} = it\n  const {RULES} = self\n  if (schema.$ref && (opts.ignoreKeywordsWithRef || !schemaHasRulesButRef(schema, RULES))) {\n    gen.block(() => keywordCode(it, \"$ref\", (RULES.all.$ref as Rule).definition)) // TODO typecast\n    return\n  }\n  if (!opts.jtd) checkStrictTypes(it, types)\n  gen.block(() => {\n    for (const group of RULES.rules) groupKeywords(group)\n    groupKeywords(RULES.post)\n  })\n\n  function groupKeywords(group: RuleGroup): void {\n    if (!shouldUseGroup(schema, group)) return\n    if (group.type) {\n      gen.if(checkDataType(group.type, data, opts.strictNumbers))\n      iterateKeywords(it, group)\n      if (types.length === 1 && types[0] === group.type && typeErrors) {\n        gen.else()\n        reportTypeError(it)\n      }\n      gen.endIf()\n    } else {\n      iterateKeywords(it, group)\n    }\n    // TODO make it \"ok\" call?\n    if (!allErrors) gen.if(_`${N.errors} === ${errsCount || 0}`)\n  }\n}\n\nfunction iterateKeywords(it: SchemaObjCxt, group: RuleGroup): void {\n  const {\n    gen,\n    schema,\n    opts: {useDefaults},\n  } = it\n  if (useDefaults) assignDefaults(it, group.type)\n  gen.block(() => {\n    for (const rule of group.rules) {\n      if (shouldUseRule(schema, rule)) {\n        keywordCode(it, rule.keyword, rule.definition, group.type)\n      }\n    }\n  })\n}\n\nfunction checkStrictTypes(it: SchemaObjCxt, types: JSONType[]): void {\n  if (it.schemaEnv.meta || !it.opts.strictTypes) return\n  checkContextTypes(it, types)\n  if (!it.opts.allowUnionTypes) checkMultipleTypes(it, types)\n  checkKeywordTypes(it, it.dataTypes)\n}\n\nfunction checkContextTypes(it: SchemaObjCxt, types: JSONType[]): void {\n  if (!types.length) return\n  if (!it.dataTypes.length) {\n    it.dataTypes = types\n    return\n  }\n  types.forEach((t) => {\n    if (!includesType(it.dataTypes, t)) {\n      strictTypesError(it, `type \"${t}\" not allowed by context \"${it.dataTypes.join(\",\")}\"`)\n    }\n  })\n  narrowSchemaTypes(it, types)\n}\n\nfunction checkMultipleTypes(it: SchemaObjCxt, ts: JSONType[]): void {\n  if (ts.length > 1 && !(ts.length === 2 && ts.includes(\"null\"))) {\n    strictTypesError(it, \"use allowUnionTypes to allow union type keyword\")\n  }\n}\n\nfunction checkKeywordTypes(it: SchemaObjCxt, ts: JSONType[]): void {\n  const rules = it.self.RULES.all\n  for (const keyword in rules) {\n    const rule = rules[keyword]\n    if (typeof rule == \"object\" && shouldUseRule(it.schema, rule)) {\n      const {type} = rule.definition\n      if (type.length && !type.some((t) => hasApplicableType(ts, t))) {\n        strictTypesError(it, `missing type \"${type.join(\",\")}\" for keyword \"${keyword}\"`)\n      }\n    }\n  }\n}\n\nfunction hasApplicableType(schTs: JSONType[], kwdT: JSONType): boolean {\n  return schTs.includes(kwdT) || (kwdT === \"number\" && schTs.includes(\"integer\"))\n}\n\nfunction includesType(ts: JSONType[], t: JSONType): boolean {\n  return ts.includes(t) || (t === \"integer\" && ts.includes(\"number\"))\n}\n\nfunction narrowSchemaTypes(it: SchemaObjCxt, withTypes: JSONType[]): void {\n  const ts: JSONType[] = []\n  for (const t of it.dataTypes) {\n    if (includesType(withTypes, t)) ts.push(t)\n    else if (withTypes.includes(\"integer\") && t === \"number\") ts.push(\"integer\")\n  }\n  it.dataTypes = ts\n}\n\nfunction strictTypesError(it: SchemaObjCxt, msg: string): void {\n  const schemaPath = it.schemaEnv.baseId + it.errSchemaPath\n  msg += ` at \"${schemaPath}\" (strictTypes)`\n  checkStrictMode(it, msg, it.opts.strictTypes)\n}\n\nexport class KeywordCxt implements KeywordErrorCxt {\n  readonly gen: CodeGen\n  readonly allErrors?: boolean\n  readonly keyword: string\n  readonly data: Name // Name referencing the current level of the data instance\n  readonly $data?: string | false\n  schema: any // keyword value in the schema\n  readonly schemaValue: Code | number | boolean // Code reference to keyword schema value or primitive value\n  readonly schemaCode: Code | number | boolean // Code reference to resolved schema value (different if schema is $data)\n  readonly schemaType: JSONType[] // allowed type(s) of keyword value in the schema\n  readonly parentSchema: AnySchemaObject\n  readonly errsCount?: Name // Name reference to the number of validation errors collected before this keyword,\n  // requires option trackErrors in keyword definition\n  params: KeywordCxtParams // object to pass parameters to error messages from keyword code\n  readonly it: SchemaObjCxt // schema compilation context (schema is guaranteed to be an object, not boolean)\n  readonly def: AddedKeywordDefinition\n\n  constructor(it: SchemaObjCxt, def: AddedKeywordDefinition, keyword: string) {\n    validateKeywordUsage(it, def, keyword)\n    this.gen = it.gen\n    this.allErrors = it.allErrors\n    this.keyword = keyword\n    this.data = it.data\n    this.schema = it.schema[keyword]\n    this.$data = def.$data && it.opts.$data && this.schema && this.schema.$data\n    this.schemaValue = schemaRefOrVal(it, this.schema, keyword, this.$data)\n    this.schemaType = def.schemaType\n    this.parentSchema = it.schema\n    this.params = {}\n    this.it = it\n    this.def = def\n\n    if (this.$data) {\n      this.schemaCode = it.gen.const(\"vSchema\", getData(this.$data, it))\n    } else {\n      this.schemaCode = this.schemaValue\n      if (!validSchemaType(this.schema, def.schemaType, def.allowUndefined)) {\n        throw new Error(`${keyword} value must be ${JSON.stringify(def.schemaType)}`)\n      }\n    }\n\n    if (\"code\" in def ? def.trackErrors : def.errors !== false) {\n      this.errsCount = it.gen.const(\"_errs\", N.errors)\n    }\n  }\n\n  result(condition: Code, successAction?: () => void, failAction?: () => void): void {\n    this.failResult(not(condition), successAction, failAction)\n  }\n\n  failResult(condition: Code, successAction?: () => void, failAction?: () => void): void {\n    this.gen.if(condition)\n    if (failAction) failAction()\n    else this.error()\n    if (successAction) {\n      this.gen.else()\n      successAction()\n      if (this.allErrors) this.gen.endIf()\n    } else {\n      if (this.allErrors) this.gen.endIf()\n      else this.gen.else()\n    }\n  }\n\n  pass(condition: Code, failAction?: () => void): void {\n    this.failResult(not(condition), undefined, failAction)\n  }\n\n  fail(condition?: Code): void {\n    if (condition === undefined) {\n      this.error()\n      if (!this.allErrors) this.gen.if(false) // this branch will be removed by gen.optimize\n      return\n    }\n    this.gen.if(condition)\n    this.error()\n    if (this.allErrors) this.gen.endIf()\n    else this.gen.else()\n  }\n\n  fail$data(condition: Code): void {\n    if (!this.$data) return this.fail(condition)\n    const {schemaCode} = this\n    this.fail(_`${schemaCode} !== undefined && (${or(this.invalid$data(), condition)})`)\n  }\n\n  error(append?: boolean, errorParams?: KeywordCxtParams, errorPaths?: ErrorPaths): void {\n    if (errorParams) {\n      this.setParams(errorParams)\n      this._error(append, errorPaths)\n      this.setParams({})\n      return\n    }\n    this._error(append, errorPaths)\n  }\n\n  private _error(append?: boolean, errorPaths?: ErrorPaths): void {\n    ;(append ? reportExtraError : reportError)(this, this.def.error, errorPaths)\n  }\n\n  $dataError(): void {\n    reportError(this, this.def.$dataError || keyword$DataError)\n  }\n\n  reset(): void {\n    if (this.errsCount === undefined) throw new Error('add \"trackErrors\" to keyword definition')\n    resetErrorsCount(this.gen, this.errsCount)\n  }\n\n  ok(cond: Code | boolean): void {\n    if (!this.allErrors) this.gen.if(cond)\n  }\n\n  setParams(obj: KeywordCxtParams, assign?: true): void {\n    if (assign) Object.assign(this.params, obj)\n    else this.params = obj\n  }\n\n  block$data(valid: Name, codeBlock: () => void, $dataValid: Code = nil): void {\n    this.gen.block(() => {\n      this.check$data(valid, $dataValid)\n      codeBlock()\n    })\n  }\n\n  check$data(valid: Name = nil, $dataValid: Code = nil): void {\n    if (!this.$data) return\n    const {gen, schemaCode, schemaType, def} = this\n    gen.if(or(_`${schemaCode} === undefined`, $dataValid))\n    if (valid !== nil) gen.assign(valid, true)\n    if (schemaType.length || def.validateSchema) {\n      gen.elseIf(this.invalid$data())\n      this.$dataError()\n      if (valid !== nil) gen.assign(valid, false)\n    }\n    gen.else()\n  }\n\n  invalid$data(): Code {\n    const {gen, schemaCode, schemaType, def, it} = this\n    return or(wrong$DataType(), invalid$DataSchema())\n\n    function wrong$DataType(): Code {\n      if (schemaType.length) {\n        /* istanbul ignore if */\n        if (!(schemaCode instanceof Name)) throw new Error(\"ajv implementation error\")\n        const st = Array.isArray(schemaType) ? schemaType : [schemaType]\n        return _`${checkDataTypes(st, schemaCode, it.opts.strictNumbers, DataType.Wrong)}`\n      }\n      return nil\n    }\n\n    function invalid$DataSchema(): Code {\n      if (def.validateSchema) {\n        const validateSchemaRef = gen.scopeValue(\"validate$data\", {ref: def.validateSchema}) // TODO value.code for standalone\n        return _`!${validateSchemaRef}(${schemaCode})`\n      }\n      return nil\n    }\n  }\n\n  subschema(appl: SubschemaArgs, valid: Name): SchemaCxt {\n    const subschema = getSubschema(this.it, appl)\n    extendSubschemaData(subschema, this.it, appl)\n    extendSubschemaMode(subschema, appl)\n    const nextContext = {...this.it, ...subschema, items: undefined, props: undefined}\n    subschemaCode(nextContext, valid)\n    return nextContext\n  }\n\n  mergeEvaluated(schemaCxt: SchemaCxt, toName?: typeof Name): void {\n    const {it, gen} = this\n    if (!it.opts.unevaluated) return\n    if (it.props !== true && schemaCxt.props !== undefined) {\n      it.props = mergeEvaluated.props(gen, schemaCxt.props, it.props, toName)\n    }\n    if (it.items !== true && schemaCxt.items !== undefined) {\n      it.items = mergeEvaluated.items(gen, schemaCxt.items, it.items, toName)\n    }\n  }\n\n  mergeValidEvaluated(schemaCxt: SchemaCxt, valid: Name): boolean | void {\n    const {it, gen} = this\n    if (it.opts.unevaluated && (it.props !== true || it.items !== true)) {\n      gen.if(valid, () => this.mergeEvaluated(schemaCxt, Name))\n      return true\n    }\n  }\n}\n\nfunction keywordCode(\n  it: SchemaObjCxt,\n  keyword: string,\n  def: AddedKeywordDefinition,\n  ruleType?: JSONType\n): void {\n  const cxt = new KeywordCxt(it, def, keyword)\n  if (\"code\" in def) {\n    def.code(cxt, ruleType)\n  } else if (cxt.$data && def.validate) {\n    funcKeywordCode(cxt, def)\n  } else if (\"macro\" in def) {\n    macroKeywordCode(cxt, def)\n  } else if (def.compile || def.validate) {\n    funcKeywordCode(cxt, def)\n  }\n}\n\nconst JSON_POINTER = /^\\/(?:[^~]|~0|~1)*$/\nconst RELATIVE_JSON_POINTER = /^([0-9]+)(#|\\/(?:[^~]|~0|~1)*)?$/\nexport function getData(\n  $data: string,\n  {dataLevel, dataNames, dataPathArr}: SchemaCxt\n): Code | number {\n  let jsonPointer\n  let data: Code\n  if ($data === \"\") return N.rootData\n  if ($data[0] === \"/\") {\n    if (!JSON_POINTER.test($data)) throw new Error(`Invalid JSON-pointer: ${$data}`)\n    jsonPointer = $data\n    data = N.rootData\n  } else {\n    const matches = RELATIVE_JSON_POINTER.exec($data)\n    if (!matches) throw new Error(`Invalid JSON-pointer: ${$data}`)\n    const up: number = +matches[1]\n    jsonPointer = matches[2]\n    if (jsonPointer === \"#\") {\n      if (up >= dataLevel) throw new Error(errorMsg(\"property/index\", up))\n      return dataPathArr[dataLevel - up]\n    }\n    if (up > dataLevel) throw new Error(errorMsg(\"data\", up))\n    data = dataNames[dataLevel - up]\n    if (!jsonPointer) return data\n  }\n\n  let expr = data\n  const segments = jsonPointer.split(\"/\")\n  for (const segment of segments) {\n    if (segment) {\n      data = _`${data}${getProperty(unescapeJsonPointer(segment))}`\n      expr = _`${expr} && ${data}`\n    }\n  }\n  return expr\n\n  function errorMsg(pointerType: string, up: number): string {\n    return `Cannot access ${pointerType} ${up} levels up, current level is ${dataLevel}`\n  }\n}\n,/dist/vocabularies/validation/pattern.js.map\u0003{\"version\":3,\"file\":\"pattern.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../lib/vocabularies/validation/pattern.ts\"],\"names\":[],\"mappings\":\";;AAEA,kCAAkC;AAClC,mDAA4C;AAI5C,MAAM,KAAK,GAA2B;IACpC,OAAO,EAAE,CAAC,EAAC,UAAU,EAAC,EAAE,EAAE,CAAC,IAAA,aAAG,EAAA,uBAAuB,UAAU,GAAG;IAClE,MAAM,EAAE,CAAC,EAAC,UAAU,EAAC,EAAE,EAAE,CAAC,IAAA,WAAC,EAAA,aAAa,UAAU,GAAG;CACtD,CAAA;AAED,MAAM,GAAG,GAA0B;IACjC,OAAO,EAAE,SAAS;IAClB,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE,QAAQ;IACpB,KAAK,EAAE,IAAI;IACX,KAAK;IACL,IAAI,CAAC,GAAe;QAClB,MAAM,EAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,EAAC,GAAG,GAAG,CAAA;QACjD,8CAA8C;QAC9C,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAA;QAC1C,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,IAAA,WAAC,EAAA,eAAe,UAAU,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAA,iBAAU,EAAC,GAAG,EAAE,MAAM,CAAC,CAAA;QACrF,GAAG,CAAC,SAAS,CAAC,IAAA,WAAC,EAAA,IAAI,MAAM,SAAS,IAAI,GAAG,CAAC,CAAA;IAC5C,CAAC;CACF,CAAA;AAED,kBAAe,GAAG,CAAA\"}/dist/compile/errors.d.ts\u0003:import type { KeywordErrorCxt, KeywordErrorDefinition } from \"../types\";\nimport { CodeGen, Code, Name } from \"./codegen\";\nexport declare const keywordError: KeywordErrorDefinition;\nexport declare const keyword$DataError: KeywordErrorDefinition;\nexport interface ErrorPaths {\n    instancePath?: Code;\n    schemaPath?: string;\n    parentSchema?: boolean;\n}\nexport declare function reportError(cxt: KeywordErrorCxt, error?: KeywordErrorDefinition, errorPaths?: ErrorPaths, overrideAllErrors?: boolean): void;\nexport declare function reportExtraError(cxt: KeywordErrorCxt, error?: KeywordErrorDefinition, errorPaths?: ErrorPaths): void;\nexport declare function resetErrorsCount(gen: CodeGen, errsCount: Name): void;\nexport declare function extendErrors({ gen, keyword, schemaValue, data, errsCount, it, }: KeywordErrorCxt): void;\n/dist/compile/resolve.d.ts\u0002import type { AnySchema, AnySchemaObject, UriResolver } from \"../types\";\nimport type Ajv from \"../ajv\";\nimport type { URIComponents } from \"uri-js\";\nexport type LocalRefs = {\n    [Ref in string]?: AnySchemaObject;\n};\nexport declare function inlineRef(schema: AnySchema, limit?: boolean | number): boolean;\nexport declare function getFullPath(resolver: UriResolver, id?: string, normalize?: boolean): string;\nexport declare function _getFullPath(resolver: UriResolver, p: URIComponents): string;\nexport declare function normalizeId(id: string | undefined): string;\nexport declare function resolveUrl(resolver: UriResolver, baseId: string, id: string): string;\nexport declare function getSchemaRefs(this: Ajv, schema: AnySchema, baseId: string): LocalRefs;\n#/dist/compile/validate/index.js.mapQ{\"version\":3,\"file\":\"index.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../lib/compile/validate/index.ts\"],\"names\":[],\"mappings\":\"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\"}-/lib/vocabularies/applicator/propertyNames.ts\u0004import type {\n  CodeKeywordDefinition,\n  ErrorObject,\n  KeywordErrorDefinition,\n  AnySchema,\n} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, not} from \"../../compile/codegen\"\nimport {alwaysValidSchema} from \"../../compile/util\"\n\nexport type PropertyNamesError = ErrorObject<\"propertyNames\", {propertyName: string}, AnySchema>\n\nconst error: KeywordErrorDefinition = {\n  message: \"property name must be valid\",\n  params: ({params}) => _`{propertyName: ${params.propertyName}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"propertyNames\",\n  type: \"object\",\n  schemaType: [\"object\", \"boolean\"],\n  error,\n  code(cxt: KeywordCxt) {\n    const {gen, schema, data, it} = cxt\n    if (alwaysValidSchema(it, schema)) return\n    const valid = gen.name(\"valid\")\n\n    gen.forIn(\"key\", data, (key) => {\n      cxt.setParams({propertyName: key})\n      cxt.subschema(\n        {\n          keyword: \"propertyNames\",\n          data: key,\n          dataTypes: [\"string\"],\n          propertyName: key,\n          compositeRule: true,\n        },\n        valid\n      )\n      gen.if(not(valid), () => {\n        cxt.error(true)\n        if (!it.allErrors) gen.break()\n      })\n    })\n\n    cxt.ok(valid)\n  },\n}\n\nexport default def\n*/dist/vocabularies/applicator/index.js.map\u0002{\"version\":3,\"file\":\"index.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../lib/vocabularies/applicator/index.ts\"],\"names\":[],\"mappings\":\";;AACA,uDAAuE;AACvE,+CAAuC;AACvC,mCAA2B;AAC3B,2CAAiD;AACjD,yCAAkD;AAClD,iDAA8D;AAC9D,mDAAiE;AACjE,iEAAsF;AACtF,6CAAqC;AACrC,2DAAmD;AACnD,+BAAiD;AACjD,mCAAyC;AACzC,mCAAyC;AACzC,mCAA2B;AAC3B,6BAA8C;AAC9C,yCAAiC;AAEjC,SAAwB,aAAa,CAAC,SAAS,GAAG,KAAK;IACrD,MAAM,UAAU,GAAG;QACjB,MAAM;QACN,aAAU;QACV,eAAK;QACL,eAAK;QACL,eAAK;QACL,YAAS;QACT,kBAAQ;QACR,SAAS;QACT,uBAAa;QACb,8BAAoB;QACpB,sBAAY;QACZ,oBAAU;QACV,2BAAiB;KAClB,CAAA;IACD,QAAQ;IACR,IAAI,SAAS;QAAE,UAAU,CAAC,IAAI,CAAC,qBAAW,EAAE,mBAAS,CAAC,CAAA;;QACjD,UAAU,CAAC,IAAI,CAAC,yBAAe,EAAE,eAAK,CAAC,CAAA;IAC5C,UAAU,CAAC,IAAI,CAAC,kBAAQ,CAAC,CAAA;IACzB,OAAO,UAAU,CAAA;AACnB,CAAC;AArBD,gCAqBC\"}&/dist/vocabularies/validation/const.js\u0003T\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst equal_1 = require(\"../../runtime/equal\");\nconst error = {\n    message: \"must be equal to constant\",\n    params: ({ schemaCode }) => (0, codegen_1._) `{allowedValue: ${schemaCode}}`,\n};\nconst def = {\n    keyword: \"const\",\n    $data: true,\n    error,\n    code(cxt) {\n        const { gen, data, $data, schemaCode, schema } = cxt;\n        if ($data || (schema && typeof schema == \"object\")) {\n            cxt.fail$data((0, codegen_1._) `!${(0, util_1.useFunc)(gen, equal_1.default)}(${data}, ${schemaCode})`);\n        }\n        else {\n            cxt.fail((0, codegen_1._) `${schema} !== ${data}`);\n        }\n    },\n};\nexports.default = def;\n//# sourceMappingURL=const.js.map$/dist/vocabularies/jtd/metadata.d.tsimport { KeywordCxt } from \"../../ajv\";\nimport type { CodeKeywordDefinition } from \"../../types\";\ndeclare const def: CodeKeywordDefinition;\nexport declare function checkMetadata({ it, keyword }: KeywordCxt, metadata?: boolean): void;\nexport default def;\n&/dist/vocabularies/jtd/elements.js.map\u0003{\"version\":3,\"file\":\"elements.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../lib/vocabularies/jtd/elements.ts\"],\"names\":[],\"mappings\":\";;AAEA,6CAAoD;AACpD,kCAAqC;AACrC,mDAA4C;AAC5C,yCAAwC;AACxC,yCAAwC;AACxC,mCAAgD;AAIhD,MAAM,GAAG,GAA0B;IACjC,OAAO,EAAE,UAAU;IACnB,UAAU,EAAE,QAAQ;IACpB,KAAK,EAAE,IAAA,iBAAS,EAAC,OAAO,CAAC;IACzB,IAAI,CAAC,GAAe;QAClB,IAAA,wBAAa,EAAC,GAAG,CAAC,CAAA;QAClB,MAAM,EAAC,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAC,GAAG,GAAG,CAAA;QACnC,IAAI,IAAA,wBAAiB,EAAC,EAAE,EAAE,MAAM,CAAC;YAAE,OAAM;QACzC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAA,wBAAa,EAAC,GAAG,CAAC,CAAA;QAClC,GAAG,CAAC,EAAE,CAAC,IAAA,aAAG,EAAC,KAAK,CAAC,EAAE,GAAG,EAAE,CACtB,GAAG,CAAC,EAAE,CACJ,IAAA,WAAC,EAAA,iBAAiB,IAAI,GAAG,EACzB,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,IAAA,oBAAa,EAAC,GAAG,CAAC,CAAC,EAC3C,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,CAClB,CACF,CAAA;QACD,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,CAAA;IACf,CAAC;CACF,CAAA;AAED,kBAAe,GAAG,CAAA\"}/lib/runtime/uri.tsĠimport * as uri from \"uri-js\"\n\ntype URI = typeof uri & {code: string}\n;(uri as URI).code = 'require(\"ajv/dist/runtime/uri\").default'\n\nexport default uri as URI\n /dist/vocabularies/draft7.js.map\u0001H{\"version\":3,\"file\":\"draft7.js\",\"sourceRoot\":\"\",\"sources\":[\"../../lib/vocabularies/draft7.ts\"],\"names\":[],\"mappings\":\";;AACA,iCAAmC;AACnC,6CAA+C;AAC/C,6CAAkD;AAClD,qCAAuC;AACvC,yCAAgE;AAEhE,MAAM,kBAAkB,GAAiB;IACvC,cAAc;IACd,oBAAoB;IACpB,IAAA,oBAAuB,GAAE;IACzB,gBAAgB;IAChB,6BAAkB;IAClB,4BAAiB;CAClB,CAAA;AAED,kBAAe,kBAAkB,CAAA\"}'/dist/vocabularies/dynamic/index.js.map\u0001\u0016{\"version\":3,\"file\":\"index.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../lib/vocabularies/dynamic/index.ts\"],\"names\":[],\"mappings\":\";;AACA,mDAA2C;AAC3C,6CAAqC;AACrC,uDAA+C;AAC/C,iDAAyC;AAEzC,MAAM,OAAO,GAAe,CAAC,uBAAa,EAAE,oBAAU,EAAE,yBAAe,EAAE,sBAAY,CAAC,CAAA;AAEtF,kBAAe,OAAO,CAAA\"}&/dist/vocabularies/applicator/allOf.js\u0002\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst util_1 = require(\"../../compile/util\");\nconst def = {\n    keyword: \"allOf\",\n    schemaType: \"array\",\n    code(cxt) {\n        const { gen, schema, it } = cxt;\n        /* istanbul ignore if */\n        if (!Array.isArray(schema))\n            throw new Error(\"ajv implementation error\");\n        const valid = gen.name(\"valid\");\n        schema.forEach((sch, i) => {\n            if ((0, util_1.alwaysValidSchema)(it, sch))\n                return;\n            const schCxt = cxt.subschema({ keyword: \"allOf\", schemaProp: i }, valid);\n            cxt.ok(valid);\n            cxt.mergeEvaluated(schCxt);\n        });\n    },\n};\nexports.default = def;\n//# sourceMappingURL=allOf.js.map/dist/vocabularies/jtd/union.js\u0001W\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst code_1 = require(\"../code\");\nconst def = {\n    keyword: \"union\",\n    schemaType: \"array\",\n    trackErrors: true,\n    code: code_1.validateUnion,\n    error: { message: \"must match a schema in union\" },\n};\nexports.default = def;\n//# sourceMappingURL=union.js.map/dist/runtime/uri.d.tsĄimport * as uri from \"uri-js\";\ntype URI = typeof uri & {\n    code: string;\n};\ndeclare const _default: URI;\nexport default _default;\n+/lib/vocabularies/validation/limitLength.ts\u0004\u0001import type {CodeKeywordDefinition, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str, operators} from \"../../compile/codegen\"\nimport {useFunc} from \"../../compile/util\"\nimport ucs2length from \"../../runtime/ucs2length\"\n\nconst error: KeywordErrorDefinition = {\n  message({keyword, schemaCode}) {\n    const comp = keyword === \"maxLength\" ? \"more\" : \"fewer\"\n    return str`must NOT have ${comp} than ${schemaCode} characters`\n  },\n  params: ({schemaCode}) => _`{limit: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: [\"maxLength\", \"minLength\"],\n  type: \"string\",\n  schemaType: \"number\",\n  $data: true,\n  error,\n  code(cxt: KeywordCxt) {\n    const {keyword, data, schemaCode, it} = cxt\n    const op = keyword === \"maxLength\" ? operators.GT : operators.LT\n    const len =\n      it.opts.unicode === false ? _`${data}.length` : _`${useFunc(cxt.gen, ucs2length)}(${data})`\n    cxt.fail$data(_`${len} ${op} ${schemaCode}`)\n  },\n}\n\nexport default def\n2/dist/refs/json-schema-2019-09/meta/meta-data.json\u0002{\n  \"$schema\": \"https://json-schema.org/draft/2019-09/schema\",\n  \"$id\": \"https://json-schema.org/draft/2019-09/meta/meta-data\",\n  \"$vocabulary\": {\n    \"https://json-schema.org/draft/2019-09/vocab/meta-data\": true\n  },\n  \"$recursiveAnchor\": true,\n\n  \"title\": \"Meta-data vocabulary meta-schema\",\n\n  \"type\": [\"object\", \"boolean\"],\n  \"properties\": {\n    \"title\": {\n      \"type\": \"string\"\n    },\n    \"description\": {\n      \"type\": \"string\"\n    },\n    \"default\": true,\n    \"deprecated\": {\n      \"type\": \"boolean\",\n      \"default\": false\n    },\n    \"readOnly\": {\n      \"type\": \"boolean\",\n      \"default\": false\n    },\n    \"writeOnly\": {\n      \"type\": \"boolean\",\n      \"default\": false\n    },\n    \"examples\": {\n      \"type\": \"array\",\n      \"items\": true\n    }\n  }\n}\n'/dist/vocabularies/unevaluated/index.js\u0001^\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst unevaluatedProperties_1 = require(\"./unevaluatedProperties\");\nconst unevaluatedItems_1 = require(\"./unevaluatedItems\");\nconst unevaluated = [unevaluatedProperties_1.default, unevaluatedItems_1.default];\nexports.default = unevaluated;\n//# sourceMappingURL=index.js.map-/dist/vocabularies/validation/required.js.map\u000bb{\"version\":3,\"file\":\"required.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../lib/vocabularies/validation/required.ts\"],\"names\":[],\"mappings\":\"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\"}/dist/refs/data.json\u0001{\n  \"$id\": \"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#\",\n  \"description\": \"Meta-schema for $data reference (JSON AnySchema extension proposal)\",\n  \"type\": \"object\",\n  \"required\": [\"$data\"],\n  \"properties\": {\n    \"$data\": {\n      \"type\": \"string\",\n      \"anyOf\": [{\"format\": \"relative-json-pointer\"}, {\"format\": \"json-pointer\"}]\n    }\n  },\n  \"additionalProperties\": false\n}\n/dist/types/jtd-schema.js.mapy{\"version\":3,\"file\":\"jtd-schema.js\",\"sourceRoot\":\"\",\"sources\":[\"../../lib/types/jtd-schema.ts\"],\"names\":[],\"mappings\":\"\"}&/lib/vocabularies/unevaluated/index.ts\u0001\u0001import type {Vocabulary} from \"../../types\"\nimport unevaluatedProperties from \"./unevaluatedProperties\"\nimport unevaluatedItems from \"./unevaluatedItems\"\n\nconst unevaluated: Vocabulary = [unevaluatedProperties, unevaluatedItems]\n\nexport default unevaluated\n*/dist/vocabularies/applicator/items.js.map\u0007{\"version\":3,\"file\":\"items.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../lib/vocabularies/applicator/items.ts\"],\"names\":[],\"mappings\":\";;;AAEA,mDAAuC;AACvC,6CAAqF;AACrF,kCAAqC;AAErC,MAAM,GAAG,GAA0B;IACjC,OAAO,EAAE,OAAO;IAChB,IAAI,EAAE,OAAO;IACb,UAAU,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,SAAS,CAAC;IAC1C,MAAM,EAAE,aAAa;IACrB,IAAI,CAAC,GAAe;QAClB,MAAM,EAAC,MAAM,EAAE,EAAE,EAAC,GAAG,GAAG,CAAA;QACxB,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;YAAE,OAAO,aAAa,CAAC,GAAG,EAAE,iBAAiB,EAAE,MAAM,CAAC,CAAA;QAC/E,EAAE,CAAC,KAAK,GAAG,IAAI,CAAA;QACf,IAAI,IAAA,wBAAiB,EAAC,EAAE,EAAE,MAAM,CAAC;YAAE,OAAM;QACzC,GAAG,CAAC,EAAE,CAAC,IAAA,oBAAa,EAAC,GAAG,CAAC,CAAC,CAAA;IAC5B,CAAC;CACF,CAAA;AAED,SAAgB,aAAa,CAC3B,GAAe,EACf,UAAkB,EAClB,SAAsB,GAAG,CAAC,MAAM;IAEhC,MAAM,EAAC,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAC,GAAG,GAAG,CAAA;IAClD,gBAAgB,CAAC,YAAY,CAAC,CAAA;IAC9B,IAAI,EAAE,CAAC,IAAI,CAAC,WAAW,IAAI,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,KAAK,KAAK,IAAI,EAAE;QAC7D,EAAE,CAAC,KAAK,GAAG,qBAAc,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,CAAA;KAC9D;IACD,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAC/B,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,IAAA,WAAC,EAAA,GAAG,IAAI,SAAS,CAAC,CAAA;IAC/C,MAAM,CAAC,OAAO,CAAC,CAAC,GAAc,EAAE,CAAS,EAAE,EAAE;QAC3C,IAAI,IAAA,wBAAiB,EAAC,EAAE,EAAE,GAAG,CAAC;YAAE,OAAM;QACtC,GAAG,CAAC,EAAE,CAAC,IAAA,WAAC,EAAA,GAAG,GAAG,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,CAC5B,GAAG,CAAC,SAAS,CACX;YACE,OAAO;YACP,UAAU,EAAE,CAAC;YACb,QAAQ,EAAE,CAAC;SACZ,EACD,KAAK,CACN,CACF,CAAA;QACD,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,CAAA;IACf,CAAC,CAAC,CAAA;IAEF,SAAS,gBAAgB,CAAC,GAAoB;QAC5C,MAAM,EAAC,IAAI,EAAE,aAAa,EAAC,GAAG,EAAE,CAAA;QAChC,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAA;QACvB,MAAM,SAAS,GAAG,CAAC,KAAK,GAAG,CAAC,QAAQ,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,UAAU,CAAC,KAAK,KAAK,CAAC,CAAA;QACzF,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,SAAS,EAAE;YACnC,MAAM,GAAG,GAAG,IAAI,OAAO,QAAQ,CAAC,oCAAoC,UAAU,4CAA4C,aAAa,GAAG,CAAA;YAC1I,IAAA,sBAAe,EAAC,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,YAAY,CAAC,CAAA;SAC5C;IACH,CAAC;AACH,CAAC;AApCD,sCAoCC;AAED,kBAAe,GAAG,CAAA\"}/dist/vocabularies/core/id.js\u0001\u000b\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst def = {\n    keyword: \"id\",\n    code() {\n        throw new Error('NOT SUPPORTED: keyword \"id\", use \"$id\" for schema ID');\n    },\n};\nexports.default = def;\n//# sourceMappingURL=id.js.map*/dist/vocabularies/applicator/anyOf.js.map\u0001G{\"version\":3,\"file\":\"anyOf.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../lib/vocabularies/applicator/anyOf.ts\"],\"names\":[],\"mappings\":\";;AACA,kCAAqC;AAIrC,MAAM,GAAG,GAA0B;IACjC,OAAO,EAAE,OAAO;IAChB,UAAU,EAAE,OAAO;IACnB,WAAW,EAAE,IAAI;IACjB,IAAI,EAAE,oBAAa;IACnB,KAAK,EAAE,EAAC,OAAO,EAAE,8BAA8B,EAAC;CACjD,CAAA;AAED,kBAAe,GAAG,CAAA\"}+/dist/refs/json-schema-2020-12/index.js.map\u0002{\"version\":3,\"file\":\"index.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../lib/refs/json-schema-2020-12/index.ts\"],\"names\":[],\"mappings\":\";;AAEA,4CAA2C;AAC3C,qDAAoD;AACpD,uDAAsD;AACtD,+CAA8C;AAC9C,yCAAwC;AACxC,wDAAuD;AACvD,kDAAiD;AACjD,qDAAoD;AAEpD,MAAM,iBAAiB,GAAG,CAAC,aAAa,CAAC,CAAA;AAEzC,SAAwB,iBAAiB,CAAY,KAAe;IAClE,CAAC;IAAA;QACC,UAAU;QACV,UAAU;QACV,WAAW;QACX,OAAO;QACP,IAAI;QACJ,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC;QACvB,QAAQ;QACR,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC;KAC5B,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,CAAA;IAC7D,OAAO,IAAI,CAAA;IAEX,SAAS,SAAS,CAAC,GAAQ,EAAE,GAAoB;QAC/C,OAAO,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;IAClE,CAAC;AACH,CAAC;AAhBD,oCAgBC\"}(/dist/compile/validate/boolSchema.js.map\u00052{\"version\":3,\"file\":\"boolSchema.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../lib/compile/validate/boolSchema.ts\"],\"names\":[],\"mappings\":\";;;AAEA,sCAAqC;AACrC,wCAAkC;AAClC,oCAAwB;AAExB,MAAM,SAAS,GAA2B;IACxC,OAAO,EAAE,yBAAyB;CACnC,CAAA;AAED,SAAgB,oBAAoB,CAAC,EAAa;IAChD,MAAM,EAAC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAC,GAAG,EAAE,CAAA;IACtC,IAAI,MAAM,KAAK,KAAK,EAAE;QACpB,gBAAgB,CAAC,EAAE,EAAE,KAAK,CAAC,CAAA;KAC5B;SAAM,IAAI,OAAO,MAAM,IAAI,QAAQ,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI,EAAE;QAC9D,GAAG,CAAC,MAAM,CAAC,eAAC,CAAC,IAAI,CAAC,CAAA;KACnB;SAAM;QACL,GAAG,CAAC,MAAM,CAAC,IAAA,WAAC,EAAA,GAAG,YAAY,SAAS,EAAE,IAAI,CAAC,CAAA;QAC3C,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;KACjB;AACH,CAAC;AAVD,oDAUC;AAED,SAAgB,iBAAiB,CAAC,EAAa,EAAE,KAAW;IAC1D,MAAM,EAAC,GAAG,EAAE,MAAM,EAAC,GAAG,EAAE,CAAA;IACxB,IAAI,MAAM,KAAK,KAAK,EAAE;QACpB,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA,CAAC,WAAW;QACjC,gBAAgB,CAAC,EAAE,CAAC,CAAA;KACrB;SAAM;QACL,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA,CAAC,WAAW;KACjC;AACH,CAAC;AARD,8CAQC;AAED,SAAS,gBAAgB,CAAC,EAAa,EAAE,iBAA2B;IAClE,MAAM,EAAC,GAAG,EAAE,IAAI,EAAC,GAAG,EAAE,CAAA;IACtB,sFAAsF;IACtF,MAAM,GAAG,GAAoB;QAC3B,GAAG;QACH,OAAO,EAAE,cAAc;QACvB,IAAI;QACJ,MAAM,EAAE,KAAK;QACb,UAAU,EAAE,KAAK;QACjB,WAAW,EAAE,KAAK;QAClB,MAAM,EAAE,EAAE;QACV,EAAE;KACH,CAAA;IACD,IAAA,oBAAW,EAAC,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,iBAAiB,CAAC,CAAA;AAC3D,CAAC\"}/dist/runtime/re2.js.mapĶ{\"version\":3,\"file\":\"re2.js\",\"sourceRoot\":\"\",\"sources\":[\"../../lib/runtime/re2.ts\"],\"names\":[],\"mappings\":\";;AAAA,2BAA0B;AAGxB,GAAW,CAAC,IAAI,GAAG,yCAAyC,CAAA;AAE9D,kBAAe,GAAU,CAAA\"} /lib/runtime/validation_error.ts\u0001Pimport type {ErrorObject} from \"../types\"\n\nexport default class ValidationError extends Error {\n  readonly errors: Partial<ErrorObject>[]\n  readonly ajv: true\n  readonly validation: true\n\n  constructor(errors: Partial<ErrorObject>[]) {\n    super(\"validation failed\")\n    this.errors = errors\n    this.ajv = this.validation = true\n  }\n}\n+/dist/vocabularies/unevaluated/index.js.map{\"version\":3,\"file\":\"index.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../lib/vocabularies/unevaluated/index.ts\"],\"names\":[],\"mappings\":\";;AACA,mEAA2D;AAC3D,yDAAiD;AAEjD,MAAM,WAAW,GAAe,CAAC,+BAAqB,EAAE,0BAAgB,CAAC,CAAA;AAEzE,kBAAe,WAAW,CAAA\"},/lib/refs/json-schema-2020-12/meta/core.json\u0005@{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"$id\": \"https://json-schema.org/draft/2020-12/meta/core\",\n  \"$vocabulary\": {\n    \"https://json-schema.org/draft/2020-12/vocab/core\": true\n  },\n  \"$dynamicAnchor\": \"meta\",\n\n  \"title\": \"Core vocabulary meta-schema\",\n  \"type\": [\"object\", \"boolean\"],\n  \"properties\": {\n    \"$id\": {\n      \"$ref\": \"#/$defs/uriReferenceString\",\n      \"$comment\": \"Non-empty fragments not allowed.\",\n      \"pattern\": \"^[^#]*#?$\"\n    },\n    \"$schema\": {\"$ref\": \"#/$defs/uriString\"},\n    \"$ref\": {\"$ref\": \"#/$defs/uriReferenceString\"},\n    \"$anchor\": {\"$ref\": \"#/$defs/anchorString\"},\n    \"$dynamicRef\": {\"$ref\": \"#/$defs/uriReferenceString\"},\n    \"$dynamicAnchor\": {\"$ref\": \"#/$defs/anchorString\"},\n    \"$vocabulary\": {\n      \"type\": \"object\",\n      \"propertyNames\": {\"$ref\": \"#/$defs/uriString\"},\n      \"additionalProperties\": {\n        \"type\": \"boolean\"\n      }\n    },\n    \"$comment\": {\n      \"type\": \"string\"\n    },\n    \"$defs\": {\n      \"type\": \"object\",\n      \"additionalProperties\": {\"$dynamicRef\": \"#meta\"}\n    }\n  },\n  \"$defs\": {\n    \"anchorString\": {\n      \"type\": \"string\",\n      \"pattern\": \"^[A-Za-z_][-A-Za-z0-9._]*$\"\n    },\n    \"uriString\": {\n      \"type\": \"string\",\n      \"format\": \"uri\"\n    },\n    \"uriReferenceString\": {\n      \"type\": \"string\",\n      \"format\": \"uri-reference\"\n    }\n  }\n}\n2/dist/refs/json-schema-2020-12/meta/meta-data.json\u0002{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"$id\": \"https://json-schema.org/draft/2020-12/meta/meta-data\",\n  \"$vocabulary\": {\n    \"https://json-schema.org/draft/2020-12/vocab/meta-data\": true\n  },\n  \"$dynamicAnchor\": \"meta\",\n\n  \"title\": \"Meta-data vocabulary meta-schema\",\n\n  \"type\": [\"object\", \"boolean\"],\n  \"properties\": {\n    \"title\": {\n      \"type\": \"string\"\n    },\n    \"description\": {\n      \"type\": \"string\"\n    },\n    \"default\": true,\n    \"deprecated\": {\n      \"type\": \"boolean\",\n      \"default\": false\n    },\n    \"readOnly\": {\n      \"type\": \"boolean\",\n      \"default\": false\n    },\n    \"writeOnly\": {\n      \"type\": \"boolean\",\n      \"default\": false\n    },\n    \"examples\": {\n      \"type\": \"array\",\n      \"items\": true\n    }\n  }\n}\n/dist/vocabularies/jtd/ref.js\nX\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.hasRef = void 0;\nconst compile_1 = require(\"../../compile\");\nconst codegen_1 = require(\"../../compile/codegen\");\nconst ref_error_1 = require(\"../../compile/ref_error\");\nconst names_1 = require(\"../../compile/names\");\nconst ref_1 = require(\"../core/ref\");\nconst metadata_1 = require(\"./metadata\");\nconst def = {\n    keyword: \"ref\",\n    schemaType: \"string\",\n    code(cxt) {\n        (0, metadata_1.checkMetadata)(cxt);\n        const { gen, data, schema: ref, parentSchema, it } = cxt;\n        const { schemaEnv: { root }, } = it;\n        const valid = gen.name(\"valid\");\n        if (parentSchema.nullable) {\n            gen.var(valid, (0, codegen_1._) `${data} === null`);\n            gen.if((0, codegen_1.not)(valid), validateJtdRef);\n        }\n        else {\n            gen.var(valid, false);\n            validateJtdRef();\n        }\n        cxt.ok(valid);\n        function validateJtdRef() {\n            var _a;\n            const refSchema = (_a = root.schema.definitions) === null || _a === void 0 ? void 0 : _a[ref];\n            if (!refSchema) {\n                throw new ref_error_1.default(it.opts.uriResolver, \"\", ref, `No definition ${ref}`);\n            }\n            if (hasRef(refSchema) || !it.opts.inlineRefs)\n                callValidate(refSchema);\n            else\n                inlineRefSchema(refSchema);\n        }\n        function callValidate(schema) {\n            const sch = compile_1.compileSchema.call(it.self, new compile_1.SchemaEnv({ schema, root, schemaPath: `/definitions/${ref}` }));\n            const v = (0, ref_1.getValidate)(cxt, sch);\n            const errsCount = gen.const(\"_errs\", names_1.default.errors);\n            (0, ref_1.callRef)(cxt, v, sch, sch.$async);\n            gen.assign(valid, (0, codegen_1._) `${errsCount} === ${names_1.default.errors}`);\n        }\n        function inlineRefSchema(schema) {\n            const schName = gen.scopeValue(\"schema\", it.opts.code.source === true ? { ref: schema, code: (0, codegen_1.stringify)(schema) } : { ref: schema });\n            cxt.subschema({\n                schema,\n                dataTypes: [],\n                schemaPath: codegen_1.nil,\n                topSchemaRef: schName,\n                errSchemaPath: `/definitions/${ref}`,\n            }, valid);\n        }\n    },\n};\nfunction hasRef(schema) {\n    for (const key in schema) {\n        let sch;\n        if (key === \"ref\" || (typeof (sch = schema[key]) == \"object\" && hasRef(sch)))\n            return true;\n    }\n    return false;\n}\nexports.hasRef = hasRef;\nexports.default = def;\n//# sourceMappingURL=ref.js.map./dist/vocabularies/validation/limitLength.d.tsximport type { CodeKeywordDefinition } from \"../../types\";\ndeclare const def: CodeKeywordDefinition;\nexport default def;\n/lib/standalone/index.ts\u00107import type AjvCore from \"../core\"\nimport type {AnyValidateFunction, SourceCode} from \"../types\"\nimport type {SchemaEnv} from \"../compile\"\nimport {UsedScopeValues, UsedValueState, ValueScopeName, varKinds} from \"../compile/codegen/scope\"\nimport {_, nil, _Code, Code, getProperty, getEsmExportName} from \"../compile/codegen/code\"\n\nfunction standaloneCode(\n  ajv: AjvCore,\n  refsOrFunc?: {[K in string]?: string} | AnyValidateFunction\n): string {\n  if (!ajv.opts.code.source) {\n    throw new Error(\"moduleCode: ajv instance must have code.source option\")\n  }\n  const {_n} = ajv.scope.opts\n  return typeof refsOrFunc == \"function\"\n    ? funcExportCode(refsOrFunc.source)\n    : refsOrFunc !== undefined\n    ? multiExportsCode<string>(refsOrFunc, getValidate)\n    : multiExportsCode<SchemaEnv>(ajv.schemas, (sch) =>\n        sch.meta ? undefined : ajv.compile(sch.schema)\n      )\n\n  function getValidate(id: string): AnyValidateFunction {\n    const v = ajv.getSchema(id)\n    if (!v) throw new Error(`moduleCode: no schema with id ${id}`)\n    return v\n  }\n\n  function funcExportCode(source?: SourceCode): string {\n    const usedValues: UsedScopeValues = {}\n    const n = source?.validateName\n    const vCode = validateCode(usedValues, source)\n    if (ajv.opts.code.esm) {\n      // Always do named export as `validate` rather than the variable `n` which is `validateXX` for known export value\n      return `\"use strict\";${_n}export const validate = ${n};${_n}export default ${n};${_n}${vCode}`\n    }\n    return `\"use strict\";${_n}module.exports = ${n};${_n}module.exports.default = ${n};${_n}${vCode}`\n  }\n\n  function multiExportsCode<T extends SchemaEnv | string>(\n    schemas: {[K in string]?: T},\n    getValidateFunc: (schOrId: T) => AnyValidateFunction | undefined\n  ): string {\n    const usedValues: UsedScopeValues = {}\n    let code = _`\"use strict\";`\n    for (const name in schemas) {\n      const v = getValidateFunc(schemas[name] as T)\n      if (v) {\n        const vCode = validateCode(usedValues, v.source)\n        const exportSyntax = ajv.opts.code.esm\n          ? _`export const ${getEsmExportName(name)}`\n          : _`exports${getProperty(name)}`\n        code = _`${code}${_n}${exportSyntax} = ${v.source?.validateName};${_n}${vCode}`\n      }\n    }\n    return `${code}`\n  }\n\n  function validateCode(usedValues: UsedScopeValues, s?: SourceCode): Code {\n    if (!s) throw new Error('moduleCode: function does not have \"source\" property')\n    if (usedState(s.validateName) === UsedValueState.Completed) return nil\n    setUsedState(s.validateName, UsedValueState.Started)\n\n    const scopeCode = ajv.scope.scopeCode(s.scopeValues, usedValues, refValidateCode)\n    const code = new _Code(`${scopeCode}${_n}${s.validateCode}`)\n    return s.evaluated ? _`${code}${s.validateName}.evaluated = ${s.evaluated};${_n}` : code\n\n    function refValidateCode(n: ValueScopeName): Code | undefined {\n      const vRef = n.value?.ref\n      if (n.prefix === \"validate\" && typeof vRef == \"function\") {\n        const v = vRef as AnyValidateFunction\n        return validateCode(usedValues, v.source)\n      } else if ((n.prefix === \"root\" || n.prefix === \"wrapper\") && typeof vRef == \"object\") {\n        const {validate, validateName} = vRef as SchemaEnv\n        if (!validateName) throw new Error(\"ajv internal error\")\n        const def = ajv.opts.code.es5 ? varKinds.var : varKinds.const\n        const wrapper = _`${def} ${n} = {validate: ${validateName}};`\n        if (usedState(validateName) === UsedValueState.Started) return wrapper\n        const vCode = validateCode(usedValues, validate?.source)\n        return _`${wrapper}${_n}${vCode}`\n      }\n      return undefined\n    }\n\n    function usedState(name: ValueScopeName): UsedValueState | undefined {\n      return usedValues[name.prefix]?.get(name)\n    }\n\n    function setUsedState(name: ValueScopeName, state: UsedValueState): void {\n      const {prefix} = name\n      const names = (usedValues[prefix] = usedValues[prefix] || new Map())\n      names.set(name, state)\n    }\n  }\n}\n\nmodule.exports = exports = standaloneCode\nObject.defineProperty(exports, \"__esModule\", {value: true})\n\nexport default standaloneCode\n#/dist/vocabularies/jtd/error.js.map\u0002{\"version\":3,\"file\":\"error.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../lib/vocabularies/jtd/error.ts\"],\"names\":[],\"mappings\":\";;;AACA,mDAA6C;AAQ7C,SAAgB,SAAS,CAAC,CAAS;IACjC,OAAO;QACL,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,gBAAgB,CAAC,GAAG,EAAE,CAAC,CAAC;QAC1C,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,eAAe,CAAC,GAAG,EAAE,CAAC,CAAC;KACzC,CAAA;AACH,CAAC;AALD,8BAKC;AAED,SAAgB,gBAAgB,CAAC,EAAC,YAAY,EAAkB,EAAE,CAAS;IACzE,OAAO,CAAA,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,QAAQ,EAAC,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,CAAA;AACzE,CAAC;AAFD,4CAEC;AAED,SAAgB,eAAe,CAAC,EAAC,YAAY,EAAkB,EAAE,CAAS;IACxE,OAAO,IAAA,WAAC,EAAA,UAAU,CAAC,eAAe,CAAC,CAAC,CAAA,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,QAAQ,CAAA,GAAG,CAAA;AAC/D,CAAC;AAFD,0CAEC\"}/dist/runtime/re2.d.tsāimport * as re2 from \"re2\";\ntype Re2 = typeof re2 & {\n    code: string;\n};\ndeclare const _default: Re2;\nexport default _default;\n,/dist/vocabularies/validation/limitLength.js\u0004j\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst ucs2length_1 = require(\"../../runtime/ucs2length\");\nconst error = {\n    message({ keyword, schemaCode }) {\n        const comp = keyword === \"maxLength\" ? \"more\" : \"fewer\";\n        return (0, codegen_1.str) `must NOT have ${comp} than ${schemaCode} characters`;\n    },\n    params: ({ schemaCode }) => (0, codegen_1._) `{limit: ${schemaCode}}`,\n};\nconst def = {\n    keyword: [\"maxLength\", \"minLength\"],\n    type: \"string\",\n    schemaType: \"number\",\n    $data: true,\n    error,\n    code(cxt) {\n        const { keyword, data, schemaCode, it } = cxt;\n        const op = keyword === \"maxLength\" ? codegen_1.operators.GT : codegen_1.operators.LT;\n        const len = it.opts.unicode === false ? (0, codegen_1._) `${data}.length` : (0, codegen_1._) `${(0, util_1.useFunc)(cxt.gen, ucs2length_1.default)}(${data})`;\n        cxt.fail$data((0, codegen_1._) `${len} ${op} ${schemaCode}`);\n    },\n};\nexports.default = def;\n//# sourceMappingURL=limitLength.js.map./dist/vocabularies/applicator/prefixItems.d.tsximport type { CodeKeywordDefinition } from \"../../types\";\ndeclare const def: CodeKeywordDefinition;\nexport default def;\n0/dist/vocabularies/applicator/propertyNames.d.tsimport type { CodeKeywordDefinition, ErrorObject, AnySchema } from \"../../types\";\nexport type PropertyNamesError = ErrorObject<\"propertyNames\", {\n    propertyName: string;\n}, AnySchema>;\ndeclare const def: CodeKeywordDefinition;\nexport default def;\n /dist/vocabularies/core/ref.d.ts\u0001import type { CodeKeywordDefinition } from \"../../types\";\nimport type { KeywordCxt } from \"../../compile/validate\";\nimport { Code } from \"../../compile/codegen\";\nimport { SchemaEnv } from \"../../compile\";\ndeclare const def: CodeKeywordDefinition;\nexport declare function getValidate(cxt: KeywordCxt, sch: SchemaEnv): Code;\nexport declare function callRef(cxt: KeywordCxt, v: Code, sch?: SchemaEnv, $async?: boolean): void;\nexport default def;\n/dist/core.js.mapRJ{\"version\":3,\"file\":\"core.js\",\"sourceRoot\":\"\",\"sources\":[\"../lib/core.ts\"],\"names\":[],\"mappings\":\"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\"}/dist/compile/index.js&\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.resolveSchema = exports.getCompilingSchema = exports.resolveRef = exports.compileSchema = exports.SchemaEnv = void 0;\nconst codegen_1 = require(\"./codegen\");\nconst validation_error_1 = require(\"../runtime/validation_error\");\nconst names_1 = require(\"./names\");\nconst resolve_1 = require(\"./resolve\");\nconst util_1 = require(\"./util\");\nconst validate_1 = require(\"./validate\");\nclass SchemaEnv {\n    constructor(env) {\n        var _a;\n        this.refs = {};\n        this.dynamicAnchors = {};\n        let schema;\n        if (typeof env.schema == \"object\")\n            schema = env.schema;\n        this.schema = env.schema;\n        this.schemaId = env.schemaId;\n        this.root = env.root || this;\n        this.baseId = (_a = env.baseId) !== null && _a !== void 0 ? _a : (0, resolve_1.normalizeId)(schema === null || schema === void 0 ? void 0 : schema[env.schemaId || \"$id\"]);\n        this.schemaPath = env.schemaPath;\n        this.localRefs = env.localRefs;\n        this.meta = env.meta;\n        this.$async = schema === null || schema === void 0 ? void 0 : schema.$async;\n        this.refs = {};\n    }\n}\nexports.SchemaEnv = SchemaEnv;\n// let codeSize = 0\n// let nodeCount = 0\n// Compiles schema in SchemaEnv\nfunction compileSchema(sch) {\n    // TODO refactor - remove compilations\n    const _sch = getCompilingSchema.call(this, sch);\n    if (_sch)\n        return _sch;\n    const rootId = (0, resolve_1.getFullPath)(this.opts.uriResolver, sch.root.baseId); // TODO if getFullPath removed 1 tests fails\n    const { es5, lines } = this.opts.code;\n    const { ownProperties } = this.opts;\n    const gen = new codegen_1.CodeGen(this.scope, { es5, lines, ownProperties });\n    let _ValidationError;\n    if (sch.$async) {\n        _ValidationError = gen.scopeValue(\"Error\", {\n            ref: validation_error_1.default,\n            code: (0, codegen_1._) `require(\"ajv/dist/runtime/validation_error\").default`,\n        });\n    }\n    const validateName = gen.scopeName(\"validate\");\n    sch.validateName = validateName;\n    const schemaCxt = {\n        gen,\n        allErrors: this.opts.allErrors,\n        data: names_1.default.data,\n        parentData: names_1.default.parentData,\n        parentDataProperty: names_1.default.parentDataProperty,\n        dataNames: [names_1.default.data],\n        dataPathArr: [codegen_1.nil],\n        dataLevel: 0,\n        dataTypes: [],\n        definedProperties: new Set(),\n        topSchemaRef: gen.scopeValue(\"schema\", this.opts.code.source === true\n            ? { ref: sch.schema, code: (0, codegen_1.stringify)(sch.schema) }\n            : { ref: sch.schema }),\n        validateName,\n        ValidationError: _ValidationError,\n        schema: sch.schema,\n        schemaEnv: sch,\n        rootId,\n        baseId: sch.baseId || rootId,\n        schemaPath: codegen_1.nil,\n        errSchemaPath: sch.schemaPath || (this.opts.jtd ? \"\" : \"#\"),\n        errorPath: (0, codegen_1._) `\"\"`,\n        opts: this.opts,\n        self: this,\n    };\n    let sourceCode;\n    try {\n        this._compilations.add(sch);\n        (0, validate_1.validateFunctionCode)(schemaCxt);\n        gen.optimize(this.opts.code.optimize);\n        // gen.optimize(1)\n        const validateCode = gen.toString();\n        sourceCode = `${gen.scopeRefs(names_1.default.scope)}return ${validateCode}`;\n        // console.log((codeSize += sourceCode.length), (nodeCount += gen.nodeCount))\n        if (this.opts.code.process)\n            sourceCode = this.opts.code.process(sourceCode, sch);\n        // console.log(\"\\n\\n\\n *** \\n\", sourceCode)\n        const makeValidate = new Function(`${names_1.default.self}`, `${names_1.default.scope}`, sourceCode);\n        const validate = makeValidate(this, this.scope.get());\n        this.scope.value(validateName, { ref: validate });\n        validate.errors = null;\n        validate.schema = sch.schema;\n        validate.schemaEnv = sch;\n        if (sch.$async)\n            validate.$async = true;\n        if (this.opts.code.source === true) {\n            validate.source = { validateName, validateCode, scopeValues: gen._values };\n        }\n        if (this.opts.unevaluated) {\n            const { props, items } = schemaCxt;\n            validate.evaluated = {\n                props: props instanceof codegen_1.Name ? undefined : props,\n                items: items instanceof codegen_1.Name ? undefined : items,\n                dynamicProps: props instanceof codegen_1.Name,\n                dynamicItems: items instanceof codegen_1.Name,\n            };\n            if (validate.source)\n                validate.source.evaluated = (0, codegen_1.stringify)(validate.evaluated);\n        }\n        sch.validate = validate;\n        return sch;\n    }\n    catch (e) {\n        delete sch.validate;\n        delete sch.validateName;\n        if (sourceCode)\n            this.logger.error(\"Error compiling schema, function code:\", sourceCode);\n        // console.log(\"\\n\\n\\n *** \\n\", sourceCode, this.opts)\n        throw e;\n    }\n    finally {\n        this._compilations.delete(sch);\n    }\n}\nexports.compileSchema = compileSchema;\nfunction resolveRef(root, baseId, ref) {\n    var _a;\n    ref = (0, resolve_1.resolveUrl)(this.opts.uriResolver, baseId, ref);\n    const schOrFunc = root.refs[ref];\n    if (schOrFunc)\n        return schOrFunc;\n    let _sch = resolve.call(this, root, ref);\n    if (_sch === undefined) {\n        const schema = (_a = root.localRefs) === null || _a === void 0 ? void 0 : _a[ref]; // TODO maybe localRefs should hold SchemaEnv\n        const { schemaId } = this.opts;\n        if (schema)\n            _sch = new SchemaEnv({ schema, schemaId, root, baseId });\n    }\n    if (_sch === undefined)\n        return;\n    return (root.refs[ref] = inlineOrCompile.call(this, _sch));\n}\nexports.resolveRef = resolveRef;\nfunction inlineOrCompile(sch) {\n    if ((0, resolve_1.inlineRef)(sch.schema, this.opts.inlineRefs))\n        return sch.schema;\n    return sch.validate ? sch : compileSchema.call(this, sch);\n}\n// Index of schema compilation in the currently compiled list\nfunction getCompilingSchema(schEnv) {\n    for (const sch of this._compilations) {\n        if (sameSchemaEnv(sch, schEnv))\n            return sch;\n    }\n}\nexports.getCompilingSchema = getCompilingSchema;\nfunction sameSchemaEnv(s1, s2) {\n    return s1.schema === s2.schema && s1.root === s2.root && s1.baseId === s2.baseId;\n}\n// resolve and compile the references ($ref)\n// TODO returns AnySchemaObject (if the schema can be inlined) or validation function\nfunction resolve(root, // information about the root schema for the current schema\nref // reference to resolve\n) {\n    let sch;\n    while (typeof (sch = this.refs[ref]) == \"string\")\n        ref = sch;\n    return sch || this.schemas[ref] || resolveSchema.call(this, root, ref);\n}\n// Resolve schema, its root and baseId\nfunction resolveSchema(root, // root object with properties schema, refs TODO below SchemaEnv is assigned to it\nref // reference to resolve\n) {\n    const p = this.opts.uriResolver.parse(ref);\n    const refPath = (0, resolve_1._getFullPath)(this.opts.uriResolver, p);\n    let baseId = (0, resolve_1.getFullPath)(this.opts.uriResolver, root.baseId, undefined);\n    // TODO `Object.keys(root.schema).length > 0` should not be needed - but removing breaks 2 tests\n    if (Object.keys(root.schema).length > 0 && refPath === baseId) {\n        return getJsonPointer.call(this, p, root);\n    }\n    const id = (0, resolve_1.normalizeId)(refPath);\n    const schOrRef = this.refs[id] || this.schemas[id];\n    if (typeof schOrRef == \"string\") {\n        const sch = resolveSchema.call(this, root, schOrRef);\n        if (typeof (sch === null || sch === void 0 ? void 0 : sch.schema) !== \"object\")\n            return;\n        return getJsonPointer.call(this, p, sch);\n    }\n    if (typeof (schOrRef === null || schOrRef === void 0 ? void 0 : schOrRef.schema) !== \"object\")\n        return;\n    if (!schOrRef.validate)\n        compileSchema.call(this, schOrRef);\n    if (id === (0, resolve_1.normalizeId)(ref)) {\n        const { schema } = schOrRef;\n        const { schemaId } = this.opts;\n        const schId = schema[schemaId];\n        if (schId)\n            baseId = (0, resolve_1.resolveUrl)(this.opts.uriResolver, baseId, schId);\n        return new SchemaEnv({ schema, schemaId, root, baseId });\n    }\n    return getJsonPointer.call(this, p, schOrRef);\n}\nexports.resolveSchema = resolveSchema;\nconst PREVENT_SCOPE_CHANGE = new Set([\n    \"properties\",\n    \"patternProperties\",\n    \"enum\",\n    \"dependencies\",\n    \"definitions\",\n]);\nfunction getJsonPointer(parsedRef, { baseId, schema, root }) {\n    var _a;\n    if (((_a = parsedRef.fragment) === null || _a === void 0 ? void 0 : _a[0]) !== \"/\")\n        return;\n    for (const part of parsedRef.fragment.slice(1).split(\"/\")) {\n        if (typeof schema === \"boolean\")\n            return;\n        const partSchema = schema[(0, util_1.unescapeFragment)(part)];\n        if (partSchema === undefined)\n            return;\n        schema = partSchema;\n        // TODO PREVENT_SCOPE_CHANGE could be defined in keyword def?\n        const schId = typeof schema === \"object\" && schema[this.opts.schemaId];\n        if (!PREVENT_SCOPE_CHANGE.has(part) && schId) {\n            baseId = (0, resolve_1.resolveUrl)(this.opts.uriResolver, baseId, schId);\n        }\n    }\n    let env;\n    if (typeof schema != \"boolean\" && schema.$ref && !(0, util_1.schemaHasRulesButRef)(schema, this.RULES)) {\n        const $ref = (0, resolve_1.resolveUrl)(this.opts.uriResolver, baseId, schema.$ref);\n        env = resolveSchema.call(this, root, $ref);\n    }\n    // even though resolution failed we need to return SchemaEnv to throw exception\n    // so that compileAsync loads missing schema.\n    const { schemaId } = this.opts;\n    env = env || new SchemaEnv({ schema, schemaId, root, baseId });\n    if (env.schema !== env.root.schema)\n        return env;\n    return undefined;\n}\n//# sourceMappingURL=index.js.map4/dist/vocabularies/unevaluated/unevaluatedItems.d.tsimport type { CodeKeywordDefinition, ErrorObject, AnySchema } from \"../../types\";\nexport type UnevaluatedItemsError = ErrorObject<\"unevaluatedItems\", {\n    limit: number;\n}, AnySchema>;\ndeclare const def: CodeKeywordDefinition;\nexport default def;\n//lib/vocabularies/applicator/additionalItems.ts\u0007 import type {\n  CodeKeywordDefinition,\n  ErrorObject,\n  KeywordErrorDefinition,\n  AnySchema,\n} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str, not, Name} from \"../../compile/codegen\"\nimport {alwaysValidSchema, checkStrictMode, Type} from \"../../compile/util\"\n\nexport type AdditionalItemsError = ErrorObject<\"additionalItems\", {limit: number}, AnySchema>\n\nconst error: KeywordErrorDefinition = {\n  message: ({params: {len}}) => str`must NOT have more than ${len} items`,\n  params: ({params: {len}}) => _`{limit: ${len}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"additionalItems\" as const,\n  type: \"array\",\n  schemaType: [\"boolean\", \"object\"],\n  before: \"uniqueItems\",\n  error,\n  code(cxt: KeywordCxt) {\n    const {parentSchema, it} = cxt\n    const {items} = parentSchema\n    if (!Array.isArray(items)) {\n      checkStrictMode(it, '\"additionalItems\" is ignored when \"items\" is not an array of schemas')\n      return\n    }\n    validateAdditionalItems(cxt, items)\n  },\n}\n\nexport function validateAdditionalItems(cxt: KeywordCxt, items: AnySchema[]): void {\n  const {gen, schema, data, keyword, it} = cxt\n  it.items = true\n  const len = gen.const(\"len\", _`${data}.length`)\n  if (schema === false) {\n    cxt.setParams({len: items.length})\n    cxt.pass(_`${len} <= ${items.length}`)\n  } else if (typeof schema == \"object\" && !alwaysValidSchema(it, schema)) {\n    const valid = gen.var(\"valid\", _`${len} <= ${items.length}`) // TODO var\n    gen.if(not(valid), () => validateItems(valid))\n    cxt.ok(valid)\n  }\n\n  function validateItems(valid: Name): void {\n    gen.forRange(\"i\", items.length, len, (i) => {\n      cxt.subschema({keyword, dataProp: i, dataPropType: Type.Num}, valid)\n      if (!it.allErrors) gen.if(not(valid), () => gen.break())\n    })\n  }\n}\n\nexport default def\n2/dist/vocabularies/applicator/propertyNames.js.map\u0004{\"version\":3,\"file\":\"propertyNames.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../lib/vocabularies/applicator/propertyNames.ts\"],\"names\":[],\"mappings\":\";;AAOA,mDAA4C;AAC5C,6CAAoD;AAIpD,MAAM,KAAK,GAA2B;IACpC,OAAO,EAAE,6BAA6B;IACtC,MAAM,EAAE,CAAC,EAAC,MAAM,EAAC,EAAE,EAAE,CAAC,IAAA,WAAC,EAAA,kBAAkB,MAAM,CAAC,YAAY,GAAG;CAChE,CAAA;AAED,MAAM,GAAG,GAA0B;IACjC,OAAO,EAAE,eAAe;IACxB,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC;IACjC,KAAK;IACL,IAAI,CAAC,GAAe;QAClB,MAAM,EAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAC,GAAG,GAAG,CAAA;QACnC,IAAI,IAAA,wBAAiB,EAAC,EAAE,EAAE,MAAM,CAAC;YAAE,OAAM;QACzC,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAE/B,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE;YAC7B,GAAG,CAAC,SAAS,CAAC,EAAC,YAAY,EAAE,GAAG,EAAC,CAAC,CAAA;YAClC,GAAG,CAAC,SAAS,CACX;gBACE,OAAO,EAAE,eAAe;gBACxB,IAAI,EAAE,GAAG;gBACT,SAAS,EAAE,CAAC,QAAQ,CAAC;gBACrB,YAAY,EAAE,GAAG;gBACjB,aAAa,EAAE,IAAI;aACpB,EACD,KAAK,CACN,CAAA;YACD,GAAG,CAAC,EAAE,CAAC,IAAA,aAAG,EAAC,KAAK,CAAC,EAAE,GAAG,EAAE;gBACtB,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;gBACf,IAAI,CAAC,EAAE,CAAC,SAAS;oBAAE,GAAG,CAAC,KAAK,EAAE,CAAA;YAChC,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,CAAA;IACf,CAAC;CACF,CAAA;AAED,kBAAe,GAAG,CAAA\"}/dist/compile/jtd/parse.js5\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst types_1 = require(\"./types\");\nconst __1 = require(\"..\");\nconst codegen_1 = require(\"../codegen\");\nconst ref_error_1 = require(\"../ref_error\");\nconst names_1 = require(\"../names\");\nconst code_1 = require(\"../../vocabularies/code\");\nconst ref_1 = require(\"../../vocabularies/jtd/ref\");\nconst type_1 = require(\"../../vocabularies/jtd/type\");\nconst parseJson_1 = require(\"../../runtime/parseJson\");\nconst util_1 = require(\"../util\");\nconst timestamp_1 = require(\"../../runtime/timestamp\");\nconst genParse = {\n    elements: parseElements,\n    values: parseValues,\n    discriminator: parseDiscriminator,\n    properties: parseProperties,\n    optionalProperties: parseProperties,\n    enum: parseEnum,\n    type: parseType,\n    ref: parseRef,\n};\nfunction compileParser(sch, definitions) {\n    const _sch = __1.getCompilingSchema.call(this, sch);\n    if (_sch)\n        return _sch;\n    const { es5, lines } = this.opts.code;\n    const { ownProperties } = this.opts;\n    const gen = new codegen_1.CodeGen(this.scope, { es5, lines, ownProperties });\n    const parseName = gen.scopeName(\"parse\");\n    const cxt = {\n        self: this,\n        gen,\n        schema: sch.schema,\n        schemaEnv: sch,\n        definitions,\n        data: names_1.default.data,\n        parseName,\n        char: gen.name(\"c\"),\n    };\n    let sourceCode;\n    try {\n        this._compilations.add(sch);\n        sch.parseName = parseName;\n        parserFunction(cxt);\n        gen.optimize(this.opts.code.optimize);\n        const parseFuncCode = gen.toString();\n        sourceCode = `${gen.scopeRefs(names_1.default.scope)}return ${parseFuncCode}`;\n        const makeParse = new Function(`${names_1.default.scope}`, sourceCode);\n        const parse = makeParse(this.scope.get());\n        this.scope.value(parseName, { ref: parse });\n        sch.parse = parse;\n    }\n    catch (e) {\n        if (sourceCode)\n            this.logger.error(\"Error compiling parser, function code:\", sourceCode);\n        delete sch.parse;\n        delete sch.parseName;\n        throw e;\n    }\n    finally {\n        this._compilations.delete(sch);\n    }\n    return sch;\n}\nexports.default = compileParser;\nconst undef = (0, codegen_1._) `undefined`;\nfunction parserFunction(cxt) {\n    const { gen, parseName, char } = cxt;\n    gen.func(parseName, (0, codegen_1._) `${names_1.default.json}, ${names_1.default.jsonPos}, ${names_1.default.jsonPart}`, false, () => {\n        gen.let(names_1.default.data);\n        gen.let(char);\n        gen.assign((0, codegen_1._) `${parseName}.message`, undef);\n        gen.assign((0, codegen_1._) `${parseName}.position`, undef);\n        gen.assign(names_1.default.jsonPos, (0, codegen_1._) `${names_1.default.jsonPos} || 0`);\n        gen.const(names_1.default.jsonLen, (0, codegen_1._) `${names_1.default.json}.length`);\n        parseCode(cxt);\n        skipWhitespace(cxt);\n        gen.if(names_1.default.jsonPart, () => {\n            gen.assign((0, codegen_1._) `${parseName}.position`, names_1.default.jsonPos);\n            gen.return(names_1.default.data);\n        });\n        gen.if((0, codegen_1._) `${names_1.default.jsonPos} === ${names_1.default.jsonLen}`, () => gen.return(names_1.default.data));\n        jsonSyntaxError(cxt);\n    });\n}\nfunction parseCode(cxt) {\n    let form;\n    for (const key of types_1.jtdForms) {\n        if (key in cxt.schema) {\n            form = key;\n            break;\n        }\n    }\n    if (form)\n        parseNullable(cxt, genParse[form]);\n    else\n        parseEmpty(cxt);\n}\nconst parseBoolean = parseBooleanToken(true, parseBooleanToken(false, jsonSyntaxError));\nfunction parseNullable(cxt, parseForm) {\n    const { gen, schema, data } = cxt;\n    if (!schema.nullable)\n        return parseForm(cxt);\n    tryParseToken(cxt, \"null\", parseForm, () => gen.assign(data, null));\n}\nfunction parseElements(cxt) {\n    const { gen, schema, data } = cxt;\n    parseToken(cxt, \"[\");\n    const ix = gen.let(\"i\", 0);\n    gen.assign(data, (0, codegen_1._) `[]`);\n    parseItems(cxt, \"]\", () => {\n        const el = gen.let(\"el\");\n        parseCode({ ...cxt, schema: schema.elements, data: el });\n        gen.assign((0, codegen_1._) `${data}[${ix}++]`, el);\n    });\n}\nfunction parseValues(cxt) {\n    const { gen, schema, data } = cxt;\n    parseToken(cxt, \"{\");\n    gen.assign(data, (0, codegen_1._) `{}`);\n    parseItems(cxt, \"}\", () => parseKeyValue(cxt, schema.values));\n}\nfunction parseItems(cxt, endToken, block) {\n    tryParseItems(cxt, endToken, block);\n    parseToken(cxt, endToken);\n}\nfunction tryParseItems(cxt, endToken, block) {\n    const { gen } = cxt;\n    gen.for((0, codegen_1._) `;${names_1.default.jsonPos}<${names_1.default.jsonLen} && ${jsonSlice(1)}!==${endToken};`, () => {\n        block();\n        tryParseToken(cxt, \",\", () => gen.break(), hasItem);\n    });\n    function hasItem() {\n        tryParseToken(cxt, endToken, () => { }, jsonSyntaxError);\n    }\n}\nfunction parseKeyValue(cxt, schema) {\n    const { gen } = cxt;\n    const key = gen.let(\"key\");\n    parseString({ ...cxt, data: key });\n    parseToken(cxt, \":\");\n    parsePropertyValue(cxt, key, schema);\n}\nfunction parseDiscriminator(cxt) {\n    const { gen, data, schema } = cxt;\n    const { discriminator, mapping } = schema;\n    parseToken(cxt, \"{\");\n    gen.assign(data, (0, codegen_1._) `{}`);\n    const startPos = gen.const(\"pos\", names_1.default.jsonPos);\n    const value = gen.let(\"value\");\n    const tag = gen.let(\"tag\");\n    tryParseItems(cxt, \"}\", () => {\n        const key = gen.let(\"key\");\n        parseString({ ...cxt, data: key });\n        parseToken(cxt, \":\");\n        gen.if((0, codegen_1._) `${key} === ${discriminator}`, () => {\n            parseString({ ...cxt, data: tag });\n            gen.assign((0, codegen_1._) `${data}[${key}]`, tag);\n            gen.break();\n        }, () => parseEmpty({ ...cxt, data: value }) // can be discarded/skipped\n        );\n    });\n    gen.assign(names_1.default.jsonPos, startPos);\n    gen.if((0, codegen_1._) `${tag} === undefined`);\n    parsingError(cxt, (0, codegen_1.str) `discriminator tag not found`);\n    for (const tagValue in mapping) {\n        gen.elseIf((0, codegen_1._) `${tag} === ${tagValue}`);\n        parseSchemaProperties({ ...cxt, schema: mapping[tagValue] }, discriminator);\n    }\n    gen.else();\n    parsingError(cxt, (0, codegen_1.str) `discriminator value not in schema`);\n    gen.endIf();\n}\nfunction parseProperties(cxt) {\n    const { gen, data } = cxt;\n    parseToken(cxt, \"{\");\n    gen.assign(data, (0, codegen_1._) `{}`);\n    parseSchemaProperties(cxt);\n}\nfunction parseSchemaProperties(cxt, discriminator) {\n    const { gen, schema, data } = cxt;\n    const { properties, optionalProperties, additionalProperties } = schema;\n    parseItems(cxt, \"}\", () => {\n        const key = gen.let(\"key\");\n        parseString({ ...cxt, data: key });\n        parseToken(cxt, \":\");\n        gen.if(false);\n        parseDefinedProperty(cxt, key, properties);\n        parseDefinedProperty(cxt, key, optionalProperties);\n        if (discriminator) {\n            gen.elseIf((0, codegen_1._) `${key} === ${discriminator}`);\n            const tag = gen.let(\"tag\");\n            parseString({ ...cxt, data: tag }); // can be discarded, it is already assigned\n        }\n        gen.else();\n        if (additionalProperties) {\n            parseEmpty({ ...cxt, data: (0, codegen_1._) `${data}[${key}]` });\n        }\n        else {\n            parsingError(cxt, (0, codegen_1.str) `property ${key} not allowed`);\n        }\n        gen.endIf();\n    });\n    if (properties) {\n        const hasProp = (0, code_1.hasPropFunc)(gen);\n        const allProps = (0, codegen_1.and)(...Object.keys(properties).map((p) => (0, codegen_1._) `${hasProp}.call(${data}, ${p})`));\n        gen.if((0, codegen_1.not)(allProps), () => parsingError(cxt, (0, codegen_1.str) `missing required properties`));\n    }\n}\nfunction parseDefinedProperty(cxt, key, schemas = {}) {\n    const { gen } = cxt;\n    for (const prop in schemas) {\n        gen.elseIf((0, codegen_1._) `${key} === ${prop}`);\n        parsePropertyValue(cxt, key, schemas[prop]);\n    }\n}\nfunction parsePropertyValue(cxt, key, schema) {\n    parseCode({ ...cxt, schema, data: (0, codegen_1._) `${cxt.data}[${key}]` });\n}\nfunction parseType(cxt) {\n    const { gen, schema, data, self } = cxt;\n    switch (schema.type) {\n        case \"boolean\":\n            parseBoolean(cxt);\n            break;\n        case \"string\":\n            parseString(cxt);\n            break;\n        case \"timestamp\": {\n            parseString(cxt);\n            const vts = (0, util_1.useFunc)(gen, timestamp_1.default);\n            const { allowDate, parseDate } = self.opts;\n            const notValid = allowDate ? (0, codegen_1._) `!${vts}(${data}, true)` : (0, codegen_1._) `!${vts}(${data})`;\n            const fail = parseDate\n                ? (0, codegen_1.or)(notValid, (0, codegen_1._) `(${data} = new Date(${data}), false)`, (0, codegen_1._) `isNaN(${data}.valueOf())`)\n                : notValid;\n            gen.if(fail, () => parsingError(cxt, (0, codegen_1.str) `invalid timestamp`));\n            break;\n        }\n        case \"float32\":\n        case \"float64\":\n            parseNumber(cxt);\n            break;\n        default: {\n            const t = schema.type;\n            if (!self.opts.int32range && (t === \"int32\" || t === \"uint32\")) {\n                parseNumber(cxt, 16); // 2 ** 53 - max safe integer\n                if (t === \"uint32\") {\n                    gen.if((0, codegen_1._) `${data} < 0`, () => parsingError(cxt, (0, codegen_1.str) `integer out of range`));\n                }\n            }\n            else {\n                const [min, max, maxDigits] = type_1.intRange[t];\n                parseNumber(cxt, maxDigits);\n                gen.if((0, codegen_1._) `${data} < ${min} || ${data} > ${max}`, () => parsingError(cxt, (0, codegen_1.str) `integer out of range`));\n            }\n        }\n    }\n}\nfunction parseString(cxt) {\n    parseToken(cxt, '\"');\n    parseWith(cxt, parseJson_1.parseJsonString);\n}\nfunction parseEnum(cxt) {\n    const { gen, data, schema } = cxt;\n    const enumSch = schema.enum;\n    parseToken(cxt, '\"');\n    // TODO loopEnum\n    gen.if(false);\n    for (const value of enumSch) {\n        const valueStr = JSON.stringify(value).slice(1); // remove starting quote\n        gen.elseIf((0, codegen_1._) `${jsonSlice(valueStr.length)} === ${valueStr}`);\n        gen.assign(data, (0, codegen_1.str) `${value}`);\n        gen.add(names_1.default.jsonPos, valueStr.length);\n    }\n    gen.else();\n    jsonSyntaxError(cxt);\n    gen.endIf();\n}\nfunction parseNumber(cxt, maxDigits) {\n    const { gen } = cxt;\n    skipWhitespace(cxt);\n    gen.if((0, codegen_1._) `\"-0123456789\".indexOf(${jsonSlice(1)}) < 0`, () => jsonSyntaxError(cxt), () => parseWith(cxt, parseJson_1.parseJsonNumber, maxDigits));\n}\nfunction parseBooleanToken(bool, fail) {\n    return (cxt) => {\n        const { gen, data } = cxt;\n        tryParseToken(cxt, `${bool}`, () => fail(cxt), () => gen.assign(data, bool));\n    };\n}\nfunction parseRef(cxt) {\n    const { gen, self, definitions, schema, schemaEnv } = cxt;\n    const { ref } = schema;\n    const refSchema = definitions[ref];\n    if (!refSchema)\n        throw new ref_error_1.default(self.opts.uriResolver, \"\", ref, `No definition ${ref}`);\n    if (!(0, ref_1.hasRef)(refSchema))\n        return parseCode({ ...cxt, schema: refSchema });\n    const { root } = schemaEnv;\n    const sch = compileParser.call(self, new __1.SchemaEnv({ schema: refSchema, root }), definitions);\n    partialParse(cxt, getParser(gen, sch), true);\n}\nfunction getParser(gen, sch) {\n    return sch.parse\n        ? gen.scopeValue(\"parse\", { ref: sch.parse })\n        : (0, codegen_1._) `${gen.scopeValue(\"wrapper\", { ref: sch })}.parse`;\n}\nfunction parseEmpty(cxt) {\n    parseWith(cxt, parseJson_1.parseJson);\n}\nfunction parseWith(cxt, parseFunc, args) {\n    partialParse(cxt, (0, util_1.useFunc)(cxt.gen, parseFunc), args);\n}\nfunction partialParse(cxt, parseFunc, args) {\n    const { gen, data } = cxt;\n    gen.assign(data, (0, codegen_1._) `${parseFunc}(${names_1.default.json}, ${names_1.default.jsonPos}${args ? (0, codegen_1._) `, ${args}` : codegen_1.nil})`);\n    gen.assign(names_1.default.jsonPos, (0, codegen_1._) `${parseFunc}.position`);\n    gen.if((0, codegen_1._) `${data} === undefined`, () => parsingError(cxt, (0, codegen_1._) `${parseFunc}.message`));\n}\nfunction parseToken(cxt, tok) {\n    tryParseToken(cxt, tok, jsonSyntaxError);\n}\nfunction tryParseToken(cxt, tok, fail, success) {\n    const { gen } = cxt;\n    const n = tok.length;\n    skipWhitespace(cxt);\n    gen.if((0, codegen_1._) `${jsonSlice(n)} === ${tok}`, () => {\n        gen.add(names_1.default.jsonPos, n);\n        success === null || success === void 0 ? void 0 : success(cxt);\n    }, () => fail(cxt));\n}\nfunction skipWhitespace({ gen, char: c }) {\n    gen.code((0, codegen_1._) `while((${c}=${names_1.default.json}[${names_1.default.jsonPos}],${c}===\" \"||${c}===\"\\\\n\"||${c}===\"\\\\r\"||${c}===\"\\\\t\"))${names_1.default.jsonPos}++;`);\n}\nfunction jsonSlice(len) {\n    return len === 1\n        ? (0, codegen_1._) `${names_1.default.json}[${names_1.default.jsonPos}]`\n        : (0, codegen_1._) `${names_1.default.json}.slice(${names_1.default.jsonPos}, ${names_1.default.jsonPos}+${len})`;\n}\nfunction jsonSyntaxError(cxt) {\n    parsingError(cxt, (0, codegen_1._) `\"unexpected token \" + ${names_1.default.json}[${names_1.default.jsonPos}]`);\n}\nfunction parsingError({ gen, parseName }, msg) {\n    gen.assign((0, codegen_1._) `${parseName}.message`, msg);\n    gen.assign((0, codegen_1._) `${parseName}.position`, names_1.default.jsonPos);\n    gen.return(undef);\n}\n//# sourceMappingURL=parse.js.map/dist/vocabularies/metadata.js\u0001\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.contentVocabulary = exports.metadataVocabulary = void 0;\nexports.metadataVocabulary = [\n    \"title\",\n    \"description\",\n    \"default\",\n    \"deprecated\",\n    \"readOnly\",\n    \"writeOnly\",\n    \"examples\",\n];\nexports.contentVocabulary = [\n    \"contentMediaType\",\n    \"contentEncoding\",\n    \"contentSchema\",\n];\n//# sourceMappingURL=metadata.js.map\"/dist/refs/json-schema-secure.json\t{\n  \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n  \"$id\": \"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/json-schema-secure.json#\",\n  \"title\": \"Meta-schema for the security assessment of JSON Schemas\",\n  \"description\": \"If a JSON AnySchema fails validation against this meta-schema, it may be unsafe to validate untrusted data\",\n  \"definitions\": {\n    \"schemaArray\": {\n      \"type\": \"array\",\n      \"minItems\": 1,\n      \"items\": {\"$ref\": \"#\"}\n    }\n  },\n  \"dependencies\": {\n    \"patternProperties\": {\n      \"description\": \"prevent slow validation of large property names\",\n      \"required\": [\"propertyNames\"],\n      \"properties\": {\n        \"propertyNames\": {\n          \"required\": [\"maxLength\"]\n        }\n      }\n    },\n    \"uniqueItems\": {\n      \"description\": \"prevent slow validation of large non-scalar arrays\",\n      \"if\": {\n        \"properties\": {\n          \"uniqueItems\": {\"const\": true},\n          \"items\": {\n            \"properties\": {\n              \"type\": {\n                \"anyOf\": [\n                  {\n                    \"enum\": [\"object\", \"array\"]\n                  },\n                  {\n                    \"type\": \"array\",\n                    \"contains\": {\"enum\": [\"object\", \"array\"]}\n                  }\n                ]\n              }\n            }\n          }\n        }\n      },\n      \"then\": {\n        \"required\": [\"maxItems\"]\n      }\n    },\n    \"pattern\": {\n      \"description\": \"prevent slow pattern matching of large strings\",\n      \"required\": [\"maxLength\"]\n    },\n    \"format\": {\n      \"description\": \"prevent slow format validation of large strings\",\n      \"required\": [\"maxLength\"]\n    }\n  },\n  \"properties\": {\n    \"additionalItems\": {\"$ref\": \"#\"},\n    \"additionalProperties\": {\"$ref\": \"#\"},\n    \"dependencies\": {\n      \"additionalProperties\": {\n        \"anyOf\": [{\"type\": \"array\"}, {\"$ref\": \"#\"}]\n      }\n    },\n    \"items\": {\n      \"anyOf\": [{\"$ref\": \"#\"}, {\"$ref\": \"#/definitions/schemaArray\"}]\n    },\n    \"definitions\": {\n      \"additionalProperties\": {\"$ref\": \"#\"}\n    },\n    \"patternProperties\": {\n      \"additionalProperties\": {\"$ref\": \"#\"}\n    },\n    \"properties\": {\n      \"additionalProperties\": {\"$ref\": \"#\"}\n    },\n    \"if\": {\"$ref\": \"#\"},\n    \"then\": {\"$ref\": \"#\"},\n    \"else\": {\"$ref\": \"#\"},\n    \"allOf\": {\"$ref\": \"#/definitions/schemaArray\"},\n    \"anyOf\": {\"$ref\": \"#/definitions/schemaArray\"},\n    \"oneOf\": {\"$ref\": \"#/definitions/schemaArray\"},\n    \"not\": {\"$ref\": \"#\"},\n    \"contains\": {\"$ref\": \"#\"},\n    \"propertyNames\": {\"$ref\": \"#\"}\n  }\n}\n/lib/vocabularies/core/ref.ts\u0011 import type {CodeKeywordDefinition, AnySchema} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport MissingRefError from \"../../compile/ref_error\"\nimport {callValidateCode} from \"../code\"\nimport {_, nil, stringify, Code, Name} from \"../../compile/codegen\"\nimport N from \"../../compile/names\"\nimport {SchemaEnv, resolveRef} from \"../../compile\"\nimport {mergeEvaluated} from \"../../compile/util\"\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"$ref\",\n  schemaType: \"string\",\n  code(cxt: KeywordCxt): void {\n    const {gen, schema: $ref, it} = cxt\n    const {baseId, schemaEnv: env, validateName, opts, self} = it\n    const {root} = env\n    if (($ref === \"#\" || $ref === \"#/\") && baseId === root.baseId) return callRootRef()\n    const schOrEnv = resolveRef.call(self, root, baseId, $ref)\n    if (schOrEnv === undefined) throw new MissingRefError(it.opts.uriResolver, baseId, $ref)\n    if (schOrEnv instanceof SchemaEnv) return callValidate(schOrEnv)\n    return inlineRefSchema(schOrEnv)\n\n    function callRootRef(): void {\n      if (env === root) return callRef(cxt, validateName, env, env.$async)\n      const rootName = gen.scopeValue(\"root\", {ref: root})\n      return callRef(cxt, _`${rootName}.validate`, root, root.$async)\n    }\n\n    function callValidate(sch: SchemaEnv): void {\n      const v = getValidate(cxt, sch)\n      callRef(cxt, v, sch, sch.$async)\n    }\n\n    function inlineRefSchema(sch: AnySchema): void {\n      const schName = gen.scopeValue(\n        \"schema\",\n        opts.code.source === true ? {ref: sch, code: stringify(sch)} : {ref: sch}\n      )\n      const valid = gen.name(\"valid\")\n      const schCxt = cxt.subschema(\n        {\n          schema: sch,\n          dataTypes: [],\n          schemaPath: nil,\n          topSchemaRef: schName,\n          errSchemaPath: $ref,\n        },\n        valid\n      )\n      cxt.mergeEvaluated(schCxt)\n      cxt.ok(valid)\n    }\n  },\n}\n\nexport function getValidate(cxt: KeywordCxt, sch: SchemaEnv): Code {\n  const {gen} = cxt\n  return sch.validate\n    ? gen.scopeValue(\"validate\", {ref: sch.validate})\n    : _`${gen.scopeValue(\"wrapper\", {ref: sch})}.validate`\n}\n\nexport function callRef(cxt: KeywordCxt, v: Code, sch?: SchemaEnv, $async?: boolean): void {\n  const {gen, it} = cxt\n  const {allErrors, schemaEnv: env, opts} = it\n  const passCxt = opts.passContext ? N.this : nil\n  if ($async) callAsyncRef()\n  else callSyncRef()\n\n  function callAsyncRef(): void {\n    if (!env.$async) throw new Error(\"async schema referenced by sync schema\")\n    const valid = gen.let(\"valid\")\n    gen.try(\n      () => {\n        gen.code(_`await ${callValidateCode(cxt, v, passCxt)}`)\n        addEvaluatedFrom(v) // TODO will not work with async, it has to be returned with the result\n        if (!allErrors) gen.assign(valid, true)\n      },\n      (e) => {\n        gen.if(_`!(${e} instanceof ${it.ValidationError as Name})`, () => gen.throw(e))\n        addErrorsFrom(e)\n        if (!allErrors) gen.assign(valid, false)\n      }\n    )\n    cxt.ok(valid)\n  }\n\n  function callSyncRef(): void {\n    cxt.result(\n      callValidateCode(cxt, v, passCxt),\n      () => addEvaluatedFrom(v),\n      () => addErrorsFrom(v)\n    )\n  }\n\n  function addErrorsFrom(source: Code): void {\n    const errs = _`${source}.errors`\n    gen.assign(N.vErrors, _`${N.vErrors} === null ? ${errs} : ${N.vErrors}.concat(${errs})`) // TODO tagged\n    gen.assign(N.errors, _`${N.vErrors}.length`)\n  }\n\n  function addEvaluatedFrom(source: Code): void {\n    if (!it.opts.unevaluated) return\n    const schEvaluated = sch?.validate?.evaluated\n    // TODO refactor\n    if (it.props !== true) {\n      if (schEvaluated && !schEvaluated.dynamicProps) {\n        if (schEvaluated.props !== undefined) {\n          it.props = mergeEvaluated.props(gen, schEvaluated.props, it.props)\n        }\n      } else {\n        const props = gen.var(\"props\", _`${source}.evaluated.props`)\n        it.props = mergeEvaluated.props(gen, props, it.props, Name)\n      }\n    }\n    if (it.items !== true) {\n      if (schEvaluated && !schEvaluated.dynamicItems) {\n        if (schEvaluated.items !== undefined) {\n          it.items = mergeEvaluated.items(gen, schEvaluated.items, it.items)\n        }\n      } else {\n        const items = gen.var(\"items\", _`${source}.evaluated.items`)\n        it.items = mergeEvaluated.items(gen, items, it.items, Name)\n      }\n    }\n  }\n}\n\nexport default def\n/dist/ajv.d.ts\u0004import type { AnySchemaObject } from \"./types\";\nimport AjvCore from \"./core\";\ndeclare class Ajv extends AjvCore {\n    _addVocabularies(): void;\n    _addDefaultMetaSchema(): void;\n    defaultMeta(): string | AnySchemaObject | undefined;\n}\nexport default Ajv;\nexport { Format, FormatDefinition, AsyncFormatDefinition, KeywordDefinition, KeywordErrorDefinition, CodeKeywordDefinition, MacroKeywordDefinition, FuncKeywordDefinition, Vocabulary, Schema, SchemaObject, AnySchemaObject, AsyncSchema, AnySchema, ValidateFunction, AsyncValidateFunction, SchemaValidateFunction, ErrorObject, ErrorNoParams, } from \"./types\";\nexport { Plugin, Options, CodeOptions, InstanceOptions, Logger, ErrorsTextOptions } from \"./core\";\nexport { SchemaCxt, SchemaObjCxt } from \"./compile\";\nexport { KeywordCxt } from \"./compile/validate\";\nexport { DefinedError } from \"./vocabularies/errors\";\nexport { JSONType } from \"./compile/rules\";\nexport { JSONSchemaType } from \"./types/json-schema\";\nexport { _, str, stringify, nil, Name, Code, CodeGen, CodeGenOptions } from \"./compile/codegen\";\nexport { default as ValidationError } from \"./runtime/validation_error\";\nexport { default as MissingRefError } from \"./compile/ref_error\";\n0/dist/vocabularies/applicator/prefixItems.js.map\u0001}{\"version\":3,\"file\":\"prefixItems.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../lib/vocabularies/applicator/prefixItems.ts\"],\"names\":[],\"mappings\":\";;AACA,mCAAqC;AAErC,MAAM,GAAG,GAA0B;IACjC,OAAO,EAAE,aAAa;IACtB,IAAI,EAAE,OAAO;IACb,UAAU,EAAE,CAAC,OAAO,CAAC;IACrB,MAAM,EAAE,aAAa;IACrB,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAA,qBAAa,EAAC,GAAG,EAAE,OAAO,CAAC;CAC3C,CAAA;AAED,kBAAe,GAAG,CAAA\"}/dist/runtime/ucs2length.d.tsĄdeclare function ucs2length(str: string): number;\ndeclare namespace ucs2length {\n    var code: string;\n}\nexport default ucs2length;\n/lib/runtime/quote.ts\u0003\"const rxEscapable =\n  // eslint-disable-next-line no-control-regex, no-misleading-character-class\n  /[\\\\\"\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g\n\nconst escaped: {[K in string]?: string} = {\n  \"\\b\": \"\\\\b\",\n  \"\\t\": \"\\\\t\",\n  \"\\n\": \"\\\\n\",\n  \"\\f\": \"\\\\f\",\n  \"\\r\": \"\\\\r\",\n  '\"': '\\\\\"',\n  \"\\\\\": \"\\\\\\\\\",\n}\n\nexport default function quote(s: string): string {\n  rxEscapable.lastIndex = 0\n  return (\n    '\"' +\n    (rxEscapable.test(s)\n      ? s.replace(rxEscapable, (a) => {\n          const c = escaped[a]\n          return typeof c === \"string\"\n            ? c\n            : \"\\\\u\" + (\"0000\" + a.charCodeAt(0).toString(16)).slice(-4)\n        })\n      : s) +\n    '\"'\n  )\n}\n\nquote.code = 'require(\"ajv/dist/runtime/quote\").default'\n//dist/vocabularies/applicator/properties.js.map\u0007{\"version\":3,\"file\":\"properties.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../lib/vocabularies/applicator/properties.ts\"],\"names\":[],\"mappings\":\";;AACA,qDAAiD;AACjD,kCAA2D;AAC3D,6CAA4E;AAC5E,iEAA0C;AAE1C,MAAM,GAAG,GAA0B;IACjC,OAAO,EAAE,YAAY;IACrB,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE,QAAQ;IACpB,IAAI,CAAC,GAAe;QAClB,MAAM,EAAC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,EAAC,GAAG,GAAG,CAAA;QACjD,IAAI,EAAE,CAAC,IAAI,CAAC,gBAAgB,KAAK,KAAK,IAAI,YAAY,CAAC,oBAAoB,KAAK,SAAS,EAAE;YACzF,8BAAK,CAAC,IAAI,CAAC,IAAI,qBAAU,CAAC,EAAE,EAAE,8BAAK,EAAE,sBAAsB,CAAC,CAAC,CAAA;SAC9D;QACD,MAAM,QAAQ,GAAG,IAAA,0BAAmB,EAAC,MAAM,CAAC,CAAA;QAC5C,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE;YAC3B,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;SAC/B;QACD,IAAI,EAAE,CAAC,IAAI,CAAC,WAAW,IAAI,QAAQ,CAAC,MAAM,IAAI,EAAE,CAAC,KAAK,KAAK,IAAI,EAAE;YAC/D,EAAE,CAAC,KAAK,GAAG,qBAAc,CAAC,KAAK,CAAC,GAAG,EAAE,IAAA,aAAM,EAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAA;SACjE;QACD,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAA,wBAAiB,EAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QAC5E,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;YAAE,OAAM;QACnC,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAE/B,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE;YAC7B,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE;gBACpB,mBAAmB,CAAC,IAAI,CAAC,CAAA;aAC1B;iBAAM;gBACL,GAAG,CAAC,EAAE,CAAC,IAAA,qBAAc,EAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAA;gBAC9D,mBAAmB,CAAC,IAAI,CAAC,CAAA;gBACzB,IAAI,CAAC,EAAE,CAAC,SAAS;oBAAE,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;gBAC9C,GAAG,CAAC,KAAK,EAAE,CAAA;aACZ;YACD,GAAG,CAAC,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;YAClC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,CAAA;SACd;QAED,SAAS,UAAU,CAAC,IAAY;YAC9B,OAAO,EAAE,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,EAAE,CAAC,aAAa,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,KAAK,SAAS,CAAA;QACvF,CAAC;QAED,SAAS,mBAAmB,CAAC,IAAY;YACvC,GAAG,CAAC,SAAS,CACX;gBACE,OAAO,EAAE,YAAY;gBACrB,UAAU,EAAE,IAAI;gBAChB,QAAQ,EAAE,IAAI;aACf,EACD,KAAK,CACN,CAAA;QACH,CAAC;IACH,CAAC;CACF,CAAA;AAED,kBAAe,GAAG,CAAA\"}+/lib/vocabularies/validation/uniqueItems.ts\nimport type {CodeKeywordDefinition, ErrorObject, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {checkDataTypes, getSchemaTypes, DataType} from \"../../compile/validate/dataType\"\nimport {_, str, Name} from \"../../compile/codegen\"\nimport {useFunc} from \"../../compile/util\"\nimport equal from \"../../runtime/equal\"\n\nexport type UniqueItemsError = ErrorObject<\n  \"uniqueItems\",\n  {i: number; j: number},\n  boolean | {$data: string}\n>\n\nconst error: KeywordErrorDefinition = {\n  message: ({params: {i, j}}) =>\n    str`must NOT have duplicate items (items ## ${j} and ${i} are identical)`,\n  params: ({params: {i, j}}) => _`{i: ${i}, j: ${j}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"uniqueItems\",\n  type: \"array\",\n  schemaType: \"boolean\",\n  $data: true,\n  error,\n  code(cxt: KeywordCxt) {\n    const {gen, data, $data, schema, parentSchema, schemaCode, it} = cxt\n    if (!$data && !schema) return\n    const valid = gen.let(\"valid\")\n    const itemTypes = parentSchema.items ? getSchemaTypes(parentSchema.items) : []\n    cxt.block$data(valid, validateUniqueItems, _`${schemaCode} === false`)\n    cxt.ok(valid)\n\n    function validateUniqueItems(): void {\n      const i = gen.let(\"i\", _`${data}.length`)\n      const j = gen.let(\"j\")\n      cxt.setParams({i, j})\n      gen.assign(valid, true)\n      gen.if(_`${i} > 1`, () => (canOptimize() ? loopN : loopN2)(i, j))\n    }\n\n    function canOptimize(): boolean {\n      return itemTypes.length > 0 && !itemTypes.some((t) => t === \"object\" || t === \"array\")\n    }\n\n    function loopN(i: Name, j: Name): void {\n      const item = gen.name(\"item\")\n      const wrongType = checkDataTypes(itemTypes, item, it.opts.strictNumbers, DataType.Wrong)\n      const indices = gen.const(\"indices\", _`{}`)\n      gen.for(_`;${i}--;`, () => {\n        gen.let(item, _`${data}[${i}]`)\n        gen.if(wrongType, _`continue`)\n        if (itemTypes.length > 1) gen.if(_`typeof ${item} == \"string\"`, _`${item} += \"_\"`)\n        gen\n          .if(_`typeof ${indices}[${item}] == \"number\"`, () => {\n            gen.assign(j, _`${indices}[${item}]`)\n            cxt.error()\n            gen.assign(valid, false).break()\n          })\n          .code(_`${indices}[${item}] = ${i}`)\n      })\n    }\n\n    function loopN2(i: Name, j: Name): void {\n      const eql = useFunc(gen, equal)\n      const outer = gen.name(\"outer\")\n      gen.label(outer).for(_`;${i}--;`, () =>\n        gen.for(_`${j} = ${i}; ${j}--;`, () =>\n          gen.if(_`${eql}(${data}[${i}], ${data}[${j}])`, () => {\n            cxt.error()\n            gen.assign(valid, false).break(outer)\n          })\n        )\n      )\n    }\n  },\n}\n\nexport default def\n./dist/vocabularies/dynamic/recursiveRef.js.map\u0001S{\"version\":3,\"file\":\"recursiveRef.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../lib/vocabularies/dynamic/recursiveRef.ts\"],\"names\":[],\"mappings\":\";;AACA,6CAAuC;AAEvC,MAAM,GAAG,GAA0B;IACjC,OAAO,EAAE,eAAe;IACxB,UAAU,EAAE,QAAQ;IACpB,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAA,uBAAU,EAAC,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC;CAC3C,CAAA;AAED,kBAAe,GAAG,CAAA\"}/dist/types/json-schema.d.ts\u0013type StrictNullChecksWrapper<Name extends string, Type> = undefined extends null ? `strictNullChecks must be true in tsconfig to use ${Name}` : Type;\ntype UnionToIntersection<U> = (U extends any ? (_: U) => void : never) extends (_: infer I) => void ? I : never;\nexport type SomeJSONSchema = UncheckedJSONSchemaType<Known, true>;\ntype UncheckedPartialSchema<T> = Partial<UncheckedJSONSchemaType<T, true>>;\nexport type PartialSchema<T> = StrictNullChecksWrapper<\"PartialSchema\", UncheckedPartialSchema<T>>;\ntype JSONType<T extends string, IsPartial extends boolean> = IsPartial extends true ? T | undefined : T;\ninterface NumberKeywords {\n    minimum?: number;\n    maximum?: number;\n    exclusiveMinimum?: number;\n    exclusiveMaximum?: number;\n    multipleOf?: number;\n    format?: string;\n}\ninterface StringKeywords {\n    minLength?: number;\n    maxLength?: number;\n    pattern?: string;\n    format?: string;\n}\ntype UncheckedJSONSchemaType<T, IsPartial extends boolean> = (// these two unions allow arbitrary unions of types\n{\n    anyOf: readonly UncheckedJSONSchemaType<T, IsPartial>[];\n} | {\n    oneOf: readonly UncheckedJSONSchemaType<T, IsPartial>[];\n} | ({\n    type: readonly (T extends number ? JSONType<\"number\" | \"integer\", IsPartial> : T extends string ? JSONType<\"string\", IsPartial> : T extends boolean ? JSONType<\"boolean\", IsPartial> : never)[];\n} & UnionToIntersection<T extends number ? NumberKeywords : T extends string ? StringKeywords : T extends boolean ? {} : never>) | ((T extends number ? {\n    type: JSONType<\"number\" | \"integer\", IsPartial>;\n} & NumberKeywords : T extends string ? {\n    type: JSONType<\"string\", IsPartial>;\n} & StringKeywords : T extends boolean ? {\n    type: JSONType<\"boolean\", IsPartial>;\n} : T extends readonly [any, ...any[]] ? {\n    type: JSONType<\"array\", IsPartial>;\n    items: {\n        readonly [K in keyof T]-?: UncheckedJSONSchemaType<T[K], false> & Nullable<T[K]>;\n    } & {\n        length: T[\"length\"];\n    };\n    minItems: T[\"length\"];\n} & ({\n    maxItems: T[\"length\"];\n} | {\n    additionalItems: false;\n}) : T extends readonly any[] ? {\n    type: JSONType<\"array\", IsPartial>;\n    items: UncheckedJSONSchemaType<T[0], false>;\n    contains?: UncheckedPartialSchema<T[0]>;\n    minItems?: number;\n    maxItems?: number;\n    minContains?: number;\n    maxContains?: number;\n    uniqueItems?: true;\n    additionalItems?: never;\n} : T extends Record<string, any> ? {\n    type: JSONType<\"object\", IsPartial>;\n    additionalProperties?: boolean | UncheckedJSONSchemaType<T[string], false>;\n    unevaluatedProperties?: boolean | UncheckedJSONSchemaType<T[string], false>;\n    properties?: IsPartial extends true ? Partial<UncheckedPropertiesSchema<T>> : UncheckedPropertiesSchema<T>;\n    patternProperties?: Record<string, UncheckedJSONSchemaType<T[string], false>>;\n    propertyNames?: Omit<UncheckedJSONSchemaType<string, false>, \"type\"> & {\n        type?: \"string\";\n    };\n    dependencies?: {\n        [K in keyof T]?: Readonly<(keyof T)[]> | UncheckedPartialSchema<T>;\n    };\n    dependentRequired?: {\n        [K in keyof T]?: Readonly<(keyof T)[]>;\n    };\n    dependentSchemas?: {\n        [K in keyof T]?: UncheckedPartialSchema<T>;\n    };\n    minProperties?: number;\n    maxProperties?: number;\n} & (IsPartial extends true ? {\n    required: Readonly<(keyof T)[]>;\n} : [UncheckedRequiredMembers<T>] extends [never] ? {\n    required?: Readonly<UncheckedRequiredMembers<T>[]>;\n} : {\n    required: Readonly<UncheckedRequiredMembers<T>[]>;\n}) : T extends null ? {\n    type: JSONType<\"null\", IsPartial>;\n    nullable: true;\n} : never) & {\n    allOf?: Readonly<UncheckedPartialSchema<T>[]>;\n    anyOf?: Readonly<UncheckedPartialSchema<T>[]>;\n    oneOf?: Readonly<UncheckedPartialSchema<T>[]>;\n    if?: UncheckedPartialSchema<T>;\n    then?: UncheckedPartialSchema<T>;\n    else?: UncheckedPartialSchema<T>;\n    not?: UncheckedPartialSchema<T>;\n})) & {\n    [keyword: string]: any;\n    $id?: string;\n    $ref?: string;\n    $defs?: Record<string, UncheckedJSONSchemaType<Known, true>>;\n    definitions?: Record<string, UncheckedJSONSchemaType<Known, true>>;\n};\nexport type JSONSchemaType<T> = StrictNullChecksWrapper<\"JSONSchemaType\", UncheckedJSONSchemaType<T, false>>;\ntype Known = {\n    [key: string]: Known;\n} | [Known, ...Known[]] | Known[] | number | string | boolean | null;\ntype UncheckedPropertiesSchema<T> = {\n    [K in keyof T]-?: (UncheckedJSONSchemaType<T[K], false> & Nullable<T[K]>) | {\n        $ref: string;\n    };\n};\nexport type PropertiesSchema<T> = StrictNullChecksWrapper<\"PropertiesSchema\", UncheckedPropertiesSchema<T>>;\ntype UncheckedRequiredMembers<T> = {\n    [K in keyof T]-?: undefined extends T[K] ? never : K;\n}[keyof T];\nexport type RequiredMembers<T> = StrictNullChecksWrapper<\"RequiredMembers\", UncheckedRequiredMembers<T>>;\ntype Nullable<T> = undefined extends T ? {\n    nullable: true;\n    const?: null;\n    enum?: Readonly<(T | null)[]>;\n    default?: T | null;\n} : {\n    nullable?: false;\n    const?: T;\n    enum?: Readonly<T[]>;\n    default?: T;\n};\nexport {};\n!/dist/compile/validate/index.d.ts\b\u0019import type { AddedKeywordDefinition, AnySchemaObject, KeywordErrorCxt, KeywordCxtParams } from \"../../types\";\nimport type { SchemaCxt, SchemaObjCxt } from \"..\";\nimport { SubschemaArgs } from \"./subschema\";\nimport { Code, Name, CodeGen } from \"../codegen\";\nimport type { JSONType } from \"../rules\";\nimport { ErrorPaths } from \"../errors\";\nexport declare function validateFunctionCode(it: SchemaCxt): void;\nexport declare class KeywordCxt implements KeywordErrorCxt {\n    readonly gen: CodeGen;\n    readonly allErrors?: boolean;\n    readonly keyword: string;\n    readonly data: Name;\n    readonly $data?: string | false;\n    schema: any;\n    readonly schemaValue: Code | number | boolean;\n    readonly schemaCode: Code | number | boolean;\n    readonly schemaType: JSONType[];\n    readonly parentSchema: AnySchemaObject;\n    readonly errsCount?: Name;\n    params: KeywordCxtParams;\n    readonly it: SchemaObjCxt;\n    readonly def: AddedKeywordDefinition;\n    constructor(it: SchemaObjCxt, def: AddedKeywordDefinition, keyword: string);\n    result(condition: Code, successAction?: () => void, failAction?: () => void): void;\n    failResult(condition: Code, successAction?: () => void, failAction?: () => void): void;\n    pass(condition: Code, failAction?: () => void): void;\n    fail(condition?: Code): void;\n    fail$data(condition: Code): void;\n    error(append?: boolean, errorParams?: KeywordCxtParams, errorPaths?: ErrorPaths): void;\n    private _error;\n    $dataError(): void;\n    reset(): void;\n    ok(cond: Code | boolean): void;\n    setParams(obj: KeywordCxtParams, assign?: true): void;\n    block$data(valid: Name, codeBlock: () => void, $dataValid?: Code): void;\n    check$data(valid?: Name, $dataValid?: Code): void;\n    invalid$data(): Code;\n    subschema(appl: SubschemaArgs, valid: Name): SchemaCxt;\n    mergeEvaluated(schemaCxt: SchemaCxt, toName?: typeof Name): void;\n    mergeValidEvaluated(schemaCxt: SchemaCxt, valid: Name): boolean | void;\n}\nexport declare function getData($data: string, { dataLevel, dataNames, dataPathArr }: SchemaCxt): Code | number;\n/dist/vocabularies/core/id.d.tsximport type { CodeKeywordDefinition } from \"../../types\";\ndeclare const def: CodeKeywordDefinition;\nexport default def;\n/dist/types/index.js.mapo{\"version\":3,\"file\":\"index.js\",\"sourceRoot\":\"\",\"sources\":[\"../../lib/types/index.ts\"],\"names\":[],\"mappings\":\"\"}#/dist/vocabularies/dynamic/index.js\u0001\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst dynamicAnchor_1 = require(\"./dynamicAnchor\");\nconst dynamicRef_1 = require(\"./dynamicRef\");\nconst recursiveAnchor_1 = require(\"./recursiveAnchor\");\nconst recursiveRef_1 = require(\"./recursiveRef\");\nconst dynamic = [dynamicAnchor_1.default, dynamicRef_1.default, recursiveAnchor_1.default, recursiveRef_1.default];\nexports.default = dynamic;\n//# sourceMappingURL=index.js.map/dist/runtime/parseJson.d.ts\u0002export declare function parseJson(s: string, pos: number): unknown;\nexport declare namespace parseJson {\n    var message: string | undefined;\n    var position: number;\n    var code: string;\n}\nexport declare function parseJsonNumber(s: string, pos: number, maxDigits?: number): number | undefined;\nexport declare namespace parseJsonNumber {\n    var message: string | undefined;\n    var position: number;\n    var code: string;\n}\nexport declare function parseJsonString(s: string, pos: number): string | undefined;\nexport declare namespace parseJsonString {\n    var message: string | undefined;\n    var position: number;\n    var code: string;\n}\n!/dist/vocabularies/jtd/union.d.tsximport type { CodeKeywordDefinition } from \"../../types\";\ndeclare const def: CodeKeywordDefinition;\nexport default def;\n/dist/2019.d.ts\u0004import type { AnySchemaObject } from \"./types\";\nimport AjvCore, { Options } from \"./core\";\ndeclare class Ajv2019 extends AjvCore {\n    constructor(opts?: Options);\n    _addVocabularies(): void;\n    _addDefaultMetaSchema(): void;\n    defaultMeta(): string | AnySchemaObject | undefined;\n}\nexport default Ajv2019;\nexport { Format, FormatDefinition, AsyncFormatDefinition, KeywordDefinition, KeywordErrorDefinition, CodeKeywordDefinition, MacroKeywordDefinition, FuncKeywordDefinition, Vocabulary, Schema, SchemaObject, AnySchemaObject, AsyncSchema, AnySchema, ValidateFunction, AsyncValidateFunction, ErrorObject, ErrorNoParams, } from \"./types\";\nexport { Plugin, Options, CodeOptions, InstanceOptions, Logger, ErrorsTextOptions } from \"./core\";\nexport { SchemaCxt, SchemaObjCxt } from \"./compile\";\nexport { KeywordCxt } from \"./compile/validate\";\nexport { DefinedError } from \"./vocabularies/errors\";\nexport { JSONType } from \"./compile/rules\";\nexport { JSONSchemaType } from \"./types/json-schema\";\nexport { _, str, stringify, nil, Name, Code, CodeGen, CodeGenOptions } from \"./compile/codegen\";\nexport { default as ValidationError } from \"./runtime/validation_error\";\nexport { default as MissingRefError } from \"./compile/ref_error\";\n)/dist/vocabularies/applicator/contains.js\u000e`\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst error = {\n    message: ({ params: { min, max } }) => max === undefined\n        ? (0, codegen_1.str) `must contain at least ${min} valid item(s)`\n        : (0, codegen_1.str) `must contain at least ${min} and no more than ${max} valid item(s)`,\n    params: ({ params: { min, max } }) => max === undefined ? (0, codegen_1._) `{minContains: ${min}}` : (0, codegen_1._) `{minContains: ${min}, maxContains: ${max}}`,\n};\nconst def = {\n    keyword: \"contains\",\n    type: \"array\",\n    schemaType: [\"object\", \"boolean\"],\n    before: \"uniqueItems\",\n    trackErrors: true,\n    error,\n    code(cxt) {\n        const { gen, schema, parentSchema, data, it } = cxt;\n        let min;\n        let max;\n        const { minContains, maxContains } = parentSchema;\n        if (it.opts.next) {\n            min = minContains === undefined ? 1 : minContains;\n            max = maxContains;\n        }\n        else {\n            min = 1;\n        }\n        const len = gen.const(\"len\", (0, codegen_1._) `${data}.length`);\n        cxt.setParams({ min, max });\n        if (max === undefined && min === 0) {\n            (0, util_1.checkStrictMode)(it, `\"minContains\" == 0 without \"maxContains\": \"contains\" keyword ignored`);\n            return;\n        }\n        if (max !== undefined && min > max) {\n            (0, util_1.checkStrictMode)(it, `\"minContains\" > \"maxContains\" is always invalid`);\n            cxt.fail();\n            return;\n        }\n        if ((0, util_1.alwaysValidSchema)(it, schema)) {\n            let cond = (0, codegen_1._) `${len} >= ${min}`;\n            if (max !== undefined)\n                cond = (0, codegen_1._) `${cond} && ${len} <= ${max}`;\n            cxt.pass(cond);\n            return;\n        }\n        it.items = true;\n        const valid = gen.name(\"valid\");\n        if (max === undefined && min === 1) {\n            validateItems(valid, () => gen.if(valid, () => gen.break()));\n        }\n        else if (min === 0) {\n            gen.let(valid, true);\n            if (max !== undefined)\n                gen.if((0, codegen_1._) `${data}.length > 0`, validateItemsWithCount);\n        }\n        else {\n            gen.let(valid, false);\n            validateItemsWithCount();\n        }\n        cxt.result(valid, () => cxt.reset());\n        function validateItemsWithCount() {\n            const schValid = gen.name(\"_valid\");\n            const count = gen.let(\"count\", 0);\n            validateItems(schValid, () => gen.if(schValid, () => checkLimits(count)));\n        }\n        function validateItems(_valid, block) {\n            gen.forRange(\"i\", 0, len, (i) => {\n                cxt.subschema({\n                    keyword: \"contains\",\n                    dataProp: i,\n                    dataPropType: util_1.Type.Num,\n                    compositeRule: true,\n                }, _valid);\n                block();\n            });\n        }\n        function checkLimits(count) {\n            gen.code((0, codegen_1._) `${count}++`);\n            if (max === undefined) {\n                gen.if((0, codegen_1._) `${count} >= ${min}`, () => gen.assign(valid, true).break());\n            }\n            else {\n                gen.if((0, codegen_1._) `${count} > ${max}`, () => gen.assign(valid, false).break());\n                if (min === 1)\n                    gen.assign(valid, true);\n                else\n                    gen.if((0, codegen_1._) `${count} >= ${min}`, () => gen.assign(valid, true));\n            }\n        }\n    },\n};\nexports.default = def;\n//# sourceMappingURL=contains.js.map-/dist/vocabularies/applicator/dependencies.js\f~\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.validateSchemaDeps = exports.validatePropertyDeps = exports.error = void 0;\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst code_1 = require(\"../code\");\nexports.error = {\n    message: ({ params: { property, depsCount, deps } }) => {\n        const property_ies = depsCount === 1 ? \"property\" : \"properties\";\n        return (0, codegen_1.str) `must have ${property_ies} ${deps} when property ${property} is present`;\n    },\n    params: ({ params: { property, depsCount, deps, missingProperty } }) => (0, codegen_1._) `{property: ${property},\n    missingProperty: ${missingProperty},\n    depsCount: ${depsCount},\n    deps: ${deps}}`, // TODO change to reference\n};\nconst def = {\n    keyword: \"dependencies\",\n    type: \"object\",\n    schemaType: \"object\",\n    error: exports.error,\n    code(cxt) {\n        const [propDeps, schDeps] = splitDependencies(cxt);\n        validatePropertyDeps(cxt, propDeps);\n        validateSchemaDeps(cxt, schDeps);\n    },\n};\nfunction splitDependencies({ schema }) {\n    const propertyDeps = {};\n    const schemaDeps = {};\n    for (const key in schema) {\n        if (key === \"__proto__\")\n            continue;\n        const deps = Array.isArray(schema[key]) ? propertyDeps : schemaDeps;\n        deps[key] = schema[key];\n    }\n    return [propertyDeps, schemaDeps];\n}\nfunction validatePropertyDeps(cxt, propertyDeps = cxt.schema) {\n    const { gen, data, it } = cxt;\n    if (Object.keys(propertyDeps).length === 0)\n        return;\n    const missing = gen.let(\"missing\");\n    for (const prop in propertyDeps) {\n        const deps = propertyDeps[prop];\n        if (deps.length === 0)\n            continue;\n        const hasProperty = (0, code_1.propertyInData)(gen, data, prop, it.opts.ownProperties);\n        cxt.setParams({\n            property: prop,\n            depsCount: deps.length,\n            deps: deps.join(\", \"),\n        });\n        if (it.allErrors) {\n            gen.if(hasProperty, () => {\n                for (const depProp of deps) {\n                    (0, code_1.checkReportMissingProp)(cxt, depProp);\n                }\n            });\n        }\n        else {\n            gen.if((0, codegen_1._) `${hasProperty} && (${(0, code_1.checkMissingProp)(cxt, deps, missing)})`);\n            (0, code_1.reportMissingProp)(cxt, missing);\n            gen.else();\n        }\n    }\n}\nexports.validatePropertyDeps = validatePropertyDeps;\nfunction validateSchemaDeps(cxt, schemaDeps = cxt.schema) {\n    const { gen, data, keyword, it } = cxt;\n    const valid = gen.name(\"valid\");\n    for (const prop in schemaDeps) {\n        if ((0, util_1.alwaysValidSchema)(it, schemaDeps[prop]))\n            continue;\n        gen.if((0, code_1.propertyInData)(gen, data, prop, it.opts.ownProperties), () => {\n            const schCxt = cxt.subschema({ keyword, schemaProp: prop }, valid);\n            cxt.mergeValidEvaluated(schCxt, valid);\n        }, () => gen.var(valid, true) // TODO var\n        );\n        cxt.ok(valid);\n    }\n}\nexports.validateSchemaDeps = validateSchemaDeps;\nexports.default = def;\n//# sourceMappingURL=dependencies.js.map+/dist/vocabularies/validation/multipleOf.js\u0003\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst error = {\n    message: ({ schemaCode }) => (0, codegen_1.str) `must be multiple of ${schemaCode}`,\n    params: ({ schemaCode }) => (0, codegen_1._) `{multipleOf: ${schemaCode}}`,\n};\nconst def = {\n    keyword: \"multipleOf\",\n    type: \"number\",\n    schemaType: \"number\",\n    $data: true,\n    error,\n    code(cxt) {\n        const { gen, data, schemaCode, it } = cxt;\n        // const bdt = bad$DataType(schemaCode, <string>def.schemaType, $data)\n        const prec = it.opts.multipleOfPrecision;\n        const res = gen.let(\"res\");\n        const invalid = prec\n            ? (0, codegen_1._) `Math.abs(Math.round(${res}) - ${res}) > 1e-${prec}`\n            : (0, codegen_1._) `${res} !== parseInt(${res})`;\n        cxt.fail$data((0, codegen_1._) `(${schemaCode} === 0 || (${res} = ${data}/${schemaCode}, ${invalid}))`);\n    },\n};\nexports.default = def;\n//# sourceMappingURL=multipleOf.js.map /dist/standalone/instance.js.map\u0004C{\"version\":3,\"file\":\"instance.js\",\"sourceRoot\":\"\",\"sources\":[\"../../lib/standalone/instance.ts\"],\"names\":[],\"mappings\":\";;AAAA,kCAAwE;AACxE,wBAA8B;AAC9B,yDAAwD;AAExD,MAAqB,OAAO;IAE1B,YAAqB,GAAQ;QAAR,QAAG,GAAH,GAAG,CAAK;IAAG,CAAC;IAEjC,QAAQ,CAAC,YAAgC,EAAE,IAAa;QACtD,OAAO,cAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,CAAC,CAAA;IAC9D,CAAC;IAED,OAAO,CAAc,MAAiB,EAAE,IAAc;QACpD,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAI,MAAM,EAAE,IAAI,CAAC,CAAC,CAAA;IAC9D,CAAC;IAED,SAAS,CAAc,MAAc;QACnC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAI,MAAM,CAAC,CAAA;QACvC,IAAI,CAAC,CAAC;YAAE,OAAO,SAAS,CAAA;QACxB,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAA;IAC9B,CAAC;IAEO,aAAa,CAAc,CAAyB;QAC1D,OAAO,iBAAiB,CAAC,IAAA,UAAc,EAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAA2B,CAAA;IACjF,CAAC;IAED,SAAS,CAAC,GAAG,IAAgD;QAC3D,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAA;QAC1C,OAAO,IAAI,CAAA;IACb,CAAC;IAED,UAAU,CAAC,GAAG,IAAiD;QAC7D,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAA;QAC3C,OAAO,IAAI,CAAA;IACb,CAAC;CACF;AA/BD,0BA+BC\"}&/dist/vocabularies/applicator/oneOf.js\b\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst error = {\n    message: \"must match exactly one schema in oneOf\",\n    params: ({ params }) => (0, codegen_1._) `{passingSchemas: ${params.passing}}`,\n};\nconst def = {\n    keyword: \"oneOf\",\n    schemaType: \"array\",\n    trackErrors: true,\n    error,\n    code(cxt) {\n        const { gen, schema, parentSchema, it } = cxt;\n        /* istanbul ignore if */\n        if (!Array.isArray(schema))\n            throw new Error(\"ajv implementation error\");\n        if (it.opts.discriminator && parentSchema.discriminator)\n            return;\n        const schArr = schema;\n        const valid = gen.let(\"valid\", false);\n        const passing = gen.let(\"passing\", null);\n        const schValid = gen.name(\"_valid\");\n        cxt.setParams({ passing });\n        // TODO possibly fail straight away (with warning or exception) if there are two empty always valid schemas\n        gen.block(validateOneOf);\n        cxt.result(valid, () => cxt.reset(), () => cxt.error(true));\n        function validateOneOf() {\n            schArr.forEach((sch, i) => {\n                let schCxt;\n                if ((0, util_1.alwaysValidSchema)(it, sch)) {\n                    gen.var(schValid, true);\n                }\n                else {\n                    schCxt = cxt.subschema({\n                        keyword: \"oneOf\",\n                        schemaProp: i,\n                        compositeRule: true,\n                    }, schValid);\n                }\n                if (i > 0) {\n                    gen\n                        .if((0, codegen_1._) `${schValid} && ${valid}`)\n                        .assign(valid, false)\n                        .assign(passing, (0, codegen_1._) `[${passing}, ${i}]`)\n                        .else();\n                }\n                gen.if(schValid, () => {\n                    gen.assign(valid, true);\n                    gen.assign(passing, i);\n                    if (schCxt)\n                        cxt.mergeEvaluated(schCxt, codegen_1.Name);\n                });\n            });\n        }\n    },\n};\nexports.default = def;\n//# sourceMappingURL=oneOf.js.map9/dist/vocabularies/unevaluated/unevaluatedProperties.d.ts\u0001\u0010import type { CodeKeywordDefinition, ErrorObject, AnySchema } from \"../../types\";\nexport type UnevaluatedPropertiesError = ErrorObject<\"unevaluatedProperties\", {\n    unevaluatedProperty: string;\n}, AnySchema>;\ndeclare const def: CodeKeywordDefinition;\nexport default def;\n$/dist/vocabularies/format/index.d.tshimport type { Vocabulary } from \"../../types\";\ndeclare const format: Vocabulary;\nexport default format;\n'/lib/vocabularies/validation/pattern.ts\u0003import type {CodeKeywordDefinition, ErrorObject, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {usePattern} from \"../code\"\nimport {_, str} from \"../../compile/codegen\"\n\nexport type PatternError = ErrorObject<\"pattern\", {pattern: string}, string | {$data: string}>\n\nconst error: KeywordErrorDefinition = {\n  message: ({schemaCode}) => str`must match pattern \"${schemaCode}\"`,\n  params: ({schemaCode}) => _`{pattern: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"pattern\",\n  type: \"string\",\n  schemaType: \"string\",\n  $data: true,\n  error,\n  code(cxt: KeywordCxt) {\n    const {data, $data, schema, schemaCode, it} = cxt\n    // TODO regexp should be wrapped in try/catchs\n    const u = it.opts.unicodeRegExp ? \"u\" : \"\"\n    const regExp = $data ? _`(new RegExp(${schemaCode}, ${u}))` : usePattern(cxt, schema)\n    cxt.fail$data(_`!${regExp}.test(${data})`)\n  },\n}\n\nexport default def\n/lib/vocabularies/jtd/error.ts\u0002import type {KeywordErrorDefinition, KeywordErrorCxt, ErrorObject} from \"../../types\"\nimport {_, Code} from \"../../compile/codegen\"\n\nexport type _JTDTypeError<K extends string, T extends string, S> = ErrorObject<\n  K,\n  {type: T; nullable: boolean},\n  S\n>\n\nexport function typeError(t: string): KeywordErrorDefinition {\n  return {\n    message: (cxt) => typeErrorMessage(cxt, t),\n    params: (cxt) => typeErrorParams(cxt, t),\n  }\n}\n\nexport function typeErrorMessage({parentSchema}: KeywordErrorCxt, t: string): string {\n  return parentSchema?.nullable ? `must be ${t} or null` : `must be ${t}`\n}\n\nexport function typeErrorParams({parentSchema}: KeywordErrorCxt, t: string): Code {\n  return _`{type: ${t}, nullable: ${!!parentSchema?.nullable}}`\n}\n,/lib/vocabularies/applicator/dependencies.ts\r?import type {\n  CodeKeywordDefinition,\n  ErrorObject,\n  KeywordErrorDefinition,\n  SchemaMap,\n  AnySchema,\n} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str} from \"../../compile/codegen\"\nimport {alwaysValidSchema} from \"../../compile/util\"\nimport {checkReportMissingProp, checkMissingProp, reportMissingProp, propertyInData} from \"../code\"\n\nexport type PropertyDependencies = {[K in string]?: string[]}\n\nexport interface DependenciesErrorParams {\n  property: string\n  missingProperty: string\n  depsCount: number\n  deps: string // TODO change to string[]\n}\n\ntype SchemaDependencies = SchemaMap\n\nexport type DependenciesError = ErrorObject<\n  \"dependencies\",\n  DependenciesErrorParams,\n  {[K in string]?: string[] | AnySchema}\n>\n\nexport const error: KeywordErrorDefinition = {\n  message: ({params: {property, depsCount, deps}}) => {\n    const property_ies = depsCount === 1 ? \"property\" : \"properties\"\n    return str`must have ${property_ies} ${deps} when property ${property} is present`\n  },\n  params: ({params: {property, depsCount, deps, missingProperty}}) =>\n    _`{property: ${property},\n    missingProperty: ${missingProperty},\n    depsCount: ${depsCount},\n    deps: ${deps}}`, // TODO change to reference\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"dependencies\",\n  type: \"object\",\n  schemaType: \"object\",\n  error,\n  code(cxt: KeywordCxt) {\n    const [propDeps, schDeps] = splitDependencies(cxt)\n    validatePropertyDeps(cxt, propDeps)\n    validateSchemaDeps(cxt, schDeps)\n  },\n}\n\nfunction splitDependencies({schema}: KeywordCxt): [PropertyDependencies, SchemaDependencies] {\n  const propertyDeps: PropertyDependencies = {}\n  const schemaDeps: SchemaDependencies = {}\n  for (const key in schema) {\n    if (key === \"__proto__\") continue\n    const deps = Array.isArray(schema[key]) ? propertyDeps : schemaDeps\n    deps[key] = schema[key]\n  }\n  return [propertyDeps, schemaDeps]\n}\n\nexport function validatePropertyDeps(\n  cxt: KeywordCxt,\n  propertyDeps: {[K in string]?: string[]} = cxt.schema\n): void {\n  const {gen, data, it} = cxt\n  if (Object.keys(propertyDeps).length === 0) return\n  const missing = gen.let(\"missing\")\n  for (const prop in propertyDeps) {\n    const deps = propertyDeps[prop] as string[]\n    if (deps.length === 0) continue\n    const hasProperty = propertyInData(gen, data, prop, it.opts.ownProperties)\n    cxt.setParams({\n      property: prop,\n      depsCount: deps.length,\n      deps: deps.join(\", \"),\n    })\n    if (it.allErrors) {\n      gen.if(hasProperty, () => {\n        for (const depProp of deps) {\n          checkReportMissingProp(cxt, depProp)\n        }\n      })\n    } else {\n      gen.if(_`${hasProperty} && (${checkMissingProp(cxt, deps, missing)})`)\n      reportMissingProp(cxt, missing)\n      gen.else()\n    }\n  }\n}\n\nexport function validateSchemaDeps(cxt: KeywordCxt, schemaDeps: SchemaMap = cxt.schema): void {\n  const {gen, data, keyword, it} = cxt\n  const valid = gen.name(\"valid\")\n  for (const prop in schemaDeps) {\n    if (alwaysValidSchema(it, schemaDeps[prop] as AnySchema)) continue\n    gen.if(\n      propertyInData(gen, data, prop, it.opts.ownProperties),\n      () => {\n        const schCxt = cxt.subschema({keyword, schemaProp: prop}, valid)\n        cxt.mergeValidEvaluated(schCxt, valid)\n      },\n      () => gen.var(valid, true) // TODO var\n    )\n    cxt.ok(valid)\n  }\n}\n\nexport default def\n4/dist/vocabularies/validation/limitProperties.js.map\u0003{\"version\":3,\"file\":\"limitProperties.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../lib/vocabularies/validation/limitProperties.ts\"],\"names\":[],\"mappings\":\";;AAEA,mDAAuD;AAEvD,MAAM,KAAK,GAA2B;IACpC,OAAO,CAAC,EAAC,OAAO,EAAE,UAAU,EAAC;QAC3B,MAAM,IAAI,GAAG,OAAO,KAAK,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAA;QAC3D,OAAO,IAAA,aAAG,EAAA,iBAAiB,IAAI,SAAS,UAAU,aAAa,CAAA;IACjE,CAAC;IACD,MAAM,EAAE,CAAC,EAAC,UAAU,EAAC,EAAE,EAAE,CAAC,IAAA,WAAC,EAAA,WAAW,UAAU,GAAG;CACpD,CAAA;AAED,MAAM,GAAG,GAA0B;IACjC,OAAO,EAAE,CAAC,eAAe,EAAE,eAAe,CAAC;IAC3C,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE,QAAQ;IACpB,KAAK,EAAE,IAAI;IACX,KAAK;IACL,IAAI,CAAC,GAAe;QAClB,MAAM,EAAC,OAAO,EAAE,IAAI,EAAE,UAAU,EAAC,GAAG,GAAG,CAAA;QACvC,MAAM,EAAE,GAAG,OAAO,KAAK,eAAe,CAAC,CAAC,CAAC,mBAAS,CAAC,EAAE,CAAC,CAAC,CAAC,mBAAS,CAAC,EAAE,CAAA;QACpE,GAAG,CAAC,SAAS,CAAC,IAAA,WAAC,EAAA,eAAe,IAAI,YAAY,EAAE,IAAI,UAAU,EAAE,CAAC,CAAA;IACnE,CAAC;CACF,CAAA;AAED,kBAAe,GAAG,CAAA\"}/lib/types/json-schema.ts\u0018/* eslint-disable @typescript-eslint/no-empty-interface */\ntype StrictNullChecksWrapper<Name extends string, Type> = undefined extends null\n  ? `strictNullChecks must be true in tsconfig to use ${Name}`\n  : Type\n\ntype UnionToIntersection<U> = (U extends any ? (_: U) => void : never) extends (_: infer I) => void\n  ? I\n  : never\n\nexport type SomeJSONSchema = UncheckedJSONSchemaType<Known, true>\n\ntype UncheckedPartialSchema<T> = Partial<UncheckedJSONSchemaType<T, true>>\n\nexport type PartialSchema<T> = StrictNullChecksWrapper<\"PartialSchema\", UncheckedPartialSchema<T>>\n\ntype JSONType<T extends string, IsPartial extends boolean> = IsPartial extends true\n  ? T | undefined\n  : T\n\ninterface NumberKeywords {\n  minimum?: number\n  maximum?: number\n  exclusiveMinimum?: number\n  exclusiveMaximum?: number\n  multipleOf?: number\n  format?: string\n}\n\ninterface StringKeywords {\n  minLength?: number\n  maxLength?: number\n  pattern?: string\n  format?: string\n}\n\ntype UncheckedJSONSchemaType<T, IsPartial extends boolean> = (\n  | // these two unions allow arbitrary unions of types\n  {\n      anyOf: readonly UncheckedJSONSchemaType<T, IsPartial>[]\n    }\n  | {\n      oneOf: readonly UncheckedJSONSchemaType<T, IsPartial>[]\n    }\n  // this union allows for { type: (primitive)[] } style schemas\n  | ({\n      type: readonly (T extends number\n        ? JSONType<\"number\" | \"integer\", IsPartial>\n        : T extends string\n        ? JSONType<\"string\", IsPartial>\n        : T extends boolean\n        ? JSONType<\"boolean\", IsPartial>\n        : never)[]\n    } & UnionToIntersection<\n      T extends number\n        ? NumberKeywords\n        : T extends string\n        ? StringKeywords\n        : T extends boolean\n        ? // eslint-disable-next-line @typescript-eslint/ban-types\n          {}\n        : never\n    >)\n  // this covers \"normal\" types; it's last so typescript looks to it first for errors\n  | ((T extends number\n      ? {\n          type: JSONType<\"number\" | \"integer\", IsPartial>\n        } & NumberKeywords\n      : T extends string\n      ? {\n          type: JSONType<\"string\", IsPartial>\n        } & StringKeywords\n      : T extends boolean\n      ? {\n          type: JSONType<\"boolean\", IsPartial>\n        }\n      : T extends readonly [any, ...any[]]\n      ? {\n          // JSON AnySchema for tuple\n          type: JSONType<\"array\", IsPartial>\n          items: {\n            readonly [K in keyof T]-?: UncheckedJSONSchemaType<T[K], false> & Nullable<T[K]>\n          } & {length: T[\"length\"]}\n          minItems: T[\"length\"]\n        } & ({maxItems: T[\"length\"]} | {additionalItems: false})\n      : T extends readonly any[]\n      ? {\n          type: JSONType<\"array\", IsPartial>\n          items: UncheckedJSONSchemaType<T[0], false>\n          contains?: UncheckedPartialSchema<T[0]>\n          minItems?: number\n          maxItems?: number\n          minContains?: number\n          maxContains?: number\n          uniqueItems?: true\n          additionalItems?: never\n        }\n      : T extends Record<string, any>\n      ? {\n          // JSON AnySchema for records and dictionaries\n          // \"required\" is not optional because it is often forgotten\n          // \"properties\" are optional for more concise dictionary schemas\n          // \"patternProperties\" and can be only used with interfaces that have string index\n          type: JSONType<\"object\", IsPartial>\n          additionalProperties?: boolean | UncheckedJSONSchemaType<T[string], false>\n          unevaluatedProperties?: boolean | UncheckedJSONSchemaType<T[string], false>\n          properties?: IsPartial extends true\n            ? Partial<UncheckedPropertiesSchema<T>>\n            : UncheckedPropertiesSchema<T>\n          patternProperties?: Record<string, UncheckedJSONSchemaType<T[string], false>>\n          propertyNames?: Omit<UncheckedJSONSchemaType<string, false>, \"type\"> & {type?: \"string\"}\n          dependencies?: {[K in keyof T]?: Readonly<(keyof T)[]> | UncheckedPartialSchema<T>}\n          dependentRequired?: {[K in keyof T]?: Readonly<(keyof T)[]>}\n          dependentSchemas?: {[K in keyof T]?: UncheckedPartialSchema<T>}\n          minProperties?: number\n          maxProperties?: number\n        } & (IsPartial extends true // \"required\" is not necessary if it's a non-partial type with no required keys // are listed it only asserts that optional cannot be listed. // \"required\" type does not guarantee that all required properties\n          ? {required: Readonly<(keyof T)[]>}\n          : [UncheckedRequiredMembers<T>] extends [never]\n          ? {required?: Readonly<UncheckedRequiredMembers<T>[]>}\n          : {required: Readonly<UncheckedRequiredMembers<T>[]>})\n      : T extends null\n      ? {\n          type: JSONType<\"null\", IsPartial>\n          nullable: true\n        }\n      : never) & {\n      allOf?: Readonly<UncheckedPartialSchema<T>[]>\n      anyOf?: Readonly<UncheckedPartialSchema<T>[]>\n      oneOf?: Readonly<UncheckedPartialSchema<T>[]>\n      if?: UncheckedPartialSchema<T>\n      then?: UncheckedPartialSchema<T>\n      else?: UncheckedPartialSchema<T>\n      not?: UncheckedPartialSchema<T>\n    })\n) & {\n  [keyword: string]: any\n  $id?: string\n  $ref?: string\n  $defs?: Record<string, UncheckedJSONSchemaType<Known, true>>\n  definitions?: Record<string, UncheckedJSONSchemaType<Known, true>>\n}\n\nexport type JSONSchemaType<T> = StrictNullChecksWrapper<\n  \"JSONSchemaType\",\n  UncheckedJSONSchemaType<T, false>\n>\n\ntype Known =\n  | {[key: string]: Known}\n  | [Known, ...Known[]]\n  | Known[]\n  | number\n  | string\n  | boolean\n  | null\n\ntype UncheckedPropertiesSchema<T> = {\n  [K in keyof T]-?: (UncheckedJSONSchemaType<T[K], false> & Nullable<T[K]>) | {$ref: string}\n}\n\nexport type PropertiesSchema<T> = StrictNullChecksWrapper<\n  \"PropertiesSchema\",\n  UncheckedPropertiesSchema<T>\n>\n\ntype UncheckedRequiredMembers<T> = {\n  [K in keyof T]-?: undefined extends T[K] ? never : K\n}[keyof T]\n\nexport type RequiredMembers<T> = StrictNullChecksWrapper<\n  \"RequiredMembers\",\n  UncheckedRequiredMembers<T>\n>\n\ntype Nullable<T> = undefined extends T\n  ? {\n      nullable: true\n      const?: null // any non-null value would fail `const: null`, `null` would fail any other value in const\n      enum?: Readonly<(T | null)[]> // `null` must be explicitly included in \"enum\" for `null` to pass\n      default?: T | null\n    }\n  : {\n      nullable?: false\n      const?: T\n      enum?: Readonly<T[]>\n      default?: T\n    }\n/lib/compile/names.ts\u0004\\import {Name} from \"./codegen\"\n\nconst names = {\n  // validation function arguments\n  data: new Name(\"data\"), // data passed to validation function\n  // args passed from referencing schema\n  valCxt: new Name(\"valCxt\"), // validation/data context - should not be used directly, it is destructured to the names below\n  instancePath: new Name(\"instancePath\"),\n  parentData: new Name(\"parentData\"),\n  parentDataProperty: new Name(\"parentDataProperty\"),\n  rootData: new Name(\"rootData\"), // root data - same as the data passed to the first/top validation function\n  dynamicAnchors: new Name(\"dynamicAnchors\"), // used to support recursiveRef and dynamicRef\n  // function scoped variables\n  vErrors: new Name(\"vErrors\"), // null or array of validation errors\n  errors: new Name(\"errors\"), // counter of validation errors\n  this: new Name(\"this\"),\n  // \"globals\"\n  self: new Name(\"self\"),\n  scope: new Name(\"scope\"),\n  // JTD serialize/parse name for JSON string and position\n  json: new Name(\"json\"),\n  jsonPos: new Name(\"jsonPos\"),\n  jsonLen: new Name(\"jsonLen\"),\n  jsonPart: new Name(\"jsonPart\"),\n}\n\nexport default names\n/dist/compile/errors.js.map\u0017_{\"version\":3,\"file\":\"errors.js\",\"sourceRoot\":\"\",\"sources\":[\"../../lib/compile/errors.ts\"],\"names\":[],\"mappings\":\"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\"}&/dist/vocabularies/applicator/index.js\u0005\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst additionalItems_1 = require(\"./additionalItems\");\nconst prefixItems_1 = require(\"./prefixItems\");\nconst items_1 = require(\"./items\");\nconst items2020_1 = require(\"./items2020\");\nconst contains_1 = require(\"./contains\");\nconst dependencies_1 = require(\"./dependencies\");\nconst propertyNames_1 = require(\"./propertyNames\");\nconst additionalProperties_1 = require(\"./additionalProperties\");\nconst properties_1 = require(\"./properties\");\nconst patternProperties_1 = require(\"./patternProperties\");\nconst not_1 = require(\"./not\");\nconst anyOf_1 = require(\"./anyOf\");\nconst oneOf_1 = require(\"./oneOf\");\nconst allOf_1 = require(\"./allOf\");\nconst if_1 = require(\"./if\");\nconst thenElse_1 = require(\"./thenElse\");\nfunction getApplicator(draft2020 = false) {\n    const applicator = [\n        // any\n        not_1.default,\n        anyOf_1.default,\n        oneOf_1.default,\n        allOf_1.default,\n        if_1.default,\n        thenElse_1.default,\n        // object\n        propertyNames_1.default,\n        additionalProperties_1.default,\n        dependencies_1.default,\n        properties_1.default,\n        patternProperties_1.default,\n    ];\n    // array\n    if (draft2020)\n        applicator.push(prefixItems_1.default, items2020_1.default);\n    else\n        applicator.push(additionalItems_1.default, items_1.default);\n    applicator.push(contains_1.default);\n    return applicator;\n}\nexports.default = getApplicator;\n//# sourceMappingURL=index.js.map6/lib/vocabularies/unevaluated/unevaluatedProperties.ts\timport type {\n  CodeKeywordDefinition,\n  KeywordErrorDefinition,\n  ErrorObject,\n  AnySchema,\n} from \"../../types\"\nimport {_, not, and, Name, Code} from \"../../compile/codegen\"\nimport {alwaysValidSchema, Type} from \"../../compile/util\"\nimport N from \"../../compile/names\"\n\nexport type UnevaluatedPropertiesError = ErrorObject<\n  \"unevaluatedProperties\",\n  {unevaluatedProperty: string},\n  AnySchema\n>\n\nconst error: KeywordErrorDefinition = {\n  message: \"must NOT have unevaluated properties\",\n  params: ({params}) => _`{unevaluatedProperty: ${params.unevaluatedProperty}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"unevaluatedProperties\",\n  type: \"object\",\n  schemaType: [\"boolean\", \"object\"],\n  trackErrors: true,\n  error,\n  code(cxt) {\n    const {gen, schema, data, errsCount, it} = cxt\n    /* istanbul ignore if */\n    if (!errsCount) throw new Error(\"ajv implementation error\")\n    const {allErrors, props} = it\n    if (props instanceof Name) {\n      gen.if(_`${props} !== true`, () =>\n        gen.forIn(\"key\", data, (key: Name) =>\n          gen.if(unevaluatedDynamic(props, key), () => unevaluatedPropCode(key))\n        )\n      )\n    } else if (props !== true) {\n      gen.forIn(\"key\", data, (key: Name) =>\n        props === undefined\n          ? unevaluatedPropCode(key)\n          : gen.if(unevaluatedStatic(props, key), () => unevaluatedPropCode(key))\n      )\n    }\n    it.props = true\n    cxt.ok(_`${errsCount} === ${N.errors}`)\n\n    function unevaluatedPropCode(key: Name): void {\n      if (schema === false) {\n        cxt.setParams({unevaluatedProperty: key})\n        cxt.error()\n        if (!allErrors) gen.break()\n        return\n      }\n\n      if (!alwaysValidSchema(it, schema)) {\n        const valid = gen.name(\"valid\")\n        cxt.subschema(\n          {\n            keyword: \"unevaluatedProperties\",\n            dataProp: key,\n            dataPropType: Type.Str,\n          },\n          valid\n        )\n        if (!allErrors) gen.if(not(valid), () => gen.break())\n      }\n    }\n\n    function unevaluatedDynamic(evaluatedProps: Name, key: Name): Code {\n      return _`!${evaluatedProps} || !${evaluatedProps}[${key}]`\n    }\n\n    function unevaluatedStatic(evaluatedProps: {[K in string]?: true}, key: Name): Code {\n      const ps: Code[] = []\n      for (const p in evaluatedProps) {\n        if (evaluatedProps[p] === true) ps.push(_`${key} !== ${p}`)\n      }\n      return and(...ps)\n    }\n  },\n}\n\nexport default def\n/dist/compile/jtd/serialize.js#\u0002\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst types_1 = require(\"./types\");\nconst __1 = require(\"..\");\nconst codegen_1 = require(\"../codegen\");\nconst ref_error_1 = require(\"../ref_error\");\nconst names_1 = require(\"../names\");\nconst code_1 = require(\"../../vocabularies/code\");\nconst ref_1 = require(\"../../vocabularies/jtd/ref\");\nconst util_1 = require(\"../util\");\nconst quote_1 = require(\"../../runtime/quote\");\nconst genSerialize = {\n    elements: serializeElements,\n    values: serializeValues,\n    discriminator: serializeDiscriminator,\n    properties: serializeProperties,\n    optionalProperties: serializeProperties,\n    enum: serializeString,\n    type: serializeType,\n    ref: serializeRef,\n};\nfunction compileSerializer(sch, definitions) {\n    const _sch = __1.getCompilingSchema.call(this, sch);\n    if (_sch)\n        return _sch;\n    const { es5, lines } = this.opts.code;\n    const { ownProperties } = this.opts;\n    const gen = new codegen_1.CodeGen(this.scope, { es5, lines, ownProperties });\n    const serializeName = gen.scopeName(\"serialize\");\n    const cxt = {\n        self: this,\n        gen,\n        schema: sch.schema,\n        schemaEnv: sch,\n        definitions,\n        data: names_1.default.data,\n    };\n    let sourceCode;\n    try {\n        this._compilations.add(sch);\n        sch.serializeName = serializeName;\n        gen.func(serializeName, names_1.default.data, false, () => {\n            gen.let(names_1.default.json, (0, codegen_1.str) ``);\n            serializeCode(cxt);\n            gen.return(names_1.default.json);\n        });\n        gen.optimize(this.opts.code.optimize);\n        const serializeFuncCode = gen.toString();\n        sourceCode = `${gen.scopeRefs(names_1.default.scope)}return ${serializeFuncCode}`;\n        const makeSerialize = new Function(`${names_1.default.scope}`, sourceCode);\n        const serialize = makeSerialize(this.scope.get());\n        this.scope.value(serializeName, { ref: serialize });\n        sch.serialize = serialize;\n    }\n    catch (e) {\n        if (sourceCode)\n            this.logger.error(\"Error compiling serializer, function code:\", sourceCode);\n        delete sch.serialize;\n        delete sch.serializeName;\n        throw e;\n    }\n    finally {\n        this._compilations.delete(sch);\n    }\n    return sch;\n}\nexports.default = compileSerializer;\nfunction serializeCode(cxt) {\n    let form;\n    for (const key of types_1.jtdForms) {\n        if (key in cxt.schema) {\n            form = key;\n            break;\n        }\n    }\n    serializeNullable(cxt, form ? genSerialize[form] : serializeEmpty);\n}\nfunction serializeNullable(cxt, serializeForm) {\n    const { gen, schema, data } = cxt;\n    if (!schema.nullable)\n        return serializeForm(cxt);\n    gen.if((0, codegen_1._) `${data} === undefined || ${data} === null`, () => gen.add(names_1.default.json, (0, codegen_1._) `\"null\"`), () => serializeForm(cxt));\n}\nfunction serializeElements(cxt) {\n    const { gen, schema, data } = cxt;\n    gen.add(names_1.default.json, (0, codegen_1.str) `[`);\n    const first = gen.let(\"first\", true);\n    gen.forOf(\"el\", data, (el) => {\n        addComma(cxt, first);\n        serializeCode({ ...cxt, schema: schema.elements, data: el });\n    });\n    gen.add(names_1.default.json, (0, codegen_1.str) `]`);\n}\nfunction serializeValues(cxt) {\n    const { gen, schema, data } = cxt;\n    gen.add(names_1.default.json, (0, codegen_1.str) `{`);\n    const first = gen.let(\"first\", true);\n    gen.forIn(\"key\", data, (key) => serializeKeyValue(cxt, key, schema.values, first));\n    gen.add(names_1.default.json, (0, codegen_1.str) `}`);\n}\nfunction serializeKeyValue(cxt, key, schema, first) {\n    const { gen, data } = cxt;\n    addComma(cxt, first);\n    serializeString({ ...cxt, data: key });\n    gen.add(names_1.default.json, (0, codegen_1.str) `:`);\n    const value = gen.const(\"value\", (0, codegen_1._) `${data}${(0, codegen_1.getProperty)(key)}`);\n    serializeCode({ ...cxt, schema, data: value });\n}\nfunction serializeDiscriminator(cxt) {\n    const { gen, schema, data } = cxt;\n    const { discriminator } = schema;\n    gen.add(names_1.default.json, (0, codegen_1.str) `{${JSON.stringify(discriminator)}:`);\n    const tag = gen.const(\"tag\", (0, codegen_1._) `${data}${(0, codegen_1.getProperty)(discriminator)}`);\n    serializeString({ ...cxt, data: tag });\n    gen.if(false);\n    for (const tagValue in schema.mapping) {\n        gen.elseIf((0, codegen_1._) `${tag} === ${tagValue}`);\n        const sch = schema.mapping[tagValue];\n        serializeSchemaProperties({ ...cxt, schema: sch }, discriminator);\n    }\n    gen.endIf();\n    gen.add(names_1.default.json, (0, codegen_1.str) `}`);\n}\nfunction serializeProperties(cxt) {\n    const { gen } = cxt;\n    gen.add(names_1.default.json, (0, codegen_1.str) `{`);\n    serializeSchemaProperties(cxt);\n    gen.add(names_1.default.json, (0, codegen_1.str) `}`);\n}\nfunction serializeSchemaProperties(cxt, discriminator) {\n    const { gen, schema, data } = cxt;\n    const { properties, optionalProperties } = schema;\n    const props = keys(properties);\n    const optProps = keys(optionalProperties);\n    const allProps = allProperties(props.concat(optProps));\n    let first = !discriminator;\n    let firstProp;\n    for (const key of props) {\n        if (first)\n            first = false;\n        else\n            gen.add(names_1.default.json, (0, codegen_1.str) `,`);\n        serializeProperty(key, properties[key], keyValue(key));\n    }\n    if (first)\n        firstProp = gen.let(\"first\", true);\n    for (const key of optProps) {\n        const value = keyValue(key);\n        gen.if((0, codegen_1.and)((0, codegen_1._) `${value} !== undefined`, (0, code_1.isOwnProperty)(gen, data, key)), () => {\n            addComma(cxt, firstProp);\n            serializeProperty(key, optionalProperties[key], value);\n        });\n    }\n    if (schema.additionalProperties) {\n        gen.forIn(\"key\", data, (key) => gen.if(isAdditional(key, allProps), () => serializeKeyValue(cxt, key, {}, firstProp)));\n    }\n    function keys(ps) {\n        return ps ? Object.keys(ps) : [];\n    }\n    function allProperties(ps) {\n        if (discriminator)\n            ps.push(discriminator);\n        if (new Set(ps).size !== ps.length) {\n            throw new Error(\"JTD: properties/optionalProperties/disciminator overlap\");\n        }\n        return ps;\n    }\n    function keyValue(key) {\n        return gen.const(\"value\", (0, codegen_1._) `${data}${(0, codegen_1.getProperty)(key)}`);\n    }\n    function serializeProperty(key, propSchema, value) {\n        gen.add(names_1.default.json, (0, codegen_1.str) `${JSON.stringify(key)}:`);\n        serializeCode({ ...cxt, schema: propSchema, data: value });\n    }\n    function isAdditional(key, ps) {\n        return ps.length ? (0, codegen_1.and)(...ps.map((p) => (0, codegen_1._) `${key} !== ${p}`)) : true;\n    }\n}\nfunction serializeType(cxt) {\n    const { gen, schema, data } = cxt;\n    switch (schema.type) {\n        case \"boolean\":\n            gen.add(names_1.default.json, (0, codegen_1._) `${data} ? \"true\" : \"false\"`);\n            break;\n        case \"string\":\n            serializeString(cxt);\n            break;\n        case \"timestamp\":\n            gen.if((0, codegen_1._) `${data} instanceof Date`, () => gen.add(names_1.default.json, (0, codegen_1._) `'\"' + ${data}.toISOString() + '\"'`), () => serializeString(cxt));\n            break;\n        default:\n            serializeNumber(cxt);\n    }\n}\nfunction serializeString({ gen, data }) {\n    gen.add(names_1.default.json, (0, codegen_1._) `${(0, util_1.useFunc)(gen, quote_1.default)}(${data})`);\n}\nfunction serializeNumber({ gen, data }) {\n    gen.add(names_1.default.json, (0, codegen_1._) `\"\" + ${data}`);\n}\nfunction serializeRef(cxt) {\n    const { gen, self, data, definitions, schema, schemaEnv } = cxt;\n    const { ref } = schema;\n    const refSchema = definitions[ref];\n    if (!refSchema)\n        throw new ref_error_1.default(self.opts.uriResolver, \"\", ref, `No definition ${ref}`);\n    if (!(0, ref_1.hasRef)(refSchema))\n        return serializeCode({ ...cxt, schema: refSchema });\n    const { root } = schemaEnv;\n    const sch = compileSerializer.call(self, new __1.SchemaEnv({ schema: refSchema, root }), definitions);\n    gen.add(names_1.default.json, (0, codegen_1._) `${getSerialize(gen, sch)}(${data})`);\n}\nfunction getSerialize(gen, sch) {\n    return sch.serialize\n        ? gen.scopeValue(\"serialize\", { ref: sch.serialize })\n        : (0, codegen_1._) `${gen.scopeValue(\"wrapper\", { ref: sch })}.serialize`;\n}\nfunction serializeEmpty({ gen, data }) {\n    gen.add(names_1.default.json, (0, codegen_1._) `JSON.stringify(${data})`);\n}\nfunction addComma({ gen }, first) {\n    if (first) {\n        gen.if(first, () => gen.assign(first, false), () => gen.add(names_1.default.json, (0, codegen_1.str) `,`));\n    }\n    else {\n        gen.add(names_1.default.json, (0, codegen_1.str) `,`);\n    }\n}\n//# sourceMappingURL=serialize.js.map%/lib/vocabularies/applicator/items.ts\u0007dimport type {CodeKeywordDefinition, AnySchema, AnySchemaObject} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_} from \"../../compile/codegen\"\nimport {alwaysValidSchema, mergeEvaluated, checkStrictMode} from \"../../compile/util\"\nimport {validateArray} from \"../code\"\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"items\",\n  type: \"array\",\n  schemaType: [\"object\", \"array\", \"boolean\"],\n  before: \"uniqueItems\",\n  code(cxt: KeywordCxt) {\n    const {schema, it} = cxt\n    if (Array.isArray(schema)) return validateTuple(cxt, \"additionalItems\", schema)\n    it.items = true\n    if (alwaysValidSchema(it, schema)) return\n    cxt.ok(validateArray(cxt))\n  },\n}\n\nexport function validateTuple(\n  cxt: KeywordCxt,\n  extraItems: string,\n  schArr: AnySchema[] = cxt.schema\n): void {\n  const {gen, parentSchema, data, keyword, it} = cxt\n  checkStrictTuple(parentSchema)\n  if (it.opts.unevaluated && schArr.length && it.items !== true) {\n    it.items = mergeEvaluated.items(gen, schArr.length, it.items)\n  }\n  const valid = gen.name(\"valid\")\n  const len = gen.const(\"len\", _`${data}.length`)\n  schArr.forEach((sch: AnySchema, i: number) => {\n    if (alwaysValidSchema(it, sch)) return\n    gen.if(_`${len} > ${i}`, () =>\n      cxt.subschema(\n        {\n          keyword,\n          schemaProp: i,\n          dataProp: i,\n        },\n        valid\n      )\n    )\n    cxt.ok(valid)\n  })\n\n  function checkStrictTuple(sch: AnySchemaObject): void {\n    const {opts, errSchemaPath} = it\n    const l = schArr.length\n    const fullTuple = l === sch.minItems && (l === sch.maxItems || sch[extraItems] === false)\n    if (opts.strictTuples && !fullTuple) {\n      const msg = `\"${keyword}\" is ${l}-tuple, but minItems or maxItems/${extraItems} are not specified or different at path \"${errSchemaPath}\"`\n      checkStrictMode(it, msg, opts.strictTuples)\n    }\n  }\n}\n\nexport default def\n/dist/jtd.d.ts\bimport type { AnySchemaObject, SchemaObject, JTDParser } from \"./types\";\nimport type { JTDSchemaType, SomeJTDSchemaType, JTDDataType } from \"./types/jtd-schema\";\nimport AjvCore, { CurrentOptions } from \"./core\";\ntype JTDOptions = CurrentOptions & {\n    strict?: never;\n    allowMatchingProperties?: never;\n    allowUnionTypes?: never;\n    validateFormats?: never;\n    $data?: never;\n    verbose?: boolean;\n    $comment?: never;\n    formats?: never;\n    loadSchema?: never;\n    useDefaults?: never;\n    coerceTypes?: never;\n    next?: never;\n    unevaluated?: never;\n    dynamicRef?: never;\n    meta?: boolean;\n    defaultMeta?: never;\n    inlineRefs?: boolean;\n    loopRequired?: never;\n    multipleOfPrecision?: never;\n};\ndeclare class Ajv extends AjvCore {\n    constructor(opts?: JTDOptions);\n    _addVocabularies(): void;\n    _addDefaultMetaSchema(): void;\n    defaultMeta(): string | AnySchemaObject | undefined;\n    compileSerializer<T = unknown>(schema: SchemaObject): (data: T) => string;\n    compileSerializer<T = unknown>(schema: JTDSchemaType<T>): (data: T) => string;\n    compileParser<T = unknown>(schema: SchemaObject): JTDParser<T>;\n    compileParser<T = unknown>(schema: JTDSchemaType<T>): JTDParser<T>;\n    private _compileSerializer;\n    private _compileParser;\n}\nexport default Ajv;\nexport { Format, FormatDefinition, AsyncFormatDefinition, KeywordDefinition, KeywordErrorDefinition, CodeKeywordDefinition, MacroKeywordDefinition, FuncKeywordDefinition, Vocabulary, Schema, SchemaObject, AnySchemaObject, AsyncSchema, AnySchema, ValidateFunction, AsyncValidateFunction, ErrorObject, ErrorNoParams, JTDParser, } from \"./types\";\nexport { Plugin, Options, CodeOptions, InstanceOptions, Logger, ErrorsTextOptions } from \"./core\";\nexport { SchemaCxt, SchemaObjCxt } from \"./compile\";\nexport { KeywordCxt } from \"./compile/validate\";\nexport { JTDErrorObject } from \"./vocabularies/jtd\";\nexport { _, str, stringify, nil, Name, Code, CodeGen, CodeGenOptions } from \"./compile/codegen\";\nexport { JTDSchemaType, SomeJTDSchemaType, JTDDataType };\nexport { JTDOptions };\nexport { default as ValidationError } from \"./runtime/validation_error\";\nexport { default as MissingRefError } from \"./compile/ref_error\";\n&/dist/compile/validate/defaults.js.map\u0005\f{\"version\":3,\"file\":\"defaults.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../lib/compile/validate/defaults.ts\"],\"names\":[],\"mappings\":\";;;AACA,wCAAoD;AACpD,kCAAuC;AAEvC,SAAgB,cAAc,CAAC,EAAgB,EAAE,EAAW;IAC1D,MAAM,EAAC,UAAU,EAAE,KAAK,EAAC,GAAG,EAAE,CAAC,MAAM,CAAA;IACrC,IAAI,EAAE,KAAK,QAAQ,IAAI,UAAU,EAAE;QACjC,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE;YAC5B,aAAa,CAAC,EAAE,EAAE,GAAG,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAA;SAChD;KACF;SAAM,IAAI,EAAE,KAAK,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;QACjD,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAS,EAAE,EAAE,CAAC,aAAa,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAA;KACrE;AACH,CAAC;AATD,wCASC;AAED,SAAS,aAAa,CAAC,EAAgB,EAAE,IAAqB,EAAE,YAAqB;IACnF,MAAM,EAAC,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,EAAC,GAAG,EAAE,CAAA;IAC3C,IAAI,YAAY,KAAK,SAAS;QAAE,OAAM;IACtC,MAAM,SAAS,GAAG,IAAA,WAAC,EAAA,GAAG,IAAI,GAAG,IAAA,qBAAW,EAAC,IAAI,CAAC,EAAE,CAAA;IAChD,IAAI,aAAa,EAAE;QACjB,IAAA,sBAAe,EAAC,EAAE,EAAE,2BAA2B,SAAS,EAAE,CAAC,CAAA;QAC3D,OAAM;KACP;IAED,IAAI,SAAS,GAAG,IAAA,WAAC,EAAA,GAAG,SAAS,gBAAgB,CAAA;IAC7C,IAAI,IAAI,CAAC,WAAW,KAAK,OAAO,EAAE;QAChC,SAAS,GAAG,IAAA,WAAC,EAAA,GAAG,SAAS,OAAO,SAAS,gBAAgB,SAAS,SAAS,CAAA;KAC5E;IACD,iCAAiC;IACjC,2FAA2F;IAC3F,GAAG,CAAC,EAAE,CAAC,SAAS,EAAE,IAAA,WAAC,EAAA,GAAG,SAAS,MAAM,IAAA,mBAAS,EAAC,YAAY,CAAC,EAAE,CAAC,CAAA;AACjE,CAAC\"}&/lib/vocabularies/jtd/discriminator.ts\n`import type {CodeKeywordDefinition, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, not, getProperty, Name} from \"../../compile/codegen\"\nimport {checkMetadata} from \"./metadata\"\nimport {checkNullableObject} from \"./nullable\"\nimport {typeErrorMessage, typeErrorParams, _JTDTypeError} from \"./error\"\nimport {DiscrError, DiscrErrorObj} from \"../discriminator/types\"\n\nexport type JTDDiscriminatorError =\n  | _JTDTypeError<\"discriminator\", \"object\", string>\n  | DiscrErrorObj<DiscrError.Tag>\n  | DiscrErrorObj<DiscrError.Mapping>\n\nconst error: KeywordErrorDefinition = {\n  message: (cxt) => {\n    const {schema, params} = cxt\n    return params.discrError\n      ? params.discrError === DiscrError.Tag\n        ? `tag \"${schema}\" must be string`\n        : `value of tag \"${schema}\" must be in mapping`\n      : typeErrorMessage(cxt, \"object\")\n  },\n  params: (cxt) => {\n    const {schema, params} = cxt\n    return params.discrError\n      ? _`{error: ${params.discrError}, tag: ${schema}, tagValue: ${params.tag}}`\n      : typeErrorParams(cxt, \"object\")\n  },\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"discriminator\",\n  schemaType: \"string\",\n  implements: [\"mapping\"],\n  error,\n  code(cxt: KeywordCxt) {\n    checkMetadata(cxt)\n    const {gen, data, schema, parentSchema} = cxt\n    const [valid, cond] = checkNullableObject(cxt, data)\n\n    gen.if(cond)\n    validateDiscriminator()\n    gen.elseIf(not(valid))\n    cxt.error()\n    gen.endIf()\n    cxt.ok(valid)\n\n    function validateDiscriminator(): void {\n      const tag = gen.const(\"tag\", _`${data}${getProperty(schema)}`)\n      gen.if(_`${tag} === undefined`)\n      cxt.error(false, {discrError: DiscrError.Tag, tag})\n      gen.elseIf(_`typeof ${tag} == \"string\"`)\n      validateMapping(tag)\n      gen.else()\n      cxt.error(false, {discrError: DiscrError.Tag, tag}, {instancePath: schema})\n      gen.endIf()\n    }\n\n    function validateMapping(tag: Name): void {\n      gen.if(false)\n      for (const tagValue in parentSchema.mapping) {\n        gen.elseIf(_`${tag} === ${tagValue}`)\n        gen.assign(valid, applyTagSchema(tagValue))\n      }\n      gen.else()\n      cxt.error(\n        false,\n        {discrError: DiscrError.Mapping, tag},\n        {instancePath: schema, schemaPath: \"mapping\", parentSchema: true}\n      )\n      gen.endIf()\n    }\n\n    function applyTagSchema(schemaProp: string): Name {\n      const _valid = gen.name(\"valid\")\n      cxt.subschema(\n        {\n          keyword: \"mapping\",\n          schemaProp,\n          jtdDiscriminator: schema,\n        },\n        _valid\n      )\n      return _valid\n    }\n  },\n}\n\nexport default def\n//dist/refs/json-schema-2019-09/meta/format.json\u0001w{\n  \"$schema\": \"https://json-schema.org/draft/2019-09/schema\",\n  \"$id\": \"https://json-schema.org/draft/2019-09/meta/format\",\n  \"$vocabulary\": {\n    \"https://json-schema.org/draft/2019-09/vocab/format\": true\n  },\n  \"$recursiveAnchor\": true,\n\n  \"title\": \"Format vocabulary meta-schema\",\n  \"type\": [\"object\", \"boolean\"],\n  \"properties\": {\n    \"format\": {\"type\": \"string\"}\n  }\n}\n/dist/compile/ref_error.d.tsimport type { UriResolver } from \"../types\";\nexport default class MissingRefError extends Error {\n    readonly missingRef: string;\n    readonly missingSchema: string;\n    constructor(resolver: UriResolver, baseId: string, ref: string, msg?: string);\n}\n+/dist/vocabularies/jtd/discriminator.js.map\n{\"version\":3,\"file\":\"discriminator.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../lib/vocabularies/jtd/discriminator.ts\"],\"names\":[],\"mappings\":\"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\"}/dist/compile/names.js\u0004Y\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"./codegen\");\nconst names = {\n    // validation function arguments\n    data: new codegen_1.Name(\"data\"),\n    // args passed from referencing schema\n    valCxt: new codegen_1.Name(\"valCxt\"),\n    instancePath: new codegen_1.Name(\"instancePath\"),\n    parentData: new codegen_1.Name(\"parentData\"),\n    parentDataProperty: new codegen_1.Name(\"parentDataProperty\"),\n    rootData: new codegen_1.Name(\"rootData\"),\n    dynamicAnchors: new codegen_1.Name(\"dynamicAnchors\"),\n    // function scoped variables\n    vErrors: new codegen_1.Name(\"vErrors\"),\n    errors: new codegen_1.Name(\"errors\"),\n    this: new codegen_1.Name(\"this\"),\n    // \"globals\"\n    self: new codegen_1.Name(\"self\"),\n    scope: new codegen_1.Name(\"scope\"),\n    // JTD serialize/parse name for JSON string and position\n    json: new codegen_1.Name(\"json\"),\n    jsonPos: new codegen_1.Name(\"jsonPos\"),\n    jsonLen: new codegen_1.Name(\"jsonLen\"),\n    jsonPart: new codegen_1.Name(\"jsonPart\"),\n};\nexports.default = names;\n//# sourceMappingURL=names.js.map3/dist/refs/json-schema-2019-09/meta/applicator.json\u0006\u001e{\n  \"$schema\": \"https://json-schema.org/draft/2019-09/schema\",\n  \"$id\": \"https://json-schema.org/draft/2019-09/meta/applicator\",\n  \"$vocabulary\": {\n    \"https://json-schema.org/draft/2019-09/vocab/applicator\": true\n  },\n  \"$recursiveAnchor\": true,\n\n  \"title\": \"Applicator vocabulary meta-schema\",\n  \"type\": [\"object\", \"boolean\"],\n  \"properties\": {\n    \"additionalItems\": {\"$recursiveRef\": \"#\"},\n    \"unevaluatedItems\": {\"$recursiveRef\": \"#\"},\n    \"items\": {\n      \"anyOf\": [{\"$recursiveRef\": \"#\"}, {\"$ref\": \"#/$defs/schemaArray\"}]\n    },\n    \"contains\": {\"$recursiveRef\": \"#\"},\n    \"additionalProperties\": {\"$recursiveRef\": \"#\"},\n    \"unevaluatedProperties\": {\"$recursiveRef\": \"#\"},\n    \"properties\": {\n      \"type\": \"object\",\n      \"additionalProperties\": {\"$recursiveRef\": \"#\"},\n      \"default\": {}\n    },\n    \"patternProperties\": {\n      \"type\": \"object\",\n      \"additionalProperties\": {\"$recursiveRef\": \"#\"},\n      \"propertyNames\": {\"format\": \"regex\"},\n      \"default\": {}\n    },\n    \"dependentSchemas\": {\n      \"type\": \"object\",\n      \"additionalProperties\": {\n        \"$recursiveRef\": \"#\"\n      }\n    },\n    \"propertyNames\": {\"$recursiveRef\": \"#\"},\n    \"if\": {\"$recursiveRef\": \"#\"},\n    \"then\": {\"$recursiveRef\": \"#\"},\n    \"else\": {\"$recursiveRef\": \"#\"},\n    \"allOf\": {\"$ref\": \"#/$defs/schemaArray\"},\n    \"anyOf\": {\"$ref\": \"#/$defs/schemaArray\"},\n    \"oneOf\": {\"$ref\": \"#/$defs/schemaArray\"},\n    \"not\": {\"$recursiveRef\": \"#\"}\n  },\n  \"$defs\": {\n    \"schemaArray\": {\n      \"type\": \"array\",\n      \"minItems\": 1,\n      \"items\": {\"$recursiveRef\": \"#\"}\n    }\n  }\n}\n,/dist/vocabularies/applicator/items2020.d.tsimport type { CodeKeywordDefinition, ErrorObject, AnySchema } from \"../../types\";\nexport type ItemsError = ErrorObject<\"items\", {\n    limit: number;\n}, AnySchema>;\ndeclare const def: CodeKeywordDefinition;\nexport default def;\n/lib/vocabularies/next.ts\u0001@import type {Vocabulary} from \"../types\"\nimport dependentRequired from \"./validation/dependentRequired\"\nimport dependentSchemas from \"./applicator/dependentSchemas\"\nimport limitContains from \"./validation/limitContains\"\n\nconst next: Vocabulary = [dependentRequired, dependentSchemas, limitContains]\n\nexport default next\n#/lib/vocabularies/jtd/properties.ts\u0018dimport type {\n  CodeKeywordDefinition,\n  ErrorObject,\n  KeywordErrorDefinition,\n  SchemaObject,\n} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {propertyInData, allSchemaProperties, isOwnProperty} from \"../code\"\nimport {alwaysValidSchema, schemaRefOrVal} from \"../../compile/util\"\nimport {_, and, not, Code, Name} from \"../../compile/codegen\"\nimport {checkMetadata} from \"./metadata\"\nimport {checkNullableObject} from \"./nullable\"\nimport {typeErrorMessage, typeErrorParams, _JTDTypeError} from \"./error\"\n\nenum PropError {\n  Additional = \"additional\",\n  Missing = \"missing\",\n}\n\ntype PropKeyword = \"properties\" | \"optionalProperties\"\n\ntype PropSchema = {[P in string]?: SchemaObject}\n\nexport type JTDPropertiesError =\n  | _JTDTypeError<PropKeyword, \"object\", PropSchema>\n  | ErrorObject<PropKeyword, {error: PropError.Additional; additionalProperty: string}, PropSchema>\n  | ErrorObject<PropKeyword, {error: PropError.Missing; missingProperty: string}, PropSchema>\n\nexport const error: KeywordErrorDefinition = {\n  message: (cxt) => {\n    const {params} = cxt\n    return params.propError\n      ? params.propError === PropError.Additional\n        ? \"must NOT have additional properties\"\n        : `must have property '${params.missingProperty}'`\n      : typeErrorMessage(cxt, \"object\")\n  },\n  params: (cxt) => {\n    const {params} = cxt\n    return params.propError\n      ? params.propError === PropError.Additional\n        ? _`{error: ${params.propError}, additionalProperty: ${params.additionalProperty}}`\n        : _`{error: ${params.propError}, missingProperty: ${params.missingProperty}}`\n      : typeErrorParams(cxt, \"object\")\n  },\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"properties\",\n  schemaType: \"object\",\n  error,\n  code: validateProperties,\n}\n\n// const error: KeywordErrorDefinition = {\n//   message: \"should NOT have additional properties\",\n//   params: ({params}) => _`{additionalProperty: ${params.additionalProperty}}`,\n// }\n\nexport function validateProperties(cxt: KeywordCxt): void {\n  checkMetadata(cxt)\n  const {gen, data, parentSchema, it} = cxt\n  const {additionalProperties, nullable} = parentSchema\n  if (it.jtdDiscriminator && nullable) throw new Error(\"JTD: nullable inside discriminator mapping\")\n  if (commonProperties()) {\n    throw new Error(\"JTD: properties and optionalProperties have common members\")\n  }\n  const [allProps, properties] = schemaProperties(\"properties\")\n  const [allOptProps, optProperties] = schemaProperties(\"optionalProperties\")\n  if (properties.length === 0 && optProperties.length === 0 && additionalProperties) {\n    return\n  }\n\n  const [valid, cond] =\n    it.jtdDiscriminator === undefined\n      ? checkNullableObject(cxt, data)\n      : [gen.let(\"valid\", false), true]\n  gen.if(cond, () =>\n    gen.assign(valid, true).block(() => {\n      validateProps(properties, \"properties\", true)\n      validateProps(optProperties, \"optionalProperties\")\n      if (!additionalProperties) validateAdditional()\n    })\n  )\n  cxt.pass(valid)\n\n  function commonProperties(): boolean {\n    const props = parentSchema.properties as Record<string, any> | undefined\n    const optProps = parentSchema.optionalProperties as Record<string, any> | undefined\n    if (!(props && optProps)) return false\n    for (const p in props) {\n      if (Object.prototype.hasOwnProperty.call(optProps, p)) return true\n    }\n    return false\n  }\n\n  function schemaProperties(keyword: string): [string[], string[]] {\n    const schema = parentSchema[keyword]\n    const allPs = schema ? allSchemaProperties(schema) : []\n    if (it.jtdDiscriminator && allPs.some((p) => p === it.jtdDiscriminator)) {\n      throw new Error(`JTD: discriminator tag used in ${keyword}`)\n    }\n    const ps = allPs.filter((p) => !alwaysValidSchema(it, schema[p]))\n    return [allPs, ps]\n  }\n\n  function validateProps(props: string[], keyword: string, required?: boolean): void {\n    const _valid = gen.var(\"valid\")\n    for (const prop of props) {\n      gen.if(\n        propertyInData(gen, data, prop, it.opts.ownProperties),\n        () => applyPropertySchema(prop, keyword, _valid),\n        () => missingProperty(prop)\n      )\n      cxt.ok(_valid)\n    }\n\n    function missingProperty(prop: string): void {\n      if (required) {\n        gen.assign(_valid, false)\n        cxt.error(false, {propError: PropError.Missing, missingProperty: prop}, {schemaPath: prop})\n      } else {\n        gen.assign(_valid, true)\n      }\n    }\n  }\n\n  function applyPropertySchema(prop: string, keyword: string, _valid: Name): void {\n    cxt.subschema(\n      {\n        keyword,\n        schemaProp: prop,\n        dataProp: prop,\n      },\n      _valid\n    )\n  }\n\n  function validateAdditional(): void {\n    gen.forIn(\"key\", data, (key: Name) => {\n      const addProp = isAdditional(key, allProps, \"properties\", it.jtdDiscriminator)\n      const addOptProp = isAdditional(key, allOptProps, \"optionalProperties\")\n      const extra =\n        addProp === true ? addOptProp : addOptProp === true ? addProp : and(addProp, addOptProp)\n      gen.if(extra, () => {\n        if (it.opts.removeAdditional) {\n          gen.code(_`delete ${data}[${key}]`)\n        } else {\n          cxt.error(\n            false,\n            {propError: PropError.Additional, additionalProperty: key},\n            {instancePath: key, parentSchema: true}\n          )\n          if (!it.opts.allErrors) gen.break()\n        }\n      })\n    })\n  }\n\n  function isAdditional(\n    key: Name,\n    props: string[],\n    keyword: string,\n    jtdDiscriminator?: string\n  ): Code | true {\n    let additional: Code | boolean\n    if (props.length > 8) {\n      // TODO maybe an option instead of hard-coded 8?\n      const propsSchema = schemaRefOrVal(it, parentSchema[keyword], keyword)\n      additional = not(isOwnProperty(gen, propsSchema as Code, key))\n      if (jtdDiscriminator !== undefined) {\n        additional = and(additional, _`${key} !== ${jtdDiscriminator}`)\n      }\n    } else if (props.length || jtdDiscriminator !== undefined) {\n      const ps = jtdDiscriminator === undefined ? props : [jtdDiscriminator].concat(props)\n      additional = and(...ps.map((p) => _`${key} !== ${p}`))\n    } else {\n      additional = true\n    }\n    return additional\n  }\n}\n\nexport default def\n/lib/vocabularies/code.ts\u0014import type {AnySchema, SchemaMap} from \"../types\"\nimport type {SchemaCxt} from \"../compile\"\nimport type {KeywordCxt} from \"../compile/validate\"\nimport {CodeGen, _, and, or, not, nil, strConcat, getProperty, Code, Name} from \"../compile/codegen\"\nimport {alwaysValidSchema, Type} from \"../compile/util\"\nimport N from \"../compile/names\"\nimport {useFunc} from \"../compile/util\"\nexport function checkReportMissingProp(cxt: KeywordCxt, prop: string): void {\n  const {gen, data, it} = cxt\n  gen.if(noPropertyInData(gen, data, prop, it.opts.ownProperties), () => {\n    cxt.setParams({missingProperty: _`${prop}`}, true)\n    cxt.error()\n  })\n}\n\nexport function checkMissingProp(\n  {gen, data, it: {opts}}: KeywordCxt,\n  properties: string[],\n  missing: Name\n): Code {\n  return or(\n    ...properties.map((prop) =>\n      and(noPropertyInData(gen, data, prop, opts.ownProperties), _`${missing} = ${prop}`)\n    )\n  )\n}\n\nexport function reportMissingProp(cxt: KeywordCxt, missing: Name): void {\n  cxt.setParams({missingProperty: missing}, true)\n  cxt.error()\n}\n\nexport function hasPropFunc(gen: CodeGen): Name {\n  return gen.scopeValue(\"func\", {\n    // eslint-disable-next-line @typescript-eslint/unbound-method\n    ref: Object.prototype.hasOwnProperty,\n    code: _`Object.prototype.hasOwnProperty`,\n  })\n}\n\nexport function isOwnProperty(gen: CodeGen, data: Name, property: Name | string): Code {\n  return _`${hasPropFunc(gen)}.call(${data}, ${property})`\n}\n\nexport function propertyInData(\n  gen: CodeGen,\n  data: Name,\n  property: Name | string,\n  ownProperties?: boolean\n): Code {\n  const cond = _`${data}${getProperty(property)} !== undefined`\n  return ownProperties ? _`${cond} && ${isOwnProperty(gen, data, property)}` : cond\n}\n\nexport function noPropertyInData(\n  gen: CodeGen,\n  data: Name,\n  property: Name | string,\n  ownProperties?: boolean\n): Code {\n  const cond = _`${data}${getProperty(property)} === undefined`\n  return ownProperties ? or(cond, not(isOwnProperty(gen, data, property))) : cond\n}\n\nexport function allSchemaProperties(schemaMap?: SchemaMap): string[] {\n  return schemaMap ? Object.keys(schemaMap).filter((p) => p !== \"__proto__\") : []\n}\n\nexport function schemaProperties(it: SchemaCxt, schemaMap: SchemaMap): string[] {\n  return allSchemaProperties(schemaMap).filter(\n    (p) => !alwaysValidSchema(it, schemaMap[p] as AnySchema)\n  )\n}\n\nexport function callValidateCode(\n  {schemaCode, data, it: {gen, topSchemaRef, schemaPath, errorPath}, it}: KeywordCxt,\n  func: Code,\n  context: Code,\n  passSchema?: boolean\n): Code {\n  const dataAndSchema = passSchema ? _`${schemaCode}, ${data}, ${topSchemaRef}${schemaPath}` : data\n  const valCxt: [Name, Code | number][] = [\n    [N.instancePath, strConcat(N.instancePath, errorPath)],\n    [N.parentData, it.parentData],\n    [N.parentDataProperty, it.parentDataProperty],\n    [N.rootData, N.rootData],\n  ]\n  if (it.opts.dynamicRef) valCxt.push([N.dynamicAnchors, N.dynamicAnchors])\n  const args = _`${dataAndSchema}, ${gen.object(...valCxt)}`\n  return context !== nil ? _`${func}.call(${context}, ${args})` : _`${func}(${args})`\n}\n\nconst newRegExp = _`new RegExp`\n\nexport function usePattern({gen, it: {opts}}: KeywordCxt, pattern: string): Name {\n  const u = opts.unicodeRegExp ? \"u\" : \"\"\n  const {regExp} = opts.code\n  const rx = regExp(pattern, u)\n\n  return gen.scopeValue(\"pattern\", {\n    key: rx.toString(),\n    ref: rx,\n    code: _`${regExp.code === \"new RegExp\" ? newRegExp : useFunc(gen, regExp)}(${pattern}, ${u})`,\n  })\n}\n\nexport function validateArray(cxt: KeywordCxt): Name {\n  const {gen, data, keyword, it} = cxt\n  const valid = gen.name(\"valid\")\n  if (it.allErrors) {\n    const validArr = gen.let(\"valid\", true)\n    validateItems(() => gen.assign(validArr, false))\n    return validArr\n  }\n  gen.var(valid, true)\n  validateItems(() => gen.break())\n  return valid\n\n  function validateItems(notValid: () => void): void {\n    const len = gen.const(\"len\", _`${data}.length`)\n    gen.forRange(\"i\", 0, len, (i) => {\n      cxt.subschema(\n        {\n          keyword,\n          dataProp: i,\n          dataPropType: Type.Num,\n        },\n        valid\n      )\n      gen.if(not(valid), notValid)\n    })\n  }\n}\n\nexport function validateUnion(cxt: KeywordCxt): void {\n  const {gen, schema, keyword, it} = cxt\n  /* istanbul ignore if */\n  if (!Array.isArray(schema)) throw new Error(\"ajv implementation error\")\n  const alwaysValid = schema.some((sch: AnySchema) => alwaysValidSchema(it, sch))\n  if (alwaysValid && !it.opts.unevaluated) return\n\n  const valid = gen.let(\"valid\", false)\n  const schValid = gen.name(\"_valid\")\n\n  gen.block(() =>\n    schema.forEach((_sch: AnySchema, i: number) => {\n      const schCxt = cxt.subschema(\n        {\n          keyword,\n          schemaProp: i,\n          compositeRule: true,\n        },\n        schValid\n      )\n      gen.assign(valid, _`${valid} || ${schValid}`)\n      const merged = cxt.mergeValidEvaluated(schCxt, schValid)\n      // can short-circuit if `unevaluatedProperties/Items` not supported (opts.unevaluated !== true)\n      // or if all properties and items were evaluated (it.props === true && it.items === true)\n      if (!merged) gen.if(not(valid))\n    })\n  )\n\n  cxt.result(\n    valid,\n    () => cxt.reset(),\n    () => cxt.error(true)\n  )\n}\n/dist/compile/jtd/parse.d.tsimport type Ajv from \"../../core\";\nimport { SchemaObjectMap } from \"./types\";\nimport { SchemaEnv } from \"..\";\nexport default function compileParser(this: Ajv, sch: SchemaEnv, definitions: SchemaObjectMap): SchemaEnv;\n /dist/vocabularies/core/index.js\u0001e\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst id_1 = require(\"./id\");\nconst ref_1 = require(\"./ref\");\nconst core = [\n    \"$schema\",\n    \"$id\",\n    \"$defs\",\n    \"$vocabulary\",\n    { keyword: \"$comment\" },\n    \"definitions\",\n    id_1.default,\n    ref_1.default,\n];\nexports.default = core;\n//# sourceMappingURL=index.js.map!/dist/vocabularies/jtd/ref.js.map\t{\"version\":3,\"file\":\"ref.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../lib/vocabularies/jtd/ref.ts\"],\"names\":[],\"mappings\":\"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\"}*/dist/vocabularies/dynamic/dynamicRef.d.tsimport type { CodeKeywordDefinition } from \"../../types\";\nimport type { KeywordCxt } from \"../../compile/validate\";\ndeclare const def: CodeKeywordDefinition;\nexport declare function dynamicRef(cxt: KeywordCxt, ref: string): void;\nexport default def;\n/dist/compile/resolve.js.map\u0012{\"version\":3,\"file\":\"resolve.js\",\"sourceRoot\":\"\",\"sources\":[\"../../lib/compile/resolve.ts\"],\"names\":[],\"mappings\":\"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\"}/dist/standalone/index.js.map\u000f{\"version\":3,\"file\":\"index.js\",\"sourceRoot\":\"\",\"sources\":[\"../../lib/standalone/index.ts\"],\"names\":[],\"mappings\":\"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\"}#/dist/vocabularies/format/format.js\u0010\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst error = {\n    message: ({ schemaCode }) => (0, codegen_1.str) `must match format \"${schemaCode}\"`,\n    params: ({ schemaCode }) => (0, codegen_1._) `{format: ${schemaCode}}`,\n};\nconst def = {\n    keyword: \"format\",\n    type: [\"number\", \"string\"],\n    schemaType: \"string\",\n    $data: true,\n    error,\n    code(cxt, ruleType) {\n        const { gen, data, $data, schema, schemaCode, it } = cxt;\n        const { opts, errSchemaPath, schemaEnv, self } = it;\n        if (!opts.validateFormats)\n            return;\n        if ($data)\n            validate$DataFormat();\n        else\n            validateFormat();\n        function validate$DataFormat() {\n            const fmts = gen.scopeValue(\"formats\", {\n                ref: self.formats,\n                code: opts.code.formats,\n            });\n            const fDef = gen.const(\"fDef\", (0, codegen_1._) `${fmts}[${schemaCode}]`);\n            const fType = gen.let(\"fType\");\n            const format = gen.let(\"format\");\n            // TODO simplify\n            gen.if((0, codegen_1._) `typeof ${fDef} == \"object\" && !(${fDef} instanceof RegExp)`, () => gen.assign(fType, (0, codegen_1._) `${fDef}.type || \"string\"`).assign(format, (0, codegen_1._) `${fDef}.validate`), () => gen.assign(fType, (0, codegen_1._) `\"string\"`).assign(format, fDef));\n            cxt.fail$data((0, codegen_1.or)(unknownFmt(), invalidFmt()));\n            function unknownFmt() {\n                if (opts.strictSchema === false)\n                    return codegen_1.nil;\n                return (0, codegen_1._) `${schemaCode} && !${format}`;\n            }\n            function invalidFmt() {\n                const callFormat = schemaEnv.$async\n                    ? (0, codegen_1._) `(${fDef}.async ? await ${format}(${data}) : ${format}(${data}))`\n                    : (0, codegen_1._) `${format}(${data})`;\n                const validData = (0, codegen_1._) `(typeof ${format} == \"function\" ? ${callFormat} : ${format}.test(${data}))`;\n                return (0, codegen_1._) `${format} && ${format} !== true && ${fType} === ${ruleType} && !${validData}`;\n            }\n        }\n        function validateFormat() {\n            const formatDef = self.formats[schema];\n            if (!formatDef) {\n                unknownFormat();\n                return;\n            }\n            if (formatDef === true)\n                return;\n            const [fmtType, format, fmtRef] = getFormat(formatDef);\n            if (fmtType === ruleType)\n                cxt.pass(validCondition());\n            function unknownFormat() {\n                if (opts.strictSchema === false) {\n                    self.logger.warn(unknownMsg());\n                    return;\n                }\n                throw new Error(unknownMsg());\n                function unknownMsg() {\n                    return `unknown format \"${schema}\" ignored in schema at path \"${errSchemaPath}\"`;\n                }\n            }\n            function getFormat(fmtDef) {\n                const code = fmtDef instanceof RegExp\n                    ? (0, codegen_1.regexpCode)(fmtDef)\n                    : opts.code.formats\n                        ? (0, codegen_1._) `${opts.code.formats}${(0, codegen_1.getProperty)(schema)}`\n                        : undefined;\n                const fmt = gen.scopeValue(\"formats\", { key: schema, ref: fmtDef, code });\n                if (typeof fmtDef == \"object\" && !(fmtDef instanceof RegExp)) {\n                    return [fmtDef.type || \"string\", fmtDef.validate, (0, codegen_1._) `${fmt}.validate`];\n                }\n                return [\"string\", fmtDef, fmt];\n            }\n            function validCondition() {\n                if (typeof formatDef == \"object\" && !(formatDef instanceof RegExp) && formatDef.async) {\n                    if (!schemaEnv.$async)\n                        throw new Error(\"async format in sync schema\");\n                    return (0, codegen_1._) `await ${fmtRef}(${data})`;\n                }\n                return typeof format == \"function\" ? (0, codegen_1._) `${fmtRef}(${data})` : (0, codegen_1._) `${fmtRef}.test(${data})`;\n            }\n        }\n    },\n};\nexports.default = def;\n//# sourceMappingURL=format.js.map#/dist/compile/validate/subschema.js\u000f\u0012\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.extendSubschemaMode = exports.extendSubschemaData = exports.getSubschema = void 0;\nconst codegen_1 = require(\"../codegen\");\nconst util_1 = require(\"../util\");\nfunction getSubschema(it, { keyword, schemaProp, schema, schemaPath, errSchemaPath, topSchemaRef }) {\n    if (keyword !== undefined && schema !== undefined) {\n        throw new Error('both \"keyword\" and \"schema\" passed, only one allowed');\n    }\n    if (keyword !== undefined) {\n        const sch = it.schema[keyword];\n        return schemaProp === undefined\n            ? {\n                schema: sch,\n                schemaPath: (0, codegen_1._) `${it.schemaPath}${(0, codegen_1.getProperty)(keyword)}`,\n                errSchemaPath: `${it.errSchemaPath}/${keyword}`,\n            }\n            : {\n                schema: sch[schemaProp],\n                schemaPath: (0, codegen_1._) `${it.schemaPath}${(0, codegen_1.getProperty)(keyword)}${(0, codegen_1.getProperty)(schemaProp)}`,\n                errSchemaPath: `${it.errSchemaPath}/${keyword}/${(0, util_1.escapeFragment)(schemaProp)}`,\n            };\n    }\n    if (schema !== undefined) {\n        if (schemaPath === undefined || errSchemaPath === undefined || topSchemaRef === undefined) {\n            throw new Error('\"schemaPath\", \"errSchemaPath\" and \"topSchemaRef\" are required with \"schema\"');\n        }\n        return {\n            schema,\n            schemaPath,\n            topSchemaRef,\n            errSchemaPath,\n        };\n    }\n    throw new Error('either \"keyword\" or \"schema\" must be passed');\n}\nexports.getSubschema = getSubschema;\nfunction extendSubschemaData(subschema, it, { dataProp, dataPropType: dpType, data, dataTypes, propertyName }) {\n    if (data !== undefined && dataProp !== undefined) {\n        throw new Error('both \"data\" and \"dataProp\" passed, only one allowed');\n    }\n    const { gen } = it;\n    if (dataProp !== undefined) {\n        const { errorPath, dataPathArr, opts } = it;\n        const nextData = gen.let(\"data\", (0, codegen_1._) `${it.data}${(0, codegen_1.getProperty)(dataProp)}`, true);\n        dataContextProps(nextData);\n        subschema.errorPath = (0, codegen_1.str) `${errorPath}${(0, util_1.getErrorPath)(dataProp, dpType, opts.jsPropertySyntax)}`;\n        subschema.parentDataProperty = (0, codegen_1._) `${dataProp}`;\n        subschema.dataPathArr = [...dataPathArr, subschema.parentDataProperty];\n    }\n    if (data !== undefined) {\n        const nextData = data instanceof codegen_1.Name ? data : gen.let(\"data\", data, true); // replaceable if used once?\n        dataContextProps(nextData);\n        if (propertyName !== undefined)\n            subschema.propertyName = propertyName;\n        // TODO something is possibly wrong here with not changing parentDataProperty and not appending dataPathArr\n    }\n    if (dataTypes)\n        subschema.dataTypes = dataTypes;\n    function dataContextProps(_nextData) {\n        subschema.data = _nextData;\n        subschema.dataLevel = it.dataLevel + 1;\n        subschema.dataTypes = [];\n        it.definedProperties = new Set();\n        subschema.parentData = it.data;\n        subschema.dataNames = [...it.dataNames, _nextData];\n    }\n}\nexports.extendSubschemaData = extendSubschemaData;\nfunction extendSubschemaMode(subschema, { jtdDiscriminator, jtdMetadata, compositeRule, createErrors, allErrors }) {\n    if (compositeRule !== undefined)\n        subschema.compositeRule = compositeRule;\n    if (createErrors !== undefined)\n        subschema.createErrors = createErrors;\n    if (allErrors !== undefined)\n        subschema.allErrors = allErrors;\n    subschema.jtdDiscriminator = jtdDiscriminator; // not inherited\n    subschema.jtdMetadata = jtdMetadata; // not inherited\n}\nexports.extendSubschemaMode = extendSubschemaMode;\n//# sourceMappingURL=subschema.js.map%/lib/vocabularies/applicator/index.ts\u00068import type {ErrorNoParams, Vocabulary} from \"../../types\"\nimport additionalItems, {AdditionalItemsError} from \"./additionalItems\"\nimport prefixItems from \"./prefixItems\"\nimport items from \"./items\"\nimport items2020, {ItemsError} from \"./items2020\"\nimport contains, {ContainsError} from \"./contains\"\nimport dependencies, {DependenciesError} from \"./dependencies\"\nimport propertyNames, {PropertyNamesError} from \"./propertyNames\"\nimport additionalProperties, {AdditionalPropertiesError} from \"./additionalProperties\"\nimport properties from \"./properties\"\nimport patternProperties from \"./patternProperties\"\nimport notKeyword, {NotKeywordError} from \"./not\"\nimport anyOf, {AnyOfError} from \"./anyOf\"\nimport oneOf, {OneOfError} from \"./oneOf\"\nimport allOf from \"./allOf\"\nimport ifKeyword, {IfKeywordError} from \"./if\"\nimport thenElse from \"./thenElse\"\n\nexport default function getApplicator(draft2020 = false): Vocabulary {\n  const applicator = [\n    // any\n    notKeyword,\n    anyOf,\n    oneOf,\n    allOf,\n    ifKeyword,\n    thenElse,\n    // object\n    propertyNames,\n    additionalProperties,\n    dependencies,\n    properties,\n    patternProperties,\n  ]\n  // array\n  if (draft2020) applicator.push(prefixItems, items2020)\n  else applicator.push(additionalItems, items)\n  applicator.push(contains)\n  return applicator\n}\n\nexport type ApplicatorKeywordError =\n  | ErrorNoParams<\"false schema\">\n  | AdditionalItemsError\n  | ItemsError\n  | ContainsError\n  | AdditionalPropertiesError\n  | DependenciesError\n  | IfKeywordError\n  | AnyOfError\n  | OneOfError\n  | NotKeywordError\n  | PropertyNamesError\n\"/lib/vocabularies/format/format.ts\u000fimport type {\n  AddedFormat,\n  FormatValidator,\n  AsyncFormatValidator,\n  CodeKeywordDefinition,\n  KeywordErrorDefinition,\n  ErrorObject,\n} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str, nil, or, Code, getProperty, regexpCode} from \"../../compile/codegen\"\n\ntype FormatValidate =\n  | FormatValidator<string>\n  | FormatValidator<number>\n  | AsyncFormatValidator<string>\n  | AsyncFormatValidator<number>\n  | RegExp\n  | string\n  | true\n\nexport type FormatError = ErrorObject<\"format\", {format: string}, string | {$data: string}>\n\nconst error: KeywordErrorDefinition = {\n  message: ({schemaCode}) => str`must match format \"${schemaCode}\"`,\n  params: ({schemaCode}) => _`{format: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"format\",\n  type: [\"number\", \"string\"],\n  schemaType: \"string\",\n  $data: true,\n  error,\n  code(cxt: KeywordCxt, ruleType?: string) {\n    const {gen, data, $data, schema, schemaCode, it} = cxt\n    const {opts, errSchemaPath, schemaEnv, self} = it\n    if (!opts.validateFormats) return\n\n    if ($data) validate$DataFormat()\n    else validateFormat()\n\n    function validate$DataFormat(): void {\n      const fmts = gen.scopeValue(\"formats\", {\n        ref: self.formats,\n        code: opts.code.formats,\n      })\n      const fDef = gen.const(\"fDef\", _`${fmts}[${schemaCode}]`)\n      const fType = gen.let(\"fType\")\n      const format = gen.let(\"format\")\n      // TODO simplify\n      gen.if(\n        _`typeof ${fDef} == \"object\" && !(${fDef} instanceof RegExp)`,\n        () => gen.assign(fType, _`${fDef}.type || \"string\"`).assign(format, _`${fDef}.validate`),\n        () => gen.assign(fType, _`\"string\"`).assign(format, fDef)\n      )\n      cxt.fail$data(or(unknownFmt(), invalidFmt()))\n\n      function unknownFmt(): Code {\n        if (opts.strictSchema === false) return nil\n        return _`${schemaCode} && !${format}`\n      }\n\n      function invalidFmt(): Code {\n        const callFormat = schemaEnv.$async\n          ? _`(${fDef}.async ? await ${format}(${data}) : ${format}(${data}))`\n          : _`${format}(${data})`\n        const validData = _`(typeof ${format} == \"function\" ? ${callFormat} : ${format}.test(${data}))`\n        return _`${format} && ${format} !== true && ${fType} === ${ruleType} && !${validData}`\n      }\n    }\n\n    function validateFormat(): void {\n      const formatDef: AddedFormat | undefined = self.formats[schema]\n      if (!formatDef) {\n        unknownFormat()\n        return\n      }\n      if (formatDef === true) return\n      const [fmtType, format, fmtRef] = getFormat(formatDef)\n      if (fmtType === ruleType) cxt.pass(validCondition())\n\n      function unknownFormat(): void {\n        if (opts.strictSchema === false) {\n          self.logger.warn(unknownMsg())\n          return\n        }\n        throw new Error(unknownMsg())\n\n        function unknownMsg(): string {\n          return `unknown format \"${schema as string}\" ignored in schema at path \"${errSchemaPath}\"`\n        }\n      }\n\n      function getFormat(fmtDef: AddedFormat): [string, FormatValidate, Code] {\n        const code =\n          fmtDef instanceof RegExp\n            ? regexpCode(fmtDef)\n            : opts.code.formats\n            ? _`${opts.code.formats}${getProperty(schema)}`\n            : undefined\n        const fmt = gen.scopeValue(\"formats\", {key: schema, ref: fmtDef, code})\n        if (typeof fmtDef == \"object\" && !(fmtDef instanceof RegExp)) {\n          return [fmtDef.type || \"string\", fmtDef.validate, _`${fmt}.validate`]\n        }\n\n        return [\"string\", fmtDef, fmt]\n      }\n\n      function validCondition(): Code {\n        if (typeof formatDef == \"object\" && !(formatDef instanceof RegExp) && formatDef.async) {\n          if (!schemaEnv.$async) throw new Error(\"async format in sync schema\")\n          return _`await ${fmtRef}(${data})`\n        }\n        return typeof format == \"function\" ? _`${fmtRef}(${data})` : _`${fmtRef}.test(${data})`\n      }\n    }\n  },\n}\n\nexport default def\n;/dist/vocabularies/unevaluated/unevaluatedProperties.js.map\t{\"version\":3,\"file\":\"unevaluatedProperties.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../lib/vocabularies/unevaluated/unevaluatedProperties.ts\"],\"names\":[],\"mappings\":\"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\"}/lib/vocabularies/metadata.ts\u00010import type {Vocabulary} from \"../types\"\n\nexport const metadataVocabulary: Vocabulary = [\n  \"title\",\n  \"description\",\n  \"default\",\n  \"deprecated\",\n  \"readOnly\",\n  \"writeOnly\",\n  \"examples\",\n]\n\nexport const contentVocabulary: Vocabulary = [\n  \"contentMediaType\",\n  \"contentEncoding\",\n  \"contentSchema\",\n]\n//dist/vocabularies/validation/multipleOf.js.map\u0003{\"version\":3,\"file\":\"multipleOf.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../lib/vocabularies/validation/multipleOf.ts\"],\"names\":[],\"mappings\":\";;AAEA,mDAA4C;AAQ5C,MAAM,KAAK,GAA2B;IACpC,OAAO,EAAE,CAAC,EAAC,UAAU,EAAC,EAAE,EAAE,CAAC,IAAA,aAAG,EAAA,uBAAuB,UAAU,EAAE;IACjE,MAAM,EAAE,CAAC,EAAC,UAAU,EAAC,EAAE,EAAE,CAAC,IAAA,WAAC,EAAA,gBAAgB,UAAU,GAAG;CACzD,CAAA;AAED,MAAM,GAAG,GAA0B;IACjC,OAAO,EAAE,YAAY;IACrB,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE,QAAQ;IACpB,KAAK,EAAE,IAAI;IACX,KAAK;IACL,IAAI,CAAC,GAAe;QAClB,MAAM,EAAC,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAC,GAAG,GAAG,CAAA;QACvC,sEAAsE;QACtE,MAAM,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAA;QACxC,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QAC1B,MAAM,OAAO,GAAG,IAAI;YAClB,CAAC,CAAC,IAAA,WAAC,EAAA,uBAAuB,GAAG,OAAO,GAAG,UAAU,IAAI,EAAE;YACvD,CAAC,CAAC,IAAA,WAAC,EAAA,GAAG,GAAG,iBAAiB,GAAG,GAAG,CAAA;QAClC,GAAG,CAAC,SAAS,CAAC,IAAA,WAAC,EAAA,IAAI,UAAU,cAAc,GAAG,MAAM,IAAI,IAAI,UAAU,KAAK,OAAO,IAAI,CAAC,CAAA;IACzF,CAAC;CACF,CAAA;AAED,kBAAe,GAAG,CAAA\"}'/dist/compile/validate/applicability.js\u0003U\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.shouldUseRule = exports.shouldUseGroup = exports.schemaHasRulesForType = void 0;\nfunction schemaHasRulesForType({ schema, self }, type) {\n    const group = self.RULES.types[type];\n    return group && group !== true && shouldUseGroup(schema, group);\n}\nexports.schemaHasRulesForType = schemaHasRulesForType;\nfunction shouldUseGroup(schema, group) {\n    return group.rules.some((rule) => shouldUseRule(schema, rule));\n}\nexports.shouldUseGroup = shouldUseGroup;\nfunction shouldUseRule(schema, rule) {\n    var _a;\n    return (schema[rule.keyword] !== undefined ||\n        ((_a = rule.definition.implements) === null || _a === void 0 ? void 0 : _a.some((kwd) => schema[kwd] !== undefined)));\n}\nexports.shouldUseRule = shouldUseRule;\n//# sourceMappingURL=applicability.js.map/dist/compile/ref_error.js\u0002\u001f\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst resolve_1 = require(\"./resolve\");\nclass MissingRefError extends Error {\n    constructor(resolver, baseId, ref, msg) {\n        super(msg || `can't resolve reference ${ref} from id ${baseId}`);\n        this.missingRef = (0, resolve_1.resolveUrl)(resolver, baseId, ref);\n        this.missingSchema = (0, resolve_1.normalizeId)((0, resolve_1.getFullPath)(resolver, this.missingRef));\n    }\n}\nexports.default = MissingRefError;\n//# sourceMappingURL=ref_error.js.map0/dist/vocabularies/validation/limitNumber.js.map\u0005\u0014{\"version\":3,\"file\":\"limitNumber.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../lib/vocabularies/validation/limitNumber.ts\"],\"names\":[],\"mappings\":\";;AAEA,mDAA6D;AAE7D,MAAM,GAAG,GAAG,mBAAS,CAAA;AAMrB,MAAM,IAAI,GAA4D;IACpE,OAAO,EAAE,EAAC,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,EAAE,EAAC;IACjD,OAAO,EAAE,EAAC,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,EAAE,EAAC;IACjD,gBAAgB,EAAE,EAAC,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,GAAG,EAAC;IACzD,gBAAgB,EAAE,EAAC,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,GAAG,EAAC;CAC1D,CAAA;AAQD,MAAM,KAAK,GAA2B;IACpC,OAAO,EAAE,CAAC,EAAC,OAAO,EAAE,UAAU,EAAC,EAAE,EAAE,CAAC,IAAA,aAAG,EAAA,WAAW,IAAI,CAAC,OAAc,CAAC,CAAC,KAAK,IAAI,UAAU,EAAE;IAC5F,MAAM,EAAE,CAAC,EAAC,OAAO,EAAE,UAAU,EAAC,EAAE,EAAE,CAChC,IAAA,WAAC,EAAA,gBAAgB,IAAI,CAAC,OAAc,CAAC,CAAC,KAAK,YAAY,UAAU,GAAG;CACvE,CAAA;AAED,MAAM,GAAG,GAA0B;IACjC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;IAC1B,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE,QAAQ;IACpB,KAAK,EAAE,IAAI;IACX,KAAK;IACL,IAAI,CAAC,GAAe;QAClB,MAAM,EAAC,OAAO,EAAE,IAAI,EAAE,UAAU,EAAC,GAAG,GAAG,CAAA;QACvC,GAAG,CAAC,SAAS,CAAC,IAAA,WAAC,EAAA,GAAG,IAAI,IAAI,IAAI,CAAC,OAAc,CAAC,CAAC,IAAI,IAAI,UAAU,aAAa,IAAI,GAAG,CAAC,CAAA;IACxF,CAAC;CACF,CAAA;AAED,kBAAe,GAAG,CAAA\"}+/dist/refs/json-schema-2019-09/index.js.map\u0002{\"version\":3,\"file\":\"index.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../lib/refs/json-schema-2019-09/index.ts\"],\"names\":[],\"mappings\":\";;AAEA,4CAA2C;AAC3C,qDAAoD;AACpD,+CAA8C;AAC9C,yCAAwC;AACxC,6CAA4C;AAC5C,kDAAiD;AACjD,qDAAoD;AAEpD,MAAM,iBAAiB,GAAG,CAAC,aAAa,CAAC,CAAA;AAEzC,SAAwB,iBAAiB,CAAY,KAAe;IAClE,CAAC;IAAA;QACC,UAAU;QACV,UAAU;QACV,OAAO;QACP,IAAI;QACJ,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC;QACvB,QAAQ;QACR,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC;KAC5B,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,CAAA;IAC7D,OAAO,IAAI,CAAA;IAEX,SAAS,SAAS,CAAC,GAAQ,EAAE,GAAoB;QAC/C,OAAO,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;IAClE,CAAC;AACH,CAAC;AAfD,oCAeC\"}/dist/runtime/timestamp.d.tsĥdeclare function validTimestamp(str: string, allowDate: boolean): boolean;\ndeclare namespace validTimestamp {\n    var code: string;\n}\nexport default validTimestamp;\n/dist/standalone/instance.js\u0003\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst core_1 = require(\"../core\");\nconst _1 = require(\".\");\nconst requireFromString = require(\"require-from-string\");\nclass AjvPack {\n    constructor(ajv) {\n        this.ajv = ajv;\n    }\n    validate(schemaKeyRef, data) {\n        return core_1.default.prototype.validate.call(this, schemaKeyRef, data);\n    }\n    compile(schema, meta) {\n        return this.getStandalone(this.ajv.compile(schema, meta));\n    }\n    getSchema(keyRef) {\n        const v = this.ajv.getSchema(keyRef);\n        if (!v)\n            return undefined;\n        return this.getStandalone(v);\n    }\n    getStandalone(v) {\n        return requireFromString((0, _1.default)(this.ajv, v));\n    }\n    addSchema(...args) {\n        this.ajv.addSchema.call(this.ajv, ...args);\n        return this;\n    }\n    addKeyword(...args) {\n        this.ajv.addKeyword.call(this.ajv, ...args);\n        return this;\n    }\n}\nexports.default = AjvPack;\n//# sourceMappingURL=instance.js.map\"/dist/vocabularies/jtd/type.js.map\n\u0004{\"version\":3,\"file\":\"type.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../lib/vocabularies/jtd/type.ts\"],\"names\":[],\"mappings\":\"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\"}2/dist/vocabularies/applicator/additionalItems.d.ts\u0001import type { CodeKeywordDefinition, ErrorObject, AnySchema } from \"../../types\";\nimport type { KeywordCxt } from \"../../compile/validate\";\nexport type AdditionalItemsError = ErrorObject<\"additionalItems\", {\n    limit: number;\n}, AnySchema>;\ndeclare const def: CodeKeywordDefinition;\nexport declare function validateAdditionalItems(cxt: KeywordCxt, items: AnySchema[]): void;\nexport default def;\n:/dist/refs/json-schema-2020-12/meta/format-annotation.json\u0001{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"$id\": \"https://json-schema.org/draft/2020-12/meta/format-annotation\",\n  \"$vocabulary\": {\n    \"https://json-schema.org/draft/2020-12/vocab/format-annotation\": true\n  },\n  \"$dynamicAnchor\": \"meta\",\n\n  \"title\": \"Format vocabulary meta-schema for annotation results\",\n  \"type\": [\"object\", \"boolean\"],\n  \"properties\": {\n    \"format\": {\"type\": \"string\"}\n  }\n}\n*/lib/vocabularies/validation/limitItems.ts\u0003,import type {CodeKeywordDefinition, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str, operators} from \"../../compile/codegen\"\n\nconst error: KeywordErrorDefinition = {\n  message({keyword, schemaCode}) {\n    const comp = keyword === \"maxItems\" ? \"more\" : \"fewer\"\n    return str`must NOT have ${comp} than ${schemaCode} items`\n  },\n  params: ({schemaCode}) => _`{limit: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: [\"maxItems\", \"minItems\"],\n  type: \"array\",\n  schemaType: \"number\",\n  $data: true,\n  error,\n  code(cxt: KeywordCxt) {\n    const {keyword, data, schemaCode} = cxt\n    const op = keyword === \"maxItems\" ? operators.GT : operators.LT\n    cxt.fail$data(_`${data}.length ${op} ${schemaCode}`)\n  },\n}\n\nexport default def\n*/dist/vocabularies/applicator/allOf.js.map\u0003,{\"version\":3,\"file\":\"allOf.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../lib/vocabularies/applicator/allOf.ts\"],\"names\":[],\"mappings\":\";;AAEA,6CAAoD;AAEpD,MAAM,GAAG,GAA0B;IACjC,OAAO,EAAE,OAAO;IAChB,UAAU,EAAE,OAAO;IACnB,IAAI,CAAC,GAAe;QAClB,MAAM,EAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAC,GAAG,GAAG,CAAA;QAC7B,wBAAwB;QACxB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAA;QACvE,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAC/B,MAAM,CAAC,OAAO,CAAC,CAAC,GAAc,EAAE,CAAS,EAAE,EAAE;YAC3C,IAAI,IAAA,wBAAiB,EAAC,EAAE,EAAE,GAAG,CAAC;gBAAE,OAAM;YACtC,MAAM,MAAM,GAAG,GAAG,CAAC,SAAS,CAAC,EAAC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,EAAC,EAAE,KAAK,CAAC,CAAA;YACtE,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,CAAA;YACb,GAAG,CAAC,cAAc,CAAC,MAAM,CAAC,CAAA;QAC5B,CAAC,CAAC,CAAA;IACJ,CAAC;CACF,CAAA;AAED,kBAAe,GAAG,CAAA\"}/dist/types/jtd-schema.jss\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=jtd-schema.js.map+/dist/vocabularies/validation/limitItems.js\u0003T\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst error = {\n    message({ keyword, schemaCode }) {\n        const comp = keyword === \"maxItems\" ? \"more\" : \"fewer\";\n        return (0, codegen_1.str) `must NOT have ${comp} than ${schemaCode} items`;\n    },\n    params: ({ schemaCode }) => (0, codegen_1._) `{limit: ${schemaCode}}`,\n};\nconst def = {\n    keyword: [\"maxItems\", \"minItems\"],\n    type: \"array\",\n    schemaType: \"number\",\n    $data: true,\n    error,\n    code(cxt) {\n        const { keyword, data, schemaCode } = cxt;\n        const op = keyword === \"maxItems\" ? codegen_1.operators.GT : codegen_1.operators.LT;\n        cxt.fail$data((0, codegen_1._) `${data}.length ${op} ${schemaCode}`);\n    },\n};\nexports.default = def;\n//# sourceMappingURL=limitItems.js.map/lib/vocabularies/draft2020.ts\u0002import type {Vocabulary} from \"../types\"\nimport coreVocabulary from \"./core\"\nimport validationVocabulary from \"./validation\"\nimport getApplicatorVocabulary from \"./applicator\"\nimport dynamicVocabulary from \"./dynamic\"\nimport nextVocabulary from \"./next\"\nimport unevaluatedVocabulary from \"./unevaluated\"\nimport formatVocabulary from \"./format\"\nimport {metadataVocabulary, contentVocabulary} from \"./metadata\"\n\nconst draft2020Vocabularies: Vocabulary[] = [\n  dynamicVocabulary,\n  coreVocabulary,\n  validationVocabulary,\n  getApplicatorVocabulary(true),\n  formatVocabulary,\n  metadataVocabulary,\n  contentVocabulary,\n  nextVocabulary,\n  unevaluatedVocabulary,\n]\n\nexport default draft2020Vocabularies\n$/dist/vocabularies/jtd/elements.d.ts\u0001\u0000import type { CodeKeywordDefinition, SchemaObject } from \"../../types\";\nimport { _JTDTypeError } from \"./error\";\nexport type JTDElementsError = _JTDTypeError<\"elements\", \"array\", SchemaObject>;\ndeclare const def: CodeKeywordDefinition;\nexport default def;\n$/dist/vocabularies/core/index.js.map\u00012{\"version\":3,\"file\":\"index.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../lib/vocabularies/core/index.ts\"],\"names\":[],\"mappings\":\";;AACA,6BAA4B;AAC5B,+BAA8B;AAE9B,MAAM,IAAI,GAAe;IACvB,SAAS;IACT,KAAK;IACL,OAAO;IACP,aAAa;IACb,EAAC,OAAO,EAAE,UAAU,EAAC;IACrB,aAAa;IACb,YAAS;IACT,aAAU;CACX,CAAA;AAED,kBAAe,IAAI,CAAA\"}(/dist/vocabularies/jtd/properties.js.map\u0016y{\"version\":3,\"file\":\"properties.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../lib/vocabularies/jtd/properties.ts\"],\"names\":[],\"mappings\":\"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\"}/dist/core.d.ts _export { Format, FormatDefinition, AsyncFormatDefinition, KeywordDefinition, KeywordErrorDefinition, CodeKeywordDefinition, MacroKeywordDefinition, FuncKeywordDefinition, Vocabulary, Schema, SchemaObject, AnySchemaObject, AsyncSchema, AnySchema, ValidateFunction, AsyncValidateFunction, AnyValidateFunction, ErrorObject, ErrorNoParams, } from \"./types\";\nexport { SchemaCxt, SchemaObjCxt } from \"./compile\";\nexport interface Plugin<Opts> {\n    (ajv: Ajv, options?: Opts): Ajv;\n    [prop: string]: any;\n}\nexport { KeywordCxt } from \"./compile/validate\";\nexport { DefinedError } from \"./vocabularies/errors\";\nexport { JSONType } from \"./compile/rules\";\nexport { JSONSchemaType } from \"./types/json-schema\";\nexport { JTDSchemaType, SomeJTDSchemaType, JTDDataType } from \"./types/jtd-schema\";\nexport { _, str, stringify, nil, Name, Code, CodeGen, CodeGenOptions } from \"./compile/codegen\";\nimport type { Schema, AnySchema, AnySchemaObject, SchemaObject, AsyncSchema, Vocabulary, KeywordDefinition, AddedKeywordDefinition, AnyValidateFunction, ValidateFunction, AsyncValidateFunction, ErrorObject, Format, AddedFormat, RegExpEngine, UriResolver } from \"./types\";\nimport type { JSONSchemaType } from \"./types/json-schema\";\nimport type { JTDSchemaType, SomeJTDSchemaType, JTDDataType } from \"./types/jtd-schema\";\nimport ValidationError from \"./runtime/validation_error\";\nimport MissingRefError from \"./compile/ref_error\";\nimport { ValidationRules } from \"./compile/rules\";\nimport { SchemaEnv } from \"./compile\";\nimport { Code, ValueScope } from \"./compile/codegen\";\nexport type Options = CurrentOptions & DeprecatedOptions;\nexport interface CurrentOptions {\n    strict?: boolean | \"log\";\n    strictSchema?: boolean | \"log\";\n    strictNumbers?: boolean | \"log\";\n    strictTypes?: boolean | \"log\";\n    strictTuples?: boolean | \"log\";\n    strictRequired?: boolean | \"log\";\n    allowMatchingProperties?: boolean;\n    allowUnionTypes?: boolean;\n    validateFormats?: boolean;\n    $data?: boolean;\n    allErrors?: boolean;\n    verbose?: boolean;\n    discriminator?: boolean;\n    unicodeRegExp?: boolean;\n    timestamp?: \"string\" | \"date\";\n    parseDate?: boolean;\n    allowDate?: boolean;\n    $comment?: true | ((comment: string, schemaPath?: string, rootSchema?: AnySchemaObject) => unknown);\n    formats?: {\n        [Name in string]?: Format;\n    };\n    keywords?: Vocabulary;\n    schemas?: AnySchema[] | {\n        [Key in string]?: AnySchema;\n    };\n    logger?: Logger | false;\n    loadSchema?: (uri: string) => Promise<AnySchemaObject>;\n    removeAdditional?: boolean | \"all\" | \"failing\";\n    useDefaults?: boolean | \"empty\";\n    coerceTypes?: boolean | \"array\";\n    next?: boolean;\n    unevaluated?: boolean;\n    dynamicRef?: boolean;\n    schemaId?: \"id\" | \"$id\";\n    jtd?: boolean;\n    meta?: SchemaObject | boolean;\n    defaultMeta?: string | AnySchemaObject;\n    validateSchema?: boolean | \"log\";\n    addUsedSchema?: boolean;\n    inlineRefs?: boolean | number;\n    passContext?: boolean;\n    loopRequired?: number;\n    loopEnum?: number;\n    ownProperties?: boolean;\n    multipleOfPrecision?: number;\n    int32range?: boolean;\n    messages?: boolean;\n    code?: CodeOptions;\n    uriResolver?: UriResolver;\n}\nexport interface CodeOptions {\n    es5?: boolean;\n    esm?: boolean;\n    lines?: boolean;\n    optimize?: boolean | number;\n    formats?: Code;\n    source?: boolean;\n    process?: (code: string, schema?: SchemaEnv) => string;\n    regExp?: RegExpEngine;\n}\ninterface InstanceCodeOptions extends CodeOptions {\n    regExp: RegExpEngine;\n    optimize: number;\n}\ninterface DeprecatedOptions {\n    /** @deprecated */\n    ignoreKeywordsWithRef?: boolean;\n    /** @deprecated */\n    jsPropertySyntax?: boolean;\n    /** @deprecated */\n    unicode?: boolean;\n}\ntype RequiredInstanceOptions = {\n    [K in \"strictSchema\" | \"strictNumbers\" | \"strictTypes\" | \"strictTuples\" | \"strictRequired\" | \"inlineRefs\" | \"loopRequired\" | \"loopEnum\" | \"meta\" | \"messages\" | \"schemaId\" | \"addUsedSchema\" | \"validateSchema\" | \"validateFormats\" | \"int32range\" | \"unicodeRegExp\" | \"uriResolver\"]: NonNullable<Options[K]>;\n} & {\n    code: InstanceCodeOptions;\n};\nexport type InstanceOptions = Options & RequiredInstanceOptions;\nexport interface Logger {\n    log(...args: unknown[]): unknown;\n    warn(...args: unknown[]): unknown;\n    error(...args: unknown[]): unknown;\n}\nexport default class Ajv {\n    opts: InstanceOptions;\n    errors?: ErrorObject[] | null;\n    logger: Logger;\n    readonly scope: ValueScope;\n    readonly schemas: {\n        [Key in string]?: SchemaEnv;\n    };\n    readonly refs: {\n        [Ref in string]?: SchemaEnv | string;\n    };\n    readonly formats: {\n        [Name in string]?: AddedFormat;\n    };\n    readonly RULES: ValidationRules;\n    readonly _compilations: Set<SchemaEnv>;\n    private readonly _loading;\n    private readonly _cache;\n    private readonly _metaOpts;\n    static ValidationError: typeof ValidationError;\n    static MissingRefError: typeof MissingRefError;\n    constructor(opts?: Options);\n    _addVocabularies(): void;\n    _addDefaultMetaSchema(): void;\n    defaultMeta(): string | AnySchemaObject | undefined;\n    validate(schema: Schema | string, data: unknown): boolean;\n    validate(schemaKeyRef: AnySchema | string, data: unknown): boolean | Promise<unknown>;\n    validate<T>(schema: Schema | JSONSchemaType<T> | string, data: unknown): data is T;\n    validate<T>(schema: JTDSchemaType<T>, data: unknown): data is T;\n    validate<N extends never, T extends SomeJTDSchemaType>(schema: T, data: unknown): data is JTDDataType<T>;\n    validate<T>(schema: AsyncSchema, data: unknown | T): Promise<T>;\n    validate<T>(schemaKeyRef: AnySchema | string, data: unknown): data is T | Promise<T>;\n    compile<T = unknown>(schema: Schema | JSONSchemaType<T>, _meta?: boolean): ValidateFunction<T>;\n    compile<T = unknown>(schema: JTDSchemaType<T>, _meta?: boolean): ValidateFunction<T>;\n    compile<N extends never, T extends SomeJTDSchemaType>(schema: T, _meta?: boolean): ValidateFunction<JTDDataType<T>>;\n    compile<T = unknown>(schema: AsyncSchema, _meta?: boolean): AsyncValidateFunction<T>;\n    compile<T = unknown>(schema: AnySchema, _meta?: boolean): AnyValidateFunction<T>;\n    compileAsync<T = unknown>(schema: SchemaObject | JSONSchemaType<T>, _meta?: boolean): Promise<ValidateFunction<T>>;\n    compileAsync<T = unknown>(schema: JTDSchemaType<T>, _meta?: boolean): Promise<ValidateFunction<T>>;\n    compileAsync<T = unknown>(schema: AsyncSchema, meta?: boolean): Promise<AsyncValidateFunction<T>>;\n    compileAsync<T = unknown>(schema: AnySchemaObject, meta?: boolean): Promise<AnyValidateFunction<T>>;\n    addSchema(schema: AnySchema | AnySchema[], // If array is passed, `key` will be ignored\n    key?: string, // Optional schema key. Can be passed to `validate` method instead of schema object or id/ref. One schema per instance can have empty `id` and `key`.\n    _meta?: boolean, // true if schema is a meta-schema. Used internally, addMetaSchema should be used instead.\n    _validateSchema?: boolean | \"log\"): Ajv;\n    addMetaSchema(schema: AnySchemaObject, key?: string, // schema key\n    _validateSchema?: boolean | \"log\"): Ajv;\n    validateSchema(schema: AnySchema, throwOrLogError?: boolean): boolean | Promise<unknown>;\n    getSchema<T = unknown>(keyRef: string): AnyValidateFunction<T> | undefined;\n    removeSchema(schemaKeyRef?: AnySchema | string | RegExp): Ajv;\n    addVocabulary(definitions: Vocabulary): Ajv;\n    addKeyword(kwdOrDef: string | KeywordDefinition, def?: KeywordDefinition): Ajv;\n    getKeyword(keyword: string): AddedKeywordDefinition | boolean;\n    removeKeyword(keyword: string): Ajv;\n    addFormat(name: string, format: Format): Ajv;\n    errorsText(errors?: ErrorObject[] | null | undefined, // optional array of validation errors\n    { separator, dataVar }?: ErrorsTextOptions): string;\n    $dataMetaSchema(metaSchema: AnySchemaObject, keywordsJsonPointers: string[]): AnySchemaObject;\n    private _removeAllSchemas;\n    _addSchema(schema: AnySchema, meta?: boolean, baseId?: string, validateSchema?: boolean | \"log\", addSchema?: boolean): SchemaEnv;\n    private _checkUnique;\n    private _compileSchemaEnv;\n    private _compileMetaSchema;\n}\nexport interface ErrorsTextOptions {\n    separator?: string;\n    dataVar?: string;\n}\n\"/lib/vocabularies/applicator/if.ts\t[import type {\n  CodeKeywordDefinition,\n  ErrorObject,\n  KeywordErrorDefinition,\n  AnySchema,\n} from \"../../types\"\nimport type {SchemaObjCxt} from \"../../compile\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str, not, Name} from \"../../compile/codegen\"\nimport {alwaysValidSchema, checkStrictMode} from \"../../compile/util\"\n\nexport type IfKeywordError = ErrorObject<\"if\", {failingKeyword: string}, AnySchema>\n\nconst error: KeywordErrorDefinition = {\n  message: ({params}) => str`must match \"${params.ifClause}\" schema`,\n  params: ({params}) => _`{failingKeyword: ${params.ifClause}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"if\",\n  schemaType: [\"object\", \"boolean\"],\n  trackErrors: true,\n  error,\n  code(cxt: KeywordCxt) {\n    const {gen, parentSchema, it} = cxt\n    if (parentSchema.then === undefined && parentSchema.else === undefined) {\n      checkStrictMode(it, '\"if\" without \"then\" and \"else\" is ignored')\n    }\n    const hasThen = hasSchema(it, \"then\")\n    const hasElse = hasSchema(it, \"else\")\n    if (!hasThen && !hasElse) return\n\n    const valid = gen.let(\"valid\", true)\n    const schValid = gen.name(\"_valid\")\n    validateIf()\n    cxt.reset()\n\n    if (hasThen && hasElse) {\n      const ifClause = gen.let(\"ifClause\")\n      cxt.setParams({ifClause})\n      gen.if(schValid, validateClause(\"then\", ifClause), validateClause(\"else\", ifClause))\n    } else if (hasThen) {\n      gen.if(schValid, validateClause(\"then\"))\n    } else {\n      gen.if(not(schValid), validateClause(\"else\"))\n    }\n\n    cxt.pass(valid, () => cxt.error(true))\n\n    function validateIf(): void {\n      const schCxt = cxt.subschema(\n        {\n          keyword: \"if\",\n          compositeRule: true,\n          createErrors: false,\n          allErrors: false,\n        },\n        schValid\n      )\n      cxt.mergeEvaluated(schCxt)\n    }\n\n    function validateClause(keyword: string, ifClause?: Name): () => void {\n      return () => {\n        const schCxt = cxt.subschema({keyword}, schValid)\n        gen.assign(valid, schValid)\n        cxt.mergeValidEvaluated(schCxt, valid)\n        if (ifClause) gen.assign(ifClause, _`${keyword}`)\n        else cxt.setParams({ifClause: keyword})\n      }\n    }\n  },\n}\n\nfunction hasSchema(it: SchemaObjCxt, keyword: string): boolean {\n  const schema = it.schema[keyword]\n  return schema !== undefined && !alwaysValidSchema(it, schema)\n}\n\nexport default def\n/dist/standalone/instance.d.ts\u0002yimport Ajv, { AnySchema, AnyValidateFunction, ErrorObject } from \"../core\";\nexport default class AjvPack {\n    readonly ajv: Ajv;\n    errors?: ErrorObject[] | null;\n    constructor(ajv: Ajv);\n    validate(schemaKeyRef: AnySchema | string, data: unknown): boolean | Promise<unknown>;\n    compile<T = unknown>(schema: AnySchema, meta?: boolean): AnyValidateFunction<T>;\n    getSchema<T = unknown>(keyRef: string): AnyValidateFunction<T> | undefined;\n    private getStandalone;\n    addSchema(...args: Parameters<typeof Ajv.prototype.addSchema>): AjvPack;\n    addKeyword(...args: Parameters<typeof Ajv.prototype.addKeyword>): AjvPack;\n}\n!/lib/refs/json-schema-secure.json\t{\n  \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n  \"$id\": \"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/json-schema-secure.json#\",\n  \"title\": \"Meta-schema for the security assessment of JSON Schemas\",\n  \"description\": \"If a JSON AnySchema fails validation against this meta-schema, it may be unsafe to validate untrusted data\",\n  \"definitions\": {\n    \"schemaArray\": {\n      \"type\": \"array\",\n      \"minItems\": 1,\n      \"items\": {\"$ref\": \"#\"}\n    }\n  },\n  \"dependencies\": {\n    \"patternProperties\": {\n      \"description\": \"prevent slow validation of large property names\",\n      \"required\": [\"propertyNames\"],\n      \"properties\": {\n        \"propertyNames\": {\n          \"required\": [\"maxLength\"]\n        }\n      }\n    },\n    \"uniqueItems\": {\n      \"description\": \"prevent slow validation of large non-scalar arrays\",\n      \"if\": {\n        \"properties\": {\n          \"uniqueItems\": {\"const\": true},\n          \"items\": {\n            \"properties\": {\n              \"type\": {\n                \"anyOf\": [\n                  {\n                    \"enum\": [\"object\", \"array\"]\n                  },\n                  {\n                    \"type\": \"array\",\n                    \"contains\": {\"enum\": [\"object\", \"array\"]}\n                  }\n                ]\n              }\n            }\n          }\n        }\n      },\n      \"then\": {\n        \"required\": [\"maxItems\"]\n      }\n    },\n    \"pattern\": {\n      \"description\": \"prevent slow pattern matching of large strings\",\n      \"required\": [\"maxLength\"]\n    },\n    \"format\": {\n      \"description\": \"prevent slow format validation of large strings\",\n      \"required\": [\"maxLength\"]\n    }\n  },\n  \"properties\": {\n    \"additionalItems\": {\"$ref\": \"#\"},\n    \"additionalProperties\": {\"$ref\": \"#\"},\n    \"dependencies\": {\n      \"additionalProperties\": {\n        \"anyOf\": [{\"type\": \"array\"}, {\"$ref\": \"#\"}]\n      }\n    },\n    \"items\": {\n      \"anyOf\": [{\"$ref\": \"#\"}, {\"$ref\": \"#/definitions/schemaArray\"}]\n    },\n    \"definitions\": {\n      \"additionalProperties\": {\"$ref\": \"#\"}\n    },\n    \"patternProperties\": {\n      \"additionalProperties\": {\"$ref\": \"#\"}\n    },\n    \"properties\": {\n      \"additionalProperties\": {\"$ref\": \"#\"}\n    },\n    \"if\": {\"$ref\": \"#\"},\n    \"then\": {\"$ref\": \"#\"},\n    \"else\": {\"$ref\": \"#\"},\n    \"allOf\": {\"$ref\": \"#/definitions/schemaArray\"},\n    \"anyOf\": {\"$ref\": \"#/definitions/schemaArray\"},\n    \"oneOf\": {\"$ref\": \"#/definitions/schemaArray\"},\n    \"not\": {\"$ref\": \"#\"},\n    \"contains\": {\"$ref\": \"#\"},\n    \"propertyNames\": {\"$ref\": \"#\"}\n  }\n}\n(/lib/vocabularies/validation/required.ts\u000bimport type {CodeKeywordDefinition, ErrorObject, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {\n  checkReportMissingProp,\n  checkMissingProp,\n  reportMissingProp,\n  propertyInData,\n  noPropertyInData,\n} from \"../code\"\nimport {_, str, nil, not, Name, Code} from \"../../compile/codegen\"\nimport {checkStrictMode} from \"../../compile/util\"\n\nexport type RequiredError = ErrorObject<\n  \"required\",\n  {missingProperty: string},\n  string[] | {$data: string}\n>\n\nconst error: KeywordErrorDefinition = {\n  message: ({params: {missingProperty}}) => str`must have required property '${missingProperty}'`,\n  params: ({params: {missingProperty}}) => _`{missingProperty: ${missingProperty}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"required\",\n  type: \"object\",\n  schemaType: \"array\",\n  $data: true,\n  error,\n  code(cxt: KeywordCxt) {\n    const {gen, schema, schemaCode, data, $data, it} = cxt\n    const {opts} = it\n    if (!$data && schema.length === 0) return\n    const useLoop = schema.length >= opts.loopRequired\n    if (it.allErrors) allErrorsMode()\n    else exitOnErrorMode()\n\n    if (opts.strictRequired) {\n      const props = cxt.parentSchema.properties\n      const {definedProperties} = cxt.it\n      for (const requiredKey of schema) {\n        if (props?.[requiredKey] === undefined && !definedProperties.has(requiredKey)) {\n          const schemaPath = it.schemaEnv.baseId + it.errSchemaPath\n          const msg = `required property \"${requiredKey}\" is not defined at \"${schemaPath}\" (strictRequired)`\n          checkStrictMode(it, msg, it.opts.strictRequired)\n        }\n      }\n    }\n\n    function allErrorsMode(): void {\n      if (useLoop || $data) {\n        cxt.block$data(nil, loopAllRequired)\n      } else {\n        for (const prop of schema) {\n          checkReportMissingProp(cxt, prop)\n        }\n      }\n    }\n\n    function exitOnErrorMode(): void {\n      const missing = gen.let(\"missing\")\n      if (useLoop || $data) {\n        const valid = gen.let(\"valid\", true)\n        cxt.block$data(valid, () => loopUntilMissing(missing, valid))\n        cxt.ok(valid)\n      } else {\n        gen.if(checkMissingProp(cxt, schema, missing))\n        reportMissingProp(cxt, missing)\n        gen.else()\n      }\n    }\n\n    function loopAllRequired(): void {\n      gen.forOf(\"prop\", schemaCode as Code, (prop) => {\n        cxt.setParams({missingProperty: prop})\n        gen.if(noPropertyInData(gen, data, prop, opts.ownProperties), () => cxt.error())\n      })\n    }\n\n    function loopUntilMissing(missing: Name, valid: Name): void {\n      cxt.setParams({missingProperty: missing})\n      gen.forOf(\n        missing,\n        schemaCode as Code,\n        () => {\n          gen.assign(valid, propertyInData(gen, data, missing, opts.ownProperties))\n          gen.if(not(valid), () => {\n            cxt.error()\n            gen.break()\n          })\n        },\n        nil\n      )\n    }\n  },\n}\n\nexport default def\n./dist/vocabularies/applicator/propertyNames.js\u0004\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst error = {\n    message: \"property name must be valid\",\n    params: ({ params }) => (0, codegen_1._) `{propertyName: ${params.propertyName}}`,\n};\nconst def = {\n    keyword: \"propertyNames\",\n    type: \"object\",\n    schemaType: [\"object\", \"boolean\"],\n    error,\n    code(cxt) {\n        const { gen, schema, data, it } = cxt;\n        if ((0, util_1.alwaysValidSchema)(it, schema))\n            return;\n        const valid = gen.name(\"valid\");\n        gen.forIn(\"key\", data, (key) => {\n            cxt.setParams({ propertyName: key });\n            cxt.subschema({\n                keyword: \"propertyNames\",\n                data: key,\n                dataTypes: [\"string\"],\n                propertyName: key,\n                compositeRule: true,\n            }, valid);\n            gen.if((0, codegen_1.not)(valid), () => {\n                cxt.error(true);\n                if (!it.allErrors)\n                    gen.break();\n            });\n        });\n        cxt.ok(valid);\n    },\n};\nexports.default = def;\n//# sourceMappingURL=propertyNames.js.map$/dist/vocabularies/jtd/properties.js\u0018\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.validateProperties = exports.error = void 0;\nconst code_1 = require(\"../code\");\nconst util_1 = require(\"../../compile/util\");\nconst codegen_1 = require(\"../../compile/codegen\");\nconst metadata_1 = require(\"./metadata\");\nconst nullable_1 = require(\"./nullable\");\nconst error_1 = require(\"./error\");\nvar PropError;\n(function (PropError) {\n    PropError[\"Additional\"] = \"additional\";\n    PropError[\"Missing\"] = \"missing\";\n})(PropError || (PropError = {}));\nexports.error = {\n    message: (cxt) => {\n        const { params } = cxt;\n        return params.propError\n            ? params.propError === PropError.Additional\n                ? \"must NOT have additional properties\"\n                : `must have property '${params.missingProperty}'`\n            : (0, error_1.typeErrorMessage)(cxt, \"object\");\n    },\n    params: (cxt) => {\n        const { params } = cxt;\n        return params.propError\n            ? params.propError === PropError.Additional\n                ? (0, codegen_1._) `{error: ${params.propError}, additionalProperty: ${params.additionalProperty}}`\n                : (0, codegen_1._) `{error: ${params.propError}, missingProperty: ${params.missingProperty}}`\n            : (0, error_1.typeErrorParams)(cxt, \"object\");\n    },\n};\nconst def = {\n    keyword: \"properties\",\n    schemaType: \"object\",\n    error: exports.error,\n    code: validateProperties,\n};\n// const error: KeywordErrorDefinition = {\n//   message: \"should NOT have additional properties\",\n//   params: ({params}) => _`{additionalProperty: ${params.additionalProperty}}`,\n// }\nfunction validateProperties(cxt) {\n    (0, metadata_1.checkMetadata)(cxt);\n    const { gen, data, parentSchema, it } = cxt;\n    const { additionalProperties, nullable } = parentSchema;\n    if (it.jtdDiscriminator && nullable)\n        throw new Error(\"JTD: nullable inside discriminator mapping\");\n    if (commonProperties()) {\n        throw new Error(\"JTD: properties and optionalProperties have common members\");\n    }\n    const [allProps, properties] = schemaProperties(\"properties\");\n    const [allOptProps, optProperties] = schemaProperties(\"optionalProperties\");\n    if (properties.length === 0 && optProperties.length === 0 && additionalProperties) {\n        return;\n    }\n    const [valid, cond] = it.jtdDiscriminator === undefined\n        ? (0, nullable_1.checkNullableObject)(cxt, data)\n        : [gen.let(\"valid\", false), true];\n    gen.if(cond, () => gen.assign(valid, true).block(() => {\n        validateProps(properties, \"properties\", true);\n        validateProps(optProperties, \"optionalProperties\");\n        if (!additionalProperties)\n            validateAdditional();\n    }));\n    cxt.pass(valid);\n    function commonProperties() {\n        const props = parentSchema.properties;\n        const optProps = parentSchema.optionalProperties;\n        if (!(props && optProps))\n            return false;\n        for (const p in props) {\n            if (Object.prototype.hasOwnProperty.call(optProps, p))\n                return true;\n        }\n        return false;\n    }\n    function schemaProperties(keyword) {\n        const schema = parentSchema[keyword];\n        const allPs = schema ? (0, code_1.allSchemaProperties)(schema) : [];\n        if (it.jtdDiscriminator && allPs.some((p) => p === it.jtdDiscriminator)) {\n            throw new Error(`JTD: discriminator tag used in ${keyword}`);\n        }\n        const ps = allPs.filter((p) => !(0, util_1.alwaysValidSchema)(it, schema[p]));\n        return [allPs, ps];\n    }\n    function validateProps(props, keyword, required) {\n        const _valid = gen.var(\"valid\");\n        for (const prop of props) {\n            gen.if((0, code_1.propertyInData)(gen, data, prop, it.opts.ownProperties), () => applyPropertySchema(prop, keyword, _valid), () => missingProperty(prop));\n            cxt.ok(_valid);\n        }\n        function missingProperty(prop) {\n            if (required) {\n                gen.assign(_valid, false);\n                cxt.error(false, { propError: PropError.Missing, missingProperty: prop }, { schemaPath: prop });\n            }\n            else {\n                gen.assign(_valid, true);\n            }\n        }\n    }\n    function applyPropertySchema(prop, keyword, _valid) {\n        cxt.subschema({\n            keyword,\n            schemaProp: prop,\n            dataProp: prop,\n        }, _valid);\n    }\n    function validateAdditional() {\n        gen.forIn(\"key\", data, (key) => {\n            const addProp = isAdditional(key, allProps, \"properties\", it.jtdDiscriminator);\n            const addOptProp = isAdditional(key, allOptProps, \"optionalProperties\");\n            const extra = addProp === true ? addOptProp : addOptProp === true ? addProp : (0, codegen_1.and)(addProp, addOptProp);\n            gen.if(extra, () => {\n                if (it.opts.removeAdditional) {\n                    gen.code((0, codegen_1._) `delete ${data}[${key}]`);\n                }\n                else {\n                    cxt.error(false, { propError: PropError.Additional, additionalProperty: key }, { instancePath: key, parentSchema: true });\n                    if (!it.opts.allErrors)\n                        gen.break();\n                }\n            });\n        });\n    }\n    function isAdditional(key, props, keyword, jtdDiscriminator) {\n        let additional;\n        if (props.length > 8) {\n            // TODO maybe an option instead of hard-coded 8?\n            const propsSchema = (0, util_1.schemaRefOrVal)(it, parentSchema[keyword], keyword);\n            additional = (0, codegen_1.not)((0, code_1.isOwnProperty)(gen, propsSchema, key));\n            if (jtdDiscriminator !== undefined) {\n                additional = (0, codegen_1.and)(additional, (0, codegen_1._) `${key} !== ${jtdDiscriminator}`);\n            }\n        }\n        else if (props.length || jtdDiscriminator !== undefined) {\n            const ps = jtdDiscriminator === undefined ? props : [jtdDiscriminator].concat(props);\n            additional = (0, codegen_1.and)(...ps.map((p) => (0, codegen_1._) `${key} !== ${p}`));\n        }\n        else {\n            additional = true;\n        }\n        return additional;\n    }\n}\nexports.validateProperties = validateProperties;\nexports.default = def;\n//# sourceMappingURL=properties.js.map/dist/runtime/quote.d.tssdeclare function quote(s: string): string;\ndeclare namespace quote {\n    var code: string;\n}\nexport default quote;\n&/dist/compile/validate/boolSchema.d.tsimport type { SchemaCxt } from \"..\";\nimport { Name } from \"../codegen\";\nexport declare function topBoolOrEmptySchema(it: SchemaCxt): void;\nexport declare function boolOrEmptySchema(it: SchemaCxt, valid: Name): void;\n/dist/vocabularies/code.js.map\u0017{\"version\":3,\"file\":\"code.js\",\"sourceRoot\":\"\",\"sources\":[\"../../lib/vocabularies/code.ts\"],\"names\":[],\"mappings\":\"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\"}2/dist/vocabularies/unevaluated/unevaluatedItems.js\u00064\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst error = {\n    message: ({ params: { len } }) => (0, codegen_1.str) `must NOT have more than ${len} items`,\n    params: ({ params: { len } }) => (0, codegen_1._) `{limit: ${len}}`,\n};\nconst def = {\n    keyword: \"unevaluatedItems\",\n    type: \"array\",\n    schemaType: [\"boolean\", \"object\"],\n    error,\n    code(cxt) {\n        const { gen, schema, data, it } = cxt;\n        const items = it.items || 0;\n        if (items === true)\n            return;\n        const len = gen.const(\"len\", (0, codegen_1._) `${data}.length`);\n        if (schema === false) {\n            cxt.setParams({ len: items });\n            cxt.fail((0, codegen_1._) `${len} > ${items}`);\n        }\n        else if (typeof schema == \"object\" && !(0, util_1.alwaysValidSchema)(it, schema)) {\n            const valid = gen.var(\"valid\", (0, codegen_1._) `${len} <= ${items}`);\n            gen.if((0, codegen_1.not)(valid), () => validateItems(valid, items));\n            cxt.ok(valid);\n        }\n        it.items = true;\n        function validateItems(valid, from) {\n            gen.forRange(\"i\", from, len, (i) => {\n                cxt.subschema({ keyword: \"unevaluatedItems\", dataProp: i, dataPropType: util_1.Type.Num }, valid);\n                if (!it.allErrors)\n                    gen.if((0, codegen_1.not)(valid), () => gen.break());\n            });\n        }\n    },\n};\nexports.default = def;\n//# sourceMappingURL=unevaluatedItems.js.map%/lib/vocabularies/applicator/oneOf.ts\bimport type {\n  CodeKeywordDefinition,\n  ErrorObject,\n  KeywordErrorDefinition,\n  AnySchema,\n} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, Name} from \"../../compile/codegen\"\nimport {alwaysValidSchema} from \"../../compile/util\"\nimport {SchemaCxt} from \"../../compile\"\n\nexport type OneOfError = ErrorObject<\n  \"oneOf\",\n  {passingSchemas: [number, number] | null},\n  AnySchema[]\n>\n\nconst error: KeywordErrorDefinition = {\n  message: \"must match exactly one schema in oneOf\",\n  params: ({params}) => _`{passingSchemas: ${params.passing}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"oneOf\",\n  schemaType: \"array\",\n  trackErrors: true,\n  error,\n  code(cxt: KeywordCxt) {\n    const {gen, schema, parentSchema, it} = cxt\n    /* istanbul ignore if */\n    if (!Array.isArray(schema)) throw new Error(\"ajv implementation error\")\n    if (it.opts.discriminator && parentSchema.discriminator) return\n    const schArr: AnySchema[] = schema\n    const valid = gen.let(\"valid\", false)\n    const passing = gen.let(\"passing\", null)\n    const schValid = gen.name(\"_valid\")\n    cxt.setParams({passing})\n    // TODO possibly fail straight away (with warning or exception) if there are two empty always valid schemas\n\n    gen.block(validateOneOf)\n\n    cxt.result(\n      valid,\n      () => cxt.reset(),\n      () => cxt.error(true)\n    )\n\n    function validateOneOf(): void {\n      schArr.forEach((sch: AnySchema, i: number) => {\n        let schCxt: SchemaCxt | undefined\n        if (alwaysValidSchema(it, sch)) {\n          gen.var(schValid, true)\n        } else {\n          schCxt = cxt.subschema(\n            {\n              keyword: \"oneOf\",\n              schemaProp: i,\n              compositeRule: true,\n            },\n            schValid\n          )\n        }\n\n        if (i > 0) {\n          gen\n            .if(_`${schValid} && ${valid}`)\n            .assign(valid, false)\n            .assign(passing, _`[${passing}, ${i}]`)\n            .else()\n        }\n\n        gen.if(schValid, () => {\n          gen.assign(valid, true)\n          gen.assign(passing, i)\n          if (schCxt) cxt.mergeEvaluated(schCxt, Name)\n        })\n      })\n    }\n  },\n}\n\nexport default def\n&/dist/vocabularies/applicator/not.d.tsimport type { CodeKeywordDefinition, ErrorNoParams, AnySchema } from \"../../types\";\nexport type NotKeywordError = ErrorNoParams<\"not\", AnySchema>;\ndeclare const def: CodeKeywordDefinition;\nexport default def;\n#/lib/compile/validate/boolSchema.ts\u0005\u0012import type {KeywordErrorDefinition, KeywordErrorCxt} from \"../../types\"\nimport type {SchemaCxt} from \"..\"\nimport {reportError} from \"../errors\"\nimport {_, Name} from \"../codegen\"\nimport N from \"../names\"\n\nconst boolError: KeywordErrorDefinition = {\n  message: \"boolean schema is false\",\n}\n\nexport function topBoolOrEmptySchema(it: SchemaCxt): void {\n  const {gen, schema, validateName} = it\n  if (schema === false) {\n    falseSchemaError(it, false)\n  } else if (typeof schema == \"object\" && schema.$async === true) {\n    gen.return(N.data)\n  } else {\n    gen.assign(_`${validateName}.errors`, null)\n    gen.return(true)\n  }\n}\n\nexport function boolOrEmptySchema(it: SchemaCxt, valid: Name): void {\n  const {gen, schema} = it\n  if (schema === false) {\n    gen.var(valid, false) // TODO var\n    falseSchemaError(it)\n  } else {\n    gen.var(valid, true) // TODO var\n  }\n}\n\nfunction falseSchemaError(it: SchemaCxt, overrideAllErrors?: boolean): void {\n  const {gen, data} = it\n  // TODO maybe some other interface should be used for non-keyword validation errors...\n  const cxt: KeywordErrorCxt = {\n    gen,\n    keyword: \"false schema\",\n    data,\n    schema: false,\n    schemaCode: false,\n    schemaValue: false,\n    params: {},\n    it,\n  }\n  reportError(cxt, boolError, undefined, overrideAllErrors)\n}\n*/lib/vocabularies/applicator/properties.ts\u00075import type {CodeKeywordDefinition} from \"../../types\"\nimport {KeywordCxt} from \"../../compile/validate\"\nimport {propertyInData, allSchemaProperties} from \"../code\"\nimport {alwaysValidSchema, toHash, mergeEvaluated} from \"../../compile/util\"\nimport apDef from \"./additionalProperties\"\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"properties\",\n  type: \"object\",\n  schemaType: \"object\",\n  code(cxt: KeywordCxt) {\n    const {gen, schema, parentSchema, data, it} = cxt\n    if (it.opts.removeAdditional === \"all\" && parentSchema.additionalProperties === undefined) {\n      apDef.code(new KeywordCxt(it, apDef, \"additionalProperties\"))\n    }\n    const allProps = allSchemaProperties(schema)\n    for (const prop of allProps) {\n      it.definedProperties.add(prop)\n    }\n    if (it.opts.unevaluated && allProps.length && it.props !== true) {\n      it.props = mergeEvaluated.props(gen, toHash(allProps), it.props)\n    }\n    const properties = allProps.filter((p) => !alwaysValidSchema(it, schema[p]))\n    if (properties.length === 0) return\n    const valid = gen.name(\"valid\")\n\n    for (const prop of properties) {\n      if (hasDefault(prop)) {\n        applyPropertySchema(prop)\n      } else {\n        gen.if(propertyInData(gen, data, prop, it.opts.ownProperties))\n        applyPropertySchema(prop)\n        if (!it.allErrors) gen.else().var(valid, true)\n        gen.endIf()\n      }\n      cxt.it.definedProperties.add(prop)\n      cxt.ok(valid)\n    }\n\n    function hasDefault(prop: string): boolean | undefined {\n      return it.opts.useDefaults && !it.compositeRule && schema[prop].default !== undefined\n    }\n\n    function applyPropertySchema(prop: string): void {\n      cxt.subschema(\n        {\n          keyword: \"properties\",\n          schemaProp: prop,\n          dataProp: prop,\n        },\n        valid\n      )\n    }\n  },\n}\n\nexport default def\n/lib/runtime/equal.ts// https://github.com/ajv-validator/ajv/issues/889\nimport * as equal from \"fast-deep-equal\"\n\ntype Equal = typeof equal & {code: string}\n;(equal as Equal).code = 'require(\"ajv/dist/runtime/equal\").default'\n\nexport default equal as Equal\n#/dist/vocabularies/jtd/union.js.map\u0001@{\"version\":3,\"file\":\"union.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../lib/vocabularies/jtd/union.ts\"],\"names\":[],\"mappings\":\";;AACA,kCAAqC;AAErC,MAAM,GAAG,GAA0B;IACjC,OAAO,EAAE,OAAO;IAChB,UAAU,EAAE,OAAO;IACnB,WAAW,EAAE,IAAI;IACjB,IAAI,EAAE,oBAAa;IACnB,KAAK,EAAE,EAAC,OAAO,EAAE,8BAA8B,EAAC;CACjD,CAAA;AAED,kBAAe,GAAG,CAAA\"}/lib/2020.ts\bimport type {AnySchemaObject} from \"./types\"\nimport AjvCore, {Options} from \"./core\"\n\nimport draft2020Vocabularies from \"./vocabularies/draft2020\"\nimport discriminator from \"./vocabularies/discriminator\"\nimport addMetaSchema2020 from \"./refs/json-schema-2020-12\"\n\nconst META_SCHEMA_ID = \"https://json-schema.org/draft/2020-12/schema\"\n\nclass Ajv2020 extends AjvCore {\n  constructor(opts: Options = {}) {\n    super({\n      ...opts,\n      dynamicRef: true,\n      next: true,\n      unevaluated: true,\n    })\n  }\n\n  _addVocabularies(): void {\n    super._addVocabularies()\n    draft2020Vocabularies.forEach((v) => this.addVocabulary(v))\n    if (this.opts.discriminator) this.addKeyword(discriminator)\n  }\n\n  _addDefaultMetaSchema(): void {\n    super._addDefaultMetaSchema()\n    const {$data, meta} = this.opts\n    if (!meta) return\n    addMetaSchema2020.call(this, $data)\n    this.refs[\"http://json-schema.org/schema\"] = META_SCHEMA_ID\n  }\n\n  defaultMeta(): string | AnySchemaObject | undefined {\n    return (this.opts.defaultMeta =\n      super.defaultMeta() || (this.getSchema(META_SCHEMA_ID) ? META_SCHEMA_ID : undefined))\n  }\n}\n\nmodule.exports = exports = Ajv2020\nObject.defineProperty(exports, \"__esModule\", {value: true})\n\nexport default Ajv2020\n\nexport {\n  Format,\n  FormatDefinition,\n  AsyncFormatDefinition,\n  KeywordDefinition,\n  KeywordErrorDefinition,\n  CodeKeywordDefinition,\n  MacroKeywordDefinition,\n  FuncKeywordDefinition,\n  Vocabulary,\n  Schema,\n  SchemaObject,\n  AnySchemaObject,\n  AsyncSchema,\n  AnySchema,\n  ValidateFunction,\n  AsyncValidateFunction,\n  ErrorObject,\n  ErrorNoParams,\n} from \"./types\"\n\nexport {Plugin, Options, CodeOptions, InstanceOptions, Logger, ErrorsTextOptions} from \"./core\"\nexport {SchemaCxt, SchemaObjCxt} from \"./compile\"\nexport {KeywordCxt} from \"./compile/validate\"\nexport {DefinedError} from \"./vocabularies/errors\"\nexport {JSONType} from \"./compile/rules\"\nexport {JSONSchemaType} from \"./types/json-schema\"\nexport {_, str, stringify, nil, Name, Code, CodeGen, CodeGenOptions} from \"./compile/codegen\"\nexport {default as ValidationError} from \"./runtime/validation_error\"\nexport {default as MissingRefError} from \"./compile/ref_error\"\n!/lib/vocabularies/jtd/metadata.ts\u0002import {KeywordCxt} from \"../../ajv\"\nimport type {CodeKeywordDefinition} from \"../../types\"\nimport {alwaysValidSchema} from \"../../compile/util\"\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"metadata\",\n  schemaType: \"object\",\n  code(cxt: KeywordCxt) {\n    checkMetadata(cxt)\n    const {gen, schema, it} = cxt\n    if (alwaysValidSchema(it, schema)) return\n    const valid = gen.name(\"valid\")\n    cxt.subschema({keyword: \"metadata\", jtdMetadata: true}, valid)\n    cxt.ok(valid)\n  },\n}\n\nexport function checkMetadata({it, keyword}: KeywordCxt, metadata?: boolean): void {\n  if (it.jtdMetadata !== metadata) {\n    throw new Error(`JTD: \"${keyword}\" cannot be used in this schema location`)\n  }\n}\n\nexport default def\n%/lib/vocabularies/validation/const.ts\u0003_import type {CodeKeywordDefinition, ErrorObject, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_} from \"../../compile/codegen\"\nimport {useFunc} from \"../../compile/util\"\nimport equal from \"../../runtime/equal\"\n\nexport type ConstError = ErrorObject<\"const\", {allowedValue: any}>\n\nconst error: KeywordErrorDefinition = {\n  message: \"must be equal to constant\",\n  params: ({schemaCode}) => _`{allowedValue: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"const\",\n  $data: true,\n  error,\n  code(cxt: KeywordCxt) {\n    const {gen, data, $data, schemaCode, schema} = cxt\n    if ($data || (schema && typeof schema == \"object\")) {\n      cxt.fail$data(_`!${useFunc(gen, equal)}(${data}, ${schemaCode})`)\n    } else {\n      cxt.fail(_`${schema} !== ${data}`)\n    }\n  },\n}\n\nexport default def\n&/dist/vocabularies/jtd/nullable.js.map\u0003!{\"version\":3,\"file\":\"nullable.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../lib/vocabularies/jtd/nullable.ts\"],\"names\":[],\"mappings\":\";;;AACA,mDAA6D;AAE7D,SAAgB,aAAa,CAC3B,EAAC,GAAG,EAAE,IAAI,EAAE,YAAY,EAAa,EACrC,OAAa,aAAG;IAEhB,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAC/B,IAAI,YAAY,CAAC,QAAQ,EAAE;QACzB,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,IAAA,WAAC,EAAA,GAAG,IAAI,WAAW,CAAC,CAAA;QACnC,IAAI,GAAG,IAAA,aAAG,EAAC,KAAK,CAAC,CAAA;KAClB;SAAM;QACL,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;KACtB;IACD,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;AACtB,CAAC;AAZD,sCAYC;AAED,SAAgB,mBAAmB,CAAC,GAAe,EAAE,IAAU;IAC7D,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;IAC/C,OAAO,CAAC,KAAK,EAAE,IAAA,WAAC,EAAA,GAAG,KAAK,cAAc,GAAG,CAAC,IAAI,kCAAkC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAA;AAC9F,CAAC;AAHD,kDAGC\"}(/dist/vocabularies/validation/const.d.tsimport type { CodeKeywordDefinition, ErrorObject } from \"../../types\";\nexport type ConstError = ErrorObject<\"const\", {\n    allowedValue: any;\n}>;\ndeclare const def: CodeKeywordDefinition;\nexport default def;\n/dist/compile/util.d.ts\bimport type { AnySchema, EvaluatedProperties, EvaluatedItems } from \"../types\";\nimport type { SchemaCxt, SchemaObjCxt } from \".\";\nimport { Code, Name, CodeGen } from \"./codegen\";\nimport type { Rule, ValidationRules } from \"./rules\";\nexport declare function toHash<T extends string = string>(arr: T[]): {\n    [K in T]?: true;\n};\nexport declare function alwaysValidSchema(it: SchemaCxt, schema: AnySchema): boolean | void;\nexport declare function checkUnknownRules(it: SchemaCxt, schema?: AnySchema): void;\nexport declare function schemaHasRules(schema: AnySchema, rules: {\n    [Key in string]?: boolean | Rule;\n}): boolean;\nexport declare function schemaHasRulesButRef(schema: AnySchema, RULES: ValidationRules): boolean;\nexport declare function schemaRefOrVal({ topSchemaRef, schemaPath }: SchemaObjCxt, schema: unknown, keyword: string, $data?: string | false): Code | number | boolean;\nexport declare function unescapeFragment(str: string): string;\nexport declare function escapeFragment(str: string | number): string;\nexport declare function escapeJsonPointer(str: string | number): string;\nexport declare function unescapeJsonPointer(str: string): string;\nexport declare function eachItem<T>(xs: T | T[], f: (x: T) => void): void;\ntype SomeEvaluated = EvaluatedProperties | EvaluatedItems;\ntype MergeEvaluatedFunc<T extends SomeEvaluated> = (gen: CodeGen, from: Name | T, to: Name | Exclude<T, true> | undefined, toName?: typeof Name) => Name | T;\ninterface MergeEvaluated {\n    props: MergeEvaluatedFunc<EvaluatedProperties>;\n    items: MergeEvaluatedFunc<EvaluatedItems>;\n}\nexport declare const mergeEvaluated: MergeEvaluated;\nexport declare function evaluatedPropsToName(gen: CodeGen, ps?: EvaluatedProperties): Name;\nexport declare function setEvaluated(gen: CodeGen, props: Name, ps: {\n    [K in string]?: true;\n}): void;\nexport declare function useFunc(gen: CodeGen, f: {\n    code: string;\n}): Name;\nexport declare enum Type {\n    Num = 0,\n    Str = 1\n}\nexport declare function getErrorPath(dataProp: Name | string | number, dataPropType?: Type, jsPropertySyntax?: boolean): Code | string;\nexport declare function checkStrictMode(it: SchemaCxt, msg: string, mode?: boolean | \"log\"): void;\nexport {};\n/dist/2019.js\f%\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MissingRefError = exports.ValidationError = exports.CodeGen = exports.Name = exports.nil = exports.stringify = exports.str = exports._ = exports.KeywordCxt = void 0;\nconst core_1 = require(\"./core\");\nconst draft7_1 = require(\"./vocabularies/draft7\");\nconst dynamic_1 = require(\"./vocabularies/dynamic\");\nconst next_1 = require(\"./vocabularies/next\");\nconst unevaluated_1 = require(\"./vocabularies/unevaluated\");\nconst discriminator_1 = require(\"./vocabularies/discriminator\");\nconst json_schema_2019_09_1 = require(\"./refs/json-schema-2019-09\");\nconst META_SCHEMA_ID = \"https://json-schema.org/draft/2019-09/schema\";\nclass Ajv2019 extends core_1.default {\n    constructor(opts = {}) {\n        super({\n            ...opts,\n            dynamicRef: true,\n            next: true,\n            unevaluated: true,\n        });\n    }\n    _addVocabularies() {\n        super._addVocabularies();\n        this.addVocabulary(dynamic_1.default);\n        draft7_1.default.forEach((v) => this.addVocabulary(v));\n        this.addVocabulary(next_1.default);\n        this.addVocabulary(unevaluated_1.default);\n        if (this.opts.discriminator)\n            this.addKeyword(discriminator_1.default);\n    }\n    _addDefaultMetaSchema() {\n        super._addDefaultMetaSchema();\n        const { $data, meta } = this.opts;\n        if (!meta)\n            return;\n        json_schema_2019_09_1.default.call(this, $data);\n        this.refs[\"http://json-schema.org/schema\"] = META_SCHEMA_ID;\n    }\n    defaultMeta() {\n        return (this.opts.defaultMeta =\n            super.defaultMeta() || (this.getSchema(META_SCHEMA_ID) ? META_SCHEMA_ID : undefined));\n    }\n}\nmodule.exports = exports = Ajv2019;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = Ajv2019;\nvar validate_1 = require(\"./compile/validate\");\nObject.defineProperty(exports, \"KeywordCxt\", { enumerable: true, get: function () { return validate_1.KeywordCxt; } });\nvar codegen_1 = require(\"./compile/codegen\");\nObject.defineProperty(exports, \"_\", { enumerable: true, get: function () { return codegen_1._; } });\nObject.defineProperty(exports, \"str\", { enumerable: true, get: function () { return codegen_1.str; } });\nObject.defineProperty(exports, \"stringify\", { enumerable: true, get: function () { return codegen_1.stringify; } });\nObject.defineProperty(exports, \"nil\", { enumerable: true, get: function () { return codegen_1.nil; } });\nObject.defineProperty(exports, \"Name\", { enumerable: true, get: function () { return codegen_1.Name; } });\nObject.defineProperty(exports, \"CodeGen\", { enumerable: true, get: function () { return codegen_1.CodeGen; } });\nvar validation_error_1 = require(\"./runtime/validation_error\");\nObject.defineProperty(exports, \"ValidationError\", { enumerable: true, get: function () { return validation_error_1.default; } });\nvar ref_error_1 = require(\"./compile/ref_error\");\nObject.defineProperty(exports, \"MissingRefError\", { enumerable: true, get: function () { return ref_error_1.default; } });\n//# sourceMappingURL=2019.js.map/lib/compile/resolve.ts\u0012)import type {AnySchema, AnySchemaObject, UriResolver} from \"../types\"\nimport type Ajv from \"../ajv\"\nimport type {URIComponents} from \"uri-js\"\nimport {eachItem} from \"./util\"\nimport * as equal from \"fast-deep-equal\"\nimport * as traverse from \"json-schema-traverse\"\n\n// the hash of local references inside the schema (created by getSchemaRefs), used for inline resolution\nexport type LocalRefs = {[Ref in string]?: AnySchemaObject}\n\n// TODO refactor to use keyword definitions\nconst SIMPLE_INLINED = new Set([\n  \"type\",\n  \"format\",\n  \"pattern\",\n  \"maxLength\",\n  \"minLength\",\n  \"maxProperties\",\n  \"minProperties\",\n  \"maxItems\",\n  \"minItems\",\n  \"maximum\",\n  \"minimum\",\n  \"uniqueItems\",\n  \"multipleOf\",\n  \"required\",\n  \"enum\",\n  \"const\",\n])\n\nexport function inlineRef(schema: AnySchema, limit: boolean | number = true): boolean {\n  if (typeof schema == \"boolean\") return true\n  if (limit === true) return !hasRef(schema)\n  if (!limit) return false\n  return countKeys(schema) <= limit\n}\n\nconst REF_KEYWORDS = new Set([\n  \"$ref\",\n  \"$recursiveRef\",\n  \"$recursiveAnchor\",\n  \"$dynamicRef\",\n  \"$dynamicAnchor\",\n])\n\nfunction hasRef(schema: AnySchemaObject): boolean {\n  for (const key in schema) {\n    if (REF_KEYWORDS.has(key)) return true\n    const sch = schema[key]\n    if (Array.isArray(sch) && sch.some(hasRef)) return true\n    if (typeof sch == \"object\" && hasRef(sch)) return true\n  }\n  return false\n}\n\nfunction countKeys(schema: AnySchemaObject): number {\n  let count = 0\n  for (const key in schema) {\n    if (key === \"$ref\") return Infinity\n    count++\n    if (SIMPLE_INLINED.has(key)) continue\n    if (typeof schema[key] == \"object\") {\n      eachItem(schema[key], (sch) => (count += countKeys(sch)))\n    }\n    if (count === Infinity) return Infinity\n  }\n  return count\n}\n\nexport function getFullPath(resolver: UriResolver, id = \"\", normalize?: boolean): string {\n  if (normalize !== false) id = normalizeId(id)\n  const p = resolver.parse(id)\n  return _getFullPath(resolver, p)\n}\n\nexport function _getFullPath(resolver: UriResolver, p: URIComponents): string {\n  const serialized = resolver.serialize(p)\n  return serialized.split(\"#\")[0] + \"#\"\n}\n\nconst TRAILING_SLASH_HASH = /#\\/?$/\nexport function normalizeId(id: string | undefined): string {\n  return id ? id.replace(TRAILING_SLASH_HASH, \"\") : \"\"\n}\n\nexport function resolveUrl(resolver: UriResolver, baseId: string, id: string): string {\n  id = normalizeId(id)\n  return resolver.resolve(baseId, id)\n}\n\nconst ANCHOR = /^[a-z_][-a-z0-9._]*$/i\n\nexport function getSchemaRefs(this: Ajv, schema: AnySchema, baseId: string): LocalRefs {\n  if (typeof schema == \"boolean\") return {}\n  const {schemaId, uriResolver} = this.opts\n  const schId = normalizeId(schema[schemaId] || baseId)\n  const baseIds: {[JsonPtr in string]?: string} = {\"\": schId}\n  const pathPrefix = getFullPath(uriResolver, schId, false)\n  const localRefs: LocalRefs = {}\n  const schemaRefs: Set<string> = new Set()\n\n  traverse(schema, {allKeys: true}, (sch, jsonPtr, _, parentJsonPtr) => {\n    if (parentJsonPtr === undefined) return\n    const fullPath = pathPrefix + jsonPtr\n    let baseId = baseIds[parentJsonPtr]\n    if (typeof sch[schemaId] == \"string\") baseId = addRef.call(this, sch[schemaId])\n    addAnchor.call(this, sch.$anchor)\n    addAnchor.call(this, sch.$dynamicAnchor)\n    baseIds[jsonPtr] = baseId\n\n    function addRef(this: Ajv, ref: string): string {\n      // eslint-disable-next-line @typescript-eslint/unbound-method\n      const _resolve = this.opts.uriResolver.resolve\n      ref = normalizeId(baseId ? _resolve(baseId, ref) : ref)\n      if (schemaRefs.has(ref)) throw ambiguos(ref)\n      schemaRefs.add(ref)\n      let schOrRef = this.refs[ref]\n      if (typeof schOrRef == \"string\") schOrRef = this.refs[schOrRef]\n      if (typeof schOrRef == \"object\") {\n        checkAmbiguosRef(sch, schOrRef.schema, ref)\n      } else if (ref !== normalizeId(fullPath)) {\n        if (ref[0] === \"#\") {\n          checkAmbiguosRef(sch, localRefs[ref], ref)\n          localRefs[ref] = sch\n        } else {\n          this.refs[ref] = fullPath\n        }\n      }\n      return ref\n    }\n\n    function addAnchor(this: Ajv, anchor: unknown): void {\n      if (typeof anchor == \"string\") {\n        if (!ANCHOR.test(anchor)) throw new Error(`invalid anchor \"${anchor}\"`)\n        addRef.call(this, `#${anchor}`)\n      }\n    }\n  })\n\n  return localRefs\n\n  function checkAmbiguosRef(sch1: AnySchema, sch2: AnySchema | undefined, ref: string): void {\n    if (sch2 !== undefined && !equal(sch1, sch2)) throw ambiguos(ref)\n  }\n\n  function ambiguos(ref: string): Error {\n    return new Error(`reference \"${ref}\" resolves to more than one schema`)\n  }\n}\n$/dist/vocabularies/jtd/values.js.map\u0006{\"version\":3,\"file\":\"values.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../lib/vocabularies/jtd/values.ts\"],\"names\":[],\"mappings\":\";;AAEA,6CAA0D;AAC1D,mDAAmD;AACnD,yCAAwC;AACxC,yCAA8C;AAC9C,mCAAgD;AAIhD,MAAM,GAAG,GAA0B;IACjC,OAAO,EAAE,QAAQ;IACjB,UAAU,EAAE,QAAQ;IACpB,KAAK,EAAE,IAAA,iBAAS,EAAC,QAAQ,CAAC;IAC1B,IAAI,CAAC,GAAe;QAClB,IAAA,wBAAa,EAAC,GAAG,CAAC,CAAA;QAClB,MAAM,EAAC,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAC,GAAG,GAAG,CAAA;QACnC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,IAAA,8BAAmB,EAAC,GAAG,EAAE,IAAI,CAAC,CAAA;QACpD,IAAI,IAAA,wBAAiB,EAAC,EAAE,EAAE,MAAM,CAAC,EAAE;YACjC,GAAG,CAAC,EAAE,CAAC,IAAA,aAAG,EAAC,IAAA,YAAE,EAAC,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAA;SAChD;aAAM;YACL,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAA;YACZ,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,CAAC,CAAA;YAChC,GAAG,CAAC,MAAM,CAAC,IAAA,aAAG,EAAC,KAAK,CAAC,CAAC,CAAA;YACtB,GAAG,CAAC,KAAK,EAAE,CAAA;YACX,GAAG,CAAC,KAAK,EAAE,CAAA;SACZ;QACD,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,CAAA;QAEb,SAAS,WAAW;YAClB,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YAChC,IAAI,EAAE,CAAC,SAAS,EAAE;gBAChB,MAAM,QAAQ,GAAG,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;gBACvC,cAAc,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAA;gBACjD,OAAO,QAAQ,CAAA;aAChB;YACD,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;YACrB,cAAc,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAA;YACjC,OAAO,MAAM,CAAA;YAEb,SAAS,cAAc,CAAC,QAAoB;gBAC1C,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE;oBAC7B,GAAG,CAAC,SAAS,CACX;wBACE,OAAO,EAAE,QAAQ;wBACjB,QAAQ,EAAE,GAAG;wBACb,YAAY,EAAE,WAAI,CAAC,GAAG;qBACvB,EACD,MAAM,CACP,CAAA;oBACD,GAAG,CAAC,EAAE,CAAC,IAAA,aAAG,EAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,CAAA;gBAC/B,CAAC,CAAC,CAAA;YACJ,CAAC;QACH,CAAC;IACH,CAAC;CACF,CAAA;AAED,kBAAe,GAAG,CAAA\"}*/dist/vocabularies/dynamic/recursiveRef.js\u0001E\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst dynamicRef_1 = require(\"./dynamicRef\");\nconst def = {\n    keyword: \"$recursiveRef\",\n    schemaType: \"string\",\n    code: (cxt) => (0, dynamicRef_1.dynamicRef)(cxt, cxt.schema),\n};\nexports.default = def;\n//# sourceMappingURL=recursiveRef.js.map(/dist/vocabularies/applicator/anyOf.d.tsimport type { CodeKeywordDefinition, ErrorNoParams, AnySchema } from \"../../types\";\nexport type AnyOfError = ErrorNoParams<\"anyOf\", AnySchema[]>;\ndeclare const def: CodeKeywordDefinition;\nexport default def;\n /dist/vocabularies/jtd/enum.d.tsimport type { CodeKeywordDefinition, ErrorObject } from \"../../types\";\nexport type JTDEnumError = ErrorObject<\"enum\", {\n    allowedValues: string[];\n}, string[]>;\ndeclare const def: CodeKeywordDefinition;\nexport default def;\n#/dist/vocabularies/draft2020.js.map\u0001{\"version\":3,\"file\":\"draft2020.js\",\"sourceRoot\":\"\",\"sources\":[\"../../lib/vocabularies/draft2020.ts\"],\"names\":[],\"mappings\":\";;AACA,iCAAmC;AACnC,6CAA+C;AAC/C,6CAAkD;AAClD,uCAAyC;AACzC,iCAAmC;AACnC,+CAAiD;AACjD,qCAAuC;AACvC,yCAAgE;AAEhE,MAAM,qBAAqB,GAAiB;IAC1C,iBAAiB;IACjB,cAAc;IACd,oBAAoB;IACpB,IAAA,oBAAuB,EAAC,IAAI,CAAC;IAC7B,gBAAgB;IAChB,6BAAkB;IAClB,4BAAiB;IACjB,cAAc;IACd,qBAAqB;CACtB,CAAA;AAED,kBAAe,qBAAqB,CAAA\"})/dist/vocabularies/jtd/discriminator.d.ts\u0001import type { CodeKeywordDefinition } from \"../../types\";\nimport { _JTDTypeError } from \"./error\";\nimport { DiscrError, DiscrErrorObj } from \"../discriminator/types\";\nexport type JTDDiscriminatorError = _JTDTypeError<\"discriminator\", \"object\", string> | DiscrErrorObj<DiscrError.Tag> | DiscrErrorObj<DiscrError.Mapping>;\ndeclare const def: CodeKeywordDefinition;\nexport default def;\n/dist/vocabularies/jtd/error.js\u0003}\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.typeErrorParams = exports.typeErrorMessage = exports.typeError = void 0;\nconst codegen_1 = require(\"../../compile/codegen\");\nfunction typeError(t) {\n    return {\n        message: (cxt) => typeErrorMessage(cxt, t),\n        params: (cxt) => typeErrorParams(cxt, t),\n    };\n}\nexports.typeError = typeError;\nfunction typeErrorMessage({ parentSchema }, t) {\n    return (parentSchema === null || parentSchema === void 0 ? void 0 : parentSchema.nullable) ? `must be ${t} or null` : `must be ${t}`;\n}\nexports.typeErrorMessage = typeErrorMessage;\nfunction typeErrorParams({ parentSchema }, t) {\n    return (0, codegen_1._) `{type: ${t}, nullable: ${!!(parentSchema === null || parentSchema === void 0 ? void 0 : parentSchema.nullable)}}`;\n}\nexports.typeErrorParams = typeErrorParams;\n//# sourceMappingURL=error.js.map'/dist/vocabularies/format/format.js.map\u000e{\"version\":3,\"file\":\"format.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../lib/vocabularies/format/format.ts\"],\"names\":[],\"mappings\":\"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\"})/dist/compile/validate/applicability.d.ts\u0001import type { AnySchemaObject } from \"../../types\";\nimport type { SchemaObjCxt } from \"..\";\nimport type { JSONType, RuleGroup, Rule } from \"../rules\";\nexport declare function schemaHasRulesForType({ schema, self }: SchemaObjCxt, type: JSONType): boolean | undefined;\nexport declare function shouldUseGroup(schema: AnySchemaObject, group: RuleGroup): boolean;\nexport declare function shouldUseRule(schema: AnySchemaObject, rule: Rule): boolean | undefined;\n /dist/vocabularies/metadata.d.tsĕimport type { Vocabulary } from \"../types\";\nexport declare const metadataVocabulary: Vocabulary;\nexport declare const contentVocabulary: Vocabulary;\n/dist/compile/codegen/index.jsZW\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.or = exports.and = exports.not = exports.CodeGen = exports.operators = exports.varKinds = exports.ValueScopeName = exports.ValueScope = exports.Scope = exports.Name = exports.regexpCode = exports.stringify = exports.getProperty = exports.nil = exports.strConcat = exports.str = exports._ = void 0;\nconst code_1 = require(\"./code\");\nconst scope_1 = require(\"./scope\");\nvar code_2 = require(\"./code\");\nObject.defineProperty(exports, \"_\", { enumerable: true, get: function () { return code_2._; } });\nObject.defineProperty(exports, \"str\", { enumerable: true, get: function () { return code_2.str; } });\nObject.defineProperty(exports, \"strConcat\", { enumerable: true, get: function () { return code_2.strConcat; } });\nObject.defineProperty(exports, \"nil\", { enumerable: true, get: function () { return code_2.nil; } });\nObject.defineProperty(exports, \"getProperty\", { enumerable: true, get: function () { return code_2.getProperty; } });\nObject.defineProperty(exports, \"stringify\", { enumerable: true, get: function () { return code_2.stringify; } });\nObject.defineProperty(exports, \"regexpCode\", { enumerable: true, get: function () { return code_2.regexpCode; } });\nObject.defineProperty(exports, \"Name\", { enumerable: true, get: function () { return code_2.Name; } });\nvar scope_2 = require(\"./scope\");\nObject.defineProperty(exports, \"Scope\", { enumerable: true, get: function () { return scope_2.Scope; } });\nObject.defineProperty(exports, \"ValueScope\", { enumerable: true, get: function () { return scope_2.ValueScope; } });\nObject.defineProperty(exports, \"ValueScopeName\", { enumerable: true, get: function () { return scope_2.ValueScopeName; } });\nObject.defineProperty(exports, \"varKinds\", { enumerable: true, get: function () { return scope_2.varKinds; } });\nexports.operators = {\n    GT: new code_1._Code(\">\"),\n    GTE: new code_1._Code(\">=\"),\n    LT: new code_1._Code(\"<\"),\n    LTE: new code_1._Code(\"<=\"),\n    EQ: new code_1._Code(\"===\"),\n    NEQ: new code_1._Code(\"!==\"),\n    NOT: new code_1._Code(\"!\"),\n    OR: new code_1._Code(\"||\"),\n    AND: new code_1._Code(\"&&\"),\n    ADD: new code_1._Code(\"+\"),\n};\nclass Node {\n    optimizeNodes() {\n        return this;\n    }\n    optimizeNames(_names, _constants) {\n        return this;\n    }\n}\nclass Def extends Node {\n    constructor(varKind, name, rhs) {\n        super();\n        this.varKind = varKind;\n        this.name = name;\n        this.rhs = rhs;\n    }\n    render({ es5, _n }) {\n        const varKind = es5 ? scope_1.varKinds.var : this.varKind;\n        const rhs = this.rhs === undefined ? \"\" : ` = ${this.rhs}`;\n        return `${varKind} ${this.name}${rhs};` + _n;\n    }\n    optimizeNames(names, constants) {\n        if (!names[this.name.str])\n            return;\n        if (this.rhs)\n            this.rhs = optimizeExpr(this.rhs, names, constants);\n        return this;\n    }\n    get names() {\n        return this.rhs instanceof code_1._CodeOrName ? this.rhs.names : {};\n    }\n}\nclass Assign extends Node {\n    constructor(lhs, rhs, sideEffects) {\n        super();\n        this.lhs = lhs;\n        this.rhs = rhs;\n        this.sideEffects = sideEffects;\n    }\n    render({ _n }) {\n        return `${this.lhs} = ${this.rhs};` + _n;\n    }\n    optimizeNames(names, constants) {\n        if (this.lhs instanceof code_1.Name && !names[this.lhs.str] && !this.sideEffects)\n            return;\n        this.rhs = optimizeExpr(this.rhs, names, constants);\n        return this;\n    }\n    get names() {\n        const names = this.lhs instanceof code_1.Name ? {} : { ...this.lhs.names };\n        return addExprNames(names, this.rhs);\n    }\n}\nclass AssignOp extends Assign {\n    constructor(lhs, op, rhs, sideEffects) {\n        super(lhs, rhs, sideEffects);\n        this.op = op;\n    }\n    render({ _n }) {\n        return `${this.lhs} ${this.op}= ${this.rhs};` + _n;\n    }\n}\nclass Label extends Node {\n    constructor(label) {\n        super();\n        this.label = label;\n        this.names = {};\n    }\n    render({ _n }) {\n        return `${this.label}:` + _n;\n    }\n}\nclass Break extends Node {\n    constructor(label) {\n        super();\n        this.label = label;\n        this.names = {};\n    }\n    render({ _n }) {\n        const label = this.label ? ` ${this.label}` : \"\";\n        return `break${label};` + _n;\n    }\n}\nclass Throw extends Node {\n    constructor(error) {\n        super();\n        this.error = error;\n    }\n    render({ _n }) {\n        return `throw ${this.error};` + _n;\n    }\n    get names() {\n        return this.error.names;\n    }\n}\nclass AnyCode extends Node {\n    constructor(code) {\n        super();\n        this.code = code;\n    }\n    render({ _n }) {\n        return `${this.code};` + _n;\n    }\n    optimizeNodes() {\n        return `${this.code}` ? this : undefined;\n    }\n    optimizeNames(names, constants) {\n        this.code = optimizeExpr(this.code, names, constants);\n        return this;\n    }\n    get names() {\n        return this.code instanceof code_1._CodeOrName ? this.code.names : {};\n    }\n}\nclass ParentNode extends Node {\n    constructor(nodes = []) {\n        super();\n        this.nodes = nodes;\n    }\n    render(opts) {\n        return this.nodes.reduce((code, n) => code + n.render(opts), \"\");\n    }\n    optimizeNodes() {\n        const { nodes } = this;\n        let i = nodes.length;\n        while (i--) {\n            const n = nodes[i].optimizeNodes();\n            if (Array.isArray(n))\n                nodes.splice(i, 1, ...n);\n            else if (n)\n                nodes[i] = n;\n            else\n                nodes.splice(i, 1);\n        }\n        return nodes.length > 0 ? this : undefined;\n    }\n    optimizeNames(names, constants) {\n        const { nodes } = this;\n        let i = nodes.length;\n        while (i--) {\n            // iterating backwards improves 1-pass optimization\n            const n = nodes[i];\n            if (n.optimizeNames(names, constants))\n                continue;\n            subtractNames(names, n.names);\n            nodes.splice(i, 1);\n        }\n        return nodes.length > 0 ? this : undefined;\n    }\n    get names() {\n        return this.nodes.reduce((names, n) => addNames(names, n.names), {});\n    }\n}\nclass BlockNode extends ParentNode {\n    render(opts) {\n        return \"{\" + opts._n + super.render(opts) + \"}\" + opts._n;\n    }\n}\nclass Root extends ParentNode {\n}\nclass Else extends BlockNode {\n}\nElse.kind = \"else\";\nclass If extends BlockNode {\n    constructor(condition, nodes) {\n        super(nodes);\n        this.condition = condition;\n    }\n    render(opts) {\n        let code = `if(${this.condition})` + super.render(opts);\n        if (this.else)\n            code += \"else \" + this.else.render(opts);\n        return code;\n    }\n    optimizeNodes() {\n        super.optimizeNodes();\n        const cond = this.condition;\n        if (cond === true)\n            return this.nodes; // else is ignored here\n        let e = this.else;\n        if (e) {\n            const ns = e.optimizeNodes();\n            e = this.else = Array.isArray(ns) ? new Else(ns) : ns;\n        }\n        if (e) {\n            if (cond === false)\n                return e instanceof If ? e : e.nodes;\n            if (this.nodes.length)\n                return this;\n            return new If(not(cond), e instanceof If ? [e] : e.nodes);\n        }\n        if (cond === false || !this.nodes.length)\n            return undefined;\n        return this;\n    }\n    optimizeNames(names, constants) {\n        var _a;\n        this.else = (_a = this.else) === null || _a === void 0 ? void 0 : _a.optimizeNames(names, constants);\n        if (!(super.optimizeNames(names, constants) || this.else))\n            return;\n        this.condition = optimizeExpr(this.condition, names, constants);\n        return this;\n    }\n    get names() {\n        const names = super.names;\n        addExprNames(names, this.condition);\n        if (this.else)\n            addNames(names, this.else.names);\n        return names;\n    }\n}\nIf.kind = \"if\";\nclass For extends BlockNode {\n}\nFor.kind = \"for\";\nclass ForLoop extends For {\n    constructor(iteration) {\n        super();\n        this.iteration = iteration;\n    }\n    render(opts) {\n        return `for(${this.iteration})` + super.render(opts);\n    }\n    optimizeNames(names, constants) {\n        if (!super.optimizeNames(names, constants))\n            return;\n        this.iteration = optimizeExpr(this.iteration, names, constants);\n        return this;\n    }\n    get names() {\n        return addNames(super.names, this.iteration.names);\n    }\n}\nclass ForRange extends For {\n    constructor(varKind, name, from, to) {\n        super();\n        this.varKind = varKind;\n        this.name = name;\n        this.from = from;\n        this.to = to;\n    }\n    render(opts) {\n        const varKind = opts.es5 ? scope_1.varKinds.var : this.varKind;\n        const { name, from, to } = this;\n        return `for(${varKind} ${name}=${from}; ${name}<${to}; ${name}++)` + super.render(opts);\n    }\n    get names() {\n        const names = addExprNames(super.names, this.from);\n        return addExprNames(names, this.to);\n    }\n}\nclass ForIter extends For {\n    constructor(loop, varKind, name, iterable) {\n        super();\n        this.loop = loop;\n        this.varKind = varKind;\n        this.name = name;\n        this.iterable = iterable;\n    }\n    render(opts) {\n        return `for(${this.varKind} ${this.name} ${this.loop} ${this.iterable})` + super.render(opts);\n    }\n    optimizeNames(names, constants) {\n        if (!super.optimizeNames(names, constants))\n            return;\n        this.iterable = optimizeExpr(this.iterable, names, constants);\n        return this;\n    }\n    get names() {\n        return addNames(super.names, this.iterable.names);\n    }\n}\nclass Func extends BlockNode {\n    constructor(name, args, async) {\n        super();\n        this.name = name;\n        this.args = args;\n        this.async = async;\n    }\n    render(opts) {\n        const _async = this.async ? \"async \" : \"\";\n        return `${_async}function ${this.name}(${this.args})` + super.render(opts);\n    }\n}\nFunc.kind = \"func\";\nclass Return extends ParentNode {\n    render(opts) {\n        return \"return \" + super.render(opts);\n    }\n}\nReturn.kind = \"return\";\nclass Try extends BlockNode {\n    render(opts) {\n        let code = \"try\" + super.render(opts);\n        if (this.catch)\n            code += this.catch.render(opts);\n        if (this.finally)\n            code += this.finally.render(opts);\n        return code;\n    }\n    optimizeNodes() {\n        var _a, _b;\n        super.optimizeNodes();\n        (_a = this.catch) === null || _a === void 0 ? void 0 : _a.optimizeNodes();\n        (_b = this.finally) === null || _b === void 0 ? void 0 : _b.optimizeNodes();\n        return this;\n    }\n    optimizeNames(names, constants) {\n        var _a, _b;\n        super.optimizeNames(names, constants);\n        (_a = this.catch) === null || _a === void 0 ? void 0 : _a.optimizeNames(names, constants);\n        (_b = this.finally) === null || _b === void 0 ? void 0 : _b.optimizeNames(names, constants);\n        return this;\n    }\n    get names() {\n        const names = super.names;\n        if (this.catch)\n            addNames(names, this.catch.names);\n        if (this.finally)\n            addNames(names, this.finally.names);\n        return names;\n    }\n}\nclass Catch extends BlockNode {\n    constructor(error) {\n        super();\n        this.error = error;\n    }\n    render(opts) {\n        return `catch(${this.error})` + super.render(opts);\n    }\n}\nCatch.kind = \"catch\";\nclass Finally extends BlockNode {\n    render(opts) {\n        return \"finally\" + super.render(opts);\n    }\n}\nFinally.kind = \"finally\";\nclass CodeGen {\n    constructor(extScope, opts = {}) {\n        this._values = {};\n        this._blockStarts = [];\n        this._constants = {};\n        this.opts = { ...opts, _n: opts.lines ? \"\\n\" : \"\" };\n        this._extScope = extScope;\n        this._scope = new scope_1.Scope({ parent: extScope });\n        this._nodes = [new Root()];\n    }\n    toString() {\n        return this._root.render(this.opts);\n    }\n    // returns unique name in the internal scope\n    name(prefix) {\n        return this._scope.name(prefix);\n    }\n    // reserves unique name in the external scope\n    scopeName(prefix) {\n        return this._extScope.name(prefix);\n    }\n    // reserves unique name in the external scope and assigns value to it\n    scopeValue(prefixOrName, value) {\n        const name = this._extScope.value(prefixOrName, value);\n        const vs = this._values[name.prefix] || (this._values[name.prefix] = new Set());\n        vs.add(name);\n        return name;\n    }\n    getScopeValue(prefix, keyOrRef) {\n        return this._extScope.getValue(prefix, keyOrRef);\n    }\n    // return code that assigns values in the external scope to the names that are used internally\n    // (same names that were returned by gen.scopeName or gen.scopeValue)\n    scopeRefs(scopeName) {\n        return this._extScope.scopeRefs(scopeName, this._values);\n    }\n    scopeCode() {\n        return this._extScope.scopeCode(this._values);\n    }\n    _def(varKind, nameOrPrefix, rhs, constant) {\n        const name = this._scope.toName(nameOrPrefix);\n        if (rhs !== undefined && constant)\n            this._constants[name.str] = rhs;\n        this._leafNode(new Def(varKind, name, rhs));\n        return name;\n    }\n    // `const` declaration (`var` in es5 mode)\n    const(nameOrPrefix, rhs, _constant) {\n        return this._def(scope_1.varKinds.const, nameOrPrefix, rhs, _constant);\n    }\n    // `let` declaration with optional assignment (`var` in es5 mode)\n    let(nameOrPrefix, rhs, _constant) {\n        return this._def(scope_1.varKinds.let, nameOrPrefix, rhs, _constant);\n    }\n    // `var` declaration with optional assignment\n    var(nameOrPrefix, rhs, _constant) {\n        return this._def(scope_1.varKinds.var, nameOrPrefix, rhs, _constant);\n    }\n    // assignment code\n    assign(lhs, rhs, sideEffects) {\n        return this._leafNode(new Assign(lhs, rhs, sideEffects));\n    }\n    // `+=` code\n    add(lhs, rhs) {\n        return this._leafNode(new AssignOp(lhs, exports.operators.ADD, rhs));\n    }\n    // appends passed SafeExpr to code or executes Block\n    code(c) {\n        if (typeof c == \"function\")\n            c();\n        else if (c !== code_1.nil)\n            this._leafNode(new AnyCode(c));\n        return this;\n    }\n    // returns code for object literal for the passed argument list of key-value pairs\n    object(...keyValues) {\n        const code = [\"{\"];\n        for (const [key, value] of keyValues) {\n            if (code.length > 1)\n                code.push(\",\");\n            code.push(key);\n            if (key !== value || this.opts.es5) {\n                code.push(\":\");\n                (0, code_1.addCodeArg)(code, value);\n            }\n        }\n        code.push(\"}\");\n        return new code_1._Code(code);\n    }\n    // `if` clause (or statement if `thenBody` and, optionally, `elseBody` are passed)\n    if(condition, thenBody, elseBody) {\n        this._blockNode(new If(condition));\n        if (thenBody && elseBody) {\n            this.code(thenBody).else().code(elseBody).endIf();\n        }\n        else if (thenBody) {\n            this.code(thenBody).endIf();\n        }\n        else if (elseBody) {\n            throw new Error('CodeGen: \"else\" body without \"then\" body');\n        }\n        return this;\n    }\n    // `else if` clause - invalid without `if` or after `else` clauses\n    elseIf(condition) {\n        return this._elseNode(new If(condition));\n    }\n    // `else` clause - only valid after `if` or `else if` clauses\n    else() {\n        return this._elseNode(new Else());\n    }\n    // end `if` statement (needed if gen.if was used only with condition)\n    endIf() {\n        return this._endBlockNode(If, Else);\n    }\n    _for(node, forBody) {\n        this._blockNode(node);\n        if (forBody)\n            this.code(forBody).endFor();\n        return this;\n    }\n    // a generic `for` clause (or statement if `forBody` is passed)\n    for(iteration, forBody) {\n        return this._for(new ForLoop(iteration), forBody);\n    }\n    // `for` statement for a range of values\n    forRange(nameOrPrefix, from, to, forBody, varKind = this.opts.es5 ? scope_1.varKinds.var : scope_1.varKinds.let) {\n        const name = this._scope.toName(nameOrPrefix);\n        return this._for(new ForRange(varKind, name, from, to), () => forBody(name));\n    }\n    // `for-of` statement (in es5 mode replace with a normal for loop)\n    forOf(nameOrPrefix, iterable, forBody, varKind = scope_1.varKinds.const) {\n        const name = this._scope.toName(nameOrPrefix);\n        if (this.opts.es5) {\n            const arr = iterable instanceof code_1.Name ? iterable : this.var(\"_arr\", iterable);\n            return this.forRange(\"_i\", 0, (0, code_1._) `${arr}.length`, (i) => {\n                this.var(name, (0, code_1._) `${arr}[${i}]`);\n                forBody(name);\n            });\n        }\n        return this._for(new ForIter(\"of\", varKind, name, iterable), () => forBody(name));\n    }\n    // `for-in` statement.\n    // With option `ownProperties` replaced with a `for-of` loop for object keys\n    forIn(nameOrPrefix, obj, forBody, varKind = this.opts.es5 ? scope_1.varKinds.var : scope_1.varKinds.const) {\n        if (this.opts.ownProperties) {\n            return this.forOf(nameOrPrefix, (0, code_1._) `Object.keys(${obj})`, forBody);\n        }\n        const name = this._scope.toName(nameOrPrefix);\n        return this._for(new ForIter(\"in\", varKind, name, obj), () => forBody(name));\n    }\n    // end `for` loop\n    endFor() {\n        return this._endBlockNode(For);\n    }\n    // `label` statement\n    label(label) {\n        return this._leafNode(new Label(label));\n    }\n    // `break` statement\n    break(label) {\n        return this._leafNode(new Break(label));\n    }\n    // `return` statement\n    return(value) {\n        const node = new Return();\n        this._blockNode(node);\n        this.code(value);\n        if (node.nodes.length !== 1)\n            throw new Error('CodeGen: \"return\" should have one node');\n        return this._endBlockNode(Return);\n    }\n    // `try` statement\n    try(tryBody, catchCode, finallyCode) {\n        if (!catchCode && !finallyCode)\n            throw new Error('CodeGen: \"try\" without \"catch\" and \"finally\"');\n        const node = new Try();\n        this._blockNode(node);\n        this.code(tryBody);\n        if (catchCode) {\n            const error = this.name(\"e\");\n            this._currNode = node.catch = new Catch(error);\n            catchCode(error);\n        }\n        if (finallyCode) {\n            this._currNode = node.finally = new Finally();\n            this.code(finallyCode);\n        }\n        return this._endBlockNode(Catch, Finally);\n    }\n    // `throw` statement\n    throw(error) {\n        return this._leafNode(new Throw(error));\n    }\n    // start self-balancing block\n    block(body, nodeCount) {\n        this._blockStarts.push(this._nodes.length);\n        if (body)\n            this.code(body).endBlock(nodeCount);\n        return this;\n    }\n    // end the current self-balancing block\n    endBlock(nodeCount) {\n        const len = this._blockStarts.pop();\n        if (len === undefined)\n            throw new Error(\"CodeGen: not in self-balancing block\");\n        const toClose = this._nodes.length - len;\n        if (toClose < 0 || (nodeCount !== undefined && toClose !== nodeCount)) {\n            throw new Error(`CodeGen: wrong number of nodes: ${toClose} vs ${nodeCount} expected`);\n        }\n        this._nodes.length = len;\n        return this;\n    }\n    // `function` heading (or definition if funcBody is passed)\n    func(name, args = code_1.nil, async, funcBody) {\n        this._blockNode(new Func(name, args, async));\n        if (funcBody)\n            this.code(funcBody).endFunc();\n        return this;\n    }\n    // end function definition\n    endFunc() {\n        return this._endBlockNode(Func);\n    }\n    optimize(n = 1) {\n        while (n-- > 0) {\n            this._root.optimizeNodes();\n            this._root.optimizeNames(this._root.names, this._constants);\n        }\n    }\n    _leafNode(node) {\n        this._currNode.nodes.push(node);\n        return this;\n    }\n    _blockNode(node) {\n        this._currNode.nodes.push(node);\n        this._nodes.push(node);\n    }\n    _endBlockNode(N1, N2) {\n        const n = this._currNode;\n        if (n instanceof N1 || (N2 && n instanceof N2)) {\n            this._nodes.pop();\n            return this;\n        }\n        throw new Error(`CodeGen: not in block \"${N2 ? `${N1.kind}/${N2.kind}` : N1.kind}\"`);\n    }\n    _elseNode(node) {\n        const n = this._currNode;\n        if (!(n instanceof If)) {\n            throw new Error('CodeGen: \"else\" without \"if\"');\n        }\n        this._currNode = n.else = node;\n        return this;\n    }\n    get _root() {\n        return this._nodes[0];\n    }\n    get _currNode() {\n        const ns = this._nodes;\n        return ns[ns.length - 1];\n    }\n    set _currNode(node) {\n        const ns = this._nodes;\n        ns[ns.length - 1] = node;\n    }\n}\nexports.CodeGen = CodeGen;\nfunction addNames(names, from) {\n    for (const n in from)\n        names[n] = (names[n] || 0) + (from[n] || 0);\n    return names;\n}\nfunction addExprNames(names, from) {\n    return from instanceof code_1._CodeOrName ? addNames(names, from.names) : names;\n}\nfunction optimizeExpr(expr, names, constants) {\n    if (expr instanceof code_1.Name)\n        return replaceName(expr);\n    if (!canOptimize(expr))\n        return expr;\n    return new code_1._Code(expr._items.reduce((items, c) => {\n        if (c instanceof code_1.Name)\n            c = replaceName(c);\n        if (c instanceof code_1._Code)\n            items.push(...c._items);\n        else\n            items.push(c);\n        return items;\n    }, []));\n    function replaceName(n) {\n        const c = constants[n.str];\n        if (c === undefined || names[n.str] !== 1)\n            return n;\n        delete names[n.str];\n        return c;\n    }\n    function canOptimize(e) {\n        return (e instanceof code_1._Code &&\n            e._items.some((c) => c instanceof code_1.Name && names[c.str] === 1 && constants[c.str] !== undefined));\n    }\n}\nfunction subtractNames(names, from) {\n    for (const n in from)\n        names[n] = (names[n] || 0) - (from[n] || 0);\n}\nfunction not(x) {\n    return typeof x == \"boolean\" || typeof x == \"number\" || x === null ? !x : (0, code_1._) `!${par(x)}`;\n}\nexports.not = not;\nconst andCode = mappend(exports.operators.AND);\n// boolean AND (&&) expression with the passed arguments\nfunction and(...args) {\n    return args.reduce(andCode);\n}\nexports.and = and;\nconst orCode = mappend(exports.operators.OR);\n// boolean OR (||) expression with the passed arguments\nfunction or(...args) {\n    return args.reduce(orCode);\n}\nexports.or = or;\nfunction mappend(op) {\n    return (x, y) => (x === code_1.nil ? y : y === code_1.nil ? x : (0, code_1._) `${par(x)} ${op} ${par(y)}`);\n}\nfunction par(x) {\n    return x instanceof code_1.Name ? x : (0, code_1._) `(${x})`;\n}\n//# sourceMappingURL=index.js.map/dist/compile/resolve.js\u0013u\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getSchemaRefs = exports.resolveUrl = exports.normalizeId = exports._getFullPath = exports.getFullPath = exports.inlineRef = void 0;\nconst util_1 = require(\"./util\");\nconst equal = require(\"fast-deep-equal\");\nconst traverse = require(\"json-schema-traverse\");\n// TODO refactor to use keyword definitions\nconst SIMPLE_INLINED = new Set([\n    \"type\",\n    \"format\",\n    \"pattern\",\n    \"maxLength\",\n    \"minLength\",\n    \"maxProperties\",\n    \"minProperties\",\n    \"maxItems\",\n    \"minItems\",\n    \"maximum\",\n    \"minimum\",\n    \"uniqueItems\",\n    \"multipleOf\",\n    \"required\",\n    \"enum\",\n    \"const\",\n]);\nfunction inlineRef(schema, limit = true) {\n    if (typeof schema == \"boolean\")\n        return true;\n    if (limit === true)\n        return !hasRef(schema);\n    if (!limit)\n        return false;\n    return countKeys(schema) <= limit;\n}\nexports.inlineRef = inlineRef;\nconst REF_KEYWORDS = new Set([\n    \"$ref\",\n    \"$recursiveRef\",\n    \"$recursiveAnchor\",\n    \"$dynamicRef\",\n    \"$dynamicAnchor\",\n]);\nfunction hasRef(schema) {\n    for (const key in schema) {\n        if (REF_KEYWORDS.has(key))\n            return true;\n        const sch = schema[key];\n        if (Array.isArray(sch) && sch.some(hasRef))\n            return true;\n        if (typeof sch == \"object\" && hasRef(sch))\n            return true;\n    }\n    return false;\n}\nfunction countKeys(schema) {\n    let count = 0;\n    for (const key in schema) {\n        if (key === \"$ref\")\n            return Infinity;\n        count++;\n        if (SIMPLE_INLINED.has(key))\n            continue;\n        if (typeof schema[key] == \"object\") {\n            (0, util_1.eachItem)(schema[key], (sch) => (count += countKeys(sch)));\n        }\n        if (count === Infinity)\n            return Infinity;\n    }\n    return count;\n}\nfunction getFullPath(resolver, id = \"\", normalize) {\n    if (normalize !== false)\n        id = normalizeId(id);\n    const p = resolver.parse(id);\n    return _getFullPath(resolver, p);\n}\nexports.getFullPath = getFullPath;\nfunction _getFullPath(resolver, p) {\n    const serialized = resolver.serialize(p);\n    return serialized.split(\"#\")[0] + \"#\";\n}\nexports._getFullPath = _getFullPath;\nconst TRAILING_SLASH_HASH = /#\\/?$/;\nfunction normalizeId(id) {\n    return id ? id.replace(TRAILING_SLASH_HASH, \"\") : \"\";\n}\nexports.normalizeId = normalizeId;\nfunction resolveUrl(resolver, baseId, id) {\n    id = normalizeId(id);\n    return resolver.resolve(baseId, id);\n}\nexports.resolveUrl = resolveUrl;\nconst ANCHOR = /^[a-z_][-a-z0-9._]*$/i;\nfunction getSchemaRefs(schema, baseId) {\n    if (typeof schema == \"boolean\")\n        return {};\n    const { schemaId, uriResolver } = this.opts;\n    const schId = normalizeId(schema[schemaId] || baseId);\n    const baseIds = { \"\": schId };\n    const pathPrefix = getFullPath(uriResolver, schId, false);\n    const localRefs = {};\n    const schemaRefs = new Set();\n    traverse(schema, { allKeys: true }, (sch, jsonPtr, _, parentJsonPtr) => {\n        if (parentJsonPtr === undefined)\n            return;\n        const fullPath = pathPrefix + jsonPtr;\n        let baseId = baseIds[parentJsonPtr];\n        if (typeof sch[schemaId] == \"string\")\n            baseId = addRef.call(this, sch[schemaId]);\n        addAnchor.call(this, sch.$anchor);\n        addAnchor.call(this, sch.$dynamicAnchor);\n        baseIds[jsonPtr] = baseId;\n        function addRef(ref) {\n            // eslint-disable-next-line @typescript-eslint/unbound-method\n            const _resolve = this.opts.uriResolver.resolve;\n            ref = normalizeId(baseId ? _resolve(baseId, ref) : ref);\n            if (schemaRefs.has(ref))\n                throw ambiguos(ref);\n            schemaRefs.add(ref);\n            let schOrRef = this.refs[ref];\n            if (typeof schOrRef == \"string\")\n                schOrRef = this.refs[schOrRef];\n            if (typeof schOrRef == \"object\") {\n                checkAmbiguosRef(sch, schOrRef.schema, ref);\n            }\n            else if (ref !== normalizeId(fullPath)) {\n                if (ref[0] === \"#\") {\n                    checkAmbiguosRef(sch, localRefs[ref], ref);\n                    localRefs[ref] = sch;\n                }\n                else {\n                    this.refs[ref] = fullPath;\n                }\n            }\n            return ref;\n        }\n        function addAnchor(anchor) {\n            if (typeof anchor == \"string\") {\n                if (!ANCHOR.test(anchor))\n                    throw new Error(`invalid anchor \"${anchor}\"`);\n                addRef.call(this, `#${anchor}`);\n            }\n        }\n    });\n    return localRefs;\n    function checkAmbiguosRef(sch1, sch2, ref) {\n        if (sch2 !== undefined && !equal(sch1, sch2))\n            throw ambiguos(ref);\n    }\n    function ambiguos(ref) {\n        return new Error(`reference \"${ref}\" resolves to more than one schema`);\n    }\n}\nexports.getSchemaRefs = getSchemaRefs;\n//# sourceMappingURL=resolve.js.map/dist/vocabularies/jtd/ref.d.tsimport type { CodeKeywordDefinition, AnySchemaObject } from \"../../types\";\ndeclare const def: CodeKeywordDefinition;\nexport declare function hasRef(schema: AnySchemaObject): boolean;\nexport default def;\n-/dist/vocabularies/validation/multipleOf.d.tsimport type { CodeKeywordDefinition, ErrorObject } from \"../../types\";\nexport type MultipleOfError = ErrorObject<\"multipleOf\", {\n    multipleOf: number;\n}, number | {\n    $data: string;\n}>;\ndeclare const def: CodeKeywordDefinition;\nexport default def;\n\"/dist/vocabularies/metadata.js.map\u0001+{\"version\":3,\"file\":\"metadata.js\",\"sourceRoot\":\"\",\"sources\":[\"../../lib/vocabularies/metadata.ts\"],\"names\":[],\"mappings\":\";;;AAEa,QAAA,kBAAkB,GAAe;IAC5C,OAAO;IACP,aAAa;IACb,SAAS;IACT,YAAY;IACZ,UAAU;IACV,WAAW;IACX,UAAU;CACX,CAAA;AAEY,QAAA,iBAAiB,GAAe;IAC3C,kBAAkB;IAClB,iBAAiB;IACjB,eAAe;CAChB,CAAA\"}\"/dist/compile/jtd/serialize.js.map'{\"version\":3,\"file\":\"serialize.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../lib/compile/jtd/serialize.ts\"],\"names\":[],\"mappings\":\"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\"}#/dist/runtime/validation_error.d.tsimport type { ErrorObject } from \"../types\";\nexport default class ValidationError extends Error {\n    readonly errors: Partial<ErrorObject>[];\n    readonly ajv: true;\n    readonly validation: true;\n    constructor(errors: Partial<ErrorObject>[]);\n}\n1/lib/vocabularies/validation/dependentRequired.ts\u0001import type {CodeKeywordDefinition, ErrorObject} from \"../../types\"\nimport {\n  validatePropertyDeps,\n  error,\n  DependenciesErrorParams,\n  PropertyDependencies,\n} from \"../applicator/dependencies\"\n\nexport type DependentRequiredError = ErrorObject<\n  \"dependentRequired\",\n  DependenciesErrorParams,\n  PropertyDependencies\n>\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"dependentRequired\",\n  type: \"object\",\n  schemaType: \"object\",\n  error,\n  code: (cxt) => validatePropertyDeps(cxt),\n}\n\nexport default def\n/lib/vocabularies/jtd/ref.ts\t*import type {CodeKeywordDefinition, AnySchemaObject} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {compileSchema, SchemaEnv} from \"../../compile\"\nimport {_, not, nil, stringify} from \"../../compile/codegen\"\nimport MissingRefError from \"../../compile/ref_error\"\nimport N from \"../../compile/names\"\nimport {getValidate, callRef} from \"../core/ref\"\nimport {checkMetadata} from \"./metadata\"\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"ref\",\n  schemaType: \"string\",\n  code(cxt: KeywordCxt) {\n    checkMetadata(cxt)\n    const {gen, data, schema: ref, parentSchema, it} = cxt\n    const {\n      schemaEnv: {root},\n    } = it\n    const valid = gen.name(\"valid\")\n    if (parentSchema.nullable) {\n      gen.var(valid, _`${data} === null`)\n      gen.if(not(valid), validateJtdRef)\n    } else {\n      gen.var(valid, false)\n      validateJtdRef()\n    }\n    cxt.ok(valid)\n\n    function validateJtdRef(): void {\n      const refSchema = (root.schema as AnySchemaObject).definitions?.[ref]\n      if (!refSchema) {\n        throw new MissingRefError(it.opts.uriResolver, \"\", ref, `No definition ${ref}`)\n      }\n      if (hasRef(refSchema) || !it.opts.inlineRefs) callValidate(refSchema)\n      else inlineRefSchema(refSchema)\n    }\n\n    function callValidate(schema: AnySchemaObject): void {\n      const sch = compileSchema.call(\n        it.self,\n        new SchemaEnv({schema, root, schemaPath: `/definitions/${ref}`})\n      )\n      const v = getValidate(cxt, sch)\n      const errsCount = gen.const(\"_errs\", N.errors)\n      callRef(cxt, v, sch, sch.$async)\n      gen.assign(valid, _`${errsCount} === ${N.errors}`)\n    }\n\n    function inlineRefSchema(schema: AnySchemaObject): void {\n      const schName = gen.scopeValue(\n        \"schema\",\n        it.opts.code.source === true ? {ref: schema, code: stringify(schema)} : {ref: schema}\n      )\n      cxt.subschema(\n        {\n          schema,\n          dataTypes: [],\n          schemaPath: nil,\n          topSchemaRef: schName,\n          errSchemaPath: `/definitions/${ref}`,\n        },\n        valid\n      )\n    }\n  },\n}\n\nexport function hasRef(schema: AnySchemaObject): boolean {\n  for (const key in schema) {\n    let sch: AnySchemaObject\n    if (key === \"ref\" || (typeof (sch = schema[key]) == \"object\" && hasRef(sch))) return true\n  }\n  return false\n}\n\nexport default def\n-/dist/vocabularies/dynamic/dynamicAnchor.d.ts\u0001\u0000import type { CodeKeywordDefinition } from \"../../types\";\nimport type { KeywordCxt } from \"../../compile/validate\";\ndeclare const def: CodeKeywordDefinition;\nexport declare function dynamicAnchor(cxt: KeywordCxt, anchor: string): void;\nexport default def;\n/lib/vocabularies/jtd/index.ts\u0003import type {Vocabulary} from \"../../types\"\nimport refKeyword from \"./ref\"\nimport typeKeyword, {JTDTypeError} from \"./type\"\nimport enumKeyword, {JTDEnumError} from \"./enum\"\nimport elements, {JTDElementsError} from \"./elements\"\nimport properties, {JTDPropertiesError} from \"./properties\"\nimport optionalProperties from \"./optionalProperties\"\nimport discriminator, {JTDDiscriminatorError} from \"./discriminator\"\nimport values, {JTDValuesError} from \"./values\"\nimport union from \"./union\"\nimport metadata from \"./metadata\"\n\nconst jtdVocabulary: Vocabulary = [\n  \"definitions\",\n  refKeyword,\n  typeKeyword,\n  enumKeyword,\n  elements,\n  properties,\n  optionalProperties,\n  discriminator,\n  values,\n  union,\n  metadata,\n  {keyword: \"additionalProperties\", schemaType: \"boolean\"},\n  {keyword: \"nullable\", schemaType: \"boolean\"},\n]\n\nexport default jtdVocabulary\n\nexport type JTDErrorObject =\n  | JTDTypeError\n  | JTDEnumError\n  | JTDElementsError\n  | JTDPropertiesError\n  | JTDDiscriminatorError\n  | JTDValuesError\n/README.md5<img align=\"right\" alt=\"Ajv logo\" width=\"160\" src=\"https://ajv.js.org/img/ajv.svg\">\n\n&nbsp;\n\n# Ajv JSON schema validator\n\nThe fastest JSON validator for Node.js and browser.\n\nSupports JSON Schema draft-04/06/07/2019-09/2020-12 ([draft-04 support](https://ajv.js.org/json-schema.html#draft-04) requires ajv-draft-04 package) and JSON Type Definition [RFC8927](https://datatracker.ietf.org/doc/rfc8927/).\n\n[![build](https://github.com/ajv-validator/ajv/workflows/build/badge.svg)](https://github.com/ajv-validator/ajv/actions?query=workflow%3Abuild)\n[![npm](https://img.shields.io/npm/v/ajv.svg)](https://www.npmjs.com/package/ajv)\n[![npm downloads](https://img.shields.io/npm/dm/ajv.svg)](https://www.npmjs.com/package/ajv)\n[![Coverage Status](https://coveralls.io/repos/github/ajv-validator/ajv/badge.svg?branch=master)](https://coveralls.io/github/ajv-validator/ajv?branch=master)\n[![SimpleX](https://img.shields.io/badge/chat-on%20SimpleX-%2307b4b9)](https://simplex.chat/contact#/?v=1-2&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FV-6t4hoy_SsvKMi9KekdGX-VKQOhDeAe%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAm98gjwvrAEiiz_YgBoaQB9dtKTl5Om1pborUyevQwzg%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion&data=%7B%22type%22%3A%22group%22%2C%22groupLinkId%22%3A%22wYrTFafovkymjUtc2vUjCQ%3D%3D%22%7D)\n[![Gitter](https://img.shields.io/gitter/room/ajv-validator/ajv.svg)](https://gitter.im/ajv-validator/ajv)\n[![GitHub Sponsors](https://img.shields.io/badge/$-sponsors-brightgreen)](https://github.com/sponsors/epoberezkin)\n\n## Ajv sponsors\n\n[<img src=\"https://ajv.js.org/img/mozilla.svg\" width=\"45%\" alt=\"Mozilla\">](https://www.mozilla.org)<img src=\"https://ajv.js.org/img/gap.svg\" width=\"9%\">[<img src=\"https://ajv.js.org/img/reserved.svg\" width=\"45%\">](https://opencollective.com/ajv)\n\n[<img src=\"https://ajv.js.org/img/microsoft.png\" width=\"31%\" alt=\"Microsoft\">](https://opensource.microsoft.com)<img src=\"https://ajv.js.org/img/gap.svg\" width=\"3%\">[<img src=\"https://ajv.js.org/img/reserved.svg\" width=\"31%\">](https://opencollective.com/ajv)<img src=\"https://ajv.js.org/img/gap.svg\" width=\"3%\">[<img src=\"https://ajv.js.org/img/reserved.svg\" width=\"31%\">](https://opencollective.com/ajv)\n\n[<img src=\"https://ajv.js.org/img/retool.svg\" width=\"22.5%\" alt=\"Retool\">](https://retool.com/?utm_source=sponsor&utm_campaign=ajv)<img src=\"https://ajv.js.org/img/gap.svg\" width=\"3%\">[<img src=\"https://ajv.js.org/img/tidelift.svg\" width=\"22.5%\" alt=\"Tidelift\">](https://tidelift.com/subscription/pkg/npm-ajv?utm_source=npm-ajv&utm_medium=referral&utm_campaign=enterprise)<img src=\"https://ajv.js.org/img/gap.svg\" width=\"3%\">[<img src=\"https://ajv.js.org/img/simplex.svg\" width=\"22.5%\" alt=\"SimpleX\">](https://github.com/simplex-chat/simplex-chat)<img src=\"https://ajv.js.org/img/gap.svg\" width=\"3%\">[<img src=\"https://ajv.js.org/img/reserved.svg\" width=\"22.5%\">](https://opencollective.com/ajv)\n\n## Contributing\n\nMore than 100 people contributed to Ajv, and we would love to have you join the development. We welcome implementing new features that will benefit many users and ideas to improve our documentation.\n\nPlease review [Contributing guidelines](./CONTRIBUTING.md) and [Code components](https://ajv.js.org/components.html).\n\n## Documentation\n\nAll documentation is available on the [Ajv website](https://ajv.js.org).\n\nSome useful site links:\n\n- [Getting started](https://ajv.js.org/guide/getting-started.html)\n- [JSON Schema vs JSON Type Definition](https://ajv.js.org/guide/schema-language.html)\n- [API reference](https://ajv.js.org/api.html)\n- [Strict mode](https://ajv.js.org/strict-mode.html)\n- [Standalone validation code](https://ajv.js.org/standalone.html)\n- [Security considerations](https://ajv.js.org/security.html)\n- [Command line interface](https://ajv.js.org/packages/ajv-cli.html)\n- [Frequently Asked Questions](https://ajv.js.org/faq.html)\n\n## <a name=\"sponsors\"></a>Please [sponsor Ajv development](https://github.com/sponsors/epoberezkin)\n\nSince I asked to support Ajv development 40 people and 6 organizations contributed via GitHub and OpenCollective - this support helped receiving the MOSS grant!\n\nYour continuing support is very important - the funds will be used to develop and maintain Ajv once the next major version is released.\n\nPlease sponsor Ajv via:\n\n- [GitHub sponsors page](https://github.com/sponsors/epoberezkin) (GitHub will match it)\n- [Ajv Open Collective](https://opencollective.com/ajv)\n\nThank you.\n\n#### Open Collective sponsors\n\n<a href=\"https://opencollective.com/ajv\"><img src=\"https://opencollective.com/ajv/individuals.svg?width=890\"></a>\n\n<a href=\"https://opencollective.com/ajv/organization/0/website\"><img src=\"https://opencollective.com/ajv/organization/0/avatar.svg\"></a>\n<a href=\"https://opencollective.com/ajv/organization/1/website\"><img src=\"https://opencollective.com/ajv/organization/1/avatar.svg\"></a>\n<a href=\"https://opencollective.com/ajv/organization/2/website\"><img src=\"https://opencollective.com/ajv/organization/2/avatar.svg\"></a>\n<a href=\"https://opencollective.com/ajv/organization/3/website\"><img src=\"https://opencollective.com/ajv/organization/3/avatar.svg\"></a>\n<a href=\"https://opencollective.com/ajv/organization/4/website\"><img src=\"https://opencollective.com/ajv/organization/4/avatar.svg\"></a>\n<a href=\"https://opencollective.com/ajv/organization/5/website\"><img src=\"https://opencollective.com/ajv/organization/5/avatar.svg\"></a>\n<a href=\"https://opencollective.com/ajv/organization/6/website\"><img src=\"https://opencollective.com/ajv/organization/6/avatar.svg\"></a>\n<a href=\"https://opencollective.com/ajv/organization/7/website\"><img src=\"https://opencollective.com/ajv/organization/7/avatar.svg\"></a>\n<a href=\"https://opencollective.com/ajv/organization/8/website\"><img src=\"https://opencollective.com/ajv/organization/8/avatar.svg\"></a>\n<a href=\"https://opencollective.com/ajv/organization/9/website\"><img src=\"https://opencollective.com/ajv/organization/9/avatar.svg\"></a>\n<a href=\"https://opencollective.com/ajv/organization/10/website\"><img src=\"https://opencollective.com/ajv/organization/10/avatar.svg\"></a>\n<a href=\"https://opencollective.com/ajv/organization/11/website\"><img src=\"https://opencollective.com/ajv/organization/11/avatar.svg\"></a>\n<a href=\"https://opencollective.com/ajv/organization/12/website\"><img src=\"https://opencollective.com/ajv/organization/12/avatar.svg\"></a>\n<a href=\"https://opencollective.com/ajv/organization/13/website\"><img src=\"https://opencollective.com/ajv/organization/13/avatar.svg\"></a>\n<a href=\"https://opencollective.com/ajv/organization/14/website\"><img src=\"https://opencollective.com/ajv/organization/14/avatar.svg\"></a>\n<a href=\"https://opencollective.com/ajv/organization/15/website\"><img src=\"https://opencollective.com/ajv/organization/15/avatar.svg\"></a>\n<a href=\"https://opencollective.com/ajv/organization/16/website\"><img src=\"https://opencollective.com/ajv/organization/16/avatar.svg\"></a>\n<a href=\"https://opencollective.com/ajv/organization/17/website\"><img src=\"https://opencollective.com/ajv/organization/17/avatar.svg\"></a>\n<a href=\"https://opencollective.com/ajv/organization/18/website\"><img src=\"https://opencollective.com/ajv/organization/18/avatar.svg\"></a>\n<a href=\"https://opencollective.com/ajv/organization/19/website\"><img src=\"https://opencollective.com/ajv/organization/19/avatar.svg\"></a>\n<a href=\"https://opencollective.com/ajv/organization/20/website\"><img src=\"https://opencollective.com/ajv/organization/20/avatar.svg\"></a>\n<a href=\"https://opencollective.com/ajv/organization/21/website\"><img src=\"https://opencollective.com/ajv/organization/21/avatar.svg\"></a>\n<a href=\"https://opencollective.com/ajv/organization/22/website\"><img src=\"https://opencollective.com/ajv/organization/22/avatar.svg\"></a>\n<a href=\"https://opencollective.com/ajv/organization/23/website\"><img src=\"https://opencollective.com/ajv/organization/23/avatar.svg\"></a>\n<a href=\"https://opencollective.com/ajv/organization/24/website\"><img src=\"https://opencollective.com/ajv/organization/24/avatar.svg\"></a>\n\n## Performance\n\nAjv generates code to turn JSON Schemas into super-fast validation functions that are efficient for v8 optimization.\n\nCurrently Ajv is the fastest and the most standard compliant validator according to these benchmarks:\n\n- [json-schema-benchmark](https://github.com/ebdrup/json-schema-benchmark) - 50% faster than the second place\n- [jsck benchmark](https://github.com/pandastrike/jsck#benchmarks) - 20-190% faster\n- [z-schema benchmark](https://rawgit.com/zaggino/z-schema/master/benchmark/results.html)\n- [themis benchmark](https://cdn.rawgit.com/playlyfe/themis/master/benchmark/results.html)\n\nPerformance of different validators by [json-schema-benchmark](https://github.com/ebdrup/json-schema-benchmark):\n\n[![performance](https://chart.googleapis.com/chart?chxt=x,y&cht=bhs&chco=76A4FB&chls=2.0&chbh=62,4,1&chs=600x416&chxl=-1:|ajv|@exodus/schemasafe|is-my-json-valid|djv|@cfworker/json-schema|jsonschema/=t:100,69.2,51.5,13.1,5.1,1.2)](https://github.com/ebdrup/json-schema-benchmark/blob/master/README.md#performance)\n\n## Features\n\n- Ajv implements JSON Schema [draft-06/07/2019-09/2020-12](http://json-schema.org/) standards (draft-04 is supported in v6):\n  - all validation keywords (see [JSON Schema validation keywords](https://ajv.js.org/json-schema.html))\n  - [OpenAPI](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.3.md) extensions:\n    - NEW: keyword [discriminator](https://ajv.js.org/json-schema.html#discriminator).\n    - keyword [nullable](https://ajv.js.org/json-schema.html#nullable).\n  - full support of remote references (remote schemas have to be added with `addSchema` or compiled to be available)\n  - support of recursive references between schemas\n  - correct string lengths for strings with unicode pairs\n  - JSON Schema [formats](https://ajv.js.org/guide/formats.html) (with [ajv-formats](https://github.com/ajv-validator/ajv-formats) plugin).\n  - [validates schemas against meta-schema](https://ajv.js.org/api.html#api-validateschema)\n- NEW: supports [JSON Type Definition](https://datatracker.ietf.org/doc/rfc8927/):\n  - all keywords (see [JSON Type Definition schema forms](https://ajv.js.org/json-type-definition.html))\n  - meta-schema for JTD schemas\n  - \"union\" keyword and user-defined keywords (can be used inside \"metadata\" member of the schema)\n- supports [browsers](https://ajv.js.org/guide/environments.html#browsers) and Node.js 10.x - current\n- [asynchronous loading](https://ajv.js.org/guide/managing-schemas.html#asynchronous-schema-loading) of referenced schemas during compilation\n- \"All errors\" validation mode with [option allErrors](https://ajv.js.org/options.html#allerrors)\n- [error messages with parameters](https://ajv.js.org/api.html#validation-errors) describing error reasons to allow error message generation\n- i18n error messages support with [ajv-i18n](https://github.com/ajv-validator/ajv-i18n) package\n- [removing-additional-properties](https://ajv.js.org/guide/modifying-data.html#removing-additional-properties)\n- [assigning defaults](https://ajv.js.org/guide/modifying-data.html#assigning-defaults) to missing properties and items\n- [coercing data](https://ajv.js.org/guide/modifying-data.html#coercing-data-types) to the types specified in `type` keywords\n- [user-defined keywords](https://ajv.js.org/guide/user-keywords.html)\n- additional extension keywords with [ajv-keywords](https://github.com/ajv-validator/ajv-keywords) package\n- [\\$data reference](https://ajv.js.org/guide/combining-schemas.html#data-reference) to use values from the validated data as values for the schema keywords\n- [asynchronous validation](https://ajv.js.org/guide/async-validation.html) of user-defined formats and keywords\n\n## Install\n\nTo install version 8:\n\n```\nnpm install ajv\n```\n\n## <a name=\"usage\"></a>Getting started\n\nTry it in the Node.js REPL: https://runkit.com/npm/ajv\n\nIn JavaScript:\n\n```javascript\n// or ESM/TypeScript import\nimport Ajv from \"ajv\"\n// Node.js require:\nconst Ajv = require(\"ajv\")\n\nconst ajv = new Ajv() // options can be passed, e.g. {allErrors: true}\n\nconst schema = {\n  type: \"object\",\n  properties: {\n    foo: {type: \"integer\"},\n    bar: {type: \"string\"},\n  },\n  required: [\"foo\"],\n  additionalProperties: false,\n}\n\nconst data = {\n  foo: 1,\n  bar: \"abc\",\n}\n\nconst validate = ajv.compile(schema)\nconst valid = validate(data)\nif (!valid) console.log(validate.errors)\n```\n\nLearn how to use Ajv and see more examples in the [Guide: getting started](https://ajv.js.org/guide/getting-started.html)\n\n## Changes history\n\nSee [https://github.com/ajv-validator/ajv/releases](https://github.com/ajv-validator/ajv/releases)\n\n**Please note**: [Changes in version 8.0.0](https://github.com/ajv-validator/ajv/releases/tag/v8.0.0)\n\n[Version 7.0.0](https://github.com/ajv-validator/ajv/releases/tag/v7.0.0)\n\n[Version 6.0.0](https://github.com/ajv-validator/ajv/releases/tag/v6.0.0).\n\n## Code of conduct\n\nPlease review and follow the [Code of conduct](./CODE_OF_CONDUCT.md).\n\nPlease report any unacceptable behaviour to ajv.validator@gmail.com - it will be reviewed by the project team.\n\n## Security contact\n\nTo report a security vulnerability, please use the\n[Tidelift security contact](https://tidelift.com/security).\nTidelift will coordinate the fix and disclosure. Please do NOT report security vulnerabilities via GitHub issues.\n\n## Open-source software support\n\nAjv is a part of [Tidelift subscription](https://tidelift.com/subscription/pkg/npm-ajv?utm_source=npm-ajv&utm_medium=referral&utm_campaign=readme) - it provides a centralised support to open-source software users, in addition to the support provided by software maintainers.\n\n## License\n\n[MIT](./LICENSE)\n\"/dist/vocabularies/core/ref.js.map\u0013{\"version\":3,\"file\":\"ref.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../lib/vocabularies/core/ref.ts\"],\"names\":[],\"mappings\":\"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\"}/lib/runtime/parseJson.ts\u0011Zconst rxParseJson = /position\\s(\\d+)$/\n\nexport function parseJson(s: string, pos: number): unknown {\n  let endPos: number | undefined\n  parseJson.message = undefined\n  let matches: RegExpExecArray | null\n  if (pos) s = s.slice(pos)\n  try {\n    parseJson.position = pos + s.length\n    return JSON.parse(s)\n  } catch (e) {\n    matches = rxParseJson.exec((e as Error).message)\n    if (!matches) {\n      parseJson.message = \"unexpected end\"\n      return undefined\n    }\n    endPos = +matches[1]\n    const c = s[endPos]\n    s = s.slice(0, endPos)\n    parseJson.position = pos + endPos\n    try {\n      return JSON.parse(s)\n    } catch (e1) {\n      parseJson.message = `unexpected token ${c}`\n      return undefined\n    }\n  }\n}\n\nparseJson.message = undefined as string | undefined\nparseJson.position = 0 as number\nparseJson.code = 'require(\"ajv/dist/runtime/parseJson\").parseJson'\n\nexport function parseJsonNumber(s: string, pos: number, maxDigits?: number): number | undefined {\n  let numStr = \"\"\n  let c: string\n  parseJsonNumber.message = undefined\n  if (s[pos] === \"-\") {\n    numStr += \"-\"\n    pos++\n  }\n  if (s[pos] === \"0\") {\n    numStr += \"0\"\n    pos++\n  } else {\n    if (!parseDigits(maxDigits)) {\n      errorMessage()\n      return undefined\n    }\n  }\n  if (maxDigits) {\n    parseJsonNumber.position = pos\n    return +numStr\n  }\n  if (s[pos] === \".\") {\n    numStr += \".\"\n    pos++\n    if (!parseDigits()) {\n      errorMessage()\n      return undefined\n    }\n  }\n  if (((c = s[pos]), c === \"e\" || c === \"E\")) {\n    numStr += \"e\"\n    pos++\n    if (((c = s[pos]), c === \"+\" || c === \"-\")) {\n      numStr += c\n      pos++\n    }\n    if (!parseDigits()) {\n      errorMessage()\n      return undefined\n    }\n  }\n  parseJsonNumber.position = pos\n  return +numStr\n\n  function parseDigits(maxLen?: number): boolean {\n    let digit = false\n    while (((c = s[pos]), c >= \"0\" && c <= \"9\" && (maxLen === undefined || maxLen-- > 0))) {\n      digit = true\n      numStr += c\n      pos++\n    }\n    return digit\n  }\n\n  function errorMessage(): void {\n    parseJsonNumber.position = pos\n    parseJsonNumber.message = pos < s.length ? `unexpected token ${s[pos]}` : \"unexpected end\"\n  }\n}\n\nparseJsonNumber.message = undefined as string | undefined\nparseJsonNumber.position = 0 as number\nparseJsonNumber.code = 'require(\"ajv/dist/runtime/parseJson\").parseJsonNumber'\n\nconst escapedChars: {[X in string]?: string} = {\n  b: \"\\b\",\n  f: \"\\f\",\n  n: \"\\n\",\n  r: \"\\r\",\n  t: \"\\t\",\n  '\"': '\"',\n  \"/\": \"/\",\n  \"\\\\\": \"\\\\\",\n}\n\nconst CODE_A: number = \"a\".charCodeAt(0)\nconst CODE_0: number = \"0\".charCodeAt(0)\n\nexport function parseJsonString(s: string, pos: number): string | undefined {\n  let str = \"\"\n  let c: string | undefined\n  parseJsonString.message = undefined\n  // eslint-disable-next-line no-constant-condition, @typescript-eslint/no-unnecessary-condition\n  while (true) {\n    c = s[pos++]\n    if (c === '\"') break\n    if (c === \"\\\\\") {\n      c = s[pos]\n      if (c in escapedChars) {\n        str += escapedChars[c]\n        pos++\n      } else if (c === \"u\") {\n        pos++\n        let count = 4\n        let code = 0\n        while (count--) {\n          code <<= 4\n          c = s[pos]\n          if (c === undefined) {\n            errorMessage(\"unexpected end\")\n            return undefined\n          }\n          c = c.toLowerCase()\n          if (c >= \"a\" && c <= \"f\") {\n            code += c.charCodeAt(0) - CODE_A + 10\n          } else if (c >= \"0\" && c <= \"9\") {\n            code += c.charCodeAt(0) - CODE_0\n          } else {\n            errorMessage(`unexpected token ${c}`)\n            return undefined\n          }\n          pos++\n        }\n        str += String.fromCharCode(code)\n      } else {\n        errorMessage(`unexpected token ${c}`)\n        return undefined\n      }\n      // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n    } else if (c === undefined) {\n      errorMessage(\"unexpected end\")\n      return undefined\n    } else {\n      if (c.charCodeAt(0) >= 0x20) {\n        str += c\n      } else {\n        errorMessage(`unexpected token ${c}`)\n        return undefined\n      }\n    }\n  }\n  parseJsonString.position = pos\n  return str\n\n  function errorMessage(msg: string): void {\n    parseJsonString.position = pos\n    parseJsonString.message = msg\n  }\n}\n\nparseJsonString.message = undefined as string | undefined\nparseJsonString.position = 0 as number\nparseJsonString.code = 'require(\"ajv/dist/runtime/parseJson\").parseJsonString'\n/lib/vocabularies/core/id.tsimport type {CodeKeywordDefinition} from \"../../types\"\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"id\",\n  code() {\n    throw new Error('NOT SUPPORTED: keyword \"id\", use \"$id\" for schema ID')\n  },\n}\n\nexport default def\n%/dist/vocabularies/validation/enum.js\u0007m\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst equal_1 = require(\"../../runtime/equal\");\nconst error = {\n    message: \"must be equal to one of the allowed values\",\n    params: ({ schemaCode }) => (0, codegen_1._) `{allowedValues: ${schemaCode}}`,\n};\nconst def = {\n    keyword: \"enum\",\n    schemaType: \"array\",\n    $data: true,\n    error,\n    code(cxt) {\n        const { gen, data, $data, schema, schemaCode, it } = cxt;\n        if (!$data && schema.length === 0)\n            throw new Error(\"enum must have non-empty array\");\n        const useLoop = schema.length >= it.opts.loopEnum;\n        let eql;\n        const getEql = () => (eql !== null && eql !== void 0 ? eql : (eql = (0, util_1.useFunc)(gen, equal_1.default)));\n        let valid;\n        if (useLoop || $data) {\n            valid = gen.let(\"valid\");\n            cxt.block$data(valid, loopEnum);\n        }\n        else {\n            /* istanbul ignore if */\n            if (!Array.isArray(schema))\n                throw new Error(\"ajv implementation error\");\n            const vSchema = gen.const(\"vSchema\", schemaCode);\n            valid = (0, codegen_1.or)(...schema.map((_x, i) => equalCode(vSchema, i)));\n        }\n        cxt.pass(valid);\n        function loopEnum() {\n            gen.assign(valid, false);\n            gen.forOf(\"v\", schemaCode, (v) => gen.if((0, codegen_1._) `${getEql()}(${data}, ${v})`, () => gen.assign(valid, true).break()));\n        }\n        function equalCode(vSchema, i) {\n            const sch = schema[i];\n            return typeof sch === \"object\" && sch !== null\n                ? (0, codegen_1._) `${getEql()}(${data}, ${vSchema}[${i}])`\n                : (0, codegen_1._) `${data} === ${sch}`;\n        }\n    },\n};\nexports.default = def;\n//# sourceMappingURL=enum.js.map%/lib/vocabularies/validation/index.ts\u0004import type {ErrorObject, Vocabulary} from \"../../types\"\nimport limitNumber, {LimitNumberError} from \"./limitNumber\"\nimport multipleOf, {MultipleOfError} from \"./multipleOf\"\nimport limitLength from \"./limitLength\"\nimport pattern, {PatternError} from \"./pattern\"\nimport limitProperties from \"./limitProperties\"\nimport required, {RequiredError} from \"./required\"\nimport limitItems from \"./limitItems\"\nimport uniqueItems, {UniqueItemsError} from \"./uniqueItems\"\nimport constKeyword, {ConstError} from \"./const\"\nimport enumKeyword, {EnumError} from \"./enum\"\n\nconst validation: Vocabulary = [\n  // number\n  limitNumber,\n  multipleOf,\n  // string\n  limitLength,\n  pattern,\n  // object\n  limitProperties,\n  required,\n  // array\n  limitItems,\n  uniqueItems,\n  // any\n  {keyword: \"type\", schemaType: [\"string\", \"array\"]},\n  {keyword: \"nullable\", schemaType: \"boolean\"},\n  constKeyword,\n  enumKeyword,\n]\n\nexport default validation\n\ntype LimitError = ErrorObject<\n  \"maxItems\" | \"minItems\" | \"minProperties\" | \"maxProperties\" | \"minLength\" | \"maxLength\",\n  {limit: number},\n  number | {$data: string}\n>\n\nexport type ValidationKeywordError =\n  | LimitError\n  | LimitNumberError\n  | MultipleOfError\n  | PatternError\n  | RequiredError\n  | UniqueItemsError\n  | ConstError\n  | EnumError\n)/dist/vocabularies/validation/enum.js.map\u0007{\"version\":3,\"file\":\"enum.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../lib/vocabularies/validation/enum.ts\"],\"names\":[],\"mappings\":\";;AAEA,mDAAuD;AACvD,6CAA0C;AAC1C,+CAAuC;AAIvC,MAAM,KAAK,GAA2B;IACpC,OAAO,EAAE,4CAA4C;IACrD,MAAM,EAAE,CAAC,EAAC,UAAU,EAAC,EAAE,EAAE,CAAC,IAAA,WAAC,EAAA,mBAAmB,UAAU,GAAG;CAC5D,CAAA;AAED,MAAM,GAAG,GAA0B;IACjC,OAAO,EAAE,MAAM;IACf,UAAU,EAAE,OAAO;IACnB,KAAK,EAAE,IAAI;IACX,KAAK;IACL,IAAI,CAAC,GAAe;QAClB,MAAM,EAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,EAAC,GAAG,GAAG,CAAA;QACtD,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAA;QACpF,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAA;QACjD,IAAI,GAAqB,CAAA;QACzB,MAAM,MAAM,GAAG,GAAS,EAAE,CAAC,CAAC,GAAG,aAAH,GAAG,cAAH,GAAG,IAAH,GAAG,GAAK,IAAA,cAAO,EAAC,GAAG,EAAE,eAAK,CAAC,EAAC,CAAA;QAExD,IAAI,KAAW,CAAA;QACf,IAAI,OAAO,IAAI,KAAK,EAAE;YACpB,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;YACxB,GAAG,CAAC,UAAU,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;SAChC;aAAM;YACL,wBAAwB;YACxB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAA;YACvE,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,SAAS,EAAE,UAAU,CAAC,CAAA;YAChD,KAAK,GAAG,IAAA,YAAE,EAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,EAAW,EAAE,CAAS,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;SAC7E;QACD,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAEf,SAAS,QAAQ;YACf,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;YACxB,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,UAAkB,EAAE,CAAC,CAAC,EAAE,EAAE,CACvC,GAAG,CAAC,EAAE,CAAC,IAAA,WAAC,EAAA,GAAG,MAAM,EAAE,IAAI,IAAI,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,CAC7E,CAAA;QACH,CAAC;QAED,SAAS,SAAS,CAAC,OAAa,EAAE,CAAS;YACzC,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;YACrB,OAAO,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI;gBAC5C,CAAC,CAAC,IAAA,WAAC,EAAA,GAAG,MAAM,EAAE,IAAI,IAAI,KAAK,OAAO,IAAI,CAAC,IAAI;gBAC3C,CAAC,CAAC,IAAA,WAAC,EAAA,GAAG,IAAI,QAAQ,GAAG,EAAE,CAAA;QAC3B,CAAC;IACH,CAAC;CACF,CAAA;AAED,kBAAe,GAAG,CAAA\"}/dist/2020.js.map\u0005{\"version\":3,\"file\":\"2020.js\",\"sourceRoot\":\"\",\"sources\":[\"../lib/2020.ts\"],\"names\":[],\"mappings\":\";;;AACA,iCAAuC;AAEvC,wDAA4D;AAC5D,gEAAwD;AACxD,oEAA0D;AAE1D,MAAM,cAAc,GAAG,8CAA8C,CAAA;AAErE,MAAM,OAAQ,SAAQ,cAAO;IAC3B,YAAY,OAAgB,EAAE;QAC5B,KAAK,CAAC;YACJ,GAAG,IAAI;YACP,UAAU,EAAE,IAAI;YAChB,IAAI,EAAE,IAAI;YACV,WAAW,EAAE,IAAI;SAClB,CAAC,CAAA;IACJ,CAAC;IAED,gBAAgB;QACd,KAAK,CAAC,gBAAgB,EAAE,CAAA;QACxB,mBAAqB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAA;QAC3D,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa;YAAE,IAAI,CAAC,UAAU,CAAC,uBAAa,CAAC,CAAA;IAC7D,CAAC;IAED,qBAAqB;QACnB,KAAK,CAAC,qBAAqB,EAAE,CAAA;QAC7B,MAAM,EAAC,KAAK,EAAE,IAAI,EAAC,GAAG,IAAI,CAAC,IAAI,CAAA;QAC/B,IAAI,CAAC,IAAI;YAAE,OAAM;QACjB,6BAAiB,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;QACnC,IAAI,CAAC,IAAI,CAAC,+BAA+B,CAAC,GAAG,cAAc,CAAA;IAC7D,CAAC;IAED,WAAW;QACT,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW;YAC3B,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAA;IACzF,CAAC;CACF;AAED,MAAM,CAAC,OAAO,GAAG,OAAO,GAAG,OAAO,CAAA;AAClC,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,YAAY,EAAE,EAAC,KAAK,EAAE,IAAI,EAAC,CAAC,CAAA;AAE3D,kBAAe,OAAO,CAAA;AAyBtB,+CAA6C;AAArC,sGAAA,UAAU,OAAA;AAIlB,6CAA6F;AAArF,4FAAA,CAAC,OAAA;AAAE,8FAAA,GAAG,OAAA;AAAE,oGAAA,SAAS,OAAA;AAAE,8FAAA,GAAG,OAAA;AAAE,+FAAA,IAAI,OAAA;AAAQ,kGAAA,OAAO,OAAA;AACnD,+DAAqE;AAA7D,mHAAA,OAAO,OAAmB;AAClC,iDAA8D;AAAtD,4GAAA,OAAO,OAAmB\"}//lib/vocabularies/validation/limitProperties.ts\u0003Simport type {CodeKeywordDefinition, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str, operators} from \"../../compile/codegen\"\n\nconst error: KeywordErrorDefinition = {\n  message({keyword, schemaCode}) {\n    const comp = keyword === \"maxProperties\" ? \"more\" : \"fewer\"\n    return str`must NOT have ${comp} than ${schemaCode} properties`\n  },\n  params: ({schemaCode}) => _`{limit: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: [\"maxProperties\", \"minProperties\"],\n  type: \"object\",\n  schemaType: \"number\",\n  $data: true,\n  error,\n  code(cxt: KeywordCxt) {\n    const {keyword, data, schemaCode} = cxt\n    const op = keyword === \"maxProperties\" ? operators.GT : operators.LT\n    cxt.fail$data(_`Object.keys(${data}).length ${op} ${schemaCode}`)\n  },\n}\n\nexport default def\n /dist/compile/codegen/scope.d.ts\t]import { Code, Name } from \"./code\";\ninterface NameGroup {\n    prefix: string;\n    index: number;\n}\nexport interface NameValue {\n    ref: ValueReference;\n    key?: unknown;\n    code?: Code;\n}\nexport type ValueReference = unknown;\ninterface ScopeOptions {\n    prefixes?: Set<string>;\n    parent?: Scope;\n}\ninterface ValueScopeOptions extends ScopeOptions {\n    scope: ScopeStore;\n    es5?: boolean;\n    lines?: boolean;\n}\nexport type ScopeStore = Record<string, ValueReference[] | undefined>;\ntype ScopeValues = {\n    [Prefix in string]?: Map<unknown, ValueScopeName>;\n};\nexport type ScopeValueSets = {\n    [Prefix in string]?: Set<ValueScopeName>;\n};\nexport declare enum UsedValueState {\n    Started = 0,\n    Completed = 1\n}\nexport type UsedScopeValues = {\n    [Prefix in string]?: Map<ValueScopeName, UsedValueState | undefined>;\n};\nexport declare const varKinds: {\n    const: Name;\n    let: Name;\n    var: Name;\n};\nexport declare class Scope {\n    protected readonly _names: {\n        [Prefix in string]?: NameGroup;\n    };\n    protected readonly _prefixes?: Set<string>;\n    protected readonly _parent?: Scope;\n    constructor({ prefixes, parent }?: ScopeOptions);\n    toName(nameOrPrefix: Name | string): Name;\n    name(prefix: string): Name;\n    protected _newName(prefix: string): string;\n    private _nameGroup;\n}\ninterface ScopePath {\n    property: string;\n    itemIndex: number;\n}\nexport declare class ValueScopeName extends Name {\n    readonly prefix: string;\n    value?: NameValue;\n    scopePath?: Code;\n    constructor(prefix: string, nameStr: string);\n    setValue(value: NameValue, { property, itemIndex }: ScopePath): void;\n}\ninterface VSOptions extends ValueScopeOptions {\n    _n: Code;\n}\nexport declare class ValueScope extends Scope {\n    protected readonly _values: ScopeValues;\n    protected readonly _scope: ScopeStore;\n    readonly opts: VSOptions;\n    constructor(opts: ValueScopeOptions);\n    get(): ScopeStore;\n    name(prefix: string): ValueScopeName;\n    value(nameOrPrefix: ValueScopeName | string, value: NameValue): ValueScopeName;\n    getValue(prefix: string, keyOrRef: unknown): ValueScopeName | undefined;\n    scopeRefs(scopeName: Name, values?: ScopeValues | ScopeValueSets): Code;\n    scopeCode(values?: ScopeValues | ScopeValueSets, usedValues?: UsedScopeValues, getCode?: (n: ValueScopeName) => Code | undefined): Code;\n    private _reduceValues;\n}\nexport {};\n+/lib/vocabularies/jtd/optionalProperties.ts\u0001import type {CodeKeywordDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {validateProperties, error} from \"./properties\"\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"optionalProperties\",\n  schemaType: \"object\",\n  error,\n  code(cxt: KeywordCxt) {\n    if (cxt.parentSchema.properties) return\n    validateProperties(cxt)\n  },\n}\n\nexport default def\n(/dist/vocabularies/applicator/not.js.map\u00035{\"version\":3,\"file\":\"not.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../lib/vocabularies/applicator/not.ts\"],\"names\":[],\"mappings\":\";;AAEA,6CAAoD;AAIpD,MAAM,GAAG,GAA0B;IACjC,OAAO,EAAE,KAAK;IACd,UAAU,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC;IACjC,WAAW,EAAE,IAAI;IACjB,IAAI,CAAC,GAAe;QAClB,MAAM,EAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAC,GAAG,GAAG,CAAA;QAC7B,IAAI,IAAA,wBAAiB,EAAC,EAAE,EAAE,MAAM,CAAC,EAAE;YACjC,GAAG,CAAC,IAAI,EAAE,CAAA;YACV,OAAM;SACP;QAED,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAC/B,GAAG,CAAC,SAAS,CACX;YACE,OAAO,EAAE,KAAK;YACd,aAAa,EAAE,IAAI;YACnB,YAAY,EAAE,KAAK;YACnB,SAAS,EAAE,KAAK;SACjB,EACD,KAAK,CACN,CAAA;QAED,GAAG,CAAC,UAAU,CACZ,KAAK,EACL,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,EACjB,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,CAClB,CAAA;IACH,CAAC;IACD,KAAK,EAAE,EAAC,OAAO,EAAE,mBAAmB,EAAC;CACtC,CAAA;AAED,kBAAe,GAAG,CAAA\"}(/dist/vocabularies/applicator/items.d.ts\u0001%import type { CodeKeywordDefinition, AnySchema } from \"../../types\";\nimport type { KeywordCxt } from \"../../compile/validate\";\ndeclare const def: CodeKeywordDefinition;\nexport declare function validateTuple(cxt: KeywordCxt, extraItems: string, schArr?: AnySchema[]): void;\nexport default def;\n/lib/vocabularies/jtd/union.ts\u0001$import type {CodeKeywordDefinition} from \"../../types\"\nimport {validateUnion} from \"../code\"\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"union\",\n  schemaType: \"array\",\n  trackErrors: true,\n  code: validateUnion,\n  error: {message: \"must match a schema in union\"},\n}\n\nexport default def\n%/lib/vocabularies/applicator/allOf.ts\u0002import type {CodeKeywordDefinition, AnySchema} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {alwaysValidSchema} from \"../../compile/util\"\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"allOf\",\n  schemaType: \"array\",\n  code(cxt: KeywordCxt) {\n    const {gen, schema, it} = cxt\n    /* istanbul ignore if */\n    if (!Array.isArray(schema)) throw new Error(\"ajv implementation error\")\n    const valid = gen.name(\"valid\")\n    schema.forEach((sch: AnySchema, i: number) => {\n      if (alwaysValidSchema(it, sch)) return\n      const schCxt = cxt.subschema({keyword: \"allOf\", schemaProp: i}, valid)\n      cxt.ok(valid)\n      cxt.mergeEvaluated(schCxt)\n    })\n  },\n}\n\nexport default def\n#/dist/vocabularies/jtd/index.js.map\u0002\u0012{\"version\":3,\"file\":\"index.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../lib/vocabularies/jtd/index.ts\"],\"names\":[],\"mappings\":\";;AACA,+BAA8B;AAC9B,iCAAgD;AAChD,iCAAgD;AAChD,yCAAqD;AACrD,6CAA2D;AAC3D,6DAAqD;AACrD,mDAAoE;AACpE,qCAA+C;AAC/C,mCAA2B;AAC3B,yCAAiC;AAEjC,MAAM,aAAa,GAAe;IAChC,aAAa;IACb,aAAU;IACV,cAAW;IACX,cAAW;IACX,kBAAQ;IACR,oBAAU;IACV,4BAAkB;IAClB,uBAAa;IACb,gBAAM;IACN,eAAK;IACL,kBAAQ;IACR,EAAC,OAAO,EAAE,sBAAsB,EAAE,UAAU,EAAE,SAAS,EAAC;IACxD,EAAC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAC;CAC7C,CAAA;AAED,kBAAe,aAAa,CAAA\"}+/dist/vocabularies/applicator/thenElse.d.tsximport type { CodeKeywordDefinition } from \"../../types\";\ndeclare const def: CodeKeywordDefinition;\nexport default def;\n3/dist/refs/json-schema-2020-12/meta/applicator.json\u0005{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"$id\": \"https://json-schema.org/draft/2020-12/meta/applicator\",\n  \"$vocabulary\": {\n    \"https://json-schema.org/draft/2020-12/vocab/applicator\": true\n  },\n  \"$dynamicAnchor\": \"meta\",\n\n  \"title\": \"Applicator vocabulary meta-schema\",\n  \"type\": [\"object\", \"boolean\"],\n  \"properties\": {\n    \"prefixItems\": {\"$ref\": \"#/$defs/schemaArray\"},\n    \"items\": {\"$dynamicRef\": \"#meta\"},\n    \"contains\": {\"$dynamicRef\": \"#meta\"},\n    \"additionalProperties\": {\"$dynamicRef\": \"#meta\"},\n    \"properties\": {\n      \"type\": \"object\",\n      \"additionalProperties\": {\"$dynamicRef\": \"#meta\"},\n      \"default\": {}\n    },\n    \"patternProperties\": {\n      \"type\": \"object\",\n      \"additionalProperties\": {\"$dynamicRef\": \"#meta\"},\n      \"propertyNames\": {\"format\": \"regex\"},\n      \"default\": {}\n    },\n    \"dependentSchemas\": {\n      \"type\": \"object\",\n      \"additionalProperties\": {\"$dynamicRef\": \"#meta\"},\n      \"default\": {}\n    },\n    \"propertyNames\": {\"$dynamicRef\": \"#meta\"},\n    \"if\": {\"$dynamicRef\": \"#meta\"},\n    \"then\": {\"$dynamicRef\": \"#meta\"},\n    \"else\": {\"$dynamicRef\": \"#meta\"},\n    \"allOf\": {\"$ref\": \"#/$defs/schemaArray\"},\n    \"anyOf\": {\"$ref\": \"#/$defs/schemaArray\"},\n    \"oneOf\": {\"$ref\": \"#/$defs/schemaArray\"},\n    \"not\": {\"$dynamicRef\": \"#meta\"}\n  },\n  \"$defs\": {\n    \"schemaArray\": {\n      \"type\": \"array\",\n      \"minItems\": 1,\n      \"items\": {\"$dynamicRef\": \"#meta\"}\n    }\n  }\n}\n9/lib/refs/json-schema-2020-12/meta/format-annotation.json\u0001{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"$id\": \"https://json-schema.org/draft/2020-12/meta/format-annotation\",\n  \"$vocabulary\": {\n    \"https://json-schema.org/draft/2020-12/vocab/format-annotation\": true\n  },\n  \"$dynamicAnchor\": \"meta\",\n\n  \"title\": \"Format vocabulary meta-schema for annotation results\",\n  \"type\": [\"object\", \"boolean\"],\n  \"properties\": {\n    \"format\": {\"type\": \"string\"}\n  }\n}\n /lib/compile/validate/keyword.ts\u0014import type {KeywordCxt} from \".\"\nimport type {\n  AnySchema,\n  SchemaValidateFunction,\n  AnyValidateFunction,\n  AddedKeywordDefinition,\n  MacroKeywordDefinition,\n  FuncKeywordDefinition,\n} from \"../../types\"\nimport type {SchemaObjCxt} from \"..\"\nimport {_, nil, not, stringify, Code, Name, CodeGen} from \"../codegen\"\nimport N from \"../names\"\nimport type {JSONType} from \"../rules\"\nimport {callValidateCode} from \"../../vocabularies/code\"\nimport {extendErrors} from \"../errors\"\n\ntype KeywordCompilationResult = AnySchema | SchemaValidateFunction | AnyValidateFunction\n\nexport function macroKeywordCode(cxt: KeywordCxt, def: MacroKeywordDefinition): void {\n  const {gen, keyword, schema, parentSchema, it} = cxt\n  const macroSchema = def.macro.call(it.self, schema, parentSchema, it)\n  const schemaRef = useKeyword(gen, keyword, macroSchema)\n  if (it.opts.validateSchema !== false) it.self.validateSchema(macroSchema, true)\n\n  const valid = gen.name(\"valid\")\n  cxt.subschema(\n    {\n      schema: macroSchema,\n      schemaPath: nil,\n      errSchemaPath: `${it.errSchemaPath}/${keyword}`,\n      topSchemaRef: schemaRef,\n      compositeRule: true,\n    },\n    valid\n  )\n  cxt.pass(valid, () => cxt.error(true))\n}\n\nexport function funcKeywordCode(cxt: KeywordCxt, def: FuncKeywordDefinition): void {\n  const {gen, keyword, schema, parentSchema, $data, it} = cxt\n  checkAsyncKeyword(it, def)\n  const validate =\n    !$data && def.compile ? def.compile.call(it.self, schema, parentSchema, it) : def.validate\n  const validateRef = useKeyword(gen, keyword, validate)\n  const valid = gen.let(\"valid\")\n  cxt.block$data(valid, validateKeyword)\n  cxt.ok(def.valid ?? valid)\n\n  function validateKeyword(): void {\n    if (def.errors === false) {\n      assignValid()\n      if (def.modifying) modifyData(cxt)\n      reportErrs(() => cxt.error())\n    } else {\n      const ruleErrs = def.async ? validateAsync() : validateSync()\n      if (def.modifying) modifyData(cxt)\n      reportErrs(() => addErrs(cxt, ruleErrs))\n    }\n  }\n\n  function validateAsync(): Name {\n    const ruleErrs = gen.let(\"ruleErrs\", null)\n    gen.try(\n      () => assignValid(_`await `),\n      (e) =>\n        gen.assign(valid, false).if(\n          _`${e} instanceof ${it.ValidationError as Name}`,\n          () => gen.assign(ruleErrs, _`${e}.errors`),\n          () => gen.throw(e)\n        )\n    )\n    return ruleErrs\n  }\n\n  function validateSync(): Code {\n    const validateErrs = _`${validateRef}.errors`\n    gen.assign(validateErrs, null)\n    assignValid(nil)\n    return validateErrs\n  }\n\n  function assignValid(_await: Code = def.async ? _`await ` : nil): void {\n    const passCxt = it.opts.passContext ? N.this : N.self\n    const passSchema = !((\"compile\" in def && !$data) || def.schema === false)\n    gen.assign(\n      valid,\n      _`${_await}${callValidateCode(cxt, validateRef, passCxt, passSchema)}`,\n      def.modifying\n    )\n  }\n\n  function reportErrs(errors: () => void): void {\n    gen.if(not(def.valid ?? valid), errors)\n  }\n}\n\nfunction modifyData(cxt: KeywordCxt): void {\n  const {gen, data, it} = cxt\n  gen.if(it.parentData, () => gen.assign(data, _`${it.parentData}[${it.parentDataProperty}]`))\n}\n\nfunction addErrs(cxt: KeywordCxt, errs: Code): void {\n  const {gen} = cxt\n  gen.if(\n    _`Array.isArray(${errs})`,\n    () => {\n      gen\n        .assign(N.vErrors, _`${N.vErrors} === null ? ${errs} : ${N.vErrors}.concat(${errs})`)\n        .assign(N.errors, _`${N.vErrors}.length`)\n      extendErrors(cxt)\n    },\n    () => cxt.error()\n  )\n}\n\nfunction checkAsyncKeyword({schemaEnv}: SchemaObjCxt, def: FuncKeywordDefinition): void {\n  if (def.async && !schemaEnv.$async) throw new Error(\"async keyword in sync schema\")\n}\n\nfunction useKeyword(gen: CodeGen, keyword: string, result?: KeywordCompilationResult): Name {\n  if (result === undefined) throw new Error(`keyword \"${keyword}\" failed to compile`)\n  return gen.scopeValue(\n    \"keyword\",\n    typeof result == \"function\" ? {ref: result} : {ref: result, code: stringify(result)}\n  )\n}\n\nexport function validSchemaType(\n  schema: unknown,\n  schemaType: JSONType[],\n  allowUndefined = false\n): boolean {\n  // TODO add tests\n  return (\n    !schemaType.length ||\n    schemaType.some((st) =>\n      st === \"array\"\n        ? Array.isArray(schema)\n        : st === \"object\"\n        ? schema && typeof schema == \"object\" && !Array.isArray(schema)\n        : typeof schema == st || (allowUndefined && typeof schema == \"undefined\")\n    )\n  )\n}\n\nexport function validateKeywordUsage(\n  {schema, opts, self, errSchemaPath}: SchemaObjCxt,\n  def: AddedKeywordDefinition,\n  keyword: string\n): void {\n  /* istanbul ignore if */\n  if (Array.isArray(def.keyword) ? !def.keyword.includes(keyword) : def.keyword !== keyword) {\n    throw new Error(\"ajv implementation error\")\n  }\n\n  const deps = def.dependencies\n  if (deps?.some((kwd) => !Object.prototype.hasOwnProperty.call(schema, kwd))) {\n    throw new Error(`parent schema must have dependencies of ${keyword}: ${deps.join(\",\")}`)\n  }\n\n  if (def.validateSchema) {\n    const valid = def.validateSchema(schema[keyword])\n    if (!valid) {\n      const msg =\n        `keyword \"${keyword}\" value is invalid at path \"${errSchemaPath}\": ` +\n        self.errorsText(def.validateSchema.errors)\n      if (opts.validateSchema === \"log\") self.logger.error(msg)\n      else throw new Error(msg)\n    }\n  }\n}\n&/lib/refs/json-schema-2020-12/index.ts\u0003import type Ajv from \"../../core\"\nimport type {AnySchemaObject} from \"../../types\"\nimport * as metaSchema from \"./schema.json\"\nimport * as applicator from \"./meta/applicator.json\"\nimport * as unevaluated from \"./meta/unevaluated.json\"\nimport * as content from \"./meta/content.json\"\nimport * as core from \"./meta/core.json\"\nimport * as format from \"./meta/format-annotation.json\"\nimport * as metadata from \"./meta/meta-data.json\"\nimport * as validation from \"./meta/validation.json\"\n\nconst META_SUPPORT_DATA = [\"/properties\"]\n\nexport default function addMetaSchema2020(this: Ajv, $data?: boolean): Ajv {\n  ;[\n    metaSchema,\n    applicator,\n    unevaluated,\n    content,\n    core,\n    with$data(this, format),\n    metadata,\n    with$data(this, validation),\n  ].forEach((sch) => this.addMetaSchema(sch, undefined, false))\n  return this\n\n  function with$data(ajv: Ajv, sch: AnySchemaObject): AnySchemaObject {\n    return $data ? ajv.$dataMetaSchema(sch, META_SUPPORT_DATA) : sch\n  }\n}\n/dist/vocabularies/draft2020.js\u0002\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst core_1 = require(\"./core\");\nconst validation_1 = require(\"./validation\");\nconst applicator_1 = require(\"./applicator\");\nconst dynamic_1 = require(\"./dynamic\");\nconst next_1 = require(\"./next\");\nconst unevaluated_1 = require(\"./unevaluated\");\nconst format_1 = require(\"./format\");\nconst metadata_1 = require(\"./metadata\");\nconst draft2020Vocabularies = [\n    dynamic_1.default,\n    core_1.default,\n    validation_1.default,\n    (0, applicator_1.default)(true),\n    format_1.default,\n    metadata_1.metadataVocabulary,\n    metadata_1.contentVocabulary,\n    next_1.default,\n    unevaluated_1.default,\n];\nexports.default = draft2020Vocabularies;\n//# sourceMappingURL=draft2020.js.map/dist/vocabularies/code.js\u0018H\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.validateUnion = exports.validateArray = exports.usePattern = exports.callValidateCode = exports.schemaProperties = exports.allSchemaProperties = exports.noPropertyInData = exports.propertyInData = exports.isOwnProperty = exports.hasPropFunc = exports.reportMissingProp = exports.checkMissingProp = exports.checkReportMissingProp = void 0;\nconst codegen_1 = require(\"../compile/codegen\");\nconst util_1 = require(\"../compile/util\");\nconst names_1 = require(\"../compile/names\");\nconst util_2 = require(\"../compile/util\");\nfunction checkReportMissingProp(cxt, prop) {\n    const { gen, data, it } = cxt;\n    gen.if(noPropertyInData(gen, data, prop, it.opts.ownProperties), () => {\n        cxt.setParams({ missingProperty: (0, codegen_1._) `${prop}` }, true);\n        cxt.error();\n    });\n}\nexports.checkReportMissingProp = checkReportMissingProp;\nfunction checkMissingProp({ gen, data, it: { opts } }, properties, missing) {\n    return (0, codegen_1.or)(...properties.map((prop) => (0, codegen_1.and)(noPropertyInData(gen, data, prop, opts.ownProperties), (0, codegen_1._) `${missing} = ${prop}`)));\n}\nexports.checkMissingProp = checkMissingProp;\nfunction reportMissingProp(cxt, missing) {\n    cxt.setParams({ missingProperty: missing }, true);\n    cxt.error();\n}\nexports.reportMissingProp = reportMissingProp;\nfunction hasPropFunc(gen) {\n    return gen.scopeValue(\"func\", {\n        // eslint-disable-next-line @typescript-eslint/unbound-method\n        ref: Object.prototype.hasOwnProperty,\n        code: (0, codegen_1._) `Object.prototype.hasOwnProperty`,\n    });\n}\nexports.hasPropFunc = hasPropFunc;\nfunction isOwnProperty(gen, data, property) {\n    return (0, codegen_1._) `${hasPropFunc(gen)}.call(${data}, ${property})`;\n}\nexports.isOwnProperty = isOwnProperty;\nfunction propertyInData(gen, data, property, ownProperties) {\n    const cond = (0, codegen_1._) `${data}${(0, codegen_1.getProperty)(property)} !== undefined`;\n    return ownProperties ? (0, codegen_1._) `${cond} && ${isOwnProperty(gen, data, property)}` : cond;\n}\nexports.propertyInData = propertyInData;\nfunction noPropertyInData(gen, data, property, ownProperties) {\n    const cond = (0, codegen_1._) `${data}${(0, codegen_1.getProperty)(property)} === undefined`;\n    return ownProperties ? (0, codegen_1.or)(cond, (0, codegen_1.not)(isOwnProperty(gen, data, property))) : cond;\n}\nexports.noPropertyInData = noPropertyInData;\nfunction allSchemaProperties(schemaMap) {\n    return schemaMap ? Object.keys(schemaMap).filter((p) => p !== \"__proto__\") : [];\n}\nexports.allSchemaProperties = allSchemaProperties;\nfunction schemaProperties(it, schemaMap) {\n    return allSchemaProperties(schemaMap).filter((p) => !(0, util_1.alwaysValidSchema)(it, schemaMap[p]));\n}\nexports.schemaProperties = schemaProperties;\nfunction callValidateCode({ schemaCode, data, it: { gen, topSchemaRef, schemaPath, errorPath }, it }, func, context, passSchema) {\n    const dataAndSchema = passSchema ? (0, codegen_1._) `${schemaCode}, ${data}, ${topSchemaRef}${schemaPath}` : data;\n    const valCxt = [\n        [names_1.default.instancePath, (0, codegen_1.strConcat)(names_1.default.instancePath, errorPath)],\n        [names_1.default.parentData, it.parentData],\n        [names_1.default.parentDataProperty, it.parentDataProperty],\n        [names_1.default.rootData, names_1.default.rootData],\n    ];\n    if (it.opts.dynamicRef)\n        valCxt.push([names_1.default.dynamicAnchors, names_1.default.dynamicAnchors]);\n    const args = (0, codegen_1._) `${dataAndSchema}, ${gen.object(...valCxt)}`;\n    return context !== codegen_1.nil ? (0, codegen_1._) `${func}.call(${context}, ${args})` : (0, codegen_1._) `${func}(${args})`;\n}\nexports.callValidateCode = callValidateCode;\nconst newRegExp = (0, codegen_1._) `new RegExp`;\nfunction usePattern({ gen, it: { opts } }, pattern) {\n    const u = opts.unicodeRegExp ? \"u\" : \"\";\n    const { regExp } = opts.code;\n    const rx = regExp(pattern, u);\n    return gen.scopeValue(\"pattern\", {\n        key: rx.toString(),\n        ref: rx,\n        code: (0, codegen_1._) `${regExp.code === \"new RegExp\" ? newRegExp : (0, util_2.useFunc)(gen, regExp)}(${pattern}, ${u})`,\n    });\n}\nexports.usePattern = usePattern;\nfunction validateArray(cxt) {\n    const { gen, data, keyword, it } = cxt;\n    const valid = gen.name(\"valid\");\n    if (it.allErrors) {\n        const validArr = gen.let(\"valid\", true);\n        validateItems(() => gen.assign(validArr, false));\n        return validArr;\n    }\n    gen.var(valid, true);\n    validateItems(() => gen.break());\n    return valid;\n    function validateItems(notValid) {\n        const len = gen.const(\"len\", (0, codegen_1._) `${data}.length`);\n        gen.forRange(\"i\", 0, len, (i) => {\n            cxt.subschema({\n                keyword,\n                dataProp: i,\n                dataPropType: util_1.Type.Num,\n            }, valid);\n            gen.if((0, codegen_1.not)(valid), notValid);\n        });\n    }\n}\nexports.validateArray = validateArray;\nfunction validateUnion(cxt) {\n    const { gen, schema, keyword, it } = cxt;\n    /* istanbul ignore if */\n    if (!Array.isArray(schema))\n        throw new Error(\"ajv implementation error\");\n    const alwaysValid = schema.some((sch) => (0, util_1.alwaysValidSchema)(it, sch));\n    if (alwaysValid && !it.opts.unevaluated)\n        return;\n    const valid = gen.let(\"valid\", false);\n    const schValid = gen.name(\"_valid\");\n    gen.block(() => schema.forEach((_sch, i) => {\n        const schCxt = cxt.subschema({\n            keyword,\n            schemaProp: i,\n            compositeRule: true,\n        }, schValid);\n        gen.assign(valid, (0, codegen_1._) `${valid} || ${schValid}`);\n        const merged = cxt.mergeValidEvaluated(schCxt, schValid);\n        // can short-circuit if `unevaluatedProperties/Items` not supported (opts.unevaluated !== true)\n        // or if all properties and items were evaluated (it.props === true && it.items === true)\n        if (!merged)\n            gen.if((0, codegen_1.not)(valid));\n    }));\n    cxt.result(valid, () => cxt.reset(), () => cxt.error(true));\n}\nexports.validateUnion = validateUnion;\n//# sourceMappingURL=code.js.map5/dist/vocabularies/applicator/additionalProperties.js\u0010\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst code_1 = require(\"../code\");\nconst codegen_1 = require(\"../../compile/codegen\");\nconst names_1 = require(\"../../compile/names\");\nconst util_1 = require(\"../../compile/util\");\nconst error = {\n    message: \"must NOT have additional properties\",\n    params: ({ params }) => (0, codegen_1._) `{additionalProperty: ${params.additionalProperty}}`,\n};\nconst def = {\n    keyword: \"additionalProperties\",\n    type: [\"object\"],\n    schemaType: [\"boolean\", \"object\"],\n    allowUndefined: true,\n    trackErrors: true,\n    error,\n    code(cxt) {\n        const { gen, schema, parentSchema, data, errsCount, it } = cxt;\n        /* istanbul ignore if */\n        if (!errsCount)\n            throw new Error(\"ajv implementation error\");\n        const { allErrors, opts } = it;\n        it.props = true;\n        if (opts.removeAdditional !== \"all\" && (0, util_1.alwaysValidSchema)(it, schema))\n            return;\n        const props = (0, code_1.allSchemaProperties)(parentSchema.properties);\n        const patProps = (0, code_1.allSchemaProperties)(parentSchema.patternProperties);\n        checkAdditionalProperties();\n        cxt.ok((0, codegen_1._) `${errsCount} === ${names_1.default.errors}`);\n        function checkAdditionalProperties() {\n            gen.forIn(\"key\", data, (key) => {\n                if (!props.length && !patProps.length)\n                    additionalPropertyCode(key);\n                else\n                    gen.if(isAdditional(key), () => additionalPropertyCode(key));\n            });\n        }\n        function isAdditional(key) {\n            let definedProp;\n            if (props.length > 8) {\n                // TODO maybe an option instead of hard-coded 8?\n                const propsSchema = (0, util_1.schemaRefOrVal)(it, parentSchema.properties, \"properties\");\n                definedProp = (0, code_1.isOwnProperty)(gen, propsSchema, key);\n            }\n            else if (props.length) {\n                definedProp = (0, codegen_1.or)(...props.map((p) => (0, codegen_1._) `${key} === ${p}`));\n            }\n            else {\n                definedProp = codegen_1.nil;\n            }\n            if (patProps.length) {\n                definedProp = (0, codegen_1.or)(definedProp, ...patProps.map((p) => (0, codegen_1._) `${(0, code_1.usePattern)(cxt, p)}.test(${key})`));\n            }\n            return (0, codegen_1.not)(definedProp);\n        }\n        function deleteAdditional(key) {\n            gen.code((0, codegen_1._) `delete ${data}[${key}]`);\n        }\n        function additionalPropertyCode(key) {\n            if (opts.removeAdditional === \"all\" || (opts.removeAdditional && schema === false)) {\n                deleteAdditional(key);\n                return;\n            }\n            if (schema === false) {\n                cxt.setParams({ additionalProperty: key });\n                cxt.error();\n                if (!allErrors)\n                    gen.break();\n                return;\n            }\n            if (typeof schema == \"object\" && !(0, util_1.alwaysValidSchema)(it, schema)) {\n                const valid = gen.name(\"valid\");\n                if (opts.removeAdditional === \"failing\") {\n                    applyAdditionalSchema(key, valid, false);\n                    gen.if((0, codegen_1.not)(valid), () => {\n                        cxt.reset();\n                        deleteAdditional(key);\n                    });\n                }\n                else {\n                    applyAdditionalSchema(key, valid);\n                    if (!allErrors)\n                        gen.if((0, codegen_1.not)(valid), () => gen.break());\n                }\n            }\n        }\n        function applyAdditionalSchema(key, valid, errors) {\n            const subschema = {\n                keyword: \"additionalProperties\",\n                dataProp: key,\n                dataPropType: util_1.Type.Str,\n            };\n            if (errors === false) {\n                Object.assign(subschema, {\n                    compositeRule: true,\n                    createErrors: false,\n                    allErrors: false,\n                });\n            }\n            cxt.subschema(subschema, valid);\n        }\n    },\n};\nexports.default = def;\n//# sourceMappingURL=additionalProperties.js.map/dist/compile/index.js.map#{\"version\":3,\"file\":\"index.js\",\"sourceRoot\":\"\",\"sources\":[\"../../lib/compile/index.ts\"],\"names\":[],\"mappings\":\";;;AAUA,uCAAgF;AAChF,kEAAyD;AACzD,mCAAuB;AACvB,uCAAkG;AAClG,iCAA6D;AAC7D,yCAA+C;AA0D/C,MAAa,SAAS;IAkBpB,YAAY,GAAkB;;QATrB,SAAI,GAAe,EAAE,CAAA;QACrB,mBAAc,GAA6B,EAAE,CAAA;QASpD,IAAI,MAAmC,CAAA;QACvC,IAAI,OAAO,GAAG,CAAC,MAAM,IAAI,QAAQ;YAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAA;QACtD,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAA;QACxB,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAA;QAC5B,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,IAAI,CAAA;QAC5B,IAAI,CAAC,MAAM,GAAG,MAAA,GAAG,CAAC,MAAM,mCAAI,IAAA,qBAAW,EAAC,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAG,GAAG,CAAC,QAAQ,IAAI,KAAK,CAAC,CAAC,CAAA;QACxE,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU,CAAA;QAChC,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC,SAAS,CAAA;QAC9B,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAA;QACpB,IAAI,CAAC,MAAM,GAAG,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,MAAM,CAAA;QAC5B,IAAI,CAAC,IAAI,GAAG,EAAE,CAAA;IAChB,CAAC;CACF;AA/BD,8BA+BC;AAED,mBAAmB;AACnB,oBAAoB;AAEpB,+BAA+B;AAC/B,SAAgB,aAAa,CAAY,GAAc;IACrD,sCAAsC;IACtC,MAAM,IAAI,GAAG,kBAAkB,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IAC/C,IAAI,IAAI;QAAE,OAAO,IAAI,CAAA;IACrB,MAAM,MAAM,GAAG,IAAA,qBAAW,EAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA,CAAC,4CAA4C;IAC/G,MAAM,EAAC,GAAG,EAAE,KAAK,EAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAA;IACnC,MAAM,EAAC,aAAa,EAAC,GAAG,IAAI,CAAC,IAAI,CAAA;IACjC,MAAM,GAAG,GAAG,IAAI,iBAAO,CAAC,IAAI,CAAC,KAAK,EAAE,EAAC,GAAG,EAAE,KAAK,EAAE,aAAa,EAAC,CAAC,CAAA;IAChE,IAAI,gBAAgB,CAAA;IACpB,IAAI,GAAG,CAAC,MAAM,EAAE;QACd,gBAAgB,GAAG,GAAG,CAAC,UAAU,CAAC,OAAO,EAAE;YACzC,GAAG,EAAE,0BAAe;YACpB,IAAI,EAAE,IAAA,WAAC,EAAA,sDAAsD;SAC9D,CAAC,CAAA;KACH;IAED,MAAM,YAAY,GAAG,GAAG,CAAC,SAAS,CAAC,UAAU,CAAC,CAAA;IAC9C,GAAG,CAAC,YAAY,GAAG,YAAY,CAAA;IAE/B,MAAM,SAAS,GAAc;QAC3B,GAAG;QACH,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS;QAC9B,IAAI,EAAE,eAAC,CAAC,IAAI;QACZ,UAAU,EAAE,eAAC,CAAC,UAAU;QACxB,kBAAkB,EAAE,eAAC,CAAC,kBAAkB;QACxC,SAAS,EAAE,CAAC,eAAC,CAAC,IAAI,CAAC;QACnB,WAAW,EAAE,CAAC,aAAG,CAAC;QAClB,SAAS,EAAE,CAAC;QACZ,SAAS,EAAE,EAAE;QACb,iBAAiB,EAAE,IAAI,GAAG,EAAU;QACpC,YAAY,EAAE,GAAG,CAAC,UAAU,CAC1B,QAAQ,EACR,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,IAAI;YAC5B,CAAC,CAAC,EAAC,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,IAAA,mBAAS,EAAC,GAAG,CAAC,MAAM,CAAC,EAAC;YAChD,CAAC,CAAC,EAAC,GAAG,EAAE,GAAG,CAAC,MAAM,EAAC,CACtB;QACD,YAAY;QACZ,eAAe,EAAE,gBAAgB;QACjC,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,SAAS,EAAE,GAAG;QACd,MAAM;QACN,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,MAAM;QAC5B,UAAU,EAAE,aAAG;QACf,aAAa,EAAE,GAAG,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;QAC3D,SAAS,EAAE,IAAA,WAAC,EAAA,IAAI;QAChB,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,IAAI,EAAE,IAAI;KACX,CAAA;IAED,IAAI,UAA8B,CAAA;IAClC,IAAI;QACF,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAC3B,IAAA,+BAAoB,EAAC,SAAS,CAAC,CAAA;QAC/B,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QACrC,kBAAkB;QAClB,MAAM,YAAY,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAA;QACnC,UAAU,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,eAAC,CAAC,KAAK,CAAC,UAAU,YAAY,EAAE,CAAA;QAC9D,6EAA6E;QAC7E,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,CAAA;QAChF,2CAA2C;QAC3C,MAAM,YAAY,GAAG,IAAI,QAAQ,CAAC,GAAG,eAAC,CAAC,IAAI,EAAE,EAAE,GAAG,eAAC,CAAC,KAAK,EAAE,EAAE,UAAU,CAAC,CAAA;QACxE,MAAM,QAAQ,GAAwB,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAA;QAC1E,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,EAAE,EAAC,GAAG,EAAE,QAAQ,EAAC,CAAC,CAAA;QAE/C,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAA;QACtB,QAAQ,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAA;QAC5B,QAAQ,CAAC,SAAS,GAAG,GAAG,CAAA;QACxB,IAAI,GAAG,CAAC,MAAM;YAAG,QAAkC,CAAC,MAAM,GAAG,IAAI,CAAA;QACjE,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,IAAI,EAAE;YAClC,QAAQ,CAAC,MAAM,GAAG,EAAC,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,GAAG,CAAC,OAAO,EAAC,CAAA;SACzE;QACD,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YACzB,MAAM,EAAC,KAAK,EAAE,KAAK,EAAC,GAAG,SAAS,CAAA;YAChC,QAAQ,CAAC,SAAS,GAAG;gBACnB,KAAK,EAAE,KAAK,YAAY,cAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK;gBAChD,KAAK,EAAE,KAAK,YAAY,cAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK;gBAChD,YAAY,EAAE,KAAK,YAAY,cAAI;gBACnC,YAAY,EAAE,KAAK,YAAY,cAAI;aACpC,CAAA;YACD,IAAI,QAAQ,CAAC,MAAM;gBAAE,QAAQ,CAAC,MAAM,CAAC,SAAS,GAAG,IAAA,mBAAS,EAAC,QAAQ,CAAC,SAAS,CAAC,CAAA;SAC/E;QACD,GAAG,CAAC,QAAQ,GAAG,QAAQ,CAAA;QACvB,OAAO,GAAG,CAAA;KACX;IAAC,OAAO,CAAC,EAAE;QACV,OAAO,GAAG,CAAC,QAAQ,CAAA;QACnB,OAAO,GAAG,CAAC,YAAY,CAAA;QACvB,IAAI,UAAU;YAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,wCAAwC,EAAE,UAAU,CAAC,CAAA;QACvF,sDAAsD;QACtD,MAAM,CAAC,CAAA;KACR;YAAS;QACR,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;KAC/B;AACH,CAAC;AA5FD,sCA4FC;AAED,SAAgB,UAAU,CAExB,IAAe,EACf,MAAc,EACd,GAAW;;IAEX,GAAG,GAAG,IAAA,oBAAU,EAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,CAAC,CAAA;IACpD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAChC,IAAI,SAAS;QAAE,OAAO,SAAS,CAAA;IAE/B,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,CAAA;IACxC,IAAI,IAAI,KAAK,SAAS,EAAE;QACtB,MAAM,MAAM,GAAG,MAAA,IAAI,CAAC,SAAS,0CAAG,GAAG,CAAC,CAAA,CAAC,6CAA6C;QAClF,MAAM,EAAC,QAAQ,EAAC,GAAG,IAAI,CAAC,IAAI,CAAA;QAC5B,IAAI,MAAM;YAAE,IAAI,GAAG,IAAI,SAAS,CAAC,EAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAC,CAAC,CAAA;KACnE;IAED,IAAI,IAAI,KAAK,SAAS;QAAE,OAAM;IAC9B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;AAC5D,CAAC;AAnBD,gCAmBC;AAED,SAAS,eAAe,CAAY,GAAc;IAChD,IAAI,IAAA,mBAAS,EAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;QAAE,OAAO,GAAG,CAAC,MAAM,CAAA;IAClE,OAAO,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;AAC3D,CAAC;AAED,6DAA6D;AAC7D,SAAgB,kBAAkB,CAAY,MAAiB;IAC7D,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,aAAa,EAAE;QACpC,IAAI,aAAa,CAAC,GAAG,EAAE,MAAM,CAAC;YAAE,OAAO,GAAG,CAAA;KAC3C;AACH,CAAC;AAJD,gDAIC;AAED,SAAS,aAAa,CAAC,EAAa,EAAE,EAAa;IACjD,OAAO,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,CAAA;AAClF,CAAC;AAED,4CAA4C;AAC5C,qFAAqF;AACrF,SAAS,OAAO,CAEd,IAAe,EAAE,2DAA2D;AAC5E,GAAW,CAAC,uBAAuB;;IAEnC,IAAI,GAAG,CAAA;IACP,OAAO,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,QAAQ;QAAE,GAAG,GAAG,GAAG,CAAA;IAC3D,OAAO,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,CAAA;AACxE,CAAC;AAED,sCAAsC;AACtC,SAAgB,aAAa,CAE3B,IAAe,EAAE,kFAAkF;AACnG,GAAW,CAAC,uBAAuB;;IAEnC,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAC1C,MAAM,OAAO,GAAG,IAAA,sBAAY,EAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAA;IACtD,IAAI,MAAM,GAAG,IAAA,qBAAW,EAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;IACvE,gGAAgG;IAChG,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,KAAK,MAAM,EAAE;QAC7D,OAAO,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,CAAA;KAC1C;IAED,MAAM,EAAE,GAAG,IAAA,qBAAW,EAAC,OAAO,CAAC,CAAA;IAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;IAClD,IAAI,OAAO,QAAQ,IAAI,QAAQ,EAAE;QAC/B,MAAM,GAAG,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAA;QACpD,IAAI,OAAO,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,MAAM,CAAA,KAAK,QAAQ;YAAE,OAAM;QAC3C,OAAO,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,CAAA;KACzC;IAED,IAAI,OAAO,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,MAAM,CAAA,KAAK,QAAQ;QAAE,OAAM;IAChD,IAAI,CAAC,QAAQ,CAAC,QAAQ;QAAE,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;IAC1D,IAAI,EAAE,KAAK,IAAA,qBAAW,EAAC,GAAG,CAAC,EAAE;QAC3B,MAAM,EAAC,MAAM,EAAC,GAAG,QAAQ,CAAA;QACzB,MAAM,EAAC,QAAQ,EAAC,GAAG,IAAI,CAAC,IAAI,CAAA;QAC5B,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAA;QAC9B,IAAI,KAAK;YAAE,MAAM,GAAG,IAAA,oBAAU,EAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,CAAC,CAAA;QACpE,OAAO,IAAI,SAAS,CAAC,EAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAC,CAAC,CAAA;KACvD;IACD,OAAO,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAA;AAC/C,CAAC;AA/BD,sCA+BC;AAED,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC;IACnC,YAAY;IACZ,mBAAmB;IACnB,MAAM;IACN,cAAc;IACd,aAAa;CACd,CAAC,CAAA;AAEF,SAAS,cAAc,CAErB,SAA4B,EAC5B,EAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAY;;IAEjC,IAAI,CAAA,MAAA,SAAS,CAAC,QAAQ,0CAAG,CAAC,CAAC,MAAK,GAAG;QAAE,OAAM;IAC3C,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;QACzD,IAAI,OAAO,MAAM,KAAK,SAAS;YAAE,OAAM;QACvC,MAAM,UAAU,GAAG,MAAM,CAAC,IAAA,uBAAgB,EAAC,IAAI,CAAC,CAAC,CAAA;QACjD,IAAI,UAAU,KAAK,SAAS;YAAE,OAAM;QACpC,MAAM,GAAG,UAAU,CAAA;QACnB,6DAA6D;QAC7D,MAAM,KAAK,GAAG,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QACtE,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,EAAE;YAC5C,MAAM,GAAG,IAAA,oBAAU,EAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,CAAC,CAAA;SAC1D;KACF;IACD,IAAI,GAA0B,CAAA;IAC9B,IAAI,OAAO,MAAM,IAAI,SAAS,IAAI,MAAM,CAAC,IAAI,IAAI,CAAC,IAAA,2BAAoB,EAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE;QAC1F,MAAM,IAAI,GAAG,IAAA,oBAAU,EAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,CAAA;QACnE,GAAG,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;KAC3C;IACD,+EAA+E;IAC/E,6CAA6C;IAC7C,MAAM,EAAC,QAAQ,EAAC,GAAG,IAAI,CAAC,IAAI,CAAA;IAC5B,GAAG,GAAG,GAAG,IAAI,IAAI,SAAS,CAAC,EAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAC,CAAC,CAAA;IAC5D,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,MAAM;QAAE,OAAO,GAAG,CAAA;IAC9C,OAAO,SAAS,CAAA;AAClB,CAAC\"}-/dist/refs/json-schema-2020-12/meta/core.json\u0005@{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"$id\": \"https://json-schema.org/draft/2020-12/meta/core\",\n  \"$vocabulary\": {\n    \"https://json-schema.org/draft/2020-12/vocab/core\": true\n  },\n  \"$dynamicAnchor\": \"meta\",\n\n  \"title\": \"Core vocabulary meta-schema\",\n  \"type\": [\"object\", \"boolean\"],\n  \"properties\": {\n    \"$id\": {\n      \"$ref\": \"#/$defs/uriReferenceString\",\n      \"$comment\": \"Non-empty fragments not allowed.\",\n      \"pattern\": \"^[^#]*#?$\"\n    },\n    \"$schema\": {\"$ref\": \"#/$defs/uriString\"},\n    \"$ref\": {\"$ref\": \"#/$defs/uriReferenceString\"},\n    \"$anchor\": {\"$ref\": \"#/$defs/anchorString\"},\n    \"$dynamicRef\": {\"$ref\": \"#/$defs/uriReferenceString\"},\n    \"$dynamicAnchor\": {\"$ref\": \"#/$defs/anchorString\"},\n    \"$vocabulary\": {\n      \"type\": \"object\",\n      \"propertyNames\": {\"$ref\": \"#/$defs/uriString\"},\n      \"additionalProperties\": {\n        \"type\": \"boolean\"\n      }\n    },\n    \"$comment\": {\n      \"type\": \"string\"\n    },\n    \"$defs\": {\n      \"type\": \"object\",\n      \"additionalProperties\": {\"$dynamicRef\": \"#meta\"}\n    }\n  },\n  \"$defs\": {\n    \"anchorString\": {\n      \"type\": \"string\",\n      \"pattern\": \"^[A-Za-z_][-A-Za-z0-9._]*$\"\n    },\n    \"uriString\": {\n      \"type\": \"string\",\n      \"format\": \"uri\"\n    },\n    \"uriReferenceString\": {\n      \"type\": \"string\",\n      \"format\": \"uri-reference\"\n    }\n  }\n}\n%/dist/runtime/validation_error.js.map\u0001L{\"version\":3,\"file\":\"validation_error.js\",\"sourceRoot\":\"\",\"sources\":[\"../../lib/runtime/validation_error.ts\"],\"names\":[],\"mappings\":\";;AAEA,MAAqB,eAAgB,SAAQ,KAAK;IAKhD,YAAY,MAA8B;QACxC,KAAK,CAAC,mBAAmB,CAAC,CAAA;QAC1B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAA;IACnC,CAAC;CACF;AAVD,kCAUC\"}+/lib/vocabularies/validation/limitNumber.ts\u0005Fimport type {CodeKeywordDefinition, ErrorObject, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str, operators, Code} from \"../../compile/codegen\"\n\nconst ops = operators\n\ntype Kwd = \"maximum\" | \"minimum\" | \"exclusiveMaximum\" | \"exclusiveMinimum\"\n\ntype Comparison = \"<=\" | \">=\" | \"<\" | \">\"\n\nconst KWDs: {[K in Kwd]: {okStr: Comparison; ok: Code; fail: Code}} = {\n  maximum: {okStr: \"<=\", ok: ops.LTE, fail: ops.GT},\n  minimum: {okStr: \">=\", ok: ops.GTE, fail: ops.LT},\n  exclusiveMaximum: {okStr: \"<\", ok: ops.LT, fail: ops.GTE},\n  exclusiveMinimum: {okStr: \">\", ok: ops.GT, fail: ops.LTE},\n}\n\nexport type LimitNumberError = ErrorObject<\n  Kwd,\n  {limit: number; comparison: Comparison},\n  number | {$data: string}\n>\n\nconst error: KeywordErrorDefinition = {\n  message: ({keyword, schemaCode}) => str`must be ${KWDs[keyword as Kwd].okStr} ${schemaCode}`,\n  params: ({keyword, schemaCode}) =>\n    _`{comparison: ${KWDs[keyword as Kwd].okStr}, limit: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: Object.keys(KWDs),\n  type: \"number\",\n  schemaType: \"number\",\n  $data: true,\n  error,\n  code(cxt: KeywordCxt) {\n    const {keyword, data, schemaCode} = cxt\n    cxt.fail$data(_`${data} ${KWDs[keyword as Kwd].fail} ${schemaCode} || isNaN(${data})`)\n  },\n}\n\nexport default def\n/dist/compile/jtd/types.js.map{\"version\":3,\"file\":\"types.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../lib/compile/jtd/types.ts\"],\"names\":[],\"mappings\":\";;;AAIa,QAAA,QAAQ,GAAG;IACtB,UAAU;IACV,QAAQ;IACR,eAAe;IACf,YAAY;IACZ,oBAAoB;IACpB,MAAM;IACN,MAAM;IACN,KAAK;CACG,CAAA\"}2/dist/vocabularies/validation/limitProperties.d.tsximport type { CodeKeywordDefinition } from \"../../types\";\ndeclare const def: CodeKeywordDefinition;\nexport default def;\n0/lib/vocabularies/applicator/dependentSchemas.ts\u0001\u0018import type {CodeKeywordDefinition} from \"../../types\"\nimport {validateSchemaDeps} from \"./dependencies\"\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"dependentSchemas\",\n  type: \"object\",\n  schemaType: \"object\",\n  code: (cxt) => validateSchemaDeps(cxt),\n}\n\nexport default def\n/dist/core.jsb\u000f\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CodeGen = exports.Name = exports.nil = exports.stringify = exports.str = exports._ = exports.KeywordCxt = void 0;\nvar validate_1 = require(\"./compile/validate\");\nObject.defineProperty(exports, \"KeywordCxt\", { enumerable: true, get: function () { return validate_1.KeywordCxt; } });\nvar codegen_1 = require(\"./compile/codegen\");\nObject.defineProperty(exports, \"_\", { enumerable: true, get: function () { return codegen_1._; } });\nObject.defineProperty(exports, \"str\", { enumerable: true, get: function () { return codegen_1.str; } });\nObject.defineProperty(exports, \"stringify\", { enumerable: true, get: function () { return codegen_1.stringify; } });\nObject.defineProperty(exports, \"nil\", { enumerable: true, get: function () { return codegen_1.nil; } });\nObject.defineProperty(exports, \"Name\", { enumerable: true, get: function () { return codegen_1.Name; } });\nObject.defineProperty(exports, \"CodeGen\", { enumerable: true, get: function () { return codegen_1.CodeGen; } });\nconst validation_error_1 = require(\"./runtime/validation_error\");\nconst ref_error_1 = require(\"./compile/ref_error\");\nconst rules_1 = require(\"./compile/rules\");\nconst compile_1 = require(\"./compile\");\nconst codegen_2 = require(\"./compile/codegen\");\nconst resolve_1 = require(\"./compile/resolve\");\nconst dataType_1 = require(\"./compile/validate/dataType\");\nconst util_1 = require(\"./compile/util\");\nconst $dataRefSchema = require(\"./refs/data.json\");\nconst uri_1 = require(\"./runtime/uri\");\nconst defaultRegExp = (str, flags) => new RegExp(str, flags);\ndefaultRegExp.code = \"new RegExp\";\nconst META_IGNORE_OPTIONS = [\"removeAdditional\", \"useDefaults\", \"coerceTypes\"];\nconst EXT_SCOPE_NAMES = new Set([\n    \"validate\",\n    \"serialize\",\n    \"parse\",\n    \"wrapper\",\n    \"root\",\n    \"schema\",\n    \"keyword\",\n    \"pattern\",\n    \"formats\",\n    \"validate$data\",\n    \"func\",\n    \"obj\",\n    \"Error\",\n]);\nconst removedOptions = {\n    errorDataPath: \"\",\n    format: \"`validateFormats: false` can be used instead.\",\n    nullable: '\"nullable\" keyword is supported by default.',\n    jsonPointers: \"Deprecated jsPropertySyntax can be used instead.\",\n    extendRefs: \"Deprecated ignoreKeywordsWithRef can be used instead.\",\n    missingRefs: \"Pass empty schema with $id that should be ignored to ajv.addSchema.\",\n    processCode: \"Use option `code: {process: (code, schemaEnv: object) => string}`\",\n    sourceCode: \"Use option `code: {source: true}`\",\n    strictDefaults: \"It is default now, see option `strict`.\",\n    strictKeywords: \"It is default now, see option `strict`.\",\n    uniqueItems: '\"uniqueItems\" keyword is always validated.',\n    unknownFormats: \"Disable strict mode or pass `true` to `ajv.addFormat` (or `formats` option).\",\n    cache: \"Map is used as cache, schema object as key.\",\n    serialize: \"Map is used as cache, schema object as key.\",\n    ajvErrors: \"It is default now.\",\n};\nconst deprecatedOptions = {\n    ignoreKeywordsWithRef: \"\",\n    jsPropertySyntax: \"\",\n    unicode: '\"minLength\"/\"maxLength\" account for unicode characters by default.',\n};\nconst MAX_EXPRESSION = 200;\n// eslint-disable-next-line complexity\nfunction requiredOptions(o) {\n    var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0;\n    const s = o.strict;\n    const _optz = (_a = o.code) === null || _a === void 0 ? void 0 : _a.optimize;\n    const optimize = _optz === true || _optz === undefined ? 1 : _optz || 0;\n    const regExp = (_c = (_b = o.code) === null || _b === void 0 ? void 0 : _b.regExp) !== null && _c !== void 0 ? _c : defaultRegExp;\n    const uriResolver = (_d = o.uriResolver) !== null && _d !== void 0 ? _d : uri_1.default;\n    return {\n        strictSchema: (_f = (_e = o.strictSchema) !== null && _e !== void 0 ? _e : s) !== null && _f !== void 0 ? _f : true,\n        strictNumbers: (_h = (_g = o.strictNumbers) !== null && _g !== void 0 ? _g : s) !== null && _h !== void 0 ? _h : true,\n        strictTypes: (_k = (_j = o.strictTypes) !== null && _j !== void 0 ? _j : s) !== null && _k !== void 0 ? _k : \"log\",\n        strictTuples: (_m = (_l = o.strictTuples) !== null && _l !== void 0 ? _l : s) !== null && _m !== void 0 ? _m : \"log\",\n        strictRequired: (_p = (_o = o.strictRequired) !== null && _o !== void 0 ? _o : s) !== null && _p !== void 0 ? _p : false,\n        code: o.code ? { ...o.code, optimize, regExp } : { optimize, regExp },\n        loopRequired: (_q = o.loopRequired) !== null && _q !== void 0 ? _q : MAX_EXPRESSION,\n        loopEnum: (_r = o.loopEnum) !== null && _r !== void 0 ? _r : MAX_EXPRESSION,\n        meta: (_s = o.meta) !== null && _s !== void 0 ? _s : true,\n        messages: (_t = o.messages) !== null && _t !== void 0 ? _t : true,\n        inlineRefs: (_u = o.inlineRefs) !== null && _u !== void 0 ? _u : true,\n        schemaId: (_v = o.schemaId) !== null && _v !== void 0 ? _v : \"$id\",\n        addUsedSchema: (_w = o.addUsedSchema) !== null && _w !== void 0 ? _w : true,\n        validateSchema: (_x = o.validateSchema) !== null && _x !== void 0 ? _x : true,\n        validateFormats: (_y = o.validateFormats) !== null && _y !== void 0 ? _y : true,\n        unicodeRegExp: (_z = o.unicodeRegExp) !== null && _z !== void 0 ? _z : true,\n        int32range: (_0 = o.int32range) !== null && _0 !== void 0 ? _0 : true,\n        uriResolver: uriResolver,\n    };\n}\nclass Ajv {\n    constructor(opts = {}) {\n        this.schemas = {};\n        this.refs = {};\n        this.formats = {};\n        this._compilations = new Set();\n        this._loading = {};\n        this._cache = new Map();\n        opts = this.opts = { ...opts, ...requiredOptions(opts) };\n        const { es5, lines } = this.opts.code;\n        this.scope = new codegen_2.ValueScope({ scope: {}, prefixes: EXT_SCOPE_NAMES, es5, lines });\n        this.logger = getLogger(opts.logger);\n        const formatOpt = opts.validateFormats;\n        opts.validateFormats = false;\n        this.RULES = (0, rules_1.getRules)();\n        checkOptions.call(this, removedOptions, opts, \"NOT SUPPORTED\");\n        checkOptions.call(this, deprecatedOptions, opts, \"DEPRECATED\", \"warn\");\n        this._metaOpts = getMetaSchemaOptions.call(this);\n        if (opts.formats)\n            addInitialFormats.call(this);\n        this._addVocabularies();\n        this._addDefaultMetaSchema();\n        if (opts.keywords)\n            addInitialKeywords.call(this, opts.keywords);\n        if (typeof opts.meta == \"object\")\n            this.addMetaSchema(opts.meta);\n        addInitialSchemas.call(this);\n        opts.validateFormats = formatOpt;\n    }\n    _addVocabularies() {\n        this.addKeyword(\"$async\");\n    }\n    _addDefaultMetaSchema() {\n        const { $data, meta, schemaId } = this.opts;\n        let _dataRefSchema = $dataRefSchema;\n        if (schemaId === \"id\") {\n            _dataRefSchema = { ...$dataRefSchema };\n            _dataRefSchema.id = _dataRefSchema.$id;\n            delete _dataRefSchema.$id;\n        }\n        if (meta && $data)\n            this.addMetaSchema(_dataRefSchema, _dataRefSchema[schemaId], false);\n    }\n    defaultMeta() {\n        const { meta, schemaId } = this.opts;\n        return (this.opts.defaultMeta = typeof meta == \"object\" ? meta[schemaId] || meta : undefined);\n    }\n    validate(schemaKeyRef, // key, ref or schema object\n    data // to be validated\n    ) {\n        let v;\n        if (typeof schemaKeyRef == \"string\") {\n            v = this.getSchema(schemaKeyRef);\n            if (!v)\n                throw new Error(`no schema with key or ref \"${schemaKeyRef}\"`);\n        }\n        else {\n            v = this.compile(schemaKeyRef);\n        }\n        const valid = v(data);\n        if (!(\"$async\" in v))\n            this.errors = v.errors;\n        return valid;\n    }\n    compile(schema, _meta) {\n        const sch = this._addSchema(schema, _meta);\n        return (sch.validate || this._compileSchemaEnv(sch));\n    }\n    compileAsync(schema, meta) {\n        if (typeof this.opts.loadSchema != \"function\") {\n            throw new Error(\"options.loadSchema should be a function\");\n        }\n        const { loadSchema } = this.opts;\n        return runCompileAsync.call(this, schema, meta);\n        async function runCompileAsync(_schema, _meta) {\n            await loadMetaSchema.call(this, _schema.$schema);\n            const sch = this._addSchema(_schema, _meta);\n            return sch.validate || _compileAsync.call(this, sch);\n        }\n        async function loadMetaSchema($ref) {\n            if ($ref && !this.getSchema($ref)) {\n                await runCompileAsync.call(this, { $ref }, true);\n            }\n        }\n        async function _compileAsync(sch) {\n            try {\n                return this._compileSchemaEnv(sch);\n            }\n            catch (e) {\n                if (!(e instanceof ref_error_1.default))\n                    throw e;\n                checkLoaded.call(this, e);\n                await loadMissingSchema.call(this, e.missingSchema);\n                return _compileAsync.call(this, sch);\n            }\n        }\n        function checkLoaded({ missingSchema: ref, missingRef }) {\n            if (this.refs[ref]) {\n                throw new Error(`AnySchema ${ref} is loaded but ${missingRef} cannot be resolved`);\n            }\n        }\n        async function loadMissingSchema(ref) {\n            const _schema = await _loadSchema.call(this, ref);\n            if (!this.refs[ref])\n                await loadMetaSchema.call(this, _schema.$schema);\n            if (!this.refs[ref])\n                this.addSchema(_schema, ref, meta);\n        }\n        async function _loadSchema(ref) {\n            const p = this._loading[ref];\n            if (p)\n                return p;\n            try {\n                return await (this._loading[ref] = loadSchema(ref));\n            }\n            finally {\n                delete this._loading[ref];\n            }\n        }\n    }\n    // Adds schema to the instance\n    addSchema(schema, // If array is passed, `key` will be ignored\n    key, // Optional schema key. Can be passed to `validate` method instead of schema object or id/ref. One schema per instance can have empty `id` and `key`.\n    _meta, // true if schema is a meta-schema. Used internally, addMetaSchema should be used instead.\n    _validateSchema = this.opts.validateSchema // false to skip schema validation. Used internally, option validateSchema should be used instead.\n    ) {\n        if (Array.isArray(schema)) {\n            for (const sch of schema)\n                this.addSchema(sch, undefined, _meta, _validateSchema);\n            return this;\n        }\n        let id;\n        if (typeof schema === \"object\") {\n            const { schemaId } = this.opts;\n            id = schema[schemaId];\n            if (id !== undefined && typeof id != \"string\") {\n                throw new Error(`schema ${schemaId} must be string`);\n            }\n        }\n        key = (0, resolve_1.normalizeId)(key || id);\n        this._checkUnique(key);\n        this.schemas[key] = this._addSchema(schema, _meta, key, _validateSchema, true);\n        return this;\n    }\n    // Add schema that will be used to validate other schemas\n    // options in META_IGNORE_OPTIONS are alway set to false\n    addMetaSchema(schema, key, // schema key\n    _validateSchema = this.opts.validateSchema // false to skip schema validation, can be used to override validateSchema option for meta-schema\n    ) {\n        this.addSchema(schema, key, true, _validateSchema);\n        return this;\n    }\n    //  Validate schema against its meta-schema\n    validateSchema(schema, throwOrLogError) {\n        if (typeof schema == \"boolean\")\n            return true;\n        let $schema;\n        $schema = schema.$schema;\n        if ($schema !== undefined && typeof $schema != \"string\") {\n            throw new Error(\"$schema must be a string\");\n        }\n        $schema = $schema || this.opts.defaultMeta || this.defaultMeta();\n        if (!$schema) {\n            this.logger.warn(\"meta-schema not available\");\n            this.errors = null;\n            return true;\n        }\n        const valid = this.validate($schema, schema);\n        if (!valid && throwOrLogError) {\n            const message = \"schema is invalid: \" + this.errorsText();\n            if (this.opts.validateSchema === \"log\")\n                this.logger.error(message);\n            else\n                throw new Error(message);\n        }\n        return valid;\n    }\n    // Get compiled schema by `key` or `ref`.\n    // (`key` that was passed to `addSchema` or full schema reference - `schema.$id` or resolved id)\n    getSchema(keyRef) {\n        let sch;\n        while (typeof (sch = getSchEnv.call(this, keyRef)) == \"string\")\n            keyRef = sch;\n        if (sch === undefined) {\n            const { schemaId } = this.opts;\n            const root = new compile_1.SchemaEnv({ schema: {}, schemaId });\n            sch = compile_1.resolveSchema.call(this, root, keyRef);\n            if (!sch)\n                return;\n            this.refs[keyRef] = sch;\n        }\n        return (sch.validate || this._compileSchemaEnv(sch));\n    }\n    // Remove cached schema(s).\n    // If no parameter is passed all schemas but meta-schemas are removed.\n    // If RegExp is passed all schemas with key/id matching pattern but meta-schemas are removed.\n    // Even if schema is referenced by other schemas it still can be removed as other schemas have local references.\n    removeSchema(schemaKeyRef) {\n        if (schemaKeyRef instanceof RegExp) {\n            this._removeAllSchemas(this.schemas, schemaKeyRef);\n            this._removeAllSchemas(this.refs, schemaKeyRef);\n            return this;\n        }\n        switch (typeof schemaKeyRef) {\n            case \"undefined\":\n                this._removeAllSchemas(this.schemas);\n                this._removeAllSchemas(this.refs);\n                this._cache.clear();\n                return this;\n            case \"string\": {\n                const sch = getSchEnv.call(this, schemaKeyRef);\n                if (typeof sch == \"object\")\n                    this._cache.delete(sch.schema);\n                delete this.schemas[schemaKeyRef];\n                delete this.refs[schemaKeyRef];\n                return this;\n            }\n            case \"object\": {\n                const cacheKey = schemaKeyRef;\n                this._cache.delete(cacheKey);\n                let id = schemaKeyRef[this.opts.schemaId];\n                if (id) {\n                    id = (0, resolve_1.normalizeId)(id);\n                    delete this.schemas[id];\n                    delete this.refs[id];\n                }\n                return this;\n            }\n            default:\n                throw new Error(\"ajv.removeSchema: invalid parameter\");\n        }\n    }\n    // add \"vocabulary\" - a collection of keywords\n    addVocabulary(definitions) {\n        for (const def of definitions)\n            this.addKeyword(def);\n        return this;\n    }\n    addKeyword(kwdOrDef, def // deprecated\n    ) {\n        let keyword;\n        if (typeof kwdOrDef == \"string\") {\n            keyword = kwdOrDef;\n            if (typeof def == \"object\") {\n                this.logger.warn(\"these parameters are deprecated, see docs for addKeyword\");\n                def.keyword = keyword;\n            }\n        }\n        else if (typeof kwdOrDef == \"object\" && def === undefined) {\n            def = kwdOrDef;\n            keyword = def.keyword;\n            if (Array.isArray(keyword) && !keyword.length) {\n                throw new Error(\"addKeywords: keyword must be string or non-empty array\");\n            }\n        }\n        else {\n            throw new Error(\"invalid addKeywords parameters\");\n        }\n        checkKeyword.call(this, keyword, def);\n        if (!def) {\n            (0, util_1.eachItem)(keyword, (kwd) => addRule.call(this, kwd));\n            return this;\n        }\n        keywordMetaschema.call(this, def);\n        const definition = {\n            ...def,\n            type: (0, dataType_1.getJSONTypes)(def.type),\n            schemaType: (0, dataType_1.getJSONTypes)(def.schemaType),\n        };\n        (0, util_1.eachItem)(keyword, definition.type.length === 0\n            ? (k) => addRule.call(this, k, definition)\n            : (k) => definition.type.forEach((t) => addRule.call(this, k, definition, t)));\n        return this;\n    }\n    getKeyword(keyword) {\n        const rule = this.RULES.all[keyword];\n        return typeof rule == \"object\" ? rule.definition : !!rule;\n    }\n    // Remove keyword\n    removeKeyword(keyword) {\n        // TODO return type should be Ajv\n        const { RULES } = this;\n        delete RULES.keywords[keyword];\n        delete RULES.all[keyword];\n        for (const group of RULES.rules) {\n            const i = group.rules.findIndex((rule) => rule.keyword === keyword);\n            if (i >= 0)\n                group.rules.splice(i, 1);\n        }\n        return this;\n    }\n    // Add format\n    addFormat(name, format) {\n        if (typeof format == \"string\")\n            format = new RegExp(format);\n        this.formats[name] = format;\n        return this;\n    }\n    errorsText(errors = this.errors, // optional array of validation errors\n    { separator = \", \", dataVar = \"data\" } = {} // optional options with properties `separator` and `dataVar`\n    ) {\n        if (!errors || errors.length === 0)\n            return \"No errors\";\n        return errors\n            .map((e) => `${dataVar}${e.instancePath} ${e.message}`)\n            .reduce((text, msg) => text + separator + msg);\n    }\n    $dataMetaSchema(metaSchema, keywordsJsonPointers) {\n        const rules = this.RULES.all;\n        metaSchema = JSON.parse(JSON.stringify(metaSchema));\n        for (const jsonPointer of keywordsJsonPointers) {\n            const segments = jsonPointer.split(\"/\").slice(1); // first segment is an empty string\n            let keywords = metaSchema;\n            for (const seg of segments)\n                keywords = keywords[seg];\n            for (const key in rules) {\n                const rule = rules[key];\n                if (typeof rule != \"object\")\n                    continue;\n                const { $data } = rule.definition;\n                const schema = keywords[key];\n                if ($data && schema)\n                    keywords[key] = schemaOrData(schema);\n            }\n        }\n        return metaSchema;\n    }\n    _removeAllSchemas(schemas, regex) {\n        for (const keyRef in schemas) {\n            const sch = schemas[keyRef];\n            if (!regex || regex.test(keyRef)) {\n                if (typeof sch == \"string\") {\n                    delete schemas[keyRef];\n                }\n                else if (sch && !sch.meta) {\n                    this._cache.delete(sch.schema);\n                    delete schemas[keyRef];\n                }\n            }\n        }\n    }\n    _addSchema(schema, meta, baseId, validateSchema = this.opts.validateSchema, addSchema = this.opts.addUsedSchema) {\n        let id;\n        const { schemaId } = this.opts;\n        if (typeof schema == \"object\") {\n            id = schema[schemaId];\n        }\n        else {\n            if (this.opts.jtd)\n                throw new Error(\"schema must be object\");\n            else if (typeof schema != \"boolean\")\n                throw new Error(\"schema must be object or boolean\");\n        }\n        let sch = this._cache.get(schema);\n        if (sch !== undefined)\n            return sch;\n        baseId = (0, resolve_1.normalizeId)(id || baseId);\n        const localRefs = resolve_1.getSchemaRefs.call(this, schema, baseId);\n        sch = new compile_1.SchemaEnv({ schema, schemaId, meta, baseId, localRefs });\n        this._cache.set(sch.schema, sch);\n        if (addSchema && !baseId.startsWith(\"#\")) {\n            // TODO atm it is allowed to overwrite schemas without id (instead of not adding them)\n            if (baseId)\n                this._checkUnique(baseId);\n            this.refs[baseId] = sch;\n        }\n        if (validateSchema)\n            this.validateSchema(schema, true);\n        return sch;\n    }\n    _checkUnique(id) {\n        if (this.schemas[id] || this.refs[id]) {\n            throw new Error(`schema with key or id \"${id}\" already exists`);\n        }\n    }\n    _compileSchemaEnv(sch) {\n        if (sch.meta)\n            this._compileMetaSchema(sch);\n        else\n            compile_1.compileSchema.call(this, sch);\n        /* istanbul ignore if */\n        if (!sch.validate)\n            throw new Error(\"ajv implementation error\");\n        return sch.validate;\n    }\n    _compileMetaSchema(sch) {\n        const currentOpts = this.opts;\n        this.opts = this._metaOpts;\n        try {\n            compile_1.compileSchema.call(this, sch);\n        }\n        finally {\n            this.opts = currentOpts;\n        }\n    }\n}\nexports.default = Ajv;\nAjv.ValidationError = validation_error_1.default;\nAjv.MissingRefError = ref_error_1.default;\nfunction checkOptions(checkOpts, options, msg, log = \"error\") {\n    for (const key in checkOpts) {\n        const opt = key;\n        if (opt in options)\n            this.logger[log](`${msg}: option ${key}. ${checkOpts[opt]}`);\n    }\n}\nfunction getSchEnv(keyRef) {\n    keyRef = (0, resolve_1.normalizeId)(keyRef); // TODO tests fail without this line\n    return this.schemas[keyRef] || this.refs[keyRef];\n}\nfunction addInitialSchemas() {\n    const optsSchemas = this.opts.schemas;\n    if (!optsSchemas)\n        return;\n    if (Array.isArray(optsSchemas))\n        this.addSchema(optsSchemas);\n    else\n        for (const key in optsSchemas)\n            this.addSchema(optsSchemas[key], key);\n}\nfunction addInitialFormats() {\n    for (const name in this.opts.formats) {\n        const format = this.opts.formats[name];\n        if (format)\n            this.addFormat(name, format);\n    }\n}\nfunction addInitialKeywords(defs) {\n    if (Array.isArray(defs)) {\n        this.addVocabulary(defs);\n        return;\n    }\n    this.logger.warn(\"keywords option as map is deprecated, pass array\");\n    for (const keyword in defs) {\n        const def = defs[keyword];\n        if (!def.keyword)\n            def.keyword = keyword;\n        this.addKeyword(def);\n    }\n}\nfunction getMetaSchemaOptions() {\n    const metaOpts = { ...this.opts };\n    for (const opt of META_IGNORE_OPTIONS)\n        delete metaOpts[opt];\n    return metaOpts;\n}\nconst noLogs = { log() { }, warn() { }, error() { } };\nfunction getLogger(logger) {\n    if (logger === false)\n        return noLogs;\n    if (logger === undefined)\n        return console;\n    if (logger.log && logger.warn && logger.error)\n        return logger;\n    throw new Error(\"logger must implement log, warn and error methods\");\n}\nconst KEYWORD_NAME = /^[a-z_$][a-z0-9_$:-]*$/i;\nfunction checkKeyword(keyword, def) {\n    const { RULES } = this;\n    (0, util_1.eachItem)(keyword, (kwd) => {\n        if (RULES.keywords[kwd])\n            throw new Error(`Keyword ${kwd} is already defined`);\n        if (!KEYWORD_NAME.test(kwd))\n            throw new Error(`Keyword ${kwd} has invalid name`);\n    });\n    if (!def)\n        return;\n    if (def.$data && !(\"code\" in def || \"validate\" in def)) {\n        throw new Error('$data keyword must have \"code\" or \"validate\" function');\n    }\n}\nfunction addRule(keyword, definition, dataType) {\n    var _a;\n    const post = definition === null || definition === void 0 ? void 0 : definition.post;\n    if (dataType && post)\n        throw new Error('keyword with \"post\" flag cannot have \"type\"');\n    const { RULES } = this;\n    let ruleGroup = post ? RULES.post : RULES.rules.find(({ type: t }) => t === dataType);\n    if (!ruleGroup) {\n        ruleGroup = { type: dataType, rules: [] };\n        RULES.rules.push(ruleGroup);\n    }\n    RULES.keywords[keyword] = true;\n    if (!definition)\n        return;\n    const rule = {\n        keyword,\n        definition: {\n            ...definition,\n            type: (0, dataType_1.getJSONTypes)(definition.type),\n            schemaType: (0, dataType_1.getJSONTypes)(definition.schemaType),\n        },\n    };\n    if (definition.before)\n        addBeforeRule.call(this, ruleGroup, rule, definition.before);\n    else\n        ruleGroup.rules.push(rule);\n    RULES.all[keyword] = rule;\n    (_a = definition.implements) === null || _a === void 0 ? void 0 : _a.forEach((kwd) => this.addKeyword(kwd));\n}\nfunction addBeforeRule(ruleGroup, rule, before) {\n    const i = ruleGroup.rules.findIndex((_rule) => _rule.keyword === before);\n    if (i >= 0) {\n        ruleGroup.rules.splice(i, 0, rule);\n    }\n    else {\n        ruleGroup.rules.push(rule);\n        this.logger.warn(`rule ${before} is not defined`);\n    }\n}\nfunction keywordMetaschema(def) {\n    let { metaSchema } = def;\n    if (metaSchema === undefined)\n        return;\n    if (def.$data && this.opts.$data)\n        metaSchema = schemaOrData(metaSchema);\n    def.validateSchema = this.compile(metaSchema, true);\n}\nconst $dataRef = {\n    $ref: \"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#\",\n};\nfunction schemaOrData(schema) {\n    return { anyOf: [schema, $dataRef] };\n}\n//# sourceMappingURL=core.js.map+/dist/compile/validate/applicability.js.map\u0003\u0007{\"version\":3,\"file\":\"applicability.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../lib/compile/validate/applicability.ts\"],\"names\":[],\"mappings\":\";;;AAIA,SAAgB,qBAAqB,CACnC,EAAC,MAAM,EAAE,IAAI,EAAe,EAC5B,IAAc;IAEd,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IACpC,OAAO,KAAK,IAAI,KAAK,KAAK,IAAI,IAAI,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;AACjE,CAAC;AAND,sDAMC;AAED,SAAgB,cAAc,CAAC,MAAuB,EAAE,KAAgB;IACtE,OAAO,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAA;AAChE,CAAC;AAFD,wCAEC;AAED,SAAgB,aAAa,CAAC,MAAuB,EAAE,IAAU;;IAC/D,OAAO,CACL,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,SAAS;SAClC,MAAA,IAAI,CAAC,UAAU,CAAC,UAAU,0CAAE,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC,CAAA,CACrE,CAAA;AACH,CAAC;AALD,sCAKC\"}/dist/runtime/uri.js.mapĶ{\"version\":3,\"file\":\"uri.js\",\"sourceRoot\":\"\",\"sources\":[\"../../lib/runtime/uri.ts\"],\"names\":[],\"mappings\":\";;AAAA,8BAA6B;AAG3B,GAAW,CAAC,IAAI,GAAG,yCAAyC,CAAA;AAE9D,kBAAe,GAAU,CAAA\"}\"/dist/compile/codegen/scope.js.map\u0013{\"version\":3,\"file\":\"scope.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../lib/compile/codegen/scope.ts\"],\"names\":[],\"mappings\":\"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\"}$/dist/compile/validate/boolSchema.js\u0005\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.boolOrEmptySchema = exports.topBoolOrEmptySchema = void 0;\nconst errors_1 = require(\"../errors\");\nconst codegen_1 = require(\"../codegen\");\nconst names_1 = require(\"../names\");\nconst boolError = {\n    message: \"boolean schema is false\",\n};\nfunction topBoolOrEmptySchema(it) {\n    const { gen, schema, validateName } = it;\n    if (schema === false) {\n        falseSchemaError(it, false);\n    }\n    else if (typeof schema == \"object\" && schema.$async === true) {\n        gen.return(names_1.default.data);\n    }\n    else {\n        gen.assign((0, codegen_1._) `${validateName}.errors`, null);\n        gen.return(true);\n    }\n}\nexports.topBoolOrEmptySchema = topBoolOrEmptySchema;\nfunction boolOrEmptySchema(it, valid) {\n    const { gen, schema } = it;\n    if (schema === false) {\n        gen.var(valid, false); // TODO var\n        falseSchemaError(it);\n    }\n    else {\n        gen.var(valid, true); // TODO var\n    }\n}\nexports.boolOrEmptySchema = boolOrEmptySchema;\nfunction falseSchemaError(it, overrideAllErrors) {\n    const { gen, data } = it;\n    // TODO maybe some other interface should be used for non-keyword validation errors...\n    const cxt = {\n        gen,\n        keyword: \"false schema\",\n        data,\n        schema: false,\n        schemaCode: false,\n        schemaValue: false,\n        params: {},\n        it,\n    };\n    (0, errors_1.reportError)(cxt, boolError, undefined, overrideAllErrors);\n}\n//# sourceMappingURL=boolSchema.js.map(/dist/vocabularies/validation/pattern.js\u0003\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst code_1 = require(\"../code\");\nconst codegen_1 = require(\"../../compile/codegen\");\nconst error = {\n    message: ({ schemaCode }) => (0, codegen_1.str) `must match pattern \"${schemaCode}\"`,\n    params: ({ schemaCode }) => (0, codegen_1._) `{pattern: ${schemaCode}}`,\n};\nconst def = {\n    keyword: \"pattern\",\n    type: \"string\",\n    schemaType: \"string\",\n    $data: true,\n    error,\n    code(cxt) {\n        const { data, $data, schema, schemaCode, it } = cxt;\n        // TODO regexp should be wrapped in try/catchs\n        const u = it.opts.unicodeRegExp ? \"u\" : \"\";\n        const regExp = $data ? (0, codegen_1._) `(new RegExp(${schemaCode}, ${u}))` : (0, code_1.usePattern)(cxt, schema);\n        cxt.fail$data((0, codegen_1._) `!${regExp}.test(${data})`);\n    },\n};\nexports.default = def;\n//# sourceMappingURL=pattern.js.map\"/lib/compile/validate/subschema.ts\u0011\u000eimport type {AnySchema} from \"../../types\"\nimport type {SchemaObjCxt} from \"..\"\nimport {_, str, getProperty, Code, Name} from \"../codegen\"\nimport {escapeFragment, getErrorPath, Type} from \"../util\"\nimport type {JSONType} from \"../rules\"\n\nexport interface SubschemaContext {\n  // TODO use Optional? align with SchemCxt property types\n  schema: AnySchema\n  schemaPath: Code\n  errSchemaPath: string\n  topSchemaRef?: Code\n  errorPath?: Code\n  dataLevel?: number\n  dataTypes?: JSONType[]\n  data?: Name\n  parentData?: Name\n  parentDataProperty?: Code | number\n  dataNames?: Name[]\n  dataPathArr?: (Code | number)[]\n  propertyName?: Name\n  jtdDiscriminator?: string\n  jtdMetadata?: boolean\n  compositeRule?: true\n  createErrors?: boolean\n  allErrors?: boolean\n}\n\nexport type SubschemaArgs = Partial<{\n  keyword: string\n  schemaProp: string | number\n  schema: AnySchema\n  schemaPath: Code\n  errSchemaPath: string\n  topSchemaRef: Code\n  data: Name | Code\n  dataProp: Code | string | number\n  dataTypes: JSONType[]\n  definedProperties: Set<string>\n  propertyName: Name\n  dataPropType: Type\n  jtdDiscriminator: string\n  jtdMetadata: boolean\n  compositeRule: true\n  createErrors: boolean\n  allErrors: boolean\n}>\n\nexport function getSubschema(\n  it: SchemaObjCxt,\n  {keyword, schemaProp, schema, schemaPath, errSchemaPath, topSchemaRef}: SubschemaArgs\n): SubschemaContext {\n  if (keyword !== undefined && schema !== undefined) {\n    throw new Error('both \"keyword\" and \"schema\" passed, only one allowed')\n  }\n\n  if (keyword !== undefined) {\n    const sch = it.schema[keyword]\n    return schemaProp === undefined\n      ? {\n          schema: sch,\n          schemaPath: _`${it.schemaPath}${getProperty(keyword)}`,\n          errSchemaPath: `${it.errSchemaPath}/${keyword}`,\n        }\n      : {\n          schema: sch[schemaProp],\n          schemaPath: _`${it.schemaPath}${getProperty(keyword)}${getProperty(schemaProp)}`,\n          errSchemaPath: `${it.errSchemaPath}/${keyword}/${escapeFragment(schemaProp)}`,\n        }\n  }\n\n  if (schema !== undefined) {\n    if (schemaPath === undefined || errSchemaPath === undefined || topSchemaRef === undefined) {\n      throw new Error('\"schemaPath\", \"errSchemaPath\" and \"topSchemaRef\" are required with \"schema\"')\n    }\n    return {\n      schema,\n      schemaPath,\n      topSchemaRef,\n      errSchemaPath,\n    }\n  }\n\n  throw new Error('either \"keyword\" or \"schema\" must be passed')\n}\n\nexport function extendSubschemaData(\n  subschema: SubschemaContext,\n  it: SchemaObjCxt,\n  {dataProp, dataPropType: dpType, data, dataTypes, propertyName}: SubschemaArgs\n): void {\n  if (data !== undefined && dataProp !== undefined) {\n    throw new Error('both \"data\" and \"dataProp\" passed, only one allowed')\n  }\n\n  const {gen} = it\n\n  if (dataProp !== undefined) {\n    const {errorPath, dataPathArr, opts} = it\n    const nextData = gen.let(\"data\", _`${it.data}${getProperty(dataProp)}`, true)\n    dataContextProps(nextData)\n    subschema.errorPath = str`${errorPath}${getErrorPath(dataProp, dpType, opts.jsPropertySyntax)}`\n    subschema.parentDataProperty = _`${dataProp}`\n    subschema.dataPathArr = [...dataPathArr, subschema.parentDataProperty]\n  }\n\n  if (data !== undefined) {\n    const nextData = data instanceof Name ? data : gen.let(\"data\", data, true) // replaceable if used once?\n    dataContextProps(nextData)\n    if (propertyName !== undefined) subschema.propertyName = propertyName\n    // TODO something is possibly wrong here with not changing parentDataProperty and not appending dataPathArr\n  }\n\n  if (dataTypes) subschema.dataTypes = dataTypes\n\n  function dataContextProps(_nextData: Name): void {\n    subschema.data = _nextData\n    subschema.dataLevel = it.dataLevel + 1\n    subschema.dataTypes = []\n    it.definedProperties = new Set<string>()\n    subschema.parentData = it.data\n    subschema.dataNames = [...it.dataNames, _nextData]\n  }\n}\n\nexport function extendSubschemaMode(\n  subschema: SubschemaContext,\n  {jtdDiscriminator, jtdMetadata, compositeRule, createErrors, allErrors}: SubschemaArgs\n): void {\n  if (compositeRule !== undefined) subschema.compositeRule = compositeRule\n  if (createErrors !== undefined) subschema.createErrors = createErrors\n  if (allErrors !== undefined) subschema.allErrors = allErrors\n  subschema.jtdDiscriminator = jtdDiscriminator // not inherited\n  subschema.jtdMetadata = jtdMetadata // not inherited\n}\n#/lib/refs/json-schema-draft-07.json\u000e{\n  \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n  \"$id\": \"http://json-schema.org/draft-07/schema#\",\n  \"title\": \"Core schema meta-schema\",\n  \"definitions\": {\n    \"schemaArray\": {\n      \"type\": \"array\",\n      \"minItems\": 1,\n      \"items\": {\"$ref\": \"#\"}\n    },\n    \"nonNegativeInteger\": {\n      \"type\": \"integer\",\n      \"minimum\": 0\n    },\n    \"nonNegativeIntegerDefault0\": {\n      \"allOf\": [{\"$ref\": \"#/definitions/nonNegativeInteger\"}, {\"default\": 0}]\n    },\n    \"simpleTypes\": {\n      \"enum\": [\"array\", \"boolean\", \"integer\", \"null\", \"number\", \"object\", \"string\"]\n    },\n    \"stringArray\": {\n      \"type\": \"array\",\n      \"items\": {\"type\": \"string\"},\n      \"uniqueItems\": true,\n      \"default\": []\n    }\n  },\n  \"type\": [\"object\", \"boolean\"],\n  \"properties\": {\n    \"$id\": {\n      \"type\": \"string\",\n      \"format\": \"uri-reference\"\n    },\n    \"$schema\": {\n      \"type\": \"string\",\n      \"format\": \"uri\"\n    },\n    \"$ref\": {\n      \"type\": \"string\",\n      \"format\": \"uri-reference\"\n    },\n    \"$comment\": {\n      \"type\": \"string\"\n    },\n    \"title\": {\n      \"type\": \"string\"\n    },\n    \"description\": {\n      \"type\": \"string\"\n    },\n    \"default\": true,\n    \"readOnly\": {\n      \"type\": \"boolean\",\n      \"default\": false\n    },\n    \"examples\": {\n      \"type\": \"array\",\n      \"items\": true\n    },\n    \"multipleOf\": {\n      \"type\": \"number\",\n      \"exclusiveMinimum\": 0\n    },\n    \"maximum\": {\n      \"type\": \"number\"\n    },\n    \"exclusiveMaximum\": {\n      \"type\": \"number\"\n    },\n    \"minimum\": {\n      \"type\": \"number\"\n    },\n    \"exclusiveMinimum\": {\n      \"type\": \"number\"\n    },\n    \"maxLength\": {\"$ref\": \"#/definitions/nonNegativeInteger\"},\n    \"minLength\": {\"$ref\": \"#/definitions/nonNegativeIntegerDefault0\"},\n    \"pattern\": {\n      \"type\": \"string\",\n      \"format\": \"regex\"\n    },\n    \"additionalItems\": {\"$ref\": \"#\"},\n    \"items\": {\n      \"anyOf\": [{\"$ref\": \"#\"}, {\"$ref\": \"#/definitions/schemaArray\"}],\n      \"default\": true\n    },\n    \"maxItems\": {\"$ref\": \"#/definitions/nonNegativeInteger\"},\n    \"minItems\": {\"$ref\": \"#/definitions/nonNegativeIntegerDefault0\"},\n    \"uniqueItems\": {\n      \"type\": \"boolean\",\n      \"default\": false\n    },\n    \"contains\": {\"$ref\": \"#\"},\n    \"maxProperties\": {\"$ref\": \"#/definitions/nonNegativeInteger\"},\n    \"minProperties\": {\"$ref\": \"#/definitions/nonNegativeIntegerDefault0\"},\n    \"required\": {\"$ref\": \"#/definitions/stringArray\"},\n    \"additionalProperties\": {\"$ref\": \"#\"},\n    \"definitions\": {\n      \"type\": \"object\",\n      \"additionalProperties\": {\"$ref\": \"#\"},\n      \"default\": {}\n    },\n    \"properties\": {\n      \"type\": \"object\",\n      \"additionalProperties\": {\"$ref\": \"#\"},\n      \"default\": {}\n    },\n    \"patternProperties\": {\n      \"type\": \"object\",\n      \"additionalProperties\": {\"$ref\": \"#\"},\n      \"propertyNames\": {\"format\": \"regex\"},\n      \"default\": {}\n    },\n    \"dependencies\": {\n      \"type\": \"object\",\n      \"additionalProperties\": {\n        \"anyOf\": [{\"$ref\": \"#\"}, {\"$ref\": \"#/definitions/stringArray\"}]\n      }\n    },\n    \"propertyNames\": {\"$ref\": \"#\"},\n    \"const\": true,\n    \"enum\": {\n      \"type\": \"array\",\n      \"items\": true,\n      \"minItems\": 1,\n      \"uniqueItems\": true\n    },\n    \"type\": {\n      \"anyOf\": [\n        {\"$ref\": \"#/definitions/simpleTypes\"},\n        {\n          \"type\": \"array\",\n          \"items\": {\"$ref\": \"#/definitions/simpleTypes\"},\n          \"minItems\": 1,\n          \"uniqueItems\": true\n        }\n      ]\n    },\n    \"format\": {\"type\": \"string\"},\n    \"contentMediaType\": {\"type\": \"string\"},\n    \"contentEncoding\": {\"type\": \"string\"},\n    \"if\": {\"$ref\": \"#\"},\n    \"then\": {\"$ref\": \"#\"},\n    \"else\": {\"$ref\": \"#\"},\n    \"allOf\": {\"$ref\": \"#/definitions/schemaArray\"},\n    \"anyOf\": {\"$ref\": \"#/definitions/schemaArray\"},\n    \"oneOf\": {\"$ref\": \"#/definitions/schemaArray\"},\n    \"not\": {\"$ref\": \"#\"}\n  },\n  \"default\": true\n}\n&/dist/vocabularies/applicator/anyOf.js\u0001W\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst code_1 = require(\"../code\");\nconst def = {\n    keyword: \"anyOf\",\n    schemaType: \"array\",\n    trackErrors: true,\n    code: code_1.validateUnion,\n    error: { message: \"must match a schema in anyOf\" },\n};\nexports.default = def;\n//# sourceMappingURL=anyOf.js.map-/dist/vocabularies/validation/limitItems.d.tsximport type { CodeKeywordDefinition } from \"../../types\";\ndeclare const def: CodeKeywordDefinition;\nexport default def;\n-/dist/vocabularies/discriminator/types.js.map{\"version\":3,\"file\":\"types.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../lib/vocabularies/discriminator/types.ts\"],\"names\":[],\"mappings\":\";;;AAEA,IAAY,UAGX;AAHD,WAAY,UAAU;IACpB,yBAAW,CAAA;IACX,iCAAmB,CAAA;AACrB,CAAC,EAHW,UAAU,GAAV,kBAAU,KAAV,kBAAU,QAGrB\"}7/dist/vocabularies/unevaluated/unevaluatedProperties.js\n0\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst names_1 = require(\"../../compile/names\");\nconst error = {\n    message: \"must NOT have unevaluated properties\",\n    params: ({ params }) => (0, codegen_1._) `{unevaluatedProperty: ${params.unevaluatedProperty}}`,\n};\nconst def = {\n    keyword: \"unevaluatedProperties\",\n    type: \"object\",\n    schemaType: [\"boolean\", \"object\"],\n    trackErrors: true,\n    error,\n    code(cxt) {\n        const { gen, schema, data, errsCount, it } = cxt;\n        /* istanbul ignore if */\n        if (!errsCount)\n            throw new Error(\"ajv implementation error\");\n        const { allErrors, props } = it;\n        if (props instanceof codegen_1.Name) {\n            gen.if((0, codegen_1._) `${props} !== true`, () => gen.forIn(\"key\", data, (key) => gen.if(unevaluatedDynamic(props, key), () => unevaluatedPropCode(key))));\n        }\n        else if (props !== true) {\n            gen.forIn(\"key\", data, (key) => props === undefined\n                ? unevaluatedPropCode(key)\n                : gen.if(unevaluatedStatic(props, key), () => unevaluatedPropCode(key)));\n        }\n        it.props = true;\n        cxt.ok((0, codegen_1._) `${errsCount} === ${names_1.default.errors}`);\n        function unevaluatedPropCode(key) {\n            if (schema === false) {\n                cxt.setParams({ unevaluatedProperty: key });\n                cxt.error();\n                if (!allErrors)\n                    gen.break();\n                return;\n            }\n            if (!(0, util_1.alwaysValidSchema)(it, schema)) {\n                const valid = gen.name(\"valid\");\n                cxt.subschema({\n                    keyword: \"unevaluatedProperties\",\n                    dataProp: key,\n                    dataPropType: util_1.Type.Str,\n                }, valid);\n                if (!allErrors)\n                    gen.if((0, codegen_1.not)(valid), () => gen.break());\n            }\n        }\n        function unevaluatedDynamic(evaluatedProps, key) {\n            return (0, codegen_1._) `!${evaluatedProps} || !${evaluatedProps}[${key}]`;\n        }\n        function unevaluatedStatic(evaluatedProps, key) {\n            const ps = [];\n            for (const p in evaluatedProps) {\n                if (evaluatedProps[p] === true)\n                    ps.push((0, codegen_1._) `${key} !== ${p}`);\n            }\n            return (0, codegen_1.and)(...ps);\n        }\n    },\n};\nexports.default = def;\n//# sourceMappingURL=unevaluatedProperties.js.map0/dist/vocabularies/validation/limitProperties.js\u0003\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst error = {\n    message({ keyword, schemaCode }) {\n        const comp = keyword === \"maxProperties\" ? \"more\" : \"fewer\";\n        return (0, codegen_1.str) `must NOT have ${comp} than ${schemaCode} properties`;\n    },\n    params: ({ schemaCode }) => (0, codegen_1._) `{limit: ${schemaCode}}`,\n};\nconst def = {\n    keyword: [\"maxProperties\", \"minProperties\"],\n    type: \"object\",\n    schemaType: \"number\",\n    $data: true,\n    error,\n    code(cxt) {\n        const { keyword, data, schemaCode } = cxt;\n        const op = keyword === \"maxProperties\" ? codegen_1.operators.GT : codegen_1.operators.LT;\n        cxt.fail$data((0, codegen_1._) `Object.keys(${data}).length ${op} ${schemaCode}`);\n    },\n};\nexports.default = def;\n//# sourceMappingURL=limitProperties.js.map/lib/vocabularies/jtd/type.ts\timport type {CodeKeywordDefinition, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, nil, or, Code} from \"../../compile/codegen\"\nimport validTimestamp from \"../../runtime/timestamp\"\nimport {useFunc} from \"../../compile/util\"\nimport {checkMetadata} from \"./metadata\"\nimport {typeErrorMessage, typeErrorParams, _JTDTypeError} from \"./error\"\n\nexport type JTDTypeError = _JTDTypeError<\"type\", JTDType, JTDType>\n\nexport type IntType = \"int8\" | \"uint8\" | \"int16\" | \"uint16\" | \"int32\" | \"uint32\"\n\nexport const intRange: {[T in IntType]: [number, number, number]} = {\n  int8: [-128, 127, 3],\n  uint8: [0, 255, 3],\n  int16: [-32768, 32767, 5],\n  uint16: [0, 65535, 5],\n  int32: [-2147483648, 2147483647, 10],\n  uint32: [0, 4294967295, 10],\n}\n\nexport type JTDType = \"boolean\" | \"string\" | \"timestamp\" | \"float32\" | \"float64\" | IntType\n\nconst error: KeywordErrorDefinition = {\n  message: (cxt) => typeErrorMessage(cxt, cxt.schema),\n  params: (cxt) => typeErrorParams(cxt, cxt.schema),\n}\n\nfunction timestampCode(cxt: KeywordCxt): Code {\n  const {gen, data, it} = cxt\n  const {timestamp, allowDate} = it.opts\n  if (timestamp === \"date\") return _`${data} instanceof Date `\n  const vts = useFunc(gen, validTimestamp)\n  const allowDateArg = allowDate ? _`, true` : nil\n  const validString = _`typeof ${data} == \"string\" && ${vts}(${data}${allowDateArg})`\n  return timestamp === \"string\" ? validString : or(_`${data} instanceof Date`, validString)\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"type\",\n  schemaType: \"string\",\n  error,\n  code(cxt: KeywordCxt) {\n    checkMetadata(cxt)\n    const {data, schema, parentSchema, it} = cxt\n    let cond: Code\n    switch (schema) {\n      case \"boolean\":\n      case \"string\":\n        cond = _`typeof ${data} == ${schema}`\n        break\n      case \"timestamp\": {\n        cond = timestampCode(cxt)\n        break\n      }\n      case \"float32\":\n      case \"float64\":\n        cond = _`typeof ${data} == \"number\"`\n        break\n      default: {\n        const sch = schema as IntType\n        cond = _`typeof ${data} == \"number\" && isFinite(${data}) && !(${data} % 1)`\n        if (!it.opts.int32range && (sch === \"int32\" || sch === \"uint32\")) {\n          if (sch === \"uint32\") cond = _`${cond} && ${data} >= 0`\n        } else {\n          const [min, max] = intRange[sch]\n          cond = _`${cond} && ${data} >= ${min} && ${data} <= ${max}`\n        }\n      }\n    }\n    cxt.pass(parentSchema.nullable ? or(_`${data} === null`, cond) : cond)\n  },\n}\n\nexport default def\n/dist/compile/codegen/scope.js\u0014V\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ValueScope = exports.ValueScopeName = exports.Scope = exports.varKinds = exports.UsedValueState = void 0;\nconst code_1 = require(\"./code\");\nclass ValueError extends Error {\n    constructor(name) {\n        super(`CodeGen: \"code\" for ${name} not defined`);\n        this.value = name.value;\n    }\n}\nvar UsedValueState;\n(function (UsedValueState) {\n    UsedValueState[UsedValueState[\"Started\"] = 0] = \"Started\";\n    UsedValueState[UsedValueState[\"Completed\"] = 1] = \"Completed\";\n})(UsedValueState = exports.UsedValueState || (exports.UsedValueState = {}));\nexports.varKinds = {\n    const: new code_1.Name(\"const\"),\n    let: new code_1.Name(\"let\"),\n    var: new code_1.Name(\"var\"),\n};\nclass Scope {\n    constructor({ prefixes, parent } = {}) {\n        this._names = {};\n        this._prefixes = prefixes;\n        this._parent = parent;\n    }\n    toName(nameOrPrefix) {\n        return nameOrPrefix instanceof code_1.Name ? nameOrPrefix : this.name(nameOrPrefix);\n    }\n    name(prefix) {\n        return new code_1.Name(this._newName(prefix));\n    }\n    _newName(prefix) {\n        const ng = this._names[prefix] || this._nameGroup(prefix);\n        return `${prefix}${ng.index++}`;\n    }\n    _nameGroup(prefix) {\n        var _a, _b;\n        if (((_b = (_a = this._parent) === null || _a === void 0 ? void 0 : _a._prefixes) === null || _b === void 0 ? void 0 : _b.has(prefix)) || (this._prefixes && !this._prefixes.has(prefix))) {\n            throw new Error(`CodeGen: prefix \"${prefix}\" is not allowed in this scope`);\n        }\n        return (this._names[prefix] = { prefix, index: 0 });\n    }\n}\nexports.Scope = Scope;\nclass ValueScopeName extends code_1.Name {\n    constructor(prefix, nameStr) {\n        super(nameStr);\n        this.prefix = prefix;\n    }\n    setValue(value, { property, itemIndex }) {\n        this.value = value;\n        this.scopePath = (0, code_1._) `.${new code_1.Name(property)}[${itemIndex}]`;\n    }\n}\nexports.ValueScopeName = ValueScopeName;\nconst line = (0, code_1._) `\\n`;\nclass ValueScope extends Scope {\n    constructor(opts) {\n        super(opts);\n        this._values = {};\n        this._scope = opts.scope;\n        this.opts = { ...opts, _n: opts.lines ? line : code_1.nil };\n    }\n    get() {\n        return this._scope;\n    }\n    name(prefix) {\n        return new ValueScopeName(prefix, this._newName(prefix));\n    }\n    value(nameOrPrefix, value) {\n        var _a;\n        if (value.ref === undefined)\n            throw new Error(\"CodeGen: ref must be passed in value\");\n        const name = this.toName(nameOrPrefix);\n        const { prefix } = name;\n        const valueKey = (_a = value.key) !== null && _a !== void 0 ? _a : value.ref;\n        let vs = this._values[prefix];\n        if (vs) {\n            const _name = vs.get(valueKey);\n            if (_name)\n                return _name;\n        }\n        else {\n            vs = this._values[prefix] = new Map();\n        }\n        vs.set(valueKey, name);\n        const s = this._scope[prefix] || (this._scope[prefix] = []);\n        const itemIndex = s.length;\n        s[itemIndex] = value.ref;\n        name.setValue(value, { property: prefix, itemIndex });\n        return name;\n    }\n    getValue(prefix, keyOrRef) {\n        const vs = this._values[prefix];\n        if (!vs)\n            return;\n        return vs.get(keyOrRef);\n    }\n    scopeRefs(scopeName, values = this._values) {\n        return this._reduceValues(values, (name) => {\n            if (name.scopePath === undefined)\n                throw new Error(`CodeGen: name \"${name}\" has no value`);\n            return (0, code_1._) `${scopeName}${name.scopePath}`;\n        });\n    }\n    scopeCode(values = this._values, usedValues, getCode) {\n        return this._reduceValues(values, (name) => {\n            if (name.value === undefined)\n                throw new Error(`CodeGen: name \"${name}\" has no value`);\n            return name.value.code;\n        }, usedValues, getCode);\n    }\n    _reduceValues(values, valueCode, usedValues = {}, getCode) {\n        let code = code_1.nil;\n        for (const prefix in values) {\n            const vs = values[prefix];\n            if (!vs)\n                continue;\n            const nameSet = (usedValues[prefix] = usedValues[prefix] || new Map());\n            vs.forEach((name) => {\n                if (nameSet.has(name))\n                    return;\n                nameSet.set(name, UsedValueState.Started);\n                let c = valueCode(name);\n                if (c) {\n                    const def = this.opts.es5 ? exports.varKinds.var : exports.varKinds.const;\n                    code = (0, code_1._) `${code}${def} ${name} = ${c};${this.opts._n}`;\n                }\n                else if ((c = getCode === null || getCode === void 0 ? void 0 : getCode(name))) {\n                    code = (0, code_1._) `${code}${c}${this.opts._n}`;\n                }\n                else {\n                    throw new ValueError(name);\n                }\n                nameSet.set(name, UsedValueState.Completed);\n            });\n        }\n        return code;\n    }\n}\nexports.ValueScope = ValueScope;\n//# sourceMappingURL=scope.js.map*/dist/refs/json-schema-2019-09/schema.json\u0006+{\n  \"$schema\": \"https://json-schema.org/draft/2019-09/schema\",\n  \"$id\": \"https://json-schema.org/draft/2019-09/schema\",\n  \"$vocabulary\": {\n    \"https://json-schema.org/draft/2019-09/vocab/core\": true,\n    \"https://json-schema.org/draft/2019-09/vocab/applicator\": true,\n    \"https://json-schema.org/draft/2019-09/vocab/validation\": true,\n    \"https://json-schema.org/draft/2019-09/vocab/meta-data\": true,\n    \"https://json-schema.org/draft/2019-09/vocab/format\": false,\n    \"https://json-schema.org/draft/2019-09/vocab/content\": true\n  },\n  \"$recursiveAnchor\": true,\n\n  \"title\": \"Core and Validation specifications meta-schema\",\n  \"allOf\": [\n    {\"$ref\": \"meta/core\"},\n    {\"$ref\": \"meta/applicator\"},\n    {\"$ref\": \"meta/validation\"},\n    {\"$ref\": \"meta/meta-data\"},\n    {\"$ref\": \"meta/format\"},\n    {\"$ref\": \"meta/content\"}\n  ],\n  \"type\": [\"object\", \"boolean\"],\n  \"properties\": {\n    \"definitions\": {\n      \"$comment\": \"While no longer an official keyword as it is replaced by $defs, this keyword is retained in the meta-schema to prevent incompatible extensions as it remains in common use.\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\"$recursiveRef\": \"#\"},\n      \"default\": {}\n    },\n    \"dependencies\": {\n      \"$comment\": \"\\\"dependencies\\\" is no longer a keyword, but schema authors should avoid redefining it to facilitate a smooth transition to \\\"dependentSchemas\\\" and \\\"dependentRequired\\\"\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\n        \"anyOf\": [{\"$recursiveRef\": \"#\"}, {\"$ref\": \"meta/validation#/$defs/stringArray\"}]\n      }\n    }\n  }\n}\n/lib/refs/jtd-schema.ts\n\u001aimport {SchemaObject} from \"../types\"\n\ntype MetaSchema = (root: boolean) => SchemaObject\n\nconst shared: MetaSchema = (root) => {\n  const sch: SchemaObject = {\n    nullable: {type: \"boolean\"},\n    metadata: {\n      optionalProperties: {\n        union: {elements: {ref: \"schema\"}},\n      },\n      additionalProperties: true,\n    },\n  }\n  if (root) sch.definitions = {values: {ref: \"schema\"}}\n  return sch\n}\n\nconst emptyForm: MetaSchema = (root) => ({\n  optionalProperties: shared(root),\n})\n\nconst refForm: MetaSchema = (root) => ({\n  properties: {\n    ref: {type: \"string\"},\n  },\n  optionalProperties: shared(root),\n})\n\nconst typeForm: MetaSchema = (root) => ({\n  properties: {\n    type: {\n      enum: [\n        \"boolean\",\n        \"timestamp\",\n        \"string\",\n        \"float32\",\n        \"float64\",\n        \"int8\",\n        \"uint8\",\n        \"int16\",\n        \"uint16\",\n        \"int32\",\n        \"uint32\",\n      ],\n    },\n  },\n  optionalProperties: shared(root),\n})\n\nconst enumForm: MetaSchema = (root) => ({\n  properties: {\n    enum: {elements: {type: \"string\"}},\n  },\n  optionalProperties: shared(root),\n})\n\nconst elementsForm: MetaSchema = (root) => ({\n  properties: {\n    elements: {ref: \"schema\"},\n  },\n  optionalProperties: shared(root),\n})\n\nconst propertiesForm: MetaSchema = (root) => ({\n  properties: {\n    properties: {values: {ref: \"schema\"}},\n  },\n  optionalProperties: {\n    optionalProperties: {values: {ref: \"schema\"}},\n    additionalProperties: {type: \"boolean\"},\n    ...shared(root),\n  },\n})\n\nconst optionalPropertiesForm: MetaSchema = (root) => ({\n  properties: {\n    optionalProperties: {values: {ref: \"schema\"}},\n  },\n  optionalProperties: {\n    additionalProperties: {type: \"boolean\"},\n    ...shared(root),\n  },\n})\n\nconst discriminatorForm: MetaSchema = (root) => ({\n  properties: {\n    discriminator: {type: \"string\"},\n    mapping: {\n      values: {\n        metadata: {\n          union: [propertiesForm(false), optionalPropertiesForm(false)],\n        },\n      },\n    },\n  },\n  optionalProperties: shared(root),\n})\n\nconst valuesForm: MetaSchema = (root) => ({\n  properties: {\n    values: {ref: \"schema\"},\n  },\n  optionalProperties: shared(root),\n})\n\nconst schema: MetaSchema = (root) => ({\n  metadata: {\n    union: [\n      emptyForm,\n      refForm,\n      typeForm,\n      enumForm,\n      elementsForm,\n      propertiesForm,\n      optionalPropertiesForm,\n      discriminatorForm,\n      valuesForm,\n    ].map((s) => s(root)),\n  },\n})\n\nconst jtdMetaSchema: SchemaObject = {\n  definitions: {\n    schema: schema(false),\n  },\n  ...schema(true),\n}\n\nexport default jtdMetaSchema\n%/dist/vocabularies/format/format.d.tsimport type { CodeKeywordDefinition, ErrorObject } from \"../../types\";\nexport type FormatError = ErrorObject<\"format\", {\n    format: string;\n}, string | {\n    $data: string;\n}>;\ndeclare const def: CodeKeywordDefinition;\nexport default def;\n*/lib/vocabularies/validation/multipleOf.ts\u00040import type {CodeKeywordDefinition, ErrorObject, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str} from \"../../compile/codegen\"\n\nexport type MultipleOfError = ErrorObject<\n  \"multipleOf\",\n  {multipleOf: number},\n  number | {$data: string}\n>\n\nconst error: KeywordErrorDefinition = {\n  message: ({schemaCode}) => str`must be multiple of ${schemaCode}`,\n  params: ({schemaCode}) => _`{multipleOf: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"multipleOf\",\n  type: \"number\",\n  schemaType: \"number\",\n  $data: true,\n  error,\n  code(cxt: KeywordCxt) {\n    const {gen, data, schemaCode, it} = cxt\n    // const bdt = bad$DataType(schemaCode, <string>def.schemaType, $data)\n    const prec = it.opts.multipleOfPrecision\n    const res = gen.let(\"res\")\n    const invalid = prec\n      ? _`Math.abs(Math.round(${res}) - ${res}) > 1e-${prec}`\n      : _`${res} !== parseInt(${res})`\n    cxt.fail$data(_`(${schemaCode} === 0 || (${res} = ${data}/${schemaCode}, ${invalid}))`)\n  },\n}\n\nexport default def\n\"/dist/vocabularies/jtd/values.d.tsimport type { CodeKeywordDefinition, SchemaObject } from \"../../types\";\nimport { _JTDTypeError } from \"./error\";\nexport type JTDValuesError = _JTDTypeError<\"values\", \"object\", SchemaObject>;\ndeclare const def: CodeKeywordDefinition;\nexport default def;\n/lib/vocabularies/jtd/values.ts\u0006import type {CodeKeywordDefinition, SchemaObject} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {alwaysValidSchema, Type} from \"../../compile/util\"\nimport {not, or, Name} from \"../../compile/codegen\"\nimport {checkMetadata} from \"./metadata\"\nimport {checkNullableObject} from \"./nullable\"\nimport {typeError, _JTDTypeError} from \"./error\"\n\nexport type JTDValuesError = _JTDTypeError<\"values\", \"object\", SchemaObject>\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"values\",\n  schemaType: \"object\",\n  error: typeError(\"object\"),\n  code(cxt: KeywordCxt) {\n    checkMetadata(cxt)\n    const {gen, data, schema, it} = cxt\n    const [valid, cond] = checkNullableObject(cxt, data)\n    if (alwaysValidSchema(it, schema)) {\n      gen.if(not(or(cond, valid)), () => cxt.error())\n    } else {\n      gen.if(cond)\n      gen.assign(valid, validateMap())\n      gen.elseIf(not(valid))\n      cxt.error()\n      gen.endIf()\n    }\n    cxt.ok(valid)\n\n    function validateMap(): Name | boolean {\n      const _valid = gen.name(\"valid\")\n      if (it.allErrors) {\n        const validMap = gen.let(\"valid\", true)\n        validateValues(() => gen.assign(validMap, false))\n        return validMap\n      }\n      gen.var(_valid, true)\n      validateValues(() => gen.break())\n      return _valid\n\n      function validateValues(notValid: () => void): void {\n        gen.forIn(\"key\", data, (key) => {\n          cxt.subschema(\n            {\n              keyword: \"values\",\n              dataProp: key,\n              dataPropType: Type.Str,\n            },\n            _valid\n          )\n          gen.if(not(_valid), notValid)\n        })\n      }\n    }\n  },\n}\n\nexport default def\n*/dist/vocabularies/validation/const.js.map\u0003\u001f{\"version\":3,\"file\":\"const.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../lib/vocabularies/validation/const.ts\"],\"names\":[],\"mappings\":\";;AAEA,mDAAuC;AACvC,6CAA0C;AAC1C,+CAAuC;AAIvC,MAAM,KAAK,GAA2B;IACpC,OAAO,EAAE,2BAA2B;IACpC,MAAM,EAAE,CAAC,EAAC,UAAU,EAAC,EAAE,EAAE,CAAC,IAAA,WAAC,EAAA,kBAAkB,UAAU,GAAG;CAC3D,CAAA;AAED,MAAM,GAAG,GAA0B;IACjC,OAAO,EAAE,OAAO;IAChB,KAAK,EAAE,IAAI;IACX,KAAK;IACL,IAAI,CAAC,GAAe;QAClB,MAAM,EAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAC,GAAG,GAAG,CAAA;QAClD,IAAI,KAAK,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,IAAI,QAAQ,CAAC,EAAE;YAClD,GAAG,CAAC,SAAS,CAAC,IAAA,WAAC,EAAA,IAAI,IAAA,cAAO,EAAC,GAAG,EAAE,eAAK,CAAC,IAAI,IAAI,KAAK,UAAU,GAAG,CAAC,CAAA;SAClE;aAAM;YACL,GAAG,CAAC,IAAI,CAAC,IAAA,WAAC,EAAA,GAAG,MAAM,QAAQ,IAAI,EAAE,CAAC,CAAA;SACnC;IACH,CAAC;CACF,CAAA;AAED,kBAAe,GAAG,CAAA\"}0/dist/refs/json-schema-2020-12/meta/content.json\u0001{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"$id\": \"https://json-schema.org/draft/2020-12/meta/content\",\n  \"$vocabulary\": {\n    \"https://json-schema.org/draft/2020-12/vocab/content\": true\n  },\n  \"$dynamicAnchor\": \"meta\",\n\n  \"title\": \"Content vocabulary meta-schema\",\n\n  \"type\": [\"object\", \"boolean\"],\n  \"properties\": {\n    \"contentEncoding\": {\"type\": \"string\"},\n    \"contentMediaType\": {\"type\": \"string\"},\n    \"contentSchema\": {\"$dynamicRef\": \"#meta\"}\n  }\n}\n/lib/compile/index.ts0\bimport type {\n  AnySchema,\n  AnySchemaObject,\n  AnyValidateFunction,\n  AsyncValidateFunction,\n  EvaluatedProperties,\n  EvaluatedItems,\n} from \"../types\"\nimport type Ajv from \"../core\"\nimport type {InstanceOptions} from \"../core\"\nimport {CodeGen, _, nil, stringify, Name, Code, ValueScopeName} from \"./codegen\"\nimport ValidationError from \"../runtime/validation_error\"\nimport N from \"./names\"\nimport {LocalRefs, getFullPath, _getFullPath, inlineRef, normalizeId, resolveUrl} from \"./resolve\"\nimport {schemaHasRulesButRef, unescapeFragment} from \"./util\"\nimport {validateFunctionCode} from \"./validate\"\nimport * as URI from \"uri-js\"\nimport {JSONType} from \"./rules\"\n\nexport type SchemaRefs = {\n  [Ref in string]?: SchemaEnv | AnySchema\n}\n\nexport interface SchemaCxt {\n  readonly gen: CodeGen\n  readonly allErrors?: boolean // validation mode - whether to collect all errors or break on error\n  readonly data: Name // Name with reference to the current part of data instance\n  readonly parentData: Name // should be used in keywords modifying data\n  readonly parentDataProperty: Code | number // should be used in keywords modifying data\n  readonly dataNames: Name[]\n  readonly dataPathArr: (Code | number)[]\n  readonly dataLevel: number // the level of the currently validated data,\n  // it can be used to access both the property names and the data on all levels from the top.\n  dataTypes: JSONType[] // data types applied to the current part of data instance\n  definedProperties: Set<string> // set of properties to keep track of for required checks\n  readonly topSchemaRef: Code\n  readonly validateName: Name\n  evaluated?: Name\n  readonly ValidationError?: Name\n  readonly schema: AnySchema // current schema object - equal to parentSchema passed via KeywordCxt\n  readonly schemaEnv: SchemaEnv\n  readonly rootId: string\n  baseId: string // the current schema base URI that should be used as the base for resolving URIs in references (\\$ref)\n  readonly schemaPath: Code // the run-time expression that evaluates to the property name of the current schema\n  readonly errSchemaPath: string // this is actual string, should not be changed to Code\n  readonly errorPath: Code\n  readonly propertyName?: Name\n  readonly compositeRule?: boolean // true indicates that the current schema is inside the compound keyword,\n  // where failing some rule doesn't mean validation failure (`anyOf`, `oneOf`, `not`, `if`).\n  // This flag is used to determine whether you can return validation result immediately after any error in case the option `allErrors` is not `true.\n  // You only need to use it if you have many steps in your keywords and potentially can define multiple errors.\n  props?: EvaluatedProperties | Name // properties evaluated by this schema - used by parent schema or assigned to validation function\n  items?: EvaluatedItems | Name // last item evaluated by this schema - used by parent schema or assigned to validation function\n  jtdDiscriminator?: string\n  jtdMetadata?: boolean\n  readonly createErrors?: boolean\n  readonly opts: InstanceOptions // Ajv instance option.\n  readonly self: Ajv // current Ajv instance\n}\n\nexport interface SchemaObjCxt extends SchemaCxt {\n  readonly schema: AnySchemaObject\n}\ninterface SchemaEnvArgs {\n  readonly schema: AnySchema\n  readonly schemaId?: \"$id\" | \"id\"\n  readonly root?: SchemaEnv\n  readonly baseId?: string\n  readonly schemaPath?: string\n  readonly localRefs?: LocalRefs\n  readonly meta?: boolean\n}\n\nexport class SchemaEnv implements SchemaEnvArgs {\n  readonly schema: AnySchema\n  readonly schemaId?: \"$id\" | \"id\"\n  readonly root: SchemaEnv\n  baseId: string // TODO possibly, it should be readonly\n  schemaPath?: string\n  localRefs?: LocalRefs\n  readonly meta?: boolean\n  readonly $async?: boolean // true if the current schema is asynchronous.\n  readonly refs: SchemaRefs = {}\n  readonly dynamicAnchors: {[Ref in string]?: true} = {}\n  validate?: AnyValidateFunction\n  validateName?: ValueScopeName\n  serialize?: (data: unknown) => string\n  serializeName?: ValueScopeName\n  parse?: (data: string) => unknown\n  parseName?: ValueScopeName\n\n  constructor(env: SchemaEnvArgs) {\n    let schema: AnySchemaObject | undefined\n    if (typeof env.schema == \"object\") schema = env.schema\n    this.schema = env.schema\n    this.schemaId = env.schemaId\n    this.root = env.root || this\n    this.baseId = env.baseId ?? normalizeId(schema?.[env.schemaId || \"$id\"])\n    this.schemaPath = env.schemaPath\n    this.localRefs = env.localRefs\n    this.meta = env.meta\n    this.$async = schema?.$async\n    this.refs = {}\n  }\n}\n\n// let codeSize = 0\n// let nodeCount = 0\n\n// Compiles schema in SchemaEnv\nexport function compileSchema(this: Ajv, sch: SchemaEnv): SchemaEnv {\n  // TODO refactor - remove compilations\n  const _sch = getCompilingSchema.call(this, sch)\n  if (_sch) return _sch\n  const rootId = getFullPath(this.opts.uriResolver, sch.root.baseId) // TODO if getFullPath removed 1 tests fails\n  const {es5, lines} = this.opts.code\n  const {ownProperties} = this.opts\n  const gen = new CodeGen(this.scope, {es5, lines, ownProperties})\n  let _ValidationError\n  if (sch.$async) {\n    _ValidationError = gen.scopeValue(\"Error\", {\n      ref: ValidationError,\n      code: _`require(\"ajv/dist/runtime/validation_error\").default`,\n    })\n  }\n\n  const validateName = gen.scopeName(\"validate\")\n  sch.validateName = validateName\n\n  const schemaCxt: SchemaCxt = {\n    gen,\n    allErrors: this.opts.allErrors,\n    data: N.data,\n    parentData: N.parentData,\n    parentDataProperty: N.parentDataProperty,\n    dataNames: [N.data],\n    dataPathArr: [nil], // TODO can its length be used as dataLevel if nil is removed?\n    dataLevel: 0,\n    dataTypes: [],\n    definedProperties: new Set<string>(),\n    topSchemaRef: gen.scopeValue(\n      \"schema\",\n      this.opts.code.source === true\n        ? {ref: sch.schema, code: stringify(sch.schema)}\n        : {ref: sch.schema}\n    ),\n    validateName,\n    ValidationError: _ValidationError,\n    schema: sch.schema,\n    schemaEnv: sch,\n    rootId,\n    baseId: sch.baseId || rootId,\n    schemaPath: nil,\n    errSchemaPath: sch.schemaPath || (this.opts.jtd ? \"\" : \"#\"),\n    errorPath: _`\"\"`,\n    opts: this.opts,\n    self: this,\n  }\n\n  let sourceCode: string | undefined\n  try {\n    this._compilations.add(sch)\n    validateFunctionCode(schemaCxt)\n    gen.optimize(this.opts.code.optimize)\n    // gen.optimize(1)\n    const validateCode = gen.toString()\n    sourceCode = `${gen.scopeRefs(N.scope)}return ${validateCode}`\n    // console.log((codeSize += sourceCode.length), (nodeCount += gen.nodeCount))\n    if (this.opts.code.process) sourceCode = this.opts.code.process(sourceCode, sch)\n    // console.log(\"\\n\\n\\n *** \\n\", sourceCode)\n    const makeValidate = new Function(`${N.self}`, `${N.scope}`, sourceCode)\n    const validate: AnyValidateFunction = makeValidate(this, this.scope.get())\n    this.scope.value(validateName, {ref: validate})\n\n    validate.errors = null\n    validate.schema = sch.schema\n    validate.schemaEnv = sch\n    if (sch.$async) (validate as AsyncValidateFunction).$async = true\n    if (this.opts.code.source === true) {\n      validate.source = {validateName, validateCode, scopeValues: gen._values}\n    }\n    if (this.opts.unevaluated) {\n      const {props, items} = schemaCxt\n      validate.evaluated = {\n        props: props instanceof Name ? undefined : props,\n        items: items instanceof Name ? undefined : items,\n        dynamicProps: props instanceof Name,\n        dynamicItems: items instanceof Name,\n      }\n      if (validate.source) validate.source.evaluated = stringify(validate.evaluated)\n    }\n    sch.validate = validate\n    return sch\n  } catch (e) {\n    delete sch.validate\n    delete sch.validateName\n    if (sourceCode) this.logger.error(\"Error compiling schema, function code:\", sourceCode)\n    // console.log(\"\\n\\n\\n *** \\n\", sourceCode, this.opts)\n    throw e\n  } finally {\n    this._compilations.delete(sch)\n  }\n}\n\nexport function resolveRef(\n  this: Ajv,\n  root: SchemaEnv,\n  baseId: string,\n  ref: string\n): AnySchema | SchemaEnv | undefined {\n  ref = resolveUrl(this.opts.uriResolver, baseId, ref)\n  const schOrFunc = root.refs[ref]\n  if (schOrFunc) return schOrFunc\n\n  let _sch = resolve.call(this, root, ref)\n  if (_sch === undefined) {\n    const schema = root.localRefs?.[ref] // TODO maybe localRefs should hold SchemaEnv\n    const {schemaId} = this.opts\n    if (schema) _sch = new SchemaEnv({schema, schemaId, root, baseId})\n  }\n\n  if (_sch === undefined) return\n  return (root.refs[ref] = inlineOrCompile.call(this, _sch))\n}\n\nfunction inlineOrCompile(this: Ajv, sch: SchemaEnv): AnySchema | SchemaEnv {\n  if (inlineRef(sch.schema, this.opts.inlineRefs)) return sch.schema\n  return sch.validate ? sch : compileSchema.call(this, sch)\n}\n\n// Index of schema compilation in the currently compiled list\nexport function getCompilingSchema(this: Ajv, schEnv: SchemaEnv): SchemaEnv | void {\n  for (const sch of this._compilations) {\n    if (sameSchemaEnv(sch, schEnv)) return sch\n  }\n}\n\nfunction sameSchemaEnv(s1: SchemaEnv, s2: SchemaEnv): boolean {\n  return s1.schema === s2.schema && s1.root === s2.root && s1.baseId === s2.baseId\n}\n\n// resolve and compile the references ($ref)\n// TODO returns AnySchemaObject (if the schema can be inlined) or validation function\nfunction resolve(\n  this: Ajv,\n  root: SchemaEnv, // information about the root schema for the current schema\n  ref: string // reference to resolve\n): SchemaEnv | undefined {\n  let sch\n  while (typeof (sch = this.refs[ref]) == \"string\") ref = sch\n  return sch || this.schemas[ref] || resolveSchema.call(this, root, ref)\n}\n\n// Resolve schema, its root and baseId\nexport function resolveSchema(\n  this: Ajv,\n  root: SchemaEnv, // root object with properties schema, refs TODO below SchemaEnv is assigned to it\n  ref: string // reference to resolve\n): SchemaEnv | undefined {\n  const p = this.opts.uriResolver.parse(ref)\n  const refPath = _getFullPath(this.opts.uriResolver, p)\n  let baseId = getFullPath(this.opts.uriResolver, root.baseId, undefined)\n  // TODO `Object.keys(root.schema).length > 0` should not be needed - but removing breaks 2 tests\n  if (Object.keys(root.schema).length > 0 && refPath === baseId) {\n    return getJsonPointer.call(this, p, root)\n  }\n\n  const id = normalizeId(refPath)\n  const schOrRef = this.refs[id] || this.schemas[id]\n  if (typeof schOrRef == \"string\") {\n    const sch = resolveSchema.call(this, root, schOrRef)\n    if (typeof sch?.schema !== \"object\") return\n    return getJsonPointer.call(this, p, sch)\n  }\n\n  if (typeof schOrRef?.schema !== \"object\") return\n  if (!schOrRef.validate) compileSchema.call(this, schOrRef)\n  if (id === normalizeId(ref)) {\n    const {schema} = schOrRef\n    const {schemaId} = this.opts\n    const schId = schema[schemaId]\n    if (schId) baseId = resolveUrl(this.opts.uriResolver, baseId, schId)\n    return new SchemaEnv({schema, schemaId, root, baseId})\n  }\n  return getJsonPointer.call(this, p, schOrRef)\n}\n\nconst PREVENT_SCOPE_CHANGE = new Set([\n  \"properties\",\n  \"patternProperties\",\n  \"enum\",\n  \"dependencies\",\n  \"definitions\",\n])\n\nfunction getJsonPointer(\n  this: Ajv,\n  parsedRef: URI.URIComponents,\n  {baseId, schema, root}: SchemaEnv\n): SchemaEnv | undefined {\n  if (parsedRef.fragment?.[0] !== \"/\") return\n  for (const part of parsedRef.fragment.slice(1).split(\"/\")) {\n    if (typeof schema === \"boolean\") return\n    const partSchema = schema[unescapeFragment(part)]\n    if (partSchema === undefined) return\n    schema = partSchema\n    // TODO PREVENT_SCOPE_CHANGE could be defined in keyword def?\n    const schId = typeof schema === \"object\" && schema[this.opts.schemaId]\n    if (!PREVENT_SCOPE_CHANGE.has(part) && schId) {\n      baseId = resolveUrl(this.opts.uriResolver, baseId, schId)\n    }\n  }\n  let env: SchemaEnv | undefined\n  if (typeof schema != \"boolean\" && schema.$ref && !schemaHasRulesButRef(schema, this.RULES)) {\n    const $ref = resolveUrl(this.opts.uriResolver, baseId, schema.$ref)\n    env = resolveSchema.call(this, root, $ref)\n  }\n  // even though resolution failed we need to return SchemaEnv to throw exception\n  // so that compileAsync loads missing schema.\n  const {schemaId} = this.opts\n  env = env || new SchemaEnv({schema, schemaId, root, baseId})\n  if (env.schema !== env.root.schema) return env\n  return undefined\n}\n,/lib/refs/json-schema-2019-09/meta/core.json\u0004{\n  \"$schema\": \"https://json-schema.org/draft/2019-09/schema\",\n  \"$id\": \"https://json-schema.org/draft/2019-09/meta/core\",\n  \"$vocabulary\": {\n    \"https://json-schema.org/draft/2019-09/vocab/core\": true\n  },\n  \"$recursiveAnchor\": true,\n\n  \"title\": \"Core vocabulary meta-schema\",\n  \"type\": [\"object\", \"boolean\"],\n  \"properties\": {\n    \"$id\": {\n      \"type\": \"string\",\n      \"format\": \"uri-reference\",\n      \"$comment\": \"Non-empty fragments not allowed.\",\n      \"pattern\": \"^[^#]*#?$\"\n    },\n    \"$schema\": {\n      \"type\": \"string\",\n      \"format\": \"uri\"\n    },\n    \"$anchor\": {\n      \"type\": \"string\",\n      \"pattern\": \"^[A-Za-z][-A-Za-z0-9.:_]*$\"\n    },\n    \"$ref\": {\n      \"type\": \"string\",\n      \"format\": \"uri-reference\"\n    },\n    \"$recursiveRef\": {\n      \"type\": \"string\",\n      \"format\": \"uri-reference\"\n    },\n    \"$recursiveAnchor\": {\n      \"type\": \"boolean\",\n      \"default\": false\n    },\n    \"$vocabulary\": {\n      \"type\": \"object\",\n      \"propertyNames\": {\n        \"type\": \"string\",\n        \"format\": \"uri\"\n      },\n      \"additionalProperties\": {\n        \"type\": \"boolean\"\n      }\n    },\n    \"$comment\": {\n      \"type\": \"string\"\n    },\n    \"$defs\": {\n      \"type\": \"object\",\n      \"additionalProperties\": {\"$recursiveRef\": \"#\"},\n      \"default\": {}\n    }\n  }\n}\n6/dist/vocabularies/applicator/patternProperties.js.map\nJ{\"version\":3,\"file\":\"patternProperties.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../lib/vocabularies/applicator/patternProperties.ts\"],\"names\":[],\"mappings\":\"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\"}/dist/compile/errors.js\u0016p\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.extendErrors = exports.resetErrorsCount = exports.reportExtraError = exports.reportError = exports.keyword$DataError = exports.keywordError = void 0;\nconst codegen_1 = require(\"./codegen\");\nconst util_1 = require(\"./util\");\nconst names_1 = require(\"./names\");\nexports.keywordError = {\n    message: ({ keyword }) => (0, codegen_1.str) `must pass \"${keyword}\" keyword validation`,\n};\nexports.keyword$DataError = {\n    message: ({ keyword, schemaType }) => schemaType\n        ? (0, codegen_1.str) `\"${keyword}\" keyword must be ${schemaType} ($data)`\n        : (0, codegen_1.str) `\"${keyword}\" keyword is invalid ($data)`,\n};\nfunction reportError(cxt, error = exports.keywordError, errorPaths, overrideAllErrors) {\n    const { it } = cxt;\n    const { gen, compositeRule, allErrors } = it;\n    const errObj = errorObjectCode(cxt, error, errorPaths);\n    if (overrideAllErrors !== null && overrideAllErrors !== void 0 ? overrideAllErrors : (compositeRule || allErrors)) {\n        addError(gen, errObj);\n    }\n    else {\n        returnErrors(it, (0, codegen_1._) `[${errObj}]`);\n    }\n}\nexports.reportError = reportError;\nfunction reportExtraError(cxt, error = exports.keywordError, errorPaths) {\n    const { it } = cxt;\n    const { gen, compositeRule, allErrors } = it;\n    const errObj = errorObjectCode(cxt, error, errorPaths);\n    addError(gen, errObj);\n    if (!(compositeRule || allErrors)) {\n        returnErrors(it, names_1.default.vErrors);\n    }\n}\nexports.reportExtraError = reportExtraError;\nfunction resetErrorsCount(gen, errsCount) {\n    gen.assign(names_1.default.errors, errsCount);\n    gen.if((0, codegen_1._) `${names_1.default.vErrors} !== null`, () => gen.if(errsCount, () => gen.assign((0, codegen_1._) `${names_1.default.vErrors}.length`, errsCount), () => gen.assign(names_1.default.vErrors, null)));\n}\nexports.resetErrorsCount = resetErrorsCount;\nfunction extendErrors({ gen, keyword, schemaValue, data, errsCount, it, }) {\n    /* istanbul ignore if */\n    if (errsCount === undefined)\n        throw new Error(\"ajv implementation error\");\n    const err = gen.name(\"err\");\n    gen.forRange(\"i\", errsCount, names_1.default.errors, (i) => {\n        gen.const(err, (0, codegen_1._) `${names_1.default.vErrors}[${i}]`);\n        gen.if((0, codegen_1._) `${err}.instancePath === undefined`, () => gen.assign((0, codegen_1._) `${err}.instancePath`, (0, codegen_1.strConcat)(names_1.default.instancePath, it.errorPath)));\n        gen.assign((0, codegen_1._) `${err}.schemaPath`, (0, codegen_1.str) `${it.errSchemaPath}/${keyword}`);\n        if (it.opts.verbose) {\n            gen.assign((0, codegen_1._) `${err}.schema`, schemaValue);\n            gen.assign((0, codegen_1._) `${err}.data`, data);\n        }\n    });\n}\nexports.extendErrors = extendErrors;\nfunction addError(gen, errObj) {\n    const err = gen.const(\"err\", errObj);\n    gen.if((0, codegen_1._) `${names_1.default.vErrors} === null`, () => gen.assign(names_1.default.vErrors, (0, codegen_1._) `[${err}]`), (0, codegen_1._) `${names_1.default.vErrors}.push(${err})`);\n    gen.code((0, codegen_1._) `${names_1.default.errors}++`);\n}\nfunction returnErrors(it, errs) {\n    const { gen, validateName, schemaEnv } = it;\n    if (schemaEnv.$async) {\n        gen.throw((0, codegen_1._) `new ${it.ValidationError}(${errs})`);\n    }\n    else {\n        gen.assign((0, codegen_1._) `${validateName}.errors`, errs);\n        gen.return(false);\n    }\n}\nconst E = {\n    keyword: new codegen_1.Name(\"keyword\"),\n    schemaPath: new codegen_1.Name(\"schemaPath\"),\n    params: new codegen_1.Name(\"params\"),\n    propertyName: new codegen_1.Name(\"propertyName\"),\n    message: new codegen_1.Name(\"message\"),\n    schema: new codegen_1.Name(\"schema\"),\n    parentSchema: new codegen_1.Name(\"parentSchema\"),\n};\nfunction errorObjectCode(cxt, error, errorPaths) {\n    const { createErrors } = cxt.it;\n    if (createErrors === false)\n        return (0, codegen_1._) `{}`;\n    return errorObject(cxt, error, errorPaths);\n}\nfunction errorObject(cxt, error, errorPaths = {}) {\n    const { gen, it } = cxt;\n    const keyValues = [\n        errorInstancePath(it, errorPaths),\n        errorSchemaPath(cxt, errorPaths),\n    ];\n    extraErrorProps(cxt, error, keyValues);\n    return gen.object(...keyValues);\n}\nfunction errorInstancePath({ errorPath }, { instancePath }) {\n    const instPath = instancePath\n        ? (0, codegen_1.str) `${errorPath}${(0, util_1.getErrorPath)(instancePath, util_1.Type.Str)}`\n        : errorPath;\n    return [names_1.default.instancePath, (0, codegen_1.strConcat)(names_1.default.instancePath, instPath)];\n}\nfunction errorSchemaPath({ keyword, it: { errSchemaPath } }, { schemaPath, parentSchema }) {\n    let schPath = parentSchema ? errSchemaPath : (0, codegen_1.str) `${errSchemaPath}/${keyword}`;\n    if (schemaPath) {\n        schPath = (0, codegen_1.str) `${schPath}${(0, util_1.getErrorPath)(schemaPath, util_1.Type.Str)}`;\n    }\n    return [E.schemaPath, schPath];\n}\nfunction extraErrorProps(cxt, { params, message }, keyValues) {\n    const { keyword, data, schemaValue, it } = cxt;\n    const { opts, propertyName, topSchemaRef, schemaPath } = it;\n    keyValues.push([E.keyword, keyword], [E.params, typeof params == \"function\" ? params(cxt) : params || (0, codegen_1._) `{}`]);\n    if (opts.messages) {\n        keyValues.push([E.message, typeof message == \"function\" ? message(cxt) : message]);\n    }\n    if (opts.verbose) {\n        keyValues.push([E.schema, schemaValue], [E.parentSchema, (0, codegen_1._) `${topSchemaRef}${schemaPath}`], [names_1.default.data, data]);\n    }\n    if (propertyName)\n        keyValues.push([E.propertyName, propertyName]);\n}\n//# sourceMappingURL=errors.js.map0/dist/vocabularies/validation/uniqueItems.js.map\r\u001a{\"version\":3,\"file\":\"uniqueItems.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../lib/vocabularies/validation/uniqueItems.ts\"],\"names\":[],\"mappings\":\";;AAEA,8DAAwF;AACxF,mDAAkD;AAClD,6CAA0C;AAC1C,+CAAuC;AAQvC,MAAM,KAAK,GAA2B;IACpC,OAAO,EAAE,CAAC,EAAC,MAAM,EAAE,EAAC,CAAC,EAAE,CAAC,EAAC,EAAC,EAAE,EAAE,CAC5B,IAAA,aAAG,EAAA,2CAA2C,CAAC,QAAQ,CAAC,iBAAiB;IAC3E,MAAM,EAAE,CAAC,EAAC,MAAM,EAAE,EAAC,CAAC,EAAE,CAAC,EAAC,EAAC,EAAE,EAAE,CAAC,IAAA,WAAC,EAAA,OAAO,CAAC,QAAQ,CAAC,GAAG;CACpD,CAAA;AAED,MAAM,GAAG,GAA0B;IACjC,OAAO,EAAE,aAAa;IACtB,IAAI,EAAE,OAAO;IACb,UAAU,EAAE,SAAS;IACrB,KAAK,EAAE,IAAI;IACX,KAAK;IACL,IAAI,CAAC,GAAe;QAClB,MAAM,EAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,EAAE,EAAC,GAAG,GAAG,CAAA;QACpE,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM;YAAE,OAAM;QAC7B,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QAC9B,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,IAAA,yBAAc,EAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QAC9E,GAAG,CAAC,UAAU,CAAC,KAAK,EAAE,mBAAmB,EAAE,IAAA,WAAC,EAAA,GAAG,UAAU,YAAY,CAAC,CAAA;QACtE,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,CAAA;QAEb,SAAS,mBAAmB;YAC1B,MAAM,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,IAAA,WAAC,EAAA,GAAG,IAAI,SAAS,CAAC,CAAA;YACzC,MAAM,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YACtB,GAAG,CAAC,SAAS,CAAC,EAAC,CAAC,EAAE,CAAC,EAAC,CAAC,CAAA;YACrB,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;YACvB,GAAG,CAAC,EAAE,CAAC,IAAA,WAAC,EAAA,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QACnE,CAAC;QAED,SAAS,WAAW;YAClB,OAAO,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,OAAO,CAAC,CAAA;QACxF,CAAC;QAED,SAAS,KAAK,CAAC,CAAO,EAAE,CAAO;YAC7B,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;YAC7B,MAAM,SAAS,GAAG,IAAA,yBAAc,EAAC,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE,mBAAQ,CAAC,KAAK,CAAC,CAAA;YACxF,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,SAAS,EAAE,IAAA,WAAC,EAAA,IAAI,CAAC,CAAA;YAC3C,GAAG,CAAC,GAAG,CAAC,IAAA,WAAC,EAAA,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE;gBACxB,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,IAAA,WAAC,EAAA,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAA;gBAC/B,GAAG,CAAC,EAAE,CAAC,SAAS,EAAE,IAAA,WAAC,EAAA,UAAU,CAAC,CAAA;gBAC9B,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC;oBAAE,GAAG,CAAC,EAAE,CAAC,IAAA,WAAC,EAAA,UAAU,IAAI,cAAc,EAAE,IAAA,WAAC,EAAA,GAAG,IAAI,SAAS,CAAC,CAAA;gBAClF,GAAG;qBACA,EAAE,CAAC,IAAA,WAAC,EAAA,UAAU,OAAO,IAAI,IAAI,eAAe,EAAE,GAAG,EAAE;oBAClD,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,IAAA,WAAC,EAAA,GAAG,OAAO,IAAI,IAAI,GAAG,CAAC,CAAA;oBACrC,GAAG,CAAC,KAAK,EAAE,CAAA;oBACX,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,KAAK,EAAE,CAAA;gBAClC,CAAC,CAAC;qBACD,IAAI,CAAC,IAAA,WAAC,EAAA,GAAG,OAAO,IAAI,IAAI,OAAO,CAAC,EAAE,CAAC,CAAA;YACxC,CAAC,CAAC,CAAA;QACJ,CAAC;QAED,SAAS,MAAM,CAAC,CAAO,EAAE,CAAO;YAC9B,MAAM,GAAG,GAAG,IAAA,cAAO,EAAC,GAAG,EAAE,eAAK,CAAC,CAAA;YAC/B,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YAC/B,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,IAAA,WAAC,EAAA,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,CACrC,GAAG,CAAC,GAAG,CAAC,IAAA,WAAC,EAAA,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,CACpC,GAAG,CAAC,EAAE,CAAC,IAAA,WAAC,EAAA,GAAG,GAAG,IAAI,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE;gBACnD,GAAG,CAAC,KAAK,EAAE,CAAA;gBACX,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;YACvC,CAAC,CAAC,CACH,CACF,CAAA;QACH,CAAC;IACH,CAAC;CACF,CAAA;AAED,kBAAe,GAAG,CAAA\"}//dist/vocabularies/validation/limitItems.js.map\u0003{\"version\":3,\"file\":\"limitItems.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../lib/vocabularies/validation/limitItems.ts\"],\"names\":[],\"mappings\":\";;AAEA,mDAAuD;AAEvD,MAAM,KAAK,GAA2B;IACpC,OAAO,CAAC,EAAC,OAAO,EAAE,UAAU,EAAC;QAC3B,MAAM,IAAI,GAAG,OAAO,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAA;QACtD,OAAO,IAAA,aAAG,EAAA,iBAAiB,IAAI,SAAS,UAAU,QAAQ,CAAA;IAC5D,CAAC;IACD,MAAM,EAAE,CAAC,EAAC,UAAU,EAAC,EAAE,EAAE,CAAC,IAAA,WAAC,EAAA,WAAW,UAAU,GAAG;CACpD,CAAA;AAED,MAAM,GAAG,GAA0B;IACjC,OAAO,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC;IACjC,IAAI,EAAE,OAAO;IACb,UAAU,EAAE,QAAQ;IACpB,KAAK,EAAE,IAAI;IACX,KAAK;IACL,IAAI,CAAC,GAAe;QAClB,MAAM,EAAC,OAAO,EAAE,IAAI,EAAE,UAAU,EAAC,GAAG,GAAG,CAAA;QACvC,MAAM,EAAE,GAAG,OAAO,KAAK,UAAU,CAAC,CAAC,CAAC,mBAAS,CAAC,EAAE,CAAC,CAAC,CAAC,mBAAS,CAAC,EAAE,CAAA;QAC/D,GAAG,CAAC,SAAS,CAAC,IAAA,WAAC,EAAA,GAAG,IAAI,WAAW,EAAE,IAAI,UAAU,EAAE,CAAC,CAAA;IACtD,CAAC;CACF,CAAA;AAED,kBAAe,GAAG,CAAA\"},/dist/vocabularies/validation/limitNumber.js\u0004\f\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst ops = codegen_1.operators;\nconst KWDs = {\n    maximum: { okStr: \"<=\", ok: ops.LTE, fail: ops.GT },\n    minimum: { okStr: \">=\", ok: ops.GTE, fail: ops.LT },\n    exclusiveMaximum: { okStr: \"<\", ok: ops.LT, fail: ops.GTE },\n    exclusiveMinimum: { okStr: \">\", ok: ops.GT, fail: ops.LTE },\n};\nconst error = {\n    message: ({ keyword, schemaCode }) => (0, codegen_1.str) `must be ${KWDs[keyword].okStr} ${schemaCode}`,\n    params: ({ keyword, schemaCode }) => (0, codegen_1._) `{comparison: ${KWDs[keyword].okStr}, limit: ${schemaCode}}`,\n};\nconst def = {\n    keyword: Object.keys(KWDs),\n    type: \"number\",\n    schemaType: \"number\",\n    $data: true,\n    error,\n    code(cxt) {\n        const { keyword, data, schemaCode } = cxt;\n        cxt.fail$data((0, codegen_1._) `${data} ${KWDs[keyword].fail} ${schemaCode} || isNaN(${data})`);\n    },\n};\nexports.default = def;\n//# sourceMappingURL=limitNumber.js.map/dist/runtime/quote.js\u0003\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst rxEscapable = \n// eslint-disable-next-line no-control-regex, no-misleading-character-class\n/[\\\\\"\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\nconst escaped = {\n    \"\\b\": \"\\\\b\",\n    \"\\t\": \"\\\\t\",\n    \"\\n\": \"\\\\n\",\n    \"\\f\": \"\\\\f\",\n    \"\\r\": \"\\\\r\",\n    '\"': '\\\\\"',\n    \"\\\\\": \"\\\\\\\\\",\n};\nfunction quote(s) {\n    rxEscapable.lastIndex = 0;\n    return ('\"' +\n        (rxEscapable.test(s)\n            ? s.replace(rxEscapable, (a) => {\n                const c = escaped[a];\n                return typeof c === \"string\"\n                    ? c\n                    : \"\\\\u\" + (\"0000\" + a.charCodeAt(0).toString(16)).slice(-4);\n            })\n            : s) +\n        '\"');\n}\nexports.default = quote;\nquote.code = 'require(\"ajv/dist/runtime/quote\").default';\n//# sourceMappingURL=quote.js.map'/dist/compile/validate/subschema.js.map\f\u0006{\"version\":3,\"file\":\"subschema.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../lib/compile/validate/subschema.ts\"],\"names\":[],\"mappings\":\"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\"}+/dist/vocabularies/validation/required.d.tsimport type { CodeKeywordDefinition, ErrorObject } from \"../../types\";\nexport type RequiredError = ErrorObject<\"required\", {\n    missingProperty: string;\n}, string[] | {\n    $data: string;\n}>;\ndeclare const def: CodeKeywordDefinition;\nexport default def;\n+/dist/vocabularies/applicator/contains.d.ts\u0001\bimport type { CodeKeywordDefinition, ErrorObject, AnySchema } from \"../../types\";\nexport type ContainsError = ErrorObject<\"contains\", {\n    minContains: number;\n    maxContains?: number;\n}, AnySchema>;\ndeclare const def: CodeKeywordDefinition;\nexport default def;\n/dist/runtime/quote.js.map\u0003m{\"version\":3,\"file\":\"quote.js\",\"sourceRoot\":\"\",\"sources\":[\"../../lib/runtime/quote.ts\"],\"names\":[],\"mappings\":\";;AAAA,MAAM,WAAW;AACf,2EAA2E;AAC3E,iIAAiI,CAAA;AAEnI,MAAM,OAAO,GAA6B;IACxC,IAAI,EAAE,KAAK;IACX,IAAI,EAAE,KAAK;IACX,IAAI,EAAE,KAAK;IACX,IAAI,EAAE,KAAK;IACX,IAAI,EAAE,KAAK;IACX,GAAG,EAAE,KAAK;IACV,IAAI,EAAE,MAAM;CACb,CAAA;AAED,SAAwB,KAAK,CAAC,CAAS;IACrC,WAAW,CAAC,SAAS,GAAG,CAAC,CAAA;IACzB,OAAO,CACL,GAAG;QACH,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;YAClB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE;gBAC3B,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;gBACpB,OAAO,OAAO,CAAC,KAAK,QAAQ;oBAC1B,CAAC,CAAC,CAAC;oBACH,CAAC,CAAC,KAAK,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;YAC/D,CAAC,CAAC;YACJ,CAAC,CAAC,CAAC,CAAC;QACN,GAAG,CACJ,CAAA;AACH,CAAC;AAdD,wBAcC;AAED,KAAK,CAAC,IAAI,GAAG,2CAA2C,CAAA\"}\"/lib/vocabularies/dynamic/index.ts\u0001Himport type {Vocabulary} from \"../../types\"\nimport dynamicAnchor from \"./dynamicAnchor\"\nimport dynamicRef from \"./dynamicRef\"\nimport recursiveAnchor from \"./recursiveAnchor\"\nimport recursiveRef from \"./recursiveRef\"\n\nconst dynamic: Vocabulary = [dynamicAnchor, dynamicRef, recursiveAnchor, recursiveRef]\n\nexport default dynamic\n)/lib/refs/json-schema-2019-09/schema.json\u0006+{\n  \"$schema\": \"https://json-schema.org/draft/2019-09/schema\",\n  \"$id\": \"https://json-schema.org/draft/2019-09/schema\",\n  \"$vocabulary\": {\n    \"https://json-schema.org/draft/2019-09/vocab/core\": true,\n    \"https://json-schema.org/draft/2019-09/vocab/applicator\": true,\n    \"https://json-schema.org/draft/2019-09/vocab/validation\": true,\n    \"https://json-schema.org/draft/2019-09/vocab/meta-data\": true,\n    \"https://json-schema.org/draft/2019-09/vocab/format\": false,\n    \"https://json-schema.org/draft/2019-09/vocab/content\": true\n  },\n  \"$recursiveAnchor\": true,\n\n  \"title\": \"Core and Validation specifications meta-schema\",\n  \"allOf\": [\n    {\"$ref\": \"meta/core\"},\n    {\"$ref\": \"meta/applicator\"},\n    {\"$ref\": \"meta/validation\"},\n    {\"$ref\": \"meta/meta-data\"},\n    {\"$ref\": \"meta/format\"},\n    {\"$ref\": \"meta/content\"}\n  ],\n  \"type\": [\"object\", \"boolean\"],\n  \"properties\": {\n    \"definitions\": {\n      \"$comment\": \"While no longer an official keyword as it is replaced by $defs, this keyword is retained in the meta-schema to prevent incompatible extensions as it remains in common use.\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\"$recursiveRef\": \"#\"},\n      \"default\": {}\n    },\n    \"dependencies\": {\n      \"$comment\": \"\\\"dependencies\\\" is no longer a keyword, but schema authors should avoid redefining it to facilitate a smooth transition to \\\"dependentSchemas\\\" and \\\"dependentRequired\\\"\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\n        \"anyOf\": [{\"$recursiveRef\": \"#\"}, {\"$ref\": \"meta/validation#/$defs/stringArray\"}]\n      }\n    }\n  }\n}\n/dist/types/json-schema.js.map{{\"version\":3,\"file\":\"json-schema.js\",\"sourceRoot\":\"\",\"sources\":[\"../../lib/types/json-schema.ts\"],\"names\":[],\"mappings\":\"\"}-/dist/vocabularies/applicator/thenElse.js.map\u0001{\"version\":3,\"file\":\"thenElse.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../lib/vocabularies/applicator/thenElse.ts\"],\"names\":[],\"mappings\":\";;AAEA,6CAAkD;AAElD,MAAM,GAAG,GAA0B;IACjC,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC;IACjC,IAAI,CAAC,EAAC,OAAO,EAAE,YAAY,EAAE,EAAE,EAAa;QAC1C,IAAI,YAAY,CAAC,EAAE,KAAK,SAAS;YAAE,IAAA,sBAAe,EAAC,EAAE,EAAE,IAAI,OAAO,2BAA2B,CAAC,CAAA;IAChG,CAAC;CACF,CAAA;AAED,kBAAe,GAAG,CAAA\"}/LICENSE\u0004BThe MIT License (MIT)\n\nCopyright (c) 2015-2021 Evgeny Poberezkin\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n!/dist/vocabularies/jtd/error.d.ts\u0002\timport type { KeywordErrorDefinition, KeywordErrorCxt, ErrorObject } from \"../../types\";\nimport { Code } from \"../../compile/codegen\";\nexport type _JTDTypeError<K extends string, T extends string, S> = ErrorObject<K, {\n    type: T;\n    nullable: boolean;\n}, S>;\nexport declare function typeError(t: string): KeywordErrorDefinition;\nexport declare function typeErrorMessage({ parentSchema }: KeywordErrorCxt, t: string): string;\nexport declare function typeErrorParams({ parentSchema }: KeywordErrorCxt, t: string): Code;\n/dist/runtime/timestamp.js.map\u0007{\"version\":3,\"file\":\"timestamp.js\",\"sourceRoot\":\"\",\"sources\":[\"../../lib/runtime/timestamp.ts\"],\"names\":[],\"mappings\":\";;AAAA,MAAM,YAAY,GAAG,OAAO,CAAA;AAC5B,MAAM,IAAI,GAAG,4BAA4B,CAAA;AACzC,MAAM,IAAI,GAAG,gEAAgE,CAAA;AAC7E,MAAM,IAAI,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAA;AAEhE,SAAwB,cAAc,CAAC,GAAW,EAAE,SAAkB;IACpE,iDAAiD;IACjD,MAAM,EAAE,GAAa,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;IAC5C,OAAO,CACL,CAAC,EAAE,CAAC,MAAM,KAAK,CAAC,IAAI,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACzD,CAAC,SAAS,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,IAAI,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CACnD,CAAA;AACH,CAAC;AAPD,iCAOC;AAED,SAAS,SAAS,CAAC,GAAW;IAC5B,MAAM,OAAO,GAAoB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC/C,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAA;IAC1B,MAAM,CAAC,GAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;IAC7B,MAAM,CAAC,GAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;IAC7B,MAAM,CAAC,GAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;IAC7B,OAAO,CACL,CAAC,IAAI,CAAC;QACN,CAAC,IAAI,EAAE;QACP,CAAC,IAAI,CAAC;QACN,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;YACX,4DAA4D;YAC5D,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAC1E,CAAA;AACH,CAAC;AAED,SAAS,SAAS,CAAC,GAAW;IAC5B,MAAM,OAAO,GAAoB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC/C,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAA;IAC1B,MAAM,EAAE,GAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;IAC9B,MAAM,GAAG,GAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;IAC/B,MAAM,GAAG,GAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;IAC/B,MAAM,GAAG,GAAW,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;IACtC,MAAM,GAAG,GAAW,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;IACtC,OAAO,CACL,CAAC,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,CAAC;QACpC,cAAc;QACd,CAAC,EAAE,GAAG,GAAG,KAAK,EAAE,IAAI,GAAG,GAAG,GAAG,KAAK,EAAE,IAAI,GAAG,KAAK,EAAE,CAAC,CACpD,CAAA;AACH,CAAC;AAED,cAAc,CAAC,IAAI,GAAG,+CAA+C,CAAA\"}/lib/ajv.ts\bimport type {AnySchemaObject} from \"./types\"\nimport AjvCore from \"./core\"\nimport draft7Vocabularies from \"./vocabularies/draft7\"\nimport discriminator from \"./vocabularies/discriminator\"\nimport * as draft7MetaSchema from \"./refs/json-schema-draft-07.json\"\n\nconst META_SUPPORT_DATA = [\"/properties\"]\n\nconst META_SCHEMA_ID = \"http://json-schema.org/draft-07/schema\"\n\nclass Ajv extends AjvCore {\n  _addVocabularies(): void {\n    super._addVocabularies()\n    draft7Vocabularies.forEach((v) => this.addVocabulary(v))\n    if (this.opts.discriminator) this.addKeyword(discriminator)\n  }\n\n  _addDefaultMetaSchema(): void {\n    super._addDefaultMetaSchema()\n    if (!this.opts.meta) return\n    const metaSchema = this.opts.$data\n      ? this.$dataMetaSchema(draft7MetaSchema, META_SUPPORT_DATA)\n      : draft7MetaSchema\n    this.addMetaSchema(metaSchema, META_SCHEMA_ID, false)\n    this.refs[\"http://json-schema.org/schema\"] = META_SCHEMA_ID\n  }\n\n  defaultMeta(): string | AnySchemaObject | undefined {\n    return (this.opts.defaultMeta =\n      super.defaultMeta() || (this.getSchema(META_SCHEMA_ID) ? META_SCHEMA_ID : undefined))\n  }\n}\n\nmodule.exports = exports = Ajv\nObject.defineProperty(exports, \"__esModule\", {value: true})\n\nexport default Ajv\n\nexport {\n  Format,\n  FormatDefinition,\n  AsyncFormatDefinition,\n  KeywordDefinition,\n  KeywordErrorDefinition,\n  CodeKeywordDefinition,\n  MacroKeywordDefinition,\n  FuncKeywordDefinition,\n  Vocabulary,\n  Schema,\n  SchemaObject,\n  AnySchemaObject,\n  AsyncSchema,\n  AnySchema,\n  ValidateFunction,\n  AsyncValidateFunction,\n  SchemaValidateFunction,\n  ErrorObject,\n  ErrorNoParams,\n} from \"./types\"\n\nexport {Plugin, Options, CodeOptions, InstanceOptions, Logger, ErrorsTextOptions} from \"./core\"\nexport {SchemaCxt, SchemaObjCxt} from \"./compile\"\nexport {KeywordCxt} from \"./compile/validate\"\nexport {DefinedError} from \"./vocabularies/errors\"\nexport {JSONType} from \"./compile/rules\"\nexport {JSONSchemaType} from \"./types/json-schema\"\nexport {_, str, stringify, nil, Name, Code, CodeGen, CodeGenOptions} from \"./compile/codegen\"\nexport {default as ValidationError} from \"./runtime/validation_error\"\nexport {default as MissingRefError} from \"./compile/ref_error\"\n!/lib/vocabularies/jtd/elements.ts\u0003import type {CodeKeywordDefinition, SchemaObject} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {alwaysValidSchema} from \"../../compile/util\"\nimport {validateArray} from \"../code\"\nimport {_, not} from \"../../compile/codegen\"\nimport {checkMetadata} from \"./metadata\"\nimport {checkNullable} from \"./nullable\"\nimport {typeError, _JTDTypeError} from \"./error\"\n\nexport type JTDElementsError = _JTDTypeError<\"elements\", \"array\", SchemaObject>\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"elements\",\n  schemaType: \"object\",\n  error: typeError(\"array\"),\n  code(cxt: KeywordCxt) {\n    checkMetadata(cxt)\n    const {gen, data, schema, it} = cxt\n    if (alwaysValidSchema(it, schema)) return\n    const [valid] = checkNullable(cxt)\n    gen.if(not(valid), () =>\n      gen.if(\n        _`Array.isArray(${data})`,\n        () => gen.assign(valid, validateArray(cxt)),\n        () => cxt.error()\n      )\n    )\n    cxt.ok(valid)\n  },\n}\n\nexport default def\n\"/dist/vocabularies/jtd/enum.js.map\u0006{\"version\":3,\"file\":\"enum.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../lib/vocabularies/jtd/enum.ts\"],\"names\":[],\"mappings\":\";;AAEA,mDAAsD;AACtD,yCAAwC;AACxC,yCAAwC;AAIxC,MAAM,KAAK,GAA2B;IACpC,OAAO,EAAE,4CAA4C;IACrD,MAAM,EAAE,CAAC,EAAC,UAAU,EAAC,EAAE,EAAE,CAAC,IAAA,WAAC,EAAA,mBAAmB,UAAU,GAAG;CAC5D,CAAA;AAED,MAAM,GAAG,GAA0B;IACjC,OAAO,EAAE,MAAM;IACf,UAAU,EAAE,OAAO;IACnB,KAAK;IACL,IAAI,CAAC,GAAe;QAClB,IAAA,wBAAa,EAAC,GAAG,CAAC,CAAA;QAClB,MAAM,EAAC,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,EAAE,EAAC,GAAG,GAAG,CAAA;QAC9D,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAA;QAC1E,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAA;QACxF,IAAI,KAAW,CAAA;QACf,MAAM,QAAQ,GAAG,IAAA,WAAC,EAAA,UAAU,IAAI,cAAc,CAAA;QAC9C,IAAI,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE;YACrC,IAAI,IAAU,CACb;YAAA,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,IAAA,wBAAa,EAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;YAC7C,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;SACvB;aAAM;YACL,wBAAwB;YACxB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAA;YACvE,KAAK,GAAG,IAAA,aAAG,EAAC,QAAQ,EAAE,IAAA,YAAE,EAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAa,EAAE,EAAE,CAAC,IAAA,WAAC,EAAA,GAAG,IAAI,QAAQ,KAAK,EAAE,CAAC,CAAC,CAAC,CAAA;YACpF,IAAI,YAAY,CAAC,QAAQ;gBAAE,KAAK,GAAG,IAAA,YAAE,EAAC,IAAA,WAAC,EAAA,GAAG,IAAI,WAAW,EAAE,KAAK,CAAC,CAAA;SAClE;QACD,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAEf,SAAS,QAAQ;YACf,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,WAAmB,EAAE,CAAC,CAAC,EAAE,EAAE,CACxC,GAAG,CAAC,EAAE,CAAC,IAAA,WAAC,EAAA,GAAG,KAAK,MAAM,IAAI,QAAQ,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAC1D,CAAA;QACH,CAAC;IACH,CAAC;CACF,CAAA;AAED,kBAAe,GAAG,CAAA\"}/lib/standalone/instance.ts\u0004import Ajv, {AnySchema, AnyValidateFunction, ErrorObject} from \"../core\"\nimport standaloneCode from \".\"\nimport * as requireFromString from \"require-from-string\"\n\nexport default class AjvPack {\n  errors?: ErrorObject[] | null // errors from the last validation\n  constructor(readonly ajv: Ajv) {}\n\n  validate(schemaKeyRef: AnySchema | string, data: unknown): boolean | Promise<unknown> {\n    return Ajv.prototype.validate.call(this, schemaKeyRef, data)\n  }\n\n  compile<T = unknown>(schema: AnySchema, meta?: boolean): AnyValidateFunction<T> {\n    return this.getStandalone(this.ajv.compile<T>(schema, meta))\n  }\n\n  getSchema<T = unknown>(keyRef: string): AnyValidateFunction<T> | undefined {\n    const v = this.ajv.getSchema<T>(keyRef)\n    if (!v) return undefined\n    return this.getStandalone(v)\n  }\n\n  private getStandalone<T = unknown>(v: AnyValidateFunction<T>): AnyValidateFunction<T> {\n    return requireFromString(standaloneCode(this.ajv, v)) as AnyValidateFunction<T>\n  }\n\n  addSchema(...args: Parameters<typeof Ajv.prototype.addSchema>): AjvPack {\n    this.ajv.addSchema.call(this.ajv, ...args)\n    return this\n  }\n\n  addKeyword(...args: Parameters<typeof Ajv.prototype.addKeyword>): AjvPack {\n    this.ajv.addKeyword.call(this.ajv, ...args)\n    return this\n  }\n}\n/dist/compile/jtd/types.d.ts\u00013import type { SchemaObject } from \"../../types\";\nexport type SchemaObjectMap = {\n    [Ref in string]?: SchemaObject;\n};\nexport declare const jtdForms: readonly [\"elements\", \"values\", \"discriminator\", \"properties\", \"optionalProperties\", \"enum\", \"type\", \"ref\"];\nexport type JTDForm = typeof jtdForms[number];\n/lib/runtime/timestamp.ts\u0005const DT_SEPARATOR = /t|\\s/i\nconst DATE = /^(\\d\\d\\d\\d)-(\\d\\d)-(\\d\\d)$/\nconst TIME = /^(\\d\\d):(\\d\\d):(\\d\\d)(?:\\.\\d+)?(?:z|([+-]\\d\\d)(?::?(\\d\\d))?)$/i\nconst DAYS = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\n\nexport default function validTimestamp(str: string, allowDate: boolean): boolean {\n  // http://tools.ietf.org/html/rfc3339#section-5.6\n  const dt: string[] = str.split(DT_SEPARATOR)\n  return (\n    (dt.length === 2 && validDate(dt[0]) && validTime(dt[1])) ||\n    (allowDate && dt.length === 1 && validDate(dt[0]))\n  )\n}\n\nfunction validDate(str: string): boolean {\n  const matches: string[] | null = DATE.exec(str)\n  if (!matches) return false\n  const y: number = +matches[1]\n  const m: number = +matches[2]\n  const d: number = +matches[3]\n  return (\n    m >= 1 &&\n    m <= 12 &&\n    d >= 1 &&\n    (d <= DAYS[m] ||\n      // leap year: https://tools.ietf.org/html/rfc3339#appendix-C\n      (m === 2 && d === 29 && (y % 100 === 0 ? y % 400 === 0 : y % 4 === 0)))\n  )\n}\n\nfunction validTime(str: string): boolean {\n  const matches: string[] | null = TIME.exec(str)\n  if (!matches) return false\n  const hr: number = +matches[1]\n  const min: number = +matches[2]\n  const sec: number = +matches[3]\n  const tzH: number = +(matches[4] || 0)\n  const tzM: number = +(matches[5] || 0)\n  return (\n    (hr <= 23 && min <= 59 && sec <= 59) ||\n    // leap second\n    (hr - tzH === 23 && min - tzM === 59 && sec === 60)\n  )\n}\n\nvalidTimestamp.code = 'require(\"ajv/dist/runtime/timestamp\").default'\n /dist/compile/codegen/index.d.ts\fimport type { ScopeValueSets, NameValue, ValueScope, ValueScopeName } from \"./scope\";\nimport { _Code, Code, Name } from \"./code\";\nimport { Scope } from \"./scope\";\nexport { _, str, strConcat, nil, getProperty, stringify, regexpCode, Name, Code } from \"./code\";\nexport { Scope, ScopeStore, ValueScope, ValueScopeName, ScopeValueSets, varKinds } from \"./scope\";\nexport type SafeExpr = Code | number | boolean | null;\nexport type Block = Code | (() => void);\nexport declare const operators: {\n    GT: _Code;\n    GTE: _Code;\n    LT: _Code;\n    LTE: _Code;\n    EQ: _Code;\n    NEQ: _Code;\n    NOT: _Code;\n    OR: _Code;\n    AND: _Code;\n    ADD: _Code;\n};\nexport interface CodeGenOptions {\n    es5?: boolean;\n    lines?: boolean;\n    ownProperties?: boolean;\n}\nexport declare class CodeGen {\n    readonly _scope: Scope;\n    readonly _extScope: ValueScope;\n    readonly _values: ScopeValueSets;\n    private readonly _nodes;\n    private readonly _blockStarts;\n    private readonly _constants;\n    private readonly opts;\n    constructor(extScope: ValueScope, opts?: CodeGenOptions);\n    toString(): string;\n    name(prefix: string): Name;\n    scopeName(prefix: string): ValueScopeName;\n    scopeValue(prefixOrName: ValueScopeName | string, value: NameValue): Name;\n    getScopeValue(prefix: string, keyOrRef: unknown): ValueScopeName | undefined;\n    scopeRefs(scopeName: Name): Code;\n    scopeCode(): Code;\n    private _def;\n    const(nameOrPrefix: Name | string, rhs: SafeExpr, _constant?: boolean): Name;\n    let(nameOrPrefix: Name | string, rhs?: SafeExpr, _constant?: boolean): Name;\n    var(nameOrPrefix: Name | string, rhs?: SafeExpr, _constant?: boolean): Name;\n    assign(lhs: Code, rhs: SafeExpr, sideEffects?: boolean): CodeGen;\n    add(lhs: Code, rhs: SafeExpr): CodeGen;\n    code(c: Block | SafeExpr): CodeGen;\n    object(...keyValues: [Name | string, SafeExpr | string][]): _Code;\n    if(condition: Code | boolean, thenBody?: Block, elseBody?: Block): CodeGen;\n    elseIf(condition: Code | boolean): CodeGen;\n    else(): CodeGen;\n    endIf(): CodeGen;\n    private _for;\n    for(iteration: Code, forBody?: Block): CodeGen;\n    forRange(nameOrPrefix: Name | string, from: SafeExpr, to: SafeExpr, forBody: (index: Name) => void, varKind?: Code): CodeGen;\n    forOf(nameOrPrefix: Name | string, iterable: Code, forBody: (item: Name) => void, varKind?: Code): CodeGen;\n    forIn(nameOrPrefix: Name | string, obj: Code, forBody: (item: Name) => void, varKind?: Code): CodeGen;\n    endFor(): CodeGen;\n    label(label: Name): CodeGen;\n    break(label?: Code): CodeGen;\n    return(value: Block | SafeExpr): CodeGen;\n    try(tryBody: Block, catchCode?: (e: Name) => void, finallyCode?: Block): CodeGen;\n    throw(error: Code): CodeGen;\n    block(body?: Block, nodeCount?: number): CodeGen;\n    endBlock(nodeCount?: number): CodeGen;\n    func(name: Name, args?: Code, async?: boolean, funcBody?: Block): CodeGen;\n    endFunc(): CodeGen;\n    optimize(n?: number): void;\n    private _leafNode;\n    private _blockNode;\n    private _endBlockNode;\n    private _elseNode;\n    private get _root();\n    private get _currNode();\n    private set _currNode(value);\n}\nexport declare function not<T extends Code | SafeExpr>(x: T): T;\nexport declare function and(...args: Code[]): Code;\nexport declare function or(...args: Code[]): Code;\n/dist/2019.js.map\u0006,{\"version\":3,\"file\":\"2019.js\",\"sourceRoot\":\"\",\"sources\":[\"../lib/2019.ts\"],\"names\":[],\"mappings\":\";;;AACA,iCAAuC;AAEvC,kDAAsD;AACtD,oDAAsD;AACtD,8CAAgD;AAChD,4DAA8D;AAC9D,gEAAwD;AACxD,oEAA0D;AAE1D,MAAM,cAAc,GAAG,8CAA8C,CAAA;AAErE,MAAM,OAAQ,SAAQ,cAAO;IAC3B,YAAY,OAAgB,EAAE;QAC5B,KAAK,CAAC;YACJ,GAAG,IAAI;YACP,UAAU,EAAE,IAAI;YAChB,IAAI,EAAE,IAAI;YACV,WAAW,EAAE,IAAI;SAClB,CAAC,CAAA;IACJ,CAAC;IAED,gBAAgB;QACd,KAAK,CAAC,gBAAgB,EAAE,CAAA;QACxB,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAA;QACrC,gBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAA;QACxD,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,CAAA;QAClC,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC,CAAA;QACzC,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa;YAAE,IAAI,CAAC,UAAU,CAAC,uBAAa,CAAC,CAAA;IAC7D,CAAC;IAED,qBAAqB;QACnB,KAAK,CAAC,qBAAqB,EAAE,CAAA;QAC7B,MAAM,EAAC,KAAK,EAAE,IAAI,EAAC,GAAG,IAAI,CAAC,IAAI,CAAA;QAC/B,IAAI,CAAC,IAAI;YAAE,OAAM;QACjB,6BAAiB,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;QACnC,IAAI,CAAC,IAAI,CAAC,+BAA+B,CAAC,GAAG,cAAc,CAAA;IAC7D,CAAC;IAED,WAAW;QACT,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW;YAC3B,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAA;IACzF,CAAC;CACF;AAED,MAAM,CAAC,OAAO,GAAG,OAAO,GAAG,OAAO,CAAA;AAClC,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,YAAY,EAAE,EAAC,KAAK,EAAE,IAAI,EAAC,CAAC,CAAA;AAE3D,kBAAe,OAAO,CAAA;AAyBtB,+CAA6C;AAArC,sGAAA,UAAU,OAAA;AAIlB,6CAA6F;AAArF,4FAAA,CAAC,OAAA;AAAE,8FAAA,GAAG,OAAA;AAAE,oGAAA,SAAS,OAAA;AAAE,8FAAA,GAAG,OAAA;AAAE,+FAAA,IAAI,OAAA;AAAQ,kGAAA,OAAO,OAAA;AACnD,+DAAqE;AAA7D,mHAAA,OAAO,OAAmB;AAClC,iDAA8D;AAAtD,4GAAA,OAAO,OAAmB\"}/lib/compile/jtd/serialize.ts \u001bimport type Ajv from \"../../core\"\nimport type {SchemaObject} from \"../../types\"\nimport {jtdForms, JTDForm, SchemaObjectMap} from \"./types\"\nimport {SchemaEnv, getCompilingSchema} from \"..\"\nimport {_, str, and, getProperty, CodeGen, Code, Name} from \"../codegen\"\nimport MissingRefError from \"../ref_error\"\nimport N from \"../names\"\nimport {isOwnProperty} from \"../../vocabularies/code\"\nimport {hasRef} from \"../../vocabularies/jtd/ref\"\nimport {useFunc} from \"../util\"\nimport quote from \"../../runtime/quote\"\n\nconst genSerialize: {[F in JTDForm]: (cxt: SerializeCxt) => void} = {\n  elements: serializeElements,\n  values: serializeValues,\n  discriminator: serializeDiscriminator,\n  properties: serializeProperties,\n  optionalProperties: serializeProperties,\n  enum: serializeString,\n  type: serializeType,\n  ref: serializeRef,\n}\n\ninterface SerializeCxt {\n  readonly gen: CodeGen\n  readonly self: Ajv // current Ajv instance\n  readonly schemaEnv: SchemaEnv\n  readonly definitions: SchemaObjectMap\n  schema: SchemaObject\n  data: Code\n}\n\nexport default function compileSerializer(\n  this: Ajv,\n  sch: SchemaEnv,\n  definitions: SchemaObjectMap\n): SchemaEnv {\n  const _sch = getCompilingSchema.call(this, sch)\n  if (_sch) return _sch\n  const {es5, lines} = this.opts.code\n  const {ownProperties} = this.opts\n  const gen = new CodeGen(this.scope, {es5, lines, ownProperties})\n  const serializeName = gen.scopeName(\"serialize\")\n  const cxt: SerializeCxt = {\n    self: this,\n    gen,\n    schema: sch.schema as SchemaObject,\n    schemaEnv: sch,\n    definitions,\n    data: N.data,\n  }\n\n  let sourceCode: string | undefined\n  try {\n    this._compilations.add(sch)\n    sch.serializeName = serializeName\n    gen.func(serializeName, N.data, false, () => {\n      gen.let(N.json, str``)\n      serializeCode(cxt)\n      gen.return(N.json)\n    })\n    gen.optimize(this.opts.code.optimize)\n    const serializeFuncCode = gen.toString()\n    sourceCode = `${gen.scopeRefs(N.scope)}return ${serializeFuncCode}`\n    const makeSerialize = new Function(`${N.scope}`, sourceCode)\n    const serialize: (data: unknown) => string = makeSerialize(this.scope.get())\n    this.scope.value(serializeName, {ref: serialize})\n    sch.serialize = serialize\n  } catch (e) {\n    if (sourceCode) this.logger.error(\"Error compiling serializer, function code:\", sourceCode)\n    delete sch.serialize\n    delete sch.serializeName\n    throw e\n  } finally {\n    this._compilations.delete(sch)\n  }\n  return sch\n}\n\nfunction serializeCode(cxt: SerializeCxt): void {\n  let form: JTDForm | undefined\n  for (const key of jtdForms) {\n    if (key in cxt.schema) {\n      form = key\n      break\n    }\n  }\n  serializeNullable(cxt, form ? genSerialize[form] : serializeEmpty)\n}\n\nfunction serializeNullable(cxt: SerializeCxt, serializeForm: (_cxt: SerializeCxt) => void): void {\n  const {gen, schema, data} = cxt\n  if (!schema.nullable) return serializeForm(cxt)\n  gen.if(\n    _`${data} === undefined || ${data} === null`,\n    () => gen.add(N.json, _`\"null\"`),\n    () => serializeForm(cxt)\n  )\n}\n\nfunction serializeElements(cxt: SerializeCxt): void {\n  const {gen, schema, data} = cxt\n  gen.add(N.json, str`[`)\n  const first = gen.let(\"first\", true)\n  gen.forOf(\"el\", data, (el) => {\n    addComma(cxt, first)\n    serializeCode({...cxt, schema: schema.elements, data: el})\n  })\n  gen.add(N.json, str`]`)\n}\n\nfunction serializeValues(cxt: SerializeCxt): void {\n  const {gen, schema, data} = cxt\n  gen.add(N.json, str`{`)\n  const first = gen.let(\"first\", true)\n  gen.forIn(\"key\", data, (key) => serializeKeyValue(cxt, key, schema.values, first))\n  gen.add(N.json, str`}`)\n}\n\nfunction serializeKeyValue(cxt: SerializeCxt, key: Name, schema: SchemaObject, first?: Name): void {\n  const {gen, data} = cxt\n  addComma(cxt, first)\n  serializeString({...cxt, data: key})\n  gen.add(N.json, str`:`)\n  const value = gen.const(\"value\", _`${data}${getProperty(key)}`)\n  serializeCode({...cxt, schema, data: value})\n}\n\nfunction serializeDiscriminator(cxt: SerializeCxt): void {\n  const {gen, schema, data} = cxt\n  const {discriminator} = schema\n  gen.add(N.json, str`{${JSON.stringify(discriminator)}:`)\n  const tag = gen.const(\"tag\", _`${data}${getProperty(discriminator)}`)\n  serializeString({...cxt, data: tag})\n  gen.if(false)\n  for (const tagValue in schema.mapping) {\n    gen.elseIf(_`${tag} === ${tagValue}`)\n    const sch = schema.mapping[tagValue]\n    serializeSchemaProperties({...cxt, schema: sch}, discriminator)\n  }\n  gen.endIf()\n  gen.add(N.json, str`}`)\n}\n\nfunction serializeProperties(cxt: SerializeCxt): void {\n  const {gen} = cxt\n  gen.add(N.json, str`{`)\n  serializeSchemaProperties(cxt)\n  gen.add(N.json, str`}`)\n}\n\nfunction serializeSchemaProperties(cxt: SerializeCxt, discriminator?: string): void {\n  const {gen, schema, data} = cxt\n  const {properties, optionalProperties} = schema\n  const props = keys(properties)\n  const optProps = keys(optionalProperties)\n  const allProps = allProperties(props.concat(optProps))\n  let first = !discriminator\n  let firstProp: Name | undefined\n\n  for (const key of props) {\n    if (first) first = false\n    else gen.add(N.json, str`,`)\n    serializeProperty(key, properties[key], keyValue(key))\n  }\n  if (first) firstProp = gen.let(\"first\", true)\n  for (const key of optProps) {\n    const value = keyValue(key)\n    gen.if(and(_`${value} !== undefined`, isOwnProperty(gen, data, key)), () => {\n      addComma(cxt, firstProp)\n      serializeProperty(key, optionalProperties[key], value)\n    })\n  }\n  if (schema.additionalProperties) {\n    gen.forIn(\"key\", data, (key) =>\n      gen.if(isAdditional(key, allProps), () => serializeKeyValue(cxt, key, {}, firstProp))\n    )\n  }\n\n  function keys(ps?: SchemaObjectMap): string[] {\n    return ps ? Object.keys(ps) : []\n  }\n\n  function allProperties(ps: string[]): string[] {\n    if (discriminator) ps.push(discriminator)\n    if (new Set(ps).size !== ps.length) {\n      throw new Error(\"JTD: properties/optionalProperties/disciminator overlap\")\n    }\n    return ps\n  }\n\n  function keyValue(key: string): Name {\n    return gen.const(\"value\", _`${data}${getProperty(key)}`)\n  }\n\n  function serializeProperty(key: string, propSchema: SchemaObject, value: Name): void {\n    gen.add(N.json, str`${JSON.stringify(key)}:`)\n    serializeCode({...cxt, schema: propSchema, data: value})\n  }\n\n  function isAdditional(key: Name, ps: string[]): Code | true {\n    return ps.length ? and(...ps.map((p) => _`${key} !== ${p}`)) : true\n  }\n}\n\nfunction serializeType(cxt: SerializeCxt): void {\n  const {gen, schema, data} = cxt\n  switch (schema.type) {\n    case \"boolean\":\n      gen.add(N.json, _`${data} ? \"true\" : \"false\"`)\n      break\n    case \"string\":\n      serializeString(cxt)\n      break\n    case \"timestamp\":\n      gen.if(\n        _`${data} instanceof Date`,\n        () => gen.add(N.json, _`'\"' + ${data}.toISOString() + '\"'`),\n        () => serializeString(cxt)\n      )\n      break\n    default:\n      serializeNumber(cxt)\n  }\n}\n\nfunction serializeString({gen, data}: SerializeCxt): void {\n  gen.add(N.json, _`${useFunc(gen, quote)}(${data})`)\n}\n\nfunction serializeNumber({gen, data}: SerializeCxt): void {\n  gen.add(N.json, _`\"\" + ${data}`)\n}\n\nfunction serializeRef(cxt: SerializeCxt): void {\n  const {gen, self, data, definitions, schema, schemaEnv} = cxt\n  const {ref} = schema\n  const refSchema = definitions[ref]\n  if (!refSchema) throw new MissingRefError(self.opts.uriResolver, \"\", ref, `No definition ${ref}`)\n  if (!hasRef(refSchema)) return serializeCode({...cxt, schema: refSchema})\n  const {root} = schemaEnv\n  const sch = compileSerializer.call(self, new SchemaEnv({schema: refSchema, root}), definitions)\n  gen.add(N.json, _`${getSerialize(gen, sch)}(${data})`)\n}\n\nfunction getSerialize(gen: CodeGen, sch: SchemaEnv): Code {\n  return sch.serialize\n    ? gen.scopeValue(\"serialize\", {ref: sch.serialize})\n    : _`${gen.scopeValue(\"wrapper\", {ref: sch})}.serialize`\n}\n\nfunction serializeEmpty({gen, data}: SerializeCxt): void {\n  gen.add(N.json, _`JSON.stringify(${data})`)\n}\n\nfunction addComma({gen}: SerializeCxt, first?: Name): void {\n  if (first) {\n    gen.if(\n      first,\n      () => gen.assign(first, false),\n      () => gen.add(N.json, str`,`)\n    )\n  } else {\n    gen.add(N.json, str`,`)\n  }\n}\n//dist/vocabularies/applicator/dependencies.d.ts\u0003Gimport type { CodeKeywordDefinition, ErrorObject, KeywordErrorDefinition, SchemaMap, AnySchema } from \"../../types\";\nimport type { KeywordCxt } from \"../../compile/validate\";\nexport type PropertyDependencies = {\n    [K in string]?: string[];\n};\nexport interface DependenciesErrorParams {\n    property: string;\n    missingProperty: string;\n    depsCount: number;\n    deps: string;\n}\nexport type DependenciesError = ErrorObject<\"dependencies\", DependenciesErrorParams, {\n    [K in string]?: string[] | AnySchema;\n}>;\nexport declare const error: KeywordErrorDefinition;\ndeclare const def: CodeKeywordDefinition;\nexport declare function validatePropertyDeps(cxt: KeywordCxt, propertyDeps?: {\n    [K in string]?: string[];\n}): void;\nexport declare function validateSchemaDeps(cxt: KeywordCxt, schemaDeps?: SchemaMap): void;\nexport default def;\n\"/dist/compile/codegen/index.js.map\\o{\"version\":3,\"file\":\"index.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../lib/compile/codegen/index.ts\"],\"names\":[],\"mappings\":\"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\"}!/dist/runtime/validation_error.js\u0001Q\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nclass ValidationError extends Error {\n    constructor(errors) {\n        super(\"validation failed\");\n        this.errors = errors;\n        this.ajv = this.validation = true;\n    }\n}\nexports.default = ValidationError;\n//# sourceMappingURL=validation_error.js.map1/lib/refs/json-schema-2020-12/meta/meta-data.json\u0002{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"$id\": \"https://json-schema.org/draft/2020-12/meta/meta-data\",\n  \"$vocabulary\": {\n    \"https://json-schema.org/draft/2020-12/vocab/meta-data\": true\n  },\n  \"$dynamicAnchor\": \"meta\",\n\n  \"title\": \"Meta-data vocabulary meta-schema\",\n\n  \"type\": [\"object\", \"boolean\"],\n  \"properties\": {\n    \"title\": {\n      \"type\": \"string\"\n    },\n    \"description\": {\n      \"type\": \"string\"\n    },\n    \"default\": true,\n    \"deprecated\": {\n      \"type\": \"boolean\",\n      \"default\": false\n    },\n    \"readOnly\": {\n      \"type\": \"boolean\",\n      \"default\": false\n    },\n    \"writeOnly\": {\n      \"type\": \"boolean\",\n      \"default\": false\n    },\n    \"examples\": {\n      \"type\": \"array\",\n      \"items\": true\n    }\n  }\n}\n/lib/compile/codegen/scope.ts\u0017]import {_, nil, Code, Name} from \"./code\"\n\ninterface NameGroup {\n  prefix: string\n  index: number\n}\n\nexport interface NameValue {\n  ref: ValueReference // this is the reference to any value that can be referred to from generated code via `globals` var in the closure\n  key?: unknown // any key to identify a global to avoid duplicates, if not passed ref is used\n  code?: Code // this is the code creating the value needed for standalone code wit_out closure - can be a primitive value, function or import (`require`)\n}\n\nexport type ValueReference = unknown // possibly make CodeGen parameterized type on this type\n\nclass ValueError extends Error {\n  readonly value?: NameValue\n  constructor(name: ValueScopeName) {\n    super(`CodeGen: \"code\" for ${name} not defined`)\n    this.value = name.value\n  }\n}\n\ninterface ScopeOptions {\n  prefixes?: Set<string>\n  parent?: Scope\n}\n\ninterface ValueScopeOptions extends ScopeOptions {\n  scope: ScopeStore\n  es5?: boolean\n  lines?: boolean\n}\n\nexport type ScopeStore = Record<string, ValueReference[] | undefined>\n\ntype ScopeValues = {\n  [Prefix in string]?: Map<unknown, ValueScopeName>\n}\n\nexport type ScopeValueSets = {\n  [Prefix in string]?: Set<ValueScopeName>\n}\n\nexport enum UsedValueState {\n  Started,\n  Completed,\n}\n\nexport type UsedScopeValues = {\n  [Prefix in string]?: Map<ValueScopeName, UsedValueState | undefined>\n}\n\nexport const varKinds = {\n  const: new Name(\"const\"),\n  let: new Name(\"let\"),\n  var: new Name(\"var\"),\n}\n\nexport class Scope {\n  protected readonly _names: {[Prefix in string]?: NameGroup} = {}\n  protected readonly _prefixes?: Set<string>\n  protected readonly _parent?: Scope\n\n  constructor({prefixes, parent}: ScopeOptions = {}) {\n    this._prefixes = prefixes\n    this._parent = parent\n  }\n\n  toName(nameOrPrefix: Name | string): Name {\n    return nameOrPrefix instanceof Name ? nameOrPrefix : this.name(nameOrPrefix)\n  }\n\n  name(prefix: string): Name {\n    return new Name(this._newName(prefix))\n  }\n\n  protected _newName(prefix: string): string {\n    const ng = this._names[prefix] || this._nameGroup(prefix)\n    return `${prefix}${ng.index++}`\n  }\n\n  private _nameGroup(prefix: string): NameGroup {\n    if (this._parent?._prefixes?.has(prefix) || (this._prefixes && !this._prefixes.has(prefix))) {\n      throw new Error(`CodeGen: prefix \"${prefix}\" is not allowed in this scope`)\n    }\n    return (this._names[prefix] = {prefix, index: 0})\n  }\n}\n\ninterface ScopePath {\n  property: string\n  itemIndex: number\n}\n\nexport class ValueScopeName extends Name {\n  readonly prefix: string\n  value?: NameValue\n  scopePath?: Code\n\n  constructor(prefix: string, nameStr: string) {\n    super(nameStr)\n    this.prefix = prefix\n  }\n\n  setValue(value: NameValue, {property, itemIndex}: ScopePath): void {\n    this.value = value\n    this.scopePath = _`.${new Name(property)}[${itemIndex}]`\n  }\n}\n\ninterface VSOptions extends ValueScopeOptions {\n  _n: Code\n}\n\nconst line = _`\\n`\n\nexport class ValueScope extends Scope {\n  protected readonly _values: ScopeValues = {}\n  protected readonly _scope: ScopeStore\n  readonly opts: VSOptions\n\n  constructor(opts: ValueScopeOptions) {\n    super(opts)\n    this._scope = opts.scope\n    this.opts = {...opts, _n: opts.lines ? line : nil}\n  }\n\n  get(): ScopeStore {\n    return this._scope\n  }\n\n  name(prefix: string): ValueScopeName {\n    return new ValueScopeName(prefix, this._newName(prefix))\n  }\n\n  value(nameOrPrefix: ValueScopeName | string, value: NameValue): ValueScopeName {\n    if (value.ref === undefined) throw new Error(\"CodeGen: ref must be passed in value\")\n    const name = this.toName(nameOrPrefix) as ValueScopeName\n    const {prefix} = name\n    const valueKey = value.key ?? value.ref\n    let vs = this._values[prefix]\n    if (vs) {\n      const _name = vs.get(valueKey)\n      if (_name) return _name\n    } else {\n      vs = this._values[prefix] = new Map()\n    }\n    vs.set(valueKey, name)\n\n    const s = this._scope[prefix] || (this._scope[prefix] = [])\n    const itemIndex = s.length\n    s[itemIndex] = value.ref\n    name.setValue(value, {property: prefix, itemIndex})\n    return name\n  }\n\n  getValue(prefix: string, keyOrRef: unknown): ValueScopeName | undefined {\n    const vs = this._values[prefix]\n    if (!vs) return\n    return vs.get(keyOrRef)\n  }\n\n  scopeRefs(scopeName: Name, values: ScopeValues | ScopeValueSets = this._values): Code {\n    return this._reduceValues(values, (name: ValueScopeName) => {\n      if (name.scopePath === undefined) throw new Error(`CodeGen: name \"${name}\" has no value`)\n      return _`${scopeName}${name.scopePath}`\n    })\n  }\n\n  scopeCode(\n    values: ScopeValues | ScopeValueSets = this._values,\n    usedValues?: UsedScopeValues,\n    getCode?: (n: ValueScopeName) => Code | undefined\n  ): Code {\n    return this._reduceValues(\n      values,\n      (name: ValueScopeName) => {\n        if (name.value === undefined) throw new Error(`CodeGen: name \"${name}\" has no value`)\n        return name.value.code\n      },\n      usedValues,\n      getCode\n    )\n  }\n\n  private _reduceValues(\n    values: ScopeValues | ScopeValueSets,\n    valueCode: (n: ValueScopeName) => Code | undefined,\n    usedValues: UsedScopeValues = {},\n    getCode?: (n: ValueScopeName) => Code | undefined\n  ): Code {\n    let code: Code = nil\n    for (const prefix in values) {\n      const vs = values[prefix]\n      if (!vs) continue\n      const nameSet = (usedValues[prefix] = usedValues[prefix] || new Map())\n      vs.forEach((name: ValueScopeName) => {\n        if (nameSet.has(name)) return\n        nameSet.set(name, UsedValueState.Started)\n        let c = valueCode(name)\n        if (c) {\n          const def = this.opts.es5 ? varKinds.var : varKinds.const\n          code = _`${code}${def} ${name} = ${c};${this.opts._n}`\n        } else if ((c = getCode?.(name))) {\n          code = _`${code}${c}${this.opts._n}`\n        } else {\n          throw new ValueError(name)\n        }\n        nameSet.set(name, UsedValueState.Completed)\n      })\n    }\n    return code\n  }\n}\n%/lib/vocabularies/applicator/anyOf.ts\u0001|import type {CodeKeywordDefinition, ErrorNoParams, AnySchema} from \"../../types\"\nimport {validateUnion} from \"../code\"\n\nexport type AnyOfError = ErrorNoParams<\"anyOf\", AnySchema[]>\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"anyOf\",\n  schemaType: \"array\",\n  trackErrors: true,\n  code: validateUnion,\n  error: {message: \"must match a schema in anyOf\"},\n}\n\nexport default def\n&/lib/refs/json-schema-2019-09/index.ts\u0003import type Ajv from \"../../core\"\nimport type {AnySchemaObject} from \"../../types\"\nimport * as metaSchema from \"./schema.json\"\nimport * as applicator from \"./meta/applicator.json\"\nimport * as content from \"./meta/content.json\"\nimport * as core from \"./meta/core.json\"\nimport * as format from \"./meta/format.json\"\nimport * as metadata from \"./meta/meta-data.json\"\nimport * as validation from \"./meta/validation.json\"\n\nconst META_SUPPORT_DATA = [\"/properties\"]\n\nexport default function addMetaSchema2019(this: Ajv, $data?: boolean): Ajv {\n  ;[\n    metaSchema,\n    applicator,\n    content,\n    core,\n    with$data(this, format),\n    metadata,\n    with$data(this, validation),\n  ].forEach((sch) => this.addMetaSchema(sch, undefined, false))\n  return this\n\n  function with$data(ajv: Ajv, sch: AnySchemaObject): AnySchemaObject {\n    return $data ? ajv.$dataMetaSchema(sch, META_SUPPORT_DATA) : sch\n  }\n}\n(/lib/vocabularies/discriminator/types.tsimport type {ErrorObject} from \"../../types\"\n\nexport enum DiscrError {\n  Tag = \"tag\",\n  Mapping = \"mapping\",\n}\n\nexport type DiscrErrorObj<E extends DiscrError> = ErrorObject<\n  \"discriminator\",\n  {error: E; tag: string; tagValue: unknown},\n  string\n>\n-/dist/vocabularies/dynamic/recursiveAnchor.js\u0002\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst dynamicAnchor_1 = require(\"./dynamicAnchor\");\nconst util_1 = require(\"../../compile/util\");\nconst def = {\n    keyword: \"$recursiveAnchor\",\n    schemaType: \"boolean\",\n    code(cxt) {\n        if (cxt.schema)\n            (0, dynamicAnchor_1.dynamicAnchor)(cxt, \"\");\n        else\n            (0, util_1.checkStrictMode)(cxt.it, \"$recursiveAnchor: false is ignored\");\n    },\n};\nexports.default = def;\n//# sourceMappingURL=recursiveAnchor.js.map)/dist/refs/json-schema-2019-09/index.d.tsoimport type Ajv from \"../../core\";\nexport default function addMetaSchema2019(this: Ajv, $data?: boolean): Ajv;\n#/dist/vocabularies/applicator/if.js\t\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst error = {\n    message: ({ params }) => (0, codegen_1.str) `must match \"${params.ifClause}\" schema`,\n    params: ({ params }) => (0, codegen_1._) `{failingKeyword: ${params.ifClause}}`,\n};\nconst def = {\n    keyword: \"if\",\n    schemaType: [\"object\", \"boolean\"],\n    trackErrors: true,\n    error,\n    code(cxt) {\n        const { gen, parentSchema, it } = cxt;\n        if (parentSchema.then === undefined && parentSchema.else === undefined) {\n            (0, util_1.checkStrictMode)(it, '\"if\" without \"then\" and \"else\" is ignored');\n        }\n        const hasThen = hasSchema(it, \"then\");\n        const hasElse = hasSchema(it, \"else\");\n        if (!hasThen && !hasElse)\n            return;\n        const valid = gen.let(\"valid\", true);\n        const schValid = gen.name(\"_valid\");\n        validateIf();\n        cxt.reset();\n        if (hasThen && hasElse) {\n            const ifClause = gen.let(\"ifClause\");\n            cxt.setParams({ ifClause });\n            gen.if(schValid, validateClause(\"then\", ifClause), validateClause(\"else\", ifClause));\n        }\n        else if (hasThen) {\n            gen.if(schValid, validateClause(\"then\"));\n        }\n        else {\n            gen.if((0, codegen_1.not)(schValid), validateClause(\"else\"));\n        }\n        cxt.pass(valid, () => cxt.error(true));\n        function validateIf() {\n            const schCxt = cxt.subschema({\n                keyword: \"if\",\n                compositeRule: true,\n                createErrors: false,\n                allErrors: false,\n            }, schValid);\n            cxt.mergeEvaluated(schCxt);\n        }\n        function validateClause(keyword, ifClause) {\n            return () => {\n                const schCxt = cxt.subschema({ keyword }, schValid);\n                gen.assign(valid, schValid);\n                cxt.mergeValidEvaluated(schCxt, valid);\n                if (ifClause)\n                    gen.assign(ifClause, (0, codegen_1._) `${keyword}`);\n                else\n                    cxt.setParams({ ifClause: keyword });\n            };\n        }\n    },\n};\nfunction hasSchema(it, keyword) {\n    const schema = it.schema[keyword];\n    return schema !== undefined && !(0, util_1.alwaysValidSchema)(it, schema);\n}\nexports.default = def;\n//# sourceMappingURL=if.js.map0/dist/vocabularies/validation/limitContains.d.tsximport type { CodeKeywordDefinition } from \"../../types\";\ndeclare const def: CodeKeywordDefinition;\nexport default def;\n/dist/runtime/re2.js\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst re2 = require(\"re2\");\nre2.code = 'require(\"ajv/dist/runtime/re2\").default';\nexports.default = re2;\n//# sourceMappingURL=re2.js.map5/dist/vocabularies/applicator/dependentSchemas.js.map\u0001a{\"version\":3,\"file\":\"dependentSchemas.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../lib/vocabularies/applicator/dependentSchemas.ts\"],\"names\":[],\"mappings\":\";;AACA,iDAAiD;AAEjD,MAAM,GAAG,GAA0B;IACjC,OAAO,EAAE,kBAAkB;IAC3B,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE,QAAQ;IACpB,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAA,iCAAkB,EAAC,GAAG,CAAC;CACvC,CAAA;AAED,kBAAe,GAAG,CAAA\"},/lib/vocabularies/dynamic/recursiveAnchor.ts\u0001import type {CodeKeywordDefinition} from \"../../types\"\nimport {dynamicAnchor} from \"./dynamicAnchor\"\nimport {checkStrictMode} from \"../../compile/util\"\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"$recursiveAnchor\",\n  schemaType: \"boolean\",\n  code(cxt) {\n    if (cxt.schema) dynamicAnchor(cxt, \"\")\n    else checkStrictMode(cxt.it, \"$recursiveAnchor: false is ignored\")\n  },\n}\n\nexport default def\n/dist/compile/validate/index.jsPH\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getData = exports.KeywordCxt = exports.validateFunctionCode = void 0;\nconst boolSchema_1 = require(\"./boolSchema\");\nconst dataType_1 = require(\"./dataType\");\nconst applicability_1 = require(\"./applicability\");\nconst dataType_2 = require(\"./dataType\");\nconst defaults_1 = require(\"./defaults\");\nconst keyword_1 = require(\"./keyword\");\nconst subschema_1 = require(\"./subschema\");\nconst codegen_1 = require(\"../codegen\");\nconst names_1 = require(\"../names\");\nconst resolve_1 = require(\"../resolve\");\nconst util_1 = require(\"../util\");\nconst errors_1 = require(\"../errors\");\n// schema compilation - generates validation function, subschemaCode (below) is used for subschemas\nfunction validateFunctionCode(it) {\n    if (isSchemaObj(it)) {\n        checkKeywords(it);\n        if (schemaCxtHasRules(it)) {\n            topSchemaObjCode(it);\n            return;\n        }\n    }\n    validateFunction(it, () => (0, boolSchema_1.topBoolOrEmptySchema)(it));\n}\nexports.validateFunctionCode = validateFunctionCode;\nfunction validateFunction({ gen, validateName, schema, schemaEnv, opts }, body) {\n    if (opts.code.es5) {\n        gen.func(validateName, (0, codegen_1._) `${names_1.default.data}, ${names_1.default.valCxt}`, schemaEnv.$async, () => {\n            gen.code((0, codegen_1._) `\"use strict\"; ${funcSourceUrl(schema, opts)}`);\n            destructureValCxtES5(gen, opts);\n            gen.code(body);\n        });\n    }\n    else {\n        gen.func(validateName, (0, codegen_1._) `${names_1.default.data}, ${destructureValCxt(opts)}`, schemaEnv.$async, () => gen.code(funcSourceUrl(schema, opts)).code(body));\n    }\n}\nfunction destructureValCxt(opts) {\n    return (0, codegen_1._) `{${names_1.default.instancePath}=\"\", ${names_1.default.parentData}, ${names_1.default.parentDataProperty}, ${names_1.default.rootData}=${names_1.default.data}${opts.dynamicRef ? (0, codegen_1._) `, ${names_1.default.dynamicAnchors}={}` : codegen_1.nil}}={}`;\n}\nfunction destructureValCxtES5(gen, opts) {\n    gen.if(names_1.default.valCxt, () => {\n        gen.var(names_1.default.instancePath, (0, codegen_1._) `${names_1.default.valCxt}.${names_1.default.instancePath}`);\n        gen.var(names_1.default.parentData, (0, codegen_1._) `${names_1.default.valCxt}.${names_1.default.parentData}`);\n        gen.var(names_1.default.parentDataProperty, (0, codegen_1._) `${names_1.default.valCxt}.${names_1.default.parentDataProperty}`);\n        gen.var(names_1.default.rootData, (0, codegen_1._) `${names_1.default.valCxt}.${names_1.default.rootData}`);\n        if (opts.dynamicRef)\n            gen.var(names_1.default.dynamicAnchors, (0, codegen_1._) `${names_1.default.valCxt}.${names_1.default.dynamicAnchors}`);\n    }, () => {\n        gen.var(names_1.default.instancePath, (0, codegen_1._) `\"\"`);\n        gen.var(names_1.default.parentData, (0, codegen_1._) `undefined`);\n        gen.var(names_1.default.parentDataProperty, (0, codegen_1._) `undefined`);\n        gen.var(names_1.default.rootData, names_1.default.data);\n        if (opts.dynamicRef)\n            gen.var(names_1.default.dynamicAnchors, (0, codegen_1._) `{}`);\n    });\n}\nfunction topSchemaObjCode(it) {\n    const { schema, opts, gen } = it;\n    validateFunction(it, () => {\n        if (opts.$comment && schema.$comment)\n            commentKeyword(it);\n        checkNoDefault(it);\n        gen.let(names_1.default.vErrors, null);\n        gen.let(names_1.default.errors, 0);\n        if (opts.unevaluated)\n            resetEvaluated(it);\n        typeAndKeywords(it);\n        returnResults(it);\n    });\n    return;\n}\nfunction resetEvaluated(it) {\n    // TODO maybe some hook to execute it in the end to check whether props/items are Name, as in assignEvaluated\n    const { gen, validateName } = it;\n    it.evaluated = gen.const(\"evaluated\", (0, codegen_1._) `${validateName}.evaluated`);\n    gen.if((0, codegen_1._) `${it.evaluated}.dynamicProps`, () => gen.assign((0, codegen_1._) `${it.evaluated}.props`, (0, codegen_1._) `undefined`));\n    gen.if((0, codegen_1._) `${it.evaluated}.dynamicItems`, () => gen.assign((0, codegen_1._) `${it.evaluated}.items`, (0, codegen_1._) `undefined`));\n}\nfunction funcSourceUrl(schema, opts) {\n    const schId = typeof schema == \"object\" && schema[opts.schemaId];\n    return schId && (opts.code.source || opts.code.process) ? (0, codegen_1._) `/*# sourceURL=${schId} */` : codegen_1.nil;\n}\n// schema compilation - this function is used recursively to generate code for sub-schemas\nfunction subschemaCode(it, valid) {\n    if (isSchemaObj(it)) {\n        checkKeywords(it);\n        if (schemaCxtHasRules(it)) {\n            subSchemaObjCode(it, valid);\n            return;\n        }\n    }\n    (0, boolSchema_1.boolOrEmptySchema)(it, valid);\n}\nfunction schemaCxtHasRules({ schema, self }) {\n    if (typeof schema == \"boolean\")\n        return !schema;\n    for (const key in schema)\n        if (self.RULES.all[key])\n            return true;\n    return false;\n}\nfunction isSchemaObj(it) {\n    return typeof it.schema != \"boolean\";\n}\nfunction subSchemaObjCode(it, valid) {\n    const { schema, gen, opts } = it;\n    if (opts.$comment && schema.$comment)\n        commentKeyword(it);\n    updateContext(it);\n    checkAsyncSchema(it);\n    const errsCount = gen.const(\"_errs\", names_1.default.errors);\n    typeAndKeywords(it, errsCount);\n    // TODO var\n    gen.var(valid, (0, codegen_1._) `${errsCount} === ${names_1.default.errors}`);\n}\nfunction checkKeywords(it) {\n    (0, util_1.checkUnknownRules)(it);\n    checkRefsAndKeywords(it);\n}\nfunction typeAndKeywords(it, errsCount) {\n    if (it.opts.jtd)\n        return schemaKeywords(it, [], false, errsCount);\n    const types = (0, dataType_1.getSchemaTypes)(it.schema);\n    const checkedTypes = (0, dataType_1.coerceAndCheckDataType)(it, types);\n    schemaKeywords(it, types, !checkedTypes, errsCount);\n}\nfunction checkRefsAndKeywords(it) {\n    const { schema, errSchemaPath, opts, self } = it;\n    if (schema.$ref && opts.ignoreKeywordsWithRef && (0, util_1.schemaHasRulesButRef)(schema, self.RULES)) {\n        self.logger.warn(`$ref: keywords ignored in schema at path \"${errSchemaPath}\"`);\n    }\n}\nfunction checkNoDefault(it) {\n    const { schema, opts } = it;\n    if (schema.default !== undefined && opts.useDefaults && opts.strictSchema) {\n        (0, util_1.checkStrictMode)(it, \"default is ignored in the schema root\");\n    }\n}\nfunction updateContext(it) {\n    const schId = it.schema[it.opts.schemaId];\n    if (schId)\n        it.baseId = (0, resolve_1.resolveUrl)(it.opts.uriResolver, it.baseId, schId);\n}\nfunction checkAsyncSchema(it) {\n    if (it.schema.$async && !it.schemaEnv.$async)\n        throw new Error(\"async schema in sync schema\");\n}\nfunction commentKeyword({ gen, schemaEnv, schema, errSchemaPath, opts }) {\n    const msg = schema.$comment;\n    if (opts.$comment === true) {\n        gen.code((0, codegen_1._) `${names_1.default.self}.logger.log(${msg})`);\n    }\n    else if (typeof opts.$comment == \"function\") {\n        const schemaPath = (0, codegen_1.str) `${errSchemaPath}/$comment`;\n        const rootName = gen.scopeValue(\"root\", { ref: schemaEnv.root });\n        gen.code((0, codegen_1._) `${names_1.default.self}.opts.$comment(${msg}, ${schemaPath}, ${rootName}.schema)`);\n    }\n}\nfunction returnResults(it) {\n    const { gen, schemaEnv, validateName, ValidationError, opts } = it;\n    if (schemaEnv.$async) {\n        // TODO assign unevaluated\n        gen.if((0, codegen_1._) `${names_1.default.errors} === 0`, () => gen.return(names_1.default.data), () => gen.throw((0, codegen_1._) `new ${ValidationError}(${names_1.default.vErrors})`));\n    }\n    else {\n        gen.assign((0, codegen_1._) `${validateName}.errors`, names_1.default.vErrors);\n        if (opts.unevaluated)\n            assignEvaluated(it);\n        gen.return((0, codegen_1._) `${names_1.default.errors} === 0`);\n    }\n}\nfunction assignEvaluated({ gen, evaluated, props, items }) {\n    if (props instanceof codegen_1.Name)\n        gen.assign((0, codegen_1._) `${evaluated}.props`, props);\n    if (items instanceof codegen_1.Name)\n        gen.assign((0, codegen_1._) `${evaluated}.items`, items);\n}\nfunction schemaKeywords(it, types, typeErrors, errsCount) {\n    const { gen, schema, data, allErrors, opts, self } = it;\n    const { RULES } = self;\n    if (schema.$ref && (opts.ignoreKeywordsWithRef || !(0, util_1.schemaHasRulesButRef)(schema, RULES))) {\n        gen.block(() => keywordCode(it, \"$ref\", RULES.all.$ref.definition)); // TODO typecast\n        return;\n    }\n    if (!opts.jtd)\n        checkStrictTypes(it, types);\n    gen.block(() => {\n        for (const group of RULES.rules)\n            groupKeywords(group);\n        groupKeywords(RULES.post);\n    });\n    function groupKeywords(group) {\n        if (!(0, applicability_1.shouldUseGroup)(schema, group))\n            return;\n        if (group.type) {\n            gen.if((0, dataType_2.checkDataType)(group.type, data, opts.strictNumbers));\n            iterateKeywords(it, group);\n            if (types.length === 1 && types[0] === group.type && typeErrors) {\n                gen.else();\n                (0, dataType_2.reportTypeError)(it);\n            }\n            gen.endIf();\n        }\n        else {\n            iterateKeywords(it, group);\n        }\n        // TODO make it \"ok\" call?\n        if (!allErrors)\n            gen.if((0, codegen_1._) `${names_1.default.errors} === ${errsCount || 0}`);\n    }\n}\nfunction iterateKeywords(it, group) {\n    const { gen, schema, opts: { useDefaults }, } = it;\n    if (useDefaults)\n        (0, defaults_1.assignDefaults)(it, group.type);\n    gen.block(() => {\n        for (const rule of group.rules) {\n            if ((0, applicability_1.shouldUseRule)(schema, rule)) {\n                keywordCode(it, rule.keyword, rule.definition, group.type);\n            }\n        }\n    });\n}\nfunction checkStrictTypes(it, types) {\n    if (it.schemaEnv.meta || !it.opts.strictTypes)\n        return;\n    checkContextTypes(it, types);\n    if (!it.opts.allowUnionTypes)\n        checkMultipleTypes(it, types);\n    checkKeywordTypes(it, it.dataTypes);\n}\nfunction checkContextTypes(it, types) {\n    if (!types.length)\n        return;\n    if (!it.dataTypes.length) {\n        it.dataTypes = types;\n        return;\n    }\n    types.forEach((t) => {\n        if (!includesType(it.dataTypes, t)) {\n            strictTypesError(it, `type \"${t}\" not allowed by context \"${it.dataTypes.join(\",\")}\"`);\n        }\n    });\n    narrowSchemaTypes(it, types);\n}\nfunction checkMultipleTypes(it, ts) {\n    if (ts.length > 1 && !(ts.length === 2 && ts.includes(\"null\"))) {\n        strictTypesError(it, \"use allowUnionTypes to allow union type keyword\");\n    }\n}\nfunction checkKeywordTypes(it, ts) {\n    const rules = it.self.RULES.all;\n    for (const keyword in rules) {\n        const rule = rules[keyword];\n        if (typeof rule == \"object\" && (0, applicability_1.shouldUseRule)(it.schema, rule)) {\n            const { type } = rule.definition;\n            if (type.length && !type.some((t) => hasApplicableType(ts, t))) {\n                strictTypesError(it, `missing type \"${type.join(\",\")}\" for keyword \"${keyword}\"`);\n            }\n        }\n    }\n}\nfunction hasApplicableType(schTs, kwdT) {\n    return schTs.includes(kwdT) || (kwdT === \"number\" && schTs.includes(\"integer\"));\n}\nfunction includesType(ts, t) {\n    return ts.includes(t) || (t === \"integer\" && ts.includes(\"number\"));\n}\nfunction narrowSchemaTypes(it, withTypes) {\n    const ts = [];\n    for (const t of it.dataTypes) {\n        if (includesType(withTypes, t))\n            ts.push(t);\n        else if (withTypes.includes(\"integer\") && t === \"number\")\n            ts.push(\"integer\");\n    }\n    it.dataTypes = ts;\n}\nfunction strictTypesError(it, msg) {\n    const schemaPath = it.schemaEnv.baseId + it.errSchemaPath;\n    msg += ` at \"${schemaPath}\" (strictTypes)`;\n    (0, util_1.checkStrictMode)(it, msg, it.opts.strictTypes);\n}\nclass KeywordCxt {\n    constructor(it, def, keyword) {\n        (0, keyword_1.validateKeywordUsage)(it, def, keyword);\n        this.gen = it.gen;\n        this.allErrors = it.allErrors;\n        this.keyword = keyword;\n        this.data = it.data;\n        this.schema = it.schema[keyword];\n        this.$data = def.$data && it.opts.$data && this.schema && this.schema.$data;\n        this.schemaValue = (0, util_1.schemaRefOrVal)(it, this.schema, keyword, this.$data);\n        this.schemaType = def.schemaType;\n        this.parentSchema = it.schema;\n        this.params = {};\n        this.it = it;\n        this.def = def;\n        if (this.$data) {\n            this.schemaCode = it.gen.const(\"vSchema\", getData(this.$data, it));\n        }\n        else {\n            this.schemaCode = this.schemaValue;\n            if (!(0, keyword_1.validSchemaType)(this.schema, def.schemaType, def.allowUndefined)) {\n                throw new Error(`${keyword} value must be ${JSON.stringify(def.schemaType)}`);\n            }\n        }\n        if (\"code\" in def ? def.trackErrors : def.errors !== false) {\n            this.errsCount = it.gen.const(\"_errs\", names_1.default.errors);\n        }\n    }\n    result(condition, successAction, failAction) {\n        this.failResult((0, codegen_1.not)(condition), successAction, failAction);\n    }\n    failResult(condition, successAction, failAction) {\n        this.gen.if(condition);\n        if (failAction)\n            failAction();\n        else\n            this.error();\n        if (successAction) {\n            this.gen.else();\n            successAction();\n            if (this.allErrors)\n                this.gen.endIf();\n        }\n        else {\n            if (this.allErrors)\n                this.gen.endIf();\n            else\n                this.gen.else();\n        }\n    }\n    pass(condition, failAction) {\n        this.failResult((0, codegen_1.not)(condition), undefined, failAction);\n    }\n    fail(condition) {\n        if (condition === undefined) {\n            this.error();\n            if (!this.allErrors)\n                this.gen.if(false); // this branch will be removed by gen.optimize\n            return;\n        }\n        this.gen.if(condition);\n        this.error();\n        if (this.allErrors)\n            this.gen.endIf();\n        else\n            this.gen.else();\n    }\n    fail$data(condition) {\n        if (!this.$data)\n            return this.fail(condition);\n        const { schemaCode } = this;\n        this.fail((0, codegen_1._) `${schemaCode} !== undefined && (${(0, codegen_1.or)(this.invalid$data(), condition)})`);\n    }\n    error(append, errorParams, errorPaths) {\n        if (errorParams) {\n            this.setParams(errorParams);\n            this._error(append, errorPaths);\n            this.setParams({});\n            return;\n        }\n        this._error(append, errorPaths);\n    }\n    _error(append, errorPaths) {\n        ;\n        (append ? errors_1.reportExtraError : errors_1.reportError)(this, this.def.error, errorPaths);\n    }\n    $dataError() {\n        (0, errors_1.reportError)(this, this.def.$dataError || errors_1.keyword$DataError);\n    }\n    reset() {\n        if (this.errsCount === undefined)\n            throw new Error('add \"trackErrors\" to keyword definition');\n        (0, errors_1.resetErrorsCount)(this.gen, this.errsCount);\n    }\n    ok(cond) {\n        if (!this.allErrors)\n            this.gen.if(cond);\n    }\n    setParams(obj, assign) {\n        if (assign)\n            Object.assign(this.params, obj);\n        else\n            this.params = obj;\n    }\n    block$data(valid, codeBlock, $dataValid = codegen_1.nil) {\n        this.gen.block(() => {\n            this.check$data(valid, $dataValid);\n            codeBlock();\n        });\n    }\n    check$data(valid = codegen_1.nil, $dataValid = codegen_1.nil) {\n        if (!this.$data)\n            return;\n        const { gen, schemaCode, schemaType, def } = this;\n        gen.if((0, codegen_1.or)((0, codegen_1._) `${schemaCode} === undefined`, $dataValid));\n        if (valid !== codegen_1.nil)\n            gen.assign(valid, true);\n        if (schemaType.length || def.validateSchema) {\n            gen.elseIf(this.invalid$data());\n            this.$dataError();\n            if (valid !== codegen_1.nil)\n                gen.assign(valid, false);\n        }\n        gen.else();\n    }\n    invalid$data() {\n        const { gen, schemaCode, schemaType, def, it } = this;\n        return (0, codegen_1.or)(wrong$DataType(), invalid$DataSchema());\n        function wrong$DataType() {\n            if (schemaType.length) {\n                /* istanbul ignore if */\n                if (!(schemaCode instanceof codegen_1.Name))\n                    throw new Error(\"ajv implementation error\");\n                const st = Array.isArray(schemaType) ? schemaType : [schemaType];\n                return (0, codegen_1._) `${(0, dataType_2.checkDataTypes)(st, schemaCode, it.opts.strictNumbers, dataType_2.DataType.Wrong)}`;\n            }\n            return codegen_1.nil;\n        }\n        function invalid$DataSchema() {\n            if (def.validateSchema) {\n                const validateSchemaRef = gen.scopeValue(\"validate$data\", { ref: def.validateSchema }); // TODO value.code for standalone\n                return (0, codegen_1._) `!${validateSchemaRef}(${schemaCode})`;\n            }\n            return codegen_1.nil;\n        }\n    }\n    subschema(appl, valid) {\n        const subschema = (0, subschema_1.getSubschema)(this.it, appl);\n        (0, subschema_1.extendSubschemaData)(subschema, this.it, appl);\n        (0, subschema_1.extendSubschemaMode)(subschema, appl);\n        const nextContext = { ...this.it, ...subschema, items: undefined, props: undefined };\n        subschemaCode(nextContext, valid);\n        return nextContext;\n    }\n    mergeEvaluated(schemaCxt, toName) {\n        const { it, gen } = this;\n        if (!it.opts.unevaluated)\n            return;\n        if (it.props !== true && schemaCxt.props !== undefined) {\n            it.props = util_1.mergeEvaluated.props(gen, schemaCxt.props, it.props, toName);\n        }\n        if (it.items !== true && schemaCxt.items !== undefined) {\n            it.items = util_1.mergeEvaluated.items(gen, schemaCxt.items, it.items, toName);\n        }\n    }\n    mergeValidEvaluated(schemaCxt, valid) {\n        const { it, gen } = this;\n        if (it.opts.unevaluated && (it.props !== true || it.items !== true)) {\n            gen.if(valid, () => this.mergeEvaluated(schemaCxt, codegen_1.Name));\n            return true;\n        }\n    }\n}\nexports.KeywordCxt = KeywordCxt;\nfunction keywordCode(it, keyword, def, ruleType) {\n    const cxt = new KeywordCxt(it, def, keyword);\n    if (\"code\" in def) {\n        def.code(cxt, ruleType);\n    }\n    else if (cxt.$data && def.validate) {\n        (0, keyword_1.funcKeywordCode)(cxt, def);\n    }\n    else if (\"macro\" in def) {\n        (0, keyword_1.macroKeywordCode)(cxt, def);\n    }\n    else if (def.compile || def.validate) {\n        (0, keyword_1.funcKeywordCode)(cxt, def);\n    }\n}\nconst JSON_POINTER = /^\\/(?:[^~]|~0|~1)*$/;\nconst RELATIVE_JSON_POINTER = /^([0-9]+)(#|\\/(?:[^~]|~0|~1)*)?$/;\nfunction getData($data, { dataLevel, dataNames, dataPathArr }) {\n    let jsonPointer;\n    let data;\n    if ($data === \"\")\n        return names_1.default.rootData;\n    if ($data[0] === \"/\") {\n        if (!JSON_POINTER.test($data))\n            throw new Error(`Invalid JSON-pointer: ${$data}`);\n        jsonPointer = $data;\n        data = names_1.default.rootData;\n    }\n    else {\n        const matches = RELATIVE_JSON_POINTER.exec($data);\n        if (!matches)\n            throw new Error(`Invalid JSON-pointer: ${$data}`);\n        const up = +matches[1];\n        jsonPointer = matches[2];\n        if (jsonPointer === \"#\") {\n            if (up >= dataLevel)\n                throw new Error(errorMsg(\"property/index\", up));\n            return dataPathArr[dataLevel - up];\n        }\n        if (up > dataLevel)\n            throw new Error(errorMsg(\"data\", up));\n        data = dataNames[dataLevel - up];\n        if (!jsonPointer)\n            return data;\n    }\n    let expr = data;\n    const segments = jsonPointer.split(\"/\");\n    for (const segment of segments) {\n        if (segment) {\n            data = (0, codegen_1._) `${data}${(0, codegen_1.getProperty)((0, util_1.unescapeJsonPointer)(segment))}`;\n            expr = (0, codegen_1._) `${expr} && ${data}`;\n        }\n    }\n    return expr;\n    function errorMsg(pointerType, up) {\n        return `Cannot access ${pointerType} ${up} levels up, current level is ${dataLevel}`;\n    }\n}\nexports.getData = getData;\n//# sourceMappingURL=index.js.map!/dist/compile/codegen/code.js.map\u0014j{\"version\":3,\"file\":\"code.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../lib/compile/codegen/code.ts\"],\"names\":[],\"mappings\":\"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\"}/dist/vocabularies/draft7.d.tsimport type { Vocabulary } from \"../types\";\ndeclare const draft7Vocabularies: Vocabulary[];\nexport default draft7Vocabularies;\n!/lib/vocabularies/jtd/nullable.ts\u0002import type {KeywordCxt} from \"../../compile/validate\"\nimport {_, not, nil, Code, Name} from \"../../compile/codegen\"\n\nexport function checkNullable(\n  {gen, data, parentSchema}: KeywordCxt,\n  cond: Code = nil\n): [Name, Code] {\n  const valid = gen.name(\"valid\")\n  if (parentSchema.nullable) {\n    gen.let(valid, _`${data} === null`)\n    cond = not(valid)\n  } else {\n    gen.let(valid, false)\n  }\n  return [valid, cond]\n}\n\nexport function checkNullableObject(cxt: KeywordCxt, cond: Code): [Name, Code] {\n  const [valid, cond_] = checkNullable(cxt, cond)\n  return [valid, _`${cond_} && typeof ${cxt.data} == \"object\" && !Array.isArray(${cxt.data})`]\n}\n\"/dist/compile/validate/defaults.js\u0005\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.assignDefaults = void 0;\nconst codegen_1 = require(\"../codegen\");\nconst util_1 = require(\"../util\");\nfunction assignDefaults(it, ty) {\n    const { properties, items } = it.schema;\n    if (ty === \"object\" && properties) {\n        for (const key in properties) {\n            assignDefault(it, key, properties[key].default);\n        }\n    }\n    else if (ty === \"array\" && Array.isArray(items)) {\n        items.forEach((sch, i) => assignDefault(it, i, sch.default));\n    }\n}\nexports.assignDefaults = assignDefaults;\nfunction assignDefault(it, prop, defaultValue) {\n    const { gen, compositeRule, data, opts } = it;\n    if (defaultValue === undefined)\n        return;\n    const childData = (0, codegen_1._) `${data}${(0, codegen_1.getProperty)(prop)}`;\n    if (compositeRule) {\n        (0, util_1.checkStrictMode)(it, `default is ignored for: ${childData}`);\n        return;\n    }\n    let condition = (0, codegen_1._) `${childData} === undefined`;\n    if (opts.useDefaults === \"empty\") {\n        condition = (0, codegen_1._) `${condition} || ${childData} === null || ${childData} === \"\"`;\n    }\n    // `${childData} === undefined` +\n    // (opts.useDefaults === \"empty\" ? ` || ${childData} === null || ${childData} === \"\"` : \"\")\n    gen.if(condition, (0, codegen_1._) `${childData} = ${(0, codegen_1.stringify)(defaultValue)}`);\n}\n//# sourceMappingURL=defaults.js.map&/dist/vocabularies/validation/index.js\u0004\f\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst limitNumber_1 = require(\"./limitNumber\");\nconst multipleOf_1 = require(\"./multipleOf\");\nconst limitLength_1 = require(\"./limitLength\");\nconst pattern_1 = require(\"./pattern\");\nconst limitProperties_1 = require(\"./limitProperties\");\nconst required_1 = require(\"./required\");\nconst limitItems_1 = require(\"./limitItems\");\nconst uniqueItems_1 = require(\"./uniqueItems\");\nconst const_1 = require(\"./const\");\nconst enum_1 = require(\"./enum\");\nconst validation = [\n    // number\n    limitNumber_1.default,\n    multipleOf_1.default,\n    // string\n    limitLength_1.default,\n    pattern_1.default,\n    // object\n    limitProperties_1.default,\n    required_1.default,\n    // array\n    limitItems_1.default,\n    uniqueItems_1.default,\n    // any\n    { keyword: \"type\", schemaType: [\"string\", \"array\"] },\n    { keyword: \"nullable\", schemaType: \"boolean\" },\n    const_1.default,\n    enum_1.default,\n];\nexports.default = validation;\n//# sourceMappingURL=index.js.map//lib/refs/json-schema-2020-12/meta/content.json\u0001{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"$id\": \"https://json-schema.org/draft/2020-12/meta/content\",\n  \"$vocabulary\": {\n    \"https://json-schema.org/draft/2020-12/vocab/content\": true\n  },\n  \"$dynamicAnchor\": \"meta\",\n\n  \"title\": \"Content vocabulary meta-schema\",\n\n  \"type\": [\"object\", \"boolean\"],\n  \"properties\": {\n    \"contentEncoding\": {\"type\": \"string\"},\n    \"contentMediaType\": {\"type\": \"string\"},\n    \"contentSchema\": {\"$dynamicRef\": \"#meta\"}\n  }\n}\n/dist/refs/jtd-schema.js.map\u000b\b{\"version\":3,\"file\":\"jtd-schema.js\",\"sourceRoot\":\"\",\"sources\":[\"../../lib/refs/jtd-schema.ts\"],\"names\":[],\"mappings\":\"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\"}&/dist/vocabularies/applicator/items.js\u0007\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.validateTuple = void 0;\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst code_1 = require(\"../code\");\nconst def = {\n    keyword: \"items\",\n    type: \"array\",\n    schemaType: [\"object\", \"array\", \"boolean\"],\n    before: \"uniqueItems\",\n    code(cxt) {\n        const { schema, it } = cxt;\n        if (Array.isArray(schema))\n            return validateTuple(cxt, \"additionalItems\", schema);\n        it.items = true;\n        if ((0, util_1.alwaysValidSchema)(it, schema))\n            return;\n        cxt.ok((0, code_1.validateArray)(cxt));\n    },\n};\nfunction validateTuple(cxt, extraItems, schArr = cxt.schema) {\n    const { gen, parentSchema, data, keyword, it } = cxt;\n    checkStrictTuple(parentSchema);\n    if (it.opts.unevaluated && schArr.length && it.items !== true) {\n        it.items = util_1.mergeEvaluated.items(gen, schArr.length, it.items);\n    }\n    const valid = gen.name(\"valid\");\n    const len = gen.const(\"len\", (0, codegen_1._) `${data}.length`);\n    schArr.forEach((sch, i) => {\n        if ((0, util_1.alwaysValidSchema)(it, sch))\n            return;\n        gen.if((0, codegen_1._) `${len} > ${i}`, () => cxt.subschema({\n            keyword,\n            schemaProp: i,\n            dataProp: i,\n        }, valid));\n        cxt.ok(valid);\n    });\n    function checkStrictTuple(sch) {\n        const { opts, errSchemaPath } = it;\n        const l = schArr.length;\n        const fullTuple = l === sch.minItems && (l === sch.maxItems || sch[extraItems] === false);\n        if (opts.strictTuples && !fullTuple) {\n            const msg = `\"${keyword}\" is ${l}-tuple, but minItems or maxItems/${extraItems} are not specified or different at path \"${errSchemaPath}\"`;\n            (0, util_1.checkStrictMode)(it, msg, opts.strictTuples);\n        }\n    }\n}\nexports.validateTuple = validateTuple;\nexports.default = def;\n//# sourceMappingURL=items.js.map$/dist/vocabularies/jtd/nullable.d.ts\u00011import type { KeywordCxt } from \"../../compile/validate\";\nimport { Code, Name } from \"../../compile/codegen\";\nexport declare function checkNullable({ gen, data, parentSchema }: KeywordCxt, cond?: Code): [Name, Code];\nexport declare function checkNullableObject(cxt: KeywordCxt, cond: Code): [Name, Code];\n-/dist/vocabularies/applicator/contains.js.map\u000e{\"version\":3,\"file\":\"contains.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../lib/vocabularies/applicator/contains.ts\"],\"names\":[],\"mappings\":\"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\"}!/dist/vocabularies/jtd/index.d.ts\u0002\u0015import type { Vocabulary } from \"../../types\";\nimport { JTDTypeError } from \"./type\";\nimport { JTDEnumError } from \"./enum\";\nimport { JTDElementsError } from \"./elements\";\nimport { JTDPropertiesError } from \"./properties\";\nimport { JTDDiscriminatorError } from \"./discriminator\";\nimport { JTDValuesError } from \"./values\";\ndeclare const jtdVocabulary: Vocabulary;\nexport default jtdVocabulary;\nexport type JTDErrorObject = JTDTypeError | JTDEnumError | JTDElementsError | JTDPropertiesError | JTDDiscriminatorError | JTDValuesError;\n2/dist/vocabularies/applicator/patternProperties.js\f\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst code_1 = require(\"../code\");\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst util_2 = require(\"../../compile/util\");\nconst def = {\n    keyword: \"patternProperties\",\n    type: \"object\",\n    schemaType: \"object\",\n    code(cxt) {\n        const { gen, schema, data, parentSchema, it } = cxt;\n        const { opts } = it;\n        const patterns = (0, code_1.allSchemaProperties)(schema);\n        const alwaysValidPatterns = patterns.filter((p) => (0, util_1.alwaysValidSchema)(it, schema[p]));\n        if (patterns.length === 0 ||\n            (alwaysValidPatterns.length === patterns.length &&\n                (!it.opts.unevaluated || it.props === true))) {\n            return;\n        }\n        const checkProperties = opts.strictSchema && !opts.allowMatchingProperties && parentSchema.properties;\n        const valid = gen.name(\"valid\");\n        if (it.props !== true && !(it.props instanceof codegen_1.Name)) {\n            it.props = (0, util_2.evaluatedPropsToName)(gen, it.props);\n        }\n        const { props } = it;\n        validatePatternProperties();\n        function validatePatternProperties() {\n            for (const pat of patterns) {\n                if (checkProperties)\n                    checkMatchingProperties(pat);\n                if (it.allErrors) {\n                    validateProperties(pat);\n                }\n                else {\n                    gen.var(valid, true); // TODO var\n                    validateProperties(pat);\n                    gen.if(valid);\n                }\n            }\n        }\n        function checkMatchingProperties(pat) {\n            for (const prop in checkProperties) {\n                if (new RegExp(pat).test(prop)) {\n                    (0, util_1.checkStrictMode)(it, `property ${prop} matches pattern ${pat} (use allowMatchingProperties)`);\n                }\n            }\n        }\n        function validateProperties(pat) {\n            gen.forIn(\"key\", data, (key) => {\n                gen.if((0, codegen_1._) `${(0, code_1.usePattern)(cxt, pat)}.test(${key})`, () => {\n                    const alwaysValid = alwaysValidPatterns.includes(pat);\n                    if (!alwaysValid) {\n                        cxt.subschema({\n                            keyword: \"patternProperties\",\n                            schemaProp: pat,\n                            dataProp: key,\n                            dataPropType: util_2.Type.Str,\n                        }, valid);\n                    }\n                    if (it.opts.unevaluated && props !== true) {\n                        gen.assign((0, codegen_1._) `${props}[${key}]`, true);\n                    }\n                    else if (!alwaysValid && !it.allErrors) {\n                        // can short-circuit if `unevaluatedProperties` is not supported (opts.next === false)\n                        // or if all properties were evaluated (props === true)\n                        gen.if((0, codegen_1.not)(valid), () => gen.break());\n                    }\n                });\n            });\n        }\n    },\n};\nexports.default = def;\n//# sourceMappingURL=patternProperties.js.map/lib/runtime/re2.tsĝimport * as re2 from \"re2\"\n\ntype Re2 = typeof re2 & {code: string}\n;(re2 as Re2).code = 'require(\"ajv/dist/runtime/re2\").default'\n\nexport default re2 as Re2\n0/dist/vocabularies/validation/limitLength.js.map\u0004y{\"version\":3,\"file\":\"limitLength.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../lib/vocabularies/validation/limitLength.ts\"],\"names\":[],\"mappings\":\";;AAEA,mDAAuD;AACvD,6CAA0C;AAC1C,yDAAiD;AAEjD,MAAM,KAAK,GAA2B;IACpC,OAAO,CAAC,EAAC,OAAO,EAAE,UAAU,EAAC;QAC3B,MAAM,IAAI,GAAG,OAAO,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAA;QACvD,OAAO,IAAA,aAAG,EAAA,iBAAiB,IAAI,SAAS,UAAU,aAAa,CAAA;IACjE,CAAC;IACD,MAAM,EAAE,CAAC,EAAC,UAAU,EAAC,EAAE,EAAE,CAAC,IAAA,WAAC,EAAA,WAAW,UAAU,GAAG;CACpD,CAAA;AAED,MAAM,GAAG,GAA0B;IACjC,OAAO,EAAE,CAAC,WAAW,EAAE,WAAW,CAAC;IACnC,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE,QAAQ;IACpB,KAAK,EAAE,IAAI;IACX,KAAK;IACL,IAAI,CAAC,GAAe;QAClB,MAAM,EAAC,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAC,GAAG,GAAG,CAAA;QAC3C,MAAM,EAAE,GAAG,OAAO,KAAK,WAAW,CAAC,CAAC,CAAC,mBAAS,CAAC,EAAE,CAAC,CAAC,CAAC,mBAAS,CAAC,EAAE,CAAA;QAChE,MAAM,GAAG,GACP,EAAE,CAAC,IAAI,CAAC,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,IAAA,WAAC,EAAA,GAAG,IAAI,SAAS,CAAC,CAAC,CAAC,IAAA,WAAC,EAAA,GAAG,IAAA,cAAO,EAAC,GAAG,CAAC,GAAG,EAAE,oBAAU,CAAC,IAAI,IAAI,GAAG,CAAA;QAC7F,GAAG,CAAC,SAAS,CAAC,IAAA,WAAC,EAAA,GAAG,GAAG,IAAI,EAAE,IAAI,UAAU,EAAE,CAAC,CAAA;IAC9C,CAAC;CACF,CAAA;AAED,kBAAe,GAAG,CAAA\"}(/dist/vocabularies/applicator/oneOf.d.tsimport type { CodeKeywordDefinition, ErrorObject, AnySchema } from \"../../types\";\nexport type OneOfError = ErrorObject<\"oneOf\", {\n    passingSchemas: [number, number] | null;\n}, AnySchema[]>;\ndeclare const def: CodeKeywordDefinition;\nexport default def;\n\"/dist/compile/validate/dataType.js \"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.reportTypeError = exports.checkDataTypes = exports.checkDataType = exports.coerceAndCheckDataType = exports.getJSONTypes = exports.getSchemaTypes = exports.DataType = void 0;\nconst rules_1 = require(\"../rules\");\nconst applicability_1 = require(\"./applicability\");\nconst errors_1 = require(\"../errors\");\nconst codegen_1 = require(\"../codegen\");\nconst util_1 = require(\"../util\");\nvar DataType;\n(function (DataType) {\n    DataType[DataType[\"Correct\"] = 0] = \"Correct\";\n    DataType[DataType[\"Wrong\"] = 1] = \"Wrong\";\n})(DataType = exports.DataType || (exports.DataType = {}));\nfunction getSchemaTypes(schema) {\n    const types = getJSONTypes(schema.type);\n    const hasNull = types.includes(\"null\");\n    if (hasNull) {\n        if (schema.nullable === false)\n            throw new Error(\"type: null contradicts nullable: false\");\n    }\n    else {\n        if (!types.length && schema.nullable !== undefined) {\n            throw new Error('\"nullable\" cannot be used without \"type\"');\n        }\n        if (schema.nullable === true)\n            types.push(\"null\");\n    }\n    return types;\n}\nexports.getSchemaTypes = getSchemaTypes;\nfunction getJSONTypes(ts) {\n    const types = Array.isArray(ts) ? ts : ts ? [ts] : [];\n    if (types.every(rules_1.isJSONType))\n        return types;\n    throw new Error(\"type must be JSONType or JSONType[]: \" + types.join(\",\"));\n}\nexports.getJSONTypes = getJSONTypes;\nfunction coerceAndCheckDataType(it, types) {\n    const { gen, data, opts } = it;\n    const coerceTo = coerceToTypes(types, opts.coerceTypes);\n    const checkTypes = types.length > 0 &&\n        !(coerceTo.length === 0 && types.length === 1 && (0, applicability_1.schemaHasRulesForType)(it, types[0]));\n    if (checkTypes) {\n        const wrongType = checkDataTypes(types, data, opts.strictNumbers, DataType.Wrong);\n        gen.if(wrongType, () => {\n            if (coerceTo.length)\n                coerceData(it, types, coerceTo);\n            else\n                reportTypeError(it);\n        });\n    }\n    return checkTypes;\n}\nexports.coerceAndCheckDataType = coerceAndCheckDataType;\nconst COERCIBLE = new Set([\"string\", \"number\", \"integer\", \"boolean\", \"null\"]);\nfunction coerceToTypes(types, coerceTypes) {\n    return coerceTypes\n        ? types.filter((t) => COERCIBLE.has(t) || (coerceTypes === \"array\" && t === \"array\"))\n        : [];\n}\nfunction coerceData(it, types, coerceTo) {\n    const { gen, data, opts } = it;\n    const dataType = gen.let(\"dataType\", (0, codegen_1._) `typeof ${data}`);\n    const coerced = gen.let(\"coerced\", (0, codegen_1._) `undefined`);\n    if (opts.coerceTypes === \"array\") {\n        gen.if((0, codegen_1._) `${dataType} == 'object' && Array.isArray(${data}) && ${data}.length == 1`, () => gen\n            .assign(data, (0, codegen_1._) `${data}[0]`)\n            .assign(dataType, (0, codegen_1._) `typeof ${data}`)\n            .if(checkDataTypes(types, data, opts.strictNumbers), () => gen.assign(coerced, data)));\n    }\n    gen.if((0, codegen_1._) `${coerced} !== undefined`);\n    for (const t of coerceTo) {\n        if (COERCIBLE.has(t) || (t === \"array\" && opts.coerceTypes === \"array\")) {\n            coerceSpecificType(t);\n        }\n    }\n    gen.else();\n    reportTypeError(it);\n    gen.endIf();\n    gen.if((0, codegen_1._) `${coerced} !== undefined`, () => {\n        gen.assign(data, coerced);\n        assignParentData(it, coerced);\n    });\n    function coerceSpecificType(t) {\n        switch (t) {\n            case \"string\":\n                gen\n                    .elseIf((0, codegen_1._) `${dataType} == \"number\" || ${dataType} == \"boolean\"`)\n                    .assign(coerced, (0, codegen_1._) `\"\" + ${data}`)\n                    .elseIf((0, codegen_1._) `${data} === null`)\n                    .assign(coerced, (0, codegen_1._) `\"\"`);\n                return;\n            case \"number\":\n                gen\n                    .elseIf((0, codegen_1._) `${dataType} == \"boolean\" || ${data} === null\n              || (${dataType} == \"string\" && ${data} && ${data} == +${data})`)\n                    .assign(coerced, (0, codegen_1._) `+${data}`);\n                return;\n            case \"integer\":\n                gen\n                    .elseIf((0, codegen_1._) `${dataType} === \"boolean\" || ${data} === null\n              || (${dataType} === \"string\" && ${data} && ${data} == +${data} && !(${data} % 1))`)\n                    .assign(coerced, (0, codegen_1._) `+${data}`);\n                return;\n            case \"boolean\":\n                gen\n                    .elseIf((0, codegen_1._) `${data} === \"false\" || ${data} === 0 || ${data} === null`)\n                    .assign(coerced, false)\n                    .elseIf((0, codegen_1._) `${data} === \"true\" || ${data} === 1`)\n                    .assign(coerced, true);\n                return;\n            case \"null\":\n                gen.elseIf((0, codegen_1._) `${data} === \"\" || ${data} === 0 || ${data} === false`);\n                gen.assign(coerced, null);\n                return;\n            case \"array\":\n                gen\n                    .elseIf((0, codegen_1._) `${dataType} === \"string\" || ${dataType} === \"number\"\n              || ${dataType} === \"boolean\" || ${data} === null`)\n                    .assign(coerced, (0, codegen_1._) `[${data}]`);\n        }\n    }\n}\nfunction assignParentData({ gen, parentData, parentDataProperty }, expr) {\n    // TODO use gen.property\n    gen.if((0, codegen_1._) `${parentData} !== undefined`, () => gen.assign((0, codegen_1._) `${parentData}[${parentDataProperty}]`, expr));\n}\nfunction checkDataType(dataType, data, strictNums, correct = DataType.Correct) {\n    const EQ = correct === DataType.Correct ? codegen_1.operators.EQ : codegen_1.operators.NEQ;\n    let cond;\n    switch (dataType) {\n        case \"null\":\n            return (0, codegen_1._) `${data} ${EQ} null`;\n        case \"array\":\n            cond = (0, codegen_1._) `Array.isArray(${data})`;\n            break;\n        case \"object\":\n            cond = (0, codegen_1._) `${data} && typeof ${data} == \"object\" && !Array.isArray(${data})`;\n            break;\n        case \"integer\":\n            cond = numCond((0, codegen_1._) `!(${data} % 1) && !isNaN(${data})`);\n            break;\n        case \"number\":\n            cond = numCond();\n            break;\n        default:\n            return (0, codegen_1._) `typeof ${data} ${EQ} ${dataType}`;\n    }\n    return correct === DataType.Correct ? cond : (0, codegen_1.not)(cond);\n    function numCond(_cond = codegen_1.nil) {\n        return (0, codegen_1.and)((0, codegen_1._) `typeof ${data} == \"number\"`, _cond, strictNums ? (0, codegen_1._) `isFinite(${data})` : codegen_1.nil);\n    }\n}\nexports.checkDataType = checkDataType;\nfunction checkDataTypes(dataTypes, data, strictNums, correct) {\n    if (dataTypes.length === 1) {\n        return checkDataType(dataTypes[0], data, strictNums, correct);\n    }\n    let cond;\n    const types = (0, util_1.toHash)(dataTypes);\n    if (types.array && types.object) {\n        const notObj = (0, codegen_1._) `typeof ${data} != \"object\"`;\n        cond = types.null ? notObj : (0, codegen_1._) `!${data} || ${notObj}`;\n        delete types.null;\n        delete types.array;\n        delete types.object;\n    }\n    else {\n        cond = codegen_1.nil;\n    }\n    if (types.number)\n        delete types.integer;\n    for (const t in types)\n        cond = (0, codegen_1.and)(cond, checkDataType(t, data, strictNums, correct));\n    return cond;\n}\nexports.checkDataTypes = checkDataTypes;\nconst typeError = {\n    message: ({ schema }) => `must be ${schema}`,\n    params: ({ schema, schemaValue }) => typeof schema == \"string\" ? (0, codegen_1._) `{type: ${schema}}` : (0, codegen_1._) `{type: ${schemaValue}}`,\n};\nfunction reportTypeError(it) {\n    const cxt = getTypeErrorContext(it);\n    (0, errors_1.reportError)(cxt, typeError);\n}\nexports.reportTypeError = reportTypeError;\nfunction getTypeErrorContext(it) {\n    const { gen, data, schema } = it;\n    const schemaCode = (0, util_1.schemaRefOrVal)(it, schema, \"type\");\n    return {\n        gen,\n        keyword: \"type\",\n        data,\n        schema: schema.type,\n        schemaCode,\n        schemaValue: schemaCode,\n        parentSchema: schema,\n        params: {},\n        it,\n    };\n}\n//# sourceMappingURL=dataType.js.map1/lib/vocabularies/applicator/patternProperties.ts\u000b6import type {CodeKeywordDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {allSchemaProperties, usePattern} from \"../code\"\nimport {_, not, Name} from \"../../compile/codegen\"\nimport {alwaysValidSchema, checkStrictMode} from \"../../compile/util\"\nimport {evaluatedPropsToName, Type} from \"../../compile/util\"\nimport {AnySchema} from \"../../types\"\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"patternProperties\",\n  type: \"object\",\n  schemaType: \"object\",\n  code(cxt: KeywordCxt) {\n    const {gen, schema, data, parentSchema, it} = cxt\n    const {opts} = it\n    const patterns = allSchemaProperties(schema)\n    const alwaysValidPatterns = patterns.filter((p) =>\n      alwaysValidSchema(it, schema[p] as AnySchema)\n    )\n\n    if (\n      patterns.length === 0 ||\n      (alwaysValidPatterns.length === patterns.length &&\n        (!it.opts.unevaluated || it.props === true))\n    ) {\n      return\n    }\n\n    const checkProperties =\n      opts.strictSchema && !opts.allowMatchingProperties && parentSchema.properties\n    const valid = gen.name(\"valid\")\n    if (it.props !== true && !(it.props instanceof Name)) {\n      it.props = evaluatedPropsToName(gen, it.props)\n    }\n    const {props} = it\n    validatePatternProperties()\n\n    function validatePatternProperties(): void {\n      for (const pat of patterns) {\n        if (checkProperties) checkMatchingProperties(pat)\n        if (it.allErrors) {\n          validateProperties(pat)\n        } else {\n          gen.var(valid, true) // TODO var\n          validateProperties(pat)\n          gen.if(valid)\n        }\n      }\n    }\n\n    function checkMatchingProperties(pat: string): void {\n      for (const prop in checkProperties) {\n        if (new RegExp(pat).test(prop)) {\n          checkStrictMode(\n            it,\n            `property ${prop} matches pattern ${pat} (use allowMatchingProperties)`\n          )\n        }\n      }\n    }\n\n    function validateProperties(pat: string): void {\n      gen.forIn(\"key\", data, (key) => {\n        gen.if(_`${usePattern(cxt, pat)}.test(${key})`, () => {\n          const alwaysValid = alwaysValidPatterns.includes(pat)\n          if (!alwaysValid) {\n            cxt.subschema(\n              {\n                keyword: \"patternProperties\",\n                schemaProp: pat,\n                dataProp: key,\n                dataPropType: Type.Str,\n              },\n              valid\n            )\n          }\n\n          if (it.opts.unevaluated && props !== true) {\n            gen.assign(_`${props}[${key}]`, true)\n          } else if (!alwaysValid && !it.allErrors) {\n            // can short-circuit if `unevaluatedProperties` is not supported (opts.next === false)\n            // or if all properties were evaluated (props === true)\n            gen.if(not(valid), () => gen.break())\n          }\n        })\n      })\n    }\n  },\n}\n\nexport default def\n/lib/core.tsvexport {\n  Format,\n  FormatDefinition,\n  AsyncFormatDefinition,\n  KeywordDefinition,\n  KeywordErrorDefinition,\n  CodeKeywordDefinition,\n  MacroKeywordDefinition,\n  FuncKeywordDefinition,\n  Vocabulary,\n  Schema,\n  SchemaObject,\n  AnySchemaObject,\n  AsyncSchema,\n  AnySchema,\n  ValidateFunction,\n  AsyncValidateFunction,\n  AnyValidateFunction,\n  ErrorObject,\n  ErrorNoParams,\n} from \"./types\"\n\nexport {SchemaCxt, SchemaObjCxt} from \"./compile\"\nexport interface Plugin<Opts> {\n  (ajv: Ajv, options?: Opts): Ajv\n  [prop: string]: any\n}\n\nexport {KeywordCxt} from \"./compile/validate\"\nexport {DefinedError} from \"./vocabularies/errors\"\nexport {JSONType} from \"./compile/rules\"\nexport {JSONSchemaType} from \"./types/json-schema\"\nexport {JTDSchemaType, SomeJTDSchemaType, JTDDataType} from \"./types/jtd-schema\"\nexport {_, str, stringify, nil, Name, Code, CodeGen, CodeGenOptions} from \"./compile/codegen\"\n\nimport type {\n  Schema,\n  AnySchema,\n  AnySchemaObject,\n  SchemaObject,\n  AsyncSchema,\n  Vocabulary,\n  KeywordDefinition,\n  AddedKeywordDefinition,\n  AnyValidateFunction,\n  ValidateFunction,\n  AsyncValidateFunction,\n  ErrorObject,\n  Format,\n  AddedFormat,\n  RegExpEngine,\n  UriResolver,\n} from \"./types\"\nimport type {JSONSchemaType} from \"./types/json-schema\"\nimport type {JTDSchemaType, SomeJTDSchemaType, JTDDataType} from \"./types/jtd-schema\"\nimport ValidationError from \"./runtime/validation_error\"\nimport MissingRefError from \"./compile/ref_error\"\nimport {getRules, ValidationRules, Rule, RuleGroup, JSONType} from \"./compile/rules\"\nimport {SchemaEnv, compileSchema, resolveSchema} from \"./compile\"\nimport {Code, ValueScope} from \"./compile/codegen\"\nimport {normalizeId, getSchemaRefs} from \"./compile/resolve\"\nimport {getJSONTypes} from \"./compile/validate/dataType\"\nimport {eachItem} from \"./compile/util\"\nimport * as $dataRefSchema from \"./refs/data.json\"\n\nimport DefaultUriResolver from \"./runtime/uri\"\n\nconst defaultRegExp: RegExpEngine = (str, flags) => new RegExp(str, flags)\ndefaultRegExp.code = \"new RegExp\"\n\nconst META_IGNORE_OPTIONS: (keyof Options)[] = [\"removeAdditional\", \"useDefaults\", \"coerceTypes\"]\nconst EXT_SCOPE_NAMES = new Set([\n  \"validate\",\n  \"serialize\",\n  \"parse\",\n  \"wrapper\",\n  \"root\",\n  \"schema\",\n  \"keyword\",\n  \"pattern\",\n  \"formats\",\n  \"validate$data\",\n  \"func\",\n  \"obj\",\n  \"Error\",\n])\n\nexport type Options = CurrentOptions & DeprecatedOptions\n\nexport interface CurrentOptions {\n  // strict mode options (NEW)\n  strict?: boolean | \"log\"\n  strictSchema?: boolean | \"log\"\n  strictNumbers?: boolean | \"log\"\n  strictTypes?: boolean | \"log\"\n  strictTuples?: boolean | \"log\"\n  strictRequired?: boolean | \"log\"\n  allowMatchingProperties?: boolean // disables a strict mode restriction\n  allowUnionTypes?: boolean\n  validateFormats?: boolean\n  // validation and reporting options:\n  $data?: boolean\n  allErrors?: boolean\n  verbose?: boolean\n  discriminator?: boolean\n  unicodeRegExp?: boolean\n  timestamp?: \"string\" | \"date\" // JTD only\n  parseDate?: boolean // JTD only\n  allowDate?: boolean // JTD only\n  $comment?:\n    | true\n    | ((comment: string, schemaPath?: string, rootSchema?: AnySchemaObject) => unknown)\n  formats?: {[Name in string]?: Format}\n  keywords?: Vocabulary\n  schemas?: AnySchema[] | {[Key in string]?: AnySchema}\n  logger?: Logger | false\n  loadSchema?: (uri: string) => Promise<AnySchemaObject>\n  // options to modify validated data:\n  removeAdditional?: boolean | \"all\" | \"failing\"\n  useDefaults?: boolean | \"empty\"\n  coerceTypes?: boolean | \"array\"\n  // advanced options:\n  next?: boolean // NEW\n  unevaluated?: boolean // NEW\n  dynamicRef?: boolean // NEW\n  schemaId?: \"id\" | \"$id\"\n  jtd?: boolean // NEW\n  meta?: SchemaObject | boolean\n  defaultMeta?: string | AnySchemaObject\n  validateSchema?: boolean | \"log\"\n  addUsedSchema?: boolean\n  inlineRefs?: boolean | number\n  passContext?: boolean\n  loopRequired?: number\n  loopEnum?: number // NEW\n  ownProperties?: boolean\n  multipleOfPrecision?: number\n  int32range?: boolean // JTD only\n  messages?: boolean\n  code?: CodeOptions // NEW\n  uriResolver?: UriResolver\n}\n\nexport interface CodeOptions {\n  es5?: boolean\n  esm?: boolean\n  lines?: boolean\n  optimize?: boolean | number\n  formats?: Code // code to require (or construct) map of available formats - for standalone code\n  source?: boolean\n  process?: (code: string, schema?: SchemaEnv) => string\n  regExp?: RegExpEngine\n}\n\ninterface InstanceCodeOptions extends CodeOptions {\n  regExp: RegExpEngine\n  optimize: number\n}\n\ninterface DeprecatedOptions {\n  /** @deprecated */\n  ignoreKeywordsWithRef?: boolean\n  /** @deprecated */\n  jsPropertySyntax?: boolean // added instead of jsonPointers\n  /** @deprecated */\n  unicode?: boolean\n}\n\ninterface RemovedOptions {\n  format?: boolean\n  errorDataPath?: \"object\" | \"property\"\n  nullable?: boolean // \"nullable\" keyword is supported by default\n  jsonPointers?: boolean\n  extendRefs?: true | \"ignore\" | \"fail\"\n  missingRefs?: true | \"ignore\" | \"fail\"\n  processCode?: (code: string, schema?: SchemaEnv) => string\n  sourceCode?: boolean\n  strictDefaults?: boolean\n  strictKeywords?: boolean\n  uniqueItems?: boolean\n  unknownFormats?: true | string[] | \"ignore\"\n  cache?: any\n  serialize?: (schema: AnySchema) => unknown\n  ajvErrors?: boolean\n}\n\ntype OptionsInfo<T extends RemovedOptions | DeprecatedOptions> = {\n  [K in keyof T]-?: string | undefined\n}\n\nconst removedOptions: OptionsInfo<RemovedOptions> = {\n  errorDataPath: \"\",\n  format: \"`validateFormats: false` can be used instead.\",\n  nullable: '\"nullable\" keyword is supported by default.',\n  jsonPointers: \"Deprecated jsPropertySyntax can be used instead.\",\n  extendRefs: \"Deprecated ignoreKeywordsWithRef can be used instead.\",\n  missingRefs: \"Pass empty schema with $id that should be ignored to ajv.addSchema.\",\n  processCode: \"Use option `code: {process: (code, schemaEnv: object) => string}`\",\n  sourceCode: \"Use option `code: {source: true}`\",\n  strictDefaults: \"It is default now, see option `strict`.\",\n  strictKeywords: \"It is default now, see option `strict`.\",\n  uniqueItems: '\"uniqueItems\" keyword is always validated.',\n  unknownFormats: \"Disable strict mode or pass `true` to `ajv.addFormat` (or `formats` option).\",\n  cache: \"Map is used as cache, schema object as key.\",\n  serialize: \"Map is used as cache, schema object as key.\",\n  ajvErrors: \"It is default now.\",\n}\n\nconst deprecatedOptions: OptionsInfo<DeprecatedOptions> = {\n  ignoreKeywordsWithRef: \"\",\n  jsPropertySyntax: \"\",\n  unicode: '\"minLength\"/\"maxLength\" account for unicode characters by default.',\n}\n\ntype RequiredInstanceOptions = {\n  [K in\n    | \"strictSchema\"\n    | \"strictNumbers\"\n    | \"strictTypes\"\n    | \"strictTuples\"\n    | \"strictRequired\"\n    | \"inlineRefs\"\n    | \"loopRequired\"\n    | \"loopEnum\"\n    | \"meta\"\n    | \"messages\"\n    | \"schemaId\"\n    | \"addUsedSchema\"\n    | \"validateSchema\"\n    | \"validateFormats\"\n    | \"int32range\"\n    | \"unicodeRegExp\"\n    | \"uriResolver\"]: NonNullable<Options[K]>\n} & {code: InstanceCodeOptions}\n\nexport type InstanceOptions = Options & RequiredInstanceOptions\n\nconst MAX_EXPRESSION = 200\n\n// eslint-disable-next-line complexity\nfunction requiredOptions(o: Options): RequiredInstanceOptions {\n  const s = o.strict\n  const _optz = o.code?.optimize\n  const optimize = _optz === true || _optz === undefined ? 1 : _optz || 0\n  const regExp = o.code?.regExp ?? defaultRegExp\n  const uriResolver = o.uriResolver ?? DefaultUriResolver\n  return {\n    strictSchema: o.strictSchema ?? s ?? true,\n    strictNumbers: o.strictNumbers ?? s ?? true,\n    strictTypes: o.strictTypes ?? s ?? \"log\",\n    strictTuples: o.strictTuples ?? s ?? \"log\",\n    strictRequired: o.strictRequired ?? s ?? false,\n    code: o.code ? {...o.code, optimize, regExp} : {optimize, regExp},\n    loopRequired: o.loopRequired ?? MAX_EXPRESSION,\n    loopEnum: o.loopEnum ?? MAX_EXPRESSION,\n    meta: o.meta ?? true,\n    messages: o.messages ?? true,\n    inlineRefs: o.inlineRefs ?? true,\n    schemaId: o.schemaId ?? \"$id\",\n    addUsedSchema: o.addUsedSchema ?? true,\n    validateSchema: o.validateSchema ?? true,\n    validateFormats: o.validateFormats ?? true,\n    unicodeRegExp: o.unicodeRegExp ?? true,\n    int32range: o.int32range ?? true,\n    uriResolver: uriResolver,\n  }\n}\n\nexport interface Logger {\n  log(...args: unknown[]): unknown\n  warn(...args: unknown[]): unknown\n  error(...args: unknown[]): unknown\n}\n\nexport default class Ajv {\n  opts: InstanceOptions\n  errors?: ErrorObject[] | null // errors from the last validation\n  logger: Logger\n  // shared external scope values for compiled functions\n  readonly scope: ValueScope\n  readonly schemas: {[Key in string]?: SchemaEnv} = {}\n  readonly refs: {[Ref in string]?: SchemaEnv | string} = {}\n  readonly formats: {[Name in string]?: AddedFormat} = {}\n  readonly RULES: ValidationRules\n  readonly _compilations: Set<SchemaEnv> = new Set()\n  private readonly _loading: {[Ref in string]?: Promise<AnySchemaObject>} = {}\n  private readonly _cache: Map<AnySchema, SchemaEnv> = new Map()\n  private readonly _metaOpts: InstanceOptions\n\n  static ValidationError = ValidationError\n  static MissingRefError = MissingRefError\n\n  constructor(opts: Options = {}) {\n    opts = this.opts = {...opts, ...requiredOptions(opts)}\n    const {es5, lines} = this.opts.code\n\n    this.scope = new ValueScope({scope: {}, prefixes: EXT_SCOPE_NAMES, es5, lines})\n    this.logger = getLogger(opts.logger)\n    const formatOpt = opts.validateFormats\n    opts.validateFormats = false\n\n    this.RULES = getRules()\n    checkOptions.call(this, removedOptions, opts, \"NOT SUPPORTED\")\n    checkOptions.call(this, deprecatedOptions, opts, \"DEPRECATED\", \"warn\")\n    this._metaOpts = getMetaSchemaOptions.call(this)\n\n    if (opts.formats) addInitialFormats.call(this)\n    this._addVocabularies()\n    this._addDefaultMetaSchema()\n    if (opts.keywords) addInitialKeywords.call(this, opts.keywords)\n    if (typeof opts.meta == \"object\") this.addMetaSchema(opts.meta)\n    addInitialSchemas.call(this)\n    opts.validateFormats = formatOpt\n  }\n\n  _addVocabularies(): void {\n    this.addKeyword(\"$async\")\n  }\n\n  _addDefaultMetaSchema(): void {\n    const {$data, meta, schemaId} = this.opts\n    let _dataRefSchema: SchemaObject = $dataRefSchema\n    if (schemaId === \"id\") {\n      _dataRefSchema = {...$dataRefSchema}\n      _dataRefSchema.id = _dataRefSchema.$id\n      delete _dataRefSchema.$id\n    }\n    if (meta && $data) this.addMetaSchema(_dataRefSchema, _dataRefSchema[schemaId], false)\n  }\n\n  defaultMeta(): string | AnySchemaObject | undefined {\n    const {meta, schemaId} = this.opts\n    return (this.opts.defaultMeta = typeof meta == \"object\" ? meta[schemaId] || meta : undefined)\n  }\n\n  // Validate data using schema\n  // AnySchema will be compiled and cached using schema itself as a key for Map\n  validate(schema: Schema | string, data: unknown): boolean\n  validate(schemaKeyRef: AnySchema | string, data: unknown): boolean | Promise<unknown>\n  validate<T>(schema: Schema | JSONSchemaType<T> | string, data: unknown): data is T\n  // Separated for type inference to work\n  // eslint-disable-next-line @typescript-eslint/unified-signatures\n  validate<T>(schema: JTDSchemaType<T>, data: unknown): data is T\n  // This overload is only intended for typescript inference, the first\n  // argument prevents manual type annotation from matching this overload\n  validate<N extends never, T extends SomeJTDSchemaType>(\n    schema: T,\n    data: unknown\n  ): data is JTDDataType<T>\n  validate<T>(schema: AsyncSchema, data: unknown | T): Promise<T>\n  validate<T>(schemaKeyRef: AnySchema | string, data: unknown): data is T | Promise<T>\n  validate<T>(\n    schemaKeyRef: AnySchema | string, // key, ref or schema object\n    data: unknown | T // to be validated\n  ): boolean | Promise<T> {\n    let v: AnyValidateFunction | undefined\n    if (typeof schemaKeyRef == \"string\") {\n      v = this.getSchema<T>(schemaKeyRef)\n      if (!v) throw new Error(`no schema with key or ref \"${schemaKeyRef}\"`)\n    } else {\n      v = this.compile<T>(schemaKeyRef)\n    }\n\n    const valid = v(data)\n    if (!(\"$async\" in v)) this.errors = v.errors\n    return valid\n  }\n\n  // Create validation function for passed schema\n  // _meta: true if schema is a meta-schema. Used internally to compile meta schemas of user-defined keywords.\n  compile<T = unknown>(schema: Schema | JSONSchemaType<T>, _meta?: boolean): ValidateFunction<T>\n  // Separated for type inference to work\n  // eslint-disable-next-line @typescript-eslint/unified-signatures\n  compile<T = unknown>(schema: JTDSchemaType<T>, _meta?: boolean): ValidateFunction<T>\n  // This overload is only intended for typescript inference, the first\n  // argument prevents manual type annotation from matching this overload\n  compile<N extends never, T extends SomeJTDSchemaType>(\n    schema: T,\n    _meta?: boolean\n  ): ValidateFunction<JTDDataType<T>>\n  compile<T = unknown>(schema: AsyncSchema, _meta?: boolean): AsyncValidateFunction<T>\n  compile<T = unknown>(schema: AnySchema, _meta?: boolean): AnyValidateFunction<T>\n  compile<T = unknown>(schema: AnySchema, _meta?: boolean): AnyValidateFunction<T> {\n    const sch = this._addSchema(schema, _meta)\n    return (sch.validate || this._compileSchemaEnv(sch)) as AnyValidateFunction<T>\n  }\n\n  // Creates validating function for passed schema with asynchronous loading of missing schemas.\n  // `loadSchema` option should be a function that accepts schema uri and returns promise that resolves with the schema.\n  // TODO allow passing schema URI\n  // meta - optional true to compile meta-schema\n  compileAsync<T = unknown>(\n    schema: SchemaObject | JSONSchemaType<T>,\n    _meta?: boolean\n  ): Promise<ValidateFunction<T>>\n  // Separated for type inference to work\n  // eslint-disable-next-line @typescript-eslint/unified-signatures\n  compileAsync<T = unknown>(schema: JTDSchemaType<T>, _meta?: boolean): Promise<ValidateFunction<T>>\n  compileAsync<T = unknown>(schema: AsyncSchema, meta?: boolean): Promise<AsyncValidateFunction<T>>\n  // eslint-disable-next-line @typescript-eslint/unified-signatures\n  compileAsync<T = unknown>(\n    schema: AnySchemaObject,\n    meta?: boolean\n  ): Promise<AnyValidateFunction<T>>\n  compileAsync<T = unknown>(\n    schema: AnySchemaObject,\n    meta?: boolean\n  ): Promise<AnyValidateFunction<T>> {\n    if (typeof this.opts.loadSchema != \"function\") {\n      throw new Error(\"options.loadSchema should be a function\")\n    }\n    const {loadSchema} = this.opts\n    return runCompileAsync.call(this, schema, meta)\n\n    async function runCompileAsync(\n      this: Ajv,\n      _schema: AnySchemaObject,\n      _meta?: boolean\n    ): Promise<AnyValidateFunction> {\n      await loadMetaSchema.call(this, _schema.$schema)\n      const sch = this._addSchema(_schema, _meta)\n      return sch.validate || _compileAsync.call(this, sch)\n    }\n\n    async function loadMetaSchema(this: Ajv, $ref?: string): Promise<void> {\n      if ($ref && !this.getSchema($ref)) {\n        await runCompileAsync.call(this, {$ref}, true)\n      }\n    }\n\n    async function _compileAsync(this: Ajv, sch: SchemaEnv): Promise<AnyValidateFunction> {\n      try {\n        return this._compileSchemaEnv(sch)\n      } catch (e) {\n        if (!(e instanceof MissingRefError)) throw e\n        checkLoaded.call(this, e)\n        await loadMissingSchema.call(this, e.missingSchema)\n        return _compileAsync.call(this, sch)\n      }\n    }\n\n    function checkLoaded(this: Ajv, {missingSchema: ref, missingRef}: MissingRefError): void {\n      if (this.refs[ref]) {\n        throw new Error(`AnySchema ${ref} is loaded but ${missingRef} cannot be resolved`)\n      }\n    }\n\n    async function loadMissingSchema(this: Ajv, ref: string): Promise<void> {\n      const _schema = await _loadSchema.call(this, ref)\n      if (!this.refs[ref]) await loadMetaSchema.call(this, _schema.$schema)\n      if (!this.refs[ref]) this.addSchema(_schema, ref, meta)\n    }\n\n    async function _loadSchema(this: Ajv, ref: string): Promise<AnySchemaObject> {\n      const p = this._loading[ref]\n      if (p) return p\n      try {\n        return await (this._loading[ref] = loadSchema(ref))\n      } finally {\n        delete this._loading[ref]\n      }\n    }\n  }\n\n  // Adds schema to the instance\n  addSchema(\n    schema: AnySchema | AnySchema[], // If array is passed, `key` will be ignored\n    key?: string, // Optional schema key. Can be passed to `validate` method instead of schema object or id/ref. One schema per instance can have empty `id` and `key`.\n    _meta?: boolean, // true if schema is a meta-schema. Used internally, addMetaSchema should be used instead.\n    _validateSchema = this.opts.validateSchema // false to skip schema validation. Used internally, option validateSchema should be used instead.\n  ): Ajv {\n    if (Array.isArray(schema)) {\n      for (const sch of schema) this.addSchema(sch, undefined, _meta, _validateSchema)\n      return this\n    }\n    let id: string | undefined\n    if (typeof schema === \"object\") {\n      const {schemaId} = this.opts\n      id = schema[schemaId]\n      if (id !== undefined && typeof id != \"string\") {\n        throw new Error(`schema ${schemaId} must be string`)\n      }\n    }\n    key = normalizeId(key || id)\n    this._checkUnique(key)\n    this.schemas[key] = this._addSchema(schema, _meta, key, _validateSchema, true)\n    return this\n  }\n\n  // Add schema that will be used to validate other schemas\n  // options in META_IGNORE_OPTIONS are alway set to false\n  addMetaSchema(\n    schema: AnySchemaObject,\n    key?: string, // schema key\n    _validateSchema = this.opts.validateSchema // false to skip schema validation, can be used to override validateSchema option for meta-schema\n  ): Ajv {\n    this.addSchema(schema, key, true, _validateSchema)\n    return this\n  }\n\n  //  Validate schema against its meta-schema\n  validateSchema(schema: AnySchema, throwOrLogError?: boolean): boolean | Promise<unknown> {\n    if (typeof schema == \"boolean\") return true\n    let $schema: string | AnySchemaObject | undefined\n    $schema = schema.$schema\n    if ($schema !== undefined && typeof $schema != \"string\") {\n      throw new Error(\"$schema must be a string\")\n    }\n    $schema = $schema || this.opts.defaultMeta || this.defaultMeta()\n    if (!$schema) {\n      this.logger.warn(\"meta-schema not available\")\n      this.errors = null\n      return true\n    }\n    const valid = this.validate($schema, schema)\n    if (!valid && throwOrLogError) {\n      const message = \"schema is invalid: \" + this.errorsText()\n      if (this.opts.validateSchema === \"log\") this.logger.error(message)\n      else throw new Error(message)\n    }\n    return valid\n  }\n\n  // Get compiled schema by `key` or `ref`.\n  // (`key` that was passed to `addSchema` or full schema reference - `schema.$id` or resolved id)\n  getSchema<T = unknown>(keyRef: string): AnyValidateFunction<T> | undefined {\n    let sch\n    while (typeof (sch = getSchEnv.call(this, keyRef)) == \"string\") keyRef = sch\n    if (sch === undefined) {\n      const {schemaId} = this.opts\n      const root = new SchemaEnv({schema: {}, schemaId})\n      sch = resolveSchema.call(this, root, keyRef)\n      if (!sch) return\n      this.refs[keyRef] = sch\n    }\n    return (sch.validate || this._compileSchemaEnv(sch)) as AnyValidateFunction<T> | undefined\n  }\n\n  // Remove cached schema(s).\n  // If no parameter is passed all schemas but meta-schemas are removed.\n  // If RegExp is passed all schemas with key/id matching pattern but meta-schemas are removed.\n  // Even if schema is referenced by other schemas it still can be removed as other schemas have local references.\n  removeSchema(schemaKeyRef?: AnySchema | string | RegExp): Ajv {\n    if (schemaKeyRef instanceof RegExp) {\n      this._removeAllSchemas(this.schemas, schemaKeyRef)\n      this._removeAllSchemas(this.refs, schemaKeyRef)\n      return this\n    }\n    switch (typeof schemaKeyRef) {\n      case \"undefined\":\n        this._removeAllSchemas(this.schemas)\n        this._removeAllSchemas(this.refs)\n        this._cache.clear()\n        return this\n      case \"string\": {\n        const sch = getSchEnv.call(this, schemaKeyRef)\n        if (typeof sch == \"object\") this._cache.delete(sch.schema)\n        delete this.schemas[schemaKeyRef]\n        delete this.refs[schemaKeyRef]\n        return this\n      }\n      case \"object\": {\n        const cacheKey = schemaKeyRef\n        this._cache.delete(cacheKey)\n        let id = schemaKeyRef[this.opts.schemaId]\n        if (id) {\n          id = normalizeId(id)\n          delete this.schemas[id]\n          delete this.refs[id]\n        }\n        return this\n      }\n      default:\n        throw new Error(\"ajv.removeSchema: invalid parameter\")\n    }\n  }\n\n  // add \"vocabulary\" - a collection of keywords\n  addVocabulary(definitions: Vocabulary): Ajv {\n    for (const def of definitions) this.addKeyword(def)\n    return this\n  }\n\n  addKeyword(\n    kwdOrDef: string | KeywordDefinition,\n    def?: KeywordDefinition // deprecated\n  ): Ajv {\n    let keyword: string | string[]\n    if (typeof kwdOrDef == \"string\") {\n      keyword = kwdOrDef\n      if (typeof def == \"object\") {\n        this.logger.warn(\"these parameters are deprecated, see docs for addKeyword\")\n        def.keyword = keyword\n      }\n    } else if (typeof kwdOrDef == \"object\" && def === undefined) {\n      def = kwdOrDef\n      keyword = def.keyword\n      if (Array.isArray(keyword) && !keyword.length) {\n        throw new Error(\"addKeywords: keyword must be string or non-empty array\")\n      }\n    } else {\n      throw new Error(\"invalid addKeywords parameters\")\n    }\n\n    checkKeyword.call(this, keyword, def)\n    if (!def) {\n      eachItem(keyword, (kwd) => addRule.call(this, kwd))\n      return this\n    }\n    keywordMetaschema.call(this, def)\n    const definition: AddedKeywordDefinition = {\n      ...def,\n      type: getJSONTypes(def.type),\n      schemaType: getJSONTypes(def.schemaType),\n    }\n    eachItem(\n      keyword,\n      definition.type.length === 0\n        ? (k) => addRule.call(this, k, definition)\n        : (k) => definition.type.forEach((t) => addRule.call(this, k, definition, t))\n    )\n    return this\n  }\n\n  getKeyword(keyword: string): AddedKeywordDefinition | boolean {\n    const rule = this.RULES.all[keyword]\n    return typeof rule == \"object\" ? rule.definition : !!rule\n  }\n\n  // Remove keyword\n  removeKeyword(keyword: string): Ajv {\n    // TODO return type should be Ajv\n    const {RULES} = this\n    delete RULES.keywords[keyword]\n    delete RULES.all[keyword]\n    for (const group of RULES.rules) {\n      const i = group.rules.findIndex((rule) => rule.keyword === keyword)\n      if (i >= 0) group.rules.splice(i, 1)\n    }\n    return this\n  }\n\n  // Add format\n  addFormat(name: string, format: Format): Ajv {\n    if (typeof format == \"string\") format = new RegExp(format)\n    this.formats[name] = format\n    return this\n  }\n\n  errorsText(\n    errors: ErrorObject[] | null | undefined = this.errors, // optional array of validation errors\n    {separator = \", \", dataVar = \"data\"}: ErrorsTextOptions = {} // optional options with properties `separator` and `dataVar`\n  ): string {\n    if (!errors || errors.length === 0) return \"No errors\"\n    return errors\n      .map((e) => `${dataVar}${e.instancePath} ${e.message}`)\n      .reduce((text, msg) => text + separator + msg)\n  }\n\n  $dataMetaSchema(metaSchema: AnySchemaObject, keywordsJsonPointers: string[]): AnySchemaObject {\n    const rules = this.RULES.all\n    metaSchema = JSON.parse(JSON.stringify(metaSchema))\n    for (const jsonPointer of keywordsJsonPointers) {\n      const segments = jsonPointer.split(\"/\").slice(1) // first segment is an empty string\n      let keywords = metaSchema\n      for (const seg of segments) keywords = keywords[seg] as AnySchemaObject\n\n      for (const key in rules) {\n        const rule = rules[key]\n        if (typeof rule != \"object\") continue\n        const {$data} = rule.definition\n        const schema = keywords[key] as AnySchemaObject | undefined\n        if ($data && schema) keywords[key] = schemaOrData(schema)\n      }\n    }\n\n    return metaSchema\n  }\n\n  private _removeAllSchemas(schemas: {[Ref in string]?: SchemaEnv | string}, regex?: RegExp): void {\n    for (const keyRef in schemas) {\n      const sch = schemas[keyRef]\n      if (!regex || regex.test(keyRef)) {\n        if (typeof sch == \"string\") {\n          delete schemas[keyRef]\n        } else if (sch && !sch.meta) {\n          this._cache.delete(sch.schema)\n          delete schemas[keyRef]\n        }\n      }\n    }\n  }\n\n  _addSchema(\n    schema: AnySchema,\n    meta?: boolean,\n    baseId?: string,\n    validateSchema = this.opts.validateSchema,\n    addSchema = this.opts.addUsedSchema\n  ): SchemaEnv {\n    let id: string | undefined\n    const {schemaId} = this.opts\n    if (typeof schema == \"object\") {\n      id = schema[schemaId]\n    } else {\n      if (this.opts.jtd) throw new Error(\"schema must be object\")\n      else if (typeof schema != \"boolean\") throw new Error(\"schema must be object or boolean\")\n    }\n    let sch = this._cache.get(schema)\n    if (sch !== undefined) return sch\n\n    baseId = normalizeId(id || baseId)\n    const localRefs = getSchemaRefs.call(this, schema, baseId)\n    sch = new SchemaEnv({schema, schemaId, meta, baseId, localRefs})\n    this._cache.set(sch.schema, sch)\n    if (addSchema && !baseId.startsWith(\"#\")) {\n      // TODO atm it is allowed to overwrite schemas without id (instead of not adding them)\n      if (baseId) this._checkUnique(baseId)\n      this.refs[baseId] = sch\n    }\n    if (validateSchema) this.validateSchema(schema, true)\n    return sch\n  }\n\n  private _checkUnique(id: string): void {\n    if (this.schemas[id] || this.refs[id]) {\n      throw new Error(`schema with key or id \"${id}\" already exists`)\n    }\n  }\n\n  private _compileSchemaEnv(sch: SchemaEnv): AnyValidateFunction {\n    if (sch.meta) this._compileMetaSchema(sch)\n    else compileSchema.call(this, sch)\n\n    /* istanbul ignore if */\n    if (!sch.validate) throw new Error(\"ajv implementation error\")\n    return sch.validate\n  }\n\n  private _compileMetaSchema(sch: SchemaEnv): void {\n    const currentOpts = this.opts\n    this.opts = this._metaOpts\n    try {\n      compileSchema.call(this, sch)\n    } finally {\n      this.opts = currentOpts\n    }\n  }\n}\n\nexport interface ErrorsTextOptions {\n  separator?: string\n  dataVar?: string\n}\n\nfunction checkOptions(\n  this: Ajv,\n  checkOpts: OptionsInfo<RemovedOptions | DeprecatedOptions>,\n  options: Options & RemovedOptions,\n  msg: string,\n  log: \"warn\" | \"error\" = \"error\"\n): void {\n  for (const key in checkOpts) {\n    const opt = key as keyof typeof checkOpts\n    if (opt in options) this.logger[log](`${msg}: option ${key}. ${checkOpts[opt]}`)\n  }\n}\n\nfunction getSchEnv(this: Ajv, keyRef: string): SchemaEnv | string | undefined {\n  keyRef = normalizeId(keyRef) // TODO tests fail without this line\n  return this.schemas[keyRef] || this.refs[keyRef]\n}\n\nfunction addInitialSchemas(this: Ajv): void {\n  const optsSchemas = this.opts.schemas\n  if (!optsSchemas) return\n  if (Array.isArray(optsSchemas)) this.addSchema(optsSchemas)\n  else for (const key in optsSchemas) this.addSchema(optsSchemas[key] as AnySchema, key)\n}\n\nfunction addInitialFormats(this: Ajv): void {\n  for (const name in this.opts.formats) {\n    const format = this.opts.formats[name]\n    if (format) this.addFormat(name, format)\n  }\n}\n\nfunction addInitialKeywords(\n  this: Ajv,\n  defs: Vocabulary | {[K in string]?: KeywordDefinition}\n): void {\n  if (Array.isArray(defs)) {\n    this.addVocabulary(defs)\n    return\n  }\n  this.logger.warn(\"keywords option as map is deprecated, pass array\")\n  for (const keyword in defs) {\n    const def = defs[keyword] as KeywordDefinition\n    if (!def.keyword) def.keyword = keyword\n    this.addKeyword(def)\n  }\n}\n\nfunction getMetaSchemaOptions(this: Ajv): InstanceOptions {\n  const metaOpts = {...this.opts}\n  for (const opt of META_IGNORE_OPTIONS) delete metaOpts[opt]\n  return metaOpts\n}\n\nconst noLogs = {log() {}, warn() {}, error() {}}\n\nfunction getLogger(logger?: Partial<Logger> | false): Logger {\n  if (logger === false) return noLogs\n  if (logger === undefined) return console\n  if (logger.log && logger.warn && logger.error) return logger as Logger\n  throw new Error(\"logger must implement log, warn and error methods\")\n}\n\nconst KEYWORD_NAME = /^[a-z_$][a-z0-9_$:-]*$/i\n\nfunction checkKeyword(this: Ajv, keyword: string | string[], def?: KeywordDefinition): void {\n  const {RULES} = this\n  eachItem(keyword, (kwd) => {\n    if (RULES.keywords[kwd]) throw new Error(`Keyword ${kwd} is already defined`)\n    if (!KEYWORD_NAME.test(kwd)) throw new Error(`Keyword ${kwd} has invalid name`)\n  })\n  if (!def) return\n  if (def.$data && !(\"code\" in def || \"validate\" in def)) {\n    throw new Error('$data keyword must have \"code\" or \"validate\" function')\n  }\n}\n\nfunction addRule(\n  this: Ajv,\n  keyword: string,\n  definition?: AddedKeywordDefinition,\n  dataType?: JSONType\n): void {\n  const post = definition?.post\n  if (dataType && post) throw new Error('keyword with \"post\" flag cannot have \"type\"')\n  const {RULES} = this\n  let ruleGroup = post ? RULES.post : RULES.rules.find(({type: t}) => t === dataType)\n  if (!ruleGroup) {\n    ruleGroup = {type: dataType, rules: []}\n    RULES.rules.push(ruleGroup)\n  }\n  RULES.keywords[keyword] = true\n  if (!definition) return\n\n  const rule: Rule = {\n    keyword,\n    definition: {\n      ...definition,\n      type: getJSONTypes(definition.type),\n      schemaType: getJSONTypes(definition.schemaType),\n    },\n  }\n  if (definition.before) addBeforeRule.call(this, ruleGroup, rule, definition.before)\n  else ruleGroup.rules.push(rule)\n  RULES.all[keyword] = rule\n  definition.implements?.forEach((kwd) => this.addKeyword(kwd))\n}\n\nfunction addBeforeRule(this: Ajv, ruleGroup: RuleGroup, rule: Rule, before: string): void {\n  const i = ruleGroup.rules.findIndex((_rule) => _rule.keyword === before)\n  if (i >= 0) {\n    ruleGroup.rules.splice(i, 0, rule)\n  } else {\n    ruleGroup.rules.push(rule)\n    this.logger.warn(`rule ${before} is not defined`)\n  }\n}\n\nfunction keywordMetaschema(this: Ajv, def: KeywordDefinition): void {\n  let {metaSchema} = def\n  if (metaSchema === undefined) return\n  if (def.$data && this.opts.$data) metaSchema = schemaOrData(metaSchema)\n  def.validateSchema = this.compile(metaSchema, true)\n}\n\nconst $dataRef = {\n  $ref: \"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#\",\n}\n\nfunction schemaOrData(schema: AnySchema): AnySchemaObject {\n  return {anyOf: [schema, $dataRef]}\n}\n9/dist/vocabularies/applicator/additionalProperties.js.map\u000eN{\"version\":3,\"file\":\"additionalProperties.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../lib/vocabularies/applicator/additionalProperties.ts\"],\"names\":[],\"mappings\":\"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\"},/dist/vocabularies/dynamic/recursiveRef.d.tsximport type { CodeKeywordDefinition } from \"../../types\";\ndeclare const def: CodeKeywordDefinition;\nexport default def;\n+/dist/vocabularies/discriminator/types.d.ts\u0001\u000fimport type { ErrorObject } from \"../../types\";\nexport declare enum DiscrError {\n    Tag = \"tag\",\n    Mapping = \"mapping\"\n}\nexport type DiscrErrorObj<E extends DiscrError> = ErrorObject<\"discriminator\", {\n    error: E;\n    tag: string;\n    tagValue: unknown;\n}, string>;\n%/dist/compile/validate/keyword.js.map\u0017?{\"version\":3,\"file\":\"keyword.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../lib/compile/validate/keyword.ts\"],\"names\":[],\"mappings\":\"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\"}(/dist/vocabularies/applicator/index.d.ts\u0003Zimport type { ErrorNoParams, Vocabulary } from \"../../types\";\nimport { AdditionalItemsError } from \"./additionalItems\";\nimport { ItemsError } from \"./items2020\";\nimport { ContainsError } from \"./contains\";\nimport { DependenciesError } from \"./dependencies\";\nimport { PropertyNamesError } from \"./propertyNames\";\nimport { AdditionalPropertiesError } from \"./additionalProperties\";\nimport { NotKeywordError } from \"./not\";\nimport { AnyOfError } from \"./anyOf\";\nimport { OneOfError } from \"./oneOf\";\nimport { IfKeywordError } from \"./if\";\nexport default function getApplicator(draft2020?: boolean): Vocabulary;\nexport type ApplicatorKeywordError = ErrorNoParams<\"false schema\"> | AdditionalItemsError | ItemsError | ContainsError | AdditionalPropertiesError | DependenciesError | IfKeywordError | AnyOfError | OneOfError | NotKeywordError | PropertyNamesError;\n0/dist/vocabularies/jtd/optionalProperties.js.map\u0001{\"version\":3,\"file\":\"optionalProperties.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../lib/vocabularies/jtd/optionalProperties.ts\"],\"names\":[],\"mappings\":\";;AAEA,6CAAsD;AAEtD,MAAM,GAAG,GAA0B;IACjC,OAAO,EAAE,oBAAoB;IAC7B,UAAU,EAAE,QAAQ;IACpB,KAAK,EAAL,kBAAK;IACL,IAAI,CAAC,GAAe;QAClB,IAAI,GAAG,CAAC,YAAY,CAAC,UAAU;YAAE,OAAM;QACvC,IAAA,+BAAkB,EAAC,GAAG,CAAC,CAAA;IACzB,CAAC;CACF,CAAA;AAED,kBAAe,GAAG,CAAA\"}/dist/vocabularies/core/ref.js\u0014r\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.callRef = exports.getValidate = void 0;\nconst ref_error_1 = require(\"../../compile/ref_error\");\nconst code_1 = require(\"../code\");\nconst codegen_1 = require(\"../../compile/codegen\");\nconst names_1 = require(\"../../compile/names\");\nconst compile_1 = require(\"../../compile\");\nconst util_1 = require(\"../../compile/util\");\nconst def = {\n    keyword: \"$ref\",\n    schemaType: \"string\",\n    code(cxt) {\n        const { gen, schema: $ref, it } = cxt;\n        const { baseId, schemaEnv: env, validateName, opts, self } = it;\n        const { root } = env;\n        if (($ref === \"#\" || $ref === \"#/\") && baseId === root.baseId)\n            return callRootRef();\n        const schOrEnv = compile_1.resolveRef.call(self, root, baseId, $ref);\n        if (schOrEnv === undefined)\n            throw new ref_error_1.default(it.opts.uriResolver, baseId, $ref);\n        if (schOrEnv instanceof compile_1.SchemaEnv)\n            return callValidate(schOrEnv);\n        return inlineRefSchema(schOrEnv);\n        function callRootRef() {\n            if (env === root)\n                return callRef(cxt, validateName, env, env.$async);\n            const rootName = gen.scopeValue(\"root\", { ref: root });\n            return callRef(cxt, (0, codegen_1._) `${rootName}.validate`, root, root.$async);\n        }\n        function callValidate(sch) {\n            const v = getValidate(cxt, sch);\n            callRef(cxt, v, sch, sch.$async);\n        }\n        function inlineRefSchema(sch) {\n            const schName = gen.scopeValue(\"schema\", opts.code.source === true ? { ref: sch, code: (0, codegen_1.stringify)(sch) } : { ref: sch });\n            const valid = gen.name(\"valid\");\n            const schCxt = cxt.subschema({\n                schema: sch,\n                dataTypes: [],\n                schemaPath: codegen_1.nil,\n                topSchemaRef: schName,\n                errSchemaPath: $ref,\n            }, valid);\n            cxt.mergeEvaluated(schCxt);\n            cxt.ok(valid);\n        }\n    },\n};\nfunction getValidate(cxt, sch) {\n    const { gen } = cxt;\n    return sch.validate\n        ? gen.scopeValue(\"validate\", { ref: sch.validate })\n        : (0, codegen_1._) `${gen.scopeValue(\"wrapper\", { ref: sch })}.validate`;\n}\nexports.getValidate = getValidate;\nfunction callRef(cxt, v, sch, $async) {\n    const { gen, it } = cxt;\n    const { allErrors, schemaEnv: env, opts } = it;\n    const passCxt = opts.passContext ? names_1.default.this : codegen_1.nil;\n    if ($async)\n        callAsyncRef();\n    else\n        callSyncRef();\n    function callAsyncRef() {\n        if (!env.$async)\n            throw new Error(\"async schema referenced by sync schema\");\n        const valid = gen.let(\"valid\");\n        gen.try(() => {\n            gen.code((0, codegen_1._) `await ${(0, code_1.callValidateCode)(cxt, v, passCxt)}`);\n            addEvaluatedFrom(v); // TODO will not work with async, it has to be returned with the result\n            if (!allErrors)\n                gen.assign(valid, true);\n        }, (e) => {\n            gen.if((0, codegen_1._) `!(${e} instanceof ${it.ValidationError})`, () => gen.throw(e));\n            addErrorsFrom(e);\n            if (!allErrors)\n                gen.assign(valid, false);\n        });\n        cxt.ok(valid);\n    }\n    function callSyncRef() {\n        cxt.result((0, code_1.callValidateCode)(cxt, v, passCxt), () => addEvaluatedFrom(v), () => addErrorsFrom(v));\n    }\n    function addErrorsFrom(source) {\n        const errs = (0, codegen_1._) `${source}.errors`;\n        gen.assign(names_1.default.vErrors, (0, codegen_1._) `${names_1.default.vErrors} === null ? ${errs} : ${names_1.default.vErrors}.concat(${errs})`); // TODO tagged\n        gen.assign(names_1.default.errors, (0, codegen_1._) `${names_1.default.vErrors}.length`);\n    }\n    function addEvaluatedFrom(source) {\n        var _a;\n        if (!it.opts.unevaluated)\n            return;\n        const schEvaluated = (_a = sch === null || sch === void 0 ? void 0 : sch.validate) === null || _a === void 0 ? void 0 : _a.evaluated;\n        // TODO refactor\n        if (it.props !== true) {\n            if (schEvaluated && !schEvaluated.dynamicProps) {\n                if (schEvaluated.props !== undefined) {\n                    it.props = util_1.mergeEvaluated.props(gen, schEvaluated.props, it.props);\n                }\n            }\n            else {\n                const props = gen.var(\"props\", (0, codegen_1._) `${source}.evaluated.props`);\n                it.props = util_1.mergeEvaluated.props(gen, props, it.props, codegen_1.Name);\n            }\n        }\n        if (it.items !== true) {\n            if (schEvaluated && !schEvaluated.dynamicItems) {\n                if (schEvaluated.items !== undefined) {\n                    it.items = util_1.mergeEvaluated.items(gen, schEvaluated.items, it.items);\n                }\n            }\n            else {\n                const items = gen.var(\"items\", (0, codegen_1._) `${source}.evaluated.items`);\n                it.items = util_1.mergeEvaluated.items(gen, items, it.items, codegen_1.Name);\n            }\n        }\n    }\n}\nexports.callRef = callRef;\nexports.default = def;\n//# sourceMappingURL=ref.js.map/dist/compile/util.js\u001b\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.checkStrictMode = exports.getErrorPath = exports.Type = exports.useFunc = exports.setEvaluated = exports.evaluatedPropsToName = exports.mergeEvaluated = exports.eachItem = exports.unescapeJsonPointer = exports.escapeJsonPointer = exports.escapeFragment = exports.unescapeFragment = exports.schemaRefOrVal = exports.schemaHasRulesButRef = exports.schemaHasRules = exports.checkUnknownRules = exports.alwaysValidSchema = exports.toHash = void 0;\nconst codegen_1 = require(\"./codegen\");\nconst code_1 = require(\"./codegen/code\");\n// TODO refactor to use Set\nfunction toHash(arr) {\n    const hash = {};\n    for (const item of arr)\n        hash[item] = true;\n    return hash;\n}\nexports.toHash = toHash;\nfunction alwaysValidSchema(it, schema) {\n    if (typeof schema == \"boolean\")\n        return schema;\n    if (Object.keys(schema).length === 0)\n        return true;\n    checkUnknownRules(it, schema);\n    return !schemaHasRules(schema, it.self.RULES.all);\n}\nexports.alwaysValidSchema = alwaysValidSchema;\nfunction checkUnknownRules(it, schema = it.schema) {\n    const { opts, self } = it;\n    if (!opts.strictSchema)\n        return;\n    if (typeof schema === \"boolean\")\n        return;\n    const rules = self.RULES.keywords;\n    for (const key in schema) {\n        if (!rules[key])\n            checkStrictMode(it, `unknown keyword: \"${key}\"`);\n    }\n}\nexports.checkUnknownRules = checkUnknownRules;\nfunction schemaHasRules(schema, rules) {\n    if (typeof schema == \"boolean\")\n        return !schema;\n    for (const key in schema)\n        if (rules[key])\n            return true;\n    return false;\n}\nexports.schemaHasRules = schemaHasRules;\nfunction schemaHasRulesButRef(schema, RULES) {\n    if (typeof schema == \"boolean\")\n        return !schema;\n    for (const key in schema)\n        if (key !== \"$ref\" && RULES.all[key])\n            return true;\n    return false;\n}\nexports.schemaHasRulesButRef = schemaHasRulesButRef;\nfunction schemaRefOrVal({ topSchemaRef, schemaPath }, schema, keyword, $data) {\n    if (!$data) {\n        if (typeof schema == \"number\" || typeof schema == \"boolean\")\n            return schema;\n        if (typeof schema == \"string\")\n            return (0, codegen_1._) `${schema}`;\n    }\n    return (0, codegen_1._) `${topSchemaRef}${schemaPath}${(0, codegen_1.getProperty)(keyword)}`;\n}\nexports.schemaRefOrVal = schemaRefOrVal;\nfunction unescapeFragment(str) {\n    return unescapeJsonPointer(decodeURIComponent(str));\n}\nexports.unescapeFragment = unescapeFragment;\nfunction escapeFragment(str) {\n    return encodeURIComponent(escapeJsonPointer(str));\n}\nexports.escapeFragment = escapeFragment;\nfunction escapeJsonPointer(str) {\n    if (typeof str == \"number\")\n        return `${str}`;\n    return str.replace(/~/g, \"~0\").replace(/\\//g, \"~1\");\n}\nexports.escapeJsonPointer = escapeJsonPointer;\nfunction unescapeJsonPointer(str) {\n    return str.replace(/~1/g, \"/\").replace(/~0/g, \"~\");\n}\nexports.unescapeJsonPointer = unescapeJsonPointer;\nfunction eachItem(xs, f) {\n    if (Array.isArray(xs)) {\n        for (const x of xs)\n            f(x);\n    }\n    else {\n        f(xs);\n    }\n}\nexports.eachItem = eachItem;\nfunction makeMergeEvaluated({ mergeNames, mergeToName, mergeValues, resultToName, }) {\n    return (gen, from, to, toName) => {\n        const res = to === undefined\n            ? from\n            : to instanceof codegen_1.Name\n                ? (from instanceof codegen_1.Name ? mergeNames(gen, from, to) : mergeToName(gen, from, to), to)\n                : from instanceof codegen_1.Name\n                    ? (mergeToName(gen, to, from), from)\n                    : mergeValues(from, to);\n        return toName === codegen_1.Name && !(res instanceof codegen_1.Name) ? resultToName(gen, res) : res;\n    };\n}\nexports.mergeEvaluated = {\n    props: makeMergeEvaluated({\n        mergeNames: (gen, from, to) => gen.if((0, codegen_1._) `${to} !== true && ${from} !== undefined`, () => {\n            gen.if((0, codegen_1._) `${from} === true`, () => gen.assign(to, true), () => gen.assign(to, (0, codegen_1._) `${to} || {}`).code((0, codegen_1._) `Object.assign(${to}, ${from})`));\n        }),\n        mergeToName: (gen, from, to) => gen.if((0, codegen_1._) `${to} !== true`, () => {\n            if (from === true) {\n                gen.assign(to, true);\n            }\n            else {\n                gen.assign(to, (0, codegen_1._) `${to} || {}`);\n                setEvaluated(gen, to, from);\n            }\n        }),\n        mergeValues: (from, to) => (from === true ? true : { ...from, ...to }),\n        resultToName: evaluatedPropsToName,\n    }),\n    items: makeMergeEvaluated({\n        mergeNames: (gen, from, to) => gen.if((0, codegen_1._) `${to} !== true && ${from} !== undefined`, () => gen.assign(to, (0, codegen_1._) `${from} === true ? true : ${to} > ${from} ? ${to} : ${from}`)),\n        mergeToName: (gen, from, to) => gen.if((0, codegen_1._) `${to} !== true`, () => gen.assign(to, from === true ? true : (0, codegen_1._) `${to} > ${from} ? ${to} : ${from}`)),\n        mergeValues: (from, to) => (from === true ? true : Math.max(from, to)),\n        resultToName: (gen, items) => gen.var(\"items\", items),\n    }),\n};\nfunction evaluatedPropsToName(gen, ps) {\n    if (ps === true)\n        return gen.var(\"props\", true);\n    const props = gen.var(\"props\", (0, codegen_1._) `{}`);\n    if (ps !== undefined)\n        setEvaluated(gen, props, ps);\n    return props;\n}\nexports.evaluatedPropsToName = evaluatedPropsToName;\nfunction setEvaluated(gen, props, ps) {\n    Object.keys(ps).forEach((p) => gen.assign((0, codegen_1._) `${props}${(0, codegen_1.getProperty)(p)}`, true));\n}\nexports.setEvaluated = setEvaluated;\nconst snippets = {};\nfunction useFunc(gen, f) {\n    return gen.scopeValue(\"func\", {\n        ref: f,\n        code: snippets[f.code] || (snippets[f.code] = new code_1._Code(f.code)),\n    });\n}\nexports.useFunc = useFunc;\nvar Type;\n(function (Type) {\n    Type[Type[\"Num\"] = 0] = \"Num\";\n    Type[Type[\"Str\"] = 1] = \"Str\";\n})(Type = exports.Type || (exports.Type = {}));\nfunction getErrorPath(dataProp, dataPropType, jsPropertySyntax) {\n    // let path\n    if (dataProp instanceof codegen_1.Name) {\n        const isNumber = dataPropType === Type.Num;\n        return jsPropertySyntax\n            ? isNumber\n                ? (0, codegen_1._) `\"[\" + ${dataProp} + \"]\"`\n                : (0, codegen_1._) `\"['\" + ${dataProp} + \"']\"`\n            : isNumber\n                ? (0, codegen_1._) `\"/\" + ${dataProp}`\n                : (0, codegen_1._) `\"/\" + ${dataProp}.replace(/~/g, \"~0\").replace(/\\\\//g, \"~1\")`; // TODO maybe use global escapePointer\n    }\n    return jsPropertySyntax ? (0, codegen_1.getProperty)(dataProp).toString() : \"/\" + escapeJsonPointer(dataProp);\n}\nexports.getErrorPath = getErrorPath;\nfunction checkStrictMode(it, msg, mode = it.opts.strictSchema) {\n    if (!mode)\n        return;\n    msg = `strict mode: ${msg}`;\n    if (mode === true)\n        throw new Error(msg);\n    it.self.logger.warn(msg);\n}\nexports.checkStrictMode = checkStrictMode;\n//# sourceMappingURL=util.js.map/lib/compile/jtd/parse.ts09import type Ajv from \"../../core\"\nimport type {SchemaObject} from \"../../types\"\nimport {jtdForms, JTDForm, SchemaObjectMap} from \"./types\"\nimport {SchemaEnv, getCompilingSchema} from \"..\"\nimport {_, str, and, or, nil, not, CodeGen, Code, Name, SafeExpr} from \"../codegen\"\nimport MissingRefError from \"../ref_error\"\nimport N from \"../names\"\nimport {hasPropFunc} from \"../../vocabularies/code\"\nimport {hasRef} from \"../../vocabularies/jtd/ref\"\nimport {intRange, IntType} from \"../../vocabularies/jtd/type\"\nimport {parseJson, parseJsonNumber, parseJsonString} from \"../../runtime/parseJson\"\nimport {useFunc} from \"../util\"\nimport validTimestamp from \"../../runtime/timestamp\"\n\ntype GenParse = (cxt: ParseCxt) => void\n\nconst genParse: {[F in JTDForm]: GenParse} = {\n  elements: parseElements,\n  values: parseValues,\n  discriminator: parseDiscriminator,\n  properties: parseProperties,\n  optionalProperties: parseProperties,\n  enum: parseEnum,\n  type: parseType,\n  ref: parseRef,\n}\n\ninterface ParseCxt {\n  readonly gen: CodeGen\n  readonly self: Ajv // current Ajv instance\n  readonly schemaEnv: SchemaEnv\n  readonly definitions: SchemaObjectMap\n  schema: SchemaObject\n  data: Code\n  parseName: Name\n  char: Name\n}\n\nexport default function compileParser(\n  this: Ajv,\n  sch: SchemaEnv,\n  definitions: SchemaObjectMap\n): SchemaEnv {\n  const _sch = getCompilingSchema.call(this, sch)\n  if (_sch) return _sch\n  const {es5, lines} = this.opts.code\n  const {ownProperties} = this.opts\n  const gen = new CodeGen(this.scope, {es5, lines, ownProperties})\n  const parseName = gen.scopeName(\"parse\")\n  const cxt: ParseCxt = {\n    self: this,\n    gen,\n    schema: sch.schema as SchemaObject,\n    schemaEnv: sch,\n    definitions,\n    data: N.data,\n    parseName,\n    char: gen.name(\"c\"),\n  }\n\n  let sourceCode: string | undefined\n  try {\n    this._compilations.add(sch)\n    sch.parseName = parseName\n    parserFunction(cxt)\n    gen.optimize(this.opts.code.optimize)\n    const parseFuncCode = gen.toString()\n    sourceCode = `${gen.scopeRefs(N.scope)}return ${parseFuncCode}`\n    const makeParse = new Function(`${N.scope}`, sourceCode)\n    const parse: (json: string) => unknown = makeParse(this.scope.get())\n    this.scope.value(parseName, {ref: parse})\n    sch.parse = parse\n  } catch (e) {\n    if (sourceCode) this.logger.error(\"Error compiling parser, function code:\", sourceCode)\n    delete sch.parse\n    delete sch.parseName\n    throw e\n  } finally {\n    this._compilations.delete(sch)\n  }\n  return sch\n}\n\nconst undef = _`undefined`\n\nfunction parserFunction(cxt: ParseCxt): void {\n  const {gen, parseName, char} = cxt\n  gen.func(parseName, _`${N.json}, ${N.jsonPos}, ${N.jsonPart}`, false, () => {\n    gen.let(N.data)\n    gen.let(char)\n    gen.assign(_`${parseName}.message`, undef)\n    gen.assign(_`${parseName}.position`, undef)\n    gen.assign(N.jsonPos, _`${N.jsonPos} || 0`)\n    gen.const(N.jsonLen, _`${N.json}.length`)\n    parseCode(cxt)\n    skipWhitespace(cxt)\n    gen.if(N.jsonPart, () => {\n      gen.assign(_`${parseName}.position`, N.jsonPos)\n      gen.return(N.data)\n    })\n    gen.if(_`${N.jsonPos} === ${N.jsonLen}`, () => gen.return(N.data))\n    jsonSyntaxError(cxt)\n  })\n}\n\nfunction parseCode(cxt: ParseCxt): void {\n  let form: JTDForm | undefined\n  for (const key of jtdForms) {\n    if (key in cxt.schema) {\n      form = key\n      break\n    }\n  }\n  if (form) parseNullable(cxt, genParse[form])\n  else parseEmpty(cxt)\n}\n\nconst parseBoolean = parseBooleanToken(true, parseBooleanToken(false, jsonSyntaxError))\n\nfunction parseNullable(cxt: ParseCxt, parseForm: GenParse): void {\n  const {gen, schema, data} = cxt\n  if (!schema.nullable) return parseForm(cxt)\n  tryParseToken(cxt, \"null\", parseForm, () => gen.assign(data, null))\n}\n\nfunction parseElements(cxt: ParseCxt): void {\n  const {gen, schema, data} = cxt\n  parseToken(cxt, \"[\")\n  const ix = gen.let(\"i\", 0)\n  gen.assign(data, _`[]`)\n  parseItems(cxt, \"]\", () => {\n    const el = gen.let(\"el\")\n    parseCode({...cxt, schema: schema.elements, data: el})\n    gen.assign(_`${data}[${ix}++]`, el)\n  })\n}\n\nfunction parseValues(cxt: ParseCxt): void {\n  const {gen, schema, data} = cxt\n  parseToken(cxt, \"{\")\n  gen.assign(data, _`{}`)\n  parseItems(cxt, \"}\", () => parseKeyValue(cxt, schema.values))\n}\n\nfunction parseItems(cxt: ParseCxt, endToken: string, block: () => void): void {\n  tryParseItems(cxt, endToken, block)\n  parseToken(cxt, endToken)\n}\n\nfunction tryParseItems(cxt: ParseCxt, endToken: string, block: () => void): void {\n  const {gen} = cxt\n  gen.for(_`;${N.jsonPos}<${N.jsonLen} && ${jsonSlice(1)}!==${endToken};`, () => {\n    block()\n    tryParseToken(cxt, \",\", () => gen.break(), hasItem)\n  })\n\n  function hasItem(): void {\n    tryParseToken(cxt, endToken, () => {}, jsonSyntaxError)\n  }\n}\n\nfunction parseKeyValue(cxt: ParseCxt, schema: SchemaObject): void {\n  const {gen} = cxt\n  const key = gen.let(\"key\")\n  parseString({...cxt, data: key})\n  parseToken(cxt, \":\")\n  parsePropertyValue(cxt, key, schema)\n}\n\nfunction parseDiscriminator(cxt: ParseCxt): void {\n  const {gen, data, schema} = cxt\n  const {discriminator, mapping} = schema\n  parseToken(cxt, \"{\")\n  gen.assign(data, _`{}`)\n  const startPos = gen.const(\"pos\", N.jsonPos)\n  const value = gen.let(\"value\")\n  const tag = gen.let(\"tag\")\n  tryParseItems(cxt, \"}\", () => {\n    const key = gen.let(\"key\")\n    parseString({...cxt, data: key})\n    parseToken(cxt, \":\")\n    gen.if(\n      _`${key} === ${discriminator}`,\n      () => {\n        parseString({...cxt, data: tag})\n        gen.assign(_`${data}[${key}]`, tag)\n        gen.break()\n      },\n      () => parseEmpty({...cxt, data: value}) // can be discarded/skipped\n    )\n  })\n  gen.assign(N.jsonPos, startPos)\n  gen.if(_`${tag} === undefined`)\n  parsingError(cxt, str`discriminator tag not found`)\n  for (const tagValue in mapping) {\n    gen.elseIf(_`${tag} === ${tagValue}`)\n    parseSchemaProperties({...cxt, schema: mapping[tagValue]}, discriminator)\n  }\n  gen.else()\n  parsingError(cxt, str`discriminator value not in schema`)\n  gen.endIf()\n}\n\nfunction parseProperties(cxt: ParseCxt): void {\n  const {gen, data} = cxt\n  parseToken(cxt, \"{\")\n  gen.assign(data, _`{}`)\n  parseSchemaProperties(cxt)\n}\n\nfunction parseSchemaProperties(cxt: ParseCxt, discriminator?: string): void {\n  const {gen, schema, data} = cxt\n  const {properties, optionalProperties, additionalProperties} = schema\n  parseItems(cxt, \"}\", () => {\n    const key = gen.let(\"key\")\n    parseString({...cxt, data: key})\n    parseToken(cxt, \":\")\n    gen.if(false)\n    parseDefinedProperty(cxt, key, properties)\n    parseDefinedProperty(cxt, key, optionalProperties)\n    if (discriminator) {\n      gen.elseIf(_`${key} === ${discriminator}`)\n      const tag = gen.let(\"tag\")\n      parseString({...cxt, data: tag}) // can be discarded, it is already assigned\n    }\n    gen.else()\n    if (additionalProperties) {\n      parseEmpty({...cxt, data: _`${data}[${key}]`})\n    } else {\n      parsingError(cxt, str`property ${key} not allowed`)\n    }\n    gen.endIf()\n  })\n  if (properties) {\n    const hasProp = hasPropFunc(gen)\n    const allProps: Code = and(\n      ...Object.keys(properties).map((p): Code => _`${hasProp}.call(${data}, ${p})`)\n    )\n    gen.if(not(allProps), () => parsingError(cxt, str`missing required properties`))\n  }\n}\n\nfunction parseDefinedProperty(cxt: ParseCxt, key: Name, schemas: SchemaObjectMap = {}): void {\n  const {gen} = cxt\n  for (const prop in schemas) {\n    gen.elseIf(_`${key} === ${prop}`)\n    parsePropertyValue(cxt, key, schemas[prop] as SchemaObject)\n  }\n}\n\nfunction parsePropertyValue(cxt: ParseCxt, key: Name, schema: SchemaObject): void {\n  parseCode({...cxt, schema, data: _`${cxt.data}[${key}]`})\n}\n\nfunction parseType(cxt: ParseCxt): void {\n  const {gen, schema, data, self} = cxt\n  switch (schema.type) {\n    case \"boolean\":\n      parseBoolean(cxt)\n      break\n    case \"string\":\n      parseString(cxt)\n      break\n    case \"timestamp\": {\n      parseString(cxt)\n      const vts = useFunc(gen, validTimestamp)\n      const {allowDate, parseDate} = self.opts\n      const notValid = allowDate ? _`!${vts}(${data}, true)` : _`!${vts}(${data})`\n      const fail: Code = parseDate\n        ? or(notValid, _`(${data} = new Date(${data}), false)`, _`isNaN(${data}.valueOf())`)\n        : notValid\n      gen.if(fail, () => parsingError(cxt, str`invalid timestamp`))\n      break\n    }\n    case \"float32\":\n    case \"float64\":\n      parseNumber(cxt)\n      break\n    default: {\n      const t = schema.type as IntType\n      if (!self.opts.int32range && (t === \"int32\" || t === \"uint32\")) {\n        parseNumber(cxt, 16) // 2 ** 53 - max safe integer\n        if (t === \"uint32\") {\n          gen.if(_`${data} < 0`, () => parsingError(cxt, str`integer out of range`))\n        }\n      } else {\n        const [min, max, maxDigits] = intRange[t]\n        parseNumber(cxt, maxDigits)\n        gen.if(_`${data} < ${min} || ${data} > ${max}`, () =>\n          parsingError(cxt, str`integer out of range`)\n        )\n      }\n    }\n  }\n}\n\nfunction parseString(cxt: ParseCxt): void {\n  parseToken(cxt, '\"')\n  parseWith(cxt, parseJsonString)\n}\n\nfunction parseEnum(cxt: ParseCxt): void {\n  const {gen, data, schema} = cxt\n  const enumSch = schema.enum\n  parseToken(cxt, '\"')\n  // TODO loopEnum\n  gen.if(false)\n  for (const value of enumSch) {\n    const valueStr = JSON.stringify(value).slice(1) // remove starting quote\n    gen.elseIf(_`${jsonSlice(valueStr.length)} === ${valueStr}`)\n    gen.assign(data, str`${value}`)\n    gen.add(N.jsonPos, valueStr.length)\n  }\n  gen.else()\n  jsonSyntaxError(cxt)\n  gen.endIf()\n}\n\nfunction parseNumber(cxt: ParseCxt, maxDigits?: number): void {\n  const {gen} = cxt\n  skipWhitespace(cxt)\n  gen.if(\n    _`\"-0123456789\".indexOf(${jsonSlice(1)}) < 0`,\n    () => jsonSyntaxError(cxt),\n    () => parseWith(cxt, parseJsonNumber, maxDigits)\n  )\n}\n\nfunction parseBooleanToken(bool: boolean, fail: GenParse): GenParse {\n  return (cxt) => {\n    const {gen, data} = cxt\n    tryParseToken(\n      cxt,\n      `${bool}`,\n      () => fail(cxt),\n      () => gen.assign(data, bool)\n    )\n  }\n}\n\nfunction parseRef(cxt: ParseCxt): void {\n  const {gen, self, definitions, schema, schemaEnv} = cxt\n  const {ref} = schema\n  const refSchema = definitions[ref]\n  if (!refSchema) throw new MissingRefError(self.opts.uriResolver, \"\", ref, `No definition ${ref}`)\n  if (!hasRef(refSchema)) return parseCode({...cxt, schema: refSchema})\n  const {root} = schemaEnv\n  const sch = compileParser.call(self, new SchemaEnv({schema: refSchema, root}), definitions)\n  partialParse(cxt, getParser(gen, sch), true)\n}\n\nfunction getParser(gen: CodeGen, sch: SchemaEnv): Code {\n  return sch.parse\n    ? gen.scopeValue(\"parse\", {ref: sch.parse})\n    : _`${gen.scopeValue(\"wrapper\", {ref: sch})}.parse`\n}\n\nfunction parseEmpty(cxt: ParseCxt): void {\n  parseWith(cxt, parseJson)\n}\n\nfunction parseWith(cxt: ParseCxt, parseFunc: {code: string}, args?: SafeExpr): void {\n  partialParse(cxt, useFunc(cxt.gen, parseFunc), args)\n}\n\nfunction partialParse(cxt: ParseCxt, parseFunc: Name, args?: SafeExpr): void {\n  const {gen, data} = cxt\n  gen.assign(data, _`${parseFunc}(${N.json}, ${N.jsonPos}${args ? _`, ${args}` : nil})`)\n  gen.assign(N.jsonPos, _`${parseFunc}.position`)\n  gen.if(_`${data} === undefined`, () => parsingError(cxt, _`${parseFunc}.message`))\n}\n\nfunction parseToken(cxt: ParseCxt, tok: string): void {\n  tryParseToken(cxt, tok, jsonSyntaxError)\n}\n\nfunction tryParseToken(cxt: ParseCxt, tok: string, fail: GenParse, success?: GenParse): void {\n  const {gen} = cxt\n  const n = tok.length\n  skipWhitespace(cxt)\n  gen.if(\n    _`${jsonSlice(n)} === ${tok}`,\n    () => {\n      gen.add(N.jsonPos, n)\n      success?.(cxt)\n    },\n    () => fail(cxt)\n  )\n}\n\nfunction skipWhitespace({gen, char: c}: ParseCxt): void {\n  gen.code(\n    _`while((${c}=${N.json}[${N.jsonPos}],${c}===\" \"||${c}===\"\\\\n\"||${c}===\"\\\\r\"||${c}===\"\\\\t\"))${N.jsonPos}++;`\n  )\n}\n\nfunction jsonSlice(len: number | Name): Code {\n  return len === 1\n    ? _`${N.json}[${N.jsonPos}]`\n    : _`${N.json}.slice(${N.jsonPos}, ${N.jsonPos}+${len})`\n}\n\nfunction jsonSyntaxError(cxt: ParseCxt): void {\n  parsingError(cxt, _`\"unexpected token \" + ${N.json}[${N.jsonPos}]`)\n}\n\nfunction parsingError({gen, parseName}: ParseCxt, msg: Code): void {\n  gen.assign(_`${parseName}.message`, msg)\n  gen.assign(_`${parseName}.position`, N.jsonPos)\n  gen.return(undef)\n}\n/dist/runtime/parseJson.js.map\u0013{\"version\":3,\"file\":\"parseJson.js\",\"sourceRoot\":\"\",\"sources\":[\"../../lib/runtime/parseJson.ts\"],\"names\":[],\"mappings\":\"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\"}/dist/jtd.js.map\u0007{\"version\":3,\"file\":\"jtd.js\",\"sourceRoot\":\"\",\"sources\":[\"../lib/jtd.ts\"],\"names\":[],\"mappings\":\";;;AAEA,iCAA8C;AAC9C,4CAA8C;AAC9C,kDAA6C;AAC7C,uDAAuD;AACvD,+CAA+C;AAG/C,MAAM,cAAc,GAAG,iBAAiB,CAAA;AA4BxC,MAAM,GAAI,SAAQ,cAAO;IACvB,YAAY,OAAmB,EAAE;QAC/B,KAAK,CAAC;YACJ,GAAG,IAAI;YACP,GAAG,EAAE,IAAI;SACV,CAAC,CAAA;IACJ,CAAC;IAED,gBAAgB;QACd,KAAK,CAAC,gBAAgB,EAAE,CAAA;QACxB,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,CAAA;IACnC,CAAC;IAED,qBAAqB;QACnB,KAAK,CAAC,qBAAqB,EAAE,CAAA;QAC7B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE,OAAM;QAC3B,IAAI,CAAC,aAAa,CAAC,oBAAa,EAAE,cAAc,EAAE,KAAK,CAAC,CAAA;IAC1D,CAAC;IAED,WAAW;QACT,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW;YAC3B,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAA;IACzF,CAAC;IAMD,iBAAiB,CAAc,MAAoB;QACjD,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA;QACnC,OAAO,GAAG,CAAC,SAAS,IAAI,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAA;IACtD,CAAC;IAMD,aAAa,CAAc,MAAoB;QAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA;QACnC,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAiB,CAAA;IAChE,CAAC;IAEO,kBAAkB,CAAI,GAAc;QAC1C,mBAAiB,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAG,GAAG,CAAC,MAA0B,CAAC,WAAW,IAAI,EAAE,CAAC,CAAA;QACpF,wBAAwB;QACxB,IAAI,CAAC,GAAG,CAAC,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAA;QAC/D,OAAO,GAAG,CAAC,SAAS,CAAA;IACtB,CAAC;IAEO,cAAc,CAAC,GAAc;QACnC,eAAa,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAG,GAAG,CAAC,MAA0B,CAAC,WAAW,IAAI,EAAE,CAAC,CAAA;QAChF,wBAAwB;QACxB,IAAI,CAAC,GAAG,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAA;QAC3D,OAAO,GAAG,CAAC,KAAK,CAAA;IAClB,CAAC;CACF;AAED,MAAM,CAAC,OAAO,GAAG,OAAO,GAAG,GAAG,CAAA;AAC9B,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,YAAY,EAAE,EAAC,KAAK,EAAE,IAAI,EAAC,CAAC,CAAA;AAE3D,kBAAe,GAAG,CAAA;AA0BlB,+CAA6C;AAArC,sGAAA,UAAU,OAAA;AAElB,6CAA6F;AAArF,4FAAA,CAAC,OAAA;AAAE,8FAAA,GAAG,OAAA;AAAE,oGAAA,SAAS,OAAA;AAAE,8FAAA,GAAG,OAAA;AAAE,+FAAA,IAAI,OAAA;AAAQ,kGAAA,OAAO,OAAA;AAInD,+DAAqE;AAA7D,mHAAA,OAAO,OAAmB;AAClC,iDAA8D;AAAtD,4GAAA,OAAO,OAAmB\"}*/lib/vocabularies/dynamic/dynamicAnchor.ts\u0004bimport type {CodeKeywordDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, getProperty, Code} from \"../../compile/codegen\"\nimport N from \"../../compile/names\"\nimport {SchemaEnv, compileSchema} from \"../../compile\"\nimport {getValidate} from \"../core/ref\"\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"$dynamicAnchor\",\n  schemaType: \"string\",\n  code: (cxt) => dynamicAnchor(cxt, cxt.schema),\n}\n\nexport function dynamicAnchor(cxt: KeywordCxt, anchor: string): void {\n  const {gen, it} = cxt\n  it.schemaEnv.root.dynamicAnchors[anchor] = true\n  const v = _`${N.dynamicAnchors}${getProperty(anchor)}`\n  const validate = it.errSchemaPath === \"#\" ? it.validateName : _getValidate(cxt)\n  gen.if(_`!${v}`, () => gen.assign(v, validate))\n}\n\nfunction _getValidate(cxt: KeywordCxt): Code {\n  const {schemaEnv, schema, self} = cxt.it\n  const {root, baseId, localRefs, meta} = schemaEnv.root\n  const {schemaId} = self.opts\n  const sch = new SchemaEnv({schema, schemaId, root, baseId, localRefs, meta})\n  compileSchema.call(self, sch)\n  return getValidate(cxt, sch)\n}\n\nexport default def\n&/dist/vocabularies/jtd/metadata.js.map\u0003\u0013{\"version\":3,\"file\":\"metadata.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../lib/vocabularies/jtd/metadata.ts\"],\"names\":[],\"mappings\":\";;;AAEA,6CAAoD;AAEpD,MAAM,GAAG,GAA0B;IACjC,OAAO,EAAE,UAAU;IACnB,UAAU,EAAE,QAAQ;IACpB,IAAI,CAAC,GAAe;QAClB,aAAa,CAAC,GAAG,CAAC,CAAA;QAClB,MAAM,EAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAC,GAAG,GAAG,CAAA;QAC7B,IAAI,IAAA,wBAAiB,EAAC,EAAE,EAAE,MAAM,CAAC;YAAE,OAAM;QACzC,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAC/B,GAAG,CAAC,SAAS,CAAC,EAAC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,IAAI,EAAC,EAAE,KAAK,CAAC,CAAA;QAC9D,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,CAAA;IACf,CAAC;CACF,CAAA;AAED,SAAgB,aAAa,CAAC,EAAC,EAAE,EAAE,OAAO,EAAa,EAAE,QAAkB;IACzE,IAAI,EAAE,CAAC,WAAW,KAAK,QAAQ,EAAE;QAC/B,MAAM,IAAI,KAAK,CAAC,SAAS,OAAO,0CAA0C,CAAC,CAAA;KAC5E;AACH,CAAC;AAJD,sCAIC;AAED,kBAAe,GAAG,CAAA\"}7/dist/vocabularies/applicator/additionalProperties.d.ts\u0001>import type { CodeKeywordDefinition, AddedKeywordDefinition, ErrorObject, AnySchema } from \"../../types\";\nexport type AdditionalPropertiesError = ErrorObject<\"additionalProperties\", {\n    additionalProperty: string;\n}, AnySchema>;\ndeclare const def: CodeKeywordDefinition & AddedKeywordDefinition;\nexport default def;\n1/lib/refs/json-schema-2019-09/meta/meta-data.json\u0002{\n  \"$schema\": \"https://json-schema.org/draft/2019-09/schema\",\n  \"$id\": \"https://json-schema.org/draft/2019-09/meta/meta-data\",\n  \"$vocabulary\": {\n    \"https://json-schema.org/draft/2019-09/vocab/meta-data\": true\n  },\n  \"$recursiveAnchor\": true,\n\n  \"title\": \"Meta-data vocabulary meta-schema\",\n\n  \"type\": [\"object\", \"boolean\"],\n  \"properties\": {\n    \"title\": {\n      \"type\": \"string\"\n    },\n    \"description\": {\n      \"type\": \"string\"\n    },\n    \"default\": true,\n    \"deprecated\": {\n      \"type\": \"boolean\",\n      \"default\": false\n    },\n    \"readOnly\": {\n      \"type\": \"boolean\",\n      \"default\": false\n    },\n    \"writeOnly\": {\n      \"type\": \"boolean\",\n      \"default\": false\n    },\n    \"examples\": {\n      \"type\": \"array\",\n      \"items\": true\n    }\n  }\n}\n\"/dist/vocabularies/format/index.js\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst format_1 = require(\"./format\");\nconst format = [format_1.default];\nexports.default = format;\n//# sourceMappingURL=index.js.map(/lib/vocabularies/discriminator/index.ts\u0010!import type {CodeKeywordDefinition, AnySchemaObject, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, getProperty, Name} from \"../../compile/codegen\"\nimport {DiscrError, DiscrErrorObj} from \"../discriminator/types\"\nimport {resolveRef, SchemaEnv} from \"../../compile\"\nimport {schemaHasRulesButRef} from \"../../compile/util\"\n\nexport type DiscriminatorError = DiscrErrorObj<DiscrError.Tag> | DiscrErrorObj<DiscrError.Mapping>\n\nconst error: KeywordErrorDefinition = {\n  message: ({params: {discrError, tagName}}) =>\n    discrError === DiscrError.Tag\n      ? `tag \"${tagName}\" must be string`\n      : `value of tag \"${tagName}\" must be in oneOf`,\n  params: ({params: {discrError, tag, tagName}}) =>\n    _`{error: ${discrError}, tag: ${tagName}, tagValue: ${tag}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"discriminator\",\n  type: \"object\",\n  schemaType: \"object\",\n  error,\n  code(cxt: KeywordCxt) {\n    const {gen, data, schema, parentSchema, it} = cxt\n    const {oneOf} = parentSchema\n    if (!it.opts.discriminator) {\n      throw new Error(\"discriminator: requires discriminator option\")\n    }\n    const tagName = schema.propertyName\n    if (typeof tagName != \"string\") throw new Error(\"discriminator: requires propertyName\")\n    if (schema.mapping) throw new Error(\"discriminator: mapping is not supported\")\n    if (!oneOf) throw new Error(\"discriminator: requires oneOf keyword\")\n    const valid = gen.let(\"valid\", false)\n    const tag = gen.const(\"tag\", _`${data}${getProperty(tagName)}`)\n    gen.if(\n      _`typeof ${tag} == \"string\"`,\n      () => validateMapping(),\n      () => cxt.error(false, {discrError: DiscrError.Tag, tag, tagName})\n    )\n    cxt.ok(valid)\n\n    function validateMapping(): void {\n      const mapping = getMapping()\n      gen.if(false)\n      for (const tagValue in mapping) {\n        gen.elseIf(_`${tag} === ${tagValue}`)\n        gen.assign(valid, applyTagSchema(mapping[tagValue]))\n      }\n      gen.else()\n      cxt.error(false, {discrError: DiscrError.Mapping, tag, tagName})\n      gen.endIf()\n    }\n\n    function applyTagSchema(schemaProp?: number): Name {\n      const _valid = gen.name(\"valid\")\n      const schCxt = cxt.subschema({keyword: \"oneOf\", schemaProp}, _valid)\n      cxt.mergeEvaluated(schCxt, Name)\n      return _valid\n    }\n\n    function getMapping(): {[T in string]?: number} {\n      const oneOfMapping: {[T in string]?: number} = {}\n      const topRequired = hasRequired(parentSchema)\n      let tagRequired = true\n      for (let i = 0; i < oneOf.length; i++) {\n        let sch = oneOf[i]\n        if (sch?.$ref && !schemaHasRulesButRef(sch, it.self.RULES)) {\n          sch = resolveRef.call(it.self, it.schemaEnv.root, it.baseId, sch?.$ref)\n          if (sch instanceof SchemaEnv) sch = sch.schema\n        }\n        const propSch = sch?.properties?.[tagName]\n        if (typeof propSch != \"object\") {\n          throw new Error(\n            `discriminator: oneOf subschemas (or referenced schemas) must have \"properties/${tagName}\"`\n          )\n        }\n        tagRequired = tagRequired && (topRequired || hasRequired(sch))\n        addMappings(propSch, i)\n      }\n      if (!tagRequired) throw new Error(`discriminator: \"${tagName}\" must be required`)\n      return oneOfMapping\n\n      function hasRequired({required}: AnySchemaObject): boolean {\n        return Array.isArray(required) && required.includes(tagName)\n      }\n\n      function addMappings(sch: AnySchemaObject, i: number): void {\n        if (sch.const) {\n          addMapping(sch.const, i)\n        } else if (sch.enum) {\n          for (const tagValue of sch.enum) {\n            addMapping(tagValue, i)\n          }\n        } else {\n          throw new Error(`discriminator: \"properties/${tagName}\" must have \"const\" or \"enum\"`)\n        }\n      }\n\n      function addMapping(tagValue: unknown, i: number): void {\n        if (typeof tagValue != \"string\" || tagValue in oneOfMapping) {\n          throw new Error(`discriminator: \"${tagName}\" values must be unique strings`)\n        }\n        oneOfMapping[tagValue] = i\n      }\n    }\n  },\n}\n\nexport default def\n&/dist/compile/validate/dataType.js.map\u001d{\"version\":3,\"file\":\"dataType.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../lib/compile/validate/dataType.ts\"],\"names\":[],\"mappings\":\"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\"}/dist/vocabularies/errors.jso\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=errors.js.map,/dist/vocabularies/validation/uniqueItems.js\u000b\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst dataType_1 = require(\"../../compile/validate/dataType\");\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst equal_1 = require(\"../../runtime/equal\");\nconst error = {\n    message: ({ params: { i, j } }) => (0, codegen_1.str) `must NOT have duplicate items (items ## ${j} and ${i} are identical)`,\n    params: ({ params: { i, j } }) => (0, codegen_1._) `{i: ${i}, j: ${j}}`,\n};\nconst def = {\n    keyword: \"uniqueItems\",\n    type: \"array\",\n    schemaType: \"boolean\",\n    $data: true,\n    error,\n    code(cxt) {\n        const { gen, data, $data, schema, parentSchema, schemaCode, it } = cxt;\n        if (!$data && !schema)\n            return;\n        const valid = gen.let(\"valid\");\n        const itemTypes = parentSchema.items ? (0, dataType_1.getSchemaTypes)(parentSchema.items) : [];\n        cxt.block$data(valid, validateUniqueItems, (0, codegen_1._) `${schemaCode} === false`);\n        cxt.ok(valid);\n        function validateUniqueItems() {\n            const i = gen.let(\"i\", (0, codegen_1._) `${data}.length`);\n            const j = gen.let(\"j\");\n            cxt.setParams({ i, j });\n            gen.assign(valid, true);\n            gen.if((0, codegen_1._) `${i} > 1`, () => (canOptimize() ? loopN : loopN2)(i, j));\n        }\n        function canOptimize() {\n            return itemTypes.length > 0 && !itemTypes.some((t) => t === \"object\" || t === \"array\");\n        }\n        function loopN(i, j) {\n            const item = gen.name(\"item\");\n            const wrongType = (0, dataType_1.checkDataTypes)(itemTypes, item, it.opts.strictNumbers, dataType_1.DataType.Wrong);\n            const indices = gen.const(\"indices\", (0, codegen_1._) `{}`);\n            gen.for((0, codegen_1._) `;${i}--;`, () => {\n                gen.let(item, (0, codegen_1._) `${data}[${i}]`);\n                gen.if(wrongType, (0, codegen_1._) `continue`);\n                if (itemTypes.length > 1)\n                    gen.if((0, codegen_1._) `typeof ${item} == \"string\"`, (0, codegen_1._) `${item} += \"_\"`);\n                gen\n                    .if((0, codegen_1._) `typeof ${indices}[${item}] == \"number\"`, () => {\n                    gen.assign(j, (0, codegen_1._) `${indices}[${item}]`);\n                    cxt.error();\n                    gen.assign(valid, false).break();\n                })\n                    .code((0, codegen_1._) `${indices}[${item}] = ${i}`);\n            });\n        }\n        function loopN2(i, j) {\n            const eql = (0, util_1.useFunc)(gen, equal_1.default);\n            const outer = gen.name(\"outer\");\n            gen.label(outer).for((0, codegen_1._) `;${i}--;`, () => gen.for((0, codegen_1._) `${j} = ${i}; ${j}--;`, () => gen.if((0, codegen_1._) `${eql}(${data}[${i}], ${data}[${j}])`, () => {\n                cxt.error();\n                gen.assign(valid, false).break(outer);\n            })));\n        }\n    },\n};\nexports.default = def;\n//# sourceMappingURL=uniqueItems.js.map&/dist/vocabularies/jtd/properties.d.ts\u0003oimport type { CodeKeywordDefinition, ErrorObject, KeywordErrorDefinition, SchemaObject } from \"../../types\";\nimport type { KeywordCxt } from \"../../compile/validate\";\nimport { _JTDTypeError } from \"./error\";\ndeclare enum PropError {\n    Additional = \"additional\",\n    Missing = \"missing\"\n}\ntype PropKeyword = \"properties\" | \"optionalProperties\";\ntype PropSchema = {\n    [P in string]?: SchemaObject;\n};\nexport type JTDPropertiesError = _JTDTypeError<PropKeyword, \"object\", PropSchema> | ErrorObject<PropKeyword, {\n    error: PropError.Additional;\n    additionalProperty: string;\n}, PropSchema> | ErrorObject<PropKeyword, {\n    error: PropError.Missing;\n    missingProperty: string;\n}, PropSchema>;\nexport declare const error: KeywordErrorDefinition;\ndeclare const def: CodeKeywordDefinition;\nexport declare function validateProperties(cxt: KeywordCxt): void;\nexport default def;\n)/lib/vocabularies/applicator/items2020.ts\u0004\u001dimport type {\n  CodeKeywordDefinition,\n  KeywordErrorDefinition,\n  ErrorObject,\n  AnySchema,\n} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str} from \"../../compile/codegen\"\nimport {alwaysValidSchema} from \"../../compile/util\"\nimport {validateArray} from \"../code\"\nimport {validateAdditionalItems} from \"./additionalItems\"\n\nexport type ItemsError = ErrorObject<\"items\", {limit: number}, AnySchema>\n\nconst error: KeywordErrorDefinition = {\n  message: ({params: {len}}) => str`must NOT have more than ${len} items`,\n  params: ({params: {len}}) => _`{limit: ${len}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"items\",\n  type: \"array\",\n  schemaType: [\"object\", \"boolean\"],\n  before: \"uniqueItems\",\n  error,\n  code(cxt: KeywordCxt) {\n    const {schema, parentSchema, it} = cxt\n    const {prefixItems} = parentSchema\n    it.items = true\n    if (alwaysValidSchema(it, schema)) return\n    if (prefixItems) validateAdditionalItems(cxt, prefixItems)\n    else cxt.ok(validateArray(cxt))\n  },\n}\n\nexport default def\n/dist/vocabularies/next.d.tsaimport type { Vocabulary } from \"../types\";\ndeclare const next: Vocabulary;\nexport default next;\n/dist/types/jtd-schema.d.ts\u001b/** numeric strings */\ntype NumberType = \"float32\" | \"float64\" | \"int8\" | \"uint8\" | \"int16\" | \"uint16\" | \"int32\" | \"uint32\";\n/** string strings */\ntype StringType = \"string\" | \"timestamp\";\n/** Generic JTD Schema without inference of the represented type */\nexport type SomeJTDSchemaType = (// ref\n{\n    ref: string;\n} | {\n    type: NumberType | StringType | \"boolean\";\n} | {\n    enum: string[];\n} | {\n    elements: SomeJTDSchemaType;\n} | {\n    values: SomeJTDSchemaType;\n} | {\n    properties: Record<string, SomeJTDSchemaType>;\n    optionalProperties?: Record<string, SomeJTDSchemaType>;\n    additionalProperties?: boolean;\n} | {\n    properties?: Record<string, SomeJTDSchemaType>;\n    optionalProperties: Record<string, SomeJTDSchemaType>;\n    additionalProperties?: boolean;\n} | {\n    discriminator: string;\n    mapping: Record<string, SomeJTDSchemaType>;\n} | {}) & {\n    nullable?: boolean;\n    metadata?: Record<string, unknown>;\n    definitions?: Record<string, SomeJTDSchemaType>;\n};\n/** required keys of an object, not undefined */\ntype RequiredKeys<T> = {\n    [K in keyof T]-?: undefined extends T[K] ? never : K;\n}[keyof T];\n/** optional or undifined-able keys of an object */\ntype OptionalKeys<T> = {\n    [K in keyof T]-?: undefined extends T[K] ? K : never;\n}[keyof T];\n/** type is true if T is a union type */\ntype IsUnion_<T, U extends T = T> = false extends (T extends unknown ? ([U] extends [T] ? false : true) : never) ? false : true;\ntype IsUnion<T> = IsUnion_<T>;\n/** type is true if T is identically E */\ntype TypeEquality<T, E> = [T] extends [E] ? ([E] extends [T] ? true : false) : false;\n/** type is true if T or null is identically E or null*/\ntype NullTypeEquality<T, E> = TypeEquality<T | null, E | null>;\n/** gets only the string literals of a type or null if a type isn't a string literal */\ntype EnumString<T> = [T] extends [never] ? null : T extends string ? string extends T ? null : T : null;\n/** true if type is a union of string literals */\ntype IsEnum<T> = null extends EnumString<T> ? false : true;\n/** true only if all types are array types (not tuples) */\ntype IsElements<T> = false extends IsUnion<T> ? [T] extends [readonly unknown[]] ? undefined extends T[0.5] ? false : true : false : false;\n/** true if the the type is a values type */\ntype IsValues<T> = false extends IsUnion<T> ? TypeEquality<keyof T, string> : false;\n/** true if type is a properties type and Union is false, or type is a discriminator type and Union is true */\ntype IsRecord<T, Union extends boolean> = Union extends IsUnion<T> ? null extends EnumString<keyof T> ? false : true : false;\n/** true if type represents an empty record */\ntype IsEmptyRecord<T> = [T] extends [Record<string, never>] ? [T] extends [never] ? false : true : false;\n/** actual schema */\nexport type JTDSchemaType<T, D extends Record<string, unknown> = Record<string, never>> = (// refs - where null wasn't specified, must match exactly\n(null extends EnumString<keyof D> ? never : ({\n    [K in keyof D]: [T] extends [D[K]] ? {\n        ref: K;\n    } : never;\n}[keyof D] & {\n    nullable?: false;\n}) | (null extends T ? {\n    [K in keyof D]: [Exclude<T, null>] extends [Exclude<D[K], null>] ? {\n        ref: K;\n    } : never;\n}[keyof D] & {\n    nullable: true;\n} : never)) | (unknown extends T ? {\n    nullable?: boolean;\n} : never) | ((true extends NullTypeEquality<T, number> ? {\n    type: NumberType;\n} : true extends NullTypeEquality<T, boolean> ? {\n    type: \"boolean\";\n} : true extends NullTypeEquality<T, string> ? {\n    type: StringType;\n} : true extends NullTypeEquality<T, Date> ? {\n    type: \"timestamp\";\n} : true extends IsEnum<Exclude<T, null>> ? {\n    enum: EnumString<Exclude<T, null>>[];\n} : true extends IsElements<Exclude<T, null>> ? T extends readonly (infer E)[] ? {\n    elements: JTDSchemaType<E, D>;\n} : never : true extends IsEmptyRecord<Exclude<T, null>> ? {\n    properties: Record<string, never>;\n    optionalProperties?: Record<string, never>;\n} | {\n    optionalProperties: Record<string, never>;\n} : true extends IsValues<Exclude<T, null>> ? T extends Record<string, infer V> ? {\n    values: JTDSchemaType<V, D>;\n} : never : true extends IsRecord<Exclude<T, null>, false> ? ([RequiredKeys<Exclude<T, null>>] extends [never] ? {\n    properties?: Record<string, never>;\n} : {\n    properties: {\n        [K in RequiredKeys<T>]: JTDSchemaType<T[K], D>;\n    };\n}) & ([OptionalKeys<Exclude<T, null>>] extends [never] ? {\n    optionalProperties?: Record<string, never>;\n} : {\n    optionalProperties: {\n        [K in OptionalKeys<T>]: JTDSchemaType<Exclude<T[K], undefined>, D>;\n    };\n}) & {\n    additionalProperties?: boolean;\n} : true extends IsRecord<Exclude<T, null>, true> ? {\n    [K in keyof Exclude<T, null>]-?: Exclude<T, null>[K] extends string ? {\n        discriminator: K;\n        mapping: {\n            [M in Exclude<T, null>[K]]: JTDSchemaType<Omit<T extends Record<K, M> ? T : never, K>, D>;\n        };\n    } : never;\n}[keyof Exclude<T, null>] : never) & (null extends T ? {\n    nullable: true;\n} : {\n    nullable?: false;\n}))) & {\n    metadata?: Record<string, unknown>;\n    definitions?: {\n        [K in keyof D]: JTDSchemaType<D[K], D>;\n    };\n};\ntype JTDDataDef<S, D extends Record<string, unknown>> = // ref\n(S extends {\n    ref: string;\n} ? D extends {\n    [K in S[\"ref\"]]: infer V;\n} ? JTDDataDef<V, D> : never : S extends {\n    type: NumberType;\n} ? number : S extends {\n    type: \"boolean\";\n} ? boolean : S extends {\n    type: \"string\";\n} ? string : S extends {\n    type: \"timestamp\";\n} ? string | Date : S extends {\n    enum: readonly (infer E)[];\n} ? string extends E ? never : [E] extends [string] ? E : never : S extends {\n    elements: infer E;\n} ? JTDDataDef<E, D>[] : S extends {\n    properties: Record<string, unknown>;\n    optionalProperties?: Record<string, unknown>;\n    additionalProperties?: boolean;\n} ? {\n    -readonly [K in keyof S[\"properties\"]]-?: JTDDataDef<S[\"properties\"][K], D>;\n} & {\n    -readonly [K in keyof S[\"optionalProperties\"]]+?: JTDDataDef<S[\"optionalProperties\"][K], D>;\n} & ([S[\"additionalProperties\"]] extends [true] ? Record<string, unknown> : unknown) : S extends {\n    properties?: Record<string, unknown>;\n    optionalProperties: Record<string, unknown>;\n    additionalProperties?: boolean;\n} ? {\n    -readonly [K in keyof S[\"properties\"]]-?: JTDDataDef<S[\"properties\"][K], D>;\n} & {\n    -readonly [K in keyof S[\"optionalProperties\"]]+?: JTDDataDef<S[\"optionalProperties\"][K], D>;\n} & ([S[\"additionalProperties\"]] extends [true] ? Record<string, unknown> : unknown) : S extends {\n    values: infer V;\n} ? Record<string, JTDDataDef<V, D>> : S extends {\n    discriminator: infer M;\n    mapping: Record<string, unknown>;\n} ? [M] extends [string] ? {\n    [K in keyof S[\"mapping\"]]: JTDDataDef<S[\"mapping\"][K], D> & {\n        [KM in M]: K;\n    };\n}[keyof S[\"mapping\"]] : never : unknown) | (S extends {\n    nullable: true;\n} ? null : never);\nexport type JTDDataType<S> = S extends {\n    definitions: Record<string, unknown>;\n} ? JTDDataDef<S, S[\"definitions\"]> : JTDDataDef<S, Record<string, never>>;\nexport {};\n/lib/vocabularies/core/index.ts\u0001\u0012import type {Vocabulary} from \"../../types\"\nimport idKeyword from \"./id\"\nimport refKeyword from \"./ref\"\n\nconst core: Vocabulary = [\n  \"$schema\",\n  \"$id\",\n  \"$defs\",\n  \"$vocabulary\",\n  {keyword: \"$comment\"},\n  \"definitions\",\n  idKeyword,\n  refKeyword,\n]\n\nexport default core\n4/dist/vocabularies/applicator/additionalItems.js.map\b\u000f{\"version\":3,\"file\":\"additionalItems.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../lib/vocabularies/applicator/additionalItems.ts\"],\"names\":[],\"mappings\":\";;;AAOA,mDAAuD;AACvD,6CAA2E;AAI3E,MAAM,KAAK,GAA2B;IACpC,OAAO,EAAE,CAAC,EAAC,MAAM,EAAE,EAAC,GAAG,EAAC,EAAC,EAAE,EAAE,CAAC,IAAA,aAAG,EAAA,2BAA2B,GAAG,QAAQ;IACvE,MAAM,EAAE,CAAC,EAAC,MAAM,EAAE,EAAC,GAAG,EAAC,EAAC,EAAE,EAAE,CAAC,IAAA,WAAC,EAAA,WAAW,GAAG,GAAG;CAChD,CAAA;AAED,MAAM,GAAG,GAA0B;IACjC,OAAO,EAAE,iBAA0B;IACnC,IAAI,EAAE,OAAO;IACb,UAAU,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC;IACjC,MAAM,EAAE,aAAa;IACrB,KAAK;IACL,IAAI,CAAC,GAAe;QAClB,MAAM,EAAC,YAAY,EAAE,EAAE,EAAC,GAAG,GAAG,CAAA;QAC9B,MAAM,EAAC,KAAK,EAAC,GAAG,YAAY,CAAA;QAC5B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACzB,IAAA,sBAAe,EAAC,EAAE,EAAE,sEAAsE,CAAC,CAAA;YAC3F,OAAM;SACP;QACD,uBAAuB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;IACrC,CAAC;CACF,CAAA;AAED,SAAgB,uBAAuB,CAAC,GAAe,EAAE,KAAkB;IACzE,MAAM,EAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAC,GAAG,GAAG,CAAA;IAC5C,EAAE,CAAC,KAAK,GAAG,IAAI,CAAA;IACf,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,IAAA,WAAC,EAAA,GAAG,IAAI,SAAS,CAAC,CAAA;IAC/C,IAAI,MAAM,KAAK,KAAK,EAAE;QACpB,GAAG,CAAC,SAAS,CAAC,EAAC,GAAG,EAAE,KAAK,CAAC,MAAM,EAAC,CAAC,CAAA;QAClC,GAAG,CAAC,IAAI,CAAC,IAAA,WAAC,EAAA,GAAG,GAAG,OAAO,KAAK,CAAC,MAAM,EAAE,CAAC,CAAA;KACvC;SAAM,IAAI,OAAO,MAAM,IAAI,QAAQ,IAAI,CAAC,IAAA,wBAAiB,EAAC,EAAE,EAAE,MAAM,CAAC,EAAE;QACtE,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,IAAA,WAAC,EAAA,GAAG,GAAG,OAAO,KAAK,CAAC,MAAM,EAAE,CAAC,CAAA,CAAC,WAAW;QACxE,GAAG,CAAC,EAAE,CAAC,IAAA,aAAG,EAAC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAA;QAC9C,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,CAAA;KACd;IAED,SAAS,aAAa,CAAC,KAAW;QAChC,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE;YACzC,GAAG,CAAC,SAAS,CAAC,EAAC,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,YAAY,EAAE,WAAI,CAAC,GAAG,EAAC,EAAE,KAAK,CAAC,CAAA;YACpE,IAAI,CAAC,EAAE,CAAC,SAAS;gBAAE,GAAG,CAAC,EAAE,CAAC,IAAA,aAAG,EAAC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAA;QAC1D,CAAC,CAAC,CAAA;IACJ,CAAC;AACH,CAAC;AAnBD,0DAmBC;AAED,kBAAe,GAAG,CAAA\"}/dist/vocabularies/code.d.ts\u0005import type { SchemaMap } from \"../types\";\nimport type { SchemaCxt } from \"../compile\";\nimport type { KeywordCxt } from \"../compile/validate\";\nimport { CodeGen, Code, Name } from \"../compile/codegen\";\nexport declare function checkReportMissingProp(cxt: KeywordCxt, prop: string): void;\nexport declare function checkMissingProp({ gen, data, it: { opts } }: KeywordCxt, properties: string[], missing: Name): Code;\nexport declare function reportMissingProp(cxt: KeywordCxt, missing: Name): void;\nexport declare function hasPropFunc(gen: CodeGen): Name;\nexport declare function isOwnProperty(gen: CodeGen, data: Name, property: Name | string): Code;\nexport declare function propertyInData(gen: CodeGen, data: Name, property: Name | string, ownProperties?: boolean): Code;\nexport declare function noPropertyInData(gen: CodeGen, data: Name, property: Name | string, ownProperties?: boolean): Code;\nexport declare function allSchemaProperties(schemaMap?: SchemaMap): string[];\nexport declare function schemaProperties(it: SchemaCxt, schemaMap: SchemaMap): string[];\nexport declare function callValidateCode({ schemaCode, data, it: { gen, topSchemaRef, schemaPath, errorPath }, it }: KeywordCxt, func: Code, context: Code, passSchema?: boolean): Code;\nexport declare function usePattern({ gen, it: { opts } }: KeywordCxt, pattern: string): Name;\nexport declare function validateArray(cxt: KeywordCxt): Name;\nexport declare function validateUnion(cxt: KeywordCxt): void;\n!/dist/vocabularies/draft2020.d.tsąimport type { Vocabulary } from \"../types\";\ndeclare const draft2020Vocabularies: Vocabulary[];\nexport default draft2020Vocabularies;\n\"/dist/vocabularies/core/index.d.tsdimport type { Vocabulary } from \"../../types\";\ndeclare const core: Vocabulary;\nexport default core;\n2/dist/vocabularies/validation/limitContains.js.map\u0001{\"version\":3,\"file\":\"limitContains.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../lib/vocabularies/validation/limitContains.ts\"],\"names\":[],\"mappings\":\";;AAEA,6CAAkD;AAElD,MAAM,GAAG,GAA0B;IACjC,OAAO,EAAE,CAAC,aAAa,EAAE,aAAa,CAAC;IACvC,IAAI,EAAE,OAAO;IACb,UAAU,EAAE,QAAQ;IACpB,IAAI,CAAC,EAAC,OAAO,EAAE,YAAY,EAAE,EAAE,EAAa;QAC1C,IAAI,YAAY,CAAC,QAAQ,KAAK,SAAS,EAAE;YACvC,IAAA,sBAAe,EAAC,EAAE,EAAE,IAAI,OAAO,iCAAiC,CAAC,CAAA;SAClE;IACH,CAAC;CACF,CAAA;AAED,kBAAe,GAAG,CAAA\"}//dist/vocabularies/dynamic/dynamicAnchor.js.map\u0005G{\"version\":3,\"file\":\"dynamicAnchor.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../lib/vocabularies/dynamic/dynamicAnchor.ts\"],\"names\":[],\"mappings\":\";;;AAEA,mDAA0D;AAC1D,+CAAmC;AACnC,2CAAsD;AACtD,qCAAuC;AAEvC,MAAM,GAAG,GAA0B;IACjC,OAAO,EAAE,gBAAgB;IACzB,UAAU,EAAE,QAAQ;IACpB,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC;CAC9C,CAAA;AAED,SAAgB,aAAa,CAAC,GAAe,EAAE,MAAc;IAC3D,MAAM,EAAC,GAAG,EAAE,EAAE,EAAC,GAAG,GAAG,CAAA;IACrB,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,IAAI,CAAA;IAC/C,MAAM,CAAC,GAAG,IAAA,WAAC,EAAA,GAAG,eAAC,CAAC,cAAc,GAAG,IAAA,qBAAW,EAAC,MAAM,CAAC,EAAE,CAAA;IACtD,MAAM,QAAQ,GAAG,EAAE,CAAC,aAAa,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA;IAC/E,GAAG,CAAC,EAAE,CAAC,IAAA,WAAC,EAAA,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAA;AACjD,CAAC;AAND,sCAMC;AAED,SAAS,YAAY,CAAC,GAAe;IACnC,MAAM,EAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAC,GAAG,GAAG,CAAC,EAAE,CAAA;IACxC,MAAM,EAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAC,GAAG,SAAS,CAAC,IAAI,CAAA;IACtD,MAAM,EAAC,QAAQ,EAAC,GAAG,IAAI,CAAC,IAAI,CAAA;IAC5B,MAAM,GAAG,GAAG,IAAI,mBAAS,CAAC,EAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAC,CAAC,CAAA;IAC5E,uBAAa,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IAC7B,OAAO,IAAA,iBAAW,EAAC,GAAG,EAAE,GAAG,CAAC,CAAA;AAC9B,CAAC;AAED,kBAAe,GAAG,CAAA\"}%/dist/vocabularies/applicator/if.d.tsimport type { CodeKeywordDefinition, ErrorObject, AnySchema } from \"../../types\";\nexport type IfKeywordError = ErrorObject<\"if\", {\n    failingKeyword: string;\n}, AnySchema>;\ndeclare const def: CodeKeywordDefinition;\nexport default def;\n(/dist/vocabularies/applicator/allOf.d.tsximport type { CodeKeywordDefinition } from \"../../types\";\ndeclare const def: CodeKeywordDefinition;\nexport default def;\n/package.json\u0011h{\n  \"name\": \"ajv\",\n  \"version\": \"8.12.0\",\n  \"description\": \"Another JSON Schema Validator\",\n  \"main\": \"dist/ajv.js\",\n  \"types\": \"dist/ajv.d.ts\",\n  \"files\": [\n    \"lib/\",\n    \"dist/\",\n    \".runkit_example.js\"\n  ],\n  \"scripts\": {\n    \"eslint\": \"eslint \\\"lib/**/*.ts\\\" \\\"spec/**/*.*s\\\" --ignore-pattern spec/JSON-Schema-Test-Suite\",\n    \"prettier:write\": \"prettier --write \\\"./**/*.{json,yaml,js,ts}\\\"\",\n    \"prettier:check\": \"prettier --list-different \\\"./**/*.{json,yaml,js,ts}\\\"\",\n    \"test-spec\": \"cross-env TS_NODE_PROJECT=spec/tsconfig.json mocha -r ts-node/register \\\"spec/**/*.spec.{ts,js}\\\" -R dot\",\n    \"test-codegen\": \"nyc cross-env TS_NODE_PROJECT=spec/tsconfig.json mocha -r ts-node/register 'spec/codegen.spec.ts' -R spec\",\n    \"test-debug\": \"npm run test-spec -- --inspect-brk\",\n    \"test-cov\": \"nyc npm run test-spec\",\n    \"rollup\": \"rm -rf bundle && rollup -c\",\n    \"bundle\": \"rm -rf bundle && node ./scripts/bundle.js ajv ajv7 ajv7 && node ./scripts/bundle.js 2019 ajv2019 ajv2019 && node ./scripts/bundle.js 2020 ajv2020 ajv2020 && node ./scripts/bundle.js jtd ajvJTD ajvJTD\",\n    \"build\": \"rm -rf dist && tsc && cp -r lib/refs dist && rm dist/refs/json-schema-2019-09/index.ts && rm dist/refs/json-schema-2020-12/index.ts && rm dist/refs/jtd-schema.ts\",\n    \"json-tests\": \"rm -rf spec/_json/*.js && node scripts/jsontests\",\n    \"test-karma\": \"karma start\",\n    \"test-browser\": \"rm -rf .browser && npm run bundle && scripts/prepare-tests && karma start\",\n    \"test-all\": \"npm run test-cov && if-node-version 12 npm run test-browser\",\n    \"test\": \"npm run json-tests && npm run prettier:check && npm run eslint && npm link && npm link --legacy-peer-deps ajv && npm run test-cov\",\n    \"test-ci\": \"AJV_FULL_TEST=true npm test\",\n    \"prepublish\": \"npm run build\",\n    \"benchmark\": \"npm i && npm run build && npm link && cd ./benchmark && npm link --legacy-peer-deps ajv && npm i && node ./jtd\",\n    \"docs:dev\": \"./scripts/prepare-site && vuepress dev docs\",\n    \"docs:build\": \"./scripts/prepare-site && vuepress build docs\"\n  },\n  \"nyc\": {\n    \"exclude\": [\n      \"**/spec/**\",\n      \"node_modules\"\n    ],\n    \"reporter\": [\n      \"lcov\",\n      \"text-summary\"\n    ]\n  },\n  \"repository\": \"ajv-validator/ajv\",\n  \"keywords\": [\n    \"JSON\",\n    \"schema\",\n    \"validator\",\n    \"validation\",\n    \"jsonschema\",\n    \"json-schema\",\n    \"json-schema-validator\",\n    \"json-schema-validation\"\n  ],\n  \"author\": \"Evgeny Poberezkin\",\n  \"license\": \"MIT\",\n  \"bugs\": \"https://github.com/ajv-validator/ajv/issues\",\n  \"homepage\": \"https://ajv.js.org\",\n  \"runkitExampleFilename\": \".runkit_example.js\",\n  \"dependencies\": {\n    \"fast-deep-equal\": \"^3.1.1\",\n    \"json-schema-traverse\": \"^1.0.0\",\n    \"require-from-string\": \"^2.0.2\",\n    \"uri-js\": \"^4.2.2\"\n  },\n  \"devDependencies\": {\n    \"@ajv-validator/config\": \"^0.3.0\",\n    \"@rollup/plugin-commonjs\": \"^24.0.0\",\n    \"@rollup/plugin-json\": \"^6.0.0\",\n    \"@rollup/plugin-node-resolve\": \"^15.0.1\",\n    \"@rollup/plugin-typescript\": \"^10.0.1\",\n    \"@types/chai\": \"^4.2.12\",\n    \"@types/mocha\": \"^10.0.0\",\n    \"@types/node\": \"^18.11.9\",\n    \"@types/require-from-string\": \"^1.2.0\",\n    \"@typescript-eslint/eslint-plugin\": \"^3.8.0\",\n    \"@typescript-eslint/parser\": \"^3.8.0\",\n    \"ajv-formats\": \"^3.0.0-rc.0\",\n    \"browserify\": \"^17.0.0\",\n    \"chai\": \"^4.0.1\",\n    \"cross-env\": \"^7.0.2\",\n    \"dayjs\": \"^1.10.4\",\n    \"dayjs-plugin-utc\": \"^0.1.2\",\n    \"eslint\": \"^7.8.1\",\n    \"eslint-config-prettier\": \"^7.0.0\",\n    \"fast-uri\": \"^2.1.0\",\n    \"glob\": \"^8.0.2\",\n    \"husky\": \"^8.0.2\",\n    \"if-node-version\": \"^1.0.0\",\n    \"jimp\": \"^0.16.1\",\n    \"js-beautify\": \"^1.7.3\",\n    \"json-schema-test\": \"^2.0.0\",\n    \"karma\": \"^6.0.0\",\n    \"karma-chrome-launcher\": \"^3.0.0\",\n    \"karma-mocha\": \"^2.0.0\",\n    \"lint-staged\": \"^13.0.3\",\n    \"mocha\": \"^10.0.0\",\n    \"module-from-string\": \"^3.1.3\",\n    \"node-fetch\": \"^3.0.0\",\n    \"nyc\": \"^15.0.0\",\n    \"prettier\": \"^2.3.1\",\n    \"re2\": \"^1.16.0\",\n    \"rollup\": \"^2.44.0\",\n    \"rollup-plugin-terser\": \"^7.0.2\",\n    \"ts-node\": \"^10.0.0\",\n    \"tsify\": \"^5.0.2\",\n    \"typescript\": \"^4.8.0\"\n  },\n  \"collective\": {\n    \"type\": \"opencollective\",\n    \"url\": \"https://opencollective.com/ajv\"\n  },\n  \"funding\": {\n    \"type\": \"github\",\n    \"url\": \"https://github.com/sponsors/epoberezkin\"\n  },\n  \"prettier\": \"@ajv-validator/config/prettierrc.json\",\n  \"husky\": {\n    \"hooks\": {\n      \"pre-commit\": \"lint-staged && npm test\"\n    }\n  },\n  \"lint-staged\": {\n    \"*.{json,yaml,js,ts}\": \"prettier --write\"\n  }\n}\n4/dist/vocabularies/validation/dependentRequired.d.ts\u0001Wimport type { CodeKeywordDefinition, ErrorObject } from \"../../types\";\nimport { DependenciesErrorParams, PropertyDependencies } from \"../applicator/dependencies\";\nexport type DependentRequiredError = ErrorObject<\"dependentRequired\", DependenciesErrorParams, PropertyDependencies>;\ndeclare const def: CodeKeywordDefinition;\nexport default def;\n/dist/runtime/equal.js.map{\"version\":3,\"file\":\"equal.js\",\"sourceRoot\":\"\",\"sources\":[\"../../lib/runtime/equal.ts\"],\"names\":[],\"mappings\":\";;AAAA,kDAAkD;AAClD,yCAAwC;AAGtC,KAAe,CAAC,IAAI,GAAG,2CAA2C,CAAA;AAEpE,kBAAe,KAAc,CAAA\"}/lib/vocabularies/draft7.ts\u0001import type {Vocabulary} from \"../types\"\nimport coreVocabulary from \"./core\"\nimport validationVocabulary from \"./validation\"\nimport getApplicatorVocabulary from \"./applicator\"\nimport formatVocabulary from \"./format\"\nimport {metadataVocabulary, contentVocabulary} from \"./metadata\"\n\nconst draft7Vocabularies: Vocabulary[] = [\n  coreVocabulary,\n  validationVocabulary,\n  getApplicatorVocabulary(),\n  formatVocabulary,\n  metadataVocabulary,\n  contentVocabulary,\n]\n\nexport default draft7Vocabularies\n-/dist/refs/json-schema-2019-09/meta/core.json\u0004{\n  \"$schema\": \"https://json-schema.org/draft/2019-09/schema\",\n  \"$id\": \"https://json-schema.org/draft/2019-09/meta/core\",\n  \"$vocabulary\": {\n    \"https://json-schema.org/draft/2019-09/vocab/core\": true\n  },\n  \"$recursiveAnchor\": true,\n\n  \"title\": \"Core vocabulary meta-schema\",\n  \"type\": [\"object\", \"boolean\"],\n  \"properties\": {\n    \"$id\": {\n      \"type\": \"string\",\n      \"format\": \"uri-reference\",\n      \"$comment\": \"Non-empty fragments not allowed.\",\n      \"pattern\": \"^[^#]*#?$\"\n    },\n    \"$schema\": {\n      \"type\": \"string\",\n      \"format\": \"uri\"\n    },\n    \"$anchor\": {\n      \"type\": \"string\",\n      \"pattern\": \"^[A-Za-z][-A-Za-z0-9.:_]*$\"\n    },\n    \"$ref\": {\n      \"type\": \"string\",\n      \"format\": \"uri-reference\"\n    },\n    \"$recursiveRef\": {\n      \"type\": \"string\",\n      \"format\": \"uri-reference\"\n    },\n    \"$recursiveAnchor\": {\n      \"type\": \"boolean\",\n      \"default\": false\n    },\n    \"$vocabulary\": {\n      \"type\": \"object\",\n      \"propertyNames\": {\n        \"type\": \"string\",\n        \"format\": \"uri\"\n      },\n      \"additionalProperties\": {\n        \"type\": \"boolean\"\n      }\n    },\n    \"$comment\": {\n      \"type\": \"string\"\n    },\n    \"$defs\": {\n      \"type\": \"object\",\n      \"additionalProperties\": {\"$recursiveRef\": \"#\"},\n      \"default\": {}\n    }\n  }\n}\n*/dist/vocabularies/applicator/oneOf.js.map\u0007{\"version\":3,\"file\":\"oneOf.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../lib/vocabularies/applicator/oneOf.ts\"],\"names\":[],\"mappings\":\";;AAOA,mDAA6C;AAC7C,6CAAoD;AASpD,MAAM,KAAK,GAA2B;IACpC,OAAO,EAAE,wCAAwC;IACjD,MAAM,EAAE,CAAC,EAAC,MAAM,EAAC,EAAE,EAAE,CAAC,IAAA,WAAC,EAAA,oBAAoB,MAAM,CAAC,OAAO,GAAG;CAC7D,CAAA;AAED,MAAM,GAAG,GAA0B;IACjC,OAAO,EAAE,OAAO;IAChB,UAAU,EAAE,OAAO;IACnB,WAAW,EAAE,IAAI;IACjB,KAAK;IACL,IAAI,CAAC,GAAe;QAClB,MAAM,EAAC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE,EAAC,GAAG,GAAG,CAAA;QAC3C,wBAAwB;QACxB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAA;QACvE,IAAI,EAAE,CAAC,IAAI,CAAC,aAAa,IAAI,YAAY,CAAC,aAAa;YAAE,OAAM;QAC/D,MAAM,MAAM,GAAgB,MAAM,CAAA;QAClC,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;QACrC,MAAM,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;QACxC,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QACnC,GAAG,CAAC,SAAS,CAAC,EAAC,OAAO,EAAC,CAAC,CAAA;QACxB,2GAA2G;QAE3G,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,CAAA;QAExB,GAAG,CAAC,MAAM,CACR,KAAK,EACL,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,EACjB,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CACtB,CAAA;QAED,SAAS,aAAa;YACpB,MAAM,CAAC,OAAO,CAAC,CAAC,GAAc,EAAE,CAAS,EAAE,EAAE;gBAC3C,IAAI,MAA6B,CAAA;gBACjC,IAAI,IAAA,wBAAiB,EAAC,EAAE,EAAE,GAAG,CAAC,EAAE;oBAC9B,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;iBACxB;qBAAM;oBACL,MAAM,GAAG,GAAG,CAAC,SAAS,CACpB;wBACE,OAAO,EAAE,OAAO;wBAChB,UAAU,EAAE,CAAC;wBACb,aAAa,EAAE,IAAI;qBACpB,EACD,QAAQ,CACT,CAAA;iBACF;gBAED,IAAI,CAAC,GAAG,CAAC,EAAE;oBACT,GAAG;yBACA,EAAE,CAAC,IAAA,WAAC,EAAA,GAAG,QAAQ,OAAO,KAAK,EAAE,CAAC;yBAC9B,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC;yBACpB,MAAM,CAAC,OAAO,EAAE,IAAA,WAAC,EAAA,IAAI,OAAO,KAAK,CAAC,GAAG,CAAC;yBACtC,IAAI,EAAE,CAAA;iBACV;gBAED,GAAG,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;oBACpB,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;oBACvB,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;oBACtB,IAAI,MAAM;wBAAE,GAAG,CAAC,cAAc,CAAC,MAAM,EAAE,cAAI,CAAC,CAAA;gBAC9C,CAAC,CAAC,CAAA;YACJ,CAAC,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;CACF,CAAA;AAED,kBAAe,GAAG,CAAA\"}/dist/2020.d.ts\u0004import type { AnySchemaObject } from \"./types\";\nimport AjvCore, { Options } from \"./core\";\ndeclare class Ajv2020 extends AjvCore {\n    constructor(opts?: Options);\n    _addVocabularies(): void;\n    _addDefaultMetaSchema(): void;\n    defaultMeta(): string | AnySchemaObject | undefined;\n}\nexport default Ajv2020;\nexport { Format, FormatDefinition, AsyncFormatDefinition, KeywordDefinition, KeywordErrorDefinition, CodeKeywordDefinition, MacroKeywordDefinition, FuncKeywordDefinition, Vocabulary, Schema, SchemaObject, AnySchemaObject, AsyncSchema, AnySchema, ValidateFunction, AsyncValidateFunction, ErrorObject, ErrorNoParams, } from \"./types\";\nexport { Plugin, Options, CodeOptions, InstanceOptions, Logger, ErrorsTextOptions } from \"./core\";\nexport { SchemaCxt, SchemaObjCxt } from \"./compile\";\nexport { KeywordCxt } from \"./compile/validate\";\nexport { DefinedError } from \"./vocabularies/errors\";\nexport { JSONType } from \"./compile/rules\";\nexport { JSONSchemaType } from \"./types/json-schema\";\nexport { _, str, stringify, nil, Name, Code, CodeGen, CodeGenOptions } from \"./compile/codegen\";\nexport { default as ValidationError } from \"./runtime/validation_error\";\nexport { default as MissingRefError } from \"./compile/ref_error\";\n(/lib/vocabularies/applicator/contains.ts\fimport type {\n  CodeKeywordDefinition,\n  KeywordErrorDefinition,\n  ErrorObject,\n  AnySchema,\n} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str, Name} from \"../../compile/codegen\"\nimport {alwaysValidSchema, checkStrictMode, Type} from \"../../compile/util\"\n\nexport type ContainsError = ErrorObject<\n  \"contains\",\n  {minContains: number; maxContains?: number},\n  AnySchema\n>\n\nconst error: KeywordErrorDefinition = {\n  message: ({params: {min, max}}) =>\n    max === undefined\n      ? str`must contain at least ${min} valid item(s)`\n      : str`must contain at least ${min} and no more than ${max} valid item(s)`,\n  params: ({params: {min, max}}) =>\n    max === undefined ? _`{minContains: ${min}}` : _`{minContains: ${min}, maxContains: ${max}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"contains\",\n  type: \"array\",\n  schemaType: [\"object\", \"boolean\"],\n  before: \"uniqueItems\",\n  trackErrors: true,\n  error,\n  code(cxt: KeywordCxt) {\n    const {gen, schema, parentSchema, data, it} = cxt\n    let min: number\n    let max: number | undefined\n    const {minContains, maxContains} = parentSchema\n    if (it.opts.next) {\n      min = minContains === undefined ? 1 : minContains\n      max = maxContains\n    } else {\n      min = 1\n    }\n    const len = gen.const(\"len\", _`${data}.length`)\n    cxt.setParams({min, max})\n    if (max === undefined && min === 0) {\n      checkStrictMode(it, `\"minContains\" == 0 without \"maxContains\": \"contains\" keyword ignored`)\n      return\n    }\n    if (max !== undefined && min > max) {\n      checkStrictMode(it, `\"minContains\" > \"maxContains\" is always invalid`)\n      cxt.fail()\n      return\n    }\n    if (alwaysValidSchema(it, schema)) {\n      let cond = _`${len} >= ${min}`\n      if (max !== undefined) cond = _`${cond} && ${len} <= ${max}`\n      cxt.pass(cond)\n      return\n    }\n\n    it.items = true\n    const valid = gen.name(\"valid\")\n    if (max === undefined && min === 1) {\n      validateItems(valid, () => gen.if(valid, () => gen.break()))\n    } else if (min === 0) {\n      gen.let(valid, true)\n      if (max !== undefined) gen.if(_`${data}.length > 0`, validateItemsWithCount)\n    } else {\n      gen.let(valid, false)\n      validateItemsWithCount()\n    }\n    cxt.result(valid, () => cxt.reset())\n\n    function validateItemsWithCount(): void {\n      const schValid = gen.name(\"_valid\")\n      const count = gen.let(\"count\", 0)\n      validateItems(schValid, () => gen.if(schValid, () => checkLimits(count)))\n    }\n\n    function validateItems(_valid: Name, block: () => void): void {\n      gen.forRange(\"i\", 0, len, (i) => {\n        cxt.subschema(\n          {\n            keyword: \"contains\",\n            dataProp: i,\n            dataPropType: Type.Num,\n            compositeRule: true,\n          },\n          _valid\n        )\n        block()\n      })\n    }\n\n    function checkLimits(count: Name): void {\n      gen.code(_`${count}++`)\n      if (max === undefined) {\n        gen.if(_`${count} >= ${min}`, () => gen.assign(valid, true).break())\n      } else {\n        gen.if(_`${count} > ${max}`, () => gen.assign(valid, false).break())\n        if (min === 1) gen.assign(valid, true)\n        else gen.if(_`${count} >= ${min}`, () => gen.assign(valid, true))\n      }\n    }\n  },\n}\n\nexport default def\n-/lib/vocabularies/validation/limitContains.ts\u0001import type {CodeKeywordDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {checkStrictMode} from \"../../compile/util\"\n\nconst def: CodeKeywordDefinition = {\n  keyword: [\"maxContains\", \"minContains\"],\n  type: \"array\",\n  schemaType: \"number\",\n  code({keyword, parentSchema, it}: KeywordCxt) {\n    if (parentSchema.contains === undefined) {\n      checkStrictMode(it, `\"${keyword}\" without \"contains\" is ignored`)\n    }\n  },\n}\n\nexport default def\n2/lib/refs/json-schema-2020-12/meta/applicator.json\u0005{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"$id\": \"https://json-schema.org/draft/2020-12/meta/applicator\",\n  \"$vocabulary\": {\n    \"https://json-schema.org/draft/2020-12/vocab/applicator\": true\n  },\n  \"$dynamicAnchor\": \"meta\",\n\n  \"title\": \"Applicator vocabulary meta-schema\",\n  \"type\": [\"object\", \"boolean\"],\n  \"properties\": {\n    \"prefixItems\": {\"$ref\": \"#/$defs/schemaArray\"},\n    \"items\": {\"$dynamicRef\": \"#meta\"},\n    \"contains\": {\"$dynamicRef\": \"#meta\"},\n    \"additionalProperties\": {\"$dynamicRef\": \"#meta\"},\n    \"properties\": {\n      \"type\": \"object\",\n      \"additionalProperties\": {\"$dynamicRef\": \"#meta\"},\n      \"default\": {}\n    },\n    \"patternProperties\": {\n      \"type\": \"object\",\n      \"additionalProperties\": {\"$dynamicRef\": \"#meta\"},\n      \"propertyNames\": {\"format\": \"regex\"},\n      \"default\": {}\n    },\n    \"dependentSchemas\": {\n      \"type\": \"object\",\n      \"additionalProperties\": {\"$dynamicRef\": \"#meta\"},\n      \"default\": {}\n    },\n    \"propertyNames\": {\"$dynamicRef\": \"#meta\"},\n    \"if\": {\"$dynamicRef\": \"#meta\"},\n    \"then\": {\"$dynamicRef\": \"#meta\"},\n    \"else\": {\"$dynamicRef\": \"#meta\"},\n    \"allOf\": {\"$ref\": \"#/$defs/schemaArray\"},\n    \"anyOf\": {\"$ref\": \"#/$defs/schemaArray\"},\n    \"oneOf\": {\"$ref\": \"#/$defs/schemaArray\"},\n    \"not\": {\"$dynamicRef\": \"#meta\"}\n  },\n  \"$defs\": {\n    \"schemaArray\": {\n      \"type\": \"array\",\n      \"minItems\": 1,\n      \"items\": {\"$dynamicRef\": \"#meta\"}\n    }\n  }\n}\n4/lib/vocabularies/applicator/additionalProperties.ts\u000eimport type {\n  CodeKeywordDefinition,\n  AddedKeywordDefinition,\n  ErrorObject,\n  KeywordErrorDefinition,\n  AnySchema,\n} from \"../../types\"\nimport {allSchemaProperties, usePattern, isOwnProperty} from \"../code\"\nimport {_, nil, or, not, Code, Name} from \"../../compile/codegen\"\nimport N from \"../../compile/names\"\nimport type {SubschemaArgs} from \"../../compile/validate/subschema\"\nimport {alwaysValidSchema, schemaRefOrVal, Type} from \"../../compile/util\"\n\nexport type AdditionalPropertiesError = ErrorObject<\n  \"additionalProperties\",\n  {additionalProperty: string},\n  AnySchema\n>\n\nconst error: KeywordErrorDefinition = {\n  message: \"must NOT have additional properties\",\n  params: ({params}) => _`{additionalProperty: ${params.additionalProperty}}`,\n}\n\nconst def: CodeKeywordDefinition & AddedKeywordDefinition = {\n  keyword: \"additionalProperties\",\n  type: [\"object\"],\n  schemaType: [\"boolean\", \"object\"],\n  allowUndefined: true,\n  trackErrors: true,\n  error,\n  code(cxt) {\n    const {gen, schema, parentSchema, data, errsCount, it} = cxt\n    /* istanbul ignore if */\n    if (!errsCount) throw new Error(\"ajv implementation error\")\n    const {allErrors, opts} = it\n    it.props = true\n    if (opts.removeAdditional !== \"all\" && alwaysValidSchema(it, schema)) return\n    const props = allSchemaProperties(parentSchema.properties)\n    const patProps = allSchemaProperties(parentSchema.patternProperties)\n    checkAdditionalProperties()\n    cxt.ok(_`${errsCount} === ${N.errors}`)\n\n    function checkAdditionalProperties(): void {\n      gen.forIn(\"key\", data, (key: Name) => {\n        if (!props.length && !patProps.length) additionalPropertyCode(key)\n        else gen.if(isAdditional(key), () => additionalPropertyCode(key))\n      })\n    }\n\n    function isAdditional(key: Name): Code {\n      let definedProp: Code\n      if (props.length > 8) {\n        // TODO maybe an option instead of hard-coded 8?\n        const propsSchema = schemaRefOrVal(it, parentSchema.properties, \"properties\")\n        definedProp = isOwnProperty(gen, propsSchema as Code, key)\n      } else if (props.length) {\n        definedProp = or(...props.map((p) => _`${key} === ${p}`))\n      } else {\n        definedProp = nil\n      }\n      if (patProps.length) {\n        definedProp = or(definedProp, ...patProps.map((p) => _`${usePattern(cxt, p)}.test(${key})`))\n      }\n      return not(definedProp)\n    }\n\n    function deleteAdditional(key: Name): void {\n      gen.code(_`delete ${data}[${key}]`)\n    }\n\n    function additionalPropertyCode(key: Name): void {\n      if (opts.removeAdditional === \"all\" || (opts.removeAdditional && schema === false)) {\n        deleteAdditional(key)\n        return\n      }\n\n      if (schema === false) {\n        cxt.setParams({additionalProperty: key})\n        cxt.error()\n        if (!allErrors) gen.break()\n        return\n      }\n\n      if (typeof schema == \"object\" && !alwaysValidSchema(it, schema)) {\n        const valid = gen.name(\"valid\")\n        if (opts.removeAdditional === \"failing\") {\n          applyAdditionalSchema(key, valid, false)\n          gen.if(not(valid), () => {\n            cxt.reset()\n            deleteAdditional(key)\n          })\n        } else {\n          applyAdditionalSchema(key, valid)\n          if (!allErrors) gen.if(not(valid), () => gen.break())\n        }\n      }\n    }\n\n    function applyAdditionalSchema(key: Name, valid: Name, errors?: false): void {\n      const subschema: SubschemaArgs = {\n        keyword: \"additionalProperties\",\n        dataProp: key,\n        dataPropType: Type.Str,\n      }\n      if (errors === false) {\n        Object.assign(subschema, {\n          compositeRule: true,\n          createErrors: false,\n          allErrors: false,\n        })\n      }\n      cxt.subschema(subschema, valid)\n    }\n  },\n}\n\nexport default def\n(/dist/vocabularies/validation/index.d.ts\u0003\u0003import type { ErrorObject, Vocabulary } from \"../../types\";\nimport { LimitNumberError } from \"./limitNumber\";\nimport { MultipleOfError } from \"./multipleOf\";\nimport { PatternError } from \"./pattern\";\nimport { RequiredError } from \"./required\";\nimport { UniqueItemsError } from \"./uniqueItems\";\nimport { ConstError } from \"./const\";\nimport { EnumError } from \"./enum\";\ndeclare const validation: Vocabulary;\nexport default validation;\ntype LimitError = ErrorObject<\"maxItems\" | \"minItems\" | \"minProperties\" | \"maxProperties\" | \"minLength\" | \"maxLength\", {\n    limit: number;\n}, number | {\n    $data: string;\n}>;\nexport type ValidationKeywordError = LimitError | LimitNumberError | MultipleOfError | PatternError | RequiredError | UniqueItemsError | ConstError | EnumError;\n/dist/vocabularies/draft7.js\u0002-\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst core_1 = require(\"./core\");\nconst validation_1 = require(\"./validation\");\nconst applicator_1 = require(\"./applicator\");\nconst format_1 = require(\"./format\");\nconst metadata_1 = require(\"./metadata\");\nconst draft7Vocabularies = [\n    core_1.default,\n    validation_1.default,\n    (0, applicator_1.default)(),\n    format_1.default,\n    metadata_1.metadataVocabulary,\n    metadata_1.contentVocabulary,\n];\nexports.default = draft7Vocabularies;\n//# sourceMappingURL=draft7.js.map)/dist/vocabularies/discriminator/index.js\u00123\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst types_1 = require(\"../discriminator/types\");\nconst compile_1 = require(\"../../compile\");\nconst util_1 = require(\"../../compile/util\");\nconst error = {\n    message: ({ params: { discrError, tagName } }) => discrError === types_1.DiscrError.Tag\n        ? `tag \"${tagName}\" must be string`\n        : `value of tag \"${tagName}\" must be in oneOf`,\n    params: ({ params: { discrError, tag, tagName } }) => (0, codegen_1._) `{error: ${discrError}, tag: ${tagName}, tagValue: ${tag}}`,\n};\nconst def = {\n    keyword: \"discriminator\",\n    type: \"object\",\n    schemaType: \"object\",\n    error,\n    code(cxt) {\n        const { gen, data, schema, parentSchema, it } = cxt;\n        const { oneOf } = parentSchema;\n        if (!it.opts.discriminator) {\n            throw new Error(\"discriminator: requires discriminator option\");\n        }\n        const tagName = schema.propertyName;\n        if (typeof tagName != \"string\")\n            throw new Error(\"discriminator: requires propertyName\");\n        if (schema.mapping)\n            throw new Error(\"discriminator: mapping is not supported\");\n        if (!oneOf)\n            throw new Error(\"discriminator: requires oneOf keyword\");\n        const valid = gen.let(\"valid\", false);\n        const tag = gen.const(\"tag\", (0, codegen_1._) `${data}${(0, codegen_1.getProperty)(tagName)}`);\n        gen.if((0, codegen_1._) `typeof ${tag} == \"string\"`, () => validateMapping(), () => cxt.error(false, { discrError: types_1.DiscrError.Tag, tag, tagName }));\n        cxt.ok(valid);\n        function validateMapping() {\n            const mapping = getMapping();\n            gen.if(false);\n            for (const tagValue in mapping) {\n                gen.elseIf((0, codegen_1._) `${tag} === ${tagValue}`);\n                gen.assign(valid, applyTagSchema(mapping[tagValue]));\n            }\n            gen.else();\n            cxt.error(false, { discrError: types_1.DiscrError.Mapping, tag, tagName });\n            gen.endIf();\n        }\n        function applyTagSchema(schemaProp) {\n            const _valid = gen.name(\"valid\");\n            const schCxt = cxt.subschema({ keyword: \"oneOf\", schemaProp }, _valid);\n            cxt.mergeEvaluated(schCxt, codegen_1.Name);\n            return _valid;\n        }\n        function getMapping() {\n            var _a;\n            const oneOfMapping = {};\n            const topRequired = hasRequired(parentSchema);\n            let tagRequired = true;\n            for (let i = 0; i < oneOf.length; i++) {\n                let sch = oneOf[i];\n                if ((sch === null || sch === void 0 ? void 0 : sch.$ref) && !(0, util_1.schemaHasRulesButRef)(sch, it.self.RULES)) {\n                    sch = compile_1.resolveRef.call(it.self, it.schemaEnv.root, it.baseId, sch === null || sch === void 0 ? void 0 : sch.$ref);\n                    if (sch instanceof compile_1.SchemaEnv)\n                        sch = sch.schema;\n                }\n                const propSch = (_a = sch === null || sch === void 0 ? void 0 : sch.properties) === null || _a === void 0 ? void 0 : _a[tagName];\n                if (typeof propSch != \"object\") {\n                    throw new Error(`discriminator: oneOf subschemas (or referenced schemas) must have \"properties/${tagName}\"`);\n                }\n                tagRequired = tagRequired && (topRequired || hasRequired(sch));\n                addMappings(propSch, i);\n            }\n            if (!tagRequired)\n                throw new Error(`discriminator: \"${tagName}\" must be required`);\n            return oneOfMapping;\n            function hasRequired({ required }) {\n                return Array.isArray(required) && required.includes(tagName);\n            }\n            function addMappings(sch, i) {\n                if (sch.const) {\n                    addMapping(sch.const, i);\n                }\n                else if (sch.enum) {\n                    for (const tagValue of sch.enum) {\n                        addMapping(tagValue, i);\n                    }\n                }\n                else {\n                    throw new Error(`discriminator: \"properties/${tagName}\" must have \"const\" or \"enum\"`);\n                }\n            }\n            function addMapping(tagValue, i) {\n                if (typeof tagValue != \"string\" || tagValue in oneOfMapping) {\n                    throw new Error(`discriminator: \"${tagName}\" values must be unique strings`);\n                }\n                oneOfMapping[tagValue] = i;\n            }\n        }\n    },\n};\nexports.default = def;\n//# sourceMappingURL=index.js.map1/dist/vocabularies/applicator/dependencies.js.map\f({\"version\":3,\"file\":\"dependencies.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../lib/vocabularies/applicator/dependencies.ts\"],\"names\":[],\"mappings\":\"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\"}#/lib/refs/json-schema-draft-06.json\ry{\n  \"$schema\": \"http://json-schema.org/draft-06/schema#\",\n  \"$id\": \"http://json-schema.org/draft-06/schema#\",\n  \"title\": \"Core schema meta-schema\",\n  \"definitions\": {\n    \"schemaArray\": {\n      \"type\": \"array\",\n      \"minItems\": 1,\n      \"items\": {\"$ref\": \"#\"}\n    },\n    \"nonNegativeInteger\": {\n      \"type\": \"integer\",\n      \"minimum\": 0\n    },\n    \"nonNegativeIntegerDefault0\": {\n      \"allOf\": [{\"$ref\": \"#/definitions/nonNegativeInteger\"}, {\"default\": 0}]\n    },\n    \"simpleTypes\": {\n      \"enum\": [\"array\", \"boolean\", \"integer\", \"null\", \"number\", \"object\", \"string\"]\n    },\n    \"stringArray\": {\n      \"type\": \"array\",\n      \"items\": {\"type\": \"string\"},\n      \"uniqueItems\": true,\n      \"default\": []\n    }\n  },\n  \"type\": [\"object\", \"boolean\"],\n  \"properties\": {\n    \"$id\": {\n      \"type\": \"string\",\n      \"format\": \"uri-reference\"\n    },\n    \"$schema\": {\n      \"type\": \"string\",\n      \"format\": \"uri\"\n    },\n    \"$ref\": {\n      \"type\": \"string\",\n      \"format\": \"uri-reference\"\n    },\n    \"title\": {\n      \"type\": \"string\"\n    },\n    \"description\": {\n      \"type\": \"string\"\n    },\n    \"default\": {},\n    \"examples\": {\n      \"type\": \"array\",\n      \"items\": {}\n    },\n    \"multipleOf\": {\n      \"type\": \"number\",\n      \"exclusiveMinimum\": 0\n    },\n    \"maximum\": {\n      \"type\": \"number\"\n    },\n    \"exclusiveMaximum\": {\n      \"type\": \"number\"\n    },\n    \"minimum\": {\n      \"type\": \"number\"\n    },\n    \"exclusiveMinimum\": {\n      \"type\": \"number\"\n    },\n    \"maxLength\": {\"$ref\": \"#/definitions/nonNegativeInteger\"},\n    \"minLength\": {\"$ref\": \"#/definitions/nonNegativeIntegerDefault0\"},\n    \"pattern\": {\n      \"type\": \"string\",\n      \"format\": \"regex\"\n    },\n    \"additionalItems\": {\"$ref\": \"#\"},\n    \"items\": {\n      \"anyOf\": [{\"$ref\": \"#\"}, {\"$ref\": \"#/definitions/schemaArray\"}],\n      \"default\": {}\n    },\n    \"maxItems\": {\"$ref\": \"#/definitions/nonNegativeInteger\"},\n    \"minItems\": {\"$ref\": \"#/definitions/nonNegativeIntegerDefault0\"},\n    \"uniqueItems\": {\n      \"type\": \"boolean\",\n      \"default\": false\n    },\n    \"contains\": {\"$ref\": \"#\"},\n    \"maxProperties\": {\"$ref\": \"#/definitions/nonNegativeInteger\"},\n    \"minProperties\": {\"$ref\": \"#/definitions/nonNegativeIntegerDefault0\"},\n    \"required\": {\"$ref\": \"#/definitions/stringArray\"},\n    \"additionalProperties\": {\"$ref\": \"#\"},\n    \"definitions\": {\n      \"type\": \"object\",\n      \"additionalProperties\": {\"$ref\": \"#\"},\n      \"default\": {}\n    },\n    \"properties\": {\n      \"type\": \"object\",\n      \"additionalProperties\": {\"$ref\": \"#\"},\n      \"default\": {}\n    },\n    \"patternProperties\": {\n      \"type\": \"object\",\n      \"additionalProperties\": {\"$ref\": \"#\"},\n      \"default\": {}\n    },\n    \"dependencies\": {\n      \"type\": \"object\",\n      \"additionalProperties\": {\n        \"anyOf\": [{\"$ref\": \"#\"}, {\"$ref\": \"#/definitions/stringArray\"}]\n      }\n    },\n    \"propertyNames\": {\"$ref\": \"#\"},\n    \"const\": {},\n    \"enum\": {\n      \"type\": \"array\",\n      \"minItems\": 1,\n      \"uniqueItems\": true\n    },\n    \"type\": {\n      \"anyOf\": [\n        {\"$ref\": \"#/definitions/simpleTypes\"},\n        {\n          \"type\": \"array\",\n          \"items\": {\"$ref\": \"#/definitions/simpleTypes\"},\n          \"minItems\": 1,\n          \"uniqueItems\": true\n        }\n      ]\n    },\n    \"format\": {\"type\": \"string\"},\n    \"allOf\": {\"$ref\": \"#/definitions/schemaArray\"},\n    \"anyOf\": {\"$ref\": \"#/definitions/schemaArray\"},\n    \"oneOf\": {\"$ref\": \"#/definitions/schemaArray\"},\n    \"not\": {\"$ref\": \"#\"}\n  },\n  \"default\": {}\n}\n/dist/vocabularies/next.js.map{\"version\":3,\"file\":\"next.js\",\"sourceRoot\":\"\",\"sources\":[\"../../lib/vocabularies/next.ts\"],\"names\":[],\"mappings\":\";;AACA,sEAA8D;AAC9D,oEAA4D;AAC5D,8DAAsD;AAEtD,MAAM,IAAI,GAAe,CAAC,2BAAiB,EAAE,0BAAgB,EAAE,uBAAa,CAAC,CAAA;AAE7E,kBAAe,IAAI,CAAA\"}/dist/runtime/equal.js\u0001\u001e\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// https://github.com/ajv-validator/ajv/issues/889\nconst equal = require(\"fast-deep-equal\");\nequal.code = 'require(\"ajv/dist/runtime/equal\").default';\nexports.default = equal;\n//# sourceMappingURL=equal.js.map/dist/runtime/ucs2length.js\u0003(\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// https://mathiasbynens.be/notes/javascript-encoding\n// https://github.com/bestiejs/punycode.js - punycode.ucs2.decode\nfunction ucs2length(str) {\n    const len = str.length;\n    let length = 0;\n    let pos = 0;\n    let value;\n    while (pos < len) {\n        length++;\n        value = str.charCodeAt(pos++);\n        if (value >= 0xd800 && value <= 0xdbff && pos < len) {\n            // high surrogate, and there is a next character\n            value = str.charCodeAt(pos);\n            if ((value & 0xfc00) === 0xdc00)\n                pos++; // low surrogate\n        }\n    }\n    return length;\n}\nexports.default = ucs2length;\nucs2length.code = 'require(\"ajv/dist/runtime/ucs2length\").default';\n//# sourceMappingURL=ucs2length.js.map//dist/vocabularies/dynamic/recursiveAnchor.d.tsximport type { CodeKeywordDefinition } from \"../../types\";\ndeclare const def: CodeKeywordDefinition;\nexport default def;\n//lib/refs/json-schema-2019-09/meta/content.json\u0001{\n  \"$schema\": \"https://json-schema.org/draft/2019-09/schema\",\n  \"$id\": \"https://json-schema.org/draft/2019-09/meta/content\",\n  \"$vocabulary\": {\n    \"https://json-schema.org/draft/2019-09/vocab/content\": true\n  },\n  \"$recursiveAnchor\": true,\n\n  \"title\": \"Content vocabulary meta-schema\",\n\n  \"type\": [\"object\", \"boolean\"],\n  \"properties\": {\n    \"contentMediaType\": {\"type\": \"string\"},\n    \"contentEncoding\": {\"type\": \"string\"},\n    \"contentSchema\": {\"$recursiveRef\": \"#\"}\n  }\n}\n'/dist/vocabularies/jtd/discriminator.js\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst metadata_1 = require(\"./metadata\");\nconst nullable_1 = require(\"./nullable\");\nconst error_1 = require(\"./error\");\nconst types_1 = require(\"../discriminator/types\");\nconst error = {\n    message: (cxt) => {\n        const { schema, params } = cxt;\n        return params.discrError\n            ? params.discrError === types_1.DiscrError.Tag\n                ? `tag \"${schema}\" must be string`\n                : `value of tag \"${schema}\" must be in mapping`\n            : (0, error_1.typeErrorMessage)(cxt, \"object\");\n    },\n    params: (cxt) => {\n        const { schema, params } = cxt;\n        return params.discrError\n            ? (0, codegen_1._) `{error: ${params.discrError}, tag: ${schema}, tagValue: ${params.tag}}`\n            : (0, error_1.typeErrorParams)(cxt, \"object\");\n    },\n};\nconst def = {\n    keyword: \"discriminator\",\n    schemaType: \"string\",\n    implements: [\"mapping\"],\n    error,\n    code(cxt) {\n        (0, metadata_1.checkMetadata)(cxt);\n        const { gen, data, schema, parentSchema } = cxt;\n        const [valid, cond] = (0, nullable_1.checkNullableObject)(cxt, data);\n        gen.if(cond);\n        validateDiscriminator();\n        gen.elseIf((0, codegen_1.not)(valid));\n        cxt.error();\n        gen.endIf();\n        cxt.ok(valid);\n        function validateDiscriminator() {\n            const tag = gen.const(\"tag\", (0, codegen_1._) `${data}${(0, codegen_1.getProperty)(schema)}`);\n            gen.if((0, codegen_1._) `${tag} === undefined`);\n            cxt.error(false, { discrError: types_1.DiscrError.Tag, tag });\n            gen.elseIf((0, codegen_1._) `typeof ${tag} == \"string\"`);\n            validateMapping(tag);\n            gen.else();\n            cxt.error(false, { discrError: types_1.DiscrError.Tag, tag }, { instancePath: schema });\n            gen.endIf();\n        }\n        function validateMapping(tag) {\n            gen.if(false);\n            for (const tagValue in parentSchema.mapping) {\n                gen.elseIf((0, codegen_1._) `${tag} === ${tagValue}`);\n                gen.assign(valid, applyTagSchema(tagValue));\n            }\n            gen.else();\n            cxt.error(false, { discrError: types_1.DiscrError.Mapping, tag }, { instancePath: schema, schemaPath: \"mapping\", parentSchema: true });\n            gen.endIf();\n        }\n        function applyTagSchema(schemaProp) {\n            const _valid = gen.name(\"valid\");\n            cxt.subschema({\n                keyword: \"mapping\",\n                schemaProp,\n                jtdDiscriminator: schema,\n            }, _valid);\n            return _valid;\n        }\n    },\n};\nexports.default = def;\n//# sourceMappingURL=discriminator.js.map\"/dist/vocabularies/jtd/nullable.js\u0003[\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.checkNullableObject = exports.checkNullable = void 0;\nconst codegen_1 = require(\"../../compile/codegen\");\nfunction checkNullable({ gen, data, parentSchema }, cond = codegen_1.nil) {\n    const valid = gen.name(\"valid\");\n    if (parentSchema.nullable) {\n        gen.let(valid, (0, codegen_1._) `${data} === null`);\n        cond = (0, codegen_1.not)(valid);\n    }\n    else {\n        gen.let(valid, false);\n    }\n    return [valid, cond];\n}\nexports.checkNullable = checkNullable;\nfunction checkNullableObject(cxt, cond) {\n    const [valid, cond_] = checkNullable(cxt, cond);\n    return [valid, (0, codegen_1._) `${cond_} && typeof ${cxt.data} == \"object\" && !Array.isArray(${cxt.data})`];\n}\nexports.checkNullableObject = checkNullableObject;\n//# sourceMappingURL=nullable.js.map./dist/vocabularies/validation/limitContains.js\u0001\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst util_1 = require(\"../../compile/util\");\nconst def = {\n    keyword: [\"maxContains\", \"minContains\"],\n    type: \"array\",\n    schemaType: \"number\",\n    code({ keyword, parentSchema, it }) {\n        if (parentSchema.contains === undefined) {\n            (0, util_1.checkStrictMode)(it, `\"${keyword}\" without \"contains\" is ignored`);\n        }\n    },\n};\nexports.default = def;\n//# sourceMappingURL=limitContains.js.map/dist/ajv.js\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MissingRefError = exports.ValidationError = exports.CodeGen = exports.Name = exports.nil = exports.stringify = exports.str = exports._ = exports.KeywordCxt = void 0;\nconst core_1 = require(\"./core\");\nconst draft7_1 = require(\"./vocabularies/draft7\");\nconst discriminator_1 = require(\"./vocabularies/discriminator\");\nconst draft7MetaSchema = require(\"./refs/json-schema-draft-07.json\");\nconst META_SUPPORT_DATA = [\"/properties\"];\nconst META_SCHEMA_ID = \"http://json-schema.org/draft-07/schema\";\nclass Ajv extends core_1.default {\n    _addVocabularies() {\n        super._addVocabularies();\n        draft7_1.default.forEach((v) => this.addVocabulary(v));\n        if (this.opts.discriminator)\n            this.addKeyword(discriminator_1.default);\n    }\n    _addDefaultMetaSchema() {\n        super._addDefaultMetaSchema();\n        if (!this.opts.meta)\n            return;\n        const metaSchema = this.opts.$data\n            ? this.$dataMetaSchema(draft7MetaSchema, META_SUPPORT_DATA)\n            : draft7MetaSchema;\n        this.addMetaSchema(metaSchema, META_SCHEMA_ID, false);\n        this.refs[\"http://json-schema.org/schema\"] = META_SCHEMA_ID;\n    }\n    defaultMeta() {\n        return (this.opts.defaultMeta =\n            super.defaultMeta() || (this.getSchema(META_SCHEMA_ID) ? META_SCHEMA_ID : undefined));\n    }\n}\nmodule.exports = exports = Ajv;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = Ajv;\nvar validate_1 = require(\"./compile/validate\");\nObject.defineProperty(exports, \"KeywordCxt\", { enumerable: true, get: function () { return validate_1.KeywordCxt; } });\nvar codegen_1 = require(\"./compile/codegen\");\nObject.defineProperty(exports, \"_\", { enumerable: true, get: function () { return codegen_1._; } });\nObject.defineProperty(exports, \"str\", { enumerable: true, get: function () { return codegen_1.str; } });\nObject.defineProperty(exports, \"stringify\", { enumerable: true, get: function () { return codegen_1.stringify; } });\nObject.defineProperty(exports, \"nil\", { enumerable: true, get: function () { return codegen_1.nil; } });\nObject.defineProperty(exports, \"Name\", { enumerable: true, get: function () { return codegen_1.Name; } });\nObject.defineProperty(exports, \"CodeGen\", { enumerable: true, get: function () { return codegen_1.CodeGen; } });\nvar validation_error_1 = require(\"./runtime/validation_error\");\nObject.defineProperty(exports, \"ValidationError\", { enumerable: true, get: function () { return validation_error_1.default; } });\nvar ref_error_1 = require(\"./compile/ref_error\");\nObject.defineProperty(exports, \"MissingRefError\", { enumerable: true, get: function () { return ref_error_1.default; } });\n//# sourceMappingURL=ajv.js.map/dist/compile/names.d.ts\u0001import { Name } from \"./codegen\";\ndeclare const names: {\n    data: Name;\n    valCxt: Name;\n    instancePath: Name;\n    parentData: Name;\n    parentDataProperty: Name;\n    rootData: Name;\n    dynamicAnchors: Name;\n    vErrors: Name;\n    errors: Name;\n    this: Name;\n    self: Name;\n    scope: Name;\n    json: Name;\n    jsonPos: Name;\n    jsonLen: Name;\n    jsonPart: Name;\n};\nexport default names;\n/lib/types/index.ts\u001c!import * as URI from \"uri-js\"\nimport type {CodeGen, Code, Name, ScopeValueSets, ValueScopeName} from \"../compile/codegen\"\nimport type {SchemaEnv, SchemaCxt, SchemaObjCxt} from \"../compile\"\nimport type {JSONType} from \"../compile/rules\"\nimport type {KeywordCxt} from \"../compile/validate\"\nimport type Ajv from \"../core\"\n\ninterface _SchemaObject {\n  id?: string\n  $id?: string\n  $schema?: string\n  [x: string]: any // TODO\n}\n\nexport interface SchemaObject extends _SchemaObject {\n  id?: string\n  $id?: string\n  $schema?: string\n  $async?: false\n  [x: string]: any // TODO\n}\n\nexport interface AsyncSchema extends _SchemaObject {\n  $async: true\n}\n\nexport type AnySchemaObject = SchemaObject | AsyncSchema\n\nexport type Schema = SchemaObject | boolean\n\nexport type AnySchema = Schema | AsyncSchema\n\nexport type SchemaMap = {[Key in string]?: AnySchema}\n\nexport interface SourceCode {\n  validateName: ValueScopeName\n  validateCode: string\n  scopeValues: ScopeValueSets\n  evaluated?: Code\n}\n\nexport interface DataValidationCxt<T extends string | number = string | number> {\n  instancePath: string\n  parentData: {[K in T]: any} // object or array\n  parentDataProperty: T // string or number\n  rootData: Record<string, any> | any[]\n  dynamicAnchors: {[Ref in string]?: ValidateFunction}\n}\n\nexport interface ValidateFunction<T = unknown> {\n  (this: Ajv | any, data: any, dataCxt?: DataValidationCxt): data is T\n  errors?: null | ErrorObject[]\n  evaluated?: Evaluated\n  schema: AnySchema\n  schemaEnv: SchemaEnv\n  source?: SourceCode\n}\n\nexport interface JTDParser<T = unknown> {\n  (json: string): T | undefined\n  message?: string\n  position?: number\n}\n\nexport type EvaluatedProperties = {[K in string]?: true} | true\n\nexport type EvaluatedItems = number | true\n\nexport interface Evaluated {\n  // determined at compile time if staticProps/Items is true\n  props?: EvaluatedProperties\n  items?: EvaluatedItems\n  // whether props/items determined at compile time\n  dynamicProps: boolean\n  dynamicItems: boolean\n}\n\nexport interface AsyncValidateFunction<T = unknown> extends ValidateFunction<T> {\n  (...args: Parameters<ValidateFunction<T>>): Promise<T>\n  $async: true\n}\n\nexport type AnyValidateFunction<T = any> = ValidateFunction<T> | AsyncValidateFunction<T>\n\nexport interface ErrorObject<K extends string = string, P = Record<string, any>, S = unknown> {\n  keyword: K\n  instancePath: string\n  schemaPath: string\n  params: P\n  // Added to validation errors of \"propertyNames\" keyword schema\n  propertyName?: string\n  // Excluded if option `messages` set to false.\n  message?: string\n  // These are added with the `verbose` option.\n  schema?: S\n  parentSchema?: AnySchemaObject\n  data?: unknown\n}\n\nexport type ErrorNoParams<K extends string, S = unknown> = ErrorObject<K, Record<string, never>, S>\n\ninterface _KeywordDef {\n  keyword: string | string[]\n  type?: JSONType | JSONType[] // data types that keyword applies to\n  schemaType?: JSONType | JSONType[] // allowed type(s) of keyword value in the schema\n  allowUndefined?: boolean // used for keywords that can be invoked by other keywords, not being present in the schema\n  $data?: boolean // keyword supports [$data reference](../../docs/guide/combining-schemas.md#data-reference)\n  implements?: string[] // other schema keywords that this keyword implements\n  before?: string // keyword should be executed before this keyword (should be applicable to the same type)\n  post?: boolean // keyword should be executed after other keywords without post flag\n  metaSchema?: AnySchemaObject // meta-schema for keyword schema value - it is better to use schemaType where applicable\n  validateSchema?: AnyValidateFunction // compiled keyword metaSchema - should not be passed\n  dependencies?: string[] // keywords that must be present in the same schema\n  error?: KeywordErrorDefinition\n  $dataError?: KeywordErrorDefinition\n}\n\nexport interface CodeKeywordDefinition extends _KeywordDef {\n  code: (cxt: KeywordCxt, ruleType?: string) => void\n  trackErrors?: boolean\n}\n\nexport type MacroKeywordFunc = (\n  schema: any,\n  parentSchema: AnySchemaObject,\n  it: SchemaCxt\n) => AnySchema\n\nexport type CompileKeywordFunc = (\n  schema: any,\n  parentSchema: AnySchemaObject,\n  it: SchemaObjCxt\n) => DataValidateFunction\n\nexport interface DataValidateFunction {\n  (...args: Parameters<ValidateFunction>): boolean | Promise<any>\n  errors?: Partial<ErrorObject>[]\n}\n\nexport interface SchemaValidateFunction {\n  (schema: any, data: any, parentSchema?: AnySchemaObject, dataCxt?: DataValidationCxt):\n    | boolean\n    | Promise<any>\n  errors?: Partial<ErrorObject>[]\n}\n\nexport interface FuncKeywordDefinition extends _KeywordDef {\n  validate?: SchemaValidateFunction | DataValidateFunction\n  compile?: CompileKeywordFunc\n  // schema: false makes validate not to expect schema (DataValidateFunction)\n  schema?: boolean // requires \"validate\"\n  modifying?: boolean\n  async?: boolean\n  valid?: boolean\n  errors?: boolean | \"full\"\n}\n\nexport interface MacroKeywordDefinition extends FuncKeywordDefinition {\n  macro: MacroKeywordFunc\n}\n\nexport type KeywordDefinition =\n  | CodeKeywordDefinition\n  | FuncKeywordDefinition\n  | MacroKeywordDefinition\n\nexport type AddedKeywordDefinition = KeywordDefinition & {\n  type: JSONType[]\n  schemaType: JSONType[]\n}\n\nexport interface KeywordErrorDefinition {\n  message: string | Code | ((cxt: KeywordErrorCxt) => string | Code)\n  params?: Code | ((cxt: KeywordErrorCxt) => Code)\n}\n\nexport type Vocabulary = (KeywordDefinition | string)[]\n\nexport interface KeywordErrorCxt {\n  gen: CodeGen\n  keyword: string\n  data: Name\n  $data?: string | false\n  schema: any // TODO\n  parentSchema?: AnySchemaObject\n  schemaCode: Code | number | boolean\n  schemaValue: Code | number | boolean\n  schemaType?: JSONType[]\n  errsCount?: Name\n  params: KeywordCxtParams\n  it: SchemaCxt\n}\n\nexport type KeywordCxtParams = {[P in string]?: Code | string | number}\n\nexport type FormatValidator<T extends string | number> = (data: T) => boolean\n\nexport type FormatCompare<T extends string | number> = (data1: T, data2: T) => number | undefined\n\nexport type AsyncFormatValidator<T extends string | number> = (data: T) => Promise<boolean>\n\nexport interface FormatDefinition<T extends string | number> {\n  type?: T extends string ? \"string\" | undefined : \"number\"\n  validate: FormatValidator<T> | (T extends string ? string | RegExp : never)\n  async?: false | undefined\n  compare?: FormatCompare<T>\n}\n\nexport interface AsyncFormatDefinition<T extends string | number> {\n  type?: T extends string ? \"string\" | undefined : \"number\"\n  validate: AsyncFormatValidator<T>\n  async: true\n  compare?: FormatCompare<T>\n}\n\nexport type AddedFormat =\n  | true\n  | RegExp\n  | FormatValidator<string>\n  | FormatDefinition<string>\n  | FormatDefinition<number>\n  | AsyncFormatDefinition<string>\n  | AsyncFormatDefinition<number>\n\nexport type Format = AddedFormat | string\n\nexport interface RegExpEngine {\n  (pattern: string, u: string): RegExpLike\n  code: string\n}\n\nexport interface RegExpLike {\n  test: (s: string) => boolean\n}\n\nexport interface UriResolver {\n  parse(uri: string): URI.URIComponents\n  resolve(base: string, path: string): string\n  serialize(component: URI.URIComponents): string\n}\n/dist/types/index.d.ts\u0018import * as URI from \"uri-js\";\nimport type { CodeGen, Code, Name, ScopeValueSets, ValueScopeName } from \"../compile/codegen\";\nimport type { SchemaEnv, SchemaCxt, SchemaObjCxt } from \"../compile\";\nimport type { JSONType } from \"../compile/rules\";\nimport type { KeywordCxt } from \"../compile/validate\";\nimport type Ajv from \"../core\";\ninterface _SchemaObject {\n    id?: string;\n    $id?: string;\n    $schema?: string;\n    [x: string]: any;\n}\nexport interface SchemaObject extends _SchemaObject {\n    id?: string;\n    $id?: string;\n    $schema?: string;\n    $async?: false;\n    [x: string]: any;\n}\nexport interface AsyncSchema extends _SchemaObject {\n    $async: true;\n}\nexport type AnySchemaObject = SchemaObject | AsyncSchema;\nexport type Schema = SchemaObject | boolean;\nexport type AnySchema = Schema | AsyncSchema;\nexport type SchemaMap = {\n    [Key in string]?: AnySchema;\n};\nexport interface SourceCode {\n    validateName: ValueScopeName;\n    validateCode: string;\n    scopeValues: ScopeValueSets;\n    evaluated?: Code;\n}\nexport interface DataValidationCxt<T extends string | number = string | number> {\n    instancePath: string;\n    parentData: {\n        [K in T]: any;\n    };\n    parentDataProperty: T;\n    rootData: Record<string, any> | any[];\n    dynamicAnchors: {\n        [Ref in string]?: ValidateFunction;\n    };\n}\nexport interface ValidateFunction<T = unknown> {\n    (this: Ajv | any, data: any, dataCxt?: DataValidationCxt): data is T;\n    errors?: null | ErrorObject[];\n    evaluated?: Evaluated;\n    schema: AnySchema;\n    schemaEnv: SchemaEnv;\n    source?: SourceCode;\n}\nexport interface JTDParser<T = unknown> {\n    (json: string): T | undefined;\n    message?: string;\n    position?: number;\n}\nexport type EvaluatedProperties = {\n    [K in string]?: true;\n} | true;\nexport type EvaluatedItems = number | true;\nexport interface Evaluated {\n    props?: EvaluatedProperties;\n    items?: EvaluatedItems;\n    dynamicProps: boolean;\n    dynamicItems: boolean;\n}\nexport interface AsyncValidateFunction<T = unknown> extends ValidateFunction<T> {\n    (...args: Parameters<ValidateFunction<T>>): Promise<T>;\n    $async: true;\n}\nexport type AnyValidateFunction<T = any> = ValidateFunction<T> | AsyncValidateFunction<T>;\nexport interface ErrorObject<K extends string = string, P = Record<string, any>, S = unknown> {\n    keyword: K;\n    instancePath: string;\n    schemaPath: string;\n    params: P;\n    propertyName?: string;\n    message?: string;\n    schema?: S;\n    parentSchema?: AnySchemaObject;\n    data?: unknown;\n}\nexport type ErrorNoParams<K extends string, S = unknown> = ErrorObject<K, Record<string, never>, S>;\ninterface _KeywordDef {\n    keyword: string | string[];\n    type?: JSONType | JSONType[];\n    schemaType?: JSONType | JSONType[];\n    allowUndefined?: boolean;\n    $data?: boolean;\n    implements?: string[];\n    before?: string;\n    post?: boolean;\n    metaSchema?: AnySchemaObject;\n    validateSchema?: AnyValidateFunction;\n    dependencies?: string[];\n    error?: KeywordErrorDefinition;\n    $dataError?: KeywordErrorDefinition;\n}\nexport interface CodeKeywordDefinition extends _KeywordDef {\n    code: (cxt: KeywordCxt, ruleType?: string) => void;\n    trackErrors?: boolean;\n}\nexport type MacroKeywordFunc = (schema: any, parentSchema: AnySchemaObject, it: SchemaCxt) => AnySchema;\nexport type CompileKeywordFunc = (schema: any, parentSchema: AnySchemaObject, it: SchemaObjCxt) => DataValidateFunction;\nexport interface DataValidateFunction {\n    (...args: Parameters<ValidateFunction>): boolean | Promise<any>;\n    errors?: Partial<ErrorObject>[];\n}\nexport interface SchemaValidateFunction {\n    (schema: any, data: any, parentSchema?: AnySchemaObject, dataCxt?: DataValidationCxt): boolean | Promise<any>;\n    errors?: Partial<ErrorObject>[];\n}\nexport interface FuncKeywordDefinition extends _KeywordDef {\n    validate?: SchemaValidateFunction | DataValidateFunction;\n    compile?: CompileKeywordFunc;\n    schema?: boolean;\n    modifying?: boolean;\n    async?: boolean;\n    valid?: boolean;\n    errors?: boolean | \"full\";\n}\nexport interface MacroKeywordDefinition extends FuncKeywordDefinition {\n    macro: MacroKeywordFunc;\n}\nexport type KeywordDefinition = CodeKeywordDefinition | FuncKeywordDefinition | MacroKeywordDefinition;\nexport type AddedKeywordDefinition = KeywordDefinition & {\n    type: JSONType[];\n    schemaType: JSONType[];\n};\nexport interface KeywordErrorDefinition {\n    message: string | Code | ((cxt: KeywordErrorCxt) => string | Code);\n    params?: Code | ((cxt: KeywordErrorCxt) => Code);\n}\nexport type Vocabulary = (KeywordDefinition | string)[];\nexport interface KeywordErrorCxt {\n    gen: CodeGen;\n    keyword: string;\n    data: Name;\n    $data?: string | false;\n    schema: any;\n    parentSchema?: AnySchemaObject;\n    schemaCode: Code | number | boolean;\n    schemaValue: Code | number | boolean;\n    schemaType?: JSONType[];\n    errsCount?: Name;\n    params: KeywordCxtParams;\n    it: SchemaCxt;\n}\nexport type KeywordCxtParams = {\n    [P in string]?: Code | string | number;\n};\nexport type FormatValidator<T extends string | number> = (data: T) => boolean;\nexport type FormatCompare<T extends string | number> = (data1: T, data2: T) => number | undefined;\nexport type AsyncFormatValidator<T extends string | number> = (data: T) => Promise<boolean>;\nexport interface FormatDefinition<T extends string | number> {\n    type?: T extends string ? \"string\" | undefined : \"number\";\n    validate: FormatValidator<T> | (T extends string ? string | RegExp : never);\n    async?: false | undefined;\n    compare?: FormatCompare<T>;\n}\nexport interface AsyncFormatDefinition<T extends string | number> {\n    type?: T extends string ? \"string\" | undefined : \"number\";\n    validate: AsyncFormatValidator<T>;\n    async: true;\n    compare?: FormatCompare<T>;\n}\nexport type AddedFormat = true | RegExp | FormatValidator<string> | FormatDefinition<string> | FormatDefinition<number> | AsyncFormatDefinition<string> | AsyncFormatDefinition<number>;\nexport type Format = AddedFormat | string;\nexport interface RegExpEngine {\n    (pattern: string, u: string): RegExpLike;\n    code: string;\n}\nexport interface RegExpLike {\n    test: (s: string) => boolean;\n}\nexport interface UriResolver {\n    parse(uri: string): URI.URIComponents;\n    resolve(base: string, path: string): string;\n    serialize(component: URI.URIComponents): string;\n}\nexport {};\n/lib/types/jtd-schema.ts$i/** numeric strings */\ntype NumberType = \"float32\" | \"float64\" | \"int8\" | \"uint8\" | \"int16\" | \"uint16\" | \"int32\" | \"uint32\"\n\n/** string strings */\ntype StringType = \"string\" | \"timestamp\"\n\n/** Generic JTD Schema without inference of the represented type */\nexport type SomeJTDSchemaType = (\n  | // ref\n  {ref: string}\n  // primitives\n  | {type: NumberType | StringType | \"boolean\"}\n  // enum\n  | {enum: string[]}\n  // elements\n  | {elements: SomeJTDSchemaType}\n  // values\n  | {values: SomeJTDSchemaType}\n  // properties\n  | {\n      properties: Record<string, SomeJTDSchemaType>\n      optionalProperties?: Record<string, SomeJTDSchemaType>\n      additionalProperties?: boolean\n    }\n  | {\n      properties?: Record<string, SomeJTDSchemaType>\n      optionalProperties: Record<string, SomeJTDSchemaType>\n      additionalProperties?: boolean\n    }\n  // discriminator\n  | {discriminator: string; mapping: Record<string, SomeJTDSchemaType>}\n  // empty\n  // NOTE see the end of\n  // https://github.com/typescript-eslint/typescript-eslint/issues/2063#issuecomment-675156492\n  // eslint-disable-next-line @typescript-eslint/ban-types\n  | {}\n) & {\n  nullable?: boolean\n  metadata?: Record<string, unknown>\n  definitions?: Record<string, SomeJTDSchemaType>\n}\n\n/** required keys of an object, not undefined */\ntype RequiredKeys<T> = {\n  [K in keyof T]-?: undefined extends T[K] ? never : K\n}[keyof T]\n\n/** optional or undifined-able keys of an object */\ntype OptionalKeys<T> = {\n  [K in keyof T]-?: undefined extends T[K] ? K : never\n}[keyof T]\n\n/** type is true if T is a union type */\ntype IsUnion_<T, U extends T = T> = false extends (\n  T extends unknown ? ([U] extends [T] ? false : true) : never\n)\n  ? false\n  : true\ntype IsUnion<T> = IsUnion_<T>\n\n/** type is true if T is identically E */\ntype TypeEquality<T, E> = [T] extends [E] ? ([E] extends [T] ? true : false) : false\n\n/** type is true if T or null is identically E or null*/\ntype NullTypeEquality<T, E> = TypeEquality<T | null, E | null>\n\n/** gets only the string literals of a type or null if a type isn't a string literal */\ntype EnumString<T> = [T] extends [never]\n  ? null\n  : T extends string\n  ? string extends T\n    ? null\n    : T\n  : null\n\n/** true if type is a union of string literals */\ntype IsEnum<T> = null extends EnumString<T> ? false : true\n\n/** true only if all types are array types (not tuples) */\n// NOTE relies on the fact that tuples don't have an index at 0.5, but arrays\n// have an index at every number\ntype IsElements<T> = false extends IsUnion<T>\n  ? [T] extends [readonly unknown[]]\n    ? undefined extends T[0.5]\n      ? false\n      : true\n    : false\n  : false\n\n/** true if the the type is a values type */\ntype IsValues<T> = false extends IsUnion<T> ? TypeEquality<keyof T, string> : false\n\n/** true if type is a properties type and Union is false, or type is a discriminator type and Union is true */\ntype IsRecord<T, Union extends boolean> = Union extends IsUnion<T>\n  ? null extends EnumString<keyof T>\n    ? false\n    : true\n  : false\n\n/** true if type represents an empty record */\ntype IsEmptyRecord<T> = [T] extends [Record<string, never>]\n  ? [T] extends [never]\n    ? false\n    : true\n  : false\n\n/** actual schema */\nexport type JTDSchemaType<T, D extends Record<string, unknown> = Record<string, never>> = (\n  | // refs - where null wasn't specified, must match exactly\n  (null extends EnumString<keyof D>\n      ? never\n      :\n          | ({[K in keyof D]: [T] extends [D[K]] ? {ref: K} : never}[keyof D] & {nullable?: false})\n          // nulled refs - if ref is nullable and nullable is specified, then it can\n          // match either null or non-null definitions\n          | (null extends T\n              ? {\n                  [K in keyof D]: [Exclude<T, null>] extends [Exclude<D[K], null>]\n                    ? {ref: K}\n                    : never\n                }[keyof D] & {nullable: true}\n              : never))\n  // empty - empty schemas also treat nullable differently in that it's now fully ignored\n  | (unknown extends T ? {nullable?: boolean} : never)\n  // all other types // numbers - only accepts the type number\n  | ((true extends NullTypeEquality<T, number>\n      ? {type: NumberType}\n      : // booleans - accepts the type boolean\n      true extends NullTypeEquality<T, boolean>\n      ? {type: \"boolean\"}\n      : // strings - only accepts the type string\n      true extends NullTypeEquality<T, string>\n      ? {type: StringType}\n      : // strings - only accepts the type Date\n      true extends NullTypeEquality<T, Date>\n      ? {type: \"timestamp\"}\n      : // enums - only accepts union of string literals\n      // TODO we can't actually check that everything in the union was specified\n      true extends IsEnum<Exclude<T, null>>\n      ? {enum: EnumString<Exclude<T, null>>[]}\n      : // arrays - only accepts arrays, could be array of unions to be resolved later\n      true extends IsElements<Exclude<T, null>>\n      ? T extends readonly (infer E)[]\n        ? {\n            elements: JTDSchemaType<E, D>\n          }\n        : never\n      : // empty properties\n      true extends IsEmptyRecord<Exclude<T, null>>\n      ?\n          | {properties: Record<string, never>; optionalProperties?: Record<string, never>}\n          | {optionalProperties: Record<string, never>}\n      : // values\n      true extends IsValues<Exclude<T, null>>\n      ? T extends Record<string, infer V>\n        ? {\n            values: JTDSchemaType<V, D>\n          }\n        : never\n      : // properties\n      true extends IsRecord<Exclude<T, null>, false>\n      ? ([RequiredKeys<Exclude<T, null>>] extends [never]\n          ? {\n              properties?: Record<string, never>\n            }\n          : {\n              properties: {[K in RequiredKeys<T>]: JTDSchemaType<T[K], D>}\n            }) &\n          ([OptionalKeys<Exclude<T, null>>] extends [never]\n            ? {\n                optionalProperties?: Record<string, never>\n              }\n            : {\n                optionalProperties: {\n                  [K in OptionalKeys<T>]: JTDSchemaType<Exclude<T[K], undefined>, D>\n                }\n              }) & {\n            additionalProperties?: boolean\n          }\n      : // discriminator\n      true extends IsRecord<Exclude<T, null>, true>\n      ? {\n          [K in keyof Exclude<T, null>]-?: Exclude<T, null>[K] extends string\n            ? {\n                discriminator: K\n                mapping: {\n                  // TODO currently allows descriminator to be present in schema\n                  [M in Exclude<T, null>[K]]: JTDSchemaType<\n                    Omit<T extends Record<K, M> ? T : never, K>,\n                    D\n                  >\n                }\n              }\n            : never\n        }[keyof Exclude<T, null>]\n      : never) &\n      (null extends T\n        ? {\n            nullable: true\n          }\n        : {nullable?: false}))\n) & {\n  // extra properties\n  metadata?: Record<string, unknown>\n  // TODO these should only be allowed at the top level\n  definitions?: {[K in keyof D]: JTDSchemaType<D[K], D>}\n}\n\ntype JTDDataDef<S, D extends Record<string, unknown>> =\n  | // ref\n  (S extends {ref: string}\n      ? D extends {[K in S[\"ref\"]]: infer V}\n        ? JTDDataDef<V, D>\n        : never\n      : // type\n      S extends {type: NumberType}\n      ? number\n      : S extends {type: \"boolean\"}\n      ? boolean\n      : S extends {type: \"string\"}\n      ? string\n      : S extends {type: \"timestamp\"}\n      ? string | Date\n      : // enum\n      S extends {enum: readonly (infer E)[]}\n      ? string extends E\n        ? never\n        : [E] extends [string]\n        ? E\n        : never\n      : // elements\n      S extends {elements: infer E}\n      ? JTDDataDef<E, D>[]\n      : // properties\n      S extends {\n          properties: Record<string, unknown>\n          optionalProperties?: Record<string, unknown>\n          additionalProperties?: boolean\n        }\n      ? {-readonly [K in keyof S[\"properties\"]]-?: JTDDataDef<S[\"properties\"][K], D>} & {\n          -readonly [K in keyof S[\"optionalProperties\"]]+?: JTDDataDef<\n            S[\"optionalProperties\"][K],\n            D\n          >\n        } & ([S[\"additionalProperties\"]] extends [true] ? Record<string, unknown> : unknown)\n      : S extends {\n          properties?: Record<string, unknown>\n          optionalProperties: Record<string, unknown>\n          additionalProperties?: boolean\n        }\n      ? {-readonly [K in keyof S[\"properties\"]]-?: JTDDataDef<S[\"properties\"][K], D>} & {\n          -readonly [K in keyof S[\"optionalProperties\"]]+?: JTDDataDef<\n            S[\"optionalProperties\"][K],\n            D\n          >\n        } & ([S[\"additionalProperties\"]] extends [true] ? Record<string, unknown> : unknown)\n      : // values\n      S extends {values: infer V}\n      ? Record<string, JTDDataDef<V, D>>\n      : // discriminator\n      S extends {discriminator: infer M; mapping: Record<string, unknown>}\n      ? [M] extends [string]\n        ? {\n            [K in keyof S[\"mapping\"]]: JTDDataDef<S[\"mapping\"][K], D> & {[KM in M]: K}\n          }[keyof S[\"mapping\"]]\n        : never\n      : // empty\n        unknown)\n  | (S extends {nullable: true} ? null : never)\n\nexport type JTDDataType<S> = S extends {definitions: Record<string, unknown>}\n  ? JTDDataDef<S, S[\"definitions\"]>\n  : JTDDataDef<S, Record<string, never>>\n$/dist/refs/json-schema-draft-06.json\ry{\n  \"$schema\": \"http://json-schema.org/draft-06/schema#\",\n  \"$id\": \"http://json-schema.org/draft-06/schema#\",\n  \"title\": \"Core schema meta-schema\",\n  \"definitions\": {\n    \"schemaArray\": {\n      \"type\": \"array\",\n      \"minItems\": 1,\n      \"items\": {\"$ref\": \"#\"}\n    },\n    \"nonNegativeInteger\": {\n      \"type\": \"integer\",\n      \"minimum\": 0\n    },\n    \"nonNegativeIntegerDefault0\": {\n      \"allOf\": [{\"$ref\": \"#/definitions/nonNegativeInteger\"}, {\"default\": 0}]\n    },\n    \"simpleTypes\": {\n      \"enum\": [\"array\", \"boolean\", \"integer\", \"null\", \"number\", \"object\", \"string\"]\n    },\n    \"stringArray\": {\n      \"type\": \"array\",\n      \"items\": {\"type\": \"string\"},\n      \"uniqueItems\": true,\n      \"default\": []\n    }\n  },\n  \"type\": [\"object\", \"boolean\"],\n  \"properties\": {\n    \"$id\": {\n      \"type\": \"string\",\n      \"format\": \"uri-reference\"\n    },\n    \"$schema\": {\n      \"type\": \"string\",\n      \"format\": \"uri\"\n    },\n    \"$ref\": {\n      \"type\": \"string\",\n      \"format\": \"uri-reference\"\n    },\n    \"title\": {\n      \"type\": \"string\"\n    },\n    \"description\": {\n      \"type\": \"string\"\n    },\n    \"default\": {},\n    \"examples\": {\n      \"type\": \"array\",\n      \"items\": {}\n    },\n    \"multipleOf\": {\n      \"type\": \"number\",\n      \"exclusiveMinimum\": 0\n    },\n    \"maximum\": {\n      \"type\": \"number\"\n    },\n    \"exclusiveMaximum\": {\n      \"type\": \"number\"\n    },\n    \"minimum\": {\n      \"type\": \"number\"\n    },\n    \"exclusiveMinimum\": {\n      \"type\": \"number\"\n    },\n    \"maxLength\": {\"$ref\": \"#/definitions/nonNegativeInteger\"},\n    \"minLength\": {\"$ref\": \"#/definitions/nonNegativeIntegerDefault0\"},\n    \"pattern\": {\n      \"type\": \"string\",\n      \"format\": \"regex\"\n    },\n    \"additionalItems\": {\"$ref\": \"#\"},\n    \"items\": {\n      \"anyOf\": [{\"$ref\": \"#\"}, {\"$ref\": \"#/definitions/schemaArray\"}],\n      \"default\": {}\n    },\n    \"maxItems\": {\"$ref\": \"#/definitions/nonNegativeInteger\"},\n    \"minItems\": {\"$ref\": \"#/definitions/nonNegativeIntegerDefault0\"},\n    \"uniqueItems\": {\n      \"type\": \"boolean\",\n      \"default\": false\n    },\n    \"contains\": {\"$ref\": \"#\"},\n    \"maxProperties\": {\"$ref\": \"#/definitions/nonNegativeInteger\"},\n    \"minProperties\": {\"$ref\": \"#/definitions/nonNegativeIntegerDefault0\"},\n    \"required\": {\"$ref\": \"#/definitions/stringArray\"},\n    \"additionalProperties\": {\"$ref\": \"#\"},\n    \"definitions\": {\n      \"type\": \"object\",\n      \"additionalProperties\": {\"$ref\": \"#\"},\n      \"default\": {}\n    },\n    \"properties\": {\n      \"type\": \"object\",\n      \"additionalProperties\": {\"$ref\": \"#\"},\n      \"default\": {}\n    },\n    \"patternProperties\": {\n      \"type\": \"object\",\n      \"additionalProperties\": {\"$ref\": \"#\"},\n      \"default\": {}\n    },\n    \"dependencies\": {\n      \"type\": \"object\",\n      \"additionalProperties\": {\n        \"anyOf\": [{\"$ref\": \"#\"}, {\"$ref\": \"#/definitions/stringArray\"}]\n      }\n    },\n    \"propertyNames\": {\"$ref\": \"#\"},\n    \"const\": {},\n    \"enum\": {\n      \"type\": \"array\",\n      \"minItems\": 1,\n      \"uniqueItems\": true\n    },\n    \"type\": {\n      \"anyOf\": [\n        {\"$ref\": \"#/definitions/simpleTypes\"},\n        {\n          \"type\": \"array\",\n          \"items\": {\"$ref\": \"#/definitions/simpleTypes\"},\n          \"minItems\": 1,\n          \"uniqueItems\": true\n        }\n      ]\n    },\n    \"format\": {\"type\": \"string\"},\n    \"allOf\": {\"$ref\": \"#/definitions/schemaArray\"},\n    \"anyOf\": {\"$ref\": \"#/definitions/schemaArray\"},\n    \"oneOf\": {\"$ref\": \"#/definitions/schemaArray\"},\n    \"not\": {\"$ref\": \"#\"}\n  },\n  \"default\": {}\n}\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/YXJjaHlAMS4wLjA=",
    "content": "/index.js\u0004tmodule.exports = function archy (obj, prefix, opts) {\n    if (prefix === undefined) prefix = '';\n    if (!opts) opts = {};\n    var chr = function (s) {\n        var chars = {\n            '│' : '|',\n            '└' : '`',\n            '├' : '+',\n            '─' : '-',\n            '┬' : '-'\n        };\n        return opts.unicode === false ? chars[s] : s;\n    };\n    \n    if (typeof obj === 'string') obj = { label : obj };\n    \n    var nodes = obj.nodes || [];\n    var lines = (obj.label || '').split('\\n');\n    var splitter = '\\n' + prefix + (nodes.length ? chr('│') : ' ') + ' ';\n    \n    return prefix\n        + lines.join(splitter) + '\\n'\n        + nodes.map(function (node, ix) {\n            var last = ix === nodes.length - 1;\n            var more = node.nodes && node.nodes.length;\n            var prefix_ = prefix + (last ? ' ' : chr('│')) + ' ';\n            \n            return prefix\n                + (last ? chr('└') : chr('├')) + chr('─')\n                + (more ? chr('┬') : chr('─')) + ' '\n                + archy(node, prefix_, opts).slice(prefix.length + 2)\n            ;\n        }).join('')\n    ;\n};\n/package.json\u0003{\n    \"name\" : \"archy\",\n    \"version\" : \"1.0.0\",\n    \"description\" : \"render nested hierarchies `npm ls` style with unicode pipes\",\n    \"main\" : \"index.js\",\n    \"devDependencies\" : {\n        \"tap\" : \"~0.3.3\",\n        \"tape\" : \"~0.1.1\"\n    },\n    \"scripts\" : {\n        \"test\" : \"tap test\"\n    },\n    \"testling\" : {\n        \"files\" : \"test/*.js\",\n        \"browsers\" : {\n            \"iexplore\" : [ \"6.0\", \"7.0\", \"8.0\", \"9.0\" ],\n            \"chrome\" : [ \"20.0\" ],\n            \"firefox\" : [ \"10.0\", \"15.0\" ],\n            \"safari\" : [ \"5.1\" ],\n            \"opera\" : [ \"12.0\" ]\n        }\n    },\n    \"repository\" : {\n        \"type\" : \"git\",\n        \"url\" : \"http://github.com/substack/node-archy.git\"\n    },\n    \"keywords\" : [\n        \"hierarchy\",\n        \"npm ls\",\n        \"unicode\",\n        \"pretty\",\n        \"print\"\n    ],\n    \"author\" : {\n        \"name\" : \"James Halliday\",\n        \"email\" : \"mail@substack.net\",\n        \"url\" : \"http://substack.net\"\n    },\n    \"license\" : \"MIT\"\n}\n/readme.markdown\u0006# archy\n\nRender nested hierarchies `npm ls` style with unicode pipes.\n\n[![browser support](http://ci.testling.com/substack/node-archy.png)](http://ci.testling.com/substack/node-archy)\n\n[![build status](https://secure.travis-ci.org/substack/node-archy.png)](http://travis-ci.org/substack/node-archy)\n\n# example\n\n``` js\nvar archy = require('archy');\nvar s = archy({\n  label : 'beep',\n  nodes : [\n    'ity',\n    {\n      label : 'boop',\n      nodes : [\n        {\n          label : 'o_O',\n          nodes : [\n            {\n              label : 'oh',\n              nodes : [ 'hello', 'puny' ]\n            },\n            'human'\n          ]\n        },\n        'party\\ntime!'\n      ]\n    }\n  ]\n});\nconsole.log(s);\n```\n\noutput\n\n```\nbeep\n├── ity\n└─┬ boop\n  ├─┬ o_O\n  │ ├─┬ oh\n  │ │ ├── hello\n  │ │ └── puny\n  │ └── human\n  └── party\n      time!\n```\n\n# methods\n\nvar archy = require('archy')\n\n## archy(obj, prefix='', opts={})\n\nReturn a string representation of `obj` with unicode pipe characters like how\n`npm ls` looks.\n\n`obj` should be a tree of nested objects with `'label'` and `'nodes'` fields.\n`'label'` is a string of text to display at a node level and `'nodes'` is an\narray of the descendents of the current node.\n\nIf a node is a string, that string will be used as the `'label'` and an empty\narray of `'nodes'` will be used.\n\n`prefix` gets prepended to all the lines and is used by the algorithm to\nrecursively update.\n\nIf `'label'` has newlines they will be indented at the present indentation level\nwith the current prefix.\n\nTo disable unicode results in favor of all-ansi output set `opts.unicode` to\n`false`.\n\n# install\n\nWith [npm](http://npmjs.org) do:\n\n```\nnpm install archy\n```\n\n# license\n\nMIT\n/LICENSE\u00041This software is released under the MIT license:\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n/.travis.yml+language: node_js\nnode_js:\n  - 0.6\n  - 0.8\n/test/multi_line.js\u0003var test = require('tape');\nvar archy = require('../');\n\ntest('multi-line', function (t) {\n    var s = archy({\n      label : 'beep\\none\\ntwo',\n      nodes : [\n        'ity',\n        {\n          label : 'boop',\n          nodes : [\n            {\n              label : 'o_O\\nwheee',\n              nodes : [\n                {\n                  label : 'oh',\n                  nodes : [ 'hello', 'puny\\nmeat' ]\n                },\n                'creature'\n              ]\n            },\n            'party\\ntime!'\n          ]\n        }\n      ]\n    });\n    t.equal(s, [\n        'beep',\n        '│ one',\n        '│ two',\n        '├── ity',\n        '└─┬ boop',\n        '  ├─┬ o_O',\n        '  │ │ wheee',\n        '  │ ├─┬ oh',\n        '  │ │ ├── hello',\n        '  │ │ └── puny',\n        '  │ │     meat',\n        '  │ └── creature',\n        '  └── party',\n        '      time!',\n        ''\n    ].join('\\n'));\n    t.end();\n});\n/test/non_unicode.js\u0003\u001fvar test = require('tape');\nvar archy = require('../');\n\ntest('beep', function (t) {\n    var s = archy({\n      label : 'beep',\n      nodes : [\n        'ity',\n        {\n          label : 'boop',\n          nodes : [\n            {\n              label : 'o_O',\n              nodes : [\n                {\n                  label : 'oh',\n                  nodes : [ 'hello', 'puny' ]\n                },\n                'human'\n              ]\n            },\n            'party!'\n          ]\n        }\n      ]\n    }, '', { unicode : false });\n    t.equal(s, [\n        'beep',\n        '+-- ity',\n        '`-- boop',\n        '  +-- o_O',\n        '  | +-- oh',\n        '  | | +-- hello',\n        '  | | `-- puny',\n        '  | `-- human',\n        '  `-- party!',\n        ''\n    ].join('\\n'));\n    t.end();\n});\n/examples/beep.js\u0001var archy = require('../');\nvar s = archy({\n  label : 'beep',\n  nodes : [\n    'ity',\n    {\n      label : 'boop',\n      nodes : [\n        {\n          label : 'o_O',\n          nodes : [\n            {\n              label : 'oh',\n              nodes : [ 'hello', 'puny' ]\n            },\n            'human'\n          ]\n        },\n        'party\\ntime!'\n      ]\n    }\n  ]\n});\nconsole.log(s);\n/examples/multi_line.js\u0001var archy = require('../');\n\nvar s = archy({\n  label : 'beep\\none\\ntwo',\n  nodes : [\n    'ity',\n    {\n      label : 'boop',\n      nodes : [\n        {\n          label : 'o_O\\nwheee',\n          nodes : [\n            {\n              label : 'oh',\n              nodes : [ 'hello', 'puny\\nmeat' ]\n            },\n            'creature'\n          ]\n        },\n        'party\\ntime!'\n      ]\n    }\n  ]\n});\nconsole.log(s);\n/test/beep.js\u0003Bvar test = require('tape');\nvar archy = require('../');\n\ntest('beep', function (t) {\n    var s = archy({\n      label : 'beep',\n      nodes : [\n        'ity',\n        {\n          label : 'boop',\n          nodes : [\n            {\n              label : 'o_O',\n              nodes : [\n                {\n                  label : 'oh',\n                  nodes : [ 'hello', 'puny' ]\n                },\n                'human'\n              ]\n            },\n            'party!'\n          ]\n        }\n      ]\n    });\n    t.equal(s, [\n        'beep',\n        '├── ity',\n        '└─┬ boop',\n        '  ├─┬ o_O',\n        '  │ ├─┬ oh',\n        '  │ │ ├── hello',\n        '  │ │ └── puny',\n        '  │ └── human',\n        '  └── party!',\n        ''\n    ].join('\\n'));\n    t.end();\n});\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/YXJncGFyc2VAMi4wLjE=",
    "content": "/CHANGELOG.md\u0017N# Changelog\n\nAll notable changes to this project will be documented in this file.\n\nThe format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),\nand this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).\n\n\n## [2.0.1] - 2020-08-29\n### Fixed\n- Fix issue with `process.argv` when used with interpreters (`coffee`, `ts-node`, etc.), #150.\n\n\n## [2.0.0] - 2020-08-14\n### Changed\n- Full rewrite. Now port from python 3.9.0 & more precise following.\n  See [doc](./doc) for difference and migration info.\n- node.js 10+ required\n- Removed most of local docs in favour of original ones.\n\n\n## [1.0.10] - 2018-02-15\n### Fixed\n- Use .concat instead of + for arrays, #122.\n\n\n## [1.0.9] - 2016-09-29\n### Changed\n- Rerelease after 1.0.8 - deps cleanup.\n\n\n## [1.0.8] - 2016-09-29\n### Changed\n- Maintenance (deps bump, fix node 6.5+ tests, coverage report).\n\n\n## [1.0.7] - 2016-03-17\n### Changed\n- Teach `addArgument` to accept string arg names. #97, @tomxtobin.\n\n\n## [1.0.6] - 2016-02-06\n### Changed\n- Maintenance: moved to eslint & updated CS.\n\n\n## [1.0.5] - 2016-02-05\n### Changed\n- Removed lodash dependency to significantly reduce install size.\n  Thanks to @mourner.\n\n\n## [1.0.4] - 2016-01-17\n### Changed\n- Maintenance: lodash update to 4.0.0.\n\n\n## [1.0.3] - 2015-10-27\n### Fixed\n- Fix parse `=` in args: `--examplepath=\"C:\\myfolder\\env=x64\"`. #84, @CatWithApple.\n\n\n## [1.0.2] - 2015-03-22\n### Changed\n- Relaxed lodash version dependency.\n\n\n## [1.0.1] - 2015-02-20\n### Changed\n- Changed dependencies to be compatible with ancient nodejs.\n\n\n## [1.0.0] - 2015-02-19\n### Changed\n- Maintenance release.\n- Replaced `underscore` with `lodash`.\n- Bumped version to 1.0.0 to better reflect semver meaning.\n- HISTORY.md -> CHANGELOG.md\n\n\n## [0.1.16] - 2013-12-01\n### Changed\n- Maintenance release. Updated dependencies and docs.\n\n\n## [0.1.15] - 2013-05-13\n### Fixed\n- Fixed #55, @trebor89\n\n\n## [0.1.14] - 2013-05-12\n### Fixed\n- Fixed #62, @maxtaco\n\n\n## [0.1.13] - 2013-04-08\n### Changed\n- Added `.npmignore` to reduce package size\n\n\n## [0.1.12] - 2013-02-10\n### Fixed\n- Fixed conflictHandler (#46), @hpaulj\n\n\n## [0.1.11] - 2013-02-07\n### Added\n- Added 70+ tests (ported from python), @hpaulj\n- Added conflictHandler, @applepicke\n- Added fromfilePrefixChar, @hpaulj\n\n### Fixed\n- Multiple bugfixes, @hpaulj\n\n\n## [0.1.10] - 2012-12-30\n### Added\n- Added [mutual exclusion](http://docs.python.org/dev/library/argparse.html#mutual-exclusion)\n  support, thanks to @hpaulj\n\n### Fixed\n- Fixed options check for `storeConst` & `appendConst` actions, thanks to @hpaulj\n\n\n## [0.1.9] - 2012-12-27\n### Fixed\n- Fixed option dest interferens with other options (issue #23), thanks to @hpaulj\n- Fixed default value behavior with `*` positionals, thanks to @hpaulj\n- Improve `getDefault()` behavior, thanks to @hpaulj\n- Improve negative argument parsing, thanks to @hpaulj\n\n\n## [0.1.8] - 2012-12-01\n### Fixed\n- Fixed parser parents (issue #19), thanks to @hpaulj\n- Fixed negative argument parse (issue #20), thanks to @hpaulj\n\n\n## [0.1.7] - 2012-10-14\n### Fixed\n- Fixed 'choices' argument parse (issue #16)\n- Fixed stderr output (issue #15)\n\n\n## [0.1.6] - 2012-09-09\n### Fixed\n- Fixed check for conflict of options (thanks to @tomxtobin)\n\n\n## [0.1.5] - 2012-09-03\n### Fixed\n- Fix parser #setDefaults method (thanks to @tomxtobin)\n\n\n## [0.1.4] - 2012-07-30\n### Fixed\n- Fixed pseudo-argument support (thanks to @CGamesPlay)\n- Fixed addHelp default (should be true), if not set (thanks to @benblank)\n\n\n## [0.1.3] - 2012-06-27\n### Fixed\n- Fixed formatter api name: Formatter -> HelpFormatter\n\n\n## [0.1.2] - 2012-05-29\n### Fixed\n- Removed excess whitespace in help\n- Fixed error reporting, when parcer with subcommands\n  called with empty arguments\n\n### Added\n- Added basic tests\n\n\n## [0.1.1] - 2012-05-23\n### Fixed\n- Fixed line wrapping in help formatter\n- Added better error reporting on invalid arguments\n\n\n## [0.1.0] - 2012-05-16\n### Added\n- First release.\n\n\n[2.0.1]: https://github.com/nodeca/argparse/compare/2.0.0...2.0.1\n[2.0.0]: https://github.com/nodeca/argparse/compare/1.0.10...2.0.0\n[1.0.10]: https://github.com/nodeca/argparse/compare/1.0.9...1.0.10\n[1.0.9]: https://github.com/nodeca/argparse/compare/1.0.8...1.0.9\n[1.0.8]: https://github.com/nodeca/argparse/compare/1.0.7...1.0.8\n[1.0.7]: https://github.com/nodeca/argparse/compare/1.0.6...1.0.7\n[1.0.6]: https://github.com/nodeca/argparse/compare/1.0.5...1.0.6\n[1.0.5]: https://github.com/nodeca/argparse/compare/1.0.4...1.0.5\n[1.0.4]: https://github.com/nodeca/argparse/compare/1.0.3...1.0.4\n[1.0.3]: https://github.com/nodeca/argparse/compare/1.0.2...1.0.3\n[1.0.2]: https://github.com/nodeca/argparse/compare/1.0.1...1.0.2\n[1.0.1]: https://github.com/nodeca/argparse/compare/1.0.0...1.0.1\n[1.0.0]: https://github.com/nodeca/argparse/compare/0.1.16...1.0.0\n[0.1.16]: https://github.com/nodeca/argparse/compare/0.1.15...0.1.16\n[0.1.15]: https://github.com/nodeca/argparse/compare/0.1.14...0.1.15\n[0.1.14]: https://github.com/nodeca/argparse/compare/0.1.13...0.1.14\n[0.1.13]: https://github.com/nodeca/argparse/compare/0.1.12...0.1.13\n[0.1.12]: https://github.com/nodeca/argparse/compare/0.1.11...0.1.12\n[0.1.11]: https://github.com/nodeca/argparse/compare/0.1.10...0.1.11\n[0.1.10]: https://github.com/nodeca/argparse/compare/0.1.9...0.1.10\n[0.1.9]: https://github.com/nodeca/argparse/compare/0.1.8...0.1.9\n[0.1.8]: https://github.com/nodeca/argparse/compare/0.1.7...0.1.8\n[0.1.7]: https://github.com/nodeca/argparse/compare/0.1.6...0.1.7\n[0.1.6]: https://github.com/nodeca/argparse/compare/0.1.5...0.1.6\n[0.1.5]: https://github.com/nodeca/argparse/compare/0.1.4...0.1.5\n[0.1.4]: https://github.com/nodeca/argparse/compare/0.1.3...0.1.4\n[0.1.3]: https://github.com/nodeca/argparse/compare/0.1.2...0.1.3\n[0.1.2]: https://github.com/nodeca/argparse/compare/0.1.1...0.1.2\n[0.1.1]: https://github.com/nodeca/argparse/compare/0.1.0...0.1.1\n[0.1.0]: https://github.com/nodeca/argparse/releases/tag/0.1.0\n/LICENSE1A. HISTORY OF THE SOFTWARE\n==========================\n\nPython was created in the early 1990s by Guido van Rossum at Stichting\nMathematisch Centrum (CWI, see http://www.cwi.nl) in the Netherlands\nas a successor of a language called ABC.  Guido remains Python's\nprincipal author, although it includes many contributions from others.\n\nIn 1995, Guido continued his work on Python at the Corporation for\nNational Research Initiatives (CNRI, see http://www.cnri.reston.va.us)\nin Reston, Virginia where he released several versions of the\nsoftware.\n\nIn May 2000, Guido and the Python core development team moved to\nBeOpen.com to form the BeOpen PythonLabs team.  In October of the same\nyear, the PythonLabs team moved to Digital Creations, which became\nZope Corporation.  In 2001, the Python Software Foundation (PSF, see\nhttps://www.python.org/psf/) was formed, a non-profit organization\ncreated specifically to own Python-related Intellectual Property.\nZope Corporation was a sponsoring member of the PSF.\n\nAll Python releases are Open Source (see http://www.opensource.org for\nthe Open Source Definition).  Historically, most, but not all, Python\nreleases have also been GPL-compatible; the table below summarizes\nthe various releases.\n\n    Release         Derived     Year        Owner       GPL-\n                    from                                compatible? (1)\n\n    0.9.0 thru 1.2              1991-1995   CWI         yes\n    1.3 thru 1.5.2  1.2         1995-1999   CNRI        yes\n    1.6             1.5.2       2000        CNRI        no\n    2.0             1.6         2000        BeOpen.com  no\n    1.6.1           1.6         2001        CNRI        yes (2)\n    2.1             2.0+1.6.1   2001        PSF         no\n    2.0.1           2.0+1.6.1   2001        PSF         yes\n    2.1.1           2.1+2.0.1   2001        PSF         yes\n    2.1.2           2.1.1       2002        PSF         yes\n    2.1.3           2.1.2       2002        PSF         yes\n    2.2 and above   2.1.1       2001-now    PSF         yes\n\nFootnotes:\n\n(1) GPL-compatible doesn't mean that we're distributing Python under\n    the GPL.  All Python licenses, unlike the GPL, let you distribute\n    a modified version without making your changes open source.  The\n    GPL-compatible licenses make it possible to combine Python with\n    other software that is released under the GPL; the others don't.\n\n(2) According to Richard Stallman, 1.6.1 is not GPL-compatible,\n    because its license has a choice of law clause.  According to\n    CNRI, however, Stallman's lawyer has told CNRI's lawyer that 1.6.1\n    is \"not incompatible\" with the GPL.\n\nThanks to the many outside volunteers who have worked under Guido's\ndirection to make these releases possible.\n\n\nB. TERMS AND CONDITIONS FOR ACCESSING OR OTHERWISE USING PYTHON\n===============================================================\n\nPYTHON SOFTWARE FOUNDATION LICENSE VERSION 2\n--------------------------------------------\n\n1. This LICENSE AGREEMENT is between the Python Software Foundation\n(\"PSF\"), and the Individual or Organization (\"Licensee\") accessing and\notherwise using this software (\"Python\") in source or binary form and\nits associated documentation.\n\n2. Subject to the terms and conditions of this License Agreement, PSF hereby\ngrants Licensee a nonexclusive, royalty-free, world-wide license to reproduce,\nanalyze, test, perform and/or display publicly, prepare derivative works,\ndistribute, and otherwise use Python alone or in any derivative version,\nprovided, however, that PSF's License Agreement and PSF's notice of copyright,\ni.e., \"Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,\n2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Python Software Foundation;\nAll Rights Reserved\" are retained in Python alone or in any derivative version\nprepared by Licensee.\n\n3. In the event Licensee prepares a derivative work that is based on\nor incorporates Python or any part thereof, and wants to make\nthe derivative work available to others as provided herein, then\nLicensee hereby agrees to include in any such work a brief summary of\nthe changes made to Python.\n\n4. PSF is making Python available to Licensee on an \"AS IS\"\nbasis.  PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR\nIMPLIED.  BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND\nDISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS\nFOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT\nINFRINGE ANY THIRD PARTY RIGHTS.\n\n5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON\nFOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS\nA RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON,\nOR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.\n\n6. This License Agreement will automatically terminate upon a material\nbreach of its terms and conditions.\n\n7. Nothing in this License Agreement shall be deemed to create any\nrelationship of agency, partnership, or joint venture between PSF and\nLicensee.  This License Agreement does not grant permission to use PSF\ntrademarks or trade name in a trademark sense to endorse or promote\nproducts or services of Licensee, or any third party.\n\n8. By copying, installing or otherwise using Python, Licensee\nagrees to be bound by the terms and conditions of this License\nAgreement.\n\n\nBEOPEN.COM LICENSE AGREEMENT FOR PYTHON 2.0\n-------------------------------------------\n\nBEOPEN PYTHON OPEN SOURCE LICENSE AGREEMENT VERSION 1\n\n1. This LICENSE AGREEMENT is between BeOpen.com (\"BeOpen\"), having an\noffice at 160 Saratoga Avenue, Santa Clara, CA 95051, and the\nIndividual or Organization (\"Licensee\") accessing and otherwise using\nthis software in source or binary form and its associated\ndocumentation (\"the Software\").\n\n2. Subject to the terms and conditions of this BeOpen Python License\nAgreement, BeOpen hereby grants Licensee a non-exclusive,\nroyalty-free, world-wide license to reproduce, analyze, test, perform\nand/or display publicly, prepare derivative works, distribute, and\notherwise use the Software alone or in any derivative version,\nprovided, however, that the BeOpen Python License is retained in the\nSoftware, alone or in any derivative version prepared by Licensee.\n\n3. BeOpen is making the Software available to Licensee on an \"AS IS\"\nbasis.  BEOPEN MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR\nIMPLIED.  BY WAY OF EXAMPLE, BUT NOT LIMITATION, BEOPEN MAKES NO AND\nDISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS\nFOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT\nINFRINGE ANY THIRD PARTY RIGHTS.\n\n4. BEOPEN SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE\nSOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS\nAS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY\nDERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.\n\n5. This License Agreement will automatically terminate upon a material\nbreach of its terms and conditions.\n\n6. This License Agreement shall be governed by and interpreted in all\nrespects by the law of the State of California, excluding conflict of\nlaw provisions.  Nothing in this License Agreement shall be deemed to\ncreate any relationship of agency, partnership, or joint venture\nbetween BeOpen and Licensee.  This License Agreement does not grant\npermission to use BeOpen trademarks or trade names in a trademark\nsense to endorse or promote products or services of Licensee, or any\nthird party.  As an exception, the \"BeOpen Python\" logos available at\nhttp://www.pythonlabs.com/logos.html may be used according to the\npermissions granted on that web page.\n\n7. By copying, installing or otherwise using the software, Licensee\nagrees to be bound by the terms and conditions of this License\nAgreement.\n\n\nCNRI LICENSE AGREEMENT FOR PYTHON 1.6.1\n---------------------------------------\n\n1. This LICENSE AGREEMENT is between the Corporation for National\nResearch Initiatives, having an office at 1895 Preston White Drive,\nReston, VA 20191 (\"CNRI\"), and the Individual or Organization\n(\"Licensee\") accessing and otherwise using Python 1.6.1 software in\nsource or binary form and its associated documentation.\n\n2. Subject to the terms and conditions of this License Agreement, CNRI\nhereby grants Licensee a nonexclusive, royalty-free, world-wide\nlicense to reproduce, analyze, test, perform and/or display publicly,\nprepare derivative works, distribute, and otherwise use Python 1.6.1\nalone or in any derivative version, provided, however, that CNRI's\nLicense Agreement and CNRI's notice of copyright, i.e., \"Copyright (c)\n1995-2001 Corporation for National Research Initiatives; All Rights\nReserved\" are retained in Python 1.6.1 alone or in any derivative\nversion prepared by Licensee.  Alternately, in lieu of CNRI's License\nAgreement, Licensee may substitute the following text (omitting the\nquotes): \"Python 1.6.1 is made available subject to the terms and\nconditions in CNRI's License Agreement.  This Agreement together with\nPython 1.6.1 may be located on the Internet using the following\nunique, persistent identifier (known as a handle): 1895.22/1013.  This\nAgreement may also be obtained from a proxy server on the Internet\nusing the following URL: http://hdl.handle.net/1895.22/1013\".\n\n3. In the event Licensee prepares a derivative work that is based on\nor incorporates Python 1.6.1 or any part thereof, and wants to make\nthe derivative work available to others as provided herein, then\nLicensee hereby agrees to include in any such work a brief summary of\nthe changes made to Python 1.6.1.\n\n4. CNRI is making Python 1.6.1 available to Licensee on an \"AS IS\"\nbasis.  CNRI MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR\nIMPLIED.  BY WAY OF EXAMPLE, BUT NOT LIMITATION, CNRI MAKES NO AND\nDISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS\nFOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 1.6.1 WILL NOT\nINFRINGE ANY THIRD PARTY RIGHTS.\n\n5. CNRI SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON\n1.6.1 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS\nA RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 1.6.1,\nOR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.\n\n6. This License Agreement will automatically terminate upon a material\nbreach of its terms and conditions.\n\n7. This License Agreement shall be governed by the federal\nintellectual property law of the United States, including without\nlimitation the federal copyright law, and, to the extent such\nU.S. federal law does not apply, by the law of the Commonwealth of\nVirginia, excluding Virginia's conflict of law provisions.\nNotwithstanding the foregoing, with regard to derivative works based\non Python 1.6.1 that incorporate non-separable material that was\npreviously distributed under the GNU General Public License (GPL), the\nlaw of the Commonwealth of Virginia shall govern this License\nAgreement only as to issues arising under or with respect to\nParagraphs 4, 5, and 7 of this License Agreement.  Nothing in this\nLicense Agreement shall be deemed to create any relationship of\nagency, partnership, or joint venture between CNRI and Licensee.  This\nLicense Agreement does not grant permission to use CNRI trademarks or\ntrade name in a trademark sense to endorse or promote products or\nservices of Licensee, or any third party.\n\n8. By clicking on the \"ACCEPT\" button where indicated, or by copying,\ninstalling or otherwise using Python 1.6.1, Licensee agrees to be\nbound by the terms and conditions of this License Agreement.\n\n        ACCEPT\n\n\nCWI LICENSE AGREEMENT FOR PYTHON 0.9.0 THROUGH 1.2\n--------------------------------------------------\n\nCopyright (c) 1991 - 1995, Stichting Mathematisch Centrum Amsterdam,\nThe Netherlands.  All rights reserved.\n\nPermission to use, copy, modify, and distribute this software and its\ndocumentation for any purpose and without fee is hereby granted,\nprovided that the above copyright notice appear in all copies and that\nboth that copyright notice and this permission notice appear in\nsupporting documentation, and that the name of Stichting Mathematisch\nCentrum or CWI not be used in advertising or publicity pertaining to\ndistribution of the software without specific, written prior\npermission.\n\nSTICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO\nTHIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE\nFOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\nACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT\nOF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n/package.json\u0002{\n  \"name\": \"argparse\",\n  \"description\": \"CLI arguments parser. Native port of python's argparse.\",\n  \"version\": \"2.0.1\",\n  \"keywords\": [\n    \"cli\",\n    \"parser\",\n    \"argparse\",\n    \"option\",\n    \"args\"\n  ],\n  \"main\": \"argparse.js\",\n  \"files\": [\n    \"argparse.js\",\n    \"lib/\"\n  ],\n  \"license\": \"Python-2.0\",\n  \"repository\": \"nodeca/argparse\",\n  \"scripts\": {\n    \"lint\": \"eslint .\",\n    \"test\": \"npm run lint && nyc mocha\",\n    \"coverage\": \"npm run test && nyc report --reporter html\"\n  },\n  \"devDependencies\": {\n    \"@babel/eslint-parser\": \"^7.11.0\",\n    \"@babel/plugin-syntax-class-properties\": \"^7.10.4\",\n    \"eslint\": \"^7.5.0\",\n    \"mocha\": \"^8.0.1\",\n    \"nyc\": \"^15.1.0\"\n  }\n}\n/README.md\nargparse\n========\n\n[![Build Status](https://secure.travis-ci.org/nodeca/argparse.svg?branch=master)](http://travis-ci.org/nodeca/argparse)\n[![NPM version](https://img.shields.io/npm/v/argparse.svg)](https://www.npmjs.org/package/argparse)\n\nCLI arguments parser for node.js, with [sub-commands](https://docs.python.org/3.9/library/argparse.html#sub-commands) support. Port of python's [argparse](http://docs.python.org/dev/library/argparse.html) (version [3.9.0](https://github.com/python/cpython/blob/v3.9.0rc1/Lib/argparse.py)).\n\n**Difference with original.**\n\n- JS has no keyword arguments support.\n  -  Pass options instead: `new ArgumentParser({ description: 'example', add_help: true })`.\n- JS has no python's types `int`, `float`, ...\n  - Use string-typed names: `.add_argument('-b', { type: 'int', help: 'help' })`.\n- `%r` format specifier uses `require('util').inspect()`.\n\nMore details in [doc](./doc).\n\n\nExample\n-------\n\n`test.js` file:\n\n```javascript\n#!/usr/bin/env node\n'use strict';\n\nconst { ArgumentParser } = require('argparse');\nconst { version } = require('./package.json');\n\nconst parser = new ArgumentParser({\n  description: 'Argparse example'\n});\n\nparser.add_argument('-v', '--version', { action: 'version', version });\nparser.add_argument('-f', '--foo', { help: 'foo bar' });\nparser.add_argument('-b', '--bar', { help: 'bar foo' });\nparser.add_argument('--baz', { help: 'baz bar' });\n\nconsole.dir(parser.parse_args());\n```\n\nDisplay help:\n\n```\n$ ./test.js -h\nusage: test.js [-h] [-v] [-f FOO] [-b BAR] [--baz BAZ]\n\nArgparse example\n\noptional arguments:\n  -h, --help         show this help message and exit\n  -v, --version      show program's version number and exit\n  -f FOO, --foo FOO  foo bar\n  -b BAR, --bar BAR  bar foo\n  --baz BAZ          baz bar\n```\n\nParse arguments:\n\n```\n$ ./test.js -f=3 --bar=4 --baz 5\n{ foo: '3', bar: '4', baz: '5' }\n```\n\n\nAPI docs\n--------\n\nSince this is a port with minimal divergence, there's no separate documentation.\nUse original one instead, with notes about difference.\n\n1. [Original doc](https://docs.python.org/3.9/library/argparse.html).\n2. [Original tutorial](https://docs.python.org/3.9/howto/argparse.html).\n3. [Difference with python](./doc).\n\n\nargparse for enterprise\n-----------------------\n\nAvailable as part of the Tidelift Subscription\n\nThe maintainers of argparse and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-argparse?utm_source=npm-argparse&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n/lib/sub.js\b// Limited implementation of python % string operator, supports only %s and %r for now\n// (other formats are not used here, but may appear in custom templates)\n\n'use strict'\n\nconst { inspect } = require('util')\n\n\nmodule.exports = function sub(pattern, ...values) {\n    let regex = /%(?:(%)|(-)?(\\*)?(?:\\((\\w+)\\))?([A-Za-z]))/g\n\n    let result = pattern.replace(regex, function (_, is_literal, is_left_align, is_padded, name, format) {\n        if (is_literal) return '%'\n\n        let padded_count = 0\n        if (is_padded) {\n            if (values.length === 0) throw new TypeError('not enough arguments for format string')\n            padded_count = values.shift()\n            if (!Number.isInteger(padded_count)) throw new TypeError('* wants int')\n        }\n\n        let str\n        if (name !== undefined) {\n            let dict = values[0]\n            if (typeof dict !== 'object' || dict === null) throw new TypeError('format requires a mapping')\n            if (!(name in dict)) throw new TypeError(`no such key: '${name}'`)\n            str = dict[name]\n        } else {\n            if (values.length === 0) throw new TypeError('not enough arguments for format string')\n            str = values.shift()\n        }\n\n        switch (format) {\n            case 's':\n                str = String(str)\n                break\n            case 'r':\n                str = inspect(str)\n                break\n            case 'd':\n            case 'i':\n                if (typeof str !== 'number') {\n                    throw new TypeError(`%${format} format: a number is required, not ${typeof str}`)\n                }\n                str = String(str.toFixed(0))\n                break\n            default:\n                throw new TypeError(`unsupported format character '${format}'`)\n        }\n\n        if (padded_count > 0) {\n            return is_left_align ? str.padEnd(padded_count) : str.padStart(padded_count)\n        } else {\n            return str\n        }\n    })\n\n    if (values.length) {\n        if (values.length === 1 && typeof values[0] === 'object' && values[0] !== null) {\n            // mapping\n        } else {\n            throw new TypeError('not all arguments converted during string formatting')\n        }\n    }\n\n    return result\n}\n/argparse.js\u0000\u0001// Port of python's argparse module, version 3.9.0:\n// https://github.com/python/cpython/blob/v3.9.0rc1/Lib/argparse.py\n\n'use strict'\n\n// Copyright (C) 2010-2020 Python Software Foundation.\n// Copyright (C) 2020 argparse.js authors\n\n/*\n * Command-line parsing library\n *\n * This module is an optparse-inspired command-line parsing library that:\n *\n *     - handles both optional and positional arguments\n *     - produces highly informative usage messages\n *     - supports parsers that dispatch to sub-parsers\n *\n * The following is a simple usage example that sums integers from the\n * command-line and writes the result to a file::\n *\n *     parser = argparse.ArgumentParser(\n *         description='sum the integers at the command line')\n *     parser.add_argument(\n *         'integers', metavar='int', nargs='+', type=int,\n *         help='an integer to be summed')\n *     parser.add_argument(\n *         '--log', default=sys.stdout, type=argparse.FileType('w'),\n *         help='the file where the sum should be written')\n *     args = parser.parse_args()\n *     args.log.write('%s' % sum(args.integers))\n *     args.log.close()\n *\n * The module contains the following public classes:\n *\n *     - ArgumentParser -- The main entry point for command-line parsing. As the\n *         example above shows, the add_argument() method is used to populate\n *         the parser with actions for optional and positional arguments. Then\n *         the parse_args() method is invoked to convert the args at the\n *         command-line into an object with attributes.\n *\n *     - ArgumentError -- The exception raised by ArgumentParser objects when\n *         there are errors with the parser's actions. Errors raised while\n *         parsing the command-line are caught by ArgumentParser and emitted\n *         as command-line messages.\n *\n *     - FileType -- A factory for defining types of files to be created. As the\n *         example above shows, instances of FileType are typically passed as\n *         the type= argument of add_argument() calls.\n *\n *     - Action -- The base class for parser actions. Typically actions are\n *         selected by passing strings like 'store_true' or 'append_const' to\n *         the action= argument of add_argument(). However, for greater\n *         customization of ArgumentParser actions, subclasses of Action may\n *         be defined and passed as the action= argument.\n *\n *     - HelpFormatter, RawDescriptionHelpFormatter, RawTextHelpFormatter,\n *         ArgumentDefaultsHelpFormatter -- Formatter classes which\n *         may be passed as the formatter_class= argument to the\n *         ArgumentParser constructor. HelpFormatter is the default,\n *         RawDescriptionHelpFormatter and RawTextHelpFormatter tell the parser\n *         not to change the formatting for help text, and\n *         ArgumentDefaultsHelpFormatter adds information about argument defaults\n *         to the help.\n *\n * All other classes in this module are considered implementation details.\n * (Also note that HelpFormatter and RawDescriptionHelpFormatter are only\n * considered public as object names -- the API of the formatter objects is\n * still considered an implementation detail.)\n */\n\nconst SUPPRESS = '==SUPPRESS=='\n\nconst OPTIONAL = '?'\nconst ZERO_OR_MORE = '*'\nconst ONE_OR_MORE = '+'\nconst PARSER = 'A...'\nconst REMAINDER = '...'\nconst _UNRECOGNIZED_ARGS_ATTR = '_unrecognized_args'\n\n\n// ==================================\n// Utility functions used for porting\n// ==================================\nconst assert = require('assert')\nconst util = require('util')\nconst fs = require('fs')\nconst sub = require('./lib/sub')\nconst path = require('path')\nconst repr = util.inspect\n\nfunction get_argv() {\n    // omit first argument (which is assumed to be interpreter - `node`, `coffee`, `ts-node`, etc.)\n    return process.argv.slice(1)\n}\n\nfunction get_terminal_size() {\n    return {\n        columns: +process.env.COLUMNS || process.stdout.columns || 80\n    }\n}\n\nfunction hasattr(object, name) {\n    return Object.prototype.hasOwnProperty.call(object, name)\n}\n\nfunction getattr(object, name, value) {\n    return hasattr(object, name) ? object[name] : value\n}\n\nfunction setattr(object, name, value) {\n    object[name] = value\n}\n\nfunction setdefault(object, name, value) {\n    if (!hasattr(object, name)) object[name] = value\n    return object[name]\n}\n\nfunction delattr(object, name) {\n    delete object[name]\n}\n\nfunction range(from, to, step=1) {\n    // range(10) is equivalent to range(0, 10)\n    if (arguments.length === 1) [ to, from ] = [ from, 0 ]\n    if (typeof from !== 'number' || typeof to !== 'number' || typeof step !== 'number') {\n        throw new TypeError('argument cannot be interpreted as an integer')\n    }\n    if (step === 0) throw new TypeError('range() arg 3 must not be zero')\n\n    let result = []\n    if (step > 0) {\n        for (let i = from; i < to; i += step) result.push(i)\n    } else {\n        for (let i = from; i > to; i += step) result.push(i)\n    }\n    return result\n}\n\nfunction splitlines(str, keepends = false) {\n    let result\n    if (!keepends) {\n        result = str.split(/\\r\\n|[\\n\\r\\v\\f\\x1c\\x1d\\x1e\\x85\\u2028\\u2029]/)\n    } else {\n        result = []\n        let parts = str.split(/(\\r\\n|[\\n\\r\\v\\f\\x1c\\x1d\\x1e\\x85\\u2028\\u2029])/)\n        for (let i = 0; i < parts.length; i += 2) {\n            result.push(parts[i] + (i + 1 < parts.length ? parts[i + 1] : ''))\n        }\n    }\n    if (!result[result.length - 1]) result.pop()\n    return result\n}\n\nfunction _string_lstrip(string, prefix_chars) {\n    let idx = 0\n    while (idx < string.length && prefix_chars.includes(string[idx])) idx++\n    return idx ? string.slice(idx) : string\n}\n\nfunction _string_split(string, sep, maxsplit) {\n    let result = string.split(sep)\n    if (result.length > maxsplit) {\n        result = result.slice(0, maxsplit).concat([ result.slice(maxsplit).join(sep) ])\n    }\n    return result\n}\n\nfunction _array_equal(array1, array2) {\n    if (array1.length !== array2.length) return false\n    for (let i = 0; i < array1.length; i++) {\n        if (array1[i] !== array2[i]) return false\n    }\n    return true\n}\n\nfunction _array_remove(array, item) {\n    let idx = array.indexOf(item)\n    if (idx === -1) throw new TypeError(sub('%r not in list', item))\n    array.splice(idx, 1)\n}\n\n// normalize choices to array;\n// this isn't required in python because `in` and `map` operators work with anything,\n// but in js dealing with multiple types here is too clunky\nfunction _choices_to_array(choices) {\n    if (choices === undefined) {\n        return []\n    } else if (Array.isArray(choices)) {\n        return choices\n    } else if (choices !== null && typeof choices[Symbol.iterator] === 'function') {\n        return Array.from(choices)\n    } else if (typeof choices === 'object' && choices !== null) {\n        return Object.keys(choices)\n    } else {\n        throw new Error(sub('invalid choices value: %r', choices))\n    }\n}\n\n// decorator that allows a class to be called without new\nfunction _callable(cls) {\n    let result = { // object is needed for inferred class name\n        [cls.name]: function (...args) {\n            let this_class = new.target === result || !new.target\n            return Reflect.construct(cls, args, this_class ? cls : new.target)\n        }\n    }\n    result[cls.name].prototype = cls.prototype\n    // fix default tag for toString, e.g. [object Action] instead of [object Object]\n    cls.prototype[Symbol.toStringTag] = cls.name\n    return result[cls.name]\n}\n\nfunction _alias(object, from, to) {\n    try {\n        let name = object.constructor.name\n        Object.defineProperty(object, from, {\n            value: util.deprecate(object[to], sub('%s.%s() is renamed to %s.%s()',\n                name, from, name, to)),\n            enumerable: false\n        })\n    } catch {}\n}\n\n// decorator that allows snake_case class methods to be called with camelCase and vice versa\nfunction _camelcase_alias(_class) {\n    for (let name of Object.getOwnPropertyNames(_class.prototype)) {\n        let camelcase = name.replace(/\\w_[a-z]/g, s => s[0] + s[2].toUpperCase())\n        if (camelcase !== name) _alias(_class.prototype, camelcase, name)\n    }\n    return _class\n}\n\nfunction _to_legacy_name(key) {\n    key = key.replace(/\\w_[a-z]/g, s => s[0] + s[2].toUpperCase())\n    if (key === 'default') key = 'defaultValue'\n    if (key === 'const') key = 'constant'\n    return key\n}\n\nfunction _to_new_name(key) {\n    if (key === 'defaultValue') key = 'default'\n    if (key === 'constant') key = 'const'\n    key = key.replace(/[A-Z]/g, c => '_' + c.toLowerCase())\n    return key\n}\n\n// parse options\nlet no_default = Symbol('no_default_value')\nfunction _parse_opts(args, descriptor) {\n    function get_name() {\n        let stack = new Error().stack.split('\\n')\n            .map(x => x.match(/^    at (.*) \\(.*\\)$/))\n            .filter(Boolean)\n            .map(m => m[1])\n            .map(fn => fn.match(/[^ .]*$/)[0])\n\n        if (stack.length && stack[0] === get_name.name) stack.shift()\n        if (stack.length && stack[0] === _parse_opts.name) stack.shift()\n        return stack.length ? stack[0] : ''\n    }\n\n    args = Array.from(args)\n    let kwargs = {}\n    let result = []\n    let last_opt = args.length && args[args.length - 1]\n\n    if (typeof last_opt === 'object' && last_opt !== null && !Array.isArray(last_opt) &&\n        (!last_opt.constructor || last_opt.constructor.name === 'Object')) {\n        kwargs = Object.assign({}, args.pop())\n    }\n\n    // LEGACY (v1 compatibility): camelcase\n    let renames = []\n    for (let key of Object.keys(descriptor)) {\n        let old_name = _to_legacy_name(key)\n        if (old_name !== key && (old_name in kwargs)) {\n            if (key in kwargs) {\n                // default and defaultValue specified at the same time, happens often in old tests\n                //throw new TypeError(sub('%s() got multiple values for argument %r', get_name(), key))\n            } else {\n                kwargs[key] = kwargs[old_name]\n            }\n            renames.push([ old_name, key ])\n            delete kwargs[old_name]\n        }\n    }\n    if (renames.length) {\n        let name = get_name()\n        deprecate('camelcase_' + name, sub('%s(): following options are renamed: %s',\n            name, renames.map(([ a, b ]) => sub('%r -> %r', a, b))))\n    }\n    // end\n\n    let missing_positionals = []\n    let positional_count = args.length\n\n    for (let [ key, def ] of Object.entries(descriptor)) {\n        if (key[0] === '*') {\n            if (key.length > 0 && key[1] === '*') {\n                // LEGACY (v1 compatibility): camelcase\n                let renames = []\n                for (let key of Object.keys(kwargs)) {\n                    let new_name = _to_new_name(key)\n                    if (new_name !== key && (key in kwargs)) {\n                        if (new_name in kwargs) {\n                            // default and defaultValue specified at the same time, happens often in old tests\n                            //throw new TypeError(sub('%s() got multiple values for argument %r', get_name(), new_name))\n                        } else {\n                            kwargs[new_name] = kwargs[key]\n                        }\n                        renames.push([ key, new_name ])\n                        delete kwargs[key]\n                    }\n                }\n                if (renames.length) {\n                    let name = get_name()\n                    deprecate('camelcase_' + name, sub('%s(): following options are renamed: %s',\n                        name, renames.map(([ a, b ]) => sub('%r -> %r', a, b))))\n                }\n                // end\n                result.push(kwargs)\n                kwargs = {}\n            } else {\n                result.push(args)\n                args = []\n            }\n        } else if (key in kwargs && args.length > 0) {\n            throw new TypeError(sub('%s() got multiple values for argument %r', get_name(), key))\n        } else if (key in kwargs) {\n            result.push(kwargs[key])\n            delete kwargs[key]\n        } else if (args.length > 0) {\n            result.push(args.shift())\n        } else if (def !== no_default) {\n            result.push(def)\n        } else {\n            missing_positionals.push(key)\n        }\n    }\n\n    if (Object.keys(kwargs).length) {\n        throw new TypeError(sub('%s() got an unexpected keyword argument %r',\n            get_name(), Object.keys(kwargs)[0]))\n    }\n\n    if (args.length) {\n        let from = Object.entries(descriptor).filter(([ k, v ]) => k[0] !== '*' && v !== no_default).length\n        let to = Object.entries(descriptor).filter(([ k ]) => k[0] !== '*').length\n        throw new TypeError(sub('%s() takes %s positional argument%s but %s %s given',\n            get_name(),\n            from === to ? sub('from %s to %s', from, to) : to,\n            from === to && to === 1 ? '' : 's',\n            positional_count,\n            positional_count === 1 ? 'was' : 'were'))\n    }\n\n    if (missing_positionals.length) {\n        let strs = missing_positionals.map(repr)\n        if (strs.length > 1) strs[strs.length - 1] = 'and ' + strs[strs.length - 1]\n        let str_joined = strs.join(strs.length === 2 ? '' : ', ')\n        throw new TypeError(sub('%s() missing %i required positional argument%s: %s',\n            get_name(), strs.length, strs.length === 1 ? '' : 's', str_joined))\n    }\n\n    return result\n}\n\nlet _deprecations = {}\nfunction deprecate(id, string) {\n    _deprecations[id] = _deprecations[id] || util.deprecate(() => {}, string)\n    _deprecations[id]()\n}\n\n\n// =============================\n// Utility functions and classes\n// =============================\nfunction _AttributeHolder(cls = Object) {\n    /*\n     *  Abstract base class that provides __repr__.\n     *\n     *  The __repr__ method returns a string in the format::\n     *      ClassName(attr=name, attr=name, ...)\n     *  The attributes are determined either by a class-level attribute,\n     *  '_kwarg_names', or by inspecting the instance __dict__.\n     */\n\n    return class _AttributeHolder extends cls {\n        [util.inspect.custom]() {\n            let type_name = this.constructor.name\n            let arg_strings = []\n            let star_args = {}\n            for (let arg of this._get_args()) {\n                arg_strings.push(repr(arg))\n            }\n            for (let [ name, value ] of this._get_kwargs()) {\n                if (/^[a-z_][a-z0-9_$]*$/i.test(name)) {\n                    arg_strings.push(sub('%s=%r', name, value))\n                } else {\n                    star_args[name] = value\n                }\n            }\n            if (Object.keys(star_args).length) {\n                arg_strings.push(sub('**%s', repr(star_args)))\n            }\n            return sub('%s(%s)', type_name, arg_strings.join(', '))\n        }\n\n        toString() {\n            return this[util.inspect.custom]()\n        }\n\n        _get_kwargs() {\n            return Object.entries(this)\n        }\n\n        _get_args() {\n            return []\n        }\n    }\n}\n\n\nfunction _copy_items(items) {\n    if (items === undefined) {\n        return []\n    }\n    return items.slice(0)\n}\n\n\n// ===============\n// Formatting Help\n// ===============\nconst HelpFormatter = _camelcase_alias(_callable(class HelpFormatter {\n    /*\n     *  Formatter for generating usage messages and argument help strings.\n     *\n     *  Only the name of this class is considered a public API. All the methods\n     *  provided by the class are considered an implementation detail.\n     */\n\n    constructor() {\n        let [\n            prog,\n            indent_increment,\n            max_help_position,\n            width\n        ] = _parse_opts(arguments, {\n            prog: no_default,\n            indent_increment: 2,\n            max_help_position: 24,\n            width: undefined\n        })\n\n        // default setting for width\n        if (width === undefined) {\n            width = get_terminal_size().columns\n            width -= 2\n        }\n\n        this._prog = prog\n        this._indent_increment = indent_increment\n        this._max_help_position = Math.min(max_help_position,\n                                      Math.max(width - 20, indent_increment * 2))\n        this._width = width\n\n        this._current_indent = 0\n        this._level = 0\n        this._action_max_length = 0\n\n        this._root_section = this._Section(this, undefined)\n        this._current_section = this._root_section\n\n        this._whitespace_matcher = /[ \\t\\n\\r\\f\\v]+/g // equivalent to python /\\s+/ with ASCII flag\n        this._long_break_matcher = /\\n\\n\\n+/g\n    }\n\n    // ===============================\n    // Section and indentation methods\n    // ===============================\n    _indent() {\n        this._current_indent += this._indent_increment\n        this._level += 1\n    }\n\n    _dedent() {\n        this._current_indent -= this._indent_increment\n        assert(this._current_indent >= 0, 'Indent decreased below 0.')\n        this._level -= 1\n    }\n\n    _add_item(func, args) {\n        this._current_section.items.push([ func, args ])\n    }\n\n    // ========================\n    // Message building methods\n    // ========================\n    start_section(heading) {\n        this._indent()\n        let section = this._Section(this, this._current_section, heading)\n        this._add_item(section.format_help.bind(section), [])\n        this._current_section = section\n    }\n\n    end_section() {\n        this._current_section = this._current_section.parent\n        this._dedent()\n    }\n\n    add_text(text) {\n        if (text !== SUPPRESS && text !== undefined) {\n            this._add_item(this._format_text.bind(this), [text])\n        }\n    }\n\n    add_usage(usage, actions, groups, prefix = undefined) {\n        if (usage !== SUPPRESS) {\n            let args = [ usage, actions, groups, prefix ]\n            this._add_item(this._format_usage.bind(this), args)\n        }\n    }\n\n    add_argument(action) {\n        if (action.help !== SUPPRESS) {\n\n            // find all invocations\n            let invocations = [this._format_action_invocation(action)]\n            for (let subaction of this._iter_indented_subactions(action)) {\n                invocations.push(this._format_action_invocation(subaction))\n            }\n\n            // update the maximum item length\n            let invocation_length = Math.max(...invocations.map(invocation => invocation.length))\n            let action_length = invocation_length + this._current_indent\n            this._action_max_length = Math.max(this._action_max_length,\n                                               action_length)\n\n            // add the item to the list\n            this._add_item(this._format_action.bind(this), [action])\n        }\n    }\n\n    add_arguments(actions) {\n        for (let action of actions) {\n            this.add_argument(action)\n        }\n    }\n\n    // =======================\n    // Help-formatting methods\n    // =======================\n    format_help() {\n        let help = this._root_section.format_help()\n        if (help) {\n            help = help.replace(this._long_break_matcher, '\\n\\n')\n            help = help.replace(/^\\n+|\\n+$/g, '') + '\\n'\n        }\n        return help\n    }\n\n    _join_parts(part_strings) {\n        return part_strings.filter(part => part && part !== SUPPRESS).join('')\n    }\n\n    _format_usage(usage, actions, groups, prefix) {\n        if (prefix === undefined) {\n            prefix = 'usage: '\n        }\n\n        // if usage is specified, use that\n        if (usage !== undefined) {\n            usage = sub(usage, { prog: this._prog })\n\n        // if no optionals or positionals are available, usage is just prog\n        } else if (usage === undefined && !actions.length) {\n            usage = sub('%(prog)s', { prog: this._prog })\n\n        // if optionals and positionals are available, calculate usage\n        } else if (usage === undefined) {\n            let prog = sub('%(prog)s', { prog: this._prog })\n\n            // split optionals from positionals\n            let optionals = []\n            let positionals = []\n            for (let action of actions) {\n                if (action.option_strings.length) {\n                    optionals.push(action)\n                } else {\n                    positionals.push(action)\n                }\n            }\n\n            // build full usage string\n            let action_usage = this._format_actions_usage([].concat(optionals).concat(positionals), groups)\n            usage = [ prog, action_usage ].map(String).join(' ')\n\n            // wrap the usage parts if it's too long\n            let text_width = this._width - this._current_indent\n            if (prefix.length + usage.length > text_width) {\n\n                // break usage into wrappable parts\n                let part_regexp = /\\(.*?\\)+(?=\\s|$)|\\[.*?\\]+(?=\\s|$)|\\S+/g\n                let opt_usage = this._format_actions_usage(optionals, groups)\n                let pos_usage = this._format_actions_usage(positionals, groups)\n                let opt_parts = opt_usage.match(part_regexp) || []\n                let pos_parts = pos_usage.match(part_regexp) || []\n                assert(opt_parts.join(' ') === opt_usage)\n                assert(pos_parts.join(' ') === pos_usage)\n\n                // helper for wrapping lines\n                let get_lines = (parts, indent, prefix = undefined) => {\n                    let lines = []\n                    let line = []\n                    let line_len\n                    if (prefix !== undefined) {\n                        line_len = prefix.length - 1\n                    } else {\n                        line_len = indent.length - 1\n                    }\n                    for (let part of parts) {\n                        if (line_len + 1 + part.length > text_width && line) {\n                            lines.push(indent + line.join(' '))\n                            line = []\n                            line_len = indent.length - 1\n                        }\n                        line.push(part)\n                        line_len += part.length + 1\n                    }\n                    if (line.length) {\n                        lines.push(indent + line.join(' '))\n                    }\n                    if (prefix !== undefined) {\n                        lines[0] = lines[0].slice(indent.length)\n                    }\n                    return lines\n                }\n\n                let lines\n\n                // if prog is short, follow it with optionals or positionals\n                if (prefix.length + prog.length <= 0.75 * text_width) {\n                    let indent = ' '.repeat(prefix.length + prog.length + 1)\n                    if (opt_parts.length) {\n                        lines = get_lines([prog].concat(opt_parts), indent, prefix)\n                        lines = lines.concat(get_lines(pos_parts, indent))\n                    } else if (pos_parts.length) {\n                        lines = get_lines([prog].concat(pos_parts), indent, prefix)\n                    } else {\n                        lines = [prog]\n                    }\n\n                // if prog is long, put it on its own line\n                } else {\n                    let indent = ' '.repeat(prefix.length)\n                    let parts = [].concat(opt_parts).concat(pos_parts)\n                    lines = get_lines(parts, indent)\n                    if (lines.length > 1) {\n                        lines = []\n                        lines = lines.concat(get_lines(opt_parts, indent))\n                        lines = lines.concat(get_lines(pos_parts, indent))\n                    }\n                    lines = [prog].concat(lines)\n                }\n\n                // join lines into usage\n                usage = lines.join('\\n')\n            }\n        }\n\n        // prefix with 'usage:'\n        return sub('%s%s\\n\\n', prefix, usage)\n    }\n\n    _format_actions_usage(actions, groups) {\n        // find group indices and identify actions in groups\n        let group_actions = new Set()\n        let inserts = {}\n        for (let group of groups) {\n            let start = actions.indexOf(group._group_actions[0])\n            if (start === -1) {\n                continue\n            } else {\n                let end = start + group._group_actions.length\n                if (_array_equal(actions.slice(start, end), group._group_actions)) {\n                    for (let action of group._group_actions) {\n                        group_actions.add(action)\n                    }\n                    if (!group.required) {\n                        if (start in inserts) {\n                            inserts[start] += ' ['\n                        } else {\n                            inserts[start] = '['\n                        }\n                        if (end in inserts) {\n                            inserts[end] += ']'\n                        } else {\n                            inserts[end] = ']'\n                        }\n                    } else {\n                        if (start in inserts) {\n                            inserts[start] += ' ('\n                        } else {\n                            inserts[start] = '('\n                        }\n                        if (end in inserts) {\n                            inserts[end] += ')'\n                        } else {\n                            inserts[end] = ')'\n                        }\n                    }\n                    for (let i of range(start + 1, end)) {\n                        inserts[i] = '|'\n                    }\n                }\n            }\n        }\n\n        // collect all actions format strings\n        let parts = []\n        for (let [ i, action ] of Object.entries(actions)) {\n\n            // suppressed arguments are marked with None\n            // remove | separators for suppressed arguments\n            if (action.help === SUPPRESS) {\n                parts.push(undefined)\n                if (inserts[+i] === '|') {\n                    delete inserts[+i]\n                } else if (inserts[+i + 1] === '|') {\n                    delete inserts[+i + 1]\n                }\n\n            // produce all arg strings\n            } else if (!action.option_strings.length) {\n                let default_value = this._get_default_metavar_for_positional(action)\n                let part = this._format_args(action, default_value)\n\n                // if it's in a group, strip the outer []\n                if (group_actions.has(action)) {\n                    if (part[0] === '[' && part[part.length - 1] === ']') {\n                        part = part.slice(1, -1)\n                    }\n                }\n\n                // add the action string to the list\n                parts.push(part)\n\n            // produce the first way to invoke the option in brackets\n            } else {\n                let option_string = action.option_strings[0]\n                let part\n\n                // if the Optional doesn't take a value, format is:\n                //    -s or --long\n                if (action.nargs === 0) {\n                    part = action.format_usage()\n\n                // if the Optional takes a value, format is:\n                //    -s ARGS or --long ARGS\n                } else {\n                    let default_value = this._get_default_metavar_for_optional(action)\n                    let args_string = this._format_args(action, default_value)\n                    part = sub('%s %s', option_string, args_string)\n                }\n\n                // make it look optional if it's not required or in a group\n                if (!action.required && !group_actions.has(action)) {\n                    part = sub('[%s]', part)\n                }\n\n                // add the action string to the list\n                parts.push(part)\n            }\n        }\n\n        // insert things at the necessary indices\n        for (let i of Object.keys(inserts).map(Number).sort((a, b) => b - a)) {\n            parts.splice(+i, 0, inserts[+i])\n        }\n\n        // join all the action items with spaces\n        let text = parts.filter(Boolean).join(' ')\n\n        // clean up separators for mutually exclusive groups\n        text = text.replace(/([\\[(]) /g, '$1')\n        text = text.replace(/ ([\\])])/g, '$1')\n        text = text.replace(/[\\[(] *[\\])]/g, '')\n        text = text.replace(/\\(([^|]*)\\)/g, '$1', text)\n        text = text.trim()\n\n        // return the text\n        return text\n    }\n\n    _format_text(text) {\n        if (text.includes('%(prog)')) {\n            text = sub(text, { prog: this._prog })\n        }\n        let text_width = Math.max(this._width - this._current_indent, 11)\n        let indent = ' '.repeat(this._current_indent)\n        return this._fill_text(text, text_width, indent) + '\\n\\n'\n    }\n\n    _format_action(action) {\n        // determine the required width and the entry label\n        let help_position = Math.min(this._action_max_length + 2,\n                                     this._max_help_position)\n        let help_width = Math.max(this._width - help_position, 11)\n        let action_width = help_position - this._current_indent - 2\n        let action_header = this._format_action_invocation(action)\n        let indent_first\n\n        // no help; start on same line and add a final newline\n        if (!action.help) {\n            let tup = [ this._current_indent, '', action_header ]\n            action_header = sub('%*s%s\\n', ...tup)\n\n        // short action name; start on the same line and pad two spaces\n        } else if (action_header.length <= action_width) {\n            let tup = [ this._current_indent, '', action_width, action_header ]\n            action_header = sub('%*s%-*s  ', ...tup)\n            indent_first = 0\n\n        // long action name; start on the next line\n        } else {\n            let tup = [ this._current_indent, '', action_header ]\n            action_header = sub('%*s%s\\n', ...tup)\n            indent_first = help_position\n        }\n\n        // collect the pieces of the action help\n        let parts = [action_header]\n\n        // if there was help for the action, add lines of help text\n        if (action.help) {\n            let help_text = this._expand_help(action)\n            let help_lines = this._split_lines(help_text, help_width)\n            parts.push(sub('%*s%s\\n', indent_first, '', help_lines[0]))\n            for (let line of help_lines.slice(1)) {\n                parts.push(sub('%*s%s\\n', help_position, '', line))\n            }\n\n        // or add a newline if the description doesn't end with one\n        } else if (!action_header.endsWith('\\n')) {\n            parts.push('\\n')\n        }\n\n        // if there are any sub-actions, add their help as well\n        for (let subaction of this._iter_indented_subactions(action)) {\n            parts.push(this._format_action(subaction))\n        }\n\n        // return a single string\n        return this._join_parts(parts)\n    }\n\n    _format_action_invocation(action) {\n        if (!action.option_strings.length) {\n            let default_value = this._get_default_metavar_for_positional(action)\n            let metavar = this._metavar_formatter(action, default_value)(1)[0]\n            return metavar\n\n        } else {\n            let parts = []\n\n            // if the Optional doesn't take a value, format is:\n            //    -s, --long\n            if (action.nargs === 0) {\n                parts = parts.concat(action.option_strings)\n\n            // if the Optional takes a value, format is:\n            //    -s ARGS, --long ARGS\n            } else {\n                let default_value = this._get_default_metavar_for_optional(action)\n                let args_string = this._format_args(action, default_value)\n                for (let option_string of action.option_strings) {\n                    parts.push(sub('%s %s', option_string, args_string))\n                }\n            }\n\n            return parts.join(', ')\n        }\n    }\n\n    _metavar_formatter(action, default_metavar) {\n        let result\n        if (action.metavar !== undefined) {\n            result = action.metavar\n        } else if (action.choices !== undefined) {\n            let choice_strs = _choices_to_array(action.choices).map(String)\n            result = sub('{%s}', choice_strs.join(','))\n        } else {\n            result = default_metavar\n        }\n\n        function format(tuple_size) {\n            if (Array.isArray(result)) {\n                return result\n            } else {\n                return Array(tuple_size).fill(result)\n            }\n        }\n        return format\n    }\n\n    _format_args(action, default_metavar) {\n        let get_metavar = this._metavar_formatter(action, default_metavar)\n        let result\n        if (action.nargs === undefined) {\n            result = sub('%s', ...get_metavar(1))\n        } else if (action.nargs === OPTIONAL) {\n            result = sub('[%s]', ...get_metavar(1))\n        } else if (action.nargs === ZERO_OR_MORE) {\n            let metavar = get_metavar(1)\n            if (metavar.length === 2) {\n                result = sub('[%s [%s ...]]', ...metavar)\n            } else {\n                result = sub('[%s ...]', ...metavar)\n            }\n        } else if (action.nargs === ONE_OR_MORE) {\n            result = sub('%s [%s ...]', ...get_metavar(2))\n        } else if (action.nargs === REMAINDER) {\n            result = '...'\n        } else if (action.nargs === PARSER) {\n            result = sub('%s ...', ...get_metavar(1))\n        } else if (action.nargs === SUPPRESS) {\n            result = ''\n        } else {\n            let formats\n            try {\n                formats = range(action.nargs).map(() => '%s')\n            } catch (err) {\n                throw new TypeError('invalid nargs value')\n            }\n            result = sub(formats.join(' '), ...get_metavar(action.nargs))\n        }\n        return result\n    }\n\n    _expand_help(action) {\n        let params = Object.assign({ prog: this._prog }, action)\n        for (let name of Object.keys(params)) {\n            if (params[name] === SUPPRESS) {\n                delete params[name]\n            }\n        }\n        for (let name of Object.keys(params)) {\n            if (params[name] && params[name].name) {\n                params[name] = params[name].name\n            }\n        }\n        if (params.choices !== undefined) {\n            let choices_str = _choices_to_array(params.choices).map(String).join(', ')\n            params.choices = choices_str\n        }\n        // LEGACY (v1 compatibility): camelcase\n        for (let key of Object.keys(params)) {\n            let old_name = _to_legacy_name(key)\n            if (old_name !== key) {\n                params[old_name] = params[key]\n            }\n        }\n        // end\n        return sub(this._get_help_string(action), params)\n    }\n\n    * _iter_indented_subactions(action) {\n        if (typeof action._get_subactions === 'function') {\n            this._indent()\n            yield* action._get_subactions()\n            this._dedent()\n        }\n    }\n\n    _split_lines(text, width) {\n        text = text.replace(this._whitespace_matcher, ' ').trim()\n        // The textwrap module is used only for formatting help.\n        // Delay its import for speeding up the common usage of argparse.\n        let textwrap = require('./lib/textwrap')\n        return textwrap.wrap(text, { width })\n    }\n\n    _fill_text(text, width, indent) {\n        text = text.replace(this._whitespace_matcher, ' ').trim()\n        let textwrap = require('./lib/textwrap')\n        return textwrap.fill(text, { width,\n                                     initial_indent: indent,\n                                     subsequent_indent: indent })\n    }\n\n    _get_help_string(action) {\n        return action.help\n    }\n\n    _get_default_metavar_for_optional(action) {\n        return action.dest.toUpperCase()\n    }\n\n    _get_default_metavar_for_positional(action) {\n        return action.dest\n    }\n}))\n\nHelpFormatter.prototype._Section = _callable(class _Section {\n\n    constructor(formatter, parent, heading = undefined) {\n        this.formatter = formatter\n        this.parent = parent\n        this.heading = heading\n        this.items = []\n    }\n\n    format_help() {\n        // format the indented section\n        if (this.parent !== undefined) {\n            this.formatter._indent()\n        }\n        let item_help = this.formatter._join_parts(this.items.map(([ func, args ]) => func.apply(null, args)))\n        if (this.parent !== undefined) {\n            this.formatter._dedent()\n        }\n\n        // return nothing if the section was empty\n        if (!item_help) {\n            return ''\n        }\n\n        // add the heading if the section was non-empty\n        let heading\n        if (this.heading !== SUPPRESS && this.heading !== undefined) {\n            let current_indent = this.formatter._current_indent\n            heading = sub('%*s%s:\\n', current_indent, '', this.heading)\n        } else {\n            heading = ''\n        }\n\n        // join the section-initial newline, the heading and the help\n        return this.formatter._join_parts(['\\n', heading, item_help, '\\n'])\n    }\n})\n\n\nconst RawDescriptionHelpFormatter = _camelcase_alias(_callable(class RawDescriptionHelpFormatter extends HelpFormatter {\n    /*\n     *  Help message formatter which retains any formatting in descriptions.\n     *\n     *  Only the name of this class is considered a public API. All the methods\n     *  provided by the class are considered an implementation detail.\n     */\n\n    _fill_text(text, width, indent) {\n        return splitlines(text, true).map(line => indent + line).join('')\n    }\n}))\n\n\nconst RawTextHelpFormatter = _camelcase_alias(_callable(class RawTextHelpFormatter extends RawDescriptionHelpFormatter {\n    /*\n     *  Help message formatter which retains formatting of all help text.\n     *\n     *  Only the name of this class is considered a public API. All the methods\n     *  provided by the class are considered an implementation detail.\n     */\n\n    _split_lines(text/*, width*/) {\n        return splitlines(text)\n    }\n}))\n\n\nconst ArgumentDefaultsHelpFormatter = _camelcase_alias(_callable(class ArgumentDefaultsHelpFormatter extends HelpFormatter {\n    /*\n     *  Help message formatter which adds default values to argument help.\n     *\n     *  Only the name of this class is considered a public API. All the methods\n     *  provided by the class are considered an implementation detail.\n     */\n\n    _get_help_string(action) {\n        let help = action.help\n        // LEGACY (v1 compatibility): additional check for defaultValue needed\n        if (!action.help.includes('%(default)') && !action.help.includes('%(defaultValue)')) {\n            if (action.default !== SUPPRESS) {\n                let defaulting_nargs = [OPTIONAL, ZERO_OR_MORE]\n                if (action.option_strings.length || defaulting_nargs.includes(action.nargs)) {\n                    help += ' (default: %(default)s)'\n                }\n            }\n        }\n        return help\n    }\n}))\n\n\nconst MetavarTypeHelpFormatter = _camelcase_alias(_callable(class MetavarTypeHelpFormatter extends HelpFormatter {\n    /*\n     *  Help message formatter which uses the argument 'type' as the default\n     *  metavar value (instead of the argument 'dest')\n     *\n     *  Only the name of this class is considered a public API. All the methods\n     *  provided by the class are considered an implementation detail.\n     */\n\n    _get_default_metavar_for_optional(action) {\n        return typeof action.type === 'function' ? action.type.name : action.type\n    }\n\n    _get_default_metavar_for_positional(action) {\n        return typeof action.type === 'function' ? action.type.name : action.type\n    }\n}))\n\n\n// =====================\n// Options and Arguments\n// =====================\nfunction _get_action_name(argument) {\n    if (argument === undefined) {\n        return undefined\n    } else if (argument.option_strings.length) {\n        return argument.option_strings.join('/')\n    } else if (![ undefined, SUPPRESS ].includes(argument.metavar)) {\n        return argument.metavar\n    } else if (![ undefined, SUPPRESS ].includes(argument.dest)) {\n        return argument.dest\n    } else {\n        return undefined\n    }\n}\n\n\nconst ArgumentError = _callable(class ArgumentError extends Error {\n    /*\n     *  An error from creating or using an argument (optional or positional).\n     *\n     *  The string value of this exception is the message, augmented with\n     *  information about the argument that caused it.\n     */\n\n    constructor(argument, message) {\n        super()\n        this.name = 'ArgumentError'\n        this._argument_name = _get_action_name(argument)\n        this._message = message\n        this.message = this.str()\n    }\n\n    str() {\n        let format\n        if (this._argument_name === undefined) {\n            format = '%(message)s'\n        } else {\n            format = 'argument %(argument_name)s: %(message)s'\n        }\n        return sub(format, { message: this._message,\n                             argument_name: this._argument_name })\n    }\n})\n\n\nconst ArgumentTypeError = _callable(class ArgumentTypeError extends Error {\n    /*\n     * An error from trying to convert a command line string to a type.\n     */\n\n    constructor(message) {\n        super(message)\n        this.name = 'ArgumentTypeError'\n    }\n})\n\n\n// ==============\n// Action classes\n// ==============\nconst Action = _camelcase_alias(_callable(class Action extends _AttributeHolder(Function) {\n    /*\n     *  Information about how to convert command line strings to Python objects.\n     *\n     *  Action objects are used by an ArgumentParser to represent the information\n     *  needed to parse a single argument from one or more strings from the\n     *  command line. The keyword arguments to the Action constructor are also\n     *  all attributes of Action instances.\n     *\n     *  Keyword Arguments:\n     *\n     *      - option_strings -- A list of command-line option strings which\n     *          should be associated with this action.\n     *\n     *      - dest -- The name of the attribute to hold the created object(s)\n     *\n     *      - nargs -- The number of command-line arguments that should be\n     *          consumed. By default, one argument will be consumed and a single\n     *          value will be produced.  Other values include:\n     *              - N (an integer) consumes N arguments (and produces a list)\n     *              - '?' consumes zero or one arguments\n     *              - '*' consumes zero or more arguments (and produces a list)\n     *              - '+' consumes one or more arguments (and produces a list)\n     *          Note that the difference between the default and nargs=1 is that\n     *          with the default, a single value will be produced, while with\n     *          nargs=1, a list containing a single value will be produced.\n     *\n     *      - const -- The value to be produced if the option is specified and the\n     *          option uses an action that takes no values.\n     *\n     *      - default -- The value to be produced if the option is not specified.\n     *\n     *      - type -- A callable that accepts a single string argument, and\n     *          returns the converted value.  The standard Python types str, int,\n     *          float, and complex are useful examples of such callables.  If None,\n     *          str is used.\n     *\n     *      - choices -- A container of values that should be allowed. If not None,\n     *          after a command-line argument has been converted to the appropriate\n     *          type, an exception will be raised if it is not a member of this\n     *          collection.\n     *\n     *      - required -- True if the action must always be specified at the\n     *          command line. This is only meaningful for optional command-line\n     *          arguments.\n     *\n     *      - help -- The help string describing the argument.\n     *\n     *      - metavar -- The name to be used for the option's argument with the\n     *          help string. If None, the 'dest' value will be used as the name.\n     */\n\n    constructor() {\n        let [\n            option_strings,\n            dest,\n            nargs,\n            const_value,\n            default_value,\n            type,\n            choices,\n            required,\n            help,\n            metavar\n        ] = _parse_opts(arguments, {\n            option_strings: no_default,\n            dest: no_default,\n            nargs: undefined,\n            const: undefined,\n            default: undefined,\n            type: undefined,\n            choices: undefined,\n            required: false,\n            help: undefined,\n            metavar: undefined\n        })\n\n        // when this class is called as a function, redirect it to .call() method of itself\n        super('return arguments.callee.call.apply(arguments.callee, arguments)')\n\n        this.option_strings = option_strings\n        this.dest = dest\n        this.nargs = nargs\n        this.const = const_value\n        this.default = default_value\n        this.type = type\n        this.choices = choices\n        this.required = required\n        this.help = help\n        this.metavar = metavar\n    }\n\n    _get_kwargs() {\n        let names = [\n            'option_strings',\n            'dest',\n            'nargs',\n            'const',\n            'default',\n            'type',\n            'choices',\n            'help',\n            'metavar'\n        ]\n        return names.map(name => [ name, getattr(this, name) ])\n    }\n\n    format_usage() {\n        return this.option_strings[0]\n    }\n\n    call(/*parser, namespace, values, option_string = undefined*/) {\n        throw new Error('.call() not defined')\n    }\n}))\n\n\nconst BooleanOptionalAction = _camelcase_alias(_callable(class BooleanOptionalAction extends Action {\n\n    constructor() {\n        let [\n            option_strings,\n            dest,\n            default_value,\n            type,\n            choices,\n            required,\n            help,\n            metavar\n        ] = _parse_opts(arguments, {\n            option_strings: no_default,\n            dest: no_default,\n            default: undefined,\n            type: undefined,\n            choices: undefined,\n            required: false,\n            help: undefined,\n            metavar: undefined\n        })\n\n        let _option_strings = []\n        for (let option_string of option_strings) {\n            _option_strings.push(option_string)\n\n            if (option_string.startsWith('--')) {\n                option_string = '--no-' + option_string.slice(2)\n                _option_strings.push(option_string)\n            }\n        }\n\n        if (help !== undefined && default_value !== undefined) {\n            help += ` (default: ${default_value})`\n        }\n\n        super({\n            option_strings: _option_strings,\n            dest,\n            nargs: 0,\n            default: default_value,\n            type,\n            choices,\n            required,\n            help,\n            metavar\n        })\n    }\n\n    call(parser, namespace, values, option_string = undefined) {\n        if (this.option_strings.includes(option_string)) {\n            setattr(namespace, this.dest, !option_string.startsWith('--no-'))\n        }\n    }\n\n    format_usage() {\n        return this.option_strings.join(' | ')\n    }\n}))\n\n\nconst _StoreAction = _callable(class _StoreAction extends Action {\n\n    constructor() {\n        let [\n            option_strings,\n            dest,\n            nargs,\n            const_value,\n            default_value,\n            type,\n            choices,\n            required,\n            help,\n            metavar\n        ] = _parse_opts(arguments, {\n            option_strings: no_default,\n            dest: no_default,\n            nargs: undefined,\n            const: undefined,\n            default: undefined,\n            type: undefined,\n            choices: undefined,\n            required: false,\n            help: undefined,\n            metavar: undefined\n        })\n\n        if (nargs === 0) {\n            throw new TypeError('nargs for store actions must be != 0; if you ' +\n                        'have nothing to store, actions such as store ' +\n                        'true or store const may be more appropriate')\n        }\n        if (const_value !== undefined && nargs !== OPTIONAL) {\n            throw new TypeError(sub('nargs must be %r to supply const', OPTIONAL))\n        }\n        super({\n            option_strings,\n            dest,\n            nargs,\n            const: const_value,\n            default: default_value,\n            type,\n            choices,\n            required,\n            help,\n            metavar\n        })\n    }\n\n    call(parser, namespace, values/*, option_string = undefined*/) {\n        setattr(namespace, this.dest, values)\n    }\n})\n\n\nconst _StoreConstAction = _callable(class _StoreConstAction extends Action {\n\n    constructor() {\n        let [\n            option_strings,\n            dest,\n            const_value,\n            default_value,\n            required,\n            help\n            //, metavar\n        ] = _parse_opts(arguments, {\n            option_strings: no_default,\n            dest: no_default,\n            const: no_default,\n            default: undefined,\n            required: false,\n            help: undefined,\n            metavar: undefined\n        })\n\n        super({\n            option_strings,\n            dest,\n            nargs: 0,\n            const: const_value,\n            default: default_value,\n            required,\n            help\n        })\n    }\n\n    call(parser, namespace/*, values, option_string = undefined*/) {\n        setattr(namespace, this.dest, this.const)\n    }\n})\n\n\nconst _StoreTrueAction = _callable(class _StoreTrueAction extends _StoreConstAction {\n\n    constructor() {\n        let [\n            option_strings,\n            dest,\n            default_value,\n            required,\n            help\n        ] = _parse_opts(arguments, {\n            option_strings: no_default,\n            dest: no_default,\n            default: false,\n            required: false,\n            help: undefined\n        })\n\n        super({\n            option_strings,\n            dest,\n            const: true,\n            default: default_value,\n            required,\n            help\n        })\n    }\n})\n\n\nconst _StoreFalseAction = _callable(class _StoreFalseAction extends _StoreConstAction {\n\n    constructor() {\n        let [\n            option_strings,\n            dest,\n            default_value,\n            required,\n            help\n        ] = _parse_opts(arguments, {\n            option_strings: no_default,\n            dest: no_default,\n            default: true,\n            required: false,\n            help: undefined\n        })\n\n        super({\n            option_strings,\n            dest,\n            const: false,\n            default: default_value,\n            required,\n            help\n        })\n    }\n})\n\n\nconst _AppendAction = _callable(class _AppendAction extends Action {\n\n    constructor() {\n        let [\n            option_strings,\n            dest,\n            nargs,\n            const_value,\n            default_value,\n            type,\n            choices,\n            required,\n            help,\n            metavar\n        ] = _parse_opts(arguments, {\n            option_strings: no_default,\n            dest: no_default,\n            nargs: undefined,\n            const: undefined,\n            default: undefined,\n            type: undefined,\n            choices: undefined,\n            required: false,\n            help: undefined,\n            metavar: undefined\n        })\n\n        if (nargs === 0) {\n            throw new TypeError('nargs for append actions must be != 0; if arg ' +\n                        'strings are not supplying the value to append, ' +\n                        'the append const action may be more appropriate')\n        }\n        if (const_value !== undefined && nargs !== OPTIONAL) {\n            throw new TypeError(sub('nargs must be %r to supply const', OPTIONAL))\n        }\n        super({\n            option_strings,\n            dest,\n            nargs,\n            const: const_value,\n            default: default_value,\n            type,\n            choices,\n            required,\n            help,\n            metavar\n        })\n    }\n\n    call(parser, namespace, values/*, option_string = undefined*/) {\n        let items = getattr(namespace, this.dest, undefined)\n        items = _copy_items(items)\n        items.push(values)\n        setattr(namespace, this.dest, items)\n    }\n})\n\n\nconst _AppendConstAction = _callable(class _AppendConstAction extends Action {\n\n    constructor() {\n        let [\n            option_strings,\n            dest,\n            const_value,\n            default_value,\n            required,\n            help,\n            metavar\n        ] = _parse_opts(arguments, {\n            option_strings: no_default,\n            dest: no_default,\n            const: no_default,\n            default: undefined,\n            required: false,\n            help: undefined,\n            metavar: undefined\n        })\n\n        super({\n            option_strings,\n            dest,\n            nargs: 0,\n            const: const_value,\n            default: default_value,\n            required,\n            help,\n            metavar\n        })\n    }\n\n    call(parser, namespace/*, values, option_string = undefined*/) {\n        let items = getattr(namespace, this.dest, undefined)\n        items = _copy_items(items)\n        items.push(this.const)\n        setattr(namespace, this.dest, items)\n    }\n})\n\n\nconst _CountAction = _callable(class _CountAction extends Action {\n\n    constructor() {\n        let [\n            option_strings,\n            dest,\n            default_value,\n            required,\n            help\n        ] = _parse_opts(arguments, {\n            option_strings: no_default,\n            dest: no_default,\n            default: undefined,\n            required: false,\n            help: undefined\n        })\n\n        super({\n            option_strings,\n            dest,\n            nargs: 0,\n            default: default_value,\n            required,\n            help\n        })\n    }\n\n    call(parser, namespace/*, values, option_string = undefined*/) {\n        let count = getattr(namespace, this.dest, undefined)\n        if (count === undefined) {\n            count = 0\n        }\n        setattr(namespace, this.dest, count + 1)\n    }\n})\n\n\nconst _HelpAction = _callable(class _HelpAction extends Action {\n\n    constructor() {\n        let [\n            option_strings,\n            dest,\n            default_value,\n            help\n        ] = _parse_opts(arguments, {\n            option_strings: no_default,\n            dest: SUPPRESS,\n            default: SUPPRESS,\n            help: undefined\n        })\n\n        super({\n            option_strings,\n            dest,\n            default: default_value,\n            nargs: 0,\n            help\n        })\n    }\n\n    call(parser/*, namespace, values, option_string = undefined*/) {\n        parser.print_help()\n        parser.exit()\n    }\n})\n\n\nconst _VersionAction = _callable(class _VersionAction extends Action {\n\n    constructor() {\n        let [\n            option_strings,\n            version,\n            dest,\n            default_value,\n            help\n        ] = _parse_opts(arguments, {\n            option_strings: no_default,\n            version: undefined,\n            dest: SUPPRESS,\n            default: SUPPRESS,\n            help: \"show program's version number and exit\"\n        })\n\n        super({\n            option_strings,\n            dest,\n            default: default_value,\n            nargs: 0,\n            help\n        })\n        this.version = version\n    }\n\n    call(parser/*, namespace, values, option_string = undefined*/) {\n        let version = this.version\n        if (version === undefined) {\n            version = parser.version\n        }\n        let formatter = parser._get_formatter()\n        formatter.add_text(version)\n        parser._print_message(formatter.format_help(), process.stdout)\n        parser.exit()\n    }\n})\n\n\nconst _SubParsersAction = _camelcase_alias(_callable(class _SubParsersAction extends Action {\n\n    constructor() {\n        let [\n            option_strings,\n            prog,\n            parser_class,\n            dest,\n            required,\n            help,\n            metavar\n        ] = _parse_opts(arguments, {\n            option_strings: no_default,\n            prog: no_default,\n            parser_class: no_default,\n            dest: SUPPRESS,\n            required: false,\n            help: undefined,\n            metavar: undefined\n        })\n\n        let name_parser_map = {}\n\n        super({\n            option_strings,\n            dest,\n            nargs: PARSER,\n            choices: name_parser_map,\n            required,\n            help,\n            metavar\n        })\n\n        this._prog_prefix = prog\n        this._parser_class = parser_class\n        this._name_parser_map = name_parser_map\n        this._choices_actions = []\n    }\n\n    add_parser() {\n        let [\n            name,\n            kwargs\n        ] = _parse_opts(arguments, {\n            name: no_default,\n            '**kwargs': no_default\n        })\n\n        // set prog from the existing prefix\n        if (kwargs.prog === undefined) {\n            kwargs.prog = sub('%s %s', this._prog_prefix, name)\n        }\n\n        let aliases = getattr(kwargs, 'aliases', [])\n        delete kwargs.aliases\n\n        // create a pseudo-action to hold the choice help\n        if ('help' in kwargs) {\n            let help = kwargs.help\n            delete kwargs.help\n            let choice_action = this._ChoicesPseudoAction(name, aliases, help)\n            this._choices_actions.push(choice_action)\n        }\n\n        // create the parser and add it to the map\n        let parser = new this._parser_class(kwargs)\n        this._name_parser_map[name] = parser\n\n        // make parser available under aliases also\n        for (let alias of aliases) {\n            this._name_parser_map[alias] = parser\n        }\n\n        return parser\n    }\n\n    _get_subactions() {\n        return this._choices_actions\n    }\n\n    call(parser, namespace, values/*, option_string = undefined*/) {\n        let parser_name = values[0]\n        let arg_strings = values.slice(1)\n\n        // set the parser name if requested\n        if (this.dest !== SUPPRESS) {\n            setattr(namespace, this.dest, parser_name)\n        }\n\n        // select the parser\n        if (hasattr(this._name_parser_map, parser_name)) {\n            parser = this._name_parser_map[parser_name]\n        } else {\n            let args = {parser_name,\n                        choices: this._name_parser_map.join(', ')}\n            let msg = sub('unknown parser %(parser_name)r (choices: %(choices)s)', args)\n            throw new ArgumentError(this, msg)\n        }\n\n        // parse all the remaining options into the namespace\n        // store any unrecognized options on the object, so that the top\n        // level parser can decide what to do with them\n\n        // In case this subparser defines new defaults, we parse them\n        // in a new namespace object and then update the original\n        // namespace for the relevant parts.\n        let subnamespace\n        [ subnamespace, arg_strings ] = parser.parse_known_args(arg_strings, undefined)\n        for (let [ key, value ] of Object.entries(subnamespace)) {\n            setattr(namespace, key, value)\n        }\n\n        if (arg_strings.length) {\n            setdefault(namespace, _UNRECOGNIZED_ARGS_ATTR, [])\n            getattr(namespace, _UNRECOGNIZED_ARGS_ATTR).push(...arg_strings)\n        }\n    }\n}))\n\n\n_SubParsersAction.prototype._ChoicesPseudoAction = _callable(class _ChoicesPseudoAction extends Action {\n    constructor(name, aliases, help) {\n        let metavar = name, dest = name\n        if (aliases.length) {\n            metavar += sub(' (%s)', aliases.join(', '))\n        }\n        super({ option_strings: [], dest, help, metavar })\n    }\n})\n\n\nconst _ExtendAction = _callable(class _ExtendAction extends _AppendAction {\n    call(parser, namespace, values/*, option_string = undefined*/) {\n        let items = getattr(namespace, this.dest, undefined)\n        items = _copy_items(items)\n        items = items.concat(values)\n        setattr(namespace, this.dest, items)\n    }\n})\n\n\n// ==============\n// Type classes\n// ==============\nconst FileType = _callable(class FileType extends Function {\n    /*\n     *  Factory for creating file object types\n     *\n     *  Instances of FileType are typically passed as type= arguments to the\n     *  ArgumentParser add_argument() method.\n     *\n     *  Keyword Arguments:\n     *      - mode -- A string indicating how the file is to be opened. Accepts the\n     *          same values as the builtin open() function.\n     *      - bufsize -- The file's desired buffer size. Accepts the same values as\n     *          the builtin open() function.\n     *      - encoding -- The file's encoding. Accepts the same values as the\n     *          builtin open() function.\n     *      - errors -- A string indicating how encoding and decoding errors are to\n     *          be handled. Accepts the same value as the builtin open() function.\n     */\n\n    constructor() {\n        let [\n            flags,\n            encoding,\n            mode,\n            autoClose,\n            emitClose,\n            start,\n            end,\n            highWaterMark,\n            fs\n        ] = _parse_opts(arguments, {\n            flags: 'r',\n            encoding: undefined,\n            mode: undefined, // 0o666\n            autoClose: undefined, // true\n            emitClose: undefined, // false\n            start: undefined, // 0\n            end: undefined, // Infinity\n            highWaterMark: undefined, // 64 * 1024\n            fs: undefined\n        })\n\n        // when this class is called as a function, redirect it to .call() method of itself\n        super('return arguments.callee.call.apply(arguments.callee, arguments)')\n\n        Object.defineProperty(this, 'name', {\n            get() {\n                return sub('FileType(%r)', flags)\n            }\n        })\n        this._flags = flags\n        this._options = {}\n        if (encoding !== undefined) this._options.encoding = encoding\n        if (mode !== undefined) this._options.mode = mode\n        if (autoClose !== undefined) this._options.autoClose = autoClose\n        if (emitClose !== undefined) this._options.emitClose = emitClose\n        if (start !== undefined) this._options.start = start\n        if (end !== undefined) this._options.end = end\n        if (highWaterMark !== undefined) this._options.highWaterMark = highWaterMark\n        if (fs !== undefined) this._options.fs = fs\n    }\n\n    call(string) {\n        // the special argument \"-\" means sys.std{in,out}\n        if (string === '-') {\n            if (this._flags.includes('r')) {\n                return process.stdin\n            } else if (this._flags.includes('w')) {\n                return process.stdout\n            } else {\n                let msg = sub('argument \"-\" with mode %r', this._flags)\n                throw new TypeError(msg)\n            }\n        }\n\n        // all other arguments are used as file names\n        let fd\n        try {\n            fd = fs.openSync(string, this._flags, this._options.mode)\n        } catch (e) {\n            let args = { filename: string, error: e.message }\n            let message = \"can't open '%(filename)s': %(error)s\"\n            throw new ArgumentTypeError(sub(message, args))\n        }\n\n        let options = Object.assign({ fd, flags: this._flags }, this._options)\n        if (this._flags.includes('r')) {\n            return fs.createReadStream(undefined, options)\n        } else if (this._flags.includes('w')) {\n            return fs.createWriteStream(undefined, options)\n        } else {\n            let msg = sub('argument \"%s\" with mode %r', string, this._flags)\n            throw new TypeError(msg)\n        }\n    }\n\n    [util.inspect.custom]() {\n        let args = [ this._flags ]\n        let kwargs = Object.entries(this._options).map(([ k, v ]) => {\n            if (k === 'mode') v = { value: v, [util.inspect.custom]() { return '0o' + this.value.toString(8) } }\n            return [ k, v ]\n        })\n        let args_str = []\n                .concat(args.filter(arg => arg !== -1).map(repr))\n                .concat(kwargs.filter(([/*kw*/, arg]) => arg !== undefined)\n                    .map(([kw, arg]) => sub('%s=%r', kw, arg)))\n                .join(', ')\n        return sub('%s(%s)', this.constructor.name, args_str)\n    }\n\n    toString() {\n        return this[util.inspect.custom]()\n    }\n})\n\n// ===========================\n// Optional and Positional Parsing\n// ===========================\nconst Namespace = _callable(class Namespace extends _AttributeHolder() {\n    /*\n     *  Simple object for storing attributes.\n     *\n     *  Implements equality by attribute names and values, and provides a simple\n     *  string representation.\n     */\n\n    constructor(options = {}) {\n        super()\n        Object.assign(this, options)\n    }\n})\n\n// unset string tag to mimic plain object\nNamespace.prototype[Symbol.toStringTag] = undefined\n\n\nconst _ActionsContainer = _camelcase_alias(_callable(class _ActionsContainer {\n\n    constructor() {\n        let [\n            description,\n            prefix_chars,\n            argument_default,\n            conflict_handler\n        ] = _parse_opts(arguments, {\n            description: no_default,\n            prefix_chars: no_default,\n            argument_default: no_default,\n            conflict_handler: no_default\n        })\n\n        this.description = description\n        this.argument_default = argument_default\n        this.prefix_chars = prefix_chars\n        this.conflict_handler = conflict_handler\n\n        // set up registries\n        this._registries = {}\n\n        // register actions\n        this.register('action', undefined, _StoreAction)\n        this.register('action', 'store', _StoreAction)\n        this.register('action', 'store_const', _StoreConstAction)\n        this.register('action', 'store_true', _StoreTrueAction)\n        this.register('action', 'store_false', _StoreFalseAction)\n        this.register('action', 'append', _AppendAction)\n        this.register('action', 'append_const', _AppendConstAction)\n        this.register('action', 'count', _CountAction)\n        this.register('action', 'help', _HelpAction)\n        this.register('action', 'version', _VersionAction)\n        this.register('action', 'parsers', _SubParsersAction)\n        this.register('action', 'extend', _ExtendAction)\n        // LEGACY (v1 compatibility): camelcase variants\n        ;[ 'storeConst', 'storeTrue', 'storeFalse', 'appendConst' ].forEach(old_name => {\n            let new_name = _to_new_name(old_name)\n            this.register('action', old_name, util.deprecate(this._registry_get('action', new_name),\n                sub('{action: \"%s\"} is renamed to {action: \"%s\"}', old_name, new_name)))\n        })\n        // end\n\n        // raise an exception if the conflict handler is invalid\n        this._get_handler()\n\n        // action storage\n        this._actions = []\n        this._option_string_actions = {}\n\n        // groups\n        this._action_groups = []\n        this._mutually_exclusive_groups = []\n\n        // defaults storage\n        this._defaults = {}\n\n        // determines whether an \"option\" looks like a negative number\n        this._negative_number_matcher = /^-\\d+$|^-\\d*\\.\\d+$/\n\n        // whether or not there are any optionals that look like negative\n        // numbers -- uses a list so it can be shared and edited\n        this._has_negative_number_optionals = []\n    }\n\n    // ====================\n    // Registration methods\n    // ====================\n    register(registry_name, value, object) {\n        let registry = setdefault(this._registries, registry_name, {})\n        registry[value] = object\n    }\n\n    _registry_get(registry_name, value, default_value = undefined) {\n        return getattr(this._registries[registry_name], value, default_value)\n    }\n\n    // ==================================\n    // Namespace default accessor methods\n    // ==================================\n    set_defaults(kwargs) {\n        Object.assign(this._defaults, kwargs)\n\n        // if these defaults match any existing arguments, replace\n        // the previous default on the object with the new one\n        for (let action of this._actions) {\n            if (action.dest in kwargs) {\n                action.default = kwargs[action.dest]\n            }\n        }\n    }\n\n    get_default(dest) {\n        for (let action of this._actions) {\n            if (action.dest === dest && action.default !== undefined) {\n                return action.default\n            }\n        }\n        return this._defaults[dest]\n    }\n\n\n    // =======================\n    // Adding argument actions\n    // =======================\n    add_argument() {\n        /*\n         *  add_argument(dest, ..., name=value, ...)\n         *  add_argument(option_string, option_string, ..., name=value, ...)\n         */\n        let [\n            args,\n            kwargs\n        ] = _parse_opts(arguments, {\n            '*args': no_default,\n            '**kwargs': no_default\n        })\n        // LEGACY (v1 compatibility), old-style add_argument([ args ], { options })\n        if (args.length === 1 && Array.isArray(args[0])) {\n            args = args[0]\n            deprecate('argument-array',\n                sub('use add_argument(%(args)s, {...}) instead of add_argument([ %(args)s ], { ... })', {\n                    args: args.map(repr).join(', ')\n                }))\n        }\n        // end\n\n        // if no positional args are supplied or only one is supplied and\n        // it doesn't look like an option string, parse a positional\n        // argument\n        let chars = this.prefix_chars\n        if (!args.length || args.length === 1 && !chars.includes(args[0][0])) {\n            if (args.length && 'dest' in kwargs) {\n                throw new TypeError('dest supplied twice for positional argument')\n            }\n            kwargs = this._get_positional_kwargs(...args, kwargs)\n\n        // otherwise, we're adding an optional argument\n        } else {\n            kwargs = this._get_optional_kwargs(...args, kwargs)\n        }\n\n        // if no default was supplied, use the parser-level default\n        if (!('default' in kwargs)) {\n            let dest = kwargs.dest\n            if (dest in this._defaults) {\n                kwargs.default = this._defaults[dest]\n            } else if (this.argument_default !== undefined) {\n                kwargs.default = this.argument_default\n            }\n        }\n\n        // create the action object, and add it to the parser\n        let action_class = this._pop_action_class(kwargs)\n        if (typeof action_class !== 'function') {\n            throw new TypeError(sub('unknown action \"%s\"', action_class))\n        }\n        // eslint-disable-next-line new-cap\n        let action = new action_class(kwargs)\n\n        // raise an error if the action type is not callable\n        let type_func = this._registry_get('type', action.type, action.type)\n        if (typeof type_func !== 'function') {\n            throw new TypeError(sub('%r is not callable', type_func))\n        }\n\n        if (type_func === FileType) {\n            throw new TypeError(sub('%r is a FileType class object, instance of it' +\n                                    ' must be passed', type_func))\n        }\n\n        // raise an error if the metavar does not match the type\n        if ('_get_formatter' in this) {\n            try {\n                this._get_formatter()._format_args(action, undefined)\n            } catch (err) {\n                // check for 'invalid nargs value' is an artifact of TypeError and ValueError in js being the same\n                if (err instanceof TypeError && err.message !== 'invalid nargs value') {\n                    throw new TypeError('length of metavar tuple does not match nargs')\n                } else {\n                    throw err\n                }\n            }\n        }\n\n        return this._add_action(action)\n    }\n\n    add_argument_group() {\n        let group = _ArgumentGroup(this, ...arguments)\n        this._action_groups.push(group)\n        return group\n    }\n\n    add_mutually_exclusive_group() {\n        // eslint-disable-next-line no-use-before-define\n        let group = _MutuallyExclusiveGroup(this, ...arguments)\n        this._mutually_exclusive_groups.push(group)\n        return group\n    }\n\n    _add_action(action) {\n        // resolve any conflicts\n        this._check_conflict(action)\n\n        // add to actions list\n        this._actions.push(action)\n        action.container = this\n\n        // index the action by any option strings it has\n        for (let option_string of action.option_strings) {\n            this._option_string_actions[option_string] = action\n        }\n\n        // set the flag if any option strings look like negative numbers\n        for (let option_string of action.option_strings) {\n            if (this._negative_number_matcher.test(option_string)) {\n                if (!this._has_negative_number_optionals.length) {\n                    this._has_negative_number_optionals.push(true)\n                }\n            }\n        }\n\n        // return the created action\n        return action\n    }\n\n    _remove_action(action) {\n        _array_remove(this._actions, action)\n    }\n\n    _add_container_actions(container) {\n        // collect groups by titles\n        let title_group_map = {}\n        for (let group of this._action_groups) {\n            if (group.title in title_group_map) {\n                let msg = 'cannot merge actions - two groups are named %r'\n                throw new TypeError(sub(msg, group.title))\n            }\n            title_group_map[group.title] = group\n        }\n\n        // map each action to its group\n        let group_map = new Map()\n        for (let group of container._action_groups) {\n\n            // if a group with the title exists, use that, otherwise\n            // create a new group matching the container's group\n            if (!(group.title in title_group_map)) {\n                title_group_map[group.title] = this.add_argument_group({\n                    title: group.title,\n                    description: group.description,\n                    conflict_handler: group.conflict_handler\n                })\n            }\n\n            // map the actions to their new group\n            for (let action of group._group_actions) {\n                group_map.set(action, title_group_map[group.title])\n            }\n        }\n\n        // add container's mutually exclusive groups\n        // NOTE: if add_mutually_exclusive_group ever gains title= and\n        // description= then this code will need to be expanded as above\n        for (let group of container._mutually_exclusive_groups) {\n            let mutex_group = this.add_mutually_exclusive_group({\n                required: group.required\n            })\n\n            // map the actions to their new mutex group\n            for (let action of group._group_actions) {\n                group_map.set(action, mutex_group)\n            }\n        }\n\n        // add all actions to this container or their group\n        for (let action of container._actions) {\n            group_map.get(action)._add_action(action)\n        }\n    }\n\n    _get_positional_kwargs() {\n        let [\n            dest,\n            kwargs\n        ] = _parse_opts(arguments, {\n            dest: no_default,\n            '**kwargs': no_default\n        })\n\n        // make sure required is not specified\n        if ('required' in kwargs) {\n            let msg = \"'required' is an invalid argument for positionals\"\n            throw new TypeError(msg)\n        }\n\n        // mark positional arguments as required if at least one is\n        // always required\n        if (![OPTIONAL, ZERO_OR_MORE].includes(kwargs.nargs)) {\n            kwargs.required = true\n        }\n        if (kwargs.nargs === ZERO_OR_MORE && !('default' in kwargs)) {\n            kwargs.required = true\n        }\n\n        // return the keyword arguments with no option strings\n        return Object.assign(kwargs, { dest, option_strings: [] })\n    }\n\n    _get_optional_kwargs() {\n        let [\n            args,\n            kwargs\n        ] = _parse_opts(arguments, {\n            '*args': no_default,\n            '**kwargs': no_default\n        })\n\n        // determine short and long option strings\n        let option_strings = []\n        let long_option_strings = []\n        let option_string\n        for (option_string of args) {\n            // error on strings that don't start with an appropriate prefix\n            if (!this.prefix_chars.includes(option_string[0])) {\n                let args = {option: option_string,\n                            prefix_chars: this.prefix_chars}\n                let msg = 'invalid option string %(option)r: ' +\n                          'must start with a character %(prefix_chars)r'\n                throw new TypeError(sub(msg, args))\n            }\n\n            // strings starting with two prefix characters are long options\n            option_strings.push(option_string)\n            if (option_string.length > 1 && this.prefix_chars.includes(option_string[1])) {\n                long_option_strings.push(option_string)\n            }\n        }\n\n        // infer destination, '--foo-bar' -> 'foo_bar' and '-x' -> 'x'\n        let dest = kwargs.dest\n        delete kwargs.dest\n        if (dest === undefined) {\n            let dest_option_string\n            if (long_option_strings.length) {\n                dest_option_string = long_option_strings[0]\n            } else {\n                dest_option_string = option_strings[0]\n            }\n            dest = _string_lstrip(dest_option_string, this.prefix_chars)\n            if (!dest) {\n                let msg = 'dest= is required for options like %r'\n                throw new TypeError(sub(msg, option_string))\n            }\n            dest = dest.replace(/-/g, '_')\n        }\n\n        // return the updated keyword arguments\n        return Object.assign(kwargs, { dest, option_strings })\n    }\n\n    _pop_action_class(kwargs, default_value = undefined) {\n        let action = getattr(kwargs, 'action', default_value)\n        delete kwargs.action\n        return this._registry_get('action', action, action)\n    }\n\n    _get_handler() {\n        // determine function from conflict handler string\n        let handler_func_name = sub('_handle_conflict_%s', this.conflict_handler)\n        if (typeof this[handler_func_name] === 'function') {\n            return this[handler_func_name]\n        } else {\n            let msg = 'invalid conflict_resolution value: %r'\n            throw new TypeError(sub(msg, this.conflict_handler))\n        }\n    }\n\n    _check_conflict(action) {\n\n        // find all options that conflict with this option\n        let confl_optionals = []\n        for (let option_string of action.option_strings) {\n            if (hasattr(this._option_string_actions, option_string)) {\n                let confl_optional = this._option_string_actions[option_string]\n                confl_optionals.push([ option_string, confl_optional ])\n            }\n        }\n\n        // resolve any conflicts\n        if (confl_optionals.length) {\n            let conflict_handler = this._get_handler()\n            conflict_handler.call(this, action, confl_optionals)\n        }\n    }\n\n    _handle_conflict_error(action, conflicting_actions) {\n        let message = conflicting_actions.length === 1 ?\n            'conflicting option string: %s' :\n            'conflicting option strings: %s'\n        let conflict_string = conflicting_actions.map(([ option_string/*, action*/ ]) => option_string).join(', ')\n        throw new ArgumentError(action, sub(message, conflict_string))\n    }\n\n    _handle_conflict_resolve(action, conflicting_actions) {\n\n        // remove all conflicting options\n        for (let [ option_string, action ] of conflicting_actions) {\n\n            // remove the conflicting option\n            _array_remove(action.option_strings, option_string)\n            delete this._option_string_actions[option_string]\n\n            // if the option now has no option string, remove it from the\n            // container holding it\n            if (!action.option_strings.length) {\n                action.container._remove_action(action)\n            }\n        }\n    }\n}))\n\n\nconst _ArgumentGroup = _callable(class _ArgumentGroup extends _ActionsContainer {\n\n    constructor() {\n        let [\n            container,\n            title,\n            description,\n            kwargs\n        ] = _parse_opts(arguments, {\n            container: no_default,\n            title: undefined,\n            description: undefined,\n            '**kwargs': no_default\n        })\n\n        // add any missing keyword arguments by checking the container\n        setdefault(kwargs, 'conflict_handler', container.conflict_handler)\n        setdefault(kwargs, 'prefix_chars', container.prefix_chars)\n        setdefault(kwargs, 'argument_default', container.argument_default)\n        super(Object.assign({ description }, kwargs))\n\n        // group attributes\n        this.title = title\n        this._group_actions = []\n\n        // share most attributes with the container\n        this._registries = container._registries\n        this._actions = container._actions\n        this._option_string_actions = container._option_string_actions\n        this._defaults = container._defaults\n        this._has_negative_number_optionals =\n            container._has_negative_number_optionals\n        this._mutually_exclusive_groups = container._mutually_exclusive_groups\n    }\n\n    _add_action(action) {\n        action = super._add_action(action)\n        this._group_actions.push(action)\n        return action\n    }\n\n    _remove_action(action) {\n        super._remove_action(action)\n        _array_remove(this._group_actions, action)\n    }\n})\n\n\nconst _MutuallyExclusiveGroup = _callable(class _MutuallyExclusiveGroup extends _ArgumentGroup {\n\n    constructor() {\n        let [\n            container,\n            required\n        ] = _parse_opts(arguments, {\n            container: no_default,\n            required: false\n        })\n\n        super(container)\n        this.required = required\n        this._container = container\n    }\n\n    _add_action(action) {\n        if (action.required) {\n            let msg = 'mutually exclusive arguments must be optional'\n            throw new TypeError(msg)\n        }\n        action = this._container._add_action(action)\n        this._group_actions.push(action)\n        return action\n    }\n\n    _remove_action(action) {\n        this._container._remove_action(action)\n        _array_remove(this._group_actions, action)\n    }\n})\n\n\nconst ArgumentParser = _camelcase_alias(_callable(class ArgumentParser extends _AttributeHolder(_ActionsContainer) {\n    /*\n     *  Object for parsing command line strings into Python objects.\n     *\n     *  Keyword Arguments:\n     *      - prog -- The name of the program (default: sys.argv[0])\n     *      - usage -- A usage message (default: auto-generated from arguments)\n     *      - description -- A description of what the program does\n     *      - epilog -- Text following the argument descriptions\n     *      - parents -- Parsers whose arguments should be copied into this one\n     *      - formatter_class -- HelpFormatter class for printing help messages\n     *      - prefix_chars -- Characters that prefix optional arguments\n     *      - fromfile_prefix_chars -- Characters that prefix files containing\n     *          additional arguments\n     *      - argument_default -- The default value for all arguments\n     *      - conflict_handler -- String indicating how to handle conflicts\n     *      - add_help -- Add a -h/-help option\n     *      - allow_abbrev -- Allow long options to be abbreviated unambiguously\n     *      - exit_on_error -- Determines whether or not ArgumentParser exits with\n     *          error info when an error occurs\n     */\n\n    constructor() {\n        let [\n            prog,\n            usage,\n            description,\n            epilog,\n            parents,\n            formatter_class,\n            prefix_chars,\n            fromfile_prefix_chars,\n            argument_default,\n            conflict_handler,\n            add_help,\n            allow_abbrev,\n            exit_on_error,\n            debug, // LEGACY (v1 compatibility), debug mode\n            version // LEGACY (v1 compatibility), version\n        ] = _parse_opts(arguments, {\n            prog: undefined,\n            usage: undefined,\n            description: undefined,\n            epilog: undefined,\n            parents: [],\n            formatter_class: HelpFormatter,\n            prefix_chars: '-',\n            fromfile_prefix_chars: undefined,\n            argument_default: undefined,\n            conflict_handler: 'error',\n            add_help: true,\n            allow_abbrev: true,\n            exit_on_error: true,\n            debug: undefined, // LEGACY (v1 compatibility), debug mode\n            version: undefined // LEGACY (v1 compatibility), version\n        })\n\n        // LEGACY (v1 compatibility)\n        if (debug !== undefined) {\n            deprecate('debug',\n                'The \"debug\" argument to ArgumentParser is deprecated. Please ' +\n                'override ArgumentParser.exit function instead.'\n            )\n        }\n\n        if (version !== undefined) {\n            deprecate('version',\n                'The \"version\" argument to ArgumentParser is deprecated. Please use ' +\n                \"add_argument(..., { action: 'version', version: 'N', ... }) instead.\"\n            )\n        }\n        // end\n\n        super({\n            description,\n            prefix_chars,\n            argument_default,\n            conflict_handler\n        })\n\n        // default setting for prog\n        if (prog === undefined) {\n            prog = path.basename(get_argv()[0] || '')\n        }\n\n        this.prog = prog\n        this.usage = usage\n        this.epilog = epilog\n        this.formatter_class = formatter_class\n        this.fromfile_prefix_chars = fromfile_prefix_chars\n        this.add_help = add_help\n        this.allow_abbrev = allow_abbrev\n        this.exit_on_error = exit_on_error\n        // LEGACY (v1 compatibility), debug mode\n        this.debug = debug\n        // end\n\n        this._positionals = this.add_argument_group('positional arguments')\n        this._optionals = this.add_argument_group('optional arguments')\n        this._subparsers = undefined\n\n        // register types\n        function identity(string) {\n            return string\n        }\n        this.register('type', undefined, identity)\n        this.register('type', null, identity)\n        this.register('type', 'auto', identity)\n        this.register('type', 'int', function (x) {\n            let result = Number(x)\n            if (!Number.isInteger(result)) {\n                throw new TypeError(sub('could not convert string to int: %r', x))\n            }\n            return result\n        })\n        this.register('type', 'float', function (x) {\n            let result = Number(x)\n            if (isNaN(result)) {\n                throw new TypeError(sub('could not convert string to float: %r', x))\n            }\n            return result\n        })\n        this.register('type', 'str', String)\n        // LEGACY (v1 compatibility): custom types\n        this.register('type', 'string',\n            util.deprecate(String, 'use {type:\"str\"} or {type:String} instead of {type:\"string\"}'))\n        // end\n\n        // add help argument if necessary\n        // (using explicit default to override global argument_default)\n        let default_prefix = prefix_chars.includes('-') ? '-' : prefix_chars[0]\n        if (this.add_help) {\n            this.add_argument(\n                default_prefix + 'h',\n                default_prefix.repeat(2) + 'help',\n                {\n                    action: 'help',\n                    default: SUPPRESS,\n                    help: 'show this help message and exit'\n                }\n            )\n        }\n        // LEGACY (v1 compatibility), version\n        if (version) {\n            this.add_argument(\n                default_prefix + 'v',\n                default_prefix.repeat(2) + 'version',\n                {\n                    action: 'version',\n                    default: SUPPRESS,\n                    version: this.version,\n                    help: \"show program's version number and exit\"\n                }\n            )\n        }\n        // end\n\n        // add parent arguments and defaults\n        for (let parent of parents) {\n            this._add_container_actions(parent)\n            Object.assign(this._defaults, parent._defaults)\n        }\n    }\n\n    // =======================\n    // Pretty __repr__ methods\n    // =======================\n    _get_kwargs() {\n        let names = [\n            'prog',\n            'usage',\n            'description',\n            'formatter_class',\n            'conflict_handler',\n            'add_help'\n        ]\n        return names.map(name => [ name, getattr(this, name) ])\n    }\n\n    // ==================================\n    // Optional/Positional adding methods\n    // ==================================\n    add_subparsers() {\n        let [\n            kwargs\n        ] = _parse_opts(arguments, {\n            '**kwargs': no_default\n        })\n\n        if (this._subparsers !== undefined) {\n            this.error('cannot have multiple subparser arguments')\n        }\n\n        // add the parser class to the arguments if it's not present\n        setdefault(kwargs, 'parser_class', this.constructor)\n\n        if ('title' in kwargs || 'description' in kwargs) {\n            let title = getattr(kwargs, 'title', 'subcommands')\n            let description = getattr(kwargs, 'description', undefined)\n            delete kwargs.title\n            delete kwargs.description\n            this._subparsers = this.add_argument_group(title, description)\n        } else {\n            this._subparsers = this._positionals\n        }\n\n        // prog defaults to the usage message of this parser, skipping\n        // optional arguments and with no \"usage:\" prefix\n        if (kwargs.prog === undefined) {\n            let formatter = this._get_formatter()\n            let positionals = this._get_positional_actions()\n            let groups = this._mutually_exclusive_groups\n            formatter.add_usage(this.usage, positionals, groups, '')\n            kwargs.prog = formatter.format_help().trim()\n        }\n\n        // create the parsers action and add it to the positionals list\n        let parsers_class = this._pop_action_class(kwargs, 'parsers')\n        // eslint-disable-next-line new-cap\n        let action = new parsers_class(Object.assign({ option_strings: [] }, kwargs))\n        this._subparsers._add_action(action)\n\n        // return the created parsers action\n        return action\n    }\n\n    _add_action(action) {\n        if (action.option_strings.length) {\n            this._optionals._add_action(action)\n        } else {\n            this._positionals._add_action(action)\n        }\n        return action\n    }\n\n    _get_optional_actions() {\n        return this._actions.filter(action => action.option_strings.length)\n    }\n\n    _get_positional_actions() {\n        return this._actions.filter(action => !action.option_strings.length)\n    }\n\n    // =====================================\n    // Command line argument parsing methods\n    // =====================================\n    parse_args(args = undefined, namespace = undefined) {\n        let argv\n        [ args, argv ] = this.parse_known_args(args, namespace)\n        if (argv && argv.length > 0) {\n            let msg = 'unrecognized arguments: %s'\n            this.error(sub(msg, argv.join(' ')))\n        }\n        return args\n    }\n\n    parse_known_args(args = undefined, namespace = undefined) {\n        if (args === undefined) {\n            args = get_argv().slice(1)\n        }\n\n        // default Namespace built from parser defaults\n        if (namespace === undefined) {\n            namespace = new Namespace()\n        }\n\n        // add any action defaults that aren't present\n        for (let action of this._actions) {\n            if (action.dest !== SUPPRESS) {\n                if (!hasattr(namespace, action.dest)) {\n                    if (action.default !== SUPPRESS) {\n                        setattr(namespace, action.dest, action.default)\n                    }\n                }\n            }\n        }\n\n        // add any parser defaults that aren't present\n        for (let dest of Object.keys(this._defaults)) {\n            if (!hasattr(namespace, dest)) {\n                setattr(namespace, dest, this._defaults[dest])\n            }\n        }\n\n        // parse the arguments and exit if there are any errors\n        if (this.exit_on_error) {\n            try {\n                [ namespace, args ] = this._parse_known_args(args, namespace)\n            } catch (err) {\n                if (err instanceof ArgumentError) {\n                    this.error(err.message)\n                } else {\n                    throw err\n                }\n            }\n        } else {\n            [ namespace, args ] = this._parse_known_args(args, namespace)\n        }\n\n        if (hasattr(namespace, _UNRECOGNIZED_ARGS_ATTR)) {\n            args = args.concat(getattr(namespace, _UNRECOGNIZED_ARGS_ATTR))\n            delattr(namespace, _UNRECOGNIZED_ARGS_ATTR)\n        }\n\n        return [ namespace, args ]\n    }\n\n    _parse_known_args(arg_strings, namespace) {\n        // replace arg strings that are file references\n        if (this.fromfile_prefix_chars !== undefined) {\n            arg_strings = this._read_args_from_files(arg_strings)\n        }\n\n        // map all mutually exclusive arguments to the other arguments\n        // they can't occur with\n        let action_conflicts = new Map()\n        for (let mutex_group of this._mutually_exclusive_groups) {\n            let group_actions = mutex_group._group_actions\n            for (let [ i, mutex_action ] of Object.entries(mutex_group._group_actions)) {\n                let conflicts = action_conflicts.get(mutex_action) || []\n                conflicts = conflicts.concat(group_actions.slice(0, +i))\n                conflicts = conflicts.concat(group_actions.slice(+i + 1))\n                action_conflicts.set(mutex_action, conflicts)\n            }\n        }\n\n        // find all option indices, and determine the arg_string_pattern\n        // which has an 'O' if there is an option at an index,\n        // an 'A' if there is an argument, or a '-' if there is a '--'\n        let option_string_indices = {}\n        let arg_string_pattern_parts = []\n        let arg_strings_iter = Object.entries(arg_strings)[Symbol.iterator]()\n        for (let [ i, arg_string ] of arg_strings_iter) {\n\n            // all args after -- are non-options\n            if (arg_string === '--') {\n                arg_string_pattern_parts.push('-')\n                for ([ i, arg_string ] of arg_strings_iter) {\n                    arg_string_pattern_parts.push('A')\n                }\n\n            // otherwise, add the arg to the arg strings\n            // and note the index if it was an option\n            } else {\n                let option_tuple = this._parse_optional(arg_string)\n                let pattern\n                if (option_tuple === undefined) {\n                    pattern = 'A'\n                } else {\n                    option_string_indices[i] = option_tuple\n                    pattern = 'O'\n                }\n                arg_string_pattern_parts.push(pattern)\n            }\n        }\n\n        // join the pieces together to form the pattern\n        let arg_strings_pattern = arg_string_pattern_parts.join('')\n\n        // converts arg strings to the appropriate and then takes the action\n        let seen_actions = new Set()\n        let seen_non_default_actions = new Set()\n        let extras\n\n        let take_action = (action, argument_strings, option_string = undefined) => {\n            seen_actions.add(action)\n            let argument_values = this._get_values(action, argument_strings)\n\n            // error if this argument is not allowed with other previously\n            // seen arguments, assuming that actions that use the default\n            // value don't really count as \"present\"\n            if (argument_values !== action.default) {\n                seen_non_default_actions.add(action)\n                for (let conflict_action of action_conflicts.get(action) || []) {\n                    if (seen_non_default_actions.has(conflict_action)) {\n                        let msg = 'not allowed with argument %s'\n                        let action_name = _get_action_name(conflict_action)\n                        throw new ArgumentError(action, sub(msg, action_name))\n                    }\n                }\n            }\n\n            // take the action if we didn't receive a SUPPRESS value\n            // (e.g. from a default)\n            if (argument_values !== SUPPRESS) {\n                action(this, namespace, argument_values, option_string)\n            }\n        }\n\n        // function to convert arg_strings into an optional action\n        let consume_optional = start_index => {\n\n            // get the optional identified at this index\n            let option_tuple = option_string_indices[start_index]\n            let [ action, option_string, explicit_arg ] = option_tuple\n\n            // identify additional optionals in the same arg string\n            // (e.g. -xyz is the same as -x -y -z if no args are required)\n            let action_tuples = []\n            let stop\n            for (;;) {\n\n                // if we found no optional action, skip it\n                if (action === undefined) {\n                    extras.push(arg_strings[start_index])\n                    return start_index + 1\n                }\n\n                // if there is an explicit argument, try to match the\n                // optional's string arguments to only this\n                if (explicit_arg !== undefined) {\n                    let arg_count = this._match_argument(action, 'A')\n\n                    // if the action is a single-dash option and takes no\n                    // arguments, try to parse more single-dash options out\n                    // of the tail of the option string\n                    let chars = this.prefix_chars\n                    if (arg_count === 0 && !chars.includes(option_string[1])) {\n                        action_tuples.push([ action, [], option_string ])\n                        let char = option_string[0]\n                        option_string = char + explicit_arg[0]\n                        let new_explicit_arg = explicit_arg.slice(1) || undefined\n                        let optionals_map = this._option_string_actions\n                        if (hasattr(optionals_map, option_string)) {\n                            action = optionals_map[option_string]\n                            explicit_arg = new_explicit_arg\n                        } else {\n                            let msg = 'ignored explicit argument %r'\n                            throw new ArgumentError(action, sub(msg, explicit_arg))\n                        }\n\n                    // if the action expect exactly one argument, we've\n                    // successfully matched the option; exit the loop\n                    } else if (arg_count === 1) {\n                        stop = start_index + 1\n                        let args = [ explicit_arg ]\n                        action_tuples.push([ action, args, option_string ])\n                        break\n\n                    // error if a double-dash option did not use the\n                    // explicit argument\n                    } else {\n                        let msg = 'ignored explicit argument %r'\n                        throw new ArgumentError(action, sub(msg, explicit_arg))\n                    }\n\n                // if there is no explicit argument, try to match the\n                // optional's string arguments with the following strings\n                // if successful, exit the loop\n                } else {\n                    let start = start_index + 1\n                    let selected_patterns = arg_strings_pattern.slice(start)\n                    let arg_count = this._match_argument(action, selected_patterns)\n                    stop = start + arg_count\n                    let args = arg_strings.slice(start, stop)\n                    action_tuples.push([ action, args, option_string ])\n                    break\n                }\n            }\n\n            // add the Optional to the list and return the index at which\n            // the Optional's string args stopped\n            assert(action_tuples.length)\n            for (let [ action, args, option_string ] of action_tuples) {\n                take_action(action, args, option_string)\n            }\n            return stop\n        }\n\n        // the list of Positionals left to be parsed; this is modified\n        // by consume_positionals()\n        let positionals = this._get_positional_actions()\n\n        // function to convert arg_strings into positional actions\n        let consume_positionals = start_index => {\n            // match as many Positionals as possible\n            let selected_pattern = arg_strings_pattern.slice(start_index)\n            let arg_counts = this._match_arguments_partial(positionals, selected_pattern)\n\n            // slice off the appropriate arg strings for each Positional\n            // and add the Positional and its args to the list\n            for (let i = 0; i < positionals.length && i < arg_counts.length; i++) {\n                let action = positionals[i]\n                let arg_count = arg_counts[i]\n                let args = arg_strings.slice(start_index, start_index + arg_count)\n                start_index += arg_count\n                take_action(action, args)\n            }\n\n            // slice off the Positionals that we just parsed and return the\n            // index at which the Positionals' string args stopped\n            positionals = positionals.slice(arg_counts.length)\n            return start_index\n        }\n\n        // consume Positionals and Optionals alternately, until we have\n        // passed the last option string\n        extras = []\n        let start_index = 0\n        let max_option_string_index = Math.max(-1, ...Object.keys(option_string_indices).map(Number))\n        while (start_index <= max_option_string_index) {\n\n            // consume any Positionals preceding the next option\n            let next_option_string_index = Math.min(\n                // eslint-disable-next-line no-loop-func\n                ...Object.keys(option_string_indices).map(Number).filter(index => index >= start_index)\n            )\n            if (start_index !== next_option_string_index) {\n                let positionals_end_index = consume_positionals(start_index)\n\n                // only try to parse the next optional if we didn't consume\n                // the option string during the positionals parsing\n                if (positionals_end_index > start_index) {\n                    start_index = positionals_end_index\n                    continue\n                } else {\n                    start_index = positionals_end_index\n                }\n            }\n\n            // if we consumed all the positionals we could and we're not\n            // at the index of an option string, there were extra arguments\n            if (!(start_index in option_string_indices)) {\n                let strings = arg_strings.slice(start_index, next_option_string_index)\n                extras = extras.concat(strings)\n                start_index = next_option_string_index\n            }\n\n            // consume the next optional and any arguments for it\n            start_index = consume_optional(start_index)\n        }\n\n        // consume any positionals following the last Optional\n        let stop_index = consume_positionals(start_index)\n\n        // if we didn't consume all the argument strings, there were extras\n        extras = extras.concat(arg_strings.slice(stop_index))\n\n        // make sure all required actions were present and also convert\n        // action defaults which were not given as arguments\n        let required_actions = []\n        for (let action of this._actions) {\n            if (!seen_actions.has(action)) {\n                if (action.required) {\n                    required_actions.push(_get_action_name(action))\n                } else {\n                    // Convert action default now instead of doing it before\n                    // parsing arguments to avoid calling convert functions\n                    // twice (which may fail) if the argument was given, but\n                    // only if it was defined already in the namespace\n                    if (action.default !== undefined &&\n                        typeof action.default === 'string' &&\n                        hasattr(namespace, action.dest) &&\n                        action.default === getattr(namespace, action.dest)) {\n                        setattr(namespace, action.dest,\n                                this._get_value(action, action.default))\n                    }\n                }\n            }\n        }\n\n        if (required_actions.length) {\n            this.error(sub('the following arguments are required: %s',\n                       required_actions.join(', ')))\n        }\n\n        // make sure all required groups had one option present\n        for (let group of this._mutually_exclusive_groups) {\n            if (group.required) {\n                let no_actions_used = true\n                for (let action of group._group_actions) {\n                    if (seen_non_default_actions.has(action)) {\n                        no_actions_used = false\n                        break\n                    }\n                }\n\n                // if no actions were used, report the error\n                if (no_actions_used) {\n                    let names = group._group_actions\n                        .filter(action => action.help !== SUPPRESS)\n                        .map(action => _get_action_name(action))\n                    let msg = 'one of the arguments %s is required'\n                    this.error(sub(msg, names.join(' ')))\n                }\n            }\n        }\n\n        // return the updated namespace and the extra arguments\n        return [ namespace, extras ]\n    }\n\n    _read_args_from_files(arg_strings) {\n        // expand arguments referencing files\n        let new_arg_strings = []\n        for (let arg_string of arg_strings) {\n\n            // for regular arguments, just add them back into the list\n            if (!arg_string || !this.fromfile_prefix_chars.includes(arg_string[0])) {\n                new_arg_strings.push(arg_string)\n\n            // replace arguments referencing files with the file content\n            } else {\n                try {\n                    let args_file = fs.readFileSync(arg_string.slice(1), 'utf8')\n                    let arg_strings = []\n                    for (let arg_line of splitlines(args_file)) {\n                        for (let arg of this.convert_arg_line_to_args(arg_line)) {\n                            arg_strings.push(arg)\n                        }\n                    }\n                    arg_strings = this._read_args_from_files(arg_strings)\n                    new_arg_strings = new_arg_strings.concat(arg_strings)\n                } catch (err) {\n                    this.error(err.message)\n                }\n            }\n        }\n\n        // return the modified argument list\n        return new_arg_strings\n    }\n\n    convert_arg_line_to_args(arg_line) {\n        return [arg_line]\n    }\n\n    _match_argument(action, arg_strings_pattern) {\n        // match the pattern for this action to the arg strings\n        let nargs_pattern = this._get_nargs_pattern(action)\n        let match = arg_strings_pattern.match(new RegExp('^' + nargs_pattern))\n\n        // raise an exception if we weren't able to find a match\n        if (match === null) {\n            let nargs_errors = {\n                undefined: 'expected one argument',\n                [OPTIONAL]: 'expected at most one argument',\n                [ONE_OR_MORE]: 'expected at least one argument'\n            }\n            let msg = nargs_errors[action.nargs]\n            if (msg === undefined) {\n                msg = sub(action.nargs === 1 ? 'expected %s argument' : 'expected %s arguments', action.nargs)\n            }\n            throw new ArgumentError(action, msg)\n        }\n\n        // return the number of arguments matched\n        return match[1].length\n    }\n\n    _match_arguments_partial(actions, arg_strings_pattern) {\n        // progressively shorten the actions list by slicing off the\n        // final actions until we find a match\n        let result = []\n        for (let i of range(actions.length, 0, -1)) {\n            let actions_slice = actions.slice(0, i)\n            let pattern = actions_slice.map(action => this._get_nargs_pattern(action)).join('')\n            let match = arg_strings_pattern.match(new RegExp('^' + pattern))\n            if (match !== null) {\n                result = result.concat(match.slice(1).map(string => string.length))\n                break\n            }\n        }\n\n        // return the list of arg string counts\n        return result\n    }\n\n    _parse_optional(arg_string) {\n        // if it's an empty string, it was meant to be a positional\n        if (!arg_string) {\n            return undefined\n        }\n\n        // if it doesn't start with a prefix, it was meant to be positional\n        if (!this.prefix_chars.includes(arg_string[0])) {\n            return undefined\n        }\n\n        // if the option string is present in the parser, return the action\n        if (arg_string in this._option_string_actions) {\n            let action = this._option_string_actions[arg_string]\n            return [ action, arg_string, undefined ]\n        }\n\n        // if it's just a single character, it was meant to be positional\n        if (arg_string.length === 1) {\n            return undefined\n        }\n\n        // if the option string before the \"=\" is present, return the action\n        if (arg_string.includes('=')) {\n            let [ option_string, explicit_arg ] = _string_split(arg_string, '=', 1)\n            if (option_string in this._option_string_actions) {\n                let action = this._option_string_actions[option_string]\n                return [ action, option_string, explicit_arg ]\n            }\n        }\n\n        // search through all possible prefixes of the option string\n        // and all actions in the parser for possible interpretations\n        let option_tuples = this._get_option_tuples(arg_string)\n\n        // if multiple actions match, the option string was ambiguous\n        if (option_tuples.length > 1) {\n            let options = option_tuples.map(([ /*action*/, option_string/*, explicit_arg*/ ]) => option_string).join(', ')\n            let args = {option: arg_string, matches: options}\n            let msg = 'ambiguous option: %(option)s could match %(matches)s'\n            this.error(sub(msg, args))\n\n        // if exactly one action matched, this segmentation is good,\n        // so return the parsed action\n        } else if (option_tuples.length === 1) {\n            let [ option_tuple ] = option_tuples\n            return option_tuple\n        }\n\n        // if it was not found as an option, but it looks like a negative\n        // number, it was meant to be positional\n        // unless there are negative-number-like options\n        if (this._negative_number_matcher.test(arg_string)) {\n            if (!this._has_negative_number_optionals.length) {\n                return undefined\n            }\n        }\n\n        // if it contains a space, it was meant to be a positional\n        if (arg_string.includes(' ')) {\n            return undefined\n        }\n\n        // it was meant to be an optional but there is no such option\n        // in this parser (though it might be a valid option in a subparser)\n        return [ undefined, arg_string, undefined ]\n    }\n\n    _get_option_tuples(option_string) {\n        let result = []\n\n        // option strings starting with two prefix characters are only\n        // split at the '='\n        let chars = this.prefix_chars\n        if (chars.includes(option_string[0]) && chars.includes(option_string[1])) {\n            if (this.allow_abbrev) {\n                let option_prefix, explicit_arg\n                if (option_string.includes('=')) {\n                    [ option_prefix, explicit_arg ] = _string_split(option_string, '=', 1)\n                } else {\n                    option_prefix = option_string\n                    explicit_arg = undefined\n                }\n                for (let option_string of Object.keys(this._option_string_actions)) {\n                    if (option_string.startsWith(option_prefix)) {\n                        let action = this._option_string_actions[option_string]\n                        let tup = [ action, option_string, explicit_arg ]\n                        result.push(tup)\n                    }\n                }\n            }\n\n        // single character options can be concatenated with their arguments\n        // but multiple character options always have to have their argument\n        // separate\n        } else if (chars.includes(option_string[0]) && !chars.includes(option_string[1])) {\n            let option_prefix = option_string\n            let explicit_arg = undefined\n            let short_option_prefix = option_string.slice(0, 2)\n            let short_explicit_arg = option_string.slice(2)\n\n            for (let option_string of Object.keys(this._option_string_actions)) {\n                if (option_string === short_option_prefix) {\n                    let action = this._option_string_actions[option_string]\n                    let tup = [ action, option_string, short_explicit_arg ]\n                    result.push(tup)\n                } else if (option_string.startsWith(option_prefix)) {\n                    let action = this._option_string_actions[option_string]\n                    let tup = [ action, option_string, explicit_arg ]\n                    result.push(tup)\n                }\n            }\n\n        // shouldn't ever get here\n        } else {\n            this.error(sub('unexpected option string: %s', option_string))\n        }\n\n        // return the collected option tuples\n        return result\n    }\n\n    _get_nargs_pattern(action) {\n        // in all examples below, we have to allow for '--' args\n        // which are represented as '-' in the pattern\n        let nargs = action.nargs\n        let nargs_pattern\n\n        // the default (None) is assumed to be a single argument\n        if (nargs === undefined) {\n            nargs_pattern = '(-*A-*)'\n\n        // allow zero or one arguments\n        } else if (nargs === OPTIONAL) {\n            nargs_pattern = '(-*A?-*)'\n\n        // allow zero or more arguments\n        } else if (nargs === ZERO_OR_MORE) {\n            nargs_pattern = '(-*[A-]*)'\n\n        // allow one or more arguments\n        } else if (nargs === ONE_OR_MORE) {\n            nargs_pattern = '(-*A[A-]*)'\n\n        // allow any number of options or arguments\n        } else if (nargs === REMAINDER) {\n            nargs_pattern = '([-AO]*)'\n\n        // allow one argument followed by any number of options or arguments\n        } else if (nargs === PARSER) {\n            nargs_pattern = '(-*A[-AO]*)'\n\n        // suppress action, like nargs=0\n        } else if (nargs === SUPPRESS) {\n            nargs_pattern = '(-*-*)'\n\n        // all others should be integers\n        } else {\n            nargs_pattern = sub('(-*%s-*)', 'A'.repeat(nargs).split('').join('-*'))\n        }\n\n        // if this is an optional action, -- is not allowed\n        if (action.option_strings.length) {\n            nargs_pattern = nargs_pattern.replace(/-\\*/g, '')\n            nargs_pattern = nargs_pattern.replace(/-/g, '')\n        }\n\n        // return the pattern\n        return nargs_pattern\n    }\n\n    // ========================\n    // Alt command line argument parsing, allowing free intermix\n    // ========================\n\n    parse_intermixed_args(args = undefined, namespace = undefined) {\n        let argv\n        [ args, argv ] = this.parse_known_intermixed_args(args, namespace)\n        if (argv.length) {\n            let msg = 'unrecognized arguments: %s'\n            this.error(sub(msg, argv.join(' ')))\n        }\n        return args\n    }\n\n    parse_known_intermixed_args(args = undefined, namespace = undefined) {\n        // returns a namespace and list of extras\n        //\n        // positional can be freely intermixed with optionals.  optionals are\n        // first parsed with all positional arguments deactivated.  The 'extras'\n        // are then parsed.  If the parser definition is incompatible with the\n        // intermixed assumptions (e.g. use of REMAINDER, subparsers) a\n        // TypeError is raised.\n        //\n        // positionals are 'deactivated' by setting nargs and default to\n        // SUPPRESS.  This blocks the addition of that positional to the\n        // namespace\n\n        let extras\n        let positionals = this._get_positional_actions()\n        let a = positionals.filter(action => [ PARSER, REMAINDER ].includes(action.nargs))\n        if (a.length) {\n            throw new TypeError(sub('parse_intermixed_args: positional arg' +\n                                    ' with nargs=%s', a[0].nargs))\n        }\n\n        for (let group of this._mutually_exclusive_groups) {\n            for (let action of group._group_actions) {\n                if (positionals.includes(action)) {\n                    throw new TypeError('parse_intermixed_args: positional in' +\n                                        ' mutuallyExclusiveGroup')\n                }\n            }\n        }\n\n        let save_usage\n        try {\n            save_usage = this.usage\n            let remaining_args\n            try {\n                if (this.usage === undefined) {\n                    // capture the full usage for use in error messages\n                    this.usage = this.format_usage().slice(7)\n                }\n                for (let action of positionals) {\n                    // deactivate positionals\n                    action.save_nargs = action.nargs\n                    // action.nargs = 0\n                    action.nargs = SUPPRESS\n                    action.save_default = action.default\n                    action.default = SUPPRESS\n                }\n                [ namespace, remaining_args ] = this.parse_known_args(args,\n                                                                      namespace)\n                for (let action of positionals) {\n                    // remove the empty positional values from namespace\n                    let attr = getattr(namespace, action.dest)\n                    if (Array.isArray(attr) && attr.length === 0) {\n                        // eslint-disable-next-line no-console\n                        console.warn(sub('Do not expect %s in %s', action.dest, namespace))\n                        delattr(namespace, action.dest)\n                    }\n                }\n            } finally {\n                // restore nargs and usage before exiting\n                for (let action of positionals) {\n                    action.nargs = action.save_nargs\n                    action.default = action.save_default\n                }\n            }\n            let optionals = this._get_optional_actions()\n            try {\n                // parse positionals.  optionals aren't normally required, but\n                // they could be, so make sure they aren't.\n                for (let action of optionals) {\n                    action.save_required = action.required\n                    action.required = false\n                }\n                for (let group of this._mutually_exclusive_groups) {\n                    group.save_required = group.required\n                    group.required = false\n                }\n                [ namespace, extras ] = this.parse_known_args(remaining_args,\n                                                              namespace)\n            } finally {\n                // restore parser values before exiting\n                for (let action of optionals) {\n                    action.required = action.save_required\n                }\n                for (let group of this._mutually_exclusive_groups) {\n                    group.required = group.save_required\n                }\n            }\n        } finally {\n            this.usage = save_usage\n        }\n        return [ namespace, extras ]\n    }\n\n    // ========================\n    // Value conversion methods\n    // ========================\n    _get_values(action, arg_strings) {\n        // for everything but PARSER, REMAINDER args, strip out first '--'\n        if (![PARSER, REMAINDER].includes(action.nargs)) {\n            try {\n                _array_remove(arg_strings, '--')\n            } catch (err) {}\n        }\n\n        let value\n        // optional argument produces a default when not present\n        if (!arg_strings.length && action.nargs === OPTIONAL) {\n            if (action.option_strings.length) {\n                value = action.const\n            } else {\n                value = action.default\n            }\n            if (typeof value === 'string') {\n                value = this._get_value(action, value)\n                this._check_value(action, value)\n            }\n\n        // when nargs='*' on a positional, if there were no command-line\n        // args, use the default if it is anything other than None\n        } else if (!arg_strings.length && action.nargs === ZERO_OR_MORE &&\n              !action.option_strings.length) {\n            if (action.default !== undefined) {\n                value = action.default\n            } else {\n                value = arg_strings\n            }\n            this._check_value(action, value)\n\n        // single argument or optional argument produces a single value\n        } else if (arg_strings.length === 1 && [undefined, OPTIONAL].includes(action.nargs)) {\n            let arg_string = arg_strings[0]\n            value = this._get_value(action, arg_string)\n            this._check_value(action, value)\n\n        // REMAINDER arguments convert all values, checking none\n        } else if (action.nargs === REMAINDER) {\n            value = arg_strings.map(v => this._get_value(action, v))\n\n        // PARSER arguments convert all values, but check only the first\n        } else if (action.nargs === PARSER) {\n            value = arg_strings.map(v => this._get_value(action, v))\n            this._check_value(action, value[0])\n\n        // SUPPRESS argument does not put anything in the namespace\n        } else if (action.nargs === SUPPRESS) {\n            value = SUPPRESS\n\n        // all other types of nargs produce a list\n        } else {\n            value = arg_strings.map(v => this._get_value(action, v))\n            for (let v of value) {\n                this._check_value(action, v)\n            }\n        }\n\n        // return the converted value\n        return value\n    }\n\n    _get_value(action, arg_string) {\n        let type_func = this._registry_get('type', action.type, action.type)\n        if (typeof type_func !== 'function') {\n            let msg = '%r is not callable'\n            throw new ArgumentError(action, sub(msg, type_func))\n        }\n\n        // convert the value to the appropriate type\n        let result\n        try {\n            try {\n                result = type_func(arg_string)\n            } catch (err) {\n                // Dear TC39, why would you ever consider making es6 classes not callable?\n                // We had one universal interface, [[Call]], which worked for anything\n                // (with familiar this-instanceof guard for classes). Now we have two.\n                if (err instanceof TypeError &&\n                    /Class constructor .* cannot be invoked without 'new'/.test(err.message)) {\n                    // eslint-disable-next-line new-cap\n                    result = new type_func(arg_string)\n                } else {\n                    throw err\n                }\n            }\n\n        } catch (err) {\n            // ArgumentTypeErrors indicate errors\n            if (err instanceof ArgumentTypeError) {\n                //let name = getattr(action.type, 'name', repr(action.type))\n                let msg = err.message\n                throw new ArgumentError(action, msg)\n\n            // TypeErrors or ValueErrors also indicate errors\n            } else if (err instanceof TypeError) {\n                let name = getattr(action.type, 'name', repr(action.type))\n                let args = {type: name, value: arg_string}\n                let msg = 'invalid %(type)s value: %(value)r'\n                throw new ArgumentError(action, sub(msg, args))\n            } else {\n                throw err\n            }\n        }\n\n        // return the converted value\n        return result\n    }\n\n    _check_value(action, value) {\n        // converted value must be one of the choices (if specified)\n        if (action.choices !== undefined && !_choices_to_array(action.choices).includes(value)) {\n            let args = {value,\n                        choices: _choices_to_array(action.choices).map(repr).join(', ')}\n            let msg = 'invalid choice: %(value)r (choose from %(choices)s)'\n            throw new ArgumentError(action, sub(msg, args))\n        }\n    }\n\n    // =======================\n    // Help-formatting methods\n    // =======================\n    format_usage() {\n        let formatter = this._get_formatter()\n        formatter.add_usage(this.usage, this._actions,\n                            this._mutually_exclusive_groups)\n        return formatter.format_help()\n    }\n\n    format_help() {\n        let formatter = this._get_formatter()\n\n        // usage\n        formatter.add_usage(this.usage, this._actions,\n                            this._mutually_exclusive_groups)\n\n        // description\n        formatter.add_text(this.description)\n\n        // positionals, optionals and user-defined groups\n        for (let action_group of this._action_groups) {\n            formatter.start_section(action_group.title)\n            formatter.add_text(action_group.description)\n            formatter.add_arguments(action_group._group_actions)\n            formatter.end_section()\n        }\n\n        // epilog\n        formatter.add_text(this.epilog)\n\n        // determine help from format above\n        return formatter.format_help()\n    }\n\n    _get_formatter() {\n        // eslint-disable-next-line new-cap\n        return new this.formatter_class({ prog: this.prog })\n    }\n\n    // =====================\n    // Help-printing methods\n    // =====================\n    print_usage(file = undefined) {\n        if (file === undefined) file = process.stdout\n        this._print_message(this.format_usage(), file)\n    }\n\n    print_help(file = undefined) {\n        if (file === undefined) file = process.stdout\n        this._print_message(this.format_help(), file)\n    }\n\n    _print_message(message, file = undefined) {\n        if (message) {\n            if (file === undefined) file = process.stderr\n            file.write(message)\n        }\n    }\n\n    // ===============\n    // Exiting methods\n    // ===============\n    exit(status = 0, message = undefined) {\n        if (message) {\n            this._print_message(message, process.stderr)\n        }\n        process.exit(status)\n    }\n\n    error(message) {\n        /*\n         *  error(message: string)\n         *\n         *  Prints a usage message incorporating the message to stderr and\n         *  exits.\n         *\n         *  If you override this in a subclass, it should not return -- it\n         *  should either exit or raise an exception.\n         */\n\n        // LEGACY (v1 compatibility), debug mode\n        if (this.debug === true) throw new Error(message)\n        // end\n        this.print_usage(process.stderr)\n        let args = {prog: this.prog, message: message}\n        this.exit(2, sub('%(prog)s: error: %(message)s\\n', args))\n    }\n}))\n\n\nmodule.exports = {\n    ArgumentParser,\n    ArgumentError,\n    ArgumentTypeError,\n    BooleanOptionalAction,\n    FileType,\n    HelpFormatter,\n    ArgumentDefaultsHelpFormatter,\n    RawDescriptionHelpFormatter,\n    RawTextHelpFormatter,\n    MetavarTypeHelpFormatter,\n    Namespace,\n    Action,\n    ONE_OR_MORE,\n    OPTIONAL,\n    PARSER,\n    REMAINDER,\n    SUPPRESS,\n    ZERO_OR_MORE\n}\n\n// LEGACY (v1 compatibility), Const alias\nObject.defineProperty(module.exports, 'Const', {\n    get() {\n        let result = {}\n        Object.entries({ ONE_OR_MORE, OPTIONAL, PARSER, REMAINDER, SUPPRESS, ZERO_OR_MORE }).forEach(([ n, v ]) => {\n            Object.defineProperty(result, n, {\n                get() {\n                    deprecate(n, sub('use argparse.%s instead of argparse.Const.%s', n, n))\n                    return v\n                }\n            })\n        })\n        Object.entries({ _UNRECOGNIZED_ARGS_ATTR }).forEach(([ n, v ]) => {\n            Object.defineProperty(result, n, {\n                get() {\n                    deprecate(n, sub('argparse.Const.%s is an internal symbol and will no longer be available', n))\n                    return v\n                }\n            })\n        })\n        return result\n    },\n    enumerable: false\n})\n// end\n/lib/textwrap.jsC// Partial port of python's argparse module, version 3.9.0 (only wrap and fill functions):\n// https://github.com/python/cpython/blob/v3.9.0b4/Lib/textwrap.py\n\n'use strict'\n\n/*\n * Text wrapping and filling.\n */\n\n// Copyright (C) 1999-2001 Gregory P. Ward.\n// Copyright (C) 2002, 2003 Python Software Foundation.\n// Copyright (C) 2020 argparse.js authors\n// Originally written by Greg Ward <gward@python.net>\n\n// Hardcode the recognized whitespace characters to the US-ASCII\n// whitespace characters.  The main reason for doing this is that\n// some Unicode spaces (like \\u00a0) are non-breaking whitespaces.\n//\n// This less funky little regex just split on recognized spaces. E.g.\n//   \"Hello there -- you goof-ball, use the -b option!\"\n// splits into\n//   Hello/ /there/ /--/ /you/ /goof-ball,/ /use/ /the/ /-b/ /option!/\nconst wordsep_simple_re = /([\\t\\n\\x0b\\x0c\\r ]+)/\n\nclass TextWrapper {\n    /*\n     *  Object for wrapping/filling text.  The public interface consists of\n     *  the wrap() and fill() methods; the other methods are just there for\n     *  subclasses to override in order to tweak the default behaviour.\n     *  If you want to completely replace the main wrapping algorithm,\n     *  you'll probably have to override _wrap_chunks().\n     *\n     *  Several instance attributes control various aspects of wrapping:\n     *    width (default: 70)\n     *      the maximum width of wrapped lines (unless break_long_words\n     *      is false)\n     *    initial_indent (default: \"\")\n     *      string that will be prepended to the first line of wrapped\n     *      output.  Counts towards the line's width.\n     *    subsequent_indent (default: \"\")\n     *      string that will be prepended to all lines save the first\n     *      of wrapped output; also counts towards each line's width.\n     *    expand_tabs (default: true)\n     *      Expand tabs in input text to spaces before further processing.\n     *      Each tab will become 0 .. 'tabsize' spaces, depending on its position\n     *      in its line.  If false, each tab is treated as a single character.\n     *    tabsize (default: 8)\n     *      Expand tabs in input text to 0 .. 'tabsize' spaces, unless\n     *      'expand_tabs' is false.\n     *    replace_whitespace (default: true)\n     *      Replace all whitespace characters in the input text by spaces\n     *      after tab expansion.  Note that if expand_tabs is false and\n     *      replace_whitespace is true, every tab will be converted to a\n     *      single space!\n     *    fix_sentence_endings (default: false)\n     *      Ensure that sentence-ending punctuation is always followed\n     *      by two spaces.  Off by default because the algorithm is\n     *      (unavoidably) imperfect.\n     *    break_long_words (default: true)\n     *      Break words longer than 'width'.  If false, those words will not\n     *      be broken, and some lines might be longer than 'width'.\n     *    break_on_hyphens (default: true)\n     *      Allow breaking hyphenated words. If true, wrapping will occur\n     *      preferably on whitespaces and right after hyphens part of\n     *      compound words.\n     *    drop_whitespace (default: true)\n     *      Drop leading and trailing whitespace from lines.\n     *    max_lines (default: None)\n     *      Truncate wrapped lines.\n     *    placeholder (default: ' [...]')\n     *      Append to the last line of truncated text.\n     */\n\n    constructor(options = {}) {\n        let {\n            width = 70,\n            initial_indent = '',\n            subsequent_indent = '',\n            expand_tabs = true,\n            replace_whitespace = true,\n            fix_sentence_endings = false,\n            break_long_words = true,\n            drop_whitespace = true,\n            break_on_hyphens = true,\n            tabsize = 8,\n            max_lines = undefined,\n            placeholder=' [...]'\n        } = options\n\n        this.width = width\n        this.initial_indent = initial_indent\n        this.subsequent_indent = subsequent_indent\n        this.expand_tabs = expand_tabs\n        this.replace_whitespace = replace_whitespace\n        this.fix_sentence_endings = fix_sentence_endings\n        this.break_long_words = break_long_words\n        this.drop_whitespace = drop_whitespace\n        this.break_on_hyphens = break_on_hyphens\n        this.tabsize = tabsize\n        this.max_lines = max_lines\n        this.placeholder = placeholder\n    }\n\n\n    // -- Private methods -----------------------------------------------\n    // (possibly useful for subclasses to override)\n\n    _munge_whitespace(text) {\n        /*\n         *  _munge_whitespace(text : string) -> string\n         *\n         *  Munge whitespace in text: expand tabs and convert all other\n         *  whitespace characters to spaces.  Eg. \" foo\\\\tbar\\\\n\\\\nbaz\"\n         *  becomes \" foo    bar  baz\".\n         */\n        if (this.expand_tabs) {\n            text = text.replace(/\\t/g, ' '.repeat(this.tabsize)) // not strictly correct in js\n        }\n        if (this.replace_whitespace) {\n            text = text.replace(/[\\t\\n\\x0b\\x0c\\r]/g, ' ')\n        }\n        return text\n    }\n\n    _split(text) {\n        /*\n         *  _split(text : string) -> [string]\n         *\n         *  Split the text to wrap into indivisible chunks.  Chunks are\n         *  not quite the same as words; see _wrap_chunks() for full\n         *  details.  As an example, the text\n         *    Look, goof-ball -- use the -b option!\n         *  breaks into the following chunks:\n         *    'Look,', ' ', 'goof-', 'ball', ' ', '--', ' ',\n         *    'use', ' ', 'the', ' ', '-b', ' ', 'option!'\n         *  if break_on_hyphens is True, or in:\n         *    'Look,', ' ', 'goof-ball', ' ', '--', ' ',\n         *    'use', ' ', 'the', ' ', '-b', ' ', option!'\n         *  otherwise.\n         */\n        let chunks = text.split(wordsep_simple_re)\n        chunks = chunks.filter(Boolean)\n        return chunks\n    }\n\n    _handle_long_word(reversed_chunks, cur_line, cur_len, width) {\n        /*\n         *  _handle_long_word(chunks : [string],\n         *                    cur_line : [string],\n         *                    cur_len : int, width : int)\n         *\n         *  Handle a chunk of text (most likely a word, not whitespace) that\n         *  is too long to fit in any line.\n         */\n        // Figure out when indent is larger than the specified width, and make\n        // sure at least one character is stripped off on every pass\n        let space_left\n        if (width < 1) {\n            space_left = 1\n        } else {\n            space_left = width - cur_len\n        }\n\n        // If we're allowed to break long words, then do so: put as much\n        // of the next chunk onto the current line as will fit.\n        if (this.break_long_words) {\n            cur_line.push(reversed_chunks[reversed_chunks.length - 1].slice(0, space_left))\n            reversed_chunks[reversed_chunks.length - 1] = reversed_chunks[reversed_chunks.length - 1].slice(space_left)\n\n        // Otherwise, we have to preserve the long word intact.  Only add\n        // it to the current line if there's nothing already there --\n        // that minimizes how much we violate the width constraint.\n        } else if (!cur_line) {\n            cur_line.push(...reversed_chunks.pop())\n        }\n\n        // If we're not allowed to break long words, and there's already\n        // text on the current line, do nothing.  Next time through the\n        // main loop of _wrap_chunks(), we'll wind up here again, but\n        // cur_len will be zero, so the next line will be entirely\n        // devoted to the long word that we can't handle right now.\n    }\n\n    _wrap_chunks(chunks) {\n        /*\n         *  _wrap_chunks(chunks : [string]) -> [string]\n         *\n         *  Wrap a sequence of text chunks and return a list of lines of\n         *  length 'self.width' or less.  (If 'break_long_words' is false,\n         *  some lines may be longer than this.)  Chunks correspond roughly\n         *  to words and the whitespace between them: each chunk is\n         *  indivisible (modulo 'break_long_words'), but a line break can\n         *  come between any two chunks.  Chunks should not have internal\n         *  whitespace; ie. a chunk is either all whitespace or a \"word\".\n         *  Whitespace chunks will be removed from the beginning and end of\n         *  lines, but apart from that whitespace is preserved.\n         */\n        let lines = []\n        let indent\n        if (this.width <= 0) {\n            throw Error(`invalid width ${this.width} (must be > 0)`)\n        }\n        if (this.max_lines !== undefined) {\n            if (this.max_lines > 1) {\n                indent = this.subsequent_indent\n            } else {\n                indent = this.initial_indent\n            }\n            if (indent.length + this.placeholder.trimStart().length > this.width) {\n                throw Error('placeholder too large for max width')\n            }\n        }\n\n        // Arrange in reverse order so items can be efficiently popped\n        // from a stack of chucks.\n        chunks = chunks.reverse()\n\n        while (chunks.length > 0) {\n\n            // Start the list of chunks that will make up the current line.\n            // cur_len is just the length of all the chunks in cur_line.\n            let cur_line = []\n            let cur_len = 0\n\n            // Figure out which static string will prefix this line.\n            let indent\n            if (lines) {\n                indent = this.subsequent_indent\n            } else {\n                indent = this.initial_indent\n            }\n\n            // Maximum width for this line.\n            let width = this.width - indent.length\n\n            // First chunk on line is whitespace -- drop it, unless this\n            // is the very beginning of the text (ie. no lines started yet).\n            if (this.drop_whitespace && chunks[chunks.length - 1].trim() === '' && lines.length > 0) {\n                chunks.pop()\n            }\n\n            while (chunks.length > 0) {\n                let l = chunks[chunks.length - 1].length\n\n                // Can at least squeeze this chunk onto the current line.\n                if (cur_len + l <= width) {\n                    cur_line.push(chunks.pop())\n                    cur_len += l\n\n                // Nope, this line is full.\n                } else {\n                    break\n                }\n            }\n\n            // The current line is full, and the next chunk is too big to\n            // fit on *any* line (not just this one).\n            if (chunks.length && chunks[chunks.length - 1].length > width) {\n                this._handle_long_word(chunks, cur_line, cur_len, width)\n                cur_len = cur_line.map(l => l.length).reduce((a, b) => a + b, 0)\n            }\n\n            // If the last chunk on this line is all whitespace, drop it.\n            if (this.drop_whitespace && cur_line.length > 0 && cur_line[cur_line.length - 1].trim() === '') {\n                cur_len -= cur_line[cur_line.length - 1].length\n                cur_line.pop()\n            }\n\n            if (cur_line) {\n                if (this.max_lines === undefined ||\n                    lines.length + 1 < this.max_lines ||\n                    (chunks.length === 0 ||\n                     this.drop_whitespace &&\n                     chunks.length === 1 &&\n                     !chunks[0].trim()) && cur_len <= width) {\n                    // Convert current line back to a string and store it in\n                    // list of all lines (return value).\n                    lines.push(indent + cur_line.join(''))\n                } else {\n                    let had_break = false\n                    while (cur_line) {\n                        if (cur_line[cur_line.length - 1].trim() &&\n                            cur_len + this.placeholder.length <= width) {\n                            cur_line.push(this.placeholder)\n                            lines.push(indent + cur_line.join(''))\n                            had_break = true\n                            break\n                        }\n                        cur_len -= cur_line[-1].length\n                        cur_line.pop()\n                    }\n                    if (!had_break) {\n                        if (lines) {\n                            let prev_line = lines[lines.length - 1].trimEnd()\n                            if (prev_line.length + this.placeholder.length <=\n                                    this.width) {\n                                lines[lines.length - 1] = prev_line + this.placeholder\n                                break\n                            }\n                        }\n                        lines.push(indent + this.placeholder.lstrip())\n                    }\n                    break\n                }\n            }\n        }\n\n        return lines\n    }\n\n    _split_chunks(text) {\n        text = this._munge_whitespace(text)\n        return this._split(text)\n    }\n\n    // -- Public interface ----------------------------------------------\n\n    wrap(text) {\n        /*\n         *  wrap(text : string) -> [string]\n         *\n         *  Reformat the single paragraph in 'text' so it fits in lines of\n         *  no more than 'self.width' columns, and return a list of wrapped\n         *  lines.  Tabs in 'text' are expanded with string.expandtabs(),\n         *  and all other whitespace characters (including newline) are\n         *  converted to space.\n         */\n        let chunks = this._split_chunks(text)\n        // not implemented in js\n        //if (this.fix_sentence_endings) {\n        //    this._fix_sentence_endings(chunks)\n        //}\n        return this._wrap_chunks(chunks)\n    }\n\n    fill(text) {\n        /*\n         *  fill(text : string) -> string\n         *\n         *  Reformat the single paragraph in 'text' to fit in lines of no\n         *  more than 'self.width' columns, and return a new string\n         *  containing the entire wrapped paragraph.\n         */\n        return this.wrap(text).join('\\n')\n    }\n}\n\n\n// -- Convenience interface ---------------------------------------------\n\nfunction wrap(text, options = {}) {\n    /*\n     *  Wrap a single paragraph of text, returning a list of wrapped lines.\n     *\n     *  Reformat the single paragraph in 'text' so it fits in lines of no\n     *  more than 'width' columns, and return a list of wrapped lines.  By\n     *  default, tabs in 'text' are expanded with string.expandtabs(), and\n     *  all other whitespace characters (including newline) are converted to\n     *  space.  See TextWrapper class for available keyword args to customize\n     *  wrapping behaviour.\n     */\n    let { width = 70, ...kwargs } = options\n    let w = new TextWrapper(Object.assign({ width }, kwargs))\n    return w.wrap(text)\n}\n\nfunction fill(text, options = {}) {\n    /*\n     *  Fill a single paragraph of text, returning a new string.\n     *\n     *  Reformat the single paragraph in 'text' to fit in lines of no more\n     *  than 'width' columns, and return a new string containing the entire\n     *  wrapped paragraph.  As with wrap(), tabs are expanded and other\n     *  whitespace characters converted to space.  See TextWrapper class for\n     *  available keyword args to customize wrapping behaviour.\n     */\n    let { width = 70, ...kwargs } = options\n    let w = new TextWrapper(Object.assign({ width }, kwargs))\n    return w.fill(text)\n}\n\n// -- Loosely related functionality -------------------------------------\n\nlet _whitespace_only_re = /^[ \\t]+$/mg\nlet _leading_whitespace_re = /(^[ \\t]*)(?:[^ \\t\\n])/mg\n\nfunction dedent(text) {\n    /*\n     *  Remove any common leading whitespace from every line in `text`.\n     *\n     *  This can be used to make triple-quoted strings line up with the left\n     *  edge of the display, while still presenting them in the source code\n     *  in indented form.\n     *\n     *  Note that tabs and spaces are both treated as whitespace, but they\n     *  are not equal: the lines \"  hello\" and \"\\\\thello\" are\n     *  considered to have no common leading whitespace.\n     *\n     *  Entirely blank lines are normalized to a newline character.\n     */\n    // Look for the longest leading string of spaces and tabs common to\n    // all lines.\n    let margin = undefined\n    text = text.replace(_whitespace_only_re, '')\n    let indents = text.match(_leading_whitespace_re) || []\n    for (let indent of indents) {\n        indent = indent.slice(0, -1)\n\n        if (margin === undefined) {\n            margin = indent\n\n        // Current line more deeply indented than previous winner:\n        // no change (previous winner is still on top).\n        } else if (indent.startsWith(margin)) {\n            // pass\n\n        // Current line consistent with and no deeper than previous winner:\n        // it's the new winner.\n        } else if (margin.startsWith(indent)) {\n            margin = indent\n\n        // Find the largest common whitespace between current line and previous\n        // winner.\n        } else {\n            for (let i = 0; i < margin.length && i < indent.length; i++) {\n                if (margin[i] !== indent[i]) {\n                    margin = margin.slice(0, i)\n                    break\n                }\n            }\n        }\n    }\n\n    if (margin) {\n        text = text.replace(new RegExp('^' + margin, 'mg'), '')\n    }\n    return text\n}\n\nmodule.exports = { wrap, fill, dedent }\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/YXJyYXktZmxhdHRlbkAxLjEuMQ==",
    "content": "/LICENSE\u0004OThe MIT License (MIT)\n\nCopyright (c) 2014 Blake Embrey (hello@blakeembrey.com)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n/README.md\u0004# Array Flatten\n\n[![NPM version][npm-image]][npm-url]\n[![NPM downloads][downloads-image]][downloads-url]\n[![Build status][travis-image]][travis-url]\n[![Test coverage][coveralls-image]][coveralls-url]\n\n> Flatten an array of nested arrays into a single flat array. Accepts an optional depth.\n\n## Installation\n\n```\nnpm install array-flatten --save\n```\n\n## Usage\n\n```javascript\nvar flatten = require('array-flatten')\n\nflatten([1, [2, [3, [4, [5], 6], 7], 8], 9])\n//=> [1, 2, 3, 4, 5, 6, 7, 8, 9]\n\nflatten([1, [2, [3, [4, [5], 6], 7], 8], 9], 2)\n//=> [1, 2, 3, [4, [5], 6], 7, 8, 9]\n\n(function () {\n  flatten(arguments) //=> [1, 2, 3]\n})(1, [2, 3])\n```\n\n## License\n\nMIT\n\n[npm-image]: https://img.shields.io/npm/v/array-flatten.svg?style=flat\n[npm-url]: https://npmjs.org/package/array-flatten\n[downloads-image]: https://img.shields.io/npm/dm/array-flatten.svg?style=flat\n[downloads-url]: https://npmjs.org/package/array-flatten\n[travis-image]: https://img.shields.io/travis/blakeembrey/array-flatten.svg?style=flat\n[travis-url]: https://travis-ci.org/blakeembrey/array-flatten\n[coveralls-image]: https://img.shields.io/coveralls/blakeembrey/array-flatten.svg?style=flat\n[coveralls-url]: https://coveralls.io/r/blakeembrey/array-flatten?branch=master\n/package.json\u0003o{\n  \"name\": \"array-flatten\",\n  \"version\": \"1.1.1\",\n  \"description\": \"Flatten an array of nested arrays into a single flat array\",\n  \"main\": \"array-flatten.js\",\n  \"files\": [\n    \"array-flatten.js\",\n    \"LICENSE\"\n  ],\n  \"scripts\": {\n    \"test\": \"istanbul cover _mocha -- -R spec\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git://github.com/blakeembrey/array-flatten.git\"\n  },\n  \"keywords\": [\n    \"array\",\n    \"flatten\",\n    \"arguments\",\n    \"depth\"\n  ],\n  \"author\": {\n    \"name\": \"Blake Embrey\",\n    \"email\": \"hello@blakeembrey.com\",\n    \"url\": \"http://blakeembrey.me\"\n  },\n  \"license\": \"MIT\",\n  \"bugs\": {\n    \"url\": \"https://github.com/blakeembrey/array-flatten/issues\"\n  },\n  \"homepage\": \"https://github.com/blakeembrey/array-flatten\",\n  \"devDependencies\": {\n    \"istanbul\": \"^0.3.13\",\n    \"mocha\": \"^2.2.4\",\n    \"pre-commit\": \"^1.0.7\",\n    \"standard\": \"^3.7.3\"\n  }\n}\n/array-flatten.js\u0004'use strict'\n\n/**\n * Expose `arrayFlatten`.\n */\nmodule.exports = arrayFlatten\n\n/**\n * Recursive flatten function with depth.\n *\n * @param  {Array}  array\n * @param  {Array}  result\n * @param  {Number} depth\n * @return {Array}\n */\nfunction flattenWithDepth (array, result, depth) {\n  for (var i = 0; i < array.length; i++) {\n    var value = array[i]\n\n    if (depth > 0 && Array.isArray(value)) {\n      flattenWithDepth(value, result, depth - 1)\n    } else {\n      result.push(value)\n    }\n  }\n\n  return result\n}\n\n/**\n * Recursive flatten function. Omitting depth is slightly faster.\n *\n * @param  {Array} array\n * @param  {Array} result\n * @return {Array}\n */\nfunction flattenForever (array, result) {\n  for (var i = 0; i < array.length; i++) {\n    var value = array[i]\n\n    if (Array.isArray(value)) {\n      flattenForever(value, result)\n    } else {\n      result.push(value)\n    }\n  }\n\n  return result\n}\n\n/**\n * Flatten an array, with the ability to define a depth.\n *\n * @param  {Array}  array\n * @param  {Number} depth\n * @return {Array}\n */\nfunction arrayFlatten (array, depth) {\n  if (depth == null) {\n    return flattenForever(array, [])\n  }\n\n  return flattenWithDepth(array, [], depth)\n}\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/YXN5bmMtcmV0cnlAMS4zLjM=",
    "content": "/README.md\u0006# async-retry\n\nRetrying made simple, easy, and async.\n\n## Usage\n\n```js\n// Packages\nconst retry = require('async-retry');\nconst fetch = require('node-fetch');\n\nawait retry(\n  async (bail) => {\n    // if anything throws, we retry\n    const res = await fetch('https://google.com');\n\n    if (403 === res.status) {\n      // don't retry upon 403\n      bail(new Error('Unauthorized'));\n      return;\n    }\n\n    const data = await res.text();\n    return data.substr(0, 500);\n  },\n  {\n    retries: 5,\n  }\n);\n```\n\n### API\n\n```js\nretry(retrier : Function, opts : Object) => Promise\n```\n\n- The supplied function can be `async` or not. In other words, it can be a function that returns a `Promise` or a value.\n- The supplied function receives two parameters\n  1. A `Function` you can invoke to abort the retrying (bail)\n  2. A `Number` identifying the attempt. The absolute first attempt (before any retries) is `1`.\n- The `opts` are passed to `node-retry`. Read [its docs](https://github.com/tim-kos/node-retry)\n  - `retries`: The maximum amount of times to retry the operation. Default is `10`.\n  - `factor`: The exponential factor to use. Default is `2`.\n  - `minTimeout`: The number of milliseconds before starting the first retry. Default is `1000`.\n  - `maxTimeout`: The maximum number of milliseconds between two retries. Default is `Infinity`.\n  - `randomize`: Randomizes the timeouts by multiplying with a factor between `1` to `2`. Default is `true`.\n  - `onRetry`: an optional `Function` that is invoked after a new retry is performed. It's passed the `Error` that triggered it as a parameter.\n\n## Authors\n\n- Guillermo Rauch ([@rauchg](https://twitter.com/rauchg)) - [Vercel](https://vercel.com)\n- Leo Lamprecht ([@notquiteleo](https://twitter.com/notquiteleo)) - [Vercel](https://vercel.com)\n/package.json\u0004{\n  \"name\": \"async-retry\",\n  \"version\": \"1.3.3\",\n  \"description\": \"Retrying made simple, easy and async\",\n  \"main\": \"./lib/index.js\",\n  \"scripts\": {\n    \"test\": \"yarn run test-lint && yarn run test-unit\",\n    \"test-lint\": \"eslint .\",\n    \"test-unit\": \"ava\",\n    \"lint:staged\": \"lint-staged\"\n  },\n  \"files\": [\n    \"lib\"\n  ],\n  \"license\": \"MIT\",\n  \"repository\": \"vercel/async-retry\",\n  \"ava\": {\n    \"failFast\": true\n  },\n  \"dependencies\": {\n    \"retry\": \"0.13.1\"\n  },\n  \"pre-commit\": \"lint:staged\",\n  \"lint-staged\": {\n    \"*.js\": [\n      \"eslint\",\n      \"prettier --write --single-quote\",\n      \"git add\"\n    ]\n  },\n  \"eslintConfig\": {\n    \"extends\": [\n      \"airbnb\",\n      \"prettier\"\n    ],\n    \"rules\": {\n      \"no-var\": 0,\n      \"prefer-arrow-callback\": 0\n    }\n  },\n  \"devDependencies\": {\n    \"ava\": \"3.15.0\",\n    \"eslint\": \"7.32.0\",\n    \"eslint-config-airbnb\": \"18.2.1\",\n    \"eslint-config-prettier\": \"8.3.0\",\n    \"eslint-plugin-import\": \"2.24.0\",\n    \"eslint-plugin-jsx-a11y\": \"6.4.1\",\n    \"eslint-plugin-react\": \"7.24.0\",\n    \"lint-staged\": \"11.1.2\",\n    \"node-fetch\": \"2.6.1\",\n    \"pre-commit\": \"1.2.2\",\n    \"prettier\": \"2.3.2\",\n    \"then-sleep\": \"1.0.1\"\n  }\n}\n/LICENSE.md\u00047The MIT License (MIT)\n\nCopyright (c) 2021 Vercel, Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n/lib/index.js\u0004// Packages\nvar retrier = require('retry');\n\nfunction retry(fn, opts) {\n  function run(resolve, reject) {\n    var options = opts || {};\n    var op;\n\n    // Default `randomize` to true\n    if (!('randomize' in options)) {\n      options.randomize = true;\n    }\n\n    op = retrier.operation(options);\n\n    // We allow the user to abort retrying\n    // this makes sense in the cases where\n    // knowledge is obtained that retrying\n    // would be futile (e.g.: auth errors)\n\n    function bail(err) {\n      reject(err || new Error('Aborted'));\n    }\n\n    function onError(err, num) {\n      if (err.bail) {\n        bail(err);\n        return;\n      }\n\n      if (!op.retry(err)) {\n        reject(op.mainError());\n      } else if (options.onRetry) {\n        options.onRetry(err, num);\n      }\n    }\n\n    function runAttempt(num) {\n      var val;\n\n      try {\n        val = fn(bail, num);\n      } catch (err) {\n        onError(err, num);\n        return;\n      }\n\n      Promise.resolve(val)\n        .then(resolve)\n        .catch(function catchIt(err) {\n          onError(err, num);\n        });\n    }\n\n    op.attempt(runAttempt);\n  }\n\n  return new Promise(run);\n}\n\nmodule.exports = retry;\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/YXRvbWljLXNsZWVwQDEuMC4w",
    "content": "/readme.md\u0006<h1 align=\"center\">Welcome to atomic-sleep ⏱️</h1>\n<p>\n  <img alt=\"Version\" src=\"https://img.shields.io/badge/version-1.0.0-blue.svg?cacheSeconds=2592000\" />\n  <a href=\"#\" target=\"_blank\">\n    <img alt=\"License: MIT\" src=\"https://img.shields.io/badge/License-MIT-yellow.svg\" />\n  </a>\n  <a href=\"https://twitter.com/davidmarkclem\" target=\"_blank\">\n    <img alt=\"Twitter: davidmarkclem\" src=\"https://img.shields.io/twitter/follow/davidmarkclem.svg?style=social\" />\n  </a>\n</p>\n\n> Zero CPU overhead, zero dependency, true event-loop blocking sleep\n\n## Usage\n\n```js\nconst sleep = require('atomic-sleep')\n\nconsole.time('sleep')\nsetTimeout(() => { console.timeEnd('sleep') }, 100) \nsleep(1000)\n```\n\nThe `console.time` will report a time of just over 1000ms despite the `setTimeout`\nbeing 100ms. This is because the event loop is paused for 1000ms and the setTimeout\nfires immediately after the event loop is no longer blocked (as more than 100ms have passed).\n\n## Install\n\n```sh\nnpm install\n```\n\n## Run tests\n\n```sh\nnpm test\n```\n\n## Support\n\nNode and Browser versions that support both `SharedArrayBuffer` and `Atomics` will have (virtually) zero CPU overhead sleep. \n\nFor Node, Atomic Sleep can provide zero CPU overhead sleep from Node 8 and up.\n\nFor browser support see https://caniuse.com/#feat=sharedarraybuffer and https://caniuse.com/#feat=mdn-javascript_builtins_atomics.\n\n\nFor older Node versions and olders browsers we fall back to blocking the event loop in a way that will cause a CPU spike. \n\n\n\n## Author\n\n👤 **David Mark Clements (@davidmarkclem)**\n\n* Twitter: [@davidmarkclem](https://twitter.com/davidmarkclem)\n* Github: [@davidmarkclements](https://github.com/davidmarkclements)\n/LICENSE\u0004?The MIT License (MIT)\nCopyright (c) 2020 David Mark Clements\n\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\nDAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\nOTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE\nOR OTHER DEALINGS IN THE SOFTWARE.\n\n/.travis.ymlelanguage: node_js\nsudo: false\nnode_js:\n  - 6\n  - 8\n  - 10\n  - 11\n  - 12\n  - 13\nscript:\n  - npm run ci/index.js\u0004'use strict'\n\n/* global SharedArrayBuffer, Atomics */\n\nif (typeof SharedArrayBuffer !== 'undefined' && typeof Atomics !== 'undefined') {\n  const nil = new Int32Array(new SharedArrayBuffer(4))\n\n  function sleep (ms) {\n    // also filters out NaN, non-number types, including empty strings, but allows bigints\n    const valid = ms > 0 && ms < Infinity \n    if (valid === false) {\n      if (typeof ms !== 'number' && typeof ms !== 'bigint') {\n        throw TypeError('sleep: ms must be a number')\n      }\n      throw RangeError('sleep: ms must be a number that is greater than 0 but less than Infinity')\n    }\n\n    Atomics.wait(nil, 0, 0, Number(ms))\n  }\n  module.exports = sleep\n} else {\n\n  function sleep (ms) {\n    // also filters out NaN, non-number types, including empty strings, but allows bigints\n    const valid = ms > 0 && ms < Infinity \n    if (valid === false) {\n      if (typeof ms !== 'number' && typeof ms !== 'bigint') {\n        throw TypeError('sleep: ms must be a number')\n      }\n      throw RangeError('sleep: ms must be a number that is greater than 0 but less than Infinity')\n    }\n    const target = Date.now() + Number(ms)\n    while (target > Date.now()){}\n  }\n\n  module.exports = sleep\n\n}\n/package.json\u0003s{\n  \"name\": \"atomic-sleep\",\n  \"version\": \"1.0.0\",\n  \"description\": \"Zero CPU overhead, zero dependency, true event-loop blocking sleep\",\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"test\": \"tap -R classic- -j1 test\",\n    \"lint\": \"standard\",\n    \"ci\": \"npm run lint && npm test\"\n  },\n  \"keywords\": [\n    \"sleep\",\n    \"pause\",\n    \"wait\",\n    \"performance\",\n    \"atomics\"\n  ],\n  \"engines\": {\n    \"node\": \">=8.0.0\"\n  },\n  \"author\": \"David Mark Clements (@davidmarkclem)\",\n  \"license\": \"MIT\",\n  \"devDependencies\": {\n    \"standard\": \"^14.3.1\",\n    \"tap\": \"^14.10.6\",\n    \"tape\": \"^4.13.2\"\n  },\n  \"dependencies\": {},\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/davidmarkclements/atomic-sleep.git\"\n  },\n  \"bugs\": {\n    \"url\": \"https://github.com/davidmarkclements/atomic-sleep/issues\"\n  },\n  \"homepage\": \"https://github.com/davidmarkclements/atomic-sleep#readme\"\n}\n/test.js\u00068'use strict'\nconst test = require('tape')\nconst sleep = require('.')\n\ntest('blocks event loop for given amount of milliseconds', ({ is, end }) => {\n  const now = Date.now()\n  setTimeout(() => {\n    const delta = Date.now() - now\n    const fuzzyDelta = Math.floor(delta / 10) * 10 // allow up to 10ms of execution lag\n    is(fuzzyDelta, 1000)\n    end()\n  }, 100)\n  sleep(1000)\n})\n\nif (typeof BigInt !== 'undefined') {\n\n  test('allows ms to be supplied as a BigInt number', ({ is, end }) => {\n    const now = Date.now()\n    setTimeout(() => {\n      const delta = Date.now() - now\n      const fuzzyDelta = Math.floor(delta / 10) * 10 // allow up to 10ms of execution lag\n      is(fuzzyDelta, 1000)\n      end()\n    }, 100)\n    sleep(BigInt(1000)) // avoiding n notation as this will error on legacy node/browsers\n  })\n\n}\n\ntest('throws range error if ms less than 0', ({ throws, end }) => {\n  throws(() => sleep(-1), RangeError('sleep: ms must be a number that is greater than 0 but less than Infinity'))\n  end()\n})\n\ntest('throws range error if ms is Infinity', ({ throws, end }) => {\n  throws(() => sleep(Infinity), RangeError('sleep: ms must be a number that is greater than 0 but less than Infinity'))\n  end()\n})\n\ntest('throws range error if ms is not a number or bigint', ({ throws, end }) => {\n  throws(() => sleep('Infinity'), TypeError('sleep: ms must be a number'))\n  throws(() => sleep('foo'), TypeError('sleep: ms must be a number'))\n  throws(() => sleep({a: 1}), TypeError('sleep: ms must be a number'))\n  throws(() => sleep([1,2,3]), TypeError('sleep: ms must be a number'))\n  end()\n})"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/Ym9keS1wYXJzZXJAMS4yMC4x",
    "content": "/lib/types/json.js\u0013/*!\n * body-parser\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar bytes = require('bytes')\nvar contentType = require('content-type')\nvar createError = require('http-errors')\nvar debug = require('debug')('body-parser:json')\nvar read = require('../read')\nvar typeis = require('type-is')\n\n/**\n * Module exports.\n */\n\nmodule.exports = json\n\n/**\n * RegExp to match the first non-space in a string.\n *\n * Allowed whitespace is defined in RFC 7159:\n *\n *    ws = *(\n *            %x20 /              ; Space\n *            %x09 /              ; Horizontal tab\n *            %x0A /              ; Line feed or New line\n *            %x0D )              ; Carriage return\n */\n\nvar FIRST_CHAR_REGEXP = /^[\\x20\\x09\\x0a\\x0d]*([^\\x20\\x09\\x0a\\x0d])/ // eslint-disable-line no-control-regex\n\n/**\n * Create a middleware to parse JSON bodies.\n *\n * @param {object} [options]\n * @return {function}\n * @public\n */\n\nfunction json (options) {\n  var opts = options || {}\n\n  var limit = typeof opts.limit !== 'number'\n    ? bytes.parse(opts.limit || '100kb')\n    : opts.limit\n  var inflate = opts.inflate !== false\n  var reviver = opts.reviver\n  var strict = opts.strict !== false\n  var type = opts.type || 'application/json'\n  var verify = opts.verify || false\n\n  if (verify !== false && typeof verify !== 'function') {\n    throw new TypeError('option verify must be function')\n  }\n\n  // create the appropriate type checking function\n  var shouldParse = typeof type !== 'function'\n    ? typeChecker(type)\n    : type\n\n  function parse (body) {\n    if (body.length === 0) {\n      // special-case empty json body, as it's a common client-side mistake\n      // TODO: maybe make this configurable or part of \"strict\" option\n      return {}\n    }\n\n    if (strict) {\n      var first = firstchar(body)\n\n      if (first !== '{' && first !== '[') {\n        debug('strict violation')\n        throw createStrictSyntaxError(body, first)\n      }\n    }\n\n    try {\n      debug('parse json')\n      return JSON.parse(body, reviver)\n    } catch (e) {\n      throw normalizeJsonSyntaxError(e, {\n        message: e.message,\n        stack: e.stack\n      })\n    }\n  }\n\n  return function jsonParser (req, res, next) {\n    if (req._body) {\n      debug('body already parsed')\n      next()\n      return\n    }\n\n    req.body = req.body || {}\n\n    // skip requests without bodies\n    if (!typeis.hasBody(req)) {\n      debug('skip empty body')\n      next()\n      return\n    }\n\n    debug('content-type %j', req.headers['content-type'])\n\n    // determine if request should be parsed\n    if (!shouldParse(req)) {\n      debug('skip parsing')\n      next()\n      return\n    }\n\n    // assert charset per RFC 7159 sec 8.1\n    var charset = getCharset(req) || 'utf-8'\n    if (charset.slice(0, 4) !== 'utf-') {\n      debug('invalid charset')\n      next(createError(415, 'unsupported charset \"' + charset.toUpperCase() + '\"', {\n        charset: charset,\n        type: 'charset.unsupported'\n      }))\n      return\n    }\n\n    // read\n    read(req, res, next, parse, debug, {\n      encoding: charset,\n      inflate: inflate,\n      limit: limit,\n      verify: verify\n    })\n  }\n}\n\n/**\n * Create strict violation syntax error matching native error.\n *\n * @param {string} str\n * @param {string} char\n * @return {Error}\n * @private\n */\n\nfunction createStrictSyntaxError (str, char) {\n  var index = str.indexOf(char)\n  var partial = index !== -1\n    ? str.substring(0, index) + '#'\n    : ''\n\n  try {\n    JSON.parse(partial); /* istanbul ignore next */ throw new SyntaxError('strict violation')\n  } catch (e) {\n    return normalizeJsonSyntaxError(e, {\n      message: e.message.replace('#', char),\n      stack: e.stack\n    })\n  }\n}\n\n/**\n * Get the first non-whitespace character in a string.\n *\n * @param {string} str\n * @return {function}\n * @private\n */\n\nfunction firstchar (str) {\n  var match = FIRST_CHAR_REGEXP.exec(str)\n\n  return match\n    ? match[1]\n    : undefined\n}\n\n/**\n * Get the charset of a request.\n *\n * @param {object} req\n * @api private\n */\n\nfunction getCharset (req) {\n  try {\n    return (contentType.parse(req).parameters.charset || '').toLowerCase()\n  } catch (e) {\n    return undefined\n  }\n}\n\n/**\n * Normalize a SyntaxError for JSON.parse.\n *\n * @param {SyntaxError} error\n * @param {object} obj\n * @return {SyntaxError}\n */\n\nfunction normalizeJsonSyntaxError (error, obj) {\n  var keys = Object.getOwnPropertyNames(error)\n\n  for (var i = 0; i < keys.length; i++) {\n    var key = keys[i]\n    if (key !== 'stack' && key !== 'message') {\n      delete error[key]\n    }\n  }\n\n  // replace stack before message for Node.js 0.10 and below\n  error.stack = obj.stack.replace(error.message, obj.message)\n  error.message = obj.message\n\n  return error\n}\n\n/**\n * Get the simple type checker.\n *\n * @param {string} type\n * @return {function}\n */\n\nfunction typeChecker (type) {\n  return function checkType (req) {\n    return Boolean(typeis(req, type))\n  }\n}\n/SECURITY.md\u0004# Security Policies and Procedures\n\n## Reporting a Bug\n\nThe Express team and community take all security bugs seriously. Thank you\nfor improving the security of Express. We appreciate your efforts and\nresponsible disclosure and will make every effort to acknowledge your\ncontributions.\n\nReport security bugs by emailing the current owner(s) of `body-parser`. This\ninformation can be found in the npm registry using the command\n`npm owner ls body-parser`.\nIf unsure or unable to get the information from the above, open an issue\nin the [project issue tracker](https://github.com/expressjs/body-parser/issues)\nasking for the current contact information.\n\nTo ensure the timely response to your report, please ensure that the entirety\nof the report is contained within the email body and not solely behind a web\nlink or an attachment.\n\nAt least one owner will acknowledge your email within 48 hours, and will send a\nmore detailed response within 48 hours indicating the next steps in handling\nyour report. After the initial reply to your report, the owners will\nendeavor to keep you informed of the progress towards a fix and full\nannouncement, and may ask for additional information or guidance.\n/lib/read.js\u0010/*!\n * body-parser\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar createError = require('http-errors')\nvar destroy = require('destroy')\nvar getBody = require('raw-body')\nvar iconv = require('iconv-lite')\nvar onFinished = require('on-finished')\nvar unpipe = require('unpipe')\nvar zlib = require('zlib')\n\n/**\n * Module exports.\n */\n\nmodule.exports = read\n\n/**\n * Read a request into a buffer and parse.\n *\n * @param {object} req\n * @param {object} res\n * @param {function} next\n * @param {function} parse\n * @param {function} debug\n * @param {object} options\n * @private\n */\n\nfunction read (req, res, next, parse, debug, options) {\n  var length\n  var opts = options\n  var stream\n\n  // flag as parsed\n  req._body = true\n\n  // read options\n  var encoding = opts.encoding !== null\n    ? opts.encoding\n    : null\n  var verify = opts.verify\n\n  try {\n    // get the content stream\n    stream = contentstream(req, debug, opts.inflate)\n    length = stream.length\n    stream.length = undefined\n  } catch (err) {\n    return next(err)\n  }\n\n  // set raw-body options\n  opts.length = length\n  opts.encoding = verify\n    ? null\n    : encoding\n\n  // assert charset is supported\n  if (opts.encoding === null && encoding !== null && !iconv.encodingExists(encoding)) {\n    return next(createError(415, 'unsupported charset \"' + encoding.toUpperCase() + '\"', {\n      charset: encoding.toLowerCase(),\n      type: 'charset.unsupported'\n    }))\n  }\n\n  // read body\n  debug('read body')\n  getBody(stream, opts, function (error, body) {\n    if (error) {\n      var _error\n\n      if (error.type === 'encoding.unsupported') {\n        // echo back charset\n        _error = createError(415, 'unsupported charset \"' + encoding.toUpperCase() + '\"', {\n          charset: encoding.toLowerCase(),\n          type: 'charset.unsupported'\n        })\n      } else {\n        // set status code on error\n        _error = createError(400, error)\n      }\n\n      // unpipe from stream and destroy\n      if (stream !== req) {\n        unpipe(req)\n        destroy(stream, true)\n      }\n\n      // read off entire request\n      dump(req, function onfinished () {\n        next(createError(400, _error))\n      })\n      return\n    }\n\n    // verify\n    if (verify) {\n      try {\n        debug('verify body')\n        verify(req, res, body, encoding)\n      } catch (err) {\n        next(createError(403, err, {\n          body: body,\n          type: err.type || 'entity.verify.failed'\n        }))\n        return\n      }\n    }\n\n    // parse\n    var str = body\n    try {\n      debug('parse body')\n      str = typeof body !== 'string' && encoding !== null\n        ? iconv.decode(body, encoding)\n        : body\n      req.body = parse(str)\n    } catch (err) {\n      next(createError(400, err, {\n        body: str,\n        type: err.type || 'entity.parse.failed'\n      }))\n      return\n    }\n\n    next()\n  })\n}\n\n/**\n * Get the content stream of the request.\n *\n * @param {object} req\n * @param {function} debug\n * @param {boolean} [inflate=true]\n * @return {object}\n * @api private\n */\n\nfunction contentstream (req, debug, inflate) {\n  var encoding = (req.headers['content-encoding'] || 'identity').toLowerCase()\n  var length = req.headers['content-length']\n  var stream\n\n  debug('content-encoding \"%s\"', encoding)\n\n  if (inflate === false && encoding !== 'identity') {\n    throw createError(415, 'content encoding unsupported', {\n      encoding: encoding,\n      type: 'encoding.unsupported'\n    })\n  }\n\n  switch (encoding) {\n    case 'deflate':\n      stream = zlib.createInflate()\n      debug('inflate body')\n      req.pipe(stream)\n      break\n    case 'gzip':\n      stream = zlib.createGunzip()\n      debug('gunzip body')\n      req.pipe(stream)\n      break\n    case 'identity':\n      stream = req\n      stream.length = length\n      break\n    default:\n      throw createError(415, 'unsupported content encoding \"' + encoding + '\"', {\n        encoding: encoding,\n        type: 'encoding.unsupported'\n      })\n  }\n\n  return stream\n}\n\n/**\n * Dump the contents of a request.\n *\n * @param {object} req\n * @param {function} callback\n * @api private\n */\n\nfunction dump (req, callback) {\n  if (onFinished.isFinished(req)) {\n    callback(null)\n  } else {\n    onFinished(req, callback)\n    req.resume()\n  }\n}\n/lib/types/text.js\b/*!\n * body-parser\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n */\n\nvar bytes = require('bytes')\nvar contentType = require('content-type')\nvar debug = require('debug')('body-parser:text')\nvar read = require('../read')\nvar typeis = require('type-is')\n\n/**\n * Module exports.\n */\n\nmodule.exports = text\n\n/**\n * Create a middleware to parse text bodies.\n *\n * @param {object} [options]\n * @return {function}\n * @api public\n */\n\nfunction text (options) {\n  var opts = options || {}\n\n  var defaultCharset = opts.defaultCharset || 'utf-8'\n  var inflate = opts.inflate !== false\n  var limit = typeof opts.limit !== 'number'\n    ? bytes.parse(opts.limit || '100kb')\n    : opts.limit\n  var type = opts.type || 'text/plain'\n  var verify = opts.verify || false\n\n  if (verify !== false && typeof verify !== 'function') {\n    throw new TypeError('option verify must be function')\n  }\n\n  // create the appropriate type checking function\n  var shouldParse = typeof type !== 'function'\n    ? typeChecker(type)\n    : type\n\n  function parse (buf) {\n    return buf\n  }\n\n  return function textParser (req, res, next) {\n    if (req._body) {\n      debug('body already parsed')\n      next()\n      return\n    }\n\n    req.body = req.body || {}\n\n    // skip requests without bodies\n    if (!typeis.hasBody(req)) {\n      debug('skip empty body')\n      next()\n      return\n    }\n\n    debug('content-type %j', req.headers['content-type'])\n\n    // determine if request should be parsed\n    if (!shouldParse(req)) {\n      debug('skip parsing')\n      next()\n      return\n    }\n\n    // get charset\n    var charset = getCharset(req) || defaultCharset\n\n    // read\n    read(req, res, next, parse, debug, {\n      encoding: charset,\n      inflate: inflate,\n      limit: limit,\n      verify: verify\n    })\n  }\n}\n\n/**\n * Get the charset of a request.\n *\n * @param {object} req\n * @api private\n */\n\nfunction getCharset (req) {\n  try {\n    return (contentType.parse(req).parameters.charset || '').toLowerCase()\n  } catch (e) {\n    return undefined\n  }\n}\n\n/**\n * Get the simple type checker.\n *\n * @param {string} type\n * @return {function}\n */\n\nfunction typeChecker (type) {\n  return function checkType (req) {\n    return Boolean(typeis(req, type))\n  }\n}\n/LICENSE\u0004(The MIT License)\n\nCopyright (c) 2014 Jonathan Ong <me@jongleberry.com>\nCopyright (c) 2014-2015 Douglas Christopher Wilson <doug@somethingdoug.com>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n/README.mdG\u0015# body-parser\n\n[![NPM Version][npm-image]][npm-url]\n[![NPM Downloads][downloads-image]][downloads-url]\n[![Build Status][github-actions-ci-image]][github-actions-ci-url]\n[![Test Coverage][coveralls-image]][coveralls-url]\n\nNode.js body parsing middleware.\n\nParse incoming request bodies in a middleware before your handlers, available\nunder the `req.body` property.\n\n**Note** As `req.body`'s shape is based on user-controlled input, all\nproperties and values in this object are untrusted and should be validated\nbefore trusting. For example, `req.body.foo.toString()` may fail in multiple\nways, for example the `foo` property may not be there or may not be a string,\nand `toString` may not be a function and instead a string or other user input.\n\n[Learn about the anatomy of an HTTP transaction in Node.js](https://nodejs.org/en/docs/guides/anatomy-of-an-http-transaction/).\n\n_This does not handle multipart bodies_, due to their complex and typically\nlarge nature. For multipart bodies, you may be interested in the following\nmodules:\n\n  * [busboy](https://www.npmjs.org/package/busboy#readme) and\n    [connect-busboy](https://www.npmjs.org/package/connect-busboy#readme)\n  * [multiparty](https://www.npmjs.org/package/multiparty#readme) and\n    [connect-multiparty](https://www.npmjs.org/package/connect-multiparty#readme)\n  * [formidable](https://www.npmjs.org/package/formidable#readme)\n  * [multer](https://www.npmjs.org/package/multer#readme)\n\nThis module provides the following parsers:\n\n  * [JSON body parser](#bodyparserjsonoptions)\n  * [Raw body parser](#bodyparserrawoptions)\n  * [Text body parser](#bodyparsertextoptions)\n  * [URL-encoded form body parser](#bodyparserurlencodedoptions)\n\nOther body parsers you might be interested in:\n\n- [body](https://www.npmjs.org/package/body#readme)\n- [co-body](https://www.npmjs.org/package/co-body#readme)\n\n## Installation\n\n```sh\n$ npm install body-parser\n```\n\n## API\n\n```js\nvar bodyParser = require('body-parser')\n```\n\nThe `bodyParser` object exposes various factories to create middlewares. All\nmiddlewares will populate the `req.body` property with the parsed body when\nthe `Content-Type` request header matches the `type` option, or an empty\nobject (`{}`) if there was no body to parse, the `Content-Type` was not matched,\nor an error occurred.\n\nThe various errors returned by this module are described in the\n[errors section](#errors).\n\n### bodyParser.json([options])\n\nReturns middleware that only parses `json` and only looks at requests where\nthe `Content-Type` header matches the `type` option. This parser accepts any\nUnicode encoding of the body and supports automatic inflation of `gzip` and\n`deflate` encodings.\n\nA new `body` object containing the parsed data is populated on the `request`\nobject after the middleware (i.e. `req.body`).\n\n#### Options\n\nThe `json` function takes an optional `options` object that may contain any of\nthe following keys:\n\n##### inflate\n\nWhen set to `true`, then deflated (compressed) bodies will be inflated; when\n`false`, deflated bodies are rejected. Defaults to `true`.\n\n##### limit\n\nControls the maximum request body size. If this is a number, then the value\nspecifies the number of bytes; if it is a string, the value is passed to the\n[bytes](https://www.npmjs.com/package/bytes) library for parsing. Defaults\nto `'100kb'`.\n\n##### reviver\n\nThe `reviver` option is passed directly to `JSON.parse` as the second\nargument. You can find more information on this argument\n[in the MDN documentation about JSON.parse](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#Example.3A_Using_the_reviver_parameter).\n\n##### strict\n\nWhen set to `true`, will only accept arrays and objects; when `false` will\naccept anything `JSON.parse` accepts. Defaults to `true`.\n\n##### type\n\nThe `type` option is used to determine what media type the middleware will\nparse. This option can be a string, array of strings, or a function. If not a\nfunction, `type` option is passed directly to the\n[type-is](https://www.npmjs.org/package/type-is#readme) library and this can\nbe an extension name (like `json`), a mime type (like `application/json`), or\na mime type with a wildcard (like `*/*` or `*/json`). If a function, the `type`\noption is called as `fn(req)` and the request is parsed if it returns a truthy\nvalue. Defaults to `application/json`.\n\n##### verify\n\nThe `verify` option, if supplied, is called as `verify(req, res, buf, encoding)`,\nwhere `buf` is a `Buffer` of the raw request body and `encoding` is the\nencoding of the request. The parsing can be aborted by throwing an error.\n\n### bodyParser.raw([options])\n\nReturns middleware that parses all bodies as a `Buffer` and only looks at\nrequests where the `Content-Type` header matches the `type` option. This\nparser supports automatic inflation of `gzip` and `deflate` encodings.\n\nA new `body` object containing the parsed data is populated on the `request`\nobject after the middleware (i.e. `req.body`). This will be a `Buffer` object\nof the body.\n\n#### Options\n\nThe `raw` function takes an optional `options` object that may contain any of\nthe following keys:\n\n##### inflate\n\nWhen set to `true`, then deflated (compressed) bodies will be inflated; when\n`false`, deflated bodies are rejected. Defaults to `true`.\n\n##### limit\n\nControls the maximum request body size. If this is a number, then the value\nspecifies the number of bytes; if it is a string, the value is passed to the\n[bytes](https://www.npmjs.com/package/bytes) library for parsing. Defaults\nto `'100kb'`.\n\n##### type\n\nThe `type` option is used to determine what media type the middleware will\nparse. This option can be a string, array of strings, or a function.\nIf not a function, `type` option is passed directly to the\n[type-is](https://www.npmjs.org/package/type-is#readme) library and this\ncan be an extension name (like `bin`), a mime type (like\n`application/octet-stream`), or a mime type with a wildcard (like `*/*` or\n`application/*`). If a function, the `type` option is called as `fn(req)`\nand the request is parsed if it returns a truthy value. Defaults to\n`application/octet-stream`.\n\n##### verify\n\nThe `verify` option, if supplied, is called as `verify(req, res, buf, encoding)`,\nwhere `buf` is a `Buffer` of the raw request body and `encoding` is the\nencoding of the request. The parsing can be aborted by throwing an error.\n\n### bodyParser.text([options])\n\nReturns middleware that parses all bodies as a string and only looks at\nrequests where the `Content-Type` header matches the `type` option. This\nparser supports automatic inflation of `gzip` and `deflate` encodings.\n\nA new `body` string containing the parsed data is populated on the `request`\nobject after the middleware (i.e. `req.body`). This will be a string of the\nbody.\n\n#### Options\n\nThe `text` function takes an optional `options` object that may contain any of\nthe following keys:\n\n##### defaultCharset\n\nSpecify the default character set for the text content if the charset is not\nspecified in the `Content-Type` header of the request. Defaults to `utf-8`.\n\n##### inflate\n\nWhen set to `true`, then deflated (compressed) bodies will be inflated; when\n`false`, deflated bodies are rejected. Defaults to `true`.\n\n##### limit\n\nControls the maximum request body size. If this is a number, then the value\nspecifies the number of bytes; if it is a string, the value is passed to the\n[bytes](https://www.npmjs.com/package/bytes) library for parsing. Defaults\nto `'100kb'`.\n\n##### type\n\nThe `type` option is used to determine what media type the middleware will\nparse. This option can be a string, array of strings, or a function. If not\na function, `type` option is passed directly to the\n[type-is](https://www.npmjs.org/package/type-is#readme) library and this can\nbe an extension name (like `txt`), a mime type (like `text/plain`), or a mime\ntype with a wildcard (like `*/*` or `text/*`). If a function, the `type`\noption is called as `fn(req)` and the request is parsed if it returns a\ntruthy value. Defaults to `text/plain`.\n\n##### verify\n\nThe `verify` option, if supplied, is called as `verify(req, res, buf, encoding)`,\nwhere `buf` is a `Buffer` of the raw request body and `encoding` is the\nencoding of the request. The parsing can be aborted by throwing an error.\n\n### bodyParser.urlencoded([options])\n\nReturns middleware that only parses `urlencoded` bodies and only looks at\nrequests where the `Content-Type` header matches the `type` option. This\nparser accepts only UTF-8 encoding of the body and supports automatic\ninflation of `gzip` and `deflate` encodings.\n\nA new `body` object containing the parsed data is populated on the `request`\nobject after the middleware (i.e. `req.body`). This object will contain\nkey-value pairs, where the value can be a string or array (when `extended` is\n`false`), or any type (when `extended` is `true`).\n\n#### Options\n\nThe `urlencoded` function takes an optional `options` object that may contain\nany of the following keys:\n\n##### extended\n\nThe `extended` option allows to choose between parsing the URL-encoded data\nwith the `querystring` library (when `false`) or the `qs` library (when\n`true`). The \"extended\" syntax allows for rich objects and arrays to be\nencoded into the URL-encoded format, allowing for a JSON-like experience\nwith URL-encoded. For more information, please\n[see the qs library](https://www.npmjs.org/package/qs#readme).\n\nDefaults to `true`, but using the default has been deprecated. Please\nresearch into the difference between `qs` and `querystring` and choose the\nappropriate setting.\n\n##### inflate\n\nWhen set to `true`, then deflated (compressed) bodies will be inflated; when\n`false`, deflated bodies are rejected. Defaults to `true`.\n\n##### limit\n\nControls the maximum request body size. If this is a number, then the value\nspecifies the number of bytes; if it is a string, the value is passed to the\n[bytes](https://www.npmjs.com/package/bytes) library for parsing. Defaults\nto `'100kb'`.\n\n##### parameterLimit\n\nThe `parameterLimit` option controls the maximum number of parameters that\nare allowed in the URL-encoded data. If a request contains more parameters\nthan this value, a 413 will be returned to the client. Defaults to `1000`.\n\n##### type\n\nThe `type` option is used to determine what media type the middleware will\nparse. This option can be a string, array of strings, or a function. If not\na function, `type` option is passed directly to the\n[type-is](https://www.npmjs.org/package/type-is#readme) library and this can\nbe an extension name (like `urlencoded`), a mime type (like\n`application/x-www-form-urlencoded`), or a mime type with a wildcard (like\n`*/x-www-form-urlencoded`). If a function, the `type` option is called as\n`fn(req)` and the request is parsed if it returns a truthy value. Defaults\nto `application/x-www-form-urlencoded`.\n\n##### verify\n\nThe `verify` option, if supplied, is called as `verify(req, res, buf, encoding)`,\nwhere `buf` is a `Buffer` of the raw request body and `encoding` is the\nencoding of the request. The parsing can be aborted by throwing an error.\n\n## Errors\n\nThe middlewares provided by this module create errors using the\n[`http-errors` module](https://www.npmjs.com/package/http-errors). The errors\nwill typically have a `status`/`statusCode` property that contains the suggested\nHTTP response code, an `expose` property to determine if the `message` property\nshould be displayed to the client, a `type` property to determine the type of\nerror without matching against the `message`, and a `body` property containing\nthe read body, if available.\n\nThe following are the common errors created, though any error can come through\nfor various reasons.\n\n### content encoding unsupported\n\nThis error will occur when the request had a `Content-Encoding` header that\ncontained an encoding but the \"inflation\" option was set to `false`. The\n`status` property is set to `415`, the `type` property is set to\n`'encoding.unsupported'`, and the `charset` property will be set to the\nencoding that is unsupported.\n\n### entity parse failed\n\nThis error will occur when the request contained an entity that could not be\nparsed by the middleware. The `status` property is set to `400`, the `type`\nproperty is set to `'entity.parse.failed'`, and the `body` property is set to\nthe entity value that failed parsing.\n\n### entity verify failed\n\nThis error will occur when the request contained an entity that could not be\nfailed verification by the defined `verify` option. The `status` property is\nset to `403`, the `type` property is set to `'entity.verify.failed'`, and the\n`body` property is set to the entity value that failed verification.\n\n### request aborted\n\nThis error will occur when the request is aborted by the client before reading\nthe body has finished. The `received` property will be set to the number of\nbytes received before the request was aborted and the `expected` property is\nset to the number of expected bytes. The `status` property is set to `400`\nand `type` property is set to `'request.aborted'`.\n\n### request entity too large\n\nThis error will occur when the request body's size is larger than the \"limit\"\noption. The `limit` property will be set to the byte limit and the `length`\nproperty will be set to the request body's length. The `status` property is\nset to `413` and the `type` property is set to `'entity.too.large'`.\n\n### request size did not match content length\n\nThis error will occur when the request's length did not match the length from\nthe `Content-Length` header. This typically occurs when the request is malformed,\ntypically when the `Content-Length` header was calculated based on characters\ninstead of bytes. The `status` property is set to `400` and the `type` property\nis set to `'request.size.invalid'`.\n\n### stream encoding should not be set\n\nThis error will occur when something called the `req.setEncoding` method prior\nto this middleware. This module operates directly on bytes only and you cannot\ncall `req.setEncoding` when using this module. The `status` property is set to\n`500` and the `type` property is set to `'stream.encoding.set'`.\n\n### stream is not readable\n\nThis error will occur when the request is no longer readable when this middleware\nattempts to read it. This typically means something other than a middleware from\nthis module read the request body already and the middleware was also configured to\nread the same request. The `status` property is set to `500` and the `type`\nproperty is set to `'stream.not.readable'`.\n\n### too many parameters\n\nThis error will occur when the content of the request exceeds the configured\n`parameterLimit` for the `urlencoded` parser. The `status` property is set to\n`413` and the `type` property is set to `'parameters.too.many'`.\n\n### unsupported charset \"BOGUS\"\n\nThis error will occur when the request had a charset parameter in the\n`Content-Type` header, but the `iconv-lite` module does not support it OR the\nparser does not support it. The charset is contained in the message as well\nas in the `charset` property. The `status` property is set to `415`, the\n`type` property is set to `'charset.unsupported'`, and the `charset` property\nis set to the charset that is unsupported.\n\n### unsupported content encoding \"bogus\"\n\nThis error will occur when the request had a `Content-Encoding` header that\ncontained an unsupported encoding. The encoding is contained in the message\nas well as in the `encoding` property. The `status` property is set to `415`,\nthe `type` property is set to `'encoding.unsupported'`, and the `encoding`\nproperty is set to the encoding that is unsupported.\n\n## Examples\n\n### Express/Connect top-level generic\n\nThis example demonstrates adding a generic JSON and URL-encoded parser as a\ntop-level middleware, which will parse the bodies of all incoming requests.\nThis is the simplest setup.\n\n```js\nvar express = require('express')\nvar bodyParser = require('body-parser')\n\nvar app = express()\n\n// parse application/x-www-form-urlencoded\napp.use(bodyParser.urlencoded({ extended: false }))\n\n// parse application/json\napp.use(bodyParser.json())\n\napp.use(function (req, res) {\n  res.setHeader('Content-Type', 'text/plain')\n  res.write('you posted:\\n')\n  res.end(JSON.stringify(req.body, null, 2))\n})\n```\n\n### Express route-specific\n\nThis example demonstrates adding body parsers specifically to the routes that\nneed them. In general, this is the most recommended way to use body-parser with\nExpress.\n\n```js\nvar express = require('express')\nvar bodyParser = require('body-parser')\n\nvar app = express()\n\n// create application/json parser\nvar jsonParser = bodyParser.json()\n\n// create application/x-www-form-urlencoded parser\nvar urlencodedParser = bodyParser.urlencoded({ extended: false })\n\n// POST /login gets urlencoded bodies\napp.post('/login', urlencodedParser, function (req, res) {\n  res.send('welcome, ' + req.body.username)\n})\n\n// POST /api/users gets JSON bodies\napp.post('/api/users', jsonParser, function (req, res) {\n  // create user in req.body\n})\n```\n\n### Change accepted type for parsers\n\nAll the parsers accept a `type` option which allows you to change the\n`Content-Type` that the middleware will parse.\n\n```js\nvar express = require('express')\nvar bodyParser = require('body-parser')\n\nvar app = express()\n\n// parse various different custom JSON types as JSON\napp.use(bodyParser.json({ type: 'application/*+json' }))\n\n// parse some custom thing into a Buffer\napp.use(bodyParser.raw({ type: 'application/vnd.custom-type' }))\n\n// parse an HTML body into a string\napp.use(bodyParser.text({ type: 'text/html' }))\n```\n\n## License\n\n[MIT](LICENSE)\n\n[npm-image]: https://img.shields.io/npm/v/body-parser.svg\n[npm-url]: https://npmjs.org/package/body-parser\n[coveralls-image]: https://img.shields.io/coveralls/expressjs/body-parser/master.svg\n[coveralls-url]: https://coveralls.io/r/expressjs/body-parser?branch=master\n[downloads-image]: https://img.shields.io/npm/dm/body-parser.svg\n[downloads-url]: https://npmjs.org/package/body-parser\n[github-actions-ci-image]: https://img.shields.io/github/workflow/status/expressjs/body-parser/ci/master?label=ci\n[github-actions-ci-url]: https://github.com/expressjs/body-parser/actions/workflows/ci.yml\n/index.js\ny/*!\n * body-parser\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar deprecate = require('depd')('body-parser')\n\n/**\n * Cache of loaded parsers.\n * @private\n */\n\nvar parsers = Object.create(null)\n\n/**\n * @typedef Parsers\n * @type {function}\n * @property {function} json\n * @property {function} raw\n * @property {function} text\n * @property {function} urlencoded\n */\n\n/**\n * Module exports.\n * @type {Parsers}\n */\n\nexports = module.exports = deprecate.function(bodyParser,\n  'bodyParser: use individual json/urlencoded middlewares')\n\n/**\n * JSON parser.\n * @public\n */\n\nObject.defineProperty(exports, 'json', {\n  configurable: true,\n  enumerable: true,\n  get: createParserGetter('json')\n})\n\n/**\n * Raw parser.\n * @public\n */\n\nObject.defineProperty(exports, 'raw', {\n  configurable: true,\n  enumerable: true,\n  get: createParserGetter('raw')\n})\n\n/**\n * Text parser.\n * @public\n */\n\nObject.defineProperty(exports, 'text', {\n  configurable: true,\n  enumerable: true,\n  get: createParserGetter('text')\n})\n\n/**\n * URL-encoded parser.\n * @public\n */\n\nObject.defineProperty(exports, 'urlencoded', {\n  configurable: true,\n  enumerable: true,\n  get: createParserGetter('urlencoded')\n})\n\n/**\n * Create a middleware to parse json and urlencoded bodies.\n *\n * @param {object} [options]\n * @return {function}\n * @deprecated\n * @public\n */\n\nfunction bodyParser (options) {\n  // use default type for parsers\n  var opts = Object.create(options || null, {\n    type: {\n      configurable: true,\n      enumerable: true,\n      value: undefined,\n      writable: true\n    }\n  })\n\n  var _urlencoded = exports.urlencoded(opts)\n  var _json = exports.json(opts)\n\n  return function bodyParser (req, res, next) {\n    _json(req, res, function (err) {\n      if (err) return next(err)\n      _urlencoded(req, res, next)\n    })\n  }\n}\n\n/**\n * Create a getter for loading a parser.\n * @private\n */\n\nfunction createParserGetter (name) {\n  return function get () {\n    return loadParser(name)\n  }\n}\n\n/**\n * Load a parser module.\n * @private\n */\n\nfunction loadParser (parserName) {\n  var parser = parsers[parserName]\n\n  if (parser !== undefined) {\n    return parser\n  }\n\n  // this uses a switch for static require analysis\n  switch (parserName) {\n    case 'json':\n      parser = require('./lib/types/json')\n      break\n    case 'raw':\n      parser = require('./lib/types/raw')\n      break\n    case 'text':\n      parser = require('./lib/types/text')\n      break\n    case 'urlencoded':\n      parser = require('./lib/types/urlencoded')\n      break\n  }\n\n  // store to prevent invoking require()\n  return (parsers[parserName] = parser)\n}\n/lib/types/urlencoded.js\u0016/*!\n * body-parser\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar bytes = require('bytes')\nvar contentType = require('content-type')\nvar createError = require('http-errors')\nvar debug = require('debug')('body-parser:urlencoded')\nvar deprecate = require('depd')('body-parser')\nvar read = require('../read')\nvar typeis = require('type-is')\n\n/**\n * Module exports.\n */\n\nmodule.exports = urlencoded\n\n/**\n * Cache of parser modules.\n */\n\nvar parsers = Object.create(null)\n\n/**\n * Create a middleware to parse urlencoded bodies.\n *\n * @param {object} [options]\n * @return {function}\n * @public\n */\n\nfunction urlencoded (options) {\n  var opts = options || {}\n\n  // notice because option default will flip in next major\n  if (opts.extended === undefined) {\n    deprecate('undefined extended: provide extended option')\n  }\n\n  var extended = opts.extended !== false\n  var inflate = opts.inflate !== false\n  var limit = typeof opts.limit !== 'number'\n    ? bytes.parse(opts.limit || '100kb')\n    : opts.limit\n  var type = opts.type || 'application/x-www-form-urlencoded'\n  var verify = opts.verify || false\n\n  if (verify !== false && typeof verify !== 'function') {\n    throw new TypeError('option verify must be function')\n  }\n\n  // create the appropriate query parser\n  var queryparse = extended\n    ? extendedparser(opts)\n    : simpleparser(opts)\n\n  // create the appropriate type checking function\n  var shouldParse = typeof type !== 'function'\n    ? typeChecker(type)\n    : type\n\n  function parse (body) {\n    return body.length\n      ? queryparse(body)\n      : {}\n  }\n\n  return function urlencodedParser (req, res, next) {\n    if (req._body) {\n      debug('body already parsed')\n      next()\n      return\n    }\n\n    req.body = req.body || {}\n\n    // skip requests without bodies\n    if (!typeis.hasBody(req)) {\n      debug('skip empty body')\n      next()\n      return\n    }\n\n    debug('content-type %j', req.headers['content-type'])\n\n    // determine if request should be parsed\n    if (!shouldParse(req)) {\n      debug('skip parsing')\n      next()\n      return\n    }\n\n    // assert charset\n    var charset = getCharset(req) || 'utf-8'\n    if (charset !== 'utf-8') {\n      debug('invalid charset')\n      next(createError(415, 'unsupported charset \"' + charset.toUpperCase() + '\"', {\n        charset: charset,\n        type: 'charset.unsupported'\n      }))\n      return\n    }\n\n    // read\n    read(req, res, next, parse, debug, {\n      debug: debug,\n      encoding: charset,\n      inflate: inflate,\n      limit: limit,\n      verify: verify\n    })\n  }\n}\n\n/**\n * Get the extended query parser.\n *\n * @param {object} options\n */\n\nfunction extendedparser (options) {\n  var parameterLimit = options.parameterLimit !== undefined\n    ? options.parameterLimit\n    : 1000\n  var parse = parser('qs')\n\n  if (isNaN(parameterLimit) || parameterLimit < 1) {\n    throw new TypeError('option parameterLimit must be a positive number')\n  }\n\n  if (isFinite(parameterLimit)) {\n    parameterLimit = parameterLimit | 0\n  }\n\n  return function queryparse (body) {\n    var paramCount = parameterCount(body, parameterLimit)\n\n    if (paramCount === undefined) {\n      debug('too many parameters')\n      throw createError(413, 'too many parameters', {\n        type: 'parameters.too.many'\n      })\n    }\n\n    var arrayLimit = Math.max(100, paramCount)\n\n    debug('parse extended urlencoding')\n    return parse(body, {\n      allowPrototypes: true,\n      arrayLimit: arrayLimit,\n      depth: Infinity,\n      parameterLimit: parameterLimit\n    })\n  }\n}\n\n/**\n * Get the charset of a request.\n *\n * @param {object} req\n * @api private\n */\n\nfunction getCharset (req) {\n  try {\n    return (contentType.parse(req).parameters.charset || '').toLowerCase()\n  } catch (e) {\n    return undefined\n  }\n}\n\n/**\n * Count the number of parameters, stopping once limit reached\n *\n * @param {string} body\n * @param {number} limit\n * @api private\n */\n\nfunction parameterCount (body, limit) {\n  var count = 0\n  var index = 0\n\n  while ((index = body.indexOf('&', index)) !== -1) {\n    count++\n    index++\n\n    if (count === limit) {\n      return undefined\n    }\n  }\n\n  return count\n}\n\n/**\n * Get parser for module name dynamically.\n *\n * @param {string} name\n * @return {function}\n * @api private\n */\n\nfunction parser (name) {\n  var mod = parsers[name]\n\n  if (mod !== undefined) {\n    return mod.parse\n  }\n\n  // this uses a switch for static require analysis\n  switch (name) {\n    case 'qs':\n      mod = require('qs')\n      break\n    case 'querystring':\n      mod = require('querystring')\n      break\n  }\n\n  // store to prevent invoking require()\n  parsers[name] = mod\n\n  return mod.parse\n}\n\n/**\n * Get the simple query parser.\n *\n * @param {object} options\n */\n\nfunction simpleparser (options) {\n  var parameterLimit = options.parameterLimit !== undefined\n    ? options.parameterLimit\n    : 1000\n  var parse = parser('querystring')\n\n  if (isNaN(parameterLimit) || parameterLimit < 1) {\n    throw new TypeError('option parameterLimit must be a positive number')\n  }\n\n  if (isFinite(parameterLimit)) {\n    parameterLimit = parameterLimit | 0\n  }\n\n  return function queryparse (body) {\n    var paramCount = parameterCount(body, parameterLimit)\n\n    if (paramCount === undefined) {\n      debug('too many parameters')\n      throw createError(413, 'too many parameters', {\n        type: 'parameters.too.many'\n      })\n    }\n\n    debug('parse urlencoding')\n    return parse(body, undefined, undefined, { maxKeys: parameterLimit })\n  }\n}\n\n/**\n * Get the simple type checker.\n *\n * @param {string} type\n * @return {function}\n */\n\nfunction typeChecker (type) {\n  return function checkType (req) {\n    return Boolean(typeis(req, type))\n  }\n}\n/lib/types/raw.js\u0007\\/*!\n * body-parser\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n */\n\nvar bytes = require('bytes')\nvar debug = require('debug')('body-parser:raw')\nvar read = require('../read')\nvar typeis = require('type-is')\n\n/**\n * Module exports.\n */\n\nmodule.exports = raw\n\n/**\n * Create a middleware to parse raw bodies.\n *\n * @param {object} [options]\n * @return {function}\n * @api public\n */\n\nfunction raw (options) {\n  var opts = options || {}\n\n  var inflate = opts.inflate !== false\n  var limit = typeof opts.limit !== 'number'\n    ? bytes.parse(opts.limit || '100kb')\n    : opts.limit\n  var type = opts.type || 'application/octet-stream'\n  var verify = opts.verify || false\n\n  if (verify !== false && typeof verify !== 'function') {\n    throw new TypeError('option verify must be function')\n  }\n\n  // create the appropriate type checking function\n  var shouldParse = typeof type !== 'function'\n    ? typeChecker(type)\n    : type\n\n  function parse (buf) {\n    return buf\n  }\n\n  return function rawParser (req, res, next) {\n    if (req._body) {\n      debug('body already parsed')\n      next()\n      return\n    }\n\n    req.body = req.body || {}\n\n    // skip requests without bodies\n    if (!typeis.hasBody(req)) {\n      debug('skip empty body')\n      next()\n      return\n    }\n\n    debug('content-type %j', req.headers['content-type'])\n\n    // determine if request should be parsed\n    if (!shouldParse(req)) {\n      debug('skip parsing')\n      next()\n      return\n    }\n\n    // read\n    read(req, res, next, parse, debug, {\n      encoding: null,\n      inflate: inflate,\n      limit: limit,\n      verify: verify\n    })\n  }\n}\n\n/**\n * Get the simple type checker.\n *\n * @param {string} type\n * @return {function}\n */\n\nfunction typeChecker (type) {\n  return function checkType (req) {\n    return Boolean(typeis(req, type))\n  }\n}\n/package.json\u0005{\n  \"name\": \"body-parser\",\n  \"description\": \"Node.js body parsing middleware\",\n  \"version\": \"1.20.1\",\n  \"contributors\": [\n    \"Douglas Christopher Wilson <doug@somethingdoug.com>\",\n    \"Jonathan Ong <me@jongleberry.com> (http://jongleberry.com)\"\n  ],\n  \"license\": \"MIT\",\n  \"repository\": \"expressjs/body-parser\",\n  \"dependencies\": {\n    \"bytes\": \"3.1.2\",\n    \"content-type\": \"~1.0.4\",\n    \"debug\": \"2.6.9\",\n    \"depd\": \"2.0.0\",\n    \"destroy\": \"1.2.0\",\n    \"http-errors\": \"2.0.0\",\n    \"iconv-lite\": \"0.4.24\",\n    \"on-finished\": \"2.4.1\",\n    \"qs\": \"6.11.0\",\n    \"raw-body\": \"2.5.1\",\n    \"type-is\": \"~1.6.18\",\n    \"unpipe\": \"1.0.0\"\n  },\n  \"devDependencies\": {\n    \"eslint\": \"8.24.0\",\n    \"eslint-config-standard\": \"14.1.1\",\n    \"eslint-plugin-import\": \"2.26.0\",\n    \"eslint-plugin-markdown\": \"3.0.0\",\n    \"eslint-plugin-node\": \"11.1.0\",\n    \"eslint-plugin-promise\": \"6.0.1\",\n    \"eslint-plugin-standard\": \"4.1.0\",\n    \"methods\": \"1.1.2\",\n    \"mocha\": \"10.0.0\",\n    \"nyc\": \"15.1.0\",\n    \"safe-buffer\": \"5.2.1\",\n    \"supertest\": \"6.3.0\"\n  },\n  \"files\": [\n    \"lib/\",\n    \"LICENSE\",\n    \"HISTORY.md\",\n    \"SECURITY.md\",\n    \"index.js\"\n  ],\n  \"engines\": {\n    \"node\": \">= 0.8\",\n    \"npm\": \"1.2.8000 || >= 1.4.16\"\n  },\n  \"scripts\": {\n    \"lint\": \"eslint .\",\n    \"test\": \"mocha --require test/support/env --reporter spec --check-leaks --bail test/\",\n    \"test-ci\": \"nyc --reporter=lcov --reporter=text npm test\",\n    \"test-cov\": \"nyc --reporter=html --reporter=text npm test\"\n  }\n}\n/HISTORY.md?1.20.1 / 2022-10-06\n===================\n\n  * deps: qs@6.11.0\n  * perf: remove unnecessary object clone\n\n1.20.0 / 2022-04-02\n===================\n\n  * Fix error message for json parse whitespace in `strict`\n  * Fix internal error when inflated body exceeds limit\n  * Prevent loss of async hooks context\n  * Prevent hanging when request already read\n  * deps: depd@2.0.0\n    - Replace internal `eval` usage with `Function` constructor\n    - Use instance methods on `process` to check for listeners\n  * deps: http-errors@2.0.0\n    - deps: depd@2.0.0\n    - deps: statuses@2.0.1\n  * deps: on-finished@2.4.1\n  * deps: qs@6.10.3\n  * deps: raw-body@2.5.1\n    - deps: http-errors@2.0.0\n\n1.19.2 / 2022-02-15\n===================\n\n  * deps: bytes@3.1.2\n  * deps: qs@6.9.7\n    * Fix handling of `__proto__` keys\n  * deps: raw-body@2.4.3\n    - deps: bytes@3.1.2\n\n1.19.1 / 2021-12-10\n===================\n\n  * deps: bytes@3.1.1\n  * deps: http-errors@1.8.1\n    - deps: inherits@2.0.4\n    - deps: toidentifier@1.0.1\n    - deps: setprototypeof@1.2.0\n  * deps: qs@6.9.6\n  * deps: raw-body@2.4.2\n    - deps: bytes@3.1.1\n    - deps: http-errors@1.8.1\n  * deps: safe-buffer@5.2.1\n  * deps: type-is@~1.6.18\n\n1.19.0 / 2019-04-25\n===================\n\n  * deps: bytes@3.1.0\n    - Add petabyte (`pb`) support\n  * deps: http-errors@1.7.2\n    - Set constructor name when possible\n    - deps: setprototypeof@1.1.1\n    - deps: statuses@'>= 1.5.0 < 2'\n  * deps: iconv-lite@0.4.24\n    - Added encoding MIK\n  * deps: qs@6.7.0\n    - Fix parsing array brackets after index\n  * deps: raw-body@2.4.0\n    - deps: bytes@3.1.0\n    - deps: http-errors@1.7.2\n    - deps: iconv-lite@0.4.24\n  * deps: type-is@~1.6.17\n    - deps: mime-types@~2.1.24\n    - perf: prevent internal `throw` on invalid type\n\n1.18.3 / 2018-05-14\n===================\n\n  * Fix stack trace for strict json parse error\n  * deps: depd@~1.1.2\n    - perf: remove argument reassignment\n  * deps: http-errors@~1.6.3\n    - deps: depd@~1.1.2\n    - deps: setprototypeof@1.1.0\n    - deps: statuses@'>= 1.3.1 < 2'\n  * deps: iconv-lite@0.4.23\n    - Fix loading encoding with year appended\n    - Fix deprecation warnings on Node.js 10+\n  * deps: qs@6.5.2\n  * deps: raw-body@2.3.3\n    - deps: http-errors@1.6.3\n    - deps: iconv-lite@0.4.23\n  * deps: type-is@~1.6.16\n    - deps: mime-types@~2.1.18\n\n1.18.2 / 2017-09-22\n===================\n\n  * deps: debug@2.6.9\n  * perf: remove argument reassignment\n\n1.18.1 / 2017-09-12\n===================\n\n  * deps: content-type@~1.0.4\n    - perf: remove argument reassignment\n    - perf: skip parameter parsing when no parameters\n  * deps: iconv-lite@0.4.19\n    - Fix ISO-8859-1 regression\n    - Update Windows-1255\n  * deps: qs@6.5.1\n    - Fix parsing & compacting very deep objects\n  * deps: raw-body@2.3.2\n    - deps: iconv-lite@0.4.19\n\n1.18.0 / 2017-09-08\n===================\n\n  * Fix JSON strict violation error to match native parse error\n  * Include the `body` property on verify errors\n  * Include the `type` property on all generated errors\n  * Use `http-errors` to set status code on errors\n  * deps: bytes@3.0.0\n  * deps: debug@2.6.8\n  * deps: depd@~1.1.1\n    - Remove unnecessary `Buffer` loading\n  * deps: http-errors@~1.6.2\n    - deps: depd@1.1.1\n  * deps: iconv-lite@0.4.18\n    - Add support for React Native\n    - Add a warning if not loaded as utf-8\n    - Fix CESU-8 decoding in Node.js 8\n    - Improve speed of ISO-8859-1 encoding\n  * deps: qs@6.5.0\n  * deps: raw-body@2.3.1\n    - Use `http-errors` for standard emitted errors\n    - deps: bytes@3.0.0\n    - deps: iconv-lite@0.4.18\n    - perf: skip buffer decoding on overage chunk\n  * perf: prevent internal `throw` when missing charset\n\n1.17.2 / 2017-05-17\n===================\n\n  * deps: debug@2.6.7\n    - Fix `DEBUG_MAX_ARRAY_LENGTH`\n    - deps: ms@2.0.0\n  * deps: type-is@~1.6.15\n    - deps: mime-types@~2.1.15\n\n1.17.1 / 2017-03-06\n===================\n\n  * deps: qs@6.4.0\n    - Fix regression parsing keys starting with `[`\n\n1.17.0 / 2017-03-01\n===================\n\n  * deps: http-errors@~1.6.1\n    - Make `message` property enumerable for `HttpError`s\n    - deps: setprototypeof@1.0.3\n  * deps: qs@6.3.1\n    - Fix compacting nested arrays\n\n1.16.1 / 2017-02-10\n===================\n\n  * deps: debug@2.6.1\n    - Fix deprecation messages in WebStorm and other editors\n    - Undeprecate `DEBUG_FD` set to `1` or `2`\n\n1.16.0 / 2017-01-17\n===================\n\n  * deps: debug@2.6.0\n    - Allow colors in workers\n    - Deprecated `DEBUG_FD` environment variable\n    - Fix error when running under React Native\n    - Use same color for same namespace\n    - deps: ms@0.7.2\n  * deps: http-errors@~1.5.1\n    - deps: inherits@2.0.3\n    - deps: setprototypeof@1.0.2\n    - deps: statuses@'>= 1.3.1 < 2'\n  * deps: iconv-lite@0.4.15\n    - Added encoding MS-31J\n    - Added encoding MS-932\n    - Added encoding MS-936\n    - Added encoding MS-949\n    - Added encoding MS-950\n    - Fix GBK/GB18030 handling of Euro character\n  * deps: qs@6.2.1\n    - Fix array parsing from skipping empty values\n  * deps: raw-body@~2.2.0\n    - deps: iconv-lite@0.4.15\n  * deps: type-is@~1.6.14\n    - deps: mime-types@~2.1.13\n\n1.15.2 / 2016-06-19\n===================\n\n  * deps: bytes@2.4.0\n  * deps: content-type@~1.0.2\n    - perf: enable strict mode\n  * deps: http-errors@~1.5.0\n    - Use `setprototypeof` module to replace `__proto__` setting\n    - deps: statuses@'>= 1.3.0 < 2'\n    - perf: enable strict mode\n  * deps: qs@6.2.0\n  * deps: raw-body@~2.1.7\n    - deps: bytes@2.4.0\n    - perf: remove double-cleanup on happy path\n  * deps: type-is@~1.6.13\n    - deps: mime-types@~2.1.11\n\n1.15.1 / 2016-05-05\n===================\n\n  * deps: bytes@2.3.0\n    - Drop partial bytes on all parsed units\n    - Fix parsing byte string that looks like hex\n  * deps: raw-body@~2.1.6\n    - deps: bytes@2.3.0\n  * deps: type-is@~1.6.12\n    - deps: mime-types@~2.1.10\n\n1.15.0 / 2016-02-10\n===================\n\n  * deps: http-errors@~1.4.0\n    - Add `HttpError` export, for `err instanceof createError.HttpError`\n    - deps: inherits@2.0.1\n    - deps: statuses@'>= 1.2.1 < 2'\n  * deps: qs@6.1.0\n  * deps: type-is@~1.6.11\n    - deps: mime-types@~2.1.9\n\n1.14.2 / 2015-12-16\n===================\n\n  * deps: bytes@2.2.0\n  * deps: iconv-lite@0.4.13\n  * deps: qs@5.2.0\n  * deps: raw-body@~2.1.5\n    - deps: bytes@2.2.0\n    - deps: iconv-lite@0.4.13\n  * deps: type-is@~1.6.10\n    - deps: mime-types@~2.1.8\n\n1.14.1 / 2015-09-27\n===================\n\n  * Fix issue where invalid charset results in 400 when `verify` used\n  * deps: iconv-lite@0.4.12\n    - Fix CESU-8 decoding in Node.js 4.x\n  * deps: raw-body@~2.1.4\n    - Fix masking critical errors from `iconv-lite`\n    - deps: iconv-lite@0.4.12\n  * deps: type-is@~1.6.9\n    - deps: mime-types@~2.1.7\n\n1.14.0 / 2015-09-16\n===================\n\n  * Fix JSON strict parse error to match syntax errors\n  * Provide static `require` analysis in `urlencoded` parser\n  * deps: depd@~1.1.0\n    - Support web browser loading\n  * deps: qs@5.1.0\n  * deps: raw-body@~2.1.3\n    - Fix sync callback when attaching data listener causes sync read\n  * deps: type-is@~1.6.8\n    - Fix type error when given invalid type to match against\n    - deps: mime-types@~2.1.6\n\n1.13.3 / 2015-07-31\n===================\n\n  * deps: type-is@~1.6.6\n    - deps: mime-types@~2.1.4\n\n1.13.2 / 2015-07-05\n===================\n\n  * deps: iconv-lite@0.4.11\n  * deps: qs@4.0.0\n    - Fix dropping parameters like `hasOwnProperty`\n    - Fix user-visible incompatibilities from 3.1.0\n    - Fix various parsing edge cases\n  * deps: raw-body@~2.1.2\n    - Fix error stack traces to skip `makeError`\n    - deps: iconv-lite@0.4.11\n  * deps: type-is@~1.6.4\n    - deps: mime-types@~2.1.2\n    - perf: enable strict mode\n    - perf: remove argument reassignment\n\n1.13.1 / 2015-06-16\n===================\n\n  * deps: qs@2.4.2\n    - Downgraded from 3.1.0 because of user-visible incompatibilities\n\n1.13.0 / 2015-06-14\n===================\n\n  * Add `statusCode` property on `Error`s, in addition to `status`\n  * Change `type` default to `application/json` for JSON parser\n  * Change `type` default to `application/x-www-form-urlencoded` for urlencoded parser\n  * Provide static `require` analysis\n  * Use the `http-errors` module to generate errors\n  * deps: bytes@2.1.0\n    - Slight optimizations\n  * deps: iconv-lite@0.4.10\n    - The encoding UTF-16 without BOM now defaults to UTF-16LE when detection fails\n    - Leading BOM is now removed when decoding\n  * deps: on-finished@~2.3.0\n    - Add defined behavior for HTTP `CONNECT` requests\n    - Add defined behavior for HTTP `Upgrade` requests\n    - deps: ee-first@1.1.1\n  * deps: qs@3.1.0\n    - Fix dropping parameters like `hasOwnProperty`\n    - Fix various parsing edge cases\n    - Parsed object now has `null` prototype\n  * deps: raw-body@~2.1.1\n    - Use `unpipe` module for unpiping requests\n    - deps: iconv-lite@0.4.10\n  * deps: type-is@~1.6.3\n    - deps: mime-types@~2.1.1\n    - perf: reduce try block size\n    - perf: remove bitwise operations\n  * perf: enable strict mode\n  * perf: remove argument reassignment\n  * perf: remove delete call\n\n1.12.4 / 2015-05-10\n===================\n\n  * deps: debug@~2.2.0\n  * deps: qs@2.4.2\n    - Fix allowing parameters like `constructor`\n  * deps: on-finished@~2.2.1\n  * deps: raw-body@~2.0.1\n    - Fix a false-positive when unpiping in Node.js 0.8\n    - deps: bytes@2.0.1\n  * deps: type-is@~1.6.2\n    - deps: mime-types@~2.0.11\n\n1.12.3 / 2015-04-15\n===================\n\n  * Slight efficiency improvement when not debugging\n  * deps: depd@~1.0.1\n  * deps: iconv-lite@0.4.8\n    - Add encoding alias UNICODE-1-1-UTF-7\n  * deps: raw-body@1.3.4\n    - Fix hanging callback if request aborts during read\n    - deps: iconv-lite@0.4.8\n\n1.12.2 / 2015-03-16\n===================\n\n  * deps: qs@2.4.1\n    - Fix error when parameter `hasOwnProperty` is present\n\n1.12.1 / 2015-03-15\n===================\n\n  * deps: debug@~2.1.3\n    - Fix high intensity foreground color for bold\n    - deps: ms@0.7.0\n  * deps: type-is@~1.6.1\n    - deps: mime-types@~2.0.10\n\n1.12.0 / 2015-02-13\n===================\n\n  * add `debug` messages\n  * accept a function for the `type` option\n  * use `content-type` to parse `Content-Type` headers\n  * deps: iconv-lite@0.4.7\n    - Gracefully support enumerables on `Object.prototype`\n  * deps: raw-body@1.3.3\n    - deps: iconv-lite@0.4.7\n  * deps: type-is@~1.6.0\n    - fix argument reassignment\n    - fix false-positives in `hasBody` `Transfer-Encoding` check\n    - support wildcard for both type and subtype (`*/*`)\n    - deps: mime-types@~2.0.9\n\n1.11.0 / 2015-01-30\n===================\n\n  * make internal `extended: true` depth limit infinity\n  * deps: type-is@~1.5.6\n    - deps: mime-types@~2.0.8\n\n1.10.2 / 2015-01-20\n===================\n\n  * deps: iconv-lite@0.4.6\n    - Fix rare aliases of single-byte encodings\n  * deps: raw-body@1.3.2\n    - deps: iconv-lite@0.4.6\n\n1.10.1 / 2015-01-01\n===================\n\n  * deps: on-finished@~2.2.0\n  * deps: type-is@~1.5.5\n    - deps: mime-types@~2.0.7\n\n1.10.0 / 2014-12-02\n===================\n\n  * make internal `extended: true` array limit dynamic\n\n1.9.3 / 2014-11-21\n==================\n\n  * deps: iconv-lite@0.4.5\n    - Fix Windows-31J and X-SJIS encoding support\n  * deps: qs@2.3.3\n    - Fix `arrayLimit` behavior\n  * deps: raw-body@1.3.1\n    - deps: iconv-lite@0.4.5\n  * deps: type-is@~1.5.3\n    - deps: mime-types@~2.0.3\n\n1.9.2 / 2014-10-27\n==================\n\n  * deps: qs@2.3.2\n    - Fix parsing of mixed objects and values\n\n1.9.1 / 2014-10-22\n==================\n\n  * deps: on-finished@~2.1.1\n    - Fix handling of pipelined requests\n  * deps: qs@2.3.0\n    - Fix parsing of mixed implicit and explicit arrays\n  * deps: type-is@~1.5.2\n    - deps: mime-types@~2.0.2\n\n1.9.0 / 2014-09-24\n==================\n\n  * include the charset in \"unsupported charset\" error message\n  * include the encoding in \"unsupported content encoding\" error message\n  * deps: depd@~1.0.0\n\n1.8.4 / 2014-09-23\n==================\n\n  * fix content encoding to be case-insensitive\n\n1.8.3 / 2014-09-19\n==================\n\n  * deps: qs@2.2.4\n    - Fix issue with object keys starting with numbers truncated\n\n1.8.2 / 2014-09-15\n==================\n\n  * deps: depd@0.4.5\n\n1.8.1 / 2014-09-07\n==================\n\n  * deps: media-typer@0.3.0\n  * deps: type-is@~1.5.1\n\n1.8.0 / 2014-09-05\n==================\n\n  * make empty-body-handling consistent between chunked requests\n    - empty `json` produces `{}`\n    - empty `raw` produces `new Buffer(0)`\n    - empty `text` produces `''`\n    - empty `urlencoded` produces `{}`\n  * deps: qs@2.2.3\n    - Fix issue where first empty value in array is discarded\n  * deps: type-is@~1.5.0\n    - fix `hasbody` to be true for `content-length: 0`\n\n1.7.0 / 2014-09-01\n==================\n\n  * add `parameterLimit` option to `urlencoded` parser\n  * change `urlencoded` extended array limit to 100\n  * respond with 413 when over `parameterLimit` in `urlencoded`\n\n1.6.7 / 2014-08-29\n==================\n\n  * deps: qs@2.2.2\n    - Remove unnecessary cloning\n\n1.6.6 / 2014-08-27\n==================\n\n  * deps: qs@2.2.0\n    - Array parsing fix\n    - Performance improvements\n\n1.6.5 / 2014-08-16\n==================\n\n  * deps: on-finished@2.1.0\n\n1.6.4 / 2014-08-14\n==================\n\n  * deps: qs@1.2.2\n\n1.6.3 / 2014-08-10\n==================\n\n  * deps: qs@1.2.1\n\n1.6.2 / 2014-08-07\n==================\n\n  * deps: qs@1.2.0\n    - Fix parsing array of objects\n\n1.6.1 / 2014-08-06\n==================\n\n  * deps: qs@1.1.0\n    - Accept urlencoded square brackets\n    - Accept empty values in implicit array notation\n\n1.6.0 / 2014-08-05\n==================\n\n  * deps: qs@1.0.2\n    - Complete rewrite\n    - Limits array length to 20\n    - Limits object depth to 5\n    - Limits parameters to 1,000\n\n1.5.2 / 2014-07-27\n==================\n\n  * deps: depd@0.4.4\n    - Work-around v8 generating empty stack traces\n\n1.5.1 / 2014-07-26\n==================\n\n  * deps: depd@0.4.3\n    - Fix exception when global `Error.stackTraceLimit` is too low\n\n1.5.0 / 2014-07-20\n==================\n\n  * deps: depd@0.4.2\n    - Add `TRACE_DEPRECATION` environment variable\n    - Remove non-standard grey color from color output\n    - Support `--no-deprecation` argument\n    - Support `--trace-deprecation` argument\n  * deps: iconv-lite@0.4.4\n    - Added encoding UTF-7\n  * deps: raw-body@1.3.0\n    - deps: iconv-lite@0.4.4\n    - Added encoding UTF-7\n    - Fix `Cannot switch to old mode now` error on Node.js 0.10+\n  * deps: type-is@~1.3.2\n\n1.4.3 / 2014-06-19\n==================\n\n  * deps: type-is@1.3.1\n    - fix global variable leak\n\n1.4.2 / 2014-06-19\n==================\n\n  * deps: type-is@1.3.0\n    - improve type parsing\n\n1.4.1 / 2014-06-19\n==================\n\n  * fix urlencoded extended deprecation message\n\n1.4.0 / 2014-06-19\n==================\n\n  * add `text` parser\n  * add `raw` parser\n  * check accepted charset in content-type (accepts utf-8)\n  * check accepted encoding in content-encoding (accepts identity)\n  * deprecate `bodyParser()` middleware; use `.json()` and `.urlencoded()` as needed\n  * deprecate `urlencoded()` without provided `extended` option\n  * lazy-load urlencoded parsers\n  * parsers split into files for reduced mem usage\n  * support gzip and deflate bodies\n    - set `inflate: false` to turn off\n  * deps: raw-body@1.2.2\n    - Support all encodings from `iconv-lite`\n\n1.3.1 / 2014-06-11\n==================\n\n  * deps: type-is@1.2.1\n    - Switch dependency from mime to mime-types@1.0.0\n\n1.3.0 / 2014-05-31\n==================\n\n  * add `extended` option to urlencoded parser\n\n1.2.2 / 2014-05-27\n==================\n\n  * deps: raw-body@1.1.6\n    - assert stream encoding on node.js 0.8\n    - assert stream encoding on node.js < 0.10.6\n    - deps: bytes@1\n\n1.2.1 / 2014-05-26\n==================\n\n  * invoke `next(err)` after request fully read\n    - prevents hung responses and socket hang ups\n\n1.2.0 / 2014-05-11\n==================\n\n  * add `verify` option\n  * deps: type-is@1.2.0\n    - support suffix matching\n\n1.1.2 / 2014-05-11\n==================\n\n  * improve json parser speed\n\n1.1.1 / 2014-05-11\n==================\n\n  * fix repeated limit parsing with every request\n\n1.1.0 / 2014-05-10\n==================\n\n  * add `type` option\n  * deps: pin for safety and consistency\n\n1.0.2 / 2014-04-14\n==================\n\n  * use `type-is` module\n\n1.0.1 / 2014-03-20\n==================\n\n  * lower default limits to 100kb\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/Ym9keS1wYXJzZXJAMS4yMC4y",
    "content": "/lib/types/raw.js\u0007\\/*!\n * body-parser\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n */\n\nvar bytes = require('bytes')\nvar debug = require('debug')('body-parser:raw')\nvar read = require('../read')\nvar typeis = require('type-is')\n\n/**\n * Module exports.\n */\n\nmodule.exports = raw\n\n/**\n * Create a middleware to parse raw bodies.\n *\n * @param {object} [options]\n * @return {function}\n * @api public\n */\n\nfunction raw (options) {\n  var opts = options || {}\n\n  var inflate = opts.inflate !== false\n  var limit = typeof opts.limit !== 'number'\n    ? bytes.parse(opts.limit || '100kb')\n    : opts.limit\n  var type = opts.type || 'application/octet-stream'\n  var verify = opts.verify || false\n\n  if (verify !== false && typeof verify !== 'function') {\n    throw new TypeError('option verify must be function')\n  }\n\n  // create the appropriate type checking function\n  var shouldParse = typeof type !== 'function'\n    ? typeChecker(type)\n    : type\n\n  function parse (buf) {\n    return buf\n  }\n\n  return function rawParser (req, res, next) {\n    if (req._body) {\n      debug('body already parsed')\n      next()\n      return\n    }\n\n    req.body = req.body || {}\n\n    // skip requests without bodies\n    if (!typeis.hasBody(req)) {\n      debug('skip empty body')\n      next()\n      return\n    }\n\n    debug('content-type %j', req.headers['content-type'])\n\n    // determine if request should be parsed\n    if (!shouldParse(req)) {\n      debug('skip parsing')\n      next()\n      return\n    }\n\n    // read\n    read(req, res, next, parse, debug, {\n      encoding: null,\n      inflate: inflate,\n      limit: limit,\n      verify: verify\n    })\n  }\n}\n\n/**\n * Get the simple type checker.\n *\n * @param {string} type\n * @return {function}\n */\n\nfunction typeChecker (type) {\n  return function checkType (req) {\n    return Boolean(typeis(req, type))\n  }\n}\n/lib/types/json.js\u0014/*!\n * body-parser\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar bytes = require('bytes')\nvar contentType = require('content-type')\nvar createError = require('http-errors')\nvar debug = require('debug')('body-parser:json')\nvar read = require('../read')\nvar typeis = require('type-is')\n\n/**\n * Module exports.\n */\n\nmodule.exports = json\n\n/**\n * RegExp to match the first non-space in a string.\n *\n * Allowed whitespace is defined in RFC 7159:\n *\n *    ws = *(\n *            %x20 /              ; Space\n *            %x09 /              ; Horizontal tab\n *            %x0A /              ; Line feed or New line\n *            %x0D )              ; Carriage return\n */\n\nvar FIRST_CHAR_REGEXP = /^[\\x20\\x09\\x0a\\x0d]*([^\\x20\\x09\\x0a\\x0d])/ // eslint-disable-line no-control-regex\n\nvar JSON_SYNTAX_CHAR = '#'\nvar JSON_SYNTAX_REGEXP = /#+/g\n\n/**\n * Create a middleware to parse JSON bodies.\n *\n * @param {object} [options]\n * @return {function}\n * @public\n */\n\nfunction json (options) {\n  var opts = options || {}\n\n  var limit = typeof opts.limit !== 'number'\n    ? bytes.parse(opts.limit || '100kb')\n    : opts.limit\n  var inflate = opts.inflate !== false\n  var reviver = opts.reviver\n  var strict = opts.strict !== false\n  var type = opts.type || 'application/json'\n  var verify = opts.verify || false\n\n  if (verify !== false && typeof verify !== 'function') {\n    throw new TypeError('option verify must be function')\n  }\n\n  // create the appropriate type checking function\n  var shouldParse = typeof type !== 'function'\n    ? typeChecker(type)\n    : type\n\n  function parse (body) {\n    if (body.length === 0) {\n      // special-case empty json body, as it's a common client-side mistake\n      // TODO: maybe make this configurable or part of \"strict\" option\n      return {}\n    }\n\n    if (strict) {\n      var first = firstchar(body)\n\n      if (first !== '{' && first !== '[') {\n        debug('strict violation')\n        throw createStrictSyntaxError(body, first)\n      }\n    }\n\n    try {\n      debug('parse json')\n      return JSON.parse(body, reviver)\n    } catch (e) {\n      throw normalizeJsonSyntaxError(e, {\n        message: e.message,\n        stack: e.stack\n      })\n    }\n  }\n\n  return function jsonParser (req, res, next) {\n    if (req._body) {\n      debug('body already parsed')\n      next()\n      return\n    }\n\n    req.body = req.body || {}\n\n    // skip requests without bodies\n    if (!typeis.hasBody(req)) {\n      debug('skip empty body')\n      next()\n      return\n    }\n\n    debug('content-type %j', req.headers['content-type'])\n\n    // determine if request should be parsed\n    if (!shouldParse(req)) {\n      debug('skip parsing')\n      next()\n      return\n    }\n\n    // assert charset per RFC 7159 sec 8.1\n    var charset = getCharset(req) || 'utf-8'\n    if (charset.slice(0, 4) !== 'utf-') {\n      debug('invalid charset')\n      next(createError(415, 'unsupported charset \"' + charset.toUpperCase() + '\"', {\n        charset: charset,\n        type: 'charset.unsupported'\n      }))\n      return\n    }\n\n    // read\n    read(req, res, next, parse, debug, {\n      encoding: charset,\n      inflate: inflate,\n      limit: limit,\n      verify: verify\n    })\n  }\n}\n\n/**\n * Create strict violation syntax error matching native error.\n *\n * @param {string} str\n * @param {string} char\n * @return {Error}\n * @private\n */\n\nfunction createStrictSyntaxError (str, char) {\n  var index = str.indexOf(char)\n  var partial = ''\n\n  if (index !== -1) {\n    partial = str.substring(0, index) + JSON_SYNTAX_CHAR\n\n    for (var i = index + 1; i < str.length; i++) {\n      partial += JSON_SYNTAX_CHAR\n    }\n  }\n\n  try {\n    JSON.parse(partial); /* istanbul ignore next */ throw new SyntaxError('strict violation')\n  } catch (e) {\n    return normalizeJsonSyntaxError(e, {\n      message: e.message.replace(JSON_SYNTAX_REGEXP, function (placeholder) {\n        return str.substring(index, index + placeholder.length)\n      }),\n      stack: e.stack\n    })\n  }\n}\n\n/**\n * Get the first non-whitespace character in a string.\n *\n * @param {string} str\n * @return {function}\n * @private\n */\n\nfunction firstchar (str) {\n  var match = FIRST_CHAR_REGEXP.exec(str)\n\n  return match\n    ? match[1]\n    : undefined\n}\n\n/**\n * Get the charset of a request.\n *\n * @param {object} req\n * @api private\n */\n\nfunction getCharset (req) {\n  try {\n    return (contentType.parse(req).parameters.charset || '').toLowerCase()\n  } catch (e) {\n    return undefined\n  }\n}\n\n/**\n * Normalize a SyntaxError for JSON.parse.\n *\n * @param {SyntaxError} error\n * @param {object} obj\n * @return {SyntaxError}\n */\n\nfunction normalizeJsonSyntaxError (error, obj) {\n  var keys = Object.getOwnPropertyNames(error)\n\n  for (var i = 0; i < keys.length; i++) {\n    var key = keys[i]\n    if (key !== 'stack' && key !== 'message') {\n      delete error[key]\n    }\n  }\n\n  // replace stack before message for Node.js 0.10 and below\n  error.stack = obj.stack.replace(error.message, obj.message)\n  error.message = obj.message\n\n  return error\n}\n\n/**\n * Get the simple type checker.\n *\n * @param {string} type\n * @return {function}\n */\n\nfunction typeChecker (type) {\n  return function checkType (req) {\n    return Boolean(typeis(req, type))\n  }\n}\n/HISTORY.md@k1.20.2 / 2023-02-21\n===================\n\n  * Fix strict json error message on Node.js 19+\n  * deps: content-type@~1.0.5\n    - perf: skip value escaping when unnecessary\n  * deps: raw-body@2.5.2\n\n1.20.1 / 2022-10-06\n===================\n\n  * deps: qs@6.11.0\n  * perf: remove unnecessary object clone\n\n1.20.0 / 2022-04-02\n===================\n\n  * Fix error message for json parse whitespace in `strict`\n  * Fix internal error when inflated body exceeds limit\n  * Prevent loss of async hooks context\n  * Prevent hanging when request already read\n  * deps: depd@2.0.0\n    - Replace internal `eval` usage with `Function` constructor\n    - Use instance methods on `process` to check for listeners\n  * deps: http-errors@2.0.0\n    - deps: depd@2.0.0\n    - deps: statuses@2.0.1\n  * deps: on-finished@2.4.1\n  * deps: qs@6.10.3\n  * deps: raw-body@2.5.1\n    - deps: http-errors@2.0.0\n\n1.19.2 / 2022-02-15\n===================\n\n  * deps: bytes@3.1.2\n  * deps: qs@6.9.7\n    * Fix handling of `__proto__` keys\n  * deps: raw-body@2.4.3\n    - deps: bytes@3.1.2\n\n1.19.1 / 2021-12-10\n===================\n\n  * deps: bytes@3.1.1\n  * deps: http-errors@1.8.1\n    - deps: inherits@2.0.4\n    - deps: toidentifier@1.0.1\n    - deps: setprototypeof@1.2.0\n  * deps: qs@6.9.6\n  * deps: raw-body@2.4.2\n    - deps: bytes@3.1.1\n    - deps: http-errors@1.8.1\n  * deps: safe-buffer@5.2.1\n  * deps: type-is@~1.6.18\n\n1.19.0 / 2019-04-25\n===================\n\n  * deps: bytes@3.1.0\n    - Add petabyte (`pb`) support\n  * deps: http-errors@1.7.2\n    - Set constructor name when possible\n    - deps: setprototypeof@1.1.1\n    - deps: statuses@'>= 1.5.0 < 2'\n  * deps: iconv-lite@0.4.24\n    - Added encoding MIK\n  * deps: qs@6.7.0\n    - Fix parsing array brackets after index\n  * deps: raw-body@2.4.0\n    - deps: bytes@3.1.0\n    - deps: http-errors@1.7.2\n    - deps: iconv-lite@0.4.24\n  * deps: type-is@~1.6.17\n    - deps: mime-types@~2.1.24\n    - perf: prevent internal `throw` on invalid type\n\n1.18.3 / 2018-05-14\n===================\n\n  * Fix stack trace for strict json parse error\n  * deps: depd@~1.1.2\n    - perf: remove argument reassignment\n  * deps: http-errors@~1.6.3\n    - deps: depd@~1.1.2\n    - deps: setprototypeof@1.1.0\n    - deps: statuses@'>= 1.3.1 < 2'\n  * deps: iconv-lite@0.4.23\n    - Fix loading encoding with year appended\n    - Fix deprecation warnings on Node.js 10+\n  * deps: qs@6.5.2\n  * deps: raw-body@2.3.3\n    - deps: http-errors@1.6.3\n    - deps: iconv-lite@0.4.23\n  * deps: type-is@~1.6.16\n    - deps: mime-types@~2.1.18\n\n1.18.2 / 2017-09-22\n===================\n\n  * deps: debug@2.6.9\n  * perf: remove argument reassignment\n\n1.18.1 / 2017-09-12\n===================\n\n  * deps: content-type@~1.0.4\n    - perf: remove argument reassignment\n    - perf: skip parameter parsing when no parameters\n  * deps: iconv-lite@0.4.19\n    - Fix ISO-8859-1 regression\n    - Update Windows-1255\n  * deps: qs@6.5.1\n    - Fix parsing & compacting very deep objects\n  * deps: raw-body@2.3.2\n    - deps: iconv-lite@0.4.19\n\n1.18.0 / 2017-09-08\n===================\n\n  * Fix JSON strict violation error to match native parse error\n  * Include the `body` property on verify errors\n  * Include the `type` property on all generated errors\n  * Use `http-errors` to set status code on errors\n  * deps: bytes@3.0.0\n  * deps: debug@2.6.8\n  * deps: depd@~1.1.1\n    - Remove unnecessary `Buffer` loading\n  * deps: http-errors@~1.6.2\n    - deps: depd@1.1.1\n  * deps: iconv-lite@0.4.18\n    - Add support for React Native\n    - Add a warning if not loaded as utf-8\n    - Fix CESU-8 decoding in Node.js 8\n    - Improve speed of ISO-8859-1 encoding\n  * deps: qs@6.5.0\n  * deps: raw-body@2.3.1\n    - Use `http-errors` for standard emitted errors\n    - deps: bytes@3.0.0\n    - deps: iconv-lite@0.4.18\n    - perf: skip buffer decoding on overage chunk\n  * perf: prevent internal `throw` when missing charset\n\n1.17.2 / 2017-05-17\n===================\n\n  * deps: debug@2.6.7\n    - Fix `DEBUG_MAX_ARRAY_LENGTH`\n    - deps: ms@2.0.0\n  * deps: type-is@~1.6.15\n    - deps: mime-types@~2.1.15\n\n1.17.1 / 2017-03-06\n===================\n\n  * deps: qs@6.4.0\n    - Fix regression parsing keys starting with `[`\n\n1.17.0 / 2017-03-01\n===================\n\n  * deps: http-errors@~1.6.1\n    - Make `message` property enumerable for `HttpError`s\n    - deps: setprototypeof@1.0.3\n  * deps: qs@6.3.1\n    - Fix compacting nested arrays\n\n1.16.1 / 2017-02-10\n===================\n\n  * deps: debug@2.6.1\n    - Fix deprecation messages in WebStorm and other editors\n    - Undeprecate `DEBUG_FD` set to `1` or `2`\n\n1.16.0 / 2017-01-17\n===================\n\n  * deps: debug@2.6.0\n    - Allow colors in workers\n    - Deprecated `DEBUG_FD` environment variable\n    - Fix error when running under React Native\n    - Use same color for same namespace\n    - deps: ms@0.7.2\n  * deps: http-errors@~1.5.1\n    - deps: inherits@2.0.3\n    - deps: setprototypeof@1.0.2\n    - deps: statuses@'>= 1.3.1 < 2'\n  * deps: iconv-lite@0.4.15\n    - Added encoding MS-31J\n    - Added encoding MS-932\n    - Added encoding MS-936\n    - Added encoding MS-949\n    - Added encoding MS-950\n    - Fix GBK/GB18030 handling of Euro character\n  * deps: qs@6.2.1\n    - Fix array parsing from skipping empty values\n  * deps: raw-body@~2.2.0\n    - deps: iconv-lite@0.4.15\n  * deps: type-is@~1.6.14\n    - deps: mime-types@~2.1.13\n\n1.15.2 / 2016-06-19\n===================\n\n  * deps: bytes@2.4.0\n  * deps: content-type@~1.0.2\n    - perf: enable strict mode\n  * deps: http-errors@~1.5.0\n    - Use `setprototypeof` module to replace `__proto__` setting\n    - deps: statuses@'>= 1.3.0 < 2'\n    - perf: enable strict mode\n  * deps: qs@6.2.0\n  * deps: raw-body@~2.1.7\n    - deps: bytes@2.4.0\n    - perf: remove double-cleanup on happy path\n  * deps: type-is@~1.6.13\n    - deps: mime-types@~2.1.11\n\n1.15.1 / 2016-05-05\n===================\n\n  * deps: bytes@2.3.0\n    - Drop partial bytes on all parsed units\n    - Fix parsing byte string that looks like hex\n  * deps: raw-body@~2.1.6\n    - deps: bytes@2.3.0\n  * deps: type-is@~1.6.12\n    - deps: mime-types@~2.1.10\n\n1.15.0 / 2016-02-10\n===================\n\n  * deps: http-errors@~1.4.0\n    - Add `HttpError` export, for `err instanceof createError.HttpError`\n    - deps: inherits@2.0.1\n    - deps: statuses@'>= 1.2.1 < 2'\n  * deps: qs@6.1.0\n  * deps: type-is@~1.6.11\n    - deps: mime-types@~2.1.9\n\n1.14.2 / 2015-12-16\n===================\n\n  * deps: bytes@2.2.0\n  * deps: iconv-lite@0.4.13\n  * deps: qs@5.2.0\n  * deps: raw-body@~2.1.5\n    - deps: bytes@2.2.0\n    - deps: iconv-lite@0.4.13\n  * deps: type-is@~1.6.10\n    - deps: mime-types@~2.1.8\n\n1.14.1 / 2015-09-27\n===================\n\n  * Fix issue where invalid charset results in 400 when `verify` used\n  * deps: iconv-lite@0.4.12\n    - Fix CESU-8 decoding in Node.js 4.x\n  * deps: raw-body@~2.1.4\n    - Fix masking critical errors from `iconv-lite`\n    - deps: iconv-lite@0.4.12\n  * deps: type-is@~1.6.9\n    - deps: mime-types@~2.1.7\n\n1.14.0 / 2015-09-16\n===================\n\n  * Fix JSON strict parse error to match syntax errors\n  * Provide static `require` analysis in `urlencoded` parser\n  * deps: depd@~1.1.0\n    - Support web browser loading\n  * deps: qs@5.1.0\n  * deps: raw-body@~2.1.3\n    - Fix sync callback when attaching data listener causes sync read\n  * deps: type-is@~1.6.8\n    - Fix type error when given invalid type to match against\n    - deps: mime-types@~2.1.6\n\n1.13.3 / 2015-07-31\n===================\n\n  * deps: type-is@~1.6.6\n    - deps: mime-types@~2.1.4\n\n1.13.2 / 2015-07-05\n===================\n\n  * deps: iconv-lite@0.4.11\n  * deps: qs@4.0.0\n    - Fix dropping parameters like `hasOwnProperty`\n    - Fix user-visible incompatibilities from 3.1.0\n    - Fix various parsing edge cases\n  * deps: raw-body@~2.1.2\n    - Fix error stack traces to skip `makeError`\n    - deps: iconv-lite@0.4.11\n  * deps: type-is@~1.6.4\n    - deps: mime-types@~2.1.2\n    - perf: enable strict mode\n    - perf: remove argument reassignment\n\n1.13.1 / 2015-06-16\n===================\n\n  * deps: qs@2.4.2\n    - Downgraded from 3.1.0 because of user-visible incompatibilities\n\n1.13.0 / 2015-06-14\n===================\n\n  * Add `statusCode` property on `Error`s, in addition to `status`\n  * Change `type` default to `application/json` for JSON parser\n  * Change `type` default to `application/x-www-form-urlencoded` for urlencoded parser\n  * Provide static `require` analysis\n  * Use the `http-errors` module to generate errors\n  * deps: bytes@2.1.0\n    - Slight optimizations\n  * deps: iconv-lite@0.4.10\n    - The encoding UTF-16 without BOM now defaults to UTF-16LE when detection fails\n    - Leading BOM is now removed when decoding\n  * deps: on-finished@~2.3.0\n    - Add defined behavior for HTTP `CONNECT` requests\n    - Add defined behavior for HTTP `Upgrade` requests\n    - deps: ee-first@1.1.1\n  * deps: qs@3.1.0\n    - Fix dropping parameters like `hasOwnProperty`\n    - Fix various parsing edge cases\n    - Parsed object now has `null` prototype\n  * deps: raw-body@~2.1.1\n    - Use `unpipe` module for unpiping requests\n    - deps: iconv-lite@0.4.10\n  * deps: type-is@~1.6.3\n    - deps: mime-types@~2.1.1\n    - perf: reduce try block size\n    - perf: remove bitwise operations\n  * perf: enable strict mode\n  * perf: remove argument reassignment\n  * perf: remove delete call\n\n1.12.4 / 2015-05-10\n===================\n\n  * deps: debug@~2.2.0\n  * deps: qs@2.4.2\n    - Fix allowing parameters like `constructor`\n  * deps: on-finished@~2.2.1\n  * deps: raw-body@~2.0.1\n    - Fix a false-positive when unpiping in Node.js 0.8\n    - deps: bytes@2.0.1\n  * deps: type-is@~1.6.2\n    - deps: mime-types@~2.0.11\n\n1.12.3 / 2015-04-15\n===================\n\n  * Slight efficiency improvement when not debugging\n  * deps: depd@~1.0.1\n  * deps: iconv-lite@0.4.8\n    - Add encoding alias UNICODE-1-1-UTF-7\n  * deps: raw-body@1.3.4\n    - Fix hanging callback if request aborts during read\n    - deps: iconv-lite@0.4.8\n\n1.12.2 / 2015-03-16\n===================\n\n  * deps: qs@2.4.1\n    - Fix error when parameter `hasOwnProperty` is present\n\n1.12.1 / 2015-03-15\n===================\n\n  * deps: debug@~2.1.3\n    - Fix high intensity foreground color for bold\n    - deps: ms@0.7.0\n  * deps: type-is@~1.6.1\n    - deps: mime-types@~2.0.10\n\n1.12.0 / 2015-02-13\n===================\n\n  * add `debug` messages\n  * accept a function for the `type` option\n  * use `content-type` to parse `Content-Type` headers\n  * deps: iconv-lite@0.4.7\n    - Gracefully support enumerables on `Object.prototype`\n  * deps: raw-body@1.3.3\n    - deps: iconv-lite@0.4.7\n  * deps: type-is@~1.6.0\n    - fix argument reassignment\n    - fix false-positives in `hasBody` `Transfer-Encoding` check\n    - support wildcard for both type and subtype (`*/*`)\n    - deps: mime-types@~2.0.9\n\n1.11.0 / 2015-01-30\n===================\n\n  * make internal `extended: true` depth limit infinity\n  * deps: type-is@~1.5.6\n    - deps: mime-types@~2.0.8\n\n1.10.2 / 2015-01-20\n===================\n\n  * deps: iconv-lite@0.4.6\n    - Fix rare aliases of single-byte encodings\n  * deps: raw-body@1.3.2\n    - deps: iconv-lite@0.4.6\n\n1.10.1 / 2015-01-01\n===================\n\n  * deps: on-finished@~2.2.0\n  * deps: type-is@~1.5.5\n    - deps: mime-types@~2.0.7\n\n1.10.0 / 2014-12-02\n===================\n\n  * make internal `extended: true` array limit dynamic\n\n1.9.3 / 2014-11-21\n==================\n\n  * deps: iconv-lite@0.4.5\n    - Fix Windows-31J and X-SJIS encoding support\n  * deps: qs@2.3.3\n    - Fix `arrayLimit` behavior\n  * deps: raw-body@1.3.1\n    - deps: iconv-lite@0.4.5\n  * deps: type-is@~1.5.3\n    - deps: mime-types@~2.0.3\n\n1.9.2 / 2014-10-27\n==================\n\n  * deps: qs@2.3.2\n    - Fix parsing of mixed objects and values\n\n1.9.1 / 2014-10-22\n==================\n\n  * deps: on-finished@~2.1.1\n    - Fix handling of pipelined requests\n  * deps: qs@2.3.0\n    - Fix parsing of mixed implicit and explicit arrays\n  * deps: type-is@~1.5.2\n    - deps: mime-types@~2.0.2\n\n1.9.0 / 2014-09-24\n==================\n\n  * include the charset in \"unsupported charset\" error message\n  * include the encoding in \"unsupported content encoding\" error message\n  * deps: depd@~1.0.0\n\n1.8.4 / 2014-09-23\n==================\n\n  * fix content encoding to be case-insensitive\n\n1.8.3 / 2014-09-19\n==================\n\n  * deps: qs@2.2.4\n    - Fix issue with object keys starting with numbers truncated\n\n1.8.2 / 2014-09-15\n==================\n\n  * deps: depd@0.4.5\n\n1.8.1 / 2014-09-07\n==================\n\n  * deps: media-typer@0.3.0\n  * deps: type-is@~1.5.1\n\n1.8.0 / 2014-09-05\n==================\n\n  * make empty-body-handling consistent between chunked requests\n    - empty `json` produces `{}`\n    - empty `raw` produces `new Buffer(0)`\n    - empty `text` produces `''`\n    - empty `urlencoded` produces `{}`\n  * deps: qs@2.2.3\n    - Fix issue where first empty value in array is discarded\n  * deps: type-is@~1.5.0\n    - fix `hasbody` to be true for `content-length: 0`\n\n1.7.0 / 2014-09-01\n==================\n\n  * add `parameterLimit` option to `urlencoded` parser\n  * change `urlencoded` extended array limit to 100\n  * respond with 413 when over `parameterLimit` in `urlencoded`\n\n1.6.7 / 2014-08-29\n==================\n\n  * deps: qs@2.2.2\n    - Remove unnecessary cloning\n\n1.6.6 / 2014-08-27\n==================\n\n  * deps: qs@2.2.0\n    - Array parsing fix\n    - Performance improvements\n\n1.6.5 / 2014-08-16\n==================\n\n  * deps: on-finished@2.1.0\n\n1.6.4 / 2014-08-14\n==================\n\n  * deps: qs@1.2.2\n\n1.6.3 / 2014-08-10\n==================\n\n  * deps: qs@1.2.1\n\n1.6.2 / 2014-08-07\n==================\n\n  * deps: qs@1.2.0\n    - Fix parsing array of objects\n\n1.6.1 / 2014-08-06\n==================\n\n  * deps: qs@1.1.0\n    - Accept urlencoded square brackets\n    - Accept empty values in implicit array notation\n\n1.6.0 / 2014-08-05\n==================\n\n  * deps: qs@1.0.2\n    - Complete rewrite\n    - Limits array length to 20\n    - Limits object depth to 5\n    - Limits parameters to 1,000\n\n1.5.2 / 2014-07-27\n==================\n\n  * deps: depd@0.4.4\n    - Work-around v8 generating empty stack traces\n\n1.5.1 / 2014-07-26\n==================\n\n  * deps: depd@0.4.3\n    - Fix exception when global `Error.stackTraceLimit` is too low\n\n1.5.0 / 2014-07-20\n==================\n\n  * deps: depd@0.4.2\n    - Add `TRACE_DEPRECATION` environment variable\n    - Remove non-standard grey color from color output\n    - Support `--no-deprecation` argument\n    - Support `--trace-deprecation` argument\n  * deps: iconv-lite@0.4.4\n    - Added encoding UTF-7\n  * deps: raw-body@1.3.0\n    - deps: iconv-lite@0.4.4\n    - Added encoding UTF-7\n    - Fix `Cannot switch to old mode now` error on Node.js 0.10+\n  * deps: type-is@~1.3.2\n\n1.4.3 / 2014-06-19\n==================\n\n  * deps: type-is@1.3.1\n    - fix global variable leak\n\n1.4.2 / 2014-06-19\n==================\n\n  * deps: type-is@1.3.0\n    - improve type parsing\n\n1.4.1 / 2014-06-19\n==================\n\n  * fix urlencoded extended deprecation message\n\n1.4.0 / 2014-06-19\n==================\n\n  * add `text` parser\n  * add `raw` parser\n  * check accepted charset in content-type (accepts utf-8)\n  * check accepted encoding in content-encoding (accepts identity)\n  * deprecate `bodyParser()` middleware; use `.json()` and `.urlencoded()` as needed\n  * deprecate `urlencoded()` without provided `extended` option\n  * lazy-load urlencoded parsers\n  * parsers split into files for reduced mem usage\n  * support gzip and deflate bodies\n    - set `inflate: false` to turn off\n  * deps: raw-body@1.2.2\n    - Support all encodings from `iconv-lite`\n\n1.3.1 / 2014-06-11\n==================\n\n  * deps: type-is@1.2.1\n    - Switch dependency from mime to mime-types@1.0.0\n\n1.3.0 / 2014-05-31\n==================\n\n  * add `extended` option to urlencoded parser\n\n1.2.2 / 2014-05-27\n==================\n\n  * deps: raw-body@1.1.6\n    - assert stream encoding on node.js 0.8\n    - assert stream encoding on node.js < 0.10.6\n    - deps: bytes@1\n\n1.2.1 / 2014-05-26\n==================\n\n  * invoke `next(err)` after request fully read\n    - prevents hung responses and socket hang ups\n\n1.2.0 / 2014-05-11\n==================\n\n  * add `verify` option\n  * deps: type-is@1.2.0\n    - support suffix matching\n\n1.1.2 / 2014-05-11\n==================\n\n  * improve json parser speed\n\n1.1.1 / 2014-05-11\n==================\n\n  * fix repeated limit parsing with every request\n\n1.1.0 / 2014-05-10\n==================\n\n  * add `type` option\n  * deps: pin for safety and consistency\n\n1.0.2 / 2014-04-14\n==================\n\n  * use `type-is` module\n\n1.0.1 / 2014-03-20\n==================\n\n  * lower default limits to 100kb\n/package.json\u0005{\n  \"name\": \"body-parser\",\n  \"description\": \"Node.js body parsing middleware\",\n  \"version\": \"1.20.2\",\n  \"contributors\": [\n    \"Douglas Christopher Wilson <doug@somethingdoug.com>\",\n    \"Jonathan Ong <me@jongleberry.com> (http://jongleberry.com)\"\n  ],\n  \"license\": \"MIT\",\n  \"repository\": \"expressjs/body-parser\",\n  \"dependencies\": {\n    \"bytes\": \"3.1.2\",\n    \"content-type\": \"~1.0.5\",\n    \"debug\": \"2.6.9\",\n    \"depd\": \"2.0.0\",\n    \"destroy\": \"1.2.0\",\n    \"http-errors\": \"2.0.0\",\n    \"iconv-lite\": \"0.4.24\",\n    \"on-finished\": \"2.4.1\",\n    \"qs\": \"6.11.0\",\n    \"raw-body\": \"2.5.2\",\n    \"type-is\": \"~1.6.18\",\n    \"unpipe\": \"1.0.0\"\n  },\n  \"devDependencies\": {\n    \"eslint\": \"8.34.0\",\n    \"eslint-config-standard\": \"14.1.1\",\n    \"eslint-plugin-import\": \"2.27.5\",\n    \"eslint-plugin-markdown\": \"3.0.0\",\n    \"eslint-plugin-node\": \"11.1.0\",\n    \"eslint-plugin-promise\": \"6.1.1\",\n    \"eslint-plugin-standard\": \"4.1.0\",\n    \"methods\": \"1.1.2\",\n    \"mocha\": \"10.2.0\",\n    \"nyc\": \"15.1.0\",\n    \"safe-buffer\": \"5.2.1\",\n    \"supertest\": \"6.3.3\"\n  },\n  \"files\": [\n    \"lib/\",\n    \"LICENSE\",\n    \"HISTORY.md\",\n    \"SECURITY.md\",\n    \"index.js\"\n  ],\n  \"engines\": {\n    \"node\": \">= 0.8\",\n    \"npm\": \"1.2.8000 || >= 1.4.16\"\n  },\n  \"scripts\": {\n    \"lint\": \"eslint .\",\n    \"test\": \"mocha --require test/support/env --reporter spec --check-leaks --bail test/\",\n    \"test-ci\": \"nyc --reporter=lcov --reporter=text npm test\",\n    \"test-cov\": \"nyc --reporter=html --reporter=text npm test\"\n  }\n}\n/README.mdG\u0006# body-parser\n\n[![NPM Version][npm-version-image]][npm-url]\n[![NPM Downloads][npm-downloads-image]][npm-url]\n[![Build Status][ci-image]][ci-url]\n[![Test Coverage][coveralls-image]][coveralls-url]\n\nNode.js body parsing middleware.\n\nParse incoming request bodies in a middleware before your handlers, available\nunder the `req.body` property.\n\n**Note** As `req.body`'s shape is based on user-controlled input, all\nproperties and values in this object are untrusted and should be validated\nbefore trusting. For example, `req.body.foo.toString()` may fail in multiple\nways, for example the `foo` property may not be there or may not be a string,\nand `toString` may not be a function and instead a string or other user input.\n\n[Learn about the anatomy of an HTTP transaction in Node.js](https://nodejs.org/en/docs/guides/anatomy-of-an-http-transaction/).\n\n_This does not handle multipart bodies_, due to their complex and typically\nlarge nature. For multipart bodies, you may be interested in the following\nmodules:\n\n  * [busboy](https://www.npmjs.org/package/busboy#readme) and\n    [connect-busboy](https://www.npmjs.org/package/connect-busboy#readme)\n  * [multiparty](https://www.npmjs.org/package/multiparty#readme) and\n    [connect-multiparty](https://www.npmjs.org/package/connect-multiparty#readme)\n  * [formidable](https://www.npmjs.org/package/formidable#readme)\n  * [multer](https://www.npmjs.org/package/multer#readme)\n\nThis module provides the following parsers:\n\n  * [JSON body parser](#bodyparserjsonoptions)\n  * [Raw body parser](#bodyparserrawoptions)\n  * [Text body parser](#bodyparsertextoptions)\n  * [URL-encoded form body parser](#bodyparserurlencodedoptions)\n\nOther body parsers you might be interested in:\n\n- [body](https://www.npmjs.org/package/body#readme)\n- [co-body](https://www.npmjs.org/package/co-body#readme)\n\n## Installation\n\n```sh\n$ npm install body-parser\n```\n\n## API\n\n```js\nvar bodyParser = require('body-parser')\n```\n\nThe `bodyParser` object exposes various factories to create middlewares. All\nmiddlewares will populate the `req.body` property with the parsed body when\nthe `Content-Type` request header matches the `type` option, or an empty\nobject (`{}`) if there was no body to parse, the `Content-Type` was not matched,\nor an error occurred.\n\nThe various errors returned by this module are described in the\n[errors section](#errors).\n\n### bodyParser.json([options])\n\nReturns middleware that only parses `json` and only looks at requests where\nthe `Content-Type` header matches the `type` option. This parser accepts any\nUnicode encoding of the body and supports automatic inflation of `gzip` and\n`deflate` encodings.\n\nA new `body` object containing the parsed data is populated on the `request`\nobject after the middleware (i.e. `req.body`).\n\n#### Options\n\nThe `json` function takes an optional `options` object that may contain any of\nthe following keys:\n\n##### inflate\n\nWhen set to `true`, then deflated (compressed) bodies will be inflated; when\n`false`, deflated bodies are rejected. Defaults to `true`.\n\n##### limit\n\nControls the maximum request body size. If this is a number, then the value\nspecifies the number of bytes; if it is a string, the value is passed to the\n[bytes](https://www.npmjs.com/package/bytes) library for parsing. Defaults\nto `'100kb'`.\n\n##### reviver\n\nThe `reviver` option is passed directly to `JSON.parse` as the second\nargument. You can find more information on this argument\n[in the MDN documentation about JSON.parse](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#Example.3A_Using_the_reviver_parameter).\n\n##### strict\n\nWhen set to `true`, will only accept arrays and objects; when `false` will\naccept anything `JSON.parse` accepts. Defaults to `true`.\n\n##### type\n\nThe `type` option is used to determine what media type the middleware will\nparse. This option can be a string, array of strings, or a function. If not a\nfunction, `type` option is passed directly to the\n[type-is](https://www.npmjs.org/package/type-is#readme) library and this can\nbe an extension name (like `json`), a mime type (like `application/json`), or\na mime type with a wildcard (like `*/*` or `*/json`). If a function, the `type`\noption is called as `fn(req)` and the request is parsed if it returns a truthy\nvalue. Defaults to `application/json`.\n\n##### verify\n\nThe `verify` option, if supplied, is called as `verify(req, res, buf, encoding)`,\nwhere `buf` is a `Buffer` of the raw request body and `encoding` is the\nencoding of the request. The parsing can be aborted by throwing an error.\n\n### bodyParser.raw([options])\n\nReturns middleware that parses all bodies as a `Buffer` and only looks at\nrequests where the `Content-Type` header matches the `type` option. This\nparser supports automatic inflation of `gzip` and `deflate` encodings.\n\nA new `body` object containing the parsed data is populated on the `request`\nobject after the middleware (i.e. `req.body`). This will be a `Buffer` object\nof the body.\n\n#### Options\n\nThe `raw` function takes an optional `options` object that may contain any of\nthe following keys:\n\n##### inflate\n\nWhen set to `true`, then deflated (compressed) bodies will be inflated; when\n`false`, deflated bodies are rejected. Defaults to `true`.\n\n##### limit\n\nControls the maximum request body size. If this is a number, then the value\nspecifies the number of bytes; if it is a string, the value is passed to the\n[bytes](https://www.npmjs.com/package/bytes) library for parsing. Defaults\nto `'100kb'`.\n\n##### type\n\nThe `type` option is used to determine what media type the middleware will\nparse. This option can be a string, array of strings, or a function.\nIf not a function, `type` option is passed directly to the\n[type-is](https://www.npmjs.org/package/type-is#readme) library and this\ncan be an extension name (like `bin`), a mime type (like\n`application/octet-stream`), or a mime type with a wildcard (like `*/*` or\n`application/*`). If a function, the `type` option is called as `fn(req)`\nand the request is parsed if it returns a truthy value. Defaults to\n`application/octet-stream`.\n\n##### verify\n\nThe `verify` option, if supplied, is called as `verify(req, res, buf, encoding)`,\nwhere `buf` is a `Buffer` of the raw request body and `encoding` is the\nencoding of the request. The parsing can be aborted by throwing an error.\n\n### bodyParser.text([options])\n\nReturns middleware that parses all bodies as a string and only looks at\nrequests where the `Content-Type` header matches the `type` option. This\nparser supports automatic inflation of `gzip` and `deflate` encodings.\n\nA new `body` string containing the parsed data is populated on the `request`\nobject after the middleware (i.e. `req.body`). This will be a string of the\nbody.\n\n#### Options\n\nThe `text` function takes an optional `options` object that may contain any of\nthe following keys:\n\n##### defaultCharset\n\nSpecify the default character set for the text content if the charset is not\nspecified in the `Content-Type` header of the request. Defaults to `utf-8`.\n\n##### inflate\n\nWhen set to `true`, then deflated (compressed) bodies will be inflated; when\n`false`, deflated bodies are rejected. Defaults to `true`.\n\n##### limit\n\nControls the maximum request body size. If this is a number, then the value\nspecifies the number of bytes; if it is a string, the value is passed to the\n[bytes](https://www.npmjs.com/package/bytes) library for parsing. Defaults\nto `'100kb'`.\n\n##### type\n\nThe `type` option is used to determine what media type the middleware will\nparse. This option can be a string, array of strings, or a function. If not\na function, `type` option is passed directly to the\n[type-is](https://www.npmjs.org/package/type-is#readme) library and this can\nbe an extension name (like `txt`), a mime type (like `text/plain`), or a mime\ntype with a wildcard (like `*/*` or `text/*`). If a function, the `type`\noption is called as `fn(req)` and the request is parsed if it returns a\ntruthy value. Defaults to `text/plain`.\n\n##### verify\n\nThe `verify` option, if supplied, is called as `verify(req, res, buf, encoding)`,\nwhere `buf` is a `Buffer` of the raw request body and `encoding` is the\nencoding of the request. The parsing can be aborted by throwing an error.\n\n### bodyParser.urlencoded([options])\n\nReturns middleware that only parses `urlencoded` bodies and only looks at\nrequests where the `Content-Type` header matches the `type` option. This\nparser accepts only UTF-8 encoding of the body and supports automatic\ninflation of `gzip` and `deflate` encodings.\n\nA new `body` object containing the parsed data is populated on the `request`\nobject after the middleware (i.e. `req.body`). This object will contain\nkey-value pairs, where the value can be a string or array (when `extended` is\n`false`), or any type (when `extended` is `true`).\n\n#### Options\n\nThe `urlencoded` function takes an optional `options` object that may contain\nany of the following keys:\n\n##### extended\n\nThe `extended` option allows to choose between parsing the URL-encoded data\nwith the `querystring` library (when `false`) or the `qs` library (when\n`true`). The \"extended\" syntax allows for rich objects and arrays to be\nencoded into the URL-encoded format, allowing for a JSON-like experience\nwith URL-encoded. For more information, please\n[see the qs library](https://www.npmjs.org/package/qs#readme).\n\nDefaults to `true`, but using the default has been deprecated. Please\nresearch into the difference between `qs` and `querystring` and choose the\nappropriate setting.\n\n##### inflate\n\nWhen set to `true`, then deflated (compressed) bodies will be inflated; when\n`false`, deflated bodies are rejected. Defaults to `true`.\n\n##### limit\n\nControls the maximum request body size. If this is a number, then the value\nspecifies the number of bytes; if it is a string, the value is passed to the\n[bytes](https://www.npmjs.com/package/bytes) library for parsing. Defaults\nto `'100kb'`.\n\n##### parameterLimit\n\nThe `parameterLimit` option controls the maximum number of parameters that\nare allowed in the URL-encoded data. If a request contains more parameters\nthan this value, a 413 will be returned to the client. Defaults to `1000`.\n\n##### type\n\nThe `type` option is used to determine what media type the middleware will\nparse. This option can be a string, array of strings, or a function. If not\na function, `type` option is passed directly to the\n[type-is](https://www.npmjs.org/package/type-is#readme) library and this can\nbe an extension name (like `urlencoded`), a mime type (like\n`application/x-www-form-urlencoded`), or a mime type with a wildcard (like\n`*/x-www-form-urlencoded`). If a function, the `type` option is called as\n`fn(req)` and the request is parsed if it returns a truthy value. Defaults\nto `application/x-www-form-urlencoded`.\n\n##### verify\n\nThe `verify` option, if supplied, is called as `verify(req, res, buf, encoding)`,\nwhere `buf` is a `Buffer` of the raw request body and `encoding` is the\nencoding of the request. The parsing can be aborted by throwing an error.\n\n## Errors\n\nThe middlewares provided by this module create errors using the\n[`http-errors` module](https://www.npmjs.com/package/http-errors). The errors\nwill typically have a `status`/`statusCode` property that contains the suggested\nHTTP response code, an `expose` property to determine if the `message` property\nshould be displayed to the client, a `type` property to determine the type of\nerror without matching against the `message`, and a `body` property containing\nthe read body, if available.\n\nThe following are the common errors created, though any error can come through\nfor various reasons.\n\n### content encoding unsupported\n\nThis error will occur when the request had a `Content-Encoding` header that\ncontained an encoding but the \"inflation\" option was set to `false`. The\n`status` property is set to `415`, the `type` property is set to\n`'encoding.unsupported'`, and the `charset` property will be set to the\nencoding that is unsupported.\n\n### entity parse failed\n\nThis error will occur when the request contained an entity that could not be\nparsed by the middleware. The `status` property is set to `400`, the `type`\nproperty is set to `'entity.parse.failed'`, and the `body` property is set to\nthe entity value that failed parsing.\n\n### entity verify failed\n\nThis error will occur when the request contained an entity that could not be\nfailed verification by the defined `verify` option. The `status` property is\nset to `403`, the `type` property is set to `'entity.verify.failed'`, and the\n`body` property is set to the entity value that failed verification.\n\n### request aborted\n\nThis error will occur when the request is aborted by the client before reading\nthe body has finished. The `received` property will be set to the number of\nbytes received before the request was aborted and the `expected` property is\nset to the number of expected bytes. The `status` property is set to `400`\nand `type` property is set to `'request.aborted'`.\n\n### request entity too large\n\nThis error will occur when the request body's size is larger than the \"limit\"\noption. The `limit` property will be set to the byte limit and the `length`\nproperty will be set to the request body's length. The `status` property is\nset to `413` and the `type` property is set to `'entity.too.large'`.\n\n### request size did not match content length\n\nThis error will occur when the request's length did not match the length from\nthe `Content-Length` header. This typically occurs when the request is malformed,\ntypically when the `Content-Length` header was calculated based on characters\ninstead of bytes. The `status` property is set to `400` and the `type` property\nis set to `'request.size.invalid'`.\n\n### stream encoding should not be set\n\nThis error will occur when something called the `req.setEncoding` method prior\nto this middleware. This module operates directly on bytes only and you cannot\ncall `req.setEncoding` when using this module. The `status` property is set to\n`500` and the `type` property is set to `'stream.encoding.set'`.\n\n### stream is not readable\n\nThis error will occur when the request is no longer readable when this middleware\nattempts to read it. This typically means something other than a middleware from\nthis module read the request body already and the middleware was also configured to\nread the same request. The `status` property is set to `500` and the `type`\nproperty is set to `'stream.not.readable'`.\n\n### too many parameters\n\nThis error will occur when the content of the request exceeds the configured\n`parameterLimit` for the `urlencoded` parser. The `status` property is set to\n`413` and the `type` property is set to `'parameters.too.many'`.\n\n### unsupported charset \"BOGUS\"\n\nThis error will occur when the request had a charset parameter in the\n`Content-Type` header, but the `iconv-lite` module does not support it OR the\nparser does not support it. The charset is contained in the message as well\nas in the `charset` property. The `status` property is set to `415`, the\n`type` property is set to `'charset.unsupported'`, and the `charset` property\nis set to the charset that is unsupported.\n\n### unsupported content encoding \"bogus\"\n\nThis error will occur when the request had a `Content-Encoding` header that\ncontained an unsupported encoding. The encoding is contained in the message\nas well as in the `encoding` property. The `status` property is set to `415`,\nthe `type` property is set to `'encoding.unsupported'`, and the `encoding`\nproperty is set to the encoding that is unsupported.\n\n## Examples\n\n### Express/Connect top-level generic\n\nThis example demonstrates adding a generic JSON and URL-encoded parser as a\ntop-level middleware, which will parse the bodies of all incoming requests.\nThis is the simplest setup.\n\n```js\nvar express = require('express')\nvar bodyParser = require('body-parser')\n\nvar app = express()\n\n// parse application/x-www-form-urlencoded\napp.use(bodyParser.urlencoded({ extended: false }))\n\n// parse application/json\napp.use(bodyParser.json())\n\napp.use(function (req, res) {\n  res.setHeader('Content-Type', 'text/plain')\n  res.write('you posted:\\n')\n  res.end(JSON.stringify(req.body, null, 2))\n})\n```\n\n### Express route-specific\n\nThis example demonstrates adding body parsers specifically to the routes that\nneed them. In general, this is the most recommended way to use body-parser with\nExpress.\n\n```js\nvar express = require('express')\nvar bodyParser = require('body-parser')\n\nvar app = express()\n\n// create application/json parser\nvar jsonParser = bodyParser.json()\n\n// create application/x-www-form-urlencoded parser\nvar urlencodedParser = bodyParser.urlencoded({ extended: false })\n\n// POST /login gets urlencoded bodies\napp.post('/login', urlencodedParser, function (req, res) {\n  res.send('welcome, ' + req.body.username)\n})\n\n// POST /api/users gets JSON bodies\napp.post('/api/users', jsonParser, function (req, res) {\n  // create user in req.body\n})\n```\n\n### Change accepted type for parsers\n\nAll the parsers accept a `type` option which allows you to change the\n`Content-Type` that the middleware will parse.\n\n```js\nvar express = require('express')\nvar bodyParser = require('body-parser')\n\nvar app = express()\n\n// parse various different custom JSON types as JSON\napp.use(bodyParser.json({ type: 'application/*+json' }))\n\n// parse some custom thing into a Buffer\napp.use(bodyParser.raw({ type: 'application/vnd.custom-type' }))\n\n// parse an HTML body into a string\napp.use(bodyParser.text({ type: 'text/html' }))\n```\n\n## License\n\n[MIT](LICENSE)\n\n[ci-image]: https://badgen.net/github/checks/expressjs/body-parser/master?label=ci\n[ci-url]: https://github.com/expressjs/body-parser/actions/workflows/ci.yml\n[coveralls-image]: https://badgen.net/coveralls/c/github/expressjs/body-parser/master\n[coveralls-url]: https://coveralls.io/r/expressjs/body-parser?branch=master\n[node-version-image]: https://badgen.net/npm/node/body-parser\n[node-version-url]: https://nodejs.org/en/download\n[npm-downloads-image]: https://badgen.net/npm/dm/body-parser\n[npm-url]: https://npmjs.org/package/body-parser\n[npm-version-image]: https://badgen.net/npm/v/body-parser\n/lib/read.js\u0010/*!\n * body-parser\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar createError = require('http-errors')\nvar destroy = require('destroy')\nvar getBody = require('raw-body')\nvar iconv = require('iconv-lite')\nvar onFinished = require('on-finished')\nvar unpipe = require('unpipe')\nvar zlib = require('zlib')\n\n/**\n * Module exports.\n */\n\nmodule.exports = read\n\n/**\n * Read a request into a buffer and parse.\n *\n * @param {object} req\n * @param {object} res\n * @param {function} next\n * @param {function} parse\n * @param {function} debug\n * @param {object} options\n * @private\n */\n\nfunction read (req, res, next, parse, debug, options) {\n  var length\n  var opts = options\n  var stream\n\n  // flag as parsed\n  req._body = true\n\n  // read options\n  var encoding = opts.encoding !== null\n    ? opts.encoding\n    : null\n  var verify = opts.verify\n\n  try {\n    // get the content stream\n    stream = contentstream(req, debug, opts.inflate)\n    length = stream.length\n    stream.length = undefined\n  } catch (err) {\n    return next(err)\n  }\n\n  // set raw-body options\n  opts.length = length\n  opts.encoding = verify\n    ? null\n    : encoding\n\n  // assert charset is supported\n  if (opts.encoding === null && encoding !== null && !iconv.encodingExists(encoding)) {\n    return next(createError(415, 'unsupported charset \"' + encoding.toUpperCase() + '\"', {\n      charset: encoding.toLowerCase(),\n      type: 'charset.unsupported'\n    }))\n  }\n\n  // read body\n  debug('read body')\n  getBody(stream, opts, function (error, body) {\n    if (error) {\n      var _error\n\n      if (error.type === 'encoding.unsupported') {\n        // echo back charset\n        _error = createError(415, 'unsupported charset \"' + encoding.toUpperCase() + '\"', {\n          charset: encoding.toLowerCase(),\n          type: 'charset.unsupported'\n        })\n      } else {\n        // set status code on error\n        _error = createError(400, error)\n      }\n\n      // unpipe from stream and destroy\n      if (stream !== req) {\n        unpipe(req)\n        destroy(stream, true)\n      }\n\n      // read off entire request\n      dump(req, function onfinished () {\n        next(createError(400, _error))\n      })\n      return\n    }\n\n    // verify\n    if (verify) {\n      try {\n        debug('verify body')\n        verify(req, res, body, encoding)\n      } catch (err) {\n        next(createError(403, err, {\n          body: body,\n          type: err.type || 'entity.verify.failed'\n        }))\n        return\n      }\n    }\n\n    // parse\n    var str = body\n    try {\n      debug('parse body')\n      str = typeof body !== 'string' && encoding !== null\n        ? iconv.decode(body, encoding)\n        : body\n      req.body = parse(str)\n    } catch (err) {\n      next(createError(400, err, {\n        body: str,\n        type: err.type || 'entity.parse.failed'\n      }))\n      return\n    }\n\n    next()\n  })\n}\n\n/**\n * Get the content stream of the request.\n *\n * @param {object} req\n * @param {function} debug\n * @param {boolean} [inflate=true]\n * @return {object}\n * @api private\n */\n\nfunction contentstream (req, debug, inflate) {\n  var encoding = (req.headers['content-encoding'] || 'identity').toLowerCase()\n  var length = req.headers['content-length']\n  var stream\n\n  debug('content-encoding \"%s\"', encoding)\n\n  if (inflate === false && encoding !== 'identity') {\n    throw createError(415, 'content encoding unsupported', {\n      encoding: encoding,\n      type: 'encoding.unsupported'\n    })\n  }\n\n  switch (encoding) {\n    case 'deflate':\n      stream = zlib.createInflate()\n      debug('inflate body')\n      req.pipe(stream)\n      break\n    case 'gzip':\n      stream = zlib.createGunzip()\n      debug('gunzip body')\n      req.pipe(stream)\n      break\n    case 'identity':\n      stream = req\n      stream.length = length\n      break\n    default:\n      throw createError(415, 'unsupported content encoding \"' + encoding + '\"', {\n        encoding: encoding,\n        type: 'encoding.unsupported'\n      })\n  }\n\n  return stream\n}\n\n/**\n * Dump the contents of a request.\n *\n * @param {object} req\n * @param {function} callback\n * @api private\n */\n\nfunction dump (req, callback) {\n  if (onFinished.isFinished(req)) {\n    callback(null)\n  } else {\n    onFinished(req, callback)\n    req.resume()\n  }\n}\n/index.js\ny/*!\n * body-parser\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar deprecate = require('depd')('body-parser')\n\n/**\n * Cache of loaded parsers.\n * @private\n */\n\nvar parsers = Object.create(null)\n\n/**\n * @typedef Parsers\n * @type {function}\n * @property {function} json\n * @property {function} raw\n * @property {function} text\n * @property {function} urlencoded\n */\n\n/**\n * Module exports.\n * @type {Parsers}\n */\n\nexports = module.exports = deprecate.function(bodyParser,\n  'bodyParser: use individual json/urlencoded middlewares')\n\n/**\n * JSON parser.\n * @public\n */\n\nObject.defineProperty(exports, 'json', {\n  configurable: true,\n  enumerable: true,\n  get: createParserGetter('json')\n})\n\n/**\n * Raw parser.\n * @public\n */\n\nObject.defineProperty(exports, 'raw', {\n  configurable: true,\n  enumerable: true,\n  get: createParserGetter('raw')\n})\n\n/**\n * Text parser.\n * @public\n */\n\nObject.defineProperty(exports, 'text', {\n  configurable: true,\n  enumerable: true,\n  get: createParserGetter('text')\n})\n\n/**\n * URL-encoded parser.\n * @public\n */\n\nObject.defineProperty(exports, 'urlencoded', {\n  configurable: true,\n  enumerable: true,\n  get: createParserGetter('urlencoded')\n})\n\n/**\n * Create a middleware to parse json and urlencoded bodies.\n *\n * @param {object} [options]\n * @return {function}\n * @deprecated\n * @public\n */\n\nfunction bodyParser (options) {\n  // use default type for parsers\n  var opts = Object.create(options || null, {\n    type: {\n      configurable: true,\n      enumerable: true,\n      value: undefined,\n      writable: true\n    }\n  })\n\n  var _urlencoded = exports.urlencoded(opts)\n  var _json = exports.json(opts)\n\n  return function bodyParser (req, res, next) {\n    _json(req, res, function (err) {\n      if (err) return next(err)\n      _urlencoded(req, res, next)\n    })\n  }\n}\n\n/**\n * Create a getter for loading a parser.\n * @private\n */\n\nfunction createParserGetter (name) {\n  return function get () {\n    return loadParser(name)\n  }\n}\n\n/**\n * Load a parser module.\n * @private\n */\n\nfunction loadParser (parserName) {\n  var parser = parsers[parserName]\n\n  if (parser !== undefined) {\n    return parser\n  }\n\n  // this uses a switch for static require analysis\n  switch (parserName) {\n    case 'json':\n      parser = require('./lib/types/json')\n      break\n    case 'raw':\n      parser = require('./lib/types/raw')\n      break\n    case 'text':\n      parser = require('./lib/types/text')\n      break\n    case 'urlencoded':\n      parser = require('./lib/types/urlencoded')\n      break\n  }\n\n  // store to prevent invoking require()\n  return (parsers[parserName] = parser)\n}\n/lib/types/text.js\b/*!\n * body-parser\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n */\n\nvar bytes = require('bytes')\nvar contentType = require('content-type')\nvar debug = require('debug')('body-parser:text')\nvar read = require('../read')\nvar typeis = require('type-is')\n\n/**\n * Module exports.\n */\n\nmodule.exports = text\n\n/**\n * Create a middleware to parse text bodies.\n *\n * @param {object} [options]\n * @return {function}\n * @api public\n */\n\nfunction text (options) {\n  var opts = options || {}\n\n  var defaultCharset = opts.defaultCharset || 'utf-8'\n  var inflate = opts.inflate !== false\n  var limit = typeof opts.limit !== 'number'\n    ? bytes.parse(opts.limit || '100kb')\n    : opts.limit\n  var type = opts.type || 'text/plain'\n  var verify = opts.verify || false\n\n  if (verify !== false && typeof verify !== 'function') {\n    throw new TypeError('option verify must be function')\n  }\n\n  // create the appropriate type checking function\n  var shouldParse = typeof type !== 'function'\n    ? typeChecker(type)\n    : type\n\n  function parse (buf) {\n    return buf\n  }\n\n  return function textParser (req, res, next) {\n    if (req._body) {\n      debug('body already parsed')\n      next()\n      return\n    }\n\n    req.body = req.body || {}\n\n    // skip requests without bodies\n    if (!typeis.hasBody(req)) {\n      debug('skip empty body')\n      next()\n      return\n    }\n\n    debug('content-type %j', req.headers['content-type'])\n\n    // determine if request should be parsed\n    if (!shouldParse(req)) {\n      debug('skip parsing')\n      next()\n      return\n    }\n\n    // get charset\n    var charset = getCharset(req) || defaultCharset\n\n    // read\n    read(req, res, next, parse, debug, {\n      encoding: charset,\n      inflate: inflate,\n      limit: limit,\n      verify: verify\n    })\n  }\n}\n\n/**\n * Get the charset of a request.\n *\n * @param {object} req\n * @api private\n */\n\nfunction getCharset (req) {\n  try {\n    return (contentType.parse(req).parameters.charset || '').toLowerCase()\n  } catch (e) {\n    return undefined\n  }\n}\n\n/**\n * Get the simple type checker.\n *\n * @param {string} type\n * @return {function}\n */\n\nfunction typeChecker (type) {\n  return function checkType (req) {\n    return Boolean(typeis(req, type))\n  }\n}\n/SECURITY.md\u0004# Security Policies and Procedures\n\n## Reporting a Bug\n\nThe Express team and community take all security bugs seriously. Thank you\nfor improving the security of Express. We appreciate your efforts and\nresponsible disclosure and will make every effort to acknowledge your\ncontributions.\n\nReport security bugs by emailing the current owner(s) of `body-parser`. This\ninformation can be found in the npm registry using the command\n`npm owner ls body-parser`.\nIf unsure or unable to get the information from the above, open an issue\nin the [project issue tracker](https://github.com/expressjs/body-parser/issues)\nasking for the current contact information.\n\nTo ensure the timely response to your report, please ensure that the entirety\nof the report is contained within the email body and not solely behind a web\nlink or an attachment.\n\nAt least one owner will acknowledge your email within 48 hours, and will send a\nmore detailed response within 48 hours indicating the next steps in handling\nyour report. After the initial reply to your report, the owners will\nendeavor to keep you informed of the progress towards a fix and full\nannouncement, and may ask for additional information or guidance.\n/lib/types/urlencoded.js\u0016/*!\n * body-parser\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar bytes = require('bytes')\nvar contentType = require('content-type')\nvar createError = require('http-errors')\nvar debug = require('debug')('body-parser:urlencoded')\nvar deprecate = require('depd')('body-parser')\nvar read = require('../read')\nvar typeis = require('type-is')\n\n/**\n * Module exports.\n */\n\nmodule.exports = urlencoded\n\n/**\n * Cache of parser modules.\n */\n\nvar parsers = Object.create(null)\n\n/**\n * Create a middleware to parse urlencoded bodies.\n *\n * @param {object} [options]\n * @return {function}\n * @public\n */\n\nfunction urlencoded (options) {\n  var opts = options || {}\n\n  // notice because option default will flip in next major\n  if (opts.extended === undefined) {\n    deprecate('undefined extended: provide extended option')\n  }\n\n  var extended = opts.extended !== false\n  var inflate = opts.inflate !== false\n  var limit = typeof opts.limit !== 'number'\n    ? bytes.parse(opts.limit || '100kb')\n    : opts.limit\n  var type = opts.type || 'application/x-www-form-urlencoded'\n  var verify = opts.verify || false\n\n  if (verify !== false && typeof verify !== 'function') {\n    throw new TypeError('option verify must be function')\n  }\n\n  // create the appropriate query parser\n  var queryparse = extended\n    ? extendedparser(opts)\n    : simpleparser(opts)\n\n  // create the appropriate type checking function\n  var shouldParse = typeof type !== 'function'\n    ? typeChecker(type)\n    : type\n\n  function parse (body) {\n    return body.length\n      ? queryparse(body)\n      : {}\n  }\n\n  return function urlencodedParser (req, res, next) {\n    if (req._body) {\n      debug('body already parsed')\n      next()\n      return\n    }\n\n    req.body = req.body || {}\n\n    // skip requests without bodies\n    if (!typeis.hasBody(req)) {\n      debug('skip empty body')\n      next()\n      return\n    }\n\n    debug('content-type %j', req.headers['content-type'])\n\n    // determine if request should be parsed\n    if (!shouldParse(req)) {\n      debug('skip parsing')\n      next()\n      return\n    }\n\n    // assert charset\n    var charset = getCharset(req) || 'utf-8'\n    if (charset !== 'utf-8') {\n      debug('invalid charset')\n      next(createError(415, 'unsupported charset \"' + charset.toUpperCase() + '\"', {\n        charset: charset,\n        type: 'charset.unsupported'\n      }))\n      return\n    }\n\n    // read\n    read(req, res, next, parse, debug, {\n      debug: debug,\n      encoding: charset,\n      inflate: inflate,\n      limit: limit,\n      verify: verify\n    })\n  }\n}\n\n/**\n * Get the extended query parser.\n *\n * @param {object} options\n */\n\nfunction extendedparser (options) {\n  var parameterLimit = options.parameterLimit !== undefined\n    ? options.parameterLimit\n    : 1000\n  var parse = parser('qs')\n\n  if (isNaN(parameterLimit) || parameterLimit < 1) {\n    throw new TypeError('option parameterLimit must be a positive number')\n  }\n\n  if (isFinite(parameterLimit)) {\n    parameterLimit = parameterLimit | 0\n  }\n\n  return function queryparse (body) {\n    var paramCount = parameterCount(body, parameterLimit)\n\n    if (paramCount === undefined) {\n      debug('too many parameters')\n      throw createError(413, 'too many parameters', {\n        type: 'parameters.too.many'\n      })\n    }\n\n    var arrayLimit = Math.max(100, paramCount)\n\n    debug('parse extended urlencoding')\n    return parse(body, {\n      allowPrototypes: true,\n      arrayLimit: arrayLimit,\n      depth: Infinity,\n      parameterLimit: parameterLimit\n    })\n  }\n}\n\n/**\n * Get the charset of a request.\n *\n * @param {object} req\n * @api private\n */\n\nfunction getCharset (req) {\n  try {\n    return (contentType.parse(req).parameters.charset || '').toLowerCase()\n  } catch (e) {\n    return undefined\n  }\n}\n\n/**\n * Count the number of parameters, stopping once limit reached\n *\n * @param {string} body\n * @param {number} limit\n * @api private\n */\n\nfunction parameterCount (body, limit) {\n  var count = 0\n  var index = 0\n\n  while ((index = body.indexOf('&', index)) !== -1) {\n    count++\n    index++\n\n    if (count === limit) {\n      return undefined\n    }\n  }\n\n  return count\n}\n\n/**\n * Get parser for module name dynamically.\n *\n * @param {string} name\n * @return {function}\n * @api private\n */\n\nfunction parser (name) {\n  var mod = parsers[name]\n\n  if (mod !== undefined) {\n    return mod.parse\n  }\n\n  // this uses a switch for static require analysis\n  switch (name) {\n    case 'qs':\n      mod = require('qs')\n      break\n    case 'querystring':\n      mod = require('querystring')\n      break\n  }\n\n  // store to prevent invoking require()\n  parsers[name] = mod\n\n  return mod.parse\n}\n\n/**\n * Get the simple query parser.\n *\n * @param {object} options\n */\n\nfunction simpleparser (options) {\n  var parameterLimit = options.parameterLimit !== undefined\n    ? options.parameterLimit\n    : 1000\n  var parse = parser('querystring')\n\n  if (isNaN(parameterLimit) || parameterLimit < 1) {\n    throw new TypeError('option parameterLimit must be a positive number')\n  }\n\n  if (isFinite(parameterLimit)) {\n    parameterLimit = parameterLimit | 0\n  }\n\n  return function queryparse (body) {\n    var paramCount = parameterCount(body, parameterLimit)\n\n    if (paramCount === undefined) {\n      debug('too many parameters')\n      throw createError(413, 'too many parameters', {\n        type: 'parameters.too.many'\n      })\n    }\n\n    debug('parse urlencoding')\n    return parse(body, undefined, undefined, { maxKeys: parameterLimit })\n  }\n}\n\n/**\n * Get the simple type checker.\n *\n * @param {string} type\n * @return {function}\n */\n\nfunction typeChecker (type) {\n  return function checkType (req) {\n    return Boolean(typeis(req, type))\n  }\n}\n/LICENSE\u0004(The MIT License)\n\nCopyright (c) 2014 Jonathan Ong <me@jongleberry.com>\nCopyright (c) 2014-2015 Douglas Christopher Wilson <doug@somethingdoug.com>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/YmFsYW5jZWQtbWF0Y2hAMS4wLjI=",
    "content": "/.github/FUNDING.yml5tidelift: \"npm/balanced-match\"\npatreon: juliangruber\n/README.md\r# balanced-match\n\nMatch balanced string pairs, like `{` and `}` or `<b>` and `</b>`. Supports regular expressions as well!\n\n[![build status](https://secure.travis-ci.org/juliangruber/balanced-match.svg)](http://travis-ci.org/juliangruber/balanced-match)\n[![downloads](https://img.shields.io/npm/dm/balanced-match.svg)](https://www.npmjs.org/package/balanced-match)\n\n[![testling badge](https://ci.testling.com/juliangruber/balanced-match.png)](https://ci.testling.com/juliangruber/balanced-match)\n\n## Example\n\nGet the first matching pair of braces:\n\n```js\nvar balanced = require('balanced-match');\n\nconsole.log(balanced('{', '}', 'pre{in{nested}}post'));\nconsole.log(balanced('{', '}', 'pre{first}between{second}post'));\nconsole.log(balanced(/\\s+\\{\\s+/, /\\s+\\}\\s+/, 'pre  {   in{nest}   }  post'));\n```\n\nThe matches are:\n\n```bash\n$ node example.js\n{ start: 3, end: 14, pre: 'pre', body: 'in{nested}', post: 'post' }\n{ start: 3,\n  end: 9,\n  pre: 'pre',\n  body: 'first',\n  post: 'between{second}post' }\n{ start: 3, end: 17, pre: 'pre', body: 'in{nest}', post: 'post' }\n```\n\n## API\n\n### var m = balanced(a, b, str)\n\nFor the first non-nested matching pair of `a` and `b` in `str`, return an\nobject with those keys:\n\n* **start** the index of the first match of `a`\n* **end** the index of the matching `b`\n* **pre** the preamble, `a` and `b` not included\n* **body** the match, `a` and `b` not included\n* **post** the postscript, `a` and `b` not included\n\nIf there's no match, `undefined` will be returned.\n\nIf the `str` contains more `a` than `b` / there are unmatched pairs, the first match that was closed will be used. For example, `{{a}` will match `['{', 'a', '']` and `{a}}` will match `['', 'a', '}']`.\n\n### var r = balanced.range(a, b, str)\n\nFor the first non-nested matching pair of `a` and `b` in `str`, return an\narray with indexes: `[ <a index>, <b index> ]`.\n\nIf there's no match, `undefined` will be returned.\n\nIf the `str` contains more `a` than `b` / there are unmatched pairs, the first match that was closed will be used. For example, `{{a}` will match `[ 1, 3 ]` and `{a}}` will match `[0, 2]`.\n\n## Installation\n\nWith [npm](https://npmjs.org) do:\n\n```bash\nnpm install balanced-match\n```\n\n## Security contact information\n\nTo report a security vulnerability, please use the\n[Tidelift security contact](https://tidelift.com/security).\nTidelift will coordinate the fix and disclosure.\n\n## License\n\n(MIT)\n\nCopyright (c) 2013 Julian Gruber &lt;julian@juliangruber.com&gt;\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\nof the Software, and to permit persons to whom the Software is furnished to do\nso, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n/index.js\u0004'use strict';\nmodule.exports = balanced;\nfunction balanced(a, b, str) {\n  if (a instanceof RegExp) a = maybeMatch(a, str);\n  if (b instanceof RegExp) b = maybeMatch(b, str);\n\n  var r = range(a, b, str);\n\n  return r && {\n    start: r[0],\n    end: r[1],\n    pre: str.slice(0, r[0]),\n    body: str.slice(r[0] + a.length, r[1]),\n    post: str.slice(r[1] + b.length)\n  };\n}\n\nfunction maybeMatch(reg, str) {\n  var m = str.match(reg);\n  return m ? m[0] : null;\n}\n\nbalanced.range = range;\nfunction range(a, b, str) {\n  var begs, beg, left, right, result;\n  var ai = str.indexOf(a);\n  var bi = str.indexOf(b, ai + 1);\n  var i = ai;\n\n  if (ai >= 0 && bi > 0) {\n    if(a===b) {\n      return [ai, bi];\n    }\n    begs = [];\n    left = str.length;\n\n    while (i >= 0 && !result) {\n      if (i == ai) {\n        begs.push(i);\n        ai = str.indexOf(a, i + 1);\n      } else if (begs.length == 1) {\n        result = [ begs.pop(), bi ];\n      } else {\n        beg = begs.pop();\n        if (beg < left) {\n          left = beg;\n          right = bi;\n        }\n\n        bi = str.indexOf(b, i + 1);\n      }\n\n      i = ai < bi && ai >= 0 ? ai : bi;\n    }\n\n    if (begs.length) {\n      result = [ left, right ];\n    }\n  }\n\n  return result;\n}\n/package.json\u0004-{\n  \"name\": \"balanced-match\",\n  \"description\": \"Match balanced character pairs, like \\\"{\\\" and \\\"}\\\"\",\n  \"version\": \"1.0.2\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git://github.com/juliangruber/balanced-match.git\"\n  },\n  \"homepage\": \"https://github.com/juliangruber/balanced-match\",\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"test\": \"tape test/test.js\",\n    \"bench\": \"matcha test/bench.js\"\n  },\n  \"devDependencies\": {\n    \"matcha\": \"^0.7.0\",\n    \"tape\": \"^4.6.0\"\n  },\n  \"keywords\": [\n    \"match\",\n    \"regexp\",\n    \"test\",\n    \"balanced\",\n    \"parse\"\n  ],\n  \"author\": {\n    \"name\": \"Julian Gruber\",\n    \"email\": \"mail@juliangruber.com\",\n    \"url\": \"http://juliangruber.com\"\n  },\n  \"license\": \"MIT\",\n  \"testling\": {\n    \"files\": \"test/*.js\",\n    \"browsers\": [\n      \"ie/8..latest\",\n      \"firefox/20..latest\",\n      \"firefox/nightly\",\n      \"chrome/25..latest\",\n      \"chrome/canary\",\n      \"opera/12..latest\",\n      \"opera/next\",\n      \"safari/5.1..latest\",\n      \"ipad/6.0..latest\",\n      \"iphone/6.0..latest\",\n      \"android-browser/4.2..latest\"\n    ]\n  }\n}\n/LICENSE.md\u0004H(MIT)\n\nCopyright (c) 2013 Julian Gruber &lt;julian@juliangruber.com&gt;\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\nof the Software, and to permit persons to whom the Software is furnished to do\nso, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/YmFzZTY0LWpzQDEuNS4x",
    "content": "/base64js.min.js\b(function(a){if(\"object\"==typeof exports&&\"undefined\"!=typeof module)module.exports=a();else if(\"function\"==typeof define&&define.amd)define([],a);else{var b;b=\"undefined\"==typeof window?\"undefined\"==typeof global?\"undefined\"==typeof self?this:self:global:window,b.base64js=a()}})(function(){return function(){function b(d,e,g){function a(j,i){if(!e[j]){if(!d[j]){var f=\"function\"==typeof require&&require;if(!i&&f)return f(j,!0);if(h)return h(j,!0);var c=new Error(\"Cannot find module '\"+j+\"'\");throw c.code=\"MODULE_NOT_FOUND\",c}var k=e[j]={exports:{}};d[j][0].call(k.exports,function(b){var c=d[j][1][b];return a(c||b)},k,k.exports,b,d,e,g)}return e[j].exports}for(var h=\"function\"==typeof require&&require,c=0;c<g.length;c++)a(g[c]);return a}return b}()({\"/\":[function(a,b,c){'use strict';function d(a){var b=a.length;if(0<b%4)throw new Error(\"Invalid string. Length must be a multiple of 4\");var c=a.indexOf(\"=\");-1===c&&(c=b);var d=c===b?0:4-c%4;return[c,d]}function e(a,b,c){return 3*(b+c)/4-c}function f(a){var b,c,f=d(a),g=f[0],h=f[1],j=new m(e(a,g,h)),k=0,n=0<h?g-4:g;for(c=0;c<n;c+=4)b=l[a.charCodeAt(c)]<<18|l[a.charCodeAt(c+1)]<<12|l[a.charCodeAt(c+2)]<<6|l[a.charCodeAt(c+3)],j[k++]=255&b>>16,j[k++]=255&b>>8,j[k++]=255&b;return 2===h&&(b=l[a.charCodeAt(c)]<<2|l[a.charCodeAt(c+1)]>>4,j[k++]=255&b),1===h&&(b=l[a.charCodeAt(c)]<<10|l[a.charCodeAt(c+1)]<<4|l[a.charCodeAt(c+2)]>>2,j[k++]=255&b>>8,j[k++]=255&b),j}function g(a){return k[63&a>>18]+k[63&a>>12]+k[63&a>>6]+k[63&a]}function h(a,b,c){for(var d,e=[],f=b;f<c;f+=3)d=(16711680&a[f]<<16)+(65280&a[f+1]<<8)+(255&a[f+2]),e.push(g(d));return e.join(\"\")}function j(a){for(var b,c=a.length,d=c%3,e=[],f=16383,g=0,j=c-d;g<j;g+=f)e.push(h(a,g,g+f>j?j:g+f));return 1===d?(b=a[c-1],e.push(k[b>>2]+k[63&b<<4]+\"==\")):2===d&&(b=(a[c-2]<<8)+a[c-1],e.push(k[b>>10]+k[63&b>>4]+k[63&b<<2]+\"=\")),e.join(\"\")}c.byteLength=function(a){var b=d(a),c=b[0],e=b[1];return 3*(c+e)/4-e},c.toByteArray=f,c.fromByteArray=j;for(var k=[],l=[],m=\"undefined\"==typeof Uint8Array?Array:Uint8Array,n=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\",o=0,p=n.length;o<p;++o)k[o]=n[o],l[n.charCodeAt(o)]=o;l[45]=62,l[95]=63},{}]},{},[])(\"/\")});/package.json\u0004[{\n  \"name\": \"base64-js\",\n  \"description\": \"Base64 encoding/decoding in pure JS\",\n  \"version\": \"1.5.1\",\n  \"author\": \"T. Jameson Little <t.jameson.little@gmail.com>\",\n  \"typings\": \"index.d.ts\",\n  \"bugs\": {\n    \"url\": \"https://github.com/beatgammit/base64-js/issues\"\n  },\n  \"devDependencies\": {\n    \"babel-minify\": \"^0.5.1\",\n    \"benchmark\": \"^2.1.4\",\n    \"browserify\": \"^16.3.0\",\n    \"standard\": \"*\",\n    \"tape\": \"4.x\"\n  },\n  \"homepage\": \"https://github.com/beatgammit/base64-js\",\n  \"keywords\": [\n    \"base64\"\n  ],\n  \"license\": \"MIT\",\n  \"main\": \"index.js\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git://github.com/beatgammit/base64-js.git\"\n  },\n  \"scripts\": {\n    \"build\": \"browserify -s base64js -r ./ | minify > base64js.min.js\",\n    \"lint\": \"standard\",\n    \"test\": \"npm run lint && npm run unit\",\n    \"unit\": \"tape test/*.js\"\n  },\n  \"funding\": [\n    {\n      \"type\": \"github\",\n      \"url\": \"https://github.com/sponsors/feross\"\n    },\n    {\n      \"type\": \"patreon\",\n      \"url\": \"https://www.patreon.com/feross\"\n    },\n    {\n      \"type\": \"consulting\",\n      \"url\": \"https://feross.org/support\"\n    }\n  ]\n}\n/README.md\u0004wbase64-js\n=========\n\n`base64-js` does basic base64 encoding/decoding in pure JS.\n\n[![build status](https://secure.travis-ci.org/beatgammit/base64-js.png)](http://travis-ci.org/beatgammit/base64-js)\n\nMany browsers already have base64 encoding/decoding functionality, but it is for text data, not all-purpose binary data.\n\nSometimes encoding/decoding binary data in the browser is useful, and that is what this module does.\n\n## install\n\nWith [npm](https://npmjs.org) do:\n\n`npm install base64-js` and `var base64js = require('base64-js')`\n\nFor use in web browsers do:\n\n`<script src=\"base64js.min.js\"></script>`\n\n[Get supported base64-js with the Tidelift Subscription](https://tidelift.com/subscription/pkg/npm-base64-js?utm_source=npm-base64-js&utm_medium=referral&utm_campaign=readme)\n\n## methods\n\n`base64js` has three exposed functions, `byteLength`, `toByteArray` and `fromByteArray`, which both take a single argument.\n\n* `byteLength` - Takes a base64 string and returns length of byte array\n* `toByteArray` - Takes a base64 string and returns a byte array\n* `fromByteArray` - Takes a byte array and returns a base64 string\n\n## license\n\nMIT\n/index.js\u000f\\'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n  lookup[i] = code[i]\n  revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n  var len = b64.length\n\n  if (len % 4 > 0) {\n    throw new Error('Invalid string. Length must be a multiple of 4')\n  }\n\n  // Trim off extra bytes after placeholder bytes are found\n  // See: https://github.com/beatgammit/base64-js/issues/42\n  var validLen = b64.indexOf('=')\n  if (validLen === -1) validLen = len\n\n  var placeHoldersLen = validLen === len\n    ? 0\n    : 4 - (validLen % 4)\n\n  return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n  var lens = getLens(b64)\n  var validLen = lens[0]\n  var placeHoldersLen = lens[1]\n  return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n  return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n  var tmp\n  var lens = getLens(b64)\n  var validLen = lens[0]\n  var placeHoldersLen = lens[1]\n\n  var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n  var curByte = 0\n\n  // if there are placeholders, only get up to the last complete 4 chars\n  var len = placeHoldersLen > 0\n    ? validLen - 4\n    : validLen\n\n  var i\n  for (i = 0; i < len; i += 4) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 18) |\n      (revLookup[b64.charCodeAt(i + 1)] << 12) |\n      (revLookup[b64.charCodeAt(i + 2)] << 6) |\n      revLookup[b64.charCodeAt(i + 3)]\n    arr[curByte++] = (tmp >> 16) & 0xFF\n    arr[curByte++] = (tmp >> 8) & 0xFF\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  if (placeHoldersLen === 2) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 2) |\n      (revLookup[b64.charCodeAt(i + 1)] >> 4)\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  if (placeHoldersLen === 1) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 10) |\n      (revLookup[b64.charCodeAt(i + 1)] << 4) |\n      (revLookup[b64.charCodeAt(i + 2)] >> 2)\n    arr[curByte++] = (tmp >> 8) & 0xFF\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  return arr\n}\n\nfunction tripletToBase64 (num) {\n  return lookup[num >> 18 & 0x3F] +\n    lookup[num >> 12 & 0x3F] +\n    lookup[num >> 6 & 0x3F] +\n    lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n  var tmp\n  var output = []\n  for (var i = start; i < end; i += 3) {\n    tmp =\n      ((uint8[i] << 16) & 0xFF0000) +\n      ((uint8[i + 1] << 8) & 0xFF00) +\n      (uint8[i + 2] & 0xFF)\n    output.push(tripletToBase64(tmp))\n  }\n  return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n  var tmp\n  var len = uint8.length\n  var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n  var parts = []\n  var maxChunkLength = 16383 // must be multiple of 3\n\n  // go through the array every three bytes, we'll deal with trailing stuff later\n  for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n    parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n  }\n\n  // pad the end with zeros, but make sure to not forget the extra bytes\n  if (extraBytes === 1) {\n    tmp = uint8[len - 1]\n    parts.push(\n      lookup[tmp >> 2] +\n      lookup[(tmp << 4) & 0x3F] +\n      '=='\n    )\n  } else if (extraBytes === 2) {\n    tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n    parts.push(\n      lookup[tmp >> 10] +\n      lookup[(tmp >> 4) & 0x3F] +\n      lookup[(tmp << 2) & 0x3F] +\n      '='\n    )\n  }\n\n  return parts.join('')\n}\n/index.d.tsġexport function byteLength(b64: string): number;\nexport function toByteArray(b64: string): Uint8Array;\nexport function fromByteArray(uint8: Uint8Array): string;\n/LICENSE\u00049The MIT License (MIT)\n\nCopyright (c) 2014 Jameson Little\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/YmluYXJ5LWV4dGVuc2lvbnNAMi4yLjA=",
    "content": "/index.d.ts/**\nList of binary file extensions.\n\n@example\n```\nimport binaryExtensions = require('binary-extensions');\n\nconsole.log(binaryExtensions);\n//=> ['3ds', '3g2', …]\n```\n*/\ndeclare const binaryExtensions: readonly string[];\n\nexport = binaryExtensions;\n/readme.md\u0003# binary-extensions\n\n> List of binary file extensions\n\nThe list is just a [JSON file](binary-extensions.json) and can be used anywhere.\n\n\n## Install\n\n```\n$ npm install binary-extensions\n```\n\n\n## Usage\n\n```js\nconst binaryExtensions = require('binary-extensions');\n\nconsole.log(binaryExtensions);\n//=> ['3ds', '3g2', …]\n```\n\n\n## Related\n\n- [is-binary-path](https://github.com/sindresorhus/is-binary-path) - Check if a filepath is a binary file\n- [text-extensions](https://github.com/sindresorhus/text-extensions) - List of text file extensions\n\n\n---\n\n<div align=\"center\">\n\t<b>\n\t\t<a href=\"https://tidelift.com/subscription/pkg/npm-binary-extensions?utm_source=npm-binary-extensions&utm_medium=referral&utm_campaign=readme\">Get professional support for this package with a Tidelift subscription</a>\n\t</b>\n\t<br>\n\t<sub>\n\t\tTidelift helps make open source sustainable for maintainers while giving companies<br>assurances about security, maintenance, and licensing for their dependencies.\n\t</sub>\n</div>\n/binary-extensions.json\bn[\n\t\"3dm\",\n\t\"3ds\",\n\t\"3g2\",\n\t\"3gp\",\n\t\"7z\",\n\t\"a\",\n\t\"aac\",\n\t\"adp\",\n\t\"ai\",\n\t\"aif\",\n\t\"aiff\",\n\t\"alz\",\n\t\"ape\",\n\t\"apk\",\n\t\"appimage\",\n\t\"ar\",\n\t\"arj\",\n\t\"asf\",\n\t\"au\",\n\t\"avi\",\n\t\"bak\",\n\t\"baml\",\n\t\"bh\",\n\t\"bin\",\n\t\"bk\",\n\t\"bmp\",\n\t\"btif\",\n\t\"bz2\",\n\t\"bzip2\",\n\t\"cab\",\n\t\"caf\",\n\t\"cgm\",\n\t\"class\",\n\t\"cmx\",\n\t\"cpio\",\n\t\"cr2\",\n\t\"cur\",\n\t\"dat\",\n\t\"dcm\",\n\t\"deb\",\n\t\"dex\",\n\t\"djvu\",\n\t\"dll\",\n\t\"dmg\",\n\t\"dng\",\n\t\"doc\",\n\t\"docm\",\n\t\"docx\",\n\t\"dot\",\n\t\"dotm\",\n\t\"dra\",\n\t\"DS_Store\",\n\t\"dsk\",\n\t\"dts\",\n\t\"dtshd\",\n\t\"dvb\",\n\t\"dwg\",\n\t\"dxf\",\n\t\"ecelp4800\",\n\t\"ecelp7470\",\n\t\"ecelp9600\",\n\t\"egg\",\n\t\"eol\",\n\t\"eot\",\n\t\"epub\",\n\t\"exe\",\n\t\"f4v\",\n\t\"fbs\",\n\t\"fh\",\n\t\"fla\",\n\t\"flac\",\n\t\"flatpak\",\n\t\"fli\",\n\t\"flv\",\n\t\"fpx\",\n\t\"fst\",\n\t\"fvt\",\n\t\"g3\",\n\t\"gh\",\n\t\"gif\",\n\t\"graffle\",\n\t\"gz\",\n\t\"gzip\",\n\t\"h261\",\n\t\"h263\",\n\t\"h264\",\n\t\"icns\",\n\t\"ico\",\n\t\"ief\",\n\t\"img\",\n\t\"ipa\",\n\t\"iso\",\n\t\"jar\",\n\t\"jpeg\",\n\t\"jpg\",\n\t\"jpgv\",\n\t\"jpm\",\n\t\"jxr\",\n\t\"key\",\n\t\"ktx\",\n\t\"lha\",\n\t\"lib\",\n\t\"lvp\",\n\t\"lz\",\n\t\"lzh\",\n\t\"lzma\",\n\t\"lzo\",\n\t\"m3u\",\n\t\"m4a\",\n\t\"m4v\",\n\t\"mar\",\n\t\"mdi\",\n\t\"mht\",\n\t\"mid\",\n\t\"midi\",\n\t\"mj2\",\n\t\"mka\",\n\t\"mkv\",\n\t\"mmr\",\n\t\"mng\",\n\t\"mobi\",\n\t\"mov\",\n\t\"movie\",\n\t\"mp3\",\n\t\"mp4\",\n\t\"mp4a\",\n\t\"mpeg\",\n\t\"mpg\",\n\t\"mpga\",\n\t\"mxu\",\n\t\"nef\",\n\t\"npx\",\n\t\"numbers\",\n\t\"nupkg\",\n\t\"o\",\n\t\"odp\",\n\t\"ods\",\n\t\"odt\",\n\t\"oga\",\n\t\"ogg\",\n\t\"ogv\",\n\t\"otf\",\n\t\"ott\",\n\t\"pages\",\n\t\"pbm\",\n\t\"pcx\",\n\t\"pdb\",\n\t\"pdf\",\n\t\"pea\",\n\t\"pgm\",\n\t\"pic\",\n\t\"png\",\n\t\"pnm\",\n\t\"pot\",\n\t\"potm\",\n\t\"potx\",\n\t\"ppa\",\n\t\"ppam\",\n\t\"ppm\",\n\t\"pps\",\n\t\"ppsm\",\n\t\"ppsx\",\n\t\"ppt\",\n\t\"pptm\",\n\t\"pptx\",\n\t\"psd\",\n\t\"pya\",\n\t\"pyc\",\n\t\"pyo\",\n\t\"pyv\",\n\t\"qt\",\n\t\"rar\",\n\t\"ras\",\n\t\"raw\",\n\t\"resources\",\n\t\"rgb\",\n\t\"rip\",\n\t\"rlc\",\n\t\"rmf\",\n\t\"rmvb\",\n\t\"rpm\",\n\t\"rtf\",\n\t\"rz\",\n\t\"s3m\",\n\t\"s7z\",\n\t\"scpt\",\n\t\"sgi\",\n\t\"shar\",\n\t\"snap\",\n\t\"sil\",\n\t\"sketch\",\n\t\"slk\",\n\t\"smv\",\n\t\"snk\",\n\t\"so\",\n\t\"stl\",\n\t\"suo\",\n\t\"sub\",\n\t\"swf\",\n\t\"tar\",\n\t\"tbz\",\n\t\"tbz2\",\n\t\"tga\",\n\t\"tgz\",\n\t\"thmx\",\n\t\"tif\",\n\t\"tiff\",\n\t\"tlz\",\n\t\"ttc\",\n\t\"ttf\",\n\t\"txz\",\n\t\"udf\",\n\t\"uvh\",\n\t\"uvi\",\n\t\"uvm\",\n\t\"uvp\",\n\t\"uvs\",\n\t\"uvu\",\n\t\"viv\",\n\t\"vob\",\n\t\"war\",\n\t\"wav\",\n\t\"wax\",\n\t\"wbmp\",\n\t\"wdp\",\n\t\"weba\",\n\t\"webm\",\n\t\"webp\",\n\t\"whl\",\n\t\"wim\",\n\t\"wm\",\n\t\"wma\",\n\t\"wmv\",\n\t\"wmx\",\n\t\"woff\",\n\t\"woff2\",\n\t\"wrm\",\n\t\"wvx\",\n\t\"xbm\",\n\t\"xif\",\n\t\"xla\",\n\t\"xlam\",\n\t\"xls\",\n\t\"xlsb\",\n\t\"xlsm\",\n\t\"xlsx\",\n\t\"xlt\",\n\t\"xltm\",\n\t\"xltx\",\n\t\"xm\",\n\t\"xmind\",\n\t\"xpi\",\n\t\"xpm\",\n\t\"xwd\",\n\t\"xz\",\n\t\"z\",\n\t\"zip\",\n\t\"zipx\"\n]\n/index.js6module.exports = require('./binary-extensions.json');\n/package.json\u0002{\n\t\"name\": \"binary-extensions\",\n\t\"version\": \"2.2.0\",\n\t\"description\": \"List of binary file extensions\",\n\t\"license\": \"MIT\",\n\t\"repository\": \"sindresorhus/binary-extensions\",\n\t\"author\": {\n\t\t\"name\": \"Sindre Sorhus\",\n\t\t\"email\": \"sindresorhus@gmail.com\",\n\t\t\"url\": \"sindresorhus.com\"\n\t},\n\t\"engines\": {\n\t\t\"node\": \">=8\"\n\t},\n\t\"scripts\": {\n\t\t\"test\": \"xo && ava && tsd\"\n\t},\n\t\"files\": [\n\t\t\"index.js\",\n\t\t\"index.d.ts\",\n\t\t\"binary-extensions.json\",\n\t\t\"binary-extensions.json.d.ts\"\n\t],\n\t\"keywords\": [\n\t\t\"binary\",\n\t\t\"extensions\",\n\t\t\"extension\",\n\t\t\"file\",\n\t\t\"json\",\n\t\t\"list\",\n\t\t\"array\"\n\t],\n\t\"devDependencies\": {\n\t\t\"ava\": \"^1.4.1\",\n\t\t\"tsd\": \"^0.7.2\",\n\t\t\"xo\": \"^0.24.0\"\n\t}\n}\n/license\u0004MIT License\n\nCopyright (c) 2019 Sindre Sorhus <sindresorhus@gmail.com> (https://sindresorhus.com), Paul Miller (https://paulmillr.com)\n\nPermission 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:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE 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.\n/binary-extensions.json.d.tsWdeclare const binaryExtensionsJson: readonly string[];\n\nexport = binaryExtensionsJson;\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/YmxANS4xLjA=",
    "content": "/LICENSE.md\u0004The MIT License (MIT)\n=====================\n\nCopyright (c) 2013-2019 bl contributors\n----------------------------------\n\n*bl contributors listed at <https://github.com/rvagg/bl#contributors>*\n\nPermission 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:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE 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.\n/BufferList.d.ts,export type BufferListAcceptedTypes =\n  | Buffer\n  | BufferList\n  | Uint8Array\n  | BufferListAcceptedTypes[]\n  | string\n  | number;\n\nexport interface BufferListConstructor {\n  new (initData?: BufferListAcceptedTypes): BufferList;\n  (initData?: BufferListAcceptedTypes): BufferList;\n\n  /**\n   * Determines if the passed object is a BufferList. It will return true\n   * if the passed object is an instance of BufferList or BufferListStream\n   * and false otherwise.\n   *\n   * N.B. this won't return true for BufferList or BufferListStream instances\n   * created by versions of this library before this static method was added.\n   *\n   * @param other\n   */\n\n  isBufferList(other: unknown): boolean;\n}\n\ninterface BufferList {\n  prototype: Object\n\n  /**\n   * Get the length of the list in bytes. This is the sum of the lengths\n   * of all of the buffers contained in the list, minus any initial offset\n   * for a semi-consumed buffer at the beginning. Should accurately\n   * represent the total number of bytes that can be read from the list.\n   */\n\n  length: number;\n\n  /**\n   * Adds an additional buffer or BufferList to the internal list.\n   * this is returned so it can be chained.\n   *\n   * @param buffer\n   */\n\n  append(buffer: BufferListAcceptedTypes): this;\n\n  /**\n   * Will return the byte at the specified index.\n   * @param index\n   */\n\n  get(index: number): number;\n\n  /**\n   * Returns a new Buffer object containing the bytes within the\n   * range specified. Both start and end are optional and will\n   * default to the beginning and end of the list respectively.\n   *\n   * If the requested range spans a single internal buffer then a\n   * slice of that buffer will be returned which shares the original\n   * memory range of that Buffer. If the range spans multiple buffers\n   * then copy operations will likely occur to give you a uniform Buffer.\n   *\n   * @param start\n   * @param end\n   */\n\n  slice(start?: number, end?: number): Buffer;\n\n  /**\n   * Returns a new BufferList object containing the bytes within the\n   * range specified. Both start and end are optional and will default\n   * to the beginning and end of the list respectively.\n   *\n   * No copies will be performed. All buffers in the result share\n   * memory with the original list.\n   *\n   * @param start\n   * @param end\n   */\n\n  shallowSlice(start?: number, end?: number): this;\n\n  /**\n   * Copies the content of the list in the `dest` buffer, starting from\n   * `destStart` and containing the bytes within the range specified\n   * with `srcStart` to `srcEnd`.\n   *\n   * `destStart`, `start` and `end` are optional and will default to the\n   * beginning of the dest buffer, and the beginning and end of the\n   * list respectively.\n   *\n   * @param dest\n   * @param destStart\n   * @param srcStart\n   * @param srcEnd\n   */\n\n  copy(\n    dest: Buffer,\n    destStart?: number,\n    srcStart?: number,\n    srcEnd?: number\n  ): Buffer;\n\n  /**\n   * Performs a shallow-copy of the list. The internal Buffers remains the\n   * same, so if you change the underlying Buffers, the change will be\n   * reflected in both the original and the duplicate.\n   *\n   * This method is needed if you want to call consume() or pipe() and\n   * still keep the original list.\n   *\n   * @example\n   *\n   * ```js\n   * var bl = new BufferListStream();\n   * bl.append('hello');\n   * bl.append(' world');\n   * bl.append('\\n');\n   * bl.duplicate().pipe(process.stdout, { end: false });\n   *\n   * console.log(bl.toString())\n   * ```\n   */\n\n  duplicate(): this;\n\n  /**\n   * Will shift bytes off the start of the list. The number of bytes\n   * consumed don't need to line up with the sizes of the internal\n   * Buffers—initial offsets will be calculated accordingly in order\n   * to give you a consistent view of the data.\n   *\n   * @param bytes\n   */\n\n  consume(bytes?: number): void;\n\n  /**\n   * Will return a string representation of the buffer. The optional\n   * `start` and `end` arguments are passed on to `slice()`, while\n   * the encoding is passed on to `toString()` of the resulting Buffer.\n   *\n   * See the [`Buffer#toString()`](http://nodejs.org/docs/latest/api/buffer.html#buffer_buf_tostring_encoding_start_end)\n   * documentation for more information.\n   *\n   * @param encoding\n   * @param start\n   * @param end\n   */\n\n  toString(encoding?: string, start?: number, end?: number): string;\n\n  /**\n   * Will return the byte at the specified index. indexOf() method\n   * returns the first index at which a given element can be found\n   * in the BufferList, or -1 if it is not present.\n   *\n   * @param value\n   * @param byteOffset\n   * @param encoding\n   */\n\n  indexOf(\n    value: string | number | Uint8Array | BufferList | Buffer,\n    byteOffset?: number,\n    encoding?: string\n  ): number;\n\n  /**\n   * All of the standard byte-reading methods of the Buffer interface are implemented and will operate across internal Buffer boundaries transparently.\n   * See the [Buffer](http://nodejs.org/docs/latest/api/buffer.html) documentation for how these work.\n   *\n   * @param offset\n   */\n\n  readDoubleBE: Buffer['readDoubleBE'];\n\n  /**\n   * All of the standard byte-reading methods of the Buffer interface are implemented and will operate across internal Buffer boundaries transparently.\n   * See the [Buffer](http://nodejs.org/docs/latest/api/buffer.html) documentation for how these work.\n   *\n   * @param offset\n   */\n\n  readDoubleLE: Buffer['readDoubleLE'];\n\n  /**\n   * All of the standard byte-reading methods of the Buffer interface are implemented and will operate across internal Buffer boundaries transparently.\n   * See the [Buffer](http://nodejs.org/docs/latest/api/buffer.html) documentation for how these work.\n   *\n   * @param offset\n   */\n\n  readFloatBE: Buffer['readFloatBE'];\n\n  /**\n   * All of the standard byte-reading methods of the Buffer interface are implemented and will operate across internal Buffer boundaries transparently.\n   * See the [Buffer](http://nodejs.org/docs/latest/api/buffer.html) documentation for how these work.\n   *\n   * @param offset\n   */\n\n  readFloatLE: Buffer['readFloatLE'];\n\n  /**\n   * All of the standard byte-reading methods of the Buffer interface are implemented and will operate across internal Buffer boundaries transparently.\n   * See the [Buffer](http://nodejs.org/docs/latest/api/buffer.html) documentation for how these work.\n   *\n   * @param offset\n   */\n\n  readInt32BE: Buffer['readInt32BE'];\n\n  /**\n   * All of the standard byte-reading methods of the Buffer interface are implemented and will operate across internal Buffer boundaries transparently.\n   * See the [Buffer](http://nodejs.org/docs/latest/api/buffer.html) documentation for how these work.\n   *\n   * @param offset\n   */\n\n  readInt32LE: Buffer['readInt32LE'];\n\n  /**\n   * All of the standard byte-reading methods of the Buffer interface are implemented and will operate across internal Buffer boundaries transparently.\n   * See the [Buffer](http://nodejs.org/docs/latest/api/buffer.html) documentation for how these work.\n   *\n   * @param offset\n   */\n\n  readUInt32BE: Buffer['readUInt32BE'];\n\n  /**\n   * All of the standard byte-reading methods of the Buffer interface are implemented and will operate across internal Buffer boundaries transparently.\n   * See the [Buffer](http://nodejs.org/docs/latest/api/buffer.html) documentation for how these work.\n   *\n   * @param offset\n   */\n\n  readUInt32LE: Buffer['readUInt32LE'];\n\n  /**\n   * All of the standard byte-reading methods of the Buffer interface are implemented and will operate across internal Buffer boundaries transparently.\n   * See the [Buffer](http://nodejs.org/docs/latest/api/buffer.html) documentation for how these work.\n   *\n   * @param offset\n   */\n\n  readInt16BE: Buffer['readInt16BE'];\n\n  /**\n   * All of the standard byte-reading methods of the Buffer interface are\n   * implemented and will operate across internal Buffer boundaries transparently.\n   *\n   * See the [Buffer](http://nodejs.org/docs/latest/api/buffer.html)\n   * documentation for how these work.\n   *\n   * @param offset\n   */\n\n  readInt16LE: Buffer['readInt16LE'];\n\n  /**\n   * All of the standard byte-reading methods of the Buffer interface are\n   * implemented and will operate across internal Buffer boundaries transparently.\n   *\n   * See the [Buffer](http://nodejs.org/docs/latest/api/buffer.html)\n   * documentation for how these work.\n   *\n   * @param offset\n   */\n\n  readUInt16BE: Buffer['readUInt16BE'];\n\n  /**\n   * All of the standard byte-reading methods of the Buffer interface are\n   * implemented and will operate across internal Buffer boundaries transparently.\n   *\n   * See the [Buffer](http://nodejs.org/docs/latest/api/buffer.html)\n   * documentation for how these work.\n   *\n   * @param offset\n   */\n\n  readUInt16LE: Buffer['readUInt16LE'];\n\n  /**\n   * All of the standard byte-reading methods of the Buffer interface are\n   * implemented and will operate across internal Buffer boundaries transparently.\n   *\n   * See the [Buffer](http://nodejs.org/docs/latest/api/buffer.html)\n   * documentation for how these work.\n   *\n   * @param offset\n   */\n\n  readInt8: Buffer['readInt8'];\n\n  /**\n   * All of the standard byte-reading methods of the Buffer interface are\n   * implemented and will operate across internal Buffer boundaries transparently.\n   *\n   * See the [Buffer](http://nodejs.org/docs/latest/api/buffer.html)\n   * documentation for how these work.\n   *\n   * @param offset\n   */\n\n  readUInt8: Buffer['readUInt8'];\n\n  /**\n   * All of the standard byte-reading methods of the Buffer interface are\n   * implemented and will operate across internal Buffer boundaries transparently.\n   *\n   * See the [Buffer](http://nodejs.org/docs/latest/api/buffer.html)\n   * documentation for how these work.\n   *\n   * @param offset\n   */\n\n  readIntBE: Buffer['readIntBE'];\n\n  /**\n   * All of the standard byte-reading methods of the Buffer interface are\n   * implemented and will operate across internal Buffer boundaries transparently.\n   *\n   * See the [Buffer](http://nodejs.org/docs/latest/api/buffer.html)\n   * documentation for how these work.\n   *\n   * @param offset\n   */\n\n  readIntLE: Buffer['readIntLE'];\n\n  /**\n   * All of the standard byte-reading methods of the Buffer interface are\n   * implemented and will operate across internal Buffer boundaries transparently.\n   *\n   * See the [Buffer](http://nodejs.org/docs/latest/api/buffer.html)\n   * documentation for how these work.\n   *\n   * @param offset\n   */\n\n  readUIntBE: Buffer['readUIntBE'];\n\n  /**\n   * All of the standard byte-reading methods of the Buffer interface are\n   * implemented and will operate across internal Buffer boundaries transparently.\n   *\n   * See the [Buffer](http://nodejs.org/docs/latest/api/buffer.html)\n   * documentation for how these work.\n   *\n   * @param offset\n   */\n\n  readUIntLE: Buffer['readUIntLE'];\n}\n\n/**\n * No arguments are required for the constructor, but you can initialise\n * the list by passing in a single Buffer object or an array of Buffer\n * objects.\n *\n * `new` is not strictly required, if you don't instantiate a new object,\n * it will be done automatically for you so you can create a new instance\n * simply with:\n *\n * ```js\n * const { BufferList } = require('bl')\n * const bl = BufferList()\n *\n * // equivalent to:\n *\n * const { BufferList } = require('bl')\n * const bl = new BufferList()\n * ```\n */\n\ndeclare const BufferList: BufferListConstructor;\n/README.md1q# bl *(BufferList)*\n\n[![Build Status](https://api.travis-ci.com/rvagg/bl.svg?branch=master)](https://travis-ci.com/rvagg/bl/)\n\n**A Node.js Buffer list collector, reader and streamer thingy.**\n\n[![NPM](https://nodei.co/npm/bl.svg)](https://nodei.co/npm/bl/)\n\n**bl** is a storage object for collections of Node Buffers, exposing them with the main Buffer readable API. Also works as a duplex stream so you can collect buffers from a stream that emits them and emit buffers to a stream that consumes them!\n\nThe original buffers are kept intact and copies are only done as necessary. Any reads that require the use of a single original buffer will return a slice of that buffer only (which references the same memory as the original buffer). Reads that span buffers perform concatenation as required and return the results transparently.\n\n```js\nconst { BufferList } = require('bl')\n\nconst bl = new BufferList()\nbl.append(Buffer.from('abcd'))\nbl.append(Buffer.from('efg'))\nbl.append('hi')                     // bl will also accept & convert Strings\nbl.append(Buffer.from('j'))\nbl.append(Buffer.from([ 0x3, 0x4 ]))\n\nconsole.log(bl.length) // 12\n\nconsole.log(bl.slice(0, 10).toString('ascii')) // 'abcdefghij'\nconsole.log(bl.slice(3, 10).toString('ascii')) // 'defghij'\nconsole.log(bl.slice(3, 6).toString('ascii'))  // 'def'\nconsole.log(bl.slice(3, 8).toString('ascii'))  // 'defgh'\nconsole.log(bl.slice(5, 10).toString('ascii')) // 'fghij'\n\nconsole.log(bl.indexOf('def')) // 3\nconsole.log(bl.indexOf('asdf')) // -1\n\n// or just use toString!\nconsole.log(bl.toString())               // 'abcdefghij\\u0003\\u0004'\nconsole.log(bl.toString('ascii', 3, 8))  // 'defgh'\nconsole.log(bl.toString('ascii', 5, 10)) // 'fghij'\n\n// other standard Buffer readables\nconsole.log(bl.readUInt16BE(10)) // 0x0304\nconsole.log(bl.readUInt16LE(10)) // 0x0403\n```\n\nGive it a callback in the constructor and use it just like **[concat-stream](https://github.com/maxogden/node-concat-stream)**:\n\n```js\nconst { BufferListStream } = require('bl')\nconst fs = require('fs')\n\nfs.createReadStream('README.md')\n  .pipe(BufferListStream((err, data) => { // note 'new' isn't strictly required\n    // `data` is a complete Buffer object containing the full data\n    console.log(data.toString())\n  }))\n```\n\nNote that when you use the *callback* method like this, the resulting `data` parameter is a concatenation of all `Buffer` objects in the list. If you want to avoid the overhead of this concatenation (in cases of extreme performance consciousness), then avoid the *callback* method and just listen to `'end'` instead, like a standard Stream.\n\nOr to fetch a URL using [hyperquest](https://github.com/substack/hyperquest) (should work with [request](http://github.com/mikeal/request) and even plain Node http too!):\n\n```js\nconst hyperquest = require('hyperquest')\nconst { BufferListStream } = require('bl')\n\nconst url = 'https://raw.github.com/rvagg/bl/master/README.md'\n\nhyperquest(url).pipe(BufferListStream((err, data) => {\n  console.log(data.toString())\n}))\n```\n\nOr, use it as a readable stream to recompose a list of Buffers to an output source:\n\n```js\nconst { BufferListStream } = require('bl')\nconst fs = require('fs')\n\nvar bl = new BufferListStream()\nbl.append(Buffer.from('abcd'))\nbl.append(Buffer.from('efg'))\nbl.append(Buffer.from('hi'))\nbl.append(Buffer.from('j'))\n\nbl.pipe(fs.createWriteStream('gibberish.txt'))\n```\n\n## API\n\n  * <a href=\"#ctor\"><code><b>new BufferList([ buf ])</b></code></a>\n  * <a href=\"#isBufferList\"><code><b>BufferList.isBufferList(obj)</b></code></a>\n  * <a href=\"#length\"><code>bl.<b>length</b></code></a>\n  * <a href=\"#append\"><code>bl.<b>append(buffer)</b></code></a>\n  * <a href=\"#get\"><code>bl.<b>get(index)</b></code></a>\n  * <a href=\"#indexOf\"><code>bl.<b>indexOf(value[, byteOffset][, encoding])</b></code></a>\n  * <a href=\"#slice\"><code>bl.<b>slice([ start[, end ] ])</b></code></a>\n  * <a href=\"#shallowSlice\"><code>bl.<b>shallowSlice([ start[, end ] ])</b></code></a>\n  * <a href=\"#copy\"><code>bl.<b>copy(dest, [ destStart, [ srcStart [, srcEnd ] ] ])</b></code></a>\n  * <a href=\"#duplicate\"><code>bl.<b>duplicate()</b></code></a>\n  * <a href=\"#consume\"><code>bl.<b>consume(bytes)</b></code></a>\n  * <a href=\"#toString\"><code>bl.<b>toString([encoding, [ start, [ end ]]])</b></code></a>\n  * <a href=\"#readXX\"><code>bl.<b>readDoubleBE()</b></code>, <code>bl.<b>readDoubleLE()</b></code>, <code>bl.<b>readFloatBE()</b></code>, <code>bl.<b>readFloatLE()</b></code>, <code>bl.<b>readInt32BE()</b></code>, <code>bl.<b>readInt32LE()</b></code>, <code>bl.<b>readUInt32BE()</b></code>, <code>bl.<b>readUInt32LE()</b></code>, <code>bl.<b>readInt16BE()</b></code>, <code>bl.<b>readInt16LE()</b></code>, <code>bl.<b>readUInt16BE()</b></code>, <code>bl.<b>readUInt16LE()</b></code>, <code>bl.<b>readInt8()</b></code>, <code>bl.<b>readUInt8()</b></code></a>\n  * <a href=\"#ctorStream\"><code><b>new BufferListStream([ callback ])</b></code></a>\n\n--------------------------------------------------------\n<a name=\"ctor\"></a>\n### new BufferList([ Buffer | Buffer array | BufferList | BufferList array | String ])\nNo arguments are _required_ for the constructor, but you can initialise the list by passing in a single `Buffer` object or an array of `Buffer` objects.\n\n`new` is not strictly required, if you don't instantiate a new object, it will be done automatically for you so you can create a new instance simply with:\n\n```js\nconst { BufferList } = require('bl')\nconst bl = BufferList()\n\n// equivalent to:\n\nconst { BufferList } = require('bl')\nconst bl = new BufferList()\n```\n\n--------------------------------------------------------\n<a name=\"isBufferList\"></a>\n### BufferList.isBufferList(obj)\nDetermines if the passed object is a `BufferList`. It will return `true` if the passed object is an instance of `BufferList` **or** `BufferListStream` and `false` otherwise.\n\nN.B. this won't return `true` for `BufferList` or `BufferListStream` instances created by versions of this library before this static method was added.\n\n--------------------------------------------------------\n<a name=\"length\"></a>\n### bl.length\nGet the length of the list in bytes. This is the sum of the lengths of all of the buffers contained in the list, minus any initial offset for a semi-consumed buffer at the beginning. Should accurately represent the total number of bytes that can be read from the list.\n\n--------------------------------------------------------\n<a name=\"append\"></a>\n### bl.append(Buffer | Buffer array | BufferList | BufferList array | String)\n`append(buffer)` adds an additional buffer or BufferList to the internal list. `this` is returned so it can be chained.\n\n--------------------------------------------------------\n<a name=\"get\"></a>\n### bl.get(index)\n`get()` will return the byte at the specified index.\n\n--------------------------------------------------------\n<a name=\"indexOf\"></a>\n### bl.indexOf(value[, byteOffset][, encoding])\n`get()` will return the byte at the specified index.\n`indexOf()` method returns the first index at which a given element can be found in the BufferList, or -1 if it is not present.\n\n--------------------------------------------------------\n<a name=\"slice\"></a>\n### bl.slice([ start, [ end ] ])\n`slice()` returns a new `Buffer` object containing the bytes within the range specified. Both `start` and `end` are optional and will default to the beginning and end of the list respectively.\n\nIf the requested range spans a single internal buffer then a slice of that buffer will be returned which shares the original memory range of that Buffer. If the range spans multiple buffers then copy operations will likely occur to give you a uniform Buffer.\n\n--------------------------------------------------------\n<a name=\"shallowSlice\"></a>\n### bl.shallowSlice([ start, [ end ] ])\n`shallowSlice()` returns a new `BufferList` object containing the bytes within the range specified. Both `start` and `end` are optional and will default to the beginning and end of the list respectively.\n\nNo copies will be performed. All buffers in the result share memory with the original list.\n\n--------------------------------------------------------\n<a name=\"copy\"></a>\n### bl.copy(dest, [ destStart, [ srcStart [, srcEnd ] ] ])\n`copy()` copies the content of the list in the `dest` buffer, starting from `destStart` and containing the bytes within the range specified with `srcStart` to `srcEnd`. `destStart`, `start` and `end` are optional and will default to the beginning of the `dest` buffer, and the beginning and end of the list respectively.\n\n--------------------------------------------------------\n<a name=\"duplicate\"></a>\n### bl.duplicate()\n`duplicate()` performs a **shallow-copy** of the list. The internal Buffers remains the same, so if you change the underlying Buffers, the change will be reflected in both the original and the duplicate. This method is needed if you want to call `consume()` or `pipe()` and still keep the original list.Example:\n\n```js\nvar bl = new BufferListStream()\n\nbl.append('hello')\nbl.append(' world')\nbl.append('\\n')\n\nbl.duplicate().pipe(process.stdout, { end: false })\n\nconsole.log(bl.toString())\n```\n\n--------------------------------------------------------\n<a name=\"consume\"></a>\n### bl.consume(bytes)\n`consume()` will shift bytes *off the start of the list*. The number of bytes consumed don't need to line up with the sizes of the internal Buffers&mdash;initial offsets will be calculated accordingly in order to give you a consistent view of the data.\n\n--------------------------------------------------------\n<a name=\"toString\"></a>\n### bl.toString([encoding, [ start, [ end ]]])\n`toString()` will return a string representation of the buffer. The optional `start` and `end` arguments are passed on to `slice()`, while the `encoding` is passed on to `toString()` of the resulting Buffer. See the [Buffer#toString()](http://nodejs.org/docs/latest/api/buffer.html#buffer_buf_tostring_encoding_start_end) documentation for more information.\n\n--------------------------------------------------------\n<a name=\"readXX\"></a>\n### bl.readDoubleBE(), bl.readDoubleLE(), bl.readFloatBE(), bl.readFloatLE(), bl.readInt32BE(), bl.readInt32LE(), bl.readUInt32BE(), bl.readUInt32LE(), bl.readInt16BE(), bl.readInt16LE(), bl.readUInt16BE(), bl.readUInt16LE(), bl.readInt8(), bl.readUInt8()\n\nAll of the standard byte-reading methods of the `Buffer` interface are implemented and will operate across internal Buffer boundaries transparently.\n\nSee the <b><code>[Buffer](http://nodejs.org/docs/latest/api/buffer.html)</code></b> documentation for how these work.\n\n--------------------------------------------------------\n<a name=\"ctorStream\"></a>\n### new BufferListStream([ callback | Buffer | Buffer array | BufferList | BufferList array | String ])\n**BufferListStream** is a Node **[Duplex Stream](http://nodejs.org/docs/latest/api/stream.html#stream_class_stream_duplex)**, so it can be read from and written to like a standard Node stream. You can also `pipe()` to and from a **BufferListStream** instance.\n\nThe constructor takes an optional callback, if supplied, the callback will be called with an error argument followed by a reference to the **bl** instance, when `bl.end()` is called (i.e. from a piped stream). This is a convenient method of collecting the entire contents of a stream, particularly when the stream is *chunky*, such as a network stream.\n\nNormally, no arguments are required for the constructor, but you can initialise the list by passing in a single `Buffer` object or an array of `Buffer` object.\n\n`new` is not strictly required, if you don't instantiate a new object, it will be done automatically for you so you can create a new instance simply with:\n\n```js\nconst { BufferListStream } = require('bl')\nconst bl = BufferListStream()\n\n// equivalent to:\n\nconst { BufferListStream } = require('bl')\nconst bl = new BufferListStream()\n```\n\nN.B. For backwards compatibility reasons, `BufferListStream` is the **default** export when you `require('bl')`:\n\n```js\nconst { BufferListStream } = require('bl')\n// equivalent to:\nconst BufferListStream = require('bl')\n```\n\n--------------------------------------------------------\n\n## Contributors\n\n**bl** is brought to you by the following hackers:\n\n * [Rod Vagg](https://github.com/rvagg)\n * [Matteo Collina](https://github.com/mcollina)\n * [Jarett Cruger](https://github.com/jcrugzz)\n\n<a name=\"license\"></a>\n## License &amp; copyright\n\nCopyright (c) 2013-2019 bl contributors (listed above).\n\nbl is licensed under the MIT license. All rights not explicitly granted in the MIT license are reserved. See the included LICENSE.md file for more details.\n/test/convert.js\u0002a'use strict'\n\nconst tape = require('tape')\nconst { BufferList, BufferListStream } = require('../')\nconst { Buffer } = require('buffer')\n\ntape('convert from BufferList to BufferListStream', (t) => {\n  const data = Buffer.from(`TEST-${Date.now()}`)\n  const bl = new BufferList(data)\n  const bls = new BufferListStream(bl)\n  t.ok(bl.slice().equals(bls.slice()))\n  t.end()\n})\n\ntape('convert from BufferListStream to BufferList', (t) => {\n  const data = Buffer.from(`TEST-${Date.now()}`)\n  const bls = new BufferListStream(data)\n  const bl = new BufferList(bls)\n  t.ok(bl.slice().equals(bls.slice()))\n  t.end()\n})\n/package.json\u000b{\n  \"name\": \"bl\",\n  \"version\": \"5.1.0\",\n  \"description\": \"Buffer List: collect buffers and access with a standard readable Buffer interface, streamable too!\",\n  \"license\": \"MIT\",\n  \"main\": \"bl.js\",\n  \"scripts\": {\n    \"lint\": \"standard *.js test/*.js\",\n    \"test\": \"npm run lint && npm run test:types && node test/test.js | faucet\",\n    \"test:ci\": \"npm run lint && node test/test.js && npm run test:types\",\n    \"test:types\": \"tsc --allowJs --noEmit test/test.js\",\n    \"build\": \"true\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/rvagg/bl.git\"\n  },\n  \"homepage\": \"https://github.com/rvagg/bl\",\n  \"authors\": [\n    \"Rod Vagg <rod@vagg.org> (https://github.com/rvagg)\",\n    \"Matteo Collina <matteo.collina@gmail.com> (https://github.com/mcollina)\",\n    \"Jarett Cruger <jcrugzz@gmail.com> (https://github.com/jcrugzz)\"\n  ],\n  \"keywords\": [\n    \"buffer\",\n    \"buffers\",\n    \"stream\",\n    \"awesomesauce\"\n  ],\n  \"dependencies\": {\n    \"buffer\": \"^6.0.3\",\n    \"inherits\": \"^2.0.4\",\n    \"readable-stream\": \"^3.4.0\"\n  },\n  \"devDependencies\": {\n    \"@types/readable-stream\": \"^2.3.13\",\n    \"faucet\": \"~0.0.1\",\n    \"standard\": \"^17.0.0\",\n    \"tape\": \"^5.2.2\",\n    \"typescript\": \"~4.7.3\"\n  },\n  \"release\": {\n    \"branches\": [\n      \"master\"\n    ],\n    \"plugins\": [\n      [\n        \"@semantic-release/commit-analyzer\",\n        {\n          \"preset\": \"conventionalcommits\",\n          \"releaseRules\": [\n            {\n              \"breaking\": true,\n              \"release\": \"major\"\n            },\n            {\n              \"revert\": true,\n              \"release\": \"patch\"\n            },\n            {\n              \"type\": \"feat\",\n              \"release\": \"minor\"\n            },\n            {\n              \"type\": \"fix\",\n              \"release\": \"patch\"\n            },\n            {\n              \"type\": \"chore\",\n              \"release\": \"patch\"\n            },\n            {\n              \"type\": \"docs\",\n              \"release\": \"patch\"\n            },\n            {\n              \"type\": \"test\",\n              \"release\": \"patch\"\n            },\n            {\n              \"scope\": \"no-release\",\n              \"release\": false\n            }\n          ]\n        }\n      ],\n      [\n        \"@semantic-release/release-notes-generator\",\n        {\n          \"preset\": \"conventionalcommits\",\n          \"presetConfig\": {\n            \"types\": [\n              {\n                \"type\": \"feat\",\n                \"section\": \"Features\"\n              },\n              {\n                \"type\": \"fix\",\n                \"section\": \"Bug Fixes\"\n              },\n              {\n                \"type\": \"chore\",\n                \"section\": \"Trivial Changes\"\n              },\n              {\n                \"type\": \"docs\",\n                \"section\": \"Trivial Changes\"\n              },\n              {\n                \"type\": \"test\",\n                \"section\": \"Tests\"\n              }\n            ]\n          }\n        }\n      ],\n      \"@semantic-release/changelog\",\n      \"@semantic-release/npm\",\n      \"@semantic-release/github\",\n      \"@semantic-release/git\"\n    ]\n  }\n}\n/index.d.ts\n\nimport { Duplex } from \"readable-stream\";\nimport {\n  BufferList as BL,\n  BufferListConstructor,\n  BufferListAcceptedTypes,\n} from \"./BufferList\";\n\ntype BufferListStreamInit =\n  | ((err: Error, buffer: Buffer) => void)\n  | BufferListAcceptedTypes;\n\ninterface BufferListStreamConstructor {\n  new (initData?: BufferListStreamInit): BufferListStream;\n  (callback?: BufferListStreamInit): BufferListStream;\n\n  /**\n   * Determines if the passed object is a BufferList. It will return true\n   * if the passed object is an instance of BufferList or BufferListStream\n   * and false otherwise.\n   *\n   * N.B. this won't return true for BufferList or BufferListStream instances\n   * created by versions of this library before this static method was added.\n   *\n   * @param other\n   */\n\n  isBufferList(other: unknown): boolean;\n\n  /**\n   * Rexporting BufferList and BufferListStream to fix\n   * issue with require/commonjs import and \"export = \" below.\n   */\n\n  BufferList: BufferListConstructor;\n  BufferListStream: BufferListStreamConstructor;\n}\n\ninterface BufferListStream extends Duplex, BL {\n  prototype: BufferListStream & BL;\n}\n\n/**\n * BufferListStream is a Node Duplex Stream, so it can be read from\n * and written to like a standard Node stream. You can also pipe()\n * to and from a BufferListStream instance.\n *\n * The constructor takes an optional callback, if supplied, the\n * callback will be called with an error argument followed by a\n * reference to the bl instance, when bl.end() is called\n * (i.e. from a piped stream).\n *\n * This is a convenient method of collecting the entire contents of\n * a stream, particularly when the stream is chunky, such as a network\n * stream.\n *\n * Normally, no arguments are required for the constructor, but you can\n * initialise the list by passing in a single Buffer object or an array\n * of Buffer object.\n *\n * `new` is not strictly required, if you don't instantiate a new object,\n * it will be done automatically for you so you can create a new instance\n * simply with:\n *\n * ```js\n * const { BufferListStream } = require('bl');\n * const bl = BufferListStream();\n *\n * // equivalent to:\n *\n * const { BufferListStream } = require('bl');\n * const bl = new BufferListStream();\n * ```\n *\n * N.B. For backwards compatibility reasons, BufferListStream is the default\n * export when you `require('bl')`:\n *\n * ```js\n * const { BufferListStream } = require('bl')\n *\n * // equivalent to:\n *\n * const BufferListStream = require('bl')\n * ```\n */\n\ndeclare const BufferListStream: BufferListStreamConstructor;\n\nexport = BufferListStream;\n/test/indexOf.js;\u001a'use strict'\n\nconst tape = require('tape')\nconst BufferList = require('../')\nconst { Buffer } = require('buffer')\n\ntape('indexOf single byte needle', (t) => {\n  const bl = new BufferList(['abcdefg', 'abcdefg', '12345'])\n\n  t.equal(bl.indexOf('e'), 4)\n  t.equal(bl.indexOf('e', 5), 11)\n  t.equal(bl.indexOf('e', 12), -1)\n  t.equal(bl.indexOf('5'), 18)\n\n  t.end()\n})\n\ntape('indexOf multiple byte needle', (t) => {\n  const bl = new BufferList(['abcdefg', 'abcdefg'])\n\n  t.equal(bl.indexOf('ef'), 4)\n  t.equal(bl.indexOf('ef', 5), 11)\n\n  t.end()\n})\n\ntape('indexOf multiple byte needles across buffer boundaries', (t) => {\n  const bl = new BufferList(['abcdefg', 'abcdefg'])\n\n  t.equal(bl.indexOf('fgabc'), 5)\n\n  t.end()\n})\n\ntape('indexOf takes a Uint8Array search', (t) => {\n  const bl = new BufferList(['abcdefg', 'abcdefg'])\n  const search = new Uint8Array([102, 103, 97, 98, 99]) // fgabc\n\n  t.equal(bl.indexOf(search), 5)\n\n  t.end()\n})\n\ntape('indexOf takes a buffer list search', (t) => {\n  const bl = new BufferList(['abcdefg', 'abcdefg'])\n  const search = new BufferList('fgabc')\n\n  t.equal(bl.indexOf(search), 5)\n\n  t.end()\n})\n\ntape('indexOf a zero byte needle', (t) => {\n  const b = new BufferList('abcdef')\n  const bufEmpty = Buffer.from('')\n\n  t.equal(b.indexOf(''), 0)\n  t.equal(b.indexOf('', 1), 1)\n  t.equal(b.indexOf('', b.length + 1), b.length)\n  t.equal(b.indexOf('', Infinity), b.length)\n  t.equal(b.indexOf(bufEmpty), 0)\n  t.equal(b.indexOf(bufEmpty, 1), 1)\n  t.equal(b.indexOf(bufEmpty, b.length + 1), b.length)\n  t.equal(b.indexOf(bufEmpty, Infinity), b.length)\n\n  t.end()\n})\n\ntape('indexOf buffers smaller and larger than the needle', (t) => {\n  const bl = new BufferList(['abcdefg', 'a', 'bcdefg', 'a', 'bcfgab'])\n\n  t.equal(bl.indexOf('fgabc'), 5)\n  t.equal(bl.indexOf('fgabc', 6), 12)\n  t.equal(bl.indexOf('fgabc', 13), -1)\n\n  t.end()\n})\n\n// only present in node 6+\n;(process.version.substr(1).split('.')[0] >= 6) && tape('indexOf latin1 and binary encoding', (t) => {\n  const b = new BufferList('abcdef')\n\n  // test latin1 encoding\n  t.equal(\n    new BufferList(Buffer.from(b.toString('latin1'), 'latin1'))\n      .indexOf('d', 0, 'latin1'),\n    3\n  )\n  t.equal(\n    new BufferList(Buffer.from(b.toString('latin1'), 'latin1'))\n      .indexOf(Buffer.from('d', 'latin1'), 0, 'latin1'),\n    3\n  )\n  t.equal(\n    new BufferList(Buffer.from('aa\\u00e8aa', 'latin1'))\n      .indexOf('\\u00e8', 'latin1'),\n    2\n  )\n  t.equal(\n    new BufferList(Buffer.from('\\u00e8', 'latin1'))\n      .indexOf('\\u00e8', 'latin1'),\n    0\n  )\n  t.equal(\n    new BufferList(Buffer.from('\\u00e8', 'latin1'))\n      .indexOf(Buffer.from('\\u00e8', 'latin1'), 'latin1'),\n    0\n  )\n\n  // test binary encoding\n  t.equal(\n    new BufferList(Buffer.from(b.toString('binary'), 'binary'))\n      .indexOf('d', 0, 'binary'),\n    3\n  )\n  t.equal(\n    new BufferList(Buffer.from(b.toString('binary'), 'binary'))\n      .indexOf(Buffer.from('d', 'binary'), 0, 'binary'),\n    3\n  )\n  t.equal(\n    new BufferList(Buffer.from('aa\\u00e8aa', 'binary'))\n      .indexOf('\\u00e8', 'binary'),\n    2\n  )\n  t.equal(\n    new BufferList(Buffer.from('\\u00e8', 'binary'))\n      .indexOf('\\u00e8', 'binary'),\n    0\n  )\n  t.equal(\n    new BufferList(Buffer.from('\\u00e8', 'binary'))\n      .indexOf(Buffer.from('\\u00e8', 'binary'), 'binary'),\n    0\n  )\n\n  t.end()\n})\n\ntape('indexOf the entire nodejs10 buffer test suite', (t) => {\n  const b = new BufferList('abcdef')\n  const bufA = Buffer.from('a')\n  const bufBc = Buffer.from('bc')\n  const bufF = Buffer.from('f')\n  const bufZ = Buffer.from('z')\n\n  const stringComparison = 'abcdef'\n\n  t.equal(b.indexOf('a'), 0)\n  t.equal(b.indexOf('a', 1), -1)\n  t.equal(b.indexOf('a', -1), -1)\n  t.equal(b.indexOf('a', -4), -1)\n  t.equal(b.indexOf('a', -b.length), 0)\n  t.equal(b.indexOf('a', NaN), 0)\n  t.equal(b.indexOf('a', -Infinity), 0)\n  t.equal(b.indexOf('a', Infinity), -1)\n  t.equal(b.indexOf('bc'), 1)\n  t.equal(b.indexOf('bc', 2), -1)\n  t.equal(b.indexOf('bc', -1), -1)\n  t.equal(b.indexOf('bc', -3), -1)\n  t.equal(b.indexOf('bc', -5), 1)\n  t.equal(b.indexOf('bc', NaN), 1)\n  t.equal(b.indexOf('bc', -Infinity), 1)\n  t.equal(b.indexOf('bc', Infinity), -1)\n  t.equal(b.indexOf('f'), b.length - 1)\n  t.equal(b.indexOf('z'), -1)\n\n  // empty search tests\n  t.equal(b.indexOf(bufA), 0)\n  t.equal(b.indexOf(bufA, 1), -1)\n  t.equal(b.indexOf(bufA, -1), -1)\n  t.equal(b.indexOf(bufA, -4), -1)\n  t.equal(b.indexOf(bufA, -b.length), 0)\n  t.equal(b.indexOf(bufA, NaN), 0)\n  t.equal(b.indexOf(bufA, -Infinity), 0)\n  t.equal(b.indexOf(bufA, Infinity), -1)\n  t.equal(b.indexOf(bufBc), 1)\n  t.equal(b.indexOf(bufBc, 2), -1)\n  t.equal(b.indexOf(bufBc, -1), -1)\n  t.equal(b.indexOf(bufBc, -3), -1)\n  t.equal(b.indexOf(bufBc, -5), 1)\n  t.equal(b.indexOf(bufBc, NaN), 1)\n  t.equal(b.indexOf(bufBc, -Infinity), 1)\n  t.equal(b.indexOf(bufBc, Infinity), -1)\n  t.equal(b.indexOf(bufF), b.length - 1)\n  t.equal(b.indexOf(bufZ), -1)\n  t.equal(b.indexOf(0x61), 0)\n  t.equal(b.indexOf(0x61, 1), -1)\n  t.equal(b.indexOf(0x61, -1), -1)\n  t.equal(b.indexOf(0x61, -4), -1)\n  t.equal(b.indexOf(0x61, -b.length), 0)\n  t.equal(b.indexOf(0x61, NaN), 0)\n  t.equal(b.indexOf(0x61, -Infinity), 0)\n  t.equal(b.indexOf(0x61, Infinity), -1)\n  t.equal(b.indexOf(0x0), -1)\n\n  // test offsets\n  t.equal(b.indexOf('d', 2), 3)\n  t.equal(b.indexOf('f', 5), 5)\n  t.equal(b.indexOf('f', -1), 5)\n  t.equal(b.indexOf('f', 6), -1)\n\n  t.equal(b.indexOf(Buffer.from('d'), 2), 3)\n  t.equal(b.indexOf(Buffer.from('f'), 5), 5)\n  t.equal(b.indexOf(Buffer.from('f'), -1), 5)\n  t.equal(b.indexOf(Buffer.from('f'), 6), -1)\n\n  t.equal(Buffer.from('ff').indexOf(Buffer.from('f'), 1, 'ucs2'), -1)\n\n  // test invalid and uppercase encoding\n  t.equal(b.indexOf('b', 'utf8'), 1)\n  t.equal(b.indexOf('b', 'UTF8'), 1)\n  t.equal(b.indexOf('62', 'HEX'), 1)\n  t.throws(() => b.indexOf('bad', 'enc'), TypeError)\n\n  // test hex encoding\n  t.equal(\n    Buffer.from(b.toString('hex'), 'hex')\n      .indexOf('64', 0, 'hex'),\n    3\n  )\n  t.equal(\n    Buffer.from(b.toString('hex'), 'hex')\n      .indexOf(Buffer.from('64', 'hex'), 0, 'hex'),\n    3\n  )\n\n  // test base64 encoding\n  t.equal(\n    Buffer.from(b.toString('base64'), 'base64')\n      .indexOf('ZA==', 0, 'base64'),\n    3\n  )\n  t.equal(\n    Buffer.from(b.toString('base64'), 'base64')\n      .indexOf(Buffer.from('ZA==', 'base64'), 0, 'base64'),\n    3\n  )\n\n  // test ascii encoding\n  t.equal(\n    Buffer.from(b.toString('ascii'), 'ascii')\n      .indexOf('d', 0, 'ascii'),\n    3\n  )\n  t.equal(\n    Buffer.from(b.toString('ascii'), 'ascii')\n      .indexOf(Buffer.from('d', 'ascii'), 0, 'ascii'),\n    3\n  )\n\n  // test optional offset with passed encoding\n  t.equal(Buffer.from('aaaa0').indexOf('30', 'hex'), 4)\n  t.equal(Buffer.from('aaaa00a').indexOf('3030', 'hex'), 4)\n\n  {\n    // test usc2 encoding\n    const twoByteString = Buffer.from('\\u039a\\u0391\\u03a3\\u03a3\\u0395', 'ucs2')\n\n    t.equal(8, twoByteString.indexOf('\\u0395', 4, 'ucs2'))\n    t.equal(6, twoByteString.indexOf('\\u03a3', -4, 'ucs2'))\n    t.equal(4, twoByteString.indexOf('\\u03a3', -6, 'ucs2'))\n    t.equal(4, twoByteString.indexOf(\n      Buffer.from('\\u03a3', 'ucs2'), -6, 'ucs2'))\n    t.equal(-1, twoByteString.indexOf('\\u03a3', -2, 'ucs2'))\n  }\n\n  const mixedByteStringUcs2 =\n      Buffer.from('\\u039a\\u0391abc\\u03a3\\u03a3\\u0395', 'ucs2')\n\n  t.equal(6, mixedByteStringUcs2.indexOf('bc', 0, 'ucs2'))\n  t.equal(10, mixedByteStringUcs2.indexOf('\\u03a3', 0, 'ucs2'))\n  t.equal(-1, mixedByteStringUcs2.indexOf('\\u0396', 0, 'ucs2'))\n\n  t.equal(\n    6, mixedByteStringUcs2.indexOf(Buffer.from('bc', 'ucs2'), 0, 'ucs2'))\n  t.equal(\n    10, mixedByteStringUcs2.indexOf(Buffer.from('\\u03a3', 'ucs2'), 0, 'ucs2'))\n  t.equal(\n    -1, mixedByteStringUcs2.indexOf(Buffer.from('\\u0396', 'ucs2'), 0, 'ucs2'))\n\n  {\n    const twoByteString = Buffer.from('\\u039a\\u0391\\u03a3\\u03a3\\u0395', 'ucs2')\n\n    // Test single char pattern\n    t.equal(0, twoByteString.indexOf('\\u039a', 0, 'ucs2'))\n    let index = twoByteString.indexOf('\\u0391', 0, 'ucs2')\n    t.equal(2, index, `Alpha - at index ${index}`)\n    index = twoByteString.indexOf('\\u03a3', 0, 'ucs2')\n    t.equal(4, index, `First Sigma - at index ${index}`)\n    index = twoByteString.indexOf('\\u03a3', 6, 'ucs2')\n    t.equal(6, index, `Second Sigma - at index ${index}`)\n    index = twoByteString.indexOf('\\u0395', 0, 'ucs2')\n    t.equal(8, index, `Epsilon - at index ${index}`)\n    index = twoByteString.indexOf('\\u0392', 0, 'ucs2')\n    t.equal(-1, index, `Not beta - at index ${index}`)\n\n    // Test multi-char pattern\n    index = twoByteString.indexOf('\\u039a\\u0391', 0, 'ucs2')\n    t.equal(0, index, `Lambda Alpha - at index ${index}`)\n    index = twoByteString.indexOf('\\u0391\\u03a3', 0, 'ucs2')\n    t.equal(2, index, `Alpha Sigma - at index ${index}`)\n    index = twoByteString.indexOf('\\u03a3\\u03a3', 0, 'ucs2')\n    t.equal(4, index, `Sigma Sigma - at index ${index}`)\n    index = twoByteString.indexOf('\\u03a3\\u0395', 0, 'ucs2')\n    t.equal(6, index, `Sigma Epsilon - at index ${index}`)\n  }\n\n  const mixedByteStringUtf8 = Buffer.from('\\u039a\\u0391abc\\u03a3\\u03a3\\u0395')\n\n  t.equal(5, mixedByteStringUtf8.indexOf('bc'))\n  t.equal(5, mixedByteStringUtf8.indexOf('bc', 5))\n  t.equal(5, mixedByteStringUtf8.indexOf('bc', -8))\n  t.equal(7, mixedByteStringUtf8.indexOf('\\u03a3'))\n  t.equal(-1, mixedByteStringUtf8.indexOf('\\u0396'))\n\n  // Test complex string indexOf algorithms. Only trigger for long strings.\n  // Long string that isn't a simple repeat of a shorter string.\n  let longString = 'A'\n  for (let i = 66; i < 76; i++) { // from 'B' to 'K'\n    longString = longString + String.fromCharCode(i) + longString\n  }\n\n  const longBufferString = Buffer.from(longString)\n\n  // pattern of 15 chars, repeated every 16 chars in long\n  let pattern = 'ABACABADABACABA'\n  for (let i = 0; i < longBufferString.length - pattern.length; i += 7) {\n    const index = longBufferString.indexOf(pattern, i)\n    t.equal((i + 15) & ~0xf, index,\n      `Long ABACABA...-string at index ${i}`)\n  }\n\n  let index = longBufferString.indexOf('AJABACA')\n  t.equal(510, index, `Long AJABACA, First J - at index ${index}`)\n  index = longBufferString.indexOf('AJABACA', 511)\n  t.equal(1534, index, `Long AJABACA, Second J - at index ${index}`)\n\n  pattern = 'JABACABADABACABA'\n  index = longBufferString.indexOf(pattern)\n  t.equal(511, index, `Long JABACABA..., First J - at index ${index}`)\n  index = longBufferString.indexOf(pattern, 512)\n  t.equal(\n    1535, index, `Long JABACABA..., Second J - at index ${index}`)\n\n  // Search for a non-ASCII string in a pure ASCII string.\n  const asciiString = Buffer.from(\n    'somethingnotatallsinisterwhichalsoworks')\n  t.equal(-1, asciiString.indexOf('\\x2061'))\n  t.equal(3, asciiString.indexOf('eth', 0))\n\n  // Search in string containing many non-ASCII chars.\n  const allCodePoints = []\n  for (let i = 0; i < 65536; i++) {\n    allCodePoints[i] = i\n  }\n\n  const allCharsString = String.fromCharCode.apply(String, allCodePoints)\n  const allCharsBufferUtf8 = Buffer.from(allCharsString)\n  const allCharsBufferUcs2 = Buffer.from(allCharsString, 'ucs2')\n\n  // Search for string long enough to trigger complex search with ASCII pattern\n  // and UC16 subject.\n  t.equal(-1, allCharsBufferUtf8.indexOf('notfound'))\n  t.equal(-1, allCharsBufferUcs2.indexOf('notfound'))\n\n  // Needle is longer than haystack, but only because it's encoded as UTF-16\n  t.equal(Buffer.from('aaaa').indexOf('a'.repeat(4), 'ucs2'), -1)\n\n  t.equal(Buffer.from('aaaa').indexOf('a'.repeat(4), 'utf8'), 0)\n  t.equal(Buffer.from('aaaa').indexOf('你好', 'ucs2'), -1)\n\n  // Haystack has odd length, but the needle is UCS2.\n  t.equal(Buffer.from('aaaaa').indexOf('b', 'ucs2'), -1)\n\n  {\n    // Find substrings in Utf8.\n    const lengths = [1, 3, 15] // Single char, simple and complex.\n    const indices = [0x5, 0x60, 0x400, 0x680, 0x7ee, 0xFF02, 0x16610, 0x2f77b]\n    for (let lengthIndex = 0; lengthIndex < lengths.length; lengthIndex++) {\n      for (let i = 0; i < indices.length; i++) {\n        const index = indices[i]\n        let length = lengths[lengthIndex]\n\n        if (index + length > 0x7F) {\n          length = 2 * length\n        }\n\n        if (index + length > 0x7FF) {\n          length = 3 * length\n        }\n\n        if (index + length > 0xFFFF) {\n          length = 4 * length\n        }\n\n        const patternBufferUtf8 = allCharsBufferUtf8.slice(index, index + length)\n        t.equal(index, allCharsBufferUtf8.indexOf(patternBufferUtf8))\n\n        const patternStringUtf8 = patternBufferUtf8.toString()\n        t.equal(index, allCharsBufferUtf8.indexOf(patternStringUtf8))\n      }\n    }\n  }\n\n  {\n    // Find substrings in Usc2.\n    const lengths = [2, 4, 16] // Single char, simple and complex.\n    const indices = [0x5, 0x65, 0x105, 0x205, 0x285, 0x2005, 0x2085, 0xfff0]\n\n    for (let lengthIndex = 0; lengthIndex < lengths.length; lengthIndex++) {\n      for (let i = 0; i < indices.length; i++) {\n        const index = indices[i] * 2\n        const length = lengths[lengthIndex]\n\n        const patternBufferUcs2 =\n            allCharsBufferUcs2.slice(index, index + length)\n        t.equal(\n          index, allCharsBufferUcs2.indexOf(patternBufferUcs2, 0, 'ucs2'))\n\n        const patternStringUcs2 = patternBufferUcs2.toString('ucs2')\n        t.equal(\n          index, allCharsBufferUcs2.indexOf(patternStringUcs2, 0, 'ucs2'))\n      }\n    }\n  }\n\n  [\n    () => {},\n    {},\n    []\n  ].forEach((val) => {\n    t.throws(() => b.indexOf(val), TypeError, `\"${JSON.stringify(val)}\" should throw`)\n  })\n\n  // Test weird offset arguments.\n  // The following offsets coerce to NaN or 0, searching the whole Buffer\n  t.equal(b.indexOf('b', undefined), 1)\n  t.equal(b.indexOf('b', {}), 1)\n  t.equal(b.indexOf('b', 0), 1)\n  t.equal(b.indexOf('b', null), 1)\n  t.equal(b.indexOf('b', []), 1)\n\n  // The following offset coerces to 2, in other words +[2] === 2\n  t.equal(b.indexOf('b', [2]), -1)\n\n  // Behavior should match String.indexOf()\n  t.equal(\n    b.indexOf('b', undefined),\n    stringComparison.indexOf('b', undefined))\n  t.equal(\n    b.indexOf('b', {}),\n    stringComparison.indexOf('b', {}))\n  t.equal(\n    b.indexOf('b', 0),\n    stringComparison.indexOf('b', 0))\n  t.equal(\n    b.indexOf('b', null),\n    stringComparison.indexOf('b', null))\n  t.equal(\n    b.indexOf('b', []),\n    stringComparison.indexOf('b', []))\n  t.equal(\n    b.indexOf('b', [2]),\n    stringComparison.indexOf('b', [2]))\n\n  // test truncation of Number arguments to uint8\n  {\n    const buf = Buffer.from('this is a test')\n\n    t.equal(buf.indexOf(0x6973), 3)\n    t.equal(buf.indexOf(0x697320), 4)\n    t.equal(buf.indexOf(0x69732069), 2)\n    t.equal(buf.indexOf(0x697374657374), 0)\n    t.equal(buf.indexOf(0x69737374), 0)\n    t.equal(buf.indexOf(0x69737465), 11)\n    t.equal(buf.indexOf(0x69737465), 11)\n    t.equal(buf.indexOf(-140), 0)\n    t.equal(buf.indexOf(-152), 1)\n    t.equal(buf.indexOf(0xff), -1)\n    t.equal(buf.indexOf(0xffff), -1)\n  }\n\n  // Test that Uint8Array arguments are okay.\n  {\n    const needle = new Uint8Array([0x66, 0x6f, 0x6f])\n    const haystack = new BufferList(Buffer.from('a foo b foo'))\n    t.equal(haystack.indexOf(needle), 2)\n  }\n\n  t.end()\n})\n/test/isBufferList.js\u00024'use strict'\n\nconst tape = require('tape')\nconst { BufferList, BufferListStream } = require('../')\nconst { Buffer } = require('buffer')\n\ntape('isBufferList positives', (t) => {\n  t.ok(BufferList.isBufferList(new BufferList()))\n  t.ok(BufferList.isBufferList(new BufferListStream()))\n\n  t.end()\n})\n\ntape('isBufferList negatives', (t) => {\n  const types = [\n    null,\n    undefined,\n    NaN,\n    true,\n    false,\n    {},\n    [],\n    Buffer.alloc(0),\n    [Buffer.alloc(0)]\n  ]\n\n  for (const obj of types) {\n    t.notOk(BufferList.isBufferList(obj))\n  }\n\n  t.end()\n})\n/BufferList.js%4'use strict'\n\nconst { Buffer } = require('buffer')\nconst symbol = Symbol.for('BufferList')\n\nfunction BufferList (buf) {\n  if (!(this instanceof BufferList)) {\n    return new BufferList(buf)\n  }\n\n  BufferList._init.call(this, buf)\n}\n\nBufferList._init = function _init (buf) {\n  Object.defineProperty(this, symbol, { value: true })\n\n  this._bufs = []\n  this.length = 0\n\n  if (buf) {\n    this.append(buf)\n  }\n}\n\nBufferList.prototype._new = function _new (buf) {\n  return new BufferList(buf)\n}\n\nBufferList.prototype._offset = function _offset (offset) {\n  if (offset === 0) {\n    return [0, 0]\n  }\n\n  let tot = 0\n\n  for (let i = 0; i < this._bufs.length; i++) {\n    const _t = tot + this._bufs[i].length\n    if (offset < _t || i === this._bufs.length - 1) {\n      return [i, offset - tot]\n    }\n    tot = _t\n  }\n}\n\nBufferList.prototype._reverseOffset = function (blOffset) {\n  const bufferId = blOffset[0]\n  let offset = blOffset[1]\n\n  for (let i = 0; i < bufferId; i++) {\n    offset += this._bufs[i].length\n  }\n\n  return offset\n}\n\nBufferList.prototype.get = function get (index) {\n  if (index > this.length || index < 0) {\n    return undefined\n  }\n\n  const offset = this._offset(index)\n\n  return this._bufs[offset[0]][offset[1]]\n}\n\nBufferList.prototype.slice = function slice (start, end) {\n  if (typeof start === 'number' && start < 0) {\n    start += this.length\n  }\n\n  if (typeof end === 'number' && end < 0) {\n    end += this.length\n  }\n\n  return this.copy(null, 0, start, end)\n}\n\nBufferList.prototype.copy = function copy (dst, dstStart, srcStart, srcEnd) {\n  if (typeof srcStart !== 'number' || srcStart < 0) {\n    srcStart = 0\n  }\n\n  if (typeof srcEnd !== 'number' || srcEnd > this.length) {\n    srcEnd = this.length\n  }\n\n  if (srcStart >= this.length) {\n    return dst || Buffer.alloc(0)\n  }\n\n  if (srcEnd <= 0) {\n    return dst || Buffer.alloc(0)\n  }\n\n  const copy = !!dst\n  const off = this._offset(srcStart)\n  const len = srcEnd - srcStart\n  let bytes = len\n  let bufoff = (copy && dstStart) || 0\n  let start = off[1]\n\n  // copy/slice everything\n  if (srcStart === 0 && srcEnd === this.length) {\n    if (!copy) {\n      // slice, but full concat if multiple buffers\n      return this._bufs.length === 1\n        ? this._bufs[0]\n        : Buffer.concat(this._bufs, this.length)\n    }\n\n    // copy, need to copy individual buffers\n    for (let i = 0; i < this._bufs.length; i++) {\n      this._bufs[i].copy(dst, bufoff)\n      bufoff += this._bufs[i].length\n    }\n\n    return dst\n  }\n\n  // easy, cheap case where it's a subset of one of the buffers\n  if (bytes <= this._bufs[off[0]].length - start) {\n    return copy\n      ? this._bufs[off[0]].copy(dst, dstStart, start, start + bytes)\n      : this._bufs[off[0]].slice(start, start + bytes)\n  }\n\n  if (!copy) {\n    // a slice, we need something to copy in to\n    dst = Buffer.allocUnsafe(len)\n  }\n\n  for (let i = off[0]; i < this._bufs.length; i++) {\n    const l = this._bufs[i].length - start\n\n    if (bytes > l) {\n      this._bufs[i].copy(dst, bufoff, start)\n      bufoff += l\n    } else {\n      this._bufs[i].copy(dst, bufoff, start, start + bytes)\n      bufoff += l\n      break\n    }\n\n    bytes -= l\n\n    if (start) {\n      start = 0\n    }\n  }\n\n  // safeguard so that we don't return uninitialized memory\n  if (dst.length > bufoff) return dst.slice(0, bufoff)\n\n  return dst\n}\n\nBufferList.prototype.shallowSlice = function shallowSlice (start, end) {\n  start = start || 0\n  end = typeof end !== 'number' ? this.length : end\n\n  if (start < 0) {\n    start += this.length\n  }\n\n  if (end < 0) {\n    end += this.length\n  }\n\n  if (start === end) {\n    return this._new()\n  }\n\n  const startOffset = this._offset(start)\n  const endOffset = this._offset(end)\n  const buffers = this._bufs.slice(startOffset[0], endOffset[0] + 1)\n\n  if (endOffset[1] === 0) {\n    buffers.pop()\n  } else {\n    buffers[buffers.length - 1] = buffers[buffers.length - 1].slice(0, endOffset[1])\n  }\n\n  if (startOffset[1] !== 0) {\n    buffers[0] = buffers[0].slice(startOffset[1])\n  }\n\n  return this._new(buffers)\n}\n\nBufferList.prototype.toString = function toString (encoding, start, end) {\n  return this.slice(start, end).toString(encoding)\n}\n\nBufferList.prototype.consume = function consume (bytes) {\n  // first, normalize the argument, in accordance with how Buffer does it\n  bytes = Math.trunc(bytes)\n  // do nothing if not a positive number\n  if (Number.isNaN(bytes) || bytes <= 0) return this\n\n  while (this._bufs.length) {\n    if (bytes >= this._bufs[0].length) {\n      bytes -= this._bufs[0].length\n      this.length -= this._bufs[0].length\n      this._bufs.shift()\n    } else {\n      this._bufs[0] = this._bufs[0].slice(bytes)\n      this.length -= bytes\n      break\n    }\n  }\n\n  return this\n}\n\nBufferList.prototype.duplicate = function duplicate () {\n  const copy = this._new()\n\n  for (let i = 0; i < this._bufs.length; i++) {\n    copy.append(this._bufs[i])\n  }\n\n  return copy\n}\n\nBufferList.prototype.append = function append (buf) {\n  if (buf == null) {\n    return this\n  }\n\n  if (buf.buffer) {\n    // append a view of the underlying ArrayBuffer\n    this._appendBuffer(Buffer.from(buf.buffer, buf.byteOffset, buf.byteLength))\n  } else if (Array.isArray(buf)) {\n    for (let i = 0; i < buf.length; i++) {\n      this.append(buf[i])\n    }\n  } else if (this._isBufferList(buf)) {\n    // unwrap argument into individual BufferLists\n    for (let i = 0; i < buf._bufs.length; i++) {\n      this.append(buf._bufs[i])\n    }\n  } else {\n    // coerce number arguments to strings, since Buffer(number) does\n    // uninitialized memory allocation\n    if (typeof buf === 'number') {\n      buf = buf.toString()\n    }\n\n    this._appendBuffer(Buffer.from(buf))\n  }\n\n  return this\n}\n\nBufferList.prototype._appendBuffer = function appendBuffer (buf) {\n  this._bufs.push(buf)\n  this.length += buf.length\n}\n\nBufferList.prototype.indexOf = function (search, offset, encoding) {\n  if (encoding === undefined && typeof offset === 'string') {\n    encoding = offset\n    offset = undefined\n  }\n\n  if (typeof search === 'function' || Array.isArray(search)) {\n    throw new TypeError('The \"value\" argument must be one of type string, Buffer, BufferList, or Uint8Array.')\n  } else if (typeof search === 'number') {\n    search = Buffer.from([search])\n  } else if (typeof search === 'string') {\n    search = Buffer.from(search, encoding)\n  } else if (this._isBufferList(search)) {\n    search = search.slice()\n  } else if (Array.isArray(search.buffer)) {\n    search = Buffer.from(search.buffer, search.byteOffset, search.byteLength)\n  } else if (!Buffer.isBuffer(search)) {\n    search = Buffer.from(search)\n  }\n\n  offset = Number(offset || 0)\n\n  if (isNaN(offset)) {\n    offset = 0\n  }\n\n  if (offset < 0) {\n    offset = this.length + offset\n  }\n\n  if (offset < 0) {\n    offset = 0\n  }\n\n  if (search.length === 0) {\n    return offset > this.length ? this.length : offset\n  }\n\n  const blOffset = this._offset(offset)\n  let blIndex = blOffset[0] // index of which internal buffer we're working on\n  let buffOffset = blOffset[1] // offset of the internal buffer we're working on\n\n  // scan over each buffer\n  for (; blIndex < this._bufs.length; blIndex++) {\n    const buff = this._bufs[blIndex]\n\n    while (buffOffset < buff.length) {\n      const availableWindow = buff.length - buffOffset\n\n      if (availableWindow >= search.length) {\n        const nativeSearchResult = buff.indexOf(search, buffOffset)\n\n        if (nativeSearchResult !== -1) {\n          return this._reverseOffset([blIndex, nativeSearchResult])\n        }\n\n        buffOffset = buff.length - search.length + 1 // end of native search window\n      } else {\n        const revOffset = this._reverseOffset([blIndex, buffOffset])\n\n        if (this._match(revOffset, search)) {\n          return revOffset\n        }\n\n        buffOffset++\n      }\n    }\n\n    buffOffset = 0\n  }\n\n  return -1\n}\n\nBufferList.prototype._match = function (offset, search) {\n  if (this.length - offset < search.length) {\n    return false\n  }\n\n  for (let searchOffset = 0; searchOffset < search.length; searchOffset++) {\n    if (this.get(offset + searchOffset) !== search[searchOffset]) {\n      return false\n    }\n  }\n  return true\n}\n\n;(function () {\n  const methods = {\n    readDoubleBE: 8,\n    readDoubleLE: 8,\n    readFloatBE: 4,\n    readFloatLE: 4,\n    readInt32BE: 4,\n    readInt32LE: 4,\n    readUInt32BE: 4,\n    readUInt32LE: 4,\n    readInt16BE: 2,\n    readInt16LE: 2,\n    readUInt16BE: 2,\n    readUInt16LE: 2,\n    readInt8: 1,\n    readUInt8: 1,\n    readIntBE: null,\n    readIntLE: null,\n    readUIntBE: null,\n    readUIntLE: null\n  }\n\n  for (const m in methods) {\n    (function (m) {\n      if (methods[m] === null) {\n        BufferList.prototype[m] = function (offset, byteLength) {\n          return this.slice(offset, offset + byteLength)[m](0, byteLength)\n        }\n      } else {\n        BufferList.prototype[m] = function (offset = 0) {\n          return this.slice(offset, offset + methods[m])[m](0)\n        }\n      }\n    }(m))\n  }\n}())\n\n// Used internally by the class and also as an indicator of this object being\n// a `BufferList`. It's not possible to use `instanceof BufferList` in a browser\n// environment because there could be multiple different copies of the\n// BufferList class and some `BufferList`s might be `BufferList`s.\nBufferList.prototype._isBufferList = function _isBufferList (b) {\n  return b instanceof BufferList || BufferList.isBufferList(b)\n}\n\nBufferList.isBufferList = function isBufferList (b) {\n  return b != null && b[symbol]\n}\n\nmodule.exports = BufferList\n/CHANGELOG.md\u0002## [5.1.0](https://github.com/rvagg/bl/compare/v5.0.0...v5.1.0) (2022-10-18)\n\n\n### Features\n\n* added integrated TypeScript typings ([#108](https://github.com/rvagg/bl/issues/108)) ([433ff89](https://github.com/rvagg/bl/commit/433ff8942f47fab8a5c9d13b2c00989ccf8d0710))\n\n\n### Bug Fixes\n\n* windows support in tests ([387dfaf](https://github.com/rvagg/bl/commit/387dfaf9b2bca7849f12785436ceb01e42adac2c))\n\n\n### Trivial Changes\n\n* GH Actions, Dependabot, auto-release, remove Travis ([997f058](https://github.com/rvagg/bl/commit/997f058357de8f2a7f66998e80a72b491835573f))\n* **no-release:** bump standard from 16.0.4 to 17.0.0 ([#112](https://github.com/rvagg/bl/issues/112)) ([078bfe3](https://github.com/rvagg/bl/commit/078bfe33390d125297b1c946e5989c4aa9228961))\n/test/test.jsY// @ts-check\n'use strict'\n\nconst tape = require('tape')\nconst crypto = require('crypto')\nconst fs = require('fs')\nconst path = require('path')\nconst os = require('os')\nconst BufferListStream = require('../')\nconst { Buffer } = require('buffer')\n\n/**\n * This typedef allows us to add _bufs to the API without declaring it publicly on types.\n * @typedef { BufferListStream & { _bufs?: Buffer[] }} BufferListStreamWithPrivate\n */\n\n/**\n * Just for typechecking in js\n * @type { NodeJS.Process & { browser?: boolean }}\n */\n\nconst process = globalThis.process\n\n/** @type {BufferEncoding[]} */\nconst encodings = ['ascii', 'utf8', 'utf-8', 'hex', 'binary', 'base64']\n\nif (process.browser) {\n  encodings.push(\n    'ucs2',\n    'ucs-2',\n    'utf16le',\n    /**\n     * This alias is not in typescript typings for BufferEncoding. Still have to fix\n     * @see https://nodejs.org/api/buffer.html#buffers-and-character-encodings\n     */\n    // @ts-ignore\n    'utf-16le'\n  )\n}\n\nrequire('./indexOf')\nrequire('./isBufferList')\nrequire('./convert')\n\ntape('single bytes from single buffer', function (t) {\n  const bl = new BufferListStream()\n\n  bl.append(Buffer.from('abcd'))\n\n  t.equal(bl.length, 4)\n  t.equal(bl.get(-1), undefined)\n  t.equal(bl.get(0), 97)\n  t.equal(bl.get(1), 98)\n  t.equal(bl.get(2), 99)\n  t.equal(bl.get(3), 100)\n  t.equal(bl.get(4), undefined)\n\n  t.end()\n})\n\ntape('single bytes from multiple buffers', function (t) {\n  const bl = new BufferListStream()\n\n  bl.append(Buffer.from('abcd'))\n  bl.append(Buffer.from('efg'))\n  bl.append(Buffer.from('hi'))\n  bl.append(Buffer.from('j'))\n\n  t.equal(bl.length, 10)\n\n  t.equal(bl.get(0), 97)\n  t.equal(bl.get(1), 98)\n  t.equal(bl.get(2), 99)\n  t.equal(bl.get(3), 100)\n  t.equal(bl.get(4), 101)\n  t.equal(bl.get(5), 102)\n  t.equal(bl.get(6), 103)\n  t.equal(bl.get(7), 104)\n  t.equal(bl.get(8), 105)\n  t.equal(bl.get(9), 106)\n\n  t.end()\n})\n\ntape('multi bytes from single buffer', function (t) {\n  const bl = new BufferListStream()\n\n  bl.append(Buffer.from('abcd'))\n\n  t.equal(bl.length, 4)\n\n  t.equal(bl.slice(0, 4).toString('ascii'), 'abcd')\n  t.equal(bl.slice(0, 3).toString('ascii'), 'abc')\n  t.equal(bl.slice(1, 4).toString('ascii'), 'bcd')\n  t.equal(bl.slice(-4, -1).toString('ascii'), 'abc')\n\n  t.end()\n})\n\ntape('multi bytes from single buffer (negative indexes)', function (t) {\n  const bl = new BufferListStream()\n\n  bl.append(Buffer.from('buffer'))\n\n  t.equal(bl.length, 6)\n\n  t.equal(bl.slice(-6, -1).toString('ascii'), 'buffe')\n  t.equal(bl.slice(-6, -2).toString('ascii'), 'buff')\n  t.equal(bl.slice(-5, -2).toString('ascii'), 'uff')\n\n  t.end()\n})\n\ntape('multiple bytes from multiple buffers', function (t) {\n  const bl = new BufferListStream()\n\n  bl.append(Buffer.from('abcd'))\n  bl.append(Buffer.from('efg'))\n  bl.append(Buffer.from('hi'))\n  bl.append(Buffer.from('j'))\n\n  t.equal(bl.length, 10)\n\n  t.equal(bl.slice(0, 10).toString('ascii'), 'abcdefghij')\n  t.equal(bl.slice(3, 10).toString('ascii'), 'defghij')\n  t.equal(bl.slice(3, 6).toString('ascii'), 'def')\n  t.equal(bl.slice(3, 8).toString('ascii'), 'defgh')\n  t.equal(bl.slice(5, 10).toString('ascii'), 'fghij')\n  t.equal(bl.slice(-7, -4).toString('ascii'), 'def')\n\n  t.end()\n})\n\ntape('multiple bytes from multiple buffer lists', function (t) {\n  const bl = new BufferListStream()\n\n  bl.append(new BufferListStream([Buffer.from('abcd'), Buffer.from('efg')]))\n  bl.append(new BufferListStream([Buffer.from('hi'), Buffer.from('j')]))\n\n  t.equal(bl.length, 10)\n\n  t.equal(bl.slice(0, 10).toString('ascii'), 'abcdefghij')\n\n  t.equal(bl.slice(3, 10).toString('ascii'), 'defghij')\n  t.equal(bl.slice(3, 6).toString('ascii'), 'def')\n  t.equal(bl.slice(3, 8).toString('ascii'), 'defgh')\n  t.equal(bl.slice(5, 10).toString('ascii'), 'fghij')\n\n  t.end()\n})\n\n// same data as previous test, just using nested constructors\ntape('multiple bytes from crazy nested buffer lists', function (t) {\n  const bl = new BufferListStream()\n\n  bl.append(\n    new BufferListStream([\n      new BufferListStream([\n        new BufferListStream(Buffer.from('abc')),\n        Buffer.from('d'),\n        new BufferListStream(Buffer.from('efg'))\n      ]),\n      new BufferListStream([Buffer.from('hi')]),\n      new BufferListStream(Buffer.from('j'))\n    ])\n  )\n\n  t.equal(bl.length, 10)\n\n  t.equal(bl.slice(0, 10).toString('ascii'), 'abcdefghij')\n\n  t.equal(bl.slice(3, 10).toString('ascii'), 'defghij')\n  t.equal(bl.slice(3, 6).toString('ascii'), 'def')\n  t.equal(bl.slice(3, 8).toString('ascii'), 'defgh')\n  t.equal(bl.slice(5, 10).toString('ascii'), 'fghij')\n\n  t.end()\n})\n\ntape('append accepts arrays of Buffers', function (t) {\n  const bl = new BufferListStream()\n\n  bl.append(Buffer.from('abc'))\n  bl.append([Buffer.from('def')])\n  bl.append([Buffer.from('ghi'), Buffer.from('jkl')])\n  bl.append([Buffer.from('mnop'), Buffer.from('qrstu'), Buffer.from('vwxyz')])\n  t.equal(bl.length, 26)\n  t.equal(bl.slice().toString('ascii'), 'abcdefghijklmnopqrstuvwxyz')\n\n  t.end()\n})\n\ntape('append accepts arrays of Uint8Arrays', function (t) {\n  const bl = new BufferListStream()\n\n  bl.append(new Uint8Array([97, 98, 99]))\n  bl.append([Uint8Array.from([100, 101, 102])])\n  bl.append([new Uint8Array([103, 104, 105]), new Uint8Array([106, 107, 108])])\n  bl.append([new Uint8Array([109, 110, 111, 112]), new Uint8Array([113, 114, 115, 116, 117]), new Uint8Array([118, 119, 120, 121, 122])])\n  t.equal(bl.length, 26)\n  t.equal(bl.slice().toString('ascii'), 'abcdefghijklmnopqrstuvwxyz')\n\n  t.end()\n})\n\ntape('append accepts arrays of BufferLists', function (t) {\n  const bl = new BufferListStream()\n\n  bl.append(Buffer.from('abc'))\n  bl.append([new BufferListStream('def')])\n  bl.append(\n    new BufferListStream([Buffer.from('ghi'), new BufferListStream('jkl')])\n  )\n  bl.append([\n    Buffer.from('mnop'),\n    new BufferListStream([Buffer.from('qrstu'), Buffer.from('vwxyz')])\n  ])\n  t.equal(bl.length, 26)\n  t.equal(bl.slice().toString('ascii'), 'abcdefghijklmnopqrstuvwxyz')\n\n  t.end()\n})\n\ntape('append chainable', function (t) {\n  const bl = new BufferListStream()\n\n  t.ok(bl.append(Buffer.from('abcd')) === bl)\n  t.ok(bl.append([Buffer.from('abcd')]) === bl)\n  t.ok(bl.append(new BufferListStream(Buffer.from('abcd'))) === bl)\n  t.ok(bl.append([new BufferListStream(Buffer.from('abcd'))]) === bl)\n\n  t.end()\n})\n\ntape('append chainable (test results)', function (t) {\n  const bl = new BufferListStream('abc')\n    .append([new BufferListStream('def')])\n    .append(\n      new BufferListStream([Buffer.from('ghi'), new BufferListStream('jkl')])\n    )\n    .append([\n      Buffer.from('mnop'),\n      new BufferListStream([Buffer.from('qrstu'), Buffer.from('vwxyz')])\n    ])\n\n  t.equal(bl.length, 26)\n  t.equal(bl.slice().toString('ascii'), 'abcdefghijklmnopqrstuvwxyz')\n\n  t.end()\n})\n\ntape('consuming from multiple buffers', function (t) {\n  const bl = new BufferListStream()\n\n  bl.append(Buffer.from('abcd'))\n  bl.append(Buffer.from('efg'))\n  bl.append(Buffer.from('hi'))\n  bl.append(Buffer.from('j'))\n\n  t.equal(bl.length, 10)\n\n  t.equal(bl.slice(0, 10).toString('ascii'), 'abcdefghij')\n\n  bl.consume(3)\n  t.equal(bl.length, 7)\n  t.equal(bl.slice(0, 7).toString('ascii'), 'defghij')\n\n  bl.consume(2)\n  t.equal(bl.length, 5)\n  t.equal(bl.slice(0, 5).toString('ascii'), 'fghij')\n\n  bl.consume(1)\n  t.equal(bl.length, 4)\n  t.equal(bl.slice(0, 4).toString('ascii'), 'ghij')\n\n  bl.consume(1)\n  t.equal(bl.length, 3)\n  t.equal(bl.slice(0, 3).toString('ascii'), 'hij')\n\n  bl.consume(2)\n  t.equal(bl.length, 1)\n  t.equal(bl.slice(0, 1).toString('ascii'), 'j')\n\n  t.end()\n})\n\ntape('complete consumption', function (t) {\n  /** @type {BufferListStreamWithPrivate} */\n  const bl = new BufferListStream()\n\n  bl.append(Buffer.from('a'))\n  bl.append(Buffer.from('b'))\n\n  bl.consume(2)\n\n  t.equal(bl.length, 0)\n  t.equal(bl._bufs.length, 0)\n\n  t.end()\n})\n\ntape('test readUInt8 / readInt8', function (t) {\n  const buf1 = Buffer.alloc(1)\n  const buf2 = Buffer.alloc(3)\n  const buf3 = Buffer.alloc(3)\n  const bl = new BufferListStream()\n\n  buf1[0] = 0x1\n  buf2[1] = 0x3\n  buf2[2] = 0x4\n  buf3[0] = 0x23\n  buf3[1] = 0x42\n\n  bl.append(buf1)\n  bl.append(buf2)\n  bl.append(buf3)\n\n  t.equal(bl.readUInt8(), 0x1)\n  t.equal(bl.readUInt8(2), 0x3)\n  t.equal(bl.readInt8(2), 0x3)\n  t.equal(bl.readUInt8(3), 0x4)\n  t.equal(bl.readInt8(3), 0x4)\n  t.equal(bl.readUInt8(4), 0x23)\n  t.equal(bl.readInt8(4), 0x23)\n  t.equal(bl.readUInt8(5), 0x42)\n  t.equal(bl.readInt8(5), 0x42)\n\n  t.end()\n})\n\ntape('test readUInt16LE / readUInt16BE / readInt16LE / readInt16BE', function (t) {\n  const buf1 = Buffer.alloc(1)\n  const buf2 = Buffer.alloc(3)\n  const buf3 = Buffer.alloc(3)\n  const bl = new BufferListStream()\n\n  buf1[0] = 0x1\n  buf2[1] = 0x3\n  buf2[2] = 0x4\n  buf3[0] = 0x23\n  buf3[1] = 0x42\n\n  bl.append(buf1)\n  bl.append(buf2)\n  bl.append(buf3)\n\n  t.equal(bl.readUInt16BE(), 0x0100)\n  t.equal(bl.readUInt16LE(), 0x0001)\n  t.equal(bl.readUInt16BE(2), 0x0304)\n  t.equal(bl.readUInt16LE(2), 0x0403)\n  t.equal(bl.readInt16BE(2), 0x0304)\n  t.equal(bl.readInt16LE(2), 0x0403)\n  t.equal(bl.readUInt16BE(3), 0x0423)\n  t.equal(bl.readUInt16LE(3), 0x2304)\n  t.equal(bl.readInt16BE(3), 0x0423)\n  t.equal(bl.readInt16LE(3), 0x2304)\n  t.equal(bl.readUInt16BE(4), 0x2342)\n  t.equal(bl.readUInt16LE(4), 0x4223)\n  t.equal(bl.readInt16BE(4), 0x2342)\n  t.equal(bl.readInt16LE(4), 0x4223)\n\n  t.end()\n})\n\ntape('test readUInt32LE / readUInt32BE / readInt32LE / readInt32BE', function (t) {\n  const buf1 = Buffer.alloc(1)\n  const buf2 = Buffer.alloc(3)\n  const buf3 = Buffer.alloc(3)\n  const bl = new BufferListStream()\n\n  buf1[0] = 0x1\n  buf2[1] = 0x3\n  buf2[2] = 0x4\n  buf3[0] = 0x23\n  buf3[1] = 0x42\n\n  bl.append(buf1)\n  bl.append(buf2)\n  bl.append(buf3)\n\n  t.equal(bl.readUInt32BE(), 0x01000304)\n  t.equal(bl.readUInt32LE(), 0x04030001)\n  t.equal(bl.readUInt32BE(2), 0x03042342)\n  t.equal(bl.readUInt32LE(2), 0x42230403)\n  t.equal(bl.readInt32BE(2), 0x03042342)\n  t.equal(bl.readInt32LE(2), 0x42230403)\n\n  t.end()\n})\n\ntape('test readUIntLE / readUIntBE / readIntLE / readIntBE', function (t) {\n  const buf1 = Buffer.alloc(1)\n  const buf2 = Buffer.alloc(3)\n  const buf3 = Buffer.alloc(3)\n  const bl = new BufferListStream()\n\n  buf2[0] = 0x2\n  buf2[1] = 0x3\n  buf2[2] = 0x4\n  buf3[0] = 0x23\n  buf3[1] = 0x42\n  buf3[2] = 0x61\n\n  bl.append(buf1)\n  bl.append(buf2)\n  bl.append(buf3)\n\n  t.equal(bl.readUIntBE(1, 1), 0x02)\n  t.equal(bl.readUIntBE(1, 2), 0x0203)\n  t.equal(bl.readUIntBE(1, 3), 0x020304)\n  t.equal(bl.readUIntBE(1, 4), 0x02030423)\n  t.equal(bl.readUIntBE(1, 5), 0x0203042342)\n  t.equal(bl.readUIntBE(1, 6), 0x020304234261)\n  t.equal(bl.readUIntLE(1, 1), 0x02)\n  t.equal(bl.readUIntLE(1, 2), 0x0302)\n  t.equal(bl.readUIntLE(1, 3), 0x040302)\n  t.equal(bl.readUIntLE(1, 4), 0x23040302)\n  t.equal(bl.readUIntLE(1, 5), 0x4223040302)\n  t.equal(bl.readUIntLE(1, 6), 0x614223040302)\n  t.equal(bl.readIntBE(1, 1), 0x02)\n  t.equal(bl.readIntBE(1, 2), 0x0203)\n  t.equal(bl.readIntBE(1, 3), 0x020304)\n  t.equal(bl.readIntBE(1, 4), 0x02030423)\n  t.equal(bl.readIntBE(1, 5), 0x0203042342)\n  t.equal(bl.readIntBE(1, 6), 0x020304234261)\n  t.equal(bl.readIntLE(1, 1), 0x02)\n  t.equal(bl.readIntLE(1, 2), 0x0302)\n  t.equal(bl.readIntLE(1, 3), 0x040302)\n  t.equal(bl.readIntLE(1, 4), 0x23040302)\n  t.equal(bl.readIntLE(1, 5), 0x4223040302)\n  t.equal(bl.readIntLE(1, 6), 0x614223040302)\n\n  t.end()\n})\n\ntape('test readFloatLE / readFloatBE', function (t) {\n  const buf1 = Buffer.alloc(1)\n  const buf2 = Buffer.alloc(3)\n  const buf3 = Buffer.alloc(3)\n  const bl = new BufferListStream()\n\n  buf1[0] = 0x01\n  buf2[1] = 0x00\n  buf2[2] = 0x00\n  buf3[0] = 0x80\n  buf3[1] = 0x3f\n\n  bl.append(buf1)\n  bl.append(buf2)\n  bl.append(buf3)\n\n  const canonical = Buffer.concat([buf1, buf2, buf3])\n  t.equal(bl.readFloatLE(), canonical.readFloatLE())\n  t.equal(bl.readFloatBE(), canonical.readFloatBE())\n  t.equal(bl.readFloatLE(2), canonical.readFloatLE(2))\n  t.equal(bl.readFloatBE(2), canonical.readFloatBE(2))\n\n  t.end()\n})\n\ntape('test readDoubleLE / readDoubleBE', function (t) {\n  const buf1 = Buffer.alloc(1)\n  const buf2 = Buffer.alloc(3)\n  const buf3 = Buffer.alloc(10)\n  const bl = new BufferListStream()\n\n  buf1[0] = 0x01\n  buf2[1] = 0x55\n  buf2[2] = 0x55\n  buf3[0] = 0x55\n  buf3[1] = 0x55\n  buf3[2] = 0x55\n  buf3[3] = 0x55\n  buf3[4] = 0xd5\n  buf3[5] = 0x3f\n\n  bl.append(buf1)\n  bl.append(buf2)\n  bl.append(buf3)\n\n  const canonical = Buffer.concat([buf1, buf2, buf3])\n  t.equal(bl.readDoubleBE(), canonical.readDoubleBE())\n  t.equal(bl.readDoubleLE(), canonical.readDoubleLE())\n  t.equal(bl.readDoubleBE(2), canonical.readDoubleBE(2))\n  t.equal(bl.readDoubleLE(2), canonical.readDoubleLE(2))\n\n  t.end()\n})\n\ntape('test toString', function (t) {\n  const bl = new BufferListStream()\n\n  bl.append(Buffer.from('abcd'))\n  bl.append(Buffer.from('efg'))\n  bl.append(Buffer.from('hi'))\n  bl.append(Buffer.from('j'))\n\n  t.equal(bl.toString('ascii', 0, 10), 'abcdefghij')\n  t.equal(bl.toString('ascii', 3, 10), 'defghij')\n  t.equal(bl.toString('ascii', 3, 6), 'def')\n  t.equal(bl.toString('ascii', 3, 8), 'defgh')\n  t.equal(bl.toString('ascii', 5, 10), 'fghij')\n\n  t.end()\n})\n\ntape('test toString encoding', function (t) {\n  const bl = new BufferListStream()\n  const b = Buffer.from('abcdefghij\\xff\\x00')\n\n  bl.append(Buffer.from('abcd'))\n  bl.append(Buffer.from('efg'))\n  bl.append(Buffer.from('hi'))\n  bl.append(Buffer.from('j'))\n  bl.append(Buffer.from('\\xff\\x00'))\n\n  encodings.forEach(function (enc) {\n    t.equal(bl.toString(enc), b.toString(enc), enc)\n  })\n\n  t.end()\n})\n\ntape('uninitialized memory', function (t) {\n  const secret = crypto.randomBytes(256)\n  for (let i = 0; i < 1e6; i++) {\n    const clone = Buffer.from(secret)\n    const bl = new BufferListStream()\n    bl.append(Buffer.from('a'))\n    bl.consume(-1024)\n    const buf = bl.slice(1)\n    if (buf.indexOf(clone) !== -1) {\n      t.fail(`Match (at ${i})`)\n      break\n    }\n  }\n  t.end()\n})\n\n!process.browser && tape('test stream', function (t) {\n  const random = crypto.randomBytes(65534)\n\n  const bl = new BufferListStream((err, buf) => {\n    t.ok(Buffer.isBuffer(buf))\n    t.ok(err === null)\n    t.ok(random.equals(bl.slice()))\n    t.ok(random.equals(buf.slice()))\n\n    bl.pipe(fs.createWriteStream(path.join(os.tmpdir(), 'bl_test_rnd_out.dat')))\n      .on('close', function () {\n        const rndhash = crypto.createHash('md5').update(random).digest('hex')\n        const md5sum = crypto.createHash('md5')\n        const s = fs.createReadStream(path.join(os.tmpdir(), 'bl_test_rnd_out.dat'))\n\n        s.on('data', md5sum.update.bind(md5sum))\n        s.on('end', function () {\n          t.equal(rndhash, md5sum.digest('hex'), 'woohoo! correct hash!')\n          t.end()\n        })\n      })\n  })\n\n  fs.writeFileSync(path.join(os.tmpdir(), 'bl_test_rnd.dat'), random)\n  fs.createReadStream(path.join(os.tmpdir(), 'bl_test_rnd.dat')).pipe(bl)\n})\n\ntape('instantiation with Buffer', function (t) {\n  const buf = crypto.randomBytes(1024)\n  const buf2 = crypto.randomBytes(1024)\n  let b = BufferListStream(buf)\n\n  t.equal(buf.toString('hex'), b.slice().toString('hex'), 'same buffer')\n  b = BufferListStream([buf, buf2])\n  t.equal(b.slice().toString('hex'), Buffer.concat([buf, buf2]).toString('hex'), 'same buffer')\n\n  t.end()\n})\n\ntape('test String appendage', function (t) {\n  const bl = new BufferListStream()\n  const b = Buffer.from('abcdefghij\\xff\\x00')\n\n  bl.append('abcd')\n  bl.append('efg')\n  bl.append('hi')\n  bl.append('j')\n  bl.append('\\xff\\x00')\n\n  encodings.forEach(function (enc) {\n    t.equal(bl.toString(enc), b.toString(enc))\n  })\n\n  t.end()\n})\n\ntape('test Number appendage', function (t) {\n  const bl = new BufferListStream()\n  const b = Buffer.from('1234567890')\n\n  bl.append(1234)\n  bl.append(567)\n  bl.append(89)\n  bl.append(0)\n\n  encodings.forEach(function (enc) {\n    t.equal(bl.toString(enc), b.toString(enc))\n  })\n\n  t.end()\n})\n\ntape('write nothing, should get empty buffer', function (t) {\n  t.plan(3)\n  BufferListStream(function (err, data) {\n    t.notOk(err, 'no error')\n    t.ok(Buffer.isBuffer(data), 'got a buffer')\n    t.equal(0, data.length, 'got a zero-length buffer')\n    t.end()\n  }).end()\n})\n\ntape('unicode string', function (t) {\n  t.plan(2)\n\n  const inp1 = '\\u2600'\n  const inp2 = '\\u2603'\n  const exp = inp1 + ' and ' + inp2\n  const bl = BufferListStream()\n\n  bl.write(inp1)\n  bl.write(' and ')\n  bl.write(inp2)\n  t.equal(exp, bl.toString())\n  t.equal(Buffer.from(exp).toString('hex'), bl.toString('hex'))\n})\n\ntape('should emit finish', function (t) {\n  const source = BufferListStream()\n  const dest = BufferListStream()\n\n  source.write('hello')\n  source.pipe(dest)\n\n  dest.on('finish', function () {\n    t.equal(dest.toString('utf8'), 'hello')\n    t.end()\n  })\n})\n\ntape('basic copy', function (t) {\n  const buf = crypto.randomBytes(1024)\n  const buf2 = Buffer.alloc(1024)\n  const b = BufferListStream(buf)\n\n  b.copy(buf2)\n  t.equal(b.slice().toString('hex'), buf2.toString('hex'), 'same buffer')\n\n  t.end()\n})\n\ntape('copy after many appends', function (t) {\n  const buf = crypto.randomBytes(512)\n  const buf2 = Buffer.alloc(1024)\n  const b = BufferListStream(buf)\n\n  b.append(buf)\n  b.copy(buf2)\n  t.equal(b.slice().toString('hex'), buf2.toString('hex'), 'same buffer')\n\n  t.end()\n})\n\ntape('copy at a precise position', function (t) {\n  const buf = crypto.randomBytes(1004)\n  const buf2 = Buffer.alloc(1024)\n  const b = BufferListStream(buf)\n\n  b.copy(buf2, 20)\n  t.equal(b.slice().toString('hex'), buf2.slice(20).toString('hex'), 'same buffer')\n\n  t.end()\n})\n\ntape('copy starting from a precise location', function (t) {\n  const buf = crypto.randomBytes(10)\n  const buf2 = Buffer.alloc(5)\n  const b = BufferListStream(buf)\n\n  b.copy(buf2, 0, 5)\n  t.equal(b.slice(5).toString('hex'), buf2.toString('hex'), 'same buffer')\n\n  t.end()\n})\n\ntape('copy in an interval', function (t) {\n  const rnd = crypto.randomBytes(10)\n  const b = BufferListStream(rnd) // put the random bytes there\n  const actual = Buffer.alloc(3)\n  const expected = Buffer.alloc(3)\n\n  rnd.copy(expected, 0, 5, 8)\n  b.copy(actual, 0, 5, 8)\n\n  t.equal(actual.toString('hex'), expected.toString('hex'), 'same buffer')\n\n  t.end()\n})\n\ntape('copy an interval between two buffers', function (t) {\n  const buf = crypto.randomBytes(10)\n  const buf2 = Buffer.alloc(10)\n  const b = BufferListStream(buf)\n\n  b.append(buf)\n  b.copy(buf2, 0, 5, 15)\n\n  t.equal(b.slice(5, 15).toString('hex'), buf2.toString('hex'), 'same buffer')\n\n  t.end()\n})\n\ntape('shallow slice across buffer boundaries', function (t) {\n  const bl = new BufferListStream(['First', 'Second', 'Third'])\n\n  t.equal(bl.shallowSlice(3, 13).toString(), 'stSecondTh')\n\n  t.end()\n})\n\ntape('shallow slice within single buffer', function (t) {\n  t.plan(2)\n\n  const bl = new BufferListStream(['First', 'Second', 'Third'])\n\n  t.equal(bl.shallowSlice(5, 10).toString(), 'Secon')\n  t.equal(bl.shallowSlice(7, 10).toString(), 'con')\n\n  t.end()\n})\n\ntape('shallow slice single buffer', function (t) {\n  t.plan(3)\n\n  const bl = new BufferListStream(['First', 'Second', 'Third'])\n\n  t.equal(bl.shallowSlice(0, 5).toString(), 'First')\n  t.equal(bl.shallowSlice(5, 11).toString(), 'Second')\n  t.equal(bl.shallowSlice(11, 16).toString(), 'Third')\n})\n\ntape('shallow slice with negative or omitted indices', function (t) {\n  t.plan(4)\n\n  const bl = new BufferListStream(['First', 'Second', 'Third'])\n\n  t.equal(bl.shallowSlice().toString(), 'FirstSecondThird')\n  t.equal(bl.shallowSlice(5).toString(), 'SecondThird')\n  t.equal(bl.shallowSlice(5, -3).toString(), 'SecondTh')\n  t.equal(bl.shallowSlice(-8).toString(), 'ondThird')\n})\n\ntape('shallow slice does not make a copy', function (t) {\n  t.plan(1)\n\n  const buffers = [Buffer.from('First'), Buffer.from('Second'), Buffer.from('Third')]\n  const bl = new BufferListStream(buffers).shallowSlice(5, -3)\n\n  buffers[1].fill('h')\n  buffers[2].fill('h')\n\n  t.equal(bl.toString(), 'hhhhhhhh')\n})\n\ntape('shallow slice with 0 length', function (t) {\n  t.plan(1)\n\n  const buffers = [Buffer.from('First'), Buffer.from('Second'), Buffer.from('Third')]\n  const bl = (new BufferListStream(buffers)).shallowSlice(0, 0)\n\n  t.equal(bl.length, 0)\n})\n\ntape('shallow slice with 0 length from middle', function (t) {\n  t.plan(1)\n\n  const buffers = [Buffer.from('First'), Buffer.from('Second'), Buffer.from('Third')]\n  const bl = (new BufferListStream(buffers)).shallowSlice(10, 10)\n\n  t.equal(bl.length, 0)\n})\n\ntape('duplicate', function (t) {\n  t.plan(2)\n\n  const bl = new BufferListStream('abcdefghij\\xff\\x00')\n  const dup = bl.duplicate()\n\n  t.equal(bl.prototype, dup.prototype)\n  t.equal(bl.toString('hex'), dup.toString('hex'))\n})\n\ntape('destroy no pipe', function (t) {\n  t.plan(2)\n\n  /** @type {BufferListStreamWithPrivate} */\n  const bl = new BufferListStream('alsdkfja;lsdkfja;lsdk')\n\n  bl.destroy()\n\n  t.equal(bl._bufs.length, 0)\n  t.equal(bl.length, 0)\n})\n\ntape('destroy with error', function (t) {\n  t.plan(3)\n\n  /** @type {BufferListStreamWithPrivate} */\n  const bl = new BufferListStream('alsdkfja;lsdkfja;lsdk')\n  const err = new Error('kaboom')\n\n  bl.destroy(err)\n  bl.on('error', function (_err) {\n    t.equal(_err, err)\n  })\n\n  t.equal(bl._bufs.length, 0)\n  t.equal(bl.length, 0)\n})\n\n!process.browser && tape('destroy with pipe before read end', function (t) {\n  t.plan(2)\n\n  /** @type {BufferListStreamWithPrivate} */\n  const bl = new BufferListStream()\n  fs.createReadStream(path.join(__dirname, '/test.js'))\n    .pipe(bl)\n\n  bl.destroy()\n\n  t.equal(bl._bufs.length, 0)\n  t.equal(bl.length, 0)\n})\n\n!process.browser && tape('destroy with pipe before read end with race', function (t) {\n  t.plan(2)\n\n  /** @type {BufferListStreamWithPrivate} */\n  const bl = new BufferListStream()\n\n  fs.createReadStream(path.join(__dirname, '/test.js'))\n    .pipe(bl)\n\n  setTimeout(function () {\n    bl.destroy()\n    setTimeout(function () {\n      t.equal(bl._bufs.length, 0)\n      t.equal(bl.length, 0)\n    }, 500)\n  }, 500)\n})\n\n!process.browser && tape('destroy with pipe after read end', function (t) {\n  t.plan(2)\n\n  /** @type {BufferListStreamWithPrivate} */\n  const bl = new BufferListStream()\n  fs.createReadStream(path.join(__dirname, '/test.js'))\n    .on('end', onEnd)\n    .pipe(bl)\n\n  function onEnd () {\n    bl.destroy()\n\n    t.equal(bl._bufs.length, 0)\n    t.equal(bl.length, 0)\n  }\n})\n\n!process.browser && tape('destroy with pipe while writing to a destination', function (t) {\n  t.plan(4)\n\n  /** @type {BufferListStreamWithPrivate} */\n  const bl = new BufferListStream()\n  const ds = new BufferListStream()\n\n  fs.createReadStream(path.join(__dirname, '/test.js'))\n    .on('end', onEnd)\n    .pipe(bl)\n\n  function onEnd () {\n    bl.pipe(ds)\n\n    setTimeout(function () {\n      bl.destroy()\n\n      t.equals(bl._bufs.length, 0)\n      t.equals(bl.length, 0)\n\n      ds.destroy()\n\n      t.equals(bl._bufs.length, 0)\n      t.equals(bl.length, 0)\n    }, 100)\n  }\n})\n\n!process.browser && tape('handle error', function (t) {\n  t.plan(2)\n\n  fs.createReadStream('/does/not/exist').pipe(BufferListStream(function (err, data) {\n    t.ok(err instanceof Error, 'has error')\n    t.notOk(data, 'no data')\n  }))\n})\n'/.github/workflows/test-and-release.yml\u0007\u0010name: Test & Maybe Release\non: [push, pull_request]\njobs:\n  test:\n    strategy:\n      fail-fast: false\n      matrix:\n        node: [14.x, 16.x, 18.x, lts/*, current]\n        os: [macos-latest, ubuntu-latest, windows-latest]\n    runs-on: ${{ matrix.os }}\n    steps:\n      - name: Checkout Repository\n        uses: actions/checkout@v3\n      - name: Use Node.js ${{ matrix.node }}\n        uses: actions/setup-node@v3.5.1\n        with:\n          node-version: ${{ matrix.node }}\n      - name: Install Dependencies\n        run: |\n          npm install --no-progress\n      - name: Run tests\n        run: |\n          npm config set script-shell bash\n          npm run test:ci\n  release:\n    name: Release\n    needs: test\n    runs-on: ubuntu-latest\n    if: github.event_name == 'push' && github.ref == 'refs/heads/master'\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v3\n        with:\n          fetch-depth: 0\n      - name: Setup Node.js\n        uses: actions/setup-node@v3.5.1\n        with:\n          node-version: 14\n      - name: Install dependencies\n        run: |\n          npm install --no-progress --no-package-lock --no-save\n      - name: Build\n        run: |\n          npm run build\n      - name: Install plugins\n        run: |\n          npm install \\\n            @semantic-release/commit-analyzer \\\n            conventional-changelog-conventionalcommits \\\n            @semantic-release/release-notes-generator \\\n            @semantic-release/npm \\\n            @semantic-release/github \\\n            @semantic-release/git \\\n            @semantic-release/changelog \\\n            --no-progress --no-package-lock --no-save\n      - name: Release\n        env:\n          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n          NPM_TOKEN: ${{ secrets.NPM_TOKEN }}\n        run: npx semantic-release\n\n/bl.js\u0007'use strict'\n\nconst DuplexStream = require('readable-stream').Duplex\nconst inherits = require('inherits')\nconst BufferList = require('./BufferList')\n\nfunction BufferListStream (callback) {\n  if (!(this instanceof BufferListStream)) {\n    return new BufferListStream(callback)\n  }\n\n  if (typeof callback === 'function') {\n    this._callback = callback\n\n    const piper = function piper (err) {\n      if (this._callback) {\n        this._callback(err)\n        this._callback = null\n      }\n    }.bind(this)\n\n    this.on('pipe', function onPipe (src) {\n      src.on('error', piper)\n    })\n    this.on('unpipe', function onUnpipe (src) {\n      src.removeListener('error', piper)\n    })\n\n    callback = null\n  }\n\n  BufferList._init.call(this, callback)\n  DuplexStream.call(this)\n}\n\ninherits(BufferListStream, DuplexStream)\nObject.assign(BufferListStream.prototype, BufferList.prototype)\n\nBufferListStream.prototype._new = function _new (callback) {\n  return new BufferListStream(callback)\n}\n\nBufferListStream.prototype._write = function _write (buf, encoding, callback) {\n  this._appendBuffer(buf)\n\n  if (typeof callback === 'function') {\n    callback()\n  }\n}\n\nBufferListStream.prototype._read = function _read (size) {\n  if (!this.length) {\n    return this.push(null)\n  }\n\n  size = Math.min(size, this.length)\n  this.push(this.slice(0, size))\n  this.consume(size)\n}\n\nBufferListStream.prototype.end = function end (chunk) {\n  DuplexStream.prototype.end.call(this, chunk)\n\n  if (this._callback) {\n    this._callback(null, this.slice())\n    this._callback = null\n  }\n}\n\nBufferListStream.prototype._destroy = function _destroy (err, cb) {\n  this._bufs.length = 0\n  this.length = 0\n  cb(err)\n}\n\nBufferListStream.prototype._isBufferList = function _isBufferList (b) {\n  return b instanceof BufferListStream || b instanceof BufferList || BufferListStream.isBufferList(b)\n}\n\nBufferListStream.isBufferList = BufferList.isBufferList\n\nmodule.exports = BufferListStream\nmodule.exports.BufferListStream = BufferListStream\nmodule.exports.BufferList = BufferList\n/.github/dependabot.yml\u0001Mversion: 2\nupdates:\n  - package-ecosystem: 'github-actions'\n    directory: '/'\n    schedule:\n      interval: 'daily'\n    commit-message:\n      prefix: 'chore'\n      include: 'scope'\n  - package-ecosystem: 'npm'\n    directory: '/'\n    schedule:\n      interval: 'daily'\n    commit-message:\n      prefix: 'chore'\n      include: 'scope'\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/YnJhY2UtZXhwYW5zaW9uQDEuMS45",
    "content": "/package.json\u0004X{\n  \"name\": \"brace-expansion\",\n  \"description\": \"Brace expansion as known from sh/bash\",\n  \"version\": \"1.1.9\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git://github.com/juliangruber/brace-expansion.git\"\n  },\n  \"homepage\": \"https://github.com/juliangruber/brace-expansion\",\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"test\": \"tape test/*.js\",\n    \"gentest\": \"bash test/generate.sh\",\n    \"bench\": \"matcha test/perf/bench.js\"\n  },\n  \"dependencies\": {\n    \"balanced-match\": \"^1.0.0\",\n    \"concat-map\": \"0.0.1\"\n  },\n  \"devDependencies\": {\n    \"matcha\": \"^0.7.0\",\n    \"tape\": \"^4.6.0\"\n  },\n  \"keywords\": [],\n  \"author\": {\n    \"name\": \"Julian Gruber\",\n    \"email\": \"mail@juliangruber.com\",\n    \"url\": \"http://juliangruber.com\"\n  },\n  \"license\": \"MIT\",\n  \"testling\": {\n    \"files\": \"test/*.js\",\n    \"browsers\": [\n      \"ie/8..latest\",\n      \"firefox/20..latest\",\n      \"firefox/nightly\",\n      \"chrome/25..latest\",\n      \"chrome/canary\",\n      \"opera/12..latest\",\n      \"opera/next\",\n      \"safari/5.1..latest\",\n      \"ipad/6.0..latest\",\n      \"iphone/6.0..latest\",\n      \"android-browser/4.2..latest\"\n    ]\n  }\n}\n/README.md\u000f{# brace-expansion\n\n[Brace expansion](https://www.gnu.org/software/bash/manual/html_node/Brace-Expansion.html), \nas known from sh/bash, in JavaScript.\n\n[![build status](https://secure.travis-ci.org/juliangruber/brace-expansion.svg)](http://travis-ci.org/juliangruber/brace-expansion)\n[![downloads](https://img.shields.io/npm/dm/brace-expansion.svg)](https://www.npmjs.org/package/brace-expansion)\n[![Greenkeeper badge](https://badges.greenkeeper.io/juliangruber/brace-expansion.svg)](https://greenkeeper.io/)\n\n[![testling badge](https://ci.testling.com/juliangruber/brace-expansion.png)](https://ci.testling.com/juliangruber/brace-expansion)\n\n## Example\n\n```js\nvar expand = require('brace-expansion');\n\nexpand('file-{a,b,c}.jpg')\n// => ['file-a.jpg', 'file-b.jpg', 'file-c.jpg']\n\nexpand('-v{,,}')\n// => ['-v', '-v', '-v']\n\nexpand('file{0..2}.jpg')\n// => ['file0.jpg', 'file1.jpg', 'file2.jpg']\n\nexpand('file-{a..c}.jpg')\n// => ['file-a.jpg', 'file-b.jpg', 'file-c.jpg']\n\nexpand('file{2..0}.jpg')\n// => ['file2.jpg', 'file1.jpg', 'file0.jpg']\n\nexpand('file{0..4..2}.jpg')\n// => ['file0.jpg', 'file2.jpg', 'file4.jpg']\n\nexpand('file-{a..e..2}.jpg')\n// => ['file-a.jpg', 'file-c.jpg', 'file-e.jpg']\n\nexpand('file{00..10..5}.jpg')\n// => ['file00.jpg', 'file05.jpg', 'file10.jpg']\n\nexpand('{{A..C},{a..c}}')\n// => ['A', 'B', 'C', 'a', 'b', 'c']\n\nexpand('ppp{,config,oe{,conf}}')\n// => ['ppp', 'pppconfig', 'pppoe', 'pppoeconf']\n```\n\n## API\n\n```js\nvar expand = require('brace-expansion');\n```\n\n### var expanded = expand(str)\n\nReturn an array of all possible and valid expansions of `str`. If none are\nfound, `[str]` is returned.\n\nValid expansions are:\n\n```js\n/^(.*,)+(.+)?$/\n// {a,b,...}\n```\n\nA comma separated list of options, like `{a,b}` or `{a,{b,c}}` or `{,a,}`.\n\n```js\n/^-?\\d+\\.\\.-?\\d+(\\.\\.-?\\d+)?$/\n// {x..y[..incr]}\n```\n\nA numeric sequence from `x` to `y` inclusive, with optional increment.\nIf `x` or `y` start with a leading `0`, all the numbers will be padded\nto have equal length. Negative numbers and backwards iteration work too.\n\n```js\n/^-?\\d+\\.\\.-?\\d+(\\.\\.-?\\d+)?$/\n// {x..y[..incr]}\n```\n\nAn alphabetic sequence from `x` to `y` inclusive, with optional increment.\n`x` and `y` must be exactly one character, and if given, `incr` must be a\nnumber.\n\nFor compatibility reasons, the string `${` is not eligible for brace expansion.\n\n## Installation\n\nWith [npm](https://npmjs.org) do:\n\n```bash\nnpm install brace-expansion\n```\n\n## Contributors\n\n- [Julian Gruber](https://github.com/juliangruber)\n- [Isaac Z. Schlueter](https://github.com/isaacs)\n\n## Support\n\nDo you want to support modules like this to improve their quality, stability and weigh in on new features? Then please consider donating to my [Patreon](https://www.patreon.com/juliangruber). Not sure how much of my modules you're using? Try [feross/thanks](https://github.com/feross/thanks)!\n\n## License\n\n(MIT)\n\nCopyright (c) 2013 Julian Gruber &lt;julian@juliangruber.com&gt;\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\nof the Software, and to permit persons to whom the Software is furnished to do\nso, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n/index.js\u0012var concatMap = require('concat-map');\nvar balanced = require('balanced-match');\n\nmodule.exports = expandTop;\n\nvar escSlash = '\\0SLASH'+Math.random()+'\\0';\nvar escOpen = '\\0OPEN'+Math.random()+'\\0';\nvar escClose = '\\0CLOSE'+Math.random()+'\\0';\nvar escComma = '\\0COMMA'+Math.random()+'\\0';\nvar escPeriod = '\\0PERIOD'+Math.random()+'\\0';\n\nfunction numeric(str) {\n  return parseInt(str, 10) == str\n    ? parseInt(str, 10)\n    : str.charCodeAt(0);\n}\n\nfunction escapeBraces(str) {\n  return str.split('\\\\\\\\').join(escSlash)\n            .split('\\\\{').join(escOpen)\n            .split('\\\\}').join(escClose)\n            .split('\\\\,').join(escComma)\n            .split('\\\\.').join(escPeriod);\n}\n\nfunction unescapeBraces(str) {\n  return str.split(escSlash).join('\\\\')\n            .split(escOpen).join('{')\n            .split(escClose).join('}')\n            .split(escComma).join(',')\n            .split(escPeriod).join('.');\n}\n\n\n// Basically just str.split(\",\"), but handling cases\n// where we have nested braced sections, which should be\n// treated as individual members, like {a,{b,c},d}\nfunction parseCommaParts(str) {\n  if (!str)\n    return [''];\n\n  var parts = [];\n  var m = balanced('{', '}', str);\n\n  if (!m)\n    return str.split(',');\n\n  var pre = m.pre;\n  var body = m.body;\n  var post = m.post;\n  var p = pre.split(',');\n\n  p[p.length-1] += '{' + body + '}';\n  var postParts = parseCommaParts(post);\n  if (post.length) {\n    p[p.length-1] += postParts.shift();\n    p.push.apply(p, postParts);\n  }\n\n  parts.push.apply(parts, p);\n\n  return parts;\n}\n\nfunction expandTop(str) {\n  if (!str)\n    return [];\n\n  // I don't know why Bash 4.3 does this, but it does.\n  // Anything starting with {} will have the first two bytes preserved\n  // but *only* at the top level, so {},a}b will not expand to anything,\n  // but a{},b}c will be expanded to [a}c,abc].\n  // One could argue that this is a bug in Bash, but since the goal of\n  // this module is to match Bash's rules, we escape a leading {}\n  if (str.substr(0, 2) === '{}') {\n    str = '\\\\{\\\\}' + str.substr(2);\n  }\n\n  return expand(escapeBraces(str), true).map(unescapeBraces);\n}\n\nfunction identity(e) {\n  return e;\n}\n\nfunction embrace(str) {\n  return '{' + str + '}';\n}\nfunction isPadded(el) {\n  return /^-?0\\d/.test(el);\n}\n\nfunction lte(i, y) {\n  return i <= y;\n}\nfunction gte(i, y) {\n  return i >= y;\n}\n\nfunction expand(str, isTop) {\n  var expansions = [];\n\n  var m = balanced('{', '}', str);\n  if (!m || /\\$$/.test(m.pre)) return [str];\n\n  var isNumericSequence = /^-?\\d+\\.\\.-?\\d+(?:\\.\\.-?\\d+)?$/.test(m.body);\n  var isAlphaSequence = /^[a-zA-Z]\\.\\.[a-zA-Z](?:\\.\\.-?\\d+)?$/.test(m.body);\n  var isSequence = isNumericSequence || isAlphaSequence;\n  var isOptions = m.body.indexOf(',') >= 0;\n  if (!isSequence && !isOptions) {\n    // {a},b}\n    if (m.post.match(/,.*\\}/)) {\n      str = m.pre + '{' + m.body + escClose + m.post;\n      return expand(str);\n    }\n    return [str];\n  }\n\n  var n;\n  if (isSequence) {\n    n = m.body.split(/\\.\\./);\n  } else {\n    n = parseCommaParts(m.body);\n    if (n.length === 1) {\n      // x{{a,b}}y ==> x{a}y x{b}y\n      n = expand(n[0], false).map(embrace);\n      if (n.length === 1) {\n        var post = m.post.length\n          ? expand(m.post, false)\n          : [''];\n        return post.map(function(p) {\n          return m.pre + n[0] + p;\n        });\n      }\n    }\n  }\n\n  // at this point, n is the parts, and we know it's not a comma set\n  // with a single entry.\n\n  // no need to expand pre, since it is guaranteed to be free of brace-sets\n  var pre = m.pre;\n  var post = m.post.length\n    ? expand(m.post, false)\n    : [''];\n\n  var N;\n\n  if (isSequence) {\n    var x = numeric(n[0]);\n    var y = numeric(n[1]);\n    var width = Math.max(n[0].length, n[1].length)\n    var incr = n.length == 3\n      ? Math.abs(numeric(n[2]))\n      : 1;\n    var test = lte;\n    var reverse = y < x;\n    if (reverse) {\n      incr *= -1;\n      test = gte;\n    }\n    var pad = n.some(isPadded);\n\n    N = [];\n\n    for (var i = x; test(i, y); i += incr) {\n      var c;\n      if (isAlphaSequence) {\n        c = String.fromCharCode(i);\n        if (c === '\\\\')\n          c = '';\n      } else {\n        c = String(i);\n        if (pad) {\n          var need = width - c.length;\n          if (need > 0) {\n            var z = new Array(need + 1).join('0');\n            if (i < 0)\n              c = '-' + z + c.slice(1);\n            else\n              c = z + c;\n          }\n        }\n      }\n      N.push(c);\n    }\n  } else {\n    N = concatMap(n, function(el) { return expand(el, false) });\n  }\n\n  for (var j = 0; j < N.length; j++) {\n    for (var k = 0; k < post.length; k++) {\n      var expansion = pre + N[j] + post[k];\n      if (!isTop || isSequence || expansion)\n        expansions.push(expansion);\n    }\n  }\n\n  return expansions;\n}\n\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/YnJhY2VzQDMuMC4y",
    "content": "/lib/compile.js\u0005'use strict';\n\nconst fill = require('fill-range');\nconst utils = require('./utils');\n\nconst compile = (ast, options = {}) => {\n  let walk = (node, parent = {}) => {\n    let invalidBlock = utils.isInvalidBrace(parent);\n    let invalidNode = node.invalid === true && options.escapeInvalid === true;\n    let invalid = invalidBlock === true || invalidNode === true;\n    let prefix = options.escapeInvalid === true ? '\\\\' : '';\n    let output = '';\n\n    if (node.isOpen === true) {\n      return prefix + node.value;\n    }\n    if (node.isClose === true) {\n      return prefix + node.value;\n    }\n\n    if (node.type === 'open') {\n      return invalid ? (prefix + node.value) : '(';\n    }\n\n    if (node.type === 'close') {\n      return invalid ? (prefix + node.value) : ')';\n    }\n\n    if (node.type === 'comma') {\n      return node.prev.type === 'comma' ? '' : (invalid ? node.value : '|');\n    }\n\n    if (node.value) {\n      return node.value;\n    }\n\n    if (node.nodes && node.ranges > 0) {\n      let args = utils.reduce(node.nodes);\n      let range = fill(...args, { ...options, wrap: false, toRegex: true });\n\n      if (range.length !== 0) {\n        return args.length > 1 && range.length > 1 ? `(${range})` : range;\n      }\n    }\n\n    if (node.nodes) {\n      for (let child of node.nodes) {\n        output += walk(child, node);\n      }\n    }\n    return output;\n  };\n\n  return walk(ast);\n};\n\nmodule.exports = compile;\n/index.js\u0011\u0017'use strict';\n\nconst stringify = require('./lib/stringify');\nconst compile = require('./lib/compile');\nconst expand = require('./lib/expand');\nconst parse = require('./lib/parse');\n\n/**\n * Expand the given pattern or create a regex-compatible string.\n *\n * ```js\n * const braces = require('braces');\n * console.log(braces('{a,b,c}', { compile: true })); //=> ['(a|b|c)']\n * console.log(braces('{a,b,c}')); //=> ['a', 'b', 'c']\n * ```\n * @param {String} `str`\n * @param {Object} `options`\n * @return {String}\n * @api public\n */\n\nconst braces = (input, options = {}) => {\n  let output = [];\n\n  if (Array.isArray(input)) {\n    for (let pattern of input) {\n      let result = braces.create(pattern, options);\n      if (Array.isArray(result)) {\n        output.push(...result);\n      } else {\n        output.push(result);\n      }\n    }\n  } else {\n    output = [].concat(braces.create(input, options));\n  }\n\n  if (options && options.expand === true && options.nodupes === true) {\n    output = [...new Set(output)];\n  }\n  return output;\n};\n\n/**\n * Parse the given `str` with the given `options`.\n *\n * ```js\n * // braces.parse(pattern, [, options]);\n * const ast = braces.parse('a/{b,c}/d');\n * console.log(ast);\n * ```\n * @param {String} pattern Brace pattern to parse\n * @param {Object} options\n * @return {Object} Returns an AST\n * @api public\n */\n\nbraces.parse = (input, options = {}) => parse(input, options);\n\n/**\n * Creates a braces string from an AST, or an AST node.\n *\n * ```js\n * const braces = require('braces');\n * let ast = braces.parse('foo/{a,b}/bar');\n * console.log(stringify(ast.nodes[2])); //=> '{a,b}'\n * ```\n * @param {String} `input` Brace pattern or AST.\n * @param {Object} `options`\n * @return {Array} Returns an array of expanded values.\n * @api public\n */\n\nbraces.stringify = (input, options = {}) => {\n  if (typeof input === 'string') {\n    return stringify(braces.parse(input, options), options);\n  }\n  return stringify(input, options);\n};\n\n/**\n * Compiles a brace pattern into a regex-compatible, optimized string.\n * This method is called by the main [braces](#braces) function by default.\n *\n * ```js\n * const braces = require('braces');\n * console.log(braces.compile('a/{b,c}/d'));\n * //=> ['a/(b|c)/d']\n * ```\n * @param {String} `input` Brace pattern or AST.\n * @param {Object} `options`\n * @return {Array} Returns an array of expanded values.\n * @api public\n */\n\nbraces.compile = (input, options = {}) => {\n  if (typeof input === 'string') {\n    input = braces.parse(input, options);\n  }\n  return compile(input, options);\n};\n\n/**\n * Expands a brace pattern into an array. This method is called by the\n * main [braces](#braces) function when `options.expand` is true. Before\n * using this method it's recommended that you read the [performance notes](#performance))\n * and advantages of using [.compile](#compile) instead.\n *\n * ```js\n * const braces = require('braces');\n * console.log(braces.expand('a/{b,c}/d'));\n * //=> ['a/b/d', 'a/c/d'];\n * ```\n * @param {String} `pattern` Brace pattern\n * @param {Object} `options`\n * @return {Array} Returns an array of expanded values.\n * @api public\n */\n\nbraces.expand = (input, options = {}) => {\n  if (typeof input === 'string') {\n    input = braces.parse(input, options);\n  }\n\n  let result = expand(input, options);\n\n  // filter out empty strings if specified\n  if (options.noempty === true) {\n    result = result.filter(Boolean);\n  }\n\n  // filter out duplicates if specified\n  if (options.nodupes === true) {\n    result = [...new Set(result)];\n  }\n\n  return result;\n};\n\n/**\n * Processes a brace pattern and returns either an expanded array\n * (if `options.expand` is true), a highly optimized regex-compatible string.\n * This method is called by the main [braces](#braces) function.\n *\n * ```js\n * const braces = require('braces');\n * console.log(braces.create('user-{200..300}/project-{a,b,c}-{1..10}'))\n * //=> 'user-(20[0-9]|2[1-9][0-9]|300)/project-(a|b|c)-([1-9]|10)'\n * ```\n * @param {String} `pattern` Brace pattern\n * @param {Object} `options`\n * @return {Array} Returns an array of expanded values.\n * @api public\n */\n\nbraces.create = (input, options = {}) => {\n  if (input === '' || input.length < 3) {\n    return [input];\n  }\n\n return options.expand !== true\n    ? braces.compile(input, options)\n    : braces.expand(input, options);\n};\n\n/**\n * Expose \"braces\"\n */\n\nmodule.exports = braces;\n/lib/constants.js\u00069'use strict';\n\nmodule.exports = {\n  MAX_LENGTH: 1024 * 64,\n\n  // Digits\n  CHAR_0: '0', /* 0 */\n  CHAR_9: '9', /* 9 */\n\n  // Alphabet chars.\n  CHAR_UPPERCASE_A: 'A', /* A */\n  CHAR_LOWERCASE_A: 'a', /* a */\n  CHAR_UPPERCASE_Z: 'Z', /* Z */\n  CHAR_LOWERCASE_Z: 'z', /* z */\n\n  CHAR_LEFT_PARENTHESES: '(', /* ( */\n  CHAR_RIGHT_PARENTHESES: ')', /* ) */\n\n  CHAR_ASTERISK: '*', /* * */\n\n  // Non-alphabetic chars.\n  CHAR_AMPERSAND: '&', /* & */\n  CHAR_AT: '@', /* @ */\n  CHAR_BACKSLASH: '\\\\', /* \\ */\n  CHAR_BACKTICK: '`', /* ` */\n  CHAR_CARRIAGE_RETURN: '\\r', /* \\r */\n  CHAR_CIRCUMFLEX_ACCENT: '^', /* ^ */\n  CHAR_COLON: ':', /* : */\n  CHAR_COMMA: ',', /* , */\n  CHAR_DOLLAR: '$', /* . */\n  CHAR_DOT: '.', /* . */\n  CHAR_DOUBLE_QUOTE: '\"', /* \" */\n  CHAR_EQUAL: '=', /* = */\n  CHAR_EXCLAMATION_MARK: '!', /* ! */\n  CHAR_FORM_FEED: '\\f', /* \\f */\n  CHAR_FORWARD_SLASH: '/', /* / */\n  CHAR_HASH: '#', /* # */\n  CHAR_HYPHEN_MINUS: '-', /* - */\n  CHAR_LEFT_ANGLE_BRACKET: '<', /* < */\n  CHAR_LEFT_CURLY_BRACE: '{', /* { */\n  CHAR_LEFT_SQUARE_BRACKET: '[', /* [ */\n  CHAR_LINE_FEED: '\\n', /* \\n */\n  CHAR_NO_BREAK_SPACE: '\\u00A0', /* \\u00A0 */\n  CHAR_PERCENT: '%', /* % */\n  CHAR_PLUS: '+', /* + */\n  CHAR_QUESTION_MARK: '?', /* ? */\n  CHAR_RIGHT_ANGLE_BRACKET: '>', /* > */\n  CHAR_RIGHT_CURLY_BRACE: '}', /* } */\n  CHAR_RIGHT_SQUARE_BRACKET: ']', /* ] */\n  CHAR_SEMICOLON: ';', /* ; */\n  CHAR_SINGLE_QUOTE: '\\'', /* ' */\n  CHAR_SPACE: ' ', /*   */\n  CHAR_TAB: '\\t', /* \\t */\n  CHAR_UNDERSCORE: '_', /* _ */\n  CHAR_VERTICAL_LINE: '|', /* | */\n  CHAR_ZERO_WIDTH_NOBREAK_SPACE: '\\uFEFF' /* \\uFEFF */\n};\n/lib/parse.js\u001b\u0001'use strict';\n\nconst stringify = require('./stringify');\n\n/**\n * Constants\n */\n\nconst {\n  MAX_LENGTH,\n  CHAR_BACKSLASH, /* \\ */\n  CHAR_BACKTICK, /* ` */\n  CHAR_COMMA, /* , */\n  CHAR_DOT, /* . */\n  CHAR_LEFT_PARENTHESES, /* ( */\n  CHAR_RIGHT_PARENTHESES, /* ) */\n  CHAR_LEFT_CURLY_BRACE, /* { */\n  CHAR_RIGHT_CURLY_BRACE, /* } */\n  CHAR_LEFT_SQUARE_BRACKET, /* [ */\n  CHAR_RIGHT_SQUARE_BRACKET, /* ] */\n  CHAR_DOUBLE_QUOTE, /* \" */\n  CHAR_SINGLE_QUOTE, /* ' */\n  CHAR_NO_BREAK_SPACE,\n  CHAR_ZERO_WIDTH_NOBREAK_SPACE\n} = require('./constants');\n\n/**\n * parse\n */\n\nconst parse = (input, options = {}) => {\n  if (typeof input !== 'string') {\n    throw new TypeError('Expected a string');\n  }\n\n  let opts = options || {};\n  let max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;\n  if (input.length > max) {\n    throw new SyntaxError(`Input length (${input.length}), exceeds max characters (${max})`);\n  }\n\n  let ast = { type: 'root', input, nodes: [] };\n  let stack = [ast];\n  let block = ast;\n  let prev = ast;\n  let brackets = 0;\n  let length = input.length;\n  let index = 0;\n  let depth = 0;\n  let value;\n  let memo = {};\n\n  /**\n   * Helpers\n   */\n\n  const advance = () => input[index++];\n  const push = node => {\n    if (node.type === 'text' && prev.type === 'dot') {\n      prev.type = 'text';\n    }\n\n    if (prev && prev.type === 'text' && node.type === 'text') {\n      prev.value += node.value;\n      return;\n    }\n\n    block.nodes.push(node);\n    node.parent = block;\n    node.prev = prev;\n    prev = node;\n    return node;\n  };\n\n  push({ type: 'bos' });\n\n  while (index < length) {\n    block = stack[stack.length - 1];\n    value = advance();\n\n    /**\n     * Invalid chars\n     */\n\n    if (value === CHAR_ZERO_WIDTH_NOBREAK_SPACE || value === CHAR_NO_BREAK_SPACE) {\n      continue;\n    }\n\n    /**\n     * Escaped chars\n     */\n\n    if (value === CHAR_BACKSLASH) {\n      push({ type: 'text', value: (options.keepEscaping ? value : '') + advance() });\n      continue;\n    }\n\n    /**\n     * Right square bracket (literal): ']'\n     */\n\n    if (value === CHAR_RIGHT_SQUARE_BRACKET) {\n      push({ type: 'text', value: '\\\\' + value });\n      continue;\n    }\n\n    /**\n     * Left square bracket: '['\n     */\n\n    if (value === CHAR_LEFT_SQUARE_BRACKET) {\n      brackets++;\n\n      let closed = true;\n      let next;\n\n      while (index < length && (next = advance())) {\n        value += next;\n\n        if (next === CHAR_LEFT_SQUARE_BRACKET) {\n          brackets++;\n          continue;\n        }\n\n        if (next === CHAR_BACKSLASH) {\n          value += advance();\n          continue;\n        }\n\n        if (next === CHAR_RIGHT_SQUARE_BRACKET) {\n          brackets--;\n\n          if (brackets === 0) {\n            break;\n          }\n        }\n      }\n\n      push({ type: 'text', value });\n      continue;\n    }\n\n    /**\n     * Parentheses\n     */\n\n    if (value === CHAR_LEFT_PARENTHESES) {\n      block = push({ type: 'paren', nodes: [] });\n      stack.push(block);\n      push({ type: 'text', value });\n      continue;\n    }\n\n    if (value === CHAR_RIGHT_PARENTHESES) {\n      if (block.type !== 'paren') {\n        push({ type: 'text', value });\n        continue;\n      }\n      block = stack.pop();\n      push({ type: 'text', value });\n      block = stack[stack.length - 1];\n      continue;\n    }\n\n    /**\n     * Quotes: '|\"|`\n     */\n\n    if (value === CHAR_DOUBLE_QUOTE || value === CHAR_SINGLE_QUOTE || value === CHAR_BACKTICK) {\n      let open = value;\n      let next;\n\n      if (options.keepQuotes !== true) {\n        value = '';\n      }\n\n      while (index < length && (next = advance())) {\n        if (next === CHAR_BACKSLASH) {\n          value += next + advance();\n          continue;\n        }\n\n        if (next === open) {\n          if (options.keepQuotes === true) value += next;\n          break;\n        }\n\n        value += next;\n      }\n\n      push({ type: 'text', value });\n      continue;\n    }\n\n    /**\n     * Left curly brace: '{'\n     */\n\n    if (value === CHAR_LEFT_CURLY_BRACE) {\n      depth++;\n\n      let dollar = prev.value && prev.value.slice(-1) === '$' || block.dollar === true;\n      let brace = {\n        type: 'brace',\n        open: true,\n        close: false,\n        dollar,\n        depth,\n        commas: 0,\n        ranges: 0,\n        nodes: []\n      };\n\n      block = push(brace);\n      stack.push(block);\n      push({ type: 'open', value });\n      continue;\n    }\n\n    /**\n     * Right curly brace: '}'\n     */\n\n    if (value === CHAR_RIGHT_CURLY_BRACE) {\n      if (block.type !== 'brace') {\n        push({ type: 'text', value });\n        continue;\n      }\n\n      let type = 'close';\n      block = stack.pop();\n      block.close = true;\n\n      push({ type, value });\n      depth--;\n\n      block = stack[stack.length - 1];\n      continue;\n    }\n\n    /**\n     * Comma: ','\n     */\n\n    if (value === CHAR_COMMA && depth > 0) {\n      if (block.ranges > 0) {\n        block.ranges = 0;\n        let open = block.nodes.shift();\n        block.nodes = [open, { type: 'text', value: stringify(block) }];\n      }\n\n      push({ type: 'comma', value });\n      block.commas++;\n      continue;\n    }\n\n    /**\n     * Dot: '.'\n     */\n\n    if (value === CHAR_DOT && depth > 0 && block.commas === 0) {\n      let siblings = block.nodes;\n\n      if (depth === 0 || siblings.length === 0) {\n        push({ type: 'text', value });\n        continue;\n      }\n\n      if (prev.type === 'dot') {\n        block.range = [];\n        prev.value += value;\n        prev.type = 'range';\n\n        if (block.nodes.length !== 3 && block.nodes.length !== 5) {\n          block.invalid = true;\n          block.ranges = 0;\n          prev.type = 'text';\n          continue;\n        }\n\n        block.ranges++;\n        block.args = [];\n        continue;\n      }\n\n      if (prev.type === 'range') {\n        siblings.pop();\n\n        let before = siblings[siblings.length - 1];\n        before.value += prev.value + value;\n        prev = before;\n        block.ranges--;\n        continue;\n      }\n\n      push({ type: 'dot', value });\n      continue;\n    }\n\n    /**\n     * Text\n     */\n\n    push({ type: 'text', value });\n  }\n\n  // Mark imbalanced braces and brackets as invalid\n  do {\n    block = stack.pop();\n\n    if (block.type !== 'root') {\n      block.nodes.forEach(node => {\n        if (!node.nodes) {\n          if (node.type === 'open') node.isOpen = true;\n          if (node.type === 'close') node.isClose = true;\n          if (!node.nodes) node.type = 'text';\n          node.invalid = true;\n        }\n      });\n\n      // get the location of the block on parent.nodes (block's siblings)\n      let parent = stack[stack.length - 1];\n      let index = parent.nodes.indexOf(block);\n      // replace the (invalid) block with it's nodes\n      parent.nodes.splice(index, 1, ...block.nodes);\n    }\n  } while (stack.length > 0);\n\n  push({ type: 'eos' });\n  return ast;\n};\n\nmodule.exports = parse;\n/lib/utils.js\t'use strict';\n\nexports.isInteger = num => {\n  if (typeof num === 'number') {\n    return Number.isInteger(num);\n  }\n  if (typeof num === 'string' && num.trim() !== '') {\n    return Number.isInteger(Number(num));\n  }\n  return false;\n};\n\n/**\n * Find a node of the given type\n */\n\nexports.find = (node, type) => node.nodes.find(node => node.type === type);\n\n/**\n * Find a node of the given type\n */\n\nexports.exceedsLimit = (min, max, step = 1, limit) => {\n  if (limit === false) return false;\n  if (!exports.isInteger(min) || !exports.isInteger(max)) return false;\n  return ((Number(max) - Number(min)) / Number(step)) >= limit;\n};\n\n/**\n * Escape the given node with '\\\\' before node.value\n */\n\nexports.escapeNode = (block, n = 0, type) => {\n  let node = block.nodes[n];\n  if (!node) return;\n\n  if ((type && node.type === type) || node.type === 'open' || node.type === 'close') {\n    if (node.escaped !== true) {\n      node.value = '\\\\' + node.value;\n      node.escaped = true;\n    }\n  }\n};\n\n/**\n * Returns true if the given brace node should be enclosed in literal braces\n */\n\nexports.encloseBrace = node => {\n  if (node.type !== 'brace') return false;\n  if ((node.commas >> 0 + node.ranges >> 0) === 0) {\n    node.invalid = true;\n    return true;\n  }\n  return false;\n};\n\n/**\n * Returns true if a brace node is invalid.\n */\n\nexports.isInvalidBrace = block => {\n  if (block.type !== 'brace') return false;\n  if (block.invalid === true || block.dollar) return true;\n  if ((block.commas >> 0 + block.ranges >> 0) === 0) {\n    block.invalid = true;\n    return true;\n  }\n  if (block.open !== true || block.close !== true) {\n    block.invalid = true;\n    return true;\n  }\n  return false;\n};\n\n/**\n * Returns true if a node is an open or close node\n */\n\nexports.isOpenOrClose = node => {\n  if (node.type === 'open' || node.type === 'close') {\n    return true;\n  }\n  return node.open === true || node.close === true;\n};\n\n/**\n * Reduce an array of text nodes.\n */\n\nexports.reduce = nodes => nodes.reduce((acc, node) => {\n  if (node.type === 'text') acc.push(node.value);\n  if (node.type === 'range') node.type = 'text';\n  return acc;\n}, []);\n\n/**\n * Flatten an array\n */\n\nexports.flatten = (...args) => {\n  const result = [];\n  const flat = arr => {\n    for (let i = 0; i < arr.length; i++) {\n      let ele = arr[i];\n      Array.isArray(ele) ? flat(ele, result) : ele !== void 0 && result.push(ele);\n    }\n    return result;\n  };\n  flat(args);\n  return result;\n};\n/package.json\u0006o{\n  \"name\": \"braces\",\n  \"description\": \"Bash-like brace expansion, implemented in JavaScript. Safer than other brace expansion libs, with complete support for the Bash 4.3 braces specification, without sacrificing speed.\",\n  \"version\": \"3.0.2\",\n  \"homepage\": \"https://github.com/micromatch/braces\",\n  \"author\": \"Jon Schlinkert (https://github.com/jonschlinkert)\",\n  \"contributors\": [\n    \"Brian Woodward (https://twitter.com/doowb)\",\n    \"Elan Shanker (https://github.com/es128)\",\n    \"Eugene Sharygin (https://github.com/eush77)\",\n    \"hemanth.hm (http://h3manth.com)\",\n    \"Jon Schlinkert (http://twitter.com/jonschlinkert)\"\n  ],\n  \"repository\": \"micromatch/braces\",\n  \"bugs\": {\n    \"url\": \"https://github.com/micromatch/braces/issues\"\n  },\n  \"license\": \"MIT\",\n  \"files\": [\n    \"index.js\",\n    \"lib\"\n  ],\n  \"main\": \"index.js\",\n  \"engines\": {\n    \"node\": \">=8\"\n  },\n  \"scripts\": {\n    \"test\": \"mocha\",\n    \"benchmark\": \"node benchmark\"\n  },\n  \"dependencies\": {\n    \"fill-range\": \"^7.0.1\"\n  },\n  \"devDependencies\": {\n    \"ansi-colors\": \"^3.2.4\",\n    \"bash-path\": \"^2.0.1\",\n    \"gulp-format-md\": \"^2.0.0\",\n    \"mocha\": \"^6.1.1\"\n  },\n  \"keywords\": [\n    \"alpha\",\n    \"alphabetical\",\n    \"bash\",\n    \"brace\",\n    \"braces\",\n    \"expand\",\n    \"expansion\",\n    \"filepath\",\n    \"fill\",\n    \"fs\",\n    \"glob\",\n    \"globbing\",\n    \"letter\",\n    \"match\",\n    \"matches\",\n    \"matching\",\n    \"number\",\n    \"numerical\",\n    \"path\",\n    \"range\",\n    \"ranges\",\n    \"sh\"\n  ],\n  \"verb\": {\n    \"toc\": false,\n    \"layout\": \"default\",\n    \"tasks\": [\n      \"readme\"\n    ],\n    \"lint\": {\n      \"reflinks\": true\n    },\n    \"plugins\": [\n      \"gulp-format-md\"\n    ]\n  }\n}\n/LICENSE\u0004@The MIT License (MIT)\n\nCopyright (c) 2014-2018, Jon Schlinkert.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n/lib/stringify.js\u0002'use strict';\n\nconst utils = require('./utils');\n\nmodule.exports = (ast, options = {}) => {\n  let stringify = (node, parent = {}) => {\n    let invalidBlock = options.escapeInvalid && utils.isInvalidBrace(parent);\n    let invalidNode = node.invalid === true && options.escapeInvalid === true;\n    let output = '';\n\n    if (node.value) {\n      if ((invalidBlock || invalidNode) && utils.isOpenOrClose(node)) {\n        return '\\\\' + node.value;\n      }\n      return node.value;\n    }\n\n    if (node.value) {\n      return node.value;\n    }\n\n    if (node.nodes) {\n      for (let child of node.nodes) {\n        output += stringify(child);\n      }\n    }\n    return output;\n  };\n\n  return stringify(ast);\n};\n\n/lib/expand.js\n'use strict';\n\nconst fill = require('fill-range');\nconst stringify = require('./stringify');\nconst utils = require('./utils');\n\nconst append = (queue = '', stash = '', enclose = false) => {\n  let result = [];\n\n  queue = [].concat(queue);\n  stash = [].concat(stash);\n\n  if (!stash.length) return queue;\n  if (!queue.length) {\n    return enclose ? utils.flatten(stash).map(ele => `{${ele}}`) : stash;\n  }\n\n  for (let item of queue) {\n    if (Array.isArray(item)) {\n      for (let value of item) {\n        result.push(append(value, stash, enclose));\n      }\n    } else {\n      for (let ele of stash) {\n        if (enclose === true && typeof ele === 'string') ele = `{${ele}}`;\n        result.push(Array.isArray(ele) ? append(item, ele, enclose) : (item + ele));\n      }\n    }\n  }\n  return utils.flatten(result);\n};\n\nconst expand = (ast, options = {}) => {\n  let rangeLimit = options.rangeLimit === void 0 ? 1000 : options.rangeLimit;\n\n  let walk = (node, parent = {}) => {\n    node.queue = [];\n\n    let p = parent;\n    let q = parent.queue;\n\n    while (p.type !== 'brace' && p.type !== 'root' && p.parent) {\n      p = p.parent;\n      q = p.queue;\n    }\n\n    if (node.invalid || node.dollar) {\n      q.push(append(q.pop(), stringify(node, options)));\n      return;\n    }\n\n    if (node.type === 'brace' && node.invalid !== true && node.nodes.length === 2) {\n      q.push(append(q.pop(), ['{}']));\n      return;\n    }\n\n    if (node.nodes && node.ranges > 0) {\n      let args = utils.reduce(node.nodes);\n\n      if (utils.exceedsLimit(...args, options.step, rangeLimit)) {\n        throw new RangeError('expanded array length exceeds range limit. Use options.rangeLimit to increase or disable the limit.');\n      }\n\n      let range = fill(...args, options);\n      if (range.length === 0) {\n        range = stringify(node, options);\n      }\n\n      q.push(append(q.pop(), range));\n      node.nodes = [];\n      return;\n    }\n\n    let enclose = utils.encloseBrace(node);\n    let queue = node.queue;\n    let block = node;\n\n    while (block.type !== 'brace' && block.type !== 'root' && block.parent) {\n      block = block.parent;\n      queue = block.queue;\n    }\n\n    for (let i = 0; i < node.nodes.length; i++) {\n      let child = node.nodes[i];\n\n      if (child.type === 'comma' && node.type === 'brace') {\n        if (i === 1) queue.push('');\n        queue.push('');\n        continue;\n      }\n\n      if (child.type === 'close') {\n        q.push(append(q.pop(), queue, enclose));\n        continue;\n      }\n\n      if (child.value && child.type !== 'open') {\n        queue.push(append(queue.pop(), child.value));\n        continue;\n      }\n\n      if (child.nodes) {\n        walk(child, node);\n      }\n    }\n\n    return queue;\n  };\n\n  return utils.flatten(walk(ast));\n};\n\nmodule.exports = expand;\n/README.mdR# braces [![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=W8YFZ425KND68) [![NPM version](https://img.shields.io/npm/v/braces.svg?style=flat)](https://www.npmjs.com/package/braces) [![NPM monthly downloads](https://img.shields.io/npm/dm/braces.svg?style=flat)](https://npmjs.org/package/braces) [![NPM total downloads](https://img.shields.io/npm/dt/braces.svg?style=flat)](https://npmjs.org/package/braces) [![Linux Build Status](https://img.shields.io/travis/micromatch/braces.svg?style=flat&label=Travis)](https://travis-ci.org/micromatch/braces)\n\n> Bash-like brace expansion, implemented in JavaScript. Safer than other brace expansion libs, with complete support for the Bash 4.3 braces specification, without sacrificing speed.\n\nPlease consider following this project's author, [Jon Schlinkert](https://github.com/jonschlinkert), and consider starring the project to show your :heart: and support.\n\n## Install\n\nInstall with [npm](https://www.npmjs.com/):\n\n```sh\n$ npm install --save braces\n```\n\n## v3.0.0 Released!!\n\nSee the [changelog](CHANGELOG.md) for details.\n\n## Why use braces?\n\nBrace patterns make globs more powerful by adding the ability to match specific ranges and sequences of characters.\n\n* **Accurate** - complete support for the [Bash 4.3 Brace Expansion](www.gnu.org/software/bash/) specification (passes all of the Bash braces tests)\n* **[fast and performant](#benchmarks)** - Starts fast, runs fast and [scales well](#performance) as patterns increase in complexity.\n* **Organized code base** - The parser and compiler are easy to maintain and update when edge cases crop up.\n* **Well-tested** - Thousands of test assertions, and passes all of the Bash, minimatch, and [brace-expansion](https://github.com/juliangruber/brace-expansion) unit tests (as of the date this was written).\n* **Safer** - You shouldn't have to worry about users defining aggressive or malicious brace patterns that can break your application. Braces takes measures to prevent malicious regex that can be used for DDoS attacks (see [catastrophic backtracking](https://www.regular-expressions.info/catastrophic.html)).\n* [Supports lists](#lists) - (aka \"sets\") `a/{b,c}/d` => `['a/b/d', 'a/c/d']`\n* [Supports sequences](#sequences) - (aka \"ranges\") `{01..03}` => `['01', '02', '03']`\n* [Supports steps](#steps) - (aka \"increments\") `{2..10..2}` => `['2', '4', '6', '8', '10']`\n* [Supports escaping](#escaping) - To prevent evaluation of special characters.\n\n## Usage\n\nThe main export is a function that takes one or more brace `patterns` and `options`.\n\n```js\nconst braces = require('braces');\n// braces(patterns[, options]);\n\nconsole.log(braces(['{01..05}', '{a..e}']));\n//=> ['(0[1-5])', '([a-e])']\n\nconsole.log(braces(['{01..05}', '{a..e}'], { expand: true }));\n//=> ['01', '02', '03', '04', '05', 'a', 'b', 'c', 'd', 'e']\n```\n\n### Brace Expansion vs. Compilation\n\nBy default, brace patterns are compiled into strings that are optimized for creating regular expressions and matching.\n\n**Compiled**\n\n```js\nconsole.log(braces('a/{x,y,z}/b')); \n//=> ['a/(x|y|z)/b']\nconsole.log(braces(['a/{01..20}/b', 'a/{1..5}/b'])); \n//=> [ 'a/(0[1-9]|1[0-9]|20)/b', 'a/([1-5])/b' ]\n```\n\n**Expanded**\n\nEnable brace expansion by setting the `expand` option to true, or by using [braces.expand()](#expand) (returns an array similar to what you'd expect from Bash, or `echo {1..5}`, or [minimatch](https://github.com/isaacs/minimatch)):\n\n```js\nconsole.log(braces('a/{x,y,z}/b', { expand: true }));\n//=> ['a/x/b', 'a/y/b', 'a/z/b']\n\nconsole.log(braces.expand('{01..10}'));\n//=> ['01','02','03','04','05','06','07','08','09','10']\n```\n\n### Lists\n\nExpand lists (like Bash \"sets\"):\n\n```js\nconsole.log(braces('a/{foo,bar,baz}/*.js'));\n//=> ['a/(foo|bar|baz)/*.js']\n\nconsole.log(braces.expand('a/{foo,bar,baz}/*.js'));\n//=> ['a/foo/*.js', 'a/bar/*.js', 'a/baz/*.js']\n```\n\n### Sequences\n\nExpand ranges of characters (like Bash \"sequences\"):\n\n```js\nconsole.log(braces.expand('{1..3}'));                // ['1', '2', '3']\nconsole.log(braces.expand('a/{1..3}/b'));            // ['a/1/b', 'a/2/b', 'a/3/b']\nconsole.log(braces('{a..c}', { expand: true }));     // ['a', 'b', 'c']\nconsole.log(braces('foo/{a..c}', { expand: true })); // ['foo/a', 'foo/b', 'foo/c']\n\n// supports zero-padded ranges\nconsole.log(braces('a/{01..03}/b'));   //=> ['a/(0[1-3])/b']\nconsole.log(braces('a/{001..300}/b')); //=> ['a/(0{2}[1-9]|0[1-9][0-9]|[12][0-9]{2}|300)/b']\n```\n\nSee [fill-range](https://github.com/jonschlinkert/fill-range) for all available range-expansion options.\n\n### Steppped ranges\n\nSteps, or increments, may be used with ranges:\n\n```js\nconsole.log(braces.expand('{2..10..2}'));\n//=> ['2', '4', '6', '8', '10']\n\nconsole.log(braces('{2..10..2}'));\n//=> ['(2|4|6|8|10)']\n```\n\nWhen the [.optimize](#optimize) method is used, or [options.optimize](#optionsoptimize) is set to true, sequences are passed to [to-regex-range](https://github.com/jonschlinkert/to-regex-range) for expansion.\n\n### Nesting\n\nBrace patterns may be nested. The results of each expanded string are not sorted, and left to right order is preserved.\n\n**\"Expanded\" braces**\n\n```js\nconsole.log(braces.expand('a{b,c,/{x,y}}/e'));\n//=> ['ab/e', 'ac/e', 'a/x/e', 'a/y/e']\n\nconsole.log(braces.expand('a/{x,{1..5},y}/c'));\n//=> ['a/x/c', 'a/1/c', 'a/2/c', 'a/3/c', 'a/4/c', 'a/5/c', 'a/y/c']\n```\n\n**\"Optimized\" braces**\n\n```js\nconsole.log(braces('a{b,c,/{x,y}}/e'));\n//=> ['a(b|c|/(x|y))/e']\n\nconsole.log(braces('a/{x,{1..5},y}/c'));\n//=> ['a/(x|([1-5])|y)/c']\n```\n\n### Escaping\n\n**Escaping braces**\n\nA brace pattern will not be expanded or evaluted if _either the opening or closing brace is escaped_:\n\n```js\nconsole.log(braces.expand('a\\\\{d,c,b}e'));\n//=> ['a{d,c,b}e']\n\nconsole.log(braces.expand('a{d,c,b\\\\}e'));\n//=> ['a{d,c,b}e']\n```\n\n**Escaping commas**\n\nCommas inside braces may also be escaped:\n\n```js\nconsole.log(braces.expand('a{b\\\\,c}d'));\n//=> ['a{b,c}d']\n\nconsole.log(braces.expand('a{d\\\\,c,b}e'));\n//=> ['ad,ce', 'abe']\n```\n\n**Single items**\n\nFollowing bash conventions, a brace pattern is also not expanded when it contains a single character:\n\n```js\nconsole.log(braces.expand('a{b}c'));\n//=> ['a{b}c']\n```\n\n## Options\n\n### options.maxLength\n\n**Type**: `Number`\n\n**Default**: `65,536`\n\n**Description**: Limit the length of the input string. Useful when the input string is generated or your application allows users to pass a string, et cetera.\n\n```js\nconsole.log(braces('a/{b,c}/d', { maxLength: 3 }));  //=> throws an error\n```\n\n### options.expand\n\n**Type**: `Boolean`\n\n**Default**: `undefined`\n\n**Description**: Generate an \"expanded\" brace pattern (alternatively you can use the `braces.expand()` method, which does the same thing).\n\n```js\nconsole.log(braces('a/{b,c}/d', { expand: true }));\n//=> [ 'a/b/d', 'a/c/d' ]\n```\n\n### options.nodupes\n\n**Type**: `Boolean`\n\n**Default**: `undefined`\n\n**Description**: Remove duplicates from the returned array.\n\n### options.rangeLimit\n\n**Type**: `Number`\n\n**Default**: `1000`\n\n**Description**: To prevent malicious patterns from being passed by users, an error is thrown when `braces.expand()` is used or `options.expand` is true and the generated range will exceed the `rangeLimit`.\n\nYou can customize `options.rangeLimit` or set it to `Inifinity` to disable this altogether.\n\n**Examples**\n\n```js\n// pattern exceeds the \"rangeLimit\", so it's optimized automatically\nconsole.log(braces.expand('{1..1000}'));\n//=> ['([1-9]|[1-9][0-9]{1,2}|1000)']\n\n// pattern does not exceed \"rangeLimit\", so it's NOT optimized\nconsole.log(braces.expand('{1..100}'));\n//=> ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '30', '31', '32', '33', '34', '35', '36', '37', '38', '39', '40', '41', '42', '43', '44', '45', '46', '47', '48', '49', '50', '51', '52', '53', '54', '55', '56', '57', '58', '59', '60', '61', '62', '63', '64', '65', '66', '67', '68', '69', '70', '71', '72', '73', '74', '75', '76', '77', '78', '79', '80', '81', '82', '83', '84', '85', '86', '87', '88', '89', '90', '91', '92', '93', '94', '95', '96', '97', '98', '99', '100']\n```\n\n### options.transform\n\n**Type**: `Function`\n\n**Default**: `undefined`\n\n**Description**: Customize range expansion.\n\n**Example: Transforming non-numeric values**\n\n```js\nconst alpha = braces.expand('x/{a..e}/y', {\n  transform(value, index) {\n    // When non-numeric values are passed, \"value\" is a character code.\n    return 'foo/' + String.fromCharCode(value) + '-' + index;\n  }\n});\nconsole.log(alpha);\n//=> [ 'x/foo/a-0/y', 'x/foo/b-1/y', 'x/foo/c-2/y', 'x/foo/d-3/y', 'x/foo/e-4/y' ]\n```\n\n**Example: Transforming numeric values**\n\n```js\nconst numeric = braces.expand('{1..5}', {\n  transform(value) {\n    // when numeric values are passed, \"value\" is a number\n    return 'foo/' + value * 2;\n  }\n});\nconsole.log(numeric); \n//=> [ 'foo/2', 'foo/4', 'foo/6', 'foo/8', 'foo/10' ]\n```\n\n### options.quantifiers\n\n**Type**: `Boolean`\n\n**Default**: `undefined`\n\n**Description**: In regular expressions, quanitifiers can be used to specify how many times a token can be repeated. For example, `a{1,3}` will match the letter `a` one to three times.\n\nUnfortunately, regex quantifiers happen to share the same syntax as [Bash lists](#lists)\n\nThe `quantifiers` option tells braces to detect when [regex quantifiers](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp#quantifiers) are defined in the given pattern, and not to try to expand them as lists.\n\n**Examples**\n\n```js\nconst braces = require('braces');\nconsole.log(braces('a/b{1,3}/{x,y,z}'));\n//=> [ 'a/b(1|3)/(x|y|z)' ]\nconsole.log(braces('a/b{1,3}/{x,y,z}', {quantifiers: true}));\n//=> [ 'a/b{1,3}/(x|y|z)' ]\nconsole.log(braces('a/b{1,3}/{x,y,z}', {quantifiers: true, expand: true}));\n//=> [ 'a/b{1,3}/x', 'a/b{1,3}/y', 'a/b{1,3}/z' ]\n```\n\n### options.unescape\n\n**Type**: `Boolean`\n\n**Default**: `undefined`\n\n**Description**: Strip backslashes that were used for escaping from the result.\n\n## What is \"brace expansion\"?\n\nBrace expansion is a type of parameter expansion that was made popular by unix shells for generating lists of strings, as well as regex-like matching when used alongside wildcards (globs).\n\nIn addition to \"expansion\", braces are also used for matching. In other words:\n\n* [brace expansion](#brace-expansion) is for generating new lists\n* [brace matching](#brace-matching) is for filtering existing lists\n\n<details>\n<summary><strong>More about brace expansion</strong> (click to expand)</summary>\n\nThere are two main types of brace expansion:\n\n1. **lists**: which are defined using comma-separated values inside curly braces: `{a,b,c}`\n2. **sequences**: which are defined using a starting value and an ending value, separated by two dots: `a{1..3}b`. Optionally, a third argument may be passed to define a \"step\" or increment to use: `a{1..100..10}b`. These are also sometimes referred to as \"ranges\".\n\nHere are some example brace patterns to illustrate how they work:\n\n**Sets**\n\n```\n{a,b,c}       => a b c\n{a,b,c}{1,2}  => a1 a2 b1 b2 c1 c2\n```\n\n**Sequences**\n\n```\n{1..9}        => 1 2 3 4 5 6 7 8 9\n{4..-4}       => 4 3 2 1 0 -1 -2 -3 -4\n{1..20..3}    => 1 4 7 10 13 16 19\n{a..j}        => a b c d e f g h i j\n{j..a}        => j i h g f e d c b a\n{a..z..3}     => a d g j m p s v y\n```\n\n**Combination**\n\nSets and sequences can be mixed together or used along with any other strings.\n\n```\n{a,b,c}{1..3}   => a1 a2 a3 b1 b2 b3 c1 c2 c3\nfoo/{a,b,c}/bar => foo/a/bar foo/b/bar foo/c/bar\n```\n\nThe fact that braces can be \"expanded\" from relatively simple patterns makes them ideal for quickly generating test fixtures, file paths, and similar use cases.\n\n## Brace matching\n\nIn addition to _expansion_, brace patterns are also useful for performing regular-expression-like matching.\n\nFor example, the pattern `foo/{1..3}/bar` would match any of following strings:\n\n```\nfoo/1/bar\nfoo/2/bar\nfoo/3/bar\n```\n\nBut not:\n\n```\nbaz/1/qux\nbaz/2/qux\nbaz/3/qux\n```\n\nBraces can also be combined with [glob patterns](https://github.com/jonschlinkert/micromatch) to perform more advanced wildcard matching. For example, the pattern `*/{1..3}/*` would match any of following strings:\n\n```\nfoo/1/bar\nfoo/2/bar\nfoo/3/bar\nbaz/1/qux\nbaz/2/qux\nbaz/3/qux\n```\n\n## Brace matching pitfalls\n\nAlthough brace patterns offer a user-friendly way of matching ranges or sets of strings, there are also some major disadvantages and potential risks you should be aware of.\n\n### tldr\n\n**\"brace bombs\"**\n\n* brace expansion can eat up a huge amount of processing resources\n* as brace patterns increase _linearly in size_, the system resources required to expand the pattern increase exponentially\n* users can accidentally (or intentially) exhaust your system's resources resulting in the equivalent of a DoS attack (bonus: no programming knowledge is required!)\n\nFor a more detailed explanation with examples, see the [geometric complexity](#geometric-complexity) section.\n\n### The solution\n\nJump to the [performance section](#performance) to see how Braces solves this problem in comparison to other libraries.\n\n### Geometric complexity\n\nAt minimum, brace patterns with sets limited to two elements have quadradic or `O(n^2)` complexity. But the complexity of the algorithm increases exponentially as the number of sets, _and elements per set_, increases, which is `O(n^c)`.\n\nFor example, the following sets demonstrate quadratic (`O(n^2)`) complexity:\n\n```\n{1,2}{3,4}      => (2X2)    => 13 14 23 24\n{1,2}{3,4}{5,6} => (2X2X2)  => 135 136 145 146 235 236 245 246\n```\n\nBut add an element to a set, and we get a n-fold Cartesian product with `O(n^c)` complexity:\n\n```\n{1,2,3}{4,5,6}{7,8,9} => (3X3X3) => 147 148 149 157 158 159 167 168 169 247 248 \n                                    249 257 258 259 267 268 269 347 348 349 357 \n                                    358 359 367 368 369\n```\n\nNow, imagine how this complexity grows given that each element is a n-tuple:\n\n```\n{1..100}{1..100}         => (100X100)     => 10,000 elements (38.4 kB)\n{1..100}{1..100}{1..100} => (100X100X100) => 1,000,000 elements (5.76 MB)\n```\n\nAlthough these examples are clearly contrived, they demonstrate how brace patterns can quickly grow out of control.\n\n**More information**\n\nInterested in learning more about brace expansion?\n\n* [linuxjournal/bash-brace-expansion](http://www.linuxjournal.com/content/bash-brace-expansion)\n* [rosettacode/Brace_expansion](https://rosettacode.org/wiki/Brace_expansion)\n* [cartesian product](https://en.wikipedia.org/wiki/Cartesian_product)\n\n</details>\n\n## Performance\n\nBraces is not only screaming fast, it's also more accurate the other brace expansion libraries.\n\n### Better algorithms\n\nFortunately there is a solution to the [\"brace bomb\" problem](#brace-matching-pitfalls): _don't expand brace patterns into an array when they're used for matching_.\n\nInstead, convert the pattern into an optimized regular expression. This is easier said than done, and braces is the only library that does this currently.\n\n**The proof is in the numbers**\n\nMinimatch gets exponentially slower as patterns increase in complexity, braces does not. The following results were generated using `braces()` and `minimatch.braceExpand()`, respectively.\n\n| **Pattern**                 | **braces**         | **[minimatch][]**            |\n| ---                         | ---                | ---                          |\n| `{1..9007199254740991}`[^1] | `298 B` (5ms 459μs)|  N/A (freezes)               |\n| `{1..1000000000000000}`     | `41 B` (1ms 15μs)  |  N/A (freezes)               |\n| `{1..100000000000000}`      | `40 B` (890μs)     |  N/A (freezes)               |\n| `{1..10000000000000}`       | `39 B` (2ms 49μs)  |  N/A (freezes)               |\n| `{1..1000000000000}`        | `38 B` (608μs)     |  N/A (freezes)               |\n| `{1..100000000000}`         | `37 B` (397μs)     |  N/A (freezes)               |\n| `{1..10000000000}`          | `35 B` (983μs)     |  N/A (freezes)               |\n| `{1..1000000000}`           | `34 B` (798μs)     |  N/A (freezes)               |\n| `{1..100000000}`            | `33 B` (733μs)     |  N/A (freezes)               |\n| `{1..10000000}`             | `32 B` (5ms 632μs) | `78.89 MB` (16s 388ms 569μs) |\n| `{1..1000000}`              | `31 B` (1ms 381μs) | `6.89 MB` (1s 496ms 887μs)   |\n| `{1..100000}`               | `30 B` (950μs)     | `588.89 kB` (146ms 921μs)    |\n| `{1..10000}`                | `29 B` (1ms 114μs) | `48.89 kB` (14ms 187μs)      |\n| `{1..1000}`                 | `28 B` (760μs)     | `3.89 kB` (1ms 453μs)        |\n| `{1..100}`                  | `22 B` (345μs)     | `291 B` (196μs)              |\n| `{1..10}`                   | `10 B` (533μs)     | `20 B` (37μs)                |\n| `{1..3}`                    | `7 B` (190μs)      | `5 B` (27μs)                 |\n\n### Faster algorithms\n\nWhen you need expansion, braces is still much faster.\n\n_(the following results were generated using `braces.expand()` and `minimatch.braceExpand()`, respectively)_\n\n| **Pattern**     | **braces**                  | **[minimatch][]**            |\n| ---             | ---                         | ---                          |\n| `{1..10000000}` | `78.89 MB` (2s 698ms 642μs) | `78.89 MB` (18s 601ms 974μs) |\n| `{1..1000000}`  | `6.89 MB` (458ms 576μs)     | `6.89 MB` (1s 491ms 621μs)   |\n| `{1..100000}`   | `588.89 kB` (20ms 728μs)    | `588.89 kB` (156ms 919μs)    |\n| `{1..10000}`    | `48.89 kB` (2ms 202μs)      | `48.89 kB` (13ms 641μs)      |\n| `{1..1000}`     | `3.89 kB` (1ms 796μs)       | `3.89 kB` (1ms 958μs)        |\n| `{1..100}`      | `291 B` (424μs)             | `291 B` (211μs)              |\n| `{1..10}`       | `20 B` (487μs)              | `20 B` (72μs)                |\n| `{1..3}`        | `5 B` (166μs)               | `5 B` (27μs)                 |\n\nIf you'd like to run these comparisons yourself, see [test/support/generate.js](test/support/generate.js).\n\n## Benchmarks\n\n### Running benchmarks\n\nInstall dev dependencies:\n\n```bash\nnpm i -d && npm benchmark\n```\n\n### Latest results\n\nBraces is more accurate, without sacrificing performance.\n\n```bash\n# range (expanded)\n  braces x 29,040 ops/sec ±3.69% (91 runs sampled))\n  minimatch x 4,735 ops/sec ±1.28% (90 runs sampled)\n\n# range (optimized for regex)\n  braces x 382,878 ops/sec ±0.56% (94 runs sampled)\n  minimatch x 1,040 ops/sec ±0.44% (93 runs sampled)\n\n# nested ranges (expanded)\n  braces x 19,744 ops/sec ±2.27% (92 runs sampled))\n  minimatch x 4,579 ops/sec ±0.50% (93 runs sampled)\n\n# nested ranges (optimized for regex)\n  braces x 246,019 ops/sec ±2.02% (93 runs sampled)\n  minimatch x 1,028 ops/sec ±0.39% (94 runs sampled)\n\n# set (expanded) \n  braces x 138,641 ops/sec ±0.53% (95 runs sampled)\n  minimatch x 219,582 ops/sec ±0.98% (94 runs sampled)\n\n# set (optimized for regex)\n  braces x 388,408 ops/sec ±0.41% (95 runs sampled)\n  minimatch x 44,724 ops/sec ±0.91% (89 runs sampled)\n\n# nested sets (expanded)\n  braces x 84,966 ops/sec ±0.48% (94 runs sampled)\n  minimatch x 140,720 ops/sec ±0.37% (95 runs sampled)\n\n# nested sets (optimized for regex)\n  braces x 263,340 ops/sec ±2.06% (92 runs sampled)\n  minimatch x 28,714 ops/sec ±0.40% (90 runs sampled)\n```\n\n## About\n\n<details>\n<summary><strong>Contributing</strong></summary>\n\nPull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).\n\n</details>\n\n<details>\n<summary><strong>Running Tests</strong></summary>\n\nRunning and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:\n\n```sh\n$ npm install && npm test\n```\n\n</details>\n\n<details>\n<summary><strong>Building docs</strong></summary>\n\n_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_\n\nTo generate the readme, run the following command:\n\n```sh\n$ npm install -g verbose/verb#dev verb-generate-readme && verb\n```\n\n</details>\n\n### Contributors\n\n| **Commits** | **Contributor** |  \n| --- | --- |  \n| 197 | [jonschlinkert](https://github.com/jonschlinkert) |  \n| 4   | [doowb](https://github.com/doowb) |  \n| 1   | [es128](https://github.com/es128) |  \n| 1   | [eush77](https://github.com/eush77) |  \n| 1   | [hemanth](https://github.com/hemanth) |  \n| 1   | [wtgtybhertgeghgtwtg](https://github.com/wtgtybhertgeghgtwtg) |  \n\n### Author\n\n**Jon Schlinkert**\n\n* [GitHub Profile](https://github.com/jonschlinkert)\n* [Twitter Profile](https://twitter.com/jonschlinkert)\n* [LinkedIn Profile](https://linkedin.com/in/jonschlinkert)\n\n### License\n\nCopyright © 2019, [Jon Schlinkert](https://github.com/jonschlinkert).\nReleased under the [MIT License](LICENSE).\n\n***\n\n_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.8.0, on April 08, 2019._/CHANGELOG.md\u0014\u001b# Release history\n\nAll notable changes to this project will be documented in this file.\n\nThe format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)\nand this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).\n\n<details>\n  <summary><strong>Guiding Principles</strong></summary>\n\n- Changelogs are for humans, not machines.\n- There should be an entry for every single version.\n- The same types of changes should be grouped.\n- Versions and sections should be linkable.\n- The latest version comes first.\n- The release date of each versions is displayed.\n- Mention whether you follow Semantic Versioning.\n\n</details>\n\n<details>\n  <summary><strong>Types of changes</strong></summary>\n\nChangelog entries are classified using the following labels _(from [keep-a-changelog](http://keepachangelog.com/)_):\n\n- `Added` for new features.\n- `Changed` for changes in existing functionality.\n- `Deprecated` for soon-to-be removed features.\n- `Removed` for now removed features.\n- `Fixed` for any bug fixes.\n- `Security` in case of vulnerabilities.\n\n</details>\n\n## [3.0.0] - 2018-04-08\n\nv3.0 is a complete refactor, resulting in a faster, smaller codebase, with fewer deps, and a more accurate parser and compiler. \n\n**Breaking Changes**\n\n- The undocumented `.makeRe` method was removed\n\n**Non-breaking changes**\n\n- Caching was removed\n\n## [2.3.2] - 2018-04-08\n\n- start refactoring\n- cover sets\n- better range handling\n\n## [2.3.1] - 2018-02-17\n\n- Remove unnecessary escape in Regex. (#14)\n\n## [2.3.0] - 2017-10-19\n\n- minor code reorganization\n- optimize regex\n- expose `maxLength` option\n\n## [2.2.1] - 2017-05-30\n\n- don't condense when braces contain extglobs\n\n## [2.2.0] - 2017-05-28\n\n- ensure word boundaries are preserved\n- fixes edge case where extglob characters precede a brace pattern\n\n## [2.1.1] - 2017-04-27\n\n- use snapdragon-node\n- handle edge case\n- optimizations, lint\n\n## [2.0.4] - 2017-04-11\n\n- pass opts to compiler\n- minor optimization in create method\n- re-write parser handlers to remove negation regex\n\n## [2.0.3] - 2016-12-10\n\n- use split-string\n- clear queue at the end\n- adds sequences example\n- add unit tests\n\n## [2.0.2] - 2016-10-21\n\n- fix comma handling in nested extglobs\n\n## [2.0.1] - 2016-10-20\n\n- add comments\n- more tests, ensure quotes are stripped\n\n## [2.0.0] - 2016-10-19\n\n- don't expand braces inside character classes\n- add quantifier pattern\n\n## [1.8.5] - 2016-05-21\n\n- Refactor (#10)\n\n## [1.8.4] - 2016-04-20\n\n- fixes https://github.com/jonschlinkert/micromatch/issues/66\n\n## [1.8.0] - 2015-03-18\n\n- adds exponent examples, tests\n- fixes the first example in https://github.com/jonschlinkert/micromatch/issues/38\n\n## [1.6.0] - 2015-01-30\n\n- optimizations, `bash` mode:\n- improve path escaping\n\n## [1.5.0] - 2015-01-28\n\n- Merge pull request #5 from eush77/lib-files\n\n## [1.4.0] - 2015-01-24\n\n- add extglob tests\n- externalize exponent function\n- better whitespace handling\n\n## [1.3.0] - 2015-01-24\n\n- make regex patterns explicity\n\n## [1.1.0] - 2015-01-11\n\n- don't create a match group with `makeRe`\n\n## [1.0.0] - 2014-12-23\n\n- Merge commit '97b05f5544f8348736a8efaecf5c32bbe3e2ad6e'\n- support empty brace syntax\n- better bash coverage\n- better support for regex strings\n\n## [0.1.4] - 2014-11-14\n\n- improve recognition of bad args, recognize mismatched argument types\n- support escaping\n- remove pathname-expansion\n- support whitespace in patterns\n\n## [0.1.0]\n\n- first commit\n\n[2.3.2]: https://github.com/micromatch/braces/compare/2.3.1...2.3.2\n[2.3.1]: https://github.com/micromatch/braces/compare/2.3.0...2.3.1\n[2.3.0]: https://github.com/micromatch/braces/compare/2.2.1...2.3.0\n[2.2.1]: https://github.com/micromatch/braces/compare/2.2.0...2.2.1\n[2.2.0]: https://github.com/micromatch/braces/compare/2.1.1...2.2.0\n[2.1.1]: https://github.com/micromatch/braces/compare/2.1.0...2.1.1\n[2.1.0]: https://github.com/micromatch/braces/compare/2.0.4...2.1.0\n[2.0.4]: https://github.com/micromatch/braces/compare/2.0.3...2.0.4\n[2.0.3]: https://github.com/micromatch/braces/compare/2.0.2...2.0.3\n[2.0.2]: https://github.com/micromatch/braces/compare/2.0.1...2.0.2\n[2.0.1]: https://github.com/micromatch/braces/compare/2.0.0...2.0.1\n[2.0.0]: https://github.com/micromatch/braces/compare/1.8.5...2.0.0\n[1.8.5]: https://github.com/micromatch/braces/compare/1.8.4...1.8.5\n[1.8.4]: https://github.com/micromatch/braces/compare/1.8.0...1.8.4\n[1.8.0]: https://github.com/micromatch/braces/compare/1.6.0...1.8.0\n[1.6.0]: https://github.com/micromatch/braces/compare/1.5.0...1.6.0\n[1.5.0]: https://github.com/micromatch/braces/compare/1.4.0...1.5.0\n[1.4.0]: https://github.com/micromatch/braces/compare/1.3.0...1.4.0\n[1.3.0]: https://github.com/micromatch/braces/compare/1.2.0...1.3.0\n[1.2.0]: https://github.com/micromatch/braces/compare/1.1.0...1.2.0\n[1.1.0]: https://github.com/micromatch/braces/compare/1.0.0...1.1.0\n[1.0.0]: https://github.com/micromatch/braces/compare/0.1.4...1.0.0\n[0.1.4]: https://github.com/micromatch/braces/compare/0.1.0...0.1.4\n\n[Unreleased]: https://github.com/micromatch/braces/compare/0.1.0...HEAD\n[keep-a-changelog]: https://github.com/olivierlacan/keep-a-changelog"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/YnJvd3NlcnNsaXN0QDQuMjEuNQ==",
    "content": "/error.js\u0001+function BrowserslistError(message) {\n  this.name = 'BrowserslistError'\n  this.message = message\n  this.browserslist = true\n  if (Error.captureStackTrace) {\n    Error.captureStackTrace(this, BrowserslistError)\n  }\n}\n\nBrowserslistError.prototype = Error.prototype\n\nmodule.exports = BrowserslistError\n/error.d.tsědeclare class BrowserslistError extends Error {\n  constructor(message: any)\n  name: 'BrowserslistError'\n  browserslist: true\n}\n\nexport = BrowserslistError\n/index.jsŀvar jsReleases = require('node-releases/data/processed/envs.json')\nvar agents = require('caniuse-lite/dist/unpacker/agents').agents\nvar jsEOL = require('node-releases/data/release-schedule/release-schedule.json')\nvar path = require('path')\nvar e2c = require('electron-to-chromium/versions')\n\nvar BrowserslistError = require('./error')\nvar parse = require('./parse')\nvar env = require('./node') // Will load browser.js in webpack\n\nvar YEAR = 365.259641 * 24 * 60 * 60 * 1000\nvar ANDROID_EVERGREEN_FIRST = 37\n\n// Helpers\n\nfunction isVersionsMatch(versionA, versionB) {\n  return (versionA + '.').indexOf(versionB + '.') === 0\n}\n\nfunction isEolReleased(name) {\n  var version = name.slice(1)\n  return browserslist.nodeVersions.some(function (i) {\n    return isVersionsMatch(i, version)\n  })\n}\n\nfunction normalize(versions) {\n  return versions.filter(function (version) {\n    return typeof version === 'string'\n  })\n}\n\nfunction normalizeElectron(version) {\n  var versionToUse = version\n  if (version.split('.').length === 3) {\n    versionToUse = version.split('.').slice(0, -1).join('.')\n  }\n  return versionToUse\n}\n\nfunction nameMapper(name) {\n  return function mapName(version) {\n    return name + ' ' + version\n  }\n}\n\nfunction getMajor(version) {\n  return parseInt(version.split('.')[0])\n}\n\nfunction getMajorVersions(released, number) {\n  if (released.length === 0) return []\n  var majorVersions = uniq(released.map(getMajor))\n  var minimum = majorVersions[majorVersions.length - number]\n  if (!minimum) {\n    return released\n  }\n  var selected = []\n  for (var i = released.length - 1; i >= 0; i--) {\n    if (minimum > getMajor(released[i])) break\n    selected.unshift(released[i])\n  }\n  return selected\n}\n\nfunction uniq(array) {\n  var filtered = []\n  for (var i = 0; i < array.length; i++) {\n    if (filtered.indexOf(array[i]) === -1) filtered.push(array[i])\n  }\n  return filtered\n}\n\nfunction fillUsage(result, name, data) {\n  for (var i in data) {\n    result[name + ' ' + i] = data[i]\n  }\n}\n\nfunction generateFilter(sign, version) {\n  version = parseFloat(version)\n  if (sign === '>') {\n    return function (v) {\n      return parseFloat(v) > version\n    }\n  } else if (sign === '>=') {\n    return function (v) {\n      return parseFloat(v) >= version\n    }\n  } else if (sign === '<') {\n    return function (v) {\n      return parseFloat(v) < version\n    }\n  } else {\n    return function (v) {\n      return parseFloat(v) <= version\n    }\n  }\n}\n\nfunction generateSemverFilter(sign, version) {\n  version = version.split('.').map(parseSimpleInt)\n  version[1] = version[1] || 0\n  version[2] = version[2] || 0\n  if (sign === '>') {\n    return function (v) {\n      v = v.split('.').map(parseSimpleInt)\n      return compareSemver(v, version) > 0\n    }\n  } else if (sign === '>=') {\n    return function (v) {\n      v = v.split('.').map(parseSimpleInt)\n      return compareSemver(v, version) >= 0\n    }\n  } else if (sign === '<') {\n    return function (v) {\n      v = v.split('.').map(parseSimpleInt)\n      return compareSemver(version, v) > 0\n    }\n  } else {\n    return function (v) {\n      v = v.split('.').map(parseSimpleInt)\n      return compareSemver(version, v) >= 0\n    }\n  }\n}\n\nfunction parseSimpleInt(x) {\n  return parseInt(x)\n}\n\nfunction compare(a, b) {\n  if (a < b) return -1\n  if (a > b) return +1\n  return 0\n}\n\nfunction compareSemver(a, b) {\n  return (\n    compare(parseInt(a[0]), parseInt(b[0])) ||\n    compare(parseInt(a[1] || '0'), parseInt(b[1] || '0')) ||\n    compare(parseInt(a[2] || '0'), parseInt(b[2] || '0'))\n  )\n}\n\n// this follows the npm-like semver behavior\nfunction semverFilterLoose(operator, range) {\n  range = range.split('.').map(parseSimpleInt)\n  if (typeof range[1] === 'undefined') {\n    range[1] = 'x'\n  }\n  // ignore any patch version because we only return minor versions\n  // range[2] = 'x'\n  switch (operator) {\n    case '<=':\n      return function (version) {\n        version = version.split('.').map(parseSimpleInt)\n        return compareSemverLoose(version, range) <= 0\n      }\n    case '>=':\n    default:\n      return function (version) {\n        version = version.split('.').map(parseSimpleInt)\n        return compareSemverLoose(version, range) >= 0\n      }\n  }\n}\n\n// this follows the npm-like semver behavior\nfunction compareSemverLoose(version, range) {\n  if (version[0] !== range[0]) {\n    return version[0] < range[0] ? -1 : +1\n  }\n  if (range[1] === 'x') {\n    return 0\n  }\n  if (version[1] !== range[1]) {\n    return version[1] < range[1] ? -1 : +1\n  }\n  return 0\n}\n\nfunction resolveVersion(data, version) {\n  if (data.versions.indexOf(version) !== -1) {\n    return version\n  } else if (browserslist.versionAliases[data.name][version]) {\n    return browserslist.versionAliases[data.name][version]\n  } else {\n    return false\n  }\n}\n\nfunction normalizeVersion(data, version) {\n  var resolved = resolveVersion(data, version)\n  if (resolved) {\n    return resolved\n  } else if (data.versions.length === 1) {\n    return data.versions[0]\n  } else {\n    return false\n  }\n}\n\nfunction filterByYear(since, context) {\n  since = since / 1000\n  return Object.keys(agents).reduce(function (selected, name) {\n    var data = byName(name, context)\n    if (!data) return selected\n    var versions = Object.keys(data.releaseDate).filter(function (v) {\n      var date = data.releaseDate[v]\n      return date !== null && date >= since\n    })\n    return selected.concat(versions.map(nameMapper(data.name)))\n  }, [])\n}\n\nfunction cloneData(data) {\n  return {\n    name: data.name,\n    versions: data.versions,\n    released: data.released,\n    releaseDate: data.releaseDate\n  }\n}\n\nfunction mapVersions(data, map) {\n  data.versions = data.versions.map(function (i) {\n    return map[i] || i\n  })\n  data.released = data.released.map(function (i) {\n    return map[i] || i\n  })\n  var fixedDate = {}\n  for (var i in data.releaseDate) {\n    fixedDate[map[i] || i] = data.releaseDate[i]\n  }\n  data.releaseDate = fixedDate\n  return data\n}\n\nfunction byName(name, context) {\n  name = name.toLowerCase()\n  name = browserslist.aliases[name] || name\n  if (context.mobileToDesktop && browserslist.desktopNames[name]) {\n    var desktop = browserslist.data[browserslist.desktopNames[name]]\n    if (name === 'android') {\n      return normalizeAndroidData(cloneData(browserslist.data[name]), desktop)\n    } else {\n      var cloned = cloneData(desktop)\n      cloned.name = name\n      if (name === 'op_mob') {\n        cloned = mapVersions(cloned, { '10.0-10.1': '10' })\n      }\n      return cloned\n    }\n  }\n  return browserslist.data[name]\n}\n\nfunction normalizeAndroidVersions(androidVersions, chromeVersions) {\n  var firstEvergreen = ANDROID_EVERGREEN_FIRST\n  var last = chromeVersions[chromeVersions.length - 1]\n  return androidVersions\n    .filter(function (version) {\n      return /^(?:[2-4]\\.|[34]$)/.test(version)\n    })\n    .concat(chromeVersions.slice(firstEvergreen - last - 1))\n}\n\nfunction normalizeAndroidData(android, chrome) {\n  android.released = normalizeAndroidVersions(android.released, chrome.released)\n  android.versions = normalizeAndroidVersions(android.versions, chrome.versions)\n  return android\n}\n\nfunction checkName(name, context) {\n  var data = byName(name, context)\n  if (!data) throw new BrowserslistError('Unknown browser ' + name)\n  return data\n}\n\nfunction unknownQuery(query) {\n  return new BrowserslistError(\n    'Unknown browser query `' +\n      query +\n      '`. ' +\n      'Maybe you are using old Browserslist or made typo in query.'\n  )\n}\n\nfunction filterAndroid(list, versions, context) {\n  if (context.mobileToDesktop) return list\n  var released = browserslist.data.android.released\n  var last = released[released.length - 1]\n  var diff = last - ANDROID_EVERGREEN_FIRST - versions\n  if (diff > 0) {\n    return list.slice(-1)\n  } else {\n    return list.slice(diff - 1)\n  }\n}\n\nfunction resolve(queries, context) {\n  return parse(QUERIES, queries).reduce(function (result, node, index) {\n    if (node.not && index === 0) {\n      throw new BrowserslistError(\n        'Write any browsers query (for instance, `defaults`) ' +\n          'before `' +\n          node.query +\n          '`'\n      )\n    }\n    var type = QUERIES[node.type]\n    var array = type.select.call(browserslist, context, node).map(function (j) {\n      var parts = j.split(' ')\n      if (parts[1] === '0') {\n        return parts[0] + ' ' + byName(parts[0], context).versions[0]\n      } else {\n        return j\n      }\n    })\n\n    if (node.compose === 'and') {\n      if (node.not) {\n        return result.filter(function (j) {\n          return array.indexOf(j) === -1\n        })\n      } else {\n        return result.filter(function (j) {\n          return array.indexOf(j) !== -1\n        })\n      }\n    } else {\n      if (node.not) {\n        var filter = {}\n        array.forEach(function (j) {\n          filter[j] = true\n        })\n        return result.filter(function (j) {\n          return !filter[j]\n        })\n      }\n      return result.concat(array)\n    }\n  }, [])\n}\n\nfunction prepareOpts(opts) {\n  if (typeof opts === 'undefined') opts = {}\n\n  if (typeof opts.path === 'undefined') {\n    opts.path = path.resolve ? path.resolve('.') : '.'\n  }\n\n  return opts\n}\n\nfunction prepareQueries(queries, opts) {\n  if (typeof queries === 'undefined' || queries === null) {\n    var config = browserslist.loadConfig(opts)\n    if (config) {\n      queries = config\n    } else {\n      queries = browserslist.defaults\n    }\n  }\n\n  return queries\n}\n\nfunction checkQueries(queries) {\n  if (!(typeof queries === 'string' || Array.isArray(queries))) {\n    throw new BrowserslistError(\n      'Browser queries must be an array or string. Got ' + typeof queries + '.'\n    )\n  }\n}\n\nvar cache = {}\n\nfunction browserslist(queries, opts) {\n  opts = prepareOpts(opts)\n  queries = prepareQueries(queries, opts)\n  checkQueries(queries)\n\n  var context = {\n    ignoreUnknownVersions: opts.ignoreUnknownVersions,\n    dangerousExtend: opts.dangerousExtend,\n    mobileToDesktop: opts.mobileToDesktop,\n    path: opts.path,\n    env: opts.env\n  }\n\n  env.oldDataWarning(browserslist.data)\n  var stats = env.getStat(opts, browserslist.data)\n  if (stats) {\n    context.customUsage = {}\n    for (var browser in stats) {\n      fillUsage(context.customUsage, browser, stats[browser])\n    }\n  }\n\n  var cacheKey = JSON.stringify([queries, context])\n  if (cache[cacheKey]) return cache[cacheKey]\n\n  var result = uniq(resolve(queries, context)).sort(function (name1, name2) {\n    name1 = name1.split(' ')\n    name2 = name2.split(' ')\n    if (name1[0] === name2[0]) {\n      // assumptions on caniuse data\n      // 1) version ranges never overlaps\n      // 2) if version is not a range, it never contains `-`\n      var version1 = name1[1].split('-')[0]\n      var version2 = name2[1].split('-')[0]\n      return compareSemver(version2.split('.'), version1.split('.'))\n    } else {\n      return compare(name1[0], name2[0])\n    }\n  })\n  if (!env.env.BROWSERSLIST_DISABLE_CACHE) {\n    cache[cacheKey] = result\n  }\n  return result\n}\n\nbrowserslist.parse = function (queries, opts) {\n  opts = prepareOpts(opts)\n  queries = prepareQueries(queries, opts)\n  checkQueries(queries)\n  return parse(QUERIES, queries)\n}\n\n// Will be filled by Can I Use data below\nbrowserslist.cache = {}\nbrowserslist.data = {}\nbrowserslist.usage = {\n  global: {},\n  custom: null\n}\n\n// Default browsers query\nbrowserslist.defaults = ['> 0.5%', 'last 2 versions', 'Firefox ESR', 'not dead']\n\n// Browser names aliases\nbrowserslist.aliases = {\n  fx: 'firefox',\n  ff: 'firefox',\n  ios: 'ios_saf',\n  explorer: 'ie',\n  blackberry: 'bb',\n  explorermobile: 'ie_mob',\n  operamini: 'op_mini',\n  operamobile: 'op_mob',\n  chromeandroid: 'and_chr',\n  firefoxandroid: 'and_ff',\n  ucandroid: 'and_uc',\n  qqandroid: 'and_qq'\n}\n\n// Can I Use only provides a few versions for some browsers (e.g. and_chr).\n// Fallback to a similar browser for unknown versions\nbrowserslist.desktopNames = {\n  and_chr: 'chrome',\n  and_ff: 'firefox',\n  ie_mob: 'ie',\n  op_mob: 'opera',\n  android: 'chrome' // has extra processing logic\n}\n\n// Aliases to work with joined versions like `ios_saf 7.0-7.1`\nbrowserslist.versionAliases = {}\n\nbrowserslist.clearCaches = env.clearCaches\nbrowserslist.parseConfig = env.parseConfig\nbrowserslist.readConfig = env.readConfig\nbrowserslist.findConfig = env.findConfig\nbrowserslist.loadConfig = env.loadConfig\n\nbrowserslist.coverage = function (browsers, stats) {\n  var data\n  if (typeof stats === 'undefined') {\n    data = browserslist.usage.global\n  } else if (stats === 'my stats') {\n    var opts = {}\n    opts.path = path.resolve ? path.resolve('.') : '.'\n    var customStats = env.getStat(opts)\n    if (!customStats) {\n      throw new BrowserslistError('Custom usage statistics was not provided')\n    }\n    data = {}\n    for (var browser in customStats) {\n      fillUsage(data, browser, customStats[browser])\n    }\n  } else if (typeof stats === 'string') {\n    if (stats.length > 2) {\n      stats = stats.toLowerCase()\n    } else {\n      stats = stats.toUpperCase()\n    }\n    env.loadCountry(browserslist.usage, stats, browserslist.data)\n    data = browserslist.usage[stats]\n  } else {\n    if ('dataByBrowser' in stats) {\n      stats = stats.dataByBrowser\n    }\n    data = {}\n    for (var name in stats) {\n      for (var version in stats[name]) {\n        data[name + ' ' + version] = stats[name][version]\n      }\n    }\n  }\n\n  return browsers.reduce(function (all, i) {\n    var usage = data[i]\n    if (usage === undefined) {\n      usage = data[i.replace(/ \\S+$/, ' 0')]\n    }\n    return all + (usage || 0)\n  }, 0)\n}\n\nfunction nodeQuery(context, node) {\n  var matched = browserslist.nodeVersions.filter(function (i) {\n    return isVersionsMatch(i, node.version)\n  })\n  if (matched.length === 0) {\n    if (context.ignoreUnknownVersions) {\n      return []\n    } else {\n      throw new BrowserslistError(\n        'Unknown version ' + node.version + ' of Node.js'\n      )\n    }\n  }\n  return ['node ' + matched[matched.length - 1]]\n}\n\nfunction sinceQuery(context, node) {\n  var year = parseInt(node.year)\n  var month = parseInt(node.month || '01') - 1\n  var day = parseInt(node.day || '01')\n  return filterByYear(Date.UTC(year, month, day, 0, 0, 0), context)\n}\n\nfunction coverQuery(context, node) {\n  var coverage = parseFloat(node.coverage)\n  var usage = browserslist.usage.global\n  if (node.place) {\n    if (node.place.match(/^my\\s+stats$/i)) {\n      if (!context.customUsage) {\n        throw new BrowserslistError('Custom usage statistics was not provided')\n      }\n      usage = context.customUsage\n    } else {\n      var place\n      if (node.place.length === 2) {\n        place = node.place.toUpperCase()\n      } else {\n        place = node.place.toLowerCase()\n      }\n      env.loadCountry(browserslist.usage, place, browserslist.data)\n      usage = browserslist.usage[place]\n    }\n  }\n  var versions = Object.keys(usage).sort(function (a, b) {\n    return usage[b] - usage[a]\n  })\n  var coveraged = 0\n  var result = []\n  var version\n  for (var i = 0; i < versions.length; i++) {\n    version = versions[i]\n    if (usage[version] === 0) break\n    coveraged += usage[version]\n    result.push(version)\n    if (coveraged >= coverage) break\n  }\n  return result\n}\n\nvar QUERIES = {\n  last_major_versions: {\n    matches: ['versions'],\n    regexp: /^last\\s+(\\d+)\\s+major\\s+versions?$/i,\n    select: function (context, node) {\n      return Object.keys(agents).reduce(function (selected, name) {\n        var data = byName(name, context)\n        if (!data) return selected\n        var list = getMajorVersions(data.released, node.versions)\n        list = list.map(nameMapper(data.name))\n        if (data.name === 'android') {\n          list = filterAndroid(list, node.versions, context)\n        }\n        return selected.concat(list)\n      }, [])\n    }\n  },\n  last_versions: {\n    matches: ['versions'],\n    regexp: /^last\\s+(\\d+)\\s+versions?$/i,\n    select: function (context, node) {\n      return Object.keys(agents).reduce(function (selected, name) {\n        var data = byName(name, context)\n        if (!data) return selected\n        var list = data.released.slice(-node.versions)\n        list = list.map(nameMapper(data.name))\n        if (data.name === 'android') {\n          list = filterAndroid(list, node.versions, context)\n        }\n        return selected.concat(list)\n      }, [])\n    }\n  },\n  last_electron_major_versions: {\n    matches: ['versions'],\n    regexp: /^last\\s+(\\d+)\\s+electron\\s+major\\s+versions?$/i,\n    select: function (context, node) {\n      var validVersions = getMajorVersions(Object.keys(e2c), node.versions)\n      return validVersions.map(function (i) {\n        return 'chrome ' + e2c[i]\n      })\n    }\n  },\n  last_node_major_versions: {\n    matches: ['versions'],\n    regexp: /^last\\s+(\\d+)\\s+node\\s+major\\s+versions?$/i,\n    select: function (context, node) {\n      return getMajorVersions(browserslist.nodeVersions, node.versions).map(\n        function (version) {\n          return 'node ' + version\n        }\n      )\n    }\n  },\n  last_browser_major_versions: {\n    matches: ['versions', 'browser'],\n    regexp: /^last\\s+(\\d+)\\s+(\\w+)\\s+major\\s+versions?$/i,\n    select: function (context, node) {\n      var data = checkName(node.browser, context)\n      var validVersions = getMajorVersions(data.released, node.versions)\n      var list = validVersions.map(nameMapper(data.name))\n      if (data.name === 'android') {\n        list = filterAndroid(list, node.versions, context)\n      }\n      return list\n    }\n  },\n  last_electron_versions: {\n    matches: ['versions'],\n    regexp: /^last\\s+(\\d+)\\s+electron\\s+versions?$/i,\n    select: function (context, node) {\n      return Object.keys(e2c)\n        .slice(-node.versions)\n        .map(function (i) {\n          return 'chrome ' + e2c[i]\n        })\n    }\n  },\n  last_node_versions: {\n    matches: ['versions'],\n    regexp: /^last\\s+(\\d+)\\s+node\\s+versions?$/i,\n    select: function (context, node) {\n      return browserslist.nodeVersions\n        .slice(-node.versions)\n        .map(function (version) {\n          return 'node ' + version\n        })\n    }\n  },\n  last_browser_versions: {\n    matches: ['versions', 'browser'],\n    regexp: /^last\\s+(\\d+)\\s+(\\w+)\\s+versions?$/i,\n    select: function (context, node) {\n      var data = checkName(node.browser, context)\n      var list = data.released.slice(-node.versions).map(nameMapper(data.name))\n      if (data.name === 'android') {\n        list = filterAndroid(list, node.versions, context)\n      }\n      return list\n    }\n  },\n  unreleased_versions: {\n    matches: [],\n    regexp: /^unreleased\\s+versions$/i,\n    select: function (context) {\n      return Object.keys(agents).reduce(function (selected, name) {\n        var data = byName(name, context)\n        if (!data) return selected\n        var list = data.versions.filter(function (v) {\n          return data.released.indexOf(v) === -1\n        })\n        list = list.map(nameMapper(data.name))\n        return selected.concat(list)\n      }, [])\n    }\n  },\n  unreleased_electron_versions: {\n    matches: [],\n    regexp: /^unreleased\\s+electron\\s+versions?$/i,\n    select: function () {\n      return []\n    }\n  },\n  unreleased_browser_versions: {\n    matches: ['browser'],\n    regexp: /^unreleased\\s+(\\w+)\\s+versions?$/i,\n    select: function (context, node) {\n      var data = checkName(node.browser, context)\n      return data.versions\n        .filter(function (v) {\n          return data.released.indexOf(v) === -1\n        })\n        .map(nameMapper(data.name))\n    }\n  },\n  last_years: {\n    matches: ['years'],\n    regexp: /^last\\s+(\\d*.?\\d+)\\s+years?$/i,\n    select: function (context, node) {\n      return filterByYear(Date.now() - YEAR * node.years, context)\n    }\n  },\n  since_y: {\n    matches: ['year'],\n    regexp: /^since (\\d+)$/i,\n    select: sinceQuery\n  },\n  since_y_m: {\n    matches: ['year', 'month'],\n    regexp: /^since (\\d+)-(\\d+)$/i,\n    select: sinceQuery\n  },\n  since_y_m_d: {\n    matches: ['year', 'month', 'day'],\n    regexp: /^since (\\d+)-(\\d+)-(\\d+)$/i,\n    select: sinceQuery\n  },\n  popularity: {\n    matches: ['sign', 'popularity'],\n    regexp: /^(>=?|<=?)\\s*(\\d+|\\d+\\.\\d+|\\.\\d+)%$/,\n    select: function (context, node) {\n      var popularity = parseFloat(node.popularity)\n      var usage = browserslist.usage.global\n      return Object.keys(usage).reduce(function (result, version) {\n        if (node.sign === '>') {\n          if (usage[version] > popularity) {\n            result.push(version)\n          }\n        } else if (node.sign === '<') {\n          if (usage[version] < popularity) {\n            result.push(version)\n          }\n        } else if (node.sign === '<=') {\n          if (usage[version] <= popularity) {\n            result.push(version)\n          }\n        } else if (usage[version] >= popularity) {\n          result.push(version)\n        }\n        return result\n      }, [])\n    }\n  },\n  popularity_in_my_stats: {\n    matches: ['sign', 'popularity'],\n    regexp: /^(>=?|<=?)\\s*(\\d+|\\d+\\.\\d+|\\.\\d+)%\\s+in\\s+my\\s+stats$/,\n    select: function (context, node) {\n      var popularity = parseFloat(node.popularity)\n      if (!context.customUsage) {\n        throw new BrowserslistError('Custom usage statistics was not provided')\n      }\n      var usage = context.customUsage\n      return Object.keys(usage).reduce(function (result, version) {\n        var percentage = usage[version]\n        if (percentage == null) {\n          return result\n        }\n\n        if (node.sign === '>') {\n          if (percentage > popularity) {\n            result.push(version)\n          }\n        } else if (node.sign === '<') {\n          if (percentage < popularity) {\n            result.push(version)\n          }\n        } else if (node.sign === '<=') {\n          if (percentage <= popularity) {\n            result.push(version)\n          }\n        } else if (percentage >= popularity) {\n          result.push(version)\n        }\n        return result\n      }, [])\n    }\n  },\n  popularity_in_config_stats: {\n    matches: ['sign', 'popularity', 'config'],\n    regexp: /^(>=?|<=?)\\s*(\\d+|\\d+\\.\\d+|\\.\\d+)%\\s+in\\s+(\\S+)\\s+stats$/,\n    select: function (context, node) {\n      var popularity = parseFloat(node.popularity)\n      var stats = env.loadStat(context, node.config, browserslist.data)\n      if (stats) {\n        context.customUsage = {}\n        for (var browser in stats) {\n          fillUsage(context.customUsage, browser, stats[browser])\n        }\n      }\n      if (!context.customUsage) {\n        throw new BrowserslistError('Custom usage statistics was not provided')\n      }\n      var usage = context.customUsage\n      return Object.keys(usage).reduce(function (result, version) {\n        var percentage = usage[version]\n        if (percentage == null) {\n          return result\n        }\n\n        if (node.sign === '>') {\n          if (percentage > popularity) {\n            result.push(version)\n          }\n        } else if (node.sign === '<') {\n          if (percentage < popularity) {\n            result.push(version)\n          }\n        } else if (node.sign === '<=') {\n          if (percentage <= popularity) {\n            result.push(version)\n          }\n        } else if (percentage >= popularity) {\n          result.push(version)\n        }\n        return result\n      }, [])\n    }\n  },\n  popularity_in_place: {\n    matches: ['sign', 'popularity', 'place'],\n    regexp: /^(>=?|<=?)\\s*(\\d+|\\d+\\.\\d+|\\.\\d+)%\\s+in\\s+((alt-)?\\w\\w)$/,\n    select: function (context, node) {\n      var popularity = parseFloat(node.popularity)\n      var place = node.place\n      if (place.length === 2) {\n        place = place.toUpperCase()\n      } else {\n        place = place.toLowerCase()\n      }\n      env.loadCountry(browserslist.usage, place, browserslist.data)\n      var usage = browserslist.usage[place]\n      return Object.keys(usage).reduce(function (result, version) {\n        var percentage = usage[version]\n        if (percentage == null) {\n          return result\n        }\n\n        if (node.sign === '>') {\n          if (percentage > popularity) {\n            result.push(version)\n          }\n        } else if (node.sign === '<') {\n          if (percentage < popularity) {\n            result.push(version)\n          }\n        } else if (node.sign === '<=') {\n          if (percentage <= popularity) {\n            result.push(version)\n          }\n        } else if (percentage >= popularity) {\n          result.push(version)\n        }\n        return result\n      }, [])\n    }\n  },\n  cover: {\n    matches: ['coverage'],\n    regexp: /^cover\\s+(\\d+|\\d+\\.\\d+|\\.\\d+)%$/i,\n    select: coverQuery\n  },\n  cover_in: {\n    matches: ['coverage', 'place'],\n    regexp: /^cover\\s+(\\d+|\\d+\\.\\d+|\\.\\d+)%\\s+in\\s+(my\\s+stats|(alt-)?\\w\\w)$/i,\n    select: coverQuery\n  },\n  supports: {\n    matches: ['feature'],\n    regexp: /^supports\\s+([\\w-]+)$/,\n    select: function (context, node) {\n      env.loadFeature(browserslist.cache, node.feature)\n      var features = browserslist.cache[node.feature]\n      return Object.keys(features).reduce(function (result, version) {\n        var flags = features[version]\n        if (flags.indexOf('y') >= 0 || flags.indexOf('a') >= 0) {\n          result.push(version)\n        }\n        return result\n      }, [])\n    }\n  },\n  electron_range: {\n    matches: ['from', 'to'],\n    regexp: /^electron\\s+([\\d.]+)\\s*-\\s*([\\d.]+)$/i,\n    select: function (context, node) {\n      var fromToUse = normalizeElectron(node.from)\n      var toToUse = normalizeElectron(node.to)\n      var from = parseFloat(node.from)\n      var to = parseFloat(node.to)\n      if (!e2c[fromToUse]) {\n        throw new BrowserslistError('Unknown version ' + from + ' of electron')\n      }\n      if (!e2c[toToUse]) {\n        throw new BrowserslistError('Unknown version ' + to + ' of electron')\n      }\n      return Object.keys(e2c)\n        .filter(function (i) {\n          var parsed = parseFloat(i)\n          return parsed >= from && parsed <= to\n        })\n        .map(function (i) {\n          return 'chrome ' + e2c[i]\n        })\n    }\n  },\n  node_range: {\n    matches: ['from', 'to'],\n    regexp: /^node\\s+([\\d.]+)\\s*-\\s*([\\d.]+)$/i,\n    select: function (context, node) {\n      return browserslist.nodeVersions\n        .filter(semverFilterLoose('>=', node.from))\n        .filter(semverFilterLoose('<=', node.to))\n        .map(function (v) {\n          return 'node ' + v\n        })\n    }\n  },\n  browser_range: {\n    matches: ['browser', 'from', 'to'],\n    regexp: /^(\\w+)\\s+([\\d.]+)\\s*-\\s*([\\d.]+)$/i,\n    select: function (context, node) {\n      var data = checkName(node.browser, context)\n      var from = parseFloat(normalizeVersion(data, node.from) || node.from)\n      var to = parseFloat(normalizeVersion(data, node.to) || node.to)\n      function filter(v) {\n        var parsed = parseFloat(v)\n        return parsed >= from && parsed <= to\n      }\n      return data.released.filter(filter).map(nameMapper(data.name))\n    }\n  },\n  electron_ray: {\n    matches: ['sign', 'version'],\n    regexp: /^electron\\s*(>=?|<=?)\\s*([\\d.]+)$/i,\n    select: function (context, node) {\n      var versionToUse = normalizeElectron(node.version)\n      return Object.keys(e2c)\n        .filter(generateFilter(node.sign, versionToUse))\n        .map(function (i) {\n          return 'chrome ' + e2c[i]\n        })\n    }\n  },\n  node_ray: {\n    matches: ['sign', 'version'],\n    regexp: /^node\\s*(>=?|<=?)\\s*([\\d.]+)$/i,\n    select: function (context, node) {\n      return browserslist.nodeVersions\n        .filter(generateSemverFilter(node.sign, node.version))\n        .map(function (v) {\n          return 'node ' + v\n        })\n    }\n  },\n  browser_ray: {\n    matches: ['browser', 'sign', 'version'],\n    regexp: /^(\\w+)\\s*(>=?|<=?)\\s*([\\d.]+)$/,\n    select: function (context, node) {\n      var version = node.version\n      var data = checkName(node.browser, context)\n      var alias = browserslist.versionAliases[data.name][version]\n      if (alias) version = alias\n      return data.released\n        .filter(generateFilter(node.sign, version))\n        .map(function (v) {\n          return data.name + ' ' + v\n        })\n    }\n  },\n  firefox_esr: {\n    matches: [],\n    regexp: /^(firefox|ff|fx)\\s+esr$/i,\n    select: function () {\n      return ['firefox 102']\n    }\n  },\n  opera_mini_all: {\n    matches: [],\n    regexp: /(operamini|op_mini)\\s+all/i,\n    select: function () {\n      return ['op_mini all']\n    }\n  },\n  electron_version: {\n    matches: ['version'],\n    regexp: /^electron\\s+([\\d.]+)$/i,\n    select: function (context, node) {\n      var versionToUse = normalizeElectron(node.version)\n      var chrome = e2c[versionToUse]\n      if (!chrome) {\n        throw new BrowserslistError(\n          'Unknown version ' + node.version + ' of electron'\n        )\n      }\n      return ['chrome ' + chrome]\n    }\n  },\n  node_major_version: {\n    matches: ['version'],\n    regexp: /^node\\s+(\\d+)$/i,\n    select: nodeQuery\n  },\n  node_minor_version: {\n    matches: ['version'],\n    regexp: /^node\\s+(\\d+\\.\\d+)$/i,\n    select: nodeQuery\n  },\n  node_patch_version: {\n    matches: ['version'],\n    regexp: /^node\\s+(\\d+\\.\\d+\\.\\d+)$/i,\n    select: nodeQuery\n  },\n  current_node: {\n    matches: [],\n    regexp: /^current\\s+node$/i,\n    select: function (context) {\n      return [env.currentNode(resolve, context)]\n    }\n  },\n  maintained_node: {\n    matches: [],\n    regexp: /^maintained\\s+node\\s+versions$/i,\n    select: function (context) {\n      var now = Date.now()\n      var queries = Object.keys(jsEOL)\n        .filter(function (key) {\n          return (\n            now < Date.parse(jsEOL[key].end) &&\n            now > Date.parse(jsEOL[key].start) &&\n            isEolReleased(key)\n          )\n        })\n        .map(function (key) {\n          return 'node ' + key.slice(1)\n        })\n      return resolve(queries, context)\n    }\n  },\n  phantomjs_1_9: {\n    matches: [],\n    regexp: /^phantomjs\\s+1.9$/i,\n    select: function () {\n      return ['safari 5']\n    }\n  },\n  phantomjs_2_1: {\n    matches: [],\n    regexp: /^phantomjs\\s+2.1$/i,\n    select: function () {\n      return ['safari 6']\n    }\n  },\n  browser_version: {\n    matches: ['browser', 'version'],\n    regexp: /^(\\w+)\\s+(tp|[\\d.]+)$/i,\n    select: function (context, node) {\n      var version = node.version\n      if (/^tp$/i.test(version)) version = 'TP'\n      var data = checkName(node.browser, context)\n      var alias = normalizeVersion(data, version)\n      if (alias) {\n        version = alias\n      } else {\n        if (version.indexOf('.') === -1) {\n          alias = version + '.0'\n        } else {\n          alias = version.replace(/\\.0$/, '')\n        }\n        alias = normalizeVersion(data, alias)\n        if (alias) {\n          version = alias\n        } else if (context.ignoreUnknownVersions) {\n          return []\n        } else {\n          throw new BrowserslistError(\n            'Unknown version ' + version + ' of ' + node.browser\n          )\n        }\n      }\n      return [data.name + ' ' + version]\n    }\n  },\n  browserslist_config: {\n    matches: [],\n    regexp: /^browserslist config$/i,\n    select: function (context) {\n      return browserslist(undefined, context)\n    }\n  },\n  extends: {\n    matches: ['config'],\n    regexp: /^extends (.+)$/i,\n    select: function (context, node) {\n      return resolve(env.loadQueries(context, node.config), context)\n    }\n  },\n  defaults: {\n    matches: [],\n    regexp: /^defaults$/i,\n    select: function (context) {\n      return resolve(browserslist.defaults, context)\n    }\n  },\n  dead: {\n    matches: [],\n    regexp: /^dead$/i,\n    select: function (context) {\n      var dead = [\n        'Baidu >= 0',\n        'ie <= 11',\n        'ie_mob <= 11',\n        'bb <= 10',\n        'op_mob <= 12.1',\n        'samsung 4'\n      ]\n      return resolve(dead, context)\n    }\n  },\n  unknown: {\n    matches: [],\n    regexp: /^(\\w+)$/i,\n    select: function (context, node) {\n      if (byName(node.query, context)) {\n        throw new BrowserslistError(\n          'Specify versions in Browserslist query for browser ' + node.query\n        )\n      } else {\n        throw unknownQuery(node.query)\n      }\n    }\n  }\n}\n\n// Get and convert Can I Use data\n\n;(function () {\n  for (var name in agents) {\n    var browser = agents[name]\n    browserslist.data[name] = {\n      name: name,\n      versions: normalize(agents[name].versions),\n      released: normalize(agents[name].versions.slice(0, -3)),\n      releaseDate: agents[name].release_date\n    }\n    fillUsage(browserslist.usage.global, name, browser.usage_global)\n\n    browserslist.versionAliases[name] = {}\n    for (var i = 0; i < browser.versions.length; i++) {\n      var full = browser.versions[i]\n      if (!full) continue\n\n      if (full.indexOf('-') !== -1) {\n        var interval = full.split('-')\n        for (var j = 0; j < interval.length; j++) {\n          browserslist.versionAliases[name][interval[j]] = full\n        }\n      }\n    }\n  }\n\n  browserslist.versionAliases.op_mob['59'] = '58'\n\n  browserslist.nodeVersions = jsReleases.map(function (release) {\n    return release.version\n  })\n})()\n\nmodule.exports = browserslist\n/README.md\u000bo# Browserslist [![Cult Of Martians][cult-img]][cult]\n\n<img width=\"120\" height=\"120\" alt=\"Browserslist logo by Anton Popov\"\n     src=\"https://browsersl.ist/logo.svg\" align=\"right\">\n\nThe config to share target browsers and Node.js versions between different\nfront-end tools. It is used in:\n\n* [Autoprefixer]\n* [Babel]\n* [postcss-preset-env]\n* [eslint-plugin-compat]\n* [stylelint-no-unsupported-browser-features]\n* [postcss-normalize]\n* [obsolete-webpack-plugin]\n\nAll tools will find target browsers automatically,\nwhen you add the following to `package.json`:\n\n```json\n  \"browserslist\": [\n    \"defaults and supports es6-module\",\n    \"maintained node versions\"\n  ]\n```\n\nOr in `.browserslistrc` config:\n\n```yaml\n# Browsers that we support\n\ndefaults and supports es6-module\nmaintained node versions\n```\n\nDevelopers set their version lists using queries like `last 2 versions`\nto be free from updating versions manually.\nBrowserslist will use [`caniuse-lite`] with [Can I Use] data for this queries.\n\nYou can check how config works at our playground: [`browsersl.ist`](https://browsersl.ist/)\n\n<a href=\"https://browsersl.ist/\">\n  <img src=\"/img/screenshot.webp\" alt=\"browsersl.ist website\">\n</a>\n\n<br>\n<br>\n<div align=\"center\">\n  <a href=\"https://evilmartians.com/?utm_source=browserslist\">\n    <img src=\"https://evilmartians.com/badges/sponsored-by-evil-martians.svg\"\n        alt=\"Sponsored by Evil Martians\" width=\"236\" height=\"54\">\n  </a>\n\n  <a href=\"https://cube.dev/?ref=eco-browserslist-github\">\n    <img src=\"https://user-images.githubusercontent.com/986756/154330861-d79ab8ec-aacb-4af8-9e17-1b28f1eccb01.svg\"\n        alt=\"Supported by Cube\" width=\"227\" height=\"46\">\n  </a>\n</div>\n\n[stylelint-no-unsupported-browser-features]: https://github.com/ismay/stylelint-no-unsupported-browser-features\n[obsolete-webpack-plugin]:                   https://github.com/ElemeFE/obsolete-webpack-plugin\n[eslint-plugin-compat]:                      https://github.com/amilajack/eslint-plugin-compat\n[Browserslist Example]:                      https://github.com/browserslist/browserslist-example\n[postcss-preset-env]:                        https://github.com/csstools/postcss-plugins/tree/main/plugin-packs/postcss-preset-env\n[postcss-normalize]:                         https://github.com/csstools/postcss-normalize\n[`browsersl.ist`]:                           https://browsersl.ist/\n[`caniuse-lite`]:                            https://github.com/ben-eb/caniuse-lite\n[Autoprefixer]:                              https://github.com/postcss/autoprefixer\n[Can I Use]:                                 https://caniuse.com/\n[Babel]:                                     https://github.com/babel/babel/tree/master/packages/babel-preset-env\n[cult-img]: https://cultofmartians.com/assets/badges/badge.svg\n[cult]: https://cultofmartians.com/done.html\n\n## Docs\nRead full docs **[here](https://github.com/browserslist/browserslist#readme)**.\n/cli.js\u0010'#!/usr/bin/env node\n\nvar updateDb = require('update-browserslist-db')\nvar fs = require('fs')\n\nvar browserslist = require('./')\nvar pkg = require('./package.json')\n\nvar args = process.argv.slice(2)\n\nvar USAGE =\n  'Usage:\\n' +\n  '  npx browserslist\\n' +\n  '  npx browserslist \"QUERIES\"\\n' +\n  '  npx browserslist --json \"QUERIES\"\\n' +\n  '  npx browserslist --config=\"path/to/browserlist/file\"\\n' +\n  '  npx browserslist --coverage \"QUERIES\"\\n' +\n  '  npx browserslist --coverage=US \"QUERIES\"\\n' +\n  '  npx browserslist --coverage=US,RU,global \"QUERIES\"\\n' +\n  '  npx browserslist --env=\"environment name defined in config\"\\n' +\n  '  npx browserslist --stats=\"path/to/browserlist/stats/file\"\\n' +\n  '  npx browserslist --mobile-to-desktop\\n' +\n  '  npx browserslist --ignore-unknown-versions\\n'\n\nfunction isArg(arg) {\n  return args.some(function (str) {\n    return str === arg || str.indexOf(arg + '=') === 0\n  })\n}\n\nfunction error(msg) {\n  process.stderr.write('browserslist: ' + msg + '\\n')\n  process.exit(1)\n}\n\nif (isArg('--help') || isArg('-h')) {\n  process.stdout.write(pkg.description + '.\\n\\n' + USAGE + '\\n')\n} else if (isArg('--version') || isArg('-v')) {\n  process.stdout.write('browserslist ' + pkg.version + '\\n')\n} else if (isArg('--update-db')) {\n  /* c8 ignore next 3 */\n  updateDb(function (str) {\n    process.stdout.write(str)\n  })\n} else {\n  var mode = 'browsers'\n  var opts = {}\n  var queries\n  var areas\n\n  for (var i = 0; i < args.length; i++) {\n    if (args[i][0] !== '-') {\n      queries = args[i].replace(/^[\"']|[\"']$/g, '')\n      continue\n    }\n\n    var arg = args[i].split('=')\n    var name = arg[0]\n    var value = arg[1]\n\n    if (value) value = value.replace(/^[\"']|[\"']$/g, '')\n\n    if (name === '--config' || name === '-b') {\n      opts.config = value\n    } else if (name === '--env' || name === '-e') {\n      opts.env = value\n    } else if (name === '--stats' || name === '-s') {\n      opts.stats = value\n    } else if (name === '--coverage' || name === '-c') {\n      if (mode !== 'json') mode = 'coverage'\n      if (value) {\n        areas = value.split(',')\n      } else {\n        areas = ['global']\n      }\n    } else if (name === '--json') {\n      mode = 'json'\n    } else if (name === '--mobile-to-desktop') {\n      /* c8 ignore next */\n      opts.mobileToDesktop = true\n    } else if (name === '--ignore-unknown-versions') {\n      /* c8 ignore next */\n      opts.ignoreUnknownVersions = true\n    } else {\n      error('Unknown arguments ' + args[i] + '.\\n\\n' + USAGE)\n    }\n  }\n\n  var browsers\n  try {\n    browsers = browserslist(queries, opts)\n  } catch (e) {\n    if (e.name === 'BrowserslistError') {\n      error(e.message)\n    } /* c8 ignore start */ else {\n      throw e\n    } /* c8 ignore end */\n  }\n\n  var coverage\n  if (mode === 'browsers') {\n    browsers.forEach(function (browser) {\n      process.stdout.write(browser + '\\n')\n    })\n  } else if (areas) {\n    coverage = areas.map(function (area) {\n      var stats\n      if (area !== 'global') {\n        stats = area\n      } else if (opts.stats) {\n        stats = JSON.parse(fs.readFileSync(opts.stats))\n      }\n      var result = browserslist.coverage(browsers, stats)\n      var round = Math.round(result * 100) / 100.0\n\n      return [area, round]\n    })\n\n    if (mode === 'coverage') {\n      var prefix = 'These browsers account for '\n      process.stdout.write(prefix)\n      coverage.forEach(function (data, index) {\n        var area = data[0]\n        var round = data[1]\n        var end = 'globally'\n        if (area && area !== 'global') {\n          end = 'in the ' + area.toUpperCase()\n        } else if (opts.stats) {\n          end = 'in custom statistics'\n        }\n\n        if (index !== 0) {\n          process.stdout.write(prefix.replace(/./g, ' '))\n        }\n\n        process.stdout.write(round + '% of all users ' + end + '\\n')\n      })\n    }\n  }\n\n  if (mode === 'json') {\n    var data = { browsers: browsers }\n    if (coverage) {\n      data.coverage = coverage.reduce(function (object, j) {\n        object[j[0]] = j[1]\n        return object\n      }, {})\n    }\n    process.stdout.write(JSON.stringify(data, null, '  ') + '\\n')\n  }\n}\n/index.d.ts\u0011=/**\n * Return array of browsers by selection queries.\n *\n * ```js\n * browserslist('IE >= 10, IE 8') //=> ['ie 11', 'ie 10', 'ie 8']\n * ```\n *\n * @param queries Browser queries.\n * @param opts Options.\n * @returns Array with browser names in Can I Use.\n */\ndeclare function browserslist(\n  queries?: string | readonly string[] | null,\n  opts?: browserslist.Options\n): string[]\n\ndeclare namespace browserslist {\n  interface Query {\n    compose: 'or' | 'and'\n    type: string\n    query: string\n    not?: true\n  }\n\n  interface Options {\n    /**\n     * Path to processed file. It will be used to find config files.\n     */\n    path?: string | false\n    /**\n     * Processing environment. It will be used to take right queries\n     * from config file.\n     */\n    env?: string\n    /**\n     * Custom browser usage statistics for \"> 1% in my stats\" query.\n     */\n    stats?: Stats | string\n    /**\n     * Path to config file with queries.\n     */\n    config?: string\n    /**\n     * Do not throw on unknown version in direct query.\n     */\n    ignoreUnknownVersions?: boolean\n    /**\n     * Throw an error if env is not found.\n     */\n    throwOnMissing?: boolean\n    /**\n     * Disable security checks for extend query.\n     */\n    dangerousExtend?: boolean\n    /**\n     * Alias mobile browsers to the desktop version when Can I Use\n     * doesn’t have data about the specified version.\n     */\n    mobileToDesktop?: boolean\n  }\n\n  type Config = {\n    defaults: string[]\n    [section: string]: string[] | undefined\n  }\n\n  interface Stats {\n    [browser: string]: {\n      [version: string]: number\n    }\n  }\n\n  /**\n   * Browser names aliases.\n   */\n  let aliases: {\n    [alias: string]: string | undefined\n  }\n\n  /**\n   * Aliases to work with joined versions like `ios_saf 7.0-7.1`.\n   */\n  let versionAliases: {\n    [browser: string]:\n      | {\n          [version: string]: string | undefined\n        }\n      | undefined\n  }\n\n  /**\n   * Can I Use only provides a few versions for some browsers (e.g. `and_chr`).\n   *\n   * Fallback to a similar browser for unknown versions.\n   */\n  let desktopNames: {\n    [browser: string]: string | undefined\n  }\n\n  let data: {\n    [browser: string]:\n      | {\n          name: string\n          versions: string[]\n          released: string[]\n          releaseDate: {\n            [version: string]: number | undefined | null\n          }\n        }\n      | undefined\n  }\n\n  let nodeVersions: string[]\n\n  interface Usage {\n    [version: string]: number\n  }\n\n  let usage: {\n    global?: Usage\n    custom?: Usage | null\n    [country: string]: Usage | undefined | null\n  }\n\n  let cache: {\n    [feature: string]: {\n      [name: string]: 'y' | 'n'\n    }\n  }\n\n  /**\n   * Default browsers query\n   */\n  let defaults: readonly string[]\n\n  /**\n   * Which statistics should be used. Country code or custom statistics.\n   * Pass `\"my stats\"` to load statistics from `Browserslist` files.\n   */\n  type StatsOptions = string | 'my stats' | Stats | { dataByBrowser: Stats }\n\n  /**\n   * Return browsers market coverage.\n   *\n   * ```js\n   * browserslist.coverage(browserslist('> 1% in US'), 'US') //=> 83.1\n   * ```\n   *\n   * @param browsers Browsers names in Can I Use.\n   * @param stats Which statistics should be used.\n   * @returns Total market coverage for all selected browsers.\n   */\n  function coverage(browsers: readonly string[], stats?: StatsOptions): number\n\n  /**\n   * Get queries AST to analyze the config content.\n   *\n   * @param queries Browser queries.\n   * @param opts Options.\n   * @returns An array of the data of each query in the config.\n   */\n  function parse(\n    queries?: string | readonly string[] | null,\n    opts?: browserslist.Options\n  ): Query[]\n\n  function clearCaches(): void\n\n  function parseConfig(string: string): Config\n\n  function readConfig(file: string): Config\n\n  function findConfig(...pathSegments: string[]): Config | undefined\n\n  interface LoadConfigOptions {\n    config?: string\n    path?: string\n    env?: string\n  }\n\n  function loadConfig(options: LoadConfigOptions): string[] | undefined\n}\n\ndeclare global {\n  namespace NodeJS {\n    interface ProcessEnv {\n      BROWSERSLIST?: string\n      BROWSERSLIST_CONFIG?: string\n      BROWSERSLIST_DANGEROUS_EXTEND?: string\n      BROWSERSLIST_DISABLE_CACHE?: string\n      BROWSERSLIST_ENV?: string\n      BROWSERSLIST_IGNORE_OLD_DATA?: string\n      BROWSERSLIST_STATS?: string\n    }\n  }\n}\n\nexport = browserslist\n/LICENSE\u0004^The MIT License (MIT)\n\nCopyright 2014 Andrey Sitnik <andrey@sitnik.ru> and other contributors\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n/browser.js\u0004Dvar BrowserslistError = require('./error')\n\nfunction noop() {}\n\nmodule.exports = {\n  loadQueries: function loadQueries() {\n    throw new BrowserslistError(\n      'Sharable configs are not supported in client-side build of Browserslist'\n    )\n  },\n\n  getStat: function getStat(opts) {\n    return opts.stats\n  },\n\n  loadConfig: function loadConfig(opts) {\n    if (opts.config) {\n      throw new BrowserslistError(\n        'Browserslist config are not supported in client-side build'\n      )\n    }\n  },\n\n  loadCountry: function loadCountry() {\n    throw new BrowserslistError(\n      'Country statistics are not supported ' +\n        'in client-side build of Browserslist'\n    )\n  },\n\n  loadFeature: function loadFeature() {\n    throw new BrowserslistError(\n      'Supports queries are not available in client-side build of Browserslist'\n    )\n  },\n\n  currentNode: function currentNode(resolve, context) {\n    return resolve(['maintained node versions'], context)[0]\n  },\n\n  parseConfig: noop,\n\n  readConfig: noop,\n\n  findConfig: noop,\n\n  clearCaches: noop,\n\n  oldDataWarning: noop,\n\n  env: {}\n}\n/parse.js\u0006var AND_REGEXP = /^\\s+and\\s+(.*)/i\nvar OR_REGEXP = /^(?:,\\s*|\\s+or\\s+)(.*)/i\n\nfunction flatten(array) {\n  if (!Array.isArray(array)) return [array]\n  return array.reduce(function (a, b) {\n    return a.concat(flatten(b))\n  }, [])\n}\n\nfunction find(string, predicate) {\n  for (var n = 1, max = string.length; n <= max; n++) {\n    var parsed = string.substr(-n, n)\n    if (predicate(parsed, n, max)) {\n      return string.slice(0, -n)\n    }\n  }\n  return ''\n}\n\nfunction matchQuery(all, query) {\n  var node = { query: query }\n  if (query.indexOf('not ') === 0) {\n    node.not = true\n    query = query.slice(4)\n  }\n\n  for (var name in all) {\n    var type = all[name]\n    var match = query.match(type.regexp)\n    if (match) {\n      node.type = name\n      for (var i = 0; i < type.matches.length; i++) {\n        node[type.matches[i]] = match[i + 1]\n      }\n      return node\n    }\n  }\n\n  node.type = 'unknown'\n  return node\n}\n\nfunction matchBlock(all, string, qs) {\n  var node\n  return find(string, function (parsed, n, max) {\n    if (AND_REGEXP.test(parsed)) {\n      node = matchQuery(all, parsed.match(AND_REGEXP)[1])\n      node.compose = 'and'\n      qs.unshift(node)\n      return true\n    } else if (OR_REGEXP.test(parsed)) {\n      node = matchQuery(all, parsed.match(OR_REGEXP)[1])\n      node.compose = 'or'\n      qs.unshift(node)\n      return true\n    } else if (n === max) {\n      node = matchQuery(all, parsed.trim())\n      node.compose = 'or'\n      qs.unshift(node)\n      return true\n    }\n    return false\n  })\n}\n\nmodule.exports = function parse(all, queries) {\n  if (!Array.isArray(queries)) queries = [queries]\n  return flatten(\n    queries.map(function (block) {\n      var qs = []\n      do {\n        block = matchBlock(all, block, qs)\n      } while (block)\n      return qs\n    })\n  )\n}\n/package.json\u0003{\n  \"name\": \"browserslist\",\n  \"version\": \"4.21.5\",\n  \"description\": \"Share target browsers between different front-end tools, like Autoprefixer, Stylelint and babel-env-preset\",\n  \"keywords\": [\n    \"caniuse\",\n    \"browsers\",\n    \"target\"\n  ],\n  \"funding\": [\n    {\n      \"type\": \"opencollective\",\n      \"url\": \"https://opencollective.com/browserslist\"\n    },\n    {\n      \"type\": \"tidelift\",\n      \"url\": \"https://tidelift.com/funding/github/npm/browserslist\"\n    }\n  ],\n  \"author\": \"Andrey Sitnik <andrey@sitnik.ru>\",\n  \"license\": \"MIT\",\n  \"repository\": \"browserslist/browserslist\",\n  \"dependencies\": {\n    \"caniuse-lite\": \"^1.0.30001449\",\n    \"electron-to-chromium\": \"^1.4.284\",\n    \"node-releases\": \"^2.0.8\",\n    \"update-browserslist-db\": \"^1.0.10\"\n  },\n  \"engines\": {\n    \"node\": \"^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7\"\n  },\n  \"bin\": {\n    \"browserslist\": \"cli.js\"\n  },\n  \"types\": \"./index.d.ts\",\n  \"browser\": {\n    \"./node.js\": \"./browser.js\",\n    \"path\": false\n  }\n}\n/node.js,Yvar feature = require('caniuse-lite/dist/unpacker/feature').default\nvar region = require('caniuse-lite/dist/unpacker/region').default\nvar path = require('path')\nvar fs = require('fs')\n\nvar BrowserslistError = require('./error')\n\nvar IS_SECTION = /^\\s*\\[(.+)]\\s*$/\nvar CONFIG_PATTERN = /^browserslist-config-/\nvar SCOPED_CONFIG__PATTERN = /@[^/]+\\/browserslist-config(-|$|\\/)/\nvar TIME_TO_UPDATE_CANIUSE = 6 * 30 * 24 * 60 * 60 * 1000\nvar FORMAT =\n  'Browserslist config should be a string or an array ' +\n  'of strings with browser queries'\n\nvar dataTimeChecked = false\nvar filenessCache = {}\nvar configCache = {}\nfunction checkExtend(name) {\n  var use = ' Use `dangerousExtend` option to disable.'\n  if (!CONFIG_PATTERN.test(name) && !SCOPED_CONFIG__PATTERN.test(name)) {\n    throw new BrowserslistError(\n      'Browserslist config needs `browserslist-config-` prefix. ' + use\n    )\n  }\n  if (name.replace(/^@[^/]+\\//, '').indexOf('.') !== -1) {\n    throw new BrowserslistError(\n      '`.` not allowed in Browserslist config name. ' + use\n    )\n  }\n  if (name.indexOf('node_modules') !== -1) {\n    throw new BrowserslistError(\n      '`node_modules` not allowed in Browserslist config.' + use\n    )\n  }\n}\n\nfunction isFile(file) {\n  if (file in filenessCache) {\n    return filenessCache[file]\n  }\n  var result = fs.existsSync(file) && fs.statSync(file).isFile()\n  if (!process.env.BROWSERSLIST_DISABLE_CACHE) {\n    filenessCache[file] = result\n  }\n  return result\n}\n\nfunction eachParent(file, callback) {\n  var dir = isFile(file) ? path.dirname(file) : file\n  var loc = path.resolve(dir)\n  do {\n    var result = callback(loc)\n    if (typeof result !== 'undefined') return result\n  } while (loc !== (loc = path.dirname(loc)))\n  return undefined\n}\n\nfunction check(section) {\n  if (Array.isArray(section)) {\n    for (var i = 0; i < section.length; i++) {\n      if (typeof section[i] !== 'string') {\n        throw new BrowserslistError(FORMAT)\n      }\n    }\n  } else if (typeof section !== 'string') {\n    throw new BrowserslistError(FORMAT)\n  }\n}\n\nfunction pickEnv(config, opts) {\n  if (typeof config !== 'object') return config\n\n  var name\n  if (typeof opts.env === 'string') {\n    name = opts.env\n  } else if (process.env.BROWSERSLIST_ENV) {\n    name = process.env.BROWSERSLIST_ENV\n  } else if (process.env.NODE_ENV) {\n    name = process.env.NODE_ENV\n  } else {\n    name = 'production'\n  }\n\n  if (opts.throwOnMissing) {\n    if (name && name !== 'defaults' && !config[name]) {\n      throw new BrowserslistError(\n        'Missing config for Browserslist environment `' + name + '`'\n      )\n    }\n  }\n\n  return config[name] || config.defaults\n}\n\nfunction parsePackage(file) {\n  var config = JSON.parse(\n    fs\n      .readFileSync(file)\n      .toString()\n      .replace(/^\\uFEFF/m, '')\n  )\n  if (config.browserlist && !config.browserslist) {\n    throw new BrowserslistError(\n      '`browserlist` key instead of `browserslist` in ' + file\n    )\n  }\n  var list = config.browserslist\n  if (Array.isArray(list) || typeof list === 'string') {\n    list = { defaults: list }\n  }\n  for (var i in list) {\n    check(list[i])\n  }\n\n  return list\n}\n\nfunction latestReleaseTime(agents) {\n  var latest = 0\n  for (var name in agents) {\n    var dates = agents[name].releaseDate || {}\n    for (var key in dates) {\n      if (latest < dates[key]) {\n        latest = dates[key]\n      }\n    }\n  }\n  return latest * 1000\n}\n\nfunction normalizeStats(data, stats) {\n  if (!data) {\n    data = {}\n  }\n  if (stats && 'dataByBrowser' in stats) {\n    stats = stats.dataByBrowser\n  }\n\n  if (typeof stats !== 'object') return undefined\n\n  var normalized = {}\n  for (var i in stats) {\n    var versions = Object.keys(stats[i])\n    if (versions.length === 1 && data[i] && data[i].versions.length === 1) {\n      var normal = data[i].versions[0]\n      normalized[i] = {}\n      normalized[i][normal] = stats[i][versions[0]]\n    } else {\n      normalized[i] = stats[i]\n    }\n  }\n\n  return normalized\n}\n\nfunction normalizeUsageData(usageData, data) {\n  for (var browser in usageData) {\n    var browserUsage = usageData[browser]\n    // eslint-disable-next-line max-len\n    // https://github.com/browserslist/browserslist/issues/431#issuecomment-565230615\n    // caniuse-db returns { 0: \"percentage\" } for `and_*` regional stats\n    if ('0' in browserUsage) {\n      var versions = data[browser].versions\n      browserUsage[versions[versions.length - 1]] = browserUsage[0]\n      delete browserUsage[0]\n    }\n  }\n}\n\nmodule.exports = {\n  loadQueries: function loadQueries(ctx, name) {\n    if (!ctx.dangerousExtend && !process.env.BROWSERSLIST_DANGEROUS_EXTEND) {\n      checkExtend(name)\n    }\n    var queries = require(require.resolve(name, { paths: ['.', ctx.path] }))\n    if (queries) {\n      if (Array.isArray(queries)) {\n        return queries\n      } else if (typeof queries === 'object') {\n        if (!queries.defaults) queries.defaults = []\n        return pickEnv(queries, ctx, name)\n      }\n    }\n    throw new BrowserslistError(\n      '`' +\n        name +\n        '` config exports not an array of queries' +\n        ' or an object of envs'\n    )\n  },\n\n  loadStat: function loadStat(ctx, name, data) {\n    if (!ctx.dangerousExtend && !process.env.BROWSERSLIST_DANGEROUS_EXTEND) {\n      checkExtend(name)\n    }\n    var stats = require(require.resolve(\n      path.join(name, 'browserslist-stats.json'),\n      { paths: ['.'] }\n    ))\n    return normalizeStats(data, stats)\n  },\n\n  getStat: function getStat(opts, data) {\n    var stats\n    if (opts.stats) {\n      stats = opts.stats\n    } else if (process.env.BROWSERSLIST_STATS) {\n      stats = process.env.BROWSERSLIST_STATS\n    } else if (opts.path && path.resolve && fs.existsSync) {\n      stats = eachParent(opts.path, function (dir) {\n        var file = path.join(dir, 'browserslist-stats.json')\n        return isFile(file) ? file : undefined\n      })\n    }\n    if (typeof stats === 'string') {\n      try {\n        stats = JSON.parse(fs.readFileSync(stats))\n      } catch (e) {\n        throw new BrowserslistError(\"Can't read \" + stats)\n      }\n    }\n    return normalizeStats(data, stats)\n  },\n\n  loadConfig: function loadConfig(opts) {\n    if (process.env.BROWSERSLIST) {\n      return process.env.BROWSERSLIST\n    } else if (opts.config || process.env.BROWSERSLIST_CONFIG) {\n      var file = opts.config || process.env.BROWSERSLIST_CONFIG\n      if (path.basename(file) === 'package.json') {\n        return pickEnv(parsePackage(file), opts)\n      } else {\n        return pickEnv(module.exports.readConfig(file), opts)\n      }\n    } else if (opts.path) {\n      return pickEnv(module.exports.findConfig(opts.path), opts)\n    } else {\n      return undefined\n    }\n  },\n\n  loadCountry: function loadCountry(usage, country, data) {\n    var code = country.replace(/[^\\w-]/g, '')\n    if (!usage[code]) {\n      var compressed\n      try {\n        compressed = require('caniuse-lite/data/regions/' + code + '.js')\n      } catch (e) {\n        throw new BrowserslistError('Unknown region name `' + code + '`.')\n      }\n      var usageData = region(compressed)\n      normalizeUsageData(usageData, data)\n      usage[country] = {}\n      for (var i in usageData) {\n        for (var j in usageData[i]) {\n          usage[country][i + ' ' + j] = usageData[i][j]\n        }\n      }\n    }\n  },\n\n  loadFeature: function loadFeature(features, name) {\n    name = name.replace(/[^\\w-]/g, '')\n    if (features[name]) return\n    var compressed\n    try {\n      compressed = require('caniuse-lite/data/features/' + name + '.js')\n    } catch (e) {\n      throw new BrowserslistError('Unknown feature name `' + name + '`.')\n    }\n    var stats = feature(compressed).stats\n    features[name] = {}\n    for (var i in stats) {\n      for (var j in stats[i]) {\n        features[name][i + ' ' + j] = stats[i][j]\n      }\n    }\n  },\n\n  parseConfig: function parseConfig(string) {\n    var result = { defaults: [] }\n    var sections = ['defaults']\n\n    string\n      .toString()\n      .replace(/#[^\\n]*/g, '')\n      .split(/\\n|,/)\n      .map(function (line) {\n        return line.trim()\n      })\n      .filter(function (line) {\n        return line !== ''\n      })\n      .forEach(function (line) {\n        if (IS_SECTION.test(line)) {\n          sections = line.match(IS_SECTION)[1].trim().split(' ')\n          sections.forEach(function (section) {\n            if (result[section]) {\n              throw new BrowserslistError(\n                'Duplicate section ' + section + ' in Browserslist config'\n              )\n            }\n            result[section] = []\n          })\n        } else {\n          sections.forEach(function (section) {\n            result[section].push(line)\n          })\n        }\n      })\n\n    return result\n  },\n\n  readConfig: function readConfig(file) {\n    if (!isFile(file)) {\n      throw new BrowserslistError(\"Can't read \" + file + ' config')\n    }\n    return module.exports.parseConfig(fs.readFileSync(file))\n  },\n\n  findConfig: function findConfig(from) {\n    from = path.resolve(from)\n\n    var passed = []\n    var resolved = eachParent(from, function (dir) {\n      if (dir in configCache) {\n        return configCache[dir]\n      }\n\n      passed.push(dir)\n\n      var config = path.join(dir, 'browserslist')\n      var pkg = path.join(dir, 'package.json')\n      var rc = path.join(dir, '.browserslistrc')\n\n      var pkgBrowserslist\n      if (isFile(pkg)) {\n        try {\n          pkgBrowserslist = parsePackage(pkg)\n        } catch (e) {\n          if (e.name === 'BrowserslistError') throw e\n          console.warn(\n            '[Browserslist] Could not parse ' + pkg + '. Ignoring it.'\n          )\n        }\n      }\n\n      if (isFile(config) && pkgBrowserslist) {\n        throw new BrowserslistError(\n          dir + ' contains both browserslist and package.json with browsers'\n        )\n      } else if (isFile(rc) && pkgBrowserslist) {\n        throw new BrowserslistError(\n          dir + ' contains both .browserslistrc and package.json with browsers'\n        )\n      } else if (isFile(config) && isFile(rc)) {\n        throw new BrowserslistError(\n          dir + ' contains both .browserslistrc and browserslist'\n        )\n      } else if (isFile(config)) {\n        return module.exports.readConfig(config)\n      } else if (isFile(rc)) {\n        return module.exports.readConfig(rc)\n      } else {\n        return pkgBrowserslist\n      }\n    })\n    if (!process.env.BROWSERSLIST_DISABLE_CACHE) {\n      passed.forEach(function (dir) {\n        configCache[dir] = resolved\n      })\n    }\n    return resolved\n  },\n\n  clearCaches: function clearCaches() {\n    dataTimeChecked = false\n    filenessCache = {}\n    configCache = {}\n\n    this.cache = {}\n  },\n\n  oldDataWarning: function oldDataWarning(agentsObj) {\n    if (dataTimeChecked) return\n    dataTimeChecked = true\n    if (process.env.BROWSERSLIST_IGNORE_OLD_DATA) return\n\n    var latest = latestReleaseTime(agentsObj)\n    var halfYearAgo = Date.now() - TIME_TO_UPDATE_CANIUSE\n\n    if (latest !== 0 && latest < halfYearAgo) {\n      console.warn(\n        'Browserslist: caniuse-lite is outdated. Please run:\\n' +\n          '  npx update-browserslist-db@latest\\n' +\n          '  Why you should do it regularly: ' +\n          'https://github.com/browserslist/update-db#readme'\n      )\n    }\n  },\n\n  currentNode: function currentNode() {\n    return 'node ' + process.versions.node\n  },\n\n  env: process.env\n}\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/YnVmZmVyQDYuMC4z",
    "content": "/index.d.ts#export class Buffer extends Uint8Array {\n    length: number\n    write(string: string, offset?: number, length?: number, encoding?: string): number;\n    toString(encoding?: string, start?: number, end?: number): string;\n    toJSON(): { type: 'Buffer', data: any[] };\n    equals(otherBuffer: Buffer): boolean;\n    compare(otherBuffer: Uint8Array, targetStart?: number, targetEnd?: number, sourceStart?: number, sourceEnd?: number): number;\n    copy(targetBuffer: Buffer, targetStart?: number, sourceStart?: number, sourceEnd?: number): number;\n    slice(start?: number, end?: number): Buffer;\n    writeUIntLE(value: number, offset: number, byteLength: number, noAssert?: boolean): number;\n    writeUIntBE(value: number, offset: number, byteLength: number, noAssert?: boolean): number;\n    writeIntLE(value: number, offset: number, byteLength: number, noAssert?: boolean): number;\n    writeIntBE(value: number, offset: number, byteLength: number, noAssert?: boolean): number;\n    readUIntLE(offset: number, byteLength: number, noAssert?: boolean): number;\n    readUIntBE(offset: number, byteLength: number, noAssert?: boolean): number;\n    readIntLE(offset: number, byteLength: number, noAssert?: boolean): number;\n    readIntBE(offset: number, byteLength: number, noAssert?: boolean): number;\n    readUInt8(offset: number, noAssert?: boolean): number;\n    readUInt16LE(offset: number, noAssert?: boolean): number;\n    readUInt16BE(offset: number, noAssert?: boolean): number;\n    readUInt32LE(offset: number, noAssert?: boolean): number;\n    readUInt32BE(offset: number, noAssert?: boolean): number;\n    readBigUInt64LE(offset: number): BigInt;\n    readBigUInt64BE(offset: number): BigInt;\n    readInt8(offset: number, noAssert?: boolean): number;\n    readInt16LE(offset: number, noAssert?: boolean): number;\n    readInt16BE(offset: number, noAssert?: boolean): number;\n    readInt32LE(offset: number, noAssert?: boolean): number;\n    readInt32BE(offset: number, noAssert?: boolean): number;\n    readBigInt64LE(offset: number): BigInt;\n    readBigInt64BE(offset: number): BigInt;\n    readFloatLE(offset: number, noAssert?: boolean): number;\n    readFloatBE(offset: number, noAssert?: boolean): number;\n    readDoubleLE(offset: number, noAssert?: boolean): number;\n    readDoubleBE(offset: number, noAssert?: boolean): number;\n    reverse(): this;\n    swap16(): Buffer;\n    swap32(): Buffer;\n    swap64(): Buffer;\n    writeUInt8(value: number, offset: number, noAssert?: boolean): number;\n    writeUInt16LE(value: number, offset: number, noAssert?: boolean): number;\n    writeUInt16BE(value: number, offset: number, noAssert?: boolean): number;\n    writeUInt32LE(value: number, offset: number, noAssert?: boolean): number;\n    writeUInt32BE(value: number, offset: number, noAssert?: boolean): number;\n    writeBigUInt64LE(value: number, offset: number): BigInt;\n    writeBigUInt64BE(value: number, offset: number): BigInt;\n    writeInt8(value: number, offset: number, noAssert?: boolean): number;\n    writeInt16LE(value: number, offset: number, noAssert?: boolean): number;\n    writeInt16BE(value: number, offset: number, noAssert?: boolean): number;\n    writeInt32LE(value: number, offset: number, noAssert?: boolean): number;\n    writeInt32BE(value: number, offset: number, noAssert?: boolean): number;\n    writeBigInt64LE(value: number, offset: number): BigInt;\n    writeBigInt64BE(value: number, offset: number): BigInt;\n    writeFloatLE(value: number, offset: number, noAssert?: boolean): number;\n    writeFloatBE(value: number, offset: number, noAssert?: boolean): number;\n    writeDoubleLE(value: number, offset: number, noAssert?: boolean): number;\n    writeDoubleBE(value: number, offset: number, noAssert?: boolean): number;\n    fill(value: any, offset?: number, end?: number): this;\n    indexOf(value: string | number | Buffer, byteOffset?: number, encoding?: string): number;\n    lastIndexOf(value: string | number | Buffer, byteOffset?: number, encoding?: string): number;\n    includes(value: string | number | Buffer, byteOffset?: number, encoding?: string): boolean;\n\n    /**\n     * Allocates a new buffer containing the given {str}.\n     *\n     * @param str String to store in buffer.\n     * @param encoding encoding to use, optional.  Default is 'utf8'\n     */\n    constructor (str: string, encoding?: string);\n    /**\n     * Allocates a new buffer of {size} octets.\n     *\n     * @param size count of octets to allocate.\n     */\n    constructor (size: number);\n    /**\n     * Allocates a new buffer containing the given {array} of octets.\n     *\n     * @param array The octets to store.\n     */\n    constructor (array: Uint8Array);\n    /**\n     * Produces a Buffer backed by the same allocated memory as\n     * the given {ArrayBuffer}.\n     *\n     *\n     * @param arrayBuffer The ArrayBuffer with which to share memory.\n     */\n    constructor (arrayBuffer: ArrayBuffer);\n    /**\n     * Allocates a new buffer containing the given {array} of octets.\n     *\n     * @param array The octets to store.\n     */\n    constructor (array: any[]);\n    /**\n     * Copies the passed {buffer} data onto a new {Buffer} instance.\n     *\n     * @param buffer The buffer to copy.\n     */\n    constructor (buffer: Buffer);\n    prototype: Buffer;\n    /**\n     * Allocates a new Buffer using an {array} of octets.\n     *\n     * @param array\n     */\n    static from(array: any[]): Buffer;\n    /**\n     * When passed a reference to the .buffer property of a TypedArray instance,\n     * the newly created Buffer will share the same allocated memory as the TypedArray.\n     * The optional {byteOffset} and {length} arguments specify a memory range\n     * within the {arrayBuffer} that will be shared by the Buffer.\n     *\n     * @param arrayBuffer The .buffer property of a TypedArray or a new ArrayBuffer()\n     * @param byteOffset\n     * @param length\n     */\n    static from(arrayBuffer: ArrayBuffer, byteOffset?: number, length?: number): Buffer;\n    /**\n     * Copies the passed {buffer} data onto a new Buffer instance.\n     *\n     * @param buffer\n     */\n    static from(buffer: Buffer | Uint8Array): Buffer;\n    /**\n     * Creates a new Buffer containing the given JavaScript string {str}.\n     * If provided, the {encoding} parameter identifies the character encoding.\n     * If not provided, {encoding} defaults to 'utf8'.\n     *\n     * @param str\n     */\n    static from(str: string, encoding?: string): Buffer;\n    /**\n     * Returns true if {obj} is a Buffer\n     *\n     * @param obj object to test.\n     */\n    static isBuffer(obj: any): obj is Buffer;\n    /**\n     * Returns true if {encoding} is a valid encoding argument.\n     * Valid string encodings in Node 0.12: 'ascii'|'utf8'|'utf16le'|'ucs2'(alias of 'utf16le')|'base64'|'binary'(deprecated)|'hex'\n     *\n     * @param encoding string to test.\n     */\n    static isEncoding(encoding: string): boolean;\n    /**\n     * Gives the actual byte length of a string. encoding defaults to 'utf8'.\n     * This is not the same as String.prototype.length since that returns the number of characters in a string.\n     *\n     * @param string string to test.\n     * @param encoding encoding used to evaluate (defaults to 'utf8')\n     */\n    static byteLength(string: string, encoding?: string): number;\n    /**\n     * Returns a buffer which is the result of concatenating all the buffers in the list together.\n     *\n     * If the list has no items, or if the totalLength is 0, then it returns a zero-length buffer.\n     * If the list has exactly one item, then the first item of the list is returned.\n     * If the list has more than one item, then a new Buffer is created.\n     *\n     * @param list An array of Buffer objects to concatenate\n     * @param totalLength Total length of the buffers when concatenated.\n     *   If totalLength is not provided, it is read from the buffers in the list. However, this adds an additional loop to the function, so it is faster to provide the length explicitly.\n     */\n    static concat(list: Uint8Array[], totalLength?: number): Buffer;\n    /**\n     * The same as buf1.compare(buf2).\n     */\n    static compare(buf1: Uint8Array, buf2: Uint8Array): number;\n    /**\n     * Allocates a new buffer of {size} octets.\n     *\n     * @param size count of octets to allocate.\n     * @param fill if specified, buffer will be initialized by calling buf.fill(fill).\n     *    If parameter is omitted, buffer will be filled with zeros.\n     * @param encoding encoding used for call to buf.fill while initializing\n     */\n    static alloc(size: number, fill?: string | Buffer | number, encoding?: string): Buffer;\n    /**\n     * Allocates a new buffer of {size} octets, leaving memory not initialized, so the contents\n     * of the newly created Buffer are unknown and may contain sensitive data.\n     *\n     * @param size count of octets to allocate\n     */\n    static allocUnsafe(size: number): Buffer;\n    /**\n     * Allocates a new non-pooled buffer of {size} octets, leaving memory not initialized, so the contents\n     * of the newly created Buffer are unknown and may contain sensitive data.\n     *\n     * @param size count of octets to allocate\n     */\n    static allocUnsafeSlow(size: number): Buffer;\n}\n/package.json\t{\n  \"name\": \"buffer\",\n  \"description\": \"Node.js Buffer API, for the browser\",\n  \"version\": \"6.0.3\",\n  \"author\": {\n    \"name\": \"Feross Aboukhadijeh\",\n    \"email\": \"feross@feross.org\",\n    \"url\": \"https://feross.org\"\n  },\n  \"bugs\": {\n    \"url\": \"https://github.com/feross/buffer/issues\"\n  },\n  \"contributors\": [\n    \"Romain Beauxis <toots@rastageeks.org>\",\n    \"James Halliday <mail@substack.net>\"\n  ],\n  \"dependencies\": {\n    \"base64-js\": \"^1.3.1\",\n    \"ieee754\": \"^1.2.1\"\n  },\n  \"devDependencies\": {\n    \"airtap\": \"^3.0.0\",\n    \"benchmark\": \"^2.1.4\",\n    \"browserify\": \"^17.0.0\",\n    \"concat-stream\": \"^2.0.0\",\n    \"hyperquest\": \"^2.1.3\",\n    \"is-buffer\": \"^2.0.5\",\n    \"is-nan\": \"^1.3.0\",\n    \"split\": \"^1.0.1\",\n    \"standard\": \"*\",\n    \"tape\": \"^5.0.1\",\n    \"through2\": \"^4.0.2\",\n    \"uglify-js\": \"^3.11.5\"\n  },\n  \"homepage\": \"https://github.com/feross/buffer\",\n  \"jspm\": {\n    \"map\": {\n      \"./index.js\": {\n        \"node\": \"@node/buffer\"\n      }\n    }\n  },\n  \"keywords\": [\n    \"arraybuffer\",\n    \"browser\",\n    \"browserify\",\n    \"buffer\",\n    \"compatible\",\n    \"dataview\",\n    \"uint8array\"\n  ],\n  \"license\": \"MIT\",\n  \"main\": \"index.js\",\n  \"types\": \"index.d.ts\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git://github.com/feross/buffer.git\"\n  },\n  \"scripts\": {\n    \"perf\": \"browserify --debug perf/bracket-notation.js > perf/bundle.js && open perf/index.html\",\n    \"perf-node\": \"node perf/bracket-notation.js && node perf/concat.js && node perf/copy-big.js && node perf/copy.js && node perf/new-big.js && node perf/new.js && node perf/readDoubleBE.js && node perf/readFloatBE.js && node perf/readUInt32LE.js && node perf/slice.js && node perf/writeFloatBE.js\",\n    \"size\": \"browserify -r ./ | uglifyjs -c -m | gzip | wc -c\",\n    \"test\": \"standard && node ./bin/test.js\",\n    \"test-browser-old\": \"airtap -- test/*.js\",\n    \"test-browser-old-local\": \"airtap --local -- test/*.js\",\n    \"test-browser-new\": \"airtap -- test/*.js test/node/*.js\",\n    \"test-browser-new-local\": \"airtap --local -- test/*.js test/node/*.js\",\n    \"test-node\": \"tape test/*.js test/node/*.js\",\n    \"update-authors\": \"./bin/update-authors.sh\"\n  },\n  \"standard\": {\n    \"ignore\": [\n      \"test/node/**/*.js\",\n      \"test/common.js\",\n      \"test/_polyfill.js\",\n      \"perf/**/*.js\"\n    ]\n  },\n  \"funding\": [\n    {\n      \"type\": \"github\",\n      \"url\": \"https://github.com/sponsors/feross\"\n    },\n    {\n      \"type\": \"patreon\",\n      \"url\": \"https://www.patreon.com/feross\"\n    },\n    {\n      \"type\": \"consulting\",\n      \"url\": \"https://feross.org/support\"\n    }\n  ]\n}\n/LICENSE\u0004RThe MIT License (MIT)\n\nCopyright (c) Feross Aboukhadijeh, and other contributors.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n/AUTHORS.md\n# Authors\n\n#### Ordered by first contribution.\n\n- Romain Beauxis (toots@rastageeks.org)\n- Tobias Koppers (tobias.koppers@googlemail.com)\n- Janus (ysangkok@gmail.com)\n- Rainer Dreyer (rdrey1@gmail.com)\n- Tõnis Tiigi (tonistiigi@gmail.com)\n- James Halliday (mail@substack.net)\n- Michael Williamson (mike@zwobble.org)\n- elliottcable (github@elliottcable.name)\n- rafael (rvalle@livelens.net)\n- Andrew Kelley (superjoe30@gmail.com)\n- Andreas Madsen (amwebdk@gmail.com)\n- Mike Brevoort (mike.brevoort@pearson.com)\n- Brian White (mscdex@mscdex.net)\n- Feross Aboukhadijeh (feross@feross.org)\n- Ruben Verborgh (ruben@verborgh.org)\n- eliang (eliang.cs@gmail.com)\n- Jesse Tane (jesse.tane@gmail.com)\n- Alfonso Boza (alfonso@cloud.com)\n- Mathias Buus (mathiasbuus@gmail.com)\n- Devon Govett (devongovett@gmail.com)\n- Daniel Cousens (github@dcousens.com)\n- Joseph Dykstra (josephdykstra@gmail.com)\n- Parsha Pourkhomami (parshap+git@gmail.com)\n- Damjan Košir (damjan.kosir@gmail.com)\n- daverayment (dave.rayment@gmail.com)\n- kawanet (u-suke@kawa.net)\n- Linus Unnebäck (linus@folkdatorn.se)\n- Nolan Lawson (nolan.lawson@gmail.com)\n- Calvin Metcalf (calvin.metcalf@gmail.com)\n- Koki Takahashi (hakatasiloving@gmail.com)\n- Guy Bedford (guybedford@gmail.com)\n- Jan Schär (jscissr@gmail.com)\n- RaulTsc (tomescu.raul@gmail.com)\n- Matthieu Monsch (monsch@alum.mit.edu)\n- Dan Ehrenberg (littledan@chromium.org)\n- Kirill Fomichev (fanatid@ya.ru)\n- Yusuke Kawasaki (u-suke@kawa.net)\n- DC (dcposch@dcpos.ch)\n- John-David Dalton (john.david.dalton@gmail.com)\n- adventure-yunfei (adventure030@gmail.com)\n- Emil Bay (github@tixz.dk)\n- Sam Sudar (sudar.sam@gmail.com)\n- Volker Mische (volker.mische@gmail.com)\n- David Walton (support@geekstocks.com)\n- Сковорода Никита Андреевич (chalkerx@gmail.com)\n- greenkeeper[bot] (greenkeeper[bot]@users.noreply.github.com)\n- ukstv (sergey.ukustov@machinomy.com)\n- Renée Kooi (renee@kooi.me)\n- ranbochen (ranbochen@qq.com)\n- Vladimir Borovik (bobahbdb@gmail.com)\n- greenkeeper[bot] (23040076+greenkeeper[bot]@users.noreply.github.com)\n- kumavis (aaron@kumavis.me)\n- Sergey Ukustov (sergey.ukustov@machinomy.com)\n- Fei Liu (liu.feiwood@gmail.com)\n- Blaine Bublitz (blaine.bublitz@gmail.com)\n- clement (clement@seald.io)\n- Koushik Dutta (koushd@gmail.com)\n- Jordan Harband (ljharb@gmail.com)\n- Niklas Mischkulnig (mischnic@users.noreply.github.com)\n- Nikolai Vavilov (vvnicholas@gmail.com)\n- Fedor Nezhivoi (gyzerok@users.noreply.github.com)\n- shuse2 (shus.toda@gmail.com)\n- Peter Newman (peternewman@users.noreply.github.com)\n- mathmakgakpak (44949126+mathmakgakpak@users.noreply.github.com)\n- jkkang (jkkang@smartauth.kr)\n- Deklan Webster (deklanw@gmail.com)\n- Martin Heidegger (martin.heidegger@gmail.com)\n\n#### Generated by bin/update-authors.sh.\n/index.js/*!\n * The buffer module from node.js, for the browser.\n *\n * @author   Feross Aboukhadijeh <https://feross.org>\n * @license  MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nconst base64 = require('base64-js')\nconst ieee754 = require('ieee754')\nconst customInspectSymbol =\n  (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation\n    ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation\n    : null\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nconst K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n *   === true    Use Uint8Array implementation (fastest)\n *   === false   Print warning and recommend using `buffer` v4.x which has an Object\n *               implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n    typeof console.error === 'function') {\n  console.error(\n    'This browser lacks typed array (Uint8Array) support which is required by ' +\n    '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n  )\n}\n\nfunction typedArraySupport () {\n  // Can typed array instances can be augmented?\n  try {\n    const arr = new Uint8Array(1)\n    const proto = { foo: function () { return 42 } }\n    Object.setPrototypeOf(proto, Uint8Array.prototype)\n    Object.setPrototypeOf(arr, proto)\n    return arr.foo() === 42\n  } catch (e) {\n    return false\n  }\n}\n\nObject.defineProperty(Buffer.prototype, 'parent', {\n  enumerable: true,\n  get: function () {\n    if (!Buffer.isBuffer(this)) return undefined\n    return this.buffer\n  }\n})\n\nObject.defineProperty(Buffer.prototype, 'offset', {\n  enumerable: true,\n  get: function () {\n    if (!Buffer.isBuffer(this)) return undefined\n    return this.byteOffset\n  }\n})\n\nfunction createBuffer (length) {\n  if (length > K_MAX_LENGTH) {\n    throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n  }\n  // Return an augmented `Uint8Array` instance\n  const buf = new Uint8Array(length)\n  Object.setPrototypeOf(buf, Buffer.prototype)\n  return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n  // Common case.\n  if (typeof arg === 'number') {\n    if (typeof encodingOrOffset === 'string') {\n      throw new TypeError(\n        'The \"string\" argument must be of type string. Received type number'\n      )\n    }\n    return allocUnsafe(arg)\n  }\n  return from(arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n  if (typeof value === 'string') {\n    return fromString(value, encodingOrOffset)\n  }\n\n  if (ArrayBuffer.isView(value)) {\n    return fromArrayView(value)\n  }\n\n  if (value == null) {\n    throw new TypeError(\n      'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n      'or Array-like Object. Received type ' + (typeof value)\n    )\n  }\n\n  if (isInstance(value, ArrayBuffer) ||\n      (value && isInstance(value.buffer, ArrayBuffer))) {\n    return fromArrayBuffer(value, encodingOrOffset, length)\n  }\n\n  if (typeof SharedArrayBuffer !== 'undefined' &&\n      (isInstance(value, SharedArrayBuffer) ||\n      (value && isInstance(value.buffer, SharedArrayBuffer)))) {\n    return fromArrayBuffer(value, encodingOrOffset, length)\n  }\n\n  if (typeof value === 'number') {\n    throw new TypeError(\n      'The \"value\" argument must not be of type number. Received type number'\n    )\n  }\n\n  const valueOf = value.valueOf && value.valueOf()\n  if (valueOf != null && valueOf !== value) {\n    return Buffer.from(valueOf, encodingOrOffset, length)\n  }\n\n  const b = fromObject(value)\n  if (b) return b\n\n  if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&\n      typeof value[Symbol.toPrimitive] === 'function') {\n    return Buffer.from(value[Symbol.toPrimitive]('string'), encodingOrOffset, length)\n  }\n\n  throw new TypeError(\n    'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n    'or Array-like Object. Received type ' + (typeof value)\n  )\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n  return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nObject.setPrototypeOf(Buffer.prototype, Uint8Array.prototype)\nObject.setPrototypeOf(Buffer, Uint8Array)\n\nfunction assertSize (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('\"size\" argument must be of type number')\n  } else if (size < 0) {\n    throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n  }\n}\n\nfunction alloc (size, fill, encoding) {\n  assertSize(size)\n  if (size <= 0) {\n    return createBuffer(size)\n  }\n  if (fill !== undefined) {\n    // Only pay attention to encoding if it's a string. This\n    // prevents accidentally sending in a number that would\n    // be interpreted as a start offset.\n    return typeof encoding === 'string'\n      ? createBuffer(size).fill(fill, encoding)\n      : createBuffer(size).fill(fill)\n  }\n  return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n  return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n  assertSize(size)\n  return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n  return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n  return allocUnsafe(size)\n}\n\nfunction fromString (string, encoding) {\n  if (typeof encoding !== 'string' || encoding === '') {\n    encoding = 'utf8'\n  }\n\n  if (!Buffer.isEncoding(encoding)) {\n    throw new TypeError('Unknown encoding: ' + encoding)\n  }\n\n  const length = byteLength(string, encoding) | 0\n  let buf = createBuffer(length)\n\n  const actual = buf.write(string, encoding)\n\n  if (actual !== length) {\n    // Writing a hex string, for example, that contains invalid characters will\n    // cause everything after the first invalid character to be ignored. (e.g.\n    // 'abxxcd' will be treated as 'ab')\n    buf = buf.slice(0, actual)\n  }\n\n  return buf\n}\n\nfunction fromArrayLike (array) {\n  const length = array.length < 0 ? 0 : checked(array.length) | 0\n  const buf = createBuffer(length)\n  for (let i = 0; i < length; i += 1) {\n    buf[i] = array[i] & 255\n  }\n  return buf\n}\n\nfunction fromArrayView (arrayView) {\n  if (isInstance(arrayView, Uint8Array)) {\n    const copy = new Uint8Array(arrayView)\n    return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength)\n  }\n  return fromArrayLike(arrayView)\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n  if (byteOffset < 0 || array.byteLength < byteOffset) {\n    throw new RangeError('\"offset\" is outside of buffer bounds')\n  }\n\n  if (array.byteLength < byteOffset + (length || 0)) {\n    throw new RangeError('\"length\" is outside of buffer bounds')\n  }\n\n  let buf\n  if (byteOffset === undefined && length === undefined) {\n    buf = new Uint8Array(array)\n  } else if (length === undefined) {\n    buf = new Uint8Array(array, byteOffset)\n  } else {\n    buf = new Uint8Array(array, byteOffset, length)\n  }\n\n  // Return an augmented `Uint8Array` instance\n  Object.setPrototypeOf(buf, Buffer.prototype)\n\n  return buf\n}\n\nfunction fromObject (obj) {\n  if (Buffer.isBuffer(obj)) {\n    const len = checked(obj.length) | 0\n    const buf = createBuffer(len)\n\n    if (buf.length === 0) {\n      return buf\n    }\n\n    obj.copy(buf, 0, 0, len)\n    return buf\n  }\n\n  if (obj.length !== undefined) {\n    if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n      return createBuffer(0)\n    }\n    return fromArrayLike(obj)\n  }\n\n  if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n    return fromArrayLike(obj.data)\n  }\n}\n\nfunction checked (length) {\n  // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n  // length is NaN (which is otherwise coerced to zero.)\n  if (length >= K_MAX_LENGTH) {\n    throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n                         'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n  }\n  return length | 0\n}\n\nfunction SlowBuffer (length) {\n  if (+length != length) { // eslint-disable-line eqeqeq\n    length = 0\n  }\n  return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n  return b != null && b._isBuffer === true &&\n    b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n}\n\nBuffer.compare = function compare (a, b) {\n  if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)\n  if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)\n  if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n    throw new TypeError(\n      'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n    )\n  }\n\n  if (a === b) return 0\n\n  let x = a.length\n  let y = b.length\n\n  for (let i = 0, len = Math.min(x, y); i < len; ++i) {\n    if (a[i] !== b[i]) {\n      x = a[i]\n      y = b[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n  switch (String(encoding).toLowerCase()) {\n    case 'hex':\n    case 'utf8':\n    case 'utf-8':\n    case 'ascii':\n    case 'latin1':\n    case 'binary':\n    case 'base64':\n    case 'ucs2':\n    case 'ucs-2':\n    case 'utf16le':\n    case 'utf-16le':\n      return true\n    default:\n      return false\n  }\n}\n\nBuffer.concat = function concat (list, length) {\n  if (!Array.isArray(list)) {\n    throw new TypeError('\"list\" argument must be an Array of Buffers')\n  }\n\n  if (list.length === 0) {\n    return Buffer.alloc(0)\n  }\n\n  let i\n  if (length === undefined) {\n    length = 0\n    for (i = 0; i < list.length; ++i) {\n      length += list[i].length\n    }\n  }\n\n  const buffer = Buffer.allocUnsafe(length)\n  let pos = 0\n  for (i = 0; i < list.length; ++i) {\n    let buf = list[i]\n    if (isInstance(buf, Uint8Array)) {\n      if (pos + buf.length > buffer.length) {\n        if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n        buf.copy(buffer, pos)\n      } else {\n        Uint8Array.prototype.set.call(\n          buffer,\n          buf,\n          pos\n        )\n      }\n    } else if (!Buffer.isBuffer(buf)) {\n      throw new TypeError('\"list\" argument must be an Array of Buffers')\n    } else {\n      buf.copy(buffer, pos)\n    }\n    pos += buf.length\n  }\n  return buffer\n}\n\nfunction byteLength (string, encoding) {\n  if (Buffer.isBuffer(string)) {\n    return string.length\n  }\n  if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n    return string.byteLength\n  }\n  if (typeof string !== 'string') {\n    throw new TypeError(\n      'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n      'Received type ' + typeof string\n    )\n  }\n\n  const len = string.length\n  const mustMatch = (arguments.length > 2 && arguments[2] === true)\n  if (!mustMatch && len === 0) return 0\n\n  // Use a for loop to avoid recursion\n  let loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'ascii':\n      case 'latin1':\n      case 'binary':\n        return len\n      case 'utf8':\n      case 'utf-8':\n        return utf8ToBytes(string).length\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return len * 2\n      case 'hex':\n        return len >>> 1\n      case 'base64':\n        return base64ToBytes(string).length\n      default:\n        if (loweredCase) {\n          return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n        }\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n  let loweredCase = false\n\n  // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n  // property of a typed array.\n\n  // This behaves neither like String nor Uint8Array in that we set start/end\n  // to their upper/lower bounds if the value passed is out of range.\n  // undefined is handled specially as per ECMA-262 6th Edition,\n  // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n  if (start === undefined || start < 0) {\n    start = 0\n  }\n  // Return early if start > this.length. Done here to prevent potential uint32\n  // coercion fail below.\n  if (start > this.length) {\n    return ''\n  }\n\n  if (end === undefined || end > this.length) {\n    end = this.length\n  }\n\n  if (end <= 0) {\n    return ''\n  }\n\n  // Force coercion to uint32. This will also coerce falsey/NaN values to 0.\n  end >>>= 0\n  start >>>= 0\n\n  if (end <= start) {\n    return ''\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  while (true) {\n    switch (encoding) {\n      case 'hex':\n        return hexSlice(this, start, end)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Slice(this, start, end)\n\n      case 'ascii':\n        return asciiSlice(this, start, end)\n\n      case 'latin1':\n      case 'binary':\n        return latin1Slice(this, start, end)\n\n      case 'base64':\n        return base64Slice(this, start, end)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return utf16leSlice(this, start, end)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = (encoding + '').toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n  const i = b[n]\n  b[n] = b[m]\n  b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n  const len = this.length\n  if (len % 2 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 16-bits')\n  }\n  for (let i = 0; i < len; i += 2) {\n    swap(this, i, i + 1)\n  }\n  return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n  const len = this.length\n  if (len % 4 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 32-bits')\n  }\n  for (let i = 0; i < len; i += 4) {\n    swap(this, i, i + 3)\n    swap(this, i + 1, i + 2)\n  }\n  return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n  const len = this.length\n  if (len % 8 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 64-bits')\n  }\n  for (let i = 0; i < len; i += 8) {\n    swap(this, i, i + 7)\n    swap(this, i + 1, i + 6)\n    swap(this, i + 2, i + 5)\n    swap(this, i + 3, i + 4)\n  }\n  return this\n}\n\nBuffer.prototype.toString = function toString () {\n  const length = this.length\n  if (length === 0) return ''\n  if (arguments.length === 0) return utf8Slice(this, 0, length)\n  return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.toLocaleString = Buffer.prototype.toString\n\nBuffer.prototype.equals = function equals (b) {\n  if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n  if (this === b) return true\n  return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n  let str = ''\n  const max = exports.INSPECT_MAX_BYTES\n  str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()\n  if (this.length > max) str += ' ... '\n  return '<Buffer ' + str + '>'\n}\nif (customInspectSymbol) {\n  Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n  if (isInstance(target, Uint8Array)) {\n    target = Buffer.from(target, target.offset, target.byteLength)\n  }\n  if (!Buffer.isBuffer(target)) {\n    throw new TypeError(\n      'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n      'Received type ' + (typeof target)\n    )\n  }\n\n  if (start === undefined) {\n    start = 0\n  }\n  if (end === undefined) {\n    end = target ? target.length : 0\n  }\n  if (thisStart === undefined) {\n    thisStart = 0\n  }\n  if (thisEnd === undefined) {\n    thisEnd = this.length\n  }\n\n  if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n    throw new RangeError('out of range index')\n  }\n\n  if (thisStart >= thisEnd && start >= end) {\n    return 0\n  }\n  if (thisStart >= thisEnd) {\n    return -1\n  }\n  if (start >= end) {\n    return 1\n  }\n\n  start >>>= 0\n  end >>>= 0\n  thisStart >>>= 0\n  thisEnd >>>= 0\n\n  if (this === target) return 0\n\n  let x = thisEnd - thisStart\n  let y = end - start\n  const len = Math.min(x, y)\n\n  const thisCopy = this.slice(thisStart, thisEnd)\n  const targetCopy = target.slice(start, end)\n\n  for (let i = 0; i < len; ++i) {\n    if (thisCopy[i] !== targetCopy[i]) {\n      x = thisCopy[i]\n      y = targetCopy[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n  // Empty buffer means no match\n  if (buffer.length === 0) return -1\n\n  // Normalize byteOffset\n  if (typeof byteOffset === 'string') {\n    encoding = byteOffset\n    byteOffset = 0\n  } else if (byteOffset > 0x7fffffff) {\n    byteOffset = 0x7fffffff\n  } else if (byteOffset < -0x80000000) {\n    byteOffset = -0x80000000\n  }\n  byteOffset = +byteOffset // Coerce to Number.\n  if (numberIsNaN(byteOffset)) {\n    // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n    byteOffset = dir ? 0 : (buffer.length - 1)\n  }\n\n  // Normalize byteOffset: negative offsets start from the end of the buffer\n  if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n  if (byteOffset >= buffer.length) {\n    if (dir) return -1\n    else byteOffset = buffer.length - 1\n  } else if (byteOffset < 0) {\n    if (dir) byteOffset = 0\n    else return -1\n  }\n\n  // Normalize val\n  if (typeof val === 'string') {\n    val = Buffer.from(val, encoding)\n  }\n\n  // Finally, search either indexOf (if dir is true) or lastIndexOf\n  if (Buffer.isBuffer(val)) {\n    // Special case: looking for empty string/buffer always fails\n    if (val.length === 0) {\n      return -1\n    }\n    return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n  } else if (typeof val === 'number') {\n    val = val & 0xFF // Search for a byte value [0-255]\n    if (typeof Uint8Array.prototype.indexOf === 'function') {\n      if (dir) {\n        return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n      } else {\n        return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n      }\n    }\n    return arrayIndexOf(buffer, [val], byteOffset, encoding, dir)\n  }\n\n  throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n  let indexSize = 1\n  let arrLength = arr.length\n  let valLength = val.length\n\n  if (encoding !== undefined) {\n    encoding = String(encoding).toLowerCase()\n    if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n        encoding === 'utf16le' || encoding === 'utf-16le') {\n      if (arr.length < 2 || val.length < 2) {\n        return -1\n      }\n      indexSize = 2\n      arrLength /= 2\n      valLength /= 2\n      byteOffset /= 2\n    }\n  }\n\n  function read (buf, i) {\n    if (indexSize === 1) {\n      return buf[i]\n    } else {\n      return buf.readUInt16BE(i * indexSize)\n    }\n  }\n\n  let i\n  if (dir) {\n    let foundIndex = -1\n    for (i = byteOffset; i < arrLength; i++) {\n      if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n        if (foundIndex === -1) foundIndex = i\n        if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n      } else {\n        if (foundIndex !== -1) i -= i - foundIndex\n        foundIndex = -1\n      }\n    }\n  } else {\n    if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n    for (i = byteOffset; i >= 0; i--) {\n      let found = true\n      for (let j = 0; j < valLength; j++) {\n        if (read(arr, i + j) !== read(val, j)) {\n          found = false\n          break\n        }\n      }\n      if (found) return i\n    }\n  }\n\n  return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n  return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n  offset = Number(offset) || 0\n  const remaining = buf.length - offset\n  if (!length) {\n    length = remaining\n  } else {\n    length = Number(length)\n    if (length > remaining) {\n      length = remaining\n    }\n  }\n\n  const strLen = string.length\n\n  if (length > strLen / 2) {\n    length = strLen / 2\n  }\n  let i\n  for (i = 0; i < length; ++i) {\n    const parsed = parseInt(string.substr(i * 2, 2), 16)\n    if (numberIsNaN(parsed)) return i\n    buf[offset + i] = parsed\n  }\n  return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n  return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n  return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n  return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n  return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n  // Buffer#write(string)\n  if (offset === undefined) {\n    encoding = 'utf8'\n    length = this.length\n    offset = 0\n  // Buffer#write(string, encoding)\n  } else if (length === undefined && typeof offset === 'string') {\n    encoding = offset\n    length = this.length\n    offset = 0\n  // Buffer#write(string, offset[, length][, encoding])\n  } else if (isFinite(offset)) {\n    offset = offset >>> 0\n    if (isFinite(length)) {\n      length = length >>> 0\n      if (encoding === undefined) encoding = 'utf8'\n    } else {\n      encoding = length\n      length = undefined\n    }\n  } else {\n    throw new Error(\n      'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n    )\n  }\n\n  const remaining = this.length - offset\n  if (length === undefined || length > remaining) length = remaining\n\n  if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n    throw new RangeError('Attempt to write outside buffer bounds')\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  let loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'hex':\n        return hexWrite(this, string, offset, length)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Write(this, string, offset, length)\n\n      case 'ascii':\n      case 'latin1':\n      case 'binary':\n        return asciiWrite(this, string, offset, length)\n\n      case 'base64':\n        // Warning: maxLength not taken into account in base64Write\n        return base64Write(this, string, offset, length)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return ucs2Write(this, string, offset, length)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n  return {\n    type: 'Buffer',\n    data: Array.prototype.slice.call(this._arr || this, 0)\n  }\n}\n\nfunction base64Slice (buf, start, end) {\n  if (start === 0 && end === buf.length) {\n    return base64.fromByteArray(buf)\n  } else {\n    return base64.fromByteArray(buf.slice(start, end))\n  }\n}\n\nfunction utf8Slice (buf, start, end) {\n  end = Math.min(buf.length, end)\n  const res = []\n\n  let i = start\n  while (i < end) {\n    const firstByte = buf[i]\n    let codePoint = null\n    let bytesPerSequence = (firstByte > 0xEF)\n      ? 4\n      : (firstByte > 0xDF)\n          ? 3\n          : (firstByte > 0xBF)\n              ? 2\n              : 1\n\n    if (i + bytesPerSequence <= end) {\n      let secondByte, thirdByte, fourthByte, tempCodePoint\n\n      switch (bytesPerSequence) {\n        case 1:\n          if (firstByte < 0x80) {\n            codePoint = firstByte\n          }\n          break\n        case 2:\n          secondByte = buf[i + 1]\n          if ((secondByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n            if (tempCodePoint > 0x7F) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 3:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n            if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 4:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          fourthByte = buf[i + 3]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n            if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n              codePoint = tempCodePoint\n            }\n          }\n      }\n    }\n\n    if (codePoint === null) {\n      // we did not generate a valid codePoint so insert a\n      // replacement char (U+FFFD) and advance only 1 byte\n      codePoint = 0xFFFD\n      bytesPerSequence = 1\n    } else if (codePoint > 0xFFFF) {\n      // encode to utf16 (surrogate pair dance)\n      codePoint -= 0x10000\n      res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n      codePoint = 0xDC00 | codePoint & 0x3FF\n    }\n\n    res.push(codePoint)\n    i += bytesPerSequence\n  }\n\n  return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nconst MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n  const len = codePoints.length\n  if (len <= MAX_ARGUMENTS_LENGTH) {\n    return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n  }\n\n  // Decode in chunks to avoid \"call stack size exceeded\".\n  let res = ''\n  let i = 0\n  while (i < len) {\n    res += String.fromCharCode.apply(\n      String,\n      codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n    )\n  }\n  return res\n}\n\nfunction asciiSlice (buf, start, end) {\n  let ret = ''\n  end = Math.min(buf.length, end)\n\n  for (let i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i] & 0x7F)\n  }\n  return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n  let ret = ''\n  end = Math.min(buf.length, end)\n\n  for (let i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i])\n  }\n  return ret\n}\n\nfunction hexSlice (buf, start, end) {\n  const len = buf.length\n\n  if (!start || start < 0) start = 0\n  if (!end || end < 0 || end > len) end = len\n\n  let out = ''\n  for (let i = start; i < end; ++i) {\n    out += hexSliceLookupTable[buf[i]]\n  }\n  return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n  const bytes = buf.slice(start, end)\n  let res = ''\n  // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)\n  for (let i = 0; i < bytes.length - 1; i += 2) {\n    res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n  }\n  return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n  const len = this.length\n  start = ~~start\n  end = end === undefined ? len : ~~end\n\n  if (start < 0) {\n    start += len\n    if (start < 0) start = 0\n  } else if (start > len) {\n    start = len\n  }\n\n  if (end < 0) {\n    end += len\n    if (end < 0) end = 0\n  } else if (end > len) {\n    end = len\n  }\n\n  if (end < start) end = start\n\n  const newBuf = this.subarray(start, end)\n  // Return an augmented `Uint8Array` instance\n  Object.setPrototypeOf(newBuf, Buffer.prototype)\n\n  return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n  if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n  if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUintLE =\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  let val = this[offset]\n  let mul = 1\n  let i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUintBE =\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) {\n    checkOffset(offset, byteLength, this.length)\n  }\n\n  let val = this[offset + --byteLength]\n  let mul = 1\n  while (byteLength > 0 && (mul *= 0x100)) {\n    val += this[offset + --byteLength] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUint8 =\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  return this[offset]\n}\n\nBuffer.prototype.readUint16LE =\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUint16BE =\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUint32LE =\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return ((this[offset]) |\n      (this[offset + 1] << 8) |\n      (this[offset + 2] << 16)) +\n      (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUint32BE =\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] * 0x1000000) +\n    ((this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    this[offset + 3])\n}\n\nBuffer.prototype.readBigUInt64LE = defineBigIntMethod(function readBigUInt64LE (offset) {\n  offset = offset >>> 0\n  validateNumber(offset, 'offset')\n  const first = this[offset]\n  const last = this[offset + 7]\n  if (first === undefined || last === undefined) {\n    boundsError(offset, this.length - 8)\n  }\n\n  const lo = first +\n    this[++offset] * 2 ** 8 +\n    this[++offset] * 2 ** 16 +\n    this[++offset] * 2 ** 24\n\n  const hi = this[++offset] +\n    this[++offset] * 2 ** 8 +\n    this[++offset] * 2 ** 16 +\n    last * 2 ** 24\n\n  return BigInt(lo) + (BigInt(hi) << BigInt(32))\n})\n\nBuffer.prototype.readBigUInt64BE = defineBigIntMethod(function readBigUInt64BE (offset) {\n  offset = offset >>> 0\n  validateNumber(offset, 'offset')\n  const first = this[offset]\n  const last = this[offset + 7]\n  if (first === undefined || last === undefined) {\n    boundsError(offset, this.length - 8)\n  }\n\n  const hi = first * 2 ** 24 +\n    this[++offset] * 2 ** 16 +\n    this[++offset] * 2 ** 8 +\n    this[++offset]\n\n  const lo = this[++offset] * 2 ** 24 +\n    this[++offset] * 2 ** 16 +\n    this[++offset] * 2 ** 8 +\n    last\n\n  return (BigInt(hi) << BigInt(32)) + BigInt(lo)\n})\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  let val = this[offset]\n  let mul = 1\n  let i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  let i = byteLength\n  let mul = 1\n  let val = this[offset + --i]\n  while (i > 0 && (mul *= 0x100)) {\n    val += this[offset + --i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  if (!(this[offset] & 0x80)) return (this[offset])\n  return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  const val = this[offset] | (this[offset + 1] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  const val = this[offset + 1] | (this[offset] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset]) |\n    (this[offset + 1] << 8) |\n    (this[offset + 2] << 16) |\n    (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] << 24) |\n    (this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    (this[offset + 3])\n}\n\nBuffer.prototype.readBigInt64LE = defineBigIntMethod(function readBigInt64LE (offset) {\n  offset = offset >>> 0\n  validateNumber(offset, 'offset')\n  const first = this[offset]\n  const last = this[offset + 7]\n  if (first === undefined || last === undefined) {\n    boundsError(offset, this.length - 8)\n  }\n\n  const val = this[offset + 4] +\n    this[offset + 5] * 2 ** 8 +\n    this[offset + 6] * 2 ** 16 +\n    (last << 24) // Overflow\n\n  return (BigInt(val) << BigInt(32)) +\n    BigInt(first +\n    this[++offset] * 2 ** 8 +\n    this[++offset] * 2 ** 16 +\n    this[++offset] * 2 ** 24)\n})\n\nBuffer.prototype.readBigInt64BE = defineBigIntMethod(function readBigInt64BE (offset) {\n  offset = offset >>> 0\n  validateNumber(offset, 'offset')\n  const first = this[offset]\n  const last = this[offset + 7]\n  if (first === undefined || last === undefined) {\n    boundsError(offset, this.length - 8)\n  }\n\n  const val = (first << 24) + // Overflow\n    this[++offset] * 2 ** 16 +\n    this[++offset] * 2 ** 8 +\n    this[++offset]\n\n  return (BigInt(val) << BigInt(32)) +\n    BigInt(this[++offset] * 2 ** 24 +\n    this[++offset] * 2 ** 16 +\n    this[++offset] * 2 ** 8 +\n    last)\n})\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n  if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n  if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUintLE =\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) {\n    const maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  let mul = 1\n  let i = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUintBE =\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) {\n    const maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  let i = byteLength - 1\n  let mul = 1\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUint8 =\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nBuffer.prototype.writeUint16LE =\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  this[offset] = (value & 0xff)\n  this[offset + 1] = (value >>> 8)\n  return offset + 2\n}\n\nBuffer.prototype.writeUint16BE =\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  this[offset] = (value >>> 8)\n  this[offset + 1] = (value & 0xff)\n  return offset + 2\n}\n\nBuffer.prototype.writeUint32LE =\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  this[offset + 3] = (value >>> 24)\n  this[offset + 2] = (value >>> 16)\n  this[offset + 1] = (value >>> 8)\n  this[offset] = (value & 0xff)\n  return offset + 4\n}\n\nBuffer.prototype.writeUint32BE =\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  this[offset] = (value >>> 24)\n  this[offset + 1] = (value >>> 16)\n  this[offset + 2] = (value >>> 8)\n  this[offset + 3] = (value & 0xff)\n  return offset + 4\n}\n\nfunction wrtBigUInt64LE (buf, value, offset, min, max) {\n  checkIntBI(value, min, max, buf, offset, 7)\n\n  let lo = Number(value & BigInt(0xffffffff))\n  buf[offset++] = lo\n  lo = lo >> 8\n  buf[offset++] = lo\n  lo = lo >> 8\n  buf[offset++] = lo\n  lo = lo >> 8\n  buf[offset++] = lo\n  let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n  buf[offset++] = hi\n  hi = hi >> 8\n  buf[offset++] = hi\n  hi = hi >> 8\n  buf[offset++] = hi\n  hi = hi >> 8\n  buf[offset++] = hi\n  return offset\n}\n\nfunction wrtBigUInt64BE (buf, value, offset, min, max) {\n  checkIntBI(value, min, max, buf, offset, 7)\n\n  let lo = Number(value & BigInt(0xffffffff))\n  buf[offset + 7] = lo\n  lo = lo >> 8\n  buf[offset + 6] = lo\n  lo = lo >> 8\n  buf[offset + 5] = lo\n  lo = lo >> 8\n  buf[offset + 4] = lo\n  let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n  buf[offset + 3] = hi\n  hi = hi >> 8\n  buf[offset + 2] = hi\n  hi = hi >> 8\n  buf[offset + 1] = hi\n  hi = hi >> 8\n  buf[offset] = hi\n  return offset + 8\n}\n\nBuffer.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE (value, offset = 0) {\n  return wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE (value, offset = 0) {\n  return wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    const limit = Math.pow(2, (8 * byteLength) - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  let i = 0\n  let mul = 1\n  let sub = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    const limit = Math.pow(2, (8 * byteLength) - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  let i = byteLength - 1\n  let mul = 1\n  let sub = 0\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n  if (value < 0) value = 0xff + value + 1\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  this[offset] = (value & 0xff)\n  this[offset + 1] = (value >>> 8)\n  return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  this[offset] = (value >>> 8)\n  this[offset + 1] = (value & 0xff)\n  return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  this[offset] = (value & 0xff)\n  this[offset + 1] = (value >>> 8)\n  this[offset + 2] = (value >>> 16)\n  this[offset + 3] = (value >>> 24)\n  return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  if (value < 0) value = 0xffffffff + value + 1\n  this[offset] = (value >>> 24)\n  this[offset + 1] = (value >>> 16)\n  this[offset + 2] = (value >>> 8)\n  this[offset + 3] = (value & 0xff)\n  return offset + 4\n}\n\nBuffer.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE (value, offset = 0) {\n  return wrtBigUInt64LE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nBuffer.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE (value, offset = 0) {\n  return wrtBigUInt64BE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n  if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 23, 4)\n  return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 52, 8)\n  return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n  if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')\n  if (!start) start = 0\n  if (!end && end !== 0) end = this.length\n  if (targetStart >= target.length) targetStart = target.length\n  if (!targetStart) targetStart = 0\n  if (end > 0 && end < start) end = start\n\n  // Copy 0 bytes; we're done\n  if (end === start) return 0\n  if (target.length === 0 || this.length === 0) return 0\n\n  // Fatal error conditions\n  if (targetStart < 0) {\n    throw new RangeError('targetStart out of bounds')\n  }\n  if (start < 0 || start >= this.length) throw new RangeError('Index out of range')\n  if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n  // Are we oob?\n  if (end > this.length) end = this.length\n  if (target.length - targetStart < end - start) {\n    end = target.length - targetStart + start\n  }\n\n  const len = end - start\n\n  if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n    // Use built-in when available, missing from IE11\n    this.copyWithin(targetStart, start, end)\n  } else {\n    Uint8Array.prototype.set.call(\n      target,\n      this.subarray(start, end),\n      targetStart\n    )\n  }\n\n  return len\n}\n\n// Usage:\n//    buffer.fill(number[, offset[, end]])\n//    buffer.fill(buffer[, offset[, end]])\n//    buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n  // Handle string cases:\n  if (typeof val === 'string') {\n    if (typeof start === 'string') {\n      encoding = start\n      start = 0\n      end = this.length\n    } else if (typeof end === 'string') {\n      encoding = end\n      end = this.length\n    }\n    if (encoding !== undefined && typeof encoding !== 'string') {\n      throw new TypeError('encoding must be a string')\n    }\n    if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n      throw new TypeError('Unknown encoding: ' + encoding)\n    }\n    if (val.length === 1) {\n      const code = val.charCodeAt(0)\n      if ((encoding === 'utf8' && code < 128) ||\n          encoding === 'latin1') {\n        // Fast path: If `val` fits into a single byte, use that numeric value.\n        val = code\n      }\n    }\n  } else if (typeof val === 'number') {\n    val = val & 255\n  } else if (typeof val === 'boolean') {\n    val = Number(val)\n  }\n\n  // Invalid ranges are not set to a default, so can range check early.\n  if (start < 0 || this.length < start || this.length < end) {\n    throw new RangeError('Out of range index')\n  }\n\n  if (end <= start) {\n    return this\n  }\n\n  start = start >>> 0\n  end = end === undefined ? this.length : end >>> 0\n\n  if (!val) val = 0\n\n  let i\n  if (typeof val === 'number') {\n    for (i = start; i < end; ++i) {\n      this[i] = val\n    }\n  } else {\n    const bytes = Buffer.isBuffer(val)\n      ? val\n      : Buffer.from(val, encoding)\n    const len = bytes.length\n    if (len === 0) {\n      throw new TypeError('The value \"' + val +\n        '\" is invalid for argument \"value\"')\n    }\n    for (i = 0; i < end - start; ++i) {\n      this[i + start] = bytes[i % len]\n    }\n  }\n\n  return this\n}\n\n// CUSTOM ERRORS\n// =============\n\n// Simplified versions from Node, changed for Buffer-only usage\nconst errors = {}\nfunction E (sym, getMessage, Base) {\n  errors[sym] = class NodeError extends Base {\n    constructor () {\n      super()\n\n      Object.defineProperty(this, 'message', {\n        value: getMessage.apply(this, arguments),\n        writable: true,\n        configurable: true\n      })\n\n      // Add the error code to the name to include it in the stack trace.\n      this.name = `${this.name} [${sym}]`\n      // Access the stack to generate the error message including the error code\n      // from the name.\n      this.stack // eslint-disable-line no-unused-expressions\n      // Reset the name to the actual name.\n      delete this.name\n    }\n\n    get code () {\n      return sym\n    }\n\n    set code (value) {\n      Object.defineProperty(this, 'code', {\n        configurable: true,\n        enumerable: true,\n        value,\n        writable: true\n      })\n    }\n\n    toString () {\n      return `${this.name} [${sym}]: ${this.message}`\n    }\n  }\n}\n\nE('ERR_BUFFER_OUT_OF_BOUNDS',\n  function (name) {\n    if (name) {\n      return `${name} is outside of buffer bounds`\n    }\n\n    return 'Attempt to access memory outside buffer bounds'\n  }, RangeError)\nE('ERR_INVALID_ARG_TYPE',\n  function (name, actual) {\n    return `The \"${name}\" argument must be of type number. Received type ${typeof actual}`\n  }, TypeError)\nE('ERR_OUT_OF_RANGE',\n  function (str, range, input) {\n    let msg = `The value of \"${str}\" is out of range.`\n    let received = input\n    if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) {\n      received = addNumericalSeparator(String(input))\n    } else if (typeof input === 'bigint') {\n      received = String(input)\n      if (input > BigInt(2) ** BigInt(32) || input < -(BigInt(2) ** BigInt(32))) {\n        received = addNumericalSeparator(received)\n      }\n      received += 'n'\n    }\n    msg += ` It must be ${range}. Received ${received}`\n    return msg\n  }, RangeError)\n\nfunction addNumericalSeparator (val) {\n  let res = ''\n  let i = val.length\n  const start = val[0] === '-' ? 1 : 0\n  for (; i >= start + 4; i -= 3) {\n    res = `_${val.slice(i - 3, i)}${res}`\n  }\n  return `${val.slice(0, i)}${res}`\n}\n\n// CHECK FUNCTIONS\n// ===============\n\nfunction checkBounds (buf, offset, byteLength) {\n  validateNumber(offset, 'offset')\n  if (buf[offset] === undefined || buf[offset + byteLength] === undefined) {\n    boundsError(offset, buf.length - (byteLength + 1))\n  }\n}\n\nfunction checkIntBI (value, min, max, buf, offset, byteLength) {\n  if (value > max || value < min) {\n    const n = typeof min === 'bigint' ? 'n' : ''\n    let range\n    if (byteLength > 3) {\n      if (min === 0 || min === BigInt(0)) {\n        range = `>= 0${n} and < 2${n} ** ${(byteLength + 1) * 8}${n}`\n      } else {\n        range = `>= -(2${n} ** ${(byteLength + 1) * 8 - 1}${n}) and < 2 ** ` +\n                `${(byteLength + 1) * 8 - 1}${n}`\n      }\n    } else {\n      range = `>= ${min}${n} and <= ${max}${n}`\n    }\n    throw new errors.ERR_OUT_OF_RANGE('value', range, value)\n  }\n  checkBounds(buf, offset, byteLength)\n}\n\nfunction validateNumber (value, name) {\n  if (typeof value !== 'number') {\n    throw new errors.ERR_INVALID_ARG_TYPE(name, 'number', value)\n  }\n}\n\nfunction boundsError (value, length, type) {\n  if (Math.floor(value) !== value) {\n    validateNumber(value, type)\n    throw new errors.ERR_OUT_OF_RANGE(type || 'offset', 'an integer', value)\n  }\n\n  if (length < 0) {\n    throw new errors.ERR_BUFFER_OUT_OF_BOUNDS()\n  }\n\n  throw new errors.ERR_OUT_OF_RANGE(type || 'offset',\n                                    `>= ${type ? 1 : 0} and <= ${length}`,\n                                    value)\n}\n\n// HELPER FUNCTIONS\n// ================\n\nconst INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n  // Node takes equal signs as end of the Base64 encoding\n  str = str.split('=')[0]\n  // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n  str = str.trim().replace(INVALID_BASE64_RE, '')\n  // Node converts strings with length < 2 to ''\n  if (str.length < 2) return ''\n  // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n  while (str.length % 4 !== 0) {\n    str = str + '='\n  }\n  return str\n}\n\nfunction utf8ToBytes (string, units) {\n  units = units || Infinity\n  let codePoint\n  const length = string.length\n  let leadSurrogate = null\n  const bytes = []\n\n  for (let i = 0; i < length; ++i) {\n    codePoint = string.charCodeAt(i)\n\n    // is surrogate component\n    if (codePoint > 0xD7FF && codePoint < 0xE000) {\n      // last char was a lead\n      if (!leadSurrogate) {\n        // no lead yet\n        if (codePoint > 0xDBFF) {\n          // unexpected trail\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        } else if (i + 1 === length) {\n          // unpaired lead\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        }\n\n        // valid lead\n        leadSurrogate = codePoint\n\n        continue\n      }\n\n      // 2 leads in a row\n      if (codePoint < 0xDC00) {\n        if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n        leadSurrogate = codePoint\n        continue\n      }\n\n      // valid surrogate pair\n      codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n    } else if (leadSurrogate) {\n      // valid bmp char, but last char was a lead\n      if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n    }\n\n    leadSurrogate = null\n\n    // encode utf8\n    if (codePoint < 0x80) {\n      if ((units -= 1) < 0) break\n      bytes.push(codePoint)\n    } else if (codePoint < 0x800) {\n      if ((units -= 2) < 0) break\n      bytes.push(\n        codePoint >> 0x6 | 0xC0,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x10000) {\n      if ((units -= 3) < 0) break\n      bytes.push(\n        codePoint >> 0xC | 0xE0,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x110000) {\n      if ((units -= 4) < 0) break\n      bytes.push(\n        codePoint >> 0x12 | 0xF0,\n        codePoint >> 0xC & 0x3F | 0x80,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else {\n      throw new Error('Invalid code point')\n    }\n  }\n\n  return bytes\n}\n\nfunction asciiToBytes (str) {\n  const byteArray = []\n  for (let i = 0; i < str.length; ++i) {\n    // Node's code seems to be doing this and not & 0x7F..\n    byteArray.push(str.charCodeAt(i) & 0xFF)\n  }\n  return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n  let c, hi, lo\n  const byteArray = []\n  for (let i = 0; i < str.length; ++i) {\n    if ((units -= 2) < 0) break\n\n    c = str.charCodeAt(i)\n    hi = c >> 8\n    lo = c % 256\n    byteArray.push(lo)\n    byteArray.push(hi)\n  }\n\n  return byteArray\n}\n\nfunction base64ToBytes (str) {\n  return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n  let i\n  for (i = 0; i < length; ++i) {\n    if ((i + offset >= dst.length) || (i >= src.length)) break\n    dst[i + offset] = src[i]\n  }\n  return i\n}\n\n// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\nfunction isInstance (obj, type) {\n  return obj instanceof type ||\n    (obj != null && obj.constructor != null && obj.constructor.name != null &&\n      obj.constructor.name === type.name)\n}\nfunction numberIsNaN (obj) {\n  // For IE11 support\n  return obj !== obj // eslint-disable-line no-self-compare\n}\n\n// Create lookup table for `toString('hex')`\n// See: https://github.com/feross/buffer/issues/219\nconst hexSliceLookupTable = (function () {\n  const alphabet = '0123456789abcdef'\n  const table = new Array(256)\n  for (let i = 0; i < 16; ++i) {\n    const i16 = i * 16\n    for (let j = 0; j < 16; ++j) {\n      table[i16 + j] = alphabet[i] + alphabet[j]\n    }\n  }\n  return table\n})()\n\n// Return not function with Error if BigInt not supported\nfunction defineBigIntMethod (fn) {\n  return typeof BigInt === 'undefined' ? BufferBigIntNotDefined : fn\n}\n\nfunction BufferBigIntNotDefined () {\n  throw new Error('BigInt not supported')\n}\n/README.mdC# buffer [![travis][travis-image]][travis-url] [![npm][npm-image]][npm-url] [![downloads][downloads-image]][downloads-url] [![javascript style guide][standard-image]][standard-url]\n\n[travis-image]: https://img.shields.io/travis/feross/buffer/master.svg\n[travis-url]: https://travis-ci.org/feross/buffer\n[npm-image]: https://img.shields.io/npm/v/buffer.svg\n[npm-url]: https://npmjs.org/package/buffer\n[downloads-image]: https://img.shields.io/npm/dm/buffer.svg\n[downloads-url]: https://npmjs.org/package/buffer\n[standard-image]: https://img.shields.io/badge/code_style-standard-brightgreen.svg\n[standard-url]: https://standardjs.com\n\n#### The buffer module from [node.js](https://nodejs.org/), for the browser.\n\n[![saucelabs][saucelabs-image]][saucelabs-url]\n\n[saucelabs-image]: https://saucelabs.com/browser-matrix/buffer.svg\n[saucelabs-url]: https://saucelabs.com/u/buffer\n\nWith [browserify](http://browserify.org), simply `require('buffer')` or use the `Buffer` global and you will get this module.\n\nThe goal is to provide an API that is 100% identical to\n[node's Buffer API](https://nodejs.org/api/buffer.html). Read the\n[official docs](https://nodejs.org/api/buffer.html) for the full list of properties,\ninstance methods, and class methods that are supported.\n\n## features\n\n- Manipulate binary data like a boss, in all browsers!\n- Super fast. Backed by Typed Arrays (`Uint8Array`/`ArrayBuffer`, not `Object`)\n- Extremely small bundle size (**6.75KB minified + gzipped**, 51.9KB with comments)\n- Excellent browser support (Chrome, Firefox, Edge, Safari 11+, iOS 11+, Android, etc.)\n- Preserves Node API exactly, with one minor difference (see below)\n- Square-bracket `buf[4]` notation works!\n- Does not modify any browser prototypes or put anything on `window`\n- Comprehensive test suite (including all buffer tests from node.js core)\n\n## install\n\nTo use this module directly (without browserify), install it:\n\n```bash\nnpm install buffer\n```\n\nThis module was previously called **native-buffer-browserify**, but please use **buffer**\nfrom now on.\n\nIf you do not use a bundler, you can use the [standalone script](https://bundle.run/buffer).\n\n## usage\n\nThe module's API is identical to node's `Buffer` API. Read the\n[official docs](https://nodejs.org/api/buffer.html) for the full list of properties,\ninstance methods, and class methods that are supported.\n\nAs mentioned above, `require('buffer')` or use the `Buffer` global with\n[browserify](http://browserify.org) and this module will automatically be included\nin your bundle. Almost any npm module will work in the browser, even if it assumes that\nthe node `Buffer` API will be available.\n\nTo depend on this module explicitly (without browserify), require it like this:\n\n```js\nvar Buffer = require('buffer/').Buffer  // note: the trailing slash is important!\n```\n\nTo require this module explicitly, use `require('buffer/')` which tells the node.js module\nlookup algorithm (also used by browserify) to use the **npm module** named `buffer`\ninstead of the **node.js core** module named `buffer`!\n\n\n## how does it work?\n\nThe Buffer constructor returns instances of `Uint8Array` that have their prototype\nchanged to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of `Uint8Array`,\nso the returned instances will have all the node `Buffer` methods and the\n`Uint8Array` methods. Square bracket notation works as expected -- it returns a\nsingle octet.\n\nThe `Uint8Array` prototype remains unmodified.\n\n\n## tracking the latest node api\n\nThis module tracks the Buffer API in the latest (unstable) version of node.js. The Buffer\nAPI is considered **stable** in the\n[node stability index](https://nodejs.org/docs/latest/api/documentation.html#documentation_stability_index),\nso it is unlikely that there will ever be breaking changes.\nNonetheless, when/if the Buffer API changes in node, this module's API will change\naccordingly.\n\n## related packages\n\n- [`buffer-reverse`](https://www.npmjs.com/package/buffer-reverse) - Reverse a buffer\n- [`buffer-xor`](https://www.npmjs.com/package/buffer-xor) - Bitwise xor a buffer\n- [`is-buffer`](https://www.npmjs.com/package/is-buffer) - Determine if an object is a Buffer without including the whole `Buffer` package\n\n## conversion packages\n\n### convert typed array to buffer\n\nUse [`typedarray-to-buffer`](https://www.npmjs.com/package/typedarray-to-buffer) to convert any kind of typed array to a `Buffer`. Does not perform a copy, so it's super fast.\n\n### convert buffer to typed array\n\n`Buffer` is a subclass of `Uint8Array` (which is a typed array). So there is no need to explicitly convert to typed array. Just use the buffer as a `Uint8Array`.\n\n### convert blob to buffer\n\nUse [`blob-to-buffer`](https://www.npmjs.com/package/blob-to-buffer) to convert a `Blob` to a `Buffer`.\n\n### convert buffer to blob\n\nTo convert a `Buffer` to a `Blob`, use the `Blob` constructor:\n\n```js\nvar blob = new Blob([ buffer ])\n```\n\nOptionally, specify a mimetype:\n\n```js\nvar blob = new Blob([ buffer ], { type: 'text/html' })\n```\n\n### convert arraybuffer to buffer\n\nTo convert an `ArrayBuffer` to a `Buffer`, use the `Buffer.from` function. Does not perform a copy, so it's super fast.\n\n```js\nvar buffer = Buffer.from(arrayBuffer)\n```\n\n### convert buffer to arraybuffer\n\nTo convert a `Buffer` to an `ArrayBuffer`, use the `.buffer` property (which is present on all `Uint8Array` objects):\n\n```js\nvar arrayBuffer = buffer.buffer.slice(\n  buffer.byteOffset, buffer.byteOffset + buffer.byteLength\n)\n```\n\nAlternatively, use the [`to-arraybuffer`](https://www.npmjs.com/package/to-arraybuffer) module.\n\n## performance\n\nSee perf tests in `/perf`.\n\n`BrowserBuffer` is the browser `buffer` module (this repo). `Uint8Array` is included as a\nsanity check (since `BrowserBuffer` uses `Uint8Array` under the hood, `Uint8Array` will\nalways be at least a bit faster). Finally, `NodeBuffer` is the node.js buffer module,\nwhich is included to compare against.\n\nNOTE: Performance has improved since these benchmarks were taken. PR welcome to update the README.\n\n### Chrome 38\n\n| Method | Operations | Accuracy | Sampled | Fastest |\n|:-------|:-----------|:---------|:--------|:-------:|\n| BrowserBuffer#bracket-notation | 11,457,464 ops/sec | ±0.86% | 66 | ✓ |\n| Uint8Array#bracket-notation | 10,824,332 ops/sec | ±0.74% | 65 | |\n| | | | |\n| BrowserBuffer#concat | 450,532 ops/sec | ±0.76% | 68 | |\n| Uint8Array#concat | 1,368,911 ops/sec | ±1.50% | 62 | ✓ |\n| | | | |\n| BrowserBuffer#copy(16000) | 903,001 ops/sec | ±0.96% | 67 | |\n| Uint8Array#copy(16000) | 1,422,441 ops/sec | ±1.04% | 66 | ✓ |\n| | | | |\n| BrowserBuffer#copy(16) | 11,431,358 ops/sec | ±0.46% | 69 | |\n| Uint8Array#copy(16) | 13,944,163 ops/sec | ±1.12% | 68 | ✓ |\n| | | | |\n| BrowserBuffer#new(16000) | 106,329 ops/sec | ±6.70% | 44 | |\n| Uint8Array#new(16000) | 131,001 ops/sec | ±2.85% | 31 | ✓ |\n| | | | |\n| BrowserBuffer#new(16) | 1,554,491 ops/sec | ±1.60% | 65 | |\n| Uint8Array#new(16) | 6,623,930 ops/sec | ±1.66% | 65 | ✓ |\n| | | | |\n| BrowserBuffer#readDoubleBE | 112,830 ops/sec | ±0.51% | 69 | ✓ |\n| DataView#getFloat64 | 93,500 ops/sec | ±0.57% | 68 | |\n| | | | |\n| BrowserBuffer#readFloatBE | 146,678 ops/sec | ±0.95% | 68 | ✓ |\n| DataView#getFloat32 | 99,311 ops/sec | ±0.41% | 67 | |\n| | | | |\n| BrowserBuffer#readUInt32LE | 843,214 ops/sec | ±0.70% | 69 | ✓ |\n| DataView#getUint32 | 103,024 ops/sec | ±0.64% | 67 | |\n| | | | |\n| BrowserBuffer#slice | 1,013,941 ops/sec | ±0.75% | 67 | |\n| Uint8Array#subarray | 1,903,928 ops/sec | ±0.53% | 67 | ✓ |\n| | | | |\n| BrowserBuffer#writeFloatBE | 61,387 ops/sec | ±0.90% | 67 | |\n| DataView#setFloat32 | 141,249 ops/sec | ±0.40% | 66 | ✓ |\n\n\n### Firefox 33\n\n| Method | Operations | Accuracy | Sampled | Fastest |\n|:-------|:-----------|:---------|:--------|:-------:|\n| BrowserBuffer#bracket-notation | 20,800,421 ops/sec | ±1.84% | 60 | |\n| Uint8Array#bracket-notation | 20,826,235 ops/sec | ±2.02% | 61 | ✓ |\n| | | | |\n| BrowserBuffer#concat | 153,076 ops/sec | ±2.32% | 61 | |\n| Uint8Array#concat | 1,255,674 ops/sec | ±8.65% | 52 | ✓ |\n| | | | |\n| BrowserBuffer#copy(16000) | 1,105,312 ops/sec | ±1.16% | 63 | |\n| Uint8Array#copy(16000) | 1,615,911 ops/sec | ±0.55% | 66 | ✓ |\n| | | | |\n| BrowserBuffer#copy(16) | 16,357,599 ops/sec | ±0.73% | 68 | |\n| Uint8Array#copy(16) | 31,436,281 ops/sec | ±1.05% | 68 | ✓ |\n| | | | |\n| BrowserBuffer#new(16000) | 52,995 ops/sec | ±6.01% | 35 | |\n| Uint8Array#new(16000) | 87,686 ops/sec | ±5.68% | 45 | ✓ |\n| | | | |\n| BrowserBuffer#new(16) | 252,031 ops/sec | ±1.61% | 66 | |\n| Uint8Array#new(16) | 8,477,026 ops/sec | ±0.49% | 68 | ✓ |\n| | | | |\n| BrowserBuffer#readDoubleBE | 99,871 ops/sec | ±0.41% | 69 | |\n| DataView#getFloat64 | 285,663 ops/sec | ±0.70% | 68 | ✓ |\n| | | | |\n| BrowserBuffer#readFloatBE | 115,540 ops/sec | ±0.42% | 69 | |\n| DataView#getFloat32 | 288,722 ops/sec | ±0.82% | 68 | ✓ |\n| | | | |\n| BrowserBuffer#readUInt32LE | 633,926 ops/sec | ±1.08% | 67 | ✓ |\n| DataView#getUint32 | 294,808 ops/sec | ±0.79% | 64 | |\n| | | | |\n| BrowserBuffer#slice | 349,425 ops/sec | ±0.46% | 69 | |\n| Uint8Array#subarray | 5,965,819 ops/sec | ±0.60% | 65 | ✓ |\n| | | | |\n| BrowserBuffer#writeFloatBE | 59,980 ops/sec | ±0.41% | 67 | |\n| DataView#setFloat32 | 317,634 ops/sec | ±0.63% | 68 | ✓ |\n\n### Safari 8\n\n| Method | Operations | Accuracy | Sampled | Fastest |\n|:-------|:-----------|:---------|:--------|:-------:|\n| BrowserBuffer#bracket-notation | 10,279,729 ops/sec | ±2.25% | 56 | ✓ |\n| Uint8Array#bracket-notation | 10,030,767 ops/sec | ±2.23% | 59 | |\n| | | | |\n| BrowserBuffer#concat | 144,138 ops/sec | ±1.38% | 65 | |\n| Uint8Array#concat | 4,950,764 ops/sec | ±1.70% | 63 | ✓ |\n| | | | |\n| BrowserBuffer#copy(16000) | 1,058,548 ops/sec | ±1.51% | 64 | |\n| Uint8Array#copy(16000) | 1,409,666 ops/sec | ±1.17% | 65 | ✓ |\n| | | | |\n| BrowserBuffer#copy(16) | 6,282,529 ops/sec | ±1.88% | 58 | |\n| Uint8Array#copy(16) | 11,907,128 ops/sec | ±2.87% | 58 | ✓ |\n| | | | |\n| BrowserBuffer#new(16000) | 101,663 ops/sec | ±3.89% | 57 | |\n| Uint8Array#new(16000) | 22,050,818 ops/sec | ±6.51% | 46 | ✓ |\n| | | | |\n| BrowserBuffer#new(16) | 176,072 ops/sec | ±2.13% | 64 | |\n| Uint8Array#new(16) | 24,385,731 ops/sec | ±5.01% | 51 | ✓ |\n| | | | |\n| BrowserBuffer#readDoubleBE | 41,341 ops/sec | ±1.06% | 67 | |\n| DataView#getFloat64 | 322,280 ops/sec | ±0.84% | 68 | ✓ |\n| | | | |\n| BrowserBuffer#readFloatBE | 46,141 ops/sec | ±1.06% | 65 | |\n| DataView#getFloat32 | 337,025 ops/sec | ±0.43% | 69 | ✓ |\n| | | | |\n| BrowserBuffer#readUInt32LE | 151,551 ops/sec | ±1.02% | 66 | |\n| DataView#getUint32 | 308,278 ops/sec | ±0.94% | 67 | ✓ |\n| | | | |\n| BrowserBuffer#slice | 197,365 ops/sec | ±0.95% | 66 | |\n| Uint8Array#subarray | 9,558,024 ops/sec | ±3.08% | 58 | ✓ |\n| | | | |\n| BrowserBuffer#writeFloatBE | 17,518 ops/sec | ±1.03% | 63 | |\n| DataView#setFloat32 | 319,751 ops/sec | ±0.48% | 68 | ✓ |\n\n\n### Node 0.11.14\n\n| Method | Operations | Accuracy | Sampled | Fastest |\n|:-------|:-----------|:---------|:--------|:-------:|\n| BrowserBuffer#bracket-notation | 10,489,828 ops/sec | ±3.25% | 90 | |\n| Uint8Array#bracket-notation | 10,534,884 ops/sec | ±0.81% | 92 | ✓ |\n| NodeBuffer#bracket-notation | 10,389,910 ops/sec | ±0.97% | 87 | |\n| | | | |\n| BrowserBuffer#concat | 487,830 ops/sec | ±2.58% | 88 | |\n| Uint8Array#concat | 1,814,327 ops/sec | ±1.28% | 88 | ✓ |\n| NodeBuffer#concat | 1,636,523 ops/sec | ±1.88% | 73 | |\n| | | | |\n| BrowserBuffer#copy(16000) | 1,073,665 ops/sec | ±0.77% | 90 | |\n| Uint8Array#copy(16000) | 1,348,517 ops/sec | ±0.84% | 89 | ✓ |\n| NodeBuffer#copy(16000) | 1,289,533 ops/sec | ±0.82% | 93 | |\n| | | | |\n| BrowserBuffer#copy(16) | 12,782,706 ops/sec | ±0.74% | 85 | |\n| Uint8Array#copy(16) | 14,180,427 ops/sec | ±0.93% | 92 | ✓ |\n| NodeBuffer#copy(16) | 11,083,134 ops/sec | ±1.06% | 89 | |\n| | | | |\n| BrowserBuffer#new(16000) | 141,678 ops/sec | ±3.30% | 67 | |\n| Uint8Array#new(16000) | 161,491 ops/sec | ±2.96% | 60 | |\n| NodeBuffer#new(16000) | 292,699 ops/sec | ±3.20% | 55 | ✓ |\n| | | | |\n| BrowserBuffer#new(16) | 1,655,466 ops/sec | ±2.41% | 82 | |\n| Uint8Array#new(16) | 14,399,926 ops/sec | ±0.91% | 94 | ✓ |\n| NodeBuffer#new(16) | 3,894,696 ops/sec | ±0.88% | 92 | |\n| | | | |\n| BrowserBuffer#readDoubleBE | 109,582 ops/sec | ±0.75% | 93 | ✓ |\n| DataView#getFloat64 | 91,235 ops/sec | ±0.81% | 90 | |\n| NodeBuffer#readDoubleBE | 88,593 ops/sec | ±0.96% | 81 | |\n| | | | |\n| BrowserBuffer#readFloatBE | 139,854 ops/sec | ±1.03% | 85 | ✓ |\n| DataView#getFloat32 | 98,744 ops/sec | ±0.80% | 89 | |\n| NodeBuffer#readFloatBE | 92,769 ops/sec | ±0.94% | 93 | |\n| | | | |\n| BrowserBuffer#readUInt32LE | 710,861 ops/sec | ±0.82% | 92 | |\n| DataView#getUint32 | 117,893 ops/sec | ±0.84% | 91 | |\n| NodeBuffer#readUInt32LE | 851,412 ops/sec | ±0.72% | 93 | ✓ |\n| | | | |\n| BrowserBuffer#slice | 1,673,877 ops/sec | ±0.73% | 94 | |\n| Uint8Array#subarray | 6,919,243 ops/sec | ±0.67% | 90 | ✓ |\n| NodeBuffer#slice | 4,617,604 ops/sec | ±0.79% | 93 | |\n| | | | |\n| BrowserBuffer#writeFloatBE | 66,011 ops/sec | ±0.75% | 93 | |\n| DataView#setFloat32 | 127,760 ops/sec | ±0.72% | 93 | ✓ |\n| NodeBuffer#writeFloatBE | 103,352 ops/sec | ±0.83% | 93 | |\n\n### iojs 1.8.1\n\n| Method | Operations | Accuracy | Sampled | Fastest |\n|:-------|:-----------|:---------|:--------|:-------:|\n| BrowserBuffer#bracket-notation | 10,990,488 ops/sec | ±1.11% | 91 | |\n| Uint8Array#bracket-notation | 11,268,757 ops/sec | ±0.65% | 97 | |\n| NodeBuffer#bracket-notation | 11,353,260 ops/sec | ±0.83% | 94 | ✓ |\n| | | | |\n| BrowserBuffer#concat | 378,954 ops/sec | ±0.74% | 94 | |\n| Uint8Array#concat | 1,358,288 ops/sec | ±0.97% | 87 | |\n| NodeBuffer#concat | 1,934,050 ops/sec | ±1.11% | 78 | ✓ |\n| | | | |\n| BrowserBuffer#copy(16000) | 894,538 ops/sec | ±0.56% | 84 | |\n| Uint8Array#copy(16000) | 1,442,656 ops/sec | ±0.71% | 96 | |\n| NodeBuffer#copy(16000) | 1,457,898 ops/sec | ±0.53% | 92 | ✓ |\n| | | | |\n| BrowserBuffer#copy(16) | 12,870,457 ops/sec | ±0.67% | 95 | |\n| Uint8Array#copy(16) | 16,643,989 ops/sec | ±0.61% | 93 | ✓ |\n| NodeBuffer#copy(16) | 14,885,848 ops/sec | ±0.74% | 94 | |\n| | | | |\n| BrowserBuffer#new(16000) | 109,264 ops/sec | ±4.21% | 63 | |\n| Uint8Array#new(16000) | 138,916 ops/sec | ±1.87% | 61 | |\n| NodeBuffer#new(16000) | 281,449 ops/sec | ±3.58% | 51 | ✓ |\n| | | | |\n| BrowserBuffer#new(16) | 1,362,935 ops/sec | ±0.56% | 99 | |\n| Uint8Array#new(16) | 6,193,090 ops/sec | ±0.64% | 95 | ✓ |\n| NodeBuffer#new(16) | 4,745,425 ops/sec | ±1.56% | 90 | |\n| | | | |\n| BrowserBuffer#readDoubleBE | 118,127 ops/sec | ±0.59% | 93 | ✓ |\n| DataView#getFloat64 | 107,332 ops/sec | ±0.65% | 91 | |\n| NodeBuffer#readDoubleBE | 116,274 ops/sec | ±0.94% | 95 | |\n| | | | |\n| BrowserBuffer#readFloatBE | 150,326 ops/sec | ±0.58% | 95 | ✓ |\n| DataView#getFloat32 | 110,541 ops/sec | ±0.57% | 98 | |\n| NodeBuffer#readFloatBE | 121,599 ops/sec | ±0.60% | 87 | |\n| | | | |\n| BrowserBuffer#readUInt32LE | 814,147 ops/sec | ±0.62% | 93 | |\n| DataView#getUint32 | 137,592 ops/sec | ±0.64% | 90 | |\n| NodeBuffer#readUInt32LE | 931,650 ops/sec | ±0.71% | 96 | ✓ |\n| | | | |\n| BrowserBuffer#slice | 878,590 ops/sec | ±0.68% | 93 | |\n| Uint8Array#subarray | 2,843,308 ops/sec | ±1.02% | 90 | |\n| NodeBuffer#slice | 4,998,316 ops/sec | ±0.68% | 90 | ✓ |\n| | | | |\n| BrowserBuffer#writeFloatBE | 65,927 ops/sec | ±0.74% | 93 | |\n| DataView#setFloat32 | 139,823 ops/sec | ±0.97% | 89 | ✓ |\n| NodeBuffer#writeFloatBE | 135,763 ops/sec | ±0.65% | 96 | |\n| | | | |\n\n## Testing the project\n\nFirst, install the project:\n\n    npm install\n\nThen, to run tests in Node.js, run:\n\n    npm run test-node\n\nTo test locally in a browser, you can run:\n\n    npm run test-browser-es5-local # For ES5 browsers that don't support ES6\n    npm run test-browser-es6-local # For ES6 compliant browsers\n\nThis will print out a URL that you can then open in a browser to run the tests, using [airtap](https://www.npmjs.com/package/airtap).\n\nTo run automated browser tests using Saucelabs, ensure that your `SAUCE_USERNAME` and `SAUCE_ACCESS_KEY` environment variables are set, then run:\n\n    npm test\n\nThis is what's run in Travis, to check against various browsers. The list of browsers is kept in the `bin/airtap-es5.yml` and `bin/airtap-es6.yml` files.\n\n## JavaScript Standard Style\n\nThis module uses [JavaScript Standard Style](https://github.com/feross/standard).\n\n[![JavaScript Style Guide](https://cdn.rawgit.com/feross/standard/master/badge.svg)](https://github.com/feross/standard)\n\nTo test that the code conforms to the style, `npm install` and run:\n\n    ./node_modules/.bin/standard\n\n## credit\n\nThis was originally forked from [buffer-browserify](https://github.com/toots/buffer-browserify).\n\n## Security Policies and Procedures\n\nThe `buffer` team and community take all security bugs in `buffer` seriously. Please see our [security policies and procedures](https://github.com/feross/security) document to learn how to report issues.\n\n## license\n\nMIT. Copyright (C) [Feross Aboukhadijeh](http://feross.org), and other contributors. Originally forked from an MIT-licensed module by Romain Beauxis.\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/Ynl0ZXNAMy4xLjI=",
    "content": "/LICENSE\u0004(The MIT License)\n\nCopyright (c) 2012-2014 TJ Holowaychuk <tj@vision-media.ca>\nCopyright (c) 2015 Jed Watson <jed.watson@me.com>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n/package.json\u0003{\n  \"name\": \"bytes\",\n  \"description\": \"Utility to parse a string bytes to bytes and vice-versa\",\n  \"version\": \"3.1.2\",\n  \"author\": \"TJ Holowaychuk <tj@vision-media.ca> (http://tjholowaychuk.com)\",\n  \"contributors\": [\n    \"Jed Watson <jed.watson@me.com>\",\n    \"Théo FIDRY <theo.fidry@gmail.com>\"\n  ],\n  \"license\": \"MIT\",\n  \"keywords\": [\n    \"byte\",\n    \"bytes\",\n    \"utility\",\n    \"parse\",\n    \"parser\",\n    \"convert\",\n    \"converter\"\n  ],\n  \"repository\": \"visionmedia/bytes.js\",\n  \"devDependencies\": {\n    \"eslint\": \"7.32.0\",\n    \"eslint-plugin-markdown\": \"2.2.1\",\n    \"mocha\": \"9.2.0\",\n    \"nyc\": \"15.1.0\"\n  },\n  \"files\": [\n    \"History.md\",\n    \"LICENSE\",\n    \"Readme.md\",\n    \"index.js\"\n  ],\n  \"engines\": {\n    \"node\": \">= 0.8\"\n  },\n  \"scripts\": {\n    \"lint\": \"eslint .\",\n    \"test\": \"mocha --check-leaks --reporter spec\",\n    \"test-ci\": \"nyc --reporter=lcov --reporter=text npm test\",\n    \"test-cov\": \"nyc --reporter=html --reporter=text npm test\"\n  }\n}\n/index.js\u000e\u001d/*!\n * bytes\n * Copyright(c) 2012-2014 TJ Holowaychuk\n * Copyright(c) 2015 Jed Watson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = bytes;\nmodule.exports.format = format;\nmodule.exports.parse = parse;\n\n/**\n * Module variables.\n * @private\n */\n\nvar formatThousandsRegExp = /\\B(?=(\\d{3})+(?!\\d))/g;\n\nvar formatDecimalsRegExp = /(?:\\.0*|(\\.[^0]+)0+)$/;\n\nvar map = {\n  b:  1,\n  kb: 1 << 10,\n  mb: 1 << 20,\n  gb: 1 << 30,\n  tb: Math.pow(1024, 4),\n  pb: Math.pow(1024, 5),\n};\n\nvar parseRegExp = /^((-|\\+)?(\\d+(?:\\.\\d+)?)) *(kb|mb|gb|tb|pb)$/i;\n\n/**\n * Convert the given value in bytes into a string or parse to string to an integer in bytes.\n *\n * @param {string|number} value\n * @param {{\n *  case: [string],\n *  decimalPlaces: [number]\n *  fixedDecimals: [boolean]\n *  thousandsSeparator: [string]\n *  unitSeparator: [string]\n *  }} [options] bytes options.\n *\n * @returns {string|number|null}\n */\n\nfunction bytes(value, options) {\n  if (typeof value === 'string') {\n    return parse(value);\n  }\n\n  if (typeof value === 'number') {\n    return format(value, options);\n  }\n\n  return null;\n}\n\n/**\n * Format the given value in bytes into a string.\n *\n * If the value is negative, it is kept as such. If it is a float,\n * it is rounded.\n *\n * @param {number} value\n * @param {object} [options]\n * @param {number} [options.decimalPlaces=2]\n * @param {number} [options.fixedDecimals=false]\n * @param {string} [options.thousandsSeparator=]\n * @param {string} [options.unit=]\n * @param {string} [options.unitSeparator=]\n *\n * @returns {string|null}\n * @public\n */\n\nfunction format(value, options) {\n  if (!Number.isFinite(value)) {\n    return null;\n  }\n\n  var mag = Math.abs(value);\n  var thousandsSeparator = (options && options.thousandsSeparator) || '';\n  var unitSeparator = (options && options.unitSeparator) || '';\n  var decimalPlaces = (options && options.decimalPlaces !== undefined) ? options.decimalPlaces : 2;\n  var fixedDecimals = Boolean(options && options.fixedDecimals);\n  var unit = (options && options.unit) || '';\n\n  if (!unit || !map[unit.toLowerCase()]) {\n    if (mag >= map.pb) {\n      unit = 'PB';\n    } else if (mag >= map.tb) {\n      unit = 'TB';\n    } else if (mag >= map.gb) {\n      unit = 'GB';\n    } else if (mag >= map.mb) {\n      unit = 'MB';\n    } else if (mag >= map.kb) {\n      unit = 'KB';\n    } else {\n      unit = 'B';\n    }\n  }\n\n  var val = value / map[unit.toLowerCase()];\n  var str = val.toFixed(decimalPlaces);\n\n  if (!fixedDecimals) {\n    str = str.replace(formatDecimalsRegExp, '$1');\n  }\n\n  if (thousandsSeparator) {\n    str = str.split('.').map(function (s, i) {\n      return i === 0\n        ? s.replace(formatThousandsRegExp, thousandsSeparator)\n        : s\n    }).join('.');\n  }\n\n  return str + unitSeparator + unit;\n}\n\n/**\n * Parse the string value into an integer in bytes.\n *\n * If no unit is given, it is assumed the value is in bytes.\n *\n * @param {number|string} val\n *\n * @returns {number|null}\n * @public\n */\n\nfunction parse(val) {\n  if (typeof val === 'number' && !isNaN(val)) {\n    return val;\n  }\n\n  if (typeof val !== 'string') {\n    return null;\n  }\n\n  // Test if the string passed is valid\n  var results = parseRegExp.exec(val);\n  var floatValue;\n  var unit = 'b';\n\n  if (!results) {\n    // Nothing could be extracted from the given string\n    floatValue = parseInt(val, 10);\n    unit = 'b'\n  } else {\n    // Retrieve the value and the unit\n    floatValue = parseFloat(results[1]);\n    unit = results[4].toLowerCase();\n  }\n\n  if (isNaN(floatValue)) {\n    return null;\n  }\n\n  return Math.floor(map[unit] * floatValue);\n}\n/Readme.md\u0012# Bytes utility\n\n[![NPM Version][npm-image]][npm-url]\n[![NPM Downloads][downloads-image]][downloads-url]\n[![Build Status][ci-image]][ci-url]\n[![Test Coverage][coveralls-image]][coveralls-url]\n\nUtility to parse a string bytes (ex: `1TB`) to bytes (`1099511627776`) and vice-versa.\n\n## Installation\n\nThis is a [Node.js](https://nodejs.org/en/) module available through the\n[npm registry](https://www.npmjs.com/). Installation is done using the\n[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally):\n\n```bash\n$ npm install bytes\n```\n\n## Usage\n\n```js\nvar bytes = require('bytes');\n```\n\n#### bytes(number｜string value, [options]): number｜string｜null\n\nDefault export function. Delegates to either `bytes.format` or `bytes.parse` based on the type of `value`.\n\n**Arguments**\n\n| Name    | Type     | Description        |\n|---------|----------|--------------------|\n| value   | `number`｜`string` | Number value to format or string value to parse |\n| options | `Object` | Conversion options for `format` |\n\n**Returns**\n\n| Name    | Type             | Description                                     |\n|---------|------------------|-------------------------------------------------|\n| results | `string`｜`number`｜`null` | Return null upon error. Numeric value in bytes, or string value otherwise. |\n\n**Example**\n\n```js\nbytes(1024);\n// output: '1KB'\n\nbytes('1KB');\n// output: 1024\n```\n\n#### bytes.format(number value, [options]): string｜null\n\nFormat the given value in bytes into a string. If the value is negative, it is kept as such. If it is a float, it is\n rounded.\n\n**Arguments**\n\n| Name    | Type     | Description        |\n|---------|----------|--------------------|\n| value   | `number` | Value in bytes     |\n| options | `Object` | Conversion options |\n\n**Options**\n\n| Property          | Type   | Description                                                                             |\n|-------------------|--------|-----------------------------------------------------------------------------------------|\n| decimalPlaces | `number`｜`null` | Maximum number of decimal places to include in output. Default value to `2`. |\n| fixedDecimals | `boolean`｜`null` | Whether to always display the maximum number of decimal places. Default value to `false` |\n| thousandsSeparator | `string`｜`null` | Example of values: `' '`, `','` and `'.'`... Default value to `''`. |\n| unit | `string`｜`null` | The unit in which the result will be returned (B/KB/MB/GB/TB). Default value to `''` (which means auto detect). |\n| unitSeparator | `string`｜`null` | Separator to use between number and unit. Default value to `''`. |\n\n**Returns**\n\n| Name    | Type             | Description                                     |\n|---------|------------------|-------------------------------------------------|\n| results | `string`｜`null` | Return null upon error. String value otherwise. |\n\n**Example**\n\n```js\nbytes.format(1024);\n// output: '1KB'\n\nbytes.format(1000);\n// output: '1000B'\n\nbytes.format(1000, {thousandsSeparator: ' '});\n// output: '1 000B'\n\nbytes.format(1024 * 1.7, {decimalPlaces: 0});\n// output: '2KB'\n\nbytes.format(1024, {unitSeparator: ' '});\n// output: '1 KB'\n```\n\n#### bytes.parse(string｜number value): number｜null\n\nParse the string value into an integer in bytes. If no unit is given, or `value`\nis a number, it is assumed the value is in bytes.\n\nSupported units and abbreviations are as follows and are case-insensitive:\n\n  * `b` for bytes\n  * `kb` for kilobytes\n  * `mb` for megabytes\n  * `gb` for gigabytes\n  * `tb` for terabytes\n  * `pb` for petabytes\n\nThe units are in powers of two, not ten. This means 1kb = 1024b according to this parser.\n\n**Arguments**\n\n| Name          | Type   | Description        |\n|---------------|--------|--------------------|\n| value   | `string`｜`number` | String to parse, or number in bytes.   |\n\n**Returns**\n\n| Name    | Type        | Description             |\n|---------|-------------|-------------------------|\n| results | `number`｜`null` | Return null upon error. Value in bytes otherwise. |\n\n**Example**\n\n```js\nbytes.parse('1KB');\n// output: 1024\n\nbytes.parse('1024');\n// output: 1024\n\nbytes.parse(1024);\n// output: 1024\n```\n\n## License\n\n[MIT](LICENSE)\n\n[ci-image]: https://badgen.net/github/checks/visionmedia/bytes.js/master?label=ci\n[ci-url]: https://github.com/visionmedia/bytes.js/actions?query=workflow%3Aci\n[coveralls-image]: https://badgen.net/coveralls/c/github/visionmedia/bytes.js/master\n[coveralls-url]: https://coveralls.io/r/visionmedia/bytes.js?branch=master\n[downloads-image]: https://badgen.net/npm/dm/bytes\n[downloads-url]: https://npmjs.org/package/bytes\n[npm-image]: https://badgen.net/npm/v/bytes\n[npm-url]: https://npmjs.org/package/bytes\n/History.md\u00063.1.2 / 2022-01-27\n==================\n\n  * Fix return value for un-parsable strings\n\n3.1.1 / 2021-11-15\n==================\n\n  * Fix \"thousandsSeparator\" incorrecting formatting fractional part\n\n3.1.0 / 2019-01-22\n==================\n\n  * Add petabyte (`pb`) support\n\n3.0.0 / 2017-08-31\n==================\n\n  * Change \"kB\" to \"KB\" in format output\n  * Remove support for Node.js 0.6\n  * Remove support for ComponentJS\n\n2.5.0 / 2017-03-24\n==================\n\n  * Add option \"unit\"\n\n2.4.0 / 2016-06-01\n==================\n\n  * Add option \"unitSeparator\"\n\n2.3.0 / 2016-02-15\n==================\n\n  * Drop partial bytes on all parsed units\n  * Fix non-finite numbers to `.format` to return `null`\n  * Fix parsing byte string that looks like hex\n  * perf: hoist regular expressions\n\n2.2.0 / 2015-11-13\n==================\n\n  * add option \"decimalPlaces\"\n  * add option \"fixedDecimals\"\n\n2.1.0 / 2015-05-21\n==================\n\n  * add `.format` export\n  * add `.parse` export\n\n2.0.2 / 2015-05-20\n==================\n\n  * remove map recreation\n  * remove unnecessary object construction\n\n2.0.1 / 2015-05-07\n==================\n\n  * fix browserify require\n  * remove node.extend dependency\n\n2.0.0 / 2015-04-12\n==================\n\n  * add option \"case\"\n  * add option \"thousandsSeparator\"\n  * return \"null\" on invalid parse input\n  * support proper round-trip: bytes(bytes(num)) === num\n  * units no longer case sensitive when parsing\n\n1.0.0 / 2014-05-05\n==================\n\n * add negative support. fixes #6\n\n0.3.0 / 2014-03-19\n==================\n\n * added terabyte support\n\n0.2.1 / 2013-04-01\n==================\n\n  * add .component\n\n0.2.0 / 2012-10-28\n==================\n\n  * bytes(200).should.eql('200b')\n\n0.1.0 / 2012-07-04\n==================\n\n  * add bytes to string conversion [yields]\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/Z2V0LWludHJpbnNpY0AxLjIuMA==",
    "content": "/.eslintrc\u0002[{\n\t\"root\": true,\n\n\t\"extends\": \"@ljharb\",\n\n\t\"env\": {\n\t\t\"es6\": true,\n\t\t\"es2017\": true,\n\t\t\"es2020\": true,\n\t\t\"es2021\": true,\n\t\t\"es2022\": true,\n\t},\n\n\t\"rules\": {\n\t\t\"array-bracket-newline\": 0,\n\t\t\"complexity\": 0,\n\t\t\"eqeqeq\": [2, \"allow-null\"],\n\t\t\"func-name-matching\": 0,\n\t\t\"id-length\": 0,\n\t\t\"max-lines\": 0,\n\t\t\"max-lines-per-function\": [2, 90],\n\t\t\"max-params\": [2, 4],\n\t\t\"max-statements\": 0,\n\t\t\"max-statements-per-line\": [2, { \"max\": 2 }],\n\t\t\"multiline-comment-style\": 0,\n\t\t\"no-magic-numbers\": 0,\n\t\t\"sort-keys\": 0,\n\t},\n\n\t\"overrides\": [\n\t\t{\n\t\t\t\"files\": \"test/**\",\n\t\t\t\"rules\": {\n\t\t\t\t\"new-cap\": 0,\n\t\t\t},\n\t\t},\n\t],\n}\n/.github/FUNDING.yml\u0002H# These are supported funding model platforms\n\ngithub: [ljharb]\npatreon: # Replace with a single Patreon username\nopen_collective: # Replace with a single Open Collective username\nko_fi: # Replace with a single Ko-fi username\ntidelift: npm/get-intrinsic\ncommunity_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry\nliberapay: # Replace with a single Liberapay username\nissuehunt: # Replace with a single IssueHunt username\notechie: # Replace with a single Otechie username\ncustom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']\n/README.md\n# get-intrinsic <sup>[![Version Badge][npm-version-svg]][package-url]</sup>\n\n[![github actions][actions-image]][actions-url]\n[![coverage][codecov-image]][codecov-url]\n[![dependency status][deps-svg]][deps-url]\n[![dev dependency status][dev-deps-svg]][dev-deps-url]\n[![License][license-image]][license-url]\n[![Downloads][downloads-image]][downloads-url]\n\n[![npm badge][npm-badge-png]][package-url]\n\nGet and robustly cache all JS language-level intrinsics at first require time.\n\nSee the syntax described [in the JS spec](https://tc39.es/ecma262/#sec-well-known-intrinsic-objects) for reference.\n\n## Example\n\n```js\nvar GetIntrinsic = require('get-intrinsic');\nvar assert = require('assert');\n\n// static methods\nassert.equal(GetIntrinsic('%Math.pow%'), Math.pow);\nassert.equal(Math.pow(2, 3), 8);\nassert.equal(GetIntrinsic('%Math.pow%')(2, 3), 8);\ndelete Math.pow;\nassert.equal(GetIntrinsic('%Math.pow%')(2, 3), 8);\n\n// instance methods\nvar arr = [1];\nassert.equal(GetIntrinsic('%Array.prototype.push%'), Array.prototype.push);\nassert.deepEqual(arr, [1]);\n\narr.push(2);\nassert.deepEqual(arr, [1, 2]);\n\nGetIntrinsic('%Array.prototype.push%').call(arr, 3);\nassert.deepEqual(arr, [1, 2, 3]);\n\ndelete Array.prototype.push;\nGetIntrinsic('%Array.prototype.push%').call(arr, 4);\nassert.deepEqual(arr, [1, 2, 3, 4]);\n\n// missing features\ndelete JSON.parse; // to simulate a real intrinsic that is missing in the environment\nassert.throws(() => GetIntrinsic('%JSON.parse%'));\nassert.equal(undefined, GetIntrinsic('%JSON.parse%', true));\n```\n\n## Tests\nSimply clone the repo, `npm install`, and run `npm test`\n\n## Security\n\nPlease email [@ljharb](https://github.com/ljharb) or see https://tidelift.com/security if you have a potential security vulnerability to report.\n\n[package-url]: https://npmjs.org/package/get-intrinsic\n[npm-version-svg]: https://versionbadg.es/ljharb/get-intrinsic.svg\n[deps-svg]: https://david-dm.org/ljharb/get-intrinsic.svg\n[deps-url]: https://david-dm.org/ljharb/get-intrinsic\n[dev-deps-svg]: https://david-dm.org/ljharb/get-intrinsic/dev-status.svg\n[dev-deps-url]: https://david-dm.org/ljharb/get-intrinsic#info=devDependencies\n[npm-badge-png]: https://nodei.co/npm/get-intrinsic.png?downloads=true&stars=true\n[license-image]: https://img.shields.io/npm/l/get-intrinsic.svg\n[license-url]: LICENSE\n[downloads-image]: https://img.shields.io/npm/dm/get-intrinsic.svg\n[downloads-url]: https://npm-stat.com/charts.html?package=get-intrinsic\n[codecov-image]: https://codecov.io/gh/ljharb/get-intrinsic/branch/main/graphs/badge.svg\n[codecov-url]: https://app.codecov.io/gh/ljharb/get-intrinsic/\n[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/ljharb/get-intrinsic\n[actions-url]: https://github.com/ljharb/get-intrinsic/actions\n/LICENSE\u0004/MIT License\n\nCopyright (c) 2020 Jordan Harband\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n/CHANGELOG.md$\u001a# Changelog\n\nAll notable changes to this project will be documented in this file.\n\nThe format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)\nand this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).\n\n## [v1.2.0](https://github.com/ljharb/get-intrinsic/compare/v1.1.3...v1.2.0) - 2023-01-19\n\n### Commits\n\n- [actions] update checkout action [`ca6b12f`](https://github.com/ljharb/get-intrinsic/commit/ca6b12f31eaacea4ea3b055e744cd61623385ffb)\n- [Dev Deps] update `@ljharb/eslint-config`, `es-abstract`, `object-inspect`, `tape` [`41a3727`](https://github.com/ljharb/get-intrinsic/commit/41a3727d0026fa04273ae216a5f8e12eefd72da8)\n- [Fix] ensure `Error.prototype` is undeniable [`c511e97`](https://github.com/ljharb/get-intrinsic/commit/c511e97ae99c764c4524b540dee7a70757af8da3)\n- [Dev Deps] update `aud`, `es-abstract`, `tape` [`1bef8a8`](https://github.com/ljharb/get-intrinsic/commit/1bef8a8fd439ebb80863199b6189199e0851ac67)\n- [Dev Deps] update `aud`, `es-abstract` [`0d41f16`](https://github.com/ljharb/get-intrinsic/commit/0d41f16bcd500bc28b7bfc98043ebf61ea081c26)\n- [New] add `BigInt64Array` and `BigUint64Array` [`a6cca25`](https://github.com/ljharb/get-intrinsic/commit/a6cca25f29635889b7e9bd669baf9e04be90e48c)\n- [Tests] use `gopd` [`ecf7722`](https://github.com/ljharb/get-intrinsic/commit/ecf7722240d15cfd16edda06acf63359c10fb9bd)\n\n## [v1.1.3](https://github.com/ljharb/get-intrinsic/compare/v1.1.2...v1.1.3) - 2022-09-12\n\n### Commits\n\n- [Dev Deps] update `es-abstract`, `es-value-fixtures`, `tape` [`07ff291`](https://github.com/ljharb/get-intrinsic/commit/07ff291816406ebe5a12d7f16965bde0942dd688)\n- [Fix] properly check for % signs [`50ac176`](https://github.com/ljharb/get-intrinsic/commit/50ac1760fe99c227e64eabde76e9c0e44cd881b5)\n\n## [v1.1.2](https://github.com/ljharb/get-intrinsic/compare/v1.1.1...v1.1.2) - 2022-06-08\n\n### Fixed\n\n- [Fix] properly validate against extra % signs [`#16`](https://github.com/ljharb/get-intrinsic/issues/16)\n\n### Commits\n\n- [actions] reuse common workflows [`0972547`](https://github.com/ljharb/get-intrinsic/commit/0972547efd0abc863fe4c445a6ca7eb4f8c6901d)\n- [meta] use `npmignore` to autogenerate an npmignore file [`5ba0b51`](https://github.com/ljharb/get-intrinsic/commit/5ba0b51d8d8d4f1c31d426d74abc0770fd106bad)\n- [actions] use `node/install` instead of `node/run`; use `codecov` action [`c364492`](https://github.com/ljharb/get-intrinsic/commit/c364492af4af51333e6f81c0bf21fd3d602c3661)\n- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `auto-changelog`, `es-abstract`, `object-inspect`, `tape` [`dc04dad`](https://github.com/ljharb/get-intrinsic/commit/dc04dad86f6e5608775a2640cb0db5927ae29ed9)\n- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `es-abstract`, `object-inspect`, `safe-publish-latest`, `tape` [`1c14059`](https://github.com/ljharb/get-intrinsic/commit/1c1405984e86dd2dc9366c15d8a0294a96a146a5)\n- [Tests] use `mock-property` [`b396ef0`](https://github.com/ljharb/get-intrinsic/commit/b396ef05bb73b1d699811abd64b0d9b97997fdda)\n- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `auto-changelog`, `object-inspect`, `tape` [`c2c758d`](https://github.com/ljharb/get-intrinsic/commit/c2c758d3b90af4fef0a76910d8d3c292ec8d1d3e)\n- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `es-abstract`, `es-value-fixtures`, `object-inspect`, `tape` [`29e3c09`](https://github.com/ljharb/get-intrinsic/commit/29e3c091c2bf3e17099969847e8729d0e46896de)\n- [actions] update codecov uploader [`8cbc141`](https://github.com/ljharb/get-intrinsic/commit/8cbc1418940d7a8941f3a7985cbc4ac095c5e13d)\n- [Dev Deps] update `@ljharb/eslint-config`, `es-abstract`, `es-value-fixtures`, `object-inspect`, `tape` [`10b6f5c`](https://github.com/ljharb/get-intrinsic/commit/10b6f5c02593fb3680c581d696ac124e30652932)\n- [readme] add github actions/codecov badges [`4e25400`](https://github.com/ljharb/get-intrinsic/commit/4e25400d9f51ae9eb059cbe22d9144e70ea214e8)\n- [Tests] use `for-each` instead of `foreach` [`c05b957`](https://github.com/ljharb/get-intrinsic/commit/c05b957ad9a7bc7721af7cc9e9be1edbfe057496)\n- [Dev Deps] update `es-abstract` [`29b05ae`](https://github.com/ljharb/get-intrinsic/commit/29b05aec3e7330e9ad0b8e0f685a9112c20cdd97)\n- [meta] use `prepublishOnly` script for npm 7+ [`95c285d`](https://github.com/ljharb/get-intrinsic/commit/95c285da810516057d3bbfa871176031af38f05d)\n- [Deps] update `has-symbols` [`593cb4f`](https://github.com/ljharb/get-intrinsic/commit/593cb4fb38e7922e40e42c183f45274b636424cd)\n- [readme] fix repo URLs [`1c8305b`](https://github.com/ljharb/get-intrinsic/commit/1c8305b5365827c9b6fc785434aac0e1328ff2f5)\n- [Deps] update `has-symbols` [`c7138b6`](https://github.com/ljharb/get-intrinsic/commit/c7138b6c6d73132d859471fb8c13304e1e7c8b20)\n- [Dev Deps] remove unused `has-bigints` [`bd63aff`](https://github.com/ljharb/get-intrinsic/commit/bd63aff6ad8f3a986c557fcda2914187bdaab359)\n\n## [v1.1.1](https://github.com/ljharb/get-intrinsic/compare/v1.1.0...v1.1.1) - 2021-02-03\n\n### Fixed\n\n- [meta] export `./package.json` [`#9`](https://github.com/ljharb/get-intrinsic/issues/9)\n\n### Commits\n\n- [readme] flesh out the readme; use `evalmd` [`d12f12c`](https://github.com/ljharb/get-intrinsic/commit/d12f12c15345a0a0772cc65a7c64369529abd614)\n- [eslint] set up proper globals config [`5a8c098`](https://github.com/ljharb/get-intrinsic/commit/5a8c0984e3319d1ac0e64b102f8ec18b64e79f36)\n- [Dev Deps] update `eslint` [`7b9a5c0`](https://github.com/ljharb/get-intrinsic/commit/7b9a5c0d31a90ca1a1234181c74988fb046701cd)\n\n## [v1.1.0](https://github.com/ljharb/get-intrinsic/compare/v1.0.2...v1.1.0) - 2021-01-25\n\n### Fixed\n\n- [Refactor] delay `Function` eval until syntax-derived values are requested [`#3`](https://github.com/ljharb/get-intrinsic/issues/3)\n\n### Commits\n\n- [Tests] migrate tests to Github Actions [`2ab762b`](https://github.com/ljharb/get-intrinsic/commit/2ab762b48164aea8af37a40ba105bbc8246ab8c4)\n- [meta] do not publish github action workflow files [`5e7108e`](https://github.com/ljharb/get-intrinsic/commit/5e7108e4768b244d48d9567ba4f8a6cab9c65b8e)\n- [Tests] add some coverage [`01ac7a8`](https://github.com/ljharb/get-intrinsic/commit/01ac7a87ac29738567e8524cd8c9e026b1fa8cb3)\n- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `call-bind`, `es-abstract`, `tape`; add `call-bind` [`911b672`](https://github.com/ljharb/get-intrinsic/commit/911b672fbffae433a96924c6ce013585e425f4b7)\n- [Refactor] rearrange evalled constructors a bit [`7e7e4bf`](https://github.com/ljharb/get-intrinsic/commit/7e7e4bf583f3799c8ac1c6c5e10d2cb553957347)\n- [meta] add Automatic Rebase and Require Allow Edits workflows [`0199968`](https://github.com/ljharb/get-intrinsic/commit/01999687a263ffce0a3cb011dfbcb761754aedbc)\n\n## [v1.0.2](https://github.com/ljharb/get-intrinsic/compare/v1.0.1...v1.0.2) - 2020-12-17\n\n### Commits\n\n- [Fix] Throw for non‑existent intrinsics [`68f873b`](https://github.com/ljharb/get-intrinsic/commit/68f873b013c732a05ad6f5fc54f697e55515461b)\n- [Fix] Throw for non‑existent segments in the intrinsic path [`8325dee`](https://github.com/ljharb/get-intrinsic/commit/8325deee43128f3654d3399aa9591741ebe17b21)\n- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `has-bigints`, `object-inspect` [`0c227a7`](https://github.com/ljharb/get-intrinsic/commit/0c227a7d8b629166f25715fd242553892e458525)\n- [meta] do not lint coverage output [`70d2419`](https://github.com/ljharb/get-intrinsic/commit/70d24199b620043cd9110fc5f426d214ebe21dc9)\n\n## [v1.0.1](https://github.com/ljharb/get-intrinsic/compare/v1.0.0...v1.0.1) - 2020-10-30\n\n### Commits\n\n- [Tests] gather coverage data on every job [`d1d280d`](https://github.com/ljharb/get-intrinsic/commit/d1d280dec714e3f0519cc877dbcb193057d9cac6)\n- [Fix] add missing dependencies [`5031771`](https://github.com/ljharb/get-intrinsic/commit/5031771bb1095b38be88ce7c41d5de88718e432e)\n- [Tests] use `es-value-fixtures` [`af48765`](https://github.com/ljharb/get-intrinsic/commit/af48765a23c5323fb0b6b38dbf00eb5099c7bebc)\n\n## v1.0.0 - 2020-10-29\n\n### Commits\n\n- Implementation [`bbce57c`](https://github.com/ljharb/get-intrinsic/commit/bbce57c6f33d05b2d8d3efa273ceeb3ee01127bb)\n- Tests [`17b4f0d`](https://github.com/ljharb/get-intrinsic/commit/17b4f0d56dea6b4059b56fc30ef3ee4d9500ebc2)\n- Initial commit [`3153294`](https://github.com/ljharb/get-intrinsic/commit/31532948de363b0a27dd9fd4649e7b7028ec4b44)\n- npm init [`fb326c4`](https://github.com/ljharb/get-intrinsic/commit/fb326c4d2817c8419ec31de1295f06bb268a7902)\n- [meta] add Automatic Rebase and Require Allow Edits workflows [`48862fb`](https://github.com/ljharb/get-intrinsic/commit/48862fb2508c8f6a57968e6d08b7c883afc9d550)\n- [meta] add `auto-changelog` [`5f28ad0`](https://github.com/ljharb/get-intrinsic/commit/5f28ad019e060a353d8028f9f2591a9cc93074a1)\n- [meta] add \"funding\"; create `FUNDING.yml` [`c2bbdde`](https://github.com/ljharb/get-intrinsic/commit/c2bbddeba73a875be61484ee4680b129a6d4e0a1)\n- [Tests] add `npm run lint` [`0a84b98`](https://github.com/ljharb/get-intrinsic/commit/0a84b98b22b7cf7a748666f705b0003a493c35fd)\n- Only apps should have lockfiles [`9586c75`](https://github.com/ljharb/get-intrinsic/commit/9586c75866c1ee678e4d5d4dbbdef6997e511b05)\n/package.json\t-{\n\t\"name\": \"get-intrinsic\",\n\t\"version\": \"1.2.0\",\n\t\"description\": \"Get and robustly cache all JS language-level intrinsics at first require time\",\n\t\"main\": \"index.js\",\n\t\"exports\": {\n\t\t\".\": [\n\t\t\t{\n\t\t\t\t\"default\": \"./index.js\"\n\t\t\t},\n\t\t\t\"./index.js\"\n\t\t],\n\t\t\"./package.json\": \"./package.json\"\n\t},\n\t\"scripts\": {\n\t\t\"prepack\": \"npmignore --auto --commentLines=autogenerated\",\n\t\t\"prepublish\": \"not-in-publish || npm run prepublishOnly\",\n\t\t\"prepublishOnly\": \"safe-publish-latest\",\n\t\t\"prelint\": \"evalmd README.md\",\n\t\t\"lint\": \"eslint --ext=.js,.mjs .\",\n\t\t\"pretest\": \"npm run lint\",\n\t\t\"tests-only\": \"nyc tape 'test/**/*.js'\",\n\t\t\"test\": \"npm run tests-only\",\n\t\t\"posttest\": \"aud --production\",\n\t\t\"version\": \"auto-changelog && git add CHANGELOG.md\",\n\t\t\"postversion\": \"auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \\\"v$(node -e \\\"console.log(require('./package.json').version)\\\")\\\"\"\n\t},\n\t\"repository\": {\n\t\t\"type\": \"git\",\n\t\t\"url\": \"git+https://github.com/ljharb/get-intrinsic.git\"\n\t},\n\t\"keywords\": [\n\t\t\"javascript\",\n\t\t\"ecmascript\",\n\t\t\"es\",\n\t\t\"js\",\n\t\t\"intrinsic\",\n\t\t\"getintrinsic\",\n\t\t\"es-abstract\"\n\t],\n\t\"author\": \"Jordan Harband <ljharb@gmail.com>\",\n\t\"funding\": {\n\t\t\"url\": \"https://github.com/sponsors/ljharb\"\n\t},\n\t\"license\": \"MIT\",\n\t\"bugs\": {\n\t\t\"url\": \"https://github.com/ljharb/get-intrinsic/issues\"\n\t},\n\t\"homepage\": \"https://github.com/ljharb/get-intrinsic#readme\",\n\t\"devDependencies\": {\n\t\t\"@ljharb/eslint-config\": \"^21.0.1\",\n\t\t\"aud\": \"^2.0.2\",\n\t\t\"auto-changelog\": \"^2.4.0\",\n\t\t\"call-bind\": \"^1.0.2\",\n\t\t\"es-abstract\": \"^1.21.1\",\n\t\t\"es-value-fixtures\": \"^1.4.2\",\n\t\t\"eslint\": \"=8.8.0\",\n\t\t\"evalmd\": \"^0.0.19\",\n\t\t\"for-each\": \"^0.3.3\",\n\t\t\"gopd\": \"^1.0.1\",\n\t\t\"make-async-function\": \"^1.0.0\",\n\t\t\"make-async-generator-function\": \"^1.0.0\",\n\t\t\"make-generator-function\": \"^2.0.0\",\n\t\t\"mock-property\": \"^1.0.0\",\n\t\t\"npmignore\": \"^0.3.0\",\n\t\t\"nyc\": \"^10.3.2\",\n\t\t\"object-inspect\": \"^1.12.3\",\n\t\t\"safe-publish-latest\": \"^2.0.0\",\n\t\t\"tape\": \"^5.6.3\"\n\t},\n\t\"auto-changelog\": {\n\t\t\"output\": \"CHANGELOG.md\",\n\t\t\"template\": \"keepachangelog\",\n\t\t\"unreleased\": false,\n\t\t\"commitLimit\": false,\n\t\t\"backfillLimit\": false,\n\t\t\"hideCredit\": true\n\t},\n\t\"dependencies\": {\n\t\t\"function-bind\": \"^1.1.1\",\n\t\t\"has\": \"^1.0.3\",\n\t\t\"has-symbols\": \"^1.0.3\"\n\t},\n\t\"testling\": {\n\t\t\"files\": \"test/GetIntrinsic.js\"\n\t},\n\t\"publishConfig\": {\n\t\t\"ignore\": [\n\t\t\t\".github/workflows\"\n\t\t]\n\t}\n}\n/index.js3Y'use strict';\n\nvar undefined;\n\nvar $SyntaxError = SyntaxError;\nvar $Function = Function;\nvar $TypeError = TypeError;\n\n// eslint-disable-next-line consistent-return\nvar getEvalledConstructor = function (expressionSyntax) {\n\ttry {\n\t\treturn $Function('\"use strict\"; return (' + expressionSyntax + ').constructor;')();\n\t} catch (e) {}\n};\n\nvar $gOPD = Object.getOwnPropertyDescriptor;\nif ($gOPD) {\n\ttry {\n\t\t$gOPD({}, '');\n\t} catch (e) {\n\t\t$gOPD = null; // this is IE 8, which has a broken gOPD\n\t}\n}\n\nvar throwTypeError = function () {\n\tthrow new $TypeError();\n};\nvar ThrowTypeError = $gOPD\n\t? (function () {\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties\n\t\t\targuments.callee; // IE 8 does not throw here\n\t\t\treturn throwTypeError;\n\t\t} catch (calleeThrows) {\n\t\t\ttry {\n\t\t\t\t// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')\n\t\t\t\treturn $gOPD(arguments, 'callee').get;\n\t\t\t} catch (gOPDthrows) {\n\t\t\t\treturn throwTypeError;\n\t\t\t}\n\t\t}\n\t}())\n\t: throwTypeError;\n\nvar hasSymbols = require('has-symbols')();\n\nvar getProto = Object.getPrototypeOf || function (x) { return x.__proto__; }; // eslint-disable-line no-proto\n\nvar needsEval = {};\n\nvar TypedArray = typeof Uint8Array === 'undefined' ? undefined : getProto(Uint8Array);\n\nvar INTRINSICS = {\n\t'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,\n\t'%Array%': Array,\n\t'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n\t'%ArrayIteratorPrototype%': hasSymbols ? getProto([][Symbol.iterator]()) : undefined,\n\t'%AsyncFromSyncIteratorPrototype%': undefined,\n\t'%AsyncFunction%': needsEval,\n\t'%AsyncGenerator%': needsEval,\n\t'%AsyncGeneratorFunction%': needsEval,\n\t'%AsyncIteratorPrototype%': needsEval,\n\t'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n\t'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,\n\t'%BigInt64Array%': typeof BigInt64Array === 'undefined' ? undefined : BigInt64Array,\n\t'%BigUint64Array%': typeof BigUint64Array === 'undefined' ? undefined : BigUint64Array,\n\t'%Boolean%': Boolean,\n\t'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n\t'%Date%': Date,\n\t'%decodeURI%': decodeURI,\n\t'%decodeURIComponent%': decodeURIComponent,\n\t'%encodeURI%': encodeURI,\n\t'%encodeURIComponent%': encodeURIComponent,\n\t'%Error%': Error,\n\t'%eval%': eval, // eslint-disable-line no-eval\n\t'%EvalError%': EvalError,\n\t'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n\t'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n\t'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,\n\t'%Function%': $Function,\n\t'%GeneratorFunction%': needsEval,\n\t'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n\t'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n\t'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n\t'%isFinite%': isFinite,\n\t'%isNaN%': isNaN,\n\t'%IteratorPrototype%': hasSymbols ? getProto(getProto([][Symbol.iterator]())) : undefined,\n\t'%JSON%': typeof JSON === 'object' ? JSON : undefined,\n\t'%Map%': typeof Map === 'undefined' ? undefined : Map,\n\t'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols ? undefined : getProto(new Map()[Symbol.iterator]()),\n\t'%Math%': Math,\n\t'%Number%': Number,\n\t'%Object%': Object,\n\t'%parseFloat%': parseFloat,\n\t'%parseInt%': parseInt,\n\t'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n\t'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n\t'%RangeError%': RangeError,\n\t'%ReferenceError%': ReferenceError,\n\t'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n\t'%RegExp%': RegExp,\n\t'%Set%': typeof Set === 'undefined' ? undefined : Set,\n\t'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols ? getProto(''[Symbol.iterator]()) : undefined,\n\t'%Symbol%': hasSymbols ? Symbol : undefined,\n\t'%SyntaxError%': $SyntaxError,\n\t'%ThrowTypeError%': ThrowTypeError,\n\t'%TypedArray%': TypedArray,\n\t'%TypeError%': $TypeError,\n\t'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n\t'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n\t'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n\t'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n\t'%URIError%': URIError,\n\t'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n\t'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,\n\t'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet\n};\n\ntry {\n\tnull.error; // eslint-disable-line no-unused-expressions\n} catch (e) {\n\t// https://github.com/tc39/proposal-shadowrealm/pull/384#issuecomment-1364264229\n\tvar errorProto = getProto(getProto(e));\n\tINTRINSICS['%Error.prototype%'] = errorProto;\n}\n\nvar doEval = function doEval(name) {\n\tvar value;\n\tif (name === '%AsyncFunction%') {\n\t\tvalue = getEvalledConstructor('async function () {}');\n\t} else if (name === '%GeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('function* () {}');\n\t} else if (name === '%AsyncGeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('async function* () {}');\n\t} else if (name === '%AsyncGenerator%') {\n\t\tvar fn = doEval('%AsyncGeneratorFunction%');\n\t\tif (fn) {\n\t\t\tvalue = fn.prototype;\n\t\t}\n\t} else if (name === '%AsyncIteratorPrototype%') {\n\t\tvar gen = doEval('%AsyncGenerator%');\n\t\tif (gen) {\n\t\t\tvalue = getProto(gen.prototype);\n\t\t}\n\t}\n\n\tINTRINSICS[name] = value;\n\n\treturn value;\n};\n\nvar LEGACY_ALIASES = {\n\t'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],\n\t'%ArrayPrototype%': ['Array', 'prototype'],\n\t'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],\n\t'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],\n\t'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],\n\t'%ArrayProto_values%': ['Array', 'prototype', 'values'],\n\t'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],\n\t'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],\n\t'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],\n\t'%BooleanPrototype%': ['Boolean', 'prototype'],\n\t'%DataViewPrototype%': ['DataView', 'prototype'],\n\t'%DatePrototype%': ['Date', 'prototype'],\n\t'%ErrorPrototype%': ['Error', 'prototype'],\n\t'%EvalErrorPrototype%': ['EvalError', 'prototype'],\n\t'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],\n\t'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],\n\t'%FunctionPrototype%': ['Function', 'prototype'],\n\t'%Generator%': ['GeneratorFunction', 'prototype'],\n\t'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],\n\t'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],\n\t'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],\n\t'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],\n\t'%JSONParse%': ['JSON', 'parse'],\n\t'%JSONStringify%': ['JSON', 'stringify'],\n\t'%MapPrototype%': ['Map', 'prototype'],\n\t'%NumberPrototype%': ['Number', 'prototype'],\n\t'%ObjectPrototype%': ['Object', 'prototype'],\n\t'%ObjProto_toString%': ['Object', 'prototype', 'toString'],\n\t'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],\n\t'%PromisePrototype%': ['Promise', 'prototype'],\n\t'%PromiseProto_then%': ['Promise', 'prototype', 'then'],\n\t'%Promise_all%': ['Promise', 'all'],\n\t'%Promise_reject%': ['Promise', 'reject'],\n\t'%Promise_resolve%': ['Promise', 'resolve'],\n\t'%RangeErrorPrototype%': ['RangeError', 'prototype'],\n\t'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],\n\t'%RegExpPrototype%': ['RegExp', 'prototype'],\n\t'%SetPrototype%': ['Set', 'prototype'],\n\t'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],\n\t'%StringPrototype%': ['String', 'prototype'],\n\t'%SymbolPrototype%': ['Symbol', 'prototype'],\n\t'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],\n\t'%TypedArrayPrototype%': ['TypedArray', 'prototype'],\n\t'%TypeErrorPrototype%': ['TypeError', 'prototype'],\n\t'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],\n\t'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],\n\t'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],\n\t'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],\n\t'%URIErrorPrototype%': ['URIError', 'prototype'],\n\t'%WeakMapPrototype%': ['WeakMap', 'prototype'],\n\t'%WeakSetPrototype%': ['WeakSet', 'prototype']\n};\n\nvar bind = require('function-bind');\nvar hasOwn = require('has');\nvar $concat = bind.call(Function.call, Array.prototype.concat);\nvar $spliceApply = bind.call(Function.apply, Array.prototype.splice);\nvar $replace = bind.call(Function.call, String.prototype.replace);\nvar $strSlice = bind.call(Function.call, String.prototype.slice);\nvar $exec = bind.call(Function.call, RegExp.prototype.exec);\n\n/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */\nvar rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g; /** Used to match backslashes in property paths. */\nvar stringToPath = function stringToPath(string) {\n\tvar first = $strSlice(string, 0, 1);\n\tvar last = $strSlice(string, -1);\n\tif (first === '%' && last !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected closing `%`');\n\t} else if (last === '%' && first !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected opening `%`');\n\t}\n\tvar result = [];\n\t$replace(string, rePropName, function (match, number, quote, subString) {\n\t\tresult[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;\n\t});\n\treturn result;\n};\n/* end adaptation */\n\nvar getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {\n\tvar intrinsicName = name;\n\tvar alias;\n\tif (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n\t\talias = LEGACY_ALIASES[intrinsicName];\n\t\tintrinsicName = '%' + alias[0] + '%';\n\t}\n\n\tif (hasOwn(INTRINSICS, intrinsicName)) {\n\t\tvar value = INTRINSICS[intrinsicName];\n\t\tif (value === needsEval) {\n\t\t\tvalue = doEval(intrinsicName);\n\t\t}\n\t\tif (typeof value === 'undefined' && !allowMissing) {\n\t\t\tthrow new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n\t\t}\n\n\t\treturn {\n\t\t\talias: alias,\n\t\t\tname: intrinsicName,\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tthrow new $SyntaxError('intrinsic ' + name + ' does not exist!');\n};\n\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new $TypeError('intrinsic name must be a non-empty string');\n\t}\n\tif (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n\t\tthrow new $TypeError('\"allowMissing\" argument must be a boolean');\n\t}\n\n\tif ($exec(/^%?[^%]*%?$/, name) === null) {\n\t\tthrow new $SyntaxError('`%` may not be present anywhere but at the beginning and end of the intrinsic name');\n\t}\n\tvar parts = stringToPath(name);\n\tvar intrinsicBaseName = parts.length > 0 ? parts[0] : '';\n\n\tvar intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);\n\tvar intrinsicRealName = intrinsic.name;\n\tvar value = intrinsic.value;\n\tvar skipFurtherCaching = false;\n\n\tvar alias = intrinsic.alias;\n\tif (alias) {\n\t\tintrinsicBaseName = alias[0];\n\t\t$spliceApply(parts, $concat([0, 1], alias));\n\t}\n\n\tfor (var i = 1, isOwn = true; i < parts.length; i += 1) {\n\t\tvar part = parts[i];\n\t\tvar first = $strSlice(part, 0, 1);\n\t\tvar last = $strSlice(part, -1);\n\t\tif (\n\t\t\t(\n\t\t\t\t(first === '\"' || first === \"'\" || first === '`')\n\t\t\t\t|| (last === '\"' || last === \"'\" || last === '`')\n\t\t\t)\n\t\t\t&& first !== last\n\t\t) {\n\t\t\tthrow new $SyntaxError('property names with quotes must have matching quotes');\n\t\t}\n\t\tif (part === 'constructor' || !isOwn) {\n\t\t\tskipFurtherCaching = true;\n\t\t}\n\n\t\tintrinsicBaseName += '.' + part;\n\t\tintrinsicRealName = '%' + intrinsicBaseName + '%';\n\n\t\tif (hasOwn(INTRINSICS, intrinsicRealName)) {\n\t\t\tvalue = INTRINSICS[intrinsicRealName];\n\t\t} else if (value != null) {\n\t\t\tif (!(part in value)) {\n\t\t\t\tif (!allowMissing) {\n\t\t\t\t\tthrow new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');\n\t\t\t\t}\n\t\t\t\treturn void undefined;\n\t\t\t}\n\t\t\tif ($gOPD && (i + 1) >= parts.length) {\n\t\t\t\tvar desc = $gOPD(value, part);\n\t\t\t\tisOwn = !!desc;\n\n\t\t\t\t// By convention, when a data property is converted to an accessor\n\t\t\t\t// property to emulate a data property that does not suffer from\n\t\t\t\t// the override mistake, that accessor's getter is marked with\n\t\t\t\t// an `originalValue` property. Here, when we detect this, we\n\t\t\t\t// uphold the illusion by pretending to see that original data\n\t\t\t\t// property, i.e., returning the value rather than the getter\n\t\t\t\t// itself.\n\t\t\t\tif (isOwn && 'get' in desc && !('originalValue' in desc.get)) {\n\t\t\t\t\tvalue = desc.get;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = value[part];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisOwn = hasOwn(value, part);\n\t\t\t\tvalue = value[part];\n\t\t\t}\n\n\t\t\tif (isOwn && !skipFurtherCaching) {\n\t\t\t\tINTRINSICS[intrinsicRealName] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n/.nycrcċ{\n\t\"all\": true,\n\t\"check-coverage\": false,\n\t\"reporter\": [\"text-summary\", \"text\", \"html\", \"json\"],\n\t\"exclude\": [\n\t\t\"coverage\",\n\t\t\"test\"\n\t]\n}\n/test/GetIntrinsic.js\"?'use strict';\n\nvar GetIntrinsic = require('../');\n\nvar test = require('tape');\nvar forEach = require('for-each');\nvar debug = require('object-inspect');\nvar generatorFns = require('make-generator-function')();\nvar asyncFns = require('make-async-function').list();\nvar asyncGenFns = require('make-async-generator-function')();\nvar mockProperty = require('mock-property');\n\nvar callBound = require('call-bind/callBound');\nvar v = require('es-value-fixtures');\nvar $gOPD = require('gopd');\nvar DefinePropertyOrThrow = require('es-abstract/2021/DefinePropertyOrThrow');\n\nvar $isProto = callBound('%Object.prototype.isPrototypeOf%');\n\ntest('export', function (t) {\n\tt.equal(typeof GetIntrinsic, 'function', 'it is a function');\n\tt.equal(GetIntrinsic.length, 2, 'function has length of 2');\n\n\tt.end();\n});\n\ntest('throws', function (t) {\n\tt['throws'](\n\t\tfunction () { GetIntrinsic('not an intrinsic'); },\n\t\tSyntaxError,\n\t\t'nonexistent intrinsic throws a syntax error'\n\t);\n\n\tt['throws'](\n\t\tfunction () { GetIntrinsic(''); },\n\t\tTypeError,\n\t\t'empty string intrinsic throws a type error'\n\t);\n\n\tt['throws'](\n\t\tfunction () { GetIntrinsic('.'); },\n\t\tSyntaxError,\n\t\t'\"just a dot\" intrinsic throws a syntax error'\n\t);\n\n\tt['throws'](\n\t\tfunction () { GetIntrinsic('%String'); },\n\t\tSyntaxError,\n\t\t'Leading % without trailing % throws a syntax error'\n\t);\n\n\tt['throws'](\n\t\tfunction () { GetIntrinsic('String%'); },\n\t\tSyntaxError,\n\t\t'Trailing % without leading % throws a syntax error'\n\t);\n\n\tt['throws'](\n\t\tfunction () { GetIntrinsic(\"String['prototype]\"); },\n\t\tSyntaxError,\n\t\t'Dynamic property access is disallowed for intrinsics (unterminated string)'\n\t);\n\n\tt['throws'](\n\t\tfunction () { GetIntrinsic('%Proxy.prototype.undefined%'); },\n\t\tTypeError,\n\t\t\"Throws when middle part doesn't exist (%Proxy.prototype.undefined%)\"\n\t);\n\n\tt['throws'](\n\t\tfunction () { GetIntrinsic('%Array.prototype%garbage%'); },\n\t\tSyntaxError,\n\t\t'Throws with extra percent signs'\n\t);\n\n\tt['throws'](\n\t\tfunction () { GetIntrinsic('%Array.prototype%push%'); },\n\t\tSyntaxError,\n\t\t'Throws with extra percent signs, even on an existing intrinsic'\n\t);\n\n\tforEach(v.nonStrings, function (nonString) {\n\t\tt['throws'](\n\t\t\tfunction () { GetIntrinsic(nonString); },\n\t\t\tTypeError,\n\t\t\tdebug(nonString) + ' is not a String'\n\t\t);\n\t});\n\n\tforEach(v.nonBooleans, function (nonBoolean) {\n\t\tt['throws'](\n\t\t\tfunction () { GetIntrinsic('%', nonBoolean); },\n\t\t\tTypeError,\n\t\t\tdebug(nonBoolean) + ' is not a Boolean'\n\t\t);\n\t});\n\n\tforEach([\n\t\t'toString',\n\t\t'propertyIsEnumerable',\n\t\t'hasOwnProperty'\n\t], function (objectProtoMember) {\n\t\tt['throws'](\n\t\t\tfunction () { GetIntrinsic(objectProtoMember); },\n\t\t\tSyntaxError,\n\t\t\tdebug(objectProtoMember) + ' is not an intrinsic'\n\t\t);\n\t});\n\n\tt.end();\n});\n\ntest('base intrinsics', function (t) {\n\tt.equal(GetIntrinsic('%Object%'), Object, '%Object% yields Object');\n\tt.equal(GetIntrinsic('Object'), Object, 'Object yields Object');\n\tt.equal(GetIntrinsic('%Array%'), Array, '%Array% yields Array');\n\tt.equal(GetIntrinsic('Array'), Array, 'Array yields Array');\n\n\tt.end();\n});\n\ntest('dotted paths', function (t) {\n\tt.equal(GetIntrinsic('%Object.prototype.toString%'), Object.prototype.toString, '%Object.prototype.toString% yields Object.prototype.toString');\n\tt.equal(GetIntrinsic('Object.prototype.toString'), Object.prototype.toString, 'Object.prototype.toString yields Object.prototype.toString');\n\tt.equal(GetIntrinsic('%Array.prototype.push%'), Array.prototype.push, '%Array.prototype.push% yields Array.prototype.push');\n\tt.equal(GetIntrinsic('Array.prototype.push'), Array.prototype.push, 'Array.prototype.push yields Array.prototype.push');\n\n\ttest('underscore paths are aliases for dotted paths', { skip: !Object.isFrozen || Object.isFrozen(Object.prototype) }, function (st) {\n\t\tvar original = GetIntrinsic('%ObjProto_toString%');\n\n\t\tforEach([\n\t\t\t'%Object.prototype.toString%',\n\t\t\t'Object.prototype.toString',\n\t\t\t'%ObjectPrototype.toString%',\n\t\t\t'ObjectPrototype.toString',\n\t\t\t'%ObjProto_toString%',\n\t\t\t'ObjProto_toString'\n\t\t], function (name) {\n\t\t\tDefinePropertyOrThrow(Object.prototype, 'toString', {\n\t\t\t\t'[[Value]]': function toString() {\n\t\t\t\t\treturn original.apply(this, arguments);\n\t\t\t\t}\n\t\t\t});\n\t\t\tst.equal(GetIntrinsic(name), original, name + ' yields original Object.prototype.toString');\n\t\t});\n\n\t\tDefinePropertyOrThrow(Object.prototype, 'toString', { '[[Value]]': original });\n\t\tst.end();\n\t});\n\n\ttest('dotted paths cache', { skip: !Object.isFrozen || Object.isFrozen(Object.prototype) }, function (st) {\n\t\tvar original = GetIntrinsic('%Object.prototype.propertyIsEnumerable%');\n\n\t\tforEach([\n\t\t\t'%Object.prototype.propertyIsEnumerable%',\n\t\t\t'Object.prototype.propertyIsEnumerable',\n\t\t\t'%ObjectPrototype.propertyIsEnumerable%',\n\t\t\t'ObjectPrototype.propertyIsEnumerable'\n\t\t], function (name) {\n\t\t\tvar restore = mockProperty(Object.prototype, 'propertyIsEnumerable', {\n\t\t\t\tvalue: function propertyIsEnumerable() {\n\t\t\t\t\treturn original.apply(this, arguments);\n\t\t\t\t}\n\t\t\t});\n\t\t\tst.equal(GetIntrinsic(name), original, name + ' yields cached Object.prototype.propertyIsEnumerable');\n\n\t\t\trestore();\n\t\t});\n\n\t\tst.end();\n\t});\n\n\ttest('dotted path reports correct error', function (st) {\n\t\tst['throws'](function () {\n\t\t\tGetIntrinsic('%NonExistentIntrinsic.prototype.property%');\n\t\t}, /%NonExistentIntrinsic%/, 'The base intrinsic of %NonExistentIntrinsic.prototype.property% is %NonExistentIntrinsic%');\n\n\t\tst['throws'](function () {\n\t\t\tGetIntrinsic('%NonExistentIntrinsicPrototype.property%');\n\t\t}, /%NonExistentIntrinsicPrototype%/, 'The base intrinsic of %NonExistentIntrinsicPrototype.property% is %NonExistentIntrinsicPrototype%');\n\n\t\tst.end();\n\t});\n\n\tt.end();\n});\n\ntest('accessors', { skip: !$gOPD || typeof Map !== 'function' }, function (t) {\n\tvar actual = $gOPD(Map.prototype, 'size');\n\tt.ok(actual, 'Map.prototype.size has a descriptor');\n\tt.equal(typeof actual.get, 'function', 'Map.prototype.size has a getter function');\n\tt.equal(GetIntrinsic('%Map.prototype.size%'), actual.get, '%Map.prototype.size% yields the getter for it');\n\tt.equal(GetIntrinsic('Map.prototype.size'), actual.get, 'Map.prototype.size yields the getter for it');\n\n\tt.end();\n});\n\ntest('generator functions', { skip: !generatorFns.length }, function (t) {\n\tvar $GeneratorFunction = GetIntrinsic('%GeneratorFunction%');\n\tvar $GeneratorFunctionPrototype = GetIntrinsic('%Generator%');\n\tvar $GeneratorPrototype = GetIntrinsic('%GeneratorPrototype%');\n\n\tforEach(generatorFns, function (genFn) {\n\t\tvar fnName = genFn.name;\n\t\tfnName = fnName ? \"'\" + fnName + \"'\" : 'genFn';\n\n\t\tt.ok(genFn instanceof $GeneratorFunction, fnName + ' instanceof %GeneratorFunction%');\n\t\tt.ok($isProto($GeneratorFunctionPrototype, genFn), '%Generator% is prototype of ' + fnName);\n\t\tt.ok($isProto($GeneratorPrototype, genFn.prototype), '%GeneratorPrototype% is prototype of ' + fnName + '.prototype');\n\t});\n\n\tt.end();\n});\n\ntest('async functions', { skip: !asyncFns.length }, function (t) {\n\tvar $AsyncFunction = GetIntrinsic('%AsyncFunction%');\n\tvar $AsyncFunctionPrototype = GetIntrinsic('%AsyncFunctionPrototype%');\n\n\tforEach(asyncFns, function (asyncFn) {\n\t\tvar fnName = asyncFn.name;\n\t\tfnName = fnName ? \"'\" + fnName + \"'\" : 'asyncFn';\n\n\t\tt.ok(asyncFn instanceof $AsyncFunction, fnName + ' instanceof %AsyncFunction%');\n\t\tt.ok($isProto($AsyncFunctionPrototype, asyncFn), '%AsyncFunctionPrototype% is prototype of ' + fnName);\n\t});\n\n\tt.end();\n});\n\ntest('async generator functions', { skip: asyncGenFns.length === 0 }, function (t) {\n\tvar $AsyncGeneratorFunction = GetIntrinsic('%AsyncGeneratorFunction%');\n\tvar $AsyncGeneratorFunctionPrototype = GetIntrinsic('%AsyncGenerator%');\n\tvar $AsyncGeneratorPrototype = GetIntrinsic('%AsyncGeneratorPrototype%');\n\n\tforEach(asyncGenFns, function (asyncGenFn) {\n\t\tvar fnName = asyncGenFn.name;\n\t\tfnName = fnName ? \"'\" + fnName + \"'\" : 'asyncGenFn';\n\n\t\tt.ok(asyncGenFn instanceof $AsyncGeneratorFunction, fnName + ' instanceof %AsyncGeneratorFunction%');\n\t\tt.ok($isProto($AsyncGeneratorFunctionPrototype, asyncGenFn), '%AsyncGenerator% is prototype of ' + fnName);\n\t\tt.ok($isProto($AsyncGeneratorPrototype, asyncGenFn.prototype), '%AsyncGeneratorPrototype% is prototype of ' + fnName + '.prototype');\n\t});\n\n\tt.end();\n});\n\ntest('%ThrowTypeError%', function (t) {\n\tvar $ThrowTypeError = GetIntrinsic('%ThrowTypeError%');\n\n\tt.equal(typeof $ThrowTypeError, 'function', 'is a function');\n\tt['throws'](\n\t\t$ThrowTypeError,\n\t\tTypeError,\n\t\t'%ThrowTypeError% throws a TypeError'\n\t);\n\n\tt.end();\n});\n\ntest('allowMissing', { skip: asyncGenFns.length > 0 }, function (t) {\n\tt['throws'](\n\t\tfunction () { GetIntrinsic('%AsyncGeneratorPrototype%'); },\n\t\tTypeError,\n\t\t'throws when missing'\n\t);\n\n\tt.equal(\n\t\tGetIntrinsic('%AsyncGeneratorPrototype%', true),\n\t\tundefined,\n\t\t'does not throw when allowMissing'\n\t);\n\n\tt.end();\n});\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/Z2V0LXN0cmVhbUA2LjAuMQ==",
    "content": "/readme.md\u0010c# get-stream\n\n> Get a stream as a string, buffer, or array\n\n## Install\n\n```\n$ npm install get-stream\n```\n\n## Usage\n\n```js\nconst fs = require('fs');\nconst getStream = require('get-stream');\n\n(async () => {\n\tconst stream = fs.createReadStream('unicorn.txt');\n\n\tconsole.log(await getStream(stream));\n\t/*\n\t              ,,))))))));,\n\t           __)))))))))))))),\n\t\\|/       -\\(((((''''((((((((.\n\t-*-==//////((''  .     `)))))),\n\t/|\\      ))| o    ;-.    '(((((                                  ,(,\n\t         ( `|    /  )    ;))))'                               ,_))^;(~\n\t            |   |   |   ,))((((_     _____------~~~-.        %,;(;(>';'~\n\t            o_);   ;    )))(((` ~---~  `::           \\      %%~~)(v;(`('~\n\t                  ;    ''''````         `:       `:::|\\,__,%%    );`'; ~\n\t                 |   _                )     /      `:|`----'     `-'\n\t           ______/\\/~    |                 /        /\n\t         /~;;.____/;;'  /          ___--,-(   `;;;/\n\t        / //  _;______;'------~~~~~    /;;/\\    /\n\t       //  | |                        / ;   \\;;,\\\n\t      (<_  | ;                      /',/-----'  _>\n\t       \\_| ||_                     //~;~~~~~~~~~\n\t           `\\_|                   (,~~\n\t                                   \\~\\\n\t                                    ~~\n\t*/\n})();\n```\n\n## API\n\nThe methods returns a promise that resolves when the `end` event fires on the stream, indicating that there is no more data to be read. The stream is switched to flowing mode.\n\n### getStream(stream, options?)\n\nGet the `stream` as a string.\n\n#### options\n\nType: `object`\n\n##### encoding\n\nType: `string`\\\nDefault: `'utf8'`\n\n[Encoding](https://nodejs.org/api/buffer.html#buffer_buffer) of the incoming stream.\n\n##### maxBuffer\n\nType: `number`\\\nDefault: `Infinity`\n\nMaximum length of the returned string. If it exceeds this value before the stream ends, the promise will be rejected with a `getStream.MaxBufferError` error.\n\n### getStream.buffer(stream, options?)\n\nGet the `stream` as a buffer.\n\nIt honors the `maxBuffer` option as above, but it refers to byte length rather than string length.\n\n### getStream.array(stream, options?)\n\nGet the `stream` as an array of values.\n\nIt honors both the `maxBuffer` and `encoding` options. The behavior changes slightly based on the encoding chosen:\n\n- When `encoding` is unset, it assumes an [object mode stream](https://nodesource.com/blog/understanding-object-streams/) and collects values emitted from `stream` unmodified. In this case `maxBuffer` refers to the number of items in the array (not the sum of their sizes).\n\n- When `encoding` is set to `buffer`, it collects an array of buffers. `maxBuffer` refers to the summed byte lengths of every buffer in the array.\n\n- When `encoding` is set to anything else, it collects an array of strings. `maxBuffer` refers to the summed character lengths of every string in the array.\n\n## Errors\n\nIf the input stream emits an `error` event, the promise will be rejected with the error. The buffered data will be attached to the `bufferedData` property of the error.\n\n```js\n(async () => {\n\ttry {\n\t\tawait getStream(streamThatErrorsAtTheEnd('unicorn'));\n\t} catch (error) {\n\t\tconsole.log(error.bufferedData);\n\t\t//=> 'unicorn'\n\t}\n})()\n```\n\n## FAQ\n\n### How is this different from [`concat-stream`](https://github.com/maxogden/concat-stream)?\n\nThis module accepts a stream instead of being one and returns a promise instead of using a callback. The API is simpler and it only supports returning a string, buffer, or array. It doesn't have a fragile type inference. You explicitly choose what you want. And it doesn't depend on the huge `readable-stream` package.\n\n## Related\n\n- [get-stdin](https://github.com/sindresorhus/get-stdin) - Get stdin as a string or buffer\n\n---\n\n<div align=\"center\">\n\t<b>\n\t\t<a href=\"https://tidelift.com/subscription/pkg/npm-get-stream?utm_source=npm-get-stream&utm_medium=referral&utm_campaign=readme\">Get professional support for this package with a Tidelift subscription</a>\n\t</b>\n\t<br>\n\t<sub>\n\t\tTidelift helps make open source sustainable for maintainers while giving companies<br>assurances about security, maintenance, and licensing for their dependencies.\n\t</sub>\n</div>\n/index.js\u0005'use strict';\nconst {constants: BufferConstants} = require('buffer');\nconst stream = require('stream');\nconst {promisify} = require('util');\nconst bufferStream = require('./buffer-stream');\n\nconst streamPipelinePromisified = promisify(stream.pipeline);\n\nclass MaxBufferError extends Error {\n\tconstructor() {\n\t\tsuper('maxBuffer exceeded');\n\t\tthis.name = 'MaxBufferError';\n\t}\n}\n\nasync function getStream(inputStream, options) {\n\tif (!inputStream) {\n\t\tthrow new Error('Expected a stream');\n\t}\n\n\toptions = {\n\t\tmaxBuffer: Infinity,\n\t\t...options\n\t};\n\n\tconst {maxBuffer} = options;\n\tconst stream = bufferStream(options);\n\n\tawait new Promise((resolve, reject) => {\n\t\tconst rejectPromise = error => {\n\t\t\t// Don't retrieve an oversized buffer.\n\t\t\tif (error && stream.getBufferedLength() <= BufferConstants.MAX_LENGTH) {\n\t\t\t\terror.bufferedData = stream.getBufferedValue();\n\t\t\t}\n\n\t\t\treject(error);\n\t\t};\n\n\t\t(async () => {\n\t\t\ttry {\n\t\t\t\tawait streamPipelinePromisified(inputStream, stream);\n\t\t\t\tresolve();\n\t\t\t} catch (error) {\n\t\t\t\trejectPromise(error);\n\t\t\t}\n\t\t})();\n\n\t\tstream.on('data', () => {\n\t\t\tif (stream.getBufferedLength() > maxBuffer) {\n\t\t\t\trejectPromise(new MaxBufferError());\n\t\t\t}\n\t\t});\n\t});\n\n\treturn stream.getBufferedValue();\n}\n\nmodule.exports = getStream;\nmodule.exports.buffer = (stream, options) => getStream(stream, {...options, encoding: 'buffer'});\nmodule.exports.array = (stream, options) => getStream(stream, {...options, array: true});\nmodule.exports.MaxBufferError = MaxBufferError;\n/license\u0004]MIT License\n\nCopyright (c) Sindre Sorhus <sindresorhus@gmail.com> (https://sindresorhus.com)\n\nPermission 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:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE 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.\n/index.d.ts\u000eN/// <reference types=\"node\"/>\nimport {Stream} from 'stream';\n\ndeclare class MaxBufferErrorClass extends Error {\n\treadonly name: 'MaxBufferError';\n\tconstructor();\n}\n\ndeclare namespace getStream {\n\tinterface Options {\n\t\t/**\n\t\tMaximum length of the returned string. If it exceeds this value before the stream ends, the promise will be rejected with a `MaxBufferError` error.\n\n\t\t@default Infinity\n\t\t*/\n\t\treadonly maxBuffer?: number;\n\t}\n\n\tinterface OptionsWithEncoding<EncodingType = BufferEncoding> extends Options {\n\t\t/**\n\t\t[Encoding](https://nodejs.org/api/buffer.html#buffer_buffer) of the incoming stream.\n\n\t\t@default 'utf8'\n\t\t*/\n\t\treadonly encoding?: EncodingType;\n\t}\n\n\ttype MaxBufferError = MaxBufferErrorClass;\n}\n\ndeclare const getStream: {\n\t/**\n\tGet the `stream` as a string.\n\n\t@returns A promise that resolves when the end event fires on the stream, indicating that there is no more data to be read. The stream is switched to flowing mode.\n\n\t@example\n\t```\n\timport * as fs from 'fs';\n\timport getStream = require('get-stream');\n\n\t(async () => {\n\t\tconst stream = fs.createReadStream('unicorn.txt');\n\n\t\tconsole.log(await getStream(stream));\n\t\t//               ,,))))))));,\n\t\t//            __)))))))))))))),\n\t\t// \\|/       -\\(((((''''((((((((.\n\t\t// -*-==//////((''  .     `)))))),\n\t\t// /|\\      ))| o    ;-.    '(((((                                  ,(,\n\t\t//          ( `|    /  )    ;))))'                               ,_))^;(~\n\t\t//             |   |   |   ,))((((_     _____------~~~-.        %,;(;(>';'~\n\t\t//             o_);   ;    )))(((` ~---~  `::           \\      %%~~)(v;(`('~\n\t\t//                   ;    ''''````         `:       `:::|\\,__,%%    );`'; ~\n\t\t//                  |   _                )     /      `:|`----'     `-'\n\t\t//            ______/\\/~    |                 /        /\n\t\t//          /~;;.____/;;'  /          ___--,-(   `;;;/\n\t\t//         / //  _;______;'------~~~~~    /;;/\\    /\n\t\t//        //  | |                        / ;   \\;;,\\\n\t\t//       (<_  | ;                      /',/-----'  _>\n\t\t//        \\_| ||_                     //~;~~~~~~~~~\n\t\t//            `\\_|                   (,~~\n\t\t//                                    \\~\\\n\t\t//                                     ~~\n\t})();\n\t```\n\t*/\n\t(stream: Stream, options?: getStream.OptionsWithEncoding): Promise<string>;\n\n\t/**\n\tGet the `stream` as a buffer.\n\n\tIt honors the `maxBuffer` option as above, but it refers to byte length rather than string length.\n\t*/\n\tbuffer(\n\t\tstream: Stream,\n\t\toptions?: getStream.Options\n\t): Promise<Buffer>;\n\n\t/**\n\tGet the `stream` as an array of values.\n\n\tIt honors both the `maxBuffer` and `encoding` options. The behavior changes slightly based on the encoding chosen:\n\n\t- When `encoding` is unset, it assumes an [object mode stream](https://nodesource.com/blog/understanding-object-streams/) and collects values emitted from `stream` unmodified. In this case `maxBuffer` refers to the number of items in the array (not the sum of their sizes).\n\t- When `encoding` is set to `buffer`, it collects an array of buffers. `maxBuffer` refers to the summed byte lengths of every buffer in the array.\n\t- When `encoding` is set to anything else, it collects an array of strings. `maxBuffer` refers to the summed character lengths of every string in the array.\n\t*/\n\tarray<StreamObjectModeType>(\n\t\tstream: Stream,\n\t\toptions?: getStream.Options\n\t): Promise<StreamObjectModeType[]>;\n\tarray(\n\t\tstream: Stream,\n\t\toptions: getStream.OptionsWithEncoding<'buffer'>\n\t): Promise<Buffer[]>;\n\tarray(\n\t\tstream: Stream,\n\t\toptions: getStream.OptionsWithEncoding<BufferEncoding>\n\t): Promise<string[]>;\n\n\tMaxBufferError: typeof MaxBufferErrorClass;\n};\n\nexport = getStream;\n/buffer-stream.js\u0003~'use strict';\nconst {PassThrough: PassThroughStream} = require('stream');\n\nmodule.exports = options => {\n\toptions = {...options};\n\n\tconst {array} = options;\n\tlet {encoding} = options;\n\tconst isBuffer = encoding === 'buffer';\n\tlet objectMode = false;\n\n\tif (array) {\n\t\tobjectMode = !(encoding || isBuffer);\n\t} else {\n\t\tencoding = encoding || 'utf8';\n\t}\n\n\tif (isBuffer) {\n\t\tencoding = null;\n\t}\n\n\tconst stream = new PassThroughStream({objectMode});\n\n\tif (encoding) {\n\t\tstream.setEncoding(encoding);\n\t}\n\n\tlet length = 0;\n\tconst chunks = [];\n\n\tstream.on('data', chunk => {\n\t\tchunks.push(chunk);\n\n\t\tif (objectMode) {\n\t\t\tlength = chunks.length;\n\t\t} else {\n\t\t\tlength += chunk.length;\n\t\t}\n\t});\n\n\tstream.getBufferedValue = () => {\n\t\tif (array) {\n\t\t\treturn chunks;\n\t\t}\n\n\t\treturn isBuffer ? Buffer.concat(chunks, length) : chunks.join('');\n\t};\n\n\tstream.getBufferedLength = () => length;\n\n\treturn stream;\n};\n/package.json\u00033{\n\t\"name\": \"get-stream\",\n\t\"version\": \"6.0.1\",\n\t\"description\": \"Get a stream as a string, buffer, or array\",\n\t\"license\": \"MIT\",\n\t\"repository\": \"sindresorhus/get-stream\",\n\t\"funding\": \"https://github.com/sponsors/sindresorhus\",\n\t\"author\": {\n\t\t\"name\": \"Sindre Sorhus\",\n\t\t\"email\": \"sindresorhus@gmail.com\",\n\t\t\"url\": \"https://sindresorhus.com\"\n\t},\n\t\"engines\": {\n\t\t\"node\": \">=10\"\n\t},\n\t\"scripts\": {\n\t\t\"test\": \"xo && ava && tsd\"\n\t},\n\t\"files\": [\n\t\t\"index.js\",\n\t\t\"index.d.ts\",\n\t\t\"buffer-stream.js\"\n\t],\n\t\"keywords\": [\n\t\t\"get\",\n\t\t\"stream\",\n\t\t\"promise\",\n\t\t\"concat\",\n\t\t\"string\",\n\t\t\"text\",\n\t\t\"buffer\",\n\t\t\"read\",\n\t\t\"data\",\n\t\t\"consume\",\n\t\t\"readable\",\n\t\t\"readablestream\",\n\t\t\"array\",\n\t\t\"object\"\n\t],\n\t\"devDependencies\": {\n\t\t\"@types/node\": \"^14.0.27\",\n\t\t\"ava\": \"^2.4.0\",\n\t\t\"into-stream\": \"^5.0.0\",\n\t\t\"tsd\": \"^0.13.1\",\n\t\t\"xo\": \"^0.24.0\"\n\t}\n}\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/Z2Vuc3luY0AxLjAuMC1iZXRhLjI=",
    "content": "/package.json\u0003{\n  \"name\": \"gensync\",\n  \"version\": \"1.0.0-beta.2\",\n  \"license\": \"MIT\",\n  \"description\": \"Allows users to use generators in order to write common functions that can be both sync or async.\",\n  \"main\": \"index.js\",\n  \"author\": \"Logan Smyth <loganfsmyth@gmail.com>\",\n  \"homepage\": \"https://github.com/loganfsmyth/gensync\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/loganfsmyth/gensync.git\"\n  },\n  \"scripts\": {\n    \"test\": \"jest\"\n  },\n  \"engines\": {\n    \"node\": \">=6.9.0\"\n  },\n  \"keywords\": [\n    \"async\",\n    \"sync\",\n    \"generators\",\n    \"async-await\",\n    \"callbacks\"\n  ],\n  \"devDependencies\": {\n    \"babel-core\": \"^6.26.3\",\n    \"babel-preset-env\": \"^1.6.1\",\n    \"eslint\": \"^4.19.1\",\n    \"eslint-config-prettier\": \"^2.9.0\",\n    \"eslint-plugin-node\": \"^6.0.1\",\n    \"eslint-plugin-prettier\": \"^2.6.0\",\n    \"flow-bin\": \"^0.71.0\",\n    \"jest\": \"^22.4.3\",\n    \"prettier\": \"^1.12.1\"\n  }\n}\n/test/.babelrcD{\n  presets: [\n    [\"env\", { targets: { node: \"current\" }}],\n  ],\n}\n/index.js%\"use strict\";\n\n// These use the global symbol registry so that multiple copies of this\n// library can work together in case they are not deduped.\nconst GENSYNC_START = Symbol.for(\"gensync:v1:start\");\nconst GENSYNC_SUSPEND = Symbol.for(\"gensync:v1:suspend\");\n\nconst GENSYNC_EXPECTED_START = \"GENSYNC_EXPECTED_START\";\nconst GENSYNC_EXPECTED_SUSPEND = \"GENSYNC_EXPECTED_SUSPEND\";\nconst GENSYNC_OPTIONS_ERROR = \"GENSYNC_OPTIONS_ERROR\";\nconst GENSYNC_RACE_NONEMPTY = \"GENSYNC_RACE_NONEMPTY\";\nconst GENSYNC_ERRBACK_NO_CALLBACK = \"GENSYNC_ERRBACK_NO_CALLBACK\";\n\nmodule.exports = Object.assign(\n  function gensync(optsOrFn) {\n    let genFn = optsOrFn;\n    if (typeof optsOrFn !== \"function\") {\n      genFn = newGenerator(optsOrFn);\n    } else {\n      genFn = wrapGenerator(optsOrFn);\n    }\n\n    return Object.assign(genFn, makeFunctionAPI(genFn));\n  },\n  {\n    all: buildOperation({\n      name: \"all\",\n      arity: 1,\n      sync: function(args) {\n        const items = Array.from(args[0]);\n        return items.map(item => evaluateSync(item));\n      },\n      async: function(args, resolve, reject) {\n        const items = Array.from(args[0]);\n\n        if (items.length === 0) {\n          Promise.resolve().then(() => resolve([]));\n          return;\n        }\n\n        let count = 0;\n        const results = items.map(() => undefined);\n        items.forEach((item, i) => {\n          evaluateAsync(\n            item,\n            val => {\n              results[i] = val;\n              count += 1;\n\n              if (count === results.length) resolve(results);\n            },\n            reject\n          );\n        });\n      },\n    }),\n    race: buildOperation({\n      name: \"race\",\n      arity: 1,\n      sync: function(args) {\n        const items = Array.from(args[0]);\n        if (items.length === 0) {\n          throw makeError(\"Must race at least 1 item\", GENSYNC_RACE_NONEMPTY);\n        }\n\n        return evaluateSync(items[0]);\n      },\n      async: function(args, resolve, reject) {\n        const items = Array.from(args[0]);\n        if (items.length === 0) {\n          throw makeError(\"Must race at least 1 item\", GENSYNC_RACE_NONEMPTY);\n        }\n\n        for (const item of items) {\n          evaluateAsync(item, resolve, reject);\n        }\n      },\n    }),\n  }\n);\n\n/**\n * Given a generator function, return the standard API object that executes\n * the generator and calls the callbacks.\n */\nfunction makeFunctionAPI(genFn) {\n  const fns = {\n    sync: function(...args) {\n      return evaluateSync(genFn.apply(this, args));\n    },\n    async: function(...args) {\n      return new Promise((resolve, reject) => {\n        evaluateAsync(genFn.apply(this, args), resolve, reject);\n      });\n    },\n    errback: function(...args) {\n      const cb = args.pop();\n      if (typeof cb !== \"function\") {\n        throw makeError(\n          \"Asynchronous function called without callback\",\n          GENSYNC_ERRBACK_NO_CALLBACK\n        );\n      }\n\n      let gen;\n      try {\n        gen = genFn.apply(this, args);\n      } catch (err) {\n        cb(err);\n        return;\n      }\n\n      evaluateAsync(gen, val => cb(undefined, val), err => cb(err));\n    },\n  };\n  return fns;\n}\n\nfunction assertTypeof(type, name, value, allowUndefined) {\n  if (\n    typeof value === type ||\n    (allowUndefined && typeof value === \"undefined\")\n  ) {\n    return;\n  }\n\n  let msg;\n  if (allowUndefined) {\n    msg = `Expected opts.${name} to be either a ${type}, or undefined.`;\n  } else {\n    msg = `Expected opts.${name} to be a ${type}.`;\n  }\n\n  throw makeError(msg, GENSYNC_OPTIONS_ERROR);\n}\nfunction makeError(msg, code) {\n  return Object.assign(new Error(msg), { code });\n}\n\n/**\n * Given an options object, return a new generator that dispatches the\n * correct handler based on sync or async execution.\n */\nfunction newGenerator({ name, arity, sync, async, errback }) {\n  assertTypeof(\"string\", \"name\", name, true /* allowUndefined */);\n  assertTypeof(\"number\", \"arity\", arity, true /* allowUndefined */);\n  assertTypeof(\"function\", \"sync\", sync);\n  assertTypeof(\"function\", \"async\", async, true /* allowUndefined */);\n  assertTypeof(\"function\", \"errback\", errback, true /* allowUndefined */);\n  if (async && errback) {\n    throw makeError(\n      \"Expected one of either opts.async or opts.errback, but got _both_.\",\n      GENSYNC_OPTIONS_ERROR\n    );\n  }\n\n  if (typeof name !== \"string\") {\n    let fnName;\n    if (errback && errback.name && errback.name !== \"errback\") {\n      fnName = errback.name;\n    }\n    if (async && async.name && async.name !== \"async\") {\n      fnName = async.name.replace(/Async$/, \"\");\n    }\n    if (sync && sync.name && sync.name !== \"sync\") {\n      fnName = sync.name.replace(/Sync$/, \"\");\n    }\n\n    if (typeof fnName === \"string\") {\n      name = fnName;\n    }\n  }\n\n  if (typeof arity !== \"number\") {\n    arity = sync.length;\n  }\n\n  return buildOperation({\n    name,\n    arity,\n    sync: function(args) {\n      return sync.apply(this, args);\n    },\n    async: function(args, resolve, reject) {\n      if (async) {\n        async.apply(this, args).then(resolve, reject);\n      } else if (errback) {\n        errback.call(this, ...args, (err, value) => {\n          if (err == null) resolve(value);\n          else reject(err);\n        });\n      } else {\n        resolve(sync.apply(this, args));\n      }\n    },\n  });\n}\n\nfunction wrapGenerator(genFn) {\n  return setFunctionMetadata(genFn.name, genFn.length, function(...args) {\n    return genFn.apply(this, args);\n  });\n}\n\nfunction buildOperation({ name, arity, sync, async }) {\n  return setFunctionMetadata(name, arity, function*(...args) {\n    const resume = yield GENSYNC_START;\n    if (!resume) {\n      // Break the tail call to avoid a bug in V8 v6.X with --harmony enabled.\n      const res = sync.call(this, args);\n      return res;\n    }\n\n    let result;\n    try {\n      async.call(\n        this,\n        args,\n        value => {\n          if (result) return;\n\n          result = { value };\n          resume();\n        },\n        err => {\n          if (result) return;\n\n          result = { err };\n          resume();\n        }\n      );\n    } catch (err) {\n      result = { err };\n      resume();\n    }\n\n    // Suspend until the callbacks run. Will resume synchronously if the\n    // callback was already called.\n    yield GENSYNC_SUSPEND;\n\n    if (result.hasOwnProperty(\"err\")) {\n      throw result.err;\n    }\n\n    return result.value;\n  });\n}\n\nfunction evaluateSync(gen) {\n  let value;\n  while (!({ value } = gen.next()).done) {\n    assertStart(value, gen);\n  }\n  return value;\n}\n\nfunction evaluateAsync(gen, resolve, reject) {\n  (function step() {\n    try {\n      let value;\n      while (!({ value } = gen.next()).done) {\n        assertStart(value, gen);\n\n        // If this throws, it is considered to have broken the contract\n        // established for async handlers. If these handlers are called\n        // synchronously, it is also considered bad behavior.\n        let sync = true;\n        let didSyncResume = false;\n        const out = gen.next(() => {\n          if (sync) {\n            didSyncResume = true;\n          } else {\n            step();\n          }\n        });\n        sync = false;\n\n        assertSuspend(out, gen);\n\n        if (!didSyncResume) {\n          // Callback wasn't called synchronously, so break out of the loop\n          // and let it call 'step' later.\n          return;\n        }\n      }\n\n      return resolve(value);\n    } catch (err) {\n      return reject(err);\n    }\n  })();\n}\n\nfunction assertStart(value, gen) {\n  if (value === GENSYNC_START) return;\n\n  throwError(\n    gen,\n    makeError(\n      `Got unexpected yielded value in gensync generator: ${JSON.stringify(\n        value\n      )}. Did you perhaps mean to use 'yield*' instead of 'yield'?`,\n      GENSYNC_EXPECTED_START\n    )\n  );\n}\nfunction assertSuspend({ value, done }, gen) {\n  if (!done && value === GENSYNC_SUSPEND) return;\n\n  throwError(\n    gen,\n    makeError(\n      done\n        ? \"Unexpected generator completion. If you get this, it is probably a gensync bug.\"\n        : `Expected GENSYNC_SUSPEND, got ${JSON.stringify(\n            value\n          )}. If you get this, it is probably a gensync bug.`,\n      GENSYNC_EXPECTED_SUSPEND\n    )\n  );\n}\n\nfunction throwError(gen, err) {\n  // Call `.throw` so that users can step in a debugger to easily see which\n  // 'yield' passed an unexpected value. If the `.throw` call didn't throw\n  // back to the generator, we explicitly do it to stop the error\n  // from being swallowed by user code try/catches.\n  if (gen.throw) gen.throw(err);\n  throw err;\n}\n\nfunction isIterable(value) {\n  return (\n    !!value &&\n    (typeof value === \"object\" || typeof value === \"function\") &&\n    !value[Symbol.iterator]\n  );\n}\n\nfunction setFunctionMetadata(name, arity, fn) {\n  if (typeof name === \"string\") {\n    // This should always work on the supported Node versions, but for the\n    // sake of users that are compiling to older versions, we check for\n    // configurability so we don't throw.\n    const nameDesc = Object.getOwnPropertyDescriptor(fn, \"name\");\n    if (!nameDesc || nameDesc.configurable) {\n      Object.defineProperty(\n        fn,\n        \"name\",\n        Object.assign(nameDesc || {}, {\n          configurable: true,\n          value: name,\n        })\n      );\n    }\n  }\n\n  if (typeof arity === \"number\") {\n    const lengthDesc = Object.getOwnPropertyDescriptor(fn, \"length\");\n    if (!lengthDesc || lengthDesc.configurable) {\n      Object.defineProperty(\n        fn,\n        \"length\",\n        Object.assign(lengthDesc || {}, {\n          configurable: true,\n          value: arity,\n        })\n      );\n    }\n  }\n\n  return fn;\n}\n/test/index.test.js+\u000b\"use strict\";\n\nconst promisify = require(\"util.promisify\");\nconst gensync = require(\"../\");\n\nconst TEST_ERROR = new Error(\"TEST_ERROR\");\n\nconst DID_ERROR = new Error(\"DID_ERROR\");\n\nconst doSuccess = gensync({\n  sync: () => 42,\n  async: () => Promise.resolve(42),\n});\n\nconst doError = gensync({\n  sync: () => {\n    throw DID_ERROR;\n  },\n  async: () => Promise.reject(DID_ERROR),\n});\n\nfunction throwTestError() {\n  throw TEST_ERROR;\n}\n\nasync function expectResult(\n  fn,\n  arg,\n  { error, value, expectSync = false, syncErrback = expectSync }\n) {\n  if (!expectSync) {\n    expect(() => fn.sync(arg)).toThrow(TEST_ERROR);\n  } else if (error) {\n    expect(() => fn.sync(arg)).toThrow(error);\n  } else {\n    expect(fn.sync(arg)).toBe(value);\n  }\n\n  if (error) {\n    await expect(fn.async(arg)).rejects.toBe(error);\n  } else {\n    await expect(fn.async(arg)).resolves.toBe(value);\n  }\n\n  await new Promise((resolve, reject) => {\n    let sync = true;\n    fn.errback(arg, (err, val) => {\n      try {\n        expect(err).toBe(error);\n        expect(val).toBe(value);\n        expect(sync).toBe(syncErrback);\n\n        resolve();\n      } catch (e) {\n        reject(e);\n      }\n    });\n    sync = false;\n  });\n}\n\ndescribe(\"gensync({})\", () => {\n  describe(\"option validation\", () => {\n    test(\"disallow async and errback handler together\", () => {\n      try {\n        gensync({\n          sync: throwTestError,\n          async: throwTestError,\n          errback: throwTestError,\n        });\n\n        throwTestError();\n      } catch (err) {\n        expect(err.message).toMatch(\n          /Expected one of either opts.async or opts.errback, but got _both_\\./\n        );\n        expect(err.code).toBe(\"GENSYNC_OPTIONS_ERROR\");\n      }\n    });\n\n    test(\"disallow missing sync handler\", () => {\n      try {\n        gensync({\n          async: throwTestError,\n        });\n\n        throwTestError();\n      } catch (err) {\n        expect(err.message).toMatch(/Expected opts.sync to be a function./);\n        expect(err.code).toBe(\"GENSYNC_OPTIONS_ERROR\");\n      }\n    });\n\n    test(\"errback callback required\", () => {\n      const fn = gensync({\n        sync: throwTestError,\n        async: throwTestError,\n      });\n\n      try {\n        fn.errback();\n\n        throwTestError();\n      } catch (err) {\n        expect(err.message).toMatch(/function called without callback/);\n        expect(err.code).toBe(\"GENSYNC_ERRBACK_NO_CALLBACK\");\n      }\n    });\n  });\n\n  describe(\"generator function metadata\", () => {\n    test(\"automatic naming\", () => {\n      expect(\n        gensync({\n          sync: function readFileSync() {},\n          async: () => {},\n        }).name\n      ).toBe(\"readFile\");\n      expect(\n        gensync({\n          sync: function readFile() {},\n          async: () => {},\n        }).name\n      ).toBe(\"readFile\");\n      expect(\n        gensync({\n          sync: function readFileAsync() {},\n          async: () => {},\n        }).name\n      ).toBe(\"readFileAsync\");\n\n      expect(\n        gensync({\n          sync: () => {},\n          async: function readFileSync() {},\n        }).name\n      ).toBe(\"readFileSync\");\n      expect(\n        gensync({\n          sync: () => {},\n          async: function readFile() {},\n        }).name\n      ).toBe(\"readFile\");\n      expect(\n        gensync({\n          sync: () => {},\n          async: function readFileAsync() {},\n        }).name\n      ).toBe(\"readFile\");\n\n      expect(\n        gensync({\n          sync: () => {},\n          errback: function readFileSync() {},\n        }).name\n      ).toBe(\"readFileSync\");\n      expect(\n        gensync({\n          sync: () => {},\n          errback: function readFile() {},\n        }).name\n      ).toBe(\"readFile\");\n      expect(\n        gensync({\n          sync: () => {},\n          errback: function readFileAsync() {},\n        }).name\n      ).toBe(\"readFileAsync\");\n    });\n\n    test(\"explicit naming\", () => {\n      expect(\n        gensync({\n          name: \"readFile\",\n          sync: () => {},\n          async: () => {},\n        }).name\n      ).toBe(\"readFile\");\n    });\n\n    test(\"default arity\", () => {\n      expect(\n        gensync({\n          sync: function(a, b, c, d, e, f, g) {\n            throwTestError();\n          },\n          async: throwTestError,\n        }).length\n      ).toBe(7);\n    });\n\n    test(\"explicit arity\", () => {\n      expect(\n        gensync({\n          arity: 3,\n          sync: throwTestError,\n          async: throwTestError,\n        }).length\n      ).toBe(3);\n    });\n  });\n\n  describe(\"'sync' handler\", async () => {\n    test(\"success\", async () => {\n      const fn = gensync({\n        sync: (...args) => JSON.stringify(args),\n      });\n\n      await expectResult(fn, 42, { value: \"[42]\", expectSync: true });\n    });\n\n    test(\"failure\", async () => {\n      const fn = gensync({\n        sync: (...args) => {\n          throw JSON.stringify(args);\n        },\n      });\n\n      await expectResult(fn, 42, { error: \"[42]\", expectSync: true });\n    });\n  });\n\n  describe(\"'async' handler\", async () => {\n    test(\"success\", async () => {\n      const fn = gensync({\n        sync: throwTestError,\n        async: (...args) => Promise.resolve(JSON.stringify(args)),\n      });\n\n      await expectResult(fn, 42, { value: \"[42]\" });\n    });\n\n    test(\"failure\", async () => {\n      const fn = gensync({\n        sync: throwTestError,\n        async: (...args) => Promise.reject(JSON.stringify(args)),\n      });\n\n      await expectResult(fn, 42, { error: \"[42]\" });\n    });\n  });\n\n  describe(\"'errback' sync handler\", async () => {\n    test(\"success\", async () => {\n      const fn = gensync({\n        sync: throwTestError,\n        errback: (...args) => args.pop()(null, JSON.stringify(args)),\n      });\n\n      await expectResult(fn, 42, { value: \"[42]\", syncErrback: true });\n    });\n\n    test(\"failure\", async () => {\n      const fn = gensync({\n        sync: throwTestError,\n        errback: (...args) => args.pop()(JSON.stringify(args)),\n      });\n\n      await expectResult(fn, 42, { error: \"[42]\", syncErrback: true });\n    });\n  });\n\n  describe(\"'errback' async handler\", async () => {\n    test(\"success\", async () => {\n      const fn = gensync({\n        sync: throwTestError,\n        errback: (...args) =>\n          process.nextTick(() => args.pop()(null, JSON.stringify(args))),\n      });\n\n      await expectResult(fn, 42, { value: \"[42]\" });\n    });\n\n    test(\"failure\", async () => {\n      const fn = gensync({\n        sync: throwTestError,\n        errback: (...args) =>\n          process.nextTick(() => args.pop()(JSON.stringify(args))),\n      });\n\n      await expectResult(fn, 42, { error: \"[42]\" });\n    });\n  });\n});\n\ndescribe(\"gensync(function* () {})\", () => {\n  test(\"sync throw before body\", async () => {\n    const fn = gensync(function*(arg = throwTestError()) {});\n\n    await expectResult(fn, undefined, {\n      error: TEST_ERROR,\n      syncErrback: true,\n    });\n  });\n\n  test(\"sync throw inside body\", async () => {\n    const fn = gensync(function*() {\n      throwTestError();\n    });\n\n    await expectResult(fn, undefined, {\n      error: TEST_ERROR,\n      syncErrback: true,\n    });\n  });\n\n  test(\"async throw inside body\", async () => {\n    const fn = gensync(function*() {\n      const val = yield* doSuccess();\n      throwTestError();\n    });\n\n    await expectResult(fn, undefined, {\n      error: TEST_ERROR,\n    });\n  });\n\n  test(\"error inside body\", async () => {\n    const fn = gensync(function*() {\n      yield* doError();\n    });\n\n    await expectResult(fn, undefined, {\n      error: DID_ERROR,\n      expectSync: true,\n      syncErrback: false,\n    });\n  });\n\n  test(\"successful return value\", async () => {\n    const fn = gensync(function*() {\n      const value = yield* doSuccess();\n\n      expect(value).toBe(42);\n\n      return 84;\n    });\n\n    await expectResult(fn, undefined, {\n      value: 84,\n      expectSync: true,\n      syncErrback: false,\n    });\n  });\n\n  test(\"successful final value\", async () => {\n    const fn = gensync(function*() {\n      return 42;\n    });\n\n    await expectResult(fn, undefined, {\n      value: 42,\n      expectSync: true,\n    });\n  });\n\n  test(\"yield unexpected object\", async () => {\n    const fn = gensync(function*() {\n      yield {};\n    });\n\n    try {\n      await fn.async();\n\n      throwTestError();\n    } catch (err) {\n      expect(err.message).toMatch(\n        /Got unexpected yielded value in gensync generator/\n      );\n      expect(err.code).toBe(\"GENSYNC_EXPECTED_START\");\n    }\n  });\n\n  test(\"yield suspend yield\", async () => {\n    const fn = gensync(function*() {\n      yield Symbol.for(\"gensync:v1:start\");\n\n      // Should be \"yield*\" for no error.\n      yield {};\n    });\n\n    try {\n      await fn.async();\n\n      throwTestError();\n    } catch (err) {\n      expect(err.message).toMatch(/Expected GENSYNC_SUSPEND, got {}/);\n      expect(err.code).toBe(\"GENSYNC_EXPECTED_SUSPEND\");\n    }\n  });\n\n  test(\"yield suspend return\", async () => {\n    const fn = gensync(function*() {\n      yield Symbol.for(\"gensync:v1:start\");\n\n      // Should be \"yield*\" for no error.\n      return {};\n    });\n\n    try {\n      await fn.async();\n\n      throwTestError();\n    } catch (err) {\n      expect(err.message).toMatch(/Unexpected generator completion/);\n      expect(err.code).toBe(\"GENSYNC_EXPECTED_SUSPEND\");\n    }\n  });\n});\n\ndescribe(\"gensync.all()\", () => {\n  test(\"success\", async () => {\n    const fn = gensync(function*() {\n      const result = yield* gensync.all([doSuccess(), doSuccess()]);\n\n      expect(result).toEqual([42, 42]);\n    });\n\n    await expectResult(fn, undefined, {\n      value: undefined,\n      expectSync: true,\n      syncErrback: false,\n    });\n  });\n\n  test(\"error first\", async () => {\n    const fn = gensync(function*() {\n      yield* gensync.all([doError(), doSuccess()]);\n    });\n\n    await expectResult(fn, undefined, {\n      error: DID_ERROR,\n      expectSync: true,\n      syncErrback: false,\n    });\n  });\n\n  test(\"error last\", async () => {\n    const fn = gensync(function*() {\n      yield* gensync.all([doSuccess(), doError()]);\n    });\n\n    await expectResult(fn, undefined, {\n      error: DID_ERROR,\n      expectSync: true,\n      syncErrback: false,\n    });\n  });\n\n  test(\"empty list\", async () => {\n    const fn = gensync(function*() {\n      yield* gensync.all([]);\n    });\n\n    await expectResult(fn, undefined, {\n      value: undefined,\n      expectSync: true,\n      syncErrback: false,\n    });\n  });\n});\n\ndescribe(\"gensync.race()\", () => {\n  test(\"success\", async () => {\n    const fn = gensync(function*() {\n      const result = yield* gensync.race([doSuccess(), doError()]);\n\n      expect(result).toEqual(42);\n    });\n\n    await expectResult(fn, undefined, {\n      value: undefined,\n      expectSync: true,\n      syncErrback: false,\n    });\n  });\n\n  test(\"error\", async () => {\n    const fn = gensync(function*() {\n      yield* gensync.race([doError(), doSuccess()]);\n    });\n\n    await expectResult(fn, undefined, {\n      error: DID_ERROR,\n      expectSync: true,\n      syncErrback: false,\n    });\n  });\n});\n/LICENSE\u00043Copyright 2018 Logan Smyth <loganfsmyth@gmail.com>\n\nPermission 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:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE 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.\n/README.md\u0014# gensync\n\nThis module allows for developers to write common code that can share\nimplementation details, hiding whether an underlying request happens\nsynchronously or asynchronously. This is in contrast with many current Node\nAPIs which explicitly implement the same API twice, once with calls to\nsynchronous functions, and once with asynchronous functions.\n\nTake for example `fs.readFile` and `fs.readFileSync`, if you're writing an API\nthat loads a file and then performs a synchronous operation on the data, it\ncan be frustrating to maintain two parallel functions.\n\n\n## Example\n\n```js\nconst fs = require(\"fs\");\nconst gensync = require(\"gensync\");\n\nconst readFile = gensync({\n  sync: fs.readFileSync,\n  errback: fs.readFile,\n});\n\nconst myOperation = gensync(function* (filename) {\n  const code = yield* readFile(filename, \"utf8\");\n\n  return \"// some custom prefix\\n\" + code;\n});\n\n// Load and add the prefix synchronously:\nconst result = myOperation.sync(\"./some-file.js\");\n\n// Load and add the prefix asynchronously with promises:\nmyOperation.async(\"./some-file.js\").then(result => {\n\n});\n\n// Load and add the prefix asynchronously with promises:\nmyOperation.errback(\"./some-file.js\", (err, result) => {\n\n});\n```\n\nThis could even be exposed as your official API by doing\n```js\n// Using the common 'Sync' suffix for sync functions, and 'Async' suffix for\n// promise-returning versions.\nexports.myOperationSync = myOperation.sync;\nexports.myOperationAsync = myOperation.async;\nexports.myOperation = myOperation.errback;\n```\nor potentially expose one of the async versions as the default, with a\n`.sync` property on the function to expose the synchronous version.\n```js\nmodule.exports = myOperation.errback;\nmodule.exports.sync = myOperation.sync;\n````\n\n\n## API\n\n### gensync(generatorFnOrOptions)\n\nReturns a function that can be \"await\"-ed in another `gensync` generator\nfunction, or executed via\n\n* `.sync(...args)` - Returns the computed value, or throws.\n* `.async(...args)` - Returns a promise for the computed value.\n* `.errback(...args, (err, result) => {})` - Calls the callback with the computed value, or error.\n\n\n#### Passed a generator\n\nWraps the generator to populate the `.sync`/`.async`/`.errback` helpers above to\nallow for evaluation of the generator for the final value.\n\n##### Example\n\n```js\nconst readFile = function* () {\n  return 42;\n};\n\nconst readFileAndMore = gensync(function* (){\n  const val = yield* readFile();\n  return 42 + val;\n});\n\n// In general cases\nconst code = readFileAndMore.sync(\"./file.js\", \"utf8\");\nreadFileAndMore.async(\"./file.js\", \"utf8\").then(code => {})\nreadFileAndMore.errback(\"./file.js\", \"utf8\", (err, code) => {});\n\n// In a generator being called indirectly with .sync/.async/.errback\nconst code = yield* readFileAndMore(\"./file.js\", \"utf8\");\n```\n\n\n#### Passed an options object\n\n* `opts.sync`\n\n  Example: `(...args) => 4`\n\n  A function that will be called when `.sync()` is called on the `gensync()`\n  result, or when the result is passed to `yield*` in another generator that\n  is being run synchronously.\n\n  Also called for `.async()` calls if no async handlers are provided.\n\n* `opts.async`\n\n  Example: `async (...args) => 4`\n\n  A function that will be called when `.async()` or `.errback()` is called on\n  the `gensync()` result, or when the result is passed to `yield*` in another\n  generator that is being run asynchronously.\n\n* `opts.errback`\n\n  Example: `(...args, cb) => cb(null, 4)`\n\n  A function that will be called when `.async()` or `.errback()` is called on\n  the `gensync()` result, or when the result is passed to `yield*` in another\n  generator that is being run asynchronously.\n\n  This option allows for simpler compatibility with many existing Node APIs,\n  and also avoids introducing the extra even loop turns that promises introduce\n  to access the result value.\n\n* `opts.name`\n\n  Example: `\"readFile\"`\n\n  A string name to apply to the returned function. If no value is provided,\n  the name of `errback`/`async`/`sync` functions will be used, with any\n  `Sync` or `Async` suffix stripped off. If the callback is simply named\n  with ES6 inference (same name as the options property), the name is ignored.\n\n* `opts.arity`\n\n  Example: `4`\n\n  A number for the length to set on the returned function. If no value\n  is provided, the length will be carried over from the `sync` function's\n  `length` value.\n\n##### Example\n\n```js\nconst readFile = gensync({\n  sync: fs.readFileSync,\n  errback: fs.readFile,\n});\n\nconst code = readFile.sync(\"./file.js\", \"utf8\");\nreadFile.async(\"./file.js\", \"utf8\").then(code => {})\nreadFile.errback(\"./file.js\", \"utf8\", (err, code) => {});\n```\n\n\n### gensync.all(iterable)\n\n`Promise.all`-like combinator that works with an iterable of generator objects\nthat could be passed to `yield*` within a gensync generator.\n\n#### Example\n\n```js\nconst loadFiles = gensync(function* () {\n  return yield* gensync.all([\n    readFile(\"./one.js\"),\n    readFile(\"./two.js\"),\n    readFile(\"./three.js\"),\n  ]);\n});\n```\n\n\n### gensync.race(iterable)\n\n`Promise.race`-like combinator that works with an iterable of generator objects\nthat could be passed to `yield*` within a gensync generator.\n\n#### Example\n\n```js\nconst loadFiles = gensync(function* () {\n  return yield* gensync.race([\n    readFile(\"./one.js\"),\n    readFile(\"./two.js\"),\n    readFile(\"./three.js\"),\n  ]);\n});\n```\n/index.js.flow\u0003N// @flow\n\nopaque type Next = Function | void;\nopaque type Yield = mixed;\n\nexport type Gensync<Args, Return> = {\n  (...args: Args): Handler<Return>,\n  sync(...args: Args): Return,\n  async(...args: Args): Promise<Return>,\n  // ...args: [...Args, Callback]\n  errback(...args: any[]): void,\n};\n\nexport type Handler<Return> = Generator<Yield, Return, Next>;\nexport type Options<Args, Return> = {\n  sync(...args: Args): Return,\n  arity?: number,\n  name?: string,\n} & (\n  | { async?: (...args: Args) => Promise<Return> }\n  // ...args: [...Args, Callback]\n  | { errback(...args: any[]): void }\n);\n\ndeclare module.exports: {\n  <Args, Return>(\n    Options<Args, Return> | ((...args: Args) => Handler<Return>)\n  ): Gensync<Args, Return>,\n\n  all<Return>(Array<Handler<Return>>): Handler<Return[]>,\n  race<Return>(Array<Handler<Return>>): Handler<Return>,\n};\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/Z2xvYi1wYXJlbnRANS4xLjI=",
    "content": "/CHANGELOG.md\u0011### [5.1.2](https://github.com/gulpjs/glob-parent/compare/v5.1.1...v5.1.2) (2021-03-06)\n\n\n### Bug Fixes\n\n* eliminate ReDoS ([#36](https://github.com/gulpjs/glob-parent/issues/36)) ([f923116](https://github.com/gulpjs/glob-parent/commit/f9231168b0041fea3f8f954b3cceb56269fc6366))\n\n### [5.1.1](https://github.com/gulpjs/glob-parent/compare/v5.1.0...v5.1.1) (2021-01-27)\n\n\n### Bug Fixes\n\n* unescape exclamation mark ([#26](https://github.com/gulpjs/glob-parent/issues/26)) ([a98874f](https://github.com/gulpjs/glob-parent/commit/a98874f1a59e407f4fb1beb0db4efa8392da60bb))\n\n## [5.1.0](https://github.com/gulpjs/glob-parent/compare/v5.0.0...v5.1.0) (2021-01-27)\n\n\n### Features\n\n* add `flipBackslashes` option to disable auto conversion of slashes (closes [#24](https://github.com/gulpjs/glob-parent/issues/24)) ([#25](https://github.com/gulpjs/glob-parent/issues/25)) ([eecf91d](https://github.com/gulpjs/glob-parent/commit/eecf91d5e3834ed78aee39c4eaaae654d76b87b3))\n\n## [5.0.0](https://github.com/gulpjs/glob-parent/compare/v4.0.0...v5.0.0) (2021-01-27)\n\n\n### ⚠ BREAKING CHANGES\n\n* Drop support for node <6 & bump dependencies\n\n### Miscellaneous Chores\n\n* Drop support for node <6 & bump dependencies ([896c0c0](https://github.com/gulpjs/glob-parent/commit/896c0c00b4e7362f60b96e7fc295ae929245255a))\n\n## [4.0.0](https://github.com/gulpjs/glob-parent/compare/v3.1.0...v4.0.0) (2021-01-27)\n\n\n### ⚠ BREAKING CHANGES\n\n* question marks are valid path characters on Windows so avoid flagging as a glob when alone\n* Update is-glob dependency\n\n### Features\n\n* hoist regexps and strings for performance gains ([4a80667](https://github.com/gulpjs/glob-parent/commit/4a80667c69355c76a572a5892b0f133c8e1f457e))\n* question marks are valid path characters on Windows so avoid flagging as a glob when alone ([2a551dd](https://github.com/gulpjs/glob-parent/commit/2a551dd0dc3235e78bf3c94843d4107072d17841))\n* Update is-glob dependency ([e41fcd8](https://github.com/gulpjs/glob-parent/commit/e41fcd895d1f7bc617dba45c9d935a7949b9c281))\n\n## [3.1.0](https://github.com/gulpjs/glob-parent/compare/v3.0.1...v3.1.0) (2021-01-27)\n\n\n### Features\n\n* allow basic win32 backslash use ([272afa5](https://github.com/gulpjs/glob-parent/commit/272afa5fd070fc0f796386a5993d4ee4a846988b))\n* handle extglobs (parentheses) containing separators ([7db1bdb](https://github.com/gulpjs/glob-parent/commit/7db1bdb0756e55fd14619e8ce31aa31b17b117fd))\n* new approach to braces/brackets handling ([8269bd8](https://github.com/gulpjs/glob-parent/commit/8269bd89290d99fac9395a354fb56fdcdb80f0be))\n* pre-process braces/brackets sections ([9ef8a87](https://github.com/gulpjs/glob-parent/commit/9ef8a87f66b1a43d0591e7a8e4fc5a18415ee388))\n* preserve escaped brace/bracket at end of string ([8cfb0ba](https://github.com/gulpjs/glob-parent/commit/8cfb0ba84202d51571340dcbaf61b79d16a26c76))\n\n\n### Bug Fixes\n\n* trailing escaped square brackets ([99ec9fe](https://github.com/gulpjs/glob-parent/commit/99ec9fecc60ee488ded20a94dd4f18b4f55c4ccf))\n\n### [3.0.1](https://github.com/gulpjs/glob-parent/compare/v3.0.0...v3.0.1) (2021-01-27)\n\n\n### Features\n\n* use path-dirname ponyfill ([cdbea5f](https://github.com/gulpjs/glob-parent/commit/cdbea5f32a58a54e001a75ddd7c0fccd4776aacc))\n\n\n### Bug Fixes\n\n* unescape glob-escaped dirnames on output ([598c533](https://github.com/gulpjs/glob-parent/commit/598c533bdf49c1428bc063aa9b8db40c5a86b030))\n\n## [3.0.0](https://github.com/gulpjs/glob-parent/compare/v2.0.0...v3.0.0) (2021-01-27)\n\n\n### ⚠ BREAKING CHANGES\n\n* update is-glob dependency\n\n### Features\n\n* update is-glob dependency ([5c5f8ef](https://github.com/gulpjs/glob-parent/commit/5c5f8efcee362a8e7638cf8220666acd8784f6bd))\n\n## [2.0.0](https://github.com/gulpjs/glob-parent/compare/v1.3.0...v2.0.0) (2021-01-27)\n\n\n### Features\n\n* move up to dirname regardless of glob characters ([f97fb83](https://github.com/gulpjs/glob-parent/commit/f97fb83be2e0a9fc8d3b760e789d2ecadd6aa0c2))\n\n## [1.3.0](https://github.com/gulpjs/glob-parent/compare/v1.2.0...v1.3.0) (2021-01-27)\n\n## [1.2.0](https://github.com/gulpjs/glob-parent/compare/v1.1.0...v1.2.0) (2021-01-27)\n\n\n### Reverts\n\n* feat: make regex test strings smaller ([dc80fa9](https://github.com/gulpjs/glob-parent/commit/dc80fa9658dca20549cfeba44bbd37d5246fcce0))\n\n## [1.1.0](https://github.com/gulpjs/glob-parent/compare/v1.0.0...v1.1.0) (2021-01-27)\n\n\n### Features\n\n* make regex test strings smaller ([cd83220](https://github.com/gulpjs/glob-parent/commit/cd832208638f45169f986d80fcf66e401f35d233))\n\n## 1.0.0 (2021-01-27)\n\n/index.js\u0004`'use strict';\n\nvar isGlob = require('is-glob');\nvar pathPosixDirname = require('path').posix.dirname;\nvar isWin32 = require('os').platform() === 'win32';\n\nvar slash = '/';\nvar backslash = /\\\\/g;\nvar enclosure = /[\\{\\[].*[\\}\\]]$/;\nvar globby = /(^|[^\\\\])([\\{\\[]|\\([^\\)]+$)/;\nvar escaped = /\\\\([\\!\\*\\?\\|\\[\\]\\(\\)\\{\\}])/g;\n\n/**\n * @param {string} str\n * @param {Object} opts\n * @param {boolean} [opts.flipBackslashes=true]\n * @returns {string}\n */\nmodule.exports = function globParent(str, opts) {\n  var options = Object.assign({ flipBackslashes: true }, opts);\n\n  // flip windows path separators\n  if (options.flipBackslashes && isWin32 && str.indexOf(slash) < 0) {\n    str = str.replace(backslash, slash);\n  }\n\n  // special case for strings ending in enclosure containing path separator\n  if (enclosure.test(str)) {\n    str += slash;\n  }\n\n  // preserves full path in case of trailing path separator\n  str += 'a';\n\n  // remove path parts that are globby\n  do {\n    str = pathPosixDirname(str);\n  } while (isGlob(str) || globby.test(str));\n\n  // remove escape chars and return result\n  return str.replace(escaped, '$1');\n};\n/package.json\u0004Q{\n  \"name\": \"glob-parent\",\n  \"version\": \"5.1.2\",\n  \"description\": \"Extract the non-magic parent path from a glob string.\",\n  \"author\": \"Gulp Team <team@gulpjs.com> (https://gulpjs.com/)\",\n  \"contributors\": [\n    \"Elan Shanker (https://github.com/es128)\",\n    \"Blaine Bublitz <blaine.bublitz@gmail.com>\"\n  ],\n  \"repository\": \"gulpjs/glob-parent\",\n  \"license\": \"ISC\",\n  \"engines\": {\n    \"node\": \">= 6\"\n  },\n  \"main\": \"index.js\",\n  \"files\": [\n    \"LICENSE\",\n    \"index.js\"\n  ],\n  \"scripts\": {\n    \"lint\": \"eslint .\",\n    \"pretest\": \"npm run lint\",\n    \"test\": \"nyc mocha --async-only\",\n    \"azure-pipelines\": \"nyc mocha --async-only --reporter xunit -O output=test.xunit\",\n    \"coveralls\": \"nyc report --reporter=text-lcov | coveralls\"\n  },\n  \"dependencies\": {\n    \"is-glob\": \"^4.0.1\"\n  },\n  \"devDependencies\": {\n    \"coveralls\": \"^3.0.11\",\n    \"eslint\": \"^2.13.1\",\n    \"eslint-config-gulp\": \"^3.0.1\",\n    \"expect\": \"^1.20.2\",\n    \"mocha\": \"^6.0.2\",\n    \"nyc\": \"^13.3.0\"\n  },\n  \"keywords\": [\n    \"glob\",\n    \"parent\",\n    \"strip\",\n    \"path\",\n    \"dirname\",\n    \"directory\",\n    \"base\",\n    \"wildcard\"\n  ]\n}\n/README.md\u0012&<p align=\"center\">\n  <a href=\"https://gulpjs.com\">\n    <img height=\"257\" width=\"114\" src=\"https://raw.githubusercontent.com/gulpjs/artwork/master/gulp-2x.png\">\n  </a>\n</p>\n\n# glob-parent\n\n[![NPM version][npm-image]][npm-url] [![Downloads][downloads-image]][npm-url] [![Azure Pipelines Build Status][azure-pipelines-image]][azure-pipelines-url] [![Travis Build Status][travis-image]][travis-url] [![AppVeyor Build Status][appveyor-image]][appveyor-url] [![Coveralls Status][coveralls-image]][coveralls-url] [![Gitter chat][gitter-image]][gitter-url]\n\nExtract the non-magic parent path from a glob string.\n\n## Usage\n\n```js\nvar globParent = require('glob-parent');\n\nglobParent('path/to/*.js'); // 'path/to'\nglobParent('/root/path/to/*.js'); // '/root/path/to'\nglobParent('/*.js'); // '/'\nglobParent('*.js'); // '.'\nglobParent('**/*.js'); // '.'\nglobParent('path/{to,from}'); // 'path'\nglobParent('path/!(to|from)'); // 'path'\nglobParent('path/?(to|from)'); // 'path'\nglobParent('path/+(to|from)'); // 'path'\nglobParent('path/*(to|from)'); // 'path'\nglobParent('path/@(to|from)'); // 'path'\nglobParent('path/**/*'); // 'path'\n\n// if provided a non-glob path, returns the nearest dir\nglobParent('path/foo/bar.js'); // 'path/foo'\nglobParent('path/foo/'); // 'path/foo'\nglobParent('path/foo'); // 'path' (see issue #3 for details)\n```\n\n## API\n\n### `globParent(maybeGlobString, [options])`\n\nTakes a string and returns the part of the path before the glob begins. Be aware of Escaping rules and Limitations below.\n\n#### options\n\n```js\n{\n  // Disables the automatic conversion of slashes for Windows\n  flipBackslashes: true\n}\n```\n\n## Escaping\n\nThe following characters have special significance in glob patterns and must be escaped if you want them to be treated as regular path characters:\n\n- `?` (question mark) unless used as a path segment alone\n- `*` (asterisk)\n- `|` (pipe)\n- `(` (opening parenthesis)\n- `)` (closing parenthesis)\n- `{` (opening curly brace)\n- `}` (closing curly brace)\n- `[` (opening bracket)\n- `]` (closing bracket)\n\n**Example**\n\n```js\nglobParent('foo/[bar]/') // 'foo'\nglobParent('foo/\\\\[bar]/') // 'foo/[bar]'\n```\n\n## Limitations\n\n### Braces & Brackets\nThis library attempts a quick and imperfect method of determining which path\nparts have glob magic without fully parsing/lexing the pattern. There are some\nadvanced use cases that can trip it up, such as nested braces where the outer\npair is escaped and the inner one contains a path separator. If you find\nyourself in the unlikely circumstance of being affected by this or need to\nensure higher-fidelity glob handling in your library, it is recommended that you\npre-process your input with [expand-braces] and/or [expand-brackets].\n\n### Windows\nBackslashes are not valid path separators for globs. If a path with backslashes\nis provided anyway, for simple cases, glob-parent will replace the path\nseparator for you and return the non-glob parent path (now with\nforward-slashes, which are still valid as Windows path separators).\n\nThis cannot be used in conjunction with escape characters.\n\n```js\n// BAD\nglobParent('C:\\\\Program Files \\\\(x86\\\\)\\\\*.ext') // 'C:/Program Files /(x86/)'\n\n// GOOD\nglobParent('C:/Program Files\\\\(x86\\\\)/*.ext') // 'C:/Program Files (x86)'\n```\n\nIf you are using escape characters for a pattern without path parts (i.e.\nrelative to `cwd`), prefix with `./` to avoid confusing glob-parent.\n\n```js\n// BAD\nglobParent('foo \\\\[bar]') // 'foo '\nglobParent('foo \\\\[bar]*') // 'foo '\n\n// GOOD\nglobParent('./foo \\\\[bar]') // 'foo [bar]'\nglobParent('./foo \\\\[bar]*') // '.'\n```\n\n## License\n\nISC\n\n[expand-braces]: https://github.com/jonschlinkert/expand-braces\n[expand-brackets]: https://github.com/jonschlinkert/expand-brackets\n\n[downloads-image]: https://img.shields.io/npm/dm/glob-parent.svg\n[npm-url]: https://www.npmjs.com/package/glob-parent\n[npm-image]: https://img.shields.io/npm/v/glob-parent.svg\n\n[azure-pipelines-url]: https://dev.azure.com/gulpjs/gulp/_build/latest?definitionId=2&branchName=master\n[azure-pipelines-image]: https://dev.azure.com/gulpjs/gulp/_apis/build/status/glob-parent?branchName=master\n\n[travis-url]: https://travis-ci.org/gulpjs/glob-parent\n[travis-image]: https://img.shields.io/travis/gulpjs/glob-parent.svg?label=travis-ci\n\n[appveyor-url]: https://ci.appveyor.com/project/gulpjs/glob-parent\n[appveyor-image]: https://img.shields.io/appveyor/ci/gulpjs/glob-parent.svg?label=appveyor\n\n[coveralls-url]: https://coveralls.io/r/gulpjs/glob-parent\n[coveralls-image]: https://img.shields.io/coveralls/gulpjs/glob-parent/master.svg\n\n[gitter-url]: https://gitter.im/gulpjs/gulp\n[gitter-image]: https://badges.gitter.im/gulpjs/gulp.svg\n/LICENSE\u0002The ISC License\n\nCopyright (c) 2015, 2019 Elan Shanker\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted, provided that the above\ncopyright notice and this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\nWITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\nANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\nACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR\nIN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/Z2xvYi1wYXJlbnRANi4wLjI=",
    "content": "/README.md\u0010f<p align=\"center\">\n  <a href=\"https://gulpjs.com\">\n    <img height=\"257\" width=\"114\" src=\"https://raw.githubusercontent.com/gulpjs/artwork/master/gulp-2x.png\">\n  </a>\n</p>\n\n# glob-parent\n\n[![NPM version][npm-image]][npm-url] [![Downloads][downloads-image]][npm-url] [![Build Status][ci-image]][ci-url] [![Coveralls Status][coveralls-image]][coveralls-url]\n\nExtract the non-magic parent path from a glob string.\n\n## Usage\n\n```js\nvar globParent = require('glob-parent');\n\nglobParent('path/to/*.js'); // 'path/to'\nglobParent('/root/path/to/*.js'); // '/root/path/to'\nglobParent('/*.js'); // '/'\nglobParent('*.js'); // '.'\nglobParent('**/*.js'); // '.'\nglobParent('path/{to,from}'); // 'path'\nglobParent('path/!(to|from)'); // 'path'\nglobParent('path/?(to|from)'); // 'path'\nglobParent('path/+(to|from)'); // 'path'\nglobParent('path/*(to|from)'); // 'path'\nglobParent('path/@(to|from)'); // 'path'\nglobParent('path/**/*'); // 'path'\n\n// if provided a non-glob path, returns the nearest dir\nglobParent('path/foo/bar.js'); // 'path/foo'\nglobParent('path/foo/'); // 'path/foo'\nglobParent('path/foo'); // 'path' (see issue #3 for details)\n```\n\n## API\n\n### `globParent(maybeGlobString, [options])`\n\nTakes a string and returns the part of the path before the glob begins. Be aware of Escaping rules and Limitations below.\n\n#### options\n\n```js\n{\n  // Disables the automatic conversion of slashes for Windows\n  flipBackslashes: true;\n}\n```\n\n## Escaping\n\nThe following characters have special significance in glob patterns and must be escaped if you want them to be treated as regular path characters:\n\n- `?` (question mark) unless used as a path segment alone\n- `*` (asterisk)\n- `|` (pipe)\n- `(` (opening parenthesis)\n- `)` (closing parenthesis)\n- `{` (opening curly brace)\n- `}` (closing curly brace)\n- `[` (opening bracket)\n- `]` (closing bracket)\n\n**Example**\n\n```js\nglobParent('foo/[bar]/'); // 'foo'\nglobParent('foo/\\\\[bar]/'); // 'foo/[bar]'\n```\n\n## Limitations\n\n### Braces & Brackets\n\nThis library attempts a quick and imperfect method of determining which path\nparts have glob magic without fully parsing/lexing the pattern. There are some\nadvanced use cases that can trip it up, such as nested braces where the outer\npair is escaped and the inner one contains a path separator. If you find\nyourself in the unlikely circumstance of being affected by this or need to\nensure higher-fidelity glob handling in your library, it is recommended that you\npre-process your input with [expand-braces] and/or [expand-brackets].\n\n### Windows\n\nBackslashes are not valid path separators for globs. If a path with backslashes\nis provided anyway, for simple cases, glob-parent will replace the path\nseparator for you and return the non-glob parent path (now with\nforward-slashes, which are still valid as Windows path separators).\n\nThis cannot be used in conjunction with escape characters.\n\n```js\n// BAD\nglobParent('C:\\\\Program Files \\\\(x86\\\\)\\\\*.ext'); // 'C:/Program Files /(x86/)'\n\n// GOOD\nglobParent('C:/Program Files\\\\(x86\\\\)/*.ext'); // 'C:/Program Files (x86)'\n```\n\nIf you are using escape characters for a pattern without path parts (i.e.\nrelative to `cwd`), prefix with `./` to avoid confusing glob-parent.\n\n```js\n// BAD\nglobParent('foo \\\\[bar]'); // 'foo '\nglobParent('foo \\\\[bar]*'); // 'foo '\n\n// GOOD\nglobParent('./foo \\\\[bar]'); // 'foo [bar]'\nglobParent('./foo \\\\[bar]*'); // '.'\n```\n\n## License\n\nISC\n\n<!-- prettier-ignore-start -->\n[downloads-image]: https://img.shields.io/npm/dm/glob-parent.svg?style=flat-square\n[npm-url]: https://www.npmjs.com/package/glob-parent\n[npm-image]: https://img.shields.io/npm/v/glob-parent.svg?style=flat-square\n\n[ci-url]: https://github.com/gulpjs/glob-parent/actions?query=workflow:dev\n[ci-image]: https://img.shields.io/github/workflow/status/gulpjs/glob-parent/dev?style=flat-square\n\n[coveralls-url]: https://coveralls.io/r/gulpjs/glob-parent\n[coveralls-image]: https://img.shields.io/coveralls/gulpjs/glob-parent/master.svg?style=flat-square\n<!-- prettier-ignore-end -->\n\n<!-- prettier-ignore-start -->\n[expand-braces]: https://github.com/jonschlinkert/expand-braces\n[expand-brackets]: https://github.com/jonschlinkert/expand-brackets\n<!-- prettier-ignore-end -->\n/package.json\u0004\u001a{\n  \"name\": \"glob-parent\",\n  \"version\": \"6.0.2\",\n  \"description\": \"Extract the non-magic parent path from a glob string.\",\n  \"author\": \"Gulp Team <team@gulpjs.com> (https://gulpjs.com/)\",\n  \"contributors\": [\n    \"Elan Shanker (https://github.com/es128)\",\n    \"Blaine Bublitz <blaine.bublitz@gmail.com>\"\n  ],\n  \"repository\": \"gulpjs/glob-parent\",\n  \"license\": \"ISC\",\n  \"engines\": {\n    \"node\": \">=10.13.0\"\n  },\n  \"main\": \"index.js\",\n  \"files\": [\n    \"LICENSE\",\n    \"index.js\"\n  ],\n  \"scripts\": {\n    \"lint\": \"eslint .\",\n    \"pretest\": \"npm run lint\",\n    \"test\": \"nyc mocha --async-only\"\n  },\n  \"dependencies\": {\n    \"is-glob\": \"^4.0.3\"\n  },\n  \"devDependencies\": {\n    \"eslint\": \"^7.0.0\",\n    \"eslint-config-gulp\": \"^5.0.0\",\n    \"expect\": \"^26.0.1\",\n    \"mocha\": \"^7.1.2\",\n    \"nyc\": \"^15.0.1\"\n  },\n  \"nyc\": {\n    \"reporter\": [\n      \"lcov\",\n      \"text-summary\"\n    ]\n  },\n  \"prettier\": {\n    \"singleQuote\": true\n  },\n  \"keywords\": [\n    \"glob\",\n    \"parent\",\n    \"strip\",\n    \"path\",\n    \"dirname\",\n    \"directory\",\n    \"base\",\n    \"wildcard\"\n  ]\n}\n/index.js\u0006N'use strict';\n\nvar isGlob = require('is-glob');\nvar pathPosixDirname = require('path').posix.dirname;\nvar isWin32 = require('os').platform() === 'win32';\n\nvar slash = '/';\nvar backslash = /\\\\/g;\nvar escaped = /\\\\([!*?|[\\](){}])/g;\n\n/**\n * @param {string} str\n * @param {Object} opts\n * @param {boolean} [opts.flipBackslashes=true]\n */\nmodule.exports = function globParent(str, opts) {\n  var options = Object.assign({ flipBackslashes: true }, opts);\n\n  // flip windows path separators\n  if (options.flipBackslashes && isWin32 && str.indexOf(slash) < 0) {\n    str = str.replace(backslash, slash);\n  }\n\n  // special case for strings ending in enclosure containing path separator\n  if (isEnclosure(str)) {\n    str += slash;\n  }\n\n  // preserves full path in case of trailing path separator\n  str += 'a';\n\n  // remove path parts that are globby\n  do {\n    str = pathPosixDirname(str);\n  } while (isGlobby(str));\n\n  // remove escape chars and return result\n  return str.replace(escaped, '$1');\n};\n\nfunction isEnclosure(str) {\n  var lastChar = str.slice(-1);\n\n  var enclosureStart;\n  switch (lastChar) {\n    case '}':\n      enclosureStart = '{';\n      break;\n    case ']':\n      enclosureStart = '[';\n      break;\n    default:\n      return false;\n  }\n\n  var foundIndex = str.indexOf(enclosureStart);\n  if (foundIndex < 0) {\n    return false;\n  }\n\n  return str.slice(foundIndex + 1, -1).includes(slash);\n}\n\nfunction isGlobby(str) {\n  if (/\\([^()]+$/.test(str)) {\n    return true;\n  }\n  if (str[0] === '{' || str[0] === '[') {\n    return true;\n  }\n  if (/[^\\\\][{[]/.test(str)) {\n    return true;\n  }\n  return isGlob(str);\n}\n/LICENSE\u0003YThe ISC License\n\nCopyright (c) 2015, 2019 Elan Shanker, 2021 Blaine Bublitz <blaine.bublitz@gmail.com>, Eric Schoffstall <yo@contra.io> and other contributors\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted, provided that the above\ncopyright notice and this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\nWITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\nANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\nACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR\nIN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/Z2xvYkA3LjIuMw==",
    "content": "/sync.js.module.exports = globSync\nglobSync.GlobSync = GlobSync\n\nvar rp = require('fs.realpath')\nvar minimatch = require('minimatch')\nvar Minimatch = minimatch.Minimatch\nvar Glob = require('./glob.js').Glob\nvar util = require('util')\nvar path = require('path')\nvar assert = require('assert')\nvar isAbsolute = require('path-is-absolute')\nvar common = require('./common.js')\nvar setopts = common.setopts\nvar ownProp = common.ownProp\nvar childrenIgnored = common.childrenIgnored\nvar isIgnored = common.isIgnored\n\nfunction globSync (pattern, options) {\n  if (typeof options === 'function' || arguments.length === 3)\n    throw new TypeError('callback provided to sync glob\\n'+\n                        'See: https://github.com/isaacs/node-glob/issues/167')\n\n  return new GlobSync(pattern, options).found\n}\n\nfunction GlobSync (pattern, options) {\n  if (!pattern)\n    throw new Error('must provide pattern')\n\n  if (typeof options === 'function' || arguments.length === 3)\n    throw new TypeError('callback provided to sync glob\\n'+\n                        'See: https://github.com/isaacs/node-glob/issues/167')\n\n  if (!(this instanceof GlobSync))\n    return new GlobSync(pattern, options)\n\n  setopts(this, pattern, options)\n\n  if (this.noprocess)\n    return this\n\n  var n = this.minimatch.set.length\n  this.matches = new Array(n)\n  for (var i = 0; i < n; i ++) {\n    this._process(this.minimatch.set[i], i, false)\n  }\n  this._finish()\n}\n\nGlobSync.prototype._finish = function () {\n  assert.ok(this instanceof GlobSync)\n  if (this.realpath) {\n    var self = this\n    this.matches.forEach(function (matchset, index) {\n      var set = self.matches[index] = Object.create(null)\n      for (var p in matchset) {\n        try {\n          p = self._makeAbs(p)\n          var real = rp.realpathSync(p, self.realpathCache)\n          set[real] = true\n        } catch (er) {\n          if (er.syscall === 'stat')\n            set[self._makeAbs(p)] = true\n          else\n            throw er\n        }\n      }\n    })\n  }\n  common.finish(this)\n}\n\n\nGlobSync.prototype._process = function (pattern, index, inGlobStar) {\n  assert.ok(this instanceof GlobSync)\n\n  // Get the first [n] parts of pattern that are all strings.\n  var n = 0\n  while (typeof pattern[n] === 'string') {\n    n ++\n  }\n  // now n is the index of the first one that is *not* a string.\n\n  // See if there's anything else\n  var prefix\n  switch (n) {\n    // if not, then this is rather simple\n    case pattern.length:\n      this._processSimple(pattern.join('/'), index)\n      return\n\n    case 0:\n      // pattern *starts* with some non-trivial item.\n      // going to readdir(cwd), but not include the prefix in matches.\n      prefix = null\n      break\n\n    default:\n      // pattern has some string bits in the front.\n      // whatever it starts with, whether that's 'absolute' like /foo/bar,\n      // or 'relative' like '../baz'\n      prefix = pattern.slice(0, n).join('/')\n      break\n  }\n\n  var remain = pattern.slice(n)\n\n  // get the list of entries.\n  var read\n  if (prefix === null)\n    read = '.'\n  else if (isAbsolute(prefix) ||\n      isAbsolute(pattern.map(function (p) {\n        return typeof p === 'string' ? p : '[*]'\n      }).join('/'))) {\n    if (!prefix || !isAbsolute(prefix))\n      prefix = '/' + prefix\n    read = prefix\n  } else\n    read = prefix\n\n  var abs = this._makeAbs(read)\n\n  //if ignored, skip processing\n  if (childrenIgnored(this, read))\n    return\n\n  var isGlobStar = remain[0] === minimatch.GLOBSTAR\n  if (isGlobStar)\n    this._processGlobStar(prefix, read, abs, remain, index, inGlobStar)\n  else\n    this._processReaddir(prefix, read, abs, remain, index, inGlobStar)\n}\n\n\nGlobSync.prototype._processReaddir = function (prefix, read, abs, remain, index, inGlobStar) {\n  var entries = this._readdir(abs, inGlobStar)\n\n  // if the abs isn't a dir, then nothing can match!\n  if (!entries)\n    return\n\n  // It will only match dot entries if it starts with a dot, or if\n  // dot is set.  Stuff like @(.foo|.bar) isn't allowed.\n  var pn = remain[0]\n  var negate = !!this.minimatch.negate\n  var rawGlob = pn._glob\n  var dotOk = this.dot || rawGlob.charAt(0) === '.'\n\n  var matchedEntries = []\n  for (var i = 0; i < entries.length; i++) {\n    var e = entries[i]\n    if (e.charAt(0) !== '.' || dotOk) {\n      var m\n      if (negate && !prefix) {\n        m = !e.match(pn)\n      } else {\n        m = e.match(pn)\n      }\n      if (m)\n        matchedEntries.push(e)\n    }\n  }\n\n  var len = matchedEntries.length\n  // If there are no matched entries, then nothing matches.\n  if (len === 0)\n    return\n\n  // if this is the last remaining pattern bit, then no need for\n  // an additional stat *unless* the user has specified mark or\n  // stat explicitly.  We know they exist, since readdir returned\n  // them.\n\n  if (remain.length === 1 && !this.mark && !this.stat) {\n    if (!this.matches[index])\n      this.matches[index] = Object.create(null)\n\n    for (var i = 0; i < len; i ++) {\n      var e = matchedEntries[i]\n      if (prefix) {\n        if (prefix.slice(-1) !== '/')\n          e = prefix + '/' + e\n        else\n          e = prefix + e\n      }\n\n      if (e.charAt(0) === '/' && !this.nomount) {\n        e = path.join(this.root, e)\n      }\n      this._emitMatch(index, e)\n    }\n    // This was the last one, and no stats were needed\n    return\n  }\n\n  // now test all matched entries as stand-ins for that part\n  // of the pattern.\n  remain.shift()\n  for (var i = 0; i < len; i ++) {\n    var e = matchedEntries[i]\n    var newPattern\n    if (prefix)\n      newPattern = [prefix, e]\n    else\n      newPattern = [e]\n    this._process(newPattern.concat(remain), index, inGlobStar)\n  }\n}\n\n\nGlobSync.prototype._emitMatch = function (index, e) {\n  if (isIgnored(this, e))\n    return\n\n  var abs = this._makeAbs(e)\n\n  if (this.mark)\n    e = this._mark(e)\n\n  if (this.absolute) {\n    e = abs\n  }\n\n  if (this.matches[index][e])\n    return\n\n  if (this.nodir) {\n    var c = this.cache[abs]\n    if (c === 'DIR' || Array.isArray(c))\n      return\n  }\n\n  this.matches[index][e] = true\n\n  if (this.stat)\n    this._stat(e)\n}\n\n\nGlobSync.prototype._readdirInGlobStar = function (abs) {\n  // follow all symlinked directories forever\n  // just proceed as if this is a non-globstar situation\n  if (this.follow)\n    return this._readdir(abs, false)\n\n  var entries\n  var lstat\n  var stat\n  try {\n    lstat = this.fs.lstatSync(abs)\n  } catch (er) {\n    if (er.code === 'ENOENT') {\n      // lstat failed, doesn't exist\n      return null\n    }\n  }\n\n  var isSym = lstat && lstat.isSymbolicLink()\n  this.symlinks[abs] = isSym\n\n  // If it's not a symlink or a dir, then it's definitely a regular file.\n  // don't bother doing a readdir in that case.\n  if (!isSym && lstat && !lstat.isDirectory())\n    this.cache[abs] = 'FILE'\n  else\n    entries = this._readdir(abs, false)\n\n  return entries\n}\n\nGlobSync.prototype._readdir = function (abs, inGlobStar) {\n  var entries\n\n  if (inGlobStar && !ownProp(this.symlinks, abs))\n    return this._readdirInGlobStar(abs)\n\n  if (ownProp(this.cache, abs)) {\n    var c = this.cache[abs]\n    if (!c || c === 'FILE')\n      return null\n\n    if (Array.isArray(c))\n      return c\n  }\n\n  try {\n    return this._readdirEntries(abs, this.fs.readdirSync(abs))\n  } catch (er) {\n    this._readdirError(abs, er)\n    return null\n  }\n}\n\nGlobSync.prototype._readdirEntries = function (abs, entries) {\n  // if we haven't asked to stat everything, then just\n  // assume that everything in there exists, so we can avoid\n  // having to stat it a second time.\n  if (!this.mark && !this.stat) {\n    for (var i = 0; i < entries.length; i ++) {\n      var e = entries[i]\n      if (abs === '/')\n        e = abs + e\n      else\n        e = abs + '/' + e\n      this.cache[e] = true\n    }\n  }\n\n  this.cache[abs] = entries\n\n  // mark and cache dir-ness\n  return entries\n}\n\nGlobSync.prototype._readdirError = function (f, er) {\n  // handle errors, and cache the information\n  switch (er.code) {\n    case 'ENOTSUP': // https://github.com/isaacs/node-glob/issues/205\n    case 'ENOTDIR': // totally normal. means it *does* exist.\n      var abs = this._makeAbs(f)\n      this.cache[abs] = 'FILE'\n      if (abs === this.cwdAbs) {\n        var error = new Error(er.code + ' invalid cwd ' + this.cwd)\n        error.path = this.cwd\n        error.code = er.code\n        throw error\n      }\n      break\n\n    case 'ENOENT': // not terribly unusual\n    case 'ELOOP':\n    case 'ENAMETOOLONG':\n    case 'UNKNOWN':\n      this.cache[this._makeAbs(f)] = false\n      break\n\n    default: // some unusual error.  Treat as failure.\n      this.cache[this._makeAbs(f)] = false\n      if (this.strict)\n        throw er\n      if (!this.silent)\n        console.error('glob error', er)\n      break\n  }\n}\n\nGlobSync.prototype._processGlobStar = function (prefix, read, abs, remain, index, inGlobStar) {\n\n  var entries = this._readdir(abs, inGlobStar)\n\n  // no entries means not a dir, so it can never have matches\n  // foo.txt/** doesn't match foo.txt\n  if (!entries)\n    return\n\n  // test without the globstar, and with every child both below\n  // and replacing the globstar.\n  var remainWithoutGlobStar = remain.slice(1)\n  var gspref = prefix ? [ prefix ] : []\n  var noGlobStar = gspref.concat(remainWithoutGlobStar)\n\n  // the noGlobStar pattern exits the inGlobStar state\n  this._process(noGlobStar, index, false)\n\n  var len = entries.length\n  var isSym = this.symlinks[abs]\n\n  // If it's a symlink, and we're in a globstar, then stop\n  if (isSym && inGlobStar)\n    return\n\n  for (var i = 0; i < len; i++) {\n    var e = entries[i]\n    if (e.charAt(0) === '.' && !this.dot)\n      continue\n\n    // these two cases enter the inGlobStar state\n    var instead = gspref.concat(entries[i], remainWithoutGlobStar)\n    this._process(instead, index, true)\n\n    var below = gspref.concat(entries[i], remain)\n    this._process(below, index, true)\n  }\n}\n\nGlobSync.prototype._processSimple = function (prefix, index) {\n  // XXX review this.  Shouldn't it be doing the mounting etc\n  // before doing stat?  kinda weird?\n  var exists = this._stat(prefix)\n\n  if (!this.matches[index])\n    this.matches[index] = Object.create(null)\n\n  // If it doesn't exist, then just mark the lack of results\n  if (!exists)\n    return\n\n  if (prefix && isAbsolute(prefix) && !this.nomount) {\n    var trail = /[\\/\\\\]$/.test(prefix)\n    if (prefix.charAt(0) === '/') {\n      prefix = path.join(this.root, prefix)\n    } else {\n      prefix = path.resolve(this.root, prefix)\n      if (trail)\n        prefix += '/'\n    }\n  }\n\n  if (process.platform === 'win32')\n    prefix = prefix.replace(/\\\\/g, '/')\n\n  // Mark this as a match\n  this._emitMatch(index, prefix)\n}\n\n// Returns either 'DIR', 'FILE', or false\nGlobSync.prototype._stat = function (f) {\n  var abs = this._makeAbs(f)\n  var needDir = f.slice(-1) === '/'\n\n  if (f.length > this.maxLength)\n    return false\n\n  if (!this.stat && ownProp(this.cache, abs)) {\n    var c = this.cache[abs]\n\n    if (Array.isArray(c))\n      c = 'DIR'\n\n    // It exists, but maybe not how we need it\n    if (!needDir || c === 'DIR')\n      return c\n\n    if (needDir && c === 'FILE')\n      return false\n\n    // otherwise we have to stat, because maybe c=true\n    // if we know it exists, but not what it is.\n  }\n\n  var exists\n  var stat = this.statCache[abs]\n  if (!stat) {\n    var lstat\n    try {\n      lstat = this.fs.lstatSync(abs)\n    } catch (er) {\n      if (er && (er.code === 'ENOENT' || er.code === 'ENOTDIR')) {\n        this.statCache[abs] = false\n        return false\n      }\n    }\n\n    if (lstat && lstat.isSymbolicLink()) {\n      try {\n        stat = this.fs.statSync(abs)\n      } catch (er) {\n        stat = lstat\n      }\n    } else {\n      stat = lstat\n    }\n  }\n\n  this.statCache[abs] = stat\n\n  var c = true\n  if (stat)\n    c = stat.isDirectory() ? 'DIR' : 'FILE'\n\n  this.cache[abs] = this.cache[abs] || c\n\n  if (needDir && c === 'FILE')\n    return false\n\n  return c\n}\n\nGlobSync.prototype._mark = function (p) {\n  return common.mark(this, p)\n}\n\nGlobSync.prototype._makeAbs = function (f) {\n  return common.makeAbs(this, f)\n}\n/package.json\u0004{\n  \"author\": \"Isaac Z. Schlueter <i@izs.me> (http://blog.izs.me/)\",\n  \"name\": \"glob\",\n  \"description\": \"a little globber\",\n  \"version\": \"7.2.3\",\n  \"publishConfig\": {\n    \"tag\": \"v7-legacy\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git://github.com/isaacs/node-glob.git\"\n  },\n  \"main\": \"glob.js\",\n  \"files\": [\n    \"glob.js\",\n    \"sync.js\",\n    \"common.js\"\n  ],\n  \"engines\": {\n    \"node\": \"*\"\n  },\n  \"dependencies\": {\n    \"fs.realpath\": \"^1.0.0\",\n    \"inflight\": \"^1.0.4\",\n    \"inherits\": \"2\",\n    \"minimatch\": \"^3.1.1\",\n    \"once\": \"^1.3.0\",\n    \"path-is-absolute\": \"^1.0.0\"\n  },\n  \"devDependencies\": {\n    \"memfs\": \"^3.2.0\",\n    \"mkdirp\": \"0\",\n    \"rimraf\": \"^2.2.8\",\n    \"tap\": \"^15.0.6\",\n    \"tick\": \"0.0.6\"\n  },\n  \"tap\": {\n    \"before\": \"test/00-setup.js\",\n    \"after\": \"test/zz-cleanup.js\",\n    \"jobs\": 1\n  },\n  \"scripts\": {\n    \"prepublish\": \"npm run benchclean\",\n    \"profclean\": \"rm -f v8.log profile.txt\",\n    \"test\": \"tap\",\n    \"test-regen\": \"npm run profclean && TEST_REGEN=1 node test/00-setup.js\",\n    \"bench\": \"bash benchmark.sh\",\n    \"prof\": \"bash prof.sh && cat profile.txt\",\n    \"benchclean\": \"node benchclean.js\"\n  },\n  \"license\": \"ISC\",\n  \"funding\": {\n    \"url\": \"https://github.com/sponsors/isaacs\"\n  }\n}\n/glob.jsK// Approach:\n//\n// 1. Get the minimatch set\n// 2. For each pattern in the set, PROCESS(pattern, false)\n// 3. Store matches per-set, then uniq them\n//\n// PROCESS(pattern, inGlobStar)\n// Get the first [n] items from pattern that are all strings\n// Join these together.  This is PREFIX.\n//   If there is no more remaining, then stat(PREFIX) and\n//   add to matches if it succeeds.  END.\n//\n// If inGlobStar and PREFIX is symlink and points to dir\n//   set ENTRIES = []\n// else readdir(PREFIX) as ENTRIES\n//   If fail, END\n//\n// with ENTRIES\n//   If pattern[n] is GLOBSTAR\n//     // handle the case where the globstar match is empty\n//     // by pruning it out, and testing the resulting pattern\n//     PROCESS(pattern[0..n] + pattern[n+1 .. $], false)\n//     // handle other cases.\n//     for ENTRY in ENTRIES (not dotfiles)\n//       // attach globstar + tail onto the entry\n//       // Mark that this entry is a globstar match\n//       PROCESS(pattern[0..n] + ENTRY + pattern[n .. $], true)\n//\n//   else // not globstar\n//     for ENTRY in ENTRIES (not dotfiles, unless pattern[n] is dot)\n//       Test ENTRY against pattern[n]\n//       If fails, continue\n//       If passes, PROCESS(pattern[0..n] + item + pattern[n+1 .. $])\n//\n// Caveat:\n//   Cache all stats and readdirs results to minimize syscall.  Since all\n//   we ever care about is existence and directory-ness, we can just keep\n//   `true` for files, and [children,...] for directories, or `false` for\n//   things that don't exist.\n\nmodule.exports = glob\n\nvar rp = require('fs.realpath')\nvar minimatch = require('minimatch')\nvar Minimatch = minimatch.Minimatch\nvar inherits = require('inherits')\nvar EE = require('events').EventEmitter\nvar path = require('path')\nvar assert = require('assert')\nvar isAbsolute = require('path-is-absolute')\nvar globSync = require('./sync.js')\nvar common = require('./common.js')\nvar setopts = common.setopts\nvar ownProp = common.ownProp\nvar inflight = require('inflight')\nvar util = require('util')\nvar childrenIgnored = common.childrenIgnored\nvar isIgnored = common.isIgnored\n\nvar once = require('once')\n\nfunction glob (pattern, options, cb) {\n  if (typeof options === 'function') cb = options, options = {}\n  if (!options) options = {}\n\n  if (options.sync) {\n    if (cb)\n      throw new TypeError('callback provided to sync glob')\n    return globSync(pattern, options)\n  }\n\n  return new Glob(pattern, options, cb)\n}\n\nglob.sync = globSync\nvar GlobSync = glob.GlobSync = globSync.GlobSync\n\n// old api surface\nglob.glob = glob\n\nfunction extend (origin, add) {\n  if (add === null || typeof add !== 'object') {\n    return origin\n  }\n\n  var keys = Object.keys(add)\n  var i = keys.length\n  while (i--) {\n    origin[keys[i]] = add[keys[i]]\n  }\n  return origin\n}\n\nglob.hasMagic = function (pattern, options_) {\n  var options = extend({}, options_)\n  options.noprocess = true\n\n  var g = new Glob(pattern, options)\n  var set = g.minimatch.set\n\n  if (!pattern)\n    return false\n\n  if (set.length > 1)\n    return true\n\n  for (var j = 0; j < set[0].length; j++) {\n    if (typeof set[0][j] !== 'string')\n      return true\n  }\n\n  return false\n}\n\nglob.Glob = Glob\ninherits(Glob, EE)\nfunction Glob (pattern, options, cb) {\n  if (typeof options === 'function') {\n    cb = options\n    options = null\n  }\n\n  if (options && options.sync) {\n    if (cb)\n      throw new TypeError('callback provided to sync glob')\n    return new GlobSync(pattern, options)\n  }\n\n  if (!(this instanceof Glob))\n    return new Glob(pattern, options, cb)\n\n  setopts(this, pattern, options)\n  this._didRealPath = false\n\n  // process each pattern in the minimatch set\n  var n = this.minimatch.set.length\n\n  // The matches are stored as {<filename>: true,...} so that\n  // duplicates are automagically pruned.\n  // Later, we do an Object.keys() on these.\n  // Keep them as a list so we can fill in when nonull is set.\n  this.matches = new Array(n)\n\n  if (typeof cb === 'function') {\n    cb = once(cb)\n    this.on('error', cb)\n    this.on('end', function (matches) {\n      cb(null, matches)\n    })\n  }\n\n  var self = this\n  this._processing = 0\n\n  this._emitQueue = []\n  this._processQueue = []\n  this.paused = false\n\n  if (this.noprocess)\n    return this\n\n  if (n === 0)\n    return done()\n\n  var sync = true\n  for (var i = 0; i < n; i ++) {\n    this._process(this.minimatch.set[i], i, false, done)\n  }\n  sync = false\n\n  function done () {\n    --self._processing\n    if (self._processing <= 0) {\n      if (sync) {\n        process.nextTick(function () {\n          self._finish()\n        })\n      } else {\n        self._finish()\n      }\n    }\n  }\n}\n\nGlob.prototype._finish = function () {\n  assert(this instanceof Glob)\n  if (this.aborted)\n    return\n\n  if (this.realpath && !this._didRealpath)\n    return this._realpath()\n\n  common.finish(this)\n  this.emit('end', this.found)\n}\n\nGlob.prototype._realpath = function () {\n  if (this._didRealpath)\n    return\n\n  this._didRealpath = true\n\n  var n = this.matches.length\n  if (n === 0)\n    return this._finish()\n\n  var self = this\n  for (var i = 0; i < this.matches.length; i++)\n    this._realpathSet(i, next)\n\n  function next () {\n    if (--n === 0)\n      self._finish()\n  }\n}\n\nGlob.prototype._realpathSet = function (index, cb) {\n  var matchset = this.matches[index]\n  if (!matchset)\n    return cb()\n\n  var found = Object.keys(matchset)\n  var self = this\n  var n = found.length\n\n  if (n === 0)\n    return cb()\n\n  var set = this.matches[index] = Object.create(null)\n  found.forEach(function (p, i) {\n    // If there's a problem with the stat, then it means that\n    // one or more of the links in the realpath couldn't be\n    // resolved.  just return the abs value in that case.\n    p = self._makeAbs(p)\n    rp.realpath(p, self.realpathCache, function (er, real) {\n      if (!er)\n        set[real] = true\n      else if (er.syscall === 'stat')\n        set[p] = true\n      else\n        self.emit('error', er) // srsly wtf right here\n\n      if (--n === 0) {\n        self.matches[index] = set\n        cb()\n      }\n    })\n  })\n}\n\nGlob.prototype._mark = function (p) {\n  return common.mark(this, p)\n}\n\nGlob.prototype._makeAbs = function (f) {\n  return common.makeAbs(this, f)\n}\n\nGlob.prototype.abort = function () {\n  this.aborted = true\n  this.emit('abort')\n}\n\nGlob.prototype.pause = function () {\n  if (!this.paused) {\n    this.paused = true\n    this.emit('pause')\n  }\n}\n\nGlob.prototype.resume = function () {\n  if (this.paused) {\n    this.emit('resume')\n    this.paused = false\n    if (this._emitQueue.length) {\n      var eq = this._emitQueue.slice(0)\n      this._emitQueue.length = 0\n      for (var i = 0; i < eq.length; i ++) {\n        var e = eq[i]\n        this._emitMatch(e[0], e[1])\n      }\n    }\n    if (this._processQueue.length) {\n      var pq = this._processQueue.slice(0)\n      this._processQueue.length = 0\n      for (var i = 0; i < pq.length; i ++) {\n        var p = pq[i]\n        this._processing--\n        this._process(p[0], p[1], p[2], p[3])\n      }\n    }\n  }\n}\n\nGlob.prototype._process = function (pattern, index, inGlobStar, cb) {\n  assert(this instanceof Glob)\n  assert(typeof cb === 'function')\n\n  if (this.aborted)\n    return\n\n  this._processing++\n  if (this.paused) {\n    this._processQueue.push([pattern, index, inGlobStar, cb])\n    return\n  }\n\n  //console.error('PROCESS %d', this._processing, pattern)\n\n  // Get the first [n] parts of pattern that are all strings.\n  var n = 0\n  while (typeof pattern[n] === 'string') {\n    n ++\n  }\n  // now n is the index of the first one that is *not* a string.\n\n  // see if there's anything else\n  var prefix\n  switch (n) {\n    // if not, then this is rather simple\n    case pattern.length:\n      this._processSimple(pattern.join('/'), index, cb)\n      return\n\n    case 0:\n      // pattern *starts* with some non-trivial item.\n      // going to readdir(cwd), but not include the prefix in matches.\n      prefix = null\n      break\n\n    default:\n      // pattern has some string bits in the front.\n      // whatever it starts with, whether that's 'absolute' like /foo/bar,\n      // or 'relative' like '../baz'\n      prefix = pattern.slice(0, n).join('/')\n      break\n  }\n\n  var remain = pattern.slice(n)\n\n  // get the list of entries.\n  var read\n  if (prefix === null)\n    read = '.'\n  else if (isAbsolute(prefix) ||\n      isAbsolute(pattern.map(function (p) {\n        return typeof p === 'string' ? p : '[*]'\n      }).join('/'))) {\n    if (!prefix || !isAbsolute(prefix))\n      prefix = '/' + prefix\n    read = prefix\n  } else\n    read = prefix\n\n  var abs = this._makeAbs(read)\n\n  //if ignored, skip _processing\n  if (childrenIgnored(this, read))\n    return cb()\n\n  var isGlobStar = remain[0] === minimatch.GLOBSTAR\n  if (isGlobStar)\n    this._processGlobStar(prefix, read, abs, remain, index, inGlobStar, cb)\n  else\n    this._processReaddir(prefix, read, abs, remain, index, inGlobStar, cb)\n}\n\nGlob.prototype._processReaddir = function (prefix, read, abs, remain, index, inGlobStar, cb) {\n  var self = this\n  this._readdir(abs, inGlobStar, function (er, entries) {\n    return self._processReaddir2(prefix, read, abs, remain, index, inGlobStar, entries, cb)\n  })\n}\n\nGlob.prototype._processReaddir2 = function (prefix, read, abs, remain, index, inGlobStar, entries, cb) {\n\n  // if the abs isn't a dir, then nothing can match!\n  if (!entries)\n    return cb()\n\n  // It will only match dot entries if it starts with a dot, or if\n  // dot is set.  Stuff like @(.foo|.bar) isn't allowed.\n  var pn = remain[0]\n  var negate = !!this.minimatch.negate\n  var rawGlob = pn._glob\n  var dotOk = this.dot || rawGlob.charAt(0) === '.'\n\n  var matchedEntries = []\n  for (var i = 0; i < entries.length; i++) {\n    var e = entries[i]\n    if (e.charAt(0) !== '.' || dotOk) {\n      var m\n      if (negate && !prefix) {\n        m = !e.match(pn)\n      } else {\n        m = e.match(pn)\n      }\n      if (m)\n        matchedEntries.push(e)\n    }\n  }\n\n  //console.error('prd2', prefix, entries, remain[0]._glob, matchedEntries)\n\n  var len = matchedEntries.length\n  // If there are no matched entries, then nothing matches.\n  if (len === 0)\n    return cb()\n\n  // if this is the last remaining pattern bit, then no need for\n  // an additional stat *unless* the user has specified mark or\n  // stat explicitly.  We know they exist, since readdir returned\n  // them.\n\n  if (remain.length === 1 && !this.mark && !this.stat) {\n    if (!this.matches[index])\n      this.matches[index] = Object.create(null)\n\n    for (var i = 0; i < len; i ++) {\n      var e = matchedEntries[i]\n      if (prefix) {\n        if (prefix !== '/')\n          e = prefix + '/' + e\n        else\n          e = prefix + e\n      }\n\n      if (e.charAt(0) === '/' && !this.nomount) {\n        e = path.join(this.root, e)\n      }\n      this._emitMatch(index, e)\n    }\n    // This was the last one, and no stats were needed\n    return cb()\n  }\n\n  // now test all matched entries as stand-ins for that part\n  // of the pattern.\n  remain.shift()\n  for (var i = 0; i < len; i ++) {\n    var e = matchedEntries[i]\n    var newPattern\n    if (prefix) {\n      if (prefix !== '/')\n        e = prefix + '/' + e\n      else\n        e = prefix + e\n    }\n    this._process([e].concat(remain), index, inGlobStar, cb)\n  }\n  cb()\n}\n\nGlob.prototype._emitMatch = function (index, e) {\n  if (this.aborted)\n    return\n\n  if (isIgnored(this, e))\n    return\n\n  if (this.paused) {\n    this._emitQueue.push([index, e])\n    return\n  }\n\n  var abs = isAbsolute(e) ? e : this._makeAbs(e)\n\n  if (this.mark)\n    e = this._mark(e)\n\n  if (this.absolute)\n    e = abs\n\n  if (this.matches[index][e])\n    return\n\n  if (this.nodir) {\n    var c = this.cache[abs]\n    if (c === 'DIR' || Array.isArray(c))\n      return\n  }\n\n  this.matches[index][e] = true\n\n  var st = this.statCache[abs]\n  if (st)\n    this.emit('stat', e, st)\n\n  this.emit('match', e)\n}\n\nGlob.prototype._readdirInGlobStar = function (abs, cb) {\n  if (this.aborted)\n    return\n\n  // follow all symlinked directories forever\n  // just proceed as if this is a non-globstar situation\n  if (this.follow)\n    return this._readdir(abs, false, cb)\n\n  var lstatkey = 'lstat\\0' + abs\n  var self = this\n  var lstatcb = inflight(lstatkey, lstatcb_)\n\n  if (lstatcb)\n    self.fs.lstat(abs, lstatcb)\n\n  function lstatcb_ (er, lstat) {\n    if (er && er.code === 'ENOENT')\n      return cb()\n\n    var isSym = lstat && lstat.isSymbolicLink()\n    self.symlinks[abs] = isSym\n\n    // If it's not a symlink or a dir, then it's definitely a regular file.\n    // don't bother doing a readdir in that case.\n    if (!isSym && lstat && !lstat.isDirectory()) {\n      self.cache[abs] = 'FILE'\n      cb()\n    } else\n      self._readdir(abs, false, cb)\n  }\n}\n\nGlob.prototype._readdir = function (abs, inGlobStar, cb) {\n  if (this.aborted)\n    return\n\n  cb = inflight('readdir\\0'+abs+'\\0'+inGlobStar, cb)\n  if (!cb)\n    return\n\n  //console.error('RD %j %j', +inGlobStar, abs)\n  if (inGlobStar && !ownProp(this.symlinks, abs))\n    return this._readdirInGlobStar(abs, cb)\n\n  if (ownProp(this.cache, abs)) {\n    var c = this.cache[abs]\n    if (!c || c === 'FILE')\n      return cb()\n\n    if (Array.isArray(c))\n      return cb(null, c)\n  }\n\n  var self = this\n  self.fs.readdir(abs, readdirCb(this, abs, cb))\n}\n\nfunction readdirCb (self, abs, cb) {\n  return function (er, entries) {\n    if (er)\n      self._readdirError(abs, er, cb)\n    else\n      self._readdirEntries(abs, entries, cb)\n  }\n}\n\nGlob.prototype._readdirEntries = function (abs, entries, cb) {\n  if (this.aborted)\n    return\n\n  // if we haven't asked to stat everything, then just\n  // assume that everything in there exists, so we can avoid\n  // having to stat it a second time.\n  if (!this.mark && !this.stat) {\n    for (var i = 0; i < entries.length; i ++) {\n      var e = entries[i]\n      if (abs === '/')\n        e = abs + e\n      else\n        e = abs + '/' + e\n      this.cache[e] = true\n    }\n  }\n\n  this.cache[abs] = entries\n  return cb(null, entries)\n}\n\nGlob.prototype._readdirError = function (f, er, cb) {\n  if (this.aborted)\n    return\n\n  // handle errors, and cache the information\n  switch (er.code) {\n    case 'ENOTSUP': // https://github.com/isaacs/node-glob/issues/205\n    case 'ENOTDIR': // totally normal. means it *does* exist.\n      var abs = this._makeAbs(f)\n      this.cache[abs] = 'FILE'\n      if (abs === this.cwdAbs) {\n        var error = new Error(er.code + ' invalid cwd ' + this.cwd)\n        error.path = this.cwd\n        error.code = er.code\n        this.emit('error', error)\n        this.abort()\n      }\n      break\n\n    case 'ENOENT': // not terribly unusual\n    case 'ELOOP':\n    case 'ENAMETOOLONG':\n    case 'UNKNOWN':\n      this.cache[this._makeAbs(f)] = false\n      break\n\n    default: // some unusual error.  Treat as failure.\n      this.cache[this._makeAbs(f)] = false\n      if (this.strict) {\n        this.emit('error', er)\n        // If the error is handled, then we abort\n        // if not, we threw out of here\n        this.abort()\n      }\n      if (!this.silent)\n        console.error('glob error', er)\n      break\n  }\n\n  return cb()\n}\n\nGlob.prototype._processGlobStar = function (prefix, read, abs, remain, index, inGlobStar, cb) {\n  var self = this\n  this._readdir(abs, inGlobStar, function (er, entries) {\n    self._processGlobStar2(prefix, read, abs, remain, index, inGlobStar, entries, cb)\n  })\n}\n\n\nGlob.prototype._processGlobStar2 = function (prefix, read, abs, remain, index, inGlobStar, entries, cb) {\n  //console.error('pgs2', prefix, remain[0], entries)\n\n  // no entries means not a dir, so it can never have matches\n  // foo.txt/** doesn't match foo.txt\n  if (!entries)\n    return cb()\n\n  // test without the globstar, and with every child both below\n  // and replacing the globstar.\n  var remainWithoutGlobStar = remain.slice(1)\n  var gspref = prefix ? [ prefix ] : []\n  var noGlobStar = gspref.concat(remainWithoutGlobStar)\n\n  // the noGlobStar pattern exits the inGlobStar state\n  this._process(noGlobStar, index, false, cb)\n\n  var isSym = this.symlinks[abs]\n  var len = entries.length\n\n  // If it's a symlink, and we're in a globstar, then stop\n  if (isSym && inGlobStar)\n    return cb()\n\n  for (var i = 0; i < len; i++) {\n    var e = entries[i]\n    if (e.charAt(0) === '.' && !this.dot)\n      continue\n\n    // these two cases enter the inGlobStar state\n    var instead = gspref.concat(entries[i], remainWithoutGlobStar)\n    this._process(instead, index, true, cb)\n\n    var below = gspref.concat(entries[i], remain)\n    this._process(below, index, true, cb)\n  }\n\n  cb()\n}\n\nGlob.prototype._processSimple = function (prefix, index, cb) {\n  // XXX review this.  Shouldn't it be doing the mounting etc\n  // before doing stat?  kinda weird?\n  var self = this\n  this._stat(prefix, function (er, exists) {\n    self._processSimple2(prefix, index, er, exists, cb)\n  })\n}\nGlob.prototype._processSimple2 = function (prefix, index, er, exists, cb) {\n\n  //console.error('ps2', prefix, exists)\n\n  if (!this.matches[index])\n    this.matches[index] = Object.create(null)\n\n  // If it doesn't exist, then just mark the lack of results\n  if (!exists)\n    return cb()\n\n  if (prefix && isAbsolute(prefix) && !this.nomount) {\n    var trail = /[\\/\\\\]$/.test(prefix)\n    if (prefix.charAt(0) === '/') {\n      prefix = path.join(this.root, prefix)\n    } else {\n      prefix = path.resolve(this.root, prefix)\n      if (trail)\n        prefix += '/'\n    }\n  }\n\n  if (process.platform === 'win32')\n    prefix = prefix.replace(/\\\\/g, '/')\n\n  // Mark this as a match\n  this._emitMatch(index, prefix)\n  cb()\n}\n\n// Returns either 'DIR', 'FILE', or false\nGlob.prototype._stat = function (f, cb) {\n  var abs = this._makeAbs(f)\n  var needDir = f.slice(-1) === '/'\n\n  if (f.length > this.maxLength)\n    return cb()\n\n  if (!this.stat && ownProp(this.cache, abs)) {\n    var c = this.cache[abs]\n\n    if (Array.isArray(c))\n      c = 'DIR'\n\n    // It exists, but maybe not how we need it\n    if (!needDir || c === 'DIR')\n      return cb(null, c)\n\n    if (needDir && c === 'FILE')\n      return cb()\n\n    // otherwise we have to stat, because maybe c=true\n    // if we know it exists, but not what it is.\n  }\n\n  var exists\n  var stat = this.statCache[abs]\n  if (stat !== undefined) {\n    if (stat === false)\n      return cb(null, stat)\n    else {\n      var type = stat.isDirectory() ? 'DIR' : 'FILE'\n      if (needDir && type === 'FILE')\n        return cb()\n      else\n        return cb(null, type, stat)\n    }\n  }\n\n  var self = this\n  var statcb = inflight('stat\\0' + abs, lstatcb_)\n  if (statcb)\n    self.fs.lstat(abs, statcb)\n\n  function lstatcb_ (er, lstat) {\n    if (lstat && lstat.isSymbolicLink()) {\n      // If it's a symlink, then treat it as the target, unless\n      // the target does not exist, then treat it as a file.\n      return self.fs.stat(abs, function (er, stat) {\n        if (er)\n          self._stat2(f, abs, null, lstat, cb)\n        else\n          self._stat2(f, abs, er, stat, cb)\n      })\n    } else {\n      self._stat2(f, abs, er, lstat, cb)\n    }\n  }\n}\n\nGlob.prototype._stat2 = function (f, abs, er, stat, cb) {\n  if (er && (er.code === 'ENOENT' || er.code === 'ENOTDIR')) {\n    this.statCache[abs] = false\n    return cb()\n  }\n\n  var needDir = f.slice(-1) === '/'\n  this.statCache[abs] = stat\n\n  if (abs.slice(-1) === '/' && stat && !stat.isDirectory())\n    return cb(null, false, stat)\n\n  var c = true\n  if (stat)\n    c = stat.isDirectory() ? 'DIR' : 'FILE'\n  this.cache[abs] = this.cache[abs] || c\n\n  if (needDir && c === 'FILE')\n    return cb()\n\n  return cb(null, c, stat)\n}\n/LICENSE\u0003The ISC License\n\nCopyright (c) Isaac Z. Schlueter and Contributors\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted, provided that the above\ncopyright notice and this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\nWITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\nANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\nACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR\nIN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n\n## Glob Logo\n\nGlob's logo created by Tanya Brassie <http://tanyabrassie.com/>, licensed\nunder a Creative Commons Attribution-ShareAlike 4.0 International License\nhttps://creativecommons.org/licenses/by-sa/4.0/\n/README.md;# Glob\n\nMatch files using the patterns the shell uses, like stars and stuff.\n\n[![Build Status](https://travis-ci.org/isaacs/node-glob.svg?branch=master)](https://travis-ci.org/isaacs/node-glob/) [![Build Status](https://ci.appveyor.com/api/projects/status/kd7f3yftf7unxlsx?svg=true)](https://ci.appveyor.com/project/isaacs/node-glob) [![Coverage Status](https://coveralls.io/repos/isaacs/node-glob/badge.svg?branch=master&service=github)](https://coveralls.io/github/isaacs/node-glob?branch=master)\n\nThis is a glob implementation in JavaScript.  It uses the `minimatch`\nlibrary to do its matching.\n\n![a fun cartoon logo made of glob characters](logo/glob.png)\n\n## Usage\n\nInstall with npm\n\n```\nnpm i glob\n```\n\n```javascript\nvar glob = require(\"glob\")\n\n// options is optional\nglob(\"**/*.js\", options, function (er, files) {\n  // files is an array of filenames.\n  // If the `nonull` option is set, and nothing\n  // was found, then files is [\"**/*.js\"]\n  // er is an error object or null.\n})\n```\n\n## Glob Primer\n\n\"Globs\" are the patterns you type when you do stuff like `ls *.js` on\nthe command line, or put `build/*` in a `.gitignore` file.\n\nBefore parsing the path part patterns, braced sections are expanded\ninto a set.  Braced sections start with `{` and end with `}`, with any\nnumber of comma-delimited sections within.  Braced sections may contain\nslash characters, so `a{/b/c,bcd}` would expand into `a/b/c` and `abcd`.\n\nThe following characters have special magic meaning when used in a\npath portion:\n\n* `*` Matches 0 or more characters in a single path portion\n* `?` Matches 1 character\n* `[...]` Matches a range of characters, similar to a RegExp range.\n  If the first character of the range is `!` or `^` then it matches\n  any character not in the range.\n* `!(pattern|pattern|pattern)` Matches anything that does not match\n  any of the patterns provided.\n* `?(pattern|pattern|pattern)` Matches zero or one occurrence of the\n  patterns provided.\n* `+(pattern|pattern|pattern)` Matches one or more occurrences of the\n  patterns provided.\n* `*(a|b|c)` Matches zero or more occurrences of the patterns provided\n* `@(pattern|pat*|pat?erN)` Matches exactly one of the patterns\n  provided\n* `**` If a \"globstar\" is alone in a path portion, then it matches\n  zero or more directories and subdirectories searching for matches.\n  It does not crawl symlinked directories.\n\n### Dots\n\nIf a file or directory path portion has a `.` as the first character,\nthen it will not match any glob pattern unless that pattern's\ncorresponding path part also has a `.` as its first character.\n\nFor example, the pattern `a/.*/c` would match the file at `a/.b/c`.\nHowever the pattern `a/*/c` would not, because `*` does not start with\na dot character.\n\nYou can make glob treat dots as normal characters by setting\n`dot:true` in the options.\n\n### Basename Matching\n\nIf you set `matchBase:true` in the options, and the pattern has no\nslashes in it, then it will seek for any file anywhere in the tree\nwith a matching basename.  For example, `*.js` would match\n`test/simple/basic.js`.\n\n### Empty Sets\n\nIf no matching files are found, then an empty array is returned.  This\ndiffers from the shell, where the pattern itself is returned.  For\nexample:\n\n    $ echo a*s*d*f\n    a*s*d*f\n\nTo get the bash-style behavior, set the `nonull:true` in the options.\n\n### See Also:\n\n* `man sh`\n* `man bash` (Search for \"Pattern Matching\")\n* `man 3 fnmatch`\n* `man 5 gitignore`\n* [minimatch documentation](https://github.com/isaacs/minimatch)\n\n## glob.hasMagic(pattern, [options])\n\nReturns `true` if there are any special characters in the pattern, and\n`false` otherwise.\n\nNote that the options affect the results.  If `noext:true` is set in\nthe options object, then `+(a|b)` will not be considered a magic\npattern.  If the pattern has a brace expansion, like `a/{b/c,x/y}`\nthen that is considered magical, unless `nobrace:true` is set in the\noptions.\n\n## glob(pattern, [options], cb)\n\n* `pattern` `{String}` Pattern to be matched\n* `options` `{Object}`\n* `cb` `{Function}`\n  * `err` `{Error | null}`\n  * `matches` `{Array<String>}` filenames found matching the pattern\n\nPerform an asynchronous glob search.\n\n## glob.sync(pattern, [options])\n\n* `pattern` `{String}` Pattern to be matched\n* `options` `{Object}`\n* return: `{Array<String>}` filenames found matching the pattern\n\nPerform a synchronous glob search.\n\n## Class: glob.Glob\n\nCreate a Glob object by instantiating the `glob.Glob` class.\n\n```javascript\nvar Glob = require(\"glob\").Glob\nvar mg = new Glob(pattern, options, cb)\n```\n\nIt's an EventEmitter, and starts walking the filesystem to find matches\nimmediately.\n\n### new glob.Glob(pattern, [options], [cb])\n\n* `pattern` `{String}` pattern to search for\n* `options` `{Object}`\n* `cb` `{Function}` Called when an error occurs, or matches are found\n  * `err` `{Error | null}`\n  * `matches` `{Array<String>}` filenames found matching the pattern\n\nNote that if the `sync` flag is set in the options, then matches will\nbe immediately available on the `g.found` member.\n\n### Properties\n\n* `minimatch` The minimatch object that the glob uses.\n* `options` The options object passed in.\n* `aborted` Boolean which is set to true when calling `abort()`.  There\n  is no way at this time to continue a glob search after aborting, but\n  you can re-use the statCache to avoid having to duplicate syscalls.\n* `cache` Convenience object.  Each field has the following possible\n  values:\n  * `false` - Path does not exist\n  * `true` - Path exists\n  * `'FILE'` - Path exists, and is not a directory\n  * `'DIR'` - Path exists, and is a directory\n  * `[file, entries, ...]` - Path exists, is a directory, and the\n    array value is the results of `fs.readdir`\n* `statCache` Cache of `fs.stat` results, to prevent statting the same\n  path multiple times.\n* `symlinks` A record of which paths are symbolic links, which is\n  relevant in resolving `**` patterns.\n* `realpathCache` An optional object which is passed to `fs.realpath`\n  to minimize unnecessary syscalls.  It is stored on the instantiated\n  Glob object, and may be re-used.\n\n### Events\n\n* `end` When the matching is finished, this is emitted with all the\n  matches found.  If the `nonull` option is set, and no match was found,\n  then the `matches` list contains the original pattern.  The matches\n  are sorted, unless the `nosort` flag is set.\n* `match` Every time a match is found, this is emitted with the specific\n  thing that matched. It is not deduplicated or resolved to a realpath.\n* `error` Emitted when an unexpected error is encountered, or whenever\n  any fs error occurs if `options.strict` is set.\n* `abort` When `abort()` is called, this event is raised.\n\n### Methods\n\n* `pause` Temporarily stop the search\n* `resume` Resume the search\n* `abort` Stop the search forever\n\n### Options\n\nAll the options that can be passed to Minimatch can also be passed to\nGlob to change pattern matching behavior.  Also, some have been added,\nor have glob-specific ramifications.\n\nAll options are false by default, unless otherwise noted.\n\nAll options are added to the Glob object, as well.\n\nIf you are running many `glob` operations, you can pass a Glob object\nas the `options` argument to a subsequent operation to shortcut some\n`stat` and `readdir` calls.  At the very least, you may pass in shared\n`symlinks`, `statCache`, `realpathCache`, and `cache` options, so that\nparallel glob operations will be sped up by sharing information about\nthe filesystem.\n\n* `cwd` The current working directory in which to search.  Defaults\n  to `process.cwd()`.\n* `root` The place where patterns starting with `/` will be mounted\n  onto.  Defaults to `path.resolve(options.cwd, \"/\")` (`/` on Unix\n  systems, and `C:\\` or some such on Windows.)\n* `dot` Include `.dot` files in normal matches and `globstar` matches.\n  Note that an explicit dot in a portion of the pattern will always\n  match dot files.\n* `nomount` By default, a pattern starting with a forward-slash will be\n  \"mounted\" onto the root setting, so that a valid filesystem path is\n  returned.  Set this flag to disable that behavior.\n* `mark` Add a `/` character to directory matches.  Note that this\n  requires additional stat calls.\n* `nosort` Don't sort the results.\n* `stat` Set to true to stat *all* results.  This reduces performance\n  somewhat, and is completely unnecessary, unless `readdir` is presumed\n  to be an untrustworthy indicator of file existence.\n* `silent` When an unusual error is encountered when attempting to\n  read a directory, a warning will be printed to stderr.  Set the\n  `silent` option to true to suppress these warnings.\n* `strict` When an unusual error is encountered when attempting to\n  read a directory, the process will just continue on in search of\n  other matches.  Set the `strict` option to raise an error in these\n  cases.\n* `cache` See `cache` property above.  Pass in a previously generated\n  cache object to save some fs calls.\n* `statCache` A cache of results of filesystem information, to prevent\n  unnecessary stat calls.  While it should not normally be necessary\n  to set this, you may pass the statCache from one glob() call to the\n  options object of another, if you know that the filesystem will not\n  change between calls.  (See \"Race Conditions\" below.)\n* `symlinks` A cache of known symbolic links.  You may pass in a\n  previously generated `symlinks` object to save `lstat` calls when\n  resolving `**` matches.\n* `sync` DEPRECATED: use `glob.sync(pattern, opts)` instead.\n* `nounique` In some cases, brace-expanded patterns can result in the\n  same file showing up multiple times in the result set.  By default,\n  this implementation prevents duplicates in the result set.  Set this\n  flag to disable that behavior.\n* `nonull` Set to never return an empty set, instead returning a set\n  containing the pattern itself.  This is the default in glob(3).\n* `debug` Set to enable debug logging in minimatch and glob.\n* `nobrace` Do not expand `{a,b}` and `{1..3}` brace sets.\n* `noglobstar` Do not match `**` against multiple filenames.  (Ie,\n  treat it as a normal `*` instead.)\n* `noext` Do not match `+(a|b)` \"extglob\" patterns.\n* `nocase` Perform a case-insensitive match.  Note: on\n  case-insensitive filesystems, non-magic patterns will match by\n  default, since `stat` and `readdir` will not raise errors.\n* `matchBase` Perform a basename-only match if the pattern does not\n  contain any slash characters.  That is, `*.js` would be treated as\n  equivalent to `**/*.js`, matching all js files in all directories.\n* `nodir` Do not match directories, only files.  (Note: to match\n  *only* directories, simply put a `/` at the end of the pattern.)\n* `ignore` Add a pattern or an array of glob patterns to exclude matches.\n  Note: `ignore` patterns are *always* in `dot:true` mode, regardless\n  of any other settings.\n* `follow` Follow symlinked directories when expanding `**` patterns.\n  Note that this can result in a lot of duplicate references in the\n  presence of cyclic links.\n* `realpath` Set to true to call `fs.realpath` on all of the results.\n  In the case of a symlink that cannot be resolved, the full absolute\n  path to the matched entry is returned (though it will usually be a\n  broken symlink)\n* `absolute` Set to true to always receive absolute paths for matched\n  files.  Unlike `realpath`, this also affects the values returned in\n  the `match` event.\n* `fs` File-system object with Node's `fs` API. By default, the built-in\n  `fs` module will be used. Set to a volume provided by a library like\n  `memfs` to avoid using the \"real\" file-system.\n\n## Comparisons to other fnmatch/glob implementations\n\nWhile strict compliance with the existing standards is a worthwhile\ngoal, some discrepancies exist between node-glob and other\nimplementations, and are intentional.\n\nThe double-star character `**` is supported by default, unless the\n`noglobstar` flag is set.  This is supported in the manner of bsdglob\nand bash 4.3, where `**` only has special significance if it is the only\nthing in a path part.  That is, `a/**/b` will match `a/x/y/b`, but\n`a/**b` will not.\n\nNote that symlinked directories are not crawled as part of a `**`,\nthough their contents may match against subsequent portions of the\npattern.  This prevents infinite loops and duplicates and the like.\n\nIf an escaped pattern has no matches, and the `nonull` flag is set,\nthen glob returns the pattern as-provided, rather than\ninterpreting the character escapes.  For example,\n`glob.match([], \"\\\\*a\\\\?\")` will return `\"\\\\*a\\\\?\"` rather than\n`\"*a?\"`.  This is akin to setting the `nullglob` option in bash, except\nthat it does not resolve escaped pattern characters.\n\nIf brace expansion is not disabled, then it is performed before any\nother interpretation of the glob pattern.  Thus, a pattern like\n`+(a|{b),c)}`, which would not be valid in bash or zsh, is expanded\n**first** into the set of `+(a|b)` and `+(a|c)`, and those patterns are\nchecked for validity.  Since those two are valid, matching proceeds.\n\n### Comments and Negation\n\nPreviously, this module let you mark a pattern as a \"comment\" if it\nstarted with a `#` character, or a \"negated\" pattern if it started\nwith a `!` character.\n\nThese options were deprecated in version 5, and removed in version 6.\n\nTo specify things that should not match, use the `ignore` option.\n\n## Windows\n\n**Please only use forward-slashes in glob expressions.**\n\nThough windows uses either `/` or `\\` as its path separator, only `/`\ncharacters are used by this glob implementation.  You must use\nforward-slashes **only** in glob expressions.  Back-slashes will always\nbe interpreted as escape characters, not path separators.\n\nResults from absolute patterns such as `/foo/*` are mounted onto the\nroot setting using `path.join`.  On windows, this will by default result\nin `/foo/*` matching `C:\\foo\\bar.txt`.\n\n## Race Conditions\n\nGlob searching, by its very nature, is susceptible to race conditions,\nsince it relies on directory walking and such.\n\nAs a result, it is possible that a file that exists when glob looks for\nit may have been deleted or modified by the time it returns the result.\n\nAs part of its internal implementation, this program caches all stat\nand readdir calls that it makes, in order to cut down on system\noverhead.  However, this also makes it even more susceptible to races,\nespecially if the cache or statCache objects are reused between glob\ncalls.\n\nUsers are thus advised not to use a glob result as a guarantee of\nfilesystem state in the face of rapid changes.  For the vast majority\nof operations, this is never a problem.\n\n## Glob Logo\nGlob's logo was created by [Tanya Brassie](http://tanyabrassie.com/). Logo files can be found [here](https://github.com/isaacs/node-glob/tree/master/logo).\n\nThe logo is licensed under a [Creative Commons Attribution-ShareAlike 4.0 International License](https://creativecommons.org/licenses/by-sa/4.0/).\n\n## Contributing\n\nAny change to behavior (including bugfixes) must come with a test.\n\nPatches that fail tests or reduce performance will be rejected.\n\n```\n# to run tests\nnpm test\n\n# to re-generate test fixtures\nnpm run test-regen\n\n# to benchmark against bash/zsh\nnpm run bench\n\n# to profile javascript\nnpm run prof\n```\n\n![](oh-my-glob.gif)\n/common.js\u0018\u0005exports.setopts = setopts\nexports.ownProp = ownProp\nexports.makeAbs = makeAbs\nexports.finish = finish\nexports.mark = mark\nexports.isIgnored = isIgnored\nexports.childrenIgnored = childrenIgnored\n\nfunction ownProp (obj, field) {\n  return Object.prototype.hasOwnProperty.call(obj, field)\n}\n\nvar fs = require(\"fs\")\nvar path = require(\"path\")\nvar minimatch = require(\"minimatch\")\nvar isAbsolute = require(\"path-is-absolute\")\nvar Minimatch = minimatch.Minimatch\n\nfunction alphasort (a, b) {\n  return a.localeCompare(b, 'en')\n}\n\nfunction setupIgnores (self, options) {\n  self.ignore = options.ignore || []\n\n  if (!Array.isArray(self.ignore))\n    self.ignore = [self.ignore]\n\n  if (self.ignore.length) {\n    self.ignore = self.ignore.map(ignoreMap)\n  }\n}\n\n// ignore patterns are always in dot:true mode.\nfunction ignoreMap (pattern) {\n  var gmatcher = null\n  if (pattern.slice(-3) === '/**') {\n    var gpattern = pattern.replace(/(\\/\\*\\*)+$/, '')\n    gmatcher = new Minimatch(gpattern, { dot: true })\n  }\n\n  return {\n    matcher: new Minimatch(pattern, { dot: true }),\n    gmatcher: gmatcher\n  }\n}\n\nfunction setopts (self, pattern, options) {\n  if (!options)\n    options = {}\n\n  // base-matching: just use globstar for that.\n  if (options.matchBase && -1 === pattern.indexOf(\"/\")) {\n    if (options.noglobstar) {\n      throw new Error(\"base matching requires globstar\")\n    }\n    pattern = \"**/\" + pattern\n  }\n\n  self.silent = !!options.silent\n  self.pattern = pattern\n  self.strict = options.strict !== false\n  self.realpath = !!options.realpath\n  self.realpathCache = options.realpathCache || Object.create(null)\n  self.follow = !!options.follow\n  self.dot = !!options.dot\n  self.mark = !!options.mark\n  self.nodir = !!options.nodir\n  if (self.nodir)\n    self.mark = true\n  self.sync = !!options.sync\n  self.nounique = !!options.nounique\n  self.nonull = !!options.nonull\n  self.nosort = !!options.nosort\n  self.nocase = !!options.nocase\n  self.stat = !!options.stat\n  self.noprocess = !!options.noprocess\n  self.absolute = !!options.absolute\n  self.fs = options.fs || fs\n\n  self.maxLength = options.maxLength || Infinity\n  self.cache = options.cache || Object.create(null)\n  self.statCache = options.statCache || Object.create(null)\n  self.symlinks = options.symlinks || Object.create(null)\n\n  setupIgnores(self, options)\n\n  self.changedCwd = false\n  var cwd = process.cwd()\n  if (!ownProp(options, \"cwd\"))\n    self.cwd = cwd\n  else {\n    self.cwd = path.resolve(options.cwd)\n    self.changedCwd = self.cwd !== cwd\n  }\n\n  self.root = options.root || path.resolve(self.cwd, \"/\")\n  self.root = path.resolve(self.root)\n  if (process.platform === \"win32\")\n    self.root = self.root.replace(/\\\\/g, \"/\")\n\n  // TODO: is an absolute `cwd` supposed to be resolved against `root`?\n  // e.g. { cwd: '/test', root: __dirname } === path.join(__dirname, '/test')\n  self.cwdAbs = isAbsolute(self.cwd) ? self.cwd : makeAbs(self, self.cwd)\n  if (process.platform === \"win32\")\n    self.cwdAbs = self.cwdAbs.replace(/\\\\/g, \"/\")\n  self.nomount = !!options.nomount\n\n  // disable comments and negation in Minimatch.\n  // Note that they are not supported in Glob itself anyway.\n  options.nonegate = true\n  options.nocomment = true\n  // always treat \\ in patterns as escapes, not path separators\n  options.allowWindowsEscape = false\n\n  self.minimatch = new Minimatch(pattern, options)\n  self.options = self.minimatch.options\n}\n\nfunction finish (self) {\n  var nou = self.nounique\n  var all = nou ? [] : Object.create(null)\n\n  for (var i = 0, l = self.matches.length; i < l; i ++) {\n    var matches = self.matches[i]\n    if (!matches || Object.keys(matches).length === 0) {\n      if (self.nonull) {\n        // do like the shell, and spit out the literal glob\n        var literal = self.minimatch.globSet[i]\n        if (nou)\n          all.push(literal)\n        else\n          all[literal] = true\n      }\n    } else {\n      // had matches\n      var m = Object.keys(matches)\n      if (nou)\n        all.push.apply(all, m)\n      else\n        m.forEach(function (m) {\n          all[m] = true\n        })\n    }\n  }\n\n  if (!nou)\n    all = Object.keys(all)\n\n  if (!self.nosort)\n    all = all.sort(alphasort)\n\n  // at *some* point we statted all of these\n  if (self.mark) {\n    for (var i = 0; i < all.length; i++) {\n      all[i] = self._mark(all[i])\n    }\n    if (self.nodir) {\n      all = all.filter(function (e) {\n        var notDir = !(/\\/$/.test(e))\n        var c = self.cache[e] || self.cache[makeAbs(self, e)]\n        if (notDir && c)\n          notDir = c !== 'DIR' && !Array.isArray(c)\n        return notDir\n      })\n    }\n  }\n\n  if (self.ignore.length)\n    all = all.filter(function(m) {\n      return !isIgnored(self, m)\n    })\n\n  self.found = all\n}\n\nfunction mark (self, p) {\n  var abs = makeAbs(self, p)\n  var c = self.cache[abs]\n  var m = p\n  if (c) {\n    var isDir = c === 'DIR' || Array.isArray(c)\n    var slash = p.slice(-1) === '/'\n\n    if (isDir && !slash)\n      m += '/'\n    else if (!isDir && slash)\n      m = m.slice(0, -1)\n\n    if (m !== p) {\n      var mabs = makeAbs(self, m)\n      self.statCache[mabs] = self.statCache[abs]\n      self.cache[mabs] = self.cache[abs]\n    }\n  }\n\n  return m\n}\n\n// lotta situps...\nfunction makeAbs (self, f) {\n  var abs = f\n  if (f.charAt(0) === '/') {\n    abs = path.join(self.root, f)\n  } else if (isAbsolute(f) || f === '') {\n    abs = f\n  } else if (self.changedCwd) {\n    abs = path.resolve(self.cwd, f)\n  } else {\n    abs = path.resolve(f)\n  }\n\n  if (process.platform === 'win32')\n    abs = abs.replace(/\\\\/g, '/')\n\n  return abs\n}\n\n\n// Return true, if pattern ends with globstar '**', for the accompanying parent directory.\n// Ex:- If node_modules/** is the pattern, add 'node_modules' to ignore list along with it's contents\nfunction isIgnored (self, path) {\n  if (!self.ignore.length)\n    return false\n\n  return self.ignore.some(function(item) {\n    return item.matcher.match(path) || !!(item.gmatcher && item.gmatcher.match(path))\n  })\n}\n\nfunction childrenIgnored (self, path) {\n  if (!self.ignore.length)\n    return false\n\n  return self.ignore.some(function(item) {\n    return !!(item.gmatcher && item.gmatcher.match(path))\n  })\n}\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/Z2xvYmFsc0AxMS45LjA=",
    "content": "/globals.jsonŇ\u0014{\n\t\"builtin\": {\n\t\t\"Array\": false,\n\t\t\"ArrayBuffer\": false,\n\t\t\"Atomics\": false,\n\t\t\"BigInt\": false,\n\t\t\"BigInt64Array\": false,\n\t\t\"BigUint64Array\": false,\n\t\t\"Boolean\": false,\n\t\t\"constructor\": false,\n\t\t\"DataView\": false,\n\t\t\"Date\": false,\n\t\t\"decodeURI\": false,\n\t\t\"decodeURIComponent\": false,\n\t\t\"encodeURI\": false,\n\t\t\"encodeURIComponent\": false,\n\t\t\"Error\": false,\n\t\t\"escape\": false,\n\t\t\"eval\": false,\n\t\t\"EvalError\": false,\n\t\t\"Float32Array\": false,\n\t\t\"Float64Array\": false,\n\t\t\"Function\": false,\n\t\t\"hasOwnProperty\": false,\n\t\t\"Infinity\": false,\n\t\t\"Int16Array\": false,\n\t\t\"Int32Array\": false,\n\t\t\"Int8Array\": false,\n\t\t\"isFinite\": false,\n\t\t\"isNaN\": false,\n\t\t\"isPrototypeOf\": false,\n\t\t\"JSON\": false,\n\t\t\"Map\": false,\n\t\t\"Math\": false,\n\t\t\"NaN\": false,\n\t\t\"Number\": false,\n\t\t\"Object\": false,\n\t\t\"parseFloat\": false,\n\t\t\"parseInt\": false,\n\t\t\"Promise\": false,\n\t\t\"propertyIsEnumerable\": false,\n\t\t\"Proxy\": false,\n\t\t\"RangeError\": false,\n\t\t\"ReferenceError\": false,\n\t\t\"Reflect\": false,\n\t\t\"RegExp\": false,\n\t\t\"Set\": false,\n\t\t\"SharedArrayBuffer\": false,\n\t\t\"String\": false,\n\t\t\"Symbol\": false,\n\t\t\"SyntaxError\": false,\n\t\t\"toLocaleString\": false,\n\t\t\"toString\": false,\n\t\t\"TypeError\": false,\n\t\t\"Uint16Array\": false,\n\t\t\"Uint32Array\": false,\n\t\t\"Uint8Array\": false,\n\t\t\"Uint8ClampedArray\": false,\n\t\t\"undefined\": false,\n\t\t\"unescape\": false,\n\t\t\"URIError\": false,\n\t\t\"valueOf\": false,\n\t\t\"WeakMap\": false,\n\t\t\"WeakSet\": false\n\t},\n\t\"es5\": {\n\t\t\"Array\": false,\n\t\t\"Boolean\": false,\n\t\t\"constructor\": false,\n\t\t\"Date\": false,\n\t\t\"decodeURI\": false,\n\t\t\"decodeURIComponent\": false,\n\t\t\"encodeURI\": false,\n\t\t\"encodeURIComponent\": false,\n\t\t\"Error\": false,\n\t\t\"escape\": false,\n\t\t\"eval\": false,\n\t\t\"EvalError\": false,\n\t\t\"Function\": false,\n\t\t\"hasOwnProperty\": false,\n\t\t\"Infinity\": false,\n\t\t\"isFinite\": false,\n\t\t\"isNaN\": false,\n\t\t\"isPrototypeOf\": false,\n\t\t\"JSON\": false,\n\t\t\"Math\": false,\n\t\t\"NaN\": false,\n\t\t\"Number\": false,\n\t\t\"Object\": false,\n\t\t\"parseFloat\": false,\n\t\t\"parseInt\": false,\n\t\t\"propertyIsEnumerable\": false,\n\t\t\"RangeError\": false,\n\t\t\"ReferenceError\": false,\n\t\t\"RegExp\": false,\n\t\t\"String\": false,\n\t\t\"SyntaxError\": false,\n\t\t\"toLocaleString\": false,\n\t\t\"toString\": false,\n\t\t\"TypeError\": false,\n\t\t\"undefined\": false,\n\t\t\"unescape\": false,\n\t\t\"URIError\": false,\n\t\t\"valueOf\": false\n\t},\n\t\"es2015\": {\n\t\t\"Array\": false,\n\t\t\"ArrayBuffer\": false,\n\t\t\"Boolean\": false,\n\t\t\"constructor\": false,\n\t\t\"DataView\": false,\n\t\t\"Date\": false,\n\t\t\"decodeURI\": false,\n\t\t\"decodeURIComponent\": false,\n\t\t\"encodeURI\": false,\n\t\t\"encodeURIComponent\": false,\n\t\t\"Error\": false,\n\t\t\"escape\": false,\n\t\t\"eval\": false,\n\t\t\"EvalError\": false,\n\t\t\"Float32Array\": false,\n\t\t\"Float64Array\": false,\n\t\t\"Function\": false,\n\t\t\"hasOwnProperty\": false,\n\t\t\"Infinity\": false,\n\t\t\"Int16Array\": false,\n\t\t\"Int32Array\": false,\n\t\t\"Int8Array\": false,\n\t\t\"isFinite\": false,\n\t\t\"isNaN\": false,\n\t\t\"isPrototypeOf\": false,\n\t\t\"JSON\": false,\n\t\t\"Map\": false,\n\t\t\"Math\": false,\n\t\t\"NaN\": false,\n\t\t\"Number\": false,\n\t\t\"Object\": false,\n\t\t\"parseFloat\": false,\n\t\t\"parseInt\": false,\n\t\t\"Promise\": false,\n\t\t\"propertyIsEnumerable\": false,\n\t\t\"Proxy\": false,\n\t\t\"RangeError\": false,\n\t\t\"ReferenceError\": false,\n\t\t\"Reflect\": false,\n\t\t\"RegExp\": false,\n\t\t\"Set\": false,\n\t\t\"String\": false,\n\t\t\"Symbol\": false,\n\t\t\"SyntaxError\": false,\n\t\t\"toLocaleString\": false,\n\t\t\"toString\": false,\n\t\t\"TypeError\": false,\n\t\t\"Uint16Array\": false,\n\t\t\"Uint32Array\": false,\n\t\t\"Uint8Array\": false,\n\t\t\"Uint8ClampedArray\": false,\n\t\t\"undefined\": false,\n\t\t\"unescape\": false,\n\t\t\"URIError\": false,\n\t\t\"valueOf\": false,\n\t\t\"WeakMap\": false,\n\t\t\"WeakSet\": false\n\t},\n\t\"es2017\": {\n\t\t\"Array\": false,\n\t\t\"ArrayBuffer\": false,\n\t\t\"Atomics\": false,\n\t\t\"Boolean\": false,\n\t\t\"constructor\": false,\n\t\t\"DataView\": false,\n\t\t\"Date\": false,\n\t\t\"decodeURI\": false,\n\t\t\"decodeURIComponent\": false,\n\t\t\"encodeURI\": false,\n\t\t\"encodeURIComponent\": false,\n\t\t\"Error\": false,\n\t\t\"escape\": false,\n\t\t\"eval\": false,\n\t\t\"EvalError\": false,\n\t\t\"Float32Array\": false,\n\t\t\"Float64Array\": false,\n\t\t\"Function\": false,\n\t\t\"hasOwnProperty\": false,\n\t\t\"Infinity\": false,\n\t\t\"Int16Array\": false,\n\t\t\"Int32Array\": false,\n\t\t\"Int8Array\": false,\n\t\t\"isFinite\": false,\n\t\t\"isNaN\": false,\n\t\t\"isPrototypeOf\": false,\n\t\t\"JSON\": false,\n\t\t\"Map\": false,\n\t\t\"Math\": false,\n\t\t\"NaN\": false,\n\t\t\"Number\": false,\n\t\t\"Object\": false,\n\t\t\"parseFloat\": false,\n\t\t\"parseInt\": false,\n\t\t\"Promise\": false,\n\t\t\"propertyIsEnumerable\": false,\n\t\t\"Proxy\": false,\n\t\t\"RangeError\": false,\n\t\t\"ReferenceError\": false,\n\t\t\"Reflect\": false,\n\t\t\"RegExp\": false,\n\t\t\"Set\": false,\n\t\t\"SharedArrayBuffer\": false,\n\t\t\"String\": false,\n\t\t\"Symbol\": false,\n\t\t\"SyntaxError\": false,\n\t\t\"toLocaleString\": false,\n\t\t\"toString\": false,\n\t\t\"TypeError\": false,\n\t\t\"Uint16Array\": false,\n\t\t\"Uint32Array\": false,\n\t\t\"Uint8Array\": false,\n\t\t\"Uint8ClampedArray\": false,\n\t\t\"undefined\": false,\n\t\t\"unescape\": false,\n\t\t\"URIError\": false,\n\t\t\"valueOf\": false,\n\t\t\"WeakMap\": false,\n\t\t\"WeakSet\": false\n\t},\n\t\"browser\": {\n\t\t\"AbortController\": false,\n\t\t\"AbortSignal\": false,\n\t\t\"addEventListener\": false,\n\t\t\"alert\": false,\n\t\t\"AnalyserNode\": false,\n\t\t\"Animation\": false,\n\t\t\"AnimationEffectReadOnly\": false,\n\t\t\"AnimationEffectTiming\": false,\n\t\t\"AnimationEffectTimingReadOnly\": false,\n\t\t\"AnimationEvent\": false,\n\t\t\"AnimationPlaybackEvent\": false,\n\t\t\"AnimationTimeline\": false,\n\t\t\"applicationCache\": false,\n\t\t\"ApplicationCache\": false,\n\t\t\"ApplicationCacheErrorEvent\": false,\n\t\t\"atob\": false,\n\t\t\"Attr\": false,\n\t\t\"Audio\": false,\n\t\t\"AudioBuffer\": false,\n\t\t\"AudioBufferSourceNode\": false,\n\t\t\"AudioContext\": false,\n\t\t\"AudioDestinationNode\": false,\n\t\t\"AudioListener\": false,\n\t\t\"AudioNode\": false,\n\t\t\"AudioParam\": false,\n\t\t\"AudioProcessingEvent\": false,\n\t\t\"AudioScheduledSourceNode\": false,\n\t\t\"AudioWorkletGlobalScope \": false,\n\t\t\"AudioWorkletNode\": false,\n\t\t\"AudioWorkletProcessor\": false,\n\t\t\"BarProp\": false,\n\t\t\"BaseAudioContext\": false,\n\t\t\"BatteryManager\": false,\n\t\t\"BeforeUnloadEvent\": false,\n\t\t\"BiquadFilterNode\": false,\n\t\t\"Blob\": false,\n\t\t\"BlobEvent\": false,\n\t\t\"blur\": false,\n\t\t\"BroadcastChannel\": false,\n\t\t\"btoa\": false,\n\t\t\"BudgetService\": false,\n\t\t\"ByteLengthQueuingStrategy\": false,\n\t\t\"Cache\": false,\n\t\t\"caches\": false,\n\t\t\"CacheStorage\": false,\n\t\t\"cancelAnimationFrame\": false,\n\t\t\"cancelIdleCallback\": false,\n\t\t\"CanvasCaptureMediaStreamTrack\": false,\n\t\t\"CanvasGradient\": false,\n\t\t\"CanvasPattern\": false,\n\t\t\"CanvasRenderingContext2D\": false,\n\t\t\"ChannelMergerNode\": false,\n\t\t\"ChannelSplitterNode\": false,\n\t\t\"CharacterData\": false,\n\t\t\"clearInterval\": false,\n\t\t\"clearTimeout\": false,\n\t\t\"clientInformation\": false,\n\t\t\"ClipboardEvent\": false,\n\t\t\"close\": false,\n\t\t\"closed\": false,\n\t\t\"CloseEvent\": false,\n\t\t\"Comment\": false,\n\t\t\"CompositionEvent\": false,\n\t\t\"confirm\": false,\n\t\t\"console\": false,\n\t\t\"ConstantSourceNode\": false,\n\t\t\"ConvolverNode\": false,\n\t\t\"CountQueuingStrategy\": false,\n\t\t\"createImageBitmap\": false,\n\t\t\"Credential\": false,\n\t\t\"CredentialsContainer\": false,\n\t\t\"crypto\": false,\n\t\t\"Crypto\": false,\n\t\t\"CryptoKey\": false,\n\t\t\"CSS\": false,\n\t\t\"CSSConditionRule\": false,\n\t\t\"CSSFontFaceRule\": false,\n\t\t\"CSSGroupingRule\": false,\n\t\t\"CSSImportRule\": false,\n\t\t\"CSSKeyframeRule\": false,\n\t\t\"CSSKeyframesRule\": false,\n\t\t\"CSSMediaRule\": false,\n\t\t\"CSSNamespaceRule\": false,\n\t\t\"CSSPageRule\": false,\n\t\t\"CSSRule\": false,\n\t\t\"CSSRuleList\": false,\n\t\t\"CSSStyleDeclaration\": false,\n\t\t\"CSSStyleRule\": false,\n\t\t\"CSSStyleSheet\": false,\n\t\t\"CSSSupportsRule\": false,\n\t\t\"CustomElementRegistry\": false,\n\t\t\"customElements\": false,\n\t\t\"CustomEvent\": false,\n\t\t\"DataTransfer\": false,\n\t\t\"DataTransferItem\": false,\n\t\t\"DataTransferItemList\": false,\n\t\t\"defaultstatus\": false,\n\t\t\"defaultStatus\": false,\n\t\t\"DelayNode\": false,\n\t\t\"DeviceMotionEvent\": false,\n\t\t\"DeviceOrientationEvent\": false,\n\t\t\"devicePixelRatio\": false,\n\t\t\"dispatchEvent\": false,\n\t\t\"document\": false,\n\t\t\"Document\": false,\n\t\t\"DocumentFragment\": false,\n\t\t\"DocumentType\": false,\n\t\t\"DOMError\": false,\n\t\t\"DOMException\": false,\n\t\t\"DOMImplementation\": false,\n\t\t\"DOMMatrix\": false,\n\t\t\"DOMMatrixReadOnly\": false,\n\t\t\"DOMParser\": false,\n\t\t\"DOMPoint\": false,\n\t\t\"DOMPointReadOnly\": false,\n\t\t\"DOMQuad\": false,\n\t\t\"DOMRect\": false,\n\t\t\"DOMRectReadOnly\": false,\n\t\t\"DOMStringList\": false,\n\t\t\"DOMStringMap\": false,\n\t\t\"DOMTokenList\": false,\n\t\t\"DragEvent\": false,\n\t\t\"DynamicsCompressorNode\": false,\n\t\t\"Element\": false,\n\t\t\"ErrorEvent\": false,\n\t\t\"event\": false,\n\t\t\"Event\": false,\n\t\t\"EventSource\": false,\n\t\t\"EventTarget\": false,\n\t\t\"external\": false,\n\t\t\"fetch\": false,\n\t\t\"File\": false,\n\t\t\"FileList\": false,\n\t\t\"FileReader\": false,\n\t\t\"find\": false,\n\t\t\"focus\": false,\n\t\t\"FocusEvent\": false,\n\t\t\"FontFace\": false,\n\t\t\"FontFaceSetLoadEvent\": false,\n\t\t\"FormData\": false,\n\t\t\"frameElement\": false,\n\t\t\"frames\": false,\n\t\t\"GainNode\": false,\n\t\t\"Gamepad\": false,\n\t\t\"GamepadButton\": false,\n\t\t\"GamepadEvent\": false,\n\t\t\"getComputedStyle\": false,\n\t\t\"getSelection\": false,\n\t\t\"HashChangeEvent\": false,\n\t\t\"Headers\": false,\n\t\t\"history\": false,\n\t\t\"History\": false,\n\t\t\"HTMLAllCollection\": false,\n\t\t\"HTMLAnchorElement\": false,\n\t\t\"HTMLAreaElement\": false,\n\t\t\"HTMLAudioElement\": false,\n\t\t\"HTMLBaseElement\": false,\n\t\t\"HTMLBodyElement\": false,\n\t\t\"HTMLBRElement\": false,\n\t\t\"HTMLButtonElement\": false,\n\t\t\"HTMLCanvasElement\": false,\n\t\t\"HTMLCollection\": false,\n\t\t\"HTMLContentElement\": false,\n\t\t\"HTMLDataElement\": false,\n\t\t\"HTMLDataListElement\": false,\n\t\t\"HTMLDetailsElement\": false,\n\t\t\"HTMLDialogElement\": false,\n\t\t\"HTMLDirectoryElement\": false,\n\t\t\"HTMLDivElement\": false,\n\t\t\"HTMLDListElement\": false,\n\t\t\"HTMLDocument\": false,\n\t\t\"HTMLElement\": false,\n\t\t\"HTMLEmbedElement\": false,\n\t\t\"HTMLFieldSetElement\": false,\n\t\t\"HTMLFontElement\": false,\n\t\t\"HTMLFormControlsCollection\": false,\n\t\t\"HTMLFormElement\": false,\n\t\t\"HTMLFrameElement\": false,\n\t\t\"HTMLFrameSetElement\": false,\n\t\t\"HTMLHeadElement\": false,\n\t\t\"HTMLHeadingElement\": false,\n\t\t\"HTMLHRElement\": false,\n\t\t\"HTMLHtmlElement\": false,\n\t\t\"HTMLIFrameElement\": false,\n\t\t\"HTMLImageElement\": false,\n\t\t\"HTMLInputElement\": false,\n\t\t\"HTMLLabelElement\": false,\n\t\t\"HTMLLegendElement\": false,\n\t\t\"HTMLLIElement\": false,\n\t\t\"HTMLLinkElement\": false,\n\t\t\"HTMLMapElement\": false,\n\t\t\"HTMLMarqueeElement\": false,\n\t\t\"HTMLMediaElement\": false,\n\t\t\"HTMLMenuElement\": false,\n\t\t\"HTMLMetaElement\": false,\n\t\t\"HTMLMeterElement\": false,\n\t\t\"HTMLModElement\": false,\n\t\t\"HTMLObjectElement\": false,\n\t\t\"HTMLOListElement\": false,\n\t\t\"HTMLOptGroupElement\": false,\n\t\t\"HTMLOptionElement\": false,\n\t\t\"HTMLOptionsCollection\": false,\n\t\t\"HTMLOutputElement\": false,\n\t\t\"HTMLParagraphElement\": false,\n\t\t\"HTMLParamElement\": false,\n\t\t\"HTMLPictureElement\": false,\n\t\t\"HTMLPreElement\": false,\n\t\t\"HTMLProgressElement\": false,\n\t\t\"HTMLQuoteElement\": false,\n\t\t\"HTMLScriptElement\": false,\n\t\t\"HTMLSelectElement\": false,\n\t\t\"HTMLShadowElement\": false,\n\t\t\"HTMLSlotElement\": false,\n\t\t\"HTMLSourceElement\": false,\n\t\t\"HTMLSpanElement\": false,\n\t\t\"HTMLStyleElement\": false,\n\t\t\"HTMLTableCaptionElement\": false,\n\t\t\"HTMLTableCellElement\": false,\n\t\t\"HTMLTableColElement\": false,\n\t\t\"HTMLTableElement\": false,\n\t\t\"HTMLTableRowElement\": false,\n\t\t\"HTMLTableSectionElement\": false,\n\t\t\"HTMLTemplateElement\": false,\n\t\t\"HTMLTextAreaElement\": false,\n\t\t\"HTMLTimeElement\": false,\n\t\t\"HTMLTitleElement\": false,\n\t\t\"HTMLTrackElement\": false,\n\t\t\"HTMLUListElement\": false,\n\t\t\"HTMLUnknownElement\": false,\n\t\t\"HTMLVideoElement\": false,\n\t\t\"IDBCursor\": false,\n\t\t\"IDBCursorWithValue\": false,\n\t\t\"IDBDatabase\": false,\n\t\t\"IDBFactory\": false,\n\t\t\"IDBIndex\": false,\n\t\t\"IDBKeyRange\": false,\n\t\t\"IDBObjectStore\": false,\n\t\t\"IDBOpenDBRequest\": false,\n\t\t\"IDBRequest\": false,\n\t\t\"IDBTransaction\": false,\n\t\t\"IDBVersionChangeEvent\": false,\n\t\t\"IdleDeadline\": false,\n\t\t\"IIRFilterNode\": false,\n\t\t\"Image\": false,\n\t\t\"ImageBitmap\": false,\n\t\t\"ImageBitmapRenderingContext\": false,\n\t\t\"ImageCapture\": false,\n\t\t\"ImageData\": false,\n\t\t\"indexedDB\": false,\n\t\t\"innerHeight\": false,\n\t\t\"innerWidth\": false,\n\t\t\"InputEvent\": false,\n\t\t\"IntersectionObserver\": false,\n\t\t\"IntersectionObserverEntry\": false,\n\t\t\"Intl\": false,\n\t\t\"isSecureContext\": false,\n\t\t\"KeyboardEvent\": false,\n\t\t\"KeyframeEffect\": false,\n\t\t\"KeyframeEffectReadOnly\": false,\n\t\t\"length\": false,\n\t\t\"localStorage\": false,\n\t\t\"location\": false,\n\t\t\"Location\": false,\n\t\t\"locationbar\": false,\n\t\t\"matchMedia\": false,\n\t\t\"MediaDeviceInfo\": false,\n\t\t\"MediaDevices\": false,\n\t\t\"MediaElementAudioSourceNode\": false,\n\t\t\"MediaEncryptedEvent\": false,\n\t\t\"MediaError\": false,\n\t\t\"MediaKeyMessageEvent\": false,\n\t\t\"MediaKeySession\": false,\n\t\t\"MediaKeyStatusMap\": false,\n\t\t\"MediaKeySystemAccess\": false,\n\t\t\"MediaList\": false,\n\t\t\"MediaQueryList\": false,\n\t\t\"MediaQueryListEvent\": false,\n\t\t\"MediaRecorder\": false,\n\t\t\"MediaSettingsRange\": false,\n\t\t\"MediaSource\": false,\n\t\t\"MediaStream\": false,\n\t\t\"MediaStreamAudioDestinationNode\": false,\n\t\t\"MediaStreamAudioSourceNode\": false,\n\t\t\"MediaStreamEvent\": false,\n\t\t\"MediaStreamTrack\": false,\n\t\t\"MediaStreamTrackEvent\": false,\n\t\t\"menubar\": false,\n\t\t\"MessageChannel\": false,\n\t\t\"MessageEvent\": false,\n\t\t\"MessagePort\": false,\n\t\t\"MIDIAccess\": false,\n\t\t\"MIDIConnectionEvent\": false,\n\t\t\"MIDIInput\": false,\n\t\t\"MIDIInputMap\": false,\n\t\t\"MIDIMessageEvent\": false,\n\t\t\"MIDIOutput\": false,\n\t\t\"MIDIOutputMap\": false,\n\t\t\"MIDIPort\": false,\n\t\t\"MimeType\": false,\n\t\t\"MimeTypeArray\": false,\n\t\t\"MouseEvent\": false,\n\t\t\"moveBy\": false,\n\t\t\"moveTo\": false,\n\t\t\"MutationEvent\": false,\n\t\t\"MutationObserver\": false,\n\t\t\"MutationRecord\": false,\n\t\t\"name\": false,\n\t\t\"NamedNodeMap\": false,\n\t\t\"NavigationPreloadManager\": false,\n\t\t\"navigator\": false,\n\t\t\"Navigator\": false,\n\t\t\"NetworkInformation\": false,\n\t\t\"Node\": false,\n\t\t\"NodeFilter\": false,\n\t\t\"NodeIterator\": false,\n\t\t\"NodeList\": false,\n\t\t\"Notification\": false,\n\t\t\"OfflineAudioCompletionEvent\": false,\n\t\t\"OfflineAudioContext\": false,\n\t\t\"offscreenBuffering\": false,\n\t\t\"OffscreenCanvas\": true,\n\t\t\"onabort\": true,\n\t\t\"onafterprint\": true,\n\t\t\"onanimationend\": true,\n\t\t\"onanimationiteration\": true,\n\t\t\"onanimationstart\": true,\n\t\t\"onappinstalled\": true,\n\t\t\"onauxclick\": true,\n\t\t\"onbeforeinstallprompt\": true,\n\t\t\"onbeforeprint\": true,\n\t\t\"onbeforeunload\": true,\n\t\t\"onblur\": true,\n\t\t\"oncancel\": true,\n\t\t\"oncanplay\": true,\n\t\t\"oncanplaythrough\": true,\n\t\t\"onchange\": true,\n\t\t\"onclick\": true,\n\t\t\"onclose\": true,\n\t\t\"oncontextmenu\": true,\n\t\t\"oncuechange\": true,\n\t\t\"ondblclick\": true,\n\t\t\"ondevicemotion\": true,\n\t\t\"ondeviceorientation\": true,\n\t\t\"ondeviceorientationabsolute\": true,\n\t\t\"ondrag\": true,\n\t\t\"ondragend\": true,\n\t\t\"ondragenter\": true,\n\t\t\"ondragleave\": true,\n\t\t\"ondragover\": true,\n\t\t\"ondragstart\": true,\n\t\t\"ondrop\": true,\n\t\t\"ondurationchange\": true,\n\t\t\"onemptied\": true,\n\t\t\"onended\": true,\n\t\t\"onerror\": true,\n\t\t\"onfocus\": true,\n\t\t\"ongotpointercapture\": true,\n\t\t\"onhashchange\": true,\n\t\t\"oninput\": true,\n\t\t\"oninvalid\": true,\n\t\t\"onkeydown\": true,\n\t\t\"onkeypress\": true,\n\t\t\"onkeyup\": true,\n\t\t\"onlanguagechange\": true,\n\t\t\"onload\": true,\n\t\t\"onloadeddata\": true,\n\t\t\"onloadedmetadata\": true,\n\t\t\"onloadstart\": true,\n\t\t\"onlostpointercapture\": true,\n\t\t\"onmessage\": true,\n\t\t\"onmessageerror\": true,\n\t\t\"onmousedown\": true,\n\t\t\"onmouseenter\": true,\n\t\t\"onmouseleave\": true,\n\t\t\"onmousemove\": true,\n\t\t\"onmouseout\": true,\n\t\t\"onmouseover\": true,\n\t\t\"onmouseup\": true,\n\t\t\"onmousewheel\": true,\n\t\t\"onoffline\": true,\n\t\t\"ononline\": true,\n\t\t\"onpagehide\": true,\n\t\t\"onpageshow\": true,\n\t\t\"onpause\": true,\n\t\t\"onplay\": true,\n\t\t\"onplaying\": true,\n\t\t\"onpointercancel\": true,\n\t\t\"onpointerdown\": true,\n\t\t\"onpointerenter\": true,\n\t\t\"onpointerleave\": true,\n\t\t\"onpointermove\": true,\n\t\t\"onpointerout\": true,\n\t\t\"onpointerover\": true,\n\t\t\"onpointerup\": true,\n\t\t\"onpopstate\": true,\n\t\t\"onprogress\": true,\n\t\t\"onratechange\": true,\n\t\t\"onrejectionhandled\": true,\n\t\t\"onreset\": true,\n\t\t\"onresize\": true,\n\t\t\"onscroll\": true,\n\t\t\"onsearch\": true,\n\t\t\"onseeked\": true,\n\t\t\"onseeking\": true,\n\t\t\"onselect\": true,\n\t\t\"onstalled\": true,\n\t\t\"onstorage\": true,\n\t\t\"onsubmit\": true,\n\t\t\"onsuspend\": true,\n\t\t\"ontimeupdate\": true,\n\t\t\"ontoggle\": true,\n\t\t\"ontransitionend\": true,\n\t\t\"onunhandledrejection\": true,\n\t\t\"onunload\": true,\n\t\t\"onvolumechange\": true,\n\t\t\"onwaiting\": true,\n\t\t\"onwheel\": true,\n\t\t\"open\": false,\n\t\t\"openDatabase\": false,\n\t\t\"opener\": false,\n\t\t\"Option\": false,\n\t\t\"origin\": false,\n\t\t\"OscillatorNode\": false,\n\t\t\"outerHeight\": false,\n\t\t\"outerWidth\": false,\n\t\t\"PageTransitionEvent\": false,\n\t\t\"pageXOffset\": false,\n\t\t\"pageYOffset\": false,\n\t\t\"PannerNode\": false,\n\t\t\"parent\": false,\n\t\t\"Path2D\": false,\n\t\t\"PaymentAddress\": false,\n\t\t\"PaymentRequest\": false,\n\t\t\"PaymentRequestUpdateEvent\": false,\n\t\t\"PaymentResponse\": false,\n\t\t\"performance\": false,\n\t\t\"Performance\": false,\n\t\t\"PerformanceEntry\": false,\n\t\t\"PerformanceLongTaskTiming\": false,\n\t\t\"PerformanceMark\": false,\n\t\t\"PerformanceMeasure\": false,\n\t\t\"PerformanceNavigation\": false,\n\t\t\"PerformanceNavigationTiming\": false,\n\t\t\"PerformanceObserver\": false,\n\t\t\"PerformanceObserverEntryList\": false,\n\t\t\"PerformancePaintTiming\": false,\n\t\t\"PerformanceResourceTiming\": false,\n\t\t\"PerformanceTiming\": false,\n\t\t\"PeriodicWave\": false,\n\t\t\"Permissions\": false,\n\t\t\"PermissionStatus\": false,\n\t\t\"personalbar\": false,\n\t\t\"PhotoCapabilities\": false,\n\t\t\"Plugin\": false,\n\t\t\"PluginArray\": false,\n\t\t\"PointerEvent\": false,\n\t\t\"PopStateEvent\": false,\n\t\t\"postMessage\": false,\n\t\t\"Presentation\": false,\n\t\t\"PresentationAvailability\": false,\n\t\t\"PresentationConnection\": false,\n\t\t\"PresentationConnectionAvailableEvent\": false,\n\t\t\"PresentationConnectionCloseEvent\": false,\n\t\t\"PresentationConnectionList\": false,\n\t\t\"PresentationReceiver\": false,\n\t\t\"PresentationRequest\": false,\n\t\t\"print\": false,\n\t\t\"ProcessingInstruction\": false,\n\t\t\"ProgressEvent\": false,\n\t\t\"PromiseRejectionEvent\": false,\n\t\t\"prompt\": false,\n\t\t\"PushManager\": false,\n\t\t\"PushSubscription\": false,\n\t\t\"PushSubscriptionOptions\": false,\n\t\t\"queueMicrotask\": false,\n\t\t\"RadioNodeList\": false,\n\t\t\"Range\": false,\n\t\t\"ReadableStream\": false,\n\t\t\"registerProcessor\": false,\n\t\t\"RemotePlayback\": false,\n\t\t\"removeEventListener\": false,\n\t\t\"Request\": false,\n\t\t\"requestAnimationFrame\": false,\n\t\t\"requestIdleCallback\": false,\n\t\t\"resizeBy\": false,\n\t\t\"ResizeObserver\": false,\n\t\t\"ResizeObserverEntry\": false,\n\t\t\"resizeTo\": false,\n\t\t\"Response\": false,\n\t\t\"RTCCertificate\": false,\n\t\t\"RTCDataChannel\": false,\n\t\t\"RTCDataChannelEvent\": false,\n\t\t\"RTCDtlsTransport\": false,\n\t\t\"RTCIceCandidate\": false,\n\t\t\"RTCIceGatherer\": false,\n\t\t\"RTCIceTransport\": false,\n\t\t\"RTCPeerConnection\": false,\n\t\t\"RTCPeerConnectionIceEvent\": false,\n\t\t\"RTCRtpContributingSource\": false,\n\t\t\"RTCRtpReceiver\": false,\n\t\t\"RTCRtpSender\": false,\n\t\t\"RTCSctpTransport\": false,\n\t\t\"RTCSessionDescription\": false,\n\t\t\"RTCStatsReport\": false,\n\t\t\"RTCTrackEvent\": false,\n\t\t\"screen\": false,\n\t\t\"Screen\": false,\n\t\t\"screenLeft\": false,\n\t\t\"ScreenOrientation\": false,\n\t\t\"screenTop\": false,\n\t\t\"screenX\": false,\n\t\t\"screenY\": false,\n\t\t\"ScriptProcessorNode\": false,\n\t\t\"scroll\": false,\n\t\t\"scrollbars\": false,\n\t\t\"scrollBy\": false,\n\t\t\"scrollTo\": false,\n\t\t\"scrollX\": false,\n\t\t\"scrollY\": false,\n\t\t\"SecurityPolicyViolationEvent\": false,\n\t\t\"Selection\": false,\n\t\t\"self\": false,\n\t\t\"ServiceWorker\": false,\n\t\t\"ServiceWorkerContainer\": false,\n\t\t\"ServiceWorkerRegistration\": false,\n\t\t\"sessionStorage\": false,\n\t\t\"setInterval\": false,\n\t\t\"setTimeout\": false,\n\t\t\"ShadowRoot\": false,\n\t\t\"SharedWorker\": false,\n\t\t\"SourceBuffer\": false,\n\t\t\"SourceBufferList\": false,\n\t\t\"speechSynthesis\": false,\n\t\t\"SpeechSynthesisEvent\": false,\n\t\t\"SpeechSynthesisUtterance\": false,\n\t\t\"StaticRange\": false,\n\t\t\"status\": false,\n\t\t\"statusbar\": false,\n\t\t\"StereoPannerNode\": false,\n\t\t\"stop\": false,\n\t\t\"Storage\": false,\n\t\t\"StorageEvent\": false,\n\t\t\"StorageManager\": false,\n\t\t\"styleMedia\": false,\n\t\t\"StyleSheet\": false,\n\t\t\"StyleSheetList\": false,\n\t\t\"SubtleCrypto\": false,\n\t\t\"SVGAElement\": false,\n\t\t\"SVGAngle\": false,\n\t\t\"SVGAnimatedAngle\": false,\n\t\t\"SVGAnimatedBoolean\": false,\n\t\t\"SVGAnimatedEnumeration\": false,\n\t\t\"SVGAnimatedInteger\": false,\n\t\t\"SVGAnimatedLength\": false,\n\t\t\"SVGAnimatedLengthList\": false,\n\t\t\"SVGAnimatedNumber\": false,\n\t\t\"SVGAnimatedNumberList\": false,\n\t\t\"SVGAnimatedPreserveAspectRatio\": false,\n\t\t\"SVGAnimatedRect\": false,\n\t\t\"SVGAnimatedString\": false,\n\t\t\"SVGAnimatedTransformList\": false,\n\t\t\"SVGAnimateElement\": false,\n\t\t\"SVGAnimateMotionElement\": false,\n\t\t\"SVGAnimateTransformElement\": false,\n\t\t\"SVGAnimationElement\": false,\n\t\t\"SVGCircleElement\": false,\n\t\t\"SVGClipPathElement\": false,\n\t\t\"SVGComponentTransferFunctionElement\": false,\n\t\t\"SVGDefsElement\": false,\n\t\t\"SVGDescElement\": false,\n\t\t\"SVGDiscardElement\": false,\n\t\t\"SVGElement\": false,\n\t\t\"SVGEllipseElement\": false,\n\t\t\"SVGFEBlendElement\": false,\n\t\t\"SVGFEColorMatrixElement\": false,\n\t\t\"SVGFEComponentTransferElement\": false,\n\t\t\"SVGFECompositeElement\": false,\n\t\t\"SVGFEConvolveMatrixElement\": false,\n\t\t\"SVGFEDiffuseLightingElement\": false,\n\t\t\"SVGFEDisplacementMapElement\": false,\n\t\t\"SVGFEDistantLightElement\": false,\n\t\t\"SVGFEDropShadowElement\": false,\n\t\t\"SVGFEFloodElement\": false,\n\t\t\"SVGFEFuncAElement\": false,\n\t\t\"SVGFEFuncBElement\": false,\n\t\t\"SVGFEFuncGElement\": false,\n\t\t\"SVGFEFuncRElement\": false,\n\t\t\"SVGFEGaussianBlurElement\": false,\n\t\t\"SVGFEImageElement\": false,\n\t\t\"SVGFEMergeElement\": false,\n\t\t\"SVGFEMergeNodeElement\": false,\n\t\t\"SVGFEMorphologyElement\": false,\n\t\t\"SVGFEOffsetElement\": false,\n\t\t\"SVGFEPointLightElement\": false,\n\t\t\"SVGFESpecularLightingElement\": false,\n\t\t\"SVGFESpotLightElement\": false,\n\t\t\"SVGFETileElement\": false,\n\t\t\"SVGFETurbulenceElement\": false,\n\t\t\"SVGFilterElement\": false,\n\t\t\"SVGForeignObjectElement\": false,\n\t\t\"SVGGElement\": false,\n\t\t\"SVGGeometryElement\": false,\n\t\t\"SVGGradientElement\": false,\n\t\t\"SVGGraphicsElement\": false,\n\t\t\"SVGImageElement\": false,\n\t\t\"SVGLength\": false,\n\t\t\"SVGLengthList\": false,\n\t\t\"SVGLinearGradientElement\": false,\n\t\t\"SVGLineElement\": false,\n\t\t\"SVGMarkerElement\": false,\n\t\t\"SVGMaskElement\": false,\n\t\t\"SVGMatrix\": false,\n\t\t\"SVGMetadataElement\": false,\n\t\t\"SVGMPathElement\": false,\n\t\t\"SVGNumber\": false,\n\t\t\"SVGNumberList\": false,\n\t\t\"SVGPathElement\": false,\n\t\t\"SVGPatternElement\": false,\n\t\t\"SVGPoint\": false,\n\t\t\"SVGPointList\": false,\n\t\t\"SVGPolygonElement\": false,\n\t\t\"SVGPolylineElement\": false,\n\t\t\"SVGPreserveAspectRatio\": false,\n\t\t\"SVGRadialGradientElement\": false,\n\t\t\"SVGRect\": false,\n\t\t\"SVGRectElement\": false,\n\t\t\"SVGScriptElement\": false,\n\t\t\"SVGSetElement\": false,\n\t\t\"SVGStopElement\": false,\n\t\t\"SVGStringList\": false,\n\t\t\"SVGStyleElement\": false,\n\t\t\"SVGSVGElement\": false,\n\t\t\"SVGSwitchElement\": false,\n\t\t\"SVGSymbolElement\": false,\n\t\t\"SVGTextContentElement\": false,\n\t\t\"SVGTextElement\": false,\n\t\t\"SVGTextPathElement\": false,\n\t\t\"SVGTextPositioningElement\": false,\n\t\t\"SVGTitleElement\": false,\n\t\t\"SVGTransform\": false,\n\t\t\"SVGTransformList\": false,\n\t\t\"SVGTSpanElement\": false,\n\t\t\"SVGUnitTypes\": false,\n\t\t\"SVGUseElement\": false,\n\t\t\"SVGViewElement\": false,\n\t\t\"TaskAttributionTiming\": false,\n\t\t\"Text\": false,\n\t\t\"TextDecoder\": false,\n\t\t\"TextEncoder\": false,\n\t\t\"TextEvent\": false,\n\t\t\"TextMetrics\": false,\n\t\t\"TextTrack\": false,\n\t\t\"TextTrackCue\": false,\n\t\t\"TextTrackCueList\": false,\n\t\t\"TextTrackList\": false,\n\t\t\"TimeRanges\": false,\n\t\t\"toolbar\": false,\n\t\t\"top\": false,\n\t\t\"Touch\": false,\n\t\t\"TouchEvent\": false,\n\t\t\"TouchList\": false,\n\t\t\"TrackEvent\": false,\n\t\t\"TransitionEvent\": false,\n\t\t\"TreeWalker\": false,\n\t\t\"UIEvent\": false,\n\t\t\"URL\": false,\n\t\t\"URLSearchParams\": false,\n\t\t\"ValidityState\": false,\n\t\t\"visualViewport\": false,\n\t\t\"VisualViewport\": false,\n\t\t\"VTTCue\": false,\n\t\t\"WaveShaperNode\": false,\n\t\t\"WebAssembly\": false,\n\t\t\"WebGL2RenderingContext\": false,\n\t\t\"WebGLActiveInfo\": false,\n\t\t\"WebGLBuffer\": false,\n\t\t\"WebGLContextEvent\": false,\n\t\t\"WebGLFramebuffer\": false,\n\t\t\"WebGLProgram\": false,\n\t\t\"WebGLQuery\": false,\n\t\t\"WebGLRenderbuffer\": false,\n\t\t\"WebGLRenderingContext\": false,\n\t\t\"WebGLSampler\": false,\n\t\t\"WebGLShader\": false,\n\t\t\"WebGLShaderPrecisionFormat\": false,\n\t\t\"WebGLSync\": false,\n\t\t\"WebGLTexture\": false,\n\t\t\"WebGLTransformFeedback\": false,\n\t\t\"WebGLUniformLocation\": false,\n\t\t\"WebGLVertexArrayObject\": false,\n\t\t\"WebSocket\": false,\n\t\t\"WheelEvent\": false,\n\t\t\"window\": false,\n\t\t\"Window\": false,\n\t\t\"Worker\": false,\n\t\t\"WritableStream\": false,\n\t\t\"XMLDocument\": false,\n\t\t\"XMLHttpRequest\": false,\n\t\t\"XMLHttpRequestEventTarget\": false,\n\t\t\"XMLHttpRequestUpload\": false,\n\t\t\"XMLSerializer\": false,\n\t\t\"XPathEvaluator\": false,\n\t\t\"XPathExpression\": false,\n\t\t\"XPathResult\": false,\n\t\t\"XSLTProcessor\": false\n\t},\n\t\"worker\": {\n\t\t\"applicationCache\": false,\n\t\t\"atob\": false,\n\t\t\"Blob\": false,\n\t\t\"BroadcastChannel\": false,\n\t\t\"btoa\": false,\n\t\t\"Cache\": false,\n\t\t\"caches\": false,\n\t\t\"clearInterval\": false,\n\t\t\"clearTimeout\": false,\n\t\t\"close\": true,\n\t\t\"console\": false,\n\t\t\"fetch\": false,\n\t\t\"FileReaderSync\": false,\n\t\t\"FormData\": false,\n\t\t\"Headers\": false,\n\t\t\"IDBCursor\": false,\n\t\t\"IDBCursorWithValue\": false,\n\t\t\"IDBDatabase\": false,\n\t\t\"IDBFactory\": false,\n\t\t\"IDBIndex\": false,\n\t\t\"IDBKeyRange\": false,\n\t\t\"IDBObjectStore\": false,\n\t\t\"IDBOpenDBRequest\": false,\n\t\t\"IDBRequest\": false,\n\t\t\"IDBTransaction\": false,\n\t\t\"IDBVersionChangeEvent\": false,\n\t\t\"ImageData\": false,\n\t\t\"importScripts\": true,\n\t\t\"indexedDB\": false,\n\t\t\"location\": false,\n\t\t\"MessageChannel\": false,\n\t\t\"MessagePort\": false,\n\t\t\"name\": false,\n\t\t\"navigator\": false,\n\t\t\"Notification\": false,\n\t\t\"onclose\": true,\n\t\t\"onconnect\": true,\n\t\t\"onerror\": true,\n\t\t\"onlanguagechange\": true,\n\t\t\"onmessage\": true,\n\t\t\"onoffline\": true,\n\t\t\"ononline\": true,\n\t\t\"onrejectionhandled\": true,\n\t\t\"onunhandledrejection\": true,\n\t\t\"performance\": false,\n\t\t\"Performance\": false,\n\t\t\"PerformanceEntry\": false,\n\t\t\"PerformanceMark\": false,\n\t\t\"PerformanceMeasure\": false,\n\t\t\"PerformanceNavigation\": false,\n\t\t\"PerformanceResourceTiming\": false,\n\t\t\"PerformanceTiming\": false,\n\t\t\"postMessage\": true,\n\t\t\"Promise\": false,\n\t\t\"queueMicrotask\": false,\n\t\t\"Request\": false,\n\t\t\"Response\": false,\n\t\t\"self\": true,\n\t\t\"ServiceWorkerRegistration\": false,\n\t\t\"setInterval\": false,\n\t\t\"setTimeout\": false,\n\t\t\"TextDecoder\": false,\n\t\t\"TextEncoder\": false,\n\t\t\"URL\": false,\n\t\t\"URLSearchParams\": false,\n\t\t\"WebSocket\": false,\n\t\t\"Worker\": false,\n\t\t\"WorkerGlobalScope\": false,\n\t\t\"XMLHttpRequest\": false\n\t},\n\t\"node\": {\n\t\t\"__dirname\": false,\n\t\t\"__filename\": false,\n\t\t\"Buffer\": false,\n\t\t\"clearImmediate\": false,\n\t\t\"clearInterval\": false,\n\t\t\"clearTimeout\": false,\n\t\t\"console\": false,\n\t\t\"exports\": true,\n\t\t\"global\": false,\n\t\t\"Intl\": false,\n\t\t\"module\": false,\n\t\t\"process\": false,\n\t\t\"queueMicrotask\": false,\n\t\t\"require\": false,\n\t\t\"setImmediate\": false,\n\t\t\"setInterval\": false,\n\t\t\"setTimeout\": false,\n\t\t\"TextDecoder\": false,\n\t\t\"TextEncoder\": false,\n\t\t\"URL\": false,\n\t\t\"URLSearchParams\": false\n\t},\n\t\"commonjs\": {\n\t\t\"exports\": true,\n\t\t\"global\": false,\n\t\t\"module\": false,\n\t\t\"require\": false\n\t},\n\t\"amd\": {\n\t\t\"define\": false,\n\t\t\"require\": false\n\t},\n\t\"mocha\": {\n\t\t\"after\": false,\n\t\t\"afterEach\": false,\n\t\t\"before\": false,\n\t\t\"beforeEach\": false,\n\t\t\"context\": false,\n\t\t\"describe\": false,\n\t\t\"it\": false,\n\t\t\"mocha\": false,\n\t\t\"run\": false,\n\t\t\"setup\": false,\n\t\t\"specify\": false,\n\t\t\"suite\": false,\n\t\t\"suiteSetup\": false,\n\t\t\"suiteTeardown\": false,\n\t\t\"teardown\": false,\n\t\t\"test\": false,\n\t\t\"xcontext\": false,\n\t\t\"xdescribe\": false,\n\t\t\"xit\": false,\n\t\t\"xspecify\": false\n\t},\n\t\"jasmine\": {\n\t\t\"afterAll\": false,\n\t\t\"afterEach\": false,\n\t\t\"beforeAll\": false,\n\t\t\"beforeEach\": false,\n\t\t\"describe\": false,\n\t\t\"expect\": false,\n\t\t\"fail\": false,\n\t\t\"fdescribe\": false,\n\t\t\"fit\": false,\n\t\t\"it\": false,\n\t\t\"jasmine\": false,\n\t\t\"pending\": false,\n\t\t\"runs\": false,\n\t\t\"spyOn\": false,\n\t\t\"spyOnProperty\": false,\n\t\t\"waits\": false,\n\t\t\"waitsFor\": false,\n\t\t\"xdescribe\": false,\n\t\t\"xit\": false\n\t},\n\t\"jest\": {\n\t\t\"afterAll\": false,\n\t\t\"afterEach\": false,\n\t\t\"beforeAll\": false,\n\t\t\"beforeEach\": false,\n\t\t\"describe\": false,\n\t\t\"expect\": false,\n\t\t\"fdescribe\": false,\n\t\t\"fit\": false,\n\t\t\"it\": false,\n\t\t\"jest\": false,\n\t\t\"pit\": false,\n\t\t\"require\": false,\n\t\t\"test\": false,\n\t\t\"xdescribe\": false,\n\t\t\"xit\": false,\n\t\t\"xtest\": false\n\t},\n\t\"qunit\": {\n\t\t\"asyncTest\": false,\n\t\t\"deepEqual\": false,\n\t\t\"equal\": false,\n\t\t\"expect\": false,\n\t\t\"module\": false,\n\t\t\"notDeepEqual\": false,\n\t\t\"notEqual\": false,\n\t\t\"notOk\": false,\n\t\t\"notPropEqual\": false,\n\t\t\"notStrictEqual\": false,\n\t\t\"ok\": false,\n\t\t\"propEqual\": false,\n\t\t\"QUnit\": false,\n\t\t\"raises\": false,\n\t\t\"start\": false,\n\t\t\"stop\": false,\n\t\t\"strictEqual\": false,\n\t\t\"test\": false,\n\t\t\"throws\": false\n\t},\n\t\"phantomjs\": {\n\t\t\"console\": true,\n\t\t\"exports\": true,\n\t\t\"phantom\": true,\n\t\t\"require\": true,\n\t\t\"WebPage\": true\n\t},\n\t\"couch\": {\n\t\t\"emit\": false,\n\t\t\"exports\": false,\n\t\t\"getRow\": false,\n\t\t\"log\": false,\n\t\t\"module\": false,\n\t\t\"provides\": false,\n\t\t\"require\": false,\n\t\t\"respond\": false,\n\t\t\"send\": false,\n\t\t\"start\": false,\n\t\t\"sum\": false\n\t},\n\t\"rhino\": {\n\t\t\"defineClass\": false,\n\t\t\"deserialize\": false,\n\t\t\"gc\": false,\n\t\t\"help\": false,\n\t\t\"importClass\": false,\n\t\t\"importPackage\": false,\n\t\t\"java\": false,\n\t\t\"load\": false,\n\t\t\"loadClass\": false,\n\t\t\"Packages\": false,\n\t\t\"print\": false,\n\t\t\"quit\": false,\n\t\t\"readFile\": false,\n\t\t\"readUrl\": false,\n\t\t\"runCommand\": false,\n\t\t\"seal\": false,\n\t\t\"serialize\": false,\n\t\t\"spawn\": false,\n\t\t\"sync\": false,\n\t\t\"toint32\": false,\n\t\t\"version\": false\n\t},\n\t\"nashorn\": {\n\t\t\"__DIR__\": false,\n\t\t\"__FILE__\": false,\n\t\t\"__LINE__\": false,\n\t\t\"com\": false,\n\t\t\"edu\": false,\n\t\t\"exit\": false,\n\t\t\"java\": false,\n\t\t\"Java\": false,\n\t\t\"javafx\": false,\n\t\t\"JavaImporter\": false,\n\t\t\"javax\": false,\n\t\t\"JSAdapter\": false,\n\t\t\"load\": false,\n\t\t\"loadWithNewGlobal\": false,\n\t\t\"org\": false,\n\t\t\"Packages\": false,\n\t\t\"print\": false,\n\t\t\"quit\": false\n\t},\n\t\"wsh\": {\n\t\t\"ActiveXObject\": true,\n\t\t\"Enumerator\": true,\n\t\t\"GetObject\": true,\n\t\t\"ScriptEngine\": true,\n\t\t\"ScriptEngineBuildVersion\": true,\n\t\t\"ScriptEngineMajorVersion\": true,\n\t\t\"ScriptEngineMinorVersion\": true,\n\t\t\"VBArray\": true,\n\t\t\"WScript\": true,\n\t\t\"WSH\": true,\n\t\t\"XDomainRequest\": true\n\t},\n\t\"jquery\": {\n\t\t\"$\": false,\n\t\t\"jQuery\": false\n\t},\n\t\"yui\": {\n\t\t\"YAHOO\": false,\n\t\t\"YAHOO_config\": false,\n\t\t\"YUI\": false,\n\t\t\"YUI_config\": false\n\t},\n\t\"shelljs\": {\n\t\t\"cat\": false,\n\t\t\"cd\": false,\n\t\t\"chmod\": false,\n\t\t\"config\": false,\n\t\t\"cp\": false,\n\t\t\"dirs\": false,\n\t\t\"echo\": false,\n\t\t\"env\": false,\n\t\t\"error\": false,\n\t\t\"exec\": false,\n\t\t\"exit\": false,\n\t\t\"find\": false,\n\t\t\"grep\": false,\n\t\t\"ln\": false,\n\t\t\"ls\": false,\n\t\t\"mkdir\": false,\n\t\t\"mv\": false,\n\t\t\"popd\": false,\n\t\t\"pushd\": false,\n\t\t\"pwd\": false,\n\t\t\"rm\": false,\n\t\t\"sed\": false,\n\t\t\"set\": false,\n\t\t\"target\": false,\n\t\t\"tempdir\": false,\n\t\t\"test\": false,\n\t\t\"touch\": false,\n\t\t\"which\": false\n\t},\n\t\"prototypejs\": {\n\t\t\"$\": false,\n\t\t\"$$\": false,\n\t\t\"$A\": false,\n\t\t\"$break\": false,\n\t\t\"$continue\": false,\n\t\t\"$F\": false,\n\t\t\"$H\": false,\n\t\t\"$R\": false,\n\t\t\"$w\": false,\n\t\t\"Abstract\": false,\n\t\t\"Ajax\": false,\n\t\t\"Autocompleter\": false,\n\t\t\"Builder\": false,\n\t\t\"Class\": false,\n\t\t\"Control\": false,\n\t\t\"Draggable\": false,\n\t\t\"Draggables\": false,\n\t\t\"Droppables\": false,\n\t\t\"Effect\": false,\n\t\t\"Element\": false,\n\t\t\"Enumerable\": false,\n\t\t\"Event\": false,\n\t\t\"Field\": false,\n\t\t\"Form\": false,\n\t\t\"Hash\": false,\n\t\t\"Insertion\": false,\n\t\t\"ObjectRange\": false,\n\t\t\"PeriodicalExecuter\": false,\n\t\t\"Position\": false,\n\t\t\"Prototype\": false,\n\t\t\"Scriptaculous\": false,\n\t\t\"Selector\": false,\n\t\t\"Sortable\": false,\n\t\t\"SortableObserver\": false,\n\t\t\"Sound\": false,\n\t\t\"Template\": false,\n\t\t\"Toggle\": false,\n\t\t\"Try\": false\n\t},\n\t\"meteor\": {\n\t\t\"_\": false,\n\t\t\"$\": false,\n\t\t\"Accounts\": false,\n\t\t\"AccountsClient\": false,\n\t\t\"AccountsCommon\": false,\n\t\t\"AccountsServer\": false,\n\t\t\"App\": false,\n\t\t\"Assets\": false,\n\t\t\"Blaze\": false,\n\t\t\"check\": false,\n\t\t\"Cordova\": false,\n\t\t\"DDP\": false,\n\t\t\"DDPRateLimiter\": false,\n\t\t\"DDPServer\": false,\n\t\t\"Deps\": false,\n\t\t\"EJSON\": false,\n\t\t\"Email\": false,\n\t\t\"HTTP\": false,\n\t\t\"Log\": false,\n\t\t\"Match\": false,\n\t\t\"Meteor\": false,\n\t\t\"Mongo\": false,\n\t\t\"MongoInternals\": false,\n\t\t\"Npm\": false,\n\t\t\"Package\": false,\n\t\t\"Plugin\": false,\n\t\t\"process\": false,\n\t\t\"Random\": false,\n\t\t\"ReactiveDict\": false,\n\t\t\"ReactiveVar\": false,\n\t\t\"Router\": false,\n\t\t\"ServiceConfiguration\": false,\n\t\t\"Session\": false,\n\t\t\"share\": false,\n\t\t\"Spacebars\": false,\n\t\t\"Template\": false,\n\t\t\"Tinytest\": false,\n\t\t\"Tracker\": false,\n\t\t\"UI\": false,\n\t\t\"Utils\": false,\n\t\t\"WebApp\": false,\n\t\t\"WebAppInternals\": false\n\t},\n\t\"mongo\": {\n\t\t\"_isWindows\": false,\n\t\t\"_rand\": false,\n\t\t\"BulkWriteResult\": false,\n\t\t\"cat\": false,\n\t\t\"cd\": false,\n\t\t\"connect\": false,\n\t\t\"db\": false,\n\t\t\"getHostName\": false,\n\t\t\"getMemInfo\": false,\n\t\t\"hostname\": false,\n\t\t\"ISODate\": false,\n\t\t\"listFiles\": false,\n\t\t\"load\": false,\n\t\t\"ls\": false,\n\t\t\"md5sumFile\": false,\n\t\t\"mkdir\": false,\n\t\t\"Mongo\": false,\n\t\t\"NumberInt\": false,\n\t\t\"NumberLong\": false,\n\t\t\"ObjectId\": false,\n\t\t\"PlanCache\": false,\n\t\t\"print\": false,\n\t\t\"printjson\": false,\n\t\t\"pwd\": false,\n\t\t\"quit\": false,\n\t\t\"removeFile\": false,\n\t\t\"rs\": false,\n\t\t\"sh\": false,\n\t\t\"UUID\": false,\n\t\t\"version\": false,\n\t\t\"WriteResult\": false\n\t},\n\t\"applescript\": {\n\t\t\"$\": false,\n\t\t\"Application\": false,\n\t\t\"Automation\": false,\n\t\t\"console\": false,\n\t\t\"delay\": false,\n\t\t\"Library\": false,\n\t\t\"ObjC\": false,\n\t\t\"ObjectSpecifier\": false,\n\t\t\"Path\": false,\n\t\t\"Progress\": false,\n\t\t\"Ref\": false\n\t},\n\t\"serviceworker\": {\n\t\t\"Cache\": false,\n\t\t\"caches\": false,\n\t\t\"CacheStorage\": false,\n\t\t\"Client\": false,\n\t\t\"clients\": false,\n\t\t\"Clients\": false,\n\t\t\"ExtendableEvent\": false,\n\t\t\"ExtendableMessageEvent\": false,\n\t\t\"FetchEvent\": false,\n\t\t\"importScripts\": false,\n\t\t\"registration\": false,\n\t\t\"self\": false,\n\t\t\"ServiceWorker\": false,\n\t\t\"ServiceWorkerContainer\": false,\n\t\t\"ServiceWorkerGlobalScope\": false,\n\t\t\"ServiceWorkerMessageEvent\": false,\n\t\t\"ServiceWorkerRegistration\": false,\n\t\t\"skipWaiting\": false,\n\t\t\"WindowClient\": false\n\t},\n\t\"atomtest\": {\n\t\t\"advanceClock\": false,\n\t\t\"fakeClearInterval\": false,\n\t\t\"fakeClearTimeout\": false,\n\t\t\"fakeSetInterval\": false,\n\t\t\"fakeSetTimeout\": false,\n\t\t\"resetTimeouts\": false,\n\t\t\"waitsForPromise\": false\n\t},\n\t\"embertest\": {\n\t\t\"andThen\": false,\n\t\t\"click\": false,\n\t\t\"currentPath\": false,\n\t\t\"currentRouteName\": false,\n\t\t\"currentURL\": false,\n\t\t\"fillIn\": false,\n\t\t\"find\": false,\n\t\t\"findAll\": false,\n\t\t\"findWithAssert\": false,\n\t\t\"keyEvent\": false,\n\t\t\"pauseTest\": false,\n\t\t\"resumeTest\": false,\n\t\t\"triggerEvent\": false,\n\t\t\"visit\": false,\n\t\t\"wait\": false\n\t},\n\t\"protractor\": {\n\t\t\"$\": false,\n\t\t\"$$\": false,\n\t\t\"browser\": false,\n\t\t\"by\": false,\n\t\t\"By\": false,\n\t\t\"DartObject\": false,\n\t\t\"element\": false,\n\t\t\"protractor\": false\n\t},\n\t\"shared-node-browser\": {\n\t\t\"clearInterval\": false,\n\t\t\"clearTimeout\": false,\n\t\t\"console\": false,\n\t\t\"setInterval\": false,\n\t\t\"setTimeout\": false,\n\t\t\"URL\": false,\n\t\t\"URLSearchParams\": false\n\t},\n\t\"webextensions\": {\n\t\t\"browser\": false,\n\t\t\"chrome\": false,\n\t\t\"opr\": false\n\t},\n\t\"greasemonkey\": {\n\t\t\"GM\": false,\n\t\t\"GM_addStyle\": false,\n\t\t\"GM_deleteValue\": false,\n\t\t\"GM_getResourceText\": false,\n\t\t\"GM_getResourceURL\": false,\n\t\t\"GM_getValue\": false,\n\t\t\"GM_info\": false,\n\t\t\"GM_listValues\": false,\n\t\t\"GM_log\": false,\n\t\t\"GM_openInTab\": false,\n\t\t\"GM_registerMenuCommand\": false,\n\t\t\"GM_setClipboard\": false,\n\t\t\"GM_setValue\": false,\n\t\t\"GM_xmlhttpRequest\": false,\n\t\t\"unsafeWindow\": false\n\t},\n\t\"devtools\": {\n\t\t\"$\": false,\n\t\t\"$_\": false,\n\t\t\"$$\": false,\n\t\t\"$0\": false,\n\t\t\"$1\": false,\n\t\t\"$2\": false,\n\t\t\"$3\": false,\n\t\t\"$4\": false,\n\t\t\"$x\": false,\n\t\t\"chrome\": false,\n\t\t\"clear\": false,\n\t\t\"copy\": false,\n\t\t\"debug\": false,\n\t\t\"dir\": false,\n\t\t\"dirxml\": false,\n\t\t\"getEventListeners\": false,\n\t\t\"inspect\": false,\n\t\t\"keys\": false,\n\t\t\"monitor\": false,\n\t\t\"monitorEvents\": false,\n\t\t\"profile\": false,\n\t\t\"profileEnd\": false,\n\t\t\"queryObjects\": false,\n\t\t\"table\": false,\n\t\t\"undebug\": false,\n\t\t\"unmonitor\": false,\n\t\t\"unmonitorEvents\": false,\n\t\t\"values\": false\n\t}\n}\n/index.js:'use strict';\nmodule.exports = require('./globals.json');\n/package.json\u0002{\n\t\"name\": \"globals\",\n\t\"version\": \"11.9.0\",\n\t\"description\": \"Global identifiers from different JavaScript environments\",\n\t\"license\": \"MIT\",\n\t\"repository\": \"sindresorhus/globals\",\n\t\"author\": {\n\t\t\"name\": \"Sindre Sorhus\",\n\t\t\"email\": \"sindresorhus@gmail.com\",\n\t\t\"url\": \"sindresorhus.com\"\n\t},\n\t\"engines\": {\n\t\t\"node\": \">=4\"\n\t},\n\t\"scripts\": {\n\t\t\"test\": \"xo && ava\"\n\t},\n\t\"files\": [\n\t\t\"index.js\",\n\t\t\"globals.json\"\n\t],\n\t\"keywords\": [\n\t\t\"globals\",\n\t\t\"global\",\n\t\t\"identifiers\",\n\t\t\"variables\",\n\t\t\"vars\",\n\t\t\"jshint\",\n\t\t\"eslint\",\n\t\t\"environments\"\n\t],\n\t\"devDependencies\": {\n\t\t\"ava\": \"0.21.0\",\n\t\t\"xo\": \"0.18.0\"\n\t},\n\t\"xo\": {\n\t\t\"ignores\": [\n\t\t\t\"get-browser-globals.js\"\n\t\t]\n\t}\n}\n/readme.md\u0005# globals [![Build Status](https://travis-ci.org/sindresorhus/globals.svg?branch=master)](https://travis-ci.org/sindresorhus/globals)\n\n> Global identifiers from different JavaScript environments\n\nExtracted from [JSHint](https://github.com/jshint/jshint/blob/3a8efa979dbb157bfb5c10b5826603a55a33b9ad/src/vars.js) and [ESLint](https://github.com/eslint/eslint/blob/b648406218f8a2d7302b98f5565e23199f44eb31/conf/environments.json) and merged.\n\nIt's just a [JSON file](globals.json), so use it in whatever environment you like.\n\n**This module [no longer accepts](https://github.com/sindresorhus/globals/issues/82) new environments. If you need it for ESLint, just [create a plugin](http://eslint.org/docs/developer-guide/working-with-plugins#environments-in-plugins).**\n\n\n## Install\n\n```\n$ npm install globals\n```\n\n\n## Usage\n\n```js\nconst globals = require('globals');\n\nconsole.log(globals.browser);\n/*\n{\n\taddEventListener: false,\n\tapplicationCache: false,\n\tArrayBuffer: false,\n\tatob: false,\n\t...\n}\n*/\n```\n\nEach global is given a value of `true` or `false`. A value of `true` indicates that the variable may be overwritten. A value of `false` indicates that the variable should be considered read-only. This information is used by static analysis tools to flag incorrect behavior. We assume all variables should be `false` unless we hear otherwise.\n\n\n## License\n\nMIT © [Sindre Sorhus](https://sindresorhus.com)\n/license\u0004UMIT License\n\nCopyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)\n\nPermission 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:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE 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.\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/Z2xvYmFsc0AxMy4yMC4w",
    "content": "/globals.jsonŤ{\n\t\"builtin\": {\n\t\t\"AggregateError\": false,\n\t\t\"Array\": false,\n\t\t\"ArrayBuffer\": false,\n\t\t\"Atomics\": false,\n\t\t\"BigInt\": false,\n\t\t\"BigInt64Array\": false,\n\t\t\"BigUint64Array\": false,\n\t\t\"Boolean\": false,\n\t\t\"constructor\": false,\n\t\t\"DataView\": false,\n\t\t\"Date\": false,\n\t\t\"decodeURI\": false,\n\t\t\"decodeURIComponent\": false,\n\t\t\"encodeURI\": false,\n\t\t\"encodeURIComponent\": false,\n\t\t\"Error\": false,\n\t\t\"escape\": false,\n\t\t\"eval\": false,\n\t\t\"EvalError\": false,\n\t\t\"FinalizationRegistry\": false,\n\t\t\"Float32Array\": false,\n\t\t\"Float64Array\": false,\n\t\t\"Function\": false,\n\t\t\"globalThis\": false,\n\t\t\"hasOwnProperty\": false,\n\t\t\"Infinity\": false,\n\t\t\"Int16Array\": false,\n\t\t\"Int32Array\": false,\n\t\t\"Int8Array\": false,\n\t\t\"isFinite\": false,\n\t\t\"isNaN\": false,\n\t\t\"isPrototypeOf\": false,\n\t\t\"JSON\": false,\n\t\t\"Map\": false,\n\t\t\"Math\": false,\n\t\t\"NaN\": false,\n\t\t\"Number\": false,\n\t\t\"Object\": false,\n\t\t\"parseFloat\": false,\n\t\t\"parseInt\": false,\n\t\t\"Promise\": false,\n\t\t\"propertyIsEnumerable\": false,\n\t\t\"Proxy\": false,\n\t\t\"RangeError\": false,\n\t\t\"ReferenceError\": false,\n\t\t\"Reflect\": false,\n\t\t\"RegExp\": false,\n\t\t\"Set\": false,\n\t\t\"SharedArrayBuffer\": false,\n\t\t\"String\": false,\n\t\t\"Symbol\": false,\n\t\t\"SyntaxError\": false,\n\t\t\"toLocaleString\": false,\n\t\t\"toString\": false,\n\t\t\"TypeError\": false,\n\t\t\"Uint16Array\": false,\n\t\t\"Uint32Array\": false,\n\t\t\"Uint8Array\": false,\n\t\t\"Uint8ClampedArray\": false,\n\t\t\"undefined\": false,\n\t\t\"unescape\": false,\n\t\t\"URIError\": false,\n\t\t\"valueOf\": false,\n\t\t\"WeakMap\": false,\n\t\t\"WeakRef\": false,\n\t\t\"WeakSet\": false\n\t},\n\t\"es5\": {\n\t\t\"Array\": false,\n\t\t\"Boolean\": false,\n\t\t\"constructor\": false,\n\t\t\"Date\": false,\n\t\t\"decodeURI\": false,\n\t\t\"decodeURIComponent\": false,\n\t\t\"encodeURI\": false,\n\t\t\"encodeURIComponent\": false,\n\t\t\"Error\": false,\n\t\t\"escape\": false,\n\t\t\"eval\": false,\n\t\t\"EvalError\": false,\n\t\t\"Function\": false,\n\t\t\"hasOwnProperty\": false,\n\t\t\"Infinity\": false,\n\t\t\"isFinite\": false,\n\t\t\"isNaN\": false,\n\t\t\"isPrototypeOf\": false,\n\t\t\"JSON\": false,\n\t\t\"Math\": false,\n\t\t\"NaN\": false,\n\t\t\"Number\": false,\n\t\t\"Object\": false,\n\t\t\"parseFloat\": false,\n\t\t\"parseInt\": false,\n\t\t\"propertyIsEnumerable\": false,\n\t\t\"RangeError\": false,\n\t\t\"ReferenceError\": false,\n\t\t\"RegExp\": false,\n\t\t\"String\": false,\n\t\t\"SyntaxError\": false,\n\t\t\"toLocaleString\": false,\n\t\t\"toString\": false,\n\t\t\"TypeError\": false,\n\t\t\"undefined\": false,\n\t\t\"unescape\": false,\n\t\t\"URIError\": false,\n\t\t\"valueOf\": false\n\t},\n\t\"es2015\": {\n\t\t\"Array\": false,\n\t\t\"ArrayBuffer\": false,\n\t\t\"Boolean\": false,\n\t\t\"constructor\": false,\n\t\t\"DataView\": false,\n\t\t\"Date\": false,\n\t\t\"decodeURI\": false,\n\t\t\"decodeURIComponent\": false,\n\t\t\"encodeURI\": false,\n\t\t\"encodeURIComponent\": false,\n\t\t\"Error\": false,\n\t\t\"escape\": false,\n\t\t\"eval\": false,\n\t\t\"EvalError\": false,\n\t\t\"Float32Array\": false,\n\t\t\"Float64Array\": false,\n\t\t\"Function\": false,\n\t\t\"hasOwnProperty\": false,\n\t\t\"Infinity\": false,\n\t\t\"Int16Array\": false,\n\t\t\"Int32Array\": false,\n\t\t\"Int8Array\": false,\n\t\t\"isFinite\": false,\n\t\t\"isNaN\": false,\n\t\t\"isPrototypeOf\": false,\n\t\t\"JSON\": false,\n\t\t\"Map\": false,\n\t\t\"Math\": false,\n\t\t\"NaN\": false,\n\t\t\"Number\": false,\n\t\t\"Object\": false,\n\t\t\"parseFloat\": false,\n\t\t\"parseInt\": false,\n\t\t\"Promise\": false,\n\t\t\"propertyIsEnumerable\": false,\n\t\t\"Proxy\": false,\n\t\t\"RangeError\": false,\n\t\t\"ReferenceError\": false,\n\t\t\"Reflect\": false,\n\t\t\"RegExp\": false,\n\t\t\"Set\": false,\n\t\t\"String\": false,\n\t\t\"Symbol\": false,\n\t\t\"SyntaxError\": false,\n\t\t\"toLocaleString\": false,\n\t\t\"toString\": false,\n\t\t\"TypeError\": false,\n\t\t\"Uint16Array\": false,\n\t\t\"Uint32Array\": false,\n\t\t\"Uint8Array\": false,\n\t\t\"Uint8ClampedArray\": false,\n\t\t\"undefined\": false,\n\t\t\"unescape\": false,\n\t\t\"URIError\": false,\n\t\t\"valueOf\": false,\n\t\t\"WeakMap\": false,\n\t\t\"WeakSet\": false\n\t},\n\t\"es2017\": {\n\t\t\"Array\": false,\n\t\t\"ArrayBuffer\": false,\n\t\t\"Atomics\": false,\n\t\t\"Boolean\": false,\n\t\t\"constructor\": false,\n\t\t\"DataView\": false,\n\t\t\"Date\": false,\n\t\t\"decodeURI\": false,\n\t\t\"decodeURIComponent\": false,\n\t\t\"encodeURI\": false,\n\t\t\"encodeURIComponent\": false,\n\t\t\"Error\": false,\n\t\t\"escape\": false,\n\t\t\"eval\": false,\n\t\t\"EvalError\": false,\n\t\t\"Float32Array\": false,\n\t\t\"Float64Array\": false,\n\t\t\"Function\": false,\n\t\t\"hasOwnProperty\": false,\n\t\t\"Infinity\": false,\n\t\t\"Int16Array\": false,\n\t\t\"Int32Array\": false,\n\t\t\"Int8Array\": false,\n\t\t\"isFinite\": false,\n\t\t\"isNaN\": false,\n\t\t\"isPrototypeOf\": false,\n\t\t\"JSON\": false,\n\t\t\"Map\": false,\n\t\t\"Math\": false,\n\t\t\"NaN\": false,\n\t\t\"Number\": false,\n\t\t\"Object\": false,\n\t\t\"parseFloat\": false,\n\t\t\"parseInt\": false,\n\t\t\"Promise\": false,\n\t\t\"propertyIsEnumerable\": false,\n\t\t\"Proxy\": false,\n\t\t\"RangeError\": false,\n\t\t\"ReferenceError\": false,\n\t\t\"Reflect\": false,\n\t\t\"RegExp\": false,\n\t\t\"Set\": false,\n\t\t\"SharedArrayBuffer\": false,\n\t\t\"String\": false,\n\t\t\"Symbol\": false,\n\t\t\"SyntaxError\": false,\n\t\t\"toLocaleString\": false,\n\t\t\"toString\": false,\n\t\t\"TypeError\": false,\n\t\t\"Uint16Array\": false,\n\t\t\"Uint32Array\": false,\n\t\t\"Uint8Array\": false,\n\t\t\"Uint8ClampedArray\": false,\n\t\t\"undefined\": false,\n\t\t\"unescape\": false,\n\t\t\"URIError\": false,\n\t\t\"valueOf\": false,\n\t\t\"WeakMap\": false,\n\t\t\"WeakSet\": false\n\t},\n\t\"es2020\": {\n\t\t\"Array\": false,\n\t\t\"ArrayBuffer\": false,\n\t\t\"Atomics\": false,\n\t\t\"BigInt\": false,\n\t\t\"BigInt64Array\": false,\n\t\t\"BigUint64Array\": false,\n\t\t\"Boolean\": false,\n\t\t\"constructor\": false,\n\t\t\"DataView\": false,\n\t\t\"Date\": false,\n\t\t\"decodeURI\": false,\n\t\t\"decodeURIComponent\": false,\n\t\t\"encodeURI\": false,\n\t\t\"encodeURIComponent\": false,\n\t\t\"Error\": false,\n\t\t\"escape\": false,\n\t\t\"eval\": false,\n\t\t\"EvalError\": false,\n\t\t\"Float32Array\": false,\n\t\t\"Float64Array\": false,\n\t\t\"Function\": false,\n\t\t\"globalThis\": false,\n\t\t\"hasOwnProperty\": false,\n\t\t\"Infinity\": false,\n\t\t\"Int16Array\": false,\n\t\t\"Int32Array\": false,\n\t\t\"Int8Array\": false,\n\t\t\"isFinite\": false,\n\t\t\"isNaN\": false,\n\t\t\"isPrototypeOf\": false,\n\t\t\"JSON\": false,\n\t\t\"Map\": false,\n\t\t\"Math\": false,\n\t\t\"NaN\": false,\n\t\t\"Number\": false,\n\t\t\"Object\": false,\n\t\t\"parseFloat\": false,\n\t\t\"parseInt\": false,\n\t\t\"Promise\": false,\n\t\t\"propertyIsEnumerable\": false,\n\t\t\"Proxy\": false,\n\t\t\"RangeError\": false,\n\t\t\"ReferenceError\": false,\n\t\t\"Reflect\": false,\n\t\t\"RegExp\": false,\n\t\t\"Set\": false,\n\t\t\"SharedArrayBuffer\": false,\n\t\t\"String\": false,\n\t\t\"Symbol\": false,\n\t\t\"SyntaxError\": false,\n\t\t\"toLocaleString\": false,\n\t\t\"toString\": false,\n\t\t\"TypeError\": false,\n\t\t\"Uint16Array\": false,\n\t\t\"Uint32Array\": false,\n\t\t\"Uint8Array\": false,\n\t\t\"Uint8ClampedArray\": false,\n\t\t\"undefined\": false,\n\t\t\"unescape\": false,\n\t\t\"URIError\": false,\n\t\t\"valueOf\": false,\n\t\t\"WeakMap\": false,\n\t\t\"WeakSet\": false\n\t},\n\t\"es2021\": {\n\t\t\"AggregateError\": false,\n\t\t\"Array\": false,\n\t\t\"ArrayBuffer\": false,\n\t\t\"Atomics\": false,\n\t\t\"BigInt\": false,\n\t\t\"BigInt64Array\": false,\n\t\t\"BigUint64Array\": false,\n\t\t\"Boolean\": false,\n\t\t\"constructor\": false,\n\t\t\"DataView\": false,\n\t\t\"Date\": false,\n\t\t\"decodeURI\": false,\n\t\t\"decodeURIComponent\": false,\n\t\t\"encodeURI\": false,\n\t\t\"encodeURIComponent\": false,\n\t\t\"Error\": false,\n\t\t\"escape\": false,\n\t\t\"eval\": false,\n\t\t\"EvalError\": false,\n\t\t\"FinalizationRegistry\": false,\n\t\t\"Float32Array\": false,\n\t\t\"Float64Array\": false,\n\t\t\"Function\": false,\n\t\t\"globalThis\": false,\n\t\t\"hasOwnProperty\": false,\n\t\t\"Infinity\": false,\n\t\t\"Int16Array\": false,\n\t\t\"Int32Array\": false,\n\t\t\"Int8Array\": false,\n\t\t\"isFinite\": false,\n\t\t\"isNaN\": false,\n\t\t\"isPrototypeOf\": false,\n\t\t\"JSON\": false,\n\t\t\"Map\": false,\n\t\t\"Math\": false,\n\t\t\"NaN\": false,\n\t\t\"Number\": false,\n\t\t\"Object\": false,\n\t\t\"parseFloat\": false,\n\t\t\"parseInt\": false,\n\t\t\"Promise\": false,\n\t\t\"propertyIsEnumerable\": false,\n\t\t\"Proxy\": false,\n\t\t\"RangeError\": false,\n\t\t\"ReferenceError\": false,\n\t\t\"Reflect\": false,\n\t\t\"RegExp\": false,\n\t\t\"Set\": false,\n\t\t\"SharedArrayBuffer\": false,\n\t\t\"String\": false,\n\t\t\"Symbol\": false,\n\t\t\"SyntaxError\": false,\n\t\t\"toLocaleString\": false,\n\t\t\"toString\": false,\n\t\t\"TypeError\": false,\n\t\t\"Uint16Array\": false,\n\t\t\"Uint32Array\": false,\n\t\t\"Uint8Array\": false,\n\t\t\"Uint8ClampedArray\": false,\n\t\t\"undefined\": false,\n\t\t\"unescape\": false,\n\t\t\"URIError\": false,\n\t\t\"valueOf\": false,\n\t\t\"WeakMap\": false,\n\t\t\"WeakRef\": false,\n\t\t\"WeakSet\": false\n\t},\n\t\"browser\": {\n\t\t\"AbortController\": false,\n\t\t\"AbortSignal\": false,\n\t\t\"addEventListener\": false,\n\t\t\"alert\": false,\n\t\t\"AnalyserNode\": false,\n\t\t\"Animation\": false,\n\t\t\"AnimationEffectReadOnly\": false,\n\t\t\"AnimationEffectTiming\": false,\n\t\t\"AnimationEffectTimingReadOnly\": false,\n\t\t\"AnimationEvent\": false,\n\t\t\"AnimationPlaybackEvent\": false,\n\t\t\"AnimationTimeline\": false,\n\t\t\"applicationCache\": false,\n\t\t\"ApplicationCache\": false,\n\t\t\"ApplicationCacheErrorEvent\": false,\n\t\t\"atob\": false,\n\t\t\"Attr\": false,\n\t\t\"Audio\": false,\n\t\t\"AudioBuffer\": false,\n\t\t\"AudioBufferSourceNode\": false,\n\t\t\"AudioContext\": false,\n\t\t\"AudioDestinationNode\": false,\n\t\t\"AudioListener\": false,\n\t\t\"AudioNode\": false,\n\t\t\"AudioParam\": false,\n\t\t\"AudioProcessingEvent\": false,\n\t\t\"AudioScheduledSourceNode\": false,\n\t\t\"AudioWorkletGlobalScope\": false,\n\t\t\"AudioWorkletNode\": false,\n\t\t\"AudioWorkletProcessor\": false,\n\t\t\"BarProp\": false,\n\t\t\"BaseAudioContext\": false,\n\t\t\"BatteryManager\": false,\n\t\t\"BeforeUnloadEvent\": false,\n\t\t\"BiquadFilterNode\": false,\n\t\t\"Blob\": false,\n\t\t\"BlobEvent\": false,\n\t\t\"blur\": false,\n\t\t\"BroadcastChannel\": false,\n\t\t\"btoa\": false,\n\t\t\"BudgetService\": false,\n\t\t\"ByteLengthQueuingStrategy\": false,\n\t\t\"Cache\": false,\n\t\t\"caches\": false,\n\t\t\"CacheStorage\": false,\n\t\t\"cancelAnimationFrame\": false,\n\t\t\"cancelIdleCallback\": false,\n\t\t\"CanvasCaptureMediaStreamTrack\": false,\n\t\t\"CanvasGradient\": false,\n\t\t\"CanvasPattern\": false,\n\t\t\"CanvasRenderingContext2D\": false,\n\t\t\"ChannelMergerNode\": false,\n\t\t\"ChannelSplitterNode\": false,\n\t\t\"CharacterData\": false,\n\t\t\"clearInterval\": false,\n\t\t\"clearTimeout\": false,\n\t\t\"clientInformation\": false,\n\t\t\"ClipboardEvent\": false,\n\t\t\"ClipboardItem\": false,\n\t\t\"close\": false,\n\t\t\"closed\": false,\n\t\t\"CloseEvent\": false,\n\t\t\"Comment\": false,\n\t\t\"CompositionEvent\": false,\n\t\t\"confirm\": false,\n\t\t\"console\": false,\n\t\t\"ConstantSourceNode\": false,\n\t\t\"ConvolverNode\": false,\n\t\t\"CountQueuingStrategy\": false,\n\t\t\"createImageBitmap\": false,\n\t\t\"Credential\": false,\n\t\t\"CredentialsContainer\": false,\n\t\t\"crypto\": false,\n\t\t\"Crypto\": false,\n\t\t\"CryptoKey\": false,\n\t\t\"CSS\": false,\n\t\t\"CSSConditionRule\": false,\n\t\t\"CSSFontFaceRule\": false,\n\t\t\"CSSGroupingRule\": false,\n\t\t\"CSSImportRule\": false,\n\t\t\"CSSKeyframeRule\": false,\n\t\t\"CSSKeyframesRule\": false,\n\t\t\"CSSMatrixComponent\": false,\n\t\t\"CSSMediaRule\": false,\n\t\t\"CSSNamespaceRule\": false,\n\t\t\"CSSPageRule\": false,\n\t\t\"CSSPerspective\": false,\n\t\t\"CSSRotate\": false,\n\t\t\"CSSRule\": false,\n\t\t\"CSSRuleList\": false,\n\t\t\"CSSScale\": false,\n\t\t\"CSSSkew\": false,\n\t\t\"CSSSkewX\": false,\n\t\t\"CSSSkewY\": false,\n\t\t\"CSSStyleDeclaration\": false,\n\t\t\"CSSStyleRule\": false,\n\t\t\"CSSStyleSheet\": false,\n\t\t\"CSSSupportsRule\": false,\n\t\t\"CSSTransformValue\": false,\n\t\t\"CSSTranslate\": false,\n\t\t\"CustomElementRegistry\": false,\n\t\t\"customElements\": false,\n\t\t\"CustomEvent\": false,\n\t\t\"DataTransfer\": false,\n\t\t\"DataTransferItem\": false,\n\t\t\"DataTransferItemList\": false,\n\t\t\"defaultstatus\": false,\n\t\t\"defaultStatus\": false,\n\t\t\"DelayNode\": false,\n\t\t\"DeviceMotionEvent\": false,\n\t\t\"DeviceOrientationEvent\": false,\n\t\t\"devicePixelRatio\": false,\n\t\t\"dispatchEvent\": false,\n\t\t\"document\": false,\n\t\t\"Document\": false,\n\t\t\"DocumentFragment\": false,\n\t\t\"DocumentType\": false,\n\t\t\"DOMError\": false,\n\t\t\"DOMException\": false,\n\t\t\"DOMImplementation\": false,\n\t\t\"DOMMatrix\": false,\n\t\t\"DOMMatrixReadOnly\": false,\n\t\t\"DOMParser\": false,\n\t\t\"DOMPoint\": false,\n\t\t\"DOMPointReadOnly\": false,\n\t\t\"DOMQuad\": false,\n\t\t\"DOMRect\": false,\n\t\t\"DOMRectList\": false,\n\t\t\"DOMRectReadOnly\": false,\n\t\t\"DOMStringList\": false,\n\t\t\"DOMStringMap\": false,\n\t\t\"DOMTokenList\": false,\n\t\t\"DragEvent\": false,\n\t\t\"DynamicsCompressorNode\": false,\n\t\t\"Element\": false,\n\t\t\"ErrorEvent\": false,\n\t\t\"event\": false,\n\t\t\"Event\": false,\n\t\t\"EventSource\": false,\n\t\t\"EventTarget\": false,\n\t\t\"external\": false,\n\t\t\"fetch\": false,\n\t\t\"File\": false,\n\t\t\"FileList\": false,\n\t\t\"FileReader\": false,\n\t\t\"find\": false,\n\t\t\"focus\": false,\n\t\t\"FocusEvent\": false,\n\t\t\"FontFace\": false,\n\t\t\"FontFaceSetLoadEvent\": false,\n\t\t\"FormData\": false,\n\t\t\"FormDataEvent\": false,\n\t\t\"frameElement\": false,\n\t\t\"frames\": false,\n\t\t\"GainNode\": false,\n\t\t\"Gamepad\": false,\n\t\t\"GamepadButton\": false,\n\t\t\"GamepadEvent\": false,\n\t\t\"getComputedStyle\": false,\n\t\t\"getSelection\": false,\n\t\t\"HashChangeEvent\": false,\n\t\t\"Headers\": false,\n\t\t\"history\": false,\n\t\t\"History\": false,\n\t\t\"HTMLAllCollection\": false,\n\t\t\"HTMLAnchorElement\": false,\n\t\t\"HTMLAreaElement\": false,\n\t\t\"HTMLAudioElement\": false,\n\t\t\"HTMLBaseElement\": false,\n\t\t\"HTMLBodyElement\": false,\n\t\t\"HTMLBRElement\": false,\n\t\t\"HTMLButtonElement\": false,\n\t\t\"HTMLCanvasElement\": false,\n\t\t\"HTMLCollection\": false,\n\t\t\"HTMLContentElement\": false,\n\t\t\"HTMLDataElement\": false,\n\t\t\"HTMLDataListElement\": false,\n\t\t\"HTMLDetailsElement\": false,\n\t\t\"HTMLDialogElement\": false,\n\t\t\"HTMLDirectoryElement\": false,\n\t\t\"HTMLDivElement\": false,\n\t\t\"HTMLDListElement\": false,\n\t\t\"HTMLDocument\": false,\n\t\t\"HTMLElement\": false,\n\t\t\"HTMLEmbedElement\": false,\n\t\t\"HTMLFieldSetElement\": false,\n\t\t\"HTMLFontElement\": false,\n\t\t\"HTMLFormControlsCollection\": false,\n\t\t\"HTMLFormElement\": false,\n\t\t\"HTMLFrameElement\": false,\n\t\t\"HTMLFrameSetElement\": false,\n\t\t\"HTMLHeadElement\": false,\n\t\t\"HTMLHeadingElement\": false,\n\t\t\"HTMLHRElement\": false,\n\t\t\"HTMLHtmlElement\": false,\n\t\t\"HTMLIFrameElement\": false,\n\t\t\"HTMLImageElement\": false,\n\t\t\"HTMLInputElement\": false,\n\t\t\"HTMLLabelElement\": false,\n\t\t\"HTMLLegendElement\": false,\n\t\t\"HTMLLIElement\": false,\n\t\t\"HTMLLinkElement\": false,\n\t\t\"HTMLMapElement\": false,\n\t\t\"HTMLMarqueeElement\": false,\n\t\t\"HTMLMediaElement\": false,\n\t\t\"HTMLMenuElement\": false,\n\t\t\"HTMLMetaElement\": false,\n\t\t\"HTMLMeterElement\": false,\n\t\t\"HTMLModElement\": false,\n\t\t\"HTMLObjectElement\": false,\n\t\t\"HTMLOListElement\": false,\n\t\t\"HTMLOptGroupElement\": false,\n\t\t\"HTMLOptionElement\": false,\n\t\t\"HTMLOptionsCollection\": false,\n\t\t\"HTMLOutputElement\": false,\n\t\t\"HTMLParagraphElement\": false,\n\t\t\"HTMLParamElement\": false,\n\t\t\"HTMLPictureElement\": false,\n\t\t\"HTMLPreElement\": false,\n\t\t\"HTMLProgressElement\": false,\n\t\t\"HTMLQuoteElement\": false,\n\t\t\"HTMLScriptElement\": false,\n\t\t\"HTMLSelectElement\": false,\n\t\t\"HTMLShadowElement\": false,\n\t\t\"HTMLSlotElement\": false,\n\t\t\"HTMLSourceElement\": false,\n\t\t\"HTMLSpanElement\": false,\n\t\t\"HTMLStyleElement\": false,\n\t\t\"HTMLTableCaptionElement\": false,\n\t\t\"HTMLTableCellElement\": false,\n\t\t\"HTMLTableColElement\": false,\n\t\t\"HTMLTableElement\": false,\n\t\t\"HTMLTableRowElement\": false,\n\t\t\"HTMLTableSectionElement\": false,\n\t\t\"HTMLTemplateElement\": false,\n\t\t\"HTMLTextAreaElement\": false,\n\t\t\"HTMLTimeElement\": false,\n\t\t\"HTMLTitleElement\": false,\n\t\t\"HTMLTrackElement\": false,\n\t\t\"HTMLUListElement\": false,\n\t\t\"HTMLUnknownElement\": false,\n\t\t\"HTMLVideoElement\": false,\n\t\t\"IDBCursor\": false,\n\t\t\"IDBCursorWithValue\": false,\n\t\t\"IDBDatabase\": false,\n\t\t\"IDBFactory\": false,\n\t\t\"IDBIndex\": false,\n\t\t\"IDBKeyRange\": false,\n\t\t\"IDBObjectStore\": false,\n\t\t\"IDBOpenDBRequest\": false,\n\t\t\"IDBRequest\": false,\n\t\t\"IDBTransaction\": false,\n\t\t\"IDBVersionChangeEvent\": false,\n\t\t\"IdleDeadline\": false,\n\t\t\"IIRFilterNode\": false,\n\t\t\"Image\": false,\n\t\t\"ImageBitmap\": false,\n\t\t\"ImageBitmapRenderingContext\": false,\n\t\t\"ImageCapture\": false,\n\t\t\"ImageData\": false,\n\t\t\"indexedDB\": false,\n\t\t\"innerHeight\": false,\n\t\t\"innerWidth\": false,\n\t\t\"InputEvent\": false,\n\t\t\"IntersectionObserver\": false,\n\t\t\"IntersectionObserverEntry\": false,\n\t\t\"Intl\": false,\n\t\t\"isSecureContext\": false,\n\t\t\"KeyboardEvent\": false,\n\t\t\"KeyframeEffect\": false,\n\t\t\"KeyframeEffectReadOnly\": false,\n\t\t\"length\": false,\n\t\t\"localStorage\": false,\n\t\t\"location\": true,\n\t\t\"Location\": false,\n\t\t\"locationbar\": false,\n\t\t\"matchMedia\": false,\n\t\t\"MediaDeviceInfo\": false,\n\t\t\"MediaDevices\": false,\n\t\t\"MediaElementAudioSourceNode\": false,\n\t\t\"MediaEncryptedEvent\": false,\n\t\t\"MediaError\": false,\n\t\t\"MediaKeyMessageEvent\": false,\n\t\t\"MediaKeySession\": false,\n\t\t\"MediaKeyStatusMap\": false,\n\t\t\"MediaKeySystemAccess\": false,\n\t\t\"MediaList\": false,\n\t\t\"MediaMetadata\": false,\n\t\t\"MediaQueryList\": false,\n\t\t\"MediaQueryListEvent\": false,\n\t\t\"MediaRecorder\": false,\n\t\t\"MediaSettingsRange\": false,\n\t\t\"MediaSource\": false,\n\t\t\"MediaStream\": false,\n\t\t\"MediaStreamAudioDestinationNode\": false,\n\t\t\"MediaStreamAudioSourceNode\": false,\n\t\t\"MediaStreamEvent\": false,\n\t\t\"MediaStreamTrack\": false,\n\t\t\"MediaStreamTrackEvent\": false,\n\t\t\"menubar\": false,\n\t\t\"MessageChannel\": false,\n\t\t\"MessageEvent\": false,\n\t\t\"MessagePort\": false,\n\t\t\"MIDIAccess\": false,\n\t\t\"MIDIConnectionEvent\": false,\n\t\t\"MIDIInput\": false,\n\t\t\"MIDIInputMap\": false,\n\t\t\"MIDIMessageEvent\": false,\n\t\t\"MIDIOutput\": false,\n\t\t\"MIDIOutputMap\": false,\n\t\t\"MIDIPort\": false,\n\t\t\"MimeType\": false,\n\t\t\"MimeTypeArray\": false,\n\t\t\"MouseEvent\": false,\n\t\t\"moveBy\": false,\n\t\t\"moveTo\": false,\n\t\t\"MutationEvent\": false,\n\t\t\"MutationObserver\": false,\n\t\t\"MutationRecord\": false,\n\t\t\"name\": false,\n\t\t\"NamedNodeMap\": false,\n\t\t\"NavigationPreloadManager\": false,\n\t\t\"navigator\": false,\n\t\t\"Navigator\": false,\n\t\t\"NavigatorUAData\": false,\n\t\t\"NetworkInformation\": false,\n\t\t\"Node\": false,\n\t\t\"NodeFilter\": false,\n\t\t\"NodeIterator\": false,\n\t\t\"NodeList\": false,\n\t\t\"Notification\": false,\n\t\t\"OfflineAudioCompletionEvent\": false,\n\t\t\"OfflineAudioContext\": false,\n\t\t\"offscreenBuffering\": false,\n\t\t\"OffscreenCanvas\": true,\n\t\t\"OffscreenCanvasRenderingContext2D\": false,\n\t\t\"onabort\": true,\n\t\t\"onafterprint\": true,\n\t\t\"onanimationend\": true,\n\t\t\"onanimationiteration\": true,\n\t\t\"onanimationstart\": true,\n\t\t\"onappinstalled\": true,\n\t\t\"onauxclick\": true,\n\t\t\"onbeforeinstallprompt\": true,\n\t\t\"onbeforeprint\": true,\n\t\t\"onbeforeunload\": true,\n\t\t\"onblur\": true,\n\t\t\"oncancel\": true,\n\t\t\"oncanplay\": true,\n\t\t\"oncanplaythrough\": true,\n\t\t\"onchange\": true,\n\t\t\"onclick\": true,\n\t\t\"onclose\": true,\n\t\t\"oncontextmenu\": true,\n\t\t\"oncuechange\": true,\n\t\t\"ondblclick\": true,\n\t\t\"ondevicemotion\": true,\n\t\t\"ondeviceorientation\": true,\n\t\t\"ondeviceorientationabsolute\": true,\n\t\t\"ondrag\": true,\n\t\t\"ondragend\": true,\n\t\t\"ondragenter\": true,\n\t\t\"ondragleave\": true,\n\t\t\"ondragover\": true,\n\t\t\"ondragstart\": true,\n\t\t\"ondrop\": true,\n\t\t\"ondurationchange\": true,\n\t\t\"onemptied\": true,\n\t\t\"onended\": true,\n\t\t\"onerror\": true,\n\t\t\"onfocus\": true,\n\t\t\"ongotpointercapture\": true,\n\t\t\"onhashchange\": true,\n\t\t\"oninput\": true,\n\t\t\"oninvalid\": true,\n\t\t\"onkeydown\": true,\n\t\t\"onkeypress\": true,\n\t\t\"onkeyup\": true,\n\t\t\"onlanguagechange\": true,\n\t\t\"onload\": true,\n\t\t\"onloadeddata\": true,\n\t\t\"onloadedmetadata\": true,\n\t\t\"onloadstart\": true,\n\t\t\"onlostpointercapture\": true,\n\t\t\"onmessage\": true,\n\t\t\"onmessageerror\": true,\n\t\t\"onmousedown\": true,\n\t\t\"onmouseenter\": true,\n\t\t\"onmouseleave\": true,\n\t\t\"onmousemove\": true,\n\t\t\"onmouseout\": true,\n\t\t\"onmouseover\": true,\n\t\t\"onmouseup\": true,\n\t\t\"onmousewheel\": true,\n\t\t\"onoffline\": true,\n\t\t\"ononline\": true,\n\t\t\"onpagehide\": true,\n\t\t\"onpageshow\": true,\n\t\t\"onpause\": true,\n\t\t\"onplay\": true,\n\t\t\"onplaying\": true,\n\t\t\"onpointercancel\": true,\n\t\t\"onpointerdown\": true,\n\t\t\"onpointerenter\": true,\n\t\t\"onpointerleave\": true,\n\t\t\"onpointermove\": true,\n\t\t\"onpointerout\": true,\n\t\t\"onpointerover\": true,\n\t\t\"onpointerup\": true,\n\t\t\"onpopstate\": true,\n\t\t\"onprogress\": true,\n\t\t\"onratechange\": true,\n\t\t\"onrejectionhandled\": true,\n\t\t\"onreset\": true,\n\t\t\"onresize\": true,\n\t\t\"onscroll\": true,\n\t\t\"onsearch\": true,\n\t\t\"onseeked\": true,\n\t\t\"onseeking\": true,\n\t\t\"onselect\": true,\n\t\t\"onstalled\": true,\n\t\t\"onstorage\": true,\n\t\t\"onsubmit\": true,\n\t\t\"onsuspend\": true,\n\t\t\"ontimeupdate\": true,\n\t\t\"ontoggle\": true,\n\t\t\"ontransitionend\": true,\n\t\t\"onunhandledrejection\": true,\n\t\t\"onunload\": true,\n\t\t\"onvolumechange\": true,\n\t\t\"onwaiting\": true,\n\t\t\"onwheel\": true,\n\t\t\"open\": false,\n\t\t\"openDatabase\": false,\n\t\t\"opener\": false,\n\t\t\"Option\": false,\n\t\t\"origin\": false,\n\t\t\"OscillatorNode\": false,\n\t\t\"outerHeight\": false,\n\t\t\"outerWidth\": false,\n\t\t\"OverconstrainedError\": false,\n\t\t\"PageTransitionEvent\": false,\n\t\t\"pageXOffset\": false,\n\t\t\"pageYOffset\": false,\n\t\t\"PannerNode\": false,\n\t\t\"parent\": false,\n\t\t\"Path2D\": false,\n\t\t\"PaymentAddress\": false,\n\t\t\"PaymentRequest\": false,\n\t\t\"PaymentRequestUpdateEvent\": false,\n\t\t\"PaymentResponse\": false,\n\t\t\"performance\": false,\n\t\t\"Performance\": false,\n\t\t\"PerformanceEntry\": false,\n\t\t\"PerformanceLongTaskTiming\": false,\n\t\t\"PerformanceMark\": false,\n\t\t\"PerformanceMeasure\": false,\n\t\t\"PerformanceNavigation\": false,\n\t\t\"PerformanceNavigationTiming\": false,\n\t\t\"PerformanceObserver\": false,\n\t\t\"PerformanceObserverEntryList\": false,\n\t\t\"PerformancePaintTiming\": false,\n\t\t\"PerformanceResourceTiming\": false,\n\t\t\"PerformanceTiming\": false,\n\t\t\"PeriodicWave\": false,\n\t\t\"Permissions\": false,\n\t\t\"PermissionStatus\": false,\n\t\t\"personalbar\": false,\n\t\t\"PhotoCapabilities\": false,\n\t\t\"Plugin\": false,\n\t\t\"PluginArray\": false,\n\t\t\"PointerEvent\": false,\n\t\t\"PopStateEvent\": false,\n\t\t\"postMessage\": false,\n\t\t\"Presentation\": false,\n\t\t\"PresentationAvailability\": false,\n\t\t\"PresentationConnection\": false,\n\t\t\"PresentationConnectionAvailableEvent\": false,\n\t\t\"PresentationConnectionCloseEvent\": false,\n\t\t\"PresentationConnectionList\": false,\n\t\t\"PresentationReceiver\": false,\n\t\t\"PresentationRequest\": false,\n\t\t\"print\": false,\n\t\t\"ProcessingInstruction\": false,\n\t\t\"ProgressEvent\": false,\n\t\t\"PromiseRejectionEvent\": false,\n\t\t\"prompt\": false,\n\t\t\"PushManager\": false,\n\t\t\"PushSubscription\": false,\n\t\t\"PushSubscriptionOptions\": false,\n\t\t\"queueMicrotask\": false,\n\t\t\"RadioNodeList\": false,\n\t\t\"Range\": false,\n\t\t\"ReadableStream\": false,\n\t\t\"registerProcessor\": false,\n\t\t\"RemotePlayback\": false,\n\t\t\"removeEventListener\": false,\n\t\t\"reportError\": false,\n\t\t\"Request\": false,\n\t\t\"requestAnimationFrame\": false,\n\t\t\"requestIdleCallback\": false,\n\t\t\"resizeBy\": false,\n\t\t\"ResizeObserver\": false,\n\t\t\"ResizeObserverEntry\": false,\n\t\t\"resizeTo\": false,\n\t\t\"Response\": false,\n\t\t\"RTCCertificate\": false,\n\t\t\"RTCDataChannel\": false,\n\t\t\"RTCDataChannelEvent\": false,\n\t\t\"RTCDtlsTransport\": false,\n\t\t\"RTCIceCandidate\": false,\n\t\t\"RTCIceGatherer\": false,\n\t\t\"RTCIceTransport\": false,\n\t\t\"RTCPeerConnection\": false,\n\t\t\"RTCPeerConnectionIceEvent\": false,\n\t\t\"RTCRtpContributingSource\": false,\n\t\t\"RTCRtpReceiver\": false,\n\t\t\"RTCRtpSender\": false,\n\t\t\"RTCSctpTransport\": false,\n\t\t\"RTCSessionDescription\": false,\n\t\t\"RTCStatsReport\": false,\n\t\t\"RTCTrackEvent\": false,\n\t\t\"screen\": false,\n\t\t\"Screen\": false,\n\t\t\"screenLeft\": false,\n\t\t\"ScreenOrientation\": false,\n\t\t\"screenTop\": false,\n\t\t\"screenX\": false,\n\t\t\"screenY\": false,\n\t\t\"ScriptProcessorNode\": false,\n\t\t\"scroll\": false,\n\t\t\"scrollbars\": false,\n\t\t\"scrollBy\": false,\n\t\t\"scrollTo\": false,\n\t\t\"scrollX\": false,\n\t\t\"scrollY\": false,\n\t\t\"SecurityPolicyViolationEvent\": false,\n\t\t\"Selection\": false,\n\t\t\"self\": false,\n\t\t\"ServiceWorker\": false,\n\t\t\"ServiceWorkerContainer\": false,\n\t\t\"ServiceWorkerRegistration\": false,\n\t\t\"sessionStorage\": false,\n\t\t\"setInterval\": false,\n\t\t\"setTimeout\": false,\n\t\t\"ShadowRoot\": false,\n\t\t\"SharedWorker\": false,\n\t\t\"SourceBuffer\": false,\n\t\t\"SourceBufferList\": false,\n\t\t\"speechSynthesis\": false,\n\t\t\"SpeechSynthesisEvent\": false,\n\t\t\"SpeechSynthesisUtterance\": false,\n\t\t\"StaticRange\": false,\n\t\t\"status\": false,\n\t\t\"statusbar\": false,\n\t\t\"StereoPannerNode\": false,\n\t\t\"stop\": false,\n\t\t\"Storage\": false,\n\t\t\"StorageEvent\": false,\n\t\t\"StorageManager\": false,\n\t\t\"structuredClone\": false,\n\t\t\"styleMedia\": false,\n\t\t\"StyleSheet\": false,\n\t\t\"StyleSheetList\": false,\n\t\t\"SubmitEvent\": false,\n\t\t\"SubtleCrypto\": false,\n\t\t\"SVGAElement\": false,\n\t\t\"SVGAngle\": false,\n\t\t\"SVGAnimatedAngle\": false,\n\t\t\"SVGAnimatedBoolean\": false,\n\t\t\"SVGAnimatedEnumeration\": false,\n\t\t\"SVGAnimatedInteger\": false,\n\t\t\"SVGAnimatedLength\": false,\n\t\t\"SVGAnimatedLengthList\": false,\n\t\t\"SVGAnimatedNumber\": false,\n\t\t\"SVGAnimatedNumberList\": false,\n\t\t\"SVGAnimatedPreserveAspectRatio\": false,\n\t\t\"SVGAnimatedRect\": false,\n\t\t\"SVGAnimatedString\": false,\n\t\t\"SVGAnimatedTransformList\": false,\n\t\t\"SVGAnimateElement\": false,\n\t\t\"SVGAnimateMotionElement\": false,\n\t\t\"SVGAnimateTransformElement\": false,\n\t\t\"SVGAnimationElement\": false,\n\t\t\"SVGCircleElement\": false,\n\t\t\"SVGClipPathElement\": false,\n\t\t\"SVGComponentTransferFunctionElement\": false,\n\t\t\"SVGDefsElement\": false,\n\t\t\"SVGDescElement\": false,\n\t\t\"SVGDiscardElement\": false,\n\t\t\"SVGElement\": false,\n\t\t\"SVGEllipseElement\": false,\n\t\t\"SVGFEBlendElement\": false,\n\t\t\"SVGFEColorMatrixElement\": false,\n\t\t\"SVGFEComponentTransferElement\": false,\n\t\t\"SVGFECompositeElement\": false,\n\t\t\"SVGFEConvolveMatrixElement\": false,\n\t\t\"SVGFEDiffuseLightingElement\": false,\n\t\t\"SVGFEDisplacementMapElement\": false,\n\t\t\"SVGFEDistantLightElement\": false,\n\t\t\"SVGFEDropShadowElement\": false,\n\t\t\"SVGFEFloodElement\": false,\n\t\t\"SVGFEFuncAElement\": false,\n\t\t\"SVGFEFuncBElement\": false,\n\t\t\"SVGFEFuncGElement\": false,\n\t\t\"SVGFEFuncRElement\": false,\n\t\t\"SVGFEGaussianBlurElement\": false,\n\t\t\"SVGFEImageElement\": false,\n\t\t\"SVGFEMergeElement\": false,\n\t\t\"SVGFEMergeNodeElement\": false,\n\t\t\"SVGFEMorphologyElement\": false,\n\t\t\"SVGFEOffsetElement\": false,\n\t\t\"SVGFEPointLightElement\": false,\n\t\t\"SVGFESpecularLightingElement\": false,\n\t\t\"SVGFESpotLightElement\": false,\n\t\t\"SVGFETileElement\": false,\n\t\t\"SVGFETurbulenceElement\": false,\n\t\t\"SVGFilterElement\": false,\n\t\t\"SVGForeignObjectElement\": false,\n\t\t\"SVGGElement\": false,\n\t\t\"SVGGeometryElement\": false,\n\t\t\"SVGGradientElement\": false,\n\t\t\"SVGGraphicsElement\": false,\n\t\t\"SVGImageElement\": false,\n\t\t\"SVGLength\": false,\n\t\t\"SVGLengthList\": false,\n\t\t\"SVGLinearGradientElement\": false,\n\t\t\"SVGLineElement\": false,\n\t\t\"SVGMarkerElement\": false,\n\t\t\"SVGMaskElement\": false,\n\t\t\"SVGMatrix\": false,\n\t\t\"SVGMetadataElement\": false,\n\t\t\"SVGMPathElement\": false,\n\t\t\"SVGNumber\": false,\n\t\t\"SVGNumberList\": false,\n\t\t\"SVGPathElement\": false,\n\t\t\"SVGPatternElement\": false,\n\t\t\"SVGPoint\": false,\n\t\t\"SVGPointList\": false,\n\t\t\"SVGPolygonElement\": false,\n\t\t\"SVGPolylineElement\": false,\n\t\t\"SVGPreserveAspectRatio\": false,\n\t\t\"SVGRadialGradientElement\": false,\n\t\t\"SVGRect\": false,\n\t\t\"SVGRectElement\": false,\n\t\t\"SVGScriptElement\": false,\n\t\t\"SVGSetElement\": false,\n\t\t\"SVGStopElement\": false,\n\t\t\"SVGStringList\": false,\n\t\t\"SVGStyleElement\": false,\n\t\t\"SVGSVGElement\": false,\n\t\t\"SVGSwitchElement\": false,\n\t\t\"SVGSymbolElement\": false,\n\t\t\"SVGTextContentElement\": false,\n\t\t\"SVGTextElement\": false,\n\t\t\"SVGTextPathElement\": false,\n\t\t\"SVGTextPositioningElement\": false,\n\t\t\"SVGTitleElement\": false,\n\t\t\"SVGTransform\": false,\n\t\t\"SVGTransformList\": false,\n\t\t\"SVGTSpanElement\": false,\n\t\t\"SVGUnitTypes\": false,\n\t\t\"SVGUseElement\": false,\n\t\t\"SVGViewElement\": false,\n\t\t\"TaskAttributionTiming\": false,\n\t\t\"Text\": false,\n\t\t\"TextDecoder\": false,\n\t\t\"TextEncoder\": false,\n\t\t\"TextEvent\": false,\n\t\t\"TextMetrics\": false,\n\t\t\"TextTrack\": false,\n\t\t\"TextTrackCue\": false,\n\t\t\"TextTrackCueList\": false,\n\t\t\"TextTrackList\": false,\n\t\t\"TimeRanges\": false,\n\t\t\"toolbar\": false,\n\t\t\"top\": false,\n\t\t\"Touch\": false,\n\t\t\"TouchEvent\": false,\n\t\t\"TouchList\": false,\n\t\t\"TrackEvent\": false,\n\t\t\"TransformStream\": false,\n\t\t\"TransitionEvent\": false,\n\t\t\"TreeWalker\": false,\n\t\t\"UIEvent\": false,\n\t\t\"URL\": false,\n\t\t\"URLSearchParams\": false,\n\t\t\"ValidityState\": false,\n\t\t\"visualViewport\": false,\n\t\t\"VisualViewport\": false,\n\t\t\"VTTCue\": false,\n\t\t\"WaveShaperNode\": false,\n\t\t\"WebAssembly\": false,\n\t\t\"WebGL2RenderingContext\": false,\n\t\t\"WebGLActiveInfo\": false,\n\t\t\"WebGLBuffer\": false,\n\t\t\"WebGLContextEvent\": false,\n\t\t\"WebGLFramebuffer\": false,\n\t\t\"WebGLProgram\": false,\n\t\t\"WebGLQuery\": false,\n\t\t\"WebGLRenderbuffer\": false,\n\t\t\"WebGLRenderingContext\": false,\n\t\t\"WebGLSampler\": false,\n\t\t\"WebGLShader\": false,\n\t\t\"WebGLShaderPrecisionFormat\": false,\n\t\t\"WebGLSync\": false,\n\t\t\"WebGLTexture\": false,\n\t\t\"WebGLTransformFeedback\": false,\n\t\t\"WebGLUniformLocation\": false,\n\t\t\"WebGLVertexArrayObject\": false,\n\t\t\"WebSocket\": false,\n\t\t\"WheelEvent\": false,\n\t\t\"window\": false,\n\t\t\"Window\": false,\n\t\t\"Worker\": false,\n\t\t\"WritableStream\": false,\n\t\t\"XMLDocument\": false,\n\t\t\"XMLHttpRequest\": false,\n\t\t\"XMLHttpRequestEventTarget\": false,\n\t\t\"XMLHttpRequestUpload\": false,\n\t\t\"XMLSerializer\": false,\n\t\t\"XPathEvaluator\": false,\n\t\t\"XPathExpression\": false,\n\t\t\"XPathResult\": false,\n\t\t\"XSLTProcessor\": false\n\t},\n\t\"worker\": {\n\t\t\"addEventListener\": false,\n\t\t\"applicationCache\": false,\n\t\t\"atob\": false,\n\t\t\"Blob\": false,\n\t\t\"BroadcastChannel\": false,\n\t\t\"btoa\": false,\n\t\t\"Cache\": false,\n\t\t\"caches\": false,\n\t\t\"clearInterval\": false,\n\t\t\"clearTimeout\": false,\n\t\t\"close\": true,\n\t\t\"console\": false,\n\t\t\"CustomEvent\": false,\n\t\t\"ErrorEvent\": false,\n\t\t\"Event\": false,\n\t\t\"fetch\": false,\n\t\t\"FileReaderSync\": false,\n\t\t\"FormData\": false,\n\t\t\"Headers\": false,\n\t\t\"IDBCursor\": false,\n\t\t\"IDBCursorWithValue\": false,\n\t\t\"IDBDatabase\": false,\n\t\t\"IDBFactory\": false,\n\t\t\"IDBIndex\": false,\n\t\t\"IDBKeyRange\": false,\n\t\t\"IDBObjectStore\": false,\n\t\t\"IDBOpenDBRequest\": false,\n\t\t\"IDBRequest\": false,\n\t\t\"IDBTransaction\": false,\n\t\t\"IDBVersionChangeEvent\": false,\n\t\t\"ImageData\": false,\n\t\t\"importScripts\": true,\n\t\t\"indexedDB\": false,\n\t\t\"location\": false,\n\t\t\"MessageChannel\": false,\n\t\t\"MessageEvent\": false,\n\t\t\"MessagePort\": false,\n\t\t\"name\": false,\n\t\t\"navigator\": false,\n\t\t\"Notification\": false,\n\t\t\"onclose\": true,\n\t\t\"onconnect\": true,\n\t\t\"onerror\": true,\n\t\t\"onlanguagechange\": true,\n\t\t\"onmessage\": true,\n\t\t\"onoffline\": true,\n\t\t\"ononline\": true,\n\t\t\"onrejectionhandled\": true,\n\t\t\"onunhandledrejection\": true,\n\t\t\"performance\": false,\n\t\t\"Performance\": false,\n\t\t\"PerformanceEntry\": false,\n\t\t\"PerformanceMark\": false,\n\t\t\"PerformanceMeasure\": false,\n\t\t\"PerformanceNavigation\": false,\n\t\t\"PerformanceResourceTiming\": false,\n\t\t\"PerformanceTiming\": false,\n\t\t\"postMessage\": true,\n\t\t\"Promise\": false,\n\t\t\"queueMicrotask\": false,\n\t\t\"removeEventListener\": false,\n\t\t\"reportError\": false,\n\t\t\"Request\": false,\n\t\t\"Response\": false,\n\t\t\"self\": true,\n\t\t\"ServiceWorkerRegistration\": false,\n\t\t\"setInterval\": false,\n\t\t\"setTimeout\": false,\n\t\t\"TextDecoder\": false,\n\t\t\"TextEncoder\": false,\n\t\t\"URL\": false,\n\t\t\"URLSearchParams\": false,\n\t\t\"WebSocket\": false,\n\t\t\"Worker\": false,\n\t\t\"WorkerGlobalScope\": false,\n\t\t\"XMLHttpRequest\": false\n\t},\n\t\"node\": {\n\t\t\"__dirname\": false,\n\t\t\"__filename\": false,\n\t\t\"AbortController\": false,\n\t\t\"AbortSignal\": false,\n\t\t\"atob\": false,\n\t\t\"btoa\": false,\n\t\t\"Buffer\": false,\n\t\t\"clearImmediate\": false,\n\t\t\"clearInterval\": false,\n\t\t\"clearTimeout\": false,\n\t\t\"console\": false,\n\t\t\"DOMException\": false,\n\t\t\"Event\": false,\n\t\t\"EventTarget\": false,\n\t\t\"exports\": true,\n\t\t\"fetch\": false,\n\t\t\"FormData\": false,\n\t\t\"global\": false,\n\t\t\"Headers\": false,\n\t\t\"Intl\": false,\n\t\t\"MessageChannel\": false,\n\t\t\"MessageEvent\": false,\n\t\t\"MessagePort\": false,\n\t\t\"module\": false,\n\t\t\"performance\": false,\n\t\t\"process\": false,\n\t\t\"queueMicrotask\": false,\n\t\t\"Request\": false,\n\t\t\"require\": false,\n\t\t\"Response\": false,\n\t\t\"setImmediate\": false,\n\t\t\"setInterval\": false,\n\t\t\"setTimeout\": false,\n\t\t\"structuredClone\": false,\n\t\t\"TextDecoder\": false,\n\t\t\"TextEncoder\": false,\n\t\t\"URL\": false,\n\t\t\"URLSearchParams\": false\n\t},\n\t\"nodeBuiltin\": {\n\t\t\"AbortController\": false,\n\t\t\"AbortSignal\": false,\n\t\t\"atob\": false,\n\t\t\"btoa\": false,\n\t\t\"Buffer\": false,\n\t\t\"clearImmediate\": false,\n\t\t\"clearInterval\": false,\n\t\t\"clearTimeout\": false,\n\t\t\"console\": false,\n\t\t\"DOMException\": false,\n\t\t\"Event\": false,\n\t\t\"EventTarget\": false,\n\t\t\"fetch\": false,\n\t\t\"FormData\": false,\n\t\t\"global\": false,\n\t\t\"Headers\": false,\n\t\t\"Intl\": false,\n\t\t\"MessageChannel\": false,\n\t\t\"MessageEvent\": false,\n\t\t\"MessagePort\": false,\n\t\t\"performance\": false,\n\t\t\"process\": false,\n\t\t\"queueMicrotask\": false,\n\t\t\"Request\": false,\n\t\t\"Response\": false,\n\t\t\"setImmediate\": false,\n\t\t\"setInterval\": false,\n\t\t\"setTimeout\": false,\n\t\t\"structuredClone\": false,\n\t\t\"TextDecoder\": false,\n\t\t\"TextEncoder\": false,\n\t\t\"URL\": false,\n\t\t\"URLSearchParams\": false\n\t},\n\t\"commonjs\": {\n\t\t\"exports\": true,\n\t\t\"global\": false,\n\t\t\"module\": false,\n\t\t\"require\": false\n\t},\n\t\"amd\": {\n\t\t\"define\": false,\n\t\t\"require\": false\n\t},\n\t\"mocha\": {\n\t\t\"after\": false,\n\t\t\"afterEach\": false,\n\t\t\"before\": false,\n\t\t\"beforeEach\": false,\n\t\t\"context\": false,\n\t\t\"describe\": false,\n\t\t\"it\": false,\n\t\t\"mocha\": false,\n\t\t\"run\": false,\n\t\t\"setup\": false,\n\t\t\"specify\": false,\n\t\t\"suite\": false,\n\t\t\"suiteSetup\": false,\n\t\t\"suiteTeardown\": false,\n\t\t\"teardown\": false,\n\t\t\"test\": false,\n\t\t\"xcontext\": false,\n\t\t\"xdescribe\": false,\n\t\t\"xit\": false,\n\t\t\"xspecify\": false\n\t},\n\t\"jasmine\": {\n\t\t\"afterAll\": false,\n\t\t\"afterEach\": false,\n\t\t\"beforeAll\": false,\n\t\t\"beforeEach\": false,\n\t\t\"describe\": false,\n\t\t\"expect\": false,\n\t\t\"expectAsync\": false,\n\t\t\"fail\": false,\n\t\t\"fdescribe\": false,\n\t\t\"fit\": false,\n\t\t\"it\": false,\n\t\t\"jasmine\": false,\n\t\t\"pending\": false,\n\t\t\"runs\": false,\n\t\t\"spyOn\": false,\n\t\t\"spyOnAllFunctions\": false,\n\t\t\"spyOnProperty\": false,\n\t\t\"waits\": false,\n\t\t\"waitsFor\": false,\n\t\t\"xdescribe\": false,\n\t\t\"xit\": false\n\t},\n\t\"jest\": {\n\t\t\"afterAll\": false,\n\t\t\"afterEach\": false,\n\t\t\"beforeAll\": false,\n\t\t\"beforeEach\": false,\n\t\t\"describe\": false,\n\t\t\"expect\": false,\n\t\t\"fdescribe\": false,\n\t\t\"fit\": false,\n\t\t\"it\": false,\n\t\t\"jest\": false,\n\t\t\"pit\": false,\n\t\t\"require\": false,\n\t\t\"test\": false,\n\t\t\"xdescribe\": false,\n\t\t\"xit\": false,\n\t\t\"xtest\": false\n\t},\n\t\"qunit\": {\n\t\t\"asyncTest\": false,\n\t\t\"deepEqual\": false,\n\t\t\"equal\": false,\n\t\t\"expect\": false,\n\t\t\"module\": false,\n\t\t\"notDeepEqual\": false,\n\t\t\"notEqual\": false,\n\t\t\"notOk\": false,\n\t\t\"notPropEqual\": false,\n\t\t\"notStrictEqual\": false,\n\t\t\"ok\": false,\n\t\t\"propEqual\": false,\n\t\t\"QUnit\": false,\n\t\t\"raises\": false,\n\t\t\"start\": false,\n\t\t\"stop\": false,\n\t\t\"strictEqual\": false,\n\t\t\"test\": false,\n\t\t\"throws\": false\n\t},\n\t\"phantomjs\": {\n\t\t\"console\": true,\n\t\t\"exports\": true,\n\t\t\"phantom\": true,\n\t\t\"require\": true,\n\t\t\"WebPage\": true\n\t},\n\t\"couch\": {\n\t\t\"emit\": false,\n\t\t\"exports\": false,\n\t\t\"getRow\": false,\n\t\t\"log\": false,\n\t\t\"module\": false,\n\t\t\"provides\": false,\n\t\t\"require\": false,\n\t\t\"respond\": false,\n\t\t\"send\": false,\n\t\t\"start\": false,\n\t\t\"sum\": false\n\t},\n\t\"rhino\": {\n\t\t\"defineClass\": false,\n\t\t\"deserialize\": false,\n\t\t\"gc\": false,\n\t\t\"help\": false,\n\t\t\"importClass\": false,\n\t\t\"importPackage\": false,\n\t\t\"java\": false,\n\t\t\"load\": false,\n\t\t\"loadClass\": false,\n\t\t\"Packages\": false,\n\t\t\"print\": false,\n\t\t\"quit\": false,\n\t\t\"readFile\": false,\n\t\t\"readUrl\": false,\n\t\t\"runCommand\": false,\n\t\t\"seal\": false,\n\t\t\"serialize\": false,\n\t\t\"spawn\": false,\n\t\t\"sync\": false,\n\t\t\"toint32\": false,\n\t\t\"version\": false\n\t},\n\t\"nashorn\": {\n\t\t\"__DIR__\": false,\n\t\t\"__FILE__\": false,\n\t\t\"__LINE__\": false,\n\t\t\"com\": false,\n\t\t\"edu\": false,\n\t\t\"exit\": false,\n\t\t\"java\": false,\n\t\t\"Java\": false,\n\t\t\"javafx\": false,\n\t\t\"JavaImporter\": false,\n\t\t\"javax\": false,\n\t\t\"JSAdapter\": false,\n\t\t\"load\": false,\n\t\t\"loadWithNewGlobal\": false,\n\t\t\"org\": false,\n\t\t\"Packages\": false,\n\t\t\"print\": false,\n\t\t\"quit\": false\n\t},\n\t\"wsh\": {\n\t\t\"ActiveXObject\": false,\n\t\t\"CollectGarbage\": false,\n\t\t\"Debug\": false,\n\t\t\"Enumerator\": false,\n\t\t\"GetObject\": false,\n\t\t\"RuntimeObject\": false,\n\t\t\"ScriptEngine\": false,\n\t\t\"ScriptEngineBuildVersion\": false,\n\t\t\"ScriptEngineMajorVersion\": false,\n\t\t\"ScriptEngineMinorVersion\": false,\n\t\t\"VBArray\": false,\n\t\t\"WScript\": false,\n\t\t\"WSH\": false\n\t},\n\t\"jquery\": {\n\t\t\"$\": false,\n\t\t\"jQuery\": false\n\t},\n\t\"yui\": {\n\t\t\"YAHOO\": false,\n\t\t\"YAHOO_config\": false,\n\t\t\"YUI\": false,\n\t\t\"YUI_config\": false\n\t},\n\t\"shelljs\": {\n\t\t\"cat\": false,\n\t\t\"cd\": false,\n\t\t\"chmod\": false,\n\t\t\"config\": false,\n\t\t\"cp\": false,\n\t\t\"dirs\": false,\n\t\t\"echo\": false,\n\t\t\"env\": false,\n\t\t\"error\": false,\n\t\t\"exec\": false,\n\t\t\"exit\": false,\n\t\t\"find\": false,\n\t\t\"grep\": false,\n\t\t\"ln\": false,\n\t\t\"ls\": false,\n\t\t\"mkdir\": false,\n\t\t\"mv\": false,\n\t\t\"popd\": false,\n\t\t\"pushd\": false,\n\t\t\"pwd\": false,\n\t\t\"rm\": false,\n\t\t\"sed\": false,\n\t\t\"set\": false,\n\t\t\"target\": false,\n\t\t\"tempdir\": false,\n\t\t\"test\": false,\n\t\t\"touch\": false,\n\t\t\"which\": false\n\t},\n\t\"prototypejs\": {\n\t\t\"$\": false,\n\t\t\"$$\": false,\n\t\t\"$A\": false,\n\t\t\"$break\": false,\n\t\t\"$continue\": false,\n\t\t\"$F\": false,\n\t\t\"$H\": false,\n\t\t\"$R\": false,\n\t\t\"$w\": false,\n\t\t\"Abstract\": false,\n\t\t\"Ajax\": false,\n\t\t\"Autocompleter\": false,\n\t\t\"Builder\": false,\n\t\t\"Class\": false,\n\t\t\"Control\": false,\n\t\t\"Draggable\": false,\n\t\t\"Draggables\": false,\n\t\t\"Droppables\": false,\n\t\t\"Effect\": false,\n\t\t\"Element\": false,\n\t\t\"Enumerable\": false,\n\t\t\"Event\": false,\n\t\t\"Field\": false,\n\t\t\"Form\": false,\n\t\t\"Hash\": false,\n\t\t\"Insertion\": false,\n\t\t\"ObjectRange\": false,\n\t\t\"PeriodicalExecuter\": false,\n\t\t\"Position\": false,\n\t\t\"Prototype\": false,\n\t\t\"Scriptaculous\": false,\n\t\t\"Selector\": false,\n\t\t\"Sortable\": false,\n\t\t\"SortableObserver\": false,\n\t\t\"Sound\": false,\n\t\t\"Template\": false,\n\t\t\"Toggle\": false,\n\t\t\"Try\": false\n\t},\n\t\"meteor\": {\n\t\t\"$\": false,\n\t\t\"Accounts\": false,\n\t\t\"AccountsClient\": false,\n\t\t\"AccountsCommon\": false,\n\t\t\"AccountsServer\": false,\n\t\t\"App\": false,\n\t\t\"Assets\": false,\n\t\t\"Blaze\": false,\n\t\t\"check\": false,\n\t\t\"Cordova\": false,\n\t\t\"DDP\": false,\n\t\t\"DDPRateLimiter\": false,\n\t\t\"DDPServer\": false,\n\t\t\"Deps\": false,\n\t\t\"EJSON\": false,\n\t\t\"Email\": false,\n\t\t\"HTTP\": false,\n\t\t\"Log\": false,\n\t\t\"Match\": false,\n\t\t\"Meteor\": false,\n\t\t\"Mongo\": false,\n\t\t\"MongoInternals\": false,\n\t\t\"Npm\": false,\n\t\t\"Package\": false,\n\t\t\"Plugin\": false,\n\t\t\"process\": false,\n\t\t\"Random\": false,\n\t\t\"ReactiveDict\": false,\n\t\t\"ReactiveVar\": false,\n\t\t\"Router\": false,\n\t\t\"ServiceConfiguration\": false,\n\t\t\"Session\": false,\n\t\t\"share\": false,\n\t\t\"Spacebars\": false,\n\t\t\"Template\": false,\n\t\t\"Tinytest\": false,\n\t\t\"Tracker\": false,\n\t\t\"UI\": false,\n\t\t\"Utils\": false,\n\t\t\"WebApp\": false,\n\t\t\"WebAppInternals\": false\n\t},\n\t\"mongo\": {\n\t\t\"_isWindows\": false,\n\t\t\"_rand\": false,\n\t\t\"BulkWriteResult\": false,\n\t\t\"cat\": false,\n\t\t\"cd\": false,\n\t\t\"connect\": false,\n\t\t\"db\": false,\n\t\t\"getHostName\": false,\n\t\t\"getMemInfo\": false,\n\t\t\"hostname\": false,\n\t\t\"ISODate\": false,\n\t\t\"listFiles\": false,\n\t\t\"load\": false,\n\t\t\"ls\": false,\n\t\t\"md5sumFile\": false,\n\t\t\"mkdir\": false,\n\t\t\"Mongo\": false,\n\t\t\"NumberInt\": false,\n\t\t\"NumberLong\": false,\n\t\t\"ObjectId\": false,\n\t\t\"PlanCache\": false,\n\t\t\"print\": false,\n\t\t\"printjson\": false,\n\t\t\"pwd\": false,\n\t\t\"quit\": false,\n\t\t\"removeFile\": false,\n\t\t\"rs\": false,\n\t\t\"sh\": false,\n\t\t\"UUID\": false,\n\t\t\"version\": false,\n\t\t\"WriteResult\": false\n\t},\n\t\"applescript\": {\n\t\t\"$\": false,\n\t\t\"Application\": false,\n\t\t\"Automation\": false,\n\t\t\"console\": false,\n\t\t\"delay\": false,\n\t\t\"Library\": false,\n\t\t\"ObjC\": false,\n\t\t\"ObjectSpecifier\": false,\n\t\t\"Path\": false,\n\t\t\"Progress\": false,\n\t\t\"Ref\": false\n\t},\n\t\"serviceworker\": {\n\t\t\"addEventListener\": false,\n\t\t\"applicationCache\": false,\n\t\t\"atob\": false,\n\t\t\"Blob\": false,\n\t\t\"BroadcastChannel\": false,\n\t\t\"btoa\": false,\n\t\t\"Cache\": false,\n\t\t\"caches\": false,\n\t\t\"CacheStorage\": false,\n\t\t\"clearInterval\": false,\n\t\t\"clearTimeout\": false,\n\t\t\"Client\": false,\n\t\t\"clients\": false,\n\t\t\"Clients\": false,\n\t\t\"close\": true,\n\t\t\"console\": false,\n\t\t\"CustomEvent\": false,\n\t\t\"ErrorEvent\": false,\n\t\t\"Event\": false,\n\t\t\"ExtendableEvent\": false,\n\t\t\"ExtendableMessageEvent\": false,\n\t\t\"fetch\": false,\n\t\t\"FetchEvent\": false,\n\t\t\"FileReaderSync\": false,\n\t\t\"FormData\": false,\n\t\t\"Headers\": false,\n\t\t\"IDBCursor\": false,\n\t\t\"IDBCursorWithValue\": false,\n\t\t\"IDBDatabase\": false,\n\t\t\"IDBFactory\": false,\n\t\t\"IDBIndex\": false,\n\t\t\"IDBKeyRange\": false,\n\t\t\"IDBObjectStore\": false,\n\t\t\"IDBOpenDBRequest\": false,\n\t\t\"IDBRequest\": false,\n\t\t\"IDBTransaction\": false,\n\t\t\"IDBVersionChangeEvent\": false,\n\t\t\"ImageData\": false,\n\t\t\"importScripts\": false,\n\t\t\"indexedDB\": false,\n\t\t\"location\": false,\n\t\t\"MessageChannel\": false,\n\t\t\"MessageEvent\": false,\n\t\t\"MessagePort\": false,\n\t\t\"name\": false,\n\t\t\"navigator\": false,\n\t\t\"Notification\": false,\n\t\t\"onclose\": true,\n\t\t\"onconnect\": true,\n\t\t\"onerror\": true,\n\t\t\"onfetch\": true,\n\t\t\"oninstall\": true,\n\t\t\"onlanguagechange\": true,\n\t\t\"onmessage\": true,\n\t\t\"onmessageerror\": true,\n\t\t\"onnotificationclick\": true,\n\t\t\"onnotificationclose\": true,\n\t\t\"onoffline\": true,\n\t\t\"ononline\": true,\n\t\t\"onpush\": true,\n\t\t\"onpushsubscriptionchange\": true,\n\t\t\"onrejectionhandled\": true,\n\t\t\"onsync\": true,\n\t\t\"onunhandledrejection\": true,\n\t\t\"performance\": false,\n\t\t\"Performance\": false,\n\t\t\"PerformanceEntry\": false,\n\t\t\"PerformanceMark\": false,\n\t\t\"PerformanceMeasure\": false,\n\t\t\"PerformanceNavigation\": false,\n\t\t\"PerformanceResourceTiming\": false,\n\t\t\"PerformanceTiming\": false,\n\t\t\"postMessage\": true,\n\t\t\"Promise\": false,\n\t\t\"queueMicrotask\": false,\n\t\t\"registration\": false,\n\t\t\"removeEventListener\": false,\n\t\t\"Request\": false,\n\t\t\"Response\": false,\n\t\t\"self\": false,\n\t\t\"ServiceWorker\": false,\n\t\t\"ServiceWorkerContainer\": false,\n\t\t\"ServiceWorkerGlobalScope\": false,\n\t\t\"ServiceWorkerMessageEvent\": false,\n\t\t\"ServiceWorkerRegistration\": false,\n\t\t\"setInterval\": false,\n\t\t\"setTimeout\": false,\n\t\t\"skipWaiting\": false,\n\t\t\"TextDecoder\": false,\n\t\t\"TextEncoder\": false,\n\t\t\"URL\": false,\n\t\t\"URLSearchParams\": false,\n\t\t\"WebSocket\": false,\n\t\t\"WindowClient\": false,\n\t\t\"Worker\": false,\n\t\t\"WorkerGlobalScope\": false,\n\t\t\"XMLHttpRequest\": false\n\t},\n\t\"atomtest\": {\n\t\t\"advanceClock\": false,\n\t\t\"atom\": false,\n\t\t\"fakeClearInterval\": false,\n\t\t\"fakeClearTimeout\": false,\n\t\t\"fakeSetInterval\": false,\n\t\t\"fakeSetTimeout\": false,\n\t\t\"resetTimeouts\": false,\n\t\t\"waitsForPromise\": false\n\t},\n\t\"embertest\": {\n\t\t\"andThen\": false,\n\t\t\"click\": false,\n\t\t\"currentPath\": false,\n\t\t\"currentRouteName\": false,\n\t\t\"currentURL\": false,\n\t\t\"fillIn\": false,\n\t\t\"find\": false,\n\t\t\"findAll\": false,\n\t\t\"findWithAssert\": false,\n\t\t\"keyEvent\": false,\n\t\t\"pauseTest\": false,\n\t\t\"resumeTest\": false,\n\t\t\"triggerEvent\": false,\n\t\t\"visit\": false,\n\t\t\"wait\": false\n\t},\n\t\"protractor\": {\n\t\t\"$\": false,\n\t\t\"$$\": false,\n\t\t\"browser\": false,\n\t\t\"by\": false,\n\t\t\"By\": false,\n\t\t\"DartObject\": false,\n\t\t\"element\": false,\n\t\t\"protractor\": false\n\t},\n\t\"shared-node-browser\": {\n\t\t\"AbortController\": false,\n\t\t\"AbortSignal\": false,\n\t\t\"atob\": false,\n\t\t\"btoa\": false,\n\t\t\"clearInterval\": false,\n\t\t\"clearTimeout\": false,\n\t\t\"console\": false,\n\t\t\"DOMException\": false,\n\t\t\"Event\": false,\n\t\t\"EventTarget\": false,\n\t\t\"fetch\": false,\n\t\t\"FormData\": false,\n\t\t\"Headers\": false,\n\t\t\"Intl\": false,\n\t\t\"MessageChannel\": false,\n\t\t\"MessageEvent\": false,\n\t\t\"MessagePort\": false,\n\t\t\"performance\": false,\n\t\t\"queueMicrotask\": false,\n\t\t\"Request\": false,\n\t\t\"Response\": false,\n\t\t\"setInterval\": false,\n\t\t\"setTimeout\": false,\n\t\t\"structuredClone\": false,\n\t\t\"TextDecoder\": false,\n\t\t\"TextEncoder\": false,\n\t\t\"URL\": false,\n\t\t\"URLSearchParams\": false\n\t},\n\t\"webextensions\": {\n\t\t\"browser\": false,\n\t\t\"chrome\": false,\n\t\t\"opr\": false\n\t},\n\t\"greasemonkey\": {\n\t\t\"cloneInto\": false,\n\t\t\"createObjectIn\": false,\n\t\t\"exportFunction\": false,\n\t\t\"GM\": false,\n\t\t\"GM_addElement\": false,\n\t\t\"GM_addStyle\": false,\n\t\t\"GM_addValueChangeListener\": false,\n\t\t\"GM_deleteValue\": false,\n\t\t\"GM_download\": false,\n\t\t\"GM_getResourceText\": false,\n\t\t\"GM_getResourceURL\": false,\n\t\t\"GM_getTab\": false,\n\t\t\"GM_getTabs\": false,\n\t\t\"GM_getValue\": false,\n\t\t\"GM_info\": false,\n\t\t\"GM_listValues\": false,\n\t\t\"GM_log\": false,\n\t\t\"GM_notification\": false,\n\t\t\"GM_openInTab\": false,\n\t\t\"GM_registerMenuCommand\": false,\n\t\t\"GM_removeValueChangeListener\": false,\n\t\t\"GM_saveTab\": false,\n\t\t\"GM_setClipboard\": false,\n\t\t\"GM_setValue\": false,\n\t\t\"GM_unregisterMenuCommand\": false,\n\t\t\"GM_xmlhttpRequest\": false,\n\t\t\"unsafeWindow\": false\n\t},\n\t\"devtools\": {\n\t\t\"$\": false,\n\t\t\"$_\": false,\n\t\t\"$$\": false,\n\t\t\"$0\": false,\n\t\t\"$1\": false,\n\t\t\"$2\": false,\n\t\t\"$3\": false,\n\t\t\"$4\": false,\n\t\t\"$x\": false,\n\t\t\"chrome\": false,\n\t\t\"clear\": false,\n\t\t\"copy\": false,\n\t\t\"debug\": false,\n\t\t\"dir\": false,\n\t\t\"dirxml\": false,\n\t\t\"getEventListeners\": false,\n\t\t\"inspect\": false,\n\t\t\"keys\": false,\n\t\t\"monitor\": false,\n\t\t\"monitorEvents\": false,\n\t\t\"profile\": false,\n\t\t\"profileEnd\": false,\n\t\t\"queryObjects\": false,\n\t\t\"table\": false,\n\t\t\"undebug\": false,\n\t\t\"unmonitor\": false,\n\t\t\"unmonitorEvents\": false,\n\t\t\"values\": false\n\t}\n}\n/license\u0004]MIT License\n\nCopyright (c) Sindre Sorhus <sindresorhus@gmail.com> (https://sindresorhus.com)\n\nPermission 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:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE 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.\n/package.json\u0003{\n\t\"name\": \"globals\",\n\t\"version\": \"13.20.0\",\n\t\"description\": \"Global identifiers from different JavaScript environments\",\n\t\"license\": \"MIT\",\n\t\"repository\": \"sindresorhus/globals\",\n\t\"funding\": \"https://github.com/sponsors/sindresorhus\",\n\t\"author\": {\n\t\t\"name\": \"Sindre Sorhus\",\n\t\t\"email\": \"sindresorhus@gmail.com\",\n\t\t\"url\": \"https://sindresorhus.com\"\n\t},\n\t\"engines\": {\n\t\t\"node\": \">=8\"\n\t},\n\t\"scripts\": {\n\t\t\"test\": \"xo && ava\"\n\t},\n\t\"files\": [\n\t\t\"index.js\",\n\t\t\"index.d.ts\",\n\t\t\"globals.json\"\n\t],\n\t\"keywords\": [\n\t\t\"globals\",\n\t\t\"global\",\n\t\t\"identifiers\",\n\t\t\"variables\",\n\t\t\"vars\",\n\t\t\"jshint\",\n\t\t\"eslint\",\n\t\t\"environments\"\n\t],\n\t\"dependencies\": {\n\t\t\"type-fest\": \"^0.20.2\"\n\t},\n\t\"devDependencies\": {\n\t\t\"ava\": \"^2.4.0\",\n\t\t\"tsd\": \"^0.14.0\",\n\t\t\"xo\": \"^0.36.1\"\n\t},\n\t\"xo\": {\n\t\t\"ignores\": [\n\t\t\t\"get-browser-globals.js\"\n\t\t],\n\t\t\"rules\": {\n\t\t\t\"node/no-unsupported-features/es-syntax\": \"off\"\n\t\t}\n\t},\n\t\"tsd\": {\n\t\t\"compilerOptions\": {\n\t\t\t\"resolveJsonModule\": true\n\t\t}\n\t}\n}\n/index.d.tsĥimport {ReadonlyDeep} from 'type-fest';\nimport globalsJson = require('./globals.json');\n\ndeclare const globals: ReadonlyDeep<typeof globalsJson>;\n\nexport = globals;\n/readme.md\b.# globals\n\n> Global identifiers from different JavaScript environments\n\nIt's just a [JSON file](globals.json), so use it in any environment.\n\nThis package is used by ESLint.\n\n**This package [no longer accepts](https://github.com/sindresorhus/globals/issues/82) new environments. If you need it for ESLint, just [create a plugin](http://eslint.org/docs/developer-guide/working-with-plugins#environments-in-plugins).**\n\n## Install\n\n```\n$ npm install globals\n```\n\n## Usage\n\n```js\nconst globals = require('globals');\n\nconsole.log(globals.browser);\n/*\n{\n\taddEventListener: false,\n\tapplicationCache: false,\n\tArrayBuffer: false,\n\tatob: false,\n\t…\n}\n*/\n```\n\nEach global is given a value of `true` or `false`. A value of `true` indicates that the variable may be overwritten. A value of `false` indicates that the variable should be considered read-only. This information is used by static analysis tools to flag incorrect behavior. We assume all variables should be `false` unless we hear otherwise.\n\nFor Node.js this package provides two sets of globals:\n\n- `globals.nodeBuiltin`: Globals available to all code running in Node.js.\n\tThese will usually be available as properties on the `global` object and include `process`, `Buffer`, but not CommonJS arguments like `require`.\n\tSee: https://nodejs.org/api/globals.html\n- `globals.node`: A combination of the globals from `nodeBuiltin` plus all CommonJS arguments (\"CommonJS module scope\").\n\tSee: https://nodejs.org/api/modules.html#modules_the_module_scope\n\nWhen analyzing code that is known to run outside of a CommonJS wrapper, for example, JavaScript modules, `nodeBuiltin` can find accidental CommonJS references.\n\n---\n\n<div align=\"center\">\n\t<b>\n\t\t<a href=\"https://tidelift.com/subscription/pkg/npm-globals?utm_source=npm-globals&utm_medium=referral&utm_campaign=readme\">Get professional support for this package with a Tidelift subscription</a>\n\t</b>\n\t<br>\n\t<sub>\n\t\tTidelift helps make open source sustainable for maintainers while giving companies<br>assurances about security, maintenance, and licensing for their dependencies.\n\t</sub>\n</div>\n/index.js:'use strict';\nmodule.exports = require('./globals.json');\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/Z2xvYmJ5QDEzLjEuMw==",
    "content": "/utilities.js\u0001import {fileURLToPath} from 'node:url';\nimport {Transform} from 'node:stream';\n\nexport const toPath = urlOrPath => urlOrPath instanceof URL ? fileURLToPath(urlOrPath) : urlOrPath;\n\nexport class FilterStream extends Transform {\n\tconstructor(filter) {\n\t\tsuper({\n\t\t\tobjectMode: true,\n\t\t\ttransform(data, encoding, callback) {\n\t\t\t\tcallback(undefined, filter(data) ? data : undefined);\n\t\t\t},\n\t\t});\n\t}\n}\n\nexport const isNegativePattern = pattern => pattern[0] === '!';\n/index.d.ts\u001bimport {URL} from 'node:url'; // TODO: Remove this when https://github.com/DefinitelyTyped/DefinitelyTyped/issues/34960 is fixed.\nimport {Options as FastGlobOptions, Entry} from 'fast-glob';\n\nexport type GlobEntry = Entry;\n\nexport interface GlobTask {\n\treadonly patterns: string[];\n\treadonly options: Options;\n}\n\nexport type ExpandDirectoriesOption =\n\t| boolean\n\t| readonly string[]\n\t| {files?: readonly string[]; extensions?: readonly string[]};\n\ntype FastGlobOptionsWithoutCwd = Omit<FastGlobOptions, 'cwd'>;\n\nexport interface Options extends FastGlobOptionsWithoutCwd {\n\t/**\n\tIf set to `true`, `globby` will automatically glob directories for you. If you define an `Array` it will only glob files that matches the patterns inside the `Array`. You can also define an `Object` with `files` and `extensions` like in the example below.\n\n\tNote that if you set this option to `false`, you won't get back matched directories unless you set `onlyFiles: false`.\n\n\t@default true\n\n\t@example\n\t```\n\timport {globby} from 'globby';\n\n\tconst paths = await globby('images', {\n\t\texpandDirectories: {\n\t\t\tfiles: ['cat', 'unicorn', '*.jpg'],\n\t\t\textensions: ['png']\n\t\t}\n\t});\n\n\tconsole.log(paths);\n\t//=> ['cat.png', 'unicorn.png', 'cow.jpg', 'rainbow.jpg']\n\t```\n\t*/\n\treadonly expandDirectories?: ExpandDirectoriesOption;\n\n\t/**\n\tRespect ignore patterns in `.gitignore` files that apply to the globbed files.\n\n\t@default false\n\t*/\n\treadonly gitignore?: boolean;\n\n\t/**\n\tGlob patterns to look for ignore files, which are then used to ignore globbed files.\n\n\tThis is a more generic form of the `gitignore` option, allowing you to find ignore files with a [compatible syntax](http://git-scm.com/docs/gitignore). For instance, this works with Babel's `.babelignore`, Prettier's `.prettierignore`, or ESLint's `.eslintignore` files.\n\n\t@default undefined\n\t*/\n\treadonly ignoreFiles?: string | readonly string[];\n\n\t/**\n\tThe current working directory in which to search.\n\n\t@default process.cwd()\n\t*/\n\treadonly cwd?: URL | string;\n}\n\nexport interface GitignoreOptions {\n\treadonly cwd?: URL | string;\n}\n\nexport type GlobbyFilterFunction = (path: URL | string) => boolean;\n\n/**\nFind files and directories using glob patterns.\n\nNote that glob patterns can only contain forward-slashes, not backward-slashes, so if you want to construct a glob pattern from path components, you need to use `path.posix.join()` instead of `path.join()`.\n\n@param patterns - See the supported [glob patterns](https://github.com/sindresorhus/globby#globbing-patterns).\n@param options - See the [`fast-glob` options](https://github.com/mrmlnc/fast-glob#options-3) in addition to the ones in this package.\n@returns The matching paths.\n\n@example\n```\nimport {globby} from 'globby';\n\nconst paths = await globby(['*', '!cake']);\n\nconsole.log(paths);\n//=> ['unicorn', 'rainbow']\n```\n*/\nexport function globby(\n\tpatterns: string | readonly string[],\n\toptions: Options & {objectMode: true}\n): Promise<GlobEntry[]>;\nexport function globby(\n\tpatterns: string | readonly string[],\n\toptions?: Options\n): Promise<string[]>;\n\n/**\nFind files and directories using glob patterns.\n\nNote that glob patterns can only contain forward-slashes, not backward-slashes, so if you want to construct a glob pattern from path components, you need to use `path.posix.join()` instead of `path.join()`.\n\n@param patterns - See the supported [glob patterns](https://github.com/sindresorhus/globby#globbing-patterns).\n@param options - See the [`fast-glob` options](https://github.com/mrmlnc/fast-glob#options-3) in addition to the ones in this package.\n@returns The matching paths.\n*/\nexport function globbySync(\n\tpatterns: string | readonly string[],\n\toptions: Options & {objectMode: true}\n): GlobEntry[];\nexport function globbySync(\n\tpatterns: string | readonly string[],\n\toptions?: Options\n): string[];\n\n/**\nFind files and directories using glob patterns.\n\nNote that glob patterns can only contain forward-slashes, not backward-slashes, so if you want to construct a glob pattern from path components, you need to use `path.posix.join()` instead of `path.join()`.\n\n@param patterns - See the supported [glob patterns](https://github.com/sindresorhus/globby#globbing-patterns).\n@param options - See the [`fast-glob` options](https://github.com/mrmlnc/fast-glob#options-3) in addition to the ones in this package.\n@returns The stream of matching paths.\n\n@example\n```\nimport {globbyStream} from 'globby';\n\nfor await (const path of globbyStream('*.tmp')) {\n\tconsole.log(path);\n}\n```\n*/\nexport function globbyStream(\n\tpatterns: string | readonly string[],\n\toptions?: Options\n): NodeJS.ReadableStream;\n\n/**\nNote that you should avoid running the same tasks multiple times as they contain a file system cache. Instead, run this method each time to ensure file system changes are taken into consideration.\n\n@param patterns - See the supported [glob patterns](https://github.com/sindresorhus/globby#globbing-patterns).\n@param options - See the [`fast-glob` options](https://github.com/mrmlnc/fast-glob#options-3) in addition to the ones in this package.\n@returns An object in the format `{pattern: string, options: object}`, which can be passed as arguments to [`fast-glob`](https://github.com/mrmlnc/fast-glob). This is useful for other globbing-related packages.\n*/\nexport function generateGlobTasks(\n\tpatterns: string | readonly string[],\n\toptions?: Options\n): Promise<GlobTask[]>;\n\n/**\n@see generateGlobTasks\n\n@returns An object in the format `{pattern: string, options: object}`, which can be passed as arguments to [`fast-glob`](https://github.com/mrmlnc/fast-glob). This is useful for other globbing-related packages.\n*/\nexport function generateGlobTasksSync(\n\tpatterns: string | readonly string[],\n\toptions?: Options\n): GlobTask[];\n\n/**\nNote that the options affect the results.\n\nThis function is backed by [`fast-glob`](https://github.com/mrmlnc/fast-glob#isdynamicpatternpattern-options).\n\n@param patterns - See the supported [glob patterns](https://github.com/sindresorhus/globby#globbing-patterns).\n@param options - See the [`fast-glob` options](https://github.com/mrmlnc/fast-glob#options-3).\n@returns Whether there are any special glob characters in the `patterns`.\n*/\nexport function isDynamicPattern(\n\tpatterns: string | readonly string[],\n\toptions?: FastGlobOptionsWithoutCwd & {\n\t\t/**\n\t\tThe current working directory in which to search.\n\n\t\t@default process.cwd()\n\t\t*/\n\t\treadonly cwd?: URL | string;\n\t}\n): boolean;\n\n/**\n`.gitignore` files matched by the ignore config are not used for the resulting filter function.\n\n@returns A filter function indicating whether a given path is ignored via a `.gitignore` file.\n\n@example\n```\nimport {isGitIgnored} from 'globby';\n\nconst isIgnored = await isGitIgnored();\n\nconsole.log(isIgnored('some/file'));\n```\n*/\nexport function isGitIgnored(options?: GitignoreOptions): Promise<GlobbyFilterFunction>;\n\n/**\n@see isGitIgnored\n\n@returns A filter function indicating whether a given path is ignored via a `.gitignore` file.\n*/\nexport function isGitIgnoredSync(options?: GitignoreOptions): GlobbyFilterFunction;\n/readme.md\u0017# globby\n\n> User-friendly glob matching\n\nBased on [`fast-glob`](https://github.com/mrmlnc/fast-glob) but adds a bunch of useful features.\n\n## Features\n\n- Promise API\n- Multiple patterns\n- Negated patterns: `['foo*', '!foobar']`\n- Expands directories: `foo` → `foo/**/*`\n- Supports `.gitignore` and similar ignore config files\n- Supports `URL` as `cwd`\n\n## Install\n\n```\n$ npm install globby\n```\n\n## Usage\n\n```\n├── unicorn\n├── cake\n└── rainbow\n```\n\n```js\nimport {globby} from 'globby';\n\nconst paths = await globby(['*', '!cake']);\n\nconsole.log(paths);\n//=> ['unicorn', 'rainbow']\n```\n\n## API\n\nNote that glob patterns can only contain forward-slashes, not backward-slashes, so if you want to construct a glob pattern from path components, you need to use `path.posix.join()` instead of `path.join()`.\n\n### globby(patterns, options?)\n\nReturns a `Promise<string[]>` of matching paths.\n\n#### patterns\n\nType: `string | string[]`\n\nSee supported `minimatch` [patterns](https://github.com/isaacs/minimatch#usage).\n\n#### options\n\nType: `object`\n\nSee the [`fast-glob` options](https://github.com/mrmlnc/fast-glob#options-3) in addition to the ones below.\n\n##### expandDirectories\n\nType: `boolean | string[] | object`\\\nDefault: `true`\n\nIf set to `true`, `globby` will automatically glob directories for you. If you define an `Array` it will only glob files that matches the patterns inside the `Array`. You can also define an `object` with `files` and `extensions` like below:\n\n```js\nimport {globby} from 'globby';\n\n(async () => {\n\tconst paths = await globby('images', {\n\t\texpandDirectories: {\n\t\t\tfiles: ['cat', 'unicorn', '*.jpg'],\n\t\t\textensions: ['png']\n\t\t}\n\t});\n\n\tconsole.log(paths);\n\t//=> ['cat.png', 'unicorn.png', 'cow.jpg', 'rainbow.jpg']\n})();\n```\n\nNote that if you set this option to `false`, you won't get back matched directories unless you set `onlyFiles: false`.\n\n##### gitignore\n\nType: `boolean`\\\nDefault: `false`\n\nRespect ignore patterns in `.gitignore` files that apply to the globbed files.\n\n##### ignoreFiles\n\nType: `string | string[]`\\\nDefault: `undefined`\n\nGlob patterns to look for ignore files, which are then used to ignore globbed files.\n\nThis is a more generic form of the `gitignore` option, allowing you to find ignore files with a [compatible syntax](http://git-scm.com/docs/gitignore). For instance, this works with Babel's `.babelignore`, Prettier's `.prettierignore`, or ESLint's `.eslintignore` files.\n\n### globbySync(patterns, options?)\n\nReturns `string[]` of matching paths.\n\n### globbyStream(patterns, options?)\n\nReturns a [`stream.Readable`](https://nodejs.org/api/stream.html#stream_readable_streams) of matching paths.\n\nSince Node.js 10, [readable streams are iterable](https://nodejs.org/api/stream.html#stream_readable_symbol_asynciterator), so you can loop over glob matches in a [`for await...of` loop](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for-await...of) like this:\n\n```js\nimport {globbyStream} from 'globby';\n\n(async () => {\n\tfor await (const path of globbyStream('*.tmp')) {\n\t\tconsole.log(path);\n\t}\n})();\n```\n\n### generateGlobTasks(patterns, options?)\n\nReturns an `Promise<object[]>` in the format `{patterns: string[], options: Object}`, which can be passed as arguments to [`fast-glob`](https://github.com/mrmlnc/fast-glob). This is useful for other globbing-related packages.\n\nNote that you should avoid running the same tasks multiple times as they contain a file system cache. Instead, run this method each time to ensure file system changes are taken into consideration.\n\n### generateGlobTasksSync(patterns, options?)\n\nReturns an `object[]` in the format `{patterns: string[], options: Object}`, which can be passed as arguments to [`fast-glob`](https://github.com/mrmlnc/fast-glob). This is useful for other globbing-related packages.\n\nTakes the same arguments as `generateGlobTasks`.\n\n### isDynamicPattern(patterns, options?)\n\nReturns a `boolean` of whether there are any special glob characters in the `patterns`.\n\nNote that the options affect the results.\n\nThis function is backed by [`fast-glob`](https://github.com/mrmlnc/fast-glob#isdynamicpatternpattern-options).\n\n### isGitIgnored(options?)\n\nReturns a `Promise<(path: URL | string) => boolean>` indicating whether a given path is ignored via a `.gitignore` file.\n\nTakes `cwd?: URL | string` as options.\n\n```js\nimport {isGitIgnored} from 'globby';\n\nconst isIgnored = await isGitIgnored();\n\nconsole.log(isIgnored('some/file'));\n```\n\n### isGitIgnoredSync(options?)\n\nReturns a `(path: URL | string) => boolean` indicating whether a given path is ignored via a `.gitignore` file.\n\nTakes `cwd?: URL | string` as options.\n\n## Globbing patterns\n\nJust a quick overview.\n\n- `*` matches any number of characters, but not `/`\n- `?` matches a single character, but not `/`\n- `**` matches any number of characters, including `/`, as long as it's the only thing in a path part\n- `{}` allows for a comma-separated list of \"or\" expressions\n- `!` at the beginning of a pattern will negate the match\n\n[Various patterns and expected matches.](https://github.com/sindresorhus/multimatch/blob/main/test/test.js)\n\n## globby for enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of globby and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-globby?utm_source=npm-globby&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## Related\n\n- [multimatch](https://github.com/sindresorhus/multimatch) - Match against a list instead of the filesystem\n- [matcher](https://github.com/sindresorhus/matcher) - Simple wildcard matching\n- [del](https://github.com/sindresorhus/del) - Delete files and directories\n- [make-dir](https://github.com/sindresorhus/make-dir) - Make a directory and its parents if needed\n/license\u0004]MIT License\n\nCopyright (c) Sindre Sorhus <sindresorhus@gmail.com> (https://sindresorhus.com)\n\nPermission 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:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE 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.\n/ignore.js\n\u0010import process from 'node:process';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport fastGlob from 'fast-glob';\nimport gitIgnore from 'ignore';\nimport slash from 'slash';\nimport {toPath, isNegativePattern} from './utilities.js';\n\nconst ignoreFilesGlobOptions = {\n\tignore: [\n\t\t'**/node_modules',\n\t\t'**/flow-typed',\n\t\t'**/coverage',\n\t\t'**/.git',\n\t],\n\tabsolute: true,\n\tdot: true,\n};\n\nexport const GITIGNORE_FILES_PATTERN = '**/.gitignore';\n\nconst applyBaseToPattern = (pattern, base) => isNegativePattern(pattern)\n\t? '!' + path.posix.join(base, pattern.slice(1))\n\t: path.posix.join(base, pattern);\n\nconst parseIgnoreFile = (file, cwd) => {\n\tconst base = slash(path.relative(cwd, path.dirname(file.filePath)));\n\n\treturn file.content\n\t\t.split(/\\r?\\n/)\n\t\t.filter(line => line && !line.startsWith('#'))\n\t\t.map(pattern => applyBaseToPattern(pattern, base));\n};\n\nconst toRelativePath = (fileOrDirectory, cwd) => {\n\tcwd = slash(cwd);\n\tif (path.isAbsolute(fileOrDirectory)) {\n\t\tif (slash(fileOrDirectory).startsWith(cwd)) {\n\t\t\treturn path.relative(cwd, fileOrDirectory);\n\t\t}\n\n\t\tthrow new Error(`Path ${fileOrDirectory} is not in cwd ${cwd}`);\n\t}\n\n\treturn fileOrDirectory;\n};\n\nconst getIsIgnoredPredicate = (files, cwd) => {\n\tconst patterns = files.flatMap(file => parseIgnoreFile(file, cwd));\n\tconst ignores = gitIgnore().add(patterns);\n\n\treturn fileOrDirectory => {\n\t\tfileOrDirectory = toPath(fileOrDirectory);\n\t\tfileOrDirectory = toRelativePath(fileOrDirectory, cwd);\n\t\treturn fileOrDirectory ? ignores.ignores(slash(fileOrDirectory)) : false;\n\t};\n};\n\nconst normalizeOptions = (options = {}) => ({\n\tcwd: toPath(options.cwd) || process.cwd(),\n});\n\nexport const isIgnoredByIgnoreFiles = async (patterns, options) => {\n\tconst {cwd} = normalizeOptions(options);\n\n\tconst paths = await fastGlob(patterns, {cwd, ...ignoreFilesGlobOptions});\n\n\tconst files = await Promise.all(\n\t\tpaths.map(async filePath => ({\n\t\t\tfilePath,\n\t\t\tcontent: await fs.promises.readFile(filePath, 'utf8'),\n\t\t})),\n\t);\n\n\treturn getIsIgnoredPredicate(files, cwd);\n};\n\nexport const isIgnoredByIgnoreFilesSync = (patterns, options) => {\n\tconst {cwd} = normalizeOptions(options);\n\n\tconst paths = fastGlob.sync(patterns, {cwd, ...ignoreFilesGlobOptions});\n\n\tconst files = paths.map(filePath => ({\n\t\tfilePath,\n\t\tcontent: fs.readFileSync(filePath, 'utf8'),\n\t}));\n\n\treturn getIsIgnoredPredicate(files, cwd);\n};\n\nexport const isGitIgnored = options => isIgnoredByIgnoreFiles(GITIGNORE_FILES_PATTERN, options);\nexport const isGitIgnoredSync = options => isIgnoredByIgnoreFilesSync(GITIGNORE_FILES_PATTERN, options);\n/index.js\u0017Aimport fs from 'node:fs';\nimport nodePath from 'node:path';\nimport merge2 from 'merge2';\nimport fastGlob from 'fast-glob';\nimport dirGlob from 'dir-glob';\nimport {\n\tGITIGNORE_FILES_PATTERN,\n\tisIgnoredByIgnoreFiles,\n\tisIgnoredByIgnoreFilesSync,\n} from './ignore.js';\nimport {FilterStream, toPath, isNegativePattern} from './utilities.js';\n\nconst assertPatternsInput = patterns => {\n\tif (patterns.some(pattern => typeof pattern !== 'string')) {\n\t\tthrow new TypeError('Patterns must be a string or an array of strings');\n\t}\n};\n\nconst toPatternsArray = patterns => {\n\tpatterns = [...new Set([patterns].flat())];\n\tassertPatternsInput(patterns);\n\treturn patterns;\n};\n\nconst checkCwdOption = options => {\n\tif (!options.cwd) {\n\t\treturn;\n\t}\n\n\tlet stat;\n\ttry {\n\t\tstat = fs.statSync(options.cwd);\n\t} catch {\n\t\treturn;\n\t}\n\n\tif (!stat.isDirectory()) {\n\t\tthrow new Error('The `cwd` option must be a path to a directory');\n\t}\n};\n\nconst normalizeOptions = (options = {}) => {\n\toptions = {\n\t\tignore: [],\n\t\texpandDirectories: true,\n\t\t...options,\n\t\tcwd: toPath(options.cwd),\n\t};\n\n\tcheckCwdOption(options);\n\n\treturn options;\n};\n\nconst normalizeArguments = fn => async (patterns, options) => fn(toPatternsArray(patterns), normalizeOptions(options));\nconst normalizeArgumentsSync = fn => (patterns, options) => fn(toPatternsArray(patterns), normalizeOptions(options));\n\nconst getIgnoreFilesPatterns = options => {\n\tconst {ignoreFiles, gitignore} = options;\n\n\tconst patterns = ignoreFiles ? toPatternsArray(ignoreFiles) : [];\n\tif (gitignore) {\n\t\tpatterns.push(GITIGNORE_FILES_PATTERN);\n\t}\n\n\treturn patterns;\n};\n\nconst getFilter = async options => {\n\tconst ignoreFilesPatterns = getIgnoreFilesPatterns(options);\n\treturn createFilterFunction(\n\t\tignoreFilesPatterns.length > 0 && await isIgnoredByIgnoreFiles(ignoreFilesPatterns, {cwd: options.cwd}),\n\t);\n};\n\nconst getFilterSync = options => {\n\tconst ignoreFilesPatterns = getIgnoreFilesPatterns(options);\n\treturn createFilterFunction(\n\t\tignoreFilesPatterns.length > 0 && isIgnoredByIgnoreFilesSync(ignoreFilesPatterns, {cwd: options.cwd}),\n\t);\n};\n\nconst createFilterFunction = isIgnored => {\n\tconst seen = new Set();\n\n\treturn fastGlobResult => {\n\t\tconst path = fastGlobResult.path || fastGlobResult;\n\t\tconst pathKey = nodePath.normalize(path);\n\t\tconst seenOrIgnored = seen.has(pathKey) || (isIgnored && isIgnored(path));\n\t\tseen.add(pathKey);\n\t\treturn !seenOrIgnored;\n\t};\n};\n\nconst unionFastGlobResults = (results, filter) => results.flat().filter(fastGlobResult => filter(fastGlobResult));\nconst unionFastGlobStreams = (streams, filter) => merge2(streams).pipe(new FilterStream(fastGlobResult => filter(fastGlobResult)));\n\nconst convertNegativePatterns = (patterns, options) => {\n\tconst tasks = [];\n\n\twhile (patterns.length > 0) {\n\t\tconst index = patterns.findIndex(pattern => isNegativePattern(pattern));\n\n\t\tif (index === -1) {\n\t\t\ttasks.push({patterns, options});\n\t\t\tbreak;\n\t\t}\n\n\t\tconst ignorePattern = patterns[index].slice(1);\n\n\t\tfor (const task of tasks) {\n\t\t\ttask.options.ignore.push(ignorePattern);\n\t\t}\n\n\t\tif (index !== 0) {\n\t\t\ttasks.push({\n\t\t\t\tpatterns: patterns.slice(0, index),\n\t\t\t\toptions: {\n\t\t\t\t\t...options,\n\t\t\t\t\tignore: [\n\t\t\t\t\t\t...options.ignore,\n\t\t\t\t\t\tignorePattern,\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\n\t\tpatterns = patterns.slice(index + 1);\n\t}\n\n\treturn tasks;\n};\n\nconst getDirGlobOptions = (options, cwd) => ({\n\t...(cwd ? {cwd} : {}),\n\t...(Array.isArray(options) ? {files: options} : options),\n});\n\nconst generateTasks = async (patterns, options) => {\n\tconst globTasks = convertNegativePatterns(patterns, options);\n\n\tconst {cwd, expandDirectories} = options;\n\n\tif (!expandDirectories) {\n\t\treturn globTasks;\n\t}\n\n\tconst patternExpandOptions = getDirGlobOptions(expandDirectories, cwd);\n\tconst ignoreExpandOptions = cwd ? {cwd} : undefined;\n\n\treturn Promise.all(\n\t\tglobTasks.map(async task => {\n\t\t\tlet {patterns, options} = task;\n\n\t\t\t[\n\t\t\t\tpatterns,\n\t\t\t\toptions.ignore,\n\t\t\t] = await Promise.all([\n\t\t\t\tdirGlob(patterns, patternExpandOptions),\n\t\t\t\tdirGlob(options.ignore, ignoreExpandOptions),\n\t\t\t]);\n\n\t\t\treturn {patterns, options};\n\t\t}),\n\t);\n};\n\nconst generateTasksSync = (patterns, options) => {\n\tconst globTasks = convertNegativePatterns(patterns, options);\n\n\tconst {cwd, expandDirectories} = options;\n\n\tif (!expandDirectories) {\n\t\treturn globTasks;\n\t}\n\n\tconst patternExpandOptions = getDirGlobOptions(expandDirectories, cwd);\n\tconst ignoreExpandOptions = cwd ? {cwd} : undefined;\n\n\treturn globTasks.map(task => {\n\t\tlet {patterns, options} = task;\n\t\tpatterns = dirGlob.sync(patterns, patternExpandOptions);\n\t\toptions.ignore = dirGlob.sync(options.ignore, ignoreExpandOptions);\n\t\treturn {patterns, options};\n\t});\n};\n\nexport const globby = normalizeArguments(async (patterns, options) => {\n\tconst [\n\t\ttasks,\n\t\tfilter,\n\t] = await Promise.all([\n\t\tgenerateTasks(patterns, options),\n\t\tgetFilter(options),\n\t]);\n\tconst results = await Promise.all(tasks.map(task => fastGlob(task.patterns, task.options)));\n\n\treturn unionFastGlobResults(results, filter);\n});\n\nexport const globbySync = normalizeArgumentsSync((patterns, options) => {\n\tconst tasks = generateTasksSync(patterns, options);\n\tconst filter = getFilterSync(options);\n\tconst results = tasks.map(task => fastGlob.sync(task.patterns, task.options));\n\n\treturn unionFastGlobResults(results, filter);\n});\n\nexport const globbyStream = normalizeArgumentsSync((patterns, options) => {\n\tconst tasks = generateTasksSync(patterns, options);\n\tconst filter = getFilterSync(options);\n\tconst streams = tasks.map(task => fastGlob.stream(task.patterns, task.options));\n\n\treturn unionFastGlobStreams(streams, filter);\n});\n\nexport const isDynamicPattern = normalizeArgumentsSync(\n\t(patterns, options) => patterns.some(pattern => fastGlob.isDynamicPattern(pattern, options)),\n);\n\nexport const generateGlobTasks = normalizeArguments(generateTasks);\nexport const generateGlobTasksSync = normalizeArgumentsSync(generateTasksSync);\n\nexport {\n\tisGitIgnored,\n\tisGitIgnoredSync,\n} from './ignore.js';\n/package.json\u0006A{\n\t\"name\": \"globby\",\n\t\"version\": \"13.1.3\",\n\t\"description\": \"User-friendly glob matching\",\n\t\"license\": \"MIT\",\n\t\"repository\": \"sindresorhus/globby\",\n\t\"funding\": \"https://github.com/sponsors/sindresorhus\",\n\t\"author\": {\n\t\t\"email\": \"sindresorhus@gmail.com\",\n\t\t\"name\": \"Sindre Sorhus\",\n\t\t\"url\": \"https://sindresorhus.com\"\n\t},\n\t\"type\": \"module\",\n\t\"exports\": \"./index.js\",\n\t\"engines\": {\n\t\t\"node\": \"^12.20.0 || ^14.13.1 || >=16.0.0\"\n\t},\n\t\"scripts\": {\n\t\t\"bench\": \"npm update @globby/main-branch glob-stream fast-glob && node bench.js\",\n\t\t\"test\": \"xo && ava && tsd\"\n\t},\n\t\"files\": [\n\t\t\"index.js\",\n\t\t\"index.d.ts\",\n\t\t\"ignore.js\",\n\t\t\"utilities.js\"\n\t],\n\t\"keywords\": [\n\t\t\"all\",\n\t\t\"array\",\n\t\t\"directories\",\n\t\t\"expand\",\n\t\t\"files\",\n\t\t\"filesystem\",\n\t\t\"filter\",\n\t\t\"find\",\n\t\t\"fnmatch\",\n\t\t\"folders\",\n\t\t\"fs\",\n\t\t\"glob\",\n\t\t\"globbing\",\n\t\t\"globs\",\n\t\t\"gulpfriendly\",\n\t\t\"match\",\n\t\t\"matcher\",\n\t\t\"minimatch\",\n\t\t\"multi\",\n\t\t\"multiple\",\n\t\t\"paths\",\n\t\t\"pattern\",\n\t\t\"patterns\",\n\t\t\"traverse\",\n\t\t\"util\",\n\t\t\"utility\",\n\t\t\"wildcard\",\n\t\t\"wildcards\",\n\t\t\"promise\",\n\t\t\"gitignore\",\n\t\t\"git\"\n\t],\n\t\"dependencies\": {\n\t\t\"dir-glob\": \"^3.0.1\",\n\t\t\"fast-glob\": \"^3.2.11\",\n\t\t\"ignore\": \"^5.2.0\",\n\t\t\"merge2\": \"^1.4.1\",\n\t\t\"slash\": \"^4.0.0\"\n\t},\n\t\"devDependencies\": {\n\t\t\"@globby/main-branch\": \"sindresorhus/globby#main\",\n\t\t\"@types/node\": \"^17.0.10\",\n\t\t\"ava\": \"^4.0.1\",\n\t\t\"benchmark\": \"2.1.4\",\n\t\t\"get-stream\": \"^6.0.1\",\n\t\t\"glob-stream\": \"^7.0.0\",\n\t\t\"rimraf\": \"^3.0.2\",\n\t\t\"tsd\": \"^0.19.1\",\n\t\t\"typescript\": \"^4.5.5\",\n\t\t\"xo\": \"^0.47.0\"\n\t},\n\t\"xo\": {\n\t\t\"ignores\": [\n\t\t\t\"fixtures\"\n\t\t]\n\t},\n\t\"ava\": {\n\t\t\"files\": [\n\t\t\t\"!tests/utilities.js\"\n\t\t],\n\t\t\"workerThreads\": false\n\t}\n}\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/Z3JhY2VmdWwtZnNANC4yLjk=",
    "content": "/README.md\u0012# graceful-fs\n\ngraceful-fs functions as a drop-in replacement for the fs module,\nmaking various improvements.\n\nThe improvements are meant to normalize behavior across different\nplatforms and environments, and to make filesystem access more\nresilient to errors.\n\n## Improvements over [fs module](https://nodejs.org/api/fs.html)\n\n* Queues up `open` and `readdir` calls, and retries them once\n  something closes if there is an EMFILE error from too many file\n  descriptors.\n* fixes `lchmod` for Node versions prior to 0.6.2.\n* implements `fs.lutimes` if possible. Otherwise it becomes a noop.\n* ignores `EINVAL` and `EPERM` errors in `chown`, `fchown` or\n  `lchown` if the user isn't root.\n* makes `lchmod` and `lchown` become noops, if not available.\n* retries reading a file if `read` results in EAGAIN error.\n\nOn Windows, it retries renaming a file for up to one second if `EACCESS`\nor `EPERM` error occurs, likely because antivirus software has locked\nthe directory.\n\n## USAGE\n\n```javascript\n// use just like fs\nvar fs = require('graceful-fs')\n\n// now go and do stuff with it...\nfs.readFile('some-file-or-whatever', (err, data) => {\n  // Do stuff here.\n})\n```\n\n## Sync methods\n\nThis module cannot intercept or handle `EMFILE` or `ENFILE` errors from sync\nmethods.  If you use sync methods which open file descriptors then you are\nresponsible for dealing with any errors.\n\nThis is a known limitation, not a bug.\n\n## Global Patching\n\nIf you want to patch the global fs module (or any other fs-like\nmodule) you can do this:\n\n```javascript\n// Make sure to read the caveat below.\nvar realFs = require('fs')\nvar gracefulFs = require('graceful-fs')\ngracefulFs.gracefulify(realFs)\n```\n\nThis should only ever be done at the top-level application layer, in\norder to delay on EMFILE errors from any fs-using dependencies.  You\nshould **not** do this in a library, because it can cause unexpected\ndelays in other parts of the program.\n\n## Changes\n\nThis module is fairly stable at this point, and used by a lot of\nthings.  That being said, because it implements a subtle behavior\nchange in a core part of the node API, even modest changes can be\nextremely breaking, and the versioning is thus biased towards\nbumping the major when in doubt.\n\nThe main change between major versions has been switching between\nproviding a fully-patched `fs` module vs monkey-patching the node core\nbuiltin, and the approach by which a non-monkey-patched `fs` was\ncreated.\n\nThe goal is to trade `EMFILE` errors for slower fs operations.  So, if\nyou try to open a zillion files, rather than crashing, `open`\noperations will be queued up and wait for something else to `close`.\n\nThere are advantages to each approach.  Monkey-patching the fs means\nthat no `EMFILE` errors can possibly occur anywhere in your\napplication, because everything is using the same core `fs` module,\nwhich is patched.  However, it can also obviously cause undesirable\nside-effects, especially if the module is loaded multiple times.\n\nImplementing a separate-but-identical patched `fs` module is more\nsurgical (and doesn't run the risk of patching multiple times), but\nalso imposes the challenge of keeping in sync with the core module.\n\nThe current approach loads the `fs` module, and then creates a\nlookalike object that has all the same methods, except a few that are\npatched.  It is safe to use in all versions of Node from 0.8 through\n7.0.\n\n### v4\n\n* Do not monkey-patch the fs module.  This module may now be used as a\n  drop-in dep, and users can opt into monkey-patching the fs builtin\n  if their app requires it.\n\n### v3\n\n* Monkey-patch fs, because the eval approach no longer works on recent\n  node.\n* fixed possible type-error throw if rename fails on windows\n* verify that we *never* get EMFILE errors\n* Ignore ENOSYS from chmod/chown\n* clarify that graceful-fs must be used as a drop-in\n\n### v2.1.0\n\n* Use eval rather than monkey-patching fs.\n* readdir: Always sort the results\n* win32: requeue a file if error has an OK status\n\n### v2.0\n\n* A return to monkey patching\n* wrap process.cwd\n\n### v1.1\n\n* wrap readFile\n* Wrap fs.writeFile.\n* readdir protection\n* Don't clobber the fs builtin\n* Handle fs.read EAGAIN errors by trying again\n* Expose the curOpen counter\n* No-op lchown/lchmod if not implemented\n* fs.rename patch only for win32\n* Patch fs.rename to handle AV software on Windows\n* Close #4 Chown should not fail on einval or eperm if non-root\n* Fix isaacs/fstream#1 Only wrap fs one time\n* Fix #3 Start at 1024 max files, then back off on EMFILE\n* lutimes that doens't blow up on Linux\n* A full on-rewrite using a queue instead of just swallowing the EMFILE error\n* Wrap Read/Write streams as well\n\n### 1.0\n\n* Update engines for node 0.6\n* Be lstat-graceful on Windows\n* first\n/clone.js\u0001'use strict'\n\nmodule.exports = clone\n\nvar getPrototypeOf = Object.getPrototypeOf || function (obj) {\n  return obj.__proto__\n}\n\nfunction clone (obj) {\n  if (obj === null || typeof obj !== 'object')\n    return obj\n\n  if (obj instanceof Object)\n    var copy = { __proto__: getPrototypeOf(obj) }\n  else\n    var copy = Object.create(null)\n\n  Object.getOwnPropertyNames(obj).forEach(function (key) {\n    Object.defineProperty(copy, key, Object.getOwnPropertyDescriptor(obj, key))\n  })\n\n  return copy\n}\n/graceful-fs.js/var fs = require('fs')\nvar polyfills = require('./polyfills.js')\nvar legacy = require('./legacy-streams.js')\nvar clone = require('./clone.js')\n\nvar util = require('util')\n\n/* istanbul ignore next - node 0.x polyfill */\nvar gracefulQueue\nvar previousSymbol\n\n/* istanbul ignore else - node 0.x polyfill */\nif (typeof Symbol === 'function' && typeof Symbol.for === 'function') {\n  gracefulQueue = Symbol.for('graceful-fs.queue')\n  // This is used in testing by future versions\n  previousSymbol = Symbol.for('graceful-fs.previous')\n} else {\n  gracefulQueue = '___graceful-fs.queue'\n  previousSymbol = '___graceful-fs.previous'\n}\n\nfunction noop () {}\n\nfunction publishQueue(context, queue) {\n  Object.defineProperty(context, gracefulQueue, {\n    get: function() {\n      return queue\n    }\n  })\n}\n\nvar debug = noop\nif (util.debuglog)\n  debug = util.debuglog('gfs4')\nelse if (/\\bgfs4\\b/i.test(process.env.NODE_DEBUG || ''))\n  debug = function() {\n    var m = util.format.apply(util, arguments)\n    m = 'GFS4: ' + m.split(/\\n/).join('\\nGFS4: ')\n    console.error(m)\n  }\n\n// Once time initialization\nif (!fs[gracefulQueue]) {\n  // This queue can be shared by multiple loaded instances\n  var queue = global[gracefulQueue] || []\n  publishQueue(fs, queue)\n\n  // Patch fs.close/closeSync to shared queue version, because we need\n  // to retry() whenever a close happens *anywhere* in the program.\n  // This is essential when multiple graceful-fs instances are\n  // in play at the same time.\n  fs.close = (function (fs$close) {\n    function close (fd, cb) {\n      return fs$close.call(fs, fd, function (err) {\n        // This function uses the graceful-fs shared queue\n        if (!err) {\n          resetQueue()\n        }\n\n        if (typeof cb === 'function')\n          cb.apply(this, arguments)\n      })\n    }\n\n    Object.defineProperty(close, previousSymbol, {\n      value: fs$close\n    })\n    return close\n  })(fs.close)\n\n  fs.closeSync = (function (fs$closeSync) {\n    function closeSync (fd) {\n      // This function uses the graceful-fs shared queue\n      fs$closeSync.apply(fs, arguments)\n      resetQueue()\n    }\n\n    Object.defineProperty(closeSync, previousSymbol, {\n      value: fs$closeSync\n    })\n    return closeSync\n  })(fs.closeSync)\n\n  if (/\\bgfs4\\b/i.test(process.env.NODE_DEBUG || '')) {\n    process.on('exit', function() {\n      debug(fs[gracefulQueue])\n      require('assert').equal(fs[gracefulQueue].length, 0)\n    })\n  }\n}\n\nif (!global[gracefulQueue]) {\n  publishQueue(global, fs[gracefulQueue]);\n}\n\nmodule.exports = patch(clone(fs))\nif (process.env.TEST_GRACEFUL_FS_GLOBAL_PATCH && !fs.__patched) {\n    module.exports = patch(fs)\n    fs.__patched = true;\n}\n\nfunction patch (fs) {\n  // Everything that references the open() function needs to be in here\n  polyfills(fs)\n  fs.gracefulify = patch\n\n  fs.createReadStream = createReadStream\n  fs.createWriteStream = createWriteStream\n  var fs$readFile = fs.readFile\n  fs.readFile = readFile\n  function readFile (path, options, cb) {\n    if (typeof options === 'function')\n      cb = options, options = null\n\n    return go$readFile(path, options, cb)\n\n    function go$readFile (path, options, cb, startTime) {\n      return fs$readFile(path, options, function (err) {\n        if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n          enqueue([go$readFile, [path, options, cb], err, startTime || Date.now(), Date.now()])\n        else {\n          if (typeof cb === 'function')\n            cb.apply(this, arguments)\n        }\n      })\n    }\n  }\n\n  var fs$writeFile = fs.writeFile\n  fs.writeFile = writeFile\n  function writeFile (path, data, options, cb) {\n    if (typeof options === 'function')\n      cb = options, options = null\n\n    return go$writeFile(path, data, options, cb)\n\n    function go$writeFile (path, data, options, cb, startTime) {\n      return fs$writeFile(path, data, options, function (err) {\n        if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n          enqueue([go$writeFile, [path, data, options, cb], err, startTime || Date.now(), Date.now()])\n        else {\n          if (typeof cb === 'function')\n            cb.apply(this, arguments)\n        }\n      })\n    }\n  }\n\n  var fs$appendFile = fs.appendFile\n  if (fs$appendFile)\n    fs.appendFile = appendFile\n  function appendFile (path, data, options, cb) {\n    if (typeof options === 'function')\n      cb = options, options = null\n\n    return go$appendFile(path, data, options, cb)\n\n    function go$appendFile (path, data, options, cb, startTime) {\n      return fs$appendFile(path, data, options, function (err) {\n        if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n          enqueue([go$appendFile, [path, data, options, cb], err, startTime || Date.now(), Date.now()])\n        else {\n          if (typeof cb === 'function')\n            cb.apply(this, arguments)\n        }\n      })\n    }\n  }\n\n  var fs$copyFile = fs.copyFile\n  if (fs$copyFile)\n    fs.copyFile = copyFile\n  function copyFile (src, dest, flags, cb) {\n    if (typeof flags === 'function') {\n      cb = flags\n      flags = 0\n    }\n    return go$copyFile(src, dest, flags, cb)\n\n    function go$copyFile (src, dest, flags, cb, startTime) {\n      return fs$copyFile(src, dest, flags, function (err) {\n        if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n          enqueue([go$copyFile, [src, dest, flags, cb], err, startTime || Date.now(), Date.now()])\n        else {\n          if (typeof cb === 'function')\n            cb.apply(this, arguments)\n        }\n      })\n    }\n  }\n\n  var fs$readdir = fs.readdir\n  fs.readdir = readdir\n  function readdir (path, options, cb) {\n    if (typeof options === 'function')\n      cb = options, options = null\n\n    return go$readdir(path, options, cb)\n\n    function go$readdir (path, options, cb, startTime) {\n      return fs$readdir(path, options, function (err, files) {\n        if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n          enqueue([go$readdir, [path, options, cb], err, startTime || Date.now(), Date.now()])\n        else {\n          if (files && files.sort)\n            files.sort()\n\n          if (typeof cb === 'function')\n            cb.call(this, err, files)\n        }\n      })\n    }\n  }\n\n  if (process.version.substr(0, 4) === 'v0.8') {\n    var legStreams = legacy(fs)\n    ReadStream = legStreams.ReadStream\n    WriteStream = legStreams.WriteStream\n  }\n\n  var fs$ReadStream = fs.ReadStream\n  if (fs$ReadStream) {\n    ReadStream.prototype = Object.create(fs$ReadStream.prototype)\n    ReadStream.prototype.open = ReadStream$open\n  }\n\n  var fs$WriteStream = fs.WriteStream\n  if (fs$WriteStream) {\n    WriteStream.prototype = Object.create(fs$WriteStream.prototype)\n    WriteStream.prototype.open = WriteStream$open\n  }\n\n  Object.defineProperty(fs, 'ReadStream', {\n    get: function () {\n      return ReadStream\n    },\n    set: function (val) {\n      ReadStream = val\n    },\n    enumerable: true,\n    configurable: true\n  })\n  Object.defineProperty(fs, 'WriteStream', {\n    get: function () {\n      return WriteStream\n    },\n    set: function (val) {\n      WriteStream = val\n    },\n    enumerable: true,\n    configurable: true\n  })\n\n  // legacy names\n  var FileReadStream = ReadStream\n  Object.defineProperty(fs, 'FileReadStream', {\n    get: function () {\n      return FileReadStream\n    },\n    set: function (val) {\n      FileReadStream = val\n    },\n    enumerable: true,\n    configurable: true\n  })\n  var FileWriteStream = WriteStream\n  Object.defineProperty(fs, 'FileWriteStream', {\n    get: function () {\n      return FileWriteStream\n    },\n    set: function (val) {\n      FileWriteStream = val\n    },\n    enumerable: true,\n    configurable: true\n  })\n\n  function ReadStream (path, options) {\n    if (this instanceof ReadStream)\n      return fs$ReadStream.apply(this, arguments), this\n    else\n      return ReadStream.apply(Object.create(ReadStream.prototype), arguments)\n  }\n\n  function ReadStream$open () {\n    var that = this\n    open(that.path, that.flags, that.mode, function (err, fd) {\n      if (err) {\n        if (that.autoClose)\n          that.destroy()\n\n        that.emit('error', err)\n      } else {\n        that.fd = fd\n        that.emit('open', fd)\n        that.read()\n      }\n    })\n  }\n\n  function WriteStream (path, options) {\n    if (this instanceof WriteStream)\n      return fs$WriteStream.apply(this, arguments), this\n    else\n      return WriteStream.apply(Object.create(WriteStream.prototype), arguments)\n  }\n\n  function WriteStream$open () {\n    var that = this\n    open(that.path, that.flags, that.mode, function (err, fd) {\n      if (err) {\n        that.destroy()\n        that.emit('error', err)\n      } else {\n        that.fd = fd\n        that.emit('open', fd)\n      }\n    })\n  }\n\n  function createReadStream (path, options) {\n    return new fs.ReadStream(path, options)\n  }\n\n  function createWriteStream (path, options) {\n    return new fs.WriteStream(path, options)\n  }\n\n  var fs$open = fs.open\n  fs.open = open\n  function open (path, flags, mode, cb) {\n    if (typeof mode === 'function')\n      cb = mode, mode = null\n\n    return go$open(path, flags, mode, cb)\n\n    function go$open (path, flags, mode, cb, startTime) {\n      return fs$open(path, flags, mode, function (err, fd) {\n        if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n          enqueue([go$open, [path, flags, mode, cb], err, startTime || Date.now(), Date.now()])\n        else {\n          if (typeof cb === 'function')\n            cb.apply(this, arguments)\n        }\n      })\n    }\n  }\n\n  return fs\n}\n\nfunction enqueue (elem) {\n  debug('ENQUEUE', elem[0].name, elem[1])\n  fs[gracefulQueue].push(elem)\n  retry()\n}\n\n// keep track of the timeout between retry() calls\nvar retryTimer\n\n// reset the startTime and lastTime to now\n// this resets the start of the 60 second overall timeout as well as the\n// delay between attempts so that we'll retry these jobs sooner\nfunction resetQueue () {\n  var now = Date.now()\n  for (var i = 0; i < fs[gracefulQueue].length; ++i) {\n    // entries that are only a length of 2 are from an older version, don't\n    // bother modifying those since they'll be retried anyway.\n    if (fs[gracefulQueue][i].length > 2) {\n      fs[gracefulQueue][i][3] = now // startTime\n      fs[gracefulQueue][i][4] = now // lastTime\n    }\n  }\n  // call retry to make sure we're actively processing the queue\n  retry()\n}\n\nfunction retry () {\n  // clear the timer and remove it to help prevent unintended concurrency\n  clearTimeout(retryTimer)\n  retryTimer = undefined\n\n  if (fs[gracefulQueue].length === 0)\n    return\n\n  var elem = fs[gracefulQueue].shift()\n  var fn = elem[0]\n  var args = elem[1]\n  // these items may be unset if they were added by an older graceful-fs\n  var err = elem[2]\n  var startTime = elem[3]\n  var lastTime = elem[4]\n\n  // if we don't have a startTime we have no way of knowing if we've waited\n  // long enough, so go ahead and retry this item now\n  if (startTime === undefined) {\n    debug('RETRY', fn.name, args)\n    fn.apply(null, args)\n  } else if (Date.now() - startTime >= 60000) {\n    // it's been more than 60 seconds total, bail now\n    debug('TIMEOUT', fn.name, args)\n    var cb = args.pop()\n    if (typeof cb === 'function')\n      cb.call(null, err)\n  } else {\n    // the amount of time between the last attempt and right now\n    var sinceAttempt = Date.now() - lastTime\n    // the amount of time between when we first tried, and when we last tried\n    // rounded up to at least 1\n    var sinceStart = Math.max(lastTime - startTime, 1)\n    // backoff. wait longer than the total time we've been retrying, but only\n    // up to a maximum of 100ms\n    var desiredDelay = Math.min(sinceStart * 1.2, 100)\n    // it's been long enough since the last retry, do it again\n    if (sinceAttempt >= desiredDelay) {\n      debug('RETRY', fn.name, args)\n      fn.apply(null, args.concat([startTime]))\n    } else {\n      // if we can't do this job yet, push it to the end of the queue\n      // and let the next iteration check again\n      fs[gracefulQueue].push(elem)\n    }\n  }\n\n  // schedule our next run if one isn't already scheduled\n  if (retryTimer === undefined) {\n    retryTimer = setTimeout(retry, 0)\n  }\n}\n/LICENSE\u0003\rThe ISC License\n\nCopyright (c) Isaac Z. Schlueter, Ben Noordhuis, and Contributors\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted, provided that the above\ncopyright notice and this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\nWITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\nANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\nACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR\nIN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n/legacy-streams.js\n_var Stream = require('stream').Stream\n\nmodule.exports = legacy\n\nfunction legacy (fs) {\n  return {\n    ReadStream: ReadStream,\n    WriteStream: WriteStream\n  }\n\n  function ReadStream (path, options) {\n    if (!(this instanceof ReadStream)) return new ReadStream(path, options);\n\n    Stream.call(this);\n\n    var self = this;\n\n    this.path = path;\n    this.fd = null;\n    this.readable = true;\n    this.paused = false;\n\n    this.flags = 'r';\n    this.mode = 438; /*=0666*/\n    this.bufferSize = 64 * 1024;\n\n    options = options || {};\n\n    // Mixin options into this\n    var keys = Object.keys(options);\n    for (var index = 0, length = keys.length; index < length; index++) {\n      var key = keys[index];\n      this[key] = options[key];\n    }\n\n    if (this.encoding) this.setEncoding(this.encoding);\n\n    if (this.start !== undefined) {\n      if ('number' !== typeof this.start) {\n        throw TypeError('start must be a Number');\n      }\n      if (this.end === undefined) {\n        this.end = Infinity;\n      } else if ('number' !== typeof this.end) {\n        throw TypeError('end must be a Number');\n      }\n\n      if (this.start > this.end) {\n        throw new Error('start must be <= end');\n      }\n\n      this.pos = this.start;\n    }\n\n    if (this.fd !== null) {\n      process.nextTick(function() {\n        self._read();\n      });\n      return;\n    }\n\n    fs.open(this.path, this.flags, this.mode, function (err, fd) {\n      if (err) {\n        self.emit('error', err);\n        self.readable = false;\n        return;\n      }\n\n      self.fd = fd;\n      self.emit('open', fd);\n      self._read();\n    })\n  }\n\n  function WriteStream (path, options) {\n    if (!(this instanceof WriteStream)) return new WriteStream(path, options);\n\n    Stream.call(this);\n\n    this.path = path;\n    this.fd = null;\n    this.writable = true;\n\n    this.flags = 'w';\n    this.encoding = 'binary';\n    this.mode = 438; /*=0666*/\n    this.bytesWritten = 0;\n\n    options = options || {};\n\n    // Mixin options into this\n    var keys = Object.keys(options);\n    for (var index = 0, length = keys.length; index < length; index++) {\n      var key = keys[index];\n      this[key] = options[key];\n    }\n\n    if (this.start !== undefined) {\n      if ('number' !== typeof this.start) {\n        throw TypeError('start must be a Number');\n      }\n      if (this.start < 0) {\n        throw new Error('start must be >= zero');\n      }\n\n      this.pos = this.start;\n    }\n\n    this.busy = false;\n    this._queue = [];\n\n    if (this.fd === null) {\n      this._open = fs.open;\n      this._queue.push([this._open, this.path, this.flags, this.mode, undefined]);\n      this.flush();\n    }\n  }\n}\n/package.json\u0003{\n  \"name\": \"graceful-fs\",\n  \"description\": \"A drop-in replacement for fs, making various improvements.\",\n  \"version\": \"4.2.9\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/isaacs/node-graceful-fs\"\n  },\n  \"main\": \"graceful-fs.js\",\n  \"directories\": {\n    \"test\": \"test\"\n  },\n  \"scripts\": {\n    \"preversion\": \"npm test\",\n    \"postversion\": \"npm publish\",\n    \"postpublish\": \"git push origin --follow-tags\",\n    \"test\": \"nyc --silent node test.js | tap -c -\",\n    \"posttest\": \"nyc report\"\n  },\n  \"keywords\": [\n    \"fs\",\n    \"module\",\n    \"reading\",\n    \"retry\",\n    \"retries\",\n    \"queue\",\n    \"error\",\n    \"errors\",\n    \"handling\",\n    \"EMFILE\",\n    \"EAGAIN\",\n    \"EINVAL\",\n    \"EPERM\",\n    \"EACCESS\"\n  ],\n  \"license\": \"ISC\",\n  \"devDependencies\": {\n    \"import-fresh\": \"^2.0.0\",\n    \"mkdirp\": \"^0.5.0\",\n    \"rimraf\": \"^2.2.8\",\n    \"tap\": \"^12.7.0\"\n  },\n  \"files\": [\n    \"fs.js\",\n    \"graceful-fs.js\",\n    \"legacy-streams.js\",\n    \"polyfills.js\",\n    \"clone.js\"\n  ]\n}\n/polyfills.js&+var constants = require('constants')\n\nvar origCwd = process.cwd\nvar cwd = null\n\nvar platform = process.env.GRACEFUL_FS_PLATFORM || process.platform\n\nprocess.cwd = function() {\n  if (!cwd)\n    cwd = origCwd.call(process)\n  return cwd\n}\ntry {\n  process.cwd()\n} catch (er) {}\n\n// This check is needed until node.js 12 is required\nif (typeof process.chdir === 'function') {\n  var chdir = process.chdir\n  process.chdir = function (d) {\n    cwd = null\n    chdir.call(process, d)\n  }\n  if (Object.setPrototypeOf) Object.setPrototypeOf(process.chdir, chdir)\n}\n\nmodule.exports = patch\n\nfunction patch (fs) {\n  // (re-)implement some things that are known busted or missing.\n\n  // lchmod, broken prior to 0.6.2\n  // back-port the fix here.\n  if (constants.hasOwnProperty('O_SYMLINK') &&\n      process.version.match(/^v0\\.6\\.[0-2]|^v0\\.5\\./)) {\n    patchLchmod(fs)\n  }\n\n  // lutimes implementation, or no-op\n  if (!fs.lutimes) {\n    patchLutimes(fs)\n  }\n\n  // https://github.com/isaacs/node-graceful-fs/issues/4\n  // Chown should not fail on einval or eperm if non-root.\n  // It should not fail on enosys ever, as this just indicates\n  // that a fs doesn't support the intended operation.\n\n  fs.chown = chownFix(fs.chown)\n  fs.fchown = chownFix(fs.fchown)\n  fs.lchown = chownFix(fs.lchown)\n\n  fs.chmod = chmodFix(fs.chmod)\n  fs.fchmod = chmodFix(fs.fchmod)\n  fs.lchmod = chmodFix(fs.lchmod)\n\n  fs.chownSync = chownFixSync(fs.chownSync)\n  fs.fchownSync = chownFixSync(fs.fchownSync)\n  fs.lchownSync = chownFixSync(fs.lchownSync)\n\n  fs.chmodSync = chmodFixSync(fs.chmodSync)\n  fs.fchmodSync = chmodFixSync(fs.fchmodSync)\n  fs.lchmodSync = chmodFixSync(fs.lchmodSync)\n\n  fs.stat = statFix(fs.stat)\n  fs.fstat = statFix(fs.fstat)\n  fs.lstat = statFix(fs.lstat)\n\n  fs.statSync = statFixSync(fs.statSync)\n  fs.fstatSync = statFixSync(fs.fstatSync)\n  fs.lstatSync = statFixSync(fs.lstatSync)\n\n  // if lchmod/lchown do not exist, then make them no-ops\n  if (!fs.lchmod) {\n    fs.lchmod = function (path, mode, cb) {\n      if (cb) process.nextTick(cb)\n    }\n    fs.lchmodSync = function () {}\n  }\n  if (!fs.lchown) {\n    fs.lchown = function (path, uid, gid, cb) {\n      if (cb) process.nextTick(cb)\n    }\n    fs.lchownSync = function () {}\n  }\n\n  // on Windows, A/V software can lock the directory, causing this\n  // to fail with an EACCES or EPERM if the directory contains newly\n  // created files.  Try again on failure, for up to 60 seconds.\n\n  // Set the timeout this long because some Windows Anti-Virus, such as Parity\n  // bit9, may lock files for up to a minute, causing npm package install\n  // failures. Also, take care to yield the scheduler. Windows scheduling gives\n  // CPU to a busy looping process, which can cause the program causing the lock\n  // contention to be starved of CPU by node, so the contention doesn't resolve.\n  if (platform === \"win32\") {\n    fs.rename = (function (fs$rename) { return function (from, to, cb) {\n      var start = Date.now()\n      var backoff = 0;\n      fs$rename(from, to, function CB (er) {\n        if (er\n            && (er.code === \"EACCES\" || er.code === \"EPERM\")\n            && Date.now() - start < 60000) {\n          setTimeout(function() {\n            fs.stat(to, function (stater, st) {\n              if (stater && stater.code === \"ENOENT\")\n                fs$rename(from, to, CB);\n              else\n                cb(er)\n            })\n          }, backoff)\n          if (backoff < 100)\n            backoff += 10;\n          return;\n        }\n        if (cb) cb(er)\n      })\n    }})(fs.rename)\n  }\n\n  // if read() returns EAGAIN, then just try it again.\n  fs.read = (function (fs$read) {\n    function read (fd, buffer, offset, length, position, callback_) {\n      var callback\n      if (callback_ && typeof callback_ === 'function') {\n        var eagCounter = 0\n        callback = function (er, _, __) {\n          if (er && er.code === 'EAGAIN' && eagCounter < 10) {\n            eagCounter ++\n            return fs$read.call(fs, fd, buffer, offset, length, position, callback)\n          }\n          callback_.apply(this, arguments)\n        }\n      }\n      return fs$read.call(fs, fd, buffer, offset, length, position, callback)\n    }\n\n    // This ensures `util.promisify` works as it does for native `fs.read`.\n    if (Object.setPrototypeOf) Object.setPrototypeOf(read, fs$read)\n    return read\n  })(fs.read)\n\n  fs.readSync = (function (fs$readSync) { return function (fd, buffer, offset, length, position) {\n    var eagCounter = 0\n    while (true) {\n      try {\n        return fs$readSync.call(fs, fd, buffer, offset, length, position)\n      } catch (er) {\n        if (er.code === 'EAGAIN' && eagCounter < 10) {\n          eagCounter ++\n          continue\n        }\n        throw er\n      }\n    }\n  }})(fs.readSync)\n\n  function patchLchmod (fs) {\n    fs.lchmod = function (path, mode, callback) {\n      fs.open( path\n             , constants.O_WRONLY | constants.O_SYMLINK\n             , mode\n             , function (err, fd) {\n        if (err) {\n          if (callback) callback(err)\n          return\n        }\n        // prefer to return the chmod error, if one occurs,\n        // but still try to close, and report closing errors if they occur.\n        fs.fchmod(fd, mode, function (err) {\n          fs.close(fd, function(err2) {\n            if (callback) callback(err || err2)\n          })\n        })\n      })\n    }\n\n    fs.lchmodSync = function (path, mode) {\n      var fd = fs.openSync(path, constants.O_WRONLY | constants.O_SYMLINK, mode)\n\n      // prefer to return the chmod error, if one occurs,\n      // but still try to close, and report closing errors if they occur.\n      var threw = true\n      var ret\n      try {\n        ret = fs.fchmodSync(fd, mode)\n        threw = false\n      } finally {\n        if (threw) {\n          try {\n            fs.closeSync(fd)\n          } catch (er) {}\n        } else {\n          fs.closeSync(fd)\n        }\n      }\n      return ret\n    }\n  }\n\n  function patchLutimes (fs) {\n    if (constants.hasOwnProperty(\"O_SYMLINK\")) {\n      fs.lutimes = function (path, at, mt, cb) {\n        fs.open(path, constants.O_SYMLINK, function (er, fd) {\n          if (er) {\n            if (cb) cb(er)\n            return\n          }\n          fs.futimes(fd, at, mt, function (er) {\n            fs.close(fd, function (er2) {\n              if (cb) cb(er || er2)\n            })\n          })\n        })\n      }\n\n      fs.lutimesSync = function (path, at, mt) {\n        var fd = fs.openSync(path, constants.O_SYMLINK)\n        var ret\n        var threw = true\n        try {\n          ret = fs.futimesSync(fd, at, mt)\n          threw = false\n        } finally {\n          if (threw) {\n            try {\n              fs.closeSync(fd)\n            } catch (er) {}\n          } else {\n            fs.closeSync(fd)\n          }\n        }\n        return ret\n      }\n\n    } else {\n      fs.lutimes = function (_a, _b, _c, cb) { if (cb) process.nextTick(cb) }\n      fs.lutimesSync = function () {}\n    }\n  }\n\n  function chmodFix (orig) {\n    if (!orig) return orig\n    return function (target, mode, cb) {\n      return orig.call(fs, target, mode, function (er) {\n        if (chownErOk(er)) er = null\n        if (cb) cb.apply(this, arguments)\n      })\n    }\n  }\n\n  function chmodFixSync (orig) {\n    if (!orig) return orig\n    return function (target, mode) {\n      try {\n        return orig.call(fs, target, mode)\n      } catch (er) {\n        if (!chownErOk(er)) throw er\n      }\n    }\n  }\n\n\n  function chownFix (orig) {\n    if (!orig) return orig\n    return function (target, uid, gid, cb) {\n      return orig.call(fs, target, uid, gid, function (er) {\n        if (chownErOk(er)) er = null\n        if (cb) cb.apply(this, arguments)\n      })\n    }\n  }\n\n  function chownFixSync (orig) {\n    if (!orig) return orig\n    return function (target, uid, gid) {\n      try {\n        return orig.call(fs, target, uid, gid)\n      } catch (er) {\n        if (!chownErOk(er)) throw er\n      }\n    }\n  }\n\n  function statFix (orig) {\n    if (!orig) return orig\n    // Older versions of Node erroneously returned signed integers for\n    // uid + gid.\n    return function (target, options, cb) {\n      if (typeof options === 'function') {\n        cb = options\n        options = null\n      }\n      function callback (er, stats) {\n        if (stats) {\n          if (stats.uid < 0) stats.uid += 0x100000000\n          if (stats.gid < 0) stats.gid += 0x100000000\n        }\n        if (cb) cb.apply(this, arguments)\n      }\n      return options ? orig.call(fs, target, options, callback)\n        : orig.call(fs, target, callback)\n    }\n  }\n\n  function statFixSync (orig) {\n    if (!orig) return orig\n    // Older versions of Node erroneously returned signed integers for\n    // uid + gid.\n    return function (target, options) {\n      var stats = options ? orig.call(fs, target, options)\n        : orig.call(fs, target)\n      if (stats) {\n        if (stats.uid < 0) stats.uid += 0x100000000\n        if (stats.gid < 0) stats.gid += 0x100000000\n      }\n      return stats;\n    }\n  }\n\n  // ENOSYS means that the fs doesn't support the op. Just ignore\n  // that, because it doesn't matter.\n  //\n  // if there's no getuid, or if getuid() is something other\n  // than 0, and the error is EINVAL or EPERM, then just ignore\n  // it.\n  //\n  // This specific case is a silent failure in cp, install, tar,\n  // and most other unix tools that manage permissions.\n  //\n  // When running as root, or if other types of errors are\n  // encountered, then it's strict.\n  function chownErOk (er) {\n    if (!er)\n      return true\n\n    if (er.code === \"ENOSYS\")\n      return true\n\n    var nonroot = !process.getuid || process.getuid() !== 0\n    if (nonroot) {\n      if (er.code === \"EINVAL\" || er.code === \"EPERM\")\n        return true\n    }\n\n    return false\n  }\n}\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/Z3JhcGhxbEAxNi42LjA=",
    "content": "\u0001,/validation/rules/UniqueVariableNamesRule.js\u0005['use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.UniqueVariableNamesRule = UniqueVariableNamesRule;\n\nvar _groupBy = require('../../jsutils/groupBy.js');\n\nvar _GraphQLError = require('../../error/GraphQLError.js');\n\n/**\n * Unique variable names\n *\n * A GraphQL operation is only valid if all its variables are uniquely named.\n */\nfunction UniqueVariableNamesRule(context) {\n  return {\n    OperationDefinition(operationNode) {\n      var _operationNode$variab;\n\n      // See: https://github.com/graphql/graphql-js/issues/2203\n\n      /* c8 ignore next */\n      const variableDefinitions =\n        (_operationNode$variab = operationNode.variableDefinitions) !== null &&\n        _operationNode$variab !== void 0\n          ? _operationNode$variab\n          : [];\n      const seenVariableDefinitions = (0, _groupBy.groupBy)(\n        variableDefinitions,\n        (node) => node.variable.name.value,\n      );\n\n      for (const [variableName, variableNodes] of seenVariableDefinitions) {\n        if (variableNodes.length > 1) {\n          context.reportError(\n            new _GraphQLError.GraphQLError(\n              `There can be only one variable named \"$${variableName}\".`,\n              {\n                nodes: variableNodes.map((node) => node.variable.name),\n              },\n            ),\n          );\n        }\n      }\n    },\n  };\n}\n,/validation/rules/UniqueFragmentNamesRule.js\u0004\u0006'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.UniqueFragmentNamesRule = UniqueFragmentNamesRule;\n\nvar _GraphQLError = require('../../error/GraphQLError.js');\n\n/**\n * Unique fragment names\n *\n * A GraphQL document is only valid if all defined fragments have unique names.\n *\n * See https://spec.graphql.org/draft/#sec-Fragment-Name-Uniqueness\n */\nfunction UniqueFragmentNamesRule(context) {\n  const knownFragmentNames = Object.create(null);\n  return {\n    OperationDefinition: () => false,\n\n    FragmentDefinition(node) {\n      const fragmentName = node.name.value;\n\n      if (knownFragmentNames[fragmentName]) {\n        context.reportError(\n          new _GraphQLError.GraphQLError(\n            `There can be only one fragment named \"${fragmentName}\".`,\n            {\n              nodes: [knownFragmentNames[fragmentName], node.name],\n            },\n          ),\n        );\n      } else {\n        knownFragmentNames[fragmentName] = node.name;\n      }\n\n      return false;\n    },\n  };\n}\n/index.jss'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nObject.defineProperty(exports, 'BREAK', {\n  enumerable: true,\n  get: function () {\n    return _index2.BREAK;\n  },\n});\nObject.defineProperty(exports, 'BreakingChangeType', {\n  enumerable: true,\n  get: function () {\n    return _index6.BreakingChangeType;\n  },\n});\nObject.defineProperty(exports, 'DEFAULT_DEPRECATION_REASON', {\n  enumerable: true,\n  get: function () {\n    return _index.DEFAULT_DEPRECATION_REASON;\n  },\n});\nObject.defineProperty(exports, 'DangerousChangeType', {\n  enumerable: true,\n  get: function () {\n    return _index6.DangerousChangeType;\n  },\n});\nObject.defineProperty(exports, 'DirectiveLocation', {\n  enumerable: true,\n  get: function () {\n    return _index2.DirectiveLocation;\n  },\n});\nObject.defineProperty(exports, 'ExecutableDefinitionsRule', {\n  enumerable: true,\n  get: function () {\n    return _index4.ExecutableDefinitionsRule;\n  },\n});\nObject.defineProperty(exports, 'FieldsOnCorrectTypeRule', {\n  enumerable: true,\n  get: function () {\n    return _index4.FieldsOnCorrectTypeRule;\n  },\n});\nObject.defineProperty(exports, 'FragmentsOnCompositeTypesRule', {\n  enumerable: true,\n  get: function () {\n    return _index4.FragmentsOnCompositeTypesRule;\n  },\n});\nObject.defineProperty(exports, 'GRAPHQL_MAX_INT', {\n  enumerable: true,\n  get: function () {\n    return _index.GRAPHQL_MAX_INT;\n  },\n});\nObject.defineProperty(exports, 'GRAPHQL_MIN_INT', {\n  enumerable: true,\n  get: function () {\n    return _index.GRAPHQL_MIN_INT;\n  },\n});\nObject.defineProperty(exports, 'GraphQLBoolean', {\n  enumerable: true,\n  get: function () {\n    return _index.GraphQLBoolean;\n  },\n});\nObject.defineProperty(exports, 'GraphQLDeprecatedDirective', {\n  enumerable: true,\n  get: function () {\n    return _index.GraphQLDeprecatedDirective;\n  },\n});\nObject.defineProperty(exports, 'GraphQLDirective', {\n  enumerable: true,\n  get: function () {\n    return _index.GraphQLDirective;\n  },\n});\nObject.defineProperty(exports, 'GraphQLEnumType', {\n  enumerable: true,\n  get: function () {\n    return _index.GraphQLEnumType;\n  },\n});\nObject.defineProperty(exports, 'GraphQLError', {\n  enumerable: true,\n  get: function () {\n    return _index5.GraphQLError;\n  },\n});\nObject.defineProperty(exports, 'GraphQLFloat', {\n  enumerable: true,\n  get: function () {\n    return _index.GraphQLFloat;\n  },\n});\nObject.defineProperty(exports, 'GraphQLID', {\n  enumerable: true,\n  get: function () {\n    return _index.GraphQLID;\n  },\n});\nObject.defineProperty(exports, 'GraphQLIncludeDirective', {\n  enumerable: true,\n  get: function () {\n    return _index.GraphQLIncludeDirective;\n  },\n});\nObject.defineProperty(exports, 'GraphQLInputObjectType', {\n  enumerable: true,\n  get: function () {\n    return _index.GraphQLInputObjectType;\n  },\n});\nObject.defineProperty(exports, 'GraphQLInt', {\n  enumerable: true,\n  get: function () {\n    return _index.GraphQLInt;\n  },\n});\nObject.defineProperty(exports, 'GraphQLInterfaceType', {\n  enumerable: true,\n  get: function () {\n    return _index.GraphQLInterfaceType;\n  },\n});\nObject.defineProperty(exports, 'GraphQLList', {\n  enumerable: true,\n  get: function () {\n    return _index.GraphQLList;\n  },\n});\nObject.defineProperty(exports, 'GraphQLNonNull', {\n  enumerable: true,\n  get: function () {\n    return _index.GraphQLNonNull;\n  },\n});\nObject.defineProperty(exports, 'GraphQLObjectType', {\n  enumerable: true,\n  get: function () {\n    return _index.GraphQLObjectType;\n  },\n});\nObject.defineProperty(exports, 'GraphQLScalarType', {\n  enumerable: true,\n  get: function () {\n    return _index.GraphQLScalarType;\n  },\n});\nObject.defineProperty(exports, 'GraphQLSchema', {\n  enumerable: true,\n  get: function () {\n    return _index.GraphQLSchema;\n  },\n});\nObject.defineProperty(exports, 'GraphQLSkipDirective', {\n  enumerable: true,\n  get: function () {\n    return _index.GraphQLSkipDirective;\n  },\n});\nObject.defineProperty(exports, 'GraphQLSpecifiedByDirective', {\n  enumerable: true,\n  get: function () {\n    return _index.GraphQLSpecifiedByDirective;\n  },\n});\nObject.defineProperty(exports, 'GraphQLString', {\n  enumerable: true,\n  get: function () {\n    return _index.GraphQLString;\n  },\n});\nObject.defineProperty(exports, 'GraphQLUnionType', {\n  enumerable: true,\n  get: function () {\n    return _index.GraphQLUnionType;\n  },\n});\nObject.defineProperty(exports, 'Kind', {\n  enumerable: true,\n  get: function () {\n    return _index2.Kind;\n  },\n});\nObject.defineProperty(exports, 'KnownArgumentNamesRule', {\n  enumerable: true,\n  get: function () {\n    return _index4.KnownArgumentNamesRule;\n  },\n});\nObject.defineProperty(exports, 'KnownDirectivesRule', {\n  enumerable: true,\n  get: function () {\n    return _index4.KnownDirectivesRule;\n  },\n});\nObject.defineProperty(exports, 'KnownFragmentNamesRule', {\n  enumerable: true,\n  get: function () {\n    return _index4.KnownFragmentNamesRule;\n  },\n});\nObject.defineProperty(exports, 'KnownTypeNamesRule', {\n  enumerable: true,\n  get: function () {\n    return _index4.KnownTypeNamesRule;\n  },\n});\nObject.defineProperty(exports, 'Lexer', {\n  enumerable: true,\n  get: function () {\n    return _index2.Lexer;\n  },\n});\nObject.defineProperty(exports, 'Location', {\n  enumerable: true,\n  get: function () {\n    return _index2.Location;\n  },\n});\nObject.defineProperty(exports, 'LoneAnonymousOperationRule', {\n  enumerable: true,\n  get: function () {\n    return _index4.LoneAnonymousOperationRule;\n  },\n});\nObject.defineProperty(exports, 'LoneSchemaDefinitionRule', {\n  enumerable: true,\n  get: function () {\n    return _index4.LoneSchemaDefinitionRule;\n  },\n});\nObject.defineProperty(exports, 'NoDeprecatedCustomRule', {\n  enumerable: true,\n  get: function () {\n    return _index4.NoDeprecatedCustomRule;\n  },\n});\nObject.defineProperty(exports, 'NoFragmentCyclesRule', {\n  enumerable: true,\n  get: function () {\n    return _index4.NoFragmentCyclesRule;\n  },\n});\nObject.defineProperty(exports, 'NoSchemaIntrospectionCustomRule', {\n  enumerable: true,\n  get: function () {\n    return _index4.NoSchemaIntrospectionCustomRule;\n  },\n});\nObject.defineProperty(exports, 'NoUndefinedVariablesRule', {\n  enumerable: true,\n  get: function () {\n    return _index4.NoUndefinedVariablesRule;\n  },\n});\nObject.defineProperty(exports, 'NoUnusedFragmentsRule', {\n  enumerable: true,\n  get: function () {\n    return _index4.NoUnusedFragmentsRule;\n  },\n});\nObject.defineProperty(exports, 'NoUnusedVariablesRule', {\n  enumerable: true,\n  get: function () {\n    return _index4.NoUnusedVariablesRule;\n  },\n});\nObject.defineProperty(exports, 'OperationTypeNode', {\n  enumerable: true,\n  get: function () {\n    return _index2.OperationTypeNode;\n  },\n});\nObject.defineProperty(exports, 'OverlappingFieldsCanBeMergedRule', {\n  enumerable: true,\n  get: function () {\n    return _index4.OverlappingFieldsCanBeMergedRule;\n  },\n});\nObject.defineProperty(exports, 'PossibleFragmentSpreadsRule', {\n  enumerable: true,\n  get: function () {\n    return _index4.PossibleFragmentSpreadsRule;\n  },\n});\nObject.defineProperty(exports, 'PossibleTypeExtensionsRule', {\n  enumerable: true,\n  get: function () {\n    return _index4.PossibleTypeExtensionsRule;\n  },\n});\nObject.defineProperty(exports, 'ProvidedRequiredArgumentsRule', {\n  enumerable: true,\n  get: function () {\n    return _index4.ProvidedRequiredArgumentsRule;\n  },\n});\nObject.defineProperty(exports, 'ScalarLeafsRule', {\n  enumerable: true,\n  get: function () {\n    return _index4.ScalarLeafsRule;\n  },\n});\nObject.defineProperty(exports, 'SchemaMetaFieldDef', {\n  enumerable: true,\n  get: function () {\n    return _index.SchemaMetaFieldDef;\n  },\n});\nObject.defineProperty(exports, 'SingleFieldSubscriptionsRule', {\n  enumerable: true,\n  get: function () {\n    return _index4.SingleFieldSubscriptionsRule;\n  },\n});\nObject.defineProperty(exports, 'Source', {\n  enumerable: true,\n  get: function () {\n    return _index2.Source;\n  },\n});\nObject.defineProperty(exports, 'Token', {\n  enumerable: true,\n  get: function () {\n    return _index2.Token;\n  },\n});\nObject.defineProperty(exports, 'TokenKind', {\n  enumerable: true,\n  get: function () {\n    return _index2.TokenKind;\n  },\n});\nObject.defineProperty(exports, 'TypeInfo', {\n  enumerable: true,\n  get: function () {\n    return _index6.TypeInfo;\n  },\n});\nObject.defineProperty(exports, 'TypeKind', {\n  enumerable: true,\n  get: function () {\n    return _index.TypeKind;\n  },\n});\nObject.defineProperty(exports, 'TypeMetaFieldDef', {\n  enumerable: true,\n  get: function () {\n    return _index.TypeMetaFieldDef;\n  },\n});\nObject.defineProperty(exports, 'TypeNameMetaFieldDef', {\n  enumerable: true,\n  get: function () {\n    return _index.TypeNameMetaFieldDef;\n  },\n});\nObject.defineProperty(exports, 'UniqueArgumentDefinitionNamesRule', {\n  enumerable: true,\n  get: function () {\n    return _index4.UniqueArgumentDefinitionNamesRule;\n  },\n});\nObject.defineProperty(exports, 'UniqueArgumentNamesRule', {\n  enumerable: true,\n  get: function () {\n    return _index4.UniqueArgumentNamesRule;\n  },\n});\nObject.defineProperty(exports, 'UniqueDirectiveNamesRule', {\n  enumerable: true,\n  get: function () {\n    return _index4.UniqueDirectiveNamesRule;\n  },\n});\nObject.defineProperty(exports, 'UniqueDirectivesPerLocationRule', {\n  enumerable: true,\n  get: function () {\n    return _index4.UniqueDirectivesPerLocationRule;\n  },\n});\nObject.defineProperty(exports, 'UniqueEnumValueNamesRule', {\n  enumerable: true,\n  get: function () {\n    return _index4.UniqueEnumValueNamesRule;\n  },\n});\nObject.defineProperty(exports, 'UniqueFieldDefinitionNamesRule', {\n  enumerable: true,\n  get: function () {\n    return _index4.UniqueFieldDefinitionNamesRule;\n  },\n});\nObject.defineProperty(exports, 'UniqueFragmentNamesRule', {\n  enumerable: true,\n  get: function () {\n    return _index4.UniqueFragmentNamesRule;\n  },\n});\nObject.defineProperty(exports, 'UniqueInputFieldNamesRule', {\n  enumerable: true,\n  get: function () {\n    return _index4.UniqueInputFieldNamesRule;\n  },\n});\nObject.defineProperty(exports, 'UniqueOperationNamesRule', {\n  enumerable: true,\n  get: function () {\n    return _index4.UniqueOperationNamesRule;\n  },\n});\nObject.defineProperty(exports, 'UniqueOperationTypesRule', {\n  enumerable: true,\n  get: function () {\n    return _index4.UniqueOperationTypesRule;\n  },\n});\nObject.defineProperty(exports, 'UniqueTypeNamesRule', {\n  enumerable: true,\n  get: function () {\n    return _index4.UniqueTypeNamesRule;\n  },\n});\nObject.defineProperty(exports, 'UniqueVariableNamesRule', {\n  enumerable: true,\n  get: function () {\n    return _index4.UniqueVariableNamesRule;\n  },\n});\nObject.defineProperty(exports, 'ValidationContext', {\n  enumerable: true,\n  get: function () {\n    return _index4.ValidationContext;\n  },\n});\nObject.defineProperty(exports, 'ValuesOfCorrectTypeRule', {\n  enumerable: true,\n  get: function () {\n    return _index4.ValuesOfCorrectTypeRule;\n  },\n});\nObject.defineProperty(exports, 'VariablesAreInputTypesRule', {\n  enumerable: true,\n  get: function () {\n    return _index4.VariablesAreInputTypesRule;\n  },\n});\nObject.defineProperty(exports, 'VariablesInAllowedPositionRule', {\n  enumerable: true,\n  get: function () {\n    return _index4.VariablesInAllowedPositionRule;\n  },\n});\nObject.defineProperty(exports, '__Directive', {\n  enumerable: true,\n  get: function () {\n    return _index.__Directive;\n  },\n});\nObject.defineProperty(exports, '__DirectiveLocation', {\n  enumerable: true,\n  get: function () {\n    return _index.__DirectiveLocation;\n  },\n});\nObject.defineProperty(exports, '__EnumValue', {\n  enumerable: true,\n  get: function () {\n    return _index.__EnumValue;\n  },\n});\nObject.defineProperty(exports, '__Field', {\n  enumerable: true,\n  get: function () {\n    return _index.__Field;\n  },\n});\nObject.defineProperty(exports, '__InputValue', {\n  enumerable: true,\n  get: function () {\n    return _index.__InputValue;\n  },\n});\nObject.defineProperty(exports, '__Schema', {\n  enumerable: true,\n  get: function () {\n    return _index.__Schema;\n  },\n});\nObject.defineProperty(exports, '__Type', {\n  enumerable: true,\n  get: function () {\n    return _index.__Type;\n  },\n});\nObject.defineProperty(exports, '__TypeKind', {\n  enumerable: true,\n  get: function () {\n    return _index.__TypeKind;\n  },\n});\nObject.defineProperty(exports, 'assertAbstractType', {\n  enumerable: true,\n  get: function () {\n    return _index.assertAbstractType;\n  },\n});\nObject.defineProperty(exports, 'assertCompositeType', {\n  enumerable: true,\n  get: function () {\n    return _index.assertCompositeType;\n  },\n});\nObject.defineProperty(exports, 'assertDirective', {\n  enumerable: true,\n  get: function () {\n    return _index.assertDirective;\n  },\n});\nObject.defineProperty(exports, 'assertEnumType', {\n  enumerable: true,\n  get: function () {\n    return _index.assertEnumType;\n  },\n});\nObject.defineProperty(exports, 'assertEnumValueName', {\n  enumerable: true,\n  get: function () {\n    return _index.assertEnumValueName;\n  },\n});\nObject.defineProperty(exports, 'assertInputObjectType', {\n  enumerable: true,\n  get: function () {\n    return _index.assertInputObjectType;\n  },\n});\nObject.defineProperty(exports, 'assertInputType', {\n  enumerable: true,\n  get: function () {\n    return _index.assertInputType;\n  },\n});\nObject.defineProperty(exports, 'assertInterfaceType', {\n  enumerable: true,\n  get: function () {\n    return _index.assertInterfaceType;\n  },\n});\nObject.defineProperty(exports, 'assertLeafType', {\n  enumerable: true,\n  get: function () {\n    return _index.assertLeafType;\n  },\n});\nObject.defineProperty(exports, 'assertListType', {\n  enumerable: true,\n  get: function () {\n    return _index.assertListType;\n  },\n});\nObject.defineProperty(exports, 'assertName', {\n  enumerable: true,\n  get: function () {\n    return _index.assertName;\n  },\n});\nObject.defineProperty(exports, 'assertNamedType', {\n  enumerable: true,\n  get: function () {\n    return _index.assertNamedType;\n  },\n});\nObject.defineProperty(exports, 'assertNonNullType', {\n  enumerable: true,\n  get: function () {\n    return _index.assertNonNullType;\n  },\n});\nObject.defineProperty(exports, 'assertNullableType', {\n  enumerable: true,\n  get: function () {\n    return _index.assertNullableType;\n  },\n});\nObject.defineProperty(exports, 'assertObjectType', {\n  enumerable: true,\n  get: function () {\n    return _index.assertObjectType;\n  },\n});\nObject.defineProperty(exports, 'assertOutputType', {\n  enumerable: true,\n  get: function () {\n    return _index.assertOutputType;\n  },\n});\nObject.defineProperty(exports, 'assertScalarType', {\n  enumerable: true,\n  get: function () {\n    return _index.assertScalarType;\n  },\n});\nObject.defineProperty(exports, 'assertSchema', {\n  enumerable: true,\n  get: function () {\n    return _index.assertSchema;\n  },\n});\nObject.defineProperty(exports, 'assertType', {\n  enumerable: true,\n  get: function () {\n    return _index.assertType;\n  },\n});\nObject.defineProperty(exports, 'assertUnionType', {\n  enumerable: true,\n  get: function () {\n    return _index.assertUnionType;\n  },\n});\nObject.defineProperty(exports, 'assertValidName', {\n  enumerable: true,\n  get: function () {\n    return _index6.assertValidName;\n  },\n});\nObject.defineProperty(exports, 'assertValidSchema', {\n  enumerable: true,\n  get: function () {\n    return _index.assertValidSchema;\n  },\n});\nObject.defineProperty(exports, 'assertWrappingType', {\n  enumerable: true,\n  get: function () {\n    return _index.assertWrappingType;\n  },\n});\nObject.defineProperty(exports, 'astFromValue', {\n  enumerable: true,\n  get: function () {\n    return _index6.astFromValue;\n  },\n});\nObject.defineProperty(exports, 'buildASTSchema', {\n  enumerable: true,\n  get: function () {\n    return _index6.buildASTSchema;\n  },\n});\nObject.defineProperty(exports, 'buildClientSchema', {\n  enumerable: true,\n  get: function () {\n    return _index6.buildClientSchema;\n  },\n});\nObject.defineProperty(exports, 'buildSchema', {\n  enumerable: true,\n  get: function () {\n    return _index6.buildSchema;\n  },\n});\nObject.defineProperty(exports, 'coerceInputValue', {\n  enumerable: true,\n  get: function () {\n    return _index6.coerceInputValue;\n  },\n});\nObject.defineProperty(exports, 'concatAST', {\n  enumerable: true,\n  get: function () {\n    return _index6.concatAST;\n  },\n});\nObject.defineProperty(exports, 'createSourceEventStream', {\n  enumerable: true,\n  get: function () {\n    return _index3.createSourceEventStream;\n  },\n});\nObject.defineProperty(exports, 'defaultFieldResolver', {\n  enumerable: true,\n  get: function () {\n    return _index3.defaultFieldResolver;\n  },\n});\nObject.defineProperty(exports, 'defaultTypeResolver', {\n  enumerable: true,\n  get: function () {\n    return _index3.defaultTypeResolver;\n  },\n});\nObject.defineProperty(exports, 'doTypesOverlap', {\n  enumerable: true,\n  get: function () {\n    return _index6.doTypesOverlap;\n  },\n});\nObject.defineProperty(exports, 'execute', {\n  enumerable: true,\n  get: function () {\n    return _index3.execute;\n  },\n});\nObject.defineProperty(exports, 'executeSync', {\n  enumerable: true,\n  get: function () {\n    return _index3.executeSync;\n  },\n});\nObject.defineProperty(exports, 'extendSchema', {\n  enumerable: true,\n  get: function () {\n    return _index6.extendSchema;\n  },\n});\nObject.defineProperty(exports, 'findBreakingChanges', {\n  enumerable: true,\n  get: function () {\n    return _index6.findBreakingChanges;\n  },\n});\nObject.defineProperty(exports, 'findDangerousChanges', {\n  enumerable: true,\n  get: function () {\n    return _index6.findDangerousChanges;\n  },\n});\nObject.defineProperty(exports, 'formatError', {\n  enumerable: true,\n  get: function () {\n    return _index5.formatError;\n  },\n});\nObject.defineProperty(exports, 'getArgumentValues', {\n  enumerable: true,\n  get: function () {\n    return _index3.getArgumentValues;\n  },\n});\nObject.defineProperty(exports, 'getDirectiveValues', {\n  enumerable: true,\n  get: function () {\n    return _index3.getDirectiveValues;\n  },\n});\nObject.defineProperty(exports, 'getEnterLeaveForKind', {\n  enumerable: true,\n  get: function () {\n    return _index2.getEnterLeaveForKind;\n  },\n});\nObject.defineProperty(exports, 'getIntrospectionQuery', {\n  enumerable: true,\n  get: function () {\n    return _index6.getIntrospectionQuery;\n  },\n});\nObject.defineProperty(exports, 'getLocation', {\n  enumerable: true,\n  get: function () {\n    return _index2.getLocation;\n  },\n});\nObject.defineProperty(exports, 'getNamedType', {\n  enumerable: true,\n  get: function () {\n    return _index.getNamedType;\n  },\n});\nObject.defineProperty(exports, 'getNullableType', {\n  enumerable: true,\n  get: function () {\n    return _index.getNullableType;\n  },\n});\nObject.defineProperty(exports, 'getOperationAST', {\n  enumerable: true,\n  get: function () {\n    return _index6.getOperationAST;\n  },\n});\nObject.defineProperty(exports, 'getOperationRootType', {\n  enumerable: true,\n  get: function () {\n    return _index6.getOperationRootType;\n  },\n});\nObject.defineProperty(exports, 'getVariableValues', {\n  enumerable: true,\n  get: function () {\n    return _index3.getVariableValues;\n  },\n});\nObject.defineProperty(exports, 'getVisitFn', {\n  enumerable: true,\n  get: function () {\n    return _index2.getVisitFn;\n  },\n});\nObject.defineProperty(exports, 'graphql', {\n  enumerable: true,\n  get: function () {\n    return _graphql.graphql;\n  },\n});\nObject.defineProperty(exports, 'graphqlSync', {\n  enumerable: true,\n  get: function () {\n    return _graphql.graphqlSync;\n  },\n});\nObject.defineProperty(exports, 'introspectionFromSchema', {\n  enumerable: true,\n  get: function () {\n    return _index6.introspectionFromSchema;\n  },\n});\nObject.defineProperty(exports, 'introspectionTypes', {\n  enumerable: true,\n  get: function () {\n    return _index.introspectionTypes;\n  },\n});\nObject.defineProperty(exports, 'isAbstractType', {\n  enumerable: true,\n  get: function () {\n    return _index.isAbstractType;\n  },\n});\nObject.defineProperty(exports, 'isCompositeType', {\n  enumerable: true,\n  get: function () {\n    return _index.isCompositeType;\n  },\n});\nObject.defineProperty(exports, 'isConstValueNode', {\n  enumerable: true,\n  get: function () {\n    return _index2.isConstValueNode;\n  },\n});\nObject.defineProperty(exports, 'isDefinitionNode', {\n  enumerable: true,\n  get: function () {\n    return _index2.isDefinitionNode;\n  },\n});\nObject.defineProperty(exports, 'isDirective', {\n  enumerable: true,\n  get: function () {\n    return _index.isDirective;\n  },\n});\nObject.defineProperty(exports, 'isEnumType', {\n  enumerable: true,\n  get: function () {\n    return _index.isEnumType;\n  },\n});\nObject.defineProperty(exports, 'isEqualType', {\n  enumerable: true,\n  get: function () {\n    return _index6.isEqualType;\n  },\n});\nObject.defineProperty(exports, 'isExecutableDefinitionNode', {\n  enumerable: true,\n  get: function () {\n    return _index2.isExecutableDefinitionNode;\n  },\n});\nObject.defineProperty(exports, 'isInputObjectType', {\n  enumerable: true,\n  get: function () {\n    return _index.isInputObjectType;\n  },\n});\nObject.defineProperty(exports, 'isInputType', {\n  enumerable: true,\n  get: function () {\n    return _index.isInputType;\n  },\n});\nObject.defineProperty(exports, 'isInterfaceType', {\n  enumerable: true,\n  get: function () {\n    return _index.isInterfaceType;\n  },\n});\nObject.defineProperty(exports, 'isIntrospectionType', {\n  enumerable: true,\n  get: function () {\n    return _index.isIntrospectionType;\n  },\n});\nObject.defineProperty(exports, 'isLeafType', {\n  enumerable: true,\n  get: function () {\n    return _index.isLeafType;\n  },\n});\nObject.defineProperty(exports, 'isListType', {\n  enumerable: true,\n  get: function () {\n    return _index.isListType;\n  },\n});\nObject.defineProperty(exports, 'isNamedType', {\n  enumerable: true,\n  get: function () {\n    return _index.isNamedType;\n  },\n});\nObject.defineProperty(exports, 'isNonNullType', {\n  enumerable: true,\n  get: function () {\n    return _index.isNonNullType;\n  },\n});\nObject.defineProperty(exports, 'isNullableType', {\n  enumerable: true,\n  get: function () {\n    return _index.isNullableType;\n  },\n});\nObject.defineProperty(exports, 'isObjectType', {\n  enumerable: true,\n  get: function () {\n    return _index.isObjectType;\n  },\n});\nObject.defineProperty(exports, 'isOutputType', {\n  enumerable: true,\n  get: function () {\n    return _index.isOutputType;\n  },\n});\nObject.defineProperty(exports, 'isRequiredArgument', {\n  enumerable: true,\n  get: function () {\n    return _index.isRequiredArgument;\n  },\n});\nObject.defineProperty(exports, 'isRequiredInputField', {\n  enumerable: true,\n  get: function () {\n    return _index.isRequiredInputField;\n  },\n});\nObject.defineProperty(exports, 'isScalarType', {\n  enumerable: true,\n  get: function () {\n    return _index.isScalarType;\n  },\n});\nObject.defineProperty(exports, 'isSchema', {\n  enumerable: true,\n  get: function () {\n    return _index.isSchema;\n  },\n});\nObject.defineProperty(exports, 'isSelectionNode', {\n  enumerable: true,\n  get: function () {\n    return _index2.isSelectionNode;\n  },\n});\nObject.defineProperty(exports, 'isSpecifiedDirective', {\n  enumerable: true,\n  get: function () {\n    return _index.isSpecifiedDirective;\n  },\n});\nObject.defineProperty(exports, 'isSpecifiedScalarType', {\n  enumerable: true,\n  get: function () {\n    return _index.isSpecifiedScalarType;\n  },\n});\nObject.defineProperty(exports, 'isType', {\n  enumerable: true,\n  get: function () {\n    return _index.isType;\n  },\n});\nObject.defineProperty(exports, 'isTypeDefinitionNode', {\n  enumerable: true,\n  get: function () {\n    return _index2.isTypeDefinitionNode;\n  },\n});\nObject.defineProperty(exports, 'isTypeExtensionNode', {\n  enumerable: true,\n  get: function () {\n    return _index2.isTypeExtensionNode;\n  },\n});\nObject.defineProperty(exports, 'isTypeNode', {\n  enumerable: true,\n  get: function () {\n    return _index2.isTypeNode;\n  },\n});\nObject.defineProperty(exports, 'isTypeSubTypeOf', {\n  enumerable: true,\n  get: function () {\n    return _index6.isTypeSubTypeOf;\n  },\n});\nObject.defineProperty(exports, 'isTypeSystemDefinitionNode', {\n  enumerable: true,\n  get: function () {\n    return _index2.isTypeSystemDefinitionNode;\n  },\n});\nObject.defineProperty(exports, 'isTypeSystemExtensionNode', {\n  enumerable: true,\n  get: function () {\n    return _index2.isTypeSystemExtensionNode;\n  },\n});\nObject.defineProperty(exports, 'isUnionType', {\n  enumerable: true,\n  get: function () {\n    return _index.isUnionType;\n  },\n});\nObject.defineProperty(exports, 'isValidNameError', {\n  enumerable: true,\n  get: function () {\n    return _index6.isValidNameError;\n  },\n});\nObject.defineProperty(exports, 'isValueNode', {\n  enumerable: true,\n  get: function () {\n    return _index2.isValueNode;\n  },\n});\nObject.defineProperty(exports, 'isWrappingType', {\n  enumerable: true,\n  get: function () {\n    return _index.isWrappingType;\n  },\n});\nObject.defineProperty(exports, 'lexicographicSortSchema', {\n  enumerable: true,\n  get: function () {\n    return _index6.lexicographicSortSchema;\n  },\n});\nObject.defineProperty(exports, 'locatedError', {\n  enumerable: true,\n  get: function () {\n    return _index5.locatedError;\n  },\n});\nObject.defineProperty(exports, 'parse', {\n  enumerable: true,\n  get: function () {\n    return _index2.parse;\n  },\n});\nObject.defineProperty(exports, 'parseConstValue', {\n  enumerable: true,\n  get: function () {\n    return _index2.parseConstValue;\n  },\n});\nObject.defineProperty(exports, 'parseType', {\n  enumerable: true,\n  get: function () {\n    return _index2.parseType;\n  },\n});\nObject.defineProperty(exports, 'parseValue', {\n  enumerable: true,\n  get: function () {\n    return _index2.parseValue;\n  },\n});\nObject.defineProperty(exports, 'print', {\n  enumerable: true,\n  get: function () {\n    return _index2.print;\n  },\n});\nObject.defineProperty(exports, 'printError', {\n  enumerable: true,\n  get: function () {\n    return _index5.printError;\n  },\n});\nObject.defineProperty(exports, 'printIntrospectionSchema', {\n  enumerable: true,\n  get: function () {\n    return _index6.printIntrospectionSchema;\n  },\n});\nObject.defineProperty(exports, 'printLocation', {\n  enumerable: true,\n  get: function () {\n    return _index2.printLocation;\n  },\n});\nObject.defineProperty(exports, 'printSchema', {\n  enumerable: true,\n  get: function () {\n    return _index6.printSchema;\n  },\n});\nObject.defineProperty(exports, 'printSourceLocation', {\n  enumerable: true,\n  get: function () {\n    return _index2.printSourceLocation;\n  },\n});\nObject.defineProperty(exports, 'printType', {\n  enumerable: true,\n  get: function () {\n    return _index6.printType;\n  },\n});\nObject.defineProperty(exports, 'resolveObjMapThunk', {\n  enumerable: true,\n  get: function () {\n    return _index.resolveObjMapThunk;\n  },\n});\nObject.defineProperty(exports, 'resolveReadonlyArrayThunk', {\n  enumerable: true,\n  get: function () {\n    return _index.resolveReadonlyArrayThunk;\n  },\n});\nObject.defineProperty(exports, 'responsePathAsArray', {\n  enumerable: true,\n  get: function () {\n    return _index3.responsePathAsArray;\n  },\n});\nObject.defineProperty(exports, 'separateOperations', {\n  enumerable: true,\n  get: function () {\n    return _index6.separateOperations;\n  },\n});\nObject.defineProperty(exports, 'specifiedDirectives', {\n  enumerable: true,\n  get: function () {\n    return _index.specifiedDirectives;\n  },\n});\nObject.defineProperty(exports, 'specifiedRules', {\n  enumerable: true,\n  get: function () {\n    return _index4.specifiedRules;\n  },\n});\nObject.defineProperty(exports, 'specifiedScalarTypes', {\n  enumerable: true,\n  get: function () {\n    return _index.specifiedScalarTypes;\n  },\n});\nObject.defineProperty(exports, 'stripIgnoredCharacters', {\n  enumerable: true,\n  get: function () {\n    return _index6.stripIgnoredCharacters;\n  },\n});\nObject.defineProperty(exports, 'subscribe', {\n  enumerable: true,\n  get: function () {\n    return _index3.subscribe;\n  },\n});\nObject.defineProperty(exports, 'syntaxError', {\n  enumerable: true,\n  get: function () {\n    return _index5.syntaxError;\n  },\n});\nObject.defineProperty(exports, 'typeFromAST', {\n  enumerable: true,\n  get: function () {\n    return _index6.typeFromAST;\n  },\n});\nObject.defineProperty(exports, 'validate', {\n  enumerable: true,\n  get: function () {\n    return _index4.validate;\n  },\n});\nObject.defineProperty(exports, 'validateSchema', {\n  enumerable: true,\n  get: function () {\n    return _index.validateSchema;\n  },\n});\nObject.defineProperty(exports, 'valueFromAST', {\n  enumerable: true,\n  get: function () {\n    return _index6.valueFromAST;\n  },\n});\nObject.defineProperty(exports, 'valueFromASTUntyped', {\n  enumerable: true,\n  get: function () {\n    return _index6.valueFromASTUntyped;\n  },\n});\nObject.defineProperty(exports, 'version', {\n  enumerable: true,\n  get: function () {\n    return _version.version;\n  },\n});\nObject.defineProperty(exports, 'versionInfo', {\n  enumerable: true,\n  get: function () {\n    return _version.versionInfo;\n  },\n});\nObject.defineProperty(exports, 'visit', {\n  enumerable: true,\n  get: function () {\n    return _index2.visit;\n  },\n});\nObject.defineProperty(exports, 'visitInParallel', {\n  enumerable: true,\n  get: function () {\n    return _index2.visitInParallel;\n  },\n});\nObject.defineProperty(exports, 'visitWithTypeInfo', {\n  enumerable: true,\n  get: function () {\n    return _index6.visitWithTypeInfo;\n  },\n});\n\nvar _version = require('./version.js');\n\nvar _graphql = require('./graphql.js');\n\nvar _index = require('./type/index.js');\n\nvar _index2 = require('./language/index.js');\n\nvar _index3 = require('./execution/index.js');\n\nvar _index4 = require('./validation/index.js');\n\nvar _index5 = require('./error/index.js');\n\nvar _index6 = require('./utilities/index.js');\n/error/index.js\u0003'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nObject.defineProperty(exports, 'GraphQLError', {\n  enumerable: true,\n  get: function () {\n    return _GraphQLError.GraphQLError;\n  },\n});\nObject.defineProperty(exports, 'formatError', {\n  enumerable: true,\n  get: function () {\n    return _GraphQLError.formatError;\n  },\n});\nObject.defineProperty(exports, 'locatedError', {\n  enumerable: true,\n  get: function () {\n    return _locatedError.locatedError;\n  },\n});\nObject.defineProperty(exports, 'printError', {\n  enumerable: true,\n  get: function () {\n    return _GraphQLError.printError;\n  },\n});\nObject.defineProperty(exports, 'syntaxError', {\n  enumerable: true,\n  get: function () {\n    return _syntaxError.syntaxError;\n  },\n});\n\nvar _GraphQLError = require('./GraphQLError.js');\n\nvar _syntaxError = require('./syntaxError.js');\n\nvar _locatedError = require('./locatedError.js');\n!/utilities/findBreakingChanges.jsD'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.DangerousChangeType = exports.BreakingChangeType = void 0;\nexports.findBreakingChanges = findBreakingChanges;\nexports.findDangerousChanges = findDangerousChanges;\n\nvar _inspect = require('../jsutils/inspect.js');\n\nvar _invariant = require('../jsutils/invariant.js');\n\nvar _keyMap = require('../jsutils/keyMap.js');\n\nvar _printer = require('../language/printer.js');\n\nvar _definition = require('../type/definition.js');\n\nvar _scalars = require('../type/scalars.js');\n\nvar _astFromValue = require('./astFromValue.js');\n\nvar _sortValueNode = require('./sortValueNode.js');\n\nvar BreakingChangeType;\nexports.BreakingChangeType = BreakingChangeType;\n\n(function (BreakingChangeType) {\n  BreakingChangeType['TYPE_REMOVED'] = 'TYPE_REMOVED';\n  BreakingChangeType['TYPE_CHANGED_KIND'] = 'TYPE_CHANGED_KIND';\n  BreakingChangeType['TYPE_REMOVED_FROM_UNION'] = 'TYPE_REMOVED_FROM_UNION';\n  BreakingChangeType['VALUE_REMOVED_FROM_ENUM'] = 'VALUE_REMOVED_FROM_ENUM';\n  BreakingChangeType['REQUIRED_INPUT_FIELD_ADDED'] =\n    'REQUIRED_INPUT_FIELD_ADDED';\n  BreakingChangeType['IMPLEMENTED_INTERFACE_REMOVED'] =\n    'IMPLEMENTED_INTERFACE_REMOVED';\n  BreakingChangeType['FIELD_REMOVED'] = 'FIELD_REMOVED';\n  BreakingChangeType['FIELD_CHANGED_KIND'] = 'FIELD_CHANGED_KIND';\n  BreakingChangeType['REQUIRED_ARG_ADDED'] = 'REQUIRED_ARG_ADDED';\n  BreakingChangeType['ARG_REMOVED'] = 'ARG_REMOVED';\n  BreakingChangeType['ARG_CHANGED_KIND'] = 'ARG_CHANGED_KIND';\n  BreakingChangeType['DIRECTIVE_REMOVED'] = 'DIRECTIVE_REMOVED';\n  BreakingChangeType['DIRECTIVE_ARG_REMOVED'] = 'DIRECTIVE_ARG_REMOVED';\n  BreakingChangeType['REQUIRED_DIRECTIVE_ARG_ADDED'] =\n    'REQUIRED_DIRECTIVE_ARG_ADDED';\n  BreakingChangeType['DIRECTIVE_REPEATABLE_REMOVED'] =\n    'DIRECTIVE_REPEATABLE_REMOVED';\n  BreakingChangeType['DIRECTIVE_LOCATION_REMOVED'] =\n    'DIRECTIVE_LOCATION_REMOVED';\n})(\n  BreakingChangeType || (exports.BreakingChangeType = BreakingChangeType = {}),\n);\n\nvar DangerousChangeType;\nexports.DangerousChangeType = DangerousChangeType;\n\n(function (DangerousChangeType) {\n  DangerousChangeType['VALUE_ADDED_TO_ENUM'] = 'VALUE_ADDED_TO_ENUM';\n  DangerousChangeType['TYPE_ADDED_TO_UNION'] = 'TYPE_ADDED_TO_UNION';\n  DangerousChangeType['OPTIONAL_INPUT_FIELD_ADDED'] =\n    'OPTIONAL_INPUT_FIELD_ADDED';\n  DangerousChangeType['OPTIONAL_ARG_ADDED'] = 'OPTIONAL_ARG_ADDED';\n  DangerousChangeType['IMPLEMENTED_INTERFACE_ADDED'] =\n    'IMPLEMENTED_INTERFACE_ADDED';\n  DangerousChangeType['ARG_DEFAULT_VALUE_CHANGE'] = 'ARG_DEFAULT_VALUE_CHANGE';\n})(\n  DangerousChangeType ||\n    (exports.DangerousChangeType = DangerousChangeType = {}),\n);\n\n/**\n * Given two schemas, returns an Array containing descriptions of all the types\n * of breaking changes covered by the other functions down below.\n */\nfunction findBreakingChanges(oldSchema, newSchema) {\n  // @ts-expect-error\n  return findSchemaChanges(oldSchema, newSchema).filter(\n    (change) => change.type in BreakingChangeType,\n  );\n}\n/**\n * Given two schemas, returns an Array containing descriptions of all the types\n * of potentially dangerous changes covered by the other functions down below.\n */\n\nfunction findDangerousChanges(oldSchema, newSchema) {\n  // @ts-expect-error\n  return findSchemaChanges(oldSchema, newSchema).filter(\n    (change) => change.type in DangerousChangeType,\n  );\n}\n\nfunction findSchemaChanges(oldSchema, newSchema) {\n  return [\n    ...findTypeChanges(oldSchema, newSchema),\n    ...findDirectiveChanges(oldSchema, newSchema),\n  ];\n}\n\nfunction findDirectiveChanges(oldSchema, newSchema) {\n  const schemaChanges = [];\n  const directivesDiff = diff(\n    oldSchema.getDirectives(),\n    newSchema.getDirectives(),\n  );\n\n  for (const oldDirective of directivesDiff.removed) {\n    schemaChanges.push({\n      type: BreakingChangeType.DIRECTIVE_REMOVED,\n      description: `${oldDirective.name} was removed.`,\n    });\n  }\n\n  for (const [oldDirective, newDirective] of directivesDiff.persisted) {\n    const argsDiff = diff(oldDirective.args, newDirective.args);\n\n    for (const newArg of argsDiff.added) {\n      if ((0, _definition.isRequiredArgument)(newArg)) {\n        schemaChanges.push({\n          type: BreakingChangeType.REQUIRED_DIRECTIVE_ARG_ADDED,\n          description: `A required arg ${newArg.name} on directive ${oldDirective.name} was added.`,\n        });\n      }\n    }\n\n    for (const oldArg of argsDiff.removed) {\n      schemaChanges.push({\n        type: BreakingChangeType.DIRECTIVE_ARG_REMOVED,\n        description: `${oldArg.name} was removed from ${oldDirective.name}.`,\n      });\n    }\n\n    if (oldDirective.isRepeatable && !newDirective.isRepeatable) {\n      schemaChanges.push({\n        type: BreakingChangeType.DIRECTIVE_REPEATABLE_REMOVED,\n        description: `Repeatable flag was removed from ${oldDirective.name}.`,\n      });\n    }\n\n    for (const location of oldDirective.locations) {\n      if (!newDirective.locations.includes(location)) {\n        schemaChanges.push({\n          type: BreakingChangeType.DIRECTIVE_LOCATION_REMOVED,\n          description: `${location} was removed from ${oldDirective.name}.`,\n        });\n      }\n    }\n  }\n\n  return schemaChanges;\n}\n\nfunction findTypeChanges(oldSchema, newSchema) {\n  const schemaChanges = [];\n  const typesDiff = diff(\n    Object.values(oldSchema.getTypeMap()),\n    Object.values(newSchema.getTypeMap()),\n  );\n\n  for (const oldType of typesDiff.removed) {\n    schemaChanges.push({\n      type: BreakingChangeType.TYPE_REMOVED,\n      description: (0, _scalars.isSpecifiedScalarType)(oldType)\n        ? `Standard scalar ${oldType.name} was removed because it is not referenced anymore.`\n        : `${oldType.name} was removed.`,\n    });\n  }\n\n  for (const [oldType, newType] of typesDiff.persisted) {\n    if (\n      (0, _definition.isEnumType)(oldType) &&\n      (0, _definition.isEnumType)(newType)\n    ) {\n      schemaChanges.push(...findEnumTypeChanges(oldType, newType));\n    } else if (\n      (0, _definition.isUnionType)(oldType) &&\n      (0, _definition.isUnionType)(newType)\n    ) {\n      schemaChanges.push(...findUnionTypeChanges(oldType, newType));\n    } else if (\n      (0, _definition.isInputObjectType)(oldType) &&\n      (0, _definition.isInputObjectType)(newType)\n    ) {\n      schemaChanges.push(...findInputObjectTypeChanges(oldType, newType));\n    } else if (\n      (0, _definition.isObjectType)(oldType) &&\n      (0, _definition.isObjectType)(newType)\n    ) {\n      schemaChanges.push(\n        ...findFieldChanges(oldType, newType),\n        ...findImplementedInterfacesChanges(oldType, newType),\n      );\n    } else if (\n      (0, _definition.isInterfaceType)(oldType) &&\n      (0, _definition.isInterfaceType)(newType)\n    ) {\n      schemaChanges.push(\n        ...findFieldChanges(oldType, newType),\n        ...findImplementedInterfacesChanges(oldType, newType),\n      );\n    } else if (oldType.constructor !== newType.constructor) {\n      schemaChanges.push({\n        type: BreakingChangeType.TYPE_CHANGED_KIND,\n        description:\n          `${oldType.name} changed from ` +\n          `${typeKindName(oldType)} to ${typeKindName(newType)}.`,\n      });\n    }\n  }\n\n  return schemaChanges;\n}\n\nfunction findInputObjectTypeChanges(oldType, newType) {\n  const schemaChanges = [];\n  const fieldsDiff = diff(\n    Object.values(oldType.getFields()),\n    Object.values(newType.getFields()),\n  );\n\n  for (const newField of fieldsDiff.added) {\n    if ((0, _definition.isRequiredInputField)(newField)) {\n      schemaChanges.push({\n        type: BreakingChangeType.REQUIRED_INPUT_FIELD_ADDED,\n        description: `A required field ${newField.name} on input type ${oldType.name} was added.`,\n      });\n    } else {\n      schemaChanges.push({\n        type: DangerousChangeType.OPTIONAL_INPUT_FIELD_ADDED,\n        description: `An optional field ${newField.name} on input type ${oldType.name} was added.`,\n      });\n    }\n  }\n\n  for (const oldField of fieldsDiff.removed) {\n    schemaChanges.push({\n      type: BreakingChangeType.FIELD_REMOVED,\n      description: `${oldType.name}.${oldField.name} was removed.`,\n    });\n  }\n\n  for (const [oldField, newField] of fieldsDiff.persisted) {\n    const isSafe = isChangeSafeForInputObjectFieldOrFieldArg(\n      oldField.type,\n      newField.type,\n    );\n\n    if (!isSafe) {\n      schemaChanges.push({\n        type: BreakingChangeType.FIELD_CHANGED_KIND,\n        description:\n          `${oldType.name}.${oldField.name} changed type from ` +\n          `${String(oldField.type)} to ${String(newField.type)}.`,\n      });\n    }\n  }\n\n  return schemaChanges;\n}\n\nfunction findUnionTypeChanges(oldType, newType) {\n  const schemaChanges = [];\n  const possibleTypesDiff = diff(oldType.getTypes(), newType.getTypes());\n\n  for (const newPossibleType of possibleTypesDiff.added) {\n    schemaChanges.push({\n      type: DangerousChangeType.TYPE_ADDED_TO_UNION,\n      description: `${newPossibleType.name} was added to union type ${oldType.name}.`,\n    });\n  }\n\n  for (const oldPossibleType of possibleTypesDiff.removed) {\n    schemaChanges.push({\n      type: BreakingChangeType.TYPE_REMOVED_FROM_UNION,\n      description: `${oldPossibleType.name} was removed from union type ${oldType.name}.`,\n    });\n  }\n\n  return schemaChanges;\n}\n\nfunction findEnumTypeChanges(oldType, newType) {\n  const schemaChanges = [];\n  const valuesDiff = diff(oldType.getValues(), newType.getValues());\n\n  for (const newValue of valuesDiff.added) {\n    schemaChanges.push({\n      type: DangerousChangeType.VALUE_ADDED_TO_ENUM,\n      description: `${newValue.name} was added to enum type ${oldType.name}.`,\n    });\n  }\n\n  for (const oldValue of valuesDiff.removed) {\n    schemaChanges.push({\n      type: BreakingChangeType.VALUE_REMOVED_FROM_ENUM,\n      description: `${oldValue.name} was removed from enum type ${oldType.name}.`,\n    });\n  }\n\n  return schemaChanges;\n}\n\nfunction findImplementedInterfacesChanges(oldType, newType) {\n  const schemaChanges = [];\n  const interfacesDiff = diff(oldType.getInterfaces(), newType.getInterfaces());\n\n  for (const newInterface of interfacesDiff.added) {\n    schemaChanges.push({\n      type: DangerousChangeType.IMPLEMENTED_INTERFACE_ADDED,\n      description: `${newInterface.name} added to interfaces implemented by ${oldType.name}.`,\n    });\n  }\n\n  for (const oldInterface of interfacesDiff.removed) {\n    schemaChanges.push({\n      type: BreakingChangeType.IMPLEMENTED_INTERFACE_REMOVED,\n      description: `${oldType.name} no longer implements interface ${oldInterface.name}.`,\n    });\n  }\n\n  return schemaChanges;\n}\n\nfunction findFieldChanges(oldType, newType) {\n  const schemaChanges = [];\n  const fieldsDiff = diff(\n    Object.values(oldType.getFields()),\n    Object.values(newType.getFields()),\n  );\n\n  for (const oldField of fieldsDiff.removed) {\n    schemaChanges.push({\n      type: BreakingChangeType.FIELD_REMOVED,\n      description: `${oldType.name}.${oldField.name} was removed.`,\n    });\n  }\n\n  for (const [oldField, newField] of fieldsDiff.persisted) {\n    schemaChanges.push(...findArgChanges(oldType, oldField, newField));\n    const isSafe = isChangeSafeForObjectOrInterfaceField(\n      oldField.type,\n      newField.type,\n    );\n\n    if (!isSafe) {\n      schemaChanges.push({\n        type: BreakingChangeType.FIELD_CHANGED_KIND,\n        description:\n          `${oldType.name}.${oldField.name} changed type from ` +\n          `${String(oldField.type)} to ${String(newField.type)}.`,\n      });\n    }\n  }\n\n  return schemaChanges;\n}\n\nfunction findArgChanges(oldType, oldField, newField) {\n  const schemaChanges = [];\n  const argsDiff = diff(oldField.args, newField.args);\n\n  for (const oldArg of argsDiff.removed) {\n    schemaChanges.push({\n      type: BreakingChangeType.ARG_REMOVED,\n      description: `${oldType.name}.${oldField.name} arg ${oldArg.name} was removed.`,\n    });\n  }\n\n  for (const [oldArg, newArg] of argsDiff.persisted) {\n    const isSafe = isChangeSafeForInputObjectFieldOrFieldArg(\n      oldArg.type,\n      newArg.type,\n    );\n\n    if (!isSafe) {\n      schemaChanges.push({\n        type: BreakingChangeType.ARG_CHANGED_KIND,\n        description:\n          `${oldType.name}.${oldField.name} arg ${oldArg.name} has changed type from ` +\n          `${String(oldArg.type)} to ${String(newArg.type)}.`,\n      });\n    } else if (oldArg.defaultValue !== undefined) {\n      if (newArg.defaultValue === undefined) {\n        schemaChanges.push({\n          type: DangerousChangeType.ARG_DEFAULT_VALUE_CHANGE,\n          description: `${oldType.name}.${oldField.name} arg ${oldArg.name} defaultValue was removed.`,\n        });\n      } else {\n        // Since we looking only for client's observable changes we should\n        // compare default values in the same representation as they are\n        // represented inside introspection.\n        const oldValueStr = stringifyValue(oldArg.defaultValue, oldArg.type);\n        const newValueStr = stringifyValue(newArg.defaultValue, newArg.type);\n\n        if (oldValueStr !== newValueStr) {\n          schemaChanges.push({\n            type: DangerousChangeType.ARG_DEFAULT_VALUE_CHANGE,\n            description: `${oldType.name}.${oldField.name} arg ${oldArg.name} has changed defaultValue from ${oldValueStr} to ${newValueStr}.`,\n          });\n        }\n      }\n    }\n  }\n\n  for (const newArg of argsDiff.added) {\n    if ((0, _definition.isRequiredArgument)(newArg)) {\n      schemaChanges.push({\n        type: BreakingChangeType.REQUIRED_ARG_ADDED,\n        description: `A required arg ${newArg.name} on ${oldType.name}.${oldField.name} was added.`,\n      });\n    } else {\n      schemaChanges.push({\n        type: DangerousChangeType.OPTIONAL_ARG_ADDED,\n        description: `An optional arg ${newArg.name} on ${oldType.name}.${oldField.name} was added.`,\n      });\n    }\n  }\n\n  return schemaChanges;\n}\n\nfunction isChangeSafeForObjectOrInterfaceField(oldType, newType) {\n  if ((0, _definition.isListType)(oldType)) {\n    return (\n      // if they're both lists, make sure the underlying types are compatible\n      ((0, _definition.isListType)(newType) &&\n        isChangeSafeForObjectOrInterfaceField(\n          oldType.ofType,\n          newType.ofType,\n        )) || // moving from nullable to non-null of the same underlying type is safe\n      ((0, _definition.isNonNullType)(newType) &&\n        isChangeSafeForObjectOrInterfaceField(oldType, newType.ofType))\n    );\n  }\n\n  if ((0, _definition.isNonNullType)(oldType)) {\n    // if they're both non-null, make sure the underlying types are compatible\n    return (\n      (0, _definition.isNonNullType)(newType) &&\n      isChangeSafeForObjectOrInterfaceField(oldType.ofType, newType.ofType)\n    );\n  }\n\n  return (\n    // if they're both named types, see if their names are equivalent\n    ((0, _definition.isNamedType)(newType) && oldType.name === newType.name) || // moving from nullable to non-null of the same underlying type is safe\n    ((0, _definition.isNonNullType)(newType) &&\n      isChangeSafeForObjectOrInterfaceField(oldType, newType.ofType))\n  );\n}\n\nfunction isChangeSafeForInputObjectFieldOrFieldArg(oldType, newType) {\n  if ((0, _definition.isListType)(oldType)) {\n    // if they're both lists, make sure the underlying types are compatible\n    return (\n      (0, _definition.isListType)(newType) &&\n      isChangeSafeForInputObjectFieldOrFieldArg(oldType.ofType, newType.ofType)\n    );\n  }\n\n  if ((0, _definition.isNonNullType)(oldType)) {\n    return (\n      // if they're both non-null, make sure the underlying types are\n      // compatible\n      ((0, _definition.isNonNullType)(newType) &&\n        isChangeSafeForInputObjectFieldOrFieldArg(\n          oldType.ofType,\n          newType.ofType,\n        )) || // moving from non-null to nullable of the same underlying type is safe\n      (!(0, _definition.isNonNullType)(newType) &&\n        isChangeSafeForInputObjectFieldOrFieldArg(oldType.ofType, newType))\n    );\n  } // if they're both named types, see if their names are equivalent\n\n  return (0, _definition.isNamedType)(newType) && oldType.name === newType.name;\n}\n\nfunction typeKindName(type) {\n  if ((0, _definition.isScalarType)(type)) {\n    return 'a Scalar type';\n  }\n\n  if ((0, _definition.isObjectType)(type)) {\n    return 'an Object type';\n  }\n\n  if ((0, _definition.isInterfaceType)(type)) {\n    return 'an Interface type';\n  }\n\n  if ((0, _definition.isUnionType)(type)) {\n    return 'a Union type';\n  }\n\n  if ((0, _definition.isEnumType)(type)) {\n    return 'an Enum type';\n  }\n\n  if ((0, _definition.isInputObjectType)(type)) {\n    return 'an Input type';\n  }\n  /* c8 ignore next 3 */\n  // Not reachable, all possible types have been considered.\n\n  false ||\n    (0, _invariant.invariant)(\n      false,\n      'Unexpected type: ' + (0, _inspect.inspect)(type),\n    );\n}\n\nfunction stringifyValue(value, type) {\n  const ast = (0, _astFromValue.astFromValue)(value, type);\n  ast != null || (0, _invariant.invariant)(false);\n  return (0, _printer.print)((0, _sortValueNode.sortValueNode)(ast));\n}\n\nfunction diff(oldArray, newArray) {\n  const added = [];\n  const removed = [];\n  const persisted = [];\n  const oldMap = (0, _keyMap.keyMap)(oldArray, ({ name }) => name);\n  const newMap = (0, _keyMap.keyMap)(newArray, ({ name }) => name);\n\n  for (const oldItem of oldArray) {\n    const newItem = newMap[oldItem.name];\n\n    if (newItem === undefined) {\n      removed.push(oldItem);\n    } else {\n      persisted.push([oldItem, newItem]);\n    }\n  }\n\n  for (const newItem of newArray) {\n    if (oldMap[newItem.name] === undefined) {\n      added.push(newItem);\n    }\n  }\n\n  return {\n    added,\n    persisted,\n    removed,\n  };\n}\n/jsutils/didYouMean.mjs\u0003\u0004const MAX_SUGGESTIONS = 5;\n/**\n * Given [ A, B, C ] return ' Did you mean A, B, or C?'.\n */\n\nexport function didYouMean(firstArg, secondArg) {\n  const [subMessage, suggestionsArg] = secondArg\n    ? [firstArg, secondArg]\n    : [undefined, firstArg];\n  let message = ' Did you mean ';\n\n  if (subMessage) {\n    message += subMessage + ' ';\n  }\n\n  const suggestions = suggestionsArg.map((x) => `\"${x}\"`);\n\n  switch (suggestions.length) {\n    case 0:\n      return '';\n\n    case 1:\n      return message + suggestions[0] + '?';\n\n    case 2:\n      return message + suggestions[0] + ' or ' + suggestions[1] + '?';\n  }\n\n  const selected = suggestions.slice(0, MAX_SUGGESTIONS);\n  const lastItem = selected.pop();\n  return message + selected.join(', ') + ', or ' + lastItem + '?';\n}\n-/validation/rules/LoneSchemaDefinitionRule.js\u0006'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.LoneSchemaDefinitionRule = LoneSchemaDefinitionRule;\n\nvar _GraphQLError = require('../../error/GraphQLError.js');\n\n/**\n * Lone Schema definition\n *\n * A GraphQL document is only valid if it contains only one schema definition.\n */\nfunction LoneSchemaDefinitionRule(context) {\n  var _ref, _ref2, _oldSchema$astNode;\n\n  const oldSchema = context.getSchema();\n  const alreadyDefined =\n    (_ref =\n      (_ref2 =\n        (_oldSchema$astNode =\n          oldSchema === null || oldSchema === void 0\n            ? void 0\n            : oldSchema.astNode) !== null && _oldSchema$astNode !== void 0\n          ? _oldSchema$astNode\n          : oldSchema === null || oldSchema === void 0\n          ? void 0\n          : oldSchema.getQueryType()) !== null && _ref2 !== void 0\n        ? _ref2\n        : oldSchema === null || oldSchema === void 0\n        ? void 0\n        : oldSchema.getMutationType()) !== null && _ref !== void 0\n      ? _ref\n      : oldSchema === null || oldSchema === void 0\n      ? void 0\n      : oldSchema.getSubscriptionType();\n  let schemaDefinitionsCount = 0;\n  return {\n    SchemaDefinition(node) {\n      if (alreadyDefined) {\n        context.reportError(\n          new _GraphQLError.GraphQLError(\n            'Cannot define a new schema within a schema extension.',\n            {\n              nodes: node,\n            },\n          ),\n        );\n        return;\n      }\n\n      if (schemaDefinitionsCount > 0) {\n        context.reportError(\n          new _GraphQLError.GraphQLError(\n            'Must provide only one schema definition.',\n            {\n              nodes: node,\n            },\n          ),\n        );\n      }\n\n      ++schemaDefinitionsCount;\n    },\n  };\n}\n=/validation/rules/custom/NoSchemaIntrospectionCustomRule.d.ts\u0002wimport type { ASTVisitor } from '../../../language/visitor';\nimport type { ValidationContext } from '../../ValidationContext';\n/**\n * Prohibit introspection queries\n *\n * A GraphQL document is only valid if all fields selected are not fields that\n * return an introspection type.\n *\n * Note: This rule is optional and is not part of the Validation section of the\n * GraphQL Specification. This rule effectively disables introspection, which\n * does not reflect best practices and should only be done if absolutely necessary.\n */\nexport declare function NoSchemaIntrospectionCustomRule(\n  context: ValidationContext,\n): ASTVisitor;\n/utilities/buildASTSchema.d.ts\u0004import type { DocumentNode } from '../language/ast';\nimport type { ParseOptions } from '../language/parser';\nimport type { Source } from '../language/source';\nimport type { GraphQLSchemaValidationOptions } from '../type/schema';\nimport { GraphQLSchema } from '../type/schema';\nexport interface BuildSchemaOptions extends GraphQLSchemaValidationOptions {\n  /**\n   * Set to true to assume the SDL is valid.\n   *\n   * Default: false\n   */\n  assumeValidSDL?: boolean;\n}\n/**\n * This takes the ast of a schema document produced by the parse function in\n * src/language/parser.js.\n *\n * If no schema definition is provided, then it will look for types named Query,\n * Mutation and Subscription.\n *\n * Given that AST it constructs a GraphQLSchema. The resulting schema\n * has no resolve methods, so execution will use default resolvers.\n */\nexport declare function buildASTSchema(\n  documentAST: DocumentNode,\n  options?: BuildSchemaOptions,\n): GraphQLSchema;\n/**\n * A helper function to build a GraphQLSchema directly from a source\n * document.\n */\nexport declare function buildSchema(\n  source: string | Source,\n  options?: BuildSchemaOptions & ParseOptions,\n): GraphQLSchema;\n/jsutils/groupBy.d.ts/**\n * Groups array items into a Map, given a function to produce grouping key.\n */\nexport declare function groupBy<K, T>(\n  list: ReadonlyArray<T>,\n  keyFn: (item: T) => K,\n): Map<K, ReadonlyArray<T>>;\n%/utilities/introspectionFromSchema.js\u0004'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.introspectionFromSchema = introspectionFromSchema;\n\nvar _invariant = require('../jsutils/invariant.js');\n\nvar _parser = require('../language/parser.js');\n\nvar _execute = require('../execution/execute.js');\n\nvar _getIntrospectionQuery = require('./getIntrospectionQuery.js');\n\n/**\n * Build an IntrospectionQuery from a GraphQLSchema\n *\n * IntrospectionQuery is useful for utilities that care about type and field\n * relationships, but do not need to traverse through those relationships.\n *\n * This is the inverse of buildClientSchema. The primary use case is outside\n * of the server context, for instance when doing schema comparisons.\n */\nfunction introspectionFromSchema(schema, options) {\n  const optionsWithDefaults = {\n    specifiedByUrl: true,\n    directiveIsRepeatable: true,\n    schemaDescription: true,\n    inputValueDeprecation: true,\n    ...options,\n  };\n  const document = (0, _parser.parse)(\n    (0, _getIntrospectionQuery.getIntrospectionQuery)(optionsWithDefaults),\n  );\n  const result = (0, _execute.executeSync)({\n    schema,\n    document,\n  });\n  (!result.errors && result.data) || (0, _invariant.invariant)(false);\n  return result.data;\n}\n0/validation/rules/LoneAnonymousOperationRule.mjs\u0003import { GraphQLError } from '../../error/GraphQLError.mjs';\nimport { Kind } from '../../language/kinds.mjs';\n\n/**\n * Lone anonymous operation\n *\n * A GraphQL document is only valid if when it contains an anonymous operation\n * (the query short-hand) that it contains only that one operation definition.\n *\n * See https://spec.graphql.org/draft/#sec-Lone-Anonymous-Operation\n */\nexport function LoneAnonymousOperationRule(context) {\n  let operationCount = 0;\n  return {\n    Document(node) {\n      operationCount = node.definitions.filter(\n        (definition) => definition.kind === Kind.OPERATION_DEFINITION,\n      ).length;\n    },\n\n    OperationDefinition(node) {\n      if (!node.name && operationCount > 1) {\n        context.reportError(\n          new GraphQLError(\n            'This anonymous operation must be the only defined operation.',\n            {\n              nodes: node,\n            },\n          ),\n        );\n      }\n    },\n  };\n}\n/utilities/getOperationAST.mjs\u0004\u000bimport { Kind } from '../language/kinds.mjs';\n/**\n * Returns an operation AST given a document AST and optionally an operation\n * name. If a name is not provided, an operation is only returned if only one is\n * provided in the document.\n */\n\nexport function getOperationAST(documentAST, operationName) {\n  let operation = null;\n\n  for (const definition of documentAST.definitions) {\n    if (definition.kind === Kind.OPERATION_DEFINITION) {\n      var _definition$name;\n\n      if (operationName == null) {\n        // If no operation name was provided, only return an Operation if there\n        // is one defined in the document. Upon encountering the second, return\n        // null.\n        if (operation) {\n          return null;\n        }\n\n        operation = definition;\n      } else if (\n        ((_definition$name = definition.name) === null ||\n        _definition$name === void 0\n          ? void 0\n          : _definition$name.value) === operationName\n      ) {\n        return definition;\n      }\n    }\n  }\n\n  return operation;\n}\n+/validation/rules/NoUnusedFragmentsRule.mjs\u0005-import { GraphQLError } from '../../error/GraphQLError.mjs';\n\n/**\n * No unused fragments\n *\n * A GraphQL document is only valid if all fragment definitions are spread\n * within operations, or spread within other fragments spread within operations.\n *\n * See https://spec.graphql.org/draft/#sec-Fragments-Must-Be-Used\n */\nexport function NoUnusedFragmentsRule(context) {\n  const operationDefs = [];\n  const fragmentDefs = [];\n  return {\n    OperationDefinition(node) {\n      operationDefs.push(node);\n      return false;\n    },\n\n    FragmentDefinition(node) {\n      fragmentDefs.push(node);\n      return false;\n    },\n\n    Document: {\n      leave() {\n        const fragmentNameUsed = Object.create(null);\n\n        for (const operation of operationDefs) {\n          for (const fragment of context.getRecursivelyReferencedFragments(\n            operation,\n          )) {\n            fragmentNameUsed[fragment.name.value] = true;\n          }\n        }\n\n        for (const fragmentDef of fragmentDefs) {\n          const fragName = fragmentDef.name.value;\n\n          if (fragmentNameUsed[fragName] !== true) {\n            context.reportError(\n              new GraphQLError(`Fragment \"${fragName}\" is never used.`, {\n                nodes: fragmentDef,\n              }),\n            );\n          }\n        }\n      },\n    },\n  };\n}\n/utilities/TypeInfo.js''use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.TypeInfo = void 0;\nexports.visitWithTypeInfo = visitWithTypeInfo;\n\nvar _ast = require('../language/ast.js');\n\nvar _kinds = require('../language/kinds.js');\n\nvar _visitor = require('../language/visitor.js');\n\nvar _definition = require('../type/definition.js');\n\nvar _introspection = require('../type/introspection.js');\n\nvar _typeFromAST = require('./typeFromAST.js');\n\n/**\n * TypeInfo is a utility class which, given a GraphQL schema, can keep track\n * of the current field and type definitions at any point in a GraphQL document\n * AST during a recursive descent by calling `enter(node)` and `leave(node)`.\n */\nclass TypeInfo {\n  constructor(\n    schema,\n    /**\n     * Initial type may be provided in rare cases to facilitate traversals\n     *  beginning somewhere other than documents.\n     */\n    initialType,\n    /** @deprecated will be removed in 17.0.0 */\n    getFieldDefFn,\n  ) {\n    this._schema = schema;\n    this._typeStack = [];\n    this._parentTypeStack = [];\n    this._inputTypeStack = [];\n    this._fieldDefStack = [];\n    this._defaultValueStack = [];\n    this._directive = null;\n    this._argument = null;\n    this._enumValue = null;\n    this._getFieldDef =\n      getFieldDefFn !== null && getFieldDefFn !== void 0\n        ? getFieldDefFn\n        : getFieldDef;\n\n    if (initialType) {\n      if ((0, _definition.isInputType)(initialType)) {\n        this._inputTypeStack.push(initialType);\n      }\n\n      if ((0, _definition.isCompositeType)(initialType)) {\n        this._parentTypeStack.push(initialType);\n      }\n\n      if ((0, _definition.isOutputType)(initialType)) {\n        this._typeStack.push(initialType);\n      }\n    }\n  }\n\n  get [Symbol.toStringTag]() {\n    return 'TypeInfo';\n  }\n\n  getType() {\n    if (this._typeStack.length > 0) {\n      return this._typeStack[this._typeStack.length - 1];\n    }\n  }\n\n  getParentType() {\n    if (this._parentTypeStack.length > 0) {\n      return this._parentTypeStack[this._parentTypeStack.length - 1];\n    }\n  }\n\n  getInputType() {\n    if (this._inputTypeStack.length > 0) {\n      return this._inputTypeStack[this._inputTypeStack.length - 1];\n    }\n  }\n\n  getParentInputType() {\n    if (this._inputTypeStack.length > 1) {\n      return this._inputTypeStack[this._inputTypeStack.length - 2];\n    }\n  }\n\n  getFieldDef() {\n    if (this._fieldDefStack.length > 0) {\n      return this._fieldDefStack[this._fieldDefStack.length - 1];\n    }\n  }\n\n  getDefaultValue() {\n    if (this._defaultValueStack.length > 0) {\n      return this._defaultValueStack[this._defaultValueStack.length - 1];\n    }\n  }\n\n  getDirective() {\n    return this._directive;\n  }\n\n  getArgument() {\n    return this._argument;\n  }\n\n  getEnumValue() {\n    return this._enumValue;\n  }\n\n  enter(node) {\n    const schema = this._schema; // Note: many of the types below are explicitly typed as \"unknown\" to drop\n    // any assumptions of a valid schema to ensure runtime types are properly\n    // checked before continuing since TypeInfo is used as part of validation\n    // which occurs before guarantees of schema and document validity.\n\n    switch (node.kind) {\n      case _kinds.Kind.SELECTION_SET: {\n        const namedType = (0, _definition.getNamedType)(this.getType());\n\n        this._parentTypeStack.push(\n          (0, _definition.isCompositeType)(namedType) ? namedType : undefined,\n        );\n\n        break;\n      }\n\n      case _kinds.Kind.FIELD: {\n        const parentType = this.getParentType();\n        let fieldDef;\n        let fieldType;\n\n        if (parentType) {\n          fieldDef = this._getFieldDef(schema, parentType, node);\n\n          if (fieldDef) {\n            fieldType = fieldDef.type;\n          }\n        }\n\n        this._fieldDefStack.push(fieldDef);\n\n        this._typeStack.push(\n          (0, _definition.isOutputType)(fieldType) ? fieldType : undefined,\n        );\n\n        break;\n      }\n\n      case _kinds.Kind.DIRECTIVE:\n        this._directive = schema.getDirective(node.name.value);\n        break;\n\n      case _kinds.Kind.OPERATION_DEFINITION: {\n        const rootType = schema.getRootType(node.operation);\n\n        this._typeStack.push(\n          (0, _definition.isObjectType)(rootType) ? rootType : undefined,\n        );\n\n        break;\n      }\n\n      case _kinds.Kind.INLINE_FRAGMENT:\n      case _kinds.Kind.FRAGMENT_DEFINITION: {\n        const typeConditionAST = node.typeCondition;\n        const outputType = typeConditionAST\n          ? (0, _typeFromAST.typeFromAST)(schema, typeConditionAST)\n          : (0, _definition.getNamedType)(this.getType());\n\n        this._typeStack.push(\n          (0, _definition.isOutputType)(outputType) ? outputType : undefined,\n        );\n\n        break;\n      }\n\n      case _kinds.Kind.VARIABLE_DEFINITION: {\n        const inputType = (0, _typeFromAST.typeFromAST)(schema, node.type);\n\n        this._inputTypeStack.push(\n          (0, _definition.isInputType)(inputType) ? inputType : undefined,\n        );\n\n        break;\n      }\n\n      case _kinds.Kind.ARGUMENT: {\n        var _this$getDirective;\n\n        let argDef;\n        let argType;\n        const fieldOrDirective =\n          (_this$getDirective = this.getDirective()) !== null &&\n          _this$getDirective !== void 0\n            ? _this$getDirective\n            : this.getFieldDef();\n\n        if (fieldOrDirective) {\n          argDef = fieldOrDirective.args.find(\n            (arg) => arg.name === node.name.value,\n          );\n\n          if (argDef) {\n            argType = argDef.type;\n          }\n        }\n\n        this._argument = argDef;\n\n        this._defaultValueStack.push(argDef ? argDef.defaultValue : undefined);\n\n        this._inputTypeStack.push(\n          (0, _definition.isInputType)(argType) ? argType : undefined,\n        );\n\n        break;\n      }\n\n      case _kinds.Kind.LIST: {\n        const listType = (0, _definition.getNullableType)(this.getInputType());\n        const itemType = (0, _definition.isListType)(listType)\n          ? listType.ofType\n          : listType; // List positions never have a default value.\n\n        this._defaultValueStack.push(undefined);\n\n        this._inputTypeStack.push(\n          (0, _definition.isInputType)(itemType) ? itemType : undefined,\n        );\n\n        break;\n      }\n\n      case _kinds.Kind.OBJECT_FIELD: {\n        const objectType = (0, _definition.getNamedType)(this.getInputType());\n        let inputFieldType;\n        let inputField;\n\n        if ((0, _definition.isInputObjectType)(objectType)) {\n          inputField = objectType.getFields()[node.name.value];\n\n          if (inputField) {\n            inputFieldType = inputField.type;\n          }\n        }\n\n        this._defaultValueStack.push(\n          inputField ? inputField.defaultValue : undefined,\n        );\n\n        this._inputTypeStack.push(\n          (0, _definition.isInputType)(inputFieldType)\n            ? inputFieldType\n            : undefined,\n        );\n\n        break;\n      }\n\n      case _kinds.Kind.ENUM: {\n        const enumType = (0, _definition.getNamedType)(this.getInputType());\n        let enumValue;\n\n        if ((0, _definition.isEnumType)(enumType)) {\n          enumValue = enumType.getValue(node.value);\n        }\n\n        this._enumValue = enumValue;\n        break;\n      }\n\n      default: // Ignore other nodes\n    }\n  }\n\n  leave(node) {\n    switch (node.kind) {\n      case _kinds.Kind.SELECTION_SET:\n        this._parentTypeStack.pop();\n\n        break;\n\n      case _kinds.Kind.FIELD:\n        this._fieldDefStack.pop();\n\n        this._typeStack.pop();\n\n        break;\n\n      case _kinds.Kind.DIRECTIVE:\n        this._directive = null;\n        break;\n\n      case _kinds.Kind.OPERATION_DEFINITION:\n      case _kinds.Kind.INLINE_FRAGMENT:\n      case _kinds.Kind.FRAGMENT_DEFINITION:\n        this._typeStack.pop();\n\n        break;\n\n      case _kinds.Kind.VARIABLE_DEFINITION:\n        this._inputTypeStack.pop();\n\n        break;\n\n      case _kinds.Kind.ARGUMENT:\n        this._argument = null;\n\n        this._defaultValueStack.pop();\n\n        this._inputTypeStack.pop();\n\n        break;\n\n      case _kinds.Kind.LIST:\n      case _kinds.Kind.OBJECT_FIELD:\n        this._defaultValueStack.pop();\n\n        this._inputTypeStack.pop();\n\n        break;\n\n      case _kinds.Kind.ENUM:\n        this._enumValue = null;\n        break;\n\n      default: // Ignore other nodes\n    }\n  }\n}\n\nexports.TypeInfo = TypeInfo;\n\n/**\n * Not exactly the same as the executor's definition of getFieldDef, in this\n * statically evaluated environment we do not always have an Object type,\n * and need to handle Interface and Union types.\n */\nfunction getFieldDef(schema, parentType, fieldNode) {\n  const name = fieldNode.name.value;\n\n  if (\n    name === _introspection.SchemaMetaFieldDef.name &&\n    schema.getQueryType() === parentType\n  ) {\n    return _introspection.SchemaMetaFieldDef;\n  }\n\n  if (\n    name === _introspection.TypeMetaFieldDef.name &&\n    schema.getQueryType() === parentType\n  ) {\n    return _introspection.TypeMetaFieldDef;\n  }\n\n  if (\n    name === _introspection.TypeNameMetaFieldDef.name &&\n    (0, _definition.isCompositeType)(parentType)\n  ) {\n    return _introspection.TypeNameMetaFieldDef;\n  }\n\n  if (\n    (0, _definition.isObjectType)(parentType) ||\n    (0, _definition.isInterfaceType)(parentType)\n  ) {\n    return parentType.getFields()[name];\n  }\n}\n/**\n * Creates a new visitor instance which maintains a provided TypeInfo instance\n * along with visiting visitor.\n */\n\nfunction visitWithTypeInfo(typeInfo, visitor) {\n  return {\n    enter(...args) {\n      const node = args[0];\n      typeInfo.enter(node);\n      const fn = (0, _visitor.getEnterLeaveForKind)(visitor, node.kind).enter;\n\n      if (fn) {\n        const result = fn.apply(visitor, args);\n\n        if (result !== undefined) {\n          typeInfo.leave(node);\n\n          if ((0, _ast.isNode)(result)) {\n            typeInfo.enter(result);\n          }\n        }\n\n        return result;\n      }\n    },\n\n    leave(...args) {\n      const node = args[0];\n      const fn = (0, _visitor.getEnterLeaveForKind)(visitor, node.kind).leave;\n      let result;\n\n      if (fn) {\n        result = fn.apply(visitor, args);\n      }\n\n      typeInfo.leave(node);\n      return result;\n    },\n  };\n}\n/jsutils/Path.d.ts\u0002\u001aimport type { Maybe } from './Maybe';\nexport interface Path {\n  readonly prev: Path | undefined;\n  readonly key: string | number;\n  readonly typename: string | undefined;\n}\n/**\n * Given a Path and a key, return a new Path containing the new key.\n */\nexport declare function addPath(\n  prev: Readonly<Path> | undefined,\n  key: string | number,\n  typename: string | undefined,\n): Path;\n/**\n * Given a Path, return an Array of the path keys.\n */\nexport declare function pathToArray(\n  path: Maybe<Readonly<Path>>,\n): Array<string | number>;\n//validation/rules/UniqueOperationNamesRule.d.ts\u0001import type { ASTVisitor } from '../../language/visitor';\nimport type { ASTValidationContext } from '../ValidationContext';\n/**\n * Unique operation names\n *\n * A GraphQL document is only valid if all defined operations have unique names.\n *\n * See https://spec.graphql.org/draft/#sec-Operation-Name-Uniqueness\n */\nexport declare function UniqueOperationNamesRule(\n  context: ASTValidationContext,\n): ASTVisitor;\n\"/utilities/separateOperations.d.ts\u0001import type { ObjMap } from '../jsutils/ObjMap';\nimport type { DocumentNode } from '../language/ast';\n/**\n * separateOperations accepts a single AST document which may contain many\n * operations and fragments and returns a collection of AST documents each of\n * which contains a single operation as well the fragment definitions it\n * refers to.\n */\nexport declare function separateOperations(\n  documentAST: DocumentNode,\n): ObjMap<DocumentNode>;\n/jsutils/isIterableObject.d.ts\u0002/**\n * Returns true if the provided object is an Object (i.e. not a string literal)\n * and implements the Iterator protocol.\n *\n * This may be used in place of [Array.isArray()][isArray] to determine if\n * an object should be iterated-over e.g. Array, Map, Set, Int8Array,\n * TypedArray, etc. but excludes string literals.\n *\n * @example\n * ```ts\n * isIterableObject([ 1, 2, 3 ]) // true\n * isIterableObject(new Map()) // true\n * isIterableObject('ABC') // false\n * isIterableObject({ key: 'value' }) // false\n * isIterableObject({ length: 1, 0: 'Alpha' }) // false\n * ```\n */\nexport declare function isIterableObject(\n  maybeIterable: any,\n): maybeIterable is Iterable<unknown>;\n/language/ast.mjs\u0014*/**\n * Contains a range of UTF-8 character offsets and token references that\n * identify the region of the source from which the AST derived.\n */\nexport class Location {\n  /**\n   * The character offset at which this Node begins.\n   */\n\n  /**\n   * The character offset at which this Node ends.\n   */\n\n  /**\n   * The Token at which this Node begins.\n   */\n\n  /**\n   * The Token at which this Node ends.\n   */\n\n  /**\n   * The Source document the AST represents.\n   */\n  constructor(startToken, endToken, source) {\n    this.start = startToken.start;\n    this.end = endToken.end;\n    this.startToken = startToken;\n    this.endToken = endToken;\n    this.source = source;\n  }\n\n  get [Symbol.toStringTag]() {\n    return 'Location';\n  }\n\n  toJSON() {\n    return {\n      start: this.start,\n      end: this.end,\n    };\n  }\n}\n/**\n * Represents a range of characters represented by a lexical token\n * within a Source.\n */\n\nexport class Token {\n  /**\n   * The kind of Token.\n   */\n\n  /**\n   * The character offset at which this Node begins.\n   */\n\n  /**\n   * The character offset at which this Node ends.\n   */\n\n  /**\n   * The 1-indexed line number on which this Token appears.\n   */\n\n  /**\n   * The 1-indexed column number at which this Token begins.\n   */\n\n  /**\n   * For non-punctuation tokens, represents the interpreted value of the token.\n   *\n   * Note: is undefined for punctuation tokens, but typed as string for\n   * convenience in the parser.\n   */\n\n  /**\n   * Tokens exist as nodes in a double-linked-list amongst all tokens\n   * including ignored tokens. <SOF> is always the first node and <EOF>\n   * the last.\n   */\n  constructor(kind, start, end, line, column, value) {\n    this.kind = kind;\n    this.start = start;\n    this.end = end;\n    this.line = line;\n    this.column = column; // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\n    this.value = value;\n    this.prev = null;\n    this.next = null;\n  }\n\n  get [Symbol.toStringTag]() {\n    return 'Token';\n  }\n\n  toJSON() {\n    return {\n      kind: this.kind,\n      value: this.value,\n      line: this.line,\n      column: this.column,\n    };\n  }\n}\n/**\n * The list of all possible AST node types.\n */\n\n/**\n * @internal\n */\nexport const QueryDocumentKeys = {\n  Name: [],\n  Document: ['definitions'],\n  OperationDefinition: [\n    'name',\n    'variableDefinitions',\n    'directives',\n    'selectionSet',\n  ],\n  VariableDefinition: ['variable', 'type', 'defaultValue', 'directives'],\n  Variable: ['name'],\n  SelectionSet: ['selections'],\n  Field: ['alias', 'name', 'arguments', 'directives', 'selectionSet'],\n  Argument: ['name', 'value'],\n  FragmentSpread: ['name', 'directives'],\n  InlineFragment: ['typeCondition', 'directives', 'selectionSet'],\n  FragmentDefinition: [\n    'name', // Note: fragment variable definitions are deprecated and will removed in v17.0.0\n    'variableDefinitions',\n    'typeCondition',\n    'directives',\n    'selectionSet',\n  ],\n  IntValue: [],\n  FloatValue: [],\n  StringValue: [],\n  BooleanValue: [],\n  NullValue: [],\n  EnumValue: [],\n  ListValue: ['values'],\n  ObjectValue: ['fields'],\n  ObjectField: ['name', 'value'],\n  Directive: ['name', 'arguments'],\n  NamedType: ['name'],\n  ListType: ['type'],\n  NonNullType: ['type'],\n  SchemaDefinition: ['description', 'directives', 'operationTypes'],\n  OperationTypeDefinition: ['type'],\n  ScalarTypeDefinition: ['description', 'name', 'directives'],\n  ObjectTypeDefinition: [\n    'description',\n    'name',\n    'interfaces',\n    'directives',\n    'fields',\n  ],\n  FieldDefinition: ['description', 'name', 'arguments', 'type', 'directives'],\n  InputValueDefinition: [\n    'description',\n    'name',\n    'type',\n    'defaultValue',\n    'directives',\n  ],\n  InterfaceTypeDefinition: [\n    'description',\n    'name',\n    'interfaces',\n    'directives',\n    'fields',\n  ],\n  UnionTypeDefinition: ['description', 'name', 'directives', 'types'],\n  EnumTypeDefinition: ['description', 'name', 'directives', 'values'],\n  EnumValueDefinition: ['description', 'name', 'directives'],\n  InputObjectTypeDefinition: ['description', 'name', 'directives', 'fields'],\n  DirectiveDefinition: ['description', 'name', 'arguments', 'locations'],\n  SchemaExtension: ['directives', 'operationTypes'],\n  ScalarTypeExtension: ['name', 'directives'],\n  ObjectTypeExtension: ['name', 'interfaces', 'directives', 'fields'],\n  InterfaceTypeExtension: ['name', 'interfaces', 'directives', 'fields'],\n  UnionTypeExtension: ['name', 'directives', 'types'],\n  EnumTypeExtension: ['name', 'directives', 'values'],\n  InputObjectTypeExtension: ['name', 'directives', 'fields'],\n};\nconst kindValues = new Set(Object.keys(QueryDocumentKeys));\n/**\n * @internal\n */\n\nexport function isNode(maybeNode) {\n  const maybeKind =\n    maybeNode === null || maybeNode === void 0 ? void 0 : maybeNode.kind;\n  return typeof maybeKind === 'string' && kindValues.has(maybeKind);\n}\n/** Name */\n\nvar OperationTypeNode;\n\n(function (OperationTypeNode) {\n  OperationTypeNode['QUERY'] = 'query';\n  OperationTypeNode['MUTATION'] = 'mutation';\n  OperationTypeNode['SUBSCRIPTION'] = 'subscription';\n})(OperationTypeNode || (OperationTypeNode = {}));\n\nexport { OperationTypeNode };\n+/validation/rules/NoFragmentCyclesRule.d.ts\u0002\u000fimport type { ASTVisitor } from '../../language/visitor';\nimport type { ASTValidationContext } from '../ValidationContext';\n/**\n * No fragment cycles\n *\n * The graph of fragment spreads must not form any cycles including spreading itself.\n * Otherwise an operation could infinitely spread or infinitely execute on cycles in the underlying data.\n *\n * See https://spec.graphql.org/draft/#sec-Fragment-spreads-must-not-form-cycles\n */\nexport declare function NoFragmentCyclesRule(\n  context: ASTValidationContext,\n): ASTVisitor;\n/utilities/buildASTSchema.js\rX'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.buildASTSchema = buildASTSchema;\nexports.buildSchema = buildSchema;\n\nvar _devAssert = require('../jsutils/devAssert.js');\n\nvar _kinds = require('../language/kinds.js');\n\nvar _parser = require('../language/parser.js');\n\nvar _directives = require('../type/directives.js');\n\nvar _schema = require('../type/schema.js');\n\nvar _validate = require('../validation/validate.js');\n\nvar _extendSchema = require('./extendSchema.js');\n\n/**\n * This takes the ast of a schema document produced by the parse function in\n * src/language/parser.js.\n *\n * If no schema definition is provided, then it will look for types named Query,\n * Mutation and Subscription.\n *\n * Given that AST it constructs a GraphQLSchema. The resulting schema\n * has no resolve methods, so execution will use default resolvers.\n */\nfunction buildASTSchema(documentAST, options) {\n  (documentAST != null && documentAST.kind === _kinds.Kind.DOCUMENT) ||\n    (0, _devAssert.devAssert)(false, 'Must provide valid Document AST.');\n\n  if (\n    (options === null || options === void 0 ? void 0 : options.assumeValid) !==\n      true &&\n    (options === null || options === void 0\n      ? void 0\n      : options.assumeValidSDL) !== true\n  ) {\n    (0, _validate.assertValidSDL)(documentAST);\n  }\n\n  const emptySchemaConfig = {\n    description: undefined,\n    types: [],\n    directives: [],\n    extensions: Object.create(null),\n    extensionASTNodes: [],\n    assumeValid: false,\n  };\n  const config = (0, _extendSchema.extendSchemaImpl)(\n    emptySchemaConfig,\n    documentAST,\n    options,\n  );\n\n  if (config.astNode == null) {\n    for (const type of config.types) {\n      switch (type.name) {\n        // Note: While this could make early assertions to get the correctly\n        // typed values below, that would throw immediately while type system\n        // validation with validateSchema() will produce more actionable results.\n        case 'Query':\n          // @ts-expect-error validated in `validateSchema`\n          config.query = type;\n          break;\n\n        case 'Mutation':\n          // @ts-expect-error validated in `validateSchema`\n          config.mutation = type;\n          break;\n\n        case 'Subscription':\n          // @ts-expect-error validated in `validateSchema`\n          config.subscription = type;\n          break;\n      }\n    }\n  }\n\n  const directives = [\n    ...config.directives, // If specified directives were not explicitly declared, add them.\n    ..._directives.specifiedDirectives.filter((stdDirective) =>\n      config.directives.every(\n        (directive) => directive.name !== stdDirective.name,\n      ),\n    ),\n  ];\n  return new _schema.GraphQLSchema({ ...config, directives });\n}\n/**\n * A helper function to build a GraphQLSchema directly from a source\n * document.\n */\n\nfunction buildSchema(source, options) {\n  const document = (0, _parser.parse)(source, {\n    noLocation:\n      options === null || options === void 0 ? void 0 : options.noLocation,\n    allowLegacyFragmentVariables:\n      options === null || options === void 0\n        ? void 0\n        : options.allowLegacyFragmentVariables,\n  });\n  return buildASTSchema(document, {\n    assumeValidSDL:\n      options === null || options === void 0 ? void 0 : options.assumeValidSDL,\n    assumeValid:\n      options === null || options === void 0 ? void 0 : options.assumeValid,\n  });\n}\n/language/location.js\u0003\u0016'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.getLocation = getLocation;\n\nvar _invariant = require('../jsutils/invariant.js');\n\nconst LineRegExp = /\\r\\n|[\\n\\r]/g;\n/**\n * Represents a location in a Source.\n */\n\n/**\n * Takes a Source and a UTF-8 character offset, and returns the corresponding\n * line and column as a SourceLocation.\n */\nfunction getLocation(source, position) {\n  let lastLineStart = 0;\n  let line = 1;\n\n  for (const match of source.body.matchAll(LineRegExp)) {\n    typeof match.index === 'number' || (0, _invariant.invariant)(false);\n\n    if (match.index >= position) {\n      break;\n    }\n\n    lastLineStart = match.index + match[0].length;\n    line += 1;\n  }\n\n  return {\n    line,\n    column: position + 1 - lastLineStart,\n  };\n}\n/language/source.mjs\u0005import { devAssert } from '../jsutils/devAssert.mjs';\nimport { inspect } from '../jsutils/inspect.mjs';\nimport { instanceOf } from '../jsutils/instanceOf.mjs';\n\n/**\n * A representation of source input to GraphQL. The `name` and `locationOffset` parameters are\n * optional, but they are useful for clients who store GraphQL documents in source files.\n * For example, if the GraphQL input starts at line 40 in a file named `Foo.graphql`, it might\n * be useful for `name` to be `\"Foo.graphql\"` and location to be `{ line: 40, column: 1 }`.\n * The `line` and `column` properties in `locationOffset` are 1-indexed.\n */\nexport class Source {\n  constructor(\n    body,\n    name = 'GraphQL request',\n    locationOffset = {\n      line: 1,\n      column: 1,\n    },\n  ) {\n    typeof body === 'string' ||\n      devAssert(false, `Body must be a string. Received: ${inspect(body)}.`);\n    this.body = body;\n    this.name = name;\n    this.locationOffset = locationOffset;\n    this.locationOffset.line > 0 ||\n      devAssert(\n        false,\n        'line in locationOffset is 1-indexed and must be positive.',\n      );\n    this.locationOffset.column > 0 ||\n      devAssert(\n        false,\n        'column in locationOffset is 1-indexed and must be positive.',\n      );\n  }\n\n  get [Symbol.toStringTag]() {\n    return 'Source';\n  }\n}\n/**\n * Test if the given value is a Source object.\n *\n * @internal\n */\n\nexport function isSource(source) {\n  return instanceOf(source, Source);\n}\n/language/ast.d.ts>\u0002import type { Kind } from './kinds';\nimport type { Source } from './source';\nimport type { TokenKind } from './tokenKind';\n/**\n * Contains a range of UTF-8 character offsets and token references that\n * identify the region of the source from which the AST derived.\n */\nexport declare class Location {\n  /**\n   * The character offset at which this Node begins.\n   */\n  readonly start: number;\n  /**\n   * The character offset at which this Node ends.\n   */\n  readonly end: number;\n  /**\n   * The Token at which this Node begins.\n   */\n  readonly startToken: Token;\n  /**\n   * The Token at which this Node ends.\n   */\n  readonly endToken: Token;\n  /**\n   * The Source document the AST represents.\n   */\n  readonly source: Source;\n  constructor(startToken: Token, endToken: Token, source: Source);\n  get [Symbol.toStringTag](): string;\n  toJSON(): {\n    start: number;\n    end: number;\n  };\n}\n/**\n * Represents a range of characters represented by a lexical token\n * within a Source.\n */\nexport declare class Token {\n  /**\n   * The kind of Token.\n   */\n  readonly kind: TokenKind;\n  /**\n   * The character offset at which this Node begins.\n   */\n  readonly start: number;\n  /**\n   * The character offset at which this Node ends.\n   */\n  readonly end: number;\n  /**\n   * The 1-indexed line number on which this Token appears.\n   */\n  readonly line: number;\n  /**\n   * The 1-indexed column number at which this Token begins.\n   */\n  readonly column: number;\n  /**\n   * For non-punctuation tokens, represents the interpreted value of the token.\n   *\n   * Note: is undefined for punctuation tokens, but typed as string for\n   * convenience in the parser.\n   */\n  readonly value: string;\n  /**\n   * Tokens exist as nodes in a double-linked-list amongst all tokens\n   * including ignored tokens. <SOF> is always the first node and <EOF>\n   * the last.\n   */\n  readonly prev: Token | null;\n  readonly next: Token | null;\n  constructor(\n    kind: TokenKind,\n    start: number,\n    end: number,\n    line: number,\n    column: number,\n    value?: string,\n  );\n  get [Symbol.toStringTag](): string;\n  toJSON(): {\n    kind: TokenKind;\n    value?: string;\n    line: number;\n    column: number;\n  };\n}\n/**\n * The list of all possible AST node types.\n */\nexport declare type ASTNode =\n  | NameNode\n  | DocumentNode\n  | OperationDefinitionNode\n  | VariableDefinitionNode\n  | VariableNode\n  | SelectionSetNode\n  | FieldNode\n  | ArgumentNode\n  | FragmentSpreadNode\n  | InlineFragmentNode\n  | FragmentDefinitionNode\n  | IntValueNode\n  | FloatValueNode\n  | StringValueNode\n  | BooleanValueNode\n  | NullValueNode\n  | EnumValueNode\n  | ListValueNode\n  | ObjectValueNode\n  | ObjectFieldNode\n  | DirectiveNode\n  | NamedTypeNode\n  | ListTypeNode\n  | NonNullTypeNode\n  | SchemaDefinitionNode\n  | OperationTypeDefinitionNode\n  | ScalarTypeDefinitionNode\n  | ObjectTypeDefinitionNode\n  | FieldDefinitionNode\n  | InputValueDefinitionNode\n  | InterfaceTypeDefinitionNode\n  | UnionTypeDefinitionNode\n  | EnumTypeDefinitionNode\n  | EnumValueDefinitionNode\n  | InputObjectTypeDefinitionNode\n  | DirectiveDefinitionNode\n  | SchemaExtensionNode\n  | ScalarTypeExtensionNode\n  | ObjectTypeExtensionNode\n  | InterfaceTypeExtensionNode\n  | UnionTypeExtensionNode\n  | EnumTypeExtensionNode\n  | InputObjectTypeExtensionNode;\n/**\n * Utility type listing all nodes indexed by their kind.\n */\nexport declare type ASTKindToNode = {\n  [NodeT in ASTNode as NodeT['kind']]: NodeT;\n};\n/**\n * @internal\n */\nexport declare const QueryDocumentKeys: {\n  [NodeT in ASTNode as NodeT['kind']]: ReadonlyArray<keyof NodeT>;\n};\n/**\n * @internal\n */\nexport declare function isNode(maybeNode: any): maybeNode is ASTNode;\n/** Name */\nexport interface NameNode {\n  readonly kind: Kind.NAME;\n  readonly loc?: Location;\n  readonly value: string;\n}\n/** Document */\nexport interface DocumentNode {\n  readonly kind: Kind.DOCUMENT;\n  readonly loc?: Location;\n  readonly definitions: ReadonlyArray<DefinitionNode>;\n}\nexport declare type DefinitionNode =\n  | ExecutableDefinitionNode\n  | TypeSystemDefinitionNode\n  | TypeSystemExtensionNode;\nexport declare type ExecutableDefinitionNode =\n  | OperationDefinitionNode\n  | FragmentDefinitionNode;\nexport interface OperationDefinitionNode {\n  readonly kind: Kind.OPERATION_DEFINITION;\n  readonly loc?: Location;\n  readonly operation: OperationTypeNode;\n  readonly name?: NameNode;\n  readonly variableDefinitions?: ReadonlyArray<VariableDefinitionNode>;\n  readonly directives?: ReadonlyArray<DirectiveNode>;\n  readonly selectionSet: SelectionSetNode;\n}\ndeclare enum OperationTypeNode {\n  QUERY = 'query',\n  MUTATION = 'mutation',\n  SUBSCRIPTION = 'subscription',\n}\nexport { OperationTypeNode };\nexport interface VariableDefinitionNode {\n  readonly kind: Kind.VARIABLE_DEFINITION;\n  readonly loc?: Location;\n  readonly variable: VariableNode;\n  readonly type: TypeNode;\n  readonly defaultValue?: ConstValueNode;\n  readonly directives?: ReadonlyArray<ConstDirectiveNode>;\n}\nexport interface VariableNode {\n  readonly kind: Kind.VARIABLE;\n  readonly loc?: Location;\n  readonly name: NameNode;\n}\nexport interface SelectionSetNode {\n  kind: Kind.SELECTION_SET;\n  loc?: Location;\n  selections: ReadonlyArray<SelectionNode>;\n}\nexport declare type SelectionNode =\n  | FieldNode\n  | FragmentSpreadNode\n  | InlineFragmentNode;\nexport interface FieldNode {\n  readonly kind: Kind.FIELD;\n  readonly loc?: Location;\n  readonly alias?: NameNode;\n  readonly name: NameNode;\n  readonly arguments?: ReadonlyArray<ArgumentNode>;\n  readonly directives?: ReadonlyArray<DirectiveNode>;\n  readonly selectionSet?: SelectionSetNode;\n}\nexport interface ArgumentNode {\n  readonly kind: Kind.ARGUMENT;\n  readonly loc?: Location;\n  readonly name: NameNode;\n  readonly value: ValueNode;\n}\nexport interface ConstArgumentNode {\n  readonly kind: Kind.ARGUMENT;\n  readonly loc?: Location;\n  readonly name: NameNode;\n  readonly value: ConstValueNode;\n}\n/** Fragments */\nexport interface FragmentSpreadNode {\n  readonly kind: Kind.FRAGMENT_SPREAD;\n  readonly loc?: Location;\n  readonly name: NameNode;\n  readonly directives?: ReadonlyArray<DirectiveNode>;\n}\nexport interface InlineFragmentNode {\n  readonly kind: Kind.INLINE_FRAGMENT;\n  readonly loc?: Location;\n  readonly typeCondition?: NamedTypeNode;\n  readonly directives?: ReadonlyArray<DirectiveNode>;\n  readonly selectionSet: SelectionSetNode;\n}\nexport interface FragmentDefinitionNode {\n  readonly kind: Kind.FRAGMENT_DEFINITION;\n  readonly loc?: Location;\n  readonly name: NameNode;\n  /** @deprecated variableDefinitions will be removed in v17.0.0 */\n  readonly variableDefinitions?: ReadonlyArray<VariableDefinitionNode>;\n  readonly typeCondition: NamedTypeNode;\n  readonly directives?: ReadonlyArray<DirectiveNode>;\n  readonly selectionSet: SelectionSetNode;\n}\n/** Values */\nexport declare type ValueNode =\n  | VariableNode\n  | IntValueNode\n  | FloatValueNode\n  | StringValueNode\n  | BooleanValueNode\n  | NullValueNode\n  | EnumValueNode\n  | ListValueNode\n  | ObjectValueNode;\nexport declare type ConstValueNode =\n  | IntValueNode\n  | FloatValueNode\n  | StringValueNode\n  | BooleanValueNode\n  | NullValueNode\n  | EnumValueNode\n  | ConstListValueNode\n  | ConstObjectValueNode;\nexport interface IntValueNode {\n  readonly kind: Kind.INT;\n  readonly loc?: Location;\n  readonly value: string;\n}\nexport interface FloatValueNode {\n  readonly kind: Kind.FLOAT;\n  readonly loc?: Location;\n  readonly value: string;\n}\nexport interface StringValueNode {\n  readonly kind: Kind.STRING;\n  readonly loc?: Location;\n  readonly value: string;\n  readonly block?: boolean;\n}\nexport interface BooleanValueNode {\n  readonly kind: Kind.BOOLEAN;\n  readonly loc?: Location;\n  readonly value: boolean;\n}\nexport interface NullValueNode {\n  readonly kind: Kind.NULL;\n  readonly loc?: Location;\n}\nexport interface EnumValueNode {\n  readonly kind: Kind.ENUM;\n  readonly loc?: Location;\n  readonly value: string;\n}\nexport interface ListValueNode {\n  readonly kind: Kind.LIST;\n  readonly loc?: Location;\n  readonly values: ReadonlyArray<ValueNode>;\n}\nexport interface ConstListValueNode {\n  readonly kind: Kind.LIST;\n  readonly loc?: Location;\n  readonly values: ReadonlyArray<ConstValueNode>;\n}\nexport interface ObjectValueNode {\n  readonly kind: Kind.OBJECT;\n  readonly loc?: Location;\n  readonly fields: ReadonlyArray<ObjectFieldNode>;\n}\nexport interface ConstObjectValueNode {\n  readonly kind: Kind.OBJECT;\n  readonly loc?: Location;\n  readonly fields: ReadonlyArray<ConstObjectFieldNode>;\n}\nexport interface ObjectFieldNode {\n  readonly kind: Kind.OBJECT_FIELD;\n  readonly loc?: Location;\n  readonly name: NameNode;\n  readonly value: ValueNode;\n}\nexport interface ConstObjectFieldNode {\n  readonly kind: Kind.OBJECT_FIELD;\n  readonly loc?: Location;\n  readonly name: NameNode;\n  readonly value: ConstValueNode;\n}\n/** Directives */\nexport interface DirectiveNode {\n  readonly kind: Kind.DIRECTIVE;\n  readonly loc?: Location;\n  readonly name: NameNode;\n  readonly arguments?: ReadonlyArray<ArgumentNode>;\n}\nexport interface ConstDirectiveNode {\n  readonly kind: Kind.DIRECTIVE;\n  readonly loc?: Location;\n  readonly name: NameNode;\n  readonly arguments?: ReadonlyArray<ConstArgumentNode>;\n}\n/** Type Reference */\nexport declare type TypeNode = NamedTypeNode | ListTypeNode | NonNullTypeNode;\nexport interface NamedTypeNode {\n  readonly kind: Kind.NAMED_TYPE;\n  readonly loc?: Location;\n  readonly name: NameNode;\n}\nexport interface ListTypeNode {\n  readonly kind: Kind.LIST_TYPE;\n  readonly loc?: Location;\n  readonly type: TypeNode;\n}\nexport interface NonNullTypeNode {\n  readonly kind: Kind.NON_NULL_TYPE;\n  readonly loc?: Location;\n  readonly type: NamedTypeNode | ListTypeNode;\n}\n/** Type System Definition */\nexport declare type TypeSystemDefinitionNode =\n  | SchemaDefinitionNode\n  | TypeDefinitionNode\n  | DirectiveDefinitionNode;\nexport interface SchemaDefinitionNode {\n  readonly kind: Kind.SCHEMA_DEFINITION;\n  readonly loc?: Location;\n  readonly description?: StringValueNode;\n  readonly directives?: ReadonlyArray<ConstDirectiveNode>;\n  readonly operationTypes: ReadonlyArray<OperationTypeDefinitionNode>;\n}\nexport interface OperationTypeDefinitionNode {\n  readonly kind: Kind.OPERATION_TYPE_DEFINITION;\n  readonly loc?: Location;\n  readonly operation: OperationTypeNode;\n  readonly type: NamedTypeNode;\n}\n/** Type Definition */\nexport declare type TypeDefinitionNode =\n  | ScalarTypeDefinitionNode\n  | ObjectTypeDefinitionNode\n  | InterfaceTypeDefinitionNode\n  | UnionTypeDefinitionNode\n  | EnumTypeDefinitionNode\n  | InputObjectTypeDefinitionNode;\nexport interface ScalarTypeDefinitionNode {\n  readonly kind: Kind.SCALAR_TYPE_DEFINITION;\n  readonly loc?: Location;\n  readonly description?: StringValueNode;\n  readonly name: NameNode;\n  readonly directives?: ReadonlyArray<ConstDirectiveNode>;\n}\nexport interface ObjectTypeDefinitionNode {\n  readonly kind: Kind.OBJECT_TYPE_DEFINITION;\n  readonly loc?: Location;\n  readonly description?: StringValueNode;\n  readonly name: NameNode;\n  readonly interfaces?: ReadonlyArray<NamedTypeNode>;\n  readonly directives?: ReadonlyArray<ConstDirectiveNode>;\n  readonly fields?: ReadonlyArray<FieldDefinitionNode>;\n}\nexport interface FieldDefinitionNode {\n  readonly kind: Kind.FIELD_DEFINITION;\n  readonly loc?: Location;\n  readonly description?: StringValueNode;\n  readonly name: NameNode;\n  readonly arguments?: ReadonlyArray<InputValueDefinitionNode>;\n  readonly type: TypeNode;\n  readonly directives?: ReadonlyArray<ConstDirectiveNode>;\n}\nexport interface InputValueDefinitionNode {\n  readonly kind: Kind.INPUT_VALUE_DEFINITION;\n  readonly loc?: Location;\n  readonly description?: StringValueNode;\n  readonly name: NameNode;\n  readonly type: TypeNode;\n  readonly defaultValue?: ConstValueNode;\n  readonly directives?: ReadonlyArray<ConstDirectiveNode>;\n}\nexport interface InterfaceTypeDefinitionNode {\n  readonly kind: Kind.INTERFACE_TYPE_DEFINITION;\n  readonly loc?: Location;\n  readonly description?: StringValueNode;\n  readonly name: NameNode;\n  readonly interfaces?: ReadonlyArray<NamedTypeNode>;\n  readonly directives?: ReadonlyArray<ConstDirectiveNode>;\n  readonly fields?: ReadonlyArray<FieldDefinitionNode>;\n}\nexport interface UnionTypeDefinitionNode {\n  readonly kind: Kind.UNION_TYPE_DEFINITION;\n  readonly loc?: Location;\n  readonly description?: StringValueNode;\n  readonly name: NameNode;\n  readonly directives?: ReadonlyArray<ConstDirectiveNode>;\n  readonly types?: ReadonlyArray<NamedTypeNode>;\n}\nexport interface EnumTypeDefinitionNode {\n  readonly kind: Kind.ENUM_TYPE_DEFINITION;\n  readonly loc?: Location;\n  readonly description?: StringValueNode;\n  readonly name: NameNode;\n  readonly directives?: ReadonlyArray<ConstDirectiveNode>;\n  readonly values?: ReadonlyArray<EnumValueDefinitionNode>;\n}\nexport interface EnumValueDefinitionNode {\n  readonly kind: Kind.ENUM_VALUE_DEFINITION;\n  readonly loc?: Location;\n  readonly description?: StringValueNode;\n  readonly name: NameNode;\n  readonly directives?: ReadonlyArray<ConstDirectiveNode>;\n}\nexport interface InputObjectTypeDefinitionNode {\n  readonly kind: Kind.INPUT_OBJECT_TYPE_DEFINITION;\n  readonly loc?: Location;\n  readonly description?: StringValueNode;\n  readonly name: NameNode;\n  readonly directives?: ReadonlyArray<ConstDirectiveNode>;\n  readonly fields?: ReadonlyArray<InputValueDefinitionNode>;\n}\n/** Directive Definitions */\nexport interface DirectiveDefinitionNode {\n  readonly kind: Kind.DIRECTIVE_DEFINITION;\n  readonly loc?: Location;\n  readonly description?: StringValueNode;\n  readonly name: NameNode;\n  readonly arguments?: ReadonlyArray<InputValueDefinitionNode>;\n  readonly repeatable: boolean;\n  readonly locations: ReadonlyArray<NameNode>;\n}\n/** Type System Extensions */\nexport declare type TypeSystemExtensionNode =\n  | SchemaExtensionNode\n  | TypeExtensionNode;\nexport interface SchemaExtensionNode {\n  readonly kind: Kind.SCHEMA_EXTENSION;\n  readonly loc?: Location;\n  readonly directives?: ReadonlyArray<ConstDirectiveNode>;\n  readonly operationTypes?: ReadonlyArray<OperationTypeDefinitionNode>;\n}\n/** Type Extensions */\nexport declare type TypeExtensionNode =\n  | ScalarTypeExtensionNode\n  | ObjectTypeExtensionNode\n  | InterfaceTypeExtensionNode\n  | UnionTypeExtensionNode\n  | EnumTypeExtensionNode\n  | InputObjectTypeExtensionNode;\nexport interface ScalarTypeExtensionNode {\n  readonly kind: Kind.SCALAR_TYPE_EXTENSION;\n  readonly loc?: Location;\n  readonly name: NameNode;\n  readonly directives?: ReadonlyArray<ConstDirectiveNode>;\n}\nexport interface ObjectTypeExtensionNode {\n  readonly kind: Kind.OBJECT_TYPE_EXTENSION;\n  readonly loc?: Location;\n  readonly name: NameNode;\n  readonly interfaces?: ReadonlyArray<NamedTypeNode>;\n  readonly directives?: ReadonlyArray<ConstDirectiveNode>;\n  readonly fields?: ReadonlyArray<FieldDefinitionNode>;\n}\nexport interface InterfaceTypeExtensionNode {\n  readonly kind: Kind.INTERFACE_TYPE_EXTENSION;\n  readonly loc?: Location;\n  readonly name: NameNode;\n  readonly interfaces?: ReadonlyArray<NamedTypeNode>;\n  readonly directives?: ReadonlyArray<ConstDirectiveNode>;\n  readonly fields?: ReadonlyArray<FieldDefinitionNode>;\n}\nexport interface UnionTypeExtensionNode {\n  readonly kind: Kind.UNION_TYPE_EXTENSION;\n  readonly loc?: Location;\n  readonly name: NameNode;\n  readonly directives?: ReadonlyArray<ConstDirectiveNode>;\n  readonly types?: ReadonlyArray<NamedTypeNode>;\n}\nexport interface EnumTypeExtensionNode {\n  readonly kind: Kind.ENUM_TYPE_EXTENSION;\n  readonly loc?: Location;\n  readonly name: NameNode;\n  readonly directives?: ReadonlyArray<ConstDirectiveNode>;\n  readonly values?: ReadonlyArray<EnumValueDefinitionNode>;\n}\nexport interface InputObjectTypeExtensionNode {\n  readonly kind: Kind.INPUT_OBJECT_TYPE_EXTENSION;\n  readonly loc?: Location;\n  readonly name: NameNode;\n  readonly directives?: ReadonlyArray<ConstDirectiveNode>;\n  readonly fields?: ReadonlyArray<InputValueDefinitionNode>;\n}\n/subscription/index.js\u0001'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nObject.defineProperty(exports, 'createSourceEventStream', {\n  enumerable: true,\n  get: function () {\n    return _subscribe.createSourceEventStream;\n  },\n});\nObject.defineProperty(exports, 'subscribe', {\n  enumerable: true,\n  get: function () {\n    return _subscribe.subscribe;\n  },\n});\n\nvar _subscribe = require('../execution/subscribe.js');\n/language/lexer.jsa'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.Lexer = void 0;\nexports.isPunctuatorTokenKind = isPunctuatorTokenKind;\n\nvar _syntaxError = require('../error/syntaxError.js');\n\nvar _ast = require('./ast.js');\n\nvar _blockString = require('./blockString.js');\n\nvar _characterClasses = require('./characterClasses.js');\n\nvar _tokenKind = require('./tokenKind.js');\n\n/**\n * Given a Source object, creates a Lexer for that source.\n * A Lexer is a stateful stream generator in that every time\n * it is advanced, it returns the next token in the Source. Assuming the\n * source lexes, the final Token emitted by the lexer will be of kind\n * EOF, after which the lexer will repeatedly return the same EOF token\n * whenever called.\n */\nclass Lexer {\n  /**\n   * The previously focused non-ignored token.\n   */\n\n  /**\n   * The currently focused non-ignored token.\n   */\n\n  /**\n   * The (1-indexed) line containing the current token.\n   */\n\n  /**\n   * The character offset at which the current line begins.\n   */\n  constructor(source) {\n    const startOfFileToken = new _ast.Token(\n      _tokenKind.TokenKind.SOF,\n      0,\n      0,\n      0,\n      0,\n    );\n    this.source = source;\n    this.lastToken = startOfFileToken;\n    this.token = startOfFileToken;\n    this.line = 1;\n    this.lineStart = 0;\n  }\n\n  get [Symbol.toStringTag]() {\n    return 'Lexer';\n  }\n  /**\n   * Advances the token stream to the next non-ignored token.\n   */\n\n  advance() {\n    this.lastToken = this.token;\n    const token = (this.token = this.lookahead());\n    return token;\n  }\n  /**\n   * Looks ahead and returns the next non-ignored token, but does not change\n   * the state of Lexer.\n   */\n\n  lookahead() {\n    let token = this.token;\n\n    if (token.kind !== _tokenKind.TokenKind.EOF) {\n      do {\n        if (token.next) {\n          token = token.next;\n        } else {\n          // Read the next token and form a link in the token linked-list.\n          const nextToken = readNextToken(this, token.end); // @ts-expect-error next is only mutable during parsing.\n\n          token.next = nextToken; // @ts-expect-error prev is only mutable during parsing.\n\n          nextToken.prev = token;\n          token = nextToken;\n        }\n      } while (token.kind === _tokenKind.TokenKind.COMMENT);\n    }\n\n    return token;\n  }\n}\n/**\n * @internal\n */\n\nexports.Lexer = Lexer;\n\nfunction isPunctuatorTokenKind(kind) {\n  return (\n    kind === _tokenKind.TokenKind.BANG ||\n    kind === _tokenKind.TokenKind.DOLLAR ||\n    kind === _tokenKind.TokenKind.AMP ||\n    kind === _tokenKind.TokenKind.PAREN_L ||\n    kind === _tokenKind.TokenKind.PAREN_R ||\n    kind === _tokenKind.TokenKind.SPREAD ||\n    kind === _tokenKind.TokenKind.COLON ||\n    kind === _tokenKind.TokenKind.EQUALS ||\n    kind === _tokenKind.TokenKind.AT ||\n    kind === _tokenKind.TokenKind.BRACKET_L ||\n    kind === _tokenKind.TokenKind.BRACKET_R ||\n    kind === _tokenKind.TokenKind.BRACE_L ||\n    kind === _tokenKind.TokenKind.PIPE ||\n    kind === _tokenKind.TokenKind.BRACE_R\n  );\n}\n/**\n * A Unicode scalar value is any Unicode code point except surrogate code\n * points. In other words, the inclusive ranges of values 0x0000 to 0xD7FF and\n * 0xE000 to 0x10FFFF.\n *\n * SourceCharacter ::\n *   - \"Any Unicode scalar value\"\n */\n\nfunction isUnicodeScalarValue(code) {\n  return (\n    (code >= 0x0000 && code <= 0xd7ff) || (code >= 0xe000 && code <= 0x10ffff)\n  );\n}\n/**\n * The GraphQL specification defines source text as a sequence of unicode scalar\n * values (which Unicode defines to exclude surrogate code points). However\n * JavaScript defines strings as a sequence of UTF-16 code units which may\n * include surrogates. A surrogate pair is a valid source character as it\n * encodes a supplementary code point (above U+FFFF), but unpaired surrogate\n * code points are not valid source characters.\n */\n\nfunction isSupplementaryCodePoint(body, location) {\n  return (\n    isLeadingSurrogate(body.charCodeAt(location)) &&\n    isTrailingSurrogate(body.charCodeAt(location + 1))\n  );\n}\n\nfunction isLeadingSurrogate(code) {\n  return code >= 0xd800 && code <= 0xdbff;\n}\n\nfunction isTrailingSurrogate(code) {\n  return code >= 0xdc00 && code <= 0xdfff;\n}\n/**\n * Prints the code point (or end of file reference) at a given location in a\n * source for use in error messages.\n *\n * Printable ASCII is printed quoted, while other points are printed in Unicode\n * code point form (ie. U+1234).\n */\n\nfunction printCodePointAt(lexer, location) {\n  const code = lexer.source.body.codePointAt(location);\n\n  if (code === undefined) {\n    return _tokenKind.TokenKind.EOF;\n  } else if (code >= 0x0020 && code <= 0x007e) {\n    // Printable ASCII\n    const char = String.fromCodePoint(code);\n    return char === '\"' ? \"'\\\"'\" : `\"${char}\"`;\n  } // Unicode code point\n\n  return 'U+' + code.toString(16).toUpperCase().padStart(4, '0');\n}\n/**\n * Create a token with line and column location information.\n */\n\nfunction createToken(lexer, kind, start, end, value) {\n  const line = lexer.line;\n  const col = 1 + start - lexer.lineStart;\n  return new _ast.Token(kind, start, end, line, col, value);\n}\n/**\n * Gets the next token from the source starting at the given position.\n *\n * This skips over whitespace until it finds the next lexable token, then lexes\n * punctuators immediately or calls the appropriate helper function for more\n * complicated tokens.\n */\n\nfunction readNextToken(lexer, start) {\n  const body = lexer.source.body;\n  const bodyLength = body.length;\n  let position = start;\n\n  while (position < bodyLength) {\n    const code = body.charCodeAt(position); // SourceCharacter\n\n    switch (code) {\n      // Ignored ::\n      //   - UnicodeBOM\n      //   - WhiteSpace\n      //   - LineTerminator\n      //   - Comment\n      //   - Comma\n      //\n      // UnicodeBOM :: \"Byte Order Mark (U+FEFF)\"\n      //\n      // WhiteSpace ::\n      //   - \"Horizontal Tab (U+0009)\"\n      //   - \"Space (U+0020)\"\n      //\n      // Comma :: ,\n      case 0xfeff: // <BOM>\n\n      case 0x0009: // \\t\n\n      case 0x0020: // <space>\n\n      case 0x002c:\n        // ,\n        ++position;\n        continue;\n      // LineTerminator ::\n      //   - \"New Line (U+000A)\"\n      //   - \"Carriage Return (U+000D)\" [lookahead != \"New Line (U+000A)\"]\n      //   - \"Carriage Return (U+000D)\" \"New Line (U+000A)\"\n\n      case 0x000a:\n        // \\n\n        ++position;\n        ++lexer.line;\n        lexer.lineStart = position;\n        continue;\n\n      case 0x000d:\n        // \\r\n        if (body.charCodeAt(position + 1) === 0x000a) {\n          position += 2;\n        } else {\n          ++position;\n        }\n\n        ++lexer.line;\n        lexer.lineStart = position;\n        continue;\n      // Comment\n\n      case 0x0023:\n        // #\n        return readComment(lexer, position);\n      // Token ::\n      //   - Punctuator\n      //   - Name\n      //   - IntValue\n      //   - FloatValue\n      //   - StringValue\n      //\n      // Punctuator :: one of ! $ & ( ) ... : = @ [ ] { | }\n\n      case 0x0021:\n        // !\n        return createToken(\n          lexer,\n          _tokenKind.TokenKind.BANG,\n          position,\n          position + 1,\n        );\n\n      case 0x0024:\n        // $\n        return createToken(\n          lexer,\n          _tokenKind.TokenKind.DOLLAR,\n          position,\n          position + 1,\n        );\n\n      case 0x0026:\n        // &\n        return createToken(\n          lexer,\n          _tokenKind.TokenKind.AMP,\n          position,\n          position + 1,\n        );\n\n      case 0x0028:\n        // (\n        return createToken(\n          lexer,\n          _tokenKind.TokenKind.PAREN_L,\n          position,\n          position + 1,\n        );\n\n      case 0x0029:\n        // )\n        return createToken(\n          lexer,\n          _tokenKind.TokenKind.PAREN_R,\n          position,\n          position + 1,\n        );\n\n      case 0x002e:\n        // .\n        if (\n          body.charCodeAt(position + 1) === 0x002e &&\n          body.charCodeAt(position + 2) === 0x002e\n        ) {\n          return createToken(\n            lexer,\n            _tokenKind.TokenKind.SPREAD,\n            position,\n            position + 3,\n          );\n        }\n\n        break;\n\n      case 0x003a:\n        // :\n        return createToken(\n          lexer,\n          _tokenKind.TokenKind.COLON,\n          position,\n          position + 1,\n        );\n\n      case 0x003d:\n        // =\n        return createToken(\n          lexer,\n          _tokenKind.TokenKind.EQUALS,\n          position,\n          position + 1,\n        );\n\n      case 0x0040:\n        // @\n        return createToken(\n          lexer,\n          _tokenKind.TokenKind.AT,\n          position,\n          position + 1,\n        );\n\n      case 0x005b:\n        // [\n        return createToken(\n          lexer,\n          _tokenKind.TokenKind.BRACKET_L,\n          position,\n          position + 1,\n        );\n\n      case 0x005d:\n        // ]\n        return createToken(\n          lexer,\n          _tokenKind.TokenKind.BRACKET_R,\n          position,\n          position + 1,\n        );\n\n      case 0x007b:\n        // {\n        return createToken(\n          lexer,\n          _tokenKind.TokenKind.BRACE_L,\n          position,\n          position + 1,\n        );\n\n      case 0x007c:\n        // |\n        return createToken(\n          lexer,\n          _tokenKind.TokenKind.PIPE,\n          position,\n          position + 1,\n        );\n\n      case 0x007d:\n        // }\n        return createToken(\n          lexer,\n          _tokenKind.TokenKind.BRACE_R,\n          position,\n          position + 1,\n        );\n      // StringValue\n\n      case 0x0022:\n        // \"\n        if (\n          body.charCodeAt(position + 1) === 0x0022 &&\n          body.charCodeAt(position + 2) === 0x0022\n        ) {\n          return readBlockString(lexer, position);\n        }\n\n        return readString(lexer, position);\n    } // IntValue | FloatValue (Digit | -)\n\n    if ((0, _characterClasses.isDigit)(code) || code === 0x002d) {\n      return readNumber(lexer, position, code);\n    } // Name\n\n    if ((0, _characterClasses.isNameStart)(code)) {\n      return readName(lexer, position);\n    }\n\n    throw (0, _syntaxError.syntaxError)(\n      lexer.source,\n      position,\n      code === 0x0027\n        ? 'Unexpected single quote character (\\'), did you mean to use a double quote (\")?'\n        : isUnicodeScalarValue(code) || isSupplementaryCodePoint(body, position)\n        ? `Unexpected character: ${printCodePointAt(lexer, position)}.`\n        : `Invalid character: ${printCodePointAt(lexer, position)}.`,\n    );\n  }\n\n  return createToken(lexer, _tokenKind.TokenKind.EOF, bodyLength, bodyLength);\n}\n/**\n * Reads a comment token from the source file.\n *\n * ```\n * Comment :: # CommentChar* [lookahead != CommentChar]\n *\n * CommentChar :: SourceCharacter but not LineTerminator\n * ```\n */\n\nfunction readComment(lexer, start) {\n  const body = lexer.source.body;\n  const bodyLength = body.length;\n  let position = start + 1;\n\n  while (position < bodyLength) {\n    const code = body.charCodeAt(position); // LineTerminator (\\n | \\r)\n\n    if (code === 0x000a || code === 0x000d) {\n      break;\n    } // SourceCharacter\n\n    if (isUnicodeScalarValue(code)) {\n      ++position;\n    } else if (isSupplementaryCodePoint(body, position)) {\n      position += 2;\n    } else {\n      break;\n    }\n  }\n\n  return createToken(\n    lexer,\n    _tokenKind.TokenKind.COMMENT,\n    start,\n    position,\n    body.slice(start + 1, position),\n  );\n}\n/**\n * Reads a number token from the source file, either a FloatValue or an IntValue\n * depending on whether a FractionalPart or ExponentPart is encountered.\n *\n * ```\n * IntValue :: IntegerPart [lookahead != {Digit, `.`, NameStart}]\n *\n * IntegerPart ::\n *   - NegativeSign? 0\n *   - NegativeSign? NonZeroDigit Digit*\n *\n * NegativeSign :: -\n *\n * NonZeroDigit :: Digit but not `0`\n *\n * FloatValue ::\n *   - IntegerPart FractionalPart ExponentPart [lookahead != {Digit, `.`, NameStart}]\n *   - IntegerPart FractionalPart [lookahead != {Digit, `.`, NameStart}]\n *   - IntegerPart ExponentPart [lookahead != {Digit, `.`, NameStart}]\n *\n * FractionalPart :: . Digit+\n *\n * ExponentPart :: ExponentIndicator Sign? Digit+\n *\n * ExponentIndicator :: one of `e` `E`\n *\n * Sign :: one of + -\n * ```\n */\n\nfunction readNumber(lexer, start, firstCode) {\n  const body = lexer.source.body;\n  let position = start;\n  let code = firstCode;\n  let isFloat = false; // NegativeSign (-)\n\n  if (code === 0x002d) {\n    code = body.charCodeAt(++position);\n  } // Zero (0)\n\n  if (code === 0x0030) {\n    code = body.charCodeAt(++position);\n\n    if ((0, _characterClasses.isDigit)(code)) {\n      throw (0, _syntaxError.syntaxError)(\n        lexer.source,\n        position,\n        `Invalid number, unexpected digit after 0: ${printCodePointAt(\n          lexer,\n          position,\n        )}.`,\n      );\n    }\n  } else {\n    position = readDigits(lexer, position, code);\n    code = body.charCodeAt(position);\n  } // Full stop (.)\n\n  if (code === 0x002e) {\n    isFloat = true;\n    code = body.charCodeAt(++position);\n    position = readDigits(lexer, position, code);\n    code = body.charCodeAt(position);\n  } // E e\n\n  if (code === 0x0045 || code === 0x0065) {\n    isFloat = true;\n    code = body.charCodeAt(++position); // + -\n\n    if (code === 0x002b || code === 0x002d) {\n      code = body.charCodeAt(++position);\n    }\n\n    position = readDigits(lexer, position, code);\n    code = body.charCodeAt(position);\n  } // Numbers cannot be followed by . or NameStart\n\n  if (code === 0x002e || (0, _characterClasses.isNameStart)(code)) {\n    throw (0, _syntaxError.syntaxError)(\n      lexer.source,\n      position,\n      `Invalid number, expected digit but got: ${printCodePointAt(\n        lexer,\n        position,\n      )}.`,\n    );\n  }\n\n  return createToken(\n    lexer,\n    isFloat ? _tokenKind.TokenKind.FLOAT : _tokenKind.TokenKind.INT,\n    start,\n    position,\n    body.slice(start, position),\n  );\n}\n/**\n * Returns the new position in the source after reading one or more digits.\n */\n\nfunction readDigits(lexer, start, firstCode) {\n  if (!(0, _characterClasses.isDigit)(firstCode)) {\n    throw (0, _syntaxError.syntaxError)(\n      lexer.source,\n      start,\n      `Invalid number, expected digit but got: ${printCodePointAt(\n        lexer,\n        start,\n      )}.`,\n    );\n  }\n\n  const body = lexer.source.body;\n  let position = start + 1; // +1 to skip first firstCode\n\n  while ((0, _characterClasses.isDigit)(body.charCodeAt(position))) {\n    ++position;\n  }\n\n  return position;\n}\n/**\n * Reads a single-quote string token from the source file.\n *\n * ```\n * StringValue ::\n *   - `\"\"` [lookahead != `\"`]\n *   - `\"` StringCharacter+ `\"`\n *\n * StringCharacter ::\n *   - SourceCharacter but not `\"` or `\\` or LineTerminator\n *   - `\\u` EscapedUnicode\n *   - `\\` EscapedCharacter\n *\n * EscapedUnicode ::\n *   - `{` HexDigit+ `}`\n *   - HexDigit HexDigit HexDigit HexDigit\n *\n * EscapedCharacter :: one of `\"` `\\` `/` `b` `f` `n` `r` `t`\n * ```\n */\n\nfunction readString(lexer, start) {\n  const body = lexer.source.body;\n  const bodyLength = body.length;\n  let position = start + 1;\n  let chunkStart = position;\n  let value = '';\n\n  while (position < bodyLength) {\n    const code = body.charCodeAt(position); // Closing Quote (\")\n\n    if (code === 0x0022) {\n      value += body.slice(chunkStart, position);\n      return createToken(\n        lexer,\n        _tokenKind.TokenKind.STRING,\n        start,\n        position + 1,\n        value,\n      );\n    } // Escape Sequence (\\)\n\n    if (code === 0x005c) {\n      value += body.slice(chunkStart, position);\n      const escape =\n        body.charCodeAt(position + 1) === 0x0075 // u\n          ? body.charCodeAt(position + 2) === 0x007b // {\n            ? readEscapedUnicodeVariableWidth(lexer, position)\n            : readEscapedUnicodeFixedWidth(lexer, position)\n          : readEscapedCharacter(lexer, position);\n      value += escape.value;\n      position += escape.size;\n      chunkStart = position;\n      continue;\n    } // LineTerminator (\\n | \\r)\n\n    if (code === 0x000a || code === 0x000d) {\n      break;\n    } // SourceCharacter\n\n    if (isUnicodeScalarValue(code)) {\n      ++position;\n    } else if (isSupplementaryCodePoint(body, position)) {\n      position += 2;\n    } else {\n      throw (0, _syntaxError.syntaxError)(\n        lexer.source,\n        position,\n        `Invalid character within String: ${printCodePointAt(\n          lexer,\n          position,\n        )}.`,\n      );\n    }\n  }\n\n  throw (0, _syntaxError.syntaxError)(\n    lexer.source,\n    position,\n    'Unterminated string.',\n  );\n} // The string value and lexed size of an escape sequence.\n\nfunction readEscapedUnicodeVariableWidth(lexer, position) {\n  const body = lexer.source.body;\n  let point = 0;\n  let size = 3; // Cannot be larger than 12 chars (\\u{00000000}).\n\n  while (size < 12) {\n    const code = body.charCodeAt(position + size++); // Closing Brace (})\n\n    if (code === 0x007d) {\n      // Must be at least 5 chars (\\u{0}) and encode a Unicode scalar value.\n      if (size < 5 || !isUnicodeScalarValue(point)) {\n        break;\n      }\n\n      return {\n        value: String.fromCodePoint(point),\n        size,\n      };\n    } // Append this hex digit to the code point.\n\n    point = (point << 4) | readHexDigit(code);\n\n    if (point < 0) {\n      break;\n    }\n  }\n\n  throw (0, _syntaxError.syntaxError)(\n    lexer.source,\n    position,\n    `Invalid Unicode escape sequence: \"${body.slice(\n      position,\n      position + size,\n    )}\".`,\n  );\n}\n\nfunction readEscapedUnicodeFixedWidth(lexer, position) {\n  const body = lexer.source.body;\n  const code = read16BitHexCode(body, position + 2);\n\n  if (isUnicodeScalarValue(code)) {\n    return {\n      value: String.fromCodePoint(code),\n      size: 6,\n    };\n  } // GraphQL allows JSON-style surrogate pair escape sequences, but only when\n  // a valid pair is formed.\n\n  if (isLeadingSurrogate(code)) {\n    // \\u\n    if (\n      body.charCodeAt(position + 6) === 0x005c &&\n      body.charCodeAt(position + 7) === 0x0075\n    ) {\n      const trailingCode = read16BitHexCode(body, position + 8);\n\n      if (isTrailingSurrogate(trailingCode)) {\n        // JavaScript defines strings as a sequence of UTF-16 code units and\n        // encodes Unicode code points above U+FFFF using a surrogate pair of\n        // code units. Since this is a surrogate pair escape sequence, just\n        // include both codes into the JavaScript string value. Had JavaScript\n        // not been internally based on UTF-16, then this surrogate pair would\n        // be decoded to retrieve the supplementary code point.\n        return {\n          value: String.fromCodePoint(code, trailingCode),\n          size: 12,\n        };\n      }\n    }\n  }\n\n  throw (0, _syntaxError.syntaxError)(\n    lexer.source,\n    position,\n    `Invalid Unicode escape sequence: \"${body.slice(position, position + 6)}\".`,\n  );\n}\n/**\n * Reads four hexadecimal characters and returns the positive integer that 16bit\n * hexadecimal string represents. For example, \"000f\" will return 15, and \"dead\"\n * will return 57005.\n *\n * Returns a negative number if any char was not a valid hexadecimal digit.\n */\n\nfunction read16BitHexCode(body, position) {\n  // readHexDigit() returns -1 on error. ORing a negative value with any other\n  // value always produces a negative value.\n  return (\n    (readHexDigit(body.charCodeAt(position)) << 12) |\n    (readHexDigit(body.charCodeAt(position + 1)) << 8) |\n    (readHexDigit(body.charCodeAt(position + 2)) << 4) |\n    readHexDigit(body.charCodeAt(position + 3))\n  );\n}\n/**\n * Reads a hexadecimal character and returns its positive integer value (0-15).\n *\n * '0' becomes 0, '9' becomes 9\n * 'A' becomes 10, 'F' becomes 15\n * 'a' becomes 10, 'f' becomes 15\n *\n * Returns -1 if the provided character code was not a valid hexadecimal digit.\n *\n * HexDigit :: one of\n *   - `0` `1` `2` `3` `4` `5` `6` `7` `8` `9`\n *   - `A` `B` `C` `D` `E` `F`\n *   - `a` `b` `c` `d` `e` `f`\n */\n\nfunction readHexDigit(code) {\n  return code >= 0x0030 && code <= 0x0039 // 0-9\n    ? code - 0x0030\n    : code >= 0x0041 && code <= 0x0046 // A-F\n    ? code - 0x0037\n    : code >= 0x0061 && code <= 0x0066 // a-f\n    ? code - 0x0057\n    : -1;\n}\n/**\n * | Escaped Character | Code Point | Character Name               |\n * | ----------------- | ---------- | ---------------------------- |\n * | `\"`               | U+0022     | double quote                 |\n * | `\\`               | U+005C     | reverse solidus (back slash) |\n * | `/`               | U+002F     | solidus (forward slash)      |\n * | `b`               | U+0008     | backspace                    |\n * | `f`               | U+000C     | form feed                    |\n * | `n`               | U+000A     | line feed (new line)         |\n * | `r`               | U+000D     | carriage return              |\n * | `t`               | U+0009     | horizontal tab               |\n */\n\nfunction readEscapedCharacter(lexer, position) {\n  const body = lexer.source.body;\n  const code = body.charCodeAt(position + 1);\n\n  switch (code) {\n    case 0x0022:\n      // \"\n      return {\n        value: '\\u0022',\n        size: 2,\n      };\n\n    case 0x005c:\n      // \\\n      return {\n        value: '\\u005c',\n        size: 2,\n      };\n\n    case 0x002f:\n      // /\n      return {\n        value: '\\u002f',\n        size: 2,\n      };\n\n    case 0x0062:\n      // b\n      return {\n        value: '\\u0008',\n        size: 2,\n      };\n\n    case 0x0066:\n      // f\n      return {\n        value: '\\u000c',\n        size: 2,\n      };\n\n    case 0x006e:\n      // n\n      return {\n        value: '\\u000a',\n        size: 2,\n      };\n\n    case 0x0072:\n      // r\n      return {\n        value: '\\u000d',\n        size: 2,\n      };\n\n    case 0x0074:\n      // t\n      return {\n        value: '\\u0009',\n        size: 2,\n      };\n  }\n\n  throw (0, _syntaxError.syntaxError)(\n    lexer.source,\n    position,\n    `Invalid character escape sequence: \"${body.slice(\n      position,\n      position + 2,\n    )}\".`,\n  );\n}\n/**\n * Reads a block string token from the source file.\n *\n * ```\n * StringValue ::\n *   - `\"\"\"` BlockStringCharacter* `\"\"\"`\n *\n * BlockStringCharacter ::\n *   - SourceCharacter but not `\"\"\"` or `\\\"\"\"`\n *   - `\\\"\"\"`\n * ```\n */\n\nfunction readBlockString(lexer, start) {\n  const body = lexer.source.body;\n  const bodyLength = body.length;\n  let lineStart = lexer.lineStart;\n  let position = start + 3;\n  let chunkStart = position;\n  let currentLine = '';\n  const blockLines = [];\n\n  while (position < bodyLength) {\n    const code = body.charCodeAt(position); // Closing Triple-Quote (\"\"\")\n\n    if (\n      code === 0x0022 &&\n      body.charCodeAt(position + 1) === 0x0022 &&\n      body.charCodeAt(position + 2) === 0x0022\n    ) {\n      currentLine += body.slice(chunkStart, position);\n      blockLines.push(currentLine);\n      const token = createToken(\n        lexer,\n        _tokenKind.TokenKind.BLOCK_STRING,\n        start,\n        position + 3, // Return a string of the lines joined with U+000A.\n        (0, _blockString.dedentBlockStringLines)(blockLines).join('\\n'),\n      );\n      lexer.line += blockLines.length - 1;\n      lexer.lineStart = lineStart;\n      return token;\n    } // Escaped Triple-Quote (\\\"\"\")\n\n    if (\n      code === 0x005c &&\n      body.charCodeAt(position + 1) === 0x0022 &&\n      body.charCodeAt(position + 2) === 0x0022 &&\n      body.charCodeAt(position + 3) === 0x0022\n    ) {\n      currentLine += body.slice(chunkStart, position);\n      chunkStart = position + 1; // skip only slash\n\n      position += 4;\n      continue;\n    } // LineTerminator\n\n    if (code === 0x000a || code === 0x000d) {\n      currentLine += body.slice(chunkStart, position);\n      blockLines.push(currentLine);\n\n      if (code === 0x000d && body.charCodeAt(position + 1) === 0x000a) {\n        position += 2;\n      } else {\n        ++position;\n      }\n\n      currentLine = '';\n      chunkStart = position;\n      lineStart = position;\n      continue;\n    } // SourceCharacter\n\n    if (isUnicodeScalarValue(code)) {\n      ++position;\n    } else if (isSupplementaryCodePoint(body, position)) {\n      position += 2;\n    } else {\n      throw (0, _syntaxError.syntaxError)(\n        lexer.source,\n        position,\n        `Invalid character within String: ${printCodePointAt(\n          lexer,\n          position,\n        )}.`,\n      );\n    }\n  }\n\n  throw (0, _syntaxError.syntaxError)(\n    lexer.source,\n    position,\n    'Unterminated string.',\n  );\n}\n/**\n * Reads an alphanumeric + underscore name from the source.\n *\n * ```\n * Name ::\n *   - NameStart NameContinue* [lookahead != NameContinue]\n * ```\n */\n\nfunction readName(lexer, start) {\n  const body = lexer.source.body;\n  const bodyLength = body.length;\n  let position = start + 1;\n\n  while (position < bodyLength) {\n    const code = body.charCodeAt(position);\n\n    if ((0, _characterClasses.isNameContinue)(code)) {\n      ++position;\n    } else {\n      break;\n    }\n  }\n\n  return createToken(\n    lexer,\n    _tokenKind.TokenKind.NAME,\n    start,\n    position,\n    body.slice(start, position),\n  );\n}\n/jsutils/suggestionList.js\u000e'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.suggestionList = suggestionList;\n\nvar _naturalCompare = require('./naturalCompare.js');\n\n/**\n * Given an invalid input string and a list of valid options, returns a filtered\n * list of valid options sorted based on their similarity with the input.\n */\nfunction suggestionList(input, options) {\n  const optionsByDistance = Object.create(null);\n  const lexicalDistance = new LexicalDistance(input);\n  const threshold = Math.floor(input.length * 0.4) + 1;\n\n  for (const option of options) {\n    const distance = lexicalDistance.measure(option, threshold);\n\n    if (distance !== undefined) {\n      optionsByDistance[option] = distance;\n    }\n  }\n\n  return Object.keys(optionsByDistance).sort((a, b) => {\n    const distanceDiff = optionsByDistance[a] - optionsByDistance[b];\n    return distanceDiff !== 0\n      ? distanceDiff\n      : (0, _naturalCompare.naturalCompare)(a, b);\n  });\n}\n/**\n * Computes the lexical distance between strings A and B.\n *\n * The \"distance\" between two strings is given by counting the minimum number\n * of edits needed to transform string A into string B. An edit can be an\n * insertion, deletion, or substitution of a single character, or a swap of two\n * adjacent characters.\n *\n * Includes a custom alteration from Damerau-Levenshtein to treat case changes\n * as a single edit which helps identify mis-cased values with an edit distance\n * of 1.\n *\n * This distance can be useful for detecting typos in input or sorting\n */\n\nclass LexicalDistance {\n  constructor(input) {\n    this._input = input;\n    this._inputLowerCase = input.toLowerCase();\n    this._inputArray = stringToArray(this._inputLowerCase);\n    this._rows = [\n      new Array(input.length + 1).fill(0),\n      new Array(input.length + 1).fill(0),\n      new Array(input.length + 1).fill(0),\n    ];\n  }\n\n  measure(option, threshold) {\n    if (this._input === option) {\n      return 0;\n    }\n\n    const optionLowerCase = option.toLowerCase(); // Any case change counts as a single edit\n\n    if (this._inputLowerCase === optionLowerCase) {\n      return 1;\n    }\n\n    let a = stringToArray(optionLowerCase);\n    let b = this._inputArray;\n\n    if (a.length < b.length) {\n      const tmp = a;\n      a = b;\n      b = tmp;\n    }\n\n    const aLength = a.length;\n    const bLength = b.length;\n\n    if (aLength - bLength > threshold) {\n      return undefined;\n    }\n\n    const rows = this._rows;\n\n    for (let j = 0; j <= bLength; j++) {\n      rows[0][j] = j;\n    }\n\n    for (let i = 1; i <= aLength; i++) {\n      const upRow = rows[(i - 1) % 3];\n      const currentRow = rows[i % 3];\n      let smallestCell = (currentRow[0] = i);\n\n      for (let j = 1; j <= bLength; j++) {\n        const cost = a[i - 1] === b[j - 1] ? 0 : 1;\n        let currentCell = Math.min(\n          upRow[j] + 1, // delete\n          currentRow[j - 1] + 1, // insert\n          upRow[j - 1] + cost, // substitute\n        );\n\n        if (i > 1 && j > 1 && a[i - 1] === b[j - 2] && a[i - 2] === b[j - 1]) {\n          // transposition\n          const doubleDiagonalCell = rows[(i - 2) % 3][j - 2];\n          currentCell = Math.min(currentCell, doubleDiagonalCell + 1);\n        }\n\n        if (currentCell < smallestCell) {\n          smallestCell = currentCell;\n        }\n\n        currentRow[j] = currentCell;\n      } // Early exit, since distance can't go smaller than smallest element of the previous row.\n\n      if (smallestCell > threshold) {\n        return undefined;\n      }\n    }\n\n    const distance = rows[aLength % 3][bLength];\n    return distance <= threshold ? distance : undefined;\n  }\n}\n\nfunction stringToArray(str) {\n  const strLength = str.length;\n  const array = new Array(strLength);\n\n  for (let i = 0; i < strLength; ++i) {\n    array[i] = str.charCodeAt(i);\n  }\n\n  return array;\n}\n/execution/subscribe.d.ts\r9import type { Maybe } from '../jsutils/Maybe';\nimport type { DocumentNode } from '../language/ast';\nimport type { GraphQLFieldResolver } from '../type/definition';\nimport type { GraphQLSchema } from '../type/schema';\nimport type { ExecutionArgs, ExecutionResult } from './execute';\n/**\n * Implements the \"Subscribe\" algorithm described in the GraphQL specification.\n *\n * Returns a Promise which resolves to either an AsyncIterator (if successful)\n * or an ExecutionResult (error). The promise will be rejected if the schema or\n * other arguments to this function are invalid, or if the resolved event stream\n * is not an async iterable.\n *\n * If the client-provided arguments to this function do not result in a\n * compliant subscription, a GraphQL Response (ExecutionResult) with\n * descriptive errors and no data will be returned.\n *\n * If the source stream could not be created due to faulty subscription\n * resolver logic or underlying systems, the promise will resolve to a single\n * ExecutionResult containing `errors` and no `data`.\n *\n * If the operation succeeded, the promise resolves to an AsyncIterator, which\n * yields a stream of ExecutionResults representing the response stream.\n *\n * Accepts either an object with named arguments, or individual arguments.\n */\nexport declare function subscribe(\n  args: ExecutionArgs,\n): Promise<AsyncGenerator<ExecutionResult, void, void> | ExecutionResult>;\n/**\n * Implements the \"CreateSourceEventStream\" algorithm described in the\n * GraphQL specification, resolving the subscription source event stream.\n *\n * Returns a Promise which resolves to either an AsyncIterable (if successful)\n * or an ExecutionResult (error). The promise will be rejected if the schema or\n * other arguments to this function are invalid, or if the resolved event stream\n * is not an async iterable.\n *\n * If the client-provided arguments to this function do not result in a\n * compliant subscription, a GraphQL Response (ExecutionResult) with\n * descriptive errors and no data will be returned.\n *\n * If the the source stream could not be created due to faulty subscription\n * resolver logic or underlying systems, the promise will resolve to a single\n * ExecutionResult containing `errors` and no `data`.\n *\n * If the operation succeeded, the promise resolves to the AsyncIterable for the\n * event stream returned by the resolver.\n *\n * A Source Event Stream represents a sequence of events, each of which triggers\n * a GraphQL execution for that event.\n *\n * This may be useful when hosting the stateful subscription service in a\n * different process or machine than the stateless GraphQL execution engine,\n * or otherwise separating these two steps. For more on this, see the\n * \"Supporting Subscriptions at Scale\" information in the GraphQL specification.\n */\nexport declare function createSourceEventStream(\n  args: ExecutionArgs,\n): Promise<AsyncIterable<unknown> | ExecutionResult>;\n/** @deprecated will be removed in next major version in favor of named arguments */\nexport declare function createSourceEventStream(\n  schema: GraphQLSchema,\n  document: DocumentNode,\n  rootValue?: unknown,\n  contextValue?: unknown,\n  variableValues?: Maybe<{\n    readonly [variable: string]: unknown;\n  }>,\n  operationName?: Maybe<string>,\n  subscribeFieldResolver?: Maybe<GraphQLFieldResolver<any, any>>,\n): Promise<AsyncIterable<unknown> | ExecutionResult>;\n/error/locatedError.d.ts\u0002#import type { Maybe } from '../jsutils/Maybe';\nimport type { ASTNode } from '../language/ast';\nimport { GraphQLError } from './GraphQLError';\n/**\n * Given an arbitrary value, presumably thrown while attempting to execute a\n * GraphQL operation, produce a new GraphQLError aware of the location in the\n * document responsible for the original Error.\n */\nexport declare function locatedError(\n  rawOriginalError: unknown,\n  nodes: ASTNode | ReadonlyArray<ASTNode> | undefined | null,\n  path?: Maybe<ReadonlyArray<string | number>>,\n): GraphQLError;\n/jsutils/devAssert.js\u0001\t'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.devAssert = devAssert;\n\nfunction devAssert(condition, message) {\n  const booleanCondition = Boolean(condition);\n\n  if (!booleanCondition) {\n    throw new Error(message);\n  }\n}\n//validation/rules/UniqueEnumValueNamesRule.d.ts\u0001Oimport type { ASTVisitor } from '../../language/visitor';\nimport type { SDLValidationContext } from '../ValidationContext';\n/**\n * Unique enum value names\n *\n * A GraphQL enum type is only valid if all its values are uniquely named.\n */\nexport declare function UniqueEnumValueNamesRule(\n  context: SDLValidationContext,\n): ASTVisitor;\n2/validation/rules/PossibleFragmentSpreadsRule.d.ts\u0001import type { ASTVisitor } from '../../language/visitor';\nimport type { ValidationContext } from '../ValidationContext';\n/**\n * Possible fragment spread\n *\n * A fragment spread is only valid if the type condition could ever possibly\n * be true: if there is a non-empty intersection of the possible parent types,\n * and possible types which pass the type condition.\n */\nexport declare function PossibleFragmentSpreadsRule(\n  context: ValidationContext,\n): ASTVisitor;\n+/validation/rules/NoUnusedVariablesRule.mjs\u0005^import { GraphQLError } from '../../error/GraphQLError.mjs';\n\n/**\n * No unused variables\n *\n * A GraphQL operation is only valid if all variables defined by an operation\n * are used, either directly or within a spread fragment.\n *\n * See https://spec.graphql.org/draft/#sec-All-Variables-Used\n */\nexport function NoUnusedVariablesRule(context) {\n  let variableDefs = [];\n  return {\n    OperationDefinition: {\n      enter() {\n        variableDefs = [];\n      },\n\n      leave(operation) {\n        const variableNameUsed = Object.create(null);\n        const usages = context.getRecursiveVariableUsages(operation);\n\n        for (const { node } of usages) {\n          variableNameUsed[node.name.value] = true;\n        }\n\n        for (const variableDef of variableDefs) {\n          const variableName = variableDef.variable.name.value;\n\n          if (variableNameUsed[variableName] !== true) {\n            context.reportError(\n              new GraphQLError(\n                operation.name\n                  ? `Variable \"$${variableName}\" is never used in operation \"${operation.name.value}\".`\n                  : `Variable \"$${variableName}\" is never used.`,\n                {\n                  nodes: variableDef,\n                },\n              ),\n            );\n          }\n        }\n      },\n    },\n\n    VariableDefinition(def) {\n      variableDefs.push(def);\n    },\n  };\n}\n$/utilities/stripIgnoredCharacters.js\u000b'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.stripIgnoredCharacters = stripIgnoredCharacters;\n\nvar _blockString = require('../language/blockString.js');\n\nvar _lexer = require('../language/lexer.js');\n\nvar _source = require('../language/source.js');\n\nvar _tokenKind = require('../language/tokenKind.js');\n\n/**\n * Strips characters that are not significant to the validity or execution\n * of a GraphQL document:\n *   - UnicodeBOM\n *   - WhiteSpace\n *   - LineTerminator\n *   - Comment\n *   - Comma\n *   - BlockString indentation\n *\n * Note: It is required to have a delimiter character between neighboring\n * non-punctuator tokens and this function always uses single space as delimiter.\n *\n * It is guaranteed that both input and output documents if parsed would result\n * in the exact same AST except for nodes location.\n *\n * Warning: It is guaranteed that this function will always produce stable results.\n * However, it's not guaranteed that it will stay the same between different\n * releases due to bugfixes or changes in the GraphQL specification.\n *\n * Query example:\n *\n * ```graphql\n * query SomeQuery($foo: String!, $bar: String) {\n *   someField(foo: $foo, bar: $bar) {\n *     a\n *     b {\n *       c\n *       d\n *     }\n *   }\n * }\n * ```\n *\n * Becomes:\n *\n * ```graphql\n * query SomeQuery($foo:String!$bar:String){someField(foo:$foo bar:$bar){a b{c d}}}\n * ```\n *\n * SDL example:\n *\n * ```graphql\n * \"\"\"\n * Type description\n * \"\"\"\n * type Foo {\n *   \"\"\"\n *   Field description\n *   \"\"\"\n *   bar: String\n * }\n * ```\n *\n * Becomes:\n *\n * ```graphql\n * \"\"\"Type description\"\"\" type Foo{\"\"\"Field description\"\"\" bar:String}\n * ```\n */\nfunction stripIgnoredCharacters(source) {\n  const sourceObj = (0, _source.isSource)(source)\n    ? source\n    : new _source.Source(source);\n  const body = sourceObj.body;\n  const lexer = new _lexer.Lexer(sourceObj);\n  let strippedBody = '';\n  let wasLastAddedTokenNonPunctuator = false;\n\n  while (lexer.advance().kind !== _tokenKind.TokenKind.EOF) {\n    const currentToken = lexer.token;\n    const tokenKind = currentToken.kind;\n    /**\n     * Every two non-punctuator tokens should have space between them.\n     * Also prevent case of non-punctuator token following by spread resulting\n     * in invalid token (e.g. `1...` is invalid Float token).\n     */\n\n    const isNonPunctuator = !(0, _lexer.isPunctuatorTokenKind)(\n      currentToken.kind,\n    );\n\n    if (wasLastAddedTokenNonPunctuator) {\n      if (\n        isNonPunctuator ||\n        currentToken.kind === _tokenKind.TokenKind.SPREAD\n      ) {\n        strippedBody += ' ';\n      }\n    }\n\n    const tokenBody = body.slice(currentToken.start, currentToken.end);\n\n    if (tokenKind === _tokenKind.TokenKind.BLOCK_STRING) {\n      strippedBody += (0, _blockString.printBlockString)(currentToken.value, {\n        minimize: true,\n      });\n    } else {\n      strippedBody += tokenBody;\n    }\n\n    wasLastAddedTokenNonPunctuator = isNonPunctuator;\n  }\n\n  return strippedBody;\n}\n/validation/index.js&'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nObject.defineProperty(exports, 'ExecutableDefinitionsRule', {\n  enumerable: true,\n  get: function () {\n    return _ExecutableDefinitionsRule.ExecutableDefinitionsRule;\n  },\n});\nObject.defineProperty(exports, 'FieldsOnCorrectTypeRule', {\n  enumerable: true,\n  get: function () {\n    return _FieldsOnCorrectTypeRule.FieldsOnCorrectTypeRule;\n  },\n});\nObject.defineProperty(exports, 'FragmentsOnCompositeTypesRule', {\n  enumerable: true,\n  get: function () {\n    return _FragmentsOnCompositeTypesRule.FragmentsOnCompositeTypesRule;\n  },\n});\nObject.defineProperty(exports, 'KnownArgumentNamesRule', {\n  enumerable: true,\n  get: function () {\n    return _KnownArgumentNamesRule.KnownArgumentNamesRule;\n  },\n});\nObject.defineProperty(exports, 'KnownDirectivesRule', {\n  enumerable: true,\n  get: function () {\n    return _KnownDirectivesRule.KnownDirectivesRule;\n  },\n});\nObject.defineProperty(exports, 'KnownFragmentNamesRule', {\n  enumerable: true,\n  get: function () {\n    return _KnownFragmentNamesRule.KnownFragmentNamesRule;\n  },\n});\nObject.defineProperty(exports, 'KnownTypeNamesRule', {\n  enumerable: true,\n  get: function () {\n    return _KnownTypeNamesRule.KnownTypeNamesRule;\n  },\n});\nObject.defineProperty(exports, 'LoneAnonymousOperationRule', {\n  enumerable: true,\n  get: function () {\n    return _LoneAnonymousOperationRule.LoneAnonymousOperationRule;\n  },\n});\nObject.defineProperty(exports, 'LoneSchemaDefinitionRule', {\n  enumerable: true,\n  get: function () {\n    return _LoneSchemaDefinitionRule.LoneSchemaDefinitionRule;\n  },\n});\nObject.defineProperty(exports, 'NoDeprecatedCustomRule', {\n  enumerable: true,\n  get: function () {\n    return _NoDeprecatedCustomRule.NoDeprecatedCustomRule;\n  },\n});\nObject.defineProperty(exports, 'NoFragmentCyclesRule', {\n  enumerable: true,\n  get: function () {\n    return _NoFragmentCyclesRule.NoFragmentCyclesRule;\n  },\n});\nObject.defineProperty(exports, 'NoSchemaIntrospectionCustomRule', {\n  enumerable: true,\n  get: function () {\n    return _NoSchemaIntrospectionCustomRule.NoSchemaIntrospectionCustomRule;\n  },\n});\nObject.defineProperty(exports, 'NoUndefinedVariablesRule', {\n  enumerable: true,\n  get: function () {\n    return _NoUndefinedVariablesRule.NoUndefinedVariablesRule;\n  },\n});\nObject.defineProperty(exports, 'NoUnusedFragmentsRule', {\n  enumerable: true,\n  get: function () {\n    return _NoUnusedFragmentsRule.NoUnusedFragmentsRule;\n  },\n});\nObject.defineProperty(exports, 'NoUnusedVariablesRule', {\n  enumerable: true,\n  get: function () {\n    return _NoUnusedVariablesRule.NoUnusedVariablesRule;\n  },\n});\nObject.defineProperty(exports, 'OverlappingFieldsCanBeMergedRule', {\n  enumerable: true,\n  get: function () {\n    return _OverlappingFieldsCanBeMergedRule.OverlappingFieldsCanBeMergedRule;\n  },\n});\nObject.defineProperty(exports, 'PossibleFragmentSpreadsRule', {\n  enumerable: true,\n  get: function () {\n    return _PossibleFragmentSpreadsRule.PossibleFragmentSpreadsRule;\n  },\n});\nObject.defineProperty(exports, 'PossibleTypeExtensionsRule', {\n  enumerable: true,\n  get: function () {\n    return _PossibleTypeExtensionsRule.PossibleTypeExtensionsRule;\n  },\n});\nObject.defineProperty(exports, 'ProvidedRequiredArgumentsRule', {\n  enumerable: true,\n  get: function () {\n    return _ProvidedRequiredArgumentsRule.ProvidedRequiredArgumentsRule;\n  },\n});\nObject.defineProperty(exports, 'ScalarLeafsRule', {\n  enumerable: true,\n  get: function () {\n    return _ScalarLeafsRule.ScalarLeafsRule;\n  },\n});\nObject.defineProperty(exports, 'SingleFieldSubscriptionsRule', {\n  enumerable: true,\n  get: function () {\n    return _SingleFieldSubscriptionsRule.SingleFieldSubscriptionsRule;\n  },\n});\nObject.defineProperty(exports, 'UniqueArgumentDefinitionNamesRule', {\n  enumerable: true,\n  get: function () {\n    return _UniqueArgumentDefinitionNamesRule.UniqueArgumentDefinitionNamesRule;\n  },\n});\nObject.defineProperty(exports, 'UniqueArgumentNamesRule', {\n  enumerable: true,\n  get: function () {\n    return _UniqueArgumentNamesRule.UniqueArgumentNamesRule;\n  },\n});\nObject.defineProperty(exports, 'UniqueDirectiveNamesRule', {\n  enumerable: true,\n  get: function () {\n    return _UniqueDirectiveNamesRule.UniqueDirectiveNamesRule;\n  },\n});\nObject.defineProperty(exports, 'UniqueDirectivesPerLocationRule', {\n  enumerable: true,\n  get: function () {\n    return _UniqueDirectivesPerLocationRule.UniqueDirectivesPerLocationRule;\n  },\n});\nObject.defineProperty(exports, 'UniqueEnumValueNamesRule', {\n  enumerable: true,\n  get: function () {\n    return _UniqueEnumValueNamesRule.UniqueEnumValueNamesRule;\n  },\n});\nObject.defineProperty(exports, 'UniqueFieldDefinitionNamesRule', {\n  enumerable: true,\n  get: function () {\n    return _UniqueFieldDefinitionNamesRule.UniqueFieldDefinitionNamesRule;\n  },\n});\nObject.defineProperty(exports, 'UniqueFragmentNamesRule', {\n  enumerable: true,\n  get: function () {\n    return _UniqueFragmentNamesRule.UniqueFragmentNamesRule;\n  },\n});\nObject.defineProperty(exports, 'UniqueInputFieldNamesRule', {\n  enumerable: true,\n  get: function () {\n    return _UniqueInputFieldNamesRule.UniqueInputFieldNamesRule;\n  },\n});\nObject.defineProperty(exports, 'UniqueOperationNamesRule', {\n  enumerable: true,\n  get: function () {\n    return _UniqueOperationNamesRule.UniqueOperationNamesRule;\n  },\n});\nObject.defineProperty(exports, 'UniqueOperationTypesRule', {\n  enumerable: true,\n  get: function () {\n    return _UniqueOperationTypesRule.UniqueOperationTypesRule;\n  },\n});\nObject.defineProperty(exports, 'UniqueTypeNamesRule', {\n  enumerable: true,\n  get: function () {\n    return _UniqueTypeNamesRule.UniqueTypeNamesRule;\n  },\n});\nObject.defineProperty(exports, 'UniqueVariableNamesRule', {\n  enumerable: true,\n  get: function () {\n    return _UniqueVariableNamesRule.UniqueVariableNamesRule;\n  },\n});\nObject.defineProperty(exports, 'ValidationContext', {\n  enumerable: true,\n  get: function () {\n    return _ValidationContext.ValidationContext;\n  },\n});\nObject.defineProperty(exports, 'ValuesOfCorrectTypeRule', {\n  enumerable: true,\n  get: function () {\n    return _ValuesOfCorrectTypeRule.ValuesOfCorrectTypeRule;\n  },\n});\nObject.defineProperty(exports, 'VariablesAreInputTypesRule', {\n  enumerable: true,\n  get: function () {\n    return _VariablesAreInputTypesRule.VariablesAreInputTypesRule;\n  },\n});\nObject.defineProperty(exports, 'VariablesInAllowedPositionRule', {\n  enumerable: true,\n  get: function () {\n    return _VariablesInAllowedPositionRule.VariablesInAllowedPositionRule;\n  },\n});\nObject.defineProperty(exports, 'specifiedRules', {\n  enumerable: true,\n  get: function () {\n    return _specifiedRules.specifiedRules;\n  },\n});\nObject.defineProperty(exports, 'validate', {\n  enumerable: true,\n  get: function () {\n    return _validate.validate;\n  },\n});\n\nvar _validate = require('./validate.js');\n\nvar _ValidationContext = require('./ValidationContext.js');\n\nvar _specifiedRules = require('./specifiedRules.js');\n\nvar _ExecutableDefinitionsRule = require('./rules/ExecutableDefinitionsRule.js');\n\nvar _FieldsOnCorrectTypeRule = require('./rules/FieldsOnCorrectTypeRule.js');\n\nvar _FragmentsOnCompositeTypesRule = require('./rules/FragmentsOnCompositeTypesRule.js');\n\nvar _KnownArgumentNamesRule = require('./rules/KnownArgumentNamesRule.js');\n\nvar _KnownDirectivesRule = require('./rules/KnownDirectivesRule.js');\n\nvar _KnownFragmentNamesRule = require('./rules/KnownFragmentNamesRule.js');\n\nvar _KnownTypeNamesRule = require('./rules/KnownTypeNamesRule.js');\n\nvar _LoneAnonymousOperationRule = require('./rules/LoneAnonymousOperationRule.js');\n\nvar _NoFragmentCyclesRule = require('./rules/NoFragmentCyclesRule.js');\n\nvar _NoUndefinedVariablesRule = require('./rules/NoUndefinedVariablesRule.js');\n\nvar _NoUnusedFragmentsRule = require('./rules/NoUnusedFragmentsRule.js');\n\nvar _NoUnusedVariablesRule = require('./rules/NoUnusedVariablesRule.js');\n\nvar _OverlappingFieldsCanBeMergedRule = require('./rules/OverlappingFieldsCanBeMergedRule.js');\n\nvar _PossibleFragmentSpreadsRule = require('./rules/PossibleFragmentSpreadsRule.js');\n\nvar _ProvidedRequiredArgumentsRule = require('./rules/ProvidedRequiredArgumentsRule.js');\n\nvar _ScalarLeafsRule = require('./rules/ScalarLeafsRule.js');\n\nvar _SingleFieldSubscriptionsRule = require('./rules/SingleFieldSubscriptionsRule.js');\n\nvar _UniqueArgumentNamesRule = require('./rules/UniqueArgumentNamesRule.js');\n\nvar _UniqueDirectivesPerLocationRule = require('./rules/UniqueDirectivesPerLocationRule.js');\n\nvar _UniqueFragmentNamesRule = require('./rules/UniqueFragmentNamesRule.js');\n\nvar _UniqueInputFieldNamesRule = require('./rules/UniqueInputFieldNamesRule.js');\n\nvar _UniqueOperationNamesRule = require('./rules/UniqueOperationNamesRule.js');\n\nvar _UniqueVariableNamesRule = require('./rules/UniqueVariableNamesRule.js');\n\nvar _ValuesOfCorrectTypeRule = require('./rules/ValuesOfCorrectTypeRule.js');\n\nvar _VariablesAreInputTypesRule = require('./rules/VariablesAreInputTypesRule.js');\n\nvar _VariablesInAllowedPositionRule = require('./rules/VariablesInAllowedPositionRule.js');\n\nvar _LoneSchemaDefinitionRule = require('./rules/LoneSchemaDefinitionRule.js');\n\nvar _UniqueOperationTypesRule = require('./rules/UniqueOperationTypesRule.js');\n\nvar _UniqueTypeNamesRule = require('./rules/UniqueTypeNamesRule.js');\n\nvar _UniqueEnumValueNamesRule = require('./rules/UniqueEnumValueNamesRule.js');\n\nvar _UniqueFieldDefinitionNamesRule = require('./rules/UniqueFieldDefinitionNamesRule.js');\n\nvar _UniqueArgumentDefinitionNamesRule = require('./rules/UniqueArgumentDefinitionNamesRule.js');\n\nvar _UniqueDirectiveNamesRule = require('./rules/UniqueDirectiveNamesRule.js');\n\nvar _PossibleTypeExtensionsRule = require('./rules/PossibleTypeExtensionsRule.js');\n\nvar _NoDeprecatedCustomRule = require('./rules/custom/NoDeprecatedCustomRule.js');\n\nvar _NoSchemaIntrospectionCustomRule = require('./rules/custom/NoSchemaIntrospectionCustomRule.js');\n;/validation/rules/custom/NoSchemaIntrospectionCustomRule.js\u0004'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.NoSchemaIntrospectionCustomRule = NoSchemaIntrospectionCustomRule;\n\nvar _GraphQLError = require('../../../error/GraphQLError.js');\n\nvar _definition = require('../../../type/definition.js');\n\nvar _introspection = require('../../../type/introspection.js');\n\n/**\n * Prohibit introspection queries\n *\n * A GraphQL document is only valid if all fields selected are not fields that\n * return an introspection type.\n *\n * Note: This rule is optional and is not part of the Validation section of the\n * GraphQL Specification. This rule effectively disables introspection, which\n * does not reflect best practices and should only be done if absolutely necessary.\n */\nfunction NoSchemaIntrospectionCustomRule(context) {\n  return {\n    Field(node) {\n      const type = (0, _definition.getNamedType)(context.getType());\n\n      if (type && (0, _introspection.isIntrospectionType)(type)) {\n        context.reportError(\n          new _GraphQLError.GraphQLError(\n            `GraphQL introspection has been disabled, but the requested query contained the field \"${node.name.value}\".`,\n            {\n              nodes: node,\n            },\n          ),\n        );\n      }\n    },\n  };\n}\n4/validation/rules/custom/NoDeprecatedCustomRule.d.ts\u0002Zimport type { ASTVisitor } from '../../../language/visitor';\nimport type { ValidationContext } from '../../ValidationContext';\n/**\n * No deprecated\n *\n * A GraphQL document is only valid if all selected fields and all used enum values have not been\n * deprecated.\n *\n * Note: This rule is optional and is not part of the Validation section of the GraphQL\n * Specification. The main purpose of this rule is detection of deprecated usages and not\n * necessarily to forbid their use when querying a service.\n */\nexport declare function NoDeprecatedCustomRule(\n  context: ValidationContext,\n): ASTVisitor;\n5/validation/rules/UniqueFieldDefinitionNamesRule.d.ts\u0001^import type { ASTVisitor } from '../../language/visitor';\nimport type { SDLValidationContext } from '../ValidationContext';\n/**\n * Unique field definition names\n *\n * A GraphQL complex type is only valid if all its fields are uniquely named.\n */\nexport declare function UniqueFieldDefinitionNamesRule(\n  context: SDLValidationContext,\n): ASTVisitor;\n/execution/collectFields.mjs\u0012import { Kind } from '../language/kinds.mjs';\nimport { isAbstractType } from '../type/definition.mjs';\nimport {\n  GraphQLIncludeDirective,\n  GraphQLSkipDirective,\n} from '../type/directives.mjs';\nimport { typeFromAST } from '../utilities/typeFromAST.mjs';\nimport { getDirectiveValues } from './values.mjs';\n/**\n * Given a selectionSet, collects all of the fields and returns them.\n *\n * CollectFields requires the \"runtime type\" of an object. For a field that\n * returns an Interface or Union type, the \"runtime type\" will be the actual\n * object type returned by that field.\n *\n * @internal\n */\n\nexport function collectFields(\n  schema,\n  fragments,\n  variableValues,\n  runtimeType,\n  selectionSet,\n) {\n  const fields = new Map();\n  collectFieldsImpl(\n    schema,\n    fragments,\n    variableValues,\n    runtimeType,\n    selectionSet,\n    fields,\n    new Set(),\n  );\n  return fields;\n}\n/**\n * Given an array of field nodes, collects all of the subfields of the passed\n * in fields, and returns them at the end.\n *\n * CollectSubFields requires the \"return type\" of an object. For a field that\n * returns an Interface or Union type, the \"return type\" will be the actual\n * object type returned by that field.\n *\n * @internal\n */\n\nexport function collectSubfields(\n  schema,\n  fragments,\n  variableValues,\n  returnType,\n  fieldNodes,\n) {\n  const subFieldNodes = new Map();\n  const visitedFragmentNames = new Set();\n\n  for (const node of fieldNodes) {\n    if (node.selectionSet) {\n      collectFieldsImpl(\n        schema,\n        fragments,\n        variableValues,\n        returnType,\n        node.selectionSet,\n        subFieldNodes,\n        visitedFragmentNames,\n      );\n    }\n  }\n\n  return subFieldNodes;\n}\n\nfunction collectFieldsImpl(\n  schema,\n  fragments,\n  variableValues,\n  runtimeType,\n  selectionSet,\n  fields,\n  visitedFragmentNames,\n) {\n  for (const selection of selectionSet.selections) {\n    switch (selection.kind) {\n      case Kind.FIELD: {\n        if (!shouldIncludeNode(variableValues, selection)) {\n          continue;\n        }\n\n        const name = getFieldEntryKey(selection);\n        const fieldList = fields.get(name);\n\n        if (fieldList !== undefined) {\n          fieldList.push(selection);\n        } else {\n          fields.set(name, [selection]);\n        }\n\n        break;\n      }\n\n      case Kind.INLINE_FRAGMENT: {\n        if (\n          !shouldIncludeNode(variableValues, selection) ||\n          !doesFragmentConditionMatch(schema, selection, runtimeType)\n        ) {\n          continue;\n        }\n\n        collectFieldsImpl(\n          schema,\n          fragments,\n          variableValues,\n          runtimeType,\n          selection.selectionSet,\n          fields,\n          visitedFragmentNames,\n        );\n        break;\n      }\n\n      case Kind.FRAGMENT_SPREAD: {\n        const fragName = selection.name.value;\n\n        if (\n          visitedFragmentNames.has(fragName) ||\n          !shouldIncludeNode(variableValues, selection)\n        ) {\n          continue;\n        }\n\n        visitedFragmentNames.add(fragName);\n        const fragment = fragments[fragName];\n\n        if (\n          !fragment ||\n          !doesFragmentConditionMatch(schema, fragment, runtimeType)\n        ) {\n          continue;\n        }\n\n        collectFieldsImpl(\n          schema,\n          fragments,\n          variableValues,\n          runtimeType,\n          fragment.selectionSet,\n          fields,\n          visitedFragmentNames,\n        );\n        break;\n      }\n    }\n  }\n}\n/**\n * Determines if a field should be included based on the `@include` and `@skip`\n * directives, where `@skip` has higher precedence than `@include`.\n */\n\nfunction shouldIncludeNode(variableValues, node) {\n  const skip = getDirectiveValues(GraphQLSkipDirective, node, variableValues);\n\n  if ((skip === null || skip === void 0 ? void 0 : skip.if) === true) {\n    return false;\n  }\n\n  const include = getDirectiveValues(\n    GraphQLIncludeDirective,\n    node,\n    variableValues,\n  );\n\n  if (\n    (include === null || include === void 0 ? void 0 : include.if) === false\n  ) {\n    return false;\n  }\n\n  return true;\n}\n/**\n * Determines if a fragment is applicable to the given type.\n */\n\nfunction doesFragmentConditionMatch(schema, fragment, type) {\n  const typeConditionNode = fragment.typeCondition;\n\n  if (!typeConditionNode) {\n    return true;\n  }\n\n  const conditionalType = typeFromAST(schema, typeConditionNode);\n\n  if (conditionalType === type) {\n    return true;\n  }\n\n  if (isAbstractType(conditionalType)) {\n    return schema.isSubType(conditionalType, type);\n  }\n\n  return false;\n}\n/**\n * Implements the logic to compute the key of a given field's entry\n */\n\nfunction getFieldEntryKey(node) {\n  return node.alias ? node.alias.value : node.name.value;\n}\n/utilities/concatAST.js\u0002Y'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.concatAST = concatAST;\n\nvar _kinds = require('../language/kinds.js');\n\n/**\n * Provided a collection of ASTs, presumably each from different files,\n * concatenate the ASTs together into batched AST, useful for validating many\n * GraphQL source files which together represent one conceptual application.\n */\nfunction concatAST(documents) {\n  const definitions = [];\n\n  for (const doc of documents) {\n    definitions.push(...doc.definitions);\n  }\n\n  return {\n    kind: _kinds.Kind.DOCUMENT,\n    definitions,\n  };\n}\n/type/introspection.jsL'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.introspectionTypes =\n  exports.__TypeKind =\n  exports.__Type =\n  exports.__Schema =\n  exports.__InputValue =\n  exports.__Field =\n  exports.__EnumValue =\n  exports.__DirectiveLocation =\n  exports.__Directive =\n  exports.TypeNameMetaFieldDef =\n  exports.TypeMetaFieldDef =\n  exports.TypeKind =\n  exports.SchemaMetaFieldDef =\n    void 0;\nexports.isIntrospectionType = isIntrospectionType;\n\nvar _inspect = require('../jsutils/inspect.js');\n\nvar _invariant = require('../jsutils/invariant.js');\n\nvar _directiveLocation = require('../language/directiveLocation.js');\n\nvar _printer = require('../language/printer.js');\n\nvar _astFromValue = require('../utilities/astFromValue.js');\n\nvar _definition = require('./definition.js');\n\nvar _scalars = require('./scalars.js');\n\nconst __Schema = new _definition.GraphQLObjectType({\n  name: '__Schema',\n  description:\n    'A GraphQL Schema defines the capabilities of a GraphQL server. It exposes all available types and directives on the server, as well as the entry points for query, mutation, and subscription operations.',\n  fields: () => ({\n    description: {\n      type: _scalars.GraphQLString,\n      resolve: (schema) => schema.description,\n    },\n    types: {\n      description: 'A list of all types supported by this server.',\n      type: new _definition.GraphQLNonNull(\n        new _definition.GraphQLList(new _definition.GraphQLNonNull(__Type)),\n      ),\n\n      resolve(schema) {\n        return Object.values(schema.getTypeMap());\n      },\n    },\n    queryType: {\n      description: 'The type that query operations will be rooted at.',\n      type: new _definition.GraphQLNonNull(__Type),\n      resolve: (schema) => schema.getQueryType(),\n    },\n    mutationType: {\n      description:\n        'If this server supports mutation, the type that mutation operations will be rooted at.',\n      type: __Type,\n      resolve: (schema) => schema.getMutationType(),\n    },\n    subscriptionType: {\n      description:\n        'If this server support subscription, the type that subscription operations will be rooted at.',\n      type: __Type,\n      resolve: (schema) => schema.getSubscriptionType(),\n    },\n    directives: {\n      description: 'A list of all directives supported by this server.',\n      type: new _definition.GraphQLNonNull(\n        new _definition.GraphQLList(\n          new _definition.GraphQLNonNull(__Directive),\n        ),\n      ),\n      resolve: (schema) => schema.getDirectives(),\n    },\n  }),\n});\n\nexports.__Schema = __Schema;\n\nconst __Directive = new _definition.GraphQLObjectType({\n  name: '__Directive',\n  description:\n    \"A Directive provides a way to describe alternate runtime execution and type validation behavior in a GraphQL document.\\n\\nIn some cases, you need to provide options to alter GraphQL's execution behavior in ways field arguments will not suffice, such as conditionally including or skipping a field. Directives provide this by describing additional information to the executor.\",\n  fields: () => ({\n    name: {\n      type: new _definition.GraphQLNonNull(_scalars.GraphQLString),\n      resolve: (directive) => directive.name,\n    },\n    description: {\n      type: _scalars.GraphQLString,\n      resolve: (directive) => directive.description,\n    },\n    isRepeatable: {\n      type: new _definition.GraphQLNonNull(_scalars.GraphQLBoolean),\n      resolve: (directive) => directive.isRepeatable,\n    },\n    locations: {\n      type: new _definition.GraphQLNonNull(\n        new _definition.GraphQLList(\n          new _definition.GraphQLNonNull(__DirectiveLocation),\n        ),\n      ),\n      resolve: (directive) => directive.locations,\n    },\n    args: {\n      type: new _definition.GraphQLNonNull(\n        new _definition.GraphQLList(\n          new _definition.GraphQLNonNull(__InputValue),\n        ),\n      ),\n      args: {\n        includeDeprecated: {\n          type: _scalars.GraphQLBoolean,\n          defaultValue: false,\n        },\n      },\n\n      resolve(field, { includeDeprecated }) {\n        return includeDeprecated\n          ? field.args\n          : field.args.filter((arg) => arg.deprecationReason == null);\n      },\n    },\n  }),\n});\n\nexports.__Directive = __Directive;\n\nconst __DirectiveLocation = new _definition.GraphQLEnumType({\n  name: '__DirectiveLocation',\n  description:\n    'A Directive can be adjacent to many parts of the GraphQL language, a __DirectiveLocation describes one such possible adjacencies.',\n  values: {\n    QUERY: {\n      value: _directiveLocation.DirectiveLocation.QUERY,\n      description: 'Location adjacent to a query operation.',\n    },\n    MUTATION: {\n      value: _directiveLocation.DirectiveLocation.MUTATION,\n      description: 'Location adjacent to a mutation operation.',\n    },\n    SUBSCRIPTION: {\n      value: _directiveLocation.DirectiveLocation.SUBSCRIPTION,\n      description: 'Location adjacent to a subscription operation.',\n    },\n    FIELD: {\n      value: _directiveLocation.DirectiveLocation.FIELD,\n      description: 'Location adjacent to a field.',\n    },\n    FRAGMENT_DEFINITION: {\n      value: _directiveLocation.DirectiveLocation.FRAGMENT_DEFINITION,\n      description: 'Location adjacent to a fragment definition.',\n    },\n    FRAGMENT_SPREAD: {\n      value: _directiveLocation.DirectiveLocation.FRAGMENT_SPREAD,\n      description: 'Location adjacent to a fragment spread.',\n    },\n    INLINE_FRAGMENT: {\n      value: _directiveLocation.DirectiveLocation.INLINE_FRAGMENT,\n      description: 'Location adjacent to an inline fragment.',\n    },\n    VARIABLE_DEFINITION: {\n      value: _directiveLocation.DirectiveLocation.VARIABLE_DEFINITION,\n      description: 'Location adjacent to a variable definition.',\n    },\n    SCHEMA: {\n      value: _directiveLocation.DirectiveLocation.SCHEMA,\n      description: 'Location adjacent to a schema definition.',\n    },\n    SCALAR: {\n      value: _directiveLocation.DirectiveLocation.SCALAR,\n      description: 'Location adjacent to a scalar definition.',\n    },\n    OBJECT: {\n      value: _directiveLocation.DirectiveLocation.OBJECT,\n      description: 'Location adjacent to an object type definition.',\n    },\n    FIELD_DEFINITION: {\n      value: _directiveLocation.DirectiveLocation.FIELD_DEFINITION,\n      description: 'Location adjacent to a field definition.',\n    },\n    ARGUMENT_DEFINITION: {\n      value: _directiveLocation.DirectiveLocation.ARGUMENT_DEFINITION,\n      description: 'Location adjacent to an argument definition.',\n    },\n    INTERFACE: {\n      value: _directiveLocation.DirectiveLocation.INTERFACE,\n      description: 'Location adjacent to an interface definition.',\n    },\n    UNION: {\n      value: _directiveLocation.DirectiveLocation.UNION,\n      description: 'Location adjacent to a union definition.',\n    },\n    ENUM: {\n      value: _directiveLocation.DirectiveLocation.ENUM,\n      description: 'Location adjacent to an enum definition.',\n    },\n    ENUM_VALUE: {\n      value: _directiveLocation.DirectiveLocation.ENUM_VALUE,\n      description: 'Location adjacent to an enum value definition.',\n    },\n    INPUT_OBJECT: {\n      value: _directiveLocation.DirectiveLocation.INPUT_OBJECT,\n      description: 'Location adjacent to an input object type definition.',\n    },\n    INPUT_FIELD_DEFINITION: {\n      value: _directiveLocation.DirectiveLocation.INPUT_FIELD_DEFINITION,\n      description: 'Location adjacent to an input object field definition.',\n    },\n  },\n});\n\nexports.__DirectiveLocation = __DirectiveLocation;\n\nconst __Type = new _definition.GraphQLObjectType({\n  name: '__Type',\n  description:\n    'The fundamental unit of any GraphQL Schema is the type. There are many kinds of types in GraphQL as represented by the `__TypeKind` enum.\\n\\nDepending on the kind of a type, certain fields describe information about that type. Scalar types provide no information beyond a name, description and optional `specifiedByURL`, while Enum types provide their values. Object and Interface types provide the fields they describe. Abstract types, Union and Interface, provide the Object types possible at runtime. List and NonNull types compose other types.',\n  fields: () => ({\n    kind: {\n      type: new _definition.GraphQLNonNull(__TypeKind),\n\n      resolve(type) {\n        if ((0, _definition.isScalarType)(type)) {\n          return TypeKind.SCALAR;\n        }\n\n        if ((0, _definition.isObjectType)(type)) {\n          return TypeKind.OBJECT;\n        }\n\n        if ((0, _definition.isInterfaceType)(type)) {\n          return TypeKind.INTERFACE;\n        }\n\n        if ((0, _definition.isUnionType)(type)) {\n          return TypeKind.UNION;\n        }\n\n        if ((0, _definition.isEnumType)(type)) {\n          return TypeKind.ENUM;\n        }\n\n        if ((0, _definition.isInputObjectType)(type)) {\n          return TypeKind.INPUT_OBJECT;\n        }\n\n        if ((0, _definition.isListType)(type)) {\n          return TypeKind.LIST;\n        }\n\n        if ((0, _definition.isNonNullType)(type)) {\n          return TypeKind.NON_NULL;\n        }\n        /* c8 ignore next 3 */\n        // Not reachable, all possible types have been considered)\n\n        false ||\n          (0, _invariant.invariant)(\n            false,\n            `Unexpected type: \"${(0, _inspect.inspect)(type)}\".`,\n          );\n      },\n    },\n    name: {\n      type: _scalars.GraphQLString,\n      resolve: (type) => ('name' in type ? type.name : undefined),\n    },\n    description: {\n      type: _scalars.GraphQLString,\n      resolve: (\n        type, // FIXME: add test case\n      ) =>\n        /* c8 ignore next */\n        'description' in type ? type.description : undefined,\n    },\n    specifiedByURL: {\n      type: _scalars.GraphQLString,\n      resolve: (obj) =>\n        'specifiedByURL' in obj ? obj.specifiedByURL : undefined,\n    },\n    fields: {\n      type: new _definition.GraphQLList(\n        new _definition.GraphQLNonNull(__Field),\n      ),\n      args: {\n        includeDeprecated: {\n          type: _scalars.GraphQLBoolean,\n          defaultValue: false,\n        },\n      },\n\n      resolve(type, { includeDeprecated }) {\n        if (\n          (0, _definition.isObjectType)(type) ||\n          (0, _definition.isInterfaceType)(type)\n        ) {\n          const fields = Object.values(type.getFields());\n          return includeDeprecated\n            ? fields\n            : fields.filter((field) => field.deprecationReason == null);\n        }\n      },\n    },\n    interfaces: {\n      type: new _definition.GraphQLList(new _definition.GraphQLNonNull(__Type)),\n\n      resolve(type) {\n        if (\n          (0, _definition.isObjectType)(type) ||\n          (0, _definition.isInterfaceType)(type)\n        ) {\n          return type.getInterfaces();\n        }\n      },\n    },\n    possibleTypes: {\n      type: new _definition.GraphQLList(new _definition.GraphQLNonNull(__Type)),\n\n      resolve(type, _args, _context, { schema }) {\n        if ((0, _definition.isAbstractType)(type)) {\n          return schema.getPossibleTypes(type);\n        }\n      },\n    },\n    enumValues: {\n      type: new _definition.GraphQLList(\n        new _definition.GraphQLNonNull(__EnumValue),\n      ),\n      args: {\n        includeDeprecated: {\n          type: _scalars.GraphQLBoolean,\n          defaultValue: false,\n        },\n      },\n\n      resolve(type, { includeDeprecated }) {\n        if ((0, _definition.isEnumType)(type)) {\n          const values = type.getValues();\n          return includeDeprecated\n            ? values\n            : values.filter((field) => field.deprecationReason == null);\n        }\n      },\n    },\n    inputFields: {\n      type: new _definition.GraphQLList(\n        new _definition.GraphQLNonNull(__InputValue),\n      ),\n      args: {\n        includeDeprecated: {\n          type: _scalars.GraphQLBoolean,\n          defaultValue: false,\n        },\n      },\n\n      resolve(type, { includeDeprecated }) {\n        if ((0, _definition.isInputObjectType)(type)) {\n          const values = Object.values(type.getFields());\n          return includeDeprecated\n            ? values\n            : values.filter((field) => field.deprecationReason == null);\n        }\n      },\n    },\n    ofType: {\n      type: __Type,\n      resolve: (type) => ('ofType' in type ? type.ofType : undefined),\n    },\n  }),\n});\n\nexports.__Type = __Type;\n\nconst __Field = new _definition.GraphQLObjectType({\n  name: '__Field',\n  description:\n    'Object and Interface types are described by a list of Fields, each of which has a name, potentially a list of arguments, and a return type.',\n  fields: () => ({\n    name: {\n      type: new _definition.GraphQLNonNull(_scalars.GraphQLString),\n      resolve: (field) => field.name,\n    },\n    description: {\n      type: _scalars.GraphQLString,\n      resolve: (field) => field.description,\n    },\n    args: {\n      type: new _definition.GraphQLNonNull(\n        new _definition.GraphQLList(\n          new _definition.GraphQLNonNull(__InputValue),\n        ),\n      ),\n      args: {\n        includeDeprecated: {\n          type: _scalars.GraphQLBoolean,\n          defaultValue: false,\n        },\n      },\n\n      resolve(field, { includeDeprecated }) {\n        return includeDeprecated\n          ? field.args\n          : field.args.filter((arg) => arg.deprecationReason == null);\n      },\n    },\n    type: {\n      type: new _definition.GraphQLNonNull(__Type),\n      resolve: (field) => field.type,\n    },\n    isDeprecated: {\n      type: new _definition.GraphQLNonNull(_scalars.GraphQLBoolean),\n      resolve: (field) => field.deprecationReason != null,\n    },\n    deprecationReason: {\n      type: _scalars.GraphQLString,\n      resolve: (field) => field.deprecationReason,\n    },\n  }),\n});\n\nexports.__Field = __Field;\n\nconst __InputValue = new _definition.GraphQLObjectType({\n  name: '__InputValue',\n  description:\n    'Arguments provided to Fields or Directives and the input fields of an InputObject are represented as Input Values which describe their type and optionally a default value.',\n  fields: () => ({\n    name: {\n      type: new _definition.GraphQLNonNull(_scalars.GraphQLString),\n      resolve: (inputValue) => inputValue.name,\n    },\n    description: {\n      type: _scalars.GraphQLString,\n      resolve: (inputValue) => inputValue.description,\n    },\n    type: {\n      type: new _definition.GraphQLNonNull(__Type),\n      resolve: (inputValue) => inputValue.type,\n    },\n    defaultValue: {\n      type: _scalars.GraphQLString,\n      description:\n        'A GraphQL-formatted string representing the default value for this input value.',\n\n      resolve(inputValue) {\n        const { type, defaultValue } = inputValue;\n        const valueAST = (0, _astFromValue.astFromValue)(defaultValue, type);\n        return valueAST ? (0, _printer.print)(valueAST) : null;\n      },\n    },\n    isDeprecated: {\n      type: new _definition.GraphQLNonNull(_scalars.GraphQLBoolean),\n      resolve: (field) => field.deprecationReason != null,\n    },\n    deprecationReason: {\n      type: _scalars.GraphQLString,\n      resolve: (obj) => obj.deprecationReason,\n    },\n  }),\n});\n\nexports.__InputValue = __InputValue;\n\nconst __EnumValue = new _definition.GraphQLObjectType({\n  name: '__EnumValue',\n  description:\n    'One possible value for a given Enum. Enum values are unique values, not a placeholder for a string or numeric value. However an Enum value is returned in a JSON response as a string.',\n  fields: () => ({\n    name: {\n      type: new _definition.GraphQLNonNull(_scalars.GraphQLString),\n      resolve: (enumValue) => enumValue.name,\n    },\n    description: {\n      type: _scalars.GraphQLString,\n      resolve: (enumValue) => enumValue.description,\n    },\n    isDeprecated: {\n      type: new _definition.GraphQLNonNull(_scalars.GraphQLBoolean),\n      resolve: (enumValue) => enumValue.deprecationReason != null,\n    },\n    deprecationReason: {\n      type: _scalars.GraphQLString,\n      resolve: (enumValue) => enumValue.deprecationReason,\n    },\n  }),\n});\n\nexports.__EnumValue = __EnumValue;\nvar TypeKind;\nexports.TypeKind = TypeKind;\n\n(function (TypeKind) {\n  TypeKind['SCALAR'] = 'SCALAR';\n  TypeKind['OBJECT'] = 'OBJECT';\n  TypeKind['INTERFACE'] = 'INTERFACE';\n  TypeKind['UNION'] = 'UNION';\n  TypeKind['ENUM'] = 'ENUM';\n  TypeKind['INPUT_OBJECT'] = 'INPUT_OBJECT';\n  TypeKind['LIST'] = 'LIST';\n  TypeKind['NON_NULL'] = 'NON_NULL';\n})(TypeKind || (exports.TypeKind = TypeKind = {}));\n\nconst __TypeKind = new _definition.GraphQLEnumType({\n  name: '__TypeKind',\n  description: 'An enum describing what kind of type a given `__Type` is.',\n  values: {\n    SCALAR: {\n      value: TypeKind.SCALAR,\n      description: 'Indicates this type is a scalar.',\n    },\n    OBJECT: {\n      value: TypeKind.OBJECT,\n      description:\n        'Indicates this type is an object. `fields` and `interfaces` are valid fields.',\n    },\n    INTERFACE: {\n      value: TypeKind.INTERFACE,\n      description:\n        'Indicates this type is an interface. `fields`, `interfaces`, and `possibleTypes` are valid fields.',\n    },\n    UNION: {\n      value: TypeKind.UNION,\n      description:\n        'Indicates this type is a union. `possibleTypes` is a valid field.',\n    },\n    ENUM: {\n      value: TypeKind.ENUM,\n      description:\n        'Indicates this type is an enum. `enumValues` is a valid field.',\n    },\n    INPUT_OBJECT: {\n      value: TypeKind.INPUT_OBJECT,\n      description:\n        'Indicates this type is an input object. `inputFields` is a valid field.',\n    },\n    LIST: {\n      value: TypeKind.LIST,\n      description: 'Indicates this type is a list. `ofType` is a valid field.',\n    },\n    NON_NULL: {\n      value: TypeKind.NON_NULL,\n      description:\n        'Indicates this type is a non-null. `ofType` is a valid field.',\n    },\n  },\n});\n/**\n * Note that these are GraphQLField and not GraphQLFieldConfig,\n * so the format for args is different.\n */\n\nexports.__TypeKind = __TypeKind;\nconst SchemaMetaFieldDef = {\n  name: '__schema',\n  type: new _definition.GraphQLNonNull(__Schema),\n  description: 'Access the current type schema of this server.',\n  args: [],\n  resolve: (_source, _args, _context, { schema }) => schema,\n  deprecationReason: undefined,\n  extensions: Object.create(null),\n  astNode: undefined,\n};\nexports.SchemaMetaFieldDef = SchemaMetaFieldDef;\nconst TypeMetaFieldDef = {\n  name: '__type',\n  type: __Type,\n  description: 'Request the type information of a single type.',\n  args: [\n    {\n      name: 'name',\n      description: undefined,\n      type: new _definition.GraphQLNonNull(_scalars.GraphQLString),\n      defaultValue: undefined,\n      deprecationReason: undefined,\n      extensions: Object.create(null),\n      astNode: undefined,\n    },\n  ],\n  resolve: (_source, { name }, _context, { schema }) => schema.getType(name),\n  deprecationReason: undefined,\n  extensions: Object.create(null),\n  astNode: undefined,\n};\nexports.TypeMetaFieldDef = TypeMetaFieldDef;\nconst TypeNameMetaFieldDef = {\n  name: '__typename',\n  type: new _definition.GraphQLNonNull(_scalars.GraphQLString),\n  description: 'The name of the current Object type at runtime.',\n  args: [],\n  resolve: (_source, _args, _context, { parentType }) => parentType.name,\n  deprecationReason: undefined,\n  extensions: Object.create(null),\n  astNode: undefined,\n};\nexports.TypeNameMetaFieldDef = TypeNameMetaFieldDef;\nconst introspectionTypes = Object.freeze([\n  __Schema,\n  __Directive,\n  __DirectiveLocation,\n  __Type,\n  __Field,\n  __InputValue,\n  __EnumValue,\n  __TypeKind,\n]);\nexports.introspectionTypes = introspectionTypes;\n\nfunction isIntrospectionType(type) {\n  return introspectionTypes.some(({ name }) => type.name === name);\n}\n/error/locatedError.js\u0004O'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.locatedError = locatedError;\n\nvar _toError = require('../jsutils/toError.js');\n\nvar _GraphQLError = require('./GraphQLError.js');\n\n/**\n * Given an arbitrary value, presumably thrown while attempting to execute a\n * GraphQL operation, produce a new GraphQLError aware of the location in the\n * document responsible for the original Error.\n */\nfunction locatedError(rawOriginalError, nodes, path) {\n  var _nodes;\n\n  const originalError = (0, _toError.toError)(rawOriginalError); // Note: this uses a brand-check to support GraphQL errors originating from other contexts.\n\n  if (isLocatedGraphQLError(originalError)) {\n    return originalError;\n  }\n\n  return new _GraphQLError.GraphQLError(originalError.message, {\n    nodes:\n      (_nodes = originalError.nodes) !== null && _nodes !== void 0\n        ? _nodes\n        : nodes,\n    source: originalError.source,\n    positions: originalError.positions,\n    path,\n    originalError,\n  });\n}\n\nfunction isLocatedGraphQLError(error) {\n  return Array.isArray(error.path);\n}\n/jsutils/printPathArray.mjs/**\n * Build a string describing the path.\n */\nexport function printPathArray(path) {\n  return path\n    .map((key) =>\n      typeof key === 'number' ? '[' + key.toString() + ']' : '.' + key,\n    )\n    .join('');\n}\n/utilities/buildASTSchema.mjs\fvimport { devAssert } from '../jsutils/devAssert.mjs';\nimport { Kind } from '../language/kinds.mjs';\nimport { parse } from '../language/parser.mjs';\nimport { specifiedDirectives } from '../type/directives.mjs';\nimport { GraphQLSchema } from '../type/schema.mjs';\nimport { assertValidSDL } from '../validation/validate.mjs';\nimport { extendSchemaImpl } from './extendSchema.mjs';\n\n/**\n * This takes the ast of a schema document produced by the parse function in\n * src/language/parser.js.\n *\n * If no schema definition is provided, then it will look for types named Query,\n * Mutation and Subscription.\n *\n * Given that AST it constructs a GraphQLSchema. The resulting schema\n * has no resolve methods, so execution will use default resolvers.\n */\nexport function buildASTSchema(documentAST, options) {\n  (documentAST != null && documentAST.kind === Kind.DOCUMENT) ||\n    devAssert(false, 'Must provide valid Document AST.');\n\n  if (\n    (options === null || options === void 0 ? void 0 : options.assumeValid) !==\n      true &&\n    (options === null || options === void 0\n      ? void 0\n      : options.assumeValidSDL) !== true\n  ) {\n    assertValidSDL(documentAST);\n  }\n\n  const emptySchemaConfig = {\n    description: undefined,\n    types: [],\n    directives: [],\n    extensions: Object.create(null),\n    extensionASTNodes: [],\n    assumeValid: false,\n  };\n  const config = extendSchemaImpl(emptySchemaConfig, documentAST, options);\n\n  if (config.astNode == null) {\n    for (const type of config.types) {\n      switch (type.name) {\n        // Note: While this could make early assertions to get the correctly\n        // typed values below, that would throw immediately while type system\n        // validation with validateSchema() will produce more actionable results.\n        case 'Query':\n          // @ts-expect-error validated in `validateSchema`\n          config.query = type;\n          break;\n\n        case 'Mutation':\n          // @ts-expect-error validated in `validateSchema`\n          config.mutation = type;\n          break;\n\n        case 'Subscription':\n          // @ts-expect-error validated in `validateSchema`\n          config.subscription = type;\n          break;\n      }\n    }\n  }\n\n  const directives = [\n    ...config.directives, // If specified directives were not explicitly declared, add them.\n    ...specifiedDirectives.filter((stdDirective) =>\n      config.directives.every(\n        (directive) => directive.name !== stdDirective.name,\n      ),\n    ),\n  ];\n  return new GraphQLSchema({ ...config, directives });\n}\n/**\n * A helper function to build a GraphQLSchema directly from a source\n * document.\n */\n\nexport function buildSchema(source, options) {\n  const document = parse(source, {\n    noLocation:\n      options === null || options === void 0 ? void 0 : options.noLocation,\n    allowLegacyFragmentVariables:\n      options === null || options === void 0\n        ? void 0\n        : options.allowLegacyFragmentVariables,\n  });\n  return buildASTSchema(document, {\n    assumeValidSDL:\n      options === null || options === void 0 ? void 0 : options.assumeValidSDL,\n    assumeValid:\n      options === null || options === void 0 ? void 0 : options.assumeValid,\n  });\n}\n/execution/execute.mjsp<import { devAssert } from '../jsutils/devAssert.mjs';\nimport { inspect } from '../jsutils/inspect.mjs';\nimport { invariant } from '../jsutils/invariant.mjs';\nimport { isIterableObject } from '../jsutils/isIterableObject.mjs';\nimport { isObjectLike } from '../jsutils/isObjectLike.mjs';\nimport { isPromise } from '../jsutils/isPromise.mjs';\nimport { memoize3 } from '../jsutils/memoize3.mjs';\nimport { addPath, pathToArray } from '../jsutils/Path.mjs';\nimport { promiseForObject } from '../jsutils/promiseForObject.mjs';\nimport { promiseReduce } from '../jsutils/promiseReduce.mjs';\nimport { GraphQLError } from '../error/GraphQLError.mjs';\nimport { locatedError } from '../error/locatedError.mjs';\nimport { OperationTypeNode } from '../language/ast.mjs';\nimport { Kind } from '../language/kinds.mjs';\nimport {\n  isAbstractType,\n  isLeafType,\n  isListType,\n  isNonNullType,\n  isObjectType,\n} from '../type/definition.mjs';\nimport {\n  SchemaMetaFieldDef,\n  TypeMetaFieldDef,\n  TypeNameMetaFieldDef,\n} from '../type/introspection.mjs';\nimport { assertValidSchema } from '../type/validate.mjs';\nimport {\n  collectFields,\n  collectSubfields as _collectSubfields,\n} from './collectFields.mjs';\nimport { getArgumentValues, getVariableValues } from './values.mjs';\n/**\n * A memoized collection of relevant subfields with regard to the return\n * type. Memoizing ensures the subfields are not repeatedly calculated, which\n * saves overhead when resolving lists of values.\n */\n\nconst collectSubfields = memoize3((exeContext, returnType, fieldNodes) =>\n  _collectSubfields(\n    exeContext.schema,\n    exeContext.fragments,\n    exeContext.variableValues,\n    returnType,\n    fieldNodes,\n  ),\n);\n/**\n * Terminology\n *\n * \"Definitions\" are the generic name for top-level statements in the document.\n * Examples of this include:\n * 1) Operations (such as a query)\n * 2) Fragments\n *\n * \"Operations\" are a generic name for requests in the document.\n * Examples of this include:\n * 1) query,\n * 2) mutation\n *\n * \"Selections\" are the definitions that can appear legally and at\n * single level of the query. These include:\n * 1) field references e.g `a`\n * 2) fragment \"spreads\" e.g. `...c`\n * 3) inline fragment \"spreads\" e.g. `...on Type { a }`\n */\n\n/**\n * Data that must be available at all points during query execution.\n *\n * Namely, schema of the type system that is currently executing,\n * and the fragments defined in the query document\n */\n\n/**\n * Implements the \"Executing requests\" section of the GraphQL specification.\n *\n * Returns either a synchronous ExecutionResult (if all encountered resolvers\n * are synchronous), or a Promise of an ExecutionResult that will eventually be\n * resolved and never rejected.\n *\n * If the arguments to this function do not result in a legal execution context,\n * a GraphQLError will be thrown immediately explaining the invalid input.\n */\nexport function execute(args) {\n  // Temporary for v15 to v16 migration. Remove in v17\n  arguments.length < 2 ||\n    devAssert(\n      false,\n      'graphql@16 dropped long-deprecated support for positional arguments, please pass an object instead.',\n    );\n  const { schema, document, variableValues, rootValue } = args; // If arguments are missing or incorrect, throw an error.\n\n  assertValidExecutionArguments(schema, document, variableValues); // If a valid execution context cannot be created due to incorrect arguments,\n  // a \"Response\" with only errors is returned.\n\n  const exeContext = buildExecutionContext(args); // Return early errors if execution context failed.\n\n  if (!('schema' in exeContext)) {\n    return {\n      errors: exeContext,\n    };\n  } // Return a Promise that will eventually resolve to the data described by\n  // The \"Response\" section of the GraphQL specification.\n  //\n  // If errors are encountered while executing a GraphQL field, only that\n  // field and its descendants will be omitted, and sibling fields will still\n  // be executed. An execution which encounters errors will still result in a\n  // resolved Promise.\n  //\n  // Errors from sub-fields of a NonNull type may propagate to the top level,\n  // at which point we still log the error and null the parent field, which\n  // in this case is the entire response.\n\n  try {\n    const { operation } = exeContext;\n    const result = executeOperation(exeContext, operation, rootValue);\n\n    if (isPromise(result)) {\n      return result.then(\n        (data) => buildResponse(data, exeContext.errors),\n        (error) => {\n          exeContext.errors.push(error);\n          return buildResponse(null, exeContext.errors);\n        },\n      );\n    }\n\n    return buildResponse(result, exeContext.errors);\n  } catch (error) {\n    exeContext.errors.push(error);\n    return buildResponse(null, exeContext.errors);\n  }\n}\n/**\n * Also implements the \"Executing requests\" section of the GraphQL specification.\n * However, it guarantees to complete synchronously (or throw an error) assuming\n * that all field resolvers are also synchronous.\n */\n\nexport function executeSync(args) {\n  const result = execute(args); // Assert that the execution was synchronous.\n\n  if (isPromise(result)) {\n    throw new Error('GraphQL execution failed to complete synchronously.');\n  }\n\n  return result;\n}\n/**\n * Given a completed execution context and data, build the `{ errors, data }`\n * response defined by the \"Response\" section of the GraphQL specification.\n */\n\nfunction buildResponse(data, errors) {\n  return errors.length === 0\n    ? {\n        data,\n      }\n    : {\n        errors,\n        data,\n      };\n}\n/**\n * Essential assertions before executing to provide developer feedback for\n * improper use of the GraphQL library.\n *\n * @internal\n */\n\nexport function assertValidExecutionArguments(\n  schema,\n  document,\n  rawVariableValues,\n) {\n  document || devAssert(false, 'Must provide document.'); // If the schema used for execution is invalid, throw an error.\n\n  assertValidSchema(schema); // Variables, if provided, must be an object.\n\n  rawVariableValues == null ||\n    isObjectLike(rawVariableValues) ||\n    devAssert(\n      false,\n      'Variables must be provided as an Object where each property is a variable value. Perhaps look to see if an unparsed JSON string was provided.',\n    );\n}\n/**\n * Constructs a ExecutionContext object from the arguments passed to\n * execute, which we will pass throughout the other execution methods.\n *\n * Throws a GraphQLError if a valid execution context cannot be created.\n *\n * @internal\n */\n\nexport function buildExecutionContext(args) {\n  var _definition$name, _operation$variableDe;\n\n  const {\n    schema,\n    document,\n    rootValue,\n    contextValue,\n    variableValues: rawVariableValues,\n    operationName,\n    fieldResolver,\n    typeResolver,\n    subscribeFieldResolver,\n  } = args;\n  let operation;\n  const fragments = Object.create(null);\n\n  for (const definition of document.definitions) {\n    switch (definition.kind) {\n      case Kind.OPERATION_DEFINITION:\n        if (operationName == null) {\n          if (operation !== undefined) {\n            return [\n              new GraphQLError(\n                'Must provide operation name if query contains multiple operations.',\n              ),\n            ];\n          }\n\n          operation = definition;\n        } else if (\n          ((_definition$name = definition.name) === null ||\n          _definition$name === void 0\n            ? void 0\n            : _definition$name.value) === operationName\n        ) {\n          operation = definition;\n        }\n\n        break;\n\n      case Kind.FRAGMENT_DEFINITION:\n        fragments[definition.name.value] = definition;\n        break;\n\n      default: // ignore non-executable definitions\n    }\n  }\n\n  if (!operation) {\n    if (operationName != null) {\n      return [new GraphQLError(`Unknown operation named \"${operationName}\".`)];\n    }\n\n    return [new GraphQLError('Must provide an operation.')];\n  } // FIXME: https://github.com/graphql/graphql-js/issues/2203\n\n  /* c8 ignore next */\n\n  const variableDefinitions =\n    (_operation$variableDe = operation.variableDefinitions) !== null &&\n    _operation$variableDe !== void 0\n      ? _operation$variableDe\n      : [];\n  const coercedVariableValues = getVariableValues(\n    schema,\n    variableDefinitions,\n    rawVariableValues !== null && rawVariableValues !== void 0\n      ? rawVariableValues\n      : {},\n    {\n      maxErrors: 50,\n    },\n  );\n\n  if (coercedVariableValues.errors) {\n    return coercedVariableValues.errors;\n  }\n\n  return {\n    schema,\n    fragments,\n    rootValue,\n    contextValue,\n    operation,\n    variableValues: coercedVariableValues.coerced,\n    fieldResolver:\n      fieldResolver !== null && fieldResolver !== void 0\n        ? fieldResolver\n        : defaultFieldResolver,\n    typeResolver:\n      typeResolver !== null && typeResolver !== void 0\n        ? typeResolver\n        : defaultTypeResolver,\n    subscribeFieldResolver:\n      subscribeFieldResolver !== null && subscribeFieldResolver !== void 0\n        ? subscribeFieldResolver\n        : defaultFieldResolver,\n    errors: [],\n  };\n}\n/**\n * Implements the \"Executing operations\" section of the spec.\n */\n\nfunction executeOperation(exeContext, operation, rootValue) {\n  const rootType = exeContext.schema.getRootType(operation.operation);\n\n  if (rootType == null) {\n    throw new GraphQLError(\n      `Schema is not configured to execute ${operation.operation} operation.`,\n      {\n        nodes: operation,\n      },\n    );\n  }\n\n  const rootFields = collectFields(\n    exeContext.schema,\n    exeContext.fragments,\n    exeContext.variableValues,\n    rootType,\n    operation.selectionSet,\n  );\n  const path = undefined;\n\n  switch (operation.operation) {\n    case OperationTypeNode.QUERY:\n      return executeFields(exeContext, rootType, rootValue, path, rootFields);\n\n    case OperationTypeNode.MUTATION:\n      return executeFieldsSerially(\n        exeContext,\n        rootType,\n        rootValue,\n        path,\n        rootFields,\n      );\n\n    case OperationTypeNode.SUBSCRIPTION:\n      // TODO: deprecate `subscribe` and move all logic here\n      // Temporary solution until we finish merging execute and subscribe together\n      return executeFields(exeContext, rootType, rootValue, path, rootFields);\n  }\n}\n/**\n * Implements the \"Executing selection sets\" section of the spec\n * for fields that must be executed serially.\n */\n\nfunction executeFieldsSerially(\n  exeContext,\n  parentType,\n  sourceValue,\n  path,\n  fields,\n) {\n  return promiseReduce(\n    fields.entries(),\n    (results, [responseName, fieldNodes]) => {\n      const fieldPath = addPath(path, responseName, parentType.name);\n      const result = executeField(\n        exeContext,\n        parentType,\n        sourceValue,\n        fieldNodes,\n        fieldPath,\n      );\n\n      if (result === undefined) {\n        return results;\n      }\n\n      if (isPromise(result)) {\n        return result.then((resolvedResult) => {\n          results[responseName] = resolvedResult;\n          return results;\n        });\n      }\n\n      results[responseName] = result;\n      return results;\n    },\n    Object.create(null),\n  );\n}\n/**\n * Implements the \"Executing selection sets\" section of the spec\n * for fields that may be executed in parallel.\n */\n\nfunction executeFields(exeContext, parentType, sourceValue, path, fields) {\n  const results = Object.create(null);\n  let containsPromise = false;\n\n  for (const [responseName, fieldNodes] of fields.entries()) {\n    const fieldPath = addPath(path, responseName, parentType.name);\n    const result = executeField(\n      exeContext,\n      parentType,\n      sourceValue,\n      fieldNodes,\n      fieldPath,\n    );\n\n    if (result !== undefined) {\n      results[responseName] = result;\n\n      if (isPromise(result)) {\n        containsPromise = true;\n      }\n    }\n  } // If there are no promises, we can just return the object\n\n  if (!containsPromise) {\n    return results;\n  } // Otherwise, results is a map from field name to the result of resolving that\n  // field, which is possibly a promise. Return a promise that will return this\n  // same map, but with any promises replaced with the values they resolved to.\n\n  return promiseForObject(results);\n}\n/**\n * Implements the \"Executing fields\" section of the spec\n * In particular, this function figures out the value that the field returns by\n * calling its resolve function, then calls completeValue to complete promises,\n * serialize scalars, or execute the sub-selection-set for objects.\n */\n\nfunction executeField(exeContext, parentType, source, fieldNodes, path) {\n  var _fieldDef$resolve;\n\n  const fieldDef = getFieldDef(exeContext.schema, parentType, fieldNodes[0]);\n\n  if (!fieldDef) {\n    return;\n  }\n\n  const returnType = fieldDef.type;\n  const resolveFn =\n    (_fieldDef$resolve = fieldDef.resolve) !== null &&\n    _fieldDef$resolve !== void 0\n      ? _fieldDef$resolve\n      : exeContext.fieldResolver;\n  const info = buildResolveInfo(\n    exeContext,\n    fieldDef,\n    fieldNodes,\n    parentType,\n    path,\n  ); // Get the resolve function, regardless of if its result is normal or abrupt (error).\n\n  try {\n    // Build a JS object of arguments from the field.arguments AST, using the\n    // variables scope to fulfill any variable references.\n    // TODO: find a way to memoize, in case this field is within a List type.\n    const args = getArgumentValues(\n      fieldDef,\n      fieldNodes[0],\n      exeContext.variableValues,\n    ); // The resolve function's optional third argument is a context value that\n    // is provided to every resolve function within an execution. It is commonly\n    // used to represent an authenticated user, or request-specific caches.\n\n    const contextValue = exeContext.contextValue;\n    const result = resolveFn(source, args, contextValue, info);\n    let completed;\n\n    if (isPromise(result)) {\n      completed = result.then((resolved) =>\n        completeValue(exeContext, returnType, fieldNodes, info, path, resolved),\n      );\n    } else {\n      completed = completeValue(\n        exeContext,\n        returnType,\n        fieldNodes,\n        info,\n        path,\n        result,\n      );\n    }\n\n    if (isPromise(completed)) {\n      // Note: we don't rely on a `catch` method, but we do expect \"thenable\"\n      // to take a second callback for the error case.\n      return completed.then(undefined, (rawError) => {\n        const error = locatedError(rawError, fieldNodes, pathToArray(path));\n        return handleFieldError(error, returnType, exeContext);\n      });\n    }\n\n    return completed;\n  } catch (rawError) {\n    const error = locatedError(rawError, fieldNodes, pathToArray(path));\n    return handleFieldError(error, returnType, exeContext);\n  }\n}\n/**\n * @internal\n */\n\nexport function buildResolveInfo(\n  exeContext,\n  fieldDef,\n  fieldNodes,\n  parentType,\n  path,\n) {\n  // The resolve function's optional fourth argument is a collection of\n  // information about the current execution state.\n  return {\n    fieldName: fieldDef.name,\n    fieldNodes,\n    returnType: fieldDef.type,\n    parentType,\n    path,\n    schema: exeContext.schema,\n    fragments: exeContext.fragments,\n    rootValue: exeContext.rootValue,\n    operation: exeContext.operation,\n    variableValues: exeContext.variableValues,\n  };\n}\n\nfunction handleFieldError(error, returnType, exeContext) {\n  // If the field type is non-nullable, then it is resolved without any\n  // protection from errors, however it still properly locates the error.\n  if (isNonNullType(returnType)) {\n    throw error;\n  } // Otherwise, error protection is applied, logging the error and resolving\n  // a null value for this field if one is encountered.\n\n  exeContext.errors.push(error);\n  return null;\n}\n/**\n * Implements the instructions for completeValue as defined in the\n * \"Value Completion\" section of the spec.\n *\n * If the field type is Non-Null, then this recursively completes the value\n * for the inner type. It throws a field error if that completion returns null,\n * as per the \"Nullability\" section of the spec.\n *\n * If the field type is a List, then this recursively completes the value\n * for the inner type on each item in the list.\n *\n * If the field type is a Scalar or Enum, ensures the completed value is a legal\n * value of the type by calling the `serialize` method of GraphQL type\n * definition.\n *\n * If the field is an abstract type, determine the runtime type of the value\n * and then complete based on that type\n *\n * Otherwise, the field type expects a sub-selection set, and will complete the\n * value by executing all sub-selections.\n */\n\nfunction completeValue(exeContext, returnType, fieldNodes, info, path, result) {\n  // If result is an Error, throw a located error.\n  if (result instanceof Error) {\n    throw result;\n  } // If field type is NonNull, complete for inner type, and throw field error\n  // if result is null.\n\n  if (isNonNullType(returnType)) {\n    const completed = completeValue(\n      exeContext,\n      returnType.ofType,\n      fieldNodes,\n      info,\n      path,\n      result,\n    );\n\n    if (completed === null) {\n      throw new Error(\n        `Cannot return null for non-nullable field ${info.parentType.name}.${info.fieldName}.`,\n      );\n    }\n\n    return completed;\n  } // If result value is null or undefined then return null.\n\n  if (result == null) {\n    return null;\n  } // If field type is List, complete each item in the list with the inner type\n\n  if (isListType(returnType)) {\n    return completeListValue(\n      exeContext,\n      returnType,\n      fieldNodes,\n      info,\n      path,\n      result,\n    );\n  } // If field type is a leaf type, Scalar or Enum, serialize to a valid value,\n  // returning null if serialization is not possible.\n\n  if (isLeafType(returnType)) {\n    return completeLeafValue(returnType, result);\n  } // If field type is an abstract type, Interface or Union, determine the\n  // runtime Object type and complete for that type.\n\n  if (isAbstractType(returnType)) {\n    return completeAbstractValue(\n      exeContext,\n      returnType,\n      fieldNodes,\n      info,\n      path,\n      result,\n    );\n  } // If field type is Object, execute and complete all sub-selections.\n\n  if (isObjectType(returnType)) {\n    return completeObjectValue(\n      exeContext,\n      returnType,\n      fieldNodes,\n      info,\n      path,\n      result,\n    );\n  }\n  /* c8 ignore next 6 */\n  // Not reachable, all possible output types have been considered.\n\n  false ||\n    invariant(\n      false,\n      'Cannot complete value of unexpected output type: ' + inspect(returnType),\n    );\n}\n/**\n * Complete a list value by completing each item in the list with the\n * inner type\n */\n\nfunction completeListValue(\n  exeContext,\n  returnType,\n  fieldNodes,\n  info,\n  path,\n  result,\n) {\n  if (!isIterableObject(result)) {\n    throw new GraphQLError(\n      `Expected Iterable, but did not find one for field \"${info.parentType.name}.${info.fieldName}\".`,\n    );\n  } // This is specified as a simple map, however we're optimizing the path\n  // where the list contains no Promises by avoiding creating another Promise.\n\n  const itemType = returnType.ofType;\n  let containsPromise = false;\n  const completedResults = Array.from(result, (item, index) => {\n    // No need to modify the info object containing the path,\n    // since from here on it is not ever accessed by resolver functions.\n    const itemPath = addPath(path, index, undefined);\n\n    try {\n      let completedItem;\n\n      if (isPromise(item)) {\n        completedItem = item.then((resolved) =>\n          completeValue(\n            exeContext,\n            itemType,\n            fieldNodes,\n            info,\n            itemPath,\n            resolved,\n          ),\n        );\n      } else {\n        completedItem = completeValue(\n          exeContext,\n          itemType,\n          fieldNodes,\n          info,\n          itemPath,\n          item,\n        );\n      }\n\n      if (isPromise(completedItem)) {\n        containsPromise = true; // Note: we don't rely on a `catch` method, but we do expect \"thenable\"\n        // to take a second callback for the error case.\n\n        return completedItem.then(undefined, (rawError) => {\n          const error = locatedError(\n            rawError,\n            fieldNodes,\n            pathToArray(itemPath),\n          );\n          return handleFieldError(error, itemType, exeContext);\n        });\n      }\n\n      return completedItem;\n    } catch (rawError) {\n      const error = locatedError(rawError, fieldNodes, pathToArray(itemPath));\n      return handleFieldError(error, itemType, exeContext);\n    }\n  });\n  return containsPromise ? Promise.all(completedResults) : completedResults;\n}\n/**\n * Complete a Scalar or Enum by serializing to a valid value, returning\n * null if serialization is not possible.\n */\n\nfunction completeLeafValue(returnType, result) {\n  const serializedResult = returnType.serialize(result);\n\n  if (serializedResult == null) {\n    throw new Error(\n      `Expected \\`${inspect(returnType)}.serialize(${inspect(result)})\\` to ` +\n        `return non-nullable value, returned: ${inspect(serializedResult)}`,\n    );\n  }\n\n  return serializedResult;\n}\n/**\n * Complete a value of an abstract type by determining the runtime object type\n * of that value, then complete the value for that type.\n */\n\nfunction completeAbstractValue(\n  exeContext,\n  returnType,\n  fieldNodes,\n  info,\n  path,\n  result,\n) {\n  var _returnType$resolveTy;\n\n  const resolveTypeFn =\n    (_returnType$resolveTy = returnType.resolveType) !== null &&\n    _returnType$resolveTy !== void 0\n      ? _returnType$resolveTy\n      : exeContext.typeResolver;\n  const contextValue = exeContext.contextValue;\n  const runtimeType = resolveTypeFn(result, contextValue, info, returnType);\n\n  if (isPromise(runtimeType)) {\n    return runtimeType.then((resolvedRuntimeType) =>\n      completeObjectValue(\n        exeContext,\n        ensureValidRuntimeType(\n          resolvedRuntimeType,\n          exeContext,\n          returnType,\n          fieldNodes,\n          info,\n          result,\n        ),\n        fieldNodes,\n        info,\n        path,\n        result,\n      ),\n    );\n  }\n\n  return completeObjectValue(\n    exeContext,\n    ensureValidRuntimeType(\n      runtimeType,\n      exeContext,\n      returnType,\n      fieldNodes,\n      info,\n      result,\n    ),\n    fieldNodes,\n    info,\n    path,\n    result,\n  );\n}\n\nfunction ensureValidRuntimeType(\n  runtimeTypeName,\n  exeContext,\n  returnType,\n  fieldNodes,\n  info,\n  result,\n) {\n  if (runtimeTypeName == null) {\n    throw new GraphQLError(\n      `Abstract type \"${returnType.name}\" must resolve to an Object type at runtime for field \"${info.parentType.name}.${info.fieldName}\". Either the \"${returnType.name}\" type should provide a \"resolveType\" function or each possible type should provide an \"isTypeOf\" function.`,\n      fieldNodes,\n    );\n  } // releases before 16.0.0 supported returning `GraphQLObjectType` from `resolveType`\n  // TODO: remove in 17.0.0 release\n\n  if (isObjectType(runtimeTypeName)) {\n    throw new GraphQLError(\n      'Support for returning GraphQLObjectType from resolveType was removed in graphql-js@16.0.0 please return type name instead.',\n    );\n  }\n\n  if (typeof runtimeTypeName !== 'string') {\n    throw new GraphQLError(\n      `Abstract type \"${returnType.name}\" must resolve to an Object type at runtime for field \"${info.parentType.name}.${info.fieldName}\" with ` +\n        `value ${inspect(result)}, received \"${inspect(runtimeTypeName)}\".`,\n    );\n  }\n\n  const runtimeType = exeContext.schema.getType(runtimeTypeName);\n\n  if (runtimeType == null) {\n    throw new GraphQLError(\n      `Abstract type \"${returnType.name}\" was resolved to a type \"${runtimeTypeName}\" that does not exist inside the schema.`,\n      {\n        nodes: fieldNodes,\n      },\n    );\n  }\n\n  if (!isObjectType(runtimeType)) {\n    throw new GraphQLError(\n      `Abstract type \"${returnType.name}\" was resolved to a non-object type \"${runtimeTypeName}\".`,\n      {\n        nodes: fieldNodes,\n      },\n    );\n  }\n\n  if (!exeContext.schema.isSubType(returnType, runtimeType)) {\n    throw new GraphQLError(\n      `Runtime Object type \"${runtimeType.name}\" is not a possible type for \"${returnType.name}\".`,\n      {\n        nodes: fieldNodes,\n      },\n    );\n  }\n\n  return runtimeType;\n}\n/**\n * Complete an Object value by executing all sub-selections.\n */\n\nfunction completeObjectValue(\n  exeContext,\n  returnType,\n  fieldNodes,\n  info,\n  path,\n  result,\n) {\n  // Collect sub-fields to execute to complete this value.\n  const subFieldNodes = collectSubfields(exeContext, returnType, fieldNodes); // If there is an isTypeOf predicate function, call it with the\n  // current result. If isTypeOf returns false, then raise an error rather\n  // than continuing execution.\n\n  if (returnType.isTypeOf) {\n    const isTypeOf = returnType.isTypeOf(result, exeContext.contextValue, info);\n\n    if (isPromise(isTypeOf)) {\n      return isTypeOf.then((resolvedIsTypeOf) => {\n        if (!resolvedIsTypeOf) {\n          throw invalidReturnTypeError(returnType, result, fieldNodes);\n        }\n\n        return executeFields(\n          exeContext,\n          returnType,\n          result,\n          path,\n          subFieldNodes,\n        );\n      });\n    }\n\n    if (!isTypeOf) {\n      throw invalidReturnTypeError(returnType, result, fieldNodes);\n    }\n  }\n\n  return executeFields(exeContext, returnType, result, path, subFieldNodes);\n}\n\nfunction invalidReturnTypeError(returnType, result, fieldNodes) {\n  return new GraphQLError(\n    `Expected value of type \"${returnType.name}\" but got: ${inspect(result)}.`,\n    {\n      nodes: fieldNodes,\n    },\n  );\n}\n/**\n * If a resolveType function is not given, then a default resolve behavior is\n * used which attempts two strategies:\n *\n * First, See if the provided value has a `__typename` field defined, if so, use\n * that value as name of the resolved type.\n *\n * Otherwise, test each possible type for the abstract type by calling\n * isTypeOf for the object being coerced, returning the first type that matches.\n */\n\nexport const defaultTypeResolver = function (\n  value,\n  contextValue,\n  info,\n  abstractType,\n) {\n  // First, look for `__typename`.\n  if (isObjectLike(value) && typeof value.__typename === 'string') {\n    return value.__typename;\n  } // Otherwise, test each possible type.\n\n  const possibleTypes = info.schema.getPossibleTypes(abstractType);\n  const promisedIsTypeOfResults = [];\n\n  for (let i = 0; i < possibleTypes.length; i++) {\n    const type = possibleTypes[i];\n\n    if (type.isTypeOf) {\n      const isTypeOfResult = type.isTypeOf(value, contextValue, info);\n\n      if (isPromise(isTypeOfResult)) {\n        promisedIsTypeOfResults[i] = isTypeOfResult;\n      } else if (isTypeOfResult) {\n        return type.name;\n      }\n    }\n  }\n\n  if (promisedIsTypeOfResults.length) {\n    return Promise.all(promisedIsTypeOfResults).then((isTypeOfResults) => {\n      for (let i = 0; i < isTypeOfResults.length; i++) {\n        if (isTypeOfResults[i]) {\n          return possibleTypes[i].name;\n        }\n      }\n    });\n  }\n};\n/**\n * If a resolve function is not given, then a default resolve behavior is used\n * which takes the property of the source object of the same name as the field\n * and returns it as the result, or if it's a function, returns the result\n * of calling that function while passing along args and context value.\n */\n\nexport const defaultFieldResolver = function (\n  source,\n  args,\n  contextValue,\n  info,\n) {\n  // ensure source is a value for which property access is acceptable.\n  if (isObjectLike(source) || typeof source === 'function') {\n    const property = source[info.fieldName];\n\n    if (typeof property === 'function') {\n      return source[info.fieldName](args, contextValue, info);\n    }\n\n    return property;\n  }\n};\n/**\n * This method looks up the field on the given type definition.\n * It has special casing for the three introspection fields,\n * __schema, __type and __typename. __typename is special because\n * it can always be queried as a field, even in situations where no\n * other fields are allowed, like on a Union. __schema and __type\n * could get automatically added to the query type, but that would\n * require mutating type definitions, which would cause issues.\n *\n * @internal\n */\n\nexport function getFieldDef(schema, parentType, fieldNode) {\n  const fieldName = fieldNode.name.value;\n\n  if (\n    fieldName === SchemaMetaFieldDef.name &&\n    schema.getQueryType() === parentType\n  ) {\n    return SchemaMetaFieldDef;\n  } else if (\n    fieldName === TypeMetaFieldDef.name &&\n    schema.getQueryType() === parentType\n  ) {\n    return TypeMetaFieldDef;\n  } else if (fieldName === TypeNameMetaFieldDef.name) {\n    return TypeNameMetaFieldDef;\n  }\n\n  return parentType.getFields()[fieldName];\n}\n/utilities/printSchema.mjs\u001d(import { inspect } from '../jsutils/inspect.mjs';\nimport { invariant } from '../jsutils/invariant.mjs';\nimport { isPrintableAsBlockString } from '../language/blockString.mjs';\nimport { Kind } from '../language/kinds.mjs';\nimport { print } from '../language/printer.mjs';\nimport {\n  isEnumType,\n  isInputObjectType,\n  isInterfaceType,\n  isObjectType,\n  isScalarType,\n  isUnionType,\n} from '../type/definition.mjs';\nimport {\n  DEFAULT_DEPRECATION_REASON,\n  isSpecifiedDirective,\n} from '../type/directives.mjs';\nimport { isIntrospectionType } from '../type/introspection.mjs';\nimport { isSpecifiedScalarType } from '../type/scalars.mjs';\nimport { astFromValue } from './astFromValue.mjs';\nexport function printSchema(schema) {\n  return printFilteredSchema(\n    schema,\n    (n) => !isSpecifiedDirective(n),\n    isDefinedType,\n  );\n}\nexport function printIntrospectionSchema(schema) {\n  return printFilteredSchema(schema, isSpecifiedDirective, isIntrospectionType);\n}\n\nfunction isDefinedType(type) {\n  return !isSpecifiedScalarType(type) && !isIntrospectionType(type);\n}\n\nfunction printFilteredSchema(schema, directiveFilter, typeFilter) {\n  const directives = schema.getDirectives().filter(directiveFilter);\n  const types = Object.values(schema.getTypeMap()).filter(typeFilter);\n  return [\n    printSchemaDefinition(schema),\n    ...directives.map((directive) => printDirective(directive)),\n    ...types.map((type) => printType(type)),\n  ]\n    .filter(Boolean)\n    .join('\\n\\n');\n}\n\nfunction printSchemaDefinition(schema) {\n  if (schema.description == null && isSchemaOfCommonNames(schema)) {\n    return;\n  }\n\n  const operationTypes = [];\n  const queryType = schema.getQueryType();\n\n  if (queryType) {\n    operationTypes.push(`  query: ${queryType.name}`);\n  }\n\n  const mutationType = schema.getMutationType();\n\n  if (mutationType) {\n    operationTypes.push(`  mutation: ${mutationType.name}`);\n  }\n\n  const subscriptionType = schema.getSubscriptionType();\n\n  if (subscriptionType) {\n    operationTypes.push(`  subscription: ${subscriptionType.name}`);\n  }\n\n  return printDescription(schema) + `schema {\\n${operationTypes.join('\\n')}\\n}`;\n}\n/**\n * GraphQL schema define root types for each type of operation. These types are\n * the same as any other type and can be named in any manner, however there is\n * a common naming convention:\n *\n * ```graphql\n *   schema {\n *     query: Query\n *     mutation: Mutation\n *     subscription: Subscription\n *   }\n * ```\n *\n * When using this naming convention, the schema description can be omitted.\n */\n\nfunction isSchemaOfCommonNames(schema) {\n  const queryType = schema.getQueryType();\n\n  if (queryType && queryType.name !== 'Query') {\n    return false;\n  }\n\n  const mutationType = schema.getMutationType();\n\n  if (mutationType && mutationType.name !== 'Mutation') {\n    return false;\n  }\n\n  const subscriptionType = schema.getSubscriptionType();\n\n  if (subscriptionType && subscriptionType.name !== 'Subscription') {\n    return false;\n  }\n\n  return true;\n}\n\nexport function printType(type) {\n  if (isScalarType(type)) {\n    return printScalar(type);\n  }\n\n  if (isObjectType(type)) {\n    return printObject(type);\n  }\n\n  if (isInterfaceType(type)) {\n    return printInterface(type);\n  }\n\n  if (isUnionType(type)) {\n    return printUnion(type);\n  }\n\n  if (isEnumType(type)) {\n    return printEnum(type);\n  }\n\n  if (isInputObjectType(type)) {\n    return printInputObject(type);\n  }\n  /* c8 ignore next 3 */\n  // Not reachable, all possible types have been considered.\n\n  false || invariant(false, 'Unexpected type: ' + inspect(type));\n}\n\nfunction printScalar(type) {\n  return (\n    printDescription(type) + `scalar ${type.name}` + printSpecifiedByURL(type)\n  );\n}\n\nfunction printImplementedInterfaces(type) {\n  const interfaces = type.getInterfaces();\n  return interfaces.length\n    ? ' implements ' + interfaces.map((i) => i.name).join(' & ')\n    : '';\n}\n\nfunction printObject(type) {\n  return (\n    printDescription(type) +\n    `type ${type.name}` +\n    printImplementedInterfaces(type) +\n    printFields(type)\n  );\n}\n\nfunction printInterface(type) {\n  return (\n    printDescription(type) +\n    `interface ${type.name}` +\n    printImplementedInterfaces(type) +\n    printFields(type)\n  );\n}\n\nfunction printUnion(type) {\n  const types = type.getTypes();\n  const possibleTypes = types.length ? ' = ' + types.join(' | ') : '';\n  return printDescription(type) + 'union ' + type.name + possibleTypes;\n}\n\nfunction printEnum(type) {\n  const values = type\n    .getValues()\n    .map(\n      (value, i) =>\n        printDescription(value, '  ', !i) +\n        '  ' +\n        value.name +\n        printDeprecated(value.deprecationReason),\n    );\n  return printDescription(type) + `enum ${type.name}` + printBlock(values);\n}\n\nfunction printInputObject(type) {\n  const fields = Object.values(type.getFields()).map(\n    (f, i) => printDescription(f, '  ', !i) + '  ' + printInputValue(f),\n  );\n  return printDescription(type) + `input ${type.name}` + printBlock(fields);\n}\n\nfunction printFields(type) {\n  const fields = Object.values(type.getFields()).map(\n    (f, i) =>\n      printDescription(f, '  ', !i) +\n      '  ' +\n      f.name +\n      printArgs(f.args, '  ') +\n      ': ' +\n      String(f.type) +\n      printDeprecated(f.deprecationReason),\n  );\n  return printBlock(fields);\n}\n\nfunction printBlock(items) {\n  return items.length !== 0 ? ' {\\n' + items.join('\\n') + '\\n}' : '';\n}\n\nfunction printArgs(args, indentation = '') {\n  if (args.length === 0) {\n    return '';\n  } // If every arg does not have a description, print them on one line.\n\n  if (args.every((arg) => !arg.description)) {\n    return '(' + args.map(printInputValue).join(', ') + ')';\n  }\n\n  return (\n    '(\\n' +\n    args\n      .map(\n        (arg, i) =>\n          printDescription(arg, '  ' + indentation, !i) +\n          '  ' +\n          indentation +\n          printInputValue(arg),\n      )\n      .join('\\n') +\n    '\\n' +\n    indentation +\n    ')'\n  );\n}\n\nfunction printInputValue(arg) {\n  const defaultAST = astFromValue(arg.defaultValue, arg.type);\n  let argDecl = arg.name + ': ' + String(arg.type);\n\n  if (defaultAST) {\n    argDecl += ` = ${print(defaultAST)}`;\n  }\n\n  return argDecl + printDeprecated(arg.deprecationReason);\n}\n\nfunction printDirective(directive) {\n  return (\n    printDescription(directive) +\n    'directive @' +\n    directive.name +\n    printArgs(directive.args) +\n    (directive.isRepeatable ? ' repeatable' : '') +\n    ' on ' +\n    directive.locations.join(' | ')\n  );\n}\n\nfunction printDeprecated(reason) {\n  if (reason == null) {\n    return '';\n  }\n\n  if (reason !== DEFAULT_DEPRECATION_REASON) {\n    const astValue = print({\n      kind: Kind.STRING,\n      value: reason,\n    });\n    return ` @deprecated(reason: ${astValue})`;\n  }\n\n  return ' @deprecated';\n}\n\nfunction printSpecifiedByURL(scalar) {\n  if (scalar.specifiedByURL == null) {\n    return '';\n  }\n\n  const astValue = print({\n    kind: Kind.STRING,\n    value: scalar.specifiedByURL,\n  });\n  return ` @specifiedBy(url: ${astValue})`;\n}\n\nfunction printDescription(def, indentation = '', firstInBlock = true) {\n  const { description } = def;\n\n  if (description == null) {\n    return '';\n  }\n\n  const blockString = print({\n    kind: Kind.STRING,\n    value: description,\n    block: isPrintableAsBlockString(description),\n  });\n  const prefix =\n    indentation && !firstInBlock ? '\\n' + indentation : indentation;\n  return prefix + blockString.replace(/\\n/g, '\\n' + indentation) + '\\n';\n}\n/utilities/coerceInputValue.js\u0014'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.coerceInputValue = coerceInputValue;\n\nvar _didYouMean = require('../jsutils/didYouMean.js');\n\nvar _inspect = require('../jsutils/inspect.js');\n\nvar _invariant = require('../jsutils/invariant.js');\n\nvar _isIterableObject = require('../jsutils/isIterableObject.js');\n\nvar _isObjectLike = require('../jsutils/isObjectLike.js');\n\nvar _Path = require('../jsutils/Path.js');\n\nvar _printPathArray = require('../jsutils/printPathArray.js');\n\nvar _suggestionList = require('../jsutils/suggestionList.js');\n\nvar _GraphQLError = require('../error/GraphQLError.js');\n\nvar _definition = require('../type/definition.js');\n\n/**\n * Coerces a JavaScript value given a GraphQL Input Type.\n */\nfunction coerceInputValue(inputValue, type, onError = defaultOnError) {\n  return coerceInputValueImpl(inputValue, type, onError, undefined);\n}\n\nfunction defaultOnError(path, invalidValue, error) {\n  let errorPrefix = 'Invalid value ' + (0, _inspect.inspect)(invalidValue);\n\n  if (path.length > 0) {\n    errorPrefix += ` at \"value${(0, _printPathArray.printPathArray)(path)}\"`;\n  }\n\n  error.message = errorPrefix + ': ' + error.message;\n  throw error;\n}\n\nfunction coerceInputValueImpl(inputValue, type, onError, path) {\n  if ((0, _definition.isNonNullType)(type)) {\n    if (inputValue != null) {\n      return coerceInputValueImpl(inputValue, type.ofType, onError, path);\n    }\n\n    onError(\n      (0, _Path.pathToArray)(path),\n      inputValue,\n      new _GraphQLError.GraphQLError(\n        `Expected non-nullable type \"${(0, _inspect.inspect)(\n          type,\n        )}\" not to be null.`,\n      ),\n    );\n    return;\n  }\n\n  if (inputValue == null) {\n    // Explicitly return the value null.\n    return null;\n  }\n\n  if ((0, _definition.isListType)(type)) {\n    const itemType = type.ofType;\n\n    if ((0, _isIterableObject.isIterableObject)(inputValue)) {\n      return Array.from(inputValue, (itemValue, index) => {\n        const itemPath = (0, _Path.addPath)(path, index, undefined);\n        return coerceInputValueImpl(itemValue, itemType, onError, itemPath);\n      });\n    } // Lists accept a non-list value as a list of one.\n\n    return [coerceInputValueImpl(inputValue, itemType, onError, path)];\n  }\n\n  if ((0, _definition.isInputObjectType)(type)) {\n    if (!(0, _isObjectLike.isObjectLike)(inputValue)) {\n      onError(\n        (0, _Path.pathToArray)(path),\n        inputValue,\n        new _GraphQLError.GraphQLError(\n          `Expected type \"${type.name}\" to be an object.`,\n        ),\n      );\n      return;\n    }\n\n    const coercedValue = {};\n    const fieldDefs = type.getFields();\n\n    for (const field of Object.values(fieldDefs)) {\n      const fieldValue = inputValue[field.name];\n\n      if (fieldValue === undefined) {\n        if (field.defaultValue !== undefined) {\n          coercedValue[field.name] = field.defaultValue;\n        } else if ((0, _definition.isNonNullType)(field.type)) {\n          const typeStr = (0, _inspect.inspect)(field.type);\n          onError(\n            (0, _Path.pathToArray)(path),\n            inputValue,\n            new _GraphQLError.GraphQLError(\n              `Field \"${field.name}\" of required type \"${typeStr}\" was not provided.`,\n            ),\n          );\n        }\n\n        continue;\n      }\n\n      coercedValue[field.name] = coerceInputValueImpl(\n        fieldValue,\n        field.type,\n        onError,\n        (0, _Path.addPath)(path, field.name, type.name),\n      );\n    } // Ensure every provided field is defined.\n\n    for (const fieldName of Object.keys(inputValue)) {\n      if (!fieldDefs[fieldName]) {\n        const suggestions = (0, _suggestionList.suggestionList)(\n          fieldName,\n          Object.keys(type.getFields()),\n        );\n        onError(\n          (0, _Path.pathToArray)(path),\n          inputValue,\n          new _GraphQLError.GraphQLError(\n            `Field \"${fieldName}\" is not defined by type \"${type.name}\".` +\n              (0, _didYouMean.didYouMean)(suggestions),\n          ),\n        );\n      }\n    }\n\n    return coercedValue;\n  }\n\n  if ((0, _definition.isLeafType)(type)) {\n    let parseResult; // Scalars and Enums determine if a input value is valid via parseValue(),\n    // which can throw to indicate failure. If it throws, maintain a reference\n    // to the original error.\n\n    try {\n      parseResult = type.parseValue(inputValue);\n    } catch (error) {\n      if (error instanceof _GraphQLError.GraphQLError) {\n        onError((0, _Path.pathToArray)(path), inputValue, error);\n      } else {\n        onError(\n          (0, _Path.pathToArray)(path),\n          inputValue,\n          new _GraphQLError.GraphQLError(\n            `Expected type \"${type.name}\". ` + error.message,\n            {\n              originalError: error,\n            },\n          ),\n        );\n      }\n\n      return;\n    }\n\n    if (parseResult === undefined) {\n      onError(\n        (0, _Path.pathToArray)(path),\n        inputValue,\n        new _GraphQLError.GraphQLError(`Expected type \"${type.name}\".`),\n      );\n    }\n\n    return parseResult;\n  }\n  /* c8 ignore next 3 */\n  // Not reachable, all possible types have been considered.\n\n  false ||\n    (0, _invariant.invariant)(\n      false,\n      'Unexpected input type: ' + (0, _inspect.inspect)(type),\n    );\n}\n/language/predicates.mjs\tBimport { Kind } from './kinds.mjs';\nexport function isDefinitionNode(node) {\n  return (\n    isExecutableDefinitionNode(node) ||\n    isTypeSystemDefinitionNode(node) ||\n    isTypeSystemExtensionNode(node)\n  );\n}\nexport function isExecutableDefinitionNode(node) {\n  return (\n    node.kind === Kind.OPERATION_DEFINITION ||\n    node.kind === Kind.FRAGMENT_DEFINITION\n  );\n}\nexport function isSelectionNode(node) {\n  return (\n    node.kind === Kind.FIELD ||\n    node.kind === Kind.FRAGMENT_SPREAD ||\n    node.kind === Kind.INLINE_FRAGMENT\n  );\n}\nexport function isValueNode(node) {\n  return (\n    node.kind === Kind.VARIABLE ||\n    node.kind === Kind.INT ||\n    node.kind === Kind.FLOAT ||\n    node.kind === Kind.STRING ||\n    node.kind === Kind.BOOLEAN ||\n    node.kind === Kind.NULL ||\n    node.kind === Kind.ENUM ||\n    node.kind === Kind.LIST ||\n    node.kind === Kind.OBJECT\n  );\n}\nexport function isConstValueNode(node) {\n  return (\n    isValueNode(node) &&\n    (node.kind === Kind.LIST\n      ? node.values.some(isConstValueNode)\n      : node.kind === Kind.OBJECT\n      ? node.fields.some((field) => isConstValueNode(field.value))\n      : node.kind !== Kind.VARIABLE)\n  );\n}\nexport function isTypeNode(node) {\n  return (\n    node.kind === Kind.NAMED_TYPE ||\n    node.kind === Kind.LIST_TYPE ||\n    node.kind === Kind.NON_NULL_TYPE\n  );\n}\nexport function isTypeSystemDefinitionNode(node) {\n  return (\n    node.kind === Kind.SCHEMA_DEFINITION ||\n    isTypeDefinitionNode(node) ||\n    node.kind === Kind.DIRECTIVE_DEFINITION\n  );\n}\nexport function isTypeDefinitionNode(node) {\n  return (\n    node.kind === Kind.SCALAR_TYPE_DEFINITION ||\n    node.kind === Kind.OBJECT_TYPE_DEFINITION ||\n    node.kind === Kind.INTERFACE_TYPE_DEFINITION ||\n    node.kind === Kind.UNION_TYPE_DEFINITION ||\n    node.kind === Kind.ENUM_TYPE_DEFINITION ||\n    node.kind === Kind.INPUT_OBJECT_TYPE_DEFINITION\n  );\n}\nexport function isTypeSystemExtensionNode(node) {\n  return node.kind === Kind.SCHEMA_EXTENSION || isTypeExtensionNode(node);\n}\nexport function isTypeExtensionNode(node) {\n  return (\n    node.kind === Kind.SCALAR_TYPE_EXTENSION ||\n    node.kind === Kind.OBJECT_TYPE_EXTENSION ||\n    node.kind === Kind.INTERFACE_TYPE_EXTENSION ||\n    node.kind === Kind.UNION_TYPE_EXTENSION ||\n    node.kind === Kind.ENUM_TYPE_EXTENSION ||\n    node.kind === Kind.INPUT_OBJECT_TYPE_EXTENSION\n  );\n}\n/jsutils/isObjectLike.mjs/**\n * Return true if `value` is object-like. A value is object-like if it's not\n * `null` and has a `typeof` result of \"object\".\n */\nexport function isObjectLike(value) {\n  return typeof value == 'object' && value !== null;\n}\n./validation/rules/LoneSchemaDefinitionRule.mjs\u0006\u001fimport { GraphQLError } from '../../error/GraphQLError.mjs';\n\n/**\n * Lone Schema definition\n *\n * A GraphQL document is only valid if it contains only one schema definition.\n */\nexport function LoneSchemaDefinitionRule(context) {\n  var _ref, _ref2, _oldSchema$astNode;\n\n  const oldSchema = context.getSchema();\n  const alreadyDefined =\n    (_ref =\n      (_ref2 =\n        (_oldSchema$astNode =\n          oldSchema === null || oldSchema === void 0\n            ? void 0\n            : oldSchema.astNode) !== null && _oldSchema$astNode !== void 0\n          ? _oldSchema$astNode\n          : oldSchema === null || oldSchema === void 0\n          ? void 0\n          : oldSchema.getQueryType()) !== null && _ref2 !== void 0\n        ? _ref2\n        : oldSchema === null || oldSchema === void 0\n        ? void 0\n        : oldSchema.getMutationType()) !== null && _ref !== void 0\n      ? _ref\n      : oldSchema === null || oldSchema === void 0\n      ? void 0\n      : oldSchema.getSubscriptionType();\n  let schemaDefinitionsCount = 0;\n  return {\n    SchemaDefinition(node) {\n      if (alreadyDefined) {\n        context.reportError(\n          new GraphQLError(\n            'Cannot define a new schema within a schema extension.',\n            {\n              nodes: node,\n            },\n          ),\n        );\n        return;\n      }\n\n      if (schemaDefinitionsCount > 0) {\n        context.reportError(\n          new GraphQLError('Must provide only one schema definition.', {\n            nodes: node,\n          }),\n        );\n      }\n\n      ++schemaDefinitionsCount;\n    },\n  };\n}\n(/validation/rules/UniqueTypeNamesRule.js\u0005'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.UniqueTypeNamesRule = UniqueTypeNamesRule;\n\nvar _GraphQLError = require('../../error/GraphQLError.js');\n\n/**\n * Unique type names\n *\n * A GraphQL document is only valid if all defined types have unique names.\n */\nfunction UniqueTypeNamesRule(context) {\n  const knownTypeNames = Object.create(null);\n  const schema = context.getSchema();\n  return {\n    ScalarTypeDefinition: checkTypeName,\n    ObjectTypeDefinition: checkTypeName,\n    InterfaceTypeDefinition: checkTypeName,\n    UnionTypeDefinition: checkTypeName,\n    EnumTypeDefinition: checkTypeName,\n    InputObjectTypeDefinition: checkTypeName,\n  };\n\n  function checkTypeName(node) {\n    const typeName = node.name.value;\n\n    if (schema !== null && schema !== void 0 && schema.getType(typeName)) {\n      context.reportError(\n        new _GraphQLError.GraphQLError(\n          `Type \"${typeName}\" already exists in the schema. It cannot also be defined in this type definition.`,\n          {\n            nodes: node.name,\n          },\n        ),\n      );\n      return;\n    }\n\n    if (knownTypeNames[typeName]) {\n      context.reportError(\n        new _GraphQLError.GraphQLError(\n          `There can be only one type named \"${typeName}\".`,\n          {\n            nodes: [knownTypeNames[typeName], node.name],\n          },\n        ),\n      );\n    } else {\n      knownTypeNames[typeName] = node.name;\n    }\n\n    return false;\n  }\n}\n/type/assertName.mjs\u0004import { devAssert } from '../jsutils/devAssert.mjs';\nimport { GraphQLError } from '../error/GraphQLError.mjs';\nimport { isNameContinue, isNameStart } from '../language/characterClasses.mjs';\n/**\n * Upholds the spec rules about naming.\n */\n\nexport function assertName(name) {\n  name != null || devAssert(false, 'Must provide name.');\n  typeof name === 'string' || devAssert(false, 'Expected name to be a string.');\n\n  if (name.length === 0) {\n    throw new GraphQLError('Expected name to be a non-empty string.');\n  }\n\n  for (let i = 1; i < name.length; ++i) {\n    if (!isNameContinue(name.charCodeAt(i))) {\n      throw new GraphQLError(\n        `Names must only contain [_a-zA-Z0-9] but \"${name}\" does not.`,\n      );\n    }\n  }\n\n  if (!isNameStart(name.charCodeAt(0))) {\n    throw new GraphQLError(\n      `Names must start with [_a-zA-Z] but \"${name}\" does not.`,\n    );\n  }\n\n  return name;\n}\n/**\n * Upholds the spec rules about naming enum values.\n *\n * @internal\n */\n\nexport function assertEnumValueName(name) {\n  if (name === 'true' || name === 'false' || name === 'null') {\n    throw new GraphQLError(`Enum values cannot be named: ${name}`);\n  }\n\n  return assertName(name);\n}\n'/validation/rules/KnownTypeNamesRule.js\t'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.KnownTypeNamesRule = KnownTypeNamesRule;\n\nvar _didYouMean = require('../../jsutils/didYouMean.js');\n\nvar _suggestionList = require('../../jsutils/suggestionList.js');\n\nvar _GraphQLError = require('../../error/GraphQLError.js');\n\nvar _predicates = require('../../language/predicates.js');\n\nvar _introspection = require('../../type/introspection.js');\n\nvar _scalars = require('../../type/scalars.js');\n\n/**\n * Known type names\n *\n * A GraphQL document is only valid if referenced types (specifically\n * variable definitions and fragment conditions) are defined by the type schema.\n *\n * See https://spec.graphql.org/draft/#sec-Fragment-Spread-Type-Existence\n */\nfunction KnownTypeNamesRule(context) {\n  const schema = context.getSchema();\n  const existingTypesMap = schema ? schema.getTypeMap() : Object.create(null);\n  const definedTypes = Object.create(null);\n\n  for (const def of context.getDocument().definitions) {\n    if ((0, _predicates.isTypeDefinitionNode)(def)) {\n      definedTypes[def.name.value] = true;\n    }\n  }\n\n  const typeNames = [\n    ...Object.keys(existingTypesMap),\n    ...Object.keys(definedTypes),\n  ];\n  return {\n    NamedType(node, _1, parent, _2, ancestors) {\n      const typeName = node.name.value;\n\n      if (!existingTypesMap[typeName] && !definedTypes[typeName]) {\n        var _ancestors$;\n\n        const definitionNode =\n          (_ancestors$ = ancestors[2]) !== null && _ancestors$ !== void 0\n            ? _ancestors$\n            : parent;\n        const isSDL = definitionNode != null && isSDLNode(definitionNode);\n\n        if (isSDL && standardTypeNames.includes(typeName)) {\n          return;\n        }\n\n        const suggestedTypes = (0, _suggestionList.suggestionList)(\n          typeName,\n          isSDL ? standardTypeNames.concat(typeNames) : typeNames,\n        );\n        context.reportError(\n          new _GraphQLError.GraphQLError(\n            `Unknown type \"${typeName}\".` +\n              (0, _didYouMean.didYouMean)(suggestedTypes),\n            {\n              nodes: node,\n            },\n          ),\n        );\n      }\n    },\n  };\n}\n\nconst standardTypeNames = [\n  ..._scalars.specifiedScalarTypes,\n  ..._introspection.introspectionTypes,\n].map((type) => type.name);\n\nfunction isSDLNode(value) {\n  return (\n    'kind' in value &&\n    ((0, _predicates.isTypeSystemDefinitionNode)(value) ||\n      (0, _predicates.isTypeSystemExtensionNode)(value))\n  );\n}\n/utilities/concatAST.d.ts\u0001~import type { DocumentNode } from '../language/ast';\n/**\n * Provided a collection of ASTs, presumably each from different files,\n * concatenate the ASTs together into batched AST, useful for validating many\n * GraphQL source files which together represent one conceptual application.\n */\nexport declare function concatAST(\n  documents: ReadonlyArray<DocumentNode>,\n): DocumentNode;\n/jsutils/toError.mjs\u0001import { inspect } from './inspect.mjs';\n/**\n * Sometimes a non-error is thrown, wrap it as an Error instance to ensure a consistent Error interface.\n */\n\nexport function toError(thrownValue) {\n  return thrownValue instanceof Error\n    ? thrownValue\n    : new NonErrorThrown(thrownValue);\n}\n\nclass NonErrorThrown extends Error {\n  constructor(thrownValue) {\n    super('Unexpected error value: ' + inspect(thrownValue));\n    this.name = 'NonErrorThrown';\n    this.thrownValue = thrownValue;\n  }\n}\n'/utilities/lexicographicSortSchema.d.tsimport { GraphQLSchema } from '../type/schema';\n/**\n * Sort GraphQLSchema.\n *\n * This function returns a sorted copy of the given GraphQLSchema.\n */\nexport declare function lexicographicSortSchema(\n  schema: GraphQLSchema,\n): GraphQLSchema;\n/type/validate.d.ts\u0002yimport { GraphQLError } from '../error/GraphQLError';\nimport type { GraphQLSchema } from './schema';\n/**\n * Implements the \"Type Validation\" sub-sections of the specification's\n * \"Type System\" section.\n *\n * Validation runs synchronously, returning an array of encountered errors, or\n * an empty array if no errors were encountered and the Schema is valid.\n */\nexport declare function validateSchema(\n  schema: GraphQLSchema,\n): ReadonlyArray<GraphQLError>;\n/**\n * Utility function which asserts a schema is valid by throwing an error if\n * it is invalid.\n */\nexport declare function assertValidSchema(schema: GraphQLSchema): void;\n6/validation/rules/UniqueArgumentDefinitionNamesRule.js\nB'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.UniqueArgumentDefinitionNamesRule = UniqueArgumentDefinitionNamesRule;\n\nvar _groupBy = require('../../jsutils/groupBy.js');\n\nvar _GraphQLError = require('../../error/GraphQLError.js');\n\n/**\n * Unique argument definition names\n *\n * A GraphQL Object or Interface type is only valid if all its fields have uniquely named arguments.\n * A GraphQL Directive is only valid if all its arguments are uniquely named.\n */\nfunction UniqueArgumentDefinitionNamesRule(context) {\n  return {\n    DirectiveDefinition(directiveNode) {\n      var _directiveNode$argume;\n\n      // FIXME: https://github.com/graphql/graphql-js/issues/2203\n\n      /* c8 ignore next */\n      const argumentNodes =\n        (_directiveNode$argume = directiveNode.arguments) !== null &&\n        _directiveNode$argume !== void 0\n          ? _directiveNode$argume\n          : [];\n      return checkArgUniqueness(`@${directiveNode.name.value}`, argumentNodes);\n    },\n\n    InterfaceTypeDefinition: checkArgUniquenessPerField,\n    InterfaceTypeExtension: checkArgUniquenessPerField,\n    ObjectTypeDefinition: checkArgUniquenessPerField,\n    ObjectTypeExtension: checkArgUniquenessPerField,\n  };\n\n  function checkArgUniquenessPerField(typeNode) {\n    var _typeNode$fields;\n\n    const typeName = typeNode.name.value; // FIXME: https://github.com/graphql/graphql-js/issues/2203\n\n    /* c8 ignore next */\n\n    const fieldNodes =\n      (_typeNode$fields = typeNode.fields) !== null &&\n      _typeNode$fields !== void 0\n        ? _typeNode$fields\n        : [];\n\n    for (const fieldDef of fieldNodes) {\n      var _fieldDef$arguments;\n\n      const fieldName = fieldDef.name.value; // FIXME: https://github.com/graphql/graphql-js/issues/2203\n\n      /* c8 ignore next */\n\n      const argumentNodes =\n        (_fieldDef$arguments = fieldDef.arguments) !== null &&\n        _fieldDef$arguments !== void 0\n          ? _fieldDef$arguments\n          : [];\n      checkArgUniqueness(`${typeName}.${fieldName}`, argumentNodes);\n    }\n\n    return false;\n  }\n\n  function checkArgUniqueness(parentName, argumentNodes) {\n    const seenArgs = (0, _groupBy.groupBy)(\n      argumentNodes,\n      (arg) => arg.name.value,\n    );\n\n    for (const [argName, argNodes] of seenArgs) {\n      if (argNodes.length > 1) {\n        context.reportError(\n          new _GraphQLError.GraphQLError(\n            `Argument \"${parentName}(${argName}:)\" can only be defined once.`,\n            {\n              nodes: argNodes.map((node) => node.name),\n            },\n          ),\n        );\n      }\n    }\n\n    return false;\n  }\n}\n/execution/subscribe.js!Q'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.createSourceEventStream = createSourceEventStream;\nexports.subscribe = subscribe;\n\nvar _devAssert = require('../jsutils/devAssert.js');\n\nvar _inspect = require('../jsutils/inspect.js');\n\nvar _isAsyncIterable = require('../jsutils/isAsyncIterable.js');\n\nvar _Path = require('../jsutils/Path.js');\n\nvar _GraphQLError = require('../error/GraphQLError.js');\n\nvar _locatedError = require('../error/locatedError.js');\n\nvar _collectFields = require('./collectFields.js');\n\nvar _execute = require('./execute.js');\n\nvar _mapAsyncIterator = require('./mapAsyncIterator.js');\n\nvar _values = require('./values.js');\n\n/**\n * Implements the \"Subscribe\" algorithm described in the GraphQL specification.\n *\n * Returns a Promise which resolves to either an AsyncIterator (if successful)\n * or an ExecutionResult (error). The promise will be rejected if the schema or\n * other arguments to this function are invalid, or if the resolved event stream\n * is not an async iterable.\n *\n * If the client-provided arguments to this function do not result in a\n * compliant subscription, a GraphQL Response (ExecutionResult) with\n * descriptive errors and no data will be returned.\n *\n * If the source stream could not be created due to faulty subscription\n * resolver logic or underlying systems, the promise will resolve to a single\n * ExecutionResult containing `errors` and no `data`.\n *\n * If the operation succeeded, the promise resolves to an AsyncIterator, which\n * yields a stream of ExecutionResults representing the response stream.\n *\n * Accepts either an object with named arguments, or individual arguments.\n */\nasync function subscribe(args) {\n  // Temporary for v15 to v16 migration. Remove in v17\n  arguments.length < 2 ||\n    (0, _devAssert.devAssert)(\n      false,\n      'graphql@16 dropped long-deprecated support for positional arguments, please pass an object instead.',\n    );\n  const resultOrStream = await createSourceEventStream(args);\n\n  if (!(0, _isAsyncIterable.isAsyncIterable)(resultOrStream)) {\n    return resultOrStream;\n  } // For each payload yielded from a subscription, map it over the normal\n  // GraphQL `execute` function, with `payload` as the rootValue.\n  // This implements the \"MapSourceToResponseEvent\" algorithm described in\n  // the GraphQL specification. The `execute` function provides the\n  // \"ExecuteSubscriptionEvent\" algorithm, as it is nearly identical to the\n  // \"ExecuteQuery\" algorithm, for which `execute` is also used.\n\n  const mapSourceToResponse = (payload) =>\n    (0, _execute.execute)({ ...args, rootValue: payload }); // Map every source value to a ExecutionResult value as described above.\n\n  return (0, _mapAsyncIterator.mapAsyncIterator)(\n    resultOrStream,\n    mapSourceToResponse,\n  );\n}\n\nfunction toNormalizedArgs(args) {\n  const firstArg = args[0];\n\n  if (firstArg && 'document' in firstArg) {\n    return firstArg;\n  }\n\n  return {\n    schema: firstArg,\n    // FIXME: when underlying TS bug fixed, see https://github.com/microsoft/TypeScript/issues/31613\n    document: args[1],\n    rootValue: args[2],\n    contextValue: args[3],\n    variableValues: args[4],\n    operationName: args[5],\n    subscribeFieldResolver: args[6],\n  };\n}\n/**\n * Implements the \"CreateSourceEventStream\" algorithm described in the\n * GraphQL specification, resolving the subscription source event stream.\n *\n * Returns a Promise which resolves to either an AsyncIterable (if successful)\n * or an ExecutionResult (error). The promise will be rejected if the schema or\n * other arguments to this function are invalid, or if the resolved event stream\n * is not an async iterable.\n *\n * If the client-provided arguments to this function do not result in a\n * compliant subscription, a GraphQL Response (ExecutionResult) with\n * descriptive errors and no data will be returned.\n *\n * If the the source stream could not be created due to faulty subscription\n * resolver logic or underlying systems, the promise will resolve to a single\n * ExecutionResult containing `errors` and no `data`.\n *\n * If the operation succeeded, the promise resolves to the AsyncIterable for the\n * event stream returned by the resolver.\n *\n * A Source Event Stream represents a sequence of events, each of which triggers\n * a GraphQL execution for that event.\n *\n * This may be useful when hosting the stateful subscription service in a\n * different process or machine than the stateless GraphQL execution engine,\n * or otherwise separating these two steps. For more on this, see the\n * \"Supporting Subscriptions at Scale\" information in the GraphQL specification.\n */\n\nasync function createSourceEventStream(...rawArgs) {\n  const args = toNormalizedArgs(rawArgs);\n  const { schema, document, variableValues } = args; // If arguments are missing or incorrectly typed, this is an internal\n  // developer mistake which should throw an early error.\n\n  (0, _execute.assertValidExecutionArguments)(schema, document, variableValues); // If a valid execution context cannot be created due to incorrect arguments,\n  // a \"Response\" with only errors is returned.\n\n  const exeContext = (0, _execute.buildExecutionContext)(args); // Return early errors if execution context failed.\n\n  if (!('schema' in exeContext)) {\n    return {\n      errors: exeContext,\n    };\n  }\n\n  try {\n    const eventStream = await executeSubscription(exeContext); // Assert field returned an event stream, otherwise yield an error.\n\n    if (!(0, _isAsyncIterable.isAsyncIterable)(eventStream)) {\n      throw new Error(\n        'Subscription field must return Async Iterable. ' +\n          `Received: ${(0, _inspect.inspect)(eventStream)}.`,\n      );\n    }\n\n    return eventStream;\n  } catch (error) {\n    // If it GraphQLError, report it as an ExecutionResult, containing only errors and no data.\n    // Otherwise treat the error as a system-class error and re-throw it.\n    if (error instanceof _GraphQLError.GraphQLError) {\n      return {\n        errors: [error],\n      };\n    }\n\n    throw error;\n  }\n}\n\nasync function executeSubscription(exeContext) {\n  const { schema, fragments, operation, variableValues, rootValue } =\n    exeContext;\n  const rootType = schema.getSubscriptionType();\n\n  if (rootType == null) {\n    throw new _GraphQLError.GraphQLError(\n      'Schema is not configured to execute subscription operation.',\n      {\n        nodes: operation,\n      },\n    );\n  }\n\n  const rootFields = (0, _collectFields.collectFields)(\n    schema,\n    fragments,\n    variableValues,\n    rootType,\n    operation.selectionSet,\n  );\n  const [responseName, fieldNodes] = [...rootFields.entries()][0];\n  const fieldDef = (0, _execute.getFieldDef)(schema, rootType, fieldNodes[0]);\n\n  if (!fieldDef) {\n    const fieldName = fieldNodes[0].name.value;\n    throw new _GraphQLError.GraphQLError(\n      `The subscription field \"${fieldName}\" is not defined.`,\n      {\n        nodes: fieldNodes,\n      },\n    );\n  }\n\n  const path = (0, _Path.addPath)(undefined, responseName, rootType.name);\n  const info = (0, _execute.buildResolveInfo)(\n    exeContext,\n    fieldDef,\n    fieldNodes,\n    rootType,\n    path,\n  );\n\n  try {\n    var _fieldDef$subscribe;\n\n    // Implements the \"ResolveFieldEventStream\" algorithm from GraphQL specification.\n    // It differs from \"ResolveFieldValue\" due to providing a different `resolveFn`.\n    // Build a JS object of arguments from the field.arguments AST, using the\n    // variables scope to fulfill any variable references.\n    const args = (0, _values.getArgumentValues)(\n      fieldDef,\n      fieldNodes[0],\n      variableValues,\n    ); // The resolve function's optional third argument is a context value that\n    // is provided to every resolve function within an execution. It is commonly\n    // used to represent an authenticated user, or request-specific caches.\n\n    const contextValue = exeContext.contextValue; // Call the `subscribe()` resolver or the default resolver to produce an\n    // AsyncIterable yielding raw payloads.\n\n    const resolveFn =\n      (_fieldDef$subscribe = fieldDef.subscribe) !== null &&\n      _fieldDef$subscribe !== void 0\n        ? _fieldDef$subscribe\n        : exeContext.subscribeFieldResolver;\n    const eventStream = await resolveFn(rootValue, args, contextValue, info);\n\n    if (eventStream instanceof Error) {\n      throw eventStream;\n    }\n\n    return eventStream;\n  } catch (error) {\n    throw (0, _locatedError.locatedError)(\n      error,\n      fieldNodes,\n      (0, _Path.pathToArray)(path),\n    );\n  }\n}\n&/utilities/typedQueryDocumentNode.d.ts\u0003!import type { DocumentNode, ExecutableDefinitionNode } from '../language/ast';\n/**\n * Wrapper type that contains DocumentNode and types that can be deduced from it.\n */\nexport interface TypedQueryDocumentNode<\n  TResponseData = {\n    [key: string]: any;\n  },\n  TRequestVariables = {\n    [key: string]: any;\n  },\n> extends DocumentNode {\n  readonly definitions: ReadonlyArray<ExecutableDefinitionNode>;\n  /**\n   * This type is used to ensure that the variables you pass in to the query are assignable to Variables\n   * and that the Result is assignable to whatever you pass your result to. The method is never actually\n   * implemented, but the type is valid because we list it as optional\n   */\n  __ensureTypesOfVariablesAndResultMatching?: (\n    variables: TRequestVariables,\n  ) => TResponseData;\n}\n/utilities/valueFromAST.mjs\u0013import { inspect } from '../jsutils/inspect.mjs';\nimport { invariant } from '../jsutils/invariant.mjs';\nimport { keyMap } from '../jsutils/keyMap.mjs';\nimport { Kind } from '../language/kinds.mjs';\nimport {\n  isInputObjectType,\n  isLeafType,\n  isListType,\n  isNonNullType,\n} from '../type/definition.mjs';\n/**\n * Produces a JavaScript value given a GraphQL Value AST.\n *\n * A GraphQL type must be provided, which will be used to interpret different\n * GraphQL Value literals.\n *\n * Returns `undefined` when the value could not be validly coerced according to\n * the provided type.\n *\n * | GraphQL Value        | JSON Value    |\n * | -------------------- | ------------- |\n * | Input Object         | Object        |\n * | List                 | Array         |\n * | Boolean              | Boolean       |\n * | String               | String        |\n * | Int / Float          | Number        |\n * | Enum Value           | Unknown       |\n * | NullValue            | null          |\n *\n */\n\nexport function valueFromAST(valueNode, type, variables) {\n  if (!valueNode) {\n    // When there is no node, then there is also no value.\n    // Importantly, this is different from returning the value null.\n    return;\n  }\n\n  if (valueNode.kind === Kind.VARIABLE) {\n    const variableName = valueNode.name.value;\n\n    if (variables == null || variables[variableName] === undefined) {\n      // No valid return value.\n      return;\n    }\n\n    const variableValue = variables[variableName];\n\n    if (variableValue === null && isNonNullType(type)) {\n      return; // Invalid: intentionally return no value.\n    } // Note: This does no further checking that this variable is correct.\n    // This assumes that this query has been validated and the variable\n    // usage here is of the correct type.\n\n    return variableValue;\n  }\n\n  if (isNonNullType(type)) {\n    if (valueNode.kind === Kind.NULL) {\n      return; // Invalid: intentionally return no value.\n    }\n\n    return valueFromAST(valueNode, type.ofType, variables);\n  }\n\n  if (valueNode.kind === Kind.NULL) {\n    // This is explicitly returning the value null.\n    return null;\n  }\n\n  if (isListType(type)) {\n    const itemType = type.ofType;\n\n    if (valueNode.kind === Kind.LIST) {\n      const coercedValues = [];\n\n      for (const itemNode of valueNode.values) {\n        if (isMissingVariable(itemNode, variables)) {\n          // If an array contains a missing variable, it is either coerced to\n          // null or if the item type is non-null, it considered invalid.\n          if (isNonNullType(itemType)) {\n            return; // Invalid: intentionally return no value.\n          }\n\n          coercedValues.push(null);\n        } else {\n          const itemValue = valueFromAST(itemNode, itemType, variables);\n\n          if (itemValue === undefined) {\n            return; // Invalid: intentionally return no value.\n          }\n\n          coercedValues.push(itemValue);\n        }\n      }\n\n      return coercedValues;\n    }\n\n    const coercedValue = valueFromAST(valueNode, itemType, variables);\n\n    if (coercedValue === undefined) {\n      return; // Invalid: intentionally return no value.\n    }\n\n    return [coercedValue];\n  }\n\n  if (isInputObjectType(type)) {\n    if (valueNode.kind !== Kind.OBJECT) {\n      return; // Invalid: intentionally return no value.\n    }\n\n    const coercedObj = Object.create(null);\n    const fieldNodes = keyMap(valueNode.fields, (field) => field.name.value);\n\n    for (const field of Object.values(type.getFields())) {\n      const fieldNode = fieldNodes[field.name];\n\n      if (!fieldNode || isMissingVariable(fieldNode.value, variables)) {\n        if (field.defaultValue !== undefined) {\n          coercedObj[field.name] = field.defaultValue;\n        } else if (isNonNullType(field.type)) {\n          return; // Invalid: intentionally return no value.\n        }\n\n        continue;\n      }\n\n      const fieldValue = valueFromAST(fieldNode.value, field.type, variables);\n\n      if (fieldValue === undefined) {\n        return; // Invalid: intentionally return no value.\n      }\n\n      coercedObj[field.name] = fieldValue;\n    }\n\n    return coercedObj;\n  }\n\n  if (isLeafType(type)) {\n    // Scalars and Enums fulfill parsing a literal value via parseLiteral().\n    // Invalid values represent a failure to parse correctly, in which case\n    // no value is returned.\n    let result;\n\n    try {\n      result = type.parseLiteral(valueNode, variables);\n    } catch (_error) {\n      return; // Invalid: intentionally return no value.\n    }\n\n    if (result === undefined) {\n      return; // Invalid: intentionally return no value.\n    }\n\n    return result;\n  }\n  /* c8 ignore next 3 */\n  // Not reachable, all possible input types have been considered.\n\n  false || invariant(false, 'Unexpected input type: ' + inspect(type));\n} // Returns true if the provided valueNode is a variable which is not defined\n// in the set of variables.\n\nfunction isMissingVariable(valueNode, variables) {\n  return (\n    valueNode.kind === Kind.VARIABLE &&\n    (variables == null || variables[valueNode.name.value] === undefined)\n  );\n}\n/jsutils/promiseForObject.d.ts\u0001import type { ObjMap } from './ObjMap';\n/**\n * This function transforms a JS object `ObjMap<Promise<T>>` into\n * a `Promise<ObjMap<T>>`\n *\n * This is akin to bluebird's `Promise.props`, but implemented only using\n * `Promise.all` so it will work with any implementation of ES6 promises.\n */\nexport declare function promiseForObject<T>(\n  object: ObjMap<Promise<T>>,\n): Promise<ObjMap<T>>;\n/language/index.mjs\u0003wexport { Source } from './source.mjs';\nexport { getLocation } from './location.mjs';\nexport { printLocation, printSourceLocation } from './printLocation.mjs';\nexport { Kind } from './kinds.mjs';\nexport { TokenKind } from './tokenKind.mjs';\nexport { Lexer } from './lexer.mjs';\nexport { parse, parseValue, parseConstValue, parseType } from './parser.mjs';\nexport { print } from './printer.mjs';\nexport {\n  visit,\n  visitInParallel,\n  getVisitFn,\n  getEnterLeaveForKind,\n  BREAK,\n} from './visitor.mjs';\nexport { Location, Token, OperationTypeNode } from './ast.mjs';\nexport {\n  isDefinitionNode,\n  isExecutableDefinitionNode,\n  isSelectionNode,\n  isValueNode,\n  isConstValueNode,\n  isTypeNode,\n  isTypeSystemDefinitionNode,\n  isTypeDefinitionNode,\n  isTypeSystemExtensionNode,\n  isTypeExtensionNode,\n} from './predicates.mjs';\nexport { DirectiveLocation } from './directiveLocation.mjs';\n/jsutils/naturalCompare.mjs\u0004/**\n * Returns a number indicating whether a reference string comes before, or after,\n * or is the same as the given string in natural sort order.\n *\n * See: https://en.wikipedia.org/wiki/Natural_sort_order\n *\n */\nexport function naturalCompare(aStr, bStr) {\n  let aIndex = 0;\n  let bIndex = 0;\n\n  while (aIndex < aStr.length && bIndex < bStr.length) {\n    let aChar = aStr.charCodeAt(aIndex);\n    let bChar = bStr.charCodeAt(bIndex);\n\n    if (isDigit(aChar) && isDigit(bChar)) {\n      let aNum = 0;\n\n      do {\n        ++aIndex;\n        aNum = aNum * 10 + aChar - DIGIT_0;\n        aChar = aStr.charCodeAt(aIndex);\n      } while (isDigit(aChar) && aNum > 0);\n\n      let bNum = 0;\n\n      do {\n        ++bIndex;\n        bNum = bNum * 10 + bChar - DIGIT_0;\n        bChar = bStr.charCodeAt(bIndex);\n      } while (isDigit(bChar) && bNum > 0);\n\n      if (aNum < bNum) {\n        return -1;\n      }\n\n      if (aNum > bNum) {\n        return 1;\n      }\n    } else {\n      if (aChar < bChar) {\n        return -1;\n      }\n\n      if (aChar > bChar) {\n        return 1;\n      }\n\n      ++aIndex;\n      ++bIndex;\n    }\n  }\n\n  return aStr.length - bStr.length;\n}\nconst DIGIT_0 = 48;\nconst DIGIT_9 = 57;\n\nfunction isDigit(code) {\n  return !isNaN(code) && DIGIT_0 <= code && code <= DIGIT_9;\n}\n$/utilities/typedQueryDocumentNode.jsQ'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\n#/utilities/getOperationRootType.mjs\u0004import { GraphQLError } from '../error/GraphQLError.mjs';\n\n/**\n * Extracts the root type of the operation from the schema.\n *\n * @deprecated Please use `GraphQLSchema.getRootType` instead. Will be removed in v17\n */\nexport function getOperationRootType(schema, operation) {\n  if (operation.operation === 'query') {\n    const queryType = schema.getQueryType();\n\n    if (!queryType) {\n      throw new GraphQLError(\n        'Schema does not define the required query root type.',\n        {\n          nodes: operation,\n        },\n      );\n    }\n\n    return queryType;\n  }\n\n  if (operation.operation === 'mutation') {\n    const mutationType = schema.getMutationType();\n\n    if (!mutationType) {\n      throw new GraphQLError('Schema is not configured for mutations.', {\n        nodes: operation,\n      });\n    }\n\n    return mutationType;\n  }\n\n  if (operation.operation === 'subscription') {\n    const subscriptionType = schema.getSubscriptionType();\n\n    if (!subscriptionType) {\n      throw new GraphQLError('Schema is not configured for subscriptions.', {\n        nodes: operation,\n      });\n    }\n\n    return subscriptionType;\n  }\n\n  throw new GraphQLError(\n    'Can only have query, mutation and subscription operations.',\n    {\n      nodes: operation,\n    },\n  );\n}\n/error/locatedError.mjs\u0003import { toError } from '../jsutils/toError.mjs';\nimport { GraphQLError } from './GraphQLError.mjs';\n/**\n * Given an arbitrary value, presumably thrown while attempting to execute a\n * GraphQL operation, produce a new GraphQLError aware of the location in the\n * document responsible for the original Error.\n */\n\nexport function locatedError(rawOriginalError, nodes, path) {\n  var _nodes;\n\n  const originalError = toError(rawOriginalError); // Note: this uses a brand-check to support GraphQL errors originating from other contexts.\n\n  if (isLocatedGraphQLError(originalError)) {\n    return originalError;\n  }\n\n  return new GraphQLError(originalError.message, {\n    nodes:\n      (_nodes = originalError.nodes) !== null && _nodes !== void 0\n        ? _nodes\n        : nodes,\n    source: originalError.source,\n    positions: originalError.positions,\n    path,\n    originalError,\n  });\n}\n\nfunction isLocatedGraphQLError(error) {\n  return Array.isArray(error.path);\n}\n/utilities/extendSchema.js_'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.extendSchema = extendSchema;\nexports.extendSchemaImpl = extendSchemaImpl;\n\nvar _devAssert = require('../jsutils/devAssert.js');\n\nvar _inspect = require('../jsutils/inspect.js');\n\nvar _invariant = require('../jsutils/invariant.js');\n\nvar _keyMap = require('../jsutils/keyMap.js');\n\nvar _mapValue = require('../jsutils/mapValue.js');\n\nvar _kinds = require('../language/kinds.js');\n\nvar _predicates = require('../language/predicates.js');\n\nvar _definition = require('../type/definition.js');\n\nvar _directives = require('../type/directives.js');\n\nvar _introspection = require('../type/introspection.js');\n\nvar _scalars = require('../type/scalars.js');\n\nvar _schema = require('../type/schema.js');\n\nvar _validate = require('../validation/validate.js');\n\nvar _values = require('../execution/values.js');\n\nvar _valueFromAST = require('./valueFromAST.js');\n\n/**\n * Produces a new schema given an existing schema and a document which may\n * contain GraphQL type extensions and definitions. The original schema will\n * remain unaltered.\n *\n * Because a schema represents a graph of references, a schema cannot be\n * extended without effectively making an entire copy. We do not know until it's\n * too late if subgraphs remain unchanged.\n *\n * This algorithm copies the provided schema, applying extensions while\n * producing the copy. The original schema remains unaltered.\n */\nfunction extendSchema(schema, documentAST, options) {\n  (0, _schema.assertSchema)(schema);\n  (documentAST != null && documentAST.kind === _kinds.Kind.DOCUMENT) ||\n    (0, _devAssert.devAssert)(false, 'Must provide valid Document AST.');\n\n  if (\n    (options === null || options === void 0 ? void 0 : options.assumeValid) !==\n      true &&\n    (options === null || options === void 0\n      ? void 0\n      : options.assumeValidSDL) !== true\n  ) {\n    (0, _validate.assertValidSDLExtension)(documentAST, schema);\n  }\n\n  const schemaConfig = schema.toConfig();\n  const extendedConfig = extendSchemaImpl(schemaConfig, documentAST, options);\n  return schemaConfig === extendedConfig\n    ? schema\n    : new _schema.GraphQLSchema(extendedConfig);\n}\n/**\n * @internal\n */\n\nfunction extendSchemaImpl(schemaConfig, documentAST, options) {\n  var _schemaDef, _schemaDef$descriptio, _schemaDef2, _options$assumeValid;\n\n  // Collect the type definitions and extensions found in the document.\n  const typeDefs = [];\n  const typeExtensionsMap = Object.create(null); // New directives and types are separate because a directives and types can\n  // have the same name. For example, a type named \"skip\".\n\n  const directiveDefs = [];\n  let schemaDef; // Schema extensions are collected which may add additional operation types.\n\n  const schemaExtensions = [];\n\n  for (const def of documentAST.definitions) {\n    if (def.kind === _kinds.Kind.SCHEMA_DEFINITION) {\n      schemaDef = def;\n    } else if (def.kind === _kinds.Kind.SCHEMA_EXTENSION) {\n      schemaExtensions.push(def);\n    } else if ((0, _predicates.isTypeDefinitionNode)(def)) {\n      typeDefs.push(def);\n    } else if ((0, _predicates.isTypeExtensionNode)(def)) {\n      const extendedTypeName = def.name.value;\n      const existingTypeExtensions = typeExtensionsMap[extendedTypeName];\n      typeExtensionsMap[extendedTypeName] = existingTypeExtensions\n        ? existingTypeExtensions.concat([def])\n        : [def];\n    } else if (def.kind === _kinds.Kind.DIRECTIVE_DEFINITION) {\n      directiveDefs.push(def);\n    }\n  } // If this document contains no new types, extensions, or directives then\n  // return the same unmodified GraphQLSchema instance.\n\n  if (\n    Object.keys(typeExtensionsMap).length === 0 &&\n    typeDefs.length === 0 &&\n    directiveDefs.length === 0 &&\n    schemaExtensions.length === 0 &&\n    schemaDef == null\n  ) {\n    return schemaConfig;\n  }\n\n  const typeMap = Object.create(null);\n\n  for (const existingType of schemaConfig.types) {\n    typeMap[existingType.name] = extendNamedType(existingType);\n  }\n\n  for (const typeNode of typeDefs) {\n    var _stdTypeMap$name;\n\n    const name = typeNode.name.value;\n    typeMap[name] =\n      (_stdTypeMap$name = stdTypeMap[name]) !== null &&\n      _stdTypeMap$name !== void 0\n        ? _stdTypeMap$name\n        : buildType(typeNode);\n  }\n\n  const operationTypes = {\n    // Get the extended root operation types.\n    query: schemaConfig.query && replaceNamedType(schemaConfig.query),\n    mutation: schemaConfig.mutation && replaceNamedType(schemaConfig.mutation),\n    subscription:\n      schemaConfig.subscription && replaceNamedType(schemaConfig.subscription),\n    // Then, incorporate schema definition and all schema extensions.\n    ...(schemaDef && getOperationTypes([schemaDef])),\n    ...getOperationTypes(schemaExtensions),\n  }; // Then produce and return a Schema config with these types.\n\n  return {\n    description:\n      (_schemaDef = schemaDef) === null || _schemaDef === void 0\n        ? void 0\n        : (_schemaDef$descriptio = _schemaDef.description) === null ||\n          _schemaDef$descriptio === void 0\n        ? void 0\n        : _schemaDef$descriptio.value,\n    ...operationTypes,\n    types: Object.values(typeMap),\n    directives: [\n      ...schemaConfig.directives.map(replaceDirective),\n      ...directiveDefs.map(buildDirective),\n    ],\n    extensions: Object.create(null),\n    astNode:\n      (_schemaDef2 = schemaDef) !== null && _schemaDef2 !== void 0\n        ? _schemaDef2\n        : schemaConfig.astNode,\n    extensionASTNodes: schemaConfig.extensionASTNodes.concat(schemaExtensions),\n    assumeValid:\n      (_options$assumeValid =\n        options === null || options === void 0\n          ? void 0\n          : options.assumeValid) !== null && _options$assumeValid !== void 0\n        ? _options$assumeValid\n        : false,\n  }; // Below are functions used for producing this schema that have closed over\n  // this scope and have access to the schema, cache, and newly defined types.\n\n  function replaceType(type) {\n    if ((0, _definition.isListType)(type)) {\n      // @ts-expect-error\n      return new _definition.GraphQLList(replaceType(type.ofType));\n    }\n\n    if ((0, _definition.isNonNullType)(type)) {\n      // @ts-expect-error\n      return new _definition.GraphQLNonNull(replaceType(type.ofType));\n    } // @ts-expect-error FIXME\n\n    return replaceNamedType(type);\n  }\n\n  function replaceNamedType(type) {\n    // Note: While this could make early assertions to get the correctly\n    // typed values, that would throw immediately while type system\n    // validation with validateSchema() will produce more actionable results.\n    return typeMap[type.name];\n  }\n\n  function replaceDirective(directive) {\n    const config = directive.toConfig();\n    return new _directives.GraphQLDirective({\n      ...config,\n      args: (0, _mapValue.mapValue)(config.args, extendArg),\n    });\n  }\n\n  function extendNamedType(type) {\n    if (\n      (0, _introspection.isIntrospectionType)(type) ||\n      (0, _scalars.isSpecifiedScalarType)(type)\n    ) {\n      // Builtin types are not extended.\n      return type;\n    }\n\n    if ((0, _definition.isScalarType)(type)) {\n      return extendScalarType(type);\n    }\n\n    if ((0, _definition.isObjectType)(type)) {\n      return extendObjectType(type);\n    }\n\n    if ((0, _definition.isInterfaceType)(type)) {\n      return extendInterfaceType(type);\n    }\n\n    if ((0, _definition.isUnionType)(type)) {\n      return extendUnionType(type);\n    }\n\n    if ((0, _definition.isEnumType)(type)) {\n      return extendEnumType(type);\n    }\n\n    if ((0, _definition.isInputObjectType)(type)) {\n      return extendInputObjectType(type);\n    }\n    /* c8 ignore next 3 */\n    // Not reachable, all possible type definition nodes have been considered.\n\n    false ||\n      (0, _invariant.invariant)(\n        false,\n        'Unexpected type: ' + (0, _inspect.inspect)(type),\n      );\n  }\n\n  function extendInputObjectType(type) {\n    var _typeExtensionsMap$co;\n\n    const config = type.toConfig();\n    const extensions =\n      (_typeExtensionsMap$co = typeExtensionsMap[config.name]) !== null &&\n      _typeExtensionsMap$co !== void 0\n        ? _typeExtensionsMap$co\n        : [];\n    return new _definition.GraphQLInputObjectType({\n      ...config,\n      fields: () => ({\n        ...(0, _mapValue.mapValue)(config.fields, (field) => ({\n          ...field,\n          type: replaceType(field.type),\n        })),\n        ...buildInputFieldMap(extensions),\n      }),\n      extensionASTNodes: config.extensionASTNodes.concat(extensions),\n    });\n  }\n\n  function extendEnumType(type) {\n    var _typeExtensionsMap$ty;\n\n    const config = type.toConfig();\n    const extensions =\n      (_typeExtensionsMap$ty = typeExtensionsMap[type.name]) !== null &&\n      _typeExtensionsMap$ty !== void 0\n        ? _typeExtensionsMap$ty\n        : [];\n    return new _definition.GraphQLEnumType({\n      ...config,\n      values: { ...config.values, ...buildEnumValueMap(extensions) },\n      extensionASTNodes: config.extensionASTNodes.concat(extensions),\n    });\n  }\n\n  function extendScalarType(type) {\n    var _typeExtensionsMap$co2;\n\n    const config = type.toConfig();\n    const extensions =\n      (_typeExtensionsMap$co2 = typeExtensionsMap[config.name]) !== null &&\n      _typeExtensionsMap$co2 !== void 0\n        ? _typeExtensionsMap$co2\n        : [];\n    let specifiedByURL = config.specifiedByURL;\n\n    for (const extensionNode of extensions) {\n      var _getSpecifiedByURL;\n\n      specifiedByURL =\n        (_getSpecifiedByURL = getSpecifiedByURL(extensionNode)) !== null &&\n        _getSpecifiedByURL !== void 0\n          ? _getSpecifiedByURL\n          : specifiedByURL;\n    }\n\n    return new _definition.GraphQLScalarType({\n      ...config,\n      specifiedByURL,\n      extensionASTNodes: config.extensionASTNodes.concat(extensions),\n    });\n  }\n\n  function extendObjectType(type) {\n    var _typeExtensionsMap$co3;\n\n    const config = type.toConfig();\n    const extensions =\n      (_typeExtensionsMap$co3 = typeExtensionsMap[config.name]) !== null &&\n      _typeExtensionsMap$co3 !== void 0\n        ? _typeExtensionsMap$co3\n        : [];\n    return new _definition.GraphQLObjectType({\n      ...config,\n      interfaces: () => [\n        ...type.getInterfaces().map(replaceNamedType),\n        ...buildInterfaces(extensions),\n      ],\n      fields: () => ({\n        ...(0, _mapValue.mapValue)(config.fields, extendField),\n        ...buildFieldMap(extensions),\n      }),\n      extensionASTNodes: config.extensionASTNodes.concat(extensions),\n    });\n  }\n\n  function extendInterfaceType(type) {\n    var _typeExtensionsMap$co4;\n\n    const config = type.toConfig();\n    const extensions =\n      (_typeExtensionsMap$co4 = typeExtensionsMap[config.name]) !== null &&\n      _typeExtensionsMap$co4 !== void 0\n        ? _typeExtensionsMap$co4\n        : [];\n    return new _definition.GraphQLInterfaceType({\n      ...config,\n      interfaces: () => [\n        ...type.getInterfaces().map(replaceNamedType),\n        ...buildInterfaces(extensions),\n      ],\n      fields: () => ({\n        ...(0, _mapValue.mapValue)(config.fields, extendField),\n        ...buildFieldMap(extensions),\n      }),\n      extensionASTNodes: config.extensionASTNodes.concat(extensions),\n    });\n  }\n\n  function extendUnionType(type) {\n    var _typeExtensionsMap$co5;\n\n    const config = type.toConfig();\n    const extensions =\n      (_typeExtensionsMap$co5 = typeExtensionsMap[config.name]) !== null &&\n      _typeExtensionsMap$co5 !== void 0\n        ? _typeExtensionsMap$co5\n        : [];\n    return new _definition.GraphQLUnionType({\n      ...config,\n      types: () => [\n        ...type.getTypes().map(replaceNamedType),\n        ...buildUnionTypes(extensions),\n      ],\n      extensionASTNodes: config.extensionASTNodes.concat(extensions),\n    });\n  }\n\n  function extendField(field) {\n    return {\n      ...field,\n      type: replaceType(field.type),\n      args: field.args && (0, _mapValue.mapValue)(field.args, extendArg),\n    };\n  }\n\n  function extendArg(arg) {\n    return { ...arg, type: replaceType(arg.type) };\n  }\n\n  function getOperationTypes(nodes) {\n    const opTypes = {};\n\n    for (const node of nodes) {\n      var _node$operationTypes;\n\n      // FIXME: https://github.com/graphql/graphql-js/issues/2203\n      const operationTypesNodes =\n        /* c8 ignore next */\n        (_node$operationTypes = node.operationTypes) !== null &&\n        _node$operationTypes !== void 0\n          ? _node$operationTypes\n          : [];\n\n      for (const operationType of operationTypesNodes) {\n        // Note: While this could make early assertions to get the correctly\n        // typed values below, that would throw immediately while type system\n        // validation with validateSchema() will produce more actionable results.\n        // @ts-expect-error\n        opTypes[operationType.operation] = getNamedType(operationType.type);\n      }\n    }\n\n    return opTypes;\n  }\n\n  function getNamedType(node) {\n    var _stdTypeMap$name2;\n\n    const name = node.name.value;\n    const type =\n      (_stdTypeMap$name2 = stdTypeMap[name]) !== null &&\n      _stdTypeMap$name2 !== void 0\n        ? _stdTypeMap$name2\n        : typeMap[name];\n\n    if (type === undefined) {\n      throw new Error(`Unknown type: \"${name}\".`);\n    }\n\n    return type;\n  }\n\n  function getWrappedType(node) {\n    if (node.kind === _kinds.Kind.LIST_TYPE) {\n      return new _definition.GraphQLList(getWrappedType(node.type));\n    }\n\n    if (node.kind === _kinds.Kind.NON_NULL_TYPE) {\n      return new _definition.GraphQLNonNull(getWrappedType(node.type));\n    }\n\n    return getNamedType(node);\n  }\n\n  function buildDirective(node) {\n    var _node$description;\n\n    return new _directives.GraphQLDirective({\n      name: node.name.value,\n      description:\n        (_node$description = node.description) === null ||\n        _node$description === void 0\n          ? void 0\n          : _node$description.value,\n      // @ts-expect-error\n      locations: node.locations.map(({ value }) => value),\n      isRepeatable: node.repeatable,\n      args: buildArgumentMap(node.arguments),\n      astNode: node,\n    });\n  }\n\n  function buildFieldMap(nodes) {\n    const fieldConfigMap = Object.create(null);\n\n    for (const node of nodes) {\n      var _node$fields;\n\n      // FIXME: https://github.com/graphql/graphql-js/issues/2203\n      const nodeFields =\n        /* c8 ignore next */\n        (_node$fields = node.fields) !== null && _node$fields !== void 0\n          ? _node$fields\n          : [];\n\n      for (const field of nodeFields) {\n        var _field$description;\n\n        fieldConfigMap[field.name.value] = {\n          // Note: While this could make assertions to get the correctly typed\n          // value, that would throw immediately while type system validation\n          // with validateSchema() will produce more actionable results.\n          type: getWrappedType(field.type),\n          description:\n            (_field$description = field.description) === null ||\n            _field$description === void 0\n              ? void 0\n              : _field$description.value,\n          args: buildArgumentMap(field.arguments),\n          deprecationReason: getDeprecationReason(field),\n          astNode: field,\n        };\n      }\n    }\n\n    return fieldConfigMap;\n  }\n\n  function buildArgumentMap(args) {\n    // FIXME: https://github.com/graphql/graphql-js/issues/2203\n    const argsNodes =\n      /* c8 ignore next */\n      args !== null && args !== void 0 ? args : [];\n    const argConfigMap = Object.create(null);\n\n    for (const arg of argsNodes) {\n      var _arg$description;\n\n      // Note: While this could make assertions to get the correctly typed\n      // value, that would throw immediately while type system validation\n      // with validateSchema() will produce more actionable results.\n      const type = getWrappedType(arg.type);\n      argConfigMap[arg.name.value] = {\n        type,\n        description:\n          (_arg$description = arg.description) === null ||\n          _arg$description === void 0\n            ? void 0\n            : _arg$description.value,\n        defaultValue: (0, _valueFromAST.valueFromAST)(arg.defaultValue, type),\n        deprecationReason: getDeprecationReason(arg),\n        astNode: arg,\n      };\n    }\n\n    return argConfigMap;\n  }\n\n  function buildInputFieldMap(nodes) {\n    const inputFieldMap = Object.create(null);\n\n    for (const node of nodes) {\n      var _node$fields2;\n\n      // FIXME: https://github.com/graphql/graphql-js/issues/2203\n      const fieldsNodes =\n        /* c8 ignore next */\n        (_node$fields2 = node.fields) !== null && _node$fields2 !== void 0\n          ? _node$fields2\n          : [];\n\n      for (const field of fieldsNodes) {\n        var _field$description2;\n\n        // Note: While this could make assertions to get the correctly typed\n        // value, that would throw immediately while type system validation\n        // with validateSchema() will produce more actionable results.\n        const type = getWrappedType(field.type);\n        inputFieldMap[field.name.value] = {\n          type,\n          description:\n            (_field$description2 = field.description) === null ||\n            _field$description2 === void 0\n              ? void 0\n              : _field$description2.value,\n          defaultValue: (0, _valueFromAST.valueFromAST)(\n            field.defaultValue,\n            type,\n          ),\n          deprecationReason: getDeprecationReason(field),\n          astNode: field,\n        };\n      }\n    }\n\n    return inputFieldMap;\n  }\n\n  function buildEnumValueMap(nodes) {\n    const enumValueMap = Object.create(null);\n\n    for (const node of nodes) {\n      var _node$values;\n\n      // FIXME: https://github.com/graphql/graphql-js/issues/2203\n      const valuesNodes =\n        /* c8 ignore next */\n        (_node$values = node.values) !== null && _node$values !== void 0\n          ? _node$values\n          : [];\n\n      for (const value of valuesNodes) {\n        var _value$description;\n\n        enumValueMap[value.name.value] = {\n          description:\n            (_value$description = value.description) === null ||\n            _value$description === void 0\n              ? void 0\n              : _value$description.value,\n          deprecationReason: getDeprecationReason(value),\n          astNode: value,\n        };\n      }\n    }\n\n    return enumValueMap;\n  }\n\n  function buildInterfaces(nodes) {\n    // Note: While this could make assertions to get the correctly typed\n    // values below, that would throw immediately while type system\n    // validation with validateSchema() will produce more actionable results.\n    // @ts-expect-error\n    return nodes.flatMap(\n      // FIXME: https://github.com/graphql/graphql-js/issues/2203\n      (node) => {\n        var _node$interfaces$map, _node$interfaces;\n\n        return (\n          /* c8 ignore next */\n          (_node$interfaces$map =\n            (_node$interfaces = node.interfaces) === null ||\n            _node$interfaces === void 0\n              ? void 0\n              : _node$interfaces.map(getNamedType)) !== null &&\n            _node$interfaces$map !== void 0\n            ? _node$interfaces$map\n            : []\n        );\n      },\n    );\n  }\n\n  function buildUnionTypes(nodes) {\n    // Note: While this could make assertions to get the correctly typed\n    // values below, that would throw immediately while type system\n    // validation with validateSchema() will produce more actionable results.\n    // @ts-expect-error\n    return nodes.flatMap(\n      // FIXME: https://github.com/graphql/graphql-js/issues/2203\n      (node) => {\n        var _node$types$map, _node$types;\n\n        return (\n          /* c8 ignore next */\n          (_node$types$map =\n            (_node$types = node.types) === null || _node$types === void 0\n              ? void 0\n              : _node$types.map(getNamedType)) !== null &&\n            _node$types$map !== void 0\n            ? _node$types$map\n            : []\n        );\n      },\n    );\n  }\n\n  function buildType(astNode) {\n    var _typeExtensionsMap$na;\n\n    const name = astNode.name.value;\n    const extensionASTNodes =\n      (_typeExtensionsMap$na = typeExtensionsMap[name]) !== null &&\n      _typeExtensionsMap$na !== void 0\n        ? _typeExtensionsMap$na\n        : [];\n\n    switch (astNode.kind) {\n      case _kinds.Kind.OBJECT_TYPE_DEFINITION: {\n        var _astNode$description;\n\n        const allNodes = [astNode, ...extensionASTNodes];\n        return new _definition.GraphQLObjectType({\n          name,\n          description:\n            (_astNode$description = astNode.description) === null ||\n            _astNode$description === void 0\n              ? void 0\n              : _astNode$description.value,\n          interfaces: () => buildInterfaces(allNodes),\n          fields: () => buildFieldMap(allNodes),\n          astNode,\n          extensionASTNodes,\n        });\n      }\n\n      case _kinds.Kind.INTERFACE_TYPE_DEFINITION: {\n        var _astNode$description2;\n\n        const allNodes = [astNode, ...extensionASTNodes];\n        return new _definition.GraphQLInterfaceType({\n          name,\n          description:\n            (_astNode$description2 = astNode.description) === null ||\n            _astNode$description2 === void 0\n              ? void 0\n              : _astNode$description2.value,\n          interfaces: () => buildInterfaces(allNodes),\n          fields: () => buildFieldMap(allNodes),\n          astNode,\n          extensionASTNodes,\n        });\n      }\n\n      case _kinds.Kind.ENUM_TYPE_DEFINITION: {\n        var _astNode$description3;\n\n        const allNodes = [astNode, ...extensionASTNodes];\n        return new _definition.GraphQLEnumType({\n          name,\n          description:\n            (_astNode$description3 = astNode.description) === null ||\n            _astNode$description3 === void 0\n              ? void 0\n              : _astNode$description3.value,\n          values: buildEnumValueMap(allNodes),\n          astNode,\n          extensionASTNodes,\n        });\n      }\n\n      case _kinds.Kind.UNION_TYPE_DEFINITION: {\n        var _astNode$description4;\n\n        const allNodes = [astNode, ...extensionASTNodes];\n        return new _definition.GraphQLUnionType({\n          name,\n          description:\n            (_astNode$description4 = astNode.description) === null ||\n            _astNode$description4 === void 0\n              ? void 0\n              : _astNode$description4.value,\n          types: () => buildUnionTypes(allNodes),\n          astNode,\n          extensionASTNodes,\n        });\n      }\n\n      case _kinds.Kind.SCALAR_TYPE_DEFINITION: {\n        var _astNode$description5;\n\n        return new _definition.GraphQLScalarType({\n          name,\n          description:\n            (_astNode$description5 = astNode.description) === null ||\n            _astNode$description5 === void 0\n              ? void 0\n              : _astNode$description5.value,\n          specifiedByURL: getSpecifiedByURL(astNode),\n          astNode,\n          extensionASTNodes,\n        });\n      }\n\n      case _kinds.Kind.INPUT_OBJECT_TYPE_DEFINITION: {\n        var _astNode$description6;\n\n        const allNodes = [astNode, ...extensionASTNodes];\n        return new _definition.GraphQLInputObjectType({\n          name,\n          description:\n            (_astNode$description6 = astNode.description) === null ||\n            _astNode$description6 === void 0\n              ? void 0\n              : _astNode$description6.value,\n          fields: () => buildInputFieldMap(allNodes),\n          astNode,\n          extensionASTNodes,\n        });\n      }\n    }\n  }\n}\n\nconst stdTypeMap = (0, _keyMap.keyMap)(\n  [..._scalars.specifiedScalarTypes, ..._introspection.introspectionTypes],\n  (type) => type.name,\n);\n/**\n * Given a field or enum value node, returns the string value for the\n * deprecation reason.\n */\n\nfunction getDeprecationReason(node) {\n  const deprecated = (0, _values.getDirectiveValues)(\n    _directives.GraphQLDeprecatedDirective,\n    node,\n  ); // @ts-expect-error validated by `getDirectiveValues`\n\n  return deprecated === null || deprecated === void 0\n    ? void 0\n    : deprecated.reason;\n}\n/**\n * Given a scalar node, returns the string value for the specifiedByURL.\n */\n\nfunction getSpecifiedByURL(node) {\n  const specifiedBy = (0, _values.getDirectiveValues)(\n    _directives.GraphQLSpecifiedByDirective,\n    node,\n  ); // @ts-expect-error validated by `getDirectiveValues`\n\n  return specifiedBy === null || specifiedBy === void 0\n    ? void 0\n    : specifiedBy.url;\n}\n/type/scalars.mjs!import { inspect } from '../jsutils/inspect.mjs';\nimport { isObjectLike } from '../jsutils/isObjectLike.mjs';\nimport { GraphQLError } from '../error/GraphQLError.mjs';\nimport { Kind } from '../language/kinds.mjs';\nimport { print } from '../language/printer.mjs';\nimport { GraphQLScalarType } from './definition.mjs';\n/**\n * Maximum possible Int value as per GraphQL Spec (32-bit signed integer).\n * n.b. This differs from JavaScript's numbers that are IEEE 754 doubles safe up-to 2^53 - 1\n * */\n\nexport const GRAPHQL_MAX_INT = 2147483647;\n/**\n * Minimum possible Int value as per GraphQL Spec (32-bit signed integer).\n * n.b. This differs from JavaScript's numbers that are IEEE 754 doubles safe starting at -(2^53 - 1)\n * */\n\nexport const GRAPHQL_MIN_INT = -2147483648;\nexport const GraphQLInt = new GraphQLScalarType({\n  name: 'Int',\n  description:\n    'The `Int` scalar type represents non-fractional signed whole numeric values. Int can represent values between -(2^31) and 2^31 - 1.',\n\n  serialize(outputValue) {\n    const coercedValue = serializeObject(outputValue);\n\n    if (typeof coercedValue === 'boolean') {\n      return coercedValue ? 1 : 0;\n    }\n\n    let num = coercedValue;\n\n    if (typeof coercedValue === 'string' && coercedValue !== '') {\n      num = Number(coercedValue);\n    }\n\n    if (typeof num !== 'number' || !Number.isInteger(num)) {\n      throw new GraphQLError(\n        `Int cannot represent non-integer value: ${inspect(coercedValue)}`,\n      );\n    }\n\n    if (num > GRAPHQL_MAX_INT || num < GRAPHQL_MIN_INT) {\n      throw new GraphQLError(\n        'Int cannot represent non 32-bit signed integer value: ' +\n          inspect(coercedValue),\n      );\n    }\n\n    return num;\n  },\n\n  parseValue(inputValue) {\n    if (typeof inputValue !== 'number' || !Number.isInteger(inputValue)) {\n      throw new GraphQLError(\n        `Int cannot represent non-integer value: ${inspect(inputValue)}`,\n      );\n    }\n\n    if (inputValue > GRAPHQL_MAX_INT || inputValue < GRAPHQL_MIN_INT) {\n      throw new GraphQLError(\n        `Int cannot represent non 32-bit signed integer value: ${inputValue}`,\n      );\n    }\n\n    return inputValue;\n  },\n\n  parseLiteral(valueNode) {\n    if (valueNode.kind !== Kind.INT) {\n      throw new GraphQLError(\n        `Int cannot represent non-integer value: ${print(valueNode)}`,\n        {\n          nodes: valueNode,\n        },\n      );\n    }\n\n    const num = parseInt(valueNode.value, 10);\n\n    if (num > GRAPHQL_MAX_INT || num < GRAPHQL_MIN_INT) {\n      throw new GraphQLError(\n        `Int cannot represent non 32-bit signed integer value: ${valueNode.value}`,\n        {\n          nodes: valueNode,\n        },\n      );\n    }\n\n    return num;\n  },\n});\nexport const GraphQLFloat = new GraphQLScalarType({\n  name: 'Float',\n  description:\n    'The `Float` scalar type represents signed double-precision fractional values as specified by [IEEE 754](https://en.wikipedia.org/wiki/IEEE_floating_point).',\n\n  serialize(outputValue) {\n    const coercedValue = serializeObject(outputValue);\n\n    if (typeof coercedValue === 'boolean') {\n      return coercedValue ? 1 : 0;\n    }\n\n    let num = coercedValue;\n\n    if (typeof coercedValue === 'string' && coercedValue !== '') {\n      num = Number(coercedValue);\n    }\n\n    if (typeof num !== 'number' || !Number.isFinite(num)) {\n      throw new GraphQLError(\n        `Float cannot represent non numeric value: ${inspect(coercedValue)}`,\n      );\n    }\n\n    return num;\n  },\n\n  parseValue(inputValue) {\n    if (typeof inputValue !== 'number' || !Number.isFinite(inputValue)) {\n      throw new GraphQLError(\n        `Float cannot represent non numeric value: ${inspect(inputValue)}`,\n      );\n    }\n\n    return inputValue;\n  },\n\n  parseLiteral(valueNode) {\n    if (valueNode.kind !== Kind.FLOAT && valueNode.kind !== Kind.INT) {\n      throw new GraphQLError(\n        `Float cannot represent non numeric value: ${print(valueNode)}`,\n        valueNode,\n      );\n    }\n\n    return parseFloat(valueNode.value);\n  },\n});\nexport const GraphQLString = new GraphQLScalarType({\n  name: 'String',\n  description:\n    'The `String` scalar type represents textual data, represented as UTF-8 character sequences. The String type is most often used by GraphQL to represent free-form human-readable text.',\n\n  serialize(outputValue) {\n    const coercedValue = serializeObject(outputValue); // Serialize string, boolean and number values to a string, but do not\n    // attempt to coerce object, function, symbol, or other types as strings.\n\n    if (typeof coercedValue === 'string') {\n      return coercedValue;\n    }\n\n    if (typeof coercedValue === 'boolean') {\n      return coercedValue ? 'true' : 'false';\n    }\n\n    if (typeof coercedValue === 'number' && Number.isFinite(coercedValue)) {\n      return coercedValue.toString();\n    }\n\n    throw new GraphQLError(\n      `String cannot represent value: ${inspect(outputValue)}`,\n    );\n  },\n\n  parseValue(inputValue) {\n    if (typeof inputValue !== 'string') {\n      throw new GraphQLError(\n        `String cannot represent a non string value: ${inspect(inputValue)}`,\n      );\n    }\n\n    return inputValue;\n  },\n\n  parseLiteral(valueNode) {\n    if (valueNode.kind !== Kind.STRING) {\n      throw new GraphQLError(\n        `String cannot represent a non string value: ${print(valueNode)}`,\n        {\n          nodes: valueNode,\n        },\n      );\n    }\n\n    return valueNode.value;\n  },\n});\nexport const GraphQLBoolean = new GraphQLScalarType({\n  name: 'Boolean',\n  description: 'The `Boolean` scalar type represents `true` or `false`.',\n\n  serialize(outputValue) {\n    const coercedValue = serializeObject(outputValue);\n\n    if (typeof coercedValue === 'boolean') {\n      return coercedValue;\n    }\n\n    if (Number.isFinite(coercedValue)) {\n      return coercedValue !== 0;\n    }\n\n    throw new GraphQLError(\n      `Boolean cannot represent a non boolean value: ${inspect(coercedValue)}`,\n    );\n  },\n\n  parseValue(inputValue) {\n    if (typeof inputValue !== 'boolean') {\n      throw new GraphQLError(\n        `Boolean cannot represent a non boolean value: ${inspect(inputValue)}`,\n      );\n    }\n\n    return inputValue;\n  },\n\n  parseLiteral(valueNode) {\n    if (valueNode.kind !== Kind.BOOLEAN) {\n      throw new GraphQLError(\n        `Boolean cannot represent a non boolean value: ${print(valueNode)}`,\n        {\n          nodes: valueNode,\n        },\n      );\n    }\n\n    return valueNode.value;\n  },\n});\nexport const GraphQLID = new GraphQLScalarType({\n  name: 'ID',\n  description:\n    'The `ID` scalar type represents a unique identifier, often used to refetch an object or as key for a cache. The ID type appears in a JSON response as a String; however, it is not intended to be human-readable. When expected as an input type, any string (such as `\"4\"`) or integer (such as `4`) input value will be accepted as an ID.',\n\n  serialize(outputValue) {\n    const coercedValue = serializeObject(outputValue);\n\n    if (typeof coercedValue === 'string') {\n      return coercedValue;\n    }\n\n    if (Number.isInteger(coercedValue)) {\n      return String(coercedValue);\n    }\n\n    throw new GraphQLError(\n      `ID cannot represent value: ${inspect(outputValue)}`,\n    );\n  },\n\n  parseValue(inputValue) {\n    if (typeof inputValue === 'string') {\n      return inputValue;\n    }\n\n    if (typeof inputValue === 'number' && Number.isInteger(inputValue)) {\n      return inputValue.toString();\n    }\n\n    throw new GraphQLError(`ID cannot represent value: ${inspect(inputValue)}`);\n  },\n\n  parseLiteral(valueNode) {\n    if (valueNode.kind !== Kind.STRING && valueNode.kind !== Kind.INT) {\n      throw new GraphQLError(\n        'ID cannot represent a non-string and non-integer value: ' +\n          print(valueNode),\n        {\n          nodes: valueNode,\n        },\n      );\n    }\n\n    return valueNode.value;\n  },\n});\nexport const specifiedScalarTypes = Object.freeze([\n  GraphQLString,\n  GraphQLInt,\n  GraphQLFloat,\n  GraphQLBoolean,\n  GraphQLID,\n]);\nexport function isSpecifiedScalarType(type) {\n  return specifiedScalarTypes.some(({ name }) => type.name === name);\n} // Support serializing objects with custom valueOf() or toJSON() functions -\n// a common way to represent a complex value which can be represented as\n// a string (ex: MongoDB id objects).\n\nfunction serializeObject(outputValue) {\n  if (isObjectLike(outputValue)) {\n    if (typeof outputValue.valueOf === 'function') {\n      const valueOfResult = outputValue.valueOf();\n\n      if (!isObjectLike(valueOfResult)) {\n        return valueOfResult;\n      }\n    }\n\n    if (typeof outputValue.toJSON === 'function') {\n      return outputValue.toJSON();\n    }\n  }\n\n  return outputValue;\n}\n$/utilities/getOperationRootType.d.ts\u0002\u0012import type {\n  OperationDefinitionNode,\n  OperationTypeDefinitionNode,\n} from '../language/ast';\nimport type { GraphQLObjectType } from '../type/definition';\nimport type { GraphQLSchema } from '../type/schema';\n/**\n * Extracts the root type of the operation from the schema.\n *\n * @deprecated Please use `GraphQLSchema.getRootType` instead. Will be removed in v17\n */\nexport declare function getOperationRootType(\n  schema: GraphQLSchema,\n  operation: OperationDefinitionNode | OperationTypeDefinitionNode,\n): GraphQLObjectType;\n/language/visitor.d.ts\u0018import type { ASTNode } from './ast';\nimport { Kind } from './kinds';\n/**\n * A visitor is provided to visit, it contains the collection of\n * relevant functions to be called during the visitor's traversal.\n */\nexport declare type ASTVisitor = EnterLeaveVisitor<ASTNode> | KindVisitor;\ndeclare type KindVisitor = {\n  readonly [NodeT in ASTNode as NodeT['kind']]?:\n    | ASTVisitFn<NodeT>\n    | EnterLeaveVisitor<NodeT>;\n};\ninterface EnterLeaveVisitor<TVisitedNode extends ASTNode> {\n  readonly enter?: ASTVisitFn<TVisitedNode>;\n  readonly leave?: ASTVisitFn<TVisitedNode>;\n}\n/**\n * A visitor is comprised of visit functions, which are called on each node\n * during the visitor's traversal.\n */\nexport declare type ASTVisitFn<TVisitedNode extends ASTNode> = (\n  /** The current node being visiting. */\n  node: TVisitedNode,\n  /** The index or key to this node from the parent node or Array. */\n  key: string | number | undefined,\n  /** The parent immediately above this node, which may be an Array. */\n  parent: ASTNode | ReadonlyArray<ASTNode> | undefined,\n  /** The key path to get to this node from the root node. */\n  path: ReadonlyArray<string | number>,\n  /**\n   * All nodes and Arrays visited before reaching parent of this node.\n   * These correspond to array indices in `path`.\n   * Note: ancestors includes arrays which contain the parent of visited node.\n   */\n  ancestors: ReadonlyArray<ASTNode | ReadonlyArray<ASTNode>>,\n) => any;\n/**\n * A reducer is comprised of reducer functions which convert AST nodes into\n * another form.\n */\nexport declare type ASTReducer<R> = {\n  readonly [NodeT in ASTNode as NodeT['kind']]?: {\n    readonly enter?: ASTVisitFn<NodeT>;\n    readonly leave: ASTReducerFn<NodeT, R>;\n  };\n};\ndeclare type ASTReducerFn<TReducedNode extends ASTNode, R> = (\n  /** The current node being visiting. */\n  node: {\n    [K in keyof TReducedNode]: ReducedField<TReducedNode[K], R>;\n  },\n  /** The index or key to this node from the parent node or Array. */\n  key: string | number | undefined,\n  /** The parent immediately above this node, which may be an Array. */\n  parent: ASTNode | ReadonlyArray<ASTNode> | undefined,\n  /** The key path to get to this node from the root node. */\n  path: ReadonlyArray<string | number>,\n  /**\n   * All nodes and Arrays visited before reaching parent of this node.\n   * These correspond to array indices in `path`.\n   * Note: ancestors includes arrays which contain the parent of visited node.\n   */\n  ancestors: ReadonlyArray<ASTNode | ReadonlyArray<ASTNode>>,\n) => R;\ndeclare type ReducedField<T, R> = T extends null | undefined\n  ? T\n  : T extends ReadonlyArray<any>\n  ? ReadonlyArray<R>\n  : R;\n/**\n * A KeyMap describes each the traversable properties of each kind of node.\n *\n * @deprecated Please inline it. Will be removed in v17\n */\nexport declare type ASTVisitorKeyMap = {\n  [NodeT in ASTNode as NodeT['kind']]?: ReadonlyArray<keyof NodeT>;\n};\nexport declare const BREAK: unknown;\n/**\n * visit() will walk through an AST using a depth-first traversal, calling\n * the visitor's enter function at each node in the traversal, and calling the\n * leave function after visiting that node and all of its child nodes.\n *\n * By returning different values from the enter and leave functions, the\n * behavior of the visitor can be altered, including skipping over a sub-tree of\n * the AST (by returning false), editing the AST by returning a value or null\n * to remove the value, or to stop the whole traversal by returning BREAK.\n *\n * When using visit() to edit an AST, the original AST will not be modified, and\n * a new version of the AST with the changes applied will be returned from the\n * visit function.\n *\n * ```ts\n * const editedAST = visit(ast, {\n *   enter(node, key, parent, path, ancestors) {\n *     // @return\n *     //   undefined: no action\n *     //   false: skip visiting this node\n *     //   visitor.BREAK: stop visiting altogether\n *     //   null: delete this node\n *     //   any value: replace this node with the returned value\n *   },\n *   leave(node, key, parent, path, ancestors) {\n *     // @return\n *     //   undefined: no action\n *     //   false: no action\n *     //   visitor.BREAK: stop visiting altogether\n *     //   null: delete this node\n *     //   any value: replace this node with the returned value\n *   }\n * });\n * ```\n *\n * Alternatively to providing enter() and leave() functions, a visitor can\n * instead provide functions named the same as the kinds of AST nodes, or\n * enter/leave visitors at a named key, leading to three permutations of the\n * visitor API:\n *\n * 1) Named visitors triggered when entering a node of a specific kind.\n *\n * ```ts\n * visit(ast, {\n *   Kind(node) {\n *     // enter the \"Kind\" node\n *   }\n * })\n * ```\n *\n * 2) Named visitors that trigger upon entering and leaving a node of a specific kind.\n *\n * ```ts\n * visit(ast, {\n *   Kind: {\n *     enter(node) {\n *       // enter the \"Kind\" node\n *     }\n *     leave(node) {\n *       // leave the \"Kind\" node\n *     }\n *   }\n * })\n * ```\n *\n * 3) Generic visitors that trigger upon entering and leaving any node.\n *\n * ```ts\n * visit(ast, {\n *   enter(node) {\n *     // enter any node\n *   },\n *   leave(node) {\n *     // leave any node\n *   }\n * })\n * ```\n */\nexport declare function visit<N extends ASTNode>(\n  root: N,\n  visitor: ASTVisitor,\n  visitorKeys?: ASTVisitorKeyMap,\n): N;\nexport declare function visit<R>(\n  root: ASTNode,\n  visitor: ASTReducer<R>,\n  visitorKeys?: ASTVisitorKeyMap,\n): R;\n/**\n * Creates a new visitor instance which delegates to many visitors to run in\n * parallel. Each visitor will be visited for each node before moving on.\n *\n * If a prior visitor edits a node, no following visitors will see that node.\n */\nexport declare function visitInParallel(\n  visitors: ReadonlyArray<ASTVisitor>,\n): ASTVisitor;\n/**\n * Given a visitor instance and a node kind, return EnterLeaveVisitor for that kind.\n */\nexport declare function getEnterLeaveForKind(\n  visitor: ASTVisitor,\n  kind: Kind,\n): EnterLeaveVisitor<ASTNode>;\n/**\n * Given a visitor instance, if it is leaving or not, and a node kind, return\n * the function the visitor runtime should call.\n *\n * @deprecated Please use `getEnterLeaveForKind` instead. Will be removed in v17\n */\nexport declare function getVisitFn(\n  visitor: ASTVisitor,\n  kind: Kind,\n  isLeaving: boolean,\n): ASTVisitFn<ASTNode> | undefined;\nexport {};\n3/validation/rules/VariablesInAllowedPositionRule.js\r'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.VariablesInAllowedPositionRule = VariablesInAllowedPositionRule;\n\nvar _inspect = require('../../jsutils/inspect.js');\n\nvar _GraphQLError = require('../../error/GraphQLError.js');\n\nvar _kinds = require('../../language/kinds.js');\n\nvar _definition = require('../../type/definition.js');\n\nvar _typeComparators = require('../../utilities/typeComparators.js');\n\nvar _typeFromAST = require('../../utilities/typeFromAST.js');\n\n/**\n * Variables in allowed position\n *\n * Variable usages must be compatible with the arguments they are passed to.\n *\n * See https://spec.graphql.org/draft/#sec-All-Variable-Usages-are-Allowed\n */\nfunction VariablesInAllowedPositionRule(context) {\n  let varDefMap = Object.create(null);\n  return {\n    OperationDefinition: {\n      enter() {\n        varDefMap = Object.create(null);\n      },\n\n      leave(operation) {\n        const usages = context.getRecursiveVariableUsages(operation);\n\n        for (const { node, type, defaultValue } of usages) {\n          const varName = node.name.value;\n          const varDef = varDefMap[varName];\n\n          if (varDef && type) {\n            // A var type is allowed if it is the same or more strict (e.g. is\n            // a subtype of) than the expected type. It can be more strict if\n            // the variable type is non-null when the expected type is nullable.\n            // If both are list types, the variable item type can be more strict\n            // than the expected item type (contravariant).\n            const schema = context.getSchema();\n            const varType = (0, _typeFromAST.typeFromAST)(schema, varDef.type);\n\n            if (\n              varType &&\n              !allowedVariableUsage(\n                schema,\n                varType,\n                varDef.defaultValue,\n                type,\n                defaultValue,\n              )\n            ) {\n              const varTypeStr = (0, _inspect.inspect)(varType);\n              const typeStr = (0, _inspect.inspect)(type);\n              context.reportError(\n                new _GraphQLError.GraphQLError(\n                  `Variable \"$${varName}\" of type \"${varTypeStr}\" used in position expecting type \"${typeStr}\".`,\n                  {\n                    nodes: [varDef, node],\n                  },\n                ),\n              );\n            }\n          }\n        }\n      },\n    },\n\n    VariableDefinition(node) {\n      varDefMap[node.variable.name.value] = node;\n    },\n  };\n}\n/**\n * Returns true if the variable is allowed in the location it was found,\n * which includes considering if default values exist for either the variable\n * or the location at which it is located.\n */\n\nfunction allowedVariableUsage(\n  schema,\n  varType,\n  varDefaultValue,\n  locationType,\n  locationDefaultValue,\n) {\n  if (\n    (0, _definition.isNonNullType)(locationType) &&\n    !(0, _definition.isNonNullType)(varType)\n  ) {\n    const hasNonNullVariableDefaultValue =\n      varDefaultValue != null && varDefaultValue.kind !== _kinds.Kind.NULL;\n    const hasLocationDefaultValue = locationDefaultValue !== undefined;\n\n    if (!hasNonNullVariableDefaultValue && !hasLocationDefaultValue) {\n      return false;\n    }\n\n    const nullableLocationType = locationType.ofType;\n    return (0, _typeComparators.isTypeSubTypeOf)(\n      schema,\n      varType,\n      nullableLocationType,\n    );\n  }\n\n  return (0, _typeComparators.isTypeSubTypeOf)(schema, varType, locationType);\n}\n3/validation/rules/ProvidedRequiredArgumentsRule.mjs\u0011import { inspect } from '../../jsutils/inspect.mjs';\nimport { keyMap } from '../../jsutils/keyMap.mjs';\nimport { GraphQLError } from '../../error/GraphQLError.mjs';\nimport { Kind } from '../../language/kinds.mjs';\nimport { print } from '../../language/printer.mjs';\nimport { isRequiredArgument, isType } from '../../type/definition.mjs';\nimport { specifiedDirectives } from '../../type/directives.mjs';\n\n/**\n * Provided required arguments\n *\n * A field or directive is only valid if all required (non-null without a\n * default value) field arguments have been provided.\n */\nexport function ProvidedRequiredArgumentsRule(context) {\n  return {\n    // eslint-disable-next-line new-cap\n    ...ProvidedRequiredArgumentsOnDirectivesRule(context),\n    Field: {\n      // Validate on leave to allow for deeper errors to appear first.\n      leave(fieldNode) {\n        var _fieldNode$arguments;\n\n        const fieldDef = context.getFieldDef();\n\n        if (!fieldDef) {\n          return false;\n        }\n\n        const providedArgs = new Set( // FIXME: https://github.com/graphql/graphql-js/issues/2203\n          /* c8 ignore next */\n          (_fieldNode$arguments = fieldNode.arguments) === null ||\n          _fieldNode$arguments === void 0\n            ? void 0\n            : _fieldNode$arguments.map((arg) => arg.name.value),\n        );\n\n        for (const argDef of fieldDef.args) {\n          if (!providedArgs.has(argDef.name) && isRequiredArgument(argDef)) {\n            const argTypeStr = inspect(argDef.type);\n            context.reportError(\n              new GraphQLError(\n                `Field \"${fieldDef.name}\" argument \"${argDef.name}\" of type \"${argTypeStr}\" is required, but it was not provided.`,\n                {\n                  nodes: fieldNode,\n                },\n              ),\n            );\n          }\n        }\n      },\n    },\n  };\n}\n/**\n * @internal\n */\n\nexport function ProvidedRequiredArgumentsOnDirectivesRule(context) {\n  var _schema$getDirectives;\n\n  const requiredArgsMap = Object.create(null);\n  const schema = context.getSchema();\n  const definedDirectives =\n    (_schema$getDirectives =\n      schema === null || schema === void 0\n        ? void 0\n        : schema.getDirectives()) !== null && _schema$getDirectives !== void 0\n      ? _schema$getDirectives\n      : specifiedDirectives;\n\n  for (const directive of definedDirectives) {\n    requiredArgsMap[directive.name] = keyMap(\n      directive.args.filter(isRequiredArgument),\n      (arg) => arg.name,\n    );\n  }\n\n  const astDefinitions = context.getDocument().definitions;\n\n  for (const def of astDefinitions) {\n    if (def.kind === Kind.DIRECTIVE_DEFINITION) {\n      var _def$arguments;\n\n      // FIXME: https://github.com/graphql/graphql-js/issues/2203\n\n      /* c8 ignore next */\n      const argNodes =\n        (_def$arguments = def.arguments) !== null && _def$arguments !== void 0\n          ? _def$arguments\n          : [];\n      requiredArgsMap[def.name.value] = keyMap(\n        argNodes.filter(isRequiredArgumentNode),\n        (arg) => arg.name.value,\n      );\n    }\n  }\n\n  return {\n    Directive: {\n      // Validate on leave to allow for deeper errors to appear first.\n      leave(directiveNode) {\n        const directiveName = directiveNode.name.value;\n        const requiredArgs = requiredArgsMap[directiveName];\n\n        if (requiredArgs) {\n          var _directiveNode$argume;\n\n          // FIXME: https://github.com/graphql/graphql-js/issues/2203\n\n          /* c8 ignore next */\n          const argNodes =\n            (_directiveNode$argume = directiveNode.arguments) !== null &&\n            _directiveNode$argume !== void 0\n              ? _directiveNode$argume\n              : [];\n          const argNodeMap = new Set(argNodes.map((arg) => arg.name.value));\n\n          for (const [argName, argDef] of Object.entries(requiredArgs)) {\n            if (!argNodeMap.has(argName)) {\n              const argType = isType(argDef.type)\n                ? inspect(argDef.type)\n                : print(argDef.type);\n              context.reportError(\n                new GraphQLError(\n                  `Directive \"@${directiveName}\" argument \"${argName}\" of type \"${argType}\" is required, but it was not provided.`,\n                  {\n                    nodes: directiveNode,\n                  },\n                ),\n              );\n            }\n          }\n        }\n      },\n    },\n  };\n}\n\nfunction isRequiredArgumentNode(arg) {\n  return arg.type.kind === Kind.NON_NULL_TYPE && arg.defaultValue == null;\n}\n//validation/rules/LoneSchemaDefinitionRule.d.ts\u0001Rimport type { ASTVisitor } from '../../language/visitor';\nimport type { SDLValidationContext } from '../ValidationContext';\n/**\n * Lone Schema definition\n *\n * A GraphQL document is only valid if it contains only one schema definition.\n */\nexport declare function LoneSchemaDefinitionRule(\n  context: SDLValidationContext,\n): ASTVisitor;\n/type/scalars.js''use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.GraphQLString =\n  exports.GraphQLInt =\n  exports.GraphQLID =\n  exports.GraphQLFloat =\n  exports.GraphQLBoolean =\n  exports.GRAPHQL_MIN_INT =\n  exports.GRAPHQL_MAX_INT =\n    void 0;\nexports.isSpecifiedScalarType = isSpecifiedScalarType;\nexports.specifiedScalarTypes = void 0;\n\nvar _inspect = require('../jsutils/inspect.js');\n\nvar _isObjectLike = require('../jsutils/isObjectLike.js');\n\nvar _GraphQLError = require('../error/GraphQLError.js');\n\nvar _kinds = require('../language/kinds.js');\n\nvar _printer = require('../language/printer.js');\n\nvar _definition = require('./definition.js');\n\n/**\n * Maximum possible Int value as per GraphQL Spec (32-bit signed integer).\n * n.b. This differs from JavaScript's numbers that are IEEE 754 doubles safe up-to 2^53 - 1\n * */\nconst GRAPHQL_MAX_INT = 2147483647;\n/**\n * Minimum possible Int value as per GraphQL Spec (32-bit signed integer).\n * n.b. This differs from JavaScript's numbers that are IEEE 754 doubles safe starting at -(2^53 - 1)\n * */\n\nexports.GRAPHQL_MAX_INT = GRAPHQL_MAX_INT;\nconst GRAPHQL_MIN_INT = -2147483648;\nexports.GRAPHQL_MIN_INT = GRAPHQL_MIN_INT;\nconst GraphQLInt = new _definition.GraphQLScalarType({\n  name: 'Int',\n  description:\n    'The `Int` scalar type represents non-fractional signed whole numeric values. Int can represent values between -(2^31) and 2^31 - 1.',\n\n  serialize(outputValue) {\n    const coercedValue = serializeObject(outputValue);\n\n    if (typeof coercedValue === 'boolean') {\n      return coercedValue ? 1 : 0;\n    }\n\n    let num = coercedValue;\n\n    if (typeof coercedValue === 'string' && coercedValue !== '') {\n      num = Number(coercedValue);\n    }\n\n    if (typeof num !== 'number' || !Number.isInteger(num)) {\n      throw new _GraphQLError.GraphQLError(\n        `Int cannot represent non-integer value: ${(0, _inspect.inspect)(\n          coercedValue,\n        )}`,\n      );\n    }\n\n    if (num > GRAPHQL_MAX_INT || num < GRAPHQL_MIN_INT) {\n      throw new _GraphQLError.GraphQLError(\n        'Int cannot represent non 32-bit signed integer value: ' +\n          (0, _inspect.inspect)(coercedValue),\n      );\n    }\n\n    return num;\n  },\n\n  parseValue(inputValue) {\n    if (typeof inputValue !== 'number' || !Number.isInteger(inputValue)) {\n      throw new _GraphQLError.GraphQLError(\n        `Int cannot represent non-integer value: ${(0, _inspect.inspect)(\n          inputValue,\n        )}`,\n      );\n    }\n\n    if (inputValue > GRAPHQL_MAX_INT || inputValue < GRAPHQL_MIN_INT) {\n      throw new _GraphQLError.GraphQLError(\n        `Int cannot represent non 32-bit signed integer value: ${inputValue}`,\n      );\n    }\n\n    return inputValue;\n  },\n\n  parseLiteral(valueNode) {\n    if (valueNode.kind !== _kinds.Kind.INT) {\n      throw new _GraphQLError.GraphQLError(\n        `Int cannot represent non-integer value: ${(0, _printer.print)(\n          valueNode,\n        )}`,\n        {\n          nodes: valueNode,\n        },\n      );\n    }\n\n    const num = parseInt(valueNode.value, 10);\n\n    if (num > GRAPHQL_MAX_INT || num < GRAPHQL_MIN_INT) {\n      throw new _GraphQLError.GraphQLError(\n        `Int cannot represent non 32-bit signed integer value: ${valueNode.value}`,\n        {\n          nodes: valueNode,\n        },\n      );\n    }\n\n    return num;\n  },\n});\nexports.GraphQLInt = GraphQLInt;\nconst GraphQLFloat = new _definition.GraphQLScalarType({\n  name: 'Float',\n  description:\n    'The `Float` scalar type represents signed double-precision fractional values as specified by [IEEE 754](https://en.wikipedia.org/wiki/IEEE_floating_point).',\n\n  serialize(outputValue) {\n    const coercedValue = serializeObject(outputValue);\n\n    if (typeof coercedValue === 'boolean') {\n      return coercedValue ? 1 : 0;\n    }\n\n    let num = coercedValue;\n\n    if (typeof coercedValue === 'string' && coercedValue !== '') {\n      num = Number(coercedValue);\n    }\n\n    if (typeof num !== 'number' || !Number.isFinite(num)) {\n      throw new _GraphQLError.GraphQLError(\n        `Float cannot represent non numeric value: ${(0, _inspect.inspect)(\n          coercedValue,\n        )}`,\n      );\n    }\n\n    return num;\n  },\n\n  parseValue(inputValue) {\n    if (typeof inputValue !== 'number' || !Number.isFinite(inputValue)) {\n      throw new _GraphQLError.GraphQLError(\n        `Float cannot represent non numeric value: ${(0, _inspect.inspect)(\n          inputValue,\n        )}`,\n      );\n    }\n\n    return inputValue;\n  },\n\n  parseLiteral(valueNode) {\n    if (\n      valueNode.kind !== _kinds.Kind.FLOAT &&\n      valueNode.kind !== _kinds.Kind.INT\n    ) {\n      throw new _GraphQLError.GraphQLError(\n        `Float cannot represent non numeric value: ${(0, _printer.print)(\n          valueNode,\n        )}`,\n        valueNode,\n      );\n    }\n\n    return parseFloat(valueNode.value);\n  },\n});\nexports.GraphQLFloat = GraphQLFloat;\nconst GraphQLString = new _definition.GraphQLScalarType({\n  name: 'String',\n  description:\n    'The `String` scalar type represents textual data, represented as UTF-8 character sequences. The String type is most often used by GraphQL to represent free-form human-readable text.',\n\n  serialize(outputValue) {\n    const coercedValue = serializeObject(outputValue); // Serialize string, boolean and number values to a string, but do not\n    // attempt to coerce object, function, symbol, or other types as strings.\n\n    if (typeof coercedValue === 'string') {\n      return coercedValue;\n    }\n\n    if (typeof coercedValue === 'boolean') {\n      return coercedValue ? 'true' : 'false';\n    }\n\n    if (typeof coercedValue === 'number' && Number.isFinite(coercedValue)) {\n      return coercedValue.toString();\n    }\n\n    throw new _GraphQLError.GraphQLError(\n      `String cannot represent value: ${(0, _inspect.inspect)(outputValue)}`,\n    );\n  },\n\n  parseValue(inputValue) {\n    if (typeof inputValue !== 'string') {\n      throw new _GraphQLError.GraphQLError(\n        `String cannot represent a non string value: ${(0, _inspect.inspect)(\n          inputValue,\n        )}`,\n      );\n    }\n\n    return inputValue;\n  },\n\n  parseLiteral(valueNode) {\n    if (valueNode.kind !== _kinds.Kind.STRING) {\n      throw new _GraphQLError.GraphQLError(\n        `String cannot represent a non string value: ${(0, _printer.print)(\n          valueNode,\n        )}`,\n        {\n          nodes: valueNode,\n        },\n      );\n    }\n\n    return valueNode.value;\n  },\n});\nexports.GraphQLString = GraphQLString;\nconst GraphQLBoolean = new _definition.GraphQLScalarType({\n  name: 'Boolean',\n  description: 'The `Boolean` scalar type represents `true` or `false`.',\n\n  serialize(outputValue) {\n    const coercedValue = serializeObject(outputValue);\n\n    if (typeof coercedValue === 'boolean') {\n      return coercedValue;\n    }\n\n    if (Number.isFinite(coercedValue)) {\n      return coercedValue !== 0;\n    }\n\n    throw new _GraphQLError.GraphQLError(\n      `Boolean cannot represent a non boolean value: ${(0, _inspect.inspect)(\n        coercedValue,\n      )}`,\n    );\n  },\n\n  parseValue(inputValue) {\n    if (typeof inputValue !== 'boolean') {\n      throw new _GraphQLError.GraphQLError(\n        `Boolean cannot represent a non boolean value: ${(0, _inspect.inspect)(\n          inputValue,\n        )}`,\n      );\n    }\n\n    return inputValue;\n  },\n\n  parseLiteral(valueNode) {\n    if (valueNode.kind !== _kinds.Kind.BOOLEAN) {\n      throw new _GraphQLError.GraphQLError(\n        `Boolean cannot represent a non boolean value: ${(0, _printer.print)(\n          valueNode,\n        )}`,\n        {\n          nodes: valueNode,\n        },\n      );\n    }\n\n    return valueNode.value;\n  },\n});\nexports.GraphQLBoolean = GraphQLBoolean;\nconst GraphQLID = new _definition.GraphQLScalarType({\n  name: 'ID',\n  description:\n    'The `ID` scalar type represents a unique identifier, often used to refetch an object or as key for a cache. The ID type appears in a JSON response as a String; however, it is not intended to be human-readable. When expected as an input type, any string (such as `\"4\"`) or integer (such as `4`) input value will be accepted as an ID.',\n\n  serialize(outputValue) {\n    const coercedValue = serializeObject(outputValue);\n\n    if (typeof coercedValue === 'string') {\n      return coercedValue;\n    }\n\n    if (Number.isInteger(coercedValue)) {\n      return String(coercedValue);\n    }\n\n    throw new _GraphQLError.GraphQLError(\n      `ID cannot represent value: ${(0, _inspect.inspect)(outputValue)}`,\n    );\n  },\n\n  parseValue(inputValue) {\n    if (typeof inputValue === 'string') {\n      return inputValue;\n    }\n\n    if (typeof inputValue === 'number' && Number.isInteger(inputValue)) {\n      return inputValue.toString();\n    }\n\n    throw new _GraphQLError.GraphQLError(\n      `ID cannot represent value: ${(0, _inspect.inspect)(inputValue)}`,\n    );\n  },\n\n  parseLiteral(valueNode) {\n    if (\n      valueNode.kind !== _kinds.Kind.STRING &&\n      valueNode.kind !== _kinds.Kind.INT\n    ) {\n      throw new _GraphQLError.GraphQLError(\n        'ID cannot represent a non-string and non-integer value: ' +\n          (0, _printer.print)(valueNode),\n        {\n          nodes: valueNode,\n        },\n      );\n    }\n\n    return valueNode.value;\n  },\n});\nexports.GraphQLID = GraphQLID;\nconst specifiedScalarTypes = Object.freeze([\n  GraphQLString,\n  GraphQLInt,\n  GraphQLFloat,\n  GraphQLBoolean,\n  GraphQLID,\n]);\nexports.specifiedScalarTypes = specifiedScalarTypes;\n\nfunction isSpecifiedScalarType(type) {\n  return specifiedScalarTypes.some(({ name }) => type.name === name);\n} // Support serializing objects with custom valueOf() or toJSON() functions -\n// a common way to represent a complex value which can be represented as\n// a string (ex: MongoDB id objects).\n\nfunction serializeObject(outputValue) {\n  if ((0, _isObjectLike.isObjectLike)(outputValue)) {\n    if (typeof outputValue.valueOf === 'function') {\n      const valueOfResult = outputValue.valueOf();\n\n      if (!(0, _isObjectLike.isObjectLike)(valueOfResult)) {\n        return valueOfResult;\n      }\n    }\n\n    if (typeof outputValue.toJSON === 'function') {\n      return outputValue.toJSON();\n    }\n  }\n\n  return outputValue;\n}\n/jsutils/mapValue.mjs\u0001//**\n * Creates an object map with the same keys as `map` and values generated by\n * running each value of `map` thru `fn`.\n */\nexport function mapValue(map, fn) {\n  const result = Object.create(null);\n\n  for (const key of Object.keys(map)) {\n    result[key] = fn(map[key], key);\n  }\n\n  return result;\n}\n//validation/rules/VariablesAreInputTypesRule.js\u0004'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.VariablesAreInputTypesRule = VariablesAreInputTypesRule;\n\nvar _GraphQLError = require('../../error/GraphQLError.js');\n\nvar _printer = require('../../language/printer.js');\n\nvar _definition = require('../../type/definition.js');\n\nvar _typeFromAST = require('../../utilities/typeFromAST.js');\n\n/**\n * Variables are input types\n *\n * A GraphQL operation is only valid if all the variables it defines are of\n * input types (scalar, enum, or input object).\n *\n * See https://spec.graphql.org/draft/#sec-Variables-Are-Input-Types\n */\nfunction VariablesAreInputTypesRule(context) {\n  return {\n    VariableDefinition(node) {\n      const type = (0, _typeFromAST.typeFromAST)(\n        context.getSchema(),\n        node.type,\n      );\n\n      if (type !== undefined && !(0, _definition.isInputType)(type)) {\n        const variableName = node.variable.name.value;\n        const typeName = (0, _printer.print)(node.type);\n        context.reportError(\n          new _GraphQLError.GraphQLError(\n            `Variable \"$${variableName}\" cannot be non-input type \"${typeName}\".`,\n            {\n              nodes: node.type,\n            },\n          ),\n        );\n      }\n    },\n  };\n}\n/utilities/index.mjs\n}// Produce the GraphQL query recommended for a full schema introspection.\nexport { getIntrospectionQuery } from './getIntrospectionQuery.mjs';\n// Gets the target Operation from a Document.\nexport { getOperationAST } from './getOperationAST.mjs'; // Gets the Type for the target Operation AST.\n\nexport { getOperationRootType } from './getOperationRootType.mjs'; // Convert a GraphQLSchema to an IntrospectionQuery.\n\nexport { introspectionFromSchema } from './introspectionFromSchema.mjs'; // Build a GraphQLSchema from an introspection result.\n\nexport { buildClientSchema } from './buildClientSchema.mjs'; // Build a GraphQLSchema from GraphQL Schema language.\n\nexport { buildASTSchema, buildSchema } from './buildASTSchema.mjs';\n// Extends an existing GraphQLSchema from a parsed GraphQL Schema language AST.\nexport { extendSchema } from './extendSchema.mjs'; // Sort a GraphQLSchema.\n\nexport { lexicographicSortSchema } from './lexicographicSortSchema.mjs'; // Print a GraphQLSchema to GraphQL Schema language.\n\nexport {\n  printSchema,\n  printType,\n  printIntrospectionSchema,\n} from './printSchema.mjs'; // Create a GraphQLType from a GraphQL language AST.\n\nexport { typeFromAST } from './typeFromAST.mjs'; // Create a JavaScript value from a GraphQL language AST with a type.\n\nexport { valueFromAST } from './valueFromAST.mjs'; // Create a JavaScript value from a GraphQL language AST without a type.\n\nexport { valueFromASTUntyped } from './valueFromASTUntyped.mjs'; // Create a GraphQL language AST from a JavaScript value.\n\nexport { astFromValue } from './astFromValue.mjs'; // A helper to use within recursive-descent visitors which need to be aware of the GraphQL type system.\n\nexport { TypeInfo, visitWithTypeInfo } from './TypeInfo.mjs'; // Coerces a JavaScript value to a GraphQL type, or produces errors.\n\nexport { coerceInputValue } from './coerceInputValue.mjs'; // Concatenates multiple AST together.\n\nexport { concatAST } from './concatAST.mjs'; // Separates an AST into an AST per Operation.\n\nexport { separateOperations } from './separateOperations.mjs'; // Strips characters that are not significant to the validity or execution of a GraphQL document.\n\nexport { stripIgnoredCharacters } from './stripIgnoredCharacters.mjs'; // Comparators for types\n\nexport {\n  isEqualType,\n  isTypeSubTypeOf,\n  doTypesOverlap,\n} from './typeComparators.mjs'; // Asserts that a string is a valid GraphQL name\n\nexport { assertValidName, isValidNameError } from './assertValidName.mjs'; // Compares two GraphQLSchemas and detects breaking changes.\n\nexport {\n  BreakingChangeType,\n  DangerousChangeType,\n  findBreakingChanges,\n  findDangerousChanges,\n} from './findBreakingChanges.mjs';\n/jsutils/isObjectLike.d.ts/**\n * Return true if `value` is object-like. A value is object-like if it's not\n * `null` and has a `typeof` result of \"object\".\n */\nexport declare function isObjectLike(value: unknown): value is {\n  [key: string]: unknown;\n};\n/validation/specifiedRules.d.ts\u0001import type { SDLValidationRule, ValidationRule } from './ValidationContext';\n/**\n * This set includes all validation rules defined by the GraphQL spec.\n *\n * The order of the rules in this list has been adjusted to lead to the\n * most clear output when encountering multiple validation errors.\n */\nexport declare const specifiedRules: ReadonlyArray<ValidationRule>;\n/**\n * @internal\n */\nexport declare const specifiedSDLRules: ReadonlyArray<SDLValidationRule>;\n/utilities/assertValidName.js\u0004'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.assertValidName = assertValidName;\nexports.isValidNameError = isValidNameError;\n\nvar _devAssert = require('../jsutils/devAssert.js');\n\nvar _GraphQLError = require('../error/GraphQLError.js');\n\nvar _assertName = require('../type/assertName.js');\n\n/* c8 ignore start */\n\n/**\n * Upholds the spec rules about naming.\n * @deprecated Please use `assertName` instead. Will be removed in v17\n */\nfunction assertValidName(name) {\n  const error = isValidNameError(name);\n\n  if (error) {\n    throw error;\n  }\n\n  return name;\n}\n/**\n * Returns an Error if a name is invalid.\n * @deprecated Please use `assertName` instead. Will be removed in v17\n */\n\nfunction isValidNameError(name) {\n  typeof name === 'string' ||\n    (0, _devAssert.devAssert)(false, 'Expected name to be a string.');\n\n  if (name.startsWith('__')) {\n    return new _GraphQLError.GraphQLError(\n      `Name \"${name}\" must not begin with \"__\", which is reserved by GraphQL introspection.`,\n    );\n  }\n\n  try {\n    (0, _assertName.assertName)(name);\n  } catch (error) {\n    return error;\n  }\n}\n/* c8 ignore stop */\n/utilities/TypeInfo.d.ts\bqimport type { Maybe } from '../jsutils/Maybe';\nimport type { ASTNode, FieldNode } from '../language/ast';\nimport type { ASTVisitor } from '../language/visitor';\nimport type {\n  GraphQLArgument,\n  GraphQLCompositeType,\n  GraphQLEnumValue,\n  GraphQLField,\n  GraphQLInputType,\n  GraphQLOutputType,\n  GraphQLType,\n} from '../type/definition';\nimport type { GraphQLDirective } from '../type/directives';\nimport type { GraphQLSchema } from '../type/schema';\n/**\n * TypeInfo is a utility class which, given a GraphQL schema, can keep track\n * of the current field and type definitions at any point in a GraphQL document\n * AST during a recursive descent by calling `enter(node)` and `leave(node)`.\n */\nexport declare class TypeInfo {\n  private _schema;\n  private _typeStack;\n  private _parentTypeStack;\n  private _inputTypeStack;\n  private _fieldDefStack;\n  private _defaultValueStack;\n  private _directive;\n  private _argument;\n  private _enumValue;\n  private _getFieldDef;\n  constructor(\n    schema: GraphQLSchema,\n    /**\n     * Initial type may be provided in rare cases to facilitate traversals\n     *  beginning somewhere other than documents.\n     */\n    initialType?: Maybe<GraphQLType>,\n    /** @deprecated will be removed in 17.0.0 */\n    getFieldDefFn?: GetFieldDefFn,\n  );\n  get [Symbol.toStringTag](): string;\n  getType(): Maybe<GraphQLOutputType>;\n  getParentType(): Maybe<GraphQLCompositeType>;\n  getInputType(): Maybe<GraphQLInputType>;\n  getParentInputType(): Maybe<GraphQLInputType>;\n  getFieldDef(): Maybe<GraphQLField<unknown, unknown>>;\n  getDefaultValue(): Maybe<unknown>;\n  getDirective(): Maybe<GraphQLDirective>;\n  getArgument(): Maybe<GraphQLArgument>;\n  getEnumValue(): Maybe<GraphQLEnumValue>;\n  enter(node: ASTNode): void;\n  leave(node: ASTNode): void;\n}\ndeclare type GetFieldDefFn = (\n  schema: GraphQLSchema,\n  parentType: GraphQLType,\n  fieldNode: FieldNode,\n) => Maybe<GraphQLField<unknown, unknown>>;\n/**\n * Creates a new visitor instance which maintains a provided TypeInfo instance\n * along with visiting visitor.\n */\nexport declare function visitWithTypeInfo(\n  typeInfo: TypeInfo,\n  visitor: ASTVisitor,\n): ASTVisitor;\nexport {};\n4/validation/rules/UniqueDirectivesPerLocationRule.js\u000b.'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.UniqueDirectivesPerLocationRule = UniqueDirectivesPerLocationRule;\n\nvar _GraphQLError = require('../../error/GraphQLError.js');\n\nvar _kinds = require('../../language/kinds.js');\n\nvar _predicates = require('../../language/predicates.js');\n\nvar _directives = require('../../type/directives.js');\n\n/**\n * Unique directive names per location\n *\n * A GraphQL document is only valid if all non-repeatable directives at\n * a given location are uniquely named.\n *\n * See https://spec.graphql.org/draft/#sec-Directives-Are-Unique-Per-Location\n */\nfunction UniqueDirectivesPerLocationRule(context) {\n  const uniqueDirectiveMap = Object.create(null);\n  const schema = context.getSchema();\n  const definedDirectives = schema\n    ? schema.getDirectives()\n    : _directives.specifiedDirectives;\n\n  for (const directive of definedDirectives) {\n    uniqueDirectiveMap[directive.name] = !directive.isRepeatable;\n  }\n\n  const astDefinitions = context.getDocument().definitions;\n\n  for (const def of astDefinitions) {\n    if (def.kind === _kinds.Kind.DIRECTIVE_DEFINITION) {\n      uniqueDirectiveMap[def.name.value] = !def.repeatable;\n    }\n  }\n\n  const schemaDirectives = Object.create(null);\n  const typeDirectivesMap = Object.create(null);\n  return {\n    // Many different AST nodes may contain directives. Rather than listing\n    // them all, just listen for entering any node, and check to see if it\n    // defines any directives.\n    enter(node) {\n      if (!('directives' in node) || !node.directives) {\n        return;\n      }\n\n      let seenDirectives;\n\n      if (\n        node.kind === _kinds.Kind.SCHEMA_DEFINITION ||\n        node.kind === _kinds.Kind.SCHEMA_EXTENSION\n      ) {\n        seenDirectives = schemaDirectives;\n      } else if (\n        (0, _predicates.isTypeDefinitionNode)(node) ||\n        (0, _predicates.isTypeExtensionNode)(node)\n      ) {\n        const typeName = node.name.value;\n        seenDirectives = typeDirectivesMap[typeName];\n\n        if (seenDirectives === undefined) {\n          typeDirectivesMap[typeName] = seenDirectives = Object.create(null);\n        }\n      } else {\n        seenDirectives = Object.create(null);\n      }\n\n      for (const directive of node.directives) {\n        const directiveName = directive.name.value;\n\n        if (uniqueDirectiveMap[directiveName]) {\n          if (seenDirectives[directiveName]) {\n            context.reportError(\n              new _GraphQLError.GraphQLError(\n                `The directive \"@${directiveName}\" can only be used once at this location.`,\n                {\n                  nodes: [seenDirectives[directiveName], directive],\n                },\n              ),\n            );\n          } else {\n            seenDirectives[directiveName] = directive;\n          }\n        }\n      }\n    },\n  };\n}\n/utilities/TypeInfo.mjs$import { isNode } from '../language/ast.mjs';\nimport { Kind } from '../language/kinds.mjs';\nimport { getEnterLeaveForKind } from '../language/visitor.mjs';\nimport {\n  getNamedType,\n  getNullableType,\n  isCompositeType,\n  isEnumType,\n  isInputObjectType,\n  isInputType,\n  isInterfaceType,\n  isListType,\n  isObjectType,\n  isOutputType,\n} from '../type/definition.mjs';\nimport {\n  SchemaMetaFieldDef,\n  TypeMetaFieldDef,\n  TypeNameMetaFieldDef,\n} from '../type/introspection.mjs';\nimport { typeFromAST } from './typeFromAST.mjs';\n/**\n * TypeInfo is a utility class which, given a GraphQL schema, can keep track\n * of the current field and type definitions at any point in a GraphQL document\n * AST during a recursive descent by calling `enter(node)` and `leave(node)`.\n */\n\nexport class TypeInfo {\n  constructor(\n    schema,\n    /**\n     * Initial type may be provided in rare cases to facilitate traversals\n     *  beginning somewhere other than documents.\n     */\n    initialType,\n    /** @deprecated will be removed in 17.0.0 */\n    getFieldDefFn,\n  ) {\n    this._schema = schema;\n    this._typeStack = [];\n    this._parentTypeStack = [];\n    this._inputTypeStack = [];\n    this._fieldDefStack = [];\n    this._defaultValueStack = [];\n    this._directive = null;\n    this._argument = null;\n    this._enumValue = null;\n    this._getFieldDef =\n      getFieldDefFn !== null && getFieldDefFn !== void 0\n        ? getFieldDefFn\n        : getFieldDef;\n\n    if (initialType) {\n      if (isInputType(initialType)) {\n        this._inputTypeStack.push(initialType);\n      }\n\n      if (isCompositeType(initialType)) {\n        this._parentTypeStack.push(initialType);\n      }\n\n      if (isOutputType(initialType)) {\n        this._typeStack.push(initialType);\n      }\n    }\n  }\n\n  get [Symbol.toStringTag]() {\n    return 'TypeInfo';\n  }\n\n  getType() {\n    if (this._typeStack.length > 0) {\n      return this._typeStack[this._typeStack.length - 1];\n    }\n  }\n\n  getParentType() {\n    if (this._parentTypeStack.length > 0) {\n      return this._parentTypeStack[this._parentTypeStack.length - 1];\n    }\n  }\n\n  getInputType() {\n    if (this._inputTypeStack.length > 0) {\n      return this._inputTypeStack[this._inputTypeStack.length - 1];\n    }\n  }\n\n  getParentInputType() {\n    if (this._inputTypeStack.length > 1) {\n      return this._inputTypeStack[this._inputTypeStack.length - 2];\n    }\n  }\n\n  getFieldDef() {\n    if (this._fieldDefStack.length > 0) {\n      return this._fieldDefStack[this._fieldDefStack.length - 1];\n    }\n  }\n\n  getDefaultValue() {\n    if (this._defaultValueStack.length > 0) {\n      return this._defaultValueStack[this._defaultValueStack.length - 1];\n    }\n  }\n\n  getDirective() {\n    return this._directive;\n  }\n\n  getArgument() {\n    return this._argument;\n  }\n\n  getEnumValue() {\n    return this._enumValue;\n  }\n\n  enter(node) {\n    const schema = this._schema; // Note: many of the types below are explicitly typed as \"unknown\" to drop\n    // any assumptions of a valid schema to ensure runtime types are properly\n    // checked before continuing since TypeInfo is used as part of validation\n    // which occurs before guarantees of schema and document validity.\n\n    switch (node.kind) {\n      case Kind.SELECTION_SET: {\n        const namedType = getNamedType(this.getType());\n\n        this._parentTypeStack.push(\n          isCompositeType(namedType) ? namedType : undefined,\n        );\n\n        break;\n      }\n\n      case Kind.FIELD: {\n        const parentType = this.getParentType();\n        let fieldDef;\n        let fieldType;\n\n        if (parentType) {\n          fieldDef = this._getFieldDef(schema, parentType, node);\n\n          if (fieldDef) {\n            fieldType = fieldDef.type;\n          }\n        }\n\n        this._fieldDefStack.push(fieldDef);\n\n        this._typeStack.push(isOutputType(fieldType) ? fieldType : undefined);\n\n        break;\n      }\n\n      case Kind.DIRECTIVE:\n        this._directive = schema.getDirective(node.name.value);\n        break;\n\n      case Kind.OPERATION_DEFINITION: {\n        const rootType = schema.getRootType(node.operation);\n\n        this._typeStack.push(isObjectType(rootType) ? rootType : undefined);\n\n        break;\n      }\n\n      case Kind.INLINE_FRAGMENT:\n      case Kind.FRAGMENT_DEFINITION: {\n        const typeConditionAST = node.typeCondition;\n        const outputType = typeConditionAST\n          ? typeFromAST(schema, typeConditionAST)\n          : getNamedType(this.getType());\n\n        this._typeStack.push(isOutputType(outputType) ? outputType : undefined);\n\n        break;\n      }\n\n      case Kind.VARIABLE_DEFINITION: {\n        const inputType = typeFromAST(schema, node.type);\n\n        this._inputTypeStack.push(\n          isInputType(inputType) ? inputType : undefined,\n        );\n\n        break;\n      }\n\n      case Kind.ARGUMENT: {\n        var _this$getDirective;\n\n        let argDef;\n        let argType;\n        const fieldOrDirective =\n          (_this$getDirective = this.getDirective()) !== null &&\n          _this$getDirective !== void 0\n            ? _this$getDirective\n            : this.getFieldDef();\n\n        if (fieldOrDirective) {\n          argDef = fieldOrDirective.args.find(\n            (arg) => arg.name === node.name.value,\n          );\n\n          if (argDef) {\n            argType = argDef.type;\n          }\n        }\n\n        this._argument = argDef;\n\n        this._defaultValueStack.push(argDef ? argDef.defaultValue : undefined);\n\n        this._inputTypeStack.push(isInputType(argType) ? argType : undefined);\n\n        break;\n      }\n\n      case Kind.LIST: {\n        const listType = getNullableType(this.getInputType());\n        const itemType = isListType(listType) ? listType.ofType : listType; // List positions never have a default value.\n\n        this._defaultValueStack.push(undefined);\n\n        this._inputTypeStack.push(isInputType(itemType) ? itemType : undefined);\n\n        break;\n      }\n\n      case Kind.OBJECT_FIELD: {\n        const objectType = getNamedType(this.getInputType());\n        let inputFieldType;\n        let inputField;\n\n        if (isInputObjectType(objectType)) {\n          inputField = objectType.getFields()[node.name.value];\n\n          if (inputField) {\n            inputFieldType = inputField.type;\n          }\n        }\n\n        this._defaultValueStack.push(\n          inputField ? inputField.defaultValue : undefined,\n        );\n\n        this._inputTypeStack.push(\n          isInputType(inputFieldType) ? inputFieldType : undefined,\n        );\n\n        break;\n      }\n\n      case Kind.ENUM: {\n        const enumType = getNamedType(this.getInputType());\n        let enumValue;\n\n        if (isEnumType(enumType)) {\n          enumValue = enumType.getValue(node.value);\n        }\n\n        this._enumValue = enumValue;\n        break;\n      }\n\n      default: // Ignore other nodes\n    }\n  }\n\n  leave(node) {\n    switch (node.kind) {\n      case Kind.SELECTION_SET:\n        this._parentTypeStack.pop();\n\n        break;\n\n      case Kind.FIELD:\n        this._fieldDefStack.pop();\n\n        this._typeStack.pop();\n\n        break;\n\n      case Kind.DIRECTIVE:\n        this._directive = null;\n        break;\n\n      case Kind.OPERATION_DEFINITION:\n      case Kind.INLINE_FRAGMENT:\n      case Kind.FRAGMENT_DEFINITION:\n        this._typeStack.pop();\n\n        break;\n\n      case Kind.VARIABLE_DEFINITION:\n        this._inputTypeStack.pop();\n\n        break;\n\n      case Kind.ARGUMENT:\n        this._argument = null;\n\n        this._defaultValueStack.pop();\n\n        this._inputTypeStack.pop();\n\n        break;\n\n      case Kind.LIST:\n      case Kind.OBJECT_FIELD:\n        this._defaultValueStack.pop();\n\n        this._inputTypeStack.pop();\n\n        break;\n\n      case Kind.ENUM:\n        this._enumValue = null;\n        break;\n\n      default: // Ignore other nodes\n    }\n  }\n}\n\n/**\n * Not exactly the same as the executor's definition of getFieldDef, in this\n * statically evaluated environment we do not always have an Object type,\n * and need to handle Interface and Union types.\n */\nfunction getFieldDef(schema, parentType, fieldNode) {\n  const name = fieldNode.name.value;\n\n  if (\n    name === SchemaMetaFieldDef.name &&\n    schema.getQueryType() === parentType\n  ) {\n    return SchemaMetaFieldDef;\n  }\n\n  if (name === TypeMetaFieldDef.name && schema.getQueryType() === parentType) {\n    return TypeMetaFieldDef;\n  }\n\n  if (name === TypeNameMetaFieldDef.name && isCompositeType(parentType)) {\n    return TypeNameMetaFieldDef;\n  }\n\n  if (isObjectType(parentType) || isInterfaceType(parentType)) {\n    return parentType.getFields()[name];\n  }\n}\n/**\n * Creates a new visitor instance which maintains a provided TypeInfo instance\n * along with visiting visitor.\n */\n\nexport function visitWithTypeInfo(typeInfo, visitor) {\n  return {\n    enter(...args) {\n      const node = args[0];\n      typeInfo.enter(node);\n      const fn = getEnterLeaveForKind(visitor, node.kind).enter;\n\n      if (fn) {\n        const result = fn.apply(visitor, args);\n\n        if (result !== undefined) {\n          typeInfo.leave(node);\n\n          if (isNode(result)) {\n            typeInfo.enter(result);\n          }\n        }\n\n        return result;\n      }\n    },\n\n    leave(...args) {\n      const node = args[0];\n      const fn = getEnterLeaveForKind(visitor, node.kind).leave;\n      let result;\n\n      if (fn) {\n        result = fn.apply(visitor, args);\n      }\n\n      typeInfo.leave(node);\n      return result;\n    },\n  };\n}\n-/validation/rules/KnownArgumentNamesRule.d.ts\u0002import type { ASTVisitor } from '../../language/visitor';\nimport type {\n  SDLValidationContext,\n  ValidationContext,\n} from '../ValidationContext';\n/**\n * Known argument names\n *\n * A GraphQL field is only valid if all supplied arguments are defined by\n * that field.\n *\n * See https://spec.graphql.org/draft/#sec-Argument-Names\n * See https://spec.graphql.org/draft/#sec-Directives-Are-In-Valid-Locations\n */\nexport declare function KnownArgumentNamesRule(\n  context: ValidationContext,\n): ASTVisitor;\n/**\n * @internal\n */\nexport declare function KnownArgumentNamesOnDirectivesRule(\n  context: ValidationContext | SDLValidationContext,\n): ASTVisitor;\n/language/source.d.ts\u0003^interface Location {\n  line: number;\n  column: number;\n}\n/**\n * A representation of source input to GraphQL. The `name` and `locationOffset` parameters are\n * optional, but they are useful for clients who store GraphQL documents in source files.\n * For example, if the GraphQL input starts at line 40 in a file named `Foo.graphql`, it might\n * be useful for `name` to be `\"Foo.graphql\"` and location to be `{ line: 40, column: 1 }`.\n * The `line` and `column` properties in `locationOffset` are 1-indexed.\n */\nexport declare class Source {\n  body: string;\n  name: string;\n  locationOffset: Location;\n  constructor(body: string, name?: string, locationOffset?: Location);\n  get [Symbol.toStringTag](): string;\n}\n/**\n * Test if the given value is a Source object.\n *\n * @internal\n */\nexport declare function isSource(source: unknown): source is Source;\nexport {};\n*/validation/rules/NoUnusedFragmentsRule.js\u0005'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.NoUnusedFragmentsRule = NoUnusedFragmentsRule;\n\nvar _GraphQLError = require('../../error/GraphQLError.js');\n\n/**\n * No unused fragments\n *\n * A GraphQL document is only valid if all fragment definitions are spread\n * within operations, or spread within other fragments spread within operations.\n *\n * See https://spec.graphql.org/draft/#sec-Fragments-Must-Be-Used\n */\nfunction NoUnusedFragmentsRule(context) {\n  const operationDefs = [];\n  const fragmentDefs = [];\n  return {\n    OperationDefinition(node) {\n      operationDefs.push(node);\n      return false;\n    },\n\n    FragmentDefinition(node) {\n      fragmentDefs.push(node);\n      return false;\n    },\n\n    Document: {\n      leave() {\n        const fragmentNameUsed = Object.create(null);\n\n        for (const operation of operationDefs) {\n          for (const fragment of context.getRecursivelyReferencedFragments(\n            operation,\n          )) {\n            fragmentNameUsed[fragment.name.value] = true;\n          }\n        }\n\n        for (const fragmentDef of fragmentDefs) {\n          const fragName = fragmentDef.name.value;\n\n          if (fragmentNameUsed[fragName] !== true) {\n            context.reportError(\n              new _GraphQLError.GraphQLError(\n                `Fragment \"${fragName}\" is never used.`,\n                {\n                  nodes: fragmentDef,\n                },\n              ),\n            );\n          }\n        }\n      },\n    },\n  };\n}\n/jsutils/PromiseOrValue.d.ts8export declare type PromiseOrValue<T> = Promise<T> | T;\n/jsutils/groupBy.mjs\u0001w/**\n * Groups array items into a Map, given a function to produce grouping key.\n */\nexport function groupBy(list, keyFn) {\n  const result = new Map();\n\n  for (const item of list) {\n    const key = keyFn(item);\n    const group = result.get(key);\n\n    if (group === undefined) {\n      result.set(key, [item]);\n    } else {\n      group.push(item);\n    }\n  }\n\n  return result;\n}\n5/validation/rules/VariablesInAllowedPositionRule.d.ts\u0001import type { ASTVisitor } from '../../language/visitor';\nimport type { ValidationContext } from '../ValidationContext';\n/**\n * Variables in allowed position\n *\n * Variable usages must be compatible with the arguments they are passed to.\n *\n * See https://spec.graphql.org/draft/#sec-All-Variable-Usages-are-Allowed\n */\nexport declare function VariablesInAllowedPositionRule(\n  context: ValidationContext,\n): ASTVisitor;\n3/validation/rules/custom/NoDeprecatedCustomRule.mjs\u000eimport { invariant } from '../../../jsutils/invariant.mjs';\nimport { GraphQLError } from '../../../error/GraphQLError.mjs';\nimport { getNamedType, isInputObjectType } from '../../../type/definition.mjs';\n\n/**\n * No deprecated\n *\n * A GraphQL document is only valid if all selected fields and all used enum values have not been\n * deprecated.\n *\n * Note: This rule is optional and is not part of the Validation section of the GraphQL\n * Specification. The main purpose of this rule is detection of deprecated usages and not\n * necessarily to forbid their use when querying a service.\n */\nexport function NoDeprecatedCustomRule(context) {\n  return {\n    Field(node) {\n      const fieldDef = context.getFieldDef();\n      const deprecationReason =\n        fieldDef === null || fieldDef === void 0\n          ? void 0\n          : fieldDef.deprecationReason;\n\n      if (fieldDef && deprecationReason != null) {\n        const parentType = context.getParentType();\n        parentType != null || invariant(false);\n        context.reportError(\n          new GraphQLError(\n            `The field ${parentType.name}.${fieldDef.name} is deprecated. ${deprecationReason}`,\n            {\n              nodes: node,\n            },\n          ),\n        );\n      }\n    },\n\n    Argument(node) {\n      const argDef = context.getArgument();\n      const deprecationReason =\n        argDef === null || argDef === void 0\n          ? void 0\n          : argDef.deprecationReason;\n\n      if (argDef && deprecationReason != null) {\n        const directiveDef = context.getDirective();\n\n        if (directiveDef != null) {\n          context.reportError(\n            new GraphQLError(\n              `Directive \"@${directiveDef.name}\" argument \"${argDef.name}\" is deprecated. ${deprecationReason}`,\n              {\n                nodes: node,\n              },\n            ),\n          );\n        } else {\n          const parentType = context.getParentType();\n          const fieldDef = context.getFieldDef();\n          (parentType != null && fieldDef != null) || invariant(false);\n          context.reportError(\n            new GraphQLError(\n              `Field \"${parentType.name}.${fieldDef.name}\" argument \"${argDef.name}\" is deprecated. ${deprecationReason}`,\n              {\n                nodes: node,\n              },\n            ),\n          );\n        }\n      }\n    },\n\n    ObjectField(node) {\n      const inputObjectDef = getNamedType(context.getParentInputType());\n\n      if (isInputObjectType(inputObjectDef)) {\n        const inputFieldDef = inputObjectDef.getFields()[node.name.value];\n        const deprecationReason =\n          inputFieldDef === null || inputFieldDef === void 0\n            ? void 0\n            : inputFieldDef.deprecationReason;\n\n        if (deprecationReason != null) {\n          context.reportError(\n            new GraphQLError(\n              `The input field ${inputObjectDef.name}.${inputFieldDef.name} is deprecated. ${deprecationReason}`,\n              {\n                nodes: node,\n              },\n            ),\n          );\n        }\n      }\n    },\n\n    EnumValue(node) {\n      const enumValueDef = context.getEnumValue();\n      const deprecationReason =\n        enumValueDef === null || enumValueDef === void 0\n          ? void 0\n          : enumValueDef.deprecationReason;\n\n      if (enumValueDef && deprecationReason != null) {\n        const enumTypeDef = getNamedType(context.getInputType());\n        enumTypeDef != null || invariant(false);\n        context.reportError(\n          new GraphQLError(\n            `The enum value \"${enumTypeDef.name}.${enumValueDef.name}\" is deprecated. ${deprecationReason}`,\n            {\n              nodes: node,\n            },\n          ),\n        );\n      }\n    },\n  };\n}\n/jsutils/ObjMap.jsQ'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\n/language/predicates.js\fI'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.isConstValueNode = isConstValueNode;\nexports.isDefinitionNode = isDefinitionNode;\nexports.isExecutableDefinitionNode = isExecutableDefinitionNode;\nexports.isSelectionNode = isSelectionNode;\nexports.isTypeDefinitionNode = isTypeDefinitionNode;\nexports.isTypeExtensionNode = isTypeExtensionNode;\nexports.isTypeNode = isTypeNode;\nexports.isTypeSystemDefinitionNode = isTypeSystemDefinitionNode;\nexports.isTypeSystemExtensionNode = isTypeSystemExtensionNode;\nexports.isValueNode = isValueNode;\n\nvar _kinds = require('./kinds.js');\n\nfunction isDefinitionNode(node) {\n  return (\n    isExecutableDefinitionNode(node) ||\n    isTypeSystemDefinitionNode(node) ||\n    isTypeSystemExtensionNode(node)\n  );\n}\n\nfunction isExecutableDefinitionNode(node) {\n  return (\n    node.kind === _kinds.Kind.OPERATION_DEFINITION ||\n    node.kind === _kinds.Kind.FRAGMENT_DEFINITION\n  );\n}\n\nfunction isSelectionNode(node) {\n  return (\n    node.kind === _kinds.Kind.FIELD ||\n    node.kind === _kinds.Kind.FRAGMENT_SPREAD ||\n    node.kind === _kinds.Kind.INLINE_FRAGMENT\n  );\n}\n\nfunction isValueNode(node) {\n  return (\n    node.kind === _kinds.Kind.VARIABLE ||\n    node.kind === _kinds.Kind.INT ||\n    node.kind === _kinds.Kind.FLOAT ||\n    node.kind === _kinds.Kind.STRING ||\n    node.kind === _kinds.Kind.BOOLEAN ||\n    node.kind === _kinds.Kind.NULL ||\n    node.kind === _kinds.Kind.ENUM ||\n    node.kind === _kinds.Kind.LIST ||\n    node.kind === _kinds.Kind.OBJECT\n  );\n}\n\nfunction isConstValueNode(node) {\n  return (\n    isValueNode(node) &&\n    (node.kind === _kinds.Kind.LIST\n      ? node.values.some(isConstValueNode)\n      : node.kind === _kinds.Kind.OBJECT\n      ? node.fields.some((field) => isConstValueNode(field.value))\n      : node.kind !== _kinds.Kind.VARIABLE)\n  );\n}\n\nfunction isTypeNode(node) {\n  return (\n    node.kind === _kinds.Kind.NAMED_TYPE ||\n    node.kind === _kinds.Kind.LIST_TYPE ||\n    node.kind === _kinds.Kind.NON_NULL_TYPE\n  );\n}\n\nfunction isTypeSystemDefinitionNode(node) {\n  return (\n    node.kind === _kinds.Kind.SCHEMA_DEFINITION ||\n    isTypeDefinitionNode(node) ||\n    node.kind === _kinds.Kind.DIRECTIVE_DEFINITION\n  );\n}\n\nfunction isTypeDefinitionNode(node) {\n  return (\n    node.kind === _kinds.Kind.SCALAR_TYPE_DEFINITION ||\n    node.kind === _kinds.Kind.OBJECT_TYPE_DEFINITION ||\n    node.kind === _kinds.Kind.INTERFACE_TYPE_DEFINITION ||\n    node.kind === _kinds.Kind.UNION_TYPE_DEFINITION ||\n    node.kind === _kinds.Kind.ENUM_TYPE_DEFINITION ||\n    node.kind === _kinds.Kind.INPUT_OBJECT_TYPE_DEFINITION\n  );\n}\n\nfunction isTypeSystemExtensionNode(node) {\n  return (\n    node.kind === _kinds.Kind.SCHEMA_EXTENSION || isTypeExtensionNode(node)\n  );\n}\n\nfunction isTypeExtensionNode(node) {\n  return (\n    node.kind === _kinds.Kind.SCALAR_TYPE_EXTENSION ||\n    node.kind === _kinds.Kind.OBJECT_TYPE_EXTENSION ||\n    node.kind === _kinds.Kind.INTERFACE_TYPE_EXTENSION ||\n    node.kind === _kinds.Kind.UNION_TYPE_EXTENSION ||\n    node.kind === _kinds.Kind.ENUM_TYPE_EXTENSION ||\n    node.kind === _kinds.Kind.INPUT_OBJECT_TYPE_EXTENSION\n  );\n}\n/utilities/typeFromAST.mjs\u0002@import { Kind } from '../language/kinds.mjs';\nimport { GraphQLList, GraphQLNonNull } from '../type/definition.mjs';\nexport function typeFromAST(schema, typeNode) {\n  switch (typeNode.kind) {\n    case Kind.LIST_TYPE: {\n      const innerType = typeFromAST(schema, typeNode.type);\n      return innerType && new GraphQLList(innerType);\n    }\n\n    case Kind.NON_NULL_TYPE: {\n      const innerType = typeFromAST(schema, typeNode.type);\n      return innerType && new GraphQLNonNull(innerType);\n    }\n\n    case Kind.NAMED_TYPE:\n      return schema.getType(typeNode.name.value);\n  }\n}\n/language/parser.jsŞ\u0019'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.Parser = void 0;\nexports.parse = parse;\nexports.parseConstValue = parseConstValue;\nexports.parseType = parseType;\nexports.parseValue = parseValue;\n\nvar _syntaxError = require('../error/syntaxError.js');\n\nvar _ast = require('./ast.js');\n\nvar _directiveLocation = require('./directiveLocation.js');\n\nvar _kinds = require('./kinds.js');\n\nvar _lexer = require('./lexer.js');\n\nvar _source = require('./source.js');\n\nvar _tokenKind = require('./tokenKind.js');\n\n/**\n * Given a GraphQL source, parses it into a Document.\n * Throws GraphQLError if a syntax error is encountered.\n */\nfunction parse(source, options) {\n  const parser = new Parser(source, options);\n  return parser.parseDocument();\n}\n/**\n * Given a string containing a GraphQL value (ex. `[42]`), parse the AST for\n * that value.\n * Throws GraphQLError if a syntax error is encountered.\n *\n * This is useful within tools that operate upon GraphQL Values directly and\n * in isolation of complete GraphQL documents.\n *\n * Consider providing the results to the utility function: valueFromAST().\n */\n\nfunction parseValue(source, options) {\n  const parser = new Parser(source, options);\n  parser.expectToken(_tokenKind.TokenKind.SOF);\n  const value = parser.parseValueLiteral(false);\n  parser.expectToken(_tokenKind.TokenKind.EOF);\n  return value;\n}\n/**\n * Similar to parseValue(), but raises a parse error if it encounters a\n * variable. The return type will be a constant value.\n */\n\nfunction parseConstValue(source, options) {\n  const parser = new Parser(source, options);\n  parser.expectToken(_tokenKind.TokenKind.SOF);\n  const value = parser.parseConstValueLiteral();\n  parser.expectToken(_tokenKind.TokenKind.EOF);\n  return value;\n}\n/**\n * Given a string containing a GraphQL Type (ex. `[Int!]`), parse the AST for\n * that type.\n * Throws GraphQLError if a syntax error is encountered.\n *\n * This is useful within tools that operate upon GraphQL Types directly and\n * in isolation of complete GraphQL documents.\n *\n * Consider providing the results to the utility function: typeFromAST().\n */\n\nfunction parseType(source, options) {\n  const parser = new Parser(source, options);\n  parser.expectToken(_tokenKind.TokenKind.SOF);\n  const type = parser.parseTypeReference();\n  parser.expectToken(_tokenKind.TokenKind.EOF);\n  return type;\n}\n/**\n * This class is exported only to assist people in implementing their own parsers\n * without duplicating too much code and should be used only as last resort for cases\n * such as experimental syntax or if certain features could not be contributed upstream.\n *\n * It is still part of the internal API and is versioned, so any changes to it are never\n * considered breaking changes. If you still need to support multiple versions of the\n * library, please use the `versionInfo` variable for version detection.\n *\n * @internal\n */\n\nclass Parser {\n  constructor(source, options = {}) {\n    const sourceObj = (0, _source.isSource)(source)\n      ? source\n      : new _source.Source(source);\n    this._lexer = new _lexer.Lexer(sourceObj);\n    this._options = options;\n    this._tokenCounter = 0;\n  }\n  /**\n   * Converts a name lex token into a name parse node.\n   */\n\n  parseName() {\n    const token = this.expectToken(_tokenKind.TokenKind.NAME);\n    return this.node(token, {\n      kind: _kinds.Kind.NAME,\n      value: token.value,\n    });\n  } // Implements the parsing rules in the Document section.\n\n  /**\n   * Document : Definition+\n   */\n\n  parseDocument() {\n    return this.node(this._lexer.token, {\n      kind: _kinds.Kind.DOCUMENT,\n      definitions: this.many(\n        _tokenKind.TokenKind.SOF,\n        this.parseDefinition,\n        _tokenKind.TokenKind.EOF,\n      ),\n    });\n  }\n  /**\n   * Definition :\n   *   - ExecutableDefinition\n   *   - TypeSystemDefinition\n   *   - TypeSystemExtension\n   *\n   * ExecutableDefinition :\n   *   - OperationDefinition\n   *   - FragmentDefinition\n   *\n   * TypeSystemDefinition :\n   *   - SchemaDefinition\n   *   - TypeDefinition\n   *   - DirectiveDefinition\n   *\n   * TypeDefinition :\n   *   - ScalarTypeDefinition\n   *   - ObjectTypeDefinition\n   *   - InterfaceTypeDefinition\n   *   - UnionTypeDefinition\n   *   - EnumTypeDefinition\n   *   - InputObjectTypeDefinition\n   */\n\n  parseDefinition() {\n    if (this.peek(_tokenKind.TokenKind.BRACE_L)) {\n      return this.parseOperationDefinition();\n    } // Many definitions begin with a description and require a lookahead.\n\n    const hasDescription = this.peekDescription();\n    const keywordToken = hasDescription\n      ? this._lexer.lookahead()\n      : this._lexer.token;\n\n    if (keywordToken.kind === _tokenKind.TokenKind.NAME) {\n      switch (keywordToken.value) {\n        case 'schema':\n          return this.parseSchemaDefinition();\n\n        case 'scalar':\n          return this.parseScalarTypeDefinition();\n\n        case 'type':\n          return this.parseObjectTypeDefinition();\n\n        case 'interface':\n          return this.parseInterfaceTypeDefinition();\n\n        case 'union':\n          return this.parseUnionTypeDefinition();\n\n        case 'enum':\n          return this.parseEnumTypeDefinition();\n\n        case 'input':\n          return this.parseInputObjectTypeDefinition();\n\n        case 'directive':\n          return this.parseDirectiveDefinition();\n      }\n\n      if (hasDescription) {\n        throw (0, _syntaxError.syntaxError)(\n          this._lexer.source,\n          this._lexer.token.start,\n          'Unexpected description, descriptions are supported only on type definitions.',\n        );\n      }\n\n      switch (keywordToken.value) {\n        case 'query':\n        case 'mutation':\n        case 'subscription':\n          return this.parseOperationDefinition();\n\n        case 'fragment':\n          return this.parseFragmentDefinition();\n\n        case 'extend':\n          return this.parseTypeSystemExtension();\n      }\n    }\n\n    throw this.unexpected(keywordToken);\n  } // Implements the parsing rules in the Operations section.\n\n  /**\n   * OperationDefinition :\n   *  - SelectionSet\n   *  - OperationType Name? VariableDefinitions? Directives? SelectionSet\n   */\n\n  parseOperationDefinition() {\n    const start = this._lexer.token;\n\n    if (this.peek(_tokenKind.TokenKind.BRACE_L)) {\n      return this.node(start, {\n        kind: _kinds.Kind.OPERATION_DEFINITION,\n        operation: _ast.OperationTypeNode.QUERY,\n        name: undefined,\n        variableDefinitions: [],\n        directives: [],\n        selectionSet: this.parseSelectionSet(),\n      });\n    }\n\n    const operation = this.parseOperationType();\n    let name;\n\n    if (this.peek(_tokenKind.TokenKind.NAME)) {\n      name = this.parseName();\n    }\n\n    return this.node(start, {\n      kind: _kinds.Kind.OPERATION_DEFINITION,\n      operation,\n      name,\n      variableDefinitions: this.parseVariableDefinitions(),\n      directives: this.parseDirectives(false),\n      selectionSet: this.parseSelectionSet(),\n    });\n  }\n  /**\n   * OperationType : one of query mutation subscription\n   */\n\n  parseOperationType() {\n    const operationToken = this.expectToken(_tokenKind.TokenKind.NAME);\n\n    switch (operationToken.value) {\n      case 'query':\n        return _ast.OperationTypeNode.QUERY;\n\n      case 'mutation':\n        return _ast.OperationTypeNode.MUTATION;\n\n      case 'subscription':\n        return _ast.OperationTypeNode.SUBSCRIPTION;\n    }\n\n    throw this.unexpected(operationToken);\n  }\n  /**\n   * VariableDefinitions : ( VariableDefinition+ )\n   */\n\n  parseVariableDefinitions() {\n    return this.optionalMany(\n      _tokenKind.TokenKind.PAREN_L,\n      this.parseVariableDefinition,\n      _tokenKind.TokenKind.PAREN_R,\n    );\n  }\n  /**\n   * VariableDefinition : Variable : Type DefaultValue? Directives[Const]?\n   */\n\n  parseVariableDefinition() {\n    return this.node(this._lexer.token, {\n      kind: _kinds.Kind.VARIABLE_DEFINITION,\n      variable: this.parseVariable(),\n      type:\n        (this.expectToken(_tokenKind.TokenKind.COLON),\n        this.parseTypeReference()),\n      defaultValue: this.expectOptionalToken(_tokenKind.TokenKind.EQUALS)\n        ? this.parseConstValueLiteral()\n        : undefined,\n      directives: this.parseConstDirectives(),\n    });\n  }\n  /**\n   * Variable : $ Name\n   */\n\n  parseVariable() {\n    const start = this._lexer.token;\n    this.expectToken(_tokenKind.TokenKind.DOLLAR);\n    return this.node(start, {\n      kind: _kinds.Kind.VARIABLE,\n      name: this.parseName(),\n    });\n  }\n  /**\n   * ```\n   * SelectionSet : { Selection+ }\n   * ```\n   */\n\n  parseSelectionSet() {\n    return this.node(this._lexer.token, {\n      kind: _kinds.Kind.SELECTION_SET,\n      selections: this.many(\n        _tokenKind.TokenKind.BRACE_L,\n        this.parseSelection,\n        _tokenKind.TokenKind.BRACE_R,\n      ),\n    });\n  }\n  /**\n   * Selection :\n   *   - Field\n   *   - FragmentSpread\n   *   - InlineFragment\n   */\n\n  parseSelection() {\n    return this.peek(_tokenKind.TokenKind.SPREAD)\n      ? this.parseFragment()\n      : this.parseField();\n  }\n  /**\n   * Field : Alias? Name Arguments? Directives? SelectionSet?\n   *\n   * Alias : Name :\n   */\n\n  parseField() {\n    const start = this._lexer.token;\n    const nameOrAlias = this.parseName();\n    let alias;\n    let name;\n\n    if (this.expectOptionalToken(_tokenKind.TokenKind.COLON)) {\n      alias = nameOrAlias;\n      name = this.parseName();\n    } else {\n      name = nameOrAlias;\n    }\n\n    return this.node(start, {\n      kind: _kinds.Kind.FIELD,\n      alias,\n      name,\n      arguments: this.parseArguments(false),\n      directives: this.parseDirectives(false),\n      selectionSet: this.peek(_tokenKind.TokenKind.BRACE_L)\n        ? this.parseSelectionSet()\n        : undefined,\n    });\n  }\n  /**\n   * Arguments[Const] : ( Argument[?Const]+ )\n   */\n\n  parseArguments(isConst) {\n    const item = isConst ? this.parseConstArgument : this.parseArgument;\n    return this.optionalMany(\n      _tokenKind.TokenKind.PAREN_L,\n      item,\n      _tokenKind.TokenKind.PAREN_R,\n    );\n  }\n  /**\n   * Argument[Const] : Name : Value[?Const]\n   */\n\n  parseArgument(isConst = false) {\n    const start = this._lexer.token;\n    const name = this.parseName();\n    this.expectToken(_tokenKind.TokenKind.COLON);\n    return this.node(start, {\n      kind: _kinds.Kind.ARGUMENT,\n      name,\n      value: this.parseValueLiteral(isConst),\n    });\n  }\n\n  parseConstArgument() {\n    return this.parseArgument(true);\n  } // Implements the parsing rules in the Fragments section.\n\n  /**\n   * Corresponds to both FragmentSpread and InlineFragment in the spec.\n   *\n   * FragmentSpread : ... FragmentName Directives?\n   *\n   * InlineFragment : ... TypeCondition? Directives? SelectionSet\n   */\n\n  parseFragment() {\n    const start = this._lexer.token;\n    this.expectToken(_tokenKind.TokenKind.SPREAD);\n    const hasTypeCondition = this.expectOptionalKeyword('on');\n\n    if (!hasTypeCondition && this.peek(_tokenKind.TokenKind.NAME)) {\n      return this.node(start, {\n        kind: _kinds.Kind.FRAGMENT_SPREAD,\n        name: this.parseFragmentName(),\n        directives: this.parseDirectives(false),\n      });\n    }\n\n    return this.node(start, {\n      kind: _kinds.Kind.INLINE_FRAGMENT,\n      typeCondition: hasTypeCondition ? this.parseNamedType() : undefined,\n      directives: this.parseDirectives(false),\n      selectionSet: this.parseSelectionSet(),\n    });\n  }\n  /**\n   * FragmentDefinition :\n   *   - fragment FragmentName on TypeCondition Directives? SelectionSet\n   *\n   * TypeCondition : NamedType\n   */\n\n  parseFragmentDefinition() {\n    const start = this._lexer.token;\n    this.expectKeyword('fragment'); // Legacy support for defining variables within fragments changes\n    // the grammar of FragmentDefinition:\n    //   - fragment FragmentName VariableDefinitions? on TypeCondition Directives? SelectionSet\n\n    if (this._options.allowLegacyFragmentVariables === true) {\n      return this.node(start, {\n        kind: _kinds.Kind.FRAGMENT_DEFINITION,\n        name: this.parseFragmentName(),\n        variableDefinitions: this.parseVariableDefinitions(),\n        typeCondition: (this.expectKeyword('on'), this.parseNamedType()),\n        directives: this.parseDirectives(false),\n        selectionSet: this.parseSelectionSet(),\n      });\n    }\n\n    return this.node(start, {\n      kind: _kinds.Kind.FRAGMENT_DEFINITION,\n      name: this.parseFragmentName(),\n      typeCondition: (this.expectKeyword('on'), this.parseNamedType()),\n      directives: this.parseDirectives(false),\n      selectionSet: this.parseSelectionSet(),\n    });\n  }\n  /**\n   * FragmentName : Name but not `on`\n   */\n\n  parseFragmentName() {\n    if (this._lexer.token.value === 'on') {\n      throw this.unexpected();\n    }\n\n    return this.parseName();\n  } // Implements the parsing rules in the Values section.\n\n  /**\n   * Value[Const] :\n   *   - [~Const] Variable\n   *   - IntValue\n   *   - FloatValue\n   *   - StringValue\n   *   - BooleanValue\n   *   - NullValue\n   *   - EnumValue\n   *   - ListValue[?Const]\n   *   - ObjectValue[?Const]\n   *\n   * BooleanValue : one of `true` `false`\n   *\n   * NullValue : `null`\n   *\n   * EnumValue : Name but not `true`, `false` or `null`\n   */\n\n  parseValueLiteral(isConst) {\n    const token = this._lexer.token;\n\n    switch (token.kind) {\n      case _tokenKind.TokenKind.BRACKET_L:\n        return this.parseList(isConst);\n\n      case _tokenKind.TokenKind.BRACE_L:\n        return this.parseObject(isConst);\n\n      case _tokenKind.TokenKind.INT:\n        this.advanceLexer();\n        return this.node(token, {\n          kind: _kinds.Kind.INT,\n          value: token.value,\n        });\n\n      case _tokenKind.TokenKind.FLOAT:\n        this.advanceLexer();\n        return this.node(token, {\n          kind: _kinds.Kind.FLOAT,\n          value: token.value,\n        });\n\n      case _tokenKind.TokenKind.STRING:\n      case _tokenKind.TokenKind.BLOCK_STRING:\n        return this.parseStringLiteral();\n\n      case _tokenKind.TokenKind.NAME:\n        this.advanceLexer();\n\n        switch (token.value) {\n          case 'true':\n            return this.node(token, {\n              kind: _kinds.Kind.BOOLEAN,\n              value: true,\n            });\n\n          case 'false':\n            return this.node(token, {\n              kind: _kinds.Kind.BOOLEAN,\n              value: false,\n            });\n\n          case 'null':\n            return this.node(token, {\n              kind: _kinds.Kind.NULL,\n            });\n\n          default:\n            return this.node(token, {\n              kind: _kinds.Kind.ENUM,\n              value: token.value,\n            });\n        }\n\n      case _tokenKind.TokenKind.DOLLAR:\n        if (isConst) {\n          this.expectToken(_tokenKind.TokenKind.DOLLAR);\n\n          if (this._lexer.token.kind === _tokenKind.TokenKind.NAME) {\n            const varName = this._lexer.token.value;\n            throw (0, _syntaxError.syntaxError)(\n              this._lexer.source,\n              token.start,\n              `Unexpected variable \"$${varName}\" in constant value.`,\n            );\n          } else {\n            throw this.unexpected(token);\n          }\n        }\n\n        return this.parseVariable();\n\n      default:\n        throw this.unexpected();\n    }\n  }\n\n  parseConstValueLiteral() {\n    return this.parseValueLiteral(true);\n  }\n\n  parseStringLiteral() {\n    const token = this._lexer.token;\n    this.advanceLexer();\n    return this.node(token, {\n      kind: _kinds.Kind.STRING,\n      value: token.value,\n      block: token.kind === _tokenKind.TokenKind.BLOCK_STRING,\n    });\n  }\n  /**\n   * ListValue[Const] :\n   *   - [ ]\n   *   - [ Value[?Const]+ ]\n   */\n\n  parseList(isConst) {\n    const item = () => this.parseValueLiteral(isConst);\n\n    return this.node(this._lexer.token, {\n      kind: _kinds.Kind.LIST,\n      values: this.any(\n        _tokenKind.TokenKind.BRACKET_L,\n        item,\n        _tokenKind.TokenKind.BRACKET_R,\n      ),\n    });\n  }\n  /**\n   * ```\n   * ObjectValue[Const] :\n   *   - { }\n   *   - { ObjectField[?Const]+ }\n   * ```\n   */\n\n  parseObject(isConst) {\n    const item = () => this.parseObjectField(isConst);\n\n    return this.node(this._lexer.token, {\n      kind: _kinds.Kind.OBJECT,\n      fields: this.any(\n        _tokenKind.TokenKind.BRACE_L,\n        item,\n        _tokenKind.TokenKind.BRACE_R,\n      ),\n    });\n  }\n  /**\n   * ObjectField[Const] : Name : Value[?Const]\n   */\n\n  parseObjectField(isConst) {\n    const start = this._lexer.token;\n    const name = this.parseName();\n    this.expectToken(_tokenKind.TokenKind.COLON);\n    return this.node(start, {\n      kind: _kinds.Kind.OBJECT_FIELD,\n      name,\n      value: this.parseValueLiteral(isConst),\n    });\n  } // Implements the parsing rules in the Directives section.\n\n  /**\n   * Directives[Const] : Directive[?Const]+\n   */\n\n  parseDirectives(isConst) {\n    const directives = [];\n\n    while (this.peek(_tokenKind.TokenKind.AT)) {\n      directives.push(this.parseDirective(isConst));\n    }\n\n    return directives;\n  }\n\n  parseConstDirectives() {\n    return this.parseDirectives(true);\n  }\n  /**\n   * ```\n   * Directive[Const] : @ Name Arguments[?Const]?\n   * ```\n   */\n\n  parseDirective(isConst) {\n    const start = this._lexer.token;\n    this.expectToken(_tokenKind.TokenKind.AT);\n    return this.node(start, {\n      kind: _kinds.Kind.DIRECTIVE,\n      name: this.parseName(),\n      arguments: this.parseArguments(isConst),\n    });\n  } // Implements the parsing rules in the Types section.\n\n  /**\n   * Type :\n   *   - NamedType\n   *   - ListType\n   *   - NonNullType\n   */\n\n  parseTypeReference() {\n    const start = this._lexer.token;\n    let type;\n\n    if (this.expectOptionalToken(_tokenKind.TokenKind.BRACKET_L)) {\n      const innerType = this.parseTypeReference();\n      this.expectToken(_tokenKind.TokenKind.BRACKET_R);\n      type = this.node(start, {\n        kind: _kinds.Kind.LIST_TYPE,\n        type: innerType,\n      });\n    } else {\n      type = this.parseNamedType();\n    }\n\n    if (this.expectOptionalToken(_tokenKind.TokenKind.BANG)) {\n      return this.node(start, {\n        kind: _kinds.Kind.NON_NULL_TYPE,\n        type,\n      });\n    }\n\n    return type;\n  }\n  /**\n   * NamedType : Name\n   */\n\n  parseNamedType() {\n    return this.node(this._lexer.token, {\n      kind: _kinds.Kind.NAMED_TYPE,\n      name: this.parseName(),\n    });\n  } // Implements the parsing rules in the Type Definition section.\n\n  peekDescription() {\n    return (\n      this.peek(_tokenKind.TokenKind.STRING) ||\n      this.peek(_tokenKind.TokenKind.BLOCK_STRING)\n    );\n  }\n  /**\n   * Description : StringValue\n   */\n\n  parseDescription() {\n    if (this.peekDescription()) {\n      return this.parseStringLiteral();\n    }\n  }\n  /**\n   * ```\n   * SchemaDefinition : Description? schema Directives[Const]? { OperationTypeDefinition+ }\n   * ```\n   */\n\n  parseSchemaDefinition() {\n    const start = this._lexer.token;\n    const description = this.parseDescription();\n    this.expectKeyword('schema');\n    const directives = this.parseConstDirectives();\n    const operationTypes = this.many(\n      _tokenKind.TokenKind.BRACE_L,\n      this.parseOperationTypeDefinition,\n      _tokenKind.TokenKind.BRACE_R,\n    );\n    return this.node(start, {\n      kind: _kinds.Kind.SCHEMA_DEFINITION,\n      description,\n      directives,\n      operationTypes,\n    });\n  }\n  /**\n   * OperationTypeDefinition : OperationType : NamedType\n   */\n\n  parseOperationTypeDefinition() {\n    const start = this._lexer.token;\n    const operation = this.parseOperationType();\n    this.expectToken(_tokenKind.TokenKind.COLON);\n    const type = this.parseNamedType();\n    return this.node(start, {\n      kind: _kinds.Kind.OPERATION_TYPE_DEFINITION,\n      operation,\n      type,\n    });\n  }\n  /**\n   * ScalarTypeDefinition : Description? scalar Name Directives[Const]?\n   */\n\n  parseScalarTypeDefinition() {\n    const start = this._lexer.token;\n    const description = this.parseDescription();\n    this.expectKeyword('scalar');\n    const name = this.parseName();\n    const directives = this.parseConstDirectives();\n    return this.node(start, {\n      kind: _kinds.Kind.SCALAR_TYPE_DEFINITION,\n      description,\n      name,\n      directives,\n    });\n  }\n  /**\n   * ObjectTypeDefinition :\n   *   Description?\n   *   type Name ImplementsInterfaces? Directives[Const]? FieldsDefinition?\n   */\n\n  parseObjectTypeDefinition() {\n    const start = this._lexer.token;\n    const description = this.parseDescription();\n    this.expectKeyword('type');\n    const name = this.parseName();\n    const interfaces = this.parseImplementsInterfaces();\n    const directives = this.parseConstDirectives();\n    const fields = this.parseFieldsDefinition();\n    return this.node(start, {\n      kind: _kinds.Kind.OBJECT_TYPE_DEFINITION,\n      description,\n      name,\n      interfaces,\n      directives,\n      fields,\n    });\n  }\n  /**\n   * ImplementsInterfaces :\n   *   - implements `&`? NamedType\n   *   - ImplementsInterfaces & NamedType\n   */\n\n  parseImplementsInterfaces() {\n    return this.expectOptionalKeyword('implements')\n      ? this.delimitedMany(_tokenKind.TokenKind.AMP, this.parseNamedType)\n      : [];\n  }\n  /**\n   * ```\n   * FieldsDefinition : { FieldDefinition+ }\n   * ```\n   */\n\n  parseFieldsDefinition() {\n    return this.optionalMany(\n      _tokenKind.TokenKind.BRACE_L,\n      this.parseFieldDefinition,\n      _tokenKind.TokenKind.BRACE_R,\n    );\n  }\n  /**\n   * FieldDefinition :\n   *   - Description? Name ArgumentsDefinition? : Type Directives[Const]?\n   */\n\n  parseFieldDefinition() {\n    const start = this._lexer.token;\n    const description = this.parseDescription();\n    const name = this.parseName();\n    const args = this.parseArgumentDefs();\n    this.expectToken(_tokenKind.TokenKind.COLON);\n    const type = this.parseTypeReference();\n    const directives = this.parseConstDirectives();\n    return this.node(start, {\n      kind: _kinds.Kind.FIELD_DEFINITION,\n      description,\n      name,\n      arguments: args,\n      type,\n      directives,\n    });\n  }\n  /**\n   * ArgumentsDefinition : ( InputValueDefinition+ )\n   */\n\n  parseArgumentDefs() {\n    return this.optionalMany(\n      _tokenKind.TokenKind.PAREN_L,\n      this.parseInputValueDef,\n      _tokenKind.TokenKind.PAREN_R,\n    );\n  }\n  /**\n   * InputValueDefinition :\n   *   - Description? Name : Type DefaultValue? Directives[Const]?\n   */\n\n  parseInputValueDef() {\n    const start = this._lexer.token;\n    const description = this.parseDescription();\n    const name = this.parseName();\n    this.expectToken(_tokenKind.TokenKind.COLON);\n    const type = this.parseTypeReference();\n    let defaultValue;\n\n    if (this.expectOptionalToken(_tokenKind.TokenKind.EQUALS)) {\n      defaultValue = this.parseConstValueLiteral();\n    }\n\n    const directives = this.parseConstDirectives();\n    return this.node(start, {\n      kind: _kinds.Kind.INPUT_VALUE_DEFINITION,\n      description,\n      name,\n      type,\n      defaultValue,\n      directives,\n    });\n  }\n  /**\n   * InterfaceTypeDefinition :\n   *   - Description? interface Name Directives[Const]? FieldsDefinition?\n   */\n\n  parseInterfaceTypeDefinition() {\n    const start = this._lexer.token;\n    const description = this.parseDescription();\n    this.expectKeyword('interface');\n    const name = this.parseName();\n    const interfaces = this.parseImplementsInterfaces();\n    const directives = this.parseConstDirectives();\n    const fields = this.parseFieldsDefinition();\n    return this.node(start, {\n      kind: _kinds.Kind.INTERFACE_TYPE_DEFINITION,\n      description,\n      name,\n      interfaces,\n      directives,\n      fields,\n    });\n  }\n  /**\n   * UnionTypeDefinition :\n   *   - Description? union Name Directives[Const]? UnionMemberTypes?\n   */\n\n  parseUnionTypeDefinition() {\n    const start = this._lexer.token;\n    const description = this.parseDescription();\n    this.expectKeyword('union');\n    const name = this.parseName();\n    const directives = this.parseConstDirectives();\n    const types = this.parseUnionMemberTypes();\n    return this.node(start, {\n      kind: _kinds.Kind.UNION_TYPE_DEFINITION,\n      description,\n      name,\n      directives,\n      types,\n    });\n  }\n  /**\n   * UnionMemberTypes :\n   *   - = `|`? NamedType\n   *   - UnionMemberTypes | NamedType\n   */\n\n  parseUnionMemberTypes() {\n    return this.expectOptionalToken(_tokenKind.TokenKind.EQUALS)\n      ? this.delimitedMany(_tokenKind.TokenKind.PIPE, this.parseNamedType)\n      : [];\n  }\n  /**\n   * EnumTypeDefinition :\n   *   - Description? enum Name Directives[Const]? EnumValuesDefinition?\n   */\n\n  parseEnumTypeDefinition() {\n    const start = this._lexer.token;\n    const description = this.parseDescription();\n    this.expectKeyword('enum');\n    const name = this.parseName();\n    const directives = this.parseConstDirectives();\n    const values = this.parseEnumValuesDefinition();\n    return this.node(start, {\n      kind: _kinds.Kind.ENUM_TYPE_DEFINITION,\n      description,\n      name,\n      directives,\n      values,\n    });\n  }\n  /**\n   * ```\n   * EnumValuesDefinition : { EnumValueDefinition+ }\n   * ```\n   */\n\n  parseEnumValuesDefinition() {\n    return this.optionalMany(\n      _tokenKind.TokenKind.BRACE_L,\n      this.parseEnumValueDefinition,\n      _tokenKind.TokenKind.BRACE_R,\n    );\n  }\n  /**\n   * EnumValueDefinition : Description? EnumValue Directives[Const]?\n   */\n\n  parseEnumValueDefinition() {\n    const start = this._lexer.token;\n    const description = this.parseDescription();\n    const name = this.parseEnumValueName();\n    const directives = this.parseConstDirectives();\n    return this.node(start, {\n      kind: _kinds.Kind.ENUM_VALUE_DEFINITION,\n      description,\n      name,\n      directives,\n    });\n  }\n  /**\n   * EnumValue : Name but not `true`, `false` or `null`\n   */\n\n  parseEnumValueName() {\n    if (\n      this._lexer.token.value === 'true' ||\n      this._lexer.token.value === 'false' ||\n      this._lexer.token.value === 'null'\n    ) {\n      throw (0, _syntaxError.syntaxError)(\n        this._lexer.source,\n        this._lexer.token.start,\n        `${getTokenDesc(\n          this._lexer.token,\n        )} is reserved and cannot be used for an enum value.`,\n      );\n    }\n\n    return this.parseName();\n  }\n  /**\n   * InputObjectTypeDefinition :\n   *   - Description? input Name Directives[Const]? InputFieldsDefinition?\n   */\n\n  parseInputObjectTypeDefinition() {\n    const start = this._lexer.token;\n    const description = this.parseDescription();\n    this.expectKeyword('input');\n    const name = this.parseName();\n    const directives = this.parseConstDirectives();\n    const fields = this.parseInputFieldsDefinition();\n    return this.node(start, {\n      kind: _kinds.Kind.INPUT_OBJECT_TYPE_DEFINITION,\n      description,\n      name,\n      directives,\n      fields,\n    });\n  }\n  /**\n   * ```\n   * InputFieldsDefinition : { InputValueDefinition+ }\n   * ```\n   */\n\n  parseInputFieldsDefinition() {\n    return this.optionalMany(\n      _tokenKind.TokenKind.BRACE_L,\n      this.parseInputValueDef,\n      _tokenKind.TokenKind.BRACE_R,\n    );\n  }\n  /**\n   * TypeSystemExtension :\n   *   - SchemaExtension\n   *   - TypeExtension\n   *\n   * TypeExtension :\n   *   - ScalarTypeExtension\n   *   - ObjectTypeExtension\n   *   - InterfaceTypeExtension\n   *   - UnionTypeExtension\n   *   - EnumTypeExtension\n   *   - InputObjectTypeDefinition\n   */\n\n  parseTypeSystemExtension() {\n    const keywordToken = this._lexer.lookahead();\n\n    if (keywordToken.kind === _tokenKind.TokenKind.NAME) {\n      switch (keywordToken.value) {\n        case 'schema':\n          return this.parseSchemaExtension();\n\n        case 'scalar':\n          return this.parseScalarTypeExtension();\n\n        case 'type':\n          return this.parseObjectTypeExtension();\n\n        case 'interface':\n          return this.parseInterfaceTypeExtension();\n\n        case 'union':\n          return this.parseUnionTypeExtension();\n\n        case 'enum':\n          return this.parseEnumTypeExtension();\n\n        case 'input':\n          return this.parseInputObjectTypeExtension();\n      }\n    }\n\n    throw this.unexpected(keywordToken);\n  }\n  /**\n   * ```\n   * SchemaExtension :\n   *  - extend schema Directives[Const]? { OperationTypeDefinition+ }\n   *  - extend schema Directives[Const]\n   * ```\n   */\n\n  parseSchemaExtension() {\n    const start = this._lexer.token;\n    this.expectKeyword('extend');\n    this.expectKeyword('schema');\n    const directives = this.parseConstDirectives();\n    const operationTypes = this.optionalMany(\n      _tokenKind.TokenKind.BRACE_L,\n      this.parseOperationTypeDefinition,\n      _tokenKind.TokenKind.BRACE_R,\n    );\n\n    if (directives.length === 0 && operationTypes.length === 0) {\n      throw this.unexpected();\n    }\n\n    return this.node(start, {\n      kind: _kinds.Kind.SCHEMA_EXTENSION,\n      directives,\n      operationTypes,\n    });\n  }\n  /**\n   * ScalarTypeExtension :\n   *   - extend scalar Name Directives[Const]\n   */\n\n  parseScalarTypeExtension() {\n    const start = this._lexer.token;\n    this.expectKeyword('extend');\n    this.expectKeyword('scalar');\n    const name = this.parseName();\n    const directives = this.parseConstDirectives();\n\n    if (directives.length === 0) {\n      throw this.unexpected();\n    }\n\n    return this.node(start, {\n      kind: _kinds.Kind.SCALAR_TYPE_EXTENSION,\n      name,\n      directives,\n    });\n  }\n  /**\n   * ObjectTypeExtension :\n   *  - extend type Name ImplementsInterfaces? Directives[Const]? FieldsDefinition\n   *  - extend type Name ImplementsInterfaces? Directives[Const]\n   *  - extend type Name ImplementsInterfaces\n   */\n\n  parseObjectTypeExtension() {\n    const start = this._lexer.token;\n    this.expectKeyword('extend');\n    this.expectKeyword('type');\n    const name = this.parseName();\n    const interfaces = this.parseImplementsInterfaces();\n    const directives = this.parseConstDirectives();\n    const fields = this.parseFieldsDefinition();\n\n    if (\n      interfaces.length === 0 &&\n      directives.length === 0 &&\n      fields.length === 0\n    ) {\n      throw this.unexpected();\n    }\n\n    return this.node(start, {\n      kind: _kinds.Kind.OBJECT_TYPE_EXTENSION,\n      name,\n      interfaces,\n      directives,\n      fields,\n    });\n  }\n  /**\n   * InterfaceTypeExtension :\n   *  - extend interface Name ImplementsInterfaces? Directives[Const]? FieldsDefinition\n   *  - extend interface Name ImplementsInterfaces? Directives[Const]\n   *  - extend interface Name ImplementsInterfaces\n   */\n\n  parseInterfaceTypeExtension() {\n    const start = this._lexer.token;\n    this.expectKeyword('extend');\n    this.expectKeyword('interface');\n    const name = this.parseName();\n    const interfaces = this.parseImplementsInterfaces();\n    const directives = this.parseConstDirectives();\n    const fields = this.parseFieldsDefinition();\n\n    if (\n      interfaces.length === 0 &&\n      directives.length === 0 &&\n      fields.length === 0\n    ) {\n      throw this.unexpected();\n    }\n\n    return this.node(start, {\n      kind: _kinds.Kind.INTERFACE_TYPE_EXTENSION,\n      name,\n      interfaces,\n      directives,\n      fields,\n    });\n  }\n  /**\n   * UnionTypeExtension :\n   *   - extend union Name Directives[Const]? UnionMemberTypes\n   *   - extend union Name Directives[Const]\n   */\n\n  parseUnionTypeExtension() {\n    const start = this._lexer.token;\n    this.expectKeyword('extend');\n    this.expectKeyword('union');\n    const name = this.parseName();\n    const directives = this.parseConstDirectives();\n    const types = this.parseUnionMemberTypes();\n\n    if (directives.length === 0 && types.length === 0) {\n      throw this.unexpected();\n    }\n\n    return this.node(start, {\n      kind: _kinds.Kind.UNION_TYPE_EXTENSION,\n      name,\n      directives,\n      types,\n    });\n  }\n  /**\n   * EnumTypeExtension :\n   *   - extend enum Name Directives[Const]? EnumValuesDefinition\n   *   - extend enum Name Directives[Const]\n   */\n\n  parseEnumTypeExtension() {\n    const start = this._lexer.token;\n    this.expectKeyword('extend');\n    this.expectKeyword('enum');\n    const name = this.parseName();\n    const directives = this.parseConstDirectives();\n    const values = this.parseEnumValuesDefinition();\n\n    if (directives.length === 0 && values.length === 0) {\n      throw this.unexpected();\n    }\n\n    return this.node(start, {\n      kind: _kinds.Kind.ENUM_TYPE_EXTENSION,\n      name,\n      directives,\n      values,\n    });\n  }\n  /**\n   * InputObjectTypeExtension :\n   *   - extend input Name Directives[Const]? InputFieldsDefinition\n   *   - extend input Name Directives[Const]\n   */\n\n  parseInputObjectTypeExtension() {\n    const start = this._lexer.token;\n    this.expectKeyword('extend');\n    this.expectKeyword('input');\n    const name = this.parseName();\n    const directives = this.parseConstDirectives();\n    const fields = this.parseInputFieldsDefinition();\n\n    if (directives.length === 0 && fields.length === 0) {\n      throw this.unexpected();\n    }\n\n    return this.node(start, {\n      kind: _kinds.Kind.INPUT_OBJECT_TYPE_EXTENSION,\n      name,\n      directives,\n      fields,\n    });\n  }\n  /**\n   * ```\n   * DirectiveDefinition :\n   *   - Description? directive @ Name ArgumentsDefinition? `repeatable`? on DirectiveLocations\n   * ```\n   */\n\n  parseDirectiveDefinition() {\n    const start = this._lexer.token;\n    const description = this.parseDescription();\n    this.expectKeyword('directive');\n    this.expectToken(_tokenKind.TokenKind.AT);\n    const name = this.parseName();\n    const args = this.parseArgumentDefs();\n    const repeatable = this.expectOptionalKeyword('repeatable');\n    this.expectKeyword('on');\n    const locations = this.parseDirectiveLocations();\n    return this.node(start, {\n      kind: _kinds.Kind.DIRECTIVE_DEFINITION,\n      description,\n      name,\n      arguments: args,\n      repeatable,\n      locations,\n    });\n  }\n  /**\n   * DirectiveLocations :\n   *   - `|`? DirectiveLocation\n   *   - DirectiveLocations | DirectiveLocation\n   */\n\n  parseDirectiveLocations() {\n    return this.delimitedMany(\n      _tokenKind.TokenKind.PIPE,\n      this.parseDirectiveLocation,\n    );\n  }\n  /*\n   * DirectiveLocation :\n   *   - ExecutableDirectiveLocation\n   *   - TypeSystemDirectiveLocation\n   *\n   * ExecutableDirectiveLocation : one of\n   *   `QUERY`\n   *   `MUTATION`\n   *   `SUBSCRIPTION`\n   *   `FIELD`\n   *   `FRAGMENT_DEFINITION`\n   *   `FRAGMENT_SPREAD`\n   *   `INLINE_FRAGMENT`\n   *\n   * TypeSystemDirectiveLocation : one of\n   *   `SCHEMA`\n   *   `SCALAR`\n   *   `OBJECT`\n   *   `FIELD_DEFINITION`\n   *   `ARGUMENT_DEFINITION`\n   *   `INTERFACE`\n   *   `UNION`\n   *   `ENUM`\n   *   `ENUM_VALUE`\n   *   `INPUT_OBJECT`\n   *   `INPUT_FIELD_DEFINITION`\n   */\n\n  parseDirectiveLocation() {\n    const start = this._lexer.token;\n    const name = this.parseName();\n\n    if (\n      Object.prototype.hasOwnProperty.call(\n        _directiveLocation.DirectiveLocation,\n        name.value,\n      )\n    ) {\n      return name;\n    }\n\n    throw this.unexpected(start);\n  } // Core parsing utility functions\n\n  /**\n   * Returns a node that, if configured to do so, sets a \"loc\" field as a\n   * location object, used to identify the place in the source that created a\n   * given parsed object.\n   */\n\n  node(startToken, node) {\n    if (this._options.noLocation !== true) {\n      node.loc = new _ast.Location(\n        startToken,\n        this._lexer.lastToken,\n        this._lexer.source,\n      );\n    }\n\n    return node;\n  }\n  /**\n   * Determines if the next token is of a given kind\n   */\n\n  peek(kind) {\n    return this._lexer.token.kind === kind;\n  }\n  /**\n   * If the next token is of the given kind, return that token after advancing the lexer.\n   * Otherwise, do not change the parser state and throw an error.\n   */\n\n  expectToken(kind) {\n    const token = this._lexer.token;\n\n    if (token.kind === kind) {\n      this.advanceLexer();\n      return token;\n    }\n\n    throw (0, _syntaxError.syntaxError)(\n      this._lexer.source,\n      token.start,\n      `Expected ${getTokenKindDesc(kind)}, found ${getTokenDesc(token)}.`,\n    );\n  }\n  /**\n   * If the next token is of the given kind, return \"true\" after advancing the lexer.\n   * Otherwise, do not change the parser state and return \"false\".\n   */\n\n  expectOptionalToken(kind) {\n    const token = this._lexer.token;\n\n    if (token.kind === kind) {\n      this.advanceLexer();\n      return true;\n    }\n\n    return false;\n  }\n  /**\n   * If the next token is a given keyword, advance the lexer.\n   * Otherwise, do not change the parser state and throw an error.\n   */\n\n  expectKeyword(value) {\n    const token = this._lexer.token;\n\n    if (token.kind === _tokenKind.TokenKind.NAME && token.value === value) {\n      this.advanceLexer();\n    } else {\n      throw (0, _syntaxError.syntaxError)(\n        this._lexer.source,\n        token.start,\n        `Expected \"${value}\", found ${getTokenDesc(token)}.`,\n      );\n    }\n  }\n  /**\n   * If the next token is a given keyword, return \"true\" after advancing the lexer.\n   * Otherwise, do not change the parser state and return \"false\".\n   */\n\n  expectOptionalKeyword(value) {\n    const token = this._lexer.token;\n\n    if (token.kind === _tokenKind.TokenKind.NAME && token.value === value) {\n      this.advanceLexer();\n      return true;\n    }\n\n    return false;\n  }\n  /**\n   * Helper function for creating an error when an unexpected lexed token is encountered.\n   */\n\n  unexpected(atToken) {\n    const token =\n      atToken !== null && atToken !== void 0 ? atToken : this._lexer.token;\n    return (0, _syntaxError.syntaxError)(\n      this._lexer.source,\n      token.start,\n      `Unexpected ${getTokenDesc(token)}.`,\n    );\n  }\n  /**\n   * Returns a possibly empty list of parse nodes, determined by the parseFn.\n   * This list begins with a lex token of openKind and ends with a lex token of closeKind.\n   * Advances the parser to the next lex token after the closing token.\n   */\n\n  any(openKind, parseFn, closeKind) {\n    this.expectToken(openKind);\n    const nodes = [];\n\n    while (!this.expectOptionalToken(closeKind)) {\n      nodes.push(parseFn.call(this));\n    }\n\n    return nodes;\n  }\n  /**\n   * Returns a list of parse nodes, determined by the parseFn.\n   * It can be empty only if open token is missing otherwise it will always return non-empty list\n   * that begins with a lex token of openKind and ends with a lex token of closeKind.\n   * Advances the parser to the next lex token after the closing token.\n   */\n\n  optionalMany(openKind, parseFn, closeKind) {\n    if (this.expectOptionalToken(openKind)) {\n      const nodes = [];\n\n      do {\n        nodes.push(parseFn.call(this));\n      } while (!this.expectOptionalToken(closeKind));\n\n      return nodes;\n    }\n\n    return [];\n  }\n  /**\n   * Returns a non-empty list of parse nodes, determined by the parseFn.\n   * This list begins with a lex token of openKind and ends with a lex token of closeKind.\n   * Advances the parser to the next lex token after the closing token.\n   */\n\n  many(openKind, parseFn, closeKind) {\n    this.expectToken(openKind);\n    const nodes = [];\n\n    do {\n      nodes.push(parseFn.call(this));\n    } while (!this.expectOptionalToken(closeKind));\n\n    return nodes;\n  }\n  /**\n   * Returns a non-empty list of parse nodes, determined by the parseFn.\n   * This list may begin with a lex token of delimiterKind followed by items separated by lex tokens of tokenKind.\n   * Advances the parser to the next lex token after last item in the list.\n   */\n\n  delimitedMany(delimiterKind, parseFn) {\n    this.expectOptionalToken(delimiterKind);\n    const nodes = [];\n\n    do {\n      nodes.push(parseFn.call(this));\n    } while (this.expectOptionalToken(delimiterKind));\n\n    return nodes;\n  }\n\n  advanceLexer() {\n    const { maxTokens } = this._options;\n\n    const token = this._lexer.advance();\n\n    if (maxTokens !== undefined && token.kind !== _tokenKind.TokenKind.EOF) {\n      ++this._tokenCounter;\n\n      if (this._tokenCounter > maxTokens) {\n        throw (0, _syntaxError.syntaxError)(\n          this._lexer.source,\n          token.start,\n          `Document contains more that ${maxTokens} tokens. Parsing aborted.`,\n        );\n      }\n    }\n  }\n}\n/**\n * A helper function to describe a token as a string for debugging.\n */\n\nexports.Parser = Parser;\n\nfunction getTokenDesc(token) {\n  const value = token.value;\n  return getTokenKindDesc(token.kind) + (value != null ? ` \"${value}\"` : '');\n}\n/**\n * A helper function to describe a token kind as a string for debugging.\n */\n\nfunction getTokenKindDesc(kind) {\n  return (0, _lexer.isPunctuatorTokenKind)(kind) ? `\"${kind}\"` : kind;\n}\n,/validation/rules/KnownFragmentNamesRule.mjs\u0002import { GraphQLError } from '../../error/GraphQLError.mjs';\n\n/**\n * Known fragment names\n *\n * A GraphQL document is only valid if all `...Fragment` fragment spreads refer\n * to fragments defined in the same document.\n *\n * See https://spec.graphql.org/draft/#sec-Fragment-spread-target-defined\n */\nexport function KnownFragmentNamesRule(context) {\n  return {\n    FragmentSpread(node) {\n      const fragmentName = node.name.value;\n      const fragment = context.getFragment(fragmentName);\n\n      if (!fragment) {\n        context.reportError(\n          new GraphQLError(`Unknown fragment \"${fragmentName}\".`, {\n            nodes: node.name,\n          }),\n        );\n      }\n    },\n  };\n}\n2/validation/rules/SingleFieldSubscriptionsRule.mjs\nvimport { GraphQLError } from '../../error/GraphQLError.mjs';\nimport { Kind } from '../../language/kinds.mjs';\nimport { collectFields } from '../../execution/collectFields.mjs';\n\n/**\n * Subscriptions must only include a non-introspection field.\n *\n * A GraphQL subscription is valid only if it contains a single root field and\n * that root field is not an introspection field.\n *\n * See https://spec.graphql.org/draft/#sec-Single-root-field\n */\nexport function SingleFieldSubscriptionsRule(context) {\n  return {\n    OperationDefinition(node) {\n      if (node.operation === 'subscription') {\n        const schema = context.getSchema();\n        const subscriptionType = schema.getSubscriptionType();\n\n        if (subscriptionType) {\n          const operationName = node.name ? node.name.value : null;\n          const variableValues = Object.create(null);\n          const document = context.getDocument();\n          const fragments = Object.create(null);\n\n          for (const definition of document.definitions) {\n            if (definition.kind === Kind.FRAGMENT_DEFINITION) {\n              fragments[definition.name.value] = definition;\n            }\n          }\n\n          const fields = collectFields(\n            schema,\n            fragments,\n            variableValues,\n            subscriptionType,\n            node.selectionSet,\n          );\n\n          if (fields.size > 1) {\n            const fieldSelectionLists = [...fields.values()];\n            const extraFieldSelectionLists = fieldSelectionLists.slice(1);\n            const extraFieldSelections = extraFieldSelectionLists.flat();\n            context.reportError(\n              new GraphQLError(\n                operationName != null\n                  ? `Subscription \"${operationName}\" must select only one top level field.`\n                  : 'Anonymous Subscription must select only one top level field.',\n                {\n                  nodes: extraFieldSelections,\n                },\n              ),\n            );\n          }\n\n          for (const fieldNodes of fields.values()) {\n            const field = fieldNodes[0];\n            const fieldName = field.name.value;\n\n            if (fieldName.startsWith('__')) {\n              context.reportError(\n                new GraphQLError(\n                  operationName != null\n                    ? `Subscription \"${operationName}\" must not select an introspection top level field.`\n                    : 'Anonymous Subscription must not select an introspection top level field.',\n                  {\n                    nodes: fieldNodes,\n                  },\n                ),\n              );\n            }\n          }\n        }\n      }\n    },\n  };\n}\n'/utilities/introspectionFromSchema.d.ts\u0002import type { GraphQLSchema } from '../type/schema';\nimport type {\n  IntrospectionOptions,\n  IntrospectionQuery,\n} from './getIntrospectionQuery';\n/**\n * Build an IntrospectionQuery from a GraphQLSchema\n *\n * IntrospectionQuery is useful for utilities that care about type and field\n * relationships, but do not need to traverse through those relationships.\n *\n * This is the inverse of buildClientSchema. The primary use case is outside\n * of the server context, for instance when doing schema comparisons.\n */\nexport declare function introspectionFromSchema(\n  schema: GraphQLSchema,\n  options?: IntrospectionOptions,\n): IntrospectionQuery;\n/language/kinds.js\tL'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.Kind = void 0;\n\n/**\n * The set of allowed kind values for AST nodes.\n */\nvar Kind;\nexports.Kind = Kind;\n\n(function (Kind) {\n  Kind['NAME'] = 'Name';\n  Kind['DOCUMENT'] = 'Document';\n  Kind['OPERATION_DEFINITION'] = 'OperationDefinition';\n  Kind['VARIABLE_DEFINITION'] = 'VariableDefinition';\n  Kind['SELECTION_SET'] = 'SelectionSet';\n  Kind['FIELD'] = 'Field';\n  Kind['ARGUMENT'] = 'Argument';\n  Kind['FRAGMENT_SPREAD'] = 'FragmentSpread';\n  Kind['INLINE_FRAGMENT'] = 'InlineFragment';\n  Kind['FRAGMENT_DEFINITION'] = 'FragmentDefinition';\n  Kind['VARIABLE'] = 'Variable';\n  Kind['INT'] = 'IntValue';\n  Kind['FLOAT'] = 'FloatValue';\n  Kind['STRING'] = 'StringValue';\n  Kind['BOOLEAN'] = 'BooleanValue';\n  Kind['NULL'] = 'NullValue';\n  Kind['ENUM'] = 'EnumValue';\n  Kind['LIST'] = 'ListValue';\n  Kind['OBJECT'] = 'ObjectValue';\n  Kind['OBJECT_FIELD'] = 'ObjectField';\n  Kind['DIRECTIVE'] = 'Directive';\n  Kind['NAMED_TYPE'] = 'NamedType';\n  Kind['LIST_TYPE'] = 'ListType';\n  Kind['NON_NULL_TYPE'] = 'NonNullType';\n  Kind['SCHEMA_DEFINITION'] = 'SchemaDefinition';\n  Kind['OPERATION_TYPE_DEFINITION'] = 'OperationTypeDefinition';\n  Kind['SCALAR_TYPE_DEFINITION'] = 'ScalarTypeDefinition';\n  Kind['OBJECT_TYPE_DEFINITION'] = 'ObjectTypeDefinition';\n  Kind['FIELD_DEFINITION'] = 'FieldDefinition';\n  Kind['INPUT_VALUE_DEFINITION'] = 'InputValueDefinition';\n  Kind['INTERFACE_TYPE_DEFINITION'] = 'InterfaceTypeDefinition';\n  Kind['UNION_TYPE_DEFINITION'] = 'UnionTypeDefinition';\n  Kind['ENUM_TYPE_DEFINITION'] = 'EnumTypeDefinition';\n  Kind['ENUM_VALUE_DEFINITION'] = 'EnumValueDefinition';\n  Kind['INPUT_OBJECT_TYPE_DEFINITION'] = 'InputObjectTypeDefinition';\n  Kind['DIRECTIVE_DEFINITION'] = 'DirectiveDefinition';\n  Kind['SCHEMA_EXTENSION'] = 'SchemaExtension';\n  Kind['SCALAR_TYPE_EXTENSION'] = 'ScalarTypeExtension';\n  Kind['OBJECT_TYPE_EXTENSION'] = 'ObjectTypeExtension';\n  Kind['INTERFACE_TYPE_EXTENSION'] = 'InterfaceTypeExtension';\n  Kind['UNION_TYPE_EXTENSION'] = 'UnionTypeExtension';\n  Kind['ENUM_TYPE_EXTENSION'] = 'EnumTypeExtension';\n  Kind['INPUT_OBJECT_TYPE_EXTENSION'] = 'InputObjectTypeExtension';\n})(Kind || (exports.Kind = Kind = {}));\n/**\n * The enum type representing the possible kind values of AST nodes.\n *\n * @deprecated Please use `Kind`. Will be remove in v17.\n */\n/type/directives.mjs\u0015timport { devAssert } from '../jsutils/devAssert.mjs';\nimport { inspect } from '../jsutils/inspect.mjs';\nimport { instanceOf } from '../jsutils/instanceOf.mjs';\nimport { isObjectLike } from '../jsutils/isObjectLike.mjs';\nimport { toObjMap } from '../jsutils/toObjMap.mjs';\nimport { DirectiveLocation } from '../language/directiveLocation.mjs';\nimport { assertName } from './assertName.mjs';\nimport {\n  argsToArgsConfig,\n  defineArguments,\n  GraphQLNonNull,\n} from './definition.mjs';\nimport { GraphQLBoolean, GraphQLString } from './scalars.mjs';\n/**\n * Test if the given value is a GraphQL directive.\n */\n\nexport function isDirective(directive) {\n  return instanceOf(directive, GraphQLDirective);\n}\nexport function assertDirective(directive) {\n  if (!isDirective(directive)) {\n    throw new Error(\n      `Expected ${inspect(directive)} to be a GraphQL directive.`,\n    );\n  }\n\n  return directive;\n}\n/**\n * Custom extensions\n *\n * @remarks\n * Use a unique identifier name for your extension, for example the name of\n * your library or project. Do not use a shortened identifier as this increases\n * the risk of conflicts. We recommend you add at most one extension field,\n * an object which can contain all the values you need.\n */\n\n/**\n * Directives are used by the GraphQL runtime as a way of modifying execution\n * behavior. Type system creators will usually not create these directly.\n */\nexport class GraphQLDirective {\n  constructor(config) {\n    var _config$isRepeatable, _config$args;\n\n    this.name = assertName(config.name);\n    this.description = config.description;\n    this.locations = config.locations;\n    this.isRepeatable =\n      (_config$isRepeatable = config.isRepeatable) !== null &&\n      _config$isRepeatable !== void 0\n        ? _config$isRepeatable\n        : false;\n    this.extensions = toObjMap(config.extensions);\n    this.astNode = config.astNode;\n    Array.isArray(config.locations) ||\n      devAssert(false, `@${config.name} locations must be an Array.`);\n    const args =\n      (_config$args = config.args) !== null && _config$args !== void 0\n        ? _config$args\n        : {};\n    (isObjectLike(args) && !Array.isArray(args)) ||\n      devAssert(\n        false,\n        `@${config.name} args must be an object with argument names as keys.`,\n      );\n    this.args = defineArguments(args);\n  }\n\n  get [Symbol.toStringTag]() {\n    return 'GraphQLDirective';\n  }\n\n  toConfig() {\n    return {\n      name: this.name,\n      description: this.description,\n      locations: this.locations,\n      args: argsToArgsConfig(this.args),\n      isRepeatable: this.isRepeatable,\n      extensions: this.extensions,\n      astNode: this.astNode,\n    };\n  }\n\n  toString() {\n    return '@' + this.name;\n  }\n\n  toJSON() {\n    return this.toString();\n  }\n}\n\n/**\n * Used to conditionally include fields or fragments.\n */\nexport const GraphQLIncludeDirective = new GraphQLDirective({\n  name: 'include',\n  description:\n    'Directs the executor to include this field or fragment only when the `if` argument is true.',\n  locations: [\n    DirectiveLocation.FIELD,\n    DirectiveLocation.FRAGMENT_SPREAD,\n    DirectiveLocation.INLINE_FRAGMENT,\n  ],\n  args: {\n    if: {\n      type: new GraphQLNonNull(GraphQLBoolean),\n      description: 'Included when true.',\n    },\n  },\n});\n/**\n * Used to conditionally skip (exclude) fields or fragments.\n */\n\nexport const GraphQLSkipDirective = new GraphQLDirective({\n  name: 'skip',\n  description:\n    'Directs the executor to skip this field or fragment when the `if` argument is true.',\n  locations: [\n    DirectiveLocation.FIELD,\n    DirectiveLocation.FRAGMENT_SPREAD,\n    DirectiveLocation.INLINE_FRAGMENT,\n  ],\n  args: {\n    if: {\n      type: new GraphQLNonNull(GraphQLBoolean),\n      description: 'Skipped when true.',\n    },\n  },\n});\n/**\n * Constant string used for default reason for a deprecation.\n */\n\nexport const DEFAULT_DEPRECATION_REASON = 'No longer supported';\n/**\n * Used to declare element of a GraphQL schema as deprecated.\n */\n\nexport const GraphQLDeprecatedDirective = new GraphQLDirective({\n  name: 'deprecated',\n  description: 'Marks an element of a GraphQL schema as no longer supported.',\n  locations: [\n    DirectiveLocation.FIELD_DEFINITION,\n    DirectiveLocation.ARGUMENT_DEFINITION,\n    DirectiveLocation.INPUT_FIELD_DEFINITION,\n    DirectiveLocation.ENUM_VALUE,\n  ],\n  args: {\n    reason: {\n      type: GraphQLString,\n      description:\n        'Explains why this element was deprecated, usually also including a suggestion for how to access supported similar data. Formatted using the Markdown syntax, as specified by [CommonMark](https://commonmark.org/).',\n      defaultValue: DEFAULT_DEPRECATION_REASON,\n    },\n  },\n});\n/**\n * Used to provide a URL for specifying the behavior of custom scalar definitions.\n */\n\nexport const GraphQLSpecifiedByDirective = new GraphQLDirective({\n  name: 'specifiedBy',\n  description: 'Exposes a URL that specifies the behavior of this scalar.',\n  locations: [DirectiveLocation.SCALAR],\n  args: {\n    url: {\n      type: new GraphQLNonNull(GraphQLString),\n      description: 'The URL that specifies the behavior of this scalar.',\n    },\n  },\n});\n/**\n * The full list of specified directives.\n */\n\nexport const specifiedDirectives = Object.freeze([\n  GraphQLIncludeDirective,\n  GraphQLSkipDirective,\n  GraphQLDeprecatedDirective,\n  GraphQLSpecifiedByDirective,\n]);\nexport function isSpecifiedDirective(directive) {\n  return specifiedDirectives.some(({ name }) => name === directive.name);\n}\n/jsutils/groupBy.js\u0001'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.groupBy = groupBy;\n\n/**\n * Groups array items into a Map, given a function to produce grouping key.\n */\nfunction groupBy(list, keyFn) {\n  const result = new Map();\n\n  for (const item of list) {\n    const key = keyFn(item);\n    const group = result.get(key);\n\n    if (group === undefined) {\n      result.set(key, [item]);\n    } else {\n      group.push(item);\n    }\n  }\n\n  return result;\n}\n,/validation/rules/NoUnusedFragmentsRule.d.ts\u0001import type { ASTVisitor } from '../../language/visitor';\nimport type { ASTValidationContext } from '../ValidationContext';\n/**\n * No unused fragments\n *\n * A GraphQL document is only valid if all fragment definitions are spread\n * within operations, or spread within other fragments spread within operations.\n *\n * See https://spec.graphql.org/draft/#sec-Fragments-Must-Be-Used\n */\nexport declare function NoUnusedFragmentsRule(\n  context: ASTValidationContext,\n): ASTVisitor;\n$/utilities/getIntrospectionQuery.mjs\u000b\n/**\n * Produce the GraphQL query recommended for a full schema introspection.\n * Accepts optional IntrospectionOptions.\n */\nexport function getIntrospectionQuery(options) {\n  const optionsWithDefault = {\n    descriptions: true,\n    specifiedByUrl: false,\n    directiveIsRepeatable: false,\n    schemaDescription: false,\n    inputValueDeprecation: false,\n    ...options,\n  };\n  const descriptions = optionsWithDefault.descriptions ? 'description' : '';\n  const specifiedByUrl = optionsWithDefault.specifiedByUrl\n    ? 'specifiedByURL'\n    : '';\n  const directiveIsRepeatable = optionsWithDefault.directiveIsRepeatable\n    ? 'isRepeatable'\n    : '';\n  const schemaDescription = optionsWithDefault.schemaDescription\n    ? descriptions\n    : '';\n\n  function inputDeprecation(str) {\n    return optionsWithDefault.inputValueDeprecation ? str : '';\n  }\n\n  return `\n    query IntrospectionQuery {\n      __schema {\n        ${schemaDescription}\n        queryType { name }\n        mutationType { name }\n        subscriptionType { name }\n        types {\n          ...FullType\n        }\n        directives {\n          name\n          ${descriptions}\n          ${directiveIsRepeatable}\n          locations\n          args${inputDeprecation('(includeDeprecated: true)')} {\n            ...InputValue\n          }\n        }\n      }\n    }\n\n    fragment FullType on __Type {\n      kind\n      name\n      ${descriptions}\n      ${specifiedByUrl}\n      fields(includeDeprecated: true) {\n        name\n        ${descriptions}\n        args${inputDeprecation('(includeDeprecated: true)')} {\n          ...InputValue\n        }\n        type {\n          ...TypeRef\n        }\n        isDeprecated\n        deprecationReason\n      }\n      inputFields${inputDeprecation('(includeDeprecated: true)')} {\n        ...InputValue\n      }\n      interfaces {\n        ...TypeRef\n      }\n      enumValues(includeDeprecated: true) {\n        name\n        ${descriptions}\n        isDeprecated\n        deprecationReason\n      }\n      possibleTypes {\n        ...TypeRef\n      }\n    }\n\n    fragment InputValue on __InputValue {\n      name\n      ${descriptions}\n      type { ...TypeRef }\n      defaultValue\n      ${inputDeprecation('isDeprecated')}\n      ${inputDeprecation('deprecationReason')}\n    }\n\n    fragment TypeRef on __Type {\n      kind\n      name\n      ofType {\n        kind\n        name\n        ofType {\n          kind\n          name\n          ofType {\n            kind\n            name\n            ofType {\n              kind\n              name\n              ofType {\n                kind\n                name\n                ofType {\n                  kind\n                  name\n                  ofType {\n                    kind\n                    name\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n  `;\n}\n /validation/ValidationContext.js\u0014v'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.ValidationContext =\n  exports.SDLValidationContext =\n  exports.ASTValidationContext =\n    void 0;\n\nvar _kinds = require('../language/kinds.js');\n\nvar _visitor = require('../language/visitor.js');\n\nvar _TypeInfo = require('../utilities/TypeInfo.js');\n\n/**\n * An instance of this class is passed as the \"this\" context to all validators,\n * allowing access to commonly useful contextual information from within a\n * validation rule.\n */\nclass ASTValidationContext {\n  constructor(ast, onError) {\n    this._ast = ast;\n    this._fragments = undefined;\n    this._fragmentSpreads = new Map();\n    this._recursivelyReferencedFragments = new Map();\n    this._onError = onError;\n  }\n\n  get [Symbol.toStringTag]() {\n    return 'ASTValidationContext';\n  }\n\n  reportError(error) {\n    this._onError(error);\n  }\n\n  getDocument() {\n    return this._ast;\n  }\n\n  getFragment(name) {\n    let fragments;\n\n    if (this._fragments) {\n      fragments = this._fragments;\n    } else {\n      fragments = Object.create(null);\n\n      for (const defNode of this.getDocument().definitions) {\n        if (defNode.kind === _kinds.Kind.FRAGMENT_DEFINITION) {\n          fragments[defNode.name.value] = defNode;\n        }\n      }\n\n      this._fragments = fragments;\n    }\n\n    return fragments[name];\n  }\n\n  getFragmentSpreads(node) {\n    let spreads = this._fragmentSpreads.get(node);\n\n    if (!spreads) {\n      spreads = [];\n      const setsToVisit = [node];\n      let set;\n\n      while ((set = setsToVisit.pop())) {\n        for (const selection of set.selections) {\n          if (selection.kind === _kinds.Kind.FRAGMENT_SPREAD) {\n            spreads.push(selection);\n          } else if (selection.selectionSet) {\n            setsToVisit.push(selection.selectionSet);\n          }\n        }\n      }\n\n      this._fragmentSpreads.set(node, spreads);\n    }\n\n    return spreads;\n  }\n\n  getRecursivelyReferencedFragments(operation) {\n    let fragments = this._recursivelyReferencedFragments.get(operation);\n\n    if (!fragments) {\n      fragments = [];\n      const collectedNames = Object.create(null);\n      const nodesToVisit = [operation.selectionSet];\n      let node;\n\n      while ((node = nodesToVisit.pop())) {\n        for (const spread of this.getFragmentSpreads(node)) {\n          const fragName = spread.name.value;\n\n          if (collectedNames[fragName] !== true) {\n            collectedNames[fragName] = true;\n            const fragment = this.getFragment(fragName);\n\n            if (fragment) {\n              fragments.push(fragment);\n              nodesToVisit.push(fragment.selectionSet);\n            }\n          }\n        }\n      }\n\n      this._recursivelyReferencedFragments.set(operation, fragments);\n    }\n\n    return fragments;\n  }\n}\n\nexports.ASTValidationContext = ASTValidationContext;\n\nclass SDLValidationContext extends ASTValidationContext {\n  constructor(ast, schema, onError) {\n    super(ast, onError);\n    this._schema = schema;\n  }\n\n  get [Symbol.toStringTag]() {\n    return 'SDLValidationContext';\n  }\n\n  getSchema() {\n    return this._schema;\n  }\n}\n\nexports.SDLValidationContext = SDLValidationContext;\n\nclass ValidationContext extends ASTValidationContext {\n  constructor(schema, ast, typeInfo, onError) {\n    super(ast, onError);\n    this._schema = schema;\n    this._typeInfo = typeInfo;\n    this._variableUsages = new Map();\n    this._recursiveVariableUsages = new Map();\n  }\n\n  get [Symbol.toStringTag]() {\n    return 'ValidationContext';\n  }\n\n  getSchema() {\n    return this._schema;\n  }\n\n  getVariableUsages(node) {\n    let usages = this._variableUsages.get(node);\n\n    if (!usages) {\n      const newUsages = [];\n      const typeInfo = new _TypeInfo.TypeInfo(this._schema);\n      (0, _visitor.visit)(\n        node,\n        (0, _TypeInfo.visitWithTypeInfo)(typeInfo, {\n          VariableDefinition: () => false,\n\n          Variable(variable) {\n            newUsages.push({\n              node: variable,\n              type: typeInfo.getInputType(),\n              defaultValue: typeInfo.getDefaultValue(),\n            });\n          },\n        }),\n      );\n      usages = newUsages;\n\n      this._variableUsages.set(node, usages);\n    }\n\n    return usages;\n  }\n\n  getRecursiveVariableUsages(operation) {\n    let usages = this._recursiveVariableUsages.get(operation);\n\n    if (!usages) {\n      usages = this.getVariableUsages(operation);\n\n      for (const frag of this.getRecursivelyReferencedFragments(operation)) {\n        usages = usages.concat(this.getVariableUsages(frag));\n      }\n\n      this._recursiveVariableUsages.set(operation, usages);\n    }\n\n    return usages;\n  }\n\n  getType() {\n    return this._typeInfo.getType();\n  }\n\n  getParentType() {\n    return this._typeInfo.getParentType();\n  }\n\n  getInputType() {\n    return this._typeInfo.getInputType();\n  }\n\n  getParentInputType() {\n    return this._typeInfo.getParentInputType();\n  }\n\n  getFieldDef() {\n    return this._typeInfo.getFieldDef();\n  }\n\n  getDirective() {\n    return this._typeInfo.getDirective();\n  }\n\n  getArgument() {\n    return this._typeInfo.getArgument();\n  }\n\n  getEnumValue() {\n    return this._typeInfo.getEnumValue();\n  }\n}\n\nexports.ValidationContext = ValidationContext;\n/utilities/typeFromAST.js\u0002'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.typeFromAST = typeFromAST;\n\nvar _kinds = require('../language/kinds.js');\n\nvar _definition = require('../type/definition.js');\n\nfunction typeFromAST(schema, typeNode) {\n  switch (typeNode.kind) {\n    case _kinds.Kind.LIST_TYPE: {\n      const innerType = typeFromAST(schema, typeNode.type);\n      return innerType && new _definition.GraphQLList(innerType);\n    }\n\n    case _kinds.Kind.NON_NULL_TYPE: {\n      const innerType = typeFromAST(schema, typeNode.type);\n      return innerType && new _definition.GraphQLNonNull(innerType);\n    }\n\n    case _kinds.Kind.NAMED_TYPE:\n      return schema.getType(typeNode.name.value);\n  }\n}\n/type/definition.jsņ'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.GraphQLUnionType =\n  exports.GraphQLScalarType =\n  exports.GraphQLObjectType =\n  exports.GraphQLNonNull =\n  exports.GraphQLList =\n  exports.GraphQLInterfaceType =\n  exports.GraphQLInputObjectType =\n  exports.GraphQLEnumType =\n    void 0;\nexports.argsToArgsConfig = argsToArgsConfig;\nexports.assertAbstractType = assertAbstractType;\nexports.assertCompositeType = assertCompositeType;\nexports.assertEnumType = assertEnumType;\nexports.assertInputObjectType = assertInputObjectType;\nexports.assertInputType = assertInputType;\nexports.assertInterfaceType = assertInterfaceType;\nexports.assertLeafType = assertLeafType;\nexports.assertListType = assertListType;\nexports.assertNamedType = assertNamedType;\nexports.assertNonNullType = assertNonNullType;\nexports.assertNullableType = assertNullableType;\nexports.assertObjectType = assertObjectType;\nexports.assertOutputType = assertOutputType;\nexports.assertScalarType = assertScalarType;\nexports.assertType = assertType;\nexports.assertUnionType = assertUnionType;\nexports.assertWrappingType = assertWrappingType;\nexports.defineArguments = defineArguments;\nexports.getNamedType = getNamedType;\nexports.getNullableType = getNullableType;\nexports.isAbstractType = isAbstractType;\nexports.isCompositeType = isCompositeType;\nexports.isEnumType = isEnumType;\nexports.isInputObjectType = isInputObjectType;\nexports.isInputType = isInputType;\nexports.isInterfaceType = isInterfaceType;\nexports.isLeafType = isLeafType;\nexports.isListType = isListType;\nexports.isNamedType = isNamedType;\nexports.isNonNullType = isNonNullType;\nexports.isNullableType = isNullableType;\nexports.isObjectType = isObjectType;\nexports.isOutputType = isOutputType;\nexports.isRequiredArgument = isRequiredArgument;\nexports.isRequiredInputField = isRequiredInputField;\nexports.isScalarType = isScalarType;\nexports.isType = isType;\nexports.isUnionType = isUnionType;\nexports.isWrappingType = isWrappingType;\nexports.resolveObjMapThunk = resolveObjMapThunk;\nexports.resolveReadonlyArrayThunk = resolveReadonlyArrayThunk;\n\nvar _devAssert = require('../jsutils/devAssert.js');\n\nvar _didYouMean = require('../jsutils/didYouMean.js');\n\nvar _identityFunc = require('../jsutils/identityFunc.js');\n\nvar _inspect = require('../jsutils/inspect.js');\n\nvar _instanceOf = require('../jsutils/instanceOf.js');\n\nvar _isObjectLike = require('../jsutils/isObjectLike.js');\n\nvar _keyMap = require('../jsutils/keyMap.js');\n\nvar _keyValMap = require('../jsutils/keyValMap.js');\n\nvar _mapValue = require('../jsutils/mapValue.js');\n\nvar _suggestionList = require('../jsutils/suggestionList.js');\n\nvar _toObjMap = require('../jsutils/toObjMap.js');\n\nvar _GraphQLError = require('../error/GraphQLError.js');\n\nvar _kinds = require('../language/kinds.js');\n\nvar _printer = require('../language/printer.js');\n\nvar _valueFromASTUntyped = require('../utilities/valueFromASTUntyped.js');\n\nvar _assertName = require('./assertName.js');\n\nfunction isType(type) {\n  return (\n    isScalarType(type) ||\n    isObjectType(type) ||\n    isInterfaceType(type) ||\n    isUnionType(type) ||\n    isEnumType(type) ||\n    isInputObjectType(type) ||\n    isListType(type) ||\n    isNonNullType(type)\n  );\n}\n\nfunction assertType(type) {\n  if (!isType(type)) {\n    throw new Error(\n      `Expected ${(0, _inspect.inspect)(type)} to be a GraphQL type.`,\n    );\n  }\n\n  return type;\n}\n/**\n * There are predicates for each kind of GraphQL type.\n */\n\nfunction isScalarType(type) {\n  return (0, _instanceOf.instanceOf)(type, GraphQLScalarType);\n}\n\nfunction assertScalarType(type) {\n  if (!isScalarType(type)) {\n    throw new Error(\n      `Expected ${(0, _inspect.inspect)(type)} to be a GraphQL Scalar type.`,\n    );\n  }\n\n  return type;\n}\n\nfunction isObjectType(type) {\n  return (0, _instanceOf.instanceOf)(type, GraphQLObjectType);\n}\n\nfunction assertObjectType(type) {\n  if (!isObjectType(type)) {\n    throw new Error(\n      `Expected ${(0, _inspect.inspect)(type)} to be a GraphQL Object type.`,\n    );\n  }\n\n  return type;\n}\n\nfunction isInterfaceType(type) {\n  return (0, _instanceOf.instanceOf)(type, GraphQLInterfaceType);\n}\n\nfunction assertInterfaceType(type) {\n  if (!isInterfaceType(type)) {\n    throw new Error(\n      `Expected ${(0, _inspect.inspect)(type)} to be a GraphQL Interface type.`,\n    );\n  }\n\n  return type;\n}\n\nfunction isUnionType(type) {\n  return (0, _instanceOf.instanceOf)(type, GraphQLUnionType);\n}\n\nfunction assertUnionType(type) {\n  if (!isUnionType(type)) {\n    throw new Error(\n      `Expected ${(0, _inspect.inspect)(type)} to be a GraphQL Union type.`,\n    );\n  }\n\n  return type;\n}\n\nfunction isEnumType(type) {\n  return (0, _instanceOf.instanceOf)(type, GraphQLEnumType);\n}\n\nfunction assertEnumType(type) {\n  if (!isEnumType(type)) {\n    throw new Error(\n      `Expected ${(0, _inspect.inspect)(type)} to be a GraphQL Enum type.`,\n    );\n  }\n\n  return type;\n}\n\nfunction isInputObjectType(type) {\n  return (0, _instanceOf.instanceOf)(type, GraphQLInputObjectType);\n}\n\nfunction assertInputObjectType(type) {\n  if (!isInputObjectType(type)) {\n    throw new Error(\n      `Expected ${(0, _inspect.inspect)(\n        type,\n      )} to be a GraphQL Input Object type.`,\n    );\n  }\n\n  return type;\n}\n\nfunction isListType(type) {\n  return (0, _instanceOf.instanceOf)(type, GraphQLList);\n}\n\nfunction assertListType(type) {\n  if (!isListType(type)) {\n    throw new Error(\n      `Expected ${(0, _inspect.inspect)(type)} to be a GraphQL List type.`,\n    );\n  }\n\n  return type;\n}\n\nfunction isNonNullType(type) {\n  return (0, _instanceOf.instanceOf)(type, GraphQLNonNull);\n}\n\nfunction assertNonNullType(type) {\n  if (!isNonNullType(type)) {\n    throw new Error(\n      `Expected ${(0, _inspect.inspect)(type)} to be a GraphQL Non-Null type.`,\n    );\n  }\n\n  return type;\n}\n/**\n * These types may be used as input types for arguments and directives.\n */\n\nfunction isInputType(type) {\n  return (\n    isScalarType(type) ||\n    isEnumType(type) ||\n    isInputObjectType(type) ||\n    (isWrappingType(type) && isInputType(type.ofType))\n  );\n}\n\nfunction assertInputType(type) {\n  if (!isInputType(type)) {\n    throw new Error(\n      `Expected ${(0, _inspect.inspect)(type)} to be a GraphQL input type.`,\n    );\n  }\n\n  return type;\n}\n/**\n * These types may be used as output types as the result of fields.\n */\n\nfunction isOutputType(type) {\n  return (\n    isScalarType(type) ||\n    isObjectType(type) ||\n    isInterfaceType(type) ||\n    isUnionType(type) ||\n    isEnumType(type) ||\n    (isWrappingType(type) && isOutputType(type.ofType))\n  );\n}\n\nfunction assertOutputType(type) {\n  if (!isOutputType(type)) {\n    throw new Error(\n      `Expected ${(0, _inspect.inspect)(type)} to be a GraphQL output type.`,\n    );\n  }\n\n  return type;\n}\n/**\n * These types may describe types which may be leaf values.\n */\n\nfunction isLeafType(type) {\n  return isScalarType(type) || isEnumType(type);\n}\n\nfunction assertLeafType(type) {\n  if (!isLeafType(type)) {\n    throw new Error(\n      `Expected ${(0, _inspect.inspect)(type)} to be a GraphQL leaf type.`,\n    );\n  }\n\n  return type;\n}\n/**\n * These types may describe the parent context of a selection set.\n */\n\nfunction isCompositeType(type) {\n  return isObjectType(type) || isInterfaceType(type) || isUnionType(type);\n}\n\nfunction assertCompositeType(type) {\n  if (!isCompositeType(type)) {\n    throw new Error(\n      `Expected ${(0, _inspect.inspect)(type)} to be a GraphQL composite type.`,\n    );\n  }\n\n  return type;\n}\n/**\n * These types may describe the parent context of a selection set.\n */\n\nfunction isAbstractType(type) {\n  return isInterfaceType(type) || isUnionType(type);\n}\n\nfunction assertAbstractType(type) {\n  if (!isAbstractType(type)) {\n    throw new Error(\n      `Expected ${(0, _inspect.inspect)(type)} to be a GraphQL abstract type.`,\n    );\n  }\n\n  return type;\n}\n/**\n * List Type Wrapper\n *\n * A list is a wrapping type which points to another type.\n * Lists are often created within the context of defining the fields of\n * an object type.\n *\n * Example:\n *\n * ```ts\n * const PersonType = new GraphQLObjectType({\n *   name: 'Person',\n *   fields: () => ({\n *     parents: { type: new GraphQLList(PersonType) },\n *     children: { type: new GraphQLList(PersonType) },\n *   })\n * })\n * ```\n */\n\nclass GraphQLList {\n  constructor(ofType) {\n    isType(ofType) ||\n      (0, _devAssert.devAssert)(\n        false,\n        `Expected ${(0, _inspect.inspect)(ofType)} to be a GraphQL type.`,\n      );\n    this.ofType = ofType;\n  }\n\n  get [Symbol.toStringTag]() {\n    return 'GraphQLList';\n  }\n\n  toString() {\n    return '[' + String(this.ofType) + ']';\n  }\n\n  toJSON() {\n    return this.toString();\n  }\n}\n/**\n * Non-Null Type Wrapper\n *\n * A non-null is a wrapping type which points to another type.\n * Non-null types enforce that their values are never null and can ensure\n * an error is raised if this ever occurs during a request. It is useful for\n * fields which you can make a strong guarantee on non-nullability, for example\n * usually the id field of a database row will never be null.\n *\n * Example:\n *\n * ```ts\n * const RowType = new GraphQLObjectType({\n *   name: 'Row',\n *   fields: () => ({\n *     id: { type: new GraphQLNonNull(GraphQLString) },\n *   })\n * })\n * ```\n * Note: the enforcement of non-nullability occurs within the executor.\n */\n\nexports.GraphQLList = GraphQLList;\n\nclass GraphQLNonNull {\n  constructor(ofType) {\n    isNullableType(ofType) ||\n      (0, _devAssert.devAssert)(\n        false,\n        `Expected ${(0, _inspect.inspect)(\n          ofType,\n        )} to be a GraphQL nullable type.`,\n      );\n    this.ofType = ofType;\n  }\n\n  get [Symbol.toStringTag]() {\n    return 'GraphQLNonNull';\n  }\n\n  toString() {\n    return String(this.ofType) + '!';\n  }\n\n  toJSON() {\n    return this.toString();\n  }\n}\n/**\n * These types wrap and modify other types\n */\n\nexports.GraphQLNonNull = GraphQLNonNull;\n\nfunction isWrappingType(type) {\n  return isListType(type) || isNonNullType(type);\n}\n\nfunction assertWrappingType(type) {\n  if (!isWrappingType(type)) {\n    throw new Error(\n      `Expected ${(0, _inspect.inspect)(type)} to be a GraphQL wrapping type.`,\n    );\n  }\n\n  return type;\n}\n/**\n * These types can all accept null as a value.\n */\n\nfunction isNullableType(type) {\n  return isType(type) && !isNonNullType(type);\n}\n\nfunction assertNullableType(type) {\n  if (!isNullableType(type)) {\n    throw new Error(\n      `Expected ${(0, _inspect.inspect)(type)} to be a GraphQL nullable type.`,\n    );\n  }\n\n  return type;\n}\n\nfunction getNullableType(type) {\n  if (type) {\n    return isNonNullType(type) ? type.ofType : type;\n  }\n}\n/**\n * These named types do not include modifiers like List or NonNull.\n */\n\nfunction isNamedType(type) {\n  return (\n    isScalarType(type) ||\n    isObjectType(type) ||\n    isInterfaceType(type) ||\n    isUnionType(type) ||\n    isEnumType(type) ||\n    isInputObjectType(type)\n  );\n}\n\nfunction assertNamedType(type) {\n  if (!isNamedType(type)) {\n    throw new Error(\n      `Expected ${(0, _inspect.inspect)(type)} to be a GraphQL named type.`,\n    );\n  }\n\n  return type;\n}\n\nfunction getNamedType(type) {\n  if (type) {\n    let unwrappedType = type;\n\n    while (isWrappingType(unwrappedType)) {\n      unwrappedType = unwrappedType.ofType;\n    }\n\n    return unwrappedType;\n  }\n}\n/**\n * Used while defining GraphQL types to allow for circular references in\n * otherwise immutable type definitions.\n */\n\nfunction resolveReadonlyArrayThunk(thunk) {\n  return typeof thunk === 'function' ? thunk() : thunk;\n}\n\nfunction resolveObjMapThunk(thunk) {\n  return typeof thunk === 'function' ? thunk() : thunk;\n}\n/**\n * Custom extensions\n *\n * @remarks\n * Use a unique identifier name for your extension, for example the name of\n * your library or project. Do not use a shortened identifier as this increases\n * the risk of conflicts. We recommend you add at most one extension field,\n * an object which can contain all the values you need.\n */\n\n/**\n * Scalar Type Definition\n *\n * The leaf values of any request and input values to arguments are\n * Scalars (or Enums) and are defined with a name and a series of functions\n * used to parse input from ast or variables and to ensure validity.\n *\n * If a type's serialize function returns `null` or does not return a value\n * (i.e. it returns `undefined`) then an error will be raised and a `null`\n * value will be returned in the response. It is always better to validate\n *\n * Example:\n *\n * ```ts\n * const OddType = new GraphQLScalarType({\n *   name: 'Odd',\n *   serialize(value) {\n *     if (!Number.isFinite(value)) {\n *       throw new Error(\n *         `Scalar \"Odd\" cannot represent \"${value}\" since it is not a finite number.`,\n *       );\n *     }\n *\n *     if (value % 2 === 0) {\n *       throw new Error(`Scalar \"Odd\" cannot represent \"${value}\" since it is even.`);\n *     }\n *     return value;\n *   }\n * });\n * ```\n */\nclass GraphQLScalarType {\n  constructor(config) {\n    var _config$parseValue,\n      _config$serialize,\n      _config$parseLiteral,\n      _config$extensionASTN;\n\n    const parseValue =\n      (_config$parseValue = config.parseValue) !== null &&\n      _config$parseValue !== void 0\n        ? _config$parseValue\n        : _identityFunc.identityFunc;\n    this.name = (0, _assertName.assertName)(config.name);\n    this.description = config.description;\n    this.specifiedByURL = config.specifiedByURL;\n    this.serialize =\n      (_config$serialize = config.serialize) !== null &&\n      _config$serialize !== void 0\n        ? _config$serialize\n        : _identityFunc.identityFunc;\n    this.parseValue = parseValue;\n    this.parseLiteral =\n      (_config$parseLiteral = config.parseLiteral) !== null &&\n      _config$parseLiteral !== void 0\n        ? _config$parseLiteral\n        : (node, variables) =>\n            parseValue(\n              (0, _valueFromASTUntyped.valueFromASTUntyped)(node, variables),\n            );\n    this.extensions = (0, _toObjMap.toObjMap)(config.extensions);\n    this.astNode = config.astNode;\n    this.extensionASTNodes =\n      (_config$extensionASTN = config.extensionASTNodes) !== null &&\n      _config$extensionASTN !== void 0\n        ? _config$extensionASTN\n        : [];\n    config.specifiedByURL == null ||\n      typeof config.specifiedByURL === 'string' ||\n      (0, _devAssert.devAssert)(\n        false,\n        `${this.name} must provide \"specifiedByURL\" as a string, ` +\n          `but got: ${(0, _inspect.inspect)(config.specifiedByURL)}.`,\n      );\n    config.serialize == null ||\n      typeof config.serialize === 'function' ||\n      (0, _devAssert.devAssert)(\n        false,\n        `${this.name} must provide \"serialize\" function. If this custom Scalar is also used as an input type, ensure \"parseValue\" and \"parseLiteral\" functions are also provided.`,\n      );\n\n    if (config.parseLiteral) {\n      (typeof config.parseValue === 'function' &&\n        typeof config.parseLiteral === 'function') ||\n        (0, _devAssert.devAssert)(\n          false,\n          `${this.name} must provide both \"parseValue\" and \"parseLiteral\" functions.`,\n        );\n    }\n  }\n\n  get [Symbol.toStringTag]() {\n    return 'GraphQLScalarType';\n  }\n\n  toConfig() {\n    return {\n      name: this.name,\n      description: this.description,\n      specifiedByURL: this.specifiedByURL,\n      serialize: this.serialize,\n      parseValue: this.parseValue,\n      parseLiteral: this.parseLiteral,\n      extensions: this.extensions,\n      astNode: this.astNode,\n      extensionASTNodes: this.extensionASTNodes,\n    };\n  }\n\n  toString() {\n    return this.name;\n  }\n\n  toJSON() {\n    return this.toString();\n  }\n}\n\nexports.GraphQLScalarType = GraphQLScalarType;\n\n/**\n * Object Type Definition\n *\n * Almost all of the GraphQL types you define will be object types. Object types\n * have a name, but most importantly describe their fields.\n *\n * Example:\n *\n * ```ts\n * const AddressType = new GraphQLObjectType({\n *   name: 'Address',\n *   fields: {\n *     street: { type: GraphQLString },\n *     number: { type: GraphQLInt },\n *     formatted: {\n *       type: GraphQLString,\n *       resolve(obj) {\n *         return obj.number + ' ' + obj.street\n *       }\n *     }\n *   }\n * });\n * ```\n *\n * When two types need to refer to each other, or a type needs to refer to\n * itself in a field, you can use a function expression (aka a closure or a\n * thunk) to supply the fields lazily.\n *\n * Example:\n *\n * ```ts\n * const PersonType = new GraphQLObjectType({\n *   name: 'Person',\n *   fields: () => ({\n *     name: { type: GraphQLString },\n *     bestFriend: { type: PersonType },\n *   })\n * });\n * ```\n */\nclass GraphQLObjectType {\n  constructor(config) {\n    var _config$extensionASTN2;\n\n    this.name = (0, _assertName.assertName)(config.name);\n    this.description = config.description;\n    this.isTypeOf = config.isTypeOf;\n    this.extensions = (0, _toObjMap.toObjMap)(config.extensions);\n    this.astNode = config.astNode;\n    this.extensionASTNodes =\n      (_config$extensionASTN2 = config.extensionASTNodes) !== null &&\n      _config$extensionASTN2 !== void 0\n        ? _config$extensionASTN2\n        : [];\n\n    this._fields = () => defineFieldMap(config);\n\n    this._interfaces = () => defineInterfaces(config);\n\n    config.isTypeOf == null ||\n      typeof config.isTypeOf === 'function' ||\n      (0, _devAssert.devAssert)(\n        false,\n        `${this.name} must provide \"isTypeOf\" as a function, ` +\n          `but got: ${(0, _inspect.inspect)(config.isTypeOf)}.`,\n      );\n  }\n\n  get [Symbol.toStringTag]() {\n    return 'GraphQLObjectType';\n  }\n\n  getFields() {\n    if (typeof this._fields === 'function') {\n      this._fields = this._fields();\n    }\n\n    return this._fields;\n  }\n\n  getInterfaces() {\n    if (typeof this._interfaces === 'function') {\n      this._interfaces = this._interfaces();\n    }\n\n    return this._interfaces;\n  }\n\n  toConfig() {\n    return {\n      name: this.name,\n      description: this.description,\n      interfaces: this.getInterfaces(),\n      fields: fieldsToFieldsConfig(this.getFields()),\n      isTypeOf: this.isTypeOf,\n      extensions: this.extensions,\n      astNode: this.astNode,\n      extensionASTNodes: this.extensionASTNodes,\n    };\n  }\n\n  toString() {\n    return this.name;\n  }\n\n  toJSON() {\n    return this.toString();\n  }\n}\n\nexports.GraphQLObjectType = GraphQLObjectType;\n\nfunction defineInterfaces(config) {\n  var _config$interfaces;\n\n  const interfaces = resolveReadonlyArrayThunk(\n    (_config$interfaces = config.interfaces) !== null &&\n      _config$interfaces !== void 0\n      ? _config$interfaces\n      : [],\n  );\n  Array.isArray(interfaces) ||\n    (0, _devAssert.devAssert)(\n      false,\n      `${config.name} interfaces must be an Array or a function which returns an Array.`,\n    );\n  return interfaces;\n}\n\nfunction defineFieldMap(config) {\n  const fieldMap = resolveObjMapThunk(config.fields);\n  isPlainObj(fieldMap) ||\n    (0, _devAssert.devAssert)(\n      false,\n      `${config.name} fields must be an object with field names as keys or a function which returns such an object.`,\n    );\n  return (0, _mapValue.mapValue)(fieldMap, (fieldConfig, fieldName) => {\n    var _fieldConfig$args;\n\n    isPlainObj(fieldConfig) ||\n      (0, _devAssert.devAssert)(\n        false,\n        `${config.name}.${fieldName} field config must be an object.`,\n      );\n    fieldConfig.resolve == null ||\n      typeof fieldConfig.resolve === 'function' ||\n      (0, _devAssert.devAssert)(\n        false,\n        `${config.name}.${fieldName} field resolver must be a function if ` +\n          `provided, but got: ${(0, _inspect.inspect)(fieldConfig.resolve)}.`,\n      );\n    const argsConfig =\n      (_fieldConfig$args = fieldConfig.args) !== null &&\n      _fieldConfig$args !== void 0\n        ? _fieldConfig$args\n        : {};\n    isPlainObj(argsConfig) ||\n      (0, _devAssert.devAssert)(\n        false,\n        `${config.name}.${fieldName} args must be an object with argument names as keys.`,\n      );\n    return {\n      name: (0, _assertName.assertName)(fieldName),\n      description: fieldConfig.description,\n      type: fieldConfig.type,\n      args: defineArguments(argsConfig),\n      resolve: fieldConfig.resolve,\n      subscribe: fieldConfig.subscribe,\n      deprecationReason: fieldConfig.deprecationReason,\n      extensions: (0, _toObjMap.toObjMap)(fieldConfig.extensions),\n      astNode: fieldConfig.astNode,\n    };\n  });\n}\n\nfunction defineArguments(config) {\n  return Object.entries(config).map(([argName, argConfig]) => ({\n    name: (0, _assertName.assertName)(argName),\n    description: argConfig.description,\n    type: argConfig.type,\n    defaultValue: argConfig.defaultValue,\n    deprecationReason: argConfig.deprecationReason,\n    extensions: (0, _toObjMap.toObjMap)(argConfig.extensions),\n    astNode: argConfig.astNode,\n  }));\n}\n\nfunction isPlainObj(obj) {\n  return (0, _isObjectLike.isObjectLike)(obj) && !Array.isArray(obj);\n}\n\nfunction fieldsToFieldsConfig(fields) {\n  return (0, _mapValue.mapValue)(fields, (field) => ({\n    description: field.description,\n    type: field.type,\n    args: argsToArgsConfig(field.args),\n    resolve: field.resolve,\n    subscribe: field.subscribe,\n    deprecationReason: field.deprecationReason,\n    extensions: field.extensions,\n    astNode: field.astNode,\n  }));\n}\n/**\n * @internal\n */\n\nfunction argsToArgsConfig(args) {\n  return (0, _keyValMap.keyValMap)(\n    args,\n    (arg) => arg.name,\n    (arg) => ({\n      description: arg.description,\n      type: arg.type,\n      defaultValue: arg.defaultValue,\n      deprecationReason: arg.deprecationReason,\n      extensions: arg.extensions,\n      astNode: arg.astNode,\n    }),\n  );\n}\n\nfunction isRequiredArgument(arg) {\n  return isNonNullType(arg.type) && arg.defaultValue === undefined;\n}\n\n/**\n * Interface Type Definition\n *\n * When a field can return one of a heterogeneous set of types, a Interface type\n * is used to describe what types are possible, what fields are in common across\n * all types, as well as a function to determine which type is actually used\n * when the field is resolved.\n *\n * Example:\n *\n * ```ts\n * const EntityType = new GraphQLInterfaceType({\n *   name: 'Entity',\n *   fields: {\n *     name: { type: GraphQLString }\n *   }\n * });\n * ```\n */\nclass GraphQLInterfaceType {\n  constructor(config) {\n    var _config$extensionASTN3;\n\n    this.name = (0, _assertName.assertName)(config.name);\n    this.description = config.description;\n    this.resolveType = config.resolveType;\n    this.extensions = (0, _toObjMap.toObjMap)(config.extensions);\n    this.astNode = config.astNode;\n    this.extensionASTNodes =\n      (_config$extensionASTN3 = config.extensionASTNodes) !== null &&\n      _config$extensionASTN3 !== void 0\n        ? _config$extensionASTN3\n        : [];\n    this._fields = defineFieldMap.bind(undefined, config);\n    this._interfaces = defineInterfaces.bind(undefined, config);\n    config.resolveType == null ||\n      typeof config.resolveType === 'function' ||\n      (0, _devAssert.devAssert)(\n        false,\n        `${this.name} must provide \"resolveType\" as a function, ` +\n          `but got: ${(0, _inspect.inspect)(config.resolveType)}.`,\n      );\n  }\n\n  get [Symbol.toStringTag]() {\n    return 'GraphQLInterfaceType';\n  }\n\n  getFields() {\n    if (typeof this._fields === 'function') {\n      this._fields = this._fields();\n    }\n\n    return this._fields;\n  }\n\n  getInterfaces() {\n    if (typeof this._interfaces === 'function') {\n      this._interfaces = this._interfaces();\n    }\n\n    return this._interfaces;\n  }\n\n  toConfig() {\n    return {\n      name: this.name,\n      description: this.description,\n      interfaces: this.getInterfaces(),\n      fields: fieldsToFieldsConfig(this.getFields()),\n      resolveType: this.resolveType,\n      extensions: this.extensions,\n      astNode: this.astNode,\n      extensionASTNodes: this.extensionASTNodes,\n    };\n  }\n\n  toString() {\n    return this.name;\n  }\n\n  toJSON() {\n    return this.toString();\n  }\n}\n\nexports.GraphQLInterfaceType = GraphQLInterfaceType;\n\n/**\n * Union Type Definition\n *\n * When a field can return one of a heterogeneous set of types, a Union type\n * is used to describe what types are possible as well as providing a function\n * to determine which type is actually used when the field is resolved.\n *\n * Example:\n *\n * ```ts\n * const PetType = new GraphQLUnionType({\n *   name: 'Pet',\n *   types: [ DogType, CatType ],\n *   resolveType(value) {\n *     if (value instanceof Dog) {\n *       return DogType;\n *     }\n *     if (value instanceof Cat) {\n *       return CatType;\n *     }\n *   }\n * });\n * ```\n */\nclass GraphQLUnionType {\n  constructor(config) {\n    var _config$extensionASTN4;\n\n    this.name = (0, _assertName.assertName)(config.name);\n    this.description = config.description;\n    this.resolveType = config.resolveType;\n    this.extensions = (0, _toObjMap.toObjMap)(config.extensions);\n    this.astNode = config.astNode;\n    this.extensionASTNodes =\n      (_config$extensionASTN4 = config.extensionASTNodes) !== null &&\n      _config$extensionASTN4 !== void 0\n        ? _config$extensionASTN4\n        : [];\n    this._types = defineTypes.bind(undefined, config);\n    config.resolveType == null ||\n      typeof config.resolveType === 'function' ||\n      (0, _devAssert.devAssert)(\n        false,\n        `${this.name} must provide \"resolveType\" as a function, ` +\n          `but got: ${(0, _inspect.inspect)(config.resolveType)}.`,\n      );\n  }\n\n  get [Symbol.toStringTag]() {\n    return 'GraphQLUnionType';\n  }\n\n  getTypes() {\n    if (typeof this._types === 'function') {\n      this._types = this._types();\n    }\n\n    return this._types;\n  }\n\n  toConfig() {\n    return {\n      name: this.name,\n      description: this.description,\n      types: this.getTypes(),\n      resolveType: this.resolveType,\n      extensions: this.extensions,\n      astNode: this.astNode,\n      extensionASTNodes: this.extensionASTNodes,\n    };\n  }\n\n  toString() {\n    return this.name;\n  }\n\n  toJSON() {\n    return this.toString();\n  }\n}\n\nexports.GraphQLUnionType = GraphQLUnionType;\n\nfunction defineTypes(config) {\n  const types = resolveReadonlyArrayThunk(config.types);\n  Array.isArray(types) ||\n    (0, _devAssert.devAssert)(\n      false,\n      `Must provide Array of types or a function which returns such an array for Union ${config.name}.`,\n    );\n  return types;\n}\n\n/**\n * Enum Type Definition\n *\n * Some leaf values of requests and input values are Enums. GraphQL serializes\n * Enum values as strings, however internally Enums can be represented by any\n * kind of type, often integers.\n *\n * Example:\n *\n * ```ts\n * const RGBType = new GraphQLEnumType({\n *   name: 'RGB',\n *   values: {\n *     RED: { value: 0 },\n *     GREEN: { value: 1 },\n *     BLUE: { value: 2 }\n *   }\n * });\n * ```\n *\n * Note: If a value is not provided in a definition, the name of the enum value\n * will be used as its internal value.\n */\nclass GraphQLEnumType {\n  /* <T> */\n  constructor(config) {\n    var _config$extensionASTN5;\n\n    this.name = (0, _assertName.assertName)(config.name);\n    this.description = config.description;\n    this.extensions = (0, _toObjMap.toObjMap)(config.extensions);\n    this.astNode = config.astNode;\n    this.extensionASTNodes =\n      (_config$extensionASTN5 = config.extensionASTNodes) !== null &&\n      _config$extensionASTN5 !== void 0\n        ? _config$extensionASTN5\n        : [];\n    this._values = defineEnumValues(this.name, config.values);\n    this._valueLookup = new Map(\n      this._values.map((enumValue) => [enumValue.value, enumValue]),\n    );\n    this._nameLookup = (0, _keyMap.keyMap)(this._values, (value) => value.name);\n  }\n\n  get [Symbol.toStringTag]() {\n    return 'GraphQLEnumType';\n  }\n\n  getValues() {\n    return this._values;\n  }\n\n  getValue(name) {\n    return this._nameLookup[name];\n  }\n\n  serialize(outputValue) {\n    const enumValue = this._valueLookup.get(outputValue);\n\n    if (enumValue === undefined) {\n      throw new _GraphQLError.GraphQLError(\n        `Enum \"${this.name}\" cannot represent value: ${(0, _inspect.inspect)(\n          outputValue,\n        )}`,\n      );\n    }\n\n    return enumValue.name;\n  }\n\n  parseValue(inputValue) /* T */\n  {\n    if (typeof inputValue !== 'string') {\n      const valueStr = (0, _inspect.inspect)(inputValue);\n      throw new _GraphQLError.GraphQLError(\n        `Enum \"${this.name}\" cannot represent non-string value: ${valueStr}.` +\n          didYouMeanEnumValue(this, valueStr),\n      );\n    }\n\n    const enumValue = this.getValue(inputValue);\n\n    if (enumValue == null) {\n      throw new _GraphQLError.GraphQLError(\n        `Value \"${inputValue}\" does not exist in \"${this.name}\" enum.` +\n          didYouMeanEnumValue(this, inputValue),\n      );\n    }\n\n    return enumValue.value;\n  }\n\n  parseLiteral(valueNode, _variables) /* T */\n  {\n    // Note: variables will be resolved to a value before calling this function.\n    if (valueNode.kind !== _kinds.Kind.ENUM) {\n      const valueStr = (0, _printer.print)(valueNode);\n      throw new _GraphQLError.GraphQLError(\n        `Enum \"${this.name}\" cannot represent non-enum value: ${valueStr}.` +\n          didYouMeanEnumValue(this, valueStr),\n        {\n          nodes: valueNode,\n        },\n      );\n    }\n\n    const enumValue = this.getValue(valueNode.value);\n\n    if (enumValue == null) {\n      const valueStr = (0, _printer.print)(valueNode);\n      throw new _GraphQLError.GraphQLError(\n        `Value \"${valueStr}\" does not exist in \"${this.name}\" enum.` +\n          didYouMeanEnumValue(this, valueStr),\n        {\n          nodes: valueNode,\n        },\n      );\n    }\n\n    return enumValue.value;\n  }\n\n  toConfig() {\n    const values = (0, _keyValMap.keyValMap)(\n      this.getValues(),\n      (value) => value.name,\n      (value) => ({\n        description: value.description,\n        value: value.value,\n        deprecationReason: value.deprecationReason,\n        extensions: value.extensions,\n        astNode: value.astNode,\n      }),\n    );\n    return {\n      name: this.name,\n      description: this.description,\n      values,\n      extensions: this.extensions,\n      astNode: this.astNode,\n      extensionASTNodes: this.extensionASTNodes,\n    };\n  }\n\n  toString() {\n    return this.name;\n  }\n\n  toJSON() {\n    return this.toString();\n  }\n}\n\nexports.GraphQLEnumType = GraphQLEnumType;\n\nfunction didYouMeanEnumValue(enumType, unknownValueStr) {\n  const allNames = enumType.getValues().map((value) => value.name);\n  const suggestedValues = (0, _suggestionList.suggestionList)(\n    unknownValueStr,\n    allNames,\n  );\n  return (0, _didYouMean.didYouMean)('the enum value', suggestedValues);\n}\n\nfunction defineEnumValues(typeName, valueMap) {\n  isPlainObj(valueMap) ||\n    (0, _devAssert.devAssert)(\n      false,\n      `${typeName} values must be an object with value names as keys.`,\n    );\n  return Object.entries(valueMap).map(([valueName, valueConfig]) => {\n    isPlainObj(valueConfig) ||\n      (0, _devAssert.devAssert)(\n        false,\n        `${typeName}.${valueName} must refer to an object with a \"value\" key ` +\n          `representing an internal value but got: ${(0, _inspect.inspect)(\n            valueConfig,\n          )}.`,\n      );\n    return {\n      name: (0, _assertName.assertEnumValueName)(valueName),\n      description: valueConfig.description,\n      value: valueConfig.value !== undefined ? valueConfig.value : valueName,\n      deprecationReason: valueConfig.deprecationReason,\n      extensions: (0, _toObjMap.toObjMap)(valueConfig.extensions),\n      astNode: valueConfig.astNode,\n    };\n  });\n}\n\n/**\n * Input Object Type Definition\n *\n * An input object defines a structured collection of fields which may be\n * supplied to a field argument.\n *\n * Using `NonNull` will ensure that a value must be provided by the query\n *\n * Example:\n *\n * ```ts\n * const GeoPoint = new GraphQLInputObjectType({\n *   name: 'GeoPoint',\n *   fields: {\n *     lat: { type: new GraphQLNonNull(GraphQLFloat) },\n *     lon: { type: new GraphQLNonNull(GraphQLFloat) },\n *     alt: { type: GraphQLFloat, defaultValue: 0 },\n *   }\n * });\n * ```\n */\nclass GraphQLInputObjectType {\n  constructor(config) {\n    var _config$extensionASTN6;\n\n    this.name = (0, _assertName.assertName)(config.name);\n    this.description = config.description;\n    this.extensions = (0, _toObjMap.toObjMap)(config.extensions);\n    this.astNode = config.astNode;\n    this.extensionASTNodes =\n      (_config$extensionASTN6 = config.extensionASTNodes) !== null &&\n      _config$extensionASTN6 !== void 0\n        ? _config$extensionASTN6\n        : [];\n    this._fields = defineInputFieldMap.bind(undefined, config);\n  }\n\n  get [Symbol.toStringTag]() {\n    return 'GraphQLInputObjectType';\n  }\n\n  getFields() {\n    if (typeof this._fields === 'function') {\n      this._fields = this._fields();\n    }\n\n    return this._fields;\n  }\n\n  toConfig() {\n    const fields = (0, _mapValue.mapValue)(this.getFields(), (field) => ({\n      description: field.description,\n      type: field.type,\n      defaultValue: field.defaultValue,\n      deprecationReason: field.deprecationReason,\n      extensions: field.extensions,\n      astNode: field.astNode,\n    }));\n    return {\n      name: this.name,\n      description: this.description,\n      fields,\n      extensions: this.extensions,\n      astNode: this.astNode,\n      extensionASTNodes: this.extensionASTNodes,\n    };\n  }\n\n  toString() {\n    return this.name;\n  }\n\n  toJSON() {\n    return this.toString();\n  }\n}\n\nexports.GraphQLInputObjectType = GraphQLInputObjectType;\n\nfunction defineInputFieldMap(config) {\n  const fieldMap = resolveObjMapThunk(config.fields);\n  isPlainObj(fieldMap) ||\n    (0, _devAssert.devAssert)(\n      false,\n      `${config.name} fields must be an object with field names as keys or a function which returns such an object.`,\n    );\n  return (0, _mapValue.mapValue)(fieldMap, (fieldConfig, fieldName) => {\n    !('resolve' in fieldConfig) ||\n      (0, _devAssert.devAssert)(\n        false,\n        `${config.name}.${fieldName} field has a resolve property, but Input Types cannot define resolvers.`,\n      );\n    return {\n      name: (0, _assertName.assertName)(fieldName),\n      description: fieldConfig.description,\n      type: fieldConfig.type,\n      defaultValue: fieldConfig.defaultValue,\n      deprecationReason: fieldConfig.deprecationReason,\n      extensions: (0, _toObjMap.toObjMap)(fieldConfig.extensions),\n      astNode: fieldConfig.astNode,\n    };\n  });\n}\n\nfunction isRequiredInputField(field) {\n  return isNonNullType(field.type) && field.defaultValue === undefined;\n}\n/jsutils/mapValue.js\u0001'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.mapValue = mapValue;\n\n/**\n * Creates an object map with the same keys as `map` and values generated by\n * running each value of `map` thru `fn`.\n */\nfunction mapValue(map, fn) {\n  const result = Object.create(null);\n\n  for (const key of Object.keys(map)) {\n    result[key] = fn(map[key], key);\n  }\n\n  return result;\n}\n/jsutils/naturalCompare.js\u0005q'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.naturalCompare = naturalCompare;\n\n/**\n * Returns a number indicating whether a reference string comes before, or after,\n * or is the same as the given string in natural sort order.\n *\n * See: https://en.wikipedia.org/wiki/Natural_sort_order\n *\n */\nfunction naturalCompare(aStr, bStr) {\n  let aIndex = 0;\n  let bIndex = 0;\n\n  while (aIndex < aStr.length && bIndex < bStr.length) {\n    let aChar = aStr.charCodeAt(aIndex);\n    let bChar = bStr.charCodeAt(bIndex);\n\n    if (isDigit(aChar) && isDigit(bChar)) {\n      let aNum = 0;\n\n      do {\n        ++aIndex;\n        aNum = aNum * 10 + aChar - DIGIT_0;\n        aChar = aStr.charCodeAt(aIndex);\n      } while (isDigit(aChar) && aNum > 0);\n\n      let bNum = 0;\n\n      do {\n        ++bIndex;\n        bNum = bNum * 10 + bChar - DIGIT_0;\n        bChar = bStr.charCodeAt(bIndex);\n      } while (isDigit(bChar) && bNum > 0);\n\n      if (aNum < bNum) {\n        return -1;\n      }\n\n      if (aNum > bNum) {\n        return 1;\n      }\n    } else {\n      if (aChar < bChar) {\n        return -1;\n      }\n\n      if (aChar > bChar) {\n        return 1;\n      }\n\n      ++aIndex;\n      ++bIndex;\n    }\n  }\n\n  return aStr.length - bStr.length;\n}\n\nconst DIGIT_0 = 48;\nconst DIGIT_9 = 57;\n\nfunction isDigit(code) {\n  return !isNaN(code) && DIGIT_0 <= code && code <= DIGIT_9;\n}\n/type/schema.mjs+import { devAssert } from '../jsutils/devAssert.mjs';\nimport { inspect } from '../jsutils/inspect.mjs';\nimport { instanceOf } from '../jsutils/instanceOf.mjs';\nimport { isObjectLike } from '../jsutils/isObjectLike.mjs';\nimport { toObjMap } from '../jsutils/toObjMap.mjs';\nimport { OperationTypeNode } from '../language/ast.mjs';\nimport {\n  getNamedType,\n  isInputObjectType,\n  isInterfaceType,\n  isObjectType,\n  isUnionType,\n} from './definition.mjs';\nimport { isDirective, specifiedDirectives } from './directives.mjs';\nimport { __Schema } from './introspection.mjs';\n/**\n * Test if the given value is a GraphQL schema.\n */\n\nexport function isSchema(schema) {\n  return instanceOf(schema, GraphQLSchema);\n}\nexport function assertSchema(schema) {\n  if (!isSchema(schema)) {\n    throw new Error(`Expected ${inspect(schema)} to be a GraphQL schema.`);\n  }\n\n  return schema;\n}\n/**\n * Custom extensions\n *\n * @remarks\n * Use a unique identifier name for your extension, for example the name of\n * your library or project. Do not use a shortened identifier as this increases\n * the risk of conflicts. We recommend you add at most one extension field,\n * an object which can contain all the values you need.\n */\n\n/**\n * Schema Definition\n *\n * A Schema is created by supplying the root types of each type of operation,\n * query and mutation (optional). A schema definition is then supplied to the\n * validator and executor.\n *\n * Example:\n *\n * ```ts\n * const MyAppSchema = new GraphQLSchema({\n *   query: MyAppQueryRootType,\n *   mutation: MyAppMutationRootType,\n * })\n * ```\n *\n * Note: When the schema is constructed, by default only the types that are\n * reachable by traversing the root types are included, other types must be\n * explicitly referenced.\n *\n * Example:\n *\n * ```ts\n * const characterInterface = new GraphQLInterfaceType({\n *   name: 'Character',\n *   ...\n * });\n *\n * const humanType = new GraphQLObjectType({\n *   name: 'Human',\n *   interfaces: [characterInterface],\n *   ...\n * });\n *\n * const droidType = new GraphQLObjectType({\n *   name: 'Droid',\n *   interfaces: [characterInterface],\n *   ...\n * });\n *\n * const schema = new GraphQLSchema({\n *   query: new GraphQLObjectType({\n *     name: 'Query',\n *     fields: {\n *       hero: { type: characterInterface, ... },\n *     }\n *   }),\n *   ...\n *   // Since this schema references only the `Character` interface it's\n *   // necessary to explicitly list the types that implement it if\n *   // you want them to be included in the final schema.\n *   types: [humanType, droidType],\n * })\n * ```\n *\n * Note: If an array of `directives` are provided to GraphQLSchema, that will be\n * the exact list of directives represented and allowed. If `directives` is not\n * provided then a default set of the specified directives (e.g. `@include` and\n * `@skip`) will be used. If you wish to provide *additional* directives to these\n * specified directives, you must explicitly declare them. Example:\n *\n * ```ts\n * const MyAppSchema = new GraphQLSchema({\n *   ...\n *   directives: specifiedDirectives.concat([ myCustomDirective ]),\n * })\n * ```\n */\nexport class GraphQLSchema {\n  // Used as a cache for validateSchema().\n  constructor(config) {\n    var _config$extensionASTN, _config$directives;\n\n    // If this schema was built from a source known to be valid, then it may be\n    // marked with assumeValid to avoid an additional type system validation.\n    this.__validationErrors = config.assumeValid === true ? [] : undefined; // Check for common mistakes during construction to produce early errors.\n\n    isObjectLike(config) ||\n      devAssert(false, 'Must provide configuration object.');\n    !config.types ||\n      Array.isArray(config.types) ||\n      devAssert(\n        false,\n        `\"types\" must be Array if provided but got: ${inspect(config.types)}.`,\n      );\n    !config.directives ||\n      Array.isArray(config.directives) ||\n      devAssert(\n        false,\n        '\"directives\" must be Array if provided but got: ' +\n          `${inspect(config.directives)}.`,\n      );\n    this.description = config.description;\n    this.extensions = toObjMap(config.extensions);\n    this.astNode = config.astNode;\n    this.extensionASTNodes =\n      (_config$extensionASTN = config.extensionASTNodes) !== null &&\n      _config$extensionASTN !== void 0\n        ? _config$extensionASTN\n        : [];\n    this._queryType = config.query;\n    this._mutationType = config.mutation;\n    this._subscriptionType = config.subscription; // Provide specified directives (e.g. @include and @skip) by default.\n\n    this._directives =\n      (_config$directives = config.directives) !== null &&\n      _config$directives !== void 0\n        ? _config$directives\n        : specifiedDirectives; // To preserve order of user-provided types, we add first to add them to\n    // the set of \"collected\" types, so `collectReferencedTypes` ignore them.\n\n    const allReferencedTypes = new Set(config.types);\n\n    if (config.types != null) {\n      for (const type of config.types) {\n        // When we ready to process this type, we remove it from \"collected\" types\n        // and then add it together with all dependent types in the correct position.\n        allReferencedTypes.delete(type);\n        collectReferencedTypes(type, allReferencedTypes);\n      }\n    }\n\n    if (this._queryType != null) {\n      collectReferencedTypes(this._queryType, allReferencedTypes);\n    }\n\n    if (this._mutationType != null) {\n      collectReferencedTypes(this._mutationType, allReferencedTypes);\n    }\n\n    if (this._subscriptionType != null) {\n      collectReferencedTypes(this._subscriptionType, allReferencedTypes);\n    }\n\n    for (const directive of this._directives) {\n      // Directives are not validated until validateSchema() is called.\n      if (isDirective(directive)) {\n        for (const arg of directive.args) {\n          collectReferencedTypes(arg.type, allReferencedTypes);\n        }\n      }\n    }\n\n    collectReferencedTypes(__Schema, allReferencedTypes); // Storing the resulting map for reference by the schema.\n\n    this._typeMap = Object.create(null);\n    this._subTypeMap = Object.create(null); // Keep track of all implementations by interface name.\n\n    this._implementationsMap = Object.create(null);\n\n    for (const namedType of allReferencedTypes) {\n      if (namedType == null) {\n        continue;\n      }\n\n      const typeName = namedType.name;\n      typeName ||\n        devAssert(\n          false,\n          'One of the provided types for building the Schema is missing a name.',\n        );\n\n      if (this._typeMap[typeName] !== undefined) {\n        throw new Error(\n          `Schema must contain uniquely named types but contains multiple types named \"${typeName}\".`,\n        );\n      }\n\n      this._typeMap[typeName] = namedType;\n\n      if (isInterfaceType(namedType)) {\n        // Store implementations by interface.\n        for (const iface of namedType.getInterfaces()) {\n          if (isInterfaceType(iface)) {\n            let implementations = this._implementationsMap[iface.name];\n\n            if (implementations === undefined) {\n              implementations = this._implementationsMap[iface.name] = {\n                objects: [],\n                interfaces: [],\n              };\n            }\n\n            implementations.interfaces.push(namedType);\n          }\n        }\n      } else if (isObjectType(namedType)) {\n        // Store implementations by objects.\n        for (const iface of namedType.getInterfaces()) {\n          if (isInterfaceType(iface)) {\n            let implementations = this._implementationsMap[iface.name];\n\n            if (implementations === undefined) {\n              implementations = this._implementationsMap[iface.name] = {\n                objects: [],\n                interfaces: [],\n              };\n            }\n\n            implementations.objects.push(namedType);\n          }\n        }\n      }\n    }\n  }\n\n  get [Symbol.toStringTag]() {\n    return 'GraphQLSchema';\n  }\n\n  getQueryType() {\n    return this._queryType;\n  }\n\n  getMutationType() {\n    return this._mutationType;\n  }\n\n  getSubscriptionType() {\n    return this._subscriptionType;\n  }\n\n  getRootType(operation) {\n    switch (operation) {\n      case OperationTypeNode.QUERY:\n        return this.getQueryType();\n\n      case OperationTypeNode.MUTATION:\n        return this.getMutationType();\n\n      case OperationTypeNode.SUBSCRIPTION:\n        return this.getSubscriptionType();\n    }\n  }\n\n  getTypeMap() {\n    return this._typeMap;\n  }\n\n  getType(name) {\n    return this.getTypeMap()[name];\n  }\n\n  getPossibleTypes(abstractType) {\n    return isUnionType(abstractType)\n      ? abstractType.getTypes()\n      : this.getImplementations(abstractType).objects;\n  }\n\n  getImplementations(interfaceType) {\n    const implementations = this._implementationsMap[interfaceType.name];\n    return implementations !== null && implementations !== void 0\n      ? implementations\n      : {\n          objects: [],\n          interfaces: [],\n        };\n  }\n\n  isSubType(abstractType, maybeSubType) {\n    let map = this._subTypeMap[abstractType.name];\n\n    if (map === undefined) {\n      map = Object.create(null);\n\n      if (isUnionType(abstractType)) {\n        for (const type of abstractType.getTypes()) {\n          map[type.name] = true;\n        }\n      } else {\n        const implementations = this.getImplementations(abstractType);\n\n        for (const type of implementations.objects) {\n          map[type.name] = true;\n        }\n\n        for (const type of implementations.interfaces) {\n          map[type.name] = true;\n        }\n      }\n\n      this._subTypeMap[abstractType.name] = map;\n    }\n\n    return map[maybeSubType.name] !== undefined;\n  }\n\n  getDirectives() {\n    return this._directives;\n  }\n\n  getDirective(name) {\n    return this.getDirectives().find((directive) => directive.name === name);\n  }\n\n  toConfig() {\n    return {\n      description: this.description,\n      query: this.getQueryType(),\n      mutation: this.getMutationType(),\n      subscription: this.getSubscriptionType(),\n      types: Object.values(this.getTypeMap()),\n      directives: this.getDirectives(),\n      extensions: this.extensions,\n      astNode: this.astNode,\n      extensionASTNodes: this.extensionASTNodes,\n      assumeValid: this.__validationErrors !== undefined,\n    };\n  }\n}\n\nfunction collectReferencedTypes(type, typeSet) {\n  const namedType = getNamedType(type);\n\n  if (!typeSet.has(namedType)) {\n    typeSet.add(namedType);\n\n    if (isUnionType(namedType)) {\n      for (const memberType of namedType.getTypes()) {\n        collectReferencedTypes(memberType, typeSet);\n      }\n    } else if (isObjectType(namedType) || isInterfaceType(namedType)) {\n      for (const interfaceType of namedType.getInterfaces()) {\n        collectReferencedTypes(interfaceType, typeSet);\n      }\n\n      for (const field of Object.values(namedType.getFields())) {\n        collectReferencedTypes(field.type, typeSet);\n\n        for (const arg of field.args) {\n          collectReferencedTypes(arg.type, typeSet);\n        }\n      }\n    } else if (isInputObjectType(namedType)) {\n      for (const field of Object.values(namedType.getFields())) {\n        collectReferencedTypes(field.type, typeSet);\n      }\n    }\n  }\n\n  return typeSet;\n}\n/jsutils/inspect.d.tsl/**\n * Used to print values in error messages.\n */\nexport declare function inspect(value: unknown): string;\n./validation/rules/UniqueDirectiveNamesRule.mjs\u0004import { GraphQLError } from '../../error/GraphQLError.mjs';\n\n/**\n * Unique directive names\n *\n * A GraphQL document is only valid if all defined directives have unique names.\n */\nexport function UniqueDirectiveNamesRule(context) {\n  const knownDirectiveNames = Object.create(null);\n  const schema = context.getSchema();\n  return {\n    DirectiveDefinition(node) {\n      const directiveName = node.name.value;\n\n      if (\n        schema !== null &&\n        schema !== void 0 &&\n        schema.getDirective(directiveName)\n      ) {\n        context.reportError(\n          new GraphQLError(\n            `Directive \"@${directiveName}\" already exists in the schema. It cannot be redefined.`,\n            {\n              nodes: node.name,\n            },\n          ),\n        );\n        return;\n      }\n\n      if (knownDirectiveNames[directiveName]) {\n        context.reportError(\n          new GraphQLError(\n            `There can be only one directive named \"@${directiveName}\".`,\n            {\n              nodes: [knownDirectiveNames[directiveName], node.name],\n            },\n          ),\n        );\n      } else {\n        knownDirectiveNames[directiveName] = node.name;\n      }\n\n      return false;\n    },\n  };\n}\n/subscription/index.mjs\u0003N/**\n * NOTE: the `graphql/subscription` module has been deprecated with its\n * exported functions integrated into the `graphql/execution` module, to\n * better conform with the terminology of the GraphQL specification.\n *\n * For backwards compatibility, the `graphql/subscription` module\n * currently re-exports the moved functions from the `graphql/execution`\n * module. In the next major release, the `graphql/subscription` module\n * will be dropped entirely.\n */\n\n/**\n * @deprecated use ExecutionArgs instead. Will be removed in v17\n *\n * ExecutionArgs has been broadened to include all properties within SubscriptionArgs.\n * The SubscriptionArgs type is retained for backwards compatibility.\n */\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport { subscribe, createSourceEventStream } from '../execution/subscribe.mjs';\n-/validation/rules/UniqueFragmentNamesRule.mjs\u0003simport { GraphQLError } from '../../error/GraphQLError.mjs';\n\n/**\n * Unique fragment names\n *\n * A GraphQL document is only valid if all defined fragments have unique names.\n *\n * See https://spec.graphql.org/draft/#sec-Fragment-Name-Uniqueness\n */\nexport function UniqueFragmentNamesRule(context) {\n  const knownFragmentNames = Object.create(null);\n  return {\n    OperationDefinition: () => false,\n\n    FragmentDefinition(node) {\n      const fragmentName = node.name.value;\n\n      if (knownFragmentNames[fragmentName]) {\n        context.reportError(\n          new GraphQLError(\n            `There can be only one fragment named \"${fragmentName}\".`,\n            {\n              nodes: [knownFragmentNames[fragmentName], node.name],\n            },\n          ),\n        );\n      } else {\n        knownFragmentNames[fragmentName] = node.name;\n      }\n\n      return false;\n    },\n  };\n}\n/execution/index.d.ts\u0001export { pathToArray as responsePathAsArray } from '../jsutils/Path';\nexport {\n  execute,\n  executeSync,\n  defaultFieldResolver,\n  defaultTypeResolver,\n} from './execute';\nexport type {\n  ExecutionArgs,\n  ExecutionResult,\n  FormattedExecutionResult,\n} from './execute';\nexport { subscribe, createSourceEventStream } from './subscribe';\nexport {\n  getArgumentValues,\n  getVariableValues,\n  getDirectiveValues,\n} from './values';\n5/validation/rules/UniqueDirectivesPerLocationRule.mjs\n\\import { GraphQLError } from '../../error/GraphQLError.mjs';\nimport { Kind } from '../../language/kinds.mjs';\nimport {\n  isTypeDefinitionNode,\n  isTypeExtensionNode,\n} from '../../language/predicates.mjs';\nimport { specifiedDirectives } from '../../type/directives.mjs';\n\n/**\n * Unique directive names per location\n *\n * A GraphQL document is only valid if all non-repeatable directives at\n * a given location are uniquely named.\n *\n * See https://spec.graphql.org/draft/#sec-Directives-Are-Unique-Per-Location\n */\nexport function UniqueDirectivesPerLocationRule(context) {\n  const uniqueDirectiveMap = Object.create(null);\n  const schema = context.getSchema();\n  const definedDirectives = schema\n    ? schema.getDirectives()\n    : specifiedDirectives;\n\n  for (const directive of definedDirectives) {\n    uniqueDirectiveMap[directive.name] = !directive.isRepeatable;\n  }\n\n  const astDefinitions = context.getDocument().definitions;\n\n  for (const def of astDefinitions) {\n    if (def.kind === Kind.DIRECTIVE_DEFINITION) {\n      uniqueDirectiveMap[def.name.value] = !def.repeatable;\n    }\n  }\n\n  const schemaDirectives = Object.create(null);\n  const typeDirectivesMap = Object.create(null);\n  return {\n    // Many different AST nodes may contain directives. Rather than listing\n    // them all, just listen for entering any node, and check to see if it\n    // defines any directives.\n    enter(node) {\n      if (!('directives' in node) || !node.directives) {\n        return;\n      }\n\n      let seenDirectives;\n\n      if (\n        node.kind === Kind.SCHEMA_DEFINITION ||\n        node.kind === Kind.SCHEMA_EXTENSION\n      ) {\n        seenDirectives = schemaDirectives;\n      } else if (isTypeDefinitionNode(node) || isTypeExtensionNode(node)) {\n        const typeName = node.name.value;\n        seenDirectives = typeDirectivesMap[typeName];\n\n        if (seenDirectives === undefined) {\n          typeDirectivesMap[typeName] = seenDirectives = Object.create(null);\n        }\n      } else {\n        seenDirectives = Object.create(null);\n      }\n\n      for (const directive of node.directives) {\n        const directiveName = directive.name.value;\n\n        if (uniqueDirectiveMap[directiveName]) {\n          if (seenDirectives[directiveName]) {\n            context.reportError(\n              new GraphQLError(\n                `The directive \"@${directiveName}\" can only be used once at this location.`,\n                {\n                  nodes: [seenDirectives[directiveName], directive],\n                },\n              ),\n            );\n          } else {\n            seenDirectives[directiveName] = directive;\n          }\n        }\n      }\n    },\n  };\n}\n/jsutils/inspect.js\n5'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.inspect = inspect;\nconst MAX_ARRAY_LENGTH = 10;\nconst MAX_RECURSIVE_DEPTH = 2;\n/**\n * Used to print values in error messages.\n */\n\nfunction inspect(value) {\n  return formatValue(value, []);\n}\n\nfunction formatValue(value, seenValues) {\n  switch (typeof value) {\n    case 'string':\n      return JSON.stringify(value);\n\n    case 'function':\n      return value.name ? `[function ${value.name}]` : '[function]';\n\n    case 'object':\n      return formatObjectValue(value, seenValues);\n\n    default:\n      return String(value);\n  }\n}\n\nfunction formatObjectValue(value, previouslySeenValues) {\n  if (value === null) {\n    return 'null';\n  }\n\n  if (previouslySeenValues.includes(value)) {\n    return '[Circular]';\n  }\n\n  const seenValues = [...previouslySeenValues, value];\n\n  if (isJSONable(value)) {\n    const jsonValue = value.toJSON(); // check for infinite recursion\n\n    if (jsonValue !== value) {\n      return typeof jsonValue === 'string'\n        ? jsonValue\n        : formatValue(jsonValue, seenValues);\n    }\n  } else if (Array.isArray(value)) {\n    return formatArray(value, seenValues);\n  }\n\n  return formatObject(value, seenValues);\n}\n\nfunction isJSONable(value) {\n  return typeof value.toJSON === 'function';\n}\n\nfunction formatObject(object, seenValues) {\n  const entries = Object.entries(object);\n\n  if (entries.length === 0) {\n    return '{}';\n  }\n\n  if (seenValues.length > MAX_RECURSIVE_DEPTH) {\n    return '[' + getObjectTag(object) + ']';\n  }\n\n  const properties = entries.map(\n    ([key, value]) => key + ': ' + formatValue(value, seenValues),\n  );\n  return '{ ' + properties.join(', ') + ' }';\n}\n\nfunction formatArray(array, seenValues) {\n  if (array.length === 0) {\n    return '[]';\n  }\n\n  if (seenValues.length > MAX_RECURSIVE_DEPTH) {\n    return '[Array]';\n  }\n\n  const len = Math.min(MAX_ARRAY_LENGTH, array.length);\n  const remaining = array.length - len;\n  const items = [];\n\n  for (let i = 0; i < len; ++i) {\n    items.push(formatValue(array[i], seenValues));\n  }\n\n  if (remaining === 1) {\n    items.push('... 1 more item');\n  } else if (remaining > 1) {\n    items.push(`... ${remaining} more items`);\n  }\n\n  return '[' + items.join(', ') + ']';\n}\n\nfunction getObjectTag(object) {\n  const tag = Object.prototype.toString\n    .call(object)\n    .replace(/^\\[object /, '')\n    .replace(/]$/, '');\n\n  if (tag === 'Object' && typeof object.constructor === 'function') {\n    const name = object.constructor.name;\n\n    if (typeof name === 'string' && name !== '') {\n      return name;\n    }\n  }\n\n  return tag;\n}\n/language/printLocation.js\tX'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.printLocation = printLocation;\nexports.printSourceLocation = printSourceLocation;\n\nvar _location = require('./location.js');\n\n/**\n * Render a helpful description of the location in the GraphQL Source document.\n */\nfunction printLocation(location) {\n  return printSourceLocation(\n    location.source,\n    (0, _location.getLocation)(location.source, location.start),\n  );\n}\n/**\n * Render a helpful description of the location in the GraphQL Source document.\n */\n\nfunction printSourceLocation(source, sourceLocation) {\n  const firstLineColumnOffset = source.locationOffset.column - 1;\n  const body = ''.padStart(firstLineColumnOffset) + source.body;\n  const lineIndex = sourceLocation.line - 1;\n  const lineOffset = source.locationOffset.line - 1;\n  const lineNum = sourceLocation.line + lineOffset;\n  const columnOffset = sourceLocation.line === 1 ? firstLineColumnOffset : 0;\n  const columnNum = sourceLocation.column + columnOffset;\n  const locationStr = `${source.name}:${lineNum}:${columnNum}\\n`;\n  const lines = body.split(/\\r\\n|[\\n\\r]/g);\n  const locationLine = lines[lineIndex]; // Special case for minified documents\n\n  if (locationLine.length > 120) {\n    const subLineIndex = Math.floor(columnNum / 80);\n    const subLineColumnNum = columnNum % 80;\n    const subLines = [];\n\n    for (let i = 0; i < locationLine.length; i += 80) {\n      subLines.push(locationLine.slice(i, i + 80));\n    }\n\n    return (\n      locationStr +\n      printPrefixedLines([\n        [`${lineNum} |`, subLines[0]],\n        ...subLines.slice(1, subLineIndex + 1).map((subLine) => ['|', subLine]),\n        ['|', '^'.padStart(subLineColumnNum)],\n        ['|', subLines[subLineIndex + 1]],\n      ])\n    );\n  }\n\n  return (\n    locationStr +\n    printPrefixedLines([\n      // Lines specified like this: [\"prefix\", \"string\"],\n      [`${lineNum - 1} |`, lines[lineIndex - 1]],\n      [`${lineNum} |`, locationLine],\n      ['|', '^'.padStart(columnNum)],\n      [`${lineNum + 1} |`, lines[lineIndex + 1]],\n    ])\n  );\n}\n\nfunction printPrefixedLines(lines) {\n  const existingLines = lines.filter(([_, line]) => line !== undefined);\n  const padLen = Math.max(...existingLines.map(([prefix]) => prefix.length));\n  return existingLines\n    .map(([prefix, line]) => prefix.padStart(padLen) + (line ? ' ' + line : ''))\n    .join('\\n');\n}\n/language/tokenKind.js\u0004h'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.TokenKind = void 0;\n\n/**\n * An exported enum describing the different kinds of tokens that the\n * lexer emits.\n */\nvar TokenKind;\nexports.TokenKind = TokenKind;\n\n(function (TokenKind) {\n  TokenKind['SOF'] = '<SOF>';\n  TokenKind['EOF'] = '<EOF>';\n  TokenKind['BANG'] = '!';\n  TokenKind['DOLLAR'] = '$';\n  TokenKind['AMP'] = '&';\n  TokenKind['PAREN_L'] = '(';\n  TokenKind['PAREN_R'] = ')';\n  TokenKind['SPREAD'] = '...';\n  TokenKind['COLON'] = ':';\n  TokenKind['EQUALS'] = '=';\n  TokenKind['AT'] = '@';\n  TokenKind['BRACKET_L'] = '[';\n  TokenKind['BRACKET_R'] = ']';\n  TokenKind['BRACE_L'] = '{';\n  TokenKind['PIPE'] = '|';\n  TokenKind['BRACE_R'] = '}';\n  TokenKind['NAME'] = 'Name';\n  TokenKind['INT'] = 'Int';\n  TokenKind['FLOAT'] = 'Float';\n  TokenKind['STRING'] = 'String';\n  TokenKind['BLOCK_STRING'] = 'BlockString';\n  TokenKind['COMMENT'] = 'Comment';\n})(TokenKind || (exports.TokenKind = TokenKind = {}));\n/**\n * The enum type representing the token kinds values.\n *\n * @deprecated Please use `TokenKind`. Will be remove in v17.\n */\n/type/scalars.d.ts\u00047import type { GraphQLNamedType } from './definition';\nimport { GraphQLScalarType } from './definition';\n/**\n * Maximum possible Int value as per GraphQL Spec (32-bit signed integer).\n * n.b. This differs from JavaScript's numbers that are IEEE 754 doubles safe up-to 2^53 - 1\n * */\nexport declare const GRAPHQL_MAX_INT = 2147483647;\n/**\n * Minimum possible Int value as per GraphQL Spec (32-bit signed integer).\n * n.b. This differs from JavaScript's numbers that are IEEE 754 doubles safe starting at -(2^53 - 1)\n * */\nexport declare const GRAPHQL_MIN_INT = -2147483648;\nexport declare const GraphQLInt: GraphQLScalarType<number, number>;\nexport declare const GraphQLFloat: GraphQLScalarType<number, number>;\nexport declare const GraphQLString: GraphQLScalarType<string, string>;\nexport declare const GraphQLBoolean: GraphQLScalarType<boolean, boolean>;\nexport declare const GraphQLID: GraphQLScalarType<string, string>;\nexport declare const specifiedScalarTypes: ReadonlyArray<GraphQLScalarType>;\nexport declare function isSpecifiedScalarType(type: GraphQLNamedType): boolean;\n/jsutils/identityFunc.d.tse/**\n * Returns the first argument it receives.\n */\nexport declare function identityFunc<T>(x: T): T;\n/jsutils/isObjectLike.js\u0001S'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.isObjectLike = isObjectLike;\n\n/**\n * Return true if `value` is object-like. A value is object-like if it's not\n * `null` and has a `typeof` result of \"object\".\n */\nfunction isObjectLike(value) {\n  return typeof value == 'object' && value !== null;\n}\n/execution/execute.d.ts\u0018Dimport type { Maybe } from '../jsutils/Maybe';\nimport type { ObjMap } from '../jsutils/ObjMap';\nimport type { Path } from '../jsutils/Path';\nimport type { PromiseOrValue } from '../jsutils/PromiseOrValue';\nimport type { GraphQLFormattedError } from '../error/GraphQLError';\nimport { GraphQLError } from '../error/GraphQLError';\nimport type {\n  DocumentNode,\n  FieldNode,\n  FragmentDefinitionNode,\n  OperationDefinitionNode,\n} from '../language/ast';\nimport type {\n  GraphQLField,\n  GraphQLFieldResolver,\n  GraphQLObjectType,\n  GraphQLResolveInfo,\n  GraphQLTypeResolver,\n} from '../type/definition';\nimport type { GraphQLSchema } from '../type/schema';\n/**\n * Terminology\n *\n * \"Definitions\" are the generic name for top-level statements in the document.\n * Examples of this include:\n * 1) Operations (such as a query)\n * 2) Fragments\n *\n * \"Operations\" are a generic name for requests in the document.\n * Examples of this include:\n * 1) query,\n * 2) mutation\n *\n * \"Selections\" are the definitions that can appear legally and at\n * single level of the query. These include:\n * 1) field references e.g `a`\n * 2) fragment \"spreads\" e.g. `...c`\n * 3) inline fragment \"spreads\" e.g. `...on Type { a }`\n */\n/**\n * Data that must be available at all points during query execution.\n *\n * Namely, schema of the type system that is currently executing,\n * and the fragments defined in the query document\n */\nexport interface ExecutionContext {\n  schema: GraphQLSchema;\n  fragments: ObjMap<FragmentDefinitionNode>;\n  rootValue: unknown;\n  contextValue: unknown;\n  operation: OperationDefinitionNode;\n  variableValues: {\n    [variable: string]: unknown;\n  };\n  fieldResolver: GraphQLFieldResolver<any, any>;\n  typeResolver: GraphQLTypeResolver<any, any>;\n  subscribeFieldResolver: GraphQLFieldResolver<any, any>;\n  errors: Array<GraphQLError>;\n}\n/**\n * The result of GraphQL execution.\n *\n *   - `errors` is included when any errors occurred as a non-empty array.\n *   - `data` is the result of a successful execution of the query.\n *   - `extensions` is reserved for adding non-standard properties.\n */\nexport interface ExecutionResult<\n  TData = ObjMap<unknown>,\n  TExtensions = ObjMap<unknown>,\n> {\n  errors?: ReadonlyArray<GraphQLError>;\n  data?: TData | null;\n  extensions?: TExtensions;\n}\nexport interface FormattedExecutionResult<\n  TData = ObjMap<unknown>,\n  TExtensions = ObjMap<unknown>,\n> {\n  errors?: ReadonlyArray<GraphQLFormattedError>;\n  data?: TData | null;\n  extensions?: TExtensions;\n}\nexport interface ExecutionArgs {\n  schema: GraphQLSchema;\n  document: DocumentNode;\n  rootValue?: unknown;\n  contextValue?: unknown;\n  variableValues?: Maybe<{\n    readonly [variable: string]: unknown;\n  }>;\n  operationName?: Maybe<string>;\n  fieldResolver?: Maybe<GraphQLFieldResolver<any, any>>;\n  typeResolver?: Maybe<GraphQLTypeResolver<any, any>>;\n  subscribeFieldResolver?: Maybe<GraphQLFieldResolver<any, any>>;\n}\n/**\n * Implements the \"Executing requests\" section of the GraphQL specification.\n *\n * Returns either a synchronous ExecutionResult (if all encountered resolvers\n * are synchronous), or a Promise of an ExecutionResult that will eventually be\n * resolved and never rejected.\n *\n * If the arguments to this function do not result in a legal execution context,\n * a GraphQLError will be thrown immediately explaining the invalid input.\n */\nexport declare function execute(\n  args: ExecutionArgs,\n): PromiseOrValue<ExecutionResult>;\n/**\n * Also implements the \"Executing requests\" section of the GraphQL specification.\n * However, it guarantees to complete synchronously (or throw an error) assuming\n * that all field resolvers are also synchronous.\n */\nexport declare function executeSync(args: ExecutionArgs): ExecutionResult;\n/**\n * Essential assertions before executing to provide developer feedback for\n * improper use of the GraphQL library.\n *\n * @internal\n */\nexport declare function assertValidExecutionArguments(\n  schema: GraphQLSchema,\n  document: DocumentNode,\n  rawVariableValues: Maybe<{\n    readonly [variable: string]: unknown;\n  }>,\n): void;\n/**\n * Constructs a ExecutionContext object from the arguments passed to\n * execute, which we will pass throughout the other execution methods.\n *\n * Throws a GraphQLError if a valid execution context cannot be created.\n *\n * @internal\n */\nexport declare function buildExecutionContext(\n  args: ExecutionArgs,\n): ReadonlyArray<GraphQLError> | ExecutionContext;\n/**\n * @internal\n */\nexport declare function buildResolveInfo(\n  exeContext: ExecutionContext,\n  fieldDef: GraphQLField<unknown, unknown>,\n  fieldNodes: ReadonlyArray<FieldNode>,\n  parentType: GraphQLObjectType,\n  path: Path,\n): GraphQLResolveInfo;\n/**\n * If a resolveType function is not given, then a default resolve behavior is\n * used which attempts two strategies:\n *\n * First, See if the provided value has a `__typename` field defined, if so, use\n * that value as name of the resolved type.\n *\n * Otherwise, test each possible type for the abstract type by calling\n * isTypeOf for the object being coerced, returning the first type that matches.\n */\nexport declare const defaultTypeResolver: GraphQLTypeResolver<unknown, unknown>;\n/**\n * If a resolve function is not given, then a default resolve behavior is used\n * which takes the property of the source object of the same name as the field\n * and returns it as the result, or if it's a function, returns the result\n * of calling that function while passing along args and context value.\n */\nexport declare const defaultFieldResolver: GraphQLFieldResolver<\n  unknown,\n  unknown\n>;\n/**\n * This method looks up the field on the given type definition.\n * It has special casing for the three introspection fields,\n * __schema, __type and __typename. __typename is special because\n * it can always be queried as a field, even in situations where no\n * other fields are allowed, like on a Union. __schema and __type\n * could get automatically added to the query type, but that would\n * require mutating type definitions, which would cause issues.\n *\n * @internal\n */\nexport declare function getFieldDef(\n  schema: GraphQLSchema,\n  parentType: GraphQLObjectType,\n  fieldNode: FieldNode,\n): Maybe<GraphQLField<unknown, unknown>>;\n/error/index.mjsİexport { GraphQLError, printError, formatError } from './GraphQLError.mjs';\nexport { syntaxError } from './syntaxError.mjs';\nexport { locatedError } from './locatedError.mjs';\n)/validation/rules/NoFragmentCyclesRule.js\t'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.NoFragmentCyclesRule = NoFragmentCyclesRule;\n\nvar _GraphQLError = require('../../error/GraphQLError.js');\n\n/**\n * No fragment cycles\n *\n * The graph of fragment spreads must not form any cycles including spreading itself.\n * Otherwise an operation could infinitely spread or infinitely execute on cycles in the underlying data.\n *\n * See https://spec.graphql.org/draft/#sec-Fragment-spreads-must-not-form-cycles\n */\nfunction NoFragmentCyclesRule(context) {\n  // Tracks already visited fragments to maintain O(N) and to ensure that cycles\n  // are not redundantly reported.\n  const visitedFrags = Object.create(null); // Array of AST nodes used to produce meaningful errors\n\n  const spreadPath = []; // Position in the spread path\n\n  const spreadPathIndexByName = Object.create(null);\n  return {\n    OperationDefinition: () => false,\n\n    FragmentDefinition(node) {\n      detectCycleRecursive(node);\n      return false;\n    },\n  }; // This does a straight-forward DFS to find cycles.\n  // It does not terminate when a cycle was found but continues to explore\n  // the graph to find all possible cycles.\n\n  function detectCycleRecursive(fragment) {\n    if (visitedFrags[fragment.name.value]) {\n      return;\n    }\n\n    const fragmentName = fragment.name.value;\n    visitedFrags[fragmentName] = true;\n    const spreadNodes = context.getFragmentSpreads(fragment.selectionSet);\n\n    if (spreadNodes.length === 0) {\n      return;\n    }\n\n    spreadPathIndexByName[fragmentName] = spreadPath.length;\n\n    for (const spreadNode of spreadNodes) {\n      const spreadName = spreadNode.name.value;\n      const cycleIndex = spreadPathIndexByName[spreadName];\n      spreadPath.push(spreadNode);\n\n      if (cycleIndex === undefined) {\n        const spreadFragment = context.getFragment(spreadName);\n\n        if (spreadFragment) {\n          detectCycleRecursive(spreadFragment);\n        }\n      } else {\n        const cyclePath = spreadPath.slice(cycleIndex);\n        const viaPath = cyclePath\n          .slice(0, -1)\n          .map((s) => '\"' + s.name.value + '\"')\n          .join(', ');\n        context.reportError(\n          new _GraphQLError.GraphQLError(\n            `Cannot spread fragment \"${spreadName}\" within itself` +\n              (viaPath !== '' ? ` via ${viaPath}.` : '.'),\n            {\n              nodes: cyclePath,\n            },\n          ),\n        );\n      }\n\n      spreadPath.pop();\n    }\n\n    spreadPathIndexByName[fragmentName] = undefined;\n  }\n}\n/graphql.mjs\u000fiimport { devAssert } from './jsutils/devAssert.mjs';\nimport { isPromise } from './jsutils/isPromise.mjs';\nimport { parse } from './language/parser.mjs';\nimport { validateSchema } from './type/validate.mjs';\nimport { validate } from './validation/validate.mjs';\nimport { execute } from './execution/execute.mjs';\n/**\n * This is the primary entry point function for fulfilling GraphQL operations\n * by parsing, validating, and executing a GraphQL document along side a\n * GraphQL schema.\n *\n * More sophisticated GraphQL servers, such as those which persist queries,\n * may wish to separate the validation and execution phases to a static time\n * tooling step, and a server runtime step.\n *\n * Accepts either an object with named arguments, or individual arguments:\n *\n * schema:\n *    The GraphQL type system to use when validating and executing a query.\n * source:\n *    A GraphQL language formatted string representing the requested operation.\n * rootValue:\n *    The value provided as the first argument to resolver functions on the top\n *    level type (e.g. the query object type).\n * contextValue:\n *    The context value is provided as an argument to resolver functions after\n *    field arguments. It is used to pass shared information useful at any point\n *    during executing this query, for example the currently logged in user and\n *    connections to databases or other services.\n * variableValues:\n *    A mapping of variable name to runtime value to use for all variables\n *    defined in the requestString.\n * operationName:\n *    The name of the operation to use if requestString contains multiple\n *    possible operations. Can be omitted if requestString contains only\n *    one operation.\n * fieldResolver:\n *    A resolver function to use when one is not provided by the schema.\n *    If not provided, the default field resolver is used (which looks for a\n *    value or method on the source value with the field's name).\n * typeResolver:\n *    A type resolver function to use when none is provided by the schema.\n *    If not provided, the default type resolver is used (which looks for a\n *    `__typename` field or alternatively calls the `isTypeOf` method).\n */\n\nexport function graphql(args) {\n  // Always return a Promise for a consistent API.\n  return new Promise((resolve) => resolve(graphqlImpl(args)));\n}\n/**\n * The graphqlSync function also fulfills GraphQL operations by parsing,\n * validating, and executing a GraphQL document along side a GraphQL schema.\n * However, it guarantees to complete synchronously (or throw an error) assuming\n * that all field resolvers are also synchronous.\n */\n\nexport function graphqlSync(args) {\n  const result = graphqlImpl(args); // Assert that the execution was synchronous.\n\n  if (isPromise(result)) {\n    throw new Error('GraphQL execution failed to complete synchronously.');\n  }\n\n  return result;\n}\n\nfunction graphqlImpl(args) {\n  // Temporary for v15 to v16 migration. Remove in v17\n  arguments.length < 2 ||\n    devAssert(\n      false,\n      'graphql@16 dropped long-deprecated support for positional arguments, please pass an object instead.',\n    );\n  const {\n    schema,\n    source,\n    rootValue,\n    contextValue,\n    variableValues,\n    operationName,\n    fieldResolver,\n    typeResolver,\n  } = args; // Validate Schema\n\n  const schemaValidationErrors = validateSchema(schema);\n\n  if (schemaValidationErrors.length > 0) {\n    return {\n      errors: schemaValidationErrors,\n    };\n  } // Parse\n\n  let document;\n\n  try {\n    document = parse(source);\n  } catch (syntaxError) {\n    return {\n      errors: [syntaxError],\n    };\n  } // Validate\n\n  const validationErrors = validate(schema, document);\n\n  if (validationErrors.length > 0) {\n    return {\n      errors: validationErrors,\n    };\n  } // Execute\n\n  return execute({\n    schema,\n    document,\n    rootValue,\n    contextValue,\n    variableValues,\n    operationName,\n    fieldResolver,\n    typeResolver,\n  });\n}\n/jsutils/devAssert.d.tsNexport declare function devAssert(condition: unknown, message: string): void;\n/jsutils/printPathArray.js\u0001I'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.printPathArray = printPathArray;\n\n/**\n * Build a string describing the path.\n */\nfunction printPathArray(path) {\n  return path\n    .map((key) =>\n      typeof key === 'number' ? '[' + key.toString() + ']' : '.' + key,\n    )\n    .join('');\n}\n /execution/mapAsyncIterator.d.ts\u0001import type { PromiseOrValue } from '../jsutils/PromiseOrValue';\n/**\n * Given an AsyncIterable and a callback function, return an AsyncIterator\n * which produces values mapped via calling the callback function.\n */\nexport declare function mapAsyncIterator<T, U, R = undefined>(\n  iterable: AsyncGenerator<T, R, void> | AsyncIterable<T>,\n  callback: (value: T) => PromiseOrValue<U>,\n): AsyncGenerator<U, R, void>;\n/version.d.ts\u0001?/**\n * A string containing the version of the GraphQL.js library\n */\nexport declare const version: string;\n/**\n * An object containing the components of the GraphQL.js version string\n */\nexport declare const versionInfo: Readonly<{\n  major: number;\n  minor: number;\n  patch: number;\n  preReleaseTag: string | null;\n}>;\n/language/lexer.d.ts\u0004import { Token } from './ast';\nimport type { Source } from './source';\nimport { TokenKind } from './tokenKind';\n/**\n * Given a Source object, creates a Lexer for that source.\n * A Lexer is a stateful stream generator in that every time\n * it is advanced, it returns the next token in the Source. Assuming the\n * source lexes, the final Token emitted by the lexer will be of kind\n * EOF, after which the lexer will repeatedly return the same EOF token\n * whenever called.\n */\nexport declare class Lexer {\n  source: Source;\n  /**\n   * The previously focused non-ignored token.\n   */\n  lastToken: Token;\n  /**\n   * The currently focused non-ignored token.\n   */\n  token: Token;\n  /**\n   * The (1-indexed) line containing the current token.\n   */\n  line: number;\n  /**\n   * The character offset at which the current line begins.\n   */\n  lineStart: number;\n  constructor(source: Source);\n  get [Symbol.toStringTag](): string;\n  /**\n   * Advances the token stream to the next non-ignored token.\n   */\n  advance(): Token;\n  /**\n   * Looks ahead and returns the next non-ignored token, but does not change\n   * the state of Lexer.\n   */\n  lookahead(): Token;\n}\n/**\n * @internal\n */\nexport declare function isPunctuatorTokenKind(kind: TokenKind): boolean;\n/type/index.d.ts\rUexport type { Path as ResponsePath } from '../jsutils/Path';\nexport { isSchema, assertSchema, GraphQLSchema } from './schema';\nexport type { GraphQLSchemaConfig, GraphQLSchemaExtensions } from './schema';\nexport {\n  resolveObjMapThunk,\n  resolveReadonlyArrayThunk,\n  isType,\n  isScalarType,\n  isObjectType,\n  isInterfaceType,\n  isUnionType,\n  isEnumType,\n  isInputObjectType,\n  isListType,\n  isNonNullType,\n  isInputType,\n  isOutputType,\n  isLeafType,\n  isCompositeType,\n  isAbstractType,\n  isWrappingType,\n  isNullableType,\n  isNamedType,\n  isRequiredArgument,\n  isRequiredInputField,\n  assertType,\n  assertScalarType,\n  assertObjectType,\n  assertInterfaceType,\n  assertUnionType,\n  assertEnumType,\n  assertInputObjectType,\n  assertListType,\n  assertNonNullType,\n  assertInputType,\n  assertOutputType,\n  assertLeafType,\n  assertCompositeType,\n  assertAbstractType,\n  assertWrappingType,\n  assertNullableType,\n  assertNamedType,\n  getNullableType,\n  getNamedType,\n  GraphQLScalarType,\n  GraphQLObjectType,\n  GraphQLInterfaceType,\n  GraphQLUnionType,\n  GraphQLEnumType,\n  GraphQLInputObjectType,\n  GraphQLList,\n  GraphQLNonNull,\n} from './definition';\nexport type {\n  GraphQLType,\n  GraphQLInputType,\n  GraphQLOutputType,\n  GraphQLLeafType,\n  GraphQLCompositeType,\n  GraphQLAbstractType,\n  GraphQLWrappingType,\n  GraphQLNullableType,\n  GraphQLNamedType,\n  GraphQLNamedInputType,\n  GraphQLNamedOutputType,\n  ThunkReadonlyArray,\n  ThunkObjMap,\n  GraphQLArgument,\n  GraphQLArgumentConfig,\n  GraphQLArgumentExtensions,\n  GraphQLEnumTypeConfig,\n  GraphQLEnumTypeExtensions,\n  GraphQLEnumValue,\n  GraphQLEnumValueConfig,\n  GraphQLEnumValueConfigMap,\n  GraphQLEnumValueExtensions,\n  GraphQLField,\n  GraphQLFieldConfig,\n  GraphQLFieldConfigArgumentMap,\n  GraphQLFieldConfigMap,\n  GraphQLFieldExtensions,\n  GraphQLFieldMap,\n  GraphQLFieldResolver,\n  GraphQLInputField,\n  GraphQLInputFieldConfig,\n  GraphQLInputFieldConfigMap,\n  GraphQLInputFieldExtensions,\n  GraphQLInputFieldMap,\n  GraphQLInputObjectTypeConfig,\n  GraphQLInputObjectTypeExtensions,\n  GraphQLInterfaceTypeConfig,\n  GraphQLInterfaceTypeExtensions,\n  GraphQLIsTypeOfFn,\n  GraphQLObjectTypeConfig,\n  GraphQLObjectTypeExtensions,\n  GraphQLResolveInfo,\n  GraphQLScalarTypeConfig,\n  GraphQLScalarTypeExtensions,\n  GraphQLTypeResolver,\n  GraphQLUnionTypeConfig,\n  GraphQLUnionTypeExtensions,\n  GraphQLScalarSerializer,\n  GraphQLScalarValueParser,\n  GraphQLScalarLiteralParser,\n} from './definition';\nexport {\n  isDirective,\n  assertDirective,\n  GraphQLDirective,\n  isSpecifiedDirective,\n  specifiedDirectives,\n  GraphQLIncludeDirective,\n  GraphQLSkipDirective,\n  GraphQLDeprecatedDirective,\n  GraphQLSpecifiedByDirective,\n  DEFAULT_DEPRECATION_REASON,\n} from './directives';\nexport type {\n  GraphQLDirectiveConfig,\n  GraphQLDirectiveExtensions,\n} from './directives';\nexport {\n  isSpecifiedScalarType,\n  specifiedScalarTypes,\n  GraphQLInt,\n  GraphQLFloat,\n  GraphQLString,\n  GraphQLBoolean,\n  GraphQLID,\n  GRAPHQL_MAX_INT,\n  GRAPHQL_MIN_INT,\n} from './scalars';\nexport {\n  isIntrospectionType,\n  introspectionTypes,\n  __Schema,\n  __Directive,\n  __DirectiveLocation,\n  __Type,\n  __Field,\n  __InputValue,\n  __EnumValue,\n  __TypeKind,\n  TypeKind,\n  SchemaMetaFieldDef,\n  TypeMetaFieldDef,\n  TypeNameMetaFieldDef,\n} from './introspection';\nexport { validateSchema, assertValidSchema } from './validate';\nexport { assertName, assertEnumValueName } from './assertName';\n/utilities/assertValidName.d.ts\u0001import { GraphQLError } from '../error/GraphQLError';\n/**\n * Upholds the spec rules about naming.\n * @deprecated Please use `assertName` instead. Will be removed in v17\n */\nexport declare function assertValidName(name: string): string;\n/**\n * Returns an Error if a name is invalid.\n * @deprecated Please use `assertName` instead. Will be removed in v17\n */\nexport declare function isValidNameError(\n  name: string,\n): GraphQLError | undefined;\n-/validation/rules/FieldsOnCorrectTypeRule.mjs\u000fimport { didYouMean } from '../../jsutils/didYouMean.mjs';\nimport { naturalCompare } from '../../jsutils/naturalCompare.mjs';\nimport { suggestionList } from '../../jsutils/suggestionList.mjs';\nimport { GraphQLError } from '../../error/GraphQLError.mjs';\nimport {\n  isAbstractType,\n  isInterfaceType,\n  isObjectType,\n} from '../../type/definition.mjs';\n\n/**\n * Fields on correct type\n *\n * A GraphQL document is only valid if all fields selected are defined by the\n * parent type, or are an allowed meta field such as __typename.\n *\n * See https://spec.graphql.org/draft/#sec-Field-Selections\n */\nexport function FieldsOnCorrectTypeRule(context) {\n  return {\n    Field(node) {\n      const type = context.getParentType();\n\n      if (type) {\n        const fieldDef = context.getFieldDef();\n\n        if (!fieldDef) {\n          // This field doesn't exist, lets look for suggestions.\n          const schema = context.getSchema();\n          const fieldName = node.name.value; // First determine if there are any suggested types to condition on.\n\n          let suggestion = didYouMean(\n            'to use an inline fragment on',\n            getSuggestedTypeNames(schema, type, fieldName),\n          ); // If there are no suggested types, then perhaps this was a typo?\n\n          if (suggestion === '') {\n            suggestion = didYouMean(getSuggestedFieldNames(type, fieldName));\n          } // Report an error, including helpful suggestions.\n\n          context.reportError(\n            new GraphQLError(\n              `Cannot query field \"${fieldName}\" on type \"${type.name}\".` +\n                suggestion,\n              {\n                nodes: node,\n              },\n            ),\n          );\n        }\n      }\n    },\n  };\n}\n/**\n * Go through all of the implementations of type, as well as the interfaces that\n * they implement. If any of those types include the provided field, suggest them,\n * sorted by how often the type is referenced.\n */\n\nfunction getSuggestedTypeNames(schema, type, fieldName) {\n  if (!isAbstractType(type)) {\n    // Must be an Object type, which does not have possible fields.\n    return [];\n  }\n\n  const suggestedTypes = new Set();\n  const usageCount = Object.create(null);\n\n  for (const possibleType of schema.getPossibleTypes(type)) {\n    if (!possibleType.getFields()[fieldName]) {\n      continue;\n    } // This object type defines this field.\n\n    suggestedTypes.add(possibleType);\n    usageCount[possibleType.name] = 1;\n\n    for (const possibleInterface of possibleType.getInterfaces()) {\n      var _usageCount$possibleI;\n\n      if (!possibleInterface.getFields()[fieldName]) {\n        continue;\n      } // This interface type defines this field.\n\n      suggestedTypes.add(possibleInterface);\n      usageCount[possibleInterface.name] =\n        ((_usageCount$possibleI = usageCount[possibleInterface.name]) !==\n          null && _usageCount$possibleI !== void 0\n          ? _usageCount$possibleI\n          : 0) + 1;\n    }\n  }\n\n  return [...suggestedTypes]\n    .sort((typeA, typeB) => {\n      // Suggest both interface and object types based on how common they are.\n      const usageCountDiff = usageCount[typeB.name] - usageCount[typeA.name];\n\n      if (usageCountDiff !== 0) {\n        return usageCountDiff;\n      } // Suggest super types first followed by subtypes\n\n      if (isInterfaceType(typeA) && schema.isSubType(typeA, typeB)) {\n        return -1;\n      }\n\n      if (isInterfaceType(typeB) && schema.isSubType(typeB, typeA)) {\n        return 1;\n      }\n\n      return naturalCompare(typeA.name, typeB.name);\n    })\n    .map((x) => x.name);\n}\n/**\n * For the field name provided, determine if there are any similar field names\n * that may be the result of a typo.\n */\n\nfunction getSuggestedFieldNames(type, fieldName) {\n  if (isObjectType(type) || isInterfaceType(type)) {\n    const possibleFieldNames = Object.keys(type.getFields());\n    return suggestionList(fieldName, possibleFieldNames);\n  } // Otherwise, must be a Union type, which does not define fields.\n\n  return [];\n}\n/jsutils/didYouMean.d.ts/**\n * Given [ A, B, C ] return ' Did you mean A, B, or C?'.\n */\nexport declare function didYouMean(suggestions: ReadonlyArray<string>): string;\nexport declare function didYouMean(\n  subMessage: string,\n  suggestions: ReadonlyArray<string>,\n): string;\n/utilities/sortValueNode.mjs\u0003import { naturalCompare } from '../jsutils/naturalCompare.mjs';\nimport { Kind } from '../language/kinds.mjs';\n/**\n * Sort ValueNode.\n *\n * This function returns a sorted copy of the given ValueNode.\n *\n * @internal\n */\n\nexport function sortValueNode(valueNode) {\n  switch (valueNode.kind) {\n    case Kind.OBJECT:\n      return { ...valueNode, fields: sortFields(valueNode.fields) };\n\n    case Kind.LIST:\n      return { ...valueNode, values: valueNode.values.map(sortValueNode) };\n\n    case Kind.INT:\n    case Kind.FLOAT:\n    case Kind.STRING:\n    case Kind.BOOLEAN:\n    case Kind.NULL:\n    case Kind.ENUM:\n    case Kind.VARIABLE:\n      return valueNode;\n  }\n}\n\nfunction sortFields(fields) {\n  return fields\n    .map((fieldNode) => ({\n      ...fieldNode,\n      value: sortValueNode(fieldNode.value),\n    }))\n    .sort((fieldA, fieldB) =>\n      naturalCompare(fieldA.name.value, fieldB.name.value),\n    );\n}\n/execution/execute.jsv;'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.assertValidExecutionArguments = assertValidExecutionArguments;\nexports.buildExecutionContext = buildExecutionContext;\nexports.buildResolveInfo = buildResolveInfo;\nexports.defaultTypeResolver = exports.defaultFieldResolver = void 0;\nexports.execute = execute;\nexports.executeSync = executeSync;\nexports.getFieldDef = getFieldDef;\n\nvar _devAssert = require('../jsutils/devAssert.js');\n\nvar _inspect = require('../jsutils/inspect.js');\n\nvar _invariant = require('../jsutils/invariant.js');\n\nvar _isIterableObject = require('../jsutils/isIterableObject.js');\n\nvar _isObjectLike = require('../jsutils/isObjectLike.js');\n\nvar _isPromise = require('../jsutils/isPromise.js');\n\nvar _memoize = require('../jsutils/memoize3.js');\n\nvar _Path = require('../jsutils/Path.js');\n\nvar _promiseForObject = require('../jsutils/promiseForObject.js');\n\nvar _promiseReduce = require('../jsutils/promiseReduce.js');\n\nvar _GraphQLError = require('../error/GraphQLError.js');\n\nvar _locatedError = require('../error/locatedError.js');\n\nvar _ast = require('../language/ast.js');\n\nvar _kinds = require('../language/kinds.js');\n\nvar _definition = require('../type/definition.js');\n\nvar _introspection = require('../type/introspection.js');\n\nvar _validate = require('../type/validate.js');\n\nvar _collectFields = require('./collectFields.js');\n\nvar _values = require('./values.js');\n\n/**\n * A memoized collection of relevant subfields with regard to the return\n * type. Memoizing ensures the subfields are not repeatedly calculated, which\n * saves overhead when resolving lists of values.\n */\nconst collectSubfields = (0, _memoize.memoize3)(\n  (exeContext, returnType, fieldNodes) =>\n    (0, _collectFields.collectSubfields)(\n      exeContext.schema,\n      exeContext.fragments,\n      exeContext.variableValues,\n      returnType,\n      fieldNodes,\n    ),\n);\n/**\n * Terminology\n *\n * \"Definitions\" are the generic name for top-level statements in the document.\n * Examples of this include:\n * 1) Operations (such as a query)\n * 2) Fragments\n *\n * \"Operations\" are a generic name for requests in the document.\n * Examples of this include:\n * 1) query,\n * 2) mutation\n *\n * \"Selections\" are the definitions that can appear legally and at\n * single level of the query. These include:\n * 1) field references e.g `a`\n * 2) fragment \"spreads\" e.g. `...c`\n * 3) inline fragment \"spreads\" e.g. `...on Type { a }`\n */\n\n/**\n * Data that must be available at all points during query execution.\n *\n * Namely, schema of the type system that is currently executing,\n * and the fragments defined in the query document\n */\n\n/**\n * Implements the \"Executing requests\" section of the GraphQL specification.\n *\n * Returns either a synchronous ExecutionResult (if all encountered resolvers\n * are synchronous), or a Promise of an ExecutionResult that will eventually be\n * resolved and never rejected.\n *\n * If the arguments to this function do not result in a legal execution context,\n * a GraphQLError will be thrown immediately explaining the invalid input.\n */\nfunction execute(args) {\n  // Temporary for v15 to v16 migration. Remove in v17\n  arguments.length < 2 ||\n    (0, _devAssert.devAssert)(\n      false,\n      'graphql@16 dropped long-deprecated support for positional arguments, please pass an object instead.',\n    );\n  const { schema, document, variableValues, rootValue } = args; // If arguments are missing or incorrect, throw an error.\n\n  assertValidExecutionArguments(schema, document, variableValues); // If a valid execution context cannot be created due to incorrect arguments,\n  // a \"Response\" with only errors is returned.\n\n  const exeContext = buildExecutionContext(args); // Return early errors if execution context failed.\n\n  if (!('schema' in exeContext)) {\n    return {\n      errors: exeContext,\n    };\n  } // Return a Promise that will eventually resolve to the data described by\n  // The \"Response\" section of the GraphQL specification.\n  //\n  // If errors are encountered while executing a GraphQL field, only that\n  // field and its descendants will be omitted, and sibling fields will still\n  // be executed. An execution which encounters errors will still result in a\n  // resolved Promise.\n  //\n  // Errors from sub-fields of a NonNull type may propagate to the top level,\n  // at which point we still log the error and null the parent field, which\n  // in this case is the entire response.\n\n  try {\n    const { operation } = exeContext;\n    const result = executeOperation(exeContext, operation, rootValue);\n\n    if ((0, _isPromise.isPromise)(result)) {\n      return result.then(\n        (data) => buildResponse(data, exeContext.errors),\n        (error) => {\n          exeContext.errors.push(error);\n          return buildResponse(null, exeContext.errors);\n        },\n      );\n    }\n\n    return buildResponse(result, exeContext.errors);\n  } catch (error) {\n    exeContext.errors.push(error);\n    return buildResponse(null, exeContext.errors);\n  }\n}\n/**\n * Also implements the \"Executing requests\" section of the GraphQL specification.\n * However, it guarantees to complete synchronously (or throw an error) assuming\n * that all field resolvers are also synchronous.\n */\n\nfunction executeSync(args) {\n  const result = execute(args); // Assert that the execution was synchronous.\n\n  if ((0, _isPromise.isPromise)(result)) {\n    throw new Error('GraphQL execution failed to complete synchronously.');\n  }\n\n  return result;\n}\n/**\n * Given a completed execution context and data, build the `{ errors, data }`\n * response defined by the \"Response\" section of the GraphQL specification.\n */\n\nfunction buildResponse(data, errors) {\n  return errors.length === 0\n    ? {\n        data,\n      }\n    : {\n        errors,\n        data,\n      };\n}\n/**\n * Essential assertions before executing to provide developer feedback for\n * improper use of the GraphQL library.\n *\n * @internal\n */\n\nfunction assertValidExecutionArguments(schema, document, rawVariableValues) {\n  document || (0, _devAssert.devAssert)(false, 'Must provide document.'); // If the schema used for execution is invalid, throw an error.\n\n  (0, _validate.assertValidSchema)(schema); // Variables, if provided, must be an object.\n\n  rawVariableValues == null ||\n    (0, _isObjectLike.isObjectLike)(rawVariableValues) ||\n    (0, _devAssert.devAssert)(\n      false,\n      'Variables must be provided as an Object where each property is a variable value. Perhaps look to see if an unparsed JSON string was provided.',\n    );\n}\n/**\n * Constructs a ExecutionContext object from the arguments passed to\n * execute, which we will pass throughout the other execution methods.\n *\n * Throws a GraphQLError if a valid execution context cannot be created.\n *\n * @internal\n */\n\nfunction buildExecutionContext(args) {\n  var _definition$name, _operation$variableDe;\n\n  const {\n    schema,\n    document,\n    rootValue,\n    contextValue,\n    variableValues: rawVariableValues,\n    operationName,\n    fieldResolver,\n    typeResolver,\n    subscribeFieldResolver,\n  } = args;\n  let operation;\n  const fragments = Object.create(null);\n\n  for (const definition of document.definitions) {\n    switch (definition.kind) {\n      case _kinds.Kind.OPERATION_DEFINITION:\n        if (operationName == null) {\n          if (operation !== undefined) {\n            return [\n              new _GraphQLError.GraphQLError(\n                'Must provide operation name if query contains multiple operations.',\n              ),\n            ];\n          }\n\n          operation = definition;\n        } else if (\n          ((_definition$name = definition.name) === null ||\n          _definition$name === void 0\n            ? void 0\n            : _definition$name.value) === operationName\n        ) {\n          operation = definition;\n        }\n\n        break;\n\n      case _kinds.Kind.FRAGMENT_DEFINITION:\n        fragments[definition.name.value] = definition;\n        break;\n\n      default: // ignore non-executable definitions\n    }\n  }\n\n  if (!operation) {\n    if (operationName != null) {\n      return [\n        new _GraphQLError.GraphQLError(\n          `Unknown operation named \"${operationName}\".`,\n        ),\n      ];\n    }\n\n    return [new _GraphQLError.GraphQLError('Must provide an operation.')];\n  } // FIXME: https://github.com/graphql/graphql-js/issues/2203\n\n  /* c8 ignore next */\n\n  const variableDefinitions =\n    (_operation$variableDe = operation.variableDefinitions) !== null &&\n    _operation$variableDe !== void 0\n      ? _operation$variableDe\n      : [];\n  const coercedVariableValues = (0, _values.getVariableValues)(\n    schema,\n    variableDefinitions,\n    rawVariableValues !== null && rawVariableValues !== void 0\n      ? rawVariableValues\n      : {},\n    {\n      maxErrors: 50,\n    },\n  );\n\n  if (coercedVariableValues.errors) {\n    return coercedVariableValues.errors;\n  }\n\n  return {\n    schema,\n    fragments,\n    rootValue,\n    contextValue,\n    operation,\n    variableValues: coercedVariableValues.coerced,\n    fieldResolver:\n      fieldResolver !== null && fieldResolver !== void 0\n        ? fieldResolver\n        : defaultFieldResolver,\n    typeResolver:\n      typeResolver !== null && typeResolver !== void 0\n        ? typeResolver\n        : defaultTypeResolver,\n    subscribeFieldResolver:\n      subscribeFieldResolver !== null && subscribeFieldResolver !== void 0\n        ? subscribeFieldResolver\n        : defaultFieldResolver,\n    errors: [],\n  };\n}\n/**\n * Implements the \"Executing operations\" section of the spec.\n */\n\nfunction executeOperation(exeContext, operation, rootValue) {\n  const rootType = exeContext.schema.getRootType(operation.operation);\n\n  if (rootType == null) {\n    throw new _GraphQLError.GraphQLError(\n      `Schema is not configured to execute ${operation.operation} operation.`,\n      {\n        nodes: operation,\n      },\n    );\n  }\n\n  const rootFields = (0, _collectFields.collectFields)(\n    exeContext.schema,\n    exeContext.fragments,\n    exeContext.variableValues,\n    rootType,\n    operation.selectionSet,\n  );\n  const path = undefined;\n\n  switch (operation.operation) {\n    case _ast.OperationTypeNode.QUERY:\n      return executeFields(exeContext, rootType, rootValue, path, rootFields);\n\n    case _ast.OperationTypeNode.MUTATION:\n      return executeFieldsSerially(\n        exeContext,\n        rootType,\n        rootValue,\n        path,\n        rootFields,\n      );\n\n    case _ast.OperationTypeNode.SUBSCRIPTION:\n      // TODO: deprecate `subscribe` and move all logic here\n      // Temporary solution until we finish merging execute and subscribe together\n      return executeFields(exeContext, rootType, rootValue, path, rootFields);\n  }\n}\n/**\n * Implements the \"Executing selection sets\" section of the spec\n * for fields that must be executed serially.\n */\n\nfunction executeFieldsSerially(\n  exeContext,\n  parentType,\n  sourceValue,\n  path,\n  fields,\n) {\n  return (0, _promiseReduce.promiseReduce)(\n    fields.entries(),\n    (results, [responseName, fieldNodes]) => {\n      const fieldPath = (0, _Path.addPath)(path, responseName, parentType.name);\n      const result = executeField(\n        exeContext,\n        parentType,\n        sourceValue,\n        fieldNodes,\n        fieldPath,\n      );\n\n      if (result === undefined) {\n        return results;\n      }\n\n      if ((0, _isPromise.isPromise)(result)) {\n        return result.then((resolvedResult) => {\n          results[responseName] = resolvedResult;\n          return results;\n        });\n      }\n\n      results[responseName] = result;\n      return results;\n    },\n    Object.create(null),\n  );\n}\n/**\n * Implements the \"Executing selection sets\" section of the spec\n * for fields that may be executed in parallel.\n */\n\nfunction executeFields(exeContext, parentType, sourceValue, path, fields) {\n  const results = Object.create(null);\n  let containsPromise = false;\n\n  for (const [responseName, fieldNodes] of fields.entries()) {\n    const fieldPath = (0, _Path.addPath)(path, responseName, parentType.name);\n    const result = executeField(\n      exeContext,\n      parentType,\n      sourceValue,\n      fieldNodes,\n      fieldPath,\n    );\n\n    if (result !== undefined) {\n      results[responseName] = result;\n\n      if ((0, _isPromise.isPromise)(result)) {\n        containsPromise = true;\n      }\n    }\n  } // If there are no promises, we can just return the object\n\n  if (!containsPromise) {\n    return results;\n  } // Otherwise, results is a map from field name to the result of resolving that\n  // field, which is possibly a promise. Return a promise that will return this\n  // same map, but with any promises replaced with the values they resolved to.\n\n  return (0, _promiseForObject.promiseForObject)(results);\n}\n/**\n * Implements the \"Executing fields\" section of the spec\n * In particular, this function figures out the value that the field returns by\n * calling its resolve function, then calls completeValue to complete promises,\n * serialize scalars, or execute the sub-selection-set for objects.\n */\n\nfunction executeField(exeContext, parentType, source, fieldNodes, path) {\n  var _fieldDef$resolve;\n\n  const fieldDef = getFieldDef(exeContext.schema, parentType, fieldNodes[0]);\n\n  if (!fieldDef) {\n    return;\n  }\n\n  const returnType = fieldDef.type;\n  const resolveFn =\n    (_fieldDef$resolve = fieldDef.resolve) !== null &&\n    _fieldDef$resolve !== void 0\n      ? _fieldDef$resolve\n      : exeContext.fieldResolver;\n  const info = buildResolveInfo(\n    exeContext,\n    fieldDef,\n    fieldNodes,\n    parentType,\n    path,\n  ); // Get the resolve function, regardless of if its result is normal or abrupt (error).\n\n  try {\n    // Build a JS object of arguments from the field.arguments AST, using the\n    // variables scope to fulfill any variable references.\n    // TODO: find a way to memoize, in case this field is within a List type.\n    const args = (0, _values.getArgumentValues)(\n      fieldDef,\n      fieldNodes[0],\n      exeContext.variableValues,\n    ); // The resolve function's optional third argument is a context value that\n    // is provided to every resolve function within an execution. It is commonly\n    // used to represent an authenticated user, or request-specific caches.\n\n    const contextValue = exeContext.contextValue;\n    const result = resolveFn(source, args, contextValue, info);\n    let completed;\n\n    if ((0, _isPromise.isPromise)(result)) {\n      completed = result.then((resolved) =>\n        completeValue(exeContext, returnType, fieldNodes, info, path, resolved),\n      );\n    } else {\n      completed = completeValue(\n        exeContext,\n        returnType,\n        fieldNodes,\n        info,\n        path,\n        result,\n      );\n    }\n\n    if ((0, _isPromise.isPromise)(completed)) {\n      // Note: we don't rely on a `catch` method, but we do expect \"thenable\"\n      // to take a second callback for the error case.\n      return completed.then(undefined, (rawError) => {\n        const error = (0, _locatedError.locatedError)(\n          rawError,\n          fieldNodes,\n          (0, _Path.pathToArray)(path),\n        );\n        return handleFieldError(error, returnType, exeContext);\n      });\n    }\n\n    return completed;\n  } catch (rawError) {\n    const error = (0, _locatedError.locatedError)(\n      rawError,\n      fieldNodes,\n      (0, _Path.pathToArray)(path),\n    );\n    return handleFieldError(error, returnType, exeContext);\n  }\n}\n/**\n * @internal\n */\n\nfunction buildResolveInfo(exeContext, fieldDef, fieldNodes, parentType, path) {\n  // The resolve function's optional fourth argument is a collection of\n  // information about the current execution state.\n  return {\n    fieldName: fieldDef.name,\n    fieldNodes,\n    returnType: fieldDef.type,\n    parentType,\n    path,\n    schema: exeContext.schema,\n    fragments: exeContext.fragments,\n    rootValue: exeContext.rootValue,\n    operation: exeContext.operation,\n    variableValues: exeContext.variableValues,\n  };\n}\n\nfunction handleFieldError(error, returnType, exeContext) {\n  // If the field type is non-nullable, then it is resolved without any\n  // protection from errors, however it still properly locates the error.\n  if ((0, _definition.isNonNullType)(returnType)) {\n    throw error;\n  } // Otherwise, error protection is applied, logging the error and resolving\n  // a null value for this field if one is encountered.\n\n  exeContext.errors.push(error);\n  return null;\n}\n/**\n * Implements the instructions for completeValue as defined in the\n * \"Value Completion\" section of the spec.\n *\n * If the field type is Non-Null, then this recursively completes the value\n * for the inner type. It throws a field error if that completion returns null,\n * as per the \"Nullability\" section of the spec.\n *\n * If the field type is a List, then this recursively completes the value\n * for the inner type on each item in the list.\n *\n * If the field type is a Scalar or Enum, ensures the completed value is a legal\n * value of the type by calling the `serialize` method of GraphQL type\n * definition.\n *\n * If the field is an abstract type, determine the runtime type of the value\n * and then complete based on that type\n *\n * Otherwise, the field type expects a sub-selection set, and will complete the\n * value by executing all sub-selections.\n */\n\nfunction completeValue(exeContext, returnType, fieldNodes, info, path, result) {\n  // If result is an Error, throw a located error.\n  if (result instanceof Error) {\n    throw result;\n  } // If field type is NonNull, complete for inner type, and throw field error\n  // if result is null.\n\n  if ((0, _definition.isNonNullType)(returnType)) {\n    const completed = completeValue(\n      exeContext,\n      returnType.ofType,\n      fieldNodes,\n      info,\n      path,\n      result,\n    );\n\n    if (completed === null) {\n      throw new Error(\n        `Cannot return null for non-nullable field ${info.parentType.name}.${info.fieldName}.`,\n      );\n    }\n\n    return completed;\n  } // If result value is null or undefined then return null.\n\n  if (result == null) {\n    return null;\n  } // If field type is List, complete each item in the list with the inner type\n\n  if ((0, _definition.isListType)(returnType)) {\n    return completeListValue(\n      exeContext,\n      returnType,\n      fieldNodes,\n      info,\n      path,\n      result,\n    );\n  } // If field type is a leaf type, Scalar or Enum, serialize to a valid value,\n  // returning null if serialization is not possible.\n\n  if ((0, _definition.isLeafType)(returnType)) {\n    return completeLeafValue(returnType, result);\n  } // If field type is an abstract type, Interface or Union, determine the\n  // runtime Object type and complete for that type.\n\n  if ((0, _definition.isAbstractType)(returnType)) {\n    return completeAbstractValue(\n      exeContext,\n      returnType,\n      fieldNodes,\n      info,\n      path,\n      result,\n    );\n  } // If field type is Object, execute and complete all sub-selections.\n\n  if ((0, _definition.isObjectType)(returnType)) {\n    return completeObjectValue(\n      exeContext,\n      returnType,\n      fieldNodes,\n      info,\n      path,\n      result,\n    );\n  }\n  /* c8 ignore next 6 */\n  // Not reachable, all possible output types have been considered.\n\n  false ||\n    (0, _invariant.invariant)(\n      false,\n      'Cannot complete value of unexpected output type: ' +\n        (0, _inspect.inspect)(returnType),\n    );\n}\n/**\n * Complete a list value by completing each item in the list with the\n * inner type\n */\n\nfunction completeListValue(\n  exeContext,\n  returnType,\n  fieldNodes,\n  info,\n  path,\n  result,\n) {\n  if (!(0, _isIterableObject.isIterableObject)(result)) {\n    throw new _GraphQLError.GraphQLError(\n      `Expected Iterable, but did not find one for field \"${info.parentType.name}.${info.fieldName}\".`,\n    );\n  } // This is specified as a simple map, however we're optimizing the path\n  // where the list contains no Promises by avoiding creating another Promise.\n\n  const itemType = returnType.ofType;\n  let containsPromise = false;\n  const completedResults = Array.from(result, (item, index) => {\n    // No need to modify the info object containing the path,\n    // since from here on it is not ever accessed by resolver functions.\n    const itemPath = (0, _Path.addPath)(path, index, undefined);\n\n    try {\n      let completedItem;\n\n      if ((0, _isPromise.isPromise)(item)) {\n        completedItem = item.then((resolved) =>\n          completeValue(\n            exeContext,\n            itemType,\n            fieldNodes,\n            info,\n            itemPath,\n            resolved,\n          ),\n        );\n      } else {\n        completedItem = completeValue(\n          exeContext,\n          itemType,\n          fieldNodes,\n          info,\n          itemPath,\n          item,\n        );\n      }\n\n      if ((0, _isPromise.isPromise)(completedItem)) {\n        containsPromise = true; // Note: we don't rely on a `catch` method, but we do expect \"thenable\"\n        // to take a second callback for the error case.\n\n        return completedItem.then(undefined, (rawError) => {\n          const error = (0, _locatedError.locatedError)(\n            rawError,\n            fieldNodes,\n            (0, _Path.pathToArray)(itemPath),\n          );\n          return handleFieldError(error, itemType, exeContext);\n        });\n      }\n\n      return completedItem;\n    } catch (rawError) {\n      const error = (0, _locatedError.locatedError)(\n        rawError,\n        fieldNodes,\n        (0, _Path.pathToArray)(itemPath),\n      );\n      return handleFieldError(error, itemType, exeContext);\n    }\n  });\n  return containsPromise ? Promise.all(completedResults) : completedResults;\n}\n/**\n * Complete a Scalar or Enum by serializing to a valid value, returning\n * null if serialization is not possible.\n */\n\nfunction completeLeafValue(returnType, result) {\n  const serializedResult = returnType.serialize(result);\n\n  if (serializedResult == null) {\n    throw new Error(\n      `Expected \\`${(0, _inspect.inspect)(returnType)}.serialize(${(0,\n      _inspect.inspect)(result)})\\` to ` +\n        `return non-nullable value, returned: ${(0, _inspect.inspect)(\n          serializedResult,\n        )}`,\n    );\n  }\n\n  return serializedResult;\n}\n/**\n * Complete a value of an abstract type by determining the runtime object type\n * of that value, then complete the value for that type.\n */\n\nfunction completeAbstractValue(\n  exeContext,\n  returnType,\n  fieldNodes,\n  info,\n  path,\n  result,\n) {\n  var _returnType$resolveTy;\n\n  const resolveTypeFn =\n    (_returnType$resolveTy = returnType.resolveType) !== null &&\n    _returnType$resolveTy !== void 0\n      ? _returnType$resolveTy\n      : exeContext.typeResolver;\n  const contextValue = exeContext.contextValue;\n  const runtimeType = resolveTypeFn(result, contextValue, info, returnType);\n\n  if ((0, _isPromise.isPromise)(runtimeType)) {\n    return runtimeType.then((resolvedRuntimeType) =>\n      completeObjectValue(\n        exeContext,\n        ensureValidRuntimeType(\n          resolvedRuntimeType,\n          exeContext,\n          returnType,\n          fieldNodes,\n          info,\n          result,\n        ),\n        fieldNodes,\n        info,\n        path,\n        result,\n      ),\n    );\n  }\n\n  return completeObjectValue(\n    exeContext,\n    ensureValidRuntimeType(\n      runtimeType,\n      exeContext,\n      returnType,\n      fieldNodes,\n      info,\n      result,\n    ),\n    fieldNodes,\n    info,\n    path,\n    result,\n  );\n}\n\nfunction ensureValidRuntimeType(\n  runtimeTypeName,\n  exeContext,\n  returnType,\n  fieldNodes,\n  info,\n  result,\n) {\n  if (runtimeTypeName == null) {\n    throw new _GraphQLError.GraphQLError(\n      `Abstract type \"${returnType.name}\" must resolve to an Object type at runtime for field \"${info.parentType.name}.${info.fieldName}\". Either the \"${returnType.name}\" type should provide a \"resolveType\" function or each possible type should provide an \"isTypeOf\" function.`,\n      fieldNodes,\n    );\n  } // releases before 16.0.0 supported returning `GraphQLObjectType` from `resolveType`\n  // TODO: remove in 17.0.0 release\n\n  if ((0, _definition.isObjectType)(runtimeTypeName)) {\n    throw new _GraphQLError.GraphQLError(\n      'Support for returning GraphQLObjectType from resolveType was removed in graphql-js@16.0.0 please return type name instead.',\n    );\n  }\n\n  if (typeof runtimeTypeName !== 'string') {\n    throw new _GraphQLError.GraphQLError(\n      `Abstract type \"${returnType.name}\" must resolve to an Object type at runtime for field \"${info.parentType.name}.${info.fieldName}\" with ` +\n        `value ${(0, _inspect.inspect)(result)}, received \"${(0,\n        _inspect.inspect)(runtimeTypeName)}\".`,\n    );\n  }\n\n  const runtimeType = exeContext.schema.getType(runtimeTypeName);\n\n  if (runtimeType == null) {\n    throw new _GraphQLError.GraphQLError(\n      `Abstract type \"${returnType.name}\" was resolved to a type \"${runtimeTypeName}\" that does not exist inside the schema.`,\n      {\n        nodes: fieldNodes,\n      },\n    );\n  }\n\n  if (!(0, _definition.isObjectType)(runtimeType)) {\n    throw new _GraphQLError.GraphQLError(\n      `Abstract type \"${returnType.name}\" was resolved to a non-object type \"${runtimeTypeName}\".`,\n      {\n        nodes: fieldNodes,\n      },\n    );\n  }\n\n  if (!exeContext.schema.isSubType(returnType, runtimeType)) {\n    throw new _GraphQLError.GraphQLError(\n      `Runtime Object type \"${runtimeType.name}\" is not a possible type for \"${returnType.name}\".`,\n      {\n        nodes: fieldNodes,\n      },\n    );\n  }\n\n  return runtimeType;\n}\n/**\n * Complete an Object value by executing all sub-selections.\n */\n\nfunction completeObjectValue(\n  exeContext,\n  returnType,\n  fieldNodes,\n  info,\n  path,\n  result,\n) {\n  // Collect sub-fields to execute to complete this value.\n  const subFieldNodes = collectSubfields(exeContext, returnType, fieldNodes); // If there is an isTypeOf predicate function, call it with the\n  // current result. If isTypeOf returns false, then raise an error rather\n  // than continuing execution.\n\n  if (returnType.isTypeOf) {\n    const isTypeOf = returnType.isTypeOf(result, exeContext.contextValue, info);\n\n    if ((0, _isPromise.isPromise)(isTypeOf)) {\n      return isTypeOf.then((resolvedIsTypeOf) => {\n        if (!resolvedIsTypeOf) {\n          throw invalidReturnTypeError(returnType, result, fieldNodes);\n        }\n\n        return executeFields(\n          exeContext,\n          returnType,\n          result,\n          path,\n          subFieldNodes,\n        );\n      });\n    }\n\n    if (!isTypeOf) {\n      throw invalidReturnTypeError(returnType, result, fieldNodes);\n    }\n  }\n\n  return executeFields(exeContext, returnType, result, path, subFieldNodes);\n}\n\nfunction invalidReturnTypeError(returnType, result, fieldNodes) {\n  return new _GraphQLError.GraphQLError(\n    `Expected value of type \"${returnType.name}\" but got: ${(0,\n    _inspect.inspect)(result)}.`,\n    {\n      nodes: fieldNodes,\n    },\n  );\n}\n/**\n * If a resolveType function is not given, then a default resolve behavior is\n * used which attempts two strategies:\n *\n * First, See if the provided value has a `__typename` field defined, if so, use\n * that value as name of the resolved type.\n *\n * Otherwise, test each possible type for the abstract type by calling\n * isTypeOf for the object being coerced, returning the first type that matches.\n */\n\nconst defaultTypeResolver = function (value, contextValue, info, abstractType) {\n  // First, look for `__typename`.\n  if (\n    (0, _isObjectLike.isObjectLike)(value) &&\n    typeof value.__typename === 'string'\n  ) {\n    return value.__typename;\n  } // Otherwise, test each possible type.\n\n  const possibleTypes = info.schema.getPossibleTypes(abstractType);\n  const promisedIsTypeOfResults = [];\n\n  for (let i = 0; i < possibleTypes.length; i++) {\n    const type = possibleTypes[i];\n\n    if (type.isTypeOf) {\n      const isTypeOfResult = type.isTypeOf(value, contextValue, info);\n\n      if ((0, _isPromise.isPromise)(isTypeOfResult)) {\n        promisedIsTypeOfResults[i] = isTypeOfResult;\n      } else if (isTypeOfResult) {\n        return type.name;\n      }\n    }\n  }\n\n  if (promisedIsTypeOfResults.length) {\n    return Promise.all(promisedIsTypeOfResults).then((isTypeOfResults) => {\n      for (let i = 0; i < isTypeOfResults.length; i++) {\n        if (isTypeOfResults[i]) {\n          return possibleTypes[i].name;\n        }\n      }\n    });\n  }\n};\n/**\n * If a resolve function is not given, then a default resolve behavior is used\n * which takes the property of the source object of the same name as the field\n * and returns it as the result, or if it's a function, returns the result\n * of calling that function while passing along args and context value.\n */\n\nexports.defaultTypeResolver = defaultTypeResolver;\n\nconst defaultFieldResolver = function (source, args, contextValue, info) {\n  // ensure source is a value for which property access is acceptable.\n  if ((0, _isObjectLike.isObjectLike)(source) || typeof source === 'function') {\n    const property = source[info.fieldName];\n\n    if (typeof property === 'function') {\n      return source[info.fieldName](args, contextValue, info);\n    }\n\n    return property;\n  }\n};\n/**\n * This method looks up the field on the given type definition.\n * It has special casing for the three introspection fields,\n * __schema, __type and __typename. __typename is special because\n * it can always be queried as a field, even in situations where no\n * other fields are allowed, like on a Union. __schema and __type\n * could get automatically added to the query type, but that would\n * require mutating type definitions, which would cause issues.\n *\n * @internal\n */\n\nexports.defaultFieldResolver = defaultFieldResolver;\n\nfunction getFieldDef(schema, parentType, fieldNode) {\n  const fieldName = fieldNode.name.value;\n\n  if (\n    fieldName === _introspection.SchemaMetaFieldDef.name &&\n    schema.getQueryType() === parentType\n  ) {\n    return _introspection.SchemaMetaFieldDef;\n  } else if (\n    fieldName === _introspection.TypeMetaFieldDef.name &&\n    schema.getQueryType() === parentType\n  ) {\n    return _introspection.TypeMetaFieldDef;\n  } else if (fieldName === _introspection.TypeNameMetaFieldDef.name) {\n    return _introspection.TypeNameMetaFieldDef;\n  }\n\n  return parentType.getFields()[fieldName];\n}\n0/validation/rules/VariablesAreInputTypesRule.mjs\u0004\u0006import { GraphQLError } from '../../error/GraphQLError.mjs';\nimport { print } from '../../language/printer.mjs';\nimport { isInputType } from '../../type/definition.mjs';\nimport { typeFromAST } from '../../utilities/typeFromAST.mjs';\n\n/**\n * Variables are input types\n *\n * A GraphQL operation is only valid if all the variables it defines are of\n * input types (scalar, enum, or input object).\n *\n * See https://spec.graphql.org/draft/#sec-Variables-Are-Input-Types\n */\nexport function VariablesAreInputTypesRule(context) {\n  return {\n    VariableDefinition(node) {\n      const type = typeFromAST(context.getSchema(), node.type);\n\n      if (type !== undefined && !isInputType(type)) {\n        const variableName = node.variable.name.value;\n        const typeName = print(node.type);\n        context.reportError(\n          new GraphQLError(\n            `Variable \"$${variableName}\" cannot be non-input type \"${typeName}\".`,\n            {\n              nodes: node.type,\n            },\n          ),\n        );\n      }\n    },\n  };\n}\n/jsutils/printPathArray.d.tsĊ/**\n * Build a string describing the path.\n */\nexport declare function printPathArray(\n  path: ReadonlyArray<string | number>,\n): string;\n1/validation/rules/PossibleTypeExtensionsRule.d.ts\u0001Vimport type { ASTVisitor } from '../../language/visitor';\nimport type { SDLValidationContext } from '../ValidationContext';\n/**\n * Possible type extension\n *\n * A type extension is only valid if the type is defined and has the same kind.\n */\nexport declare function PossibleTypeExtensionsRule(\n  context: SDLValidationContext,\n): ASTVisitor;\n/language/printLocation.d.ts\u0001import type { Location } from './ast';\nimport type { SourceLocation } from './location';\nimport type { Source } from './source';\n/**\n * Render a helpful description of the location in the GraphQL Source document.\n */\nexport declare function printLocation(location: Location): string;\n/**\n * Render a helpful description of the location in the GraphQL Source document.\n */\nexport declare function printSourceLocation(\n  source: Source,\n  sourceLocation: SourceLocation,\n): string;\n/jsutils/naturalCompare.d.ts\u0001\"/**\n * Returns a number indicating whether a reference string comes before, or after,\n * or is the same as the given string in natural sort order.\n *\n * See: https://en.wikipedia.org/wiki/Natural_sort_order\n *\n */\nexport declare function naturalCompare(aStr: string, bStr: string): number;\n!/utilities/valueFromASTUntyped.js\u0006'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.valueFromASTUntyped = valueFromASTUntyped;\n\nvar _keyValMap = require('../jsutils/keyValMap.js');\n\nvar _kinds = require('../language/kinds.js');\n\n/**\n * Produces a JavaScript value given a GraphQL Value AST.\n *\n * Unlike `valueFromAST()`, no type is provided. The resulting JavaScript value\n * will reflect the provided GraphQL value AST.\n *\n * | GraphQL Value        | JavaScript Value |\n * | -------------------- | ---------------- |\n * | Input Object         | Object           |\n * | List                 | Array            |\n * | Boolean              | Boolean          |\n * | String / Enum        | String           |\n * | Int / Float          | Number           |\n * | Null                 | null             |\n *\n */\nfunction valueFromASTUntyped(valueNode, variables) {\n  switch (valueNode.kind) {\n    case _kinds.Kind.NULL:\n      return null;\n\n    case _kinds.Kind.INT:\n      return parseInt(valueNode.value, 10);\n\n    case _kinds.Kind.FLOAT:\n      return parseFloat(valueNode.value);\n\n    case _kinds.Kind.STRING:\n    case _kinds.Kind.ENUM:\n    case _kinds.Kind.BOOLEAN:\n      return valueNode.value;\n\n    case _kinds.Kind.LIST:\n      return valueNode.values.map((node) =>\n        valueFromASTUntyped(node, variables),\n      );\n\n    case _kinds.Kind.OBJECT:\n      return (0, _keyValMap.keyValMap)(\n        valueNode.fields,\n        (field) => field.name.value,\n        (field) => valueFromASTUntyped(field.value, variables),\n      );\n\n    case _kinds.Kind.VARIABLE:\n      return variables === null || variables === void 0\n        ? void 0\n        : variables[valueNode.name.value];\n  }\n}\n/execution/collectFields.d.ts\u0005import type { ObjMap } from '../jsutils/ObjMap';\nimport type {\n  FieldNode,\n  FragmentDefinitionNode,\n  SelectionSetNode,\n} from '../language/ast';\nimport type { GraphQLObjectType } from '../type/definition';\nimport type { GraphQLSchema } from '../type/schema';\n/**\n * Given a selectionSet, collects all of the fields and returns them.\n *\n * CollectFields requires the \"runtime type\" of an object. For a field that\n * returns an Interface or Union type, the \"runtime type\" will be the actual\n * object type returned by that field.\n *\n * @internal\n */\nexport declare function collectFields(\n  schema: GraphQLSchema,\n  fragments: ObjMap<FragmentDefinitionNode>,\n  variableValues: {\n    [variable: string]: unknown;\n  },\n  runtimeType: GraphQLObjectType,\n  selectionSet: SelectionSetNode,\n): Map<string, ReadonlyArray<FieldNode>>;\n/**\n * Given an array of field nodes, collects all of the subfields of the passed\n * in fields, and returns them at the end.\n *\n * CollectSubFields requires the \"return type\" of an object. For a field that\n * returns an Interface or Union type, the \"return type\" will be the actual\n * object type returned by that field.\n *\n * @internal\n */\nexport declare function collectSubfields(\n  schema: GraphQLSchema,\n  fragments: ObjMap<FragmentDefinitionNode>,\n  variableValues: {\n    [variable: string]: unknown;\n  },\n  returnType: GraphQLObjectType,\n  fieldNodes: ReadonlyArray<FieldNode>,\n): Map<string, ReadonlyArray<FieldNode>>;\n/jsutils/isAsyncIterable.mjs\u0001k/**\n * Returns true if the provided object implements the AsyncIterator protocol via\n * implementing a `Symbol.asyncIterator` method.\n */\nexport function isAsyncIterable(maybeAsyncIterable) {\n  return (\n    typeof (maybeAsyncIterable === null || maybeAsyncIterable === void 0\n      ? void 0\n      : maybeAsyncIterable[Symbol.asyncIterator]) === 'function'\n  );\n}\n/type/assertName.js\u0005'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.assertEnumValueName = assertEnumValueName;\nexports.assertName = assertName;\n\nvar _devAssert = require('../jsutils/devAssert.js');\n\nvar _GraphQLError = require('../error/GraphQLError.js');\n\nvar _characterClasses = require('../language/characterClasses.js');\n\n/**\n * Upholds the spec rules about naming.\n */\nfunction assertName(name) {\n  name != null || (0, _devAssert.devAssert)(false, 'Must provide name.');\n  typeof name === 'string' ||\n    (0, _devAssert.devAssert)(false, 'Expected name to be a string.');\n\n  if (name.length === 0) {\n    throw new _GraphQLError.GraphQLError(\n      'Expected name to be a non-empty string.',\n    );\n  }\n\n  for (let i = 1; i < name.length; ++i) {\n    if (!(0, _characterClasses.isNameContinue)(name.charCodeAt(i))) {\n      throw new _GraphQLError.GraphQLError(\n        `Names must only contain [_a-zA-Z0-9] but \"${name}\" does not.`,\n      );\n    }\n  }\n\n  if (!(0, _characterClasses.isNameStart)(name.charCodeAt(0))) {\n    throw new _GraphQLError.GraphQLError(\n      `Names must start with [_a-zA-Z] but \"${name}\" does not.`,\n    );\n  }\n\n  return name;\n}\n/**\n * Upholds the spec rules about naming enum values.\n *\n * @internal\n */\n\nfunction assertEnumValueName(name) {\n  if (name === 'true' || name === 'false' || name === 'null') {\n    throw new _GraphQLError.GraphQLError(\n      `Enum values cannot be named: ${name}`,\n    );\n  }\n\n  return assertName(name);\n}\n-/validation/rules/UniqueOperationNamesRule.js\u0004'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.UniqueOperationNamesRule = UniqueOperationNamesRule;\n\nvar _GraphQLError = require('../../error/GraphQLError.js');\n\n/**\n * Unique operation names\n *\n * A GraphQL document is only valid if all defined operations have unique names.\n *\n * See https://spec.graphql.org/draft/#sec-Operation-Name-Uniqueness\n */\nfunction UniqueOperationNamesRule(context) {\n  const knownOperationNames = Object.create(null);\n  return {\n    OperationDefinition(node) {\n      const operationName = node.name;\n\n      if (operationName) {\n        if (knownOperationNames[operationName.value]) {\n          context.reportError(\n            new _GraphQLError.GraphQLError(\n              `There can be only one operation named \"${operationName.value}\".`,\n              {\n                nodes: [\n                  knownOperationNames[operationName.value],\n                  operationName,\n                ],\n              },\n            ),\n          );\n        } else {\n          knownOperationNames[operationName.value] = operationName;\n        }\n      }\n\n      return false;\n    },\n\n    FragmentDefinition: () => false,\n  };\n}\n/jsutils/Maybe.mjs\u000bexport {};\n/language/kinds.d.ts\b|/**\n * The set of allowed kind values for AST nodes.\n */\ndeclare enum Kind {\n  /** Name */\n  NAME = 'Name',\n  /** Document */\n  DOCUMENT = 'Document',\n  OPERATION_DEFINITION = 'OperationDefinition',\n  VARIABLE_DEFINITION = 'VariableDefinition',\n  SELECTION_SET = 'SelectionSet',\n  FIELD = 'Field',\n  ARGUMENT = 'Argument',\n  /** Fragments */\n  FRAGMENT_SPREAD = 'FragmentSpread',\n  INLINE_FRAGMENT = 'InlineFragment',\n  FRAGMENT_DEFINITION = 'FragmentDefinition',\n  /** Values */\n  VARIABLE = 'Variable',\n  INT = 'IntValue',\n  FLOAT = 'FloatValue',\n  STRING = 'StringValue',\n  BOOLEAN = 'BooleanValue',\n  NULL = 'NullValue',\n  ENUM = 'EnumValue',\n  LIST = 'ListValue',\n  OBJECT = 'ObjectValue',\n  OBJECT_FIELD = 'ObjectField',\n  /** Directives */\n  DIRECTIVE = 'Directive',\n  /** Types */\n  NAMED_TYPE = 'NamedType',\n  LIST_TYPE = 'ListType',\n  NON_NULL_TYPE = 'NonNullType',\n  /** Type System Definitions */\n  SCHEMA_DEFINITION = 'SchemaDefinition',\n  OPERATION_TYPE_DEFINITION = 'OperationTypeDefinition',\n  /** Type Definitions */\n  SCALAR_TYPE_DEFINITION = 'ScalarTypeDefinition',\n  OBJECT_TYPE_DEFINITION = 'ObjectTypeDefinition',\n  FIELD_DEFINITION = 'FieldDefinition',\n  INPUT_VALUE_DEFINITION = 'InputValueDefinition',\n  INTERFACE_TYPE_DEFINITION = 'InterfaceTypeDefinition',\n  UNION_TYPE_DEFINITION = 'UnionTypeDefinition',\n  ENUM_TYPE_DEFINITION = 'EnumTypeDefinition',\n  ENUM_VALUE_DEFINITION = 'EnumValueDefinition',\n  INPUT_OBJECT_TYPE_DEFINITION = 'InputObjectTypeDefinition',\n  /** Directive Definitions */\n  DIRECTIVE_DEFINITION = 'DirectiveDefinition',\n  /** Type System Extensions */\n  SCHEMA_EXTENSION = 'SchemaExtension',\n  /** Type Extensions */\n  SCALAR_TYPE_EXTENSION = 'ScalarTypeExtension',\n  OBJECT_TYPE_EXTENSION = 'ObjectTypeExtension',\n  INTERFACE_TYPE_EXTENSION = 'InterfaceTypeExtension',\n  UNION_TYPE_EXTENSION = 'UnionTypeExtension',\n  ENUM_TYPE_EXTENSION = 'EnumTypeExtension',\n  INPUT_OBJECT_TYPE_EXTENSION = 'InputObjectTypeExtension',\n}\nexport { Kind };\n/**\n * The enum type representing the possible kind values of AST nodes.\n *\n * @deprecated Please use `Kind`. Will be remove in v17.\n */\nexport declare type KindEnum = typeof Kind;\n/jsutils/memoize3.d.ts/**\n * Memoizes the provided three-argument function.\n */\nexport declare function memoize3<\n  A1 extends object,\n  A2 extends object,\n  A3 extends object,\n  R,\n>(fn: (a1: A1, a2: A2, a3: A3) => R): (a1: A1, a2: A2, a3: A3) => R;\n/utilities/buildClientSchema.js1i'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.buildClientSchema = buildClientSchema;\n\nvar _devAssert = require('../jsutils/devAssert.js');\n\nvar _inspect = require('../jsutils/inspect.js');\n\nvar _isObjectLike = require('../jsutils/isObjectLike.js');\n\nvar _keyValMap = require('../jsutils/keyValMap.js');\n\nvar _parser = require('../language/parser.js');\n\nvar _definition = require('../type/definition.js');\n\nvar _directives = require('../type/directives.js');\n\nvar _introspection = require('../type/introspection.js');\n\nvar _scalars = require('../type/scalars.js');\n\nvar _schema = require('../type/schema.js');\n\nvar _valueFromAST = require('./valueFromAST.js');\n\n/**\n * Build a GraphQLSchema for use by client tools.\n *\n * Given the result of a client running the introspection query, creates and\n * returns a GraphQLSchema instance which can be then used with all graphql-js\n * tools, but cannot be used to execute a query, as introspection does not\n * represent the \"resolver\", \"parse\" or \"serialize\" functions or any other\n * server-internal mechanisms.\n *\n * This function expects a complete introspection result. Don't forget to check\n * the \"errors\" field of a server response before calling this function.\n */\nfunction buildClientSchema(introspection, options) {\n  ((0, _isObjectLike.isObjectLike)(introspection) &&\n    (0, _isObjectLike.isObjectLike)(introspection.__schema)) ||\n    (0, _devAssert.devAssert)(\n      false,\n      `Invalid or incomplete introspection result. Ensure that you are passing \"data\" property of introspection response and no \"errors\" was returned alongside: ${(0,\n      _inspect.inspect)(introspection)}.`,\n    ); // Get the schema from the introspection result.\n\n  const schemaIntrospection = introspection.__schema; // Iterate through all types, getting the type definition for each.\n\n  const typeMap = (0, _keyValMap.keyValMap)(\n    schemaIntrospection.types,\n    (typeIntrospection) => typeIntrospection.name,\n    (typeIntrospection) => buildType(typeIntrospection),\n  ); // Include standard types only if they are used.\n\n  for (const stdType of [\n    ..._scalars.specifiedScalarTypes,\n    ..._introspection.introspectionTypes,\n  ]) {\n    if (typeMap[stdType.name]) {\n      typeMap[stdType.name] = stdType;\n    }\n  } // Get the root Query, Mutation, and Subscription types.\n\n  const queryType = schemaIntrospection.queryType\n    ? getObjectType(schemaIntrospection.queryType)\n    : null;\n  const mutationType = schemaIntrospection.mutationType\n    ? getObjectType(schemaIntrospection.mutationType)\n    : null;\n  const subscriptionType = schemaIntrospection.subscriptionType\n    ? getObjectType(schemaIntrospection.subscriptionType)\n    : null; // Get the directives supported by Introspection, assuming empty-set if\n  // directives were not queried for.\n\n  const directives = schemaIntrospection.directives\n    ? schemaIntrospection.directives.map(buildDirective)\n    : []; // Then produce and return a Schema with these types.\n\n  return new _schema.GraphQLSchema({\n    description: schemaIntrospection.description,\n    query: queryType,\n    mutation: mutationType,\n    subscription: subscriptionType,\n    types: Object.values(typeMap),\n    directives,\n    assumeValid:\n      options === null || options === void 0 ? void 0 : options.assumeValid,\n  }); // Given a type reference in introspection, return the GraphQLType instance.\n  // preferring cached instances before building new instances.\n\n  function getType(typeRef) {\n    if (typeRef.kind === _introspection.TypeKind.LIST) {\n      const itemRef = typeRef.ofType;\n\n      if (!itemRef) {\n        throw new Error('Decorated type deeper than introspection query.');\n      }\n\n      return new _definition.GraphQLList(getType(itemRef));\n    }\n\n    if (typeRef.kind === _introspection.TypeKind.NON_NULL) {\n      const nullableRef = typeRef.ofType;\n\n      if (!nullableRef) {\n        throw new Error('Decorated type deeper than introspection query.');\n      }\n\n      const nullableType = getType(nullableRef);\n      return new _definition.GraphQLNonNull(\n        (0, _definition.assertNullableType)(nullableType),\n      );\n    }\n\n    return getNamedType(typeRef);\n  }\n\n  function getNamedType(typeRef) {\n    const typeName = typeRef.name;\n\n    if (!typeName) {\n      throw new Error(\n        `Unknown type reference: ${(0, _inspect.inspect)(typeRef)}.`,\n      );\n    }\n\n    const type = typeMap[typeName];\n\n    if (!type) {\n      throw new Error(\n        `Invalid or incomplete schema, unknown type: ${typeName}. Ensure that a full introspection query is used in order to build a client schema.`,\n      );\n    }\n\n    return type;\n  }\n\n  function getObjectType(typeRef) {\n    return (0, _definition.assertObjectType)(getNamedType(typeRef));\n  }\n\n  function getInterfaceType(typeRef) {\n    return (0, _definition.assertInterfaceType)(getNamedType(typeRef));\n  } // Given a type's introspection result, construct the correct\n  // GraphQLType instance.\n\n  function buildType(type) {\n    // eslint-disable-next-line @typescript-eslint/prefer-optional-chain\n    if (type != null && type.name != null && type.kind != null) {\n      // FIXME: Properly type IntrospectionType, it's a breaking change so fix in v17\n      // eslint-disable-next-line @typescript-eslint/switch-exhaustiveness-check\n      switch (type.kind) {\n        case _introspection.TypeKind.SCALAR:\n          return buildScalarDef(type);\n\n        case _introspection.TypeKind.OBJECT:\n          return buildObjectDef(type);\n\n        case _introspection.TypeKind.INTERFACE:\n          return buildInterfaceDef(type);\n\n        case _introspection.TypeKind.UNION:\n          return buildUnionDef(type);\n\n        case _introspection.TypeKind.ENUM:\n          return buildEnumDef(type);\n\n        case _introspection.TypeKind.INPUT_OBJECT:\n          return buildInputObjectDef(type);\n      }\n    }\n\n    const typeStr = (0, _inspect.inspect)(type);\n    throw new Error(\n      `Invalid or incomplete introspection result. Ensure that a full introspection query is used in order to build a client schema: ${typeStr}.`,\n    );\n  }\n\n  function buildScalarDef(scalarIntrospection) {\n    return new _definition.GraphQLScalarType({\n      name: scalarIntrospection.name,\n      description: scalarIntrospection.description,\n      specifiedByURL: scalarIntrospection.specifiedByURL,\n    });\n  }\n\n  function buildImplementationsList(implementingIntrospection) {\n    // TODO: Temporary workaround until GraphQL ecosystem will fully support\n    // 'interfaces' on interface types.\n    if (\n      implementingIntrospection.interfaces === null &&\n      implementingIntrospection.kind === _introspection.TypeKind.INTERFACE\n    ) {\n      return [];\n    }\n\n    if (!implementingIntrospection.interfaces) {\n      const implementingIntrospectionStr = (0, _inspect.inspect)(\n        implementingIntrospection,\n      );\n      throw new Error(\n        `Introspection result missing interfaces: ${implementingIntrospectionStr}.`,\n      );\n    }\n\n    return implementingIntrospection.interfaces.map(getInterfaceType);\n  }\n\n  function buildObjectDef(objectIntrospection) {\n    return new _definition.GraphQLObjectType({\n      name: objectIntrospection.name,\n      description: objectIntrospection.description,\n      interfaces: () => buildImplementationsList(objectIntrospection),\n      fields: () => buildFieldDefMap(objectIntrospection),\n    });\n  }\n\n  function buildInterfaceDef(interfaceIntrospection) {\n    return new _definition.GraphQLInterfaceType({\n      name: interfaceIntrospection.name,\n      description: interfaceIntrospection.description,\n      interfaces: () => buildImplementationsList(interfaceIntrospection),\n      fields: () => buildFieldDefMap(interfaceIntrospection),\n    });\n  }\n\n  function buildUnionDef(unionIntrospection) {\n    if (!unionIntrospection.possibleTypes) {\n      const unionIntrospectionStr = (0, _inspect.inspect)(unionIntrospection);\n      throw new Error(\n        `Introspection result missing possibleTypes: ${unionIntrospectionStr}.`,\n      );\n    }\n\n    return new _definition.GraphQLUnionType({\n      name: unionIntrospection.name,\n      description: unionIntrospection.description,\n      types: () => unionIntrospection.possibleTypes.map(getObjectType),\n    });\n  }\n\n  function buildEnumDef(enumIntrospection) {\n    if (!enumIntrospection.enumValues) {\n      const enumIntrospectionStr = (0, _inspect.inspect)(enumIntrospection);\n      throw new Error(\n        `Introspection result missing enumValues: ${enumIntrospectionStr}.`,\n      );\n    }\n\n    return new _definition.GraphQLEnumType({\n      name: enumIntrospection.name,\n      description: enumIntrospection.description,\n      values: (0, _keyValMap.keyValMap)(\n        enumIntrospection.enumValues,\n        (valueIntrospection) => valueIntrospection.name,\n        (valueIntrospection) => ({\n          description: valueIntrospection.description,\n          deprecationReason: valueIntrospection.deprecationReason,\n        }),\n      ),\n    });\n  }\n\n  function buildInputObjectDef(inputObjectIntrospection) {\n    if (!inputObjectIntrospection.inputFields) {\n      const inputObjectIntrospectionStr = (0, _inspect.inspect)(\n        inputObjectIntrospection,\n      );\n      throw new Error(\n        `Introspection result missing inputFields: ${inputObjectIntrospectionStr}.`,\n      );\n    }\n\n    return new _definition.GraphQLInputObjectType({\n      name: inputObjectIntrospection.name,\n      description: inputObjectIntrospection.description,\n      fields: () => buildInputValueDefMap(inputObjectIntrospection.inputFields),\n    });\n  }\n\n  function buildFieldDefMap(typeIntrospection) {\n    if (!typeIntrospection.fields) {\n      throw new Error(\n        `Introspection result missing fields: ${(0, _inspect.inspect)(\n          typeIntrospection,\n        )}.`,\n      );\n    }\n\n    return (0, _keyValMap.keyValMap)(\n      typeIntrospection.fields,\n      (fieldIntrospection) => fieldIntrospection.name,\n      buildField,\n    );\n  }\n\n  function buildField(fieldIntrospection) {\n    const type = getType(fieldIntrospection.type);\n\n    if (!(0, _definition.isOutputType)(type)) {\n      const typeStr = (0, _inspect.inspect)(type);\n      throw new Error(\n        `Introspection must provide output type for fields, but received: ${typeStr}.`,\n      );\n    }\n\n    if (!fieldIntrospection.args) {\n      const fieldIntrospectionStr = (0, _inspect.inspect)(fieldIntrospection);\n      throw new Error(\n        `Introspection result missing field args: ${fieldIntrospectionStr}.`,\n      );\n    }\n\n    return {\n      description: fieldIntrospection.description,\n      deprecationReason: fieldIntrospection.deprecationReason,\n      type,\n      args: buildInputValueDefMap(fieldIntrospection.args),\n    };\n  }\n\n  function buildInputValueDefMap(inputValueIntrospections) {\n    return (0, _keyValMap.keyValMap)(\n      inputValueIntrospections,\n      (inputValue) => inputValue.name,\n      buildInputValue,\n    );\n  }\n\n  function buildInputValue(inputValueIntrospection) {\n    const type = getType(inputValueIntrospection.type);\n\n    if (!(0, _definition.isInputType)(type)) {\n      const typeStr = (0, _inspect.inspect)(type);\n      throw new Error(\n        `Introspection must provide input type for arguments, but received: ${typeStr}.`,\n      );\n    }\n\n    const defaultValue =\n      inputValueIntrospection.defaultValue != null\n        ? (0, _valueFromAST.valueFromAST)(\n            (0, _parser.parseValue)(inputValueIntrospection.defaultValue),\n            type,\n          )\n        : undefined;\n    return {\n      description: inputValueIntrospection.description,\n      type,\n      defaultValue,\n      deprecationReason: inputValueIntrospection.deprecationReason,\n    };\n  }\n\n  function buildDirective(directiveIntrospection) {\n    if (!directiveIntrospection.args) {\n      const directiveIntrospectionStr = (0, _inspect.inspect)(\n        directiveIntrospection,\n      );\n      throw new Error(\n        `Introspection result missing directive args: ${directiveIntrospectionStr}.`,\n      );\n    }\n\n    if (!directiveIntrospection.locations) {\n      const directiveIntrospectionStr = (0, _inspect.inspect)(\n        directiveIntrospection,\n      );\n      throw new Error(\n        `Introspection result missing directive locations: ${directiveIntrospectionStr}.`,\n      );\n    }\n\n    return new _directives.GraphQLDirective({\n      name: directiveIntrospection.name,\n      description: directiveIntrospection.description,\n      isRepeatable: directiveIntrospection.isRepeatable,\n      locations: directiveIntrospection.locations.slice(),\n      args: buildInputValueDefMap(directiveIntrospection.args),\n    });\n  }\n}\n\"/utilities/getOperationRootType.js\u0005'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.getOperationRootType = getOperationRootType;\n\nvar _GraphQLError = require('../error/GraphQLError.js');\n\n/**\n * Extracts the root type of the operation from the schema.\n *\n * @deprecated Please use `GraphQLSchema.getRootType` instead. Will be removed in v17\n */\nfunction getOperationRootType(schema, operation) {\n  if (operation.operation === 'query') {\n    const queryType = schema.getQueryType();\n\n    if (!queryType) {\n      throw new _GraphQLError.GraphQLError(\n        'Schema does not define the required query root type.',\n        {\n          nodes: operation,\n        },\n      );\n    }\n\n    return queryType;\n  }\n\n  if (operation.operation === 'mutation') {\n    const mutationType = schema.getMutationType();\n\n    if (!mutationType) {\n      throw new _GraphQLError.GraphQLError(\n        'Schema is not configured for mutations.',\n        {\n          nodes: operation,\n        },\n      );\n    }\n\n    return mutationType;\n  }\n\n  if (operation.operation === 'subscription') {\n    const subscriptionType = schema.getSubscriptionType();\n\n    if (!subscriptionType) {\n      throw new _GraphQLError.GraphQLError(\n        'Schema is not configured for subscriptions.',\n        {\n          nodes: operation,\n        },\n      );\n    }\n\n    return subscriptionType;\n  }\n\n  throw new _GraphQLError.GraphQLError(\n    'Can only have query, mutation and subscription operations.',\n    {\n      nodes: operation,\n    },\n  );\n}\n/execution/subscribe.mjs\u001fimport { devAssert } from '../jsutils/devAssert.mjs';\nimport { inspect } from '../jsutils/inspect.mjs';\nimport { isAsyncIterable } from '../jsutils/isAsyncIterable.mjs';\nimport { addPath, pathToArray } from '../jsutils/Path.mjs';\nimport { GraphQLError } from '../error/GraphQLError.mjs';\nimport { locatedError } from '../error/locatedError.mjs';\nimport { collectFields } from './collectFields.mjs';\nimport {\n  assertValidExecutionArguments,\n  buildExecutionContext,\n  buildResolveInfo,\n  execute,\n  getFieldDef,\n} from './execute.mjs';\nimport { mapAsyncIterator } from './mapAsyncIterator.mjs';\nimport { getArgumentValues } from './values.mjs';\n/**\n * Implements the \"Subscribe\" algorithm described in the GraphQL specification.\n *\n * Returns a Promise which resolves to either an AsyncIterator (if successful)\n * or an ExecutionResult (error). The promise will be rejected if the schema or\n * other arguments to this function are invalid, or if the resolved event stream\n * is not an async iterable.\n *\n * If the client-provided arguments to this function do not result in a\n * compliant subscription, a GraphQL Response (ExecutionResult) with\n * descriptive errors and no data will be returned.\n *\n * If the source stream could not be created due to faulty subscription\n * resolver logic or underlying systems, the promise will resolve to a single\n * ExecutionResult containing `errors` and no `data`.\n *\n * If the operation succeeded, the promise resolves to an AsyncIterator, which\n * yields a stream of ExecutionResults representing the response stream.\n *\n * Accepts either an object with named arguments, or individual arguments.\n */\n\nexport async function subscribe(args) {\n  // Temporary for v15 to v16 migration. Remove in v17\n  arguments.length < 2 ||\n    devAssert(\n      false,\n      'graphql@16 dropped long-deprecated support for positional arguments, please pass an object instead.',\n    );\n  const resultOrStream = await createSourceEventStream(args);\n\n  if (!isAsyncIterable(resultOrStream)) {\n    return resultOrStream;\n  } // For each payload yielded from a subscription, map it over the normal\n  // GraphQL `execute` function, with `payload` as the rootValue.\n  // This implements the \"MapSourceToResponseEvent\" algorithm described in\n  // the GraphQL specification. The `execute` function provides the\n  // \"ExecuteSubscriptionEvent\" algorithm, as it is nearly identical to the\n  // \"ExecuteQuery\" algorithm, for which `execute` is also used.\n\n  const mapSourceToResponse = (payload) =>\n    execute({ ...args, rootValue: payload }); // Map every source value to a ExecutionResult value as described above.\n\n  return mapAsyncIterator(resultOrStream, mapSourceToResponse);\n}\n\nfunction toNormalizedArgs(args) {\n  const firstArg = args[0];\n\n  if (firstArg && 'document' in firstArg) {\n    return firstArg;\n  }\n\n  return {\n    schema: firstArg,\n    // FIXME: when underlying TS bug fixed, see https://github.com/microsoft/TypeScript/issues/31613\n    document: args[1],\n    rootValue: args[2],\n    contextValue: args[3],\n    variableValues: args[4],\n    operationName: args[5],\n    subscribeFieldResolver: args[6],\n  };\n}\n/**\n * Implements the \"CreateSourceEventStream\" algorithm described in the\n * GraphQL specification, resolving the subscription source event stream.\n *\n * Returns a Promise which resolves to either an AsyncIterable (if successful)\n * or an ExecutionResult (error). The promise will be rejected if the schema or\n * other arguments to this function are invalid, or if the resolved event stream\n * is not an async iterable.\n *\n * If the client-provided arguments to this function do not result in a\n * compliant subscription, a GraphQL Response (ExecutionResult) with\n * descriptive errors and no data will be returned.\n *\n * If the the source stream could not be created due to faulty subscription\n * resolver logic or underlying systems, the promise will resolve to a single\n * ExecutionResult containing `errors` and no `data`.\n *\n * If the operation succeeded, the promise resolves to the AsyncIterable for the\n * event stream returned by the resolver.\n *\n * A Source Event Stream represents a sequence of events, each of which triggers\n * a GraphQL execution for that event.\n *\n * This may be useful when hosting the stateful subscription service in a\n * different process or machine than the stateless GraphQL execution engine,\n * or otherwise separating these two steps. For more on this, see the\n * \"Supporting Subscriptions at Scale\" information in the GraphQL specification.\n */\n\nexport async function createSourceEventStream(...rawArgs) {\n  const args = toNormalizedArgs(rawArgs);\n  const { schema, document, variableValues } = args; // If arguments are missing or incorrectly typed, this is an internal\n  // developer mistake which should throw an early error.\n\n  assertValidExecutionArguments(schema, document, variableValues); // If a valid execution context cannot be created due to incorrect arguments,\n  // a \"Response\" with only errors is returned.\n\n  const exeContext = buildExecutionContext(args); // Return early errors if execution context failed.\n\n  if (!('schema' in exeContext)) {\n    return {\n      errors: exeContext,\n    };\n  }\n\n  try {\n    const eventStream = await executeSubscription(exeContext); // Assert field returned an event stream, otherwise yield an error.\n\n    if (!isAsyncIterable(eventStream)) {\n      throw new Error(\n        'Subscription field must return Async Iterable. ' +\n          `Received: ${inspect(eventStream)}.`,\n      );\n    }\n\n    return eventStream;\n  } catch (error) {\n    // If it GraphQLError, report it as an ExecutionResult, containing only errors and no data.\n    // Otherwise treat the error as a system-class error and re-throw it.\n    if (error instanceof GraphQLError) {\n      return {\n        errors: [error],\n      };\n    }\n\n    throw error;\n  }\n}\n\nasync function executeSubscription(exeContext) {\n  const { schema, fragments, operation, variableValues, rootValue } =\n    exeContext;\n  const rootType = schema.getSubscriptionType();\n\n  if (rootType == null) {\n    throw new GraphQLError(\n      'Schema is not configured to execute subscription operation.',\n      {\n        nodes: operation,\n      },\n    );\n  }\n\n  const rootFields = collectFields(\n    schema,\n    fragments,\n    variableValues,\n    rootType,\n    operation.selectionSet,\n  );\n  const [responseName, fieldNodes] = [...rootFields.entries()][0];\n  const fieldDef = getFieldDef(schema, rootType, fieldNodes[0]);\n\n  if (!fieldDef) {\n    const fieldName = fieldNodes[0].name.value;\n    throw new GraphQLError(\n      `The subscription field \"${fieldName}\" is not defined.`,\n      {\n        nodes: fieldNodes,\n      },\n    );\n  }\n\n  const path = addPath(undefined, responseName, rootType.name);\n  const info = buildResolveInfo(\n    exeContext,\n    fieldDef,\n    fieldNodes,\n    rootType,\n    path,\n  );\n\n  try {\n    var _fieldDef$subscribe;\n\n    // Implements the \"ResolveFieldEventStream\" algorithm from GraphQL specification.\n    // It differs from \"ResolveFieldValue\" due to providing a different `resolveFn`.\n    // Build a JS object of arguments from the field.arguments AST, using the\n    // variables scope to fulfill any variable references.\n    const args = getArgumentValues(fieldDef, fieldNodes[0], variableValues); // The resolve function's optional third argument is a context value that\n    // is provided to every resolve function within an execution. It is commonly\n    // used to represent an authenticated user, or request-specific caches.\n\n    const contextValue = exeContext.contextValue; // Call the `subscribe()` resolver or the default resolver to produce an\n    // AsyncIterable yielding raw payloads.\n\n    const resolveFn =\n      (_fieldDef$subscribe = fieldDef.subscribe) !== null &&\n      _fieldDef$subscribe !== void 0\n        ? _fieldDef$subscribe\n        : exeContext.subscribeFieldResolver;\n    const eventStream = await resolveFn(rootValue, args, contextValue, info);\n\n    if (eventStream instanceof Error) {\n      throw eventStream;\n    }\n\n    return eventStream;\n  } catch (error) {\n    throw locatedError(error, fieldNodes, pathToArray(path));\n  }\n}\n/index.d.ts%\u0007/**\n * GraphQL.js provides a reference implementation for the GraphQL specification\n * but is also a useful utility for operating on GraphQL files and building\n * sophisticated tools.\n *\n * This primary module exports a general purpose function for fulfilling all\n * steps of the GraphQL specification in a single operation, but also includes\n * utilities for every part of the GraphQL specification:\n *\n *   - Parsing the GraphQL language.\n *   - Building a GraphQL type schema.\n *   - Validating a GraphQL request against a type schema.\n *   - Executing a GraphQL request against a type schema.\n *\n * This also includes utility functions for operating on GraphQL types and\n * GraphQL documents to facilitate building tools.\n *\n * You may also import from each sub-directory directly. For example, the\n * following two import statements are equivalent:\n *\n * ```ts\n * import { parse } from 'graphql';\n * import { parse } from 'graphql/language';\n * ```\n *\n * @packageDocumentation\n */\nexport { version, versionInfo } from './version';\nexport type { GraphQLArgs } from './graphql';\nexport { graphql, graphqlSync } from './graphql';\nexport {\n  resolveObjMapThunk,\n  resolveReadonlyArrayThunk,\n  GraphQLSchema,\n  GraphQLDirective,\n  GraphQLScalarType,\n  GraphQLObjectType,\n  GraphQLInterfaceType,\n  GraphQLUnionType,\n  GraphQLEnumType,\n  GraphQLInputObjectType,\n  GraphQLList,\n  GraphQLNonNull,\n  specifiedScalarTypes,\n  GraphQLInt,\n  GraphQLFloat,\n  GraphQLString,\n  GraphQLBoolean,\n  GraphQLID,\n  GRAPHQL_MAX_INT,\n  GRAPHQL_MIN_INT,\n  specifiedDirectives,\n  GraphQLIncludeDirective,\n  GraphQLSkipDirective,\n  GraphQLDeprecatedDirective,\n  GraphQLSpecifiedByDirective,\n  TypeKind,\n  DEFAULT_DEPRECATION_REASON,\n  introspectionTypes,\n  __Schema,\n  __Directive,\n  __DirectiveLocation,\n  __Type,\n  __Field,\n  __InputValue,\n  __EnumValue,\n  __TypeKind,\n  SchemaMetaFieldDef,\n  TypeMetaFieldDef,\n  TypeNameMetaFieldDef,\n  isSchema,\n  isDirective,\n  isType,\n  isScalarType,\n  isObjectType,\n  isInterfaceType,\n  isUnionType,\n  isEnumType,\n  isInputObjectType,\n  isListType,\n  isNonNullType,\n  isInputType,\n  isOutputType,\n  isLeafType,\n  isCompositeType,\n  isAbstractType,\n  isWrappingType,\n  isNullableType,\n  isNamedType,\n  isRequiredArgument,\n  isRequiredInputField,\n  isSpecifiedScalarType,\n  isIntrospectionType,\n  isSpecifiedDirective,\n  assertSchema,\n  assertDirective,\n  assertType,\n  assertScalarType,\n  assertObjectType,\n  assertInterfaceType,\n  assertUnionType,\n  assertEnumType,\n  assertInputObjectType,\n  assertListType,\n  assertNonNullType,\n  assertInputType,\n  assertOutputType,\n  assertLeafType,\n  assertCompositeType,\n  assertAbstractType,\n  assertWrappingType,\n  assertNullableType,\n  assertNamedType,\n  getNullableType,\n  getNamedType,\n  validateSchema,\n  assertValidSchema,\n  assertName,\n  assertEnumValueName,\n} from './type/index';\nexport type {\n  GraphQLType,\n  GraphQLInputType,\n  GraphQLOutputType,\n  GraphQLLeafType,\n  GraphQLCompositeType,\n  GraphQLAbstractType,\n  GraphQLWrappingType,\n  GraphQLNullableType,\n  GraphQLNamedType,\n  GraphQLNamedInputType,\n  GraphQLNamedOutputType,\n  ThunkReadonlyArray,\n  ThunkObjMap,\n  GraphQLSchemaConfig,\n  GraphQLSchemaExtensions,\n  GraphQLDirectiveConfig,\n  GraphQLDirectiveExtensions,\n  GraphQLArgument,\n  GraphQLArgumentConfig,\n  GraphQLArgumentExtensions,\n  GraphQLEnumTypeConfig,\n  GraphQLEnumTypeExtensions,\n  GraphQLEnumValue,\n  GraphQLEnumValueConfig,\n  GraphQLEnumValueConfigMap,\n  GraphQLEnumValueExtensions,\n  GraphQLField,\n  GraphQLFieldConfig,\n  GraphQLFieldConfigArgumentMap,\n  GraphQLFieldConfigMap,\n  GraphQLFieldExtensions,\n  GraphQLFieldMap,\n  GraphQLFieldResolver,\n  GraphQLInputField,\n  GraphQLInputFieldConfig,\n  GraphQLInputFieldConfigMap,\n  GraphQLInputFieldExtensions,\n  GraphQLInputFieldMap,\n  GraphQLInputObjectTypeConfig,\n  GraphQLInputObjectTypeExtensions,\n  GraphQLInterfaceTypeConfig,\n  GraphQLInterfaceTypeExtensions,\n  GraphQLIsTypeOfFn,\n  GraphQLObjectTypeConfig,\n  GraphQLObjectTypeExtensions,\n  GraphQLResolveInfo,\n  ResponsePath,\n  GraphQLScalarTypeConfig,\n  GraphQLScalarTypeExtensions,\n  GraphQLTypeResolver,\n  GraphQLUnionTypeConfig,\n  GraphQLUnionTypeExtensions,\n  GraphQLScalarSerializer,\n  GraphQLScalarValueParser,\n  GraphQLScalarLiteralParser,\n} from './type/index';\nexport {\n  Token,\n  Source,\n  Location,\n  OperationTypeNode,\n  getLocation,\n  printLocation,\n  printSourceLocation,\n  Lexer,\n  TokenKind,\n  parse,\n  parseValue,\n  parseConstValue,\n  parseType,\n  print,\n  visit,\n  visitInParallel,\n  getVisitFn,\n  getEnterLeaveForKind,\n  BREAK,\n  Kind,\n  DirectiveLocation,\n  isDefinitionNode,\n  isExecutableDefinitionNode,\n  isSelectionNode,\n  isValueNode,\n  isConstValueNode,\n  isTypeNode,\n  isTypeSystemDefinitionNode,\n  isTypeDefinitionNode,\n  isTypeSystemExtensionNode,\n  isTypeExtensionNode,\n} from './language/index';\nexport type {\n  ParseOptions,\n  SourceLocation,\n  TokenKindEnum,\n  KindEnum,\n  DirectiveLocationEnum,\n  ASTVisitor,\n  ASTVisitFn,\n  ASTVisitorKeyMap,\n  ASTNode,\n  ASTKindToNode,\n  NameNode,\n  DocumentNode,\n  DefinitionNode,\n  ExecutableDefinitionNode,\n  OperationDefinitionNode,\n  VariableDefinitionNode,\n  VariableNode,\n  SelectionSetNode,\n  SelectionNode,\n  FieldNode,\n  ArgumentNode,\n  ConstArgumentNode,\n  FragmentSpreadNode,\n  InlineFragmentNode,\n  FragmentDefinitionNode,\n  ValueNode,\n  ConstValueNode,\n  IntValueNode,\n  FloatValueNode,\n  StringValueNode,\n  BooleanValueNode,\n  NullValueNode,\n  EnumValueNode,\n  ListValueNode,\n  ConstListValueNode,\n  ObjectValueNode,\n  ConstObjectValueNode,\n  ObjectFieldNode,\n  ConstObjectFieldNode,\n  DirectiveNode,\n  ConstDirectiveNode,\n  TypeNode,\n  NamedTypeNode,\n  ListTypeNode,\n  NonNullTypeNode,\n  TypeSystemDefinitionNode,\n  SchemaDefinitionNode,\n  OperationTypeDefinitionNode,\n  TypeDefinitionNode,\n  ScalarTypeDefinitionNode,\n  ObjectTypeDefinitionNode,\n  FieldDefinitionNode,\n  InputValueDefinitionNode,\n  InterfaceTypeDefinitionNode,\n  UnionTypeDefinitionNode,\n  EnumTypeDefinitionNode,\n  EnumValueDefinitionNode,\n  InputObjectTypeDefinitionNode,\n  DirectiveDefinitionNode,\n  TypeSystemExtensionNode,\n  SchemaExtensionNode,\n  TypeExtensionNode,\n  ScalarTypeExtensionNode,\n  ObjectTypeExtensionNode,\n  InterfaceTypeExtensionNode,\n  UnionTypeExtensionNode,\n  EnumTypeExtensionNode,\n  InputObjectTypeExtensionNode,\n} from './language/index';\nexport {\n  execute,\n  executeSync,\n  defaultFieldResolver,\n  defaultTypeResolver,\n  responsePathAsArray,\n  getArgumentValues,\n  getVariableValues,\n  getDirectiveValues,\n  subscribe,\n  createSourceEventStream,\n} from './execution/index';\nexport type {\n  ExecutionArgs,\n  ExecutionResult,\n  FormattedExecutionResult,\n} from './execution/index';\nexport type { SubscriptionArgs } from './subscription/index';\nexport {\n  validate,\n  ValidationContext,\n  specifiedRules,\n  ExecutableDefinitionsRule,\n  FieldsOnCorrectTypeRule,\n  FragmentsOnCompositeTypesRule,\n  KnownArgumentNamesRule,\n  KnownDirectivesRule,\n  KnownFragmentNamesRule,\n  KnownTypeNamesRule,\n  LoneAnonymousOperationRule,\n  NoFragmentCyclesRule,\n  NoUndefinedVariablesRule,\n  NoUnusedFragmentsRule,\n  NoUnusedVariablesRule,\n  OverlappingFieldsCanBeMergedRule,\n  PossibleFragmentSpreadsRule,\n  ProvidedRequiredArgumentsRule,\n  ScalarLeafsRule,\n  SingleFieldSubscriptionsRule,\n  UniqueArgumentNamesRule,\n  UniqueDirectivesPerLocationRule,\n  UniqueFragmentNamesRule,\n  UniqueInputFieldNamesRule,\n  UniqueOperationNamesRule,\n  UniqueVariableNamesRule,\n  ValuesOfCorrectTypeRule,\n  VariablesAreInputTypesRule,\n  VariablesInAllowedPositionRule,\n  LoneSchemaDefinitionRule,\n  UniqueOperationTypesRule,\n  UniqueTypeNamesRule,\n  UniqueEnumValueNamesRule,\n  UniqueFieldDefinitionNamesRule,\n  UniqueArgumentDefinitionNamesRule,\n  UniqueDirectiveNamesRule,\n  PossibleTypeExtensionsRule,\n  NoDeprecatedCustomRule,\n  NoSchemaIntrospectionCustomRule,\n} from './validation/index';\nexport type { ValidationRule } from './validation/index';\nexport {\n  GraphQLError,\n  syntaxError,\n  locatedError,\n  printError,\n  formatError,\n} from './error/index';\nexport type {\n  GraphQLErrorOptions,\n  GraphQLFormattedError,\n  GraphQLErrorExtensions,\n} from './error/index';\nexport {\n  getIntrospectionQuery,\n  getOperationAST,\n  getOperationRootType,\n  introspectionFromSchema,\n  buildClientSchema,\n  buildASTSchema,\n  buildSchema,\n  extendSchema,\n  lexicographicSortSchema,\n  printSchema,\n  printType,\n  printIntrospectionSchema,\n  typeFromAST,\n  valueFromAST,\n  valueFromASTUntyped,\n  astFromValue,\n  TypeInfo,\n  visitWithTypeInfo,\n  coerceInputValue,\n  concatAST,\n  separateOperations,\n  stripIgnoredCharacters,\n  isEqualType,\n  isTypeSubTypeOf,\n  doTypesOverlap,\n  assertValidName,\n  isValidNameError,\n  BreakingChangeType,\n  DangerousChangeType,\n  findBreakingChanges,\n  findDangerousChanges,\n} from './utilities/index';\nexport type {\n  IntrospectionOptions,\n  IntrospectionQuery,\n  IntrospectionSchema,\n  IntrospectionType,\n  IntrospectionInputType,\n  IntrospectionOutputType,\n  IntrospectionScalarType,\n  IntrospectionObjectType,\n  IntrospectionInterfaceType,\n  IntrospectionUnionType,\n  IntrospectionEnumType,\n  IntrospectionInputObjectType,\n  IntrospectionTypeRef,\n  IntrospectionInputTypeRef,\n  IntrospectionOutputTypeRef,\n  IntrospectionNamedTypeRef,\n  IntrospectionListTypeRef,\n  IntrospectionNonNullTypeRef,\n  IntrospectionField,\n  IntrospectionInputValue,\n  IntrospectionEnumValue,\n  IntrospectionDirective,\n  BuildSchemaOptions,\n  BreakingChange,\n  DangerousChange,\n  TypedQueryDocumentNode,\n} from './utilities/index';\n/execution/values.mjs\u001dimport { inspect } from '../jsutils/inspect.mjs';\nimport { keyMap } from '../jsutils/keyMap.mjs';\nimport { printPathArray } from '../jsutils/printPathArray.mjs';\nimport { GraphQLError } from '../error/GraphQLError.mjs';\nimport { Kind } from '../language/kinds.mjs';\nimport { print } from '../language/printer.mjs';\nimport { isInputType, isNonNullType } from '../type/definition.mjs';\nimport { coerceInputValue } from '../utilities/coerceInputValue.mjs';\nimport { typeFromAST } from '../utilities/typeFromAST.mjs';\nimport { valueFromAST } from '../utilities/valueFromAST.mjs';\n\n/**\n * Prepares an object map of variableValues of the correct type based on the\n * provided variable definitions and arbitrary input. If the input cannot be\n * parsed to match the variable definitions, a GraphQLError will be thrown.\n *\n * Note: The returned value is a plain Object with a prototype, since it is\n * exposed to user code. Care should be taken to not pull values from the\n * Object prototype.\n */\nexport function getVariableValues(schema, varDefNodes, inputs, options) {\n  const errors = [];\n  const maxErrors =\n    options === null || options === void 0 ? void 0 : options.maxErrors;\n\n  try {\n    const coerced = coerceVariableValues(\n      schema,\n      varDefNodes,\n      inputs,\n      (error) => {\n        if (maxErrors != null && errors.length >= maxErrors) {\n          throw new GraphQLError(\n            'Too many errors processing variables, error limit reached. Execution aborted.',\n          );\n        }\n\n        errors.push(error);\n      },\n    );\n\n    if (errors.length === 0) {\n      return {\n        coerced,\n      };\n    }\n  } catch (error) {\n    errors.push(error);\n  }\n\n  return {\n    errors,\n  };\n}\n\nfunction coerceVariableValues(schema, varDefNodes, inputs, onError) {\n  const coercedValues = {};\n\n  for (const varDefNode of varDefNodes) {\n    const varName = varDefNode.variable.name.value;\n    const varType = typeFromAST(schema, varDefNode.type);\n\n    if (!isInputType(varType)) {\n      // Must use input types for variables. This should be caught during\n      // validation, however is checked again here for safety.\n      const varTypeStr = print(varDefNode.type);\n      onError(\n        new GraphQLError(\n          `Variable \"$${varName}\" expected value of type \"${varTypeStr}\" which cannot be used as an input type.`,\n          {\n            nodes: varDefNode.type,\n          },\n        ),\n      );\n      continue;\n    }\n\n    if (!hasOwnProperty(inputs, varName)) {\n      if (varDefNode.defaultValue) {\n        coercedValues[varName] = valueFromAST(varDefNode.defaultValue, varType);\n      } else if (isNonNullType(varType)) {\n        const varTypeStr = inspect(varType);\n        onError(\n          new GraphQLError(\n            `Variable \"$${varName}\" of required type \"${varTypeStr}\" was not provided.`,\n            {\n              nodes: varDefNode,\n            },\n          ),\n        );\n      }\n\n      continue;\n    }\n\n    const value = inputs[varName];\n\n    if (value === null && isNonNullType(varType)) {\n      const varTypeStr = inspect(varType);\n      onError(\n        new GraphQLError(\n          `Variable \"$${varName}\" of non-null type \"${varTypeStr}\" must not be null.`,\n          {\n            nodes: varDefNode,\n          },\n        ),\n      );\n      continue;\n    }\n\n    coercedValues[varName] = coerceInputValue(\n      value,\n      varType,\n      (path, invalidValue, error) => {\n        let prefix =\n          `Variable \"$${varName}\" got invalid value ` + inspect(invalidValue);\n\n        if (path.length > 0) {\n          prefix += ` at \"${varName}${printPathArray(path)}\"`;\n        }\n\n        onError(\n          new GraphQLError(prefix + '; ' + error.message, {\n            nodes: varDefNode,\n            originalError: error.originalError,\n          }),\n        );\n      },\n    );\n  }\n\n  return coercedValues;\n}\n/**\n * Prepares an object map of argument values given a list of argument\n * definitions and list of argument AST nodes.\n *\n * Note: The returned value is a plain Object with a prototype, since it is\n * exposed to user code. Care should be taken to not pull values from the\n * Object prototype.\n */\n\nexport function getArgumentValues(def, node, variableValues) {\n  var _node$arguments;\n\n  const coercedValues = {}; // FIXME: https://github.com/graphql/graphql-js/issues/2203\n\n  /* c8 ignore next */\n\n  const argumentNodes =\n    (_node$arguments = node.arguments) !== null && _node$arguments !== void 0\n      ? _node$arguments\n      : [];\n  const argNodeMap = keyMap(argumentNodes, (arg) => arg.name.value);\n\n  for (const argDef of def.args) {\n    const name = argDef.name;\n    const argType = argDef.type;\n    const argumentNode = argNodeMap[name];\n\n    if (!argumentNode) {\n      if (argDef.defaultValue !== undefined) {\n        coercedValues[name] = argDef.defaultValue;\n      } else if (isNonNullType(argType)) {\n        throw new GraphQLError(\n          `Argument \"${name}\" of required type \"${inspect(argType)}\" ` +\n            'was not provided.',\n          {\n            nodes: node,\n          },\n        );\n      }\n\n      continue;\n    }\n\n    const valueNode = argumentNode.value;\n    let isNull = valueNode.kind === Kind.NULL;\n\n    if (valueNode.kind === Kind.VARIABLE) {\n      const variableName = valueNode.name.value;\n\n      if (\n        variableValues == null ||\n        !hasOwnProperty(variableValues, variableName)\n      ) {\n        if (argDef.defaultValue !== undefined) {\n          coercedValues[name] = argDef.defaultValue;\n        } else if (isNonNullType(argType)) {\n          throw new GraphQLError(\n            `Argument \"${name}\" of required type \"${inspect(argType)}\" ` +\n              `was provided the variable \"$${variableName}\" which was not provided a runtime value.`,\n            {\n              nodes: valueNode,\n            },\n          );\n        }\n\n        continue;\n      }\n\n      isNull = variableValues[variableName] == null;\n    }\n\n    if (isNull && isNonNullType(argType)) {\n      throw new GraphQLError(\n        `Argument \"${name}\" of non-null type \"${inspect(argType)}\" ` +\n          'must not be null.',\n        {\n          nodes: valueNode,\n        },\n      );\n    }\n\n    const coercedValue = valueFromAST(valueNode, argType, variableValues);\n\n    if (coercedValue === undefined) {\n      // Note: ValuesOfCorrectTypeRule validation should catch this before\n      // execution. This is a runtime check to ensure execution does not\n      // continue with an invalid argument value.\n      throw new GraphQLError(\n        `Argument \"${name}\" has invalid value ${print(valueNode)}.`,\n        {\n          nodes: valueNode,\n        },\n      );\n    }\n\n    coercedValues[name] = coercedValue;\n  }\n\n  return coercedValues;\n}\n/**\n * Prepares an object map of argument values given a directive definition\n * and a AST node which may contain directives. Optionally also accepts a map\n * of variable values.\n *\n * If the directive does not exist on the node, returns undefined.\n *\n * Note: The returned value is a plain Object with a prototype, since it is\n * exposed to user code. Care should be taken to not pull values from the\n * Object prototype.\n */\n\nexport function getDirectiveValues(directiveDef, node, variableValues) {\n  var _node$directives;\n\n  const directiveNode =\n    (_node$directives = node.directives) === null || _node$directives === void 0\n      ? void 0\n      : _node$directives.find(\n          (directive) => directive.name.value === directiveDef.name,\n        );\n\n  if (directiveNode) {\n    return getArgumentValues(directiveDef, directiveNode, variableValues);\n  }\n}\n\nfunction hasOwnProperty(obj, prop) {\n  return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n/utilities/extendSchema.mjs]import { devAssert } from '../jsutils/devAssert.mjs';\nimport { inspect } from '../jsutils/inspect.mjs';\nimport { invariant } from '../jsutils/invariant.mjs';\nimport { keyMap } from '../jsutils/keyMap.mjs';\nimport { mapValue } from '../jsutils/mapValue.mjs';\nimport { Kind } from '../language/kinds.mjs';\nimport {\n  isTypeDefinitionNode,\n  isTypeExtensionNode,\n} from '../language/predicates.mjs';\nimport {\n  GraphQLEnumType,\n  GraphQLInputObjectType,\n  GraphQLInterfaceType,\n  GraphQLList,\n  GraphQLNonNull,\n  GraphQLObjectType,\n  GraphQLScalarType,\n  GraphQLUnionType,\n  isEnumType,\n  isInputObjectType,\n  isInterfaceType,\n  isListType,\n  isNonNullType,\n  isObjectType,\n  isScalarType,\n  isUnionType,\n} from '../type/definition.mjs';\nimport {\n  GraphQLDeprecatedDirective,\n  GraphQLDirective,\n  GraphQLSpecifiedByDirective,\n} from '../type/directives.mjs';\nimport {\n  introspectionTypes,\n  isIntrospectionType,\n} from '../type/introspection.mjs';\nimport {\n  isSpecifiedScalarType,\n  specifiedScalarTypes,\n} from '../type/scalars.mjs';\nimport { assertSchema, GraphQLSchema } from '../type/schema.mjs';\nimport { assertValidSDLExtension } from '../validation/validate.mjs';\nimport { getDirectiveValues } from '../execution/values.mjs';\nimport { valueFromAST } from './valueFromAST.mjs';\n\n/**\n * Produces a new schema given an existing schema and a document which may\n * contain GraphQL type extensions and definitions. The original schema will\n * remain unaltered.\n *\n * Because a schema represents a graph of references, a schema cannot be\n * extended without effectively making an entire copy. We do not know until it's\n * too late if subgraphs remain unchanged.\n *\n * This algorithm copies the provided schema, applying extensions while\n * producing the copy. The original schema remains unaltered.\n */\nexport function extendSchema(schema, documentAST, options) {\n  assertSchema(schema);\n  (documentAST != null && documentAST.kind === Kind.DOCUMENT) ||\n    devAssert(false, 'Must provide valid Document AST.');\n\n  if (\n    (options === null || options === void 0 ? void 0 : options.assumeValid) !==\n      true &&\n    (options === null || options === void 0\n      ? void 0\n      : options.assumeValidSDL) !== true\n  ) {\n    assertValidSDLExtension(documentAST, schema);\n  }\n\n  const schemaConfig = schema.toConfig();\n  const extendedConfig = extendSchemaImpl(schemaConfig, documentAST, options);\n  return schemaConfig === extendedConfig\n    ? schema\n    : new GraphQLSchema(extendedConfig);\n}\n/**\n * @internal\n */\n\nexport function extendSchemaImpl(schemaConfig, documentAST, options) {\n  var _schemaDef, _schemaDef$descriptio, _schemaDef2, _options$assumeValid;\n\n  // Collect the type definitions and extensions found in the document.\n  const typeDefs = [];\n  const typeExtensionsMap = Object.create(null); // New directives and types are separate because a directives and types can\n  // have the same name. For example, a type named \"skip\".\n\n  const directiveDefs = [];\n  let schemaDef; // Schema extensions are collected which may add additional operation types.\n\n  const schemaExtensions = [];\n\n  for (const def of documentAST.definitions) {\n    if (def.kind === Kind.SCHEMA_DEFINITION) {\n      schemaDef = def;\n    } else if (def.kind === Kind.SCHEMA_EXTENSION) {\n      schemaExtensions.push(def);\n    } else if (isTypeDefinitionNode(def)) {\n      typeDefs.push(def);\n    } else if (isTypeExtensionNode(def)) {\n      const extendedTypeName = def.name.value;\n      const existingTypeExtensions = typeExtensionsMap[extendedTypeName];\n      typeExtensionsMap[extendedTypeName] = existingTypeExtensions\n        ? existingTypeExtensions.concat([def])\n        : [def];\n    } else if (def.kind === Kind.DIRECTIVE_DEFINITION) {\n      directiveDefs.push(def);\n    }\n  } // If this document contains no new types, extensions, or directives then\n  // return the same unmodified GraphQLSchema instance.\n\n  if (\n    Object.keys(typeExtensionsMap).length === 0 &&\n    typeDefs.length === 0 &&\n    directiveDefs.length === 0 &&\n    schemaExtensions.length === 0 &&\n    schemaDef == null\n  ) {\n    return schemaConfig;\n  }\n\n  const typeMap = Object.create(null);\n\n  for (const existingType of schemaConfig.types) {\n    typeMap[existingType.name] = extendNamedType(existingType);\n  }\n\n  for (const typeNode of typeDefs) {\n    var _stdTypeMap$name;\n\n    const name = typeNode.name.value;\n    typeMap[name] =\n      (_stdTypeMap$name = stdTypeMap[name]) !== null &&\n      _stdTypeMap$name !== void 0\n        ? _stdTypeMap$name\n        : buildType(typeNode);\n  }\n\n  const operationTypes = {\n    // Get the extended root operation types.\n    query: schemaConfig.query && replaceNamedType(schemaConfig.query),\n    mutation: schemaConfig.mutation && replaceNamedType(schemaConfig.mutation),\n    subscription:\n      schemaConfig.subscription && replaceNamedType(schemaConfig.subscription),\n    // Then, incorporate schema definition and all schema extensions.\n    ...(schemaDef && getOperationTypes([schemaDef])),\n    ...getOperationTypes(schemaExtensions),\n  }; // Then produce and return a Schema config with these types.\n\n  return {\n    description:\n      (_schemaDef = schemaDef) === null || _schemaDef === void 0\n        ? void 0\n        : (_schemaDef$descriptio = _schemaDef.description) === null ||\n          _schemaDef$descriptio === void 0\n        ? void 0\n        : _schemaDef$descriptio.value,\n    ...operationTypes,\n    types: Object.values(typeMap),\n    directives: [\n      ...schemaConfig.directives.map(replaceDirective),\n      ...directiveDefs.map(buildDirective),\n    ],\n    extensions: Object.create(null),\n    astNode:\n      (_schemaDef2 = schemaDef) !== null && _schemaDef2 !== void 0\n        ? _schemaDef2\n        : schemaConfig.astNode,\n    extensionASTNodes: schemaConfig.extensionASTNodes.concat(schemaExtensions),\n    assumeValid:\n      (_options$assumeValid =\n        options === null || options === void 0\n          ? void 0\n          : options.assumeValid) !== null && _options$assumeValid !== void 0\n        ? _options$assumeValid\n        : false,\n  }; // Below are functions used for producing this schema that have closed over\n  // this scope and have access to the schema, cache, and newly defined types.\n\n  function replaceType(type) {\n    if (isListType(type)) {\n      // @ts-expect-error\n      return new GraphQLList(replaceType(type.ofType));\n    }\n\n    if (isNonNullType(type)) {\n      // @ts-expect-error\n      return new GraphQLNonNull(replaceType(type.ofType));\n    } // @ts-expect-error FIXME\n\n    return replaceNamedType(type);\n  }\n\n  function replaceNamedType(type) {\n    // Note: While this could make early assertions to get the correctly\n    // typed values, that would throw immediately while type system\n    // validation with validateSchema() will produce more actionable results.\n    return typeMap[type.name];\n  }\n\n  function replaceDirective(directive) {\n    const config = directive.toConfig();\n    return new GraphQLDirective({\n      ...config,\n      args: mapValue(config.args, extendArg),\n    });\n  }\n\n  function extendNamedType(type) {\n    if (isIntrospectionType(type) || isSpecifiedScalarType(type)) {\n      // Builtin types are not extended.\n      return type;\n    }\n\n    if (isScalarType(type)) {\n      return extendScalarType(type);\n    }\n\n    if (isObjectType(type)) {\n      return extendObjectType(type);\n    }\n\n    if (isInterfaceType(type)) {\n      return extendInterfaceType(type);\n    }\n\n    if (isUnionType(type)) {\n      return extendUnionType(type);\n    }\n\n    if (isEnumType(type)) {\n      return extendEnumType(type);\n    }\n\n    if (isInputObjectType(type)) {\n      return extendInputObjectType(type);\n    }\n    /* c8 ignore next 3 */\n    // Not reachable, all possible type definition nodes have been considered.\n\n    false || invariant(false, 'Unexpected type: ' + inspect(type));\n  }\n\n  function extendInputObjectType(type) {\n    var _typeExtensionsMap$co;\n\n    const config = type.toConfig();\n    const extensions =\n      (_typeExtensionsMap$co = typeExtensionsMap[config.name]) !== null &&\n      _typeExtensionsMap$co !== void 0\n        ? _typeExtensionsMap$co\n        : [];\n    return new GraphQLInputObjectType({\n      ...config,\n      fields: () => ({\n        ...mapValue(config.fields, (field) => ({\n          ...field,\n          type: replaceType(field.type),\n        })),\n        ...buildInputFieldMap(extensions),\n      }),\n      extensionASTNodes: config.extensionASTNodes.concat(extensions),\n    });\n  }\n\n  function extendEnumType(type) {\n    var _typeExtensionsMap$ty;\n\n    const config = type.toConfig();\n    const extensions =\n      (_typeExtensionsMap$ty = typeExtensionsMap[type.name]) !== null &&\n      _typeExtensionsMap$ty !== void 0\n        ? _typeExtensionsMap$ty\n        : [];\n    return new GraphQLEnumType({\n      ...config,\n      values: { ...config.values, ...buildEnumValueMap(extensions) },\n      extensionASTNodes: config.extensionASTNodes.concat(extensions),\n    });\n  }\n\n  function extendScalarType(type) {\n    var _typeExtensionsMap$co2;\n\n    const config = type.toConfig();\n    const extensions =\n      (_typeExtensionsMap$co2 = typeExtensionsMap[config.name]) !== null &&\n      _typeExtensionsMap$co2 !== void 0\n        ? _typeExtensionsMap$co2\n        : [];\n    let specifiedByURL = config.specifiedByURL;\n\n    for (const extensionNode of extensions) {\n      var _getSpecifiedByURL;\n\n      specifiedByURL =\n        (_getSpecifiedByURL = getSpecifiedByURL(extensionNode)) !== null &&\n        _getSpecifiedByURL !== void 0\n          ? _getSpecifiedByURL\n          : specifiedByURL;\n    }\n\n    return new GraphQLScalarType({\n      ...config,\n      specifiedByURL,\n      extensionASTNodes: config.extensionASTNodes.concat(extensions),\n    });\n  }\n\n  function extendObjectType(type) {\n    var _typeExtensionsMap$co3;\n\n    const config = type.toConfig();\n    const extensions =\n      (_typeExtensionsMap$co3 = typeExtensionsMap[config.name]) !== null &&\n      _typeExtensionsMap$co3 !== void 0\n        ? _typeExtensionsMap$co3\n        : [];\n    return new GraphQLObjectType({\n      ...config,\n      interfaces: () => [\n        ...type.getInterfaces().map(replaceNamedType),\n        ...buildInterfaces(extensions),\n      ],\n      fields: () => ({\n        ...mapValue(config.fields, extendField),\n        ...buildFieldMap(extensions),\n      }),\n      extensionASTNodes: config.extensionASTNodes.concat(extensions),\n    });\n  }\n\n  function extendInterfaceType(type) {\n    var _typeExtensionsMap$co4;\n\n    const config = type.toConfig();\n    const extensions =\n      (_typeExtensionsMap$co4 = typeExtensionsMap[config.name]) !== null &&\n      _typeExtensionsMap$co4 !== void 0\n        ? _typeExtensionsMap$co4\n        : [];\n    return new GraphQLInterfaceType({\n      ...config,\n      interfaces: () => [\n        ...type.getInterfaces().map(replaceNamedType),\n        ...buildInterfaces(extensions),\n      ],\n      fields: () => ({\n        ...mapValue(config.fields, extendField),\n        ...buildFieldMap(extensions),\n      }),\n      extensionASTNodes: config.extensionASTNodes.concat(extensions),\n    });\n  }\n\n  function extendUnionType(type) {\n    var _typeExtensionsMap$co5;\n\n    const config = type.toConfig();\n    const extensions =\n      (_typeExtensionsMap$co5 = typeExtensionsMap[config.name]) !== null &&\n      _typeExtensionsMap$co5 !== void 0\n        ? _typeExtensionsMap$co5\n        : [];\n    return new GraphQLUnionType({\n      ...config,\n      types: () => [\n        ...type.getTypes().map(replaceNamedType),\n        ...buildUnionTypes(extensions),\n      ],\n      extensionASTNodes: config.extensionASTNodes.concat(extensions),\n    });\n  }\n\n  function extendField(field) {\n    return {\n      ...field,\n      type: replaceType(field.type),\n      args: field.args && mapValue(field.args, extendArg),\n    };\n  }\n\n  function extendArg(arg) {\n    return { ...arg, type: replaceType(arg.type) };\n  }\n\n  function getOperationTypes(nodes) {\n    const opTypes = {};\n\n    for (const node of nodes) {\n      var _node$operationTypes;\n\n      // FIXME: https://github.com/graphql/graphql-js/issues/2203\n      const operationTypesNodes =\n        /* c8 ignore next */\n        (_node$operationTypes = node.operationTypes) !== null &&\n        _node$operationTypes !== void 0\n          ? _node$operationTypes\n          : [];\n\n      for (const operationType of operationTypesNodes) {\n        // Note: While this could make early assertions to get the correctly\n        // typed values below, that would throw immediately while type system\n        // validation with validateSchema() will produce more actionable results.\n        // @ts-expect-error\n        opTypes[operationType.operation] = getNamedType(operationType.type);\n      }\n    }\n\n    return opTypes;\n  }\n\n  function getNamedType(node) {\n    var _stdTypeMap$name2;\n\n    const name = node.name.value;\n    const type =\n      (_stdTypeMap$name2 = stdTypeMap[name]) !== null &&\n      _stdTypeMap$name2 !== void 0\n        ? _stdTypeMap$name2\n        : typeMap[name];\n\n    if (type === undefined) {\n      throw new Error(`Unknown type: \"${name}\".`);\n    }\n\n    return type;\n  }\n\n  function getWrappedType(node) {\n    if (node.kind === Kind.LIST_TYPE) {\n      return new GraphQLList(getWrappedType(node.type));\n    }\n\n    if (node.kind === Kind.NON_NULL_TYPE) {\n      return new GraphQLNonNull(getWrappedType(node.type));\n    }\n\n    return getNamedType(node);\n  }\n\n  function buildDirective(node) {\n    var _node$description;\n\n    return new GraphQLDirective({\n      name: node.name.value,\n      description:\n        (_node$description = node.description) === null ||\n        _node$description === void 0\n          ? void 0\n          : _node$description.value,\n      // @ts-expect-error\n      locations: node.locations.map(({ value }) => value),\n      isRepeatable: node.repeatable,\n      args: buildArgumentMap(node.arguments),\n      astNode: node,\n    });\n  }\n\n  function buildFieldMap(nodes) {\n    const fieldConfigMap = Object.create(null);\n\n    for (const node of nodes) {\n      var _node$fields;\n\n      // FIXME: https://github.com/graphql/graphql-js/issues/2203\n      const nodeFields =\n        /* c8 ignore next */\n        (_node$fields = node.fields) !== null && _node$fields !== void 0\n          ? _node$fields\n          : [];\n\n      for (const field of nodeFields) {\n        var _field$description;\n\n        fieldConfigMap[field.name.value] = {\n          // Note: While this could make assertions to get the correctly typed\n          // value, that would throw immediately while type system validation\n          // with validateSchema() will produce more actionable results.\n          type: getWrappedType(field.type),\n          description:\n            (_field$description = field.description) === null ||\n            _field$description === void 0\n              ? void 0\n              : _field$description.value,\n          args: buildArgumentMap(field.arguments),\n          deprecationReason: getDeprecationReason(field),\n          astNode: field,\n        };\n      }\n    }\n\n    return fieldConfigMap;\n  }\n\n  function buildArgumentMap(args) {\n    // FIXME: https://github.com/graphql/graphql-js/issues/2203\n    const argsNodes =\n      /* c8 ignore next */\n      args !== null && args !== void 0 ? args : [];\n    const argConfigMap = Object.create(null);\n\n    for (const arg of argsNodes) {\n      var _arg$description;\n\n      // Note: While this could make assertions to get the correctly typed\n      // value, that would throw immediately while type system validation\n      // with validateSchema() will produce more actionable results.\n      const type = getWrappedType(arg.type);\n      argConfigMap[arg.name.value] = {\n        type,\n        description:\n          (_arg$description = arg.description) === null ||\n          _arg$description === void 0\n            ? void 0\n            : _arg$description.value,\n        defaultValue: valueFromAST(arg.defaultValue, type),\n        deprecationReason: getDeprecationReason(arg),\n        astNode: arg,\n      };\n    }\n\n    return argConfigMap;\n  }\n\n  function buildInputFieldMap(nodes) {\n    const inputFieldMap = Object.create(null);\n\n    for (const node of nodes) {\n      var _node$fields2;\n\n      // FIXME: https://github.com/graphql/graphql-js/issues/2203\n      const fieldsNodes =\n        /* c8 ignore next */\n        (_node$fields2 = node.fields) !== null && _node$fields2 !== void 0\n          ? _node$fields2\n          : [];\n\n      for (const field of fieldsNodes) {\n        var _field$description2;\n\n        // Note: While this could make assertions to get the correctly typed\n        // value, that would throw immediately while type system validation\n        // with validateSchema() will produce more actionable results.\n        const type = getWrappedType(field.type);\n        inputFieldMap[field.name.value] = {\n          type,\n          description:\n            (_field$description2 = field.description) === null ||\n            _field$description2 === void 0\n              ? void 0\n              : _field$description2.value,\n          defaultValue: valueFromAST(field.defaultValue, type),\n          deprecationReason: getDeprecationReason(field),\n          astNode: field,\n        };\n      }\n    }\n\n    return inputFieldMap;\n  }\n\n  function buildEnumValueMap(nodes) {\n    const enumValueMap = Object.create(null);\n\n    for (const node of nodes) {\n      var _node$values;\n\n      // FIXME: https://github.com/graphql/graphql-js/issues/2203\n      const valuesNodes =\n        /* c8 ignore next */\n        (_node$values = node.values) !== null && _node$values !== void 0\n          ? _node$values\n          : [];\n\n      for (const value of valuesNodes) {\n        var _value$description;\n\n        enumValueMap[value.name.value] = {\n          description:\n            (_value$description = value.description) === null ||\n            _value$description === void 0\n              ? void 0\n              : _value$description.value,\n          deprecationReason: getDeprecationReason(value),\n          astNode: value,\n        };\n      }\n    }\n\n    return enumValueMap;\n  }\n\n  function buildInterfaces(nodes) {\n    // Note: While this could make assertions to get the correctly typed\n    // values below, that would throw immediately while type system\n    // validation with validateSchema() will produce more actionable results.\n    // @ts-expect-error\n    return nodes.flatMap(\n      // FIXME: https://github.com/graphql/graphql-js/issues/2203\n      (node) => {\n        var _node$interfaces$map, _node$interfaces;\n\n        return (\n          /* c8 ignore next */\n          (_node$interfaces$map =\n            (_node$interfaces = node.interfaces) === null ||\n            _node$interfaces === void 0\n              ? void 0\n              : _node$interfaces.map(getNamedType)) !== null &&\n            _node$interfaces$map !== void 0\n            ? _node$interfaces$map\n            : []\n        );\n      },\n    );\n  }\n\n  function buildUnionTypes(nodes) {\n    // Note: While this could make assertions to get the correctly typed\n    // values below, that would throw immediately while type system\n    // validation with validateSchema() will produce more actionable results.\n    // @ts-expect-error\n    return nodes.flatMap(\n      // FIXME: https://github.com/graphql/graphql-js/issues/2203\n      (node) => {\n        var _node$types$map, _node$types;\n\n        return (\n          /* c8 ignore next */\n          (_node$types$map =\n            (_node$types = node.types) === null || _node$types === void 0\n              ? void 0\n              : _node$types.map(getNamedType)) !== null &&\n            _node$types$map !== void 0\n            ? _node$types$map\n            : []\n        );\n      },\n    );\n  }\n\n  function buildType(astNode) {\n    var _typeExtensionsMap$na;\n\n    const name = astNode.name.value;\n    const extensionASTNodes =\n      (_typeExtensionsMap$na = typeExtensionsMap[name]) !== null &&\n      _typeExtensionsMap$na !== void 0\n        ? _typeExtensionsMap$na\n        : [];\n\n    switch (astNode.kind) {\n      case Kind.OBJECT_TYPE_DEFINITION: {\n        var _astNode$description;\n\n        const allNodes = [astNode, ...extensionASTNodes];\n        return new GraphQLObjectType({\n          name,\n          description:\n            (_astNode$description = astNode.description) === null ||\n            _astNode$description === void 0\n              ? void 0\n              : _astNode$description.value,\n          interfaces: () => buildInterfaces(allNodes),\n          fields: () => buildFieldMap(allNodes),\n          astNode,\n          extensionASTNodes,\n        });\n      }\n\n      case Kind.INTERFACE_TYPE_DEFINITION: {\n        var _astNode$description2;\n\n        const allNodes = [astNode, ...extensionASTNodes];\n        return new GraphQLInterfaceType({\n          name,\n          description:\n            (_astNode$description2 = astNode.description) === null ||\n            _astNode$description2 === void 0\n              ? void 0\n              : _astNode$description2.value,\n          interfaces: () => buildInterfaces(allNodes),\n          fields: () => buildFieldMap(allNodes),\n          astNode,\n          extensionASTNodes,\n        });\n      }\n\n      case Kind.ENUM_TYPE_DEFINITION: {\n        var _astNode$description3;\n\n        const allNodes = [astNode, ...extensionASTNodes];\n        return new GraphQLEnumType({\n          name,\n          description:\n            (_astNode$description3 = astNode.description) === null ||\n            _astNode$description3 === void 0\n              ? void 0\n              : _astNode$description3.value,\n          values: buildEnumValueMap(allNodes),\n          astNode,\n          extensionASTNodes,\n        });\n      }\n\n      case Kind.UNION_TYPE_DEFINITION: {\n        var _astNode$description4;\n\n        const allNodes = [astNode, ...extensionASTNodes];\n        return new GraphQLUnionType({\n          name,\n          description:\n            (_astNode$description4 = astNode.description) === null ||\n            _astNode$description4 === void 0\n              ? void 0\n              : _astNode$description4.value,\n          types: () => buildUnionTypes(allNodes),\n          astNode,\n          extensionASTNodes,\n        });\n      }\n\n      case Kind.SCALAR_TYPE_DEFINITION: {\n        var _astNode$description5;\n\n        return new GraphQLScalarType({\n          name,\n          description:\n            (_astNode$description5 = astNode.description) === null ||\n            _astNode$description5 === void 0\n              ? void 0\n              : _astNode$description5.value,\n          specifiedByURL: getSpecifiedByURL(astNode),\n          astNode,\n          extensionASTNodes,\n        });\n      }\n\n      case Kind.INPUT_OBJECT_TYPE_DEFINITION: {\n        var _astNode$description6;\n\n        const allNodes = [astNode, ...extensionASTNodes];\n        return new GraphQLInputObjectType({\n          name,\n          description:\n            (_astNode$description6 = astNode.description) === null ||\n            _astNode$description6 === void 0\n              ? void 0\n              : _astNode$description6.value,\n          fields: () => buildInputFieldMap(allNodes),\n          astNode,\n          extensionASTNodes,\n        });\n      }\n    }\n  }\n}\nconst stdTypeMap = keyMap(\n  [...specifiedScalarTypes, ...introspectionTypes],\n  (type) => type.name,\n);\n/**\n * Given a field or enum value node, returns the string value for the\n * deprecation reason.\n */\n\nfunction getDeprecationReason(node) {\n  const deprecated = getDirectiveValues(GraphQLDeprecatedDirective, node); // @ts-expect-error validated by `getDirectiveValues`\n\n  return deprecated === null || deprecated === void 0\n    ? void 0\n    : deprecated.reason;\n}\n/**\n * Given a scalar node, returns the string value for the specifiedByURL.\n */\n\nfunction getSpecifiedByURL(node) {\n  const specifiedBy = getDirectiveValues(GraphQLSpecifiedByDirective, node); // @ts-expect-error validated by `getDirectiveValues`\n\n  return specifiedBy === null || specifiedBy === void 0\n    ? void 0\n    : specifiedBy.url;\n}\n6/validation/rules/OverlappingFieldsCanBeMergedRule.mjs^<import { inspect } from '../../jsutils/inspect.mjs';\nimport { GraphQLError } from '../../error/GraphQLError.mjs';\nimport { Kind } from '../../language/kinds.mjs';\nimport { print } from '../../language/printer.mjs';\nimport {\n  getNamedType,\n  isInterfaceType,\n  isLeafType,\n  isListType,\n  isNonNullType,\n  isObjectType,\n} from '../../type/definition.mjs';\nimport { sortValueNode } from '../../utilities/sortValueNode.mjs';\nimport { typeFromAST } from '../../utilities/typeFromAST.mjs';\n\nfunction reasonMessage(reason) {\n  if (Array.isArray(reason)) {\n    return reason\n      .map(\n        ([responseName, subReason]) =>\n          `subfields \"${responseName}\" conflict because ` +\n          reasonMessage(subReason),\n      )\n      .join(' and ');\n  }\n\n  return reason;\n}\n/**\n * Overlapping fields can be merged\n *\n * A selection set is only valid if all fields (including spreading any\n * fragments) either correspond to distinct response names or can be merged\n * without ambiguity.\n *\n * See https://spec.graphql.org/draft/#sec-Field-Selection-Merging\n */\n\nexport function OverlappingFieldsCanBeMergedRule(context) {\n  // A memoization for when two fragments are compared \"between\" each other for\n  // conflicts. Two fragments may be compared many times, so memoizing this can\n  // dramatically improve the performance of this validator.\n  const comparedFragmentPairs = new PairSet(); // A cache for the \"field map\" and list of fragment names found in any given\n  // selection set. Selection sets may be asked for this information multiple\n  // times, so this improves the performance of this validator.\n\n  const cachedFieldsAndFragmentNames = new Map();\n  return {\n    SelectionSet(selectionSet) {\n      const conflicts = findConflictsWithinSelectionSet(\n        context,\n        cachedFieldsAndFragmentNames,\n        comparedFragmentPairs,\n        context.getParentType(),\n        selectionSet,\n      );\n\n      for (const [[responseName, reason], fields1, fields2] of conflicts) {\n        const reasonMsg = reasonMessage(reason);\n        context.reportError(\n          new GraphQLError(\n            `Fields \"${responseName}\" conflict because ${reasonMsg}. Use different aliases on the fields to fetch both if this was intentional.`,\n            {\n              nodes: fields1.concat(fields2),\n            },\n          ),\n        );\n      }\n    },\n  };\n}\n\n/**\n * Algorithm:\n *\n * Conflicts occur when two fields exist in a query which will produce the same\n * response name, but represent differing values, thus creating a conflict.\n * The algorithm below finds all conflicts via making a series of comparisons\n * between fields. In order to compare as few fields as possible, this makes\n * a series of comparisons \"within\" sets of fields and \"between\" sets of fields.\n *\n * Given any selection set, a collection produces both a set of fields by\n * also including all inline fragments, as well as a list of fragments\n * referenced by fragment spreads.\n *\n * A) Each selection set represented in the document first compares \"within\" its\n * collected set of fields, finding any conflicts between every pair of\n * overlapping fields.\n * Note: This is the *only time* that a the fields \"within\" a set are compared\n * to each other. After this only fields \"between\" sets are compared.\n *\n * B) Also, if any fragment is referenced in a selection set, then a\n * comparison is made \"between\" the original set of fields and the\n * referenced fragment.\n *\n * C) Also, if multiple fragments are referenced, then comparisons\n * are made \"between\" each referenced fragment.\n *\n * D) When comparing \"between\" a set of fields and a referenced fragment, first\n * a comparison is made between each field in the original set of fields and\n * each field in the the referenced set of fields.\n *\n * E) Also, if any fragment is referenced in the referenced selection set,\n * then a comparison is made \"between\" the original set of fields and the\n * referenced fragment (recursively referring to step D).\n *\n * F) When comparing \"between\" two fragments, first a comparison is made between\n * each field in the first referenced set of fields and each field in the the\n * second referenced set of fields.\n *\n * G) Also, any fragments referenced by the first must be compared to the\n * second, and any fragments referenced by the second must be compared to the\n * first (recursively referring to step F).\n *\n * H) When comparing two fields, if both have selection sets, then a comparison\n * is made \"between\" both selection sets, first comparing the set of fields in\n * the first selection set with the set of fields in the second.\n *\n * I) Also, if any fragment is referenced in either selection set, then a\n * comparison is made \"between\" the other set of fields and the\n * referenced fragment.\n *\n * J) Also, if two fragments are referenced in both selection sets, then a\n * comparison is made \"between\" the two fragments.\n *\n */\n// Find all conflicts found \"within\" a selection set, including those found\n// via spreading in fragments. Called when visiting each SelectionSet in the\n// GraphQL Document.\nfunction findConflictsWithinSelectionSet(\n  context,\n  cachedFieldsAndFragmentNames,\n  comparedFragmentPairs,\n  parentType,\n  selectionSet,\n) {\n  const conflicts = [];\n  const [fieldMap, fragmentNames] = getFieldsAndFragmentNames(\n    context,\n    cachedFieldsAndFragmentNames,\n    parentType,\n    selectionSet,\n  ); // (A) Find find all conflicts \"within\" the fields of this selection set.\n  // Note: this is the *only place* `collectConflictsWithin` is called.\n\n  collectConflictsWithin(\n    context,\n    conflicts,\n    cachedFieldsAndFragmentNames,\n    comparedFragmentPairs,\n    fieldMap,\n  );\n\n  if (fragmentNames.length !== 0) {\n    // (B) Then collect conflicts between these fields and those represented by\n    // each spread fragment name found.\n    for (let i = 0; i < fragmentNames.length; i++) {\n      collectConflictsBetweenFieldsAndFragment(\n        context,\n        conflicts,\n        cachedFieldsAndFragmentNames,\n        comparedFragmentPairs,\n        false,\n        fieldMap,\n        fragmentNames[i],\n      ); // (C) Then compare this fragment with all other fragments found in this\n      // selection set to collect conflicts between fragments spread together.\n      // This compares each item in the list of fragment names to every other\n      // item in that same list (except for itself).\n\n      for (let j = i + 1; j < fragmentNames.length; j++) {\n        collectConflictsBetweenFragments(\n          context,\n          conflicts,\n          cachedFieldsAndFragmentNames,\n          comparedFragmentPairs,\n          false,\n          fragmentNames[i],\n          fragmentNames[j],\n        );\n      }\n    }\n  }\n\n  return conflicts;\n} // Collect all conflicts found between a set of fields and a fragment reference\n// including via spreading in any nested fragments.\n\nfunction collectConflictsBetweenFieldsAndFragment(\n  context,\n  conflicts,\n  cachedFieldsAndFragmentNames,\n  comparedFragmentPairs,\n  areMutuallyExclusive,\n  fieldMap,\n  fragmentName,\n) {\n  const fragment = context.getFragment(fragmentName);\n\n  if (!fragment) {\n    return;\n  }\n\n  const [fieldMap2, referencedFragmentNames] =\n    getReferencedFieldsAndFragmentNames(\n      context,\n      cachedFieldsAndFragmentNames,\n      fragment,\n    ); // Do not compare a fragment's fieldMap to itself.\n\n  if (fieldMap === fieldMap2) {\n    return;\n  } // (D) First collect any conflicts between the provided collection of fields\n  // and the collection of fields represented by the given fragment.\n\n  collectConflictsBetween(\n    context,\n    conflicts,\n    cachedFieldsAndFragmentNames,\n    comparedFragmentPairs,\n    areMutuallyExclusive,\n    fieldMap,\n    fieldMap2,\n  ); // (E) Then collect any conflicts between the provided collection of fields\n  // and any fragment names found in the given fragment.\n\n  for (const referencedFragmentName of referencedFragmentNames) {\n    // Memoize so two fragments are not compared for conflicts more than once.\n    if (\n      comparedFragmentPairs.has(\n        referencedFragmentName,\n        fragmentName,\n        areMutuallyExclusive,\n      )\n    ) {\n      continue;\n    }\n\n    comparedFragmentPairs.add(\n      referencedFragmentName,\n      fragmentName,\n      areMutuallyExclusive,\n    );\n    collectConflictsBetweenFieldsAndFragment(\n      context,\n      conflicts,\n      cachedFieldsAndFragmentNames,\n      comparedFragmentPairs,\n      areMutuallyExclusive,\n      fieldMap,\n      referencedFragmentName,\n    );\n  }\n} // Collect all conflicts found between two fragments, including via spreading in\n// any nested fragments.\n\nfunction collectConflictsBetweenFragments(\n  context,\n  conflicts,\n  cachedFieldsAndFragmentNames,\n  comparedFragmentPairs,\n  areMutuallyExclusive,\n  fragmentName1,\n  fragmentName2,\n) {\n  // No need to compare a fragment to itself.\n  if (fragmentName1 === fragmentName2) {\n    return;\n  } // Memoize so two fragments are not compared for conflicts more than once.\n\n  if (\n    comparedFragmentPairs.has(\n      fragmentName1,\n      fragmentName2,\n      areMutuallyExclusive,\n    )\n  ) {\n    return;\n  }\n\n  comparedFragmentPairs.add(fragmentName1, fragmentName2, areMutuallyExclusive);\n  const fragment1 = context.getFragment(fragmentName1);\n  const fragment2 = context.getFragment(fragmentName2);\n\n  if (!fragment1 || !fragment2) {\n    return;\n  }\n\n  const [fieldMap1, referencedFragmentNames1] =\n    getReferencedFieldsAndFragmentNames(\n      context,\n      cachedFieldsAndFragmentNames,\n      fragment1,\n    );\n  const [fieldMap2, referencedFragmentNames2] =\n    getReferencedFieldsAndFragmentNames(\n      context,\n      cachedFieldsAndFragmentNames,\n      fragment2,\n    ); // (F) First, collect all conflicts between these two collections of fields\n  // (not including any nested fragments).\n\n  collectConflictsBetween(\n    context,\n    conflicts,\n    cachedFieldsAndFragmentNames,\n    comparedFragmentPairs,\n    areMutuallyExclusive,\n    fieldMap1,\n    fieldMap2,\n  ); // (G) Then collect conflicts between the first fragment and any nested\n  // fragments spread in the second fragment.\n\n  for (const referencedFragmentName2 of referencedFragmentNames2) {\n    collectConflictsBetweenFragments(\n      context,\n      conflicts,\n      cachedFieldsAndFragmentNames,\n      comparedFragmentPairs,\n      areMutuallyExclusive,\n      fragmentName1,\n      referencedFragmentName2,\n    );\n  } // (G) Then collect conflicts between the second fragment and any nested\n  // fragments spread in the first fragment.\n\n  for (const referencedFragmentName1 of referencedFragmentNames1) {\n    collectConflictsBetweenFragments(\n      context,\n      conflicts,\n      cachedFieldsAndFragmentNames,\n      comparedFragmentPairs,\n      areMutuallyExclusive,\n      referencedFragmentName1,\n      fragmentName2,\n    );\n  }\n} // Find all conflicts found between two selection sets, including those found\n// via spreading in fragments. Called when determining if conflicts exist\n// between the sub-fields of two overlapping fields.\n\nfunction findConflictsBetweenSubSelectionSets(\n  context,\n  cachedFieldsAndFragmentNames,\n  comparedFragmentPairs,\n  areMutuallyExclusive,\n  parentType1,\n  selectionSet1,\n  parentType2,\n  selectionSet2,\n) {\n  const conflicts = [];\n  const [fieldMap1, fragmentNames1] = getFieldsAndFragmentNames(\n    context,\n    cachedFieldsAndFragmentNames,\n    parentType1,\n    selectionSet1,\n  );\n  const [fieldMap2, fragmentNames2] = getFieldsAndFragmentNames(\n    context,\n    cachedFieldsAndFragmentNames,\n    parentType2,\n    selectionSet2,\n  ); // (H) First, collect all conflicts between these two collections of field.\n\n  collectConflictsBetween(\n    context,\n    conflicts,\n    cachedFieldsAndFragmentNames,\n    comparedFragmentPairs,\n    areMutuallyExclusive,\n    fieldMap1,\n    fieldMap2,\n  ); // (I) Then collect conflicts between the first collection of fields and\n  // those referenced by each fragment name associated with the second.\n\n  for (const fragmentName2 of fragmentNames2) {\n    collectConflictsBetweenFieldsAndFragment(\n      context,\n      conflicts,\n      cachedFieldsAndFragmentNames,\n      comparedFragmentPairs,\n      areMutuallyExclusive,\n      fieldMap1,\n      fragmentName2,\n    );\n  } // (I) Then collect conflicts between the second collection of fields and\n  // those referenced by each fragment name associated with the first.\n\n  for (const fragmentName1 of fragmentNames1) {\n    collectConflictsBetweenFieldsAndFragment(\n      context,\n      conflicts,\n      cachedFieldsAndFragmentNames,\n      comparedFragmentPairs,\n      areMutuallyExclusive,\n      fieldMap2,\n      fragmentName1,\n    );\n  } // (J) Also collect conflicts between any fragment names by the first and\n  // fragment names by the second. This compares each item in the first set of\n  // names to each item in the second set of names.\n\n  for (const fragmentName1 of fragmentNames1) {\n    for (const fragmentName2 of fragmentNames2) {\n      collectConflictsBetweenFragments(\n        context,\n        conflicts,\n        cachedFieldsAndFragmentNames,\n        comparedFragmentPairs,\n        areMutuallyExclusive,\n        fragmentName1,\n        fragmentName2,\n      );\n    }\n  }\n\n  return conflicts;\n} // Collect all Conflicts \"within\" one collection of fields.\n\nfunction collectConflictsWithin(\n  context,\n  conflicts,\n  cachedFieldsAndFragmentNames,\n  comparedFragmentPairs,\n  fieldMap,\n) {\n  // A field map is a keyed collection, where each key represents a response\n  // name and the value at that key is a list of all fields which provide that\n  // response name. For every response name, if there are multiple fields, they\n  // must be compared to find a potential conflict.\n  for (const [responseName, fields] of Object.entries(fieldMap)) {\n    // This compares every field in the list to every other field in this list\n    // (except to itself). If the list only has one item, nothing needs to\n    // be compared.\n    if (fields.length > 1) {\n      for (let i = 0; i < fields.length; i++) {\n        for (let j = i + 1; j < fields.length; j++) {\n          const conflict = findConflict(\n            context,\n            cachedFieldsAndFragmentNames,\n            comparedFragmentPairs,\n            false, // within one collection is never mutually exclusive\n            responseName,\n            fields[i],\n            fields[j],\n          );\n\n          if (conflict) {\n            conflicts.push(conflict);\n          }\n        }\n      }\n    }\n  }\n} // Collect all Conflicts between two collections of fields. This is similar to,\n// but different from the `collectConflictsWithin` function above. This check\n// assumes that `collectConflictsWithin` has already been called on each\n// provided collection of fields. This is true because this validator traverses\n// each individual selection set.\n\nfunction collectConflictsBetween(\n  context,\n  conflicts,\n  cachedFieldsAndFragmentNames,\n  comparedFragmentPairs,\n  parentFieldsAreMutuallyExclusive,\n  fieldMap1,\n  fieldMap2,\n) {\n  // A field map is a keyed collection, where each key represents a response\n  // name and the value at that key is a list of all fields which provide that\n  // response name. For any response name which appears in both provided field\n  // maps, each field from the first field map must be compared to every field\n  // in the second field map to find potential conflicts.\n  for (const [responseName, fields1] of Object.entries(fieldMap1)) {\n    const fields2 = fieldMap2[responseName];\n\n    if (fields2) {\n      for (const field1 of fields1) {\n        for (const field2 of fields2) {\n          const conflict = findConflict(\n            context,\n            cachedFieldsAndFragmentNames,\n            comparedFragmentPairs,\n            parentFieldsAreMutuallyExclusive,\n            responseName,\n            field1,\n            field2,\n          );\n\n          if (conflict) {\n            conflicts.push(conflict);\n          }\n        }\n      }\n    }\n  }\n} // Determines if there is a conflict between two particular fields, including\n// comparing their sub-fields.\n\nfunction findConflict(\n  context,\n  cachedFieldsAndFragmentNames,\n  comparedFragmentPairs,\n  parentFieldsAreMutuallyExclusive,\n  responseName,\n  field1,\n  field2,\n) {\n  const [parentType1, node1, def1] = field1;\n  const [parentType2, node2, def2] = field2; // If it is known that two fields could not possibly apply at the same\n  // time, due to the parent types, then it is safe to permit them to diverge\n  // in aliased field or arguments used as they will not present any ambiguity\n  // by differing.\n  // It is known that two parent types could never overlap if they are\n  // different Object types. Interface or Union types might overlap - if not\n  // in the current state of the schema, then perhaps in some future version,\n  // thus may not safely diverge.\n\n  const areMutuallyExclusive =\n    parentFieldsAreMutuallyExclusive ||\n    (parentType1 !== parentType2 &&\n      isObjectType(parentType1) &&\n      isObjectType(parentType2));\n\n  if (!areMutuallyExclusive) {\n    // Two aliases must refer to the same field.\n    const name1 = node1.name.value;\n    const name2 = node2.name.value;\n\n    if (name1 !== name2) {\n      return [\n        [responseName, `\"${name1}\" and \"${name2}\" are different fields`],\n        [node1],\n        [node2],\n      ];\n    } // Two field calls must have the same arguments.\n\n    if (stringifyArguments(node1) !== stringifyArguments(node2)) {\n      return [\n        [responseName, 'they have differing arguments'],\n        [node1],\n        [node2],\n      ];\n    }\n  } // The return type for each field.\n\n  const type1 = def1 === null || def1 === void 0 ? void 0 : def1.type;\n  const type2 = def2 === null || def2 === void 0 ? void 0 : def2.type;\n\n  if (type1 && type2 && doTypesConflict(type1, type2)) {\n    return [\n      [\n        responseName,\n        `they return conflicting types \"${inspect(type1)}\" and \"${inspect(\n          type2,\n        )}\"`,\n      ],\n      [node1],\n      [node2],\n    ];\n  } // Collect and compare sub-fields. Use the same \"visited fragment names\" list\n  // for both collections so fields in a fragment reference are never\n  // compared to themselves.\n\n  const selectionSet1 = node1.selectionSet;\n  const selectionSet2 = node2.selectionSet;\n\n  if (selectionSet1 && selectionSet2) {\n    const conflicts = findConflictsBetweenSubSelectionSets(\n      context,\n      cachedFieldsAndFragmentNames,\n      comparedFragmentPairs,\n      areMutuallyExclusive,\n      getNamedType(type1),\n      selectionSet1,\n      getNamedType(type2),\n      selectionSet2,\n    );\n    return subfieldConflicts(conflicts, responseName, node1, node2);\n  }\n}\n\nfunction stringifyArguments(fieldNode) {\n  var _fieldNode$arguments;\n\n  // FIXME https://github.com/graphql/graphql-js/issues/2203\n  const args =\n    /* c8 ignore next */\n    (_fieldNode$arguments = fieldNode.arguments) !== null &&\n    _fieldNode$arguments !== void 0\n      ? _fieldNode$arguments\n      : [];\n  const inputObjectWithArgs = {\n    kind: Kind.OBJECT,\n    fields: args.map((argNode) => ({\n      kind: Kind.OBJECT_FIELD,\n      name: argNode.name,\n      value: argNode.value,\n    })),\n  };\n  return print(sortValueNode(inputObjectWithArgs));\n} // Two types conflict if both types could not apply to a value simultaneously.\n// Composite types are ignored as their individual field types will be compared\n// later recursively. However List and Non-Null types must match.\n\nfunction doTypesConflict(type1, type2) {\n  if (isListType(type1)) {\n    return isListType(type2)\n      ? doTypesConflict(type1.ofType, type2.ofType)\n      : true;\n  }\n\n  if (isListType(type2)) {\n    return true;\n  }\n\n  if (isNonNullType(type1)) {\n    return isNonNullType(type2)\n      ? doTypesConflict(type1.ofType, type2.ofType)\n      : true;\n  }\n\n  if (isNonNullType(type2)) {\n    return true;\n  }\n\n  if (isLeafType(type1) || isLeafType(type2)) {\n    return type1 !== type2;\n  }\n\n  return false;\n} // Given a selection set, return the collection of fields (a mapping of response\n// name to field nodes and definitions) as well as a list of fragment names\n// referenced via fragment spreads.\n\nfunction getFieldsAndFragmentNames(\n  context,\n  cachedFieldsAndFragmentNames,\n  parentType,\n  selectionSet,\n) {\n  const cached = cachedFieldsAndFragmentNames.get(selectionSet);\n\n  if (cached) {\n    return cached;\n  }\n\n  const nodeAndDefs = Object.create(null);\n  const fragmentNames = Object.create(null);\n\n  _collectFieldsAndFragmentNames(\n    context,\n    parentType,\n    selectionSet,\n    nodeAndDefs,\n    fragmentNames,\n  );\n\n  const result = [nodeAndDefs, Object.keys(fragmentNames)];\n  cachedFieldsAndFragmentNames.set(selectionSet, result);\n  return result;\n} // Given a reference to a fragment, return the represented collection of fields\n// as well as a list of nested fragment names referenced via fragment spreads.\n\nfunction getReferencedFieldsAndFragmentNames(\n  context,\n  cachedFieldsAndFragmentNames,\n  fragment,\n) {\n  // Short-circuit building a type from the node if possible.\n  const cached = cachedFieldsAndFragmentNames.get(fragment.selectionSet);\n\n  if (cached) {\n    return cached;\n  }\n\n  const fragmentType = typeFromAST(context.getSchema(), fragment.typeCondition);\n  return getFieldsAndFragmentNames(\n    context,\n    cachedFieldsAndFragmentNames,\n    fragmentType,\n    fragment.selectionSet,\n  );\n}\n\nfunction _collectFieldsAndFragmentNames(\n  context,\n  parentType,\n  selectionSet,\n  nodeAndDefs,\n  fragmentNames,\n) {\n  for (const selection of selectionSet.selections) {\n    switch (selection.kind) {\n      case Kind.FIELD: {\n        const fieldName = selection.name.value;\n        let fieldDef;\n\n        if (isObjectType(parentType) || isInterfaceType(parentType)) {\n          fieldDef = parentType.getFields()[fieldName];\n        }\n\n        const responseName = selection.alias\n          ? selection.alias.value\n          : fieldName;\n\n        if (!nodeAndDefs[responseName]) {\n          nodeAndDefs[responseName] = [];\n        }\n\n        nodeAndDefs[responseName].push([parentType, selection, fieldDef]);\n        break;\n      }\n\n      case Kind.FRAGMENT_SPREAD:\n        fragmentNames[selection.name.value] = true;\n        break;\n\n      case Kind.INLINE_FRAGMENT: {\n        const typeCondition = selection.typeCondition;\n        const inlineFragmentType = typeCondition\n          ? typeFromAST(context.getSchema(), typeCondition)\n          : parentType;\n\n        _collectFieldsAndFragmentNames(\n          context,\n          inlineFragmentType,\n          selection.selectionSet,\n          nodeAndDefs,\n          fragmentNames,\n        );\n\n        break;\n      }\n    }\n  }\n} // Given a series of Conflicts which occurred between two sub-fields, generate\n// a single Conflict.\n\nfunction subfieldConflicts(conflicts, responseName, node1, node2) {\n  if (conflicts.length > 0) {\n    return [\n      [responseName, conflicts.map(([reason]) => reason)],\n      [node1, ...conflicts.map(([, fields1]) => fields1).flat()],\n      [node2, ...conflicts.map(([, , fields2]) => fields2).flat()],\n    ];\n  }\n}\n/**\n * A way to keep track of pairs of things when the ordering of the pair does not matter.\n */\n\nclass PairSet {\n  constructor() {\n    this._data = new Map();\n  }\n\n  has(a, b, areMutuallyExclusive) {\n    var _this$_data$get;\n\n    const [key1, key2] = a < b ? [a, b] : [b, a];\n    const result =\n      (_this$_data$get = this._data.get(key1)) === null ||\n      _this$_data$get === void 0\n        ? void 0\n        : _this$_data$get.get(key2);\n\n    if (result === undefined) {\n      return false;\n    } // areMutuallyExclusive being false is a superset of being true, hence if\n    // we want to know if this PairSet \"has\" these two with no exclusivity,\n    // we have to ensure it was added as such.\n\n    return areMutuallyExclusive ? true : areMutuallyExclusive === result;\n  }\n\n  add(a, b, areMutuallyExclusive) {\n    const [key1, key2] = a < b ? [a, b] : [b, a];\n\n    const map = this._data.get(key1);\n\n    if (map === undefined) {\n      this._data.set(key1, new Map([[key2, areMutuallyExclusive]]));\n    } else {\n      map.set(key2, areMutuallyExclusive);\n    }\n  }\n}\n/jsutils/memoize3.js\u0002'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.memoize3 = memoize3;\n\n/**\n * Memoizes the provided three-argument function.\n */\nfunction memoize3(fn) {\n  let cache0;\n  return function memoized(a1, a2, a3) {\n    if (cache0 === undefined) {\n      cache0 = new WeakMap();\n    }\n\n    let cache1 = cache0.get(a1);\n\n    if (cache1 === undefined) {\n      cache1 = new WeakMap();\n      cache0.set(a1, cache1);\n    }\n\n    let cache2 = cache1.get(a2);\n\n    if (cache2 === undefined) {\n      cache2 = new WeakMap();\n      cache1.set(a2, cache2);\n    }\n\n    let fnResult = cache2.get(a3);\n\n    if (fnResult === undefined) {\n      fnResult = fn(a1, a2, a3);\n      cache2.set(a3, fnResult);\n    }\n\n    return fnResult;\n  };\n}\n/jsutils/Maybe.d.tsĎ/** Conveniently represents flow's \"Maybe\" type https://flow.org/en/docs/types/maybe/ */\nexport declare type Maybe<T> = null | undefined | T;\n//validation/rules/NoUndefinedVariablesRule.d.ts\u0001import type { ASTVisitor } from '../../language/visitor';\nimport type { ValidationContext } from '../ValidationContext';\n/**\n * No undefined variables\n *\n * A GraphQL operation is only valid if all variables encountered, both directly\n * and via fragment spreads, are defined by that operation.\n *\n * See https://spec.graphql.org/draft/#sec-All-Variable-Uses-Defined\n */\nexport declare function NoUndefinedVariablesRule(\n  context: ValidationContext,\n): ASTVisitor;\n/jsutils/inspect.mjs\tconst MAX_ARRAY_LENGTH = 10;\nconst MAX_RECURSIVE_DEPTH = 2;\n/**\n * Used to print values in error messages.\n */\n\nexport function inspect(value) {\n  return formatValue(value, []);\n}\n\nfunction formatValue(value, seenValues) {\n  switch (typeof value) {\n    case 'string':\n      return JSON.stringify(value);\n\n    case 'function':\n      return value.name ? `[function ${value.name}]` : '[function]';\n\n    case 'object':\n      return formatObjectValue(value, seenValues);\n\n    default:\n      return String(value);\n  }\n}\n\nfunction formatObjectValue(value, previouslySeenValues) {\n  if (value === null) {\n    return 'null';\n  }\n\n  if (previouslySeenValues.includes(value)) {\n    return '[Circular]';\n  }\n\n  const seenValues = [...previouslySeenValues, value];\n\n  if (isJSONable(value)) {\n    const jsonValue = value.toJSON(); // check for infinite recursion\n\n    if (jsonValue !== value) {\n      return typeof jsonValue === 'string'\n        ? jsonValue\n        : formatValue(jsonValue, seenValues);\n    }\n  } else if (Array.isArray(value)) {\n    return formatArray(value, seenValues);\n  }\n\n  return formatObject(value, seenValues);\n}\n\nfunction isJSONable(value) {\n  return typeof value.toJSON === 'function';\n}\n\nfunction formatObject(object, seenValues) {\n  const entries = Object.entries(object);\n\n  if (entries.length === 0) {\n    return '{}';\n  }\n\n  if (seenValues.length > MAX_RECURSIVE_DEPTH) {\n    return '[' + getObjectTag(object) + ']';\n  }\n\n  const properties = entries.map(\n    ([key, value]) => key + ': ' + formatValue(value, seenValues),\n  );\n  return '{ ' + properties.join(', ') + ' }';\n}\n\nfunction formatArray(array, seenValues) {\n  if (array.length === 0) {\n    return '[]';\n  }\n\n  if (seenValues.length > MAX_RECURSIVE_DEPTH) {\n    return '[Array]';\n  }\n\n  const len = Math.min(MAX_ARRAY_LENGTH, array.length);\n  const remaining = array.length - len;\n  const items = [];\n\n  for (let i = 0; i < len; ++i) {\n    items.push(formatValue(array[i], seenValues));\n  }\n\n  if (remaining === 1) {\n    items.push('... 1 more item');\n  } else if (remaining > 1) {\n    items.push(`... ${remaining} more items`);\n  }\n\n  return '[' + items.join(', ') + ']';\n}\n\nfunction getObjectTag(object) {\n  const tag = Object.prototype.toString\n    .call(object)\n    .replace(/^\\[object /, '')\n    .replace(/]$/, '');\n\n  if (tag === 'Object' && typeof object.constructor === 'function') {\n    const name = object.constructor.name;\n\n    if (typeof name === 'string' && name !== '') {\n      return name;\n    }\n  }\n\n  return tag;\n}\n&/utilities/stripIgnoredCharacters.d.ts\u0005import { Source } from '../language/source';\n/**\n * Strips characters that are not significant to the validity or execution\n * of a GraphQL document:\n *   - UnicodeBOM\n *   - WhiteSpace\n *   - LineTerminator\n *   - Comment\n *   - Comma\n *   - BlockString indentation\n *\n * Note: It is required to have a delimiter character between neighboring\n * non-punctuator tokens and this function always uses single space as delimiter.\n *\n * It is guaranteed that both input and output documents if parsed would result\n * in the exact same AST except for nodes location.\n *\n * Warning: It is guaranteed that this function will always produce stable results.\n * However, it's not guaranteed that it will stay the same between different\n * releases due to bugfixes or changes in the GraphQL specification.\n *\n * Query example:\n *\n * ```graphql\n * query SomeQuery($foo: String!, $bar: String) {\n *   someField(foo: $foo, bar: $bar) {\n *     a\n *     b {\n *       c\n *       d\n *     }\n *   }\n * }\n * ```\n *\n * Becomes:\n *\n * ```graphql\n * query SomeQuery($foo:String!$bar:String){someField(foo:$foo bar:$bar){a b{c d}}}\n * ```\n *\n * SDL example:\n *\n * ```graphql\n * \"\"\"\n * Type description\n * \"\"\"\n * type Foo {\n *   \"\"\"\n *   Field description\n *   \"\"\"\n *   bar: String\n * }\n * ```\n *\n * Becomes:\n *\n * ```graphql\n * \"\"\"Type description\"\"\" type Foo{\"\"\"Field description\"\"\" bar:String}\n * ```\n */\nexport declare function stripIgnoredCharacters(source: string | Source): string;\n/jsutils/keyMap.d.ts\u0003\u0013import type { ObjMap } from './ObjMap';\n/**\n * Creates a keyed JS object from an array, given a function to produce the keys\n * for each value in the array.\n *\n * This provides a convenient lookup for the array items if the key function\n * produces unique results.\n * ```ts\n * const phoneBook = [\n *   { name: 'Jon', num: '555-1234' },\n *   { name: 'Jenny', num: '867-5309' }\n * ]\n *\n * const entriesByName = keyMap(\n *   phoneBook,\n *   entry => entry.name\n * )\n *\n * // {\n * //   Jon: { name: 'Jon', num: '555-1234' },\n * //   Jenny: { name: 'Jenny', num: '867-5309' }\n * // }\n *\n * const jennyEntry = entriesByName['Jenny']\n *\n * // { name: 'Jenny', num: '857-6309' }\n * ```\n */\nexport declare function keyMap<T>(\n  list: ReadonlyArray<T>,\n  keyFn: (item: T) => string,\n): ObjMap<T>;\n/error/GraphQLError.js\u001c'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.GraphQLError = void 0;\nexports.formatError = formatError;\nexports.printError = printError;\n\nvar _isObjectLike = require('../jsutils/isObjectLike.js');\n\nvar _location = require('../language/location.js');\n\nvar _printLocation = require('../language/printLocation.js');\n\nfunction toNormalizedOptions(args) {\n  const firstArg = args[0];\n\n  if (firstArg == null || 'kind' in firstArg || 'length' in firstArg) {\n    return {\n      nodes: firstArg,\n      source: args[1],\n      positions: args[2],\n      path: args[3],\n      originalError: args[4],\n      extensions: args[5],\n    };\n  }\n\n  return firstArg;\n}\n/**\n * A GraphQLError describes an Error found during the parse, validate, or\n * execute phases of performing a GraphQL operation. In addition to a message\n * and stack trace, it also includes information about the locations in a\n * GraphQL document and/or execution result that correspond to the Error.\n */\n\nclass GraphQLError extends Error {\n  /**\n   * An array of `{ line, column }` locations within the source GraphQL document\n   * which correspond to this error.\n   *\n   * Errors during validation often contain multiple locations, for example to\n   * point out two things with the same name. Errors during execution include a\n   * single location, the field which produced the error.\n   *\n   * Enumerable, and appears in the result of JSON.stringify().\n   */\n\n  /**\n   * An array describing the JSON-path into the execution response which\n   * corresponds to this error. Only included for errors during execution.\n   *\n   * Enumerable, and appears in the result of JSON.stringify().\n   */\n\n  /**\n   * An array of GraphQL AST Nodes corresponding to this error.\n   */\n\n  /**\n   * The source GraphQL document for the first location of this error.\n   *\n   * Note that if this Error represents more than one node, the source may not\n   * represent nodes after the first node.\n   */\n\n  /**\n   * An array of character offsets within the source GraphQL document\n   * which correspond to this error.\n   */\n\n  /**\n   * The original error thrown from a field resolver during execution.\n   */\n\n  /**\n   * Extension fields to add to the formatted error.\n   */\n\n  /**\n   * @deprecated Please use the `GraphQLErrorOptions` constructor overload instead.\n   */\n  constructor(message, ...rawArgs) {\n    var _this$nodes, _nodeLocations$, _ref;\n\n    const { nodes, source, positions, path, originalError, extensions } =\n      toNormalizedOptions(rawArgs);\n    super(message);\n    this.name = 'GraphQLError';\n    this.path = path !== null && path !== void 0 ? path : undefined;\n    this.originalError =\n      originalError !== null && originalError !== void 0\n        ? originalError\n        : undefined; // Compute list of blame nodes.\n\n    this.nodes = undefinedIfEmpty(\n      Array.isArray(nodes) ? nodes : nodes ? [nodes] : undefined,\n    );\n    const nodeLocations = undefinedIfEmpty(\n      (_this$nodes = this.nodes) === null || _this$nodes === void 0\n        ? void 0\n        : _this$nodes.map((node) => node.loc).filter((loc) => loc != null),\n    ); // Compute locations in the source for the given nodes/positions.\n\n    this.source =\n      source !== null && source !== void 0\n        ? source\n        : nodeLocations === null || nodeLocations === void 0\n        ? void 0\n        : (_nodeLocations$ = nodeLocations[0]) === null ||\n          _nodeLocations$ === void 0\n        ? void 0\n        : _nodeLocations$.source;\n    this.positions =\n      positions !== null && positions !== void 0\n        ? positions\n        : nodeLocations === null || nodeLocations === void 0\n        ? void 0\n        : nodeLocations.map((loc) => loc.start);\n    this.locations =\n      positions && source\n        ? positions.map((pos) => (0, _location.getLocation)(source, pos))\n        : nodeLocations === null || nodeLocations === void 0\n        ? void 0\n        : nodeLocations.map((loc) =>\n            (0, _location.getLocation)(loc.source, loc.start),\n          );\n    const originalExtensions = (0, _isObjectLike.isObjectLike)(\n      originalError === null || originalError === void 0\n        ? void 0\n        : originalError.extensions,\n    )\n      ? originalError === null || originalError === void 0\n        ? void 0\n        : originalError.extensions\n      : undefined;\n    this.extensions =\n      (_ref =\n        extensions !== null && extensions !== void 0\n          ? extensions\n          : originalExtensions) !== null && _ref !== void 0\n        ? _ref\n        : Object.create(null); // Only properties prescribed by the spec should be enumerable.\n    // Keep the rest as non-enumerable.\n\n    Object.defineProperties(this, {\n      message: {\n        writable: true,\n        enumerable: true,\n      },\n      name: {\n        enumerable: false,\n      },\n      nodes: {\n        enumerable: false,\n      },\n      source: {\n        enumerable: false,\n      },\n      positions: {\n        enumerable: false,\n      },\n      originalError: {\n        enumerable: false,\n      },\n    }); // Include (non-enumerable) stack trace.\n\n    /* c8 ignore start */\n    // FIXME: https://github.com/graphql/graphql-js/issues/2317\n\n    if (\n      originalError !== null &&\n      originalError !== void 0 &&\n      originalError.stack\n    ) {\n      Object.defineProperty(this, 'stack', {\n        value: originalError.stack,\n        writable: true,\n        configurable: true,\n      });\n    } else if (Error.captureStackTrace) {\n      Error.captureStackTrace(this, GraphQLError);\n    } else {\n      Object.defineProperty(this, 'stack', {\n        value: Error().stack,\n        writable: true,\n        configurable: true,\n      });\n    }\n    /* c8 ignore stop */\n  }\n\n  get [Symbol.toStringTag]() {\n    return 'GraphQLError';\n  }\n\n  toString() {\n    let output = this.message;\n\n    if (this.nodes) {\n      for (const node of this.nodes) {\n        if (node.loc) {\n          output += '\\n\\n' + (0, _printLocation.printLocation)(node.loc);\n        }\n      }\n    } else if (this.source && this.locations) {\n      for (const location of this.locations) {\n        output +=\n          '\\n\\n' +\n          (0, _printLocation.printSourceLocation)(this.source, location);\n      }\n    }\n\n    return output;\n  }\n\n  toJSON() {\n    const formattedError = {\n      message: this.message,\n    };\n\n    if (this.locations != null) {\n      formattedError.locations = this.locations;\n    }\n\n    if (this.path != null) {\n      formattedError.path = this.path;\n    }\n\n    if (this.extensions != null && Object.keys(this.extensions).length > 0) {\n      formattedError.extensions = this.extensions;\n    }\n\n    return formattedError;\n  }\n}\n\nexports.GraphQLError = GraphQLError;\n\nfunction undefinedIfEmpty(array) {\n  return array === undefined || array.length === 0 ? undefined : array;\n}\n/**\n * See: https://spec.graphql.org/draft/#sec-Errors\n */\n\n/**\n * Prints a GraphQLError to a string, representing useful location information\n * about the error's position in the source.\n *\n * @deprecated Please use `error.toString` instead. Will be removed in v17\n */\nfunction printError(error) {\n  return error.toString();\n}\n/**\n * Given a GraphQLError, format it according to the rules described by the\n * Response Format, Errors section of the GraphQL Specification.\n *\n * @deprecated Please use `error.toJSON` instead. Will be removed in v17\n */\n\nfunction formatError(error) {\n  return error.toJSON();\n}\n/language/characterClasses.d.ts\u0003/**\n * ```\n * WhiteSpace ::\n *   - \"Horizontal Tab (U+0009)\"\n *   - \"Space (U+0020)\"\n * ```\n * @internal\n */\nexport declare function isWhiteSpace(code: number): boolean;\n/**\n * ```\n * Digit :: one of\n *   - `0` `1` `2` `3` `4` `5` `6` `7` `8` `9`\n * ```\n * @internal\n */\nexport declare function isDigit(code: number): boolean;\n/**\n * ```\n * Letter :: one of\n *   - `A` `B` `C` `D` `E` `F` `G` `H` `I` `J` `K` `L` `M`\n *   - `N` `O` `P` `Q` `R` `S` `T` `U` `V` `W` `X` `Y` `Z`\n *   - `a` `b` `c` `d` `e` `f` `g` `h` `i` `j` `k` `l` `m`\n *   - `n` `o` `p` `q` `r` `s` `t` `u` `v` `w` `x` `y` `z`\n * ```\n * @internal\n */\nexport declare function isLetter(code: number): boolean;\n/**\n * ```\n * NameStart ::\n *   - Letter\n *   - `_`\n * ```\n * @internal\n */\nexport declare function isNameStart(code: number): boolean;\n/**\n * ```\n * NameContinue ::\n *   - Letter\n *   - Digit\n *   - `_`\n * ```\n * @internal\n */\nexport declare function isNameContinue(code: number): boolean;\n/index.mjs\u001f4/**\n * GraphQL.js provides a reference implementation for the GraphQL specification\n * but is also a useful utility for operating on GraphQL files and building\n * sophisticated tools.\n *\n * This primary module exports a general purpose function for fulfilling all\n * steps of the GraphQL specification in a single operation, but also includes\n * utilities for every part of the GraphQL specification:\n *\n *   - Parsing the GraphQL language.\n *   - Building a GraphQL type schema.\n *   - Validating a GraphQL request against a type schema.\n *   - Executing a GraphQL request against a type schema.\n *\n * This also includes utility functions for operating on GraphQL types and\n * GraphQL documents to facilitate building tools.\n *\n * You may also import from each sub-directory directly. For example, the\n * following two import statements are equivalent:\n *\n * ```ts\n * import { parse } from 'graphql';\n * import { parse } from 'graphql/language';\n * ```\n *\n * @packageDocumentation\n */\n// The GraphQL.js version info.\nexport { version, versionInfo } from './version.mjs'; // The primary entry point into fulfilling a GraphQL request.\n\nexport { graphql, graphqlSync } from './graphql.mjs'; // Create and operate on GraphQL type definitions and schema.\n\nexport {\n  resolveObjMapThunk,\n  resolveReadonlyArrayThunk, // Definitions\n  GraphQLSchema,\n  GraphQLDirective,\n  GraphQLScalarType,\n  GraphQLObjectType,\n  GraphQLInterfaceType,\n  GraphQLUnionType,\n  GraphQLEnumType,\n  GraphQLInputObjectType,\n  GraphQLList,\n  GraphQLNonNull, // Standard GraphQL Scalars\n  specifiedScalarTypes,\n  GraphQLInt,\n  GraphQLFloat,\n  GraphQLString,\n  GraphQLBoolean,\n  GraphQLID, // Int boundaries constants\n  GRAPHQL_MAX_INT,\n  GRAPHQL_MIN_INT, // Built-in Directives defined by the Spec\n  specifiedDirectives,\n  GraphQLIncludeDirective,\n  GraphQLSkipDirective,\n  GraphQLDeprecatedDirective,\n  GraphQLSpecifiedByDirective, // \"Enum\" of Type Kinds\n  TypeKind, // Constant Deprecation Reason\n  DEFAULT_DEPRECATION_REASON, // GraphQL Types for introspection.\n  introspectionTypes,\n  __Schema,\n  __Directive,\n  __DirectiveLocation,\n  __Type,\n  __Field,\n  __InputValue,\n  __EnumValue,\n  __TypeKind, // Meta-field definitions.\n  SchemaMetaFieldDef,\n  TypeMetaFieldDef,\n  TypeNameMetaFieldDef, // Predicates\n  isSchema,\n  isDirective,\n  isType,\n  isScalarType,\n  isObjectType,\n  isInterfaceType,\n  isUnionType,\n  isEnumType,\n  isInputObjectType,\n  isListType,\n  isNonNullType,\n  isInputType,\n  isOutputType,\n  isLeafType,\n  isCompositeType,\n  isAbstractType,\n  isWrappingType,\n  isNullableType,\n  isNamedType,\n  isRequiredArgument,\n  isRequiredInputField,\n  isSpecifiedScalarType,\n  isIntrospectionType,\n  isSpecifiedDirective, // Assertions\n  assertSchema,\n  assertDirective,\n  assertType,\n  assertScalarType,\n  assertObjectType,\n  assertInterfaceType,\n  assertUnionType,\n  assertEnumType,\n  assertInputObjectType,\n  assertListType,\n  assertNonNullType,\n  assertInputType,\n  assertOutputType,\n  assertLeafType,\n  assertCompositeType,\n  assertAbstractType,\n  assertWrappingType,\n  assertNullableType,\n  assertNamedType, // Un-modifiers\n  getNullableType,\n  getNamedType, // Validate GraphQL schema.\n  validateSchema,\n  assertValidSchema, // Upholds the spec rules about naming.\n  assertName,\n  assertEnumValueName,\n} from './type/index.mjs';\n// Parse and operate on GraphQL language source files.\nexport {\n  Token,\n  Source,\n  Location,\n  OperationTypeNode,\n  getLocation, // Print source location.\n  printLocation,\n  printSourceLocation, // Lex\n  Lexer,\n  TokenKind, // Parse\n  parse,\n  parseValue,\n  parseConstValue,\n  parseType, // Print\n  print, // Visit\n  visit,\n  visitInParallel,\n  getVisitFn,\n  getEnterLeaveForKind,\n  BREAK,\n  Kind,\n  DirectiveLocation, // Predicates\n  isDefinitionNode,\n  isExecutableDefinitionNode,\n  isSelectionNode,\n  isValueNode,\n  isConstValueNode,\n  isTypeNode,\n  isTypeSystemDefinitionNode,\n  isTypeDefinitionNode,\n  isTypeSystemExtensionNode,\n  isTypeExtensionNode,\n} from './language/index.mjs';\n// Execute GraphQL queries.\nexport {\n  execute,\n  executeSync,\n  defaultFieldResolver,\n  defaultTypeResolver,\n  responsePathAsArray,\n  getArgumentValues,\n  getVariableValues,\n  getDirectiveValues,\n  subscribe,\n  createSourceEventStream,\n} from './execution/index.mjs';\n// Validate GraphQL documents.\nexport {\n  validate,\n  ValidationContext, // All validation rules in the GraphQL Specification.\n  specifiedRules, // Individual validation rules.\n  ExecutableDefinitionsRule,\n  FieldsOnCorrectTypeRule,\n  FragmentsOnCompositeTypesRule,\n  KnownArgumentNamesRule,\n  KnownDirectivesRule,\n  KnownFragmentNamesRule,\n  KnownTypeNamesRule,\n  LoneAnonymousOperationRule,\n  NoFragmentCyclesRule,\n  NoUndefinedVariablesRule,\n  NoUnusedFragmentsRule,\n  NoUnusedVariablesRule,\n  OverlappingFieldsCanBeMergedRule,\n  PossibleFragmentSpreadsRule,\n  ProvidedRequiredArgumentsRule,\n  ScalarLeafsRule,\n  SingleFieldSubscriptionsRule,\n  UniqueArgumentNamesRule,\n  UniqueDirectivesPerLocationRule,\n  UniqueFragmentNamesRule,\n  UniqueInputFieldNamesRule,\n  UniqueOperationNamesRule,\n  UniqueVariableNamesRule,\n  ValuesOfCorrectTypeRule,\n  VariablesAreInputTypesRule,\n  VariablesInAllowedPositionRule, // SDL-specific validation rules\n  LoneSchemaDefinitionRule,\n  UniqueOperationTypesRule,\n  UniqueTypeNamesRule,\n  UniqueEnumValueNamesRule,\n  UniqueFieldDefinitionNamesRule,\n  UniqueArgumentDefinitionNamesRule,\n  UniqueDirectiveNamesRule,\n  PossibleTypeExtensionsRule, // Custom validation rules\n  NoDeprecatedCustomRule,\n  NoSchemaIntrospectionCustomRule,\n} from './validation/index.mjs';\n// Create, format, and print GraphQL errors.\nexport {\n  GraphQLError,\n  syntaxError,\n  locatedError,\n  printError,\n  formatError,\n} from './error/index.mjs';\n// Utilities for operating on GraphQL type schema and parsed sources.\nexport {\n  // Produce the GraphQL query recommended for a full schema introspection.\n  // Accepts optional IntrospectionOptions.\n  getIntrospectionQuery, // Gets the target Operation from a Document.\n  getOperationAST, // Gets the Type for the target Operation AST.\n  getOperationRootType, // Convert a GraphQLSchema to an IntrospectionQuery.\n  introspectionFromSchema, // Build a GraphQLSchema from an introspection result.\n  buildClientSchema, // Build a GraphQLSchema from a parsed GraphQL Schema language AST.\n  buildASTSchema, // Build a GraphQLSchema from a GraphQL schema language document.\n  buildSchema, // Extends an existing GraphQLSchema from a parsed GraphQL Schema language AST.\n  extendSchema, // Sort a GraphQLSchema.\n  lexicographicSortSchema, // Print a GraphQLSchema to GraphQL Schema language.\n  printSchema, // Print a GraphQLType to GraphQL Schema language.\n  printType, // Prints the built-in introspection schema in the Schema Language format.\n  printIntrospectionSchema, // Create a GraphQLType from a GraphQL language AST.\n  typeFromAST, // Create a JavaScript value from a GraphQL language AST with a Type.\n  valueFromAST, // Create a JavaScript value from a GraphQL language AST without a Type.\n  valueFromASTUntyped, // Create a GraphQL language AST from a JavaScript value.\n  astFromValue, // A helper to use within recursive-descent visitors which need to be aware of the GraphQL type system.\n  TypeInfo,\n  visitWithTypeInfo, // Coerces a JavaScript value to a GraphQL type, or produces errors.\n  coerceInputValue, // Concatenates multiple AST together.\n  concatAST, // Separates an AST into an AST per Operation.\n  separateOperations, // Strips characters that are not significant to the validity or execution of a GraphQL document.\n  stripIgnoredCharacters, // Comparators for types\n  isEqualType,\n  isTypeSubTypeOf,\n  doTypesOverlap, // Asserts a string is a valid GraphQL name.\n  assertValidName, // Determine if a string is a valid GraphQL name.\n  isValidNameError, // Compares two GraphQLSchemas and detects breaking changes.\n  BreakingChangeType,\n  DangerousChangeType,\n  findBreakingChanges,\n  findDangerousChanges,\n} from './utilities/index.mjs';\n8/validation/rules/UniqueArgumentDefinitionNamesRule.d.ts\u0001import type { ASTVisitor } from '../../language/visitor';\nimport type { SDLValidationContext } from '../ValidationContext';\n/**\n * Unique argument definition names\n *\n * A GraphQL Object or Interface type is only valid if all its fields have uniquely named arguments.\n * A GraphQL Directive is only valid if all its arguments are uniquely named.\n */\nexport declare function UniqueArgumentDefinitionNamesRule(\n  context: SDLValidationContext,\n): ASTVisitor;\n//validation/rules/PossibleTypeExtensionsRule.js\u0012d'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.PossibleTypeExtensionsRule = PossibleTypeExtensionsRule;\n\nvar _didYouMean = require('../../jsutils/didYouMean.js');\n\nvar _inspect = require('../../jsutils/inspect.js');\n\nvar _invariant = require('../../jsutils/invariant.js');\n\nvar _suggestionList = require('../../jsutils/suggestionList.js');\n\nvar _GraphQLError = require('../../error/GraphQLError.js');\n\nvar _kinds = require('../../language/kinds.js');\n\nvar _predicates = require('../../language/predicates.js');\n\nvar _definition = require('../../type/definition.js');\n\n/**\n * Possible type extension\n *\n * A type extension is only valid if the type is defined and has the same kind.\n */\nfunction PossibleTypeExtensionsRule(context) {\n  const schema = context.getSchema();\n  const definedTypes = Object.create(null);\n\n  for (const def of context.getDocument().definitions) {\n    if ((0, _predicates.isTypeDefinitionNode)(def)) {\n      definedTypes[def.name.value] = def;\n    }\n  }\n\n  return {\n    ScalarTypeExtension: checkExtension,\n    ObjectTypeExtension: checkExtension,\n    InterfaceTypeExtension: checkExtension,\n    UnionTypeExtension: checkExtension,\n    EnumTypeExtension: checkExtension,\n    InputObjectTypeExtension: checkExtension,\n  };\n\n  function checkExtension(node) {\n    const typeName = node.name.value;\n    const defNode = definedTypes[typeName];\n    const existingType =\n      schema === null || schema === void 0 ? void 0 : schema.getType(typeName);\n    let expectedKind;\n\n    if (defNode) {\n      expectedKind = defKindToExtKind[defNode.kind];\n    } else if (existingType) {\n      expectedKind = typeToExtKind(existingType);\n    }\n\n    if (expectedKind) {\n      if (expectedKind !== node.kind) {\n        const kindStr = extensionKindToTypeName(node.kind);\n        context.reportError(\n          new _GraphQLError.GraphQLError(\n            `Cannot extend non-${kindStr} type \"${typeName}\".`,\n            {\n              nodes: defNode ? [defNode, node] : node,\n            },\n          ),\n        );\n      }\n    } else {\n      const allTypeNames = Object.keys({\n        ...definedTypes,\n        ...(schema === null || schema === void 0\n          ? void 0\n          : schema.getTypeMap()),\n      });\n      const suggestedTypes = (0, _suggestionList.suggestionList)(\n        typeName,\n        allTypeNames,\n      );\n      context.reportError(\n        new _GraphQLError.GraphQLError(\n          `Cannot extend type \"${typeName}\" because it is not defined.` +\n            (0, _didYouMean.didYouMean)(suggestedTypes),\n          {\n            nodes: node.name,\n          },\n        ),\n      );\n    }\n  }\n}\n\nconst defKindToExtKind = {\n  [_kinds.Kind.SCALAR_TYPE_DEFINITION]: _kinds.Kind.SCALAR_TYPE_EXTENSION,\n  [_kinds.Kind.OBJECT_TYPE_DEFINITION]: _kinds.Kind.OBJECT_TYPE_EXTENSION,\n  [_kinds.Kind.INTERFACE_TYPE_DEFINITION]: _kinds.Kind.INTERFACE_TYPE_EXTENSION,\n  [_kinds.Kind.UNION_TYPE_DEFINITION]: _kinds.Kind.UNION_TYPE_EXTENSION,\n  [_kinds.Kind.ENUM_TYPE_DEFINITION]: _kinds.Kind.ENUM_TYPE_EXTENSION,\n  [_kinds.Kind.INPUT_OBJECT_TYPE_DEFINITION]:\n    _kinds.Kind.INPUT_OBJECT_TYPE_EXTENSION,\n};\n\nfunction typeToExtKind(type) {\n  if ((0, _definition.isScalarType)(type)) {\n    return _kinds.Kind.SCALAR_TYPE_EXTENSION;\n  }\n\n  if ((0, _definition.isObjectType)(type)) {\n    return _kinds.Kind.OBJECT_TYPE_EXTENSION;\n  }\n\n  if ((0, _definition.isInterfaceType)(type)) {\n    return _kinds.Kind.INTERFACE_TYPE_EXTENSION;\n  }\n\n  if ((0, _definition.isUnionType)(type)) {\n    return _kinds.Kind.UNION_TYPE_EXTENSION;\n  }\n\n  if ((0, _definition.isEnumType)(type)) {\n    return _kinds.Kind.ENUM_TYPE_EXTENSION;\n  }\n\n  if ((0, _definition.isInputObjectType)(type)) {\n    return _kinds.Kind.INPUT_OBJECT_TYPE_EXTENSION;\n  }\n  /* c8 ignore next 3 */\n  // Not reachable. All possible types have been considered\n\n  false ||\n    (0, _invariant.invariant)(\n      false,\n      'Unexpected type: ' + (0, _inspect.inspect)(type),\n    );\n}\n\nfunction extensionKindToTypeName(kind) {\n  switch (kind) {\n    case _kinds.Kind.SCALAR_TYPE_EXTENSION:\n      return 'scalar';\n\n    case _kinds.Kind.OBJECT_TYPE_EXTENSION:\n      return 'object';\n\n    case _kinds.Kind.INTERFACE_TYPE_EXTENSION:\n      return 'interface';\n\n    case _kinds.Kind.UNION_TYPE_EXTENSION:\n      return 'union';\n\n    case _kinds.Kind.ENUM_TYPE_EXTENSION:\n      return 'enum';\n\n    case _kinds.Kind.INPUT_OBJECT_TYPE_EXTENSION:\n      return 'input object';\n    // Not reachable. All possible types have been considered\n\n    /* c8 ignore next */\n\n    default:\n      false ||\n        (0, _invariant.invariant)(\n          false,\n          'Unexpected kind: ' + (0, _inspect.inspect)(kind),\n        );\n  }\n}\n7/validation/rules/OverlappingFieldsCanBeMergedRule.d.ts\u0001import type { ASTVisitor } from '../../language/visitor';\nimport type { ValidationContext } from '../ValidationContext';\n/**\n * Overlapping fields can be merged\n *\n * A selection set is only valid if all fields (including spreading any\n * fragments) either correspond to distinct response names or can be merged\n * without ambiguity.\n *\n * See https://spec.graphql.org/draft/#sec-Field-Selection-Merging\n */\nexport declare function OverlappingFieldsCanBeMergedRule(\n  context: ValidationContext,\n): ASTVisitor;\n/jsutils/PromiseOrValue.jsQ'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\n/type/directives.js\u001a$'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.GraphQLSpecifiedByDirective =\n  exports.GraphQLSkipDirective =\n  exports.GraphQLIncludeDirective =\n  exports.GraphQLDirective =\n  exports.GraphQLDeprecatedDirective =\n  exports.DEFAULT_DEPRECATION_REASON =\n    void 0;\nexports.assertDirective = assertDirective;\nexports.isDirective = isDirective;\nexports.isSpecifiedDirective = isSpecifiedDirective;\nexports.specifiedDirectives = void 0;\n\nvar _devAssert = require('../jsutils/devAssert.js');\n\nvar _inspect = require('../jsutils/inspect.js');\n\nvar _instanceOf = require('../jsutils/instanceOf.js');\n\nvar _isObjectLike = require('../jsutils/isObjectLike.js');\n\nvar _toObjMap = require('../jsutils/toObjMap.js');\n\nvar _directiveLocation = require('../language/directiveLocation.js');\n\nvar _assertName = require('./assertName.js');\n\nvar _definition = require('./definition.js');\n\nvar _scalars = require('./scalars.js');\n\n/**\n * Test if the given value is a GraphQL directive.\n */\nfunction isDirective(directive) {\n  return (0, _instanceOf.instanceOf)(directive, GraphQLDirective);\n}\n\nfunction assertDirective(directive) {\n  if (!isDirective(directive)) {\n    throw new Error(\n      `Expected ${(0, _inspect.inspect)(directive)} to be a GraphQL directive.`,\n    );\n  }\n\n  return directive;\n}\n/**\n * Custom extensions\n *\n * @remarks\n * Use a unique identifier name for your extension, for example the name of\n * your library or project. Do not use a shortened identifier as this increases\n * the risk of conflicts. We recommend you add at most one extension field,\n * an object which can contain all the values you need.\n */\n\n/**\n * Directives are used by the GraphQL runtime as a way of modifying execution\n * behavior. Type system creators will usually not create these directly.\n */\nclass GraphQLDirective {\n  constructor(config) {\n    var _config$isRepeatable, _config$args;\n\n    this.name = (0, _assertName.assertName)(config.name);\n    this.description = config.description;\n    this.locations = config.locations;\n    this.isRepeatable =\n      (_config$isRepeatable = config.isRepeatable) !== null &&\n      _config$isRepeatable !== void 0\n        ? _config$isRepeatable\n        : false;\n    this.extensions = (0, _toObjMap.toObjMap)(config.extensions);\n    this.astNode = config.astNode;\n    Array.isArray(config.locations) ||\n      (0, _devAssert.devAssert)(\n        false,\n        `@${config.name} locations must be an Array.`,\n      );\n    const args =\n      (_config$args = config.args) !== null && _config$args !== void 0\n        ? _config$args\n        : {};\n    ((0, _isObjectLike.isObjectLike)(args) && !Array.isArray(args)) ||\n      (0, _devAssert.devAssert)(\n        false,\n        `@${config.name} args must be an object with argument names as keys.`,\n      );\n    this.args = (0, _definition.defineArguments)(args);\n  }\n\n  get [Symbol.toStringTag]() {\n    return 'GraphQLDirective';\n  }\n\n  toConfig() {\n    return {\n      name: this.name,\n      description: this.description,\n      locations: this.locations,\n      args: (0, _definition.argsToArgsConfig)(this.args),\n      isRepeatable: this.isRepeatable,\n      extensions: this.extensions,\n      astNode: this.astNode,\n    };\n  }\n\n  toString() {\n    return '@' + this.name;\n  }\n\n  toJSON() {\n    return this.toString();\n  }\n}\n\nexports.GraphQLDirective = GraphQLDirective;\n\n/**\n * Used to conditionally include fields or fragments.\n */\nconst GraphQLIncludeDirective = new GraphQLDirective({\n  name: 'include',\n  description:\n    'Directs the executor to include this field or fragment only when the `if` argument is true.',\n  locations: [\n    _directiveLocation.DirectiveLocation.FIELD,\n    _directiveLocation.DirectiveLocation.FRAGMENT_SPREAD,\n    _directiveLocation.DirectiveLocation.INLINE_FRAGMENT,\n  ],\n  args: {\n    if: {\n      type: new _definition.GraphQLNonNull(_scalars.GraphQLBoolean),\n      description: 'Included when true.',\n    },\n  },\n});\n/**\n * Used to conditionally skip (exclude) fields or fragments.\n */\n\nexports.GraphQLIncludeDirective = GraphQLIncludeDirective;\nconst GraphQLSkipDirective = new GraphQLDirective({\n  name: 'skip',\n  description:\n    'Directs the executor to skip this field or fragment when the `if` argument is true.',\n  locations: [\n    _directiveLocation.DirectiveLocation.FIELD,\n    _directiveLocation.DirectiveLocation.FRAGMENT_SPREAD,\n    _directiveLocation.DirectiveLocation.INLINE_FRAGMENT,\n  ],\n  args: {\n    if: {\n      type: new _definition.GraphQLNonNull(_scalars.GraphQLBoolean),\n      description: 'Skipped when true.',\n    },\n  },\n});\n/**\n * Constant string used for default reason for a deprecation.\n */\n\nexports.GraphQLSkipDirective = GraphQLSkipDirective;\nconst DEFAULT_DEPRECATION_REASON = 'No longer supported';\n/**\n * Used to declare element of a GraphQL schema as deprecated.\n */\n\nexports.DEFAULT_DEPRECATION_REASON = DEFAULT_DEPRECATION_REASON;\nconst GraphQLDeprecatedDirective = new GraphQLDirective({\n  name: 'deprecated',\n  description: 'Marks an element of a GraphQL schema as no longer supported.',\n  locations: [\n    _directiveLocation.DirectiveLocation.FIELD_DEFINITION,\n    _directiveLocation.DirectiveLocation.ARGUMENT_DEFINITION,\n    _directiveLocation.DirectiveLocation.INPUT_FIELD_DEFINITION,\n    _directiveLocation.DirectiveLocation.ENUM_VALUE,\n  ],\n  args: {\n    reason: {\n      type: _scalars.GraphQLString,\n      description:\n        'Explains why this element was deprecated, usually also including a suggestion for how to access supported similar data. Formatted using the Markdown syntax, as specified by [CommonMark](https://commonmark.org/).',\n      defaultValue: DEFAULT_DEPRECATION_REASON,\n    },\n  },\n});\n/**\n * Used to provide a URL for specifying the behavior of custom scalar definitions.\n */\n\nexports.GraphQLDeprecatedDirective = GraphQLDeprecatedDirective;\nconst GraphQLSpecifiedByDirective = new GraphQLDirective({\n  name: 'specifiedBy',\n  description: 'Exposes a URL that specifies the behavior of this scalar.',\n  locations: [_directiveLocation.DirectiveLocation.SCALAR],\n  args: {\n    url: {\n      type: new _definition.GraphQLNonNull(_scalars.GraphQLString),\n      description: 'The URL that specifies the behavior of this scalar.',\n    },\n  },\n});\n/**\n * The full list of specified directives.\n */\n\nexports.GraphQLSpecifiedByDirective = GraphQLSpecifiedByDirective;\nconst specifiedDirectives = Object.freeze([\n  GraphQLIncludeDirective,\n  GraphQLSkipDirective,\n  GraphQLDeprecatedDirective,\n  GraphQLSpecifiedByDirective,\n]);\nexports.specifiedDirectives = specifiedDirectives;\n\nfunction isSpecifiedDirective(directive) {\n  return specifiedDirectives.some(({ name }) => name === directive.name);\n}\n&/validation/rules/ScalarLeafsRule.d.ts\u0001\\import type { ASTVisitor } from '../../language/visitor';\nimport type { ValidationContext } from '../ValidationContext';\n/**\n * Scalar leafs\n *\n * A GraphQL document is valid only if all leaf fields (fields without\n * sub selections) are of scalar or enum types.\n */\nexport declare function ScalarLeafsRule(context: ValidationContext): ASTVisitor;\n./validation/rules/FieldsOnCorrectTypeRule.d.ts\u0001import type { ASTVisitor } from '../../language/visitor';\nimport type { ValidationContext } from '../ValidationContext';\n/**\n * Fields on correct type\n *\n * A GraphQL document is only valid if all fields selected are defined by the\n * parent type, or are an allowed meta field such as __typename.\n *\n * See https://spec.graphql.org/draft/#sec-Field-Selections\n */\nexport declare function FieldsOnCorrectTypeRule(\n  context: ValidationContext,\n): ASTVisitor;\n/language/printLocation.mjs\bimport { getLocation } from './location.mjs';\n\n/**\n * Render a helpful description of the location in the GraphQL Source document.\n */\nexport function printLocation(location) {\n  return printSourceLocation(\n    location.source,\n    getLocation(location.source, location.start),\n  );\n}\n/**\n * Render a helpful description of the location in the GraphQL Source document.\n */\n\nexport function printSourceLocation(source, sourceLocation) {\n  const firstLineColumnOffset = source.locationOffset.column - 1;\n  const body = ''.padStart(firstLineColumnOffset) + source.body;\n  const lineIndex = sourceLocation.line - 1;\n  const lineOffset = source.locationOffset.line - 1;\n  const lineNum = sourceLocation.line + lineOffset;\n  const columnOffset = sourceLocation.line === 1 ? firstLineColumnOffset : 0;\n  const columnNum = sourceLocation.column + columnOffset;\n  const locationStr = `${source.name}:${lineNum}:${columnNum}\\n`;\n  const lines = body.split(/\\r\\n|[\\n\\r]/g);\n  const locationLine = lines[lineIndex]; // Special case for minified documents\n\n  if (locationLine.length > 120) {\n    const subLineIndex = Math.floor(columnNum / 80);\n    const subLineColumnNum = columnNum % 80;\n    const subLines = [];\n\n    for (let i = 0; i < locationLine.length; i += 80) {\n      subLines.push(locationLine.slice(i, i + 80));\n    }\n\n    return (\n      locationStr +\n      printPrefixedLines([\n        [`${lineNum} |`, subLines[0]],\n        ...subLines.slice(1, subLineIndex + 1).map((subLine) => ['|', subLine]),\n        ['|', '^'.padStart(subLineColumnNum)],\n        ['|', subLines[subLineIndex + 1]],\n      ])\n    );\n  }\n\n  return (\n    locationStr +\n    printPrefixedLines([\n      // Lines specified like this: [\"prefix\", \"string\"],\n      [`${lineNum - 1} |`, lines[lineIndex - 1]],\n      [`${lineNum} |`, locationLine],\n      ['|', '^'.padStart(columnNum)],\n      [`${lineNum + 1} |`, lines[lineIndex + 1]],\n    ])\n  );\n}\n\nfunction printPrefixedLines(lines) {\n  const existingLines = lines.filter(([_, line]) => line !== undefined);\n  const padLen = Math.max(...existingLines.map(([prefix]) => prefix.length));\n  return existingLines\n    .map(([prefix, line]) => prefix.padStart(padLen) + (line ? ' ' + line : ''))\n    .join('\\n');\n}\n/jsutils/memoize3.mjs\u0002/**\n * Memoizes the provided three-argument function.\n */\nexport function memoize3(fn) {\n  let cache0;\n  return function memoized(a1, a2, a3) {\n    if (cache0 === undefined) {\n      cache0 = new WeakMap();\n    }\n\n    let cache1 = cache0.get(a1);\n\n    if (cache1 === undefined) {\n      cache1 = new WeakMap();\n      cache0.set(a1, cache1);\n    }\n\n    let cache2 = cache1.get(a2);\n\n    if (cache2 === undefined) {\n      cache2 = new WeakMap();\n      cache1.set(a2, cache2);\n    }\n\n    let fnResult = cache2.get(a3);\n\n    if (fnResult === undefined) {\n      fnResult = fn(a1, a2, a3);\n      cache2.set(a3, fnResult);\n    }\n\n    return fnResult;\n  };\n}\n/type/introspection.mjsC\u0013import { inspect } from '../jsutils/inspect.mjs';\nimport { invariant } from '../jsutils/invariant.mjs';\nimport { DirectiveLocation } from '../language/directiveLocation.mjs';\nimport { print } from '../language/printer.mjs';\nimport { astFromValue } from '../utilities/astFromValue.mjs';\nimport {\n  GraphQLEnumType,\n  GraphQLList,\n  GraphQLNonNull,\n  GraphQLObjectType,\n  isAbstractType,\n  isEnumType,\n  isInputObjectType,\n  isInterfaceType,\n  isListType,\n  isNonNullType,\n  isObjectType,\n  isScalarType,\n  isUnionType,\n} from './definition.mjs';\nimport { GraphQLBoolean, GraphQLString } from './scalars.mjs';\nexport const __Schema = new GraphQLObjectType({\n  name: '__Schema',\n  description:\n    'A GraphQL Schema defines the capabilities of a GraphQL server. It exposes all available types and directives on the server, as well as the entry points for query, mutation, and subscription operations.',\n  fields: () => ({\n    description: {\n      type: GraphQLString,\n      resolve: (schema) => schema.description,\n    },\n    types: {\n      description: 'A list of all types supported by this server.',\n      type: new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(__Type))),\n\n      resolve(schema) {\n        return Object.values(schema.getTypeMap());\n      },\n    },\n    queryType: {\n      description: 'The type that query operations will be rooted at.',\n      type: new GraphQLNonNull(__Type),\n      resolve: (schema) => schema.getQueryType(),\n    },\n    mutationType: {\n      description:\n        'If this server supports mutation, the type that mutation operations will be rooted at.',\n      type: __Type,\n      resolve: (schema) => schema.getMutationType(),\n    },\n    subscriptionType: {\n      description:\n        'If this server support subscription, the type that subscription operations will be rooted at.',\n      type: __Type,\n      resolve: (schema) => schema.getSubscriptionType(),\n    },\n    directives: {\n      description: 'A list of all directives supported by this server.',\n      type: new GraphQLNonNull(\n        new GraphQLList(new GraphQLNonNull(__Directive)),\n      ),\n      resolve: (schema) => schema.getDirectives(),\n    },\n  }),\n});\nexport const __Directive = new GraphQLObjectType({\n  name: '__Directive',\n  description:\n    \"A Directive provides a way to describe alternate runtime execution and type validation behavior in a GraphQL document.\\n\\nIn some cases, you need to provide options to alter GraphQL's execution behavior in ways field arguments will not suffice, such as conditionally including or skipping a field. Directives provide this by describing additional information to the executor.\",\n  fields: () => ({\n    name: {\n      type: new GraphQLNonNull(GraphQLString),\n      resolve: (directive) => directive.name,\n    },\n    description: {\n      type: GraphQLString,\n      resolve: (directive) => directive.description,\n    },\n    isRepeatable: {\n      type: new GraphQLNonNull(GraphQLBoolean),\n      resolve: (directive) => directive.isRepeatable,\n    },\n    locations: {\n      type: new GraphQLNonNull(\n        new GraphQLList(new GraphQLNonNull(__DirectiveLocation)),\n      ),\n      resolve: (directive) => directive.locations,\n    },\n    args: {\n      type: new GraphQLNonNull(\n        new GraphQLList(new GraphQLNonNull(__InputValue)),\n      ),\n      args: {\n        includeDeprecated: {\n          type: GraphQLBoolean,\n          defaultValue: false,\n        },\n      },\n\n      resolve(field, { includeDeprecated }) {\n        return includeDeprecated\n          ? field.args\n          : field.args.filter((arg) => arg.deprecationReason == null);\n      },\n    },\n  }),\n});\nexport const __DirectiveLocation = new GraphQLEnumType({\n  name: '__DirectiveLocation',\n  description:\n    'A Directive can be adjacent to many parts of the GraphQL language, a __DirectiveLocation describes one such possible adjacencies.',\n  values: {\n    QUERY: {\n      value: DirectiveLocation.QUERY,\n      description: 'Location adjacent to a query operation.',\n    },\n    MUTATION: {\n      value: DirectiveLocation.MUTATION,\n      description: 'Location adjacent to a mutation operation.',\n    },\n    SUBSCRIPTION: {\n      value: DirectiveLocation.SUBSCRIPTION,\n      description: 'Location adjacent to a subscription operation.',\n    },\n    FIELD: {\n      value: DirectiveLocation.FIELD,\n      description: 'Location adjacent to a field.',\n    },\n    FRAGMENT_DEFINITION: {\n      value: DirectiveLocation.FRAGMENT_DEFINITION,\n      description: 'Location adjacent to a fragment definition.',\n    },\n    FRAGMENT_SPREAD: {\n      value: DirectiveLocation.FRAGMENT_SPREAD,\n      description: 'Location adjacent to a fragment spread.',\n    },\n    INLINE_FRAGMENT: {\n      value: DirectiveLocation.INLINE_FRAGMENT,\n      description: 'Location adjacent to an inline fragment.',\n    },\n    VARIABLE_DEFINITION: {\n      value: DirectiveLocation.VARIABLE_DEFINITION,\n      description: 'Location adjacent to a variable definition.',\n    },\n    SCHEMA: {\n      value: DirectiveLocation.SCHEMA,\n      description: 'Location adjacent to a schema definition.',\n    },\n    SCALAR: {\n      value: DirectiveLocation.SCALAR,\n      description: 'Location adjacent to a scalar definition.',\n    },\n    OBJECT: {\n      value: DirectiveLocation.OBJECT,\n      description: 'Location adjacent to an object type definition.',\n    },\n    FIELD_DEFINITION: {\n      value: DirectiveLocation.FIELD_DEFINITION,\n      description: 'Location adjacent to a field definition.',\n    },\n    ARGUMENT_DEFINITION: {\n      value: DirectiveLocation.ARGUMENT_DEFINITION,\n      description: 'Location adjacent to an argument definition.',\n    },\n    INTERFACE: {\n      value: DirectiveLocation.INTERFACE,\n      description: 'Location adjacent to an interface definition.',\n    },\n    UNION: {\n      value: DirectiveLocation.UNION,\n      description: 'Location adjacent to a union definition.',\n    },\n    ENUM: {\n      value: DirectiveLocation.ENUM,\n      description: 'Location adjacent to an enum definition.',\n    },\n    ENUM_VALUE: {\n      value: DirectiveLocation.ENUM_VALUE,\n      description: 'Location adjacent to an enum value definition.',\n    },\n    INPUT_OBJECT: {\n      value: DirectiveLocation.INPUT_OBJECT,\n      description: 'Location adjacent to an input object type definition.',\n    },\n    INPUT_FIELD_DEFINITION: {\n      value: DirectiveLocation.INPUT_FIELD_DEFINITION,\n      description: 'Location adjacent to an input object field definition.',\n    },\n  },\n});\nexport const __Type = new GraphQLObjectType({\n  name: '__Type',\n  description:\n    'The fundamental unit of any GraphQL Schema is the type. There are many kinds of types in GraphQL as represented by the `__TypeKind` enum.\\n\\nDepending on the kind of a type, certain fields describe information about that type. Scalar types provide no information beyond a name, description and optional `specifiedByURL`, while Enum types provide their values. Object and Interface types provide the fields they describe. Abstract types, Union and Interface, provide the Object types possible at runtime. List and NonNull types compose other types.',\n  fields: () => ({\n    kind: {\n      type: new GraphQLNonNull(__TypeKind),\n\n      resolve(type) {\n        if (isScalarType(type)) {\n          return TypeKind.SCALAR;\n        }\n\n        if (isObjectType(type)) {\n          return TypeKind.OBJECT;\n        }\n\n        if (isInterfaceType(type)) {\n          return TypeKind.INTERFACE;\n        }\n\n        if (isUnionType(type)) {\n          return TypeKind.UNION;\n        }\n\n        if (isEnumType(type)) {\n          return TypeKind.ENUM;\n        }\n\n        if (isInputObjectType(type)) {\n          return TypeKind.INPUT_OBJECT;\n        }\n\n        if (isListType(type)) {\n          return TypeKind.LIST;\n        }\n\n        if (isNonNullType(type)) {\n          return TypeKind.NON_NULL;\n        }\n        /* c8 ignore next 3 */\n        // Not reachable, all possible types have been considered)\n\n        false || invariant(false, `Unexpected type: \"${inspect(type)}\".`);\n      },\n    },\n    name: {\n      type: GraphQLString,\n      resolve: (type) => ('name' in type ? type.name : undefined),\n    },\n    description: {\n      type: GraphQLString,\n      resolve: (\n        type, // FIXME: add test case\n      ) =>\n        /* c8 ignore next */\n        'description' in type ? type.description : undefined,\n    },\n    specifiedByURL: {\n      type: GraphQLString,\n      resolve: (obj) =>\n        'specifiedByURL' in obj ? obj.specifiedByURL : undefined,\n    },\n    fields: {\n      type: new GraphQLList(new GraphQLNonNull(__Field)),\n      args: {\n        includeDeprecated: {\n          type: GraphQLBoolean,\n          defaultValue: false,\n        },\n      },\n\n      resolve(type, { includeDeprecated }) {\n        if (isObjectType(type) || isInterfaceType(type)) {\n          const fields = Object.values(type.getFields());\n          return includeDeprecated\n            ? fields\n            : fields.filter((field) => field.deprecationReason == null);\n        }\n      },\n    },\n    interfaces: {\n      type: new GraphQLList(new GraphQLNonNull(__Type)),\n\n      resolve(type) {\n        if (isObjectType(type) || isInterfaceType(type)) {\n          return type.getInterfaces();\n        }\n      },\n    },\n    possibleTypes: {\n      type: new GraphQLList(new GraphQLNonNull(__Type)),\n\n      resolve(type, _args, _context, { schema }) {\n        if (isAbstractType(type)) {\n          return schema.getPossibleTypes(type);\n        }\n      },\n    },\n    enumValues: {\n      type: new GraphQLList(new GraphQLNonNull(__EnumValue)),\n      args: {\n        includeDeprecated: {\n          type: GraphQLBoolean,\n          defaultValue: false,\n        },\n      },\n\n      resolve(type, { includeDeprecated }) {\n        if (isEnumType(type)) {\n          const values = type.getValues();\n          return includeDeprecated\n            ? values\n            : values.filter((field) => field.deprecationReason == null);\n        }\n      },\n    },\n    inputFields: {\n      type: new GraphQLList(new GraphQLNonNull(__InputValue)),\n      args: {\n        includeDeprecated: {\n          type: GraphQLBoolean,\n          defaultValue: false,\n        },\n      },\n\n      resolve(type, { includeDeprecated }) {\n        if (isInputObjectType(type)) {\n          const values = Object.values(type.getFields());\n          return includeDeprecated\n            ? values\n            : values.filter((field) => field.deprecationReason == null);\n        }\n      },\n    },\n    ofType: {\n      type: __Type,\n      resolve: (type) => ('ofType' in type ? type.ofType : undefined),\n    },\n  }),\n});\nexport const __Field = new GraphQLObjectType({\n  name: '__Field',\n  description:\n    'Object and Interface types are described by a list of Fields, each of which has a name, potentially a list of arguments, and a return type.',\n  fields: () => ({\n    name: {\n      type: new GraphQLNonNull(GraphQLString),\n      resolve: (field) => field.name,\n    },\n    description: {\n      type: GraphQLString,\n      resolve: (field) => field.description,\n    },\n    args: {\n      type: new GraphQLNonNull(\n        new GraphQLList(new GraphQLNonNull(__InputValue)),\n      ),\n      args: {\n        includeDeprecated: {\n          type: GraphQLBoolean,\n          defaultValue: false,\n        },\n      },\n\n      resolve(field, { includeDeprecated }) {\n        return includeDeprecated\n          ? field.args\n          : field.args.filter((arg) => arg.deprecationReason == null);\n      },\n    },\n    type: {\n      type: new GraphQLNonNull(__Type),\n      resolve: (field) => field.type,\n    },\n    isDeprecated: {\n      type: new GraphQLNonNull(GraphQLBoolean),\n      resolve: (field) => field.deprecationReason != null,\n    },\n    deprecationReason: {\n      type: GraphQLString,\n      resolve: (field) => field.deprecationReason,\n    },\n  }),\n});\nexport const __InputValue = new GraphQLObjectType({\n  name: '__InputValue',\n  description:\n    'Arguments provided to Fields or Directives and the input fields of an InputObject are represented as Input Values which describe their type and optionally a default value.',\n  fields: () => ({\n    name: {\n      type: new GraphQLNonNull(GraphQLString),\n      resolve: (inputValue) => inputValue.name,\n    },\n    description: {\n      type: GraphQLString,\n      resolve: (inputValue) => inputValue.description,\n    },\n    type: {\n      type: new GraphQLNonNull(__Type),\n      resolve: (inputValue) => inputValue.type,\n    },\n    defaultValue: {\n      type: GraphQLString,\n      description:\n        'A GraphQL-formatted string representing the default value for this input value.',\n\n      resolve(inputValue) {\n        const { type, defaultValue } = inputValue;\n        const valueAST = astFromValue(defaultValue, type);\n        return valueAST ? print(valueAST) : null;\n      },\n    },\n    isDeprecated: {\n      type: new GraphQLNonNull(GraphQLBoolean),\n      resolve: (field) => field.deprecationReason != null,\n    },\n    deprecationReason: {\n      type: GraphQLString,\n      resolve: (obj) => obj.deprecationReason,\n    },\n  }),\n});\nexport const __EnumValue = new GraphQLObjectType({\n  name: '__EnumValue',\n  description:\n    'One possible value for a given Enum. Enum values are unique values, not a placeholder for a string or numeric value. However an Enum value is returned in a JSON response as a string.',\n  fields: () => ({\n    name: {\n      type: new GraphQLNonNull(GraphQLString),\n      resolve: (enumValue) => enumValue.name,\n    },\n    description: {\n      type: GraphQLString,\n      resolve: (enumValue) => enumValue.description,\n    },\n    isDeprecated: {\n      type: new GraphQLNonNull(GraphQLBoolean),\n      resolve: (enumValue) => enumValue.deprecationReason != null,\n    },\n    deprecationReason: {\n      type: GraphQLString,\n      resolve: (enumValue) => enumValue.deprecationReason,\n    },\n  }),\n});\nvar TypeKind;\n\n(function (TypeKind) {\n  TypeKind['SCALAR'] = 'SCALAR';\n  TypeKind['OBJECT'] = 'OBJECT';\n  TypeKind['INTERFACE'] = 'INTERFACE';\n  TypeKind['UNION'] = 'UNION';\n  TypeKind['ENUM'] = 'ENUM';\n  TypeKind['INPUT_OBJECT'] = 'INPUT_OBJECT';\n  TypeKind['LIST'] = 'LIST';\n  TypeKind['NON_NULL'] = 'NON_NULL';\n})(TypeKind || (TypeKind = {}));\n\nexport { TypeKind };\nexport const __TypeKind = new GraphQLEnumType({\n  name: '__TypeKind',\n  description: 'An enum describing what kind of type a given `__Type` is.',\n  values: {\n    SCALAR: {\n      value: TypeKind.SCALAR,\n      description: 'Indicates this type is a scalar.',\n    },\n    OBJECT: {\n      value: TypeKind.OBJECT,\n      description:\n        'Indicates this type is an object. `fields` and `interfaces` are valid fields.',\n    },\n    INTERFACE: {\n      value: TypeKind.INTERFACE,\n      description:\n        'Indicates this type is an interface. `fields`, `interfaces`, and `possibleTypes` are valid fields.',\n    },\n    UNION: {\n      value: TypeKind.UNION,\n      description:\n        'Indicates this type is a union. `possibleTypes` is a valid field.',\n    },\n    ENUM: {\n      value: TypeKind.ENUM,\n      description:\n        'Indicates this type is an enum. `enumValues` is a valid field.',\n    },\n    INPUT_OBJECT: {\n      value: TypeKind.INPUT_OBJECT,\n      description:\n        'Indicates this type is an input object. `inputFields` is a valid field.',\n    },\n    LIST: {\n      value: TypeKind.LIST,\n      description: 'Indicates this type is a list. `ofType` is a valid field.',\n    },\n    NON_NULL: {\n      value: TypeKind.NON_NULL,\n      description:\n        'Indicates this type is a non-null. `ofType` is a valid field.',\n    },\n  },\n});\n/**\n * Note that these are GraphQLField and not GraphQLFieldConfig,\n * so the format for args is different.\n */\n\nexport const SchemaMetaFieldDef = {\n  name: '__schema',\n  type: new GraphQLNonNull(__Schema),\n  description: 'Access the current type schema of this server.',\n  args: [],\n  resolve: (_source, _args, _context, { schema }) => schema,\n  deprecationReason: undefined,\n  extensions: Object.create(null),\n  astNode: undefined,\n};\nexport const TypeMetaFieldDef = {\n  name: '__type',\n  type: __Type,\n  description: 'Request the type information of a single type.',\n  args: [\n    {\n      name: 'name',\n      description: undefined,\n      type: new GraphQLNonNull(GraphQLString),\n      defaultValue: undefined,\n      deprecationReason: undefined,\n      extensions: Object.create(null),\n      astNode: undefined,\n    },\n  ],\n  resolve: (_source, { name }, _context, { schema }) => schema.getType(name),\n  deprecationReason: undefined,\n  extensions: Object.create(null),\n  astNode: undefined,\n};\nexport const TypeNameMetaFieldDef = {\n  name: '__typename',\n  type: new GraphQLNonNull(GraphQLString),\n  description: 'The name of the current Object type at runtime.',\n  args: [],\n  resolve: (_source, _args, _context, { parentType }) => parentType.name,\n  deprecationReason: undefined,\n  extensions: Object.create(null),\n  astNode: undefined,\n};\nexport const introspectionTypes = Object.freeze([\n  __Schema,\n  __Directive,\n  __DirectiveLocation,\n  __Type,\n  __Field,\n  __InputValue,\n  __EnumValue,\n  __TypeKind,\n]);\nexport function isIntrospectionType(type) {\n  return introspectionTypes.some(({ name }) => type.name === name);\n}\n\"/utilities/valueFromASTUntyped.mjs\u0005import { keyValMap } from '../jsutils/keyValMap.mjs';\nimport { Kind } from '../language/kinds.mjs';\n/**\n * Produces a JavaScript value given a GraphQL Value AST.\n *\n * Unlike `valueFromAST()`, no type is provided. The resulting JavaScript value\n * will reflect the provided GraphQL value AST.\n *\n * | GraphQL Value        | JavaScript Value |\n * | -------------------- | ---------------- |\n * | Input Object         | Object           |\n * | List                 | Array            |\n * | Boolean              | Boolean          |\n * | String / Enum        | String           |\n * | Int / Float          | Number           |\n * | Null                 | null             |\n *\n */\n\nexport function valueFromASTUntyped(valueNode, variables) {\n  switch (valueNode.kind) {\n    case Kind.NULL:\n      return null;\n\n    case Kind.INT:\n      return parseInt(valueNode.value, 10);\n\n    case Kind.FLOAT:\n      return parseFloat(valueNode.value);\n\n    case Kind.STRING:\n    case Kind.ENUM:\n    case Kind.BOOLEAN:\n      return valueNode.value;\n\n    case Kind.LIST:\n      return valueNode.values.map((node) =>\n        valueFromASTUntyped(node, variables),\n      );\n\n    case Kind.OBJECT:\n      return keyValMap(\n        valueNode.fields,\n        (field) => field.name.value,\n        (field) => valueFromASTUntyped(field.value, variables),\n      );\n\n    case Kind.VARIABLE:\n      return variables === null || variables === void 0\n        ? void 0\n        : variables[valueNode.name.value];\n  }\n}\n/type/definition.mjswYimport { devAssert } from '../jsutils/devAssert.mjs';\nimport { didYouMean } from '../jsutils/didYouMean.mjs';\nimport { identityFunc } from '../jsutils/identityFunc.mjs';\nimport { inspect } from '../jsutils/inspect.mjs';\nimport { instanceOf } from '../jsutils/instanceOf.mjs';\nimport { isObjectLike } from '../jsutils/isObjectLike.mjs';\nimport { keyMap } from '../jsutils/keyMap.mjs';\nimport { keyValMap } from '../jsutils/keyValMap.mjs';\nimport { mapValue } from '../jsutils/mapValue.mjs';\nimport { suggestionList } from '../jsutils/suggestionList.mjs';\nimport { toObjMap } from '../jsutils/toObjMap.mjs';\nimport { GraphQLError } from '../error/GraphQLError.mjs';\nimport { Kind } from '../language/kinds.mjs';\nimport { print } from '../language/printer.mjs';\nimport { valueFromASTUntyped } from '../utilities/valueFromASTUntyped.mjs';\nimport { assertEnumValueName, assertName } from './assertName.mjs';\nexport function isType(type) {\n  return (\n    isScalarType(type) ||\n    isObjectType(type) ||\n    isInterfaceType(type) ||\n    isUnionType(type) ||\n    isEnumType(type) ||\n    isInputObjectType(type) ||\n    isListType(type) ||\n    isNonNullType(type)\n  );\n}\nexport function assertType(type) {\n  if (!isType(type)) {\n    throw new Error(`Expected ${inspect(type)} to be a GraphQL type.`);\n  }\n\n  return type;\n}\n/**\n * There are predicates for each kind of GraphQL type.\n */\n\nexport function isScalarType(type) {\n  return instanceOf(type, GraphQLScalarType);\n}\nexport function assertScalarType(type) {\n  if (!isScalarType(type)) {\n    throw new Error(`Expected ${inspect(type)} to be a GraphQL Scalar type.`);\n  }\n\n  return type;\n}\nexport function isObjectType(type) {\n  return instanceOf(type, GraphQLObjectType);\n}\nexport function assertObjectType(type) {\n  if (!isObjectType(type)) {\n    throw new Error(`Expected ${inspect(type)} to be a GraphQL Object type.`);\n  }\n\n  return type;\n}\nexport function isInterfaceType(type) {\n  return instanceOf(type, GraphQLInterfaceType);\n}\nexport function assertInterfaceType(type) {\n  if (!isInterfaceType(type)) {\n    throw new Error(\n      `Expected ${inspect(type)} to be a GraphQL Interface type.`,\n    );\n  }\n\n  return type;\n}\nexport function isUnionType(type) {\n  return instanceOf(type, GraphQLUnionType);\n}\nexport function assertUnionType(type) {\n  if (!isUnionType(type)) {\n    throw new Error(`Expected ${inspect(type)} to be a GraphQL Union type.`);\n  }\n\n  return type;\n}\nexport function isEnumType(type) {\n  return instanceOf(type, GraphQLEnumType);\n}\nexport function assertEnumType(type) {\n  if (!isEnumType(type)) {\n    throw new Error(`Expected ${inspect(type)} to be a GraphQL Enum type.`);\n  }\n\n  return type;\n}\nexport function isInputObjectType(type) {\n  return instanceOf(type, GraphQLInputObjectType);\n}\nexport function assertInputObjectType(type) {\n  if (!isInputObjectType(type)) {\n    throw new Error(\n      `Expected ${inspect(type)} to be a GraphQL Input Object type.`,\n    );\n  }\n\n  return type;\n}\nexport function isListType(type) {\n  return instanceOf(type, GraphQLList);\n}\nexport function assertListType(type) {\n  if (!isListType(type)) {\n    throw new Error(`Expected ${inspect(type)} to be a GraphQL List type.`);\n  }\n\n  return type;\n}\nexport function isNonNullType(type) {\n  return instanceOf(type, GraphQLNonNull);\n}\nexport function assertNonNullType(type) {\n  if (!isNonNullType(type)) {\n    throw new Error(`Expected ${inspect(type)} to be a GraphQL Non-Null type.`);\n  }\n\n  return type;\n}\n/**\n * These types may be used as input types for arguments and directives.\n */\n\nexport function isInputType(type) {\n  return (\n    isScalarType(type) ||\n    isEnumType(type) ||\n    isInputObjectType(type) ||\n    (isWrappingType(type) && isInputType(type.ofType))\n  );\n}\nexport function assertInputType(type) {\n  if (!isInputType(type)) {\n    throw new Error(`Expected ${inspect(type)} to be a GraphQL input type.`);\n  }\n\n  return type;\n}\n/**\n * These types may be used as output types as the result of fields.\n */\n\nexport function isOutputType(type) {\n  return (\n    isScalarType(type) ||\n    isObjectType(type) ||\n    isInterfaceType(type) ||\n    isUnionType(type) ||\n    isEnumType(type) ||\n    (isWrappingType(type) && isOutputType(type.ofType))\n  );\n}\nexport function assertOutputType(type) {\n  if (!isOutputType(type)) {\n    throw new Error(`Expected ${inspect(type)} to be a GraphQL output type.`);\n  }\n\n  return type;\n}\n/**\n * These types may describe types which may be leaf values.\n */\n\nexport function isLeafType(type) {\n  return isScalarType(type) || isEnumType(type);\n}\nexport function assertLeafType(type) {\n  if (!isLeafType(type)) {\n    throw new Error(`Expected ${inspect(type)} to be a GraphQL leaf type.`);\n  }\n\n  return type;\n}\n/**\n * These types may describe the parent context of a selection set.\n */\n\nexport function isCompositeType(type) {\n  return isObjectType(type) || isInterfaceType(type) || isUnionType(type);\n}\nexport function assertCompositeType(type) {\n  if (!isCompositeType(type)) {\n    throw new Error(\n      `Expected ${inspect(type)} to be a GraphQL composite type.`,\n    );\n  }\n\n  return type;\n}\n/**\n * These types may describe the parent context of a selection set.\n */\n\nexport function isAbstractType(type) {\n  return isInterfaceType(type) || isUnionType(type);\n}\nexport function assertAbstractType(type) {\n  if (!isAbstractType(type)) {\n    throw new Error(`Expected ${inspect(type)} to be a GraphQL abstract type.`);\n  }\n\n  return type;\n}\n/**\n * List Type Wrapper\n *\n * A list is a wrapping type which points to another type.\n * Lists are often created within the context of defining the fields of\n * an object type.\n *\n * Example:\n *\n * ```ts\n * const PersonType = new GraphQLObjectType({\n *   name: 'Person',\n *   fields: () => ({\n *     parents: { type: new GraphQLList(PersonType) },\n *     children: { type: new GraphQLList(PersonType) },\n *   })\n * })\n * ```\n */\n\nexport class GraphQLList {\n  constructor(ofType) {\n    isType(ofType) ||\n      devAssert(false, `Expected ${inspect(ofType)} to be a GraphQL type.`);\n    this.ofType = ofType;\n  }\n\n  get [Symbol.toStringTag]() {\n    return 'GraphQLList';\n  }\n\n  toString() {\n    return '[' + String(this.ofType) + ']';\n  }\n\n  toJSON() {\n    return this.toString();\n  }\n}\n/**\n * Non-Null Type Wrapper\n *\n * A non-null is a wrapping type which points to another type.\n * Non-null types enforce that their values are never null and can ensure\n * an error is raised if this ever occurs during a request. It is useful for\n * fields which you can make a strong guarantee on non-nullability, for example\n * usually the id field of a database row will never be null.\n *\n * Example:\n *\n * ```ts\n * const RowType = new GraphQLObjectType({\n *   name: 'Row',\n *   fields: () => ({\n *     id: { type: new GraphQLNonNull(GraphQLString) },\n *   })\n * })\n * ```\n * Note: the enforcement of non-nullability occurs within the executor.\n */\n\nexport class GraphQLNonNull {\n  constructor(ofType) {\n    isNullableType(ofType) ||\n      devAssert(\n        false,\n        `Expected ${inspect(ofType)} to be a GraphQL nullable type.`,\n      );\n    this.ofType = ofType;\n  }\n\n  get [Symbol.toStringTag]() {\n    return 'GraphQLNonNull';\n  }\n\n  toString() {\n    return String(this.ofType) + '!';\n  }\n\n  toJSON() {\n    return this.toString();\n  }\n}\n/**\n * These types wrap and modify other types\n */\n\nexport function isWrappingType(type) {\n  return isListType(type) || isNonNullType(type);\n}\nexport function assertWrappingType(type) {\n  if (!isWrappingType(type)) {\n    throw new Error(`Expected ${inspect(type)} to be a GraphQL wrapping type.`);\n  }\n\n  return type;\n}\n/**\n * These types can all accept null as a value.\n */\n\nexport function isNullableType(type) {\n  return isType(type) && !isNonNullType(type);\n}\nexport function assertNullableType(type) {\n  if (!isNullableType(type)) {\n    throw new Error(`Expected ${inspect(type)} to be a GraphQL nullable type.`);\n  }\n\n  return type;\n}\nexport function getNullableType(type) {\n  if (type) {\n    return isNonNullType(type) ? type.ofType : type;\n  }\n}\n/**\n * These named types do not include modifiers like List or NonNull.\n */\n\nexport function isNamedType(type) {\n  return (\n    isScalarType(type) ||\n    isObjectType(type) ||\n    isInterfaceType(type) ||\n    isUnionType(type) ||\n    isEnumType(type) ||\n    isInputObjectType(type)\n  );\n}\nexport function assertNamedType(type) {\n  if (!isNamedType(type)) {\n    throw new Error(`Expected ${inspect(type)} to be a GraphQL named type.`);\n  }\n\n  return type;\n}\nexport function getNamedType(type) {\n  if (type) {\n    let unwrappedType = type;\n\n    while (isWrappingType(unwrappedType)) {\n      unwrappedType = unwrappedType.ofType;\n    }\n\n    return unwrappedType;\n  }\n}\n/**\n * Used while defining GraphQL types to allow for circular references in\n * otherwise immutable type definitions.\n */\n\nexport function resolveReadonlyArrayThunk(thunk) {\n  return typeof thunk === 'function' ? thunk() : thunk;\n}\nexport function resolveObjMapThunk(thunk) {\n  return typeof thunk === 'function' ? thunk() : thunk;\n}\n/**\n * Custom extensions\n *\n * @remarks\n * Use a unique identifier name for your extension, for example the name of\n * your library or project. Do not use a shortened identifier as this increases\n * the risk of conflicts. We recommend you add at most one extension field,\n * an object which can contain all the values you need.\n */\n\n/**\n * Scalar Type Definition\n *\n * The leaf values of any request and input values to arguments are\n * Scalars (or Enums) and are defined with a name and a series of functions\n * used to parse input from ast or variables and to ensure validity.\n *\n * If a type's serialize function returns `null` or does not return a value\n * (i.e. it returns `undefined`) then an error will be raised and a `null`\n * value will be returned in the response. It is always better to validate\n *\n * Example:\n *\n * ```ts\n * const OddType = new GraphQLScalarType({\n *   name: 'Odd',\n *   serialize(value) {\n *     if (!Number.isFinite(value)) {\n *       throw new Error(\n *         `Scalar \"Odd\" cannot represent \"${value}\" since it is not a finite number.`,\n *       );\n *     }\n *\n *     if (value % 2 === 0) {\n *       throw new Error(`Scalar \"Odd\" cannot represent \"${value}\" since it is even.`);\n *     }\n *     return value;\n *   }\n * });\n * ```\n */\nexport class GraphQLScalarType {\n  constructor(config) {\n    var _config$parseValue,\n      _config$serialize,\n      _config$parseLiteral,\n      _config$extensionASTN;\n\n    const parseValue =\n      (_config$parseValue = config.parseValue) !== null &&\n      _config$parseValue !== void 0\n        ? _config$parseValue\n        : identityFunc;\n    this.name = assertName(config.name);\n    this.description = config.description;\n    this.specifiedByURL = config.specifiedByURL;\n    this.serialize =\n      (_config$serialize = config.serialize) !== null &&\n      _config$serialize !== void 0\n        ? _config$serialize\n        : identityFunc;\n    this.parseValue = parseValue;\n    this.parseLiteral =\n      (_config$parseLiteral = config.parseLiteral) !== null &&\n      _config$parseLiteral !== void 0\n        ? _config$parseLiteral\n        : (node, variables) => parseValue(valueFromASTUntyped(node, variables));\n    this.extensions = toObjMap(config.extensions);\n    this.astNode = config.astNode;\n    this.extensionASTNodes =\n      (_config$extensionASTN = config.extensionASTNodes) !== null &&\n      _config$extensionASTN !== void 0\n        ? _config$extensionASTN\n        : [];\n    config.specifiedByURL == null ||\n      typeof config.specifiedByURL === 'string' ||\n      devAssert(\n        false,\n        `${this.name} must provide \"specifiedByURL\" as a string, ` +\n          `but got: ${inspect(config.specifiedByURL)}.`,\n      );\n    config.serialize == null ||\n      typeof config.serialize === 'function' ||\n      devAssert(\n        false,\n        `${this.name} must provide \"serialize\" function. If this custom Scalar is also used as an input type, ensure \"parseValue\" and \"parseLiteral\" functions are also provided.`,\n      );\n\n    if (config.parseLiteral) {\n      (typeof config.parseValue === 'function' &&\n        typeof config.parseLiteral === 'function') ||\n        devAssert(\n          false,\n          `${this.name} must provide both \"parseValue\" and \"parseLiteral\" functions.`,\n        );\n    }\n  }\n\n  get [Symbol.toStringTag]() {\n    return 'GraphQLScalarType';\n  }\n\n  toConfig() {\n    return {\n      name: this.name,\n      description: this.description,\n      specifiedByURL: this.specifiedByURL,\n      serialize: this.serialize,\n      parseValue: this.parseValue,\n      parseLiteral: this.parseLiteral,\n      extensions: this.extensions,\n      astNode: this.astNode,\n      extensionASTNodes: this.extensionASTNodes,\n    };\n  }\n\n  toString() {\n    return this.name;\n  }\n\n  toJSON() {\n    return this.toString();\n  }\n}\n\n/**\n * Object Type Definition\n *\n * Almost all of the GraphQL types you define will be object types. Object types\n * have a name, but most importantly describe their fields.\n *\n * Example:\n *\n * ```ts\n * const AddressType = new GraphQLObjectType({\n *   name: 'Address',\n *   fields: {\n *     street: { type: GraphQLString },\n *     number: { type: GraphQLInt },\n *     formatted: {\n *       type: GraphQLString,\n *       resolve(obj) {\n *         return obj.number + ' ' + obj.street\n *       }\n *     }\n *   }\n * });\n * ```\n *\n * When two types need to refer to each other, or a type needs to refer to\n * itself in a field, you can use a function expression (aka a closure or a\n * thunk) to supply the fields lazily.\n *\n * Example:\n *\n * ```ts\n * const PersonType = new GraphQLObjectType({\n *   name: 'Person',\n *   fields: () => ({\n *     name: { type: GraphQLString },\n *     bestFriend: { type: PersonType },\n *   })\n * });\n * ```\n */\nexport class GraphQLObjectType {\n  constructor(config) {\n    var _config$extensionASTN2;\n\n    this.name = assertName(config.name);\n    this.description = config.description;\n    this.isTypeOf = config.isTypeOf;\n    this.extensions = toObjMap(config.extensions);\n    this.astNode = config.astNode;\n    this.extensionASTNodes =\n      (_config$extensionASTN2 = config.extensionASTNodes) !== null &&\n      _config$extensionASTN2 !== void 0\n        ? _config$extensionASTN2\n        : [];\n\n    this._fields = () => defineFieldMap(config);\n\n    this._interfaces = () => defineInterfaces(config);\n\n    config.isTypeOf == null ||\n      typeof config.isTypeOf === 'function' ||\n      devAssert(\n        false,\n        `${this.name} must provide \"isTypeOf\" as a function, ` +\n          `but got: ${inspect(config.isTypeOf)}.`,\n      );\n  }\n\n  get [Symbol.toStringTag]() {\n    return 'GraphQLObjectType';\n  }\n\n  getFields() {\n    if (typeof this._fields === 'function') {\n      this._fields = this._fields();\n    }\n\n    return this._fields;\n  }\n\n  getInterfaces() {\n    if (typeof this._interfaces === 'function') {\n      this._interfaces = this._interfaces();\n    }\n\n    return this._interfaces;\n  }\n\n  toConfig() {\n    return {\n      name: this.name,\n      description: this.description,\n      interfaces: this.getInterfaces(),\n      fields: fieldsToFieldsConfig(this.getFields()),\n      isTypeOf: this.isTypeOf,\n      extensions: this.extensions,\n      astNode: this.astNode,\n      extensionASTNodes: this.extensionASTNodes,\n    };\n  }\n\n  toString() {\n    return this.name;\n  }\n\n  toJSON() {\n    return this.toString();\n  }\n}\n\nfunction defineInterfaces(config) {\n  var _config$interfaces;\n\n  const interfaces = resolveReadonlyArrayThunk(\n    (_config$interfaces = config.interfaces) !== null &&\n      _config$interfaces !== void 0\n      ? _config$interfaces\n      : [],\n  );\n  Array.isArray(interfaces) ||\n    devAssert(\n      false,\n      `${config.name} interfaces must be an Array or a function which returns an Array.`,\n    );\n  return interfaces;\n}\n\nfunction defineFieldMap(config) {\n  const fieldMap = resolveObjMapThunk(config.fields);\n  isPlainObj(fieldMap) ||\n    devAssert(\n      false,\n      `${config.name} fields must be an object with field names as keys or a function which returns such an object.`,\n    );\n  return mapValue(fieldMap, (fieldConfig, fieldName) => {\n    var _fieldConfig$args;\n\n    isPlainObj(fieldConfig) ||\n      devAssert(\n        false,\n        `${config.name}.${fieldName} field config must be an object.`,\n      );\n    fieldConfig.resolve == null ||\n      typeof fieldConfig.resolve === 'function' ||\n      devAssert(\n        false,\n        `${config.name}.${fieldName} field resolver must be a function if ` +\n          `provided, but got: ${inspect(fieldConfig.resolve)}.`,\n      );\n    const argsConfig =\n      (_fieldConfig$args = fieldConfig.args) !== null &&\n      _fieldConfig$args !== void 0\n        ? _fieldConfig$args\n        : {};\n    isPlainObj(argsConfig) ||\n      devAssert(\n        false,\n        `${config.name}.${fieldName} args must be an object with argument names as keys.`,\n      );\n    return {\n      name: assertName(fieldName),\n      description: fieldConfig.description,\n      type: fieldConfig.type,\n      args: defineArguments(argsConfig),\n      resolve: fieldConfig.resolve,\n      subscribe: fieldConfig.subscribe,\n      deprecationReason: fieldConfig.deprecationReason,\n      extensions: toObjMap(fieldConfig.extensions),\n      astNode: fieldConfig.astNode,\n    };\n  });\n}\n\nexport function defineArguments(config) {\n  return Object.entries(config).map(([argName, argConfig]) => ({\n    name: assertName(argName),\n    description: argConfig.description,\n    type: argConfig.type,\n    defaultValue: argConfig.defaultValue,\n    deprecationReason: argConfig.deprecationReason,\n    extensions: toObjMap(argConfig.extensions),\n    astNode: argConfig.astNode,\n  }));\n}\n\nfunction isPlainObj(obj) {\n  return isObjectLike(obj) && !Array.isArray(obj);\n}\n\nfunction fieldsToFieldsConfig(fields) {\n  return mapValue(fields, (field) => ({\n    description: field.description,\n    type: field.type,\n    args: argsToArgsConfig(field.args),\n    resolve: field.resolve,\n    subscribe: field.subscribe,\n    deprecationReason: field.deprecationReason,\n    extensions: field.extensions,\n    astNode: field.astNode,\n  }));\n}\n/**\n * @internal\n */\n\nexport function argsToArgsConfig(args) {\n  return keyValMap(\n    args,\n    (arg) => arg.name,\n    (arg) => ({\n      description: arg.description,\n      type: arg.type,\n      defaultValue: arg.defaultValue,\n      deprecationReason: arg.deprecationReason,\n      extensions: arg.extensions,\n      astNode: arg.astNode,\n    }),\n  );\n}\nexport function isRequiredArgument(arg) {\n  return isNonNullType(arg.type) && arg.defaultValue === undefined;\n}\n\n/**\n * Interface Type Definition\n *\n * When a field can return one of a heterogeneous set of types, a Interface type\n * is used to describe what types are possible, what fields are in common across\n * all types, as well as a function to determine which type is actually used\n * when the field is resolved.\n *\n * Example:\n *\n * ```ts\n * const EntityType = new GraphQLInterfaceType({\n *   name: 'Entity',\n *   fields: {\n *     name: { type: GraphQLString }\n *   }\n * });\n * ```\n */\nexport class GraphQLInterfaceType {\n  constructor(config) {\n    var _config$extensionASTN3;\n\n    this.name = assertName(config.name);\n    this.description = config.description;\n    this.resolveType = config.resolveType;\n    this.extensions = toObjMap(config.extensions);\n    this.astNode = config.astNode;\n    this.extensionASTNodes =\n      (_config$extensionASTN3 = config.extensionASTNodes) !== null &&\n      _config$extensionASTN3 !== void 0\n        ? _config$extensionASTN3\n        : [];\n    this._fields = defineFieldMap.bind(undefined, config);\n    this._interfaces = defineInterfaces.bind(undefined, config);\n    config.resolveType == null ||\n      typeof config.resolveType === 'function' ||\n      devAssert(\n        false,\n        `${this.name} must provide \"resolveType\" as a function, ` +\n          `but got: ${inspect(config.resolveType)}.`,\n      );\n  }\n\n  get [Symbol.toStringTag]() {\n    return 'GraphQLInterfaceType';\n  }\n\n  getFields() {\n    if (typeof this._fields === 'function') {\n      this._fields = this._fields();\n    }\n\n    return this._fields;\n  }\n\n  getInterfaces() {\n    if (typeof this._interfaces === 'function') {\n      this._interfaces = this._interfaces();\n    }\n\n    return this._interfaces;\n  }\n\n  toConfig() {\n    return {\n      name: this.name,\n      description: this.description,\n      interfaces: this.getInterfaces(),\n      fields: fieldsToFieldsConfig(this.getFields()),\n      resolveType: this.resolveType,\n      extensions: this.extensions,\n      astNode: this.astNode,\n      extensionASTNodes: this.extensionASTNodes,\n    };\n  }\n\n  toString() {\n    return this.name;\n  }\n\n  toJSON() {\n    return this.toString();\n  }\n}\n\n/**\n * Union Type Definition\n *\n * When a field can return one of a heterogeneous set of types, a Union type\n * is used to describe what types are possible as well as providing a function\n * to determine which type is actually used when the field is resolved.\n *\n * Example:\n *\n * ```ts\n * const PetType = new GraphQLUnionType({\n *   name: 'Pet',\n *   types: [ DogType, CatType ],\n *   resolveType(value) {\n *     if (value instanceof Dog) {\n *       return DogType;\n *     }\n *     if (value instanceof Cat) {\n *       return CatType;\n *     }\n *   }\n * });\n * ```\n */\nexport class GraphQLUnionType {\n  constructor(config) {\n    var _config$extensionASTN4;\n\n    this.name = assertName(config.name);\n    this.description = config.description;\n    this.resolveType = config.resolveType;\n    this.extensions = toObjMap(config.extensions);\n    this.astNode = config.astNode;\n    this.extensionASTNodes =\n      (_config$extensionASTN4 = config.extensionASTNodes) !== null &&\n      _config$extensionASTN4 !== void 0\n        ? _config$extensionASTN4\n        : [];\n    this._types = defineTypes.bind(undefined, config);\n    config.resolveType == null ||\n      typeof config.resolveType === 'function' ||\n      devAssert(\n        false,\n        `${this.name} must provide \"resolveType\" as a function, ` +\n          `but got: ${inspect(config.resolveType)}.`,\n      );\n  }\n\n  get [Symbol.toStringTag]() {\n    return 'GraphQLUnionType';\n  }\n\n  getTypes() {\n    if (typeof this._types === 'function') {\n      this._types = this._types();\n    }\n\n    return this._types;\n  }\n\n  toConfig() {\n    return {\n      name: this.name,\n      description: this.description,\n      types: this.getTypes(),\n      resolveType: this.resolveType,\n      extensions: this.extensions,\n      astNode: this.astNode,\n      extensionASTNodes: this.extensionASTNodes,\n    };\n  }\n\n  toString() {\n    return this.name;\n  }\n\n  toJSON() {\n    return this.toString();\n  }\n}\n\nfunction defineTypes(config) {\n  const types = resolveReadonlyArrayThunk(config.types);\n  Array.isArray(types) ||\n    devAssert(\n      false,\n      `Must provide Array of types or a function which returns such an array for Union ${config.name}.`,\n    );\n  return types;\n}\n\n/**\n * Enum Type Definition\n *\n * Some leaf values of requests and input values are Enums. GraphQL serializes\n * Enum values as strings, however internally Enums can be represented by any\n * kind of type, often integers.\n *\n * Example:\n *\n * ```ts\n * const RGBType = new GraphQLEnumType({\n *   name: 'RGB',\n *   values: {\n *     RED: { value: 0 },\n *     GREEN: { value: 1 },\n *     BLUE: { value: 2 }\n *   }\n * });\n * ```\n *\n * Note: If a value is not provided in a definition, the name of the enum value\n * will be used as its internal value.\n */\nexport class GraphQLEnumType {\n  /* <T> */\n  constructor(config) {\n    var _config$extensionASTN5;\n\n    this.name = assertName(config.name);\n    this.description = config.description;\n    this.extensions = toObjMap(config.extensions);\n    this.astNode = config.astNode;\n    this.extensionASTNodes =\n      (_config$extensionASTN5 = config.extensionASTNodes) !== null &&\n      _config$extensionASTN5 !== void 0\n        ? _config$extensionASTN5\n        : [];\n    this._values = defineEnumValues(this.name, config.values);\n    this._valueLookup = new Map(\n      this._values.map((enumValue) => [enumValue.value, enumValue]),\n    );\n    this._nameLookup = keyMap(this._values, (value) => value.name);\n  }\n\n  get [Symbol.toStringTag]() {\n    return 'GraphQLEnumType';\n  }\n\n  getValues() {\n    return this._values;\n  }\n\n  getValue(name) {\n    return this._nameLookup[name];\n  }\n\n  serialize(outputValue) {\n    const enumValue = this._valueLookup.get(outputValue);\n\n    if (enumValue === undefined) {\n      throw new GraphQLError(\n        `Enum \"${this.name}\" cannot represent value: ${inspect(outputValue)}`,\n      );\n    }\n\n    return enumValue.name;\n  }\n\n  parseValue(inputValue) /* T */\n  {\n    if (typeof inputValue !== 'string') {\n      const valueStr = inspect(inputValue);\n      throw new GraphQLError(\n        `Enum \"${this.name}\" cannot represent non-string value: ${valueStr}.` +\n          didYouMeanEnumValue(this, valueStr),\n      );\n    }\n\n    const enumValue = this.getValue(inputValue);\n\n    if (enumValue == null) {\n      throw new GraphQLError(\n        `Value \"${inputValue}\" does not exist in \"${this.name}\" enum.` +\n          didYouMeanEnumValue(this, inputValue),\n      );\n    }\n\n    return enumValue.value;\n  }\n\n  parseLiteral(valueNode, _variables) /* T */\n  {\n    // Note: variables will be resolved to a value before calling this function.\n    if (valueNode.kind !== Kind.ENUM) {\n      const valueStr = print(valueNode);\n      throw new GraphQLError(\n        `Enum \"${this.name}\" cannot represent non-enum value: ${valueStr}.` +\n          didYouMeanEnumValue(this, valueStr),\n        {\n          nodes: valueNode,\n        },\n      );\n    }\n\n    const enumValue = this.getValue(valueNode.value);\n\n    if (enumValue == null) {\n      const valueStr = print(valueNode);\n      throw new GraphQLError(\n        `Value \"${valueStr}\" does not exist in \"${this.name}\" enum.` +\n          didYouMeanEnumValue(this, valueStr),\n        {\n          nodes: valueNode,\n        },\n      );\n    }\n\n    return enumValue.value;\n  }\n\n  toConfig() {\n    const values = keyValMap(\n      this.getValues(),\n      (value) => value.name,\n      (value) => ({\n        description: value.description,\n        value: value.value,\n        deprecationReason: value.deprecationReason,\n        extensions: value.extensions,\n        astNode: value.astNode,\n      }),\n    );\n    return {\n      name: this.name,\n      description: this.description,\n      values,\n      extensions: this.extensions,\n      astNode: this.astNode,\n      extensionASTNodes: this.extensionASTNodes,\n    };\n  }\n\n  toString() {\n    return this.name;\n  }\n\n  toJSON() {\n    return this.toString();\n  }\n}\n\nfunction didYouMeanEnumValue(enumType, unknownValueStr) {\n  const allNames = enumType.getValues().map((value) => value.name);\n  const suggestedValues = suggestionList(unknownValueStr, allNames);\n  return didYouMean('the enum value', suggestedValues);\n}\n\nfunction defineEnumValues(typeName, valueMap) {\n  isPlainObj(valueMap) ||\n    devAssert(\n      false,\n      `${typeName} values must be an object with value names as keys.`,\n    );\n  return Object.entries(valueMap).map(([valueName, valueConfig]) => {\n    isPlainObj(valueConfig) ||\n      devAssert(\n        false,\n        `${typeName}.${valueName} must refer to an object with a \"value\" key ` +\n          `representing an internal value but got: ${inspect(valueConfig)}.`,\n      );\n    return {\n      name: assertEnumValueName(valueName),\n      description: valueConfig.description,\n      value: valueConfig.value !== undefined ? valueConfig.value : valueName,\n      deprecationReason: valueConfig.deprecationReason,\n      extensions: toObjMap(valueConfig.extensions),\n      astNode: valueConfig.astNode,\n    };\n  });\n}\n\n/**\n * Input Object Type Definition\n *\n * An input object defines a structured collection of fields which may be\n * supplied to a field argument.\n *\n * Using `NonNull` will ensure that a value must be provided by the query\n *\n * Example:\n *\n * ```ts\n * const GeoPoint = new GraphQLInputObjectType({\n *   name: 'GeoPoint',\n *   fields: {\n *     lat: { type: new GraphQLNonNull(GraphQLFloat) },\n *     lon: { type: new GraphQLNonNull(GraphQLFloat) },\n *     alt: { type: GraphQLFloat, defaultValue: 0 },\n *   }\n * });\n * ```\n */\nexport class GraphQLInputObjectType {\n  constructor(config) {\n    var _config$extensionASTN6;\n\n    this.name = assertName(config.name);\n    this.description = config.description;\n    this.extensions = toObjMap(config.extensions);\n    this.astNode = config.astNode;\n    this.extensionASTNodes =\n      (_config$extensionASTN6 = config.extensionASTNodes) !== null &&\n      _config$extensionASTN6 !== void 0\n        ? _config$extensionASTN6\n        : [];\n    this._fields = defineInputFieldMap.bind(undefined, config);\n  }\n\n  get [Symbol.toStringTag]() {\n    return 'GraphQLInputObjectType';\n  }\n\n  getFields() {\n    if (typeof this._fields === 'function') {\n      this._fields = this._fields();\n    }\n\n    return this._fields;\n  }\n\n  toConfig() {\n    const fields = mapValue(this.getFields(), (field) => ({\n      description: field.description,\n      type: field.type,\n      defaultValue: field.defaultValue,\n      deprecationReason: field.deprecationReason,\n      extensions: field.extensions,\n      astNode: field.astNode,\n    }));\n    return {\n      name: this.name,\n      description: this.description,\n      fields,\n      extensions: this.extensions,\n      astNode: this.astNode,\n      extensionASTNodes: this.extensionASTNodes,\n    };\n  }\n\n  toString() {\n    return this.name;\n  }\n\n  toJSON() {\n    return this.toString();\n  }\n}\n\nfunction defineInputFieldMap(config) {\n  const fieldMap = resolveObjMapThunk(config.fields);\n  isPlainObj(fieldMap) ||\n    devAssert(\n      false,\n      `${config.name} fields must be an object with field names as keys or a function which returns such an object.`,\n    );\n  return mapValue(fieldMap, (fieldConfig, fieldName) => {\n    !('resolve' in fieldConfig) ||\n      devAssert(\n        false,\n        `${config.name}.${fieldName} field has a resolve property, but Input Types cannot define resolvers.`,\n      );\n    return {\n      name: assertName(fieldName),\n      description: fieldConfig.description,\n      type: fieldConfig.type,\n      defaultValue: fieldConfig.defaultValue,\n      deprecationReason: fieldConfig.deprecationReason,\n      extensions: toObjMap(fieldConfig.extensions),\n      astNode: fieldConfig.astNode,\n    };\n  });\n}\n\nexport function isRequiredInputField(field) {\n  return isNonNullType(field.type) && field.defaultValue === undefined;\n}\n/README.md\u0017 # GraphQL.js\n\nThe JavaScript reference implementation for GraphQL, a query language for APIs created by Facebook.\n\n[![npm version](https://badge.fury.io/js/graphql.svg)](https://badge.fury.io/js/graphql)\n[![Build Status](https://github.com/graphql/graphql-js/workflows/CI/badge.svg?branch=main)](https://github.com/graphql/graphql-js/actions?query=branch%3Amain)\n[![Coverage Status](https://codecov.io/gh/graphql/graphql-js/branch/main/graph/badge.svg)](https://codecov.io/gh/graphql/graphql-js)\n\nSee more complete documentation at https://graphql.org/ and\nhttps://graphql.org/graphql-js/.\n\nLooking for help? Find resources [from the community](https://graphql.org/community/).\n\n## Getting Started\n\nA general overview of GraphQL is available in the\n[README](https://github.com/graphql/graphql-spec/blob/main/README.md) for the\n[Specification for GraphQL](https://github.com/graphql/graphql-spec). That overview\ndescribes a simple set of GraphQL examples that exist as [tests](src/__tests__)\nin this repository. A good way to get started with this repository is to walk\nthrough that README and the corresponding tests in parallel.\n\n### Using GraphQL.js\n\nInstall GraphQL.js from npm\n\nWith npm:\n\n```sh\nnpm install --save graphql\n```\n\nor using yarn:\n\n```sh\nyarn add graphql\n```\n\nGraphQL.js provides two important capabilities: building a type schema and\nserving queries against that type schema.\n\nFirst, build a GraphQL type schema which maps to your codebase.\n\n```js\nimport {\n  graphql,\n  GraphQLSchema,\n  GraphQLObjectType,\n  GraphQLString,\n} from 'graphql';\n\nvar schema = new GraphQLSchema({\n  query: new GraphQLObjectType({\n    name: 'RootQueryType',\n    fields: {\n      hello: {\n        type: GraphQLString,\n        resolve() {\n          return 'world';\n        },\n      },\n    },\n  }),\n});\n```\n\nThis defines a simple schema, with one type and one field, that resolves\nto a fixed value. The `resolve` function can return a value, a promise,\nor an array of promises. A more complex example is included in the top-level [tests](src/__tests__) directory.\n\nThen, serve the result of a query against that type schema.\n\n```js\nvar source = '{ hello }';\n\ngraphql({ schema, source }).then((result) => {\n  // Prints\n  // {\n  //   data: { hello: \"world\" }\n  // }\n  console.log(result);\n});\n```\n\nThis runs a query fetching the one field defined. The `graphql` function will\nfirst ensure the query is syntactically and semantically valid before executing\nit, reporting errors otherwise.\n\n```js\nvar source = '{ BoyHowdy }';\n\ngraphql({ schema, source }).then((result) => {\n  // Prints\n  // {\n  //   errors: [\n  //     { message: 'Cannot query field BoyHowdy on RootQueryType',\n  //       locations: [ { line: 1, column: 3 } ] }\n  //   ]\n  // }\n  console.log(result);\n});\n```\n\n**Note**: Please don't forget to set `NODE_ENV=production` if you are running a production server. It will disable some checks that can be useful during development but will significantly improve performance.\n\n### Want to ride the bleeding edge?\n\nThe `npm` branch in this repository is automatically maintained to be the last\ncommit to `main` to pass all tests, in the same form found on npm. It is\nrecommended to use builds deployed to npm for many reasons, but if you want to use\nthe latest not-yet-released version of graphql-js, you can do so by depending\ndirectly on this branch:\n\n```\nnpm install graphql@git://github.com/graphql/graphql-js.git#npm\n```\n\n### Experimental features\n\nEach release of GraphQL.js will be accompanied by an experimental release containing support for the `@defer` and `@stream` directive proposal. We are hoping to get community feedback on these releases before the proposal is accepted into the GraphQL specification. You can use this experimental release of GraphQL.js by adding the following to your project's `package.json` file.\n\n```\n\"graphql\": \"experimental-stream-defer\"\n```\n\nCommunity feedback on this experimental release is much appreciated and can be provided on the [issue created for this purpose](https://github.com/graphql/graphql-js/issues/2848).\n\n### Using in a Browser\n\nGraphQL.js is a general-purpose library and can be used both in a Node server\nand in the browser. As an example, the [GraphiQL](https://github.com/graphql/graphiql/)\ntool is built with GraphQL.js!\n\nBuilding a project using GraphQL.js with [webpack](https://webpack.js.org) or\n[rollup](https://github.com/rollup/rollup) should just work and only include\nthe portions of the library you use. This works because GraphQL.js is distributed\nwith both CommonJS (`require()`) and ESModule (`import`) files. Ensure that any\ncustom build configurations look for `.mjs` files!\n\n### Contributing\n\nWe actively welcome pull requests. Learn how to [contribute](./.github/CONTRIBUTING.md).\n\nThis repository is managed by EasyCLA. Project participants must sign the free ([GraphQL Specification Membership agreement](https://preview-spec-membership.graphql.org) before making a contribution. You only need to do this one time, and it can be signed by [individual contributors](http://individual-spec-membership.graphql.org/) or their [employers](http://corporate-spec-membership.graphql.org/).\n\nTo initiate the signature process please open a PR against this repo. The EasyCLA bot will block the merge if we still need a membership agreement from you.\n\nYou can find [detailed information here](https://github.com/graphql/graphql-wg/tree/main/membership). If you have issues, please email [operations@graphql.org](mailto:operations@graphql.org).\n\nIf your company benefits from GraphQL and you would like to provide essential financial support for the systems and people that power our community, please also consider membership in the [GraphQL Foundation](https://foundation.graphql.org/join).\n\n### Changelog\n\nChanges are tracked as [GitHub releases](https://github.com/graphql/graphql-js/releases).\n\n### License\n\nGraphQL.js is [MIT-licensed](./LICENSE).\n0/validation/rules/PossibleFragmentSpreadsRule.js\n]'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.PossibleFragmentSpreadsRule = PossibleFragmentSpreadsRule;\n\nvar _inspect = require('../../jsutils/inspect.js');\n\nvar _GraphQLError = require('../../error/GraphQLError.js');\n\nvar _definition = require('../../type/definition.js');\n\nvar _typeComparators = require('../../utilities/typeComparators.js');\n\nvar _typeFromAST = require('../../utilities/typeFromAST.js');\n\n/**\n * Possible fragment spread\n *\n * A fragment spread is only valid if the type condition could ever possibly\n * be true: if there is a non-empty intersection of the possible parent types,\n * and possible types which pass the type condition.\n */\nfunction PossibleFragmentSpreadsRule(context) {\n  return {\n    InlineFragment(node) {\n      const fragType = context.getType();\n      const parentType = context.getParentType();\n\n      if (\n        (0, _definition.isCompositeType)(fragType) &&\n        (0, _definition.isCompositeType)(parentType) &&\n        !(0, _typeComparators.doTypesOverlap)(\n          context.getSchema(),\n          fragType,\n          parentType,\n        )\n      ) {\n        const parentTypeStr = (0, _inspect.inspect)(parentType);\n        const fragTypeStr = (0, _inspect.inspect)(fragType);\n        context.reportError(\n          new _GraphQLError.GraphQLError(\n            `Fragment cannot be spread here as objects of type \"${parentTypeStr}\" can never be of type \"${fragTypeStr}\".`,\n            {\n              nodes: node,\n            },\n          ),\n        );\n      }\n    },\n\n    FragmentSpread(node) {\n      const fragName = node.name.value;\n      const fragType = getFragmentType(context, fragName);\n      const parentType = context.getParentType();\n\n      if (\n        fragType &&\n        parentType &&\n        !(0, _typeComparators.doTypesOverlap)(\n          context.getSchema(),\n          fragType,\n          parentType,\n        )\n      ) {\n        const parentTypeStr = (0, _inspect.inspect)(parentType);\n        const fragTypeStr = (0, _inspect.inspect)(fragType);\n        context.reportError(\n          new _GraphQLError.GraphQLError(\n            `Fragment \"${fragName}\" cannot be spread here as objects of type \"${parentTypeStr}\" can never be of type \"${fragTypeStr}\".`,\n            {\n              nodes: node,\n            },\n          ),\n        );\n      }\n    },\n  };\n}\n\nfunction getFragmentType(context, name) {\n  const frag = context.getFragment(name);\n\n  if (frag) {\n    const type = (0, _typeFromAST.typeFromAST)(\n      context.getSchema(),\n      frag.typeCondition,\n    );\n\n    if ((0, _definition.isCompositeType)(type)) {\n      return type;\n    }\n  }\n}\n//validation/rules/ExecutableDefinitionsRule.mjs\u0004\u0011import { GraphQLError } from '../../error/GraphQLError.mjs';\nimport { Kind } from '../../language/kinds.mjs';\nimport { isExecutableDefinitionNode } from '../../language/predicates.mjs';\n\n/**\n * Executable definitions\n *\n * A GraphQL document is only valid for execution if all definitions are either\n * operation or fragment definitions.\n *\n * See https://spec.graphql.org/draft/#sec-Executable-Definitions\n */\nexport function ExecutableDefinitionsRule(context) {\n  return {\n    Document(node) {\n      for (const definition of node.definitions) {\n        if (!isExecutableDefinitionNode(definition)) {\n          const defName =\n            definition.kind === Kind.SCHEMA_DEFINITION ||\n            definition.kind === Kind.SCHEMA_EXTENSION\n              ? 'schema'\n              : '\"' + definition.name.value + '\"';\n          context.reportError(\n            new GraphQLError(`The ${defName} definition is not executable.`, {\n              nodes: definition,\n            }),\n          );\n        }\n      }\n\n      return false;\n    },\n  };\n}\n/language/characterClasses.js\u0005d'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.isDigit = isDigit;\nexports.isLetter = isLetter;\nexports.isNameContinue = isNameContinue;\nexports.isNameStart = isNameStart;\nexports.isWhiteSpace = isWhiteSpace;\n\n/**\n * ```\n * WhiteSpace ::\n *   - \"Horizontal Tab (U+0009)\"\n *   - \"Space (U+0020)\"\n * ```\n * @internal\n */\nfunction isWhiteSpace(code) {\n  return code === 0x0009 || code === 0x0020;\n}\n/**\n * ```\n * Digit :: one of\n *   - `0` `1` `2` `3` `4` `5` `6` `7` `8` `9`\n * ```\n * @internal\n */\n\nfunction isDigit(code) {\n  return code >= 0x0030 && code <= 0x0039;\n}\n/**\n * ```\n * Letter :: one of\n *   - `A` `B` `C` `D` `E` `F` `G` `H` `I` `J` `K` `L` `M`\n *   - `N` `O` `P` `Q` `R` `S` `T` `U` `V` `W` `X` `Y` `Z`\n *   - `a` `b` `c` `d` `e` `f` `g` `h` `i` `j` `k` `l` `m`\n *   - `n` `o` `p` `q` `r` `s` `t` `u` `v` `w` `x` `y` `z`\n * ```\n * @internal\n */\n\nfunction isLetter(code) {\n  return (\n    (code >= 0x0061 && code <= 0x007a) || // A-Z\n    (code >= 0x0041 && code <= 0x005a) // a-z\n  );\n}\n/**\n * ```\n * NameStart ::\n *   - Letter\n *   - `_`\n * ```\n * @internal\n */\n\nfunction isNameStart(code) {\n  return isLetter(code) || code === 0x005f;\n}\n/**\n * ```\n * NameContinue ::\n *   - Letter\n *   - Digit\n *   - `_`\n * ```\n * @internal\n */\n\nfunction isNameContinue(code) {\n  return isLetter(code) || isDigit(code) || code === 0x005f;\n}\n4/validation/rules/FragmentsOnCompositeTypesRule.d.ts\u0002 import type { ASTVisitor } from '../../language/visitor';\nimport type { ValidationContext } from '../ValidationContext';\n/**\n * Fragments on composite type\n *\n * Fragments use a type condition to determine if they apply, since fragments\n * can only be spread into a composite type (object, interface, or union), the\n * type condition must also be a composite type.\n *\n * See https://spec.graphql.org/draft/#sec-Fragments-On-Composite-Types\n */\nexport declare function FragmentsOnCompositeTypesRule(\n  context: ValidationContext,\n): ASTVisitor;\n-/validation/rules/UniqueDirectiveNamesRule.js\u0005_'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.UniqueDirectiveNamesRule = UniqueDirectiveNamesRule;\n\nvar _GraphQLError = require('../../error/GraphQLError.js');\n\n/**\n * Unique directive names\n *\n * A GraphQL document is only valid if all defined directives have unique names.\n */\nfunction UniqueDirectiveNamesRule(context) {\n  const knownDirectiveNames = Object.create(null);\n  const schema = context.getSchema();\n  return {\n    DirectiveDefinition(node) {\n      const directiveName = node.name.value;\n\n      if (\n        schema !== null &&\n        schema !== void 0 &&\n        schema.getDirective(directiveName)\n      ) {\n        context.reportError(\n          new _GraphQLError.GraphQLError(\n            `Directive \"@${directiveName}\" already exists in the schema. It cannot be redefined.`,\n            {\n              nodes: node.name,\n            },\n          ),\n        );\n        return;\n      }\n\n      if (knownDirectiveNames[directiveName]) {\n        context.reportError(\n          new _GraphQLError.GraphQLError(\n            `There can be only one directive named \"@${directiveName}\".`,\n            {\n              nodes: [knownDirectiveNames[directiveName], node.name],\n            },\n          ),\n        );\n      } else {\n        knownDirectiveNames[directiveName] = node.name;\n      }\n\n      return false;\n    },\n  };\n}\n/jsutils/isPromise.d.tsļ/**\n * Returns true if the value acts like a Promise, i.e. has a \"then\" function,\n * otherwise returns false.\n */\nexport declare function isPromise(value: any): value is Promise<unknown>;\n/error/index.d.ts\u0001\u0015export { GraphQLError, printError, formatError } from './GraphQLError';\nexport type {\n  GraphQLErrorOptions,\n  GraphQLFormattedError,\n  GraphQLErrorExtensions,\n} from './GraphQLError';\nexport { syntaxError } from './syntaxError';\nexport { locatedError } from './locatedError';\n%/utilities/getIntrospectionQuery.d.ts\u0017\u0017import type { Maybe } from '../jsutils/Maybe';\nimport type { DirectiveLocation } from '../language/directiveLocation';\nexport interface IntrospectionOptions {\n  /**\n   * Whether to include descriptions in the introspection result.\n   * Default: true\n   */\n  descriptions?: boolean;\n  /**\n   * Whether to include `specifiedByURL` in the introspection result.\n   * Default: false\n   */\n  specifiedByUrl?: boolean;\n  /**\n   * Whether to include `isRepeatable` flag on directives.\n   * Default: false\n   */\n  directiveIsRepeatable?: boolean;\n  /**\n   * Whether to include `description` field on schema.\n   * Default: false\n   */\n  schemaDescription?: boolean;\n  /**\n   * Whether target GraphQL server support deprecation of input values.\n   * Default: false\n   */\n  inputValueDeprecation?: boolean;\n}\n/**\n * Produce the GraphQL query recommended for a full schema introspection.\n * Accepts optional IntrospectionOptions.\n */\nexport declare function getIntrospectionQuery(\n  options?: IntrospectionOptions,\n): string;\nexport interface IntrospectionQuery {\n  readonly __schema: IntrospectionSchema;\n}\nexport interface IntrospectionSchema {\n  readonly description?: Maybe<string>;\n  readonly queryType: IntrospectionNamedTypeRef<IntrospectionObjectType>;\n  readonly mutationType: Maybe<\n    IntrospectionNamedTypeRef<IntrospectionObjectType>\n  >;\n  readonly subscriptionType: Maybe<\n    IntrospectionNamedTypeRef<IntrospectionObjectType>\n  >;\n  readonly types: ReadonlyArray<IntrospectionType>;\n  readonly directives: ReadonlyArray<IntrospectionDirective>;\n}\nexport declare type IntrospectionType =\n  | IntrospectionScalarType\n  | IntrospectionObjectType\n  | IntrospectionInterfaceType\n  | IntrospectionUnionType\n  | IntrospectionEnumType\n  | IntrospectionInputObjectType;\nexport declare type IntrospectionOutputType =\n  | IntrospectionScalarType\n  | IntrospectionObjectType\n  | IntrospectionInterfaceType\n  | IntrospectionUnionType\n  | IntrospectionEnumType;\nexport declare type IntrospectionInputType =\n  | IntrospectionScalarType\n  | IntrospectionEnumType\n  | IntrospectionInputObjectType;\nexport interface IntrospectionScalarType {\n  readonly kind: 'SCALAR';\n  readonly name: string;\n  readonly description?: Maybe<string>;\n  readonly specifiedByURL?: Maybe<string>;\n}\nexport interface IntrospectionObjectType {\n  readonly kind: 'OBJECT';\n  readonly name: string;\n  readonly description?: Maybe<string>;\n  readonly fields: ReadonlyArray<IntrospectionField>;\n  readonly interfaces: ReadonlyArray<\n    IntrospectionNamedTypeRef<IntrospectionInterfaceType>\n  >;\n}\nexport interface IntrospectionInterfaceType {\n  readonly kind: 'INTERFACE';\n  readonly name: string;\n  readonly description?: Maybe<string>;\n  readonly fields: ReadonlyArray<IntrospectionField>;\n  readonly interfaces: ReadonlyArray<\n    IntrospectionNamedTypeRef<IntrospectionInterfaceType>\n  >;\n  readonly possibleTypes: ReadonlyArray<\n    IntrospectionNamedTypeRef<IntrospectionObjectType>\n  >;\n}\nexport interface IntrospectionUnionType {\n  readonly kind: 'UNION';\n  readonly name: string;\n  readonly description?: Maybe<string>;\n  readonly possibleTypes: ReadonlyArray<\n    IntrospectionNamedTypeRef<IntrospectionObjectType>\n  >;\n}\nexport interface IntrospectionEnumType {\n  readonly kind: 'ENUM';\n  readonly name: string;\n  readonly description?: Maybe<string>;\n  readonly enumValues: ReadonlyArray<IntrospectionEnumValue>;\n}\nexport interface IntrospectionInputObjectType {\n  readonly kind: 'INPUT_OBJECT';\n  readonly name: string;\n  readonly description?: Maybe<string>;\n  readonly inputFields: ReadonlyArray<IntrospectionInputValue>;\n}\nexport interface IntrospectionListTypeRef<\n  T extends IntrospectionTypeRef = IntrospectionTypeRef,\n> {\n  readonly kind: 'LIST';\n  readonly ofType: T;\n}\nexport interface IntrospectionNonNullTypeRef<\n  T extends IntrospectionTypeRef = IntrospectionTypeRef,\n> {\n  readonly kind: 'NON_NULL';\n  readonly ofType: T;\n}\nexport declare type IntrospectionTypeRef =\n  | IntrospectionNamedTypeRef\n  | IntrospectionListTypeRef\n  | IntrospectionNonNullTypeRef<\n      IntrospectionNamedTypeRef | IntrospectionListTypeRef\n    >;\nexport declare type IntrospectionOutputTypeRef =\n  | IntrospectionNamedTypeRef<IntrospectionOutputType>\n  | IntrospectionListTypeRef<IntrospectionOutputTypeRef>\n  | IntrospectionNonNullTypeRef<\n      | IntrospectionNamedTypeRef<IntrospectionOutputType>\n      | IntrospectionListTypeRef<IntrospectionOutputTypeRef>\n    >;\nexport declare type IntrospectionInputTypeRef =\n  | IntrospectionNamedTypeRef<IntrospectionInputType>\n  | IntrospectionListTypeRef<IntrospectionInputTypeRef>\n  | IntrospectionNonNullTypeRef<\n      | IntrospectionNamedTypeRef<IntrospectionInputType>\n      | IntrospectionListTypeRef<IntrospectionInputTypeRef>\n    >;\nexport interface IntrospectionNamedTypeRef<\n  T extends IntrospectionType = IntrospectionType,\n> {\n  readonly kind: T['kind'];\n  readonly name: string;\n}\nexport interface IntrospectionField {\n  readonly name: string;\n  readonly description?: Maybe<string>;\n  readonly args: ReadonlyArray<IntrospectionInputValue>;\n  readonly type: IntrospectionOutputTypeRef;\n  readonly isDeprecated: boolean;\n  readonly deprecationReason: Maybe<string>;\n}\nexport interface IntrospectionInputValue {\n  readonly name: string;\n  readonly description?: Maybe<string>;\n  readonly type: IntrospectionInputTypeRef;\n  readonly defaultValue: Maybe<string>;\n  readonly isDeprecated?: boolean;\n  readonly deprecationReason?: Maybe<string>;\n}\nexport interface IntrospectionEnumValue {\n  readonly name: string;\n  readonly description?: Maybe<string>;\n  readonly isDeprecated: boolean;\n  readonly deprecationReason: Maybe<string>;\n}\nexport interface IntrospectionDirective {\n  readonly name: string;\n  readonly description?: Maybe<string>;\n  readonly isRepeatable?: boolean;\n  readonly locations: ReadonlyArray<DirectiveLocation>;\n  readonly args: ReadonlyArray<IntrospectionInputValue>;\n}\n4/validation/rules/UniqueFieldDefinitionNamesRule.mjs\bimport { GraphQLError } from '../../error/GraphQLError.mjs';\nimport {\n  isInputObjectType,\n  isInterfaceType,\n  isObjectType,\n} from '../../type/definition.mjs';\n\n/**\n * Unique field definition names\n *\n * A GraphQL complex type is only valid if all its fields are uniquely named.\n */\nexport function UniqueFieldDefinitionNamesRule(context) {\n  const schema = context.getSchema();\n  const existingTypeMap = schema ? schema.getTypeMap() : Object.create(null);\n  const knownFieldNames = Object.create(null);\n  return {\n    InputObjectTypeDefinition: checkFieldUniqueness,\n    InputObjectTypeExtension: checkFieldUniqueness,\n    InterfaceTypeDefinition: checkFieldUniqueness,\n    InterfaceTypeExtension: checkFieldUniqueness,\n    ObjectTypeDefinition: checkFieldUniqueness,\n    ObjectTypeExtension: checkFieldUniqueness,\n  };\n\n  function checkFieldUniqueness(node) {\n    var _node$fields;\n\n    const typeName = node.name.value;\n\n    if (!knownFieldNames[typeName]) {\n      knownFieldNames[typeName] = Object.create(null);\n    } // FIXME: https://github.com/graphql/graphql-js/issues/2203\n\n    /* c8 ignore next */\n\n    const fieldNodes =\n      (_node$fields = node.fields) !== null && _node$fields !== void 0\n        ? _node$fields\n        : [];\n    const fieldNames = knownFieldNames[typeName];\n\n    for (const fieldDef of fieldNodes) {\n      const fieldName = fieldDef.name.value;\n\n      if (hasField(existingTypeMap[typeName], fieldName)) {\n        context.reportError(\n          new GraphQLError(\n            `Field \"${typeName}.${fieldName}\" already exists in the schema. It cannot also be defined in this type extension.`,\n            {\n              nodes: fieldDef.name,\n            },\n          ),\n        );\n      } else if (fieldNames[fieldName]) {\n        context.reportError(\n          new GraphQLError(\n            `Field \"${typeName}.${fieldName}\" can only be defined once.`,\n            {\n              nodes: [fieldNames[fieldName], fieldDef.name],\n            },\n          ),\n        );\n      } else {\n        fieldNames[fieldName] = fieldDef.name;\n      }\n    }\n\n    return false;\n  }\n}\n\nfunction hasField(type, fieldName) {\n  if (isObjectType(type) || isInterfaceType(type) || isInputObjectType(type)) {\n    return type.getFields()[fieldName] != null;\n  }\n\n  return false;\n}\n/error/syntaxError.js\u0001'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.syntaxError = syntaxError;\n\nvar _GraphQLError = require('./GraphQLError.js');\n\n/**\n * Produces a GraphQLError representing a syntax error, containing useful\n * descriptive information about the syntax error's position in the source.\n */\nfunction syntaxError(source, position, description) {\n  return new _GraphQLError.GraphQLError(`Syntax Error: ${description}`, {\n    source,\n    positions: [position],\n  });\n}\n1/validation/rules/PossibleFragmentSpreadsRule.mjs\bimport { inspect } from '../../jsutils/inspect.mjs';\nimport { GraphQLError } from '../../error/GraphQLError.mjs';\nimport { isCompositeType } from '../../type/definition.mjs';\nimport { doTypesOverlap } from '../../utilities/typeComparators.mjs';\nimport { typeFromAST } from '../../utilities/typeFromAST.mjs';\n\n/**\n * Possible fragment spread\n *\n * A fragment spread is only valid if the type condition could ever possibly\n * be true: if there is a non-empty intersection of the possible parent types,\n * and possible types which pass the type condition.\n */\nexport function PossibleFragmentSpreadsRule(context) {\n  return {\n    InlineFragment(node) {\n      const fragType = context.getType();\n      const parentType = context.getParentType();\n\n      if (\n        isCompositeType(fragType) &&\n        isCompositeType(parentType) &&\n        !doTypesOverlap(context.getSchema(), fragType, parentType)\n      ) {\n        const parentTypeStr = inspect(parentType);\n        const fragTypeStr = inspect(fragType);\n        context.reportError(\n          new GraphQLError(\n            `Fragment cannot be spread here as objects of type \"${parentTypeStr}\" can never be of type \"${fragTypeStr}\".`,\n            {\n              nodes: node,\n            },\n          ),\n        );\n      }\n    },\n\n    FragmentSpread(node) {\n      const fragName = node.name.value;\n      const fragType = getFragmentType(context, fragName);\n      const parentType = context.getParentType();\n\n      if (\n        fragType &&\n        parentType &&\n        !doTypesOverlap(context.getSchema(), fragType, parentType)\n      ) {\n        const parentTypeStr = inspect(parentType);\n        const fragTypeStr = inspect(fragType);\n        context.reportError(\n          new GraphQLError(\n            `Fragment \"${fragName}\" cannot be spread here as objects of type \"${parentTypeStr}\" can never be of type \"${fragTypeStr}\".`,\n            {\n              nodes: node,\n            },\n          ),\n        );\n      }\n    },\n  };\n}\n\nfunction getFragmentType(context, name) {\n  const frag = context.getFragment(name);\n\n  if (frag) {\n    const type = typeFromAST(context.getSchema(), frag.typeCondition);\n\n    if (isCompositeType(type)) {\n      return type;\n    }\n  }\n}\n/validation/index.d.ts\u000bexport { validate } from './validate';\nexport { ValidationContext } from './ValidationContext';\nexport type { ValidationRule } from './ValidationContext';\nexport { specifiedRules } from './specifiedRules';\nexport { ExecutableDefinitionsRule } from './rules/ExecutableDefinitionsRule';\nexport { FieldsOnCorrectTypeRule } from './rules/FieldsOnCorrectTypeRule';\nexport { FragmentsOnCompositeTypesRule } from './rules/FragmentsOnCompositeTypesRule';\nexport { KnownArgumentNamesRule } from './rules/KnownArgumentNamesRule';\nexport { KnownDirectivesRule } from './rules/KnownDirectivesRule';\nexport { KnownFragmentNamesRule } from './rules/KnownFragmentNamesRule';\nexport { KnownTypeNamesRule } from './rules/KnownTypeNamesRule';\nexport { LoneAnonymousOperationRule } from './rules/LoneAnonymousOperationRule';\nexport { NoFragmentCyclesRule } from './rules/NoFragmentCyclesRule';\nexport { NoUndefinedVariablesRule } from './rules/NoUndefinedVariablesRule';\nexport { NoUnusedFragmentsRule } from './rules/NoUnusedFragmentsRule';\nexport { NoUnusedVariablesRule } from './rules/NoUnusedVariablesRule';\nexport { OverlappingFieldsCanBeMergedRule } from './rules/OverlappingFieldsCanBeMergedRule';\nexport { PossibleFragmentSpreadsRule } from './rules/PossibleFragmentSpreadsRule';\nexport { ProvidedRequiredArgumentsRule } from './rules/ProvidedRequiredArgumentsRule';\nexport { ScalarLeafsRule } from './rules/ScalarLeafsRule';\nexport { SingleFieldSubscriptionsRule } from './rules/SingleFieldSubscriptionsRule';\nexport { UniqueArgumentNamesRule } from './rules/UniqueArgumentNamesRule';\nexport { UniqueDirectivesPerLocationRule } from './rules/UniqueDirectivesPerLocationRule';\nexport { UniqueFragmentNamesRule } from './rules/UniqueFragmentNamesRule';\nexport { UniqueInputFieldNamesRule } from './rules/UniqueInputFieldNamesRule';\nexport { UniqueOperationNamesRule } from './rules/UniqueOperationNamesRule';\nexport { UniqueVariableNamesRule } from './rules/UniqueVariableNamesRule';\nexport { ValuesOfCorrectTypeRule } from './rules/ValuesOfCorrectTypeRule';\nexport { VariablesAreInputTypesRule } from './rules/VariablesAreInputTypesRule';\nexport { VariablesInAllowedPositionRule } from './rules/VariablesInAllowedPositionRule';\nexport { LoneSchemaDefinitionRule } from './rules/LoneSchemaDefinitionRule';\nexport { UniqueOperationTypesRule } from './rules/UniqueOperationTypesRule';\nexport { UniqueTypeNamesRule } from './rules/UniqueTypeNamesRule';\nexport { UniqueEnumValueNamesRule } from './rules/UniqueEnumValueNamesRule';\nexport { UniqueFieldDefinitionNamesRule } from './rules/UniqueFieldDefinitionNamesRule';\nexport { UniqueArgumentDefinitionNamesRule } from './rules/UniqueArgumentDefinitionNamesRule';\nexport { UniqueDirectiveNamesRule } from './rules/UniqueDirectiveNamesRule';\nexport { PossibleTypeExtensionsRule } from './rules/PossibleTypeExtensionsRule';\nexport { NoDeprecatedCustomRule } from './rules/custom/NoDeprecatedCustomRule';\nexport { NoSchemaIntrospectionCustomRule } from './rules/custom/NoSchemaIntrospectionCustomRule';\n/utilities/valueFromAST.d.ts\u0004\bimport type { Maybe } from '../jsutils/Maybe';\nimport type { ObjMap } from '../jsutils/ObjMap';\nimport type { ValueNode } from '../language/ast';\nimport type { GraphQLInputType } from '../type/definition';\n/**\n * Produces a JavaScript value given a GraphQL Value AST.\n *\n * A GraphQL type must be provided, which will be used to interpret different\n * GraphQL Value literals.\n *\n * Returns `undefined` when the value could not be validly coerced according to\n * the provided type.\n *\n * | GraphQL Value        | JSON Value    |\n * | -------------------- | ------------- |\n * | Input Object         | Object        |\n * | List                 | Array         |\n * | Boolean              | Boolean       |\n * | String               | String        |\n * | Int / Float          | Number        |\n * | Enum Value           | Unknown       |\n * | NullValue            | null          |\n *\n */\nexport declare function valueFromAST(\n  valueNode: Maybe<ValueNode>,\n  type: GraphQLInputType,\n  variables?: Maybe<ObjMap<unknown>>,\n): unknown;\n,/validation/rules/UniqueArgumentNamesRule.js\u0005Y'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.UniqueArgumentNamesRule = UniqueArgumentNamesRule;\n\nvar _groupBy = require('../../jsutils/groupBy.js');\n\nvar _GraphQLError = require('../../error/GraphQLError.js');\n\n/**\n * Unique argument names\n *\n * A GraphQL field or directive is only valid if all supplied arguments are\n * uniquely named.\n *\n * See https://spec.graphql.org/draft/#sec-Argument-Names\n */\nfunction UniqueArgumentNamesRule(context) {\n  return {\n    Field: checkArgUniqueness,\n    Directive: checkArgUniqueness,\n  };\n\n  function checkArgUniqueness(parentNode) {\n    var _parentNode$arguments;\n\n    // FIXME: https://github.com/graphql/graphql-js/issues/2203\n\n    /* c8 ignore next */\n    const argumentNodes =\n      (_parentNode$arguments = parentNode.arguments) !== null &&\n      _parentNode$arguments !== void 0\n        ? _parentNode$arguments\n        : [];\n    const seenArgs = (0, _groupBy.groupBy)(\n      argumentNodes,\n      (arg) => arg.name.value,\n    );\n\n    for (const [argName, argNodes] of seenArgs) {\n      if (argNodes.length > 1) {\n        context.reportError(\n          new _GraphQLError.GraphQLError(\n            `There can be only one argument named \"${argName}\".`,\n            {\n              nodes: argNodes.map((node) => node.name),\n            },\n          ),\n        );\n      }\n    }\n  }\n}\n/utilities/printSchema.js\u001e'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.printIntrospectionSchema = printIntrospectionSchema;\nexports.printSchema = printSchema;\nexports.printType = printType;\n\nvar _inspect = require('../jsutils/inspect.js');\n\nvar _invariant = require('../jsutils/invariant.js');\n\nvar _blockString = require('../language/blockString.js');\n\nvar _kinds = require('../language/kinds.js');\n\nvar _printer = require('../language/printer.js');\n\nvar _definition = require('../type/definition.js');\n\nvar _directives = require('../type/directives.js');\n\nvar _introspection = require('../type/introspection.js');\n\nvar _scalars = require('../type/scalars.js');\n\nvar _astFromValue = require('./astFromValue.js');\n\nfunction printSchema(schema) {\n  return printFilteredSchema(\n    schema,\n    (n) => !(0, _directives.isSpecifiedDirective)(n),\n    isDefinedType,\n  );\n}\n\nfunction printIntrospectionSchema(schema) {\n  return printFilteredSchema(\n    schema,\n    _directives.isSpecifiedDirective,\n    _introspection.isIntrospectionType,\n  );\n}\n\nfunction isDefinedType(type) {\n  return (\n    !(0, _scalars.isSpecifiedScalarType)(type) &&\n    !(0, _introspection.isIntrospectionType)(type)\n  );\n}\n\nfunction printFilteredSchema(schema, directiveFilter, typeFilter) {\n  const directives = schema.getDirectives().filter(directiveFilter);\n  const types = Object.values(schema.getTypeMap()).filter(typeFilter);\n  return [\n    printSchemaDefinition(schema),\n    ...directives.map((directive) => printDirective(directive)),\n    ...types.map((type) => printType(type)),\n  ]\n    .filter(Boolean)\n    .join('\\n\\n');\n}\n\nfunction printSchemaDefinition(schema) {\n  if (schema.description == null && isSchemaOfCommonNames(schema)) {\n    return;\n  }\n\n  const operationTypes = [];\n  const queryType = schema.getQueryType();\n\n  if (queryType) {\n    operationTypes.push(`  query: ${queryType.name}`);\n  }\n\n  const mutationType = schema.getMutationType();\n\n  if (mutationType) {\n    operationTypes.push(`  mutation: ${mutationType.name}`);\n  }\n\n  const subscriptionType = schema.getSubscriptionType();\n\n  if (subscriptionType) {\n    operationTypes.push(`  subscription: ${subscriptionType.name}`);\n  }\n\n  return printDescription(schema) + `schema {\\n${operationTypes.join('\\n')}\\n}`;\n}\n/**\n * GraphQL schema define root types for each type of operation. These types are\n * the same as any other type and can be named in any manner, however there is\n * a common naming convention:\n *\n * ```graphql\n *   schema {\n *     query: Query\n *     mutation: Mutation\n *     subscription: Subscription\n *   }\n * ```\n *\n * When using this naming convention, the schema description can be omitted.\n */\n\nfunction isSchemaOfCommonNames(schema) {\n  const queryType = schema.getQueryType();\n\n  if (queryType && queryType.name !== 'Query') {\n    return false;\n  }\n\n  const mutationType = schema.getMutationType();\n\n  if (mutationType && mutationType.name !== 'Mutation') {\n    return false;\n  }\n\n  const subscriptionType = schema.getSubscriptionType();\n\n  if (subscriptionType && subscriptionType.name !== 'Subscription') {\n    return false;\n  }\n\n  return true;\n}\n\nfunction printType(type) {\n  if ((0, _definition.isScalarType)(type)) {\n    return printScalar(type);\n  }\n\n  if ((0, _definition.isObjectType)(type)) {\n    return printObject(type);\n  }\n\n  if ((0, _definition.isInterfaceType)(type)) {\n    return printInterface(type);\n  }\n\n  if ((0, _definition.isUnionType)(type)) {\n    return printUnion(type);\n  }\n\n  if ((0, _definition.isEnumType)(type)) {\n    return printEnum(type);\n  }\n\n  if ((0, _definition.isInputObjectType)(type)) {\n    return printInputObject(type);\n  }\n  /* c8 ignore next 3 */\n  // Not reachable, all possible types have been considered.\n\n  false ||\n    (0, _invariant.invariant)(\n      false,\n      'Unexpected type: ' + (0, _inspect.inspect)(type),\n    );\n}\n\nfunction printScalar(type) {\n  return (\n    printDescription(type) + `scalar ${type.name}` + printSpecifiedByURL(type)\n  );\n}\n\nfunction printImplementedInterfaces(type) {\n  const interfaces = type.getInterfaces();\n  return interfaces.length\n    ? ' implements ' + interfaces.map((i) => i.name).join(' & ')\n    : '';\n}\n\nfunction printObject(type) {\n  return (\n    printDescription(type) +\n    `type ${type.name}` +\n    printImplementedInterfaces(type) +\n    printFields(type)\n  );\n}\n\nfunction printInterface(type) {\n  return (\n    printDescription(type) +\n    `interface ${type.name}` +\n    printImplementedInterfaces(type) +\n    printFields(type)\n  );\n}\n\nfunction printUnion(type) {\n  const types = type.getTypes();\n  const possibleTypes = types.length ? ' = ' + types.join(' | ') : '';\n  return printDescription(type) + 'union ' + type.name + possibleTypes;\n}\n\nfunction printEnum(type) {\n  const values = type\n    .getValues()\n    .map(\n      (value, i) =>\n        printDescription(value, '  ', !i) +\n        '  ' +\n        value.name +\n        printDeprecated(value.deprecationReason),\n    );\n  return printDescription(type) + `enum ${type.name}` + printBlock(values);\n}\n\nfunction printInputObject(type) {\n  const fields = Object.values(type.getFields()).map(\n    (f, i) => printDescription(f, '  ', !i) + '  ' + printInputValue(f),\n  );\n  return printDescription(type) + `input ${type.name}` + printBlock(fields);\n}\n\nfunction printFields(type) {\n  const fields = Object.values(type.getFields()).map(\n    (f, i) =>\n      printDescription(f, '  ', !i) +\n      '  ' +\n      f.name +\n      printArgs(f.args, '  ') +\n      ': ' +\n      String(f.type) +\n      printDeprecated(f.deprecationReason),\n  );\n  return printBlock(fields);\n}\n\nfunction printBlock(items) {\n  return items.length !== 0 ? ' {\\n' + items.join('\\n') + '\\n}' : '';\n}\n\nfunction printArgs(args, indentation = '') {\n  if (args.length === 0) {\n    return '';\n  } // If every arg does not have a description, print them on one line.\n\n  if (args.every((arg) => !arg.description)) {\n    return '(' + args.map(printInputValue).join(', ') + ')';\n  }\n\n  return (\n    '(\\n' +\n    args\n      .map(\n        (arg, i) =>\n          printDescription(arg, '  ' + indentation, !i) +\n          '  ' +\n          indentation +\n          printInputValue(arg),\n      )\n      .join('\\n') +\n    '\\n' +\n    indentation +\n    ')'\n  );\n}\n\nfunction printInputValue(arg) {\n  const defaultAST = (0, _astFromValue.astFromValue)(\n    arg.defaultValue,\n    arg.type,\n  );\n  let argDecl = arg.name + ': ' + String(arg.type);\n\n  if (defaultAST) {\n    argDecl += ` = ${(0, _printer.print)(defaultAST)}`;\n  }\n\n  return argDecl + printDeprecated(arg.deprecationReason);\n}\n\nfunction printDirective(directive) {\n  return (\n    printDescription(directive) +\n    'directive @' +\n    directive.name +\n    printArgs(directive.args) +\n    (directive.isRepeatable ? ' repeatable' : '') +\n    ' on ' +\n    directive.locations.join(' | ')\n  );\n}\n\nfunction printDeprecated(reason) {\n  if (reason == null) {\n    return '';\n  }\n\n  if (reason !== _directives.DEFAULT_DEPRECATION_REASON) {\n    const astValue = (0, _printer.print)({\n      kind: _kinds.Kind.STRING,\n      value: reason,\n    });\n    return ` @deprecated(reason: ${astValue})`;\n  }\n\n  return ' @deprecated';\n}\n\nfunction printSpecifiedByURL(scalar) {\n  if (scalar.specifiedByURL == null) {\n    return '';\n  }\n\n  const astValue = (0, _printer.print)({\n    kind: _kinds.Kind.STRING,\n    value: scalar.specifiedByURL,\n  });\n  return ` @specifiedBy(url: ${astValue})`;\n}\n\nfunction printDescription(def, indentation = '', firstInBlock = true) {\n  const { description } = def;\n\n  if (description == null) {\n    return '';\n  }\n\n  const blockString = (0, _printer.print)({\n    kind: _kinds.Kind.STRING,\n    value: description,\n    block: (0, _blockString.isPrintableAsBlockString)(description),\n  });\n  const prefix =\n    indentation && !firstInBlock ? '\\n' + indentation : indentation;\n  return prefix + blockString.replace(/\\n/g, '\\n' + indentation) + '\\n';\n}\n/graphql.d.ts\u000bimport type { Maybe } from './jsutils/Maybe';\nimport type { Source } from './language/source';\nimport type {\n  GraphQLFieldResolver,\n  GraphQLTypeResolver,\n} from './type/definition';\nimport type { GraphQLSchema } from './type/schema';\nimport type { ExecutionResult } from './execution/execute';\n/**\n * This is the primary entry point function for fulfilling GraphQL operations\n * by parsing, validating, and executing a GraphQL document along side a\n * GraphQL schema.\n *\n * More sophisticated GraphQL servers, such as those which persist queries,\n * may wish to separate the validation and execution phases to a static time\n * tooling step, and a server runtime step.\n *\n * Accepts either an object with named arguments, or individual arguments:\n *\n * schema:\n *    The GraphQL type system to use when validating and executing a query.\n * source:\n *    A GraphQL language formatted string representing the requested operation.\n * rootValue:\n *    The value provided as the first argument to resolver functions on the top\n *    level type (e.g. the query object type).\n * contextValue:\n *    The context value is provided as an argument to resolver functions after\n *    field arguments. It is used to pass shared information useful at any point\n *    during executing this query, for example the currently logged in user and\n *    connections to databases or other services.\n * variableValues:\n *    A mapping of variable name to runtime value to use for all variables\n *    defined in the requestString.\n * operationName:\n *    The name of the operation to use if requestString contains multiple\n *    possible operations. Can be omitted if requestString contains only\n *    one operation.\n * fieldResolver:\n *    A resolver function to use when one is not provided by the schema.\n *    If not provided, the default field resolver is used (which looks for a\n *    value or method on the source value with the field's name).\n * typeResolver:\n *    A type resolver function to use when none is provided by the schema.\n *    If not provided, the default type resolver is used (which looks for a\n *    `__typename` field or alternatively calls the `isTypeOf` method).\n */\nexport interface GraphQLArgs {\n  schema: GraphQLSchema;\n  source: string | Source;\n  rootValue?: unknown;\n  contextValue?: unknown;\n  variableValues?: Maybe<{\n    readonly [variable: string]: unknown;\n  }>;\n  operationName?: Maybe<string>;\n  fieldResolver?: Maybe<GraphQLFieldResolver<any, any>>;\n  typeResolver?: Maybe<GraphQLTypeResolver<any, any>>;\n}\nexport declare function graphql(args: GraphQLArgs): Promise<ExecutionResult>;\n/**\n * The graphqlSync function also fulfills GraphQL operations by parsing,\n * validating, and executing a GraphQL document along side a GraphQL schema.\n * However, it guarantees to complete synchronously (or throw an error) assuming\n * that all field resolvers are also synchronous.\n */\nexport declare function graphqlSync(args: GraphQLArgs): ExecutionResult;\n#/utilities/findBreakingChanges.d.ts\b\nimport type { GraphQLSchema } from '../type/schema';\ndeclare enum BreakingChangeType {\n  TYPE_REMOVED = 'TYPE_REMOVED',\n  TYPE_CHANGED_KIND = 'TYPE_CHANGED_KIND',\n  TYPE_REMOVED_FROM_UNION = 'TYPE_REMOVED_FROM_UNION',\n  VALUE_REMOVED_FROM_ENUM = 'VALUE_REMOVED_FROM_ENUM',\n  REQUIRED_INPUT_FIELD_ADDED = 'REQUIRED_INPUT_FIELD_ADDED',\n  IMPLEMENTED_INTERFACE_REMOVED = 'IMPLEMENTED_INTERFACE_REMOVED',\n  FIELD_REMOVED = 'FIELD_REMOVED',\n  FIELD_CHANGED_KIND = 'FIELD_CHANGED_KIND',\n  REQUIRED_ARG_ADDED = 'REQUIRED_ARG_ADDED',\n  ARG_REMOVED = 'ARG_REMOVED',\n  ARG_CHANGED_KIND = 'ARG_CHANGED_KIND',\n  DIRECTIVE_REMOVED = 'DIRECTIVE_REMOVED',\n  DIRECTIVE_ARG_REMOVED = 'DIRECTIVE_ARG_REMOVED',\n  REQUIRED_DIRECTIVE_ARG_ADDED = 'REQUIRED_DIRECTIVE_ARG_ADDED',\n  DIRECTIVE_REPEATABLE_REMOVED = 'DIRECTIVE_REPEATABLE_REMOVED',\n  DIRECTIVE_LOCATION_REMOVED = 'DIRECTIVE_LOCATION_REMOVED',\n}\nexport { BreakingChangeType };\ndeclare enum DangerousChangeType {\n  VALUE_ADDED_TO_ENUM = 'VALUE_ADDED_TO_ENUM',\n  TYPE_ADDED_TO_UNION = 'TYPE_ADDED_TO_UNION',\n  OPTIONAL_INPUT_FIELD_ADDED = 'OPTIONAL_INPUT_FIELD_ADDED',\n  OPTIONAL_ARG_ADDED = 'OPTIONAL_ARG_ADDED',\n  IMPLEMENTED_INTERFACE_ADDED = 'IMPLEMENTED_INTERFACE_ADDED',\n  ARG_DEFAULT_VALUE_CHANGE = 'ARG_DEFAULT_VALUE_CHANGE',\n}\nexport { DangerousChangeType };\nexport interface BreakingChange {\n  type: BreakingChangeType;\n  description: string;\n}\nexport interface DangerousChange {\n  type: DangerousChangeType;\n  description: string;\n}\n/**\n * Given two schemas, returns an Array containing descriptions of all the types\n * of breaking changes covered by the other functions down below.\n */\nexport declare function findBreakingChanges(\n  oldSchema: GraphQLSchema,\n  newSchema: GraphQLSchema,\n): Array<BreakingChange>;\n/**\n * Given two schemas, returns an Array containing descriptions of all the types\n * of potentially dangerous changes covered by the other functions down below.\n */\nexport declare function findDangerousChanges(\n  oldSchema: GraphQLSchema,\n  newSchema: GraphQLSchema,\n): Array<DangerousChange>;\n/type/index.js2q'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nObject.defineProperty(exports, 'DEFAULT_DEPRECATION_REASON', {\n  enumerable: true,\n  get: function () {\n    return _directives.DEFAULT_DEPRECATION_REASON;\n  },\n});\nObject.defineProperty(exports, 'GRAPHQL_MAX_INT', {\n  enumerable: true,\n  get: function () {\n    return _scalars.GRAPHQL_MAX_INT;\n  },\n});\nObject.defineProperty(exports, 'GRAPHQL_MIN_INT', {\n  enumerable: true,\n  get: function () {\n    return _scalars.GRAPHQL_MIN_INT;\n  },\n});\nObject.defineProperty(exports, 'GraphQLBoolean', {\n  enumerable: true,\n  get: function () {\n    return _scalars.GraphQLBoolean;\n  },\n});\nObject.defineProperty(exports, 'GraphQLDeprecatedDirective', {\n  enumerable: true,\n  get: function () {\n    return _directives.GraphQLDeprecatedDirective;\n  },\n});\nObject.defineProperty(exports, 'GraphQLDirective', {\n  enumerable: true,\n  get: function () {\n    return _directives.GraphQLDirective;\n  },\n});\nObject.defineProperty(exports, 'GraphQLEnumType', {\n  enumerable: true,\n  get: function () {\n    return _definition.GraphQLEnumType;\n  },\n});\nObject.defineProperty(exports, 'GraphQLFloat', {\n  enumerable: true,\n  get: function () {\n    return _scalars.GraphQLFloat;\n  },\n});\nObject.defineProperty(exports, 'GraphQLID', {\n  enumerable: true,\n  get: function () {\n    return _scalars.GraphQLID;\n  },\n});\nObject.defineProperty(exports, 'GraphQLIncludeDirective', {\n  enumerable: true,\n  get: function () {\n    return _directives.GraphQLIncludeDirective;\n  },\n});\nObject.defineProperty(exports, 'GraphQLInputObjectType', {\n  enumerable: true,\n  get: function () {\n    return _definition.GraphQLInputObjectType;\n  },\n});\nObject.defineProperty(exports, 'GraphQLInt', {\n  enumerable: true,\n  get: function () {\n    return _scalars.GraphQLInt;\n  },\n});\nObject.defineProperty(exports, 'GraphQLInterfaceType', {\n  enumerable: true,\n  get: function () {\n    return _definition.GraphQLInterfaceType;\n  },\n});\nObject.defineProperty(exports, 'GraphQLList', {\n  enumerable: true,\n  get: function () {\n    return _definition.GraphQLList;\n  },\n});\nObject.defineProperty(exports, 'GraphQLNonNull', {\n  enumerable: true,\n  get: function () {\n    return _definition.GraphQLNonNull;\n  },\n});\nObject.defineProperty(exports, 'GraphQLObjectType', {\n  enumerable: true,\n  get: function () {\n    return _definition.GraphQLObjectType;\n  },\n});\nObject.defineProperty(exports, 'GraphQLScalarType', {\n  enumerable: true,\n  get: function () {\n    return _definition.GraphQLScalarType;\n  },\n});\nObject.defineProperty(exports, 'GraphQLSchema', {\n  enumerable: true,\n  get: function () {\n    return _schema.GraphQLSchema;\n  },\n});\nObject.defineProperty(exports, 'GraphQLSkipDirective', {\n  enumerable: true,\n  get: function () {\n    return _directives.GraphQLSkipDirective;\n  },\n});\nObject.defineProperty(exports, 'GraphQLSpecifiedByDirective', {\n  enumerable: true,\n  get: function () {\n    return _directives.GraphQLSpecifiedByDirective;\n  },\n});\nObject.defineProperty(exports, 'GraphQLString', {\n  enumerable: true,\n  get: function () {\n    return _scalars.GraphQLString;\n  },\n});\nObject.defineProperty(exports, 'GraphQLUnionType', {\n  enumerable: true,\n  get: function () {\n    return _definition.GraphQLUnionType;\n  },\n});\nObject.defineProperty(exports, 'SchemaMetaFieldDef', {\n  enumerable: true,\n  get: function () {\n    return _introspection.SchemaMetaFieldDef;\n  },\n});\nObject.defineProperty(exports, 'TypeKind', {\n  enumerable: true,\n  get: function () {\n    return _introspection.TypeKind;\n  },\n});\nObject.defineProperty(exports, 'TypeMetaFieldDef', {\n  enumerable: true,\n  get: function () {\n    return _introspection.TypeMetaFieldDef;\n  },\n});\nObject.defineProperty(exports, 'TypeNameMetaFieldDef', {\n  enumerable: true,\n  get: function () {\n    return _introspection.TypeNameMetaFieldDef;\n  },\n});\nObject.defineProperty(exports, '__Directive', {\n  enumerable: true,\n  get: function () {\n    return _introspection.__Directive;\n  },\n});\nObject.defineProperty(exports, '__DirectiveLocation', {\n  enumerable: true,\n  get: function () {\n    return _introspection.__DirectiveLocation;\n  },\n});\nObject.defineProperty(exports, '__EnumValue', {\n  enumerable: true,\n  get: function () {\n    return _introspection.__EnumValue;\n  },\n});\nObject.defineProperty(exports, '__Field', {\n  enumerable: true,\n  get: function () {\n    return _introspection.__Field;\n  },\n});\nObject.defineProperty(exports, '__InputValue', {\n  enumerable: true,\n  get: function () {\n    return _introspection.__InputValue;\n  },\n});\nObject.defineProperty(exports, '__Schema', {\n  enumerable: true,\n  get: function () {\n    return _introspection.__Schema;\n  },\n});\nObject.defineProperty(exports, '__Type', {\n  enumerable: true,\n  get: function () {\n    return _introspection.__Type;\n  },\n});\nObject.defineProperty(exports, '__TypeKind', {\n  enumerable: true,\n  get: function () {\n    return _introspection.__TypeKind;\n  },\n});\nObject.defineProperty(exports, 'assertAbstractType', {\n  enumerable: true,\n  get: function () {\n    return _definition.assertAbstractType;\n  },\n});\nObject.defineProperty(exports, 'assertCompositeType', {\n  enumerable: true,\n  get: function () {\n    return _definition.assertCompositeType;\n  },\n});\nObject.defineProperty(exports, 'assertDirective', {\n  enumerable: true,\n  get: function () {\n    return _directives.assertDirective;\n  },\n});\nObject.defineProperty(exports, 'assertEnumType', {\n  enumerable: true,\n  get: function () {\n    return _definition.assertEnumType;\n  },\n});\nObject.defineProperty(exports, 'assertEnumValueName', {\n  enumerable: true,\n  get: function () {\n    return _assertName.assertEnumValueName;\n  },\n});\nObject.defineProperty(exports, 'assertInputObjectType', {\n  enumerable: true,\n  get: function () {\n    return _definition.assertInputObjectType;\n  },\n});\nObject.defineProperty(exports, 'assertInputType', {\n  enumerable: true,\n  get: function () {\n    return _definition.assertInputType;\n  },\n});\nObject.defineProperty(exports, 'assertInterfaceType', {\n  enumerable: true,\n  get: function () {\n    return _definition.assertInterfaceType;\n  },\n});\nObject.defineProperty(exports, 'assertLeafType', {\n  enumerable: true,\n  get: function () {\n    return _definition.assertLeafType;\n  },\n});\nObject.defineProperty(exports, 'assertListType', {\n  enumerable: true,\n  get: function () {\n    return _definition.assertListType;\n  },\n});\nObject.defineProperty(exports, 'assertName', {\n  enumerable: true,\n  get: function () {\n    return _assertName.assertName;\n  },\n});\nObject.defineProperty(exports, 'assertNamedType', {\n  enumerable: true,\n  get: function () {\n    return _definition.assertNamedType;\n  },\n});\nObject.defineProperty(exports, 'assertNonNullType', {\n  enumerable: true,\n  get: function () {\n    return _definition.assertNonNullType;\n  },\n});\nObject.defineProperty(exports, 'assertNullableType', {\n  enumerable: true,\n  get: function () {\n    return _definition.assertNullableType;\n  },\n});\nObject.defineProperty(exports, 'assertObjectType', {\n  enumerable: true,\n  get: function () {\n    return _definition.assertObjectType;\n  },\n});\nObject.defineProperty(exports, 'assertOutputType', {\n  enumerable: true,\n  get: function () {\n    return _definition.assertOutputType;\n  },\n});\nObject.defineProperty(exports, 'assertScalarType', {\n  enumerable: true,\n  get: function () {\n    return _definition.assertScalarType;\n  },\n});\nObject.defineProperty(exports, 'assertSchema', {\n  enumerable: true,\n  get: function () {\n    return _schema.assertSchema;\n  },\n});\nObject.defineProperty(exports, 'assertType', {\n  enumerable: true,\n  get: function () {\n    return _definition.assertType;\n  },\n});\nObject.defineProperty(exports, 'assertUnionType', {\n  enumerable: true,\n  get: function () {\n    return _definition.assertUnionType;\n  },\n});\nObject.defineProperty(exports, 'assertValidSchema', {\n  enumerable: true,\n  get: function () {\n    return _validate.assertValidSchema;\n  },\n});\nObject.defineProperty(exports, 'assertWrappingType', {\n  enumerable: true,\n  get: function () {\n    return _definition.assertWrappingType;\n  },\n});\nObject.defineProperty(exports, 'getNamedType', {\n  enumerable: true,\n  get: function () {\n    return _definition.getNamedType;\n  },\n});\nObject.defineProperty(exports, 'getNullableType', {\n  enumerable: true,\n  get: function () {\n    return _definition.getNullableType;\n  },\n});\nObject.defineProperty(exports, 'introspectionTypes', {\n  enumerable: true,\n  get: function () {\n    return _introspection.introspectionTypes;\n  },\n});\nObject.defineProperty(exports, 'isAbstractType', {\n  enumerable: true,\n  get: function () {\n    return _definition.isAbstractType;\n  },\n});\nObject.defineProperty(exports, 'isCompositeType', {\n  enumerable: true,\n  get: function () {\n    return _definition.isCompositeType;\n  },\n});\nObject.defineProperty(exports, 'isDirective', {\n  enumerable: true,\n  get: function () {\n    return _directives.isDirective;\n  },\n});\nObject.defineProperty(exports, 'isEnumType', {\n  enumerable: true,\n  get: function () {\n    return _definition.isEnumType;\n  },\n});\nObject.defineProperty(exports, 'isInputObjectType', {\n  enumerable: true,\n  get: function () {\n    return _definition.isInputObjectType;\n  },\n});\nObject.defineProperty(exports, 'isInputType', {\n  enumerable: true,\n  get: function () {\n    return _definition.isInputType;\n  },\n});\nObject.defineProperty(exports, 'isInterfaceType', {\n  enumerable: true,\n  get: function () {\n    return _definition.isInterfaceType;\n  },\n});\nObject.defineProperty(exports, 'isIntrospectionType', {\n  enumerable: true,\n  get: function () {\n    return _introspection.isIntrospectionType;\n  },\n});\nObject.defineProperty(exports, 'isLeafType', {\n  enumerable: true,\n  get: function () {\n    return _definition.isLeafType;\n  },\n});\nObject.defineProperty(exports, 'isListType', {\n  enumerable: true,\n  get: function () {\n    return _definition.isListType;\n  },\n});\nObject.defineProperty(exports, 'isNamedType', {\n  enumerable: true,\n  get: function () {\n    return _definition.isNamedType;\n  },\n});\nObject.defineProperty(exports, 'isNonNullType', {\n  enumerable: true,\n  get: function () {\n    return _definition.isNonNullType;\n  },\n});\nObject.defineProperty(exports, 'isNullableType', {\n  enumerable: true,\n  get: function () {\n    return _definition.isNullableType;\n  },\n});\nObject.defineProperty(exports, 'isObjectType', {\n  enumerable: true,\n  get: function () {\n    return _definition.isObjectType;\n  },\n});\nObject.defineProperty(exports, 'isOutputType', {\n  enumerable: true,\n  get: function () {\n    return _definition.isOutputType;\n  },\n});\nObject.defineProperty(exports, 'isRequiredArgument', {\n  enumerable: true,\n  get: function () {\n    return _definition.isRequiredArgument;\n  },\n});\nObject.defineProperty(exports, 'isRequiredInputField', {\n  enumerable: true,\n  get: function () {\n    return _definition.isRequiredInputField;\n  },\n});\nObject.defineProperty(exports, 'isScalarType', {\n  enumerable: true,\n  get: function () {\n    return _definition.isScalarType;\n  },\n});\nObject.defineProperty(exports, 'isSchema', {\n  enumerable: true,\n  get: function () {\n    return _schema.isSchema;\n  },\n});\nObject.defineProperty(exports, 'isSpecifiedDirective', {\n  enumerable: true,\n  get: function () {\n    return _directives.isSpecifiedDirective;\n  },\n});\nObject.defineProperty(exports, 'isSpecifiedScalarType', {\n  enumerable: true,\n  get: function () {\n    return _scalars.isSpecifiedScalarType;\n  },\n});\nObject.defineProperty(exports, 'isType', {\n  enumerable: true,\n  get: function () {\n    return _definition.isType;\n  },\n});\nObject.defineProperty(exports, 'isUnionType', {\n  enumerable: true,\n  get: function () {\n    return _definition.isUnionType;\n  },\n});\nObject.defineProperty(exports, 'isWrappingType', {\n  enumerable: true,\n  get: function () {\n    return _definition.isWrappingType;\n  },\n});\nObject.defineProperty(exports, 'resolveObjMapThunk', {\n  enumerable: true,\n  get: function () {\n    return _definition.resolveObjMapThunk;\n  },\n});\nObject.defineProperty(exports, 'resolveReadonlyArrayThunk', {\n  enumerable: true,\n  get: function () {\n    return _definition.resolveReadonlyArrayThunk;\n  },\n});\nObject.defineProperty(exports, 'specifiedDirectives', {\n  enumerable: true,\n  get: function () {\n    return _directives.specifiedDirectives;\n  },\n});\nObject.defineProperty(exports, 'specifiedScalarTypes', {\n  enumerable: true,\n  get: function () {\n    return _scalars.specifiedScalarTypes;\n  },\n});\nObject.defineProperty(exports, 'validateSchema', {\n  enumerable: true,\n  get: function () {\n    return _validate.validateSchema;\n  },\n});\n\nvar _schema = require('./schema.js');\n\nvar _definition = require('./definition.js');\n\nvar _directives = require('./directives.js');\n\nvar _scalars = require('./scalars.js');\n\nvar _introspection = require('./introspection.js');\n\nvar _validate = require('./validate.js');\n\nvar _assertName = require('./assertName.js');\n(/validation/rules/KnownDirectivesRule.js\u0014O'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.KnownDirectivesRule = KnownDirectivesRule;\n\nvar _inspect = require('../../jsutils/inspect.js');\n\nvar _invariant = require('../../jsutils/invariant.js');\n\nvar _GraphQLError = require('../../error/GraphQLError.js');\n\nvar _ast = require('../../language/ast.js');\n\nvar _directiveLocation = require('../../language/directiveLocation.js');\n\nvar _kinds = require('../../language/kinds.js');\n\nvar _directives = require('../../type/directives.js');\n\n/**\n * Known directives\n *\n * A GraphQL document is only valid if all `@directives` are known by the\n * schema and legally positioned.\n *\n * See https://spec.graphql.org/draft/#sec-Directives-Are-Defined\n */\nfunction KnownDirectivesRule(context) {\n  const locationsMap = Object.create(null);\n  const schema = context.getSchema();\n  const definedDirectives = schema\n    ? schema.getDirectives()\n    : _directives.specifiedDirectives;\n\n  for (const directive of definedDirectives) {\n    locationsMap[directive.name] = directive.locations;\n  }\n\n  const astDefinitions = context.getDocument().definitions;\n\n  for (const def of astDefinitions) {\n    if (def.kind === _kinds.Kind.DIRECTIVE_DEFINITION) {\n      locationsMap[def.name.value] = def.locations.map((name) => name.value);\n    }\n  }\n\n  return {\n    Directive(node, _key, _parent, _path, ancestors) {\n      const name = node.name.value;\n      const locations = locationsMap[name];\n\n      if (!locations) {\n        context.reportError(\n          new _GraphQLError.GraphQLError(`Unknown directive \"@${name}\".`, {\n            nodes: node,\n          }),\n        );\n        return;\n      }\n\n      const candidateLocation = getDirectiveLocationForASTPath(ancestors);\n\n      if (candidateLocation && !locations.includes(candidateLocation)) {\n        context.reportError(\n          new _GraphQLError.GraphQLError(\n            `Directive \"@${name}\" may not be used on ${candidateLocation}.`,\n            {\n              nodes: node,\n            },\n          ),\n        );\n      }\n    },\n  };\n}\n\nfunction getDirectiveLocationForASTPath(ancestors) {\n  const appliedTo = ancestors[ancestors.length - 1];\n  'kind' in appliedTo || (0, _invariant.invariant)(false);\n\n  switch (appliedTo.kind) {\n    case _kinds.Kind.OPERATION_DEFINITION:\n      return getDirectiveLocationForOperation(appliedTo.operation);\n\n    case _kinds.Kind.FIELD:\n      return _directiveLocation.DirectiveLocation.FIELD;\n\n    case _kinds.Kind.FRAGMENT_SPREAD:\n      return _directiveLocation.DirectiveLocation.FRAGMENT_SPREAD;\n\n    case _kinds.Kind.INLINE_FRAGMENT:\n      return _directiveLocation.DirectiveLocation.INLINE_FRAGMENT;\n\n    case _kinds.Kind.FRAGMENT_DEFINITION:\n      return _directiveLocation.DirectiveLocation.FRAGMENT_DEFINITION;\n\n    case _kinds.Kind.VARIABLE_DEFINITION:\n      return _directiveLocation.DirectiveLocation.VARIABLE_DEFINITION;\n\n    case _kinds.Kind.SCHEMA_DEFINITION:\n    case _kinds.Kind.SCHEMA_EXTENSION:\n      return _directiveLocation.DirectiveLocation.SCHEMA;\n\n    case _kinds.Kind.SCALAR_TYPE_DEFINITION:\n    case _kinds.Kind.SCALAR_TYPE_EXTENSION:\n      return _directiveLocation.DirectiveLocation.SCALAR;\n\n    case _kinds.Kind.OBJECT_TYPE_DEFINITION:\n    case _kinds.Kind.OBJECT_TYPE_EXTENSION:\n      return _directiveLocation.DirectiveLocation.OBJECT;\n\n    case _kinds.Kind.FIELD_DEFINITION:\n      return _directiveLocation.DirectiveLocation.FIELD_DEFINITION;\n\n    case _kinds.Kind.INTERFACE_TYPE_DEFINITION:\n    case _kinds.Kind.INTERFACE_TYPE_EXTENSION:\n      return _directiveLocation.DirectiveLocation.INTERFACE;\n\n    case _kinds.Kind.UNION_TYPE_DEFINITION:\n    case _kinds.Kind.UNION_TYPE_EXTENSION:\n      return _directiveLocation.DirectiveLocation.UNION;\n\n    case _kinds.Kind.ENUM_TYPE_DEFINITION:\n    case _kinds.Kind.ENUM_TYPE_EXTENSION:\n      return _directiveLocation.DirectiveLocation.ENUM;\n\n    case _kinds.Kind.ENUM_VALUE_DEFINITION:\n      return _directiveLocation.DirectiveLocation.ENUM_VALUE;\n\n    case _kinds.Kind.INPUT_OBJECT_TYPE_DEFINITION:\n    case _kinds.Kind.INPUT_OBJECT_TYPE_EXTENSION:\n      return _directiveLocation.DirectiveLocation.INPUT_OBJECT;\n\n    case _kinds.Kind.INPUT_VALUE_DEFINITION: {\n      const parentNode = ancestors[ancestors.length - 3];\n      'kind' in parentNode || (0, _invariant.invariant)(false);\n      return parentNode.kind === _kinds.Kind.INPUT_OBJECT_TYPE_DEFINITION\n        ? _directiveLocation.DirectiveLocation.INPUT_FIELD_DEFINITION\n        : _directiveLocation.DirectiveLocation.ARGUMENT_DEFINITION;\n    }\n    // Not reachable, all possible types have been considered.\n\n    /* c8 ignore next */\n\n    default:\n      false ||\n        (0, _invariant.invariant)(\n          false,\n          'Unexpected kind: ' + (0, _inspect.inspect)(appliedTo.kind),\n        );\n  }\n}\n\nfunction getDirectiveLocationForOperation(operation) {\n  switch (operation) {\n    case _ast.OperationTypeNode.QUERY:\n      return _directiveLocation.DirectiveLocation.QUERY;\n\n    case _ast.OperationTypeNode.MUTATION:\n      return _directiveLocation.DirectiveLocation.MUTATION;\n\n    case _ast.OperationTypeNode.SUBSCRIPTION:\n      return _directiveLocation.DirectiveLocation.SUBSCRIPTION;\n  }\n}\n/language/visitor.js&\u001e'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.BREAK = void 0;\nexports.getEnterLeaveForKind = getEnterLeaveForKind;\nexports.getVisitFn = getVisitFn;\nexports.visit = visit;\nexports.visitInParallel = visitInParallel;\n\nvar _devAssert = require('../jsutils/devAssert.js');\n\nvar _inspect = require('../jsutils/inspect.js');\n\nvar _ast = require('./ast.js');\n\nvar _kinds = require('./kinds.js');\n\nconst BREAK = Object.freeze({});\n/**\n * visit() will walk through an AST using a depth-first traversal, calling\n * the visitor's enter function at each node in the traversal, and calling the\n * leave function after visiting that node and all of its child nodes.\n *\n * By returning different values from the enter and leave functions, the\n * behavior of the visitor can be altered, including skipping over a sub-tree of\n * the AST (by returning false), editing the AST by returning a value or null\n * to remove the value, or to stop the whole traversal by returning BREAK.\n *\n * When using visit() to edit an AST, the original AST will not be modified, and\n * a new version of the AST with the changes applied will be returned from the\n * visit function.\n *\n * ```ts\n * const editedAST = visit(ast, {\n *   enter(node, key, parent, path, ancestors) {\n *     // @return\n *     //   undefined: no action\n *     //   false: skip visiting this node\n *     //   visitor.BREAK: stop visiting altogether\n *     //   null: delete this node\n *     //   any value: replace this node with the returned value\n *   },\n *   leave(node, key, parent, path, ancestors) {\n *     // @return\n *     //   undefined: no action\n *     //   false: no action\n *     //   visitor.BREAK: stop visiting altogether\n *     //   null: delete this node\n *     //   any value: replace this node with the returned value\n *   }\n * });\n * ```\n *\n * Alternatively to providing enter() and leave() functions, a visitor can\n * instead provide functions named the same as the kinds of AST nodes, or\n * enter/leave visitors at a named key, leading to three permutations of the\n * visitor API:\n *\n * 1) Named visitors triggered when entering a node of a specific kind.\n *\n * ```ts\n * visit(ast, {\n *   Kind(node) {\n *     // enter the \"Kind\" node\n *   }\n * })\n * ```\n *\n * 2) Named visitors that trigger upon entering and leaving a node of a specific kind.\n *\n * ```ts\n * visit(ast, {\n *   Kind: {\n *     enter(node) {\n *       // enter the \"Kind\" node\n *     }\n *     leave(node) {\n *       // leave the \"Kind\" node\n *     }\n *   }\n * })\n * ```\n *\n * 3) Generic visitors that trigger upon entering and leaving any node.\n *\n * ```ts\n * visit(ast, {\n *   enter(node) {\n *     // enter any node\n *   },\n *   leave(node) {\n *     // leave any node\n *   }\n * })\n * ```\n */\n\nexports.BREAK = BREAK;\n\nfunction visit(root, visitor, visitorKeys = _ast.QueryDocumentKeys) {\n  const enterLeaveMap = new Map();\n\n  for (const kind of Object.values(_kinds.Kind)) {\n    enterLeaveMap.set(kind, getEnterLeaveForKind(visitor, kind));\n  }\n  /* eslint-disable no-undef-init */\n\n  let stack = undefined;\n  let inArray = Array.isArray(root);\n  let keys = [root];\n  let index = -1;\n  let edits = [];\n  let node = root;\n  let key = undefined;\n  let parent = undefined;\n  const path = [];\n  const ancestors = [];\n  /* eslint-enable no-undef-init */\n\n  do {\n    index++;\n    const isLeaving = index === keys.length;\n    const isEdited = isLeaving && edits.length !== 0;\n\n    if (isLeaving) {\n      key = ancestors.length === 0 ? undefined : path[path.length - 1];\n      node = parent;\n      parent = ancestors.pop();\n\n      if (isEdited) {\n        if (inArray) {\n          node = node.slice();\n          let editOffset = 0;\n\n          for (const [editKey, editValue] of edits) {\n            const arrayKey = editKey - editOffset;\n\n            if (editValue === null) {\n              node.splice(arrayKey, 1);\n              editOffset++;\n            } else {\n              node[arrayKey] = editValue;\n            }\n          }\n        } else {\n          node = Object.defineProperties(\n            {},\n            Object.getOwnPropertyDescriptors(node),\n          );\n\n          for (const [editKey, editValue] of edits) {\n            node[editKey] = editValue;\n          }\n        }\n      }\n\n      index = stack.index;\n      keys = stack.keys;\n      edits = stack.edits;\n      inArray = stack.inArray;\n      stack = stack.prev;\n    } else if (parent) {\n      key = inArray ? index : keys[index];\n      node = parent[key];\n\n      if (node === null || node === undefined) {\n        continue;\n      }\n\n      path.push(key);\n    }\n\n    let result;\n\n    if (!Array.isArray(node)) {\n      var _enterLeaveMap$get, _enterLeaveMap$get2;\n\n      (0, _ast.isNode)(node) ||\n        (0, _devAssert.devAssert)(\n          false,\n          `Invalid AST Node: ${(0, _inspect.inspect)(node)}.`,\n        );\n      const visitFn = isLeaving\n        ? (_enterLeaveMap$get = enterLeaveMap.get(node.kind)) === null ||\n          _enterLeaveMap$get === void 0\n          ? void 0\n          : _enterLeaveMap$get.leave\n        : (_enterLeaveMap$get2 = enterLeaveMap.get(node.kind)) === null ||\n          _enterLeaveMap$get2 === void 0\n        ? void 0\n        : _enterLeaveMap$get2.enter;\n      result =\n        visitFn === null || visitFn === void 0\n          ? void 0\n          : visitFn.call(visitor, node, key, parent, path, ancestors);\n\n      if (result === BREAK) {\n        break;\n      }\n\n      if (result === false) {\n        if (!isLeaving) {\n          path.pop();\n          continue;\n        }\n      } else if (result !== undefined) {\n        edits.push([key, result]);\n\n        if (!isLeaving) {\n          if ((0, _ast.isNode)(result)) {\n            node = result;\n          } else {\n            path.pop();\n            continue;\n          }\n        }\n      }\n    }\n\n    if (result === undefined && isEdited) {\n      edits.push([key, node]);\n    }\n\n    if (isLeaving) {\n      path.pop();\n    } else {\n      var _node$kind;\n\n      stack = {\n        inArray,\n        index,\n        keys,\n        edits,\n        prev: stack,\n      };\n      inArray = Array.isArray(node);\n      keys = inArray\n        ? node\n        : (_node$kind = visitorKeys[node.kind]) !== null &&\n          _node$kind !== void 0\n        ? _node$kind\n        : [];\n      index = -1;\n      edits = [];\n\n      if (parent) {\n        ancestors.push(parent);\n      }\n\n      parent = node;\n    }\n  } while (stack !== undefined);\n\n  if (edits.length !== 0) {\n    // New root\n    return edits[edits.length - 1][1];\n  }\n\n  return root;\n}\n/**\n * Creates a new visitor instance which delegates to many visitors to run in\n * parallel. Each visitor will be visited for each node before moving on.\n *\n * If a prior visitor edits a node, no following visitors will see that node.\n */\n\nfunction visitInParallel(visitors) {\n  const skipping = new Array(visitors.length).fill(null);\n  const mergedVisitor = Object.create(null);\n\n  for (const kind of Object.values(_kinds.Kind)) {\n    let hasVisitor = false;\n    const enterList = new Array(visitors.length).fill(undefined);\n    const leaveList = new Array(visitors.length).fill(undefined);\n\n    for (let i = 0; i < visitors.length; ++i) {\n      const { enter, leave } = getEnterLeaveForKind(visitors[i], kind);\n      hasVisitor || (hasVisitor = enter != null || leave != null);\n      enterList[i] = enter;\n      leaveList[i] = leave;\n    }\n\n    if (!hasVisitor) {\n      continue;\n    }\n\n    const mergedEnterLeave = {\n      enter(...args) {\n        const node = args[0];\n\n        for (let i = 0; i < visitors.length; i++) {\n          if (skipping[i] === null) {\n            var _enterList$i;\n\n            const result =\n              (_enterList$i = enterList[i]) === null || _enterList$i === void 0\n                ? void 0\n                : _enterList$i.apply(visitors[i], args);\n\n            if (result === false) {\n              skipping[i] = node;\n            } else if (result === BREAK) {\n              skipping[i] = BREAK;\n            } else if (result !== undefined) {\n              return result;\n            }\n          }\n        }\n      },\n\n      leave(...args) {\n        const node = args[0];\n\n        for (let i = 0; i < visitors.length; i++) {\n          if (skipping[i] === null) {\n            var _leaveList$i;\n\n            const result =\n              (_leaveList$i = leaveList[i]) === null || _leaveList$i === void 0\n                ? void 0\n                : _leaveList$i.apply(visitors[i], args);\n\n            if (result === BREAK) {\n              skipping[i] = BREAK;\n            } else if (result !== undefined && result !== false) {\n              return result;\n            }\n          } else if (skipping[i] === node) {\n            skipping[i] = null;\n          }\n        }\n      },\n    };\n    mergedVisitor[kind] = mergedEnterLeave;\n  }\n\n  return mergedVisitor;\n}\n/**\n * Given a visitor instance and a node kind, return EnterLeaveVisitor for that kind.\n */\n\nfunction getEnterLeaveForKind(visitor, kind) {\n  const kindVisitor = visitor[kind];\n\n  if (typeof kindVisitor === 'object') {\n    // { Kind: { enter() {}, leave() {} } }\n    return kindVisitor;\n  } else if (typeof kindVisitor === 'function') {\n    // { Kind() {} }\n    return {\n      enter: kindVisitor,\n      leave: undefined,\n    };\n  } // { enter() {}, leave() {} }\n\n  return {\n    enter: visitor.enter,\n    leave: visitor.leave,\n  };\n}\n/**\n * Given a visitor instance, if it is leaving or not, and a node kind, return\n * the function the visitor runtime should call.\n *\n * @deprecated Please use `getEnterLeaveForKind` instead. Will be removed in v17\n */\n\n/* c8 ignore next 8 */\n\nfunction getVisitFn(visitor, kind, isLeaving) {\n  const { enter, leave } = getEnterLeaveForKind(visitor, kind);\n  return isLeaving ? leave : enter;\n}\n/language/printer.js%2'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.print = print;\n\nvar _blockString = require('./blockString.js');\n\nvar _printString = require('./printString.js');\n\nvar _visitor = require('./visitor.js');\n\n/**\n * Converts an AST into a string, using one set of reasonable\n * formatting rules.\n */\nfunction print(ast) {\n  return (0, _visitor.visit)(ast, printDocASTReducer);\n}\n\nconst MAX_LINE_LENGTH = 80;\nconst printDocASTReducer = {\n  Name: {\n    leave: (node) => node.value,\n  },\n  Variable: {\n    leave: (node) => '$' + node.name,\n  },\n  // Document\n  Document: {\n    leave: (node) => join(node.definitions, '\\n\\n'),\n  },\n  OperationDefinition: {\n    leave(node) {\n      const varDefs = wrap('(', join(node.variableDefinitions, ', '), ')');\n      const prefix = join(\n        [\n          node.operation,\n          join([node.name, varDefs]),\n          join(node.directives, ' '),\n        ],\n        ' ',\n      ); // Anonymous queries with no directives or variable definitions can use\n      // the query short form.\n\n      return (prefix === 'query' ? '' : prefix + ' ') + node.selectionSet;\n    },\n  },\n  VariableDefinition: {\n    leave: ({ variable, type, defaultValue, directives }) =>\n      variable +\n      ': ' +\n      type +\n      wrap(' = ', defaultValue) +\n      wrap(' ', join(directives, ' ')),\n  },\n  SelectionSet: {\n    leave: ({ selections }) => block(selections),\n  },\n  Field: {\n    leave({ alias, name, arguments: args, directives, selectionSet }) {\n      const prefix = wrap('', alias, ': ') + name;\n      let argsLine = prefix + wrap('(', join(args, ', '), ')');\n\n      if (argsLine.length > MAX_LINE_LENGTH) {\n        argsLine = prefix + wrap('(\\n', indent(join(args, '\\n')), '\\n)');\n      }\n\n      return join([argsLine, join(directives, ' '), selectionSet], ' ');\n    },\n  },\n  Argument: {\n    leave: ({ name, value }) => name + ': ' + value,\n  },\n  // Fragments\n  FragmentSpread: {\n    leave: ({ name, directives }) =>\n      '...' + name + wrap(' ', join(directives, ' ')),\n  },\n  InlineFragment: {\n    leave: ({ typeCondition, directives, selectionSet }) =>\n      join(\n        [\n          '...',\n          wrap('on ', typeCondition),\n          join(directives, ' '),\n          selectionSet,\n        ],\n        ' ',\n      ),\n  },\n  FragmentDefinition: {\n    leave: (\n      { name, typeCondition, variableDefinitions, directives, selectionSet }, // Note: fragment variable definitions are experimental and may be changed\n    ) =>\n      // or removed in the future.\n      `fragment ${name}${wrap('(', join(variableDefinitions, ', '), ')')} ` +\n      `on ${typeCondition} ${wrap('', join(directives, ' '), ' ')}` +\n      selectionSet,\n  },\n  // Value\n  IntValue: {\n    leave: ({ value }) => value,\n  },\n  FloatValue: {\n    leave: ({ value }) => value,\n  },\n  StringValue: {\n    leave: ({ value, block: isBlockString }) =>\n      isBlockString\n        ? (0, _blockString.printBlockString)(value)\n        : (0, _printString.printString)(value),\n  },\n  BooleanValue: {\n    leave: ({ value }) => (value ? 'true' : 'false'),\n  },\n  NullValue: {\n    leave: () => 'null',\n  },\n  EnumValue: {\n    leave: ({ value }) => value,\n  },\n  ListValue: {\n    leave: ({ values }) => '[' + join(values, ', ') + ']',\n  },\n  ObjectValue: {\n    leave: ({ fields }) => '{' + join(fields, ', ') + '}',\n  },\n  ObjectField: {\n    leave: ({ name, value }) => name + ': ' + value,\n  },\n  // Directive\n  Directive: {\n    leave: ({ name, arguments: args }) =>\n      '@' + name + wrap('(', join(args, ', '), ')'),\n  },\n  // Type\n  NamedType: {\n    leave: ({ name }) => name,\n  },\n  ListType: {\n    leave: ({ type }) => '[' + type + ']',\n  },\n  NonNullType: {\n    leave: ({ type }) => type + '!',\n  },\n  // Type System Definitions\n  SchemaDefinition: {\n    leave: ({ description, directives, operationTypes }) =>\n      wrap('', description, '\\n') +\n      join(['schema', join(directives, ' '), block(operationTypes)], ' '),\n  },\n  OperationTypeDefinition: {\n    leave: ({ operation, type }) => operation + ': ' + type,\n  },\n  ScalarTypeDefinition: {\n    leave: ({ description, name, directives }) =>\n      wrap('', description, '\\n') +\n      join(['scalar', name, join(directives, ' ')], ' '),\n  },\n  ObjectTypeDefinition: {\n    leave: ({ description, name, interfaces, directives, fields }) =>\n      wrap('', description, '\\n') +\n      join(\n        [\n          'type',\n          name,\n          wrap('implements ', join(interfaces, ' & ')),\n          join(directives, ' '),\n          block(fields),\n        ],\n        ' ',\n      ),\n  },\n  FieldDefinition: {\n    leave: ({ description, name, arguments: args, type, directives }) =>\n      wrap('', description, '\\n') +\n      name +\n      (hasMultilineItems(args)\n        ? wrap('(\\n', indent(join(args, '\\n')), '\\n)')\n        : wrap('(', join(args, ', '), ')')) +\n      ': ' +\n      type +\n      wrap(' ', join(directives, ' ')),\n  },\n  InputValueDefinition: {\n    leave: ({ description, name, type, defaultValue, directives }) =>\n      wrap('', description, '\\n') +\n      join(\n        [name + ': ' + type, wrap('= ', defaultValue), join(directives, ' ')],\n        ' ',\n      ),\n  },\n  InterfaceTypeDefinition: {\n    leave: ({ description, name, interfaces, directives, fields }) =>\n      wrap('', description, '\\n') +\n      join(\n        [\n          'interface',\n          name,\n          wrap('implements ', join(interfaces, ' & ')),\n          join(directives, ' '),\n          block(fields),\n        ],\n        ' ',\n      ),\n  },\n  UnionTypeDefinition: {\n    leave: ({ description, name, directives, types }) =>\n      wrap('', description, '\\n') +\n      join(\n        ['union', name, join(directives, ' '), wrap('= ', join(types, ' | '))],\n        ' ',\n      ),\n  },\n  EnumTypeDefinition: {\n    leave: ({ description, name, directives, values }) =>\n      wrap('', description, '\\n') +\n      join(['enum', name, join(directives, ' '), block(values)], ' '),\n  },\n  EnumValueDefinition: {\n    leave: ({ description, name, directives }) =>\n      wrap('', description, '\\n') + join([name, join(directives, ' ')], ' '),\n  },\n  InputObjectTypeDefinition: {\n    leave: ({ description, name, directives, fields }) =>\n      wrap('', description, '\\n') +\n      join(['input', name, join(directives, ' '), block(fields)], ' '),\n  },\n  DirectiveDefinition: {\n    leave: ({ description, name, arguments: args, repeatable, locations }) =>\n      wrap('', description, '\\n') +\n      'directive @' +\n      name +\n      (hasMultilineItems(args)\n        ? wrap('(\\n', indent(join(args, '\\n')), '\\n)')\n        : wrap('(', join(args, ', '), ')')) +\n      (repeatable ? ' repeatable' : '') +\n      ' on ' +\n      join(locations, ' | '),\n  },\n  SchemaExtension: {\n    leave: ({ directives, operationTypes }) =>\n      join(\n        ['extend schema', join(directives, ' '), block(operationTypes)],\n        ' ',\n      ),\n  },\n  ScalarTypeExtension: {\n    leave: ({ name, directives }) =>\n      join(['extend scalar', name, join(directives, ' ')], ' '),\n  },\n  ObjectTypeExtension: {\n    leave: ({ name, interfaces, directives, fields }) =>\n      join(\n        [\n          'extend type',\n          name,\n          wrap('implements ', join(interfaces, ' & ')),\n          join(directives, ' '),\n          block(fields),\n        ],\n        ' ',\n      ),\n  },\n  InterfaceTypeExtension: {\n    leave: ({ name, interfaces, directives, fields }) =>\n      join(\n        [\n          'extend interface',\n          name,\n          wrap('implements ', join(interfaces, ' & ')),\n          join(directives, ' '),\n          block(fields),\n        ],\n        ' ',\n      ),\n  },\n  UnionTypeExtension: {\n    leave: ({ name, directives, types }) =>\n      join(\n        [\n          'extend union',\n          name,\n          join(directives, ' '),\n          wrap('= ', join(types, ' | ')),\n        ],\n        ' ',\n      ),\n  },\n  EnumTypeExtension: {\n    leave: ({ name, directives, values }) =>\n      join(['extend enum', name, join(directives, ' '), block(values)], ' '),\n  },\n  InputObjectTypeExtension: {\n    leave: ({ name, directives, fields }) =>\n      join(['extend input', name, join(directives, ' '), block(fields)], ' '),\n  },\n};\n/**\n * Given maybeArray, print an empty string if it is null or empty, otherwise\n * print all items together separated by separator if provided\n */\n\nfunction join(maybeArray, separator = '') {\n  var _maybeArray$filter$jo;\n\n  return (_maybeArray$filter$jo =\n    maybeArray === null || maybeArray === void 0\n      ? void 0\n      : maybeArray.filter((x) => x).join(separator)) !== null &&\n    _maybeArray$filter$jo !== void 0\n    ? _maybeArray$filter$jo\n    : '';\n}\n/**\n * Given array, print each item on its own line, wrapped in an indented `{ }` block.\n */\n\nfunction block(array) {\n  return wrap('{\\n', indent(join(array, '\\n')), '\\n}');\n}\n/**\n * If maybeString is not null or empty, then wrap with start and end, otherwise print an empty string.\n */\n\nfunction wrap(start, maybeString, end = '') {\n  return maybeString != null && maybeString !== ''\n    ? start + maybeString + end\n    : '';\n}\n\nfunction indent(str) {\n  return wrap('  ', str.replace(/\\n/g, '\\n  '));\n}\n\nfunction hasMultilineItems(maybeArray) {\n  var _maybeArray$some;\n\n  // FIXME: https://github.com/graphql/graphql-js/issues/2203\n\n  /* c8 ignore next */\n  return (_maybeArray$some =\n    maybeArray === null || maybeArray === void 0\n      ? void 0\n      : maybeArray.some((str) => str.includes('\\n'))) !== null &&\n    _maybeArray$some !== void 0\n    ? _maybeArray$some\n    : false;\n}\n/jsutils/keyValMap.mjs\u0002f/**\n * Creates a keyed JS object from an array, given a function to produce the keys\n * and a function to produce the values from each item in the array.\n * ```ts\n * const phoneBook = [\n *   { name: 'Jon', num: '555-1234' },\n *   { name: 'Jenny', num: '867-5309' }\n * ]\n *\n * // { Jon: '555-1234', Jenny: '867-5309' }\n * const phonesByName = keyValMap(\n *   phoneBook,\n *   entry => entry.name,\n *   entry => entry.num\n * )\n * ```\n */\nexport function keyValMap(list, keyFn, valFn) {\n  const result = Object.create(null);\n\n  for (const item of list) {\n    result[keyFn(item)] = valFn(item);\n  }\n\n  return result;\n}\n/jsutils/invariant.js\u0001L'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.invariant = invariant;\n\nfunction invariant(condition, message) {\n  const booleanCondition = Boolean(condition);\n\n  if (!booleanCondition) {\n    throw new Error(\n      message != null ? message : 'Unexpected invariant triggered.',\n    );\n  }\n}\n%/validation/rules/ScalarLeafsRule.mjs\u0005zimport { inspect } from '../../jsutils/inspect.mjs';\nimport { GraphQLError } from '../../error/GraphQLError.mjs';\nimport { getNamedType, isLeafType } from '../../type/definition.mjs';\n\n/**\n * Scalar leafs\n *\n * A GraphQL document is valid only if all leaf fields (fields without\n * sub selections) are of scalar or enum types.\n */\nexport function ScalarLeafsRule(context) {\n  return {\n    Field(node) {\n      const type = context.getType();\n      const selectionSet = node.selectionSet;\n\n      if (type) {\n        if (isLeafType(getNamedType(type))) {\n          if (selectionSet) {\n            const fieldName = node.name.value;\n            const typeStr = inspect(type);\n            context.reportError(\n              new GraphQLError(\n                `Field \"${fieldName}\" must not have a selection since type \"${typeStr}\" has no subfields.`,\n                {\n                  nodes: selectionSet,\n                },\n              ),\n            );\n          }\n        } else if (!selectionSet) {\n          const fieldName = node.name.value;\n          const typeStr = inspect(type);\n          context.reportError(\n            new GraphQLError(\n              `Field \"${fieldName}\" of type \"${typeStr}\" must have a selection of subfields. Did you mean \"${fieldName} { ... }\"?`,\n              {\n                nodes: node,\n              },\n            ),\n          );\n        }\n      }\n    },\n  };\n}\n0/validation/rules/UniqueInputFieldNamesRule.d.ts\u0001import type { ASTVisitor } from '../../language/visitor';\nimport type { ASTValidationContext } from '../ValidationContext';\n/**\n * Unique input field names\n *\n * A GraphQL input object value is only valid if all supplied fields are\n * uniquely named.\n *\n * See https://spec.graphql.org/draft/#sec-Input-Object-Field-Uniqueness\n */\nexport declare function UniqueInputFieldNamesRule(\n  context: ASTValidationContext,\n): ASTVisitor;\n/utilities/valueFromAST.js\u0015\n'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.valueFromAST = valueFromAST;\n\nvar _inspect = require('../jsutils/inspect.js');\n\nvar _invariant = require('../jsutils/invariant.js');\n\nvar _keyMap = require('../jsutils/keyMap.js');\n\nvar _kinds = require('../language/kinds.js');\n\nvar _definition = require('../type/definition.js');\n\n/**\n * Produces a JavaScript value given a GraphQL Value AST.\n *\n * A GraphQL type must be provided, which will be used to interpret different\n * GraphQL Value literals.\n *\n * Returns `undefined` when the value could not be validly coerced according to\n * the provided type.\n *\n * | GraphQL Value        | JSON Value    |\n * | -------------------- | ------------- |\n * | Input Object         | Object        |\n * | List                 | Array         |\n * | Boolean              | Boolean       |\n * | String               | String        |\n * | Int / Float          | Number        |\n * | Enum Value           | Unknown       |\n * | NullValue            | null          |\n *\n */\nfunction valueFromAST(valueNode, type, variables) {\n  if (!valueNode) {\n    // When there is no node, then there is also no value.\n    // Importantly, this is different from returning the value null.\n    return;\n  }\n\n  if (valueNode.kind === _kinds.Kind.VARIABLE) {\n    const variableName = valueNode.name.value;\n\n    if (variables == null || variables[variableName] === undefined) {\n      // No valid return value.\n      return;\n    }\n\n    const variableValue = variables[variableName];\n\n    if (variableValue === null && (0, _definition.isNonNullType)(type)) {\n      return; // Invalid: intentionally return no value.\n    } // Note: This does no further checking that this variable is correct.\n    // This assumes that this query has been validated and the variable\n    // usage here is of the correct type.\n\n    return variableValue;\n  }\n\n  if ((0, _definition.isNonNullType)(type)) {\n    if (valueNode.kind === _kinds.Kind.NULL) {\n      return; // Invalid: intentionally return no value.\n    }\n\n    return valueFromAST(valueNode, type.ofType, variables);\n  }\n\n  if (valueNode.kind === _kinds.Kind.NULL) {\n    // This is explicitly returning the value null.\n    return null;\n  }\n\n  if ((0, _definition.isListType)(type)) {\n    const itemType = type.ofType;\n\n    if (valueNode.kind === _kinds.Kind.LIST) {\n      const coercedValues = [];\n\n      for (const itemNode of valueNode.values) {\n        if (isMissingVariable(itemNode, variables)) {\n          // If an array contains a missing variable, it is either coerced to\n          // null or if the item type is non-null, it considered invalid.\n          if ((0, _definition.isNonNullType)(itemType)) {\n            return; // Invalid: intentionally return no value.\n          }\n\n          coercedValues.push(null);\n        } else {\n          const itemValue = valueFromAST(itemNode, itemType, variables);\n\n          if (itemValue === undefined) {\n            return; // Invalid: intentionally return no value.\n          }\n\n          coercedValues.push(itemValue);\n        }\n      }\n\n      return coercedValues;\n    }\n\n    const coercedValue = valueFromAST(valueNode, itemType, variables);\n\n    if (coercedValue === undefined) {\n      return; // Invalid: intentionally return no value.\n    }\n\n    return [coercedValue];\n  }\n\n  if ((0, _definition.isInputObjectType)(type)) {\n    if (valueNode.kind !== _kinds.Kind.OBJECT) {\n      return; // Invalid: intentionally return no value.\n    }\n\n    const coercedObj = Object.create(null);\n    const fieldNodes = (0, _keyMap.keyMap)(\n      valueNode.fields,\n      (field) => field.name.value,\n    );\n\n    for (const field of Object.values(type.getFields())) {\n      const fieldNode = fieldNodes[field.name];\n\n      if (!fieldNode || isMissingVariable(fieldNode.value, variables)) {\n        if (field.defaultValue !== undefined) {\n          coercedObj[field.name] = field.defaultValue;\n        } else if ((0, _definition.isNonNullType)(field.type)) {\n          return; // Invalid: intentionally return no value.\n        }\n\n        continue;\n      }\n\n      const fieldValue = valueFromAST(fieldNode.value, field.type, variables);\n\n      if (fieldValue === undefined) {\n        return; // Invalid: intentionally return no value.\n      }\n\n      coercedObj[field.name] = fieldValue;\n    }\n\n    return coercedObj;\n  }\n\n  if ((0, _definition.isLeafType)(type)) {\n    // Scalars and Enums fulfill parsing a literal value via parseLiteral().\n    // Invalid values represent a failure to parse correctly, in which case\n    // no value is returned.\n    let result;\n\n    try {\n      result = type.parseLiteral(valueNode, variables);\n    } catch (_error) {\n      return; // Invalid: intentionally return no value.\n    }\n\n    if (result === undefined) {\n      return; // Invalid: intentionally return no value.\n    }\n\n    return result;\n  }\n  /* c8 ignore next 3 */\n  // Not reachable, all possible input types have been considered.\n\n  false ||\n    (0, _invariant.invariant)(\n      false,\n      'Unexpected input type: ' + (0, _inspect.inspect)(type),\n    );\n} // Returns true if the provided valueNode is a variable which is not defined\n// in the set of variables.\n\nfunction isMissingVariable(valueNode, variables) {\n  return (\n    valueNode.kind === _kinds.Kind.VARIABLE &&\n    (variables == null || variables[valueNode.name.value] === undefined)\n  );\n}\n/jsutils/toObjMap.js\u0001'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.toObjMap = toObjMap;\n\nfunction toObjMap(obj) {\n  if (obj == null) {\n    return Object.create(null);\n  }\n\n  if (Object.getPrototypeOf(obj) === null) {\n    return obj;\n  }\n\n  const map = Object.create(null);\n\n  for (const [key, value] of Object.entries(obj)) {\n    map[key] = value;\n  }\n\n  return map;\n}\n/jsutils/invariant.mjsexport function invariant(condition, message) {\n  const booleanCondition = Boolean(condition);\n\n  if (!booleanCondition) {\n    throw new Error(\n      message != null ? message : 'Unexpected invariant triggered.',\n    );\n  }\n}\n/jsutils/suggestionList.d.ts\u0001\u0010/**\n * Given an invalid input string and a list of valid options, returns a filtered\n * list of valid options sorted based on their similarity with the input.\n */\nexport declare function suggestionList(\n  input: string,\n  options: ReadonlyArray<string>,\n): Array<string>;\n/utilities/astFromValue.d.ts\u0003import type { Maybe } from '../jsutils/Maybe';\nimport type { ValueNode } from '../language/ast';\nimport type { GraphQLInputType } from '../type/definition';\n/**\n * Produces a GraphQL Value AST given a JavaScript object.\n * Function will match JavaScript/JSON values to GraphQL AST schema format\n * by using suggested GraphQLInputType. For example:\n *\n *     astFromValue(\"value\", GraphQLString)\n *\n * A GraphQL type must be provided, which will be used to interpret different\n * JavaScript values.\n *\n * | JSON Value    | GraphQL Value        |\n * | ------------- | -------------------- |\n * | Object        | Input Object         |\n * | Array         | List                 |\n * | Boolean       | Boolean              |\n * | String        | String / Enum Value  |\n * | Number        | Int / Float          |\n * | Unknown       | Enum Value           |\n * | null          | NullValue            |\n *\n */\nexport declare function astFromValue(\n  value: unknown,\n  type: GraphQLInputType,\n): Maybe<ValueNode>;\n-/validation/rules/UniqueEnumValueNamesRule.js\bC'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.UniqueEnumValueNamesRule = UniqueEnumValueNamesRule;\n\nvar _GraphQLError = require('../../error/GraphQLError.js');\n\nvar _definition = require('../../type/definition.js');\n\n/**\n * Unique enum value names\n *\n * A GraphQL enum type is only valid if all its values are uniquely named.\n */\nfunction UniqueEnumValueNamesRule(context) {\n  const schema = context.getSchema();\n  const existingTypeMap = schema ? schema.getTypeMap() : Object.create(null);\n  const knownValueNames = Object.create(null);\n  return {\n    EnumTypeDefinition: checkValueUniqueness,\n    EnumTypeExtension: checkValueUniqueness,\n  };\n\n  function checkValueUniqueness(node) {\n    var _node$values;\n\n    const typeName = node.name.value;\n\n    if (!knownValueNames[typeName]) {\n      knownValueNames[typeName] = Object.create(null);\n    } // FIXME: https://github.com/graphql/graphql-js/issues/2203\n\n    /* c8 ignore next */\n\n    const valueNodes =\n      (_node$values = node.values) !== null && _node$values !== void 0\n        ? _node$values\n        : [];\n    const valueNames = knownValueNames[typeName];\n\n    for (const valueDef of valueNodes) {\n      const valueName = valueDef.name.value;\n      const existingType = existingTypeMap[typeName];\n\n      if (\n        (0, _definition.isEnumType)(existingType) &&\n        existingType.getValue(valueName)\n      ) {\n        context.reportError(\n          new _GraphQLError.GraphQLError(\n            `Enum value \"${typeName}.${valueName}\" already exists in the schema. It cannot also be defined in this type extension.`,\n            {\n              nodes: valueDef.name,\n            },\n          ),\n        );\n      } else if (valueNames[valueName]) {\n        context.reportError(\n          new _GraphQLError.GraphQLError(\n            `Enum value \"${typeName}.${valueName}\" can only be defined once.`,\n            {\n              nodes: [valueNames[valueName], valueDef.name],\n            },\n          ),\n        );\n      } else {\n        valueNames[valueName] = valueDef.name;\n      }\n    }\n\n    return false;\n  }\n}\n/jsutils/identityFunc.js'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.identityFunc = identityFunc;\n\n/**\n * Returns the first argument it receives.\n */\nfunction identityFunc(x) {\n  return x;\n}\n0/validation/rules/PossibleTypeExtensionsRule.mjs\u0010\u001aimport { didYouMean } from '../../jsutils/didYouMean.mjs';\nimport { inspect } from '../../jsutils/inspect.mjs';\nimport { invariant } from '../../jsutils/invariant.mjs';\nimport { suggestionList } from '../../jsutils/suggestionList.mjs';\nimport { GraphQLError } from '../../error/GraphQLError.mjs';\nimport { Kind } from '../../language/kinds.mjs';\nimport { isTypeDefinitionNode } from '../../language/predicates.mjs';\nimport {\n  isEnumType,\n  isInputObjectType,\n  isInterfaceType,\n  isObjectType,\n  isScalarType,\n  isUnionType,\n} from '../../type/definition.mjs';\n\n/**\n * Possible type extension\n *\n * A type extension is only valid if the type is defined and has the same kind.\n */\nexport function PossibleTypeExtensionsRule(context) {\n  const schema = context.getSchema();\n  const definedTypes = Object.create(null);\n\n  for (const def of context.getDocument().definitions) {\n    if (isTypeDefinitionNode(def)) {\n      definedTypes[def.name.value] = def;\n    }\n  }\n\n  return {\n    ScalarTypeExtension: checkExtension,\n    ObjectTypeExtension: checkExtension,\n    InterfaceTypeExtension: checkExtension,\n    UnionTypeExtension: checkExtension,\n    EnumTypeExtension: checkExtension,\n    InputObjectTypeExtension: checkExtension,\n  };\n\n  function checkExtension(node) {\n    const typeName = node.name.value;\n    const defNode = definedTypes[typeName];\n    const existingType =\n      schema === null || schema === void 0 ? void 0 : schema.getType(typeName);\n    let expectedKind;\n\n    if (defNode) {\n      expectedKind = defKindToExtKind[defNode.kind];\n    } else if (existingType) {\n      expectedKind = typeToExtKind(existingType);\n    }\n\n    if (expectedKind) {\n      if (expectedKind !== node.kind) {\n        const kindStr = extensionKindToTypeName(node.kind);\n        context.reportError(\n          new GraphQLError(`Cannot extend non-${kindStr} type \"${typeName}\".`, {\n            nodes: defNode ? [defNode, node] : node,\n          }),\n        );\n      }\n    } else {\n      const allTypeNames = Object.keys({\n        ...definedTypes,\n        ...(schema === null || schema === void 0\n          ? void 0\n          : schema.getTypeMap()),\n      });\n      const suggestedTypes = suggestionList(typeName, allTypeNames);\n      context.reportError(\n        new GraphQLError(\n          `Cannot extend type \"${typeName}\" because it is not defined.` +\n            didYouMean(suggestedTypes),\n          {\n            nodes: node.name,\n          },\n        ),\n      );\n    }\n  }\n}\nconst defKindToExtKind = {\n  [Kind.SCALAR_TYPE_DEFINITION]: Kind.SCALAR_TYPE_EXTENSION,\n  [Kind.OBJECT_TYPE_DEFINITION]: Kind.OBJECT_TYPE_EXTENSION,\n  [Kind.INTERFACE_TYPE_DEFINITION]: Kind.INTERFACE_TYPE_EXTENSION,\n  [Kind.UNION_TYPE_DEFINITION]: Kind.UNION_TYPE_EXTENSION,\n  [Kind.ENUM_TYPE_DEFINITION]: Kind.ENUM_TYPE_EXTENSION,\n  [Kind.INPUT_OBJECT_TYPE_DEFINITION]: Kind.INPUT_OBJECT_TYPE_EXTENSION,\n};\n\nfunction typeToExtKind(type) {\n  if (isScalarType(type)) {\n    return Kind.SCALAR_TYPE_EXTENSION;\n  }\n\n  if (isObjectType(type)) {\n    return Kind.OBJECT_TYPE_EXTENSION;\n  }\n\n  if (isInterfaceType(type)) {\n    return Kind.INTERFACE_TYPE_EXTENSION;\n  }\n\n  if (isUnionType(type)) {\n    return Kind.UNION_TYPE_EXTENSION;\n  }\n\n  if (isEnumType(type)) {\n    return Kind.ENUM_TYPE_EXTENSION;\n  }\n\n  if (isInputObjectType(type)) {\n    return Kind.INPUT_OBJECT_TYPE_EXTENSION;\n  }\n  /* c8 ignore next 3 */\n  // Not reachable. All possible types have been considered\n\n  false || invariant(false, 'Unexpected type: ' + inspect(type));\n}\n\nfunction extensionKindToTypeName(kind) {\n  switch (kind) {\n    case Kind.SCALAR_TYPE_EXTENSION:\n      return 'scalar';\n\n    case Kind.OBJECT_TYPE_EXTENSION:\n      return 'object';\n\n    case Kind.INTERFACE_TYPE_EXTENSION:\n      return 'interface';\n\n    case Kind.UNION_TYPE_EXTENSION:\n      return 'union';\n\n    case Kind.ENUM_TYPE_EXTENSION:\n      return 'enum';\n\n    case Kind.INPUT_OBJECT_TYPE_EXTENSION:\n      return 'input object';\n    // Not reachable. All possible types have been considered\n\n    /* c8 ignore next */\n\n    default:\n      false || invariant(false, 'Unexpected kind: ' + inspect(kind));\n  }\n}\n/package.json\u0003\b{\n  \"name\": \"graphql\",\n  \"version\": \"16.6.0\",\n  \"description\": \"A Query Language and Runtime which can target any service.\",\n  \"license\": \"MIT\",\n  \"main\": \"index\",\n  \"module\": \"index.mjs\",\n  \"typesVersions\": {\n    \">=4.1.0\": {\n      \"*\": [\n        \"*\"\n      ]\n    },\n    \"*\": {\n      \"*\": [\n        \"NotSupportedTSVersion.d.ts\"\n      ]\n    }\n  },\n  \"sideEffects\": false,\n  \"homepage\": \"https://github.com/graphql/graphql-js\",\n  \"bugs\": {\n    \"url\": \"https://github.com/graphql/graphql-js/issues\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/graphql/graphql-js.git\"\n  },\n  \"keywords\": [\n    \"graphql\",\n    \"graphql-js\"\n  ],\n  \"engines\": {\n    \"node\": \"^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0\"\n  },\n  \"publishConfig\": {\n    \"tag\": \"latest\"\n  }\n}\n/language/location.mjs\u0002import { invariant } from '../jsutils/invariant.mjs';\nconst LineRegExp = /\\r\\n|[\\n\\r]/g;\n/**\n * Represents a location in a Source.\n */\n\n/**\n * Takes a Source and a UTF-8 character offset, and returns the corresponding\n * line and column as a SourceLocation.\n */\nexport function getLocation(source, position) {\n  let lastLineStart = 0;\n  let line = 1;\n\n  for (const match of source.body.matchAll(LineRegExp)) {\n    typeof match.index === 'number' || invariant(false);\n\n    if (match.index >= position) {\n      break;\n    }\n\n    lastLineStart = match.index + match[0].length;\n    line += 1;\n  }\n\n  return {\n    line,\n    column: position + 1 - lastLineStart,\n  };\n}\n/type/schema.d.ts\u0015import type { Maybe } from '../jsutils/Maybe';\nimport type { ObjMap } from '../jsutils/ObjMap';\nimport type { GraphQLError } from '../error/GraphQLError';\nimport type {\n  SchemaDefinitionNode,\n  SchemaExtensionNode,\n} from '../language/ast';\nimport { OperationTypeNode } from '../language/ast';\nimport type {\n  GraphQLAbstractType,\n  GraphQLInterfaceType,\n  GraphQLNamedType,\n  GraphQLObjectType,\n} from './definition';\nimport type { GraphQLDirective } from './directives';\n/**\n * Test if the given value is a GraphQL schema.\n */\nexport declare function isSchema(schema: unknown): schema is GraphQLSchema;\nexport declare function assertSchema(schema: unknown): GraphQLSchema;\n/**\n * Custom extensions\n *\n * @remarks\n * Use a unique identifier name for your extension, for example the name of\n * your library or project. Do not use a shortened identifier as this increases\n * the risk of conflicts. We recommend you add at most one extension field,\n * an object which can contain all the values you need.\n */\nexport interface GraphQLSchemaExtensions {\n  [attributeName: string]: unknown;\n}\n/**\n * Schema Definition\n *\n * A Schema is created by supplying the root types of each type of operation,\n * query and mutation (optional). A schema definition is then supplied to the\n * validator and executor.\n *\n * Example:\n *\n * ```ts\n * const MyAppSchema = new GraphQLSchema({\n *   query: MyAppQueryRootType,\n *   mutation: MyAppMutationRootType,\n * })\n * ```\n *\n * Note: When the schema is constructed, by default only the types that are\n * reachable by traversing the root types are included, other types must be\n * explicitly referenced.\n *\n * Example:\n *\n * ```ts\n * const characterInterface = new GraphQLInterfaceType({\n *   name: 'Character',\n *   ...\n * });\n *\n * const humanType = new GraphQLObjectType({\n *   name: 'Human',\n *   interfaces: [characterInterface],\n *   ...\n * });\n *\n * const droidType = new GraphQLObjectType({\n *   name: 'Droid',\n *   interfaces: [characterInterface],\n *   ...\n * });\n *\n * const schema = new GraphQLSchema({\n *   query: new GraphQLObjectType({\n *     name: 'Query',\n *     fields: {\n *       hero: { type: characterInterface, ... },\n *     }\n *   }),\n *   ...\n *   // Since this schema references only the `Character` interface it's\n *   // necessary to explicitly list the types that implement it if\n *   // you want them to be included in the final schema.\n *   types: [humanType, droidType],\n * })\n * ```\n *\n * Note: If an array of `directives` are provided to GraphQLSchema, that will be\n * the exact list of directives represented and allowed. If `directives` is not\n * provided then a default set of the specified directives (e.g. `@include` and\n * `@skip`) will be used. If you wish to provide *additional* directives to these\n * specified directives, you must explicitly declare them. Example:\n *\n * ```ts\n * const MyAppSchema = new GraphQLSchema({\n *   ...\n *   directives: specifiedDirectives.concat([ myCustomDirective ]),\n * })\n * ```\n */\nexport declare class GraphQLSchema {\n  description: Maybe<string>;\n  extensions: Readonly<GraphQLSchemaExtensions>;\n  astNode: Maybe<SchemaDefinitionNode>;\n  extensionASTNodes: ReadonlyArray<SchemaExtensionNode>;\n  __validationErrors: Maybe<ReadonlyArray<GraphQLError>>;\n  private _queryType;\n  private _mutationType;\n  private _subscriptionType;\n  private _directives;\n  private _typeMap;\n  private _subTypeMap;\n  private _implementationsMap;\n  constructor(config: Readonly<GraphQLSchemaConfig>);\n  get [Symbol.toStringTag](): string;\n  getQueryType(): Maybe<GraphQLObjectType>;\n  getMutationType(): Maybe<GraphQLObjectType>;\n  getSubscriptionType(): Maybe<GraphQLObjectType>;\n  getRootType(operation: OperationTypeNode): Maybe<GraphQLObjectType>;\n  getTypeMap(): TypeMap;\n  getType(name: string): GraphQLNamedType | undefined;\n  getPossibleTypes(\n    abstractType: GraphQLAbstractType,\n  ): ReadonlyArray<GraphQLObjectType>;\n  getImplementations(interfaceType: GraphQLInterfaceType): {\n    objects: ReadonlyArray<GraphQLObjectType>;\n    interfaces: ReadonlyArray<GraphQLInterfaceType>;\n  };\n  isSubType(\n    abstractType: GraphQLAbstractType,\n    maybeSubType: GraphQLObjectType | GraphQLInterfaceType,\n  ): boolean;\n  getDirectives(): ReadonlyArray<GraphQLDirective>;\n  getDirective(name: string): Maybe<GraphQLDirective>;\n  toConfig(): GraphQLSchemaNormalizedConfig;\n}\ndeclare type TypeMap = ObjMap<GraphQLNamedType>;\nexport interface GraphQLSchemaValidationOptions {\n  /**\n   * When building a schema from a GraphQL service's introspection result, it\n   * might be safe to assume the schema is valid. Set to true to assume the\n   * produced schema is valid.\n   *\n   * Default: false\n   */\n  assumeValid?: boolean;\n}\nexport interface GraphQLSchemaConfig extends GraphQLSchemaValidationOptions {\n  description?: Maybe<string>;\n  query?: Maybe<GraphQLObjectType>;\n  mutation?: Maybe<GraphQLObjectType>;\n  subscription?: Maybe<GraphQLObjectType>;\n  types?: Maybe<ReadonlyArray<GraphQLNamedType>>;\n  directives?: Maybe<ReadonlyArray<GraphQLDirective>>;\n  extensions?: Maybe<Readonly<GraphQLSchemaExtensions>>;\n  astNode?: Maybe<SchemaDefinitionNode>;\n  extensionASTNodes?: Maybe<ReadonlyArray<SchemaExtensionNode>>;\n}\n/**\n * @internal\n */\nexport interface GraphQLSchemaNormalizedConfig extends GraphQLSchemaConfig {\n  description: Maybe<string>;\n  types: ReadonlyArray<GraphQLNamedType>;\n  directives: ReadonlyArray<GraphQLDirective>;\n  extensions: Readonly<GraphQLSchemaExtensions>;\n  extensionASTNodes: ReadonlyArray<SchemaExtensionNode>;\n  assumeValid: boolean;\n}\nexport {};\n/NotSupportedTSVersion.d.ts>\"Package 'graphql' support only TS versions that are >=4.1.0\"../validation/rules/UniqueInputFieldNamesRule.js\u0005<'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.UniqueInputFieldNamesRule = UniqueInputFieldNamesRule;\n\nvar _invariant = require('../../jsutils/invariant.js');\n\nvar _GraphQLError = require('../../error/GraphQLError.js');\n\n/**\n * Unique input field names\n *\n * A GraphQL input object value is only valid if all supplied fields are\n * uniquely named.\n *\n * See https://spec.graphql.org/draft/#sec-Input-Object-Field-Uniqueness\n */\nfunction UniqueInputFieldNamesRule(context) {\n  const knownNameStack = [];\n  let knownNames = Object.create(null);\n  return {\n    ObjectValue: {\n      enter() {\n        knownNameStack.push(knownNames);\n        knownNames = Object.create(null);\n      },\n\n      leave() {\n        const prevKnownNames = knownNameStack.pop();\n        prevKnownNames || (0, _invariant.invariant)(false);\n        knownNames = prevKnownNames;\n      },\n    },\n\n    ObjectField(node) {\n      const fieldName = node.name.value;\n\n      if (knownNames[fieldName]) {\n        context.reportError(\n          new _GraphQLError.GraphQLError(\n            `There can be only one input field named \"${fieldName}\".`,\n            {\n              nodes: [knownNames[fieldName], node.name],\n            },\n          ),\n        );\n      } else {\n        knownNames[fieldName] = node.name;\n      }\n    },\n  };\n}\n/utilities/index.d.ts\bexport { getIntrospectionQuery } from './getIntrospectionQuery';\nexport type {\n  IntrospectionOptions,\n  IntrospectionQuery,\n  IntrospectionSchema,\n  IntrospectionType,\n  IntrospectionInputType,\n  IntrospectionOutputType,\n  IntrospectionScalarType,\n  IntrospectionObjectType,\n  IntrospectionInterfaceType,\n  IntrospectionUnionType,\n  IntrospectionEnumType,\n  IntrospectionInputObjectType,\n  IntrospectionTypeRef,\n  IntrospectionInputTypeRef,\n  IntrospectionOutputTypeRef,\n  IntrospectionNamedTypeRef,\n  IntrospectionListTypeRef,\n  IntrospectionNonNullTypeRef,\n  IntrospectionField,\n  IntrospectionInputValue,\n  IntrospectionEnumValue,\n  IntrospectionDirective,\n} from './getIntrospectionQuery';\nexport { getOperationAST } from './getOperationAST';\nexport { getOperationRootType } from './getOperationRootType';\nexport { introspectionFromSchema } from './introspectionFromSchema';\nexport { buildClientSchema } from './buildClientSchema';\nexport { buildASTSchema, buildSchema } from './buildASTSchema';\nexport type { BuildSchemaOptions } from './buildASTSchema';\nexport { extendSchema } from './extendSchema';\nexport { lexicographicSortSchema } from './lexicographicSortSchema';\nexport {\n  printSchema,\n  printType,\n  printIntrospectionSchema,\n} from './printSchema';\nexport { typeFromAST } from './typeFromAST';\nexport { valueFromAST } from './valueFromAST';\nexport { valueFromASTUntyped } from './valueFromASTUntyped';\nexport { astFromValue } from './astFromValue';\nexport { TypeInfo, visitWithTypeInfo } from './TypeInfo';\nexport { coerceInputValue } from './coerceInputValue';\nexport { concatAST } from './concatAST';\nexport { separateOperations } from './separateOperations';\nexport { stripIgnoredCharacters } from './stripIgnoredCharacters';\nexport {\n  isEqualType,\n  isTypeSubTypeOf,\n  doTypesOverlap,\n} from './typeComparators';\nexport { assertValidName, isValidNameError } from './assertValidName';\nexport {\n  BreakingChangeType,\n  DangerousChangeType,\n  findBreakingChanges,\n  findDangerousChanges,\n} from './findBreakingChanges';\nexport type { BreakingChange, DangerousChange } from './findBreakingChanges';\nexport type { TypedQueryDocumentNode } from './typedQueryDocumentNode';\n/jsutils/promiseForObject.mjs\u00023/**\n * This function transforms a JS object `ObjMap<Promise<T>>` into\n * a `Promise<ObjMap<T>>`\n *\n * This is akin to bluebird's `Promise.props`, but implemented only using\n * `Promise.all` so it will work with any implementation of ES6 promises.\n */\nexport function promiseForObject(object) {\n  return Promise.all(Object.values(object)).then((resolvedValues) => {\n    const resolvedObject = Object.create(null);\n\n    for (const [i, key] of Object.keys(object).entries()) {\n      resolvedObject[key] = resolvedValues[i];\n    }\n\n    return resolvedObject;\n  });\n}\n5/validation/rules/OverlappingFieldsCanBeMergedRule.js`B'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.OverlappingFieldsCanBeMergedRule = OverlappingFieldsCanBeMergedRule;\n\nvar _inspect = require('../../jsutils/inspect.js');\n\nvar _GraphQLError = require('../../error/GraphQLError.js');\n\nvar _kinds = require('../../language/kinds.js');\n\nvar _printer = require('../../language/printer.js');\n\nvar _definition = require('../../type/definition.js');\n\nvar _sortValueNode = require('../../utilities/sortValueNode.js');\n\nvar _typeFromAST = require('../../utilities/typeFromAST.js');\n\nfunction reasonMessage(reason) {\n  if (Array.isArray(reason)) {\n    return reason\n      .map(\n        ([responseName, subReason]) =>\n          `subfields \"${responseName}\" conflict because ` +\n          reasonMessage(subReason),\n      )\n      .join(' and ');\n  }\n\n  return reason;\n}\n/**\n * Overlapping fields can be merged\n *\n * A selection set is only valid if all fields (including spreading any\n * fragments) either correspond to distinct response names or can be merged\n * without ambiguity.\n *\n * See https://spec.graphql.org/draft/#sec-Field-Selection-Merging\n */\n\nfunction OverlappingFieldsCanBeMergedRule(context) {\n  // A memoization for when two fragments are compared \"between\" each other for\n  // conflicts. Two fragments may be compared many times, so memoizing this can\n  // dramatically improve the performance of this validator.\n  const comparedFragmentPairs = new PairSet(); // A cache for the \"field map\" and list of fragment names found in any given\n  // selection set. Selection sets may be asked for this information multiple\n  // times, so this improves the performance of this validator.\n\n  const cachedFieldsAndFragmentNames = new Map();\n  return {\n    SelectionSet(selectionSet) {\n      const conflicts = findConflictsWithinSelectionSet(\n        context,\n        cachedFieldsAndFragmentNames,\n        comparedFragmentPairs,\n        context.getParentType(),\n        selectionSet,\n      );\n\n      for (const [[responseName, reason], fields1, fields2] of conflicts) {\n        const reasonMsg = reasonMessage(reason);\n        context.reportError(\n          new _GraphQLError.GraphQLError(\n            `Fields \"${responseName}\" conflict because ${reasonMsg}. Use different aliases on the fields to fetch both if this was intentional.`,\n            {\n              nodes: fields1.concat(fields2),\n            },\n          ),\n        );\n      }\n    },\n  };\n}\n\n/**\n * Algorithm:\n *\n * Conflicts occur when two fields exist in a query which will produce the same\n * response name, but represent differing values, thus creating a conflict.\n * The algorithm below finds all conflicts via making a series of comparisons\n * between fields. In order to compare as few fields as possible, this makes\n * a series of comparisons \"within\" sets of fields and \"between\" sets of fields.\n *\n * Given any selection set, a collection produces both a set of fields by\n * also including all inline fragments, as well as a list of fragments\n * referenced by fragment spreads.\n *\n * A) Each selection set represented in the document first compares \"within\" its\n * collected set of fields, finding any conflicts between every pair of\n * overlapping fields.\n * Note: This is the *only time* that a the fields \"within\" a set are compared\n * to each other. After this only fields \"between\" sets are compared.\n *\n * B) Also, if any fragment is referenced in a selection set, then a\n * comparison is made \"between\" the original set of fields and the\n * referenced fragment.\n *\n * C) Also, if multiple fragments are referenced, then comparisons\n * are made \"between\" each referenced fragment.\n *\n * D) When comparing \"between\" a set of fields and a referenced fragment, first\n * a comparison is made between each field in the original set of fields and\n * each field in the the referenced set of fields.\n *\n * E) Also, if any fragment is referenced in the referenced selection set,\n * then a comparison is made \"between\" the original set of fields and the\n * referenced fragment (recursively referring to step D).\n *\n * F) When comparing \"between\" two fragments, first a comparison is made between\n * each field in the first referenced set of fields and each field in the the\n * second referenced set of fields.\n *\n * G) Also, any fragments referenced by the first must be compared to the\n * second, and any fragments referenced by the second must be compared to the\n * first (recursively referring to step F).\n *\n * H) When comparing two fields, if both have selection sets, then a comparison\n * is made \"between\" both selection sets, first comparing the set of fields in\n * the first selection set with the set of fields in the second.\n *\n * I) Also, if any fragment is referenced in either selection set, then a\n * comparison is made \"between\" the other set of fields and the\n * referenced fragment.\n *\n * J) Also, if two fragments are referenced in both selection sets, then a\n * comparison is made \"between\" the two fragments.\n *\n */\n// Find all conflicts found \"within\" a selection set, including those found\n// via spreading in fragments. Called when visiting each SelectionSet in the\n// GraphQL Document.\nfunction findConflictsWithinSelectionSet(\n  context,\n  cachedFieldsAndFragmentNames,\n  comparedFragmentPairs,\n  parentType,\n  selectionSet,\n) {\n  const conflicts = [];\n  const [fieldMap, fragmentNames] = getFieldsAndFragmentNames(\n    context,\n    cachedFieldsAndFragmentNames,\n    parentType,\n    selectionSet,\n  ); // (A) Find find all conflicts \"within\" the fields of this selection set.\n  // Note: this is the *only place* `collectConflictsWithin` is called.\n\n  collectConflictsWithin(\n    context,\n    conflicts,\n    cachedFieldsAndFragmentNames,\n    comparedFragmentPairs,\n    fieldMap,\n  );\n\n  if (fragmentNames.length !== 0) {\n    // (B) Then collect conflicts between these fields and those represented by\n    // each spread fragment name found.\n    for (let i = 0; i < fragmentNames.length; i++) {\n      collectConflictsBetweenFieldsAndFragment(\n        context,\n        conflicts,\n        cachedFieldsAndFragmentNames,\n        comparedFragmentPairs,\n        false,\n        fieldMap,\n        fragmentNames[i],\n      ); // (C) Then compare this fragment with all other fragments found in this\n      // selection set to collect conflicts between fragments spread together.\n      // This compares each item in the list of fragment names to every other\n      // item in that same list (except for itself).\n\n      for (let j = i + 1; j < fragmentNames.length; j++) {\n        collectConflictsBetweenFragments(\n          context,\n          conflicts,\n          cachedFieldsAndFragmentNames,\n          comparedFragmentPairs,\n          false,\n          fragmentNames[i],\n          fragmentNames[j],\n        );\n      }\n    }\n  }\n\n  return conflicts;\n} // Collect all conflicts found between a set of fields and a fragment reference\n// including via spreading in any nested fragments.\n\nfunction collectConflictsBetweenFieldsAndFragment(\n  context,\n  conflicts,\n  cachedFieldsAndFragmentNames,\n  comparedFragmentPairs,\n  areMutuallyExclusive,\n  fieldMap,\n  fragmentName,\n) {\n  const fragment = context.getFragment(fragmentName);\n\n  if (!fragment) {\n    return;\n  }\n\n  const [fieldMap2, referencedFragmentNames] =\n    getReferencedFieldsAndFragmentNames(\n      context,\n      cachedFieldsAndFragmentNames,\n      fragment,\n    ); // Do not compare a fragment's fieldMap to itself.\n\n  if (fieldMap === fieldMap2) {\n    return;\n  } // (D) First collect any conflicts between the provided collection of fields\n  // and the collection of fields represented by the given fragment.\n\n  collectConflictsBetween(\n    context,\n    conflicts,\n    cachedFieldsAndFragmentNames,\n    comparedFragmentPairs,\n    areMutuallyExclusive,\n    fieldMap,\n    fieldMap2,\n  ); // (E) Then collect any conflicts between the provided collection of fields\n  // and any fragment names found in the given fragment.\n\n  for (const referencedFragmentName of referencedFragmentNames) {\n    // Memoize so two fragments are not compared for conflicts more than once.\n    if (\n      comparedFragmentPairs.has(\n        referencedFragmentName,\n        fragmentName,\n        areMutuallyExclusive,\n      )\n    ) {\n      continue;\n    }\n\n    comparedFragmentPairs.add(\n      referencedFragmentName,\n      fragmentName,\n      areMutuallyExclusive,\n    );\n    collectConflictsBetweenFieldsAndFragment(\n      context,\n      conflicts,\n      cachedFieldsAndFragmentNames,\n      comparedFragmentPairs,\n      areMutuallyExclusive,\n      fieldMap,\n      referencedFragmentName,\n    );\n  }\n} // Collect all conflicts found between two fragments, including via spreading in\n// any nested fragments.\n\nfunction collectConflictsBetweenFragments(\n  context,\n  conflicts,\n  cachedFieldsAndFragmentNames,\n  comparedFragmentPairs,\n  areMutuallyExclusive,\n  fragmentName1,\n  fragmentName2,\n) {\n  // No need to compare a fragment to itself.\n  if (fragmentName1 === fragmentName2) {\n    return;\n  } // Memoize so two fragments are not compared for conflicts more than once.\n\n  if (\n    comparedFragmentPairs.has(\n      fragmentName1,\n      fragmentName2,\n      areMutuallyExclusive,\n    )\n  ) {\n    return;\n  }\n\n  comparedFragmentPairs.add(fragmentName1, fragmentName2, areMutuallyExclusive);\n  const fragment1 = context.getFragment(fragmentName1);\n  const fragment2 = context.getFragment(fragmentName2);\n\n  if (!fragment1 || !fragment2) {\n    return;\n  }\n\n  const [fieldMap1, referencedFragmentNames1] =\n    getReferencedFieldsAndFragmentNames(\n      context,\n      cachedFieldsAndFragmentNames,\n      fragment1,\n    );\n  const [fieldMap2, referencedFragmentNames2] =\n    getReferencedFieldsAndFragmentNames(\n      context,\n      cachedFieldsAndFragmentNames,\n      fragment2,\n    ); // (F) First, collect all conflicts between these two collections of fields\n  // (not including any nested fragments).\n\n  collectConflictsBetween(\n    context,\n    conflicts,\n    cachedFieldsAndFragmentNames,\n    comparedFragmentPairs,\n    areMutuallyExclusive,\n    fieldMap1,\n    fieldMap2,\n  ); // (G) Then collect conflicts between the first fragment and any nested\n  // fragments spread in the second fragment.\n\n  for (const referencedFragmentName2 of referencedFragmentNames2) {\n    collectConflictsBetweenFragments(\n      context,\n      conflicts,\n      cachedFieldsAndFragmentNames,\n      comparedFragmentPairs,\n      areMutuallyExclusive,\n      fragmentName1,\n      referencedFragmentName2,\n    );\n  } // (G) Then collect conflicts between the second fragment and any nested\n  // fragments spread in the first fragment.\n\n  for (const referencedFragmentName1 of referencedFragmentNames1) {\n    collectConflictsBetweenFragments(\n      context,\n      conflicts,\n      cachedFieldsAndFragmentNames,\n      comparedFragmentPairs,\n      areMutuallyExclusive,\n      referencedFragmentName1,\n      fragmentName2,\n    );\n  }\n} // Find all conflicts found between two selection sets, including those found\n// via spreading in fragments. Called when determining if conflicts exist\n// between the sub-fields of two overlapping fields.\n\nfunction findConflictsBetweenSubSelectionSets(\n  context,\n  cachedFieldsAndFragmentNames,\n  comparedFragmentPairs,\n  areMutuallyExclusive,\n  parentType1,\n  selectionSet1,\n  parentType2,\n  selectionSet2,\n) {\n  const conflicts = [];\n  const [fieldMap1, fragmentNames1] = getFieldsAndFragmentNames(\n    context,\n    cachedFieldsAndFragmentNames,\n    parentType1,\n    selectionSet1,\n  );\n  const [fieldMap2, fragmentNames2] = getFieldsAndFragmentNames(\n    context,\n    cachedFieldsAndFragmentNames,\n    parentType2,\n    selectionSet2,\n  ); // (H) First, collect all conflicts between these two collections of field.\n\n  collectConflictsBetween(\n    context,\n    conflicts,\n    cachedFieldsAndFragmentNames,\n    comparedFragmentPairs,\n    areMutuallyExclusive,\n    fieldMap1,\n    fieldMap2,\n  ); // (I) Then collect conflicts between the first collection of fields and\n  // those referenced by each fragment name associated with the second.\n\n  for (const fragmentName2 of fragmentNames2) {\n    collectConflictsBetweenFieldsAndFragment(\n      context,\n      conflicts,\n      cachedFieldsAndFragmentNames,\n      comparedFragmentPairs,\n      areMutuallyExclusive,\n      fieldMap1,\n      fragmentName2,\n    );\n  } // (I) Then collect conflicts between the second collection of fields and\n  // those referenced by each fragment name associated with the first.\n\n  for (const fragmentName1 of fragmentNames1) {\n    collectConflictsBetweenFieldsAndFragment(\n      context,\n      conflicts,\n      cachedFieldsAndFragmentNames,\n      comparedFragmentPairs,\n      areMutuallyExclusive,\n      fieldMap2,\n      fragmentName1,\n    );\n  } // (J) Also collect conflicts between any fragment names by the first and\n  // fragment names by the second. This compares each item in the first set of\n  // names to each item in the second set of names.\n\n  for (const fragmentName1 of fragmentNames1) {\n    for (const fragmentName2 of fragmentNames2) {\n      collectConflictsBetweenFragments(\n        context,\n        conflicts,\n        cachedFieldsAndFragmentNames,\n        comparedFragmentPairs,\n        areMutuallyExclusive,\n        fragmentName1,\n        fragmentName2,\n      );\n    }\n  }\n\n  return conflicts;\n} // Collect all Conflicts \"within\" one collection of fields.\n\nfunction collectConflictsWithin(\n  context,\n  conflicts,\n  cachedFieldsAndFragmentNames,\n  comparedFragmentPairs,\n  fieldMap,\n) {\n  // A field map is a keyed collection, where each key represents a response\n  // name and the value at that key is a list of all fields which provide that\n  // response name. For every response name, if there are multiple fields, they\n  // must be compared to find a potential conflict.\n  for (const [responseName, fields] of Object.entries(fieldMap)) {\n    // This compares every field in the list to every other field in this list\n    // (except to itself). If the list only has one item, nothing needs to\n    // be compared.\n    if (fields.length > 1) {\n      for (let i = 0; i < fields.length; i++) {\n        for (let j = i + 1; j < fields.length; j++) {\n          const conflict = findConflict(\n            context,\n            cachedFieldsAndFragmentNames,\n            comparedFragmentPairs,\n            false, // within one collection is never mutually exclusive\n            responseName,\n            fields[i],\n            fields[j],\n          );\n\n          if (conflict) {\n            conflicts.push(conflict);\n          }\n        }\n      }\n    }\n  }\n} // Collect all Conflicts between two collections of fields. This is similar to,\n// but different from the `collectConflictsWithin` function above. This check\n// assumes that `collectConflictsWithin` has already been called on each\n// provided collection of fields. This is true because this validator traverses\n// each individual selection set.\n\nfunction collectConflictsBetween(\n  context,\n  conflicts,\n  cachedFieldsAndFragmentNames,\n  comparedFragmentPairs,\n  parentFieldsAreMutuallyExclusive,\n  fieldMap1,\n  fieldMap2,\n) {\n  // A field map is a keyed collection, where each key represents a response\n  // name and the value at that key is a list of all fields which provide that\n  // response name. For any response name which appears in both provided field\n  // maps, each field from the first field map must be compared to every field\n  // in the second field map to find potential conflicts.\n  for (const [responseName, fields1] of Object.entries(fieldMap1)) {\n    const fields2 = fieldMap2[responseName];\n\n    if (fields2) {\n      for (const field1 of fields1) {\n        for (const field2 of fields2) {\n          const conflict = findConflict(\n            context,\n            cachedFieldsAndFragmentNames,\n            comparedFragmentPairs,\n            parentFieldsAreMutuallyExclusive,\n            responseName,\n            field1,\n            field2,\n          );\n\n          if (conflict) {\n            conflicts.push(conflict);\n          }\n        }\n      }\n    }\n  }\n} // Determines if there is a conflict between two particular fields, including\n// comparing their sub-fields.\n\nfunction findConflict(\n  context,\n  cachedFieldsAndFragmentNames,\n  comparedFragmentPairs,\n  parentFieldsAreMutuallyExclusive,\n  responseName,\n  field1,\n  field2,\n) {\n  const [parentType1, node1, def1] = field1;\n  const [parentType2, node2, def2] = field2; // If it is known that two fields could not possibly apply at the same\n  // time, due to the parent types, then it is safe to permit them to diverge\n  // in aliased field or arguments used as they will not present any ambiguity\n  // by differing.\n  // It is known that two parent types could never overlap if they are\n  // different Object types. Interface or Union types might overlap - if not\n  // in the current state of the schema, then perhaps in some future version,\n  // thus may not safely diverge.\n\n  const areMutuallyExclusive =\n    parentFieldsAreMutuallyExclusive ||\n    (parentType1 !== parentType2 &&\n      (0, _definition.isObjectType)(parentType1) &&\n      (0, _definition.isObjectType)(parentType2));\n\n  if (!areMutuallyExclusive) {\n    // Two aliases must refer to the same field.\n    const name1 = node1.name.value;\n    const name2 = node2.name.value;\n\n    if (name1 !== name2) {\n      return [\n        [responseName, `\"${name1}\" and \"${name2}\" are different fields`],\n        [node1],\n        [node2],\n      ];\n    } // Two field calls must have the same arguments.\n\n    if (stringifyArguments(node1) !== stringifyArguments(node2)) {\n      return [\n        [responseName, 'they have differing arguments'],\n        [node1],\n        [node2],\n      ];\n    }\n  } // The return type for each field.\n\n  const type1 = def1 === null || def1 === void 0 ? void 0 : def1.type;\n  const type2 = def2 === null || def2 === void 0 ? void 0 : def2.type;\n\n  if (type1 && type2 && doTypesConflict(type1, type2)) {\n    return [\n      [\n        responseName,\n        `they return conflicting types \"${(0, _inspect.inspect)(\n          type1,\n        )}\" and \"${(0, _inspect.inspect)(type2)}\"`,\n      ],\n      [node1],\n      [node2],\n    ];\n  } // Collect and compare sub-fields. Use the same \"visited fragment names\" list\n  // for both collections so fields in a fragment reference are never\n  // compared to themselves.\n\n  const selectionSet1 = node1.selectionSet;\n  const selectionSet2 = node2.selectionSet;\n\n  if (selectionSet1 && selectionSet2) {\n    const conflicts = findConflictsBetweenSubSelectionSets(\n      context,\n      cachedFieldsAndFragmentNames,\n      comparedFragmentPairs,\n      areMutuallyExclusive,\n      (0, _definition.getNamedType)(type1),\n      selectionSet1,\n      (0, _definition.getNamedType)(type2),\n      selectionSet2,\n    );\n    return subfieldConflicts(conflicts, responseName, node1, node2);\n  }\n}\n\nfunction stringifyArguments(fieldNode) {\n  var _fieldNode$arguments;\n\n  // FIXME https://github.com/graphql/graphql-js/issues/2203\n  const args =\n    /* c8 ignore next */\n    (_fieldNode$arguments = fieldNode.arguments) !== null &&\n    _fieldNode$arguments !== void 0\n      ? _fieldNode$arguments\n      : [];\n  const inputObjectWithArgs = {\n    kind: _kinds.Kind.OBJECT,\n    fields: args.map((argNode) => ({\n      kind: _kinds.Kind.OBJECT_FIELD,\n      name: argNode.name,\n      value: argNode.value,\n    })),\n  };\n  return (0, _printer.print)(\n    (0, _sortValueNode.sortValueNode)(inputObjectWithArgs),\n  );\n} // Two types conflict if both types could not apply to a value simultaneously.\n// Composite types are ignored as their individual field types will be compared\n// later recursively. However List and Non-Null types must match.\n\nfunction doTypesConflict(type1, type2) {\n  if ((0, _definition.isListType)(type1)) {\n    return (0, _definition.isListType)(type2)\n      ? doTypesConflict(type1.ofType, type2.ofType)\n      : true;\n  }\n\n  if ((0, _definition.isListType)(type2)) {\n    return true;\n  }\n\n  if ((0, _definition.isNonNullType)(type1)) {\n    return (0, _definition.isNonNullType)(type2)\n      ? doTypesConflict(type1.ofType, type2.ofType)\n      : true;\n  }\n\n  if ((0, _definition.isNonNullType)(type2)) {\n    return true;\n  }\n\n  if (\n    (0, _definition.isLeafType)(type1) ||\n    (0, _definition.isLeafType)(type2)\n  ) {\n    return type1 !== type2;\n  }\n\n  return false;\n} // Given a selection set, return the collection of fields (a mapping of response\n// name to field nodes and definitions) as well as a list of fragment names\n// referenced via fragment spreads.\n\nfunction getFieldsAndFragmentNames(\n  context,\n  cachedFieldsAndFragmentNames,\n  parentType,\n  selectionSet,\n) {\n  const cached = cachedFieldsAndFragmentNames.get(selectionSet);\n\n  if (cached) {\n    return cached;\n  }\n\n  const nodeAndDefs = Object.create(null);\n  const fragmentNames = Object.create(null);\n\n  _collectFieldsAndFragmentNames(\n    context,\n    parentType,\n    selectionSet,\n    nodeAndDefs,\n    fragmentNames,\n  );\n\n  const result = [nodeAndDefs, Object.keys(fragmentNames)];\n  cachedFieldsAndFragmentNames.set(selectionSet, result);\n  return result;\n} // Given a reference to a fragment, return the represented collection of fields\n// as well as a list of nested fragment names referenced via fragment spreads.\n\nfunction getReferencedFieldsAndFragmentNames(\n  context,\n  cachedFieldsAndFragmentNames,\n  fragment,\n) {\n  // Short-circuit building a type from the node if possible.\n  const cached = cachedFieldsAndFragmentNames.get(fragment.selectionSet);\n\n  if (cached) {\n    return cached;\n  }\n\n  const fragmentType = (0, _typeFromAST.typeFromAST)(\n    context.getSchema(),\n    fragment.typeCondition,\n  );\n  return getFieldsAndFragmentNames(\n    context,\n    cachedFieldsAndFragmentNames,\n    fragmentType,\n    fragment.selectionSet,\n  );\n}\n\nfunction _collectFieldsAndFragmentNames(\n  context,\n  parentType,\n  selectionSet,\n  nodeAndDefs,\n  fragmentNames,\n) {\n  for (const selection of selectionSet.selections) {\n    switch (selection.kind) {\n      case _kinds.Kind.FIELD: {\n        const fieldName = selection.name.value;\n        let fieldDef;\n\n        if (\n          (0, _definition.isObjectType)(parentType) ||\n          (0, _definition.isInterfaceType)(parentType)\n        ) {\n          fieldDef = parentType.getFields()[fieldName];\n        }\n\n        const responseName = selection.alias\n          ? selection.alias.value\n          : fieldName;\n\n        if (!nodeAndDefs[responseName]) {\n          nodeAndDefs[responseName] = [];\n        }\n\n        nodeAndDefs[responseName].push([parentType, selection, fieldDef]);\n        break;\n      }\n\n      case _kinds.Kind.FRAGMENT_SPREAD:\n        fragmentNames[selection.name.value] = true;\n        break;\n\n      case _kinds.Kind.INLINE_FRAGMENT: {\n        const typeCondition = selection.typeCondition;\n        const inlineFragmentType = typeCondition\n          ? (0, _typeFromAST.typeFromAST)(context.getSchema(), typeCondition)\n          : parentType;\n\n        _collectFieldsAndFragmentNames(\n          context,\n          inlineFragmentType,\n          selection.selectionSet,\n          nodeAndDefs,\n          fragmentNames,\n        );\n\n        break;\n      }\n    }\n  }\n} // Given a series of Conflicts which occurred between two sub-fields, generate\n// a single Conflict.\n\nfunction subfieldConflicts(conflicts, responseName, node1, node2) {\n  if (conflicts.length > 0) {\n    return [\n      [responseName, conflicts.map(([reason]) => reason)],\n      [node1, ...conflicts.map(([, fields1]) => fields1).flat()],\n      [node2, ...conflicts.map(([, , fields2]) => fields2).flat()],\n    ];\n  }\n}\n/**\n * A way to keep track of pairs of things when the ordering of the pair does not matter.\n */\n\nclass PairSet {\n  constructor() {\n    this._data = new Map();\n  }\n\n  has(a, b, areMutuallyExclusive) {\n    var _this$_data$get;\n\n    const [key1, key2] = a < b ? [a, b] : [b, a];\n    const result =\n      (_this$_data$get = this._data.get(key1)) === null ||\n      _this$_data$get === void 0\n        ? void 0\n        : _this$_data$get.get(key2);\n\n    if (result === undefined) {\n      return false;\n    } // areMutuallyExclusive being false is a superset of being true, hence if\n    // we want to know if this PairSet \"has\" these two with no exclusivity,\n    // we have to ensure it was added as such.\n\n    return areMutuallyExclusive ? true : areMutuallyExclusive === result;\n  }\n\n  add(a, b, areMutuallyExclusive) {\n    const [key1, key2] = a < b ? [a, b] : [b, a];\n\n    const map = this._data.get(key1);\n\n    if (map === undefined) {\n      this._data.set(key1, new Map([[key2, areMutuallyExclusive]]));\n    } else {\n      map.set(key2, areMutuallyExclusive);\n    }\n  }\n}\n+/validation/rules/KnownFragmentNamesRule.js\u0003j'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.KnownFragmentNamesRule = KnownFragmentNamesRule;\n\nvar _GraphQLError = require('../../error/GraphQLError.js');\n\n/**\n * Known fragment names\n *\n * A GraphQL document is only valid if all `...Fragment` fragment spreads refer\n * to fragments defined in the same document.\n *\n * See https://spec.graphql.org/draft/#sec-Fragment-spread-target-defined\n */\nfunction KnownFragmentNamesRule(context) {\n  return {\n    FragmentSpread(node) {\n      const fragmentName = node.name.value;\n      const fragment = context.getFragment(fragmentName);\n\n      if (!fragment) {\n        context.reportError(\n          new _GraphQLError.GraphQLError(\n            `Unknown fragment \"${fragmentName}\".`,\n            {\n              nodes: node.name,\n            },\n          ),\n        );\n      }\n    },\n  };\n}\n/language/source.js\u0006'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.Source = void 0;\nexports.isSource = isSource;\n\nvar _devAssert = require('../jsutils/devAssert.js');\n\nvar _inspect = require('../jsutils/inspect.js');\n\nvar _instanceOf = require('../jsutils/instanceOf.js');\n\n/**\n * A representation of source input to GraphQL. The `name` and `locationOffset` parameters are\n * optional, but they are useful for clients who store GraphQL documents in source files.\n * For example, if the GraphQL input starts at line 40 in a file named `Foo.graphql`, it might\n * be useful for `name` to be `\"Foo.graphql\"` and location to be `{ line: 40, column: 1 }`.\n * The `line` and `column` properties in `locationOffset` are 1-indexed.\n */\nclass Source {\n  constructor(\n    body,\n    name = 'GraphQL request',\n    locationOffset = {\n      line: 1,\n      column: 1,\n    },\n  ) {\n    typeof body === 'string' ||\n      (0, _devAssert.devAssert)(\n        false,\n        `Body must be a string. Received: ${(0, _inspect.inspect)(body)}.`,\n      );\n    this.body = body;\n    this.name = name;\n    this.locationOffset = locationOffset;\n    this.locationOffset.line > 0 ||\n      (0, _devAssert.devAssert)(\n        false,\n        'line in locationOffset is 1-indexed and must be positive.',\n      );\n    this.locationOffset.column > 0 ||\n      (0, _devAssert.devAssert)(\n        false,\n        'column in locationOffset is 1-indexed and must be positive.',\n      );\n  }\n\n  get [Symbol.toStringTag]() {\n    return 'Source';\n  }\n}\n/**\n * Test if the given value is a Source object.\n *\n * @internal\n */\n\nexports.Source = Source;\n\nfunction isSource(source) {\n  return (0, _instanceOf.instanceOf)(source, Source);\n}\n1/validation/rules/VariablesAreInputTypesRule.d.ts\u0001import type { ASTVisitor } from '../../language/visitor';\nimport type { ValidationContext } from '../ValidationContext';\n/**\n * Variables are input types\n *\n * A GraphQL operation is only valid if all the variables it defines are of\n * input types (scalar, enum, or input object).\n *\n * See https://spec.graphql.org/draft/#sec-Variables-Are-Input-Types\n */\nexport declare function VariablesAreInputTypesRule(\n  context: ValidationContext,\n): ASTVisitor;\n/execution/values.d.ts\timport type { Maybe } from '../jsutils/Maybe';\nimport type { ObjMap } from '../jsutils/ObjMap';\nimport { GraphQLError } from '../error/GraphQLError';\nimport type {\n  DirectiveNode,\n  FieldNode,\n  VariableDefinitionNode,\n} from '../language/ast';\nimport type { GraphQLField } from '../type/definition';\nimport type { GraphQLDirective } from '../type/directives';\nimport type { GraphQLSchema } from '../type/schema';\ndeclare type CoercedVariableValues =\n  | {\n      errors: ReadonlyArray<GraphQLError>;\n      coerced?: never;\n    }\n  | {\n      coerced: {\n        [variable: string]: unknown;\n      };\n      errors?: never;\n    };\n/**\n * Prepares an object map of variableValues of the correct type based on the\n * provided variable definitions and arbitrary input. If the input cannot be\n * parsed to match the variable definitions, a GraphQLError will be thrown.\n *\n * Note: The returned value is a plain Object with a prototype, since it is\n * exposed to user code. Care should be taken to not pull values from the\n * Object prototype.\n */\nexport declare function getVariableValues(\n  schema: GraphQLSchema,\n  varDefNodes: ReadonlyArray<VariableDefinitionNode>,\n  inputs: {\n    readonly [variable: string]: unknown;\n  },\n  options?: {\n    maxErrors?: number;\n  },\n): CoercedVariableValues;\n/**\n * Prepares an object map of argument values given a list of argument\n * definitions and list of argument AST nodes.\n *\n * Note: The returned value is a plain Object with a prototype, since it is\n * exposed to user code. Care should be taken to not pull values from the\n * Object prototype.\n */\nexport declare function getArgumentValues(\n  def: GraphQLField<unknown, unknown> | GraphQLDirective,\n  node: FieldNode | DirectiveNode,\n  variableValues?: Maybe<ObjMap<unknown>>,\n): {\n  [argument: string]: unknown;\n};\n/**\n * Prepares an object map of argument values given a directive definition\n * and a AST node which may contain directives. Optionally also accepts a map\n * of variable values.\n *\n * If the directive does not exist on the node, returns undefined.\n *\n * Note: The returned value is a plain Object with a prototype, since it is\n * exposed to user code. Care should be taken to not pull values from the\n * Object prototype.\n */\nexport declare function getDirectiveValues(\n  directiveDef: GraphQLDirective,\n  node: {\n    readonly directives?: ReadonlyArray<DirectiveNode>;\n  },\n  variableValues?: Maybe<ObjMap<unknown>>,\n):\n  | undefined\n  | {\n      [argument: string]: unknown;\n    };\nexport {};\n/utilities/typeComparators.js\u000ea'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.doTypesOverlap = doTypesOverlap;\nexports.isEqualType = isEqualType;\nexports.isTypeSubTypeOf = isTypeSubTypeOf;\n\nvar _definition = require('../type/definition.js');\n\n/**\n * Provided two types, return true if the types are equal (invariant).\n */\nfunction isEqualType(typeA, typeB) {\n  // Equivalent types are equal.\n  if (typeA === typeB) {\n    return true;\n  } // If either type is non-null, the other must also be non-null.\n\n  if (\n    (0, _definition.isNonNullType)(typeA) &&\n    (0, _definition.isNonNullType)(typeB)\n  ) {\n    return isEqualType(typeA.ofType, typeB.ofType);\n  } // If either type is a list, the other must also be a list.\n\n  if (\n    (0, _definition.isListType)(typeA) &&\n    (0, _definition.isListType)(typeB)\n  ) {\n    return isEqualType(typeA.ofType, typeB.ofType);\n  } // Otherwise the types are not equal.\n\n  return false;\n}\n/**\n * Provided a type and a super type, return true if the first type is either\n * equal or a subset of the second super type (covariant).\n */\n\nfunction isTypeSubTypeOf(schema, maybeSubType, superType) {\n  // Equivalent type is a valid subtype\n  if (maybeSubType === superType) {\n    return true;\n  } // If superType is non-null, maybeSubType must also be non-null.\n\n  if ((0, _definition.isNonNullType)(superType)) {\n    if ((0, _definition.isNonNullType)(maybeSubType)) {\n      return isTypeSubTypeOf(schema, maybeSubType.ofType, superType.ofType);\n    }\n\n    return false;\n  }\n\n  if ((0, _definition.isNonNullType)(maybeSubType)) {\n    // If superType is nullable, maybeSubType may be non-null or nullable.\n    return isTypeSubTypeOf(schema, maybeSubType.ofType, superType);\n  } // If superType type is a list, maybeSubType type must also be a list.\n\n  if ((0, _definition.isListType)(superType)) {\n    if ((0, _definition.isListType)(maybeSubType)) {\n      return isTypeSubTypeOf(schema, maybeSubType.ofType, superType.ofType);\n    }\n\n    return false;\n  }\n\n  if ((0, _definition.isListType)(maybeSubType)) {\n    // If superType is not a list, maybeSubType must also be not a list.\n    return false;\n  } // If superType type is an abstract type, check if it is super type of maybeSubType.\n  // Otherwise, the child type is not a valid subtype of the parent type.\n\n  return (\n    (0, _definition.isAbstractType)(superType) &&\n    ((0, _definition.isInterfaceType)(maybeSubType) ||\n      (0, _definition.isObjectType)(maybeSubType)) &&\n    schema.isSubType(superType, maybeSubType)\n  );\n}\n/**\n * Provided two composite types, determine if they \"overlap\". Two composite\n * types overlap when the Sets of possible concrete types for each intersect.\n *\n * This is often used to determine if a fragment of a given type could possibly\n * be visited in a context of another type.\n *\n * This function is commutative.\n */\n\nfunction doTypesOverlap(schema, typeA, typeB) {\n  // Equivalent types overlap\n  if (typeA === typeB) {\n    return true;\n  }\n\n  if ((0, _definition.isAbstractType)(typeA)) {\n    if ((0, _definition.isAbstractType)(typeB)) {\n      // If both types are abstract, then determine if there is any intersection\n      // between possible concrete types of each.\n      return schema\n        .getPossibleTypes(typeA)\n        .some((type) => schema.isSubType(typeB, type));\n    } // Determine if the latter type is a possible concrete type of the former.\n\n    return schema.isSubType(typeA, typeB);\n  }\n\n  if ((0, _definition.isAbstractType)(typeB)) {\n    // Determine if the former type is a possible concrete type of the latter.\n    return schema.isSubType(typeB, typeA);\n  } // Otherwise the types do not overlap.\n\n  return false;\n}\n./validation/rules/UniqueOperationTypesRule.mjs\u0007!import { GraphQLError } from '../../error/GraphQLError.mjs';\n\n/**\n * Unique operation types\n *\n * A GraphQL document is only valid if it has only one type per operation.\n */\nexport function UniqueOperationTypesRule(context) {\n  const schema = context.getSchema();\n  const definedOperationTypes = Object.create(null);\n  const existingOperationTypes = schema\n    ? {\n        query: schema.getQueryType(),\n        mutation: schema.getMutationType(),\n        subscription: schema.getSubscriptionType(),\n      }\n    : {};\n  return {\n    SchemaDefinition: checkOperationTypes,\n    SchemaExtension: checkOperationTypes,\n  };\n\n  function checkOperationTypes(node) {\n    var _node$operationTypes;\n\n    // See: https://github.com/graphql/graphql-js/issues/2203\n\n    /* c8 ignore next */\n    const operationTypesNodes =\n      (_node$operationTypes = node.operationTypes) !== null &&\n      _node$operationTypes !== void 0\n        ? _node$operationTypes\n        : [];\n\n    for (const operationType of operationTypesNodes) {\n      const operation = operationType.operation;\n      const alreadyDefinedOperationType = definedOperationTypes[operation];\n\n      if (existingOperationTypes[operation]) {\n        context.reportError(\n          new GraphQLError(\n            `Type for ${operation} already defined in the schema. It cannot be redefined.`,\n            {\n              nodes: operationType,\n            },\n          ),\n        );\n      } else if (alreadyDefinedOperationType) {\n        context.reportError(\n          new GraphQLError(\n            `There can be only one ${operation} type in schema.`,\n            {\n              nodes: [alreadyDefinedOperationType, operationType],\n            },\n          ),\n        );\n      } else {\n        definedOperationTypes[operation] = operationType;\n      }\n    }\n\n    return false;\n  }\n}\n/jsutils/PromiseOrValue.mjs\u000bexport {};\n/validation/validate.js\u0010'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.assertValidSDL = assertValidSDL;\nexports.assertValidSDLExtension = assertValidSDLExtension;\nexports.validate = validate;\nexports.validateSDL = validateSDL;\n\nvar _devAssert = require('../jsutils/devAssert.js');\n\nvar _GraphQLError = require('../error/GraphQLError.js');\n\nvar _visitor = require('../language/visitor.js');\n\nvar _validate = require('../type/validate.js');\n\nvar _TypeInfo = require('../utilities/TypeInfo.js');\n\nvar _specifiedRules = require('./specifiedRules.js');\n\nvar _ValidationContext = require('./ValidationContext.js');\n\n/**\n * Implements the \"Validation\" section of the spec.\n *\n * Validation runs synchronously, returning an array of encountered errors, or\n * an empty array if no errors were encountered and the document is valid.\n *\n * A list of specific validation rules may be provided. If not provided, the\n * default list of rules defined by the GraphQL specification will be used.\n *\n * Each validation rules is a function which returns a visitor\n * (see the language/visitor API). Visitor methods are expected to return\n * GraphQLErrors, or Arrays of GraphQLErrors when invalid.\n *\n * Validate will stop validation after a `maxErrors` limit has been reached.\n * Attackers can send pathologically invalid queries to induce a DoS attack,\n * so by default `maxErrors` set to 100 errors.\n *\n * Optionally a custom TypeInfo instance may be provided. If not provided, one\n * will be created from the provided schema.\n */\nfunction validate(\n  schema,\n  documentAST,\n  rules = _specifiedRules.specifiedRules,\n  options,\n  /** @deprecated will be removed in 17.0.0 */\n  typeInfo = new _TypeInfo.TypeInfo(schema),\n) {\n  var _options$maxErrors;\n\n  const maxErrors =\n    (_options$maxErrors =\n      options === null || options === void 0 ? void 0 : options.maxErrors) !==\n      null && _options$maxErrors !== void 0\n      ? _options$maxErrors\n      : 100;\n  documentAST || (0, _devAssert.devAssert)(false, 'Must provide document.'); // If the schema used for validation is invalid, throw an error.\n\n  (0, _validate.assertValidSchema)(schema);\n  const abortObj = Object.freeze({});\n  const errors = [];\n  const context = new _ValidationContext.ValidationContext(\n    schema,\n    documentAST,\n    typeInfo,\n    (error) => {\n      if (errors.length >= maxErrors) {\n        errors.push(\n          new _GraphQLError.GraphQLError(\n            'Too many validation errors, error limit reached. Validation aborted.',\n          ),\n        ); // eslint-disable-next-line @typescript-eslint/no-throw-literal\n\n        throw abortObj;\n      }\n\n      errors.push(error);\n    },\n  ); // This uses a specialized visitor which runs multiple visitors in parallel,\n  // while maintaining the visitor skip and break API.\n\n  const visitor = (0, _visitor.visitInParallel)(\n    rules.map((rule) => rule(context)),\n  ); // Visit the whole document with each instance of all provided rules.\n\n  try {\n    (0, _visitor.visit)(\n      documentAST,\n      (0, _TypeInfo.visitWithTypeInfo)(typeInfo, visitor),\n    );\n  } catch (e) {\n    if (e !== abortObj) {\n      throw e;\n    }\n  }\n\n  return errors;\n}\n/**\n * @internal\n */\n\nfunction validateSDL(\n  documentAST,\n  schemaToExtend,\n  rules = _specifiedRules.specifiedSDLRules,\n) {\n  const errors = [];\n  const context = new _ValidationContext.SDLValidationContext(\n    documentAST,\n    schemaToExtend,\n    (error) => {\n      errors.push(error);\n    },\n  );\n  const visitors = rules.map((rule) => rule(context));\n  (0, _visitor.visit)(documentAST, (0, _visitor.visitInParallel)(visitors));\n  return errors;\n}\n/**\n * Utility function which asserts a SDL document is valid by throwing an error\n * if it is invalid.\n *\n * @internal\n */\n\nfunction assertValidSDL(documentAST) {\n  const errors = validateSDL(documentAST);\n\n  if (errors.length !== 0) {\n    throw new Error(errors.map((error) => error.message).join('\\n\\n'));\n  }\n}\n/**\n * Utility function which asserts a SDL document is valid by throwing an error\n * if it is invalid.\n *\n * @internal\n */\n\nfunction assertValidSDLExtension(documentAST, schema) {\n  const errors = validateSDL(documentAST, schema);\n\n  if (errors.length !== 0) {\n    throw new Error(errors.map((error) => error.message).join('\\n\\n'));\n  }\n}\n*/validation/rules/UniqueTypeNamesRule.d.ts\u0001Eimport type { ASTVisitor } from '../../language/visitor';\nimport type { SDLValidationContext } from '../ValidationContext';\n/**\n * Unique type names\n *\n * A GraphQL document is only valid if all defined types have unique names.\n */\nexport declare function UniqueTypeNamesRule(\n  context: SDLValidationContext,\n): ASTVisitor;\n/language/printString.mjs\u0007/**\n * Prints a string as a GraphQL StringValue literal. Replaces control characters\n * and excluded characters (\" U+0022 and \\\\ U+005C) with escape sequences.\n */\nexport function printString(str) {\n  return `\"${str.replace(escapedRegExp, escapedReplacer)}\"`;\n} // eslint-disable-next-line no-control-regex\n\nconst escapedRegExp = /[\\x00-\\x1f\\x22\\x5c\\x7f-\\x9f]/g;\n\nfunction escapedReplacer(str) {\n  return escapeSequences[str.charCodeAt(0)];\n} // prettier-ignore\n\nconst escapeSequences = [\n  '\\\\u0000',\n  '\\\\u0001',\n  '\\\\u0002',\n  '\\\\u0003',\n  '\\\\u0004',\n  '\\\\u0005',\n  '\\\\u0006',\n  '\\\\u0007',\n  '\\\\b',\n  '\\\\t',\n  '\\\\n',\n  '\\\\u000B',\n  '\\\\f',\n  '\\\\r',\n  '\\\\u000E',\n  '\\\\u000F',\n  '\\\\u0010',\n  '\\\\u0011',\n  '\\\\u0012',\n  '\\\\u0013',\n  '\\\\u0014',\n  '\\\\u0015',\n  '\\\\u0016',\n  '\\\\u0017',\n  '\\\\u0018',\n  '\\\\u0019',\n  '\\\\u001A',\n  '\\\\u001B',\n  '\\\\u001C',\n  '\\\\u001D',\n  '\\\\u001E',\n  '\\\\u001F',\n  '',\n  '',\n  '\\\\\"',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '', // 2F\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '', // 3F\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '', // 4F\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '\\\\\\\\',\n  '',\n  '',\n  '', // 5F\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '', // 6F\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '\\\\u007F',\n  '\\\\u0080',\n  '\\\\u0081',\n  '\\\\u0082',\n  '\\\\u0083',\n  '\\\\u0084',\n  '\\\\u0085',\n  '\\\\u0086',\n  '\\\\u0087',\n  '\\\\u0088',\n  '\\\\u0089',\n  '\\\\u008A',\n  '\\\\u008B',\n  '\\\\u008C',\n  '\\\\u008D',\n  '\\\\u008E',\n  '\\\\u008F',\n  '\\\\u0090',\n  '\\\\u0091',\n  '\\\\u0092',\n  '\\\\u0093',\n  '\\\\u0094',\n  '\\\\u0095',\n  '\\\\u0096',\n  '\\\\u0097',\n  '\\\\u0098',\n  '\\\\u0099',\n  '\\\\u009A',\n  '\\\\u009B',\n  '\\\\u009C',\n  '\\\\u009D',\n  '\\\\u009E',\n  '\\\\u009F',\n];\n/jsutils/identityFunc.mjsc/**\n * Returns the first argument it receives.\n */\nexport function identityFunc(x) {\n  return x;\n}\n/jsutils/invariant.d.tscexport declare function invariant(\n  condition: unknown,\n  message?: string,\n): asserts condition;\n#/utilities/valueFromASTUntyped.d.ts\u0003Limport type { Maybe } from '../jsutils/Maybe';\nimport type { ObjMap } from '../jsutils/ObjMap';\nimport type { ValueNode } from '../language/ast';\n/**\n * Produces a JavaScript value given a GraphQL Value AST.\n *\n * Unlike `valueFromAST()`, no type is provided. The resulting JavaScript value\n * will reflect the provided GraphQL value AST.\n *\n * | GraphQL Value        | JavaScript Value |\n * | -------------------- | ---------------- |\n * | Input Object         | Object           |\n * | List                 | Array            |\n * | Boolean              | Boolean          |\n * | String / Enum        | String           |\n * | Int / Float          | Number           |\n * | Null                 | null             |\n *\n */\nexport declare function valueFromASTUntyped(\n  valueNode: ValueNode,\n  variables?: Maybe<ObjMap<unknown>>,\n): unknown;\n,/validation/rules/FieldsOnCorrectTypeRule.js\u0011\u0014'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.FieldsOnCorrectTypeRule = FieldsOnCorrectTypeRule;\n\nvar _didYouMean = require('../../jsutils/didYouMean.js');\n\nvar _naturalCompare = require('../../jsutils/naturalCompare.js');\n\nvar _suggestionList = require('../../jsutils/suggestionList.js');\n\nvar _GraphQLError = require('../../error/GraphQLError.js');\n\nvar _definition = require('../../type/definition.js');\n\n/**\n * Fields on correct type\n *\n * A GraphQL document is only valid if all fields selected are defined by the\n * parent type, or are an allowed meta field such as __typename.\n *\n * See https://spec.graphql.org/draft/#sec-Field-Selections\n */\nfunction FieldsOnCorrectTypeRule(context) {\n  return {\n    Field(node) {\n      const type = context.getParentType();\n\n      if (type) {\n        const fieldDef = context.getFieldDef();\n\n        if (!fieldDef) {\n          // This field doesn't exist, lets look for suggestions.\n          const schema = context.getSchema();\n          const fieldName = node.name.value; // First determine if there are any suggested types to condition on.\n\n          let suggestion = (0, _didYouMean.didYouMean)(\n            'to use an inline fragment on',\n            getSuggestedTypeNames(schema, type, fieldName),\n          ); // If there are no suggested types, then perhaps this was a typo?\n\n          if (suggestion === '') {\n            suggestion = (0, _didYouMean.didYouMean)(\n              getSuggestedFieldNames(type, fieldName),\n            );\n          } // Report an error, including helpful suggestions.\n\n          context.reportError(\n            new _GraphQLError.GraphQLError(\n              `Cannot query field \"${fieldName}\" on type \"${type.name}\".` +\n                suggestion,\n              {\n                nodes: node,\n              },\n            ),\n          );\n        }\n      }\n    },\n  };\n}\n/**\n * Go through all of the implementations of type, as well as the interfaces that\n * they implement. If any of those types include the provided field, suggest them,\n * sorted by how often the type is referenced.\n */\n\nfunction getSuggestedTypeNames(schema, type, fieldName) {\n  if (!(0, _definition.isAbstractType)(type)) {\n    // Must be an Object type, which does not have possible fields.\n    return [];\n  }\n\n  const suggestedTypes = new Set();\n  const usageCount = Object.create(null);\n\n  for (const possibleType of schema.getPossibleTypes(type)) {\n    if (!possibleType.getFields()[fieldName]) {\n      continue;\n    } // This object type defines this field.\n\n    suggestedTypes.add(possibleType);\n    usageCount[possibleType.name] = 1;\n\n    for (const possibleInterface of possibleType.getInterfaces()) {\n      var _usageCount$possibleI;\n\n      if (!possibleInterface.getFields()[fieldName]) {\n        continue;\n      } // This interface type defines this field.\n\n      suggestedTypes.add(possibleInterface);\n      usageCount[possibleInterface.name] =\n        ((_usageCount$possibleI = usageCount[possibleInterface.name]) !==\n          null && _usageCount$possibleI !== void 0\n          ? _usageCount$possibleI\n          : 0) + 1;\n    }\n  }\n\n  return [...suggestedTypes]\n    .sort((typeA, typeB) => {\n      // Suggest both interface and object types based on how common they are.\n      const usageCountDiff = usageCount[typeB.name] - usageCount[typeA.name];\n\n      if (usageCountDiff !== 0) {\n        return usageCountDiff;\n      } // Suggest super types first followed by subtypes\n\n      if (\n        (0, _definition.isInterfaceType)(typeA) &&\n        schema.isSubType(typeA, typeB)\n      ) {\n        return -1;\n      }\n\n      if (\n        (0, _definition.isInterfaceType)(typeB) &&\n        schema.isSubType(typeB, typeA)\n      ) {\n        return 1;\n      }\n\n      return (0, _naturalCompare.naturalCompare)(typeA.name, typeB.name);\n    })\n    .map((x) => x.name);\n}\n/**\n * For the field name provided, determine if there are any similar field names\n * that may be the result of a typo.\n */\n\nfunction getSuggestedFieldNames(type, fieldName) {\n  if (\n    (0, _definition.isObjectType)(type) ||\n    (0, _definition.isInterfaceType)(type)\n  ) {\n    const possibleFieldNames = Object.keys(type.getFields());\n    return (0, _suggestionList.suggestionList)(fieldName, possibleFieldNames);\n  } // Otherwise, must be a Union type, which does not define fields.\n\n  return [];\n}\n/validation/index.mjs\u0011export { validate } from './validate.mjs';\nexport { ValidationContext } from './ValidationContext.mjs';\n// All validation rules in the GraphQL Specification.\nexport { specifiedRules } from './specifiedRules.mjs'; // Spec Section: \"Executable Definitions\"\n\nexport { ExecutableDefinitionsRule } from './rules/ExecutableDefinitionsRule.mjs'; // Spec Section: \"Field Selections on Objects, Interfaces, and Unions Types\"\n\nexport { FieldsOnCorrectTypeRule } from './rules/FieldsOnCorrectTypeRule.mjs'; // Spec Section: \"Fragments on Composite Types\"\n\nexport { FragmentsOnCompositeTypesRule } from './rules/FragmentsOnCompositeTypesRule.mjs'; // Spec Section: \"Argument Names\"\n\nexport { KnownArgumentNamesRule } from './rules/KnownArgumentNamesRule.mjs'; // Spec Section: \"Directives Are Defined\"\n\nexport { KnownDirectivesRule } from './rules/KnownDirectivesRule.mjs'; // Spec Section: \"Fragment spread target defined\"\n\nexport { KnownFragmentNamesRule } from './rules/KnownFragmentNamesRule.mjs'; // Spec Section: \"Fragment Spread Type Existence\"\n\nexport { KnownTypeNamesRule } from './rules/KnownTypeNamesRule.mjs'; // Spec Section: \"Lone Anonymous Operation\"\n\nexport { LoneAnonymousOperationRule } from './rules/LoneAnonymousOperationRule.mjs'; // Spec Section: \"Fragments must not form cycles\"\n\nexport { NoFragmentCyclesRule } from './rules/NoFragmentCyclesRule.mjs'; // Spec Section: \"All Variable Used Defined\"\n\nexport { NoUndefinedVariablesRule } from './rules/NoUndefinedVariablesRule.mjs'; // Spec Section: \"Fragments must be used\"\n\nexport { NoUnusedFragmentsRule } from './rules/NoUnusedFragmentsRule.mjs'; // Spec Section: \"All Variables Used\"\n\nexport { NoUnusedVariablesRule } from './rules/NoUnusedVariablesRule.mjs'; // Spec Section: \"Field Selection Merging\"\n\nexport { OverlappingFieldsCanBeMergedRule } from './rules/OverlappingFieldsCanBeMergedRule.mjs'; // Spec Section: \"Fragment spread is possible\"\n\nexport { PossibleFragmentSpreadsRule } from './rules/PossibleFragmentSpreadsRule.mjs'; // Spec Section: \"Argument Optionality\"\n\nexport { ProvidedRequiredArgumentsRule } from './rules/ProvidedRequiredArgumentsRule.mjs'; // Spec Section: \"Leaf Field Selections\"\n\nexport { ScalarLeafsRule } from './rules/ScalarLeafsRule.mjs'; // Spec Section: \"Subscriptions with Single Root Field\"\n\nexport { SingleFieldSubscriptionsRule } from './rules/SingleFieldSubscriptionsRule.mjs'; // Spec Section: \"Argument Uniqueness\"\n\nexport { UniqueArgumentNamesRule } from './rules/UniqueArgumentNamesRule.mjs'; // Spec Section: \"Directives Are Unique Per Location\"\n\nexport { UniqueDirectivesPerLocationRule } from './rules/UniqueDirectivesPerLocationRule.mjs'; // Spec Section: \"Fragment Name Uniqueness\"\n\nexport { UniqueFragmentNamesRule } from './rules/UniqueFragmentNamesRule.mjs'; // Spec Section: \"Input Object Field Uniqueness\"\n\nexport { UniqueInputFieldNamesRule } from './rules/UniqueInputFieldNamesRule.mjs'; // Spec Section: \"Operation Name Uniqueness\"\n\nexport { UniqueOperationNamesRule } from './rules/UniqueOperationNamesRule.mjs'; // Spec Section: \"Variable Uniqueness\"\n\nexport { UniqueVariableNamesRule } from './rules/UniqueVariableNamesRule.mjs'; // Spec Section: \"Values Type Correctness\"\n\nexport { ValuesOfCorrectTypeRule } from './rules/ValuesOfCorrectTypeRule.mjs'; // Spec Section: \"Variables are Input Types\"\n\nexport { VariablesAreInputTypesRule } from './rules/VariablesAreInputTypesRule.mjs'; // Spec Section: \"All Variable Usages Are Allowed\"\n\nexport { VariablesInAllowedPositionRule } from './rules/VariablesInAllowedPositionRule.mjs'; // SDL-specific validation rules\n\nexport { LoneSchemaDefinitionRule } from './rules/LoneSchemaDefinitionRule.mjs';\nexport { UniqueOperationTypesRule } from './rules/UniqueOperationTypesRule.mjs';\nexport { UniqueTypeNamesRule } from './rules/UniqueTypeNamesRule.mjs';\nexport { UniqueEnumValueNamesRule } from './rules/UniqueEnumValueNamesRule.mjs';\nexport { UniqueFieldDefinitionNamesRule } from './rules/UniqueFieldDefinitionNamesRule.mjs';\nexport { UniqueArgumentDefinitionNamesRule } from './rules/UniqueArgumentDefinitionNamesRule.mjs';\nexport { UniqueDirectiveNamesRule } from './rules/UniqueDirectiveNamesRule.mjs';\nexport { PossibleTypeExtensionsRule } from './rules/PossibleTypeExtensionsRule.mjs'; // Optional rules not defined by the GraphQL Specification\n\nexport { NoDeprecatedCustomRule } from './rules/custom/NoDeprecatedCustomRule.mjs';\nexport { NoSchemaIntrospectionCustomRule } from './rules/custom/NoSchemaIntrospectionCustomRule.mjs';\n3/validation/rules/FragmentsOnCompositeTypesRule.mjs\u0006aimport { GraphQLError } from '../../error/GraphQLError.mjs';\nimport { print } from '../../language/printer.mjs';\nimport { isCompositeType } from '../../type/definition.mjs';\nimport { typeFromAST } from '../../utilities/typeFromAST.mjs';\n\n/**\n * Fragments on composite type\n *\n * Fragments use a type condition to determine if they apply, since fragments\n * can only be spread into a composite type (object, interface, or union), the\n * type condition must also be a composite type.\n *\n * See https://spec.graphql.org/draft/#sec-Fragments-On-Composite-Types\n */\nexport function FragmentsOnCompositeTypesRule(context) {\n  return {\n    InlineFragment(node) {\n      const typeCondition = node.typeCondition;\n\n      if (typeCondition) {\n        const type = typeFromAST(context.getSchema(), typeCondition);\n\n        if (type && !isCompositeType(type)) {\n          const typeStr = print(typeCondition);\n          context.reportError(\n            new GraphQLError(\n              `Fragment cannot condition on non composite type \"${typeStr}\".`,\n              {\n                nodes: typeCondition,\n              },\n            ),\n          );\n        }\n      }\n    },\n\n    FragmentDefinition(node) {\n      const type = typeFromAST(context.getSchema(), node.typeCondition);\n\n      if (type && !isCompositeType(type)) {\n        const typeStr = print(node.typeCondition);\n        context.reportError(\n          new GraphQLError(\n            `Fragment \"${node.name.value}\" cannot condition on non composite type \"${typeStr}\".`,\n            {\n              nodes: node.typeCondition,\n            },\n          ),\n        );\n      }\n    },\n  };\n}\n/type/schema.js.\u000f'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.GraphQLSchema = void 0;\nexports.assertSchema = assertSchema;\nexports.isSchema = isSchema;\n\nvar _devAssert = require('../jsutils/devAssert.js');\n\nvar _inspect = require('../jsutils/inspect.js');\n\nvar _instanceOf = require('../jsutils/instanceOf.js');\n\nvar _isObjectLike = require('../jsutils/isObjectLike.js');\n\nvar _toObjMap = require('../jsutils/toObjMap.js');\n\nvar _ast = require('../language/ast.js');\n\nvar _definition = require('./definition.js');\n\nvar _directives = require('./directives.js');\n\nvar _introspection = require('./introspection.js');\n\n/**\n * Test if the given value is a GraphQL schema.\n */\nfunction isSchema(schema) {\n  return (0, _instanceOf.instanceOf)(schema, GraphQLSchema);\n}\n\nfunction assertSchema(schema) {\n  if (!isSchema(schema)) {\n    throw new Error(\n      `Expected ${(0, _inspect.inspect)(schema)} to be a GraphQL schema.`,\n    );\n  }\n\n  return schema;\n}\n/**\n * Custom extensions\n *\n * @remarks\n * Use a unique identifier name for your extension, for example the name of\n * your library or project. Do not use a shortened identifier as this increases\n * the risk of conflicts. We recommend you add at most one extension field,\n * an object which can contain all the values you need.\n */\n\n/**\n * Schema Definition\n *\n * A Schema is created by supplying the root types of each type of operation,\n * query and mutation (optional). A schema definition is then supplied to the\n * validator and executor.\n *\n * Example:\n *\n * ```ts\n * const MyAppSchema = new GraphQLSchema({\n *   query: MyAppQueryRootType,\n *   mutation: MyAppMutationRootType,\n * })\n * ```\n *\n * Note: When the schema is constructed, by default only the types that are\n * reachable by traversing the root types are included, other types must be\n * explicitly referenced.\n *\n * Example:\n *\n * ```ts\n * const characterInterface = new GraphQLInterfaceType({\n *   name: 'Character',\n *   ...\n * });\n *\n * const humanType = new GraphQLObjectType({\n *   name: 'Human',\n *   interfaces: [characterInterface],\n *   ...\n * });\n *\n * const droidType = new GraphQLObjectType({\n *   name: 'Droid',\n *   interfaces: [characterInterface],\n *   ...\n * });\n *\n * const schema = new GraphQLSchema({\n *   query: new GraphQLObjectType({\n *     name: 'Query',\n *     fields: {\n *       hero: { type: characterInterface, ... },\n *     }\n *   }),\n *   ...\n *   // Since this schema references only the `Character` interface it's\n *   // necessary to explicitly list the types that implement it if\n *   // you want them to be included in the final schema.\n *   types: [humanType, droidType],\n * })\n * ```\n *\n * Note: If an array of `directives` are provided to GraphQLSchema, that will be\n * the exact list of directives represented and allowed. If `directives` is not\n * provided then a default set of the specified directives (e.g. `@include` and\n * `@skip`) will be used. If you wish to provide *additional* directives to these\n * specified directives, you must explicitly declare them. Example:\n *\n * ```ts\n * const MyAppSchema = new GraphQLSchema({\n *   ...\n *   directives: specifiedDirectives.concat([ myCustomDirective ]),\n * })\n * ```\n */\nclass GraphQLSchema {\n  // Used as a cache for validateSchema().\n  constructor(config) {\n    var _config$extensionASTN, _config$directives;\n\n    // If this schema was built from a source known to be valid, then it may be\n    // marked with assumeValid to avoid an additional type system validation.\n    this.__validationErrors = config.assumeValid === true ? [] : undefined; // Check for common mistakes during construction to produce early errors.\n\n    (0, _isObjectLike.isObjectLike)(config) ||\n      (0, _devAssert.devAssert)(false, 'Must provide configuration object.');\n    !config.types ||\n      Array.isArray(config.types) ||\n      (0, _devAssert.devAssert)(\n        false,\n        `\"types\" must be Array if provided but got: ${(0, _inspect.inspect)(\n          config.types,\n        )}.`,\n      );\n    !config.directives ||\n      Array.isArray(config.directives) ||\n      (0, _devAssert.devAssert)(\n        false,\n        '\"directives\" must be Array if provided but got: ' +\n          `${(0, _inspect.inspect)(config.directives)}.`,\n      );\n    this.description = config.description;\n    this.extensions = (0, _toObjMap.toObjMap)(config.extensions);\n    this.astNode = config.astNode;\n    this.extensionASTNodes =\n      (_config$extensionASTN = config.extensionASTNodes) !== null &&\n      _config$extensionASTN !== void 0\n        ? _config$extensionASTN\n        : [];\n    this._queryType = config.query;\n    this._mutationType = config.mutation;\n    this._subscriptionType = config.subscription; // Provide specified directives (e.g. @include and @skip) by default.\n\n    this._directives =\n      (_config$directives = config.directives) !== null &&\n      _config$directives !== void 0\n        ? _config$directives\n        : _directives.specifiedDirectives; // To preserve order of user-provided types, we add first to add them to\n    // the set of \"collected\" types, so `collectReferencedTypes` ignore them.\n\n    const allReferencedTypes = new Set(config.types);\n\n    if (config.types != null) {\n      for (const type of config.types) {\n        // When we ready to process this type, we remove it from \"collected\" types\n        // and then add it together with all dependent types in the correct position.\n        allReferencedTypes.delete(type);\n        collectReferencedTypes(type, allReferencedTypes);\n      }\n    }\n\n    if (this._queryType != null) {\n      collectReferencedTypes(this._queryType, allReferencedTypes);\n    }\n\n    if (this._mutationType != null) {\n      collectReferencedTypes(this._mutationType, allReferencedTypes);\n    }\n\n    if (this._subscriptionType != null) {\n      collectReferencedTypes(this._subscriptionType, allReferencedTypes);\n    }\n\n    for (const directive of this._directives) {\n      // Directives are not validated until validateSchema() is called.\n      if ((0, _directives.isDirective)(directive)) {\n        for (const arg of directive.args) {\n          collectReferencedTypes(arg.type, allReferencedTypes);\n        }\n      }\n    }\n\n    collectReferencedTypes(_introspection.__Schema, allReferencedTypes); // Storing the resulting map for reference by the schema.\n\n    this._typeMap = Object.create(null);\n    this._subTypeMap = Object.create(null); // Keep track of all implementations by interface name.\n\n    this._implementationsMap = Object.create(null);\n\n    for (const namedType of allReferencedTypes) {\n      if (namedType == null) {\n        continue;\n      }\n\n      const typeName = namedType.name;\n      typeName ||\n        (0, _devAssert.devAssert)(\n          false,\n          'One of the provided types for building the Schema is missing a name.',\n        );\n\n      if (this._typeMap[typeName] !== undefined) {\n        throw new Error(\n          `Schema must contain uniquely named types but contains multiple types named \"${typeName}\".`,\n        );\n      }\n\n      this._typeMap[typeName] = namedType;\n\n      if ((0, _definition.isInterfaceType)(namedType)) {\n        // Store implementations by interface.\n        for (const iface of namedType.getInterfaces()) {\n          if ((0, _definition.isInterfaceType)(iface)) {\n            let implementations = this._implementationsMap[iface.name];\n\n            if (implementations === undefined) {\n              implementations = this._implementationsMap[iface.name] = {\n                objects: [],\n                interfaces: [],\n              };\n            }\n\n            implementations.interfaces.push(namedType);\n          }\n        }\n      } else if ((0, _definition.isObjectType)(namedType)) {\n        // Store implementations by objects.\n        for (const iface of namedType.getInterfaces()) {\n          if ((0, _definition.isInterfaceType)(iface)) {\n            let implementations = this._implementationsMap[iface.name];\n\n            if (implementations === undefined) {\n              implementations = this._implementationsMap[iface.name] = {\n                objects: [],\n                interfaces: [],\n              };\n            }\n\n            implementations.objects.push(namedType);\n          }\n        }\n      }\n    }\n  }\n\n  get [Symbol.toStringTag]() {\n    return 'GraphQLSchema';\n  }\n\n  getQueryType() {\n    return this._queryType;\n  }\n\n  getMutationType() {\n    return this._mutationType;\n  }\n\n  getSubscriptionType() {\n    return this._subscriptionType;\n  }\n\n  getRootType(operation) {\n    switch (operation) {\n      case _ast.OperationTypeNode.QUERY:\n        return this.getQueryType();\n\n      case _ast.OperationTypeNode.MUTATION:\n        return this.getMutationType();\n\n      case _ast.OperationTypeNode.SUBSCRIPTION:\n        return this.getSubscriptionType();\n    }\n  }\n\n  getTypeMap() {\n    return this._typeMap;\n  }\n\n  getType(name) {\n    return this.getTypeMap()[name];\n  }\n\n  getPossibleTypes(abstractType) {\n    return (0, _definition.isUnionType)(abstractType)\n      ? abstractType.getTypes()\n      : this.getImplementations(abstractType).objects;\n  }\n\n  getImplementations(interfaceType) {\n    const implementations = this._implementationsMap[interfaceType.name];\n    return implementations !== null && implementations !== void 0\n      ? implementations\n      : {\n          objects: [],\n          interfaces: [],\n        };\n  }\n\n  isSubType(abstractType, maybeSubType) {\n    let map = this._subTypeMap[abstractType.name];\n\n    if (map === undefined) {\n      map = Object.create(null);\n\n      if ((0, _definition.isUnionType)(abstractType)) {\n        for (const type of abstractType.getTypes()) {\n          map[type.name] = true;\n        }\n      } else {\n        const implementations = this.getImplementations(abstractType);\n\n        for (const type of implementations.objects) {\n          map[type.name] = true;\n        }\n\n        for (const type of implementations.interfaces) {\n          map[type.name] = true;\n        }\n      }\n\n      this._subTypeMap[abstractType.name] = map;\n    }\n\n    return map[maybeSubType.name] !== undefined;\n  }\n\n  getDirectives() {\n    return this._directives;\n  }\n\n  getDirective(name) {\n    return this.getDirectives().find((directive) => directive.name === name);\n  }\n\n  toConfig() {\n    return {\n      description: this.description,\n      query: this.getQueryType(),\n      mutation: this.getMutationType(),\n      subscription: this.getSubscriptionType(),\n      types: Object.values(this.getTypeMap()),\n      directives: this.getDirectives(),\n      extensions: this.extensions,\n      astNode: this.astNode,\n      extensionASTNodes: this.extensionASTNodes,\n      assumeValid: this.__validationErrors !== undefined,\n    };\n  }\n}\n\nexports.GraphQLSchema = GraphQLSchema;\n\nfunction collectReferencedTypes(type, typeSet) {\n  const namedType = (0, _definition.getNamedType)(type);\n\n  if (!typeSet.has(namedType)) {\n    typeSet.add(namedType);\n\n    if ((0, _definition.isUnionType)(namedType)) {\n      for (const memberType of namedType.getTypes()) {\n        collectReferencedTypes(memberType, typeSet);\n      }\n    } else if (\n      (0, _definition.isObjectType)(namedType) ||\n      (0, _definition.isInterfaceType)(namedType)\n    ) {\n      for (const interfaceType of namedType.getInterfaces()) {\n        collectReferencedTypes(interfaceType, typeSet);\n      }\n\n      for (const field of Object.values(namedType.getFields())) {\n        collectReferencedTypes(field.type, typeSet);\n\n        for (const arg of field.args) {\n          collectReferencedTypes(arg.type, typeSet);\n        }\n      }\n    } else if ((0, _definition.isInputObjectType)(namedType)) {\n      for (const field of Object.values(namedType.getFields())) {\n        collectReferencedTypes(field.type, typeSet);\n      }\n    }\n  }\n\n  return typeSet;\n}\n/jsutils/Path.mjs\u0001/**\n * Given a Path and a key, return a new Path containing the new key.\n */\nexport function addPath(prev, key, typename) {\n  return {\n    prev,\n    key,\n    typename,\n  };\n}\n/**\n * Given a Path, return an Array of the path keys.\n */\n\nexport function pathToArray(path) {\n  const flattened = [];\n  let curr = path;\n\n  while (curr) {\n    flattened.push(curr.key);\n    curr = curr.prev;\n  }\n\n  return flattened.reverse();\n}\n/jsutils/isIterableObject.js\u0003'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.isIterableObject = isIterableObject;\n\n/**\n * Returns true if the provided object is an Object (i.e. not a string literal)\n * and implements the Iterator protocol.\n *\n * This may be used in place of [Array.isArray()][isArray] to determine if\n * an object should be iterated-over e.g. Array, Map, Set, Int8Array,\n * TypedArray, etc. but excludes string literals.\n *\n * @example\n * ```ts\n * isIterableObject([ 1, 2, 3 ]) // true\n * isIterableObject(new Map()) // true\n * isIterableObject('ABC') // false\n * isIterableObject({ key: 'value' }) // false\n * isIterableObject({ length: 1, 0: 'Alpha' }) // false\n * ```\n */\nfunction isIterableObject(maybeIterable) {\n  return (\n    typeof maybeIterable === 'object' &&\n    typeof (maybeIterable === null || maybeIterable === void 0\n      ? void 0\n      : maybeIterable[Symbol.iterator]) === 'function'\n  );\n}\n3/validation/rules/UniqueFieldDefinitionNamesRule.js\t'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.UniqueFieldDefinitionNamesRule = UniqueFieldDefinitionNamesRule;\n\nvar _GraphQLError = require('../../error/GraphQLError.js');\n\nvar _definition = require('../../type/definition.js');\n\n/**\n * Unique field definition names\n *\n * A GraphQL complex type is only valid if all its fields are uniquely named.\n */\nfunction UniqueFieldDefinitionNamesRule(context) {\n  const schema = context.getSchema();\n  const existingTypeMap = schema ? schema.getTypeMap() : Object.create(null);\n  const knownFieldNames = Object.create(null);\n  return {\n    InputObjectTypeDefinition: checkFieldUniqueness,\n    InputObjectTypeExtension: checkFieldUniqueness,\n    InterfaceTypeDefinition: checkFieldUniqueness,\n    InterfaceTypeExtension: checkFieldUniqueness,\n    ObjectTypeDefinition: checkFieldUniqueness,\n    ObjectTypeExtension: checkFieldUniqueness,\n  };\n\n  function checkFieldUniqueness(node) {\n    var _node$fields;\n\n    const typeName = node.name.value;\n\n    if (!knownFieldNames[typeName]) {\n      knownFieldNames[typeName] = Object.create(null);\n    } // FIXME: https://github.com/graphql/graphql-js/issues/2203\n\n    /* c8 ignore next */\n\n    const fieldNodes =\n      (_node$fields = node.fields) !== null && _node$fields !== void 0\n        ? _node$fields\n        : [];\n    const fieldNames = knownFieldNames[typeName];\n\n    for (const fieldDef of fieldNodes) {\n      const fieldName = fieldDef.name.value;\n\n      if (hasField(existingTypeMap[typeName], fieldName)) {\n        context.reportError(\n          new _GraphQLError.GraphQLError(\n            `Field \"${typeName}.${fieldName}\" already exists in the schema. It cannot also be defined in this type extension.`,\n            {\n              nodes: fieldDef.name,\n            },\n          ),\n        );\n      } else if (fieldNames[fieldName]) {\n        context.reportError(\n          new _GraphQLError.GraphQLError(\n            `Field \"${typeName}.${fieldName}\" can only be defined once.`,\n            {\n              nodes: [fieldNames[fieldName], fieldDef.name],\n            },\n          ),\n        );\n      } else {\n        fieldNames[fieldName] = fieldDef.name;\n      }\n    }\n\n    return false;\n  }\n}\n\nfunction hasField(type, fieldName) {\n  if (\n    (0, _definition.isObjectType)(type) ||\n    (0, _definition.isInterfaceType)(type) ||\n    (0, _definition.isInputObjectType)(type)\n  ) {\n    return type.getFields()[fieldName] != null;\n  }\n\n  return false;\n}\n/jsutils/mapValue.d.ts\u0001+import type { ObjMap, ReadOnlyObjMap } from './ObjMap';\n/**\n * Creates an object map with the same keys as `map` and values generated by\n * running each value of `map` thru `fn`.\n */\nexport declare function mapValue<T, V>(\n  map: ReadOnlyObjMap<T>,\n  fn: (value: T, key: string) => V,\n): ObjMap<V>;\n/type/index.mjs\texport {\n  // Predicate\n  isSchema, // Assertion\n  assertSchema, // GraphQL Schema definition\n  GraphQLSchema,\n} from './schema.mjs';\nexport {\n  resolveObjMapThunk,\n  resolveReadonlyArrayThunk, // Predicates\n  isType,\n  isScalarType,\n  isObjectType,\n  isInterfaceType,\n  isUnionType,\n  isEnumType,\n  isInputObjectType,\n  isListType,\n  isNonNullType,\n  isInputType,\n  isOutputType,\n  isLeafType,\n  isCompositeType,\n  isAbstractType,\n  isWrappingType,\n  isNullableType,\n  isNamedType,\n  isRequiredArgument,\n  isRequiredInputField, // Assertions\n  assertType,\n  assertScalarType,\n  assertObjectType,\n  assertInterfaceType,\n  assertUnionType,\n  assertEnumType,\n  assertInputObjectType,\n  assertListType,\n  assertNonNullType,\n  assertInputType,\n  assertOutputType,\n  assertLeafType,\n  assertCompositeType,\n  assertAbstractType,\n  assertWrappingType,\n  assertNullableType,\n  assertNamedType, // Un-modifiers\n  getNullableType,\n  getNamedType, // Definitions\n  GraphQLScalarType,\n  GraphQLObjectType,\n  GraphQLInterfaceType,\n  GraphQLUnionType,\n  GraphQLEnumType,\n  GraphQLInputObjectType, // Type Wrappers\n  GraphQLList,\n  GraphQLNonNull,\n} from './definition.mjs';\nexport {\n  // Predicate\n  isDirective, // Assertion\n  assertDirective, // Directives Definition\n  GraphQLDirective, // Built-in Directives defined by the Spec\n  isSpecifiedDirective,\n  specifiedDirectives,\n  GraphQLIncludeDirective,\n  GraphQLSkipDirective,\n  GraphQLDeprecatedDirective,\n  GraphQLSpecifiedByDirective, // Constant Deprecation Reason\n  DEFAULT_DEPRECATION_REASON,\n} from './directives.mjs';\n// Common built-in scalar instances.\nexport {\n  // Predicate\n  isSpecifiedScalarType, // Standard GraphQL Scalars\n  specifiedScalarTypes,\n  GraphQLInt,\n  GraphQLFloat,\n  GraphQLString,\n  GraphQLBoolean,\n  GraphQLID, // Int boundaries constants\n  GRAPHQL_MAX_INT,\n  GRAPHQL_MIN_INT,\n} from './scalars.mjs';\nexport {\n  // Predicate\n  isIntrospectionType, // GraphQL Types for introspection.\n  introspectionTypes,\n  __Schema,\n  __Directive,\n  __DirectiveLocation,\n  __Type,\n  __Field,\n  __InputValue,\n  __EnumValue,\n  __TypeKind, // \"Enum\" of Type Kinds\n  TypeKind, // Meta-field definitions.\n  SchemaMetaFieldDef,\n  TypeMetaFieldDef,\n  TypeNameMetaFieldDef,\n} from './introspection.mjs'; // Validate GraphQL schema.\n\nexport { validateSchema, assertValidSchema } from './validate.mjs'; // Upholds the spec rules about naming.\n\nexport { assertName, assertEnumValueName } from './assertName.mjs';\n/utilities/sortValueNode.js\u0004O'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.sortValueNode = sortValueNode;\n\nvar _naturalCompare = require('../jsutils/naturalCompare.js');\n\nvar _kinds = require('../language/kinds.js');\n\n/**\n * Sort ValueNode.\n *\n * This function returns a sorted copy of the given ValueNode.\n *\n * @internal\n */\nfunction sortValueNode(valueNode) {\n  switch (valueNode.kind) {\n    case _kinds.Kind.OBJECT:\n      return { ...valueNode, fields: sortFields(valueNode.fields) };\n\n    case _kinds.Kind.LIST:\n      return { ...valueNode, values: valueNode.values.map(sortValueNode) };\n\n    case _kinds.Kind.INT:\n    case _kinds.Kind.FLOAT:\n    case _kinds.Kind.STRING:\n    case _kinds.Kind.BOOLEAN:\n    case _kinds.Kind.NULL:\n    case _kinds.Kind.ENUM:\n    case _kinds.Kind.VARIABLE:\n      return valueNode;\n  }\n}\n\nfunction sortFields(fields) {\n  return fields\n    .map((fieldNode) => ({\n      ...fieldNode,\n      value: sortValueNode(fieldNode.value),\n    }))\n    .sort((fieldA, fieldB) =>\n      (0, _naturalCompare.naturalCompare)(fieldA.name.value, fieldB.name.value),\n    );\n}\n/type/definition.d.tszGimport type { Maybe } from '../jsutils/Maybe';\nimport type { ObjMap } from '../jsutils/ObjMap';\nimport type { Path } from '../jsutils/Path';\nimport type { PromiseOrValue } from '../jsutils/PromiseOrValue';\nimport type {\n  EnumTypeDefinitionNode,\n  EnumTypeExtensionNode,\n  EnumValueDefinitionNode,\n  FieldDefinitionNode,\n  FieldNode,\n  FragmentDefinitionNode,\n  InputObjectTypeDefinitionNode,\n  InputObjectTypeExtensionNode,\n  InputValueDefinitionNode,\n  InterfaceTypeDefinitionNode,\n  InterfaceTypeExtensionNode,\n  ObjectTypeDefinitionNode,\n  ObjectTypeExtensionNode,\n  OperationDefinitionNode,\n  ScalarTypeDefinitionNode,\n  ScalarTypeExtensionNode,\n  UnionTypeDefinitionNode,\n  UnionTypeExtensionNode,\n  ValueNode,\n} from '../language/ast';\nimport type { GraphQLSchema } from './schema';\n/**\n * These are all of the possible kinds of types.\n */\nexport declare type GraphQLType =\n  | GraphQLScalarType\n  | GraphQLObjectType\n  | GraphQLInterfaceType\n  | GraphQLUnionType\n  | GraphQLEnumType\n  | GraphQLInputObjectType\n  | GraphQLList<GraphQLType>\n  | GraphQLNonNull<\n      | GraphQLScalarType\n      | GraphQLObjectType\n      | GraphQLInterfaceType\n      | GraphQLUnionType\n      | GraphQLEnumType\n      | GraphQLInputObjectType\n      | GraphQLList<GraphQLType>\n    >;\nexport declare function isType(type: unknown): type is GraphQLType;\nexport declare function assertType(type: unknown): GraphQLType;\n/**\n * There are predicates for each kind of GraphQL type.\n */\nexport declare function isScalarType(type: unknown): type is GraphQLScalarType;\nexport declare function assertScalarType(type: unknown): GraphQLScalarType;\nexport declare function isObjectType(type: unknown): type is GraphQLObjectType;\nexport declare function assertObjectType(type: unknown): GraphQLObjectType;\nexport declare function isInterfaceType(\n  type: unknown,\n): type is GraphQLInterfaceType;\nexport declare function assertInterfaceType(\n  type: unknown,\n): GraphQLInterfaceType;\nexport declare function isUnionType(type: unknown): type is GraphQLUnionType;\nexport declare function assertUnionType(type: unknown): GraphQLUnionType;\nexport declare function isEnumType(type: unknown): type is GraphQLEnumType;\nexport declare function assertEnumType(type: unknown): GraphQLEnumType;\nexport declare function isInputObjectType(\n  type: unknown,\n): type is GraphQLInputObjectType;\nexport declare function assertInputObjectType(\n  type: unknown,\n): GraphQLInputObjectType;\nexport declare function isListType(\n  type: GraphQLInputType,\n): type is GraphQLList<GraphQLInputType>;\nexport declare function isListType(\n  type: GraphQLOutputType,\n): type is GraphQLList<GraphQLOutputType>;\nexport declare function isListType(\n  type: unknown,\n): type is GraphQLList<GraphQLType>;\nexport declare function assertListType(type: unknown): GraphQLList<GraphQLType>;\nexport declare function isNonNullType(\n  type: GraphQLInputType,\n): type is GraphQLNonNull<GraphQLInputType>;\nexport declare function isNonNullType(\n  type: GraphQLOutputType,\n): type is GraphQLNonNull<GraphQLOutputType>;\nexport declare function isNonNullType(\n  type: unknown,\n): type is GraphQLNonNull<GraphQLType>;\nexport declare function assertNonNullType(\n  type: unknown,\n): GraphQLNonNull<GraphQLType>;\n/**\n * These types may be used as input types for arguments and directives.\n */\nexport declare type GraphQLInputType =\n  | GraphQLScalarType\n  | GraphQLEnumType\n  | GraphQLInputObjectType\n  | GraphQLList<GraphQLInputType>\n  | GraphQLNonNull<\n      | GraphQLScalarType\n      | GraphQLEnumType\n      | GraphQLInputObjectType\n      | GraphQLList<GraphQLInputType>\n    >;\nexport declare function isInputType(type: unknown): type is GraphQLInputType;\nexport declare function assertInputType(type: unknown): GraphQLInputType;\n/**\n * These types may be used as output types as the result of fields.\n */\nexport declare type GraphQLOutputType =\n  | GraphQLScalarType\n  | GraphQLObjectType\n  | GraphQLInterfaceType\n  | GraphQLUnionType\n  | GraphQLEnumType\n  | GraphQLList<GraphQLOutputType>\n  | GraphQLNonNull<\n      | GraphQLScalarType\n      | GraphQLObjectType\n      | GraphQLInterfaceType\n      | GraphQLUnionType\n      | GraphQLEnumType\n      | GraphQLList<GraphQLOutputType>\n    >;\nexport declare function isOutputType(type: unknown): type is GraphQLOutputType;\nexport declare function assertOutputType(type: unknown): GraphQLOutputType;\n/**\n * These types may describe types which may be leaf values.\n */\nexport declare type GraphQLLeafType = GraphQLScalarType | GraphQLEnumType;\nexport declare function isLeafType(type: unknown): type is GraphQLLeafType;\nexport declare function assertLeafType(type: unknown): GraphQLLeafType;\n/**\n * These types may describe the parent context of a selection set.\n */\nexport declare type GraphQLCompositeType =\n  | GraphQLObjectType\n  | GraphQLInterfaceType\n  | GraphQLUnionType;\nexport declare function isCompositeType(\n  type: unknown,\n): type is GraphQLCompositeType;\nexport declare function assertCompositeType(\n  type: unknown,\n): GraphQLCompositeType;\n/**\n * These types may describe the parent context of a selection set.\n */\nexport declare type GraphQLAbstractType =\n  | GraphQLInterfaceType\n  | GraphQLUnionType;\nexport declare function isAbstractType(\n  type: unknown,\n): type is GraphQLAbstractType;\nexport declare function assertAbstractType(type: unknown): GraphQLAbstractType;\n/**\n * List Type Wrapper\n *\n * A list is a wrapping type which points to another type.\n * Lists are often created within the context of defining the fields of\n * an object type.\n *\n * Example:\n *\n * ```ts\n * const PersonType = new GraphQLObjectType({\n *   name: 'Person',\n *   fields: () => ({\n *     parents: { type: new GraphQLList(PersonType) },\n *     children: { type: new GraphQLList(PersonType) },\n *   })\n * })\n * ```\n */\nexport declare class GraphQLList<T extends GraphQLType> {\n  readonly ofType: T;\n  constructor(ofType: T);\n  get [Symbol.toStringTag](): string;\n  toString(): string;\n  toJSON(): string;\n}\n/**\n * Non-Null Type Wrapper\n *\n * A non-null is a wrapping type which points to another type.\n * Non-null types enforce that their values are never null and can ensure\n * an error is raised if this ever occurs during a request. It is useful for\n * fields which you can make a strong guarantee on non-nullability, for example\n * usually the id field of a database row will never be null.\n *\n * Example:\n *\n * ```ts\n * const RowType = new GraphQLObjectType({\n *   name: 'Row',\n *   fields: () => ({\n *     id: { type: new GraphQLNonNull(GraphQLString) },\n *   })\n * })\n * ```\n * Note: the enforcement of non-nullability occurs within the executor.\n */\nexport declare class GraphQLNonNull<T extends GraphQLNullableType> {\n  readonly ofType: T;\n  constructor(ofType: T);\n  get [Symbol.toStringTag](): string;\n  toString(): string;\n  toJSON(): string;\n}\n/**\n * These types wrap and modify other types\n */\nexport declare type GraphQLWrappingType =\n  | GraphQLList<GraphQLType>\n  | GraphQLNonNull<GraphQLType>;\nexport declare function isWrappingType(\n  type: unknown,\n): type is GraphQLWrappingType;\nexport declare function assertWrappingType(type: unknown): GraphQLWrappingType;\n/**\n * These types can all accept null as a value.\n */\nexport declare type GraphQLNullableType =\n  | GraphQLScalarType\n  | GraphQLObjectType\n  | GraphQLInterfaceType\n  | GraphQLUnionType\n  | GraphQLEnumType\n  | GraphQLInputObjectType\n  | GraphQLList<GraphQLType>;\nexport declare function isNullableType(\n  type: unknown,\n): type is GraphQLNullableType;\nexport declare function assertNullableType(type: unknown): GraphQLNullableType;\nexport declare function getNullableType(type: undefined | null): void;\nexport declare function getNullableType<T extends GraphQLNullableType>(\n  type: T | GraphQLNonNull<T>,\n): T;\nexport declare function getNullableType(\n  type: Maybe<GraphQLType>,\n): GraphQLNullableType | undefined;\n/**\n * These named types do not include modifiers like List or NonNull.\n */\nexport declare type GraphQLNamedType =\n  | GraphQLNamedInputType\n  | GraphQLNamedOutputType;\nexport declare type GraphQLNamedInputType =\n  | GraphQLScalarType\n  | GraphQLEnumType\n  | GraphQLInputObjectType;\nexport declare type GraphQLNamedOutputType =\n  | GraphQLScalarType\n  | GraphQLObjectType\n  | GraphQLInterfaceType\n  | GraphQLUnionType\n  | GraphQLEnumType;\nexport declare function isNamedType(type: unknown): type is GraphQLNamedType;\nexport declare function assertNamedType(type: unknown): GraphQLNamedType;\nexport declare function getNamedType(type: undefined | null): void;\nexport declare function getNamedType(\n  type: GraphQLInputType,\n): GraphQLNamedInputType;\nexport declare function getNamedType(\n  type: GraphQLOutputType,\n): GraphQLNamedOutputType;\nexport declare function getNamedType(type: GraphQLType): GraphQLNamedType;\nexport declare function getNamedType(\n  type: Maybe<GraphQLType>,\n): GraphQLNamedType | undefined;\n/**\n * Used while defining GraphQL types to allow for circular references in\n * otherwise immutable type definitions.\n */\nexport declare type ThunkReadonlyArray<T> =\n  | (() => ReadonlyArray<T>)\n  | ReadonlyArray<T>;\nexport declare type ThunkObjMap<T> = (() => ObjMap<T>) | ObjMap<T>;\nexport declare function resolveReadonlyArrayThunk<T>(\n  thunk: ThunkReadonlyArray<T>,\n): ReadonlyArray<T>;\nexport declare function resolveObjMapThunk<T>(thunk: ThunkObjMap<T>): ObjMap<T>;\n/**\n * Custom extensions\n *\n * @remarks\n * Use a unique identifier name for your extension, for example the name of\n * your library or project. Do not use a shortened identifier as this increases\n * the risk of conflicts. We recommend you add at most one extension field,\n * an object which can contain all the values you need.\n */\nexport interface GraphQLScalarTypeExtensions {\n  [attributeName: string]: unknown;\n}\n/**\n * Scalar Type Definition\n *\n * The leaf values of any request and input values to arguments are\n * Scalars (or Enums) and are defined with a name and a series of functions\n * used to parse input from ast or variables and to ensure validity.\n *\n * If a type's serialize function returns `null` or does not return a value\n * (i.e. it returns `undefined`) then an error will be raised and a `null`\n * value will be returned in the response. It is always better to validate\n *\n * Example:\n *\n * ```ts\n * const OddType = new GraphQLScalarType({\n *   name: 'Odd',\n *   serialize(value) {\n *     if (!Number.isFinite(value)) {\n *       throw new Error(\n *         `Scalar \"Odd\" cannot represent \"${value}\" since it is not a finite number.`,\n *       );\n *     }\n *\n *     if (value % 2 === 0) {\n *       throw new Error(`Scalar \"Odd\" cannot represent \"${value}\" since it is even.`);\n *     }\n *     return value;\n *   }\n * });\n * ```\n */\nexport declare class GraphQLScalarType<\n  TInternal = unknown,\n  TExternal = TInternal,\n> {\n  name: string;\n  description: Maybe<string>;\n  specifiedByURL: Maybe<string>;\n  serialize: GraphQLScalarSerializer<TExternal>;\n  parseValue: GraphQLScalarValueParser<TInternal>;\n  parseLiteral: GraphQLScalarLiteralParser<TInternal>;\n  extensions: Readonly<GraphQLScalarTypeExtensions>;\n  astNode: Maybe<ScalarTypeDefinitionNode>;\n  extensionASTNodes: ReadonlyArray<ScalarTypeExtensionNode>;\n  constructor(config: Readonly<GraphQLScalarTypeConfig<TInternal, TExternal>>);\n  get [Symbol.toStringTag](): string;\n  toConfig(): GraphQLScalarTypeNormalizedConfig<TInternal, TExternal>;\n  toString(): string;\n  toJSON(): string;\n}\nexport declare type GraphQLScalarSerializer<TExternal> = (\n  outputValue: unknown,\n) => TExternal;\nexport declare type GraphQLScalarValueParser<TInternal> = (\n  inputValue: unknown,\n) => TInternal;\nexport declare type GraphQLScalarLiteralParser<TInternal> = (\n  valueNode: ValueNode,\n  variables?: Maybe<ObjMap<unknown>>,\n) => TInternal;\nexport interface GraphQLScalarTypeConfig<TInternal, TExternal> {\n  name: string;\n  description?: Maybe<string>;\n  specifiedByURL?: Maybe<string>;\n  /** Serializes an internal value to include in a response. */\n  serialize?: GraphQLScalarSerializer<TExternal>;\n  /** Parses an externally provided value to use as an input. */\n  parseValue?: GraphQLScalarValueParser<TInternal>;\n  /** Parses an externally provided literal value to use as an input. */\n  parseLiteral?: GraphQLScalarLiteralParser<TInternal>;\n  extensions?: Maybe<Readonly<GraphQLScalarTypeExtensions>>;\n  astNode?: Maybe<ScalarTypeDefinitionNode>;\n  extensionASTNodes?: Maybe<ReadonlyArray<ScalarTypeExtensionNode>>;\n}\ninterface GraphQLScalarTypeNormalizedConfig<TInternal, TExternal>\n  extends GraphQLScalarTypeConfig<TInternal, TExternal> {\n  serialize: GraphQLScalarSerializer<TExternal>;\n  parseValue: GraphQLScalarValueParser<TInternal>;\n  parseLiteral: GraphQLScalarLiteralParser<TInternal>;\n  extensions: Readonly<GraphQLScalarTypeExtensions>;\n  extensionASTNodes: ReadonlyArray<ScalarTypeExtensionNode>;\n}\n/**\n * Custom extensions\n *\n * @remarks\n * Use a unique identifier name for your extension, for example the name of\n * your library or project. Do not use a shortened identifier as this increases\n * the risk of conflicts. We recommend you add at most one extension field,\n * an object which can contain all the values you need.\n *\n * We've provided these template arguments because this is an open type and\n * you may find them useful.\n */\nexport interface GraphQLObjectTypeExtensions<_TSource = any, _TContext = any> {\n  [attributeName: string]: unknown;\n}\n/**\n * Object Type Definition\n *\n * Almost all of the GraphQL types you define will be object types. Object types\n * have a name, but most importantly describe their fields.\n *\n * Example:\n *\n * ```ts\n * const AddressType = new GraphQLObjectType({\n *   name: 'Address',\n *   fields: {\n *     street: { type: GraphQLString },\n *     number: { type: GraphQLInt },\n *     formatted: {\n *       type: GraphQLString,\n *       resolve(obj) {\n *         return obj.number + ' ' + obj.street\n *       }\n *     }\n *   }\n * });\n * ```\n *\n * When two types need to refer to each other, or a type needs to refer to\n * itself in a field, you can use a function expression (aka a closure or a\n * thunk) to supply the fields lazily.\n *\n * Example:\n *\n * ```ts\n * const PersonType = new GraphQLObjectType({\n *   name: 'Person',\n *   fields: () => ({\n *     name: { type: GraphQLString },\n *     bestFriend: { type: PersonType },\n *   })\n * });\n * ```\n */\nexport declare class GraphQLObjectType<TSource = any, TContext = any> {\n  name: string;\n  description: Maybe<string>;\n  isTypeOf: Maybe<GraphQLIsTypeOfFn<TSource, TContext>>;\n  extensions: Readonly<GraphQLObjectTypeExtensions<TSource, TContext>>;\n  astNode: Maybe<ObjectTypeDefinitionNode>;\n  extensionASTNodes: ReadonlyArray<ObjectTypeExtensionNode>;\n  private _fields;\n  private _interfaces;\n  constructor(config: Readonly<GraphQLObjectTypeConfig<TSource, TContext>>);\n  get [Symbol.toStringTag](): string;\n  getFields(): GraphQLFieldMap<TSource, TContext>;\n  getInterfaces(): ReadonlyArray<GraphQLInterfaceType>;\n  toConfig(): GraphQLObjectTypeNormalizedConfig<TSource, TContext>;\n  toString(): string;\n  toJSON(): string;\n}\nexport declare function defineArguments(\n  config: GraphQLFieldConfigArgumentMap,\n): ReadonlyArray<GraphQLArgument>;\n/**\n * @internal\n */\nexport declare function argsToArgsConfig(\n  args: ReadonlyArray<GraphQLArgument>,\n): GraphQLFieldConfigArgumentMap;\nexport interface GraphQLObjectTypeConfig<TSource, TContext> {\n  name: string;\n  description?: Maybe<string>;\n  interfaces?: ThunkReadonlyArray<GraphQLInterfaceType>;\n  fields: ThunkObjMap<GraphQLFieldConfig<TSource, TContext>>;\n  isTypeOf?: Maybe<GraphQLIsTypeOfFn<TSource, TContext>>;\n  extensions?: Maybe<Readonly<GraphQLObjectTypeExtensions<TSource, TContext>>>;\n  astNode?: Maybe<ObjectTypeDefinitionNode>;\n  extensionASTNodes?: Maybe<ReadonlyArray<ObjectTypeExtensionNode>>;\n}\ninterface GraphQLObjectTypeNormalizedConfig<TSource, TContext>\n  extends GraphQLObjectTypeConfig<any, any> {\n  interfaces: ReadonlyArray<GraphQLInterfaceType>;\n  fields: GraphQLFieldConfigMap<any, any>;\n  extensions: Readonly<GraphQLObjectTypeExtensions<TSource, TContext>>;\n  extensionASTNodes: ReadonlyArray<ObjectTypeExtensionNode>;\n}\nexport declare type GraphQLTypeResolver<TSource, TContext> = (\n  value: TSource,\n  context: TContext,\n  info: GraphQLResolveInfo,\n  abstractType: GraphQLAbstractType,\n) => PromiseOrValue<string | undefined>;\nexport declare type GraphQLIsTypeOfFn<TSource, TContext> = (\n  source: TSource,\n  context: TContext,\n  info: GraphQLResolveInfo,\n) => PromiseOrValue<boolean>;\nexport declare type GraphQLFieldResolver<\n  TSource,\n  TContext,\n  TArgs = any,\n  TResult = unknown,\n> = (\n  source: TSource,\n  args: TArgs,\n  context: TContext,\n  info: GraphQLResolveInfo,\n) => TResult;\nexport interface GraphQLResolveInfo {\n  readonly fieldName: string;\n  readonly fieldNodes: ReadonlyArray<FieldNode>;\n  readonly returnType: GraphQLOutputType;\n  readonly parentType: GraphQLObjectType;\n  readonly path: Path;\n  readonly schema: GraphQLSchema;\n  readonly fragments: ObjMap<FragmentDefinitionNode>;\n  readonly rootValue: unknown;\n  readonly operation: OperationDefinitionNode;\n  readonly variableValues: {\n    [variable: string]: unknown;\n  };\n}\n/**\n * Custom extensions\n *\n * @remarks\n * Use a unique identifier name for your extension, for example the name of\n * your library or project. Do not use a shortened identifier as this increases\n * the risk of conflicts. We recommend you add at most one extension field,\n * an object which can contain all the values you need.\n *\n * We've provided these template arguments because this is an open type and\n * you may find them useful.\n */\nexport interface GraphQLFieldExtensions<_TSource, _TContext, _TArgs = any> {\n  [attributeName: string]: unknown;\n}\nexport interface GraphQLFieldConfig<TSource, TContext, TArgs = any> {\n  description?: Maybe<string>;\n  type: GraphQLOutputType;\n  args?: GraphQLFieldConfigArgumentMap;\n  resolve?: GraphQLFieldResolver<TSource, TContext, TArgs>;\n  subscribe?: GraphQLFieldResolver<TSource, TContext, TArgs>;\n  deprecationReason?: Maybe<string>;\n  extensions?: Maybe<\n    Readonly<GraphQLFieldExtensions<TSource, TContext, TArgs>>\n  >;\n  astNode?: Maybe<FieldDefinitionNode>;\n}\nexport declare type GraphQLFieldConfigArgumentMap =\n  ObjMap<GraphQLArgumentConfig>;\n/**\n * Custom extensions\n *\n * @remarks\n * Use a unique identifier name for your extension, for example the name of\n * your library or project. Do not use a shortened identifier as this increases\n * the risk of conflicts. We recommend you add at most one extension field,\n * an object which can contain all the values you need.\n */\nexport interface GraphQLArgumentExtensions {\n  [attributeName: string]: unknown;\n}\nexport interface GraphQLArgumentConfig {\n  description?: Maybe<string>;\n  type: GraphQLInputType;\n  defaultValue?: unknown;\n  deprecationReason?: Maybe<string>;\n  extensions?: Maybe<Readonly<GraphQLArgumentExtensions>>;\n  astNode?: Maybe<InputValueDefinitionNode>;\n}\nexport declare type GraphQLFieldConfigMap<TSource, TContext> = ObjMap<\n  GraphQLFieldConfig<TSource, TContext>\n>;\nexport interface GraphQLField<TSource, TContext, TArgs = any> {\n  name: string;\n  description: Maybe<string>;\n  type: GraphQLOutputType;\n  args: ReadonlyArray<GraphQLArgument>;\n  resolve?: GraphQLFieldResolver<TSource, TContext, TArgs>;\n  subscribe?: GraphQLFieldResolver<TSource, TContext, TArgs>;\n  deprecationReason: Maybe<string>;\n  extensions: Readonly<GraphQLFieldExtensions<TSource, TContext, TArgs>>;\n  astNode: Maybe<FieldDefinitionNode>;\n}\nexport interface GraphQLArgument {\n  name: string;\n  description: Maybe<string>;\n  type: GraphQLInputType;\n  defaultValue: unknown;\n  deprecationReason: Maybe<string>;\n  extensions: Readonly<GraphQLArgumentExtensions>;\n  astNode: Maybe<InputValueDefinitionNode>;\n}\nexport declare function isRequiredArgument(arg: GraphQLArgument): boolean;\nexport declare type GraphQLFieldMap<TSource, TContext> = ObjMap<\n  GraphQLField<TSource, TContext>\n>;\n/**\n * Custom extensions\n *\n * @remarks\n * Use a unique identifier name for your extension, for example the name of\n * your library or project. Do not use a shortened identifier as this increases\n * the risk of conflicts. We recommend you add at most one extension field,\n * an object which can contain all the values you need.\n */\nexport interface GraphQLInterfaceTypeExtensions {\n  [attributeName: string]: unknown;\n}\n/**\n * Interface Type Definition\n *\n * When a field can return one of a heterogeneous set of types, a Interface type\n * is used to describe what types are possible, what fields are in common across\n * all types, as well as a function to determine which type is actually used\n * when the field is resolved.\n *\n * Example:\n *\n * ```ts\n * const EntityType = new GraphQLInterfaceType({\n *   name: 'Entity',\n *   fields: {\n *     name: { type: GraphQLString }\n *   }\n * });\n * ```\n */\nexport declare class GraphQLInterfaceType {\n  name: string;\n  description: Maybe<string>;\n  resolveType: Maybe<GraphQLTypeResolver<any, any>>;\n  extensions: Readonly<GraphQLInterfaceTypeExtensions>;\n  astNode: Maybe<InterfaceTypeDefinitionNode>;\n  extensionASTNodes: ReadonlyArray<InterfaceTypeExtensionNode>;\n  private _fields;\n  private _interfaces;\n  constructor(config: Readonly<GraphQLInterfaceTypeConfig<any, any>>);\n  get [Symbol.toStringTag](): string;\n  getFields(): GraphQLFieldMap<any, any>;\n  getInterfaces(): ReadonlyArray<GraphQLInterfaceType>;\n  toConfig(): GraphQLInterfaceTypeNormalizedConfig;\n  toString(): string;\n  toJSON(): string;\n}\nexport interface GraphQLInterfaceTypeConfig<TSource, TContext> {\n  name: string;\n  description?: Maybe<string>;\n  interfaces?: ThunkReadonlyArray<GraphQLInterfaceType>;\n  fields: ThunkObjMap<GraphQLFieldConfig<TSource, TContext>>;\n  /**\n   * Optionally provide a custom type resolver function. If one is not provided,\n   * the default implementation will call `isTypeOf` on each implementing\n   * Object type.\n   */\n  resolveType?: Maybe<GraphQLTypeResolver<TSource, TContext>>;\n  extensions?: Maybe<Readonly<GraphQLInterfaceTypeExtensions>>;\n  astNode?: Maybe<InterfaceTypeDefinitionNode>;\n  extensionASTNodes?: Maybe<ReadonlyArray<InterfaceTypeExtensionNode>>;\n}\nexport interface GraphQLInterfaceTypeNormalizedConfig\n  extends GraphQLInterfaceTypeConfig<any, any> {\n  interfaces: ReadonlyArray<GraphQLInterfaceType>;\n  fields: GraphQLFieldConfigMap<any, any>;\n  extensions: Readonly<GraphQLInterfaceTypeExtensions>;\n  extensionASTNodes: ReadonlyArray<InterfaceTypeExtensionNode>;\n}\n/**\n * Custom extensions\n *\n * @remarks\n * Use a unique identifier name for your extension, for example the name of\n * your library or project. Do not use a shortened identifier as this increases\n * the risk of conflicts. We recommend you add at most one extension field,\n * an object which can contain all the values you need.\n */\nexport interface GraphQLUnionTypeExtensions {\n  [attributeName: string]: unknown;\n}\n/**\n * Union Type Definition\n *\n * When a field can return one of a heterogeneous set of types, a Union type\n * is used to describe what types are possible as well as providing a function\n * to determine which type is actually used when the field is resolved.\n *\n * Example:\n *\n * ```ts\n * const PetType = new GraphQLUnionType({\n *   name: 'Pet',\n *   types: [ DogType, CatType ],\n *   resolveType(value) {\n *     if (value instanceof Dog) {\n *       return DogType;\n *     }\n *     if (value instanceof Cat) {\n *       return CatType;\n *     }\n *   }\n * });\n * ```\n */\nexport declare class GraphQLUnionType {\n  name: string;\n  description: Maybe<string>;\n  resolveType: Maybe<GraphQLTypeResolver<any, any>>;\n  extensions: Readonly<GraphQLUnionTypeExtensions>;\n  astNode: Maybe<UnionTypeDefinitionNode>;\n  extensionASTNodes: ReadonlyArray<UnionTypeExtensionNode>;\n  private _types;\n  constructor(config: Readonly<GraphQLUnionTypeConfig<any, any>>);\n  get [Symbol.toStringTag](): string;\n  getTypes(): ReadonlyArray<GraphQLObjectType>;\n  toConfig(): GraphQLUnionTypeNormalizedConfig;\n  toString(): string;\n  toJSON(): string;\n}\nexport interface GraphQLUnionTypeConfig<TSource, TContext> {\n  name: string;\n  description?: Maybe<string>;\n  types: ThunkReadonlyArray<GraphQLObjectType>;\n  /**\n   * Optionally provide a custom type resolver function. If one is not provided,\n   * the default implementation will call `isTypeOf` on each implementing\n   * Object type.\n   */\n  resolveType?: Maybe<GraphQLTypeResolver<TSource, TContext>>;\n  extensions?: Maybe<Readonly<GraphQLUnionTypeExtensions>>;\n  astNode?: Maybe<UnionTypeDefinitionNode>;\n  extensionASTNodes?: Maybe<ReadonlyArray<UnionTypeExtensionNode>>;\n}\ninterface GraphQLUnionTypeNormalizedConfig\n  extends GraphQLUnionTypeConfig<any, any> {\n  types: ReadonlyArray<GraphQLObjectType>;\n  extensions: Readonly<GraphQLUnionTypeExtensions>;\n  extensionASTNodes: ReadonlyArray<UnionTypeExtensionNode>;\n}\n/**\n * Custom extensions\n *\n * @remarks\n * Use a unique identifier name for your extension, for example the name of\n * your library or project. Do not use a shortened identifier as this increases\n * the risk of conflicts. We recommend you add at most one extension field,\n * an object which can contain all the values you need.\n */\nexport interface GraphQLEnumTypeExtensions {\n  [attributeName: string]: unknown;\n}\n/**\n * Enum Type Definition\n *\n * Some leaf values of requests and input values are Enums. GraphQL serializes\n * Enum values as strings, however internally Enums can be represented by any\n * kind of type, often integers.\n *\n * Example:\n *\n * ```ts\n * const RGBType = new GraphQLEnumType({\n *   name: 'RGB',\n *   values: {\n *     RED: { value: 0 },\n *     GREEN: { value: 1 },\n *     BLUE: { value: 2 }\n *   }\n * });\n * ```\n *\n * Note: If a value is not provided in a definition, the name of the enum value\n * will be used as its internal value.\n */\nexport declare class GraphQLEnumType {\n  name: string;\n  description: Maybe<string>;\n  extensions: Readonly<GraphQLEnumTypeExtensions>;\n  astNode: Maybe<EnumTypeDefinitionNode>;\n  extensionASTNodes: ReadonlyArray<EnumTypeExtensionNode>;\n  private _values;\n  private _valueLookup;\n  private _nameLookup;\n  constructor(config: Readonly<GraphQLEnumTypeConfig>);\n  get [Symbol.toStringTag](): string;\n  getValues(): ReadonlyArray<GraphQLEnumValue>;\n  getValue(name: string): Maybe<GraphQLEnumValue>;\n  serialize(outputValue: unknown): Maybe<string>;\n  parseValue(inputValue: unknown): Maybe<any>;\n  parseLiteral(\n    valueNode: ValueNode,\n    _variables: Maybe<ObjMap<unknown>>,\n  ): Maybe<any>;\n  toConfig(): GraphQLEnumTypeNormalizedConfig;\n  toString(): string;\n  toJSON(): string;\n}\nexport interface GraphQLEnumTypeConfig {\n  name: string;\n  description?: Maybe<string>;\n  values: GraphQLEnumValueConfigMap;\n  extensions?: Maybe<Readonly<GraphQLEnumTypeExtensions>>;\n  astNode?: Maybe<EnumTypeDefinitionNode>;\n  extensionASTNodes?: Maybe<ReadonlyArray<EnumTypeExtensionNode>>;\n}\ninterface GraphQLEnumTypeNormalizedConfig extends GraphQLEnumTypeConfig {\n  extensions: Readonly<GraphQLEnumTypeExtensions>;\n  extensionASTNodes: ReadonlyArray<EnumTypeExtensionNode>;\n}\nexport declare type GraphQLEnumValueConfigMap = ObjMap<GraphQLEnumValueConfig>;\n/**\n * Custom extensions\n *\n * @remarks\n * Use a unique identifier name for your extension, for example the name of\n * your library or project. Do not use a shortened identifier as this increases\n * the risk of conflicts. We recommend you add at most one extension field,\n * an object which can contain all the values you need.\n */\nexport interface GraphQLEnumValueExtensions {\n  [attributeName: string]: unknown;\n}\nexport interface GraphQLEnumValueConfig {\n  description?: Maybe<string>;\n  value?: any;\n  deprecationReason?: Maybe<string>;\n  extensions?: Maybe<Readonly<GraphQLEnumValueExtensions>>;\n  astNode?: Maybe<EnumValueDefinitionNode>;\n}\nexport interface GraphQLEnumValue {\n  name: string;\n  description: Maybe<string>;\n  value: any;\n  deprecationReason: Maybe<string>;\n  extensions: Readonly<GraphQLEnumValueExtensions>;\n  astNode: Maybe<EnumValueDefinitionNode>;\n}\n/**\n * Custom extensions\n *\n * @remarks\n * Use a unique identifier name for your extension, for example the name of\n * your library or project. Do not use a shortened identifier as this increases\n * the risk of conflicts. We recommend you add at most one extension field,\n * an object which can contain all the values you need.\n */\nexport interface GraphQLInputObjectTypeExtensions {\n  [attributeName: string]: unknown;\n}\n/**\n * Input Object Type Definition\n *\n * An input object defines a structured collection of fields which may be\n * supplied to a field argument.\n *\n * Using `NonNull` will ensure that a value must be provided by the query\n *\n * Example:\n *\n * ```ts\n * const GeoPoint = new GraphQLInputObjectType({\n *   name: 'GeoPoint',\n *   fields: {\n *     lat: { type: new GraphQLNonNull(GraphQLFloat) },\n *     lon: { type: new GraphQLNonNull(GraphQLFloat) },\n *     alt: { type: GraphQLFloat, defaultValue: 0 },\n *   }\n * });\n * ```\n */\nexport declare class GraphQLInputObjectType {\n  name: string;\n  description: Maybe<string>;\n  extensions: Readonly<GraphQLInputObjectTypeExtensions>;\n  astNode: Maybe<InputObjectTypeDefinitionNode>;\n  extensionASTNodes: ReadonlyArray<InputObjectTypeExtensionNode>;\n  private _fields;\n  constructor(config: Readonly<GraphQLInputObjectTypeConfig>);\n  get [Symbol.toStringTag](): string;\n  getFields(): GraphQLInputFieldMap;\n  toConfig(): GraphQLInputObjectTypeNormalizedConfig;\n  toString(): string;\n  toJSON(): string;\n}\nexport interface GraphQLInputObjectTypeConfig {\n  name: string;\n  description?: Maybe<string>;\n  fields: ThunkObjMap<GraphQLInputFieldConfig>;\n  extensions?: Maybe<Readonly<GraphQLInputObjectTypeExtensions>>;\n  astNode?: Maybe<InputObjectTypeDefinitionNode>;\n  extensionASTNodes?: Maybe<ReadonlyArray<InputObjectTypeExtensionNode>>;\n}\ninterface GraphQLInputObjectTypeNormalizedConfig\n  extends GraphQLInputObjectTypeConfig {\n  fields: GraphQLInputFieldConfigMap;\n  extensions: Readonly<GraphQLInputObjectTypeExtensions>;\n  extensionASTNodes: ReadonlyArray<InputObjectTypeExtensionNode>;\n}\n/**\n * Custom extensions\n *\n * @remarks\n * Use a unique identifier name for your extension, for example the name of\n * your library or project. Do not use a shortened identifier as this increases\n * the risk of conflicts. We recommend you add at most one extension field,\n * an object which can contain all the values you need.\n */\nexport interface GraphQLInputFieldExtensions {\n  [attributeName: string]: unknown;\n}\nexport interface GraphQLInputFieldConfig {\n  description?: Maybe<string>;\n  type: GraphQLInputType;\n  defaultValue?: unknown;\n  deprecationReason?: Maybe<string>;\n  extensions?: Maybe<Readonly<GraphQLInputFieldExtensions>>;\n  astNode?: Maybe<InputValueDefinitionNode>;\n}\nexport declare type GraphQLInputFieldConfigMap =\n  ObjMap<GraphQLInputFieldConfig>;\nexport interface GraphQLInputField {\n  name: string;\n  description: Maybe<string>;\n  type: GraphQLInputType;\n  defaultValue: unknown;\n  deprecationReason: Maybe<string>;\n  extensions: Readonly<GraphQLInputFieldExtensions>;\n  astNode: Maybe<InputValueDefinitionNode>;\n}\nexport declare function isRequiredInputField(field: GraphQLInputField): boolean;\nexport declare type GraphQLInputFieldMap = ObjMap<GraphQLInputField>;\nexport {};\n/jsutils/keyValMap.d.ts\u0002cimport type { ObjMap } from './ObjMap';\n/**\n * Creates a keyed JS object from an array, given a function to produce the keys\n * and a function to produce the values from each item in the array.\n * ```ts\n * const phoneBook = [\n *   { name: 'Jon', num: '555-1234' },\n *   { name: 'Jenny', num: '867-5309' }\n * ]\n *\n * // { Jon: '555-1234', Jenny: '867-5309' }\n * const phonesByName = keyValMap(\n *   phoneBook,\n *   entry => entry.name,\n *   entry => entry.num\n * )\n * ```\n */\nexport declare function keyValMap<T, V>(\n  list: ReadonlyArray<T>,\n  keyFn: (item: T) => string,\n  valFn: (item: T) => V,\n): ObjMap<V>;\n//validation/rules/LoneAnonymousOperationRule.js\u0004T'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.LoneAnonymousOperationRule = LoneAnonymousOperationRule;\n\nvar _GraphQLError = require('../../error/GraphQLError.js');\n\nvar _kinds = require('../../language/kinds.js');\n\n/**\n * Lone anonymous operation\n *\n * A GraphQL document is only valid if when it contains an anonymous operation\n * (the query short-hand) that it contains only that one operation definition.\n *\n * See https://spec.graphql.org/draft/#sec-Lone-Anonymous-Operation\n */\nfunction LoneAnonymousOperationRule(context) {\n  let operationCount = 0;\n  return {\n    Document(node) {\n      operationCount = node.definitions.filter(\n        (definition) => definition.kind === _kinds.Kind.OPERATION_DEFINITION,\n      ).length;\n    },\n\n    OperationDefinition(node) {\n      if (!node.name && operationCount > 1) {\n        context.reportError(\n          new _GraphQLError.GraphQLError(\n            'This anonymous operation must be the only defined operation.',\n            {\n              nodes: node,\n            },\n          ),\n        );\n      }\n    },\n  };\n}\n/jsutils/instanceOf.d.ts\u0001/**\n * A replacement for instanceof which includes an error warning when multi-realm\n * constructors are detected.\n * See: https://expressjs.com/en/advanced/best-practice-performance.html#set-node_env-to-production\n * See: https://webpack.js.org/guides/production/\n */\nexport declare const instanceOf: (\n  value: unknown,\n  constructor: Constructor,\n) => boolean;\ninterface Constructor extends Function {\n  prototype: {\n    [Symbol.toStringTag]: string;\n  };\n}\nexport {};\n/jsutils/keyMap.mjs\u0003$/**\n * Creates a keyed JS object from an array, given a function to produce the keys\n * for each value in the array.\n *\n * This provides a convenient lookup for the array items if the key function\n * produces unique results.\n * ```ts\n * const phoneBook = [\n *   { name: 'Jon', num: '555-1234' },\n *   { name: 'Jenny', num: '867-5309' }\n * ]\n *\n * const entriesByName = keyMap(\n *   phoneBook,\n *   entry => entry.name\n * )\n *\n * // {\n * //   Jon: { name: 'Jon', num: '555-1234' },\n * //   Jenny: { name: 'Jenny', num: '867-5309' }\n * // }\n *\n * const jennyEntry = entriesByName['Jenny']\n *\n * // { name: 'Jenny', num: '857-6309' }\n * ```\n */\nexport function keyMap(list, keyFn) {\n  const result = Object.create(null);\n\n  for (const item of list) {\n    result[keyFn(item)] = item;\n  }\n\n  return result;\n}\n/execution/mapAsyncIterator.js\u0005'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.mapAsyncIterator = mapAsyncIterator;\n\n/**\n * Given an AsyncIterable and a callback function, return an AsyncIterator\n * which produces values mapped via calling the callback function.\n */\nfunction mapAsyncIterator(iterable, callback) {\n  const iterator = iterable[Symbol.asyncIterator]();\n\n  async function mapResult(result) {\n    if (result.done) {\n      return result;\n    }\n\n    try {\n      return {\n        value: await callback(result.value),\n        done: false,\n      };\n    } catch (error) {\n      /* c8 ignore start */\n      // FIXME: add test case\n      if (typeof iterator.return === 'function') {\n        try {\n          await iterator.return();\n        } catch (_e) {\n          /* ignore error */\n        }\n      }\n\n      throw error;\n      /* c8 ignore stop */\n    }\n  }\n\n  return {\n    async next() {\n      return mapResult(await iterator.next());\n    },\n\n    async return() {\n      // If iterator.return() does not exist, then type R must be undefined.\n      return typeof iterator.return === 'function'\n        ? mapResult(await iterator.return())\n        : {\n            value: undefined,\n            done: true,\n          };\n    },\n\n    async throw(error) {\n      if (typeof iterator.throw === 'function') {\n        return mapResult(await iterator.throw(error));\n      }\n\n      throw error;\n    },\n\n    [Symbol.asyncIterator]() {\n      return this;\n    },\n  };\n}\n%/utilities/typedQueryDocumentNode.mjs\u000bexport {};\n/type/validate.jsU\u0013'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.assertValidSchema = assertValidSchema;\nexports.validateSchema = validateSchema;\n\nvar _inspect = require('../jsutils/inspect.js');\n\nvar _GraphQLError = require('../error/GraphQLError.js');\n\nvar _ast = require('../language/ast.js');\n\nvar _typeComparators = require('../utilities/typeComparators.js');\n\nvar _definition = require('./definition.js');\n\nvar _directives = require('./directives.js');\n\nvar _introspection = require('./introspection.js');\n\nvar _schema = require('./schema.js');\n\n/**\n * Implements the \"Type Validation\" sub-sections of the specification's\n * \"Type System\" section.\n *\n * Validation runs synchronously, returning an array of encountered errors, or\n * an empty array if no errors were encountered and the Schema is valid.\n */\nfunction validateSchema(schema) {\n  // First check to ensure the provided value is in fact a GraphQLSchema.\n  (0, _schema.assertSchema)(schema); // If this Schema has already been validated, return the previous results.\n\n  if (schema.__validationErrors) {\n    return schema.__validationErrors;\n  } // Validate the schema, producing a list of errors.\n\n  const context = new SchemaValidationContext(schema);\n  validateRootTypes(context);\n  validateDirectives(context);\n  validateTypes(context); // Persist the results of validation before returning to ensure validation\n  // does not run multiple times for this schema.\n\n  const errors = context.getErrors();\n  schema.__validationErrors = errors;\n  return errors;\n}\n/**\n * Utility function which asserts a schema is valid by throwing an error if\n * it is invalid.\n */\n\nfunction assertValidSchema(schema) {\n  const errors = validateSchema(schema);\n\n  if (errors.length !== 0) {\n    throw new Error(errors.map((error) => error.message).join('\\n\\n'));\n  }\n}\n\nclass SchemaValidationContext {\n  constructor(schema) {\n    this._errors = [];\n    this.schema = schema;\n  }\n\n  reportError(message, nodes) {\n    const _nodes = Array.isArray(nodes) ? nodes.filter(Boolean) : nodes;\n\n    this._errors.push(\n      new _GraphQLError.GraphQLError(message, {\n        nodes: _nodes,\n      }),\n    );\n  }\n\n  getErrors() {\n    return this._errors;\n  }\n}\n\nfunction validateRootTypes(context) {\n  const schema = context.schema;\n  const queryType = schema.getQueryType();\n\n  if (!queryType) {\n    context.reportError('Query root type must be provided.', schema.astNode);\n  } else if (!(0, _definition.isObjectType)(queryType)) {\n    var _getOperationTypeNode;\n\n    context.reportError(\n      `Query root type must be Object type, it cannot be ${(0,\n      _inspect.inspect)(queryType)}.`,\n      (_getOperationTypeNode = getOperationTypeNode(\n        schema,\n        _ast.OperationTypeNode.QUERY,\n      )) !== null && _getOperationTypeNode !== void 0\n        ? _getOperationTypeNode\n        : queryType.astNode,\n    );\n  }\n\n  const mutationType = schema.getMutationType();\n\n  if (mutationType && !(0, _definition.isObjectType)(mutationType)) {\n    var _getOperationTypeNode2;\n\n    context.reportError(\n      'Mutation root type must be Object type if provided, it cannot be ' +\n        `${(0, _inspect.inspect)(mutationType)}.`,\n      (_getOperationTypeNode2 = getOperationTypeNode(\n        schema,\n        _ast.OperationTypeNode.MUTATION,\n      )) !== null && _getOperationTypeNode2 !== void 0\n        ? _getOperationTypeNode2\n        : mutationType.astNode,\n    );\n  }\n\n  const subscriptionType = schema.getSubscriptionType();\n\n  if (subscriptionType && !(0, _definition.isObjectType)(subscriptionType)) {\n    var _getOperationTypeNode3;\n\n    context.reportError(\n      'Subscription root type must be Object type if provided, it cannot be ' +\n        `${(0, _inspect.inspect)(subscriptionType)}.`,\n      (_getOperationTypeNode3 = getOperationTypeNode(\n        schema,\n        _ast.OperationTypeNode.SUBSCRIPTION,\n      )) !== null && _getOperationTypeNode3 !== void 0\n        ? _getOperationTypeNode3\n        : subscriptionType.astNode,\n    );\n  }\n}\n\nfunction getOperationTypeNode(schema, operation) {\n  var _flatMap$find;\n\n  return (_flatMap$find = [schema.astNode, ...schema.extensionASTNodes]\n    .flatMap(\n      // FIXME: https://github.com/graphql/graphql-js/issues/2203\n      (schemaNode) => {\n        var _schemaNode$operation;\n\n        return (\n          /* c8 ignore next */\n          (_schemaNode$operation =\n            schemaNode === null || schemaNode === void 0\n              ? void 0\n              : schemaNode.operationTypes) !== null &&\n            _schemaNode$operation !== void 0\n            ? _schemaNode$operation\n            : []\n        );\n      },\n    )\n    .find((operationNode) => operationNode.operation === operation)) === null ||\n    _flatMap$find === void 0\n    ? void 0\n    : _flatMap$find.type;\n}\n\nfunction validateDirectives(context) {\n  for (const directive of context.schema.getDirectives()) {\n    // Ensure all directives are in fact GraphQL directives.\n    if (!(0, _directives.isDirective)(directive)) {\n      context.reportError(\n        `Expected directive but got: ${(0, _inspect.inspect)(directive)}.`,\n        directive === null || directive === void 0 ? void 0 : directive.astNode,\n      );\n      continue;\n    } // Ensure they are named correctly.\n\n    validateName(context, directive); // TODO: Ensure proper locations.\n    // Ensure the arguments are valid.\n\n    for (const arg of directive.args) {\n      // Ensure they are named correctly.\n      validateName(context, arg); // Ensure the type is an input type.\n\n      if (!(0, _definition.isInputType)(arg.type)) {\n        context.reportError(\n          `The type of @${directive.name}(${arg.name}:) must be Input Type ` +\n            `but got: ${(0, _inspect.inspect)(arg.type)}.`,\n          arg.astNode,\n        );\n      }\n\n      if (\n        (0, _definition.isRequiredArgument)(arg) &&\n        arg.deprecationReason != null\n      ) {\n        var _arg$astNode;\n\n        context.reportError(\n          `Required argument @${directive.name}(${arg.name}:) cannot be deprecated.`,\n          [\n            getDeprecatedDirectiveNode(arg.astNode),\n            (_arg$astNode = arg.astNode) === null || _arg$astNode === void 0\n              ? void 0\n              : _arg$astNode.type,\n          ],\n        );\n      }\n    }\n  }\n}\n\nfunction validateName(context, node) {\n  // Ensure names are valid, however introspection types opt out.\n  if (node.name.startsWith('__')) {\n    context.reportError(\n      `Name \"${node.name}\" must not begin with \"__\", which is reserved by GraphQL introspection.`,\n      node.astNode,\n    );\n  }\n}\n\nfunction validateTypes(context) {\n  const validateInputObjectCircularRefs =\n    createInputObjectCircularRefsValidator(context);\n  const typeMap = context.schema.getTypeMap();\n\n  for (const type of Object.values(typeMap)) {\n    // Ensure all provided types are in fact GraphQL type.\n    if (!(0, _definition.isNamedType)(type)) {\n      context.reportError(\n        `Expected GraphQL named type but got: ${(0, _inspect.inspect)(type)}.`,\n        type.astNode,\n      );\n      continue;\n    } // Ensure it is named correctly (excluding introspection types).\n\n    if (!(0, _introspection.isIntrospectionType)(type)) {\n      validateName(context, type);\n    }\n\n    if ((0, _definition.isObjectType)(type)) {\n      // Ensure fields are valid\n      validateFields(context, type); // Ensure objects implement the interfaces they claim to.\n\n      validateInterfaces(context, type);\n    } else if ((0, _definition.isInterfaceType)(type)) {\n      // Ensure fields are valid.\n      validateFields(context, type); // Ensure interfaces implement the interfaces they claim to.\n\n      validateInterfaces(context, type);\n    } else if ((0, _definition.isUnionType)(type)) {\n      // Ensure Unions include valid member types.\n      validateUnionMembers(context, type);\n    } else if ((0, _definition.isEnumType)(type)) {\n      // Ensure Enums have valid values.\n      validateEnumValues(context, type);\n    } else if ((0, _definition.isInputObjectType)(type)) {\n      // Ensure Input Object fields are valid.\n      validateInputFields(context, type); // Ensure Input Objects do not contain non-nullable circular references\n\n      validateInputObjectCircularRefs(type);\n    }\n  }\n}\n\nfunction validateFields(context, type) {\n  const fields = Object.values(type.getFields()); // Objects and Interfaces both must define one or more fields.\n\n  if (fields.length === 0) {\n    context.reportError(`Type ${type.name} must define one or more fields.`, [\n      type.astNode,\n      ...type.extensionASTNodes,\n    ]);\n  }\n\n  for (const field of fields) {\n    // Ensure they are named correctly.\n    validateName(context, field); // Ensure the type is an output type\n\n    if (!(0, _definition.isOutputType)(field.type)) {\n      var _field$astNode;\n\n      context.reportError(\n        `The type of ${type.name}.${field.name} must be Output Type ` +\n          `but got: ${(0, _inspect.inspect)(field.type)}.`,\n        (_field$astNode = field.astNode) === null || _field$astNode === void 0\n          ? void 0\n          : _field$astNode.type,\n      );\n    } // Ensure the arguments are valid\n\n    for (const arg of field.args) {\n      const argName = arg.name; // Ensure they are named correctly.\n\n      validateName(context, arg); // Ensure the type is an input type\n\n      if (!(0, _definition.isInputType)(arg.type)) {\n        var _arg$astNode2;\n\n        context.reportError(\n          `The type of ${type.name}.${field.name}(${argName}:) must be Input ` +\n            `Type but got: ${(0, _inspect.inspect)(arg.type)}.`,\n          (_arg$astNode2 = arg.astNode) === null || _arg$astNode2 === void 0\n            ? void 0\n            : _arg$astNode2.type,\n        );\n      }\n\n      if (\n        (0, _definition.isRequiredArgument)(arg) &&\n        arg.deprecationReason != null\n      ) {\n        var _arg$astNode3;\n\n        context.reportError(\n          `Required argument ${type.name}.${field.name}(${argName}:) cannot be deprecated.`,\n          [\n            getDeprecatedDirectiveNode(arg.astNode),\n            (_arg$astNode3 = arg.astNode) === null || _arg$astNode3 === void 0\n              ? void 0\n              : _arg$astNode3.type,\n          ],\n        );\n      }\n    }\n  }\n}\n\nfunction validateInterfaces(context, type) {\n  const ifaceTypeNames = Object.create(null);\n\n  for (const iface of type.getInterfaces()) {\n    if (!(0, _definition.isInterfaceType)(iface)) {\n      context.reportError(\n        `Type ${(0, _inspect.inspect)(\n          type,\n        )} must only implement Interface types, ` +\n          `it cannot implement ${(0, _inspect.inspect)(iface)}.`,\n        getAllImplementsInterfaceNodes(type, iface),\n      );\n      continue;\n    }\n\n    if (type === iface) {\n      context.reportError(\n        `Type ${type.name} cannot implement itself because it would create a circular reference.`,\n        getAllImplementsInterfaceNodes(type, iface),\n      );\n      continue;\n    }\n\n    if (ifaceTypeNames[iface.name]) {\n      context.reportError(\n        `Type ${type.name} can only implement ${iface.name} once.`,\n        getAllImplementsInterfaceNodes(type, iface),\n      );\n      continue;\n    }\n\n    ifaceTypeNames[iface.name] = true;\n    validateTypeImplementsAncestors(context, type, iface);\n    validateTypeImplementsInterface(context, type, iface);\n  }\n}\n\nfunction validateTypeImplementsInterface(context, type, iface) {\n  const typeFieldMap = type.getFields(); // Assert each interface field is implemented.\n\n  for (const ifaceField of Object.values(iface.getFields())) {\n    const fieldName = ifaceField.name;\n    const typeField = typeFieldMap[fieldName]; // Assert interface field exists on type.\n\n    if (!typeField) {\n      context.reportError(\n        `Interface field ${iface.name}.${fieldName} expected but ${type.name} does not provide it.`,\n        [ifaceField.astNode, type.astNode, ...type.extensionASTNodes],\n      );\n      continue;\n    } // Assert interface field type is satisfied by type field type, by being\n    // a valid subtype. (covariant)\n\n    if (\n      !(0, _typeComparators.isTypeSubTypeOf)(\n        context.schema,\n        typeField.type,\n        ifaceField.type,\n      )\n    ) {\n      var _ifaceField$astNode, _typeField$astNode;\n\n      context.reportError(\n        `Interface field ${iface.name}.${fieldName} expects type ` +\n          `${(0, _inspect.inspect)(ifaceField.type)} but ${\n            type.name\n          }.${fieldName} ` +\n          `is type ${(0, _inspect.inspect)(typeField.type)}.`,\n        [\n          (_ifaceField$astNode = ifaceField.astNode) === null ||\n          _ifaceField$astNode === void 0\n            ? void 0\n            : _ifaceField$astNode.type,\n          (_typeField$astNode = typeField.astNode) === null ||\n          _typeField$astNode === void 0\n            ? void 0\n            : _typeField$astNode.type,\n        ],\n      );\n    } // Assert each interface field arg is implemented.\n\n    for (const ifaceArg of ifaceField.args) {\n      const argName = ifaceArg.name;\n      const typeArg = typeField.args.find((arg) => arg.name === argName); // Assert interface field arg exists on object field.\n\n      if (!typeArg) {\n        context.reportError(\n          `Interface field argument ${iface.name}.${fieldName}(${argName}:) expected but ${type.name}.${fieldName} does not provide it.`,\n          [ifaceArg.astNode, typeField.astNode],\n        );\n        continue;\n      } // Assert interface field arg type matches object field arg type.\n      // (invariant)\n      // TODO: change to contravariant?\n\n      if (!(0, _typeComparators.isEqualType)(ifaceArg.type, typeArg.type)) {\n        var _ifaceArg$astNode, _typeArg$astNode;\n\n        context.reportError(\n          `Interface field argument ${iface.name}.${fieldName}(${argName}:) ` +\n            `expects type ${(0, _inspect.inspect)(ifaceArg.type)} but ` +\n            `${type.name}.${fieldName}(${argName}:) is type ` +\n            `${(0, _inspect.inspect)(typeArg.type)}.`,\n          [\n            (_ifaceArg$astNode = ifaceArg.astNode) === null ||\n            _ifaceArg$astNode === void 0\n              ? void 0\n              : _ifaceArg$astNode.type,\n            (_typeArg$astNode = typeArg.astNode) === null ||\n            _typeArg$astNode === void 0\n              ? void 0\n              : _typeArg$astNode.type,\n          ],\n        );\n      } // TODO: validate default values?\n    } // Assert additional arguments must not be required.\n\n    for (const typeArg of typeField.args) {\n      const argName = typeArg.name;\n      const ifaceArg = ifaceField.args.find((arg) => arg.name === argName);\n\n      if (!ifaceArg && (0, _definition.isRequiredArgument)(typeArg)) {\n        context.reportError(\n          `Object field ${type.name}.${fieldName} includes required argument ${argName} that is missing from the Interface field ${iface.name}.${fieldName}.`,\n          [typeArg.astNode, ifaceField.astNode],\n        );\n      }\n    }\n  }\n}\n\nfunction validateTypeImplementsAncestors(context, type, iface) {\n  const ifaceInterfaces = type.getInterfaces();\n\n  for (const transitive of iface.getInterfaces()) {\n    if (!ifaceInterfaces.includes(transitive)) {\n      context.reportError(\n        transitive === type\n          ? `Type ${type.name} cannot implement ${iface.name} because it would create a circular reference.`\n          : `Type ${type.name} must implement ${transitive.name} because it is implemented by ${iface.name}.`,\n        [\n          ...getAllImplementsInterfaceNodes(iface, transitive),\n          ...getAllImplementsInterfaceNodes(type, iface),\n        ],\n      );\n    }\n  }\n}\n\nfunction validateUnionMembers(context, union) {\n  const memberTypes = union.getTypes();\n\n  if (memberTypes.length === 0) {\n    context.reportError(\n      `Union type ${union.name} must define one or more member types.`,\n      [union.astNode, ...union.extensionASTNodes],\n    );\n  }\n\n  const includedTypeNames = Object.create(null);\n\n  for (const memberType of memberTypes) {\n    if (includedTypeNames[memberType.name]) {\n      context.reportError(\n        `Union type ${union.name} can only include type ${memberType.name} once.`,\n        getUnionMemberTypeNodes(union, memberType.name),\n      );\n      continue;\n    }\n\n    includedTypeNames[memberType.name] = true;\n\n    if (!(0, _definition.isObjectType)(memberType)) {\n      context.reportError(\n        `Union type ${union.name} can only include Object types, ` +\n          `it cannot include ${(0, _inspect.inspect)(memberType)}.`,\n        getUnionMemberTypeNodes(union, String(memberType)),\n      );\n    }\n  }\n}\n\nfunction validateEnumValues(context, enumType) {\n  const enumValues = enumType.getValues();\n\n  if (enumValues.length === 0) {\n    context.reportError(\n      `Enum type ${enumType.name} must define one or more values.`,\n      [enumType.astNode, ...enumType.extensionASTNodes],\n    );\n  }\n\n  for (const enumValue of enumValues) {\n    // Ensure valid name.\n    validateName(context, enumValue);\n  }\n}\n\nfunction validateInputFields(context, inputObj) {\n  const fields = Object.values(inputObj.getFields());\n\n  if (fields.length === 0) {\n    context.reportError(\n      `Input Object type ${inputObj.name} must define one or more fields.`,\n      [inputObj.astNode, ...inputObj.extensionASTNodes],\n    );\n  } // Ensure the arguments are valid\n\n  for (const field of fields) {\n    // Ensure they are named correctly.\n    validateName(context, field); // Ensure the type is an input type\n\n    if (!(0, _definition.isInputType)(field.type)) {\n      var _field$astNode2;\n\n      context.reportError(\n        `The type of ${inputObj.name}.${field.name} must be Input Type ` +\n          `but got: ${(0, _inspect.inspect)(field.type)}.`,\n        (_field$astNode2 = field.astNode) === null || _field$astNode2 === void 0\n          ? void 0\n          : _field$astNode2.type,\n      );\n    }\n\n    if (\n      (0, _definition.isRequiredInputField)(field) &&\n      field.deprecationReason != null\n    ) {\n      var _field$astNode3;\n\n      context.reportError(\n        `Required input field ${inputObj.name}.${field.name} cannot be deprecated.`,\n        [\n          getDeprecatedDirectiveNode(field.astNode),\n          (_field$astNode3 = field.astNode) === null ||\n          _field$astNode3 === void 0\n            ? void 0\n            : _field$astNode3.type,\n        ],\n      );\n    }\n  }\n}\n\nfunction createInputObjectCircularRefsValidator(context) {\n  // Modified copy of algorithm from 'src/validation/rules/NoFragmentCycles.js'.\n  // Tracks already visited types to maintain O(N) and to ensure that cycles\n  // are not redundantly reported.\n  const visitedTypes = Object.create(null); // Array of types nodes used to produce meaningful errors\n\n  const fieldPath = []; // Position in the type path\n\n  const fieldPathIndexByTypeName = Object.create(null);\n  return detectCycleRecursive; // This does a straight-forward DFS to find cycles.\n  // It does not terminate when a cycle was found but continues to explore\n  // the graph to find all possible cycles.\n\n  function detectCycleRecursive(inputObj) {\n    if (visitedTypes[inputObj.name]) {\n      return;\n    }\n\n    visitedTypes[inputObj.name] = true;\n    fieldPathIndexByTypeName[inputObj.name] = fieldPath.length;\n    const fields = Object.values(inputObj.getFields());\n\n    for (const field of fields) {\n      if (\n        (0, _definition.isNonNullType)(field.type) &&\n        (0, _definition.isInputObjectType)(field.type.ofType)\n      ) {\n        const fieldType = field.type.ofType;\n        const cycleIndex = fieldPathIndexByTypeName[fieldType.name];\n        fieldPath.push(field);\n\n        if (cycleIndex === undefined) {\n          detectCycleRecursive(fieldType);\n        } else {\n          const cyclePath = fieldPath.slice(cycleIndex);\n          const pathStr = cyclePath.map((fieldObj) => fieldObj.name).join('.');\n          context.reportError(\n            `Cannot reference Input Object \"${fieldType.name}\" within itself through a series of non-null fields: \"${pathStr}\".`,\n            cyclePath.map((fieldObj) => fieldObj.astNode),\n          );\n        }\n\n        fieldPath.pop();\n      }\n    }\n\n    fieldPathIndexByTypeName[inputObj.name] = undefined;\n  }\n}\n\nfunction getAllImplementsInterfaceNodes(type, iface) {\n  const { astNode, extensionASTNodes } = type;\n  const nodes =\n    astNode != null ? [astNode, ...extensionASTNodes] : extensionASTNodes; // FIXME: https://github.com/graphql/graphql-js/issues/2203\n\n  return nodes\n    .flatMap((typeNode) => {\n      var _typeNode$interfaces;\n\n      return (\n        /* c8 ignore next */\n        (_typeNode$interfaces = typeNode.interfaces) !== null &&\n          _typeNode$interfaces !== void 0\n          ? _typeNode$interfaces\n          : []\n      );\n    })\n    .filter((ifaceNode) => ifaceNode.name.value === iface.name);\n}\n\nfunction getUnionMemberTypeNodes(union, typeName) {\n  const { astNode, extensionASTNodes } = union;\n  const nodes =\n    astNode != null ? [astNode, ...extensionASTNodes] : extensionASTNodes; // FIXME: https://github.com/graphql/graphql-js/issues/2203\n\n  return nodes\n    .flatMap((unionNode) => {\n      var _unionNode$types;\n\n      return (\n        /* c8 ignore next */\n        (_unionNode$types = unionNode.types) !== null &&\n          _unionNode$types !== void 0\n          ? _unionNode$types\n          : []\n      );\n    })\n    .filter((typeNode) => typeNode.name.value === typeName);\n}\n\nfunction getDeprecatedDirectiveNode(definitionNode) {\n  var _definitionNode$direc;\n\n  return definitionNode === null || definitionNode === void 0\n    ? void 0\n    : (_definitionNode$direc = definitionNode.directives) === null ||\n      _definitionNode$direc === void 0\n    ? void 0\n    : _definitionNode$direc.find(\n        (node) =>\n          node.name.value === _directives.GraphQLDeprecatedDirective.name,\n      );\n}\n/execution/index.mjs\u0001Zexport { pathToArray as responsePathAsArray } from '../jsutils/Path.mjs';\nexport {\n  execute,\n  executeSync,\n  defaultFieldResolver,\n  defaultTypeResolver,\n} from './execute.mjs';\nexport { subscribe, createSourceEventStream } from './subscribe.mjs';\nexport {\n  getArgumentValues,\n  getVariableValues,\n  getDirectiveValues,\n} from './values.mjs';\n /utilities/buildClientSchema.mjs.import { devAssert } from '../jsutils/devAssert.mjs';\nimport { inspect } from '../jsutils/inspect.mjs';\nimport { isObjectLike } from '../jsutils/isObjectLike.mjs';\nimport { keyValMap } from '../jsutils/keyValMap.mjs';\nimport { parseValue } from '../language/parser.mjs';\nimport {\n  assertInterfaceType,\n  assertNullableType,\n  assertObjectType,\n  GraphQLEnumType,\n  GraphQLInputObjectType,\n  GraphQLInterfaceType,\n  GraphQLList,\n  GraphQLNonNull,\n  GraphQLObjectType,\n  GraphQLScalarType,\n  GraphQLUnionType,\n  isInputType,\n  isOutputType,\n} from '../type/definition.mjs';\nimport { GraphQLDirective } from '../type/directives.mjs';\nimport { introspectionTypes, TypeKind } from '../type/introspection.mjs';\nimport { specifiedScalarTypes } from '../type/scalars.mjs';\nimport { GraphQLSchema } from '../type/schema.mjs';\nimport { valueFromAST } from './valueFromAST.mjs';\n/**\n * Build a GraphQLSchema for use by client tools.\n *\n * Given the result of a client running the introspection query, creates and\n * returns a GraphQLSchema instance which can be then used with all graphql-js\n * tools, but cannot be used to execute a query, as introspection does not\n * represent the \"resolver\", \"parse\" or \"serialize\" functions or any other\n * server-internal mechanisms.\n *\n * This function expects a complete introspection result. Don't forget to check\n * the \"errors\" field of a server response before calling this function.\n */\n\nexport function buildClientSchema(introspection, options) {\n  (isObjectLike(introspection) && isObjectLike(introspection.__schema)) ||\n    devAssert(\n      false,\n      `Invalid or incomplete introspection result. Ensure that you are passing \"data\" property of introspection response and no \"errors\" was returned alongside: ${inspect(\n        introspection,\n      )}.`,\n    ); // Get the schema from the introspection result.\n\n  const schemaIntrospection = introspection.__schema; // Iterate through all types, getting the type definition for each.\n\n  const typeMap = keyValMap(\n    schemaIntrospection.types,\n    (typeIntrospection) => typeIntrospection.name,\n    (typeIntrospection) => buildType(typeIntrospection),\n  ); // Include standard types only if they are used.\n\n  for (const stdType of [...specifiedScalarTypes, ...introspectionTypes]) {\n    if (typeMap[stdType.name]) {\n      typeMap[stdType.name] = stdType;\n    }\n  } // Get the root Query, Mutation, and Subscription types.\n\n  const queryType = schemaIntrospection.queryType\n    ? getObjectType(schemaIntrospection.queryType)\n    : null;\n  const mutationType = schemaIntrospection.mutationType\n    ? getObjectType(schemaIntrospection.mutationType)\n    : null;\n  const subscriptionType = schemaIntrospection.subscriptionType\n    ? getObjectType(schemaIntrospection.subscriptionType)\n    : null; // Get the directives supported by Introspection, assuming empty-set if\n  // directives were not queried for.\n\n  const directives = schemaIntrospection.directives\n    ? schemaIntrospection.directives.map(buildDirective)\n    : []; // Then produce and return a Schema with these types.\n\n  return new GraphQLSchema({\n    description: schemaIntrospection.description,\n    query: queryType,\n    mutation: mutationType,\n    subscription: subscriptionType,\n    types: Object.values(typeMap),\n    directives,\n    assumeValid:\n      options === null || options === void 0 ? void 0 : options.assumeValid,\n  }); // Given a type reference in introspection, return the GraphQLType instance.\n  // preferring cached instances before building new instances.\n\n  function getType(typeRef) {\n    if (typeRef.kind === TypeKind.LIST) {\n      const itemRef = typeRef.ofType;\n\n      if (!itemRef) {\n        throw new Error('Decorated type deeper than introspection query.');\n      }\n\n      return new GraphQLList(getType(itemRef));\n    }\n\n    if (typeRef.kind === TypeKind.NON_NULL) {\n      const nullableRef = typeRef.ofType;\n\n      if (!nullableRef) {\n        throw new Error('Decorated type deeper than introspection query.');\n      }\n\n      const nullableType = getType(nullableRef);\n      return new GraphQLNonNull(assertNullableType(nullableType));\n    }\n\n    return getNamedType(typeRef);\n  }\n\n  function getNamedType(typeRef) {\n    const typeName = typeRef.name;\n\n    if (!typeName) {\n      throw new Error(`Unknown type reference: ${inspect(typeRef)}.`);\n    }\n\n    const type = typeMap[typeName];\n\n    if (!type) {\n      throw new Error(\n        `Invalid or incomplete schema, unknown type: ${typeName}. Ensure that a full introspection query is used in order to build a client schema.`,\n      );\n    }\n\n    return type;\n  }\n\n  function getObjectType(typeRef) {\n    return assertObjectType(getNamedType(typeRef));\n  }\n\n  function getInterfaceType(typeRef) {\n    return assertInterfaceType(getNamedType(typeRef));\n  } // Given a type's introspection result, construct the correct\n  // GraphQLType instance.\n\n  function buildType(type) {\n    // eslint-disable-next-line @typescript-eslint/prefer-optional-chain\n    if (type != null && type.name != null && type.kind != null) {\n      // FIXME: Properly type IntrospectionType, it's a breaking change so fix in v17\n      // eslint-disable-next-line @typescript-eslint/switch-exhaustiveness-check\n      switch (type.kind) {\n        case TypeKind.SCALAR:\n          return buildScalarDef(type);\n\n        case TypeKind.OBJECT:\n          return buildObjectDef(type);\n\n        case TypeKind.INTERFACE:\n          return buildInterfaceDef(type);\n\n        case TypeKind.UNION:\n          return buildUnionDef(type);\n\n        case TypeKind.ENUM:\n          return buildEnumDef(type);\n\n        case TypeKind.INPUT_OBJECT:\n          return buildInputObjectDef(type);\n      }\n    }\n\n    const typeStr = inspect(type);\n    throw new Error(\n      `Invalid or incomplete introspection result. Ensure that a full introspection query is used in order to build a client schema: ${typeStr}.`,\n    );\n  }\n\n  function buildScalarDef(scalarIntrospection) {\n    return new GraphQLScalarType({\n      name: scalarIntrospection.name,\n      description: scalarIntrospection.description,\n      specifiedByURL: scalarIntrospection.specifiedByURL,\n    });\n  }\n\n  function buildImplementationsList(implementingIntrospection) {\n    // TODO: Temporary workaround until GraphQL ecosystem will fully support\n    // 'interfaces' on interface types.\n    if (\n      implementingIntrospection.interfaces === null &&\n      implementingIntrospection.kind === TypeKind.INTERFACE\n    ) {\n      return [];\n    }\n\n    if (!implementingIntrospection.interfaces) {\n      const implementingIntrospectionStr = inspect(implementingIntrospection);\n      throw new Error(\n        `Introspection result missing interfaces: ${implementingIntrospectionStr}.`,\n      );\n    }\n\n    return implementingIntrospection.interfaces.map(getInterfaceType);\n  }\n\n  function buildObjectDef(objectIntrospection) {\n    return new GraphQLObjectType({\n      name: objectIntrospection.name,\n      description: objectIntrospection.description,\n      interfaces: () => buildImplementationsList(objectIntrospection),\n      fields: () => buildFieldDefMap(objectIntrospection),\n    });\n  }\n\n  function buildInterfaceDef(interfaceIntrospection) {\n    return new GraphQLInterfaceType({\n      name: interfaceIntrospection.name,\n      description: interfaceIntrospection.description,\n      interfaces: () => buildImplementationsList(interfaceIntrospection),\n      fields: () => buildFieldDefMap(interfaceIntrospection),\n    });\n  }\n\n  function buildUnionDef(unionIntrospection) {\n    if (!unionIntrospection.possibleTypes) {\n      const unionIntrospectionStr = inspect(unionIntrospection);\n      throw new Error(\n        `Introspection result missing possibleTypes: ${unionIntrospectionStr}.`,\n      );\n    }\n\n    return new GraphQLUnionType({\n      name: unionIntrospection.name,\n      description: unionIntrospection.description,\n      types: () => unionIntrospection.possibleTypes.map(getObjectType),\n    });\n  }\n\n  function buildEnumDef(enumIntrospection) {\n    if (!enumIntrospection.enumValues) {\n      const enumIntrospectionStr = inspect(enumIntrospection);\n      throw new Error(\n        `Introspection result missing enumValues: ${enumIntrospectionStr}.`,\n      );\n    }\n\n    return new GraphQLEnumType({\n      name: enumIntrospection.name,\n      description: enumIntrospection.description,\n      values: keyValMap(\n        enumIntrospection.enumValues,\n        (valueIntrospection) => valueIntrospection.name,\n        (valueIntrospection) => ({\n          description: valueIntrospection.description,\n          deprecationReason: valueIntrospection.deprecationReason,\n        }),\n      ),\n    });\n  }\n\n  function buildInputObjectDef(inputObjectIntrospection) {\n    if (!inputObjectIntrospection.inputFields) {\n      const inputObjectIntrospectionStr = inspect(inputObjectIntrospection);\n      throw new Error(\n        `Introspection result missing inputFields: ${inputObjectIntrospectionStr}.`,\n      );\n    }\n\n    return new GraphQLInputObjectType({\n      name: inputObjectIntrospection.name,\n      description: inputObjectIntrospection.description,\n      fields: () => buildInputValueDefMap(inputObjectIntrospection.inputFields),\n    });\n  }\n\n  function buildFieldDefMap(typeIntrospection) {\n    if (!typeIntrospection.fields) {\n      throw new Error(\n        `Introspection result missing fields: ${inspect(typeIntrospection)}.`,\n      );\n    }\n\n    return keyValMap(\n      typeIntrospection.fields,\n      (fieldIntrospection) => fieldIntrospection.name,\n      buildField,\n    );\n  }\n\n  function buildField(fieldIntrospection) {\n    const type = getType(fieldIntrospection.type);\n\n    if (!isOutputType(type)) {\n      const typeStr = inspect(type);\n      throw new Error(\n        `Introspection must provide output type for fields, but received: ${typeStr}.`,\n      );\n    }\n\n    if (!fieldIntrospection.args) {\n      const fieldIntrospectionStr = inspect(fieldIntrospection);\n      throw new Error(\n        `Introspection result missing field args: ${fieldIntrospectionStr}.`,\n      );\n    }\n\n    return {\n      description: fieldIntrospection.description,\n      deprecationReason: fieldIntrospection.deprecationReason,\n      type,\n      args: buildInputValueDefMap(fieldIntrospection.args),\n    };\n  }\n\n  function buildInputValueDefMap(inputValueIntrospections) {\n    return keyValMap(\n      inputValueIntrospections,\n      (inputValue) => inputValue.name,\n      buildInputValue,\n    );\n  }\n\n  function buildInputValue(inputValueIntrospection) {\n    const type = getType(inputValueIntrospection.type);\n\n    if (!isInputType(type)) {\n      const typeStr = inspect(type);\n      throw new Error(\n        `Introspection must provide input type for arguments, but received: ${typeStr}.`,\n      );\n    }\n\n    const defaultValue =\n      inputValueIntrospection.defaultValue != null\n        ? valueFromAST(parseValue(inputValueIntrospection.defaultValue), type)\n        : undefined;\n    return {\n      description: inputValueIntrospection.description,\n      type,\n      defaultValue,\n      deprecationReason: inputValueIntrospection.deprecationReason,\n    };\n  }\n\n  function buildDirective(directiveIntrospection) {\n    if (!directiveIntrospection.args) {\n      const directiveIntrospectionStr = inspect(directiveIntrospection);\n      throw new Error(\n        `Introspection result missing directive args: ${directiveIntrospectionStr}.`,\n      );\n    }\n\n    if (!directiveIntrospection.locations) {\n      const directiveIntrospectionStr = inspect(directiveIntrospection);\n      throw new Error(\n        `Introspection result missing directive locations: ${directiveIntrospectionStr}.`,\n      );\n    }\n\n    return new GraphQLDirective({\n      name: directiveIntrospection.name,\n      description: directiveIntrospection.description,\n      isRepeatable: directiveIntrospection.isRepeatable,\n      locations: directiveIntrospection.locations.slice(),\n      args: buildInputValueDefMap(directiveIntrospection.args),\n    });\n  }\n}\n/jsutils/ObjMap.mjs\u000bexport {};\n+/validation/rules/KnownArgumentNamesRule.js\r'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.KnownArgumentNamesOnDirectivesRule = KnownArgumentNamesOnDirectivesRule;\nexports.KnownArgumentNamesRule = KnownArgumentNamesRule;\n\nvar _didYouMean = require('../../jsutils/didYouMean.js');\n\nvar _suggestionList = require('../../jsutils/suggestionList.js');\n\nvar _GraphQLError = require('../../error/GraphQLError.js');\n\nvar _kinds = require('../../language/kinds.js');\n\nvar _directives = require('../../type/directives.js');\n\n/**\n * Known argument names\n *\n * A GraphQL field is only valid if all supplied arguments are defined by\n * that field.\n *\n * See https://spec.graphql.org/draft/#sec-Argument-Names\n * See https://spec.graphql.org/draft/#sec-Directives-Are-In-Valid-Locations\n */\nfunction KnownArgumentNamesRule(context) {\n  return {\n    // eslint-disable-next-line new-cap\n    ...KnownArgumentNamesOnDirectivesRule(context),\n\n    Argument(argNode) {\n      const argDef = context.getArgument();\n      const fieldDef = context.getFieldDef();\n      const parentType = context.getParentType();\n\n      if (!argDef && fieldDef && parentType) {\n        const argName = argNode.name.value;\n        const knownArgsNames = fieldDef.args.map((arg) => arg.name);\n        const suggestions = (0, _suggestionList.suggestionList)(\n          argName,\n          knownArgsNames,\n        );\n        context.reportError(\n          new _GraphQLError.GraphQLError(\n            `Unknown argument \"${argName}\" on field \"${parentType.name}.${fieldDef.name}\".` +\n              (0, _didYouMean.didYouMean)(suggestions),\n            {\n              nodes: argNode,\n            },\n          ),\n        );\n      }\n    },\n  };\n}\n/**\n * @internal\n */\n\nfunction KnownArgumentNamesOnDirectivesRule(context) {\n  const directiveArgs = Object.create(null);\n  const schema = context.getSchema();\n  const definedDirectives = schema\n    ? schema.getDirectives()\n    : _directives.specifiedDirectives;\n\n  for (const directive of definedDirectives) {\n    directiveArgs[directive.name] = directive.args.map((arg) => arg.name);\n  }\n\n  const astDefinitions = context.getDocument().definitions;\n\n  for (const def of astDefinitions) {\n    if (def.kind === _kinds.Kind.DIRECTIVE_DEFINITION) {\n      var _def$arguments;\n\n      // FIXME: https://github.com/graphql/graphql-js/issues/2203\n\n      /* c8 ignore next */\n      const argsNodes =\n        (_def$arguments = def.arguments) !== null && _def$arguments !== void 0\n          ? _def$arguments\n          : [];\n      directiveArgs[def.name.value] = argsNodes.map((arg) => arg.name.value);\n    }\n  }\n\n  return {\n    Directive(directiveNode) {\n      const directiveName = directiveNode.name.value;\n      const knownArgs = directiveArgs[directiveName];\n\n      if (directiveNode.arguments && knownArgs) {\n        for (const argNode of directiveNode.arguments) {\n          const argName = argNode.name.value;\n\n          if (!knownArgs.includes(argName)) {\n            const suggestions = (0, _suggestionList.suggestionList)(\n              argName,\n              knownArgs,\n            );\n            context.reportError(\n              new _GraphQLError.GraphQLError(\n                `Unknown argument \"${argName}\" on directive \"@${directiveName}\".` +\n                  (0, _didYouMean.didYouMean)(suggestions),\n                {\n                  nodes: argNode,\n                },\n              ),\n            );\n          }\n        }\n      }\n\n      return false;\n    },\n  };\n}\n/utilities/getOperationAST.js\u0004'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.getOperationAST = getOperationAST;\n\nvar _kinds = require('../language/kinds.js');\n\n/**\n * Returns an operation AST given a document AST and optionally an operation\n * name. If a name is not provided, an operation is only returned if only one is\n * provided in the document.\n */\nfunction getOperationAST(documentAST, operationName) {\n  let operation = null;\n\n  for (const definition of documentAST.definitions) {\n    if (definition.kind === _kinds.Kind.OPERATION_DEFINITION) {\n      var _definition$name;\n\n      if (operationName == null) {\n        // If no operation name was provided, only return an Operation if there\n        // is one defined in the document. Upon encountering the second, return\n        // null.\n        if (operation) {\n          return null;\n        }\n\n        operation = definition;\n      } else if (\n        ((_definition$name = definition.name) === null ||\n        _definition$name === void 0\n          ? void 0\n          : _definition$name.value) === operationName\n      ) {\n        return definition;\n      }\n    }\n  }\n\n  return operation;\n}\n6/validation/rules/UniqueDirectivesPerLocationRule.d.ts\u0002\u0004import type { ASTVisitor } from '../../language/visitor';\nimport type {\n  SDLValidationContext,\n  ValidationContext,\n} from '../ValidationContext';\n/**\n * Unique directive names per location\n *\n * A GraphQL document is only valid if all non-repeatable directives at\n * a given location are uniquely named.\n *\n * See https://spec.graphql.org/draft/#sec-Directives-Are-Unique-Per-Location\n */\nexport declare function UniqueDirectivesPerLocationRule(\n  context: ValidationContext | SDLValidationContext,\n): ASTVisitor;\n/language/index.js\u0012'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nObject.defineProperty(exports, 'BREAK', {\n  enumerable: true,\n  get: function () {\n    return _visitor.BREAK;\n  },\n});\nObject.defineProperty(exports, 'DirectiveLocation', {\n  enumerable: true,\n  get: function () {\n    return _directiveLocation.DirectiveLocation;\n  },\n});\nObject.defineProperty(exports, 'Kind', {\n  enumerable: true,\n  get: function () {\n    return _kinds.Kind;\n  },\n});\nObject.defineProperty(exports, 'Lexer', {\n  enumerable: true,\n  get: function () {\n    return _lexer.Lexer;\n  },\n});\nObject.defineProperty(exports, 'Location', {\n  enumerable: true,\n  get: function () {\n    return _ast.Location;\n  },\n});\nObject.defineProperty(exports, 'OperationTypeNode', {\n  enumerable: true,\n  get: function () {\n    return _ast.OperationTypeNode;\n  },\n});\nObject.defineProperty(exports, 'Source', {\n  enumerable: true,\n  get: function () {\n    return _source.Source;\n  },\n});\nObject.defineProperty(exports, 'Token', {\n  enumerable: true,\n  get: function () {\n    return _ast.Token;\n  },\n});\nObject.defineProperty(exports, 'TokenKind', {\n  enumerable: true,\n  get: function () {\n    return _tokenKind.TokenKind;\n  },\n});\nObject.defineProperty(exports, 'getEnterLeaveForKind', {\n  enumerable: true,\n  get: function () {\n    return _visitor.getEnterLeaveForKind;\n  },\n});\nObject.defineProperty(exports, 'getLocation', {\n  enumerable: true,\n  get: function () {\n    return _location.getLocation;\n  },\n});\nObject.defineProperty(exports, 'getVisitFn', {\n  enumerable: true,\n  get: function () {\n    return _visitor.getVisitFn;\n  },\n});\nObject.defineProperty(exports, 'isConstValueNode', {\n  enumerable: true,\n  get: function () {\n    return _predicates.isConstValueNode;\n  },\n});\nObject.defineProperty(exports, 'isDefinitionNode', {\n  enumerable: true,\n  get: function () {\n    return _predicates.isDefinitionNode;\n  },\n});\nObject.defineProperty(exports, 'isExecutableDefinitionNode', {\n  enumerable: true,\n  get: function () {\n    return _predicates.isExecutableDefinitionNode;\n  },\n});\nObject.defineProperty(exports, 'isSelectionNode', {\n  enumerable: true,\n  get: function () {\n    return _predicates.isSelectionNode;\n  },\n});\nObject.defineProperty(exports, 'isTypeDefinitionNode', {\n  enumerable: true,\n  get: function () {\n    return _predicates.isTypeDefinitionNode;\n  },\n});\nObject.defineProperty(exports, 'isTypeExtensionNode', {\n  enumerable: true,\n  get: function () {\n    return _predicates.isTypeExtensionNode;\n  },\n});\nObject.defineProperty(exports, 'isTypeNode', {\n  enumerable: true,\n  get: function () {\n    return _predicates.isTypeNode;\n  },\n});\nObject.defineProperty(exports, 'isTypeSystemDefinitionNode', {\n  enumerable: true,\n  get: function () {\n    return _predicates.isTypeSystemDefinitionNode;\n  },\n});\nObject.defineProperty(exports, 'isTypeSystemExtensionNode', {\n  enumerable: true,\n  get: function () {\n    return _predicates.isTypeSystemExtensionNode;\n  },\n});\nObject.defineProperty(exports, 'isValueNode', {\n  enumerable: true,\n  get: function () {\n    return _predicates.isValueNode;\n  },\n});\nObject.defineProperty(exports, 'parse', {\n  enumerable: true,\n  get: function () {\n    return _parser.parse;\n  },\n});\nObject.defineProperty(exports, 'parseConstValue', {\n  enumerable: true,\n  get: function () {\n    return _parser.parseConstValue;\n  },\n});\nObject.defineProperty(exports, 'parseType', {\n  enumerable: true,\n  get: function () {\n    return _parser.parseType;\n  },\n});\nObject.defineProperty(exports, 'parseValue', {\n  enumerable: true,\n  get: function () {\n    return _parser.parseValue;\n  },\n});\nObject.defineProperty(exports, 'print', {\n  enumerable: true,\n  get: function () {\n    return _printer.print;\n  },\n});\nObject.defineProperty(exports, 'printLocation', {\n  enumerable: true,\n  get: function () {\n    return _printLocation.printLocation;\n  },\n});\nObject.defineProperty(exports, 'printSourceLocation', {\n  enumerable: true,\n  get: function () {\n    return _printLocation.printSourceLocation;\n  },\n});\nObject.defineProperty(exports, 'visit', {\n  enumerable: true,\n  get: function () {\n    return _visitor.visit;\n  },\n});\nObject.defineProperty(exports, 'visitInParallel', {\n  enumerable: true,\n  get: function () {\n    return _visitor.visitInParallel;\n  },\n});\n\nvar _source = require('./source.js');\n\nvar _location = require('./location.js');\n\nvar _printLocation = require('./printLocation.js');\n\nvar _kinds = require('./kinds.js');\n\nvar _tokenKind = require('./tokenKind.js');\n\nvar _lexer = require('./lexer.js');\n\nvar _parser = require('./parser.js');\n\nvar _printer = require('./printer.js');\n\nvar _visitor = require('./visitor.js');\n\nvar _ast = require('./ast.js');\n\nvar _predicates = require('./predicates.js');\n\nvar _directiveLocation = require('./directiveLocation.js');\n!/validation/ValidationContext.mjs\u0013\rimport { Kind } from '../language/kinds.mjs';\nimport { visit } from '../language/visitor.mjs';\nimport { TypeInfo, visitWithTypeInfo } from '../utilities/TypeInfo.mjs';\n\n/**\n * An instance of this class is passed as the \"this\" context to all validators,\n * allowing access to commonly useful contextual information from within a\n * validation rule.\n */\nexport class ASTValidationContext {\n  constructor(ast, onError) {\n    this._ast = ast;\n    this._fragments = undefined;\n    this._fragmentSpreads = new Map();\n    this._recursivelyReferencedFragments = new Map();\n    this._onError = onError;\n  }\n\n  get [Symbol.toStringTag]() {\n    return 'ASTValidationContext';\n  }\n\n  reportError(error) {\n    this._onError(error);\n  }\n\n  getDocument() {\n    return this._ast;\n  }\n\n  getFragment(name) {\n    let fragments;\n\n    if (this._fragments) {\n      fragments = this._fragments;\n    } else {\n      fragments = Object.create(null);\n\n      for (const defNode of this.getDocument().definitions) {\n        if (defNode.kind === Kind.FRAGMENT_DEFINITION) {\n          fragments[defNode.name.value] = defNode;\n        }\n      }\n\n      this._fragments = fragments;\n    }\n\n    return fragments[name];\n  }\n\n  getFragmentSpreads(node) {\n    let spreads = this._fragmentSpreads.get(node);\n\n    if (!spreads) {\n      spreads = [];\n      const setsToVisit = [node];\n      let set;\n\n      while ((set = setsToVisit.pop())) {\n        for (const selection of set.selections) {\n          if (selection.kind === Kind.FRAGMENT_SPREAD) {\n            spreads.push(selection);\n          } else if (selection.selectionSet) {\n            setsToVisit.push(selection.selectionSet);\n          }\n        }\n      }\n\n      this._fragmentSpreads.set(node, spreads);\n    }\n\n    return spreads;\n  }\n\n  getRecursivelyReferencedFragments(operation) {\n    let fragments = this._recursivelyReferencedFragments.get(operation);\n\n    if (!fragments) {\n      fragments = [];\n      const collectedNames = Object.create(null);\n      const nodesToVisit = [operation.selectionSet];\n      let node;\n\n      while ((node = nodesToVisit.pop())) {\n        for (const spread of this.getFragmentSpreads(node)) {\n          const fragName = spread.name.value;\n\n          if (collectedNames[fragName] !== true) {\n            collectedNames[fragName] = true;\n            const fragment = this.getFragment(fragName);\n\n            if (fragment) {\n              fragments.push(fragment);\n              nodesToVisit.push(fragment.selectionSet);\n            }\n          }\n        }\n      }\n\n      this._recursivelyReferencedFragments.set(operation, fragments);\n    }\n\n    return fragments;\n  }\n}\nexport class SDLValidationContext extends ASTValidationContext {\n  constructor(ast, schema, onError) {\n    super(ast, onError);\n    this._schema = schema;\n  }\n\n  get [Symbol.toStringTag]() {\n    return 'SDLValidationContext';\n  }\n\n  getSchema() {\n    return this._schema;\n  }\n}\nexport class ValidationContext extends ASTValidationContext {\n  constructor(schema, ast, typeInfo, onError) {\n    super(ast, onError);\n    this._schema = schema;\n    this._typeInfo = typeInfo;\n    this._variableUsages = new Map();\n    this._recursiveVariableUsages = new Map();\n  }\n\n  get [Symbol.toStringTag]() {\n    return 'ValidationContext';\n  }\n\n  getSchema() {\n    return this._schema;\n  }\n\n  getVariableUsages(node) {\n    let usages = this._variableUsages.get(node);\n\n    if (!usages) {\n      const newUsages = [];\n      const typeInfo = new TypeInfo(this._schema);\n      visit(\n        node,\n        visitWithTypeInfo(typeInfo, {\n          VariableDefinition: () => false,\n\n          Variable(variable) {\n            newUsages.push({\n              node: variable,\n              type: typeInfo.getInputType(),\n              defaultValue: typeInfo.getDefaultValue(),\n            });\n          },\n        }),\n      );\n      usages = newUsages;\n\n      this._variableUsages.set(node, usages);\n    }\n\n    return usages;\n  }\n\n  getRecursiveVariableUsages(operation) {\n    let usages = this._recursiveVariableUsages.get(operation);\n\n    if (!usages) {\n      usages = this.getVariableUsages(operation);\n\n      for (const frag of this.getRecursivelyReferencedFragments(operation)) {\n        usages = usages.concat(this.getVariableUsages(frag));\n      }\n\n      this._recursiveVariableUsages.set(operation, usages);\n    }\n\n    return usages;\n  }\n\n  getType() {\n    return this._typeInfo.getType();\n  }\n\n  getParentType() {\n    return this._typeInfo.getParentType();\n  }\n\n  getInputType() {\n    return this._typeInfo.getInputType();\n  }\n\n  getParentInputType() {\n    return this._typeInfo.getParentInputType();\n  }\n\n  getFieldDef() {\n    return this._typeInfo.getFieldDef();\n  }\n\n  getDirective() {\n    return this._typeInfo.getDirective();\n  }\n\n  getArgument() {\n    return this._typeInfo.getArgument();\n  }\n\n  getEnumValue() {\n    return this._typeInfo.getEnumValue();\n  }\n}\n/jsutils/instanceOf.js\tU'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.instanceOf = void 0;\n\nvar _inspect = require('./inspect.js');\n\n/**\n * A replacement for instanceof which includes an error warning when multi-realm\n * constructors are detected.\n * See: https://expressjs.com/en/advanced/best-practice-performance.html#set-node_env-to-production\n * See: https://webpack.js.org/guides/production/\n */\nconst instanceOf =\n  /* c8 ignore next 6 */\n  // FIXME: https://github.com/graphql/graphql-js/issues/2317\n  // eslint-disable-next-line no-undef\n  process.env.NODE_ENV === 'production'\n    ? function instanceOf(value, constructor) {\n        return value instanceof constructor;\n      }\n    : function instanceOf(value, constructor) {\n        if (value instanceof constructor) {\n          return true;\n        }\n\n        if (typeof value === 'object' && value !== null) {\n          var _value$constructor;\n\n          // Prefer Symbol.toStringTag since it is immune to minification.\n          const className = constructor.prototype[Symbol.toStringTag];\n          const valueClassName = // We still need to support constructor's name to detect conflicts with older versions of this library.\n            Symbol.toStringTag in value // @ts-expect-error TS bug see, https://github.com/microsoft/TypeScript/issues/38009\n              ? value[Symbol.toStringTag]\n              : (_value$constructor = value.constructor) === null ||\n                _value$constructor === void 0\n              ? void 0\n              : _value$constructor.name;\n\n          if (className === valueClassName) {\n            const stringifiedValue = (0, _inspect.inspect)(value);\n            throw new Error(`Cannot use ${className} \"${stringifiedValue}\" from another module or realm.\n\nEnsure that there is only one instance of \"graphql\" in the node_modules\ndirectory. If different versions of \"graphql\" are the dependencies of other\nrelied on modules, use \"resolutions\" to ensure only one version is installed.\n\nhttps://yarnpkg.com/en/docs/selective-version-resolutions\n\nDuplicate \"graphql\" modules cannot be used at the same time since different\nversions may have different capabilities and behavior. The data from one\nversion used in the function from another could produce confusing and\nspurious results.`);\n          }\n        }\n\n        return false;\n      };\nexports.instanceOf = instanceOf;\n(/validation/rules/KnownTypeNamesRule.mjs\t\u0002import { didYouMean } from '../../jsutils/didYouMean.mjs';\nimport { suggestionList } from '../../jsutils/suggestionList.mjs';\nimport { GraphQLError } from '../../error/GraphQLError.mjs';\nimport {\n  isTypeDefinitionNode,\n  isTypeSystemDefinitionNode,\n  isTypeSystemExtensionNode,\n} from '../../language/predicates.mjs';\nimport { introspectionTypes } from '../../type/introspection.mjs';\nimport { specifiedScalarTypes } from '../../type/scalars.mjs';\n\n/**\n * Known type names\n *\n * A GraphQL document is only valid if referenced types (specifically\n * variable definitions and fragment conditions) are defined by the type schema.\n *\n * See https://spec.graphql.org/draft/#sec-Fragment-Spread-Type-Existence\n */\nexport function KnownTypeNamesRule(context) {\n  const schema = context.getSchema();\n  const existingTypesMap = schema ? schema.getTypeMap() : Object.create(null);\n  const definedTypes = Object.create(null);\n\n  for (const def of context.getDocument().definitions) {\n    if (isTypeDefinitionNode(def)) {\n      definedTypes[def.name.value] = true;\n    }\n  }\n\n  const typeNames = [\n    ...Object.keys(existingTypesMap),\n    ...Object.keys(definedTypes),\n  ];\n  return {\n    NamedType(node, _1, parent, _2, ancestors) {\n      const typeName = node.name.value;\n\n      if (!existingTypesMap[typeName] && !definedTypes[typeName]) {\n        var _ancestors$;\n\n        const definitionNode =\n          (_ancestors$ = ancestors[2]) !== null && _ancestors$ !== void 0\n            ? _ancestors$\n            : parent;\n        const isSDL = definitionNode != null && isSDLNode(definitionNode);\n\n        if (isSDL && standardTypeNames.includes(typeName)) {\n          return;\n        }\n\n        const suggestedTypes = suggestionList(\n          typeName,\n          isSDL ? standardTypeNames.concat(typeNames) : typeNames,\n        );\n        context.reportError(\n          new GraphQLError(\n            `Unknown type \"${typeName}\".` + didYouMean(suggestedTypes),\n            {\n              nodes: node,\n            },\n          ),\n        );\n      }\n    },\n  };\n}\nconst standardTypeNames = [...specifiedScalarTypes, ...introspectionTypes].map(\n  (type) => type.name,\n);\n\nfunction isSDLNode(value) {\n  return (\n    'kind' in value &&\n    (isTypeSystemDefinitionNode(value) || isTypeSystemExtensionNode(value))\n  );\n}\n/execution/values.js!6'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.getArgumentValues = getArgumentValues;\nexports.getDirectiveValues = getDirectiveValues;\nexports.getVariableValues = getVariableValues;\n\nvar _inspect = require('../jsutils/inspect.js');\n\nvar _keyMap = require('../jsutils/keyMap.js');\n\nvar _printPathArray = require('../jsutils/printPathArray.js');\n\nvar _GraphQLError = require('../error/GraphQLError.js');\n\nvar _kinds = require('../language/kinds.js');\n\nvar _printer = require('../language/printer.js');\n\nvar _definition = require('../type/definition.js');\n\nvar _coerceInputValue = require('../utilities/coerceInputValue.js');\n\nvar _typeFromAST = require('../utilities/typeFromAST.js');\n\nvar _valueFromAST = require('../utilities/valueFromAST.js');\n\n/**\n * Prepares an object map of variableValues of the correct type based on the\n * provided variable definitions and arbitrary input. If the input cannot be\n * parsed to match the variable definitions, a GraphQLError will be thrown.\n *\n * Note: The returned value is a plain Object with a prototype, since it is\n * exposed to user code. Care should be taken to not pull values from the\n * Object prototype.\n */\nfunction getVariableValues(schema, varDefNodes, inputs, options) {\n  const errors = [];\n  const maxErrors =\n    options === null || options === void 0 ? void 0 : options.maxErrors;\n\n  try {\n    const coerced = coerceVariableValues(\n      schema,\n      varDefNodes,\n      inputs,\n      (error) => {\n        if (maxErrors != null && errors.length >= maxErrors) {\n          throw new _GraphQLError.GraphQLError(\n            'Too many errors processing variables, error limit reached. Execution aborted.',\n          );\n        }\n\n        errors.push(error);\n      },\n    );\n\n    if (errors.length === 0) {\n      return {\n        coerced,\n      };\n    }\n  } catch (error) {\n    errors.push(error);\n  }\n\n  return {\n    errors,\n  };\n}\n\nfunction coerceVariableValues(schema, varDefNodes, inputs, onError) {\n  const coercedValues = {};\n\n  for (const varDefNode of varDefNodes) {\n    const varName = varDefNode.variable.name.value;\n    const varType = (0, _typeFromAST.typeFromAST)(schema, varDefNode.type);\n\n    if (!(0, _definition.isInputType)(varType)) {\n      // Must use input types for variables. This should be caught during\n      // validation, however is checked again here for safety.\n      const varTypeStr = (0, _printer.print)(varDefNode.type);\n      onError(\n        new _GraphQLError.GraphQLError(\n          `Variable \"$${varName}\" expected value of type \"${varTypeStr}\" which cannot be used as an input type.`,\n          {\n            nodes: varDefNode.type,\n          },\n        ),\n      );\n      continue;\n    }\n\n    if (!hasOwnProperty(inputs, varName)) {\n      if (varDefNode.defaultValue) {\n        coercedValues[varName] = (0, _valueFromAST.valueFromAST)(\n          varDefNode.defaultValue,\n          varType,\n        );\n      } else if ((0, _definition.isNonNullType)(varType)) {\n        const varTypeStr = (0, _inspect.inspect)(varType);\n        onError(\n          new _GraphQLError.GraphQLError(\n            `Variable \"$${varName}\" of required type \"${varTypeStr}\" was not provided.`,\n            {\n              nodes: varDefNode,\n            },\n          ),\n        );\n      }\n\n      continue;\n    }\n\n    const value = inputs[varName];\n\n    if (value === null && (0, _definition.isNonNullType)(varType)) {\n      const varTypeStr = (0, _inspect.inspect)(varType);\n      onError(\n        new _GraphQLError.GraphQLError(\n          `Variable \"$${varName}\" of non-null type \"${varTypeStr}\" must not be null.`,\n          {\n            nodes: varDefNode,\n          },\n        ),\n      );\n      continue;\n    }\n\n    coercedValues[varName] = (0, _coerceInputValue.coerceInputValue)(\n      value,\n      varType,\n      (path, invalidValue, error) => {\n        let prefix =\n          `Variable \"$${varName}\" got invalid value ` +\n          (0, _inspect.inspect)(invalidValue);\n\n        if (path.length > 0) {\n          prefix += ` at \"${varName}${(0, _printPathArray.printPathArray)(\n            path,\n          )}\"`;\n        }\n\n        onError(\n          new _GraphQLError.GraphQLError(prefix + '; ' + error.message, {\n            nodes: varDefNode,\n            originalError: error.originalError,\n          }),\n        );\n      },\n    );\n  }\n\n  return coercedValues;\n}\n/**\n * Prepares an object map of argument values given a list of argument\n * definitions and list of argument AST nodes.\n *\n * Note: The returned value is a plain Object with a prototype, since it is\n * exposed to user code. Care should be taken to not pull values from the\n * Object prototype.\n */\n\nfunction getArgumentValues(def, node, variableValues) {\n  var _node$arguments;\n\n  const coercedValues = {}; // FIXME: https://github.com/graphql/graphql-js/issues/2203\n\n  /* c8 ignore next */\n\n  const argumentNodes =\n    (_node$arguments = node.arguments) !== null && _node$arguments !== void 0\n      ? _node$arguments\n      : [];\n  const argNodeMap = (0, _keyMap.keyMap)(\n    argumentNodes,\n    (arg) => arg.name.value,\n  );\n\n  for (const argDef of def.args) {\n    const name = argDef.name;\n    const argType = argDef.type;\n    const argumentNode = argNodeMap[name];\n\n    if (!argumentNode) {\n      if (argDef.defaultValue !== undefined) {\n        coercedValues[name] = argDef.defaultValue;\n      } else if ((0, _definition.isNonNullType)(argType)) {\n        throw new _GraphQLError.GraphQLError(\n          `Argument \"${name}\" of required type \"${(0, _inspect.inspect)(\n            argType,\n          )}\" ` + 'was not provided.',\n          {\n            nodes: node,\n          },\n        );\n      }\n\n      continue;\n    }\n\n    const valueNode = argumentNode.value;\n    let isNull = valueNode.kind === _kinds.Kind.NULL;\n\n    if (valueNode.kind === _kinds.Kind.VARIABLE) {\n      const variableName = valueNode.name.value;\n\n      if (\n        variableValues == null ||\n        !hasOwnProperty(variableValues, variableName)\n      ) {\n        if (argDef.defaultValue !== undefined) {\n          coercedValues[name] = argDef.defaultValue;\n        } else if ((0, _definition.isNonNullType)(argType)) {\n          throw new _GraphQLError.GraphQLError(\n            `Argument \"${name}\" of required type \"${(0, _inspect.inspect)(\n              argType,\n            )}\" ` +\n              `was provided the variable \"$${variableName}\" which was not provided a runtime value.`,\n            {\n              nodes: valueNode,\n            },\n          );\n        }\n\n        continue;\n      }\n\n      isNull = variableValues[variableName] == null;\n    }\n\n    if (isNull && (0, _definition.isNonNullType)(argType)) {\n      throw new _GraphQLError.GraphQLError(\n        `Argument \"${name}\" of non-null type \"${(0, _inspect.inspect)(\n          argType,\n        )}\" ` + 'must not be null.',\n        {\n          nodes: valueNode,\n        },\n      );\n    }\n\n    const coercedValue = (0, _valueFromAST.valueFromAST)(\n      valueNode,\n      argType,\n      variableValues,\n    );\n\n    if (coercedValue === undefined) {\n      // Note: ValuesOfCorrectTypeRule validation should catch this before\n      // execution. This is a runtime check to ensure execution does not\n      // continue with an invalid argument value.\n      throw new _GraphQLError.GraphQLError(\n        `Argument \"${name}\" has invalid value ${(0, _printer.print)(\n          valueNode,\n        )}.`,\n        {\n          nodes: valueNode,\n        },\n      );\n    }\n\n    coercedValues[name] = coercedValue;\n  }\n\n  return coercedValues;\n}\n/**\n * Prepares an object map of argument values given a directive definition\n * and a AST node which may contain directives. Optionally also accepts a map\n * of variable values.\n *\n * If the directive does not exist on the node, returns undefined.\n *\n * Note: The returned value is a plain Object with a prototype, since it is\n * exposed to user code. Care should be taken to not pull values from the\n * Object prototype.\n */\n\nfunction getDirectiveValues(directiveDef, node, variableValues) {\n  var _node$directives;\n\n  const directiveNode =\n    (_node$directives = node.directives) === null || _node$directives === void 0\n      ? void 0\n      : _node$directives.find(\n          (directive) => directive.name.value === directiveDef.name,\n        );\n\n  if (directiveNode) {\n    return getArgumentValues(directiveDef, directiveNode, variableValues);\n  }\n}\n\nfunction hasOwnProperty(obj, prop) {\n  return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n/error/syntaxError.mjs\u0001zimport { GraphQLError } from './GraphQLError.mjs';\n/**\n * Produces a GraphQLError representing a syntax error, containing useful\n * descriptive information about the syntax error's position in the source.\n */\n\nexport function syntaxError(source, position, description) {\n  return new GraphQLError(`Syntax Error: ${description}`, {\n    source,\n    positions: [position],\n  });\n}\n./validation/rules/ValuesOfCorrectTypeRule.d.ts\u0001import type { ASTVisitor } from '../../language/visitor';\nimport type { ValidationContext } from '../ValidationContext';\n/**\n * Value literals of correct type\n *\n * A GraphQL document is only valid if all value literals are of the type\n * expected at their position.\n *\n * See https://spec.graphql.org/draft/#sec-Values-of-Correct-Type\n */\nexport declare function ValuesOfCorrectTypeRule(\n  context: ValidationContext,\n): ASTVisitor;\n-/validation/rules/NoUndefinedVariablesRule.js\u0005'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.NoUndefinedVariablesRule = NoUndefinedVariablesRule;\n\nvar _GraphQLError = require('../../error/GraphQLError.js');\n\n/**\n * No undefined variables\n *\n * A GraphQL operation is only valid if all variables encountered, both directly\n * and via fragment spreads, are defined by that operation.\n *\n * See https://spec.graphql.org/draft/#sec-All-Variable-Uses-Defined\n */\nfunction NoUndefinedVariablesRule(context) {\n  let variableNameDefined = Object.create(null);\n  return {\n    OperationDefinition: {\n      enter() {\n        variableNameDefined = Object.create(null);\n      },\n\n      leave(operation) {\n        const usages = context.getRecursiveVariableUsages(operation);\n\n        for (const { node } of usages) {\n          const varName = node.name.value;\n\n          if (variableNameDefined[varName] !== true) {\n            context.reportError(\n              new _GraphQLError.GraphQLError(\n                operation.name\n                  ? `Variable \"$${varName}\" is not defined by operation \"${operation.name.value}\".`\n                  : `Variable \"$${varName}\" is not defined.`,\n                {\n                  nodes: [node, operation],\n                },\n              ),\n            );\n          }\n        }\n      },\n    },\n\n    VariableDefinition(node) {\n      variableNameDefined[node.variable.name.value] = true;\n    },\n  };\n}\n/execution/collectFields.js\u0013w'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.collectFields = collectFields;\nexports.collectSubfields = collectSubfields;\n\nvar _kinds = require('../language/kinds.js');\n\nvar _definition = require('../type/definition.js');\n\nvar _directives = require('../type/directives.js');\n\nvar _typeFromAST = require('../utilities/typeFromAST.js');\n\nvar _values = require('./values.js');\n\n/**\n * Given a selectionSet, collects all of the fields and returns them.\n *\n * CollectFields requires the \"runtime type\" of an object. For a field that\n * returns an Interface or Union type, the \"runtime type\" will be the actual\n * object type returned by that field.\n *\n * @internal\n */\nfunction collectFields(\n  schema,\n  fragments,\n  variableValues,\n  runtimeType,\n  selectionSet,\n) {\n  const fields = new Map();\n  collectFieldsImpl(\n    schema,\n    fragments,\n    variableValues,\n    runtimeType,\n    selectionSet,\n    fields,\n    new Set(),\n  );\n  return fields;\n}\n/**\n * Given an array of field nodes, collects all of the subfields of the passed\n * in fields, and returns them at the end.\n *\n * CollectSubFields requires the \"return type\" of an object. For a field that\n * returns an Interface or Union type, the \"return type\" will be the actual\n * object type returned by that field.\n *\n * @internal\n */\n\nfunction collectSubfields(\n  schema,\n  fragments,\n  variableValues,\n  returnType,\n  fieldNodes,\n) {\n  const subFieldNodes = new Map();\n  const visitedFragmentNames = new Set();\n\n  for (const node of fieldNodes) {\n    if (node.selectionSet) {\n      collectFieldsImpl(\n        schema,\n        fragments,\n        variableValues,\n        returnType,\n        node.selectionSet,\n        subFieldNodes,\n        visitedFragmentNames,\n      );\n    }\n  }\n\n  return subFieldNodes;\n}\n\nfunction collectFieldsImpl(\n  schema,\n  fragments,\n  variableValues,\n  runtimeType,\n  selectionSet,\n  fields,\n  visitedFragmentNames,\n) {\n  for (const selection of selectionSet.selections) {\n    switch (selection.kind) {\n      case _kinds.Kind.FIELD: {\n        if (!shouldIncludeNode(variableValues, selection)) {\n          continue;\n        }\n\n        const name = getFieldEntryKey(selection);\n        const fieldList = fields.get(name);\n\n        if (fieldList !== undefined) {\n          fieldList.push(selection);\n        } else {\n          fields.set(name, [selection]);\n        }\n\n        break;\n      }\n\n      case _kinds.Kind.INLINE_FRAGMENT: {\n        if (\n          !shouldIncludeNode(variableValues, selection) ||\n          !doesFragmentConditionMatch(schema, selection, runtimeType)\n        ) {\n          continue;\n        }\n\n        collectFieldsImpl(\n          schema,\n          fragments,\n          variableValues,\n          runtimeType,\n          selection.selectionSet,\n          fields,\n          visitedFragmentNames,\n        );\n        break;\n      }\n\n      case _kinds.Kind.FRAGMENT_SPREAD: {\n        const fragName = selection.name.value;\n\n        if (\n          visitedFragmentNames.has(fragName) ||\n          !shouldIncludeNode(variableValues, selection)\n        ) {\n          continue;\n        }\n\n        visitedFragmentNames.add(fragName);\n        const fragment = fragments[fragName];\n\n        if (\n          !fragment ||\n          !doesFragmentConditionMatch(schema, fragment, runtimeType)\n        ) {\n          continue;\n        }\n\n        collectFieldsImpl(\n          schema,\n          fragments,\n          variableValues,\n          runtimeType,\n          fragment.selectionSet,\n          fields,\n          visitedFragmentNames,\n        );\n        break;\n      }\n    }\n  }\n}\n/**\n * Determines if a field should be included based on the `@include` and `@skip`\n * directives, where `@skip` has higher precedence than `@include`.\n */\n\nfunction shouldIncludeNode(variableValues, node) {\n  const skip = (0, _values.getDirectiveValues)(\n    _directives.GraphQLSkipDirective,\n    node,\n    variableValues,\n  );\n\n  if ((skip === null || skip === void 0 ? void 0 : skip.if) === true) {\n    return false;\n  }\n\n  const include = (0, _values.getDirectiveValues)(\n    _directives.GraphQLIncludeDirective,\n    node,\n    variableValues,\n  );\n\n  if (\n    (include === null || include === void 0 ? void 0 : include.if) === false\n  ) {\n    return false;\n  }\n\n  return true;\n}\n/**\n * Determines if a fragment is applicable to the given type.\n */\n\nfunction doesFragmentConditionMatch(schema, fragment, type) {\n  const typeConditionNode = fragment.typeCondition;\n\n  if (!typeConditionNode) {\n    return true;\n  }\n\n  const conditionalType = (0, _typeFromAST.typeFromAST)(\n    schema,\n    typeConditionNode,\n  );\n\n  if (conditionalType === type) {\n    return true;\n  }\n\n  if ((0, _definition.isAbstractType)(conditionalType)) {\n    return schema.isSubType(conditionalType, type);\n  }\n\n  return false;\n}\n/**\n * Implements the logic to compute the key of a given field's entry\n */\n\nfunction getFieldEntryKey(node) {\n  return node.alias ? node.alias.value : node.name.value;\n}\n7/validation/rules/UniqueArgumentDefinitionNamesRule.mjs\tzimport { groupBy } from '../../jsutils/groupBy.mjs';\nimport { GraphQLError } from '../../error/GraphQLError.mjs';\n\n/**\n * Unique argument definition names\n *\n * A GraphQL Object or Interface type is only valid if all its fields have uniquely named arguments.\n * A GraphQL Directive is only valid if all its arguments are uniquely named.\n */\nexport function UniqueArgumentDefinitionNamesRule(context) {\n  return {\n    DirectiveDefinition(directiveNode) {\n      var _directiveNode$argume;\n\n      // FIXME: https://github.com/graphql/graphql-js/issues/2203\n\n      /* c8 ignore next */\n      const argumentNodes =\n        (_directiveNode$argume = directiveNode.arguments) !== null &&\n        _directiveNode$argume !== void 0\n          ? _directiveNode$argume\n          : [];\n      return checkArgUniqueness(`@${directiveNode.name.value}`, argumentNodes);\n    },\n\n    InterfaceTypeDefinition: checkArgUniquenessPerField,\n    InterfaceTypeExtension: checkArgUniquenessPerField,\n    ObjectTypeDefinition: checkArgUniquenessPerField,\n    ObjectTypeExtension: checkArgUniquenessPerField,\n  };\n\n  function checkArgUniquenessPerField(typeNode) {\n    var _typeNode$fields;\n\n    const typeName = typeNode.name.value; // FIXME: https://github.com/graphql/graphql-js/issues/2203\n\n    /* c8 ignore next */\n\n    const fieldNodes =\n      (_typeNode$fields = typeNode.fields) !== null &&\n      _typeNode$fields !== void 0\n        ? _typeNode$fields\n        : [];\n\n    for (const fieldDef of fieldNodes) {\n      var _fieldDef$arguments;\n\n      const fieldName = fieldDef.name.value; // FIXME: https://github.com/graphql/graphql-js/issues/2203\n\n      /* c8 ignore next */\n\n      const argumentNodes =\n        (_fieldDef$arguments = fieldDef.arguments) !== null &&\n        _fieldDef$arguments !== void 0\n          ? _fieldDef$arguments\n          : [];\n      checkArgUniqueness(`${typeName}.${fieldName}`, argumentNodes);\n    }\n\n    return false;\n  }\n\n  function checkArgUniqueness(parentName, argumentNodes) {\n    const seenArgs = groupBy(argumentNodes, (arg) => arg.name.value);\n\n    for (const [argName, argNodes] of seenArgs) {\n      if (argNodes.length > 1) {\n        context.reportError(\n          new GraphQLError(\n            `Argument \"${parentName}(${argName}:)\" can only be defined once.`,\n            {\n              nodes: argNodes.map((node) => node.name),\n            },\n          ),\n        );\n      }\n    }\n\n    return false;\n  }\n}\n/LICENSE\u00040MIT License\n\nCopyright (c) GraphQL Contributors\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n/error/GraphQLError.mjs\u001bimport { isObjectLike } from '../jsutils/isObjectLike.mjs';\nimport { getLocation } from '../language/location.mjs';\nimport {\n  printLocation,\n  printSourceLocation,\n} from '../language/printLocation.mjs';\n\nfunction toNormalizedOptions(args) {\n  const firstArg = args[0];\n\n  if (firstArg == null || 'kind' in firstArg || 'length' in firstArg) {\n    return {\n      nodes: firstArg,\n      source: args[1],\n      positions: args[2],\n      path: args[3],\n      originalError: args[4],\n      extensions: args[5],\n    };\n  }\n\n  return firstArg;\n}\n/**\n * A GraphQLError describes an Error found during the parse, validate, or\n * execute phases of performing a GraphQL operation. In addition to a message\n * and stack trace, it also includes information about the locations in a\n * GraphQL document and/or execution result that correspond to the Error.\n */\n\nexport class GraphQLError extends Error {\n  /**\n   * An array of `{ line, column }` locations within the source GraphQL document\n   * which correspond to this error.\n   *\n   * Errors during validation often contain multiple locations, for example to\n   * point out two things with the same name. Errors during execution include a\n   * single location, the field which produced the error.\n   *\n   * Enumerable, and appears in the result of JSON.stringify().\n   */\n\n  /**\n   * An array describing the JSON-path into the execution response which\n   * corresponds to this error. Only included for errors during execution.\n   *\n   * Enumerable, and appears in the result of JSON.stringify().\n   */\n\n  /**\n   * An array of GraphQL AST Nodes corresponding to this error.\n   */\n\n  /**\n   * The source GraphQL document for the first location of this error.\n   *\n   * Note that if this Error represents more than one node, the source may not\n   * represent nodes after the first node.\n   */\n\n  /**\n   * An array of character offsets within the source GraphQL document\n   * which correspond to this error.\n   */\n\n  /**\n   * The original error thrown from a field resolver during execution.\n   */\n\n  /**\n   * Extension fields to add to the formatted error.\n   */\n\n  /**\n   * @deprecated Please use the `GraphQLErrorOptions` constructor overload instead.\n   */\n  constructor(message, ...rawArgs) {\n    var _this$nodes, _nodeLocations$, _ref;\n\n    const { nodes, source, positions, path, originalError, extensions } =\n      toNormalizedOptions(rawArgs);\n    super(message);\n    this.name = 'GraphQLError';\n    this.path = path !== null && path !== void 0 ? path : undefined;\n    this.originalError =\n      originalError !== null && originalError !== void 0\n        ? originalError\n        : undefined; // Compute list of blame nodes.\n\n    this.nodes = undefinedIfEmpty(\n      Array.isArray(nodes) ? nodes : nodes ? [nodes] : undefined,\n    );\n    const nodeLocations = undefinedIfEmpty(\n      (_this$nodes = this.nodes) === null || _this$nodes === void 0\n        ? void 0\n        : _this$nodes.map((node) => node.loc).filter((loc) => loc != null),\n    ); // Compute locations in the source for the given nodes/positions.\n\n    this.source =\n      source !== null && source !== void 0\n        ? source\n        : nodeLocations === null || nodeLocations === void 0\n        ? void 0\n        : (_nodeLocations$ = nodeLocations[0]) === null ||\n          _nodeLocations$ === void 0\n        ? void 0\n        : _nodeLocations$.source;\n    this.positions =\n      positions !== null && positions !== void 0\n        ? positions\n        : nodeLocations === null || nodeLocations === void 0\n        ? void 0\n        : nodeLocations.map((loc) => loc.start);\n    this.locations =\n      positions && source\n        ? positions.map((pos) => getLocation(source, pos))\n        : nodeLocations === null || nodeLocations === void 0\n        ? void 0\n        : nodeLocations.map((loc) => getLocation(loc.source, loc.start));\n    const originalExtensions = isObjectLike(\n      originalError === null || originalError === void 0\n        ? void 0\n        : originalError.extensions,\n    )\n      ? originalError === null || originalError === void 0\n        ? void 0\n        : originalError.extensions\n      : undefined;\n    this.extensions =\n      (_ref =\n        extensions !== null && extensions !== void 0\n          ? extensions\n          : originalExtensions) !== null && _ref !== void 0\n        ? _ref\n        : Object.create(null); // Only properties prescribed by the spec should be enumerable.\n    // Keep the rest as non-enumerable.\n\n    Object.defineProperties(this, {\n      message: {\n        writable: true,\n        enumerable: true,\n      },\n      name: {\n        enumerable: false,\n      },\n      nodes: {\n        enumerable: false,\n      },\n      source: {\n        enumerable: false,\n      },\n      positions: {\n        enumerable: false,\n      },\n      originalError: {\n        enumerable: false,\n      },\n    }); // Include (non-enumerable) stack trace.\n\n    /* c8 ignore start */\n    // FIXME: https://github.com/graphql/graphql-js/issues/2317\n\n    if (\n      originalError !== null &&\n      originalError !== void 0 &&\n      originalError.stack\n    ) {\n      Object.defineProperty(this, 'stack', {\n        value: originalError.stack,\n        writable: true,\n        configurable: true,\n      });\n    } else if (Error.captureStackTrace) {\n      Error.captureStackTrace(this, GraphQLError);\n    } else {\n      Object.defineProperty(this, 'stack', {\n        value: Error().stack,\n        writable: true,\n        configurable: true,\n      });\n    }\n    /* c8 ignore stop */\n  }\n\n  get [Symbol.toStringTag]() {\n    return 'GraphQLError';\n  }\n\n  toString() {\n    let output = this.message;\n\n    if (this.nodes) {\n      for (const node of this.nodes) {\n        if (node.loc) {\n          output += '\\n\\n' + printLocation(node.loc);\n        }\n      }\n    } else if (this.source && this.locations) {\n      for (const location of this.locations) {\n        output += '\\n\\n' + printSourceLocation(this.source, location);\n      }\n    }\n\n    return output;\n  }\n\n  toJSON() {\n    const formattedError = {\n      message: this.message,\n    };\n\n    if (this.locations != null) {\n      formattedError.locations = this.locations;\n    }\n\n    if (this.path != null) {\n      formattedError.path = this.path;\n    }\n\n    if (this.extensions != null && Object.keys(this.extensions).length > 0) {\n      formattedError.extensions = this.extensions;\n    }\n\n    return formattedError;\n  }\n}\n\nfunction undefinedIfEmpty(array) {\n  return array === undefined || array.length === 0 ? undefined : array;\n}\n/**\n * See: https://spec.graphql.org/draft/#sec-Errors\n */\n\n/**\n * Prints a GraphQLError to a string, representing useful location information\n * about the error's position in the source.\n *\n * @deprecated Please use `error.toString` instead. Will be removed in v17\n */\nexport function printError(error) {\n  return error.toString();\n}\n/**\n * Given a GraphQLError, format it according to the rules described by the\n * Response Format, Errors section of the GraphQL Specification.\n *\n * @deprecated Please use `error.toJSON` instead. Will be removed in v17\n */\n\nexport function formatError(error) {\n  return error.toJSON();\n}\n/jsutils/isIterableObject.mjs\u00033/**\n * Returns true if the provided object is an Object (i.e. not a string literal)\n * and implements the Iterator protocol.\n *\n * This may be used in place of [Array.isArray()][isArray] to determine if\n * an object should be iterated-over e.g. Array, Map, Set, Int8Array,\n * TypedArray, etc. but excludes string literals.\n *\n * @example\n * ```ts\n * isIterableObject([ 1, 2, 3 ]) // true\n * isIterableObject(new Map()) // true\n * isIterableObject('ABC') // false\n * isIterableObject({ key: 'value' }) // false\n * isIterableObject({ length: 1, 0: 'Alpha' }) // false\n * ```\n */\nexport function isIterableObject(maybeIterable) {\n  return (\n    typeof maybeIterable === 'object' &&\n    typeof (maybeIterable === null || maybeIterable === void 0\n      ? void 0\n      : maybeIterable[Symbol.iterator]) === 'function'\n  );\n}\n-/validation/rules/UniqueOperationTypesRule.js\u0007'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.UniqueOperationTypesRule = UniqueOperationTypesRule;\n\nvar _GraphQLError = require('../../error/GraphQLError.js');\n\n/**\n * Unique operation types\n *\n * A GraphQL document is only valid if it has only one type per operation.\n */\nfunction UniqueOperationTypesRule(context) {\n  const schema = context.getSchema();\n  const definedOperationTypes = Object.create(null);\n  const existingOperationTypes = schema\n    ? {\n        query: schema.getQueryType(),\n        mutation: schema.getMutationType(),\n        subscription: schema.getSubscriptionType(),\n      }\n    : {};\n  return {\n    SchemaDefinition: checkOperationTypes,\n    SchemaExtension: checkOperationTypes,\n  };\n\n  function checkOperationTypes(node) {\n    var _node$operationTypes;\n\n    // See: https://github.com/graphql/graphql-js/issues/2203\n\n    /* c8 ignore next */\n    const operationTypesNodes =\n      (_node$operationTypes = node.operationTypes) !== null &&\n      _node$operationTypes !== void 0\n        ? _node$operationTypes\n        : [];\n\n    for (const operationType of operationTypesNodes) {\n      const operation = operationType.operation;\n      const alreadyDefinedOperationType = definedOperationTypes[operation];\n\n      if (existingOperationTypes[operation]) {\n        context.reportError(\n          new _GraphQLError.GraphQLError(\n            `Type for ${operation} already defined in the schema. It cannot be redefined.`,\n            {\n              nodes: operationType,\n            },\n          ),\n        );\n      } else if (alreadyDefinedOperationType) {\n        context.reportError(\n          new _GraphQLError.GraphQLError(\n            `There can be only one ${operation} type in schema.`,\n            {\n              nodes: [alreadyDefinedOperationType, operationType],\n            },\n          ),\n        );\n      } else {\n        definedOperationTypes[operation] = operationType;\n      }\n    }\n\n    return false;\n  }\n}\n/execution/mapAsyncIterator.mjs\u0005G/**\n * Given an AsyncIterable and a callback function, return an AsyncIterator\n * which produces values mapped via calling the callback function.\n */\nexport function mapAsyncIterator(iterable, callback) {\n  const iterator = iterable[Symbol.asyncIterator]();\n\n  async function mapResult(result) {\n    if (result.done) {\n      return result;\n    }\n\n    try {\n      return {\n        value: await callback(result.value),\n        done: false,\n      };\n    } catch (error) {\n      /* c8 ignore start */\n      // FIXME: add test case\n      if (typeof iterator.return === 'function') {\n        try {\n          await iterator.return();\n        } catch (_e) {\n          /* ignore error */\n        }\n      }\n\n      throw error;\n      /* c8 ignore stop */\n    }\n  }\n\n  return {\n    async next() {\n      return mapResult(await iterator.next());\n    },\n\n    async return() {\n      // If iterator.return() does not exist, then type R must be undefined.\n      return typeof iterator.return === 'function'\n        ? mapResult(await iterator.return())\n        : {\n            value: undefined,\n            done: true,\n          };\n    },\n\n    async throw(error) {\n      if (typeof iterator.throw === 'function') {\n        return mapResult(await iterator.throw(error));\n      }\n\n      throw error;\n    },\n\n    [Symbol.asyncIterator]() {\n      return this;\n    },\n  };\n}\n//validation/rules/UniqueInputFieldNamesRule.mjs\u0004import { invariant } from '../../jsutils/invariant.mjs';\nimport { GraphQLError } from '../../error/GraphQLError.mjs';\n\n/**\n * Unique input field names\n *\n * A GraphQL input object value is only valid if all supplied fields are\n * uniquely named.\n *\n * See https://spec.graphql.org/draft/#sec-Input-Object-Field-Uniqueness\n */\nexport function UniqueInputFieldNamesRule(context) {\n  const knownNameStack = [];\n  let knownNames = Object.create(null);\n  return {\n    ObjectValue: {\n      enter() {\n        knownNameStack.push(knownNames);\n        knownNames = Object.create(null);\n      },\n\n      leave() {\n        const prevKnownNames = knownNameStack.pop();\n        prevKnownNames || invariant(false);\n        knownNames = prevKnownNames;\n      },\n    },\n\n    ObjectField(node) {\n      const fieldName = node.name.value;\n\n      if (knownNames[fieldName]) {\n        context.reportError(\n          new GraphQLError(\n            `There can be only one input field named \"${fieldName}\".`,\n            {\n              nodes: [knownNames[fieldName], node.name],\n            },\n          ),\n        );\n      } else {\n        knownNames[fieldName] = node.name;\n      }\n    },\n  };\n}\n/jsutils/suggestionList.mjs\u000ecimport { naturalCompare } from './naturalCompare.mjs';\n/**\n * Given an invalid input string and a list of valid options, returns a filtered\n * list of valid options sorted based on their similarity with the input.\n */\n\nexport function suggestionList(input, options) {\n  const optionsByDistance = Object.create(null);\n  const lexicalDistance = new LexicalDistance(input);\n  const threshold = Math.floor(input.length * 0.4) + 1;\n\n  for (const option of options) {\n    const distance = lexicalDistance.measure(option, threshold);\n\n    if (distance !== undefined) {\n      optionsByDistance[option] = distance;\n    }\n  }\n\n  return Object.keys(optionsByDistance).sort((a, b) => {\n    const distanceDiff = optionsByDistance[a] - optionsByDistance[b];\n    return distanceDiff !== 0 ? distanceDiff : naturalCompare(a, b);\n  });\n}\n/**\n * Computes the lexical distance between strings A and B.\n *\n * The \"distance\" between two strings is given by counting the minimum number\n * of edits needed to transform string A into string B. An edit can be an\n * insertion, deletion, or substitution of a single character, or a swap of two\n * adjacent characters.\n *\n * Includes a custom alteration from Damerau-Levenshtein to treat case changes\n * as a single edit which helps identify mis-cased values with an edit distance\n * of 1.\n *\n * This distance can be useful for detecting typos in input or sorting\n */\n\nclass LexicalDistance {\n  constructor(input) {\n    this._input = input;\n    this._inputLowerCase = input.toLowerCase();\n    this._inputArray = stringToArray(this._inputLowerCase);\n    this._rows = [\n      new Array(input.length + 1).fill(0),\n      new Array(input.length + 1).fill(0),\n      new Array(input.length + 1).fill(0),\n    ];\n  }\n\n  measure(option, threshold) {\n    if (this._input === option) {\n      return 0;\n    }\n\n    const optionLowerCase = option.toLowerCase(); // Any case change counts as a single edit\n\n    if (this._inputLowerCase === optionLowerCase) {\n      return 1;\n    }\n\n    let a = stringToArray(optionLowerCase);\n    let b = this._inputArray;\n\n    if (a.length < b.length) {\n      const tmp = a;\n      a = b;\n      b = tmp;\n    }\n\n    const aLength = a.length;\n    const bLength = b.length;\n\n    if (aLength - bLength > threshold) {\n      return undefined;\n    }\n\n    const rows = this._rows;\n\n    for (let j = 0; j <= bLength; j++) {\n      rows[0][j] = j;\n    }\n\n    for (let i = 1; i <= aLength; i++) {\n      const upRow = rows[(i - 1) % 3];\n      const currentRow = rows[i % 3];\n      let smallestCell = (currentRow[0] = i);\n\n      for (let j = 1; j <= bLength; j++) {\n        const cost = a[i - 1] === b[j - 1] ? 0 : 1;\n        let currentCell = Math.min(\n          upRow[j] + 1, // delete\n          currentRow[j - 1] + 1, // insert\n          upRow[j - 1] + cost, // substitute\n        );\n\n        if (i > 1 && j > 1 && a[i - 1] === b[j - 2] && a[i - 2] === b[j - 1]) {\n          // transposition\n          const doubleDiagonalCell = rows[(i - 2) % 3][j - 2];\n          currentCell = Math.min(currentCell, doubleDiagonalCell + 1);\n        }\n\n        if (currentCell < smallestCell) {\n          smallestCell = currentCell;\n        }\n\n        currentRow[j] = currentCell;\n      } // Early exit, since distance can't go smaller than smallest element of the previous row.\n\n      if (smallestCell > threshold) {\n        return undefined;\n      }\n    }\n\n    const distance = rows[aLength % 3][bLength];\n    return distance <= threshold ? distance : undefined;\n  }\n}\n\nfunction stringToArray(str) {\n  const strLength = str.length;\n  const array = new Array(strLength);\n\n  for (let i = 0; i < strLength; ++i) {\n    array[i] = str.charCodeAt(i);\n  }\n\n  return array;\n}\n/utilities/typeComparators.d.ts\u0004\u0013import type { GraphQLCompositeType, GraphQLType } from '../type/definition';\nimport type { GraphQLSchema } from '../type/schema';\n/**\n * Provided two types, return true if the types are equal (invariant).\n */\nexport declare function isEqualType(\n  typeA: GraphQLType,\n  typeB: GraphQLType,\n): boolean;\n/**\n * Provided a type and a super type, return true if the first type is either\n * equal or a subset of the second super type (covariant).\n */\nexport declare function isTypeSubTypeOf(\n  schema: GraphQLSchema,\n  maybeSubType: GraphQLType,\n  superType: GraphQLType,\n): boolean;\n/**\n * Provided two composite types, determine if they \"overlap\". Two composite\n * types overlap when the Sets of possible concrete types for each intersect.\n *\n * This is often used to determine if a fragment of a given type could possibly\n * be visited in a context of another type.\n *\n * This function is commutative.\n */\nexport declare function doTypesOverlap(\n  schema: GraphQLSchema,\n  typeA: GraphQLCompositeType,\n  typeB: GraphQLCompositeType,\n): boolean;\n2/validation/rules/custom/NoDeprecatedCustomRule.js\u000f'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.NoDeprecatedCustomRule = NoDeprecatedCustomRule;\n\nvar _invariant = require('../../../jsutils/invariant.js');\n\nvar _GraphQLError = require('../../../error/GraphQLError.js');\n\nvar _definition = require('../../../type/definition.js');\n\n/**\n * No deprecated\n *\n * A GraphQL document is only valid if all selected fields and all used enum values have not been\n * deprecated.\n *\n * Note: This rule is optional and is not part of the Validation section of the GraphQL\n * Specification. The main purpose of this rule is detection of deprecated usages and not\n * necessarily to forbid their use when querying a service.\n */\nfunction NoDeprecatedCustomRule(context) {\n  return {\n    Field(node) {\n      const fieldDef = context.getFieldDef();\n      const deprecationReason =\n        fieldDef === null || fieldDef === void 0\n          ? void 0\n          : fieldDef.deprecationReason;\n\n      if (fieldDef && deprecationReason != null) {\n        const parentType = context.getParentType();\n        parentType != null || (0, _invariant.invariant)(false);\n        context.reportError(\n          new _GraphQLError.GraphQLError(\n            `The field ${parentType.name}.${fieldDef.name} is deprecated. ${deprecationReason}`,\n            {\n              nodes: node,\n            },\n          ),\n        );\n      }\n    },\n\n    Argument(node) {\n      const argDef = context.getArgument();\n      const deprecationReason =\n        argDef === null || argDef === void 0\n          ? void 0\n          : argDef.deprecationReason;\n\n      if (argDef && deprecationReason != null) {\n        const directiveDef = context.getDirective();\n\n        if (directiveDef != null) {\n          context.reportError(\n            new _GraphQLError.GraphQLError(\n              `Directive \"@${directiveDef.name}\" argument \"${argDef.name}\" is deprecated. ${deprecationReason}`,\n              {\n                nodes: node,\n              },\n            ),\n          );\n        } else {\n          const parentType = context.getParentType();\n          const fieldDef = context.getFieldDef();\n          (parentType != null && fieldDef != null) ||\n            (0, _invariant.invariant)(false);\n          context.reportError(\n            new _GraphQLError.GraphQLError(\n              `Field \"${parentType.name}.${fieldDef.name}\" argument \"${argDef.name}\" is deprecated. ${deprecationReason}`,\n              {\n                nodes: node,\n              },\n            ),\n          );\n        }\n      }\n    },\n\n    ObjectField(node) {\n      const inputObjectDef = (0, _definition.getNamedType)(\n        context.getParentInputType(),\n      );\n\n      if ((0, _definition.isInputObjectType)(inputObjectDef)) {\n        const inputFieldDef = inputObjectDef.getFields()[node.name.value];\n        const deprecationReason =\n          inputFieldDef === null || inputFieldDef === void 0\n            ? void 0\n            : inputFieldDef.deprecationReason;\n\n        if (deprecationReason != null) {\n          context.reportError(\n            new _GraphQLError.GraphQLError(\n              `The input field ${inputObjectDef.name}.${inputFieldDef.name} is deprecated. ${deprecationReason}`,\n              {\n                nodes: node,\n              },\n            ),\n          );\n        }\n      }\n    },\n\n    EnumValue(node) {\n      const enumValueDef = context.getEnumValue();\n      const deprecationReason =\n        enumValueDef === null || enumValueDef === void 0\n          ? void 0\n          : enumValueDef.deprecationReason;\n\n      if (enumValueDef && deprecationReason != null) {\n        const enumTypeDef = (0, _definition.getNamedType)(\n          context.getInputType(),\n        );\n        enumTypeDef != null || (0, _invariant.invariant)(false);\n        context.reportError(\n          new _GraphQLError.GraphQLError(\n            `The enum value \"${enumTypeDef.name}.${enumValueDef.name}\" is deprecated. ${deprecationReason}`,\n            {\n              nodes: node,\n            },\n          ),\n        );\n      }\n    },\n  };\n}\n/jsutils/isAsyncIterable.js\u0001'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.isAsyncIterable = isAsyncIterable;\n\n/**\n * Returns true if the provided object implements the AsyncIterator protocol via\n * implementing a `Symbol.asyncIterator` method.\n */\nfunction isAsyncIterable(maybeAsyncIterable) {\n  return (\n    typeof (maybeAsyncIterable === null || maybeAsyncIterable === void 0\n      ? void 0\n      : maybeAsyncIterable[Symbol.asyncIterator]) === 'function'\n  );\n}\n/jsutils/isPromise.mjs\u0001\u0000/**\n * Returns true if the value acts like a Promise, i.e. has a \"then\" function,\n * otherwise returns false.\n */\nexport function isPromise(value) {\n  return (\n    typeof (value === null || value === void 0 ? void 0 : value.then) ===\n    'function'\n  );\n}\n/language/tokenKind.d.ts\u0002/**\n * An exported enum describing the different kinds of tokens that the\n * lexer emits.\n */\ndeclare enum TokenKind {\n  SOF = '<SOF>',\n  EOF = '<EOF>',\n  BANG = '!',\n  DOLLAR = '$',\n  AMP = '&',\n  PAREN_L = '(',\n  PAREN_R = ')',\n  SPREAD = '...',\n  COLON = ':',\n  EQUALS = '=',\n  AT = '@',\n  BRACKET_L = '[',\n  BRACKET_R = ']',\n  BRACE_L = '{',\n  PIPE = '|',\n  BRACE_R = '}',\n  NAME = 'Name',\n  INT = 'Int',\n  FLOAT = 'Float',\n  STRING = 'String',\n  BLOCK_STRING = 'BlockString',\n  COMMENT = 'Comment',\n}\nexport { TokenKind };\n/**\n * The enum type representing the token kinds values.\n *\n * @deprecated Please use `TokenKind`. Will be remove in v17.\n */\nexport declare type TokenKindEnum = typeof TokenKind;\n1/validation/rules/SingleFieldSubscriptionsRule.js\u000b='use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.SingleFieldSubscriptionsRule = SingleFieldSubscriptionsRule;\n\nvar _GraphQLError = require('../../error/GraphQLError.js');\n\nvar _kinds = require('../../language/kinds.js');\n\nvar _collectFields = require('../../execution/collectFields.js');\n\n/**\n * Subscriptions must only include a non-introspection field.\n *\n * A GraphQL subscription is valid only if it contains a single root field and\n * that root field is not an introspection field.\n *\n * See https://spec.graphql.org/draft/#sec-Single-root-field\n */\nfunction SingleFieldSubscriptionsRule(context) {\n  return {\n    OperationDefinition(node) {\n      if (node.operation === 'subscription') {\n        const schema = context.getSchema();\n        const subscriptionType = schema.getSubscriptionType();\n\n        if (subscriptionType) {\n          const operationName = node.name ? node.name.value : null;\n          const variableValues = Object.create(null);\n          const document = context.getDocument();\n          const fragments = Object.create(null);\n\n          for (const definition of document.definitions) {\n            if (definition.kind === _kinds.Kind.FRAGMENT_DEFINITION) {\n              fragments[definition.name.value] = definition;\n            }\n          }\n\n          const fields = (0, _collectFields.collectFields)(\n            schema,\n            fragments,\n            variableValues,\n            subscriptionType,\n            node.selectionSet,\n          );\n\n          if (fields.size > 1) {\n            const fieldSelectionLists = [...fields.values()];\n            const extraFieldSelectionLists = fieldSelectionLists.slice(1);\n            const extraFieldSelections = extraFieldSelectionLists.flat();\n            context.reportError(\n              new _GraphQLError.GraphQLError(\n                operationName != null\n                  ? `Subscription \"${operationName}\" must select only one top level field.`\n                  : 'Anonymous Subscription must select only one top level field.',\n                {\n                  nodes: extraFieldSelections,\n                },\n              ),\n            );\n          }\n\n          for (const fieldNodes of fields.values()) {\n            const field = fieldNodes[0];\n            const fieldName = field.name.value;\n\n            if (fieldName.startsWith('__')) {\n              context.reportError(\n                new _GraphQLError.GraphQLError(\n                  operationName != null\n                    ? `Subscription \"${operationName}\" must not select an introspection top level field.`\n                    : 'Anonymous Subscription must not select an introspection top level field.',\n                  {\n                    nodes: fieldNodes,\n                  },\n                ),\n              );\n            }\n          }\n        }\n      }\n    },\n  };\n}\n/jsutils/isPromise.js\u0001j'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.isPromise = isPromise;\n\n/**\n * Returns true if the value acts like a Promise, i.e. has a \"then\" function,\n * otherwise returns false.\n */\nfunction isPromise(value) {\n  return (\n    typeof (value === null || value === void 0 ? void 0 : value.then) ===\n    'function'\n  );\n}\n/subscription/index.d.ts\u0003}/**\n * NOTE: the `graphql/subscription` module has been deprecated with its\n * exported functions integrated into the `graphql/execution` module, to\n * better conform with the terminology of the GraphQL specification.\n *\n * For backwards compatibility, the `graphql/subscription` module\n * currently re-exports the moved functions from the `graphql/execution`\n * module. In the next major release, the `graphql/subscription` module\n * will be dropped entirely.\n */\nimport type { ExecutionArgs } from '../execution/execute';\n/**\n * @deprecated use ExecutionArgs instead. Will be removed in v17\n *\n * ExecutionArgs has been broadened to include all properties within SubscriptionArgs.\n * The SubscriptionArgs type is retained for backwards compatibility.\n */\nexport interface SubscriptionArgs extends ExecutionArgs {}\nexport { subscribe, createSourceEventStream } from '../execution/subscribe';\n,/validation/rules/NoUnusedVariablesRule.d.ts\u0001import type { ASTVisitor } from '../../language/visitor';\nimport type { ValidationContext } from '../ValidationContext';\n/**\n * No unused variables\n *\n * A GraphQL operation is only valid if all variables defined by an operation\n * are used, either directly or within a spread fragment.\n *\n * See https://spec.graphql.org/draft/#sec-All-Variables-Used\n */\nexport declare function NoUnusedVariablesRule(\n  context: ValidationContext,\n): ASTVisitor;\n!/utilities/separateOperations.mjs\n2import { Kind } from '../language/kinds.mjs';\nimport { visit } from '../language/visitor.mjs';\n/**\n * separateOperations accepts a single AST document which may contain many\n * operations and fragments and returns a collection of AST documents each of\n * which contains a single operation as well the fragment definitions it\n * refers to.\n */\n\nexport function separateOperations(documentAST) {\n  const operations = [];\n  const depGraph = Object.create(null); // Populate metadata and build a dependency graph.\n\n  for (const definitionNode of documentAST.definitions) {\n    switch (definitionNode.kind) {\n      case Kind.OPERATION_DEFINITION:\n        operations.push(definitionNode);\n        break;\n\n      case Kind.FRAGMENT_DEFINITION:\n        depGraph[definitionNode.name.value] = collectDependencies(\n          definitionNode.selectionSet,\n        );\n        break;\n\n      default: // ignore non-executable definitions\n    }\n  } // For each operation, produce a new synthesized AST which includes only what\n  // is necessary for completing that operation.\n\n  const separatedDocumentASTs = Object.create(null);\n\n  for (const operation of operations) {\n    const dependencies = new Set();\n\n    for (const fragmentName of collectDependencies(operation.selectionSet)) {\n      collectTransitiveDependencies(dependencies, depGraph, fragmentName);\n    } // Provides the empty string for anonymous operations.\n\n    const operationName = operation.name ? operation.name.value : ''; // The list of definition nodes to be included for this operation, sorted\n    // to retain the same order as the original document.\n\n    separatedDocumentASTs[operationName] = {\n      kind: Kind.DOCUMENT,\n      definitions: documentAST.definitions.filter(\n        (node) =>\n          node === operation ||\n          (node.kind === Kind.FRAGMENT_DEFINITION &&\n            dependencies.has(node.name.value)),\n      ),\n    };\n  }\n\n  return separatedDocumentASTs;\n}\n\n// From a dependency graph, collects a list of transitive dependencies by\n// recursing through a dependency graph.\nfunction collectTransitiveDependencies(collected, depGraph, fromName) {\n  if (!collected.has(fromName)) {\n    collected.add(fromName);\n    const immediateDeps = depGraph[fromName];\n\n    if (immediateDeps !== undefined) {\n      for (const toName of immediateDeps) {\n        collectTransitiveDependencies(collected, depGraph, toName);\n      }\n    }\n  }\n}\n\nfunction collectDependencies(selectionSet) {\n  const dependencies = [];\n  visit(selectionSet, {\n    FragmentSpread(node) {\n      dependencies.push(node.name.value);\n    },\n  });\n  return dependencies;\n}\n./validation/rules/UniqueArgumentNamesRule.d.ts\u0001import type { ASTVisitor } from '../../language/visitor';\nimport type { ASTValidationContext } from '../ValidationContext';\n/**\n * Unique argument names\n *\n * A GraphQL field or directive is only valid if all supplied arguments are\n * uniquely named.\n *\n * See https://spec.graphql.org/draft/#sec-Argument-Names\n */\nexport declare function UniqueArgumentNamesRule(\n  context: ASTValidationContext,\n): ASTVisitor;\n*/validation/rules/NoFragmentCyclesRule.mjs\tcimport { GraphQLError } from '../../error/GraphQLError.mjs';\n\n/**\n * No fragment cycles\n *\n * The graph of fragment spreads must not form any cycles including spreading itself.\n * Otherwise an operation could infinitely spread or infinitely execute on cycles in the underlying data.\n *\n * See https://spec.graphql.org/draft/#sec-Fragment-spreads-must-not-form-cycles\n */\nexport function NoFragmentCyclesRule(context) {\n  // Tracks already visited fragments to maintain O(N) and to ensure that cycles\n  // are not redundantly reported.\n  const visitedFrags = Object.create(null); // Array of AST nodes used to produce meaningful errors\n\n  const spreadPath = []; // Position in the spread path\n\n  const spreadPathIndexByName = Object.create(null);\n  return {\n    OperationDefinition: () => false,\n\n    FragmentDefinition(node) {\n      detectCycleRecursive(node);\n      return false;\n    },\n  }; // This does a straight-forward DFS to find cycles.\n  // It does not terminate when a cycle was found but continues to explore\n  // the graph to find all possible cycles.\n\n  function detectCycleRecursive(fragment) {\n    if (visitedFrags[fragment.name.value]) {\n      return;\n    }\n\n    const fragmentName = fragment.name.value;\n    visitedFrags[fragmentName] = true;\n    const spreadNodes = context.getFragmentSpreads(fragment.selectionSet);\n\n    if (spreadNodes.length === 0) {\n      return;\n    }\n\n    spreadPathIndexByName[fragmentName] = spreadPath.length;\n\n    for (const spreadNode of spreadNodes) {\n      const spreadName = spreadNode.name.value;\n      const cycleIndex = spreadPathIndexByName[spreadName];\n      spreadPath.push(spreadNode);\n\n      if (cycleIndex === undefined) {\n        const spreadFragment = context.getFragment(spreadName);\n\n        if (spreadFragment) {\n          detectCycleRecursive(spreadFragment);\n        }\n      } else {\n        const cyclePath = spreadPath.slice(cycleIndex);\n        const viaPath = cyclePath\n          .slice(0, -1)\n          .map((s) => '\"' + s.name.value + '\"')\n          .join(', ');\n        context.reportError(\n          new GraphQLError(\n            `Cannot spread fragment \"${spreadName}\" within itself` +\n              (viaPath !== '' ? ` via ${viaPath}.` : '.'),\n            {\n              nodes: cyclePath,\n            },\n          ),\n        );\n      }\n\n      spreadPath.pop();\n    }\n\n    spreadPathIndexByName[fragmentName] = undefined;\n  }\n}\n/language/predicates.d.ts\u0004himport type {\n  ASTNode,\n  ConstValueNode,\n  DefinitionNode,\n  ExecutableDefinitionNode,\n  SelectionNode,\n  TypeDefinitionNode,\n  TypeExtensionNode,\n  TypeNode,\n  TypeSystemDefinitionNode,\n  TypeSystemExtensionNode,\n  ValueNode,\n} from './ast';\nexport declare function isDefinitionNode(node: ASTNode): node is DefinitionNode;\nexport declare function isExecutableDefinitionNode(\n  node: ASTNode,\n): node is ExecutableDefinitionNode;\nexport declare function isSelectionNode(node: ASTNode): node is SelectionNode;\nexport declare function isValueNode(node: ASTNode): node is ValueNode;\nexport declare function isConstValueNode(node: ASTNode): node is ConstValueNode;\nexport declare function isTypeNode(node: ASTNode): node is TypeNode;\nexport declare function isTypeSystemDefinitionNode(\n  node: ASTNode,\n): node is TypeSystemDefinitionNode;\nexport declare function isTypeDefinitionNode(\n  node: ASTNode,\n): node is TypeDefinitionNode;\nexport declare function isTypeSystemExtensionNode(\n  node: ASTNode,\n): node is TypeSystemExtensionNode;\nexport declare function isTypeExtensionNode(\n  node: ASTNode,\n): node is TypeExtensionNode;\n#/utilities/getIntrospectionQuery.js\u000b'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.getIntrospectionQuery = getIntrospectionQuery;\n\n/**\n * Produce the GraphQL query recommended for a full schema introspection.\n * Accepts optional IntrospectionOptions.\n */\nfunction getIntrospectionQuery(options) {\n  const optionsWithDefault = {\n    descriptions: true,\n    specifiedByUrl: false,\n    directiveIsRepeatable: false,\n    schemaDescription: false,\n    inputValueDeprecation: false,\n    ...options,\n  };\n  const descriptions = optionsWithDefault.descriptions ? 'description' : '';\n  const specifiedByUrl = optionsWithDefault.specifiedByUrl\n    ? 'specifiedByURL'\n    : '';\n  const directiveIsRepeatable = optionsWithDefault.directiveIsRepeatable\n    ? 'isRepeatable'\n    : '';\n  const schemaDescription = optionsWithDefault.schemaDescription\n    ? descriptions\n    : '';\n\n  function inputDeprecation(str) {\n    return optionsWithDefault.inputValueDeprecation ? str : '';\n  }\n\n  return `\n    query IntrospectionQuery {\n      __schema {\n        ${schemaDescription}\n        queryType { name }\n        mutationType { name }\n        subscriptionType { name }\n        types {\n          ...FullType\n        }\n        directives {\n          name\n          ${descriptions}\n          ${directiveIsRepeatable}\n          locations\n          args${inputDeprecation('(includeDeprecated: true)')} {\n            ...InputValue\n          }\n        }\n      }\n    }\n\n    fragment FullType on __Type {\n      kind\n      name\n      ${descriptions}\n      ${specifiedByUrl}\n      fields(includeDeprecated: true) {\n        name\n        ${descriptions}\n        args${inputDeprecation('(includeDeprecated: true)')} {\n          ...InputValue\n        }\n        type {\n          ...TypeRef\n        }\n        isDeprecated\n        deprecationReason\n      }\n      inputFields${inputDeprecation('(includeDeprecated: true)')} {\n        ...InputValue\n      }\n      interfaces {\n        ...TypeRef\n      }\n      enumValues(includeDeprecated: true) {\n        name\n        ${descriptions}\n        isDeprecated\n        deprecationReason\n      }\n      possibleTypes {\n        ...TypeRef\n      }\n    }\n\n    fragment InputValue on __InputValue {\n      name\n      ${descriptions}\n      type { ...TypeRef }\n      defaultValue\n      ${inputDeprecation('isDeprecated')}\n      ${inputDeprecation('deprecationReason')}\n    }\n\n    fragment TypeRef on __Type {\n      kind\n      name\n      ofType {\n        kind\n        name\n        ofType {\n          kind\n          name\n          ofType {\n            kind\n            name\n            ofType {\n              kind\n              name\n              ofType {\n                kind\n                name\n                ofType {\n                  kind\n                  name\n                  ofType {\n                    kind\n                    name\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n  `;\n}\n/language/tokenKind.mjs\u0003/**\n * An exported enum describing the different kinds of tokens that the\n * lexer emits.\n */\nvar TokenKind;\n\n(function (TokenKind) {\n  TokenKind['SOF'] = '<SOF>';\n  TokenKind['EOF'] = '<EOF>';\n  TokenKind['BANG'] = '!';\n  TokenKind['DOLLAR'] = '$';\n  TokenKind['AMP'] = '&';\n  TokenKind['PAREN_L'] = '(';\n  TokenKind['PAREN_R'] = ')';\n  TokenKind['SPREAD'] = '...';\n  TokenKind['COLON'] = ':';\n  TokenKind['EQUALS'] = '=';\n  TokenKind['AT'] = '@';\n  TokenKind['BRACKET_L'] = '[';\n  TokenKind['BRACKET_R'] = ']';\n  TokenKind['BRACE_L'] = '{';\n  TokenKind['PIPE'] = '|';\n  TokenKind['BRACE_R'] = '}';\n  TokenKind['NAME'] = 'Name';\n  TokenKind['INT'] = 'Int';\n  TokenKind['FLOAT'] = 'Float';\n  TokenKind['STRING'] = 'String';\n  TokenKind['BLOCK_STRING'] = 'BlockString';\n  TokenKind['COMMENT'] = 'Comment';\n})(TokenKind || (TokenKind = {}));\n\nexport { TokenKind };\n/**\n * The enum type representing the token kinds values.\n *\n * @deprecated Please use `TokenKind`. Will be remove in v17.\n */\n/language/index.d.ts\texport { Source } from './source';\nexport { getLocation } from './location';\nexport type { SourceLocation } from './location';\nexport { printLocation, printSourceLocation } from './printLocation';\nexport { Kind } from './kinds';\nexport type { KindEnum } from './kinds';\nexport { TokenKind } from './tokenKind';\nexport type { TokenKindEnum } from './tokenKind';\nexport { Lexer } from './lexer';\nexport { parse, parseValue, parseConstValue, parseType } from './parser';\nexport type { ParseOptions } from './parser';\nexport { print } from './printer';\nexport {\n  visit,\n  visitInParallel,\n  getVisitFn,\n  getEnterLeaveForKind,\n  BREAK,\n} from './visitor';\nexport type { ASTVisitor, ASTVisitFn, ASTVisitorKeyMap } from './visitor';\nexport { Location, Token, OperationTypeNode } from './ast';\nexport type {\n  ASTNode,\n  ASTKindToNode,\n  NameNode,\n  DocumentNode,\n  DefinitionNode,\n  ExecutableDefinitionNode,\n  OperationDefinitionNode,\n  VariableDefinitionNode,\n  VariableNode,\n  SelectionSetNode,\n  SelectionNode,\n  FieldNode,\n  ArgumentNode,\n  ConstArgumentNode,\n  FragmentSpreadNode,\n  InlineFragmentNode,\n  FragmentDefinitionNode,\n  ValueNode,\n  ConstValueNode,\n  IntValueNode,\n  FloatValueNode,\n  StringValueNode,\n  BooleanValueNode,\n  NullValueNode,\n  EnumValueNode,\n  ListValueNode,\n  ConstListValueNode,\n  ObjectValueNode,\n  ConstObjectValueNode,\n  ObjectFieldNode,\n  ConstObjectFieldNode,\n  DirectiveNode,\n  ConstDirectiveNode,\n  TypeNode,\n  NamedTypeNode,\n  ListTypeNode,\n  NonNullTypeNode,\n  TypeSystemDefinitionNode,\n  SchemaDefinitionNode,\n  OperationTypeDefinitionNode,\n  TypeDefinitionNode,\n  ScalarTypeDefinitionNode,\n  ObjectTypeDefinitionNode,\n  FieldDefinitionNode,\n  InputValueDefinitionNode,\n  InterfaceTypeDefinitionNode,\n  UnionTypeDefinitionNode,\n  EnumTypeDefinitionNode,\n  EnumValueDefinitionNode,\n  InputObjectTypeDefinitionNode,\n  DirectiveDefinitionNode,\n  TypeSystemExtensionNode,\n  SchemaExtensionNode,\n  TypeExtensionNode,\n  ScalarTypeExtensionNode,\n  ObjectTypeExtensionNode,\n  InterfaceTypeExtensionNode,\n  UnionTypeExtensionNode,\n  EnumTypeExtensionNode,\n  InputObjectTypeExtensionNode,\n} from './ast';\nexport {\n  isDefinitionNode,\n  isExecutableDefinitionNode,\n  isSelectionNode,\n  isValueNode,\n  isConstValueNode,\n  isTypeNode,\n  isTypeSystemDefinitionNode,\n  isTypeDefinitionNode,\n  isTypeSystemExtensionNode,\n  isTypeExtensionNode,\n} from './predicates';\nexport { DirectiveLocation } from './directiveLocation';\nexport type { DirectiveLocationEnum } from './directiveLocation';\n1/validation/rules/LoneAnonymousOperationRule.d.ts\u0001import type { ASTVisitor } from '../../language/visitor';\nimport type { ASTValidationContext } from '../ValidationContext';\n/**\n * Lone anonymous operation\n *\n * A GraphQL document is only valid if when it contains an anonymous operation\n * (the query short-hand) that it contains only that one operation definition.\n *\n * See https://spec.graphql.org/draft/#sec-Lone-Anonymous-Operation\n */\nexport declare function LoneAnonymousOperationRule(\n  context: ASTValidationContext,\n): ASTVisitor;\n/utilities/index.js\u0017.'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nObject.defineProperty(exports, 'BreakingChangeType', {\n  enumerable: true,\n  get: function () {\n    return _findBreakingChanges.BreakingChangeType;\n  },\n});\nObject.defineProperty(exports, 'DangerousChangeType', {\n  enumerable: true,\n  get: function () {\n    return _findBreakingChanges.DangerousChangeType;\n  },\n});\nObject.defineProperty(exports, 'TypeInfo', {\n  enumerable: true,\n  get: function () {\n    return _TypeInfo.TypeInfo;\n  },\n});\nObject.defineProperty(exports, 'assertValidName', {\n  enumerable: true,\n  get: function () {\n    return _assertValidName.assertValidName;\n  },\n});\nObject.defineProperty(exports, 'astFromValue', {\n  enumerable: true,\n  get: function () {\n    return _astFromValue.astFromValue;\n  },\n});\nObject.defineProperty(exports, 'buildASTSchema', {\n  enumerable: true,\n  get: function () {\n    return _buildASTSchema.buildASTSchema;\n  },\n});\nObject.defineProperty(exports, 'buildClientSchema', {\n  enumerable: true,\n  get: function () {\n    return _buildClientSchema.buildClientSchema;\n  },\n});\nObject.defineProperty(exports, 'buildSchema', {\n  enumerable: true,\n  get: function () {\n    return _buildASTSchema.buildSchema;\n  },\n});\nObject.defineProperty(exports, 'coerceInputValue', {\n  enumerable: true,\n  get: function () {\n    return _coerceInputValue.coerceInputValue;\n  },\n});\nObject.defineProperty(exports, 'concatAST', {\n  enumerable: true,\n  get: function () {\n    return _concatAST.concatAST;\n  },\n});\nObject.defineProperty(exports, 'doTypesOverlap', {\n  enumerable: true,\n  get: function () {\n    return _typeComparators.doTypesOverlap;\n  },\n});\nObject.defineProperty(exports, 'extendSchema', {\n  enumerable: true,\n  get: function () {\n    return _extendSchema.extendSchema;\n  },\n});\nObject.defineProperty(exports, 'findBreakingChanges', {\n  enumerable: true,\n  get: function () {\n    return _findBreakingChanges.findBreakingChanges;\n  },\n});\nObject.defineProperty(exports, 'findDangerousChanges', {\n  enumerable: true,\n  get: function () {\n    return _findBreakingChanges.findDangerousChanges;\n  },\n});\nObject.defineProperty(exports, 'getIntrospectionQuery', {\n  enumerable: true,\n  get: function () {\n    return _getIntrospectionQuery.getIntrospectionQuery;\n  },\n});\nObject.defineProperty(exports, 'getOperationAST', {\n  enumerable: true,\n  get: function () {\n    return _getOperationAST.getOperationAST;\n  },\n});\nObject.defineProperty(exports, 'getOperationRootType', {\n  enumerable: true,\n  get: function () {\n    return _getOperationRootType.getOperationRootType;\n  },\n});\nObject.defineProperty(exports, 'introspectionFromSchema', {\n  enumerable: true,\n  get: function () {\n    return _introspectionFromSchema.introspectionFromSchema;\n  },\n});\nObject.defineProperty(exports, 'isEqualType', {\n  enumerable: true,\n  get: function () {\n    return _typeComparators.isEqualType;\n  },\n});\nObject.defineProperty(exports, 'isTypeSubTypeOf', {\n  enumerable: true,\n  get: function () {\n    return _typeComparators.isTypeSubTypeOf;\n  },\n});\nObject.defineProperty(exports, 'isValidNameError', {\n  enumerable: true,\n  get: function () {\n    return _assertValidName.isValidNameError;\n  },\n});\nObject.defineProperty(exports, 'lexicographicSortSchema', {\n  enumerable: true,\n  get: function () {\n    return _lexicographicSortSchema.lexicographicSortSchema;\n  },\n});\nObject.defineProperty(exports, 'printIntrospectionSchema', {\n  enumerable: true,\n  get: function () {\n    return _printSchema.printIntrospectionSchema;\n  },\n});\nObject.defineProperty(exports, 'printSchema', {\n  enumerable: true,\n  get: function () {\n    return _printSchema.printSchema;\n  },\n});\nObject.defineProperty(exports, 'printType', {\n  enumerable: true,\n  get: function () {\n    return _printSchema.printType;\n  },\n});\nObject.defineProperty(exports, 'separateOperations', {\n  enumerable: true,\n  get: function () {\n    return _separateOperations.separateOperations;\n  },\n});\nObject.defineProperty(exports, 'stripIgnoredCharacters', {\n  enumerable: true,\n  get: function () {\n    return _stripIgnoredCharacters.stripIgnoredCharacters;\n  },\n});\nObject.defineProperty(exports, 'typeFromAST', {\n  enumerable: true,\n  get: function () {\n    return _typeFromAST.typeFromAST;\n  },\n});\nObject.defineProperty(exports, 'valueFromAST', {\n  enumerable: true,\n  get: function () {\n    return _valueFromAST.valueFromAST;\n  },\n});\nObject.defineProperty(exports, 'valueFromASTUntyped', {\n  enumerable: true,\n  get: function () {\n    return _valueFromASTUntyped.valueFromASTUntyped;\n  },\n});\nObject.defineProperty(exports, 'visitWithTypeInfo', {\n  enumerable: true,\n  get: function () {\n    return _TypeInfo.visitWithTypeInfo;\n  },\n});\n\nvar _getIntrospectionQuery = require('./getIntrospectionQuery.js');\n\nvar _getOperationAST = require('./getOperationAST.js');\n\nvar _getOperationRootType = require('./getOperationRootType.js');\n\nvar _introspectionFromSchema = require('./introspectionFromSchema.js');\n\nvar _buildClientSchema = require('./buildClientSchema.js');\n\nvar _buildASTSchema = require('./buildASTSchema.js');\n\nvar _extendSchema = require('./extendSchema.js');\n\nvar _lexicographicSortSchema = require('./lexicographicSortSchema.js');\n\nvar _printSchema = require('./printSchema.js');\n\nvar _typeFromAST = require('./typeFromAST.js');\n\nvar _valueFromAST = require('./valueFromAST.js');\n\nvar _valueFromASTUntyped = require('./valueFromASTUntyped.js');\n\nvar _astFromValue = require('./astFromValue.js');\n\nvar _TypeInfo = require('./TypeInfo.js');\n\nvar _coerceInputValue = require('./coerceInputValue.js');\n\nvar _concatAST = require('./concatAST.js');\n\nvar _separateOperations = require('./separateOperations.js');\n\nvar _stripIgnoredCharacters = require('./stripIgnoredCharacters.js');\n\nvar _typeComparators = require('./typeComparators.js');\n\nvar _assertValidName = require('./assertValidName.js');\n\nvar _findBreakingChanges = require('./findBreakingChanges.js');\n/type/introspection.d.ts\u0004import type { GraphQLField, GraphQLNamedType } from './definition';\nimport { GraphQLEnumType, GraphQLObjectType } from './definition';\nexport declare const __Schema: GraphQLObjectType;\nexport declare const __Directive: GraphQLObjectType;\nexport declare const __DirectiveLocation: GraphQLEnumType;\nexport declare const __Type: GraphQLObjectType;\nexport declare const __Field: GraphQLObjectType;\nexport declare const __InputValue: GraphQLObjectType;\nexport declare const __EnumValue: GraphQLObjectType;\ndeclare enum TypeKind {\n  SCALAR = 'SCALAR',\n  OBJECT = 'OBJECT',\n  INTERFACE = 'INTERFACE',\n  UNION = 'UNION',\n  ENUM = 'ENUM',\n  INPUT_OBJECT = 'INPUT_OBJECT',\n  LIST = 'LIST',\n  NON_NULL = 'NON_NULL',\n}\nexport { TypeKind };\nexport declare const __TypeKind: GraphQLEnumType;\n/**\n * Note that these are GraphQLField and not GraphQLFieldConfig,\n * so the format for args is different.\n */\nexport declare const SchemaMetaFieldDef: GraphQLField<unknown, unknown>;\nexport declare const TypeMetaFieldDef: GraphQLField<unknown, unknown>;\nexport declare const TypeNameMetaFieldDef: GraphQLField<unknown, unknown>;\nexport declare const introspectionTypes: ReadonlyArray<GraphQLNamedType>;\nexport declare function isIntrospectionType(type: GraphQLNamedType): boolean;\n/version.mjs\u0001// Note: This file is autogenerated using \"resources/gen-version.js\" script and\n// automatically updated by \"npm version\" command.\n\n/**\n * A string containing the version of the GraphQL.js library\n */\nexport const version = '16.6.0';\n/**\n * An object containing the components of the GraphQL.js version string\n */\n\nexport const versionInfo = Object.freeze({\n  major: 16,\n  minor: 6,\n  patch: 0,\n  preReleaseTag: null,\n});\n0/validation/rules/ExecutableDefinitionsRule.d.ts\u0001import type { ASTVisitor } from '../../language/visitor';\nimport type { ASTValidationContext } from '../ValidationContext';\n/**\n * Executable definitions\n *\n * A GraphQL document is only valid for execution if all definitions are either\n * operation or fragment definitions.\n *\n * See https://spec.graphql.org/draft/#sec-Executable-Definitions\n */\nexport declare function ExecutableDefinitionsRule(\n  context: ASTValidationContext,\n): ASTVisitor;\n/jsutils/keyMap.js\u0003'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.keyMap = keyMap;\n\n/**\n * Creates a keyed JS object from an array, given a function to produce the keys\n * for each value in the array.\n *\n * This provides a convenient lookup for the array items if the key function\n * produces unique results.\n * ```ts\n * const phoneBook = [\n *   { name: 'Jon', num: '555-1234' },\n *   { name: 'Jenny', num: '867-5309' }\n * ]\n *\n * const entriesByName = keyMap(\n *   phoneBook,\n *   entry => entry.name\n * )\n *\n * // {\n * //   Jon: { name: 'Jon', num: '555-1234' },\n * //   Jenny: { name: 'Jenny', num: '867-5309' }\n * // }\n *\n * const jennyEntry = entriesByName['Jenny']\n *\n * // { name: 'Jenny', num: '857-6309' }\n * ```\n */\nfunction keyMap(list, keyFn) {\n  const result = Object.create(null);\n\n  for (const item of list) {\n    result[keyFn(item)] = item;\n  }\n\n  return result;\n}\n/utilities/astFromValue.mjs\u0012mimport { inspect } from '../jsutils/inspect.mjs';\nimport { invariant } from '../jsutils/invariant.mjs';\nimport { isIterableObject } from '../jsutils/isIterableObject.mjs';\nimport { isObjectLike } from '../jsutils/isObjectLike.mjs';\nimport { Kind } from '../language/kinds.mjs';\nimport {\n  isEnumType,\n  isInputObjectType,\n  isLeafType,\n  isListType,\n  isNonNullType,\n} from '../type/definition.mjs';\nimport { GraphQLID } from '../type/scalars.mjs';\n/**\n * Produces a GraphQL Value AST given a JavaScript object.\n * Function will match JavaScript/JSON values to GraphQL AST schema format\n * by using suggested GraphQLInputType. For example:\n *\n *     astFromValue(\"value\", GraphQLString)\n *\n * A GraphQL type must be provided, which will be used to interpret different\n * JavaScript values.\n *\n * | JSON Value    | GraphQL Value        |\n * | ------------- | -------------------- |\n * | Object        | Input Object         |\n * | Array         | List                 |\n * | Boolean       | Boolean              |\n * | String        | String / Enum Value  |\n * | Number        | Int / Float          |\n * | Unknown       | Enum Value           |\n * | null          | NullValue            |\n *\n */\n\nexport function astFromValue(value, type) {\n  if (isNonNullType(type)) {\n    const astValue = astFromValue(value, type.ofType);\n\n    if (\n      (astValue === null || astValue === void 0 ? void 0 : astValue.kind) ===\n      Kind.NULL\n    ) {\n      return null;\n    }\n\n    return astValue;\n  } // only explicit null, not undefined, NaN\n\n  if (value === null) {\n    return {\n      kind: Kind.NULL,\n    };\n  } // undefined\n\n  if (value === undefined) {\n    return null;\n  } // Convert JavaScript array to GraphQL list. If the GraphQLType is a list, but\n  // the value is not an array, convert the value using the list's item type.\n\n  if (isListType(type)) {\n    const itemType = type.ofType;\n\n    if (isIterableObject(value)) {\n      const valuesNodes = [];\n\n      for (const item of value) {\n        const itemNode = astFromValue(item, itemType);\n\n        if (itemNode != null) {\n          valuesNodes.push(itemNode);\n        }\n      }\n\n      return {\n        kind: Kind.LIST,\n        values: valuesNodes,\n      };\n    }\n\n    return astFromValue(value, itemType);\n  } // Populate the fields of the input object by creating ASTs from each value\n  // in the JavaScript object according to the fields in the input type.\n\n  if (isInputObjectType(type)) {\n    if (!isObjectLike(value)) {\n      return null;\n    }\n\n    const fieldNodes = [];\n\n    for (const field of Object.values(type.getFields())) {\n      const fieldValue = astFromValue(value[field.name], field.type);\n\n      if (fieldValue) {\n        fieldNodes.push({\n          kind: Kind.OBJECT_FIELD,\n          name: {\n            kind: Kind.NAME,\n            value: field.name,\n          },\n          value: fieldValue,\n        });\n      }\n    }\n\n    return {\n      kind: Kind.OBJECT,\n      fields: fieldNodes,\n    };\n  }\n\n  if (isLeafType(type)) {\n    // Since value is an internally represented value, it must be serialized\n    // to an externally represented value before converting into an AST.\n    const serialized = type.serialize(value);\n\n    if (serialized == null) {\n      return null;\n    } // Others serialize based on their corresponding JavaScript scalar types.\n\n    if (typeof serialized === 'boolean') {\n      return {\n        kind: Kind.BOOLEAN,\n        value: serialized,\n      };\n    } // JavaScript numbers can be Int or Float values.\n\n    if (typeof serialized === 'number' && Number.isFinite(serialized)) {\n      const stringNum = String(serialized);\n      return integerStringRegExp.test(stringNum)\n        ? {\n            kind: Kind.INT,\n            value: stringNum,\n          }\n        : {\n            kind: Kind.FLOAT,\n            value: stringNum,\n          };\n    }\n\n    if (typeof serialized === 'string') {\n      // Enum types use Enum literals.\n      if (isEnumType(type)) {\n        return {\n          kind: Kind.ENUM,\n          value: serialized,\n        };\n      } // ID types can use Int literals.\n\n      if (type === GraphQLID && integerStringRegExp.test(serialized)) {\n        return {\n          kind: Kind.INT,\n          value: serialized,\n        };\n      }\n\n      return {\n        kind: Kind.STRING,\n        value: serialized,\n      };\n    }\n\n    throw new TypeError(`Cannot convert value to AST: ${inspect(serialized)}.`);\n  }\n  /* c8 ignore next 3 */\n  // Not reachable, all possible types have been considered.\n\n  false || invariant(false, 'Unexpected input type: ' + inspect(type));\n}\n/**\n * IntValue:\n *   - NegativeSign? 0\n *   - NegativeSign? NonZeroDigit ( Digit+ )?\n */\n\nconst integerStringRegExp = /^-?(?:0|[1-9][0-9]*)$/;\n&/utilities/introspectionFromSchema.mjs\u0004\u000eimport { invariant } from '../jsutils/invariant.mjs';\nimport { parse } from '../language/parser.mjs';\nimport { executeSync } from '../execution/execute.mjs';\nimport { getIntrospectionQuery } from './getIntrospectionQuery.mjs';\n/**\n * Build an IntrospectionQuery from a GraphQLSchema\n *\n * IntrospectionQuery is useful for utilities that care about type and field\n * relationships, but do not need to traverse through those relationships.\n *\n * This is the inverse of buildClientSchema. The primary use case is outside\n * of the server context, for instance when doing schema comparisons.\n */\n\nexport function introspectionFromSchema(schema, options) {\n  const optionsWithDefaults = {\n    specifiedByUrl: true,\n    directiveIsRepeatable: true,\n    schemaDescription: true,\n    inputValueDeprecation: true,\n    ...options,\n  };\n  const document = parse(getIntrospectionQuery(optionsWithDefaults));\n  const result = executeSync({\n    schema,\n    document,\n  });\n  (!result.errors && result.data) || invariant(false);\n  return result.data;\n}\n/jsutils/Maybe.jsQ'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\n/jsutils/promiseReduce.mjs\u0002vimport { isPromise } from './isPromise.mjs';\n\n/**\n * Similar to Array.prototype.reduce(), however the reducing callback may return\n * a Promise, in which case reduction will continue after each promise resolves.\n *\n * If the callback does not return a Promise, then this function will also not\n * return a Promise.\n */\nexport function promiseReduce(values, callbackFn, initialValue) {\n  let accumulator = initialValue;\n\n  for (const value of values) {\n    accumulator = isPromise(accumulator)\n      ? accumulator.then((resolved) => callbackFn(resolved, value))\n      : callbackFn(accumulator, value);\n  }\n\n  return accumulator;\n}\n/jsutils/isAsyncIterable.d.ts/**\n * Returns true if the provided object implements the AsyncIterator protocol via\n * implementing a `Symbol.asyncIterator` method.\n */\nexport declare function isAsyncIterable(\n  maybeAsyncIterable: any,\n): maybeAsyncIterable is AsyncIterable<unknown>;\n)/validation/rules/KnownDirectivesRule.mjs\u00114import { inspect } from '../../jsutils/inspect.mjs';\nimport { invariant } from '../../jsutils/invariant.mjs';\nimport { GraphQLError } from '../../error/GraphQLError.mjs';\nimport { OperationTypeNode } from '../../language/ast.mjs';\nimport { DirectiveLocation } from '../../language/directiveLocation.mjs';\nimport { Kind } from '../../language/kinds.mjs';\nimport { specifiedDirectives } from '../../type/directives.mjs';\n\n/**\n * Known directives\n *\n * A GraphQL document is only valid if all `@directives` are known by the\n * schema and legally positioned.\n *\n * See https://spec.graphql.org/draft/#sec-Directives-Are-Defined\n */\nexport function KnownDirectivesRule(context) {\n  const locationsMap = Object.create(null);\n  const schema = context.getSchema();\n  const definedDirectives = schema\n    ? schema.getDirectives()\n    : specifiedDirectives;\n\n  for (const directive of definedDirectives) {\n    locationsMap[directive.name] = directive.locations;\n  }\n\n  const astDefinitions = context.getDocument().definitions;\n\n  for (const def of astDefinitions) {\n    if (def.kind === Kind.DIRECTIVE_DEFINITION) {\n      locationsMap[def.name.value] = def.locations.map((name) => name.value);\n    }\n  }\n\n  return {\n    Directive(node, _key, _parent, _path, ancestors) {\n      const name = node.name.value;\n      const locations = locationsMap[name];\n\n      if (!locations) {\n        context.reportError(\n          new GraphQLError(`Unknown directive \"@${name}\".`, {\n            nodes: node,\n          }),\n        );\n        return;\n      }\n\n      const candidateLocation = getDirectiveLocationForASTPath(ancestors);\n\n      if (candidateLocation && !locations.includes(candidateLocation)) {\n        context.reportError(\n          new GraphQLError(\n            `Directive \"@${name}\" may not be used on ${candidateLocation}.`,\n            {\n              nodes: node,\n            },\n          ),\n        );\n      }\n    },\n  };\n}\n\nfunction getDirectiveLocationForASTPath(ancestors) {\n  const appliedTo = ancestors[ancestors.length - 1];\n  'kind' in appliedTo || invariant(false);\n\n  switch (appliedTo.kind) {\n    case Kind.OPERATION_DEFINITION:\n      return getDirectiveLocationForOperation(appliedTo.operation);\n\n    case Kind.FIELD:\n      return DirectiveLocation.FIELD;\n\n    case Kind.FRAGMENT_SPREAD:\n      return DirectiveLocation.FRAGMENT_SPREAD;\n\n    case Kind.INLINE_FRAGMENT:\n      return DirectiveLocation.INLINE_FRAGMENT;\n\n    case Kind.FRAGMENT_DEFINITION:\n      return DirectiveLocation.FRAGMENT_DEFINITION;\n\n    case Kind.VARIABLE_DEFINITION:\n      return DirectiveLocation.VARIABLE_DEFINITION;\n\n    case Kind.SCHEMA_DEFINITION:\n    case Kind.SCHEMA_EXTENSION:\n      return DirectiveLocation.SCHEMA;\n\n    case Kind.SCALAR_TYPE_DEFINITION:\n    case Kind.SCALAR_TYPE_EXTENSION:\n      return DirectiveLocation.SCALAR;\n\n    case Kind.OBJECT_TYPE_DEFINITION:\n    case Kind.OBJECT_TYPE_EXTENSION:\n      return DirectiveLocation.OBJECT;\n\n    case Kind.FIELD_DEFINITION:\n      return DirectiveLocation.FIELD_DEFINITION;\n\n    case Kind.INTERFACE_TYPE_DEFINITION:\n    case Kind.INTERFACE_TYPE_EXTENSION:\n      return DirectiveLocation.INTERFACE;\n\n    case Kind.UNION_TYPE_DEFINITION:\n    case Kind.UNION_TYPE_EXTENSION:\n      return DirectiveLocation.UNION;\n\n    case Kind.ENUM_TYPE_DEFINITION:\n    case Kind.ENUM_TYPE_EXTENSION:\n      return DirectiveLocation.ENUM;\n\n    case Kind.ENUM_VALUE_DEFINITION:\n      return DirectiveLocation.ENUM_VALUE;\n\n    case Kind.INPUT_OBJECT_TYPE_DEFINITION:\n    case Kind.INPUT_OBJECT_TYPE_EXTENSION:\n      return DirectiveLocation.INPUT_OBJECT;\n\n    case Kind.INPUT_VALUE_DEFINITION: {\n      const parentNode = ancestors[ancestors.length - 3];\n      'kind' in parentNode || invariant(false);\n      return parentNode.kind === Kind.INPUT_OBJECT_TYPE_DEFINITION\n        ? DirectiveLocation.INPUT_FIELD_DEFINITION\n        : DirectiveLocation.ARGUMENT_DEFINITION;\n    }\n    // Not reachable, all possible types have been considered.\n\n    /* c8 ignore next */\n\n    default:\n      false || invariant(false, 'Unexpected kind: ' + inspect(appliedTo.kind));\n  }\n}\n\nfunction getDirectiveLocationForOperation(operation) {\n  switch (operation) {\n    case OperationTypeNode.QUERY:\n      return DirectiveLocation.QUERY;\n\n    case OperationTypeNode.MUTATION:\n      return DirectiveLocation.MUTATION;\n\n    case OperationTypeNode.SUBSCRIPTION:\n      return DirectiveLocation.SUBSCRIPTION;\n  }\n}\n/execution/index.js\u0006r'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nObject.defineProperty(exports, 'createSourceEventStream', {\n  enumerable: true,\n  get: function () {\n    return _subscribe.createSourceEventStream;\n  },\n});\nObject.defineProperty(exports, 'defaultFieldResolver', {\n  enumerable: true,\n  get: function () {\n    return _execute.defaultFieldResolver;\n  },\n});\nObject.defineProperty(exports, 'defaultTypeResolver', {\n  enumerable: true,\n  get: function () {\n    return _execute.defaultTypeResolver;\n  },\n});\nObject.defineProperty(exports, 'execute', {\n  enumerable: true,\n  get: function () {\n    return _execute.execute;\n  },\n});\nObject.defineProperty(exports, 'executeSync', {\n  enumerable: true,\n  get: function () {\n    return _execute.executeSync;\n  },\n});\nObject.defineProperty(exports, 'getArgumentValues', {\n  enumerable: true,\n  get: function () {\n    return _values.getArgumentValues;\n  },\n});\nObject.defineProperty(exports, 'getDirectiveValues', {\n  enumerable: true,\n  get: function () {\n    return _values.getDirectiveValues;\n  },\n});\nObject.defineProperty(exports, 'getVariableValues', {\n  enumerable: true,\n  get: function () {\n    return _values.getVariableValues;\n  },\n});\nObject.defineProperty(exports, 'responsePathAsArray', {\n  enumerable: true,\n  get: function () {\n    return _Path.pathToArray;\n  },\n});\nObject.defineProperty(exports, 'subscribe', {\n  enumerable: true,\n  get: function () {\n    return _subscribe.subscribe;\n  },\n});\n\nvar _Path = require('../jsutils/Path.js');\n\nvar _execute = require('./execute.js');\n\nvar _subscribe = require('./subscribe.js');\n\nvar _values = require('./values.js');\n/language/printString.d.ts/**\n * Prints a string as a GraphQL StringValue literal. Replaces control characters\n * and excluded characters (\" U+0022 and \\\\ U+005C) with escape sequences.\n */\nexport declare function printString(str: string): string;\n/language/location.d.ts\u0001import type { Source } from './source';\n/**\n * Represents a location in a Source.\n */\nexport interface SourceLocation {\n  readonly line: number;\n  readonly column: number;\n}\n/**\n * Takes a Source and a UTF-8 character offset, and returns the corresponding\n * line and column as a SourceLocation.\n */\nexport declare function getLocation(\n  source: Source,\n  position: number,\n): SourceLocation;\n/language/parser.mjsŗimport { syntaxError } from '../error/syntaxError.mjs';\nimport { Location, OperationTypeNode } from './ast.mjs';\nimport { DirectiveLocation } from './directiveLocation.mjs';\nimport { Kind } from './kinds.mjs';\nimport { isPunctuatorTokenKind, Lexer } from './lexer.mjs';\nimport { isSource, Source } from './source.mjs';\nimport { TokenKind } from './tokenKind.mjs';\n/**\n * Configuration options to control parser behavior\n */\n\n/**\n * Given a GraphQL source, parses it into a Document.\n * Throws GraphQLError if a syntax error is encountered.\n */\nexport function parse(source, options) {\n  const parser = new Parser(source, options);\n  return parser.parseDocument();\n}\n/**\n * Given a string containing a GraphQL value (ex. `[42]`), parse the AST for\n * that value.\n * Throws GraphQLError if a syntax error is encountered.\n *\n * This is useful within tools that operate upon GraphQL Values directly and\n * in isolation of complete GraphQL documents.\n *\n * Consider providing the results to the utility function: valueFromAST().\n */\n\nexport function parseValue(source, options) {\n  const parser = new Parser(source, options);\n  parser.expectToken(TokenKind.SOF);\n  const value = parser.parseValueLiteral(false);\n  parser.expectToken(TokenKind.EOF);\n  return value;\n}\n/**\n * Similar to parseValue(), but raises a parse error if it encounters a\n * variable. The return type will be a constant value.\n */\n\nexport function parseConstValue(source, options) {\n  const parser = new Parser(source, options);\n  parser.expectToken(TokenKind.SOF);\n  const value = parser.parseConstValueLiteral();\n  parser.expectToken(TokenKind.EOF);\n  return value;\n}\n/**\n * Given a string containing a GraphQL Type (ex. `[Int!]`), parse the AST for\n * that type.\n * Throws GraphQLError if a syntax error is encountered.\n *\n * This is useful within tools that operate upon GraphQL Types directly and\n * in isolation of complete GraphQL documents.\n *\n * Consider providing the results to the utility function: typeFromAST().\n */\n\nexport function parseType(source, options) {\n  const parser = new Parser(source, options);\n  parser.expectToken(TokenKind.SOF);\n  const type = parser.parseTypeReference();\n  parser.expectToken(TokenKind.EOF);\n  return type;\n}\n/**\n * This class is exported only to assist people in implementing their own parsers\n * without duplicating too much code and should be used only as last resort for cases\n * such as experimental syntax or if certain features could not be contributed upstream.\n *\n * It is still part of the internal API and is versioned, so any changes to it are never\n * considered breaking changes. If you still need to support multiple versions of the\n * library, please use the `versionInfo` variable for version detection.\n *\n * @internal\n */\n\nexport class Parser {\n  constructor(source, options = {}) {\n    const sourceObj = isSource(source) ? source : new Source(source);\n    this._lexer = new Lexer(sourceObj);\n    this._options = options;\n    this._tokenCounter = 0;\n  }\n  /**\n   * Converts a name lex token into a name parse node.\n   */\n\n  parseName() {\n    const token = this.expectToken(TokenKind.NAME);\n    return this.node(token, {\n      kind: Kind.NAME,\n      value: token.value,\n    });\n  } // Implements the parsing rules in the Document section.\n\n  /**\n   * Document : Definition+\n   */\n\n  parseDocument() {\n    return this.node(this._lexer.token, {\n      kind: Kind.DOCUMENT,\n      definitions: this.many(\n        TokenKind.SOF,\n        this.parseDefinition,\n        TokenKind.EOF,\n      ),\n    });\n  }\n  /**\n   * Definition :\n   *   - ExecutableDefinition\n   *   - TypeSystemDefinition\n   *   - TypeSystemExtension\n   *\n   * ExecutableDefinition :\n   *   - OperationDefinition\n   *   - FragmentDefinition\n   *\n   * TypeSystemDefinition :\n   *   - SchemaDefinition\n   *   - TypeDefinition\n   *   - DirectiveDefinition\n   *\n   * TypeDefinition :\n   *   - ScalarTypeDefinition\n   *   - ObjectTypeDefinition\n   *   - InterfaceTypeDefinition\n   *   - UnionTypeDefinition\n   *   - EnumTypeDefinition\n   *   - InputObjectTypeDefinition\n   */\n\n  parseDefinition() {\n    if (this.peek(TokenKind.BRACE_L)) {\n      return this.parseOperationDefinition();\n    } // Many definitions begin with a description and require a lookahead.\n\n    const hasDescription = this.peekDescription();\n    const keywordToken = hasDescription\n      ? this._lexer.lookahead()\n      : this._lexer.token;\n\n    if (keywordToken.kind === TokenKind.NAME) {\n      switch (keywordToken.value) {\n        case 'schema':\n          return this.parseSchemaDefinition();\n\n        case 'scalar':\n          return this.parseScalarTypeDefinition();\n\n        case 'type':\n          return this.parseObjectTypeDefinition();\n\n        case 'interface':\n          return this.parseInterfaceTypeDefinition();\n\n        case 'union':\n          return this.parseUnionTypeDefinition();\n\n        case 'enum':\n          return this.parseEnumTypeDefinition();\n\n        case 'input':\n          return this.parseInputObjectTypeDefinition();\n\n        case 'directive':\n          return this.parseDirectiveDefinition();\n      }\n\n      if (hasDescription) {\n        throw syntaxError(\n          this._lexer.source,\n          this._lexer.token.start,\n          'Unexpected description, descriptions are supported only on type definitions.',\n        );\n      }\n\n      switch (keywordToken.value) {\n        case 'query':\n        case 'mutation':\n        case 'subscription':\n          return this.parseOperationDefinition();\n\n        case 'fragment':\n          return this.parseFragmentDefinition();\n\n        case 'extend':\n          return this.parseTypeSystemExtension();\n      }\n    }\n\n    throw this.unexpected(keywordToken);\n  } // Implements the parsing rules in the Operations section.\n\n  /**\n   * OperationDefinition :\n   *  - SelectionSet\n   *  - OperationType Name? VariableDefinitions? Directives? SelectionSet\n   */\n\n  parseOperationDefinition() {\n    const start = this._lexer.token;\n\n    if (this.peek(TokenKind.BRACE_L)) {\n      return this.node(start, {\n        kind: Kind.OPERATION_DEFINITION,\n        operation: OperationTypeNode.QUERY,\n        name: undefined,\n        variableDefinitions: [],\n        directives: [],\n        selectionSet: this.parseSelectionSet(),\n      });\n    }\n\n    const operation = this.parseOperationType();\n    let name;\n\n    if (this.peek(TokenKind.NAME)) {\n      name = this.parseName();\n    }\n\n    return this.node(start, {\n      kind: Kind.OPERATION_DEFINITION,\n      operation,\n      name,\n      variableDefinitions: this.parseVariableDefinitions(),\n      directives: this.parseDirectives(false),\n      selectionSet: this.parseSelectionSet(),\n    });\n  }\n  /**\n   * OperationType : one of query mutation subscription\n   */\n\n  parseOperationType() {\n    const operationToken = this.expectToken(TokenKind.NAME);\n\n    switch (operationToken.value) {\n      case 'query':\n        return OperationTypeNode.QUERY;\n\n      case 'mutation':\n        return OperationTypeNode.MUTATION;\n\n      case 'subscription':\n        return OperationTypeNode.SUBSCRIPTION;\n    }\n\n    throw this.unexpected(operationToken);\n  }\n  /**\n   * VariableDefinitions : ( VariableDefinition+ )\n   */\n\n  parseVariableDefinitions() {\n    return this.optionalMany(\n      TokenKind.PAREN_L,\n      this.parseVariableDefinition,\n      TokenKind.PAREN_R,\n    );\n  }\n  /**\n   * VariableDefinition : Variable : Type DefaultValue? Directives[Const]?\n   */\n\n  parseVariableDefinition() {\n    return this.node(this._lexer.token, {\n      kind: Kind.VARIABLE_DEFINITION,\n      variable: this.parseVariable(),\n      type: (this.expectToken(TokenKind.COLON), this.parseTypeReference()),\n      defaultValue: this.expectOptionalToken(TokenKind.EQUALS)\n        ? this.parseConstValueLiteral()\n        : undefined,\n      directives: this.parseConstDirectives(),\n    });\n  }\n  /**\n   * Variable : $ Name\n   */\n\n  parseVariable() {\n    const start = this._lexer.token;\n    this.expectToken(TokenKind.DOLLAR);\n    return this.node(start, {\n      kind: Kind.VARIABLE,\n      name: this.parseName(),\n    });\n  }\n  /**\n   * ```\n   * SelectionSet : { Selection+ }\n   * ```\n   */\n\n  parseSelectionSet() {\n    return this.node(this._lexer.token, {\n      kind: Kind.SELECTION_SET,\n      selections: this.many(\n        TokenKind.BRACE_L,\n        this.parseSelection,\n        TokenKind.BRACE_R,\n      ),\n    });\n  }\n  /**\n   * Selection :\n   *   - Field\n   *   - FragmentSpread\n   *   - InlineFragment\n   */\n\n  parseSelection() {\n    return this.peek(TokenKind.SPREAD)\n      ? this.parseFragment()\n      : this.parseField();\n  }\n  /**\n   * Field : Alias? Name Arguments? Directives? SelectionSet?\n   *\n   * Alias : Name :\n   */\n\n  parseField() {\n    const start = this._lexer.token;\n    const nameOrAlias = this.parseName();\n    let alias;\n    let name;\n\n    if (this.expectOptionalToken(TokenKind.COLON)) {\n      alias = nameOrAlias;\n      name = this.parseName();\n    } else {\n      name = nameOrAlias;\n    }\n\n    return this.node(start, {\n      kind: Kind.FIELD,\n      alias,\n      name,\n      arguments: this.parseArguments(false),\n      directives: this.parseDirectives(false),\n      selectionSet: this.peek(TokenKind.BRACE_L)\n        ? this.parseSelectionSet()\n        : undefined,\n    });\n  }\n  /**\n   * Arguments[Const] : ( Argument[?Const]+ )\n   */\n\n  parseArguments(isConst) {\n    const item = isConst ? this.parseConstArgument : this.parseArgument;\n    return this.optionalMany(TokenKind.PAREN_L, item, TokenKind.PAREN_R);\n  }\n  /**\n   * Argument[Const] : Name : Value[?Const]\n   */\n\n  parseArgument(isConst = false) {\n    const start = this._lexer.token;\n    const name = this.parseName();\n    this.expectToken(TokenKind.COLON);\n    return this.node(start, {\n      kind: Kind.ARGUMENT,\n      name,\n      value: this.parseValueLiteral(isConst),\n    });\n  }\n\n  parseConstArgument() {\n    return this.parseArgument(true);\n  } // Implements the parsing rules in the Fragments section.\n\n  /**\n   * Corresponds to both FragmentSpread and InlineFragment in the spec.\n   *\n   * FragmentSpread : ... FragmentName Directives?\n   *\n   * InlineFragment : ... TypeCondition? Directives? SelectionSet\n   */\n\n  parseFragment() {\n    const start = this._lexer.token;\n    this.expectToken(TokenKind.SPREAD);\n    const hasTypeCondition = this.expectOptionalKeyword('on');\n\n    if (!hasTypeCondition && this.peek(TokenKind.NAME)) {\n      return this.node(start, {\n        kind: Kind.FRAGMENT_SPREAD,\n        name: this.parseFragmentName(),\n        directives: this.parseDirectives(false),\n      });\n    }\n\n    return this.node(start, {\n      kind: Kind.INLINE_FRAGMENT,\n      typeCondition: hasTypeCondition ? this.parseNamedType() : undefined,\n      directives: this.parseDirectives(false),\n      selectionSet: this.parseSelectionSet(),\n    });\n  }\n  /**\n   * FragmentDefinition :\n   *   - fragment FragmentName on TypeCondition Directives? SelectionSet\n   *\n   * TypeCondition : NamedType\n   */\n\n  parseFragmentDefinition() {\n    const start = this._lexer.token;\n    this.expectKeyword('fragment'); // Legacy support for defining variables within fragments changes\n    // the grammar of FragmentDefinition:\n    //   - fragment FragmentName VariableDefinitions? on TypeCondition Directives? SelectionSet\n\n    if (this._options.allowLegacyFragmentVariables === true) {\n      return this.node(start, {\n        kind: Kind.FRAGMENT_DEFINITION,\n        name: this.parseFragmentName(),\n        variableDefinitions: this.parseVariableDefinitions(),\n        typeCondition: (this.expectKeyword('on'), this.parseNamedType()),\n        directives: this.parseDirectives(false),\n        selectionSet: this.parseSelectionSet(),\n      });\n    }\n\n    return this.node(start, {\n      kind: Kind.FRAGMENT_DEFINITION,\n      name: this.parseFragmentName(),\n      typeCondition: (this.expectKeyword('on'), this.parseNamedType()),\n      directives: this.parseDirectives(false),\n      selectionSet: this.parseSelectionSet(),\n    });\n  }\n  /**\n   * FragmentName : Name but not `on`\n   */\n\n  parseFragmentName() {\n    if (this._lexer.token.value === 'on') {\n      throw this.unexpected();\n    }\n\n    return this.parseName();\n  } // Implements the parsing rules in the Values section.\n\n  /**\n   * Value[Const] :\n   *   - [~Const] Variable\n   *   - IntValue\n   *   - FloatValue\n   *   - StringValue\n   *   - BooleanValue\n   *   - NullValue\n   *   - EnumValue\n   *   - ListValue[?Const]\n   *   - ObjectValue[?Const]\n   *\n   * BooleanValue : one of `true` `false`\n   *\n   * NullValue : `null`\n   *\n   * EnumValue : Name but not `true`, `false` or `null`\n   */\n\n  parseValueLiteral(isConst) {\n    const token = this._lexer.token;\n\n    switch (token.kind) {\n      case TokenKind.BRACKET_L:\n        return this.parseList(isConst);\n\n      case TokenKind.BRACE_L:\n        return this.parseObject(isConst);\n\n      case TokenKind.INT:\n        this.advanceLexer();\n        return this.node(token, {\n          kind: Kind.INT,\n          value: token.value,\n        });\n\n      case TokenKind.FLOAT:\n        this.advanceLexer();\n        return this.node(token, {\n          kind: Kind.FLOAT,\n          value: token.value,\n        });\n\n      case TokenKind.STRING:\n      case TokenKind.BLOCK_STRING:\n        return this.parseStringLiteral();\n\n      case TokenKind.NAME:\n        this.advanceLexer();\n\n        switch (token.value) {\n          case 'true':\n            return this.node(token, {\n              kind: Kind.BOOLEAN,\n              value: true,\n            });\n\n          case 'false':\n            return this.node(token, {\n              kind: Kind.BOOLEAN,\n              value: false,\n            });\n\n          case 'null':\n            return this.node(token, {\n              kind: Kind.NULL,\n            });\n\n          default:\n            return this.node(token, {\n              kind: Kind.ENUM,\n              value: token.value,\n            });\n        }\n\n      case TokenKind.DOLLAR:\n        if (isConst) {\n          this.expectToken(TokenKind.DOLLAR);\n\n          if (this._lexer.token.kind === TokenKind.NAME) {\n            const varName = this._lexer.token.value;\n            throw syntaxError(\n              this._lexer.source,\n              token.start,\n              `Unexpected variable \"$${varName}\" in constant value.`,\n            );\n          } else {\n            throw this.unexpected(token);\n          }\n        }\n\n        return this.parseVariable();\n\n      default:\n        throw this.unexpected();\n    }\n  }\n\n  parseConstValueLiteral() {\n    return this.parseValueLiteral(true);\n  }\n\n  parseStringLiteral() {\n    const token = this._lexer.token;\n    this.advanceLexer();\n    return this.node(token, {\n      kind: Kind.STRING,\n      value: token.value,\n      block: token.kind === TokenKind.BLOCK_STRING,\n    });\n  }\n  /**\n   * ListValue[Const] :\n   *   - [ ]\n   *   - [ Value[?Const]+ ]\n   */\n\n  parseList(isConst) {\n    const item = () => this.parseValueLiteral(isConst);\n\n    return this.node(this._lexer.token, {\n      kind: Kind.LIST,\n      values: this.any(TokenKind.BRACKET_L, item, TokenKind.BRACKET_R),\n    });\n  }\n  /**\n   * ```\n   * ObjectValue[Const] :\n   *   - { }\n   *   - { ObjectField[?Const]+ }\n   * ```\n   */\n\n  parseObject(isConst) {\n    const item = () => this.parseObjectField(isConst);\n\n    return this.node(this._lexer.token, {\n      kind: Kind.OBJECT,\n      fields: this.any(TokenKind.BRACE_L, item, TokenKind.BRACE_R),\n    });\n  }\n  /**\n   * ObjectField[Const] : Name : Value[?Const]\n   */\n\n  parseObjectField(isConst) {\n    const start = this._lexer.token;\n    const name = this.parseName();\n    this.expectToken(TokenKind.COLON);\n    return this.node(start, {\n      kind: Kind.OBJECT_FIELD,\n      name,\n      value: this.parseValueLiteral(isConst),\n    });\n  } // Implements the parsing rules in the Directives section.\n\n  /**\n   * Directives[Const] : Directive[?Const]+\n   */\n\n  parseDirectives(isConst) {\n    const directives = [];\n\n    while (this.peek(TokenKind.AT)) {\n      directives.push(this.parseDirective(isConst));\n    }\n\n    return directives;\n  }\n\n  parseConstDirectives() {\n    return this.parseDirectives(true);\n  }\n  /**\n   * ```\n   * Directive[Const] : @ Name Arguments[?Const]?\n   * ```\n   */\n\n  parseDirective(isConst) {\n    const start = this._lexer.token;\n    this.expectToken(TokenKind.AT);\n    return this.node(start, {\n      kind: Kind.DIRECTIVE,\n      name: this.parseName(),\n      arguments: this.parseArguments(isConst),\n    });\n  } // Implements the parsing rules in the Types section.\n\n  /**\n   * Type :\n   *   - NamedType\n   *   - ListType\n   *   - NonNullType\n   */\n\n  parseTypeReference() {\n    const start = this._lexer.token;\n    let type;\n\n    if (this.expectOptionalToken(TokenKind.BRACKET_L)) {\n      const innerType = this.parseTypeReference();\n      this.expectToken(TokenKind.BRACKET_R);\n      type = this.node(start, {\n        kind: Kind.LIST_TYPE,\n        type: innerType,\n      });\n    } else {\n      type = this.parseNamedType();\n    }\n\n    if (this.expectOptionalToken(TokenKind.BANG)) {\n      return this.node(start, {\n        kind: Kind.NON_NULL_TYPE,\n        type,\n      });\n    }\n\n    return type;\n  }\n  /**\n   * NamedType : Name\n   */\n\n  parseNamedType() {\n    return this.node(this._lexer.token, {\n      kind: Kind.NAMED_TYPE,\n      name: this.parseName(),\n    });\n  } // Implements the parsing rules in the Type Definition section.\n\n  peekDescription() {\n    return this.peek(TokenKind.STRING) || this.peek(TokenKind.BLOCK_STRING);\n  }\n  /**\n   * Description : StringValue\n   */\n\n  parseDescription() {\n    if (this.peekDescription()) {\n      return this.parseStringLiteral();\n    }\n  }\n  /**\n   * ```\n   * SchemaDefinition : Description? schema Directives[Const]? { OperationTypeDefinition+ }\n   * ```\n   */\n\n  parseSchemaDefinition() {\n    const start = this._lexer.token;\n    const description = this.parseDescription();\n    this.expectKeyword('schema');\n    const directives = this.parseConstDirectives();\n    const operationTypes = this.many(\n      TokenKind.BRACE_L,\n      this.parseOperationTypeDefinition,\n      TokenKind.BRACE_R,\n    );\n    return this.node(start, {\n      kind: Kind.SCHEMA_DEFINITION,\n      description,\n      directives,\n      operationTypes,\n    });\n  }\n  /**\n   * OperationTypeDefinition : OperationType : NamedType\n   */\n\n  parseOperationTypeDefinition() {\n    const start = this._lexer.token;\n    const operation = this.parseOperationType();\n    this.expectToken(TokenKind.COLON);\n    const type = this.parseNamedType();\n    return this.node(start, {\n      kind: Kind.OPERATION_TYPE_DEFINITION,\n      operation,\n      type,\n    });\n  }\n  /**\n   * ScalarTypeDefinition : Description? scalar Name Directives[Const]?\n   */\n\n  parseScalarTypeDefinition() {\n    const start = this._lexer.token;\n    const description = this.parseDescription();\n    this.expectKeyword('scalar');\n    const name = this.parseName();\n    const directives = this.parseConstDirectives();\n    return this.node(start, {\n      kind: Kind.SCALAR_TYPE_DEFINITION,\n      description,\n      name,\n      directives,\n    });\n  }\n  /**\n   * ObjectTypeDefinition :\n   *   Description?\n   *   type Name ImplementsInterfaces? Directives[Const]? FieldsDefinition?\n   */\n\n  parseObjectTypeDefinition() {\n    const start = this._lexer.token;\n    const description = this.parseDescription();\n    this.expectKeyword('type');\n    const name = this.parseName();\n    const interfaces = this.parseImplementsInterfaces();\n    const directives = this.parseConstDirectives();\n    const fields = this.parseFieldsDefinition();\n    return this.node(start, {\n      kind: Kind.OBJECT_TYPE_DEFINITION,\n      description,\n      name,\n      interfaces,\n      directives,\n      fields,\n    });\n  }\n  /**\n   * ImplementsInterfaces :\n   *   - implements `&`? NamedType\n   *   - ImplementsInterfaces & NamedType\n   */\n\n  parseImplementsInterfaces() {\n    return this.expectOptionalKeyword('implements')\n      ? this.delimitedMany(TokenKind.AMP, this.parseNamedType)\n      : [];\n  }\n  /**\n   * ```\n   * FieldsDefinition : { FieldDefinition+ }\n   * ```\n   */\n\n  parseFieldsDefinition() {\n    return this.optionalMany(\n      TokenKind.BRACE_L,\n      this.parseFieldDefinition,\n      TokenKind.BRACE_R,\n    );\n  }\n  /**\n   * FieldDefinition :\n   *   - Description? Name ArgumentsDefinition? : Type Directives[Const]?\n   */\n\n  parseFieldDefinition() {\n    const start = this._lexer.token;\n    const description = this.parseDescription();\n    const name = this.parseName();\n    const args = this.parseArgumentDefs();\n    this.expectToken(TokenKind.COLON);\n    const type = this.parseTypeReference();\n    const directives = this.parseConstDirectives();\n    return this.node(start, {\n      kind: Kind.FIELD_DEFINITION,\n      description,\n      name,\n      arguments: args,\n      type,\n      directives,\n    });\n  }\n  /**\n   * ArgumentsDefinition : ( InputValueDefinition+ )\n   */\n\n  parseArgumentDefs() {\n    return this.optionalMany(\n      TokenKind.PAREN_L,\n      this.parseInputValueDef,\n      TokenKind.PAREN_R,\n    );\n  }\n  /**\n   * InputValueDefinition :\n   *   - Description? Name : Type DefaultValue? Directives[Const]?\n   */\n\n  parseInputValueDef() {\n    const start = this._lexer.token;\n    const description = this.parseDescription();\n    const name = this.parseName();\n    this.expectToken(TokenKind.COLON);\n    const type = this.parseTypeReference();\n    let defaultValue;\n\n    if (this.expectOptionalToken(TokenKind.EQUALS)) {\n      defaultValue = this.parseConstValueLiteral();\n    }\n\n    const directives = this.parseConstDirectives();\n    return this.node(start, {\n      kind: Kind.INPUT_VALUE_DEFINITION,\n      description,\n      name,\n      type,\n      defaultValue,\n      directives,\n    });\n  }\n  /**\n   * InterfaceTypeDefinition :\n   *   - Description? interface Name Directives[Const]? FieldsDefinition?\n   */\n\n  parseInterfaceTypeDefinition() {\n    const start = this._lexer.token;\n    const description = this.parseDescription();\n    this.expectKeyword('interface');\n    const name = this.parseName();\n    const interfaces = this.parseImplementsInterfaces();\n    const directives = this.parseConstDirectives();\n    const fields = this.parseFieldsDefinition();\n    return this.node(start, {\n      kind: Kind.INTERFACE_TYPE_DEFINITION,\n      description,\n      name,\n      interfaces,\n      directives,\n      fields,\n    });\n  }\n  /**\n   * UnionTypeDefinition :\n   *   - Description? union Name Directives[Const]? UnionMemberTypes?\n   */\n\n  parseUnionTypeDefinition() {\n    const start = this._lexer.token;\n    const description = this.parseDescription();\n    this.expectKeyword('union');\n    const name = this.parseName();\n    const directives = this.parseConstDirectives();\n    const types = this.parseUnionMemberTypes();\n    return this.node(start, {\n      kind: Kind.UNION_TYPE_DEFINITION,\n      description,\n      name,\n      directives,\n      types,\n    });\n  }\n  /**\n   * UnionMemberTypes :\n   *   - = `|`? NamedType\n   *   - UnionMemberTypes | NamedType\n   */\n\n  parseUnionMemberTypes() {\n    return this.expectOptionalToken(TokenKind.EQUALS)\n      ? this.delimitedMany(TokenKind.PIPE, this.parseNamedType)\n      : [];\n  }\n  /**\n   * EnumTypeDefinition :\n   *   - Description? enum Name Directives[Const]? EnumValuesDefinition?\n   */\n\n  parseEnumTypeDefinition() {\n    const start = this._lexer.token;\n    const description = this.parseDescription();\n    this.expectKeyword('enum');\n    const name = this.parseName();\n    const directives = this.parseConstDirectives();\n    const values = this.parseEnumValuesDefinition();\n    return this.node(start, {\n      kind: Kind.ENUM_TYPE_DEFINITION,\n      description,\n      name,\n      directives,\n      values,\n    });\n  }\n  /**\n   * ```\n   * EnumValuesDefinition : { EnumValueDefinition+ }\n   * ```\n   */\n\n  parseEnumValuesDefinition() {\n    return this.optionalMany(\n      TokenKind.BRACE_L,\n      this.parseEnumValueDefinition,\n      TokenKind.BRACE_R,\n    );\n  }\n  /**\n   * EnumValueDefinition : Description? EnumValue Directives[Const]?\n   */\n\n  parseEnumValueDefinition() {\n    const start = this._lexer.token;\n    const description = this.parseDescription();\n    const name = this.parseEnumValueName();\n    const directives = this.parseConstDirectives();\n    return this.node(start, {\n      kind: Kind.ENUM_VALUE_DEFINITION,\n      description,\n      name,\n      directives,\n    });\n  }\n  /**\n   * EnumValue : Name but not `true`, `false` or `null`\n   */\n\n  parseEnumValueName() {\n    if (\n      this._lexer.token.value === 'true' ||\n      this._lexer.token.value === 'false' ||\n      this._lexer.token.value === 'null'\n    ) {\n      throw syntaxError(\n        this._lexer.source,\n        this._lexer.token.start,\n        `${getTokenDesc(\n          this._lexer.token,\n        )} is reserved and cannot be used for an enum value.`,\n      );\n    }\n\n    return this.parseName();\n  }\n  /**\n   * InputObjectTypeDefinition :\n   *   - Description? input Name Directives[Const]? InputFieldsDefinition?\n   */\n\n  parseInputObjectTypeDefinition() {\n    const start = this._lexer.token;\n    const description = this.parseDescription();\n    this.expectKeyword('input');\n    const name = this.parseName();\n    const directives = this.parseConstDirectives();\n    const fields = this.parseInputFieldsDefinition();\n    return this.node(start, {\n      kind: Kind.INPUT_OBJECT_TYPE_DEFINITION,\n      description,\n      name,\n      directives,\n      fields,\n    });\n  }\n  /**\n   * ```\n   * InputFieldsDefinition : { InputValueDefinition+ }\n   * ```\n   */\n\n  parseInputFieldsDefinition() {\n    return this.optionalMany(\n      TokenKind.BRACE_L,\n      this.parseInputValueDef,\n      TokenKind.BRACE_R,\n    );\n  }\n  /**\n   * TypeSystemExtension :\n   *   - SchemaExtension\n   *   - TypeExtension\n   *\n   * TypeExtension :\n   *   - ScalarTypeExtension\n   *   - ObjectTypeExtension\n   *   - InterfaceTypeExtension\n   *   - UnionTypeExtension\n   *   - EnumTypeExtension\n   *   - InputObjectTypeDefinition\n   */\n\n  parseTypeSystemExtension() {\n    const keywordToken = this._lexer.lookahead();\n\n    if (keywordToken.kind === TokenKind.NAME) {\n      switch (keywordToken.value) {\n        case 'schema':\n          return this.parseSchemaExtension();\n\n        case 'scalar':\n          return this.parseScalarTypeExtension();\n\n        case 'type':\n          return this.parseObjectTypeExtension();\n\n        case 'interface':\n          return this.parseInterfaceTypeExtension();\n\n        case 'union':\n          return this.parseUnionTypeExtension();\n\n        case 'enum':\n          return this.parseEnumTypeExtension();\n\n        case 'input':\n          return this.parseInputObjectTypeExtension();\n      }\n    }\n\n    throw this.unexpected(keywordToken);\n  }\n  /**\n   * ```\n   * SchemaExtension :\n   *  - extend schema Directives[Const]? { OperationTypeDefinition+ }\n   *  - extend schema Directives[Const]\n   * ```\n   */\n\n  parseSchemaExtension() {\n    const start = this._lexer.token;\n    this.expectKeyword('extend');\n    this.expectKeyword('schema');\n    const directives = this.parseConstDirectives();\n    const operationTypes = this.optionalMany(\n      TokenKind.BRACE_L,\n      this.parseOperationTypeDefinition,\n      TokenKind.BRACE_R,\n    );\n\n    if (directives.length === 0 && operationTypes.length === 0) {\n      throw this.unexpected();\n    }\n\n    return this.node(start, {\n      kind: Kind.SCHEMA_EXTENSION,\n      directives,\n      operationTypes,\n    });\n  }\n  /**\n   * ScalarTypeExtension :\n   *   - extend scalar Name Directives[Const]\n   */\n\n  parseScalarTypeExtension() {\n    const start = this._lexer.token;\n    this.expectKeyword('extend');\n    this.expectKeyword('scalar');\n    const name = this.parseName();\n    const directives = this.parseConstDirectives();\n\n    if (directives.length === 0) {\n      throw this.unexpected();\n    }\n\n    return this.node(start, {\n      kind: Kind.SCALAR_TYPE_EXTENSION,\n      name,\n      directives,\n    });\n  }\n  /**\n   * ObjectTypeExtension :\n   *  - extend type Name ImplementsInterfaces? Directives[Const]? FieldsDefinition\n   *  - extend type Name ImplementsInterfaces? Directives[Const]\n   *  - extend type Name ImplementsInterfaces\n   */\n\n  parseObjectTypeExtension() {\n    const start = this._lexer.token;\n    this.expectKeyword('extend');\n    this.expectKeyword('type');\n    const name = this.parseName();\n    const interfaces = this.parseImplementsInterfaces();\n    const directives = this.parseConstDirectives();\n    const fields = this.parseFieldsDefinition();\n\n    if (\n      interfaces.length === 0 &&\n      directives.length === 0 &&\n      fields.length === 0\n    ) {\n      throw this.unexpected();\n    }\n\n    return this.node(start, {\n      kind: Kind.OBJECT_TYPE_EXTENSION,\n      name,\n      interfaces,\n      directives,\n      fields,\n    });\n  }\n  /**\n   * InterfaceTypeExtension :\n   *  - extend interface Name ImplementsInterfaces? Directives[Const]? FieldsDefinition\n   *  - extend interface Name ImplementsInterfaces? Directives[Const]\n   *  - extend interface Name ImplementsInterfaces\n   */\n\n  parseInterfaceTypeExtension() {\n    const start = this._lexer.token;\n    this.expectKeyword('extend');\n    this.expectKeyword('interface');\n    const name = this.parseName();\n    const interfaces = this.parseImplementsInterfaces();\n    const directives = this.parseConstDirectives();\n    const fields = this.parseFieldsDefinition();\n\n    if (\n      interfaces.length === 0 &&\n      directives.length === 0 &&\n      fields.length === 0\n    ) {\n      throw this.unexpected();\n    }\n\n    return this.node(start, {\n      kind: Kind.INTERFACE_TYPE_EXTENSION,\n      name,\n      interfaces,\n      directives,\n      fields,\n    });\n  }\n  /**\n   * UnionTypeExtension :\n   *   - extend union Name Directives[Const]? UnionMemberTypes\n   *   - extend union Name Directives[Const]\n   */\n\n  parseUnionTypeExtension() {\n    const start = this._lexer.token;\n    this.expectKeyword('extend');\n    this.expectKeyword('union');\n    const name = this.parseName();\n    const directives = this.parseConstDirectives();\n    const types = this.parseUnionMemberTypes();\n\n    if (directives.length === 0 && types.length === 0) {\n      throw this.unexpected();\n    }\n\n    return this.node(start, {\n      kind: Kind.UNION_TYPE_EXTENSION,\n      name,\n      directives,\n      types,\n    });\n  }\n  /**\n   * EnumTypeExtension :\n   *   - extend enum Name Directives[Const]? EnumValuesDefinition\n   *   - extend enum Name Directives[Const]\n   */\n\n  parseEnumTypeExtension() {\n    const start = this._lexer.token;\n    this.expectKeyword('extend');\n    this.expectKeyword('enum');\n    const name = this.parseName();\n    const directives = this.parseConstDirectives();\n    const values = this.parseEnumValuesDefinition();\n\n    if (directives.length === 0 && values.length === 0) {\n      throw this.unexpected();\n    }\n\n    return this.node(start, {\n      kind: Kind.ENUM_TYPE_EXTENSION,\n      name,\n      directives,\n      values,\n    });\n  }\n  /**\n   * InputObjectTypeExtension :\n   *   - extend input Name Directives[Const]? InputFieldsDefinition\n   *   - extend input Name Directives[Const]\n   */\n\n  parseInputObjectTypeExtension() {\n    const start = this._lexer.token;\n    this.expectKeyword('extend');\n    this.expectKeyword('input');\n    const name = this.parseName();\n    const directives = this.parseConstDirectives();\n    const fields = this.parseInputFieldsDefinition();\n\n    if (directives.length === 0 && fields.length === 0) {\n      throw this.unexpected();\n    }\n\n    return this.node(start, {\n      kind: Kind.INPUT_OBJECT_TYPE_EXTENSION,\n      name,\n      directives,\n      fields,\n    });\n  }\n  /**\n   * ```\n   * DirectiveDefinition :\n   *   - Description? directive @ Name ArgumentsDefinition? `repeatable`? on DirectiveLocations\n   * ```\n   */\n\n  parseDirectiveDefinition() {\n    const start = this._lexer.token;\n    const description = this.parseDescription();\n    this.expectKeyword('directive');\n    this.expectToken(TokenKind.AT);\n    const name = this.parseName();\n    const args = this.parseArgumentDefs();\n    const repeatable = this.expectOptionalKeyword('repeatable');\n    this.expectKeyword('on');\n    const locations = this.parseDirectiveLocations();\n    return this.node(start, {\n      kind: Kind.DIRECTIVE_DEFINITION,\n      description,\n      name,\n      arguments: args,\n      repeatable,\n      locations,\n    });\n  }\n  /**\n   * DirectiveLocations :\n   *   - `|`? DirectiveLocation\n   *   - DirectiveLocations | DirectiveLocation\n   */\n\n  parseDirectiveLocations() {\n    return this.delimitedMany(TokenKind.PIPE, this.parseDirectiveLocation);\n  }\n  /*\n   * DirectiveLocation :\n   *   - ExecutableDirectiveLocation\n   *   - TypeSystemDirectiveLocation\n   *\n   * ExecutableDirectiveLocation : one of\n   *   `QUERY`\n   *   `MUTATION`\n   *   `SUBSCRIPTION`\n   *   `FIELD`\n   *   `FRAGMENT_DEFINITION`\n   *   `FRAGMENT_SPREAD`\n   *   `INLINE_FRAGMENT`\n   *\n   * TypeSystemDirectiveLocation : one of\n   *   `SCHEMA`\n   *   `SCALAR`\n   *   `OBJECT`\n   *   `FIELD_DEFINITION`\n   *   `ARGUMENT_DEFINITION`\n   *   `INTERFACE`\n   *   `UNION`\n   *   `ENUM`\n   *   `ENUM_VALUE`\n   *   `INPUT_OBJECT`\n   *   `INPUT_FIELD_DEFINITION`\n   */\n\n  parseDirectiveLocation() {\n    const start = this._lexer.token;\n    const name = this.parseName();\n\n    if (Object.prototype.hasOwnProperty.call(DirectiveLocation, name.value)) {\n      return name;\n    }\n\n    throw this.unexpected(start);\n  } // Core parsing utility functions\n\n  /**\n   * Returns a node that, if configured to do so, sets a \"loc\" field as a\n   * location object, used to identify the place in the source that created a\n   * given parsed object.\n   */\n\n  node(startToken, node) {\n    if (this._options.noLocation !== true) {\n      node.loc = new Location(\n        startToken,\n        this._lexer.lastToken,\n        this._lexer.source,\n      );\n    }\n\n    return node;\n  }\n  /**\n   * Determines if the next token is of a given kind\n   */\n\n  peek(kind) {\n    return this._lexer.token.kind === kind;\n  }\n  /**\n   * If the next token is of the given kind, return that token after advancing the lexer.\n   * Otherwise, do not change the parser state and throw an error.\n   */\n\n  expectToken(kind) {\n    const token = this._lexer.token;\n\n    if (token.kind === kind) {\n      this.advanceLexer();\n      return token;\n    }\n\n    throw syntaxError(\n      this._lexer.source,\n      token.start,\n      `Expected ${getTokenKindDesc(kind)}, found ${getTokenDesc(token)}.`,\n    );\n  }\n  /**\n   * If the next token is of the given kind, return \"true\" after advancing the lexer.\n   * Otherwise, do not change the parser state and return \"false\".\n   */\n\n  expectOptionalToken(kind) {\n    const token = this._lexer.token;\n\n    if (token.kind === kind) {\n      this.advanceLexer();\n      return true;\n    }\n\n    return false;\n  }\n  /**\n   * If the next token is a given keyword, advance the lexer.\n   * Otherwise, do not change the parser state and throw an error.\n   */\n\n  expectKeyword(value) {\n    const token = this._lexer.token;\n\n    if (token.kind === TokenKind.NAME && token.value === value) {\n      this.advanceLexer();\n    } else {\n      throw syntaxError(\n        this._lexer.source,\n        token.start,\n        `Expected \"${value}\", found ${getTokenDesc(token)}.`,\n      );\n    }\n  }\n  /**\n   * If the next token is a given keyword, return \"true\" after advancing the lexer.\n   * Otherwise, do not change the parser state and return \"false\".\n   */\n\n  expectOptionalKeyword(value) {\n    const token = this._lexer.token;\n\n    if (token.kind === TokenKind.NAME && token.value === value) {\n      this.advanceLexer();\n      return true;\n    }\n\n    return false;\n  }\n  /**\n   * Helper function for creating an error when an unexpected lexed token is encountered.\n   */\n\n  unexpected(atToken) {\n    const token =\n      atToken !== null && atToken !== void 0 ? atToken : this._lexer.token;\n    return syntaxError(\n      this._lexer.source,\n      token.start,\n      `Unexpected ${getTokenDesc(token)}.`,\n    );\n  }\n  /**\n   * Returns a possibly empty list of parse nodes, determined by the parseFn.\n   * This list begins with a lex token of openKind and ends with a lex token of closeKind.\n   * Advances the parser to the next lex token after the closing token.\n   */\n\n  any(openKind, parseFn, closeKind) {\n    this.expectToken(openKind);\n    const nodes = [];\n\n    while (!this.expectOptionalToken(closeKind)) {\n      nodes.push(parseFn.call(this));\n    }\n\n    return nodes;\n  }\n  /**\n   * Returns a list of parse nodes, determined by the parseFn.\n   * It can be empty only if open token is missing otherwise it will always return non-empty list\n   * that begins with a lex token of openKind and ends with a lex token of closeKind.\n   * Advances the parser to the next lex token after the closing token.\n   */\n\n  optionalMany(openKind, parseFn, closeKind) {\n    if (this.expectOptionalToken(openKind)) {\n      const nodes = [];\n\n      do {\n        nodes.push(parseFn.call(this));\n      } while (!this.expectOptionalToken(closeKind));\n\n      return nodes;\n    }\n\n    return [];\n  }\n  /**\n   * Returns a non-empty list of parse nodes, determined by the parseFn.\n   * This list begins with a lex token of openKind and ends with a lex token of closeKind.\n   * Advances the parser to the next lex token after the closing token.\n   */\n\n  many(openKind, parseFn, closeKind) {\n    this.expectToken(openKind);\n    const nodes = [];\n\n    do {\n      nodes.push(parseFn.call(this));\n    } while (!this.expectOptionalToken(closeKind));\n\n    return nodes;\n  }\n  /**\n   * Returns a non-empty list of parse nodes, determined by the parseFn.\n   * This list may begin with a lex token of delimiterKind followed by items separated by lex tokens of tokenKind.\n   * Advances the parser to the next lex token after last item in the list.\n   */\n\n  delimitedMany(delimiterKind, parseFn) {\n    this.expectOptionalToken(delimiterKind);\n    const nodes = [];\n\n    do {\n      nodes.push(parseFn.call(this));\n    } while (this.expectOptionalToken(delimiterKind));\n\n    return nodes;\n  }\n\n  advanceLexer() {\n    const { maxTokens } = this._options;\n\n    const token = this._lexer.advance();\n\n    if (maxTokens !== undefined && token.kind !== TokenKind.EOF) {\n      ++this._tokenCounter;\n\n      if (this._tokenCounter > maxTokens) {\n        throw syntaxError(\n          this._lexer.source,\n          token.start,\n          `Document contains more that ${maxTokens} tokens. Parsing aborted.`,\n        );\n      }\n    }\n  }\n}\n/**\n * A helper function to describe a token as a string for debugging.\n */\n\nfunction getTokenDesc(token) {\n  const value = token.value;\n  return getTokenKindDesc(token.kind) + (value != null ? ` \"${value}\"` : '');\n}\n/**\n * A helper function to describe a token kind as a string for debugging.\n */\n\nfunction getTokenKindDesc(kind) {\n  return isPunctuatorTokenKind(kind) ? `\"${kind}\"` : kind;\n}\n/graphql.js\b'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.graphql = graphql;\nexports.graphqlSync = graphqlSync;\n\nvar _devAssert = require('./jsutils/devAssert.js');\n\nvar _isPromise = require('./jsutils/isPromise.js');\n\nvar _parser = require('./language/parser.js');\n\nvar _validate = require('./type/validate.js');\n\nvar _validate2 = require('./validation/validate.js');\n\nvar _execute = require('./execution/execute.js');\n\nfunction graphql(args) {\n  // Always return a Promise for a consistent API.\n  return new Promise((resolve) => resolve(graphqlImpl(args)));\n}\n/**\n * The graphqlSync function also fulfills GraphQL operations by parsing,\n * validating, and executing a GraphQL document along side a GraphQL schema.\n * However, it guarantees to complete synchronously (or throw an error) assuming\n * that all field resolvers are also synchronous.\n */\n\nfunction graphqlSync(args) {\n  const result = graphqlImpl(args); // Assert that the execution was synchronous.\n\n  if ((0, _isPromise.isPromise)(result)) {\n    throw new Error('GraphQL execution failed to complete synchronously.');\n  }\n\n  return result;\n}\n\nfunction graphqlImpl(args) {\n  // Temporary for v15 to v16 migration. Remove in v17\n  arguments.length < 2 ||\n    (0, _devAssert.devAssert)(\n      false,\n      'graphql@16 dropped long-deprecated support for positional arguments, please pass an object instead.',\n    );\n  const {\n    schema,\n    source,\n    rootValue,\n    contextValue,\n    variableValues,\n    operationName,\n    fieldResolver,\n    typeResolver,\n  } = args; // Validate Schema\n\n  const schemaValidationErrors = (0, _validate.validateSchema)(schema);\n\n  if (schemaValidationErrors.length > 0) {\n    return {\n      errors: schemaValidationErrors,\n    };\n  } // Parse\n\n  let document;\n\n  try {\n    document = (0, _parser.parse)(source);\n  } catch (syntaxError) {\n    return {\n      errors: [syntaxError],\n    };\n  } // Validate\n\n  const validationErrors = (0, _validate2.validate)(schema, document);\n\n  if (validationErrors.length > 0) {\n    return {\n      errors: validationErrors,\n    };\n  } // Execute\n\n  return (0, _execute.execute)({\n    schema,\n    document,\n    rootValue,\n    contextValue,\n    variableValues,\n    operationName,\n    fieldResolver,\n    typeResolver,\n  });\n}\n/jsutils/toObjMap.mjs\u0001\u001fexport function toObjMap(obj) {\n  if (obj == null) {\n    return Object.create(null);\n  }\n\n  if (Object.getPrototypeOf(obj) === null) {\n    return obj;\n  }\n\n  const map = Object.create(null);\n\n  for (const [key, value] of Object.entries(obj)) {\n    map[key] = value;\n  }\n\n  return map;\n}\n,/validation/rules/ValuesOfCorrectTypeRule.js\u00155'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.ValuesOfCorrectTypeRule = ValuesOfCorrectTypeRule;\n\nvar _didYouMean = require('../../jsutils/didYouMean.js');\n\nvar _inspect = require('../../jsutils/inspect.js');\n\nvar _keyMap = require('../../jsutils/keyMap.js');\n\nvar _suggestionList = require('../../jsutils/suggestionList.js');\n\nvar _GraphQLError = require('../../error/GraphQLError.js');\n\nvar _printer = require('../../language/printer.js');\n\nvar _definition = require('../../type/definition.js');\n\n/**\n * Value literals of correct type\n *\n * A GraphQL document is only valid if all value literals are of the type\n * expected at their position.\n *\n * See https://spec.graphql.org/draft/#sec-Values-of-Correct-Type\n */\nfunction ValuesOfCorrectTypeRule(context) {\n  return {\n    ListValue(node) {\n      // Note: TypeInfo will traverse into a list's item type, so look to the\n      // parent input type to check if it is a list.\n      const type = (0, _definition.getNullableType)(\n        context.getParentInputType(),\n      );\n\n      if (!(0, _definition.isListType)(type)) {\n        isValidValueNode(context, node);\n        return false; // Don't traverse further.\n      }\n    },\n\n    ObjectValue(node) {\n      const type = (0, _definition.getNamedType)(context.getInputType());\n\n      if (!(0, _definition.isInputObjectType)(type)) {\n        isValidValueNode(context, node);\n        return false; // Don't traverse further.\n      } // Ensure every required field exists.\n\n      const fieldNodeMap = (0, _keyMap.keyMap)(\n        node.fields,\n        (field) => field.name.value,\n      );\n\n      for (const fieldDef of Object.values(type.getFields())) {\n        const fieldNode = fieldNodeMap[fieldDef.name];\n\n        if (!fieldNode && (0, _definition.isRequiredInputField)(fieldDef)) {\n          const typeStr = (0, _inspect.inspect)(fieldDef.type);\n          context.reportError(\n            new _GraphQLError.GraphQLError(\n              `Field \"${type.name}.${fieldDef.name}\" of required type \"${typeStr}\" was not provided.`,\n              {\n                nodes: node,\n              },\n            ),\n          );\n        }\n      }\n    },\n\n    ObjectField(node) {\n      const parentType = (0, _definition.getNamedType)(\n        context.getParentInputType(),\n      );\n      const fieldType = context.getInputType();\n\n      if (!fieldType && (0, _definition.isInputObjectType)(parentType)) {\n        const suggestions = (0, _suggestionList.suggestionList)(\n          node.name.value,\n          Object.keys(parentType.getFields()),\n        );\n        context.reportError(\n          new _GraphQLError.GraphQLError(\n            `Field \"${node.name.value}\" is not defined by type \"${parentType.name}\".` +\n              (0, _didYouMean.didYouMean)(suggestions),\n            {\n              nodes: node,\n            },\n          ),\n        );\n      }\n    },\n\n    NullValue(node) {\n      const type = context.getInputType();\n\n      if ((0, _definition.isNonNullType)(type)) {\n        context.reportError(\n          new _GraphQLError.GraphQLError(\n            `Expected value of type \"${(0, _inspect.inspect)(\n              type,\n            )}\", found ${(0, _printer.print)(node)}.`,\n            {\n              nodes: node,\n            },\n          ),\n        );\n      }\n    },\n\n    EnumValue: (node) => isValidValueNode(context, node),\n    IntValue: (node) => isValidValueNode(context, node),\n    FloatValue: (node) => isValidValueNode(context, node),\n    StringValue: (node) => isValidValueNode(context, node),\n    BooleanValue: (node) => isValidValueNode(context, node),\n  };\n}\n/**\n * Any value literal may be a valid representation of a Scalar, depending on\n * that scalar type.\n */\n\nfunction isValidValueNode(context, node) {\n  // Report any error at the full type expected by the location.\n  const locationType = context.getInputType();\n\n  if (!locationType) {\n    return;\n  }\n\n  const type = (0, _definition.getNamedType)(locationType);\n\n  if (!(0, _definition.isLeafType)(type)) {\n    const typeStr = (0, _inspect.inspect)(locationType);\n    context.reportError(\n      new _GraphQLError.GraphQLError(\n        `Expected value of type \"${typeStr}\", found ${(0, _printer.print)(\n          node,\n        )}.`,\n        {\n          nodes: node,\n        },\n      ),\n    );\n    return;\n  } // Scalars and Enums determine if a literal value is valid via parseLiteral(),\n  // which may throw or return an invalid value to indicate failure.\n\n  try {\n    const parseResult = type.parseLiteral(\n      node,\n      undefined,\n      /* variables */\n    );\n\n    if (parseResult === undefined) {\n      const typeStr = (0, _inspect.inspect)(locationType);\n      context.reportError(\n        new _GraphQLError.GraphQLError(\n          `Expected value of type \"${typeStr}\", found ${(0, _printer.print)(\n            node,\n          )}.`,\n          {\n            nodes: node,\n          },\n        ),\n      );\n    }\n  } catch (error) {\n    const typeStr = (0, _inspect.inspect)(locationType);\n\n    if (error instanceof _GraphQLError.GraphQLError) {\n      context.reportError(error);\n    } else {\n      context.reportError(\n        new _GraphQLError.GraphQLError(\n          `Expected value of type \"${typeStr}\", found ${(0, _printer.print)(\n            node,\n          )}; ` + error.message,\n          {\n            nodes: node,\n            originalError: error,\n          },\n        ),\n      );\n    }\n  }\n}\n/jsutils/didYouMean.js\u0003o'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.didYouMean = didYouMean;\nconst MAX_SUGGESTIONS = 5;\n/**\n * Given [ A, B, C ] return ' Did you mean A, B, or C?'.\n */\n\nfunction didYouMean(firstArg, secondArg) {\n  const [subMessage, suggestionsArg] = secondArg\n    ? [firstArg, secondArg]\n    : [undefined, firstArg];\n  let message = ' Did you mean ';\n\n  if (subMessage) {\n    message += subMessage + ' ';\n  }\n\n  const suggestions = suggestionsArg.map((x) => `\"${x}\"`);\n\n  switch (suggestions.length) {\n    case 0:\n      return '';\n\n    case 1:\n      return message + suggestions[0] + '?';\n\n    case 2:\n      return message + suggestions[0] + ' or ' + suggestions[1] + '?';\n  }\n\n  const selected = suggestions.slice(0, MAX_SUGGESTIONS);\n  const lastItem = selected.pop();\n  return message + selected.join(', ') + ', or ' + lastItem + '?';\n}\n/error/GraphQLError.d.ts\u0014Limport type { Maybe } from '../jsutils/Maybe';\nimport type { ASTNode } from '../language/ast';\nimport type { SourceLocation } from '../language/location';\nimport type { Source } from '../language/source';\n/**\n * Custom extensions\n *\n * @remarks\n * Use a unique identifier name for your extension, for example the name of\n * your library or project. Do not use a shortened identifier as this increases\n * the risk of conflicts. We recommend you add at most one extension field,\n * an object which can contain all the values you need.\n */\nexport interface GraphQLErrorExtensions {\n  [attributeName: string]: unknown;\n}\nexport interface GraphQLErrorOptions {\n  nodes?: ReadonlyArray<ASTNode> | ASTNode | null;\n  source?: Maybe<Source>;\n  positions?: Maybe<ReadonlyArray<number>>;\n  path?: Maybe<ReadonlyArray<string | number>>;\n  originalError?: Maybe<\n    Error & {\n      readonly extensions?: unknown;\n    }\n  >;\n  extensions?: Maybe<GraphQLErrorExtensions>;\n}\n/**\n * A GraphQLError describes an Error found during the parse, validate, or\n * execute phases of performing a GraphQL operation. In addition to a message\n * and stack trace, it also includes information about the locations in a\n * GraphQL document and/or execution result that correspond to the Error.\n */\nexport declare class GraphQLError extends Error {\n  /**\n   * An array of `{ line, column }` locations within the source GraphQL document\n   * which correspond to this error.\n   *\n   * Errors during validation often contain multiple locations, for example to\n   * point out two things with the same name. Errors during execution include a\n   * single location, the field which produced the error.\n   *\n   * Enumerable, and appears in the result of JSON.stringify().\n   */\n  readonly locations: ReadonlyArray<SourceLocation> | undefined;\n  /**\n   * An array describing the JSON-path into the execution response which\n   * corresponds to this error. Only included for errors during execution.\n   *\n   * Enumerable, and appears in the result of JSON.stringify().\n   */\n  readonly path: ReadonlyArray<string | number> | undefined;\n  /**\n   * An array of GraphQL AST Nodes corresponding to this error.\n   */\n  readonly nodes: ReadonlyArray<ASTNode> | undefined;\n  /**\n   * The source GraphQL document for the first location of this error.\n   *\n   * Note that if this Error represents more than one node, the source may not\n   * represent nodes after the first node.\n   */\n  readonly source: Source | undefined;\n  /**\n   * An array of character offsets within the source GraphQL document\n   * which correspond to this error.\n   */\n  readonly positions: ReadonlyArray<number> | undefined;\n  /**\n   * The original error thrown from a field resolver during execution.\n   */\n  readonly originalError: Error | undefined;\n  /**\n   * Extension fields to add to the formatted error.\n   */\n  readonly extensions: GraphQLErrorExtensions;\n  constructor(message: string, options?: GraphQLErrorOptions);\n  /**\n   * @deprecated Please use the `GraphQLErrorOptions` constructor overload instead.\n   */\n  constructor(\n    message: string,\n    nodes?: ReadonlyArray<ASTNode> | ASTNode | null,\n    source?: Maybe<Source>,\n    positions?: Maybe<ReadonlyArray<number>>,\n    path?: Maybe<ReadonlyArray<string | number>>,\n    originalError?: Maybe<\n      Error & {\n        readonly extensions?: unknown;\n      }\n    >,\n    extensions?: Maybe<GraphQLErrorExtensions>,\n  );\n  get [Symbol.toStringTag](): string;\n  toString(): string;\n  toJSON(): GraphQLFormattedError;\n}\n/**\n * See: https://spec.graphql.org/draft/#sec-Errors\n */\nexport interface GraphQLFormattedError {\n  /**\n   * A short, human-readable summary of the problem that **SHOULD NOT** change\n   * from occurrence to occurrence of the problem, except for purposes of\n   * localization.\n   */\n  readonly message: string;\n  /**\n   * If an error can be associated to a particular point in the requested\n   * GraphQL document, it should contain a list of locations.\n   */\n  readonly locations?: ReadonlyArray<SourceLocation>;\n  /**\n   * If an error can be associated to a particular field in the GraphQL result,\n   * it _must_ contain an entry with the key `path` that details the path of\n   * the response field which experienced the error. This allows clients to\n   * identify whether a null result is intentional or caused by a runtime error.\n   */\n  readonly path?: ReadonlyArray<string | number>;\n  /**\n   * Reserved for implementors to extend the protocol however they see fit,\n   * and hence there are no additional restrictions on its contents.\n   */\n  readonly extensions?: {\n    [key: string]: unknown;\n  };\n}\n/**\n * Prints a GraphQLError to a string, representing useful location information\n * about the error's position in the source.\n *\n * @deprecated Please use `error.toString` instead. Will be removed in v17\n */\nexport declare function printError(error: GraphQLError): string;\n/**\n * Given a GraphQLError, format it according to the rules described by the\n * Response Format, Errors section of the GraphQL Specification.\n *\n * @deprecated Please use `error.toJSON` instead. Will be removed in v17\n */\nexport declare function formatError(error: GraphQLError): GraphQLFormattedError;\n /language/directiveLocation.d.ts\u0003/**\n * The set of allowed directive location values.\n */\ndeclare enum DirectiveLocation {\n  /** Request Definitions */\n  QUERY = 'QUERY',\n  MUTATION = 'MUTATION',\n  SUBSCRIPTION = 'SUBSCRIPTION',\n  FIELD = 'FIELD',\n  FRAGMENT_DEFINITION = 'FRAGMENT_DEFINITION',\n  FRAGMENT_SPREAD = 'FRAGMENT_SPREAD',\n  INLINE_FRAGMENT = 'INLINE_FRAGMENT',\n  VARIABLE_DEFINITION = 'VARIABLE_DEFINITION',\n  /** Type System Definitions */\n  SCHEMA = 'SCHEMA',\n  SCALAR = 'SCALAR',\n  OBJECT = 'OBJECT',\n  FIELD_DEFINITION = 'FIELD_DEFINITION',\n  ARGUMENT_DEFINITION = 'ARGUMENT_DEFINITION',\n  INTERFACE = 'INTERFACE',\n  UNION = 'UNION',\n  ENUM = 'ENUM',\n  ENUM_VALUE = 'ENUM_VALUE',\n  INPUT_OBJECT = 'INPUT_OBJECT',\n  INPUT_FIELD_DEFINITION = 'INPUT_FIELD_DEFINITION',\n}\nexport { DirectiveLocation };\n/**\n * The enum type representing the directive location values.\n *\n * @deprecated Please use `DirectiveLocation`. Will be remove in v17.\n */\nexport declare type DirectiveLocationEnum = typeof DirectiveLocation;\n/validation/validate.mjs\u000f]import { devAssert } from '../jsutils/devAssert.mjs';\nimport { GraphQLError } from '../error/GraphQLError.mjs';\nimport { visit, visitInParallel } from '../language/visitor.mjs';\nimport { assertValidSchema } from '../type/validate.mjs';\nimport { TypeInfo, visitWithTypeInfo } from '../utilities/TypeInfo.mjs';\nimport { specifiedRules, specifiedSDLRules } from './specifiedRules.mjs';\nimport {\n  SDLValidationContext,\n  ValidationContext,\n} from './ValidationContext.mjs';\n/**\n * Implements the \"Validation\" section of the spec.\n *\n * Validation runs synchronously, returning an array of encountered errors, or\n * an empty array if no errors were encountered and the document is valid.\n *\n * A list of specific validation rules may be provided. If not provided, the\n * default list of rules defined by the GraphQL specification will be used.\n *\n * Each validation rules is a function which returns a visitor\n * (see the language/visitor API). Visitor methods are expected to return\n * GraphQLErrors, or Arrays of GraphQLErrors when invalid.\n *\n * Validate will stop validation after a `maxErrors` limit has been reached.\n * Attackers can send pathologically invalid queries to induce a DoS attack,\n * so by default `maxErrors` set to 100 errors.\n *\n * Optionally a custom TypeInfo instance may be provided. If not provided, one\n * will be created from the provided schema.\n */\n\nexport function validate(\n  schema,\n  documentAST,\n  rules = specifiedRules,\n  options,\n  /** @deprecated will be removed in 17.0.0 */\n  typeInfo = new TypeInfo(schema),\n) {\n  var _options$maxErrors;\n\n  const maxErrors =\n    (_options$maxErrors =\n      options === null || options === void 0 ? void 0 : options.maxErrors) !==\n      null && _options$maxErrors !== void 0\n      ? _options$maxErrors\n      : 100;\n  documentAST || devAssert(false, 'Must provide document.'); // If the schema used for validation is invalid, throw an error.\n\n  assertValidSchema(schema);\n  const abortObj = Object.freeze({});\n  const errors = [];\n  const context = new ValidationContext(\n    schema,\n    documentAST,\n    typeInfo,\n    (error) => {\n      if (errors.length >= maxErrors) {\n        errors.push(\n          new GraphQLError(\n            'Too many validation errors, error limit reached. Validation aborted.',\n          ),\n        ); // eslint-disable-next-line @typescript-eslint/no-throw-literal\n\n        throw abortObj;\n      }\n\n      errors.push(error);\n    },\n  ); // This uses a specialized visitor which runs multiple visitors in parallel,\n  // while maintaining the visitor skip and break API.\n\n  const visitor = visitInParallel(rules.map((rule) => rule(context))); // Visit the whole document with each instance of all provided rules.\n\n  try {\n    visit(documentAST, visitWithTypeInfo(typeInfo, visitor));\n  } catch (e) {\n    if (e !== abortObj) {\n      throw e;\n    }\n  }\n\n  return errors;\n}\n/**\n * @internal\n */\n\nexport function validateSDL(\n  documentAST,\n  schemaToExtend,\n  rules = specifiedSDLRules,\n) {\n  const errors = [];\n  const context = new SDLValidationContext(\n    documentAST,\n    schemaToExtend,\n    (error) => {\n      errors.push(error);\n    },\n  );\n  const visitors = rules.map((rule) => rule(context));\n  visit(documentAST, visitInParallel(visitors));\n  return errors;\n}\n/**\n * Utility function which asserts a SDL document is valid by throwing an error\n * if it is invalid.\n *\n * @internal\n */\n\nexport function assertValidSDL(documentAST) {\n  const errors = validateSDL(documentAST);\n\n  if (errors.length !== 0) {\n    throw new Error(errors.map((error) => error.message).join('\\n\\n'));\n  }\n}\n/**\n * Utility function which asserts a SDL document is valid by throwing an error\n * if it is invalid.\n *\n * @internal\n */\n\nexport function assertValidSDLExtension(documentAST, schema) {\n  const errors = validateSDL(documentAST, schema);\n\n  if (errors.length !== 0) {\n    throw new Error(errors.map((error) => error.message).join('\\n\\n'));\n  }\n}\n./validation/rules/UniqueVariableNamesRule.d.ts\u0001Oimport type { ASTVisitor } from '../../language/visitor';\nimport type { ASTValidationContext } from '../ValidationContext';\n/**\n * Unique variable names\n *\n * A GraphQL operation is only valid if all its variables are uniquely named.\n */\nexport declare function UniqueVariableNamesRule(\n  context: ASTValidationContext,\n): ASTVisitor;\n/validation/specifiedRules.js\u001a'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.specifiedSDLRules = exports.specifiedRules = void 0;\n\nvar _ExecutableDefinitionsRule = require('./rules/ExecutableDefinitionsRule.js');\n\nvar _FieldsOnCorrectTypeRule = require('./rules/FieldsOnCorrectTypeRule.js');\n\nvar _FragmentsOnCompositeTypesRule = require('./rules/FragmentsOnCompositeTypesRule.js');\n\nvar _KnownArgumentNamesRule = require('./rules/KnownArgumentNamesRule.js');\n\nvar _KnownDirectivesRule = require('./rules/KnownDirectivesRule.js');\n\nvar _KnownFragmentNamesRule = require('./rules/KnownFragmentNamesRule.js');\n\nvar _KnownTypeNamesRule = require('./rules/KnownTypeNamesRule.js');\n\nvar _LoneAnonymousOperationRule = require('./rules/LoneAnonymousOperationRule.js');\n\nvar _LoneSchemaDefinitionRule = require('./rules/LoneSchemaDefinitionRule.js');\n\nvar _NoFragmentCyclesRule = require('./rules/NoFragmentCyclesRule.js');\n\nvar _NoUndefinedVariablesRule = require('./rules/NoUndefinedVariablesRule.js');\n\nvar _NoUnusedFragmentsRule = require('./rules/NoUnusedFragmentsRule.js');\n\nvar _NoUnusedVariablesRule = require('./rules/NoUnusedVariablesRule.js');\n\nvar _OverlappingFieldsCanBeMergedRule = require('./rules/OverlappingFieldsCanBeMergedRule.js');\n\nvar _PossibleFragmentSpreadsRule = require('./rules/PossibleFragmentSpreadsRule.js');\n\nvar _PossibleTypeExtensionsRule = require('./rules/PossibleTypeExtensionsRule.js');\n\nvar _ProvidedRequiredArgumentsRule = require('./rules/ProvidedRequiredArgumentsRule.js');\n\nvar _ScalarLeafsRule = require('./rules/ScalarLeafsRule.js');\n\nvar _SingleFieldSubscriptionsRule = require('./rules/SingleFieldSubscriptionsRule.js');\n\nvar _UniqueArgumentDefinitionNamesRule = require('./rules/UniqueArgumentDefinitionNamesRule.js');\n\nvar _UniqueArgumentNamesRule = require('./rules/UniqueArgumentNamesRule.js');\n\nvar _UniqueDirectiveNamesRule = require('./rules/UniqueDirectiveNamesRule.js');\n\nvar _UniqueDirectivesPerLocationRule = require('./rules/UniqueDirectivesPerLocationRule.js');\n\nvar _UniqueEnumValueNamesRule = require('./rules/UniqueEnumValueNamesRule.js');\n\nvar _UniqueFieldDefinitionNamesRule = require('./rules/UniqueFieldDefinitionNamesRule.js');\n\nvar _UniqueFragmentNamesRule = require('./rules/UniqueFragmentNamesRule.js');\n\nvar _UniqueInputFieldNamesRule = require('./rules/UniqueInputFieldNamesRule.js');\n\nvar _UniqueOperationNamesRule = require('./rules/UniqueOperationNamesRule.js');\n\nvar _UniqueOperationTypesRule = require('./rules/UniqueOperationTypesRule.js');\n\nvar _UniqueTypeNamesRule = require('./rules/UniqueTypeNamesRule.js');\n\nvar _UniqueVariableNamesRule = require('./rules/UniqueVariableNamesRule.js');\n\nvar _ValuesOfCorrectTypeRule = require('./rules/ValuesOfCorrectTypeRule.js');\n\nvar _VariablesAreInputTypesRule = require('./rules/VariablesAreInputTypesRule.js');\n\nvar _VariablesInAllowedPositionRule = require('./rules/VariablesInAllowedPositionRule.js');\n\n// Spec Section: \"Executable Definitions\"\n// Spec Section: \"Field Selections on Objects, Interfaces, and Unions Types\"\n// Spec Section: \"Fragments on Composite Types\"\n// Spec Section: \"Argument Names\"\n// Spec Section: \"Directives Are Defined\"\n// Spec Section: \"Fragment spread target defined\"\n// Spec Section: \"Fragment Spread Type Existence\"\n// Spec Section: \"Lone Anonymous Operation\"\n// SDL-specific validation rules\n// Spec Section: \"Fragments must not form cycles\"\n// Spec Section: \"All Variable Used Defined\"\n// Spec Section: \"Fragments must be used\"\n// Spec Section: \"All Variables Used\"\n// Spec Section: \"Field Selection Merging\"\n// Spec Section: \"Fragment spread is possible\"\n// Spec Section: \"Argument Optionality\"\n// Spec Section: \"Leaf Field Selections\"\n// Spec Section: \"Subscriptions with Single Root Field\"\n// Spec Section: \"Argument Uniqueness\"\n// Spec Section: \"Directives Are Unique Per Location\"\n// Spec Section: \"Fragment Name Uniqueness\"\n// Spec Section: \"Input Object Field Uniqueness\"\n// Spec Section: \"Operation Name Uniqueness\"\n// Spec Section: \"Variable Uniqueness\"\n// Spec Section: \"Value Type Correctness\"\n// Spec Section: \"Variables are Input Types\"\n// Spec Section: \"All Variable Usages Are Allowed\"\n\n/**\n * This set includes all validation rules defined by the GraphQL spec.\n *\n * The order of the rules in this list has been adjusted to lead to the\n * most clear output when encountering multiple validation errors.\n */\nconst specifiedRules = Object.freeze([\n  _ExecutableDefinitionsRule.ExecutableDefinitionsRule,\n  _UniqueOperationNamesRule.UniqueOperationNamesRule,\n  _LoneAnonymousOperationRule.LoneAnonymousOperationRule,\n  _SingleFieldSubscriptionsRule.SingleFieldSubscriptionsRule,\n  _KnownTypeNamesRule.KnownTypeNamesRule,\n  _FragmentsOnCompositeTypesRule.FragmentsOnCompositeTypesRule,\n  _VariablesAreInputTypesRule.VariablesAreInputTypesRule,\n  _ScalarLeafsRule.ScalarLeafsRule,\n  _FieldsOnCorrectTypeRule.FieldsOnCorrectTypeRule,\n  _UniqueFragmentNamesRule.UniqueFragmentNamesRule,\n  _KnownFragmentNamesRule.KnownFragmentNamesRule,\n  _NoUnusedFragmentsRule.NoUnusedFragmentsRule,\n  _PossibleFragmentSpreadsRule.PossibleFragmentSpreadsRule,\n  _NoFragmentCyclesRule.NoFragmentCyclesRule,\n  _UniqueVariableNamesRule.UniqueVariableNamesRule,\n  _NoUndefinedVariablesRule.NoUndefinedVariablesRule,\n  _NoUnusedVariablesRule.NoUnusedVariablesRule,\n  _KnownDirectivesRule.KnownDirectivesRule,\n  _UniqueDirectivesPerLocationRule.UniqueDirectivesPerLocationRule,\n  _KnownArgumentNamesRule.KnownArgumentNamesRule,\n  _UniqueArgumentNamesRule.UniqueArgumentNamesRule,\n  _ValuesOfCorrectTypeRule.ValuesOfCorrectTypeRule,\n  _ProvidedRequiredArgumentsRule.ProvidedRequiredArgumentsRule,\n  _VariablesInAllowedPositionRule.VariablesInAllowedPositionRule,\n  _OverlappingFieldsCanBeMergedRule.OverlappingFieldsCanBeMergedRule,\n  _UniqueInputFieldNamesRule.UniqueInputFieldNamesRule,\n]);\n/**\n * @internal\n */\n\nexports.specifiedRules = specifiedRules;\nconst specifiedSDLRules = Object.freeze([\n  _LoneSchemaDefinitionRule.LoneSchemaDefinitionRule,\n  _UniqueOperationTypesRule.UniqueOperationTypesRule,\n  _UniqueTypeNamesRule.UniqueTypeNamesRule,\n  _UniqueEnumValueNamesRule.UniqueEnumValueNamesRule,\n  _UniqueFieldDefinitionNamesRule.UniqueFieldDefinitionNamesRule,\n  _UniqueArgumentDefinitionNamesRule.UniqueArgumentDefinitionNamesRule,\n  _UniqueDirectiveNamesRule.UniqueDirectiveNamesRule,\n  _KnownTypeNamesRule.KnownTypeNamesRule,\n  _KnownDirectivesRule.KnownDirectivesRule,\n  _UniqueDirectivesPerLocationRule.UniqueDirectivesPerLocationRule,\n  _PossibleTypeExtensionsRule.PossibleTypeExtensionsRule,\n  _KnownArgumentNamesRule.KnownArgumentNamesOnDirectivesRule,\n  _UniqueArgumentNamesRule.UniqueArgumentNamesRule,\n  _UniqueInputFieldNamesRule.UniqueInputFieldNamesRule,\n  _ProvidedRequiredArgumentsRule.ProvidedRequiredArgumentsOnDirectivesRule,\n]);\nexports.specifiedSDLRules = specifiedSDLRules;\n\"/validation/ValidationContext.d.ts\frimport type { Maybe } from '../jsutils/Maybe';\nimport type { GraphQLError } from '../error/GraphQLError';\nimport type {\n  DocumentNode,\n  FragmentDefinitionNode,\n  FragmentSpreadNode,\n  OperationDefinitionNode,\n  SelectionSetNode,\n  VariableNode,\n} from '../language/ast';\nimport type { ASTVisitor } from '../language/visitor';\nimport type {\n  GraphQLArgument,\n  GraphQLCompositeType,\n  GraphQLEnumValue,\n  GraphQLField,\n  GraphQLInputType,\n  GraphQLOutputType,\n} from '../type/definition';\nimport type { GraphQLDirective } from '../type/directives';\nimport type { GraphQLSchema } from '../type/schema';\nimport { TypeInfo } from '../utilities/TypeInfo';\ndeclare type NodeWithSelectionSet =\n  | OperationDefinitionNode\n  | FragmentDefinitionNode;\ninterface VariableUsage {\n  readonly node: VariableNode;\n  readonly type: Maybe<GraphQLInputType>;\n  readonly defaultValue: Maybe<unknown>;\n}\n/**\n * An instance of this class is passed as the \"this\" context to all validators,\n * allowing access to commonly useful contextual information from within a\n * validation rule.\n */\nexport declare class ASTValidationContext {\n  private _ast;\n  private _onError;\n  private _fragments;\n  private _fragmentSpreads;\n  private _recursivelyReferencedFragments;\n  constructor(ast: DocumentNode, onError: (error: GraphQLError) => void);\n  get [Symbol.toStringTag](): string;\n  reportError(error: GraphQLError): void;\n  getDocument(): DocumentNode;\n  getFragment(name: string): Maybe<FragmentDefinitionNode>;\n  getFragmentSpreads(node: SelectionSetNode): ReadonlyArray<FragmentSpreadNode>;\n  getRecursivelyReferencedFragments(\n    operation: OperationDefinitionNode,\n  ): ReadonlyArray<FragmentDefinitionNode>;\n}\nexport declare type ASTValidationRule = (\n  context: ASTValidationContext,\n) => ASTVisitor;\nexport declare class SDLValidationContext extends ASTValidationContext {\n  private _schema;\n  constructor(\n    ast: DocumentNode,\n    schema: Maybe<GraphQLSchema>,\n    onError: (error: GraphQLError) => void,\n  );\n  get [Symbol.toStringTag](): string;\n  getSchema(): Maybe<GraphQLSchema>;\n}\nexport declare type SDLValidationRule = (\n  context: SDLValidationContext,\n) => ASTVisitor;\nexport declare class ValidationContext extends ASTValidationContext {\n  private _schema;\n  private _typeInfo;\n  private _variableUsages;\n  private _recursiveVariableUsages;\n  constructor(\n    schema: GraphQLSchema,\n    ast: DocumentNode,\n    typeInfo: TypeInfo,\n    onError: (error: GraphQLError) => void,\n  );\n  get [Symbol.toStringTag](): string;\n  getSchema(): GraphQLSchema;\n  getVariableUsages(node: NodeWithSelectionSet): ReadonlyArray<VariableUsage>;\n  getRecursiveVariableUsages(\n    operation: OperationDefinitionNode,\n  ): ReadonlyArray<VariableUsage>;\n  getType(): Maybe<GraphQLOutputType>;\n  getParentType(): Maybe<GraphQLCompositeType>;\n  getInputType(): Maybe<GraphQLInputType>;\n  getParentInputType(): Maybe<GraphQLInputType>;\n  getFieldDef(): Maybe<GraphQLField<unknown, unknown>>;\n  getDirective(): Maybe<GraphQLDirective>;\n  getArgument(): Maybe<GraphQLArgument>;\n  getEnumValue(): Maybe<GraphQLEnumValue>;\n}\nexport declare type ValidationRule = (context: ValidationContext) => ASTVisitor;\nexport {};\n/jsutils/ObjMap.d.ts\u0001>export interface ObjMap<T> {\n  [key: string]: T;\n}\nexport declare type ObjMapLike<T> =\n  | ObjMap<T>\n  | {\n      [key: string]: T;\n    };\nexport interface ReadOnlyObjMap<T> {\n  readonly [key: string]: T;\n}\nexport declare type ReadOnlyObjMapLike<T> =\n  | ReadOnlyObjMap<T>\n  | {\n      readonly [key: string]: T;\n    };\n/type/validate.mjsQimport { inspect } from '../jsutils/inspect.mjs';\nimport { GraphQLError } from '../error/GraphQLError.mjs';\nimport { OperationTypeNode } from '../language/ast.mjs';\nimport { isEqualType, isTypeSubTypeOf } from '../utilities/typeComparators.mjs';\nimport {\n  isEnumType,\n  isInputObjectType,\n  isInputType,\n  isInterfaceType,\n  isNamedType,\n  isNonNullType,\n  isObjectType,\n  isOutputType,\n  isRequiredArgument,\n  isRequiredInputField,\n  isUnionType,\n} from './definition.mjs';\nimport { GraphQLDeprecatedDirective, isDirective } from './directives.mjs';\nimport { isIntrospectionType } from './introspection.mjs';\nimport { assertSchema } from './schema.mjs';\n/**\n * Implements the \"Type Validation\" sub-sections of the specification's\n * \"Type System\" section.\n *\n * Validation runs synchronously, returning an array of encountered errors, or\n * an empty array if no errors were encountered and the Schema is valid.\n */\n\nexport function validateSchema(schema) {\n  // First check to ensure the provided value is in fact a GraphQLSchema.\n  assertSchema(schema); // If this Schema has already been validated, return the previous results.\n\n  if (schema.__validationErrors) {\n    return schema.__validationErrors;\n  } // Validate the schema, producing a list of errors.\n\n  const context = new SchemaValidationContext(schema);\n  validateRootTypes(context);\n  validateDirectives(context);\n  validateTypes(context); // Persist the results of validation before returning to ensure validation\n  // does not run multiple times for this schema.\n\n  const errors = context.getErrors();\n  schema.__validationErrors = errors;\n  return errors;\n}\n/**\n * Utility function which asserts a schema is valid by throwing an error if\n * it is invalid.\n */\n\nexport function assertValidSchema(schema) {\n  const errors = validateSchema(schema);\n\n  if (errors.length !== 0) {\n    throw new Error(errors.map((error) => error.message).join('\\n\\n'));\n  }\n}\n\nclass SchemaValidationContext {\n  constructor(schema) {\n    this._errors = [];\n    this.schema = schema;\n  }\n\n  reportError(message, nodes) {\n    const _nodes = Array.isArray(nodes) ? nodes.filter(Boolean) : nodes;\n\n    this._errors.push(\n      new GraphQLError(message, {\n        nodes: _nodes,\n      }),\n    );\n  }\n\n  getErrors() {\n    return this._errors;\n  }\n}\n\nfunction validateRootTypes(context) {\n  const schema = context.schema;\n  const queryType = schema.getQueryType();\n\n  if (!queryType) {\n    context.reportError('Query root type must be provided.', schema.astNode);\n  } else if (!isObjectType(queryType)) {\n    var _getOperationTypeNode;\n\n    context.reportError(\n      `Query root type must be Object type, it cannot be ${inspect(\n        queryType,\n      )}.`,\n      (_getOperationTypeNode = getOperationTypeNode(\n        schema,\n        OperationTypeNode.QUERY,\n      )) !== null && _getOperationTypeNode !== void 0\n        ? _getOperationTypeNode\n        : queryType.astNode,\n    );\n  }\n\n  const mutationType = schema.getMutationType();\n\n  if (mutationType && !isObjectType(mutationType)) {\n    var _getOperationTypeNode2;\n\n    context.reportError(\n      'Mutation root type must be Object type if provided, it cannot be ' +\n        `${inspect(mutationType)}.`,\n      (_getOperationTypeNode2 = getOperationTypeNode(\n        schema,\n        OperationTypeNode.MUTATION,\n      )) !== null && _getOperationTypeNode2 !== void 0\n        ? _getOperationTypeNode2\n        : mutationType.astNode,\n    );\n  }\n\n  const subscriptionType = schema.getSubscriptionType();\n\n  if (subscriptionType && !isObjectType(subscriptionType)) {\n    var _getOperationTypeNode3;\n\n    context.reportError(\n      'Subscription root type must be Object type if provided, it cannot be ' +\n        `${inspect(subscriptionType)}.`,\n      (_getOperationTypeNode3 = getOperationTypeNode(\n        schema,\n        OperationTypeNode.SUBSCRIPTION,\n      )) !== null && _getOperationTypeNode3 !== void 0\n        ? _getOperationTypeNode3\n        : subscriptionType.astNode,\n    );\n  }\n}\n\nfunction getOperationTypeNode(schema, operation) {\n  var _flatMap$find;\n\n  return (_flatMap$find = [schema.astNode, ...schema.extensionASTNodes]\n    .flatMap(\n      // FIXME: https://github.com/graphql/graphql-js/issues/2203\n      (schemaNode) => {\n        var _schemaNode$operation;\n\n        return (\n          /* c8 ignore next */\n          (_schemaNode$operation =\n            schemaNode === null || schemaNode === void 0\n              ? void 0\n              : schemaNode.operationTypes) !== null &&\n            _schemaNode$operation !== void 0\n            ? _schemaNode$operation\n            : []\n        );\n      },\n    )\n    .find((operationNode) => operationNode.operation === operation)) === null ||\n    _flatMap$find === void 0\n    ? void 0\n    : _flatMap$find.type;\n}\n\nfunction validateDirectives(context) {\n  for (const directive of context.schema.getDirectives()) {\n    // Ensure all directives are in fact GraphQL directives.\n    if (!isDirective(directive)) {\n      context.reportError(\n        `Expected directive but got: ${inspect(directive)}.`,\n        directive === null || directive === void 0 ? void 0 : directive.astNode,\n      );\n      continue;\n    } // Ensure they are named correctly.\n\n    validateName(context, directive); // TODO: Ensure proper locations.\n    // Ensure the arguments are valid.\n\n    for (const arg of directive.args) {\n      // Ensure they are named correctly.\n      validateName(context, arg); // Ensure the type is an input type.\n\n      if (!isInputType(arg.type)) {\n        context.reportError(\n          `The type of @${directive.name}(${arg.name}:) must be Input Type ` +\n            `but got: ${inspect(arg.type)}.`,\n          arg.astNode,\n        );\n      }\n\n      if (isRequiredArgument(arg) && arg.deprecationReason != null) {\n        var _arg$astNode;\n\n        context.reportError(\n          `Required argument @${directive.name}(${arg.name}:) cannot be deprecated.`,\n          [\n            getDeprecatedDirectiveNode(arg.astNode),\n            (_arg$astNode = arg.astNode) === null || _arg$astNode === void 0\n              ? void 0\n              : _arg$astNode.type,\n          ],\n        );\n      }\n    }\n  }\n}\n\nfunction validateName(context, node) {\n  // Ensure names are valid, however introspection types opt out.\n  if (node.name.startsWith('__')) {\n    context.reportError(\n      `Name \"${node.name}\" must not begin with \"__\", which is reserved by GraphQL introspection.`,\n      node.astNode,\n    );\n  }\n}\n\nfunction validateTypes(context) {\n  const validateInputObjectCircularRefs =\n    createInputObjectCircularRefsValidator(context);\n  const typeMap = context.schema.getTypeMap();\n\n  for (const type of Object.values(typeMap)) {\n    // Ensure all provided types are in fact GraphQL type.\n    if (!isNamedType(type)) {\n      context.reportError(\n        `Expected GraphQL named type but got: ${inspect(type)}.`,\n        type.astNode,\n      );\n      continue;\n    } // Ensure it is named correctly (excluding introspection types).\n\n    if (!isIntrospectionType(type)) {\n      validateName(context, type);\n    }\n\n    if (isObjectType(type)) {\n      // Ensure fields are valid\n      validateFields(context, type); // Ensure objects implement the interfaces they claim to.\n\n      validateInterfaces(context, type);\n    } else if (isInterfaceType(type)) {\n      // Ensure fields are valid.\n      validateFields(context, type); // Ensure interfaces implement the interfaces they claim to.\n\n      validateInterfaces(context, type);\n    } else if (isUnionType(type)) {\n      // Ensure Unions include valid member types.\n      validateUnionMembers(context, type);\n    } else if (isEnumType(type)) {\n      // Ensure Enums have valid values.\n      validateEnumValues(context, type);\n    } else if (isInputObjectType(type)) {\n      // Ensure Input Object fields are valid.\n      validateInputFields(context, type); // Ensure Input Objects do not contain non-nullable circular references\n\n      validateInputObjectCircularRefs(type);\n    }\n  }\n}\n\nfunction validateFields(context, type) {\n  const fields = Object.values(type.getFields()); // Objects and Interfaces both must define one or more fields.\n\n  if (fields.length === 0) {\n    context.reportError(`Type ${type.name} must define one or more fields.`, [\n      type.astNode,\n      ...type.extensionASTNodes,\n    ]);\n  }\n\n  for (const field of fields) {\n    // Ensure they are named correctly.\n    validateName(context, field); // Ensure the type is an output type\n\n    if (!isOutputType(field.type)) {\n      var _field$astNode;\n\n      context.reportError(\n        `The type of ${type.name}.${field.name} must be Output Type ` +\n          `but got: ${inspect(field.type)}.`,\n        (_field$astNode = field.astNode) === null || _field$astNode === void 0\n          ? void 0\n          : _field$astNode.type,\n      );\n    } // Ensure the arguments are valid\n\n    for (const arg of field.args) {\n      const argName = arg.name; // Ensure they are named correctly.\n\n      validateName(context, arg); // Ensure the type is an input type\n\n      if (!isInputType(arg.type)) {\n        var _arg$astNode2;\n\n        context.reportError(\n          `The type of ${type.name}.${field.name}(${argName}:) must be Input ` +\n            `Type but got: ${inspect(arg.type)}.`,\n          (_arg$astNode2 = arg.astNode) === null || _arg$astNode2 === void 0\n            ? void 0\n            : _arg$astNode2.type,\n        );\n      }\n\n      if (isRequiredArgument(arg) && arg.deprecationReason != null) {\n        var _arg$astNode3;\n\n        context.reportError(\n          `Required argument ${type.name}.${field.name}(${argName}:) cannot be deprecated.`,\n          [\n            getDeprecatedDirectiveNode(arg.astNode),\n            (_arg$astNode3 = arg.astNode) === null || _arg$astNode3 === void 0\n              ? void 0\n              : _arg$astNode3.type,\n          ],\n        );\n      }\n    }\n  }\n}\n\nfunction validateInterfaces(context, type) {\n  const ifaceTypeNames = Object.create(null);\n\n  for (const iface of type.getInterfaces()) {\n    if (!isInterfaceType(iface)) {\n      context.reportError(\n        `Type ${inspect(type)} must only implement Interface types, ` +\n          `it cannot implement ${inspect(iface)}.`,\n        getAllImplementsInterfaceNodes(type, iface),\n      );\n      continue;\n    }\n\n    if (type === iface) {\n      context.reportError(\n        `Type ${type.name} cannot implement itself because it would create a circular reference.`,\n        getAllImplementsInterfaceNodes(type, iface),\n      );\n      continue;\n    }\n\n    if (ifaceTypeNames[iface.name]) {\n      context.reportError(\n        `Type ${type.name} can only implement ${iface.name} once.`,\n        getAllImplementsInterfaceNodes(type, iface),\n      );\n      continue;\n    }\n\n    ifaceTypeNames[iface.name] = true;\n    validateTypeImplementsAncestors(context, type, iface);\n    validateTypeImplementsInterface(context, type, iface);\n  }\n}\n\nfunction validateTypeImplementsInterface(context, type, iface) {\n  const typeFieldMap = type.getFields(); // Assert each interface field is implemented.\n\n  for (const ifaceField of Object.values(iface.getFields())) {\n    const fieldName = ifaceField.name;\n    const typeField = typeFieldMap[fieldName]; // Assert interface field exists on type.\n\n    if (!typeField) {\n      context.reportError(\n        `Interface field ${iface.name}.${fieldName} expected but ${type.name} does not provide it.`,\n        [ifaceField.astNode, type.astNode, ...type.extensionASTNodes],\n      );\n      continue;\n    } // Assert interface field type is satisfied by type field type, by being\n    // a valid subtype. (covariant)\n\n    if (!isTypeSubTypeOf(context.schema, typeField.type, ifaceField.type)) {\n      var _ifaceField$astNode, _typeField$astNode;\n\n      context.reportError(\n        `Interface field ${iface.name}.${fieldName} expects type ` +\n          `${inspect(ifaceField.type)} but ${type.name}.${fieldName} ` +\n          `is type ${inspect(typeField.type)}.`,\n        [\n          (_ifaceField$astNode = ifaceField.astNode) === null ||\n          _ifaceField$astNode === void 0\n            ? void 0\n            : _ifaceField$astNode.type,\n          (_typeField$astNode = typeField.astNode) === null ||\n          _typeField$astNode === void 0\n            ? void 0\n            : _typeField$astNode.type,\n        ],\n      );\n    } // Assert each interface field arg is implemented.\n\n    for (const ifaceArg of ifaceField.args) {\n      const argName = ifaceArg.name;\n      const typeArg = typeField.args.find((arg) => arg.name === argName); // Assert interface field arg exists on object field.\n\n      if (!typeArg) {\n        context.reportError(\n          `Interface field argument ${iface.name}.${fieldName}(${argName}:) expected but ${type.name}.${fieldName} does not provide it.`,\n          [ifaceArg.astNode, typeField.astNode],\n        );\n        continue;\n      } // Assert interface field arg type matches object field arg type.\n      // (invariant)\n      // TODO: change to contravariant?\n\n      if (!isEqualType(ifaceArg.type, typeArg.type)) {\n        var _ifaceArg$astNode, _typeArg$astNode;\n\n        context.reportError(\n          `Interface field argument ${iface.name}.${fieldName}(${argName}:) ` +\n            `expects type ${inspect(ifaceArg.type)} but ` +\n            `${type.name}.${fieldName}(${argName}:) is type ` +\n            `${inspect(typeArg.type)}.`,\n          [\n            (_ifaceArg$astNode = ifaceArg.astNode) === null ||\n            _ifaceArg$astNode === void 0\n              ? void 0\n              : _ifaceArg$astNode.type,\n            (_typeArg$astNode = typeArg.astNode) === null ||\n            _typeArg$astNode === void 0\n              ? void 0\n              : _typeArg$astNode.type,\n          ],\n        );\n      } // TODO: validate default values?\n    } // Assert additional arguments must not be required.\n\n    for (const typeArg of typeField.args) {\n      const argName = typeArg.name;\n      const ifaceArg = ifaceField.args.find((arg) => arg.name === argName);\n\n      if (!ifaceArg && isRequiredArgument(typeArg)) {\n        context.reportError(\n          `Object field ${type.name}.${fieldName} includes required argument ${argName} that is missing from the Interface field ${iface.name}.${fieldName}.`,\n          [typeArg.astNode, ifaceField.astNode],\n        );\n      }\n    }\n  }\n}\n\nfunction validateTypeImplementsAncestors(context, type, iface) {\n  const ifaceInterfaces = type.getInterfaces();\n\n  for (const transitive of iface.getInterfaces()) {\n    if (!ifaceInterfaces.includes(transitive)) {\n      context.reportError(\n        transitive === type\n          ? `Type ${type.name} cannot implement ${iface.name} because it would create a circular reference.`\n          : `Type ${type.name} must implement ${transitive.name} because it is implemented by ${iface.name}.`,\n        [\n          ...getAllImplementsInterfaceNodes(iface, transitive),\n          ...getAllImplementsInterfaceNodes(type, iface),\n        ],\n      );\n    }\n  }\n}\n\nfunction validateUnionMembers(context, union) {\n  const memberTypes = union.getTypes();\n\n  if (memberTypes.length === 0) {\n    context.reportError(\n      `Union type ${union.name} must define one or more member types.`,\n      [union.astNode, ...union.extensionASTNodes],\n    );\n  }\n\n  const includedTypeNames = Object.create(null);\n\n  for (const memberType of memberTypes) {\n    if (includedTypeNames[memberType.name]) {\n      context.reportError(\n        `Union type ${union.name} can only include type ${memberType.name} once.`,\n        getUnionMemberTypeNodes(union, memberType.name),\n      );\n      continue;\n    }\n\n    includedTypeNames[memberType.name] = true;\n\n    if (!isObjectType(memberType)) {\n      context.reportError(\n        `Union type ${union.name} can only include Object types, ` +\n          `it cannot include ${inspect(memberType)}.`,\n        getUnionMemberTypeNodes(union, String(memberType)),\n      );\n    }\n  }\n}\n\nfunction validateEnumValues(context, enumType) {\n  const enumValues = enumType.getValues();\n\n  if (enumValues.length === 0) {\n    context.reportError(\n      `Enum type ${enumType.name} must define one or more values.`,\n      [enumType.astNode, ...enumType.extensionASTNodes],\n    );\n  }\n\n  for (const enumValue of enumValues) {\n    // Ensure valid name.\n    validateName(context, enumValue);\n  }\n}\n\nfunction validateInputFields(context, inputObj) {\n  const fields = Object.values(inputObj.getFields());\n\n  if (fields.length === 0) {\n    context.reportError(\n      `Input Object type ${inputObj.name} must define one or more fields.`,\n      [inputObj.astNode, ...inputObj.extensionASTNodes],\n    );\n  } // Ensure the arguments are valid\n\n  for (const field of fields) {\n    // Ensure they are named correctly.\n    validateName(context, field); // Ensure the type is an input type\n\n    if (!isInputType(field.type)) {\n      var _field$astNode2;\n\n      context.reportError(\n        `The type of ${inputObj.name}.${field.name} must be Input Type ` +\n          `but got: ${inspect(field.type)}.`,\n        (_field$astNode2 = field.astNode) === null || _field$astNode2 === void 0\n          ? void 0\n          : _field$astNode2.type,\n      );\n    }\n\n    if (isRequiredInputField(field) && field.deprecationReason != null) {\n      var _field$astNode3;\n\n      context.reportError(\n        `Required input field ${inputObj.name}.${field.name} cannot be deprecated.`,\n        [\n          getDeprecatedDirectiveNode(field.astNode),\n          (_field$astNode3 = field.astNode) === null ||\n          _field$astNode3 === void 0\n            ? void 0\n            : _field$astNode3.type,\n        ],\n      );\n    }\n  }\n}\n\nfunction createInputObjectCircularRefsValidator(context) {\n  // Modified copy of algorithm from 'src/validation/rules/NoFragmentCycles.js'.\n  // Tracks already visited types to maintain O(N) and to ensure that cycles\n  // are not redundantly reported.\n  const visitedTypes = Object.create(null); // Array of types nodes used to produce meaningful errors\n\n  const fieldPath = []; // Position in the type path\n\n  const fieldPathIndexByTypeName = Object.create(null);\n  return detectCycleRecursive; // This does a straight-forward DFS to find cycles.\n  // It does not terminate when a cycle was found but continues to explore\n  // the graph to find all possible cycles.\n\n  function detectCycleRecursive(inputObj) {\n    if (visitedTypes[inputObj.name]) {\n      return;\n    }\n\n    visitedTypes[inputObj.name] = true;\n    fieldPathIndexByTypeName[inputObj.name] = fieldPath.length;\n    const fields = Object.values(inputObj.getFields());\n\n    for (const field of fields) {\n      if (isNonNullType(field.type) && isInputObjectType(field.type.ofType)) {\n        const fieldType = field.type.ofType;\n        const cycleIndex = fieldPathIndexByTypeName[fieldType.name];\n        fieldPath.push(field);\n\n        if (cycleIndex === undefined) {\n          detectCycleRecursive(fieldType);\n        } else {\n          const cyclePath = fieldPath.slice(cycleIndex);\n          const pathStr = cyclePath.map((fieldObj) => fieldObj.name).join('.');\n          context.reportError(\n            `Cannot reference Input Object \"${fieldType.name}\" within itself through a series of non-null fields: \"${pathStr}\".`,\n            cyclePath.map((fieldObj) => fieldObj.astNode),\n          );\n        }\n\n        fieldPath.pop();\n      }\n    }\n\n    fieldPathIndexByTypeName[inputObj.name] = undefined;\n  }\n}\n\nfunction getAllImplementsInterfaceNodes(type, iface) {\n  const { astNode, extensionASTNodes } = type;\n  const nodes =\n    astNode != null ? [astNode, ...extensionASTNodes] : extensionASTNodes; // FIXME: https://github.com/graphql/graphql-js/issues/2203\n\n  return nodes\n    .flatMap((typeNode) => {\n      var _typeNode$interfaces;\n\n      return (\n        /* c8 ignore next */\n        (_typeNode$interfaces = typeNode.interfaces) !== null &&\n          _typeNode$interfaces !== void 0\n          ? _typeNode$interfaces\n          : []\n      );\n    })\n    .filter((ifaceNode) => ifaceNode.name.value === iface.name);\n}\n\nfunction getUnionMemberTypeNodes(union, typeName) {\n  const { astNode, extensionASTNodes } = union;\n  const nodes =\n    astNode != null ? [astNode, ...extensionASTNodes] : extensionASTNodes; // FIXME: https://github.com/graphql/graphql-js/issues/2203\n\n  return nodes\n    .flatMap((unionNode) => {\n      var _unionNode$types;\n\n      return (\n        /* c8 ignore next */\n        (_unionNode$types = unionNode.types) !== null &&\n          _unionNode$types !== void 0\n          ? _unionNode$types\n          : []\n      );\n    })\n    .filter((typeNode) => typeNode.name.value === typeName);\n}\n\nfunction getDeprecatedDirectiveNode(definitionNode) {\n  var _definitionNode$direc;\n\n  return definitionNode === null || definitionNode === void 0\n    ? void 0\n    : (_definitionNode$direc = definitionNode.directives) === null ||\n      _definitionNode$direc === void 0\n    ? void 0\n    : _definitionNode$direc.find(\n        (node) => node.name.value === GraphQLDeprecatedDirective.name,\n      );\n}\n/utilities/printSchema.d.ts\u0001Iimport type { GraphQLNamedType } from '../type/definition';\nimport type { GraphQLSchema } from '../type/schema';\nexport declare function printSchema(schema: GraphQLSchema): string;\nexport declare function printIntrospectionSchema(schema: GraphQLSchema): string;\nexport declare function printType(type: GraphQLNamedType): string;\n/validation/specifiedRules.mjs\u0016$// Spec Section: \"Executable Definitions\"\nimport { ExecutableDefinitionsRule } from './rules/ExecutableDefinitionsRule.mjs'; // Spec Section: \"Field Selections on Objects, Interfaces, and Unions Types\"\n\nimport { FieldsOnCorrectTypeRule } from './rules/FieldsOnCorrectTypeRule.mjs'; // Spec Section: \"Fragments on Composite Types\"\n\nimport { FragmentsOnCompositeTypesRule } from './rules/FragmentsOnCompositeTypesRule.mjs'; // Spec Section: \"Argument Names\"\n\nimport {\n  KnownArgumentNamesOnDirectivesRule,\n  KnownArgumentNamesRule,\n} from './rules/KnownArgumentNamesRule.mjs'; // Spec Section: \"Directives Are Defined\"\n\nimport { KnownDirectivesRule } from './rules/KnownDirectivesRule.mjs'; // Spec Section: \"Fragment spread target defined\"\n\nimport { KnownFragmentNamesRule } from './rules/KnownFragmentNamesRule.mjs'; // Spec Section: \"Fragment Spread Type Existence\"\n\nimport { KnownTypeNamesRule } from './rules/KnownTypeNamesRule.mjs'; // Spec Section: \"Lone Anonymous Operation\"\n\nimport { LoneAnonymousOperationRule } from './rules/LoneAnonymousOperationRule.mjs'; // SDL-specific validation rules\n\nimport { LoneSchemaDefinitionRule } from './rules/LoneSchemaDefinitionRule.mjs'; // Spec Section: \"Fragments must not form cycles\"\n\nimport { NoFragmentCyclesRule } from './rules/NoFragmentCyclesRule.mjs'; // Spec Section: \"All Variable Used Defined\"\n\nimport { NoUndefinedVariablesRule } from './rules/NoUndefinedVariablesRule.mjs'; // Spec Section: \"Fragments must be used\"\n\nimport { NoUnusedFragmentsRule } from './rules/NoUnusedFragmentsRule.mjs'; // Spec Section: \"All Variables Used\"\n\nimport { NoUnusedVariablesRule } from './rules/NoUnusedVariablesRule.mjs'; // Spec Section: \"Field Selection Merging\"\n\nimport { OverlappingFieldsCanBeMergedRule } from './rules/OverlappingFieldsCanBeMergedRule.mjs'; // Spec Section: \"Fragment spread is possible\"\n\nimport { PossibleFragmentSpreadsRule } from './rules/PossibleFragmentSpreadsRule.mjs';\nimport { PossibleTypeExtensionsRule } from './rules/PossibleTypeExtensionsRule.mjs'; // Spec Section: \"Argument Optionality\"\n\nimport {\n  ProvidedRequiredArgumentsOnDirectivesRule,\n  ProvidedRequiredArgumentsRule,\n} from './rules/ProvidedRequiredArgumentsRule.mjs'; // Spec Section: \"Leaf Field Selections\"\n\nimport { ScalarLeafsRule } from './rules/ScalarLeafsRule.mjs'; // Spec Section: \"Subscriptions with Single Root Field\"\n\nimport { SingleFieldSubscriptionsRule } from './rules/SingleFieldSubscriptionsRule.mjs';\nimport { UniqueArgumentDefinitionNamesRule } from './rules/UniqueArgumentDefinitionNamesRule.mjs'; // Spec Section: \"Argument Uniqueness\"\n\nimport { UniqueArgumentNamesRule } from './rules/UniqueArgumentNamesRule.mjs';\nimport { UniqueDirectiveNamesRule } from './rules/UniqueDirectiveNamesRule.mjs'; // Spec Section: \"Directives Are Unique Per Location\"\n\nimport { UniqueDirectivesPerLocationRule } from './rules/UniqueDirectivesPerLocationRule.mjs';\nimport { UniqueEnumValueNamesRule } from './rules/UniqueEnumValueNamesRule.mjs';\nimport { UniqueFieldDefinitionNamesRule } from './rules/UniqueFieldDefinitionNamesRule.mjs'; // Spec Section: \"Fragment Name Uniqueness\"\n\nimport { UniqueFragmentNamesRule } from './rules/UniqueFragmentNamesRule.mjs'; // Spec Section: \"Input Object Field Uniqueness\"\n\nimport { UniqueInputFieldNamesRule } from './rules/UniqueInputFieldNamesRule.mjs'; // Spec Section: \"Operation Name Uniqueness\"\n\nimport { UniqueOperationNamesRule } from './rules/UniqueOperationNamesRule.mjs';\nimport { UniqueOperationTypesRule } from './rules/UniqueOperationTypesRule.mjs';\nimport { UniqueTypeNamesRule } from './rules/UniqueTypeNamesRule.mjs'; // Spec Section: \"Variable Uniqueness\"\n\nimport { UniqueVariableNamesRule } from './rules/UniqueVariableNamesRule.mjs'; // Spec Section: \"Value Type Correctness\"\n\nimport { ValuesOfCorrectTypeRule } from './rules/ValuesOfCorrectTypeRule.mjs'; // Spec Section: \"Variables are Input Types\"\n\nimport { VariablesAreInputTypesRule } from './rules/VariablesAreInputTypesRule.mjs'; // Spec Section: \"All Variable Usages Are Allowed\"\n\nimport { VariablesInAllowedPositionRule } from './rules/VariablesInAllowedPositionRule.mjs';\n\n/**\n * This set includes all validation rules defined by the GraphQL spec.\n *\n * The order of the rules in this list has been adjusted to lead to the\n * most clear output when encountering multiple validation errors.\n */\nexport const specifiedRules = Object.freeze([\n  ExecutableDefinitionsRule,\n  UniqueOperationNamesRule,\n  LoneAnonymousOperationRule,\n  SingleFieldSubscriptionsRule,\n  KnownTypeNamesRule,\n  FragmentsOnCompositeTypesRule,\n  VariablesAreInputTypesRule,\n  ScalarLeafsRule,\n  FieldsOnCorrectTypeRule,\n  UniqueFragmentNamesRule,\n  KnownFragmentNamesRule,\n  NoUnusedFragmentsRule,\n  PossibleFragmentSpreadsRule,\n  NoFragmentCyclesRule,\n  UniqueVariableNamesRule,\n  NoUndefinedVariablesRule,\n  NoUnusedVariablesRule,\n  KnownDirectivesRule,\n  UniqueDirectivesPerLocationRule,\n  KnownArgumentNamesRule,\n  UniqueArgumentNamesRule,\n  ValuesOfCorrectTypeRule,\n  ProvidedRequiredArgumentsRule,\n  VariablesInAllowedPositionRule,\n  OverlappingFieldsCanBeMergedRule,\n  UniqueInputFieldNamesRule,\n]);\n/**\n * @internal\n */\n\nexport const specifiedSDLRules = Object.freeze([\n  LoneSchemaDefinitionRule,\n  UniqueOperationTypesRule,\n  UniqueTypeNamesRule,\n  UniqueEnumValueNamesRule,\n  UniqueFieldDefinitionNamesRule,\n  UniqueArgumentDefinitionNamesRule,\n  UniqueDirectiveNamesRule,\n  KnownTypeNamesRule,\n  KnownDirectivesRule,\n  UniqueDirectivesPerLocationRule,\n  PossibleTypeExtensionsRule,\n  KnownArgumentNamesOnDirectivesRule,\n  UniqueArgumentNamesRule,\n  UniqueInputFieldNamesRule,\n  ProvidedRequiredArgumentsOnDirectivesRule,\n]);\n/jsutils/instanceOf.mjs\bimport { inspect } from './inspect.mjs';\n/**\n * A replacement for instanceof which includes an error warning when multi-realm\n * constructors are detected.\n * See: https://expressjs.com/en/advanced/best-practice-performance.html#set-node_env-to-production\n * See: https://webpack.js.org/guides/production/\n */\n\nexport const instanceOf =\n  /* c8 ignore next 6 */\n  // FIXME: https://github.com/graphql/graphql-js/issues/2317\n  // eslint-disable-next-line no-undef\n  process.env.NODE_ENV === 'production'\n    ? function instanceOf(value, constructor) {\n        return value instanceof constructor;\n      }\n    : function instanceOf(value, constructor) {\n        if (value instanceof constructor) {\n          return true;\n        }\n\n        if (typeof value === 'object' && value !== null) {\n          var _value$constructor;\n\n          // Prefer Symbol.toStringTag since it is immune to minification.\n          const className = constructor.prototype[Symbol.toStringTag];\n          const valueClassName = // We still need to support constructor's name to detect conflicts with older versions of this library.\n            Symbol.toStringTag in value // @ts-expect-error TS bug see, https://github.com/microsoft/TypeScript/issues/38009\n              ? value[Symbol.toStringTag]\n              : (_value$constructor = value.constructor) === null ||\n                _value$constructor === void 0\n              ? void 0\n              : _value$constructor.name;\n\n          if (className === valueClassName) {\n            const stringifiedValue = inspect(value);\n            throw new Error(`Cannot use ${className} \"${stringifiedValue}\" from another module or realm.\n\nEnsure that there is only one instance of \"graphql\" in the node_modules\ndirectory. If different versions of \"graphql\" are the dependencies of other\nrelied on modules, use \"resolutions\" to ensure only one version is installed.\n\nhttps://yarnpkg.com/en/docs/selective-version-resolutions\n\nDuplicate \"graphql\" modules cannot be used at the same time since different\nversions may have different capabilities and behavior. The data from one\nversion used in the function from another could produce confusing and\nspurious results.`);\n          }\n        }\n\n        return false;\n      };\n3/validation/rules/SingleFieldSubscriptionsRule.d.ts\u0001import type { ASTVisitor } from '../../language/visitor';\nimport type { ValidationContext } from '../ValidationContext';\n/**\n * Subscriptions must only include a non-introspection field.\n *\n * A GraphQL subscription is valid only if it contains a single root field and\n * that root field is not an introspection field.\n *\n * See https://spec.graphql.org/draft/#sec-Single-root-field\n */\nexport declare function SingleFieldSubscriptionsRule(\n  context: ValidationContext,\n): ASTVisitor;\n./validation/rules/ExecutableDefinitionsRule.js\u0004'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.ExecutableDefinitionsRule = ExecutableDefinitionsRule;\n\nvar _GraphQLError = require('../../error/GraphQLError.js');\n\nvar _kinds = require('../../language/kinds.js');\n\nvar _predicates = require('../../language/predicates.js');\n\n/**\n * Executable definitions\n *\n * A GraphQL document is only valid for execution if all definitions are either\n * operation or fragment definitions.\n *\n * See https://spec.graphql.org/draft/#sec-Executable-Definitions\n */\nfunction ExecutableDefinitionsRule(context) {\n  return {\n    Document(node) {\n      for (const definition of node.definitions) {\n        if (!(0, _predicates.isExecutableDefinitionNode)(definition)) {\n          const defName =\n            definition.kind === _kinds.Kind.SCHEMA_DEFINITION ||\n            definition.kind === _kinds.Kind.SCHEMA_EXTENSION\n              ? 'schema'\n              : '\"' + definition.name.value + '\"';\n          context.reportError(\n            new _GraphQLError.GraphQLError(\n              `The ${defName} definition is not executable.`,\n              {\n                nodes: definition,\n              },\n            ),\n          );\n        }\n      }\n\n      return false;\n    },\n  };\n}\n</validation/rules/custom/NoSchemaIntrospectionCustomRule.mjs\u0004,import { GraphQLError } from '../../../error/GraphQLError.mjs';\nimport { getNamedType } from '../../../type/definition.mjs';\nimport { isIntrospectionType } from '../../../type/introspection.mjs';\n\n/**\n * Prohibit introspection queries\n *\n * A GraphQL document is only valid if all fields selected are not fields that\n * return an introspection type.\n *\n * Note: This rule is optional and is not part of the Validation section of the\n * GraphQL Specification. This rule effectively disables introspection, which\n * does not reflect best practices and should only be done if absolutely necessary.\n */\nexport function NoSchemaIntrospectionCustomRule(context) {\n  return {\n    Field(node) {\n      const type = getNamedType(context.getType());\n\n      if (type && isIntrospectionType(type)) {\n        context.reportError(\n          new GraphQLError(\n            `GraphQL introspection has been disabled, but the requested query contained the field \"${node.name.value}\".`,\n            {\n              nodes: node,\n            },\n          ),\n        );\n      }\n    },\n  };\n}\n/language/blockString.mjs\u0012import { isWhiteSpace } from './characterClasses.mjs';\n/**\n * Produces the value of a block string from its parsed raw value, similar to\n * CoffeeScript's block string, Python's docstring trim or Ruby's strip_heredoc.\n *\n * This implements the GraphQL spec's BlockStringValue() static algorithm.\n *\n * @internal\n */\n\nexport function dedentBlockStringLines(lines) {\n  var _firstNonEmptyLine2;\n\n  let commonIndent = Number.MAX_SAFE_INTEGER;\n  let firstNonEmptyLine = null;\n  let lastNonEmptyLine = -1;\n\n  for (let i = 0; i < lines.length; ++i) {\n    var _firstNonEmptyLine;\n\n    const line = lines[i];\n    const indent = leadingWhitespace(line);\n\n    if (indent === line.length) {\n      continue; // skip empty lines\n    }\n\n    firstNonEmptyLine =\n      (_firstNonEmptyLine = firstNonEmptyLine) !== null &&\n      _firstNonEmptyLine !== void 0\n        ? _firstNonEmptyLine\n        : i;\n    lastNonEmptyLine = i;\n\n    if (i !== 0 && indent < commonIndent) {\n      commonIndent = indent;\n    }\n  }\n\n  return lines // Remove common indentation from all lines but first.\n    .map((line, i) => (i === 0 ? line : line.slice(commonIndent))) // Remove leading and trailing blank lines.\n    .slice(\n      (_firstNonEmptyLine2 = firstNonEmptyLine) !== null &&\n        _firstNonEmptyLine2 !== void 0\n        ? _firstNonEmptyLine2\n        : 0,\n      lastNonEmptyLine + 1,\n    );\n}\n\nfunction leadingWhitespace(str) {\n  let i = 0;\n\n  while (i < str.length && isWhiteSpace(str.charCodeAt(i))) {\n    ++i;\n  }\n\n  return i;\n}\n/**\n * @internal\n */\n\nexport function isPrintableAsBlockString(value) {\n  if (value === '') {\n    return true; // empty string is printable\n  }\n\n  let isEmptyLine = true;\n  let hasIndent = false;\n  let hasCommonIndent = true;\n  let seenNonEmptyLine = false;\n\n  for (let i = 0; i < value.length; ++i) {\n    switch (value.codePointAt(i)) {\n      case 0x0000:\n      case 0x0001:\n      case 0x0002:\n      case 0x0003:\n      case 0x0004:\n      case 0x0005:\n      case 0x0006:\n      case 0x0007:\n      case 0x0008:\n      case 0x000b:\n      case 0x000c:\n      case 0x000e:\n      case 0x000f:\n        return false;\n      // Has non-printable characters\n\n      case 0x000d:\n        //  \\r\n        return false;\n      // Has \\r or \\r\\n which will be replaced as \\n\n\n      case 10:\n        //  \\n\n        if (isEmptyLine && !seenNonEmptyLine) {\n          return false; // Has leading new line\n        }\n\n        seenNonEmptyLine = true;\n        isEmptyLine = true;\n        hasIndent = false;\n        break;\n\n      case 9: //   \\t\n\n      case 32:\n        //  <space>\n        hasIndent || (hasIndent = isEmptyLine);\n        break;\n\n      default:\n        hasCommonIndent && (hasCommonIndent = hasIndent);\n        isEmptyLine = false;\n    }\n  }\n\n  if (isEmptyLine) {\n    return false; // Has trailing empty lines\n  }\n\n  if (hasCommonIndent && seenNonEmptyLine) {\n    return false; // Has internal indent\n  }\n\n  return true;\n}\n/**\n * Print a block string in the indented block form by adding a leading and\n * trailing blank line. However, if a block string starts with whitespace and is\n * a single-line, adding a leading blank line would strip that whitespace.\n *\n * @internal\n */\n\nexport function printBlockString(value, options) {\n  const escapedValue = value.replace(/\"\"\"/g, '\\\\\"\"\"'); // Expand a block string's raw value into independent lines.\n\n  const lines = escapedValue.split(/\\r\\n|[\\n\\r]/g);\n  const isSingleLine = lines.length === 1; // If common indentation is found we can fix some of those cases by adding leading new line\n\n  const forceLeadingNewLine =\n    lines.length > 1 &&\n    lines\n      .slice(1)\n      .every((line) => line.length === 0 || isWhiteSpace(line.charCodeAt(0))); // Trailing triple quotes just looks confusing but doesn't force trailing new line\n\n  const hasTrailingTripleQuotes = escapedValue.endsWith('\\\\\"\"\"'); // Trailing quote (single or double) or slash forces trailing new line\n\n  const hasTrailingQuote = value.endsWith('\"') && !hasTrailingTripleQuotes;\n  const hasTrailingSlash = value.endsWith('\\\\');\n  const forceTrailingNewline = hasTrailingQuote || hasTrailingSlash;\n  const printAsMultipleLines =\n    !(options !== null && options !== void 0 && options.minimize) && // add leading and trailing new lines only if it improves readability\n    (!isSingleLine ||\n      value.length > 70 ||\n      forceTrailingNewline ||\n      forceLeadingNewLine ||\n      hasTrailingTripleQuotes);\n  let result = ''; // Format a multi-line block quote to account for leading space.\n\n  const skipLeadingNewLine = isSingleLine && isWhiteSpace(value.charCodeAt(0));\n\n  if ((printAsMultipleLines && !skipLeadingNewLine) || forceLeadingNewLine) {\n    result += '\\n';\n  }\n\n  result += escapedValue;\n\n  if (printAsMultipleLines || forceTrailingNewline) {\n    result += '\\n';\n  }\n\n  return '\"\"\"' + result + '\"\"\"';\n}\n/language/printer.d.tsĶimport type { ASTNode } from './ast';\n/**\n * Converts an AST into a string, using one set of reasonable\n * formatting rules.\n */\nexport declare function print(ast: ASTNode): string;\n%/utilities/lexicographicSortSchema.js\u0012'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.lexicographicSortSchema = lexicographicSortSchema;\n\nvar _inspect = require('../jsutils/inspect.js');\n\nvar _invariant = require('../jsutils/invariant.js');\n\nvar _keyValMap = require('../jsutils/keyValMap.js');\n\nvar _naturalCompare = require('../jsutils/naturalCompare.js');\n\nvar _definition = require('../type/definition.js');\n\nvar _directives = require('../type/directives.js');\n\nvar _introspection = require('../type/introspection.js');\n\nvar _schema = require('../type/schema.js');\n\n/**\n * Sort GraphQLSchema.\n *\n * This function returns a sorted copy of the given GraphQLSchema.\n */\nfunction lexicographicSortSchema(schema) {\n  const schemaConfig = schema.toConfig();\n  const typeMap = (0, _keyValMap.keyValMap)(\n    sortByName(schemaConfig.types),\n    (type) => type.name,\n    sortNamedType,\n  );\n  return new _schema.GraphQLSchema({\n    ...schemaConfig,\n    types: Object.values(typeMap),\n    directives: sortByName(schemaConfig.directives).map(sortDirective),\n    query: replaceMaybeType(schemaConfig.query),\n    mutation: replaceMaybeType(schemaConfig.mutation),\n    subscription: replaceMaybeType(schemaConfig.subscription),\n  });\n\n  function replaceType(type) {\n    if ((0, _definition.isListType)(type)) {\n      // @ts-expect-error\n      return new _definition.GraphQLList(replaceType(type.ofType));\n    } else if ((0, _definition.isNonNullType)(type)) {\n      // @ts-expect-error\n      return new _definition.GraphQLNonNull(replaceType(type.ofType));\n    } // @ts-expect-error FIXME: TS Conversion\n\n    return replaceNamedType(type);\n  }\n\n  function replaceNamedType(type) {\n    return typeMap[type.name];\n  }\n\n  function replaceMaybeType(maybeType) {\n    return maybeType && replaceNamedType(maybeType);\n  }\n\n  function sortDirective(directive) {\n    const config = directive.toConfig();\n    return new _directives.GraphQLDirective({\n      ...config,\n      locations: sortBy(config.locations, (x) => x),\n      args: sortArgs(config.args),\n    });\n  }\n\n  function sortArgs(args) {\n    return sortObjMap(args, (arg) => ({ ...arg, type: replaceType(arg.type) }));\n  }\n\n  function sortFields(fieldsMap) {\n    return sortObjMap(fieldsMap, (field) => ({\n      ...field,\n      type: replaceType(field.type),\n      args: field.args && sortArgs(field.args),\n    }));\n  }\n\n  function sortInputFields(fieldsMap) {\n    return sortObjMap(fieldsMap, (field) => ({\n      ...field,\n      type: replaceType(field.type),\n    }));\n  }\n\n  function sortTypes(array) {\n    return sortByName(array).map(replaceNamedType);\n  }\n\n  function sortNamedType(type) {\n    if (\n      (0, _definition.isScalarType)(type) ||\n      (0, _introspection.isIntrospectionType)(type)\n    ) {\n      return type;\n    }\n\n    if ((0, _definition.isObjectType)(type)) {\n      const config = type.toConfig();\n      return new _definition.GraphQLObjectType({\n        ...config,\n        interfaces: () => sortTypes(config.interfaces),\n        fields: () => sortFields(config.fields),\n      });\n    }\n\n    if ((0, _definition.isInterfaceType)(type)) {\n      const config = type.toConfig();\n      return new _definition.GraphQLInterfaceType({\n        ...config,\n        interfaces: () => sortTypes(config.interfaces),\n        fields: () => sortFields(config.fields),\n      });\n    }\n\n    if ((0, _definition.isUnionType)(type)) {\n      const config = type.toConfig();\n      return new _definition.GraphQLUnionType({\n        ...config,\n        types: () => sortTypes(config.types),\n      });\n    }\n\n    if ((0, _definition.isEnumType)(type)) {\n      const config = type.toConfig();\n      return new _definition.GraphQLEnumType({\n        ...config,\n        values: sortObjMap(config.values, (value) => value),\n      });\n    }\n\n    if ((0, _definition.isInputObjectType)(type)) {\n      const config = type.toConfig();\n      return new _definition.GraphQLInputObjectType({\n        ...config,\n        fields: () => sortInputFields(config.fields),\n      });\n    }\n    /* c8 ignore next 3 */\n    // Not reachable, all possible types have been considered.\n\n    false ||\n      (0, _invariant.invariant)(\n        false,\n        'Unexpected type: ' + (0, _inspect.inspect)(type),\n      );\n  }\n}\n\nfunction sortObjMap(map, sortValueFn) {\n  const sortedMap = Object.create(null);\n\n  for (const key of Object.keys(map).sort(_naturalCompare.naturalCompare)) {\n    sortedMap[key] = sortValueFn(map[key]);\n  }\n\n  return sortedMap;\n}\n\nfunction sortByName(array) {\n  return sortBy(array, (obj) => obj.name);\n}\n\nfunction sortBy(array, mapToKey) {\n  return array.slice().sort((obj1, obj2) => {\n    const key1 = mapToKey(obj1);\n    const key2 = mapToKey(obj2);\n    return (0, _naturalCompare.naturalCompare)(key1, key2);\n  });\n}\n/jsutils/promiseReduce.d.ts\u0002\fimport type { PromiseOrValue } from './PromiseOrValue';\n/**\n * Similar to Array.prototype.reduce(), however the reducing callback may return\n * a Promise, in which case reduction will continue after each promise resolves.\n *\n * If the callback does not return a Promise, then this function will also not\n * return a Promise.\n */\nexport declare function promiseReduce<T, U>(\n  values: Iterable<T>,\n  callbackFn: (accumulator: U, currentValue: T) => PromiseOrValue<U>,\n  initialValue: PromiseOrValue<U>,\n): PromiseOrValue<U>;\n//validation/rules/UniqueDirectiveNamesRule.d.ts\u0001Timport type { ASTVisitor } from '../../language/visitor';\nimport type { SDLValidationContext } from '../ValidationContext';\n/**\n * Unique directive names\n *\n * A GraphQL document is only valid if all defined directives have unique names.\n */\nexport declare function UniqueDirectiveNamesRule(\n  context: SDLValidationContext,\n): ASTVisitor;\n/jsutils/keyValMap.js\u0002'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.keyValMap = keyValMap;\n\n/**\n * Creates a keyed JS object from an array, given a function to produce the keys\n * and a function to produce the values from each item in the array.\n * ```ts\n * const phoneBook = [\n *   { name: 'Jon', num: '555-1234' },\n *   { name: 'Jenny', num: '867-5309' }\n * ]\n *\n * // { Jon: '555-1234', Jenny: '867-5309' }\n * const phonesByName = keyValMap(\n *   phoneBook,\n *   entry => entry.name,\n *   entry => entry.num\n * )\n * ```\n */\nfunction keyValMap(list, keyFn, valFn) {\n  const result = Object.create(null);\n\n  for (const item of list) {\n    result[keyFn(item)] = valFn(item);\n  }\n\n  return result;\n}\n/jsutils/Path.js\u0002''use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.addPath = addPath;\nexports.pathToArray = pathToArray;\n\n/**\n * Given a Path and a key, return a new Path containing the new key.\n */\nfunction addPath(prev, key, typename) {\n  return {\n    prev,\n    key,\n    typename,\n  };\n}\n/**\n * Given a Path, return an Array of the path keys.\n */\n\nfunction pathToArray(path) {\n  const flattened = [];\n  let curr = path;\n\n  while (curr) {\n    flattened.push(curr.key);\n    curr = curr.prev;\n  }\n\n  return flattened.reverse();\n}\n%/utilities/stripIgnoredCharacters.mjs\nimport { printBlockString } from '../language/blockString.mjs';\nimport { isPunctuatorTokenKind, Lexer } from '../language/lexer.mjs';\nimport { isSource, Source } from '../language/source.mjs';\nimport { TokenKind } from '../language/tokenKind.mjs';\n/**\n * Strips characters that are not significant to the validity or execution\n * of a GraphQL document:\n *   - UnicodeBOM\n *   - WhiteSpace\n *   - LineTerminator\n *   - Comment\n *   - Comma\n *   - BlockString indentation\n *\n * Note: It is required to have a delimiter character between neighboring\n * non-punctuator tokens and this function always uses single space as delimiter.\n *\n * It is guaranteed that both input and output documents if parsed would result\n * in the exact same AST except for nodes location.\n *\n * Warning: It is guaranteed that this function will always produce stable results.\n * However, it's not guaranteed that it will stay the same between different\n * releases due to bugfixes or changes in the GraphQL specification.\n *\n * Query example:\n *\n * ```graphql\n * query SomeQuery($foo: String!, $bar: String) {\n *   someField(foo: $foo, bar: $bar) {\n *     a\n *     b {\n *       c\n *       d\n *     }\n *   }\n * }\n * ```\n *\n * Becomes:\n *\n * ```graphql\n * query SomeQuery($foo:String!$bar:String){someField(foo:$foo bar:$bar){a b{c d}}}\n * ```\n *\n * SDL example:\n *\n * ```graphql\n * \"\"\"\n * Type description\n * \"\"\"\n * type Foo {\n *   \"\"\"\n *   Field description\n *   \"\"\"\n *   bar: String\n * }\n * ```\n *\n * Becomes:\n *\n * ```graphql\n * \"\"\"Type description\"\"\" type Foo{\"\"\"Field description\"\"\" bar:String}\n * ```\n */\n\nexport function stripIgnoredCharacters(source) {\n  const sourceObj = isSource(source) ? source : new Source(source);\n  const body = sourceObj.body;\n  const lexer = new Lexer(sourceObj);\n  let strippedBody = '';\n  let wasLastAddedTokenNonPunctuator = false;\n\n  while (lexer.advance().kind !== TokenKind.EOF) {\n    const currentToken = lexer.token;\n    const tokenKind = currentToken.kind;\n    /**\n     * Every two non-punctuator tokens should have space between them.\n     * Also prevent case of non-punctuator token following by spread resulting\n     * in invalid token (e.g. `1...` is invalid Float token).\n     */\n\n    const isNonPunctuator = !isPunctuatorTokenKind(currentToken.kind);\n\n    if (wasLastAddedTokenNonPunctuator) {\n      if (isNonPunctuator || currentToken.kind === TokenKind.SPREAD) {\n        strippedBody += ' ';\n      }\n    }\n\n    const tokenBody = body.slice(currentToken.start, currentToken.end);\n\n    if (tokenKind === TokenKind.BLOCK_STRING) {\n      strippedBody += printBlockString(currentToken.value, {\n        minimize: true,\n      });\n    } else {\n      strippedBody += tokenBody;\n    }\n\n    wasLastAddedTokenNonPunctuator = isNonPunctuator;\n  }\n\n  return strippedBody;\n}\n/language/parser.d.tsBimport type { Maybe } from '../jsutils/Maybe';\nimport type { GraphQLError } from '../error/GraphQLError';\nimport type {\n  ArgumentNode,\n  ConstArgumentNode,\n  ConstDirectiveNode,\n  ConstListValueNode,\n  ConstObjectFieldNode,\n  ConstObjectValueNode,\n  ConstValueNode,\n  DefinitionNode,\n  DirectiveDefinitionNode,\n  DirectiveNode,\n  DocumentNode,\n  EnumTypeDefinitionNode,\n  EnumTypeExtensionNode,\n  EnumValueDefinitionNode,\n  FieldDefinitionNode,\n  FieldNode,\n  FragmentDefinitionNode,\n  FragmentSpreadNode,\n  InlineFragmentNode,\n  InputObjectTypeDefinitionNode,\n  InputObjectTypeExtensionNode,\n  InputValueDefinitionNode,\n  InterfaceTypeDefinitionNode,\n  InterfaceTypeExtensionNode,\n  ListValueNode,\n  NamedTypeNode,\n  NameNode,\n  ObjectFieldNode,\n  ObjectTypeDefinitionNode,\n  ObjectTypeExtensionNode,\n  ObjectValueNode,\n  OperationDefinitionNode,\n  OperationTypeDefinitionNode,\n  ScalarTypeDefinitionNode,\n  ScalarTypeExtensionNode,\n  SchemaDefinitionNode,\n  SchemaExtensionNode,\n  SelectionNode,\n  SelectionSetNode,\n  StringValueNode,\n  Token,\n  TypeNode,\n  TypeSystemExtensionNode,\n  UnionTypeDefinitionNode,\n  UnionTypeExtensionNode,\n  ValueNode,\n  VariableDefinitionNode,\n  VariableNode,\n} from './ast';\nimport { Location, OperationTypeNode } from './ast';\nimport { Lexer } from './lexer';\nimport { Source } from './source';\nimport { TokenKind } from './tokenKind';\n/**\n * Configuration options to control parser behavior\n */\nexport interface ParseOptions {\n  /**\n   * By default, the parser creates AST nodes that know the location\n   * in the source that they correspond to. This configuration flag\n   * disables that behavior for performance or testing.\n   */\n  noLocation?: boolean;\n  /**\n   * Parser CPU and memory usage is linear to the number of tokens in a document\n   * however in extreme cases it becomes quadratic due to memory exhaustion.\n   * Parsing happens before validation so even invalid queries can burn lots of\n   * CPU time and memory.\n   * To prevent this you can set a maximum number of tokens allowed within a document.\n   */\n  maxTokens?: number | undefined;\n  /**\n   * @deprecated will be removed in the v17.0.0\n   *\n   * If enabled, the parser will understand and parse variable definitions\n   * contained in a fragment definition. They'll be represented in the\n   * `variableDefinitions` field of the FragmentDefinitionNode.\n   *\n   * The syntax is identical to normal, query-defined variables. For example:\n   *\n   * ```graphql\n   * fragment A($var: Boolean = false) on T {\n   *   ...\n   * }\n   * ```\n   */\n  allowLegacyFragmentVariables?: boolean;\n}\n/**\n * Given a GraphQL source, parses it into a Document.\n * Throws GraphQLError if a syntax error is encountered.\n */\nexport declare function parse(\n  source: string | Source,\n  options?: ParseOptions | undefined,\n): DocumentNode;\n/**\n * Given a string containing a GraphQL value (ex. `[42]`), parse the AST for\n * that value.\n * Throws GraphQLError if a syntax error is encountered.\n *\n * This is useful within tools that operate upon GraphQL Values directly and\n * in isolation of complete GraphQL documents.\n *\n * Consider providing the results to the utility function: valueFromAST().\n */\nexport declare function parseValue(\n  source: string | Source,\n  options?: ParseOptions | undefined,\n): ValueNode;\n/**\n * Similar to parseValue(), but raises a parse error if it encounters a\n * variable. The return type will be a constant value.\n */\nexport declare function parseConstValue(\n  source: string | Source,\n  options?: ParseOptions | undefined,\n): ConstValueNode;\n/**\n * Given a string containing a GraphQL Type (ex. `[Int!]`), parse the AST for\n * that type.\n * Throws GraphQLError if a syntax error is encountered.\n *\n * This is useful within tools that operate upon GraphQL Types directly and\n * in isolation of complete GraphQL documents.\n *\n * Consider providing the results to the utility function: typeFromAST().\n */\nexport declare function parseType(\n  source: string | Source,\n  options?: ParseOptions | undefined,\n): TypeNode;\n/**\n * This class is exported only to assist people in implementing their own parsers\n * without duplicating too much code and should be used only as last resort for cases\n * such as experimental syntax or if certain features could not be contributed upstream.\n *\n * It is still part of the internal API and is versioned, so any changes to it are never\n * considered breaking changes. If you still need to support multiple versions of the\n * library, please use the `versionInfo` variable for version detection.\n *\n * @internal\n */\nexport declare class Parser {\n  protected _options: ParseOptions;\n  protected _lexer: Lexer;\n  protected _tokenCounter: number;\n  constructor(source: string | Source, options?: ParseOptions);\n  /**\n   * Converts a name lex token into a name parse node.\n   */\n  parseName(): NameNode;\n  /**\n   * Document : Definition+\n   */\n  parseDocument(): DocumentNode;\n  /**\n   * Definition :\n   *   - ExecutableDefinition\n   *   - TypeSystemDefinition\n   *   - TypeSystemExtension\n   *\n   * ExecutableDefinition :\n   *   - OperationDefinition\n   *   - FragmentDefinition\n   *\n   * TypeSystemDefinition :\n   *   - SchemaDefinition\n   *   - TypeDefinition\n   *   - DirectiveDefinition\n   *\n   * TypeDefinition :\n   *   - ScalarTypeDefinition\n   *   - ObjectTypeDefinition\n   *   - InterfaceTypeDefinition\n   *   - UnionTypeDefinition\n   *   - EnumTypeDefinition\n   *   - InputObjectTypeDefinition\n   */\n  parseDefinition(): DefinitionNode;\n  /**\n   * OperationDefinition :\n   *  - SelectionSet\n   *  - OperationType Name? VariableDefinitions? Directives? SelectionSet\n   */\n  parseOperationDefinition(): OperationDefinitionNode;\n  /**\n   * OperationType : one of query mutation subscription\n   */\n  parseOperationType(): OperationTypeNode;\n  /**\n   * VariableDefinitions : ( VariableDefinition+ )\n   */\n  parseVariableDefinitions(): Array<VariableDefinitionNode>;\n  /**\n   * VariableDefinition : Variable : Type DefaultValue? Directives[Const]?\n   */\n  parseVariableDefinition(): VariableDefinitionNode;\n  /**\n   * Variable : $ Name\n   */\n  parseVariable(): VariableNode;\n  /**\n   * ```\n   * SelectionSet : { Selection+ }\n   * ```\n   */\n  parseSelectionSet(): SelectionSetNode;\n  /**\n   * Selection :\n   *   - Field\n   *   - FragmentSpread\n   *   - InlineFragment\n   */\n  parseSelection(): SelectionNode;\n  /**\n   * Field : Alias? Name Arguments? Directives? SelectionSet?\n   *\n   * Alias : Name :\n   */\n  parseField(): FieldNode;\n  /**\n   * Arguments[Const] : ( Argument[?Const]+ )\n   */\n  parseArguments(isConst: true): Array<ConstArgumentNode>;\n  parseArguments(isConst: boolean): Array<ArgumentNode>;\n  /**\n   * Argument[Const] : Name : Value[?Const]\n   */\n  parseArgument(isConst: true): ConstArgumentNode;\n  parseArgument(isConst?: boolean): ArgumentNode;\n  parseConstArgument(): ConstArgumentNode;\n  /**\n   * Corresponds to both FragmentSpread and InlineFragment in the spec.\n   *\n   * FragmentSpread : ... FragmentName Directives?\n   *\n   * InlineFragment : ... TypeCondition? Directives? SelectionSet\n   */\n  parseFragment(): FragmentSpreadNode | InlineFragmentNode;\n  /**\n   * FragmentDefinition :\n   *   - fragment FragmentName on TypeCondition Directives? SelectionSet\n   *\n   * TypeCondition : NamedType\n   */\n  parseFragmentDefinition(): FragmentDefinitionNode;\n  /**\n   * FragmentName : Name but not `on`\n   */\n  parseFragmentName(): NameNode;\n  /**\n   * Value[Const] :\n   *   - [~Const] Variable\n   *   - IntValue\n   *   - FloatValue\n   *   - StringValue\n   *   - BooleanValue\n   *   - NullValue\n   *   - EnumValue\n   *   - ListValue[?Const]\n   *   - ObjectValue[?Const]\n   *\n   * BooleanValue : one of `true` `false`\n   *\n   * NullValue : `null`\n   *\n   * EnumValue : Name but not `true`, `false` or `null`\n   */\n  parseValueLiteral(isConst: true): ConstValueNode;\n  parseValueLiteral(isConst: boolean): ValueNode;\n  parseConstValueLiteral(): ConstValueNode;\n  parseStringLiteral(): StringValueNode;\n  /**\n   * ListValue[Const] :\n   *   - [ ]\n   *   - [ Value[?Const]+ ]\n   */\n  parseList(isConst: true): ConstListValueNode;\n  parseList(isConst: boolean): ListValueNode;\n  /**\n   * ```\n   * ObjectValue[Const] :\n   *   - { }\n   *   - { ObjectField[?Const]+ }\n   * ```\n   */\n  parseObject(isConst: true): ConstObjectValueNode;\n  parseObject(isConst: boolean): ObjectValueNode;\n  /**\n   * ObjectField[Const] : Name : Value[?Const]\n   */\n  parseObjectField(isConst: true): ConstObjectFieldNode;\n  parseObjectField(isConst: boolean): ObjectFieldNode;\n  /**\n   * Directives[Const] : Directive[?Const]+\n   */\n  parseDirectives(isConst: true): Array<ConstDirectiveNode>;\n  parseDirectives(isConst: boolean): Array<DirectiveNode>;\n  parseConstDirectives(): Array<ConstDirectiveNode>;\n  /**\n   * ```\n   * Directive[Const] : @ Name Arguments[?Const]?\n   * ```\n   */\n  parseDirective(isConst: true): ConstDirectiveNode;\n  parseDirective(isConst: boolean): DirectiveNode;\n  /**\n   * Type :\n   *   - NamedType\n   *   - ListType\n   *   - NonNullType\n   */\n  parseTypeReference(): TypeNode;\n  /**\n   * NamedType : Name\n   */\n  parseNamedType(): NamedTypeNode;\n  peekDescription(): boolean;\n  /**\n   * Description : StringValue\n   */\n  parseDescription(): undefined | StringValueNode;\n  /**\n   * ```\n   * SchemaDefinition : Description? schema Directives[Const]? { OperationTypeDefinition+ }\n   * ```\n   */\n  parseSchemaDefinition(): SchemaDefinitionNode;\n  /**\n   * OperationTypeDefinition : OperationType : NamedType\n   */\n  parseOperationTypeDefinition(): OperationTypeDefinitionNode;\n  /**\n   * ScalarTypeDefinition : Description? scalar Name Directives[Const]?\n   */\n  parseScalarTypeDefinition(): ScalarTypeDefinitionNode;\n  /**\n   * ObjectTypeDefinition :\n   *   Description?\n   *   type Name ImplementsInterfaces? Directives[Const]? FieldsDefinition?\n   */\n  parseObjectTypeDefinition(): ObjectTypeDefinitionNode;\n  /**\n   * ImplementsInterfaces :\n   *   - implements `&`? NamedType\n   *   - ImplementsInterfaces & NamedType\n   */\n  parseImplementsInterfaces(): Array<NamedTypeNode>;\n  /**\n   * ```\n   * FieldsDefinition : { FieldDefinition+ }\n   * ```\n   */\n  parseFieldsDefinition(): Array<FieldDefinitionNode>;\n  /**\n   * FieldDefinition :\n   *   - Description? Name ArgumentsDefinition? : Type Directives[Const]?\n   */\n  parseFieldDefinition(): FieldDefinitionNode;\n  /**\n   * ArgumentsDefinition : ( InputValueDefinition+ )\n   */\n  parseArgumentDefs(): Array<InputValueDefinitionNode>;\n  /**\n   * InputValueDefinition :\n   *   - Description? Name : Type DefaultValue? Directives[Const]?\n   */\n  parseInputValueDef(): InputValueDefinitionNode;\n  /**\n   * InterfaceTypeDefinition :\n   *   - Description? interface Name Directives[Const]? FieldsDefinition?\n   */\n  parseInterfaceTypeDefinition(): InterfaceTypeDefinitionNode;\n  /**\n   * UnionTypeDefinition :\n   *   - Description? union Name Directives[Const]? UnionMemberTypes?\n   */\n  parseUnionTypeDefinition(): UnionTypeDefinitionNode;\n  /**\n   * UnionMemberTypes :\n   *   - = `|`? NamedType\n   *   - UnionMemberTypes | NamedType\n   */\n  parseUnionMemberTypes(): Array<NamedTypeNode>;\n  /**\n   * EnumTypeDefinition :\n   *   - Description? enum Name Directives[Const]? EnumValuesDefinition?\n   */\n  parseEnumTypeDefinition(): EnumTypeDefinitionNode;\n  /**\n   * ```\n   * EnumValuesDefinition : { EnumValueDefinition+ }\n   * ```\n   */\n  parseEnumValuesDefinition(): Array<EnumValueDefinitionNode>;\n  /**\n   * EnumValueDefinition : Description? EnumValue Directives[Const]?\n   */\n  parseEnumValueDefinition(): EnumValueDefinitionNode;\n  /**\n   * EnumValue : Name but not `true`, `false` or `null`\n   */\n  parseEnumValueName(): NameNode;\n  /**\n   * InputObjectTypeDefinition :\n   *   - Description? input Name Directives[Const]? InputFieldsDefinition?\n   */\n  parseInputObjectTypeDefinition(): InputObjectTypeDefinitionNode;\n  /**\n   * ```\n   * InputFieldsDefinition : { InputValueDefinition+ }\n   * ```\n   */\n  parseInputFieldsDefinition(): Array<InputValueDefinitionNode>;\n  /**\n   * TypeSystemExtension :\n   *   - SchemaExtension\n   *   - TypeExtension\n   *\n   * TypeExtension :\n   *   - ScalarTypeExtension\n   *   - ObjectTypeExtension\n   *   - InterfaceTypeExtension\n   *   - UnionTypeExtension\n   *   - EnumTypeExtension\n   *   - InputObjectTypeDefinition\n   */\n  parseTypeSystemExtension(): TypeSystemExtensionNode;\n  /**\n   * ```\n   * SchemaExtension :\n   *  - extend schema Directives[Const]? { OperationTypeDefinition+ }\n   *  - extend schema Directives[Const]\n   * ```\n   */\n  parseSchemaExtension(): SchemaExtensionNode;\n  /**\n   * ScalarTypeExtension :\n   *   - extend scalar Name Directives[Const]\n   */\n  parseScalarTypeExtension(): ScalarTypeExtensionNode;\n  /**\n   * ObjectTypeExtension :\n   *  - extend type Name ImplementsInterfaces? Directives[Const]? FieldsDefinition\n   *  - extend type Name ImplementsInterfaces? Directives[Const]\n   *  - extend type Name ImplementsInterfaces\n   */\n  parseObjectTypeExtension(): ObjectTypeExtensionNode;\n  /**\n   * InterfaceTypeExtension :\n   *  - extend interface Name ImplementsInterfaces? Directives[Const]? FieldsDefinition\n   *  - extend interface Name ImplementsInterfaces? Directives[Const]\n   *  - extend interface Name ImplementsInterfaces\n   */\n  parseInterfaceTypeExtension(): InterfaceTypeExtensionNode;\n  /**\n   * UnionTypeExtension :\n   *   - extend union Name Directives[Const]? UnionMemberTypes\n   *   - extend union Name Directives[Const]\n   */\n  parseUnionTypeExtension(): UnionTypeExtensionNode;\n  /**\n   * EnumTypeExtension :\n   *   - extend enum Name Directives[Const]? EnumValuesDefinition\n   *   - extend enum Name Directives[Const]\n   */\n  parseEnumTypeExtension(): EnumTypeExtensionNode;\n  /**\n   * InputObjectTypeExtension :\n   *   - extend input Name Directives[Const]? InputFieldsDefinition\n   *   - extend input Name Directives[Const]\n   */\n  parseInputObjectTypeExtension(): InputObjectTypeExtensionNode;\n  /**\n   * ```\n   * DirectiveDefinition :\n   *   - Description? directive @ Name ArgumentsDefinition? `repeatable`? on DirectiveLocations\n   * ```\n   */\n  parseDirectiveDefinition(): DirectiveDefinitionNode;\n  /**\n   * DirectiveLocations :\n   *   - `|`? DirectiveLocation\n   *   - DirectiveLocations | DirectiveLocation\n   */\n  parseDirectiveLocations(): Array<NameNode>;\n  parseDirectiveLocation(): NameNode;\n  /**\n   * Returns a node that, if configured to do so, sets a \"loc\" field as a\n   * location object, used to identify the place in the source that created a\n   * given parsed object.\n   */\n  node<\n    T extends {\n      loc?: Location;\n    },\n  >(startToken: Token, node: T): T;\n  /**\n   * Determines if the next token is of a given kind\n   */\n  peek(kind: TokenKind): boolean;\n  /**\n   * If the next token is of the given kind, return that token after advancing the lexer.\n   * Otherwise, do not change the parser state and throw an error.\n   */\n  expectToken(kind: TokenKind): Token;\n  /**\n   * If the next token is of the given kind, return \"true\" after advancing the lexer.\n   * Otherwise, do not change the parser state and return \"false\".\n   */\n  expectOptionalToken(kind: TokenKind): boolean;\n  /**\n   * If the next token is a given keyword, advance the lexer.\n   * Otherwise, do not change the parser state and throw an error.\n   */\n  expectKeyword(value: string): void;\n  /**\n   * If the next token is a given keyword, return \"true\" after advancing the lexer.\n   * Otherwise, do not change the parser state and return \"false\".\n   */\n  expectOptionalKeyword(value: string): boolean;\n  /**\n   * Helper function for creating an error when an unexpected lexed token is encountered.\n   */\n  unexpected(atToken?: Maybe<Token>): GraphQLError;\n  /**\n   * Returns a possibly empty list of parse nodes, determined by the parseFn.\n   * This list begins with a lex token of openKind and ends with a lex token of closeKind.\n   * Advances the parser to the next lex token after the closing token.\n   */\n  any<T>(openKind: TokenKind, parseFn: () => T, closeKind: TokenKind): Array<T>;\n  /**\n   * Returns a list of parse nodes, determined by the parseFn.\n   * It can be empty only if open token is missing otherwise it will always return non-empty list\n   * that begins with a lex token of openKind and ends with a lex token of closeKind.\n   * Advances the parser to the next lex token after the closing token.\n   */\n  optionalMany<T>(\n    openKind: TokenKind,\n    parseFn: () => T,\n    closeKind: TokenKind,\n  ): Array<T>;\n  /**\n   * Returns a non-empty list of parse nodes, determined by the parseFn.\n   * This list begins with a lex token of openKind and ends with a lex token of closeKind.\n   * Advances the parser to the next lex token after the closing token.\n   */\n  many<T>(\n    openKind: TokenKind,\n    parseFn: () => T,\n    closeKind: TokenKind,\n  ): Array<T>;\n  /**\n   * Returns a non-empty list of parse nodes, determined by the parseFn.\n   * This list may begin with a lex token of delimiterKind followed by items separated by lex tokens of tokenKind.\n   * Advances the parser to the next lex token after last item in the list.\n   */\n  delimitedMany<T>(delimiterKind: TokenKind, parseFn: () => T): Array<T>;\n  advanceLexer(): void;\n}\n/jsutils/promiseForObject.js\u0002'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.promiseForObject = promiseForObject;\n\n/**\n * This function transforms a JS object `ObjMap<Promise<T>>` into\n * a `Promise<ObjMap<T>>`\n *\n * This is akin to bluebird's `Promise.props`, but implemented only using\n * `Promise.all` so it will work with any implementation of ES6 promises.\n */\nfunction promiseForObject(object) {\n  return Promise.all(Object.values(object)).then((resolvedValues) => {\n    const resolvedObject = Object.create(null);\n\n    for (const [i, key] of Object.keys(object).entries()) {\n      resolvedObject[key] = resolvedValues[i];\n    }\n\n    return resolvedObject;\n  });\n}\n/version.js\u0002W'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.versionInfo = exports.version = void 0;\n// Note: This file is autogenerated using \"resources/gen-version.js\" script and\n// automatically updated by \"npm version\" command.\n\n/**\n * A string containing the version of the GraphQL.js library\n */\nconst version = '16.6.0';\n/**\n * An object containing the components of the GraphQL.js version string\n */\n\nexports.version = version;\nconst versionInfo = Object.freeze({\n  major: 16,\n  minor: 6,\n  patch: 0,\n  preReleaseTag: null,\n});\nexports.versionInfo = versionInfo;\n-/validation/rules/ValuesOfCorrectTypeRule.mjs\u0012import { didYouMean } from '../../jsutils/didYouMean.mjs';\nimport { inspect } from '../../jsutils/inspect.mjs';\nimport { keyMap } from '../../jsutils/keyMap.mjs';\nimport { suggestionList } from '../../jsutils/suggestionList.mjs';\nimport { GraphQLError } from '../../error/GraphQLError.mjs';\nimport { print } from '../../language/printer.mjs';\nimport {\n  getNamedType,\n  getNullableType,\n  isInputObjectType,\n  isLeafType,\n  isListType,\n  isNonNullType,\n  isRequiredInputField,\n} from '../../type/definition.mjs';\n\n/**\n * Value literals of correct type\n *\n * A GraphQL document is only valid if all value literals are of the type\n * expected at their position.\n *\n * See https://spec.graphql.org/draft/#sec-Values-of-Correct-Type\n */\nexport function ValuesOfCorrectTypeRule(context) {\n  return {\n    ListValue(node) {\n      // Note: TypeInfo will traverse into a list's item type, so look to the\n      // parent input type to check if it is a list.\n      const type = getNullableType(context.getParentInputType());\n\n      if (!isListType(type)) {\n        isValidValueNode(context, node);\n        return false; // Don't traverse further.\n      }\n    },\n\n    ObjectValue(node) {\n      const type = getNamedType(context.getInputType());\n\n      if (!isInputObjectType(type)) {\n        isValidValueNode(context, node);\n        return false; // Don't traverse further.\n      } // Ensure every required field exists.\n\n      const fieldNodeMap = keyMap(node.fields, (field) => field.name.value);\n\n      for (const fieldDef of Object.values(type.getFields())) {\n        const fieldNode = fieldNodeMap[fieldDef.name];\n\n        if (!fieldNode && isRequiredInputField(fieldDef)) {\n          const typeStr = inspect(fieldDef.type);\n          context.reportError(\n            new GraphQLError(\n              `Field \"${type.name}.${fieldDef.name}\" of required type \"${typeStr}\" was not provided.`,\n              {\n                nodes: node,\n              },\n            ),\n          );\n        }\n      }\n    },\n\n    ObjectField(node) {\n      const parentType = getNamedType(context.getParentInputType());\n      const fieldType = context.getInputType();\n\n      if (!fieldType && isInputObjectType(parentType)) {\n        const suggestions = suggestionList(\n          node.name.value,\n          Object.keys(parentType.getFields()),\n        );\n        context.reportError(\n          new GraphQLError(\n            `Field \"${node.name.value}\" is not defined by type \"${parentType.name}\".` +\n              didYouMean(suggestions),\n            {\n              nodes: node,\n            },\n          ),\n        );\n      }\n    },\n\n    NullValue(node) {\n      const type = context.getInputType();\n\n      if (isNonNullType(type)) {\n        context.reportError(\n          new GraphQLError(\n            `Expected value of type \"${inspect(type)}\", found ${print(node)}.`,\n            {\n              nodes: node,\n            },\n          ),\n        );\n      }\n    },\n\n    EnumValue: (node) => isValidValueNode(context, node),\n    IntValue: (node) => isValidValueNode(context, node),\n    FloatValue: (node) => isValidValueNode(context, node),\n    StringValue: (node) => isValidValueNode(context, node),\n    BooleanValue: (node) => isValidValueNode(context, node),\n  };\n}\n/**\n * Any value literal may be a valid representation of a Scalar, depending on\n * that scalar type.\n */\n\nfunction isValidValueNode(context, node) {\n  // Report any error at the full type expected by the location.\n  const locationType = context.getInputType();\n\n  if (!locationType) {\n    return;\n  }\n\n  const type = getNamedType(locationType);\n\n  if (!isLeafType(type)) {\n    const typeStr = inspect(locationType);\n    context.reportError(\n      new GraphQLError(\n        `Expected value of type \"${typeStr}\", found ${print(node)}.`,\n        {\n          nodes: node,\n        },\n      ),\n    );\n    return;\n  } // Scalars and Enums determine if a literal value is valid via parseLiteral(),\n  // which may throw or return an invalid value to indicate failure.\n\n  try {\n    const parseResult = type.parseLiteral(\n      node,\n      undefined,\n      /* variables */\n    );\n\n    if (parseResult === undefined) {\n      const typeStr = inspect(locationType);\n      context.reportError(\n        new GraphQLError(\n          `Expected value of type \"${typeStr}\", found ${print(node)}.`,\n          {\n            nodes: node,\n          },\n        ),\n      );\n    }\n  } catch (error) {\n    const typeStr = inspect(locationType);\n\n    if (error instanceof GraphQLError) {\n      context.reportError(error);\n    } else {\n      context.reportError(\n        new GraphQLError(\n          `Expected value of type \"${typeStr}\", found ${print(node)}; ` +\n            error.message,\n          {\n            nodes: node,\n            originalError: error,\n          },\n        ),\n      );\n    }\n  }\n}\n/language/characterClasses.mjs\u0004/**\n * ```\n * WhiteSpace ::\n *   - \"Horizontal Tab (U+0009)\"\n *   - \"Space (U+0020)\"\n * ```\n * @internal\n */\nexport function isWhiteSpace(code) {\n  return code === 0x0009 || code === 0x0020;\n}\n/**\n * ```\n * Digit :: one of\n *   - `0` `1` `2` `3` `4` `5` `6` `7` `8` `9`\n * ```\n * @internal\n */\n\nexport function isDigit(code) {\n  return code >= 0x0030 && code <= 0x0039;\n}\n/**\n * ```\n * Letter :: one of\n *   - `A` `B` `C` `D` `E` `F` `G` `H` `I` `J` `K` `L` `M`\n *   - `N` `O` `P` `Q` `R` `S` `T` `U` `V` `W` `X` `Y` `Z`\n *   - `a` `b` `c` `d` `e` `f` `g` `h` `i` `j` `k` `l` `m`\n *   - `n` `o` `p` `q` `r` `s` `t` `u` `v` `w` `x` `y` `z`\n * ```\n * @internal\n */\n\nexport function isLetter(code) {\n  return (\n    (code >= 0x0061 && code <= 0x007a) || // A-Z\n    (code >= 0x0041 && code <= 0x005a) // a-z\n  );\n}\n/**\n * ```\n * NameStart ::\n *   - Letter\n *   - `_`\n * ```\n * @internal\n */\n\nexport function isNameStart(code) {\n  return isLetter(code) || code === 0x005f;\n}\n/**\n * ```\n * NameContinue ::\n *   - Letter\n *   - Digit\n *   - `_`\n * ```\n * @internal\n */\n\nexport function isNameContinue(code) {\n  return isLetter(code) || isDigit(code) || code === 0x005f;\n}\n*/validation/rules/KnownDirectivesRule.d.ts\u0001import type { ASTVisitor } from '../../language/visitor';\nimport type {\n  SDLValidationContext,\n  ValidationContext,\n} from '../ValidationContext';\n/**\n * Known directives\n *\n * A GraphQL document is only valid if all `@directives` are known by the\n * schema and legally positioned.\n *\n * See https://spec.graphql.org/draft/#sec-Directives-Are-Defined\n */\nexport declare function KnownDirectivesRule(\n  context: ValidationContext | SDLValidationContext,\n): ASTVisitor;\n/type/assertName.d.ts/**\n * Upholds the spec rules about naming.\n */\nexport declare function assertName(name: string): string;\n/**\n * Upholds the spec rules about naming enum values.\n *\n * @internal\n */\nexport declare function assertEnumValueName(name: string): string;\n/language/blockString.d.ts\u00036/**\n * Produces the value of a block string from its parsed raw value, similar to\n * CoffeeScript's block string, Python's docstring trim or Ruby's strip_heredoc.\n *\n * This implements the GraphQL spec's BlockStringValue() static algorithm.\n *\n * @internal\n */\nexport declare function dedentBlockStringLines(\n  lines: ReadonlyArray<string>,\n): Array<string>;\n/**\n * @internal\n */\nexport declare function isPrintableAsBlockString(value: string): boolean;\n/**\n * Print a block string in the indented block form by adding a leading and\n * trailing blank line. However, if a block string starts with whitespace and is\n * a single-line, adding a leading blank line would strip that whitespace.\n *\n * @internal\n */\nexport declare function printBlockString(\n  value: string,\n  options?: {\n    minimize?: boolean;\n  },\n): string;\n2/validation/rules/ProvidedRequiredArgumentsRule.js\u0013<'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.ProvidedRequiredArgumentsOnDirectivesRule =\n  ProvidedRequiredArgumentsOnDirectivesRule;\nexports.ProvidedRequiredArgumentsRule = ProvidedRequiredArgumentsRule;\n\nvar _inspect = require('../../jsutils/inspect.js');\n\nvar _keyMap = require('../../jsutils/keyMap.js');\n\nvar _GraphQLError = require('../../error/GraphQLError.js');\n\nvar _kinds = require('../../language/kinds.js');\n\nvar _printer = require('../../language/printer.js');\n\nvar _definition = require('../../type/definition.js');\n\nvar _directives = require('../../type/directives.js');\n\n/**\n * Provided required arguments\n *\n * A field or directive is only valid if all required (non-null without a\n * default value) field arguments have been provided.\n */\nfunction ProvidedRequiredArgumentsRule(context) {\n  return {\n    // eslint-disable-next-line new-cap\n    ...ProvidedRequiredArgumentsOnDirectivesRule(context),\n    Field: {\n      // Validate on leave to allow for deeper errors to appear first.\n      leave(fieldNode) {\n        var _fieldNode$arguments;\n\n        const fieldDef = context.getFieldDef();\n\n        if (!fieldDef) {\n          return false;\n        }\n\n        const providedArgs = new Set( // FIXME: https://github.com/graphql/graphql-js/issues/2203\n          /* c8 ignore next */\n          (_fieldNode$arguments = fieldNode.arguments) === null ||\n          _fieldNode$arguments === void 0\n            ? void 0\n            : _fieldNode$arguments.map((arg) => arg.name.value),\n        );\n\n        for (const argDef of fieldDef.args) {\n          if (\n            !providedArgs.has(argDef.name) &&\n            (0, _definition.isRequiredArgument)(argDef)\n          ) {\n            const argTypeStr = (0, _inspect.inspect)(argDef.type);\n            context.reportError(\n              new _GraphQLError.GraphQLError(\n                `Field \"${fieldDef.name}\" argument \"${argDef.name}\" of type \"${argTypeStr}\" is required, but it was not provided.`,\n                {\n                  nodes: fieldNode,\n                },\n              ),\n            );\n          }\n        }\n      },\n    },\n  };\n}\n/**\n * @internal\n */\n\nfunction ProvidedRequiredArgumentsOnDirectivesRule(context) {\n  var _schema$getDirectives;\n\n  const requiredArgsMap = Object.create(null);\n  const schema = context.getSchema();\n  const definedDirectives =\n    (_schema$getDirectives =\n      schema === null || schema === void 0\n        ? void 0\n        : schema.getDirectives()) !== null && _schema$getDirectives !== void 0\n      ? _schema$getDirectives\n      : _directives.specifiedDirectives;\n\n  for (const directive of definedDirectives) {\n    requiredArgsMap[directive.name] = (0, _keyMap.keyMap)(\n      directive.args.filter(_definition.isRequiredArgument),\n      (arg) => arg.name,\n    );\n  }\n\n  const astDefinitions = context.getDocument().definitions;\n\n  for (const def of astDefinitions) {\n    if (def.kind === _kinds.Kind.DIRECTIVE_DEFINITION) {\n      var _def$arguments;\n\n      // FIXME: https://github.com/graphql/graphql-js/issues/2203\n\n      /* c8 ignore next */\n      const argNodes =\n        (_def$arguments = def.arguments) !== null && _def$arguments !== void 0\n          ? _def$arguments\n          : [];\n      requiredArgsMap[def.name.value] = (0, _keyMap.keyMap)(\n        argNodes.filter(isRequiredArgumentNode),\n        (arg) => arg.name.value,\n      );\n    }\n  }\n\n  return {\n    Directive: {\n      // Validate on leave to allow for deeper errors to appear first.\n      leave(directiveNode) {\n        const directiveName = directiveNode.name.value;\n        const requiredArgs = requiredArgsMap[directiveName];\n\n        if (requiredArgs) {\n          var _directiveNode$argume;\n\n          // FIXME: https://github.com/graphql/graphql-js/issues/2203\n\n          /* c8 ignore next */\n          const argNodes =\n            (_directiveNode$argume = directiveNode.arguments) !== null &&\n            _directiveNode$argume !== void 0\n              ? _directiveNode$argume\n              : [];\n          const argNodeMap = new Set(argNodes.map((arg) => arg.name.value));\n\n          for (const [argName, argDef] of Object.entries(requiredArgs)) {\n            if (!argNodeMap.has(argName)) {\n              const argType = (0, _definition.isType)(argDef.type)\n                ? (0, _inspect.inspect)(argDef.type)\n                : (0, _printer.print)(argDef.type);\n              context.reportError(\n                new _GraphQLError.GraphQLError(\n                  `Directive \"@${directiveName}\" argument \"${argName}\" of type \"${argType}\" is required, but it was not provided.`,\n                  {\n                    nodes: directiveNode,\n                  },\n                ),\n              );\n            }\n          }\n        }\n      },\n    },\n  };\n}\n\nfunction isRequiredArgumentNode(arg) {\n  return (\n    arg.type.kind === _kinds.Kind.NON_NULL_TYPE && arg.defaultValue == null\n  );\n}\n)/validation/rules/KnownTypeNamesRule.d.ts\u0002\u0007import type { ASTVisitor } from '../../language/visitor';\nimport type {\n  SDLValidationContext,\n  ValidationContext,\n} from '../ValidationContext';\n/**\n * Known type names\n *\n * A GraphQL document is only valid if referenced types (specifically\n * variable definitions and fragment conditions) are defined by the type schema.\n *\n * See https://spec.graphql.org/draft/#sec-Fragment-Spread-Type-Existence\n */\nexport declare function KnownTypeNamesRule(\n  context: ValidationContext | SDLValidationContext,\n): ASTVisitor;\n/utilities/astFromValue.js\u0013'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.astFromValue = astFromValue;\n\nvar _inspect = require('../jsutils/inspect.js');\n\nvar _invariant = require('../jsutils/invariant.js');\n\nvar _isIterableObject = require('../jsutils/isIterableObject.js');\n\nvar _isObjectLike = require('../jsutils/isObjectLike.js');\n\nvar _kinds = require('../language/kinds.js');\n\nvar _definition = require('../type/definition.js');\n\nvar _scalars = require('../type/scalars.js');\n\n/**\n * Produces a GraphQL Value AST given a JavaScript object.\n * Function will match JavaScript/JSON values to GraphQL AST schema format\n * by using suggested GraphQLInputType. For example:\n *\n *     astFromValue(\"value\", GraphQLString)\n *\n * A GraphQL type must be provided, which will be used to interpret different\n * JavaScript values.\n *\n * | JSON Value    | GraphQL Value        |\n * | ------------- | -------------------- |\n * | Object        | Input Object         |\n * | Array         | List                 |\n * | Boolean       | Boolean              |\n * | String        | String / Enum Value  |\n * | Number        | Int / Float          |\n * | Unknown       | Enum Value           |\n * | null          | NullValue            |\n *\n */\nfunction astFromValue(value, type) {\n  if ((0, _definition.isNonNullType)(type)) {\n    const astValue = astFromValue(value, type.ofType);\n\n    if (\n      (astValue === null || astValue === void 0 ? void 0 : astValue.kind) ===\n      _kinds.Kind.NULL\n    ) {\n      return null;\n    }\n\n    return astValue;\n  } // only explicit null, not undefined, NaN\n\n  if (value === null) {\n    return {\n      kind: _kinds.Kind.NULL,\n    };\n  } // undefined\n\n  if (value === undefined) {\n    return null;\n  } // Convert JavaScript array to GraphQL list. If the GraphQLType is a list, but\n  // the value is not an array, convert the value using the list's item type.\n\n  if ((0, _definition.isListType)(type)) {\n    const itemType = type.ofType;\n\n    if ((0, _isIterableObject.isIterableObject)(value)) {\n      const valuesNodes = [];\n\n      for (const item of value) {\n        const itemNode = astFromValue(item, itemType);\n\n        if (itemNode != null) {\n          valuesNodes.push(itemNode);\n        }\n      }\n\n      return {\n        kind: _kinds.Kind.LIST,\n        values: valuesNodes,\n      };\n    }\n\n    return astFromValue(value, itemType);\n  } // Populate the fields of the input object by creating ASTs from each value\n  // in the JavaScript object according to the fields in the input type.\n\n  if ((0, _definition.isInputObjectType)(type)) {\n    if (!(0, _isObjectLike.isObjectLike)(value)) {\n      return null;\n    }\n\n    const fieldNodes = [];\n\n    for (const field of Object.values(type.getFields())) {\n      const fieldValue = astFromValue(value[field.name], field.type);\n\n      if (fieldValue) {\n        fieldNodes.push({\n          kind: _kinds.Kind.OBJECT_FIELD,\n          name: {\n            kind: _kinds.Kind.NAME,\n            value: field.name,\n          },\n          value: fieldValue,\n        });\n      }\n    }\n\n    return {\n      kind: _kinds.Kind.OBJECT,\n      fields: fieldNodes,\n    };\n  }\n\n  if ((0, _definition.isLeafType)(type)) {\n    // Since value is an internally represented value, it must be serialized\n    // to an externally represented value before converting into an AST.\n    const serialized = type.serialize(value);\n\n    if (serialized == null) {\n      return null;\n    } // Others serialize based on their corresponding JavaScript scalar types.\n\n    if (typeof serialized === 'boolean') {\n      return {\n        kind: _kinds.Kind.BOOLEAN,\n        value: serialized,\n      };\n    } // JavaScript numbers can be Int or Float values.\n\n    if (typeof serialized === 'number' && Number.isFinite(serialized)) {\n      const stringNum = String(serialized);\n      return integerStringRegExp.test(stringNum)\n        ? {\n            kind: _kinds.Kind.INT,\n            value: stringNum,\n          }\n        : {\n            kind: _kinds.Kind.FLOAT,\n            value: stringNum,\n          };\n    }\n\n    if (typeof serialized === 'string') {\n      // Enum types use Enum literals.\n      if ((0, _definition.isEnumType)(type)) {\n        return {\n          kind: _kinds.Kind.ENUM,\n          value: serialized,\n        };\n      } // ID types can use Int literals.\n\n      if (type === _scalars.GraphQLID && integerStringRegExp.test(serialized)) {\n        return {\n          kind: _kinds.Kind.INT,\n          value: serialized,\n        };\n      }\n\n      return {\n        kind: _kinds.Kind.STRING,\n        value: serialized,\n      };\n    }\n\n    throw new TypeError(\n      `Cannot convert value to AST: ${(0, _inspect.inspect)(serialized)}.`,\n    );\n  }\n  /* c8 ignore next 3 */\n  // Not reachable, all possible types have been considered.\n\n  false ||\n    (0, _invariant.invariant)(\n      false,\n      'Unexpected input type: ' + (0, _inspect.inspect)(type),\n    );\n}\n/**\n * IntValue:\n *   - NegativeSign? 0\n *   - NegativeSign? NonZeroDigit ( Digit+ )?\n */\n\nconst integerStringRegExp = /^-?(?:0|[1-9][0-9]*)$/;\n/jsutils/toError.d.tsį/**\n * Sometimes a non-error is thrown, wrap it as an Error instance to ensure a consistent Error interface.\n */\nexport declare function toError(thrownValue: unknown): Error;\n/language/printer.mjs$import { printBlockString } from './blockString.mjs';\nimport { printString } from './printString.mjs';\nimport { visit } from './visitor.mjs';\n/**\n * Converts an AST into a string, using one set of reasonable\n * formatting rules.\n */\n\nexport function print(ast) {\n  return visit(ast, printDocASTReducer);\n}\nconst MAX_LINE_LENGTH = 80;\nconst printDocASTReducer = {\n  Name: {\n    leave: (node) => node.value,\n  },\n  Variable: {\n    leave: (node) => '$' + node.name,\n  },\n  // Document\n  Document: {\n    leave: (node) => join(node.definitions, '\\n\\n'),\n  },\n  OperationDefinition: {\n    leave(node) {\n      const varDefs = wrap('(', join(node.variableDefinitions, ', '), ')');\n      const prefix = join(\n        [\n          node.operation,\n          join([node.name, varDefs]),\n          join(node.directives, ' '),\n        ],\n        ' ',\n      ); // Anonymous queries with no directives or variable definitions can use\n      // the query short form.\n\n      return (prefix === 'query' ? '' : prefix + ' ') + node.selectionSet;\n    },\n  },\n  VariableDefinition: {\n    leave: ({ variable, type, defaultValue, directives }) =>\n      variable +\n      ': ' +\n      type +\n      wrap(' = ', defaultValue) +\n      wrap(' ', join(directives, ' ')),\n  },\n  SelectionSet: {\n    leave: ({ selections }) => block(selections),\n  },\n  Field: {\n    leave({ alias, name, arguments: args, directives, selectionSet }) {\n      const prefix = wrap('', alias, ': ') + name;\n      let argsLine = prefix + wrap('(', join(args, ', '), ')');\n\n      if (argsLine.length > MAX_LINE_LENGTH) {\n        argsLine = prefix + wrap('(\\n', indent(join(args, '\\n')), '\\n)');\n      }\n\n      return join([argsLine, join(directives, ' '), selectionSet], ' ');\n    },\n  },\n  Argument: {\n    leave: ({ name, value }) => name + ': ' + value,\n  },\n  // Fragments\n  FragmentSpread: {\n    leave: ({ name, directives }) =>\n      '...' + name + wrap(' ', join(directives, ' ')),\n  },\n  InlineFragment: {\n    leave: ({ typeCondition, directives, selectionSet }) =>\n      join(\n        [\n          '...',\n          wrap('on ', typeCondition),\n          join(directives, ' '),\n          selectionSet,\n        ],\n        ' ',\n      ),\n  },\n  FragmentDefinition: {\n    leave: (\n      { name, typeCondition, variableDefinitions, directives, selectionSet }, // Note: fragment variable definitions are experimental and may be changed\n    ) =>\n      // or removed in the future.\n      `fragment ${name}${wrap('(', join(variableDefinitions, ', '), ')')} ` +\n      `on ${typeCondition} ${wrap('', join(directives, ' '), ' ')}` +\n      selectionSet,\n  },\n  // Value\n  IntValue: {\n    leave: ({ value }) => value,\n  },\n  FloatValue: {\n    leave: ({ value }) => value,\n  },\n  StringValue: {\n    leave: ({ value, block: isBlockString }) =>\n      isBlockString ? printBlockString(value) : printString(value),\n  },\n  BooleanValue: {\n    leave: ({ value }) => (value ? 'true' : 'false'),\n  },\n  NullValue: {\n    leave: () => 'null',\n  },\n  EnumValue: {\n    leave: ({ value }) => value,\n  },\n  ListValue: {\n    leave: ({ values }) => '[' + join(values, ', ') + ']',\n  },\n  ObjectValue: {\n    leave: ({ fields }) => '{' + join(fields, ', ') + '}',\n  },\n  ObjectField: {\n    leave: ({ name, value }) => name + ': ' + value,\n  },\n  // Directive\n  Directive: {\n    leave: ({ name, arguments: args }) =>\n      '@' + name + wrap('(', join(args, ', '), ')'),\n  },\n  // Type\n  NamedType: {\n    leave: ({ name }) => name,\n  },\n  ListType: {\n    leave: ({ type }) => '[' + type + ']',\n  },\n  NonNullType: {\n    leave: ({ type }) => type + '!',\n  },\n  // Type System Definitions\n  SchemaDefinition: {\n    leave: ({ description, directives, operationTypes }) =>\n      wrap('', description, '\\n') +\n      join(['schema', join(directives, ' '), block(operationTypes)], ' '),\n  },\n  OperationTypeDefinition: {\n    leave: ({ operation, type }) => operation + ': ' + type,\n  },\n  ScalarTypeDefinition: {\n    leave: ({ description, name, directives }) =>\n      wrap('', description, '\\n') +\n      join(['scalar', name, join(directives, ' ')], ' '),\n  },\n  ObjectTypeDefinition: {\n    leave: ({ description, name, interfaces, directives, fields }) =>\n      wrap('', description, '\\n') +\n      join(\n        [\n          'type',\n          name,\n          wrap('implements ', join(interfaces, ' & ')),\n          join(directives, ' '),\n          block(fields),\n        ],\n        ' ',\n      ),\n  },\n  FieldDefinition: {\n    leave: ({ description, name, arguments: args, type, directives }) =>\n      wrap('', description, '\\n') +\n      name +\n      (hasMultilineItems(args)\n        ? wrap('(\\n', indent(join(args, '\\n')), '\\n)')\n        : wrap('(', join(args, ', '), ')')) +\n      ': ' +\n      type +\n      wrap(' ', join(directives, ' ')),\n  },\n  InputValueDefinition: {\n    leave: ({ description, name, type, defaultValue, directives }) =>\n      wrap('', description, '\\n') +\n      join(\n        [name + ': ' + type, wrap('= ', defaultValue), join(directives, ' ')],\n        ' ',\n      ),\n  },\n  InterfaceTypeDefinition: {\n    leave: ({ description, name, interfaces, directives, fields }) =>\n      wrap('', description, '\\n') +\n      join(\n        [\n          'interface',\n          name,\n          wrap('implements ', join(interfaces, ' & ')),\n          join(directives, ' '),\n          block(fields),\n        ],\n        ' ',\n      ),\n  },\n  UnionTypeDefinition: {\n    leave: ({ description, name, directives, types }) =>\n      wrap('', description, '\\n') +\n      join(\n        ['union', name, join(directives, ' '), wrap('= ', join(types, ' | '))],\n        ' ',\n      ),\n  },\n  EnumTypeDefinition: {\n    leave: ({ description, name, directives, values }) =>\n      wrap('', description, '\\n') +\n      join(['enum', name, join(directives, ' '), block(values)], ' '),\n  },\n  EnumValueDefinition: {\n    leave: ({ description, name, directives }) =>\n      wrap('', description, '\\n') + join([name, join(directives, ' ')], ' '),\n  },\n  InputObjectTypeDefinition: {\n    leave: ({ description, name, directives, fields }) =>\n      wrap('', description, '\\n') +\n      join(['input', name, join(directives, ' '), block(fields)], ' '),\n  },\n  DirectiveDefinition: {\n    leave: ({ description, name, arguments: args, repeatable, locations }) =>\n      wrap('', description, '\\n') +\n      'directive @' +\n      name +\n      (hasMultilineItems(args)\n        ? wrap('(\\n', indent(join(args, '\\n')), '\\n)')\n        : wrap('(', join(args, ', '), ')')) +\n      (repeatable ? ' repeatable' : '') +\n      ' on ' +\n      join(locations, ' | '),\n  },\n  SchemaExtension: {\n    leave: ({ directives, operationTypes }) =>\n      join(\n        ['extend schema', join(directives, ' '), block(operationTypes)],\n        ' ',\n      ),\n  },\n  ScalarTypeExtension: {\n    leave: ({ name, directives }) =>\n      join(['extend scalar', name, join(directives, ' ')], ' '),\n  },\n  ObjectTypeExtension: {\n    leave: ({ name, interfaces, directives, fields }) =>\n      join(\n        [\n          'extend type',\n          name,\n          wrap('implements ', join(interfaces, ' & ')),\n          join(directives, ' '),\n          block(fields),\n        ],\n        ' ',\n      ),\n  },\n  InterfaceTypeExtension: {\n    leave: ({ name, interfaces, directives, fields }) =>\n      join(\n        [\n          'extend interface',\n          name,\n          wrap('implements ', join(interfaces, ' & ')),\n          join(directives, ' '),\n          block(fields),\n        ],\n        ' ',\n      ),\n  },\n  UnionTypeExtension: {\n    leave: ({ name, directives, types }) =>\n      join(\n        [\n          'extend union',\n          name,\n          join(directives, ' '),\n          wrap('= ', join(types, ' | ')),\n        ],\n        ' ',\n      ),\n  },\n  EnumTypeExtension: {\n    leave: ({ name, directives, values }) =>\n      join(['extend enum', name, join(directives, ' '), block(values)], ' '),\n  },\n  InputObjectTypeExtension: {\n    leave: ({ name, directives, fields }) =>\n      join(['extend input', name, join(directives, ' '), block(fields)], ' '),\n  },\n};\n/**\n * Given maybeArray, print an empty string if it is null or empty, otherwise\n * print all items together separated by separator if provided\n */\n\nfunction join(maybeArray, separator = '') {\n  var _maybeArray$filter$jo;\n\n  return (_maybeArray$filter$jo =\n    maybeArray === null || maybeArray === void 0\n      ? void 0\n      : maybeArray.filter((x) => x).join(separator)) !== null &&\n    _maybeArray$filter$jo !== void 0\n    ? _maybeArray$filter$jo\n    : '';\n}\n/**\n * Given array, print each item on its own line, wrapped in an indented `{ }` block.\n */\n\nfunction block(array) {\n  return wrap('{\\n', indent(join(array, '\\n')), '\\n}');\n}\n/**\n * If maybeString is not null or empty, then wrap with start and end, otherwise print an empty string.\n */\n\nfunction wrap(start, maybeString, end = '') {\n  return maybeString != null && maybeString !== ''\n    ? start + maybeString + end\n    : '';\n}\n\nfunction indent(str) {\n  return wrap('  ', str.replace(/\\n/g, '\\n  '));\n}\n\nfunction hasMultilineItems(maybeArray) {\n  var _maybeArray$some;\n\n  // FIXME: https://github.com/graphql/graphql-js/issues/2203\n\n  /* c8 ignore next */\n  return (_maybeArray$some =\n    maybeArray === null || maybeArray === void 0\n      ? void 0\n      : maybeArray.some((str) => str.includes('\\n'))) !== null &&\n    _maybeArray$some !== void 0\n    ? _maybeArray$some\n    : false;\n}\n/language/visitor.mjs%]import { devAssert } from '../jsutils/devAssert.mjs';\nimport { inspect } from '../jsutils/inspect.mjs';\nimport { isNode, QueryDocumentKeys } from './ast.mjs';\nimport { Kind } from './kinds.mjs';\n/**\n * A visitor is provided to visit, it contains the collection of\n * relevant functions to be called during the visitor's traversal.\n */\n\nexport const BREAK = Object.freeze({});\n/**\n * visit() will walk through an AST using a depth-first traversal, calling\n * the visitor's enter function at each node in the traversal, and calling the\n * leave function after visiting that node and all of its child nodes.\n *\n * By returning different values from the enter and leave functions, the\n * behavior of the visitor can be altered, including skipping over a sub-tree of\n * the AST (by returning false), editing the AST by returning a value or null\n * to remove the value, or to stop the whole traversal by returning BREAK.\n *\n * When using visit() to edit an AST, the original AST will not be modified, and\n * a new version of the AST with the changes applied will be returned from the\n * visit function.\n *\n * ```ts\n * const editedAST = visit(ast, {\n *   enter(node, key, parent, path, ancestors) {\n *     // @return\n *     //   undefined: no action\n *     //   false: skip visiting this node\n *     //   visitor.BREAK: stop visiting altogether\n *     //   null: delete this node\n *     //   any value: replace this node with the returned value\n *   },\n *   leave(node, key, parent, path, ancestors) {\n *     // @return\n *     //   undefined: no action\n *     //   false: no action\n *     //   visitor.BREAK: stop visiting altogether\n *     //   null: delete this node\n *     //   any value: replace this node with the returned value\n *   }\n * });\n * ```\n *\n * Alternatively to providing enter() and leave() functions, a visitor can\n * instead provide functions named the same as the kinds of AST nodes, or\n * enter/leave visitors at a named key, leading to three permutations of the\n * visitor API:\n *\n * 1) Named visitors triggered when entering a node of a specific kind.\n *\n * ```ts\n * visit(ast, {\n *   Kind(node) {\n *     // enter the \"Kind\" node\n *   }\n * })\n * ```\n *\n * 2) Named visitors that trigger upon entering and leaving a node of a specific kind.\n *\n * ```ts\n * visit(ast, {\n *   Kind: {\n *     enter(node) {\n *       // enter the \"Kind\" node\n *     }\n *     leave(node) {\n *       // leave the \"Kind\" node\n *     }\n *   }\n * })\n * ```\n *\n * 3) Generic visitors that trigger upon entering and leaving any node.\n *\n * ```ts\n * visit(ast, {\n *   enter(node) {\n *     // enter any node\n *   },\n *   leave(node) {\n *     // leave any node\n *   }\n * })\n * ```\n */\n\nexport function visit(root, visitor, visitorKeys = QueryDocumentKeys) {\n  const enterLeaveMap = new Map();\n\n  for (const kind of Object.values(Kind)) {\n    enterLeaveMap.set(kind, getEnterLeaveForKind(visitor, kind));\n  }\n  /* eslint-disable no-undef-init */\n\n  let stack = undefined;\n  let inArray = Array.isArray(root);\n  let keys = [root];\n  let index = -1;\n  let edits = [];\n  let node = root;\n  let key = undefined;\n  let parent = undefined;\n  const path = [];\n  const ancestors = [];\n  /* eslint-enable no-undef-init */\n\n  do {\n    index++;\n    const isLeaving = index === keys.length;\n    const isEdited = isLeaving && edits.length !== 0;\n\n    if (isLeaving) {\n      key = ancestors.length === 0 ? undefined : path[path.length - 1];\n      node = parent;\n      parent = ancestors.pop();\n\n      if (isEdited) {\n        if (inArray) {\n          node = node.slice();\n          let editOffset = 0;\n\n          for (const [editKey, editValue] of edits) {\n            const arrayKey = editKey - editOffset;\n\n            if (editValue === null) {\n              node.splice(arrayKey, 1);\n              editOffset++;\n            } else {\n              node[arrayKey] = editValue;\n            }\n          }\n        } else {\n          node = Object.defineProperties(\n            {},\n            Object.getOwnPropertyDescriptors(node),\n          );\n\n          for (const [editKey, editValue] of edits) {\n            node[editKey] = editValue;\n          }\n        }\n      }\n\n      index = stack.index;\n      keys = stack.keys;\n      edits = stack.edits;\n      inArray = stack.inArray;\n      stack = stack.prev;\n    } else if (parent) {\n      key = inArray ? index : keys[index];\n      node = parent[key];\n\n      if (node === null || node === undefined) {\n        continue;\n      }\n\n      path.push(key);\n    }\n\n    let result;\n\n    if (!Array.isArray(node)) {\n      var _enterLeaveMap$get, _enterLeaveMap$get2;\n\n      isNode(node) || devAssert(false, `Invalid AST Node: ${inspect(node)}.`);\n      const visitFn = isLeaving\n        ? (_enterLeaveMap$get = enterLeaveMap.get(node.kind)) === null ||\n          _enterLeaveMap$get === void 0\n          ? void 0\n          : _enterLeaveMap$get.leave\n        : (_enterLeaveMap$get2 = enterLeaveMap.get(node.kind)) === null ||\n          _enterLeaveMap$get2 === void 0\n        ? void 0\n        : _enterLeaveMap$get2.enter;\n      result =\n        visitFn === null || visitFn === void 0\n          ? void 0\n          : visitFn.call(visitor, node, key, parent, path, ancestors);\n\n      if (result === BREAK) {\n        break;\n      }\n\n      if (result === false) {\n        if (!isLeaving) {\n          path.pop();\n          continue;\n        }\n      } else if (result !== undefined) {\n        edits.push([key, result]);\n\n        if (!isLeaving) {\n          if (isNode(result)) {\n            node = result;\n          } else {\n            path.pop();\n            continue;\n          }\n        }\n      }\n    }\n\n    if (result === undefined && isEdited) {\n      edits.push([key, node]);\n    }\n\n    if (isLeaving) {\n      path.pop();\n    } else {\n      var _node$kind;\n\n      stack = {\n        inArray,\n        index,\n        keys,\n        edits,\n        prev: stack,\n      };\n      inArray = Array.isArray(node);\n      keys = inArray\n        ? node\n        : (_node$kind = visitorKeys[node.kind]) !== null &&\n          _node$kind !== void 0\n        ? _node$kind\n        : [];\n      index = -1;\n      edits = [];\n\n      if (parent) {\n        ancestors.push(parent);\n      }\n\n      parent = node;\n    }\n  } while (stack !== undefined);\n\n  if (edits.length !== 0) {\n    // New root\n    return edits[edits.length - 1][1];\n  }\n\n  return root;\n}\n/**\n * Creates a new visitor instance which delegates to many visitors to run in\n * parallel. Each visitor will be visited for each node before moving on.\n *\n * If a prior visitor edits a node, no following visitors will see that node.\n */\n\nexport function visitInParallel(visitors) {\n  const skipping = new Array(visitors.length).fill(null);\n  const mergedVisitor = Object.create(null);\n\n  for (const kind of Object.values(Kind)) {\n    let hasVisitor = false;\n    const enterList = new Array(visitors.length).fill(undefined);\n    const leaveList = new Array(visitors.length).fill(undefined);\n\n    for (let i = 0; i < visitors.length; ++i) {\n      const { enter, leave } = getEnterLeaveForKind(visitors[i], kind);\n      hasVisitor || (hasVisitor = enter != null || leave != null);\n      enterList[i] = enter;\n      leaveList[i] = leave;\n    }\n\n    if (!hasVisitor) {\n      continue;\n    }\n\n    const mergedEnterLeave = {\n      enter(...args) {\n        const node = args[0];\n\n        for (let i = 0; i < visitors.length; i++) {\n          if (skipping[i] === null) {\n            var _enterList$i;\n\n            const result =\n              (_enterList$i = enterList[i]) === null || _enterList$i === void 0\n                ? void 0\n                : _enterList$i.apply(visitors[i], args);\n\n            if (result === false) {\n              skipping[i] = node;\n            } else if (result === BREAK) {\n              skipping[i] = BREAK;\n            } else if (result !== undefined) {\n              return result;\n            }\n          }\n        }\n      },\n\n      leave(...args) {\n        const node = args[0];\n\n        for (let i = 0; i < visitors.length; i++) {\n          if (skipping[i] === null) {\n            var _leaveList$i;\n\n            const result =\n              (_leaveList$i = leaveList[i]) === null || _leaveList$i === void 0\n                ? void 0\n                : _leaveList$i.apply(visitors[i], args);\n\n            if (result === BREAK) {\n              skipping[i] = BREAK;\n            } else if (result !== undefined && result !== false) {\n              return result;\n            }\n          } else if (skipping[i] === node) {\n            skipping[i] = null;\n          }\n        }\n      },\n    };\n    mergedVisitor[kind] = mergedEnterLeave;\n  }\n\n  return mergedVisitor;\n}\n/**\n * Given a visitor instance and a node kind, return EnterLeaveVisitor for that kind.\n */\n\nexport function getEnterLeaveForKind(visitor, kind) {\n  const kindVisitor = visitor[kind];\n\n  if (typeof kindVisitor === 'object') {\n    // { Kind: { enter() {}, leave() {} } }\n    return kindVisitor;\n  } else if (typeof kindVisitor === 'function') {\n    // { Kind() {} }\n    return {\n      enter: kindVisitor,\n      leave: undefined,\n    };\n  } // { enter() {}, leave() {} }\n\n  return {\n    enter: visitor.enter,\n    leave: visitor.leave,\n  };\n}\n/**\n * Given a visitor instance, if it is leaving or not, and a node kind, return\n * the function the visitor runtime should call.\n *\n * @deprecated Please use `getEnterLeaveForKind` instead. Will be removed in v17\n */\n\n/* c8 ignore next 8 */\n\nexport function getVisitFn(visitor, kind, isLeaving) {\n  const { enter, leave } = getEnterLeaveForKind(visitor, kind);\n  return isLeaving ? leave : enter;\n}\n*/validation/rules/NoUnusedVariablesRule.js\u0005'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.NoUnusedVariablesRule = NoUnusedVariablesRule;\n\nvar _GraphQLError = require('../../error/GraphQLError.js');\n\n/**\n * No unused variables\n *\n * A GraphQL operation is only valid if all variables defined by an operation\n * are used, either directly or within a spread fragment.\n *\n * See https://spec.graphql.org/draft/#sec-All-Variables-Used\n */\nfunction NoUnusedVariablesRule(context) {\n  let variableDefs = [];\n  return {\n    OperationDefinition: {\n      enter() {\n        variableDefs = [];\n      },\n\n      leave(operation) {\n        const variableNameUsed = Object.create(null);\n        const usages = context.getRecursiveVariableUsages(operation);\n\n        for (const { node } of usages) {\n          variableNameUsed[node.name.value] = true;\n        }\n\n        for (const variableDef of variableDefs) {\n          const variableName = variableDef.variable.name.value;\n\n          if (variableNameUsed[variableName] !== true) {\n            context.reportError(\n              new _GraphQLError.GraphQLError(\n                operation.name\n                  ? `Variable \"$${variableName}\" is never used in operation \"${operation.name.value}\".`\n                  : `Variable \"$${variableName}\" is never used.`,\n                {\n                  nodes: variableDef,\n                },\n              ),\n            );\n          }\n        }\n      },\n    },\n\n    VariableDefinition(def) {\n      variableDefs.push(def);\n    },\n  };\n}\n/language/ast.js\u0015w'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.Token =\n  exports.QueryDocumentKeys =\n  exports.OperationTypeNode =\n  exports.Location =\n    void 0;\nexports.isNode = isNode;\n\n/**\n * Contains a range of UTF-8 character offsets and token references that\n * identify the region of the source from which the AST derived.\n */\nclass Location {\n  /**\n   * The character offset at which this Node begins.\n   */\n\n  /**\n   * The character offset at which this Node ends.\n   */\n\n  /**\n   * The Token at which this Node begins.\n   */\n\n  /**\n   * The Token at which this Node ends.\n   */\n\n  /**\n   * The Source document the AST represents.\n   */\n  constructor(startToken, endToken, source) {\n    this.start = startToken.start;\n    this.end = endToken.end;\n    this.startToken = startToken;\n    this.endToken = endToken;\n    this.source = source;\n  }\n\n  get [Symbol.toStringTag]() {\n    return 'Location';\n  }\n\n  toJSON() {\n    return {\n      start: this.start,\n      end: this.end,\n    };\n  }\n}\n/**\n * Represents a range of characters represented by a lexical token\n * within a Source.\n */\n\nexports.Location = Location;\n\nclass Token {\n  /**\n   * The kind of Token.\n   */\n\n  /**\n   * The character offset at which this Node begins.\n   */\n\n  /**\n   * The character offset at which this Node ends.\n   */\n\n  /**\n   * The 1-indexed line number on which this Token appears.\n   */\n\n  /**\n   * The 1-indexed column number at which this Token begins.\n   */\n\n  /**\n   * For non-punctuation tokens, represents the interpreted value of the token.\n   *\n   * Note: is undefined for punctuation tokens, but typed as string for\n   * convenience in the parser.\n   */\n\n  /**\n   * Tokens exist as nodes in a double-linked-list amongst all tokens\n   * including ignored tokens. <SOF> is always the first node and <EOF>\n   * the last.\n   */\n  constructor(kind, start, end, line, column, value) {\n    this.kind = kind;\n    this.start = start;\n    this.end = end;\n    this.line = line;\n    this.column = column; // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\n    this.value = value;\n    this.prev = null;\n    this.next = null;\n  }\n\n  get [Symbol.toStringTag]() {\n    return 'Token';\n  }\n\n  toJSON() {\n    return {\n      kind: this.kind,\n      value: this.value,\n      line: this.line,\n      column: this.column,\n    };\n  }\n}\n/**\n * The list of all possible AST node types.\n */\n\nexports.Token = Token;\n\n/**\n * @internal\n */\nconst QueryDocumentKeys = {\n  Name: [],\n  Document: ['definitions'],\n  OperationDefinition: [\n    'name',\n    'variableDefinitions',\n    'directives',\n    'selectionSet',\n  ],\n  VariableDefinition: ['variable', 'type', 'defaultValue', 'directives'],\n  Variable: ['name'],\n  SelectionSet: ['selections'],\n  Field: ['alias', 'name', 'arguments', 'directives', 'selectionSet'],\n  Argument: ['name', 'value'],\n  FragmentSpread: ['name', 'directives'],\n  InlineFragment: ['typeCondition', 'directives', 'selectionSet'],\n  FragmentDefinition: [\n    'name', // Note: fragment variable definitions are deprecated and will removed in v17.0.0\n    'variableDefinitions',\n    'typeCondition',\n    'directives',\n    'selectionSet',\n  ],\n  IntValue: [],\n  FloatValue: [],\n  StringValue: [],\n  BooleanValue: [],\n  NullValue: [],\n  EnumValue: [],\n  ListValue: ['values'],\n  ObjectValue: ['fields'],\n  ObjectField: ['name', 'value'],\n  Directive: ['name', 'arguments'],\n  NamedType: ['name'],\n  ListType: ['type'],\n  NonNullType: ['type'],\n  SchemaDefinition: ['description', 'directives', 'operationTypes'],\n  OperationTypeDefinition: ['type'],\n  ScalarTypeDefinition: ['description', 'name', 'directives'],\n  ObjectTypeDefinition: [\n    'description',\n    'name',\n    'interfaces',\n    'directives',\n    'fields',\n  ],\n  FieldDefinition: ['description', 'name', 'arguments', 'type', 'directives'],\n  InputValueDefinition: [\n    'description',\n    'name',\n    'type',\n    'defaultValue',\n    'directives',\n  ],\n  InterfaceTypeDefinition: [\n    'description',\n    'name',\n    'interfaces',\n    'directives',\n    'fields',\n  ],\n  UnionTypeDefinition: ['description', 'name', 'directives', 'types'],\n  EnumTypeDefinition: ['description', 'name', 'directives', 'values'],\n  EnumValueDefinition: ['description', 'name', 'directives'],\n  InputObjectTypeDefinition: ['description', 'name', 'directives', 'fields'],\n  DirectiveDefinition: ['description', 'name', 'arguments', 'locations'],\n  SchemaExtension: ['directives', 'operationTypes'],\n  ScalarTypeExtension: ['name', 'directives'],\n  ObjectTypeExtension: ['name', 'interfaces', 'directives', 'fields'],\n  InterfaceTypeExtension: ['name', 'interfaces', 'directives', 'fields'],\n  UnionTypeExtension: ['name', 'directives', 'types'],\n  EnumTypeExtension: ['name', 'directives', 'values'],\n  InputObjectTypeExtension: ['name', 'directives', 'fields'],\n};\nexports.QueryDocumentKeys = QueryDocumentKeys;\nconst kindValues = new Set(Object.keys(QueryDocumentKeys));\n/**\n * @internal\n */\n\nfunction isNode(maybeNode) {\n  const maybeKind =\n    maybeNode === null || maybeNode === void 0 ? void 0 : maybeNode.kind;\n  return typeof maybeKind === 'string' && kindValues.has(maybeKind);\n}\n/** Name */\n\nvar OperationTypeNode;\nexports.OperationTypeNode = OperationTypeNode;\n\n(function (OperationTypeNode) {\n  OperationTypeNode['QUERY'] = 'query';\n  OperationTypeNode['MUTATION'] = 'mutation';\n  OperationTypeNode['SUBSCRIPTION'] = 'subscription';\n})(OperationTypeNode || (exports.OperationTypeNode = OperationTypeNode = {}));\n./validation/rules/UniqueEnumValueNamesRule.mjs\u0007wimport { GraphQLError } from '../../error/GraphQLError.mjs';\nimport { isEnumType } from '../../type/definition.mjs';\n\n/**\n * Unique enum value names\n *\n * A GraphQL enum type is only valid if all its values are uniquely named.\n */\nexport function UniqueEnumValueNamesRule(context) {\n  const schema = context.getSchema();\n  const existingTypeMap = schema ? schema.getTypeMap() : Object.create(null);\n  const knownValueNames = Object.create(null);\n  return {\n    EnumTypeDefinition: checkValueUniqueness,\n    EnumTypeExtension: checkValueUniqueness,\n  };\n\n  function checkValueUniqueness(node) {\n    var _node$values;\n\n    const typeName = node.name.value;\n\n    if (!knownValueNames[typeName]) {\n      knownValueNames[typeName] = Object.create(null);\n    } // FIXME: https://github.com/graphql/graphql-js/issues/2203\n\n    /* c8 ignore next */\n\n    const valueNodes =\n      (_node$values = node.values) !== null && _node$values !== void 0\n        ? _node$values\n        : [];\n    const valueNames = knownValueNames[typeName];\n\n    for (const valueDef of valueNodes) {\n      const valueName = valueDef.name.value;\n      const existingType = existingTypeMap[typeName];\n\n      if (isEnumType(existingType) && existingType.getValue(valueName)) {\n        context.reportError(\n          new GraphQLError(\n            `Enum value \"${typeName}.${valueName}\" already exists in the schema. It cannot also be defined in this type extension.`,\n            {\n              nodes: valueDef.name,\n            },\n          ),\n        );\n      } else if (valueNames[valueName]) {\n        context.reportError(\n          new GraphQLError(\n            `Enum value \"${typeName}.${valueName}\" can only be defined once.`,\n            {\n              nodes: [valueNames[valueName], valueDef.name],\n            },\n          ),\n        );\n      } else {\n        valueNames[valueName] = valueDef.name;\n      }\n    }\n\n    return false;\n  }\n}\n/language/printString.js\u0007'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.printString = printString;\n\n/**\n * Prints a string as a GraphQL StringValue literal. Replaces control characters\n * and excluded characters (\" U+0022 and \\\\ U+005C) with escape sequences.\n */\nfunction printString(str) {\n  return `\"${str.replace(escapedRegExp, escapedReplacer)}\"`;\n} // eslint-disable-next-line no-control-regex\n\nconst escapedRegExp = /[\\x00-\\x1f\\x22\\x5c\\x7f-\\x9f]/g;\n\nfunction escapedReplacer(str) {\n  return escapeSequences[str.charCodeAt(0)];\n} // prettier-ignore\n\nconst escapeSequences = [\n  '\\\\u0000',\n  '\\\\u0001',\n  '\\\\u0002',\n  '\\\\u0003',\n  '\\\\u0004',\n  '\\\\u0005',\n  '\\\\u0006',\n  '\\\\u0007',\n  '\\\\b',\n  '\\\\t',\n  '\\\\n',\n  '\\\\u000B',\n  '\\\\f',\n  '\\\\r',\n  '\\\\u000E',\n  '\\\\u000F',\n  '\\\\u0010',\n  '\\\\u0011',\n  '\\\\u0012',\n  '\\\\u0013',\n  '\\\\u0014',\n  '\\\\u0015',\n  '\\\\u0016',\n  '\\\\u0017',\n  '\\\\u0018',\n  '\\\\u0019',\n  '\\\\u001A',\n  '\\\\u001B',\n  '\\\\u001C',\n  '\\\\u001D',\n  '\\\\u001E',\n  '\\\\u001F',\n  '',\n  '',\n  '\\\\\"',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '', // 2F\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '', // 3F\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '', // 4F\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '\\\\\\\\',\n  '',\n  '',\n  '', // 5F\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '', // 6F\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '',\n  '\\\\u007F',\n  '\\\\u0080',\n  '\\\\u0081',\n  '\\\\u0082',\n  '\\\\u0083',\n  '\\\\u0084',\n  '\\\\u0085',\n  '\\\\u0086',\n  '\\\\u0087',\n  '\\\\u0088',\n  '\\\\u0089',\n  '\\\\u008A',\n  '\\\\u008B',\n  '\\\\u008C',\n  '\\\\u008D',\n  '\\\\u008E',\n  '\\\\u008F',\n  '\\\\u0090',\n  '\\\\u0091',\n  '\\\\u0092',\n  '\\\\u0093',\n  '\\\\u0094',\n  '\\\\u0095',\n  '\\\\u0096',\n  '\\\\u0097',\n  '\\\\u0098',\n  '\\\\u0099',\n  '\\\\u009A',\n  '\\\\u009B',\n  '\\\\u009C',\n  '\\\\u009D',\n  '\\\\u009E',\n  '\\\\u009F',\n];\n-/validation/rules/UniqueArgumentNamesRule.mjs\u0004import { groupBy } from '../../jsutils/groupBy.mjs';\nimport { GraphQLError } from '../../error/GraphQLError.mjs';\n\n/**\n * Unique argument names\n *\n * A GraphQL field or directive is only valid if all supplied arguments are\n * uniquely named.\n *\n * See https://spec.graphql.org/draft/#sec-Argument-Names\n */\nexport function UniqueArgumentNamesRule(context) {\n  return {\n    Field: checkArgUniqueness,\n    Directive: checkArgUniqueness,\n  };\n\n  function checkArgUniqueness(parentNode) {\n    var _parentNode$arguments;\n\n    // FIXME: https://github.com/graphql/graphql-js/issues/2203\n\n    /* c8 ignore next */\n    const argumentNodes =\n      (_parentNode$arguments = parentNode.arguments) !== null &&\n      _parentNode$arguments !== void 0\n        ? _parentNode$arguments\n        : [];\n    const seenArgs = groupBy(argumentNodes, (arg) => arg.name.value);\n\n    for (const [argName, argNodes] of seenArgs) {\n      if (argNodes.length > 1) {\n        context.reportError(\n          new GraphQLError(\n            `There can be only one argument named \"${argName}\".`,\n            {\n              nodes: argNodes.map((node) => node.name),\n            },\n          ),\n        );\n      }\n    }\n  }\n}\n/jsutils/devAssert.mjsğexport function devAssert(condition, message) {\n  const booleanCondition = Boolean(condition);\n\n  if (!booleanCondition) {\n    throw new Error(message);\n  }\n}\n/jsutils/toError.js\u0002c'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.toError = toError;\n\nvar _inspect = require('./inspect.js');\n\n/**\n * Sometimes a non-error is thrown, wrap it as an Error instance to ensure a consistent Error interface.\n */\nfunction toError(thrownValue) {\n  return thrownValue instanceof Error\n    ? thrownValue\n    : new NonErrorThrown(thrownValue);\n}\n\nclass NonErrorThrown extends Error {\n  constructor(thrownValue) {\n    super('Unexpected error value: ' + (0, _inspect.inspect)(thrownValue));\n    this.name = 'NonErrorThrown';\n    this.thrownValue = thrownValue;\n  }\n}\n-/validation/rules/KnownFragmentNamesRule.d.ts\u0001import type { ASTVisitor } from '../../language/visitor';\nimport type { ValidationContext } from '../ValidationContext';\n/**\n * Known fragment names\n *\n * A GraphQL document is only valid if all `...Fragment` fragment spreads refer\n * to fragments defined in the same document.\n *\n * See https://spec.graphql.org/draft/#sec-Fragment-spread-target-defined\n */\nexport declare function KnownFragmentNamesRule(\n  context: ValidationContext,\n): ASTVisitor;\n/jsutils/toObjMap.d.tsimport type { Maybe } from './Maybe';\nimport type { ReadOnlyObjMap, ReadOnlyObjMapLike } from './ObjMap';\nexport declare function toObjMap<T>(\n  obj: Maybe<ReadOnlyObjMapLike<T>>,\n): ReadOnlyObjMap<T>;\n./validation/rules/UniqueFragmentNamesRule.d.ts\u0001import type { ASTVisitor } from '../../language/visitor';\nimport type { ASTValidationContext } from '../ValidationContext';\n/**\n * Unique fragment names\n *\n * A GraphQL document is only valid if all defined fragments have unique names.\n *\n * See https://spec.graphql.org/draft/#sec-Fragment-Name-Uniqueness\n */\nexport declare function UniqueFragmentNamesRule(\n  context: ASTValidationContext,\n): ASTVisitor;\n//validation/rules/UniqueOperationTypesRule.d.ts\u0001Nimport type { ASTVisitor } from '../../language/visitor';\nimport type { SDLValidationContext } from '../ValidationContext';\n/**\n * Unique operation types\n *\n * A GraphQL document is only valid if it has only one type per operation.\n */\nexport declare function UniqueOperationTypesRule(\n  context: SDLValidationContext,\n): ASTVisitor;\n2/validation/rules/FragmentsOnCompositeTypesRule.js\u0007'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.FragmentsOnCompositeTypesRule = FragmentsOnCompositeTypesRule;\n\nvar _GraphQLError = require('../../error/GraphQLError.js');\n\nvar _printer = require('../../language/printer.js');\n\nvar _definition = require('../../type/definition.js');\n\nvar _typeFromAST = require('../../utilities/typeFromAST.js');\n\n/**\n * Fragments on composite type\n *\n * Fragments use a type condition to determine if they apply, since fragments\n * can only be spread into a composite type (object, interface, or union), the\n * type condition must also be a composite type.\n *\n * See https://spec.graphql.org/draft/#sec-Fragments-On-Composite-Types\n */\nfunction FragmentsOnCompositeTypesRule(context) {\n  return {\n    InlineFragment(node) {\n      const typeCondition = node.typeCondition;\n\n      if (typeCondition) {\n        const type = (0, _typeFromAST.typeFromAST)(\n          context.getSchema(),\n          typeCondition,\n        );\n\n        if (type && !(0, _definition.isCompositeType)(type)) {\n          const typeStr = (0, _printer.print)(typeCondition);\n          context.reportError(\n            new _GraphQLError.GraphQLError(\n              `Fragment cannot condition on non composite type \"${typeStr}\".`,\n              {\n                nodes: typeCondition,\n              },\n            ),\n          );\n        }\n      }\n    },\n\n    FragmentDefinition(node) {\n      const type = (0, _typeFromAST.typeFromAST)(\n        context.getSchema(),\n        node.typeCondition,\n      );\n\n      if (type && !(0, _definition.isCompositeType)(type)) {\n        const typeStr = (0, _printer.print)(node.typeCondition);\n        context.reportError(\n          new _GraphQLError.GraphQLError(\n            `Fragment \"${node.name.value}\" cannot condition on non composite type \"${typeStr}\".`,\n            {\n              nodes: node.typeCondition,\n            },\n          ),\n        );\n      }\n    },\n  };\n}\n&/utilities/lexicographicSortSchema.mjs\u0011import { inspect } from '../jsutils/inspect.mjs';\nimport { invariant } from '../jsutils/invariant.mjs';\nimport { keyValMap } from '../jsutils/keyValMap.mjs';\nimport { naturalCompare } from '../jsutils/naturalCompare.mjs';\nimport {\n  GraphQLEnumType,\n  GraphQLInputObjectType,\n  GraphQLInterfaceType,\n  GraphQLList,\n  GraphQLNonNull,\n  GraphQLObjectType,\n  GraphQLUnionType,\n  isEnumType,\n  isInputObjectType,\n  isInterfaceType,\n  isListType,\n  isNonNullType,\n  isObjectType,\n  isScalarType,\n  isUnionType,\n} from '../type/definition.mjs';\nimport { GraphQLDirective } from '../type/directives.mjs';\nimport { isIntrospectionType } from '../type/introspection.mjs';\nimport { GraphQLSchema } from '../type/schema.mjs';\n/**\n * Sort GraphQLSchema.\n *\n * This function returns a sorted copy of the given GraphQLSchema.\n */\n\nexport function lexicographicSortSchema(schema) {\n  const schemaConfig = schema.toConfig();\n  const typeMap = keyValMap(\n    sortByName(schemaConfig.types),\n    (type) => type.name,\n    sortNamedType,\n  );\n  return new GraphQLSchema({\n    ...schemaConfig,\n    types: Object.values(typeMap),\n    directives: sortByName(schemaConfig.directives).map(sortDirective),\n    query: replaceMaybeType(schemaConfig.query),\n    mutation: replaceMaybeType(schemaConfig.mutation),\n    subscription: replaceMaybeType(schemaConfig.subscription),\n  });\n\n  function replaceType(type) {\n    if (isListType(type)) {\n      // @ts-expect-error\n      return new GraphQLList(replaceType(type.ofType));\n    } else if (isNonNullType(type)) {\n      // @ts-expect-error\n      return new GraphQLNonNull(replaceType(type.ofType));\n    } // @ts-expect-error FIXME: TS Conversion\n\n    return replaceNamedType(type);\n  }\n\n  function replaceNamedType(type) {\n    return typeMap[type.name];\n  }\n\n  function replaceMaybeType(maybeType) {\n    return maybeType && replaceNamedType(maybeType);\n  }\n\n  function sortDirective(directive) {\n    const config = directive.toConfig();\n    return new GraphQLDirective({\n      ...config,\n      locations: sortBy(config.locations, (x) => x),\n      args: sortArgs(config.args),\n    });\n  }\n\n  function sortArgs(args) {\n    return sortObjMap(args, (arg) => ({ ...arg, type: replaceType(arg.type) }));\n  }\n\n  function sortFields(fieldsMap) {\n    return sortObjMap(fieldsMap, (field) => ({\n      ...field,\n      type: replaceType(field.type),\n      args: field.args && sortArgs(field.args),\n    }));\n  }\n\n  function sortInputFields(fieldsMap) {\n    return sortObjMap(fieldsMap, (field) => ({\n      ...field,\n      type: replaceType(field.type),\n    }));\n  }\n\n  function sortTypes(array) {\n    return sortByName(array).map(replaceNamedType);\n  }\n\n  function sortNamedType(type) {\n    if (isScalarType(type) || isIntrospectionType(type)) {\n      return type;\n    }\n\n    if (isObjectType(type)) {\n      const config = type.toConfig();\n      return new GraphQLObjectType({\n        ...config,\n        interfaces: () => sortTypes(config.interfaces),\n        fields: () => sortFields(config.fields),\n      });\n    }\n\n    if (isInterfaceType(type)) {\n      const config = type.toConfig();\n      return new GraphQLInterfaceType({\n        ...config,\n        interfaces: () => sortTypes(config.interfaces),\n        fields: () => sortFields(config.fields),\n      });\n    }\n\n    if (isUnionType(type)) {\n      const config = type.toConfig();\n      return new GraphQLUnionType({\n        ...config,\n        types: () => sortTypes(config.types),\n      });\n    }\n\n    if (isEnumType(type)) {\n      const config = type.toConfig();\n      return new GraphQLEnumType({\n        ...config,\n        values: sortObjMap(config.values, (value) => value),\n      });\n    }\n\n    if (isInputObjectType(type)) {\n      const config = type.toConfig();\n      return new GraphQLInputObjectType({\n        ...config,\n        fields: () => sortInputFields(config.fields),\n      });\n    }\n    /* c8 ignore next 3 */\n    // Not reachable, all possible types have been considered.\n\n    false || invariant(false, 'Unexpected type: ' + inspect(type));\n  }\n}\n\nfunction sortObjMap(map, sortValueFn) {\n  const sortedMap = Object.create(null);\n\n  for (const key of Object.keys(map).sort(naturalCompare)) {\n    sortedMap[key] = sortValueFn(map[key]);\n  }\n\n  return sortedMap;\n}\n\nfunction sortByName(array) {\n  return sortBy(array, (obj) => obj.name);\n}\n\nfunction sortBy(array, mapToKey) {\n  return array.slice().sort((obj1, obj2) => {\n    const key1 = mapToKey(obj1);\n    const key2 = mapToKey(obj2);\n    return naturalCompare(key1, key2);\n  });\n}\n4/validation/rules/VariablesInAllowedPositionRule.mjs\fdimport { inspect } from '../../jsutils/inspect.mjs';\nimport { GraphQLError } from '../../error/GraphQLError.mjs';\nimport { Kind } from '../../language/kinds.mjs';\nimport { isNonNullType } from '../../type/definition.mjs';\nimport { isTypeSubTypeOf } from '../../utilities/typeComparators.mjs';\nimport { typeFromAST } from '../../utilities/typeFromAST.mjs';\n\n/**\n * Variables in allowed position\n *\n * Variable usages must be compatible with the arguments they are passed to.\n *\n * See https://spec.graphql.org/draft/#sec-All-Variable-Usages-are-Allowed\n */\nexport function VariablesInAllowedPositionRule(context) {\n  let varDefMap = Object.create(null);\n  return {\n    OperationDefinition: {\n      enter() {\n        varDefMap = Object.create(null);\n      },\n\n      leave(operation) {\n        const usages = context.getRecursiveVariableUsages(operation);\n\n        for (const { node, type, defaultValue } of usages) {\n          const varName = node.name.value;\n          const varDef = varDefMap[varName];\n\n          if (varDef && type) {\n            // A var type is allowed if it is the same or more strict (e.g. is\n            // a subtype of) than the expected type. It can be more strict if\n            // the variable type is non-null when the expected type is nullable.\n            // If both are list types, the variable item type can be more strict\n            // than the expected item type (contravariant).\n            const schema = context.getSchema();\n            const varType = typeFromAST(schema, varDef.type);\n\n            if (\n              varType &&\n              !allowedVariableUsage(\n                schema,\n                varType,\n                varDef.defaultValue,\n                type,\n                defaultValue,\n              )\n            ) {\n              const varTypeStr = inspect(varType);\n              const typeStr = inspect(type);\n              context.reportError(\n                new GraphQLError(\n                  `Variable \"$${varName}\" of type \"${varTypeStr}\" used in position expecting type \"${typeStr}\".`,\n                  {\n                    nodes: [varDef, node],\n                  },\n                ),\n              );\n            }\n          }\n        }\n      },\n    },\n\n    VariableDefinition(node) {\n      varDefMap[node.variable.name.value] = node;\n    },\n  };\n}\n/**\n * Returns true if the variable is allowed in the location it was found,\n * which includes considering if default values exist for either the variable\n * or the location at which it is located.\n */\n\nfunction allowedVariableUsage(\n  schema,\n  varType,\n  varDefaultValue,\n  locationType,\n  locationDefaultValue,\n) {\n  if (isNonNullType(locationType) && !isNonNullType(varType)) {\n    const hasNonNullVariableDefaultValue =\n      varDefaultValue != null && varDefaultValue.kind !== Kind.NULL;\n    const hasLocationDefaultValue = locationDefaultValue !== undefined;\n\n    if (!hasNonNullVariableDefaultValue && !hasLocationDefaultValue) {\n      return false;\n    }\n\n    const nullableLocationType = locationType.ofType;\n    return isTypeSubTypeOf(schema, varType, nullableLocationType);\n  }\n\n  return isTypeSubTypeOf(schema, varType, locationType);\n}\n\"/utilities/findBreakingChanges.mjsA\u0018import { inspect } from '../jsutils/inspect.mjs';\nimport { invariant } from '../jsutils/invariant.mjs';\nimport { keyMap } from '../jsutils/keyMap.mjs';\nimport { print } from '../language/printer.mjs';\nimport {\n  isEnumType,\n  isInputObjectType,\n  isInterfaceType,\n  isListType,\n  isNamedType,\n  isNonNullType,\n  isObjectType,\n  isRequiredArgument,\n  isRequiredInputField,\n  isScalarType,\n  isUnionType,\n} from '../type/definition.mjs';\nimport { isSpecifiedScalarType } from '../type/scalars.mjs';\nimport { astFromValue } from './astFromValue.mjs';\nimport { sortValueNode } from './sortValueNode.mjs';\nvar BreakingChangeType;\n\n(function (BreakingChangeType) {\n  BreakingChangeType['TYPE_REMOVED'] = 'TYPE_REMOVED';\n  BreakingChangeType['TYPE_CHANGED_KIND'] = 'TYPE_CHANGED_KIND';\n  BreakingChangeType['TYPE_REMOVED_FROM_UNION'] = 'TYPE_REMOVED_FROM_UNION';\n  BreakingChangeType['VALUE_REMOVED_FROM_ENUM'] = 'VALUE_REMOVED_FROM_ENUM';\n  BreakingChangeType['REQUIRED_INPUT_FIELD_ADDED'] =\n    'REQUIRED_INPUT_FIELD_ADDED';\n  BreakingChangeType['IMPLEMENTED_INTERFACE_REMOVED'] =\n    'IMPLEMENTED_INTERFACE_REMOVED';\n  BreakingChangeType['FIELD_REMOVED'] = 'FIELD_REMOVED';\n  BreakingChangeType['FIELD_CHANGED_KIND'] = 'FIELD_CHANGED_KIND';\n  BreakingChangeType['REQUIRED_ARG_ADDED'] = 'REQUIRED_ARG_ADDED';\n  BreakingChangeType['ARG_REMOVED'] = 'ARG_REMOVED';\n  BreakingChangeType['ARG_CHANGED_KIND'] = 'ARG_CHANGED_KIND';\n  BreakingChangeType['DIRECTIVE_REMOVED'] = 'DIRECTIVE_REMOVED';\n  BreakingChangeType['DIRECTIVE_ARG_REMOVED'] = 'DIRECTIVE_ARG_REMOVED';\n  BreakingChangeType['REQUIRED_DIRECTIVE_ARG_ADDED'] =\n    'REQUIRED_DIRECTIVE_ARG_ADDED';\n  BreakingChangeType['DIRECTIVE_REPEATABLE_REMOVED'] =\n    'DIRECTIVE_REPEATABLE_REMOVED';\n  BreakingChangeType['DIRECTIVE_LOCATION_REMOVED'] =\n    'DIRECTIVE_LOCATION_REMOVED';\n})(BreakingChangeType || (BreakingChangeType = {}));\n\nexport { BreakingChangeType };\nvar DangerousChangeType;\n\n(function (DangerousChangeType) {\n  DangerousChangeType['VALUE_ADDED_TO_ENUM'] = 'VALUE_ADDED_TO_ENUM';\n  DangerousChangeType['TYPE_ADDED_TO_UNION'] = 'TYPE_ADDED_TO_UNION';\n  DangerousChangeType['OPTIONAL_INPUT_FIELD_ADDED'] =\n    'OPTIONAL_INPUT_FIELD_ADDED';\n  DangerousChangeType['OPTIONAL_ARG_ADDED'] = 'OPTIONAL_ARG_ADDED';\n  DangerousChangeType['IMPLEMENTED_INTERFACE_ADDED'] =\n    'IMPLEMENTED_INTERFACE_ADDED';\n  DangerousChangeType['ARG_DEFAULT_VALUE_CHANGE'] = 'ARG_DEFAULT_VALUE_CHANGE';\n})(DangerousChangeType || (DangerousChangeType = {}));\n\nexport { DangerousChangeType };\n\n/**\n * Given two schemas, returns an Array containing descriptions of all the types\n * of breaking changes covered by the other functions down below.\n */\nexport function findBreakingChanges(oldSchema, newSchema) {\n  // @ts-expect-error\n  return findSchemaChanges(oldSchema, newSchema).filter(\n    (change) => change.type in BreakingChangeType,\n  );\n}\n/**\n * Given two schemas, returns an Array containing descriptions of all the types\n * of potentially dangerous changes covered by the other functions down below.\n */\n\nexport function findDangerousChanges(oldSchema, newSchema) {\n  // @ts-expect-error\n  return findSchemaChanges(oldSchema, newSchema).filter(\n    (change) => change.type in DangerousChangeType,\n  );\n}\n\nfunction findSchemaChanges(oldSchema, newSchema) {\n  return [\n    ...findTypeChanges(oldSchema, newSchema),\n    ...findDirectiveChanges(oldSchema, newSchema),\n  ];\n}\n\nfunction findDirectiveChanges(oldSchema, newSchema) {\n  const schemaChanges = [];\n  const directivesDiff = diff(\n    oldSchema.getDirectives(),\n    newSchema.getDirectives(),\n  );\n\n  for (const oldDirective of directivesDiff.removed) {\n    schemaChanges.push({\n      type: BreakingChangeType.DIRECTIVE_REMOVED,\n      description: `${oldDirective.name} was removed.`,\n    });\n  }\n\n  for (const [oldDirective, newDirective] of directivesDiff.persisted) {\n    const argsDiff = diff(oldDirective.args, newDirective.args);\n\n    for (const newArg of argsDiff.added) {\n      if (isRequiredArgument(newArg)) {\n        schemaChanges.push({\n          type: BreakingChangeType.REQUIRED_DIRECTIVE_ARG_ADDED,\n          description: `A required arg ${newArg.name} on directive ${oldDirective.name} was added.`,\n        });\n      }\n    }\n\n    for (const oldArg of argsDiff.removed) {\n      schemaChanges.push({\n        type: BreakingChangeType.DIRECTIVE_ARG_REMOVED,\n        description: `${oldArg.name} was removed from ${oldDirective.name}.`,\n      });\n    }\n\n    if (oldDirective.isRepeatable && !newDirective.isRepeatable) {\n      schemaChanges.push({\n        type: BreakingChangeType.DIRECTIVE_REPEATABLE_REMOVED,\n        description: `Repeatable flag was removed from ${oldDirective.name}.`,\n      });\n    }\n\n    for (const location of oldDirective.locations) {\n      if (!newDirective.locations.includes(location)) {\n        schemaChanges.push({\n          type: BreakingChangeType.DIRECTIVE_LOCATION_REMOVED,\n          description: `${location} was removed from ${oldDirective.name}.`,\n        });\n      }\n    }\n  }\n\n  return schemaChanges;\n}\n\nfunction findTypeChanges(oldSchema, newSchema) {\n  const schemaChanges = [];\n  const typesDiff = diff(\n    Object.values(oldSchema.getTypeMap()),\n    Object.values(newSchema.getTypeMap()),\n  );\n\n  for (const oldType of typesDiff.removed) {\n    schemaChanges.push({\n      type: BreakingChangeType.TYPE_REMOVED,\n      description: isSpecifiedScalarType(oldType)\n        ? `Standard scalar ${oldType.name} was removed because it is not referenced anymore.`\n        : `${oldType.name} was removed.`,\n    });\n  }\n\n  for (const [oldType, newType] of typesDiff.persisted) {\n    if (isEnumType(oldType) && isEnumType(newType)) {\n      schemaChanges.push(...findEnumTypeChanges(oldType, newType));\n    } else if (isUnionType(oldType) && isUnionType(newType)) {\n      schemaChanges.push(...findUnionTypeChanges(oldType, newType));\n    } else if (isInputObjectType(oldType) && isInputObjectType(newType)) {\n      schemaChanges.push(...findInputObjectTypeChanges(oldType, newType));\n    } else if (isObjectType(oldType) && isObjectType(newType)) {\n      schemaChanges.push(\n        ...findFieldChanges(oldType, newType),\n        ...findImplementedInterfacesChanges(oldType, newType),\n      );\n    } else if (isInterfaceType(oldType) && isInterfaceType(newType)) {\n      schemaChanges.push(\n        ...findFieldChanges(oldType, newType),\n        ...findImplementedInterfacesChanges(oldType, newType),\n      );\n    } else if (oldType.constructor !== newType.constructor) {\n      schemaChanges.push({\n        type: BreakingChangeType.TYPE_CHANGED_KIND,\n        description:\n          `${oldType.name} changed from ` +\n          `${typeKindName(oldType)} to ${typeKindName(newType)}.`,\n      });\n    }\n  }\n\n  return schemaChanges;\n}\n\nfunction findInputObjectTypeChanges(oldType, newType) {\n  const schemaChanges = [];\n  const fieldsDiff = diff(\n    Object.values(oldType.getFields()),\n    Object.values(newType.getFields()),\n  );\n\n  for (const newField of fieldsDiff.added) {\n    if (isRequiredInputField(newField)) {\n      schemaChanges.push({\n        type: BreakingChangeType.REQUIRED_INPUT_FIELD_ADDED,\n        description: `A required field ${newField.name} on input type ${oldType.name} was added.`,\n      });\n    } else {\n      schemaChanges.push({\n        type: DangerousChangeType.OPTIONAL_INPUT_FIELD_ADDED,\n        description: `An optional field ${newField.name} on input type ${oldType.name} was added.`,\n      });\n    }\n  }\n\n  for (const oldField of fieldsDiff.removed) {\n    schemaChanges.push({\n      type: BreakingChangeType.FIELD_REMOVED,\n      description: `${oldType.name}.${oldField.name} was removed.`,\n    });\n  }\n\n  for (const [oldField, newField] of fieldsDiff.persisted) {\n    const isSafe = isChangeSafeForInputObjectFieldOrFieldArg(\n      oldField.type,\n      newField.type,\n    );\n\n    if (!isSafe) {\n      schemaChanges.push({\n        type: BreakingChangeType.FIELD_CHANGED_KIND,\n        description:\n          `${oldType.name}.${oldField.name} changed type from ` +\n          `${String(oldField.type)} to ${String(newField.type)}.`,\n      });\n    }\n  }\n\n  return schemaChanges;\n}\n\nfunction findUnionTypeChanges(oldType, newType) {\n  const schemaChanges = [];\n  const possibleTypesDiff = diff(oldType.getTypes(), newType.getTypes());\n\n  for (const newPossibleType of possibleTypesDiff.added) {\n    schemaChanges.push({\n      type: DangerousChangeType.TYPE_ADDED_TO_UNION,\n      description: `${newPossibleType.name} was added to union type ${oldType.name}.`,\n    });\n  }\n\n  for (const oldPossibleType of possibleTypesDiff.removed) {\n    schemaChanges.push({\n      type: BreakingChangeType.TYPE_REMOVED_FROM_UNION,\n      description: `${oldPossibleType.name} was removed from union type ${oldType.name}.`,\n    });\n  }\n\n  return schemaChanges;\n}\n\nfunction findEnumTypeChanges(oldType, newType) {\n  const schemaChanges = [];\n  const valuesDiff = diff(oldType.getValues(), newType.getValues());\n\n  for (const newValue of valuesDiff.added) {\n    schemaChanges.push({\n      type: DangerousChangeType.VALUE_ADDED_TO_ENUM,\n      description: `${newValue.name} was added to enum type ${oldType.name}.`,\n    });\n  }\n\n  for (const oldValue of valuesDiff.removed) {\n    schemaChanges.push({\n      type: BreakingChangeType.VALUE_REMOVED_FROM_ENUM,\n      description: `${oldValue.name} was removed from enum type ${oldType.name}.`,\n    });\n  }\n\n  return schemaChanges;\n}\n\nfunction findImplementedInterfacesChanges(oldType, newType) {\n  const schemaChanges = [];\n  const interfacesDiff = diff(oldType.getInterfaces(), newType.getInterfaces());\n\n  for (const newInterface of interfacesDiff.added) {\n    schemaChanges.push({\n      type: DangerousChangeType.IMPLEMENTED_INTERFACE_ADDED,\n      description: `${newInterface.name} added to interfaces implemented by ${oldType.name}.`,\n    });\n  }\n\n  for (const oldInterface of interfacesDiff.removed) {\n    schemaChanges.push({\n      type: BreakingChangeType.IMPLEMENTED_INTERFACE_REMOVED,\n      description: `${oldType.name} no longer implements interface ${oldInterface.name}.`,\n    });\n  }\n\n  return schemaChanges;\n}\n\nfunction findFieldChanges(oldType, newType) {\n  const schemaChanges = [];\n  const fieldsDiff = diff(\n    Object.values(oldType.getFields()),\n    Object.values(newType.getFields()),\n  );\n\n  for (const oldField of fieldsDiff.removed) {\n    schemaChanges.push({\n      type: BreakingChangeType.FIELD_REMOVED,\n      description: `${oldType.name}.${oldField.name} was removed.`,\n    });\n  }\n\n  for (const [oldField, newField] of fieldsDiff.persisted) {\n    schemaChanges.push(...findArgChanges(oldType, oldField, newField));\n    const isSafe = isChangeSafeForObjectOrInterfaceField(\n      oldField.type,\n      newField.type,\n    );\n\n    if (!isSafe) {\n      schemaChanges.push({\n        type: BreakingChangeType.FIELD_CHANGED_KIND,\n        description:\n          `${oldType.name}.${oldField.name} changed type from ` +\n          `${String(oldField.type)} to ${String(newField.type)}.`,\n      });\n    }\n  }\n\n  return schemaChanges;\n}\n\nfunction findArgChanges(oldType, oldField, newField) {\n  const schemaChanges = [];\n  const argsDiff = diff(oldField.args, newField.args);\n\n  for (const oldArg of argsDiff.removed) {\n    schemaChanges.push({\n      type: BreakingChangeType.ARG_REMOVED,\n      description: `${oldType.name}.${oldField.name} arg ${oldArg.name} was removed.`,\n    });\n  }\n\n  for (const [oldArg, newArg] of argsDiff.persisted) {\n    const isSafe = isChangeSafeForInputObjectFieldOrFieldArg(\n      oldArg.type,\n      newArg.type,\n    );\n\n    if (!isSafe) {\n      schemaChanges.push({\n        type: BreakingChangeType.ARG_CHANGED_KIND,\n        description:\n          `${oldType.name}.${oldField.name} arg ${oldArg.name} has changed type from ` +\n          `${String(oldArg.type)} to ${String(newArg.type)}.`,\n      });\n    } else if (oldArg.defaultValue !== undefined) {\n      if (newArg.defaultValue === undefined) {\n        schemaChanges.push({\n          type: DangerousChangeType.ARG_DEFAULT_VALUE_CHANGE,\n          description: `${oldType.name}.${oldField.name} arg ${oldArg.name} defaultValue was removed.`,\n        });\n      } else {\n        // Since we looking only for client's observable changes we should\n        // compare default values in the same representation as they are\n        // represented inside introspection.\n        const oldValueStr = stringifyValue(oldArg.defaultValue, oldArg.type);\n        const newValueStr = stringifyValue(newArg.defaultValue, newArg.type);\n\n        if (oldValueStr !== newValueStr) {\n          schemaChanges.push({\n            type: DangerousChangeType.ARG_DEFAULT_VALUE_CHANGE,\n            description: `${oldType.name}.${oldField.name} arg ${oldArg.name} has changed defaultValue from ${oldValueStr} to ${newValueStr}.`,\n          });\n        }\n      }\n    }\n  }\n\n  for (const newArg of argsDiff.added) {\n    if (isRequiredArgument(newArg)) {\n      schemaChanges.push({\n        type: BreakingChangeType.REQUIRED_ARG_ADDED,\n        description: `A required arg ${newArg.name} on ${oldType.name}.${oldField.name} was added.`,\n      });\n    } else {\n      schemaChanges.push({\n        type: DangerousChangeType.OPTIONAL_ARG_ADDED,\n        description: `An optional arg ${newArg.name} on ${oldType.name}.${oldField.name} was added.`,\n      });\n    }\n  }\n\n  return schemaChanges;\n}\n\nfunction isChangeSafeForObjectOrInterfaceField(oldType, newType) {\n  if (isListType(oldType)) {\n    return (\n      // if they're both lists, make sure the underlying types are compatible\n      (isListType(newType) &&\n        isChangeSafeForObjectOrInterfaceField(\n          oldType.ofType,\n          newType.ofType,\n        )) || // moving from nullable to non-null of the same underlying type is safe\n      (isNonNullType(newType) &&\n        isChangeSafeForObjectOrInterfaceField(oldType, newType.ofType))\n    );\n  }\n\n  if (isNonNullType(oldType)) {\n    // if they're both non-null, make sure the underlying types are compatible\n    return (\n      isNonNullType(newType) &&\n      isChangeSafeForObjectOrInterfaceField(oldType.ofType, newType.ofType)\n    );\n  }\n\n  return (\n    // if they're both named types, see if their names are equivalent\n    (isNamedType(newType) && oldType.name === newType.name) || // moving from nullable to non-null of the same underlying type is safe\n    (isNonNullType(newType) &&\n      isChangeSafeForObjectOrInterfaceField(oldType, newType.ofType))\n  );\n}\n\nfunction isChangeSafeForInputObjectFieldOrFieldArg(oldType, newType) {\n  if (isListType(oldType)) {\n    // if they're both lists, make sure the underlying types are compatible\n    return (\n      isListType(newType) &&\n      isChangeSafeForInputObjectFieldOrFieldArg(oldType.ofType, newType.ofType)\n    );\n  }\n\n  if (isNonNullType(oldType)) {\n    return (\n      // if they're both non-null, make sure the underlying types are\n      // compatible\n      (isNonNullType(newType) &&\n        isChangeSafeForInputObjectFieldOrFieldArg(\n          oldType.ofType,\n          newType.ofType,\n        )) || // moving from non-null to nullable of the same underlying type is safe\n      (!isNonNullType(newType) &&\n        isChangeSafeForInputObjectFieldOrFieldArg(oldType.ofType, newType))\n    );\n  } // if they're both named types, see if their names are equivalent\n\n  return isNamedType(newType) && oldType.name === newType.name;\n}\n\nfunction typeKindName(type) {\n  if (isScalarType(type)) {\n    return 'a Scalar type';\n  }\n\n  if (isObjectType(type)) {\n    return 'an Object type';\n  }\n\n  if (isInterfaceType(type)) {\n    return 'an Interface type';\n  }\n\n  if (isUnionType(type)) {\n    return 'a Union type';\n  }\n\n  if (isEnumType(type)) {\n    return 'an Enum type';\n  }\n\n  if (isInputObjectType(type)) {\n    return 'an Input type';\n  }\n  /* c8 ignore next 3 */\n  // Not reachable, all possible types have been considered.\n\n  false || invariant(false, 'Unexpected type: ' + inspect(type));\n}\n\nfunction stringifyValue(value, type) {\n  const ast = astFromValue(value, type);\n  ast != null || invariant(false);\n  return print(sortValueNode(ast));\n}\n\nfunction diff(oldArray, newArray) {\n  const added = [];\n  const removed = [];\n  const persisted = [];\n  const oldMap = keyMap(oldArray, ({ name }) => name);\n  const newMap = keyMap(newArray, ({ name }) => name);\n\n  for (const oldItem of oldArray) {\n    const newItem = newMap[oldItem.name];\n\n    if (newItem === undefined) {\n      removed.push(oldItem);\n    } else {\n      persisted.push([oldItem, newItem]);\n    }\n  }\n\n  for (const newItem of newArray) {\n    if (oldMap[newItem.name] === undefined) {\n      added.push(newItem);\n    }\n  }\n\n  return {\n    added,\n    persisted,\n    removed,\n  };\n}\n)/validation/rules/UniqueTypeNamesRule.mjs\u0005\u0005import { GraphQLError } from '../../error/GraphQLError.mjs';\n\n/**\n * Unique type names\n *\n * A GraphQL document is only valid if all defined types have unique names.\n */\nexport function UniqueTypeNamesRule(context) {\n  const knownTypeNames = Object.create(null);\n  const schema = context.getSchema();\n  return {\n    ScalarTypeDefinition: checkTypeName,\n    ObjectTypeDefinition: checkTypeName,\n    InterfaceTypeDefinition: checkTypeName,\n    UnionTypeDefinition: checkTypeName,\n    EnumTypeDefinition: checkTypeName,\n    InputObjectTypeDefinition: checkTypeName,\n  };\n\n  function checkTypeName(node) {\n    const typeName = node.name.value;\n\n    if (schema !== null && schema !== void 0 && schema.getType(typeName)) {\n      context.reportError(\n        new GraphQLError(\n          `Type \"${typeName}\" already exists in the schema. It cannot also be defined in this type definition.`,\n          {\n            nodes: node.name,\n          },\n        ),\n      );\n      return;\n    }\n\n    if (knownTypeNames[typeName]) {\n      context.reportError(\n        new GraphQLError(`There can be only one type named \"${typeName}\".`, {\n          nodes: [knownTypeNames[typeName], node.name],\n        }),\n      );\n    } else {\n      knownTypeNames[typeName] = node.name;\n    }\n\n    return false;\n  }\n}\n/language/directiveLocation.js\u0005'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.DirectiveLocation = void 0;\n\n/**\n * The set of allowed directive location values.\n */\nvar DirectiveLocation;\nexports.DirectiveLocation = DirectiveLocation;\n\n(function (DirectiveLocation) {\n  DirectiveLocation['QUERY'] = 'QUERY';\n  DirectiveLocation['MUTATION'] = 'MUTATION';\n  DirectiveLocation['SUBSCRIPTION'] = 'SUBSCRIPTION';\n  DirectiveLocation['FIELD'] = 'FIELD';\n  DirectiveLocation['FRAGMENT_DEFINITION'] = 'FRAGMENT_DEFINITION';\n  DirectiveLocation['FRAGMENT_SPREAD'] = 'FRAGMENT_SPREAD';\n  DirectiveLocation['INLINE_FRAGMENT'] = 'INLINE_FRAGMENT';\n  DirectiveLocation['VARIABLE_DEFINITION'] = 'VARIABLE_DEFINITION';\n  DirectiveLocation['SCHEMA'] = 'SCHEMA';\n  DirectiveLocation['SCALAR'] = 'SCALAR';\n  DirectiveLocation['OBJECT'] = 'OBJECT';\n  DirectiveLocation['FIELD_DEFINITION'] = 'FIELD_DEFINITION';\n  DirectiveLocation['ARGUMENT_DEFINITION'] = 'ARGUMENT_DEFINITION';\n  DirectiveLocation['INTERFACE'] = 'INTERFACE';\n  DirectiveLocation['UNION'] = 'UNION';\n  DirectiveLocation['ENUM'] = 'ENUM';\n  DirectiveLocation['ENUM_VALUE'] = 'ENUM_VALUE';\n  DirectiveLocation['INPUT_OBJECT'] = 'INPUT_OBJECT';\n  DirectiveLocation['INPUT_FIELD_DEFINITION'] = 'INPUT_FIELD_DEFINITION';\n})(DirectiveLocation || (exports.DirectiveLocation = DirectiveLocation = {}));\n/**\n * The enum type representing the directive location values.\n *\n * @deprecated Please use `DirectiveLocation`. Will be remove in v17.\n */\n/type/directives.d.ts\u000bimport type { Maybe } from '../jsutils/Maybe';\nimport type { DirectiveDefinitionNode } from '../language/ast';\nimport { DirectiveLocation } from '../language/directiveLocation';\nimport type {\n  GraphQLArgument,\n  GraphQLFieldConfigArgumentMap,\n} from './definition';\n/**\n * Test if the given value is a GraphQL directive.\n */\nexport declare function isDirective(\n  directive: unknown,\n): directive is GraphQLDirective;\nexport declare function assertDirective(directive: unknown): GraphQLDirective;\n/**\n * Custom extensions\n *\n * @remarks\n * Use a unique identifier name for your extension, for example the name of\n * your library or project. Do not use a shortened identifier as this increases\n * the risk of conflicts. We recommend you add at most one extension field,\n * an object which can contain all the values you need.\n */\nexport interface GraphQLDirectiveExtensions {\n  [attributeName: string]: unknown;\n}\n/**\n * Directives are used by the GraphQL runtime as a way of modifying execution\n * behavior. Type system creators will usually not create these directly.\n */\nexport declare class GraphQLDirective {\n  name: string;\n  description: Maybe<string>;\n  locations: ReadonlyArray<DirectiveLocation>;\n  args: ReadonlyArray<GraphQLArgument>;\n  isRepeatable: boolean;\n  extensions: Readonly<GraphQLDirectiveExtensions>;\n  astNode: Maybe<DirectiveDefinitionNode>;\n  constructor(config: Readonly<GraphQLDirectiveConfig>);\n  get [Symbol.toStringTag](): string;\n  toConfig(): GraphQLDirectiveNormalizedConfig;\n  toString(): string;\n  toJSON(): string;\n}\nexport interface GraphQLDirectiveConfig {\n  name: string;\n  description?: Maybe<string>;\n  locations: ReadonlyArray<DirectiveLocation>;\n  args?: Maybe<GraphQLFieldConfigArgumentMap>;\n  isRepeatable?: Maybe<boolean>;\n  extensions?: Maybe<Readonly<GraphQLDirectiveExtensions>>;\n  astNode?: Maybe<DirectiveDefinitionNode>;\n}\ninterface GraphQLDirectiveNormalizedConfig extends GraphQLDirectiveConfig {\n  args: GraphQLFieldConfigArgumentMap;\n  isRepeatable: boolean;\n  extensions: Readonly<GraphQLDirectiveExtensions>;\n}\n/**\n * Used to conditionally include fields or fragments.\n */\nexport declare const GraphQLIncludeDirective: GraphQLDirective;\n/**\n * Used to conditionally skip (exclude) fields or fragments.\n */\nexport declare const GraphQLSkipDirective: GraphQLDirective;\n/**\n * Constant string used for default reason for a deprecation.\n */\nexport declare const DEFAULT_DEPRECATION_REASON = 'No longer supported';\n/**\n * Used to declare element of a GraphQL schema as deprecated.\n */\nexport declare const GraphQLDeprecatedDirective: GraphQLDirective;\n/**\n * Used to provide a URL for specifying the behavior of custom scalar definitions.\n */\nexport declare const GraphQLSpecifiedByDirective: GraphQLDirective;\n/**\n * The full list of specified directives.\n */\nexport declare const specifiedDirectives: ReadonlyArray<GraphQLDirective>;\nexport declare function isSpecifiedDirective(\n  directive: GraphQLDirective,\n): boolean;\nexport {};\n/utilities/assertValidName.mjs\u0003import { devAssert } from '../jsutils/devAssert.mjs';\nimport { GraphQLError } from '../error/GraphQLError.mjs';\nimport { assertName } from '../type/assertName.mjs';\n/* c8 ignore start */\n\n/**\n * Upholds the spec rules about naming.\n * @deprecated Please use `assertName` instead. Will be removed in v17\n */\n\nexport function assertValidName(name) {\n  const error = isValidNameError(name);\n\n  if (error) {\n    throw error;\n  }\n\n  return name;\n}\n/**\n * Returns an Error if a name is invalid.\n * @deprecated Please use `assertName` instead. Will be removed in v17\n */\n\nexport function isValidNameError(name) {\n  typeof name === 'string' || devAssert(false, 'Expected name to be a string.');\n\n  if (name.startsWith('__')) {\n    return new GraphQLError(\n      `Name \"${name}\" must not begin with \"__\", which is reserved by GraphQL introspection.`,\n    );\n  }\n\n  try {\n    assertName(name);\n  } catch (error) {\n    return error;\n  }\n}\n/* c8 ignore stop */\n/utilities/extendSchema.d.ts\u0004import type { DocumentNode } from '../language/ast';\nimport type {\n  GraphQLSchemaNormalizedConfig,\n  GraphQLSchemaValidationOptions,\n} from '../type/schema';\nimport { GraphQLSchema } from '../type/schema';\ninterface Options extends GraphQLSchemaValidationOptions {\n  /**\n   * Set to true to assume the SDL is valid.\n   *\n   * Default: false\n   */\n  assumeValidSDL?: boolean;\n}\n/**\n * Produces a new schema given an existing schema and a document which may\n * contain GraphQL type extensions and definitions. The original schema will\n * remain unaltered.\n *\n * Because a schema represents a graph of references, a schema cannot be\n * extended without effectively making an entire copy. We do not know until it's\n * too late if subgraphs remain unchanged.\n *\n * This algorithm copies the provided schema, applying extensions while\n * producing the copy. The original schema remains unaltered.\n */\nexport declare function extendSchema(\n  schema: GraphQLSchema,\n  documentAST: DocumentNode,\n  options?: Options,\n): GraphQLSchema;\n/**\n * @internal\n */\nexport declare function extendSchemaImpl(\n  schemaConfig: GraphQLSchemaNormalizedConfig,\n  documentAST: DocumentNode,\n  options?: Options,\n): GraphQLSchemaNormalizedConfig;\nexport {};\n/utilities/typeFromAST.d.ts\u0004import type {\n  ListTypeNode,\n  NamedTypeNode,\n  NonNullTypeNode,\n  TypeNode,\n} from '../language/ast';\nimport type { GraphQLNamedType, GraphQLType } from '../type/definition';\nimport { GraphQLList, GraphQLNonNull } from '../type/definition';\nimport type { GraphQLSchema } from '../type/schema';\n/**\n * Given a Schema and an AST node describing a type, return a GraphQLType\n * definition which applies to that type. For example, if provided the parsed\n * AST node for `[User]`, a GraphQLList instance will be returned, containing\n * the type called \"User\" found in the schema. If a type called \"User\" is not\n * found in the schema, then undefined will be returned.\n */\nexport declare function typeFromAST(\n  schema: GraphQLSchema,\n  typeNode: NamedTypeNode,\n): GraphQLNamedType | undefined;\nexport declare function typeFromAST(\n  schema: GraphQLSchema,\n  typeNode: ListTypeNode,\n): GraphQLList<any> | undefined;\nexport declare function typeFromAST(\n  schema: GraphQLSchema,\n  typeNode: NonNullTypeNode,\n): GraphQLNonNull<any> | undefined;\nexport declare function typeFromAST(\n  schema: GraphQLSchema,\n  typeNode: TypeNode,\n): GraphQLType | undefined;\n/language/lexer.mjsZimport { syntaxError } from '../error/syntaxError.mjs';\nimport { Token } from './ast.mjs';\nimport { dedentBlockStringLines } from './blockString.mjs';\nimport { isDigit, isNameContinue, isNameStart } from './characterClasses.mjs';\nimport { TokenKind } from './tokenKind.mjs';\n/**\n * Given a Source object, creates a Lexer for that source.\n * A Lexer is a stateful stream generator in that every time\n * it is advanced, it returns the next token in the Source. Assuming the\n * source lexes, the final Token emitted by the lexer will be of kind\n * EOF, after which the lexer will repeatedly return the same EOF token\n * whenever called.\n */\n\nexport class Lexer {\n  /**\n   * The previously focused non-ignored token.\n   */\n\n  /**\n   * The currently focused non-ignored token.\n   */\n\n  /**\n   * The (1-indexed) line containing the current token.\n   */\n\n  /**\n   * The character offset at which the current line begins.\n   */\n  constructor(source) {\n    const startOfFileToken = new Token(TokenKind.SOF, 0, 0, 0, 0);\n    this.source = source;\n    this.lastToken = startOfFileToken;\n    this.token = startOfFileToken;\n    this.line = 1;\n    this.lineStart = 0;\n  }\n\n  get [Symbol.toStringTag]() {\n    return 'Lexer';\n  }\n  /**\n   * Advances the token stream to the next non-ignored token.\n   */\n\n  advance() {\n    this.lastToken = this.token;\n    const token = (this.token = this.lookahead());\n    return token;\n  }\n  /**\n   * Looks ahead and returns the next non-ignored token, but does not change\n   * the state of Lexer.\n   */\n\n  lookahead() {\n    let token = this.token;\n\n    if (token.kind !== TokenKind.EOF) {\n      do {\n        if (token.next) {\n          token = token.next;\n        } else {\n          // Read the next token and form a link in the token linked-list.\n          const nextToken = readNextToken(this, token.end); // @ts-expect-error next is only mutable during parsing.\n\n          token.next = nextToken; // @ts-expect-error prev is only mutable during parsing.\n\n          nextToken.prev = token;\n          token = nextToken;\n        }\n      } while (token.kind === TokenKind.COMMENT);\n    }\n\n    return token;\n  }\n}\n/**\n * @internal\n */\n\nexport function isPunctuatorTokenKind(kind) {\n  return (\n    kind === TokenKind.BANG ||\n    kind === TokenKind.DOLLAR ||\n    kind === TokenKind.AMP ||\n    kind === TokenKind.PAREN_L ||\n    kind === TokenKind.PAREN_R ||\n    kind === TokenKind.SPREAD ||\n    kind === TokenKind.COLON ||\n    kind === TokenKind.EQUALS ||\n    kind === TokenKind.AT ||\n    kind === TokenKind.BRACKET_L ||\n    kind === TokenKind.BRACKET_R ||\n    kind === TokenKind.BRACE_L ||\n    kind === TokenKind.PIPE ||\n    kind === TokenKind.BRACE_R\n  );\n}\n/**\n * A Unicode scalar value is any Unicode code point except surrogate code\n * points. In other words, the inclusive ranges of values 0x0000 to 0xD7FF and\n * 0xE000 to 0x10FFFF.\n *\n * SourceCharacter ::\n *   - \"Any Unicode scalar value\"\n */\n\nfunction isUnicodeScalarValue(code) {\n  return (\n    (code >= 0x0000 && code <= 0xd7ff) || (code >= 0xe000 && code <= 0x10ffff)\n  );\n}\n/**\n * The GraphQL specification defines source text as a sequence of unicode scalar\n * values (which Unicode defines to exclude surrogate code points). However\n * JavaScript defines strings as a sequence of UTF-16 code units which may\n * include surrogates. A surrogate pair is a valid source character as it\n * encodes a supplementary code point (above U+FFFF), but unpaired surrogate\n * code points are not valid source characters.\n */\n\nfunction isSupplementaryCodePoint(body, location) {\n  return (\n    isLeadingSurrogate(body.charCodeAt(location)) &&\n    isTrailingSurrogate(body.charCodeAt(location + 1))\n  );\n}\n\nfunction isLeadingSurrogate(code) {\n  return code >= 0xd800 && code <= 0xdbff;\n}\n\nfunction isTrailingSurrogate(code) {\n  return code >= 0xdc00 && code <= 0xdfff;\n}\n/**\n * Prints the code point (or end of file reference) at a given location in a\n * source for use in error messages.\n *\n * Printable ASCII is printed quoted, while other points are printed in Unicode\n * code point form (ie. U+1234).\n */\n\nfunction printCodePointAt(lexer, location) {\n  const code = lexer.source.body.codePointAt(location);\n\n  if (code === undefined) {\n    return TokenKind.EOF;\n  } else if (code >= 0x0020 && code <= 0x007e) {\n    // Printable ASCII\n    const char = String.fromCodePoint(code);\n    return char === '\"' ? \"'\\\"'\" : `\"${char}\"`;\n  } // Unicode code point\n\n  return 'U+' + code.toString(16).toUpperCase().padStart(4, '0');\n}\n/**\n * Create a token with line and column location information.\n */\n\nfunction createToken(lexer, kind, start, end, value) {\n  const line = lexer.line;\n  const col = 1 + start - lexer.lineStart;\n  return new Token(kind, start, end, line, col, value);\n}\n/**\n * Gets the next token from the source starting at the given position.\n *\n * This skips over whitespace until it finds the next lexable token, then lexes\n * punctuators immediately or calls the appropriate helper function for more\n * complicated tokens.\n */\n\nfunction readNextToken(lexer, start) {\n  const body = lexer.source.body;\n  const bodyLength = body.length;\n  let position = start;\n\n  while (position < bodyLength) {\n    const code = body.charCodeAt(position); // SourceCharacter\n\n    switch (code) {\n      // Ignored ::\n      //   - UnicodeBOM\n      //   - WhiteSpace\n      //   - LineTerminator\n      //   - Comment\n      //   - Comma\n      //\n      // UnicodeBOM :: \"Byte Order Mark (U+FEFF)\"\n      //\n      // WhiteSpace ::\n      //   - \"Horizontal Tab (U+0009)\"\n      //   - \"Space (U+0020)\"\n      //\n      // Comma :: ,\n      case 0xfeff: // <BOM>\n\n      case 0x0009: // \\t\n\n      case 0x0020: // <space>\n\n      case 0x002c:\n        // ,\n        ++position;\n        continue;\n      // LineTerminator ::\n      //   - \"New Line (U+000A)\"\n      //   - \"Carriage Return (U+000D)\" [lookahead != \"New Line (U+000A)\"]\n      //   - \"Carriage Return (U+000D)\" \"New Line (U+000A)\"\n\n      case 0x000a:\n        // \\n\n        ++position;\n        ++lexer.line;\n        lexer.lineStart = position;\n        continue;\n\n      case 0x000d:\n        // \\r\n        if (body.charCodeAt(position + 1) === 0x000a) {\n          position += 2;\n        } else {\n          ++position;\n        }\n\n        ++lexer.line;\n        lexer.lineStart = position;\n        continue;\n      // Comment\n\n      case 0x0023:\n        // #\n        return readComment(lexer, position);\n      // Token ::\n      //   - Punctuator\n      //   - Name\n      //   - IntValue\n      //   - FloatValue\n      //   - StringValue\n      //\n      // Punctuator :: one of ! $ & ( ) ... : = @ [ ] { | }\n\n      case 0x0021:\n        // !\n        return createToken(lexer, TokenKind.BANG, position, position + 1);\n\n      case 0x0024:\n        // $\n        return createToken(lexer, TokenKind.DOLLAR, position, position + 1);\n\n      case 0x0026:\n        // &\n        return createToken(lexer, TokenKind.AMP, position, position + 1);\n\n      case 0x0028:\n        // (\n        return createToken(lexer, TokenKind.PAREN_L, position, position + 1);\n\n      case 0x0029:\n        // )\n        return createToken(lexer, TokenKind.PAREN_R, position, position + 1);\n\n      case 0x002e:\n        // .\n        if (\n          body.charCodeAt(position + 1) === 0x002e &&\n          body.charCodeAt(position + 2) === 0x002e\n        ) {\n          return createToken(lexer, TokenKind.SPREAD, position, position + 3);\n        }\n\n        break;\n\n      case 0x003a:\n        // :\n        return createToken(lexer, TokenKind.COLON, position, position + 1);\n\n      case 0x003d:\n        // =\n        return createToken(lexer, TokenKind.EQUALS, position, position + 1);\n\n      case 0x0040:\n        // @\n        return createToken(lexer, TokenKind.AT, position, position + 1);\n\n      case 0x005b:\n        // [\n        return createToken(lexer, TokenKind.BRACKET_L, position, position + 1);\n\n      case 0x005d:\n        // ]\n        return createToken(lexer, TokenKind.BRACKET_R, position, position + 1);\n\n      case 0x007b:\n        // {\n        return createToken(lexer, TokenKind.BRACE_L, position, position + 1);\n\n      case 0x007c:\n        // |\n        return createToken(lexer, TokenKind.PIPE, position, position + 1);\n\n      case 0x007d:\n        // }\n        return createToken(lexer, TokenKind.BRACE_R, position, position + 1);\n      // StringValue\n\n      case 0x0022:\n        // \"\n        if (\n          body.charCodeAt(position + 1) === 0x0022 &&\n          body.charCodeAt(position + 2) === 0x0022\n        ) {\n          return readBlockString(lexer, position);\n        }\n\n        return readString(lexer, position);\n    } // IntValue | FloatValue (Digit | -)\n\n    if (isDigit(code) || code === 0x002d) {\n      return readNumber(lexer, position, code);\n    } // Name\n\n    if (isNameStart(code)) {\n      return readName(lexer, position);\n    }\n\n    throw syntaxError(\n      lexer.source,\n      position,\n      code === 0x0027\n        ? 'Unexpected single quote character (\\'), did you mean to use a double quote (\")?'\n        : isUnicodeScalarValue(code) || isSupplementaryCodePoint(body, position)\n        ? `Unexpected character: ${printCodePointAt(lexer, position)}.`\n        : `Invalid character: ${printCodePointAt(lexer, position)}.`,\n    );\n  }\n\n  return createToken(lexer, TokenKind.EOF, bodyLength, bodyLength);\n}\n/**\n * Reads a comment token from the source file.\n *\n * ```\n * Comment :: # CommentChar* [lookahead != CommentChar]\n *\n * CommentChar :: SourceCharacter but not LineTerminator\n * ```\n */\n\nfunction readComment(lexer, start) {\n  const body = lexer.source.body;\n  const bodyLength = body.length;\n  let position = start + 1;\n\n  while (position < bodyLength) {\n    const code = body.charCodeAt(position); // LineTerminator (\\n | \\r)\n\n    if (code === 0x000a || code === 0x000d) {\n      break;\n    } // SourceCharacter\n\n    if (isUnicodeScalarValue(code)) {\n      ++position;\n    } else if (isSupplementaryCodePoint(body, position)) {\n      position += 2;\n    } else {\n      break;\n    }\n  }\n\n  return createToken(\n    lexer,\n    TokenKind.COMMENT,\n    start,\n    position,\n    body.slice(start + 1, position),\n  );\n}\n/**\n * Reads a number token from the source file, either a FloatValue or an IntValue\n * depending on whether a FractionalPart or ExponentPart is encountered.\n *\n * ```\n * IntValue :: IntegerPart [lookahead != {Digit, `.`, NameStart}]\n *\n * IntegerPart ::\n *   - NegativeSign? 0\n *   - NegativeSign? NonZeroDigit Digit*\n *\n * NegativeSign :: -\n *\n * NonZeroDigit :: Digit but not `0`\n *\n * FloatValue ::\n *   - IntegerPart FractionalPart ExponentPart [lookahead != {Digit, `.`, NameStart}]\n *   - IntegerPart FractionalPart [lookahead != {Digit, `.`, NameStart}]\n *   - IntegerPart ExponentPart [lookahead != {Digit, `.`, NameStart}]\n *\n * FractionalPart :: . Digit+\n *\n * ExponentPart :: ExponentIndicator Sign? Digit+\n *\n * ExponentIndicator :: one of `e` `E`\n *\n * Sign :: one of + -\n * ```\n */\n\nfunction readNumber(lexer, start, firstCode) {\n  const body = lexer.source.body;\n  let position = start;\n  let code = firstCode;\n  let isFloat = false; // NegativeSign (-)\n\n  if (code === 0x002d) {\n    code = body.charCodeAt(++position);\n  } // Zero (0)\n\n  if (code === 0x0030) {\n    code = body.charCodeAt(++position);\n\n    if (isDigit(code)) {\n      throw syntaxError(\n        lexer.source,\n        position,\n        `Invalid number, unexpected digit after 0: ${printCodePointAt(\n          lexer,\n          position,\n        )}.`,\n      );\n    }\n  } else {\n    position = readDigits(lexer, position, code);\n    code = body.charCodeAt(position);\n  } // Full stop (.)\n\n  if (code === 0x002e) {\n    isFloat = true;\n    code = body.charCodeAt(++position);\n    position = readDigits(lexer, position, code);\n    code = body.charCodeAt(position);\n  } // E e\n\n  if (code === 0x0045 || code === 0x0065) {\n    isFloat = true;\n    code = body.charCodeAt(++position); // + -\n\n    if (code === 0x002b || code === 0x002d) {\n      code = body.charCodeAt(++position);\n    }\n\n    position = readDigits(lexer, position, code);\n    code = body.charCodeAt(position);\n  } // Numbers cannot be followed by . or NameStart\n\n  if (code === 0x002e || isNameStart(code)) {\n    throw syntaxError(\n      lexer.source,\n      position,\n      `Invalid number, expected digit but got: ${printCodePointAt(\n        lexer,\n        position,\n      )}.`,\n    );\n  }\n\n  return createToken(\n    lexer,\n    isFloat ? TokenKind.FLOAT : TokenKind.INT,\n    start,\n    position,\n    body.slice(start, position),\n  );\n}\n/**\n * Returns the new position in the source after reading one or more digits.\n */\n\nfunction readDigits(lexer, start, firstCode) {\n  if (!isDigit(firstCode)) {\n    throw syntaxError(\n      lexer.source,\n      start,\n      `Invalid number, expected digit but got: ${printCodePointAt(\n        lexer,\n        start,\n      )}.`,\n    );\n  }\n\n  const body = lexer.source.body;\n  let position = start + 1; // +1 to skip first firstCode\n\n  while (isDigit(body.charCodeAt(position))) {\n    ++position;\n  }\n\n  return position;\n}\n/**\n * Reads a single-quote string token from the source file.\n *\n * ```\n * StringValue ::\n *   - `\"\"` [lookahead != `\"`]\n *   - `\"` StringCharacter+ `\"`\n *\n * StringCharacter ::\n *   - SourceCharacter but not `\"` or `\\` or LineTerminator\n *   - `\\u` EscapedUnicode\n *   - `\\` EscapedCharacter\n *\n * EscapedUnicode ::\n *   - `{` HexDigit+ `}`\n *   - HexDigit HexDigit HexDigit HexDigit\n *\n * EscapedCharacter :: one of `\"` `\\` `/` `b` `f` `n` `r` `t`\n * ```\n */\n\nfunction readString(lexer, start) {\n  const body = lexer.source.body;\n  const bodyLength = body.length;\n  let position = start + 1;\n  let chunkStart = position;\n  let value = '';\n\n  while (position < bodyLength) {\n    const code = body.charCodeAt(position); // Closing Quote (\")\n\n    if (code === 0x0022) {\n      value += body.slice(chunkStart, position);\n      return createToken(lexer, TokenKind.STRING, start, position + 1, value);\n    } // Escape Sequence (\\)\n\n    if (code === 0x005c) {\n      value += body.slice(chunkStart, position);\n      const escape =\n        body.charCodeAt(position + 1) === 0x0075 // u\n          ? body.charCodeAt(position + 2) === 0x007b // {\n            ? readEscapedUnicodeVariableWidth(lexer, position)\n            : readEscapedUnicodeFixedWidth(lexer, position)\n          : readEscapedCharacter(lexer, position);\n      value += escape.value;\n      position += escape.size;\n      chunkStart = position;\n      continue;\n    } // LineTerminator (\\n | \\r)\n\n    if (code === 0x000a || code === 0x000d) {\n      break;\n    } // SourceCharacter\n\n    if (isUnicodeScalarValue(code)) {\n      ++position;\n    } else if (isSupplementaryCodePoint(body, position)) {\n      position += 2;\n    } else {\n      throw syntaxError(\n        lexer.source,\n        position,\n        `Invalid character within String: ${printCodePointAt(\n          lexer,\n          position,\n        )}.`,\n      );\n    }\n  }\n\n  throw syntaxError(lexer.source, position, 'Unterminated string.');\n} // The string value and lexed size of an escape sequence.\n\nfunction readEscapedUnicodeVariableWidth(lexer, position) {\n  const body = lexer.source.body;\n  let point = 0;\n  let size = 3; // Cannot be larger than 12 chars (\\u{00000000}).\n\n  while (size < 12) {\n    const code = body.charCodeAt(position + size++); // Closing Brace (})\n\n    if (code === 0x007d) {\n      // Must be at least 5 chars (\\u{0}) and encode a Unicode scalar value.\n      if (size < 5 || !isUnicodeScalarValue(point)) {\n        break;\n      }\n\n      return {\n        value: String.fromCodePoint(point),\n        size,\n      };\n    } // Append this hex digit to the code point.\n\n    point = (point << 4) | readHexDigit(code);\n\n    if (point < 0) {\n      break;\n    }\n  }\n\n  throw syntaxError(\n    lexer.source,\n    position,\n    `Invalid Unicode escape sequence: \"${body.slice(\n      position,\n      position + size,\n    )}\".`,\n  );\n}\n\nfunction readEscapedUnicodeFixedWidth(lexer, position) {\n  const body = lexer.source.body;\n  const code = read16BitHexCode(body, position + 2);\n\n  if (isUnicodeScalarValue(code)) {\n    return {\n      value: String.fromCodePoint(code),\n      size: 6,\n    };\n  } // GraphQL allows JSON-style surrogate pair escape sequences, but only when\n  // a valid pair is formed.\n\n  if (isLeadingSurrogate(code)) {\n    // \\u\n    if (\n      body.charCodeAt(position + 6) === 0x005c &&\n      body.charCodeAt(position + 7) === 0x0075\n    ) {\n      const trailingCode = read16BitHexCode(body, position + 8);\n\n      if (isTrailingSurrogate(trailingCode)) {\n        // JavaScript defines strings as a sequence of UTF-16 code units and\n        // encodes Unicode code points above U+FFFF using a surrogate pair of\n        // code units. Since this is a surrogate pair escape sequence, just\n        // include both codes into the JavaScript string value. Had JavaScript\n        // not been internally based on UTF-16, then this surrogate pair would\n        // be decoded to retrieve the supplementary code point.\n        return {\n          value: String.fromCodePoint(code, trailingCode),\n          size: 12,\n        };\n      }\n    }\n  }\n\n  throw syntaxError(\n    lexer.source,\n    position,\n    `Invalid Unicode escape sequence: \"${body.slice(position, position + 6)}\".`,\n  );\n}\n/**\n * Reads four hexadecimal characters and returns the positive integer that 16bit\n * hexadecimal string represents. For example, \"000f\" will return 15, and \"dead\"\n * will return 57005.\n *\n * Returns a negative number if any char was not a valid hexadecimal digit.\n */\n\nfunction read16BitHexCode(body, position) {\n  // readHexDigit() returns -1 on error. ORing a negative value with any other\n  // value always produces a negative value.\n  return (\n    (readHexDigit(body.charCodeAt(position)) << 12) |\n    (readHexDigit(body.charCodeAt(position + 1)) << 8) |\n    (readHexDigit(body.charCodeAt(position + 2)) << 4) |\n    readHexDigit(body.charCodeAt(position + 3))\n  );\n}\n/**\n * Reads a hexadecimal character and returns its positive integer value (0-15).\n *\n * '0' becomes 0, '9' becomes 9\n * 'A' becomes 10, 'F' becomes 15\n * 'a' becomes 10, 'f' becomes 15\n *\n * Returns -1 if the provided character code was not a valid hexadecimal digit.\n *\n * HexDigit :: one of\n *   - `0` `1` `2` `3` `4` `5` `6` `7` `8` `9`\n *   - `A` `B` `C` `D` `E` `F`\n *   - `a` `b` `c` `d` `e` `f`\n */\n\nfunction readHexDigit(code) {\n  return code >= 0x0030 && code <= 0x0039 // 0-9\n    ? code - 0x0030\n    : code >= 0x0041 && code <= 0x0046 // A-F\n    ? code - 0x0037\n    : code >= 0x0061 && code <= 0x0066 // a-f\n    ? code - 0x0057\n    : -1;\n}\n/**\n * | Escaped Character | Code Point | Character Name               |\n * | ----------------- | ---------- | ---------------------------- |\n * | `\"`               | U+0022     | double quote                 |\n * | `\\`               | U+005C     | reverse solidus (back slash) |\n * | `/`               | U+002F     | solidus (forward slash)      |\n * | `b`               | U+0008     | backspace                    |\n * | `f`               | U+000C     | form feed                    |\n * | `n`               | U+000A     | line feed (new line)         |\n * | `r`               | U+000D     | carriage return              |\n * | `t`               | U+0009     | horizontal tab               |\n */\n\nfunction readEscapedCharacter(lexer, position) {\n  const body = lexer.source.body;\n  const code = body.charCodeAt(position + 1);\n\n  switch (code) {\n    case 0x0022:\n      // \"\n      return {\n        value: '\\u0022',\n        size: 2,\n      };\n\n    case 0x005c:\n      // \\\n      return {\n        value: '\\u005c',\n        size: 2,\n      };\n\n    case 0x002f:\n      // /\n      return {\n        value: '\\u002f',\n        size: 2,\n      };\n\n    case 0x0062:\n      // b\n      return {\n        value: '\\u0008',\n        size: 2,\n      };\n\n    case 0x0066:\n      // f\n      return {\n        value: '\\u000c',\n        size: 2,\n      };\n\n    case 0x006e:\n      // n\n      return {\n        value: '\\u000a',\n        size: 2,\n      };\n\n    case 0x0072:\n      // r\n      return {\n        value: '\\u000d',\n        size: 2,\n      };\n\n    case 0x0074:\n      // t\n      return {\n        value: '\\u0009',\n        size: 2,\n      };\n  }\n\n  throw syntaxError(\n    lexer.source,\n    position,\n    `Invalid character escape sequence: \"${body.slice(\n      position,\n      position + 2,\n    )}\".`,\n  );\n}\n/**\n * Reads a block string token from the source file.\n *\n * ```\n * StringValue ::\n *   - `\"\"\"` BlockStringCharacter* `\"\"\"`\n *\n * BlockStringCharacter ::\n *   - SourceCharacter but not `\"\"\"` or `\\\"\"\"`\n *   - `\\\"\"\"`\n * ```\n */\n\nfunction readBlockString(lexer, start) {\n  const body = lexer.source.body;\n  const bodyLength = body.length;\n  let lineStart = lexer.lineStart;\n  let position = start + 3;\n  let chunkStart = position;\n  let currentLine = '';\n  const blockLines = [];\n\n  while (position < bodyLength) {\n    const code = body.charCodeAt(position); // Closing Triple-Quote (\"\"\")\n\n    if (\n      code === 0x0022 &&\n      body.charCodeAt(position + 1) === 0x0022 &&\n      body.charCodeAt(position + 2) === 0x0022\n    ) {\n      currentLine += body.slice(chunkStart, position);\n      blockLines.push(currentLine);\n      const token = createToken(\n        lexer,\n        TokenKind.BLOCK_STRING,\n        start,\n        position + 3, // Return a string of the lines joined with U+000A.\n        dedentBlockStringLines(blockLines).join('\\n'),\n      );\n      lexer.line += blockLines.length - 1;\n      lexer.lineStart = lineStart;\n      return token;\n    } // Escaped Triple-Quote (\\\"\"\")\n\n    if (\n      code === 0x005c &&\n      body.charCodeAt(position + 1) === 0x0022 &&\n      body.charCodeAt(position + 2) === 0x0022 &&\n      body.charCodeAt(position + 3) === 0x0022\n    ) {\n      currentLine += body.slice(chunkStart, position);\n      chunkStart = position + 1; // skip only slash\n\n      position += 4;\n      continue;\n    } // LineTerminator\n\n    if (code === 0x000a || code === 0x000d) {\n      currentLine += body.slice(chunkStart, position);\n      blockLines.push(currentLine);\n\n      if (code === 0x000d && body.charCodeAt(position + 1) === 0x000a) {\n        position += 2;\n      } else {\n        ++position;\n      }\n\n      currentLine = '';\n      chunkStart = position;\n      lineStart = position;\n      continue;\n    } // SourceCharacter\n\n    if (isUnicodeScalarValue(code)) {\n      ++position;\n    } else if (isSupplementaryCodePoint(body, position)) {\n      position += 2;\n    } else {\n      throw syntaxError(\n        lexer.source,\n        position,\n        `Invalid character within String: ${printCodePointAt(\n          lexer,\n          position,\n        )}.`,\n      );\n    }\n  }\n\n  throw syntaxError(lexer.source, position, 'Unterminated string.');\n}\n/**\n * Reads an alphanumeric + underscore name from the source.\n *\n * ```\n * Name ::\n *   - NameStart NameContinue* [lookahead != NameContinue]\n * ```\n */\n\nfunction readName(lexer, start) {\n  const body = lexer.source.body;\n  const bodyLength = body.length;\n  let position = start + 1;\n\n  while (position < bodyLength) {\n    const code = body.charCodeAt(position);\n\n    if (isNameContinue(code)) {\n      ++position;\n    } else {\n      break;\n    }\n  }\n\n  return createToken(\n    lexer,\n    TokenKind.NAME,\n    start,\n    position,\n    body.slice(start, position),\n  );\n}\n/utilities/sortValueNode.d.tsimport type { ValueNode } from '../language/ast';\n/**\n * Sort ValueNode.\n *\n * This function returns a sorted copy of the given ValueNode.\n *\n * @internal\n */\nexport declare function sortValueNode(valueNode: ValueNode): ValueNode;\n/jsutils/promiseReduce.js\u0002'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.promiseReduce = promiseReduce;\n\nvar _isPromise = require('./isPromise.js');\n\n/**\n * Similar to Array.prototype.reduce(), however the reducing callback may return\n * a Promise, in which case reduction will continue after each promise resolves.\n *\n * If the callback does not return a Promise, then this function will also not\n * return a Promise.\n */\nfunction promiseReduce(values, callbackFn, initialValue) {\n  let accumulator = initialValue;\n\n  for (const value of values) {\n    accumulator = (0, _isPromise.isPromise)(accumulator)\n      ? accumulator.then((resolved) => callbackFn(resolved, value))\n      : callbackFn(accumulator, value);\n  }\n\n  return accumulator;\n}\n-/validation/rules/UniqueVariableNamesRule.mjs\u0004import { groupBy } from '../../jsutils/groupBy.mjs';\nimport { GraphQLError } from '../../error/GraphQLError.mjs';\n\n/**\n * Unique variable names\n *\n * A GraphQL operation is only valid if all its variables are uniquely named.\n */\nexport function UniqueVariableNamesRule(context) {\n  return {\n    OperationDefinition(operationNode) {\n      var _operationNode$variab;\n\n      // See: https://github.com/graphql/graphql-js/issues/2203\n\n      /* c8 ignore next */\n      const variableDefinitions =\n        (_operationNode$variab = operationNode.variableDefinitions) !== null &&\n        _operationNode$variab !== void 0\n          ? _operationNode$variab\n          : [];\n      const seenVariableDefinitions = groupBy(\n        variableDefinitions,\n        (node) => node.variable.name.value,\n      );\n\n      for (const [variableName, variableNodes] of seenVariableDefinitions) {\n        if (variableNodes.length > 1) {\n          context.reportError(\n            new GraphQLError(\n              `There can be only one variable named \"$${variableName}\".`,\n              {\n                nodes: variableNodes.map((node) => node.variable.name),\n              },\n            ),\n          );\n        }\n      }\n    },\n  };\n}\n/validation/validate.d.ts\bfimport type { Maybe } from '../jsutils/Maybe';\nimport { GraphQLError } from '../error/GraphQLError';\nimport type { DocumentNode } from '../language/ast';\nimport type { GraphQLSchema } from '../type/schema';\nimport { TypeInfo } from '../utilities/TypeInfo';\nimport type { SDLValidationRule, ValidationRule } from './ValidationContext';\n/**\n * Implements the \"Validation\" section of the spec.\n *\n * Validation runs synchronously, returning an array of encountered errors, or\n * an empty array if no errors were encountered and the document is valid.\n *\n * A list of specific validation rules may be provided. If not provided, the\n * default list of rules defined by the GraphQL specification will be used.\n *\n * Each validation rules is a function which returns a visitor\n * (see the language/visitor API). Visitor methods are expected to return\n * GraphQLErrors, or Arrays of GraphQLErrors when invalid.\n *\n * Validate will stop validation after a `maxErrors` limit has been reached.\n * Attackers can send pathologically invalid queries to induce a DoS attack,\n * so by default `maxErrors` set to 100 errors.\n *\n * Optionally a custom TypeInfo instance may be provided. If not provided, one\n * will be created from the provided schema.\n */\nexport declare function validate(\n  schema: GraphQLSchema,\n  documentAST: DocumentNode,\n  rules?: ReadonlyArray<ValidationRule>,\n  options?: {\n    maxErrors?: number;\n  },\n  /** @deprecated will be removed in 17.0.0 */\n  typeInfo?: TypeInfo,\n): ReadonlyArray<GraphQLError>;\n/**\n * @internal\n */\nexport declare function validateSDL(\n  documentAST: DocumentNode,\n  schemaToExtend?: Maybe<GraphQLSchema>,\n  rules?: ReadonlyArray<SDLValidationRule>,\n): ReadonlyArray<GraphQLError>;\n/**\n * Utility function which asserts a SDL document is valid by throwing an error\n * if it is invalid.\n *\n * @internal\n */\nexport declare function assertValidSDL(documentAST: DocumentNode): void;\n/**\n * Utility function which asserts a SDL document is valid by throwing an error\n * if it is invalid.\n *\n * @internal\n */\nexport declare function assertValidSDLExtension(\n  documentAST: DocumentNode,\n  schema: GraphQLSchema,\n): void;\n /utilities/coerceInputValue.d.ts\u0001import { GraphQLError } from '../error/GraphQLError';\nimport type { GraphQLInputType } from '../type/definition';\ndeclare type OnErrorCB = (\n  path: ReadonlyArray<string | number>,\n  invalidValue: unknown,\n  error: GraphQLError,\n) => void;\n/**\n * Coerces a JavaScript value given a GraphQL Input Type.\n */\nexport declare function coerceInputValue(\n  inputValue: unknown,\n  type: GraphQLInputType,\n  onError?: OnErrorCB,\n): unknown;\nexport {};\n./validation/rules/NoUndefinedVariablesRule.mjs\u0004import { GraphQLError } from '../../error/GraphQLError.mjs';\n\n/**\n * No undefined variables\n *\n * A GraphQL operation is only valid if all variables encountered, both directly\n * and via fragment spreads, are defined by that operation.\n *\n * See https://spec.graphql.org/draft/#sec-All-Variable-Uses-Defined\n */\nexport function NoUndefinedVariablesRule(context) {\n  let variableNameDefined = Object.create(null);\n  return {\n    OperationDefinition: {\n      enter() {\n        variableNameDefined = Object.create(null);\n      },\n\n      leave(operation) {\n        const usages = context.getRecursiveVariableUsages(operation);\n\n        for (const { node } of usages) {\n          const varName = node.name.value;\n\n          if (variableNameDefined[varName] !== true) {\n            context.reportError(\n              new GraphQLError(\n                operation.name\n                  ? `Variable \"$${varName}\" is not defined by operation \"${operation.name.value}\".`\n                  : `Variable \"$${varName}\" is not defined.`,\n                {\n                  nodes: [node, operation],\n                },\n              ),\n            );\n          }\n        }\n      },\n    },\n\n    VariableDefinition(node) {\n      variableNameDefined[node.variable.name.value] = true;\n    },\n  };\n}\n/utilities/typeComparators.mjs\fimport {\n  isAbstractType,\n  isInterfaceType,\n  isListType,\n  isNonNullType,\n  isObjectType,\n} from '../type/definition.mjs';\n\n/**\n * Provided two types, return true if the types are equal (invariant).\n */\nexport function isEqualType(typeA, typeB) {\n  // Equivalent types are equal.\n  if (typeA === typeB) {\n    return true;\n  } // If either type is non-null, the other must also be non-null.\n\n  if (isNonNullType(typeA) && isNonNullType(typeB)) {\n    return isEqualType(typeA.ofType, typeB.ofType);\n  } // If either type is a list, the other must also be a list.\n\n  if (isListType(typeA) && isListType(typeB)) {\n    return isEqualType(typeA.ofType, typeB.ofType);\n  } // Otherwise the types are not equal.\n\n  return false;\n}\n/**\n * Provided a type and a super type, return true if the first type is either\n * equal or a subset of the second super type (covariant).\n */\n\nexport function isTypeSubTypeOf(schema, maybeSubType, superType) {\n  // Equivalent type is a valid subtype\n  if (maybeSubType === superType) {\n    return true;\n  } // If superType is non-null, maybeSubType must also be non-null.\n\n  if (isNonNullType(superType)) {\n    if (isNonNullType(maybeSubType)) {\n      return isTypeSubTypeOf(schema, maybeSubType.ofType, superType.ofType);\n    }\n\n    return false;\n  }\n\n  if (isNonNullType(maybeSubType)) {\n    // If superType is nullable, maybeSubType may be non-null or nullable.\n    return isTypeSubTypeOf(schema, maybeSubType.ofType, superType);\n  } // If superType type is a list, maybeSubType type must also be a list.\n\n  if (isListType(superType)) {\n    if (isListType(maybeSubType)) {\n      return isTypeSubTypeOf(schema, maybeSubType.ofType, superType.ofType);\n    }\n\n    return false;\n  }\n\n  if (isListType(maybeSubType)) {\n    // If superType is not a list, maybeSubType must also be not a list.\n    return false;\n  } // If superType type is an abstract type, check if it is super type of maybeSubType.\n  // Otherwise, the child type is not a valid subtype of the parent type.\n\n  return (\n    isAbstractType(superType) &&\n    (isInterfaceType(maybeSubType) || isObjectType(maybeSubType)) &&\n    schema.isSubType(superType, maybeSubType)\n  );\n}\n/**\n * Provided two composite types, determine if they \"overlap\". Two composite\n * types overlap when the Sets of possible concrete types for each intersect.\n *\n * This is often used to determine if a fragment of a given type could possibly\n * be visited in a context of another type.\n *\n * This function is commutative.\n */\n\nexport function doTypesOverlap(schema, typeA, typeB) {\n  // Equivalent types overlap\n  if (typeA === typeB) {\n    return true;\n  }\n\n  if (isAbstractType(typeA)) {\n    if (isAbstractType(typeB)) {\n      // If both types are abstract, then determine if there is any intersection\n      // between possible concrete types of each.\n      return schema\n        .getPossibleTypes(typeA)\n        .some((type) => schema.isSubType(typeB, type));\n    } // Determine if the latter type is a possible concrete type of the former.\n\n    return schema.isSubType(typeA, typeB);\n  }\n\n  if (isAbstractType(typeB)) {\n    // Determine if the former type is a possible concrete type of the latter.\n    return schema.isSubType(typeB, typeA);\n  } // Otherwise the types do not overlap.\n\n  return false;\n}\n/utilities/getOperationAST.d.ts\u0001import type { Maybe } from '../jsutils/Maybe';\nimport type { DocumentNode, OperationDefinitionNode } from '../language/ast';\n/**\n * Returns an operation AST given a document AST and optionally an operation\n * name. If a name is not provided, an operation is only returned if only one is\n * provided in the document.\n */\nexport declare function getOperationAST(\n  documentAST: DocumentNode,\n  operationName?: Maybe<string>,\n): Maybe<OperationDefinitionNode>;\n /utilities/separateOperations.js\n'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.separateOperations = separateOperations;\n\nvar _kinds = require('../language/kinds.js');\n\nvar _visitor = require('../language/visitor.js');\n\n/**\n * separateOperations accepts a single AST document which may contain many\n * operations and fragments and returns a collection of AST documents each of\n * which contains a single operation as well the fragment definitions it\n * refers to.\n */\nfunction separateOperations(documentAST) {\n  const operations = [];\n  const depGraph = Object.create(null); // Populate metadata and build a dependency graph.\n\n  for (const definitionNode of documentAST.definitions) {\n    switch (definitionNode.kind) {\n      case _kinds.Kind.OPERATION_DEFINITION:\n        operations.push(definitionNode);\n        break;\n\n      case _kinds.Kind.FRAGMENT_DEFINITION:\n        depGraph[definitionNode.name.value] = collectDependencies(\n          definitionNode.selectionSet,\n        );\n        break;\n\n      default: // ignore non-executable definitions\n    }\n  } // For each operation, produce a new synthesized AST which includes only what\n  // is necessary for completing that operation.\n\n  const separatedDocumentASTs = Object.create(null);\n\n  for (const operation of operations) {\n    const dependencies = new Set();\n\n    for (const fragmentName of collectDependencies(operation.selectionSet)) {\n      collectTransitiveDependencies(dependencies, depGraph, fragmentName);\n    } // Provides the empty string for anonymous operations.\n\n    const operationName = operation.name ? operation.name.value : ''; // The list of definition nodes to be included for this operation, sorted\n    // to retain the same order as the original document.\n\n    separatedDocumentASTs[operationName] = {\n      kind: _kinds.Kind.DOCUMENT,\n      definitions: documentAST.definitions.filter(\n        (node) =>\n          node === operation ||\n          (node.kind === _kinds.Kind.FRAGMENT_DEFINITION &&\n            dependencies.has(node.name.value)),\n      ),\n    };\n  }\n\n  return separatedDocumentASTs;\n}\n\n// From a dependency graph, collects a list of transitive dependencies by\n// recursing through a dependency graph.\nfunction collectTransitiveDependencies(collected, depGraph, fromName) {\n  if (!collected.has(fromName)) {\n    collected.add(fromName);\n    const immediateDeps = depGraph[fromName];\n\n    if (immediateDeps !== undefined) {\n      for (const toName of immediateDeps) {\n        collectTransitiveDependencies(collected, depGraph, toName);\n      }\n    }\n  }\n}\n\nfunction collectDependencies(selectionSet) {\n  const dependencies = [];\n  (0, _visitor.visit)(selectionSet, {\n    FragmentSpread(node) {\n      dependencies.push(node.name.value);\n    },\n  });\n  return dependencies;\n}\n/language/directiveLocation.mjs\u00055/**\n * The set of allowed directive location values.\n */\nvar DirectiveLocation;\n\n(function (DirectiveLocation) {\n  DirectiveLocation['QUERY'] = 'QUERY';\n  DirectiveLocation['MUTATION'] = 'MUTATION';\n  DirectiveLocation['SUBSCRIPTION'] = 'SUBSCRIPTION';\n  DirectiveLocation['FIELD'] = 'FIELD';\n  DirectiveLocation['FRAGMENT_DEFINITION'] = 'FRAGMENT_DEFINITION';\n  DirectiveLocation['FRAGMENT_SPREAD'] = 'FRAGMENT_SPREAD';\n  DirectiveLocation['INLINE_FRAGMENT'] = 'INLINE_FRAGMENT';\n  DirectiveLocation['VARIABLE_DEFINITION'] = 'VARIABLE_DEFINITION';\n  DirectiveLocation['SCHEMA'] = 'SCHEMA';\n  DirectiveLocation['SCALAR'] = 'SCALAR';\n  DirectiveLocation['OBJECT'] = 'OBJECT';\n  DirectiveLocation['FIELD_DEFINITION'] = 'FIELD_DEFINITION';\n  DirectiveLocation['ARGUMENT_DEFINITION'] = 'ARGUMENT_DEFINITION';\n  DirectiveLocation['INTERFACE'] = 'INTERFACE';\n  DirectiveLocation['UNION'] = 'UNION';\n  DirectiveLocation['ENUM'] = 'ENUM';\n  DirectiveLocation['ENUM_VALUE'] = 'ENUM_VALUE';\n  DirectiveLocation['INPUT_OBJECT'] = 'INPUT_OBJECT';\n  DirectiveLocation['INPUT_FIELD_DEFINITION'] = 'INPUT_FIELD_DEFINITION';\n})(DirectiveLocation || (DirectiveLocation = {}));\n\nexport { DirectiveLocation };\n/**\n * The enum type representing the directive location values.\n *\n * @deprecated Please use `DirectiveLocation`. Will be remove in v17.\n */\n/language/kinds.mjs\b/**\n * The set of allowed kind values for AST nodes.\n */\nvar Kind;\n\n(function (Kind) {\n  Kind['NAME'] = 'Name';\n  Kind['DOCUMENT'] = 'Document';\n  Kind['OPERATION_DEFINITION'] = 'OperationDefinition';\n  Kind['VARIABLE_DEFINITION'] = 'VariableDefinition';\n  Kind['SELECTION_SET'] = 'SelectionSet';\n  Kind['FIELD'] = 'Field';\n  Kind['ARGUMENT'] = 'Argument';\n  Kind['FRAGMENT_SPREAD'] = 'FragmentSpread';\n  Kind['INLINE_FRAGMENT'] = 'InlineFragment';\n  Kind['FRAGMENT_DEFINITION'] = 'FragmentDefinition';\n  Kind['VARIABLE'] = 'Variable';\n  Kind['INT'] = 'IntValue';\n  Kind['FLOAT'] = 'FloatValue';\n  Kind['STRING'] = 'StringValue';\n  Kind['BOOLEAN'] = 'BooleanValue';\n  Kind['NULL'] = 'NullValue';\n  Kind['ENUM'] = 'EnumValue';\n  Kind['LIST'] = 'ListValue';\n  Kind['OBJECT'] = 'ObjectValue';\n  Kind['OBJECT_FIELD'] = 'ObjectField';\n  Kind['DIRECTIVE'] = 'Directive';\n  Kind['NAMED_TYPE'] = 'NamedType';\n  Kind['LIST_TYPE'] = 'ListType';\n  Kind['NON_NULL_TYPE'] = 'NonNullType';\n  Kind['SCHEMA_DEFINITION'] = 'SchemaDefinition';\n  Kind['OPERATION_TYPE_DEFINITION'] = 'OperationTypeDefinition';\n  Kind['SCALAR_TYPE_DEFINITION'] = 'ScalarTypeDefinition';\n  Kind['OBJECT_TYPE_DEFINITION'] = 'ObjectTypeDefinition';\n  Kind['FIELD_DEFINITION'] = 'FieldDefinition';\n  Kind['INPUT_VALUE_DEFINITION'] = 'InputValueDefinition';\n  Kind['INTERFACE_TYPE_DEFINITION'] = 'InterfaceTypeDefinition';\n  Kind['UNION_TYPE_DEFINITION'] = 'UnionTypeDefinition';\n  Kind['ENUM_TYPE_DEFINITION'] = 'EnumTypeDefinition';\n  Kind['ENUM_VALUE_DEFINITION'] = 'EnumValueDefinition';\n  Kind['INPUT_OBJECT_TYPE_DEFINITION'] = 'InputObjectTypeDefinition';\n  Kind['DIRECTIVE_DEFINITION'] = 'DirectiveDefinition';\n  Kind['SCHEMA_EXTENSION'] = 'SchemaExtension';\n  Kind['SCALAR_TYPE_EXTENSION'] = 'ScalarTypeExtension';\n  Kind['OBJECT_TYPE_EXTENSION'] = 'ObjectTypeExtension';\n  Kind['INTERFACE_TYPE_EXTENSION'] = 'InterfaceTypeExtension';\n  Kind['UNION_TYPE_EXTENSION'] = 'UnionTypeExtension';\n  Kind['ENUM_TYPE_EXTENSION'] = 'EnumTypeExtension';\n  Kind['INPUT_OBJECT_TYPE_EXTENSION'] = 'InputObjectTypeExtension';\n})(Kind || (Kind = {}));\n\nexport { Kind };\n/**\n * The enum type representing the possible kind values of AST nodes.\n *\n * @deprecated Please use `Kind`. Will be remove in v17.\n */\n/language/blockString.js\u00145'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.dedentBlockStringLines = dedentBlockStringLines;\nexports.isPrintableAsBlockString = isPrintableAsBlockString;\nexports.printBlockString = printBlockString;\n\nvar _characterClasses = require('./characterClasses.js');\n\n/**\n * Produces the value of a block string from its parsed raw value, similar to\n * CoffeeScript's block string, Python's docstring trim or Ruby's strip_heredoc.\n *\n * This implements the GraphQL spec's BlockStringValue() static algorithm.\n *\n * @internal\n */\nfunction dedentBlockStringLines(lines) {\n  var _firstNonEmptyLine2;\n\n  let commonIndent = Number.MAX_SAFE_INTEGER;\n  let firstNonEmptyLine = null;\n  let lastNonEmptyLine = -1;\n\n  for (let i = 0; i < lines.length; ++i) {\n    var _firstNonEmptyLine;\n\n    const line = lines[i];\n    const indent = leadingWhitespace(line);\n\n    if (indent === line.length) {\n      continue; // skip empty lines\n    }\n\n    firstNonEmptyLine =\n      (_firstNonEmptyLine = firstNonEmptyLine) !== null &&\n      _firstNonEmptyLine !== void 0\n        ? _firstNonEmptyLine\n        : i;\n    lastNonEmptyLine = i;\n\n    if (i !== 0 && indent < commonIndent) {\n      commonIndent = indent;\n    }\n  }\n\n  return lines // Remove common indentation from all lines but first.\n    .map((line, i) => (i === 0 ? line : line.slice(commonIndent))) // Remove leading and trailing blank lines.\n    .slice(\n      (_firstNonEmptyLine2 = firstNonEmptyLine) !== null &&\n        _firstNonEmptyLine2 !== void 0\n        ? _firstNonEmptyLine2\n        : 0,\n      lastNonEmptyLine + 1,\n    );\n}\n\nfunction leadingWhitespace(str) {\n  let i = 0;\n\n  while (\n    i < str.length &&\n    (0, _characterClasses.isWhiteSpace)(str.charCodeAt(i))\n  ) {\n    ++i;\n  }\n\n  return i;\n}\n/**\n * @internal\n */\n\nfunction isPrintableAsBlockString(value) {\n  if (value === '') {\n    return true; // empty string is printable\n  }\n\n  let isEmptyLine = true;\n  let hasIndent = false;\n  let hasCommonIndent = true;\n  let seenNonEmptyLine = false;\n\n  for (let i = 0; i < value.length; ++i) {\n    switch (value.codePointAt(i)) {\n      case 0x0000:\n      case 0x0001:\n      case 0x0002:\n      case 0x0003:\n      case 0x0004:\n      case 0x0005:\n      case 0x0006:\n      case 0x0007:\n      case 0x0008:\n      case 0x000b:\n      case 0x000c:\n      case 0x000e:\n      case 0x000f:\n        return false;\n      // Has non-printable characters\n\n      case 0x000d:\n        //  \\r\n        return false;\n      // Has \\r or \\r\\n which will be replaced as \\n\n\n      case 10:\n        //  \\n\n        if (isEmptyLine && !seenNonEmptyLine) {\n          return false; // Has leading new line\n        }\n\n        seenNonEmptyLine = true;\n        isEmptyLine = true;\n        hasIndent = false;\n        break;\n\n      case 9: //   \\t\n\n      case 32:\n        //  <space>\n        hasIndent || (hasIndent = isEmptyLine);\n        break;\n\n      default:\n        hasCommonIndent && (hasCommonIndent = hasIndent);\n        isEmptyLine = false;\n    }\n  }\n\n  if (isEmptyLine) {\n    return false; // Has trailing empty lines\n  }\n\n  if (hasCommonIndent && seenNonEmptyLine) {\n    return false; // Has internal indent\n  }\n\n  return true;\n}\n/**\n * Print a block string in the indented block form by adding a leading and\n * trailing blank line. However, if a block string starts with whitespace and is\n * a single-line, adding a leading blank line would strip that whitespace.\n *\n * @internal\n */\n\nfunction printBlockString(value, options) {\n  const escapedValue = value.replace(/\"\"\"/g, '\\\\\"\"\"'); // Expand a block string's raw value into independent lines.\n\n  const lines = escapedValue.split(/\\r\\n|[\\n\\r]/g);\n  const isSingleLine = lines.length === 1; // If common indentation is found we can fix some of those cases by adding leading new line\n\n  const forceLeadingNewLine =\n    lines.length > 1 &&\n    lines\n      .slice(1)\n      .every(\n        (line) =>\n          line.length === 0 ||\n          (0, _characterClasses.isWhiteSpace)(line.charCodeAt(0)),\n      ); // Trailing triple quotes just looks confusing but doesn't force trailing new line\n\n  const hasTrailingTripleQuotes = escapedValue.endsWith('\\\\\"\"\"'); // Trailing quote (single or double) or slash forces trailing new line\n\n  const hasTrailingQuote = value.endsWith('\"') && !hasTrailingTripleQuotes;\n  const hasTrailingSlash = value.endsWith('\\\\');\n  const forceTrailingNewline = hasTrailingQuote || hasTrailingSlash;\n  const printAsMultipleLines =\n    !(options !== null && options !== void 0 && options.minimize) && // add leading and trailing new lines only if it improves readability\n    (!isSingleLine ||\n      value.length > 70 ||\n      forceTrailingNewline ||\n      forceLeadingNewLine ||\n      hasTrailingTripleQuotes);\n  let result = ''; // Format a multi-line block quote to account for leading space.\n\n  const skipLeadingNewLine =\n    isSingleLine && (0, _characterClasses.isWhiteSpace)(value.charCodeAt(0));\n\n  if ((printAsMultipleLines && !skipLeadingNewLine) || forceLeadingNewLine) {\n    result += '\\n';\n  }\n\n  result += escapedValue;\n\n  if (printAsMultipleLines || forceTrailingNewline) {\n    result += '\\n';\n  }\n\n  return '\"\"\"' + result + '\"\"\"';\n}\n./validation/rules/UniqueOperationNamesRule.mjs\u0004\rimport { GraphQLError } from '../../error/GraphQLError.mjs';\n\n/**\n * Unique operation names\n *\n * A GraphQL document is only valid if all defined operations have unique names.\n *\n * See https://spec.graphql.org/draft/#sec-Operation-Name-Uniqueness\n */\nexport function UniqueOperationNamesRule(context) {\n  const knownOperationNames = Object.create(null);\n  return {\n    OperationDefinition(node) {\n      const operationName = node.name;\n\n      if (operationName) {\n        if (knownOperationNames[operationName.value]) {\n          context.reportError(\n            new GraphQLError(\n              `There can be only one operation named \"${operationName.value}\".`,\n              {\n                nodes: [\n                  knownOperationNames[operationName.value],\n                  operationName,\n                ],\n              },\n            ),\n          );\n        } else {\n          knownOperationNames[operationName.value] = operationName;\n        }\n      }\n\n      return false;\n    },\n\n    FragmentDefinition: () => false,\n  };\n}\n/error/syntaxError.d.ts\u0001rimport type { Source } from '../language/source';\nimport { GraphQLError } from './GraphQLError';\n/**\n * Produces a GraphQLError representing a syntax error, containing useful\n * descriptive information about the syntax error's position in the source.\n */\nexport declare function syntaxError(\n  source: Source,\n  position: number,\n  description: string,\n): GraphQLError;\n,/validation/rules/KnownArgumentNamesRule.mjs\f\u0005import { didYouMean } from '../../jsutils/didYouMean.mjs';\nimport { suggestionList } from '../../jsutils/suggestionList.mjs';\nimport { GraphQLError } from '../../error/GraphQLError.mjs';\nimport { Kind } from '../../language/kinds.mjs';\nimport { specifiedDirectives } from '../../type/directives.mjs';\n\n/**\n * Known argument names\n *\n * A GraphQL field is only valid if all supplied arguments are defined by\n * that field.\n *\n * See https://spec.graphql.org/draft/#sec-Argument-Names\n * See https://spec.graphql.org/draft/#sec-Directives-Are-In-Valid-Locations\n */\nexport function KnownArgumentNamesRule(context) {\n  return {\n    // eslint-disable-next-line new-cap\n    ...KnownArgumentNamesOnDirectivesRule(context),\n\n    Argument(argNode) {\n      const argDef = context.getArgument();\n      const fieldDef = context.getFieldDef();\n      const parentType = context.getParentType();\n\n      if (!argDef && fieldDef && parentType) {\n        const argName = argNode.name.value;\n        const knownArgsNames = fieldDef.args.map((arg) => arg.name);\n        const suggestions = suggestionList(argName, knownArgsNames);\n        context.reportError(\n          new GraphQLError(\n            `Unknown argument \"${argName}\" on field \"${parentType.name}.${fieldDef.name}\".` +\n              didYouMean(suggestions),\n            {\n              nodes: argNode,\n            },\n          ),\n        );\n      }\n    },\n  };\n}\n/**\n * @internal\n */\n\nexport function KnownArgumentNamesOnDirectivesRule(context) {\n  const directiveArgs = Object.create(null);\n  const schema = context.getSchema();\n  const definedDirectives = schema\n    ? schema.getDirectives()\n    : specifiedDirectives;\n\n  for (const directive of definedDirectives) {\n    directiveArgs[directive.name] = directive.args.map((arg) => arg.name);\n  }\n\n  const astDefinitions = context.getDocument().definitions;\n\n  for (const def of astDefinitions) {\n    if (def.kind === Kind.DIRECTIVE_DEFINITION) {\n      var _def$arguments;\n\n      // FIXME: https://github.com/graphql/graphql-js/issues/2203\n\n      /* c8 ignore next */\n      const argsNodes =\n        (_def$arguments = def.arguments) !== null && _def$arguments !== void 0\n          ? _def$arguments\n          : [];\n      directiveArgs[def.name.value] = argsNodes.map((arg) => arg.name.value);\n    }\n  }\n\n  return {\n    Directive(directiveNode) {\n      const directiveName = directiveNode.name.value;\n      const knownArgs = directiveArgs[directiveName];\n\n      if (directiveNode.arguments && knownArgs) {\n        for (const argNode of directiveNode.arguments) {\n          const argName = argNode.name.value;\n\n          if (!knownArgs.includes(argName)) {\n            const suggestions = suggestionList(argName, knownArgs);\n            context.reportError(\n              new GraphQLError(\n                `Unknown argument \"${argName}\" on directive \"@${directiveName}\".` +\n                  didYouMean(suggestions),\n                {\n                  nodes: argNode,\n                },\n              ),\n            );\n          }\n        }\n      }\n\n      return false;\n    },\n  };\n}\n/utilities/concatAST.mjs\u0001import { Kind } from '../language/kinds.mjs';\n/**\n * Provided a collection of ASTs, presumably each from different files,\n * concatenate the ASTs together into batched AST, useful for validating many\n * GraphQL source files which together represent one conceptual application.\n */\n\nexport function concatAST(documents) {\n  const definitions = [];\n\n  for (const doc of documents) {\n    definitions.push(...doc.definitions);\n  }\n\n  return {\n    kind: Kind.DOCUMENT,\n    definitions,\n  };\n}\n4/validation/rules/ProvidedRequiredArgumentsRule.d.ts\u0002>import type { ASTVisitor } from '../../language/visitor';\nimport type {\n  SDLValidationContext,\n  ValidationContext,\n} from '../ValidationContext';\n/**\n * Provided required arguments\n *\n * A field or directive is only valid if all required (non-null without a\n * default value) field arguments have been provided.\n */\nexport declare function ProvidedRequiredArgumentsRule(\n  context: ValidationContext,\n): ASTVisitor;\n/**\n * @internal\n */\nexport declare function ProvidedRequiredArgumentsOnDirectivesRule(\n  context: ValidationContext | SDLValidationContext,\n): ASTVisitor;\n!/utilities/buildClientSchema.d.ts\u0003qimport type { GraphQLSchemaValidationOptions } from '../type/schema';\nimport { GraphQLSchema } from '../type/schema';\nimport type { IntrospectionQuery } from './getIntrospectionQuery';\n/**\n * Build a GraphQLSchema for use by client tools.\n *\n * Given the result of a client running the introspection query, creates and\n * returns a GraphQLSchema instance which can be then used with all graphql-js\n * tools, but cannot be used to execute a query, as introspection does not\n * represent the \"resolver\", \"parse\" or \"serialize\" functions or any other\n * server-internal mechanisms.\n *\n * This function expects a complete introspection result. Don't forget to check\n * the \"errors\" field of a server response before calling this function.\n */\nexport declare function buildClientSchema(\n  introspection: IntrospectionQuery,\n  options?: GraphQLSchemaValidationOptions,\n): GraphQLSchema;\n/utilities/coerceInputValue.mjs\u0012Timport { didYouMean } from '../jsutils/didYouMean.mjs';\nimport { inspect } from '../jsutils/inspect.mjs';\nimport { invariant } from '../jsutils/invariant.mjs';\nimport { isIterableObject } from '../jsutils/isIterableObject.mjs';\nimport { isObjectLike } from '../jsutils/isObjectLike.mjs';\nimport { addPath, pathToArray } from '../jsutils/Path.mjs';\nimport { printPathArray } from '../jsutils/printPathArray.mjs';\nimport { suggestionList } from '../jsutils/suggestionList.mjs';\nimport { GraphQLError } from '../error/GraphQLError.mjs';\nimport {\n  isInputObjectType,\n  isLeafType,\n  isListType,\n  isNonNullType,\n} from '../type/definition.mjs';\n\n/**\n * Coerces a JavaScript value given a GraphQL Input Type.\n */\nexport function coerceInputValue(inputValue, type, onError = defaultOnError) {\n  return coerceInputValueImpl(inputValue, type, onError, undefined);\n}\n\nfunction defaultOnError(path, invalidValue, error) {\n  let errorPrefix = 'Invalid value ' + inspect(invalidValue);\n\n  if (path.length > 0) {\n    errorPrefix += ` at \"value${printPathArray(path)}\"`;\n  }\n\n  error.message = errorPrefix + ': ' + error.message;\n  throw error;\n}\n\nfunction coerceInputValueImpl(inputValue, type, onError, path) {\n  if (isNonNullType(type)) {\n    if (inputValue != null) {\n      return coerceInputValueImpl(inputValue, type.ofType, onError, path);\n    }\n\n    onError(\n      pathToArray(path),\n      inputValue,\n      new GraphQLError(\n        `Expected non-nullable type \"${inspect(type)}\" not to be null.`,\n      ),\n    );\n    return;\n  }\n\n  if (inputValue == null) {\n    // Explicitly return the value null.\n    return null;\n  }\n\n  if (isListType(type)) {\n    const itemType = type.ofType;\n\n    if (isIterableObject(inputValue)) {\n      return Array.from(inputValue, (itemValue, index) => {\n        const itemPath = addPath(path, index, undefined);\n        return coerceInputValueImpl(itemValue, itemType, onError, itemPath);\n      });\n    } // Lists accept a non-list value as a list of one.\n\n    return [coerceInputValueImpl(inputValue, itemType, onError, path)];\n  }\n\n  if (isInputObjectType(type)) {\n    if (!isObjectLike(inputValue)) {\n      onError(\n        pathToArray(path),\n        inputValue,\n        new GraphQLError(`Expected type \"${type.name}\" to be an object.`),\n      );\n      return;\n    }\n\n    const coercedValue = {};\n    const fieldDefs = type.getFields();\n\n    for (const field of Object.values(fieldDefs)) {\n      const fieldValue = inputValue[field.name];\n\n      if (fieldValue === undefined) {\n        if (field.defaultValue !== undefined) {\n          coercedValue[field.name] = field.defaultValue;\n        } else if (isNonNullType(field.type)) {\n          const typeStr = inspect(field.type);\n          onError(\n            pathToArray(path),\n            inputValue,\n            new GraphQLError(\n              `Field \"${field.name}\" of required type \"${typeStr}\" was not provided.`,\n            ),\n          );\n        }\n\n        continue;\n      }\n\n      coercedValue[field.name] = coerceInputValueImpl(\n        fieldValue,\n        field.type,\n        onError,\n        addPath(path, field.name, type.name),\n      );\n    } // Ensure every provided field is defined.\n\n    for (const fieldName of Object.keys(inputValue)) {\n      if (!fieldDefs[fieldName]) {\n        const suggestions = suggestionList(\n          fieldName,\n          Object.keys(type.getFields()),\n        );\n        onError(\n          pathToArray(path),\n          inputValue,\n          new GraphQLError(\n            `Field \"${fieldName}\" is not defined by type \"${type.name}\".` +\n              didYouMean(suggestions),\n          ),\n        );\n      }\n    }\n\n    return coercedValue;\n  }\n\n  if (isLeafType(type)) {\n    let parseResult; // Scalars and Enums determine if a input value is valid via parseValue(),\n    // which can throw to indicate failure. If it throws, maintain a reference\n    // to the original error.\n\n    try {\n      parseResult = type.parseValue(inputValue);\n    } catch (error) {\n      if (error instanceof GraphQLError) {\n        onError(pathToArray(path), inputValue, error);\n      } else {\n        onError(\n          pathToArray(path),\n          inputValue,\n          new GraphQLError(`Expected type \"${type.name}\". ` + error.message, {\n            originalError: error,\n          }),\n        );\n      }\n\n      return;\n    }\n\n    if (parseResult === undefined) {\n      onError(\n        pathToArray(path),\n        inputValue,\n        new GraphQLError(`Expected type \"${type.name}\".`),\n      );\n    }\n\n    return parseResult;\n  }\n  /* c8 ignore next 3 */\n  // Not reachable, all possible types have been considered.\n\n  false || invariant(false, 'Unexpected input type: ' + inspect(type));\n}\n$/validation/rules/ScalarLeafsRule.js\u0006;'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true,\n});\nexports.ScalarLeafsRule = ScalarLeafsRule;\n\nvar _inspect = require('../../jsutils/inspect.js');\n\nvar _GraphQLError = require('../../error/GraphQLError.js');\n\nvar _definition = require('../../type/definition.js');\n\n/**\n * Scalar leafs\n *\n * A GraphQL document is valid only if all leaf fields (fields without\n * sub selections) are of scalar or enum types.\n */\nfunction ScalarLeafsRule(context) {\n  return {\n    Field(node) {\n      const type = context.getType();\n      const selectionSet = node.selectionSet;\n\n      if (type) {\n        if ((0, _definition.isLeafType)((0, _definition.getNamedType)(type))) {\n          if (selectionSet) {\n            const fieldName = node.name.value;\n            const typeStr = (0, _inspect.inspect)(type);\n            context.reportError(\n              new _GraphQLError.GraphQLError(\n                `Field \"${fieldName}\" must not have a selection since type \"${typeStr}\" has no subfields.`,\n                {\n                  nodes: selectionSet,\n                },\n              ),\n            );\n          }\n        } else if (!selectionSet) {\n          const fieldName = node.name.value;\n          const typeStr = (0, _inspect.inspect)(type);\n          context.reportError(\n            new _GraphQLError.GraphQLError(\n              `Field \"${fieldName}\" of type \"${typeStr}\" must have a selection of subfields. Did you mean \"${fieldName} { ... }\"?`,\n              {\n                nodes: node,\n              },\n            ),\n          );\n        }\n      }\n    },\n  };\n}\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/Z3JheS1tYXR0ZXJANC4wLjM=",
    "content": "/index.js\u0017'use strict';\n\nconst fs = require('fs');\nconst sections = require('section-matter');\nconst defaults = require('./lib/defaults');\nconst stringify = require('./lib/stringify');\nconst excerpt = require('./lib/excerpt');\nconst engines = require('./lib/engines');\nconst toFile = require('./lib/to-file');\nconst parse = require('./lib/parse');\nconst utils = require('./lib/utils');\n\n/**\n * Takes a string or object with `content` property, extracts\n * and parses front-matter from the string, then returns an object\n * with `data`, `content` and other [useful properties](#returned-object).\n *\n * ```js\n * const matter = require('gray-matter');\n * console.log(matter('---\\ntitle: Home\\n---\\nOther stuff'));\n * //=> { data: { title: 'Home'}, content: 'Other stuff' }\n * ```\n * @param {Object|String} `input` String, or object with `content` string\n * @param {Object} `options`\n * @return {Object}\n * @api public\n */\n\nfunction matter(input, options) {\n  if (input === '') {\n    return { data: {}, content: input, excerpt: '', orig: input };\n  }\n\n  let file = toFile(input);\n  const cached = matter.cache[file.content];\n\n  if (!options) {\n    if (cached) {\n      file = Object.assign({}, cached);\n      file.orig = cached.orig;\n      return file;\n    }\n\n    // only cache if there are no options passed. if we cache when options\n    // are passed, we would need to also cache options values, which would\n    // negate any performance benefits of caching\n    matter.cache[file.content] = file;\n  }\n\n  return parseMatter(file, options);\n}\n\n/**\n * Parse front matter\n */\n\nfunction parseMatter(file, options) {\n  const opts = defaults(options);\n  const open = opts.delimiters[0];\n  const close = '\\n' + opts.delimiters[1];\n  let str = file.content;\n\n  if (opts.language) {\n    file.language = opts.language;\n  }\n\n  // get the length of the opening delimiter\n  const openLen = open.length;\n  if (!utils.startsWith(str, open, openLen)) {\n    excerpt(file, opts);\n    return file;\n  }\n\n  // if the next character after the opening delimiter is\n  // a character from the delimiter, then it's not a front-\n  // matter delimiter\n  if (str.charAt(openLen) === open.slice(-1)) {\n    return file;\n  }\n\n  // strip the opening delimiter\n  str = str.slice(openLen);\n  const len = str.length;\n\n  // use the language defined after first delimiter, if it exists\n  const language = matter.language(str, opts);\n  if (language.name) {\n    file.language = language.name;\n    str = str.slice(language.raw.length);\n  }\n\n  // get the index of the closing delimiter\n  let closeIndex = str.indexOf(close);\n  if (closeIndex === -1) {\n    closeIndex = len;\n  }\n\n  // get the raw front-matter block\n  file.matter = str.slice(0, closeIndex);\n\n  const block = file.matter.replace(/^\\s*#[^\\n]+/gm, '').trim();\n  if (block === '') {\n    file.isEmpty = true;\n    file.empty = file.content;\n    file.data = {};\n  } else {\n\n    // create file.data by parsing the raw file.matter block\n    file.data = parse(file.language, file.matter, opts);\n  }\n\n  // update file.content\n  if (closeIndex === len) {\n    file.content = '';\n  } else {\n    file.content = str.slice(closeIndex + close.length);\n    if (file.content[0] === '\\r') {\n      file.content = file.content.slice(1);\n    }\n    if (file.content[0] === '\\n') {\n      file.content = file.content.slice(1);\n    }\n  }\n\n  excerpt(file, opts);\n\n  if (opts.sections === true || typeof opts.section === 'function') {\n    sections(file, opts.section);\n  }\n  return file;\n}\n\n/**\n * Expose engines\n */\n\nmatter.engines = engines;\n\n/**\n * Stringify an object to YAML or the specified language, and\n * append it to the given string. By default, only YAML and JSON\n * can be stringified. See the [engines](#engines) section to learn\n * how to stringify other languages.\n *\n * ```js\n * console.log(matter.stringify('foo bar baz', {title: 'Home'}));\n * // results in:\n * // ---\n * // title: Home\n * // ---\n * // foo bar baz\n * ```\n * @param {String|Object} `file` The content string to append to stringified front-matter, or a file object with `file.content` string.\n * @param {Object} `data` Front matter to stringify.\n * @param {Object} `options` [Options](#options) to pass to gray-matter and [js-yaml].\n * @return {String} Returns a string created by wrapping stringified yaml with delimiters, and appending that to the given string.\n * @api public\n */\n\nmatter.stringify = function(file, data, options) {\n  if (typeof file === 'string') file = matter(file, options);\n  return stringify(file, data, options);\n};\n\n/**\n * Synchronously read a file from the file system and parse\n * front matter. Returns the same object as the [main function](#matter).\n *\n * ```js\n * const file = matter.read('./content/blog-post.md');\n * ```\n * @param {String} `filepath` file path of the file to read.\n * @param {Object} `options` [Options](#options) to pass to gray-matter.\n * @return {Object} Returns [an object](#returned-object) with `data` and `content`\n * @api public\n */\n\nmatter.read = function(filepath, options) {\n  const str = fs.readFileSync(filepath, 'utf8');\n  const file = matter(str, options);\n  file.path = filepath;\n  return file;\n};\n\n/**\n * Returns true if the given `string` has front matter.\n * @param  {String} `string`\n * @param  {Object} `options`\n * @return {Boolean} True if front matter exists.\n * @api public\n */\n\nmatter.test = function(str, options) {\n  return utils.startsWith(str, defaults(options).delimiters[0]);\n};\n\n/**\n * Detect the language to use, if one is defined after the\n * first front-matter delimiter.\n * @param  {String} `string`\n * @param  {Object} `options`\n * @return {Object} Object with `raw` (actual language string), and `name`, the language with whitespace trimmed\n */\n\nmatter.language = function(str, options) {\n  const opts = defaults(options);\n  const open = opts.delimiters[0];\n\n  if (matter.test(str)) {\n    str = str.slice(open.length);\n  }\n\n  const language = str.slice(0, str.search(/\\r?\\n/));\n  return {\n    raw: language,\n    name: language ? language.trim() : ''\n  };\n};\n\n/**\n * Expose `matter`\n */\n\nmatter.cache = {};\nmatter.clearCache = function() {\n  matter.cache = {};\n};\nmodule.exports = matter;\n/lib/engine.js\u0002'use strict';\n\nmodule.exports = function(name, options) {\n  let engine = options.engines[name] || options.engines[aliase(name)];\n  if (typeof engine === 'undefined') {\n    throw new Error('gray-matter engine \"' + name + '\" is not registered');\n  }\n  if (typeof engine === 'function') {\n    engine = { parse: engine };\n  }\n  return engine;\n};\n\nfunction aliase(name) {\n  switch (name.toLowerCase()) {\n    case 'js':\n    case 'javascript':\n      return 'javascript';\n    case 'coffee':\n    case 'coffeescript':\n    case 'cson':\n      return 'coffee';\n    case 'yaml':\n    case 'yml':\n      return 'yaml';\n    default: {\n      return name;\n    }\n  }\n}\n/CHANGELOG.md\u0002# Release history\n\n## 4.0.0 - 2018-04-01\n\n### Breaking changes\n\n- Now requires node v4 or higher. \n\n\n## 3.0.0 - 2017-06-30\n\n### Breaking changes\n\n- `toml`, `coffee` and `cson` are no longer supported by default. Please see [`options.engines`](README.md#optionsengines) and the [examples](./examples) to learn how to add engines.\n\n### Added\n\n- Support for [excerpts](README.md#optionsexcerpt).\n- The returned object now has non-enumerable `matter` and `stringify` properties.\n\n### Changed\n\n- Refactored engines (parsers), so that it's easier to add parsers and stringifiers.\n- `options.parsers` was renamed to [`options.engines`](README.md#optionsengines)\n/lib/stringify.js\u0005'use strict';\n\nconst typeOf = require('kind-of');\nconst getEngine = require('./engine');\nconst defaults = require('./defaults');\n\nmodule.exports = function(file, data, options) {\n  if (data == null && options == null) {\n    switch (typeOf(file)) {\n      case 'object':\n        data = file.data;\n        options = {};\n        break;\n      case 'string':\n        return file;\n      default: {\n        throw new TypeError('expected file to be a string or object');\n      }\n    }\n  }\n\n  const str = file.content;\n  const opts = defaults(options);\n  if (data == null) {\n    if (!opts.data) return file;\n    data = opts.data;\n  }\n\n  const language = file.language || opts.language;\n  const engine = getEngine(language, opts);\n  if (typeof engine.stringify !== 'function') {\n    throw new TypeError('expected \"' + language + '.stringify\" to be a function');\n  }\n\n  data = Object.assign({}, file.data, data);\n  const open = opts.delimiters[0];\n  const close = opts.delimiters[1];\n  const matter = engine.stringify(data, options).trim();\n  let buf = '';\n\n  if (matter !== '{}') {\n    buf = newline(open) + newline(matter) + newline(close);\n  }\n\n  if (typeof file.excerpt === 'string' && file.excerpt !== '') {\n    if (str.indexOf(file.excerpt.trim()) === -1) {\n      buf += newline(file.excerpt) + newline(close);\n    }\n  }\n\n  return buf + newline(str);\n};\n\nfunction newline(str) {\n  return str.slice(-1) !== '\\n' ? str + '\\n' : str;\n}\n/lib/to-file.js\u0004y'use strict';\n\nconst typeOf = require('kind-of');\nconst stringify = require('./stringify');\nconst utils = require('./utils');\n\n/**\n * Normalize the given value to ensure an object is returned\n * with the expected properties.\n */\n\nmodule.exports = function(file) {\n  if (typeOf(file) !== 'object') {\n    file = { content: file };\n  }\n\n  if (typeOf(file.data) !== 'object') {\n    file.data = {};\n  }\n\n  // if file was passed as an object, ensure that\n  // \"file.content\" is set\n  if (file.contents && file.content == null) {\n    file.content = file.contents;\n  }\n\n  // set non-enumerable properties on the file object\n  utils.define(file, 'orig', utils.toBuffer(file.content));\n  utils.define(file, 'language', file.language || '');\n  utils.define(file, 'matter', file.matter || '');\n  utils.define(file, 'stringify', function(data, options) {\n    if (options && options.language) {\n      file.language = options.language;\n    }\n    return stringify(file, data, options);\n  });\n\n  // strip BOM and ensure that \"file.content\" is a string\n  file.content = utils.toString(file.content);\n  file.isEmpty = false;\n  file.excerpt = '';\n  return file;\n};\n/lib/parse.js\u0001'use strict';\n\nconst getEngine = require('./engine');\nconst defaults = require('./defaults');\n\nmodule.exports = function(language, str, options) {\n  const opts = defaults(options);\n  const engine = getEngine(language, opts);\n  if (typeof engine.parse !== 'function') {\n    throw new TypeError('expected \"' + language + '.parse\" to be a function');\n  }\n  return engine.parse(str, opts);\n};\n/lib/defaults.js\u0002\u001b'use strict';\n\nconst engines = require('./engines');\nconst utils = require('./utils');\n\nmodule.exports = function(options) {\n  const opts = Object.assign({}, options);\n\n  // ensure that delimiters are an array\n  opts.delimiters = utils.arrayify(opts.delims || opts.delimiters || '---');\n  if (opts.delimiters.length === 1) {\n    opts.delimiters.push(opts.delimiters[0]);\n  }\n\n  opts.language = (opts.language || opts.lang || 'yaml').toLowerCase();\n  opts.engines = Object.assign({}, engines, opts.parsers, opts.engines);\n  return opts;\n};\n/LICENSE\u0004@The MIT License (MIT)\n\nCopyright (c) 2014-2018, Jon Schlinkert.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n/package.json\u000b.{\n  \"name\": \"gray-matter\",\n  \"description\": \"Parse front-matter from a string or file. Fast, reliable and easy to use. Parses YAML front matter by default, but also has support for YAML, JSON, TOML or Coffee Front-Matter, with options to set custom delimiters. Used by metalsmith, assemble, verb and many other projects.\",\n  \"version\": \"4.0.3\",\n  \"homepage\": \"https://github.com/jonschlinkert/gray-matter\",\n  \"author\": \"Jon Schlinkert (https://github.com/jonschlinkert)\",\n  \"contributors\": [\n    \"Andrew Meyer (https://github.com/Ajedi32)\",\n    \"Brian Woodward (https://twitter.com/doowb)\",\n    \"Caesar Schinas (https://caesarschinas.com)\",\n    \"Ian Storm Taylor (http://ianstormtaylor.com)\",\n    \"Jon Schlinkert (http://twitter.com/jonschlinkert)\",\n    \"Osman Nuri Okumuş (http://onokumus.com)\",\n    \"Pawel Kadluczka (http://blog.3d-logic.com)\",\n    \"Rob Loach (http://robloach.net)\",\n    \"(https://github.com/heymind)\",\n    \"Zach Whaley (http://zachwhaleys.website)\"\n  ],\n  \"repository\": \"jonschlinkert/gray-matter\",\n  \"bugs\": {\n    \"url\": \"https://github.com/jonschlinkert/gray-matter/issues\"\n  },\n  \"license\": \"MIT\",\n  \"files\": [\n    \"gray-matter.d.ts\",\n    \"index.js\",\n    \"lib\"\n  ],\n  \"main\": \"index.js\",\n  \"engines\": {\n    \"node\": \">=6.0\"\n  },\n  \"scripts\": {\n    \"test\": \"mocha\"\n  },\n  \"dependencies\": {\n    \"js-yaml\": \"^3.13.1\",\n    \"kind-of\": \"^6.0.2\",\n    \"section-matter\": \"^1.0.0\",\n    \"strip-bom-string\": \"^1.0.0\"\n  },\n  \"devDependencies\": {\n    \"ansi-green\": \"^0.1.1\",\n    \"benchmarked\": \"^2.0.0\",\n    \"coffeescript\": \"^2.2.3\",\n    \"delimiter-regex\": \"^2.0.0\",\n    \"extend-shallow\": \"^3.0.2\",\n    \"front-matter\": \"^2.3.0\",\n    \"gulp-format-md\": \"^1.0.0\",\n    \"minimist\": \"^1.2.0\",\n    \"mocha\": \"^6.1.4\",\n    \"toml\": \"^2.3.3\",\n    \"vinyl\": \"^2.1.0\",\n    \"write\": \"^1.0.3\"\n  },\n  \"keywords\": [\n    \"assemble\",\n    \"coffee\",\n    \"coffee-script\",\n    \"data\",\n    \"docs\",\n    \"documentation\",\n    \"extract\",\n    \"extracting\",\n    \"front\",\n    \"front-matter\",\n    \"frontmatter\",\n    \"generate\",\n    \"generator\",\n    \"gh-pages\",\n    \"gray\",\n    \"javascript\",\n    \"jekyll\",\n    \"js\",\n    \"JSON\",\n    \"markdown\",\n    \"matter\",\n    \"parse\",\n    \"parser\",\n    \"parsing\",\n    \"site\",\n    \"static\",\n    \"template\",\n    \"toml\",\n    \"yaml\",\n    \"yfm\"\n  ],\n  \"browser\": {\n    \"fs\": false\n  },\n  \"typings\": \"gray-matter.d.ts\",\n  \"eslintConfig\": {\n    \"rules\": {\n      \"no-console\": 0\n    }\n  },\n  \"verb\": {\n    \"toc\": false,\n    \"layout\": \"default\",\n    \"tasks\": [\n      \"readme\"\n    ],\n    \"plugins\": [\n      \"gulp-format-md\"\n    ],\n    \"helpers\": {\n      \"examples\": \"./examples/helper.js\"\n    },\n    \"lint\": {\n      \"reflinks\": true\n    },\n    \"related\": {\n      \"list\": [\n        \"assemble\",\n        \"metalsmith\",\n        \"verb\"\n      ]\n    },\n    \"reflinks\": [\n      \"coffe-script\",\n      \"generate\",\n      \"js-yaml\",\n      \"toml\",\n      \"update\"\n    ]\n  }\n}\n/lib/engines.js\u0003'use strict';\n\nconst yaml = require('js-yaml');\n\n/**\n * Default engines\n */\n\nconst engines = exports = module.exports;\n\n/**\n * YAML\n */\n\nengines.yaml = {\n  parse: yaml.safeLoad.bind(yaml),\n  stringify: yaml.safeDump.bind(yaml)\n};\n\n/**\n * JSON\n */\n\nengines.json = {\n  parse: JSON.parse.bind(JSON),\n  stringify: function(obj, options) {\n    const opts = Object.assign({replacer: null, space: 2}, options);\n    return JSON.stringify(obj, opts.replacer, opts.space);\n  }\n};\n\n/**\n * JavaScript\n */\n\nengines.javascript = {\n  parse: function parse(str, options, wrap) {\n    /* eslint no-eval: 0 */\n    try {\n      if (wrap !== false) {\n        str = '(function() {\\nreturn ' + str.trim() + ';\\n}());';\n      }\n      return eval(str) || {};\n    } catch (err) {\n      if (wrap !== false && /(unexpected|identifier)/i.test(err.message)) {\n        return parse(str, options, false);\n      }\n      throw new SyntaxError(err);\n    }\n  },\n  stringify: function() {\n    throw new Error('stringifying JavaScript is not supported');\n  }\n};\n/lib/utils.js\u0004'use strict';\n\nconst stripBom = require('strip-bom-string');\nconst typeOf = require('kind-of');\n\nexports.define = function(obj, key, val) {\n  Reflect.defineProperty(obj, key, {\n    enumerable: false,\n    configurable: true,\n    writable: true,\n    value: val\n  });\n};\n\n/**\n * Returns true if `val` is a buffer\n */\n\nexports.isBuffer = function(val) {\n  return typeOf(val) === 'buffer';\n};\n\n/**\n * Returns true if `val` is an object\n */\n\nexports.isObject = function(val) {\n  return typeOf(val) === 'object';\n};\n\n/**\n * Cast `input` to a buffer\n */\n\nexports.toBuffer = function(input) {\n  return typeof input === 'string' ? Buffer.from(input) : input;\n};\n\n/**\n * Cast `val` to a string.\n */\n\nexports.toString = function(input) {\n  if (exports.isBuffer(input)) return stripBom(String(input));\n  if (typeof input !== 'string') {\n    throw new TypeError('expected input to be a string or buffer');\n  }\n  return stripBom(input);\n};\n\n/**\n * Cast `val` to an array.\n */\n\nexports.arrayify = function(val) {\n  return val ? (Array.isArray(val) ? val : [val]) : [];\n};\n\n/**\n * Returns true if `str` starts with `substr`.\n */\n\nexports.startsWith = function(str, substr, len) {\n  if (typeof len !== 'number') len = substr.length;\n  return str.slice(0, len) === substr;\n};\n/gray-matter.d.ts\u000f#/**\n * Takes a string or object with `content` property, extracts\n * and parses front-matter from the string, then returns an object\n * with `data`, `content` and other [useful properties](#returned-object).\n *\n * ```js\n * var matter = require('gray-matter');\n * console.log(matter('---\\ntitle: Home\\n---\\nOther stuff'));\n * //=> { data: { title: 'Home'}, content: 'Other stuff' }\n * ```\n * @param {Object|String} `input` String, or object with `content` string\n * @param {Object} `options`\n * @return {Object}\n * @api public\n */\ndeclare function matter<\n  I extends matter.Input,\n  O extends matter.GrayMatterOption<I, O>\n>(input: I | { content: I }, options?: O): matter.GrayMatterFile<I>\n\ndeclare namespace matter {\n  type Input = string | Buffer\n  interface GrayMatterOption<\n    I extends Input,\n    O extends GrayMatterOption<I, O>\n  > {\n    parser?: () => void\n    eval?: boolean\n    excerpt?: boolean | ((input: I, options: O) => string)\n    excerpt_separator?: string\n    engines?: {\n      [index: string]:\n        | ((input: string) => object)\n        | { parse: (input: string) => object; stringify?: (data: object) => string }\n    }\n    language?: string\n    delimiters?: string | [string, string]\n  }\n  interface GrayMatterFile<I extends Input> {\n    data: { [key: string]: any }\n    content: string\n    excerpt?: string\n    orig: Buffer | I\n    language: string\n    matter: string\n    stringify(lang: string): string\n  }\n  \n  /**\n   * Stringify an object to YAML or the specified language, and\n   * append it to the given string. By default, only YAML and JSON\n   * can be stringified. See the [engines](#engines) section to learn\n   * how to stringify other languages.\n   *\n   * ```js\n   * console.log(matter.stringify('foo bar baz', {title: 'Home'}));\n   * // results in:\n   * // ---\n   * // title: Home\n   * // ---\n   * // foo bar baz\n   * ```\n   * @param {String|Object} `file` The content string to append to stringified front-matter, or a file object with `file.content` string.\n   * @param {Object} `data` Front matter to stringify.\n   * @param {Object} `options` [Options](#options) to pass to gray-matter and [js-yaml].\n   * @return {String} Returns a string created by wrapping stringified yaml with delimiters, and appending that to the given string.\n   */\n  export function stringify<O extends GrayMatterOption<string, O>>(\n    file: string | { content: string },\n    data: object,\n    options?: GrayMatterOption<string, O>\n  ): string\n\n  /**\n   * Synchronously read a file from the file system and parse\n   * front matter. Returns the same object as the [main function](#matter).\n   *\n   * ```js\n   * var file = matter.read('./content/blog-post.md');\n   * ```\n   * @param {String} `filepath` file path of the file to read.\n   * @param {Object} `options` [Options](#options) to pass to gray-matter.\n   * @return {Object} Returns [an object](#returned-object) with `data` and `content`\n   */\n  export function read<O extends GrayMatterOption<string, O>>(\n    fp: string,\n    options?: GrayMatterOption<string, O>\n  ): matter.GrayMatterFile<string>\n\n  /**\n   * Returns true if the given `string` has front matter.\n   * @param  {String} `string`\n   * @param  {Object} `options`\n   * @return {Boolean} True if front matter exists.\n   */\n  export function test<O extends matter.GrayMatterOption<string, O>>(\n    str: string,\n    options?: GrayMatterOption<string, O>\n  ): boolean\n\n  /**\n   * Detect the language to use, if one is defined after the\n   * first front-matter delimiter.\n   * @param  {String} `string`\n   * @param  {Object} `options`\n   * @return {Object} Object with `raw` (actual language string), and `name`, the language with whitespace trimmed\n   */\n  export function language<O extends matter.GrayMatterOption<string, O>>(\n    str: string,\n    options?: GrayMatterOption<string, O>\n  ): { name: string; raw: string }\n}\n\nexport = matter\n/README.mdA# gray-matter [![NPM version](https://img.shields.io/npm/v/gray-matter.svg?style=flat)](https://www.npmjs.com/package/gray-matter) [![NPM monthly downloads](https://img.shields.io/npm/dm/gray-matter.svg?style=flat)](https://npmjs.org/package/gray-matter) [![NPM total downloads](https://img.shields.io/npm/dt/gray-matter.svg?style=flat)](https://npmjs.org/package/gray-matter) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/gray-matter.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/gray-matter)\n\n> Parse front-matter from a string or file. Fast, reliable and easy to use. Parses YAML front matter by default, but also has support for YAML, JSON, TOML or Coffee Front-Matter, with options to set custom delimiters. Used by metalsmith, assemble, verb and many other projects.\n\nPlease consider following this project's author, [Jon Schlinkert](https://github.com/jonschlinkert), and consider starring the project to show your :heart: and support.\n\n## Install\n\nInstall with [npm](https://www.npmjs.com/):\n\n```sh\n$ npm install --save gray-matter\n```\n\n## Heads up!\n\nPlease see the [changelog](CHANGELOG.md) to learn about breaking changes that were made in v3.0.\n\n## What does this do?\n\n<details>\n<summary><strong>Run this example</strong></summary>\n\nAdd the HTML in the following example to `example.html`, then add the following code to `example.js` and run `$ node example` (without the `$`):\n\n```js\nconst fs = require('fs');\nconst matter = require('gray-matter');\nconst str = fs.readFileSync('example.html', 'utf8');\nconsole.log(matter(str));\n```\n\n</details>\n\nConverts a string with front-matter, like this:\n\n```handlebars\n---\ntitle: Hello\nslug: home\n---\n<h1>Hello world!</h1>\n```\n\nInto an object like this:\n\n```js\n{\n  content: '<h1>Hello world!</h1>',\n  data: { \n    title: 'Hello', \n    slug: 'home' \n  }\n}\n```\n\n## Why use gray-matter?\n\n* **simple**: main function takes a string and returns an object\n* **accurate**: better at catching and handling edge cases than front-matter parsers that rely on regex for parsing\n* **fast**: faster than other front-matter parsers that use regex for parsing\n* **flexible**: By default, gray-matter is capable of parsing [YAML](https://github.com/nodeca/js-yaml), [JSON](http://en.wikipedia.org/wiki/Json) and JavaScript front-matter. But other [engines](#optionsengines) may be added.\n* **extensible**: Use [custom delimiters](#optionsdelimiters), or add support for [any language](#optionsengines), like [TOML](http://github.com/mojombo/toml), [CoffeeScript](http://coffeescript.org), or [CSON](https://github.com/bevry/cson)\n* **battle-tested**: used by [assemble](https://github.com/assemble/assemble), [metalsmith](https://github.com/segmentio/metalsmith), [phenomic](https://github.com/phenomic/phenomic), [verb](https://github.com/assemble/verb), [generate](https://github.com/generate/generate), [update](https://github.com/update/update) and many others.\n\n<details>\n<summary><strong>Rationale</strong></summary>\n\n**Why did we create gray-matter in the first place?**\n\nWe created gray-matter after trying out other libraries that failed to meet our standards and requirements.\n\nSome libraries met most of the requirements, but _none met all of them_.\n\n**Here are the most important**:\n\n* Be usable, if not simple\n* Use a dependable and well-supported library for parsing YAML\n* Support other languages besides YAML\n* Support stringifying back to YAML or another language\n* Don't fail when no content exists\n* Don't fail when no front matter exists\n* Don't use regex for parsing. This is a relatively simple parsing operation, and regex is the slowest and most error-prone way to do it.\n* Have no problem reading YAML files directly\n* Have no problem with complex content, including **non-front-matter** fenced code blocks that contain examples of YAML front matter. Other parsers fail on this.\n* Support stringifying back to front-matter. This is useful for linting, updating properties, etc.\n* Allow custom delimiters, when it's necessary for avoiding delimiter collision.\n* Should return an object with at least these three properties:\n  - `data`: the parsed YAML front matter, as a JSON object\n  - `content`: the contents as a string, without the front matter\n  - `orig`: the \"original\" content (for debugging)\n\n</details>\n\n## Usage\n\nUsing Node's `require()` system:\n\n```js\nconst matter = require('gray-matter');\n```\n\nOr with [typescript](https://www.typescriptlang.org)\n\n```js\nimport matter = require('gray-matter');\n// OR\nimport * as matter from 'gray-matter';\n```\n\nPass a string and [options](#options) to gray-matter:\n\n```js\nconsole.log(matter('---\\ntitle: Front Matter\\n---\\nThis is content.'));\n```\n\nReturns:\n\n```js\n{\n  content: '\\nThis is content.',\n  data: { \n    title: 'Front Matter' \n  } \n}\n```\n\nMore about the returned object in the following section.\n\n***\n\n## Returned object\n\ngray-matter returns a `file` object with the following properties.\n\n**Enumerable**\n\n* `file.data` **{Object}**: the object created by parsing front-matter\n* `file.content` **{String}**: the input string, with `matter` stripped\n* `file.excerpt` **{String}**: an excerpt, if [defined on the options](#optionsexcerpt)\n* `file.empty` **{String}**: when the front-matter is \"empty\" (either all whitespace, nothing at all, or just comments and no data), the original string is set on this property. See [#65](https://github.com/jonschlinkert/gray-matter/issues/65) for details regarding use case.\n* `file.isEmpty` **{Boolean}**: true if front-matter is empty.\n\n**Non-enumerable**\n\nIn addition, the following non-enumberable properties are added to the object to help with debugging.\n\n* `file.orig` **{Buffer}**: the original input string (or buffer)\n* `file.language` **{String}**: the front-matter language that was parsed. `yaml` is the default\n* `file.matter` **{String}**: the _raw_, un-parsed front-matter string\n* `file.stringify` **{Function}**: [stringify](#stringify) the file by converting `file.data` to a string in the given language, wrapping it in delimiters and prepending it to `file.content`.\n\n## Run the examples\n\nIf you'd like to test-drive the examples, first clone gray-matter into `my-project` (or wherever you want):\n\n```sh\n$ git clone https://github.com/jonschlinkert/gray-matter my-project\n```\n\nCD into `my-project` and install dependencies:\n\n```sh\n$ cd my-project && npm install\n```\n\nThen run any of the [examples](./examples) to see how gray-matter works:\n\n```sh\n$ node examples/<example_name>\n```\n\n**Links to examples**\n\n* [coffee](examples/coffee.js)\n* [excerpt-separator](examples/excerpt-separator.js)\n* [excerpt-stringify](examples/excerpt-stringify.js)\n* [excerpt](examples/excerpt.js)\n* [javascript](examples/javascript.js)\n* [json-stringify](examples/json-stringify.js)\n* [json](examples/json.js)\n* [restore-empty](examples/restore-empty.js)\n* [sections-excerpt](examples/sections-excerpt.js)\n* [sections](examples/sections.js)\n* [toml](examples/toml.js)\n* [yaml-stringify](examples/yaml-stringify.js)\n* [yaml](examples/yaml.js)\n\n## API\n\n### [matter](index.js#L29)\n\nTakes a string or object with `content` property, extracts and parses front-matter from the string, then returns an object with `data`, `content` and other [useful properties](#returned-object).\n\n**Params**\n\n* `input` **{Object|String}**: String, or object with `content` string\n* `options` **{Object}**\n* `returns` **{Object}**\n\n**Example**\n\n```js\nconst matter = require('gray-matter');\nconsole.log(matter('---\\ntitle: Home\\n---\\nOther stuff'));\n//=> { data: { title: 'Home'}, content: 'Other stuff' }\n```\n\n### [.stringify](index.js#L160)\n\nStringify an object to YAML or the specified language, and append it to the given string. By default, only YAML and JSON can be stringified. See the [engines](#engines) section to learn how to stringify other languages.\n\n**Params**\n\n* `file` **{String|Object}**: The content string to append to stringified front-matter, or a file object with `file.content` string.\n* `data` **{Object}**: Front matter to stringify.\n* `options` **{Object}**: [Options](#options) to pass to gray-matter and [js-yaml](https://github.com/nodeca/js-yaml).\n* `returns` **{String}**: Returns a string created by wrapping stringified yaml with delimiters, and appending that to the given string.\n\n**Example**\n\n```js\nconsole.log(matter.stringify('foo bar baz', {title: 'Home'}));\n// results in:\n// ---\n// title: Home\n// ---\n// foo bar baz\n```\n\n### [.read](index.js#L178)\n\nSynchronously read a file from the file system and parse front matter. Returns the same object as the [main function](#matter).\n\n**Params**\n\n* `filepath` **{String}**: file path of the file to read.\n* `options` **{Object}**: [Options](#options) to pass to gray-matter.\n* `returns` **{Object}**: Returns [an object](#returned-object) with `data` and `content`\n\n**Example**\n\n```js\nconst file = matter.read('./content/blog-post.md');\n```\n\n### [.test](index.js#L193)\n\nReturns true if the given `string` has front matter.\n\n**Params**\n\n* `string` **{String}**\n* `options` **{Object}**\n* `returns` **{Boolean}**: True if front matter exists.\n\n## Options\n\n### options.excerpt\n\n**Type**: `Boolean|Function`\n\n**Default**: `undefined`\n\nExtract an excerpt that directly follows front-matter, or is the first thing in the string if no front-matter exists.\n\nIf set to `excerpt: true`, it will look for the frontmatter delimiter, `---` by default and grab everything leading up to it.\n\n**Example**\n\n```js\nconst str = '---\\nfoo: bar\\n---\\nThis is an excerpt.\\n---\\nThis is content';\nconst file = matter(str, { excerpt: true });\n```\n\nResults in:\n\n```js\n{ \n  content: 'This is an excerpt.\\n---\\nThis is content',\n  data: { foo: 'bar' },\n  excerpt: 'This is an excerpt.\\n' \n}\n```\n\nYou can also set `excerpt` to a function. This function uses the 'file' and 'options' that were initially passed to gray-matter as parameters, so you can control how the excerpt is extracted from the content.\n\n**Example**\n\n```js\n// returns the first 4 lines of the contents\nfunction firstFourLines(file, options) {\n  file.excerpt = file.content.split('\\n').slice(0, 4).join(' ');\n}\n\nconst file =  matter([\n  '---',\n  'foo: bar',\n  '---',\n  'Only this',\n  'will be',\n  'in the',\n  'excerpt',\n  'but not this...'\n].join('\\n'), {excerpt: firstFourLines});\n```\n\nResults in:\n\n```js\n{ \n  content: 'Only this\\nwill be\\nin the\\nexcerpt\\nbut not this...',\n  data: { foo: 'bar' },\n  excerpt: 'Only this will be in the excerpt'\n}\n```\n\n### options.excerpt_separator\n\n**Type**: `String`\n\n**Default**: `undefined`\n\nDefine a custom separator to use for excerpts.\n\n```js\nconsole.log(matter(string, {excerpt_separator: '<!-- end -->'}));\n```\n\n**Example**\n\nThe following HTML string:\n\n```html\n---\ntitle: Blog\n---\nMy awesome blog.\n<!-- end -->\n<h1>Hello world</h1>\n```\n\nResults in:\n\n```js\n{ \n  data: { title: 'Blog'}, \n  excerpt: 'My awesome blog.', \n  content: 'My awesome blog.\\n<!-- end -->\\n<h1>Hello world</h1>' \n}\n```\n\n### options.engines\n\nDefine custom engines for parsing and/or stringifying front-matter.\n\n**Type**: `Object` Object of engines\n\n**Default**: `JSON`, `YAML` and `JavaScript` are already handled by default.\n\n**Engine format**\n\nEngines may either be an object with `parse` and (optionally) `stringify` methods, or a function that will be used for parsing only.\n\n**Examples**\n\n```js\nconst toml = require('toml');\n\n/**\n * defined as a function\n */\n\nconst file = matter(str, {\n  engines: {\n    toml: toml.parse.bind(toml),\n  }\n});\n\n/**\n * Or as an object\n */\n\nconst file = matter(str, {\n  engines: {\n    toml: {\n      parse: toml.parse.bind(toml),\n\n      // example of throwing an error to let users know stringifying is\n      // not supported (a TOML stringifier might exist, this is just an example)\n      stringify: function() {\n        throw new Error('cannot stringify to TOML');\n      }\n    }\n  }\n});\n\nconsole.log(file);\n```\n\n### options.language\n\n**Type**: `String`\n\n**Default**: `yaml`\n\nDefine the engine to use for parsing front-matter.\n\n```js\nconsole.log(matter(string, {language: 'toml'}));\n```\n\n**Example**\n\nThe following HTML string:\n\n```html\n---\ntitle = \"TOML\"\ndescription = \"Front matter\"\ncategories = \"front matter toml\"\n---\nThis is content\n```\n\nResults in:\n\n```js\n{ content: 'This is content',\n  excerpt: '',\n  data:\n   { title: 'TOML',\n     description: 'Front matter',\n     categories: 'front matter toml' } }\n```\n\n**Dynamic language detection**\n\nInstead of defining the language on the options, gray-matter will automatically detect the language defined after the first delimiter and select the correct engine to use for parsing.\n\n```html\n---toml\ntitle = \"TOML\"\ndescription = \"Front matter\"\ncategories = \"front matter toml\"\n---\nThis is content\n```\n\n### options.delimiters\n\n**Type**: `String`\n\n**Default**: `---`\n\nOpen and close delimiters can be passed in as an array of strings.\n\n**Example:**\n\n```js\n// format delims as a string\nmatter.read('file.md', {delims: '~~~'});\n// or an array (open/close)\nmatter.read('file.md', {delims: ['~~~', '~~~']});\n```\n\nwould parse:\n\n```html\n~~~\ntitle: Home\n~~~\nThis is the {{title}} page.\n```\n\n## Deprecated options\n\n### options.lang\n\nDecrecated, please use [options.language](#optionslanguage) instead.\n\n### options.delims\n\nDecrecated, please use [options.delimiters](#optionsdelimiters) instead.\n\n### options.parsers\n\nDecrecated, please use [options.engines](#optionsengines) instead.\n\n## About\n\n<details>\n<summary><strong>Contributing</strong></summary>\n\nPull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).\n\n</details>\n\n<details>\n<summary><strong>Running Tests</strong></summary>\n\nRunning and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:\n\n```sh\n$ npm install && npm test\n```\n\n</details>\n\n<details>\n<summary><strong>Building docs</strong></summary>\n\n_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_\n\nTo generate the readme, run the following command:\n\n```sh\n$ npm install -g verbose/verb#dev verb-generate-readme && verb\n```\n\n</details>\n\n### Related projects\n\nYou might also be interested in these projects:\n\n* [assemble](https://www.npmjs.com/package/assemble): Get the rocks out of your socks! Assemble makes you fast at creating web projects… [more](https://github.com/assemble/assemble) | [homepage](https://github.com/assemble/assemble \"Get the rocks out of your socks! Assemble makes you fast at creating web projects. Assemble is used by thousands of projects for rapid prototyping, creating themes, scaffolds, boilerplates, e-books, UI components, API documentation, blogs, building websit\")\n* [metalsmith](https://www.npmjs.com/package/metalsmith): An extremely simple, pluggable static site generator. | [homepage](https://github.com/segmentio/metalsmith#readme \"An extremely simple, pluggable static site generator.\")\n* [verb](https://www.npmjs.com/package/verb): Documentation generator for GitHub projects. Verb is extremely powerful, easy to use, and is used… [more](https://github.com/verbose/verb) | [homepage](https://github.com/verbose/verb \"Documentation generator for GitHub projects. Verb is extremely powerful, easy to use, and is used on hundreds of projects of all sizes to generate everything from API docs to readmes.\")\n* [gray-matter-loader](https://github.com/atlassian/gray-matter-loader): A webpack loader for gray-matter. [homepage](https://github.com/atlassian/gray-matter-loader#gray-matter-loader)\n\n### Contributors\n\n| **Commits** | **Contributor** | \n| --- | --- |\n| 174 | [jonschlinkert](https://github.com/jonschlinkert) |\n| 7 | [RobLoach](https://github.com/RobLoach) |\n| 5 | [heymind](https://github.com/heymind) |\n| 4 | [doowb](https://github.com/doowb) |\n| 3 | [aljopro](https://github.com/aljopro) |\n| 2 | [reccanti](https://github.com/reccanti) |\n| 2 | [onokumus](https://github.com/onokumus) |\n| 2 | [moozzyk](https://github.com/moozzyk) |\n| 1 | [Ajedi32](https://github.com/Ajedi32) |\n| 1 | [caesar](https://github.com/caesar) |\n| 1 | [ianstormtaylor](https://github.com/ianstormtaylor) |\n| 1 | [qm3ster](https://github.com/qm3ster) |\n| 1 | [zachwhaley](https://github.com/zachwhaley) |\n\n### Author\n\n**Jon Schlinkert**\n\n* [LinkedIn Profile](https://linkedin.com/in/jonschlinkert)\n* [GitHub Profile](https://github.com/jonschlinkert)\n* [Twitter Profile](https://twitter.com/jonschlinkert)\n\n### License\n\nCopyright © 2018, [Jon Schlinkert](https://github.com/jonschlinkert).\nReleased under the [MIT License](LICENSE).\n\n***\n\n_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.6.0, on April 01, 2018._/lib/excerpt.js\u0002'use strict';\n\nconst defaults = require('./defaults');\n\nmodule.exports = function(file, options) {\n  const opts = defaults(options);\n\n  if (file.data == null) {\n    file.data = {};\n  }\n\n  if (typeof opts.excerpt === 'function') {\n    return opts.excerpt(file, opts);\n  }\n\n  const sep = file.data.excerpt_separator || opts.excerpt_separator;\n  if (sep == null && (opts.excerpt === false || opts.excerpt == null)) {\n    return file;\n  }\n\n  const delimiter = typeof opts.excerpt === 'string'\n    ? opts.excerpt\n    : (sep || opts.delimiters[0]);\n\n  // if enabled, get the excerpt defined after front-matter\n  const idx = file.content.indexOf(delimiter);\n  if (idx !== -1) {\n    file.excerpt = file.content.slice(0, idx);\n  }\n\n  return file;\n};\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/ZG9jdHJpbmVAMy4wLjA=",
    "content": "/lib/typed.jsŖi/*\n * @fileoverview Type expression parser.\n * @author Yusuke Suzuki <utatane.tea@gmail.com>\n * @author Dan Tao <daniel.tao@gmail.com>\n * @author Andrew Eisenberg <andrew@eisenberg.as>\n */\n\n// \"typed\", the Type Expression Parser for doctrine.\n\n(function () {\n    'use strict';\n\n    var Syntax,\n        Token,\n        source,\n        length,\n        index,\n        previous,\n        token,\n        value,\n        esutils,\n        utility,\n        rangeOffset,\n        addRange;\n\n    esutils = require('esutils');\n    utility = require('./utility');\n\n    Syntax = {\n        NullableLiteral: 'NullableLiteral',\n        AllLiteral: 'AllLiteral',\n        NullLiteral: 'NullLiteral',\n        UndefinedLiteral: 'UndefinedLiteral',\n        VoidLiteral: 'VoidLiteral',\n        UnionType: 'UnionType',\n        ArrayType: 'ArrayType',\n        RecordType: 'RecordType',\n        FieldType: 'FieldType',\n        FunctionType: 'FunctionType',\n        ParameterType: 'ParameterType',\n        RestType: 'RestType',\n        NonNullableType: 'NonNullableType',\n        OptionalType: 'OptionalType',\n        NullableType: 'NullableType',\n        NameExpression: 'NameExpression',\n        TypeApplication: 'TypeApplication',\n        StringLiteralType: 'StringLiteralType',\n        NumericLiteralType: 'NumericLiteralType',\n        BooleanLiteralType: 'BooleanLiteralType'\n    };\n\n    Token = {\n        ILLEGAL: 0,    // ILLEGAL\n        DOT_LT: 1,     // .<\n        REST: 2,       // ...\n        LT: 3,         // <\n        GT: 4,         // >\n        LPAREN: 5,     // (\n        RPAREN: 6,     // )\n        LBRACE: 7,     // {\n        RBRACE: 8,     // }\n        LBRACK: 9,    // [\n        RBRACK: 10,    // ]\n        COMMA: 11,     // ,\n        COLON: 12,     // :\n        STAR: 13,      // *\n        PIPE: 14,      // |\n        QUESTION: 15,  // ?\n        BANG: 16,      // !\n        EQUAL: 17,     // =\n        NAME: 18,      // name token\n        STRING: 19,    // string\n        NUMBER: 20,    // number\n        EOF: 21\n    };\n\n    function isTypeName(ch) {\n        return '><(){}[],:*|?!='.indexOf(String.fromCharCode(ch)) === -1 && !esutils.code.isWhiteSpace(ch) && !esutils.code.isLineTerminator(ch);\n    }\n\n    function Context(previous, index, token, value) {\n        this._previous = previous;\n        this._index = index;\n        this._token = token;\n        this._value = value;\n    }\n\n    Context.prototype.restore = function () {\n        previous = this._previous;\n        index = this._index;\n        token = this._token;\n        value = this._value;\n    };\n\n    Context.save = function () {\n        return new Context(previous, index, token, value);\n    };\n\n    function maybeAddRange(node, range) {\n        if (addRange) {\n            node.range = [range[0] + rangeOffset, range[1] + rangeOffset];\n        }\n        return node;\n    }\n\n    function advance() {\n        var ch = source.charAt(index);\n        index += 1;\n        return ch;\n    }\n\n    function scanHexEscape(prefix) {\n        var i, len, ch, code = 0;\n\n        len = (prefix === 'u') ? 4 : 2;\n        for (i = 0; i < len; ++i) {\n            if (index < length && esutils.code.isHexDigit(source.charCodeAt(index))) {\n                ch = advance();\n                code = code * 16 + '0123456789abcdef'.indexOf(ch.toLowerCase());\n            } else {\n                return '';\n            }\n        }\n        return String.fromCharCode(code);\n    }\n\n    function scanString() {\n        var str = '', quote, ch, code, unescaped, restore; //TODO review removal octal = false\n        quote = source.charAt(index);\n        ++index;\n\n        while (index < length) {\n            ch = advance();\n\n            if (ch === quote) {\n                quote = '';\n                break;\n            } else if (ch === '\\\\') {\n                ch = advance();\n                if (!esutils.code.isLineTerminator(ch.charCodeAt(0))) {\n                    switch (ch) {\n                    case 'n':\n                        str += '\\n';\n                        break;\n                    case 'r':\n                        str += '\\r';\n                        break;\n                    case 't':\n                        str += '\\t';\n                        break;\n                    case 'u':\n                    case 'x':\n                        restore = index;\n                        unescaped = scanHexEscape(ch);\n                        if (unescaped) {\n                            str += unescaped;\n                        } else {\n                            index = restore;\n                            str += ch;\n                        }\n                        break;\n                    case 'b':\n                        str += '\\b';\n                        break;\n                    case 'f':\n                        str += '\\f';\n                        break;\n                    case 'v':\n                        str += '\\v';\n                        break;\n\n                    default:\n                        if (esutils.code.isOctalDigit(ch.charCodeAt(0))) {\n                            code = '01234567'.indexOf(ch);\n\n                            // \\0 is not octal escape sequence\n                            // Deprecating unused code. TODO review removal\n                            //if (code !== 0) {\n                            //    octal = true;\n                            //}\n\n                            if (index < length && esutils.code.isOctalDigit(source.charCodeAt(index))) {\n                                //TODO Review Removal octal = true;\n                                code = code * 8 + '01234567'.indexOf(advance());\n\n                                // 3 digits are only allowed when string starts\n                                // with 0, 1, 2, 3\n                                if ('0123'.indexOf(ch) >= 0 &&\n                                        index < length &&\n                                        esutils.code.isOctalDigit(source.charCodeAt(index))) {\n                                    code = code * 8 + '01234567'.indexOf(advance());\n                                }\n                            }\n                            str += String.fromCharCode(code);\n                        } else {\n                            str += ch;\n                        }\n                        break;\n                    }\n                } else {\n                    if (ch ===  '\\r' && source.charCodeAt(index) === 0x0A  /* '\\n' */) {\n                        ++index;\n                    }\n                }\n            } else if (esutils.code.isLineTerminator(ch.charCodeAt(0))) {\n                break;\n            } else {\n                str += ch;\n            }\n        }\n\n        if (quote !== '') {\n            utility.throwError('unexpected quote');\n        }\n\n        value = str;\n        return Token.STRING;\n    }\n\n    function scanNumber() {\n        var number, ch;\n\n        number = '';\n        ch = source.charCodeAt(index);\n\n        if (ch !== 0x2E  /* '.' */) {\n            number = advance();\n            ch = source.charCodeAt(index);\n\n            if (number === '0') {\n                if (ch === 0x78  /* 'x' */ || ch === 0x58  /* 'X' */) {\n                    number += advance();\n                    while (index < length) {\n                        ch = source.charCodeAt(index);\n                        if (!esutils.code.isHexDigit(ch)) {\n                            break;\n                        }\n                        number += advance();\n                    }\n\n                    if (number.length <= 2) {\n                        // only 0x\n                        utility.throwError('unexpected token');\n                    }\n\n                    if (index < length) {\n                        ch = source.charCodeAt(index);\n                        if (esutils.code.isIdentifierStartES5(ch)) {\n                            utility.throwError('unexpected token');\n                        }\n                    }\n                    value = parseInt(number, 16);\n                    return Token.NUMBER;\n                }\n\n                if (esutils.code.isOctalDigit(ch)) {\n                    number += advance();\n                    while (index < length) {\n                        ch = source.charCodeAt(index);\n                        if (!esutils.code.isOctalDigit(ch)) {\n                            break;\n                        }\n                        number += advance();\n                    }\n\n                    if (index < length) {\n                        ch = source.charCodeAt(index);\n                        if (esutils.code.isIdentifierStartES5(ch) || esutils.code.isDecimalDigit(ch)) {\n                            utility.throwError('unexpected token');\n                        }\n                    }\n                    value = parseInt(number, 8);\n                    return Token.NUMBER;\n                }\n\n                if (esutils.code.isDecimalDigit(ch)) {\n                    utility.throwError('unexpected token');\n                }\n            }\n\n            while (index < length) {\n                ch = source.charCodeAt(index);\n                if (!esutils.code.isDecimalDigit(ch)) {\n                    break;\n                }\n                number += advance();\n            }\n        }\n\n        if (ch === 0x2E  /* '.' */) {\n            number += advance();\n            while (index < length) {\n                ch = source.charCodeAt(index);\n                if (!esutils.code.isDecimalDigit(ch)) {\n                    break;\n                }\n                number += advance();\n            }\n        }\n\n        if (ch === 0x65  /* 'e' */ || ch === 0x45  /* 'E' */) {\n            number += advance();\n\n            ch = source.charCodeAt(index);\n            if (ch === 0x2B  /* '+' */ || ch === 0x2D  /* '-' */) {\n                number += advance();\n            }\n\n            ch = source.charCodeAt(index);\n            if (esutils.code.isDecimalDigit(ch)) {\n                number += advance();\n                while (index < length) {\n                    ch = source.charCodeAt(index);\n                    if (!esutils.code.isDecimalDigit(ch)) {\n                        break;\n                    }\n                    number += advance();\n                }\n            } else {\n                utility.throwError('unexpected token');\n            }\n        }\n\n        if (index < length) {\n            ch = source.charCodeAt(index);\n            if (esutils.code.isIdentifierStartES5(ch)) {\n                utility.throwError('unexpected token');\n            }\n        }\n\n        value = parseFloat(number);\n        return Token.NUMBER;\n    }\n\n\n    function scanTypeName() {\n        var ch, ch2;\n\n        value = advance();\n        while (index < length && isTypeName(source.charCodeAt(index))) {\n            ch = source.charCodeAt(index);\n            if (ch === 0x2E  /* '.' */) {\n                if ((index + 1) >= length) {\n                    return Token.ILLEGAL;\n                }\n                ch2 = source.charCodeAt(index + 1);\n                if (ch2 === 0x3C  /* '<' */) {\n                    break;\n                }\n            }\n            value += advance();\n        }\n        return Token.NAME;\n    }\n\n    function next() {\n        var ch;\n\n        previous = index;\n\n        while (index < length && esutils.code.isWhiteSpace(source.charCodeAt(index))) {\n            advance();\n        }\n        if (index >= length) {\n            token = Token.EOF;\n            return token;\n        }\n\n        ch = source.charCodeAt(index);\n        switch (ch) {\n        case 0x27:  /* ''' */\n        case 0x22:  /* '\"' */\n            token = scanString();\n            return token;\n\n        case 0x3A:  /* ':' */\n            advance();\n            token = Token.COLON;\n            return token;\n\n        case 0x2C:  /* ',' */\n            advance();\n            token = Token.COMMA;\n            return token;\n\n        case 0x28:  /* '(' */\n            advance();\n            token = Token.LPAREN;\n            return token;\n\n        case 0x29:  /* ')' */\n            advance();\n            token = Token.RPAREN;\n            return token;\n\n        case 0x5B:  /* '[' */\n            advance();\n            token = Token.LBRACK;\n            return token;\n\n        case 0x5D:  /* ']' */\n            advance();\n            token = Token.RBRACK;\n            return token;\n\n        case 0x7B:  /* '{' */\n            advance();\n            token = Token.LBRACE;\n            return token;\n\n        case 0x7D:  /* '}' */\n            advance();\n            token = Token.RBRACE;\n            return token;\n\n        case 0x2E:  /* '.' */\n            if (index + 1 < length) {\n                ch = source.charCodeAt(index + 1);\n                if (ch === 0x3C  /* '<' */) {\n                    advance();  // '.'\n                    advance();  // '<'\n                    token = Token.DOT_LT;\n                    return token;\n                }\n\n                if (ch === 0x2E  /* '.' */ && index + 2 < length && source.charCodeAt(index + 2) === 0x2E  /* '.' */) {\n                    advance();  // '.'\n                    advance();  // '.'\n                    advance();  // '.'\n                    token = Token.REST;\n                    return token;\n                }\n\n                if (esutils.code.isDecimalDigit(ch)) {\n                    token = scanNumber();\n                    return token;\n                }\n            }\n            token = Token.ILLEGAL;\n            return token;\n\n        case 0x3C:  /* '<' */\n            advance();\n            token = Token.LT;\n            return token;\n\n        case 0x3E:  /* '>' */\n            advance();\n            token = Token.GT;\n            return token;\n\n        case 0x2A:  /* '*' */\n            advance();\n            token = Token.STAR;\n            return token;\n\n        case 0x7C:  /* '|' */\n            advance();\n            token = Token.PIPE;\n            return token;\n\n        case 0x3F:  /* '?' */\n            advance();\n            token = Token.QUESTION;\n            return token;\n\n        case 0x21:  /* '!' */\n            advance();\n            token = Token.BANG;\n            return token;\n\n        case 0x3D:  /* '=' */\n            advance();\n            token = Token.EQUAL;\n            return token;\n\n        case 0x2D: /* '-' */\n            token = scanNumber();\n            return token;\n\n        default:\n            if (esutils.code.isDecimalDigit(ch)) {\n                token = scanNumber();\n                return token;\n            }\n\n            // type string permits following case,\n            //\n            // namespace.module.MyClass\n            //\n            // this reduced 1 token TK_NAME\n            utility.assert(isTypeName(ch));\n            token = scanTypeName();\n            return token;\n        }\n    }\n\n    function consume(target, text) {\n        utility.assert(token === target, text || 'consumed token not matched');\n        next();\n    }\n\n    function expect(target, message) {\n        if (token !== target) {\n            utility.throwError(message || 'unexpected token');\n        }\n        next();\n    }\n\n    // UnionType := '(' TypeUnionList ')'\n    //\n    // TypeUnionList :=\n    //     <<empty>>\n    //   | NonemptyTypeUnionList\n    //\n    // NonemptyTypeUnionList :=\n    //     TypeExpression\n    //   | TypeExpression '|' NonemptyTypeUnionList\n    function parseUnionType() {\n        var elements, startIndex = index - 1;\n        consume(Token.LPAREN, 'UnionType should start with (');\n        elements = [];\n        if (token !== Token.RPAREN) {\n            while (true) {\n                elements.push(parseTypeExpression());\n                if (token === Token.RPAREN) {\n                    break;\n                }\n                expect(Token.PIPE);\n            }\n        }\n        consume(Token.RPAREN, 'UnionType should end with )');\n        return maybeAddRange({\n            type: Syntax.UnionType,\n            elements: elements\n        }, [startIndex, previous]);\n    }\n\n    // ArrayType := '[' ElementTypeList ']'\n    //\n    // ElementTypeList :=\n    //     <<empty>>\n    //  | TypeExpression\n    //  | '...' TypeExpression\n    //  | TypeExpression ',' ElementTypeList\n    function parseArrayType() {\n        var elements, startIndex = index - 1, restStartIndex;\n        consume(Token.LBRACK, 'ArrayType should start with [');\n        elements = [];\n        while (token !== Token.RBRACK) {\n            if (token === Token.REST) {\n                restStartIndex = index - 3;\n                consume(Token.REST);\n                elements.push(maybeAddRange({\n                    type: Syntax.RestType,\n                    expression: parseTypeExpression()\n                }, [restStartIndex, previous]));\n                break;\n            } else {\n                elements.push(parseTypeExpression());\n            }\n            if (token !== Token.RBRACK) {\n                expect(Token.COMMA);\n            }\n        }\n        expect(Token.RBRACK);\n        return maybeAddRange({\n            type: Syntax.ArrayType,\n            elements: elements\n        }, [startIndex, previous]);\n    }\n\n    function parseFieldName() {\n        var v = value;\n        if (token === Token.NAME || token === Token.STRING) {\n            next();\n            return v;\n        }\n\n        if (token === Token.NUMBER) {\n            consume(Token.NUMBER);\n            return String(v);\n        }\n\n        utility.throwError('unexpected token');\n    }\n\n    // FieldType :=\n    //     FieldName\n    //   | FieldName ':' TypeExpression\n    //\n    // FieldName :=\n    //     NameExpression\n    //   | StringLiteral\n    //   | NumberLiteral\n    //   | ReservedIdentifier\n    function parseFieldType() {\n        var key, rangeStart = previous;\n\n        key = parseFieldName();\n        if (token === Token.COLON) {\n            consume(Token.COLON);\n            return maybeAddRange({\n                type: Syntax.FieldType,\n                key: key,\n                value: parseTypeExpression()\n            }, [rangeStart, previous]);\n        }\n        return maybeAddRange({\n            type: Syntax.FieldType,\n            key: key,\n            value: null\n        }, [rangeStart, previous]);\n    }\n\n    // RecordType := '{' FieldTypeList '}'\n    //\n    // FieldTypeList :=\n    //     <<empty>>\n    //   | FieldType\n    //   | FieldType ',' FieldTypeList\n    function parseRecordType() {\n        var fields, rangeStart = index - 1, rangeEnd;\n\n        consume(Token.LBRACE, 'RecordType should start with {');\n        fields = [];\n        if (token === Token.COMMA) {\n            consume(Token.COMMA);\n        } else {\n            while (token !== Token.RBRACE) {\n                fields.push(parseFieldType());\n                if (token !== Token.RBRACE) {\n                    expect(Token.COMMA);\n                }\n            }\n        }\n        rangeEnd = index;\n        expect(Token.RBRACE);\n        return maybeAddRange({\n            type: Syntax.RecordType,\n            fields: fields\n        }, [rangeStart, rangeEnd]);\n    }\n\n    // NameExpression :=\n    //    Identifier\n    //  | TagIdentifier ':' Identifier\n    //\n    // Tag identifier is one of \"module\", \"external\" or \"event\"\n    // Identifier is the same as Token.NAME, including any dots, something like\n    // namespace.module.MyClass\n    function parseNameExpression() {\n        var name = value, rangeStart = index - name.length;\n        expect(Token.NAME);\n\n        if (token === Token.COLON && (\n                name === 'module' ||\n                name === 'external' ||\n                name === 'event')) {\n            consume(Token.COLON);\n            name += ':' + value;\n            expect(Token.NAME);\n        }\n\n        return maybeAddRange({\n            type: Syntax.NameExpression,\n            name: name\n        }, [rangeStart, previous]);\n    }\n\n    // TypeExpressionList :=\n    //     TopLevelTypeExpression\n    //   | TopLevelTypeExpression ',' TypeExpressionList\n    function parseTypeExpressionList() {\n        var elements = [];\n\n        elements.push(parseTop());\n        while (token === Token.COMMA) {\n            consume(Token.COMMA);\n            elements.push(parseTop());\n        }\n        return elements;\n    }\n\n    // TypeName :=\n    //     NameExpression\n    //   | NameExpression TypeApplication\n    //\n    // TypeApplication :=\n    //     '.<' TypeExpressionList '>'\n    //   | '<' TypeExpressionList '>'   // this is extension of doctrine\n    function parseTypeName() {\n        var expr, applications, startIndex = index - value.length;\n\n        expr = parseNameExpression();\n        if (token === Token.DOT_LT || token === Token.LT) {\n            next();\n            applications = parseTypeExpressionList();\n            expect(Token.GT);\n            return maybeAddRange({\n                type: Syntax.TypeApplication,\n                expression: expr,\n                applications: applications\n            }, [startIndex, previous]);\n        }\n        return expr;\n    }\n\n    // ResultType :=\n    //     <<empty>>\n    //   | ':' void\n    //   | ':' TypeExpression\n    //\n    // BNF is above\n    // but, we remove <<empty>> pattern, so token is always TypeToken::COLON\n    function parseResultType() {\n        consume(Token.COLON, 'ResultType should start with :');\n        if (token === Token.NAME && value === 'void') {\n            consume(Token.NAME);\n            return {\n                type: Syntax.VoidLiteral\n            };\n        }\n        return parseTypeExpression();\n    }\n\n    // ParametersType :=\n    //     RestParameterType\n    //   | NonRestParametersType\n    //   | NonRestParametersType ',' RestParameterType\n    //\n    // RestParameterType :=\n    //     '...'\n    //     '...' Identifier\n    //\n    // NonRestParametersType :=\n    //     ParameterType ',' NonRestParametersType\n    //   | ParameterType\n    //   | OptionalParametersType\n    //\n    // OptionalParametersType :=\n    //     OptionalParameterType\n    //   | OptionalParameterType, OptionalParametersType\n    //\n    // OptionalParameterType := ParameterType=\n    //\n    // ParameterType := TypeExpression | Identifier ':' TypeExpression\n    //\n    // Identifier is \"new\" or \"this\"\n    function parseParametersType() {\n        var params = [], optionalSequence = false, expr, rest = false, startIndex, restStartIndex = index - 3, nameStartIndex;\n\n        while (token !== Token.RPAREN) {\n            if (token === Token.REST) {\n                // RestParameterType\n                consume(Token.REST);\n                rest = true;\n            }\n\n            startIndex = previous;\n\n            expr = parseTypeExpression();\n            if (expr.type === Syntax.NameExpression && token === Token.COLON) {\n                nameStartIndex = previous - expr.name.length;\n                // Identifier ':' TypeExpression\n                consume(Token.COLON);\n                expr = maybeAddRange({\n                    type: Syntax.ParameterType,\n                    name: expr.name,\n                    expression: parseTypeExpression()\n                }, [nameStartIndex, previous]);\n            }\n            if (token === Token.EQUAL) {\n                consume(Token.EQUAL);\n                expr = maybeAddRange({\n                    type: Syntax.OptionalType,\n                    expression: expr\n                }, [startIndex, previous]);\n                optionalSequence = true;\n            } else {\n                if (optionalSequence) {\n                    utility.throwError('unexpected token');\n                }\n            }\n            if (rest) {\n                expr = maybeAddRange({\n                    type: Syntax.RestType,\n                    expression: expr\n                }, [restStartIndex, previous]);\n            }\n            params.push(expr);\n            if (token !== Token.RPAREN) {\n                expect(Token.COMMA);\n            }\n        }\n        return params;\n    }\n\n    // FunctionType := 'function' FunctionSignatureType\n    //\n    // FunctionSignatureType :=\n    //   | TypeParameters '(' ')' ResultType\n    //   | TypeParameters '(' ParametersType ')' ResultType\n    //   | TypeParameters '(' 'this' ':' TypeName ')' ResultType\n    //   | TypeParameters '(' 'this' ':' TypeName ',' ParametersType ')' ResultType\n    function parseFunctionType() {\n        var isNew, thisBinding, params, result, fnType, startIndex = index - value.length;\n        utility.assert(token === Token.NAME && value === 'function', 'FunctionType should start with \\'function\\'');\n        consume(Token.NAME);\n\n        // Google Closure Compiler is not implementing TypeParameters.\n        // So we do not. if we don't get '(', we see it as error.\n        expect(Token.LPAREN);\n\n        isNew = false;\n        params = [];\n        thisBinding = null;\n        if (token !== Token.RPAREN) {\n            // ParametersType or 'this'\n            if (token === Token.NAME &&\n                    (value === 'this' || value === 'new')) {\n                // 'this' or 'new'\n                // 'new' is Closure Compiler extension\n                isNew = value === 'new';\n                consume(Token.NAME);\n                expect(Token.COLON);\n                thisBinding = parseTypeName();\n                if (token === Token.COMMA) {\n                    consume(Token.COMMA);\n                    params = parseParametersType();\n                }\n            } else {\n                params = parseParametersType();\n            }\n        }\n\n        expect(Token.RPAREN);\n\n        result = null;\n        if (token === Token.COLON) {\n            result = parseResultType();\n        }\n\n        fnType = maybeAddRange({\n            type: Syntax.FunctionType,\n            params: params,\n            result: result\n        }, [startIndex, previous]);\n        if (thisBinding) {\n            // avoid adding null 'new' and 'this' properties\n            fnType['this'] = thisBinding;\n            if (isNew) {\n                fnType['new'] = true;\n            }\n        }\n        return fnType;\n    }\n\n    // BasicTypeExpression :=\n    //     '*'\n    //   | 'null'\n    //   | 'undefined'\n    //   | TypeName\n    //   | FunctionType\n    //   | UnionType\n    //   | RecordType\n    //   | ArrayType\n    function parseBasicTypeExpression() {\n        var context, startIndex;\n        switch (token) {\n        case Token.STAR:\n            consume(Token.STAR);\n            return maybeAddRange({\n                type: Syntax.AllLiteral\n            }, [previous - 1, previous]);\n\n        case Token.LPAREN:\n            return parseUnionType();\n\n        case Token.LBRACK:\n            return parseArrayType();\n\n        case Token.LBRACE:\n            return parseRecordType();\n\n        case Token.NAME:\n            startIndex = index - value.length;\n\n            if (value === 'null') {\n                consume(Token.NAME);\n                return maybeAddRange({\n                    type: Syntax.NullLiteral\n                }, [startIndex, previous]);\n            }\n\n            if (value === 'undefined') {\n                consume(Token.NAME);\n                return maybeAddRange({\n                    type: Syntax.UndefinedLiteral\n                }, [startIndex, previous]);\n            }\n\n            if (value === 'true' || value === 'false') {\n                consume(Token.NAME);\n                return maybeAddRange({\n                    type: Syntax.BooleanLiteralType,\n                    value: value === 'true'\n                }, [startIndex, previous]);\n            }\n\n            context = Context.save();\n            if (value === 'function') {\n                try {\n                    return parseFunctionType();\n                } catch (e) {\n                    context.restore();\n                }\n            }\n\n            return parseTypeName();\n\n        case Token.STRING:\n            next();\n            return maybeAddRange({\n                type: Syntax.StringLiteralType,\n                value: value\n            }, [previous - value.length - 2, previous]);\n\n        case Token.NUMBER:\n            next();\n            return maybeAddRange({\n                type: Syntax.NumericLiteralType,\n                value: value\n            }, [previous - String(value).length, previous]);\n\n        default:\n            utility.throwError('unexpected token');\n        }\n    }\n\n    // TypeExpression :=\n    //     BasicTypeExpression\n    //   | '?' BasicTypeExpression\n    //   | '!' BasicTypeExpression\n    //   | BasicTypeExpression '?'\n    //   | BasicTypeExpression '!'\n    //   | '?'\n    //   | BasicTypeExpression '[]'\n    function parseTypeExpression() {\n        var expr, rangeStart;\n\n        if (token === Token.QUESTION) {\n            rangeStart = index - 1;\n            consume(Token.QUESTION);\n            if (token === Token.COMMA || token === Token.EQUAL || token === Token.RBRACE ||\n                    token === Token.RPAREN || token === Token.PIPE || token === Token.EOF ||\n                    token === Token.RBRACK || token === Token.GT) {\n                return maybeAddRange({\n                    type: Syntax.NullableLiteral\n                }, [rangeStart, previous]);\n            }\n            return maybeAddRange({\n                type: Syntax.NullableType,\n                expression: parseBasicTypeExpression(),\n                prefix: true\n            }, [rangeStart, previous]);\n        } else if (token === Token.BANG) {\n            rangeStart = index - 1;\n            consume(Token.BANG);\n            return maybeAddRange({\n                type: Syntax.NonNullableType,\n                expression: parseBasicTypeExpression(),\n                prefix: true\n            }, [rangeStart, previous]);\n        } else {\n            rangeStart = previous;\n        }\n\n        expr = parseBasicTypeExpression();\n        if (token === Token.BANG) {\n            consume(Token.BANG);\n            return maybeAddRange({\n                type: Syntax.NonNullableType,\n                expression: expr,\n                prefix: false\n            }, [rangeStart, previous]);\n        }\n\n        if (token === Token.QUESTION) {\n            consume(Token.QUESTION);\n            return maybeAddRange({\n                type: Syntax.NullableType,\n                expression: expr,\n                prefix: false\n            }, [rangeStart, previous]);\n        }\n\n        if (token === Token.LBRACK) {\n            consume(Token.LBRACK);\n            expect(Token.RBRACK, 'expected an array-style type declaration (' + value + '[])');\n            return maybeAddRange({\n                type: Syntax.TypeApplication,\n                expression: maybeAddRange({\n                    type: Syntax.NameExpression,\n                    name: 'Array'\n                }, [rangeStart, previous]),\n                applications: [expr]\n            }, [rangeStart, previous]);\n        }\n\n        return expr;\n    }\n\n    // TopLevelTypeExpression :=\n    //      TypeExpression\n    //    | TypeUnionList\n    //\n    // This rule is Google Closure Compiler extension, not ES4\n    // like,\n    //   { number | string }\n    // If strict to ES4, we should write it as\n    //   { (number|string) }\n    function parseTop() {\n        var expr, elements;\n\n        expr = parseTypeExpression();\n        if (token !== Token.PIPE) {\n            return expr;\n        }\n\n        elements = [expr];\n        consume(Token.PIPE);\n        while (true) {\n            elements.push(parseTypeExpression());\n            if (token !== Token.PIPE) {\n                break;\n            }\n            consume(Token.PIPE);\n        }\n\n        return maybeAddRange({\n            type: Syntax.UnionType,\n            elements: elements\n        }, [0, index]);\n    }\n\n    function parseTopParamType() {\n        var expr;\n\n        if (token === Token.REST) {\n            consume(Token.REST);\n            return maybeAddRange({\n                type: Syntax.RestType,\n                expression: parseTop()\n            }, [0, index]);\n        }\n\n        expr = parseTop();\n        if (token === Token.EQUAL) {\n            consume(Token.EQUAL);\n            return maybeAddRange({\n                type: Syntax.OptionalType,\n                expression: expr\n            }, [0, index]);\n        }\n\n        return expr;\n    }\n\n    function parseType(src, opt) {\n        var expr;\n\n        source = src;\n        length = source.length;\n        index = 0;\n        previous = 0;\n        addRange = opt && opt.range;\n        rangeOffset = opt && opt.startIndex || 0;\n\n        next();\n        expr = parseTop();\n\n        if (opt && opt.midstream) {\n            return {\n                expression: expr,\n                index: previous\n            };\n        }\n\n        if (token !== Token.EOF) {\n            utility.throwError('not reach to EOF');\n        }\n\n        return expr;\n    }\n\n    function parseParamType(src, opt) {\n        var expr;\n\n        source = src;\n        length = source.length;\n        index = 0;\n        previous = 0;\n        addRange = opt && opt.range;\n        rangeOffset = opt && opt.startIndex || 0;\n\n        next();\n        expr = parseTopParamType();\n\n        if (opt && opt.midstream) {\n            return {\n                expression: expr,\n                index: previous\n            };\n        }\n\n        if (token !== Token.EOF) {\n            utility.throwError('not reach to EOF');\n        }\n\n        return expr;\n    }\n\n    function stringifyImpl(node, compact, topLevel) {\n        var result, i, iz;\n\n        switch (node.type) {\n        case Syntax.NullableLiteral:\n            result = '?';\n            break;\n\n        case Syntax.AllLiteral:\n            result = '*';\n            break;\n\n        case Syntax.NullLiteral:\n            result = 'null';\n            break;\n\n        case Syntax.UndefinedLiteral:\n            result = 'undefined';\n            break;\n\n        case Syntax.VoidLiteral:\n            result = 'void';\n            break;\n\n        case Syntax.UnionType:\n            if (!topLevel) {\n                result = '(';\n            } else {\n                result = '';\n            }\n\n            for (i = 0, iz = node.elements.length; i < iz; ++i) {\n                result += stringifyImpl(node.elements[i], compact);\n                if ((i + 1) !== iz) {\n                    result += compact ? '|' : ' | ';\n                }\n            }\n\n            if (!topLevel) {\n                result += ')';\n            }\n            break;\n\n        case Syntax.ArrayType:\n            result = '[';\n            for (i = 0, iz = node.elements.length; i < iz; ++i) {\n                result += stringifyImpl(node.elements[i], compact);\n                if ((i + 1) !== iz) {\n                    result += compact ? ',' : ', ';\n                }\n            }\n            result += ']';\n            break;\n\n        case Syntax.RecordType:\n            result = '{';\n            for (i = 0, iz = node.fields.length; i < iz; ++i) {\n                result += stringifyImpl(node.fields[i], compact);\n                if ((i + 1) !== iz) {\n                    result += compact ? ',' : ', ';\n                }\n            }\n            result += '}';\n            break;\n\n        case Syntax.FieldType:\n            if (node.value) {\n                result = node.key + (compact ? ':' : ': ') + stringifyImpl(node.value, compact);\n            } else {\n                result = node.key;\n            }\n            break;\n\n        case Syntax.FunctionType:\n            result = compact ? 'function(' : 'function (';\n\n            if (node['this']) {\n                if (node['new']) {\n                    result += (compact ? 'new:' : 'new: ');\n                } else {\n                    result += (compact ? 'this:' : 'this: ');\n                }\n\n                result += stringifyImpl(node['this'], compact);\n\n                if (node.params.length !== 0) {\n                    result += compact ? ',' : ', ';\n                }\n            }\n\n            for (i = 0, iz = node.params.length; i < iz; ++i) {\n                result += stringifyImpl(node.params[i], compact);\n                if ((i + 1) !== iz) {\n                    result += compact ? ',' : ', ';\n                }\n            }\n\n            result += ')';\n\n            if (node.result) {\n                result += (compact ? ':' : ': ') + stringifyImpl(node.result, compact);\n            }\n            break;\n\n        case Syntax.ParameterType:\n            result = node.name + (compact ? ':' : ': ') + stringifyImpl(node.expression, compact);\n            break;\n\n        case Syntax.RestType:\n            result = '...';\n            if (node.expression) {\n                result += stringifyImpl(node.expression, compact);\n            }\n            break;\n\n        case Syntax.NonNullableType:\n            if (node.prefix) {\n                result = '!' + stringifyImpl(node.expression, compact);\n            } else {\n                result = stringifyImpl(node.expression, compact) + '!';\n            }\n            break;\n\n        case Syntax.OptionalType:\n            result = stringifyImpl(node.expression, compact) + '=';\n            break;\n\n        case Syntax.NullableType:\n            if (node.prefix) {\n                result = '?' + stringifyImpl(node.expression, compact);\n            } else {\n                result = stringifyImpl(node.expression, compact) + '?';\n            }\n            break;\n\n        case Syntax.NameExpression:\n            result = node.name;\n            break;\n\n        case Syntax.TypeApplication:\n            result = stringifyImpl(node.expression, compact) + '.<';\n            for (i = 0, iz = node.applications.length; i < iz; ++i) {\n                result += stringifyImpl(node.applications[i], compact);\n                if ((i + 1) !== iz) {\n                    result += compact ? ',' : ', ';\n                }\n            }\n            result += '>';\n            break;\n\n        case Syntax.StringLiteralType:\n            result = '\"' + node.value + '\"';\n            break;\n\n        case Syntax.NumericLiteralType:\n            result = String(node.value);\n            break;\n\n        case Syntax.BooleanLiteralType:\n            result = String(node.value);\n            break;\n\n        default:\n            utility.throwError('Unknown type ' + node.type);\n        }\n\n        return result;\n    }\n\n    function stringify(node, options) {\n        if (options == null) {\n            options = {};\n        }\n        return stringifyImpl(node, options.compact, options.topLevel);\n    }\n\n    exports.parseType = parseType;\n    exports.parseParamType = parseParamType;\n    exports.stringify = stringify;\n    exports.Syntax = Syntax;\n}());\n/* vim: set sw=4 ts=4 et tw=80 : */\n/lib/doctrine.js~/*\n * @fileoverview Main Doctrine object\n * @author Yusuke Suzuki <utatane.tea@gmail.com>\n * @author Dan Tao <daniel.tao@gmail.com>\n * @author Andrew Eisenberg <andrew@eisenberg.as>\n */\n\n(function () {\n    'use strict';\n\n    var typed,\n        utility,\n        jsdoc,\n        esutils,\n        hasOwnProperty;\n\n    esutils = require('esutils');\n    typed = require('./typed');\n    utility = require('./utility');\n\n    function sliceSource(source, index, last) {\n        return source.slice(index, last);\n    }\n\n    hasOwnProperty = (function () {\n        var func = Object.prototype.hasOwnProperty;\n        return function hasOwnProperty(obj, name) {\n            return func.call(obj, name);\n        };\n    }());\n    function shallowCopy(obj) {\n        var ret = {}, key;\n        for (key in obj) {\n            if (obj.hasOwnProperty(key)) {\n                ret[key] = obj[key];\n            }\n        }\n        return ret;\n    }\n\n    function isASCIIAlphanumeric(ch) {\n        return (ch >= 0x61  /* 'a' */ && ch <= 0x7A  /* 'z' */) ||\n            (ch >= 0x41  /* 'A' */ && ch <= 0x5A  /* 'Z' */) ||\n            (ch >= 0x30  /* '0' */ && ch <= 0x39  /* '9' */);\n    }\n\n    function isParamTitle(title) {\n        return title === 'param' || title === 'argument' || title === 'arg';\n    }\n\n    function isReturnTitle(title) {\n        return title === 'return' || title === 'returns';\n    }\n\n    function isProperty(title) {\n        return title === 'property' || title === 'prop';\n    }\n\n    function isNameParameterRequired(title) {\n        return isParamTitle(title) || isProperty(title) ||\n            title === 'alias' || title === 'this' || title === 'mixes' || title === 'requires';\n    }\n\n    function isAllowedName(title) {\n        return isNameParameterRequired(title) || title === 'const' || title === 'constant';\n    }\n\n    function isAllowedNested(title) {\n        return isProperty(title) || isParamTitle(title);\n    }\n\n    function isAllowedOptional(title) {\n        return isProperty(title) || isParamTitle(title);\n    }\n\n    function isTypeParameterRequired(title) {\n        return isParamTitle(title) || isReturnTitle(title) ||\n            title === 'define' || title === 'enum' ||\n            title === 'implements' || title === 'this' ||\n            title === 'type' || title === 'typedef' || isProperty(title);\n    }\n\n    // Consider deprecation instead using 'isTypeParameterRequired' and 'Rules' declaration to pick when a type is optional/required\n    // This would require changes to 'parseType'\n    function isAllowedType(title) {\n        return isTypeParameterRequired(title) || title === 'throws' || title === 'const' || title === 'constant' ||\n            title === 'namespace' || title === 'member' || title === 'var' || title === 'module' ||\n            title === 'constructor' || title === 'class' || title === 'extends' || title === 'augments' ||\n            title === 'public' || title === 'private' || title === 'protected';\n    }\n\n    // A regex character class that contains all whitespace except linebreak characters (\\r, \\n, \\u2028, \\u2029)\n    var WHITESPACE = '[ \\\\f\\\\t\\\\v\\\\u00a0\\\\u1680\\\\u180e\\\\u2000-\\\\u200a\\\\u202f\\\\u205f\\\\u3000\\\\ufeff]';\n\n    var STAR_MATCHER = '(' + WHITESPACE + '*(?:\\\\*' + WHITESPACE + '?)?)(.+|[\\r\\n\\u2028\\u2029])';\n\n    function unwrapComment(doc) {\n        // JSDoc comment is following form\n        //   /**\n        //    * .......\n        //    */\n\n        return doc.\n            // remove /**\n            replace(/^\\/\\*\\*?/, '').\n            // remove */\n            replace(/\\*\\/$/, '').\n            // remove ' * ' at the beginning of a line\n            replace(new RegExp(STAR_MATCHER, 'g'), '$2').\n            // remove trailing whitespace\n            replace(/\\s*$/, '');\n    }\n\n    /**\n     * Converts an index in an \"unwrapped\" JSDoc comment to the corresponding index in the original \"wrapped\" version\n     * @param {string} originalSource The original wrapped comment\n     * @param {number} unwrappedIndex The index of a character in the unwrapped string\n     * @returns {number} The index of the corresponding character in the original wrapped string\n     */\n    function convertUnwrappedCommentIndex(originalSource, unwrappedIndex) {\n        var replacedSource = originalSource.replace(/^\\/\\*\\*?/, '');\n        var numSkippedChars = 0;\n        var matcher = new RegExp(STAR_MATCHER, 'g');\n        var match;\n\n        while ((match = matcher.exec(replacedSource))) {\n            numSkippedChars += match[1].length;\n\n            if (match.index + match[0].length > unwrappedIndex + numSkippedChars) {\n                return unwrappedIndex + numSkippedChars + originalSource.length - replacedSource.length;\n            }\n        }\n\n        return originalSource.replace(/\\*\\/$/, '').replace(/\\s*$/, '').length;\n    }\n\n    // JSDoc Tag Parser\n\n    (function (exports) {\n        var Rules,\n            index,\n            lineNumber,\n            length,\n            source,\n            originalSource,\n            recoverable,\n            sloppy,\n            strict;\n\n        function advance() {\n            var ch = source.charCodeAt(index);\n            index += 1;\n            if (esutils.code.isLineTerminator(ch) && !(ch === 0x0D  /* '\\r' */ && source.charCodeAt(index) === 0x0A  /* '\\n' */)) {\n                lineNumber += 1;\n            }\n            return String.fromCharCode(ch);\n        }\n\n        function scanTitle() {\n            var title = '';\n            // waste '@'\n            advance();\n\n            while (index < length && isASCIIAlphanumeric(source.charCodeAt(index))) {\n                title += advance();\n            }\n\n            return title;\n        }\n\n        function seekContent() {\n            var ch, waiting, last = index;\n\n            waiting = false;\n            while (last < length) {\n                ch = source.charCodeAt(last);\n                if (esutils.code.isLineTerminator(ch) && !(ch === 0x0D  /* '\\r' */ && source.charCodeAt(last + 1) === 0x0A  /* '\\n' */)) {\n                    waiting = true;\n                } else if (waiting) {\n                    if (ch === 0x40  /* '@' */) {\n                        break;\n                    }\n                    if (!esutils.code.isWhiteSpace(ch)) {\n                        waiting = false;\n                    }\n                }\n                last += 1;\n            }\n            return last;\n        }\n\n        // type expression may have nest brace, such as,\n        // { { ok: string } }\n        //\n        // therefore, scanning type expression with balancing braces.\n        function parseType(title, last, addRange) {\n            var ch, brace, type, startIndex, direct = false;\n\n\n            // search '{'\n            while (index < last) {\n                ch = source.charCodeAt(index);\n                if (esutils.code.isWhiteSpace(ch)) {\n                    advance();\n                } else if (ch === 0x7B  /* '{' */) {\n                    advance();\n                    break;\n                } else {\n                    // this is direct pattern\n                    direct = true;\n                    break;\n                }\n            }\n\n\n            if (direct) {\n                return null;\n            }\n\n            // type expression { is found\n            brace = 1;\n            type = '';\n            while (index < last) {\n                ch = source.charCodeAt(index);\n                if (esutils.code.isLineTerminator(ch)) {\n                    advance();\n                } else {\n                    if (ch === 0x7D  /* '}' */) {\n                        brace -= 1;\n                        if (brace === 0) {\n                            advance();\n                            break;\n                        }\n                    } else if (ch === 0x7B  /* '{' */) {\n                        brace += 1;\n                    }\n                    if (type === '') {\n                        startIndex = index;\n                    }\n                    type += advance();\n                }\n            }\n\n            if (brace !== 0) {\n                // braces is not balanced\n                return utility.throwError('Braces are not balanced');\n            }\n\n            if (isAllowedOptional(title)) {\n                return typed.parseParamType(type, {startIndex: convertIndex(startIndex), range: addRange});\n            }\n\n            return typed.parseType(type, {startIndex: convertIndex(startIndex), range: addRange});\n        }\n\n        function scanIdentifier(last) {\n            var identifier;\n            if (!esutils.code.isIdentifierStartES5(source.charCodeAt(index)) && !source[index].match(/[0-9]/)) {\n                return null;\n            }\n            identifier = advance();\n            while (index < last && esutils.code.isIdentifierPartES5(source.charCodeAt(index))) {\n                identifier += advance();\n            }\n            return identifier;\n        }\n\n        function skipWhiteSpace(last) {\n            while (index < last && (esutils.code.isWhiteSpace(source.charCodeAt(index)) || esutils.code.isLineTerminator(source.charCodeAt(index)))) {\n                advance();\n            }\n        }\n\n        function parseName(last, allowBrackets, allowNestedParams) {\n            var name = '',\n                useBrackets,\n                insideString;\n\n\n            skipWhiteSpace(last);\n\n            if (index >= last) {\n                return null;\n            }\n\n            if (source.charCodeAt(index) === 0x5B  /* '[' */) {\n                if (allowBrackets) {\n                    useBrackets = true;\n                    name = advance();\n                } else {\n                    return null;\n                }\n            }\n\n            name += scanIdentifier(last);\n\n            if (allowNestedParams) {\n                if (source.charCodeAt(index) === 0x3A /* ':' */ && (\n                        name === 'module' ||\n                        name === 'external' ||\n                        name === 'event')) {\n                    name += advance();\n                    name += scanIdentifier(last);\n\n                }\n                if(source.charCodeAt(index) === 0x5B  /* '[' */ && source.charCodeAt(index + 1) === 0x5D  /* ']' */){\n                    name += advance();\n                    name += advance();\n                }\n                while (source.charCodeAt(index) === 0x2E  /* '.' */ ||\n                        source.charCodeAt(index) === 0x2F  /* '/' */ ||\n                        source.charCodeAt(index) === 0x23  /* '#' */ ||\n                        source.charCodeAt(index) === 0x2D  /* '-' */ ||\n                        source.charCodeAt(index) === 0x7E  /* '~' */) {\n                    name += advance();\n                    name += scanIdentifier(last);\n                }\n            }\n\n            if (useBrackets) {\n                skipWhiteSpace(last);\n                // do we have a default value for this?\n                if (source.charCodeAt(index) === 0x3D  /* '=' */) {\n                    // consume the '='' symbol\n                    name += advance();\n                    skipWhiteSpace(last);\n\n                    var ch;\n                    var bracketDepth = 1;\n\n                    // scan in the default value\n                    while (index < last) {\n                        ch = source.charCodeAt(index);\n\n                        if (esutils.code.isWhiteSpace(ch)) {\n                            if (!insideString) {\n                                skipWhiteSpace(last);\n                                ch = source.charCodeAt(index);\n                            }\n                        }\n\n                        if (ch === 0x27 /* ''' */) {\n                            if (!insideString) {\n                                insideString = '\\'';\n                            } else {\n                                if (insideString === '\\'') {\n                                    insideString = '';\n                                }\n                            }\n                        }\n\n                        if (ch === 0x22 /* '\"' */) {\n                            if (!insideString) {\n                                insideString = '\"';\n                            } else {\n                                if (insideString === '\"') {\n                                    insideString = '';\n                                }\n                            }\n                        }\n\n                        if (ch === 0x5B /* '[' */) {\n                            bracketDepth++;\n                        } else if (ch === 0x5D  /* ']' */ &&\n                            --bracketDepth === 0) {\n                            break;\n                        }\n\n                        name += advance();\n                    }\n                }\n\n                skipWhiteSpace(last);\n\n                if (index >= last || source.charCodeAt(index) !== 0x5D  /* ']' */) {\n                    // we never found a closing ']'\n                    return null;\n                }\n\n                // collect the last ']'\n                name += advance();\n            }\n\n            return name;\n        }\n\n        function skipToTag() {\n            while (index < length && source.charCodeAt(index) !== 0x40  /* '@' */) {\n                advance();\n            }\n            if (index >= length) {\n                return false;\n            }\n            utility.assert(source.charCodeAt(index) === 0x40  /* '@' */);\n            return true;\n        }\n\n        function convertIndex(rangeIndex) {\n            if (source === originalSource) {\n                return rangeIndex;\n            }\n            return convertUnwrappedCommentIndex(originalSource, rangeIndex);\n        }\n\n        function TagParser(options, title) {\n            this._options = options;\n            this._title = title.toLowerCase();\n            this._tag = {\n                title: title,\n                description: null\n            };\n            if (this._options.lineNumbers) {\n                this._tag.lineNumber = lineNumber;\n            }\n            this._first = index - title.length - 1;\n            this._last = 0;\n            // space to save special information for title parsers.\n            this._extra = { };\n        }\n\n        // addError(err, ...)\n        TagParser.prototype.addError = function addError(errorText) {\n            var args = Array.prototype.slice.call(arguments, 1),\n                msg = errorText.replace(\n                    /%(\\d)/g,\n                    function (whole, index) {\n                        utility.assert(index < args.length, 'Message reference must be in range');\n                        return args[index];\n                    }\n                );\n\n            if (!this._tag.errors) {\n                this._tag.errors = [];\n            }\n            if (strict) {\n                utility.throwError(msg);\n            }\n            this._tag.errors.push(msg);\n            return recoverable;\n        };\n\n        TagParser.prototype.parseType = function () {\n            // type required titles\n            if (isTypeParameterRequired(this._title)) {\n                try {\n                    this._tag.type = parseType(this._title, this._last, this._options.range);\n                    if (!this._tag.type) {\n                        if (!isParamTitle(this._title) && !isReturnTitle(this._title)) {\n                            if (!this.addError('Missing or invalid tag type')) {\n                                return false;\n                            }\n                        }\n                    }\n                } catch (error) {\n                    this._tag.type = null;\n                    if (!this.addError(error.message)) {\n                        return false;\n                    }\n                }\n            } else if (isAllowedType(this._title)) {\n                // optional types\n                try {\n                    this._tag.type = parseType(this._title, this._last, this._options.range);\n                } catch (e) {\n                    //For optional types, lets drop the thrown error when we hit the end of the file\n                }\n            }\n            return true;\n        };\n\n        TagParser.prototype._parseNamePath = function (optional) {\n            var name;\n            name = parseName(this._last, sloppy && isAllowedOptional(this._title), true);\n            if (!name) {\n                if (!optional) {\n                    if (!this.addError('Missing or invalid tag name')) {\n                        return false;\n                    }\n                }\n            }\n            this._tag.name = name;\n            return true;\n        };\n\n        TagParser.prototype.parseNamePath = function () {\n            return this._parseNamePath(false);\n        };\n\n        TagParser.prototype.parseNamePathOptional = function () {\n            return this._parseNamePath(true);\n        };\n\n\n        TagParser.prototype.parseName = function () {\n            var assign, name;\n\n            // param, property requires name\n            if (isAllowedName(this._title)) {\n                this._tag.name = parseName(this._last, sloppy && isAllowedOptional(this._title), isAllowedNested(this._title));\n                if (!this._tag.name) {\n                    if (!isNameParameterRequired(this._title)) {\n                        return true;\n                    }\n\n                    // it's possible the name has already been parsed but interpreted as a type\n                    // it's also possible this is a sloppy declaration, in which case it will be\n                    // fixed at the end\n                    if (isParamTitle(this._title) && this._tag.type && this._tag.type.name) {\n                        this._extra.name = this._tag.type;\n                        this._tag.name = this._tag.type.name;\n                        this._tag.type = null;\n                    } else {\n                        if (!this.addError('Missing or invalid tag name')) {\n                            return false;\n                        }\n                    }\n                } else {\n                    name = this._tag.name;\n                    if (name.charAt(0) === '[' && name.charAt(name.length - 1) === ']') {\n                        // extract the default value if there is one\n                        // example: @param {string} [somebody=John Doe] description\n                        assign = name.substring(1, name.length - 1).split('=');\n                        if (assign.length > 1) {\n                            this._tag['default'] = assign.slice(1).join('=');\n                        }\n                        this._tag.name = assign[0];\n\n                        // convert to an optional type\n                        if (this._tag.type && this._tag.type.type !== 'OptionalType') {\n                            this._tag.type = {\n                                type: 'OptionalType',\n                                expression: this._tag.type\n                            };\n                        }\n                    }\n                }\n            }\n\n\n            return true;\n        };\n\n        TagParser.prototype.parseDescription = function parseDescription() {\n            var description = sliceSource(source, index, this._last).trim();\n            if (description) {\n                if ((/^-\\s+/).test(description)) {\n                    description = description.substring(2);\n                }\n                this._tag.description = description;\n            }\n            return true;\n        };\n\n        TagParser.prototype.parseCaption = function parseDescription() {\n            var description = sliceSource(source, index, this._last).trim();\n            var captionStartTag = '<caption>';\n            var captionEndTag = '</caption>';\n            var captionStart = description.indexOf(captionStartTag);\n            var captionEnd = description.indexOf(captionEndTag);\n            if (captionStart >= 0 && captionEnd >= 0) {\n                this._tag.caption = description.substring(\n                    captionStart + captionStartTag.length, captionEnd).trim();\n                this._tag.description = description.substring(captionEnd + captionEndTag.length).trim();\n            } else {\n                this._tag.description = description;\n            }\n            return true;\n        };\n\n        TagParser.prototype.parseKind = function parseKind() {\n            var kind, kinds;\n            kinds = {\n                'class': true,\n                'constant': true,\n                'event': true,\n                'external': true,\n                'file': true,\n                'function': true,\n                'member': true,\n                'mixin': true,\n                'module': true,\n                'namespace': true,\n                'typedef': true\n            };\n            kind = sliceSource(source, index, this._last).trim();\n            this._tag.kind = kind;\n            if (!hasOwnProperty(kinds, kind)) {\n                if (!this.addError('Invalid kind name \\'%0\\'', kind)) {\n                    return false;\n                }\n            }\n            return true;\n        };\n\n        TagParser.prototype.parseAccess = function parseAccess() {\n            var access;\n            access = sliceSource(source, index, this._last).trim();\n            this._tag.access = access;\n            if (access !== 'private' && access !== 'protected' && access !== 'public') {\n                if (!this.addError('Invalid access name \\'%0\\'', access)) {\n                    return false;\n                }\n            }\n            return true;\n        };\n\n        TagParser.prototype.parseThis = function parseThis() {\n            // this name may be a name expression (e.g. {foo.bar}),\n            // an union (e.g. {foo.bar|foo.baz}) or a name path (e.g. foo.bar)\n            var value = sliceSource(source, index, this._last).trim();\n            if (value && value.charAt(0) === '{') {\n                var gotType = this.parseType();\n                if (gotType && this._tag.type.type === 'NameExpression' || this._tag.type.type === 'UnionType') {\n                    this._tag.name = this._tag.type.name;\n                    return true;\n                } else {\n                    return this.addError('Invalid name for this');\n                }\n            } else {\n                return this.parseNamePath();\n            }\n        };\n\n        TagParser.prototype.parseVariation = function parseVariation() {\n            var variation, text;\n            text = sliceSource(source, index, this._last).trim();\n            variation = parseFloat(text, 10);\n            this._tag.variation = variation;\n            if (isNaN(variation)) {\n                if (!this.addError('Invalid variation \\'%0\\'', text)) {\n                    return false;\n                }\n            }\n            return true;\n        };\n\n        TagParser.prototype.ensureEnd = function () {\n            var shouldBeEmpty = sliceSource(source, index, this._last).trim();\n            if (shouldBeEmpty) {\n                if (!this.addError('Unknown content \\'%0\\'', shouldBeEmpty)) {\n                    return false;\n                }\n            }\n            return true;\n        };\n\n        TagParser.prototype.epilogue = function epilogue() {\n            var description;\n\n            description = this._tag.description;\n            // un-fix potentially sloppy declaration\n            if (isAllowedOptional(this._title) && !this._tag.type && description && description.charAt(0) === '[') {\n                this._tag.type = this._extra.name;\n                if (!this._tag.name) {\n                    this._tag.name = undefined;\n                }\n\n                if (!sloppy) {\n                    if (!this.addError('Missing or invalid tag name')) {\n                        return false;\n                    }\n                }\n            }\n\n            return true;\n        };\n\n        Rules = {\n            // http://usejsdoc.org/tags-access.html\n            'access': ['parseAccess'],\n            // http://usejsdoc.org/tags-alias.html\n            'alias': ['parseNamePath', 'ensureEnd'],\n            // http://usejsdoc.org/tags-augments.html\n            'augments': ['parseType', 'parseNamePathOptional', 'ensureEnd'],\n            // http://usejsdoc.org/tags-constructor.html\n            'constructor': ['parseType', 'parseNamePathOptional', 'ensureEnd'],\n            // Synonym: http://usejsdoc.org/tags-constructor.html\n            'class': ['parseType', 'parseNamePathOptional', 'ensureEnd'],\n            // Synonym: http://usejsdoc.org/tags-extends.html\n            'extends': ['parseType', 'parseNamePathOptional', 'ensureEnd'],\n            // http://usejsdoc.org/tags-example.html\n            'example': ['parseCaption'],\n            // http://usejsdoc.org/tags-deprecated.html\n            'deprecated': ['parseDescription'],\n            // http://usejsdoc.org/tags-global.html\n            'global': ['ensureEnd'],\n            // http://usejsdoc.org/tags-inner.html\n            'inner': ['ensureEnd'],\n            // http://usejsdoc.org/tags-instance.html\n            'instance': ['ensureEnd'],\n            // http://usejsdoc.org/tags-kind.html\n            'kind': ['parseKind'],\n            // http://usejsdoc.org/tags-mixes.html\n            'mixes': ['parseNamePath', 'ensureEnd'],\n            // http://usejsdoc.org/tags-mixin.html\n            'mixin': ['parseNamePathOptional', 'ensureEnd'],\n            // http://usejsdoc.org/tags-member.html\n            'member': ['parseType', 'parseNamePathOptional', 'ensureEnd'],\n            // http://usejsdoc.org/tags-method.html\n            'method': ['parseNamePathOptional', 'ensureEnd'],\n            // http://usejsdoc.org/tags-module.html\n            'module': ['parseType', 'parseNamePathOptional', 'ensureEnd'],\n            // Synonym: http://usejsdoc.org/tags-method.html\n            'func': ['parseNamePathOptional', 'ensureEnd'],\n            // Synonym: http://usejsdoc.org/tags-method.html\n            'function': ['parseNamePathOptional', 'ensureEnd'],\n            // Synonym: http://usejsdoc.org/tags-member.html\n            'var': ['parseType', 'parseNamePathOptional', 'ensureEnd'],\n            // http://usejsdoc.org/tags-name.html\n            'name': ['parseNamePath', 'ensureEnd'],\n            // http://usejsdoc.org/tags-namespace.html\n            'namespace': ['parseType', 'parseNamePathOptional', 'ensureEnd'],\n            // http://usejsdoc.org/tags-private.html\n            'private': ['parseType', 'parseDescription'],\n            // http://usejsdoc.org/tags-protected.html\n            'protected': ['parseType', 'parseDescription'],\n            // http://usejsdoc.org/tags-public.html\n            'public': ['parseType', 'parseDescription'],\n            // http://usejsdoc.org/tags-readonly.html\n            'readonly': ['ensureEnd'],\n            // http://usejsdoc.org/tags-requires.html\n            'requires': ['parseNamePath', 'ensureEnd'],\n            // http://usejsdoc.org/tags-since.html\n            'since': ['parseDescription'],\n            // http://usejsdoc.org/tags-static.html\n            'static': ['ensureEnd'],\n            // http://usejsdoc.org/tags-summary.html\n            'summary': ['parseDescription'],\n            // http://usejsdoc.org/tags-this.html\n            'this': ['parseThis', 'ensureEnd'],\n            // http://usejsdoc.org/tags-todo.html\n            'todo': ['parseDescription'],\n            // http://usejsdoc.org/tags-typedef.html\n            'typedef': ['parseType', 'parseNamePathOptional'],\n            // http://usejsdoc.org/tags-variation.html\n            'variation': ['parseVariation'],\n            // http://usejsdoc.org/tags-version.html\n            'version': ['parseDescription']\n        };\n\n        TagParser.prototype.parse = function parse() {\n            var i, iz, sequences, method;\n\n\n            // empty title\n            if (!this._title) {\n                if (!this.addError('Missing or invalid title')) {\n                    return null;\n                }\n            }\n\n            // Seek to content last index.\n            this._last = seekContent(this._title);\n\n            if (this._options.range) {\n                this._tag.range = [this._first, source.slice(0, this._last).replace(/\\s*$/, '').length].map(convertIndex);\n            }\n\n            if (hasOwnProperty(Rules, this._title)) {\n                sequences = Rules[this._title];\n            } else {\n                // default sequences\n                sequences = ['parseType', 'parseName', 'parseDescription', 'epilogue'];\n            }\n\n            for (i = 0, iz = sequences.length; i < iz; ++i) {\n                method = sequences[i];\n                if (!this[method]()) {\n                    return null;\n                }\n            }\n\n            return this._tag;\n        };\n\n        function parseTag(options) {\n            var title, parser, tag;\n\n            // skip to tag\n            if (!skipToTag()) {\n                return null;\n            }\n\n            // scan title\n            title = scanTitle();\n\n            // construct tag parser\n            parser = new TagParser(options, title);\n            tag = parser.parse();\n\n            // Seek global index to end of this tag.\n            while (index < parser._last) {\n                advance();\n            }\n\n            return tag;\n        }\n\n        //\n        // Parse JSDoc\n        //\n\n        function scanJSDocDescription(preserveWhitespace) {\n            var description = '', ch, atAllowed;\n\n            atAllowed = true;\n            while (index < length) {\n                ch = source.charCodeAt(index);\n\n                if (atAllowed && ch === 0x40  /* '@' */) {\n                    break;\n                }\n\n                if (esutils.code.isLineTerminator(ch)) {\n                    atAllowed = true;\n                } else if (atAllowed && !esutils.code.isWhiteSpace(ch)) {\n                    atAllowed = false;\n                }\n\n                description += advance();\n            }\n\n            return preserveWhitespace ? description : description.trim();\n        }\n\n        function parse(comment, options) {\n            var tags = [], tag, description, interestingTags, i, iz;\n\n            if (options === undefined) {\n                options = {};\n            }\n\n            if (typeof options.unwrap === 'boolean' && options.unwrap) {\n                source = unwrapComment(comment);\n            } else {\n                source = comment;\n            }\n\n            originalSource = comment;\n\n            // array of relevant tags\n            if (options.tags) {\n                if (Array.isArray(options.tags)) {\n                    interestingTags = { };\n                    for (i = 0, iz = options.tags.length; i < iz; i++) {\n                        if (typeof options.tags[i] === 'string') {\n                            interestingTags[options.tags[i]] = true;\n                        } else {\n                            utility.throwError('Invalid \"tags\" parameter: ' + options.tags);\n                        }\n                    }\n                } else {\n                    utility.throwError('Invalid \"tags\" parameter: ' + options.tags);\n                }\n            }\n\n            length = source.length;\n            index = 0;\n            lineNumber = 0;\n            recoverable = options.recoverable;\n            sloppy = options.sloppy;\n            strict = options.strict;\n\n            description = scanJSDocDescription(options.preserveWhitespace);\n\n            while (true) {\n                tag = parseTag(options);\n                if (!tag) {\n                    break;\n                }\n                if (!interestingTags || interestingTags.hasOwnProperty(tag.title)) {\n                    tags.push(tag);\n                }\n            }\n\n            return {\n                description: description,\n                tags: tags\n            };\n        }\n        exports.parse = parse;\n    }(jsdoc = {}));\n\n    exports.version = utility.VERSION;\n    exports.parse = jsdoc.parse;\n    exports.parseType = typed.parseType;\n    exports.parseParamType = typed.parseParamType;\n    exports.unwrapComment = unwrapComment;\n    exports.Syntax = shallowCopy(typed.Syntax);\n    exports.Error = utility.DoctrineError;\n    exports.type = {\n        Syntax: exports.Syntax,\n        parseType: typed.parseType,\n        parseParamType: typed.parseParamType,\n        stringify: typed.stringify\n    };\n}());\n/* vim: set sw=4 ts=4 et tw=80 : */\n/LICENSE.esprima\u0004Redistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n  * Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in the\n    documentation and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\nDIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\nON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\nTHIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n/CHANGELOG.md\u0010v3.0.0 - November 9, 2018\n\n* 0b5a8c7 Breaking: drop support for Node < 6 (#223) (Kai Cataldo)\n* a05e9f2 Upgrade: eslint-release@1.0.0 (#220) (Teddy Katz)\n* 36ed027 Chore: upgrade coveralls to ^3.0.1 (#213) (Teddy Katz)\n* 8667e34 Upgrade: eslint-release@^0.11.1 (#210) (Kevin Partington)\n\nv2.1.0 - January 6, 2018\n\n* 827f314 Update: support node ranges (fixes #89) (#190) (Teddy Katz)\n\nv2.0.2 - November 25, 2017\n\n* 5049ee3 Fix: Remove redundant LICENSE/README names from files (#203) (Kevin Partington)\n\nv2.0.1 - November 10, 2017\n\n* 009f33d Fix: Making sure union type stringification respects compact flag (#199) (Mitermayer Reis)\n* 19da935 Use native String.prototype.trim instead of a custom implementation. (#201) (Rouven Weßling)\n* e3a011b chore: add mocha.opts to restore custom mocha config (Jason Kurian)\n* d888200 chore: adds nyc and a newer version of mocha to accurately report coverage (Jason Kurian)\n* 6b210a8 fix: support type expression for @this tag (fixes #181) (#182) (Frédéric Junod)\n* 1c4a4c7 fix: Allow array indexes in names (#193) (Tom MacWright)\n* 9aed54d Fix incorrect behavior when arrow functions are used as default values (#189) (Gaurab Paul)\n* 9efb6ca Upgrade: Use Array.isArray instead of isarray package (#195) (medanat)\n\nv2.0.0 - November 15, 2016\n\n* 7d7c5f1 Breaking: Re-license to Apache 2 (fixes #176) (#178) (Nicholas C. Zakas)\n* 5496132 Docs: Update license copyright (Nicholas C. Zakas)\n\nv1.5.0 - October 13, 2016\n\n* e33c6bb Update: Add support for BooleanLiteralType (#173) (Erik Arvidsson)\n\nv1.4.0 - September 13, 2016\n\n* d7426e5 Update: add ability to parse optional properties in typedefs (refs #5) (#174) (ikokostya)\n\nv1.3.0 - August 22, 2016\n\n* 12c7ad9 Update: Add support for numeric and string literal types (fixes #156) (#172) (Andrew Walter)\n\nv1.2.3 - August 16, 2016\n\n* b96a884 Build: Add CI release script (Nicholas C. Zakas)\n* 8d9b3c7 Upgrade: Upgrade esutils to v2.0.2 (fixes #170) (#171) (Emeegeemee)\n\nv1.2.2 - May 19, 2016\n\n* ebe0b08 Fix: Support case insensitive tags (fixes #163) (#164) (alberto)\n* 8e6d81e Chore: Remove copyright and license from headers (Nicholas C. Zakas)\n* 79035c6 Chore: Include jQuery Foundation copyright (Nicholas C. Zakas)\n* 06910a7 Fix: Preserve whitespace in default param string values (fixes #157) (Kai Cataldo)\n\nv1.2.1 - March 29, 2016\n\n* 1f54014 Fix: allow hyphens in names (fixes #116) (Kai Cataldo)\n* bbee469 Docs: Add issue template (Nicholas C. Zakas)\n\nv1.2.0 - February 19, 2016\n\n* 18136c5 Build: Cleanup build system (Nicholas C. Zakas)\n* b082f85 Update: Add support for slash in namepaths (fixes #100) (Ryan Duffy)\n* def53a2 Docs: Fix typo in option lineNumbers (Daniel Tschinder)\n* e2cbbc5 Update: Bump isarray to v1.0.0 (Shinnosuke Watanabe)\n* ae07aa8 Fix: Allow whitespace in optional param with default value (fixes #141) (chris)\n\nv1.1.0 - January 6, 2016\n\n* Build: Switch to Makefile.js (Nicholas C. Zakas)\n* New: support name expression for @this tag (fixes #143) (Tim Schaub)\n* Build: Update ESLint settings (Nicholas C. Zakas)\n\nv1.0.0 - December 21, 2015\n\n* New: parse caption tags in examples into separate property. (fixes #131) (Tom MacWright)\n\nv0.7.2 - November 27, 2015\n\n* Fix: Line numbers for some tags (fixes #138) Fixing issue where input was not consumed via advance() but was skipped when parsing tags resulting in sometimes incorrect reported lineNumber. (TEHEK)\n* Build: Add missing linefix package (Nicholas C. Zakas)\n\nv0.7.1 - November 13, 2015\n\n* Update: Begin switch to Makefile.js (Nicholas C. Zakas)\n* Fix: permit return tag without type (fixes #136) (Tom MacWright)\n* Fix: package.json homepage field (Bogdan Chadkin)\n* Fix: Parse array default syntax. Fixes #133 (Tom MacWright)\n* Fix: Last tag always has \\n in the description (fixes #87) (Burak Yigit Kaya)\n* Docs: Add changelog (Nicholas C. Zakas)\n\nv0.7.0 - September 21, 2015\n\n* Docs: Update README with new info (fixes #127) (Nicholas C. Zakas)\n* Fix: Parsing fix for param with arrays and properties (fixes #111) (Gyandeep Singh)\n* Build: Add travis build (fixes #123) (Gyandeep Singh)\n* Fix: Parsing of parameter name without a type (fixes #120) (Gyandeep Singh)\n* New: added preserveWhitespace option (Aleks Totic)\n* New: Add \"files\" entry to only deploy select files (Rob Loach)\n* New: Add support and tests for typedefs. Refs #5 (Tom MacWright)\n/README.md\u0019[![NPM version][npm-image]][npm-url]\n[![build status][travis-image]][travis-url]\n[![Test coverage][coveralls-image]][coveralls-url]\n[![Downloads][downloads-image]][downloads-url]\n[![Join the chat at https://gitter.im/eslint/doctrine](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/eslint/doctrine?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)\n\n# Doctrine\n\nDoctrine is a [JSDoc](http://usejsdoc.org) parser that parses documentation comments from JavaScript (you need to pass in the comment, not a whole JavaScript file).\n\n## Installation\n\nYou can install Doctrine using [npm](https://npmjs.com):\n\n```\n$ npm install doctrine --save-dev\n```\n\nDoctrine can also be used in web browsers using [Browserify](http://browserify.org).\n\n## Usage\n\nRequire doctrine inside of your JavaScript:\n\n```js\nvar doctrine = require(\"doctrine\");\n```\n\n### parse()\n\nThe primary method is `parse()`, which accepts two arguments: the JSDoc comment to parse and an optional options object. The available options are:\n\n* `unwrap` - set to `true` to delete the leading `/**`, any `*` that begins a line, and the trailing `*/` from the source text. Default: `false`.\n* `tags` - an array of tags to return. When specified, Doctrine returns only tags in this array. For example, if `tags` is `[\"param\"]`, then only `@param` tags will be returned. Default: `null`.\n* `recoverable` - set to `true` to keep parsing even when syntax errors occur. Default: `false`.\n* `sloppy` - set to `true` to allow optional parameters to be specified in brackets (`@param {string} [foo]`). Default: `false`.\n* `lineNumbers` - set to `true` to add `lineNumber` to each node, specifying the line on which the node is found in the source. Default: `false`.\n* `range` - set to `true` to add `range` to each node, specifying the start and end index of the node in the original comment. Default: `false`.\n\nHere's a simple example:\n\n```js\nvar ast = doctrine.parse(\n    [\n        \"/**\",\n        \" * This function comment is parsed by doctrine\",\n        \" * @param {{ok:String}} userName\",\n        \"*/\"\n    ].join('\\n'), { unwrap: true });\n```\n\nThis example returns the following AST:\n\n    {\n        \"description\": \"This function comment is parsed by doctrine\",\n        \"tags\": [\n            {\n                \"title\": \"param\",\n                \"description\": null,\n                \"type\": {\n                    \"type\": \"RecordType\",\n                    \"fields\": [\n                        {\n                            \"type\": \"FieldType\",\n                            \"key\": \"ok\",\n                            \"value\": {\n                                \"type\": \"NameExpression\",\n                                \"name\": \"String\"\n                            }\n                        }\n                    ]\n                },\n                \"name\": \"userName\"\n            }\n        ]\n    }\n\nSee the [demo page](http://eslint.org/doctrine/demo/) more detail.\n\n## Team\n\nThese folks keep the project moving and are resources for help:\n\n* Nicholas C. Zakas ([@nzakas](https://github.com/nzakas)) - project lead\n* Yusuke Suzuki ([@constellation](https://github.com/constellation)) - reviewer\n\n## Contributing\n\nIssues and pull requests will be triaged and responded to as quickly as possible. We operate under the [ESLint Contributor Guidelines](http://eslint.org/docs/developer-guide/contributing), so please be sure to read them before contributing. If you're not sure where to dig in, check out the [issues](https://github.com/eslint/doctrine/issues).\n\n## Frequently Asked Questions\n\n### Can I pass a whole JavaScript file to Doctrine?\n\nNo. Doctrine can only parse JSDoc comments, so you'll need to pass just the JSDoc comment to Doctrine in order to work.\n\n\n### License\n\n#### doctrine\n\nCopyright JS Foundation and other contributors, https://js.foundation\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n\n#### esprima\n\nsome of functions is derived from esprima\n\nCopyright (C) 2012, 2011 [Ariya Hidayat](http://ariya.ofilabs.com/about)\n (twitter: [@ariyahidayat](http://twitter.com/ariyahidayat)) and other contributors.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n  * Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in the\n    documentation and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\nDIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\nON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\nTHIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n\n#### closure-compiler\n\nsome of extensions is derived from closure-compiler\n\nApache License\nVersion 2.0, January 2004\nhttp://www.apache.org/licenses/\n\n\n### Where to ask for help?\n\nJoin our [Chatroom](https://gitter.im/eslint/doctrine)\n\n[npm-image]: https://img.shields.io/npm/v/doctrine.svg?style=flat-square\n[npm-url]: https://www.npmjs.com/package/doctrine\n[travis-image]: https://img.shields.io/travis/eslint/doctrine/master.svg?style=flat-square\n[travis-url]: https://travis-ci.org/eslint/doctrine\n[coveralls-image]: https://img.shields.io/coveralls/eslint/doctrine/master.svg?style=flat-square\n[coveralls-url]: https://coveralls.io/r/eslint/doctrine?branch=master\n[downloads-image]: http://img.shields.io/npm/dm/doctrine.svg?style=flat-square\n[downloads-url]: https://www.npmjs.com/package/doctrine\n/lib/utility.js\u00030/*\n * @fileoverview Utilities for Doctrine\n * @author Yusuke Suzuki <utatane.tea@gmail.com>\n */\n\n\n(function () {\n    'use strict';\n\n    var VERSION;\n\n    VERSION = require('../package.json').version;\n    exports.VERSION = VERSION;\n\n    function DoctrineError(message) {\n        this.name = 'DoctrineError';\n        this.message = message;\n    }\n    DoctrineError.prototype = (function () {\n        var Middle = function () { };\n        Middle.prototype = Error.prototype;\n        return new Middle();\n    }());\n    DoctrineError.prototype.constructor = DoctrineError;\n    exports.DoctrineError = DoctrineError;\n\n    function throwError(message) {\n        throw new DoctrineError(message);\n    }\n    exports.throwError = throwError;\n\n    exports.assert = require('assert');\n}());\n\n/* vim: set sw=4 ts=4 et tw=80 : */\n/LICENSE%q\n                             Apache License\n                       Version 2.0, January 2004\n                    http://www.apache.org/licenses/\n\nTERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n1. Definitions.\n\n  \"License\" shall mean the terms and conditions for use, reproduction,\n  and distribution as defined by Sections 1 through 9 of this document.\n\n  \"Licensor\" shall mean the copyright owner or entity authorized by\n  the copyright owner that is granting the License.\n\n  \"Legal Entity\" shall mean the union of the acting entity and all\n  other entities that control, are controlled by, or are under common\n  control with that entity. For the purposes of this definition,\n  \"control\" means (i) the power, direct or indirect, to cause the\n  direction or management of such entity, whether by contract or\n  otherwise, or (ii) ownership of fifty percent (50%) or more of the\n  outstanding shares, or (iii) beneficial ownership of such entity.\n\n  \"You\" (or \"Your\") shall mean an individual or Legal Entity\n  exercising permissions granted by this License.\n\n  \"Source\" form shall mean the preferred form for making modifications,\n  including but not limited to software source code, documentation\n  source, and configuration files.\n\n  \"Object\" form shall mean any form resulting from mechanical\n  transformation or translation of a Source form, including but\n  not limited to compiled object code, generated documentation,\n  and conversions to other media types.\n\n  \"Work\" shall mean the work of authorship, whether in Source or\n  Object form, made available under the License, as indicated by a\n  copyright notice that is included in or attached to the work\n  (an example is provided in the Appendix below).\n\n  \"Derivative Works\" shall mean any work, whether in Source or Object\n  form, that is based on (or derived from) the Work and for which the\n  editorial revisions, annotations, elaborations, or other modifications\n  represent, as a whole, an original work of authorship. For the purposes\n  of this License, Derivative Works shall not include works that remain\n  separable from, or merely link (or bind by name) to the interfaces of,\n  the Work and Derivative Works thereof.\n\n  \"Contribution\" shall mean any work of authorship, including\n  the original version of the Work and any modifications or additions\n  to that Work or Derivative Works thereof, that is intentionally\n  submitted to Licensor for inclusion in the Work by the copyright owner\n  or by an individual or Legal Entity authorized to submit on behalf of\n  the copyright owner. For the purposes of this definition, \"submitted\"\n  means any form of electronic, verbal, or written communication sent\n  to the Licensor or its representatives, including but not limited to\n  communication on electronic mailing lists, source code control systems,\n  and issue tracking systems that are managed by, or on behalf of, the\n  Licensor for the purpose of discussing and improving the Work, but\n  excluding communication that is conspicuously marked or otherwise\n  designated in writing by the copyright owner as \"Not a Contribution.\"\n\n  \"Contributor\" shall mean Licensor and any individual or Legal Entity\n  on behalf of whom a Contribution has been received by Licensor and\n  subsequently incorporated within the Work.\n\n2. Grant of Copyright License. Subject to the terms and conditions of\n  this License, each Contributor hereby grants to You a perpetual,\n  worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n  copyright license to reproduce, prepare Derivative Works of,\n  publicly display, publicly perform, sublicense, and distribute the\n  Work and such Derivative Works in Source or Object form.\n\n3. Grant of Patent License. Subject to the terms and conditions of\n  this License, each Contributor hereby grants to You a perpetual,\n  worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n  (except as stated in this section) patent license to make, have made,\n  use, offer to sell, sell, import, and otherwise transfer the Work,\n  where such license applies only to those patent claims licensable\n  by such Contributor that are necessarily infringed by their\n  Contribution(s) alone or by combination of their Contribution(s)\n  with the Work to which such Contribution(s) was submitted. If You\n  institute patent litigation against any entity (including a\n  cross-claim or counterclaim in a lawsuit) alleging that the Work\n  or a Contribution incorporated within the Work constitutes direct\n  or contributory patent infringement, then any patent licenses\n  granted to You under this License for that Work shall terminate\n  as of the date such litigation is filed.\n\n4. Redistribution. You may reproduce and distribute copies of the\n  Work or Derivative Works thereof in any medium, with or without\n  modifications, and in Source or Object form, provided that You\n  meet the following conditions:\n\n  (a) You must give any other recipients of the Work or\n      Derivative Works a copy of this License; and\n\n  (b) You must cause any modified files to carry prominent notices\n      stating that You changed the files; and\n\n  (c) You must retain, in the Source form of any Derivative Works\n      that You distribute, all copyright, patent, trademark, and\n      attribution notices from the Source form of the Work,\n      excluding those notices that do not pertain to any part of\n      the Derivative Works; and\n\n  (d) If the Work includes a \"NOTICE\" text file as part of its\n      distribution, then any Derivative Works that You distribute must\n      include a readable copy of the attribution notices contained\n      within such NOTICE file, excluding those notices that do not\n      pertain to any part of the Derivative Works, in at least one\n      of the following places: within a NOTICE text file distributed\n      as part of the Derivative Works; within the Source form or\n      documentation, if provided along with the Derivative Works; or,\n      within a display generated by the Derivative Works, if and\n      wherever such third-party notices normally appear. The contents\n      of the NOTICE file are for informational purposes only and\n      do not modify the License. You may add Your own attribution\n      notices within Derivative Works that You distribute, alongside\n      or as an addendum to the NOTICE text from the Work, provided\n      that such additional attribution notices cannot be construed\n      as modifying the License.\n\n  You may add Your own copyright statement to Your modifications and\n  may provide additional or different license terms and conditions\n  for use, reproduction, or distribution of Your modifications, or\n  for any such Derivative Works as a whole, provided Your use,\n  reproduction, and distribution of the Work otherwise complies with\n  the conditions stated in this License.\n\n5. Submission of Contributions. Unless You explicitly state otherwise,\n  any Contribution intentionally submitted for inclusion in the Work\n  by You to the Licensor shall be under the terms and conditions of\n  this License, without any additional terms or conditions.\n  Notwithstanding the above, nothing herein shall supersede or modify\n  the terms of any separate license agreement you may have executed\n  with Licensor regarding such Contributions.\n\n6. Trademarks. This License does not grant permission to use the trade\n  names, trademarks, service marks, or product names of the Licensor,\n  except as required for reasonable and customary use in describing the\n  origin of the Work and reproducing the content of the NOTICE file.\n\n7. Disclaimer of Warranty. Unless required by applicable law or\n  agreed to in writing, Licensor provides the Work (and each\n  Contributor provides its Contributions) on an \"AS IS\" BASIS,\n  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n  implied, including, without limitation, any warranties or conditions\n  of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n  PARTICULAR PURPOSE. You are solely responsible for determining the\n  appropriateness of using or redistributing the Work and assume any\n  risks associated with Your exercise of permissions under this License.\n\n8. Limitation of Liability. In no event and under no legal theory,\n  whether in tort (including negligence), contract, or otherwise,\n  unless required by applicable law (such as deliberate and grossly\n  negligent acts) or agreed to in writing, shall any Contributor be\n  liable to You for damages, including any direct, indirect, special,\n  incidental, or consequential damages of any character arising as a\n  result of this License or out of the use or inability to use the\n  Work (including but not limited to damages for loss of goodwill,\n  work stoppage, computer failure or malfunction, or any and all\n  other commercial damages or losses), even if such Contributor\n  has been advised of the possibility of such damages.\n\n9. Accepting Warranty or Additional Liability. While redistributing\n  the Work or Derivative Works thereof, You may choose to offer,\n  and charge a fee for, acceptance of support, warranty, indemnity,\n  or other liability obligations and/or rights consistent with this\n  License. However, in accepting such obligations, You may act only\n  on Your own behalf and on Your sole responsibility, not on behalf\n  of any other Contributor, and only if You agree to indemnify,\n  defend, and hold each Contributor harmless for any liability\n  incurred by, or claims asserted against, such Contributor by reason\n  of your accepting any such warranty or additional liability.\n\nEND OF TERMS AND CONDITIONS\n/package.json\u0005{\n  \"name\": \"doctrine\",\n  \"description\": \"JSDoc parser\",\n  \"homepage\": \"https://github.com/eslint/doctrine\",\n  \"main\": \"lib/doctrine.js\",\n  \"version\": \"3.0.0\",\n  \"engines\": {\n    \"node\": \">=6.0.0\"\n  },\n  \"directories\": {\n    \"lib\": \"./lib\"\n  },\n  \"files\": [\n    \"lib\"\n  ],\n  \"maintainers\": [\n    {\n      \"name\": \"Nicholas C. Zakas\",\n      \"email\": \"nicholas+npm@nczconsulting.com\",\n      \"web\": \"https://www.nczonline.net\"\n    },\n    {\n      \"name\": \"Yusuke Suzuki\",\n      \"email\": \"utatane.tea@gmail.com\",\n      \"web\": \"https://github.com/Constellation\"\n    }\n  ],\n  \"repository\": \"eslint/doctrine\",\n  \"devDependencies\": {\n    \"coveralls\": \"^3.0.1\",\n    \"dateformat\": \"^1.0.11\",\n    \"eslint\": \"^1.10.3\",\n    \"eslint-release\": \"^1.0.0\",\n    \"linefix\": \"^0.1.1\",\n    \"mocha\": \"^3.4.2\",\n    \"npm-license\": \"^0.3.1\",\n    \"nyc\": \"^10.3.2\",\n    \"semver\": \"^5.0.3\",\n    \"shelljs\": \"^0.5.3\",\n    \"shelljs-nodecli\": \"^0.1.1\",\n    \"should\": \"^5.0.1\"\n  },\n  \"license\": \"Apache-2.0\",\n  \"scripts\": {\n    \"pretest\": \"npm run lint\",\n    \"test\": \"nyc mocha\",\n    \"coveralls\": \"nyc report --reporter=text-lcov | coveralls\",\n    \"lint\": \"eslint lib/\",\n    \"generate-release\": \"eslint-generate-release\",\n    \"generate-alpharelease\": \"eslint-generate-prerelease alpha\",\n    \"generate-betarelease\": \"eslint-generate-prerelease beta\",\n    \"generate-rcrelease\": \"eslint-generate-prerelease rc\",\n    \"publish-release\": \"eslint-publish-release\"\n  },\n  \"dependencies\": {\n    \"esutils\": \"^2.0.2\"\n  }\n}\n/LICENSE.closure-compiler,^\n                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/ZGF0YS11cmktdG8tYnVmZmVyQDQuMC4x",
    "content": "/dist/index.d.ts\u0001/// <reference types=\"node\" />\nexport interface MimeBuffer extends Buffer {\n    type: string;\n    typeFull: string;\n    charset: string;\n}\n/**\n * Returns a `Buffer` instance from the given data URI `uri`.\n *\n * @param {String} uri Data URI to turn into a Buffer instance\n * @returns {Buffer} Buffer instance from Data URI\n * @api public\n */\nexport declare function dataUriToBuffer(uri: string): MimeBuffer;\nexport default dataUriToBuffer;\n/README.md\u000bndata-uri-to-buffer\n==================\n### Generate a Buffer instance from a [Data URI][rfc] string\n[![Build Status](https://travis-ci.org/TooTallNate/node-data-uri-to-buffer.svg?branch=master)](https://travis-ci.org/TooTallNate/node-data-uri-to-buffer)\n\nThis module accepts a [\"data\" URI][rfc] String of data, and returns a\nnode.js `Buffer` instance with the decoded data.\n\n\nInstallation\n------------\n\nInstall with `npm`:\n\n``` bash\n$ npm install data-uri-to-buffer\n```\n\n\nExample\n-------\n\n``` js\nimport dataUriToBuffer from 'data-uri-to-buffer';\n\n// plain-text data is supported\nlet uri = 'data:,Hello%2C%20World!';\nlet decoded = dataUriToBuffer(uri);\nconsole.log(decoded.toString());\n// 'Hello, World!'\n\n// base64-encoded data is supported\nuri = 'data:text/plain;base64,SGVsbG8sIFdvcmxkIQ%3D%3D';\ndecoded = dataUriToBuffer(uri);\nconsole.log(decoded.toString());\n// 'Hello, World!'\n```\n\n\nAPI\n---\n\n### dataUriToBuffer(String uri) → Buffer\n\nThe `type` property on the Buffer instance gets set to the main type portion of\nthe \"mediatype\" portion of the \"data\" URI, or defaults to `\"text/plain\"` if not\nspecified.\n\nThe `typeFull` property on the Buffer instance gets set to the entire\n\"mediatype\" portion of the \"data\" URI (including all parameters), or defaults\nto `\"text/plain;charset=US-ASCII\"` if not specified.\n\nThe `charset` property on the Buffer instance gets set to the Charset portion of\nthe \"mediatype\" portion of the \"data\" URI, or defaults to `\"US-ASCII\"` if the\nentire type is not specified, or defaults to `\"\"` otherwise.\n\n*Note*: If the only the main type is specified but not the charset, e.g.\n`\"data:text/plain,abc\"`, the charset is set to the empty string. The spec only\ndefaults to US-ASCII as charset if the entire type is not specified.\n\n\nLicense\n-------\n\n(The MIT License)\n\nCopyright (c) 2014 Nathan Rajlich &lt;nathan@tootallnate.net&gt;\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n[rfc]: http://tools.ietf.org/html/rfc2397\n/dist/index.js\u0007</**\n * Returns a `Buffer` instance from the given data URI `uri`.\n *\n * @param {String} uri Data URI to turn into a Buffer instance\n * @returns {Buffer} Buffer instance from Data URI\n * @api public\n */\nexport function dataUriToBuffer(uri) {\n    if (!/^data:/i.test(uri)) {\n        throw new TypeError('`uri` does not appear to be a Data URI (must begin with \"data:\")');\n    }\n    // strip newlines\n    uri = uri.replace(/\\r?\\n/g, '');\n    // split the URI up into the \"metadata\" and the \"data\" portions\n    const firstComma = uri.indexOf(',');\n    if (firstComma === -1 || firstComma <= 4) {\n        throw new TypeError('malformed data: URI');\n    }\n    // remove the \"data:\" scheme and parse the metadata\n    const meta = uri.substring(5, firstComma).split(';');\n    let charset = '';\n    let base64 = false;\n    const type = meta[0] || 'text/plain';\n    let typeFull = type;\n    for (let i = 1; i < meta.length; i++) {\n        if (meta[i] === 'base64') {\n            base64 = true;\n        }\n        else if (meta[i]) {\n            typeFull += `;${meta[i]}`;\n            if (meta[i].indexOf('charset=') === 0) {\n                charset = meta[i].substring(8);\n            }\n        }\n    }\n    // defaults to US-ASCII only if type is not provided\n    if (!meta[0] && !charset.length) {\n        typeFull += ';charset=US-ASCII';\n        charset = 'US-ASCII';\n    }\n    // get the encoded data portion and decode URI-encoded chars\n    const encoding = base64 ? 'base64' : 'ascii';\n    const data = unescape(uri.substring(firstComma + 1));\n    const buffer = Buffer.from(data, encoding);\n    // set `.type` and `.typeFull` properties to MIME type\n    buffer.type = type;\n    buffer.typeFull = typeFull;\n    // set the `.charset` property\n    buffer.charset = charset;\n    return buffer;\n}\nexport default dataUriToBuffer;\n//# sourceMappingURL=index.js.map/dist/index.js.map\u0006{\"version\":3,\"file\":\"index.js\",\"sourceRoot\":\"\",\"sources\":[\"../src/index.ts\"],\"names\":[],\"mappings\":\"AAMA;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,GAAW;IAC1C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;QACzB,MAAM,IAAI,SAAS,CAClB,kEAAkE,CAClE,CAAC;KACF;IAED,iBAAiB;IACjB,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IAEhC,+DAA+D;IAC/D,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACpC,IAAI,UAAU,KAAK,CAAC,CAAC,IAAI,UAAU,IAAI,CAAC,EAAE;QACzC,MAAM,IAAI,SAAS,CAAC,qBAAqB,CAAC,CAAC;KAC3C;IAED,mDAAmD;IACnD,MAAM,IAAI,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAErD,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,YAAY,CAAC;IACrC,IAAI,QAAQ,GAAG,IAAI,CAAC;IACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACrC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE;YACzB,MAAM,GAAG,IAAI,CAAC;SACd;aAAM,IAAG,IAAI,CAAC,CAAC,CAAC,EAAE;YAClB,QAAQ,IAAI,IAAM,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5B,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;gBACtC,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;aAC/B;SACD;KACD;IACD,oDAAoD;IACpD,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;QAChC,QAAQ,IAAI,mBAAmB,CAAC;QAChC,OAAO,GAAG,UAAU,CAAC;KACrB;IAED,4DAA4D;IAC5D,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;IAC7C,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC;IACrD,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAe,CAAC;IAEzD,sDAAsD;IACtD,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAE3B,8BAA8B;IAC9B,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC;IAEzB,OAAO,MAAM,CAAC;AACf,CAAC;AAED,eAAe,eAAe,CAAC\"}/src/index.ts\u0006export interface MimeBuffer extends Buffer {\n\ttype: string;\n\ttypeFull: string;\n\tcharset: string;\n}\n\n/**\n * Returns a `Buffer` instance from the given data URI `uri`.\n *\n * @param {String} uri Data URI to turn into a Buffer instance\n * @returns {Buffer} Buffer instance from Data URI\n * @api public\n */\nexport function dataUriToBuffer(uri: string): MimeBuffer {\n\tif (!/^data:/i.test(uri)) {\n\t\tthrow new TypeError(\n\t\t\t'`uri` does not appear to be a Data URI (must begin with \"data:\")'\n\t\t);\n\t}\n\n\t// strip newlines\n\turi = uri.replace(/\\r?\\n/g, '');\n\n\t// split the URI up into the \"metadata\" and the \"data\" portions\n\tconst firstComma = uri.indexOf(',');\n\tif (firstComma === -1 || firstComma <= 4) {\n\t\tthrow new TypeError('malformed data: URI');\n\t}\n\n\t// remove the \"data:\" scheme and parse the metadata\n\tconst meta = uri.substring(5, firstComma).split(';');\n\n\tlet charset = '';\n\tlet base64 = false;\n\tconst type = meta[0] || 'text/plain';\n\tlet typeFull = type;\n\tfor (let i = 1; i < meta.length; i++) {\n\t\tif (meta[i] === 'base64') {\n\t\t\tbase64 = true;\n\t\t} else if(meta[i]) {\n\t\t\ttypeFull += `;${  meta[i]}`;\n\t\t\tif (meta[i].indexOf('charset=') === 0) {\n\t\t\t\tcharset = meta[i].substring(8);\n\t\t\t}\n\t\t}\n\t}\n\t// defaults to US-ASCII only if type is not provided\n\tif (!meta[0] && !charset.length) {\n\t\ttypeFull += ';charset=US-ASCII';\n\t\tcharset = 'US-ASCII';\n\t}\n\n\t// get the encoded data portion and decode URI-encoded chars\n\tconst encoding = base64 ? 'base64' : 'ascii';\n\tconst data = unescape(uri.substring(firstComma + 1));\n\tconst buffer = Buffer.from(data, encoding) as MimeBuffer;\n\n\t// set `.type` and `.typeFull` properties to MIME type\n\tbuffer.type = type;\n\tbuffer.typeFull = typeFull;\n\n\t// set the `.charset` property\n\tbuffer.charset = charset;\n\n\treturn buffer;\n}\n\nexport default dataUriToBuffer;\n/package.json\u0005F{\n  \"name\": \"data-uri-to-buffer\",\n  \"version\": \"4.0.1\",\n  \"description\": \"Generate a Buffer instance from a Data URI string\",\n  \"type\": \"module\",\n  \"exports\": \"./dist/index.js\",\n  \"main\": \"./dist/index.js\",\n  \"types\": \"./dist/index.d.ts\",\n  \"files\": [\n    \"dist\",\n    \"src\"\n  ],\n  \"scripts\": {\n    \"build\": \"tsc\",\n    \"test\": \"jest\",\n    \"prepublishOnly\": \"npm run build\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git://github.com/TooTallNate/node-data-uri-to-buffer.git\"\n  },\n  \"engines\": {\n    \"node\": \">= 12\"\n  },\n  \"keywords\": [\n    \"data\",\n    \"uri\",\n    \"datauri\",\n    \"data-uri\",\n    \"buffer\",\n    \"convert\",\n    \"rfc2397\",\n    \"2397\"\n  ],\n  \"author\": \"Nathan Rajlich <nathan@tootallnate.net> (http://n8.io/)\",\n  \"license\": \"MIT\",\n  \"bugs\": {\n    \"url\": \"https://github.com/TooTallNate/node-data-uri-to-buffer/issues\"\n  },\n  \"homepage\": \"https://github.com/TooTallNate/node-data-uri-to-buffer\",\n  \"devDependencies\": {\n    \"@types/jest\": \"^27.0.2\",\n    \"@types/node\": \"^12.20.36\",\n    \"jest\": \"^27.3.1\",\n    \"ts-jest\": \"^27.0.7\",\n    \"typescript\": \"^4.4.4\"\n  },\n  \"jest\": {\n    \"preset\": \"ts-jest\",\n    \"globals\": {\n      \"ts-jest\": {\n        \"diagnostics\": false,\n        \"isolatedModules\": true\n      }\n    },\n    \"verbose\": false,\n    \"testEnvironment\": \"node\",\n    \"testMatch\": [\n      \"<rootDir>/test/**/*.test.ts\"\n    ]\n  }\n}\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/ZGVidWdANC4zLjQ=",
    "content": "/src/index.js\u0001:/**\n * Detect Electron renderer / nwjs process, which is node, but we should\n * treat as a browser.\n */\n\nif (typeof process === 'undefined' || process.type === 'renderer' || process.browser === true || process.__nwjs) {\n\tmodule.exports = require('./browser.js');\n} else {\n\tmodule.exports = require('./node.js');\n}\n/LICENSE\u0004s(The MIT License)\n\nCopyright (c) 2014-2017 TJ Holowaychuk <tj@vision-media.ca>\nCopyright (c) 2018-2021 Josh Junon\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software\nand associated documentation files (the 'Software'), to deal in the Software without restriction,\nincluding without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,\nand/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial\nportions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT\nLIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\nWHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n/src/browser.js\u0017z/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\nexports.destroy = (() => {\n\tlet warned = false;\n\n\treturn () => {\n\t\tif (!warned) {\n\t\t\twarned = true;\n\t\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t\t}\n\t};\n})();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.debug()` when available.\n * No-op when `console.debug` is not a \"function\".\n * If `console.debug` is not available, falls back\n * to `console.log`.\n *\n * @api public\n */\nexports.log = console.debug || console.log || (() => {});\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug');\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = process.env.DEBUG;\n\t}\n\n\treturn r;\n}\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n/README.mdW# debug\n[![Build Status](https://travis-ci.org/debug-js/debug.svg?branch=master)](https://travis-ci.org/debug-js/debug)  [![Coverage Status](https://coveralls.io/repos/github/debug-js/debug/badge.svg?branch=master)](https://coveralls.io/github/debug-js/debug?branch=master)  [![Slack](https://visionmedia-community-slackin.now.sh/badge.svg)](https://visionmedia-community-slackin.now.sh/) [![OpenCollective](https://opencollective.com/debug/backers/badge.svg)](#backers)\n[![OpenCollective](https://opencollective.com/debug/sponsors/badge.svg)](#sponsors)\n\n<img width=\"647\" src=\"https://user-images.githubusercontent.com/71256/29091486-fa38524c-7c37-11e7-895f-e7ec8e1039b6.png\">\n\nA tiny JavaScript debugging utility modelled after Node.js core's debugging\ntechnique. Works in Node.js and web browsers.\n\n## Installation\n\n```bash\n$ npm install debug\n```\n\n## Usage\n\n`debug` exposes a function; simply pass this function the name of your module, and it will return a decorated version of `console.error` for you to pass debug statements to. This will allow you to toggle the debug output for different parts of your module as well as the module as a whole.\n\nExample [_app.js_](./examples/node/app.js):\n\n```js\nvar debug = require('debug')('http')\n  , http = require('http')\n  , name = 'My App';\n\n// fake app\n\ndebug('booting %o', name);\n\nhttp.createServer(function(req, res){\n  debug(req.method + ' ' + req.url);\n  res.end('hello\\n');\n}).listen(3000, function(){\n  debug('listening');\n});\n\n// fake worker of some kind\n\nrequire('./worker');\n```\n\nExample [_worker.js_](./examples/node/worker.js):\n\n```js\nvar a = require('debug')('worker:a')\n  , b = require('debug')('worker:b');\n\nfunction work() {\n  a('doing lots of uninteresting work');\n  setTimeout(work, Math.random() * 1000);\n}\n\nwork();\n\nfunction workb() {\n  b('doing some work');\n  setTimeout(workb, Math.random() * 2000);\n}\n\nworkb();\n```\n\nThe `DEBUG` environment variable is then used to enable these based on space or\ncomma-delimited names.\n\nHere are some examples:\n\n<img width=\"647\" alt=\"screen shot 2017-08-08 at 12 53 04 pm\" src=\"https://user-images.githubusercontent.com/71256/29091703-a6302cdc-7c38-11e7-8304-7c0b3bc600cd.png\">\n<img width=\"647\" alt=\"screen shot 2017-08-08 at 12 53 38 pm\" src=\"https://user-images.githubusercontent.com/71256/29091700-a62a6888-7c38-11e7-800b-db911291ca2b.png\">\n<img width=\"647\" alt=\"screen shot 2017-08-08 at 12 53 25 pm\" src=\"https://user-images.githubusercontent.com/71256/29091701-a62ea114-7c38-11e7-826a-2692bedca740.png\">\n\n#### Windows command prompt notes\n\n##### CMD\n\nOn Windows the environment variable is set using the `set` command.\n\n```cmd\nset DEBUG=*,-not_this\n```\n\nExample:\n\n```cmd\nset DEBUG=* & node app.js\n```\n\n##### PowerShell (VS Code default)\n\nPowerShell uses different syntax to set environment variables.\n\n```cmd\n$env:DEBUG = \"*,-not_this\"\n```\n\nExample:\n\n```cmd\n$env:DEBUG='app';node app.js\n```\n\nThen, run the program to be debugged as usual.\n\nnpm script example:\n```js\n  \"windowsDebug\": \"@powershell -Command $env:DEBUG='*';node app.js\",\n```\n\n## Namespace Colors\n\nEvery debug instance has a color generated for it based on its namespace name.\nThis helps when visually parsing the debug output to identify which debug instance\na debug line belongs to.\n\n#### Node.js\n\nIn Node.js, colors are enabled when stderr is a TTY. You also _should_ install\nthe [`supports-color`](https://npmjs.org/supports-color) module alongside debug,\notherwise debug will only use a small handful of basic colors.\n\n<img width=\"521\" src=\"https://user-images.githubusercontent.com/71256/29092181-47f6a9e6-7c3a-11e7-9a14-1928d8a711cd.png\">\n\n#### Web Browser\n\nColors are also enabled on \"Web Inspectors\" that understand the `%c` formatting\noption. These are WebKit web inspectors, Firefox ([since version\n31](https://hacks.mozilla.org/2014/05/editable-box-model-multiple-selection-sublime-text-keys-much-more-firefox-developer-tools-episode-31/))\nand the Firebug plugin for Firefox (any version).\n\n<img width=\"524\" src=\"https://user-images.githubusercontent.com/71256/29092033-b65f9f2e-7c39-11e7-8e32-f6f0d8e865c1.png\">\n\n\n## Millisecond diff\n\nWhen actively developing an application it can be useful to see when the time spent between one `debug()` call and the next. Suppose for example you invoke `debug()` before requesting a resource, and after as well, the \"+NNNms\" will show you how much time was spent between calls.\n\n<img width=\"647\" src=\"https://user-images.githubusercontent.com/71256/29091486-fa38524c-7c37-11e7-895f-e7ec8e1039b6.png\">\n\nWhen stdout is not a TTY, `Date#toISOString()` is used, making it more useful for logging the debug information as shown below:\n\n<img width=\"647\" src=\"https://user-images.githubusercontent.com/71256/29091956-6bd78372-7c39-11e7-8c55-c948396d6edd.png\">\n\n\n## Conventions\n\nIf you're using this in one or more of your libraries, you _should_ use the name of your library so that developers may toggle debugging as desired without guessing names. If you have more than one debuggers you _should_ prefix them with your library name and use \":\" to separate features. For example \"bodyParser\" from Connect would then be \"connect:bodyParser\".  If you append a \"*\" to the end of your name, it will always be enabled regardless of the setting of the DEBUG environment variable.  You can then use it for normal output as well as debug output.\n\n## Wildcards\n\nThe `*` character may be used as a wildcard. Suppose for example your library has\ndebuggers named \"connect:bodyParser\", \"connect:compress\", \"connect:session\",\ninstead of listing all three with\n`DEBUG=connect:bodyParser,connect:compress,connect:session`, you may simply do\n`DEBUG=connect:*`, or to run everything using this module simply use `DEBUG=*`.\n\nYou can also exclude specific debuggers by prefixing them with a \"-\" character.\nFor example, `DEBUG=*,-connect:*` would include all debuggers except those\nstarting with \"connect:\".\n\n## Environment Variables\n\nWhen running through Node.js, you can set a few environment variables that will\nchange the behavior of the debug logging:\n\n| Name      | Purpose                                         |\n|-----------|-------------------------------------------------|\n| `DEBUG`   | Enables/disables specific debugging namespaces. |\n| `DEBUG_HIDE_DATE` | Hide date from debug output (non-TTY).  |\n| `DEBUG_COLORS`| Whether or not to use colors in the debug output. |\n| `DEBUG_DEPTH` | Object inspection depth.                    |\n| `DEBUG_SHOW_HIDDEN` | Shows hidden properties on inspected objects. |\n\n\n__Note:__ The environment variables beginning with `DEBUG_` end up being\nconverted into an Options object that gets used with `%o`/`%O` formatters.\nSee the Node.js documentation for\n[`util.inspect()`](https://nodejs.org/api/util.html#util_util_inspect_object_options)\nfor the complete list.\n\n## Formatters\n\nDebug uses [printf-style](https://wikipedia.org/wiki/Printf_format_string) formatting.\nBelow are the officially supported formatters:\n\n| Formatter | Representation |\n|-----------|----------------|\n| `%O`      | Pretty-print an Object on multiple lines. |\n| `%o`      | Pretty-print an Object all on a single line. |\n| `%s`      | String. |\n| `%d`      | Number (both integer and float). |\n| `%j`      | JSON. Replaced with the string '[Circular]' if the argument contains circular references. |\n| `%%`      | Single percent sign ('%'). This does not consume an argument. |\n\n\n### Custom formatters\n\nYou can add custom formatters by extending the `debug.formatters` object.\nFor example, if you wanted to add support for rendering a Buffer as hex with\n`%h`, you could do something like:\n\n```js\nconst createDebug = require('debug')\ncreateDebug.formatters.h = (v) => {\n  return v.toString('hex')\n}\n\n// …elsewhere\nconst debug = createDebug('foo')\ndebug('this is hex: %h', new Buffer('hello world'))\n//   foo this is hex: 68656c6c6f20776f726c6421 +0ms\n```\n\n\n## Browser Support\n\nYou can build a browser-ready script using [browserify](https://github.com/substack/node-browserify),\nor just use the [browserify-as-a-service](https://wzrd.in/) [build](https://wzrd.in/standalone/debug@latest),\nif you don't want to build it yourself.\n\nDebug's enable state is currently persisted by `localStorage`.\nConsider the situation shown below where you have `worker:a` and `worker:b`,\nand wish to debug both. You can enable this using `localStorage.debug`:\n\n```js\nlocalStorage.debug = 'worker:*'\n```\n\nAnd then refresh the page.\n\n```js\na = debug('worker:a');\nb = debug('worker:b');\n\nsetInterval(function(){\n  a('doing some work');\n}, 1000);\n\nsetInterval(function(){\n  b('doing some work');\n}, 1200);\n```\n\nIn Chromium-based web browsers (e.g. Brave, Chrome, and Electron), the JavaScript console will—by default—only show messages logged by `debug` if the \"Verbose\" log level is _enabled_.\n\n<img width=\"647\" src=\"https://user-images.githubusercontent.com/7143133/152083257-29034707-c42c-4959-8add-3cee850e6fcf.png\">\n\n## Output streams\n\n  By default `debug` will log to stderr, however this can be configured per-namespace by overriding the `log` method:\n\nExample [_stdout.js_](./examples/node/stdout.js):\n\n```js\nvar debug = require('debug');\nvar error = debug('app:error');\n\n// by default stderr is used\nerror('goes to stderr!');\n\nvar log = debug('app:log');\n// set this namespace to log via console.log\nlog.log = console.log.bind(console); // don't forget to bind to console!\nlog('goes to stdout');\nerror('still goes to stderr!');\n\n// set all output to go via console.info\n// overrides all per-namespace log settings\ndebug.log = console.info.bind(console);\nerror('now goes to stdout via console.info');\nlog('still goes to stdout, but via console.info now');\n```\n\n## Extend\nYou can simply extend debugger \n```js\nconst log = require('debug')('auth');\n\n//creates new debug instance with extended namespace\nconst logSign = log.extend('sign');\nconst logLogin = log.extend('login');\n\nlog('hello'); // auth hello\nlogSign('hello'); //auth:sign hello\nlogLogin('hello'); //auth:login hello\n```\n\n## Set dynamically\n\nYou can also enable debug dynamically by calling the `enable()` method :\n\n```js\nlet debug = require('debug');\n\nconsole.log(1, debug.enabled('test'));\n\ndebug.enable('test');\nconsole.log(2, debug.enabled('test'));\n\ndebug.disable();\nconsole.log(3, debug.enabled('test'));\n\n```\n\nprint :   \n```\n1 false\n2 true\n3 false\n```\n\nUsage :  \n`enable(namespaces)`  \n`namespaces` can include modes separated by a colon and wildcards.\n   \nNote that calling `enable()` completely overrides previously set DEBUG variable : \n\n```\n$ DEBUG=foo node -e 'var dbg = require(\"debug\"); dbg.enable(\"bar\"); console.log(dbg.enabled(\"foo\"))'\n=> false\n```\n\n`disable()`\n\nWill disable all namespaces. The functions returns the namespaces currently\nenabled (and skipped). This can be useful if you want to disable debugging\ntemporarily without knowing what was enabled to begin with.\n\nFor example:\n\n```js\nlet debug = require('debug');\ndebug.enable('foo:*,-foo:bar');\nlet namespaces = debug.disable();\ndebug.enable(namespaces);\n```\n\nNote: There is no guarantee that the string will be identical to the initial\nenable string, but semantically they will be identical.\n\n## Checking whether a debug target is enabled\n\nAfter you've created a debug instance, you can determine whether or not it is\nenabled by checking the `enabled` property:\n\n```javascript\nconst debug = require('debug')('http');\n\nif (debug.enabled) {\n  // do stuff...\n}\n```\n\nYou can also manually toggle this property to force the debug instance to be\nenabled or disabled.\n\n## Usage in child processes\n\nDue to the way `debug` detects if the output is a TTY or not, colors are not shown in child processes when `stderr` is piped. A solution is to pass the `DEBUG_COLORS=1` environment variable to the child process.  \nFor example:\n\n```javascript\nworker = fork(WORKER_WRAP_PATH, [workerPath], {\n  stdio: [\n    /* stdin: */ 0,\n    /* stdout: */ 'pipe',\n    /* stderr: */ 'pipe',\n    'ipc',\n  ],\n  env: Object.assign({}, process.env, {\n    DEBUG_COLORS: 1 // without this settings, colors won't be shown\n  }),\n});\n\nworker.stderr.pipe(process.stderr, { end: false });\n```\n\n\n## Authors\n\n - TJ Holowaychuk\n - Nathan Rajlich\n - Andrew Rhyne\n - Josh Junon\n\n## Backers\n\nSupport us with a monthly donation and help us continue our activities. [[Become a backer](https://opencollective.com/debug#backer)]\n\n<a href=\"https://opencollective.com/debug/backer/0/website\" target=\"_blank\"><img src=\"https://opencollective.com/debug/backer/0/avatar.svg\"></a>\n<a href=\"https://opencollective.com/debug/backer/1/website\" target=\"_blank\"><img src=\"https://opencollective.com/debug/backer/1/avatar.svg\"></a>\n<a href=\"https://opencollective.com/debug/backer/2/website\" target=\"_blank\"><img src=\"https://opencollective.com/debug/backer/2/avatar.svg\"></a>\n<a href=\"https://opencollective.com/debug/backer/3/website\" target=\"_blank\"><img src=\"https://opencollective.com/debug/backer/3/avatar.svg\"></a>\n<a href=\"https://opencollective.com/debug/backer/4/website\" target=\"_blank\"><img src=\"https://opencollective.com/debug/backer/4/avatar.svg\"></a>\n<a href=\"https://opencollective.com/debug/backer/5/website\" target=\"_blank\"><img src=\"https://opencollective.com/debug/backer/5/avatar.svg\"></a>\n<a href=\"https://opencollective.com/debug/backer/6/website\" target=\"_blank\"><img src=\"https://opencollective.com/debug/backer/6/avatar.svg\"></a>\n<a href=\"https://opencollective.com/debug/backer/7/website\" target=\"_blank\"><img src=\"https://opencollective.com/debug/backer/7/avatar.svg\"></a>\n<a href=\"https://opencollective.com/debug/backer/8/website\" target=\"_blank\"><img src=\"https://opencollective.com/debug/backer/8/avatar.svg\"></a>\n<a href=\"https://opencollective.com/debug/backer/9/website\" target=\"_blank\"><img src=\"https://opencollective.com/debug/backer/9/avatar.svg\"></a>\n<a href=\"https://opencollective.com/debug/backer/10/website\" target=\"_blank\"><img src=\"https://opencollective.com/debug/backer/10/avatar.svg\"></a>\n<a href=\"https://opencollective.com/debug/backer/11/website\" target=\"_blank\"><img src=\"https://opencollective.com/debug/backer/11/avatar.svg\"></a>\n<a href=\"https://opencollective.com/debug/backer/12/website\" target=\"_blank\"><img src=\"https://opencollective.com/debug/backer/12/avatar.svg\"></a>\n<a href=\"https://opencollective.com/debug/backer/13/website\" target=\"_blank\"><img src=\"https://opencollective.com/debug/backer/13/avatar.svg\"></a>\n<a href=\"https://opencollective.com/debug/backer/14/website\" target=\"_blank\"><img src=\"https://opencollective.com/debug/backer/14/avatar.svg\"></a>\n<a href=\"https://opencollective.com/debug/backer/15/website\" target=\"_blank\"><img src=\"https://opencollective.com/debug/backer/15/avatar.svg\"></a>\n<a href=\"https://opencollective.com/debug/backer/16/website\" target=\"_blank\"><img src=\"https://opencollective.com/debug/backer/16/avatar.svg\"></a>\n<a href=\"https://opencollective.com/debug/backer/17/website\" target=\"_blank\"><img src=\"https://opencollective.com/debug/backer/17/avatar.svg\"></a>\n<a href=\"https://opencollective.com/debug/backer/18/website\" target=\"_blank\"><img src=\"https://opencollective.com/debug/backer/18/avatar.svg\"></a>\n<a href=\"https://opencollective.com/debug/backer/19/website\" target=\"_blank\"><img src=\"https://opencollective.com/debug/backer/19/avatar.svg\"></a>\n<a href=\"https://opencollective.com/debug/backer/20/website\" target=\"_blank\"><img src=\"https://opencollective.com/debug/backer/20/avatar.svg\"></a>\n<a href=\"https://opencollective.com/debug/backer/21/website\" target=\"_blank\"><img src=\"https://opencollective.com/debug/backer/21/avatar.svg\"></a>\n<a href=\"https://opencollective.com/debug/backer/22/website\" target=\"_blank\"><img src=\"https://opencollective.com/debug/backer/22/avatar.svg\"></a>\n<a href=\"https://opencollective.com/debug/backer/23/website\" target=\"_blank\"><img src=\"https://opencollective.com/debug/backer/23/avatar.svg\"></a>\n<a href=\"https://opencollective.com/debug/backer/24/website\" target=\"_blank\"><img src=\"https://opencollective.com/debug/backer/24/avatar.svg\"></a>\n<a href=\"https://opencollective.com/debug/backer/25/website\" target=\"_blank\"><img src=\"https://opencollective.com/debug/backer/25/avatar.svg\"></a>\n<a href=\"https://opencollective.com/debug/backer/26/website\" target=\"_blank\"><img src=\"https://opencollective.com/debug/backer/26/avatar.svg\"></a>\n<a href=\"https://opencollective.com/debug/backer/27/website\" target=\"_blank\"><img src=\"https://opencollective.com/debug/backer/27/avatar.svg\"></a>\n<a href=\"https://opencollective.com/debug/backer/28/website\" target=\"_blank\"><img src=\"https://opencollective.com/debug/backer/28/avatar.svg\"></a>\n<a href=\"https://opencollective.com/debug/backer/29/website\" target=\"_blank\"><img src=\"https://opencollective.com/debug/backer/29/avatar.svg\"></a>\n\n\n## Sponsors\n\nBecome a sponsor and get your logo on our README on Github with a link to your site. [[Become a sponsor](https://opencollective.com/debug#sponsor)]\n\n<a href=\"https://opencollective.com/debug/sponsor/0/website\" target=\"_blank\"><img src=\"https://opencollective.com/debug/sponsor/0/avatar.svg\"></a>\n<a href=\"https://opencollective.com/debug/sponsor/1/website\" target=\"_blank\"><img src=\"https://opencollective.com/debug/sponsor/1/avatar.svg\"></a>\n<a href=\"https://opencollective.com/debug/sponsor/2/website\" target=\"_blank\"><img src=\"https://opencollective.com/debug/sponsor/2/avatar.svg\"></a>\n<a href=\"https://opencollective.com/debug/sponsor/3/website\" target=\"_blank\"><img src=\"https://opencollective.com/debug/sponsor/3/avatar.svg\"></a>\n<a href=\"https://opencollective.com/debug/sponsor/4/website\" target=\"_blank\"><img src=\"https://opencollective.com/debug/sponsor/4/avatar.svg\"></a>\n<a href=\"https://opencollective.com/debug/sponsor/5/website\" target=\"_blank\"><img src=\"https://opencollective.com/debug/sponsor/5/avatar.svg\"></a>\n<a href=\"https://opencollective.com/debug/sponsor/6/website\" target=\"_blank\"><img src=\"https://opencollective.com/debug/sponsor/6/avatar.svg\"></a>\n<a href=\"https://opencollective.com/debug/sponsor/7/website\" target=\"_blank\"><img src=\"https://opencollective.com/debug/sponsor/7/avatar.svg\"></a>\n<a href=\"https://opencollective.com/debug/sponsor/8/website\" target=\"_blank\"><img src=\"https://opencollective.com/debug/sponsor/8/avatar.svg\"></a>\n<a href=\"https://opencollective.com/debug/sponsor/9/website\" target=\"_blank\"><img src=\"https://opencollective.com/debug/sponsor/9/avatar.svg\"></a>\n<a href=\"https://opencollective.com/debug/sponsor/10/website\" target=\"_blank\"><img src=\"https://opencollective.com/debug/sponsor/10/avatar.svg\"></a>\n<a href=\"https://opencollective.com/debug/sponsor/11/website\" target=\"_blank\"><img src=\"https://opencollective.com/debug/sponsor/11/avatar.svg\"></a>\n<a href=\"https://opencollective.com/debug/sponsor/12/website\" target=\"_blank\"><img src=\"https://opencollective.com/debug/sponsor/12/avatar.svg\"></a>\n<a href=\"https://opencollective.com/debug/sponsor/13/website\" target=\"_blank\"><img src=\"https://opencollective.com/debug/sponsor/13/avatar.svg\"></a>\n<a href=\"https://opencollective.com/debug/sponsor/14/website\" target=\"_blank\"><img src=\"https://opencollective.com/debug/sponsor/14/avatar.svg\"></a>\n<a href=\"https://opencollective.com/debug/sponsor/15/website\" target=\"_blank\"><img src=\"https://opencollective.com/debug/sponsor/15/avatar.svg\"></a>\n<a href=\"https://opencollective.com/debug/sponsor/16/website\" target=\"_blank\"><img src=\"https://opencollective.com/debug/sponsor/16/avatar.svg\"></a>\n<a href=\"https://opencollective.com/debug/sponsor/17/website\" target=\"_blank\"><img src=\"https://opencollective.com/debug/sponsor/17/avatar.svg\"></a>\n<a href=\"https://opencollective.com/debug/sponsor/18/website\" target=\"_blank\"><img src=\"https://opencollective.com/debug/sponsor/18/avatar.svg\"></a>\n<a href=\"https://opencollective.com/debug/sponsor/19/website\" target=\"_blank\"><img src=\"https://opencollective.com/debug/sponsor/19/avatar.svg\"></a>\n<a href=\"https://opencollective.com/debug/sponsor/20/website\" target=\"_blank\"><img src=\"https://opencollective.com/debug/sponsor/20/avatar.svg\"></a>\n<a href=\"https://opencollective.com/debug/sponsor/21/website\" target=\"_blank\"><img src=\"https://opencollective.com/debug/sponsor/21/avatar.svg\"></a>\n<a href=\"https://opencollective.com/debug/sponsor/22/website\" target=\"_blank\"><img src=\"https://opencollective.com/debug/sponsor/22/avatar.svg\"></a>\n<a href=\"https://opencollective.com/debug/sponsor/23/website\" target=\"_blank\"><img src=\"https://opencollective.com/debug/sponsor/23/avatar.svg\"></a>\n<a href=\"https://opencollective.com/debug/sponsor/24/website\" target=\"_blank\"><img src=\"https://opencollective.com/debug/sponsor/24/avatar.svg\"></a>\n<a href=\"https://opencollective.com/debug/sponsor/25/website\" target=\"_blank\"><img src=\"https://opencollective.com/debug/sponsor/25/avatar.svg\"></a>\n<a href=\"https://opencollective.com/debug/sponsor/26/website\" target=\"_blank\"><img src=\"https://opencollective.com/debug/sponsor/26/avatar.svg\"></a>\n<a href=\"https://opencollective.com/debug/sponsor/27/website\" target=\"_blank\"><img src=\"https://opencollective.com/debug/sponsor/27/avatar.svg\"></a>\n<a href=\"https://opencollective.com/debug/sponsor/28/website\" target=\"_blank\"><img src=\"https://opencollective.com/debug/sponsor/28/avatar.svg\"></a>\n<a href=\"https://opencollective.com/debug/sponsor/29/website\" target=\"_blank\"><img src=\"https://opencollective.com/debug/sponsor/29/avatar.svg\"></a>\n\n## License\n\n(The MIT License)\n\nCopyright (c) 2014-2017 TJ Holowaychuk &lt;tj@vision-media.ca&gt;\nCopyright (c) 2018-2021 Josh Junon\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n/src/node.js\u0012M/**\n * Module dependencies.\n */\n\nconst tty = require('tty');\nconst util = require('util');\n\n/**\n * This is the Node.js implementation of `debug()`.\n */\n\nexports.init = init;\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.destroy = util.deprecate(\n\t() => {},\n\t'Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'\n);\n\n/**\n * Colors.\n */\n\nexports.colors = [6, 2, 3, 4, 5, 1];\n\ntry {\n\t// Optional dependency (as in, doesn't need to be installed, NOT like optionalDependencies in package.json)\n\t// eslint-disable-next-line import/no-extraneous-dependencies\n\tconst supportsColor = require('supports-color');\n\n\tif (supportsColor && (supportsColor.stderr || supportsColor).level >= 2) {\n\t\texports.colors = [\n\t\t\t20,\n\t\t\t21,\n\t\t\t26,\n\t\t\t27,\n\t\t\t32,\n\t\t\t33,\n\t\t\t38,\n\t\t\t39,\n\t\t\t40,\n\t\t\t41,\n\t\t\t42,\n\t\t\t43,\n\t\t\t44,\n\t\t\t45,\n\t\t\t56,\n\t\t\t57,\n\t\t\t62,\n\t\t\t63,\n\t\t\t68,\n\t\t\t69,\n\t\t\t74,\n\t\t\t75,\n\t\t\t76,\n\t\t\t77,\n\t\t\t78,\n\t\t\t79,\n\t\t\t80,\n\t\t\t81,\n\t\t\t92,\n\t\t\t93,\n\t\t\t98,\n\t\t\t99,\n\t\t\t112,\n\t\t\t113,\n\t\t\t128,\n\t\t\t129,\n\t\t\t134,\n\t\t\t135,\n\t\t\t148,\n\t\t\t149,\n\t\t\t160,\n\t\t\t161,\n\t\t\t162,\n\t\t\t163,\n\t\t\t164,\n\t\t\t165,\n\t\t\t166,\n\t\t\t167,\n\t\t\t168,\n\t\t\t169,\n\t\t\t170,\n\t\t\t171,\n\t\t\t172,\n\t\t\t173,\n\t\t\t178,\n\t\t\t179,\n\t\t\t184,\n\t\t\t185,\n\t\t\t196,\n\t\t\t197,\n\t\t\t198,\n\t\t\t199,\n\t\t\t200,\n\t\t\t201,\n\t\t\t202,\n\t\t\t203,\n\t\t\t204,\n\t\t\t205,\n\t\t\t206,\n\t\t\t207,\n\t\t\t208,\n\t\t\t209,\n\t\t\t214,\n\t\t\t215,\n\t\t\t220,\n\t\t\t221\n\t\t];\n\t}\n} catch (error) {\n\t// Swallow - we only care if `supports-color` is available; it doesn't have to be.\n}\n\n/**\n * Build up the default `inspectOpts` object from the environment variables.\n *\n *   $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js\n */\n\nexports.inspectOpts = Object.keys(process.env).filter(key => {\n\treturn /^debug_/i.test(key);\n}).reduce((obj, key) => {\n\t// Camel-case\n\tconst prop = key\n\t\t.substring(6)\n\t\t.toLowerCase()\n\t\t.replace(/_([a-z])/g, (_, k) => {\n\t\t\treturn k.toUpperCase();\n\t\t});\n\n\t// Coerce string value into JS value\n\tlet val = process.env[key];\n\tif (/^(yes|on|true|enabled)$/i.test(val)) {\n\t\tval = true;\n\t} else if (/^(no|off|false|disabled)$/i.test(val)) {\n\t\tval = false;\n\t} else if (val === 'null') {\n\t\tval = null;\n\t} else {\n\t\tval = Number(val);\n\t}\n\n\tobj[prop] = val;\n\treturn obj;\n}, {});\n\n/**\n * Is stdout a TTY? Colored output is enabled when `true`.\n */\n\nfunction useColors() {\n\treturn 'colors' in exports.inspectOpts ?\n\t\tBoolean(exports.inspectOpts.colors) :\n\t\ttty.isatty(process.stderr.fd);\n}\n\n/**\n * Adds ANSI color escape codes if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\tconst {namespace: name, useColors} = this;\n\n\tif (useColors) {\n\t\tconst c = this.color;\n\t\tconst colorCode = '\\u001B[3' + (c < 8 ? c : '8;5;' + c);\n\t\tconst prefix = `  ${colorCode};1m${name} \\u001B[0m`;\n\n\t\targs[0] = prefix + args[0].split('\\n').join('\\n' + prefix);\n\t\targs.push(colorCode + 'm+' + module.exports.humanize(this.diff) + '\\u001B[0m');\n\t} else {\n\t\targs[0] = getDate() + name + ' ' + args[0];\n\t}\n}\n\nfunction getDate() {\n\tif (exports.inspectOpts.hideDate) {\n\t\treturn '';\n\t}\n\treturn new Date().toISOString() + ' ';\n}\n\n/**\n * Invokes `util.format()` with the specified arguments and writes to stderr.\n */\n\nfunction log(...args) {\n\treturn process.stderr.write(util.format(...args) + '\\n');\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\tif (namespaces) {\n\t\tprocess.env.DEBUG = namespaces;\n\t} else {\n\t\t// If you set a process.env field to null or undefined, it gets cast to the\n\t\t// string 'null' or 'undefined'. Just delete instead.\n\t\tdelete process.env.DEBUG;\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n\treturn process.env.DEBUG;\n}\n\n/**\n * Init logic for `debug` instances.\n *\n * Create a new `inspectOpts` object in case `useColors` is set\n * differently for a particular `debug` instance.\n */\n\nfunction init(debug) {\n\tdebug.inspectOpts = {};\n\n\tconst keys = Object.keys(exports.inspectOpts);\n\tfor (let i = 0; i < keys.length; i++) {\n\t\tdebug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %o to `util.inspect()`, all on a single line.\n */\n\nformatters.o = function (v) {\n\tthis.inspectOpts.colors = this.useColors;\n\treturn util.inspect(v, this.inspectOpts)\n\t\t.split('\\n')\n\t\t.map(str => str.trim())\n\t\t.join(' ');\n};\n\n/**\n * Map %O to `util.inspect()`, allowing multiple lines if needed.\n */\n\nformatters.O = function (v) {\n\tthis.inspectOpts.colors = this.useColors;\n\treturn util.inspect(v, this.inspectOpts);\n};\n/src/common.js\u0018\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n\tcreateDebug.debug = createDebug;\n\tcreateDebug.default = createDebug;\n\tcreateDebug.coerce = coerce;\n\tcreateDebug.disable = disable;\n\tcreateDebug.enable = enable;\n\tcreateDebug.enabled = enabled;\n\tcreateDebug.humanize = require('ms');\n\tcreateDebug.destroy = destroy;\n\n\tObject.keys(env).forEach(key => {\n\t\tcreateDebug[key] = env[key];\n\t});\n\n\t/**\n\t* The currently active debug mode names, and names to skip.\n\t*/\n\n\tcreateDebug.names = [];\n\tcreateDebug.skips = [];\n\n\t/**\n\t* Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t*\n\t* Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t*/\n\tcreateDebug.formatters = {};\n\n\t/**\n\t* Selects a color for a debug namespace\n\t* @param {String} namespace The namespace string for the debug instance to be colored\n\t* @return {Number|String} An ANSI color code for the given namespace\n\t* @api private\n\t*/\n\tfunction selectColor(namespace) {\n\t\tlet hash = 0;\n\n\t\tfor (let i = 0; i < namespace.length; i++) {\n\t\t\thash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n\t\t\thash |= 0; // Convert to 32bit integer\n\t\t}\n\n\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t}\n\tcreateDebug.selectColor = selectColor;\n\n\t/**\n\t* Create a debugger with the given `namespace`.\n\t*\n\t* @param {String} namespace\n\t* @return {Function}\n\t* @api public\n\t*/\n\tfunction createDebug(namespace) {\n\t\tlet prevTime;\n\t\tlet enableOverride = null;\n\t\tlet namespacesCache;\n\t\tlet enabledCache;\n\n\t\tfunction debug(...args) {\n\t\t\t// Disabled?\n\t\t\tif (!debug.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst self = debug;\n\n\t\t\t// Set `diff` timestamp\n\t\t\tconst curr = Number(new Date());\n\t\t\tconst ms = curr - (prevTime || curr);\n\t\t\tself.diff = ms;\n\t\t\tself.prev = prevTime;\n\t\t\tself.curr = curr;\n\t\t\tprevTime = curr;\n\n\t\t\targs[0] = createDebug.coerce(args[0]);\n\n\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\targs.unshift('%O');\n\t\t\t}\n\n\t\t\t// Apply any `formatters` transformations\n\t\t\tlet index = 0;\n\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {\n\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\tif (match === '%%') {\n\t\t\t\t\treturn '%';\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t\tconst formatter = createDebug.formatters[format];\n\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\tconst val = args[index];\n\t\t\t\t\tmatch = formatter.call(self, val);\n\n\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\tindex--;\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\n\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\tcreateDebug.formatArgs.call(self, args);\n\n\t\t\tconst logFn = self.log || createDebug.log;\n\t\t\tlogFn.apply(self, args);\n\t\t}\n\n\t\tdebug.namespace = namespace;\n\t\tdebug.useColors = createDebug.useColors();\n\t\tdebug.color = createDebug.selectColor(namespace);\n\t\tdebug.extend = extend;\n\t\tdebug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release.\n\n\t\tObject.defineProperty(debug, 'enabled', {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: false,\n\t\t\tget: () => {\n\t\t\t\tif (enableOverride !== null) {\n\t\t\t\t\treturn enableOverride;\n\t\t\t\t}\n\t\t\t\tif (namespacesCache !== createDebug.namespaces) {\n\t\t\t\t\tnamespacesCache = createDebug.namespaces;\n\t\t\t\t\tenabledCache = createDebug.enabled(namespace);\n\t\t\t\t}\n\n\t\t\t\treturn enabledCache;\n\t\t\t},\n\t\t\tset: v => {\n\t\t\t\tenableOverride = v;\n\t\t\t}\n\t\t});\n\n\t\t// Env-specific initialization logic for debug instances\n\t\tif (typeof createDebug.init === 'function') {\n\t\t\tcreateDebug.init(debug);\n\t\t}\n\n\t\treturn debug;\n\t}\n\n\tfunction extend(namespace, delimiter) {\n\t\tconst newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\tnewDebug.log = this.log;\n\t\treturn newDebug;\n\t}\n\n\t/**\n\t* Enables a debug mode by namespaces. This can include modes\n\t* separated by a colon and wildcards.\n\t*\n\t* @param {String} namespaces\n\t* @api public\n\t*/\n\tfunction enable(namespaces) {\n\t\tcreateDebug.save(namespaces);\n\t\tcreateDebug.namespaces = namespaces;\n\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\n\t\tlet i;\n\t\tconst split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n\t\tconst len = split.length;\n\n\t\tfor (i = 0; i < len; i++) {\n\t\t\tif (!split[i]) {\n\t\t\t\t// ignore empty strings\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tnamespaces = split[i].replace(/\\*/g, '.*?');\n\n\t\t\tif (namespaces[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(new RegExp('^' + namespaces.slice(1) + '$'));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(new RegExp('^' + namespaces + '$'));\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t* Disable debug output.\n\t*\n\t* @return {String} namespaces\n\t* @api public\n\t*/\n\tfunction disable() {\n\t\tconst namespaces = [\n\t\t\t...createDebug.names.map(toNamespace),\n\t\t\t...createDebug.skips.map(toNamespace).map(namespace => '-' + namespace)\n\t\t].join(',');\n\t\tcreateDebug.enable('');\n\t\treturn namespaces;\n\t}\n\n\t/**\n\t* Returns true if the given mode name is enabled, false otherwise.\n\t*\n\t* @param {String} name\n\t* @return {Boolean}\n\t* @api public\n\t*/\n\tfunction enabled(name) {\n\t\tif (name[name.length - 1] === '*') {\n\t\t\treturn true;\n\t\t}\n\n\t\tlet i;\n\t\tlet len;\n\n\t\tfor (i = 0, len = createDebug.skips.length; i < len; i++) {\n\t\t\tif (createDebug.skips[i].test(name)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (i = 0, len = createDebug.names.length; i < len; i++) {\n\t\t\tif (createDebug.names[i].test(name)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t* Convert regexp to namespace\n\t*\n\t* @param {RegExp} regxep\n\t* @return {String} namespace\n\t* @api private\n\t*/\n\tfunction toNamespace(regexp) {\n\t\treturn regexp.toString()\n\t\t\t.substring(2, regexp.toString().length - 2)\n\t\t\t.replace(/\\.\\*\\?$/, '*');\n\t}\n\n\t/**\n\t* Coerce `val`.\n\t*\n\t* @param {Mixed} val\n\t* @return {Mixed}\n\t* @api private\n\t*/\n\tfunction coerce(val) {\n\t\tif (val instanceof Error) {\n\t\t\treturn val.stack || val.message;\n\t\t}\n\t\treturn val;\n\t}\n\n\t/**\n\t* XXX DO NOT USE. This is a temporary stub function.\n\t* XXX It WILL be removed in the next major release.\n\t*/\n\tfunction destroy() {\n\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t}\n\n\tcreateDebug.enable(createDebug.load());\n\n\treturn createDebug;\n}\n\nmodule.exports = setup;\n/package.json\u0005{\n  \"name\": \"debug\",\n  \"version\": \"4.3.4\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git://github.com/debug-js/debug.git\"\n  },\n  \"description\": \"Lightweight debugging utility for Node.js and the browser\",\n  \"keywords\": [\n    \"debug\",\n    \"log\",\n    \"debugger\"\n  ],\n  \"files\": [\n    \"src\",\n    \"LICENSE\",\n    \"README.md\"\n  ],\n  \"author\": \"Josh Junon <josh.junon@protonmail.com>\",\n  \"contributors\": [\n    \"TJ Holowaychuk <tj@vision-media.ca>\",\n    \"Nathan Rajlich <nathan@tootallnate.net> (http://n8.io)\",\n    \"Andrew Rhyne <rhyneandrew@gmail.com>\"\n  ],\n  \"license\": \"MIT\",\n  \"scripts\": {\n    \"lint\": \"xo\",\n    \"test\": \"npm run test:node && npm run test:browser && npm run lint\",\n    \"test:node\": \"istanbul cover _mocha -- test.js\",\n    \"test:browser\": \"karma start --single-run\",\n    \"test:coverage\": \"cat ./coverage/lcov.info | coveralls\"\n  },\n  \"dependencies\": {\n    \"ms\": \"2.1.2\"\n  },\n  \"devDependencies\": {\n    \"brfs\": \"^2.0.1\",\n    \"browserify\": \"^16.2.3\",\n    \"coveralls\": \"^3.0.2\",\n    \"istanbul\": \"^0.4.5\",\n    \"karma\": \"^3.1.4\",\n    \"karma-browserify\": \"^6.0.0\",\n    \"karma-chrome-launcher\": \"^2.2.0\",\n    \"karma-mocha\": \"^1.3.0\",\n    \"mocha\": \"^5.2.0\",\n    \"mocha-lcov-reporter\": \"^1.2.0\",\n    \"xo\": \"^0.23.0\"\n  },\n  \"peerDependenciesMeta\": {\n    \"supports-color\": {\n      \"optional\": true\n    }\n  },\n  \"main\": \"./src/index.js\",\n  \"browser\": \"./src/browser.js\",\n  \"engines\": {\n    \"node\": \">=6.0\"\n  }\n}\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/ZGVlcC1pc0AwLjEuNA==",
    "content": "/test/NaN.js\u0001Ivar test = require('tape');\nvar equal = require('../');\n\ntest('NaN and 0 values', function (t) {\n    t.ok(equal(NaN, NaN));\n    t.notOk(equal(0, NaN));\n    t.ok(equal(0, 0));\n    t.notOk(equal(0, 1));\n    t.end();\n});\n\n\ntest('nested NaN values', function (t) {\n    t.ok(equal([ NaN, 1, NaN ], [ NaN, 1, NaN ]));\n    t.end();\n});\n/README.markdown\u0005deep-is\n==========\n\nNode's `assert.deepEqual() algorithm` as a standalone module. Exactly like\n[deep-equal](https://github.com/substack/node-deep-equal) except for the fact that `deepEqual(NaN, NaN) === true`.\n\nThis module is around [5 times faster](https://gist.github.com/2790507)\nthan wrapping `assert.deepEqual()` in a `try/catch`.\n\n[![browser support](http://ci.testling.com/thlorenz/deep-is.png)](http://ci.testling.com/thlorenz/deep-is)\n\n[![build status](https://secure.travis-ci.org/thlorenz/deep-is.png)](http://travis-ci.org/thlorenz/deep-is)\n\nexample\n=======\n\n``` js\nvar equal = require('deep-is');\nconsole.dir([\n    equal(\n        { a : [ 2, 3 ], b : [ 4 ] },\n        { a : [ 2, 3 ], b : [ 4 ] }\n    ),\n    equal(\n        { x : 5, y : [6] },\n        { x : 5, y : 6 }\n    )\n]);\n```\n\nmethods\n=======\n\nvar deepIs = require('deep-is')\n\ndeepIs(a, b)\n---------------\n\nCompare objects `a` and `b`, returning whether they are equal according to a\nrecursive equality algorithm.\n\ninstall\n=======\n\nWith [npm](http://npmjs.org) do:\n\n```\nnpm install deep-is\n```\n\ntest\n====\n\nWith [npm](http://npmjs.org) do:\n\n```\nnpm test\n```\n\nlicense\n=======\n\nCopyright (c) 2012, 2013 Thorsten Lorenz <thlorenz@gmx.de>\nCopyright (c) 2012 James Halliday <mail@substack.net>\n\nDerived largely from node's assert module, which has the copyright statement:\n\nCopyright (c) 2009 Thomas Robinson <280north.com>\n\nReleased under the MIT license, see LICENSE for details.\n/index.js\f var pSlice = Array.prototype.slice;\nvar Object_keys = typeof Object.keys === 'function'\n    ? Object.keys\n    : function (obj) {\n        var keys = [];\n        for (var key in obj) keys.push(key);\n        return keys;\n    }\n;\n\nvar deepEqual = module.exports = function (actual, expected) {\n  // enforce Object.is +0 !== -0\n  if (actual === 0 && expected === 0) {\n    return areZerosEqual(actual, expected);\n\n  // 7.1. All identical values are equivalent, as determined by ===.\n  } else if (actual === expected) {\n    return true;\n\n  } else if (actual instanceof Date && expected instanceof Date) {\n    return actual.getTime() === expected.getTime();\n\n  } else if (isNumberNaN(actual)) {\n    return isNumberNaN(expected);\n\n  // 7.3. Other pairs that do not both pass typeof value == 'object',\n  // equivalence is determined by ==.\n  } else if (typeof actual != 'object' && typeof expected != 'object') {\n    return actual == expected;\n\n  // 7.4. For all other Object pairs, including Array objects, equivalence is\n  // determined by having the same number of owned properties (as verified\n  // with Object.prototype.hasOwnProperty.call), the same set of keys\n  // (although not necessarily the same order), equivalent values for every\n  // corresponding key, and an identical 'prototype' property. Note: this\n  // accounts for both named and indexed properties on Arrays.\n  } else {\n    return objEquiv(actual, expected);\n  }\n};\n\nfunction isUndefinedOrNull(value) {\n  return value === null || value === undefined;\n}\n\nfunction isArguments(object) {\n  return Object.prototype.toString.call(object) == '[object Arguments]';\n}\n\nfunction isNumberNaN(value) {\n  // NaN === NaN -> false\n  return typeof value == 'number' && value !== value;\n}\n\nfunction areZerosEqual(zeroA, zeroB) {\n  // (1 / +0|0) -> Infinity, but (1 / -0) -> -Infinity and (Infinity !== -Infinity)\n  return (1 / zeroA) === (1 / zeroB);\n}\n\nfunction objEquiv(a, b) {\n  if (isUndefinedOrNull(a) || isUndefinedOrNull(b))\n    return false;\n\n  // an identical 'prototype' property.\n  if (a.prototype !== b.prototype) return false;\n  //~~~I've managed to break Object.keys through screwy arguments passing.\n  //   Converting to array solves the problem.\n  if (isArguments(a)) {\n    if (!isArguments(b)) {\n      return false;\n    }\n    a = pSlice.call(a);\n    b = pSlice.call(b);\n    return deepEqual(a, b);\n  }\n  try {\n    var ka = Object_keys(a),\n        kb = Object_keys(b),\n        key, i;\n  } catch (e) {//happens when one is a string literal and the other isn't\n    return false;\n  }\n  // having the same number of owned properties (keys incorporates\n  // hasOwnProperty)\n  if (ka.length != kb.length)\n    return false;\n  //the same set of keys (although not necessarily the same order),\n  ka.sort();\n  kb.sort();\n  //~~~cheap key test\n  for (i = ka.length - 1; i >= 0; i--) {\n    if (ka[i] != kb[i])\n      return false;\n  }\n  //equivalent values for every corresponding key, and\n  //~~~possibly expensive deep test\n  for (i = ka.length - 1; i >= 0; i--) {\n    key = ka[i];\n    if (!deepEqual(a[key], b[key])) return false;\n  }\n  return true;\n}\n/example/cmp.jsvar equal = require('../');\nconsole.dir([\n    equal(\n        { a : [ 2, 3 ], b : [ 4 ] },\n        { a : [ 2, 3 ], b : [ 4 ] }\n    ),\n    equal(\n        { x : 5, y : [6] },\n        { x : 5, y : 6 }\n    )\n]);\n/package.json\u0003{\n  \"name\": \"deep-is\",\n  \"version\": \"0.1.4\",\n  \"description\": \"node's assert.deepEqual algorithm except for NaN being equal to NaN\",\n  \"main\": \"index.js\",\n  \"directories\": {\n    \"lib\": \".\",\n    \"example\": \"example\",\n    \"test\": \"test\"\n  },\n  \"scripts\": {\n    \"test\": \"tape test/*.js\"\n  },\n  \"devDependencies\": {\n    \"tape\": \"~1.0.2\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"http://github.com/thlorenz/deep-is.git\"\n  },\n  \"keywords\": [\n    \"equality\",\n    \"equal\",\n    \"compare\"\n  ],\n  \"author\": {\n    \"name\": \"Thorsten Lorenz\",\n    \"email\": \"thlorenz@gmx.de\",\n    \"url\": \"http://thlorenz.com\"\n  },\n  \"license\": \"MIT\",\n  \"testling\": {\n    \"files\": \"test/*.js\",\n    \"browsers\": {\n      \"ie\": [\n        6,\n        7,\n        8,\n        9\n      ],\n      \"ff\": [\n        3.5,\n        10,\n        15\n      ],\n      \"chrome\": [\n        10,\n        22\n      ],\n      \"safari\": [\n        5.1\n      ],\n      \"opera\": [\n        12\n      ]\n    }\n  }\n}\n/test/cmp.js\u0001var test = require('tape');\nvar equal = require('../');\n\ntest('equal', function (t) {\n    t.ok(equal(\n        { a : [ 2, 3 ], b : [ 4 ] },\n        { a : [ 2, 3 ], b : [ 4 ] }\n    ));\n    t.end();\n});\n\ntest('not equal', function (t) {\n    t.notOk(equal(\n        { x : 5, y : [6] },\n        { x : 5, y : 6 }\n    ));\n    t.end();\n});\n\ntest('nested nulls', function (t) {\n    t.ok(equal([ null, null, null ], [ null, null, null ]));\n    t.end();\n});\n/.travis.yml4language: node_js\nnode_js:\n  - 0.6\n  - 0.8\n  - 0.10\n/LICENSE\u0004Copyright (c) 2012, 2013 Thorsten Lorenz <thlorenz@gmx.de>\nCopyright (c) 2012 James Halliday <mail@substack.net>\nCopyright (c) 2009 Thomas Robinson <280north.com>\n\nThis software is released under the MIT license:\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n/test/neg-vs-pos-0.js\u0001Wvar test = require('tape');\nvar equal = require('../');\n\ntest('0 values', function (t) {\n    t.ok(equal( 0,  0), ' 0 ===  0');\n    t.ok(equal( 0, +0), ' 0 === +0');\n    t.ok(equal(+0, +0), '+0 === +0');\n    t.ok(equal(-0, -0), '-0 === -0');\n\n    t.notOk(equal(-0,  0), '-0 !==  0');\n    t.notOk(equal(-0, +0), '-0 !== +0');\n\n    t.end();\n});\n\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/ZGVlcG1lcmdlQDQuMy4x",
    "content": "/.eslintcache\u0001~[{\"/Users/joshduff/code/deepmerge/test/custom-is-mergeable-object.js\":\"1\"},{\"size\":1990,\"mtime\":1679007485753,\"results\":\"2\",\"hashOfConfig\":\"3\"},{\"filePath\":\"4\",\"messages\":\"5\",\"suppressedMessages\":\"6\",\"errorCount\":0,\"fatalErrorCount\":0,\"warningCount\":0,\"fixableErrorCount\":0,\"fixableWarningCount\":0},\"ktjd5k\",\"/Users/joshduff/code/deepmerge/test/custom-is-mergeable-object.js\",[],[]]/changelog.md&9# [4.3.1](https://github.com/TehShrike/deepmerge/releases/tag/v4.3.1)\n\n- Fix type definition for arrayMerge options.  [#239](https://github.com/TehShrike/deepmerge/pull/239)\n\n# [4.3.0](https://github.com/TehShrike/deepmerge/releases/tag/v4.3.0)\n\n- Avoid thrown errors if the target doesn't have `propertyIsEnumerable`.  [#252](https://github.com/TehShrike/deepmerge/pull/252)\n\n# [4.2.2](https://github.com/TehShrike/deepmerge/releases/tag/v4.2.2)\n\n- `isMergeableObject` is now only called if there are two values that could be merged.  [a34dd4d2](https://github.com/TehShrike/deepmerge/commit/a34dd4d25bf5e250653540a2022bc832c7b00a19)\n\n# [4.2.1](https://github.com/TehShrike/deepmerge/releases/tag/v4.2.1)\n\n- Fix: falsey values can now be merged.  [#170](https://github.com/TehShrike/deepmerge/issues/170)\n\n# [4.2.0](https://github.com/TehShrike/deepmerge/releases/tag/v4.2.0)\n\n- Properties are now only overwritten if they exist on the target object and are enumerable.  [#164](https://github.com/TehShrike/deepmerge/pull/164)\n\nTechnically this could probably be a patch release since \"which properties get overwritten\" wasn't documented and accidentally overwriting a built-in function or some function up the property chain would almost certainly be undesirable, but it feels like a gray area, so here we are with a feature version bump.\n\n# [4.1.2](https://github.com/TehShrike/deepmerge/releases/tag/v4.1.2)\n\n- Rolled back #167 since `Object.assign` breaks ES5 support.  [55067352](https://github.com/TehShrike/deepmerge/commit/55067352a92c65a6c44a5165f3387720aae1e192)\n\n# [4.1.1](https://github.com/TehShrike/deepmerge/releases/tag/v4.1.1)\n\n- The `options` argument is no longer mutated [#167](https://github.com/TehShrike/deepmerge/pull/167)\n\n# [4.1.0](https://github.com/TehShrike/deepmerge/releases/tag/v4.1.0)\n\n- `cloneUnlessOtherwiseSpecified` is now exposed to the `arrayMerge` function [#165](https://github.com/TehShrike/deepmerge/pull/165)\n\n# [4.0.0](https://github.com/TehShrike/deepmerge/releases/tag/v4.0.0)\n\n- The `main` entry point in `package.json` is now a CommonJS module instead of a UMD module [#155](https://github.com/TehShrike/deepmerge/pull/155)\n\n# [3.3.0](https://github.com/TehShrike/deepmerge/releases/tag/v3.3.0)\n\n- Enumerable Symbol properties are now copied [#151](https://github.com/TehShrike/deepmerge/pull/151)\n\n# [3.2.1](https://github.com/TehShrike/deepmerge/releases/tag/v3.2.1)\n\n- bumping dev dependency versions to try to shut up bogus security warnings from Github/npm [#149](https://github.com/TehShrike/deepmerge/pull/149)\n\n# [3.2.0](https://github.com/TehShrike/deepmerge/releases/tag/v3.2.0)\n\n- feature: added the [`customMerge`](https://github.com/TehShrike/deepmerge#custommerge) option [#133](https://github.com/TehShrike/deepmerge/pull/133)\n\n# [3.1.0](https://github.com/TehShrike/deepmerge/releases/tag/v3.1.0)\n\n- typescript typing: make the `all` function generic [#129](https://github.com/TehShrike/deepmerge/pull/129)\n\n# [3.0.0](https://github.com/TehShrike/deepmerge/releases/tag/v3.0.0)\n\n- drop ES module build [#123](https://github.com/TehShrike/deepmerge/issues/123)\n\n# [2.2.1](https://github.com/TehShrike/deepmerge/releases/tag/v2.2.1)\n\n- bug: typescript export type was wrong [#121](https://github.com/TehShrike/deepmerge/pull/121)\n\n# [2.2.0](https://github.com/TehShrike/deepmerge/releases/tag/v2.2.0)\n\n- feature: added TypeScript typings [#119](https://github.com/TehShrike/deepmerge/pull/119)\n\n# [2.1.1](https://github.com/TehShrike/deepmerge/releases/tag/v2.1.1)\n\n- documentation: Rename \"methods\" to \"api\", note ESM syntax [#103](https://github.com/TehShrike/deepmerge/pull/103)\n- documentation: Fix grammar [#107](https://github.com/TehShrike/deepmerge/pull/107)\n- documentation: Restructure headers for clarity + some wording tweaks [108](https://github.com/TehShrike/deepmerge/pull/108) + [109](https://github.com/TehShrike/deepmerge/pull/109)\n\n\n# [2.1.0](https://github.com/TehShrike/deepmerge/releases/tag/v2.1.0)\n\n- feature: Support a custom `isMergeableObject` function [#96](https://github.com/TehShrike/deepmerge/pull/96)\n- documentation: note a Webpack bug that some users might need to work around [#100](https://github.com/TehShrike/deepmerge/pull/100)\n\n# [2.0.1](https://github.com/TehShrike/deepmerge/releases/tag/v2.0.1)\n\n- documentation: fix the old array merge algorithm in the readme.  [#84](https://github.com/TehShrike/deepmerge/pull/84)\n\n# [2.0.0](https://github.com/TehShrike/deepmerge/releases/tag/v2.0.0)\n\n- breaking: the array merge algorithm has changed from a complicated thing to `target.concat(source).map(element => cloneUnlessOtherwiseSpecified(element, optionsArgument))`\n- breaking: The `clone` option now defaults to `true`\n- feature: `merge.all` now accepts an array of any size, even 0 or 1 elements\n\nSee [pull request 77](https://github.com/TehShrike/deepmerge/pull/77).\n\n# [1.5.2](https://github.com/TehShrike/deepmerge/releases/tag/v1.5.2)\n\n- fix: no longer attempts to merge React elements [#76](https://github.com/TehShrike/deepmerge/issues/76)\n\n# [1.5.1](https://github.com/TehShrike/deepmerge/releases/tag/v1.5.1)\n\n- bower support: officially dropping bower support.  If you use bower, please depend on the [unpkg distribution](https://unpkg.com/deepmerge/dist/umd.js).  See [#63](https://github.com/TehShrike/deepmerge/issues/63)\n\n# [1.5.0](https://github.com/TehShrike/deepmerge/releases/tag/v1.5.0)\n\n- bug fix: merging objects into arrays was allowed, and doesn't make any sense. [#65](https://github.com/TehShrike/deepmerge/issues/65) published as a feature release instead of a patch because it is a decent behavior change.\n\n# [1.4.4](https://github.com/TehShrike/deepmerge/releases/tag/v1.4.4)\n\n- bower support: updated `main` in bower.json\n\n# [1.4.3](https://github.com/TehShrike/deepmerge/releases/tag/v1.4.3)\n\n- bower support: inline is-mergeable-object in a new CommonJS build, so that people using both bower and CommonJS can bundle the library [0b34e6](https://github.com/TehShrike/deepmerge/commit/0b34e6e95f989f2fc8091d25f0d291c08f3d2d24)\n\n# [1.4.2](https://github.com/TehShrike/deepmerge/releases/tag/v1.4.2)\n\n- performance: bump is-mergeable-object dependency version for a slight performance improvement [5906c7](https://github.com/TehShrike/deepmerge/commit/5906c765d691d48e83d76efbb0d4b9ca150dc12c)\n\n# [1.4.1](https://github.com/TehShrike/deepmerge/releases/tag/v1.4.1)\n\n- documentation: fix unpkg link [acc45b](https://github.com/TehShrike/deepmerge/commit/acc45be85519c1df906a72ecb24764b622d18d47)\n\n# [1.4.0](https://github.com/TehShrike/deepmerge/releases/tag/v1.4.0)\n\n- api: instead of only exporting a UMD module, expose a UMD module with `pkg.main`, a CJS module with `pkg.browser`, and an ES module with `pkg.module` [#62](https://github.com/TehShrike/deepmerge/pull/62)\n\n# [1.3.2](https://github.com/TehShrike/deepmerge/releases/tag/v1.3.2)\n\n- documentation: note the minified/gzipped file sizes [56](https://github.com/TehShrike/deepmerge/pull/56)\n- documentation: make data structures more readable in merge example: pull request [57](https://github.com/TehShrike/deepmerge/pull/57)\n\n# [1.3.1](https://github.com/TehShrike/deepmerge/releases/tag/v1.3.1)\n\n- documentation: clarify and test some array merging documentation: pull request [51](https://github.com/TehShrike/deepmerge/pull/51)\n\n# [1.3.0](https://github.com/TehShrike/deepmerge/releases/tag/v1.3.0)\n\n- feature: `merge.all`, a merge function that merges any number of objects: pull request [50](https://github.com/TehShrike/deepmerge/pull/50)\n\n# [1.2.0](https://github.com/TehShrike/deepmerge/releases/tag/v1.2.0)\n\n- fix: an error that would be thrown when an array would be merged onto a truthy non-array value: pull request [46](https://github.com/TehShrike/deepmerge/pull/46)\n- feature: the ability to clone: Issue [28](https://github.com/TehShrike/deepmerge/issues/28), pull requests [44](https://github.com/TehShrike/deepmerge/pull/44) and [48](https://github.com/TehShrike/deepmerge/pull/48)\n- maintenance: added tests + travis to `.npmignore`: pull request [47](https://github.com/TehShrike/deepmerge/pull/47)\n\n# [1.1.1](https://github.com/TehShrike/deepmerge/releases/tag/v1.1.1)\n\n- fix an issue where an error was thrown when merging an array onto a non-array: [Pull request 46](https://github.com/TehShrike/deepmerge/pull/46)\n\n# [1.1.0](https://github.com/TehShrike/deepmerge/releases/tag/v1.1.0)\n\n- allow consumers to specify their own array merging algorithm: [Pull request 37](https://github.com/TehShrike/deepmerge/pull/37)\n\n# [1.0.3](https://github.com/TehShrike/deepmerge/releases/tag/v1.0.3)\n\n- adding bower.json back: [Issue 38](https://github.com/TehShrike/deepmerge/pull/38)\n- updating keywords and Github links in package.json [bc3898e](https://github.com/TehShrike/deepmerge/commit/bc3898e587a56f74591328f40f656b0152c1d5eb)\n\n# [1.0.2](https://github.com/TehShrike/deepmerge/releases/tag/v1.0.2)\n\n- Updating the readme: dropping bower, testing that the example works: [7102fc](https://github.com/TehShrike/deepmerge/commit/7102fcc4ddec11e2d33205866f9f18df14e5aeb5)\n\n# [1.0.1](https://github.com/TehShrike/deepmerge/releases/tag/v1.0.1)\n\n- `null`, dates, and regular expressions are now properly merged in arrays: [Issue 18](https://github.com/TehShrike/deepmerge/pull/18), plus commit: [ef1c6b](https://github.com/TehShrike/deepmerge/commit/ef1c6bac8350ba12a24966f0bc7da02560827586)\n\n# 1.0.0\n\n- Should only be a patch change, because this module is READY. [Issue 15](https://github.com/TehShrike/deepmerge/issues/15)\n- Regular expressions are now treated like primitive values when merging: [Issue 30](https://github.com/TehShrike/deepmerge/pull/30)\n- Dates are now treated like primitives when merging: [Issue 31](https://github.com/TehShrike/deepmerge/issues/31)\n/package.json\u0004{\n  \"name\": \"deepmerge\",\n  \"description\": \"A library for deep (recursive) merging of Javascript objects\",\n  \"keywords\": [\n    \"merge\",\n    \"deep\",\n    \"extend\",\n    \"copy\",\n    \"clone\",\n    \"recursive\"\n  ],\n  \"version\": \"4.3.1\",\n  \"homepage\": \"https://github.com/TehShrike/deepmerge\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git://github.com/TehShrike/deepmerge.git\"\n  },\n  \"main\": \"dist/cjs.js\",\n  \"engines\": {\n    \"node\": \">=0.10.0\"\n  },\n  \"scripts\": {\n    \"build\": \"rollup -c\",\n    \"test\": \"npm run build && tape test/*.js && jsmd readme.md && npm run test:typescript\",\n    \"test:typescript\": \"tsc --noEmit test/typescript.ts && ts-node test/typescript.ts\",\n    \"size\": \"npm run build && uglifyjs --compress --mangle -- ./dist/umd.js | gzip -c | wc -c\"\n  },\n  \"devDependencies\": {\n    \"@types/node\": \"^8.10.54\",\n    \"is-mergeable-object\": \"1.1.0\",\n    \"is-plain-object\": \"^5.0.0\",\n    \"jsmd\": \"^1.0.2\",\n    \"rollup\": \"^1.23.1\",\n    \"rollup-plugin-commonjs\": \"^10.1.0\",\n    \"rollup-plugin-node-resolve\": \"^5.2.0\",\n    \"tape\": \"^4.11.0\",\n    \"ts-node\": \"7.0.1\",\n    \"typescript\": \"=2.2.2\",\n    \"uglify-js\": \"^3.6.1\"\n  },\n  \"license\": \"MIT\"\n}\n/readme.md\u00162# deepmerge\n\nMerges the enumerable properties of two or more objects deeply.\n\n> UMD bundle is 723B minified+gzipped\n\n## Getting Started\n\n### Example Usage\n<!--js\nconst merge = require('./')\n-->\n\n```js\nconst x = {\n\tfoo: { bar: 3 },\n\tarray: [{\n\t\tdoes: 'work',\n\t\ttoo: [ 1, 2, 3 ]\n\t}]\n}\n\nconst y = {\n\tfoo: { baz: 4 },\n\tquux: 5,\n\tarray: [{\n\t\tdoes: 'work',\n\t\ttoo: [ 4, 5, 6 ]\n\t}, {\n\t\treally: 'yes'\n\t}]\n}\n\nconst output = {\n\tfoo: {\n\t\tbar: 3,\n\t\tbaz: 4\n\t},\n\tarray: [{\n\t\tdoes: 'work',\n\t\ttoo: [ 1, 2, 3 ]\n\t}, {\n\t\tdoes: 'work',\n\t\ttoo: [ 4, 5, 6 ]\n\t}, {\n\t\treally: 'yes'\n\t}],\n\tquux: 5\n}\n\nmerge(x, y) // => output\n```\n\n\n### Installation\n\nWith [npm](http://npmjs.org) do:\n\n```sh\nnpm install deepmerge\n```\n\ndeepmerge can be used directly in the browser without the use of package managers/bundlers as well:  [UMD version from unpkg.com](https://unpkg.com/deepmerge/dist/umd.js).\n\n\n### Include\n\ndeepmerge exposes a CommonJS entry point:\n\n```\nconst merge = require('deepmerge')\n```\n\nThe ESM entry point was dropped due to a [Webpack bug](https://github.com/webpack/webpack/issues/6584).\n\n# API\n\n\n## `merge(x, y, [options])`\n\nMerge two objects `x` and `y` deeply, returning a new merged object with the\nelements from both `x` and `y`.\n\nIf an element at the same key is present for both `x` and `y`, the value from\n`y` will appear in the result.\n\nMerging creates a new object, so that neither `x` or `y` is modified.\n\n**Note:** By default, arrays are merged by concatenating them.\n\n## `merge.all(arrayOfObjects, [options])`\n\nMerges any number of objects into a single result object.\n\n```js\nconst foobar = { foo: { bar: 3 } }\nconst foobaz = { foo: { baz: 4 } }\nconst bar = { bar: 'yay!' }\n\nmerge.all([ foobar, foobaz, bar ]) // => { foo: { bar: 3, baz: 4 }, bar: 'yay!' }\n```\n\n\n## Options\n\n### `arrayMerge`\n\nThere are multiple ways to merge two arrays, below are a few examples but you can also create your own custom function.\n\nYour `arrayMerge` function will be called with three arguments: a `target` array, the `source` array, and an `options` object with these properties:\n\n- `isMergeableObject(value)`\n- `cloneUnlessOtherwiseSpecified(value, options)`\n\n#### `arrayMerge` example: overwrite target array\n\nOverwrites the existing array values completely rather than concatenating them:\n\n```js\nconst overwriteMerge = (destinationArray, sourceArray, options) => sourceArray\n\nmerge(\n\t[1, 2, 3],\n\t[3, 2, 1],\n\t{ arrayMerge: overwriteMerge }\n) // => [3, 2, 1]\n```\n\n#### `arrayMerge` example: combine arrays\n\nCombines objects at the same index in the two arrays.\n\nThis was the default array merging algorithm pre-version-2.0.0.\n\n```js\nconst combineMerge = (target, source, options) => {\n\tconst destination = target.slice()\n\n\tsource.forEach((item, index) => {\n\t\tif (typeof destination[index] === 'undefined') {\n\t\t\tdestination[index] = options.cloneUnlessOtherwiseSpecified(item, options)\n\t\t} else if (options.isMergeableObject(item)) {\n\t\t\tdestination[index] = merge(target[index], item, options)\n\t\t} else if (target.indexOf(item) === -1) {\n\t\t\tdestination.push(item)\n\t\t}\n\t})\n\treturn destination\n}\n\nmerge(\n\t[{ a: true }],\n\t[{ b: true }, 'ah yup'],\n\t{ arrayMerge: combineMerge }\n) // => [{ a: true, b: true }, 'ah yup']\n```\n\n### `isMergeableObject`\n\nBy default, deepmerge clones every property from almost every kind of object.\n\nYou may not want this, if your objects are of special types, and you want to copy the whole object instead of just copying its properties.\n\nYou can accomplish this by passing in a function for the `isMergeableObject` option.\n\nIf you only want to clone properties of plain objects, and ignore all \"special\" kinds of instantiated objects, you probably want to drop in [`is-plain-object`](https://github.com/jonschlinkert/is-plain-object).\n\n```js\nconst { isPlainObject } = require('is-plain-object')\n\nfunction SuperSpecial() {\n\tthis.special = 'oh yeah man totally'\n}\n\nconst instantiatedSpecialObject = new SuperSpecial()\n\nconst target = {\n\tsomeProperty: {\n\t\tcool: 'oh for sure'\n\t}\n}\n\nconst source = {\n\tsomeProperty: instantiatedSpecialObject\n}\n\nconst defaultOutput = merge(target, source)\n\ndefaultOutput.someProperty.cool // => 'oh for sure'\ndefaultOutput.someProperty.special // => 'oh yeah man totally'\ndefaultOutput.someProperty instanceof SuperSpecial // => false\n\nconst customMergeOutput = merge(target, source, {\n\tisMergeableObject: isPlainObject\n})\n\ncustomMergeOutput.someProperty.cool // => undefined\ncustomMergeOutput.someProperty.special // => 'oh yeah man totally'\ncustomMergeOutput.someProperty instanceof SuperSpecial // => true\n```\n\n### `customMerge`\n\nSpecifies a function which can be used to override the default merge behavior for a property, based on the property name.\n\nThe `customMerge` function will be passed the key for each property, and should return the function which should be used to merge the values for that property.\n\nIt may also return undefined, in which case the default merge behaviour will be used.\n\n```js\nconst alex = {\n\tname: {\n\t\tfirst: 'Alex',\n\t\tlast: 'Alexson'\n\t},\n\tpets: ['Cat', 'Parrot']\n}\n\nconst tony = {\n\tname: {\n\t\tfirst: 'Tony',\n\t\tlast: 'Tonison'\n\t},\n\tpets: ['Dog']\n}\n\nconst mergeNames = (nameA, nameB) => `${nameA.first} and ${nameB.first}`\n\nconst options = {\n\tcustomMerge: (key) => {\n\t\tif (key === 'name') {\n\t\t\treturn mergeNames\n\t\t}\n\t}\n}\n\nconst result = merge(alex, tony, options)\n\nresult.name // => 'Alex and Tony'\nresult.pets // => ['Cat', 'Parrot', 'Dog']\n```\n\n\n### `clone`\n\n*Deprecated.*\n\nDefaults to `true`.\n\nIf `clone` is `false` then child objects will be copied directly instead of being cloned.  This was the default behavior before version 2.x.\n\n\n# Testing\n\nWith [npm](http://npmjs.org) do:\n\n```sh\nnpm test\n```\n\n\n# License\n\nMIT\n/index.d.ts\u00037declare function deepmerge<T>(x: Partial<T>, y: Partial<T>, options?: deepmerge.Options): T;\ndeclare function deepmerge<T1, T2>(x: Partial<T1>, y: Partial<T2>, options?: deepmerge.Options): T1 & T2;\n\ndeclare namespace deepmerge {\n\texport interface Options {\n\t\tarrayMerge?(target: any[], source: any[], options?: ArrayMergeOptions): any[];\n\t\tclone?: boolean;\n\t\tcustomMerge?: (key: string, options?: Options) => ((x: any, y: any) => any) | undefined;\n\t\tisMergeableObject?(value: object): boolean;\n\t}\n\texport interface ArrayMergeOptions {\n\t\tisMergeableObject(value: object): boolean;\n\t\tcloneUnlessOtherwiseSpecified(value: object, options?: Options): object;\n\t}\n\n\texport function all (objects: object[], options?: Options): object;\n\texport function all<T> (objects: Partial<T>[], options?: Options): T;\n}\n\nexport = deepmerge;\n/rollup.config.js\u0001Wimport resolve from 'rollup-plugin-node-resolve'\nimport commonjs from 'rollup-plugin-commonjs'\nimport pkg from './package.json'\n\nexport default {\n\tinput: `index.js`,\n\tplugins: [\n\t\tcommonjs(),\n\t\tresolve(),\n\t],\n\toutput: [\n\t\t{\n\t\t\tfile: pkg.main,\n\t\t\tformat: `cjs`\n\t\t},\n\t\t{\n\t\t\tname: 'deepmerge',\n\t\t\tfile: 'dist/umd.js',\n\t\t\tformat: `umd`\n\t\t},\n\t],\n}\n/license.txt\u0004\\The MIT License (MIT)\n\nCopyright (c) 2012 James Halliday, Josh Duff, and other contributors\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n/.editorconfigqroot = true\n\n[*]\nindent_style = tab\nend_of_line = lf\ntrim_trailing_whitespace = true\ninsert_final_newline = true\n/dist/umd.js\u0011D(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t(global = global || self, global.deepmerge = factory());\n}(this, function () { 'use strict';\n\n\tvar isMergeableObject = function isMergeableObject(value) {\n\t\treturn isNonNullObject(value)\n\t\t\t&& !isSpecial(value)\n\t};\n\n\tfunction isNonNullObject(value) {\n\t\treturn !!value && typeof value === 'object'\n\t}\n\n\tfunction isSpecial(value) {\n\t\tvar stringValue = Object.prototype.toString.call(value);\n\n\t\treturn stringValue === '[object RegExp]'\n\t\t\t|| stringValue === '[object Date]'\n\t\t\t|| isReactElement(value)\n\t}\n\n\t// see https://github.com/facebook/react/blob/b5ac963fb791d1298e7f396236383bc955f916c1/src/isomorphic/classic/element/ReactElement.js#L21-L25\n\tvar canUseSymbol = typeof Symbol === 'function' && Symbol.for;\n\tvar REACT_ELEMENT_TYPE = canUseSymbol ? Symbol.for('react.element') : 0xeac7;\n\n\tfunction isReactElement(value) {\n\t\treturn value.$$typeof === REACT_ELEMENT_TYPE\n\t}\n\n\tfunction emptyTarget(val) {\n\t\treturn Array.isArray(val) ? [] : {}\n\t}\n\n\tfunction cloneUnlessOtherwiseSpecified(value, options) {\n\t\treturn (options.clone !== false && options.isMergeableObject(value))\n\t\t\t? deepmerge(emptyTarget(value), value, options)\n\t\t\t: value\n\t}\n\n\tfunction defaultArrayMerge(target, source, options) {\n\t\treturn target.concat(source).map(function(element) {\n\t\t\treturn cloneUnlessOtherwiseSpecified(element, options)\n\t\t})\n\t}\n\n\tfunction getMergeFunction(key, options) {\n\t\tif (!options.customMerge) {\n\t\t\treturn deepmerge\n\t\t}\n\t\tvar customMerge = options.customMerge(key);\n\t\treturn typeof customMerge === 'function' ? customMerge : deepmerge\n\t}\n\n\tfunction getEnumerableOwnPropertySymbols(target) {\n\t\treturn Object.getOwnPropertySymbols\n\t\t\t? Object.getOwnPropertySymbols(target).filter(function(symbol) {\n\t\t\t\treturn Object.propertyIsEnumerable.call(target, symbol)\n\t\t\t})\n\t\t\t: []\n\t}\n\n\tfunction getKeys(target) {\n\t\treturn Object.keys(target).concat(getEnumerableOwnPropertySymbols(target))\n\t}\n\n\tfunction propertyIsOnObject(object, property) {\n\t\ttry {\n\t\t\treturn property in object\n\t\t} catch(_) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\t// Protects from prototype poisoning and unexpected merging up the prototype chain.\n\tfunction propertyIsUnsafe(target, key) {\n\t\treturn propertyIsOnObject(target, key) // Properties are safe to merge if they don't exist in the target yet,\n\t\t\t&& !(Object.hasOwnProperty.call(target, key) // unsafe if they exist up the prototype chain,\n\t\t\t\t&& Object.propertyIsEnumerable.call(target, key)) // and also unsafe if they're nonenumerable.\n\t}\n\n\tfunction mergeObject(target, source, options) {\n\t\tvar destination = {};\n\t\tif (options.isMergeableObject(target)) {\n\t\t\tgetKeys(target).forEach(function(key) {\n\t\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(target[key], options);\n\t\t\t});\n\t\t}\n\t\tgetKeys(source).forEach(function(key) {\n\t\t\tif (propertyIsUnsafe(target, key)) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tif (propertyIsOnObject(target, key) && options.isMergeableObject(source[key])) {\n\t\t\t\tdestination[key] = getMergeFunction(key, options)(target[key], source[key], options);\n\t\t\t} else {\n\t\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(source[key], options);\n\t\t\t}\n\t\t});\n\t\treturn destination\n\t}\n\n\tfunction deepmerge(target, source, options) {\n\t\toptions = options || {};\n\t\toptions.arrayMerge = options.arrayMerge || defaultArrayMerge;\n\t\toptions.isMergeableObject = options.isMergeableObject || isMergeableObject;\n\t\t// cloneUnlessOtherwiseSpecified is added to `options` so that custom arrayMerge()\n\t\t// implementations can use it. The caller may not replace it.\n\t\toptions.cloneUnlessOtherwiseSpecified = cloneUnlessOtherwiseSpecified;\n\n\t\tvar sourceIsArray = Array.isArray(source);\n\t\tvar targetIsArray = Array.isArray(target);\n\t\tvar sourceAndTargetTypesMatch = sourceIsArray === targetIsArray;\n\n\t\tif (!sourceAndTargetTypesMatch) {\n\t\t\treturn cloneUnlessOtherwiseSpecified(source, options)\n\t\t} else if (sourceIsArray) {\n\t\t\treturn options.arrayMerge(target, source, options)\n\t\t} else {\n\t\t\treturn mergeObject(target, source, options)\n\t\t}\n\t}\n\n\tdeepmerge.all = function deepmergeAll(array, options) {\n\t\tif (!Array.isArray(array)) {\n\t\t\tthrow new Error('first argument should be an array')\n\t\t}\n\n\t\treturn array.reduce(function(prev, next) {\n\t\t\treturn deepmerge(prev, next, options)\n\t\t}, {})\n\t};\n\n\tvar deepmerge_1 = deepmerge;\n\n\treturn deepmerge_1;\n\n}));\n/index.js\fvar defaultIsMergeableObject = require('is-mergeable-object')\n\nfunction emptyTarget(val) {\n\treturn Array.isArray(val) ? [] : {}\n}\n\nfunction cloneUnlessOtherwiseSpecified(value, options) {\n\treturn (options.clone !== false && options.isMergeableObject(value))\n\t\t? deepmerge(emptyTarget(value), value, options)\n\t\t: value\n}\n\nfunction defaultArrayMerge(target, source, options) {\n\treturn target.concat(source).map(function(element) {\n\t\treturn cloneUnlessOtherwiseSpecified(element, options)\n\t})\n}\n\nfunction getMergeFunction(key, options) {\n\tif (!options.customMerge) {\n\t\treturn deepmerge\n\t}\n\tvar customMerge = options.customMerge(key)\n\treturn typeof customMerge === 'function' ? customMerge : deepmerge\n}\n\nfunction getEnumerableOwnPropertySymbols(target) {\n\treturn Object.getOwnPropertySymbols\n\t\t? Object.getOwnPropertySymbols(target).filter(function(symbol) {\n\t\t\treturn Object.propertyIsEnumerable.call(target, symbol)\n\t\t})\n\t\t: []\n}\n\nfunction getKeys(target) {\n\treturn Object.keys(target).concat(getEnumerableOwnPropertySymbols(target))\n}\n\nfunction propertyIsOnObject(object, property) {\n\ttry {\n\t\treturn property in object\n\t} catch(_) {\n\t\treturn false\n\t}\n}\n\n// Protects from prototype poisoning and unexpected merging up the prototype chain.\nfunction propertyIsUnsafe(target, key) {\n\treturn propertyIsOnObject(target, key) // Properties are safe to merge if they don't exist in the target yet,\n\t\t&& !(Object.hasOwnProperty.call(target, key) // unsafe if they exist up the prototype chain,\n\t\t\t&& Object.propertyIsEnumerable.call(target, key)) // and also unsafe if they're nonenumerable.\n}\n\nfunction mergeObject(target, source, options) {\n\tvar destination = {}\n\tif (options.isMergeableObject(target)) {\n\t\tgetKeys(target).forEach(function(key) {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(target[key], options)\n\t\t})\n\t}\n\tgetKeys(source).forEach(function(key) {\n\t\tif (propertyIsUnsafe(target, key)) {\n\t\t\treturn\n\t\t}\n\n\t\tif (propertyIsOnObject(target, key) && options.isMergeableObject(source[key])) {\n\t\t\tdestination[key] = getMergeFunction(key, options)(target[key], source[key], options)\n\t\t} else {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(source[key], options)\n\t\t}\n\t})\n\treturn destination\n}\n\nfunction deepmerge(target, source, options) {\n\toptions = options || {}\n\toptions.arrayMerge = options.arrayMerge || defaultArrayMerge\n\toptions.isMergeableObject = options.isMergeableObject || defaultIsMergeableObject\n\t// cloneUnlessOtherwiseSpecified is added to `options` so that custom arrayMerge()\n\t// implementations can use it. The caller may not replace it.\n\toptions.cloneUnlessOtherwiseSpecified = cloneUnlessOtherwiseSpecified\n\n\tvar sourceIsArray = Array.isArray(source)\n\tvar targetIsArray = Array.isArray(target)\n\tvar sourceAndTargetTypesMatch = sourceIsArray === targetIsArray\n\n\tif (!sourceAndTargetTypesMatch) {\n\t\treturn cloneUnlessOtherwiseSpecified(source, options)\n\t} else if (sourceIsArray) {\n\t\treturn options.arrayMerge(target, source, options)\n\t} else {\n\t\treturn mergeObject(target, source, options)\n\t}\n}\n\ndeepmerge.all = function deepmergeAll(array, options) {\n\tif (!Array.isArray(array)) {\n\t\tthrow new Error('first argument should be an array')\n\t}\n\n\treturn array.reduce(function(prev, next) {\n\t\treturn deepmerge(prev, next, options)\n\t}, {})\n}\n\nmodule.exports = deepmerge\n/dist/cjs.js\u000f'use strict';\n\nvar isMergeableObject = function isMergeableObject(value) {\n\treturn isNonNullObject(value)\n\t\t&& !isSpecial(value)\n};\n\nfunction isNonNullObject(value) {\n\treturn !!value && typeof value === 'object'\n}\n\nfunction isSpecial(value) {\n\tvar stringValue = Object.prototype.toString.call(value);\n\n\treturn stringValue === '[object RegExp]'\n\t\t|| stringValue === '[object Date]'\n\t\t|| isReactElement(value)\n}\n\n// see https://github.com/facebook/react/blob/b5ac963fb791d1298e7f396236383bc955f916c1/src/isomorphic/classic/element/ReactElement.js#L21-L25\nvar canUseSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = canUseSymbol ? Symbol.for('react.element') : 0xeac7;\n\nfunction isReactElement(value) {\n\treturn value.$$typeof === REACT_ELEMENT_TYPE\n}\n\nfunction emptyTarget(val) {\n\treturn Array.isArray(val) ? [] : {}\n}\n\nfunction cloneUnlessOtherwiseSpecified(value, options) {\n\treturn (options.clone !== false && options.isMergeableObject(value))\n\t\t? deepmerge(emptyTarget(value), value, options)\n\t\t: value\n}\n\nfunction defaultArrayMerge(target, source, options) {\n\treturn target.concat(source).map(function(element) {\n\t\treturn cloneUnlessOtherwiseSpecified(element, options)\n\t})\n}\n\nfunction getMergeFunction(key, options) {\n\tif (!options.customMerge) {\n\t\treturn deepmerge\n\t}\n\tvar customMerge = options.customMerge(key);\n\treturn typeof customMerge === 'function' ? customMerge : deepmerge\n}\n\nfunction getEnumerableOwnPropertySymbols(target) {\n\treturn Object.getOwnPropertySymbols\n\t\t? Object.getOwnPropertySymbols(target).filter(function(symbol) {\n\t\t\treturn Object.propertyIsEnumerable.call(target, symbol)\n\t\t})\n\t\t: []\n}\n\nfunction getKeys(target) {\n\treturn Object.keys(target).concat(getEnumerableOwnPropertySymbols(target))\n}\n\nfunction propertyIsOnObject(object, property) {\n\ttry {\n\t\treturn property in object\n\t} catch(_) {\n\t\treturn false\n\t}\n}\n\n// Protects from prototype poisoning and unexpected merging up the prototype chain.\nfunction propertyIsUnsafe(target, key) {\n\treturn propertyIsOnObject(target, key) // Properties are safe to merge if they don't exist in the target yet,\n\t\t&& !(Object.hasOwnProperty.call(target, key) // unsafe if they exist up the prototype chain,\n\t\t\t&& Object.propertyIsEnumerable.call(target, key)) // and also unsafe if they're nonenumerable.\n}\n\nfunction mergeObject(target, source, options) {\n\tvar destination = {};\n\tif (options.isMergeableObject(target)) {\n\t\tgetKeys(target).forEach(function(key) {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(target[key], options);\n\t\t});\n\t}\n\tgetKeys(source).forEach(function(key) {\n\t\tif (propertyIsUnsafe(target, key)) {\n\t\t\treturn\n\t\t}\n\n\t\tif (propertyIsOnObject(target, key) && options.isMergeableObject(source[key])) {\n\t\t\tdestination[key] = getMergeFunction(key, options)(target[key], source[key], options);\n\t\t} else {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(source[key], options);\n\t\t}\n\t});\n\treturn destination\n}\n\nfunction deepmerge(target, source, options) {\n\toptions = options || {};\n\toptions.arrayMerge = options.arrayMerge || defaultArrayMerge;\n\toptions.isMergeableObject = options.isMergeableObject || isMergeableObject;\n\t// cloneUnlessOtherwiseSpecified is added to `options` so that custom arrayMerge()\n\t// implementations can use it. The caller may not replace it.\n\toptions.cloneUnlessOtherwiseSpecified = cloneUnlessOtherwiseSpecified;\n\n\tvar sourceIsArray = Array.isArray(source);\n\tvar targetIsArray = Array.isArray(target);\n\tvar sourceAndTargetTypesMatch = sourceIsArray === targetIsArray;\n\n\tif (!sourceAndTargetTypesMatch) {\n\t\treturn cloneUnlessOtherwiseSpecified(source, options)\n\t} else if (sourceIsArray) {\n\t\treturn options.arrayMerge(target, source, options)\n\t} else {\n\t\treturn mergeObject(target, source, options)\n\t}\n}\n\ndeepmerge.all = function deepmergeAll(array, options) {\n\tif (!Array.isArray(array)) {\n\t\tthrow new Error('first argument should be an array')\n\t}\n\n\treturn array.reduce(function(prev, next) {\n\t\treturn deepmerge(prev, next, options)\n\t}, {})\n};\n\nvar deepmerge_1 = deepmerge;\n\nmodule.exports = deepmerge_1;\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/ZGVmYXVsdHNAMS4wLjQ=",
    "content": "/package.json\u0002x{\n\t\"name\": \"defaults\",\n\t\"version\": \"1.0.4\",\n\t\"description\": \"merge single level defaults over a config object\",\n\t\"main\": \"index.js\",\n\t\"funding\": \"https://github.com/sponsors/sindresorhus\",\n\t\"scripts\": {\n\t\t\"test\": \"node test.js\"\n\t},\n\t\"repository\": {\n\t\t\"type\": \"git\",\n\t\t\"url\": \"git://github.com/sindresorhus/node-defaults.git\"\n\t},\n\t\"keywords\": [\n\t\t\"config\",\n\t\t\"defaults\",\n\t\t\"options\",\n\t\t\"object\",\n\t\t\"merge\",\n\t\t\"assign\",\n\t\t\"properties\",\n\t\t\"deep\"\n\t],\n\t\"author\": \"Elijah Insua <tmpvar@gmail.com>\",\n\t\"license\": \"MIT\",\n\t\"readmeFilename\": \"README.md\",\n\t\"dependencies\": {\n\t\t\"clone\": \"^1.0.2\"\n\t},\n\t\"devDependencies\": {\n\t\t\"tap\": \"^2.0.0\"\n\t}\n}\n/LICENSE\u0004XThe MIT License (MIT)\n\nCopyright (c) 2022 Sindre Sorhus\nCopyright (c) 2015 Elijah Insua\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n/test.js\u0004\u001avar defaults = require('./'),\n    test = require('tap').test;\n\ntest(\"ensure options is an object\", function(t) {\n  var options = defaults(false, { a : true });\n  t.ok(options.a);\n  t.end()\n});\n\ntest(\"ensure defaults override keys\", function(t) {\n  var result = defaults({}, { a: false, b: true });\n  t.ok(result.b, 'b merges over undefined');\n  t.equal(result.a, false, 'a merges over undefined');\n  t.end();\n});\n\ntest(\"ensure defined keys are not overwritten\", function(t) {\n  var result = defaults({ b: false }, { a: false, b: true });\n  t.equal(result.b, false, 'b not merged');\n  t.equal(result.a, false, 'a merges over undefined');\n  t.end();\n});\n\ntest(\"ensure defaults clone nested objects\", function(t) {\n  var d = { a: [1,2,3], b: { hello : 'world' } };\n  var result = defaults({}, d);\n  t.equal(result.a.length, 3, 'objects should be clones');\n  t.ok(result.a !== d.a, 'objects should be clones');\n\n  t.equal(Object.keys(result.b).length, 1, 'objects should be clones');\n  t.ok(result.b !== d.b, 'objects should be clones');\n  t.end();\n});\n\n/README.md\u0003\u0003# defaults\n\n> A simple one level options merge utility\n\n## Install\n\n```sh\nnpm install defaults\n```\n\n## Usage\n\n```js\nconst defaults = require('defaults');\n\nconst handle = (options, fn) => {\n\toptions = defaults(options, {\n\t\ttimeout: 100\n\t});\n\n\tsetTimeout(() => {\n\t\tfn(options);\n\t}, options.timeout);\n}\n\nhandle({timeout: 1000}, () => {\n\t// We're here 1000 ms later\n});\n\nhandle({timeout: 10000}, () => {\n\t// We're here 10s later\n});\n```\n\n## Summary\n\nthis module exports a function that takes 2 arguments: `options` and `defaults`.  When called, it overrides all of `undefined` properties in `options` with the clones of properties defined in `defaults`\n\nSidecases: if called with a falsy `options` value, options will be initialized to a new object before being merged onto.\n/index.js\u0001\u0015var clone = require('clone');\n\nmodule.exports = function(options, defaults) {\n  options = options || {};\n\n  Object.keys(defaults).forEach(function(key) {\n    if (typeof options[key] === 'undefined') {\n      options[key] = clone(defaults[key]);\n    }\n  });\n\n  return options;\n};"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/ZGVsYXllZC1zdHJlYW1AMS4wLjA=",
    "content": "/Readme.md\u000f\u001f# delayed-stream\n\nBuffers events from a stream until you are ready to handle them.\n\n## Installation\n\n``` bash\nnpm install delayed-stream\n```\n\n## Usage\n\nThe following example shows how to write a http echo server that delays its\nresponse by 1000 ms.\n\n``` javascript\nvar DelayedStream = require('delayed-stream');\nvar http = require('http');\n\nhttp.createServer(function(req, res) {\n  var delayed = DelayedStream.create(req);\n\n  setTimeout(function() {\n    res.writeHead(200);\n    delayed.pipe(res);\n  }, 1000);\n});\n```\n\nIf you are not using `Stream#pipe`, you can also manually release the buffered\nevents by calling `delayedStream.resume()`:\n\n``` javascript\nvar delayed = DelayedStream.create(req);\n\nsetTimeout(function() {\n  // Emit all buffered events and resume underlaying source\n  delayed.resume();\n}, 1000);\n```\n\n## Implementation\n\nIn order to use this meta stream properly, here are a few things you should\nknow about the implementation.\n\n### Event Buffering / Proxying\n\nAll events of the `source` stream are hijacked by overwriting the `source.emit`\nmethod. Until node implements a catch-all event listener, this is the only way.\n\nHowever, delayed-stream still continues to emit all events it captures on the\n`source`, regardless of whether you have released the delayed stream yet or\nnot.\n\nUpon creation, delayed-stream captures all `source` events and stores them in\nan internal event buffer. Once `delayedStream.release()` is called, all\nbuffered events are emitted on the `delayedStream`, and the event buffer is\ncleared. After that, delayed-stream merely acts as a proxy for the underlaying\nsource.\n\n### Error handling\n\nError events on `source` are buffered / proxied just like any other events.\nHowever, `delayedStream.create` attaches a no-op `'error'` listener to the\n`source`. This way you only have to handle errors on the `delayedStream`\nobject, rather than in two places.\n\n### Buffer limits\n\ndelayed-stream provides a `maxDataSize` property that can be used to limit\nthe amount of data being buffered. In order to protect you from bad `source`\nstreams that don't react to `source.pause()`, this feature is enabled by\ndefault.\n\n## API\n\n### DelayedStream.create(source, [options])\n\nReturns a new `delayedStream`. Available options are:\n\n* `pauseStream`\n* `maxDataSize`\n\nThe description for those properties can be found below.\n\n### delayedStream.source\n\nThe `source` stream managed by this object. This is useful if you are\npassing your `delayedStream` around, and you still want to access properties\non the `source` object.\n\n### delayedStream.pauseStream = true\n\nWhether to pause the underlaying `source` when calling\n`DelayedStream.create()`. Modifying this property afterwards has no effect.\n\n### delayedStream.maxDataSize = 1024 * 1024\n\nThe amount of data to buffer before emitting an `error`.\n\nIf the underlaying source is emitting `Buffer` objects, the `maxDataSize`\nrefers to bytes.\n\nIf the underlaying source is emitting JavaScript strings, the size refers to\ncharacters.\n\nIf you know what you are doing, you can set this property to `Infinity` to\ndisable this feature. You can also modify this property during runtime.\n\n### delayedStream.dataSize = 0\n\nThe amount of data buffered so far.\n\n### delayedStream.readable\n\nAn ECMA5 getter that returns the value of `source.readable`.\n\n### delayedStream.resume()\n\nIf the `delayedStream` has not been released so far, `delayedStream.release()`\nis called.\n\nIn either case, `source.resume()` is called.\n\n### delayedStream.pause()\n\nCalls `source.pause()`.\n\n### delayedStream.pipe(dest)\n\nCalls `delayedStream.resume()` and then proxies the arguments to `source.pipe`.\n\n### delayedStream.release()\n\nEmits and clears all events that have been buffered up so far. This does not\nresume the underlaying source, use `delayedStream.resume()` instead.\n\n## License\n\ndelayed-stream is licensed under the MIT license.\n/package.json\u0002{\n  \"author\": \"Felix Geisendörfer <felix@debuggable.com> (http://debuggable.com/)\",\n  \"contributors\": [\n    \"Mike Atkins <apeherder@gmail.com>\"\n  ],\n  \"name\": \"delayed-stream\",\n  \"description\": \"Buffers events from a stream until you are ready to handle them.\",\n  \"license\": \"MIT\",\n  \"version\": \"1.0.0\",\n  \"homepage\": \"https://github.com/felixge/node-delayed-stream\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git://github.com/felixge/node-delayed-stream.git\"\n  },\n  \"main\": \"./lib/delayed_stream\",\n  \"engines\": {\n    \"node\": \">=0.4.0\"\n  },\n  \"scripts\": {\n    \"test\": \"make test\"\n  },\n  \"dependencies\": {},\n  \"devDependencies\": {\n    \"fake\": \"0.2.0\",\n    \"far\": \"0.0.1\"\n  }\n}\n/.npmignore\u0005test\n/lib/delayed_stream.js\t\u000fvar Stream = require('stream').Stream;\nvar util = require('util');\n\nmodule.exports = DelayedStream;\nfunction DelayedStream() {\n  this.source = null;\n  this.dataSize = 0;\n  this.maxDataSize = 1024 * 1024;\n  this.pauseStream = true;\n\n  this._maxDataSizeExceeded = false;\n  this._released = false;\n  this._bufferedEvents = [];\n}\nutil.inherits(DelayedStream, Stream);\n\nDelayedStream.create = function(source, options) {\n  var delayedStream = new this();\n\n  options = options || {};\n  for (var option in options) {\n    delayedStream[option] = options[option];\n  }\n\n  delayedStream.source = source;\n\n  var realEmit = source.emit;\n  source.emit = function() {\n    delayedStream._handleEmit(arguments);\n    return realEmit.apply(source, arguments);\n  };\n\n  source.on('error', function() {});\n  if (delayedStream.pauseStream) {\n    source.pause();\n  }\n\n  return delayedStream;\n};\n\nObject.defineProperty(DelayedStream.prototype, 'readable', {\n  configurable: true,\n  enumerable: true,\n  get: function() {\n    return this.source.readable;\n  }\n});\n\nDelayedStream.prototype.setEncoding = function() {\n  return this.source.setEncoding.apply(this.source, arguments);\n};\n\nDelayedStream.prototype.resume = function() {\n  if (!this._released) {\n    this.release();\n  }\n\n  this.source.resume();\n};\n\nDelayedStream.prototype.pause = function() {\n  this.source.pause();\n};\n\nDelayedStream.prototype.release = function() {\n  this._released = true;\n\n  this._bufferedEvents.forEach(function(args) {\n    this.emit.apply(this, args);\n  }.bind(this));\n  this._bufferedEvents = [];\n};\n\nDelayedStream.prototype.pipe = function() {\n  var r = Stream.prototype.pipe.apply(this, arguments);\n  this.resume();\n  return r;\n};\n\nDelayedStream.prototype._handleEmit = function(args) {\n  if (this._released) {\n    this.emit.apply(this, args);\n    return;\n  }\n\n  if (args[0] === 'data') {\n    this.dataSize += args[1].length;\n    this._checkIfMaxDataSizeExceeded();\n  }\n\n  this._bufferedEvents.push(args);\n};\n\nDelayedStream.prototype._checkIfMaxDataSizeExceeded = function() {\n  if (this._maxDataSizeExceeded) {\n    return;\n  }\n\n  if (this.dataSize <= this.maxDataSize) {\n    return;\n  }\n\n  this._maxDataSizeExceeded = true;\n  var message =\n    'DelayedStream#maxDataSize of ' + this.maxDataSize + ' bytes exceeded.'\n  this.emit('error', new Error(message));\n};\n/License\u0004=Copyright (c) 2011 Debuggable Limited <felix@debuggable.com>\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n/Makefile9SHELL := /bin/bash\n\ntest:\n\t@./test/run.js\n\n.PHONY: test\n\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/ZGVwZEAyLjAuMA==",
    "content": "/History.md\b2.0.0 / 2018-10-26\n==================\n\n  * Drop support for Node.js 0.6\n  * Replace internal `eval` usage with `Function` constructor\n  * Use instance methods on `process` to check for listeners\n\n1.1.2 / 2018-01-11\n==================\n\n  * perf: remove argument reassignment\n  * Support Node.js 0.6 to 9.x\n\n1.1.1 / 2017-07-27\n==================\n\n  * Remove unnecessary `Buffer` loading\n  * Support Node.js 0.6 to 8.x\n\n1.1.0 / 2015-09-14\n==================\n\n  * Enable strict mode in more places\n  * Support io.js 3.x\n  * Support io.js 2.x\n  * Support web browser loading\n    - Requires bundler like Browserify or webpack\n\n1.0.1 / 2015-04-07\n==================\n\n  * Fix `TypeError`s when under `'use strict'` code\n  * Fix useless type name on auto-generated messages\n  * Support io.js 1.x\n  * Support Node.js 0.12\n\n1.0.0 / 2014-09-17\n==================\n\n  * No changes\n\n0.4.5 / 2014-09-09\n==================\n\n  * Improve call speed to functions using the function wrapper\n  * Support Node.js 0.6\n\n0.4.4 / 2014-07-27\n==================\n\n  * Work-around v8 generating empty stack traces\n\n0.4.3 / 2014-07-26\n==================\n\n  * Fix exception when global `Error.stackTraceLimit` is too low\n\n0.4.2 / 2014-07-19\n==================\n\n  * Correct call site for wrapped functions and properties\n\n0.4.1 / 2014-07-19\n==================\n\n  * Improve automatic message generation for function properties\n\n0.4.0 / 2014-07-19\n==================\n\n  * Add `TRACE_DEPRECATION` environment variable\n  * Remove non-standard grey color from color output\n  * Support `--no-deprecation` argument\n  * Support `--trace-deprecation` argument\n  * Support `deprecate.property(fn, prop, message)`\n\n0.3.0 / 2014-06-16\n==================\n\n  * Add `NO_DEPRECATION` environment variable\n\n0.2.0 / 2014-06-15\n==================\n\n  * Add `deprecate.property(obj, prop, message)`\n  * Remove `supports-color` dependency for node.js 0.8\n\n0.1.0 / 2014-06-15\n==================\n\n  * Add `deprecate.function(fn, message)`\n  * Add `process.on('deprecation', fn)` emitter\n  * Automatically generate message when omitted from `deprecate()`\n\n0.0.1 / 2014-06-15\n==================\n\n  * Fix warning for dynamic calls at singe call site\n\n0.0.0 / 2014-06-15\n==================\n\n  * Initial implementation\n/index.js*/*!\n * depd\n * Copyright(c) 2014-2018 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n/**\n * Module dependencies.\n */\n\nvar relative = require('path').relative\n\n/**\n * Module exports.\n */\n\nmodule.exports = depd\n\n/**\n * Get the path to base files on.\n */\n\nvar basePath = process.cwd()\n\n/**\n * Determine if namespace is contained in the string.\n */\n\nfunction containsNamespace (str, namespace) {\n  var vals = str.split(/[ ,]+/)\n  var ns = String(namespace).toLowerCase()\n\n  for (var i = 0; i < vals.length; i++) {\n    var val = vals[i]\n\n    // namespace contained\n    if (val && (val === '*' || val.toLowerCase() === ns)) {\n      return true\n    }\n  }\n\n  return false\n}\n\n/**\n * Convert a data descriptor to accessor descriptor.\n */\n\nfunction convertDataDescriptorToAccessor (obj, prop, message) {\n  var descriptor = Object.getOwnPropertyDescriptor(obj, prop)\n  var value = descriptor.value\n\n  descriptor.get = function getter () { return value }\n\n  if (descriptor.writable) {\n    descriptor.set = function setter (val) { return (value = val) }\n  }\n\n  delete descriptor.value\n  delete descriptor.writable\n\n  Object.defineProperty(obj, prop, descriptor)\n\n  return descriptor\n}\n\n/**\n * Create arguments string to keep arity.\n */\n\nfunction createArgumentsString (arity) {\n  var str = ''\n\n  for (var i = 0; i < arity; i++) {\n    str += ', arg' + i\n  }\n\n  return str.substr(2)\n}\n\n/**\n * Create stack string from stack.\n */\n\nfunction createStackString (stack) {\n  var str = this.name + ': ' + this.namespace\n\n  if (this.message) {\n    str += ' deprecated ' + this.message\n  }\n\n  for (var i = 0; i < stack.length; i++) {\n    str += '\\n    at ' + stack[i].toString()\n  }\n\n  return str\n}\n\n/**\n * Create deprecate for namespace in caller.\n */\n\nfunction depd (namespace) {\n  if (!namespace) {\n    throw new TypeError('argument namespace is required')\n  }\n\n  var stack = getStack()\n  var site = callSiteLocation(stack[1])\n  var file = site[0]\n\n  function deprecate (message) {\n    // call to self as log\n    log.call(deprecate, message)\n  }\n\n  deprecate._file = file\n  deprecate._ignored = isignored(namespace)\n  deprecate._namespace = namespace\n  deprecate._traced = istraced(namespace)\n  deprecate._warned = Object.create(null)\n\n  deprecate.function = wrapfunction\n  deprecate.property = wrapproperty\n\n  return deprecate\n}\n\n/**\n * Determine if event emitter has listeners of a given type.\n *\n * The way to do this check is done three different ways in Node.js >= 0.8\n * so this consolidates them into a minimal set using instance methods.\n *\n * @param {EventEmitter} emitter\n * @param {string} type\n * @returns {boolean}\n * @private\n */\n\nfunction eehaslisteners (emitter, type) {\n  var count = typeof emitter.listenerCount !== 'function'\n    ? emitter.listeners(type).length\n    : emitter.listenerCount(type)\n\n  return count > 0\n}\n\n/**\n * Determine if namespace is ignored.\n */\n\nfunction isignored (namespace) {\n  if (process.noDeprecation) {\n    // --no-deprecation support\n    return true\n  }\n\n  var str = process.env.NO_DEPRECATION || ''\n\n  // namespace ignored\n  return containsNamespace(str, namespace)\n}\n\n/**\n * Determine if namespace is traced.\n */\n\nfunction istraced (namespace) {\n  if (process.traceDeprecation) {\n    // --trace-deprecation support\n    return true\n  }\n\n  var str = process.env.TRACE_DEPRECATION || ''\n\n  // namespace traced\n  return containsNamespace(str, namespace)\n}\n\n/**\n * Display deprecation message.\n */\n\nfunction log (message, site) {\n  var haslisteners = eehaslisteners(process, 'deprecation')\n\n  // abort early if no destination\n  if (!haslisteners && this._ignored) {\n    return\n  }\n\n  var caller\n  var callFile\n  var callSite\n  var depSite\n  var i = 0\n  var seen = false\n  var stack = getStack()\n  var file = this._file\n\n  if (site) {\n    // provided site\n    depSite = site\n    callSite = callSiteLocation(stack[1])\n    callSite.name = depSite.name\n    file = callSite[0]\n  } else {\n    // get call site\n    i = 2\n    depSite = callSiteLocation(stack[i])\n    callSite = depSite\n  }\n\n  // get caller of deprecated thing in relation to file\n  for (; i < stack.length; i++) {\n    caller = callSiteLocation(stack[i])\n    callFile = caller[0]\n\n    if (callFile === file) {\n      seen = true\n    } else if (callFile === this._file) {\n      file = this._file\n    } else if (seen) {\n      break\n    }\n  }\n\n  var key = caller\n    ? depSite.join(':') + '__' + caller.join(':')\n    : undefined\n\n  if (key !== undefined && key in this._warned) {\n    // already warned\n    return\n  }\n\n  this._warned[key] = true\n\n  // generate automatic message from call site\n  var msg = message\n  if (!msg) {\n    msg = callSite === depSite || !callSite.name\n      ? defaultMessage(depSite)\n      : defaultMessage(callSite)\n  }\n\n  // emit deprecation if listeners exist\n  if (haslisteners) {\n    var err = DeprecationError(this._namespace, msg, stack.slice(i))\n    process.emit('deprecation', err)\n    return\n  }\n\n  // format and write message\n  var format = process.stderr.isTTY\n    ? formatColor\n    : formatPlain\n  var output = format.call(this, msg, caller, stack.slice(i))\n  process.stderr.write(output + '\\n', 'utf8')\n}\n\n/**\n * Get call site location as array.\n */\n\nfunction callSiteLocation (callSite) {\n  var file = callSite.getFileName() || '<anonymous>'\n  var line = callSite.getLineNumber()\n  var colm = callSite.getColumnNumber()\n\n  if (callSite.isEval()) {\n    file = callSite.getEvalOrigin() + ', ' + file\n  }\n\n  var site = [file, line, colm]\n\n  site.callSite = callSite\n  site.name = callSite.getFunctionName()\n\n  return site\n}\n\n/**\n * Generate a default message from the site.\n */\n\nfunction defaultMessage (site) {\n  var callSite = site.callSite\n  var funcName = site.name\n\n  // make useful anonymous name\n  if (!funcName) {\n    funcName = '<anonymous@' + formatLocation(site) + '>'\n  }\n\n  var context = callSite.getThis()\n  var typeName = context && callSite.getTypeName()\n\n  // ignore useless type name\n  if (typeName === 'Object') {\n    typeName = undefined\n  }\n\n  // make useful type name\n  if (typeName === 'Function') {\n    typeName = context.name || typeName\n  }\n\n  return typeName && callSite.getMethodName()\n    ? typeName + '.' + funcName\n    : funcName\n}\n\n/**\n * Format deprecation message without color.\n */\n\nfunction formatPlain (msg, caller, stack) {\n  var timestamp = new Date().toUTCString()\n\n  var formatted = timestamp +\n    ' ' + this._namespace +\n    ' deprecated ' + msg\n\n  // add stack trace\n  if (this._traced) {\n    for (var i = 0; i < stack.length; i++) {\n      formatted += '\\n    at ' + stack[i].toString()\n    }\n\n    return formatted\n  }\n\n  if (caller) {\n    formatted += ' at ' + formatLocation(caller)\n  }\n\n  return formatted\n}\n\n/**\n * Format deprecation message with color.\n */\n\nfunction formatColor (msg, caller, stack) {\n  var formatted = '\\x1b[36;1m' + this._namespace + '\\x1b[22;39m' + // bold cyan\n    ' \\x1b[33;1mdeprecated\\x1b[22;39m' + // bold yellow\n    ' \\x1b[0m' + msg + '\\x1b[39m' // reset\n\n  // add stack trace\n  if (this._traced) {\n    for (var i = 0; i < stack.length; i++) {\n      formatted += '\\n    \\x1b[36mat ' + stack[i].toString() + '\\x1b[39m' // cyan\n    }\n\n    return formatted\n  }\n\n  if (caller) {\n    formatted += ' \\x1b[36m' + formatLocation(caller) + '\\x1b[39m' // cyan\n  }\n\n  return formatted\n}\n\n/**\n * Format call site location.\n */\n\nfunction formatLocation (callSite) {\n  return relative(basePath, callSite[0]) +\n    ':' + callSite[1] +\n    ':' + callSite[2]\n}\n\n/**\n * Get the stack as array of call sites.\n */\n\nfunction getStack () {\n  var limit = Error.stackTraceLimit\n  var obj = {}\n  var prep = Error.prepareStackTrace\n\n  Error.prepareStackTrace = prepareObjectStackTrace\n  Error.stackTraceLimit = Math.max(10, limit)\n\n  // capture the stack\n  Error.captureStackTrace(obj)\n\n  // slice this function off the top\n  var stack = obj.stack.slice(1)\n\n  Error.prepareStackTrace = prep\n  Error.stackTraceLimit = limit\n\n  return stack\n}\n\n/**\n * Capture call site stack from v8.\n */\n\nfunction prepareObjectStackTrace (obj, stack) {\n  return stack\n}\n\n/**\n * Return a wrapped function in a deprecation message.\n */\n\nfunction wrapfunction (fn, message) {\n  if (typeof fn !== 'function') {\n    throw new TypeError('argument fn must be a function')\n  }\n\n  var args = createArgumentsString(fn.length)\n  var stack = getStack()\n  var site = callSiteLocation(stack[1])\n\n  site.name = fn.name\n\n  // eslint-disable-next-line no-new-func\n  var deprecatedfn = new Function('fn', 'log', 'deprecate', 'message', 'site',\n    '\"use strict\"\\n' +\n    'return function (' + args + ') {' +\n    'log.call(deprecate, message, site)\\n' +\n    'return fn.apply(this, arguments)\\n' +\n    '}')(fn, log, this, message, site)\n\n  return deprecatedfn\n}\n\n/**\n * Wrap property in a deprecation message.\n */\n\nfunction wrapproperty (obj, prop, message) {\n  if (!obj || (typeof obj !== 'object' && typeof obj !== 'function')) {\n    throw new TypeError('argument obj must be object')\n  }\n\n  var descriptor = Object.getOwnPropertyDescriptor(obj, prop)\n\n  if (!descriptor) {\n    throw new TypeError('must call property on owner object')\n  }\n\n  if (!descriptor.configurable) {\n    throw new TypeError('property must be configurable')\n  }\n\n  var deprecate = this\n  var stack = getStack()\n  var site = callSiteLocation(stack[1])\n\n  // set site name\n  site.name = prop\n\n  // convert data descriptor\n  if ('value' in descriptor) {\n    descriptor = convertDataDescriptorToAccessor(obj, prop, message)\n  }\n\n  var get = descriptor.get\n  var set = descriptor.set\n\n  // wrap getter\n  if (typeof get === 'function') {\n    descriptor.get = function getter () {\n      log.call(deprecate, message, site)\n      return get.apply(this, arguments)\n    }\n  }\n\n  // wrap setter\n  if (typeof set === 'function') {\n    descriptor.set = function setter () {\n      log.call(deprecate, message, site)\n      return set.apply(this, arguments)\n    }\n  }\n\n  Object.defineProperty(obj, prop, descriptor)\n}\n\n/**\n * Create DeprecationError for deprecation\n */\n\nfunction DeprecationError (namespace, message, stack) {\n  var error = new Error()\n  var stackString\n\n  Object.defineProperty(error, 'constructor', {\n    value: DeprecationError\n  })\n\n  Object.defineProperty(error, 'message', {\n    configurable: true,\n    enumerable: false,\n    value: message,\n    writable: true\n  })\n\n  Object.defineProperty(error, 'name', {\n    enumerable: false,\n    configurable: true,\n    value: 'DeprecationError',\n    writable: true\n  })\n\n  Object.defineProperty(error, 'namespace', {\n    configurable: true,\n    enumerable: false,\n    value: namespace,\n    writable: true\n  })\n\n  Object.defineProperty(error, 'stack', {\n    configurable: true,\n    enumerable: false,\n    get: function () {\n      if (stackString !== undefined) {\n        return stackString\n      }\n\n      // prepare stack trace\n      return (stackString = createStackString.call(this, stack))\n    },\n    set: function setter (val) {\n      stackString = val\n    }\n  })\n\n  return error\n}\n/lib/browser/index.js\u0005/*!\n * depd\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = depd\n\n/**\n * Create deprecate for namespace in caller.\n */\n\nfunction depd (namespace) {\n  if (!namespace) {\n    throw new TypeError('argument namespace is required')\n  }\n\n  function deprecate (message) {\n    // no-op in browser\n  }\n\n  deprecate._file = undefined\n  deprecate._ignored = true\n  deprecate._namespace = namespace\n  deprecate._traced = false\n  deprecate._warned = Object.create(null)\n\n  deprecate.function = wrapfunction\n  deprecate.property = wrapproperty\n\n  return deprecate\n}\n\n/**\n * Return a wrapped function in a deprecation message.\n *\n * This is a no-op version of the wrapper, which does nothing but call\n * validation.\n */\n\nfunction wrapfunction (fn, message) {\n  if (typeof fn !== 'function') {\n    throw new TypeError('argument fn must be a function')\n  }\n\n  return fn\n}\n\n/**\n * Wrap property in a deprecation message.\n *\n * This is a no-op version of the wrapper, which does nothing but call\n * validation.\n */\n\nfunction wrapproperty (obj, prop, message) {\n  if (!obj || (typeof obj !== 'object' && typeof obj !== 'function')) {\n    throw new TypeError('argument obj must be object')\n  }\n\n  var descriptor = Object.getOwnPropertyDescriptor(obj, prop)\n\n  if (!descriptor) {\n    throw new TypeError('must call property on owner object')\n  }\n\n  if (!descriptor.configurable) {\n    throw new TypeError('property must be configurable')\n  }\n}\n/Readme.md'\u0004# depd\n\n[![NPM Version][npm-version-image]][npm-url]\n[![NPM Downloads][npm-downloads-image]][npm-url]\n[![Node.js Version][node-image]][node-url]\n[![Linux Build][travis-image]][travis-url]\n[![Windows Build][appveyor-image]][appveyor-url]\n[![Coverage Status][coveralls-image]][coveralls-url]\n\nDeprecate all the things\n\n> With great modules comes great responsibility; mark things deprecated!\n\n## Install\n\nThis module is installed directly using `npm`:\n\n```sh\n$ npm install depd\n```\n\nThis module can also be bundled with systems like\n[Browserify](http://browserify.org/) or [webpack](https://webpack.github.io/),\nthough by default this module will alter it's API to no longer display or\ntrack deprecations.\n\n## API\n\n<!-- eslint-disable no-unused-vars -->\n\n```js\nvar deprecate = require('depd')('my-module')\n```\n\nThis library allows you to display deprecation messages to your users.\nThis library goes above and beyond with deprecation warnings by\nintrospection of the call stack (but only the bits that it is interested\nin).\n\nInstead of just warning on the first invocation of a deprecated\nfunction and never again, this module will warn on the first invocation\nof a deprecated function per unique call site, making it ideal to alert\nusers of all deprecated uses across the code base, rather than just\nwhatever happens to execute first.\n\nThe deprecation warnings from this module also include the file and line\ninformation for the call into the module that the deprecated function was\nin.\n\n**NOTE** this library has a similar interface to the `debug` module, and\nthis module uses the calling file to get the boundary for the call stacks,\nso you should always create a new `deprecate` object in each file and not\nwithin some central file.\n\n### depd(namespace)\n\nCreate a new deprecate function that uses the given namespace name in the\nmessages and will display the call site prior to the stack entering the\nfile this function was called from. It is highly suggested you use the\nname of your module as the namespace.\n\n### deprecate(message)\n\nCall this function from deprecated code to display a deprecation message.\nThis message will appear once per unique caller site. Caller site is the\nfirst call site in the stack in a different file from the caller of this\nfunction.\n\nIf the message is omitted, a message is generated for you based on the site\nof the `deprecate()` call and will display the name of the function called,\nsimilar to the name displayed in a stack trace.\n\n### deprecate.function(fn, message)\n\nCall this function to wrap a given function in a deprecation message on any\ncall to the function. An optional message can be supplied to provide a custom\nmessage.\n\n### deprecate.property(obj, prop, message)\n\nCall this function to wrap a given property on object in a deprecation message\non any accessing or setting of the property. An optional message can be supplied\nto provide a custom message.\n\nThe method must be called on the object where the property belongs (not\ninherited from the prototype).\n\nIf the property is a data descriptor, it will be converted to an accessor\ndescriptor in order to display the deprecation message.\n\n### process.on('deprecation', fn)\n\nThis module will allow easy capturing of deprecation errors by emitting the\nerrors as the type \"deprecation\" on the global `process`. If there are no\nlisteners for this type, the errors are written to STDERR as normal, but if\nthere are any listeners, nothing will be written to STDERR and instead only\nemitted. From there, you can write the errors in a different format or to a\nlogging source.\n\nThe error represents the deprecation and is emitted only once with the same\nrules as writing to STDERR. The error has the following properties:\n\n  - `message` - This is the message given by the library\n  - `name` - This is always `'DeprecationError'`\n  - `namespace` - This is the namespace the deprecation came from\n  - `stack` - This is the stack of the call to the deprecated thing\n\nExample `error.stack` output:\n\n```\nDeprecationError: my-cool-module deprecated oldfunction\n    at Object.<anonymous> ([eval]-wrapper:6:22)\n    at Module._compile (module.js:456:26)\n    at evalScript (node.js:532:25)\n    at startup (node.js:80:7)\n    at node.js:902:3\n```\n\n### process.env.NO_DEPRECATION\n\nAs a user of modules that are deprecated, the environment variable `NO_DEPRECATION`\nis provided as a quick solution to silencing deprecation warnings from being\noutput. The format of this is similar to that of `DEBUG`:\n\n```sh\n$ NO_DEPRECATION=my-module,othermod node app.js\n```\n\nThis will suppress deprecations from being output for \"my-module\" and \"othermod\".\nThe value is a list of comma-separated namespaces. To suppress every warning\nacross all namespaces, use the value `*` for a namespace.\n\nProviding the argument `--no-deprecation` to the `node` executable will suppress\nall deprecations (only available in Node.js 0.8 or higher).\n\n**NOTE** This will not suppress the deperecations given to any \"deprecation\"\nevent listeners, just the output to STDERR.\n\n### process.env.TRACE_DEPRECATION\n\nAs a user of modules that are deprecated, the environment variable `TRACE_DEPRECATION`\nis provided as a solution to getting more detailed location information in deprecation\nwarnings by including the entire stack trace. The format of this is the same as\n`NO_DEPRECATION`:\n\n```sh\n$ TRACE_DEPRECATION=my-module,othermod node app.js\n```\n\nThis will include stack traces for deprecations being output for \"my-module\" and\n\"othermod\". The value is a list of comma-separated namespaces. To trace every\nwarning across all namespaces, use the value `*` for a namespace.\n\nProviding the argument `--trace-deprecation` to the `node` executable will trace\nall deprecations (only available in Node.js 0.8 or higher).\n\n**NOTE** This will not trace the deperecations silenced by `NO_DEPRECATION`.\n\n## Display\n\n![message](files/message.png)\n\nWhen a user calls a function in your library that you mark deprecated, they\nwill see the following written to STDERR (in the given colors, similar colors\nand layout to the `debug` module):\n\n```\nbright cyan    bright yellow\n|              |          reset       cyan\n|              |          |           |\n▼              ▼          ▼           ▼\nmy-cool-module deprecated oldfunction [eval]-wrapper:6:22\n▲              ▲          ▲           ▲\n|              |          |           |\nnamespace      |          |           location of mycoolmod.oldfunction() call\n               |          deprecation message\n               the word \"deprecated\"\n```\n\nIf the user redirects their STDERR to a file or somewhere that does not support\ncolors, they see (similar layout to the `debug` module):\n\n```\nSun, 15 Jun 2014 05:21:37 GMT my-cool-module deprecated oldfunction at [eval]-wrapper:6:22\n▲                             ▲              ▲          ▲              ▲\n|                             |              |          |              |\ntimestamp of message          namespace      |          |             location of mycoolmod.oldfunction() call\n                                             |          deprecation message\n                                             the word \"deprecated\"\n```\n\n## Examples\n\n### Deprecating all calls to a function\n\nThis will display a deprecated message about \"oldfunction\" being deprecated\nfrom \"my-module\" on STDERR.\n\n```js\nvar deprecate = require('depd')('my-cool-module')\n\n// message automatically derived from function name\n// Object.oldfunction\nexports.oldfunction = deprecate.function(function oldfunction () {\n  // all calls to function are deprecated\n})\n\n// specific message\nexports.oldfunction = deprecate.function(function () {\n  // all calls to function are deprecated\n}, 'oldfunction')\n```\n\n### Conditionally deprecating a function call\n\nThis will display a deprecated message about \"weirdfunction\" being deprecated\nfrom \"my-module\" on STDERR when called with less than 2 arguments.\n\n```js\nvar deprecate = require('depd')('my-cool-module')\n\nexports.weirdfunction = function () {\n  if (arguments.length < 2) {\n    // calls with 0 or 1 args are deprecated\n    deprecate('weirdfunction args < 2')\n  }\n}\n```\n\nWhen calling `deprecate` as a function, the warning is counted per call site\nwithin your own module, so you can display different deprecations depending\non different situations and the users will still get all the warnings:\n\n```js\nvar deprecate = require('depd')('my-cool-module')\n\nexports.weirdfunction = function () {\n  if (arguments.length < 2) {\n    // calls with 0 or 1 args are deprecated\n    deprecate('weirdfunction args < 2')\n  } else if (typeof arguments[0] !== 'string') {\n    // calls with non-string first argument are deprecated\n    deprecate('weirdfunction non-string first arg')\n  }\n}\n```\n\n### Deprecating property access\n\nThis will display a deprecated message about \"oldprop\" being deprecated\nfrom \"my-module\" on STDERR when accessed. A deprecation will be displayed\nwhen setting the value and when getting the value.\n\n```js\nvar deprecate = require('depd')('my-cool-module')\n\nexports.oldprop = 'something'\n\n// message automatically derives from property name\ndeprecate.property(exports, 'oldprop')\n\n// explicit message\ndeprecate.property(exports, 'oldprop', 'oldprop >= 0.10')\n```\n\n## License\n\n[MIT](LICENSE)\n\n[appveyor-image]: https://badgen.net/appveyor/ci/dougwilson/nodejs-depd/master?label=windows\n[appveyor-url]: https://ci.appveyor.com/project/dougwilson/nodejs-depd\n[coveralls-image]: https://badgen.net/coveralls/c/github/dougwilson/nodejs-depd/master\n[coveralls-url]: https://coveralls.io/r/dougwilson/nodejs-depd?branch=master\n[node-image]: https://badgen.net/npm/node/depd\n[node-url]: https://nodejs.org/en/download/\n[npm-downloads-image]: https://badgen.net/npm/dm/depd\n[npm-url]: https://npmjs.org/package/depd\n[npm-version-image]: https://badgen.net/npm/v/depd\n[travis-image]: https://badgen.net/travis/dougwilson/nodejs-depd/master?label=linux\n[travis-url]: https://travis-ci.org/dougwilson/nodejs-depd\n/LICENSE\u0004F(The MIT License)\n\nCopyright (c) 2014-2018 Douglas Christopher Wilson\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n/package.json\u00057{\n  \"name\": \"depd\",\n  \"description\": \"Deprecate all the things\",\n  \"version\": \"2.0.0\",\n  \"author\": \"Douglas Christopher Wilson <doug@somethingdoug.com>\",\n  \"license\": \"MIT\",\n  \"keywords\": [\n    \"deprecate\",\n    \"deprecated\"\n  ],\n  \"repository\": \"dougwilson/nodejs-depd\",\n  \"browser\": \"lib/browser/index.js\",\n  \"devDependencies\": {\n    \"benchmark\": \"2.1.4\",\n    \"beautify-benchmark\": \"0.2.4\",\n    \"eslint\": \"5.7.0\",\n    \"eslint-config-standard\": \"12.0.0\",\n    \"eslint-plugin-import\": \"2.14.0\",\n    \"eslint-plugin-markdown\": \"1.0.0-beta.7\",\n    \"eslint-plugin-node\": \"7.0.1\",\n    \"eslint-plugin-promise\": \"4.0.1\",\n    \"eslint-plugin-standard\": \"4.0.0\",\n    \"istanbul\": \"0.4.5\",\n    \"mocha\": \"5.2.0\",\n    \"safe-buffer\": \"5.1.2\",\n    \"uid-safe\": \"2.1.5\"\n  },\n  \"files\": [\n    \"lib/\",\n    \"History.md\",\n    \"LICENSE\",\n    \"index.js\",\n    \"Readme.md\"\n  ],\n  \"engines\": {\n    \"node\": \">= 0.8\"\n  },\n  \"scripts\": {\n    \"bench\": \"node benchmark/index.js\",\n    \"lint\": \"eslint --plugin markdown --ext js,md .\",\n    \"test\": \"mocha --reporter spec --bail test/\",\n    \"test-ci\": \"istanbul cover --print=none node_modules/mocha/bin/_mocha -- --reporter spec test/ && istanbul report lcovonly text-summary\",\n    \"test-cov\": \"istanbul cover --print=none node_modules/mocha/bin/_mocha -- --reporter dot test/ && istanbul report lcov text-summary\"\n  }\n}\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/ZGVzdHJveUAxLjIuMA==",
    "content": "/README.md\t# destroy\n\n[![NPM version][npm-image]][npm-url]\n[![Build Status][github-actions-ci-image]][github-actions-ci-url]\n[![Test coverage][coveralls-image]][coveralls-url]\n[![License][license-image]][license-url]\n[![Downloads][downloads-image]][downloads-url]\n\nDestroy a stream.\n\nThis module is meant to ensure a stream gets destroyed, handling different APIs\nand Node.js bugs.\n\n## API\n\n```js\nvar destroy = require('destroy')\n```\n\n### destroy(stream [, suppress])\n\nDestroy the given stream, and optionally suppress any future `error` events.\n\nIn most cases, this is identical to a simple `stream.destroy()` call. The rules\nare as follows for a given stream:\n\n  1. If the `stream` is an instance of `ReadStream`, then call `stream.destroy()`\n     and add a listener to the `open` event to call `stream.close()` if it is\n     fired. This is for a Node.js bug that will leak a file descriptor if\n     `.destroy()` is called before `open`.\n  2. If the `stream` is an instance of a zlib stream, then call `stream.destroy()`\n     and close the underlying zlib handle if open, otherwise call `stream.close()`.\n     This is for consistency across Node.js versions and a Node.js bug that will\n     leak a native zlib handle.\n  3. If the `stream` is not an instance of `Stream`, then nothing happens.\n  4. If the `stream` has a `.destroy()` method, then call it.\n\nThe function returns the `stream` passed in as the argument.\n\n## Example\n\n```js\nvar destroy = require('destroy')\n\nvar fs = require('fs')\nvar stream = fs.createReadStream('package.json')\n\n// ... and later\ndestroy(stream)\n```\n\n[npm-image]: https://img.shields.io/npm/v/destroy.svg?style=flat-square\n[npm-url]: https://npmjs.org/package/destroy\n[github-tag]: http://img.shields.io/github/tag/stream-utils/destroy.svg?style=flat-square\n[github-url]: https://github.com/stream-utils/destroy/tags\n[coveralls-image]: https://img.shields.io/coveralls/stream-utils/destroy.svg?style=flat-square\n[coveralls-url]: https://coveralls.io/r/stream-utils/destroy?branch=master\n[license-image]: http://img.shields.io/npm/l/destroy.svg?style=flat-square\n[license-url]: LICENSE.md\n[downloads-image]: http://img.shields.io/npm/dm/destroy.svg?style=flat-square\n[downloads-url]: https://npmjs.org/package/destroy\n[github-actions-ci-image]: https://img.shields.io/github/workflow/status/stream-utils/destroy/ci/master?label=ci&style=flat-square\n[github-actions-ci-url]: https://github.com/stream-utils/destroy/actions/workflows/ci.yml\n/LICENSE\u0004\nThe MIT License (MIT)\n\nCopyright (c) 2014 Jonathan Ong me@jongleberry.com\nCopyright (c) 2015-2022 Douglas Christopher Wilson doug@somethingdoug.com\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n/package.json\u0004h{\n  \"name\": \"destroy\",\n  \"description\": \"destroy a stream if possible\",\n  \"version\": \"1.2.0\",\n  \"author\": {\n    \"name\": \"Jonathan Ong\",\n    \"email\": \"me@jongleberry.com\",\n    \"url\": \"http://jongleberry.com\",\n    \"twitter\": \"https://twitter.com/jongleberry\"\n  },\n  \"contributors\": [\n    \"Douglas Christopher Wilson <doug@somethingdoug.com>\"\n  ],\n  \"license\": \"MIT\",\n  \"repository\": \"stream-utils/destroy\",\n  \"devDependencies\": {\n    \"eslint\": \"7.32.0\",\n    \"eslint-config-standard\": \"14.1.1\",\n    \"eslint-plugin-import\": \"2.25.4\",\n    \"eslint-plugin-node\": \"11.1.0\",\n    \"eslint-plugin-promise\": \"5.2.0\",\n    \"eslint-plugin-standard\": \"4.1.0\",\n    \"mocha\": \"9.2.2\",\n    \"nyc\": \"15.1.0\"\n  },\n  \"engines\": {\n    \"node\": \">= 0.8\",\n    \"npm\": \"1.2.8000 || >= 1.4.16\"\n  },\n  \"scripts\": {\n    \"lint\": \"eslint .\",\n    \"test\": \"mocha --reporter spec\",\n    \"test-ci\": \"nyc --reporter=lcovonly --reporter=text npm test\",\n    \"test-cov\": \"nyc --reporter=html --reporter=text npm test\"\n  },\n  \"files\": [\n    \"index.js\",\n    \"LICENSE\"\n  ],\n  \"keywords\": [\n    \"stream\",\n    \"streams\",\n    \"destroy\",\n    \"cleanup\",\n    \"leak\",\n    \"fd\"\n  ]\n}\n/index.js\u0010/*!\n * destroy\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015-2022 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar EventEmitter = require('events').EventEmitter\nvar ReadStream = require('fs').ReadStream\nvar Stream = require('stream')\nvar Zlib = require('zlib')\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = destroy\n\n/**\n * Destroy the given stream, and optionally suppress any future `error` events.\n *\n * @param {object} stream\n * @param {boolean} suppress\n * @public\n */\n\nfunction destroy (stream, suppress) {\n  if (isFsReadStream(stream)) {\n    destroyReadStream(stream)\n  } else if (isZlibStream(stream)) {\n    destroyZlibStream(stream)\n  } else if (hasDestroy(stream)) {\n    stream.destroy()\n  }\n\n  if (isEventEmitter(stream) && suppress) {\n    stream.removeAllListeners('error')\n    stream.addListener('error', noop)\n  }\n\n  return stream\n}\n\n/**\n * Destroy a ReadStream.\n *\n * @param {object} stream\n * @private\n */\n\nfunction destroyReadStream (stream) {\n  stream.destroy()\n\n  if (typeof stream.close === 'function') {\n    // node.js core bug work-around\n    stream.on('open', onOpenClose)\n  }\n}\n\n/**\n * Close a Zlib stream.\n *\n * Zlib streams below Node.js 4.5.5 have a buggy implementation\n * of .close() when zlib encountered an error.\n *\n * @param {object} stream\n * @private\n */\n\nfunction closeZlibStream (stream) {\n  if (stream._hadError === true) {\n    var prop = stream._binding === null\n      ? '_binding'\n      : '_handle'\n\n    stream[prop] = {\n      close: function () { this[prop] = null }\n    }\n  }\n\n  stream.close()\n}\n\n/**\n * Destroy a Zlib stream.\n *\n * Zlib streams don't have a destroy function in Node.js 6. On top of that\n * simply calling destroy on a zlib stream in Node.js 8+ will result in a\n * memory leak. So until that is fixed, we need to call both close AND destroy.\n *\n * PR to fix memory leak: https://github.com/nodejs/node/pull/23734\n *\n * In Node.js 6+8, it's important that destroy is called before close as the\n * stream would otherwise emit the error 'zlib binding closed'.\n *\n * @param {object} stream\n * @private\n */\n\nfunction destroyZlibStream (stream) {\n  if (typeof stream.destroy === 'function') {\n    // node.js core bug work-around\n    // istanbul ignore if: node.js 0.8\n    if (stream._binding) {\n      // node.js < 0.10.0\n      stream.destroy()\n      if (stream._processing) {\n        stream._needDrain = true\n        stream.once('drain', onDrainClearBinding)\n      } else {\n        stream._binding.clear()\n      }\n    } else if (stream._destroy && stream._destroy !== Stream.Transform.prototype._destroy) {\n      // node.js >= 12, ^11.1.0, ^10.15.1\n      stream.destroy()\n    } else if (stream._destroy && typeof stream.close === 'function') {\n      // node.js 7, 8\n      stream.destroyed = true\n      stream.close()\n    } else {\n      // fallback\n      // istanbul ignore next\n      stream.destroy()\n    }\n  } else if (typeof stream.close === 'function') {\n    // node.js < 8 fallback\n    closeZlibStream(stream)\n  }\n}\n\n/**\n * Determine if stream has destroy.\n * @private\n */\n\nfunction hasDestroy (stream) {\n  return stream instanceof Stream &&\n    typeof stream.destroy === 'function'\n}\n\n/**\n * Determine if val is EventEmitter.\n * @private\n */\n\nfunction isEventEmitter (val) {\n  return val instanceof EventEmitter\n}\n\n/**\n * Determine if stream is fs.ReadStream stream.\n * @private\n */\n\nfunction isFsReadStream (stream) {\n  return stream instanceof ReadStream\n}\n\n/**\n * Determine if stream is Zlib stream.\n * @private\n */\n\nfunction isZlibStream (stream) {\n  return stream instanceof Zlib.Gzip ||\n    stream instanceof Zlib.Gunzip ||\n    stream instanceof Zlib.Deflate ||\n    stream instanceof Zlib.DeflateRaw ||\n    stream instanceof Zlib.Inflate ||\n    stream instanceof Zlib.InflateRaw ||\n    stream instanceof Zlib.Unzip\n}\n\n/**\n * No-op function.\n * @private\n */\n\nfunction noop () {}\n\n/**\n * On drain handler to clear binding.\n * @private\n */\n\n// istanbul ignore next: node.js 0.8\nfunction onDrainClearBinding () {\n  this._binding.clear()\n}\n\n/**\n * On open handler to close stream.\n * @private\n */\n\nfunction onOpenClose () {\n  if (typeof this.fd === 'number') {\n    // actually close down the fd\n    this.close()\n  }\n}\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/ZW52aW5mb0A3LjguMQ==",
    "content": "/README.md5<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/tabrindle/envinfo/master/logo.png\" align=\"center\"  width=\"700px\"/>\n  <h3 align=\"center\">envinfo generates a report of the common details needed when troubleshooting software issues, such as your operating system, binary versions, browsers, installed languages, and more</h3> \n  <hr/>\n</p>\n\n[![CircleCI](https://circleci.com/gh/tabrindle/envinfo/tree/master.svg?style=svg)](https://circleci.com/gh/tabrindle/envinfo/tree/master) [![Build Status](https://travis-ci.org/tabrindle/envinfo.svg?branch=master)](https://travis-ci.org/tabrindle/envinfo) [![npm version](https://badge.fury.io/js/envinfo.svg)](https://badge.fury.io/js/envinfo) [![npm downloads per month](https://img.shields.io/npm/dm/envinfo.svg?maxAge=86400)](https://www.npmjs.com/package/envinfo) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![All Contributors](https://img.shields.io/badge/all_contributors-10-orange.svg?style=flat-square)](#contributors)\n\n## The problem\n\n-   It works on my computer\n-   \"command not found\"\n-   what version of \"command\" are you running?\n-   what version of \"different command\" are you running?\n-   do you have \"insert obscure android sdk version\"?\n-   every github issue reporting template ever:\n\n**Please mention other relevant information such as the browser version, Node.js version, Operating System and programming language.**\n\n## This solution\n\n-   Gather all of this information in one spot, quickly, and painlessly.\n\n## Installation\n\nTo use as a CLI tool, install this package globally:\n\n```sh\nnpm install -g envinfo || yarn global add envinfo\n```\n\nOr, use without installing with npx:\n\n`npx envinfo`\n\nTo use as a library in another project:\n\n```sh\nnpm install envinfo || yarn add envinfo\n```\n\n## CLI Usage\n\n`envinfo` || `npx envinfo`\n\n```bash\n  System:\n    OS: macOS Mojave 10.14.5\n    CPU: (8) x64 Intel(R) Core(TM) i7-7820HQ CPU @ 2.90GHz\n    Memory: 2.97 GB / 16.00 GB\n    Shell: 5.3 - /bin/zsh\n  Binaries:\n    Node: 8.16.0 - ~/.nvm/versions/node/v8.16.0/bin/node\n    Yarn: 1.15.2 - ~/.yarn/bin/yarn\n    npm: 6.9.0 - ~/.nvm/versions/node/v8.16.0/bin/npm\n    Watchman: 4.9.0 - /usr/local/bin/watchman\n  Managers:\n    Cargo: 1.31.0 - ~/.cargo/bin/cargo\n    CocoaPods: 1.7.3 - /usr/local/bin/pod\n    Composer: 1.8.6 - /usr/local/bin/composer\n    Gradle: 5.5 - /usr/local/bin/gradle\n    Homebrew: 2.1.7 - /usr/local/bin/brew\n    Maven: 3.6.1 - /usr/local/bin/mvn\n    pip2: 19.0.3 - /usr/local/bin/pip2\n    pip3: 19.0.2 - /usr/local/bin/pip3\n    RubyGems: 2.5.2.3 - /usr/bin/gem\n  Utilities:\n    CMake: 3.13.3 - /usr/local/bin/cmake\n    Make: 3.81 - /usr/bin/make\n    GCC: 10.14. - /usr/bin/gcc\n    Git: 2.20.0 - /usr/local/bin/git\n    Mercurial: 4.5.3 - /usr/bin/hg\n    Clang: 1001.0.46.4 - /usr/bin/clang\n    Subversion: 1.10.3 - /usr/bin/svn\n  Servers:\n    Apache: 2.4.34 - /usr/sbin/apachectl\n    Nginx: 1.13.12 - /usr/local/bin/nginx\n  Virtualization:\n    Docker: 18.09.1 - /usr/local/bin/docker\n    Parallels: 13.3.0 - /usr/local/bin/prlctl\n    VirtualBox: 5.2.20 - /usr/local/bin/vboxmanage\n  SDKs:\n    iOS SDK:\n      Platforms: iOS 12.2, macOS 10.14, tvOS 12.2, watchOS 5.2\n    Android SDK:\n      API Levels: 28\n      Build Tools: 28.0.3\n      System Images: android-28 | Google Play Intel x86 Atom\n  IDEs:\n    Android Studio: 3.2 AI-181.5540.7.32.5056338\n    Atom: 1.23.3\n    Emacs: 22.1.1 - /usr/bin/emacs\n    Nano: 2.0.6 - /usr/bin/nano\n    VSCode: 1.36.0 - /usr/local/bin/code\n    Vim: 8.0 - /usr/bin/vim\n    Xcode: 10.2.1/10E1001 - /usr/bin/xcodebuild\n  Languages:\n    Bash: 4.4.23 - /usr/local/bin/bash\n    Elixir: 1.6.2 - /usr/local/bin/elixir\n    Go: 1.11.1 - /usr/local/bin/go\n    Java: 1.8.0_192 - /usr/bin/javac\n    Perl: 5.18.4 - /usr/bin/perl\n    PHP: 7.1.23 - /usr/bin/php\n    Python: 2.7.16 - /usr/local/bin/python\n    Python3: 3.7.2 - /usr/local/bin/python3\n    R: 3.6.0 - /usr/local/bin/R\n    Ruby: 2.3.7 - /usr/bin/ruby\n    Rust: 1.16.0 - /Users/tabrindle/.cargo/bin/rustup\n  Databases:\n    MongoDB: 3.6.4 - /usr/local/bin/mongo\n    MySQL: 10.3.10 (MariaDB) - /usr/local/bin/mysql\n    PostgreSQL: 10.3 - /usr/local/bin/postgres\n    SQLite: 3.24.0 - /usr/bin/sqlite3\n  Browsers:\n    Chrome: 75.0.3770.100\n    Chrome Canary: 77.0.3847.0\n    Firefox: 68.0\n    Firefox Developer Edition: 69.0\n    Firefox Nightly: 69.0a1\n    Safari: 12.1.1\n    Safari Technology Preview: 13.0\n  npmPackages:\n    apollo-client: ^2.3.1 => 2.3.1\n    jest: ^22.2.1 => 22.2.1\n    ...\n    react: ^16.3.2 => 16.3.2\n    react-apollo: ^2.1.4 => 2.1.4\n    run4staged: ^1.1.1 => 1.1.1\n    solidarity: 2.0.5 => 2.0.5\n    styled-components: ^3.1.6 => 3.1.6\n  npmGlobalPackages:\n    create-react-app: 1.5.2\n    create-react-native-app: 1.0.0\n    envinfo: 5.10.0\n    exp: 49.2.2\n    gatsby-cli: 1.1.52\n    npm: 5.6.0\n    react-native-cli: 2.0.1\n    solidarity: 2.1.0\n    typescript: 2.8.1\n```\n\n## Programmatic Usage\n\nEnvinfo takes a configuration object and returns a Promise that resolves a string (optionally yaml, json or markdown)\n\n```javascript\nimport envinfo from 'envinfo';\n\nenvinfo.run(\n    {\n        System: ['OS', 'CPU'],\n        Binaries: ['Node', 'Yarn', 'npm'],\n        Browsers: ['Chrome', 'Firefox', 'Safari'],\n        npmPackages: ['styled-components', 'babel-plugin-styled-components'],\n    },\n    { json: true, showNotFound: true }\n).then(env => console.log(env));\n```\n\nlogs:\n\n```json\n{\n    \"System\": {\n        \"OS\": \"macOS High Sierra 10.13\",\n        \"CPU\": \"x64 Intel(R) Core(TM) i7-4870HQ CPU @ 2.50GHz\"\n    },\n    \"Binaries\": {\n        \"Node\": {\n            \"version\": \"8.11.0\",\n            \"path\": \"~/.nvm/versions/node/v8.11.0/bin/node\"\n        },\n        \"Yarn\": {\n            \"version\": \"1.5.1\",\n            \"path\": \"~/.yarn/bin/yarn\"\n        },\n        \"npm\": {\n            \"version\": \"5.6.0\",\n            \"path\": \"~/.nvm/versions/node/v8.11.0/bin/npm\"\n        }\n    },\n    \"Browsers\": {\n        \"Chrome\": {\n            \"version\": \"67.0.3396.62\"\n        },\n        \"Firefox\": {\n            \"version\": \"59.0.2\"\n        },\n        \"Safari\": {\n            \"version\": \"11.0\"\n        }\n    },\n    \"npmPackages\": {\n        \"styled-components\": {\n            \"wanted\": \"^3.2.1\",\n            \"installed\": \"3.2.1\"\n        },\n        \"babel-plugin-styled-components\": \"Not Found\"\n    }\n}\n```\n\nAll of envinfo's helpers are also exported for use. You can use envinfo as a whole, or just the parts that you need, like this:\n\n```javascript\nconst envinfo = require('envinfo');\n\n// each helper returns a promise\nconst node = await envinfo.helpers.getNodeInfo();\n\n// The promises resolve to an array of values: [\"Name\", \"Version\", \"Path\"]\n// e.g. [\"Node\", \"10.9.0\", \"/usr/local/bin/node\"]\n\nconsole.log(`Node: ${node[1]} - ${node[2]}`); // \"Node: 10.9.0 - ~/.nvm/versions/node/v8.14.0/bin/node\"\n```\n\n## CLI Options\n\n```\n    --system               Print general system info such as OS, CPU, Memory and Shell\n    --browsers             Get version numbers of installed web browsers\n    --SDKs                 Get platforms, build tools and SDKs of iOS and Android\n    --IDEs                 Get version numbers of installed IDEs\n    --languages            Get version numbers of installed languages such as Java, Python, PHP, etc\n    --binaries             Get version numbers of node, npm, watchman, etc\n    --npmPackages          Get version numbers of locally installed npm packages - glob, string, or comma delimited list\n    --npmGlobalPackages    Get version numbers of globally installed npm packages\n\n    --duplicates           Mark duplicate npm packages inside parentheses eg. (2.1.4)\n    --fullTree             Traverse entire node_modules dependency tree, not just top level\n\n    --markdown             Print output in markdown format\n    --json                 Print output in JSON format\n    --console              Print to console (defaults to on for CLI usage, off for programmatic usage)\n```\n\n## Integration\n\nenvinfo is live in:\n\n-   [React Native](https://github.com/facebook/react-native) (`react-native info`)\n-   [Create React App](https://github.com/facebook/create-react-app) (`create-react-app --info`)\n-   [Expo CLI](https://github.com/expo/expo-cli) (`expo diagnostics`)\n-   [Webpack](https://github.com/webpack/webpack-cli) (`webpack-cli info`)\n-   [Solidarity](https://github.com/infinitered/solidarity) (`solidarity report`)\n-   [Gatsby](https://github.com/gatsbyjs/gatsby) (`gatsby info`)\n\nenvinfo is used in the ISSUE_TEMPLATE of:\n\n-   [styled-components](https://github.com/styled-components/styled-components)\n-   [Jest](https://github.com/facebook/jest)\n-   [Apollo Client](https://github.com/apollographql/apollo-client)\n\n## Alternatives\n\n-   type `command -v` until you smash your computer\n-   [specs](https://github.com/mcandre/specs) - an excellent ruby gem that runs `command -v` for you on :all-the-things: Great for raw info.\n-   [screenfetch](https://github.com/KittyKatt/screenFetch) - fetch system and terminal information, and display a pretty ascii logo\n-   [Solidarity](https://github.com/infinitered/solidarity) - a project based environment checker\n-   write your own\n\n## License\n\nMIT\n\n## Contributing\n\nPRs for additional features are welcome! Run `npm run lint && npm run format` before committing.\n\nThis project came out of a [PR](https://github.com/facebook/react-native/pull/14428) to the React Native CLI tool - issues are reported frequently without important environment information, like Node/npm versions.\n\n## Contributors\n\nThanks goes to these wonderful people ([emoji key](https://github.com/kentcdodds/all-contributors#emoji-key)):\n\n<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->\n<!-- prettier-ignore -->\n| [<img src=\"https://avatars1.githubusercontent.com/u/2925048?v=4\" width=\"100px;\"/><br /><sub><b>Trevor Brindle</b></sub>](http://trevorbrindle.com)<br />[💬](#question-tabrindle \"Answering Questions\") [📝](#blog-tabrindle \"Blogposts\") [🐛](https://github.com/tabrindle/envinfo/issues?q=author%3Atabrindle \"Bug reports\") [💻](https://github.com/tabrindle/envinfo/commits?author=tabrindle \"Code\") [📖](https://github.com/tabrindle/envinfo/commits?author=tabrindle \"Documentation\") [💡](#example-tabrindle \"Examples\") [🤔](#ideas-tabrindle \"Ideas, Planning, & Feedback\") [👀](#review-tabrindle \"Reviewed Pull Requests\") [📢](#talk-tabrindle \"Talks\") [⚠️](https://github.com/tabrindle/envinfo/commits?author=tabrindle \"Tests\") | [<img src=\"https://avatars0.githubusercontent.com/u/997157?v=4\" width=\"100px;\"/><br /><sub><b>Gant Laborde</b></sub>](http://gantlaborde.com/)<br />[📝](#blog-GantMan \"Blogposts\") [🐛](https://github.com/tabrindle/envinfo/issues?q=author%3AGantMan \"Bug reports\") [💻](https://github.com/tabrindle/envinfo/commits?author=GantMan \"Code\") [🤔](#ideas-GantMan \"Ideas, Planning, & Feedback\") | [<img src=\"https://avatars1.githubusercontent.com/u/599352?v=4\" width=\"100px;\"/><br /><sub><b>Anton Fisher</b></sub>](http://antonfisher.com)<br />[🐛](https://github.com/tabrindle/envinfo/issues?q=author%3Aantonfisher \"Bug reports\") [💻](https://github.com/tabrindle/envinfo/commits?author=antonfisher \"Code\") | [<img src=\"https://avatars1.githubusercontent.com/u/960133?v=4\" width=\"100px;\"/><br /><sub><b>Ahmad Awais ⚡️</b></sub>](https://AhmadAwais.com/)<br />[🐛](https://github.com/tabrindle/envinfo/issues?q=author%3Aahmadawais \"Bug reports\") [💻](https://github.com/tabrindle/envinfo/commits?author=ahmadawais \"Code\") | [<img src=\"https://avatars2.githubusercontent.com/u/9251453?v=4\" width=\"100px;\"/><br /><sub><b>Hasan</b></sub>](https://github.com/LEQADA)<br />[🐛](https://github.com/tabrindle/envinfo/issues?q=author%3ALEQADA \"Bug reports\") [💻](https://github.com/tabrindle/envinfo/commits?author=LEQADA \"Code\") | [<img src=\"https://avatars3.githubusercontent.com/u/1232725?v=4\" width=\"100px;\"/><br /><sub><b>Ernesto Ramírez</b></sub>](http://twitter.com/_ErnestoR)<br />[🐛](https://github.com/tabrindle/envinfo/issues?q=author%3AErnestoR \"Bug reports\") [💻](https://github.com/tabrindle/envinfo/commits?author=ErnestoR \"Code\") | [<img src=\"https://avatars1.githubusercontent.com/u/3759816?v=4\" width=\"100px;\"/><br /><sub><b>Jiawen Geng</b></sub>](https://www.gengjiawen.com)<br />[🐛](https://github.com/tabrindle/envinfo/issues?q=author%3Agengjiawen \"Bug reports\") [💻](https://github.com/tabrindle/envinfo/commits?author=gengjiawen \"Code\") [🤔](#ideas-gengjiawen \"Ideas, Planning, & Feedback\") [⚠️](https://github.com/tabrindle/envinfo/commits?author=gengjiawen \"Tests\") |\n| :---: | :---: | :---: | :---: | :---: | :---: | :---: |\n| [<img src=\"https://avatars3.githubusercontent.com/u/12520493?v=4\" width=\"100px;\"/><br /><sub><b>Zac Anger</b></sub>](https://zacanger.com)<br />[💻](https://github.com/tabrindle/envinfo/commits?author=zacanger \"Code\") [🐛](https://github.com/tabrindle/envinfo/issues?q=author%3Azacanger \"Bug reports\") | [<img src=\"https://avatars3.githubusercontent.com/u/497214?v=4\" width=\"100px;\"/><br /><sub><b>Ville Immonen</b></sub>](https://twitter.com/VilleImmonen)<br />[🐛](https://github.com/tabrindle/envinfo/issues?q=author%3Afson \"Bug reports\") [💻](https://github.com/tabrindle/envinfo/commits?author=fson \"Code\") | [<img src=\"https://avatars2.githubusercontent.com/u/27246?v=4\" width=\"100px;\"/><br /><sub><b>Olmo Maldonado</b></sub>](http://ibolmo.com)<br />[🐛](https://github.com/tabrindle/envinfo/issues?q=author%3Aibolmo \"Bug reports\") [💻](https://github.com/tabrindle/envinfo/commits?author=ibolmo \"Code\") |\n<!-- ALL-CONTRIBUTORS-LIST:END -->\n\nThis project follows the [all-contributors](https://github.com/kentcdodds/all-contributors) specification. Contributions of any kind welcome!\n/LICENSE\u0004/MIT License\n\nCopyright (c) 2018 Trevor Brindle\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n/package.json\u000b\b{\n  \"name\": \"envinfo\",\n  \"version\": \"7.8.1\",\n  \"description\": \"Info about your dev environment for debugging purposes\",\n  \"repository\": \"https://github.com/tabrindle/envinfo\",\n  \"author\": \"tabrindle@gmail.com\",\n  \"license\": \"MIT\",\n  \"files\": [\n    \"dist/\"\n  ],\n  \"main\": \"dist/envinfo.js\",\n  \"bin\": {\n    \"envinfo\": \"dist/cli.js\"\n  },\n  \"engines\": {\n    \"node\": \">=4\"\n  },\n  \"scripts\": {\n    \"build\": \"webpack --progress\",\n    \"check:format\": \"prettier -l src/**/*.js --verbose\",\n    \"compress\": \"gzexe envinfo-* && upx envinfo-win.exe\",\n    \"contributors:add\": \"all-contributors add\",\n    \"contributors:generate\": \"all-contributors generate\",\n    \"postcompress\": \"tar -czvf envinfo-linux.tar.gz envinfo-linux && tar -czvf envinfo-macos.tar.gz envinfo-macos && zip -r -X envinfo-win.zip envinfo-win.exe\",\n    \"executable\": \"pkg package.json\",\n    \"format\": \"prettier --write src/**/*.js\",\n    \"lint\": \"eslint src\",\n    \"lint-fix\": \"eslint src --fix\",\n    \"preversion\": \"npm run test && webpack && git add .\",\n    \"postversion\": \"npm run executable && npm run compress && npm run release\",\n    \"release\": \"github-release upload --owner=tabrindle --repo=envinfo --tag=${npm_package_version} 'envinfo-linux.tar.gz' 'envinfo-macos.tar.gz' 'envinfo-win.zip'\",\n    \"start\": \"node -r esm src/cli.js\",\n    \"test\": \"jest --env=node && eslint src && prettier -l src/**/*.js\"\n  },\n  \"husky\": {\n    \"hooks\": {\n      \"commit-msg\": \"commitlint -E HUSKY_GIT_PARAMS && npm run lint\"\n    }\n  },\n  \"keywords\": [\n    \"development\",\n    \"env\",\n    \"environment\",\n    \"info\",\n    \"issues\",\n    \"reporting\",\n    \"diagnostics\"\n  ],\n  \"pkg\": {\n    \"scripts\": \"dist/*.js\",\n    \"targets\": [\n      \"linux\",\n      \"macos\",\n      \"win\"\n    ]\n  },\n  \"jest\": {\n    \"testEnvironment\": \"node\"\n  },\n  \"dependencies\": {},\n  \"devDependencies\": {\n    \"@babel/core\": \"^7.2.2\",\n    \"@babel/plugin-proposal-optional-chaining\": \"^7.2.0\",\n    \"@babel/polyfill\": \"^7.2.5\",\n    \"@babel/preset-env\": \"^7.3.1\",\n    \"@commitlint/cli\": \"^8.3.5\",\n    \"@commitlint/config-conventional\": \"^8.3.4\",\n    \"all-contributors-cli\": \"^4.11.1\",\n    \"babel-core\": \"7.0.0-bridge.0\",\n    \"babel-eslint\": \"^10.0.1\",\n    \"babel-jest\": \"23.6.0\",\n    \"babel-loader\": \"^8.0.5\",\n    \"eslint\": \"^5.13.0\",\n    \"eslint-config-airbnb-base\": \"^12.1.0\",\n    \"eslint-config-prettier\": \"^2.7.0\",\n    \"eslint-plugin-import\": \"^2.8.0\",\n    \"eslint-plugin-prettier\": \"^2.3.1\",\n    \"esm\": \"^3.2.22\",\n    \"github-release-cli\": \"^0.4.1\",\n    \"glob\": \"^7.1.6\",\n    \"husky\": \"^4.2.5\",\n    \"jest\": \"^22.4.3\",\n    \"minimist\": \"^1.2.5\",\n    \"os-name\": \"^3.1.0\",\n    \"pkg\": \"^4.5.1\",\n    \"prettier\": \"^1.19.1\",\n    \"prettier-eslint-cli\": \"^4.1.1\",\n    \"webpack\": \"^4.29.6\",\n    \"webpack-cli\": \"^3.1.2\",\n    \"which\": \"^1.2.14\",\n    \"yamlify-object\": \"^0.5.1\"\n  },\n  \"resolutions\": {\n    \"lodash\": \"4.17.15\"\n  }\n}\n/dist/cli.js\u001a>#!/usr/bin/env node\n\"use strict\";module.exports=function(n){var e={};function o(t){if(e[t])return e[t].exports;var r=e[t]={i:t,l:!1,exports:{}};return n[t].call(r.exports,r,r.exports,o),r.l=!0,r.exports}return o.m=n,o.c=e,o.d=function(n,e,t){o.o(n,e)||Object.defineProperty(n,e,{enumerable:!0,get:t})},o.r=function(n){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(n,\"__esModule\",{value:!0})},o.t=function(n,e){if(1&e&&(n=o(n)),8&e)return n;if(4&e&&\"object\"==typeof n&&n&&n.__esModule)return n;var t=Object.create(null);if(o.r(t),Object.defineProperty(t,\"default\",{enumerable:!0,value:n}),2&e&&\"string\"!=typeof n)for(var r in n)o.d(t,r,function(e){return n[e]}.bind(null,r));return t},o.n=function(n){var e=n&&n.__esModule?function(){return n.default}:function(){return n};return o.d(e,\"a\",e),e},o.o=function(n,e){return Object.prototype.hasOwnProperty.call(n,e)},o.p=\"\",o(o.s=171)}({171:function(n,e,o){var t=o(172)(process.argv.slice(2));t.console=!0,t.help||t._.indexOf(\"help\")>-1?console.log(\"\\n  ,,',                                  ,,             ,,,,,,           ,',,\\n ,,,                                                  ,,,                  ,,,\\n ,,       ,,,,,    ,,,,,,   ,,,     ,,  ,,  .,,,,,,   ,,,,,,,   ,,,,,       ,,\\n ,,     ,,    ,,  ,,,   ,,,  ,,    ,,,  ,,  ,,,   ,,, ,,      ,,,   ,,,     ,,\\n ,,,   ,,     .,, ,,,    ,,  ,,,   ,,   ,,  ,,,    ,, ,,     ,,      ,,     ,,,\\n ,,    ,,,,,,,,,, ,,,    ,,   ,,  ,,    ,,  ,,,    ,, ,,     ,,      ,,     ,,\\n ,,    ,,,        ,,,    ,,    ,,,,,    ,,  ,,,    ,, ,,     ,,,    ,,,     ,,\\n ,,      ,,,,,,,  ,,,    ,,     ,,,     ,,  ,,,    ,, ,,       ,,,,,,,      ,,\\n ,,,                                                                       ,,,\\n  ,,,'                                                                  ',,,\\n\\n  VERSION: 7.8.0\\n\\n  USAGE:\\n\\n    `envinfo` || `npx envinfo`\\n\\n  OPTIONS:\\n\\n    --system               Print general system info such as OS, CPU, Memory and Shell\\n    --browsers             Get version numbers of installed web browsers\\n    --SDKs                 Get platforms, build tools and SDKs of iOS and Android\\n    --IDEs                 Get version numbers of installed IDEs\\n    --languages            Get version numbers of installed languages such as Java, Python, PHP, etc\\n    --managers             Get version numbers of installed package/dependency managers\\n    --monorepos            Get monorepo tools\\n    --binaries             Get version numbers of node, npm, watchman, etc\\n    --npmPackages          Get version numbers of locally installed npm packages - glob, string, or comma delimited list\\n    --npmGlobalPackages    Get version numbers of globally installed npm packages\\n\\n    --duplicates           Mark duplicate npm packages inside parentheses eg. (2.1.4)\\n    --fullTree             Traverse entire node_modules dependency tree, not just top level\\n\\n    --markdown             Print output in markdown format\\n    --json                 Print output in JSON format\\n    --console              Print to console (defaults to on for CLI usage, off for programmatic usage)\\n    --showNotFound         Don't filter out values marked 'Not Found'\\n    --title                Give your report a top level title ie 'Environment Report'\\n\\n    --clipboard            *Removed - use clipboardy or clipboard-cli directly*\\n  \"):t.version||t.v||t._.indexOf(\"version\")>-1?console.log(\"7.8.0\"):o(173).cli(t)},172:function(n,e){function o(n){return\"number\"==typeof n||(!!/^0x[0-9a-f]+$/i.test(n)||/^[-+]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(e[-+]?\\d+)?$/.test(n))}n.exports=function(n,e){e||(e={});var t={bools:{},strings:{},unknownFn:null};\"function\"==typeof e.unknown&&(t.unknownFn=e.unknown),\"boolean\"==typeof e.boolean&&e.boolean?t.allBools=!0:[].concat(e.boolean).filter(Boolean).forEach(function(n){t.bools[n]=!0});var r={};Object.keys(e.alias||{}).forEach(function(n){r[n]=[].concat(e.alias[n]),r[n].forEach(function(e){r[e]=[n].concat(r[n].filter(function(n){return e!==n}))})}),[].concat(e.string).filter(Boolean).forEach(function(n){t.strings[n]=!0,r[n]&&(t.strings[r[n]]=!0)});var s=e.default||{},i={_:[]};Object.keys(t.bools).forEach(function(n){a(n,void 0!==s[n]&&s[n])});var l=[];function a(n,e,s){if(!s||!t.unknownFn||function(n,e){return t.allBools&&/^--[^=]+$/.test(e)||t.strings[n]||t.bools[n]||r[n]}(n,s)||!1!==t.unknownFn(s)){var l=!t.strings[n]&&o(e)?Number(e):e;u(i,n.split(\".\"),l),(r[n]||[]).forEach(function(n){u(i,n.split(\".\"),l)})}}function u(n,e,o){for(var r=n,s=0;s<e.length-1;s++){if(\"__proto__\"===(i=e[s]))return;void 0===r[i]&&(r[i]={}),r[i]!==Object.prototype&&r[i]!==Number.prototype&&r[i]!==String.prototype||(r[i]={}),r[i]===Array.prototype&&(r[i]=[]),r=r[i]}var i;\"__proto__\"!==(i=e[e.length-1])&&(r!==Object.prototype&&r!==Number.prototype&&r!==String.prototype||(r={}),r===Array.prototype&&(r=[]),void 0===r[i]||t.bools[i]||\"boolean\"==typeof r[i]?r[i]=o:Array.isArray(r[i])?r[i].push(o):r[i]=[r[i],o])}function c(n){return r[n].some(function(n){return t.bools[n]})}-1!==n.indexOf(\"--\")&&(l=n.slice(n.indexOf(\"--\")+1),n=n.slice(0,n.indexOf(\"--\")));for(var f=0;f<n.length;f++){var p=n[f];if(/^--.+=/.test(p)){var d=p.match(/^--([^=]+)=([\\s\\S]*)$/),b=d[1],m=d[2];t.bools[b]&&(m=\"false\"!==m),a(b,m,p)}else if(/^--no-.+/.test(p)){a(b=p.match(/^--no-(.+)/)[1],!1,p)}else if(/^--.+/.test(p)){b=p.match(/^--(.+)/)[1];void 0===(h=n[f+1])||/^-/.test(h)||t.bools[b]||t.allBools||r[b]&&c(b)?/^(true|false)$/.test(h)?(a(b,\"true\"===h,p),f++):a(b,!t.strings[b]||\"\",p):(a(b,h,p),f++)}else if(/^-[^-]+/.test(p)){for(var v=p.slice(1,-1).split(\"\"),g=!1,y=0;y<v.length;y++){var h;if(\"-\"!==(h=p.slice(y+2))){if(/[A-Za-z]/.test(v[y])&&/=/.test(h)){a(v[y],h.split(\"=\")[1],p),g=!0;break}if(/[A-Za-z]/.test(v[y])&&/-?\\d+(\\.\\d*)?(e-?\\d+)?$/.test(h)){a(v[y],h,p),g=!0;break}if(v[y+1]&&v[y+1].match(/\\W/)){a(v[y],p.slice(y+2),p),g=!0;break}a(v[y],!t.strings[v[y]]||\"\",p)}else a(v[y],h,p)}b=p.slice(-1)[0];g||\"-\"===b||(!n[f+1]||/^(-|--)[^-]/.test(n[f+1])||t.bools[b]||r[b]&&c(b)?n[f+1]&&/^(true|false)$/.test(n[f+1])?(a(b,\"true\"===n[f+1],p),f++):a(b,!t.strings[b]||\"\",p):(a(b,n[f+1],p),f++))}else if(t.unknownFn&&!1===t.unknownFn(p)||i._.push(t.strings._||!o(p)?p:Number(p)),e.stopEarly){i._.push.apply(i._,n.slice(f+1));break}}return Object.keys(s).forEach(function(n){var e,o,t;e=i,o=n.split(\".\"),t=e,o.slice(0,-1).forEach(function(n){t=t[n]||{}}),o[o.length-1]in t||(u(i,n.split(\".\"),s[n]),(r[n]||[]).forEach(function(e){u(i,e.split(\".\"),s[n])}))}),e[\"--\"]?(i[\"--\"]=new Array,l.forEach(function(n){i[\"--\"].push(n)})):l.forEach(function(n){i._.push(n)}),i}},173:function(n,e){n.exports=require(\"./envinfo\")}});/dist/envinfo.js\u0000\u0002\u0011Tmodule.exports=function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&\"object\"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,\"default\",{enumerable:!0,value:e}),2&t&&\"string\"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,\"a\",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p=\"\",n(n.s=78)}([function(e,t){e.exports=require(\"path\")},function(e,t,n){\"use strict\";n(22),n(101),n(21),n(103),n(114),n(16),n(27),n(74),n(116),n(2);var r=n(0),o=n(5),i=n(17),s=n(49),a=n(76),c=n(45),u=n(121),l=function(e){var t=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}).unify,n=void 0!==t&&t;return new Promise(function(t){s.exec(e,{stdio:[0,\"pipe\",\"ignore\"]},function(e,r,o){var i=\"\";i=n?r.toString()+o.toString():r.toString(),t((e?\"\":i).trim())})})},f=function(e){var t=Object.values(Array.prototype.slice.call(arguments).slice(1));(process.env.ENVINFO_DEBUG||\"\").toLowerCase()===e&&console.log(e,JSON.stringify(t))},p=function(e){return new Promise(function(t){o.readFile(e,\"utf8\",function(e,n){return t(n||null)})})},h=function(e){return p(e).then(function(e){return e?JSON.parse(e):null})},d=/\\d+\\.[\\d+|.]+/g,m=function(e){f(\"trace\",\"findDarwinApplication\",e);var t=`mdfind \"kMDItemCFBundleIdentifier=='${e}'\"`;return f(\"trace\",t),l(t).then(function(e){return e.replace(/(\\s)/g,\"\\\\ \")})},g=function(e,t){var n=(t||[\"CFBundleShortVersionString\"]).map(function(e){return\"-c Print:\"+e});return[\"/usr/libexec/PlistBuddy\"].concat(n).concat([e]).join(\" \")},v=function(e,t){for(var n=[],r=null;null!==(r=e.exec(t));)n.push(r);return n};e.exports={run:l,log:f,fileExists:function(e){return new Promise(function(t){o.stat(e,function(n){return t(n?null:e)})})},readFile:p,requireJson:h,versionRegex:d,findDarwinApplication:m,generatePlistBuddyCommand:g,matchAll:v,parseSDKManagerOutput:function(e){var t=e.split(\"Available\")[0];return{apiLevels:v(u.androidAPILevels,t).map(function(e){return e[1]}),buildTools:v(u.androidBuildTools,t).map(function(e){return e[1]}),systemImages:v(u.androidSystemImages,t).map(function(e){return e[1].split(\"|\").map(function(e){return e.trim()})}).map(function(e){return e[0].split(\";\")[0]+\" | \"+e[2].split(\" System Image\")[0]})}},isLinux:\"linux\"===process.platform,isMacOS:\"darwin\"===process.platform,NA:\"N/A\",NotFound:\"Not Found\",isWindows:process.platform.startsWith(\"win\"),isObject:function(e){return\"object\"==typeof e&&!Array.isArray(e)},noop:function(e){return e},pipe:function(e){return function(t){return e.reduce(function(e,t){return t(e)},t)}},browserBundleIdentifiers:{\"Brave Browser\":\"com.brave.Browser\",Chrome:\"com.google.Chrome\",\"Chrome Canary\":\"com.google.Chrome.canary\",Firefox:\"org.mozilla.firefox\",\"Firefox Developer Edition\":\"org.mozilla.firefoxdeveloperedition\",\"Firefox Nightly\":\"org.mozilla.nightly\",\"Microsoft Edge\":\"com.microsoft.edgemac\",Safari:\"com.apple.Safari\",\"Safari Technology Preview\":\"com.apple.SafariTechnologyPreview\"},ideBundleIdentifiers:{Atom:\"com.github.atom\",IntelliJ:\"com.jetbrains.intellij\",PhpStorm:\"com.jetbrains.PhpStorm\",\"Sublime Text\":\"com.sublimetext.3\",WebStorm:\"com.jetbrains.WebStorm\"},runSync:function(e){return(s.execSync(e,{stdio:[0,\"pipe\",\"ignore\"]}).toString()||\"\").trim()},which:function(e){return new Promise(function(t){return a(e,function(e,n){return t(n)})})},getDarwinApplicationVersion:function(e){var t;return f(\"trace\",\"getDarwinApplicationVersion\",e),t=\"darwin\"!==process.platform?\"N/A\":m(e).then(function(e){return l(g(r.join(e,\"Contents\",\"Info.plist\"),[\"CFBundleShortVersionString\"]))}),Promise.resolve(t)},uniq:function(e){return Array.from(new Set(e))},toReadableBytes:function(e){var t=Math.floor(Math.log(e)/Math.log(1024));return e?(e/Math.pow(1024,t)).toFixed(2)+\" \"+[\"B\",\"KB\",\"MB\",\"GB\",\"TB\",\"PB\"][t]:\"0 Bytes\"},omit:function(e,t){return Object.keys(e).filter(function(e){return t.indexOf(e)<0}).reduce(function(t,n){return Object.assign(t,{[n]:e[n]})},{})},pick:function(e,t){return Object.keys(e).filter(function(e){return t.indexOf(e)>=0}).reduce(function(t,n){return Object.assign(t,{[n]:e[n]})},{})},getPackageJsonByName:function(e){return h(r.join(process.cwd(),\"node_modules\",e,\"package.json\"))},getPackageJsonByPath:function(e){return h(r.join(process.cwd(),e))},getPackageJsonByFullPath:function(e){return f(\"trace\",\"getPackageJsonByFullPath\",e),h(e)},getAllPackageJsonPaths:function(e){return f(\"trace\",\"getAllPackageJsonPaths\",e),new Promise(function(t){var n=function(e,n){return t(n.map(r.normalize)||[])};return c(e?r.join(\"node_modules\",e,\"package.json\"):r.join(\"node_modules\",\"**\",\"package.json\"),n)})},sortObject:function(e){return Object.keys(e).sort().reduce(function(t,n){return t[n]=e[n],t},{})},findVersion:function(e,t,n){f(\"trace\",\"findVersion\",e,t,n);var r=n||0,o=t||d,i=e.match(o);return i?i[r]:e},condensePath:function(e){return(e||\"\").replace(i.homedir(),\"~\")},determineFound:function(e,t,n){return f(\"trace\",\"determineFound\",e,t,n),\"N/A\"===t?Promise.resolve([e,\"N/A\"]):t&&0!==Object.keys(t).length?n?Promise.resolve([e,t,n]):Promise.resolve([e,t]):Promise.resolve([e,\"Not Found\"])}}},function(e,t,n){\"use strict\";var r,o,i,s,a=n(36),c=n(4),u=n(12),l=n(56),f=n(8),p=n(6),h=n(19),d=n(37),m=n(38),g=n(81),v=n(60).set,y=n(83)(),b=n(62),w=n(84),x=n(85),S=n(86),P=c.TypeError,O=c.process,j=O&&O.versions,E=j&&j.v8||\"\",I=c.Promise,_=\"process\"==l(O),A=function(){},k=o=b.f,N=!!function(){try{var e=I.resolve(1),t=(e.constructor={})[n(3)(\"species\")]=function(e){e(A,A)};return(_||\"function\"==typeof PromiseRejectionEvent)&&e.then(A)instanceof t&&0!==E.indexOf(\"6.6\")&&-1===x.indexOf(\"Chrome/66\")}catch(e){}}(),F=function(e){var t;return!(!p(e)||\"function\"!=typeof(t=e.then))&&t},C=function(e,t){if(!e._n){e._n=!0;var n=e._c;y(function(){for(var r=e._v,o=1==e._s,i=0,s=function(t){var n,i,s,a=o?t.ok:t.fail,c=t.resolve,u=t.reject,l=t.domain;try{a?(o||(2==e._h&&V(e),e._h=1),!0===a?n=r:(l&&l.enter(),n=a(r),l&&(l.exit(),s=!0)),n===t.promise?u(P(\"Promise-chain cycle\")):(i=F(n))?i.call(n,c,u):c(n)):u(r)}catch(e){l&&!s&&l.exit(),u(e)}};n.length>i;)s(n[i++]);e._c=[],e._n=!1,t&&!e._h&&M(e)})}},M=function(e){v.call(c,function(){var t,n,r,o=e._v,i=T(e);if(i&&(t=w(function(){_?O.emit(\"unhandledRejection\",o,e):(n=c.onunhandledrejection)?n({promise:e,reason:o}):(r=c.console)&&r.error&&r.error(\"Unhandled promise rejection\",o)}),e._h=_||T(e)?2:1),e._a=void 0,i&&t.e)throw t.v})},T=function(e){return 1!==e._h&&0===(e._a||e._c).length},V=function(e){v.call(c,function(){var t;_?O.emit(\"rejectionHandled\",e):(t=c.onrejectionhandled)&&t({promise:e,reason:e._v})})},D=function(e){var t=this;t._d||(t._d=!0,(t=t._w||t)._v=e,t._s=2,t._a||(t._a=t._c.slice()),C(t,!0))},B=function(e){var t,n=this;if(!n._d){n._d=!0,n=n._w||n;try{if(n===e)throw P(\"Promise can't be resolved itself\");(t=F(e))?y(function(){var r={_w:n,_d:!1};try{t.call(e,u(B,r,1),u(D,r,1))}catch(e){D.call(r,e)}}):(n._v=e,n._s=1,C(n,!1))}catch(e){D.call({_w:n,_d:!1},e)}}};N||(I=function(e){d(this,I,\"Promise\",\"_h\"),h(e),r.call(this);try{e(u(B,this,1),u(D,this,1))}catch(e){D.call(this,e)}},(r=function(e){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1}).prototype=n(40)(I.prototype,{then:function(e,t){var n=k(g(this,I));return n.ok=\"function\"!=typeof e||e,n.fail=\"function\"==typeof t&&t,n.domain=_?O.domain:void 0,this._c.push(n),this._a&&this._a.push(n),this._s&&C(this,!1),n.promise},catch:function(e){return this.then(void 0,e)}}),i=function(){var e=new r;this.promise=e,this.resolve=u(B,e,1),this.reject=u(D,e,1)},b.f=k=function(e){return e===I||e===s?new i(e):o(e)}),f(f.G+f.W+f.F*!N,{Promise:I}),n(26)(I,\"Promise\"),n(63)(\"Promise\"),s=n(18).Promise,f(f.S+f.F*!N,\"Promise\",{reject:function(e){var t=k(this);return(0,t.reject)(e),t.promise}}),f(f.S+f.F*(a||!N),\"Promise\",{resolve:function(e){return S(a&&this===s?I:this,e)}}),f(f.S+f.F*!(N&&n(41)(function(e){I.all(e).catch(A)})),\"Promise\",{all:function(e){var t=this,n=k(t),r=n.resolve,o=n.reject,i=w(function(){var n=[],i=0,s=1;m(e,!1,function(e){var a=i++,c=!1;n.push(void 0),s++,t.resolve(e).then(function(e){c||(c=!0,n[a]=e,--s||r(n))},o)}),--s||r(n)});return i.e&&o(i.v),n.promise},race:function(e){var t=this,n=k(t),r=n.reject,o=w(function(){m(e,!1,function(e){t.resolve(e).then(n.resolve,r)})});return o.e&&r(o.v),n.promise}})},function(e,t,n){var r=n(55)(\"wks\"),o=n(24),i=n(4).Symbol,s=\"function\"==typeof i;(e.exports=function(e){return r[e]||(r[e]=s&&i[e]||(s?i:o)(\"Symbol.\"+e))}).store=r},function(e,t){var n=e.exports=\"undefined\"!=typeof window&&window.Math==Math?window:\"undefined\"!=typeof self&&self.Math==Math?self:Function(\"return this\")();\"number\"==typeof __g&&(__g=n)},function(e,t){e.exports=require(\"fs\")},function(e,t){e.exports=function(e){return\"object\"==typeof e?null!==e:\"function\"==typeof e}},function(e,t,n){var r=n(6);e.exports=function(e){if(!r(e))throw TypeError(e+\" is not an object!\");return e}},function(e,t,n){var r=n(4),o=n(18),i=n(13),s=n(14),a=n(12),c=function(e,t,n){var u,l,f,p,h=e&c.F,d=e&c.G,m=e&c.S,g=e&c.P,v=e&c.B,y=d?r:m?r[t]||(r[t]={}):(r[t]||{}).prototype,b=d?o:o[t]||(o[t]={}),w=b.prototype||(b.prototype={});for(u in d&&(n=t),n)f=((l=!h&&y&&void 0!==y[u])?y:n)[u],p=v&&l?a(f,r):g&&\"function\"==typeof f?a(Function.call,f):f,y&&s(y,u,f,e&c.U),b[u]!=f&&i(b,u,p),g&&w[u]!=f&&(w[u]=f)};r.core=o,c.F=1,c.G=2,c.S=4,c.P=8,c.B=16,c.W=32,c.U=64,c.R=128,e.exports=c},function(e,t,n){e.exports=!n(10)(function(){return 7!=Object.defineProperty({},\"a\",{get:function(){return 7}}).a})},function(e,t){e.exports=function(e){try{return!!e()}catch(e){return!0}}},function(e,t,n){var r=n(7),o=n(50),i=n(51),s=Object.defineProperty;t.f=n(9)?Object.defineProperty:function(e,t,n){if(r(e),t=i(t,!0),r(n),o)try{return s(e,t,n)}catch(e){}if(\"get\"in n||\"set\"in n)throw TypeError(\"Accessors not supported!\");return\"value\"in n&&(e[t]=n.value),e}},function(e,t,n){var r=n(19);e.exports=function(e,t,n){if(r(e),void 0===t)return e;switch(n){case 1:return function(n){return e.call(t,n)};case 2:return function(n,r){return e.call(t,n,r)};case 3:return function(n,r,o){return e.call(t,n,r,o)}}return function(){return e.apply(t,arguments)}}},function(e,t,n){var r=n(11),o=n(23);e.exports=n(9)?function(e,t,n){return r.f(e,t,o(1,n))}:function(e,t,n){return e[t]=n,e}},function(e,t,n){var r=n(4),o=n(13),i=n(15),s=n(24)(\"src\"),a=Function.toString,c=(\"\"+a).split(\"toString\");n(18).inspectSource=function(e){return a.call(e)},(e.exports=function(e,t,n,a){var u=\"function\"==typeof n;u&&(i(n,\"name\")||o(n,\"name\",t)),e[t]!==n&&(u&&(i(n,s)||o(n,s,e[t]?\"\"+e[t]:c.join(String(t)))),e===r?e[t]=n:a?e[t]?e[t]=n:o(e,t,n):(delete e[t],o(e,t,n)))})(Function.prototype,\"toString\",function(){return\"function\"==typeof this&&this[s]||a.call(this)})},function(e,t){var n={}.hasOwnProperty;e.exports=function(e,t){return n.call(e,t)}},function(e,t,n){n(28)(\"split\",2,function(e,t,r){\"use strict\";var o=n(92),i=r,s=[].push;if(\"c\"==\"abbc\".split(/(b)*/)[1]||4!=\"test\".split(/(?:)/,-1).length||2!=\"ab\".split(/(?:ab)*/).length||4!=\".\".split(/(.?)(.?)/).length||\".\".split(/()()/).length>1||\"\".split(/.?/).length){var a=void 0===/()??/.exec(\"\")[1];r=function(e,t){var n=String(this);if(void 0===e&&0===t)return[];if(!o(e))return i.call(n,e,t);var r,c,u,l,f,p=[],h=(e.ignoreCase?\"i\":\"\")+(e.multiline?\"m\":\"\")+(e.unicode?\"u\":\"\")+(e.sticky?\"y\":\"\"),d=0,m=void 0===t?4294967295:t>>>0,g=new RegExp(e.source,h+\"g\");for(a||(r=new RegExp(\"^\"+g.source+\"$(?!\\\\s)\",h));(c=g.exec(n))&&!((u=c.index+c[0].length)>d&&(p.push(n.slice(d,c.index)),!a&&c.length>1&&c[0].replace(r,function(){for(f=1;f<arguments.length-2;f++)void 0===arguments[f]&&(c[f]=void 0)}),c.length>1&&c.index<n.length&&s.apply(p,c.slice(1)),l=c[0].length,d=u,p.length>=m));)g.lastIndex===c.index&&g.lastIndex++;return d===n.length?!l&&g.test(\"\")||p.push(\"\"):p.push(n.slice(d)),p.length>m?p.slice(0,m):p}}else\"0\".split(void 0,0).length&&(r=function(e,t){return void 0===e&&0===t?[]:i.call(this,e,t)});return[function(n,o){var i=e(this),s=null==n?void 0:n[t];return void 0!==s?s.call(n,i,o):r.call(String(i),n,o)},r]})},function(e,t){e.exports=require(\"os\")},function(e,t){var n=e.exports={version:\"2.5.7\"};\"number\"==typeof __e&&(__e=n)},function(e,t){e.exports=function(e){if(\"function\"!=typeof e)throw TypeError(e+\" is not a function!\");return e}},function(e,t){var n={}.toString;e.exports=function(e){return n.call(e).slice(8,-1)}},function(e,t,n){var r=n(8);r(r.S+r.F,\"Object\",{assign:n(88)})},function(e,t,n){n(28)(\"match\",1,function(e,t,n){return[function(n){\"use strict\";var r=e(this),o=null==n?void 0:n[t];return void 0!==o?o.call(n,r):new RegExp(n)[t](String(r))},n]})},function(e,t){e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},function(e,t){var n=0,r=Math.random();e.exports=function(e){return\"Symbol(\".concat(void 0===e?\"\":e,\")_\",(++n+r).toString(36))}},function(e,t,n){var r=n(53),o=n(34);e.exports=function(e){return r(o(e))}},function(e,t,n){var r=n(11).f,o=n(15),i=n(3)(\"toStringTag\");e.exports=function(e,t,n){e&&!o(e=n?e:e.prototype,i)&&r(e,i,{configurable:!0,value:t})}},function(e,t,n){n(28)(\"replace\",2,function(e,t,n){return[function(r,o){\"use strict\";var i=e(this),s=null==r?void 0:r[t];return void 0!==s?s.call(r,i,o):n.call(String(i),r,o)},n]})},function(e,t,n){\"use strict\";var r=n(13),o=n(14),i=n(10),s=n(34),a=n(3);e.exports=function(e,t,n){var c=a(e),u=n(s,c,\"\"[e]),l=u[0],f=u[1];i(function(){var t={};return t[c]=function(){return 7},7!=\"\"[e](t)})&&(o(String.prototype,e,l),r(RegExp.prototype,c,2==t?function(e,t){return f.call(e,this,t)}:function(e){return f.call(e,this)}))}},function(e,t,n){var r=n(34);e.exports=function(e){return Object(r(e))}},function(e,t){e.exports=require(\"util\")},function(e,t,n){var r=n(70);function o(e){var t=function(){return t.called?t.value:(t.called=!0,t.value=e.apply(this,arguments))};return t.called=!1,t}function i(e){var t=function(){if(t.called)throw new Error(t.onceError);return t.called=!0,t.value=e.apply(this,arguments)},n=e.name||\"Function wrapped with `once`\";return t.onceError=n+\" shouldn't be called more than once\",t.called=!1,t}e.exports=r(o),e.exports.strict=r(i),o.proto=o(function(){Object.defineProperty(Function.prototype,\"once\",{value:function(){return o(this)},configurable:!0}),Object.defineProperty(Function.prototype,\"onceStrict\",{value:function(){return i(this)},configurable:!0})})},function(e,t,n){\"use strict\";var r=n(8),o=n(52)(!0);r(r.P,\"Array\",{includes:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}}),n(80)(\"includes\")},function(e,t,n){var r=n(6),o=n(4).document,i=r(o)&&r(o.createElement);e.exports=function(e){return i?o.createElement(e):{}}},function(e,t){e.exports=function(e){if(null==e)throw TypeError(\"Can't call method on  \"+e);return e}},function(e,t,n){var r=n(54),o=Math.min;e.exports=function(e){return e>0?o(r(e),9007199254740991):0}},function(e,t){e.exports=!1},function(e,t){e.exports=function(e,t,n,r){if(!(e instanceof t)||void 0!==r&&r in e)throw TypeError(n+\": incorrect invocation!\");return e}},function(e,t,n){var r=n(12),o=n(57),i=n(58),s=n(7),a=n(35),c=n(59),u={},l={};(t=e.exports=function(e,t,n,f,p){var h,d,m,g,v=p?function(){return e}:c(e),y=r(n,f,t?2:1),b=0;if(\"function\"!=typeof v)throw TypeError(e+\" is not iterable!\");if(i(v)){for(h=a(e.length);h>b;b++)if((g=t?y(s(d=e[b])[0],d[1]):y(e[b]))===u||g===l)return g}else for(m=v.call(e);!(d=m.next()).done;)if((g=o(m,y,d.value,t))===u||g===l)return g}).BREAK=u,t.RETURN=l},function(e,t){e.exports={}},function(e,t,n){var r=n(14);e.exports=function(e,t,n){for(var o in t)r(e,o,t[o],n);return e}},function(e,t,n){var r=n(3)(\"iterator\"),o=!1;try{var i=[7][r]();i.return=function(){o=!0},Array.from(i,function(){throw 2})}catch(e){}e.exports=function(e,t){if(!t&&!o)return!1;var n=!1;try{var i=[7],s=i[r]();s.next=function(){return{done:n=!0}},i[r]=function(){return s},e(i)}catch(e){}return n}},function(e,t,n){var r=n(87),o=n(66);e.exports=Object.keys||function(e){return r(e,o)}},function(e,t,n){var r=n(55)(\"keys\"),o=n(24);e.exports=function(e){return r[e]||(r[e]=o(e))}},function(e,t){t.f={}.propertyIsEnumerable},function(e,t,n){e.exports=b;var r=n(5),o=n(67),i=n(46),s=(i.Minimatch,n(97)),a=n(68).EventEmitter,c=n(0),u=n(47),l=n(48),f=n(99),p=n(69),h=(p.alphasort,p.alphasorti,p.setopts),d=p.ownProp,m=n(100),g=(n(30),p.childrenIgnored),v=p.isIgnored,y=n(31);function b(e,t,n){if(\"function\"==typeof t&&(n=t,t={}),t||(t={}),t.sync){if(n)throw new TypeError(\"callback provided to sync glob\");return f(e,t)}return new x(e,t,n)}b.sync=f;var w=b.GlobSync=f.GlobSync;function x(e,t,n){if(\"function\"==typeof t&&(n=t,t=null),t&&t.sync){if(n)throw new TypeError(\"callback provided to sync glob\");return new w(e,t)}if(!(this instanceof x))return new x(e,t,n);h(this,e,t),this._didRealPath=!1;var r=this.minimatch.set.length;this.matches=new Array(r),\"function\"==typeof n&&(n=y(n),this.on(\"error\",n),this.on(\"end\",function(e){n(null,e)}));var o=this;if(this._processing=0,this._emitQueue=[],this._processQueue=[],this.paused=!1,this.noprocess)return this;if(0===r)return a();for(var i=!0,s=0;s<r;s++)this._process(this.minimatch.set[s],s,!1,a);function a(){--o._processing,o._processing<=0&&(i?process.nextTick(function(){o._finish()}):o._finish())}i=!1}b.glob=b,b.hasMagic=function(e,t){var n=function(e,t){if(null===t||\"object\"!=typeof t)return e;for(var n=Object.keys(t),r=n.length;r--;)e[n[r]]=t[n[r]];return e}({},t);n.noprocess=!0;var r=new x(e,n).minimatch.set;if(!e)return!1;if(r.length>1)return!0;for(var o=0;o<r[0].length;o++)if(\"string\"!=typeof r[0][o])return!0;return!1},b.Glob=x,s(x,a),x.prototype._finish=function(){if(u(this instanceof x),!this.aborted){if(this.realpath&&!this._didRealpath)return this._realpath();p.finish(this),this.emit(\"end\",this.found)}},x.prototype._realpath=function(){if(!this._didRealpath){this._didRealpath=!0;var e=this.matches.length;if(0===e)return this._finish();for(var t=this,n=0;n<this.matches.length;n++)this._realpathSet(n,r)}function r(){0==--e&&t._finish()}},x.prototype._realpathSet=function(e,t){var n=this.matches[e];if(!n)return t();var r=Object.keys(n),i=this,s=r.length;if(0===s)return t();var a=this.matches[e]=Object.create(null);r.forEach(function(n,r){n=i._makeAbs(n),o.realpath(n,i.realpathCache,function(r,o){r?\"stat\"===r.syscall?a[n]=!0:i.emit(\"error\",r):a[o]=!0,0==--s&&(i.matches[e]=a,t())})})},x.prototype._mark=function(e){return p.mark(this,e)},x.prototype._makeAbs=function(e){return p.makeAbs(this,e)},x.prototype.abort=function(){this.aborted=!0,this.emit(\"abort\")},x.prototype.pause=function(){this.paused||(this.paused=!0,this.emit(\"pause\"))},x.prototype.resume=function(){if(this.paused){if(this.emit(\"resume\"),this.paused=!1,this._emitQueue.length){var e=this._emitQueue.slice(0);this._emitQueue.length=0;for(var t=0;t<e.length;t++){var n=e[t];this._emitMatch(n[0],n[1])}}if(this._processQueue.length){var r=this._processQueue.slice(0);this._processQueue.length=0;for(t=0;t<r.length;t++){var o=r[t];this._processing--,this._process(o[0],o[1],o[2],o[3])}}}},x.prototype._process=function(e,t,n,r){if(u(this instanceof x),u(\"function\"==typeof r),!this.aborted)if(this._processing++,this.paused)this._processQueue.push([e,t,n,r]);else{for(var o,s=0;\"string\"==typeof e[s];)s++;switch(s){case e.length:return void this._processSimple(e.join(\"/\"),t,r);case 0:o=null;break;default:o=e.slice(0,s).join(\"/\")}var a,c=e.slice(s);null===o?a=\".\":l(o)||l(e.join(\"/\"))?(o&&l(o)||(o=\"/\"+o),a=o):a=o;var f=this._makeAbs(a);if(g(this,a))return r();c[0]===i.GLOBSTAR?this._processGlobStar(o,a,f,c,t,n,r):this._processReaddir(o,a,f,c,t,n,r)}},x.prototype._processReaddir=function(e,t,n,r,o,i,s){var a=this;this._readdir(n,i,function(c,u){return a._processReaddir2(e,t,n,r,o,i,u,s)})},x.prototype._processReaddir2=function(e,t,n,r,o,i,s,a){if(!s)return a();for(var u=r[0],l=!!this.minimatch.negate,f=u._glob,p=this.dot||\".\"===f.charAt(0),h=[],d=0;d<s.length;d++){if(\".\"!==(g=s[d]).charAt(0)||p)(l&&!e?!g.match(u):g.match(u))&&h.push(g)}var m=h.length;if(0===m)return a();if(1===r.length&&!this.mark&&!this.stat){this.matches[o]||(this.matches[o]=Object.create(null));for(d=0;d<m;d++){var g=h[d];e&&(g=\"/\"!==e?e+\"/\"+g:e+g),\"/\"!==g.charAt(0)||this.nomount||(g=c.join(this.root,g)),this._emitMatch(o,g)}return a()}r.shift();for(d=0;d<m;d++){g=h[d];e&&(g=\"/\"!==e?e+\"/\"+g:e+g),this._process([g].concat(r),o,i,a)}a()},x.prototype._emitMatch=function(e,t){if(!this.aborted&&!v(this,t))if(this.paused)this._emitQueue.push([e,t]);else{var n=l(t)?t:this._makeAbs(t);if(this.mark&&(t=this._mark(t)),this.absolute&&(t=n),!this.matches[e][t]){if(this.nodir){var r=this.cache[n];if(\"DIR\"===r||Array.isArray(r))return}this.matches[e][t]=!0;var o=this.statCache[n];o&&this.emit(\"stat\",t,o),this.emit(\"match\",t)}}},x.prototype._readdirInGlobStar=function(e,t){if(!this.aborted){if(this.follow)return this._readdir(e,!1,t);var n=this,o=m(\"lstat\\0\"+e,function(r,o){if(r&&\"ENOENT\"===r.code)return t();var i=o&&o.isSymbolicLink();n.symlinks[e]=i,i||!o||o.isDirectory()?n._readdir(e,!1,t):(n.cache[e]=\"FILE\",t())});o&&r.lstat(e,o)}},x.prototype._readdir=function(e,t,n){if(!this.aborted&&(n=m(\"readdir\\0\"+e+\"\\0\"+t,n))){if(t&&!d(this.symlinks,e))return this._readdirInGlobStar(e,n);if(d(this.cache,e)){var o=this.cache[e];if(!o||\"FILE\"===o)return n();if(Array.isArray(o))return n(null,o)}r.readdir(e,function(e,t,n){return function(r,o){r?e._readdirError(t,r,n):e._readdirEntries(t,o,n)}}(this,e,n))}},x.prototype._readdirEntries=function(e,t,n){if(!this.aborted){if(!this.mark&&!this.stat)for(var r=0;r<t.length;r++){var o=t[r];o=\"/\"===e?e+o:e+\"/\"+o,this.cache[o]=!0}return this.cache[e]=t,n(null,t)}},x.prototype._readdirError=function(e,t,n){if(!this.aborted){switch(t.code){case\"ENOTSUP\":case\"ENOTDIR\":var r=this._makeAbs(e);if(this.cache[r]=\"FILE\",r===this.cwdAbs){var o=new Error(t.code+\" invalid cwd \"+this.cwd);o.path=this.cwd,o.code=t.code,this.emit(\"error\",o),this.abort()}break;case\"ENOENT\":case\"ELOOP\":case\"ENAMETOOLONG\":case\"UNKNOWN\":this.cache[this._makeAbs(e)]=!1;break;default:this.cache[this._makeAbs(e)]=!1,this.strict&&(this.emit(\"error\",t),this.abort()),this.silent||console.error(\"glob error\",t)}return n()}},x.prototype._processGlobStar=function(e,t,n,r,o,i,s){var a=this;this._readdir(n,i,function(c,u){a._processGlobStar2(e,t,n,r,o,i,u,s)})},x.prototype._processGlobStar2=function(e,t,n,r,o,i,s,a){if(!s)return a();var c=r.slice(1),u=e?[e]:[],l=u.concat(c);this._process(l,o,!1,a);var f=this.symlinks[n],p=s.length;if(f&&i)return a();for(var h=0;h<p;h++){if(\".\"!==s[h].charAt(0)||this.dot){var d=u.concat(s[h],c);this._process(d,o,!0,a);var m=u.concat(s[h],r);this._process(m,o,!0,a)}}a()},x.prototype._processSimple=function(e,t,n){var r=this;this._stat(e,function(o,i){r._processSimple2(e,t,o,i,n)})},x.prototype._processSimple2=function(e,t,n,r,o){if(this.matches[t]||(this.matches[t]=Object.create(null)),!r)return o();if(e&&l(e)&&!this.nomount){var i=/[\\/\\\\]$/.test(e);\"/\"===e.charAt(0)?e=c.join(this.root,e):(e=c.resolve(this.root,e),i&&(e+=\"/\"))}\"win32\"===process.platform&&(e=e.replace(/\\\\/g,\"/\")),this._emitMatch(t,e),o()},x.prototype._stat=function(e,t){var n=this._makeAbs(e),o=\"/\"===e.slice(-1);if(e.length>this.maxLength)return t();if(!this.stat&&d(this.cache,n)){var i=this.cache[n];if(Array.isArray(i)&&(i=\"DIR\"),!o||\"DIR\"===i)return t(null,i);if(o&&\"FILE\"===i)return t()}var s=this.statCache[n];if(void 0!==s){if(!1===s)return t(null,s);var a=s.isDirectory()?\"DIR\":\"FILE\";return o&&\"FILE\"===a?t():t(null,a,s)}var c=this,u=m(\"stat\\0\"+n,function(o,i){if(i&&i.isSymbolicLink())return r.stat(n,function(r,o){r?c._stat2(e,n,null,i,t):c._stat2(e,n,r,o,t)});c._stat2(e,n,o,i,t)});u&&r.lstat(n,u)},x.prototype._stat2=function(e,t,n,r,o){if(n&&(\"ENOENT\"===n.code||\"ENOTDIR\"===n.code))return this.statCache[t]=!1,o();var i=\"/\"===e.slice(-1);if(this.statCache[t]=r,\"/\"===t.slice(-1)&&r&&!r.isDirectory())return o(null,!1,r);var s=!0;return r&&(s=r.isDirectory()?\"DIR\":\"FILE\"),this.cache[t]=this.cache[t]||s,i&&\"FILE\"===s?o():o(null,s,r)}},function(e,t,n){e.exports=d,d.Minimatch=m;var r={sep:\"/\"};try{r=n(0)}catch(e){}var o=d.GLOBSTAR=m.GLOBSTAR={},i=n(94),s={\"!\":{open:\"(?:(?!(?:\",close:\"))[^/]*?)\"},\"?\":{open:\"(?:\",close:\")?\"},\"+\":{open:\"(?:\",close:\")+\"},\"*\":{open:\"(?:\",close:\")*\"},\"@\":{open:\"(?:\",close:\")\"}},a=\"[^/]\",c=a+\"*?\",u=\"(?:(?!(?:\\\\/|^)(?:\\\\.{1,2})($|\\\\/)).)*?\",l=\"(?:(?!(?:\\\\/|^)\\\\.).)*?\",f=\"().*{}+?[]^$\\\\!\".split(\"\").reduce(function(e,t){return e[t]=!0,e},{});var p=/\\/+/;function h(e,t){e=e||{},t=t||{};var n={};return Object.keys(t).forEach(function(e){n[e]=t[e]}),Object.keys(e).forEach(function(t){n[t]=e[t]}),n}function d(e,t,n){if(\"string\"!=typeof t)throw new TypeError(\"glob pattern string required\");return n||(n={}),!(!n.nocomment&&\"#\"===t.charAt(0))&&(\"\"===t.trim()?\"\"===e:new m(t,n).match(e))}function m(e,t){if(!(this instanceof m))return new m(e,t);if(\"string\"!=typeof e)throw new TypeError(\"glob pattern string required\");t||(t={}),e=e.trim(),\"/\"!==r.sep&&(e=e.split(r.sep).join(\"/\")),this.options=t,this.set=[],this.pattern=e,this.regexp=null,this.negate=!1,this.comment=!1,this.empty=!1,this.make()}function g(e,t){if(t||(t=this instanceof m?this.options:{}),void 0===(e=void 0===e?this.pattern:e))throw new TypeError(\"undefined pattern\");return t.nobrace||!e.match(/\\{.*\\}/)?[e]:i(e)}d.filter=function(e,t){return t=t||{},function(n,r,o){return d(n,e,t)}},d.defaults=function(e){if(!e||!Object.keys(e).length)return d;var t=d,n=function(n,r,o){return t.minimatch(n,r,h(e,o))};return n.Minimatch=function(n,r){return new t.Minimatch(n,h(e,r))},n},m.defaults=function(e){return e&&Object.keys(e).length?d.defaults(e).Minimatch:m},m.prototype.debug=function(){},m.prototype.make=function(){if(this._made)return;var e=this.pattern,t=this.options;if(!t.nocomment&&\"#\"===e.charAt(0))return void(this.comment=!0);if(!e)return void(this.empty=!0);this.parseNegate();var n=this.globSet=this.braceExpand();t.debug&&(this.debug=console.error);this.debug(this.pattern,n),n=this.globParts=n.map(function(e){return e.split(p)}),this.debug(this.pattern,n),n=n.map(function(e,t,n){return e.map(this.parse,this)},this),this.debug(this.pattern,n),n=n.filter(function(e){return-1===e.indexOf(!1)}),this.debug(this.pattern,n),this.set=n},m.prototype.parseNegate=function(){var e=this.pattern,t=!1,n=this.options,r=0;if(n.nonegate)return;for(var o=0,i=e.length;o<i&&\"!\"===e.charAt(o);o++)t=!t,r++;r&&(this.pattern=e.substr(r));this.negate=t},d.braceExpand=function(e,t){return g(e,t)},m.prototype.braceExpand=g,m.prototype.parse=function(e,t){if(e.length>65536)throw new TypeError(\"pattern is too long\");var n=this.options;if(!n.noglobstar&&\"**\"===e)return o;if(\"\"===e)return\"\";var r,i=\"\",u=!!n.nocase,l=!1,p=[],h=[],d=!1,m=-1,g=-1,y=\".\"===e.charAt(0)?\"\":n.dot?\"(?!(?:^|\\\\/)\\\\.{1,2}(?:$|\\\\/))\":\"(?!\\\\.)\",b=this;function w(){if(r){switch(r){case\"*\":i+=c,u=!0;break;case\"?\":i+=a,u=!0;break;default:i+=\"\\\\\"+r}b.debug(\"clearStateChar %j %j\",r,i),r=!1}}for(var x,S=0,P=e.length;S<P&&(x=e.charAt(S));S++)if(this.debug(\"%s\\t%s %s %j\",e,S,i,x),l&&f[x])i+=\"\\\\\"+x,l=!1;else switch(x){case\"/\":return!1;case\"\\\\\":w(),l=!0;continue;case\"?\":case\"*\":case\"+\":case\"@\":case\"!\":if(this.debug(\"%s\\t%s %s %j <-- stateChar\",e,S,i,x),d){this.debug(\"  in class\"),\"!\"===x&&S===g+1&&(x=\"^\"),i+=x;continue}b.debug(\"call clearStateChar %j\",r),w(),r=x,n.noext&&w();continue;case\"(\":if(d){i+=\"(\";continue}if(!r){i+=\"\\\\(\";continue}p.push({type:r,start:S-1,reStart:i.length,open:s[r].open,close:s[r].close}),i+=\"!\"===r?\"(?:(?!(?:\":\"(?:\",this.debug(\"plType %j %j\",r,i),r=!1;continue;case\")\":if(d||!p.length){i+=\"\\\\)\";continue}w(),u=!0;var O=p.pop();i+=O.close,\"!\"===O.type&&h.push(O),O.reEnd=i.length;continue;case\"|\":if(d||!p.length||l){i+=\"\\\\|\",l=!1;continue}w(),i+=\"|\";continue;case\"[\":if(w(),d){i+=\"\\\\\"+x;continue}d=!0,g=S,m=i.length,i+=x;continue;case\"]\":if(S===g+1||!d){i+=\"\\\\\"+x,l=!1;continue}if(d){var j=e.substring(g+1,S);try{RegExp(\"[\"+j+\"]\")}catch(e){var E=this.parse(j,v);i=i.substr(0,m)+\"\\\\[\"+E[0]+\"\\\\]\",u=u||E[1],d=!1;continue}}u=!0,d=!1,i+=x;continue;default:w(),l?l=!1:!f[x]||\"^\"===x&&d||(i+=\"\\\\\"),i+=x}d&&(j=e.substr(g+1),E=this.parse(j,v),i=i.substr(0,m)+\"\\\\[\"+E[0],u=u||E[1]);for(O=p.pop();O;O=p.pop()){var I=i.slice(O.reStart+O.open.length);this.debug(\"setting tail\",i,O),I=I.replace(/((?:\\\\{2}){0,64})(\\\\?)\\|/g,function(e,t,n){return n||(n=\"\\\\\"),t+t+n+\"|\"}),this.debug(\"tail=%j\\n   %s\",I,I,O,i);var _=\"*\"===O.type?c:\"?\"===O.type?a:\"\\\\\"+O.type;u=!0,i=i.slice(0,O.reStart)+_+\"\\\\(\"+I}w(),l&&(i+=\"\\\\\\\\\");var A=!1;switch(i.charAt(0)){case\".\":case\"[\":case\"(\":A=!0}for(var k=h.length-1;k>-1;k--){var N=h[k],F=i.slice(0,N.reStart),C=i.slice(N.reStart,N.reEnd-8),M=i.slice(N.reEnd-8,N.reEnd),T=i.slice(N.reEnd);M+=T;var V=F.split(\"(\").length-1,D=T;for(S=0;S<V;S++)D=D.replace(/\\)[+*?]?/,\"\");var B=\"\";\"\"===(T=D)&&t!==v&&(B=\"$\");var L=F+C+T+B+M;i=L}\"\"!==i&&u&&(i=\"(?=.)\"+i);A&&(i=y+i);if(t===v)return[i,u];if(!u)return e.replace(/\\\\(.)/g,\"$1\");var $=n.nocase?\"i\":\"\";try{var R=new RegExp(\"^\"+i+\"$\",$)}catch(e){return new RegExp(\"$.\")}return R._glob=e,R._src=i,R};var v={};d.makeRe=function(e,t){return new m(e,t||{}).makeRe()},m.prototype.makeRe=function(){if(this.regexp||!1===this.regexp)return this.regexp;var e=this.set;if(!e.length)return this.regexp=!1,this.regexp;var t=this.options,n=t.noglobstar?c:t.dot?u:l,r=t.nocase?\"i\":\"\",i=e.map(function(e){return e.map(function(e){return e===o?n:\"string\"==typeof e?e.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g,\"\\\\$&\"):e._src}).join(\"\\\\/\")}).join(\"|\");i=\"^(?:\"+i+\")$\",this.negate&&(i=\"^(?!\"+i+\").*$\");try{this.regexp=new RegExp(i,r)}catch(e){this.regexp=!1}return this.regexp},d.match=function(e,t,n){var r=new m(t,n=n||{});return e=e.filter(function(e){return r.match(e)}),r.options.nonull&&!e.length&&e.push(t),e},m.prototype.match=function(e,t){if(this.debug(\"match\",e,this.pattern),this.comment)return!1;if(this.empty)return\"\"===e;if(\"/\"===e&&t)return!0;var n=this.options;\"/\"!==r.sep&&(e=e.split(r.sep).join(\"/\"));e=e.split(p),this.debug(this.pattern,\"split\",e);var o,i,s=this.set;for(this.debug(this.pattern,\"set\",s),i=e.length-1;i>=0&&!(o=e[i]);i--);for(i=0;i<s.length;i++){var a=s[i],c=e;n.matchBase&&1===a.length&&(c=[o]);var u=this.matchOne(c,a,t);if(u)return!!n.flipNegate||!this.negate}return!n.flipNegate&&this.negate},m.prototype.matchOne=function(e,t,n){var r=this.options;this.debug(\"matchOne\",{this:this,file:e,pattern:t}),this.debug(\"matchOne\",e.length,t.length);for(var i=0,s=0,a=e.length,c=t.length;i<a&&s<c;i++,s++){this.debug(\"matchOne loop\");var u,l=t[s],f=e[i];if(this.debug(t,l,f),!1===l)return!1;if(l===o){this.debug(\"GLOBSTAR\",[t,l,f]);var p=i,h=s+1;if(h===c){for(this.debug(\"** at the end\");i<a;i++)if(\".\"===e[i]||\"..\"===e[i]||!r.dot&&\".\"===e[i].charAt(0))return!1;return!0}for(;p<a;){var d=e[p];if(this.debug(\"\\nglobstar while\",e,p,t,h,d),this.matchOne(e.slice(p),t.slice(h),n))return this.debug(\"globstar found match!\",p,a,d),!0;if(\".\"===d||\"..\"===d||!r.dot&&\".\"===d.charAt(0)){this.debug(\"dot detected!\",e,p,t,h);break}this.debug(\"globstar swallow a segment, and continue\"),p++}return!(!n||(this.debug(\"\\n>>> no match, partial?\",e,p,t,h),p!==a))}if(\"string\"==typeof l?(u=r.nocase?f.toLowerCase()===l.toLowerCase():f===l,this.debug(\"string match\",l,f,u)):(u=f.match(l),this.debug(\"pattern match\",l,f,u)),!u)return!1}if(i===a&&s===c)return!0;if(i===a)return n;if(s===c)return i===a-1&&\"\"===e[i];throw new Error(\"wtf?\")}},function(e,t){e.exports=require(\"assert\")},function(e,t,n){\"use strict\";function r(e){return\"/\"===e.charAt(0)}function o(e){var t=/^([a-zA-Z]:|[\\\\\\/]{2}[^\\\\\\/]+[\\\\\\/]+[^\\\\\\/]+)?([\\\\\\/])?([\\s\\S]*?)$/.exec(e),n=t[1]||\"\",r=Boolean(n&&\":\"!==n.charAt(1));return Boolean(t[2]||r)}e.exports=\"win32\"===process.platform?o:r,e.exports.posix=r,e.exports.win32=o},function(e,t){e.exports=require(\"child_process\")},function(e,t,n){e.exports=!n(9)&&!n(10)(function(){return 7!=Object.defineProperty(n(33)(\"div\"),\"a\",{get:function(){return 7}}).a})},function(e,t,n){var r=n(6);e.exports=function(e,t){if(!r(e))return e;var n,o;if(t&&\"function\"==typeof(n=e.toString)&&!r(o=n.call(e)))return o;if(\"function\"==typeof(n=e.valueOf)&&!r(o=n.call(e)))return o;if(!t&&\"function\"==typeof(n=e.toString)&&!r(o=n.call(e)))return o;throw TypeError(\"Can't convert object to primitive value\")}},function(e,t,n){var r=n(25),o=n(35),i=n(79);e.exports=function(e){return function(t,n,s){var a,c=r(t),u=o(c.length),l=i(s,u);if(e&&n!=n){for(;u>l;)if((a=c[l++])!=a)return!0}else for(;u>l;l++)if((e||l in c)&&c[l]===n)return e||l||0;return!e&&-1}}},function(e,t,n){var r=n(20);e.exports=Object(\"z\").propertyIsEnumerable(0)?Object:function(e){return\"String\"==r(e)?e.split(\"\"):Object(e)}},function(e,t){var n=Math.ceil,r=Math.floor;e.exports=function(e){return isNaN(e=+e)?0:(e>0?r:n)(e)}},function(e,t,n){var r=n(18),o=n(4),i=o[\"__core-js_shared__\"]||(o[\"__core-js_shared__\"]={});(e.exports=function(e,t){return i[e]||(i[e]=void 0!==t?t:{})})(\"versions\",[]).push({version:r.version,mode:n(36)?\"pure\":\"global\",copyright:\"© 2018 Denis Pushkarev (zloirock.ru)\"})},function(e,t,n){var r=n(20),o=n(3)(\"toStringTag\"),i=\"Arguments\"==r(function(){return arguments}());e.exports=function(e){var t,n,s;return void 0===e?\"Undefined\":null===e?\"Null\":\"string\"==typeof(n=function(e,t){try{return e[t]}catch(e){}}(t=Object(e),o))?n:i?r(t):\"Object\"==(s=r(t))&&\"function\"==typeof t.callee?\"Arguments\":s}},function(e,t,n){var r=n(7);e.exports=function(e,t,n,o){try{return o?t(r(n)[0],n[1]):t(n)}catch(t){var i=e.return;throw void 0!==i&&r(i.call(e)),t}}},function(e,t,n){var r=n(39),o=n(3)(\"iterator\"),i=Array.prototype;e.exports=function(e){return void 0!==e&&(r.Array===e||i[o]===e)}},function(e,t,n){var r=n(56),o=n(3)(\"iterator\"),i=n(39);e.exports=n(18).getIteratorMethod=function(e){if(null!=e)return e[o]||e[\"@@iterator\"]||i[r(e)]}},function(e,t,n){var r,o,i,s=n(12),a=n(82),c=n(61),u=n(33),l=n(4),f=l.process,p=l.setImmediate,h=l.clearImmediate,d=l.MessageChannel,m=l.Dispatch,g=0,v={},y=function(){var e=+this;if(v.hasOwnProperty(e)){var t=v[e];delete v[e],t()}},b=function(e){y.call(e.data)};p&&h||(p=function(e){for(var t=[],n=1;arguments.length>n;)t.push(arguments[n++]);return v[++g]=function(){a(\"function\"==typeof e?e:Function(e),t)},r(g),g},h=function(e){delete v[e]},\"process\"==n(20)(f)?r=function(e){f.nextTick(s(y,e,1))}:m&&m.now?r=function(e){m.now(s(y,e,1))}:d?(i=(o=new d).port2,o.port1.onmessage=b,r=s(i.postMessage,i,1)):l.addEventListener&&\"function\"==typeof postMessage&&!l.importScripts?(r=function(e){l.postMessage(e+\"\",\"*\")},l.addEventListener(\"message\",b,!1)):r=\"onreadystatechange\"in u(\"script\")?function(e){c.appendChild(u(\"script\")).onreadystatechange=function(){c.removeChild(this),y.call(e)}}:function(e){setTimeout(s(y,e,1),0)}),e.exports={set:p,clear:h}},function(e,t,n){var r=n(4).document;e.exports=r&&r.documentElement},function(e,t,n){\"use strict\";var r=n(19);function o(e){var t,n;this.promise=new e(function(e,r){if(void 0!==t||void 0!==n)throw TypeError(\"Bad Promise constructor\");t=e,n=r}),this.resolve=r(t),this.reject=r(n)}e.exports.f=function(e){return new o(e)}},function(e,t,n){\"use strict\";var r=n(4),o=n(11),i=n(9),s=n(3)(\"species\");e.exports=function(e){var t=r[e];i&&t&&!t[s]&&o.f(t,s,{configurable:!0,get:function(){return this}})}},function(e,t,n){var r=n(8),o=n(65)(!0);r(r.S,\"Object\",{entries:function(e){return o(e)}})},function(e,t,n){var r=n(42),o=n(25),i=n(44).f;e.exports=function(e){return function(t){for(var n,s=o(t),a=r(s),c=a.length,u=0,l=[];c>u;)i.call(s,n=a[u++])&&l.push(e?[n,s[n]]:s[n]);return l}}},function(e,t){e.exports=\"constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf\".split(\",\")},function(e,t,n){e.exports=l,l.realpath=l,l.sync=f,l.realpathSync=f,l.monkeypatch=function(){r.realpath=l,r.realpathSync=f},l.unmonkeypatch=function(){r.realpath=o,r.realpathSync=i};var r=n(5),o=r.realpath,i=r.realpathSync,s=process.version,a=/^v[0-5]\\./.test(s),c=n(93);function u(e){return e&&\"realpath\"===e.syscall&&(\"ELOOP\"===e.code||\"ENOMEM\"===e.code||\"ENAMETOOLONG\"===e.code)}function l(e,t,n){if(a)return o(e,t,n);\"function\"==typeof t&&(n=t,t=null),o(e,t,function(r,o){u(r)?c.realpath(e,t,n):n(r,o)})}function f(e,t){if(a)return i(e,t);try{return i(e,t)}catch(n){if(u(n))return c.realpathSync(e,t);throw n}}},function(e,t){e.exports=require(\"events\")},function(e,t,n){function r(e,t){return Object.prototype.hasOwnProperty.call(e,t)}t.alphasort=u,t.alphasorti=c,t.setopts=function(e,t,n){n||(n={});if(n.matchBase&&-1===t.indexOf(\"/\")){if(n.noglobstar)throw new Error(\"base matching requires globstar\");t=\"**/\"+t}e.silent=!!n.silent,e.pattern=t,e.strict=!1!==n.strict,e.realpath=!!n.realpath,e.realpathCache=n.realpathCache||Object.create(null),e.follow=!!n.follow,e.dot=!!n.dot,e.mark=!!n.mark,e.nodir=!!n.nodir,e.nodir&&(e.mark=!0);e.sync=!!n.sync,e.nounique=!!n.nounique,e.nonull=!!n.nonull,e.nosort=!!n.nosort,e.nocase=!!n.nocase,e.stat=!!n.stat,e.noprocess=!!n.noprocess,e.absolute=!!n.absolute,e.maxLength=n.maxLength||1/0,e.cache=n.cache||Object.create(null),e.statCache=n.statCache||Object.create(null),e.symlinks=n.symlinks||Object.create(null),function(e,t){e.ignore=t.ignore||[],Array.isArray(e.ignore)||(e.ignore=[e.ignore]);e.ignore.length&&(e.ignore=e.ignore.map(l))}(e,n),e.changedCwd=!1;var i=process.cwd();r(n,\"cwd\")?(e.cwd=o.resolve(n.cwd),e.changedCwd=e.cwd!==i):e.cwd=i;e.root=n.root||o.resolve(e.cwd,\"/\"),e.root=o.resolve(e.root),\"win32\"===process.platform&&(e.root=e.root.replace(/\\\\/g,\"/\"));e.cwdAbs=s(e.cwd)?e.cwd:f(e,e.cwd),\"win32\"===process.platform&&(e.cwdAbs=e.cwdAbs.replace(/\\\\/g,\"/\"));e.nomount=!!n.nomount,n.nonegate=!0,n.nocomment=!0,e.minimatch=new a(t,n),e.options=e.minimatch.options},t.ownProp=r,t.makeAbs=f,t.finish=function(e){for(var t=e.nounique,n=t?[]:Object.create(null),r=0,o=e.matches.length;r<o;r++){var i=e.matches[r];if(i&&0!==Object.keys(i).length){var s=Object.keys(i);t?n.push.apply(n,s):s.forEach(function(e){n[e]=!0})}else if(e.nonull){var a=e.minimatch.globSet[r];t?n.push(a):n[a]=!0}}t||(n=Object.keys(n));e.nosort||(n=n.sort(e.nocase?c:u));if(e.mark){for(var r=0;r<n.length;r++)n[r]=e._mark(n[r]);e.nodir&&(n=n.filter(function(t){var n=!/\\/$/.test(t),r=e.cache[t]||e.cache[f(e,t)];return n&&r&&(n=\"DIR\"!==r&&!Array.isArray(r)),n}))}e.ignore.length&&(n=n.filter(function(t){return!p(e,t)}));e.found=n},t.mark=function(e,t){var n=f(e,t),r=e.cache[n],o=t;if(r){var i=\"DIR\"===r||Array.isArray(r),s=\"/\"===t.slice(-1);if(i&&!s?o+=\"/\":!i&&s&&(o=o.slice(0,-1)),o!==t){var a=f(e,o);e.statCache[a]=e.statCache[n],e.cache[a]=e.cache[n]}}return o},t.isIgnored=p,t.childrenIgnored=function(e,t){return!!e.ignore.length&&e.ignore.some(function(e){return!(!e.gmatcher||!e.gmatcher.match(t))})};var o=n(0),i=n(46),s=n(48),a=i.Minimatch;function c(e,t){return e.toLowerCase().localeCompare(t.toLowerCase())}function u(e,t){return e.localeCompare(t)}function l(e){var t=null;if(\"/**\"===e.slice(-3)){var n=e.replace(/(\\/\\*\\*)+$/,\"\");t=new a(n,{dot:!0})}return{matcher:new a(e,{dot:!0}),gmatcher:t}}function f(e,t){var n=t;return n=\"/\"===t.charAt(0)?o.join(e.root,t):s(t)||\"\"===t?t:e.changedCwd?o.resolve(e.cwd,t):o.resolve(t),\"win32\"===process.platform&&(n=n.replace(/\\\\/g,\"/\")),n}function p(e,t){return!!e.ignore.length&&e.ignore.some(function(e){return e.matcher.match(t)||!(!e.gmatcher||!e.gmatcher.match(t))})}},function(e,t){e.exports=function e(t,n){if(t&&n)return e(t)(n);if(\"function\"!=typeof t)throw new TypeError(\"need wrapper function\");Object.keys(t).forEach(function(e){r[e]=t[e]});return r;function r(){for(var e=new Array(arguments.length),n=0;n<e.length;n++)e[n]=arguments[n];var r=t.apply(this,e),o=e[e.length-1];return\"function\"==typeof r&&r!==o&&Object.keys(o).forEach(function(e){r[e]=o[e]}),r}}},function(e,t,n){var r=n(7),o=n(105),i=n(66),s=n(43)(\"IE_PROTO\"),a=function(){},c=function(){var e,t=n(33)(\"iframe\"),r=i.length;for(t.style.display=\"none\",n(61).appendChild(t),t.src=\"javascript:\",(e=t.contentWindow.document).open(),e.write(\"<script>document.F=Object<\\/script>\"),e.close(),c=e.F;r--;)delete c.prototype[i[r]];return c()};e.exports=Object.create||function(e,t){var n;return null!==e?(a.prototype=r(e),n=new a,a.prototype=null,n[s]=e):n=c(),void 0===t?n:o(n,t)}},function(e,t,n){var r=n(24)(\"meta\"),o=n(6),i=n(15),s=n(11).f,a=0,c=Object.isExtensible||function(){return!0},u=!n(10)(function(){return c(Object.preventExtensions({}))}),l=function(e){s(e,r,{value:{i:\"O\"+ ++a,w:{}}})},f=e.exports={KEY:r,NEED:!1,fastKey:function(e,t){if(!o(e))return\"symbol\"==typeof e?e:(\"string\"==typeof e?\"S\":\"P\")+e;if(!i(e,r)){if(!c(e))return\"F\";if(!t)return\"E\";l(e)}return e[r].i},getWeak:function(e,t){if(!i(e,r)){if(!c(e))return!0;if(!t)return!1;l(e)}return e[r].w},onFreeze:function(e){return u&&f.NEED&&c(e)&&!i(e,r)&&l(e),e}}},function(e,t,n){var r=n(6);e.exports=function(e,t){if(!r(e)||e._t!==t)throw TypeError(\"Incompatible receiver, \"+t+\" required!\");return e}},function(e,t,n){var r=n(8),o=n(65)(!1);r(r.S,\"Object\",{values:function(e){return o(e)}})},function(e,t,n){\"use strict\";var r=n(7);e.exports=function(){var e=r(this),t=\"\";return e.global&&(t+=\"g\"),e.ignoreCase&&(t+=\"i\"),e.multiline&&(t+=\"m\"),e.unicode&&(t+=\"u\"),e.sticky&&(t+=\"y\"),t}},function(e,t,n){e.exports=u,u.sync=function(e,t){for(var n=c(e,t=t||{}),r=n.env,i=n.ext,u=n.extExe,l=[],f=0,p=r.length;f<p;f++){var h=r[f];'\"'===h.charAt(0)&&'\"'===h.slice(-1)&&(h=h.slice(1,-1));var d=o.join(h,e);!h&&/^\\.[\\\\\\/]/.test(e)&&(d=e.slice(0,2)+d);for(var m=0,g=i.length;m<g;m++){var v=d+i[m];try{if(s.sync(v,{pathExt:u})){if(!t.all)return v;l.push(v)}}catch(e){}}}if(t.all&&l.length)return l;if(t.nothrow)return null;throw a(e)};var r=\"win32\"===process.platform||\"cygwin\"===process.env.OSTYPE||\"msys\"===process.env.OSTYPE,o=n(0),i=r?\";\":\":\",s=n(118);function a(e){var t=new Error(\"not found: \"+e);return t.code=\"ENOENT\",t}function c(e,t){var n=t.colon||i,o=t.path||process.env.PATH||\"\",s=[\"\"];o=o.split(n);var a=\"\";return r&&(o.unshift(process.cwd()),s=(a=t.pathExt||process.env.PATHEXT||\".EXE;.CMD;.BAT;.COM\").split(n),-1!==e.indexOf(\".\")&&\"\"!==s[0]&&s.unshift(\"\")),(e.match(/\\//)||r&&e.match(/\\\\/))&&(o=[\"\"]),{env:o,ext:s,extExe:a}}function u(e,t,n){\"function\"==typeof t&&(n=t,t={});var r=c(e,t),i=r.env,u=r.ext,l=r.extExe,f=[];!function r(c,p){if(c===p)return t.all&&f.length?n(null,f):n(a(e));var h=i[c];'\"'===h.charAt(0)&&'\"'===h.slice(-1)&&(h=h.slice(1,-1));var d=o.join(h,e);!h&&/^\\.[\\\\\\/]/.test(e)&&(d=e.slice(0,2)+d),function e(o,i){if(o===i)return r(c+1,p);var a=u[o];s(d+a,{pathExt:l},function(r,s){if(!r&&s){if(!t.all)return n(null,d+a);f.push(d+a)}return e(o+1,i)})}(0,u.length)}(0,i.length)}},function(e,t,n){\"use strict\";e.exports=(e=>{const t=(e=e||{}).env||process.env;return\"win32\"!==(e.platform||process.platform)?\"PATH\":Object.keys(t).find(e=>\"PATH\"===e.toUpperCase())||\"Path\"})},function(e,t,n){\"use strict\";n(32),n(2),n(27),n(64),n(21);var r=n(90),o=n(161),i=n(170),s=n(1);function a(e,t){(t=t||{}).clipboard&&console.log(\"\\n*** Clipboard option removed - use clipboardy or clipboard-cli directly ***\\n\");var n=Object.keys(e).length>0?e:i.defaults,s=Object.entries(n).reduce(function(e,n){var o=n[0],i=n[1],s=r[`get${o}`];return s?(i&&e.push(s(i,t)),e):e=e.concat((i||[]).map(function(e){var t=r[`get${e.replace(/\\s/g,\"\")}Info`];return t?t():Promise.resolve([\"Unknown\"])}))},[]);return Promise.all(s).then(function(e){var n=e.reduce(function(e,t){return t&&t[0]&&Object.assign(e,{[t[0]]:t}),e},{});return function(e,t){var n=t.json?o.json:t.markdown?o.markdown:o.yaml;if(t.console){var r=!1;process.stdout.isTTY&&(r=!0),console.log(n(e,Object.assign({},t,{console:r})))}return n(e,Object.assign({},t,{console:!1}))}(Object.entries(i.defaults).reduce(function(e,t){var r=t[0],o=t[1];return n[r]?Object.assign(e,{[r]:n[r][1]}):Object.assign(e,{[r]:(o||[]).reduce(function(e,t){return n[t]?(n[t].shift(),1===n[t].length?Object.assign(e,{[t]:n[t][0]}):Object.assign(e,{[t]:{version:n[t][0],path:n[t][1]}})):e},{})})},{}),t)})}e.exports={cli:function(e){if(e.all)return a(Object.assign({},i.defaults,{npmPackages:!0,npmGlobalPackages:!0}),e);if(e.raw)return a(JSON.parse(e.raw),e);if(e.helper){var t=r[`get${e.helper}`]||r[`get${e.helper}Info`]||r[e.helper];return t?t().then(console.log):console.error(\"Not Found\")}var n=function(e,t){return e.toLowerCase().includes(t.toLowerCase())},o=Object.keys(e).filter(function(e){return Object.keys(i.defaults).some(function(t){return n(t,e)})}),c=Object.entries(i.defaults).reduce(function(t,r){return o.some(function(e){return n(e,r[0])})?Object.assign(t,{[r[0]]:r[1]||e[r[0]]}):t},{});return e.preset?i[e.preset]?a(Object.assign({},s.omit(i[e.preset],[\"options\"]),c),Object.assign({},i[e.preset].options,s.pick(e,[\"duplicates\",\"fullTree\",\"json\",\"markdown\",\"console\"]))):console.error(`\\nNo \"${e.preset}\" preset found.`):a(c,e)},helpers:r,main:a,run:function(e,t){return\"string\"==typeof e.preset?a(i[e.preset],t):a(e,t)}}},function(e,t,n){var r=n(54),o=Math.max,i=Math.min;e.exports=function(e,t){return(e=r(e))<0?o(e+t,0):i(e,t)}},function(e,t,n){var r=n(3)(\"unscopables\"),o=Array.prototype;null==o[r]&&n(13)(o,r,{}),e.exports=function(e){o[r][e]=!0}},function(e,t,n){var r=n(7),o=n(19),i=n(3)(\"species\");e.exports=function(e,t){var n,s=r(e).constructor;return void 0===s||null==(n=r(s)[i])?t:o(n)}},function(e,t){e.exports=function(e,t,n){var r=void 0===n;switch(t.length){case 0:return r?e():e.call(n);case 1:return r?e(t[0]):e.call(n,t[0]);case 2:return r?e(t[0],t[1]):e.call(n,t[0],t[1]);case 3:return r?e(t[0],t[1],t[2]):e.call(n,t[0],t[1],t[2]);case 4:return r?e(t[0],t[1],t[2],t[3]):e.call(n,t[0],t[1],t[2],t[3])}return e.apply(n,t)}},function(e,t,n){var r=n(4),o=n(60).set,i=r.MutationObserver||r.WebKitMutationObserver,s=r.process,a=r.Promise,c=\"process\"==n(20)(s);e.exports=function(){var e,t,n,u=function(){var r,o;for(c&&(r=s.domain)&&r.exit();e;){o=e.fn,e=e.next;try{o()}catch(r){throw e?n():t=void 0,r}}t=void 0,r&&r.enter()};if(c)n=function(){s.nextTick(u)};else if(!i||r.navigator&&r.navigator.standalone)if(a&&a.resolve){var l=a.resolve(void 0);n=function(){l.then(u)}}else n=function(){o.call(r,u)};else{var f=!0,p=document.createTextNode(\"\");new i(u).observe(p,{characterData:!0}),n=function(){p.data=f=!f}}return function(r){var o={fn:r,next:void 0};t&&(t.next=o),e||(e=o,n()),t=o}}},function(e,t){e.exports=function(e){try{return{e:!1,v:e()}}catch(e){return{e:!0,v:e}}}},function(e,t,n){var r=n(4).navigator;e.exports=r&&r.userAgent||\"\"},function(e,t,n){var r=n(7),o=n(6),i=n(62);e.exports=function(e,t){if(r(e),o(t)&&t.constructor===e)return t;var n=i.f(e);return(0,n.resolve)(t),n.promise}},function(e,t,n){var r=n(15),o=n(25),i=n(52)(!1),s=n(43)(\"IE_PROTO\");e.exports=function(e,t){var n,a=o(e),c=0,u=[];for(n in a)n!=s&&r(a,n)&&u.push(n);for(;t.length>c;)r(a,n=t[c++])&&(~i(u,n)||u.push(n));return u}},function(e,t,n){\"use strict\";var r=n(42),o=n(89),i=n(44),s=n(29),a=n(53),c=Object.assign;e.exports=!c||n(10)(function(){var e={},t={},n=Symbol(),r=\"abcdefghijklmnopqrst\";return e[n]=7,r.split(\"\").forEach(function(e){t[e]=e}),7!=c({},e)[n]||Object.keys(c({},t)).join(\"\")!=r})?function(e,t){for(var n=s(e),c=arguments.length,u=1,l=o.f,f=i.f;c>u;)for(var p,h=a(arguments[u++]),d=l?r(h).concat(l(h)):r(h),m=d.length,g=0;m>g;)f.call(h,p=d[g++])&&(n[p]=h[p]);return n}:c},function(e,t){t.f=Object.getOwnPropertySymbols},function(e,t,n){\"use strict\";function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}n(21);var o=n(91),i=n(1),s=n(122),a=n(123),c=n(124),u=n(125),l=n(126),f=n(127),p=n(128),h=n(129),d=n(130),m=n(131),g=n(159),v=n(160);e.exports=Object.assign({},i,o,function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},o=Object.keys(n);\"function\"==typeof Object.getOwnPropertySymbols&&(o=o.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),o.forEach(function(t){r(e,t,n[t])})}return e}({},s,a,c,u,l,f,p,h,d,m,g,v))},function(e,t,n){\"use strict\";n(22),n(21),n(2),n(32),n(16);var r=n(45),o=n(0),i=n(1),s=function(e){var t=e.split(\"node_modules\"+o.sep),n=t[t.length-1];return\"@\"===n.charAt(0)?[n.split(o.sep)[0],n.split(o.sep)[1]].join(\"/\"):n.split(o.sep)[0]};e.exports={getnpmPackages:function(e,t){i.log(\"trace\",\"getnpmPackages\"),t||(t={});var n=null,r=null;return\"string\"==typeof e&&(e.includes(\"*\")||e.includes(\"?\")||e.includes(\"+\")||e.includes(\"!\")?n=e:e=e.split(\",\")),Promise.all([\"npmPackages\",i.getPackageJsonByPath(\"package.json\").then(function(e){return Object.assign({},(e||{}).devDependencies||{},(e||{}).dependencies||{})}).then(function(e){return r=e,t.fullTree||t.duplicates||n?i.getAllPackageJsonPaths(n):Promise.resolve(Object.keys(e||[]).map(function(e){return o.join(\"node_modules\",e,\"package.json\")}))}).then(function(o){return!n&&\"boolean\"!=typeof e||t.fullTree?Array.isArray(e)?Promise.resolve((o||[]).filter(function(t){return e.includes(s(t))})):Promise.resolve(o):Promise.resolve((o||[]).filter(function(e){return Object.keys(r||[]).includes(s(e))}))}).then(function(e){return Promise.all([e,Promise.all(e.map(function(e){return i.getPackageJsonByPath(e)}))])}).then(function(e){var n=e[0],o=e[1].reduce(function(e,r,o){return r&&r.name?(e[r.name]||(e[r.name]={}),t.duplicates&&(e[r.name].duplicates=i.uniq((e[r.name].duplicates||[]).concat(r.version))),1===(n[o].match(/node_modules/g)||[]).length&&(e[r.name].installed=r.version),e):e},{});return Object.keys(o).forEach(function(e){o[e].duplicates&&o[e].installed&&(o[e].duplicates=o[e].duplicates.filter(function(t){return t!==o[e].installed})),r[e]&&(o[e].wanted=r[e])}),o}).then(function(n){return t.showNotFound&&Array.isArray(e)&&e.forEach(function(e){n[e]||(n[e]=\"Not Found\")}),n}).then(function(e){return i.sortObject(e)})])},getnpmGlobalPackages:function(e,t){i.log(\"trace\",\"getnpmGlobalPackages\",e);var n=null;return\"string\"==typeof e?e.includes(\"*\")||e.includes(\"?\")||e.includes(\"+\")||e.includes(\"!\")?n=e:e=e.split(\",\"):Array.isArray(e)||(e=!0),Promise.all([\"npmGlobalPackages\",i.run(\"npm get prefix --global\").then(function(e){return new Promise(function(t,s){return r(o.join(e,i.isWindows?\"\":\"lib\",\"node_modules\",n||\"{*,@*/*}\",\"package.json\"),function(e,n){e||t(n),s(e)})})}).then(function(t){return Promise.all(t.filter(function(t){return\"boolean\"==typeof e||null!==n||e.includes(s(t))}).map(function(e){return i.getPackageJsonByFullPath(e)}))}).then(function(e){return e.reduce(function(e,t){return t?Object.assign(e,{[t.name]:t.version}):e},{})}).then(function(n){return t.showNotFound&&Array.isArray(e)&&e.forEach(function(e){n[e]||(n[e]=\"Not Found\")}),n})])}}},function(e,t,n){var r=n(6),o=n(20),i=n(3)(\"match\");e.exports=function(e){var t;return r(e)&&(void 0!==(t=e[i])?!!t:\"RegExp\"==o(e))}},function(e,t,n){var r=n(0),o=\"win32\"===process.platform,i=n(5),s=process.env.NODE_DEBUG&&/fs/.test(process.env.NODE_DEBUG);function a(e){return\"function\"==typeof e?e:function(){var e;if(s){var t=new Error;e=function(e){e&&(t.message=e.message,n(e=t))}}else e=n;return e;function n(e){if(e){if(process.throwDeprecation)throw e;if(!process.noDeprecation){var t=\"fs: missing callback \"+(e.stack||e.message);process.traceDeprecation?console.trace(t):console.error(t)}}}}()}r.normalize;if(o)var c=/(.*?)(?:[\\/\\\\]+|$)/g;else c=/(.*?)(?:[\\/]+|$)/g;if(o)var u=/^(?:[a-zA-Z]:|[\\\\\\/]{2}[^\\\\\\/]+[\\\\\\/][^\\\\\\/]+)?[\\\\\\/]*/;else u=/^[\\/]*/;t.realpathSync=function(e,t){if(e=r.resolve(e),t&&Object.prototype.hasOwnProperty.call(t,e))return t[e];var n,s,a,l,f=e,p={},h={};function d(){var t=u.exec(e);n=t[0].length,s=t[0],a=t[0],l=\"\",o&&!h[a]&&(i.lstatSync(a),h[a]=!0)}for(d();n<e.length;){c.lastIndex=n;var m=c.exec(e);if(l=s,s+=m[0],a=l+m[1],n=c.lastIndex,!(h[a]||t&&t[a]===a)){var g;if(t&&Object.prototype.hasOwnProperty.call(t,a))g=t[a];else{var v=i.lstatSync(a);if(!v.isSymbolicLink()){h[a]=!0,t&&(t[a]=a);continue}var y=null;if(!o){var b=v.dev.toString(32)+\":\"+v.ino.toString(32);p.hasOwnProperty(b)&&(y=p[b])}null===y&&(i.statSync(a),y=i.readlinkSync(a)),g=r.resolve(l,y),t&&(t[a]=g),o||(p[b]=y)}e=r.resolve(g,e.slice(n)),d()}}return t&&(t[f]=e),e},t.realpath=function(e,t,n){if(\"function\"!=typeof n&&(n=a(t),t=null),e=r.resolve(e),t&&Object.prototype.hasOwnProperty.call(t,e))return process.nextTick(n.bind(null,null,t[e]));var s,l,f,p,h=e,d={},m={};function g(){var t=u.exec(e);s=t[0].length,l=t[0],f=t[0],p=\"\",o&&!m[f]?i.lstat(f,function(e){if(e)return n(e);m[f]=!0,v()}):process.nextTick(v)}function v(){if(s>=e.length)return t&&(t[h]=e),n(null,e);c.lastIndex=s;var r=c.exec(e);return p=l,l+=r[0],f=p+r[1],s=c.lastIndex,m[f]||t&&t[f]===f?process.nextTick(v):t&&Object.prototype.hasOwnProperty.call(t,f)?w(t[f]):i.lstat(f,y)}function y(e,r){if(e)return n(e);if(!r.isSymbolicLink())return m[f]=!0,t&&(t[f]=f),process.nextTick(v);if(!o){var s=r.dev.toString(32)+\":\"+r.ino.toString(32);if(d.hasOwnProperty(s))return b(null,d[s],f)}i.stat(f,function(e){if(e)return n(e);i.readlink(f,function(e,t){o||(d[s]=t),b(e,t)})})}function b(e,o,i){if(e)return n(e);var s=r.resolve(p,o);t&&(t[i]=s),w(s)}function w(t){e=r.resolve(t,e.slice(s)),g()}g()}},function(e,t,n){var r=n(95),o=n(96);e.exports=function(e){if(!e)return[];\"{}\"===e.substr(0,2)&&(e=\"\\\\{\\\\}\"+e.substr(2));return function e(t,n){var i=[];var s=o(\"{\",\"}\",t);if(!s||/\\$$/.test(s.pre))return[t];var c=/^-?\\d+\\.\\.-?\\d+(?:\\.\\.-?\\d+)?$/.test(s.body);var u=/^[a-zA-Z]\\.\\.[a-zA-Z](?:\\.\\.-?\\d+)?$/.test(s.body);var f=c||u;var g=s.body.indexOf(\",\")>=0;if(!f&&!g)return s.post.match(/,.*\\}/)?(t=s.pre+\"{\"+s.body+a+s.post,e(t)):[t];var v;if(f)v=s.body.split(/\\.\\./);else if(1===(v=function e(t){if(!t)return[\"\"];var n=[];var r=o(\"{\",\"}\",t);if(!r)return t.split(\",\");var i=r.pre;var s=r.body;var a=r.post;var c=i.split(\",\");c[c.length-1]+=\"{\"+s+\"}\";var u=e(a);a.length&&(c[c.length-1]+=u.shift(),c.push.apply(c,u));n.push.apply(n,c);return n}(s.body)).length&&1===(v=e(v[0],!1).map(p)).length){var y=s.post.length?e(s.post,!1):[\"\"];return y.map(function(e){return s.pre+v[0]+e})}var b=s.pre;var y=s.post.length?e(s.post,!1):[\"\"];var w;if(f){var x=l(v[0]),S=l(v[1]),P=Math.max(v[0].length,v[1].length),O=3==v.length?Math.abs(l(v[2])):1,j=d,E=S<x;E&&(O*=-1,j=m);var I=v.some(h);w=[];for(var _=x;j(_,S);_+=O){var A;if(u)\"\\\\\"===(A=String.fromCharCode(_))&&(A=\"\");else if(A=String(_),I){var k=P-A.length;if(k>0){var N=new Array(k+1).join(\"0\");A=_<0?\"-\"+N+A.slice(1):N+A}}w.push(A)}}else w=r(v,function(t){return e(t,!1)});for(var F=0;F<w.length;F++)for(var C=0;C<y.length;C++){var M=b+w[F]+y[C];(!n||f||M)&&i.push(M)}return i}(function(e){return e.split(\"\\\\\\\\\").join(i).split(\"\\\\{\").join(s).split(\"\\\\}\").join(a).split(\"\\\\,\").join(c).split(\"\\\\.\").join(u)}(e),!0).map(f)};var i=\"\\0SLASH\"+Math.random()+\"\\0\",s=\"\\0OPEN\"+Math.random()+\"\\0\",a=\"\\0CLOSE\"+Math.random()+\"\\0\",c=\"\\0COMMA\"+Math.random()+\"\\0\",u=\"\\0PERIOD\"+Math.random()+\"\\0\";function l(e){return parseInt(e,10)==e?parseInt(e,10):e.charCodeAt(0)}function f(e){return e.split(i).join(\"\\\\\").split(s).join(\"{\").split(a).join(\"}\").split(c).join(\",\").split(u).join(\".\")}function p(e){return\"{\"+e+\"}\"}function h(e){return/^-?0\\d/.test(e)}function d(e,t){return e<=t}function m(e,t){return e>=t}},function(e,t){e.exports=function(e,t){for(var r=[],o=0;o<e.length;o++){var i=t(e[o],o);n(i)?r.push.apply(r,i):r.push(i)}return r};var n=Array.isArray||function(e){return\"[object Array]\"===Object.prototype.toString.call(e)}},function(e,t,n){\"use strict\";function r(e,t,n){e instanceof RegExp&&(e=o(e,n)),t instanceof RegExp&&(t=o(t,n));var r=i(e,t,n);return r&&{start:r[0],end:r[1],pre:n.slice(0,r[0]),body:n.slice(r[0]+e.length,r[1]),post:n.slice(r[1]+t.length)}}function o(e,t){var n=t.match(e);return n?n[0]:null}function i(e,t,n){var r,o,i,s,a,c=n.indexOf(e),u=n.indexOf(t,c+1),l=c;if(c>=0&&u>0){for(r=[],i=n.length;l>=0&&!a;)l==c?(r.push(l),c=n.indexOf(e,l+1)):1==r.length?a=[r.pop(),u]:((o=r.pop())<i&&(i=o,s=u),u=n.indexOf(t,l+1)),l=c<u&&c>=0?c:u;r.length&&(a=[i,s])}return a}e.exports=r,r.range=i},function(e,t,n){try{var r=n(30);if(\"function\"!=typeof r.inherits)throw\"\";e.exports=r.inherits}catch(t){e.exports=n(98)}},function(e,t){\"function\"==typeof Object.create?e.exports=function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})}:e.exports=function(e,t){e.super_=t;var n=function(){};n.prototype=t.prototype,e.prototype=new n,e.prototype.constructor=e}},function(e,t,n){e.exports=d,d.GlobSync=m;var r=n(5),o=n(67),i=n(46),s=(i.Minimatch,n(45).Glob,n(30),n(0)),a=n(47),c=n(48),u=n(69),l=(u.alphasort,u.alphasorti,u.setopts),f=u.ownProp,p=u.childrenIgnored,h=u.isIgnored;function d(e,t){if(\"function\"==typeof t||3===arguments.length)throw new TypeError(\"callback provided to sync glob\\nSee: https://github.com/isaacs/node-glob/issues/167\");return new m(e,t).found}function m(e,t){if(!e)throw new Error(\"must provide pattern\");if(\"function\"==typeof t||3===arguments.length)throw new TypeError(\"callback provided to sync glob\\nSee: https://github.com/isaacs/node-glob/issues/167\");if(!(this instanceof m))return new m(e,t);if(l(this,e,t),this.noprocess)return this;var n=this.minimatch.set.length;this.matches=new Array(n);for(var r=0;r<n;r++)this._process(this.minimatch.set[r],r,!1);this._finish()}m.prototype._finish=function(){if(a(this instanceof m),this.realpath){var e=this;this.matches.forEach(function(t,n){var r=e.matches[n]=Object.create(null);for(var i in t)try{i=e._makeAbs(i),r[o.realpathSync(i,e.realpathCache)]=!0}catch(t){if(\"stat\"!==t.syscall)throw t;r[e._makeAbs(i)]=!0}})}u.finish(this)},m.prototype._process=function(e,t,n){a(this instanceof m);for(var r,o=0;\"string\"==typeof e[o];)o++;switch(o){case e.length:return void this._processSimple(e.join(\"/\"),t);case 0:r=null;break;default:r=e.slice(0,o).join(\"/\")}var s,u=e.slice(o);null===r?s=\".\":c(r)||c(e.join(\"/\"))?(r&&c(r)||(r=\"/\"+r),s=r):s=r;var l=this._makeAbs(s);p(this,s)||(u[0]===i.GLOBSTAR?this._processGlobStar(r,s,l,u,t,n):this._processReaddir(r,s,l,u,t,n))},m.prototype._processReaddir=function(e,t,n,r,o,i){var a=this._readdir(n,i);if(a){for(var c=r[0],u=!!this.minimatch.negate,l=c._glob,f=this.dot||\".\"===l.charAt(0),p=[],h=0;h<a.length;h++){if(\".\"!==(g=a[h]).charAt(0)||f)(u&&!e?!g.match(c):g.match(c))&&p.push(g)}var d=p.length;if(0!==d)if(1!==r.length||this.mark||this.stat){r.shift();for(h=0;h<d;h++){var m;g=p[h];m=e?[e,g]:[g],this._process(m.concat(r),o,i)}}else{this.matches[o]||(this.matches[o]=Object.create(null));for(var h=0;h<d;h++){var g=p[h];e&&(g=\"/\"!==e.slice(-1)?e+\"/\"+g:e+g),\"/\"!==g.charAt(0)||this.nomount||(g=s.join(this.root,g)),this._emitMatch(o,g)}}}},m.prototype._emitMatch=function(e,t){if(!h(this,t)){var n=this._makeAbs(t);if(this.mark&&(t=this._mark(t)),this.absolute&&(t=n),!this.matches[e][t]){if(this.nodir){var r=this.cache[n];if(\"DIR\"===r||Array.isArray(r))return}this.matches[e][t]=!0,this.stat&&this._stat(t)}}},m.prototype._readdirInGlobStar=function(e){if(this.follow)return this._readdir(e,!1);var t,n;try{n=r.lstatSync(e)}catch(e){if(\"ENOENT\"===e.code)return null}var o=n&&n.isSymbolicLink();return this.symlinks[e]=o,o||!n||n.isDirectory()?t=this._readdir(e,!1):this.cache[e]=\"FILE\",t},m.prototype._readdir=function(e,t){if(t&&!f(this.symlinks,e))return this._readdirInGlobStar(e);if(f(this.cache,e)){var n=this.cache[e];if(!n||\"FILE\"===n)return null;if(Array.isArray(n))return n}try{return this._readdirEntries(e,r.readdirSync(e))}catch(t){return this._readdirError(e,t),null}},m.prototype._readdirEntries=function(e,t){if(!this.mark&&!this.stat)for(var n=0;n<t.length;n++){var r=t[n];r=\"/\"===e?e+r:e+\"/\"+r,this.cache[r]=!0}return this.cache[e]=t,t},m.prototype._readdirError=function(e,t){switch(t.code){case\"ENOTSUP\":case\"ENOTDIR\":var n=this._makeAbs(e);if(this.cache[n]=\"FILE\",n===this.cwdAbs){var r=new Error(t.code+\" invalid cwd \"+this.cwd);throw r.path=this.cwd,r.code=t.code,r}break;case\"ENOENT\":case\"ELOOP\":case\"ENAMETOOLONG\":case\"UNKNOWN\":this.cache[this._makeAbs(e)]=!1;break;default:if(this.cache[this._makeAbs(e)]=!1,this.strict)throw t;this.silent||console.error(\"glob error\",t)}},m.prototype._processGlobStar=function(e,t,n,r,o,i){var s=this._readdir(n,i);if(s){var a=r.slice(1),c=e?[e]:[],u=c.concat(a);this._process(u,o,!1);var l=s.length;if(!this.symlinks[n]||!i)for(var f=0;f<l;f++){if(\".\"!==s[f].charAt(0)||this.dot){var p=c.concat(s[f],a);this._process(p,o,!0);var h=c.concat(s[f],r);this._process(h,o,!0)}}}},m.prototype._processSimple=function(e,t){var n=this._stat(e);if(this.matches[t]||(this.matches[t]=Object.create(null)),n){if(e&&c(e)&&!this.nomount){var r=/[\\/\\\\]$/.test(e);\"/\"===e.charAt(0)?e=s.join(this.root,e):(e=s.resolve(this.root,e),r&&(e+=\"/\"))}\"win32\"===process.platform&&(e=e.replace(/\\\\/g,\"/\")),this._emitMatch(t,e)}},m.prototype._stat=function(e){var t=this._makeAbs(e),n=\"/\"===e.slice(-1);if(e.length>this.maxLength)return!1;if(!this.stat&&f(this.cache,t)){var o=this.cache[t];if(Array.isArray(o)&&(o=\"DIR\"),!n||\"DIR\"===o)return o;if(n&&\"FILE\"===o)return!1}var i=this.statCache[t];if(!i){var s;try{s=r.lstatSync(t)}catch(e){if(e&&(\"ENOENT\"===e.code||\"ENOTDIR\"===e.code))return this.statCache[t]=!1,!1}if(s&&s.isSymbolicLink())try{i=r.statSync(t)}catch(e){i=s}else i=s}this.statCache[t]=i;o=!0;return i&&(o=i.isDirectory()?\"DIR\":\"FILE\"),this.cache[t]=this.cache[t]||o,(!n||\"FILE\"!==o)&&o},m.prototype._mark=function(e){return u.mark(this,e)},m.prototype._makeAbs=function(e){return u.makeAbs(this,e)}},function(e,t,n){var r=n(70),o=Object.create(null),i=n(31);e.exports=r(function(e,t){return o[e]?(o[e].push(t),null):(o[e]=[t],function(e){return i(function t(){var n=o[e],r=n.length,i=function(e){for(var t=e.length,n=[],r=0;r<t;r++)n[r]=e[r];return n}(arguments);try{for(var s=0;s<r;s++)n[s].apply(null,i)}finally{n.length>r?(n.splice(0,r),process.nextTick(function(){t.apply(null,i)})):delete o[e]}})}(e))})},function(e,t,n){\"use strict\";var r=n(8),o=n(19),i=n(29),s=n(10),a=[].sort,c=[1,2,3];r(r.P+r.F*(s(function(){c.sort(void 0)})||!s(function(){c.sort(null)})||!n(102)(a)),\"Array\",{sort:function(e){return void 0===e?a.call(i(this)):a.call(i(this),o(e))}})},function(e,t,n){\"use strict\";var r=n(10);e.exports=function(e,t){return!!e&&r(function(){t?e.call(null,function(){},1):e.call(null)})}},function(e,t,n){\"use strict\";var r=n(104),o=n(73);e.exports=n(110)(\"Set\",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{add:function(e){return r.def(o(this,\"Set\"),e=0===e?0:e,e)}},r)},function(e,t,n){\"use strict\";var r=n(11).f,o=n(71),i=n(40),s=n(12),a=n(37),c=n(38),u=n(106),l=n(109),f=n(63),p=n(9),h=n(72).fastKey,d=n(73),m=p?\"_s\":\"size\",g=function(e,t){var n,r=h(t);if(\"F\"!==r)return e._i[r];for(n=e._f;n;n=n.n)if(n.k==t)return n};e.exports={getConstructor:function(e,t,n,u){var l=e(function(e,r){a(e,l,t,\"_i\"),e._t=t,e._i=o(null),e._f=void 0,e._l=void 0,e[m]=0,null!=r&&c(r,n,e[u],e)});return i(l.prototype,{clear:function(){for(var e=d(this,t),n=e._i,r=e._f;r;r=r.n)r.r=!0,r.p&&(r.p=r.p.n=void 0),delete n[r.i];e._f=e._l=void 0,e[m]=0},delete:function(e){var n=d(this,t),r=g(n,e);if(r){var o=r.n,i=r.p;delete n._i[r.i],r.r=!0,i&&(i.n=o),o&&(o.p=i),n._f==r&&(n._f=o),n._l==r&&(n._l=i),n[m]--}return!!r},forEach:function(e){d(this,t);for(var n,r=s(e,arguments.length>1?arguments[1]:void 0,3);n=n?n.n:this._f;)for(r(n.v,n.k,this);n&&n.r;)n=n.p},has:function(e){return!!g(d(this,t),e)}}),p&&r(l.prototype,\"size\",{get:function(){return d(this,t)[m]}}),l},def:function(e,t,n){var r,o,i=g(e,t);return i?i.v=n:(e._l=i={i:o=h(t,!0),k:t,v:n,p:r=e._l,n:void 0,r:!1},e._f||(e._f=i),r&&(r.n=i),e[m]++,\"F\"!==o&&(e._i[o]=i)),e},getEntry:g,setStrong:function(e,t,n){u(e,t,function(e,n){this._t=d(e,t),this._k=n,this._l=void 0},function(){for(var e=this._k,t=this._l;t&&t.r;)t=t.p;return this._t&&(this._l=t=t?t.n:this._t._f)?l(0,\"keys\"==e?t.k:\"values\"==e?t.v:[t.k,t.v]):(this._t=void 0,l(1))},n?\"entries\":\"values\",!n,!0),f(t)}}},function(e,t,n){var r=n(11),o=n(7),i=n(42);e.exports=n(9)?Object.defineProperties:function(e,t){o(e);for(var n,s=i(t),a=s.length,c=0;a>c;)r.f(e,n=s[c++],t[n]);return e}},function(e,t,n){\"use strict\";var r=n(36),o=n(8),i=n(14),s=n(13),a=n(39),c=n(107),u=n(26),l=n(108),f=n(3)(\"iterator\"),p=!([].keys&&\"next\"in[].keys()),h=function(){return this};e.exports=function(e,t,n,d,m,g,v){c(n,t,d);var y,b,w,x=function(e){if(!p&&e in j)return j[e];switch(e){case\"keys\":case\"values\":return function(){return new n(this,e)}}return function(){return new n(this,e)}},S=t+\" Iterator\",P=\"values\"==m,O=!1,j=e.prototype,E=j[f]||j[\"@@iterator\"]||m&&j[m],I=E||x(m),_=m?P?x(\"entries\"):I:void 0,A=\"Array\"==t&&j.entries||E;if(A&&(w=l(A.call(new e)))!==Object.prototype&&w.next&&(u(w,S,!0),r||\"function\"==typeof w[f]||s(w,f,h)),P&&E&&\"values\"!==E.name&&(O=!0,I=function(){return E.call(this)}),r&&!v||!p&&!O&&j[f]||s(j,f,I),a[t]=I,a[S]=h,m)if(y={values:P?I:x(\"values\"),keys:g?I:x(\"keys\"),entries:_},v)for(b in y)b in j||i(j,b,y[b]);else o(o.P+o.F*(p||O),t,y);return y}},function(e,t,n){\"use strict\";var r=n(71),o=n(23),i=n(26),s={};n(13)(s,n(3)(\"iterator\"),function(){return this}),e.exports=function(e,t,n){e.prototype=r(s,{next:o(1,n)}),i(e,t+\" Iterator\")}},function(e,t,n){var r=n(15),o=n(29),i=n(43)(\"IE_PROTO\"),s=Object.prototype;e.exports=Object.getPrototypeOf||function(e){return e=o(e),r(e,i)?e[i]:\"function\"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?s:null}},function(e,t){e.exports=function(e,t){return{value:t,done:!!e}}},function(e,t,n){\"use strict\";var r=n(4),o=n(8),i=n(14),s=n(40),a=n(72),c=n(38),u=n(37),l=n(6),f=n(10),p=n(41),h=n(26),d=n(111);e.exports=function(e,t,n,m,g,v){var y=r[e],b=y,w=g?\"set\":\"add\",x=b&&b.prototype,S={},P=function(e){var t=x[e];i(x,e,\"delete\"==e?function(e){return!(v&&!l(e))&&t.call(this,0===e?0:e)}:\"has\"==e?function(e){return!(v&&!l(e))&&t.call(this,0===e?0:e)}:\"get\"==e?function(e){return v&&!l(e)?void 0:t.call(this,0===e?0:e)}:\"add\"==e?function(e){return t.call(this,0===e?0:e),this}:function(e,n){return t.call(this,0===e?0:e,n),this})};if(\"function\"==typeof b&&(v||x.forEach&&!f(function(){(new b).entries().next()}))){var O=new b,j=O[w](v?{}:-0,1)!=O,E=f(function(){O.has(1)}),I=p(function(e){new b(e)}),_=!v&&f(function(){for(var e=new b,t=5;t--;)e[w](t,t);return!e.has(-0)});I||((b=t(function(t,n){u(t,b,e);var r=d(new y,t,b);return null!=n&&c(n,g,r[w],r),r})).prototype=x,x.constructor=b),(E||_)&&(P(\"delete\"),P(\"has\"),g&&P(\"get\")),(_||j)&&P(w),v&&x.clear&&delete x.clear}else b=m.getConstructor(t,e,g,w),s(b.prototype,n),a.NEED=!0;return h(b,e),S[e]=b,o(o.G+o.W+o.F*(b!=y),S),v||m.setStrong(b,e,g),b}},function(e,t,n){var r=n(6),o=n(112).set;e.exports=function(e,t,n){var i,s=t.constructor;return s!==n&&\"function\"==typeof s&&(i=s.prototype)!==n.prototype&&r(i)&&o&&o(e,i),e}},function(e,t,n){var r=n(6),o=n(7),i=function(e,t){if(o(e),!r(t)&&null!==t)throw TypeError(t+\": can't set as prototype!\")};e.exports={set:Object.setPrototypeOf||(\"__proto__\"in{}?function(e,t,r){try{(r=n(12)(Function.call,n(113).f(Object.prototype,\"__proto__\").set,2))(e,[]),t=!(e instanceof Array)}catch(e){t=!0}return function(e,n){return i(e,n),t?e.__proto__=n:r(e,n),e}}({},!1):void 0),check:i}},function(e,t,n){var r=n(44),o=n(23),i=n(25),s=n(51),a=n(15),c=n(50),u=Object.getOwnPropertyDescriptor;t.f=n(9)?u:function(e,t){if(e=i(e),t=s(t,!0),c)try{return u(e,t)}catch(e){}if(a(e,t))return o(!r.f.call(e,t),e[t])}},function(e,t,n){\"use strict\";var r=n(12),o=n(8),i=n(29),s=n(57),a=n(58),c=n(35),u=n(115),l=n(59);o(o.S+o.F*!n(41)(function(e){Array.from(e)}),\"Array\",{from:function(e){var t,n,o,f,p=i(e),h=\"function\"==typeof this?this:Array,d=arguments.length,m=d>1?arguments[1]:void 0,g=void 0!==m,v=0,y=l(p);if(g&&(m=r(m,d>2?arguments[2]:void 0,2)),null==y||h==Array&&a(y))for(n=new h(t=c(p.length));t>v;v++)u(n,v,g?m(p[v],v):p[v]);else for(f=y.call(p),n=new h;!(o=f.next()).done;v++)u(n,v,g?s(f,m,[o.value,v],!0):o.value);return n.length=v,n}})},function(e,t,n){\"use strict\";var r=n(11),o=n(23);e.exports=function(e,t,n){t in e?r.f(e,t,o(0,n)):e[t]=n}},function(e,t,n){\"use strict\";n(117);var r=n(7),o=n(75),i=n(9),s=/./.toString,a=function(e){n(14)(RegExp.prototype,\"toString\",e,!0)};n(10)(function(){return\"/a/b\"!=s.call({source:\"a\",flags:\"b\"})})?a(function(){var e=r(this);return\"/\".concat(e.source,\"/\",\"flags\"in e?e.flags:!i&&e instanceof RegExp?o.call(e):void 0)}):\"toString\"!=s.name&&a(function(){return s.call(this)})},function(e,t,n){n(9)&&\"g\"!=/./g.flags&&n(11).f(RegExp.prototype,\"flags\",{configurable:!0,get:n(75)})},function(e,t,n){var r;n(5);function o(e,t,n){if(\"function\"==typeof t&&(n=t,t={}),!n){if(\"function\"!=typeof Promise)throw new TypeError(\"callback not provided\");return new Promise(function(n,r){o(e,t||{},function(e,t){e?r(e):n(t)})})}r(e,t||{},function(e,r){e&&(\"EACCES\"===e.code||t&&t.ignoreErrors)&&(e=null,r=!1),n(e,r)})}r=\"win32\"===process.platform||global.TESTING_WINDOWS?n(119):n(120),e.exports=o,o.sync=function(e,t){try{return r.sync(e,t||{})}catch(e){if(t&&t.ignoreErrors||\"EACCES\"===e.code)return!1;throw e}}},function(e,t,n){e.exports=i,i.sync=function(e,t){return o(r.statSync(e),e,t)};var r=n(5);function o(e,t,n){return!(!e.isSymbolicLink()&&!e.isFile())&&function(e,t){var n=void 0!==t.pathExt?t.pathExt:process.env.PATHEXT;if(!n)return!0;if(-1!==(n=n.split(\";\")).indexOf(\"\"))return!0;for(var r=0;r<n.length;r++){var o=n[r].toLowerCase();if(o&&e.substr(-o.length).toLowerCase()===o)return!0}return!1}(t,n)}function i(e,t,n){r.stat(e,function(r,i){n(r,!r&&o(i,e,t))})}},function(e,t,n){e.exports=o,o.sync=function(e,t){return i(r.statSync(e),t)};var r=n(5);function o(e,t,n){r.stat(e,function(e,r){n(e,!e&&i(r,t))})}function i(e,t){return e.isFile()&&function(e,t){var n=e.mode,r=e.uid,o=e.gid,i=void 0!==t.uid?t.uid:process.getuid&&process.getuid(),s=void 0!==t.gid?t.gid:process.getgid&&process.getgid(),a=parseInt(\"100\",8),c=parseInt(\"010\",8),u=parseInt(\"001\",8),l=a|c;return n&u||n&c&&o===s||n&a&&r===i||n&l&&0===i}(e,t)}},function(e,t,n){\"use strict\";e.exports={androidSystemImages:/system-images;([\\S \\t]+)/g,androidAPILevels:/platforms;android-(\\d+)[\\S\\s]/g,androidBuildTools:/build-tools;([\\d|.]+)[\\S\\s]/g}},function(e,t,n){\"use strict\";n(2);var r=n(1);e.exports={getNodeInfo:function(){return r.log(\"trace\",\"getNodeInfo\"),Promise.all([r.isWindows?r.run(\"node -v\").then(r.findVersion):r.which(\"node\").then(function(e){return e?r.run(e+\" -v\"):Promise.resolve(\"\")}).then(r.findVersion),r.which(\"node\").then(r.condensePath)]).then(function(e){return r.determineFound(\"Node\",e[0],e[1])})},getnpmInfo:function(){return r.log(\"trace\",\"getnpmInfo\"),Promise.all([r.run(\"npm -v\"),r.which(\"npm\").then(r.condensePath)]).then(function(e){return r.determineFound(\"npm\",e[0],e[1])})},getWatchmanInfo:function(){return r.log(\"trace\",\"getWatchmanInfo\"),Promise.all([r.which(\"watchman\").then(function(e){return e?r.run(e+\" -v\"):void 0}),r.which(\"watchman\")]).then(function(e){return r.determineFound(\"Watchman\",e[0],e[1])})},getYarnInfo:function(){return r.log(\"trace\",\"getYarnInfo\"),Promise.all([r.run(\"yarn -v\"),r.which(\"yarn\").then(r.condensePath)]).then(function(e){return r.determineFound(\"Yarn\",e[0],e[1])})}}},function(e,t,n){\"use strict\";n(16),n(2),n(27);var r=n(5),o=n(17),i=n(1),s=n(0);e.exports={getBraveBrowserInfo:function(){return i.log(\"trace\",\"getBraveBrowser\"),(i.isLinux?i.run(\"brave --version || brave-browser --version\").then(function(e){return e.replace(/^.* ([^ ]*)/g,\"$1\")}):i.isMacOS?i.getDarwinApplicationVersion(i.browserBundleIdentifiers[\"Brave Browser\"]).then(i.findVersion):Promise.resolve(\"N/A\")).then(function(e){return i.determineFound(\"Brave Browser\",e,\"N/A\")})},getChromeInfo:function(){var e;if(i.log(\"trace\",\"getChromeInfo\"),i.isLinux)e=i.run(\"google-chrome --version\").then(function(e){return e.replace(\" dev\",\"\").replace(/^.* ([^ ]*)/g,\"$1\")});else if(i.isMacOS)e=i.getDarwinApplicationVersion(i.browserBundleIdentifiers.Chrome).then(i.findVersion);else if(i.isWindows){var t;try{t=i.findVersion(r.readdirSync(s.join(process.env[\"ProgramFiles(x86)\"],\"Google/Chrome/Application\")).join(\"\\n\"))}catch(e){t=i.NotFound}e=Promise.resolve(t)}else e=Promise.resolve(\"N/A\");return e.then(function(e){return i.determineFound(\"Chrome\",e,\"N/A\")})},getChromeCanaryInfo:function(){return i.log(\"trace\",\"getChromeCanaryInfo\"),i.getDarwinApplicationVersion(i.browserBundleIdentifiers[\"Chrome Canary\"]).then(function(e){return i.determineFound(\"Chrome Canary\",e,\"N/A\")})},getChromiumInfo:function(){return i.log(\"trace\",\"getChromiumInfo\"),(i.isLinux?i.run(\"chromium --version\").then(i.findVersion):Promise.resolve(\"N/A\")).then(function(e){return i.determineFound(\"Chromium\",e,\"N/A\")})},getEdgeInfo:function(){var e;if(i.log(\"trace\",\"getEdgeInfo\"),i.isWindows&&\"10\"===o.release().split(\".\")[0]){var t={Spartan:\"Microsoft.MicrosoftEdge\",Chromium:\"Microsoft.MicrosoftEdge.Stable\",ChromiumDev:\"Microsoft.MicrosoftEdge.Dev\"};e=Promise.all(Object.keys(t).map(function(e){return function(e,t){return i.run(`powershell get-appxpackage ${e}`).then(function(e){if(\"\"!==i.findVersion(e))return`${t} (${i.findVersion(e)})`})}(t[e],e)}).filter(function(e){return void 0!==e}))}else{if(!i.isMacOS)return Promise.resolve(\"N/A\");e=i.getDarwinApplicationVersion(i.browserBundleIdentifiers[\"Microsoft Edge\"])}return e.then(function(e){return i.determineFound(\"Edge\",Array.isArray(e)?e.filter(function(e){return void 0!==e}):e,i.NA)})},getFirefoxInfo:function(){return i.log(\"trace\",\"getFirefoxInfo\"),(i.isLinux?i.run(\"firefox --version\").then(function(e){return e.replace(/^.* ([^ ]*)/g,\"$1\")}):i.isMacOS?i.getDarwinApplicationVersion(i.browserBundleIdentifiers.Firefox):Promise.resolve(\"N/A\")).then(function(e){return i.determineFound(\"Firefox\",e,\"N/A\")})},getFirefoxDeveloperEditionInfo:function(){return i.log(\"trace\",\"getFirefoxDeveloperEditionInfo\"),i.getDarwinApplicationVersion(i.browserBundleIdentifiers[\"Firefox Developer Edition\"]).then(function(e){return i.determineFound(\"Firefox Developer Edition\",e,\"N/A\")})},getFirefoxNightlyInfo:function(){return i.log(\"trace\",\"getFirefoxNightlyInfo\"),(i.isLinux?i.run(\"firefox-trunk --version\").then(function(e){return e.replace(/^.* ([^ ]*)/g,\"$1\")}):i.isMacOS?i.getDarwinApplicationVersion(i.browserBundleIdentifiers[\"Firefox Nightly\"]):Promise.resolve(\"N/A\")).then(function(e){return i.determineFound(\"Firefox Nightly\",e,\"N/A\")})},getInternetExplorerInfo:function(){var e;if(i.log(\"trace\",\"getInternetExplorerInfo\"),i.isWindows){var t=[process.env.SYSTEMDRIVE||\"C:\",\"Program Files\",\"Internet Explorer\",\"iexplore.exe\"].join(\"\\\\\\\\\");e=i.run(`wmic datafile where \"name='${t}'\" get Version`).then(i.findVersion)}else e=Promise.resolve(\"N/A\");return e.then(function(e){return i.determineFound(\"Internet Explorer\",e,\"N/A\")})},getSafariTechnologyPreviewInfo:function(){return i.log(\"trace\",\"getSafariTechnologyPreviewInfo\"),i.getDarwinApplicationVersion(i.browserBundleIdentifiers[\"Safari Technology Preview\"]).then(function(e){return i.determineFound(\"Safari Technology Preview\",e,\"N/A\")})},getSafariInfo:function(){return i.log(\"trace\",\"getSafariInfo\"),i.getDarwinApplicationVersion(i.browserBundleIdentifiers.Safari).then(function(e){return i.determineFound(\"Safari\",e,\"N/A\")})}}},function(e,t,n){\"use strict\";n(32),n(2);var r=n(1);e.exports={getMongoDBInfo:function(){return r.log(\"trace\",\"getMongoDBInfo\"),Promise.all([r.run(\"mongo --version\").then(r.findVersion),r.which(\"mongo\")]).then(function(e){return r.determineFound(\"MongoDB\",e[0],e[1])})},getMySQLInfo:function(){return r.log(\"trace\",\"getMySQLInfo\"),Promise.all([r.run(\"mysql --version\").then(function(e){return`${r.findVersion(e,null,1)}${e.includes(\"MariaDB\")?\" (MariaDB)\":\"\"}`}),r.which(\"mysql\")]).then(function(e){return r.determineFound(\"MySQL\",e[0],e[1])})},getPostgreSQLInfo:function(){return r.log(\"trace\",\"getPostgreSQLInfo\"),Promise.all([r.run(\"postgres --version\").then(r.findVersion),r.which(\"postgres\")]).then(function(e){return r.determineFound(\"PostgreSQL\",e[0],e[1])})},getSQLiteInfo:function(){return r.log(\"trace\",\"getSQLiteInfo\"),Promise.all([r.run(\"sqlite3 --version\").then(r.findVersion),r.which(\"sqlite3\")]).then(function(e){return r.determineFound(\"SQLite\",e[0],e[1])})}}},function(e,t,n){\"use strict\";n(27),n(16),n(2);var r=n(0),o=n(1);e.exports={getAndroidStudioInfo:function(){var e=Promise.resolve(\"N/A\");return o.isMacOS?e=o.run(o.generatePlistBuddyCommand(r.join(\"/\",\"Applications\",\"Android\\\\ Studio.app\",\"Contents\",\"Info.plist\"),[\"CFBundleShortVersionString\",\"CFBundleVersion\"])).then(function(e){return e||o.run(o.generatePlistBuddyCommand(r.join(\"~\",\"Applications\",\"JetBrains\\\\ Toolbox\",\"Android\\\\ Studio.app\",\"Contents\",\"Info.plist\"),[\"CFBundleShortVersionString\",\"CFBundleVersion\"]))}).then(function(e){return e.split(\"\\n\").join(\" \")}):o.isLinux?e=Promise.all([o.run('cat /opt/android-studio/bin/studio.sh | grep \"$Home/.AndroidStudio\" | head -1').then(o.findVersion),o.run(\"cat /opt/android-studio/build.txt\")]).then(function(e){return`${e[0]} ${e[1]}`.trim()||o.NotFound}):o.isWindows&&(e=Promise.all([o.run('wmic datafile where name=\"C:\\\\\\\\Program Files\\\\\\\\Android\\\\\\\\Android Studio\\\\\\\\bin\\\\\\\\studio.exe\" get Version').then(function(e){return e.replace(/(\\r\\n|\\n|\\r)/gm,\"\")}),o.run('type \"C:\\\\\\\\Program Files\\\\\\\\Android\\\\\\\\Android Studio\\\\\\\\build.txt\"').then(function(e){return e.replace(/(\\r\\n|\\n|\\r)/gm,\"\")})]).then(function(e){return`${e[0]} ${e[1]}`.trim()||o.NotFound})),e.then(function(e){return o.determineFound(\"Android Studio\",e)})},getAtomInfo:function(){return o.log(\"trace\",\"getAtomInfo\"),Promise.all([o.getDarwinApplicationVersion(o.ideBundleIdentifiers.Atom),\"N/A\"]).then(function(e){return o.determineFound(\"Atom\",e[0],e[1])})},getEmacsInfo:function(){return o.log(\"trace\",\"getEmacsInfo\"),o.isMacOS||o.isLinux?Promise.all([o.run(\"emacs --version\").then(o.findVersion),o.run(\"which emacs\")]).then(function(e){return o.determineFound(\"Emacs\",e[0],e[1])}):Promise.resolve([\"Emacs\",\"N/A\"])},getIntelliJInfo:function(){return o.log(\"trace\",\"getIntelliJInfo\"),o.getDarwinApplicationVersion(o.ideBundleIdentifiers.IntelliJ).then(function(e){return o.determineFound(\"IntelliJ\",e)})},getNanoInfo:function(){return o.log(\"trace\",\"getNanoInfo\"),o.isMacOS||o.isLinux?Promise.all([o.run(\"nano --version\").then(o.findVersion),o.run(\"which nano\")]).then(function(e){return o.determineFound(\"Nano\",e[0],e[1])}):Promise.resolve([\"Nano\",\"N/A\"])},getNvimInfo:function(){return o.log(\"trace\",\"getNvimInfo\"),o.isMacOS||o.isLinux?Promise.all([o.run(\"nvim --version\").then(o.findVersion),o.run(\"which nvim\")]).then(function(e){return o.determineFound(\"Nvim\",e[0],e[1])}):Promise.resolve([\"Vim\",\"N/A\"])},getPhpStormInfo:function(){return o.log(\"trace\",\"getPhpStormInfo\"),o.getDarwinApplicationVersion(o.ideBundleIdentifiers.PhpStorm).then(function(e){return o.determineFound(\"PhpStorm\",e)})},getSublimeTextInfo:function(){return o.log(\"trace\",\"getSublimeTextInfo\"),Promise.all([o.run(\"subl --version\").then(function(e){return o.findVersion(e,/\\d+/)}),o.which(\"subl\")]).then(function(e){return\"\"===e[0]&&o.isMacOS?(o.log(\"trace\",\"getSublimeTextInfo using plist\"),Promise.all([o.getDarwinApplicationVersion(o.ideBundleIdentifiers[\"Sublime Text\"]),\"N/A\"])):e}).then(function(e){return o.determineFound(\"Sublime Text\",e[0],e[1])})},getVimInfo:function(){return o.log(\"trace\",\"getVimInfo\"),o.isMacOS||o.isLinux?Promise.all([o.run(\"vim --version\").then(o.findVersion),o.run(\"which vim\")]).then(function(e){return o.determineFound(\"Vim\",e[0],e[1])}):Promise.resolve([\"Vim\",\"N/A\"])},getVSCodeInfo:function(){return o.log(\"trace\",\"getVSCodeInfo\"),Promise.all([o.run(\"code --version\").then(o.findVersion),o.which(\"code\")]).then(function(e){return o.determineFound(\"VSCode\",e[0],e[1])})},getVisualStudioInfo:function(){return o.log(\"trace\",\"getVisualStudioInfo\"),o.isWindows?o.run(`\"${process.env[\"ProgramFiles(x86)\"]}/Microsoft Visual Studio/Installer/vswhere.exe\" -format json -prerelease`).then(function(e){var t=JSON.parse(e).map(function(e){return{Version:e.installationVersion,DisplayName:e.displayName}});return o.determineFound(\"Visual Studio\",t.map(function(e){return`${e.Version} (${e.DisplayName})`}))}).catch(function(){return Promise.resolve([\"Visual Studio\",o.NotFound])}):Promise.resolve([\"Visual Studio\",o.NA])},getWebStormInfo:function(){return o.log(\"trace\",\"getWebStormInfo\"),o.getDarwinApplicationVersion(o.ideBundleIdentifiers.WebStorm).then(function(e){return o.determineFound(\"WebStorm\",e)})},getXcodeInfo:function(){return o.log(\"trace\",\"getXcodeInfo\"),o.isMacOS?Promise.all([o.which(\"xcodebuild\").then(function(e){return o.run(e+\" -version\")}).then(function(e){return`${o.findVersion(e)}/${e.split(\"Build version \")[1]}`}),o.which(\"xcodebuild\")]).then(function(e){return o.determineFound(\"Xcode\",e[0],e[1])}):Promise.resolve([\"Xcode\",\"N/A\"])}}},function(e,t,n){\"use strict\";n(2);var r=n(1);e.exports={getBashInfo:function(){return r.log(\"trace\",\"getBashInfo\"),Promise.all([r.run(\"bash --version\").then(r.findVersion),r.which(\"bash\")]).then(function(e){return r.determineFound(\"Bash\",e[0],e[1])})},getElixirInfo:function(){return r.log(\"trace\",\"getElixirInfo\"),Promise.all([r.run(\"elixir --version\").then(function(e){return r.findVersion(e,/[Elixir]+\\s([\\d+.[\\d+|.]+)/,1)}),r.which(\"elixir\")]).then(function(e){return Promise.resolve(r.determineFound(\"Elixir\",e[0],e[1]))})},getErlangInfo:function(){return r.log(\"trace\",\"getErlangInfo\"),Promise.all([r.run(\"erl -eval \\\"{ok, Version} = file:read_file(filename:join([code:root_dir(), 'releases', erlang:system_info(otp_release), 'OTP_VERSION'])), io:fwrite(Version), halt().\\\" -noshell\").then(r.findVersion),r.which(\"erl\")]).then(function(e){return Promise.resolve(r.determineFound(\"Erlang\",e[0],e[1]))})},getGoInfo:function(){return r.log(\"trace\",\"getGoInfo\"),Promise.all([r.run(\"go version\").then(r.findVersion),r.which(\"go\")]).then(function(e){return r.determineFound(\"Go\",e[0],e[1])})},getJavaInfo:function(){return r.log(\"trace\",\"getJavaInfo\"),Promise.all([r.run(\"javac -version\",{unify:!0}).then(function(e){return r.findVersion(e,/\\d+\\.[\\w+|.|_|-]+/)}),r.run(\"which javac\")]).then(function(e){return r.determineFound(\"Java\",e[0],e[1])})},getPerlInfo:function(){return r.log(\"trace\",\"getPerlInfo\"),Promise.all([r.run(\"perl -v\").then(r.findVersion),r.which(\"perl\")]).then(function(e){return r.determineFound(\"Perl\",e[0],e[1])})},getPHPInfo:function(){return r.log(\"trace\",\"getPHPInfo\"),Promise.all([r.run(\"php -v\").then(r.findVersion),r.which(\"php\")]).then(function(e){return r.determineFound(\"PHP\",e[0],e[1])})},getProtocInfo:function(){return r.log(\"trace\",\"getProtocInfo\"),Promise.all([r.run(\"protoc --version\").then(r.findVersion),r.run(\"which protoc\")]).then(function(e){return r.determineFound(\"Protoc\",e[0],e[1])})},getPythonInfo:function(){return r.log(\"trace\",\"getPythonInfo\"),Promise.all([r.run(\"python -V 2>&1\").then(r.findVersion),r.run(\"which python\")]).then(function(e){return r.determineFound(\"Python\",e[0],e[1])})},getPython3Info:function(){return r.log(\"trace\",\"getPython3Info\"),Promise.all([r.run(\"python3 -V 2>&1\").then(r.findVersion),r.run(\"which python3\")]).then(function(e){return r.determineFound(\"Python3\",e[0],e[1])})},getRInfo:function(){return r.log(\"trace\",\"getRInfo\"),Promise.all([r.run(\"R --version\",{unify:!0}).then(r.findVersion),r.which(\"R\")]).then(function(e){return r.determineFound(\"R\",e[0],e[1])})},getRubyInfo:function(){return r.log(\"trace\",\"getRubyInfo\"),Promise.all([r.run(\"ruby -v\").then(r.findVersion),r.which(\"ruby\")]).then(function(e){return r.determineFound(\"Ruby\",e[0],e[1])})},getRustInfo:function(){return r.log(\"trace\",\"getRustInfo\"),Promise.all([r.run(\"rustc --version\").then(r.findVersion),r.run(\"which rustc\")]).then(function(e){return r.determineFound(\"Rust\",e[0],e[1])})},getScalaInfo:function(){return r.log(\"trace\",\"getScalaInfo\"),r.isMacOS||r.isLinux?Promise.all([r.run(\"scalac -version\").then(r.findVersion),r.run(\"which scalac\")]).then(function(e){return r.determineFound(\"Scala\",e[0],e[1])}):Promise.resolve([\"Scala\",\"N/A\"])}}},function(e,t,n){\"use strict\";n(2);var r=n(1);e.exports={getAptInfo:function(){return r.log(\"trace\",\"getAptInfo\"),r.isLinux?Promise.all([r.run(\"apt --version\").then(r.findVersion),r.which(\"apt\")]).then(function(e){return r.determineFound(\"Apt\",e[0],e[1])}):Promise.all([\"Apt\",\"N/A\"])},getCargoInfo:function(){return r.log(\"trace\",\"getCargoInfo\"),Promise.all([r.run(\"cargo --version\").then(r.findVersion),r.which(\"cargo\").then(r.condensePath)]).then(function(e){return r.determineFound(\"Cargo\",e[0],e[1])})},getCocoaPodsInfo:function(){return r.log(\"trace\",\"getCocoaPodsInfo\"),r.isMacOS?Promise.all([r.run(\"pod --version\").then(r.findVersion),r.which(\"pod\")]).then(function(e){return r.determineFound(\"CocoaPods\",e[0],e[1])}):Promise.all([\"CocoaPods\",\"N/A\"])},getComposerInfo:function(){return r.log(\"trace\",\"getComposerInfo\"),Promise.all([r.run(\"composer --version\").then(r.findVersion),r.which(\"composer\").then(r.condensePath)]).then(function(e){return r.determineFound(\"Composer\",e[0],e[1])})},getGradleInfo:function(){return r.log(\"trace\",\"getGradleInfo\"),Promise.all([r.run(\"gradle --version\").then(r.findVersion),r.which(\"gradle\").then(r.condensePath)]).then(function(e){return r.determineFound(\"Gradle\",e[0],e[1])})},getHomebrewInfo:function(){return r.log(\"trace\",\"getHomebrewInfo\"),r.isMacOS?Promise.all([r.run(\"brew --version\").then(r.findVersion),r.which(\"brew\")]).then(function(e){return r.determineFound(\"Homebrew\",e[0],e[1])}):Promise.all([\"Homebrew\",\"N/A\"])},getMavenInfo:function(){return r.log(\"trace\",\"getMavenInfo\"),Promise.all([r.run(\"mvn --version\").then(r.findVersion),r.which(\"mvn\").then(r.condensePath)]).then(function(e){return r.determineFound(\"Maven\",e[0],e[1])})},getpip2Info:function(){return r.log(\"trace\",\"getpip2Info\"),Promise.all([r.run(\"pip2 --version\").then(r.findVersion),r.which(\"pip2\").then(r.condensePath)]).then(function(e){return r.determineFound(\"pip2\",e[0],e[1])})},getpip3Info:function(){return r.log(\"trace\",\"getpip3Info\"),Promise.all([r.run(\"pip3 --version\").then(r.findVersion),r.which(\"pip3\").then(r.condensePath)]).then(function(e){return r.determineFound(\"pip3\",e[0],e[1])})},getRubyGemsInfo:function(){return r.log(\"trace\",\"getRubyGemsInfo\"),Promise.all([r.run(\"gem --version\").then(r.findVersion),r.which(\"gem\")]).then(function(e){return r.determineFound(\"RubyGems\",e[0],e[1])})},getYumInfo:function(){return r.log(\"trace\",\"getYumInfo\"),r.isLinux?Promise.all([r.run(\"yum --version\").then(r.findVersion),r.which(\"yum\")]).then(function(e){return r.determineFound(\"Yum\",e[0],e[1])}):Promise.all([\"Yum\",\"N/A\"])}}},function(e,t,n){\"use strict\";n(2);var r=n(1),o=n(0);e.exports={getYarnWorkspacesInfo:function(){return r.log(\"trace\",\"getYarnWorkspacesInfo\"),Promise.all([r.run(\"yarn -v\"),r.getPackageJsonByPath(\"package.json\").then(function(e){return e&&\"workspaces\"in e})]).then(function(e){var t=\"Yarn Workspaces\";return e[0]&&e[1]?Promise.resolve([t,e[0]]):Promise.resolve([t,\"Not Found\"])})},getLernaInfo:function(){return r.log(\"trace\",\"getLernaInfo\"),Promise.all([r.getPackageJsonByName(\"lerna\").then(function(e){return e&&e.version}),r.fileExists(o.join(process.cwd(),\"lerna.json\"))]).then(function(e){return e[0]&&e[1]?Promise.resolve([\"Lerna\",e[0]]):Promise.resolve([\"Lerna\",\"Not Found\"])})}}},function(e,t,n){\"use strict\";n(22),n(2),n(16);var r=n(5),o=n(0),i=n(1);e.exports={getAndroidSDKInfo:function(){return i.run(\"sdkmanager --list\").then(function(e){return!e&&process.env.ANDROID_HOME?i.run(`${process.env.ANDROID_HOME}/tools/bin/sdkmanager --list`):e}).then(function(e){return!e&&process.env.ANDROID_HOME?i.run(`${process.env.ANDROID_HOME}/cmdline-tools/latest/bin/sdkmanager --list`):e}).then(function(e){return!e&&i.isMacOS?i.run(\"~/Library/Android/sdk/tools/bin/sdkmanager --list\"):e}).then(function(e){var t=i.parseSDKManagerOutput(e),n=function(e){var t,n=o.join(e,\"source.properties\");try{t=r.readFileSync(n,\"utf8\")}catch(e){if(\"ENOENT\"===e.code)return;throw e}for(var i=t.split(\"\\n\"),s=0;s<i.length;s+=1){var a=i[s].split(\"=\");if(2===a.length&&\"Pkg.Revision\"===a[0].trim())return a[1].trim()}},s=process.env.ANDROID_NDK?n(process.env.ANDROID_NDK):process.env.ANDROID_NDK_HOME?n(process.env.ANDROID_NDK_HOME):process.env.ANDROID_HOME?n(o.join(process.env.ANDROID_HOME,\"ndk-bundle\")):void 0;return t.buildTools.length||t.apiLevels.length||t.systemImages.length||s?Promise.resolve([\"Android SDK\",{\"API Levels\":t.apiLevels||i.NotFound,\"Build Tools\":t.buildTools||i.NotFound,\"System Images\":t.systemImages||i.NotFound,\"Android NDK\":s||i.NotFound}]):Promise.resolve([\"Android SDK\",i.NotFound])})},getiOSSDKInfo:function(){return i.isMacOS?i.run(\"xcodebuild -showsdks\").then(function(e){return e.match(/[\\w]+\\s[\\d|.]+/g)}).then(i.uniq).then(function(e){return e.length?[\"iOS SDK\",{Platforms:e}]:[\"iOS SDK\",i.NotFound]}):Promise.resolve([\"iOS SDK\",\"N/A\"])},getWindowsSDKInfo:function(){if(i.log(\"trace\",\"getWindowsSDKInfo\"),i.isWindows){var e=i.NotFound;return i.run(\"reg query HKLM\\\\SOFTWARE\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\AppModelUnlock\").then(function(t){e=t.split(/[\\r\\n]/g).slice(1).filter(function(e){return\"\"!==e}).reduce(function(e,t){var n=t.match(/[^\\s]+/g);return\"0x0\"!==n[2]&&\"0x1\"!==n[2]||(n[2]=\"0x1\"===n[2]?\"Enabled\":\"Disabled\"),e[n[0]]=n[2],e},{}),0===Object.keys(e).length&&(e=i.NotFound);try{var n=r.readdirSync(`${process.env[\"ProgramFiles(x86)\"]}/Windows Kits/10/Platforms/UAP`);e.Versions=n}catch(e){}return Promise.resolve([\"Windows SDK\",e])})}return Promise.resolve([\"Windows SDK\",i.NA])}}},function(e,t,n){\"use strict\";n(2);var r=n(1);e.exports={getApacheInfo:function(){return r.log(\"trace\",\"getApacheInfo\"),r.isMacOS||r.isLinux?Promise.all([r.run(\"apachectl -v\").then(r.findVersion),r.run(\"which apachectl\")]).then(function(e){return r.determineFound(\"Apache\",e[0],e[1])}):Promise.resolve([\"Apache\",\"N/A\"])},getNginxInfo:function(){return r.log(\"trace\",\"getNginxInfo\"),r.isMacOS||r.isLinux?Promise.all([r.run(\"nginx -v 2>&1\").then(r.findVersion),r.run(\"which nginx\")]).then(function(e){return r.determineFound(\"Nginx\",e[0],e[1])}):Promise.resolve([\"Nginx\",\"N/A\"])}}},function(e,t,n){\"use strict\";n(22),n(2);var r=n(132),o=n(1),i=n(17);e.exports={getContainerInfo:function(){return o.log(\"trace\",\"getContainerInfo\"),o.isLinux?Promise.all([o.fileExists(\"/.dockerenv\"),o.readFile(\"/proc/self/cgroup\")]).then(function(e){return o.log(\"trace\",\"getContainerInfoThen\",e),Promise.resolve([\"Container\",e[0]||e[1]?\"Yes\":\"N/A\"])}).catch(function(e){return o.log(\"trace\",\"getContainerInfoCatch\",e)}):Promise.resolve([\"Container\",\"N/A\"])},getCPUInfo:function(){var e;o.log(\"trace\",\"getCPUInfo\");try{var t=i.cpus();e=\"(\"+t.length+\") \"+i.arch()+\" \"+t[0].model}catch(t){e=\"Unknown\"}return Promise.all([\"CPU\",e])},getMemoryInfo:function(){return o.log(\"trace\",\"getMemoryInfo\"),Promise.all([\"Memory\",`${o.toReadableBytes(i.freemem())} / ${o.toReadableBytes(i.totalmem())}`])},getOSInfo:function(){return o.log(\"trace\",\"getOSInfo\"),(o.isMacOS?o.run(\"sw_vers -productVersion \"):o.isLinux?o.run(\"cat /etc/os-release\").then(function(e){var t=(e||\"\").match(/NAME=\"(.+)\"/)||\"\",n=(e||\"\").match(/VERSION=\"(.+)\"/)||[\"\",\"\"],r=null!==n?n[1]:\"\";return`${t[1]} ${r}`.trim()||\"\"}):o.isWindows?Promise.resolve(i.release()):Promise.resolve()).then(function(e){var t=r(i.platform(),i.release());return e&&(t+=` ${e}`),[\"OS\",t]})},getShellInfo:function(){if(o.log(\"trace\",\"getShellInfo\",process.env),o.isMacOS||o.isLinux){var e=process.env.SHELL||o.runSync(\"getent passwd $LOGNAME | cut -d: -f7 | head -1\"),t=`${e} --version 2>&1`;return e.match(\"/bin/ash\")&&(t=`${e} --help 2>&1`),Promise.all([o.run(t).then(o.findVersion),o.which(e)]).then(function(e){return o.determineFound(\"Shell\",e[0]||\"Unknown\",e[1])})}return Promise.resolve([\"Shell\",\"N/A\"])},getGLibcInfo:function(){return o.log(\"trace\",\"getGLibc\"),o.isLinux?Promise.all([o.run(\"ldd --version\").then(o.findVersion)]).then(function(e){return o.determineFound(\"GLibc\",e[0]||\"Unknown\")}):Promise.resolve([\"GLibc\",\"N/A\"])}}},function(e,t,n){\"use strict\";const r=n(17),o=n(133),i=n(134);e.exports=((e,t)=>{if(!e&&t)throw new Error(\"You can't specify a `release` without specifying `platform`\");let n;if(\"darwin\"===(e=e||r.platform()))return t||\"darwin\"!==r.platform()||(t=r.release()),(t?Number(t.split(\".\")[0])>15?\"macOS\":\"OS X\":\"macOS\")+((n=t?o(t).name:\"\")?\" \"+n:\"\");return\"linux\"===e?(t||\"linux\"!==r.platform()||(t=r.release()),\"Linux\"+((n=t?t.replace(/^(\\d+\\.\\d+).*/,\"$1\"):\"\")?\" \"+n:\"\")):\"win32\"===e?(t||\"win32\"!==r.platform()||(t=r.release()),\"Windows\"+((n=t?i(t):\"\")?\" \"+n:\"\")):e})},function(e,t,n){\"use strict\";const r=n(17),o=new Map([[18,\"Mojave\"],[17,\"High Sierra\"],[16,\"Sierra\"],[15,\"El Capitan\"],[14,\"Yosemite\"],[13,\"Mavericks\"],[12,\"Mountain Lion\"],[11,\"Lion\"],[10,\"Snow Leopard\"],[9,\"Leopard\"],[8,\"Tiger\"],[7,\"Panther\"],[6,\"Jaguar\"],[5,\"Puma\"]]),i=e=>(e=Number((e||r.release()).split(\".\")[0]),{name:o.get(e),version:\"10.\"+(e-4)});e.exports=i,e.exports.default=i},function(e,t,n){\"use strict\";const r=n(17),o=n(135),i=new Map([[\"10.0\",\"10\"],[\"6.3\",\"8.1\"],[\"6.2\",\"8\"],[\"6.1\",\"7\"],[\"6.0\",\"Vista\"],[\"5.2\",\"Server 2003\"],[\"5.1\",\"XP\"],[\"5.0\",\"2000\"],[\"4.9\",\"ME\"],[\"4.1\",\"98\"],[\"4.0\",\"95\"]]);e.exports=(e=>{const t=/\\d+\\.\\d/.exec(e||r.release());if(e&&!t)throw new Error(\"`release` argument doesn't match `n.n`\");const n=(t||[])[0];if((!e||e===r.release())&&[\"6.1\",\"6.2\",\"6.3\",\"10.0\"].includes(n)){const e=((o.sync(\"wmic\",[\"os\",\"get\",\"Caption\"]).stdout||\"\").match(/2008|2012|2016/)||[])[0];if(e)return`Server ${e}`}return i.get(n)})},function(e,t,n){\"use strict\";const r=n(0),o=n(49),i=n(136),s=n(146),a=n(147),c=n(148),u=n(149),l=n(154),f=n(155),p=n(157),h=n(158),d=1e7;function m(e,t,n){let o;return(n=Object.assign({extendEnv:!0,env:{}},n)).extendEnv&&(n.env=Object.assign({},process.env,n.env)),!0===n.__winShell?(delete n.__winShell,o={command:e,args:t,options:n,file:e,original:{cmd:e,args:t}}):o=i._parse(e,t,n),(n=Object.assign({maxBuffer:d,buffer:!0,stripEof:!0,preferLocal:!0,localDir:o.options.cwd||process.cwd(),encoding:\"utf8\",reject:!0,cleanup:!0},o.options)).stdio=h(n),n.preferLocal&&(n.env=a.env(Object.assign({},n,{cwd:n.localDir}))),n.detached&&(n.cleanup=!1),\"win32\"===process.platform&&\"cmd.exe\"===r.basename(o.command)&&o.args.unshift(\"/q\"),{cmd:o.command,args:o.args,opts:n,parsed:o}}function g(e,t){return t&&e.stripEof&&(t=s(t)),t}function v(e,t,n){let r=\"/bin/sh\",o=[\"-c\",t];return n=Object.assign({},n),\"win32\"===process.platform&&(n.__winShell=!0,r=process.env.comspec||\"cmd.exe\",o=[\"/s\",\"/c\",`\"${t}\"`],n.windowsVerbatimArguments=!0),n.shell&&(r=n.shell,delete n.shell),e(r,o,n)}function y(e,t,{encoding:n,buffer:r,maxBuffer:o}){if(!e[t])return null;let i;return(i=r?n?u(e[t],{encoding:n,maxBuffer:o}):u.buffer(e[t],{maxBuffer:o}):new Promise((n,r)=>{e[t].once(\"end\",n).once(\"error\",r)})).catch(e=>{throw e.stream=t,e.message=`${t} ${e.message}`,e})}function b(e,t){const{stdout:n,stderr:r}=e;let o=e.error;const{code:i,signal:s}=e,{parsed:a,joinedCmd:c}=t,u=t.timedOut||!1;if(!o){let e=\"\";Array.isArray(a.opts.stdio)?(\"inherit\"!==a.opts.stdio[2]&&(e+=e.length>0?r:`\\n${r}`),\"inherit\"!==a.opts.stdio[1]&&(e+=`\\n${n}`)):\"inherit\"!==a.opts.stdio&&(e=`\\n${r}${n}`),(o=new Error(`Command failed: ${c}${e}`)).code=i<0?p(i):i}return o.stdout=n,o.stderr=r,o.failed=!0,o.signal=s||null,o.cmd=c,o.timedOut=u,o}function w(e,t){let n=e;return Array.isArray(t)&&t.length>0&&(n+=\" \"+t.join(\" \")),n}e.exports=((e,t,n)=>{const r=m(e,t,n),{encoding:s,buffer:a,maxBuffer:u}=r.opts,p=w(e,t);let h,d;try{h=o.spawn(r.cmd,r.args,r.opts)}catch(e){return Promise.reject(e)}r.opts.cleanup&&(d=f(()=>{h.kill()}));let v=null,x=!1;const S=()=>{v&&(clearTimeout(v),v=null),d&&d()};r.opts.timeout>0&&(v=setTimeout(()=>{v=null,x=!0,h.kill(r.opts.killSignal)},r.opts.timeout));const P=new Promise(e=>{h.on(\"exit\",(t,n)=>{S(),e({code:t,signal:n})}),h.on(\"error\",t=>{S(),e({error:t})}),h.stdin&&h.stdin.on(\"error\",t=>{S(),e({error:t})})});function O(){h.stdout&&h.stdout.destroy(),h.stderr&&h.stderr.destroy()}const j=()=>l(Promise.all([P,y(h,\"stdout\",{encoding:s,buffer:a,maxBuffer:u}),y(h,\"stderr\",{encoding:s,buffer:a,maxBuffer:u})]).then(e=>{const t=e[0];if(t.stdout=e[1],t.stderr=e[2],t.error||0!==t.code||null!==t.signal){const e=b(t,{joinedCmd:p,parsed:r,timedOut:x});if(e.killed=e.killed||h.killed,!r.opts.reject)return e;throw e}return{stdout:g(r.opts,t.stdout),stderr:g(r.opts,t.stderr),code:0,failed:!1,killed:!1,signal:null,cmd:p,timedOut:!1}}),O);return i._enoent.hookChildProcess(h,r.parsed),function(e,t){null!=t&&(c(t)?t.pipe(e.stdin):e.stdin.end(t))}(h,r.opts.input),h.then=((e,t)=>j().then(e,t)),h.catch=(e=>j().catch(e)),h}),e.exports.stdout=((...t)=>e.exports(...t).then(e=>e.stdout)),e.exports.stderr=((...t)=>e.exports(...t).then(e=>e.stderr)),e.exports.shell=((t,n)=>v(e.exports,t,n)),e.exports.sync=((e,t,n)=>{const r=m(e,t,n),i=w(e,t);if(c(r.opts.input))throw new TypeError(\"The `input` option cannot be a stream in sync mode\");const s=o.spawnSync(r.cmd,r.args,r.opts);if(s.code=s.status,s.error||0!==s.status||null!==s.signal){const e=b(s,{joinedCmd:i,parsed:r});if(!r.opts.reject)return e;throw e}return{stdout:g(r.opts,s.stdout),stderr:g(r.opts,s.stderr),code:0,failed:!1,signal:null,cmd:i,timedOut:!1}}),e.exports.shellSync=((t,n)=>v(e.exports.sync,t,n))},function(e,t,n){\"use strict\";const r=n(49),o=n(137),i=n(145);function s(e,t,n){const s=o(e,t,n),a=r.spawn(s.command,s.args,s.options);return i.hookChildProcess(a,s),a}e.exports=s,e.exports.spawn=s,e.exports.sync=function(e,t,n){const s=o(e,t,n),a=r.spawnSync(s.command,s.args,s.options);return a.error=a.error||i.verifyENOENTSync(a.status,s),a},e.exports._parse=o,e.exports._enoent=i},function(e,t,n){\"use strict\";const r=n(0),o=n(138),i=n(139),s=n(140),a=n(141),c=n(144),u=\"win32\"===process.platform,l=/\\.(?:com|exe)$/i,f=/node_modules[\\\\/].bin[\\\\/][^\\\\/]+\\.cmd$/i,p=o(()=>c.satisfies(process.version,\"^4.8.0 || ^5.7.0 || >= 6.0.0\",!0))||!1;function h(e){if(!u)return e;const t=function(e){e.file=i(e);const t=e.file&&a(e.file);return t?(e.args.unshift(e.file),e.command=t,i(e)):e.file}(e),n=!l.test(t);if(e.options.forceShell||n){const n=f.test(t);e.command=r.normalize(e.command),e.command=s.command(e.command),e.args=e.args.map(e=>s.argument(e,n));const o=[e.command].concat(e.args).join(\" \");e.args=[\"/d\",\"/s\",\"/c\",`\"${o}\"`],e.command=process.env.comspec||\"cmd.exe\",e.options.windowsVerbatimArguments=!0}return e}e.exports=function(e,t,n){t&&!Array.isArray(t)&&(n=t,t=null);const r={command:e,args:t=t?t.slice(0):[],options:n=Object.assign({},n),file:void 0,original:{command:e,args:t}};return n.shell?function(e){if(p)return e;const t=[e.command].concat(e.args).join(\" \");return u?(e.command=\"string\"==typeof e.options.shell?e.options.shell:process.env.comspec||\"cmd.exe\",e.args=[\"/d\",\"/s\",\"/c\",`\"${t}\"`],e.options.windowsVerbatimArguments=!0):(\"string\"==typeof e.options.shell?e.command=e.options.shell:\"android\"===process.platform?e.command=\"/system/bin/sh\":e.command=\"/bin/sh\",e.args=[\"-c\",t]),e}(r):h(r)}},function(e,t,n){\"use strict\";e.exports=function(e){try{return e()}catch(e){}}},function(e,t,n){\"use strict\";const r=n(0),o=n(76),i=n(77)();function s(e,t){const n=process.cwd(),s=null!=e.options.cwd;if(s)try{process.chdir(e.options.cwd)}catch(e){}let a;try{a=o.sync(e.command,{path:(e.options.env||process.env)[i],pathExt:t?r.delimiter:void 0})}catch(e){}finally{process.chdir(n)}return a&&(a=r.resolve(s?e.options.cwd:\"\",a)),a}e.exports=function(e){return s(e)||s(e,!0)}},function(e,t,n){\"use strict\";const r=/([()\\][%!^\"`<>&|;, *?])/g;e.exports.command=function(e){return e=e.replace(r,\"^$1\")},e.exports.argument=function(e,t){return e=(e=`\"${e=(e=(e=`${e}`).replace(/(\\\\*)\"/g,'$1$1\\\\\"')).replace(/(\\\\*)$/,\"$1$1\")}\"`).replace(r,\"^$1\"),t&&(e=e.replace(r,\"^$1\")),e}},function(e,t,n){\"use strict\";const r=n(5),o=n(142);e.exports=function(e){let t,n;Buffer.alloc?t=Buffer.alloc(150):(t=new Buffer(150)).fill(0);try{n=r.openSync(e,\"r\"),r.readSync(n,t,0,150,0),r.closeSync(n)}catch(e){}return o(t.toString())}},function(e,t,n){\"use strict\";var r=n(143);e.exports=function(e){var t=e.match(r);if(!t)return null;var n=t[0].replace(/#! ?/,\"\").split(\" \"),o=n[0].split(\"/\").pop(),i=n[1];return\"env\"===o?i:o+(i?\" \"+i:\"\")}},function(e,t,n){\"use strict\";e.exports=/^#!.*/},function(e,t){var n;t=e.exports=Y,n=\"object\"==typeof process&&process.env&&process.env.NODE_DEBUG&&/\\bsemver\\b/i.test(process.env.NODE_DEBUG)?function(){var e=Array.prototype.slice.call(arguments,0);e.unshift(\"SEMVER\"),console.log.apply(console,e)}:function(){},t.SEMVER_SPEC_VERSION=\"2.0.0\";var r=256,o=Number.MAX_SAFE_INTEGER||9007199254740991,i=t.re=[],s=t.src=[],a=0,c=a++;s[c]=\"0|[1-9]\\\\d*\";var u=a++;s[u]=\"[0-9]+\";var l=a++;s[l]=\"\\\\d*[a-zA-Z-][a-zA-Z0-9-]*\";var f=a++;s[f]=\"(\"+s[c]+\")\\\\.(\"+s[c]+\")\\\\.(\"+s[c]+\")\";var p=a++;s[p]=\"(\"+s[u]+\")\\\\.(\"+s[u]+\")\\\\.(\"+s[u]+\")\";var h=a++;s[h]=\"(?:\"+s[c]+\"|\"+s[l]+\")\";var d=a++;s[d]=\"(?:\"+s[u]+\"|\"+s[l]+\")\";var m=a++;s[m]=\"(?:-(\"+s[h]+\"(?:\\\\.\"+s[h]+\")*))\";var g=a++;s[g]=\"(?:-?(\"+s[d]+\"(?:\\\\.\"+s[d]+\")*))\";var v=a++;s[v]=\"[0-9A-Za-z-]+\";var y=a++;s[y]=\"(?:\\\\+(\"+s[v]+\"(?:\\\\.\"+s[v]+\")*))\";var b=a++,w=\"v?\"+s[f]+s[m]+\"?\"+s[y]+\"?\";s[b]=\"^\"+w+\"$\";var x=\"[v=\\\\s]*\"+s[p]+s[g]+\"?\"+s[y]+\"?\",S=a++;s[S]=\"^\"+x+\"$\";var P=a++;s[P]=\"((?:<|>)?=?)\";var O=a++;s[O]=s[u]+\"|x|X|\\\\*\";var j=a++;s[j]=s[c]+\"|x|X|\\\\*\";var E=a++;s[E]=\"[v=\\\\s]*(\"+s[j]+\")(?:\\\\.(\"+s[j]+\")(?:\\\\.(\"+s[j]+\")(?:\"+s[m]+\")?\"+s[y]+\"?)?)?\";var I=a++;s[I]=\"[v=\\\\s]*(\"+s[O]+\")(?:\\\\.(\"+s[O]+\")(?:\\\\.(\"+s[O]+\")(?:\"+s[g]+\")?\"+s[y]+\"?)?)?\";var _=a++;s[_]=\"^\"+s[P]+\"\\\\s*\"+s[E]+\"$\";var A=a++;s[A]=\"^\"+s[P]+\"\\\\s*\"+s[I]+\"$\";var k=a++;s[k]=\"(?:^|[^\\\\d])(\\\\d{1,16})(?:\\\\.(\\\\d{1,16}))?(?:\\\\.(\\\\d{1,16}))?(?:$|[^\\\\d])\";var N=a++;s[N]=\"(?:~>?)\";var F=a++;s[F]=\"(\\\\s*)\"+s[N]+\"\\\\s+\",i[F]=new RegExp(s[F],\"g\");var C=a++;s[C]=\"^\"+s[N]+s[E]+\"$\";var M=a++;s[M]=\"^\"+s[N]+s[I]+\"$\";var T=a++;s[T]=\"(?:\\\\^)\";var V=a++;s[V]=\"(\\\\s*)\"+s[T]+\"\\\\s+\",i[V]=new RegExp(s[V],\"g\");var D=a++;s[D]=\"^\"+s[T]+s[E]+\"$\";var B=a++;s[B]=\"^\"+s[T]+s[I]+\"$\";var L=a++;s[L]=\"^\"+s[P]+\"\\\\s*(\"+x+\")$|^$\";var $=a++;s[$]=\"^\"+s[P]+\"\\\\s*(\"+w+\")$|^$\";var R=a++;s[R]=\"(\\\\s*)\"+s[P]+\"\\\\s*(\"+x+\"|\"+s[E]+\")\",i[R]=new RegExp(s[R],\"g\");var G=a++;s[G]=\"^\\\\s*(\"+s[E]+\")\\\\s+-\\\\s+(\"+s[E]+\")\\\\s*$\";var W=a++;s[W]=\"^\\\\s*(\"+s[I]+\")\\\\s+-\\\\s+(\"+s[I]+\")\\\\s*$\";var U=a++;s[U]=\"(<|>)?=?\\\\s*\\\\*\";for(var q=0;q<35;q++)n(q,s[q]),i[q]||(i[q]=new RegExp(s[q]));function K(e,t){if(t&&\"object\"==typeof t||(t={loose:!!t,includePrerelease:!1}),e instanceof Y)return e;if(\"string\"!=typeof e)return null;if(e.length>r)return null;if(!(t.loose?i[S]:i[b]).test(e))return null;try{return new Y(e,t)}catch(e){return null}}function Y(e,t){if(t&&\"object\"==typeof t||(t={loose:!!t,includePrerelease:!1}),e instanceof Y){if(e.loose===t.loose)return e;e=e.version}else if(\"string\"!=typeof e)throw new TypeError(\"Invalid Version: \"+e);if(e.length>r)throw new TypeError(\"version is longer than \"+r+\" characters\");if(!(this instanceof Y))return new Y(e,t);n(\"SemVer\",e,t),this.options=t,this.loose=!!t.loose;var s=e.trim().match(t.loose?i[S]:i[b]);if(!s)throw new TypeError(\"Invalid Version: \"+e);if(this.raw=e,this.major=+s[1],this.minor=+s[2],this.patch=+s[3],this.major>o||this.major<0)throw new TypeError(\"Invalid major version\");if(this.minor>o||this.minor<0)throw new TypeError(\"Invalid minor version\");if(this.patch>o||this.patch<0)throw new TypeError(\"Invalid patch version\");s[4]?this.prerelease=s[4].split(\".\").map(function(e){if(/^[0-9]+$/.test(e)){var t=+e;if(t>=0&&t<o)return t}return e}):this.prerelease=[],this.build=s[5]?s[5].split(\".\"):[],this.format()}t.parse=K,t.valid=function(e,t){var n=K(e,t);return n?n.version:null},t.clean=function(e,t){var n=K(e.trim().replace(/^[=v]+/,\"\"),t);return n?n.version:null},t.SemVer=Y,Y.prototype.format=function(){return this.version=this.major+\".\"+this.minor+\".\"+this.patch,this.prerelease.length&&(this.version+=\"-\"+this.prerelease.join(\".\")),this.version},Y.prototype.toString=function(){return this.version},Y.prototype.compare=function(e){return n(\"SemVer.compare\",this.version,this.options,e),e instanceof Y||(e=new Y(e,this.options)),this.compareMain(e)||this.comparePre(e)},Y.prototype.compareMain=function(e){return e instanceof Y||(e=new Y(e,this.options)),J(this.major,e.major)||J(this.minor,e.minor)||J(this.patch,e.patch)},Y.prototype.comparePre=function(e){if(e instanceof Y||(e=new Y(e,this.options)),this.prerelease.length&&!e.prerelease.length)return-1;if(!this.prerelease.length&&e.prerelease.length)return 1;if(!this.prerelease.length&&!e.prerelease.length)return 0;var t=0;do{var r=this.prerelease[t],o=e.prerelease[t];if(n(\"prerelease compare\",t,r,o),void 0===r&&void 0===o)return 0;if(void 0===o)return 1;if(void 0===r)return-1;if(r!==o)return J(r,o)}while(++t)},Y.prototype.inc=function(e,t){switch(e){case\"premajor\":this.prerelease.length=0,this.patch=0,this.minor=0,this.major++,this.inc(\"pre\",t);break;case\"preminor\":this.prerelease.length=0,this.patch=0,this.minor++,this.inc(\"pre\",t);break;case\"prepatch\":this.prerelease.length=0,this.inc(\"patch\",t),this.inc(\"pre\",t);break;case\"prerelease\":0===this.prerelease.length&&this.inc(\"patch\",t),this.inc(\"pre\",t);break;case\"major\":0===this.minor&&0===this.patch&&0!==this.prerelease.length||this.major++,this.minor=0,this.patch=0,this.prerelease=[];break;case\"minor\":0===this.patch&&0!==this.prerelease.length||this.minor++,this.patch=0,this.prerelease=[];break;case\"patch\":0===this.prerelease.length&&this.patch++,this.prerelease=[];break;case\"pre\":if(0===this.prerelease.length)this.prerelease=[0];else{for(var n=this.prerelease.length;--n>=0;)\"number\"==typeof this.prerelease[n]&&(this.prerelease[n]++,n=-2);-1===n&&this.prerelease.push(0)}t&&(this.prerelease[0]===t?isNaN(this.prerelease[1])&&(this.prerelease=[t,0]):this.prerelease=[t,0]);break;default:throw new Error(\"invalid increment argument: \"+e)}return this.format(),this.raw=this.version,this},t.inc=function(e,t,n,r){\"string\"==typeof n&&(r=n,n=void 0);try{return new Y(e,n).inc(t,r).version}catch(e){return null}},t.diff=function(e,t){if(Z(e,t))return null;var n=K(e),r=K(t);if(n.prerelease.length||r.prerelease.length){for(var o in n)if((\"major\"===o||\"minor\"===o||\"patch\"===o)&&n[o]!==r[o])return\"pre\"+o;return\"prerelease\"}for(var o in n)if((\"major\"===o||\"minor\"===o||\"patch\"===o)&&n[o]!==r[o])return o},t.compareIdentifiers=J;var H=/^[0-9]+$/;function J(e,t){var n=H.test(e),r=H.test(t);return n&&r&&(e=+e,t=+t),n&&!r?-1:r&&!n?1:e<t?-1:e>t?1:0}function z(e,t,n){return new Y(e,n).compare(new Y(t,n))}function Q(e,t,n){return z(e,t,n)>0}function X(e,t,n){return z(e,t,n)<0}function Z(e,t,n){return 0===z(e,t,n)}function ee(e,t,n){return 0!==z(e,t,n)}function te(e,t,n){return z(e,t,n)>=0}function ne(e,t,n){return z(e,t,n)<=0}function re(e,t,n,r){var o;switch(t){case\"===\":\"object\"==typeof e&&(e=e.version),\"object\"==typeof n&&(n=n.version),o=e===n;break;case\"!==\":\"object\"==typeof e&&(e=e.version),\"object\"==typeof n&&(n=n.version),o=e!==n;break;case\"\":case\"=\":case\"==\":o=Z(e,n,r);break;case\"!=\":o=ee(e,n,r);break;case\">\":o=Q(e,n,r);break;case\">=\":o=te(e,n,r);break;case\"<\":o=X(e,n,r);break;case\"<=\":o=ne(e,n,r);break;default:throw new TypeError(\"Invalid operator: \"+t)}return o}function oe(e,t){if(t&&\"object\"==typeof t||(t={loose:!!t,includePrerelease:!1}),e instanceof oe){if(e.loose===!!t.loose)return e;e=e.value}if(!(this instanceof oe))return new oe(e,t);n(\"comparator\",e,t),this.options=t,this.loose=!!t.loose,this.parse(e),this.semver===ie?this.value=\"\":this.value=this.operator+this.semver.version,n(\"comp\",this)}t.rcompareIdentifiers=function(e,t){return J(t,e)},t.major=function(e,t){return new Y(e,t).major},t.minor=function(e,t){return new Y(e,t).minor},t.patch=function(e,t){return new Y(e,t).patch},t.compare=z,t.compareLoose=function(e,t){return z(e,t,!0)},t.rcompare=function(e,t,n){return z(t,e,n)},t.sort=function(e,n){return e.sort(function(e,r){return t.compare(e,r,n)})},t.rsort=function(e,n){return e.sort(function(e,r){return t.rcompare(e,r,n)})},t.gt=Q,t.lt=X,t.eq=Z,t.neq=ee,t.gte=te,t.lte=ne,t.cmp=re,t.Comparator=oe;var ie={};function se(e,t){if(t&&\"object\"==typeof t||(t={loose:!!t,includePrerelease:!1}),e instanceof se)return e.loose===!!t.loose&&e.includePrerelease===!!t.includePrerelease?e:new se(e.raw,t);if(e instanceof oe)return new se(e.value,t);if(!(this instanceof se))return new se(e,t);if(this.options=t,this.loose=!!t.loose,this.includePrerelease=!!t.includePrerelease,this.raw=e,this.set=e.split(/\\s*\\|\\|\\s*/).map(function(e){return this.parseRange(e.trim())},this).filter(function(e){return e.length}),!this.set.length)throw new TypeError(\"Invalid SemVer Range: \"+e);this.format()}function ae(e){return!e||\"x\"===e.toLowerCase()||\"*\"===e}function ce(e,t,n,r,o,i,s,a,c,u,l,f,p){return((t=ae(n)?\"\":ae(r)?\">=\"+n+\".0.0\":ae(o)?\">=\"+n+\".\"+r+\".0\":\">=\"+t)+\" \"+(a=ae(c)?\"\":ae(u)?\"<\"+(+c+1)+\".0.0\":ae(l)?\"<\"+c+\".\"+(+u+1)+\".0\":f?\"<=\"+c+\".\"+u+\".\"+l+\"-\"+f:\"<=\"+a)).trim()}function ue(e,t,r){for(var o=0;o<e.length;o++)if(!e[o].test(t))return!1;if(r||(r={}),t.prerelease.length&&!r.includePrerelease){for(o=0;o<e.length;o++)if(n(e[o].semver),e[o].semver!==ie&&e[o].semver.prerelease.length>0){var i=e[o].semver;if(i.major===t.major&&i.minor===t.minor&&i.patch===t.patch)return!0}return!1}return!0}function le(e,t,n){try{t=new se(t,n)}catch(e){return!1}return t.test(e)}function fe(e,t,n,r){var o,i,s,a,c;switch(e=new Y(e,r),t=new se(t,r),n){case\">\":o=Q,i=ne,s=X,a=\">\",c=\">=\";break;case\"<\":o=X,i=te,s=Q,a=\"<\",c=\"<=\";break;default:throw new TypeError('Must provide a hilo val of \"<\" or \">\"')}if(le(e,t,r))return!1;for(var u=0;u<t.set.length;++u){var l=t.set[u],f=null,p=null;if(l.forEach(function(e){e.semver===ie&&(e=new oe(\">=0.0.0\")),f=f||e,p=p||e,o(e.semver,f.semver,r)?f=e:s(e.semver,p.semver,r)&&(p=e)}),f.operator===a||f.operator===c)return!1;if((!p.operator||p.operator===a)&&i(e,p.semver))return!1;if(p.operator===c&&s(e,p.semver))return!1}return!0}oe.prototype.parse=function(e){var t=this.options.loose?i[L]:i[$],n=e.match(t);if(!n)throw new TypeError(\"Invalid comparator: \"+e);this.operator=n[1],\"=\"===this.operator&&(this.operator=\"\"),n[2]?this.semver=new Y(n[2],this.options.loose):this.semver=ie},oe.prototype.toString=function(){return this.value},oe.prototype.test=function(e){return n(\"Comparator.test\",e,this.options.loose),this.semver===ie||(\"string\"==typeof e&&(e=new Y(e,this.options)),re(e,this.operator,this.semver,this.options))},oe.prototype.intersects=function(e,t){if(!(e instanceof oe))throw new TypeError(\"a Comparator is required\");var n;if(t&&\"object\"==typeof t||(t={loose:!!t,includePrerelease:!1}),\"\"===this.operator)return n=new se(e.value,t),le(this.value,n,t);if(\"\"===e.operator)return n=new se(this.value,t),le(e.semver,n,t);var r=!(\">=\"!==this.operator&&\">\"!==this.operator||\">=\"!==e.operator&&\">\"!==e.operator),o=!(\"<=\"!==this.operator&&\"<\"!==this.operator||\"<=\"!==e.operator&&\"<\"!==e.operator),i=this.semver.version===e.semver.version,s=!(\">=\"!==this.operator&&\"<=\"!==this.operator||\">=\"!==e.operator&&\"<=\"!==e.operator),a=re(this.semver,\"<\",e.semver,t)&&(\">=\"===this.operator||\">\"===this.operator)&&(\"<=\"===e.operator||\"<\"===e.operator),c=re(this.semver,\">\",e.semver,t)&&(\"<=\"===this.operator||\"<\"===this.operator)&&(\">=\"===e.operator||\">\"===e.operator);return r||o||i&&s||a||c},t.Range=se,se.prototype.format=function(){return this.range=this.set.map(function(e){return e.join(\" \").trim()}).join(\"||\").trim(),this.range},se.prototype.toString=function(){return this.range},se.prototype.parseRange=function(e){var t=this.options.loose;e=e.trim();var r=t?i[W]:i[G];e=e.replace(r,ce),n(\"hyphen replace\",e),e=e.replace(i[R],\"$1$2$3\"),n(\"comparator trim\",e,i[R]),e=(e=(e=e.replace(i[F],\"$1~\")).replace(i[V],\"$1^\")).split(/\\s+/).join(\" \");var o=t?i[L]:i[$],s=e.split(\" \").map(function(e){return function(e,t){return n(\"comp\",e,t),e=function(e,t){return e.trim().split(/\\s+/).map(function(e){return function(e,t){n(\"caret\",e,t),t&&\"object\"==typeof t||(t={loose:!!t,includePrerelease:!1});var r=t.loose?i[B]:i[D];return e.replace(r,function(t,r,o,i,s){var a;return n(\"caret\",e,t,r,o,i,s),ae(r)?a=\"\":ae(o)?a=\">=\"+r+\".0.0 <\"+(+r+1)+\".0.0\":ae(i)?a=\"0\"===r?\">=\"+r+\".\"+o+\".0 <\"+r+\".\"+(+o+1)+\".0\":\">=\"+r+\".\"+o+\".0 <\"+(+r+1)+\".0.0\":s?(n(\"replaceCaret pr\",s),\"-\"!==s.charAt(0)&&(s=\"-\"+s),a=\"0\"===r?\"0\"===o?\">=\"+r+\".\"+o+\".\"+i+s+\" <\"+r+\".\"+o+\".\"+(+i+1):\">=\"+r+\".\"+o+\".\"+i+s+\" <\"+r+\".\"+(+o+1)+\".0\":\">=\"+r+\".\"+o+\".\"+i+s+\" <\"+(+r+1)+\".0.0\"):(n(\"no pr\"),a=\"0\"===r?\"0\"===o?\">=\"+r+\".\"+o+\".\"+i+\" <\"+r+\".\"+o+\".\"+(+i+1):\">=\"+r+\".\"+o+\".\"+i+\" <\"+r+\".\"+(+o+1)+\".0\":\">=\"+r+\".\"+o+\".\"+i+\" <\"+(+r+1)+\".0.0\"),n(\"caret return\",a),a})}(e,t)}).join(\" \")}(e,t),n(\"caret\",e),e=function(e,t){return e.trim().split(/\\s+/).map(function(e){return function(e,t){t&&\"object\"==typeof t||(t={loose:!!t,includePrerelease:!1});var r=t.loose?i[M]:i[C];return e.replace(r,function(t,r,o,i,s){var a;return n(\"tilde\",e,t,r,o,i,s),ae(r)?a=\"\":ae(o)?a=\">=\"+r+\".0.0 <\"+(+r+1)+\".0.0\":ae(i)?a=\">=\"+r+\".\"+o+\".0 <\"+r+\".\"+(+o+1)+\".0\":s?(n(\"replaceTilde pr\",s),\"-\"!==s.charAt(0)&&(s=\"-\"+s),a=\">=\"+r+\".\"+o+\".\"+i+s+\" <\"+r+\".\"+(+o+1)+\".0\"):a=\">=\"+r+\".\"+o+\".\"+i+\" <\"+r+\".\"+(+o+1)+\".0\",n(\"tilde return\",a),a})}(e,t)}).join(\" \")}(e,t),n(\"tildes\",e),e=function(e,t){return n(\"replaceXRanges\",e,t),e.split(/\\s+/).map(function(e){return function(e,t){e=e.trim(),t&&\"object\"==typeof t||(t={loose:!!t,includePrerelease:!1});var r=t.loose?i[A]:i[_];return e.replace(r,function(t,r,o,i,s,a){n(\"xRange\",e,t,r,o,i,s,a);var c=ae(o),u=c||ae(i),l=u||ae(s),f=l;return\"=\"===r&&f&&(r=\"\"),c?t=\">\"===r||\"<\"===r?\"<0.0.0\":\"*\":r&&f?(u&&(i=0),l&&(s=0),\">\"===r?(r=\">=\",u?(o=+o+1,i=0,s=0):l&&(i=+i+1,s=0)):\"<=\"===r&&(r=\"<\",u?o=+o+1:i=+i+1),t=r+o+\".\"+i+\".\"+s):u?t=\">=\"+o+\".0.0 <\"+(+o+1)+\".0.0\":l&&(t=\">=\"+o+\".\"+i+\".0 <\"+o+\".\"+(+i+1)+\".0\"),n(\"xRange return\",t),t})}(e,t)}).join(\" \")}(e,t),n(\"xrange\",e),e=function(e,t){return n(\"replaceStars\",e,t),e.trim().replace(i[U],\"\")}(e,t),n(\"stars\",e),e}(e,this.options)},this).join(\" \").split(/\\s+/);return this.options.loose&&(s=s.filter(function(e){return!!e.match(o)})),s=s.map(function(e){return new oe(e,this.options)},this)},se.prototype.intersects=function(e,t){if(!(e instanceof se))throw new TypeError(\"a Range is required\");return this.set.some(function(n){return n.every(function(n){return e.set.some(function(e){return e.every(function(e){return n.intersects(e,t)})})})})},t.toComparators=function(e,t){return new se(e,t).set.map(function(e){return e.map(function(e){return e.value}).join(\" \").trim().split(\" \")})},se.prototype.test=function(e){if(!e)return!1;\"string\"==typeof e&&(e=new Y(e,this.options));for(var t=0;t<this.set.length;t++)if(ue(this.set[t],e,this.options))return!0;return!1},t.satisfies=le,t.maxSatisfying=function(e,t,n){var r=null,o=null;try{var i=new se(t,n)}catch(e){return null}return e.forEach(function(e){i.test(e)&&(r&&-1!==o.compare(e)||(o=new Y(r=e,n)))}),r},t.minSatisfying=function(e,t,n){var r=null,o=null;try{var i=new se(t,n)}catch(e){return null}return e.forEach(function(e){i.test(e)&&(r&&1!==o.compare(e)||(o=new Y(r=e,n)))}),r},t.validRange=function(e,t){try{return new se(e,t).range||\"*\"}catch(e){return null}},t.ltr=function(e,t,n){return fe(e,t,\"<\",n)},t.gtr=function(e,t,n){return fe(e,t,\">\",n)},t.outside=fe,t.prerelease=function(e,t){var n=K(e,t);return n&&n.prerelease.length?n.prerelease:null},t.intersects=function(e,t,n){return e=new se(e,n),t=new se(t,n),e.intersects(t)},t.coerce=function(e){if(e instanceof Y)return e;if(\"string\"!=typeof e)return null;var t=e.match(i[k]);return null==t?null:K((t[1]||\"0\")+\".\"+(t[2]||\"0\")+\".\"+(t[3]||\"0\"))}},function(e,t,n){\"use strict\";const r=\"win32\"===process.platform;function o(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 i(e,t){return r&&1===e&&!t.file?o(t.original,\"spawn\"):null}e.exports={hookChildProcess:function(e,t){if(!r)return;const n=e.emit;e.emit=function(r,o){if(\"exit\"===r){const r=i(o,t);if(r)return n.call(e,\"error\",r)}return n.apply(e,arguments)}},verifyENOENT:i,verifyENOENTSync:function(e,t){return r&&1===e&&!t.file?o(t.original,\"spawnSync\"):null},notFoundError:o}},function(e,t,n){\"use strict\";e.exports=function(e){var t=\"string\"==typeof e?\"\\n\":\"\\n\".charCodeAt(),n=\"string\"==typeof e?\"\\r\":\"\\r\".charCodeAt();return e[e.length-1]===t&&(e=e.slice(0,e.length-1)),e[e.length-1]===n&&(e=e.slice(0,e.length-1)),e}},function(e,t,n){\"use strict\";const r=n(0),o=n(77);e.exports=(e=>{let t;e=Object.assign({cwd:process.cwd(),path:process.env[o()]},e);let n=r.resolve(e.cwd);const i=[];for(;t!==n;)i.push(r.join(n,\"node_modules/.bin\")),t=n,n=r.resolve(n,\"..\");return i.push(r.dirname(process.execPath)),i.concat(e.path).join(r.delimiter)}),e.exports.env=(t=>{t=Object.assign({env:process.env},t);const n=Object.assign({},t.env),r=o({env:n});return t.path=n[r],n[r]=e.exports(t),n})},function(e,t,n){\"use strict\";var r=e.exports=function(e){return null!==e&&\"object\"==typeof e&&\"function\"==typeof e.pipe};r.writable=function(e){return r(e)&&!1!==e.writable&&\"function\"==typeof e._write&&\"object\"==typeof e._writableState},r.readable=function(e){return r(e)&&!1!==e.readable&&\"function\"==typeof e._read&&\"object\"==typeof e._readableState},r.duplex=function(e){return r.writable(e)&&r.readable(e)},r.transform=function(e){return r.duplex(e)&&\"function\"==typeof e._transform&&\"object\"==typeof e._transformState}},function(e,t,n){\"use strict\";const r=n(150),o=n(152);class i extends Error{constructor(){super(\"maxBuffer exceeded\"),this.name=\"MaxBufferError\"}}function s(e,t){if(!e)return Promise.reject(new Error(\"Expected a stream\"));t=Object.assign({maxBuffer:1/0},t);const{maxBuffer:n}=t;let s;return new Promise((a,c)=>{const u=e=>{e&&(e.bufferedData=s.getBufferedValue()),c(e)};(s=r(e,o(t),e=>{e?u(e):a()})).on(\"data\",()=>{s.getBufferedLength()>n&&u(new i)})}).then(()=>s.getBufferedValue())}e.exports=s,e.exports.buffer=((e,t)=>s(e,Object.assign({},t,{encoding:\"buffer\"}))),e.exports.array=((e,t)=>s(e,Object.assign({},t,{array:!0}))),e.exports.MaxBufferError=i},function(e,t,n){var r=n(31),o=n(151),i=n(5),s=function(){},a=/^v?\\.0/.test(process.version),c=function(e){return\"function\"==typeof e},u=function(e,t,n,u){u=r(u);var l=!1;e.on(\"close\",function(){l=!0}),o(e,{readable:t,writable:n},function(e){if(e)return u(e);l=!0,u()});var f=!1;return function(t){if(!l&&!f)return f=!0,function(e){return!!a&&!!i&&(e instanceof(i.ReadStream||s)||e instanceof(i.WriteStream||s))&&c(e.close)}(e)?e.close(s):function(e){return e.setHeader&&c(e.abort)}(e)?e.abort():c(e.destroy)?e.destroy():void u(t||new Error(\"stream was destroyed\"))}},l=function(e){e()},f=function(e,t){return e.pipe(t)};e.exports=function(){var e,t=Array.prototype.slice.call(arguments),n=c(t[t.length-1]||s)&&t.pop()||s;if(Array.isArray(t[0])&&(t=t[0]),t.length<2)throw new Error(\"pump requires two streams per minimum\");var r=t.map(function(o,i){var s=i<t.length-1;return u(o,s,i>0,function(t){e||(e=t),t&&r.forEach(l),s||(r.forEach(l),n(e))})});return t.reduce(f)}},function(e,t,n){var r=n(31),o=function(){},i=function(e,t,n){if(\"function\"==typeof t)return i(e,null,t);t||(t={}),n=r(n||o);var s=e._writableState,a=e._readableState,c=t.readable||!1!==t.readable&&e.readable,u=t.writable||!1!==t.writable&&e.writable,l=function(){e.writable||f()},f=function(){u=!1,c||n.call(e)},p=function(){c=!1,u||n.call(e)},h=function(t){n.call(e,t?new Error(\"exited with error code: \"+t):null)},d=function(t){n.call(e,t)},m=function(){return(!c||a&&a.ended)&&(!u||s&&s.ended)?void 0:n.call(e,new Error(\"premature close\"))},g=function(){e.req.on(\"finish\",f)};return!function(e){return e.setHeader&&\"function\"==typeof e.abort}(e)?u&&!s&&(e.on(\"end\",l),e.on(\"close\",l)):(e.on(\"complete\",f),e.on(\"abort\",m),e.req?g():e.on(\"request\",g)),function(e){return e.stdio&&Array.isArray(e.stdio)&&3===e.stdio.length}(e)&&e.on(\"exit\",h),e.on(\"end\",p),e.on(\"finish\",f),!1!==t.error&&e.on(\"error\",d),e.on(\"close\",m),function(){e.removeListener(\"complete\",f),e.removeListener(\"abort\",m),e.removeListener(\"request\",g),e.req&&e.req.removeListener(\"finish\",f),e.removeListener(\"end\",l),e.removeListener(\"close\",l),e.removeListener(\"finish\",f),e.removeListener(\"exit\",h),e.removeListener(\"end\",p),e.removeListener(\"error\",d),e.removeListener(\"close\",m)}};e.exports=i},function(e,t,n){\"use strict\";const{PassThrough:r}=n(153);e.exports=(e=>{e=Object.assign({},e);const{array:t}=e;let{encoding:n}=e;const o=\"buffer\"===n;let i=!1;t?i=!(n||o):n=n||\"utf8\",o&&(n=null);let s=0;const a=[],c=new r({objectMode:i});return n&&c.setEncoding(n),c.on(\"data\",e=>{a.push(e),i?s=a.length:s+=e.length}),c.getBufferedValue=(()=>t?a:o?Buffer.concat(a,s):a.join(\"\")),c.getBufferedLength=(()=>s),c})},function(e,t){e.exports=require(\"stream\")},function(e,t,n){\"use strict\";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}))))},function(e,t,n){var r,o=n(47),i=n(156),s=n(68);function a(){l&&(l=!1,i.forEach(function(e){try{process.removeListener(e,u[e])}catch(e){}}),process.emit=d,process.reallyExit=p,r.count-=1)}function c(e,t,n){r.emitted[e]||(r.emitted[e]=!0,r.emit(e,t,n))}\"function\"!=typeof s&&(s=s.EventEmitter),process.__signal_exit_emitter__?r=process.__signal_exit_emitter__:((r=process.__signal_exit_emitter__=new s).count=0,r.emitted={}),r.infinite||(r.setMaxListeners(1/0),r.infinite=!0),e.exports=function(e,t){o.equal(typeof e,\"function\",\"a callback must be provided for exit handler\"),!1===l&&f();var n=\"exit\";t&&t.alwaysLast&&(n=\"afterexit\");return r.on(n,e),function(){r.removeListener(n,e),0===r.listeners(\"exit\").length&&0===r.listeners(\"afterexit\").length&&a()}},e.exports.unload=a;var u={};i.forEach(function(e){u[e]=function(){process.listeners(e).length===r.count&&(a(),c(\"exit\",null,e),c(\"afterexit\",null,e),process.kill(process.pid,e))}}),e.exports.signals=function(){return i},e.exports.load=f;var l=!1;function f(){l||(l=!0,r.count+=1,i=i.filter(function(e){try{return process.on(e,u[e]),!0}catch(e){return!1}}),process.emit=m,process.reallyExit=h)}var p=process.reallyExit;function h(e){process.exitCode=e||0,c(\"exit\",process.exitCode,null),c(\"afterexit\",process.exitCode,null),p.call(process,process.exitCode)}var d=process.emit;function m(e,t){if(\"exit\"===e){void 0!==t&&(process.exitCode=t);var n=d.apply(this,arguments);return c(\"exit\",process.exitCode,null),c(\"afterexit\",process.exitCode,null),n}return d.apply(this,arguments)}},function(e,t){e.exports=[\"SIGABRT\",\"SIGALRM\",\"SIGHUP\",\"SIGINT\",\"SIGTERM\"],\"win32\"!==process.platform&&e.exports.push(\"SIGVTALRM\",\"SIGXCPU\",\"SIGXFSZ\",\"SIGUSR2\",\"SIGTRAP\",\"SIGSYS\",\"SIGQUIT\",\"SIGIOT\"),\"linux\"===process.platform&&e.exports.push(\"SIGIO\",\"SIGPOLL\",\"SIGPWR\",\"SIGSTKFLT\",\"SIGUNUSED\")},function(e,t,n){\"use strict\";const r=n(30);let o;if(\"function\"==typeof r.getSystemErrorName)e.exports=r.getSystemErrorName;else{try{if(\"function\"!=typeof(o=process.binding(\"uv\")).errname)throw new TypeError(\"uv.errname is not a function\")}catch(e){console.error(\"execa/lib/errname: unable to establish process.binding('uv')\",e),o=null}e.exports=(e=>i(o,e))}function i(e,t){if(e)return e.errname(t);if(!(t<0))throw new Error(\"err >= 0\");return`Unknown system error ${t}`}e.exports.__test__=i},function(e,t,n){\"use strict\";const r=[\"stdin\",\"stdout\",\"stderr\"];e.exports=(e=>{if(!e)return null;if(e.stdio&&(e=>r.some(t=>Boolean(e[t])))(e))throw new Error(`It's not possible to provide \\`stdio\\` in combination with one of ${r.map(e=>`\\`${e}\\``).join(\", \")}`);if(\"string\"==typeof e.stdio)return e.stdio;const t=e.stdio||[];if(!Array.isArray(t))throw new TypeError(`Expected \\`stdio\\` to be of type \\`string\\` or \\`Array\\`, got \\`${typeof t}\\``);const n=[],o=Math.max(t.length,r.length);for(let i=0;i<o;i++){let o=null;void 0!==t[i]?o=t[i]:void 0!==e[r[i]]&&(o=e[r[i]]),n[i]=o}return n})},function(e,t,n){\"use strict\";n(2);var r=n(1);e.exports={getBazelInfo:function(){return r.log(\"trace\",\"getBazelInfo\"),Promise.all([r.run(\"bazel --version\").then(r.findVersion),r.run(\"which bazel\")]).then(function(e){return r.determineFound(\"Bazel\",e[0],e[1])})},getCMakeInfo:function(){return r.log(\"trace\",\"getCMakeInfo\"),Promise.all([r.run(\"cmake --version\").then(r.findVersion),r.run(\"which cmake\")]).then(function(e){return r.determineFound(\"CMake\",e[0],e[1])})},getGCCInfo:function(){return r.log(\"trace\",\"getGCCInfo\"),r.isMacOS||r.isLinux?Promise.all([r.run(\"gcc -v 2>&1\").then(r.findVersion),r.run(\"which gcc\")]).then(function(e){return r.determineFound(\"GCC\",e[0],e[1])}):Promise.resolve([\"GCC\",\"N/A\"])},getClangInfo:function(){return r.log(\"trace\",\"getClangInfo\"),Promise.all([r.run(\"clang --version\").then(r.findVersion),r.which(\"clang\")]).then(function(e){return r.determineFound(\"Clang\",e[0],e[1])})},getGitInfo:function(){return r.log(\"trace\",\"getGitInfo\"),Promise.all([r.run(\"git --version\").then(r.findVersion),r.run(\"which git\")]).then(function(e){return r.determineFound(\"Git\",e[0],e[1])})},getMakeInfo:function(){return r.log(\"trace\",\"getMakeInfo\"),r.isMacOS||r.isLinux?Promise.all([r.run(\"make --version\").then(r.findVersion),r.run(\"which make\")]).then(function(e){return r.determineFound(\"Make\",e[0],e[1])}):Promise.resolve([\"Make\",\"N/A\"])},getNinjaInfo:function(){return r.log(\"trace\",\"getNinjaInfo\"),Promise.all([r.run(\"ninja --version\").then(r.findVersion),r.run(\"which ninja\")]).then(function(e){return r.determineFound(\"Ninja\",e[0],e[1])})},getMercurialInfo:function(){return r.log(\"trace\",\"getMercurialInfo\"),r.isMacOS||r.isLinux?Promise.all([r.run(\"hg --version\").then(r.findVersion),r.run(\"which hg\")]).then(function(e){return r.determineFound(\"Mercurial\",e[0],e[1])}):Promise.resolve([\"Mercurial\",\"N/A\"])},getSubversionInfo:function(){return r.log(\"trace\",\"getSubversionInfo\"),r.isMacOS||r.isLinux?Promise.all([r.run(\"svn --version\").then(r.findVersion),r.run(\"which svn\")]).then(function(e){return r.determineFound(\"Subversion\",e[0],e[1])}):Promise.resolve([\"Subversion\",\"N/A\"])},getFFmpegInfo:function(){return r.log(\"trace\",\"getFFmpegInfo\"),Promise.all([r.run(\"ffmpeg -version\").then(r.findVersion),r.which(\"ffmpeg\")]).then(function(e){return r.determineFound(\"FFmpeg\",e[0],e[1])})}}},function(e,t,n){\"use strict\";n(2);var r=n(1);e.exports={getDockerInfo:function(){return r.log(\"trace\",\"getDockerInfo\"),Promise.all([r.run(\"docker --version\").then(r.findVersion),r.which(\"docker\")]).then(function(e){return r.determineFound(\"Docker\",e[0],e[1])})},getParallelsInfo:function(){return r.log(\"trace\",\"getParallelsInfo\"),Promise.all([r.run(\"prlctl --version\").then(r.findVersion),r.which(\"prlctl\")]).then(function(e){return r.determineFound(\"Parallels\",e[0],e[1])})},getVirtualBoxInfo:function(){return r.log(\"trace\",\"getVirtualBoxInfo\"),Promise.all([r.run(\"vboxmanage --version\").then(r.findVersion),r.which(\"vboxmanage\")]).then(function(e){return r.determineFound(\"VirtualBox\",e[0],e[1])})},getVMwareFusionInfo:function(){return r.log(\"trace\",\"getVMwareFusionInfo\"),r.getDarwinApplicationVersion(\"com.vmware.fusion\").then(function(e){return r.determineFound(\"VMWare Fusion\",e,\"N/A\")})}}},function(e,t,n){\"use strict\";n(162),n(64),n(22),n(16),n(21),n(74);var r=n(163),o=n(1);function i(e,t){return o.log(\"trace\",\"clean\",e),Object.keys(e).reduce(function(n,r){return!t.showNotFound&&\"Not Found\"===e[r]||\"N/A\"===e[r]||void 0===e[r]||0===Object.keys(e[r]).length?n:o.isObject(e[r])?Object.values(e[r]).every(function(e){return\"N/A\"===e||!t.showNotFound&&\"Not Found\"===e})?n:Object.assign(n,{[r]:i(e[r],t)}):Object.assign(n,{[r]:e[r]})},{})}function s(e,t){o.log(\"trace\",\"formatHeaders\"),t||(t={type:\"underline\"});var n={underline:[\"\u001b[4m\",\"\u001b[0m\"]};return e.slice().split(\"\\n\").map(function(e){if(\":\"===e.slice(\"-1\")){var r=e.match(/^[\\s]*/g)[0];return`${r}${n[t.type][0]}${e.slice(r.length)}${n[t.type][1]}`}return e}).join(\"\\n\")}function a(e){return o.log(\"trace\",\"formatPackages\"),e.npmPackages?Object.assign(e,{npmPackages:Object.entries(e.npmPackages||{}).reduce(function(e,t){var n=t[0],r=t[1];if(\"Not Found\"===r)return Object.assign(e,{[n]:r});var o=r.wanted?`${r.wanted} =>`:\"\",i=Array.isArray(r.installed)?r.installed.join(\", \"):r.installed,s=r.duplicates?`(${r.duplicates.join(\", \")})`:\"\";return Object.assign(e,{[n]:`${o} ${i} ${s}`})},{})}):e}function c(e,t,n){return n||(n={emptyMessage:\"None\"}),Array.isArray(t)&&(t=t.length>0?t.join(\", \"):n.emptyMessage),{[e]:t}}function u(e){return o.log(\"trace\",\"serializeArrays\"),function e(t,n){return Object.entries(t).reduce(function(t,r){var i=r[0],s=r[1];return o.isObject(s)?Object.assign(t,{[i]:e(s,n)}):Object.assign(t,n(i,s))},{})}(e,c)}function l(e){return o.log(\"trace\",\"serializeVersionsAndPaths\"),Object.entries(e).reduce(function(e,t){return Object.assign(e,{[t[0]]:Object.entries(t[1]).reduce(function(e,t){var n=t[0],r=t[1];return r.version?Object.assign(e,{[n]:[r.version,r.path].filter(Boolean).join(\" - \")}):Object.assign(e,{[n]:[r][0]})},{})},{})},{})}function f(e){return r(e,{indent:\"  \",prefix:\"\\n\",postfix:\"\\n\"})}function p(e){return e.slice().split(\"\\n\").map(function(e){if(\"\"!==e){var t=\":\"===e.slice(\"-1\"),n=e.search(/\\S|$/);return t?`${\"#\".repeat(n/2+1)} `+e.slice(n):\" - \"+e.slice(n)}return\"\"}).join(\"\\n\")}function h(e,t){return t||(t={indent:\"  \"}),JSON.stringify(e,null,t.indent)}e.exports={json:function(e,t){return o.log(\"trace\",\"formatToJson\"),t||(t={}),e=o.pipe([function(){return i(e,t)},t.title?function(e){return{[t.title]:e}}:o.noop,h])(e),e=t.console?`\\n${e}\\n`:e},markdown:function(e,t){return o.log(\"trace\",\"formatToMarkdown\"),o.pipe([function(){return i(e,t)},a,u,l,f,p,t.title?function(e){return`\\n# ${t.title}${e}`}:o.noop])(e,t)},yaml:function(e,t){return o.log(\"trace\",\"formatToYaml\",t),o.pipe([function(){return i(e,t)},a,u,l,t.title?function(e){return{[t.title]:e}}:o.noop,f,t.console?s:o.noop])(e,t)}}},function(e,t,n){n(28)(\"search\",1,function(e,t,n){return[function(n){\"use strict\";var r=e(this),o=null==n?void 0:n[t];return void 0!==o?o.call(n,r):new RegExp(n)[t](String(r))},n]})},function(e,t,n){\"use strict\";var r=n(164),o=n(165),i=n(169),s=[\"object\",\"array\"];e.exports=function(e,t){var n=o(t),a=n.colors,c=n.prefix,u=n.postfix,l=n.dateToString,f=n.errorToString,p=n.indent,h=new Map;function d(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0;if(0===Object.keys(e).length)return\" {}\";var o=\"\\n\",a=i(t,p);return Object.keys(e).forEach(function(c){var u=e[c],l=r(u),f=i(n,\"  \"),p=-1!==s.indexOf(l)?\"\":\" \",h=v(u)?\" [Circular]\":g(l,u,t+1,n);o+=`${f}${a}${c}:${p}${h}\\n`}),o.substring(0,o.length-1)}function m(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0;if(0===e.length)return\" []\";var o=\"\\n\",s=i(t,p);return e.forEach(function(e){var a=r(e),c=i(n,\"  \"),u=v(e)?\"[Circular]\":g(a,e,t,n+1).toString().trimLeft();o+=`${c}${s}- ${u}\\n`}),o.substring(0,o.length-1)}function g(e,t,n,r){switch(e){case\"array\":return m(t,n,r);case\"object\":return d(t,n,r);case\"string\":return a.string(t);case\"symbol\":return a.symbol(t.toString());case\"number\":return a.number(t);case\"boolean\":return a.boolean(t);case\"null\":return a.null(\"null\");case\"undefined\":return a.undefined(\"undefined\");case\"date\":return a.date(l(t));case\"error\":return a.error(f(t));default:return t&&t.toString?t.toString():Object.prototype.toString.call(t)}}function v(e){return-1!==[\"object\",\"array\"].indexOf(r(e))&&(!!h.has(e)||(h.set(e),!1))}var y=\"\";return h.set(e),\"object\"===r(e)&&Object.keys(e).length>0?y=d(e):\"array\"===r(e)&&e.length>0&&(y=m(e)),0===y.length?\"\":`${c}${y.slice(1)}${u}`}},function(e,t,n){\"use strict\";e.exports=function(e){return Array.isArray(e)?\"array\":e instanceof Date?\"date\":e instanceof Error?\"error\":null===e?\"null\":\"object\"==typeof e&&\"[object Object]\"===Object.prototype.toString.call(e)?\"object\":typeof e}},function(e,t,n){\"use strict\";var r=n(166),o=n(167),i=n(168),s=\" \",a=\"\\n\",c=\"\";function u(e,t){return void 0===e?t:e}e.exports=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return{indent:u(e.indent,s),prefix:u(e.prefix,a),postfix:u(e.postfix,c),errorToString:e.errorToString||r,dateToString:e.dateToString||o,colors:Object.assign({},i,e.colors)}}},function(e,t,n){\"use strict\";e.exports=function(e){return Error.prototype.toString.call(e)}},function(e,t,n){\"use strict\";e.exports=function(e){return`new Date(${Date.prototype.toISOString.call(e)})`}},function(e,t,n){\"use strict\";function r(e){return e}e.exports={date:r,error:r,symbol:r,string:r,number:r,boolean:r,null:r,undefined:r}},function(e,t,n){\"use strict\";e.exports=function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"  \",n=\"\",r=0;r<e;r+=1)n+=t;return n}},function(e,t,n){\"use strict\";e.exports={defaults:{System:[\"OS\",\"CPU\",\"Memory\",\"Container\",\"Shell\"],Binaries:[\"Node\",\"Yarn\",\"npm\",\"Watchman\"],Managers:[\"Apt\",\"Cargo\",\"CocoaPods\",\"Composer\",\"Gradle\",\"Homebrew\",\"Maven\",\"pip2\",\"pip3\",\"RubyGems\",\"Yum\"],Utilities:[\"Bazel\",\"CMake\",\"Make\",\"GCC\",\"Git\",\"Clang\",\"Ninja\",\"Mercurial\",\"Subversion\",\"FFmpeg\"],Servers:[\"Apache\",\"Nginx\"],Virtualization:[\"Docker\",\"Parallels\",\"VirtualBox\",\"VMware Fusion\"],SDKs:[\"iOS SDK\",\"Android SDK\",\"Windows SDK\"],IDEs:[\"Android Studio\",\"Atom\",\"Emacs\",\"IntelliJ\",\"NVim\",\"Nano\",\"PhpStorm\",\"Sublime Text\",\"VSCode\",\"Visual Studio\",\"Vim\",\"WebStorm\",\"Xcode\"],Languages:[\"Bash\",\"Go\",\"Elixir\",\"Erlang\",\"Java\",\"Perl\",\"PHP\",\"Protoc\",\"Python\",\"Python3\",\"R\",\"Ruby\",\"Rust\",\"Scala\"],Databases:[\"MongoDB\",\"MySQL\",\"PostgreSQL\",\"SQLite\"],Browsers:[\"Brave Browser\",\"Chrome\",\"Chrome Canary\",\"Chromium\",\"Edge\",\"Firefox\",\"Firefox Developer Edition\",\"Firefox Nightly\",\"Internet Explorer\",\"Safari\",\"Safari Technology Preview\"],Monorepos:[\"Yarn Workspaces\",\"Lerna\"],npmPackages:null,npmGlobalPackages:null},jest:{System:[\"OS\",\"CPU\"],Binaries:[\"Node\",\"Yarn\",\"npm\"],npmPackages:[\"jest\"]},\"react-native\":{System:[\"OS\",\"CPU\"],Binaries:[\"Node\",\"Yarn\",\"npm\",\"Watchman\"],SDKs:[\"iOS SDK\",\"Android SDK\",\"Windows SDK\"],IDEs:[\"Android Studio\",\"Xcode\",\"Visual Studio\"],npmPackages:[\"react\",\"react-native\"],npmGlobalPackages:[\"react-native-cli\"]},nyc:{System:[\"OS\",\"CPU\",\"Memory\"],Binaries:[\"Node\",\"Yarn\",\"npm\"],npmPackages:\"/**/{*babel*,@babel/*/,*istanbul*,nyc,source-map-support,typescript,ts-node}\"},webpack:{System:[\"OS\",\"CPU\"],Binaries:[\"Node\",\"Yarn\",\"npm\"],npmPackages:\"*webpack*\",npmGlobalPackages:[\"webpack\",\"webpack-cli\"]},\"styled-components\":{System:[\"OS\",\"CPU\"],Binaries:[\"Node\",\"Yarn\",\"npm\"],Browsers:[\"Chrome\",\"Firefox\",\"Safari\"],npmPackages:\"*styled-components*\"},\"create-react-app\":{System:[\"OS\",\"CPU\"],Binaries:[\"Node\",\"npm\",\"Yarn\"],Browsers:[\"Chrome\",\"Edge\",\"Internet Explorer\",\"Firefox\",\"Safari\"],npmPackages:[\"react\",\"react-dom\",\"react-scripts\"],npmGlobalPackages:[\"create-react-app\"],options:{duplicates:!0,showNotFound:!0}},apollo:{System:[\"OS\"],Binaries:[\"Node\",\"npm\",\"Yarn\"],Browsers:[\"Chrome\",\"Edge\",\"Firefox\",\"Safari\"],npmPackages:\"{*apollo*,@apollo/*}\",npmGlobalPackages:\"{*apollo*,@apollo/*}\"},\"react-native-web\":{System:[\"OS\",\"CPU\"],Binaries:[\"Node\",\"npm\",\"Yarn\"],Browsers:[\"Chrome\",\"Edge\",\"Internet Explorer\",\"Firefox\",\"Safari\"],npmPackages:[\"react\",\"react-native-web\"],options:{showNotFound:!0}},babel:{System:[\"OS\"],Binaries:[\"Node\",\"npm\",\"Yarn\"],Monorepos:[\"Yarn Workspaces\",\"Lerna\"],npmPackages:\"{*babel*,@babel/*,eslint,webpack,create-react-app,react-native,lerna,jest}\"},playwright:{System:[\"OS\",\"Memory\",\"Container\"],Binaries:[\"Node\",\"Yarn\",\"npm\"],Languages:[\"Bash\"],npmPackages:\"playwright*\"}}}]);"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/ZW5jb2RldXJsQDEuMC4y",
    "content": "/README.md\u000f\u000f# encodeurl\n\n[![NPM Version][npm-image]][npm-url]\n[![NPM Downloads][downloads-image]][downloads-url]\n[![Node.js Version][node-version-image]][node-version-url]\n[![Build Status][travis-image]][travis-url]\n[![Test Coverage][coveralls-image]][coveralls-url]\n\nEncode a URL to a percent-encoded form, excluding already-encoded sequences\n\n## Installation\n\nThis is a [Node.js](https://nodejs.org/en/) module available through the\n[npm registry](https://www.npmjs.com/). Installation is done using the\n[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally):\n\n```sh\n$ npm install encodeurl\n```\n\n## API\n\n```js\nvar encodeUrl = require('encodeurl')\n```\n\n### encodeUrl(url)\n\nEncode a URL to a percent-encoded form, excluding already-encoded sequences.\n\nThis function will take an already-encoded URL and encode all the non-URL\ncode points (as UTF-8 byte sequences). This function will not encode the\n\"%\" character unless it is not part of a valid sequence (`%20` will be\nleft as-is, but `%foo` will be encoded as `%25foo`).\n\nThis encode is meant to be \"safe\" and does not throw errors. It will try as\nhard as it can to properly encode the given URL, including replacing any raw,\nunpaired surrogate pairs with the Unicode replacement character prior to\nencoding.\n\nThis function is _similar_ to the intrinsic function `encodeURI`, except it\nwill not encode the `%` character if that is part of a valid sequence, will\nnot encode `[` and `]` (for IPv6 hostnames) and will replace raw, unpaired\nsurrogate pairs with the Unicode replacement character (instead of throwing).\n\n## Examples\n\n### Encode a URL containing user-controled data\n\n```js\nvar encodeUrl = require('encodeurl')\nvar escapeHtml = require('escape-html')\n\nhttp.createServer(function onRequest (req, res) {\n  // get encoded form of inbound url\n  var url = encodeUrl(req.url)\n\n  // create html message\n  var body = '<p>Location ' + escapeHtml(url) + ' not found</p>'\n\n  // send a 404\n  res.statusCode = 404\n  res.setHeader('Content-Type', 'text/html; charset=UTF-8')\n  res.setHeader('Content-Length', String(Buffer.byteLength(body, 'utf-8')))\n  res.end(body, 'utf-8')\n})\n```\n\n### Encode a URL for use in a header field\n\n```js\nvar encodeUrl = require('encodeurl')\nvar escapeHtml = require('escape-html')\nvar url = require('url')\n\nhttp.createServer(function onRequest (req, res) {\n  // parse inbound url\n  var href = url.parse(req)\n\n  // set new host for redirect\n  href.host = 'localhost'\n  href.protocol = 'https:'\n  href.slashes = true\n\n  // create location header\n  var location = encodeUrl(url.format(href))\n\n  // create html message\n  var body = '<p>Redirecting to new site: ' + escapeHtml(location) + '</p>'\n\n  // send a 301\n  res.statusCode = 301\n  res.setHeader('Content-Type', 'text/html; charset=UTF-8')\n  res.setHeader('Content-Length', String(Buffer.byteLength(body, 'utf-8')))\n  res.setHeader('Location', location)\n  res.end(body, 'utf-8')\n})\n```\n\n## Testing\n\n```sh\n$ npm test\n$ npm run lint\n```\n\n## References\n\n- [RFC 3986: Uniform Resource Identifier (URI): Generic Syntax][rfc-3986]\n- [WHATWG URL Living Standard][whatwg-url]\n\n[rfc-3986]: https://tools.ietf.org/html/rfc3986\n[whatwg-url]: https://url.spec.whatwg.org/\n\n## License\n\n[MIT](LICENSE)\n\n[npm-image]: https://img.shields.io/npm/v/encodeurl.svg\n[npm-url]: https://npmjs.org/package/encodeurl\n[node-version-image]: https://img.shields.io/node/v/encodeurl.svg\n[node-version-url]: https://nodejs.org/en/download\n[travis-image]: https://img.shields.io/travis/pillarjs/encodeurl.svg\n[travis-url]: https://travis-ci.org/pillarjs/encodeurl\n[coveralls-image]: https://img.shields.io/coveralls/pillarjs/encodeurl.svg\n[coveralls-url]: https://coveralls.io/r/pillarjs/encodeurl?branch=master\n[downloads-image]: https://img.shields.io/npm/dm/encodeurl.svg\n[downloads-url]: https://npmjs.org/package/encodeurl\n/HISTORY.md1.0.2 / 2018-01-21\n==================\n\n  * Fix encoding `%` as last character\n\n1.0.1 / 2016-06-09\n==================\n\n  * Fix encoding unpaired surrogates at start/end of string\n\n1.0.0 / 2016-06-08\n==================\n\n  * Initial release\n/LICENSE\u0004A(The MIT License)\n\nCopyright (c) 2016 Douglas Christopher Wilson\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n/index.js\u00062/*!\n * encodeurl\n * Copyright(c) 2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = encodeUrl\n\n/**\n * RegExp to match non-URL code points, *after* encoding (i.e. not including \"%\")\n * and including invalid escape sequences.\n * @private\n */\n\nvar ENCODE_CHARS_REGEXP = /(?:[^\\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\n\n/**\n * RegExp to match unmatched surrogate pair.\n * @private\n */\n\nvar UNMATCHED_SURROGATE_PAIR_REGEXP = /(^|[^\\uD800-\\uDBFF])[\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF]([^\\uDC00-\\uDFFF]|$)/g\n\n/**\n * String to replace unmatched surrogate pair with.\n * @private\n */\n\nvar UNMATCHED_SURROGATE_PAIR_REPLACE = '$1\\uFFFD$2'\n\n/**\n * Encode a URL to a percent-encoded form, excluding already-encoded sequences.\n *\n * This function will take an already-encoded URL and encode all the non-URL\n * code points. This function will not encode the \"%\" character unless it is\n * not part of a valid sequence (`%20` will be left as-is, but `%foo` will\n * be encoded as `%25foo`).\n *\n * This encode is meant to be \"safe\" and does not throw errors. It will try as\n * hard as it can to properly encode the given URL, including replacing any raw,\n * unpaired surrogate pairs with the Unicode replacement character prior to\n * encoding.\n *\n * @param {string} url\n * @return {string}\n * @public\n */\n\nfunction encodeUrl (url) {\n  return String(url)\n    .replace(UNMATCHED_SURROGATE_PAIR_REGEXP, UNMATCHED_SURROGATE_PAIR_REPLACE)\n    .replace(ENCODE_CHARS_REGEXP, encodeURI)\n}\n/package.json\u0004C{\n  \"name\": \"encodeurl\",\n  \"description\": \"Encode a URL to a percent-encoded form, excluding already-encoded sequences\",\n  \"version\": \"1.0.2\",\n  \"contributors\": [\n    \"Douglas Christopher Wilson <doug@somethingdoug.com>\"\n  ],\n  \"license\": \"MIT\",\n  \"keywords\": [\n    \"encode\",\n    \"encodeurl\",\n    \"url\"\n  ],\n  \"repository\": \"pillarjs/encodeurl\",\n  \"devDependencies\": {\n    \"eslint\": \"3.19.0\",\n    \"eslint-config-standard\": \"10.2.1\",\n    \"eslint-plugin-import\": \"2.8.0\",\n    \"eslint-plugin-node\": \"5.2.1\",\n    \"eslint-plugin-promise\": \"3.6.0\",\n    \"eslint-plugin-standard\": \"3.0.1\",\n    \"istanbul\": \"0.4.5\",\n    \"mocha\": \"2.5.3\"\n  },\n  \"files\": [\n    \"LICENSE\",\n    \"HISTORY.md\",\n    \"README.md\",\n    \"index.js\"\n  ],\n  \"engines\": {\n    \"node\": \">= 0.8\"\n  },\n  \"scripts\": {\n    \"lint\": \"eslint .\",\n    \"test\": \"mocha --reporter spec --bail --check-leaks test/\",\n    \"test-cov\": \"istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/\",\n    \"test-travis\": \"istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/\"\n  }\n}\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/ZWUtZmlyc3RAMS4xLjE=",
    "content": "/README.md\n9# EE First\n\n[![NPM version][npm-image]][npm-url]\n[![Build status][travis-image]][travis-url]\n[![Test coverage][coveralls-image]][coveralls-url]\n[![License][license-image]][license-url]\n[![Downloads][downloads-image]][downloads-url]\n[![Gittip][gittip-image]][gittip-url]\n\nGet the first event in a set of event emitters and event pairs,\nthen clean up after itself.\n\n## Install\n\n```sh\n$ npm install ee-first\n```\n\n## API\n\n```js\nvar first = require('ee-first')\n```\n\n### first(arr, listener)\n\nInvoke `listener` on the first event from the list specified in `arr`. `arr` is\nan array of arrays, with each array in the format `[ee, ...event]`. `listener`\nwill be called only once, the first time any of the given events are emitted. If\n`error` is one of the listened events, then if that fires first, the `listener`\nwill be given the `err` argument.\n\nThe `listener` is invoked as `listener(err, ee, event, args)`, where `err` is the\nfirst argument emitted from an `error` event, if applicable; `ee` is the event\nemitter that fired; `event` is the string event name that fired; and `args` is an\narray of the arguments that were emitted on the event.\n\n```js\nvar ee1 = new EventEmitter()\nvar ee2 = new EventEmitter()\n\nfirst([\n  [ee1, 'close', 'end', 'error'],\n  [ee2, 'error']\n], function (err, ee, event, args) {\n  // listener invoked\n})\n```\n\n#### .cancel()\n\nThe group of listeners can be cancelled before being invoked and have all the event\nlisteners removed from the underlying event emitters.\n\n```js\nvar thunk = first([\n  [ee1, 'close', 'end', 'error'],\n  [ee2, 'error']\n], function (err, ee, event, args) {\n  // listener invoked\n})\n\n// cancel and clean up\nthunk.cancel()\n```\n\n[npm-image]: https://img.shields.io/npm/v/ee-first.svg?style=flat-square\n[npm-url]: https://npmjs.org/package/ee-first\n[github-tag]: http://img.shields.io/github/tag/jonathanong/ee-first.svg?style=flat-square\n[github-url]: https://github.com/jonathanong/ee-first/tags\n[travis-image]: https://img.shields.io/travis/jonathanong/ee-first.svg?style=flat-square\n[travis-url]: https://travis-ci.org/jonathanong/ee-first\n[coveralls-image]: https://img.shields.io/coveralls/jonathanong/ee-first.svg?style=flat-square\n[coveralls-url]: https://coveralls.io/r/jonathanong/ee-first?branch=master\n[license-image]: http://img.shields.io/npm/l/ee-first.svg?style=flat-square\n[license-url]: LICENSE.md\n[downloads-image]: http://img.shields.io/npm/dm/ee-first.svg?style=flat-square\n[downloads-url]: https://npmjs.org/package/ee-first\n[gittip-image]: https://img.shields.io/gittip/jonathanong.svg?style=flat-square\n[gittip-url]: https://www.gittip.com/jonathanong/\n/LICENSE\u0004K\nThe MIT License (MIT)\n\nCopyright (c) 2014 Jonathan Ong me@jongleberry.com\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n/package.json\u0003[{\n  \"name\": \"ee-first\",\n  \"description\": \"return the first event in a set of ee/event pairs\",\n  \"version\": \"1.1.1\",\n  \"author\": {\n    \"name\": \"Jonathan Ong\",\n    \"email\": \"me@jongleberry.com\",\n    \"url\": \"http://jongleberry.com\",\n    \"twitter\": \"https://twitter.com/jongleberry\"\n  },\n  \"contributors\": [\n    \"Douglas Christopher Wilson <doug@somethingdoug.com>\"\n  ],\n  \"license\": \"MIT\",\n  \"repository\": \"jonathanong/ee-first\",\n  \"devDependencies\": {\n    \"istanbul\": \"0.3.9\",\n    \"mocha\": \"2.2.5\"\n  },\n  \"files\": [\n    \"index.js\",\n    \"LICENSE\"\n  ],\n  \"scripts\": {\n    \"test\": \"mocha --reporter spec --bail --check-leaks test/\",\n    \"test-cov\": \"istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/\",\n    \"test-travis\": \"istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/\"\n  }\n}\n/index.js\u0006/*!\n * ee-first\n * Copyright(c) 2014 Jonathan Ong\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = first\n\n/**\n * Get the first event in a set of event emitters and event pairs.\n *\n * @param {array} stuff\n * @param {function} done\n * @public\n */\n\nfunction first(stuff, done) {\n  if (!Array.isArray(stuff))\n    throw new TypeError('arg must be an array of [ee, events...] arrays')\n\n  var cleanups = []\n\n  for (var i = 0; i < stuff.length; i++) {\n    var arr = stuff[i]\n\n    if (!Array.isArray(arr) || arr.length < 2)\n      throw new TypeError('each array member must be [ee, events...]')\n\n    var ee = arr[0]\n\n    for (var j = 1; j < arr.length; j++) {\n      var event = arr[j]\n      var fn = listener(event, callback)\n\n      // listen to the event\n      ee.on(event, fn)\n      // push this listener to the list of cleanups\n      cleanups.push({\n        ee: ee,\n        event: event,\n        fn: fn,\n      })\n    }\n  }\n\n  function callback() {\n    cleanup()\n    done.apply(null, arguments)\n  }\n\n  function cleanup() {\n    var x\n    for (var i = 0; i < cleanups.length; i++) {\n      x = cleanups[i]\n      x.ee.removeListener(x.event, x.fn)\n    }\n  }\n\n  function thunk(fn) {\n    done = fn\n  }\n\n  thunk.cancel = cleanup\n\n  return thunk\n}\n\n/**\n * Create the event listener.\n * @private\n */\n\nfunction listener(event, done) {\n  return function onevent(arg1) {\n    var args = new Array(arguments.length)\n    var ee = this\n    var err = event === 'error'\n      ? arg1\n      : null\n\n    // copy args to prevent arguments escaping scope\n    for (var i = 0; i < args.length; i++) {\n      args[i] = arguments[i]\n    }\n\n    done(err, ee, event, args)\n  }\n}\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/ZWxlY3Ryb24tdG8tY2hyb21pdW1AMS40LjMzMw==",
    "content": "/full-versions.json{\"0.20.0\":\"39.0.2171.65\",\"0.20.1\":\"39.0.2171.65\",\"0.20.2\":\"39.0.2171.65\",\"0.20.3\":\"39.0.2171.65\",\"0.20.4\":\"39.0.2171.65\",\"0.20.5\":\"39.0.2171.65\",\"0.20.6\":\"39.0.2171.65\",\"0.20.7\":\"39.0.2171.65\",\"0.20.8\":\"39.0.2171.65\",\"0.21.0\":\"40.0.2214.91\",\"0.21.1\":\"40.0.2214.91\",\"0.21.2\":\"40.0.2214.91\",\"0.21.3\":\"41.0.2272.76\",\"0.22.1\":\"41.0.2272.76\",\"0.22.2\":\"41.0.2272.76\",\"0.22.3\":\"41.0.2272.76\",\"0.23.0\":\"41.0.2272.76\",\"0.24.0\":\"41.0.2272.76\",\"0.25.0\":\"42.0.2311.107\",\"0.25.1\":\"42.0.2311.107\",\"0.25.2\":\"42.0.2311.107\",\"0.25.3\":\"42.0.2311.107\",\"0.26.0\":\"42.0.2311.107\",\"0.26.1\":\"42.0.2311.107\",\"0.27.0\":\"42.0.2311.107\",\"0.27.1\":\"42.0.2311.107\",\"0.27.2\":\"43.0.2357.65\",\"0.27.3\":\"43.0.2357.65\",\"0.28.0\":\"43.0.2357.65\",\"0.28.1\":\"43.0.2357.65\",\"0.28.2\":\"43.0.2357.65\",\"0.28.3\":\"43.0.2357.65\",\"0.29.1\":\"43.0.2357.65\",\"0.29.2\":\"43.0.2357.65\",\"0.30.4\":\"44.0.2403.125\",\"0.31.0\":\"44.0.2403.125\",\"0.31.2\":\"45.0.2454.85\",\"0.32.2\":\"45.0.2454.85\",\"0.32.3\":\"45.0.2454.85\",\"0.33.0\":\"45.0.2454.85\",\"0.33.1\":\"45.0.2454.85\",\"0.33.2\":\"45.0.2454.85\",\"0.33.3\":\"45.0.2454.85\",\"0.33.4\":\"45.0.2454.85\",\"0.33.6\":\"45.0.2454.85\",\"0.33.7\":\"45.0.2454.85\",\"0.33.8\":\"45.0.2454.85\",\"0.33.9\":\"45.0.2454.85\",\"0.34.0\":\"45.0.2454.85\",\"0.34.1\":\"45.0.2454.85\",\"0.34.2\":\"45.0.2454.85\",\"0.34.3\":\"45.0.2454.85\",\"0.34.4\":\"45.0.2454.85\",\"0.35.1\":\"45.0.2454.85\",\"0.35.2\":\"45.0.2454.85\",\"0.35.3\":\"45.0.2454.85\",\"0.35.4\":\"45.0.2454.85\",\"0.35.5\":\"45.0.2454.85\",\"0.36.0\":\"47.0.2526.73\",\"0.36.2\":\"47.0.2526.73\",\"0.36.3\":\"47.0.2526.73\",\"0.36.4\":\"47.0.2526.73\",\"0.36.5\":\"47.0.2526.110\",\"0.36.6\":\"47.0.2526.110\",\"0.36.7\":\"47.0.2526.110\",\"0.36.8\":\"47.0.2526.110\",\"0.36.9\":\"47.0.2526.110\",\"0.36.10\":\"47.0.2526.110\",\"0.36.11\":\"47.0.2526.110\",\"0.36.12\":\"47.0.2526.110\",\"0.37.0\":\"49.0.2623.75\",\"0.37.1\":\"49.0.2623.75\",\"0.37.3\":\"49.0.2623.75\",\"0.37.4\":\"49.0.2623.75\",\"0.37.5\":\"49.0.2623.75\",\"0.37.6\":\"49.0.2623.75\",\"0.37.7\":\"49.0.2623.75\",\"0.37.8\":\"49.0.2623.75\",\"1.0.0\":\"49.0.2623.75\",\"1.0.1\":\"49.0.2623.75\",\"1.0.2\":\"49.0.2623.75\",\"1.1.0\":\"50.0.2661.102\",\"1.1.1\":\"50.0.2661.102\",\"1.1.2\":\"50.0.2661.102\",\"1.1.3\":\"50.0.2661.102\",\"1.2.0\":\"51.0.2704.63\",\"1.2.1\":\"51.0.2704.63\",\"1.2.2\":\"51.0.2704.84\",\"1.2.3\":\"51.0.2704.84\",\"1.2.4\":\"51.0.2704.103\",\"1.2.5\":\"51.0.2704.103\",\"1.2.6\":\"51.0.2704.106\",\"1.2.7\":\"51.0.2704.106\",\"1.2.8\":\"51.0.2704.106\",\"1.3.0\":\"52.0.2743.82\",\"1.3.1\":\"52.0.2743.82\",\"1.3.2\":\"52.0.2743.82\",\"1.3.3\":\"52.0.2743.82\",\"1.3.4\":\"52.0.2743.82\",\"1.3.5\":\"52.0.2743.82\",\"1.3.6\":\"52.0.2743.82\",\"1.3.7\":\"52.0.2743.82\",\"1.3.9\":\"52.0.2743.82\",\"1.3.10\":\"52.0.2743.82\",\"1.3.13\":\"52.0.2743.82\",\"1.3.14\":\"52.0.2743.82\",\"1.3.15\":\"52.0.2743.82\",\"1.4.0\":\"53.0.2785.113\",\"1.4.1\":\"53.0.2785.113\",\"1.4.2\":\"53.0.2785.113\",\"1.4.3\":\"53.0.2785.113\",\"1.4.4\":\"53.0.2785.113\",\"1.4.5\":\"53.0.2785.113\",\"1.4.6\":\"53.0.2785.143\",\"1.4.7\":\"53.0.2785.143\",\"1.4.8\":\"53.0.2785.143\",\"1.4.10\":\"53.0.2785.143\",\"1.4.11\":\"53.0.2785.143\",\"1.4.12\":\"54.0.2840.51\",\"1.4.13\":\"53.0.2785.143\",\"1.4.14\":\"53.0.2785.143\",\"1.4.15\":\"53.0.2785.143\",\"1.4.16\":\"53.0.2785.143\",\"1.5.0\":\"54.0.2840.101\",\"1.5.1\":\"54.0.2840.101\",\"1.6.0\":\"56.0.2924.87\",\"1.6.1\":\"56.0.2924.87\",\"1.6.2\":\"56.0.2924.87\",\"1.6.3\":\"56.0.2924.87\",\"1.6.4\":\"56.0.2924.87\",\"1.6.5\":\"56.0.2924.87\",\"1.6.6\":\"56.0.2924.87\",\"1.6.7\":\"56.0.2924.87\",\"1.6.8\":\"56.0.2924.87\",\"1.6.9\":\"56.0.2924.87\",\"1.6.10\":\"56.0.2924.87\",\"1.6.11\":\"56.0.2924.87\",\"1.6.12\":\"56.0.2924.87\",\"1.6.13\":\"56.0.2924.87\",\"1.6.14\":\"56.0.2924.87\",\"1.6.15\":\"56.0.2924.87\",\"1.6.16\":\"56.0.2924.87\",\"1.6.17\":\"56.0.2924.87\",\"1.6.18\":\"56.0.2924.87\",\"1.7.0\":\"58.0.3029.110\",\"1.7.1\":\"58.0.3029.110\",\"1.7.2\":\"58.0.3029.110\",\"1.7.3\":\"58.0.3029.110\",\"1.7.4\":\"58.0.3029.110\",\"1.7.5\":\"58.0.3029.110\",\"1.7.6\":\"58.0.3029.110\",\"1.7.7\":\"58.0.3029.110\",\"1.7.8\":\"58.0.3029.110\",\"1.7.9\":\"58.0.3029.110\",\"1.7.10\":\"58.0.3029.110\",\"1.7.11\":\"58.0.3029.110\",\"1.7.12\":\"58.0.3029.110\",\"1.7.13\":\"58.0.3029.110\",\"1.7.14\":\"58.0.3029.110\",\"1.7.15\":\"58.0.3029.110\",\"1.7.16\":\"58.0.3029.110\",\"1.8.0\":\"59.0.3071.115\",\"1.8.1\":\"59.0.3071.115\",\"1.8.2-beta.1\":\"59.0.3071.115\",\"1.8.2-beta.2\":\"59.0.3071.115\",\"1.8.2-beta.3\":\"59.0.3071.115\",\"1.8.2-beta.4\":\"59.0.3071.115\",\"1.8.2-beta.5\":\"59.0.3071.115\",\"1.8.2\":\"59.0.3071.115\",\"1.8.3\":\"59.0.3071.115\",\"1.8.4\":\"59.0.3071.115\",\"1.8.5\":\"59.0.3071.115\",\"1.8.6\":\"59.0.3071.115\",\"1.8.7\":\"59.0.3071.115\",\"1.8.8\":\"59.0.3071.115\",\"2.0.0-beta.1\":\"61.0.3163.100\",\"2.0.0-beta.2\":\"61.0.3163.100\",\"2.0.0-beta.3\":\"61.0.3163.100\",\"2.0.0-beta.4\":\"61.0.3163.100\",\"2.0.0-beta.5\":\"61.0.3163.100\",\"2.0.0-beta.6\":\"61.0.3163.100\",\"2.0.0-beta.7\":\"61.0.3163.100\",\"2.0.0-beta.8\":\"61.0.3163.100\",\"2.0.0\":\"61.0.3163.100\",\"2.0.1\":\"61.0.3163.100\",\"2.0.2\":\"61.0.3163.100\",\"2.0.3\":\"61.0.3163.100\",\"2.0.4\":\"61.0.3163.100\",\"2.0.5\":\"61.0.3163.100\",\"2.0.6\":\"61.0.3163.100\",\"2.0.7\":\"61.0.3163.100\",\"2.0.8-nightly.20180819\":\"61.0.3163.100\",\"2.0.8-nightly.20180820\":\"61.0.3163.100\",\"2.0.8\":\"61.0.3163.100\",\"2.0.9\":\"61.0.3163.100\",\"2.0.10\":\"61.0.3163.100\",\"2.0.11\":\"61.0.3163.100\",\"2.0.12\":\"61.0.3163.100\",\"2.0.13\":\"61.0.3163.100\",\"2.0.14\":\"61.0.3163.100\",\"2.0.15\":\"61.0.3163.100\",\"2.0.16\":\"61.0.3163.100\",\"2.0.17\":\"61.0.3163.100\",\"2.0.18\":\"61.0.3163.100\",\"2.1.0-unsupported.20180809\":\"61.0.3163.100\",\"3.0.0-beta.1\":\"66.0.3359.181\",\"3.0.0-beta.2\":\"66.0.3359.181\",\"3.0.0-beta.3\":\"66.0.3359.181\",\"3.0.0-beta.4\":\"66.0.3359.181\",\"3.0.0-beta.5\":\"66.0.3359.181\",\"3.0.0-beta.6\":\"66.0.3359.181\",\"3.0.0-beta.7\":\"66.0.3359.181\",\"3.0.0-beta.8\":\"66.0.3359.181\",\"3.0.0-beta.9\":\"66.0.3359.181\",\"3.0.0-beta.10\":\"66.0.3359.181\",\"3.0.0-beta.11\":\"66.0.3359.181\",\"3.0.0-beta.12\":\"66.0.3359.181\",\"3.0.0-beta.13\":\"66.0.3359.181\",\"3.0.0-nightly.20180818\":\"66.0.3359.181\",\"3.0.0-nightly.20180821\":\"66.0.3359.181\",\"3.0.0-nightly.20180823\":\"66.0.3359.181\",\"3.0.0-nightly.20180904\":\"66.0.3359.181\",\"3.0.0\":\"66.0.3359.181\",\"3.0.1\":\"66.0.3359.181\",\"3.0.2\":\"66.0.3359.181\",\"3.0.3\":\"66.0.3359.181\",\"3.0.4\":\"66.0.3359.181\",\"3.0.5\":\"66.0.3359.181\",\"3.0.6\":\"66.0.3359.181\",\"3.0.7\":\"66.0.3359.181\",\"3.0.8\":\"66.0.3359.181\",\"3.0.9\":\"66.0.3359.181\",\"3.0.10\":\"66.0.3359.181\",\"3.0.11\":\"66.0.3359.181\",\"3.0.12\":\"66.0.3359.181\",\"3.0.13\":\"66.0.3359.181\",\"3.0.14\":\"66.0.3359.181\",\"3.0.15\":\"66.0.3359.181\",\"3.0.16\":\"66.0.3359.181\",\"3.1.0-beta.1\":\"66.0.3359.181\",\"3.1.0-beta.2\":\"66.0.3359.181\",\"3.1.0-beta.3\":\"66.0.3359.181\",\"3.1.0-beta.4\":\"66.0.3359.181\",\"3.1.0-beta.5\":\"66.0.3359.181\",\"3.1.0\":\"66.0.3359.181\",\"3.1.1\":\"66.0.3359.181\",\"3.1.2\":\"66.0.3359.181\",\"3.1.3\":\"66.0.3359.181\",\"3.1.4\":\"66.0.3359.181\",\"3.1.5\":\"66.0.3359.181\",\"3.1.6\":\"66.0.3359.181\",\"3.1.7\":\"66.0.3359.181\",\"3.1.8\":\"66.0.3359.181\",\"3.1.9\":\"66.0.3359.181\",\"3.1.10\":\"66.0.3359.181\",\"3.1.11\":\"66.0.3359.181\",\"3.1.12\":\"66.0.3359.181\",\"3.1.13\":\"66.0.3359.181\",\"4.0.0-beta.1\":\"69.0.3497.106\",\"4.0.0-beta.2\":\"69.0.3497.106\",\"4.0.0-beta.3\":\"69.0.3497.106\",\"4.0.0-beta.4\":\"69.0.3497.106\",\"4.0.0-beta.5\":\"69.0.3497.106\",\"4.0.0-beta.6\":\"69.0.3497.106\",\"4.0.0-beta.7\":\"69.0.3497.106\",\"4.0.0-beta.8\":\"69.0.3497.106\",\"4.0.0-beta.9\":\"69.0.3497.106\",\"4.0.0-beta.10\":\"69.0.3497.106\",\"4.0.0-beta.11\":\"69.0.3497.106\",\"4.0.0-nightly.20180817\":\"66.0.3359.181\",\"4.0.0-nightly.20180819\":\"66.0.3359.181\",\"4.0.0-nightly.20180821\":\"66.0.3359.181\",\"4.0.0-nightly.20180929\":\"67.0.3396.99\",\"4.0.0-nightly.20181006\":\"68.0.3440.128\",\"4.0.0-nightly.20181010\":\"69.0.3497.106\",\"4.0.0\":\"69.0.3497.106\",\"4.0.1\":\"69.0.3497.106\",\"4.0.2\":\"69.0.3497.106\",\"4.0.3\":\"69.0.3497.106\",\"4.0.4\":\"69.0.3497.106\",\"4.0.5\":\"69.0.3497.106\",\"4.0.6\":\"69.0.3497.106\",\"4.0.7\":\"69.0.3497.128\",\"4.0.8\":\"69.0.3497.128\",\"4.1.0\":\"69.0.3497.128\",\"4.1.1\":\"69.0.3497.128\",\"4.1.2\":\"69.0.3497.128\",\"4.1.3\":\"69.0.3497.128\",\"4.1.4\":\"69.0.3497.128\",\"4.1.5\":\"69.0.3497.128\",\"4.2.0\":\"69.0.3497.128\",\"4.2.1\":\"69.0.3497.128\",\"4.2.2\":\"69.0.3497.128\",\"4.2.3\":\"69.0.3497.128\",\"4.2.4\":\"69.0.3497.128\",\"4.2.5\":\"69.0.3497.128\",\"4.2.6\":\"69.0.3497.128\",\"4.2.7\":\"69.0.3497.128\",\"4.2.8\":\"69.0.3497.128\",\"4.2.9\":\"69.0.3497.128\",\"4.2.10\":\"69.0.3497.128\",\"4.2.11\":\"69.0.3497.128\",\"4.2.12\":\"69.0.3497.128\",\"5.0.0-beta.1\":\"72.0.3626.52\",\"5.0.0-beta.2\":\"72.0.3626.52\",\"5.0.0-beta.3\":\"73.0.3683.27\",\"5.0.0-beta.4\":\"73.0.3683.54\",\"5.0.0-beta.5\":\"73.0.3683.61\",\"5.0.0-beta.6\":\"73.0.3683.84\",\"5.0.0-beta.7\":\"73.0.3683.94\",\"5.0.0-beta.8\":\"73.0.3683.104\",\"5.0.0-beta.9\":\"73.0.3683.117\",\"5.0.0-nightly.20190107\":\"70.0.3538.110\",\"5.0.0-nightly.20190121\":\"71.0.3578.98\",\"5.0.0-nightly.20190122\":\"71.0.3578.98\",\"5.0.0\":\"73.0.3683.119\",\"5.0.1\":\"73.0.3683.121\",\"5.0.2\":\"73.0.3683.121\",\"5.0.3\":\"73.0.3683.121\",\"5.0.4\":\"73.0.3683.121\",\"5.0.5\":\"73.0.3683.121\",\"5.0.6\":\"73.0.3683.121\",\"5.0.7\":\"73.0.3683.121\",\"5.0.8\":\"73.0.3683.121\",\"5.0.9\":\"73.0.3683.121\",\"5.0.10\":\"73.0.3683.121\",\"5.0.11\":\"73.0.3683.121\",\"5.0.12\":\"73.0.3683.121\",\"5.0.13\":\"73.0.3683.121\",\"6.0.0-beta.1\":\"76.0.3774.1\",\"6.0.0-beta.2\":\"76.0.3783.1\",\"6.0.0-beta.3\":\"76.0.3783.1\",\"6.0.0-beta.4\":\"76.0.3783.1\",\"6.0.0-beta.5\":\"76.0.3805.4\",\"6.0.0-beta.6\":\"76.0.3809.3\",\"6.0.0-beta.7\":\"76.0.3809.22\",\"6.0.0-beta.8\":\"76.0.3809.26\",\"6.0.0-beta.9\":\"76.0.3809.26\",\"6.0.0-beta.10\":\"76.0.3809.37\",\"6.0.0-beta.11\":\"76.0.3809.42\",\"6.0.0-beta.12\":\"76.0.3809.54\",\"6.0.0-beta.13\":\"76.0.3809.60\",\"6.0.0-beta.14\":\"76.0.3809.68\",\"6.0.0-beta.15\":\"76.0.3809.74\",\"6.0.0-nightly.20190123\":\"72.0.3626.52\",\"6.0.0-nightly.20190212\":\"72.0.3626.107\",\"6.0.0-nightly.20190213\":\"72.0.3626.110\",\"6.0.0-nightly.20190311\":\"74.0.3724.8\",\"6.0.0\":\"76.0.3809.88\",\"6.0.1\":\"76.0.3809.102\",\"6.0.2\":\"76.0.3809.110\",\"6.0.3\":\"76.0.3809.126\",\"6.0.4\":\"76.0.3809.131\",\"6.0.5\":\"76.0.3809.136\",\"6.0.6\":\"76.0.3809.138\",\"6.0.7\":\"76.0.3809.139\",\"6.0.8\":\"76.0.3809.146\",\"6.0.9\":\"76.0.3809.146\",\"6.0.10\":\"76.0.3809.146\",\"6.0.11\":\"76.0.3809.146\",\"6.0.12\":\"76.0.3809.146\",\"6.1.0\":\"76.0.3809.146\",\"6.1.1\":\"76.0.3809.146\",\"6.1.2\":\"76.0.3809.146\",\"6.1.3\":\"76.0.3809.146\",\"6.1.4\":\"76.0.3809.146\",\"6.1.5\":\"76.0.3809.146\",\"6.1.6\":\"76.0.3809.146\",\"6.1.7\":\"76.0.3809.146\",\"6.1.8\":\"76.0.3809.146\",\"6.1.9\":\"76.0.3809.146\",\"6.1.10\":\"76.0.3809.146\",\"6.1.11\":\"76.0.3809.146\",\"6.1.12\":\"76.0.3809.146\",\"7.0.0-beta.1\":\"78.0.3866.0\",\"7.0.0-beta.2\":\"78.0.3866.0\",\"7.0.0-beta.3\":\"78.0.3866.0\",\"7.0.0-beta.4\":\"78.0.3896.6\",\"7.0.0-beta.5\":\"78.0.3905.1\",\"7.0.0-beta.6\":\"78.0.3905.1\",\"7.0.0-beta.7\":\"78.0.3905.1\",\"7.0.0-nightly.20190521\":\"76.0.3784.0\",\"7.0.0-nightly.20190529\":\"76.0.3806.0\",\"7.0.0-nightly.20190530\":\"76.0.3806.0\",\"7.0.0-nightly.20190531\":\"76.0.3806.0\",\"7.0.0-nightly.20190602\":\"76.0.3806.0\",\"7.0.0-nightly.20190603\":\"76.0.3806.0\",\"7.0.0-nightly.20190604\":\"77.0.3814.0\",\"7.0.0-nightly.20190605\":\"77.0.3815.0\",\"7.0.0-nightly.20190606\":\"77.0.3815.0\",\"7.0.0-nightly.20190607\":\"77.0.3815.0\",\"7.0.0-nightly.20190608\":\"77.0.3815.0\",\"7.0.0-nightly.20190609\":\"77.0.3815.0\",\"7.0.0-nightly.20190611\":\"77.0.3815.0\",\"7.0.0-nightly.20190612\":\"77.0.3815.0\",\"7.0.0-nightly.20190613\":\"77.0.3815.0\",\"7.0.0-nightly.20190615\":\"77.0.3815.0\",\"7.0.0-nightly.20190616\":\"77.0.3815.0\",\"7.0.0-nightly.20190618\":\"77.0.3815.0\",\"7.0.0-nightly.20190619\":\"77.0.3815.0\",\"7.0.0-nightly.20190622\":\"77.0.3815.0\",\"7.0.0-nightly.20190623\":\"77.0.3815.0\",\"7.0.0-nightly.20190624\":\"77.0.3815.0\",\"7.0.0-nightly.20190627\":\"77.0.3815.0\",\"7.0.0-nightly.20190629\":\"77.0.3815.0\",\"7.0.0-nightly.20190630\":\"77.0.3815.0\",\"7.0.0-nightly.20190701\":\"77.0.3815.0\",\"7.0.0-nightly.20190702\":\"77.0.3815.0\",\"7.0.0-nightly.20190704\":\"77.0.3843.0\",\"7.0.0-nightly.20190705\":\"77.0.3843.0\",\"7.0.0-nightly.20190719\":\"77.0.3848.0\",\"7.0.0-nightly.20190720\":\"77.0.3848.0\",\"7.0.0-nightly.20190721\":\"77.0.3848.0\",\"7.0.0-nightly.20190726\":\"77.0.3864.0\",\"7.0.0-nightly.20190727\":\"78.0.3866.0\",\"7.0.0-nightly.20190728\":\"78.0.3866.0\",\"7.0.0-nightly.20190729\":\"78.0.3866.0\",\"7.0.0-nightly.20190730\":\"78.0.3866.0\",\"7.0.0-nightly.20190731\":\"78.0.3866.0\",\"7.0.0\":\"78.0.3905.1\",\"7.0.1\":\"78.0.3904.92\",\"7.1.0\":\"78.0.3904.94\",\"7.1.1\":\"78.0.3904.99\",\"7.1.2\":\"78.0.3904.113\",\"7.1.3\":\"78.0.3904.126\",\"7.1.4\":\"78.0.3904.130\",\"7.1.5\":\"78.0.3904.130\",\"7.1.6\":\"78.0.3904.130\",\"7.1.7\":\"78.0.3904.130\",\"7.1.8\":\"78.0.3904.130\",\"7.1.9\":\"78.0.3904.130\",\"7.1.10\":\"78.0.3904.130\",\"7.1.11\":\"78.0.3904.130\",\"7.1.12\":\"78.0.3904.130\",\"7.1.13\":\"78.0.3904.130\",\"7.1.14\":\"78.0.3904.130\",\"7.2.0\":\"78.0.3904.130\",\"7.2.1\":\"78.0.3904.130\",\"7.2.2\":\"78.0.3904.130\",\"7.2.3\":\"78.0.3904.130\",\"7.2.4\":\"78.0.3904.130\",\"7.3.0\":\"78.0.3904.130\",\"7.3.1\":\"78.0.3904.130\",\"7.3.2\":\"78.0.3904.130\",\"7.3.3\":\"78.0.3904.130\",\"8.0.0-beta.1\":\"79.0.3931.0\",\"8.0.0-beta.2\":\"79.0.3931.0\",\"8.0.0-beta.3\":\"80.0.3955.0\",\"8.0.0-beta.4\":\"80.0.3955.0\",\"8.0.0-beta.5\":\"80.0.3987.14\",\"8.0.0-beta.6\":\"80.0.3987.51\",\"8.0.0-beta.7\":\"80.0.3987.59\",\"8.0.0-beta.8\":\"80.0.3987.75\",\"8.0.0-beta.9\":\"80.0.3987.75\",\"8.0.0-nightly.20190801\":\"78.0.3866.0\",\"8.0.0-nightly.20190802\":\"78.0.3866.0\",\"8.0.0-nightly.20190803\":\"78.0.3871.0\",\"8.0.0-nightly.20190806\":\"78.0.3871.0\",\"8.0.0-nightly.20190807\":\"78.0.3871.0\",\"8.0.0-nightly.20190808\":\"78.0.3871.0\",\"8.0.0-nightly.20190809\":\"78.0.3871.0\",\"8.0.0-nightly.20190810\":\"78.0.3871.0\",\"8.0.0-nightly.20190811\":\"78.0.3871.0\",\"8.0.0-nightly.20190812\":\"78.0.3871.0\",\"8.0.0-nightly.20190813\":\"78.0.3871.0\",\"8.0.0-nightly.20190814\":\"78.0.3871.0\",\"8.0.0-nightly.20190815\":\"78.0.3871.0\",\"8.0.0-nightly.20190816\":\"78.0.3881.0\",\"8.0.0-nightly.20190817\":\"78.0.3881.0\",\"8.0.0-nightly.20190818\":\"78.0.3881.0\",\"8.0.0-nightly.20190819\":\"78.0.3881.0\",\"8.0.0-nightly.20190820\":\"78.0.3881.0\",\"8.0.0-nightly.20190824\":\"78.0.3892.0\",\"8.0.0-nightly.20190825\":\"78.0.3892.0\",\"8.0.0-nightly.20190827\":\"78.0.3892.0\",\"8.0.0-nightly.20190828\":\"78.0.3892.0\",\"8.0.0-nightly.20190830\":\"78.0.3892.0\",\"8.0.0-nightly.20190901\":\"78.0.3892.0\",\"8.0.0-nightly.20190902\":\"78.0.3892.0\",\"8.0.0-nightly.20190907\":\"78.0.3892.0\",\"8.0.0-nightly.20190909\":\"78.0.3892.0\",\"8.0.0-nightly.20190910\":\"78.0.3892.0\",\"8.0.0-nightly.20190911\":\"78.0.3892.0\",\"8.0.0-nightly.20190912\":\"78.0.3892.0\",\"8.0.0-nightly.20190913\":\"78.0.3892.0\",\"8.0.0-nightly.20190914\":\"78.0.3892.0\",\"8.0.0-nightly.20190915\":\"78.0.3892.0\",\"8.0.0-nightly.20190917\":\"78.0.3892.0\",\"8.0.0-nightly.20190919\":\"79.0.3915.0\",\"8.0.0-nightly.20190920\":\"79.0.3915.0\",\"8.0.0-nightly.20190922\":\"79.0.3919.0\",\"8.0.0-nightly.20190923\":\"79.0.3919.0\",\"8.0.0-nightly.20190924\":\"79.0.3919.0\",\"8.0.0-nightly.20190926\":\"79.0.3919.0\",\"8.0.0-nightly.20190928\":\"79.0.3919.0\",\"8.0.0-nightly.20190929\":\"79.0.3919.0\",\"8.0.0-nightly.20190930\":\"79.0.3919.0\",\"8.0.0-nightly.20191001\":\"79.0.3919.0\",\"8.0.0-nightly.20191004\":\"79.0.3919.0\",\"8.0.0-nightly.20191005\":\"79.0.3919.0\",\"8.0.0-nightly.20191006\":\"79.0.3919.0\",\"8.0.0-nightly.20191009\":\"79.0.3919.0\",\"8.0.0-nightly.20191011\":\"79.0.3919.0\",\"8.0.0-nightly.20191012\":\"79.0.3919.0\",\"8.0.0-nightly.20191017\":\"79.0.3919.0\",\"8.0.0-nightly.20191019\":\"79.0.3931.0\",\"8.0.0-nightly.20191020\":\"79.0.3931.0\",\"8.0.0-nightly.20191021\":\"79.0.3931.0\",\"8.0.0-nightly.20191023\":\"79.0.3931.0\",\"8.0.0-nightly.20191101\":\"80.0.3952.0\",\"8.0.0-nightly.20191103\":\"80.0.3952.0\",\"8.0.0-nightly.20191105\":\"80.0.3952.0\",\"8.0.0\":\"80.0.3987.86\",\"8.0.1\":\"80.0.3987.86\",\"8.0.2\":\"80.0.3987.86\",\"8.0.3\":\"80.0.3987.134\",\"8.1.0\":\"80.0.3987.137\",\"8.1.1\":\"80.0.3987.141\",\"8.2.0\":\"80.0.3987.158\",\"8.2.1\":\"80.0.3987.163\",\"8.2.2\":\"80.0.3987.163\",\"8.2.3\":\"80.0.3987.163\",\"8.2.4\":\"80.0.3987.165\",\"8.2.5\":\"80.0.3987.165\",\"8.3.0\":\"80.0.3987.165\",\"8.3.1\":\"80.0.3987.165\",\"8.3.2\":\"80.0.3987.165\",\"8.3.3\":\"80.0.3987.165\",\"8.3.4\":\"80.0.3987.165\",\"8.4.0\":\"80.0.3987.165\",\"8.4.1\":\"80.0.3987.165\",\"8.5.0\":\"80.0.3987.165\",\"8.5.1\":\"80.0.3987.165\",\"8.5.2\":\"80.0.3987.165\",\"8.5.3\":\"80.0.3987.163\",\"8.5.4\":\"80.0.3987.163\",\"8.5.5\":\"80.0.3987.163\",\"9.0.0-beta.1\":\"82.0.4048.0\",\"9.0.0-beta.2\":\"82.0.4048.0\",\"9.0.0-beta.3\":\"82.0.4048.0\",\"9.0.0-beta.4\":\"82.0.4048.0\",\"9.0.0-beta.5\":\"82.0.4048.0\",\"9.0.0-beta.6\":\"82.0.4058.2\",\"9.0.0-beta.7\":\"82.0.4058.2\",\"9.0.0-beta.9\":\"82.0.4058.2\",\"9.0.0-beta.10\":\"82.0.4085.10\",\"9.0.0-beta.11\":\"82.0.4085.14\",\"9.0.0-beta.12\":\"82.0.4085.14\",\"9.0.0-beta.13\":\"82.0.4085.14\",\"9.0.0-beta.14\":\"82.0.4085.27\",\"9.0.0-beta.15\":\"83.0.4102.3\",\"9.0.0-beta.16\":\"83.0.4102.3\",\"9.0.0-beta.17\":\"83.0.4103.14\",\"9.0.0-beta.18\":\"83.0.4103.16\",\"9.0.0-beta.19\":\"83.0.4103.24\",\"9.0.0-beta.20\":\"83.0.4103.26\",\"9.0.0-beta.21\":\"83.0.4103.26\",\"9.0.0-beta.22\":\"83.0.4103.34\",\"9.0.0-beta.23\":\"83.0.4103.44\",\"9.0.0-beta.24\":\"83.0.4103.45\",\"9.0.0-nightly.20191121\":\"80.0.3954.0\",\"9.0.0-nightly.20191122\":\"80.0.3954.0\",\"9.0.0-nightly.20191123\":\"80.0.3954.0\",\"9.0.0-nightly.20191124\":\"80.0.3954.0\",\"9.0.0-nightly.20191126\":\"80.0.3954.0\",\"9.0.0-nightly.20191128\":\"80.0.3954.0\",\"9.0.0-nightly.20191129\":\"80.0.3954.0\",\"9.0.0-nightly.20191130\":\"80.0.3954.0\",\"9.0.0-nightly.20191201\":\"80.0.3954.0\",\"9.0.0-nightly.20191202\":\"80.0.3954.0\",\"9.0.0-nightly.20191203\":\"80.0.3954.0\",\"9.0.0-nightly.20191204\":\"80.0.3954.0\",\"9.0.0-nightly.20191205\":\"80.0.3954.0\",\"9.0.0-nightly.20191210\":\"80.0.3954.0\",\"9.0.0-nightly.20191220\":\"81.0.3994.0\",\"9.0.0-nightly.20191221\":\"81.0.3994.0\",\"9.0.0-nightly.20191222\":\"81.0.3994.0\",\"9.0.0-nightly.20191223\":\"81.0.3994.0\",\"9.0.0-nightly.20191224\":\"81.0.3994.0\",\"9.0.0-nightly.20191225\":\"81.0.3994.0\",\"9.0.0-nightly.20191226\":\"81.0.3994.0\",\"9.0.0-nightly.20191228\":\"81.0.3994.0\",\"9.0.0-nightly.20191229\":\"81.0.3994.0\",\"9.0.0-nightly.20191230\":\"81.0.3994.0\",\"9.0.0-nightly.20191231\":\"81.0.3994.0\",\"9.0.0-nightly.20200101\":\"81.0.3994.0\",\"9.0.0-nightly.20200103\":\"81.0.3994.0\",\"9.0.0-nightly.20200104\":\"81.0.3994.0\",\"9.0.0-nightly.20200105\":\"81.0.3994.0\",\"9.0.0-nightly.20200106\":\"81.0.3994.0\",\"9.0.0-nightly.20200108\":\"81.0.3994.0\",\"9.0.0-nightly.20200109\":\"81.0.3994.0\",\"9.0.0-nightly.20200110\":\"81.0.3994.0\",\"9.0.0-nightly.20200111\":\"81.0.3994.0\",\"9.0.0-nightly.20200113\":\"81.0.3994.0\",\"9.0.0-nightly.20200115\":\"81.0.3994.0\",\"9.0.0-nightly.20200116\":\"81.0.3994.0\",\"9.0.0-nightly.20200117\":\"81.0.3994.0\",\"9.0.0-nightly.20200119\":\"81.0.4030.0\",\"9.0.0-nightly.20200121\":\"81.0.4030.0\",\"9.0.0\":\"83.0.4103.64\",\"9.0.1\":\"83.0.4103.94\",\"9.0.2\":\"83.0.4103.94\",\"9.0.3\":\"83.0.4103.100\",\"9.0.4\":\"83.0.4103.104\",\"9.0.5\":\"83.0.4103.119\",\"9.1.0\":\"83.0.4103.122\",\"9.1.1\":\"83.0.4103.122\",\"9.1.2\":\"83.0.4103.122\",\"9.2.0\":\"83.0.4103.122\",\"9.2.1\":\"83.0.4103.122\",\"9.3.0\":\"83.0.4103.122\",\"9.3.1\":\"83.0.4103.122\",\"9.3.2\":\"83.0.4103.122\",\"9.3.3\":\"83.0.4103.122\",\"9.3.4\":\"83.0.4103.122\",\"9.3.5\":\"83.0.4103.122\",\"9.4.0\":\"83.0.4103.122\",\"9.4.1\":\"83.0.4103.122\",\"9.4.2\":\"83.0.4103.122\",\"9.4.3\":\"83.0.4103.122\",\"9.4.4\":\"83.0.4103.122\",\"10.0.0-beta.1\":\"84.0.4129.0\",\"10.0.0-beta.2\":\"84.0.4129.0\",\"10.0.0-beta.3\":\"85.0.4161.2\",\"10.0.0-beta.4\":\"85.0.4161.2\",\"10.0.0-beta.8\":\"85.0.4181.1\",\"10.0.0-beta.9\":\"85.0.4181.1\",\"10.0.0-beta.10\":\"85.0.4183.19\",\"10.0.0-beta.11\":\"85.0.4183.20\",\"10.0.0-beta.12\":\"85.0.4183.26\",\"10.0.0-beta.13\":\"85.0.4183.39\",\"10.0.0-beta.14\":\"85.0.4183.39\",\"10.0.0-beta.15\":\"85.0.4183.39\",\"10.0.0-beta.17\":\"85.0.4183.39\",\"10.0.0-beta.19\":\"85.0.4183.39\",\"10.0.0-beta.20\":\"85.0.4183.39\",\"10.0.0-beta.21\":\"85.0.4183.39\",\"10.0.0-beta.23\":\"85.0.4183.70\",\"10.0.0-beta.24\":\"85.0.4183.78\",\"10.0.0-beta.25\":\"85.0.4183.80\",\"10.0.0-nightly.20200209\":\"82.0.4050.0\",\"10.0.0-nightly.20200210\":\"82.0.4050.0\",\"10.0.0-nightly.20200211\":\"82.0.4050.0\",\"10.0.0-nightly.20200216\":\"82.0.4050.0\",\"10.0.0-nightly.20200217\":\"82.0.4050.0\",\"10.0.0-nightly.20200218\":\"82.0.4050.0\",\"10.0.0-nightly.20200221\":\"82.0.4050.0\",\"10.0.0-nightly.20200222\":\"82.0.4050.0\",\"10.0.0-nightly.20200223\":\"82.0.4050.0\",\"10.0.0-nightly.20200226\":\"82.0.4050.0\",\"10.0.0-nightly.20200303\":\"82.0.4050.0\",\"10.0.0-nightly.20200304\":\"82.0.4076.0\",\"10.0.0-nightly.20200305\":\"82.0.4076.0\",\"10.0.0-nightly.20200306\":\"82.0.4076.0\",\"10.0.0-nightly.20200309\":\"82.0.4076.0\",\"10.0.0-nightly.20200310\":\"82.0.4076.0\",\"10.0.0-nightly.20200311\":\"82.0.4083.0\",\"10.0.0-nightly.20200316\":\"83.0.4086.0\",\"10.0.0-nightly.20200317\":\"83.0.4087.0\",\"10.0.0-nightly.20200318\":\"83.0.4087.0\",\"10.0.0-nightly.20200320\":\"83.0.4087.0\",\"10.0.0-nightly.20200323\":\"83.0.4087.0\",\"10.0.0-nightly.20200324\":\"83.0.4087.0\",\"10.0.0-nightly.20200325\":\"83.0.4087.0\",\"10.0.0-nightly.20200326\":\"83.0.4087.0\",\"10.0.0-nightly.20200327\":\"83.0.4087.0\",\"10.0.0-nightly.20200330\":\"83.0.4087.0\",\"10.0.0-nightly.20200331\":\"83.0.4087.0\",\"10.0.0-nightly.20200401\":\"83.0.4087.0\",\"10.0.0-nightly.20200402\":\"83.0.4087.0\",\"10.0.0-nightly.20200403\":\"83.0.4087.0\",\"10.0.0-nightly.20200406\":\"83.0.4087.0\",\"10.0.0-nightly.20200408\":\"83.0.4095.0\",\"10.0.0-nightly.20200410\":\"83.0.4095.0\",\"10.0.0-nightly.20200413\":\"83.0.4095.0\",\"10.0.0-nightly.20200414\":\"84.0.4114.0\",\"10.0.0-nightly.20200415\":\"84.0.4115.0\",\"10.0.0-nightly.20200416\":\"84.0.4115.0\",\"10.0.0-nightly.20200417\":\"84.0.4115.0\",\"10.0.0-nightly.20200422\":\"84.0.4121.0\",\"10.0.0-nightly.20200423\":\"84.0.4121.0\",\"10.0.0-nightly.20200427\":\"84.0.4125.0\",\"10.0.0-nightly.20200428\":\"84.0.4125.0\",\"10.0.0-nightly.20200429\":\"84.0.4125.0\",\"10.0.0-nightly.20200430\":\"84.0.4125.0\",\"10.0.0-nightly.20200501\":\"84.0.4129.0\",\"10.0.0-nightly.20200504\":\"84.0.4129.0\",\"10.0.0-nightly.20200505\":\"84.0.4129.0\",\"10.0.0-nightly.20200506\":\"84.0.4129.0\",\"10.0.0-nightly.20200507\":\"84.0.4129.0\",\"10.0.0-nightly.20200508\":\"84.0.4129.0\",\"10.0.0-nightly.20200511\":\"84.0.4129.0\",\"10.0.0-nightly.20200512\":\"84.0.4129.0\",\"10.0.0-nightly.20200513\":\"84.0.4129.0\",\"10.0.0-nightly.20200514\":\"84.0.4129.0\",\"10.0.0-nightly.20200515\":\"84.0.4129.0\",\"10.0.0-nightly.20200518\":\"84.0.4129.0\",\"10.0.0-nightly.20200519\":\"84.0.4129.0\",\"10.0.0-nightly.20200520\":\"84.0.4129.0\",\"10.0.0-nightly.20200521\":\"84.0.4129.0\",\"10.0.0\":\"85.0.4183.84\",\"10.0.1\":\"85.0.4183.86\",\"10.1.0\":\"85.0.4183.87\",\"10.1.1\":\"85.0.4183.93\",\"10.1.2\":\"85.0.4183.98\",\"10.1.3\":\"85.0.4183.121\",\"10.1.4\":\"85.0.4183.121\",\"10.1.5\":\"85.0.4183.121\",\"10.1.6\":\"85.0.4183.121\",\"10.1.7\":\"85.0.4183.121\",\"10.2.0\":\"85.0.4183.121\",\"10.3.0\":\"85.0.4183.121\",\"10.3.1\":\"85.0.4183.121\",\"10.3.2\":\"85.0.4183.121\",\"10.4.0\":\"85.0.4183.121\",\"10.4.1\":\"85.0.4183.121\",\"10.4.2\":\"85.0.4183.121\",\"10.4.3\":\"85.0.4183.121\",\"10.4.4\":\"85.0.4183.121\",\"10.4.5\":\"85.0.4183.121\",\"10.4.6\":\"85.0.4183.121\",\"10.4.7\":\"85.0.4183.121\",\"11.0.0-beta.1\":\"86.0.4234.0\",\"11.0.0-beta.3\":\"86.0.4234.0\",\"11.0.0-beta.4\":\"86.0.4234.0\",\"11.0.0-beta.5\":\"86.0.4234.0\",\"11.0.0-beta.6\":\"86.0.4234.0\",\"11.0.0-beta.7\":\"86.0.4234.0\",\"11.0.0-beta.8\":\"87.0.4251.1\",\"11.0.0-beta.9\":\"87.0.4251.1\",\"11.0.0-beta.11\":\"87.0.4251.1\",\"11.0.0-beta.12\":\"87.0.4280.11\",\"11.0.0-beta.13\":\"87.0.4280.11\",\"11.0.0-beta.16\":\"87.0.4280.27\",\"11.0.0-beta.17\":\"87.0.4280.27\",\"11.0.0-beta.18\":\"87.0.4280.27\",\"11.0.0-beta.19\":\"87.0.4280.27\",\"11.0.0-beta.20\":\"87.0.4280.40\",\"11.0.0-beta.22\":\"87.0.4280.47\",\"11.0.0-beta.23\":\"87.0.4280.47\",\"11.0.0-nightly.20200525\":\"84.0.4129.0\",\"11.0.0-nightly.20200526\":\"84.0.4129.0\",\"11.0.0-nightly.20200529\":\"85.0.4156.0\",\"11.0.0-nightly.20200602\":\"85.0.4162.0\",\"11.0.0-nightly.20200603\":\"85.0.4162.0\",\"11.0.0-nightly.20200604\":\"85.0.4162.0\",\"11.0.0-nightly.20200609\":\"85.0.4162.0\",\"11.0.0-nightly.20200610\":\"85.0.4162.0\",\"11.0.0-nightly.20200611\":\"85.0.4162.0\",\"11.0.0-nightly.20200615\":\"85.0.4162.0\",\"11.0.0-nightly.20200616\":\"85.0.4162.0\",\"11.0.0-nightly.20200617\":\"85.0.4162.0\",\"11.0.0-nightly.20200618\":\"85.0.4162.0\",\"11.0.0-nightly.20200619\":\"85.0.4162.0\",\"11.0.0-nightly.20200701\":\"85.0.4179.0\",\"11.0.0-nightly.20200702\":\"85.0.4179.0\",\"11.0.0-nightly.20200703\":\"85.0.4179.0\",\"11.0.0-nightly.20200706\":\"85.0.4179.0\",\"11.0.0-nightly.20200707\":\"85.0.4179.0\",\"11.0.0-nightly.20200708\":\"85.0.4179.0\",\"11.0.0-nightly.20200709\":\"85.0.4179.0\",\"11.0.0-nightly.20200716\":\"86.0.4203.0\",\"11.0.0-nightly.20200717\":\"86.0.4203.0\",\"11.0.0-nightly.20200720\":\"86.0.4203.0\",\"11.0.0-nightly.20200721\":\"86.0.4203.0\",\"11.0.0-nightly.20200723\":\"86.0.4209.0\",\"11.0.0-nightly.20200724\":\"86.0.4209.0\",\"11.0.0-nightly.20200729\":\"86.0.4209.0\",\"11.0.0-nightly.20200730\":\"86.0.4209.0\",\"11.0.0-nightly.20200731\":\"86.0.4209.0\",\"11.0.0-nightly.20200803\":\"86.0.4209.0\",\"11.0.0-nightly.20200804\":\"86.0.4209.0\",\"11.0.0-nightly.20200805\":\"86.0.4209.0\",\"11.0.0-nightly.20200811\":\"86.0.4209.0\",\"11.0.0-nightly.20200812\":\"86.0.4209.0\",\"11.0.0-nightly.20200822\":\"86.0.4234.0\",\"11.0.0-nightly.20200824\":\"86.0.4234.0\",\"11.0.0-nightly.20200825\":\"86.0.4234.0\",\"11.0.0-nightly.20200826\":\"86.0.4234.0\",\"11.0.0\":\"87.0.4280.60\",\"11.0.1\":\"87.0.4280.60\",\"11.0.2\":\"87.0.4280.67\",\"11.0.3\":\"87.0.4280.67\",\"11.0.4\":\"87.0.4280.67\",\"11.0.5\":\"87.0.4280.88\",\"11.1.0\":\"87.0.4280.88\",\"11.1.1\":\"87.0.4280.88\",\"11.2.0\":\"87.0.4280.141\",\"11.2.1\":\"87.0.4280.141\",\"11.2.2\":\"87.0.4280.141\",\"11.2.3\":\"87.0.4280.141\",\"11.3.0\":\"87.0.4280.141\",\"11.4.0\":\"87.0.4280.141\",\"11.4.1\":\"87.0.4280.141\",\"11.4.2\":\"87.0.4280.141\",\"11.4.3\":\"87.0.4280.141\",\"11.4.4\":\"87.0.4280.141\",\"11.4.5\":\"87.0.4280.141\",\"11.4.6\":\"87.0.4280.141\",\"11.4.7\":\"87.0.4280.141\",\"11.4.8\":\"87.0.4280.141\",\"11.4.9\":\"87.0.4280.141\",\"11.4.10\":\"87.0.4280.141\",\"11.4.11\":\"87.0.4280.141\",\"11.4.12\":\"87.0.4280.141\",\"11.5.0\":\"87.0.4280.141\",\"12.0.0-beta.1\":\"89.0.4328.0\",\"12.0.0-beta.3\":\"89.0.4328.0\",\"12.0.0-beta.4\":\"89.0.4328.0\",\"12.0.0-beta.5\":\"89.0.4328.0\",\"12.0.0-beta.6\":\"89.0.4328.0\",\"12.0.0-beta.7\":\"89.0.4328.0\",\"12.0.0-beta.8\":\"89.0.4328.0\",\"12.0.0-beta.9\":\"89.0.4328.0\",\"12.0.0-beta.10\":\"89.0.4328.0\",\"12.0.0-beta.11\":\"89.0.4328.0\",\"12.0.0-beta.12\":\"89.0.4328.0\",\"12.0.0-beta.14\":\"89.0.4328.0\",\"12.0.0-beta.16\":\"89.0.4348.1\",\"12.0.0-beta.18\":\"89.0.4348.1\",\"12.0.0-beta.19\":\"89.0.4348.1\",\"12.0.0-beta.20\":\"89.0.4348.1\",\"12.0.0-beta.21\":\"89.0.4388.2\",\"12.0.0-beta.22\":\"89.0.4388.2\",\"12.0.0-beta.23\":\"89.0.4388.2\",\"12.0.0-beta.24\":\"89.0.4388.2\",\"12.0.0-beta.25\":\"89.0.4388.2\",\"12.0.0-beta.26\":\"89.0.4388.2\",\"12.0.0-beta.27\":\"89.0.4389.23\",\"12.0.0-beta.28\":\"89.0.4389.23\",\"12.0.0-beta.29\":\"89.0.4389.23\",\"12.0.0-beta.30\":\"89.0.4389.58\",\"12.0.0-beta.31\":\"89.0.4389.58\",\"12.0.0-nightly.20200827\":\"86.0.4234.0\",\"12.0.0-nightly.20200831\":\"86.0.4234.0\",\"12.0.0-nightly.20200902\":\"86.0.4234.0\",\"12.0.0-nightly.20200903\":\"86.0.4234.0\",\"12.0.0-nightly.20200907\":\"86.0.4234.0\",\"12.0.0-nightly.20200910\":\"86.0.4234.0\",\"12.0.0-nightly.20200911\":\"86.0.4234.0\",\"12.0.0-nightly.20200914\":\"86.0.4234.0\",\"12.0.0-nightly.20201002\":\"87.0.4268.0\",\"12.0.0-nightly.20201007\":\"87.0.4268.0\",\"12.0.0-nightly.20201009\":\"87.0.4268.0\",\"12.0.0-nightly.20201012\":\"87.0.4268.0\",\"12.0.0-nightly.20201013\":\"87.0.4268.0\",\"12.0.0-nightly.20201014\":\"87.0.4268.0\",\"12.0.0-nightly.20201015\":\"87.0.4268.0\",\"12.0.0-nightly.20201023\":\"88.0.4292.0\",\"12.0.0-nightly.20201026\":\"88.0.4292.0\",\"12.0.0-nightly.20201030\":\"88.0.4306.0\",\"12.0.0-nightly.20201102\":\"88.0.4306.0\",\"12.0.0-nightly.20201103\":\"88.0.4306.0\",\"12.0.0-nightly.20201104\":\"88.0.4306.0\",\"12.0.0-nightly.20201105\":\"88.0.4306.0\",\"12.0.0-nightly.20201106\":\"88.0.4306.0\",\"12.0.0-nightly.20201111\":\"88.0.4306.0\",\"12.0.0-nightly.20201112\":\"88.0.4306.0\",\"12.0.0-nightly.20201116\":\"88.0.4324.0\",\"12.0.0\":\"89.0.4389.69\",\"12.0.1\":\"89.0.4389.82\",\"12.0.2\":\"89.0.4389.90\",\"12.0.3\":\"89.0.4389.114\",\"12.0.4\":\"89.0.4389.114\",\"12.0.5\":\"89.0.4389.128\",\"12.0.6\":\"89.0.4389.128\",\"12.0.7\":\"89.0.4389.128\",\"12.0.8\":\"89.0.4389.128\",\"12.0.9\":\"89.0.4389.128\",\"12.0.10\":\"89.0.4389.128\",\"12.0.11\":\"89.0.4389.128\",\"12.0.12\":\"89.0.4389.128\",\"12.0.13\":\"89.0.4389.128\",\"12.0.14\":\"89.0.4389.128\",\"12.0.15\":\"89.0.4389.128\",\"12.0.16\":\"89.0.4389.128\",\"12.0.17\":\"89.0.4389.128\",\"12.0.18\":\"89.0.4389.128\",\"12.1.0\":\"89.0.4389.128\",\"12.1.1\":\"89.0.4389.128\",\"12.1.2\":\"89.0.4389.128\",\"12.2.0\":\"89.0.4389.128\",\"12.2.1\":\"89.0.4389.128\",\"12.2.2\":\"89.0.4389.128\",\"12.2.3\":\"89.0.4389.128\",\"13.0.0-beta.2\":\"90.0.4402.0\",\"13.0.0-beta.3\":\"90.0.4402.0\",\"13.0.0-beta.4\":\"90.0.4415.0\",\"13.0.0-beta.5\":\"90.0.4415.0\",\"13.0.0-beta.6\":\"90.0.4415.0\",\"13.0.0-beta.7\":\"90.0.4415.0\",\"13.0.0-beta.8\":\"90.0.4415.0\",\"13.0.0-beta.9\":\"90.0.4415.0\",\"13.0.0-beta.10\":\"90.0.4415.0\",\"13.0.0-beta.11\":\"90.0.4415.0\",\"13.0.0-beta.12\":\"90.0.4415.0\",\"13.0.0-beta.13\":\"90.0.4415.0\",\"13.0.0-beta.14\":\"91.0.4448.0\",\"13.0.0-beta.16\":\"91.0.4448.0\",\"13.0.0-beta.17\":\"91.0.4448.0\",\"13.0.0-beta.18\":\"91.0.4448.0\",\"13.0.0-beta.20\":\"91.0.4448.0\",\"13.0.0-beta.21\":\"91.0.4472.33\",\"13.0.0-beta.22\":\"91.0.4472.33\",\"13.0.0-beta.23\":\"91.0.4472.33\",\"13.0.0-beta.24\":\"91.0.4472.38\",\"13.0.0-beta.25\":\"91.0.4472.38\",\"13.0.0-beta.26\":\"91.0.4472.38\",\"13.0.0-beta.27\":\"91.0.4472.38\",\"13.0.0-beta.28\":\"91.0.4472.38\",\"13.0.0-nightly.20201119\":\"89.0.4328.0\",\"13.0.0-nightly.20201123\":\"89.0.4328.0\",\"13.0.0-nightly.20201124\":\"89.0.4328.0\",\"13.0.0-nightly.20201126\":\"89.0.4328.0\",\"13.0.0-nightly.20201127\":\"89.0.4328.0\",\"13.0.0-nightly.20201130\":\"89.0.4328.0\",\"13.0.0-nightly.20201201\":\"89.0.4328.0\",\"13.0.0-nightly.20201202\":\"89.0.4328.0\",\"13.0.0-nightly.20201203\":\"89.0.4328.0\",\"13.0.0-nightly.20201204\":\"89.0.4328.0\",\"13.0.0-nightly.20201207\":\"89.0.4328.0\",\"13.0.0-nightly.20201208\":\"89.0.4328.0\",\"13.0.0-nightly.20201209\":\"89.0.4328.0\",\"13.0.0-nightly.20201210\":\"89.0.4328.0\",\"13.0.0-nightly.20201211\":\"89.0.4328.0\",\"13.0.0-nightly.20201214\":\"89.0.4328.0\",\"13.0.0-nightly.20201215\":\"89.0.4349.0\",\"13.0.0-nightly.20201216\":\"89.0.4349.0\",\"13.0.0-nightly.20201221\":\"89.0.4349.0\",\"13.0.0-nightly.20201222\":\"89.0.4349.0\",\"13.0.0-nightly.20201223\":\"89.0.4359.0\",\"13.0.0-nightly.20210104\":\"89.0.4359.0\",\"13.0.0-nightly.20210108\":\"89.0.4359.0\",\"13.0.0-nightly.20210111\":\"89.0.4359.0\",\"13.0.0-nightly.20210113\":\"89.0.4386.0\",\"13.0.0-nightly.20210114\":\"89.0.4386.0\",\"13.0.0-nightly.20210118\":\"89.0.4386.0\",\"13.0.0-nightly.20210122\":\"89.0.4386.0\",\"13.0.0-nightly.20210125\":\"89.0.4386.0\",\"13.0.0-nightly.20210127\":\"89.0.4389.0\",\"13.0.0-nightly.20210128\":\"89.0.4389.0\",\"13.0.0-nightly.20210129\":\"89.0.4389.0\",\"13.0.0-nightly.20210201\":\"89.0.4389.0\",\"13.0.0-nightly.20210202\":\"89.0.4389.0\",\"13.0.0-nightly.20210203\":\"89.0.4389.0\",\"13.0.0-nightly.20210205\":\"89.0.4389.0\",\"13.0.0-nightly.20210208\":\"89.0.4389.0\",\"13.0.0-nightly.20210209\":\"89.0.4389.0\",\"13.0.0-nightly.20210210\":\"90.0.4402.0\",\"13.0.0-nightly.20210211\":\"90.0.4402.0\",\"13.0.0-nightly.20210212\":\"90.0.4402.0\",\"13.0.0-nightly.20210216\":\"90.0.4402.0\",\"13.0.0-nightly.20210217\":\"90.0.4402.0\",\"13.0.0-nightly.20210218\":\"90.0.4402.0\",\"13.0.0-nightly.20210219\":\"90.0.4402.0\",\"13.0.0-nightly.20210222\":\"90.0.4402.0\",\"13.0.0-nightly.20210225\":\"90.0.4402.0\",\"13.0.0-nightly.20210226\":\"90.0.4402.0\",\"13.0.0-nightly.20210301\":\"90.0.4402.0\",\"13.0.0-nightly.20210302\":\"90.0.4402.0\",\"13.0.0-nightly.20210303\":\"90.0.4402.0\",\"13.0.0\":\"91.0.4472.69\",\"13.0.1\":\"91.0.4472.69\",\"13.1.0\":\"91.0.4472.77\",\"13.1.1\":\"91.0.4472.77\",\"13.1.2\":\"91.0.4472.77\",\"13.1.3\":\"91.0.4472.106\",\"13.1.4\":\"91.0.4472.106\",\"13.1.5\":\"91.0.4472.124\",\"13.1.6\":\"91.0.4472.124\",\"13.1.7\":\"91.0.4472.124\",\"13.1.8\":\"91.0.4472.164\",\"13.1.9\":\"91.0.4472.164\",\"13.2.0\":\"91.0.4472.164\",\"13.2.1\":\"91.0.4472.164\",\"13.2.2\":\"91.0.4472.164\",\"13.2.3\":\"91.0.4472.164\",\"13.3.0\":\"91.0.4472.164\",\"13.4.0\":\"91.0.4472.164\",\"13.5.0\":\"91.0.4472.164\",\"13.5.1\":\"91.0.4472.164\",\"13.5.2\":\"91.0.4472.164\",\"13.6.0\":\"91.0.4472.164\",\"13.6.1\":\"91.0.4472.164\",\"13.6.2\":\"91.0.4472.164\",\"13.6.3\":\"91.0.4472.164\",\"13.6.6\":\"91.0.4472.164\",\"13.6.7\":\"91.0.4472.164\",\"13.6.8\":\"91.0.4472.164\",\"13.6.9\":\"91.0.4472.164\",\"14.0.0-beta.1\":\"92.0.4511.0\",\"14.0.0-beta.2\":\"92.0.4511.0\",\"14.0.0-beta.3\":\"92.0.4511.0\",\"14.0.0-beta.5\":\"93.0.4536.0\",\"14.0.0-beta.6\":\"93.0.4536.0\",\"14.0.0-beta.7\":\"93.0.4536.0\",\"14.0.0-beta.8\":\"93.0.4536.0\",\"14.0.0-beta.9\":\"93.0.4539.0\",\"14.0.0-beta.10\":\"93.0.4539.0\",\"14.0.0-beta.11\":\"93.0.4557.4\",\"14.0.0-beta.12\":\"93.0.4557.4\",\"14.0.0-beta.13\":\"93.0.4566.0\",\"14.0.0-beta.14\":\"93.0.4566.0\",\"14.0.0-beta.15\":\"93.0.4566.0\",\"14.0.0-beta.16\":\"93.0.4566.0\",\"14.0.0-beta.17\":\"93.0.4566.0\",\"14.0.0-beta.18\":\"93.0.4577.15\",\"14.0.0-beta.19\":\"93.0.4577.15\",\"14.0.0-beta.20\":\"93.0.4577.15\",\"14.0.0-beta.21\":\"93.0.4577.15\",\"14.0.0-beta.22\":\"93.0.4577.25\",\"14.0.0-beta.23\":\"93.0.4577.25\",\"14.0.0-beta.24\":\"93.0.4577.51\",\"14.0.0-beta.25\":\"93.0.4577.51\",\"14.0.0-nightly.20210304\":\"90.0.4402.0\",\"14.0.0-nightly.20210305\":\"90.0.4415.0\",\"14.0.0-nightly.20210308\":\"90.0.4415.0\",\"14.0.0-nightly.20210309\":\"90.0.4415.0\",\"14.0.0-nightly.20210311\":\"90.0.4415.0\",\"14.0.0-nightly.20210315\":\"90.0.4415.0\",\"14.0.0-nightly.20210316\":\"90.0.4415.0\",\"14.0.0-nightly.20210317\":\"90.0.4415.0\",\"14.0.0-nightly.20210318\":\"90.0.4415.0\",\"14.0.0-nightly.20210319\":\"90.0.4415.0\",\"14.0.0-nightly.20210323\":\"90.0.4415.0\",\"14.0.0-nightly.20210324\":\"90.0.4415.0\",\"14.0.0-nightly.20210325\":\"90.0.4415.0\",\"14.0.0-nightly.20210326\":\"90.0.4415.0\",\"14.0.0-nightly.20210329\":\"90.0.4415.0\",\"14.0.0-nightly.20210330\":\"90.0.4415.0\",\"14.0.0-nightly.20210331\":\"91.0.4448.0\",\"14.0.0-nightly.20210401\":\"91.0.4448.0\",\"14.0.0-nightly.20210402\":\"91.0.4448.0\",\"14.0.0-nightly.20210406\":\"91.0.4448.0\",\"14.0.0-nightly.20210407\":\"91.0.4448.0\",\"14.0.0-nightly.20210408\":\"91.0.4448.0\",\"14.0.0-nightly.20210409\":\"91.0.4448.0\",\"14.0.0-nightly.20210413\":\"91.0.4448.0\",\"14.0.0-nightly.20210426\":\"92.0.4475.0\",\"14.0.0-nightly.20210427\":\"92.0.4475.0\",\"14.0.0-nightly.20210430\":\"92.0.4488.0\",\"14.0.0-nightly.20210503\":\"92.0.4488.0\",\"14.0.0-nightly.20210505\":\"92.0.4496.0\",\"14.0.0-nightly.20210506\":\"92.0.4498.0\",\"14.0.0-nightly.20210507\":\"92.0.4499.0\",\"14.0.0-nightly.20210510\":\"92.0.4499.0\",\"14.0.0-nightly.20210511\":\"92.0.4499.0\",\"14.0.0-nightly.20210512\":\"92.0.4499.0\",\"14.0.0-nightly.20210513\":\"92.0.4499.0\",\"14.0.0-nightly.20210514\":\"92.0.4505.0\",\"14.0.0-nightly.20210517\":\"92.0.4505.0\",\"14.0.0-nightly.20210518\":\"92.0.4505.0\",\"14.0.0-nightly.20210519\":\"92.0.4505.0\",\"14.0.0-nightly.20210520\":\"92.0.4511.0\",\"14.0.0-nightly.20210523\":\"92.0.4511.0\",\"14.0.0-nightly.20210524\":\"92.0.4511.0\",\"14.0.0\":\"93.0.4577.58\",\"14.0.1\":\"93.0.4577.63\",\"14.0.2\":\"93.0.4577.82\",\"14.1.0\":\"93.0.4577.82\",\"14.1.1\":\"93.0.4577.82\",\"14.2.0\":\"93.0.4577.82\",\"14.2.1\":\"93.0.4577.82\",\"14.2.2\":\"93.0.4577.82\",\"14.2.3\":\"93.0.4577.82\",\"14.2.4\":\"93.0.4577.82\",\"14.2.5\":\"93.0.4577.82\",\"14.2.6\":\"93.0.4577.82\",\"14.2.7\":\"93.0.4577.82\",\"14.2.8\":\"93.0.4577.82\",\"14.2.9\":\"93.0.4577.82\",\"15.0.0-alpha.1\":\"93.0.4566.0\",\"15.0.0-alpha.2\":\"93.0.4566.0\",\"15.0.0-alpha.3\":\"94.0.4584.0\",\"15.0.0-alpha.4\":\"94.0.4584.0\",\"15.0.0-alpha.5\":\"94.0.4584.0\",\"15.0.0-alpha.6\":\"94.0.4584.0\",\"15.0.0-alpha.7\":\"94.0.4590.2\",\"15.0.0-alpha.8\":\"94.0.4590.2\",\"15.0.0-alpha.9\":\"94.0.4590.2\",\"15.0.0-alpha.10\":\"94.0.4606.12\",\"15.0.0-beta.1\":\"94.0.4606.20\",\"15.0.0-beta.2\":\"94.0.4606.20\",\"15.0.0-beta.3\":\"94.0.4606.31\",\"15.0.0-beta.4\":\"94.0.4606.31\",\"15.0.0-beta.5\":\"94.0.4606.31\",\"15.0.0-beta.6\":\"94.0.4606.31\",\"15.0.0-beta.7\":\"94.0.4606.31\",\"15.0.0-nightly.20210527\":\"92.0.4511.0\",\"15.0.0-nightly.20210528\":\"92.0.4511.0\",\"15.0.0-nightly.20210531\":\"92.0.4511.0\",\"15.0.0-nightly.20210601\":\"92.0.4511.0\",\"15.0.0-nightly.20210602\":\"92.0.4511.0\",\"15.0.0-nightly.20210603\":\"93.0.4530.0\",\"15.0.0-nightly.20210604\":\"93.0.4530.0\",\"15.0.0-nightly.20210608\":\"93.0.4535.0\",\"15.0.0-nightly.20210609\":\"93.0.4536.0\",\"15.0.0-nightly.20210610\":\"93.0.4536.0\",\"15.0.0-nightly.20210611\":\"93.0.4536.0\",\"15.0.0-nightly.20210614\":\"93.0.4536.0\",\"15.0.0-nightly.20210615\":\"93.0.4536.0\",\"15.0.0-nightly.20210616\":\"93.0.4536.0\",\"15.0.0-nightly.20210617\":\"93.0.4539.0\",\"15.0.0-nightly.20210618\":\"93.0.4539.0\",\"15.0.0-nightly.20210621\":\"93.0.4539.0\",\"15.0.0-nightly.20210622\":\"93.0.4539.0\",\"15.0.0-nightly.20210623\":\"93.0.4550.0\",\"15.0.0-nightly.20210624\":\"93.0.4550.0\",\"15.0.0-nightly.20210625\":\"93.0.4552.0\",\"15.0.0-nightly.20210628\":\"93.0.4552.0\",\"15.0.0-nightly.20210629\":\"93.0.4552.0\",\"15.0.0-nightly.20210630\":\"93.0.4558.0\",\"15.0.0-nightly.20210701\":\"93.0.4558.0\",\"15.0.0-nightly.20210702\":\"93.0.4558.0\",\"15.0.0-nightly.20210705\":\"93.0.4558.0\",\"15.0.0-nightly.20210706\":\"93.0.4566.0\",\"15.0.0-nightly.20210707\":\"93.0.4566.0\",\"15.0.0-nightly.20210708\":\"93.0.4566.0\",\"15.0.0-nightly.20210709\":\"93.0.4566.0\",\"15.0.0-nightly.20210712\":\"93.0.4566.0\",\"15.0.0-nightly.20210713\":\"93.0.4566.0\",\"15.0.0-nightly.20210714\":\"93.0.4566.0\",\"15.0.0-nightly.20210715\":\"93.0.4566.0\",\"15.0.0-nightly.20210716\":\"93.0.4566.0\",\"15.0.0-nightly.20210719\":\"93.0.4566.0\",\"15.0.0-nightly.20210720\":\"93.0.4566.0\",\"15.0.0-nightly.20210721\":\"93.0.4566.0\",\"15.0.0\":\"94.0.4606.51\",\"15.1.0\":\"94.0.4606.61\",\"15.1.1\":\"94.0.4606.61\",\"15.1.2\":\"94.0.4606.71\",\"15.2.0\":\"94.0.4606.81\",\"15.3.0\":\"94.0.4606.81\",\"15.3.1\":\"94.0.4606.81\",\"15.3.2\":\"94.0.4606.81\",\"15.3.3\":\"94.0.4606.81\",\"15.3.4\":\"94.0.4606.81\",\"15.3.5\":\"94.0.4606.81\",\"15.3.6\":\"94.0.4606.81\",\"15.3.7\":\"94.0.4606.81\",\"15.4.0\":\"94.0.4606.81\",\"15.4.1\":\"94.0.4606.81\",\"15.4.2\":\"94.0.4606.81\",\"15.5.0\":\"94.0.4606.81\",\"15.5.1\":\"94.0.4606.81\",\"15.5.2\":\"94.0.4606.81\",\"15.5.3\":\"94.0.4606.81\",\"15.5.4\":\"94.0.4606.81\",\"15.5.5\":\"94.0.4606.81\",\"15.5.6\":\"94.0.4606.81\",\"15.5.7\":\"94.0.4606.81\",\"16.0.0-alpha.1\":\"95.0.4629.0\",\"16.0.0-alpha.2\":\"95.0.4629.0\",\"16.0.0-alpha.3\":\"95.0.4629.0\",\"16.0.0-alpha.4\":\"95.0.4629.0\",\"16.0.0-alpha.5\":\"95.0.4629.0\",\"16.0.0-alpha.6\":\"95.0.4629.0\",\"16.0.0-alpha.7\":\"95.0.4629.0\",\"16.0.0-alpha.8\":\"96.0.4647.0\",\"16.0.0-alpha.9\":\"96.0.4647.0\",\"16.0.0-beta.1\":\"96.0.4647.0\",\"16.0.0-beta.2\":\"96.0.4647.0\",\"16.0.0-beta.3\":\"96.0.4647.0\",\"16.0.0-beta.4\":\"96.0.4664.18\",\"16.0.0-beta.5\":\"96.0.4664.18\",\"16.0.0-beta.6\":\"96.0.4664.27\",\"16.0.0-beta.7\":\"96.0.4664.27\",\"16.0.0-beta.8\":\"96.0.4664.35\",\"16.0.0-beta.9\":\"96.0.4664.35\",\"16.0.0-nightly.20210722\":\"93.0.4566.0\",\"16.0.0-nightly.20210723\":\"93.0.4566.0\",\"16.0.0-nightly.20210726\":\"93.0.4566.0\",\"16.0.0-nightly.20210727\":\"94.0.4584.0\",\"16.0.0-nightly.20210728\":\"94.0.4584.0\",\"16.0.0-nightly.20210729\":\"94.0.4584.0\",\"16.0.0-nightly.20210730\":\"94.0.4584.0\",\"16.0.0-nightly.20210802\":\"94.0.4584.0\",\"16.0.0-nightly.20210803\":\"94.0.4584.0\",\"16.0.0-nightly.20210804\":\"94.0.4584.0\",\"16.0.0-nightly.20210805\":\"94.0.4584.0\",\"16.0.0-nightly.20210806\":\"94.0.4584.0\",\"16.0.0-nightly.20210809\":\"94.0.4584.0\",\"16.0.0-nightly.20210810\":\"94.0.4584.0\",\"16.0.0-nightly.20210811\":\"94.0.4584.0\",\"16.0.0-nightly.20210812\":\"94.0.4590.2\",\"16.0.0-nightly.20210813\":\"94.0.4590.2\",\"16.0.0-nightly.20210816\":\"94.0.4590.2\",\"16.0.0-nightly.20210817\":\"94.0.4590.2\",\"16.0.0-nightly.20210818\":\"94.0.4590.2\",\"16.0.0-nightly.20210819\":\"94.0.4590.2\",\"16.0.0-nightly.20210820\":\"94.0.4590.2\",\"16.0.0-nightly.20210823\":\"94.0.4590.2\",\"16.0.0-nightly.20210824\":\"95.0.4612.5\",\"16.0.0-nightly.20210825\":\"95.0.4612.5\",\"16.0.0-nightly.20210826\":\"95.0.4612.5\",\"16.0.0-nightly.20210827\":\"95.0.4612.5\",\"16.0.0-nightly.20210830\":\"95.0.4612.5\",\"16.0.0-nightly.20210831\":\"95.0.4612.5\",\"16.0.0-nightly.20210901\":\"95.0.4612.5\",\"16.0.0-nightly.20210902\":\"95.0.4629.0\",\"16.0.0-nightly.20210903\":\"95.0.4629.0\",\"16.0.0-nightly.20210906\":\"95.0.4629.0\",\"16.0.0-nightly.20210907\":\"95.0.4629.0\",\"16.0.0-nightly.20210908\":\"95.0.4629.0\",\"16.0.0-nightly.20210909\":\"95.0.4629.0\",\"16.0.0-nightly.20210910\":\"95.0.4629.0\",\"16.0.0-nightly.20210913\":\"95.0.4629.0\",\"16.0.0-nightly.20210914\":\"95.0.4629.0\",\"16.0.0-nightly.20210915\":\"95.0.4629.0\",\"16.0.0-nightly.20210916\":\"95.0.4629.0\",\"16.0.0-nightly.20210917\":\"95.0.4629.0\",\"16.0.0-nightly.20210920\":\"95.0.4629.0\",\"16.0.0-nightly.20210921\":\"95.0.4629.0\",\"16.0.0-nightly.20210922\":\"95.0.4629.0\",\"16.0.0\":\"96.0.4664.45\",\"16.0.1\":\"96.0.4664.45\",\"16.0.2\":\"96.0.4664.55\",\"16.0.3\":\"96.0.4664.55\",\"16.0.4\":\"96.0.4664.55\",\"16.0.5\":\"96.0.4664.55\",\"16.0.6\":\"96.0.4664.110\",\"16.0.7\":\"96.0.4664.110\",\"16.0.8\":\"96.0.4664.110\",\"16.0.9\":\"96.0.4664.174\",\"16.0.10\":\"96.0.4664.174\",\"16.1.0\":\"96.0.4664.174\",\"16.1.1\":\"96.0.4664.174\",\"16.2.0\":\"96.0.4664.174\",\"16.2.1\":\"96.0.4664.174\",\"16.2.2\":\"96.0.4664.174\",\"16.2.3\":\"96.0.4664.174\",\"16.2.4\":\"96.0.4664.174\",\"16.2.5\":\"96.0.4664.174\",\"16.2.6\":\"96.0.4664.174\",\"16.2.7\":\"96.0.4664.174\",\"16.2.8\":\"96.0.4664.174\",\"17.0.0-alpha.1\":\"96.0.4664.4\",\"17.0.0-alpha.2\":\"96.0.4664.4\",\"17.0.0-alpha.3\":\"96.0.4664.4\",\"17.0.0-alpha.4\":\"98.0.4706.0\",\"17.0.0-alpha.5\":\"98.0.4706.0\",\"17.0.0-alpha.6\":\"98.0.4706.0\",\"17.0.0-beta.1\":\"98.0.4706.0\",\"17.0.0-beta.2\":\"98.0.4706.0\",\"17.0.0-beta.3\":\"98.0.4758.9\",\"17.0.0-beta.4\":\"98.0.4758.11\",\"17.0.0-beta.5\":\"98.0.4758.11\",\"17.0.0-beta.6\":\"98.0.4758.11\",\"17.0.0-beta.7\":\"98.0.4758.11\",\"17.0.0-beta.8\":\"98.0.4758.11\",\"17.0.0-beta.9\":\"98.0.4758.11\",\"17.0.0-nightly.20210923\":\"95.0.4629.0\",\"17.0.0-nightly.20210924\":\"95.0.4629.0\",\"17.0.0-nightly.20210927\":\"95.0.4629.0\",\"17.0.0-nightly.20210928\":\"95.0.4629.0\",\"17.0.0-nightly.20210929\":\"95.0.4629.0\",\"17.0.0-nightly.20210930\":\"95.0.4629.0\",\"17.0.0-nightly.20211001\":\"95.0.4629.0\",\"17.0.0-nightly.20211004\":\"95.0.4629.0\",\"17.0.0-nightly.20211005\":\"95.0.4629.0\",\"17.0.0-nightly.20211006\":\"96.0.4647.0\",\"17.0.0-nightly.20211007\":\"96.0.4647.0\",\"17.0.0-nightly.20211008\":\"96.0.4647.0\",\"17.0.0-nightly.20211011\":\"96.0.4647.0\",\"17.0.0-nightly.20211012\":\"96.0.4647.0\",\"17.0.0-nightly.20211013\":\"96.0.4647.0\",\"17.0.0-nightly.20211014\":\"96.0.4647.0\",\"17.0.0-nightly.20211015\":\"96.0.4647.0\",\"17.0.0-nightly.20211018\":\"96.0.4647.0\",\"17.0.0-nightly.20211019\":\"96.0.4647.0\",\"17.0.0-nightly.20211020\":\"96.0.4647.0\",\"17.0.0-nightly.20211021\":\"96.0.4647.0\",\"17.0.0-nightly.20211022\":\"96.0.4664.4\",\"17.0.0-nightly.20211025\":\"96.0.4664.4\",\"17.0.0-nightly.20211026\":\"96.0.4664.4\",\"17.0.0-nightly.20211027\":\"96.0.4664.4\",\"17.0.0-nightly.20211028\":\"96.0.4664.4\",\"17.0.0-nightly.20211029\":\"96.0.4664.4\",\"17.0.0-nightly.20211101\":\"96.0.4664.4\",\"17.0.0-nightly.20211102\":\"96.0.4664.4\",\"17.0.0-nightly.20211103\":\"96.0.4664.4\",\"17.0.0-nightly.20211104\":\"96.0.4664.4\",\"17.0.0-nightly.20211105\":\"96.0.4664.4\",\"17.0.0-nightly.20211108\":\"96.0.4664.4\",\"17.0.0-nightly.20211109\":\"96.0.4664.4\",\"17.0.0-nightly.20211110\":\"96.0.4664.4\",\"17.0.0-nightly.20211111\":\"96.0.4664.4\",\"17.0.0-nightly.20211112\":\"96.0.4664.4\",\"17.0.0-nightly.20211115\":\"96.0.4664.4\",\"17.0.0-nightly.20211116\":\"96.0.4664.4\",\"17.0.0-nightly.20211117\":\"96.0.4664.4\",\"17.0.0\":\"98.0.4758.74\",\"17.0.1\":\"98.0.4758.82\",\"17.1.0\":\"98.0.4758.102\",\"17.1.1\":\"98.0.4758.109\",\"17.1.2\":\"98.0.4758.109\",\"17.2.0\":\"98.0.4758.109\",\"17.3.0\":\"98.0.4758.141\",\"17.3.1\":\"98.0.4758.141\",\"17.4.0\":\"98.0.4758.141\",\"17.4.1\":\"98.0.4758.141\",\"17.4.2\":\"98.0.4758.141\",\"17.4.3\":\"98.0.4758.141\",\"17.4.4\":\"98.0.4758.141\",\"17.4.5\":\"98.0.4758.141\",\"17.4.6\":\"98.0.4758.141\",\"17.4.7\":\"98.0.4758.141\",\"17.4.8\":\"98.0.4758.141\",\"17.4.9\":\"98.0.4758.141\",\"17.4.10\":\"98.0.4758.141\",\"17.4.11\":\"98.0.4758.141\",\"18.0.0-alpha.1\":\"99.0.4767.0\",\"18.0.0-alpha.2\":\"99.0.4767.0\",\"18.0.0-alpha.3\":\"99.0.4767.0\",\"18.0.0-alpha.4\":\"99.0.4767.0\",\"18.0.0-alpha.5\":\"99.0.4767.0\",\"18.0.0-beta.1\":\"100.0.4894.0\",\"18.0.0-beta.2\":\"100.0.4894.0\",\"18.0.0-beta.3\":\"100.0.4894.0\",\"18.0.0-beta.4\":\"100.0.4894.0\",\"18.0.0-beta.5\":\"100.0.4894.0\",\"18.0.0-beta.6\":\"100.0.4894.0\",\"18.0.0-nightly.20211118\":\"96.0.4664.4\",\"18.0.0-nightly.20211119\":\"96.0.4664.4\",\"18.0.0-nightly.20211122\":\"96.0.4664.4\",\"18.0.0-nightly.20211123\":\"96.0.4664.4\",\"18.0.0-nightly.20211124\":\"98.0.4706.0\",\"18.0.0-nightly.20211125\":\"98.0.4706.0\",\"18.0.0-nightly.20211126\":\"98.0.4706.0\",\"18.0.0-nightly.20211129\":\"98.0.4706.0\",\"18.0.0-nightly.20211130\":\"98.0.4706.0\",\"18.0.0-nightly.20211201\":\"98.0.4706.0\",\"18.0.0-nightly.20211202\":\"98.0.4706.0\",\"18.0.0-nightly.20211203\":\"98.0.4706.0\",\"18.0.0-nightly.20211206\":\"98.0.4706.0\",\"18.0.0-nightly.20211207\":\"98.0.4706.0\",\"18.0.0-nightly.20211208\":\"98.0.4706.0\",\"18.0.0-nightly.20211209\":\"98.0.4706.0\",\"18.0.0-nightly.20211210\":\"98.0.4706.0\",\"18.0.0-nightly.20211213\":\"98.0.4706.0\",\"18.0.0-nightly.20211214\":\"98.0.4706.0\",\"18.0.0-nightly.20211215\":\"98.0.4706.0\",\"18.0.0-nightly.20211216\":\"98.0.4706.0\",\"18.0.0-nightly.20211217\":\"98.0.4706.0\",\"18.0.0-nightly.20211220\":\"98.0.4706.0\",\"18.0.0-nightly.20211221\":\"98.0.4706.0\",\"18.0.0-nightly.20211222\":\"98.0.4706.0\",\"18.0.0-nightly.20211223\":\"98.0.4706.0\",\"18.0.0-nightly.20211228\":\"98.0.4706.0\",\"18.0.0-nightly.20211229\":\"98.0.4706.0\",\"18.0.0-nightly.20211231\":\"98.0.4706.0\",\"18.0.0-nightly.20220103\":\"98.0.4706.0\",\"18.0.0-nightly.20220104\":\"98.0.4706.0\",\"18.0.0-nightly.20220105\":\"98.0.4706.0\",\"18.0.0-nightly.20220106\":\"98.0.4706.0\",\"18.0.0-nightly.20220107\":\"98.0.4706.0\",\"18.0.0-nightly.20220110\":\"98.0.4706.0\",\"18.0.0-nightly.20220111\":\"99.0.4767.0\",\"18.0.0-nightly.20220112\":\"99.0.4767.0\",\"18.0.0-nightly.20220113\":\"99.0.4767.0\",\"18.0.0-nightly.20220114\":\"99.0.4767.0\",\"18.0.0-nightly.20220117\":\"99.0.4767.0\",\"18.0.0-nightly.20220118\":\"99.0.4767.0\",\"18.0.0-nightly.20220119\":\"99.0.4767.0\",\"18.0.0-nightly.20220121\":\"99.0.4767.0\",\"18.0.0-nightly.20220124\":\"99.0.4767.0\",\"18.0.0-nightly.20220125\":\"99.0.4767.0\",\"18.0.0-nightly.20220127\":\"99.0.4767.0\",\"18.0.0-nightly.20220128\":\"99.0.4767.0\",\"18.0.0-nightly.20220131\":\"99.0.4767.0\",\"18.0.0-nightly.20220201\":\"99.0.4767.0\",\"18.0.0\":\"100.0.4896.56\",\"18.0.1\":\"100.0.4896.60\",\"18.0.2\":\"100.0.4896.60\",\"18.0.3\":\"100.0.4896.75\",\"18.0.4\":\"100.0.4896.75\",\"18.1.0\":\"100.0.4896.127\",\"18.2.0\":\"100.0.4896.143\",\"18.2.1\":\"100.0.4896.143\",\"18.2.2\":\"100.0.4896.143\",\"18.2.3\":\"100.0.4896.143\",\"18.2.4\":\"100.0.4896.160\",\"18.3.0\":\"100.0.4896.160\",\"18.3.1\":\"100.0.4896.160\",\"18.3.2\":\"100.0.4896.160\",\"18.3.3\":\"100.0.4896.160\",\"18.3.4\":\"100.0.4896.160\",\"18.3.5\":\"100.0.4896.160\",\"18.3.6\":\"100.0.4896.160\",\"18.3.7\":\"100.0.4896.160\",\"18.3.8\":\"100.0.4896.160\",\"18.3.9\":\"100.0.4896.160\",\"18.3.11\":\"100.0.4896.160\",\"18.3.12\":\"100.0.4896.160\",\"18.3.13\":\"100.0.4896.160\",\"18.3.14\":\"100.0.4896.160\",\"18.3.15\":\"100.0.4896.160\",\"19.0.0-alpha.1\":\"102.0.4962.3\",\"19.0.0-alpha.2\":\"102.0.4971.0\",\"19.0.0-alpha.3\":\"102.0.4971.0\",\"19.0.0-alpha.4\":\"102.0.4989.0\",\"19.0.0-alpha.5\":\"102.0.4989.0\",\"19.0.0-beta.1\":\"102.0.4999.0\",\"19.0.0-beta.2\":\"102.0.4999.0\",\"19.0.0-beta.3\":\"102.0.4999.0\",\"19.0.0-beta.4\":\"102.0.5005.27\",\"19.0.0-beta.5\":\"102.0.5005.40\",\"19.0.0-beta.6\":\"102.0.5005.40\",\"19.0.0-beta.7\":\"102.0.5005.40\",\"19.0.0-beta.8\":\"102.0.5005.49\",\"19.0.0-nightly.20220202\":\"99.0.4767.0\",\"19.0.0-nightly.20220203\":\"99.0.4767.0\",\"19.0.0-nightly.20220204\":\"99.0.4767.0\",\"19.0.0-nightly.20220207\":\"99.0.4767.0\",\"19.0.0-nightly.20220208\":\"99.0.4767.0\",\"19.0.0-nightly.20220209\":\"99.0.4767.0\",\"19.0.0-nightly.20220308\":\"100.0.4894.0\",\"19.0.0-nightly.20220309\":\"100.0.4894.0\",\"19.0.0-nightly.20220310\":\"100.0.4894.0\",\"19.0.0-nightly.20220311\":\"100.0.4894.0\",\"19.0.0-nightly.20220314\":\"100.0.4894.0\",\"19.0.0-nightly.20220315\":\"100.0.4894.0\",\"19.0.0-nightly.20220316\":\"100.0.4894.0\",\"19.0.0-nightly.20220317\":\"100.0.4894.0\",\"19.0.0-nightly.20220318\":\"100.0.4894.0\",\"19.0.0-nightly.20220321\":\"100.0.4894.0\",\"19.0.0-nightly.20220322\":\"100.0.4894.0\",\"19.0.0-nightly.20220323\":\"100.0.4894.0\",\"19.0.0-nightly.20220324\":\"100.0.4894.0\",\"19.0.0-nightly.20220325\":\"102.0.4961.0\",\"19.0.0-nightly.20220328\":\"102.0.4962.3\",\"19.0.0-nightly.20220329\":\"102.0.4962.3\",\"19.0.0\":\"102.0.5005.61\",\"19.0.1\":\"102.0.5005.61\",\"19.0.2\":\"102.0.5005.63\",\"19.0.3\":\"102.0.5005.63\",\"19.0.4\":\"102.0.5005.63\",\"19.0.5\":\"102.0.5005.115\",\"19.0.6\":\"102.0.5005.115\",\"19.0.7\":\"102.0.5005.134\",\"19.0.8\":\"102.0.5005.148\",\"19.0.9\":\"102.0.5005.167\",\"19.0.10\":\"102.0.5005.167\",\"19.0.11\":\"102.0.5005.167\",\"19.0.12\":\"102.0.5005.167\",\"19.0.13\":\"102.0.5005.167\",\"19.0.14\":\"102.0.5005.167\",\"19.0.15\":\"102.0.5005.167\",\"19.0.16\":\"102.0.5005.167\",\"19.0.17\":\"102.0.5005.167\",\"19.1.0\":\"102.0.5005.167\",\"19.1.1\":\"102.0.5005.167\",\"19.1.2\":\"102.0.5005.167\",\"19.1.3\":\"102.0.5005.167\",\"19.1.4\":\"102.0.5005.167\",\"19.1.5\":\"102.0.5005.167\",\"19.1.6\":\"102.0.5005.167\",\"19.1.7\":\"102.0.5005.167\",\"19.1.8\":\"102.0.5005.167\",\"19.1.9\":\"102.0.5005.167\",\"20.0.0-alpha.1\":\"103.0.5044.0\",\"20.0.0-alpha.2\":\"104.0.5073.0\",\"20.0.0-alpha.3\":\"104.0.5073.0\",\"20.0.0-alpha.4\":\"104.0.5073.0\",\"20.0.0-alpha.5\":\"104.0.5073.0\",\"20.0.0-alpha.6\":\"104.0.5073.0\",\"20.0.0-alpha.7\":\"104.0.5073.0\",\"20.0.0-beta.1\":\"104.0.5073.0\",\"20.0.0-beta.2\":\"104.0.5073.0\",\"20.0.0-beta.3\":\"104.0.5073.0\",\"20.0.0-beta.4\":\"104.0.5073.0\",\"20.0.0-beta.5\":\"104.0.5073.0\",\"20.0.0-beta.6\":\"104.0.5073.0\",\"20.0.0-beta.7\":\"104.0.5073.0\",\"20.0.0-beta.8\":\"104.0.5073.0\",\"20.0.0-beta.9\":\"104.0.5112.39\",\"20.0.0-beta.10\":\"104.0.5112.48\",\"20.0.0-beta.11\":\"104.0.5112.48\",\"20.0.0-beta.12\":\"104.0.5112.48\",\"20.0.0-beta.13\":\"104.0.5112.57\",\"20.0.0-nightly.20220330\":\"102.0.4962.3\",\"20.0.0-nightly.20220411\":\"102.0.4971.0\",\"20.0.0-nightly.20220414\":\"102.0.4989.0\",\"20.0.0-nightly.20220415\":\"102.0.4989.0\",\"20.0.0-nightly.20220418\":\"102.0.4989.0\",\"20.0.0-nightly.20220419\":\"102.0.4989.0\",\"20.0.0-nightly.20220420\":\"102.0.4989.0\",\"20.0.0-nightly.20220421\":\"102.0.4989.0\",\"20.0.0-nightly.20220425\":\"102.0.4999.0\",\"20.0.0-nightly.20220426\":\"102.0.4999.0\",\"20.0.0-nightly.20220427\":\"102.0.4999.0\",\"20.0.0-nightly.20220428\":\"102.0.4999.0\",\"20.0.0-nightly.20220429\":\"102.0.4999.0\",\"20.0.0-nightly.20220502\":\"102.0.4999.0\",\"20.0.0-nightly.20220503\":\"102.0.4999.0\",\"20.0.0-nightly.20220504\":\"102.0.4999.0\",\"20.0.0-nightly.20220505\":\"102.0.4999.0\",\"20.0.0-nightly.20220506\":\"102.0.4999.0\",\"20.0.0-nightly.20220509\":\"102.0.4999.0\",\"20.0.0-nightly.20220511\":\"102.0.4999.0\",\"20.0.0-nightly.20220512\":\"102.0.4999.0\",\"20.0.0-nightly.20220513\":\"102.0.4999.0\",\"20.0.0-nightly.20220516\":\"102.0.4999.0\",\"20.0.0-nightly.20220517\":\"102.0.4999.0\",\"20.0.0-nightly.20220518\":\"103.0.5044.0\",\"20.0.0-nightly.20220519\":\"103.0.5044.0\",\"20.0.0-nightly.20220520\":\"103.0.5044.0\",\"20.0.0-nightly.20220523\":\"103.0.5044.0\",\"20.0.0-nightly.20220524\":\"103.0.5044.0\",\"20.0.0\":\"104.0.5112.65\",\"20.0.1\":\"104.0.5112.81\",\"20.0.2\":\"104.0.5112.81\",\"20.0.3\":\"104.0.5112.81\",\"20.1.0\":\"104.0.5112.102\",\"20.1.1\":\"104.0.5112.102\",\"20.1.2\":\"104.0.5112.114\",\"20.1.3\":\"104.0.5112.114\",\"20.1.4\":\"104.0.5112.114\",\"20.2.0\":\"104.0.5112.124\",\"20.3.0\":\"104.0.5112.124\",\"20.3.1\":\"104.0.5112.124\",\"20.3.2\":\"104.0.5112.124\",\"20.3.3\":\"104.0.5112.124\",\"20.3.4\":\"104.0.5112.124\",\"20.3.5\":\"104.0.5112.124\",\"20.3.6\":\"104.0.5112.124\",\"20.3.7\":\"104.0.5112.124\",\"20.3.8\":\"104.0.5112.124\",\"20.3.9\":\"104.0.5112.124\",\"20.3.10\":\"104.0.5112.124\",\"20.3.11\":\"104.0.5112.124\",\"20.3.12\":\"104.0.5112.124\",\"21.0.0-alpha.1\":\"105.0.5187.0\",\"21.0.0-alpha.2\":\"105.0.5187.0\",\"21.0.0-alpha.3\":\"105.0.5187.0\",\"21.0.0-alpha.4\":\"105.0.5187.0\",\"21.0.0-alpha.5\":\"105.0.5187.0\",\"21.0.0-alpha.6\":\"106.0.5216.0\",\"21.0.0-beta.1\":\"106.0.5216.0\",\"21.0.0-beta.2\":\"106.0.5216.0\",\"21.0.0-beta.3\":\"106.0.5216.0\",\"21.0.0-beta.4\":\"106.0.5216.0\",\"21.0.0-beta.5\":\"106.0.5216.0\",\"21.0.0-beta.6\":\"106.0.5249.40\",\"21.0.0-beta.7\":\"106.0.5249.40\",\"21.0.0-beta.8\":\"106.0.5249.40\",\"21.0.0-nightly.20220526\":\"103.0.5044.0\",\"21.0.0-nightly.20220527\":\"103.0.5044.0\",\"21.0.0-nightly.20220530\":\"103.0.5044.0\",\"21.0.0-nightly.20220531\":\"103.0.5044.0\",\"21.0.0-nightly.20220602\":\"104.0.5073.0\",\"21.0.0-nightly.20220603\":\"104.0.5073.0\",\"21.0.0-nightly.20220606\":\"104.0.5073.0\",\"21.0.0-nightly.20220607\":\"104.0.5073.0\",\"21.0.0-nightly.20220608\":\"104.0.5073.0\",\"21.0.0-nightly.20220609\":\"104.0.5073.0\",\"21.0.0-nightly.20220610\":\"104.0.5073.0\",\"21.0.0-nightly.20220613\":\"104.0.5073.0\",\"21.0.0-nightly.20220614\":\"104.0.5073.0\",\"21.0.0-nightly.20220615\":\"104.0.5073.0\",\"21.0.0-nightly.20220616\":\"104.0.5073.0\",\"21.0.0-nightly.20220617\":\"104.0.5073.0\",\"21.0.0-nightly.20220620\":\"104.0.5073.0\",\"21.0.0-nightly.20220621\":\"104.0.5073.0\",\"21.0.0-nightly.20220622\":\"104.0.5073.0\",\"21.0.0-nightly.20220623\":\"104.0.5073.0\",\"21.0.0-nightly.20220624\":\"104.0.5073.0\",\"21.0.0-nightly.20220627\":\"104.0.5073.0\",\"21.0.0-nightly.20220628\":\"105.0.5129.0\",\"21.0.0-nightly.20220629\":\"105.0.5129.0\",\"21.0.0-nightly.20220630\":\"105.0.5129.0\",\"21.0.0-nightly.20220701\":\"105.0.5129.0\",\"21.0.0-nightly.20220704\":\"105.0.5129.0\",\"21.0.0-nightly.20220705\":\"105.0.5129.0\",\"21.0.0-nightly.20220706\":\"105.0.5129.0\",\"21.0.0-nightly.20220707\":\"105.0.5129.0\",\"21.0.0-nightly.20220708\":\"105.0.5129.0\",\"21.0.0-nightly.20220711\":\"105.0.5129.0\",\"21.0.0-nightly.20220712\":\"105.0.5129.0\",\"21.0.0-nightly.20220713\":\"105.0.5129.0\",\"21.0.0-nightly.20220715\":\"105.0.5173.0\",\"21.0.0-nightly.20220718\":\"105.0.5173.0\",\"21.0.0-nightly.20220719\":\"105.0.5173.0\",\"21.0.0-nightly.20220720\":\"105.0.5187.0\",\"21.0.0-nightly.20220721\":\"105.0.5187.0\",\"21.0.0-nightly.20220722\":\"105.0.5187.0\",\"21.0.0-nightly.20220725\":\"105.0.5187.0\",\"21.0.0-nightly.20220726\":\"105.0.5187.0\",\"21.0.0-nightly.20220727\":\"105.0.5187.0\",\"21.0.0-nightly.20220728\":\"105.0.5187.0\",\"21.0.0-nightly.20220801\":\"105.0.5187.0\",\"21.0.0-nightly.20220802\":\"105.0.5187.0\",\"21.0.0\":\"106.0.5249.51\",\"21.0.1\":\"106.0.5249.61\",\"21.1.0\":\"106.0.5249.91\",\"21.1.1\":\"106.0.5249.103\",\"21.2.0\":\"106.0.5249.119\",\"21.2.1\":\"106.0.5249.165\",\"21.2.2\":\"106.0.5249.168\",\"21.2.3\":\"106.0.5249.168\",\"21.3.0\":\"106.0.5249.181\",\"21.3.1\":\"106.0.5249.181\",\"21.3.3\":\"106.0.5249.199\",\"21.3.4\":\"106.0.5249.199\",\"21.3.5\":\"106.0.5249.199\",\"21.4.0\":\"106.0.5249.199\",\"21.4.1\":\"106.0.5249.199\",\"21.4.2\":\"106.0.5249.199\",\"21.4.3\":\"106.0.5249.199\",\"22.0.0-alpha.1\":\"107.0.5286.0\",\"22.0.0-alpha.3\":\"108.0.5329.0\",\"22.0.0-alpha.4\":\"108.0.5329.0\",\"22.0.0-alpha.5\":\"108.0.5329.0\",\"22.0.0-alpha.6\":\"108.0.5329.0\",\"22.0.0-alpha.7\":\"108.0.5355.0\",\"22.0.0-alpha.8\":\"108.0.5359.10\",\"22.0.0-beta.1\":\"108.0.5359.10\",\"22.0.0-beta.2\":\"108.0.5359.10\",\"22.0.0-beta.3\":\"108.0.5359.10\",\"22.0.0-beta.4\":\"108.0.5359.29\",\"22.0.0-beta.5\":\"108.0.5359.40\",\"22.0.0-beta.6\":\"108.0.5359.40\",\"22.0.0-beta.7\":\"108.0.5359.48\",\"22.0.0-beta.8\":\"108.0.5359.48\",\"22.0.0-nightly.20220808\":\"105.0.5187.0\",\"22.0.0-nightly.20220809\":\"105.0.5187.0\",\"22.0.0-nightly.20220810\":\"105.0.5187.0\",\"22.0.0-nightly.20220811\":\"105.0.5187.0\",\"22.0.0-nightly.20220812\":\"105.0.5187.0\",\"22.0.0-nightly.20220815\":\"105.0.5187.0\",\"22.0.0-nightly.20220816\":\"105.0.5187.0\",\"22.0.0-nightly.20220817\":\"105.0.5187.0\",\"22.0.0-nightly.20220822\":\"106.0.5216.0\",\"22.0.0-nightly.20220823\":\"106.0.5216.0\",\"22.0.0-nightly.20220824\":\"106.0.5216.0\",\"22.0.0-nightly.20220825\":\"106.0.5216.0\",\"22.0.0-nightly.20220829\":\"106.0.5216.0\",\"22.0.0-nightly.20220830\":\"106.0.5216.0\",\"22.0.0-nightly.20220831\":\"106.0.5216.0\",\"22.0.0-nightly.20220901\":\"106.0.5216.0\",\"22.0.0-nightly.20220902\":\"106.0.5216.0\",\"22.0.0-nightly.20220905\":\"106.0.5216.0\",\"22.0.0-nightly.20220908\":\"107.0.5274.0\",\"22.0.0-nightly.20220909\":\"107.0.5286.0\",\"22.0.0-nightly.20220912\":\"107.0.5286.0\",\"22.0.0-nightly.20220913\":\"107.0.5286.0\",\"22.0.0-nightly.20220914\":\"107.0.5286.0\",\"22.0.0-nightly.20220915\":\"107.0.5286.0\",\"22.0.0-nightly.20220916\":\"107.0.5286.0\",\"22.0.0-nightly.20220919\":\"107.0.5286.0\",\"22.0.0-nightly.20220920\":\"107.0.5286.0\",\"22.0.0-nightly.20220921\":\"107.0.5286.0\",\"22.0.0-nightly.20220922\":\"107.0.5286.0\",\"22.0.0-nightly.20220923\":\"107.0.5286.0\",\"22.0.0-nightly.20220926\":\"107.0.5286.0\",\"22.0.0-nightly.20220927\":\"107.0.5286.0\",\"22.0.0-nightly.20220928\":\"107.0.5286.0\",\"22.0.0\":\"108.0.5359.62\",\"22.0.1\":\"108.0.5359.125\",\"22.0.2\":\"108.0.5359.179\",\"22.0.3\":\"108.0.5359.179\",\"22.1.0\":\"108.0.5359.179\",\"22.2.0\":\"108.0.5359.215\",\"22.2.1\":\"108.0.5359.215\",\"22.3.0\":\"108.0.5359.215\",\"22.3.1\":\"108.0.5359.215\",\"22.3.2\":\"108.0.5359.215\",\"22.3.3\":\"108.0.5359.215\",\"23.0.0-alpha.1\":\"110.0.5415.0\",\"23.0.0-alpha.2\":\"110.0.5451.0\",\"23.0.0-alpha.3\":\"110.0.5451.0\",\"23.0.0-beta.1\":\"110.0.5478.5\",\"23.0.0-beta.2\":\"110.0.5478.5\",\"23.0.0-beta.3\":\"110.0.5478.5\",\"23.0.0-beta.4\":\"110.0.5481.30\",\"23.0.0-beta.5\":\"110.0.5481.38\",\"23.0.0-beta.6\":\"110.0.5481.52\",\"23.0.0-beta.8\":\"110.0.5481.52\",\"23.0.0-nightly.20220929\":\"107.0.5286.0\",\"23.0.0-nightly.20220930\":\"107.0.5286.0\",\"23.0.0-nightly.20221003\":\"107.0.5286.0\",\"23.0.0-nightly.20221004\":\"108.0.5329.0\",\"23.0.0-nightly.20221005\":\"108.0.5329.0\",\"23.0.0-nightly.20221006\":\"108.0.5329.0\",\"23.0.0-nightly.20221007\":\"108.0.5329.0\",\"23.0.0-nightly.20221010\":\"108.0.5329.0\",\"23.0.0-nightly.20221011\":\"108.0.5329.0\",\"23.0.0-nightly.20221012\":\"108.0.5329.0\",\"23.0.0-nightly.20221013\":\"108.0.5329.0\",\"23.0.0-nightly.20221014\":\"108.0.5329.0\",\"23.0.0-nightly.20221017\":\"108.0.5329.0\",\"23.0.0-nightly.20221018\":\"108.0.5355.0\",\"23.0.0-nightly.20221019\":\"108.0.5355.0\",\"23.0.0-nightly.20221020\":\"108.0.5355.0\",\"23.0.0-nightly.20221021\":\"108.0.5355.0\",\"23.0.0-nightly.20221024\":\"108.0.5355.0\",\"23.0.0-nightly.20221026\":\"108.0.5355.0\",\"23.0.0-nightly.20221027\":\"109.0.5382.0\",\"23.0.0-nightly.20221028\":\"109.0.5382.0\",\"23.0.0-nightly.20221031\":\"109.0.5382.0\",\"23.0.0-nightly.20221101\":\"109.0.5382.0\",\"23.0.0-nightly.20221102\":\"109.0.5382.0\",\"23.0.0-nightly.20221103\":\"109.0.5382.0\",\"23.0.0-nightly.20221104\":\"109.0.5382.0\",\"23.0.0-nightly.20221107\":\"109.0.5382.0\",\"23.0.0-nightly.20221108\":\"109.0.5382.0\",\"23.0.0-nightly.20221109\":\"109.0.5382.0\",\"23.0.0-nightly.20221110\":\"109.0.5382.0\",\"23.0.0-nightly.20221111\":\"109.0.5382.0\",\"23.0.0-nightly.20221114\":\"109.0.5382.0\",\"23.0.0-nightly.20221115\":\"109.0.5382.0\",\"23.0.0-nightly.20221116\":\"109.0.5382.0\",\"23.0.0-nightly.20221117\":\"109.0.5382.0\",\"23.0.0-nightly.20221118\":\"110.0.5415.0\",\"23.0.0-nightly.20221121\":\"110.0.5415.0\",\"23.0.0-nightly.20221122\":\"110.0.5415.0\",\"23.0.0-nightly.20221123\":\"110.0.5415.0\",\"23.0.0-nightly.20221124\":\"110.0.5415.0\",\"23.0.0-nightly.20221125\":\"110.0.5415.0\",\"23.0.0-nightly.20221128\":\"110.0.5415.0\",\"23.0.0-nightly.20221129\":\"110.0.5415.0\",\"23.0.0-nightly.20221130\":\"110.0.5415.0\",\"23.0.0\":\"110.0.5481.77\",\"23.1.0\":\"110.0.5481.100\",\"23.1.1\":\"110.0.5481.104\",\"23.1.2\":\"110.0.5481.177\",\"23.1.3\":\"110.0.5481.179\",\"23.1.4\":\"110.0.5481.192\",\"24.0.0-alpha.1\":\"111.0.5560.0\",\"24.0.0-alpha.2\":\"111.0.5560.0\",\"24.0.0-alpha.3\":\"111.0.5560.0\",\"24.0.0-alpha.4\":\"111.0.5560.0\",\"24.0.0-alpha.5\":\"111.0.5560.0\",\"24.0.0-alpha.6\":\"111.0.5560.0\",\"24.0.0-alpha.7\":\"111.0.5560.0\",\"24.0.0-beta.1\":\"111.0.5563.50\",\"24.0.0-beta.2\":\"111.0.5563.50\",\"24.0.0-beta.3\":\"112.0.5615.20\",\"24.0.0-nightly.20221201\":\"110.0.5415.0\",\"24.0.0-nightly.20221202\":\"110.0.5415.0\",\"24.0.0-nightly.20221205\":\"110.0.5415.0\",\"24.0.0-nightly.20221206\":\"110.0.5451.0\",\"24.0.0-nightly.20221207\":\"110.0.5451.0\",\"24.0.0-nightly.20221208\":\"110.0.5451.0\",\"24.0.0-nightly.20221213\":\"110.0.5451.0\",\"24.0.0-nightly.20221214\":\"110.0.5451.0\",\"24.0.0-nightly.20221215\":\"110.0.5451.0\",\"24.0.0-nightly.20221216\":\"110.0.5451.0\",\"24.0.0-nightly.20230109\":\"111.0.5518.0\",\"24.0.0-nightly.20230110\":\"111.0.5518.0\",\"24.0.0-nightly.20230111\":\"111.0.5518.0\",\"24.0.0-nightly.20230112\":\"111.0.5518.0\",\"24.0.0-nightly.20230113\":\"111.0.5518.0\",\"24.0.0-nightly.20230116\":\"111.0.5518.0\",\"24.0.0-nightly.20230117\":\"111.0.5518.0\",\"24.0.0-nightly.20230118\":\"111.0.5518.0\",\"24.0.0-nightly.20230119\":\"111.0.5518.0\",\"24.0.0-nightly.20230120\":\"111.0.5518.0\",\"24.0.0-nightly.20230123\":\"111.0.5518.0\",\"24.0.0-nightly.20230124\":\"111.0.5518.0\",\"24.0.0-nightly.20230125\":\"111.0.5518.0\",\"24.0.0-nightly.20230126\":\"111.0.5518.0\",\"24.0.0-nightly.20230127\":\"111.0.5518.0\",\"24.0.0-nightly.20230131\":\"111.0.5518.0\",\"24.0.0-nightly.20230201\":\"111.0.5518.0\",\"24.0.0-nightly.20230202\":\"111.0.5518.0\",\"24.0.0-nightly.20230203\":\"111.0.5560.0\",\"24.0.0-nightly.20230206\":\"111.0.5560.0\",\"24.0.0-nightly.20230207\":\"111.0.5560.0\",\"24.0.0-nightly.20230208\":\"111.0.5560.0\",\"24.0.0-nightly.20230209\":\"111.0.5560.0\",\"25.0.0-nightly.20230210\":\"111.0.5560.0\",\"25.0.0-nightly.20230214\":\"111.0.5560.0\",\"25.0.0-nightly.20230215\":\"111.0.5560.0\",\"25.0.0-nightly.20230216\":\"111.0.5560.0\",\"25.0.0-nightly.20230217\":\"111.0.5560.0\",\"25.0.0-nightly.20230220\":\"111.0.5560.0\",\"25.0.0-nightly.20230221\":\"111.0.5560.0\",\"25.0.0-nightly.20230222\":\"111.0.5560.0\",\"25.0.0-nightly.20230223\":\"111.0.5560.0\",\"25.0.0-nightly.20230224\":\"111.0.5560.0\",\"25.0.0-nightly.20230227\":\"111.0.5560.0\",\"25.0.0-nightly.20230228\":\"111.0.5560.0\",\"25.0.0-nightly.20230301\":\"111.0.5560.0\",\"25.0.0-nightly.20230302\":\"111.0.5560.0\",\"25.0.0-nightly.20230303\":\"111.0.5560.0\",\"25.0.0-nightly.20230306\":\"111.0.5560.0\",\"25.0.0-nightly.20230307\":\"111.0.5560.0\",\"25.0.0-nightly.20230308\":\"111.0.5560.0\",\"25.0.0-nightly.20230309\":\"111.0.5560.0\",\"25.0.0-nightly.20230310\":\"111.0.5560.0\",\"25.0.0-nightly.20230314\":\"113.0.5636.0\",\"25.0.0-nightly.20230315\":\"113.0.5651.0\",\"25.0.0-nightly.20230317\":\"113.0.5653.0\"}/README.md\u0019<### Made by [@kilianvalkhof](https://twitter.com/kilianvalkhof)\n\n#### Other projects:\n\n- 💻 [Polypane](https://polypane.app) - Develop responsive websites and apps twice as fast on multiple screens at once\n- 🖌️ [Superposition](https://superposition.design) - Kickstart your design system by extracting design tokens from your website\n- 🗒️ [FromScratch](https://fromscratch.rocks) - A smart but simple autosaving scratchpad\n\n---\n\n# Electron-to-Chromium [![npm](https://img.shields.io/npm/v/electron-to-chromium.svg)](https://www.npmjs.com/package/electron-to-chromium) [![travis](https://img.shields.io/travis/Kilian/electron-to-chromium/master.svg)](https://travis-ci.org/Kilian/electron-to-chromium) [![npm-downloads](https://img.shields.io/npm/dm/electron-to-chromium.svg)](https://www.npmjs.com/package/electron-to-chromium) [![codecov](https://codecov.io/gh/Kilian/electron-to-chromium/branch/master/graph/badge.svg)](https://codecov.io/gh/Kilian/electron-to-chromium)[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2FKilian%2Felectron-to-chromium.svg?type=shield)](https://app.fossa.io/projects/git%2Bgithub.com%2FKilian%2Felectron-to-chromium?ref=badge_shield)\n\nThis repository provides a mapping of Electron versions to the Chromium version that it uses.\n\nThis package is used in [Browserslist](https://github.com/ai/browserslist), so you can use e.g. `electron >= 1.4` in [Autoprefixer](https://github.com/postcss/autoprefixer), [Stylelint](https://github.com/stylelint/stylelint), [babel-preset-env](https://github.com/babel/babel-preset-env) and [eslint-plugin-compat](https://github.com/amilajack/eslint-plugin-compat).\n\n**Supported by:**\n\n  <a href=\"https://m.do.co/c/bb22ea58e765\">\n    <img src=\"https://opensource.nyc3.cdn.digitaloceanspaces.com/attribution/assets/SVG/DO_Logo_horizontal_blue.svg\" width=\"201px\">\n  </a>\n\n\n## Install\nInstall using `npm install electron-to-chromium`.\n\n## Usage\nTo include Electron-to-Chromium, require it:\n\n```js\nvar e2c = require('electron-to-chromium');\n```\n\n### Properties\nThe Electron-to-Chromium object has 4 properties to use:\n\n#### `versions`\nAn object of key-value pairs with a _major_ Electron version as the key, and the corresponding major Chromium version as the value.\n\n```js\nvar versions = e2c.versions;\nconsole.log(versions['1.4']);\n// returns \"53\"\n```\n\n#### `fullVersions`\nAn object of key-value pairs with a Electron version as the key, and the corresponding full Chromium version as the value.\n\n```js\nvar versions = e2c.fullVersions;\nconsole.log(versions['1.4.11']);\n// returns \"53.0.2785.143\"\n```\n\n#### `chromiumVersions`\nAn object of key-value pairs with a _major_ Chromium version as the key, and the corresponding major Electron version as the value.\n\n```js\nvar versions = e2c.chromiumVersions;\nconsole.log(versions['54']);\n// returns \"1.4\"\n```\n\n#### `fullChromiumVersions`\nAn object of key-value pairs with a Chromium version as the key, and an array of the corresponding major Electron versions as the value.\n\n```js\nvar versions = e2c.fullChromiumVersions;\nconsole.log(versions['54.0.2840.101']);\n// returns [\"1.5.1\", \"1.5.0\"]\n```\n### Functions\n\n#### `electronToChromium(query)`\nArguments:\n* Query: string or number, required. A major or full Electron version.\n\nA function that returns the corresponding Chromium version for a given Electron function. Returns a string.\n\nIf you provide it with a major Electron version, it will return a major Chromium version:\n\n```js\nvar chromeVersion = e2c.electronToChromium('1.4');\n// chromeVersion is \"53\"\n```\n\nIf you provide it with a full Electron version, it will return the full Chromium version.\n\n```js\nvar chromeVersion = e2c.electronToChromium('1.4.11');\n// chromeVersion is \"53.0.2785.143\"\n```\n\nIf a query does not match a Chromium version, it will return `undefined`.\n\n```js\nvar chromeVersion = e2c.electronToChromium('9000');\n// chromeVersion is undefined\n```\n\n#### `chromiumToElectron(query)`\nArguments:\n* Query: string or number, required. A major or full Chromium version.\n\nReturns a string with the corresponding Electron version for a given Chromium query.\n\nIf you provide it with a major Chromium version, it will return a major Electron version:\n\n```js\nvar electronVersion = e2c.chromiumToElectron('54');\n// electronVersion is \"1.4\"\n```\n\nIf you provide it with a full Chrome version, it will return an array of full Electron versions.\n\n```js\nvar electronVersions = e2c.chromiumToElectron('56.0.2924.87');\n// electronVersions is [\"1.6.3\", \"1.6.2\", \"1.6.1\", \"1.6.0\"]\n```\n\nIf a query does not match an Electron version, it will return `undefined`.\n\n```js\nvar electronVersion = e2c.chromiumToElectron('10');\n// electronVersion is undefined\n```\n\n#### `electronToBrowserList(query)` **DEPRECATED**\nArguments:\n* Query: string or number, required. A major Electron version.\n\n_**Deprecated**: Browserlist already includes electron-to-chromium._\n\nA function that returns a [Browserslist](https://github.com/ai/browserslist) query that matches the given major Electron version. Returns a string.\n\nIf you provide it with a major Electron version, it will return a Browserlist query string that matches the Chromium capabilities:\n\n```js\nvar query = e2c.electronToBrowserList('1.4');\n// query is \"Chrome >= 53\"\n```\n\nIf a query does not match a Chromium version, it will return `undefined`.\n\n```js\nvar query = e2c.electronToBrowserList('9000');\n// query is undefined\n```\n\n### Importing just versions, fullVersions, chromiumVersions and fullChromiumVersions\nAll lists can be imported on their own, if file size is a concern.\n\n#### `versions`\n\n```js\nvar versions = require('electron-to-chromium/versions');\n```\n\n#### `fullVersions`\n\n```js\nvar fullVersions = require('electron-to-chromium/full-versions');\n```\n\n#### `chromiumVersions`\n\n```js\nvar chromiumVersions = require('electron-to-chromium/chromium-versions');\n```\n\n#### `fullChromiumVersions`\n\n```js\nvar fullChromiumVersions = require('electron-to-chromium/full-chromium-versions');\n```\n\n## Updating\nThis package will be updated with each new Electron release.\n\nTo update the list, run `npm run build.js`. Requires internet access as it downloads from the canonical list of Electron versions.\n\nTo verify correct behaviour, run `npm test`.\n\n\n## License\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2FKilian%2Felectron-to-chromium.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2FKilian%2Felectron-to-chromium?ref=badge_large)\n/chromium-versions.json\u0002u{\"39\":\"0.20\",\"40\":\"0.21\",\"41\":\"0.21\",\"42\":\"0.25\",\"43\":\"0.27\",\"44\":\"0.30\",\"45\":\"0.31\",\"47\":\"0.36\",\"49\":\"0.37\",\"50\":\"1.1\",\"51\":\"1.2\",\"52\":\"1.3\",\"53\":\"1.4\",\"54\":\"1.4\",\"56\":\"1.6\",\"58\":\"1.7\",\"59\":\"1.8\",\"61\":\"2.0\",\"66\":\"3.0\",\"69\":\"4.0\",\"72\":\"5.0\",\"73\":\"5.0\",\"76\":\"6.0\",\"78\":\"7.0\",\"79\":\"8.0\",\"80\":\"8.0\",\"82\":\"9.0\",\"83\":\"9.0\",\"84\":\"10.0\",\"85\":\"10.0\",\"86\":\"11.0\",\"87\":\"11.0\",\"89\":\"12.0\",\"90\":\"13.0\",\"91\":\"13.0\",\"92\":\"14.0\",\"93\":\"14.0\",\"94\":\"15.0\",\"95\":\"16.0\",\"96\":\"16.0\",\"98\":\"17.0\",\"99\":\"18.0\",\"100\":\"18.0\",\"102\":\"19.0\",\"103\":\"20.0\",\"104\":\"20.0\",\"105\":\"21.0\",\"106\":\"21.0\",\"107\":\"22.0\",\"108\":\"22.0\",\"110\":\"23.0\",\"111\":\"24.0\",\"112\":\"24.0\"}/full-chromium-versions.jsŬ9module.exports = {\n\t\"39.0.2171.65\": [\n\t\t\"0.20.0\",\n\t\t\"0.20.1\",\n\t\t\"0.20.2\",\n\t\t\"0.20.3\",\n\t\t\"0.20.4\",\n\t\t\"0.20.5\",\n\t\t\"0.20.6\",\n\t\t\"0.20.7\",\n\t\t\"0.20.8\"\n\t],\n\t\"40.0.2214.91\": [\n\t\t\"0.21.0\",\n\t\t\"0.21.1\",\n\t\t\"0.21.2\"\n\t],\n\t\"41.0.2272.76\": [\n\t\t\"0.21.3\",\n\t\t\"0.22.1\",\n\t\t\"0.22.2\",\n\t\t\"0.22.3\",\n\t\t\"0.23.0\",\n\t\t\"0.24.0\"\n\t],\n\t\"42.0.2311.107\": [\n\t\t\"0.25.0\",\n\t\t\"0.25.1\",\n\t\t\"0.25.2\",\n\t\t\"0.25.3\",\n\t\t\"0.26.0\",\n\t\t\"0.26.1\",\n\t\t\"0.27.0\",\n\t\t\"0.27.1\"\n\t],\n\t\"43.0.2357.65\": [\n\t\t\"0.27.2\",\n\t\t\"0.27.3\",\n\t\t\"0.28.0\",\n\t\t\"0.28.1\",\n\t\t\"0.28.2\",\n\t\t\"0.28.3\",\n\t\t\"0.29.1\",\n\t\t\"0.29.2\"\n\t],\n\t\"44.0.2403.125\": [\n\t\t\"0.30.4\",\n\t\t\"0.31.0\"\n\t],\n\t\"45.0.2454.85\": [\n\t\t\"0.31.2\",\n\t\t\"0.32.2\",\n\t\t\"0.32.3\",\n\t\t\"0.33.0\",\n\t\t\"0.33.1\",\n\t\t\"0.33.2\",\n\t\t\"0.33.3\",\n\t\t\"0.33.4\",\n\t\t\"0.33.6\",\n\t\t\"0.33.7\",\n\t\t\"0.33.8\",\n\t\t\"0.33.9\",\n\t\t\"0.34.0\",\n\t\t\"0.34.1\",\n\t\t\"0.34.2\",\n\t\t\"0.34.3\",\n\t\t\"0.34.4\",\n\t\t\"0.35.1\",\n\t\t\"0.35.2\",\n\t\t\"0.35.3\",\n\t\t\"0.35.4\",\n\t\t\"0.35.5\"\n\t],\n\t\"47.0.2526.73\": [\n\t\t\"0.36.0\",\n\t\t\"0.36.2\",\n\t\t\"0.36.3\",\n\t\t\"0.36.4\"\n\t],\n\t\"47.0.2526.110\": [\n\t\t\"0.36.5\",\n\t\t\"0.36.6\",\n\t\t\"0.36.7\",\n\t\t\"0.36.8\",\n\t\t\"0.36.9\",\n\t\t\"0.36.10\",\n\t\t\"0.36.11\",\n\t\t\"0.36.12\"\n\t],\n\t\"49.0.2623.75\": [\n\t\t\"0.37.0\",\n\t\t\"0.37.1\",\n\t\t\"0.37.3\",\n\t\t\"0.37.4\",\n\t\t\"0.37.5\",\n\t\t\"0.37.6\",\n\t\t\"0.37.7\",\n\t\t\"0.37.8\",\n\t\t\"1.0.0\",\n\t\t\"1.0.1\",\n\t\t\"1.0.2\"\n\t],\n\t\"50.0.2661.102\": [\n\t\t\"1.1.0\",\n\t\t\"1.1.1\",\n\t\t\"1.1.2\",\n\t\t\"1.1.3\"\n\t],\n\t\"51.0.2704.63\": [\n\t\t\"1.2.0\",\n\t\t\"1.2.1\"\n\t],\n\t\"51.0.2704.84\": [\n\t\t\"1.2.2\",\n\t\t\"1.2.3\"\n\t],\n\t\"51.0.2704.103\": [\n\t\t\"1.2.4\",\n\t\t\"1.2.5\"\n\t],\n\t\"51.0.2704.106\": [\n\t\t\"1.2.6\",\n\t\t\"1.2.7\",\n\t\t\"1.2.8\"\n\t],\n\t\"52.0.2743.82\": [\n\t\t\"1.3.0\",\n\t\t\"1.3.1\",\n\t\t\"1.3.2\",\n\t\t\"1.3.3\",\n\t\t\"1.3.4\",\n\t\t\"1.3.5\",\n\t\t\"1.3.6\",\n\t\t\"1.3.7\",\n\t\t\"1.3.9\",\n\t\t\"1.3.10\",\n\t\t\"1.3.13\",\n\t\t\"1.3.14\",\n\t\t\"1.3.15\"\n\t],\n\t\"53.0.2785.113\": [\n\t\t\"1.4.0\",\n\t\t\"1.4.1\",\n\t\t\"1.4.2\",\n\t\t\"1.4.3\",\n\t\t\"1.4.4\",\n\t\t\"1.4.5\"\n\t],\n\t\"53.0.2785.143\": [\n\t\t\"1.4.6\",\n\t\t\"1.4.7\",\n\t\t\"1.4.8\",\n\t\t\"1.4.10\",\n\t\t\"1.4.11\",\n\t\t\"1.4.13\",\n\t\t\"1.4.14\",\n\t\t\"1.4.15\",\n\t\t\"1.4.16\"\n\t],\n\t\"54.0.2840.51\": [\n\t\t\"1.4.12\"\n\t],\n\t\"54.0.2840.101\": [\n\t\t\"1.5.0\",\n\t\t\"1.5.1\"\n\t],\n\t\"56.0.2924.87\": [\n\t\t\"1.6.0\",\n\t\t\"1.6.1\",\n\t\t\"1.6.2\",\n\t\t\"1.6.3\",\n\t\t\"1.6.4\",\n\t\t\"1.6.5\",\n\t\t\"1.6.6\",\n\t\t\"1.6.7\",\n\t\t\"1.6.8\",\n\t\t\"1.6.9\",\n\t\t\"1.6.10\",\n\t\t\"1.6.11\",\n\t\t\"1.6.12\",\n\t\t\"1.6.13\",\n\t\t\"1.6.14\",\n\t\t\"1.6.15\",\n\t\t\"1.6.16\",\n\t\t\"1.6.17\",\n\t\t\"1.6.18\"\n\t],\n\t\"58.0.3029.110\": [\n\t\t\"1.7.0\",\n\t\t\"1.7.1\",\n\t\t\"1.7.2\",\n\t\t\"1.7.3\",\n\t\t\"1.7.4\",\n\t\t\"1.7.5\",\n\t\t\"1.7.6\",\n\t\t\"1.7.7\",\n\t\t\"1.7.8\",\n\t\t\"1.7.9\",\n\t\t\"1.7.10\",\n\t\t\"1.7.11\",\n\t\t\"1.7.12\",\n\t\t\"1.7.13\",\n\t\t\"1.7.14\",\n\t\t\"1.7.15\",\n\t\t\"1.7.16\"\n\t],\n\t\"59.0.3071.115\": [\n\t\t\"1.8.0\",\n\t\t\"1.8.1\",\n\t\t\"1.8.2-beta.1\",\n\t\t\"1.8.2-beta.2\",\n\t\t\"1.8.2-beta.3\",\n\t\t\"1.8.2-beta.4\",\n\t\t\"1.8.2-beta.5\",\n\t\t\"1.8.2\",\n\t\t\"1.8.3\",\n\t\t\"1.8.4\",\n\t\t\"1.8.5\",\n\t\t\"1.8.6\",\n\t\t\"1.8.7\",\n\t\t\"1.8.8\"\n\t],\n\t\"61.0.3163.100\": [\n\t\t\"2.0.0-beta.1\",\n\t\t\"2.0.0-beta.2\",\n\t\t\"2.0.0-beta.3\",\n\t\t\"2.0.0-beta.4\",\n\t\t\"2.0.0-beta.5\",\n\t\t\"2.0.0-beta.6\",\n\t\t\"2.0.0-beta.7\",\n\t\t\"2.0.0-beta.8\",\n\t\t\"2.0.0\",\n\t\t\"2.0.1\",\n\t\t\"2.0.2\",\n\t\t\"2.0.3\",\n\t\t\"2.0.4\",\n\t\t\"2.0.5\",\n\t\t\"2.0.6\",\n\t\t\"2.0.7\",\n\t\t\"2.0.8-nightly.20180819\",\n\t\t\"2.0.8-nightly.20180820\",\n\t\t\"2.0.8\",\n\t\t\"2.0.9\",\n\t\t\"2.0.10\",\n\t\t\"2.0.11\",\n\t\t\"2.0.12\",\n\t\t\"2.0.13\",\n\t\t\"2.0.14\",\n\t\t\"2.0.15\",\n\t\t\"2.0.16\",\n\t\t\"2.0.17\",\n\t\t\"2.0.18\",\n\t\t\"2.1.0-unsupported.20180809\"\n\t],\n\t\"66.0.3359.181\": [\n\t\t\"3.0.0-beta.1\",\n\t\t\"3.0.0-beta.2\",\n\t\t\"3.0.0-beta.3\",\n\t\t\"3.0.0-beta.4\",\n\t\t\"3.0.0-beta.5\",\n\t\t\"3.0.0-beta.6\",\n\t\t\"3.0.0-beta.7\",\n\t\t\"3.0.0-beta.8\",\n\t\t\"3.0.0-beta.9\",\n\t\t\"3.0.0-beta.10\",\n\t\t\"3.0.0-beta.11\",\n\t\t\"3.0.0-beta.12\",\n\t\t\"3.0.0-beta.13\",\n\t\t\"3.0.0-nightly.20180818\",\n\t\t\"3.0.0-nightly.20180821\",\n\t\t\"3.0.0-nightly.20180823\",\n\t\t\"3.0.0-nightly.20180904\",\n\t\t\"3.0.0\",\n\t\t\"3.0.1\",\n\t\t\"3.0.2\",\n\t\t\"3.0.3\",\n\t\t\"3.0.4\",\n\t\t\"3.0.5\",\n\t\t\"3.0.6\",\n\t\t\"3.0.7\",\n\t\t\"3.0.8\",\n\t\t\"3.0.9\",\n\t\t\"3.0.10\",\n\t\t\"3.0.11\",\n\t\t\"3.0.12\",\n\t\t\"3.0.13\",\n\t\t\"3.0.14\",\n\t\t\"3.0.15\",\n\t\t\"3.0.16\",\n\t\t\"3.1.0-beta.1\",\n\t\t\"3.1.0-beta.2\",\n\t\t\"3.1.0-beta.3\",\n\t\t\"3.1.0-beta.4\",\n\t\t\"3.1.0-beta.5\",\n\t\t\"3.1.0\",\n\t\t\"3.1.1\",\n\t\t\"3.1.2\",\n\t\t\"3.1.3\",\n\t\t\"3.1.4\",\n\t\t\"3.1.5\",\n\t\t\"3.1.6\",\n\t\t\"3.1.7\",\n\t\t\"3.1.8\",\n\t\t\"3.1.9\",\n\t\t\"3.1.10\",\n\t\t\"3.1.11\",\n\t\t\"3.1.12\",\n\t\t\"3.1.13\",\n\t\t\"4.0.0-nightly.20180817\",\n\t\t\"4.0.0-nightly.20180819\",\n\t\t\"4.0.0-nightly.20180821\"\n\t],\n\t\"69.0.3497.106\": [\n\t\t\"4.0.0-beta.1\",\n\t\t\"4.0.0-beta.2\",\n\t\t\"4.0.0-beta.3\",\n\t\t\"4.0.0-beta.4\",\n\t\t\"4.0.0-beta.5\",\n\t\t\"4.0.0-beta.6\",\n\t\t\"4.0.0-beta.7\",\n\t\t\"4.0.0-beta.8\",\n\t\t\"4.0.0-beta.9\",\n\t\t\"4.0.0-beta.10\",\n\t\t\"4.0.0-beta.11\",\n\t\t\"4.0.0-nightly.20181010\",\n\t\t\"4.0.0\",\n\t\t\"4.0.1\",\n\t\t\"4.0.2\",\n\t\t\"4.0.3\",\n\t\t\"4.0.4\",\n\t\t\"4.0.5\",\n\t\t\"4.0.6\"\n\t],\n\t\"67.0.3396.99\": [\n\t\t\"4.0.0-nightly.20180929\"\n\t],\n\t\"68.0.3440.128\": [\n\t\t\"4.0.0-nightly.20181006\"\n\t],\n\t\"69.0.3497.128\": [\n\t\t\"4.0.7\",\n\t\t\"4.0.8\",\n\t\t\"4.1.0\",\n\t\t\"4.1.1\",\n\t\t\"4.1.2\",\n\t\t\"4.1.3\",\n\t\t\"4.1.4\",\n\t\t\"4.1.5\",\n\t\t\"4.2.0\",\n\t\t\"4.2.1\",\n\t\t\"4.2.2\",\n\t\t\"4.2.3\",\n\t\t\"4.2.4\",\n\t\t\"4.2.5\",\n\t\t\"4.2.6\",\n\t\t\"4.2.7\",\n\t\t\"4.2.8\",\n\t\t\"4.2.9\",\n\t\t\"4.2.10\",\n\t\t\"4.2.11\",\n\t\t\"4.2.12\"\n\t],\n\t\"72.0.3626.52\": [\n\t\t\"5.0.0-beta.1\",\n\t\t\"5.0.0-beta.2\",\n\t\t\"6.0.0-nightly.20190123\"\n\t],\n\t\"73.0.3683.27\": [\n\t\t\"5.0.0-beta.3\"\n\t],\n\t\"73.0.3683.54\": [\n\t\t\"5.0.0-beta.4\"\n\t],\n\t\"73.0.3683.61\": [\n\t\t\"5.0.0-beta.5\"\n\t],\n\t\"73.0.3683.84\": [\n\t\t\"5.0.0-beta.6\"\n\t],\n\t\"73.0.3683.94\": [\n\t\t\"5.0.0-beta.7\"\n\t],\n\t\"73.0.3683.104\": [\n\t\t\"5.0.0-beta.8\"\n\t],\n\t\"73.0.3683.117\": [\n\t\t\"5.0.0-beta.9\"\n\t],\n\t\"70.0.3538.110\": [\n\t\t\"5.0.0-nightly.20190107\"\n\t],\n\t\"71.0.3578.98\": [\n\t\t\"5.0.0-nightly.20190121\",\n\t\t\"5.0.0-nightly.20190122\"\n\t],\n\t\"73.0.3683.119\": [\n\t\t\"5.0.0\"\n\t],\n\t\"73.0.3683.121\": [\n\t\t\"5.0.1\",\n\t\t\"5.0.2\",\n\t\t\"5.0.3\",\n\t\t\"5.0.4\",\n\t\t\"5.0.5\",\n\t\t\"5.0.6\",\n\t\t\"5.0.7\",\n\t\t\"5.0.8\",\n\t\t\"5.0.9\",\n\t\t\"5.0.10\",\n\t\t\"5.0.11\",\n\t\t\"5.0.12\",\n\t\t\"5.0.13\"\n\t],\n\t\"76.0.3774.1\": [\n\t\t\"6.0.0-beta.1\"\n\t],\n\t\"76.0.3783.1\": [\n\t\t\"6.0.0-beta.2\",\n\t\t\"6.0.0-beta.3\",\n\t\t\"6.0.0-beta.4\"\n\t],\n\t\"76.0.3805.4\": [\n\t\t\"6.0.0-beta.5\"\n\t],\n\t\"76.0.3809.3\": [\n\t\t\"6.0.0-beta.6\"\n\t],\n\t\"76.0.3809.22\": [\n\t\t\"6.0.0-beta.7\"\n\t],\n\t\"76.0.3809.26\": [\n\t\t\"6.0.0-beta.8\",\n\t\t\"6.0.0-beta.9\"\n\t],\n\t\"76.0.3809.37\": [\n\t\t\"6.0.0-beta.10\"\n\t],\n\t\"76.0.3809.42\": [\n\t\t\"6.0.0-beta.11\"\n\t],\n\t\"76.0.3809.54\": [\n\t\t\"6.0.0-beta.12\"\n\t],\n\t\"76.0.3809.60\": [\n\t\t\"6.0.0-beta.13\"\n\t],\n\t\"76.0.3809.68\": [\n\t\t\"6.0.0-beta.14\"\n\t],\n\t\"76.0.3809.74\": [\n\t\t\"6.0.0-beta.15\"\n\t],\n\t\"72.0.3626.107\": [\n\t\t\"6.0.0-nightly.20190212\"\n\t],\n\t\"72.0.3626.110\": [\n\t\t\"6.0.0-nightly.20190213\"\n\t],\n\t\"74.0.3724.8\": [\n\t\t\"6.0.0-nightly.20190311\"\n\t],\n\t\"76.0.3809.88\": [\n\t\t\"6.0.0\"\n\t],\n\t\"76.0.3809.102\": [\n\t\t\"6.0.1\"\n\t],\n\t\"76.0.3809.110\": [\n\t\t\"6.0.2\"\n\t],\n\t\"76.0.3809.126\": [\n\t\t\"6.0.3\"\n\t],\n\t\"76.0.3809.131\": [\n\t\t\"6.0.4\"\n\t],\n\t\"76.0.3809.136\": [\n\t\t\"6.0.5\"\n\t],\n\t\"76.0.3809.138\": [\n\t\t\"6.0.6\"\n\t],\n\t\"76.0.3809.139\": [\n\t\t\"6.0.7\"\n\t],\n\t\"76.0.3809.146\": [\n\t\t\"6.0.8\",\n\t\t\"6.0.9\",\n\t\t\"6.0.10\",\n\t\t\"6.0.11\",\n\t\t\"6.0.12\",\n\t\t\"6.1.0\",\n\t\t\"6.1.1\",\n\t\t\"6.1.2\",\n\t\t\"6.1.3\",\n\t\t\"6.1.4\",\n\t\t\"6.1.5\",\n\t\t\"6.1.6\",\n\t\t\"6.1.7\",\n\t\t\"6.1.8\",\n\t\t\"6.1.9\",\n\t\t\"6.1.10\",\n\t\t\"6.1.11\",\n\t\t\"6.1.12\"\n\t],\n\t\"78.0.3866.0\": [\n\t\t\"7.0.0-beta.1\",\n\t\t\"7.0.0-beta.2\",\n\t\t\"7.0.0-beta.3\",\n\t\t\"7.0.0-nightly.20190727\",\n\t\t\"7.0.0-nightly.20190728\",\n\t\t\"7.0.0-nightly.20190729\",\n\t\t\"7.0.0-nightly.20190730\",\n\t\t\"7.0.0-nightly.20190731\",\n\t\t\"8.0.0-nightly.20190801\",\n\t\t\"8.0.0-nightly.20190802\"\n\t],\n\t\"78.0.3896.6\": [\n\t\t\"7.0.0-beta.4\"\n\t],\n\t\"78.0.3905.1\": [\n\t\t\"7.0.0-beta.5\",\n\t\t\"7.0.0-beta.6\",\n\t\t\"7.0.0-beta.7\",\n\t\t\"7.0.0\"\n\t],\n\t\"76.0.3784.0\": [\n\t\t\"7.0.0-nightly.20190521\"\n\t],\n\t\"76.0.3806.0\": [\n\t\t\"7.0.0-nightly.20190529\",\n\t\t\"7.0.0-nightly.20190530\",\n\t\t\"7.0.0-nightly.20190531\",\n\t\t\"7.0.0-nightly.20190602\",\n\t\t\"7.0.0-nightly.20190603\"\n\t],\n\t\"77.0.3814.0\": [\n\t\t\"7.0.0-nightly.20190604\"\n\t],\n\t\"77.0.3815.0\": [\n\t\t\"7.0.0-nightly.20190605\",\n\t\t\"7.0.0-nightly.20190606\",\n\t\t\"7.0.0-nightly.20190607\",\n\t\t\"7.0.0-nightly.20190608\",\n\t\t\"7.0.0-nightly.20190609\",\n\t\t\"7.0.0-nightly.20190611\",\n\t\t\"7.0.0-nightly.20190612\",\n\t\t\"7.0.0-nightly.20190613\",\n\t\t\"7.0.0-nightly.20190615\",\n\t\t\"7.0.0-nightly.20190616\",\n\t\t\"7.0.0-nightly.20190618\",\n\t\t\"7.0.0-nightly.20190619\",\n\t\t\"7.0.0-nightly.20190622\",\n\t\t\"7.0.0-nightly.20190623\",\n\t\t\"7.0.0-nightly.20190624\",\n\t\t\"7.0.0-nightly.20190627\",\n\t\t\"7.0.0-nightly.20190629\",\n\t\t\"7.0.0-nightly.20190630\",\n\t\t\"7.0.0-nightly.20190701\",\n\t\t\"7.0.0-nightly.20190702\"\n\t],\n\t\"77.0.3843.0\": [\n\t\t\"7.0.0-nightly.20190704\",\n\t\t\"7.0.0-nightly.20190705\"\n\t],\n\t\"77.0.3848.0\": [\n\t\t\"7.0.0-nightly.20190719\",\n\t\t\"7.0.0-nightly.20190720\",\n\t\t\"7.0.0-nightly.20190721\"\n\t],\n\t\"77.0.3864.0\": [\n\t\t\"7.0.0-nightly.20190726\"\n\t],\n\t\"78.0.3904.92\": [\n\t\t\"7.0.1\"\n\t],\n\t\"78.0.3904.94\": [\n\t\t\"7.1.0\"\n\t],\n\t\"78.0.3904.99\": [\n\t\t\"7.1.1\"\n\t],\n\t\"78.0.3904.113\": [\n\t\t\"7.1.2\"\n\t],\n\t\"78.0.3904.126\": [\n\t\t\"7.1.3\"\n\t],\n\t\"78.0.3904.130\": [\n\t\t\"7.1.4\",\n\t\t\"7.1.5\",\n\t\t\"7.1.6\",\n\t\t\"7.1.7\",\n\t\t\"7.1.8\",\n\t\t\"7.1.9\",\n\t\t\"7.1.10\",\n\t\t\"7.1.11\",\n\t\t\"7.1.12\",\n\t\t\"7.1.13\",\n\t\t\"7.1.14\",\n\t\t\"7.2.0\",\n\t\t\"7.2.1\",\n\t\t\"7.2.2\",\n\t\t\"7.2.3\",\n\t\t\"7.2.4\",\n\t\t\"7.3.0\",\n\t\t\"7.3.1\",\n\t\t\"7.3.2\",\n\t\t\"7.3.3\"\n\t],\n\t\"79.0.3931.0\": [\n\t\t\"8.0.0-beta.1\",\n\t\t\"8.0.0-beta.2\",\n\t\t\"8.0.0-nightly.20191019\",\n\t\t\"8.0.0-nightly.20191020\",\n\t\t\"8.0.0-nightly.20191021\",\n\t\t\"8.0.0-nightly.20191023\"\n\t],\n\t\"80.0.3955.0\": [\n\t\t\"8.0.0-beta.3\",\n\t\t\"8.0.0-beta.4\"\n\t],\n\t\"80.0.3987.14\": [\n\t\t\"8.0.0-beta.5\"\n\t],\n\t\"80.0.3987.51\": [\n\t\t\"8.0.0-beta.6\"\n\t],\n\t\"80.0.3987.59\": [\n\t\t\"8.0.0-beta.7\"\n\t],\n\t\"80.0.3987.75\": [\n\t\t\"8.0.0-beta.8\",\n\t\t\"8.0.0-beta.9\"\n\t],\n\t\"78.0.3871.0\": [\n\t\t\"8.0.0-nightly.20190803\",\n\t\t\"8.0.0-nightly.20190806\",\n\t\t\"8.0.0-nightly.20190807\",\n\t\t\"8.0.0-nightly.20190808\",\n\t\t\"8.0.0-nightly.20190809\",\n\t\t\"8.0.0-nightly.20190810\",\n\t\t\"8.0.0-nightly.20190811\",\n\t\t\"8.0.0-nightly.20190812\",\n\t\t\"8.0.0-nightly.20190813\",\n\t\t\"8.0.0-nightly.20190814\",\n\t\t\"8.0.0-nightly.20190815\"\n\t],\n\t\"78.0.3881.0\": [\n\t\t\"8.0.0-nightly.20190816\",\n\t\t\"8.0.0-nightly.20190817\",\n\t\t\"8.0.0-nightly.20190818\",\n\t\t\"8.0.0-nightly.20190819\",\n\t\t\"8.0.0-nightly.20190820\"\n\t],\n\t\"78.0.3892.0\": [\n\t\t\"8.0.0-nightly.20190824\",\n\t\t\"8.0.0-nightly.20190825\",\n\t\t\"8.0.0-nightly.20190827\",\n\t\t\"8.0.0-nightly.20190828\",\n\t\t\"8.0.0-nightly.20190830\",\n\t\t\"8.0.0-nightly.20190901\",\n\t\t\"8.0.0-nightly.20190902\",\n\t\t\"8.0.0-nightly.20190907\",\n\t\t\"8.0.0-nightly.20190909\",\n\t\t\"8.0.0-nightly.20190910\",\n\t\t\"8.0.0-nightly.20190911\",\n\t\t\"8.0.0-nightly.20190912\",\n\t\t\"8.0.0-nightly.20190913\",\n\t\t\"8.0.0-nightly.20190914\",\n\t\t\"8.0.0-nightly.20190915\",\n\t\t\"8.0.0-nightly.20190917\"\n\t],\n\t\"79.0.3915.0\": [\n\t\t\"8.0.0-nightly.20190919\",\n\t\t\"8.0.0-nightly.20190920\"\n\t],\n\t\"79.0.3919.0\": [\n\t\t\"8.0.0-nightly.20190922\",\n\t\t\"8.0.0-nightly.20190923\",\n\t\t\"8.0.0-nightly.20190924\",\n\t\t\"8.0.0-nightly.20190926\",\n\t\t\"8.0.0-nightly.20190928\",\n\t\t\"8.0.0-nightly.20190929\",\n\t\t\"8.0.0-nightly.20190930\",\n\t\t\"8.0.0-nightly.20191001\",\n\t\t\"8.0.0-nightly.20191004\",\n\t\t\"8.0.0-nightly.20191005\",\n\t\t\"8.0.0-nightly.20191006\",\n\t\t\"8.0.0-nightly.20191009\",\n\t\t\"8.0.0-nightly.20191011\",\n\t\t\"8.0.0-nightly.20191012\",\n\t\t\"8.0.0-nightly.20191017\"\n\t],\n\t\"80.0.3952.0\": [\n\t\t\"8.0.0-nightly.20191101\",\n\t\t\"8.0.0-nightly.20191103\",\n\t\t\"8.0.0-nightly.20191105\"\n\t],\n\t\"80.0.3987.86\": [\n\t\t\"8.0.0\",\n\t\t\"8.0.1\",\n\t\t\"8.0.2\"\n\t],\n\t\"80.0.3987.134\": [\n\t\t\"8.0.3\"\n\t],\n\t\"80.0.3987.137\": [\n\t\t\"8.1.0\"\n\t],\n\t\"80.0.3987.141\": [\n\t\t\"8.1.1\"\n\t],\n\t\"80.0.3987.158\": [\n\t\t\"8.2.0\"\n\t],\n\t\"80.0.3987.163\": [\n\t\t\"8.2.1\",\n\t\t\"8.2.2\",\n\t\t\"8.2.3\",\n\t\t\"8.5.3\",\n\t\t\"8.5.4\",\n\t\t\"8.5.5\"\n\t],\n\t\"80.0.3987.165\": [\n\t\t\"8.2.4\",\n\t\t\"8.2.5\",\n\t\t\"8.3.0\",\n\t\t\"8.3.1\",\n\t\t\"8.3.2\",\n\t\t\"8.3.3\",\n\t\t\"8.3.4\",\n\t\t\"8.4.0\",\n\t\t\"8.4.1\",\n\t\t\"8.5.0\",\n\t\t\"8.5.1\",\n\t\t\"8.5.2\"\n\t],\n\t\"82.0.4048.0\": [\n\t\t\"9.0.0-beta.1\",\n\t\t\"9.0.0-beta.2\",\n\t\t\"9.0.0-beta.3\",\n\t\t\"9.0.0-beta.4\",\n\t\t\"9.0.0-beta.5\"\n\t],\n\t\"82.0.4058.2\": [\n\t\t\"9.0.0-beta.6\",\n\t\t\"9.0.0-beta.7\",\n\t\t\"9.0.0-beta.9\"\n\t],\n\t\"82.0.4085.10\": [\n\t\t\"9.0.0-beta.10\"\n\t],\n\t\"82.0.4085.14\": [\n\t\t\"9.0.0-beta.11\",\n\t\t\"9.0.0-beta.12\",\n\t\t\"9.0.0-beta.13\"\n\t],\n\t\"82.0.4085.27\": [\n\t\t\"9.0.0-beta.14\"\n\t],\n\t\"83.0.4102.3\": [\n\t\t\"9.0.0-beta.15\",\n\t\t\"9.0.0-beta.16\"\n\t],\n\t\"83.0.4103.14\": [\n\t\t\"9.0.0-beta.17\"\n\t],\n\t\"83.0.4103.16\": [\n\t\t\"9.0.0-beta.18\"\n\t],\n\t\"83.0.4103.24\": [\n\t\t\"9.0.0-beta.19\"\n\t],\n\t\"83.0.4103.26\": [\n\t\t\"9.0.0-beta.20\",\n\t\t\"9.0.0-beta.21\"\n\t],\n\t\"83.0.4103.34\": [\n\t\t\"9.0.0-beta.22\"\n\t],\n\t\"83.0.4103.44\": [\n\t\t\"9.0.0-beta.23\"\n\t],\n\t\"83.0.4103.45\": [\n\t\t\"9.0.0-beta.24\"\n\t],\n\t\"80.0.3954.0\": [\n\t\t\"9.0.0-nightly.20191121\",\n\t\t\"9.0.0-nightly.20191122\",\n\t\t\"9.0.0-nightly.20191123\",\n\t\t\"9.0.0-nightly.20191124\",\n\t\t\"9.0.0-nightly.20191126\",\n\t\t\"9.0.0-nightly.20191128\",\n\t\t\"9.0.0-nightly.20191129\",\n\t\t\"9.0.0-nightly.20191130\",\n\t\t\"9.0.0-nightly.20191201\",\n\t\t\"9.0.0-nightly.20191202\",\n\t\t\"9.0.0-nightly.20191203\",\n\t\t\"9.0.0-nightly.20191204\",\n\t\t\"9.0.0-nightly.20191205\",\n\t\t\"9.0.0-nightly.20191210\"\n\t],\n\t\"81.0.3994.0\": [\n\t\t\"9.0.0-nightly.20191220\",\n\t\t\"9.0.0-nightly.20191221\",\n\t\t\"9.0.0-nightly.20191222\",\n\t\t\"9.0.0-nightly.20191223\",\n\t\t\"9.0.0-nightly.20191224\",\n\t\t\"9.0.0-nightly.20191225\",\n\t\t\"9.0.0-nightly.20191226\",\n\t\t\"9.0.0-nightly.20191228\",\n\t\t\"9.0.0-nightly.20191229\",\n\t\t\"9.0.0-nightly.20191230\",\n\t\t\"9.0.0-nightly.20191231\",\n\t\t\"9.0.0-nightly.20200101\",\n\t\t\"9.0.0-nightly.20200103\",\n\t\t\"9.0.0-nightly.20200104\",\n\t\t\"9.0.0-nightly.20200105\",\n\t\t\"9.0.0-nightly.20200106\",\n\t\t\"9.0.0-nightly.20200108\",\n\t\t\"9.0.0-nightly.20200109\",\n\t\t\"9.0.0-nightly.20200110\",\n\t\t\"9.0.0-nightly.20200111\",\n\t\t\"9.0.0-nightly.20200113\",\n\t\t\"9.0.0-nightly.20200115\",\n\t\t\"9.0.0-nightly.20200116\",\n\t\t\"9.0.0-nightly.20200117\"\n\t],\n\t\"81.0.4030.0\": [\n\t\t\"9.0.0-nightly.20200119\",\n\t\t\"9.0.0-nightly.20200121\"\n\t],\n\t\"83.0.4103.64\": [\n\t\t\"9.0.0\"\n\t],\n\t\"83.0.4103.94\": [\n\t\t\"9.0.1\",\n\t\t\"9.0.2\"\n\t],\n\t\"83.0.4103.100\": [\n\t\t\"9.0.3\"\n\t],\n\t\"83.0.4103.104\": [\n\t\t\"9.0.4\"\n\t],\n\t\"83.0.4103.119\": [\n\t\t\"9.0.5\"\n\t],\n\t\"83.0.4103.122\": [\n\t\t\"9.1.0\",\n\t\t\"9.1.1\",\n\t\t\"9.1.2\",\n\t\t\"9.2.0\",\n\t\t\"9.2.1\",\n\t\t\"9.3.0\",\n\t\t\"9.3.1\",\n\t\t\"9.3.2\",\n\t\t\"9.3.3\",\n\t\t\"9.3.4\",\n\t\t\"9.3.5\",\n\t\t\"9.4.0\",\n\t\t\"9.4.1\",\n\t\t\"9.4.2\",\n\t\t\"9.4.3\",\n\t\t\"9.4.4\"\n\t],\n\t\"84.0.4129.0\": [\n\t\t\"10.0.0-beta.1\",\n\t\t\"10.0.0-beta.2\",\n\t\t\"10.0.0-nightly.20200501\",\n\t\t\"10.0.0-nightly.20200504\",\n\t\t\"10.0.0-nightly.20200505\",\n\t\t\"10.0.0-nightly.20200506\",\n\t\t\"10.0.0-nightly.20200507\",\n\t\t\"10.0.0-nightly.20200508\",\n\t\t\"10.0.0-nightly.20200511\",\n\t\t\"10.0.0-nightly.20200512\",\n\t\t\"10.0.0-nightly.20200513\",\n\t\t\"10.0.0-nightly.20200514\",\n\t\t\"10.0.0-nightly.20200515\",\n\t\t\"10.0.0-nightly.20200518\",\n\t\t\"10.0.0-nightly.20200519\",\n\t\t\"10.0.0-nightly.20200520\",\n\t\t\"10.0.0-nightly.20200521\",\n\t\t\"11.0.0-nightly.20200525\",\n\t\t\"11.0.0-nightly.20200526\"\n\t],\n\t\"85.0.4161.2\": [\n\t\t\"10.0.0-beta.3\",\n\t\t\"10.0.0-beta.4\"\n\t],\n\t\"85.0.4181.1\": [\n\t\t\"10.0.0-beta.8\",\n\t\t\"10.0.0-beta.9\"\n\t],\n\t\"85.0.4183.19\": [\n\t\t\"10.0.0-beta.10\"\n\t],\n\t\"85.0.4183.20\": [\n\t\t\"10.0.0-beta.11\"\n\t],\n\t\"85.0.4183.26\": [\n\t\t\"10.0.0-beta.12\"\n\t],\n\t\"85.0.4183.39\": [\n\t\t\"10.0.0-beta.13\",\n\t\t\"10.0.0-beta.14\",\n\t\t\"10.0.0-beta.15\",\n\t\t\"10.0.0-beta.17\",\n\t\t\"10.0.0-beta.19\",\n\t\t\"10.0.0-beta.20\",\n\t\t\"10.0.0-beta.21\"\n\t],\n\t\"85.0.4183.70\": [\n\t\t\"10.0.0-beta.23\"\n\t],\n\t\"85.0.4183.78\": [\n\t\t\"10.0.0-beta.24\"\n\t],\n\t\"85.0.4183.80\": [\n\t\t\"10.0.0-beta.25\"\n\t],\n\t\"82.0.4050.0\": [\n\t\t\"10.0.0-nightly.20200209\",\n\t\t\"10.0.0-nightly.20200210\",\n\t\t\"10.0.0-nightly.20200211\",\n\t\t\"10.0.0-nightly.20200216\",\n\t\t\"10.0.0-nightly.20200217\",\n\t\t\"10.0.0-nightly.20200218\",\n\t\t\"10.0.0-nightly.20200221\",\n\t\t\"10.0.0-nightly.20200222\",\n\t\t\"10.0.0-nightly.20200223\",\n\t\t\"10.0.0-nightly.20200226\",\n\t\t\"10.0.0-nightly.20200303\"\n\t],\n\t\"82.0.4076.0\": [\n\t\t\"10.0.0-nightly.20200304\",\n\t\t\"10.0.0-nightly.20200305\",\n\t\t\"10.0.0-nightly.20200306\",\n\t\t\"10.0.0-nightly.20200309\",\n\t\t\"10.0.0-nightly.20200310\"\n\t],\n\t\"82.0.4083.0\": [\n\t\t\"10.0.0-nightly.20200311\"\n\t],\n\t\"83.0.4086.0\": [\n\t\t\"10.0.0-nightly.20200316\"\n\t],\n\t\"83.0.4087.0\": [\n\t\t\"10.0.0-nightly.20200317\",\n\t\t\"10.0.0-nightly.20200318\",\n\t\t\"10.0.0-nightly.20200320\",\n\t\t\"10.0.0-nightly.20200323\",\n\t\t\"10.0.0-nightly.20200324\",\n\t\t\"10.0.0-nightly.20200325\",\n\t\t\"10.0.0-nightly.20200326\",\n\t\t\"10.0.0-nightly.20200327\",\n\t\t\"10.0.0-nightly.20200330\",\n\t\t\"10.0.0-nightly.20200331\",\n\t\t\"10.0.0-nightly.20200401\",\n\t\t\"10.0.0-nightly.20200402\",\n\t\t\"10.0.0-nightly.20200403\",\n\t\t\"10.0.0-nightly.20200406\"\n\t],\n\t\"83.0.4095.0\": [\n\t\t\"10.0.0-nightly.20200408\",\n\t\t\"10.0.0-nightly.20200410\",\n\t\t\"10.0.0-nightly.20200413\"\n\t],\n\t\"84.0.4114.0\": [\n\t\t\"10.0.0-nightly.20200414\"\n\t],\n\t\"84.0.4115.0\": [\n\t\t\"10.0.0-nightly.20200415\",\n\t\t\"10.0.0-nightly.20200416\",\n\t\t\"10.0.0-nightly.20200417\"\n\t],\n\t\"84.0.4121.0\": [\n\t\t\"10.0.0-nightly.20200422\",\n\t\t\"10.0.0-nightly.20200423\"\n\t],\n\t\"84.0.4125.0\": [\n\t\t\"10.0.0-nightly.20200427\",\n\t\t\"10.0.0-nightly.20200428\",\n\t\t\"10.0.0-nightly.20200429\",\n\t\t\"10.0.0-nightly.20200430\"\n\t],\n\t\"85.0.4183.84\": [\n\t\t\"10.0.0\"\n\t],\n\t\"85.0.4183.86\": [\n\t\t\"10.0.1\"\n\t],\n\t\"85.0.4183.87\": [\n\t\t\"10.1.0\"\n\t],\n\t\"85.0.4183.93\": [\n\t\t\"10.1.1\"\n\t],\n\t\"85.0.4183.98\": [\n\t\t\"10.1.2\"\n\t],\n\t\"85.0.4183.121\": [\n\t\t\"10.1.3\",\n\t\t\"10.1.4\",\n\t\t\"10.1.5\",\n\t\t\"10.1.6\",\n\t\t\"10.1.7\",\n\t\t\"10.2.0\",\n\t\t\"10.3.0\",\n\t\t\"10.3.1\",\n\t\t\"10.3.2\",\n\t\t\"10.4.0\",\n\t\t\"10.4.1\",\n\t\t\"10.4.2\",\n\t\t\"10.4.3\",\n\t\t\"10.4.4\",\n\t\t\"10.4.5\",\n\t\t\"10.4.6\",\n\t\t\"10.4.7\"\n\t],\n\t\"86.0.4234.0\": [\n\t\t\"11.0.0-beta.1\",\n\t\t\"11.0.0-beta.3\",\n\t\t\"11.0.0-beta.4\",\n\t\t\"11.0.0-beta.5\",\n\t\t\"11.0.0-beta.6\",\n\t\t\"11.0.0-beta.7\",\n\t\t\"11.0.0-nightly.20200822\",\n\t\t\"11.0.0-nightly.20200824\",\n\t\t\"11.0.0-nightly.20200825\",\n\t\t\"11.0.0-nightly.20200826\",\n\t\t\"12.0.0-nightly.20200827\",\n\t\t\"12.0.0-nightly.20200831\",\n\t\t\"12.0.0-nightly.20200902\",\n\t\t\"12.0.0-nightly.20200903\",\n\t\t\"12.0.0-nightly.20200907\",\n\t\t\"12.0.0-nightly.20200910\",\n\t\t\"12.0.0-nightly.20200911\",\n\t\t\"12.0.0-nightly.20200914\"\n\t],\n\t\"87.0.4251.1\": [\n\t\t\"11.0.0-beta.8\",\n\t\t\"11.0.0-beta.9\",\n\t\t\"11.0.0-beta.11\"\n\t],\n\t\"87.0.4280.11\": [\n\t\t\"11.0.0-beta.12\",\n\t\t\"11.0.0-beta.13\"\n\t],\n\t\"87.0.4280.27\": [\n\t\t\"11.0.0-beta.16\",\n\t\t\"11.0.0-beta.17\",\n\t\t\"11.0.0-beta.18\",\n\t\t\"11.0.0-beta.19\"\n\t],\n\t\"87.0.4280.40\": [\n\t\t\"11.0.0-beta.20\"\n\t],\n\t\"87.0.4280.47\": [\n\t\t\"11.0.0-beta.22\",\n\t\t\"11.0.0-beta.23\"\n\t],\n\t\"85.0.4156.0\": [\n\t\t\"11.0.0-nightly.20200529\"\n\t],\n\t\"85.0.4162.0\": [\n\t\t\"11.0.0-nightly.20200602\",\n\t\t\"11.0.0-nightly.20200603\",\n\t\t\"11.0.0-nightly.20200604\",\n\t\t\"11.0.0-nightly.20200609\",\n\t\t\"11.0.0-nightly.20200610\",\n\t\t\"11.0.0-nightly.20200611\",\n\t\t\"11.0.0-nightly.20200615\",\n\t\t\"11.0.0-nightly.20200616\",\n\t\t\"11.0.0-nightly.20200617\",\n\t\t\"11.0.0-nightly.20200618\",\n\t\t\"11.0.0-nightly.20200619\"\n\t],\n\t\"85.0.4179.0\": [\n\t\t\"11.0.0-nightly.20200701\",\n\t\t\"11.0.0-nightly.20200702\",\n\t\t\"11.0.0-nightly.20200703\",\n\t\t\"11.0.0-nightly.20200706\",\n\t\t\"11.0.0-nightly.20200707\",\n\t\t\"11.0.0-nightly.20200708\",\n\t\t\"11.0.0-nightly.20200709\"\n\t],\n\t\"86.0.4203.0\": [\n\t\t\"11.0.0-nightly.20200716\",\n\t\t\"11.0.0-nightly.20200717\",\n\t\t\"11.0.0-nightly.20200720\",\n\t\t\"11.0.0-nightly.20200721\"\n\t],\n\t\"86.0.4209.0\": [\n\t\t\"11.0.0-nightly.20200723\",\n\t\t\"11.0.0-nightly.20200724\",\n\t\t\"11.0.0-nightly.20200729\",\n\t\t\"11.0.0-nightly.20200730\",\n\t\t\"11.0.0-nightly.20200731\",\n\t\t\"11.0.0-nightly.20200803\",\n\t\t\"11.0.0-nightly.20200804\",\n\t\t\"11.0.0-nightly.20200805\",\n\t\t\"11.0.0-nightly.20200811\",\n\t\t\"11.0.0-nightly.20200812\"\n\t],\n\t\"87.0.4280.60\": [\n\t\t\"11.0.0\",\n\t\t\"11.0.1\"\n\t],\n\t\"87.0.4280.67\": [\n\t\t\"11.0.2\",\n\t\t\"11.0.3\",\n\t\t\"11.0.4\"\n\t],\n\t\"87.0.4280.88\": [\n\t\t\"11.0.5\",\n\t\t\"11.1.0\",\n\t\t\"11.1.1\"\n\t],\n\t\"87.0.4280.141\": [\n\t\t\"11.2.0\",\n\t\t\"11.2.1\",\n\t\t\"11.2.2\",\n\t\t\"11.2.3\",\n\t\t\"11.3.0\",\n\t\t\"11.4.0\",\n\t\t\"11.4.1\",\n\t\t\"11.4.2\",\n\t\t\"11.4.3\",\n\t\t\"11.4.4\",\n\t\t\"11.4.5\",\n\t\t\"11.4.6\",\n\t\t\"11.4.7\",\n\t\t\"11.4.8\",\n\t\t\"11.4.9\",\n\t\t\"11.4.10\",\n\t\t\"11.4.11\",\n\t\t\"11.4.12\",\n\t\t\"11.5.0\"\n\t],\n\t\"89.0.4328.0\": [\n\t\t\"12.0.0-beta.1\",\n\t\t\"12.0.0-beta.3\",\n\t\t\"12.0.0-beta.4\",\n\t\t\"12.0.0-beta.5\",\n\t\t\"12.0.0-beta.6\",\n\t\t\"12.0.0-beta.7\",\n\t\t\"12.0.0-beta.8\",\n\t\t\"12.0.0-beta.9\",\n\t\t\"12.0.0-beta.10\",\n\t\t\"12.0.0-beta.11\",\n\t\t\"12.0.0-beta.12\",\n\t\t\"12.0.0-beta.14\",\n\t\t\"13.0.0-nightly.20201119\",\n\t\t\"13.0.0-nightly.20201123\",\n\t\t\"13.0.0-nightly.20201124\",\n\t\t\"13.0.0-nightly.20201126\",\n\t\t\"13.0.0-nightly.20201127\",\n\t\t\"13.0.0-nightly.20201130\",\n\t\t\"13.0.0-nightly.20201201\",\n\t\t\"13.0.0-nightly.20201202\",\n\t\t\"13.0.0-nightly.20201203\",\n\t\t\"13.0.0-nightly.20201204\",\n\t\t\"13.0.0-nightly.20201207\",\n\t\t\"13.0.0-nightly.20201208\",\n\t\t\"13.0.0-nightly.20201209\",\n\t\t\"13.0.0-nightly.20201210\",\n\t\t\"13.0.0-nightly.20201211\",\n\t\t\"13.0.0-nightly.20201214\"\n\t],\n\t\"89.0.4348.1\": [\n\t\t\"12.0.0-beta.16\",\n\t\t\"12.0.0-beta.18\",\n\t\t\"12.0.0-beta.19\",\n\t\t\"12.0.0-beta.20\"\n\t],\n\t\"89.0.4388.2\": [\n\t\t\"12.0.0-beta.21\",\n\t\t\"12.0.0-beta.22\",\n\t\t\"12.0.0-beta.23\",\n\t\t\"12.0.0-beta.24\",\n\t\t\"12.0.0-beta.25\",\n\t\t\"12.0.0-beta.26\"\n\t],\n\t\"89.0.4389.23\": [\n\t\t\"12.0.0-beta.27\",\n\t\t\"12.0.0-beta.28\",\n\t\t\"12.0.0-beta.29\"\n\t],\n\t\"89.0.4389.58\": [\n\t\t\"12.0.0-beta.30\",\n\t\t\"12.0.0-beta.31\"\n\t],\n\t\"87.0.4268.0\": [\n\t\t\"12.0.0-nightly.20201002\",\n\t\t\"12.0.0-nightly.20201007\",\n\t\t\"12.0.0-nightly.20201009\",\n\t\t\"12.0.0-nightly.20201012\",\n\t\t\"12.0.0-nightly.20201013\",\n\t\t\"12.0.0-nightly.20201014\",\n\t\t\"12.0.0-nightly.20201015\"\n\t],\n\t\"88.0.4292.0\": [\n\t\t\"12.0.0-nightly.20201023\",\n\t\t\"12.0.0-nightly.20201026\"\n\t],\n\t\"88.0.4306.0\": [\n\t\t\"12.0.0-nightly.20201030\",\n\t\t\"12.0.0-nightly.20201102\",\n\t\t\"12.0.0-nightly.20201103\",\n\t\t\"12.0.0-nightly.20201104\",\n\t\t\"12.0.0-nightly.20201105\",\n\t\t\"12.0.0-nightly.20201106\",\n\t\t\"12.0.0-nightly.20201111\",\n\t\t\"12.0.0-nightly.20201112\"\n\t],\n\t\"88.0.4324.0\": [\n\t\t\"12.0.0-nightly.20201116\"\n\t],\n\t\"89.0.4389.69\": [\n\t\t\"12.0.0\"\n\t],\n\t\"89.0.4389.82\": [\n\t\t\"12.0.1\"\n\t],\n\t\"89.0.4389.90\": [\n\t\t\"12.0.2\"\n\t],\n\t\"89.0.4389.114\": [\n\t\t\"12.0.3\",\n\t\t\"12.0.4\"\n\t],\n\t\"89.0.4389.128\": [\n\t\t\"12.0.5\",\n\t\t\"12.0.6\",\n\t\t\"12.0.7\",\n\t\t\"12.0.8\",\n\t\t\"12.0.9\",\n\t\t\"12.0.10\",\n\t\t\"12.0.11\",\n\t\t\"12.0.12\",\n\t\t\"12.0.13\",\n\t\t\"12.0.14\",\n\t\t\"12.0.15\",\n\t\t\"12.0.16\",\n\t\t\"12.0.17\",\n\t\t\"12.0.18\",\n\t\t\"12.1.0\",\n\t\t\"12.1.1\",\n\t\t\"12.1.2\",\n\t\t\"12.2.0\",\n\t\t\"12.2.1\",\n\t\t\"12.2.2\",\n\t\t\"12.2.3\"\n\t],\n\t\"90.0.4402.0\": [\n\t\t\"13.0.0-beta.2\",\n\t\t\"13.0.0-beta.3\",\n\t\t\"13.0.0-nightly.20210210\",\n\t\t\"13.0.0-nightly.20210211\",\n\t\t\"13.0.0-nightly.20210212\",\n\t\t\"13.0.0-nightly.20210216\",\n\t\t\"13.0.0-nightly.20210217\",\n\t\t\"13.0.0-nightly.20210218\",\n\t\t\"13.0.0-nightly.20210219\",\n\t\t\"13.0.0-nightly.20210222\",\n\t\t\"13.0.0-nightly.20210225\",\n\t\t\"13.0.0-nightly.20210226\",\n\t\t\"13.0.0-nightly.20210301\",\n\t\t\"13.0.0-nightly.20210302\",\n\t\t\"13.0.0-nightly.20210303\",\n\t\t\"14.0.0-nightly.20210304\"\n\t],\n\t\"90.0.4415.0\": [\n\t\t\"13.0.0-beta.4\",\n\t\t\"13.0.0-beta.5\",\n\t\t\"13.0.0-beta.6\",\n\t\t\"13.0.0-beta.7\",\n\t\t\"13.0.0-beta.8\",\n\t\t\"13.0.0-beta.9\",\n\t\t\"13.0.0-beta.10\",\n\t\t\"13.0.0-beta.11\",\n\t\t\"13.0.0-beta.12\",\n\t\t\"13.0.0-beta.13\",\n\t\t\"14.0.0-nightly.20210305\",\n\t\t\"14.0.0-nightly.20210308\",\n\t\t\"14.0.0-nightly.20210309\",\n\t\t\"14.0.0-nightly.20210311\",\n\t\t\"14.0.0-nightly.20210315\",\n\t\t\"14.0.0-nightly.20210316\",\n\t\t\"14.0.0-nightly.20210317\",\n\t\t\"14.0.0-nightly.20210318\",\n\t\t\"14.0.0-nightly.20210319\",\n\t\t\"14.0.0-nightly.20210323\",\n\t\t\"14.0.0-nightly.20210324\",\n\t\t\"14.0.0-nightly.20210325\",\n\t\t\"14.0.0-nightly.20210326\",\n\t\t\"14.0.0-nightly.20210329\",\n\t\t\"14.0.0-nightly.20210330\"\n\t],\n\t\"91.0.4448.0\": [\n\t\t\"13.0.0-beta.14\",\n\t\t\"13.0.0-beta.16\",\n\t\t\"13.0.0-beta.17\",\n\t\t\"13.0.0-beta.18\",\n\t\t\"13.0.0-beta.20\",\n\t\t\"14.0.0-nightly.20210331\",\n\t\t\"14.0.0-nightly.20210401\",\n\t\t\"14.0.0-nightly.20210402\",\n\t\t\"14.0.0-nightly.20210406\",\n\t\t\"14.0.0-nightly.20210407\",\n\t\t\"14.0.0-nightly.20210408\",\n\t\t\"14.0.0-nightly.20210409\",\n\t\t\"14.0.0-nightly.20210413\"\n\t],\n\t\"91.0.4472.33\": [\n\t\t\"13.0.0-beta.21\",\n\t\t\"13.0.0-beta.22\",\n\t\t\"13.0.0-beta.23\"\n\t],\n\t\"91.0.4472.38\": [\n\t\t\"13.0.0-beta.24\",\n\t\t\"13.0.0-beta.25\",\n\t\t\"13.0.0-beta.26\",\n\t\t\"13.0.0-beta.27\",\n\t\t\"13.0.0-beta.28\"\n\t],\n\t\"89.0.4349.0\": [\n\t\t\"13.0.0-nightly.20201215\",\n\t\t\"13.0.0-nightly.20201216\",\n\t\t\"13.0.0-nightly.20201221\",\n\t\t\"13.0.0-nightly.20201222\"\n\t],\n\t\"89.0.4359.0\": [\n\t\t\"13.0.0-nightly.20201223\",\n\t\t\"13.0.0-nightly.20210104\",\n\t\t\"13.0.0-nightly.20210108\",\n\t\t\"13.0.0-nightly.20210111\"\n\t],\n\t\"89.0.4386.0\": [\n\t\t\"13.0.0-nightly.20210113\",\n\t\t\"13.0.0-nightly.20210114\",\n\t\t\"13.0.0-nightly.20210118\",\n\t\t\"13.0.0-nightly.20210122\",\n\t\t\"13.0.0-nightly.20210125\"\n\t],\n\t\"89.0.4389.0\": [\n\t\t\"13.0.0-nightly.20210127\",\n\t\t\"13.0.0-nightly.20210128\",\n\t\t\"13.0.0-nightly.20210129\",\n\t\t\"13.0.0-nightly.20210201\",\n\t\t\"13.0.0-nightly.20210202\",\n\t\t\"13.0.0-nightly.20210203\",\n\t\t\"13.0.0-nightly.20210205\",\n\t\t\"13.0.0-nightly.20210208\",\n\t\t\"13.0.0-nightly.20210209\"\n\t],\n\t\"91.0.4472.69\": [\n\t\t\"13.0.0\",\n\t\t\"13.0.1\"\n\t],\n\t\"91.0.4472.77\": [\n\t\t\"13.1.0\",\n\t\t\"13.1.1\",\n\t\t\"13.1.2\"\n\t],\n\t\"91.0.4472.106\": [\n\t\t\"13.1.3\",\n\t\t\"13.1.4\"\n\t],\n\t\"91.0.4472.124\": [\n\t\t\"13.1.5\",\n\t\t\"13.1.6\",\n\t\t\"13.1.7\"\n\t],\n\t\"91.0.4472.164\": [\n\t\t\"13.1.8\",\n\t\t\"13.1.9\",\n\t\t\"13.2.0\",\n\t\t\"13.2.1\",\n\t\t\"13.2.2\",\n\t\t\"13.2.3\",\n\t\t\"13.3.0\",\n\t\t\"13.4.0\",\n\t\t\"13.5.0\",\n\t\t\"13.5.1\",\n\t\t\"13.5.2\",\n\t\t\"13.6.0\",\n\t\t\"13.6.1\",\n\t\t\"13.6.2\",\n\t\t\"13.6.3\",\n\t\t\"13.6.6\",\n\t\t\"13.6.7\",\n\t\t\"13.6.8\",\n\t\t\"13.6.9\"\n\t],\n\t\"92.0.4511.0\": [\n\t\t\"14.0.0-beta.1\",\n\t\t\"14.0.0-beta.2\",\n\t\t\"14.0.0-beta.3\",\n\t\t\"14.0.0-nightly.20210520\",\n\t\t\"14.0.0-nightly.20210523\",\n\t\t\"14.0.0-nightly.20210524\",\n\t\t\"15.0.0-nightly.20210527\",\n\t\t\"15.0.0-nightly.20210528\",\n\t\t\"15.0.0-nightly.20210531\",\n\t\t\"15.0.0-nightly.20210601\",\n\t\t\"15.0.0-nightly.20210602\"\n\t],\n\t\"93.0.4536.0\": [\n\t\t\"14.0.0-beta.5\",\n\t\t\"14.0.0-beta.6\",\n\t\t\"14.0.0-beta.7\",\n\t\t\"14.0.0-beta.8\",\n\t\t\"15.0.0-nightly.20210609\",\n\t\t\"15.0.0-nightly.20210610\",\n\t\t\"15.0.0-nightly.20210611\",\n\t\t\"15.0.0-nightly.20210614\",\n\t\t\"15.0.0-nightly.20210615\",\n\t\t\"15.0.0-nightly.20210616\"\n\t],\n\t\"93.0.4539.0\": [\n\t\t\"14.0.0-beta.9\",\n\t\t\"14.0.0-beta.10\",\n\t\t\"15.0.0-nightly.20210617\",\n\t\t\"15.0.0-nightly.20210618\",\n\t\t\"15.0.0-nightly.20210621\",\n\t\t\"15.0.0-nightly.20210622\"\n\t],\n\t\"93.0.4557.4\": [\n\t\t\"14.0.0-beta.11\",\n\t\t\"14.0.0-beta.12\"\n\t],\n\t\"93.0.4566.0\": [\n\t\t\"14.0.0-beta.13\",\n\t\t\"14.0.0-beta.14\",\n\t\t\"14.0.0-beta.15\",\n\t\t\"14.0.0-beta.16\",\n\t\t\"14.0.0-beta.17\",\n\t\t\"15.0.0-alpha.1\",\n\t\t\"15.0.0-alpha.2\",\n\t\t\"15.0.0-nightly.20210706\",\n\t\t\"15.0.0-nightly.20210707\",\n\t\t\"15.0.0-nightly.20210708\",\n\t\t\"15.0.0-nightly.20210709\",\n\t\t\"15.0.0-nightly.20210712\",\n\t\t\"15.0.0-nightly.20210713\",\n\t\t\"15.0.0-nightly.20210714\",\n\t\t\"15.0.0-nightly.20210715\",\n\t\t\"15.0.0-nightly.20210716\",\n\t\t\"15.0.0-nightly.20210719\",\n\t\t\"15.0.0-nightly.20210720\",\n\t\t\"15.0.0-nightly.20210721\",\n\t\t\"16.0.0-nightly.20210722\",\n\t\t\"16.0.0-nightly.20210723\",\n\t\t\"16.0.0-nightly.20210726\"\n\t],\n\t\"93.0.4577.15\": [\n\t\t\"14.0.0-beta.18\",\n\t\t\"14.0.0-beta.19\",\n\t\t\"14.0.0-beta.20\",\n\t\t\"14.0.0-beta.21\"\n\t],\n\t\"93.0.4577.25\": [\n\t\t\"14.0.0-beta.22\",\n\t\t\"14.0.0-beta.23\"\n\t],\n\t\"93.0.4577.51\": [\n\t\t\"14.0.0-beta.24\",\n\t\t\"14.0.0-beta.25\"\n\t],\n\t\"92.0.4475.0\": [\n\t\t\"14.0.0-nightly.20210426\",\n\t\t\"14.0.0-nightly.20210427\"\n\t],\n\t\"92.0.4488.0\": [\n\t\t\"14.0.0-nightly.20210430\",\n\t\t\"14.0.0-nightly.20210503\"\n\t],\n\t\"92.0.4496.0\": [\n\t\t\"14.0.0-nightly.20210505\"\n\t],\n\t\"92.0.4498.0\": [\n\t\t\"14.0.0-nightly.20210506\"\n\t],\n\t\"92.0.4499.0\": [\n\t\t\"14.0.0-nightly.20210507\",\n\t\t\"14.0.0-nightly.20210510\",\n\t\t\"14.0.0-nightly.20210511\",\n\t\t\"14.0.0-nightly.20210512\",\n\t\t\"14.0.0-nightly.20210513\"\n\t],\n\t\"92.0.4505.0\": [\n\t\t\"14.0.0-nightly.20210514\",\n\t\t\"14.0.0-nightly.20210517\",\n\t\t\"14.0.0-nightly.20210518\",\n\t\t\"14.0.0-nightly.20210519\"\n\t],\n\t\"93.0.4577.58\": [\n\t\t\"14.0.0\"\n\t],\n\t\"93.0.4577.63\": [\n\t\t\"14.0.1\"\n\t],\n\t\"93.0.4577.82\": [\n\t\t\"14.0.2\",\n\t\t\"14.1.0\",\n\t\t\"14.1.1\",\n\t\t\"14.2.0\",\n\t\t\"14.2.1\",\n\t\t\"14.2.2\",\n\t\t\"14.2.3\",\n\t\t\"14.2.4\",\n\t\t\"14.2.5\",\n\t\t\"14.2.6\",\n\t\t\"14.2.7\",\n\t\t\"14.2.8\",\n\t\t\"14.2.9\"\n\t],\n\t\"94.0.4584.0\": [\n\t\t\"15.0.0-alpha.3\",\n\t\t\"15.0.0-alpha.4\",\n\t\t\"15.0.0-alpha.5\",\n\t\t\"15.0.0-alpha.6\",\n\t\t\"16.0.0-nightly.20210727\",\n\t\t\"16.0.0-nightly.20210728\",\n\t\t\"16.0.0-nightly.20210729\",\n\t\t\"16.0.0-nightly.20210730\",\n\t\t\"16.0.0-nightly.20210802\",\n\t\t\"16.0.0-nightly.20210803\",\n\t\t\"16.0.0-nightly.20210804\",\n\t\t\"16.0.0-nightly.20210805\",\n\t\t\"16.0.0-nightly.20210806\",\n\t\t\"16.0.0-nightly.20210809\",\n\t\t\"16.0.0-nightly.20210810\",\n\t\t\"16.0.0-nightly.20210811\"\n\t],\n\t\"94.0.4590.2\": [\n\t\t\"15.0.0-alpha.7\",\n\t\t\"15.0.0-alpha.8\",\n\t\t\"15.0.0-alpha.9\",\n\t\t\"16.0.0-nightly.20210812\",\n\t\t\"16.0.0-nightly.20210813\",\n\t\t\"16.0.0-nightly.20210816\",\n\t\t\"16.0.0-nightly.20210817\",\n\t\t\"16.0.0-nightly.20210818\",\n\t\t\"16.0.0-nightly.20210819\",\n\t\t\"16.0.0-nightly.20210820\",\n\t\t\"16.0.0-nightly.20210823\"\n\t],\n\t\"94.0.4606.12\": [\n\t\t\"15.0.0-alpha.10\"\n\t],\n\t\"94.0.4606.20\": [\n\t\t\"15.0.0-beta.1\",\n\t\t\"15.0.0-beta.2\"\n\t],\n\t\"94.0.4606.31\": [\n\t\t\"15.0.0-beta.3\",\n\t\t\"15.0.0-beta.4\",\n\t\t\"15.0.0-beta.5\",\n\t\t\"15.0.0-beta.6\",\n\t\t\"15.0.0-beta.7\"\n\t],\n\t\"93.0.4530.0\": [\n\t\t\"15.0.0-nightly.20210603\",\n\t\t\"15.0.0-nightly.20210604\"\n\t],\n\t\"93.0.4535.0\": [\n\t\t\"15.0.0-nightly.20210608\"\n\t],\n\t\"93.0.4550.0\": [\n\t\t\"15.0.0-nightly.20210623\",\n\t\t\"15.0.0-nightly.20210624\"\n\t],\n\t\"93.0.4552.0\": [\n\t\t\"15.0.0-nightly.20210625\",\n\t\t\"15.0.0-nightly.20210628\",\n\t\t\"15.0.0-nightly.20210629\"\n\t],\n\t\"93.0.4558.0\": [\n\t\t\"15.0.0-nightly.20210630\",\n\t\t\"15.0.0-nightly.20210701\",\n\t\t\"15.0.0-nightly.20210702\",\n\t\t\"15.0.0-nightly.20210705\"\n\t],\n\t\"94.0.4606.51\": [\n\t\t\"15.0.0\"\n\t],\n\t\"94.0.4606.61\": [\n\t\t\"15.1.0\",\n\t\t\"15.1.1\"\n\t],\n\t\"94.0.4606.71\": [\n\t\t\"15.1.2\"\n\t],\n\t\"94.0.4606.81\": [\n\t\t\"15.2.0\",\n\t\t\"15.3.0\",\n\t\t\"15.3.1\",\n\t\t\"15.3.2\",\n\t\t\"15.3.3\",\n\t\t\"15.3.4\",\n\t\t\"15.3.5\",\n\t\t\"15.3.6\",\n\t\t\"15.3.7\",\n\t\t\"15.4.0\",\n\t\t\"15.4.1\",\n\t\t\"15.4.2\",\n\t\t\"15.5.0\",\n\t\t\"15.5.1\",\n\t\t\"15.5.2\",\n\t\t\"15.5.3\",\n\t\t\"15.5.4\",\n\t\t\"15.5.5\",\n\t\t\"15.5.6\",\n\t\t\"15.5.7\"\n\t],\n\t\"95.0.4629.0\": [\n\t\t\"16.0.0-alpha.1\",\n\t\t\"16.0.0-alpha.2\",\n\t\t\"16.0.0-alpha.3\",\n\t\t\"16.0.0-alpha.4\",\n\t\t\"16.0.0-alpha.5\",\n\t\t\"16.0.0-alpha.6\",\n\t\t\"16.0.0-alpha.7\",\n\t\t\"16.0.0-nightly.20210902\",\n\t\t\"16.0.0-nightly.20210903\",\n\t\t\"16.0.0-nightly.20210906\",\n\t\t\"16.0.0-nightly.20210907\",\n\t\t\"16.0.0-nightly.20210908\",\n\t\t\"16.0.0-nightly.20210909\",\n\t\t\"16.0.0-nightly.20210910\",\n\t\t\"16.0.0-nightly.20210913\",\n\t\t\"16.0.0-nightly.20210914\",\n\t\t\"16.0.0-nightly.20210915\",\n\t\t\"16.0.0-nightly.20210916\",\n\t\t\"16.0.0-nightly.20210917\",\n\t\t\"16.0.0-nightly.20210920\",\n\t\t\"16.0.0-nightly.20210921\",\n\t\t\"16.0.0-nightly.20210922\",\n\t\t\"17.0.0-nightly.20210923\",\n\t\t\"17.0.0-nightly.20210924\",\n\t\t\"17.0.0-nightly.20210927\",\n\t\t\"17.0.0-nightly.20210928\",\n\t\t\"17.0.0-nightly.20210929\",\n\t\t\"17.0.0-nightly.20210930\",\n\t\t\"17.0.0-nightly.20211001\",\n\t\t\"17.0.0-nightly.20211004\",\n\t\t\"17.0.0-nightly.20211005\"\n\t],\n\t\"96.0.4647.0\": [\n\t\t\"16.0.0-alpha.8\",\n\t\t\"16.0.0-alpha.9\",\n\t\t\"16.0.0-beta.1\",\n\t\t\"16.0.0-beta.2\",\n\t\t\"16.0.0-beta.3\",\n\t\t\"17.0.0-nightly.20211006\",\n\t\t\"17.0.0-nightly.20211007\",\n\t\t\"17.0.0-nightly.20211008\",\n\t\t\"17.0.0-nightly.20211011\",\n\t\t\"17.0.0-nightly.20211012\",\n\t\t\"17.0.0-nightly.20211013\",\n\t\t\"17.0.0-nightly.20211014\",\n\t\t\"17.0.0-nightly.20211015\",\n\t\t\"17.0.0-nightly.20211018\",\n\t\t\"17.0.0-nightly.20211019\",\n\t\t\"17.0.0-nightly.20211020\",\n\t\t\"17.0.0-nightly.20211021\"\n\t],\n\t\"96.0.4664.18\": [\n\t\t\"16.0.0-beta.4\",\n\t\t\"16.0.0-beta.5\"\n\t],\n\t\"96.0.4664.27\": [\n\t\t\"16.0.0-beta.6\",\n\t\t\"16.0.0-beta.7\"\n\t],\n\t\"96.0.4664.35\": [\n\t\t\"16.0.0-beta.8\",\n\t\t\"16.0.0-beta.9\"\n\t],\n\t\"95.0.4612.5\": [\n\t\t\"16.0.0-nightly.20210824\",\n\t\t\"16.0.0-nightly.20210825\",\n\t\t\"16.0.0-nightly.20210826\",\n\t\t\"16.0.0-nightly.20210827\",\n\t\t\"16.0.0-nightly.20210830\",\n\t\t\"16.0.0-nightly.20210831\",\n\t\t\"16.0.0-nightly.20210901\"\n\t],\n\t\"96.0.4664.45\": [\n\t\t\"16.0.0\",\n\t\t\"16.0.1\"\n\t],\n\t\"96.0.4664.55\": [\n\t\t\"16.0.2\",\n\t\t\"16.0.3\",\n\t\t\"16.0.4\",\n\t\t\"16.0.5\"\n\t],\n\t\"96.0.4664.110\": [\n\t\t\"16.0.6\",\n\t\t\"16.0.7\",\n\t\t\"16.0.8\"\n\t],\n\t\"96.0.4664.174\": [\n\t\t\"16.0.9\",\n\t\t\"16.0.10\",\n\t\t\"16.1.0\",\n\t\t\"16.1.1\",\n\t\t\"16.2.0\",\n\t\t\"16.2.1\",\n\t\t\"16.2.2\",\n\t\t\"16.2.3\",\n\t\t\"16.2.4\",\n\t\t\"16.2.5\",\n\t\t\"16.2.6\",\n\t\t\"16.2.7\",\n\t\t\"16.2.8\"\n\t],\n\t\"96.0.4664.4\": [\n\t\t\"17.0.0-alpha.1\",\n\t\t\"17.0.0-alpha.2\",\n\t\t\"17.0.0-alpha.3\",\n\t\t\"17.0.0-nightly.20211022\",\n\t\t\"17.0.0-nightly.20211025\",\n\t\t\"17.0.0-nightly.20211026\",\n\t\t\"17.0.0-nightly.20211027\",\n\t\t\"17.0.0-nightly.20211028\",\n\t\t\"17.0.0-nightly.20211029\",\n\t\t\"17.0.0-nightly.20211101\",\n\t\t\"17.0.0-nightly.20211102\",\n\t\t\"17.0.0-nightly.20211103\",\n\t\t\"17.0.0-nightly.20211104\",\n\t\t\"17.0.0-nightly.20211105\",\n\t\t\"17.0.0-nightly.20211108\",\n\t\t\"17.0.0-nightly.20211109\",\n\t\t\"17.0.0-nightly.20211110\",\n\t\t\"17.0.0-nightly.20211111\",\n\t\t\"17.0.0-nightly.20211112\",\n\t\t\"17.0.0-nightly.20211115\",\n\t\t\"17.0.0-nightly.20211116\",\n\t\t\"17.0.0-nightly.20211117\",\n\t\t\"18.0.0-nightly.20211118\",\n\t\t\"18.0.0-nightly.20211119\",\n\t\t\"18.0.0-nightly.20211122\",\n\t\t\"18.0.0-nightly.20211123\"\n\t],\n\t\"98.0.4706.0\": [\n\t\t\"17.0.0-alpha.4\",\n\t\t\"17.0.0-alpha.5\",\n\t\t\"17.0.0-alpha.6\",\n\t\t\"17.0.0-beta.1\",\n\t\t\"17.0.0-beta.2\",\n\t\t\"18.0.0-nightly.20211124\",\n\t\t\"18.0.0-nightly.20211125\",\n\t\t\"18.0.0-nightly.20211126\",\n\t\t\"18.0.0-nightly.20211129\",\n\t\t\"18.0.0-nightly.20211130\",\n\t\t\"18.0.0-nightly.20211201\",\n\t\t\"18.0.0-nightly.20211202\",\n\t\t\"18.0.0-nightly.20211203\",\n\t\t\"18.0.0-nightly.20211206\",\n\t\t\"18.0.0-nightly.20211207\",\n\t\t\"18.0.0-nightly.20211208\",\n\t\t\"18.0.0-nightly.20211209\",\n\t\t\"18.0.0-nightly.20211210\",\n\t\t\"18.0.0-nightly.20211213\",\n\t\t\"18.0.0-nightly.20211214\",\n\t\t\"18.0.0-nightly.20211215\",\n\t\t\"18.0.0-nightly.20211216\",\n\t\t\"18.0.0-nightly.20211217\",\n\t\t\"18.0.0-nightly.20211220\",\n\t\t\"18.0.0-nightly.20211221\",\n\t\t\"18.0.0-nightly.20211222\",\n\t\t\"18.0.0-nightly.20211223\",\n\t\t\"18.0.0-nightly.20211228\",\n\t\t\"18.0.0-nightly.20211229\",\n\t\t\"18.0.0-nightly.20211231\",\n\t\t\"18.0.0-nightly.20220103\",\n\t\t\"18.0.0-nightly.20220104\",\n\t\t\"18.0.0-nightly.20220105\",\n\t\t\"18.0.0-nightly.20220106\",\n\t\t\"18.0.0-nightly.20220107\",\n\t\t\"18.0.0-nightly.20220110\"\n\t],\n\t\"98.0.4758.9\": [\n\t\t\"17.0.0-beta.3\"\n\t],\n\t\"98.0.4758.11\": [\n\t\t\"17.0.0-beta.4\",\n\t\t\"17.0.0-beta.5\",\n\t\t\"17.0.0-beta.6\",\n\t\t\"17.0.0-beta.7\",\n\t\t\"17.0.0-beta.8\",\n\t\t\"17.0.0-beta.9\"\n\t],\n\t\"98.0.4758.74\": [\n\t\t\"17.0.0\"\n\t],\n\t\"98.0.4758.82\": [\n\t\t\"17.0.1\"\n\t],\n\t\"98.0.4758.102\": [\n\t\t\"17.1.0\"\n\t],\n\t\"98.0.4758.109\": [\n\t\t\"17.1.1\",\n\t\t\"17.1.2\",\n\t\t\"17.2.0\"\n\t],\n\t\"98.0.4758.141\": [\n\t\t\"17.3.0\",\n\t\t\"17.3.1\",\n\t\t\"17.4.0\",\n\t\t\"17.4.1\",\n\t\t\"17.4.2\",\n\t\t\"17.4.3\",\n\t\t\"17.4.4\",\n\t\t\"17.4.5\",\n\t\t\"17.4.6\",\n\t\t\"17.4.7\",\n\t\t\"17.4.8\",\n\t\t\"17.4.9\",\n\t\t\"17.4.10\",\n\t\t\"17.4.11\"\n\t],\n\t\"99.0.4767.0\": [\n\t\t\"18.0.0-alpha.1\",\n\t\t\"18.0.0-alpha.2\",\n\t\t\"18.0.0-alpha.3\",\n\t\t\"18.0.0-alpha.4\",\n\t\t\"18.0.0-alpha.5\",\n\t\t\"18.0.0-nightly.20220111\",\n\t\t\"18.0.0-nightly.20220112\",\n\t\t\"18.0.0-nightly.20220113\",\n\t\t\"18.0.0-nightly.20220114\",\n\t\t\"18.0.0-nightly.20220117\",\n\t\t\"18.0.0-nightly.20220118\",\n\t\t\"18.0.0-nightly.20220119\",\n\t\t\"18.0.0-nightly.20220121\",\n\t\t\"18.0.0-nightly.20220124\",\n\t\t\"18.0.0-nightly.20220125\",\n\t\t\"18.0.0-nightly.20220127\",\n\t\t\"18.0.0-nightly.20220128\",\n\t\t\"18.0.0-nightly.20220131\",\n\t\t\"18.0.0-nightly.20220201\",\n\t\t\"19.0.0-nightly.20220202\",\n\t\t\"19.0.0-nightly.20220203\",\n\t\t\"19.0.0-nightly.20220204\",\n\t\t\"19.0.0-nightly.20220207\",\n\t\t\"19.0.0-nightly.20220208\",\n\t\t\"19.0.0-nightly.20220209\"\n\t],\n\t\"100.0.4894.0\": [\n\t\t\"18.0.0-beta.1\",\n\t\t\"18.0.0-beta.2\",\n\t\t\"18.0.0-beta.3\",\n\t\t\"18.0.0-beta.4\",\n\t\t\"18.0.0-beta.5\",\n\t\t\"18.0.0-beta.6\",\n\t\t\"19.0.0-nightly.20220308\",\n\t\t\"19.0.0-nightly.20220309\",\n\t\t\"19.0.0-nightly.20220310\",\n\t\t\"19.0.0-nightly.20220311\",\n\t\t\"19.0.0-nightly.20220314\",\n\t\t\"19.0.0-nightly.20220315\",\n\t\t\"19.0.0-nightly.20220316\",\n\t\t\"19.0.0-nightly.20220317\",\n\t\t\"19.0.0-nightly.20220318\",\n\t\t\"19.0.0-nightly.20220321\",\n\t\t\"19.0.0-nightly.20220322\",\n\t\t\"19.0.0-nightly.20220323\",\n\t\t\"19.0.0-nightly.20220324\"\n\t],\n\t\"100.0.4896.56\": [\n\t\t\"18.0.0\"\n\t],\n\t\"100.0.4896.60\": [\n\t\t\"18.0.1\",\n\t\t\"18.0.2\"\n\t],\n\t\"100.0.4896.75\": [\n\t\t\"18.0.3\",\n\t\t\"18.0.4\"\n\t],\n\t\"100.0.4896.127\": [\n\t\t\"18.1.0\"\n\t],\n\t\"100.0.4896.143\": [\n\t\t\"18.2.0\",\n\t\t\"18.2.1\",\n\t\t\"18.2.2\",\n\t\t\"18.2.3\"\n\t],\n\t\"100.0.4896.160\": [\n\t\t\"18.2.4\",\n\t\t\"18.3.0\",\n\t\t\"18.3.1\",\n\t\t\"18.3.2\",\n\t\t\"18.3.3\",\n\t\t\"18.3.4\",\n\t\t\"18.3.5\",\n\t\t\"18.3.6\",\n\t\t\"18.3.7\",\n\t\t\"18.3.8\",\n\t\t\"18.3.9\",\n\t\t\"18.3.11\",\n\t\t\"18.3.12\",\n\t\t\"18.3.13\",\n\t\t\"18.3.14\",\n\t\t\"18.3.15\"\n\t],\n\t\"102.0.4962.3\": [\n\t\t\"19.0.0-alpha.1\",\n\t\t\"19.0.0-nightly.20220328\",\n\t\t\"19.0.0-nightly.20220329\",\n\t\t\"20.0.0-nightly.20220330\"\n\t],\n\t\"102.0.4971.0\": [\n\t\t\"19.0.0-alpha.2\",\n\t\t\"19.0.0-alpha.3\",\n\t\t\"20.0.0-nightly.20220411\"\n\t],\n\t\"102.0.4989.0\": [\n\t\t\"19.0.0-alpha.4\",\n\t\t\"19.0.0-alpha.5\",\n\t\t\"20.0.0-nightly.20220414\",\n\t\t\"20.0.0-nightly.20220415\",\n\t\t\"20.0.0-nightly.20220418\",\n\t\t\"20.0.0-nightly.20220419\",\n\t\t\"20.0.0-nightly.20220420\",\n\t\t\"20.0.0-nightly.20220421\"\n\t],\n\t\"102.0.4999.0\": [\n\t\t\"19.0.0-beta.1\",\n\t\t\"19.0.0-beta.2\",\n\t\t\"19.0.0-beta.3\",\n\t\t\"20.0.0-nightly.20220425\",\n\t\t\"20.0.0-nightly.20220426\",\n\t\t\"20.0.0-nightly.20220427\",\n\t\t\"20.0.0-nightly.20220428\",\n\t\t\"20.0.0-nightly.20220429\",\n\t\t\"20.0.0-nightly.20220502\",\n\t\t\"20.0.0-nightly.20220503\",\n\t\t\"20.0.0-nightly.20220504\",\n\t\t\"20.0.0-nightly.20220505\",\n\t\t\"20.0.0-nightly.20220506\",\n\t\t\"20.0.0-nightly.20220509\",\n\t\t\"20.0.0-nightly.20220511\",\n\t\t\"20.0.0-nightly.20220512\",\n\t\t\"20.0.0-nightly.20220513\",\n\t\t\"20.0.0-nightly.20220516\",\n\t\t\"20.0.0-nightly.20220517\"\n\t],\n\t\"102.0.5005.27\": [\n\t\t\"19.0.0-beta.4\"\n\t],\n\t\"102.0.5005.40\": [\n\t\t\"19.0.0-beta.5\",\n\t\t\"19.0.0-beta.6\",\n\t\t\"19.0.0-beta.7\"\n\t],\n\t\"102.0.5005.49\": [\n\t\t\"19.0.0-beta.8\"\n\t],\n\t\"102.0.4961.0\": [\n\t\t\"19.0.0-nightly.20220325\"\n\t],\n\t\"102.0.5005.61\": [\n\t\t\"19.0.0\",\n\t\t\"19.0.1\"\n\t],\n\t\"102.0.5005.63\": [\n\t\t\"19.0.2\",\n\t\t\"19.0.3\",\n\t\t\"19.0.4\"\n\t],\n\t\"102.0.5005.115\": [\n\t\t\"19.0.5\",\n\t\t\"19.0.6\"\n\t],\n\t\"102.0.5005.134\": [\n\t\t\"19.0.7\"\n\t],\n\t\"102.0.5005.148\": [\n\t\t\"19.0.8\"\n\t],\n\t\"102.0.5005.167\": [\n\t\t\"19.0.9\",\n\t\t\"19.0.10\",\n\t\t\"19.0.11\",\n\t\t\"19.0.12\",\n\t\t\"19.0.13\",\n\t\t\"19.0.14\",\n\t\t\"19.0.15\",\n\t\t\"19.0.16\",\n\t\t\"19.0.17\",\n\t\t\"19.1.0\",\n\t\t\"19.1.1\",\n\t\t\"19.1.2\",\n\t\t\"19.1.3\",\n\t\t\"19.1.4\",\n\t\t\"19.1.5\",\n\t\t\"19.1.6\",\n\t\t\"19.1.7\",\n\t\t\"19.1.8\",\n\t\t\"19.1.9\"\n\t],\n\t\"103.0.5044.0\": [\n\t\t\"20.0.0-alpha.1\",\n\t\t\"20.0.0-nightly.20220518\",\n\t\t\"20.0.0-nightly.20220519\",\n\t\t\"20.0.0-nightly.20220520\",\n\t\t\"20.0.0-nightly.20220523\",\n\t\t\"20.0.0-nightly.20220524\",\n\t\t\"21.0.0-nightly.20220526\",\n\t\t\"21.0.0-nightly.20220527\",\n\t\t\"21.0.0-nightly.20220530\",\n\t\t\"21.0.0-nightly.20220531\"\n\t],\n\t\"104.0.5073.0\": [\n\t\t\"20.0.0-alpha.2\",\n\t\t\"20.0.0-alpha.3\",\n\t\t\"20.0.0-alpha.4\",\n\t\t\"20.0.0-alpha.5\",\n\t\t\"20.0.0-alpha.6\",\n\t\t\"20.0.0-alpha.7\",\n\t\t\"20.0.0-beta.1\",\n\t\t\"20.0.0-beta.2\",\n\t\t\"20.0.0-beta.3\",\n\t\t\"20.0.0-beta.4\",\n\t\t\"20.0.0-beta.5\",\n\t\t\"20.0.0-beta.6\",\n\t\t\"20.0.0-beta.7\",\n\t\t\"20.0.0-beta.8\",\n\t\t\"21.0.0-nightly.20220602\",\n\t\t\"21.0.0-nightly.20220603\",\n\t\t\"21.0.0-nightly.20220606\",\n\t\t\"21.0.0-nightly.20220607\",\n\t\t\"21.0.0-nightly.20220608\",\n\t\t\"21.0.0-nightly.20220609\",\n\t\t\"21.0.0-nightly.20220610\",\n\t\t\"21.0.0-nightly.20220613\",\n\t\t\"21.0.0-nightly.20220614\",\n\t\t\"21.0.0-nightly.20220615\",\n\t\t\"21.0.0-nightly.20220616\",\n\t\t\"21.0.0-nightly.20220617\",\n\t\t\"21.0.0-nightly.20220620\",\n\t\t\"21.0.0-nightly.20220621\",\n\t\t\"21.0.0-nightly.20220622\",\n\t\t\"21.0.0-nightly.20220623\",\n\t\t\"21.0.0-nightly.20220624\",\n\t\t\"21.0.0-nightly.20220627\"\n\t],\n\t\"104.0.5112.39\": [\n\t\t\"20.0.0-beta.9\"\n\t],\n\t\"104.0.5112.48\": [\n\t\t\"20.0.0-beta.10\",\n\t\t\"20.0.0-beta.11\",\n\t\t\"20.0.0-beta.12\"\n\t],\n\t\"104.0.5112.57\": [\n\t\t\"20.0.0-beta.13\"\n\t],\n\t\"104.0.5112.65\": [\n\t\t\"20.0.0\"\n\t],\n\t\"104.0.5112.81\": [\n\t\t\"20.0.1\",\n\t\t\"20.0.2\",\n\t\t\"20.0.3\"\n\t],\n\t\"104.0.5112.102\": [\n\t\t\"20.1.0\",\n\t\t\"20.1.1\"\n\t],\n\t\"104.0.5112.114\": [\n\t\t\"20.1.2\",\n\t\t\"20.1.3\",\n\t\t\"20.1.4\"\n\t],\n\t\"104.0.5112.124\": [\n\t\t\"20.2.0\",\n\t\t\"20.3.0\",\n\t\t\"20.3.1\",\n\t\t\"20.3.2\",\n\t\t\"20.3.3\",\n\t\t\"20.3.4\",\n\t\t\"20.3.5\",\n\t\t\"20.3.6\",\n\t\t\"20.3.7\",\n\t\t\"20.3.8\",\n\t\t\"20.3.9\",\n\t\t\"20.3.10\",\n\t\t\"20.3.11\",\n\t\t\"20.3.12\"\n\t],\n\t\"105.0.5187.0\": [\n\t\t\"21.0.0-alpha.1\",\n\t\t\"21.0.0-alpha.2\",\n\t\t\"21.0.0-alpha.3\",\n\t\t\"21.0.0-alpha.4\",\n\t\t\"21.0.0-alpha.5\",\n\t\t\"21.0.0-nightly.20220720\",\n\t\t\"21.0.0-nightly.20220721\",\n\t\t\"21.0.0-nightly.20220722\",\n\t\t\"21.0.0-nightly.20220725\",\n\t\t\"21.0.0-nightly.20220726\",\n\t\t\"21.0.0-nightly.20220727\",\n\t\t\"21.0.0-nightly.20220728\",\n\t\t\"21.0.0-nightly.20220801\",\n\t\t\"21.0.0-nightly.20220802\",\n\t\t\"22.0.0-nightly.20220808\",\n\t\t\"22.0.0-nightly.20220809\",\n\t\t\"22.0.0-nightly.20220810\",\n\t\t\"22.0.0-nightly.20220811\",\n\t\t\"22.0.0-nightly.20220812\",\n\t\t\"22.0.0-nightly.20220815\",\n\t\t\"22.0.0-nightly.20220816\",\n\t\t\"22.0.0-nightly.20220817\"\n\t],\n\t\"106.0.5216.0\": [\n\t\t\"21.0.0-alpha.6\",\n\t\t\"21.0.0-beta.1\",\n\t\t\"21.0.0-beta.2\",\n\t\t\"21.0.0-beta.3\",\n\t\t\"21.0.0-beta.4\",\n\t\t\"21.0.0-beta.5\",\n\t\t\"22.0.0-nightly.20220822\",\n\t\t\"22.0.0-nightly.20220823\",\n\t\t\"22.0.0-nightly.20220824\",\n\t\t\"22.0.0-nightly.20220825\",\n\t\t\"22.0.0-nightly.20220829\",\n\t\t\"22.0.0-nightly.20220830\",\n\t\t\"22.0.0-nightly.20220831\",\n\t\t\"22.0.0-nightly.20220901\",\n\t\t\"22.0.0-nightly.20220902\",\n\t\t\"22.0.0-nightly.20220905\"\n\t],\n\t\"106.0.5249.40\": [\n\t\t\"21.0.0-beta.6\",\n\t\t\"21.0.0-beta.7\",\n\t\t\"21.0.0-beta.8\"\n\t],\n\t\"105.0.5129.0\": [\n\t\t\"21.0.0-nightly.20220628\",\n\t\t\"21.0.0-nightly.20220629\",\n\t\t\"21.0.0-nightly.20220630\",\n\t\t\"21.0.0-nightly.20220701\",\n\t\t\"21.0.0-nightly.20220704\",\n\t\t\"21.0.0-nightly.20220705\",\n\t\t\"21.0.0-nightly.20220706\",\n\t\t\"21.0.0-nightly.20220707\",\n\t\t\"21.0.0-nightly.20220708\",\n\t\t\"21.0.0-nightly.20220711\",\n\t\t\"21.0.0-nightly.20220712\",\n\t\t\"21.0.0-nightly.20220713\"\n\t],\n\t\"105.0.5173.0\": [\n\t\t\"21.0.0-nightly.20220715\",\n\t\t\"21.0.0-nightly.20220718\",\n\t\t\"21.0.0-nightly.20220719\"\n\t],\n\t\"106.0.5249.51\": [\n\t\t\"21.0.0\"\n\t],\n\t\"106.0.5249.61\": [\n\t\t\"21.0.1\"\n\t],\n\t\"106.0.5249.91\": [\n\t\t\"21.1.0\"\n\t],\n\t\"106.0.5249.103\": [\n\t\t\"21.1.1\"\n\t],\n\t\"106.0.5249.119\": [\n\t\t\"21.2.0\"\n\t],\n\t\"106.0.5249.165\": [\n\t\t\"21.2.1\"\n\t],\n\t\"106.0.5249.168\": [\n\t\t\"21.2.2\",\n\t\t\"21.2.3\"\n\t],\n\t\"106.0.5249.181\": [\n\t\t\"21.3.0\",\n\t\t\"21.3.1\"\n\t],\n\t\"106.0.5249.199\": [\n\t\t\"21.3.3\",\n\t\t\"21.3.4\",\n\t\t\"21.3.5\",\n\t\t\"21.4.0\",\n\t\t\"21.4.1\",\n\t\t\"21.4.2\",\n\t\t\"21.4.3\"\n\t],\n\t\"107.0.5286.0\": [\n\t\t\"22.0.0-alpha.1\",\n\t\t\"22.0.0-nightly.20220909\",\n\t\t\"22.0.0-nightly.20220912\",\n\t\t\"22.0.0-nightly.20220913\",\n\t\t\"22.0.0-nightly.20220914\",\n\t\t\"22.0.0-nightly.20220915\",\n\t\t\"22.0.0-nightly.20220916\",\n\t\t\"22.0.0-nightly.20220919\",\n\t\t\"22.0.0-nightly.20220920\",\n\t\t\"22.0.0-nightly.20220921\",\n\t\t\"22.0.0-nightly.20220922\",\n\t\t\"22.0.0-nightly.20220923\",\n\t\t\"22.0.0-nightly.20220926\",\n\t\t\"22.0.0-nightly.20220927\",\n\t\t\"22.0.0-nightly.20220928\",\n\t\t\"23.0.0-nightly.20220929\",\n\t\t\"23.0.0-nightly.20220930\",\n\t\t\"23.0.0-nightly.20221003\"\n\t],\n\t\"108.0.5329.0\": [\n\t\t\"22.0.0-alpha.3\",\n\t\t\"22.0.0-alpha.4\",\n\t\t\"22.0.0-alpha.5\",\n\t\t\"22.0.0-alpha.6\",\n\t\t\"23.0.0-nightly.20221004\",\n\t\t\"23.0.0-nightly.20221005\",\n\t\t\"23.0.0-nightly.20221006\",\n\t\t\"23.0.0-nightly.20221007\",\n\t\t\"23.0.0-nightly.20221010\",\n\t\t\"23.0.0-nightly.20221011\",\n\t\t\"23.0.0-nightly.20221012\",\n\t\t\"23.0.0-nightly.20221013\",\n\t\t\"23.0.0-nightly.20221014\",\n\t\t\"23.0.0-nightly.20221017\"\n\t],\n\t\"108.0.5355.0\": [\n\t\t\"22.0.0-alpha.7\",\n\t\t\"23.0.0-nightly.20221018\",\n\t\t\"23.0.0-nightly.20221019\",\n\t\t\"23.0.0-nightly.20221020\",\n\t\t\"23.0.0-nightly.20221021\",\n\t\t\"23.0.0-nightly.20221024\",\n\t\t\"23.0.0-nightly.20221026\"\n\t],\n\t\"108.0.5359.10\": [\n\t\t\"22.0.0-alpha.8\",\n\t\t\"22.0.0-beta.1\",\n\t\t\"22.0.0-beta.2\",\n\t\t\"22.0.0-beta.3\"\n\t],\n\t\"108.0.5359.29\": [\n\t\t\"22.0.0-beta.4\"\n\t],\n\t\"108.0.5359.40\": [\n\t\t\"22.0.0-beta.5\",\n\t\t\"22.0.0-beta.6\"\n\t],\n\t\"108.0.5359.48\": [\n\t\t\"22.0.0-beta.7\",\n\t\t\"22.0.0-beta.8\"\n\t],\n\t\"107.0.5274.0\": [\n\t\t\"22.0.0-nightly.20220908\"\n\t],\n\t\"108.0.5359.62\": [\n\t\t\"22.0.0\"\n\t],\n\t\"108.0.5359.125\": [\n\t\t\"22.0.1\"\n\t],\n\t\"108.0.5359.179\": [\n\t\t\"22.0.2\",\n\t\t\"22.0.3\",\n\t\t\"22.1.0\"\n\t],\n\t\"108.0.5359.215\": [\n\t\t\"22.2.0\",\n\t\t\"22.2.1\",\n\t\t\"22.3.0\",\n\t\t\"22.3.1\",\n\t\t\"22.3.2\",\n\t\t\"22.3.3\"\n\t],\n\t\"110.0.5415.0\": [\n\t\t\"23.0.0-alpha.1\",\n\t\t\"23.0.0-nightly.20221118\",\n\t\t\"23.0.0-nightly.20221121\",\n\t\t\"23.0.0-nightly.20221122\",\n\t\t\"23.0.0-nightly.20221123\",\n\t\t\"23.0.0-nightly.20221124\",\n\t\t\"23.0.0-nightly.20221125\",\n\t\t\"23.0.0-nightly.20221128\",\n\t\t\"23.0.0-nightly.20221129\",\n\t\t\"23.0.0-nightly.20221130\",\n\t\t\"24.0.0-nightly.20221201\",\n\t\t\"24.0.0-nightly.20221202\",\n\t\t\"24.0.0-nightly.20221205\"\n\t],\n\t\"110.0.5451.0\": [\n\t\t\"23.0.0-alpha.2\",\n\t\t\"23.0.0-alpha.3\",\n\t\t\"24.0.0-nightly.20221206\",\n\t\t\"24.0.0-nightly.20221207\",\n\t\t\"24.0.0-nightly.20221208\",\n\t\t\"24.0.0-nightly.20221213\",\n\t\t\"24.0.0-nightly.20221214\",\n\t\t\"24.0.0-nightly.20221215\",\n\t\t\"24.0.0-nightly.20221216\"\n\t],\n\t\"110.0.5478.5\": [\n\t\t\"23.0.0-beta.1\",\n\t\t\"23.0.0-beta.2\",\n\t\t\"23.0.0-beta.3\"\n\t],\n\t\"110.0.5481.30\": [\n\t\t\"23.0.0-beta.4\"\n\t],\n\t\"110.0.5481.38\": [\n\t\t\"23.0.0-beta.5\"\n\t],\n\t\"110.0.5481.52\": [\n\t\t\"23.0.0-beta.6\",\n\t\t\"23.0.0-beta.8\"\n\t],\n\t\"109.0.5382.0\": [\n\t\t\"23.0.0-nightly.20221027\",\n\t\t\"23.0.0-nightly.20221028\",\n\t\t\"23.0.0-nightly.20221031\",\n\t\t\"23.0.0-nightly.20221101\",\n\t\t\"23.0.0-nightly.20221102\",\n\t\t\"23.0.0-nightly.20221103\",\n\t\t\"23.0.0-nightly.20221104\",\n\t\t\"23.0.0-nightly.20221107\",\n\t\t\"23.0.0-nightly.20221108\",\n\t\t\"23.0.0-nightly.20221109\",\n\t\t\"23.0.0-nightly.20221110\",\n\t\t\"23.0.0-nightly.20221111\",\n\t\t\"23.0.0-nightly.20221114\",\n\t\t\"23.0.0-nightly.20221115\",\n\t\t\"23.0.0-nightly.20221116\",\n\t\t\"23.0.0-nightly.20221117\"\n\t],\n\t\"110.0.5481.77\": [\n\t\t\"23.0.0\"\n\t],\n\t\"110.0.5481.100\": [\n\t\t\"23.1.0\"\n\t],\n\t\"110.0.5481.104\": [\n\t\t\"23.1.1\"\n\t],\n\t\"110.0.5481.177\": [\n\t\t\"23.1.2\"\n\t],\n\t\"110.0.5481.179\": [\n\t\t\"23.1.3\"\n\t],\n\t\"110.0.5481.192\": [\n\t\t\"23.1.4\"\n\t],\n\t\"111.0.5560.0\": [\n\t\t\"24.0.0-alpha.1\",\n\t\t\"24.0.0-alpha.2\",\n\t\t\"24.0.0-alpha.3\",\n\t\t\"24.0.0-alpha.4\",\n\t\t\"24.0.0-alpha.5\",\n\t\t\"24.0.0-alpha.6\",\n\t\t\"24.0.0-alpha.7\",\n\t\t\"24.0.0-nightly.20230203\",\n\t\t\"24.0.0-nightly.20230206\",\n\t\t\"24.0.0-nightly.20230207\",\n\t\t\"24.0.0-nightly.20230208\",\n\t\t\"24.0.0-nightly.20230209\",\n\t\t\"25.0.0-nightly.20230210\",\n\t\t\"25.0.0-nightly.20230214\",\n\t\t\"25.0.0-nightly.20230215\",\n\t\t\"25.0.0-nightly.20230216\",\n\t\t\"25.0.0-nightly.20230217\",\n\t\t\"25.0.0-nightly.20230220\",\n\t\t\"25.0.0-nightly.20230221\",\n\t\t\"25.0.0-nightly.20230222\",\n\t\t\"25.0.0-nightly.20230223\",\n\t\t\"25.0.0-nightly.20230224\",\n\t\t\"25.0.0-nightly.20230227\",\n\t\t\"25.0.0-nightly.20230228\",\n\t\t\"25.0.0-nightly.20230301\",\n\t\t\"25.0.0-nightly.20230302\",\n\t\t\"25.0.0-nightly.20230303\",\n\t\t\"25.0.0-nightly.20230306\",\n\t\t\"25.0.0-nightly.20230307\",\n\t\t\"25.0.0-nightly.20230308\",\n\t\t\"25.0.0-nightly.20230309\",\n\t\t\"25.0.0-nightly.20230310\"\n\t],\n\t\"111.0.5563.50\": [\n\t\t\"24.0.0-beta.1\",\n\t\t\"24.0.0-beta.2\"\n\t],\n\t\"112.0.5615.20\": [\n\t\t\"24.0.0-beta.3\"\n\t],\n\t\"111.0.5518.0\": [\n\t\t\"24.0.0-nightly.20230109\",\n\t\t\"24.0.0-nightly.20230110\",\n\t\t\"24.0.0-nightly.20230111\",\n\t\t\"24.0.0-nightly.20230112\",\n\t\t\"24.0.0-nightly.20230113\",\n\t\t\"24.0.0-nightly.20230116\",\n\t\t\"24.0.0-nightly.20230117\",\n\t\t\"24.0.0-nightly.20230118\",\n\t\t\"24.0.0-nightly.20230119\",\n\t\t\"24.0.0-nightly.20230120\",\n\t\t\"24.0.0-nightly.20230123\",\n\t\t\"24.0.0-nightly.20230124\",\n\t\t\"24.0.0-nightly.20230125\",\n\t\t\"24.0.0-nightly.20230126\",\n\t\t\"24.0.0-nightly.20230127\",\n\t\t\"24.0.0-nightly.20230131\",\n\t\t\"24.0.0-nightly.20230201\",\n\t\t\"24.0.0-nightly.20230202\"\n\t],\n\t\"113.0.5636.0\": [\n\t\t\"25.0.0-nightly.20230314\"\n\t],\n\t\"113.0.5651.0\": [\n\t\t\"25.0.0-nightly.20230315\"\n\t],\n\t\"113.0.5653.0\": [\n\t\t\"25.0.0-nightly.20230317\"\n\t]\n};/full-chromium-versions.jsonŐ{\"39.0.2171.65\":[\"0.20.0\",\"0.20.1\",\"0.20.2\",\"0.20.3\",\"0.20.4\",\"0.20.5\",\"0.20.6\",\"0.20.7\",\"0.20.8\"],\"40.0.2214.91\":[\"0.21.0\",\"0.21.1\",\"0.21.2\"],\"41.0.2272.76\":[\"0.21.3\",\"0.22.1\",\"0.22.2\",\"0.22.3\",\"0.23.0\",\"0.24.0\"],\"42.0.2311.107\":[\"0.25.0\",\"0.25.1\",\"0.25.2\",\"0.25.3\",\"0.26.0\",\"0.26.1\",\"0.27.0\",\"0.27.1\"],\"43.0.2357.65\":[\"0.27.2\",\"0.27.3\",\"0.28.0\",\"0.28.1\",\"0.28.2\",\"0.28.3\",\"0.29.1\",\"0.29.2\"],\"44.0.2403.125\":[\"0.30.4\",\"0.31.0\"],\"45.0.2454.85\":[\"0.31.2\",\"0.32.2\",\"0.32.3\",\"0.33.0\",\"0.33.1\",\"0.33.2\",\"0.33.3\",\"0.33.4\",\"0.33.6\",\"0.33.7\",\"0.33.8\",\"0.33.9\",\"0.34.0\",\"0.34.1\",\"0.34.2\",\"0.34.3\",\"0.34.4\",\"0.35.1\",\"0.35.2\",\"0.35.3\",\"0.35.4\",\"0.35.5\"],\"47.0.2526.73\":[\"0.36.0\",\"0.36.2\",\"0.36.3\",\"0.36.4\"],\"47.0.2526.110\":[\"0.36.5\",\"0.36.6\",\"0.36.7\",\"0.36.8\",\"0.36.9\",\"0.36.10\",\"0.36.11\",\"0.36.12\"],\"49.0.2623.75\":[\"0.37.0\",\"0.37.1\",\"0.37.3\",\"0.37.4\",\"0.37.5\",\"0.37.6\",\"0.37.7\",\"0.37.8\",\"1.0.0\",\"1.0.1\",\"1.0.2\"],\"50.0.2661.102\":[\"1.1.0\",\"1.1.1\",\"1.1.2\",\"1.1.3\"],\"51.0.2704.63\":[\"1.2.0\",\"1.2.1\"],\"51.0.2704.84\":[\"1.2.2\",\"1.2.3\"],\"51.0.2704.103\":[\"1.2.4\",\"1.2.5\"],\"51.0.2704.106\":[\"1.2.6\",\"1.2.7\",\"1.2.8\"],\"52.0.2743.82\":[\"1.3.0\",\"1.3.1\",\"1.3.2\",\"1.3.3\",\"1.3.4\",\"1.3.5\",\"1.3.6\",\"1.3.7\",\"1.3.9\",\"1.3.10\",\"1.3.13\",\"1.3.14\",\"1.3.15\"],\"53.0.2785.113\":[\"1.4.0\",\"1.4.1\",\"1.4.2\",\"1.4.3\",\"1.4.4\",\"1.4.5\"],\"53.0.2785.143\":[\"1.4.6\",\"1.4.7\",\"1.4.8\",\"1.4.10\",\"1.4.11\",\"1.4.13\",\"1.4.14\",\"1.4.15\",\"1.4.16\"],\"54.0.2840.51\":[\"1.4.12\"],\"54.0.2840.101\":[\"1.5.0\",\"1.5.1\"],\"56.0.2924.87\":[\"1.6.0\",\"1.6.1\",\"1.6.2\",\"1.6.3\",\"1.6.4\",\"1.6.5\",\"1.6.6\",\"1.6.7\",\"1.6.8\",\"1.6.9\",\"1.6.10\",\"1.6.11\",\"1.6.12\",\"1.6.13\",\"1.6.14\",\"1.6.15\",\"1.6.16\",\"1.6.17\",\"1.6.18\"],\"58.0.3029.110\":[\"1.7.0\",\"1.7.1\",\"1.7.2\",\"1.7.3\",\"1.7.4\",\"1.7.5\",\"1.7.6\",\"1.7.7\",\"1.7.8\",\"1.7.9\",\"1.7.10\",\"1.7.11\",\"1.7.12\",\"1.7.13\",\"1.7.14\",\"1.7.15\",\"1.7.16\"],\"59.0.3071.115\":[\"1.8.0\",\"1.8.1\",\"1.8.2-beta.1\",\"1.8.2-beta.2\",\"1.8.2-beta.3\",\"1.8.2-beta.4\",\"1.8.2-beta.5\",\"1.8.2\",\"1.8.3\",\"1.8.4\",\"1.8.5\",\"1.8.6\",\"1.8.7\",\"1.8.8\"],\"61.0.3163.100\":[\"2.0.0-beta.1\",\"2.0.0-beta.2\",\"2.0.0-beta.3\",\"2.0.0-beta.4\",\"2.0.0-beta.5\",\"2.0.0-beta.6\",\"2.0.0-beta.7\",\"2.0.0-beta.8\",\"2.0.0\",\"2.0.1\",\"2.0.2\",\"2.0.3\",\"2.0.4\",\"2.0.5\",\"2.0.6\",\"2.0.7\",\"2.0.8-nightly.20180819\",\"2.0.8-nightly.20180820\",\"2.0.8\",\"2.0.9\",\"2.0.10\",\"2.0.11\",\"2.0.12\",\"2.0.13\",\"2.0.14\",\"2.0.15\",\"2.0.16\",\"2.0.17\",\"2.0.18\",\"2.1.0-unsupported.20180809\"],\"66.0.3359.181\":[\"3.0.0-beta.1\",\"3.0.0-beta.2\",\"3.0.0-beta.3\",\"3.0.0-beta.4\",\"3.0.0-beta.5\",\"3.0.0-beta.6\",\"3.0.0-beta.7\",\"3.0.0-beta.8\",\"3.0.0-beta.9\",\"3.0.0-beta.10\",\"3.0.0-beta.11\",\"3.0.0-beta.12\",\"3.0.0-beta.13\",\"3.0.0-nightly.20180818\",\"3.0.0-nightly.20180821\",\"3.0.0-nightly.20180823\",\"3.0.0-nightly.20180904\",\"3.0.0\",\"3.0.1\",\"3.0.2\",\"3.0.3\",\"3.0.4\",\"3.0.5\",\"3.0.6\",\"3.0.7\",\"3.0.8\",\"3.0.9\",\"3.0.10\",\"3.0.11\",\"3.0.12\",\"3.0.13\",\"3.0.14\",\"3.0.15\",\"3.0.16\",\"3.1.0-beta.1\",\"3.1.0-beta.2\",\"3.1.0-beta.3\",\"3.1.0-beta.4\",\"3.1.0-beta.5\",\"3.1.0\",\"3.1.1\",\"3.1.2\",\"3.1.3\",\"3.1.4\",\"3.1.5\",\"3.1.6\",\"3.1.7\",\"3.1.8\",\"3.1.9\",\"3.1.10\",\"3.1.11\",\"3.1.12\",\"3.1.13\",\"4.0.0-nightly.20180817\",\"4.0.0-nightly.20180819\",\"4.0.0-nightly.20180821\"],\"69.0.3497.106\":[\"4.0.0-beta.1\",\"4.0.0-beta.2\",\"4.0.0-beta.3\",\"4.0.0-beta.4\",\"4.0.0-beta.5\",\"4.0.0-beta.6\",\"4.0.0-beta.7\",\"4.0.0-beta.8\",\"4.0.0-beta.9\",\"4.0.0-beta.10\",\"4.0.0-beta.11\",\"4.0.0-nightly.20181010\",\"4.0.0\",\"4.0.1\",\"4.0.2\",\"4.0.3\",\"4.0.4\",\"4.0.5\",\"4.0.6\"],\"67.0.3396.99\":[\"4.0.0-nightly.20180929\"],\"68.0.3440.128\":[\"4.0.0-nightly.20181006\"],\"69.0.3497.128\":[\"4.0.7\",\"4.0.8\",\"4.1.0\",\"4.1.1\",\"4.1.2\",\"4.1.3\",\"4.1.4\",\"4.1.5\",\"4.2.0\",\"4.2.1\",\"4.2.2\",\"4.2.3\",\"4.2.4\",\"4.2.5\",\"4.2.6\",\"4.2.7\",\"4.2.8\",\"4.2.9\",\"4.2.10\",\"4.2.11\",\"4.2.12\"],\"72.0.3626.52\":[\"5.0.0-beta.1\",\"5.0.0-beta.2\",\"6.0.0-nightly.20190123\"],\"73.0.3683.27\":[\"5.0.0-beta.3\"],\"73.0.3683.54\":[\"5.0.0-beta.4\"],\"73.0.3683.61\":[\"5.0.0-beta.5\"],\"73.0.3683.84\":[\"5.0.0-beta.6\"],\"73.0.3683.94\":[\"5.0.0-beta.7\"],\"73.0.3683.104\":[\"5.0.0-beta.8\"],\"73.0.3683.117\":[\"5.0.0-beta.9\"],\"70.0.3538.110\":[\"5.0.0-nightly.20190107\"],\"71.0.3578.98\":[\"5.0.0-nightly.20190121\",\"5.0.0-nightly.20190122\"],\"73.0.3683.119\":[\"5.0.0\"],\"73.0.3683.121\":[\"5.0.1\",\"5.0.2\",\"5.0.3\",\"5.0.4\",\"5.0.5\",\"5.0.6\",\"5.0.7\",\"5.0.8\",\"5.0.9\",\"5.0.10\",\"5.0.11\",\"5.0.12\",\"5.0.13\"],\"76.0.3774.1\":[\"6.0.0-beta.1\"],\"76.0.3783.1\":[\"6.0.0-beta.2\",\"6.0.0-beta.3\",\"6.0.0-beta.4\"],\"76.0.3805.4\":[\"6.0.0-beta.5\"],\"76.0.3809.3\":[\"6.0.0-beta.6\"],\"76.0.3809.22\":[\"6.0.0-beta.7\"],\"76.0.3809.26\":[\"6.0.0-beta.8\",\"6.0.0-beta.9\"],\"76.0.3809.37\":[\"6.0.0-beta.10\"],\"76.0.3809.42\":[\"6.0.0-beta.11\"],\"76.0.3809.54\":[\"6.0.0-beta.12\"],\"76.0.3809.60\":[\"6.0.0-beta.13\"],\"76.0.3809.68\":[\"6.0.0-beta.14\"],\"76.0.3809.74\":[\"6.0.0-beta.15\"],\"72.0.3626.107\":[\"6.0.0-nightly.20190212\"],\"72.0.3626.110\":[\"6.0.0-nightly.20190213\"],\"74.0.3724.8\":[\"6.0.0-nightly.20190311\"],\"76.0.3809.88\":[\"6.0.0\"],\"76.0.3809.102\":[\"6.0.1\"],\"76.0.3809.110\":[\"6.0.2\"],\"76.0.3809.126\":[\"6.0.3\"],\"76.0.3809.131\":[\"6.0.4\"],\"76.0.3809.136\":[\"6.0.5\"],\"76.0.3809.138\":[\"6.0.6\"],\"76.0.3809.139\":[\"6.0.7\"],\"76.0.3809.146\":[\"6.0.8\",\"6.0.9\",\"6.0.10\",\"6.0.11\",\"6.0.12\",\"6.1.0\",\"6.1.1\",\"6.1.2\",\"6.1.3\",\"6.1.4\",\"6.1.5\",\"6.1.6\",\"6.1.7\",\"6.1.8\",\"6.1.9\",\"6.1.10\",\"6.1.11\",\"6.1.12\"],\"78.0.3866.0\":[\"7.0.0-beta.1\",\"7.0.0-beta.2\",\"7.0.0-beta.3\",\"7.0.0-nightly.20190727\",\"7.0.0-nightly.20190728\",\"7.0.0-nightly.20190729\",\"7.0.0-nightly.20190730\",\"7.0.0-nightly.20190731\",\"8.0.0-nightly.20190801\",\"8.0.0-nightly.20190802\"],\"78.0.3896.6\":[\"7.0.0-beta.4\"],\"78.0.3905.1\":[\"7.0.0-beta.5\",\"7.0.0-beta.6\",\"7.0.0-beta.7\",\"7.0.0\"],\"76.0.3784.0\":[\"7.0.0-nightly.20190521\"],\"76.0.3806.0\":[\"7.0.0-nightly.20190529\",\"7.0.0-nightly.20190530\",\"7.0.0-nightly.20190531\",\"7.0.0-nightly.20190602\",\"7.0.0-nightly.20190603\"],\"77.0.3814.0\":[\"7.0.0-nightly.20190604\"],\"77.0.3815.0\":[\"7.0.0-nightly.20190605\",\"7.0.0-nightly.20190606\",\"7.0.0-nightly.20190607\",\"7.0.0-nightly.20190608\",\"7.0.0-nightly.20190609\",\"7.0.0-nightly.20190611\",\"7.0.0-nightly.20190612\",\"7.0.0-nightly.20190613\",\"7.0.0-nightly.20190615\",\"7.0.0-nightly.20190616\",\"7.0.0-nightly.20190618\",\"7.0.0-nightly.20190619\",\"7.0.0-nightly.20190622\",\"7.0.0-nightly.20190623\",\"7.0.0-nightly.20190624\",\"7.0.0-nightly.20190627\",\"7.0.0-nightly.20190629\",\"7.0.0-nightly.20190630\",\"7.0.0-nightly.20190701\",\"7.0.0-nightly.20190702\"],\"77.0.3843.0\":[\"7.0.0-nightly.20190704\",\"7.0.0-nightly.20190705\"],\"77.0.3848.0\":[\"7.0.0-nightly.20190719\",\"7.0.0-nightly.20190720\",\"7.0.0-nightly.20190721\"],\"77.0.3864.0\":[\"7.0.0-nightly.20190726\"],\"78.0.3904.92\":[\"7.0.1\"],\"78.0.3904.94\":[\"7.1.0\"],\"78.0.3904.99\":[\"7.1.1\"],\"78.0.3904.113\":[\"7.1.2\"],\"78.0.3904.126\":[\"7.1.3\"],\"78.0.3904.130\":[\"7.1.4\",\"7.1.5\",\"7.1.6\",\"7.1.7\",\"7.1.8\",\"7.1.9\",\"7.1.10\",\"7.1.11\",\"7.1.12\",\"7.1.13\",\"7.1.14\",\"7.2.0\",\"7.2.1\",\"7.2.2\",\"7.2.3\",\"7.2.4\",\"7.3.0\",\"7.3.1\",\"7.3.2\",\"7.3.3\"],\"79.0.3931.0\":[\"8.0.0-beta.1\",\"8.0.0-beta.2\",\"8.0.0-nightly.20191019\",\"8.0.0-nightly.20191020\",\"8.0.0-nightly.20191021\",\"8.0.0-nightly.20191023\"],\"80.0.3955.0\":[\"8.0.0-beta.3\",\"8.0.0-beta.4\"],\"80.0.3987.14\":[\"8.0.0-beta.5\"],\"80.0.3987.51\":[\"8.0.0-beta.6\"],\"80.0.3987.59\":[\"8.0.0-beta.7\"],\"80.0.3987.75\":[\"8.0.0-beta.8\",\"8.0.0-beta.9\"],\"78.0.3871.0\":[\"8.0.0-nightly.20190803\",\"8.0.0-nightly.20190806\",\"8.0.0-nightly.20190807\",\"8.0.0-nightly.20190808\",\"8.0.0-nightly.20190809\",\"8.0.0-nightly.20190810\",\"8.0.0-nightly.20190811\",\"8.0.0-nightly.20190812\",\"8.0.0-nightly.20190813\",\"8.0.0-nightly.20190814\",\"8.0.0-nightly.20190815\"],\"78.0.3881.0\":[\"8.0.0-nightly.20190816\",\"8.0.0-nightly.20190817\",\"8.0.0-nightly.20190818\",\"8.0.0-nightly.20190819\",\"8.0.0-nightly.20190820\"],\"78.0.3892.0\":[\"8.0.0-nightly.20190824\",\"8.0.0-nightly.20190825\",\"8.0.0-nightly.20190827\",\"8.0.0-nightly.20190828\",\"8.0.0-nightly.20190830\",\"8.0.0-nightly.20190901\",\"8.0.0-nightly.20190902\",\"8.0.0-nightly.20190907\",\"8.0.0-nightly.20190909\",\"8.0.0-nightly.20190910\",\"8.0.0-nightly.20190911\",\"8.0.0-nightly.20190912\",\"8.0.0-nightly.20190913\",\"8.0.0-nightly.20190914\",\"8.0.0-nightly.20190915\",\"8.0.0-nightly.20190917\"],\"79.0.3915.0\":[\"8.0.0-nightly.20190919\",\"8.0.0-nightly.20190920\"],\"79.0.3919.0\":[\"8.0.0-nightly.20190922\",\"8.0.0-nightly.20190923\",\"8.0.0-nightly.20190924\",\"8.0.0-nightly.20190926\",\"8.0.0-nightly.20190928\",\"8.0.0-nightly.20190929\",\"8.0.0-nightly.20190930\",\"8.0.0-nightly.20191001\",\"8.0.0-nightly.20191004\",\"8.0.0-nightly.20191005\",\"8.0.0-nightly.20191006\",\"8.0.0-nightly.20191009\",\"8.0.0-nightly.20191011\",\"8.0.0-nightly.20191012\",\"8.0.0-nightly.20191017\"],\"80.0.3952.0\":[\"8.0.0-nightly.20191101\",\"8.0.0-nightly.20191103\",\"8.0.0-nightly.20191105\"],\"80.0.3987.86\":[\"8.0.0\",\"8.0.1\",\"8.0.2\"],\"80.0.3987.134\":[\"8.0.3\"],\"80.0.3987.137\":[\"8.1.0\"],\"80.0.3987.141\":[\"8.1.1\"],\"80.0.3987.158\":[\"8.2.0\"],\"80.0.3987.163\":[\"8.2.1\",\"8.2.2\",\"8.2.3\",\"8.5.3\",\"8.5.4\",\"8.5.5\"],\"80.0.3987.165\":[\"8.2.4\",\"8.2.5\",\"8.3.0\",\"8.3.1\",\"8.3.2\",\"8.3.3\",\"8.3.4\",\"8.4.0\",\"8.4.1\",\"8.5.0\",\"8.5.1\",\"8.5.2\"],\"82.0.4048.0\":[\"9.0.0-beta.1\",\"9.0.0-beta.2\",\"9.0.0-beta.3\",\"9.0.0-beta.4\",\"9.0.0-beta.5\"],\"82.0.4058.2\":[\"9.0.0-beta.6\",\"9.0.0-beta.7\",\"9.0.0-beta.9\"],\"82.0.4085.10\":[\"9.0.0-beta.10\"],\"82.0.4085.14\":[\"9.0.0-beta.11\",\"9.0.0-beta.12\",\"9.0.0-beta.13\"],\"82.0.4085.27\":[\"9.0.0-beta.14\"],\"83.0.4102.3\":[\"9.0.0-beta.15\",\"9.0.0-beta.16\"],\"83.0.4103.14\":[\"9.0.0-beta.17\"],\"83.0.4103.16\":[\"9.0.0-beta.18\"],\"83.0.4103.24\":[\"9.0.0-beta.19\"],\"83.0.4103.26\":[\"9.0.0-beta.20\",\"9.0.0-beta.21\"],\"83.0.4103.34\":[\"9.0.0-beta.22\"],\"83.0.4103.44\":[\"9.0.0-beta.23\"],\"83.0.4103.45\":[\"9.0.0-beta.24\"],\"80.0.3954.0\":[\"9.0.0-nightly.20191121\",\"9.0.0-nightly.20191122\",\"9.0.0-nightly.20191123\",\"9.0.0-nightly.20191124\",\"9.0.0-nightly.20191126\",\"9.0.0-nightly.20191128\",\"9.0.0-nightly.20191129\",\"9.0.0-nightly.20191130\",\"9.0.0-nightly.20191201\",\"9.0.0-nightly.20191202\",\"9.0.0-nightly.20191203\",\"9.0.0-nightly.20191204\",\"9.0.0-nightly.20191205\",\"9.0.0-nightly.20191210\"],\"81.0.3994.0\":[\"9.0.0-nightly.20191220\",\"9.0.0-nightly.20191221\",\"9.0.0-nightly.20191222\",\"9.0.0-nightly.20191223\",\"9.0.0-nightly.20191224\",\"9.0.0-nightly.20191225\",\"9.0.0-nightly.20191226\",\"9.0.0-nightly.20191228\",\"9.0.0-nightly.20191229\",\"9.0.0-nightly.20191230\",\"9.0.0-nightly.20191231\",\"9.0.0-nightly.20200101\",\"9.0.0-nightly.20200103\",\"9.0.0-nightly.20200104\",\"9.0.0-nightly.20200105\",\"9.0.0-nightly.20200106\",\"9.0.0-nightly.20200108\",\"9.0.0-nightly.20200109\",\"9.0.0-nightly.20200110\",\"9.0.0-nightly.20200111\",\"9.0.0-nightly.20200113\",\"9.0.0-nightly.20200115\",\"9.0.0-nightly.20200116\",\"9.0.0-nightly.20200117\"],\"81.0.4030.0\":[\"9.0.0-nightly.20200119\",\"9.0.0-nightly.20200121\"],\"83.0.4103.64\":[\"9.0.0\"],\"83.0.4103.94\":[\"9.0.1\",\"9.0.2\"],\"83.0.4103.100\":[\"9.0.3\"],\"83.0.4103.104\":[\"9.0.4\"],\"83.0.4103.119\":[\"9.0.5\"],\"83.0.4103.122\":[\"9.1.0\",\"9.1.1\",\"9.1.2\",\"9.2.0\",\"9.2.1\",\"9.3.0\",\"9.3.1\",\"9.3.2\",\"9.3.3\",\"9.3.4\",\"9.3.5\",\"9.4.0\",\"9.4.1\",\"9.4.2\",\"9.4.3\",\"9.4.4\"],\"84.0.4129.0\":[\"10.0.0-beta.1\",\"10.0.0-beta.2\",\"10.0.0-nightly.20200501\",\"10.0.0-nightly.20200504\",\"10.0.0-nightly.20200505\",\"10.0.0-nightly.20200506\",\"10.0.0-nightly.20200507\",\"10.0.0-nightly.20200508\",\"10.0.0-nightly.20200511\",\"10.0.0-nightly.20200512\",\"10.0.0-nightly.20200513\",\"10.0.0-nightly.20200514\",\"10.0.0-nightly.20200515\",\"10.0.0-nightly.20200518\",\"10.0.0-nightly.20200519\",\"10.0.0-nightly.20200520\",\"10.0.0-nightly.20200521\",\"11.0.0-nightly.20200525\",\"11.0.0-nightly.20200526\"],\"85.0.4161.2\":[\"10.0.0-beta.3\",\"10.0.0-beta.4\"],\"85.0.4181.1\":[\"10.0.0-beta.8\",\"10.0.0-beta.9\"],\"85.0.4183.19\":[\"10.0.0-beta.10\"],\"85.0.4183.20\":[\"10.0.0-beta.11\"],\"85.0.4183.26\":[\"10.0.0-beta.12\"],\"85.0.4183.39\":[\"10.0.0-beta.13\",\"10.0.0-beta.14\",\"10.0.0-beta.15\",\"10.0.0-beta.17\",\"10.0.0-beta.19\",\"10.0.0-beta.20\",\"10.0.0-beta.21\"],\"85.0.4183.70\":[\"10.0.0-beta.23\"],\"85.0.4183.78\":[\"10.0.0-beta.24\"],\"85.0.4183.80\":[\"10.0.0-beta.25\"],\"82.0.4050.0\":[\"10.0.0-nightly.20200209\",\"10.0.0-nightly.20200210\",\"10.0.0-nightly.20200211\",\"10.0.0-nightly.20200216\",\"10.0.0-nightly.20200217\",\"10.0.0-nightly.20200218\",\"10.0.0-nightly.20200221\",\"10.0.0-nightly.20200222\",\"10.0.0-nightly.20200223\",\"10.0.0-nightly.20200226\",\"10.0.0-nightly.20200303\"],\"82.0.4076.0\":[\"10.0.0-nightly.20200304\",\"10.0.0-nightly.20200305\",\"10.0.0-nightly.20200306\",\"10.0.0-nightly.20200309\",\"10.0.0-nightly.20200310\"],\"82.0.4083.0\":[\"10.0.0-nightly.20200311\"],\"83.0.4086.0\":[\"10.0.0-nightly.20200316\"],\"83.0.4087.0\":[\"10.0.0-nightly.20200317\",\"10.0.0-nightly.20200318\",\"10.0.0-nightly.20200320\",\"10.0.0-nightly.20200323\",\"10.0.0-nightly.20200324\",\"10.0.0-nightly.20200325\",\"10.0.0-nightly.20200326\",\"10.0.0-nightly.20200327\",\"10.0.0-nightly.20200330\",\"10.0.0-nightly.20200331\",\"10.0.0-nightly.20200401\",\"10.0.0-nightly.20200402\",\"10.0.0-nightly.20200403\",\"10.0.0-nightly.20200406\"],\"83.0.4095.0\":[\"10.0.0-nightly.20200408\",\"10.0.0-nightly.20200410\",\"10.0.0-nightly.20200413\"],\"84.0.4114.0\":[\"10.0.0-nightly.20200414\"],\"84.0.4115.0\":[\"10.0.0-nightly.20200415\",\"10.0.0-nightly.20200416\",\"10.0.0-nightly.20200417\"],\"84.0.4121.0\":[\"10.0.0-nightly.20200422\",\"10.0.0-nightly.20200423\"],\"84.0.4125.0\":[\"10.0.0-nightly.20200427\",\"10.0.0-nightly.20200428\",\"10.0.0-nightly.20200429\",\"10.0.0-nightly.20200430\"],\"85.0.4183.84\":[\"10.0.0\"],\"85.0.4183.86\":[\"10.0.1\"],\"85.0.4183.87\":[\"10.1.0\"],\"85.0.4183.93\":[\"10.1.1\"],\"85.0.4183.98\":[\"10.1.2\"],\"85.0.4183.121\":[\"10.1.3\",\"10.1.4\",\"10.1.5\",\"10.1.6\",\"10.1.7\",\"10.2.0\",\"10.3.0\",\"10.3.1\",\"10.3.2\",\"10.4.0\",\"10.4.1\",\"10.4.2\",\"10.4.3\",\"10.4.4\",\"10.4.5\",\"10.4.6\",\"10.4.7\"],\"86.0.4234.0\":[\"11.0.0-beta.1\",\"11.0.0-beta.3\",\"11.0.0-beta.4\",\"11.0.0-beta.5\",\"11.0.0-beta.6\",\"11.0.0-beta.7\",\"11.0.0-nightly.20200822\",\"11.0.0-nightly.20200824\",\"11.0.0-nightly.20200825\",\"11.0.0-nightly.20200826\",\"12.0.0-nightly.20200827\",\"12.0.0-nightly.20200831\",\"12.0.0-nightly.20200902\",\"12.0.0-nightly.20200903\",\"12.0.0-nightly.20200907\",\"12.0.0-nightly.20200910\",\"12.0.0-nightly.20200911\",\"12.0.0-nightly.20200914\"],\"87.0.4251.1\":[\"11.0.0-beta.8\",\"11.0.0-beta.9\",\"11.0.0-beta.11\"],\"87.0.4280.11\":[\"11.0.0-beta.12\",\"11.0.0-beta.13\"],\"87.0.4280.27\":[\"11.0.0-beta.16\",\"11.0.0-beta.17\",\"11.0.0-beta.18\",\"11.0.0-beta.19\"],\"87.0.4280.40\":[\"11.0.0-beta.20\"],\"87.0.4280.47\":[\"11.0.0-beta.22\",\"11.0.0-beta.23\"],\"85.0.4156.0\":[\"11.0.0-nightly.20200529\"],\"85.0.4162.0\":[\"11.0.0-nightly.20200602\",\"11.0.0-nightly.20200603\",\"11.0.0-nightly.20200604\",\"11.0.0-nightly.20200609\",\"11.0.0-nightly.20200610\",\"11.0.0-nightly.20200611\",\"11.0.0-nightly.20200615\",\"11.0.0-nightly.20200616\",\"11.0.0-nightly.20200617\",\"11.0.0-nightly.20200618\",\"11.0.0-nightly.20200619\"],\"85.0.4179.0\":[\"11.0.0-nightly.20200701\",\"11.0.0-nightly.20200702\",\"11.0.0-nightly.20200703\",\"11.0.0-nightly.20200706\",\"11.0.0-nightly.20200707\",\"11.0.0-nightly.20200708\",\"11.0.0-nightly.20200709\"],\"86.0.4203.0\":[\"11.0.0-nightly.20200716\",\"11.0.0-nightly.20200717\",\"11.0.0-nightly.20200720\",\"11.0.0-nightly.20200721\"],\"86.0.4209.0\":[\"11.0.0-nightly.20200723\",\"11.0.0-nightly.20200724\",\"11.0.0-nightly.20200729\",\"11.0.0-nightly.20200730\",\"11.0.0-nightly.20200731\",\"11.0.0-nightly.20200803\",\"11.0.0-nightly.20200804\",\"11.0.0-nightly.20200805\",\"11.0.0-nightly.20200811\",\"11.0.0-nightly.20200812\"],\"87.0.4280.60\":[\"11.0.0\",\"11.0.1\"],\"87.0.4280.67\":[\"11.0.2\",\"11.0.3\",\"11.0.4\"],\"87.0.4280.88\":[\"11.0.5\",\"11.1.0\",\"11.1.1\"],\"87.0.4280.141\":[\"11.2.0\",\"11.2.1\",\"11.2.2\",\"11.2.3\",\"11.3.0\",\"11.4.0\",\"11.4.1\",\"11.4.2\",\"11.4.3\",\"11.4.4\",\"11.4.5\",\"11.4.6\",\"11.4.7\",\"11.4.8\",\"11.4.9\",\"11.4.10\",\"11.4.11\",\"11.4.12\",\"11.5.0\"],\"89.0.4328.0\":[\"12.0.0-beta.1\",\"12.0.0-beta.3\",\"12.0.0-beta.4\",\"12.0.0-beta.5\",\"12.0.0-beta.6\",\"12.0.0-beta.7\",\"12.0.0-beta.8\",\"12.0.0-beta.9\",\"12.0.0-beta.10\",\"12.0.0-beta.11\",\"12.0.0-beta.12\",\"12.0.0-beta.14\",\"13.0.0-nightly.20201119\",\"13.0.0-nightly.20201123\",\"13.0.0-nightly.20201124\",\"13.0.0-nightly.20201126\",\"13.0.0-nightly.20201127\",\"13.0.0-nightly.20201130\",\"13.0.0-nightly.20201201\",\"13.0.0-nightly.20201202\",\"13.0.0-nightly.20201203\",\"13.0.0-nightly.20201204\",\"13.0.0-nightly.20201207\",\"13.0.0-nightly.20201208\",\"13.0.0-nightly.20201209\",\"13.0.0-nightly.20201210\",\"13.0.0-nightly.20201211\",\"13.0.0-nightly.20201214\"],\"89.0.4348.1\":[\"12.0.0-beta.16\",\"12.0.0-beta.18\",\"12.0.0-beta.19\",\"12.0.0-beta.20\"],\"89.0.4388.2\":[\"12.0.0-beta.21\",\"12.0.0-beta.22\",\"12.0.0-beta.23\",\"12.0.0-beta.24\",\"12.0.0-beta.25\",\"12.0.0-beta.26\"],\"89.0.4389.23\":[\"12.0.0-beta.27\",\"12.0.0-beta.28\",\"12.0.0-beta.29\"],\"89.0.4389.58\":[\"12.0.0-beta.30\",\"12.0.0-beta.31\"],\"87.0.4268.0\":[\"12.0.0-nightly.20201002\",\"12.0.0-nightly.20201007\",\"12.0.0-nightly.20201009\",\"12.0.0-nightly.20201012\",\"12.0.0-nightly.20201013\",\"12.0.0-nightly.20201014\",\"12.0.0-nightly.20201015\"],\"88.0.4292.0\":[\"12.0.0-nightly.20201023\",\"12.0.0-nightly.20201026\"],\"88.0.4306.0\":[\"12.0.0-nightly.20201030\",\"12.0.0-nightly.20201102\",\"12.0.0-nightly.20201103\",\"12.0.0-nightly.20201104\",\"12.0.0-nightly.20201105\",\"12.0.0-nightly.20201106\",\"12.0.0-nightly.20201111\",\"12.0.0-nightly.20201112\"],\"88.0.4324.0\":[\"12.0.0-nightly.20201116\"],\"89.0.4389.69\":[\"12.0.0\"],\"89.0.4389.82\":[\"12.0.1\"],\"89.0.4389.90\":[\"12.0.2\"],\"89.0.4389.114\":[\"12.0.3\",\"12.0.4\"],\"89.0.4389.128\":[\"12.0.5\",\"12.0.6\",\"12.0.7\",\"12.0.8\",\"12.0.9\",\"12.0.10\",\"12.0.11\",\"12.0.12\",\"12.0.13\",\"12.0.14\",\"12.0.15\",\"12.0.16\",\"12.0.17\",\"12.0.18\",\"12.1.0\",\"12.1.1\",\"12.1.2\",\"12.2.0\",\"12.2.1\",\"12.2.2\",\"12.2.3\"],\"90.0.4402.0\":[\"13.0.0-beta.2\",\"13.0.0-beta.3\",\"13.0.0-nightly.20210210\",\"13.0.0-nightly.20210211\",\"13.0.0-nightly.20210212\",\"13.0.0-nightly.20210216\",\"13.0.0-nightly.20210217\",\"13.0.0-nightly.20210218\",\"13.0.0-nightly.20210219\",\"13.0.0-nightly.20210222\",\"13.0.0-nightly.20210225\",\"13.0.0-nightly.20210226\",\"13.0.0-nightly.20210301\",\"13.0.0-nightly.20210302\",\"13.0.0-nightly.20210303\",\"14.0.0-nightly.20210304\"],\"90.0.4415.0\":[\"13.0.0-beta.4\",\"13.0.0-beta.5\",\"13.0.0-beta.6\",\"13.0.0-beta.7\",\"13.0.0-beta.8\",\"13.0.0-beta.9\",\"13.0.0-beta.10\",\"13.0.0-beta.11\",\"13.0.0-beta.12\",\"13.0.0-beta.13\",\"14.0.0-nightly.20210305\",\"14.0.0-nightly.20210308\",\"14.0.0-nightly.20210309\",\"14.0.0-nightly.20210311\",\"14.0.0-nightly.20210315\",\"14.0.0-nightly.20210316\",\"14.0.0-nightly.20210317\",\"14.0.0-nightly.20210318\",\"14.0.0-nightly.20210319\",\"14.0.0-nightly.20210323\",\"14.0.0-nightly.20210324\",\"14.0.0-nightly.20210325\",\"14.0.0-nightly.20210326\",\"14.0.0-nightly.20210329\",\"14.0.0-nightly.20210330\"],\"91.0.4448.0\":[\"13.0.0-beta.14\",\"13.0.0-beta.16\",\"13.0.0-beta.17\",\"13.0.0-beta.18\",\"13.0.0-beta.20\",\"14.0.0-nightly.20210331\",\"14.0.0-nightly.20210401\",\"14.0.0-nightly.20210402\",\"14.0.0-nightly.20210406\",\"14.0.0-nightly.20210407\",\"14.0.0-nightly.20210408\",\"14.0.0-nightly.20210409\",\"14.0.0-nightly.20210413\"],\"91.0.4472.33\":[\"13.0.0-beta.21\",\"13.0.0-beta.22\",\"13.0.0-beta.23\"],\"91.0.4472.38\":[\"13.0.0-beta.24\",\"13.0.0-beta.25\",\"13.0.0-beta.26\",\"13.0.0-beta.27\",\"13.0.0-beta.28\"],\"89.0.4349.0\":[\"13.0.0-nightly.20201215\",\"13.0.0-nightly.20201216\",\"13.0.0-nightly.20201221\",\"13.0.0-nightly.20201222\"],\"89.0.4359.0\":[\"13.0.0-nightly.20201223\",\"13.0.0-nightly.20210104\",\"13.0.0-nightly.20210108\",\"13.0.0-nightly.20210111\"],\"89.0.4386.0\":[\"13.0.0-nightly.20210113\",\"13.0.0-nightly.20210114\",\"13.0.0-nightly.20210118\",\"13.0.0-nightly.20210122\",\"13.0.0-nightly.20210125\"],\"89.0.4389.0\":[\"13.0.0-nightly.20210127\",\"13.0.0-nightly.20210128\",\"13.0.0-nightly.20210129\",\"13.0.0-nightly.20210201\",\"13.0.0-nightly.20210202\",\"13.0.0-nightly.20210203\",\"13.0.0-nightly.20210205\",\"13.0.0-nightly.20210208\",\"13.0.0-nightly.20210209\"],\"91.0.4472.69\":[\"13.0.0\",\"13.0.1\"],\"91.0.4472.77\":[\"13.1.0\",\"13.1.1\",\"13.1.2\"],\"91.0.4472.106\":[\"13.1.3\",\"13.1.4\"],\"91.0.4472.124\":[\"13.1.5\",\"13.1.6\",\"13.1.7\"],\"91.0.4472.164\":[\"13.1.8\",\"13.1.9\",\"13.2.0\",\"13.2.1\",\"13.2.2\",\"13.2.3\",\"13.3.0\",\"13.4.0\",\"13.5.0\",\"13.5.1\",\"13.5.2\",\"13.6.0\",\"13.6.1\",\"13.6.2\",\"13.6.3\",\"13.6.6\",\"13.6.7\",\"13.6.8\",\"13.6.9\"],\"92.0.4511.0\":[\"14.0.0-beta.1\",\"14.0.0-beta.2\",\"14.0.0-beta.3\",\"14.0.0-nightly.20210520\",\"14.0.0-nightly.20210523\",\"14.0.0-nightly.20210524\",\"15.0.0-nightly.20210527\",\"15.0.0-nightly.20210528\",\"15.0.0-nightly.20210531\",\"15.0.0-nightly.20210601\",\"15.0.0-nightly.20210602\"],\"93.0.4536.0\":[\"14.0.0-beta.5\",\"14.0.0-beta.6\",\"14.0.0-beta.7\",\"14.0.0-beta.8\",\"15.0.0-nightly.20210609\",\"15.0.0-nightly.20210610\",\"15.0.0-nightly.20210611\",\"15.0.0-nightly.20210614\",\"15.0.0-nightly.20210615\",\"15.0.0-nightly.20210616\"],\"93.0.4539.0\":[\"14.0.0-beta.9\",\"14.0.0-beta.10\",\"15.0.0-nightly.20210617\",\"15.0.0-nightly.20210618\",\"15.0.0-nightly.20210621\",\"15.0.0-nightly.20210622\"],\"93.0.4557.4\":[\"14.0.0-beta.11\",\"14.0.0-beta.12\"],\"93.0.4566.0\":[\"14.0.0-beta.13\",\"14.0.0-beta.14\",\"14.0.0-beta.15\",\"14.0.0-beta.16\",\"14.0.0-beta.17\",\"15.0.0-alpha.1\",\"15.0.0-alpha.2\",\"15.0.0-nightly.20210706\",\"15.0.0-nightly.20210707\",\"15.0.0-nightly.20210708\",\"15.0.0-nightly.20210709\",\"15.0.0-nightly.20210712\",\"15.0.0-nightly.20210713\",\"15.0.0-nightly.20210714\",\"15.0.0-nightly.20210715\",\"15.0.0-nightly.20210716\",\"15.0.0-nightly.20210719\",\"15.0.0-nightly.20210720\",\"15.0.0-nightly.20210721\",\"16.0.0-nightly.20210722\",\"16.0.0-nightly.20210723\",\"16.0.0-nightly.20210726\"],\"93.0.4577.15\":[\"14.0.0-beta.18\",\"14.0.0-beta.19\",\"14.0.0-beta.20\",\"14.0.0-beta.21\"],\"93.0.4577.25\":[\"14.0.0-beta.22\",\"14.0.0-beta.23\"],\"93.0.4577.51\":[\"14.0.0-beta.24\",\"14.0.0-beta.25\"],\"92.0.4475.0\":[\"14.0.0-nightly.20210426\",\"14.0.0-nightly.20210427\"],\"92.0.4488.0\":[\"14.0.0-nightly.20210430\",\"14.0.0-nightly.20210503\"],\"92.0.4496.0\":[\"14.0.0-nightly.20210505\"],\"92.0.4498.0\":[\"14.0.0-nightly.20210506\"],\"92.0.4499.0\":[\"14.0.0-nightly.20210507\",\"14.0.0-nightly.20210510\",\"14.0.0-nightly.20210511\",\"14.0.0-nightly.20210512\",\"14.0.0-nightly.20210513\"],\"92.0.4505.0\":[\"14.0.0-nightly.20210514\",\"14.0.0-nightly.20210517\",\"14.0.0-nightly.20210518\",\"14.0.0-nightly.20210519\"],\"93.0.4577.58\":[\"14.0.0\"],\"93.0.4577.63\":[\"14.0.1\"],\"93.0.4577.82\":[\"14.0.2\",\"14.1.0\",\"14.1.1\",\"14.2.0\",\"14.2.1\",\"14.2.2\",\"14.2.3\",\"14.2.4\",\"14.2.5\",\"14.2.6\",\"14.2.7\",\"14.2.8\",\"14.2.9\"],\"94.0.4584.0\":[\"15.0.0-alpha.3\",\"15.0.0-alpha.4\",\"15.0.0-alpha.5\",\"15.0.0-alpha.6\",\"16.0.0-nightly.20210727\",\"16.0.0-nightly.20210728\",\"16.0.0-nightly.20210729\",\"16.0.0-nightly.20210730\",\"16.0.0-nightly.20210802\",\"16.0.0-nightly.20210803\",\"16.0.0-nightly.20210804\",\"16.0.0-nightly.20210805\",\"16.0.0-nightly.20210806\",\"16.0.0-nightly.20210809\",\"16.0.0-nightly.20210810\",\"16.0.0-nightly.20210811\"],\"94.0.4590.2\":[\"15.0.0-alpha.7\",\"15.0.0-alpha.8\",\"15.0.0-alpha.9\",\"16.0.0-nightly.20210812\",\"16.0.0-nightly.20210813\",\"16.0.0-nightly.20210816\",\"16.0.0-nightly.20210817\",\"16.0.0-nightly.20210818\",\"16.0.0-nightly.20210819\",\"16.0.0-nightly.20210820\",\"16.0.0-nightly.20210823\"],\"94.0.4606.12\":[\"15.0.0-alpha.10\"],\"94.0.4606.20\":[\"15.0.0-beta.1\",\"15.0.0-beta.2\"],\"94.0.4606.31\":[\"15.0.0-beta.3\",\"15.0.0-beta.4\",\"15.0.0-beta.5\",\"15.0.0-beta.6\",\"15.0.0-beta.7\"],\"93.0.4530.0\":[\"15.0.0-nightly.20210603\",\"15.0.0-nightly.20210604\"],\"93.0.4535.0\":[\"15.0.0-nightly.20210608\"],\"93.0.4550.0\":[\"15.0.0-nightly.20210623\",\"15.0.0-nightly.20210624\"],\"93.0.4552.0\":[\"15.0.0-nightly.20210625\",\"15.0.0-nightly.20210628\",\"15.0.0-nightly.20210629\"],\"93.0.4558.0\":[\"15.0.0-nightly.20210630\",\"15.0.0-nightly.20210701\",\"15.0.0-nightly.20210702\",\"15.0.0-nightly.20210705\"],\"94.0.4606.51\":[\"15.0.0\"],\"94.0.4606.61\":[\"15.1.0\",\"15.1.1\"],\"94.0.4606.71\":[\"15.1.2\"],\"94.0.4606.81\":[\"15.2.0\",\"15.3.0\",\"15.3.1\",\"15.3.2\",\"15.3.3\",\"15.3.4\",\"15.3.5\",\"15.3.6\",\"15.3.7\",\"15.4.0\",\"15.4.1\",\"15.4.2\",\"15.5.0\",\"15.5.1\",\"15.5.2\",\"15.5.3\",\"15.5.4\",\"15.5.5\",\"15.5.6\",\"15.5.7\"],\"95.0.4629.0\":[\"16.0.0-alpha.1\",\"16.0.0-alpha.2\",\"16.0.0-alpha.3\",\"16.0.0-alpha.4\",\"16.0.0-alpha.5\",\"16.0.0-alpha.6\",\"16.0.0-alpha.7\",\"16.0.0-nightly.20210902\",\"16.0.0-nightly.20210903\",\"16.0.0-nightly.20210906\",\"16.0.0-nightly.20210907\",\"16.0.0-nightly.20210908\",\"16.0.0-nightly.20210909\",\"16.0.0-nightly.20210910\",\"16.0.0-nightly.20210913\",\"16.0.0-nightly.20210914\",\"16.0.0-nightly.20210915\",\"16.0.0-nightly.20210916\",\"16.0.0-nightly.20210917\",\"16.0.0-nightly.20210920\",\"16.0.0-nightly.20210921\",\"16.0.0-nightly.20210922\",\"17.0.0-nightly.20210923\",\"17.0.0-nightly.20210924\",\"17.0.0-nightly.20210927\",\"17.0.0-nightly.20210928\",\"17.0.0-nightly.20210929\",\"17.0.0-nightly.20210930\",\"17.0.0-nightly.20211001\",\"17.0.0-nightly.20211004\",\"17.0.0-nightly.20211005\"],\"96.0.4647.0\":[\"16.0.0-alpha.8\",\"16.0.0-alpha.9\",\"16.0.0-beta.1\",\"16.0.0-beta.2\",\"16.0.0-beta.3\",\"17.0.0-nightly.20211006\",\"17.0.0-nightly.20211007\",\"17.0.0-nightly.20211008\",\"17.0.0-nightly.20211011\",\"17.0.0-nightly.20211012\",\"17.0.0-nightly.20211013\",\"17.0.0-nightly.20211014\",\"17.0.0-nightly.20211015\",\"17.0.0-nightly.20211018\",\"17.0.0-nightly.20211019\",\"17.0.0-nightly.20211020\",\"17.0.0-nightly.20211021\"],\"96.0.4664.18\":[\"16.0.0-beta.4\",\"16.0.0-beta.5\"],\"96.0.4664.27\":[\"16.0.0-beta.6\",\"16.0.0-beta.7\"],\"96.0.4664.35\":[\"16.0.0-beta.8\",\"16.0.0-beta.9\"],\"95.0.4612.5\":[\"16.0.0-nightly.20210824\",\"16.0.0-nightly.20210825\",\"16.0.0-nightly.20210826\",\"16.0.0-nightly.20210827\",\"16.0.0-nightly.20210830\",\"16.0.0-nightly.20210831\",\"16.0.0-nightly.20210901\"],\"96.0.4664.45\":[\"16.0.0\",\"16.0.1\"],\"96.0.4664.55\":[\"16.0.2\",\"16.0.3\",\"16.0.4\",\"16.0.5\"],\"96.0.4664.110\":[\"16.0.6\",\"16.0.7\",\"16.0.8\"],\"96.0.4664.174\":[\"16.0.9\",\"16.0.10\",\"16.1.0\",\"16.1.1\",\"16.2.0\",\"16.2.1\",\"16.2.2\",\"16.2.3\",\"16.2.4\",\"16.2.5\",\"16.2.6\",\"16.2.7\",\"16.2.8\"],\"96.0.4664.4\":[\"17.0.0-alpha.1\",\"17.0.0-alpha.2\",\"17.0.0-alpha.3\",\"17.0.0-nightly.20211022\",\"17.0.0-nightly.20211025\",\"17.0.0-nightly.20211026\",\"17.0.0-nightly.20211027\",\"17.0.0-nightly.20211028\",\"17.0.0-nightly.20211029\",\"17.0.0-nightly.20211101\",\"17.0.0-nightly.20211102\",\"17.0.0-nightly.20211103\",\"17.0.0-nightly.20211104\",\"17.0.0-nightly.20211105\",\"17.0.0-nightly.20211108\",\"17.0.0-nightly.20211109\",\"17.0.0-nightly.20211110\",\"17.0.0-nightly.20211111\",\"17.0.0-nightly.20211112\",\"17.0.0-nightly.20211115\",\"17.0.0-nightly.20211116\",\"17.0.0-nightly.20211117\",\"18.0.0-nightly.20211118\",\"18.0.0-nightly.20211119\",\"18.0.0-nightly.20211122\",\"18.0.0-nightly.20211123\"],\"98.0.4706.0\":[\"17.0.0-alpha.4\",\"17.0.0-alpha.5\",\"17.0.0-alpha.6\",\"17.0.0-beta.1\",\"17.0.0-beta.2\",\"18.0.0-nightly.20211124\",\"18.0.0-nightly.20211125\",\"18.0.0-nightly.20211126\",\"18.0.0-nightly.20211129\",\"18.0.0-nightly.20211130\",\"18.0.0-nightly.20211201\",\"18.0.0-nightly.20211202\",\"18.0.0-nightly.20211203\",\"18.0.0-nightly.20211206\",\"18.0.0-nightly.20211207\",\"18.0.0-nightly.20211208\",\"18.0.0-nightly.20211209\",\"18.0.0-nightly.20211210\",\"18.0.0-nightly.20211213\",\"18.0.0-nightly.20211214\",\"18.0.0-nightly.20211215\",\"18.0.0-nightly.20211216\",\"18.0.0-nightly.20211217\",\"18.0.0-nightly.20211220\",\"18.0.0-nightly.20211221\",\"18.0.0-nightly.20211222\",\"18.0.0-nightly.20211223\",\"18.0.0-nightly.20211228\",\"18.0.0-nightly.20211229\",\"18.0.0-nightly.20211231\",\"18.0.0-nightly.20220103\",\"18.0.0-nightly.20220104\",\"18.0.0-nightly.20220105\",\"18.0.0-nightly.20220106\",\"18.0.0-nightly.20220107\",\"18.0.0-nightly.20220110\"],\"98.0.4758.9\":[\"17.0.0-beta.3\"],\"98.0.4758.11\":[\"17.0.0-beta.4\",\"17.0.0-beta.5\",\"17.0.0-beta.6\",\"17.0.0-beta.7\",\"17.0.0-beta.8\",\"17.0.0-beta.9\"],\"98.0.4758.74\":[\"17.0.0\"],\"98.0.4758.82\":[\"17.0.1\"],\"98.0.4758.102\":[\"17.1.0\"],\"98.0.4758.109\":[\"17.1.1\",\"17.1.2\",\"17.2.0\"],\"98.0.4758.141\":[\"17.3.0\",\"17.3.1\",\"17.4.0\",\"17.4.1\",\"17.4.2\",\"17.4.3\",\"17.4.4\",\"17.4.5\",\"17.4.6\",\"17.4.7\",\"17.4.8\",\"17.4.9\",\"17.4.10\",\"17.4.11\"],\"99.0.4767.0\":[\"18.0.0-alpha.1\",\"18.0.0-alpha.2\",\"18.0.0-alpha.3\",\"18.0.0-alpha.4\",\"18.0.0-alpha.5\",\"18.0.0-nightly.20220111\",\"18.0.0-nightly.20220112\",\"18.0.0-nightly.20220113\",\"18.0.0-nightly.20220114\",\"18.0.0-nightly.20220117\",\"18.0.0-nightly.20220118\",\"18.0.0-nightly.20220119\",\"18.0.0-nightly.20220121\",\"18.0.0-nightly.20220124\",\"18.0.0-nightly.20220125\",\"18.0.0-nightly.20220127\",\"18.0.0-nightly.20220128\",\"18.0.0-nightly.20220131\",\"18.0.0-nightly.20220201\",\"19.0.0-nightly.20220202\",\"19.0.0-nightly.20220203\",\"19.0.0-nightly.20220204\",\"19.0.0-nightly.20220207\",\"19.0.0-nightly.20220208\",\"19.0.0-nightly.20220209\"],\"100.0.4894.0\":[\"18.0.0-beta.1\",\"18.0.0-beta.2\",\"18.0.0-beta.3\",\"18.0.0-beta.4\",\"18.0.0-beta.5\",\"18.0.0-beta.6\",\"19.0.0-nightly.20220308\",\"19.0.0-nightly.20220309\",\"19.0.0-nightly.20220310\",\"19.0.0-nightly.20220311\",\"19.0.0-nightly.20220314\",\"19.0.0-nightly.20220315\",\"19.0.0-nightly.20220316\",\"19.0.0-nightly.20220317\",\"19.0.0-nightly.20220318\",\"19.0.0-nightly.20220321\",\"19.0.0-nightly.20220322\",\"19.0.0-nightly.20220323\",\"19.0.0-nightly.20220324\"],\"100.0.4896.56\":[\"18.0.0\"],\"100.0.4896.60\":[\"18.0.1\",\"18.0.2\"],\"100.0.4896.75\":[\"18.0.3\",\"18.0.4\"],\"100.0.4896.127\":[\"18.1.0\"],\"100.0.4896.143\":[\"18.2.0\",\"18.2.1\",\"18.2.2\",\"18.2.3\"],\"100.0.4896.160\":[\"18.2.4\",\"18.3.0\",\"18.3.1\",\"18.3.2\",\"18.3.3\",\"18.3.4\",\"18.3.5\",\"18.3.6\",\"18.3.7\",\"18.3.8\",\"18.3.9\",\"18.3.11\",\"18.3.12\",\"18.3.13\",\"18.3.14\",\"18.3.15\"],\"102.0.4962.3\":[\"19.0.0-alpha.1\",\"19.0.0-nightly.20220328\",\"19.0.0-nightly.20220329\",\"20.0.0-nightly.20220330\"],\"102.0.4971.0\":[\"19.0.0-alpha.2\",\"19.0.0-alpha.3\",\"20.0.0-nightly.20220411\"],\"102.0.4989.0\":[\"19.0.0-alpha.4\",\"19.0.0-alpha.5\",\"20.0.0-nightly.20220414\",\"20.0.0-nightly.20220415\",\"20.0.0-nightly.20220418\",\"20.0.0-nightly.20220419\",\"20.0.0-nightly.20220420\",\"20.0.0-nightly.20220421\"],\"102.0.4999.0\":[\"19.0.0-beta.1\",\"19.0.0-beta.2\",\"19.0.0-beta.3\",\"20.0.0-nightly.20220425\",\"20.0.0-nightly.20220426\",\"20.0.0-nightly.20220427\",\"20.0.0-nightly.20220428\",\"20.0.0-nightly.20220429\",\"20.0.0-nightly.20220502\",\"20.0.0-nightly.20220503\",\"20.0.0-nightly.20220504\",\"20.0.0-nightly.20220505\",\"20.0.0-nightly.20220506\",\"20.0.0-nightly.20220509\",\"20.0.0-nightly.20220511\",\"20.0.0-nightly.20220512\",\"20.0.0-nightly.20220513\",\"20.0.0-nightly.20220516\",\"20.0.0-nightly.20220517\"],\"102.0.5005.27\":[\"19.0.0-beta.4\"],\"102.0.5005.40\":[\"19.0.0-beta.5\",\"19.0.0-beta.6\",\"19.0.0-beta.7\"],\"102.0.5005.49\":[\"19.0.0-beta.8\"],\"102.0.4961.0\":[\"19.0.0-nightly.20220325\"],\"102.0.5005.61\":[\"19.0.0\",\"19.0.1\"],\"102.0.5005.63\":[\"19.0.2\",\"19.0.3\",\"19.0.4\"],\"102.0.5005.115\":[\"19.0.5\",\"19.0.6\"],\"102.0.5005.134\":[\"19.0.7\"],\"102.0.5005.148\":[\"19.0.8\"],\"102.0.5005.167\":[\"19.0.9\",\"19.0.10\",\"19.0.11\",\"19.0.12\",\"19.0.13\",\"19.0.14\",\"19.0.15\",\"19.0.16\",\"19.0.17\",\"19.1.0\",\"19.1.1\",\"19.1.2\",\"19.1.3\",\"19.1.4\",\"19.1.5\",\"19.1.6\",\"19.1.7\",\"19.1.8\",\"19.1.9\"],\"103.0.5044.0\":[\"20.0.0-alpha.1\",\"20.0.0-nightly.20220518\",\"20.0.0-nightly.20220519\",\"20.0.0-nightly.20220520\",\"20.0.0-nightly.20220523\",\"20.0.0-nightly.20220524\",\"21.0.0-nightly.20220526\",\"21.0.0-nightly.20220527\",\"21.0.0-nightly.20220530\",\"21.0.0-nightly.20220531\"],\"104.0.5073.0\":[\"20.0.0-alpha.2\",\"20.0.0-alpha.3\",\"20.0.0-alpha.4\",\"20.0.0-alpha.5\",\"20.0.0-alpha.6\",\"20.0.0-alpha.7\",\"20.0.0-beta.1\",\"20.0.0-beta.2\",\"20.0.0-beta.3\",\"20.0.0-beta.4\",\"20.0.0-beta.5\",\"20.0.0-beta.6\",\"20.0.0-beta.7\",\"20.0.0-beta.8\",\"21.0.0-nightly.20220602\",\"21.0.0-nightly.20220603\",\"21.0.0-nightly.20220606\",\"21.0.0-nightly.20220607\",\"21.0.0-nightly.20220608\",\"21.0.0-nightly.20220609\",\"21.0.0-nightly.20220610\",\"21.0.0-nightly.20220613\",\"21.0.0-nightly.20220614\",\"21.0.0-nightly.20220615\",\"21.0.0-nightly.20220616\",\"21.0.0-nightly.20220617\",\"21.0.0-nightly.20220620\",\"21.0.0-nightly.20220621\",\"21.0.0-nightly.20220622\",\"21.0.0-nightly.20220623\",\"21.0.0-nightly.20220624\",\"21.0.0-nightly.20220627\"],\"104.0.5112.39\":[\"20.0.0-beta.9\"],\"104.0.5112.48\":[\"20.0.0-beta.10\",\"20.0.0-beta.11\",\"20.0.0-beta.12\"],\"104.0.5112.57\":[\"20.0.0-beta.13\"],\"104.0.5112.65\":[\"20.0.0\"],\"104.0.5112.81\":[\"20.0.1\",\"20.0.2\",\"20.0.3\"],\"104.0.5112.102\":[\"20.1.0\",\"20.1.1\"],\"104.0.5112.114\":[\"20.1.2\",\"20.1.3\",\"20.1.4\"],\"104.0.5112.124\":[\"20.2.0\",\"20.3.0\",\"20.3.1\",\"20.3.2\",\"20.3.3\",\"20.3.4\",\"20.3.5\",\"20.3.6\",\"20.3.7\",\"20.3.8\",\"20.3.9\",\"20.3.10\",\"20.3.11\",\"20.3.12\"],\"105.0.5187.0\":[\"21.0.0-alpha.1\",\"21.0.0-alpha.2\",\"21.0.0-alpha.3\",\"21.0.0-alpha.4\",\"21.0.0-alpha.5\",\"21.0.0-nightly.20220720\",\"21.0.0-nightly.20220721\",\"21.0.0-nightly.20220722\",\"21.0.0-nightly.20220725\",\"21.0.0-nightly.20220726\",\"21.0.0-nightly.20220727\",\"21.0.0-nightly.20220728\",\"21.0.0-nightly.20220801\",\"21.0.0-nightly.20220802\",\"22.0.0-nightly.20220808\",\"22.0.0-nightly.20220809\",\"22.0.0-nightly.20220810\",\"22.0.0-nightly.20220811\",\"22.0.0-nightly.20220812\",\"22.0.0-nightly.20220815\",\"22.0.0-nightly.20220816\",\"22.0.0-nightly.20220817\"],\"106.0.5216.0\":[\"21.0.0-alpha.6\",\"21.0.0-beta.1\",\"21.0.0-beta.2\",\"21.0.0-beta.3\",\"21.0.0-beta.4\",\"21.0.0-beta.5\",\"22.0.0-nightly.20220822\",\"22.0.0-nightly.20220823\",\"22.0.0-nightly.20220824\",\"22.0.0-nightly.20220825\",\"22.0.0-nightly.20220829\",\"22.0.0-nightly.20220830\",\"22.0.0-nightly.20220831\",\"22.0.0-nightly.20220901\",\"22.0.0-nightly.20220902\",\"22.0.0-nightly.20220905\"],\"106.0.5249.40\":[\"21.0.0-beta.6\",\"21.0.0-beta.7\",\"21.0.0-beta.8\"],\"105.0.5129.0\":[\"21.0.0-nightly.20220628\",\"21.0.0-nightly.20220629\",\"21.0.0-nightly.20220630\",\"21.0.0-nightly.20220701\",\"21.0.0-nightly.20220704\",\"21.0.0-nightly.20220705\",\"21.0.0-nightly.20220706\",\"21.0.0-nightly.20220707\",\"21.0.0-nightly.20220708\",\"21.0.0-nightly.20220711\",\"21.0.0-nightly.20220712\",\"21.0.0-nightly.20220713\"],\"105.0.5173.0\":[\"21.0.0-nightly.20220715\",\"21.0.0-nightly.20220718\",\"21.0.0-nightly.20220719\"],\"106.0.5249.51\":[\"21.0.0\"],\"106.0.5249.61\":[\"21.0.1\"],\"106.0.5249.91\":[\"21.1.0\"],\"106.0.5249.103\":[\"21.1.1\"],\"106.0.5249.119\":[\"21.2.0\"],\"106.0.5249.165\":[\"21.2.1\"],\"106.0.5249.168\":[\"21.2.2\",\"21.2.3\"],\"106.0.5249.181\":[\"21.3.0\",\"21.3.1\"],\"106.0.5249.199\":[\"21.3.3\",\"21.3.4\",\"21.3.5\",\"21.4.0\",\"21.4.1\",\"21.4.2\",\"21.4.3\"],\"107.0.5286.0\":[\"22.0.0-alpha.1\",\"22.0.0-nightly.20220909\",\"22.0.0-nightly.20220912\",\"22.0.0-nightly.20220913\",\"22.0.0-nightly.20220914\",\"22.0.0-nightly.20220915\",\"22.0.0-nightly.20220916\",\"22.0.0-nightly.20220919\",\"22.0.0-nightly.20220920\",\"22.0.0-nightly.20220921\",\"22.0.0-nightly.20220922\",\"22.0.0-nightly.20220923\",\"22.0.0-nightly.20220926\",\"22.0.0-nightly.20220927\",\"22.0.0-nightly.20220928\",\"23.0.0-nightly.20220929\",\"23.0.0-nightly.20220930\",\"23.0.0-nightly.20221003\"],\"108.0.5329.0\":[\"22.0.0-alpha.3\",\"22.0.0-alpha.4\",\"22.0.0-alpha.5\",\"22.0.0-alpha.6\",\"23.0.0-nightly.20221004\",\"23.0.0-nightly.20221005\",\"23.0.0-nightly.20221006\",\"23.0.0-nightly.20221007\",\"23.0.0-nightly.20221010\",\"23.0.0-nightly.20221011\",\"23.0.0-nightly.20221012\",\"23.0.0-nightly.20221013\",\"23.0.0-nightly.20221014\",\"23.0.0-nightly.20221017\"],\"108.0.5355.0\":[\"22.0.0-alpha.7\",\"23.0.0-nightly.20221018\",\"23.0.0-nightly.20221019\",\"23.0.0-nightly.20221020\",\"23.0.0-nightly.20221021\",\"23.0.0-nightly.20221024\",\"23.0.0-nightly.20221026\"],\"108.0.5359.10\":[\"22.0.0-alpha.8\",\"22.0.0-beta.1\",\"22.0.0-beta.2\",\"22.0.0-beta.3\"],\"108.0.5359.29\":[\"22.0.0-beta.4\"],\"108.0.5359.40\":[\"22.0.0-beta.5\",\"22.0.0-beta.6\"],\"108.0.5359.48\":[\"22.0.0-beta.7\",\"22.0.0-beta.8\"],\"107.0.5274.0\":[\"22.0.0-nightly.20220908\"],\"108.0.5359.62\":[\"22.0.0\"],\"108.0.5359.125\":[\"22.0.1\"],\"108.0.5359.179\":[\"22.0.2\",\"22.0.3\",\"22.1.0\"],\"108.0.5359.215\":[\"22.2.0\",\"22.2.1\",\"22.3.0\",\"22.3.1\",\"22.3.2\",\"22.3.3\"],\"110.0.5415.0\":[\"23.0.0-alpha.1\",\"23.0.0-nightly.20221118\",\"23.0.0-nightly.20221121\",\"23.0.0-nightly.20221122\",\"23.0.0-nightly.20221123\",\"23.0.0-nightly.20221124\",\"23.0.0-nightly.20221125\",\"23.0.0-nightly.20221128\",\"23.0.0-nightly.20221129\",\"23.0.0-nightly.20221130\",\"24.0.0-nightly.20221201\",\"24.0.0-nightly.20221202\",\"24.0.0-nightly.20221205\"],\"110.0.5451.0\":[\"23.0.0-alpha.2\",\"23.0.0-alpha.3\",\"24.0.0-nightly.20221206\",\"24.0.0-nightly.20221207\",\"24.0.0-nightly.20221208\",\"24.0.0-nightly.20221213\",\"24.0.0-nightly.20221214\",\"24.0.0-nightly.20221215\",\"24.0.0-nightly.20221216\"],\"110.0.5478.5\":[\"23.0.0-beta.1\",\"23.0.0-beta.2\",\"23.0.0-beta.3\"],\"110.0.5481.30\":[\"23.0.0-beta.4\"],\"110.0.5481.38\":[\"23.0.0-beta.5\"],\"110.0.5481.52\":[\"23.0.0-beta.6\",\"23.0.0-beta.8\"],\"109.0.5382.0\":[\"23.0.0-nightly.20221027\",\"23.0.0-nightly.20221028\",\"23.0.0-nightly.20221031\",\"23.0.0-nightly.20221101\",\"23.0.0-nightly.20221102\",\"23.0.0-nightly.20221103\",\"23.0.0-nightly.20221104\",\"23.0.0-nightly.20221107\",\"23.0.0-nightly.20221108\",\"23.0.0-nightly.20221109\",\"23.0.0-nightly.20221110\",\"23.0.0-nightly.20221111\",\"23.0.0-nightly.20221114\",\"23.0.0-nightly.20221115\",\"23.0.0-nightly.20221116\",\"23.0.0-nightly.20221117\"],\"110.0.5481.77\":[\"23.0.0\"],\"110.0.5481.100\":[\"23.1.0\"],\"110.0.5481.104\":[\"23.1.1\"],\"110.0.5481.177\":[\"23.1.2\"],\"110.0.5481.179\":[\"23.1.3\"],\"110.0.5481.192\":[\"23.1.4\"],\"111.0.5560.0\":[\"24.0.0-alpha.1\",\"24.0.0-alpha.2\",\"24.0.0-alpha.3\",\"24.0.0-alpha.4\",\"24.0.0-alpha.5\",\"24.0.0-alpha.6\",\"24.0.0-alpha.7\",\"24.0.0-nightly.20230203\",\"24.0.0-nightly.20230206\",\"24.0.0-nightly.20230207\",\"24.0.0-nightly.20230208\",\"24.0.0-nightly.20230209\",\"25.0.0-nightly.20230210\",\"25.0.0-nightly.20230214\",\"25.0.0-nightly.20230215\",\"25.0.0-nightly.20230216\",\"25.0.0-nightly.20230217\",\"25.0.0-nightly.20230220\",\"25.0.0-nightly.20230221\",\"25.0.0-nightly.20230222\",\"25.0.0-nightly.20230223\",\"25.0.0-nightly.20230224\",\"25.0.0-nightly.20230227\",\"25.0.0-nightly.20230228\",\"25.0.0-nightly.20230301\",\"25.0.0-nightly.20230302\",\"25.0.0-nightly.20230303\",\"25.0.0-nightly.20230306\",\"25.0.0-nightly.20230307\",\"25.0.0-nightly.20230308\",\"25.0.0-nightly.20230309\",\"25.0.0-nightly.20230310\"],\"111.0.5563.50\":[\"24.0.0-beta.1\",\"24.0.0-beta.2\"],\"112.0.5615.20\":[\"24.0.0-beta.3\"],\"111.0.5518.0\":[\"24.0.0-nightly.20230109\",\"24.0.0-nightly.20230110\",\"24.0.0-nightly.20230111\",\"24.0.0-nightly.20230112\",\"24.0.0-nightly.20230113\",\"24.0.0-nightly.20230116\",\"24.0.0-nightly.20230117\",\"24.0.0-nightly.20230118\",\"24.0.0-nightly.20230119\",\"24.0.0-nightly.20230120\",\"24.0.0-nightly.20230123\",\"24.0.0-nightly.20230124\",\"24.0.0-nightly.20230125\",\"24.0.0-nightly.20230126\",\"24.0.0-nightly.20230127\",\"24.0.0-nightly.20230131\",\"24.0.0-nightly.20230201\",\"24.0.0-nightly.20230202\"],\"113.0.5636.0\":[\"25.0.0-nightly.20230314\"],\"113.0.5651.0\":[\"25.0.0-nightly.20230315\"],\"113.0.5653.0\":[\"25.0.0-nightly.20230317\"]}/chromium-versions.js\u0003'module.exports = {\n\t\"39\": \"0.20\",\n\t\"40\": \"0.21\",\n\t\"41\": \"0.21\",\n\t\"42\": \"0.25\",\n\t\"43\": \"0.27\",\n\t\"44\": \"0.30\",\n\t\"45\": \"0.31\",\n\t\"47\": \"0.36\",\n\t\"49\": \"0.37\",\n\t\"50\": \"1.1\",\n\t\"51\": \"1.2\",\n\t\"52\": \"1.3\",\n\t\"53\": \"1.4\",\n\t\"54\": \"1.4\",\n\t\"56\": \"1.6\",\n\t\"58\": \"1.7\",\n\t\"59\": \"1.8\",\n\t\"61\": \"2.0\",\n\t\"66\": \"3.0\",\n\t\"69\": \"4.0\",\n\t\"72\": \"5.0\",\n\t\"73\": \"5.0\",\n\t\"76\": \"6.0\",\n\t\"78\": \"7.0\",\n\t\"79\": \"8.0\",\n\t\"80\": \"8.0\",\n\t\"82\": \"9.0\",\n\t\"83\": \"9.0\",\n\t\"84\": \"10.0\",\n\t\"85\": \"10.0\",\n\t\"86\": \"11.0\",\n\t\"87\": \"11.0\",\n\t\"89\": \"12.0\",\n\t\"90\": \"13.0\",\n\t\"91\": \"13.0\",\n\t\"92\": \"14.0\",\n\t\"93\": \"14.0\",\n\t\"94\": \"15.0\",\n\t\"95\": \"16.0\",\n\t\"96\": \"16.0\",\n\t\"98\": \"17.0\",\n\t\"99\": \"18.0\",\n\t\"100\": \"18.0\",\n\t\"102\": \"19.0\",\n\t\"103\": \"20.0\",\n\t\"104\": \"20.0\",\n\t\"105\": \"21.0\",\n\t\"106\": \"21.0\",\n\t\"107\": \"22.0\",\n\t\"108\": \"22.0\",\n\t\"110\": \"23.0\",\n\t\"111\": \"24.0\",\n\t\"112\": \"24.0\"\n};/full-versions.jsmodule.exports = {\n\t\"0.20.0\": \"39.0.2171.65\",\n\t\"0.20.1\": \"39.0.2171.65\",\n\t\"0.20.2\": \"39.0.2171.65\",\n\t\"0.20.3\": \"39.0.2171.65\",\n\t\"0.20.4\": \"39.0.2171.65\",\n\t\"0.20.5\": \"39.0.2171.65\",\n\t\"0.20.6\": \"39.0.2171.65\",\n\t\"0.20.7\": \"39.0.2171.65\",\n\t\"0.20.8\": \"39.0.2171.65\",\n\t\"0.21.0\": \"40.0.2214.91\",\n\t\"0.21.1\": \"40.0.2214.91\",\n\t\"0.21.2\": \"40.0.2214.91\",\n\t\"0.21.3\": \"41.0.2272.76\",\n\t\"0.22.1\": \"41.0.2272.76\",\n\t\"0.22.2\": \"41.0.2272.76\",\n\t\"0.22.3\": \"41.0.2272.76\",\n\t\"0.23.0\": \"41.0.2272.76\",\n\t\"0.24.0\": \"41.0.2272.76\",\n\t\"0.25.0\": \"42.0.2311.107\",\n\t\"0.25.1\": \"42.0.2311.107\",\n\t\"0.25.2\": \"42.0.2311.107\",\n\t\"0.25.3\": \"42.0.2311.107\",\n\t\"0.26.0\": \"42.0.2311.107\",\n\t\"0.26.1\": \"42.0.2311.107\",\n\t\"0.27.0\": \"42.0.2311.107\",\n\t\"0.27.1\": \"42.0.2311.107\",\n\t\"0.27.2\": \"43.0.2357.65\",\n\t\"0.27.3\": \"43.0.2357.65\",\n\t\"0.28.0\": \"43.0.2357.65\",\n\t\"0.28.1\": \"43.0.2357.65\",\n\t\"0.28.2\": \"43.0.2357.65\",\n\t\"0.28.3\": \"43.0.2357.65\",\n\t\"0.29.1\": \"43.0.2357.65\",\n\t\"0.29.2\": \"43.0.2357.65\",\n\t\"0.30.4\": \"44.0.2403.125\",\n\t\"0.31.0\": \"44.0.2403.125\",\n\t\"0.31.2\": \"45.0.2454.85\",\n\t\"0.32.2\": \"45.0.2454.85\",\n\t\"0.32.3\": \"45.0.2454.85\",\n\t\"0.33.0\": \"45.0.2454.85\",\n\t\"0.33.1\": \"45.0.2454.85\",\n\t\"0.33.2\": \"45.0.2454.85\",\n\t\"0.33.3\": \"45.0.2454.85\",\n\t\"0.33.4\": \"45.0.2454.85\",\n\t\"0.33.6\": \"45.0.2454.85\",\n\t\"0.33.7\": \"45.0.2454.85\",\n\t\"0.33.8\": \"45.0.2454.85\",\n\t\"0.33.9\": \"45.0.2454.85\",\n\t\"0.34.0\": \"45.0.2454.85\",\n\t\"0.34.1\": \"45.0.2454.85\",\n\t\"0.34.2\": \"45.0.2454.85\",\n\t\"0.34.3\": \"45.0.2454.85\",\n\t\"0.34.4\": \"45.0.2454.85\",\n\t\"0.35.1\": \"45.0.2454.85\",\n\t\"0.35.2\": \"45.0.2454.85\",\n\t\"0.35.3\": \"45.0.2454.85\",\n\t\"0.35.4\": \"45.0.2454.85\",\n\t\"0.35.5\": \"45.0.2454.85\",\n\t\"0.36.0\": \"47.0.2526.73\",\n\t\"0.36.2\": \"47.0.2526.73\",\n\t\"0.36.3\": \"47.0.2526.73\",\n\t\"0.36.4\": \"47.0.2526.73\",\n\t\"0.36.5\": \"47.0.2526.110\",\n\t\"0.36.6\": \"47.0.2526.110\",\n\t\"0.36.7\": \"47.0.2526.110\",\n\t\"0.36.8\": \"47.0.2526.110\",\n\t\"0.36.9\": \"47.0.2526.110\",\n\t\"0.36.10\": \"47.0.2526.110\",\n\t\"0.36.11\": \"47.0.2526.110\",\n\t\"0.36.12\": \"47.0.2526.110\",\n\t\"0.37.0\": \"49.0.2623.75\",\n\t\"0.37.1\": \"49.0.2623.75\",\n\t\"0.37.3\": \"49.0.2623.75\",\n\t\"0.37.4\": \"49.0.2623.75\",\n\t\"0.37.5\": \"49.0.2623.75\",\n\t\"0.37.6\": \"49.0.2623.75\",\n\t\"0.37.7\": \"49.0.2623.75\",\n\t\"0.37.8\": \"49.0.2623.75\",\n\t\"1.0.0\": \"49.0.2623.75\",\n\t\"1.0.1\": \"49.0.2623.75\",\n\t\"1.0.2\": \"49.0.2623.75\",\n\t\"1.1.0\": \"50.0.2661.102\",\n\t\"1.1.1\": \"50.0.2661.102\",\n\t\"1.1.2\": \"50.0.2661.102\",\n\t\"1.1.3\": \"50.0.2661.102\",\n\t\"1.2.0\": \"51.0.2704.63\",\n\t\"1.2.1\": \"51.0.2704.63\",\n\t\"1.2.2\": \"51.0.2704.84\",\n\t\"1.2.3\": \"51.0.2704.84\",\n\t\"1.2.4\": \"51.0.2704.103\",\n\t\"1.2.5\": \"51.0.2704.103\",\n\t\"1.2.6\": \"51.0.2704.106\",\n\t\"1.2.7\": \"51.0.2704.106\",\n\t\"1.2.8\": \"51.0.2704.106\",\n\t\"1.3.0\": \"52.0.2743.82\",\n\t\"1.3.1\": \"52.0.2743.82\",\n\t\"1.3.2\": \"52.0.2743.82\",\n\t\"1.3.3\": \"52.0.2743.82\",\n\t\"1.3.4\": \"52.0.2743.82\",\n\t\"1.3.5\": \"52.0.2743.82\",\n\t\"1.3.6\": \"52.0.2743.82\",\n\t\"1.3.7\": \"52.0.2743.82\",\n\t\"1.3.9\": \"52.0.2743.82\",\n\t\"1.3.10\": \"52.0.2743.82\",\n\t\"1.3.13\": \"52.0.2743.82\",\n\t\"1.3.14\": \"52.0.2743.82\",\n\t\"1.3.15\": \"52.0.2743.82\",\n\t\"1.4.0\": \"53.0.2785.113\",\n\t\"1.4.1\": \"53.0.2785.113\",\n\t\"1.4.2\": \"53.0.2785.113\",\n\t\"1.4.3\": \"53.0.2785.113\",\n\t\"1.4.4\": \"53.0.2785.113\",\n\t\"1.4.5\": \"53.0.2785.113\",\n\t\"1.4.6\": \"53.0.2785.143\",\n\t\"1.4.7\": \"53.0.2785.143\",\n\t\"1.4.8\": \"53.0.2785.143\",\n\t\"1.4.10\": \"53.0.2785.143\",\n\t\"1.4.11\": \"53.0.2785.143\",\n\t\"1.4.12\": \"54.0.2840.51\",\n\t\"1.4.13\": \"53.0.2785.143\",\n\t\"1.4.14\": \"53.0.2785.143\",\n\t\"1.4.15\": \"53.0.2785.143\",\n\t\"1.4.16\": \"53.0.2785.143\",\n\t\"1.5.0\": \"54.0.2840.101\",\n\t\"1.5.1\": \"54.0.2840.101\",\n\t\"1.6.0\": \"56.0.2924.87\",\n\t\"1.6.1\": \"56.0.2924.87\",\n\t\"1.6.2\": \"56.0.2924.87\",\n\t\"1.6.3\": \"56.0.2924.87\",\n\t\"1.6.4\": \"56.0.2924.87\",\n\t\"1.6.5\": \"56.0.2924.87\",\n\t\"1.6.6\": \"56.0.2924.87\",\n\t\"1.6.7\": \"56.0.2924.87\",\n\t\"1.6.8\": \"56.0.2924.87\",\n\t\"1.6.9\": \"56.0.2924.87\",\n\t\"1.6.10\": \"56.0.2924.87\",\n\t\"1.6.11\": \"56.0.2924.87\",\n\t\"1.6.12\": \"56.0.2924.87\",\n\t\"1.6.13\": \"56.0.2924.87\",\n\t\"1.6.14\": \"56.0.2924.87\",\n\t\"1.6.15\": \"56.0.2924.87\",\n\t\"1.6.16\": \"56.0.2924.87\",\n\t\"1.6.17\": \"56.0.2924.87\",\n\t\"1.6.18\": \"56.0.2924.87\",\n\t\"1.7.0\": \"58.0.3029.110\",\n\t\"1.7.1\": \"58.0.3029.110\",\n\t\"1.7.2\": \"58.0.3029.110\",\n\t\"1.7.3\": \"58.0.3029.110\",\n\t\"1.7.4\": \"58.0.3029.110\",\n\t\"1.7.5\": \"58.0.3029.110\",\n\t\"1.7.6\": \"58.0.3029.110\",\n\t\"1.7.7\": \"58.0.3029.110\",\n\t\"1.7.8\": \"58.0.3029.110\",\n\t\"1.7.9\": \"58.0.3029.110\",\n\t\"1.7.10\": \"58.0.3029.110\",\n\t\"1.7.11\": \"58.0.3029.110\",\n\t\"1.7.12\": \"58.0.3029.110\",\n\t\"1.7.13\": \"58.0.3029.110\",\n\t\"1.7.14\": \"58.0.3029.110\",\n\t\"1.7.15\": \"58.0.3029.110\",\n\t\"1.7.16\": \"58.0.3029.110\",\n\t\"1.8.0\": \"59.0.3071.115\",\n\t\"1.8.1\": \"59.0.3071.115\",\n\t\"1.8.2-beta.1\": \"59.0.3071.115\",\n\t\"1.8.2-beta.2\": \"59.0.3071.115\",\n\t\"1.8.2-beta.3\": \"59.0.3071.115\",\n\t\"1.8.2-beta.4\": \"59.0.3071.115\",\n\t\"1.8.2-beta.5\": \"59.0.3071.115\",\n\t\"1.8.2\": \"59.0.3071.115\",\n\t\"1.8.3\": \"59.0.3071.115\",\n\t\"1.8.4\": \"59.0.3071.115\",\n\t\"1.8.5\": \"59.0.3071.115\",\n\t\"1.8.6\": \"59.0.3071.115\",\n\t\"1.8.7\": \"59.0.3071.115\",\n\t\"1.8.8\": \"59.0.3071.115\",\n\t\"2.0.0-beta.1\": \"61.0.3163.100\",\n\t\"2.0.0-beta.2\": \"61.0.3163.100\",\n\t\"2.0.0-beta.3\": \"61.0.3163.100\",\n\t\"2.0.0-beta.4\": \"61.0.3163.100\",\n\t\"2.0.0-beta.5\": \"61.0.3163.100\",\n\t\"2.0.0-beta.6\": \"61.0.3163.100\",\n\t\"2.0.0-beta.7\": \"61.0.3163.100\",\n\t\"2.0.0-beta.8\": \"61.0.3163.100\",\n\t\"2.0.0\": \"61.0.3163.100\",\n\t\"2.0.1\": \"61.0.3163.100\",\n\t\"2.0.2\": \"61.0.3163.100\",\n\t\"2.0.3\": \"61.0.3163.100\",\n\t\"2.0.4\": \"61.0.3163.100\",\n\t\"2.0.5\": \"61.0.3163.100\",\n\t\"2.0.6\": \"61.0.3163.100\",\n\t\"2.0.7\": \"61.0.3163.100\",\n\t\"2.0.8-nightly.20180819\": \"61.0.3163.100\",\n\t\"2.0.8-nightly.20180820\": \"61.0.3163.100\",\n\t\"2.0.8\": \"61.0.3163.100\",\n\t\"2.0.9\": \"61.0.3163.100\",\n\t\"2.0.10\": \"61.0.3163.100\",\n\t\"2.0.11\": \"61.0.3163.100\",\n\t\"2.0.12\": \"61.0.3163.100\",\n\t\"2.0.13\": \"61.0.3163.100\",\n\t\"2.0.14\": \"61.0.3163.100\",\n\t\"2.0.15\": \"61.0.3163.100\",\n\t\"2.0.16\": \"61.0.3163.100\",\n\t\"2.0.17\": \"61.0.3163.100\",\n\t\"2.0.18\": \"61.0.3163.100\",\n\t\"2.1.0-unsupported.20180809\": \"61.0.3163.100\",\n\t\"3.0.0-beta.1\": \"66.0.3359.181\",\n\t\"3.0.0-beta.2\": \"66.0.3359.181\",\n\t\"3.0.0-beta.3\": \"66.0.3359.181\",\n\t\"3.0.0-beta.4\": \"66.0.3359.181\",\n\t\"3.0.0-beta.5\": \"66.0.3359.181\",\n\t\"3.0.0-beta.6\": \"66.0.3359.181\",\n\t\"3.0.0-beta.7\": \"66.0.3359.181\",\n\t\"3.0.0-beta.8\": \"66.0.3359.181\",\n\t\"3.0.0-beta.9\": \"66.0.3359.181\",\n\t\"3.0.0-beta.10\": \"66.0.3359.181\",\n\t\"3.0.0-beta.11\": \"66.0.3359.181\",\n\t\"3.0.0-beta.12\": \"66.0.3359.181\",\n\t\"3.0.0-beta.13\": \"66.0.3359.181\",\n\t\"3.0.0-nightly.20180818\": \"66.0.3359.181\",\n\t\"3.0.0-nightly.20180821\": \"66.0.3359.181\",\n\t\"3.0.0-nightly.20180823\": \"66.0.3359.181\",\n\t\"3.0.0-nightly.20180904\": \"66.0.3359.181\",\n\t\"3.0.0\": \"66.0.3359.181\",\n\t\"3.0.1\": \"66.0.3359.181\",\n\t\"3.0.2\": \"66.0.3359.181\",\n\t\"3.0.3\": \"66.0.3359.181\",\n\t\"3.0.4\": \"66.0.3359.181\",\n\t\"3.0.5\": \"66.0.3359.181\",\n\t\"3.0.6\": \"66.0.3359.181\",\n\t\"3.0.7\": \"66.0.3359.181\",\n\t\"3.0.8\": \"66.0.3359.181\",\n\t\"3.0.9\": \"66.0.3359.181\",\n\t\"3.0.10\": \"66.0.3359.181\",\n\t\"3.0.11\": \"66.0.3359.181\",\n\t\"3.0.12\": \"66.0.3359.181\",\n\t\"3.0.13\": \"66.0.3359.181\",\n\t\"3.0.14\": \"66.0.3359.181\",\n\t\"3.0.15\": \"66.0.3359.181\",\n\t\"3.0.16\": \"66.0.3359.181\",\n\t\"3.1.0-beta.1\": \"66.0.3359.181\",\n\t\"3.1.0-beta.2\": \"66.0.3359.181\",\n\t\"3.1.0-beta.3\": \"66.0.3359.181\",\n\t\"3.1.0-beta.4\": \"66.0.3359.181\",\n\t\"3.1.0-beta.5\": \"66.0.3359.181\",\n\t\"3.1.0\": \"66.0.3359.181\",\n\t\"3.1.1\": \"66.0.3359.181\",\n\t\"3.1.2\": \"66.0.3359.181\",\n\t\"3.1.3\": \"66.0.3359.181\",\n\t\"3.1.4\": \"66.0.3359.181\",\n\t\"3.1.5\": \"66.0.3359.181\",\n\t\"3.1.6\": \"66.0.3359.181\",\n\t\"3.1.7\": \"66.0.3359.181\",\n\t\"3.1.8\": \"66.0.3359.181\",\n\t\"3.1.9\": \"66.0.3359.181\",\n\t\"3.1.10\": \"66.0.3359.181\",\n\t\"3.1.11\": \"66.0.3359.181\",\n\t\"3.1.12\": \"66.0.3359.181\",\n\t\"3.1.13\": \"66.0.3359.181\",\n\t\"4.0.0-beta.1\": \"69.0.3497.106\",\n\t\"4.0.0-beta.2\": \"69.0.3497.106\",\n\t\"4.0.0-beta.3\": \"69.0.3497.106\",\n\t\"4.0.0-beta.4\": \"69.0.3497.106\",\n\t\"4.0.0-beta.5\": \"69.0.3497.106\",\n\t\"4.0.0-beta.6\": \"69.0.3497.106\",\n\t\"4.0.0-beta.7\": \"69.0.3497.106\",\n\t\"4.0.0-beta.8\": \"69.0.3497.106\",\n\t\"4.0.0-beta.9\": \"69.0.3497.106\",\n\t\"4.0.0-beta.10\": \"69.0.3497.106\",\n\t\"4.0.0-beta.11\": \"69.0.3497.106\",\n\t\"4.0.0-nightly.20180817\": \"66.0.3359.181\",\n\t\"4.0.0-nightly.20180819\": \"66.0.3359.181\",\n\t\"4.0.0-nightly.20180821\": \"66.0.3359.181\",\n\t\"4.0.0-nightly.20180929\": \"67.0.3396.99\",\n\t\"4.0.0-nightly.20181006\": \"68.0.3440.128\",\n\t\"4.0.0-nightly.20181010\": \"69.0.3497.106\",\n\t\"4.0.0\": \"69.0.3497.106\",\n\t\"4.0.1\": \"69.0.3497.106\",\n\t\"4.0.2\": \"69.0.3497.106\",\n\t\"4.0.3\": \"69.0.3497.106\",\n\t\"4.0.4\": \"69.0.3497.106\",\n\t\"4.0.5\": \"69.0.3497.106\",\n\t\"4.0.6\": \"69.0.3497.106\",\n\t\"4.0.7\": \"69.0.3497.128\",\n\t\"4.0.8\": \"69.0.3497.128\",\n\t\"4.1.0\": \"69.0.3497.128\",\n\t\"4.1.1\": \"69.0.3497.128\",\n\t\"4.1.2\": \"69.0.3497.128\",\n\t\"4.1.3\": \"69.0.3497.128\",\n\t\"4.1.4\": \"69.0.3497.128\",\n\t\"4.1.5\": \"69.0.3497.128\",\n\t\"4.2.0\": \"69.0.3497.128\",\n\t\"4.2.1\": \"69.0.3497.128\",\n\t\"4.2.2\": \"69.0.3497.128\",\n\t\"4.2.3\": \"69.0.3497.128\",\n\t\"4.2.4\": \"69.0.3497.128\",\n\t\"4.2.5\": \"69.0.3497.128\",\n\t\"4.2.6\": \"69.0.3497.128\",\n\t\"4.2.7\": \"69.0.3497.128\",\n\t\"4.2.8\": \"69.0.3497.128\",\n\t\"4.2.9\": \"69.0.3497.128\",\n\t\"4.2.10\": \"69.0.3497.128\",\n\t\"4.2.11\": \"69.0.3497.128\",\n\t\"4.2.12\": \"69.0.3497.128\",\n\t\"5.0.0-beta.1\": \"72.0.3626.52\",\n\t\"5.0.0-beta.2\": \"72.0.3626.52\",\n\t\"5.0.0-beta.3\": \"73.0.3683.27\",\n\t\"5.0.0-beta.4\": \"73.0.3683.54\",\n\t\"5.0.0-beta.5\": \"73.0.3683.61\",\n\t\"5.0.0-beta.6\": \"73.0.3683.84\",\n\t\"5.0.0-beta.7\": \"73.0.3683.94\",\n\t\"5.0.0-beta.8\": \"73.0.3683.104\",\n\t\"5.0.0-beta.9\": \"73.0.3683.117\",\n\t\"5.0.0-nightly.20190107\": \"70.0.3538.110\",\n\t\"5.0.0-nightly.20190121\": \"71.0.3578.98\",\n\t\"5.0.0-nightly.20190122\": \"71.0.3578.98\",\n\t\"5.0.0\": \"73.0.3683.119\",\n\t\"5.0.1\": \"73.0.3683.121\",\n\t\"5.0.2\": \"73.0.3683.121\",\n\t\"5.0.3\": \"73.0.3683.121\",\n\t\"5.0.4\": \"73.0.3683.121\",\n\t\"5.0.5\": \"73.0.3683.121\",\n\t\"5.0.6\": \"73.0.3683.121\",\n\t\"5.0.7\": \"73.0.3683.121\",\n\t\"5.0.8\": \"73.0.3683.121\",\n\t\"5.0.9\": \"73.0.3683.121\",\n\t\"5.0.10\": \"73.0.3683.121\",\n\t\"5.0.11\": \"73.0.3683.121\",\n\t\"5.0.12\": \"73.0.3683.121\",\n\t\"5.0.13\": \"73.0.3683.121\",\n\t\"6.0.0-beta.1\": \"76.0.3774.1\",\n\t\"6.0.0-beta.2\": \"76.0.3783.1\",\n\t\"6.0.0-beta.3\": \"76.0.3783.1\",\n\t\"6.0.0-beta.4\": \"76.0.3783.1\",\n\t\"6.0.0-beta.5\": \"76.0.3805.4\",\n\t\"6.0.0-beta.6\": \"76.0.3809.3\",\n\t\"6.0.0-beta.7\": \"76.0.3809.22\",\n\t\"6.0.0-beta.8\": \"76.0.3809.26\",\n\t\"6.0.0-beta.9\": \"76.0.3809.26\",\n\t\"6.0.0-beta.10\": \"76.0.3809.37\",\n\t\"6.0.0-beta.11\": \"76.0.3809.42\",\n\t\"6.0.0-beta.12\": \"76.0.3809.54\",\n\t\"6.0.0-beta.13\": \"76.0.3809.60\",\n\t\"6.0.0-beta.14\": \"76.0.3809.68\",\n\t\"6.0.0-beta.15\": \"76.0.3809.74\",\n\t\"6.0.0-nightly.20190123\": \"72.0.3626.52\",\n\t\"6.0.0-nightly.20190212\": \"72.0.3626.107\",\n\t\"6.0.0-nightly.20190213\": \"72.0.3626.110\",\n\t\"6.0.0-nightly.20190311\": \"74.0.3724.8\",\n\t\"6.0.0\": \"76.0.3809.88\",\n\t\"6.0.1\": \"76.0.3809.102\",\n\t\"6.0.2\": \"76.0.3809.110\",\n\t\"6.0.3\": \"76.0.3809.126\",\n\t\"6.0.4\": \"76.0.3809.131\",\n\t\"6.0.5\": \"76.0.3809.136\",\n\t\"6.0.6\": \"76.0.3809.138\",\n\t\"6.0.7\": \"76.0.3809.139\",\n\t\"6.0.8\": \"76.0.3809.146\",\n\t\"6.0.9\": \"76.0.3809.146\",\n\t\"6.0.10\": \"76.0.3809.146\",\n\t\"6.0.11\": \"76.0.3809.146\",\n\t\"6.0.12\": \"76.0.3809.146\",\n\t\"6.1.0\": \"76.0.3809.146\",\n\t\"6.1.1\": \"76.0.3809.146\",\n\t\"6.1.2\": \"76.0.3809.146\",\n\t\"6.1.3\": \"76.0.3809.146\",\n\t\"6.1.4\": \"76.0.3809.146\",\n\t\"6.1.5\": \"76.0.3809.146\",\n\t\"6.1.6\": \"76.0.3809.146\",\n\t\"6.1.7\": \"76.0.3809.146\",\n\t\"6.1.8\": \"76.0.3809.146\",\n\t\"6.1.9\": \"76.0.3809.146\",\n\t\"6.1.10\": \"76.0.3809.146\",\n\t\"6.1.11\": \"76.0.3809.146\",\n\t\"6.1.12\": \"76.0.3809.146\",\n\t\"7.0.0-beta.1\": \"78.0.3866.0\",\n\t\"7.0.0-beta.2\": \"78.0.3866.0\",\n\t\"7.0.0-beta.3\": \"78.0.3866.0\",\n\t\"7.0.0-beta.4\": \"78.0.3896.6\",\n\t\"7.0.0-beta.5\": \"78.0.3905.1\",\n\t\"7.0.0-beta.6\": \"78.0.3905.1\",\n\t\"7.0.0-beta.7\": \"78.0.3905.1\",\n\t\"7.0.0-nightly.20190521\": \"76.0.3784.0\",\n\t\"7.0.0-nightly.20190529\": \"76.0.3806.0\",\n\t\"7.0.0-nightly.20190530\": \"76.0.3806.0\",\n\t\"7.0.0-nightly.20190531\": \"76.0.3806.0\",\n\t\"7.0.0-nightly.20190602\": \"76.0.3806.0\",\n\t\"7.0.0-nightly.20190603\": \"76.0.3806.0\",\n\t\"7.0.0-nightly.20190604\": \"77.0.3814.0\",\n\t\"7.0.0-nightly.20190605\": \"77.0.3815.0\",\n\t\"7.0.0-nightly.20190606\": \"77.0.3815.0\",\n\t\"7.0.0-nightly.20190607\": \"77.0.3815.0\",\n\t\"7.0.0-nightly.20190608\": \"77.0.3815.0\",\n\t\"7.0.0-nightly.20190609\": \"77.0.3815.0\",\n\t\"7.0.0-nightly.20190611\": \"77.0.3815.0\",\n\t\"7.0.0-nightly.20190612\": \"77.0.3815.0\",\n\t\"7.0.0-nightly.20190613\": \"77.0.3815.0\",\n\t\"7.0.0-nightly.20190615\": \"77.0.3815.0\",\n\t\"7.0.0-nightly.20190616\": \"77.0.3815.0\",\n\t\"7.0.0-nightly.20190618\": \"77.0.3815.0\",\n\t\"7.0.0-nightly.20190619\": \"77.0.3815.0\",\n\t\"7.0.0-nightly.20190622\": \"77.0.3815.0\",\n\t\"7.0.0-nightly.20190623\": \"77.0.3815.0\",\n\t\"7.0.0-nightly.20190624\": \"77.0.3815.0\",\n\t\"7.0.0-nightly.20190627\": \"77.0.3815.0\",\n\t\"7.0.0-nightly.20190629\": \"77.0.3815.0\",\n\t\"7.0.0-nightly.20190630\": \"77.0.3815.0\",\n\t\"7.0.0-nightly.20190701\": \"77.0.3815.0\",\n\t\"7.0.0-nightly.20190702\": \"77.0.3815.0\",\n\t\"7.0.0-nightly.20190704\": \"77.0.3843.0\",\n\t\"7.0.0-nightly.20190705\": \"77.0.3843.0\",\n\t\"7.0.0-nightly.20190719\": \"77.0.3848.0\",\n\t\"7.0.0-nightly.20190720\": \"77.0.3848.0\",\n\t\"7.0.0-nightly.20190721\": \"77.0.3848.0\",\n\t\"7.0.0-nightly.20190726\": \"77.0.3864.0\",\n\t\"7.0.0-nightly.20190727\": \"78.0.3866.0\",\n\t\"7.0.0-nightly.20190728\": \"78.0.3866.0\",\n\t\"7.0.0-nightly.20190729\": \"78.0.3866.0\",\n\t\"7.0.0-nightly.20190730\": \"78.0.3866.0\",\n\t\"7.0.0-nightly.20190731\": \"78.0.3866.0\",\n\t\"7.0.0\": \"78.0.3905.1\",\n\t\"7.0.1\": \"78.0.3904.92\",\n\t\"7.1.0\": \"78.0.3904.94\",\n\t\"7.1.1\": \"78.0.3904.99\",\n\t\"7.1.2\": \"78.0.3904.113\",\n\t\"7.1.3\": \"78.0.3904.126\",\n\t\"7.1.4\": \"78.0.3904.130\",\n\t\"7.1.5\": \"78.0.3904.130\",\n\t\"7.1.6\": \"78.0.3904.130\",\n\t\"7.1.7\": \"78.0.3904.130\",\n\t\"7.1.8\": \"78.0.3904.130\",\n\t\"7.1.9\": \"78.0.3904.130\",\n\t\"7.1.10\": \"78.0.3904.130\",\n\t\"7.1.11\": \"78.0.3904.130\",\n\t\"7.1.12\": \"78.0.3904.130\",\n\t\"7.1.13\": \"78.0.3904.130\",\n\t\"7.1.14\": \"78.0.3904.130\",\n\t\"7.2.0\": \"78.0.3904.130\",\n\t\"7.2.1\": \"78.0.3904.130\",\n\t\"7.2.2\": \"78.0.3904.130\",\n\t\"7.2.3\": \"78.0.3904.130\",\n\t\"7.2.4\": \"78.0.3904.130\",\n\t\"7.3.0\": \"78.0.3904.130\",\n\t\"7.3.1\": \"78.0.3904.130\",\n\t\"7.3.2\": \"78.0.3904.130\",\n\t\"7.3.3\": \"78.0.3904.130\",\n\t\"8.0.0-beta.1\": \"79.0.3931.0\",\n\t\"8.0.0-beta.2\": \"79.0.3931.0\",\n\t\"8.0.0-beta.3\": \"80.0.3955.0\",\n\t\"8.0.0-beta.4\": \"80.0.3955.0\",\n\t\"8.0.0-beta.5\": \"80.0.3987.14\",\n\t\"8.0.0-beta.6\": \"80.0.3987.51\",\n\t\"8.0.0-beta.7\": \"80.0.3987.59\",\n\t\"8.0.0-beta.8\": \"80.0.3987.75\",\n\t\"8.0.0-beta.9\": \"80.0.3987.75\",\n\t\"8.0.0-nightly.20190801\": \"78.0.3866.0\",\n\t\"8.0.0-nightly.20190802\": \"78.0.3866.0\",\n\t\"8.0.0-nightly.20190803\": \"78.0.3871.0\",\n\t\"8.0.0-nightly.20190806\": \"78.0.3871.0\",\n\t\"8.0.0-nightly.20190807\": \"78.0.3871.0\",\n\t\"8.0.0-nightly.20190808\": \"78.0.3871.0\",\n\t\"8.0.0-nightly.20190809\": \"78.0.3871.0\",\n\t\"8.0.0-nightly.20190810\": \"78.0.3871.0\",\n\t\"8.0.0-nightly.20190811\": \"78.0.3871.0\",\n\t\"8.0.0-nightly.20190812\": \"78.0.3871.0\",\n\t\"8.0.0-nightly.20190813\": \"78.0.3871.0\",\n\t\"8.0.0-nightly.20190814\": \"78.0.3871.0\",\n\t\"8.0.0-nightly.20190815\": \"78.0.3871.0\",\n\t\"8.0.0-nightly.20190816\": \"78.0.3881.0\",\n\t\"8.0.0-nightly.20190817\": \"78.0.3881.0\",\n\t\"8.0.0-nightly.20190818\": \"78.0.3881.0\",\n\t\"8.0.0-nightly.20190819\": \"78.0.3881.0\",\n\t\"8.0.0-nightly.20190820\": \"78.0.3881.0\",\n\t\"8.0.0-nightly.20190824\": \"78.0.3892.0\",\n\t\"8.0.0-nightly.20190825\": \"78.0.3892.0\",\n\t\"8.0.0-nightly.20190827\": \"78.0.3892.0\",\n\t\"8.0.0-nightly.20190828\": \"78.0.3892.0\",\n\t\"8.0.0-nightly.20190830\": \"78.0.3892.0\",\n\t\"8.0.0-nightly.20190901\": \"78.0.3892.0\",\n\t\"8.0.0-nightly.20190902\": \"78.0.3892.0\",\n\t\"8.0.0-nightly.20190907\": \"78.0.3892.0\",\n\t\"8.0.0-nightly.20190909\": \"78.0.3892.0\",\n\t\"8.0.0-nightly.20190910\": \"78.0.3892.0\",\n\t\"8.0.0-nightly.20190911\": \"78.0.3892.0\",\n\t\"8.0.0-nightly.20190912\": \"78.0.3892.0\",\n\t\"8.0.0-nightly.20190913\": \"78.0.3892.0\",\n\t\"8.0.0-nightly.20190914\": \"78.0.3892.0\",\n\t\"8.0.0-nightly.20190915\": \"78.0.3892.0\",\n\t\"8.0.0-nightly.20190917\": \"78.0.3892.0\",\n\t\"8.0.0-nightly.20190919\": \"79.0.3915.0\",\n\t\"8.0.0-nightly.20190920\": \"79.0.3915.0\",\n\t\"8.0.0-nightly.20190922\": \"79.0.3919.0\",\n\t\"8.0.0-nightly.20190923\": \"79.0.3919.0\",\n\t\"8.0.0-nightly.20190924\": \"79.0.3919.0\",\n\t\"8.0.0-nightly.20190926\": \"79.0.3919.0\",\n\t\"8.0.0-nightly.20190928\": \"79.0.3919.0\",\n\t\"8.0.0-nightly.20190929\": \"79.0.3919.0\",\n\t\"8.0.0-nightly.20190930\": \"79.0.3919.0\",\n\t\"8.0.0-nightly.20191001\": \"79.0.3919.0\",\n\t\"8.0.0-nightly.20191004\": \"79.0.3919.0\",\n\t\"8.0.0-nightly.20191005\": \"79.0.3919.0\",\n\t\"8.0.0-nightly.20191006\": \"79.0.3919.0\",\n\t\"8.0.0-nightly.20191009\": \"79.0.3919.0\",\n\t\"8.0.0-nightly.20191011\": \"79.0.3919.0\",\n\t\"8.0.0-nightly.20191012\": \"79.0.3919.0\",\n\t\"8.0.0-nightly.20191017\": \"79.0.3919.0\",\n\t\"8.0.0-nightly.20191019\": \"79.0.3931.0\",\n\t\"8.0.0-nightly.20191020\": \"79.0.3931.0\",\n\t\"8.0.0-nightly.20191021\": \"79.0.3931.0\",\n\t\"8.0.0-nightly.20191023\": \"79.0.3931.0\",\n\t\"8.0.0-nightly.20191101\": \"80.0.3952.0\",\n\t\"8.0.0-nightly.20191103\": \"80.0.3952.0\",\n\t\"8.0.0-nightly.20191105\": \"80.0.3952.0\",\n\t\"8.0.0\": \"80.0.3987.86\",\n\t\"8.0.1\": \"80.0.3987.86\",\n\t\"8.0.2\": \"80.0.3987.86\",\n\t\"8.0.3\": \"80.0.3987.134\",\n\t\"8.1.0\": \"80.0.3987.137\",\n\t\"8.1.1\": \"80.0.3987.141\",\n\t\"8.2.0\": \"80.0.3987.158\",\n\t\"8.2.1\": \"80.0.3987.163\",\n\t\"8.2.2\": \"80.0.3987.163\",\n\t\"8.2.3\": \"80.0.3987.163\",\n\t\"8.2.4\": \"80.0.3987.165\",\n\t\"8.2.5\": \"80.0.3987.165\",\n\t\"8.3.0\": \"80.0.3987.165\",\n\t\"8.3.1\": \"80.0.3987.165\",\n\t\"8.3.2\": \"80.0.3987.165\",\n\t\"8.3.3\": \"80.0.3987.165\",\n\t\"8.3.4\": \"80.0.3987.165\",\n\t\"8.4.0\": \"80.0.3987.165\",\n\t\"8.4.1\": \"80.0.3987.165\",\n\t\"8.5.0\": \"80.0.3987.165\",\n\t\"8.5.1\": \"80.0.3987.165\",\n\t\"8.5.2\": \"80.0.3987.165\",\n\t\"8.5.3\": \"80.0.3987.163\",\n\t\"8.5.4\": \"80.0.3987.163\",\n\t\"8.5.5\": \"80.0.3987.163\",\n\t\"9.0.0-beta.1\": \"82.0.4048.0\",\n\t\"9.0.0-beta.2\": \"82.0.4048.0\",\n\t\"9.0.0-beta.3\": \"82.0.4048.0\",\n\t\"9.0.0-beta.4\": \"82.0.4048.0\",\n\t\"9.0.0-beta.5\": \"82.0.4048.0\",\n\t\"9.0.0-beta.6\": \"82.0.4058.2\",\n\t\"9.0.0-beta.7\": \"82.0.4058.2\",\n\t\"9.0.0-beta.9\": \"82.0.4058.2\",\n\t\"9.0.0-beta.10\": \"82.0.4085.10\",\n\t\"9.0.0-beta.11\": \"82.0.4085.14\",\n\t\"9.0.0-beta.12\": \"82.0.4085.14\",\n\t\"9.0.0-beta.13\": \"82.0.4085.14\",\n\t\"9.0.0-beta.14\": \"82.0.4085.27\",\n\t\"9.0.0-beta.15\": \"83.0.4102.3\",\n\t\"9.0.0-beta.16\": \"83.0.4102.3\",\n\t\"9.0.0-beta.17\": \"83.0.4103.14\",\n\t\"9.0.0-beta.18\": \"83.0.4103.16\",\n\t\"9.0.0-beta.19\": \"83.0.4103.24\",\n\t\"9.0.0-beta.20\": \"83.0.4103.26\",\n\t\"9.0.0-beta.21\": \"83.0.4103.26\",\n\t\"9.0.0-beta.22\": \"83.0.4103.34\",\n\t\"9.0.0-beta.23\": \"83.0.4103.44\",\n\t\"9.0.0-beta.24\": \"83.0.4103.45\",\n\t\"9.0.0-nightly.20191121\": \"80.0.3954.0\",\n\t\"9.0.0-nightly.20191122\": \"80.0.3954.0\",\n\t\"9.0.0-nightly.20191123\": \"80.0.3954.0\",\n\t\"9.0.0-nightly.20191124\": \"80.0.3954.0\",\n\t\"9.0.0-nightly.20191126\": \"80.0.3954.0\",\n\t\"9.0.0-nightly.20191128\": \"80.0.3954.0\",\n\t\"9.0.0-nightly.20191129\": \"80.0.3954.0\",\n\t\"9.0.0-nightly.20191130\": \"80.0.3954.0\",\n\t\"9.0.0-nightly.20191201\": \"80.0.3954.0\",\n\t\"9.0.0-nightly.20191202\": \"80.0.3954.0\",\n\t\"9.0.0-nightly.20191203\": \"80.0.3954.0\",\n\t\"9.0.0-nightly.20191204\": \"80.0.3954.0\",\n\t\"9.0.0-nightly.20191205\": \"80.0.3954.0\",\n\t\"9.0.0-nightly.20191210\": \"80.0.3954.0\",\n\t\"9.0.0-nightly.20191220\": \"81.0.3994.0\",\n\t\"9.0.0-nightly.20191221\": \"81.0.3994.0\",\n\t\"9.0.0-nightly.20191222\": \"81.0.3994.0\",\n\t\"9.0.0-nightly.20191223\": \"81.0.3994.0\",\n\t\"9.0.0-nightly.20191224\": \"81.0.3994.0\",\n\t\"9.0.0-nightly.20191225\": \"81.0.3994.0\",\n\t\"9.0.0-nightly.20191226\": \"81.0.3994.0\",\n\t\"9.0.0-nightly.20191228\": \"81.0.3994.0\",\n\t\"9.0.0-nightly.20191229\": \"81.0.3994.0\",\n\t\"9.0.0-nightly.20191230\": \"81.0.3994.0\",\n\t\"9.0.0-nightly.20191231\": \"81.0.3994.0\",\n\t\"9.0.0-nightly.20200101\": \"81.0.3994.0\",\n\t\"9.0.0-nightly.20200103\": \"81.0.3994.0\",\n\t\"9.0.0-nightly.20200104\": \"81.0.3994.0\",\n\t\"9.0.0-nightly.20200105\": \"81.0.3994.0\",\n\t\"9.0.0-nightly.20200106\": \"81.0.3994.0\",\n\t\"9.0.0-nightly.20200108\": \"81.0.3994.0\",\n\t\"9.0.0-nightly.20200109\": \"81.0.3994.0\",\n\t\"9.0.0-nightly.20200110\": \"81.0.3994.0\",\n\t\"9.0.0-nightly.20200111\": \"81.0.3994.0\",\n\t\"9.0.0-nightly.20200113\": \"81.0.3994.0\",\n\t\"9.0.0-nightly.20200115\": \"81.0.3994.0\",\n\t\"9.0.0-nightly.20200116\": \"81.0.3994.0\",\n\t\"9.0.0-nightly.20200117\": \"81.0.3994.0\",\n\t\"9.0.0-nightly.20200119\": \"81.0.4030.0\",\n\t\"9.0.0-nightly.20200121\": \"81.0.4030.0\",\n\t\"9.0.0\": \"83.0.4103.64\",\n\t\"9.0.1\": \"83.0.4103.94\",\n\t\"9.0.2\": \"83.0.4103.94\",\n\t\"9.0.3\": \"83.0.4103.100\",\n\t\"9.0.4\": \"83.0.4103.104\",\n\t\"9.0.5\": \"83.0.4103.119\",\n\t\"9.1.0\": \"83.0.4103.122\",\n\t\"9.1.1\": \"83.0.4103.122\",\n\t\"9.1.2\": \"83.0.4103.122\",\n\t\"9.2.0\": \"83.0.4103.122\",\n\t\"9.2.1\": \"83.0.4103.122\",\n\t\"9.3.0\": \"83.0.4103.122\",\n\t\"9.3.1\": \"83.0.4103.122\",\n\t\"9.3.2\": \"83.0.4103.122\",\n\t\"9.3.3\": \"83.0.4103.122\",\n\t\"9.3.4\": \"83.0.4103.122\",\n\t\"9.3.5\": \"83.0.4103.122\",\n\t\"9.4.0\": \"83.0.4103.122\",\n\t\"9.4.1\": \"83.0.4103.122\",\n\t\"9.4.2\": \"83.0.4103.122\",\n\t\"9.4.3\": \"83.0.4103.122\",\n\t\"9.4.4\": \"83.0.4103.122\",\n\t\"10.0.0-beta.1\": \"84.0.4129.0\",\n\t\"10.0.0-beta.2\": \"84.0.4129.0\",\n\t\"10.0.0-beta.3\": \"85.0.4161.2\",\n\t\"10.0.0-beta.4\": \"85.0.4161.2\",\n\t\"10.0.0-beta.8\": \"85.0.4181.1\",\n\t\"10.0.0-beta.9\": \"85.0.4181.1\",\n\t\"10.0.0-beta.10\": \"85.0.4183.19\",\n\t\"10.0.0-beta.11\": \"85.0.4183.20\",\n\t\"10.0.0-beta.12\": \"85.0.4183.26\",\n\t\"10.0.0-beta.13\": \"85.0.4183.39\",\n\t\"10.0.0-beta.14\": \"85.0.4183.39\",\n\t\"10.0.0-beta.15\": \"85.0.4183.39\",\n\t\"10.0.0-beta.17\": \"85.0.4183.39\",\n\t\"10.0.0-beta.19\": \"85.0.4183.39\",\n\t\"10.0.0-beta.20\": \"85.0.4183.39\",\n\t\"10.0.0-beta.21\": \"85.0.4183.39\",\n\t\"10.0.0-beta.23\": \"85.0.4183.70\",\n\t\"10.0.0-beta.24\": \"85.0.4183.78\",\n\t\"10.0.0-beta.25\": \"85.0.4183.80\",\n\t\"10.0.0-nightly.20200209\": \"82.0.4050.0\",\n\t\"10.0.0-nightly.20200210\": \"82.0.4050.0\",\n\t\"10.0.0-nightly.20200211\": \"82.0.4050.0\",\n\t\"10.0.0-nightly.20200216\": \"82.0.4050.0\",\n\t\"10.0.0-nightly.20200217\": \"82.0.4050.0\",\n\t\"10.0.0-nightly.20200218\": \"82.0.4050.0\",\n\t\"10.0.0-nightly.20200221\": \"82.0.4050.0\",\n\t\"10.0.0-nightly.20200222\": \"82.0.4050.0\",\n\t\"10.0.0-nightly.20200223\": \"82.0.4050.0\",\n\t\"10.0.0-nightly.20200226\": \"82.0.4050.0\",\n\t\"10.0.0-nightly.20200303\": \"82.0.4050.0\",\n\t\"10.0.0-nightly.20200304\": \"82.0.4076.0\",\n\t\"10.0.0-nightly.20200305\": \"82.0.4076.0\",\n\t\"10.0.0-nightly.20200306\": \"82.0.4076.0\",\n\t\"10.0.0-nightly.20200309\": \"82.0.4076.0\",\n\t\"10.0.0-nightly.20200310\": \"82.0.4076.0\",\n\t\"10.0.0-nightly.20200311\": \"82.0.4083.0\",\n\t\"10.0.0-nightly.20200316\": \"83.0.4086.0\",\n\t\"10.0.0-nightly.20200317\": \"83.0.4087.0\",\n\t\"10.0.0-nightly.20200318\": \"83.0.4087.0\",\n\t\"10.0.0-nightly.20200320\": \"83.0.4087.0\",\n\t\"10.0.0-nightly.20200323\": \"83.0.4087.0\",\n\t\"10.0.0-nightly.20200324\": \"83.0.4087.0\",\n\t\"10.0.0-nightly.20200325\": \"83.0.4087.0\",\n\t\"10.0.0-nightly.20200326\": \"83.0.4087.0\",\n\t\"10.0.0-nightly.20200327\": \"83.0.4087.0\",\n\t\"10.0.0-nightly.20200330\": \"83.0.4087.0\",\n\t\"10.0.0-nightly.20200331\": \"83.0.4087.0\",\n\t\"10.0.0-nightly.20200401\": \"83.0.4087.0\",\n\t\"10.0.0-nightly.20200402\": \"83.0.4087.0\",\n\t\"10.0.0-nightly.20200403\": \"83.0.4087.0\",\n\t\"10.0.0-nightly.20200406\": \"83.0.4087.0\",\n\t\"10.0.0-nightly.20200408\": \"83.0.4095.0\",\n\t\"10.0.0-nightly.20200410\": \"83.0.4095.0\",\n\t\"10.0.0-nightly.20200413\": \"83.0.4095.0\",\n\t\"10.0.0-nightly.20200414\": \"84.0.4114.0\",\n\t\"10.0.0-nightly.20200415\": \"84.0.4115.0\",\n\t\"10.0.0-nightly.20200416\": \"84.0.4115.0\",\n\t\"10.0.0-nightly.20200417\": \"84.0.4115.0\",\n\t\"10.0.0-nightly.20200422\": \"84.0.4121.0\",\n\t\"10.0.0-nightly.20200423\": \"84.0.4121.0\",\n\t\"10.0.0-nightly.20200427\": \"84.0.4125.0\",\n\t\"10.0.0-nightly.20200428\": \"84.0.4125.0\",\n\t\"10.0.0-nightly.20200429\": \"84.0.4125.0\",\n\t\"10.0.0-nightly.20200430\": \"84.0.4125.0\",\n\t\"10.0.0-nightly.20200501\": \"84.0.4129.0\",\n\t\"10.0.0-nightly.20200504\": \"84.0.4129.0\",\n\t\"10.0.0-nightly.20200505\": \"84.0.4129.0\",\n\t\"10.0.0-nightly.20200506\": \"84.0.4129.0\",\n\t\"10.0.0-nightly.20200507\": \"84.0.4129.0\",\n\t\"10.0.0-nightly.20200508\": \"84.0.4129.0\",\n\t\"10.0.0-nightly.20200511\": \"84.0.4129.0\",\n\t\"10.0.0-nightly.20200512\": \"84.0.4129.0\",\n\t\"10.0.0-nightly.20200513\": \"84.0.4129.0\",\n\t\"10.0.0-nightly.20200514\": \"84.0.4129.0\",\n\t\"10.0.0-nightly.20200515\": \"84.0.4129.0\",\n\t\"10.0.0-nightly.20200518\": \"84.0.4129.0\",\n\t\"10.0.0-nightly.20200519\": \"84.0.4129.0\",\n\t\"10.0.0-nightly.20200520\": \"84.0.4129.0\",\n\t\"10.0.0-nightly.20200521\": \"84.0.4129.0\",\n\t\"10.0.0\": \"85.0.4183.84\",\n\t\"10.0.1\": \"85.0.4183.86\",\n\t\"10.1.0\": \"85.0.4183.87\",\n\t\"10.1.1\": \"85.0.4183.93\",\n\t\"10.1.2\": \"85.0.4183.98\",\n\t\"10.1.3\": \"85.0.4183.121\",\n\t\"10.1.4\": \"85.0.4183.121\",\n\t\"10.1.5\": \"85.0.4183.121\",\n\t\"10.1.6\": \"85.0.4183.121\",\n\t\"10.1.7\": \"85.0.4183.121\",\n\t\"10.2.0\": \"85.0.4183.121\",\n\t\"10.3.0\": \"85.0.4183.121\",\n\t\"10.3.1\": \"85.0.4183.121\",\n\t\"10.3.2\": \"85.0.4183.121\",\n\t\"10.4.0\": \"85.0.4183.121\",\n\t\"10.4.1\": \"85.0.4183.121\",\n\t\"10.4.2\": \"85.0.4183.121\",\n\t\"10.4.3\": \"85.0.4183.121\",\n\t\"10.4.4\": \"85.0.4183.121\",\n\t\"10.4.5\": \"85.0.4183.121\",\n\t\"10.4.6\": \"85.0.4183.121\",\n\t\"10.4.7\": \"85.0.4183.121\",\n\t\"11.0.0-beta.1\": \"86.0.4234.0\",\n\t\"11.0.0-beta.3\": \"86.0.4234.0\",\n\t\"11.0.0-beta.4\": \"86.0.4234.0\",\n\t\"11.0.0-beta.5\": \"86.0.4234.0\",\n\t\"11.0.0-beta.6\": \"86.0.4234.0\",\n\t\"11.0.0-beta.7\": \"86.0.4234.0\",\n\t\"11.0.0-beta.8\": \"87.0.4251.1\",\n\t\"11.0.0-beta.9\": \"87.0.4251.1\",\n\t\"11.0.0-beta.11\": \"87.0.4251.1\",\n\t\"11.0.0-beta.12\": \"87.0.4280.11\",\n\t\"11.0.0-beta.13\": \"87.0.4280.11\",\n\t\"11.0.0-beta.16\": \"87.0.4280.27\",\n\t\"11.0.0-beta.17\": \"87.0.4280.27\",\n\t\"11.0.0-beta.18\": \"87.0.4280.27\",\n\t\"11.0.0-beta.19\": \"87.0.4280.27\",\n\t\"11.0.0-beta.20\": \"87.0.4280.40\",\n\t\"11.0.0-beta.22\": \"87.0.4280.47\",\n\t\"11.0.0-beta.23\": \"87.0.4280.47\",\n\t\"11.0.0-nightly.20200525\": \"84.0.4129.0\",\n\t\"11.0.0-nightly.20200526\": \"84.0.4129.0\",\n\t\"11.0.0-nightly.20200529\": \"85.0.4156.0\",\n\t\"11.0.0-nightly.20200602\": \"85.0.4162.0\",\n\t\"11.0.0-nightly.20200603\": \"85.0.4162.0\",\n\t\"11.0.0-nightly.20200604\": \"85.0.4162.0\",\n\t\"11.0.0-nightly.20200609\": \"85.0.4162.0\",\n\t\"11.0.0-nightly.20200610\": \"85.0.4162.0\",\n\t\"11.0.0-nightly.20200611\": \"85.0.4162.0\",\n\t\"11.0.0-nightly.20200615\": \"85.0.4162.0\",\n\t\"11.0.0-nightly.20200616\": \"85.0.4162.0\",\n\t\"11.0.0-nightly.20200617\": \"85.0.4162.0\",\n\t\"11.0.0-nightly.20200618\": \"85.0.4162.0\",\n\t\"11.0.0-nightly.20200619\": \"85.0.4162.0\",\n\t\"11.0.0-nightly.20200701\": \"85.0.4179.0\",\n\t\"11.0.0-nightly.20200702\": \"85.0.4179.0\",\n\t\"11.0.0-nightly.20200703\": \"85.0.4179.0\",\n\t\"11.0.0-nightly.20200706\": \"85.0.4179.0\",\n\t\"11.0.0-nightly.20200707\": \"85.0.4179.0\",\n\t\"11.0.0-nightly.20200708\": \"85.0.4179.0\",\n\t\"11.0.0-nightly.20200709\": \"85.0.4179.0\",\n\t\"11.0.0-nightly.20200716\": \"86.0.4203.0\",\n\t\"11.0.0-nightly.20200717\": \"86.0.4203.0\",\n\t\"11.0.0-nightly.20200720\": \"86.0.4203.0\",\n\t\"11.0.0-nightly.20200721\": \"86.0.4203.0\",\n\t\"11.0.0-nightly.20200723\": \"86.0.4209.0\",\n\t\"11.0.0-nightly.20200724\": \"86.0.4209.0\",\n\t\"11.0.0-nightly.20200729\": \"86.0.4209.0\",\n\t\"11.0.0-nightly.20200730\": \"86.0.4209.0\",\n\t\"11.0.0-nightly.20200731\": \"86.0.4209.0\",\n\t\"11.0.0-nightly.20200803\": \"86.0.4209.0\",\n\t\"11.0.0-nightly.20200804\": \"86.0.4209.0\",\n\t\"11.0.0-nightly.20200805\": \"86.0.4209.0\",\n\t\"11.0.0-nightly.20200811\": \"86.0.4209.0\",\n\t\"11.0.0-nightly.20200812\": \"86.0.4209.0\",\n\t\"11.0.0-nightly.20200822\": \"86.0.4234.0\",\n\t\"11.0.0-nightly.20200824\": \"86.0.4234.0\",\n\t\"11.0.0-nightly.20200825\": \"86.0.4234.0\",\n\t\"11.0.0-nightly.20200826\": \"86.0.4234.0\",\n\t\"11.0.0\": \"87.0.4280.60\",\n\t\"11.0.1\": \"87.0.4280.60\",\n\t\"11.0.2\": \"87.0.4280.67\",\n\t\"11.0.3\": \"87.0.4280.67\",\n\t\"11.0.4\": \"87.0.4280.67\",\n\t\"11.0.5\": \"87.0.4280.88\",\n\t\"11.1.0\": \"87.0.4280.88\",\n\t\"11.1.1\": \"87.0.4280.88\",\n\t\"11.2.0\": \"87.0.4280.141\",\n\t\"11.2.1\": \"87.0.4280.141\",\n\t\"11.2.2\": \"87.0.4280.141\",\n\t\"11.2.3\": \"87.0.4280.141\",\n\t\"11.3.0\": \"87.0.4280.141\",\n\t\"11.4.0\": \"87.0.4280.141\",\n\t\"11.4.1\": \"87.0.4280.141\",\n\t\"11.4.2\": \"87.0.4280.141\",\n\t\"11.4.3\": \"87.0.4280.141\",\n\t\"11.4.4\": \"87.0.4280.141\",\n\t\"11.4.5\": \"87.0.4280.141\",\n\t\"11.4.6\": \"87.0.4280.141\",\n\t\"11.4.7\": \"87.0.4280.141\",\n\t\"11.4.8\": \"87.0.4280.141\",\n\t\"11.4.9\": \"87.0.4280.141\",\n\t\"11.4.10\": \"87.0.4280.141\",\n\t\"11.4.11\": \"87.0.4280.141\",\n\t\"11.4.12\": \"87.0.4280.141\",\n\t\"11.5.0\": \"87.0.4280.141\",\n\t\"12.0.0-beta.1\": \"89.0.4328.0\",\n\t\"12.0.0-beta.3\": \"89.0.4328.0\",\n\t\"12.0.0-beta.4\": \"89.0.4328.0\",\n\t\"12.0.0-beta.5\": \"89.0.4328.0\",\n\t\"12.0.0-beta.6\": \"89.0.4328.0\",\n\t\"12.0.0-beta.7\": \"89.0.4328.0\",\n\t\"12.0.0-beta.8\": \"89.0.4328.0\",\n\t\"12.0.0-beta.9\": \"89.0.4328.0\",\n\t\"12.0.0-beta.10\": \"89.0.4328.0\",\n\t\"12.0.0-beta.11\": \"89.0.4328.0\",\n\t\"12.0.0-beta.12\": \"89.0.4328.0\",\n\t\"12.0.0-beta.14\": \"89.0.4328.0\",\n\t\"12.0.0-beta.16\": \"89.0.4348.1\",\n\t\"12.0.0-beta.18\": \"89.0.4348.1\",\n\t\"12.0.0-beta.19\": \"89.0.4348.1\",\n\t\"12.0.0-beta.20\": \"89.0.4348.1\",\n\t\"12.0.0-beta.21\": \"89.0.4388.2\",\n\t\"12.0.0-beta.22\": \"89.0.4388.2\",\n\t\"12.0.0-beta.23\": \"89.0.4388.2\",\n\t\"12.0.0-beta.24\": \"89.0.4388.2\",\n\t\"12.0.0-beta.25\": \"89.0.4388.2\",\n\t\"12.0.0-beta.26\": \"89.0.4388.2\",\n\t\"12.0.0-beta.27\": \"89.0.4389.23\",\n\t\"12.0.0-beta.28\": \"89.0.4389.23\",\n\t\"12.0.0-beta.29\": \"89.0.4389.23\",\n\t\"12.0.0-beta.30\": \"89.0.4389.58\",\n\t\"12.0.0-beta.31\": \"89.0.4389.58\",\n\t\"12.0.0-nightly.20200827\": \"86.0.4234.0\",\n\t\"12.0.0-nightly.20200831\": \"86.0.4234.0\",\n\t\"12.0.0-nightly.20200902\": \"86.0.4234.0\",\n\t\"12.0.0-nightly.20200903\": \"86.0.4234.0\",\n\t\"12.0.0-nightly.20200907\": \"86.0.4234.0\",\n\t\"12.0.0-nightly.20200910\": \"86.0.4234.0\",\n\t\"12.0.0-nightly.20200911\": \"86.0.4234.0\",\n\t\"12.0.0-nightly.20200914\": \"86.0.4234.0\",\n\t\"12.0.0-nightly.20201002\": \"87.0.4268.0\",\n\t\"12.0.0-nightly.20201007\": \"87.0.4268.0\",\n\t\"12.0.0-nightly.20201009\": \"87.0.4268.0\",\n\t\"12.0.0-nightly.20201012\": \"87.0.4268.0\",\n\t\"12.0.0-nightly.20201013\": \"87.0.4268.0\",\n\t\"12.0.0-nightly.20201014\": \"87.0.4268.0\",\n\t\"12.0.0-nightly.20201015\": \"87.0.4268.0\",\n\t\"12.0.0-nightly.20201023\": \"88.0.4292.0\",\n\t\"12.0.0-nightly.20201026\": \"88.0.4292.0\",\n\t\"12.0.0-nightly.20201030\": \"88.0.4306.0\",\n\t\"12.0.0-nightly.20201102\": \"88.0.4306.0\",\n\t\"12.0.0-nightly.20201103\": \"88.0.4306.0\",\n\t\"12.0.0-nightly.20201104\": \"88.0.4306.0\",\n\t\"12.0.0-nightly.20201105\": \"88.0.4306.0\",\n\t\"12.0.0-nightly.20201106\": \"88.0.4306.0\",\n\t\"12.0.0-nightly.20201111\": \"88.0.4306.0\",\n\t\"12.0.0-nightly.20201112\": \"88.0.4306.0\",\n\t\"12.0.0-nightly.20201116\": \"88.0.4324.0\",\n\t\"12.0.0\": \"89.0.4389.69\",\n\t\"12.0.1\": \"89.0.4389.82\",\n\t\"12.0.2\": \"89.0.4389.90\",\n\t\"12.0.3\": \"89.0.4389.114\",\n\t\"12.0.4\": \"89.0.4389.114\",\n\t\"12.0.5\": \"89.0.4389.128\",\n\t\"12.0.6\": \"89.0.4389.128\",\n\t\"12.0.7\": \"89.0.4389.128\",\n\t\"12.0.8\": \"89.0.4389.128\",\n\t\"12.0.9\": \"89.0.4389.128\",\n\t\"12.0.10\": \"89.0.4389.128\",\n\t\"12.0.11\": \"89.0.4389.128\",\n\t\"12.0.12\": \"89.0.4389.128\",\n\t\"12.0.13\": \"89.0.4389.128\",\n\t\"12.0.14\": \"89.0.4389.128\",\n\t\"12.0.15\": \"89.0.4389.128\",\n\t\"12.0.16\": \"89.0.4389.128\",\n\t\"12.0.17\": \"89.0.4389.128\",\n\t\"12.0.18\": \"89.0.4389.128\",\n\t\"12.1.0\": \"89.0.4389.128\",\n\t\"12.1.1\": \"89.0.4389.128\",\n\t\"12.1.2\": \"89.0.4389.128\",\n\t\"12.2.0\": \"89.0.4389.128\",\n\t\"12.2.1\": \"89.0.4389.128\",\n\t\"12.2.2\": \"89.0.4389.128\",\n\t\"12.2.3\": \"89.0.4389.128\",\n\t\"13.0.0-beta.2\": \"90.0.4402.0\",\n\t\"13.0.0-beta.3\": \"90.0.4402.0\",\n\t\"13.0.0-beta.4\": \"90.0.4415.0\",\n\t\"13.0.0-beta.5\": \"90.0.4415.0\",\n\t\"13.0.0-beta.6\": \"90.0.4415.0\",\n\t\"13.0.0-beta.7\": \"90.0.4415.0\",\n\t\"13.0.0-beta.8\": \"90.0.4415.0\",\n\t\"13.0.0-beta.9\": \"90.0.4415.0\",\n\t\"13.0.0-beta.10\": \"90.0.4415.0\",\n\t\"13.0.0-beta.11\": \"90.0.4415.0\",\n\t\"13.0.0-beta.12\": \"90.0.4415.0\",\n\t\"13.0.0-beta.13\": \"90.0.4415.0\",\n\t\"13.0.0-beta.14\": \"91.0.4448.0\",\n\t\"13.0.0-beta.16\": \"91.0.4448.0\",\n\t\"13.0.0-beta.17\": \"91.0.4448.0\",\n\t\"13.0.0-beta.18\": \"91.0.4448.0\",\n\t\"13.0.0-beta.20\": \"91.0.4448.0\",\n\t\"13.0.0-beta.21\": \"91.0.4472.33\",\n\t\"13.0.0-beta.22\": \"91.0.4472.33\",\n\t\"13.0.0-beta.23\": \"91.0.4472.33\",\n\t\"13.0.0-beta.24\": \"91.0.4472.38\",\n\t\"13.0.0-beta.25\": \"91.0.4472.38\",\n\t\"13.0.0-beta.26\": \"91.0.4472.38\",\n\t\"13.0.0-beta.27\": \"91.0.4472.38\",\n\t\"13.0.0-beta.28\": \"91.0.4472.38\",\n\t\"13.0.0-nightly.20201119\": \"89.0.4328.0\",\n\t\"13.0.0-nightly.20201123\": \"89.0.4328.0\",\n\t\"13.0.0-nightly.20201124\": \"89.0.4328.0\",\n\t\"13.0.0-nightly.20201126\": \"89.0.4328.0\",\n\t\"13.0.0-nightly.20201127\": \"89.0.4328.0\",\n\t\"13.0.0-nightly.20201130\": \"89.0.4328.0\",\n\t\"13.0.0-nightly.20201201\": \"89.0.4328.0\",\n\t\"13.0.0-nightly.20201202\": \"89.0.4328.0\",\n\t\"13.0.0-nightly.20201203\": \"89.0.4328.0\",\n\t\"13.0.0-nightly.20201204\": \"89.0.4328.0\",\n\t\"13.0.0-nightly.20201207\": \"89.0.4328.0\",\n\t\"13.0.0-nightly.20201208\": \"89.0.4328.0\",\n\t\"13.0.0-nightly.20201209\": \"89.0.4328.0\",\n\t\"13.0.0-nightly.20201210\": \"89.0.4328.0\",\n\t\"13.0.0-nightly.20201211\": \"89.0.4328.0\",\n\t\"13.0.0-nightly.20201214\": \"89.0.4328.0\",\n\t\"13.0.0-nightly.20201215\": \"89.0.4349.0\",\n\t\"13.0.0-nightly.20201216\": \"89.0.4349.0\",\n\t\"13.0.0-nightly.20201221\": \"89.0.4349.0\",\n\t\"13.0.0-nightly.20201222\": \"89.0.4349.0\",\n\t\"13.0.0-nightly.20201223\": \"89.0.4359.0\",\n\t\"13.0.0-nightly.20210104\": \"89.0.4359.0\",\n\t\"13.0.0-nightly.20210108\": \"89.0.4359.0\",\n\t\"13.0.0-nightly.20210111\": \"89.0.4359.0\",\n\t\"13.0.0-nightly.20210113\": \"89.0.4386.0\",\n\t\"13.0.0-nightly.20210114\": \"89.0.4386.0\",\n\t\"13.0.0-nightly.20210118\": \"89.0.4386.0\",\n\t\"13.0.0-nightly.20210122\": \"89.0.4386.0\",\n\t\"13.0.0-nightly.20210125\": \"89.0.4386.0\",\n\t\"13.0.0-nightly.20210127\": \"89.0.4389.0\",\n\t\"13.0.0-nightly.20210128\": \"89.0.4389.0\",\n\t\"13.0.0-nightly.20210129\": \"89.0.4389.0\",\n\t\"13.0.0-nightly.20210201\": \"89.0.4389.0\",\n\t\"13.0.0-nightly.20210202\": \"89.0.4389.0\",\n\t\"13.0.0-nightly.20210203\": \"89.0.4389.0\",\n\t\"13.0.0-nightly.20210205\": \"89.0.4389.0\",\n\t\"13.0.0-nightly.20210208\": \"89.0.4389.0\",\n\t\"13.0.0-nightly.20210209\": \"89.0.4389.0\",\n\t\"13.0.0-nightly.20210210\": \"90.0.4402.0\",\n\t\"13.0.0-nightly.20210211\": \"90.0.4402.0\",\n\t\"13.0.0-nightly.20210212\": \"90.0.4402.0\",\n\t\"13.0.0-nightly.20210216\": \"90.0.4402.0\",\n\t\"13.0.0-nightly.20210217\": \"90.0.4402.0\",\n\t\"13.0.0-nightly.20210218\": \"90.0.4402.0\",\n\t\"13.0.0-nightly.20210219\": \"90.0.4402.0\",\n\t\"13.0.0-nightly.20210222\": \"90.0.4402.0\",\n\t\"13.0.0-nightly.20210225\": \"90.0.4402.0\",\n\t\"13.0.0-nightly.20210226\": \"90.0.4402.0\",\n\t\"13.0.0-nightly.20210301\": \"90.0.4402.0\",\n\t\"13.0.0-nightly.20210302\": \"90.0.4402.0\",\n\t\"13.0.0-nightly.20210303\": \"90.0.4402.0\",\n\t\"13.0.0\": \"91.0.4472.69\",\n\t\"13.0.1\": \"91.0.4472.69\",\n\t\"13.1.0\": \"91.0.4472.77\",\n\t\"13.1.1\": \"91.0.4472.77\",\n\t\"13.1.2\": \"91.0.4472.77\",\n\t\"13.1.3\": \"91.0.4472.106\",\n\t\"13.1.4\": \"91.0.4472.106\",\n\t\"13.1.5\": \"91.0.4472.124\",\n\t\"13.1.6\": \"91.0.4472.124\",\n\t\"13.1.7\": \"91.0.4472.124\",\n\t\"13.1.8\": \"91.0.4472.164\",\n\t\"13.1.9\": \"91.0.4472.164\",\n\t\"13.2.0\": \"91.0.4472.164\",\n\t\"13.2.1\": \"91.0.4472.164\",\n\t\"13.2.2\": \"91.0.4472.164\",\n\t\"13.2.3\": \"91.0.4472.164\",\n\t\"13.3.0\": \"91.0.4472.164\",\n\t\"13.4.0\": \"91.0.4472.164\",\n\t\"13.5.0\": \"91.0.4472.164\",\n\t\"13.5.1\": \"91.0.4472.164\",\n\t\"13.5.2\": \"91.0.4472.164\",\n\t\"13.6.0\": \"91.0.4472.164\",\n\t\"13.6.1\": \"91.0.4472.164\",\n\t\"13.6.2\": \"91.0.4472.164\",\n\t\"13.6.3\": \"91.0.4472.164\",\n\t\"13.6.6\": \"91.0.4472.164\",\n\t\"13.6.7\": \"91.0.4472.164\",\n\t\"13.6.8\": \"91.0.4472.164\",\n\t\"13.6.9\": \"91.0.4472.164\",\n\t\"14.0.0-beta.1\": \"92.0.4511.0\",\n\t\"14.0.0-beta.2\": \"92.0.4511.0\",\n\t\"14.0.0-beta.3\": \"92.0.4511.0\",\n\t\"14.0.0-beta.5\": \"93.0.4536.0\",\n\t\"14.0.0-beta.6\": \"93.0.4536.0\",\n\t\"14.0.0-beta.7\": \"93.0.4536.0\",\n\t\"14.0.0-beta.8\": \"93.0.4536.0\",\n\t\"14.0.0-beta.9\": \"93.0.4539.0\",\n\t\"14.0.0-beta.10\": \"93.0.4539.0\",\n\t\"14.0.0-beta.11\": \"93.0.4557.4\",\n\t\"14.0.0-beta.12\": \"93.0.4557.4\",\n\t\"14.0.0-beta.13\": \"93.0.4566.0\",\n\t\"14.0.0-beta.14\": \"93.0.4566.0\",\n\t\"14.0.0-beta.15\": \"93.0.4566.0\",\n\t\"14.0.0-beta.16\": \"93.0.4566.0\",\n\t\"14.0.0-beta.17\": \"93.0.4566.0\",\n\t\"14.0.0-beta.18\": \"93.0.4577.15\",\n\t\"14.0.0-beta.19\": \"93.0.4577.15\",\n\t\"14.0.0-beta.20\": \"93.0.4577.15\",\n\t\"14.0.0-beta.21\": \"93.0.4577.15\",\n\t\"14.0.0-beta.22\": \"93.0.4577.25\",\n\t\"14.0.0-beta.23\": \"93.0.4577.25\",\n\t\"14.0.0-beta.24\": \"93.0.4577.51\",\n\t\"14.0.0-beta.25\": \"93.0.4577.51\",\n\t\"14.0.0-nightly.20210304\": \"90.0.4402.0\",\n\t\"14.0.0-nightly.20210305\": \"90.0.4415.0\",\n\t\"14.0.0-nightly.20210308\": \"90.0.4415.0\",\n\t\"14.0.0-nightly.20210309\": \"90.0.4415.0\",\n\t\"14.0.0-nightly.20210311\": \"90.0.4415.0\",\n\t\"14.0.0-nightly.20210315\": \"90.0.4415.0\",\n\t\"14.0.0-nightly.20210316\": \"90.0.4415.0\",\n\t\"14.0.0-nightly.20210317\": \"90.0.4415.0\",\n\t\"14.0.0-nightly.20210318\": \"90.0.4415.0\",\n\t\"14.0.0-nightly.20210319\": \"90.0.4415.0\",\n\t\"14.0.0-nightly.20210323\": \"90.0.4415.0\",\n\t\"14.0.0-nightly.20210324\": \"90.0.4415.0\",\n\t\"14.0.0-nightly.20210325\": \"90.0.4415.0\",\n\t\"14.0.0-nightly.20210326\": \"90.0.4415.0\",\n\t\"14.0.0-nightly.20210329\": \"90.0.4415.0\",\n\t\"14.0.0-nightly.20210330\": \"90.0.4415.0\",\n\t\"14.0.0-nightly.20210331\": \"91.0.4448.0\",\n\t\"14.0.0-nightly.20210401\": \"91.0.4448.0\",\n\t\"14.0.0-nightly.20210402\": \"91.0.4448.0\",\n\t\"14.0.0-nightly.20210406\": \"91.0.4448.0\",\n\t\"14.0.0-nightly.20210407\": \"91.0.4448.0\",\n\t\"14.0.0-nightly.20210408\": \"91.0.4448.0\",\n\t\"14.0.0-nightly.20210409\": \"91.0.4448.0\",\n\t\"14.0.0-nightly.20210413\": \"91.0.4448.0\",\n\t\"14.0.0-nightly.20210426\": \"92.0.4475.0\",\n\t\"14.0.0-nightly.20210427\": \"92.0.4475.0\",\n\t\"14.0.0-nightly.20210430\": \"92.0.4488.0\",\n\t\"14.0.0-nightly.20210503\": \"92.0.4488.0\",\n\t\"14.0.0-nightly.20210505\": \"92.0.4496.0\",\n\t\"14.0.0-nightly.20210506\": \"92.0.4498.0\",\n\t\"14.0.0-nightly.20210507\": \"92.0.4499.0\",\n\t\"14.0.0-nightly.20210510\": \"92.0.4499.0\",\n\t\"14.0.0-nightly.20210511\": \"92.0.4499.0\",\n\t\"14.0.0-nightly.20210512\": \"92.0.4499.0\",\n\t\"14.0.0-nightly.20210513\": \"92.0.4499.0\",\n\t\"14.0.0-nightly.20210514\": \"92.0.4505.0\",\n\t\"14.0.0-nightly.20210517\": \"92.0.4505.0\",\n\t\"14.0.0-nightly.20210518\": \"92.0.4505.0\",\n\t\"14.0.0-nightly.20210519\": \"92.0.4505.0\",\n\t\"14.0.0-nightly.20210520\": \"92.0.4511.0\",\n\t\"14.0.0-nightly.20210523\": \"92.0.4511.0\",\n\t\"14.0.0-nightly.20210524\": \"92.0.4511.0\",\n\t\"14.0.0\": \"93.0.4577.58\",\n\t\"14.0.1\": \"93.0.4577.63\",\n\t\"14.0.2\": \"93.0.4577.82\",\n\t\"14.1.0\": \"93.0.4577.82\",\n\t\"14.1.1\": \"93.0.4577.82\",\n\t\"14.2.0\": \"93.0.4577.82\",\n\t\"14.2.1\": \"93.0.4577.82\",\n\t\"14.2.2\": \"93.0.4577.82\",\n\t\"14.2.3\": \"93.0.4577.82\",\n\t\"14.2.4\": \"93.0.4577.82\",\n\t\"14.2.5\": \"93.0.4577.82\",\n\t\"14.2.6\": \"93.0.4577.82\",\n\t\"14.2.7\": \"93.0.4577.82\",\n\t\"14.2.8\": \"93.0.4577.82\",\n\t\"14.2.9\": \"93.0.4577.82\",\n\t\"15.0.0-alpha.1\": \"93.0.4566.0\",\n\t\"15.0.0-alpha.2\": \"93.0.4566.0\",\n\t\"15.0.0-alpha.3\": \"94.0.4584.0\",\n\t\"15.0.0-alpha.4\": \"94.0.4584.0\",\n\t\"15.0.0-alpha.5\": \"94.0.4584.0\",\n\t\"15.0.0-alpha.6\": \"94.0.4584.0\",\n\t\"15.0.0-alpha.7\": \"94.0.4590.2\",\n\t\"15.0.0-alpha.8\": \"94.0.4590.2\",\n\t\"15.0.0-alpha.9\": \"94.0.4590.2\",\n\t\"15.0.0-alpha.10\": \"94.0.4606.12\",\n\t\"15.0.0-beta.1\": \"94.0.4606.20\",\n\t\"15.0.0-beta.2\": \"94.0.4606.20\",\n\t\"15.0.0-beta.3\": \"94.0.4606.31\",\n\t\"15.0.0-beta.4\": \"94.0.4606.31\",\n\t\"15.0.0-beta.5\": \"94.0.4606.31\",\n\t\"15.0.0-beta.6\": \"94.0.4606.31\",\n\t\"15.0.0-beta.7\": \"94.0.4606.31\",\n\t\"15.0.0-nightly.20210527\": \"92.0.4511.0\",\n\t\"15.0.0-nightly.20210528\": \"92.0.4511.0\",\n\t\"15.0.0-nightly.20210531\": \"92.0.4511.0\",\n\t\"15.0.0-nightly.20210601\": \"92.0.4511.0\",\n\t\"15.0.0-nightly.20210602\": \"92.0.4511.0\",\n\t\"15.0.0-nightly.20210603\": \"93.0.4530.0\",\n\t\"15.0.0-nightly.20210604\": \"93.0.4530.0\",\n\t\"15.0.0-nightly.20210608\": \"93.0.4535.0\",\n\t\"15.0.0-nightly.20210609\": \"93.0.4536.0\",\n\t\"15.0.0-nightly.20210610\": \"93.0.4536.0\",\n\t\"15.0.0-nightly.20210611\": \"93.0.4536.0\",\n\t\"15.0.0-nightly.20210614\": \"93.0.4536.0\",\n\t\"15.0.0-nightly.20210615\": \"93.0.4536.0\",\n\t\"15.0.0-nightly.20210616\": \"93.0.4536.0\",\n\t\"15.0.0-nightly.20210617\": \"93.0.4539.0\",\n\t\"15.0.0-nightly.20210618\": \"93.0.4539.0\",\n\t\"15.0.0-nightly.20210621\": \"93.0.4539.0\",\n\t\"15.0.0-nightly.20210622\": \"93.0.4539.0\",\n\t\"15.0.0-nightly.20210623\": \"93.0.4550.0\",\n\t\"15.0.0-nightly.20210624\": \"93.0.4550.0\",\n\t\"15.0.0-nightly.20210625\": \"93.0.4552.0\",\n\t\"15.0.0-nightly.20210628\": \"93.0.4552.0\",\n\t\"15.0.0-nightly.20210629\": \"93.0.4552.0\",\n\t\"15.0.0-nightly.20210630\": \"93.0.4558.0\",\n\t\"15.0.0-nightly.20210701\": \"93.0.4558.0\",\n\t\"15.0.0-nightly.20210702\": \"93.0.4558.0\",\n\t\"15.0.0-nightly.20210705\": \"93.0.4558.0\",\n\t\"15.0.0-nightly.20210706\": \"93.0.4566.0\",\n\t\"15.0.0-nightly.20210707\": \"93.0.4566.0\",\n\t\"15.0.0-nightly.20210708\": \"93.0.4566.0\",\n\t\"15.0.0-nightly.20210709\": \"93.0.4566.0\",\n\t\"15.0.0-nightly.20210712\": \"93.0.4566.0\",\n\t\"15.0.0-nightly.20210713\": \"93.0.4566.0\",\n\t\"15.0.0-nightly.20210714\": \"93.0.4566.0\",\n\t\"15.0.0-nightly.20210715\": \"93.0.4566.0\",\n\t\"15.0.0-nightly.20210716\": \"93.0.4566.0\",\n\t\"15.0.0-nightly.20210719\": \"93.0.4566.0\",\n\t\"15.0.0-nightly.20210720\": \"93.0.4566.0\",\n\t\"15.0.0-nightly.20210721\": \"93.0.4566.0\",\n\t\"15.0.0\": \"94.0.4606.51\",\n\t\"15.1.0\": \"94.0.4606.61\",\n\t\"15.1.1\": \"94.0.4606.61\",\n\t\"15.1.2\": \"94.0.4606.71\",\n\t\"15.2.0\": \"94.0.4606.81\",\n\t\"15.3.0\": \"94.0.4606.81\",\n\t\"15.3.1\": \"94.0.4606.81\",\n\t\"15.3.2\": \"94.0.4606.81\",\n\t\"15.3.3\": \"94.0.4606.81\",\n\t\"15.3.4\": \"94.0.4606.81\",\n\t\"15.3.5\": \"94.0.4606.81\",\n\t\"15.3.6\": \"94.0.4606.81\",\n\t\"15.3.7\": \"94.0.4606.81\",\n\t\"15.4.0\": \"94.0.4606.81\",\n\t\"15.4.1\": \"94.0.4606.81\",\n\t\"15.4.2\": \"94.0.4606.81\",\n\t\"15.5.0\": \"94.0.4606.81\",\n\t\"15.5.1\": \"94.0.4606.81\",\n\t\"15.5.2\": \"94.0.4606.81\",\n\t\"15.5.3\": \"94.0.4606.81\",\n\t\"15.5.4\": \"94.0.4606.81\",\n\t\"15.5.5\": \"94.0.4606.81\",\n\t\"15.5.6\": \"94.0.4606.81\",\n\t\"15.5.7\": \"94.0.4606.81\",\n\t\"16.0.0-alpha.1\": \"95.0.4629.0\",\n\t\"16.0.0-alpha.2\": \"95.0.4629.0\",\n\t\"16.0.0-alpha.3\": \"95.0.4629.0\",\n\t\"16.0.0-alpha.4\": \"95.0.4629.0\",\n\t\"16.0.0-alpha.5\": \"95.0.4629.0\",\n\t\"16.0.0-alpha.6\": \"95.0.4629.0\",\n\t\"16.0.0-alpha.7\": \"95.0.4629.0\",\n\t\"16.0.0-alpha.8\": \"96.0.4647.0\",\n\t\"16.0.0-alpha.9\": \"96.0.4647.0\",\n\t\"16.0.0-beta.1\": \"96.0.4647.0\",\n\t\"16.0.0-beta.2\": \"96.0.4647.0\",\n\t\"16.0.0-beta.3\": \"96.0.4647.0\",\n\t\"16.0.0-beta.4\": \"96.0.4664.18\",\n\t\"16.0.0-beta.5\": \"96.0.4664.18\",\n\t\"16.0.0-beta.6\": \"96.0.4664.27\",\n\t\"16.0.0-beta.7\": \"96.0.4664.27\",\n\t\"16.0.0-beta.8\": \"96.0.4664.35\",\n\t\"16.0.0-beta.9\": \"96.0.4664.35\",\n\t\"16.0.0-nightly.20210722\": \"93.0.4566.0\",\n\t\"16.0.0-nightly.20210723\": \"93.0.4566.0\",\n\t\"16.0.0-nightly.20210726\": \"93.0.4566.0\",\n\t\"16.0.0-nightly.20210727\": \"94.0.4584.0\",\n\t\"16.0.0-nightly.20210728\": \"94.0.4584.0\",\n\t\"16.0.0-nightly.20210729\": \"94.0.4584.0\",\n\t\"16.0.0-nightly.20210730\": \"94.0.4584.0\",\n\t\"16.0.0-nightly.20210802\": \"94.0.4584.0\",\n\t\"16.0.0-nightly.20210803\": \"94.0.4584.0\",\n\t\"16.0.0-nightly.20210804\": \"94.0.4584.0\",\n\t\"16.0.0-nightly.20210805\": \"94.0.4584.0\",\n\t\"16.0.0-nightly.20210806\": \"94.0.4584.0\",\n\t\"16.0.0-nightly.20210809\": \"94.0.4584.0\",\n\t\"16.0.0-nightly.20210810\": \"94.0.4584.0\",\n\t\"16.0.0-nightly.20210811\": \"94.0.4584.0\",\n\t\"16.0.0-nightly.20210812\": \"94.0.4590.2\",\n\t\"16.0.0-nightly.20210813\": \"94.0.4590.2\",\n\t\"16.0.0-nightly.20210816\": \"94.0.4590.2\",\n\t\"16.0.0-nightly.20210817\": \"94.0.4590.2\",\n\t\"16.0.0-nightly.20210818\": \"94.0.4590.2\",\n\t\"16.0.0-nightly.20210819\": \"94.0.4590.2\",\n\t\"16.0.0-nightly.20210820\": \"94.0.4590.2\",\n\t\"16.0.0-nightly.20210823\": \"94.0.4590.2\",\n\t\"16.0.0-nightly.20210824\": \"95.0.4612.5\",\n\t\"16.0.0-nightly.20210825\": \"95.0.4612.5\",\n\t\"16.0.0-nightly.20210826\": \"95.0.4612.5\",\n\t\"16.0.0-nightly.20210827\": \"95.0.4612.5\",\n\t\"16.0.0-nightly.20210830\": \"95.0.4612.5\",\n\t\"16.0.0-nightly.20210831\": \"95.0.4612.5\",\n\t\"16.0.0-nightly.20210901\": \"95.0.4612.5\",\n\t\"16.0.0-nightly.20210902\": \"95.0.4629.0\",\n\t\"16.0.0-nightly.20210903\": \"95.0.4629.0\",\n\t\"16.0.0-nightly.20210906\": \"95.0.4629.0\",\n\t\"16.0.0-nightly.20210907\": \"95.0.4629.0\",\n\t\"16.0.0-nightly.20210908\": \"95.0.4629.0\",\n\t\"16.0.0-nightly.20210909\": \"95.0.4629.0\",\n\t\"16.0.0-nightly.20210910\": \"95.0.4629.0\",\n\t\"16.0.0-nightly.20210913\": \"95.0.4629.0\",\n\t\"16.0.0-nightly.20210914\": \"95.0.4629.0\",\n\t\"16.0.0-nightly.20210915\": \"95.0.4629.0\",\n\t\"16.0.0-nightly.20210916\": \"95.0.4629.0\",\n\t\"16.0.0-nightly.20210917\": \"95.0.4629.0\",\n\t\"16.0.0-nightly.20210920\": \"95.0.4629.0\",\n\t\"16.0.0-nightly.20210921\": \"95.0.4629.0\",\n\t\"16.0.0-nightly.20210922\": \"95.0.4629.0\",\n\t\"16.0.0\": \"96.0.4664.45\",\n\t\"16.0.1\": \"96.0.4664.45\",\n\t\"16.0.2\": \"96.0.4664.55\",\n\t\"16.0.3\": \"96.0.4664.55\",\n\t\"16.0.4\": \"96.0.4664.55\",\n\t\"16.0.5\": \"96.0.4664.55\",\n\t\"16.0.6\": \"96.0.4664.110\",\n\t\"16.0.7\": \"96.0.4664.110\",\n\t\"16.0.8\": \"96.0.4664.110\",\n\t\"16.0.9\": \"96.0.4664.174\",\n\t\"16.0.10\": \"96.0.4664.174\",\n\t\"16.1.0\": \"96.0.4664.174\",\n\t\"16.1.1\": \"96.0.4664.174\",\n\t\"16.2.0\": \"96.0.4664.174\",\n\t\"16.2.1\": \"96.0.4664.174\",\n\t\"16.2.2\": \"96.0.4664.174\",\n\t\"16.2.3\": \"96.0.4664.174\",\n\t\"16.2.4\": \"96.0.4664.174\",\n\t\"16.2.5\": \"96.0.4664.174\",\n\t\"16.2.6\": \"96.0.4664.174\",\n\t\"16.2.7\": \"96.0.4664.174\",\n\t\"16.2.8\": \"96.0.4664.174\",\n\t\"17.0.0-alpha.1\": \"96.0.4664.4\",\n\t\"17.0.0-alpha.2\": \"96.0.4664.4\",\n\t\"17.0.0-alpha.3\": \"96.0.4664.4\",\n\t\"17.0.0-alpha.4\": \"98.0.4706.0\",\n\t\"17.0.0-alpha.5\": \"98.0.4706.0\",\n\t\"17.0.0-alpha.6\": \"98.0.4706.0\",\n\t\"17.0.0-beta.1\": \"98.0.4706.0\",\n\t\"17.0.0-beta.2\": \"98.0.4706.0\",\n\t\"17.0.0-beta.3\": \"98.0.4758.9\",\n\t\"17.0.0-beta.4\": \"98.0.4758.11\",\n\t\"17.0.0-beta.5\": \"98.0.4758.11\",\n\t\"17.0.0-beta.6\": \"98.0.4758.11\",\n\t\"17.0.0-beta.7\": \"98.0.4758.11\",\n\t\"17.0.0-beta.8\": \"98.0.4758.11\",\n\t\"17.0.0-beta.9\": \"98.0.4758.11\",\n\t\"17.0.0-nightly.20210923\": \"95.0.4629.0\",\n\t\"17.0.0-nightly.20210924\": \"95.0.4629.0\",\n\t\"17.0.0-nightly.20210927\": \"95.0.4629.0\",\n\t\"17.0.0-nightly.20210928\": \"95.0.4629.0\",\n\t\"17.0.0-nightly.20210929\": \"95.0.4629.0\",\n\t\"17.0.0-nightly.20210930\": \"95.0.4629.0\",\n\t\"17.0.0-nightly.20211001\": \"95.0.4629.0\",\n\t\"17.0.0-nightly.20211004\": \"95.0.4629.0\",\n\t\"17.0.0-nightly.20211005\": \"95.0.4629.0\",\n\t\"17.0.0-nightly.20211006\": \"96.0.4647.0\",\n\t\"17.0.0-nightly.20211007\": \"96.0.4647.0\",\n\t\"17.0.0-nightly.20211008\": \"96.0.4647.0\",\n\t\"17.0.0-nightly.20211011\": \"96.0.4647.0\",\n\t\"17.0.0-nightly.20211012\": \"96.0.4647.0\",\n\t\"17.0.0-nightly.20211013\": \"96.0.4647.0\",\n\t\"17.0.0-nightly.20211014\": \"96.0.4647.0\",\n\t\"17.0.0-nightly.20211015\": \"96.0.4647.0\",\n\t\"17.0.0-nightly.20211018\": \"96.0.4647.0\",\n\t\"17.0.0-nightly.20211019\": \"96.0.4647.0\",\n\t\"17.0.0-nightly.20211020\": \"96.0.4647.0\",\n\t\"17.0.0-nightly.20211021\": \"96.0.4647.0\",\n\t\"17.0.0-nightly.20211022\": \"96.0.4664.4\",\n\t\"17.0.0-nightly.20211025\": \"96.0.4664.4\",\n\t\"17.0.0-nightly.20211026\": \"96.0.4664.4\",\n\t\"17.0.0-nightly.20211027\": \"96.0.4664.4\",\n\t\"17.0.0-nightly.20211028\": \"96.0.4664.4\",\n\t\"17.0.0-nightly.20211029\": \"96.0.4664.4\",\n\t\"17.0.0-nightly.20211101\": \"96.0.4664.4\",\n\t\"17.0.0-nightly.20211102\": \"96.0.4664.4\",\n\t\"17.0.0-nightly.20211103\": \"96.0.4664.4\",\n\t\"17.0.0-nightly.20211104\": \"96.0.4664.4\",\n\t\"17.0.0-nightly.20211105\": \"96.0.4664.4\",\n\t\"17.0.0-nightly.20211108\": \"96.0.4664.4\",\n\t\"17.0.0-nightly.20211109\": \"96.0.4664.4\",\n\t\"17.0.0-nightly.20211110\": \"96.0.4664.4\",\n\t\"17.0.0-nightly.20211111\": \"96.0.4664.4\",\n\t\"17.0.0-nightly.20211112\": \"96.0.4664.4\",\n\t\"17.0.0-nightly.20211115\": \"96.0.4664.4\",\n\t\"17.0.0-nightly.20211116\": \"96.0.4664.4\",\n\t\"17.0.0-nightly.20211117\": \"96.0.4664.4\",\n\t\"17.0.0\": \"98.0.4758.74\",\n\t\"17.0.1\": \"98.0.4758.82\",\n\t\"17.1.0\": \"98.0.4758.102\",\n\t\"17.1.1\": \"98.0.4758.109\",\n\t\"17.1.2\": \"98.0.4758.109\",\n\t\"17.2.0\": \"98.0.4758.109\",\n\t\"17.3.0\": \"98.0.4758.141\",\n\t\"17.3.1\": \"98.0.4758.141\",\n\t\"17.4.0\": \"98.0.4758.141\",\n\t\"17.4.1\": \"98.0.4758.141\",\n\t\"17.4.2\": \"98.0.4758.141\",\n\t\"17.4.3\": \"98.0.4758.141\",\n\t\"17.4.4\": \"98.0.4758.141\",\n\t\"17.4.5\": \"98.0.4758.141\",\n\t\"17.4.6\": \"98.0.4758.141\",\n\t\"17.4.7\": \"98.0.4758.141\",\n\t\"17.4.8\": \"98.0.4758.141\",\n\t\"17.4.9\": \"98.0.4758.141\",\n\t\"17.4.10\": \"98.0.4758.141\",\n\t\"17.4.11\": \"98.0.4758.141\",\n\t\"18.0.0-alpha.1\": \"99.0.4767.0\",\n\t\"18.0.0-alpha.2\": \"99.0.4767.0\",\n\t\"18.0.0-alpha.3\": \"99.0.4767.0\",\n\t\"18.0.0-alpha.4\": \"99.0.4767.0\",\n\t\"18.0.0-alpha.5\": \"99.0.4767.0\",\n\t\"18.0.0-beta.1\": \"100.0.4894.0\",\n\t\"18.0.0-beta.2\": \"100.0.4894.0\",\n\t\"18.0.0-beta.3\": \"100.0.4894.0\",\n\t\"18.0.0-beta.4\": \"100.0.4894.0\",\n\t\"18.0.0-beta.5\": \"100.0.4894.0\",\n\t\"18.0.0-beta.6\": \"100.0.4894.0\",\n\t\"18.0.0-nightly.20211118\": \"96.0.4664.4\",\n\t\"18.0.0-nightly.20211119\": \"96.0.4664.4\",\n\t\"18.0.0-nightly.20211122\": \"96.0.4664.4\",\n\t\"18.0.0-nightly.20211123\": \"96.0.4664.4\",\n\t\"18.0.0-nightly.20211124\": \"98.0.4706.0\",\n\t\"18.0.0-nightly.20211125\": \"98.0.4706.0\",\n\t\"18.0.0-nightly.20211126\": \"98.0.4706.0\",\n\t\"18.0.0-nightly.20211129\": \"98.0.4706.0\",\n\t\"18.0.0-nightly.20211130\": \"98.0.4706.0\",\n\t\"18.0.0-nightly.20211201\": \"98.0.4706.0\",\n\t\"18.0.0-nightly.20211202\": \"98.0.4706.0\",\n\t\"18.0.0-nightly.20211203\": \"98.0.4706.0\",\n\t\"18.0.0-nightly.20211206\": \"98.0.4706.0\",\n\t\"18.0.0-nightly.20211207\": \"98.0.4706.0\",\n\t\"18.0.0-nightly.20211208\": \"98.0.4706.0\",\n\t\"18.0.0-nightly.20211209\": \"98.0.4706.0\",\n\t\"18.0.0-nightly.20211210\": \"98.0.4706.0\",\n\t\"18.0.0-nightly.20211213\": \"98.0.4706.0\",\n\t\"18.0.0-nightly.20211214\": \"98.0.4706.0\",\n\t\"18.0.0-nightly.20211215\": \"98.0.4706.0\",\n\t\"18.0.0-nightly.20211216\": \"98.0.4706.0\",\n\t\"18.0.0-nightly.20211217\": \"98.0.4706.0\",\n\t\"18.0.0-nightly.20211220\": \"98.0.4706.0\",\n\t\"18.0.0-nightly.20211221\": \"98.0.4706.0\",\n\t\"18.0.0-nightly.20211222\": \"98.0.4706.0\",\n\t\"18.0.0-nightly.20211223\": \"98.0.4706.0\",\n\t\"18.0.0-nightly.20211228\": \"98.0.4706.0\",\n\t\"18.0.0-nightly.20211229\": \"98.0.4706.0\",\n\t\"18.0.0-nightly.20211231\": \"98.0.4706.0\",\n\t\"18.0.0-nightly.20220103\": \"98.0.4706.0\",\n\t\"18.0.0-nightly.20220104\": \"98.0.4706.0\",\n\t\"18.0.0-nightly.20220105\": \"98.0.4706.0\",\n\t\"18.0.0-nightly.20220106\": \"98.0.4706.0\",\n\t\"18.0.0-nightly.20220107\": \"98.0.4706.0\",\n\t\"18.0.0-nightly.20220110\": \"98.0.4706.0\",\n\t\"18.0.0-nightly.20220111\": \"99.0.4767.0\",\n\t\"18.0.0-nightly.20220112\": \"99.0.4767.0\",\n\t\"18.0.0-nightly.20220113\": \"99.0.4767.0\",\n\t\"18.0.0-nightly.20220114\": \"99.0.4767.0\",\n\t\"18.0.0-nightly.20220117\": \"99.0.4767.0\",\n\t\"18.0.0-nightly.20220118\": \"99.0.4767.0\",\n\t\"18.0.0-nightly.20220119\": \"99.0.4767.0\",\n\t\"18.0.0-nightly.20220121\": \"99.0.4767.0\",\n\t\"18.0.0-nightly.20220124\": \"99.0.4767.0\",\n\t\"18.0.0-nightly.20220125\": \"99.0.4767.0\",\n\t\"18.0.0-nightly.20220127\": \"99.0.4767.0\",\n\t\"18.0.0-nightly.20220128\": \"99.0.4767.0\",\n\t\"18.0.0-nightly.20220131\": \"99.0.4767.0\",\n\t\"18.0.0-nightly.20220201\": \"99.0.4767.0\",\n\t\"18.0.0\": \"100.0.4896.56\",\n\t\"18.0.1\": \"100.0.4896.60\",\n\t\"18.0.2\": \"100.0.4896.60\",\n\t\"18.0.3\": \"100.0.4896.75\",\n\t\"18.0.4\": \"100.0.4896.75\",\n\t\"18.1.0\": \"100.0.4896.127\",\n\t\"18.2.0\": \"100.0.4896.143\",\n\t\"18.2.1\": \"100.0.4896.143\",\n\t\"18.2.2\": \"100.0.4896.143\",\n\t\"18.2.3\": \"100.0.4896.143\",\n\t\"18.2.4\": \"100.0.4896.160\",\n\t\"18.3.0\": \"100.0.4896.160\",\n\t\"18.3.1\": \"100.0.4896.160\",\n\t\"18.3.2\": \"100.0.4896.160\",\n\t\"18.3.3\": \"100.0.4896.160\",\n\t\"18.3.4\": \"100.0.4896.160\",\n\t\"18.3.5\": \"100.0.4896.160\",\n\t\"18.3.6\": \"100.0.4896.160\",\n\t\"18.3.7\": \"100.0.4896.160\",\n\t\"18.3.8\": \"100.0.4896.160\",\n\t\"18.3.9\": \"100.0.4896.160\",\n\t\"18.3.11\": \"100.0.4896.160\",\n\t\"18.3.12\": \"100.0.4896.160\",\n\t\"18.3.13\": \"100.0.4896.160\",\n\t\"18.3.14\": \"100.0.4896.160\",\n\t\"18.3.15\": \"100.0.4896.160\",\n\t\"19.0.0-alpha.1\": \"102.0.4962.3\",\n\t\"19.0.0-alpha.2\": \"102.0.4971.0\",\n\t\"19.0.0-alpha.3\": \"102.0.4971.0\",\n\t\"19.0.0-alpha.4\": \"102.0.4989.0\",\n\t\"19.0.0-alpha.5\": \"102.0.4989.0\",\n\t\"19.0.0-beta.1\": \"102.0.4999.0\",\n\t\"19.0.0-beta.2\": \"102.0.4999.0\",\n\t\"19.0.0-beta.3\": \"102.0.4999.0\",\n\t\"19.0.0-beta.4\": \"102.0.5005.27\",\n\t\"19.0.0-beta.5\": \"102.0.5005.40\",\n\t\"19.0.0-beta.6\": \"102.0.5005.40\",\n\t\"19.0.0-beta.7\": \"102.0.5005.40\",\n\t\"19.0.0-beta.8\": \"102.0.5005.49\",\n\t\"19.0.0-nightly.20220202\": \"99.0.4767.0\",\n\t\"19.0.0-nightly.20220203\": \"99.0.4767.0\",\n\t\"19.0.0-nightly.20220204\": \"99.0.4767.0\",\n\t\"19.0.0-nightly.20220207\": \"99.0.4767.0\",\n\t\"19.0.0-nightly.20220208\": \"99.0.4767.0\",\n\t\"19.0.0-nightly.20220209\": \"99.0.4767.0\",\n\t\"19.0.0-nightly.20220308\": \"100.0.4894.0\",\n\t\"19.0.0-nightly.20220309\": \"100.0.4894.0\",\n\t\"19.0.0-nightly.20220310\": \"100.0.4894.0\",\n\t\"19.0.0-nightly.20220311\": \"100.0.4894.0\",\n\t\"19.0.0-nightly.20220314\": \"100.0.4894.0\",\n\t\"19.0.0-nightly.20220315\": \"100.0.4894.0\",\n\t\"19.0.0-nightly.20220316\": \"100.0.4894.0\",\n\t\"19.0.0-nightly.20220317\": \"100.0.4894.0\",\n\t\"19.0.0-nightly.20220318\": \"100.0.4894.0\",\n\t\"19.0.0-nightly.20220321\": \"100.0.4894.0\",\n\t\"19.0.0-nightly.20220322\": \"100.0.4894.0\",\n\t\"19.0.0-nightly.20220323\": \"100.0.4894.0\",\n\t\"19.0.0-nightly.20220324\": \"100.0.4894.0\",\n\t\"19.0.0-nightly.20220325\": \"102.0.4961.0\",\n\t\"19.0.0-nightly.20220328\": \"102.0.4962.3\",\n\t\"19.0.0-nightly.20220329\": \"102.0.4962.3\",\n\t\"19.0.0\": \"102.0.5005.61\",\n\t\"19.0.1\": \"102.0.5005.61\",\n\t\"19.0.2\": \"102.0.5005.63\",\n\t\"19.0.3\": \"102.0.5005.63\",\n\t\"19.0.4\": \"102.0.5005.63\",\n\t\"19.0.5\": \"102.0.5005.115\",\n\t\"19.0.6\": \"102.0.5005.115\",\n\t\"19.0.7\": \"102.0.5005.134\",\n\t\"19.0.8\": \"102.0.5005.148\",\n\t\"19.0.9\": \"102.0.5005.167\",\n\t\"19.0.10\": \"102.0.5005.167\",\n\t\"19.0.11\": \"102.0.5005.167\",\n\t\"19.0.12\": \"102.0.5005.167\",\n\t\"19.0.13\": \"102.0.5005.167\",\n\t\"19.0.14\": \"102.0.5005.167\",\n\t\"19.0.15\": \"102.0.5005.167\",\n\t\"19.0.16\": \"102.0.5005.167\",\n\t\"19.0.17\": \"102.0.5005.167\",\n\t\"19.1.0\": \"102.0.5005.167\",\n\t\"19.1.1\": \"102.0.5005.167\",\n\t\"19.1.2\": \"102.0.5005.167\",\n\t\"19.1.3\": \"102.0.5005.167\",\n\t\"19.1.4\": \"102.0.5005.167\",\n\t\"19.1.5\": \"102.0.5005.167\",\n\t\"19.1.6\": \"102.0.5005.167\",\n\t\"19.1.7\": \"102.0.5005.167\",\n\t\"19.1.8\": \"102.0.5005.167\",\n\t\"19.1.9\": \"102.0.5005.167\",\n\t\"20.0.0-alpha.1\": \"103.0.5044.0\",\n\t\"20.0.0-alpha.2\": \"104.0.5073.0\",\n\t\"20.0.0-alpha.3\": \"104.0.5073.0\",\n\t\"20.0.0-alpha.4\": \"104.0.5073.0\",\n\t\"20.0.0-alpha.5\": \"104.0.5073.0\",\n\t\"20.0.0-alpha.6\": \"104.0.5073.0\",\n\t\"20.0.0-alpha.7\": \"104.0.5073.0\",\n\t\"20.0.0-beta.1\": \"104.0.5073.0\",\n\t\"20.0.0-beta.2\": \"104.0.5073.0\",\n\t\"20.0.0-beta.3\": \"104.0.5073.0\",\n\t\"20.0.0-beta.4\": \"104.0.5073.0\",\n\t\"20.0.0-beta.5\": \"104.0.5073.0\",\n\t\"20.0.0-beta.6\": \"104.0.5073.0\",\n\t\"20.0.0-beta.7\": \"104.0.5073.0\",\n\t\"20.0.0-beta.8\": \"104.0.5073.0\",\n\t\"20.0.0-beta.9\": \"104.0.5112.39\",\n\t\"20.0.0-beta.10\": \"104.0.5112.48\",\n\t\"20.0.0-beta.11\": \"104.0.5112.48\",\n\t\"20.0.0-beta.12\": \"104.0.5112.48\",\n\t\"20.0.0-beta.13\": \"104.0.5112.57\",\n\t\"20.0.0-nightly.20220330\": \"102.0.4962.3\",\n\t\"20.0.0-nightly.20220411\": \"102.0.4971.0\",\n\t\"20.0.0-nightly.20220414\": \"102.0.4989.0\",\n\t\"20.0.0-nightly.20220415\": \"102.0.4989.0\",\n\t\"20.0.0-nightly.20220418\": \"102.0.4989.0\",\n\t\"20.0.0-nightly.20220419\": \"102.0.4989.0\",\n\t\"20.0.0-nightly.20220420\": \"102.0.4989.0\",\n\t\"20.0.0-nightly.20220421\": \"102.0.4989.0\",\n\t\"20.0.0-nightly.20220425\": \"102.0.4999.0\",\n\t\"20.0.0-nightly.20220426\": \"102.0.4999.0\",\n\t\"20.0.0-nightly.20220427\": \"102.0.4999.0\",\n\t\"20.0.0-nightly.20220428\": \"102.0.4999.0\",\n\t\"20.0.0-nightly.20220429\": \"102.0.4999.0\",\n\t\"20.0.0-nightly.20220502\": \"102.0.4999.0\",\n\t\"20.0.0-nightly.20220503\": \"102.0.4999.0\",\n\t\"20.0.0-nightly.20220504\": \"102.0.4999.0\",\n\t\"20.0.0-nightly.20220505\": \"102.0.4999.0\",\n\t\"20.0.0-nightly.20220506\": \"102.0.4999.0\",\n\t\"20.0.0-nightly.20220509\": \"102.0.4999.0\",\n\t\"20.0.0-nightly.20220511\": \"102.0.4999.0\",\n\t\"20.0.0-nightly.20220512\": \"102.0.4999.0\",\n\t\"20.0.0-nightly.20220513\": \"102.0.4999.0\",\n\t\"20.0.0-nightly.20220516\": \"102.0.4999.0\",\n\t\"20.0.0-nightly.20220517\": \"102.0.4999.0\",\n\t\"20.0.0-nightly.20220518\": \"103.0.5044.0\",\n\t\"20.0.0-nightly.20220519\": \"103.0.5044.0\",\n\t\"20.0.0-nightly.20220520\": \"103.0.5044.0\",\n\t\"20.0.0-nightly.20220523\": \"103.0.5044.0\",\n\t\"20.0.0-nightly.20220524\": \"103.0.5044.0\",\n\t\"20.0.0\": \"104.0.5112.65\",\n\t\"20.0.1\": \"104.0.5112.81\",\n\t\"20.0.2\": \"104.0.5112.81\",\n\t\"20.0.3\": \"104.0.5112.81\",\n\t\"20.1.0\": \"104.0.5112.102\",\n\t\"20.1.1\": \"104.0.5112.102\",\n\t\"20.1.2\": \"104.0.5112.114\",\n\t\"20.1.3\": \"104.0.5112.114\",\n\t\"20.1.4\": \"104.0.5112.114\",\n\t\"20.2.0\": \"104.0.5112.124\",\n\t\"20.3.0\": \"104.0.5112.124\",\n\t\"20.3.1\": \"104.0.5112.124\",\n\t\"20.3.2\": \"104.0.5112.124\",\n\t\"20.3.3\": \"104.0.5112.124\",\n\t\"20.3.4\": \"104.0.5112.124\",\n\t\"20.3.5\": \"104.0.5112.124\",\n\t\"20.3.6\": \"104.0.5112.124\",\n\t\"20.3.7\": \"104.0.5112.124\",\n\t\"20.3.8\": \"104.0.5112.124\",\n\t\"20.3.9\": \"104.0.5112.124\",\n\t\"20.3.10\": \"104.0.5112.124\",\n\t\"20.3.11\": \"104.0.5112.124\",\n\t\"20.3.12\": \"104.0.5112.124\",\n\t\"21.0.0-alpha.1\": \"105.0.5187.0\",\n\t\"21.0.0-alpha.2\": \"105.0.5187.0\",\n\t\"21.0.0-alpha.3\": \"105.0.5187.0\",\n\t\"21.0.0-alpha.4\": \"105.0.5187.0\",\n\t\"21.0.0-alpha.5\": \"105.0.5187.0\",\n\t\"21.0.0-alpha.6\": \"106.0.5216.0\",\n\t\"21.0.0-beta.1\": \"106.0.5216.0\",\n\t\"21.0.0-beta.2\": \"106.0.5216.0\",\n\t\"21.0.0-beta.3\": \"106.0.5216.0\",\n\t\"21.0.0-beta.4\": \"106.0.5216.0\",\n\t\"21.0.0-beta.5\": \"106.0.5216.0\",\n\t\"21.0.0-beta.6\": \"106.0.5249.40\",\n\t\"21.0.0-beta.7\": \"106.0.5249.40\",\n\t\"21.0.0-beta.8\": \"106.0.5249.40\",\n\t\"21.0.0-nightly.20220526\": \"103.0.5044.0\",\n\t\"21.0.0-nightly.20220527\": \"103.0.5044.0\",\n\t\"21.0.0-nightly.20220530\": \"103.0.5044.0\",\n\t\"21.0.0-nightly.20220531\": \"103.0.5044.0\",\n\t\"21.0.0-nightly.20220602\": \"104.0.5073.0\",\n\t\"21.0.0-nightly.20220603\": \"104.0.5073.0\",\n\t\"21.0.0-nightly.20220606\": \"104.0.5073.0\",\n\t\"21.0.0-nightly.20220607\": \"104.0.5073.0\",\n\t\"21.0.0-nightly.20220608\": \"104.0.5073.0\",\n\t\"21.0.0-nightly.20220609\": \"104.0.5073.0\",\n\t\"21.0.0-nightly.20220610\": \"104.0.5073.0\",\n\t\"21.0.0-nightly.20220613\": \"104.0.5073.0\",\n\t\"21.0.0-nightly.20220614\": \"104.0.5073.0\",\n\t\"21.0.0-nightly.20220615\": \"104.0.5073.0\",\n\t\"21.0.0-nightly.20220616\": \"104.0.5073.0\",\n\t\"21.0.0-nightly.20220617\": \"104.0.5073.0\",\n\t\"21.0.0-nightly.20220620\": \"104.0.5073.0\",\n\t\"21.0.0-nightly.20220621\": \"104.0.5073.0\",\n\t\"21.0.0-nightly.20220622\": \"104.0.5073.0\",\n\t\"21.0.0-nightly.20220623\": \"104.0.5073.0\",\n\t\"21.0.0-nightly.20220624\": \"104.0.5073.0\",\n\t\"21.0.0-nightly.20220627\": \"104.0.5073.0\",\n\t\"21.0.0-nightly.20220628\": \"105.0.5129.0\",\n\t\"21.0.0-nightly.20220629\": \"105.0.5129.0\",\n\t\"21.0.0-nightly.20220630\": \"105.0.5129.0\",\n\t\"21.0.0-nightly.20220701\": \"105.0.5129.0\",\n\t\"21.0.0-nightly.20220704\": \"105.0.5129.0\",\n\t\"21.0.0-nightly.20220705\": \"105.0.5129.0\",\n\t\"21.0.0-nightly.20220706\": \"105.0.5129.0\",\n\t\"21.0.0-nightly.20220707\": \"105.0.5129.0\",\n\t\"21.0.0-nightly.20220708\": \"105.0.5129.0\",\n\t\"21.0.0-nightly.20220711\": \"105.0.5129.0\",\n\t\"21.0.0-nightly.20220712\": \"105.0.5129.0\",\n\t\"21.0.0-nightly.20220713\": \"105.0.5129.0\",\n\t\"21.0.0-nightly.20220715\": \"105.0.5173.0\",\n\t\"21.0.0-nightly.20220718\": \"105.0.5173.0\",\n\t\"21.0.0-nightly.20220719\": \"105.0.5173.0\",\n\t\"21.0.0-nightly.20220720\": \"105.0.5187.0\",\n\t\"21.0.0-nightly.20220721\": \"105.0.5187.0\",\n\t\"21.0.0-nightly.20220722\": \"105.0.5187.0\",\n\t\"21.0.0-nightly.20220725\": \"105.0.5187.0\",\n\t\"21.0.0-nightly.20220726\": \"105.0.5187.0\",\n\t\"21.0.0-nightly.20220727\": \"105.0.5187.0\",\n\t\"21.0.0-nightly.20220728\": \"105.0.5187.0\",\n\t\"21.0.0-nightly.20220801\": \"105.0.5187.0\",\n\t\"21.0.0-nightly.20220802\": \"105.0.5187.0\",\n\t\"21.0.0\": \"106.0.5249.51\",\n\t\"21.0.1\": \"106.0.5249.61\",\n\t\"21.1.0\": \"106.0.5249.91\",\n\t\"21.1.1\": \"106.0.5249.103\",\n\t\"21.2.0\": \"106.0.5249.119\",\n\t\"21.2.1\": \"106.0.5249.165\",\n\t\"21.2.2\": \"106.0.5249.168\",\n\t\"21.2.3\": \"106.0.5249.168\",\n\t\"21.3.0\": \"106.0.5249.181\",\n\t\"21.3.1\": \"106.0.5249.181\",\n\t\"21.3.3\": \"106.0.5249.199\",\n\t\"21.3.4\": \"106.0.5249.199\",\n\t\"21.3.5\": \"106.0.5249.199\",\n\t\"21.4.0\": \"106.0.5249.199\",\n\t\"21.4.1\": \"106.0.5249.199\",\n\t\"21.4.2\": \"106.0.5249.199\",\n\t\"21.4.3\": \"106.0.5249.199\",\n\t\"22.0.0-alpha.1\": \"107.0.5286.0\",\n\t\"22.0.0-alpha.3\": \"108.0.5329.0\",\n\t\"22.0.0-alpha.4\": \"108.0.5329.0\",\n\t\"22.0.0-alpha.5\": \"108.0.5329.0\",\n\t\"22.0.0-alpha.6\": \"108.0.5329.0\",\n\t\"22.0.0-alpha.7\": \"108.0.5355.0\",\n\t\"22.0.0-alpha.8\": \"108.0.5359.10\",\n\t\"22.0.0-beta.1\": \"108.0.5359.10\",\n\t\"22.0.0-beta.2\": \"108.0.5359.10\",\n\t\"22.0.0-beta.3\": \"108.0.5359.10\",\n\t\"22.0.0-beta.4\": \"108.0.5359.29\",\n\t\"22.0.0-beta.5\": \"108.0.5359.40\",\n\t\"22.0.0-beta.6\": \"108.0.5359.40\",\n\t\"22.0.0-beta.7\": \"108.0.5359.48\",\n\t\"22.0.0-beta.8\": \"108.0.5359.48\",\n\t\"22.0.0-nightly.20220808\": \"105.0.5187.0\",\n\t\"22.0.0-nightly.20220809\": \"105.0.5187.0\",\n\t\"22.0.0-nightly.20220810\": \"105.0.5187.0\",\n\t\"22.0.0-nightly.20220811\": \"105.0.5187.0\",\n\t\"22.0.0-nightly.20220812\": \"105.0.5187.0\",\n\t\"22.0.0-nightly.20220815\": \"105.0.5187.0\",\n\t\"22.0.0-nightly.20220816\": \"105.0.5187.0\",\n\t\"22.0.0-nightly.20220817\": \"105.0.5187.0\",\n\t\"22.0.0-nightly.20220822\": \"106.0.5216.0\",\n\t\"22.0.0-nightly.20220823\": \"106.0.5216.0\",\n\t\"22.0.0-nightly.20220824\": \"106.0.5216.0\",\n\t\"22.0.0-nightly.20220825\": \"106.0.5216.0\",\n\t\"22.0.0-nightly.20220829\": \"106.0.5216.0\",\n\t\"22.0.0-nightly.20220830\": \"106.0.5216.0\",\n\t\"22.0.0-nightly.20220831\": \"106.0.5216.0\",\n\t\"22.0.0-nightly.20220901\": \"106.0.5216.0\",\n\t\"22.0.0-nightly.20220902\": \"106.0.5216.0\",\n\t\"22.0.0-nightly.20220905\": \"106.0.5216.0\",\n\t\"22.0.0-nightly.20220908\": \"107.0.5274.0\",\n\t\"22.0.0-nightly.20220909\": \"107.0.5286.0\",\n\t\"22.0.0-nightly.20220912\": \"107.0.5286.0\",\n\t\"22.0.0-nightly.20220913\": \"107.0.5286.0\",\n\t\"22.0.0-nightly.20220914\": \"107.0.5286.0\",\n\t\"22.0.0-nightly.20220915\": \"107.0.5286.0\",\n\t\"22.0.0-nightly.20220916\": \"107.0.5286.0\",\n\t\"22.0.0-nightly.20220919\": \"107.0.5286.0\",\n\t\"22.0.0-nightly.20220920\": \"107.0.5286.0\",\n\t\"22.0.0-nightly.20220921\": \"107.0.5286.0\",\n\t\"22.0.0-nightly.20220922\": \"107.0.5286.0\",\n\t\"22.0.0-nightly.20220923\": \"107.0.5286.0\",\n\t\"22.0.0-nightly.20220926\": \"107.0.5286.0\",\n\t\"22.0.0-nightly.20220927\": \"107.0.5286.0\",\n\t\"22.0.0-nightly.20220928\": \"107.0.5286.0\",\n\t\"22.0.0\": \"108.0.5359.62\",\n\t\"22.0.1\": \"108.0.5359.125\",\n\t\"22.0.2\": \"108.0.5359.179\",\n\t\"22.0.3\": \"108.0.5359.179\",\n\t\"22.1.0\": \"108.0.5359.179\",\n\t\"22.2.0\": \"108.0.5359.215\",\n\t\"22.2.1\": \"108.0.5359.215\",\n\t\"22.3.0\": \"108.0.5359.215\",\n\t\"22.3.1\": \"108.0.5359.215\",\n\t\"22.3.2\": \"108.0.5359.215\",\n\t\"22.3.3\": \"108.0.5359.215\",\n\t\"23.0.0-alpha.1\": \"110.0.5415.0\",\n\t\"23.0.0-alpha.2\": \"110.0.5451.0\",\n\t\"23.0.0-alpha.3\": \"110.0.5451.0\",\n\t\"23.0.0-beta.1\": \"110.0.5478.5\",\n\t\"23.0.0-beta.2\": \"110.0.5478.5\",\n\t\"23.0.0-beta.3\": \"110.0.5478.5\",\n\t\"23.0.0-beta.4\": \"110.0.5481.30\",\n\t\"23.0.0-beta.5\": \"110.0.5481.38\",\n\t\"23.0.0-beta.6\": \"110.0.5481.52\",\n\t\"23.0.0-beta.8\": \"110.0.5481.52\",\n\t\"23.0.0-nightly.20220929\": \"107.0.5286.0\",\n\t\"23.0.0-nightly.20220930\": \"107.0.5286.0\",\n\t\"23.0.0-nightly.20221003\": \"107.0.5286.0\",\n\t\"23.0.0-nightly.20221004\": \"108.0.5329.0\",\n\t\"23.0.0-nightly.20221005\": \"108.0.5329.0\",\n\t\"23.0.0-nightly.20221006\": \"108.0.5329.0\",\n\t\"23.0.0-nightly.20221007\": \"108.0.5329.0\",\n\t\"23.0.0-nightly.20221010\": \"108.0.5329.0\",\n\t\"23.0.0-nightly.20221011\": \"108.0.5329.0\",\n\t\"23.0.0-nightly.20221012\": \"108.0.5329.0\",\n\t\"23.0.0-nightly.20221013\": \"108.0.5329.0\",\n\t\"23.0.0-nightly.20221014\": \"108.0.5329.0\",\n\t\"23.0.0-nightly.20221017\": \"108.0.5329.0\",\n\t\"23.0.0-nightly.20221018\": \"108.0.5355.0\",\n\t\"23.0.0-nightly.20221019\": \"108.0.5355.0\",\n\t\"23.0.0-nightly.20221020\": \"108.0.5355.0\",\n\t\"23.0.0-nightly.20221021\": \"108.0.5355.0\",\n\t\"23.0.0-nightly.20221024\": \"108.0.5355.0\",\n\t\"23.0.0-nightly.20221026\": \"108.0.5355.0\",\n\t\"23.0.0-nightly.20221027\": \"109.0.5382.0\",\n\t\"23.0.0-nightly.20221028\": \"109.0.5382.0\",\n\t\"23.0.0-nightly.20221031\": \"109.0.5382.0\",\n\t\"23.0.0-nightly.20221101\": \"109.0.5382.0\",\n\t\"23.0.0-nightly.20221102\": \"109.0.5382.0\",\n\t\"23.0.0-nightly.20221103\": \"109.0.5382.0\",\n\t\"23.0.0-nightly.20221104\": \"109.0.5382.0\",\n\t\"23.0.0-nightly.20221107\": \"109.0.5382.0\",\n\t\"23.0.0-nightly.20221108\": \"109.0.5382.0\",\n\t\"23.0.0-nightly.20221109\": \"109.0.5382.0\",\n\t\"23.0.0-nightly.20221110\": \"109.0.5382.0\",\n\t\"23.0.0-nightly.20221111\": \"109.0.5382.0\",\n\t\"23.0.0-nightly.20221114\": \"109.0.5382.0\",\n\t\"23.0.0-nightly.20221115\": \"109.0.5382.0\",\n\t\"23.0.0-nightly.20221116\": \"109.0.5382.0\",\n\t\"23.0.0-nightly.20221117\": \"109.0.5382.0\",\n\t\"23.0.0-nightly.20221118\": \"110.0.5415.0\",\n\t\"23.0.0-nightly.20221121\": \"110.0.5415.0\",\n\t\"23.0.0-nightly.20221122\": \"110.0.5415.0\",\n\t\"23.0.0-nightly.20221123\": \"110.0.5415.0\",\n\t\"23.0.0-nightly.20221124\": \"110.0.5415.0\",\n\t\"23.0.0-nightly.20221125\": \"110.0.5415.0\",\n\t\"23.0.0-nightly.20221128\": \"110.0.5415.0\",\n\t\"23.0.0-nightly.20221129\": \"110.0.5415.0\",\n\t\"23.0.0-nightly.20221130\": \"110.0.5415.0\",\n\t\"23.0.0\": \"110.0.5481.77\",\n\t\"23.1.0\": \"110.0.5481.100\",\n\t\"23.1.1\": \"110.0.5481.104\",\n\t\"23.1.2\": \"110.0.5481.177\",\n\t\"23.1.3\": \"110.0.5481.179\",\n\t\"23.1.4\": \"110.0.5481.192\",\n\t\"24.0.0-alpha.1\": \"111.0.5560.0\",\n\t\"24.0.0-alpha.2\": \"111.0.5560.0\",\n\t\"24.0.0-alpha.3\": \"111.0.5560.0\",\n\t\"24.0.0-alpha.4\": \"111.0.5560.0\",\n\t\"24.0.0-alpha.5\": \"111.0.5560.0\",\n\t\"24.0.0-alpha.6\": \"111.0.5560.0\",\n\t\"24.0.0-alpha.7\": \"111.0.5560.0\",\n\t\"24.0.0-beta.1\": \"111.0.5563.50\",\n\t\"24.0.0-beta.2\": \"111.0.5563.50\",\n\t\"24.0.0-beta.3\": \"112.0.5615.20\",\n\t\"24.0.0-nightly.20221201\": \"110.0.5415.0\",\n\t\"24.0.0-nightly.20221202\": \"110.0.5415.0\",\n\t\"24.0.0-nightly.20221205\": \"110.0.5415.0\",\n\t\"24.0.0-nightly.20221206\": \"110.0.5451.0\",\n\t\"24.0.0-nightly.20221207\": \"110.0.5451.0\",\n\t\"24.0.0-nightly.20221208\": \"110.0.5451.0\",\n\t\"24.0.0-nightly.20221213\": \"110.0.5451.0\",\n\t\"24.0.0-nightly.20221214\": \"110.0.5451.0\",\n\t\"24.0.0-nightly.20221215\": \"110.0.5451.0\",\n\t\"24.0.0-nightly.20221216\": \"110.0.5451.0\",\n\t\"24.0.0-nightly.20230109\": \"111.0.5518.0\",\n\t\"24.0.0-nightly.20230110\": \"111.0.5518.0\",\n\t\"24.0.0-nightly.20230111\": \"111.0.5518.0\",\n\t\"24.0.0-nightly.20230112\": \"111.0.5518.0\",\n\t\"24.0.0-nightly.20230113\": \"111.0.5518.0\",\n\t\"24.0.0-nightly.20230116\": \"111.0.5518.0\",\n\t\"24.0.0-nightly.20230117\": \"111.0.5518.0\",\n\t\"24.0.0-nightly.20230118\": \"111.0.5518.0\",\n\t\"24.0.0-nightly.20230119\": \"111.0.5518.0\",\n\t\"24.0.0-nightly.20230120\": \"111.0.5518.0\",\n\t\"24.0.0-nightly.20230123\": \"111.0.5518.0\",\n\t\"24.0.0-nightly.20230124\": \"111.0.5518.0\",\n\t\"24.0.0-nightly.20230125\": \"111.0.5518.0\",\n\t\"24.0.0-nightly.20230126\": \"111.0.5518.0\",\n\t\"24.0.0-nightly.20230127\": \"111.0.5518.0\",\n\t\"24.0.0-nightly.20230131\": \"111.0.5518.0\",\n\t\"24.0.0-nightly.20230201\": \"111.0.5518.0\",\n\t\"24.0.0-nightly.20230202\": \"111.0.5518.0\",\n\t\"24.0.0-nightly.20230203\": \"111.0.5560.0\",\n\t\"24.0.0-nightly.20230206\": \"111.0.5560.0\",\n\t\"24.0.0-nightly.20230207\": \"111.0.5560.0\",\n\t\"24.0.0-nightly.20230208\": \"111.0.5560.0\",\n\t\"24.0.0-nightly.20230209\": \"111.0.5560.0\",\n\t\"25.0.0-nightly.20230210\": \"111.0.5560.0\",\n\t\"25.0.0-nightly.20230214\": \"111.0.5560.0\",\n\t\"25.0.0-nightly.20230215\": \"111.0.5560.0\",\n\t\"25.0.0-nightly.20230216\": \"111.0.5560.0\",\n\t\"25.0.0-nightly.20230217\": \"111.0.5560.0\",\n\t\"25.0.0-nightly.20230220\": \"111.0.5560.0\",\n\t\"25.0.0-nightly.20230221\": \"111.0.5560.0\",\n\t\"25.0.0-nightly.20230222\": \"111.0.5560.0\",\n\t\"25.0.0-nightly.20230223\": \"111.0.5560.0\",\n\t\"25.0.0-nightly.20230224\": \"111.0.5560.0\",\n\t\"25.0.0-nightly.20230227\": \"111.0.5560.0\",\n\t\"25.0.0-nightly.20230228\": \"111.0.5560.0\",\n\t\"25.0.0-nightly.20230301\": \"111.0.5560.0\",\n\t\"25.0.0-nightly.20230302\": \"111.0.5560.0\",\n\t\"25.0.0-nightly.20230303\": \"111.0.5560.0\",\n\t\"25.0.0-nightly.20230306\": \"111.0.5560.0\",\n\t\"25.0.0-nightly.20230307\": \"111.0.5560.0\",\n\t\"25.0.0-nightly.20230308\": \"111.0.5560.0\",\n\t\"25.0.0-nightly.20230309\": \"111.0.5560.0\",\n\t\"25.0.0-nightly.20230310\": \"111.0.5560.0\",\n\t\"25.0.0-nightly.20230314\": \"113.0.5636.0\",\n\t\"25.0.0-nightly.20230315\": \"113.0.5651.0\",\n\t\"25.0.0-nightly.20230317\": \"113.0.5653.0\"\n};/CHANGELOG.md\u0001(v1.3.0\n  * Additionally include chromium to electron mappings\n\nv1.2.0\n  * versions and full-versions are now separately importable.\n\nv1.1.0\n  * Both electronToChromium and electronToBrowserList now can accept strings as well as numbers.\n\nv1.0.1\n  Update documentation\n\nv1.0.0\n  Inititial release\n/package.json\u0004\u001e{\n  \"name\": \"electron-to-chromium\",\n  \"version\": \"1.4.333\",\n  \"description\": \"Provides a list of electron-to-chromium version mappings\",\n  \"main\": \"index.js\",\n  \"files\": [\n    \"versions.js\",\n    \"full-versions.js\",\n    \"chromium-versions.js\",\n    \"full-chromium-versions.js\",\n    \"versions.json\",\n    \"full-versions.json\",\n    \"chromium-versions.json\",\n    \"full-chromium-versions.json\",\n    \"LICENSE\"\n  ],\n  \"scripts\": {\n    \"build\": \"node build.mjs\",\n    \"update\": \"node automated-update.js\",\n    \"test\": \"nyc ava --verbose\",\n    \"report\": \"nyc report --reporter=text-lcov > coverage.lcov && codecov\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/kilian/electron-to-chromium/\"\n  },\n  \"keywords\": [\n    \"electron\",\n    \"chrome\",\n    \"chromium\",\n    \"browserslist\",\n    \"browserlist\"\n  ],\n  \"author\": \"Kilian Valkhof\",\n  \"license\": \"ISC\",\n  \"devDependencies\": {\n    \"ava\": \"^5.1.1\",\n    \"codecov\": \"^3.8.2\",\n    \"compare-versions\": \"^6.0.0-rc.1\",\n    \"node-fetch\": \"^3.3.0\",\n    \"nyc\": \"^15.1.0\",\n    \"shelljs\": \"^0.8.5\"\n  }\n}\n/LICENSE\u0002Copyright 2018 Kilian Valkhof\n\nPermission 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.\n\nTHE 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.\n/index.js\u0004var versions = require('./versions');\nvar fullVersions = require('./full-versions');\nvar chromiumVersions = require('./chromium-versions');\nvar fullChromiumVersions = require('./full-chromium-versions');\n\nvar electronToChromium = function (query) {\n  var number = getQueryString(query);\n  return number.split('.').length > 2 ? fullVersions[number] : versions[number] || undefined;\n};\n\nvar chromiumToElectron = function (query) {\n  var number = getQueryString(query);\n  return number.split('.').length > 2 ? fullChromiumVersions[number] : chromiumVersions[number] || undefined;\n};\n\nvar electronToBrowserList = function (query) {\n  var number = getQueryString(query);\n  return versions[number] ? \"Chrome >= \" + versions[number] : undefined;\n};\n\nvar getQueryString = function (query) {\n  var number = query;\n  if (query === 1) { number = \"1.0\" }\n  if (typeof query === 'number') { number += ''; }\n  return number;\n};\n\nmodule.exports = {\n  versions: versions,\n  fullVersions: fullVersions,\n  chromiumVersions: chromiumVersions,\n  fullChromiumVersions: fullChromiumVersions,\n  electronToChromium: electronToChromium,\n  electronToBrowserList: electronToBrowserList,\n  chromiumToElectron: chromiumToElectron\n};\n/versions.js\u0006module.exports = {\n\t\"0.20\": \"39\",\n\t\"0.21\": \"41\",\n\t\"0.22\": \"41\",\n\t\"0.23\": \"41\",\n\t\"0.24\": \"41\",\n\t\"0.25\": \"42\",\n\t\"0.26\": \"42\",\n\t\"0.27\": \"43\",\n\t\"0.28\": \"43\",\n\t\"0.29\": \"43\",\n\t\"0.30\": \"44\",\n\t\"0.31\": \"45\",\n\t\"0.32\": \"45\",\n\t\"0.33\": \"45\",\n\t\"0.34\": \"45\",\n\t\"0.35\": \"45\",\n\t\"0.36\": \"47\",\n\t\"0.37\": \"49\",\n\t\"1.0\": \"49\",\n\t\"1.1\": \"50\",\n\t\"1.2\": \"51\",\n\t\"1.3\": \"52\",\n\t\"1.4\": \"53\",\n\t\"1.5\": \"54\",\n\t\"1.6\": \"56\",\n\t\"1.7\": \"58\",\n\t\"1.8\": \"59\",\n\t\"2.0\": \"61\",\n\t\"2.1\": \"61\",\n\t\"3.0\": \"66\",\n\t\"3.1\": \"66\",\n\t\"4.0\": \"69\",\n\t\"4.1\": \"69\",\n\t\"4.2\": \"69\",\n\t\"5.0\": \"73\",\n\t\"6.0\": \"76\",\n\t\"6.1\": \"76\",\n\t\"7.0\": \"78\",\n\t\"7.1\": \"78\",\n\t\"7.2\": \"78\",\n\t\"7.3\": \"78\",\n\t\"8.0\": \"80\",\n\t\"8.1\": \"80\",\n\t\"8.2\": \"80\",\n\t\"8.3\": \"80\",\n\t\"8.4\": \"80\",\n\t\"8.5\": \"80\",\n\t\"9.0\": \"83\",\n\t\"9.1\": \"83\",\n\t\"9.2\": \"83\",\n\t\"9.3\": \"83\",\n\t\"9.4\": \"83\",\n\t\"10.0\": \"85\",\n\t\"10.1\": \"85\",\n\t\"10.2\": \"85\",\n\t\"10.3\": \"85\",\n\t\"10.4\": \"85\",\n\t\"11.0\": \"87\",\n\t\"11.1\": \"87\",\n\t\"11.2\": \"87\",\n\t\"11.3\": \"87\",\n\t\"11.4\": \"87\",\n\t\"11.5\": \"87\",\n\t\"12.0\": \"89\",\n\t\"12.1\": \"89\",\n\t\"12.2\": \"89\",\n\t\"13.0\": \"91\",\n\t\"13.1\": \"91\",\n\t\"13.2\": \"91\",\n\t\"13.3\": \"91\",\n\t\"13.4\": \"91\",\n\t\"13.5\": \"91\",\n\t\"13.6\": \"91\",\n\t\"14.0\": \"93\",\n\t\"14.1\": \"93\",\n\t\"14.2\": \"93\",\n\t\"15.0\": \"94\",\n\t\"15.1\": \"94\",\n\t\"15.2\": \"94\",\n\t\"15.3\": \"94\",\n\t\"15.4\": \"94\",\n\t\"15.5\": \"94\",\n\t\"16.0\": \"96\",\n\t\"16.1\": \"96\",\n\t\"16.2\": \"96\",\n\t\"17.0\": \"98\",\n\t\"17.1\": \"98\",\n\t\"17.2\": \"98\",\n\t\"17.3\": \"98\",\n\t\"17.4\": \"98\",\n\t\"18.0\": \"100\",\n\t\"18.1\": \"100\",\n\t\"18.2\": \"100\",\n\t\"18.3\": \"100\",\n\t\"19.0\": \"102\",\n\t\"19.1\": \"102\",\n\t\"20.0\": \"104\",\n\t\"20.1\": \"104\",\n\t\"20.2\": \"104\",\n\t\"20.3\": \"104\",\n\t\"21.0\": \"106\",\n\t\"21.1\": \"106\",\n\t\"21.2\": \"106\",\n\t\"21.3\": \"106\",\n\t\"21.4\": \"106\",\n\t\"22.0\": \"108\",\n\t\"22.1\": \"108\",\n\t\"22.2\": \"108\",\n\t\"22.3\": \"108\",\n\t\"23.0\": \"110\",\n\t\"23.1\": \"110\",\n\t\"24.0\": \"112\"\n};/versions.json\u00055{\"0.20\":\"39\",\"0.21\":\"41\",\"0.22\":\"41\",\"0.23\":\"41\",\"0.24\":\"41\",\"0.25\":\"42\",\"0.26\":\"42\",\"0.27\":\"43\",\"0.28\":\"43\",\"0.29\":\"43\",\"0.30\":\"44\",\"0.31\":\"45\",\"0.32\":\"45\",\"0.33\":\"45\",\"0.34\":\"45\",\"0.35\":\"45\",\"0.36\":\"47\",\"0.37\":\"49\",\"1.0\":\"49\",\"1.1\":\"50\",\"1.2\":\"51\",\"1.3\":\"52\",\"1.4\":\"53\",\"1.5\":\"54\",\"1.6\":\"56\",\"1.7\":\"58\",\"1.8\":\"59\",\"2.0\":\"61\",\"2.1\":\"61\",\"3.0\":\"66\",\"3.1\":\"66\",\"4.0\":\"69\",\"4.1\":\"69\",\"4.2\":\"69\",\"5.0\":\"73\",\"6.0\":\"76\",\"6.1\":\"76\",\"7.0\":\"78\",\"7.1\":\"78\",\"7.2\":\"78\",\"7.3\":\"78\",\"8.0\":\"80\",\"8.1\":\"80\",\"8.2\":\"80\",\"8.3\":\"80\",\"8.4\":\"80\",\"8.5\":\"80\",\"9.0\":\"83\",\"9.1\":\"83\",\"9.2\":\"83\",\"9.3\":\"83\",\"9.4\":\"83\",\"10.0\":\"85\",\"10.1\":\"85\",\"10.2\":\"85\",\"10.3\":\"85\",\"10.4\":\"85\",\"11.0\":\"87\",\"11.1\":\"87\",\"11.2\":\"87\",\"11.3\":\"87\",\"11.4\":\"87\",\"11.5\":\"87\",\"12.0\":\"89\",\"12.1\":\"89\",\"12.2\":\"89\",\"13.0\":\"91\",\"13.1\":\"91\",\"13.2\":\"91\",\"13.3\":\"91\",\"13.4\":\"91\",\"13.5\":\"91\",\"13.6\":\"91\",\"14.0\":\"93\",\"14.1\":\"93\",\"14.2\":\"93\",\"15.0\":\"94\",\"15.1\":\"94\",\"15.2\":\"94\",\"15.3\":\"94\",\"15.4\":\"94\",\"15.5\":\"94\",\"16.0\":\"96\",\"16.1\":\"96\",\"16.2\":\"96\",\"17.0\":\"98\",\"17.1\":\"98\",\"17.2\":\"98\",\"17.3\":\"98\",\"17.4\":\"98\",\"18.0\":\"100\",\"18.1\":\"100\",\"18.2\":\"100\",\"18.3\":\"100\",\"19.0\":\"102\",\"19.1\":\"102\",\"20.0\":\"104\",\"20.1\":\"104\",\"20.2\":\"104\",\"20.3\":\"104\",\"21.0\":\"106\",\"21.1\":\"106\",\"21.2\":\"106\",\"21.3\":\"106\",\"21.4\":\"106\",\"22.0\":\"108\",\"22.1\":\"108\",\"22.2\":\"108\",\"22.3\":\"108\",\"23.0\":\"110\",\"23.1\":\"110\",\"24.0\":\"112\"}"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/ZXN0cmF2ZXJzZUA1LjMuMA==",
    "content": "/package.json\u0003{\n  \"name\": \"estraverse\",\n  \"description\": \"ECMAScript JS AST traversal functions\",\n  \"homepage\": \"https://github.com/estools/estraverse\",\n  \"main\": \"estraverse.js\",\n  \"version\": \"5.3.0\",\n  \"engines\": {\n    \"node\": \">=4.0\"\n  },\n  \"maintainers\": [\n    {\n      \"name\": \"Yusuke Suzuki\",\n      \"email\": \"utatane.tea@gmail.com\",\n      \"web\": \"http://github.com/Constellation\"\n    }\n  ],\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"http://github.com/estools/estraverse.git\"\n  },\n  \"devDependencies\": {\n    \"babel-preset-env\": \"^1.6.1\",\n    \"babel-register\": \"^6.3.13\",\n    \"chai\": \"^2.1.1\",\n    \"espree\": \"^1.11.0\",\n    \"gulp\": \"^3.8.10\",\n    \"gulp-bump\": \"^0.2.2\",\n    \"gulp-filter\": \"^2.0.0\",\n    \"gulp-git\": \"^1.0.1\",\n    \"gulp-tag-version\": \"^1.3.0\",\n    \"jshint\": \"^2.5.6\",\n    \"mocha\": \"^2.1.0\"\n  },\n  \"license\": \"BSD-2-Clause\",\n  \"scripts\": {\n    \"test\": \"npm run-script lint && npm run-script unit-test\",\n    \"lint\": \"jshint estraverse.js\",\n    \"unit-test\": \"mocha --compilers js:babel-register\"\n  }\n}\n/README.md\u0013\u0001### Estraverse [![Build Status](https://secure.travis-ci.org/estools/estraverse.svg)](http://travis-ci.org/estools/estraverse)\n\nEstraverse ([estraverse](http://github.com/estools/estraverse)) is\n[ECMAScript](http://www.ecma-international.org/publications/standards/Ecma-262.htm)\ntraversal functions from [esmangle project](http://github.com/estools/esmangle).\n\n### Documentation\n\nYou can find usage docs at [wiki page](https://github.com/estools/estraverse/wiki/Usage).\n\n### Example Usage\n\nThe following code will output all variables declared at the root of a file.\n\n```javascript\nestraverse.traverse(ast, {\n    enter: function (node, parent) {\n        if (node.type == 'FunctionExpression' || node.type == 'FunctionDeclaration')\n            return estraverse.VisitorOption.Skip;\n    },\n    leave: function (node, parent) {\n        if (node.type == 'VariableDeclarator')\n          console.log(node.id.name);\n    }\n});\n```\n\nWe can use `this.skip`, `this.remove` and `this.break` functions instead of using Skip, Remove and Break.\n\n```javascript\nestraverse.traverse(ast, {\n    enter: function (node) {\n        this.break();\n    }\n});\n```\n\nAnd estraverse provides `estraverse.replace` function. When returning node from `enter`/`leave`, current node is replaced with it.\n\n```javascript\nresult = estraverse.replace(tree, {\n    enter: function (node) {\n        // Replace it with replaced.\n        if (node.type === 'Literal')\n            return replaced;\n    }\n});\n```\n\nBy passing `visitor.keys` mapping, we can extend estraverse traversing functionality.\n\n```javascript\n// This tree contains a user-defined `TestExpression` node.\nvar tree = {\n    type: 'TestExpression',\n\n    // This 'argument' is the property containing the other **node**.\n    argument: {\n        type: 'Literal',\n        value: 20\n    },\n\n    // This 'extended' is the property not containing the other **node**.\n    extended: true\n};\nestraverse.traverse(tree, {\n    enter: function (node) { },\n\n    // Extending the existing traversing rules.\n    keys: {\n        // TargetNodeName: [ 'keys', 'containing', 'the', 'other', '**node**' ]\n        TestExpression: ['argument']\n    }\n});\n```\n\nBy passing `visitor.fallback` option, we can control the behavior when encountering unknown nodes.\n\n```javascript\n// This tree contains a user-defined `TestExpression` node.\nvar tree = {\n    type: 'TestExpression',\n\n    // This 'argument' is the property containing the other **node**.\n    argument: {\n        type: 'Literal',\n        value: 20\n    },\n\n    // This 'extended' is the property not containing the other **node**.\n    extended: true\n};\nestraverse.traverse(tree, {\n    enter: function (node) { },\n\n    // Iterating the child **nodes** of unknown nodes.\n    fallback: 'iteration'\n});\n```\n\nWhen `visitor.fallback` is a function, we can determine which keys to visit on each node.\n\n```javascript\n// This tree contains a user-defined `TestExpression` node.\nvar tree = {\n    type: 'TestExpression',\n\n    // This 'argument' is the property containing the other **node**.\n    argument: {\n        type: 'Literal',\n        value: 20\n    },\n\n    // This 'extended' is the property not containing the other **node**.\n    extended: true\n};\nestraverse.traverse(tree, {\n    enter: function (node) { },\n\n    // Skip the `argument` property of each node\n    fallback: function(node) {\n        return Object.keys(node).filter(function(key) {\n            return key !== 'argument';\n        });\n    }\n});\n```\n\n### License\n\nCopyright (C) 2012-2016 [Yusuke Suzuki](http://github.com/Constellation)\n (twitter: [@Constellation](http://twitter.com/Constellation)) and other contributors.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n  * Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in the\n    documentation and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\nDIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\nON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\nTHIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n/.jshintrc{\n  \"curly\": true,\n  \"eqeqeq\": true,\n  \"immed\": true,\n  \"eqnull\": true,\n  \"latedef\": true,\n  \"noarg\": true,\n  \"noempty\": true,\n  \"quotmark\": \"single\",\n  \"undef\": true,\n  \"unused\": true,\n  \"strict\": true,\n  \"trailing\": true,\n\n  \"node\": true\n}\n/LICENSE.BSD\u0004Redistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n  * Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in the\n    documentation and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\nDIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\nON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\nTHIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n/estraverse.jsiM/*\n  Copyright (C) 2012-2013 Yusuke Suzuki <utatane.tea@gmail.com>\n  Copyright (C) 2012 Ariya Hidayat <ariya.hidayat@gmail.com>\n\n  Redistribution and use in source and binary forms, with or without\n  modification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n  ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n/*jslint vars:false, bitwise:true*/\n/*jshint indent:4*/\n/*global exports:true*/\n(function clone(exports) {\n    'use strict';\n\n    var Syntax,\n        VisitorOption,\n        VisitorKeys,\n        BREAK,\n        SKIP,\n        REMOVE;\n\n    function deepCopy(obj) {\n        var ret = {}, key, val;\n        for (key in obj) {\n            if (obj.hasOwnProperty(key)) {\n                val = obj[key];\n                if (typeof val === 'object' && val !== null) {\n                    ret[key] = deepCopy(val);\n                } else {\n                    ret[key] = val;\n                }\n            }\n        }\n        return ret;\n    }\n\n    // based on LLVM libc++ upper_bound / lower_bound\n    // MIT License\n\n    function upperBound(array, func) {\n        var diff, len, i, current;\n\n        len = array.length;\n        i = 0;\n\n        while (len) {\n            diff = len >>> 1;\n            current = i + diff;\n            if (func(array[current])) {\n                len = diff;\n            } else {\n                i = current + 1;\n                len -= diff + 1;\n            }\n        }\n        return i;\n    }\n\n    Syntax = {\n        AssignmentExpression: 'AssignmentExpression',\n        AssignmentPattern: 'AssignmentPattern',\n        ArrayExpression: 'ArrayExpression',\n        ArrayPattern: 'ArrayPattern',\n        ArrowFunctionExpression: 'ArrowFunctionExpression',\n        AwaitExpression: 'AwaitExpression', // CAUTION: It's deferred to ES7.\n        BlockStatement: 'BlockStatement',\n        BinaryExpression: 'BinaryExpression',\n        BreakStatement: 'BreakStatement',\n        CallExpression: 'CallExpression',\n        CatchClause: 'CatchClause',\n        ChainExpression: 'ChainExpression',\n        ClassBody: 'ClassBody',\n        ClassDeclaration: 'ClassDeclaration',\n        ClassExpression: 'ClassExpression',\n        ComprehensionBlock: 'ComprehensionBlock',  // CAUTION: It's deferred to ES7.\n        ComprehensionExpression: 'ComprehensionExpression',  // CAUTION: It's deferred to ES7.\n        ConditionalExpression: 'ConditionalExpression',\n        ContinueStatement: 'ContinueStatement',\n        DebuggerStatement: 'DebuggerStatement',\n        DirectiveStatement: 'DirectiveStatement',\n        DoWhileStatement: 'DoWhileStatement',\n        EmptyStatement: 'EmptyStatement',\n        ExportAllDeclaration: 'ExportAllDeclaration',\n        ExportDefaultDeclaration: 'ExportDefaultDeclaration',\n        ExportNamedDeclaration: 'ExportNamedDeclaration',\n        ExportSpecifier: 'ExportSpecifier',\n        ExpressionStatement: 'ExpressionStatement',\n        ForStatement: 'ForStatement',\n        ForInStatement: 'ForInStatement',\n        ForOfStatement: 'ForOfStatement',\n        FunctionDeclaration: 'FunctionDeclaration',\n        FunctionExpression: 'FunctionExpression',\n        GeneratorExpression: 'GeneratorExpression',  // CAUTION: It's deferred to ES7.\n        Identifier: 'Identifier',\n        IfStatement: 'IfStatement',\n        ImportExpression: 'ImportExpression',\n        ImportDeclaration: 'ImportDeclaration',\n        ImportDefaultSpecifier: 'ImportDefaultSpecifier',\n        ImportNamespaceSpecifier: 'ImportNamespaceSpecifier',\n        ImportSpecifier: 'ImportSpecifier',\n        Literal: 'Literal',\n        LabeledStatement: 'LabeledStatement',\n        LogicalExpression: 'LogicalExpression',\n        MemberExpression: 'MemberExpression',\n        MetaProperty: 'MetaProperty',\n        MethodDefinition: 'MethodDefinition',\n        ModuleSpecifier: 'ModuleSpecifier',\n        NewExpression: 'NewExpression',\n        ObjectExpression: 'ObjectExpression',\n        ObjectPattern: 'ObjectPattern',\n        PrivateIdentifier: 'PrivateIdentifier',\n        Program: 'Program',\n        Property: 'Property',\n        PropertyDefinition: 'PropertyDefinition',\n        RestElement: 'RestElement',\n        ReturnStatement: 'ReturnStatement',\n        SequenceExpression: 'SequenceExpression',\n        SpreadElement: 'SpreadElement',\n        Super: 'Super',\n        SwitchStatement: 'SwitchStatement',\n        SwitchCase: 'SwitchCase',\n        TaggedTemplateExpression: 'TaggedTemplateExpression',\n        TemplateElement: 'TemplateElement',\n        TemplateLiteral: 'TemplateLiteral',\n        ThisExpression: 'ThisExpression',\n        ThrowStatement: 'ThrowStatement',\n        TryStatement: 'TryStatement',\n        UnaryExpression: 'UnaryExpression',\n        UpdateExpression: 'UpdateExpression',\n        VariableDeclaration: 'VariableDeclaration',\n        VariableDeclarator: 'VariableDeclarator',\n        WhileStatement: 'WhileStatement',\n        WithStatement: 'WithStatement',\n        YieldExpression: 'YieldExpression'\n    };\n\n    VisitorKeys = {\n        AssignmentExpression: ['left', 'right'],\n        AssignmentPattern: ['left', 'right'],\n        ArrayExpression: ['elements'],\n        ArrayPattern: ['elements'],\n        ArrowFunctionExpression: ['params', 'body'],\n        AwaitExpression: ['argument'], // CAUTION: It's deferred to ES7.\n        BlockStatement: ['body'],\n        BinaryExpression: ['left', 'right'],\n        BreakStatement: ['label'],\n        CallExpression: ['callee', 'arguments'],\n        CatchClause: ['param', 'body'],\n        ChainExpression: ['expression'],\n        ClassBody: ['body'],\n        ClassDeclaration: ['id', 'superClass', 'body'],\n        ClassExpression: ['id', 'superClass', 'body'],\n        ComprehensionBlock: ['left', 'right'],  // CAUTION: It's deferred to ES7.\n        ComprehensionExpression: ['blocks', 'filter', 'body'],  // CAUTION: It's deferred to ES7.\n        ConditionalExpression: ['test', 'consequent', 'alternate'],\n        ContinueStatement: ['label'],\n        DebuggerStatement: [],\n        DirectiveStatement: [],\n        DoWhileStatement: ['body', 'test'],\n        EmptyStatement: [],\n        ExportAllDeclaration: ['source'],\n        ExportDefaultDeclaration: ['declaration'],\n        ExportNamedDeclaration: ['declaration', 'specifiers', 'source'],\n        ExportSpecifier: ['exported', 'local'],\n        ExpressionStatement: ['expression'],\n        ForStatement: ['init', 'test', 'update', 'body'],\n        ForInStatement: ['left', 'right', 'body'],\n        ForOfStatement: ['left', 'right', 'body'],\n        FunctionDeclaration: ['id', 'params', 'body'],\n        FunctionExpression: ['id', 'params', 'body'],\n        GeneratorExpression: ['blocks', 'filter', 'body'],  // CAUTION: It's deferred to ES7.\n        Identifier: [],\n        IfStatement: ['test', 'consequent', 'alternate'],\n        ImportExpression: ['source'],\n        ImportDeclaration: ['specifiers', 'source'],\n        ImportDefaultSpecifier: ['local'],\n        ImportNamespaceSpecifier: ['local'],\n        ImportSpecifier: ['imported', 'local'],\n        Literal: [],\n        LabeledStatement: ['label', 'body'],\n        LogicalExpression: ['left', 'right'],\n        MemberExpression: ['object', 'property'],\n        MetaProperty: ['meta', 'property'],\n        MethodDefinition: ['key', 'value'],\n        ModuleSpecifier: [],\n        NewExpression: ['callee', 'arguments'],\n        ObjectExpression: ['properties'],\n        ObjectPattern: ['properties'],\n        PrivateIdentifier: [],\n        Program: ['body'],\n        Property: ['key', 'value'],\n        PropertyDefinition: ['key', 'value'],\n        RestElement: [ 'argument' ],\n        ReturnStatement: ['argument'],\n        SequenceExpression: ['expressions'],\n        SpreadElement: ['argument'],\n        Super: [],\n        SwitchStatement: ['discriminant', 'cases'],\n        SwitchCase: ['test', 'consequent'],\n        TaggedTemplateExpression: ['tag', 'quasi'],\n        TemplateElement: [],\n        TemplateLiteral: ['quasis', 'expressions'],\n        ThisExpression: [],\n        ThrowStatement: ['argument'],\n        TryStatement: ['block', 'handler', 'finalizer'],\n        UnaryExpression: ['argument'],\n        UpdateExpression: ['argument'],\n        VariableDeclaration: ['declarations'],\n        VariableDeclarator: ['id', 'init'],\n        WhileStatement: ['test', 'body'],\n        WithStatement: ['object', 'body'],\n        YieldExpression: ['argument']\n    };\n\n    // unique id\n    BREAK = {};\n    SKIP = {};\n    REMOVE = {};\n\n    VisitorOption = {\n        Break: BREAK,\n        Skip: SKIP,\n        Remove: REMOVE\n    };\n\n    function Reference(parent, key) {\n        this.parent = parent;\n        this.key = key;\n    }\n\n    Reference.prototype.replace = function replace(node) {\n        this.parent[this.key] = node;\n    };\n\n    Reference.prototype.remove = function remove() {\n        if (Array.isArray(this.parent)) {\n            this.parent.splice(this.key, 1);\n            return true;\n        } else {\n            this.replace(null);\n            return false;\n        }\n    };\n\n    function Element(node, path, wrap, ref) {\n        this.node = node;\n        this.path = path;\n        this.wrap = wrap;\n        this.ref = ref;\n    }\n\n    function Controller() { }\n\n    // API:\n    // return property path array from root to current node\n    Controller.prototype.path = function path() {\n        var i, iz, j, jz, result, element;\n\n        function addToPath(result, path) {\n            if (Array.isArray(path)) {\n                for (j = 0, jz = path.length; j < jz; ++j) {\n                    result.push(path[j]);\n                }\n            } else {\n                result.push(path);\n            }\n        }\n\n        // root node\n        if (!this.__current.path) {\n            return null;\n        }\n\n        // first node is sentinel, second node is root element\n        result = [];\n        for (i = 2, iz = this.__leavelist.length; i < iz; ++i) {\n            element = this.__leavelist[i];\n            addToPath(result, element.path);\n        }\n        addToPath(result, this.__current.path);\n        return result;\n    };\n\n    // API:\n    // return type of current node\n    Controller.prototype.type = function () {\n        var node = this.current();\n        return node.type || this.__current.wrap;\n    };\n\n    // API:\n    // return array of parent elements\n    Controller.prototype.parents = function parents() {\n        var i, iz, result;\n\n        // first node is sentinel\n        result = [];\n        for (i = 1, iz = this.__leavelist.length; i < iz; ++i) {\n            result.push(this.__leavelist[i].node);\n        }\n\n        return result;\n    };\n\n    // API:\n    // return current node\n    Controller.prototype.current = function current() {\n        return this.__current.node;\n    };\n\n    Controller.prototype.__execute = function __execute(callback, element) {\n        var previous, result;\n\n        result = undefined;\n\n        previous  = this.__current;\n        this.__current = element;\n        this.__state = null;\n        if (callback) {\n            result = callback.call(this, element.node, this.__leavelist[this.__leavelist.length - 1].node);\n        }\n        this.__current = previous;\n\n        return result;\n    };\n\n    // API:\n    // notify control skip / break\n    Controller.prototype.notify = function notify(flag) {\n        this.__state = flag;\n    };\n\n    // API:\n    // skip child nodes of current node\n    Controller.prototype.skip = function () {\n        this.notify(SKIP);\n    };\n\n    // API:\n    // break traversals\n    Controller.prototype['break'] = function () {\n        this.notify(BREAK);\n    };\n\n    // API:\n    // remove node\n    Controller.prototype.remove = function () {\n        this.notify(REMOVE);\n    };\n\n    Controller.prototype.__initialize = function(root, visitor) {\n        this.visitor = visitor;\n        this.root = root;\n        this.__worklist = [];\n        this.__leavelist = [];\n        this.__current = null;\n        this.__state = null;\n        this.__fallback = null;\n        if (visitor.fallback === 'iteration') {\n            this.__fallback = Object.keys;\n        } else if (typeof visitor.fallback === 'function') {\n            this.__fallback = visitor.fallback;\n        }\n\n        this.__keys = VisitorKeys;\n        if (visitor.keys) {\n            this.__keys = Object.assign(Object.create(this.__keys), visitor.keys);\n        }\n    };\n\n    function isNode(node) {\n        if (node == null) {\n            return false;\n        }\n        return typeof node === 'object' && typeof node.type === 'string';\n    }\n\n    function isProperty(nodeType, key) {\n        return (nodeType === Syntax.ObjectExpression || nodeType === Syntax.ObjectPattern) && 'properties' === key;\n    }\n  \n    function candidateExistsInLeaveList(leavelist, candidate) {\n        for (var i = leavelist.length - 1; i >= 0; --i) {\n            if (leavelist[i].node === candidate) {\n                return true;\n            }\n        }\n        return false;\n    }\n\n    Controller.prototype.traverse = function traverse(root, visitor) {\n        var worklist,\n            leavelist,\n            element,\n            node,\n            nodeType,\n            ret,\n            key,\n            current,\n            current2,\n            candidates,\n            candidate,\n            sentinel;\n\n        this.__initialize(root, visitor);\n\n        sentinel = {};\n\n        // reference\n        worklist = this.__worklist;\n        leavelist = this.__leavelist;\n\n        // initialize\n        worklist.push(new Element(root, null, null, null));\n        leavelist.push(new Element(null, null, null, null));\n\n        while (worklist.length) {\n            element = worklist.pop();\n\n            if (element === sentinel) {\n                element = leavelist.pop();\n\n                ret = this.__execute(visitor.leave, element);\n\n                if (this.__state === BREAK || ret === BREAK) {\n                    return;\n                }\n                continue;\n            }\n\n            if (element.node) {\n\n                ret = this.__execute(visitor.enter, element);\n\n                if (this.__state === BREAK || ret === BREAK) {\n                    return;\n                }\n\n                worklist.push(sentinel);\n                leavelist.push(element);\n\n                if (this.__state === SKIP || ret === SKIP) {\n                    continue;\n                }\n\n                node = element.node;\n                nodeType = node.type || element.wrap;\n                candidates = this.__keys[nodeType];\n                if (!candidates) {\n                    if (this.__fallback) {\n                        candidates = this.__fallback(node);\n                    } else {\n                        throw new Error('Unknown node type ' + nodeType + '.');\n                    }\n                }\n\n                current = candidates.length;\n                while ((current -= 1) >= 0) {\n                    key = candidates[current];\n                    candidate = node[key];\n                    if (!candidate) {\n                        continue;\n                    }\n\n                    if (Array.isArray(candidate)) {\n                        current2 = candidate.length;\n                        while ((current2 -= 1) >= 0) {\n                            if (!candidate[current2]) {\n                                continue;\n                            }\n\n                            if (candidateExistsInLeaveList(leavelist, candidate[current2])) {\n                              continue;\n                            }\n\n                            if (isProperty(nodeType, candidates[current])) {\n                                element = new Element(candidate[current2], [key, current2], 'Property', null);\n                            } else if (isNode(candidate[current2])) {\n                                element = new Element(candidate[current2], [key, current2], null, null);\n                            } else {\n                                continue;\n                            }\n                            worklist.push(element);\n                        }\n                    } else if (isNode(candidate)) {\n                        if (candidateExistsInLeaveList(leavelist, candidate)) {\n                          continue;\n                        }\n\n                        worklist.push(new Element(candidate, key, null, null));\n                    }\n                }\n            }\n        }\n    };\n\n    Controller.prototype.replace = function replace(root, visitor) {\n        var worklist,\n            leavelist,\n            node,\n            nodeType,\n            target,\n            element,\n            current,\n            current2,\n            candidates,\n            candidate,\n            sentinel,\n            outer,\n            key;\n\n        function removeElem(element) {\n            var i,\n                key,\n                nextElem,\n                parent;\n\n            if (element.ref.remove()) {\n                // When the reference is an element of an array.\n                key = element.ref.key;\n                parent = element.ref.parent;\n\n                // If removed from array, then decrease following items' keys.\n                i = worklist.length;\n                while (i--) {\n                    nextElem = worklist[i];\n                    if (nextElem.ref && nextElem.ref.parent === parent) {\n                        if  (nextElem.ref.key < key) {\n                            break;\n                        }\n                        --nextElem.ref.key;\n                    }\n                }\n            }\n        }\n\n        this.__initialize(root, visitor);\n\n        sentinel = {};\n\n        // reference\n        worklist = this.__worklist;\n        leavelist = this.__leavelist;\n\n        // initialize\n        outer = {\n            root: root\n        };\n        element = new Element(root, null, null, new Reference(outer, 'root'));\n        worklist.push(element);\n        leavelist.push(element);\n\n        while (worklist.length) {\n            element = worklist.pop();\n\n            if (element === sentinel) {\n                element = leavelist.pop();\n\n                target = this.__execute(visitor.leave, element);\n\n                // node may be replaced with null,\n                // so distinguish between undefined and null in this place\n                if (target !== undefined && target !== BREAK && target !== SKIP && target !== REMOVE) {\n                    // replace\n                    element.ref.replace(target);\n                }\n\n                if (this.__state === REMOVE || target === REMOVE) {\n                    removeElem(element);\n                }\n\n                if (this.__state === BREAK || target === BREAK) {\n                    return outer.root;\n                }\n                continue;\n            }\n\n            target = this.__execute(visitor.enter, element);\n\n            // node may be replaced with null,\n            // so distinguish between undefined and null in this place\n            if (target !== undefined && target !== BREAK && target !== SKIP && target !== REMOVE) {\n                // replace\n                element.ref.replace(target);\n                element.node = target;\n            }\n\n            if (this.__state === REMOVE || target === REMOVE) {\n                removeElem(element);\n                element.node = null;\n            }\n\n            if (this.__state === BREAK || target === BREAK) {\n                return outer.root;\n            }\n\n            // node may be null\n            node = element.node;\n            if (!node) {\n                continue;\n            }\n\n            worklist.push(sentinel);\n            leavelist.push(element);\n\n            if (this.__state === SKIP || target === SKIP) {\n                continue;\n            }\n\n            nodeType = node.type || element.wrap;\n            candidates = this.__keys[nodeType];\n            if (!candidates) {\n                if (this.__fallback) {\n                    candidates = this.__fallback(node);\n                } else {\n                    throw new Error('Unknown node type ' + nodeType + '.');\n                }\n            }\n\n            current = candidates.length;\n            while ((current -= 1) >= 0) {\n                key = candidates[current];\n                candidate = node[key];\n                if (!candidate) {\n                    continue;\n                }\n\n                if (Array.isArray(candidate)) {\n                    current2 = candidate.length;\n                    while ((current2 -= 1) >= 0) {\n                        if (!candidate[current2]) {\n                            continue;\n                        }\n                        if (isProperty(nodeType, candidates[current])) {\n                            element = new Element(candidate[current2], [key, current2], 'Property', new Reference(candidate, current2));\n                        } else if (isNode(candidate[current2])) {\n                            element = new Element(candidate[current2], [key, current2], null, new Reference(candidate, current2));\n                        } else {\n                            continue;\n                        }\n                        worklist.push(element);\n                    }\n                } else if (isNode(candidate)) {\n                    worklist.push(new Element(candidate, key, null, new Reference(node, key)));\n                }\n            }\n        }\n\n        return outer.root;\n    };\n\n    function traverse(root, visitor) {\n        var controller = new Controller();\n        return controller.traverse(root, visitor);\n    }\n\n    function replace(root, visitor) {\n        var controller = new Controller();\n        return controller.replace(root, visitor);\n    }\n\n    function extendCommentRange(comment, tokens) {\n        var target;\n\n        target = upperBound(tokens, function search(token) {\n            return token.range[0] > comment.range[0];\n        });\n\n        comment.extendedRange = [comment.range[0], comment.range[1]];\n\n        if (target !== tokens.length) {\n            comment.extendedRange[1] = tokens[target].range[0];\n        }\n\n        target -= 1;\n        if (target >= 0) {\n            comment.extendedRange[0] = tokens[target].range[1];\n        }\n\n        return comment;\n    }\n\n    function attachComments(tree, providedComments, tokens) {\n        // At first, we should calculate extended comment ranges.\n        var comments = [], comment, len, i, cursor;\n\n        if (!tree.range) {\n            throw new Error('attachComments needs range information');\n        }\n\n        // tokens array is empty, we attach comments to tree as 'leadingComments'\n        if (!tokens.length) {\n            if (providedComments.length) {\n                for (i = 0, len = providedComments.length; i < len; i += 1) {\n                    comment = deepCopy(providedComments[i]);\n                    comment.extendedRange = [0, tree.range[0]];\n                    comments.push(comment);\n                }\n                tree.leadingComments = comments;\n            }\n            return tree;\n        }\n\n        for (i = 0, len = providedComments.length; i < len; i += 1) {\n            comments.push(extendCommentRange(deepCopy(providedComments[i]), tokens));\n        }\n\n        // This is based on John Freeman's implementation.\n        cursor = 0;\n        traverse(tree, {\n            enter: function (node) {\n                var comment;\n\n                while (cursor < comments.length) {\n                    comment = comments[cursor];\n                    if (comment.extendedRange[1] > node.range[0]) {\n                        break;\n                    }\n\n                    if (comment.extendedRange[1] === node.range[0]) {\n                        if (!node.leadingComments) {\n                            node.leadingComments = [];\n                        }\n                        node.leadingComments.push(comment);\n                        comments.splice(cursor, 1);\n                    } else {\n                        cursor += 1;\n                    }\n                }\n\n                // already out of owned node\n                if (cursor === comments.length) {\n                    return VisitorOption.Break;\n                }\n\n                if (comments[cursor].extendedRange[0] > node.range[1]) {\n                    return VisitorOption.Skip;\n                }\n            }\n        });\n\n        cursor = 0;\n        traverse(tree, {\n            leave: function (node) {\n                var comment;\n\n                while (cursor < comments.length) {\n                    comment = comments[cursor];\n                    if (node.range[1] < comment.extendedRange[0]) {\n                        break;\n                    }\n\n                    if (node.range[1] === comment.extendedRange[0]) {\n                        if (!node.trailingComments) {\n                            node.trailingComments = [];\n                        }\n                        node.trailingComments.push(comment);\n                        comments.splice(cursor, 1);\n                    } else {\n                        cursor += 1;\n                    }\n                }\n\n                // already out of owned node\n                if (cursor === comments.length) {\n                    return VisitorOption.Break;\n                }\n\n                if (comments[cursor].extendedRange[0] > node.range[1]) {\n                    return VisitorOption.Skip;\n                }\n            }\n        });\n\n        return tree;\n    }\n\n    exports.Syntax = Syntax;\n    exports.traverse = traverse;\n    exports.replace = replace;\n    exports.attachComments = attachComments;\n    exports.VisitorKeys = VisitorKeys;\n    exports.VisitorOption = VisitorOption;\n    exports.Controller = Controller;\n    exports.cloneEnvironment = function () { return clone({}); };\n\n    return exports;\n}(exports));\n/* vim: set sw=4 ts=4 et tw=80 : */\n/gulpfile.js\n/*\n  Copyright (C) 2014 Yusuke Suzuki <utatane.tea@gmail.com>\n\n  Redistribution and use in source and binary forms, with or without\n  modification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\n  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n  ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n'use strict';\n\nvar gulp = require('gulp'),\n    git = require('gulp-git'),\n    bump = require('gulp-bump'),\n    filter = require('gulp-filter'),\n    tagVersion = require('gulp-tag-version');\n\nvar TEST = [ 'test/*.js' ];\nvar POWERED = [ 'powered-test/*.js' ];\nvar SOURCE = [ 'src/**/*.js' ];\n\n/**\n * Bumping version number and tagging the repository with it.\n * Please read http://semver.org/\n *\n * You can use the commands\n *\n *     gulp patch     # makes v0.1.0 -> v0.1.1\n *     gulp feature   # makes v0.1.1 -> v0.2.0\n *     gulp release   # makes v0.2.1 -> v1.0.0\n *\n * To bump the version numbers accordingly after you did a patch,\n * introduced a feature or made a backwards-incompatible release.\n */\n\nfunction inc(importance) {\n    // get all the files to bump version in\n    return gulp.src(['./package.json'])\n        // bump the version number in those files\n        .pipe(bump({type: importance}))\n        // save it back to filesystem\n        .pipe(gulp.dest('./'))\n        // commit the changed version number\n        .pipe(git.commit('Bumps package version'))\n        // read only one file to get the version number\n        .pipe(filter('package.json'))\n        // **tag it in the repository**\n        .pipe(tagVersion({\n            prefix: ''\n        }));\n}\n\ngulp.task('patch', [ ], function () { return inc('patch'); })\ngulp.task('minor', [ ], function () { return inc('minor'); })\ngulp.task('major', [ ], function () { return inc('major'); })\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/ZXN1dGlsc0AyLjAuMw==",
    "content": "/lib/utils.js\u0005/*\n  Copyright (C) 2013 Yusuke Suzuki <utatane.tea@gmail.com>\n\n  Redistribution and use in source and binary forms, with or without\n  modification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n  ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n\n(function () {\n    'use strict';\n\n    exports.ast = require('./ast');\n    exports.code = require('./code');\n    exports.keyword = require('./keyword');\n}());\n/* vim: set sw=4 ts=4 et tw=80 : */\n/lib/ast.js\u0012x/*\n  Copyright (C) 2013 Yusuke Suzuki <utatane.tea@gmail.com>\n\n  Redistribution and use in source and binary forms, with or without\n  modification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\n  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n  ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n(function () {\n    'use strict';\n\n    function isExpression(node) {\n        if (node == null) { return false; }\n        switch (node.type) {\n            case 'ArrayExpression':\n            case 'AssignmentExpression':\n            case 'BinaryExpression':\n            case 'CallExpression':\n            case 'ConditionalExpression':\n            case 'FunctionExpression':\n            case 'Identifier':\n            case 'Literal':\n            case 'LogicalExpression':\n            case 'MemberExpression':\n            case 'NewExpression':\n            case 'ObjectExpression':\n            case 'SequenceExpression':\n            case 'ThisExpression':\n            case 'UnaryExpression':\n            case 'UpdateExpression':\n                return true;\n        }\n        return false;\n    }\n\n    function isIterationStatement(node) {\n        if (node == null) { return false; }\n        switch (node.type) {\n            case 'DoWhileStatement':\n            case 'ForInStatement':\n            case 'ForStatement':\n            case 'WhileStatement':\n                return true;\n        }\n        return false;\n    }\n\n    function isStatement(node) {\n        if (node == null) { return false; }\n        switch (node.type) {\n            case 'BlockStatement':\n            case 'BreakStatement':\n            case 'ContinueStatement':\n            case 'DebuggerStatement':\n            case 'DoWhileStatement':\n            case 'EmptyStatement':\n            case 'ExpressionStatement':\n            case 'ForInStatement':\n            case 'ForStatement':\n            case 'IfStatement':\n            case 'LabeledStatement':\n            case 'ReturnStatement':\n            case 'SwitchStatement':\n            case 'ThrowStatement':\n            case 'TryStatement':\n            case 'VariableDeclaration':\n            case 'WhileStatement':\n            case 'WithStatement':\n                return true;\n        }\n        return false;\n    }\n\n    function isSourceElement(node) {\n      return isStatement(node) || node != null && node.type === 'FunctionDeclaration';\n    }\n\n    function trailingStatement(node) {\n        switch (node.type) {\n        case 'IfStatement':\n            if (node.alternate != null) {\n                return node.alternate;\n            }\n            return node.consequent;\n\n        case 'LabeledStatement':\n        case 'ForStatement':\n        case 'ForInStatement':\n        case 'WhileStatement':\n        case 'WithStatement':\n            return node.body;\n        }\n        return null;\n    }\n\n    function isProblematicIfStatement(node) {\n        var current;\n\n        if (node.type !== 'IfStatement') {\n            return false;\n        }\n        if (node.alternate == null) {\n            return false;\n        }\n        current = node.consequent;\n        do {\n            if (current.type === 'IfStatement') {\n                if (current.alternate == null)  {\n                    return true;\n                }\n            }\n            current = trailingStatement(current);\n        } while (current);\n\n        return false;\n    }\n\n    module.exports = {\n        isExpression: isExpression,\n        isStatement: isStatement,\n        isIterationStatement: isIterationStatement,\n        isSourceElement: isSourceElement,\n        isProblematicIfStatement: isProblematicIfStatement,\n\n        trailingStatement: trailingStatement\n    };\n}());\n/* vim: set sw=4 ts=4 et tw=80 : */\n/lib/keyword.js\u0015/*\n  Copyright (C) 2013 Yusuke Suzuki <utatane.tea@gmail.com>\n\n  Redistribution and use in source and binary forms, with or without\n  modification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n  ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n(function () {\n    'use strict';\n\n    var code = require('./code');\n\n    function isStrictModeReservedWordES6(id) {\n        switch (id) {\n        case 'implements':\n        case 'interface':\n        case 'package':\n        case 'private':\n        case 'protected':\n        case 'public':\n        case 'static':\n        case 'let':\n            return true;\n        default:\n            return false;\n        }\n    }\n\n    function isKeywordES5(id, strict) {\n        // yield should not be treated as keyword under non-strict mode.\n        if (!strict && id === 'yield') {\n            return false;\n        }\n        return isKeywordES6(id, strict);\n    }\n\n    function isKeywordES6(id, strict) {\n        if (strict && isStrictModeReservedWordES6(id)) {\n            return true;\n        }\n\n        switch (id.length) {\n        case 2:\n            return (id === 'if') || (id === 'in') || (id === 'do');\n        case 3:\n            return (id === 'var') || (id === 'for') || (id === 'new') || (id === 'try');\n        case 4:\n            return (id === 'this') || (id === 'else') || (id === 'case') ||\n                (id === 'void') || (id === 'with') || (id === 'enum');\n        case 5:\n            return (id === 'while') || (id === 'break') || (id === 'catch') ||\n                (id === 'throw') || (id === 'const') || (id === 'yield') ||\n                (id === 'class') || (id === 'super');\n        case 6:\n            return (id === 'return') || (id === 'typeof') || (id === 'delete') ||\n                (id === 'switch') || (id === 'export') || (id === 'import');\n        case 7:\n            return (id === 'default') || (id === 'finally') || (id === 'extends');\n        case 8:\n            return (id === 'function') || (id === 'continue') || (id === 'debugger');\n        case 10:\n            return (id === 'instanceof');\n        default:\n            return false;\n        }\n    }\n\n    function isReservedWordES5(id, strict) {\n        return id === 'null' || id === 'true' || id === 'false' || isKeywordES5(id, strict);\n    }\n\n    function isReservedWordES6(id, strict) {\n        return id === 'null' || id === 'true' || id === 'false' || isKeywordES6(id, strict);\n    }\n\n    function isRestrictedWord(id) {\n        return id === 'eval' || id === 'arguments';\n    }\n\n    function isIdentifierNameES5(id) {\n        var i, iz, ch;\n\n        if (id.length === 0) { return false; }\n\n        ch = id.charCodeAt(0);\n        if (!code.isIdentifierStartES5(ch)) {\n            return false;\n        }\n\n        for (i = 1, iz = id.length; i < iz; ++i) {\n            ch = id.charCodeAt(i);\n            if (!code.isIdentifierPartES5(ch)) {\n                return false;\n            }\n        }\n        return true;\n    }\n\n    function decodeUtf16(lead, trail) {\n        return (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000;\n    }\n\n    function isIdentifierNameES6(id) {\n        var i, iz, ch, lowCh, check;\n\n        if (id.length === 0) { return false; }\n\n        check = code.isIdentifierStartES6;\n        for (i = 0, iz = id.length; i < iz; ++i) {\n            ch = id.charCodeAt(i);\n            if (0xD800 <= ch && ch <= 0xDBFF) {\n                ++i;\n                if (i >= iz) { return false; }\n                lowCh = id.charCodeAt(i);\n                if (!(0xDC00 <= lowCh && lowCh <= 0xDFFF)) {\n                    return false;\n                }\n                ch = decodeUtf16(ch, lowCh);\n            }\n            if (!check(ch)) {\n                return false;\n            }\n            check = code.isIdentifierPartES6;\n        }\n        return true;\n    }\n\n    function isIdentifierES5(id, strict) {\n        return isIdentifierNameES5(id) && !isReservedWordES5(id, strict);\n    }\n\n    function isIdentifierES6(id, strict) {\n        return isIdentifierNameES6(id) && !isReservedWordES6(id, strict);\n    }\n\n    module.exports = {\n        isKeywordES5: isKeywordES5,\n        isKeywordES6: isKeywordES6,\n        isReservedWordES5: isReservedWordES5,\n        isReservedWordES6: isReservedWordES6,\n        isRestrictedWord: isRestrictedWord,\n        isIdentifierNameES5: isIdentifierNameES5,\n        isIdentifierNameES6: isIdentifierNameES6,\n        isIdentifierES5: isIdentifierES5,\n        isIdentifierES6: isIdentifierES6\n    };\n}());\n/* vim: set sw=4 ts=4 et tw=80 : */\n/lib/code.jss/*\n  Copyright (C) 2013-2014 Yusuke Suzuki <utatane.tea@gmail.com>\n  Copyright (C) 2014 Ivan Nikulin <ifaaan@gmail.com>\n\n  Redistribution and use in source and binary forms, with or without\n  modification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n  ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n(function () {\n    'use strict';\n\n    var ES6Regex, ES5Regex, NON_ASCII_WHITESPACES, IDENTIFIER_START, IDENTIFIER_PART, ch;\n\n    // See `tools/generate-identifier-regex.js`.\n    ES5Regex = {\n        // ECMAScript 5.1/Unicode v9.0.0 NonAsciiIdentifierStart:\n        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\\u08B6-\\u08BD\\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\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\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-\\u1884\\u1887-\\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\\u1C80-\\u1C88\\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\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\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\\u2E2F\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309D-\\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-\\uA7AE\\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]/,\n        // ECMAScript 5.1/Unicode v9.0.0 NonAsciiIdentifierPart:\n        NonAsciiIdentifierPart: /[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0300-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\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\\u08B6-\\u08BD\\u08D4-\\u08E1\\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\\u0C80-\\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\\u0D54-\\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\\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-\\u19D9\\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\\u1C80-\\u1C88\\u1CD0-\\u1CD2\\u1CD4-\\u1CF6\\u1CF8\\u1CF9\\u1D00-\\u1DF5\\u1DFB-\\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\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\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\\u2E2F\\u3005-\\u3007\\u3021-\\u302F\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u3099\\u309A\\u309D-\\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-\\uA7AE\\uA7B0-\\uA7B7\\uA7F7-\\uA827\\uA840-\\uA873\\uA880-\\uA8C5\\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]/\n    };\n\n    ES6Regex = {\n        // ECMAScript 6/Unicode v9.0.0 NonAsciiIdentifierStart:\n        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\\u08B6-\\u08BD\\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\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\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\\u1C80-\\u1C88\\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-\\uA7AE\\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\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\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[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDF00-\\uDF19]|\\uD806[\\uDCA0-\\uDCDF\\uDCFF\\uDEC0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC00-\\uDC6E\\uDC80-\\uDD43]|[\\uD80C\\uD81C-\\uD820\\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\\uDFE0]|\\uD821[\\uDC00-\\uDFEC]|\\uD822[\\uDC00-\\uDEF2]|\\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\\uDD00-\\uDD43]|\\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]/,\n        // ECMAScript 6/Unicode v9.0.0 NonAsciiIdentifierPart:\n        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\\u08B6-\\u08BD\\u08D4-\\u08E1\\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\\u0C80-\\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\\u0D54-\\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\\u1C80-\\u1C88\\u1CD0-\\u1CD2\\u1CD4-\\u1CF6\\u1CF8\\u1CF9\\u1D00-\\u1DF5\\u1DFB-\\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-\\uA7AE\\uA7B0-\\uA7B7\\uA7F7-\\uA827\\uA840-\\uA873\\uA880-\\uA8C5\\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\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\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\\uDE3E\\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[\\uDC00-\\uDC4A\\uDC50-\\uDC59\\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]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC36\\uDC38-\\uDC40\\uDC50-\\uDC59\\uDC72-\\uDC8F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC00-\\uDC6E\\uDC80-\\uDD43]|[\\uD80C\\uD81C-\\uD820\\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\\uDFE0]|\\uD821[\\uDC00-\\uDFEC]|\\uD822[\\uDC00-\\uDEF2]|\\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]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A]|\\uD83A[\\uDC00-\\uDCC4\\uDCD0-\\uDCD6\\uDD00-\\uDD4A\\uDD50-\\uDD59]|\\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]/\n    };\n\n    function isDecimalDigit(ch) {\n        return 0x30 <= ch && ch <= 0x39;  // 0..9\n    }\n\n    function isHexDigit(ch) {\n        return 0x30 <= ch && ch <= 0x39 ||  // 0..9\n            0x61 <= ch && ch <= 0x66 ||     // a..f\n            0x41 <= ch && ch <= 0x46;       // A..F\n    }\n\n    function isOctalDigit(ch) {\n        return ch >= 0x30 && ch <= 0x37;  // 0..7\n    }\n\n    // 7.2 White Space\n\n    NON_ASCII_WHITESPACES = [\n        0x1680,\n        0x2000, 0x2001, 0x2002, 0x2003, 0x2004, 0x2005, 0x2006, 0x2007, 0x2008, 0x2009, 0x200A,\n        0x202F, 0x205F,\n        0x3000,\n        0xFEFF\n    ];\n\n    function isWhiteSpace(ch) {\n        return ch === 0x20 || ch === 0x09 || ch === 0x0B || ch === 0x0C || ch === 0xA0 ||\n            ch >= 0x1680 && NON_ASCII_WHITESPACES.indexOf(ch) >= 0;\n    }\n\n    // 7.3 Line Terminators\n\n    function isLineTerminator(ch) {\n        return ch === 0x0A || ch === 0x0D || ch === 0x2028 || ch === 0x2029;\n    }\n\n    // 7.6 Identifier Names and Identifiers\n\n    function fromCodePoint(cp) {\n        if (cp <= 0xFFFF) { return String.fromCharCode(cp); }\n        var cu1 = String.fromCharCode(Math.floor((cp - 0x10000) / 0x400) + 0xD800);\n        var cu2 = String.fromCharCode(((cp - 0x10000) % 0x400) + 0xDC00);\n        return cu1 + cu2;\n    }\n\n    IDENTIFIER_START = new Array(0x80);\n    for(ch = 0; ch < 0x80; ++ch) {\n        IDENTIFIER_START[ch] =\n            ch >= 0x61 && ch <= 0x7A ||  // a..z\n            ch >= 0x41 && ch <= 0x5A ||  // A..Z\n            ch === 0x24 || ch === 0x5F;  // $ (dollar) and _ (underscore)\n    }\n\n    IDENTIFIER_PART = new Array(0x80);\n    for(ch = 0; ch < 0x80; ++ch) {\n        IDENTIFIER_PART[ch] =\n            ch >= 0x61 && ch <= 0x7A ||  // a..z\n            ch >= 0x41 && ch <= 0x5A ||  // A..Z\n            ch >= 0x30 && ch <= 0x39 ||  // 0..9\n            ch === 0x24 || ch === 0x5F;  // $ (dollar) and _ (underscore)\n    }\n\n    function isIdentifierStartES5(ch) {\n        return ch < 0x80 ? IDENTIFIER_START[ch] : ES5Regex.NonAsciiIdentifierStart.test(fromCodePoint(ch));\n    }\n\n    function isIdentifierPartES5(ch) {\n        return ch < 0x80 ? IDENTIFIER_PART[ch] : ES5Regex.NonAsciiIdentifierPart.test(fromCodePoint(ch));\n    }\n\n    function isIdentifierStartES6(ch) {\n        return ch < 0x80 ? IDENTIFIER_START[ch] : ES6Regex.NonAsciiIdentifierStart.test(fromCodePoint(ch));\n    }\n\n    function isIdentifierPartES6(ch) {\n        return ch < 0x80 ? IDENTIFIER_PART[ch] : ES6Regex.NonAsciiIdentifierPart.test(fromCodePoint(ch));\n    }\n\n    module.exports = {\n        isDecimalDigit: isDecimalDigit,\n        isHexDigit: isHexDigit,\n        isOctalDigit: isOctalDigit,\n        isWhiteSpace: isWhiteSpace,\n        isLineTerminator: isLineTerminator,\n        isIdentifierStartES5: isIdentifierStartES5,\n        isIdentifierPartES5: isIdentifierPartES5,\n        isIdentifierStartES6: isIdentifierStartES6,\n        isIdentifierPartES6: isIdentifierPartES6\n    };\n}());\n/* vim: set sw=4 ts=4 et tw=80 : */\n/README.md\u001a### esutils [![Build Status](https://secure.travis-ci.org/estools/esutils.svg)](http://travis-ci.org/estools/esutils)\nesutils ([esutils](http://github.com/estools/esutils)) is\nutility box for ECMAScript language tools.\n\n### API\n\n### ast\n\n#### ast.isExpression(node)\n\nReturns true if `node` is an Expression as defined in ECMA262 edition 5.1 section\n[11](https://es5.github.io/#x11).\n\n#### ast.isStatement(node)\n\nReturns true if `node` is a Statement as defined in ECMA262 edition 5.1 section\n[12](https://es5.github.io/#x12).\n\n#### ast.isIterationStatement(node)\n\nReturns true if `node` is an IterationStatement as defined in ECMA262 edition\n5.1 section [12.6](https://es5.github.io/#x12.6).\n\n#### ast.isSourceElement(node)\n\nReturns true if `node` is a SourceElement as defined in ECMA262 edition 5.1\nsection [14](https://es5.github.io/#x14).\n\n#### ast.trailingStatement(node)\n\nReturns `Statement?` if `node` has trailing `Statement`.\n```js\nif (cond)\n    consequent;\n```\nWhen taking this `IfStatement`, returns `consequent;` statement.\n\n#### ast.isProblematicIfStatement(node)\n\nReturns true if `node` is a problematic IfStatement. If `node` is a problematic `IfStatement`, `node` cannot be represented as an one on one JavaScript code.\n```js\n{\n    type: 'IfStatement',\n    consequent: {\n        type: 'WithStatement',\n        body: {\n            type: 'IfStatement',\n            consequent: {type: 'EmptyStatement'}\n        }\n    },\n    alternate: {type: 'EmptyStatement'}\n}\n```\nThe above node cannot be represented as a JavaScript code, since the top level `else` alternate belongs to an inner `IfStatement`.\n\n\n### code\n\n#### code.isDecimalDigit(code)\n\nReturn true if provided code is decimal digit.\n\n#### code.isHexDigit(code)\n\nReturn true if provided code is hexadecimal digit.\n\n#### code.isOctalDigit(code)\n\nReturn true if provided code is octal digit.\n\n#### code.isWhiteSpace(code)\n\nReturn true if provided code is white space. White space characters are formally defined in ECMA262.\n\n#### code.isLineTerminator(code)\n\nReturn true if provided code is line terminator. Line terminator characters are formally defined in ECMA262.\n\n#### code.isIdentifierStart(code)\n\nReturn true if provided code can be the first character of ECMA262 Identifier. They are formally defined in ECMA262.\n\n#### code.isIdentifierPart(code)\n\nReturn true if provided code can be the trailing character of ECMA262 Identifier. They are formally defined in ECMA262.\n\n### keyword\n\n#### keyword.isKeywordES5(id, strict)\n\nReturns `true` if provided identifier string is a Keyword or Future Reserved Word\nin ECMA262 edition 5.1. They are formally defined in ECMA262 sections\n[7.6.1.1](http://es5.github.io/#x7.6.1.1) and [7.6.1.2](http://es5.github.io/#x7.6.1.2),\nrespectively. If the `strict` flag is truthy, this function additionally checks whether\n`id` is a Keyword or Future Reserved Word under strict mode.\n\n#### keyword.isKeywordES6(id, strict)\n\nReturns `true` if provided identifier string is a Keyword or Future Reserved Word\nin ECMA262 edition 6. They are formally defined in ECMA262 sections\n[11.6.2.1](http://ecma-international.org/ecma-262/6.0/#sec-keywords) and\n[11.6.2.2](http://ecma-international.org/ecma-262/6.0/#sec-future-reserved-words),\nrespectively. If the `strict` flag is truthy, this function additionally checks whether\n`id` is a Keyword or Future Reserved Word under strict mode.\n\n#### keyword.isReservedWordES5(id, strict)\n\nReturns `true` if provided identifier string is a Reserved Word in ECMA262 edition 5.1.\nThey are formally defined in ECMA262 section [7.6.1](http://es5.github.io/#x7.6.1).\nIf the `strict` flag is truthy, this function additionally checks whether `id`\nis a Reserved Word under strict mode.\n\n#### keyword.isReservedWordES6(id, strict)\n\nReturns `true` if provided identifier string is a Reserved Word in ECMA262 edition 6.\nThey are formally defined in ECMA262 section [11.6.2](http://ecma-international.org/ecma-262/6.0/#sec-reserved-words).\nIf the `strict` flag is truthy, this function additionally checks whether `id`\nis a Reserved Word under strict mode.\n\n#### keyword.isRestrictedWord(id)\n\nReturns `true` if provided identifier string is one of `eval` or `arguments`.\nThey are restricted in strict mode code throughout ECMA262 edition 5.1 and\nin ECMA262 edition 6 section [12.1.1](http://ecma-international.org/ecma-262/6.0/#sec-identifiers-static-semantics-early-errors).\n\n#### keyword.isIdentifierNameES5(id)\n\nReturn true if provided identifier string is an IdentifierName as specified in\nECMA262 edition 5.1 section [7.6](https://es5.github.io/#x7.6).\n\n#### keyword.isIdentifierNameES6(id)\n\nReturn true if provided identifier string is an IdentifierName as specified in\nECMA262 edition 6 section [11.6](http://ecma-international.org/ecma-262/6.0/#sec-names-and-keywords).\n\n#### keyword.isIdentifierES5(id, strict)\n\nReturn true if provided identifier string is an Identifier as specified in\nECMA262 edition 5.1 section [7.6](https://es5.github.io/#x7.6). If the `strict`\nflag is truthy, this function additionally checks whether `id` is an Identifier\nunder strict mode.\n\n#### keyword.isIdentifierES6(id, strict)\n\nReturn true if provided identifier string is an Identifier as specified in\nECMA262 edition 6 section [12.1](http://ecma-international.org/ecma-262/6.0/#sec-identifiers).\nIf the `strict` flag is truthy, this function additionally checks whether `id`\nis an Identifier under strict mode.\n\n### License\n\nCopyright (C) 2013 [Yusuke Suzuki](http://github.com/Constellation)\n (twitter: [@Constellation](http://twitter.com/Constellation)) and other contributors.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n  * Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in the\n    documentation and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\nDIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\nON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\nTHIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n/LICENSE.BSD\u0004Redistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n  * Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in the\n    documentation and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\nDIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\nON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\nTHIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n/package.json\u0004\u0012{\n  \"name\": \"esutils\",\n  \"description\": \"utility box for ECMAScript language tools\",\n  \"homepage\": \"https://github.com/estools/esutils\",\n  \"main\": \"lib/utils.js\",\n  \"version\": \"2.0.3\",\n  \"engines\": {\n    \"node\": \">=0.10.0\"\n  },\n  \"directories\": {\n    \"lib\": \"./lib\"\n  },\n  \"files\": [\n    \"LICENSE.BSD\",\n    \"README.md\",\n    \"lib\"\n  ],\n  \"maintainers\": [\n    {\n      \"name\": \"Yusuke Suzuki\",\n      \"email\": \"utatane.tea@gmail.com\",\n      \"web\": \"http://github.com/Constellation\"\n    }\n  ],\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"http://github.com/estools/esutils.git\"\n  },\n  \"devDependencies\": {\n    \"chai\": \"~1.7.2\",\n    \"coffee-script\": \"~1.6.3\",\n    \"jshint\": \"2.6.3\",\n    \"mocha\": \"~2.2.1\",\n    \"regenerate\": \"~1.3.1\",\n    \"unicode-9.0.0\": \"~0.7.0\"\n  },\n  \"license\": \"BSD-2-Clause\",\n  \"scripts\": {\n    \"test\": \"npm run-script lint && npm run-script unit-test\",\n    \"lint\": \"jshint lib/*.js\",\n    \"unit-test\": \"mocha --compilers coffee:coffee-script -R spec\",\n    \"generate-regex\": \"node tools/generate-identifier-regex.js\"\n  }\n}\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/ZXNidWlsZEAwLjE1LjE4",
    "content": "/package.json\u0004{\n  \"name\": \"esbuild\",\n  \"version\": \"0.15.18\",\n  \"description\": \"An extremely fast JavaScript and CSS bundler and minifier.\",\n  \"repository\": \"https://github.com/evanw/esbuild\",\n  \"scripts\": {\n    \"postinstall\": \"node install.js\"\n  },\n  \"main\": \"lib/main.js\",\n  \"types\": \"lib/main.d.ts\",\n  \"engines\": {\n    \"node\": \">=12\"\n  },\n  \"bin\": {\n    \"esbuild\": \"bin/esbuild\"\n  },\n  \"optionalDependencies\": {\n    \"@esbuild/android-arm\": \"0.15.18\",\n    \"@esbuild/linux-loong64\": \"0.15.18\",\n    \"esbuild-android-64\": \"0.15.18\",\n    \"esbuild-android-arm64\": \"0.15.18\",\n    \"esbuild-darwin-64\": \"0.15.18\",\n    \"esbuild-darwin-arm64\": \"0.15.18\",\n    \"esbuild-freebsd-64\": \"0.15.18\",\n    \"esbuild-freebsd-arm64\": \"0.15.18\",\n    \"esbuild-linux-32\": \"0.15.18\",\n    \"esbuild-linux-64\": \"0.15.18\",\n    \"esbuild-linux-arm\": \"0.15.18\",\n    \"esbuild-linux-arm64\": \"0.15.18\",\n    \"esbuild-linux-mips64le\": \"0.15.18\",\n    \"esbuild-linux-ppc64le\": \"0.15.18\",\n    \"esbuild-linux-riscv64\": \"0.15.18\",\n    \"esbuild-linux-s390x\": \"0.15.18\",\n    \"esbuild-netbsd-64\": \"0.15.18\",\n    \"esbuild-openbsd-64\": \"0.15.18\",\n    \"esbuild-sunos-64\": \"0.15.18\",\n    \"esbuild-windows-32\": \"0.15.18\",\n    \"esbuild-windows-64\": \"0.15.18\",\n    \"esbuild-windows-arm64\": \"0.15.18\"\n  },\n  \"license\": \"MIT\"\n}\n/lib/main.d.tsHexport type Platform = 'browser' | 'node' | 'neutral';\nexport type Format = 'iife' | 'cjs' | 'esm';\nexport type Loader = 'js' | 'jsx' | 'ts' | 'tsx' | 'css' | 'json' | 'text' | 'base64' | 'file' | 'dataurl' | 'binary' | 'copy' | 'default';\nexport type LogLevel = 'verbose' | 'debug' | 'info' | 'warning' | 'error' | 'silent';\nexport type Charset = 'ascii' | 'utf8';\nexport type Drop = 'console' | 'debugger';\n\ninterface CommonOptions {\n  /** Documentation: https://esbuild.github.io/api/#sourcemap */\n  sourcemap?: boolean | 'linked' | 'inline' | 'external' | 'both';\n  /** Documentation: https://esbuild.github.io/api/#legal-comments */\n  legalComments?: 'none' | 'inline' | 'eof' | 'linked' | 'external';\n  /** Documentation: https://esbuild.github.io/api/#source-root */\n  sourceRoot?: string;\n  /** Documentation: https://esbuild.github.io/api/#sources-content */\n  sourcesContent?: boolean;\n\n  /** Documentation: https://esbuild.github.io/api/#format */\n  format?: Format;\n  /** Documentation: https://esbuild.github.io/api/#global-name */\n  globalName?: string;\n  /** Documentation: https://esbuild.github.io/api/#target */\n  target?: string | string[];\n  /** Documentation: https://esbuild.github.io/api/#supported */\n  supported?: Record<string, boolean>;\n  /** Documentation: https://esbuild.github.io/api/#platform */\n  platform?: Platform;\n\n  /** Documentation: https://esbuild.github.io/api/#mangle-props */\n  mangleProps?: RegExp;\n  /** Documentation: https://esbuild.github.io/api/#mangle-props */\n  reserveProps?: RegExp;\n  /** Documentation: https://esbuild.github.io/api/#mangle-props */\n  mangleQuoted?: boolean;\n  /** Documentation: https://esbuild.github.io/api/#mangle-props */\n  mangleCache?: Record<string, string | false>;\n  /** Documentation: https://esbuild.github.io/api/#drop */\n  drop?: Drop[];\n  /** Documentation: https://esbuild.github.io/api/#minify */\n  minify?: boolean;\n  /** Documentation: https://esbuild.github.io/api/#minify */\n  minifyWhitespace?: boolean;\n  /** Documentation: https://esbuild.github.io/api/#minify */\n  minifyIdentifiers?: boolean;\n  /** Documentation: https://esbuild.github.io/api/#minify */\n  minifySyntax?: boolean;\n  /** Documentation: https://esbuild.github.io/api/#charset */\n  charset?: Charset;\n  /** Documentation: https://esbuild.github.io/api/#tree-shaking */\n  treeShaking?: boolean;\n  /** Documentation: https://esbuild.github.io/api/#ignore-annotations */\n  ignoreAnnotations?: boolean;\n\n  /** Documentation: https://esbuild.github.io/api/#jsx */\n  jsx?: 'transform' | 'preserve' | 'automatic';\n  /** Documentation: https://esbuild.github.io/api/#jsx-factory */\n  jsxFactory?: string;\n  /** Documentation: https://esbuild.github.io/api/#jsx-fragment */\n  jsxFragment?: string;\n  /** Documentation: https://esbuild.github.io/api/#jsx-import-source */\n  jsxImportSource?: string;\n  /** Documentation: https://esbuild.github.io/api/#jsx-development */\n  jsxDev?: boolean;\n  /** Documentation: https://esbuild.github.io/api/#jsx-side-effects */\n  jsxSideEffects?: boolean;\n\n  /** Documentation: https://esbuild.github.io/api/#define */\n  define?: { [key: string]: string };\n  /** Documentation: https://esbuild.github.io/api/#pure */\n  pure?: string[];\n  /** Documentation: https://esbuild.github.io/api/#keep-names */\n  keepNames?: boolean;\n\n  /** Documentation: https://esbuild.github.io/api/#color */\n  color?: boolean;\n  /** Documentation: https://esbuild.github.io/api/#log-level */\n  logLevel?: LogLevel;\n  /** Documentation: https://esbuild.github.io/api/#log-limit */\n  logLimit?: number;\n  /** Documentation: https://esbuild.github.io/api/#log-override */\n  logOverride?: Record<string, LogLevel>;\n}\n\nexport interface BuildOptions extends CommonOptions {\n  /** Documentation: https://esbuild.github.io/api/#bundle */\n  bundle?: boolean;\n  /** Documentation: https://esbuild.github.io/api/#splitting */\n  splitting?: boolean;\n  /** Documentation: https://esbuild.github.io/api/#preserve-symlinks */\n  preserveSymlinks?: boolean;\n  /** Documentation: https://esbuild.github.io/api/#outfile */\n  outfile?: string;\n  /** Documentation: https://esbuild.github.io/api/#metafile */\n  metafile?: boolean;\n  /** Documentation: https://esbuild.github.io/api/#outdir */\n  outdir?: string;\n  /** Documentation: https://esbuild.github.io/api/#outbase */\n  outbase?: string;\n  /** Documentation: https://esbuild.github.io/api/#external */\n  external?: string[];\n  /** Documentation: https://esbuild.github.io/api/#alias */\n  alias?: Record<string, string>;\n  /** Documentation: https://esbuild.github.io/api/#loader */\n  loader?: { [ext: string]: Loader };\n  /** Documentation: https://esbuild.github.io/api/#resolve-extensions */\n  resolveExtensions?: string[];\n  /** Documentation: https://esbuild.github.io/api/#main-fields */\n  mainFields?: string[];\n  /** Documentation: https://esbuild.github.io/api/#conditions */\n  conditions?: string[];\n  /** Documentation: https://esbuild.github.io/api/#write */\n  write?: boolean;\n  /** Documentation: https://esbuild.github.io/api/#allow-overwrite */\n  allowOverwrite?: boolean;\n  /** Documentation: https://esbuild.github.io/api/#tsconfig */\n  tsconfig?: string;\n  /** Documentation: https://esbuild.github.io/api/#out-extension */\n  outExtension?: { [ext: string]: string };\n  /** Documentation: https://esbuild.github.io/api/#public-path */\n  publicPath?: string;\n  /** Documentation: https://esbuild.github.io/api/#entry-names */\n  entryNames?: string;\n  /** Documentation: https://esbuild.github.io/api/#chunk-names */\n  chunkNames?: string;\n  /** Documentation: https://esbuild.github.io/api/#asset-names */\n  assetNames?: string;\n  /** Documentation: https://esbuild.github.io/api/#inject */\n  inject?: string[];\n  /** Documentation: https://esbuild.github.io/api/#banner */\n  banner?: { [type: string]: string };\n  /** Documentation: https://esbuild.github.io/api/#footer */\n  footer?: { [type: string]: string };\n  /** Documentation: https://esbuild.github.io/api/#incremental */\n  incremental?: boolean;\n  /** Documentation: https://esbuild.github.io/api/#entry-points */\n  entryPoints?: string[] | Record<string, string>;\n  /** Documentation: https://esbuild.github.io/api/#stdin */\n  stdin?: StdinOptions;\n  /** Documentation: https://esbuild.github.io/plugins/ */\n  plugins?: Plugin[];\n  /** Documentation: https://esbuild.github.io/api/#working-directory */\n  absWorkingDir?: string;\n  /** Documentation: https://esbuild.github.io/api/#node-paths */\n  nodePaths?: string[]; // The \"NODE_PATH\" variable from Node.js\n  /** Documentation: https://esbuild.github.io/api/#watch */\n  watch?: boolean | WatchMode;\n}\n\nexport interface WatchMode {\n  onRebuild?: (error: BuildFailure | null, result: BuildResult | null) => void;\n}\n\nexport interface StdinOptions {\n  contents: string | Uint8Array;\n  resolveDir?: string;\n  sourcefile?: string;\n  loader?: Loader;\n}\n\nexport interface Message {\n  id: string;\n  pluginName: string;\n  text: string;\n  location: Location | null;\n  notes: Note[];\n\n  /**\n   * Optional user-specified data that is passed through unmodified. You can\n   * use this to stash the original error, for example.\n   */\n  detail: any;\n}\n\nexport interface Note {\n  text: string;\n  location: Location | null;\n}\n\nexport interface Location {\n  file: string;\n  namespace: string;\n  /** 1-based */\n  line: number;\n  /** 0-based, in bytes */\n  column: number;\n  /** in bytes */\n  length: number;\n  lineText: string;\n  suggestion: string;\n}\n\nexport interface OutputFile {\n  path: string;\n  /** \"text\" as bytes */\n  contents: Uint8Array;\n  /** \"contents\" as text */\n  text: string;\n}\n\nexport interface BuildInvalidate {\n  (): Promise<BuildIncremental>;\n  dispose(): void;\n}\n\nexport interface BuildIncremental extends BuildResult {\n  rebuild: BuildInvalidate;\n}\n\nexport interface BuildResult {\n  errors: Message[];\n  warnings: Message[];\n  /** Only when \"write: false\" */\n  outputFiles?: OutputFile[];\n  /** Only when \"incremental: true\" */\n  rebuild?: BuildInvalidate;\n  /** Only when \"watch: true\" */\n  stop?: () => void;\n  /** Only when \"metafile: true\" */\n  metafile?: Metafile;\n  /** Only when \"mangleCache\" is present */\n  mangleCache?: Record<string, string | false>;\n}\n\nexport interface BuildFailure extends Error {\n  errors: Message[];\n  warnings: Message[];\n}\n\n/** Documentation: https://esbuild.github.io/api/#serve-arguments */\nexport interface ServeOptions {\n  port?: number;\n  host?: string;\n  servedir?: string;\n  onRequest?: (args: ServeOnRequestArgs) => void;\n}\n\nexport interface ServeOnRequestArgs {\n  remoteAddress: string;\n  method: string;\n  path: string;\n  status: number;\n  /** The time to generate the response, not to send it */\n  timeInMS: number;\n}\n\n/** Documentation: https://esbuild.github.io/api/#serve-return-values */\nexport interface ServeResult {\n  port: number;\n  host: string;\n  wait: Promise<void>;\n  stop: () => void;\n}\n\nexport interface TransformOptions extends CommonOptions {\n  tsconfigRaw?: string | {\n    compilerOptions?: {\n      alwaysStrict?: boolean,\n      importsNotUsedAsValues?: 'remove' | 'preserve' | 'error',\n      jsx?: 'react' | 'react-jsx' | 'react-jsxdev' | 'preserve',\n      jsxFactory?: string,\n      jsxFragmentFactory?: string,\n      jsxImportSource?: string,\n      preserveValueImports?: boolean,\n      target?: string,\n      useDefineForClassFields?: boolean,\n    },\n  };\n\n  sourcefile?: string;\n  loader?: Loader;\n  banner?: string;\n  footer?: string;\n}\n\nexport interface TransformResult {\n  code: string;\n  map: string;\n  warnings: Message[];\n  /** Only when \"mangleCache\" is present */\n  mangleCache?: Record<string, string | false>;\n}\n\nexport interface TransformFailure extends Error {\n  errors: Message[];\n  warnings: Message[];\n}\n\nexport interface Plugin {\n  name: string;\n  setup: (build: PluginBuild) => (void | Promise<void>);\n}\n\nexport interface PluginBuild {\n  initialOptions: BuildOptions;\n  resolve(path: string, options?: ResolveOptions): Promise<ResolveResult>;\n\n  onStart(callback: () =>\n    (OnStartResult | null | void | Promise<OnStartResult | null | void>)): void;\n  onEnd(callback: (result: BuildResult) =>\n    (void | Promise<void>)): void;\n  onResolve(options: OnResolveOptions, callback: (args: OnResolveArgs) =>\n    (OnResolveResult | null | undefined | Promise<OnResolveResult | null | undefined>)): void;\n  onLoad(options: OnLoadOptions, callback: (args: OnLoadArgs) =>\n    (OnLoadResult | null | undefined | Promise<OnLoadResult | null | undefined>)): void;\n\n  // This is a full copy of the esbuild library in case you need it\n  esbuild: {\n    serve: typeof serve,\n    build: typeof build,\n    buildSync: typeof buildSync,\n    transform: typeof transform,\n    transformSync: typeof transformSync,\n    formatMessages: typeof formatMessages,\n    formatMessagesSync: typeof formatMessagesSync,\n    analyzeMetafile: typeof analyzeMetafile,\n    analyzeMetafileSync: typeof analyzeMetafileSync,\n    initialize: typeof initialize,\n    version: typeof version,\n  };\n}\n\nexport interface ResolveOptions {\n  pluginName?: string;\n  importer?: string;\n  namespace?: string;\n  resolveDir?: string;\n  kind?: ImportKind;\n  pluginData?: any;\n}\n\nexport interface ResolveResult {\n  errors: Message[];\n  warnings: Message[];\n\n  path: string;\n  external: boolean;\n  sideEffects: boolean;\n  namespace: string;\n  suffix: string;\n  pluginData: any;\n}\n\nexport interface OnStartResult {\n  errors?: PartialMessage[];\n  warnings?: PartialMessage[];\n}\n\nexport interface OnResolveOptions {\n  filter: RegExp;\n  namespace?: string;\n}\n\nexport interface OnResolveArgs {\n  path: string;\n  importer: string;\n  namespace: string;\n  resolveDir: string;\n  kind: ImportKind;\n  pluginData: any;\n}\n\nexport type ImportKind =\n  | 'entry-point'\n\n  // JS\n  | 'import-statement'\n  | 'require-call'\n  | 'dynamic-import'\n  | 'require-resolve'\n\n  // CSS\n  | 'import-rule'\n  | 'url-token'\n\nexport interface OnResolveResult {\n  pluginName?: string;\n\n  errors?: PartialMessage[];\n  warnings?: PartialMessage[];\n\n  path?: string;\n  external?: boolean;\n  sideEffects?: boolean;\n  namespace?: string;\n  suffix?: string;\n  pluginData?: any;\n\n  watchFiles?: string[];\n  watchDirs?: string[];\n}\n\nexport interface OnLoadOptions {\n  filter: RegExp;\n  namespace?: string;\n}\n\nexport interface OnLoadArgs {\n  path: string;\n  namespace: string;\n  suffix: string;\n  pluginData: any;\n}\n\nexport interface OnLoadResult {\n  pluginName?: string;\n\n  errors?: PartialMessage[];\n  warnings?: PartialMessage[];\n\n  contents?: string | Uint8Array;\n  resolveDir?: string;\n  loader?: Loader;\n  pluginData?: any;\n\n  watchFiles?: string[];\n  watchDirs?: string[];\n}\n\nexport interface PartialMessage {\n  id?: string;\n  pluginName?: string;\n  text?: string;\n  location?: Partial<Location> | null;\n  notes?: PartialNote[];\n  detail?: any;\n}\n\nexport interface PartialNote {\n  text?: string;\n  location?: Partial<Location> | null;\n}\n\nexport interface Metafile {\n  inputs: {\n    [path: string]: {\n      bytes: number\n      imports: {\n        path: string\n        kind: ImportKind\n      }[]\n    }\n  }\n  outputs: {\n    [path: string]: {\n      bytes: number\n      inputs: {\n        [path: string]: {\n          bytesInOutput: number\n        }\n      }\n      imports: {\n        path: string\n        kind: ImportKind\n      }[]\n      exports: string[]\n      entryPoint?: string\n      cssBundle?: string\n    }\n  }\n}\n\nexport interface FormatMessagesOptions {\n  kind: 'error' | 'warning';\n  color?: boolean;\n  terminalWidth?: number;\n}\n\nexport interface AnalyzeMetafileOptions {\n  color?: boolean;\n  verbose?: boolean;\n}\n\n/**\n * This function invokes the \"esbuild\" command-line tool for you. It returns a\n * promise that either resolves with a \"BuildResult\" object or rejects with a\n * \"BuildFailure\" object.\n *\n * - Works in node: yes\n * - Works in browser: yes\n *\n * Documentation: https://esbuild.github.io/api/#build-api\n */\nexport declare function build(options: BuildOptions & { write: false }): Promise<BuildResult & { outputFiles: OutputFile[] }>;\nexport declare function build(options: BuildOptions & { incremental: true, metafile: true }): Promise<BuildIncremental & { metafile: Metafile }>;\nexport declare function build(options: BuildOptions & { incremental: true }): Promise<BuildIncremental>;\nexport declare function build(options: BuildOptions & { metafile: true }): Promise<BuildResult & { metafile: Metafile }>;\nexport declare function build(options: BuildOptions): Promise<BuildResult>;\n\n/**\n * This function is similar to \"build\" but it serves the resulting files over\n * HTTP on a localhost address with the specified port.\n *\n * - Works in node: yes\n * - Works in browser: no\n *\n * Documentation: https://esbuild.github.io/api/#serve\n */\nexport declare function serve(serveOptions: ServeOptions, buildOptions: BuildOptions): Promise<ServeResult>;\n\n/**\n * This function transforms a single JavaScript file. It can be used to minify\n * JavaScript, convert TypeScript/JSX to JavaScript, or convert newer JavaScript\n * to older JavaScript. It returns a promise that is either resolved with a\n * \"TransformResult\" object or rejected with a \"TransformFailure\" object.\n *\n * - Works in node: yes\n * - Works in browser: yes\n *\n * Documentation: https://esbuild.github.io/api/#transform-api\n */\nexport declare function transform(input: string | Uint8Array, options?: TransformOptions): Promise<TransformResult>;\n\n/**\n * Converts log messages to formatted message strings suitable for printing in\n * the terminal. This allows you to reuse the built-in behavior of esbuild's\n * log message formatter. This is a batch-oriented API for efficiency.\n *\n * - Works in node: yes\n * - Works in browser: yes\n */\nexport declare function formatMessages(messages: PartialMessage[], options: FormatMessagesOptions): Promise<string[]>;\n\n/**\n * Pretty-prints an analysis of the metafile JSON to a string. This is just for\n * convenience to be able to match esbuild's pretty-printing exactly. If you want\n * to customize it, you can just inspect the data in the metafile yourself.\n *\n * - Works in node: yes\n * - Works in browser: yes\n *\n * Documentation: https://esbuild.github.io/api/#analyze\n */\nexport declare function analyzeMetafile(metafile: Metafile | string, options?: AnalyzeMetafileOptions): Promise<string>;\n\n/**\n * A synchronous version of \"build\".\n *\n * - Works in node: yes\n * - Works in browser: no\n *\n * Documentation: https://esbuild.github.io/api/#build-api\n */\nexport declare function buildSync(options: BuildOptions & { write: false }): BuildResult & { outputFiles: OutputFile[] };\nexport declare function buildSync(options: BuildOptions): BuildResult;\n\n/**\n * A synchronous version of \"transform\".\n *\n * - Works in node: yes\n * - Works in browser: no\n *\n * Documentation: https://esbuild.github.io/api/#transform-api\n */\nexport declare function transformSync(input: string, options?: TransformOptions): TransformResult;\n\n/**\n * A synchronous version of \"formatMessages\".\n *\n * - Works in node: yes\n * - Works in browser: no\n */\nexport declare function formatMessagesSync(messages: PartialMessage[], options: FormatMessagesOptions): string[];\n\n/**\n * A synchronous version of \"analyzeMetafile\".\n *\n * - Works in node: yes\n * - Works in browser: no\n *\n * Documentation: https://esbuild.github.io/api/#analyze\n */\nexport declare function analyzeMetafileSync(metafile: Metafile | string, options?: AnalyzeMetafileOptions): string;\n\n/**\n * This configures the browser-based version of esbuild. It is necessary to\n * call this first and wait for the returned promise to be resolved before\n * making other API calls when using esbuild in the browser.\n *\n * - Works in node: yes\n * - Works in browser: yes (\"options\" is required)\n *\n * Documentation: https://esbuild.github.io/api/#running-in-the-browser\n */\nexport declare function initialize(options: InitializeOptions): Promise<void>;\n\nexport interface InitializeOptions {\n  /**\n   * The URL of the \"esbuild.wasm\" file. This must be provided when running\n   * esbuild in the browser.\n   */\n  wasmURL?: string | URL\n\n  /**\n   * The result of calling \"new WebAssembly.Module(buffer)\" where \"buffer\"\n   * is a typed array or ArrayBuffer containing the binary code of the\n   * \"esbuild.wasm\" file.\n   *\n   * You can use this as an alternative to \"wasmURL\" for environments where it's\n   * not possible to download the WebAssembly module.\n   */\n  wasmModule?: WebAssembly.Module\n\n  /**\n   * By default esbuild runs the WebAssembly-based browser API in a web worker\n   * to avoid blocking the UI thread. This can be disabled by setting \"worker\"\n   * to false.\n   */\n  worker?: boolean\n}\n\nexport let version: string;\n/README.mdį# esbuild\n\nThis is a JavaScript bundler and minifier. See https://github.com/evanw/esbuild and the [JavaScript API documentation](https://esbuild.github.io/api/) for details.\n/bin/esbuild!#!/usr/bin/env node\n\"use strict\";\nvar __create = Object.create;\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __getProtoOf = Object.getPrototypeOf;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __copyProps = (to, from, except, desc) => {\n  if (from && typeof from === \"object\" || typeof from === \"function\") {\n    for (let key of __getOwnPropNames(from))\n      if (!__hasOwnProp.call(to, key) && key !== except)\n        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n  }\n  return to;\n};\nvar __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(\n  isNodeMode || !mod || !mod.__esModule ? __defProp(target, \"default\", { value: mod, enumerable: true }) : target,\n  mod\n));\n\n// lib/npm/node-platform.ts\nvar fs = require(\"fs\");\nvar os = require(\"os\");\nvar path = require(\"path\");\nvar ESBUILD_BINARY_PATH = process.env.ESBUILD_BINARY_PATH || ESBUILD_BINARY_PATH;\nvar packageDarwin_arm64 = \"esbuild-darwin-arm64\";\nvar packageDarwin_x64 = \"esbuild-darwin-64\";\nvar knownWindowsPackages = {\n  \"win32 arm64 LE\": \"esbuild-windows-arm64\",\n  \"win32 ia32 LE\": \"esbuild-windows-32\",\n  \"win32 x64 LE\": \"esbuild-windows-64\"\n};\nvar knownUnixlikePackages = {\n  \"android arm64 LE\": \"esbuild-android-arm64\",\n  \"darwin arm64 LE\": \"esbuild-darwin-arm64\",\n  \"darwin x64 LE\": \"esbuild-darwin-64\",\n  \"freebsd arm64 LE\": \"esbuild-freebsd-arm64\",\n  \"freebsd x64 LE\": \"esbuild-freebsd-64\",\n  \"linux arm LE\": \"esbuild-linux-arm\",\n  \"linux arm64 LE\": \"esbuild-linux-arm64\",\n  \"linux ia32 LE\": \"esbuild-linux-32\",\n  \"linux mips64el LE\": \"esbuild-linux-mips64le\",\n  \"linux ppc64 LE\": \"esbuild-linux-ppc64le\",\n  \"linux riscv64 LE\": \"esbuild-linux-riscv64\",\n  \"linux s390x BE\": \"esbuild-linux-s390x\",\n  \"linux x64 LE\": \"esbuild-linux-64\",\n  \"linux loong64 LE\": \"@esbuild/linux-loong64\",\n  \"netbsd x64 LE\": \"esbuild-netbsd-64\",\n  \"openbsd x64 LE\": \"esbuild-openbsd-64\",\n  \"sunos x64 LE\": \"esbuild-sunos-64\"\n};\nvar knownWebAssemblyFallbackPackages = {\n  \"android arm LE\": \"@esbuild/android-arm\",\n  \"android x64 LE\": \"esbuild-android-64\"\n};\nfunction pkgAndSubpathForCurrentPlatform() {\n  let pkg;\n  let subpath;\n  let isWASM2 = false;\n  let platformKey = `${process.platform} ${os.arch()} ${os.endianness()}`;\n  if (platformKey in knownWindowsPackages) {\n    pkg = knownWindowsPackages[platformKey];\n    subpath = \"esbuild.exe\";\n  } else if (platformKey in knownUnixlikePackages) {\n    pkg = knownUnixlikePackages[platformKey];\n    subpath = \"bin/esbuild\";\n  } else if (platformKey in knownWebAssemblyFallbackPackages) {\n    pkg = knownWebAssemblyFallbackPackages[platformKey];\n    subpath = \"bin/esbuild\";\n    isWASM2 = true;\n  } else {\n    throw new Error(`Unsupported platform: ${platformKey}`);\n  }\n  return { pkg, subpath, isWASM: isWASM2 };\n}\nfunction pkgForSomeOtherPlatform() {\n  const libMainJS = require.resolve(\"esbuild\");\n  const nodeModulesDirectory = path.dirname(path.dirname(path.dirname(libMainJS)));\n  if (path.basename(nodeModulesDirectory) === \"node_modules\") {\n    for (const unixKey in knownUnixlikePackages) {\n      try {\n        const pkg = knownUnixlikePackages[unixKey];\n        if (fs.existsSync(path.join(nodeModulesDirectory, pkg)))\n          return pkg;\n      } catch {\n      }\n    }\n    for (const windowsKey in knownWindowsPackages) {\n      try {\n        const pkg = knownWindowsPackages[windowsKey];\n        if (fs.existsSync(path.join(nodeModulesDirectory, pkg)))\n          return pkg;\n      } catch {\n      }\n    }\n  }\n  return null;\n}\nfunction downloadedBinPath(pkg, subpath) {\n  const esbuildLibDir = path.dirname(require.resolve(\"esbuild\"));\n  return path.join(esbuildLibDir, `downloaded-${pkg}-${path.basename(subpath)}`);\n}\nfunction generateBinPath() {\n  if (ESBUILD_BINARY_PATH) {\n    return { binPath: ESBUILD_BINARY_PATH, isWASM: false };\n  }\n  const { pkg, subpath, isWASM: isWASM2 } = pkgAndSubpathForCurrentPlatform();\n  let binPath2;\n  try {\n    binPath2 = require.resolve(`${pkg}/${subpath}`);\n  } catch (e) {\n    binPath2 = downloadedBinPath(pkg, subpath);\n    if (!fs.existsSync(binPath2)) {\n      try {\n        require.resolve(pkg);\n      } catch {\n        const otherPkg = pkgForSomeOtherPlatform();\n        if (otherPkg) {\n          let suggestions = `\nSpecifically the \"${otherPkg}\" package is present but this platform\nneeds the \"${pkg}\" package instead. People often get into this\nsituation by installing esbuild on Windows or macOS and copying \"node_modules\"\ninto a Docker image that runs Linux, or by copying \"node_modules\" between\nWindows and WSL environments.\n\nIf you are installing with npm, you can try not copying the \"node_modules\"\ndirectory when you copy the files over, and running \"npm ci\" or \"npm install\"\non the destination platform after the copy. Or you could consider using yarn\ninstead of npm which has built-in support for installing a package on multiple\nplatforms simultaneously.\n\nIf you are installing with yarn, you can try listing both this platform and the\nother platform in your \".yarnrc.yml\" file using the \"supportedArchitectures\"\nfeature: https://yarnpkg.com/configuration/yarnrc/#supportedArchitectures\nKeep in mind that this means multiple copies of esbuild will be present.\n`;\n          if (pkg === packageDarwin_x64 && otherPkg === packageDarwin_arm64 || pkg === packageDarwin_arm64 && otherPkg === packageDarwin_x64) {\n            suggestions = `\nSpecifically the \"${otherPkg}\" package is present but this platform\nneeds the \"${pkg}\" package instead. People often get into this\nsituation by installing esbuild with npm running inside of Rosetta 2 and then\ntrying to use it with node running outside of Rosetta 2, or vice versa (Rosetta\n2 is Apple's on-the-fly x86_64-to-arm64 translation service).\n\nIf you are installing with npm, you can try ensuring that both npm and node are\nnot running under Rosetta 2 and then reinstalling esbuild. This likely involves\nchanging how you installed npm and/or node. For example, installing node with\nthe universal installer here should work: https://nodejs.org/en/download/. Or\nyou could consider using yarn instead of npm which has built-in support for\ninstalling a package on multiple platforms simultaneously.\n\nIf you are installing with yarn, you can try listing both \"arm64\" and \"x64\"\nin your \".yarnrc.yml\" file using the \"supportedArchitectures\" feature:\nhttps://yarnpkg.com/configuration/yarnrc/#supportedArchitectures\nKeep in mind that this means multiple copies of esbuild will be present.\n`;\n          }\n          throw new Error(`\nYou installed esbuild for another platform than the one you're currently using.\nThis won't work because esbuild is written with native code and needs to\ninstall a platform-specific binary executable.\n${suggestions}\nAnother alternative is to use the \"esbuild-wasm\" package instead, which works\nthe same way on all platforms. But it comes with a heavy performance cost and\ncan sometimes be 10x slower than the \"esbuild\" package, so you may also not\nwant to do that.\n`);\n        }\n        throw new Error(`The package \"${pkg}\" could not be found, and is needed by esbuild.\n\nIf you are installing esbuild with npm, make sure that you don't specify the\n\"--no-optional\" or \"--omit=optional\" flags. The \"optionalDependencies\" feature\nof \"package.json\" is used by esbuild to install the correct binary executable\nfor your current platform.`);\n      }\n      throw e;\n    }\n  }\n  if (/\\.zip\\//.test(binPath2)) {\n    let pnpapi;\n    try {\n      pnpapi = require(\"pnpapi\");\n    } catch (e) {\n    }\n    if (pnpapi) {\n      const root = pnpapi.getPackageInformation(pnpapi.topLevel).packageLocation;\n      const binTargetPath = path.join(\n        root,\n        \"node_modules\",\n        \".cache\",\n        \"esbuild\",\n        `pnpapi-${pkg}-${\"0.15.18\"}-${path.basename(subpath)}`\n      );\n      if (!fs.existsSync(binTargetPath)) {\n        fs.mkdirSync(path.dirname(binTargetPath), { recursive: true });\n        fs.copyFileSync(binPath2, binTargetPath);\n        fs.chmodSync(binTargetPath, 493);\n      }\n      return { binPath: binTargetPath, isWASM: isWASM2 };\n    }\n  }\n  return { binPath: binPath2, isWASM: isWASM2 };\n}\n\n// lib/npm/node-shim.ts\nvar { binPath, isWASM } = generateBinPath();\nif (isWASM) {\n  require(\"child_process\").execFileSync(\"node\", [binPath].concat(process.argv.slice(2)), { stdio: \"inherit\" });\n} else {\n  require(\"child_process\").execFileSync(binPath, process.argv.slice(2), { stdio: \"inherit\" });\n}\n/lib/main.js\u0000\u0001C\"use strict\";\nvar __create = Object.create;\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __getProtoOf = Object.getPrototypeOf;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n  for (var name in all)\n    __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n  if (from && typeof from === \"object\" || typeof from === \"function\") {\n    for (let key of __getOwnPropNames(from))\n      if (!__hasOwnProp.call(to, key) && key !== except)\n        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n  }\n  return to;\n};\nvar __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(\n  isNodeMode || !mod || !mod.__esModule ? __defProp(target, \"default\", { value: mod, enumerable: true }) : target,\n  mod\n));\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\n\n// lib/npm/node.ts\nvar node_exports = {};\n__export(node_exports, {\n  analyzeMetafile: () => analyzeMetafile,\n  analyzeMetafileSync: () => analyzeMetafileSync,\n  build: () => build,\n  buildSync: () => buildSync,\n  default: () => node_default,\n  formatMessages: () => formatMessages,\n  formatMessagesSync: () => formatMessagesSync,\n  initialize: () => initialize,\n  serve: () => serve,\n  transform: () => transform,\n  transformSync: () => transformSync,\n  version: () => version\n});\nmodule.exports = __toCommonJS(node_exports);\n\n// lib/shared/stdio_protocol.ts\nfunction encodePacket(packet) {\n  let visit = (value) => {\n    if (value === null) {\n      bb.write8(0);\n    } else if (typeof value === \"boolean\") {\n      bb.write8(1);\n      bb.write8(+value);\n    } else if (typeof value === \"number\") {\n      bb.write8(2);\n      bb.write32(value | 0);\n    } else if (typeof value === \"string\") {\n      bb.write8(3);\n      bb.write(encodeUTF8(value));\n    } else if (value instanceof Uint8Array) {\n      bb.write8(4);\n      bb.write(value);\n    } else if (value instanceof Array) {\n      bb.write8(5);\n      bb.write32(value.length);\n      for (let item of value) {\n        visit(item);\n      }\n    } else {\n      let keys = Object.keys(value);\n      bb.write8(6);\n      bb.write32(keys.length);\n      for (let key of keys) {\n        bb.write(encodeUTF8(key));\n        visit(value[key]);\n      }\n    }\n  };\n  let bb = new ByteBuffer();\n  bb.write32(0);\n  bb.write32(packet.id << 1 | +!packet.isRequest);\n  visit(packet.value);\n  writeUInt32LE(bb.buf, bb.len - 4, 0);\n  return bb.buf.subarray(0, bb.len);\n}\nfunction decodePacket(bytes) {\n  let visit = () => {\n    switch (bb.read8()) {\n      case 0:\n        return null;\n      case 1:\n        return !!bb.read8();\n      case 2:\n        return bb.read32();\n      case 3:\n        return decodeUTF8(bb.read());\n      case 4:\n        return bb.read();\n      case 5: {\n        let count = bb.read32();\n        let value2 = [];\n        for (let i = 0; i < count; i++) {\n          value2.push(visit());\n        }\n        return value2;\n      }\n      case 6: {\n        let count = bb.read32();\n        let value2 = {};\n        for (let i = 0; i < count; i++) {\n          value2[decodeUTF8(bb.read())] = visit();\n        }\n        return value2;\n      }\n      default:\n        throw new Error(\"Invalid packet\");\n    }\n  };\n  let bb = new ByteBuffer(bytes);\n  let id = bb.read32();\n  let isRequest = (id & 1) === 0;\n  id >>>= 1;\n  let value = visit();\n  if (bb.ptr !== bytes.length) {\n    throw new Error(\"Invalid packet\");\n  }\n  return { id, isRequest, value };\n}\nvar ByteBuffer = class {\n  constructor(buf = new Uint8Array(1024)) {\n    this.buf = buf;\n    this.len = 0;\n    this.ptr = 0;\n  }\n  _write(delta) {\n    if (this.len + delta > this.buf.length) {\n      let clone = new Uint8Array((this.len + delta) * 2);\n      clone.set(this.buf);\n      this.buf = clone;\n    }\n    this.len += delta;\n    return this.len - delta;\n  }\n  write8(value) {\n    let offset = this._write(1);\n    this.buf[offset] = value;\n  }\n  write32(value) {\n    let offset = this._write(4);\n    writeUInt32LE(this.buf, value, offset);\n  }\n  write(bytes) {\n    let offset = this._write(4 + bytes.length);\n    writeUInt32LE(this.buf, bytes.length, offset);\n    this.buf.set(bytes, offset + 4);\n  }\n  _read(delta) {\n    if (this.ptr + delta > this.buf.length) {\n      throw new Error(\"Invalid packet\");\n    }\n    this.ptr += delta;\n    return this.ptr - delta;\n  }\n  read8() {\n    return this.buf[this._read(1)];\n  }\n  read32() {\n    return readUInt32LE(this.buf, this._read(4));\n  }\n  read() {\n    let length = this.read32();\n    let bytes = new Uint8Array(length);\n    let ptr = this._read(bytes.length);\n    bytes.set(this.buf.subarray(ptr, ptr + length));\n    return bytes;\n  }\n};\nvar encodeUTF8;\nvar decodeUTF8;\nif (typeof TextEncoder !== \"undefined\" && typeof TextDecoder !== \"undefined\") {\n  let encoder = new TextEncoder();\n  let decoder = new TextDecoder();\n  encodeUTF8 = (text) => encoder.encode(text);\n  decodeUTF8 = (bytes) => decoder.decode(bytes);\n} else if (typeof Buffer !== \"undefined\") {\n  encodeUTF8 = (text) => {\n    let buffer = Buffer.from(text);\n    if (!(buffer instanceof Uint8Array)) {\n      buffer = new Uint8Array(buffer);\n    }\n    return buffer;\n  };\n  decodeUTF8 = (bytes) => {\n    let { buffer, byteOffset, byteLength } = bytes;\n    return Buffer.from(buffer, byteOffset, byteLength).toString();\n  };\n} else {\n  throw new Error(\"No UTF-8 codec found\");\n}\nfunction readUInt32LE(buffer, offset) {\n  return buffer[offset++] | buffer[offset++] << 8 | buffer[offset++] << 16 | buffer[offset++] << 24;\n}\nfunction writeUInt32LE(buffer, value, offset) {\n  buffer[offset++] = value;\n  buffer[offset++] = value >> 8;\n  buffer[offset++] = value >> 16;\n  buffer[offset++] = value >> 24;\n}\n\n// lib/shared/common.ts\nvar buildLogLevelDefault = \"warning\";\nvar transformLogLevelDefault = \"silent\";\nfunction validateTarget(target) {\n  target += \"\";\n  if (target.indexOf(\",\") >= 0)\n    throw new Error(`Invalid target: ${target}`);\n  return target;\n}\nvar canBeAnything = () => null;\nvar mustBeBoolean = (value) => typeof value === \"boolean\" ? null : \"a boolean\";\nvar mustBeBooleanOrObject = (value) => typeof value === \"boolean\" || typeof value === \"object\" && !Array.isArray(value) ? null : \"a boolean or an object\";\nvar mustBeString = (value) => typeof value === \"string\" ? null : \"a string\";\nvar mustBeRegExp = (value) => value instanceof RegExp ? null : \"a RegExp object\";\nvar mustBeInteger = (value) => typeof value === \"number\" && value === (value | 0) ? null : \"an integer\";\nvar mustBeFunction = (value) => typeof value === \"function\" ? null : \"a function\";\nvar mustBeArray = (value) => Array.isArray(value) ? null : \"an array\";\nvar mustBeObject = (value) => typeof value === \"object\" && value !== null && !Array.isArray(value) ? null : \"an object\";\nvar mustBeWebAssemblyModule = (value) => value instanceof WebAssembly.Module ? null : \"a WebAssembly.Module\";\nvar mustBeArrayOrRecord = (value) => typeof value === \"object\" && value !== null ? null : \"an array or an object\";\nvar mustBeObjectOrNull = (value) => typeof value === \"object\" && !Array.isArray(value) ? null : \"an object or null\";\nvar mustBeStringOrBoolean = (value) => typeof value === \"string\" || typeof value === \"boolean\" ? null : \"a string or a boolean\";\nvar mustBeStringOrObject = (value) => typeof value === \"string\" || typeof value === \"object\" && value !== null && !Array.isArray(value) ? null : \"a string or an object\";\nvar mustBeStringOrArray = (value) => typeof value === \"string\" || Array.isArray(value) ? null : \"a string or an array\";\nvar mustBeStringOrUint8Array = (value) => typeof value === \"string\" || value instanceof Uint8Array ? null : \"a string or a Uint8Array\";\nvar mustBeStringOrURL = (value) => typeof value === \"string\" || value instanceof URL ? null : \"a string or a URL\";\nfunction getFlag(object, keys, key, mustBeFn) {\n  let value = object[key];\n  keys[key + \"\"] = true;\n  if (value === void 0)\n    return void 0;\n  let mustBe = mustBeFn(value);\n  if (mustBe !== null)\n    throw new Error(`\"${key}\" must be ${mustBe}`);\n  return value;\n}\nfunction checkForInvalidFlags(object, keys, where) {\n  for (let key in object) {\n    if (!(key in keys)) {\n      throw new Error(`Invalid option ${where}: \"${key}\"`);\n    }\n  }\n}\nfunction validateInitializeOptions(options) {\n  let keys = /* @__PURE__ */ Object.create(null);\n  let wasmURL = getFlag(options, keys, \"wasmURL\", mustBeStringOrURL);\n  let wasmModule = getFlag(options, keys, \"wasmModule\", mustBeWebAssemblyModule);\n  let worker = getFlag(options, keys, \"worker\", mustBeBoolean);\n  checkForInvalidFlags(options, keys, \"in initialize() call\");\n  return {\n    wasmURL,\n    wasmModule,\n    worker\n  };\n}\nfunction validateMangleCache(mangleCache) {\n  let validated;\n  if (mangleCache !== void 0) {\n    validated = /* @__PURE__ */ Object.create(null);\n    for (let key of Object.keys(mangleCache)) {\n      let value = mangleCache[key];\n      if (typeof value === \"string\" || value === false) {\n        validated[key] = value;\n      } else {\n        throw new Error(`Expected ${JSON.stringify(key)} in mangle cache to map to either a string or false`);\n      }\n    }\n  }\n  return validated;\n}\nfunction pushLogFlags(flags, options, keys, isTTY2, logLevelDefault) {\n  let color = getFlag(options, keys, \"color\", mustBeBoolean);\n  let logLevel = getFlag(options, keys, \"logLevel\", mustBeString);\n  let logLimit = getFlag(options, keys, \"logLimit\", mustBeInteger);\n  if (color !== void 0)\n    flags.push(`--color=${color}`);\n  else if (isTTY2)\n    flags.push(`--color=true`);\n  flags.push(`--log-level=${logLevel || logLevelDefault}`);\n  flags.push(`--log-limit=${logLimit || 0}`);\n}\nfunction pushCommonFlags(flags, options, keys) {\n  let legalComments = getFlag(options, keys, \"legalComments\", mustBeString);\n  let sourceRoot = getFlag(options, keys, \"sourceRoot\", mustBeString);\n  let sourcesContent = getFlag(options, keys, \"sourcesContent\", mustBeBoolean);\n  let target = getFlag(options, keys, \"target\", mustBeStringOrArray);\n  let format = getFlag(options, keys, \"format\", mustBeString);\n  let globalName = getFlag(options, keys, \"globalName\", mustBeString);\n  let mangleProps = getFlag(options, keys, \"mangleProps\", mustBeRegExp);\n  let reserveProps = getFlag(options, keys, \"reserveProps\", mustBeRegExp);\n  let mangleQuoted = getFlag(options, keys, \"mangleQuoted\", mustBeBoolean);\n  let minify = getFlag(options, keys, \"minify\", mustBeBoolean);\n  let minifySyntax = getFlag(options, keys, \"minifySyntax\", mustBeBoolean);\n  let minifyWhitespace = getFlag(options, keys, \"minifyWhitespace\", mustBeBoolean);\n  let minifyIdentifiers = getFlag(options, keys, \"minifyIdentifiers\", mustBeBoolean);\n  let drop = getFlag(options, keys, \"drop\", mustBeArray);\n  let charset = getFlag(options, keys, \"charset\", mustBeString);\n  let treeShaking = getFlag(options, keys, \"treeShaking\", mustBeBoolean);\n  let ignoreAnnotations = getFlag(options, keys, \"ignoreAnnotations\", mustBeBoolean);\n  let jsx = getFlag(options, keys, \"jsx\", mustBeString);\n  let jsxFactory = getFlag(options, keys, \"jsxFactory\", mustBeString);\n  let jsxFragment = getFlag(options, keys, \"jsxFragment\", mustBeString);\n  let jsxImportSource = getFlag(options, keys, \"jsxImportSource\", mustBeString);\n  let jsxDev = getFlag(options, keys, \"jsxDev\", mustBeBoolean);\n  let jsxSideEffects = getFlag(options, keys, \"jsxSideEffects\", mustBeBoolean);\n  let define = getFlag(options, keys, \"define\", mustBeObject);\n  let logOverride = getFlag(options, keys, \"logOverride\", mustBeObject);\n  let supported = getFlag(options, keys, \"supported\", mustBeObject);\n  let pure = getFlag(options, keys, \"pure\", mustBeArray);\n  let keepNames = getFlag(options, keys, \"keepNames\", mustBeBoolean);\n  let platform = getFlag(options, keys, \"platform\", mustBeString);\n  if (legalComments)\n    flags.push(`--legal-comments=${legalComments}`);\n  if (sourceRoot !== void 0)\n    flags.push(`--source-root=${sourceRoot}`);\n  if (sourcesContent !== void 0)\n    flags.push(`--sources-content=${sourcesContent}`);\n  if (target) {\n    if (Array.isArray(target))\n      flags.push(`--target=${Array.from(target).map(validateTarget).join(\",\")}`);\n    else\n      flags.push(`--target=${validateTarget(target)}`);\n  }\n  if (format)\n    flags.push(`--format=${format}`);\n  if (globalName)\n    flags.push(`--global-name=${globalName}`);\n  if (platform)\n    flags.push(`--platform=${platform}`);\n  if (minify)\n    flags.push(\"--minify\");\n  if (minifySyntax)\n    flags.push(\"--minify-syntax\");\n  if (minifyWhitespace)\n    flags.push(\"--minify-whitespace\");\n  if (minifyIdentifiers)\n    flags.push(\"--minify-identifiers\");\n  if (charset)\n    flags.push(`--charset=${charset}`);\n  if (treeShaking !== void 0)\n    flags.push(`--tree-shaking=${treeShaking}`);\n  if (ignoreAnnotations)\n    flags.push(`--ignore-annotations`);\n  if (drop)\n    for (let what of drop)\n      flags.push(`--drop:${what}`);\n  if (mangleProps)\n    flags.push(`--mangle-props=${mangleProps.source}`);\n  if (reserveProps)\n    flags.push(`--reserve-props=${reserveProps.source}`);\n  if (mangleQuoted !== void 0)\n    flags.push(`--mangle-quoted=${mangleQuoted}`);\n  if (jsx)\n    flags.push(`--jsx=${jsx}`);\n  if (jsxFactory)\n    flags.push(`--jsx-factory=${jsxFactory}`);\n  if (jsxFragment)\n    flags.push(`--jsx-fragment=${jsxFragment}`);\n  if (jsxImportSource)\n    flags.push(`--jsx-import-source=${jsxImportSource}`);\n  if (jsxDev)\n    flags.push(`--jsx-dev`);\n  if (jsxSideEffects)\n    flags.push(`--jsx-side-effects`);\n  if (define) {\n    for (let key in define) {\n      if (key.indexOf(\"=\") >= 0)\n        throw new Error(`Invalid define: ${key}`);\n      flags.push(`--define:${key}=${define[key]}`);\n    }\n  }\n  if (logOverride) {\n    for (let key in logOverride) {\n      if (key.indexOf(\"=\") >= 0)\n        throw new Error(`Invalid log override: ${key}`);\n      flags.push(`--log-override:${key}=${logOverride[key]}`);\n    }\n  }\n  if (supported) {\n    for (let key in supported) {\n      if (key.indexOf(\"=\") >= 0)\n        throw new Error(`Invalid supported: ${key}`);\n      flags.push(`--supported:${key}=${supported[key]}`);\n    }\n  }\n  if (pure)\n    for (let fn of pure)\n      flags.push(`--pure:${fn}`);\n  if (keepNames)\n    flags.push(`--keep-names`);\n}\nfunction flagsForBuildOptions(callName, options, isTTY2, logLevelDefault, writeDefault) {\n  var _a2;\n  let flags = [];\n  let entries = [];\n  let keys = /* @__PURE__ */ Object.create(null);\n  let stdinContents = null;\n  let stdinResolveDir = null;\n  let watchMode = null;\n  pushLogFlags(flags, options, keys, isTTY2, logLevelDefault);\n  pushCommonFlags(flags, options, keys);\n  let sourcemap = getFlag(options, keys, \"sourcemap\", mustBeStringOrBoolean);\n  let bundle = getFlag(options, keys, \"bundle\", mustBeBoolean);\n  let watch = getFlag(options, keys, \"watch\", mustBeBooleanOrObject);\n  let splitting = getFlag(options, keys, \"splitting\", mustBeBoolean);\n  let preserveSymlinks = getFlag(options, keys, \"preserveSymlinks\", mustBeBoolean);\n  let metafile = getFlag(options, keys, \"metafile\", mustBeBoolean);\n  let outfile = getFlag(options, keys, \"outfile\", mustBeString);\n  let outdir = getFlag(options, keys, \"outdir\", mustBeString);\n  let outbase = getFlag(options, keys, \"outbase\", mustBeString);\n  let tsconfig = getFlag(options, keys, \"tsconfig\", mustBeString);\n  let resolveExtensions = getFlag(options, keys, \"resolveExtensions\", mustBeArray);\n  let nodePathsInput = getFlag(options, keys, \"nodePaths\", mustBeArray);\n  let mainFields = getFlag(options, keys, \"mainFields\", mustBeArray);\n  let conditions = getFlag(options, keys, \"conditions\", mustBeArray);\n  let external = getFlag(options, keys, \"external\", mustBeArray);\n  let alias = getFlag(options, keys, \"alias\", mustBeObject);\n  let loader = getFlag(options, keys, \"loader\", mustBeObject);\n  let outExtension = getFlag(options, keys, \"outExtension\", mustBeObject);\n  let publicPath = getFlag(options, keys, \"publicPath\", mustBeString);\n  let entryNames = getFlag(options, keys, \"entryNames\", mustBeString);\n  let chunkNames = getFlag(options, keys, \"chunkNames\", mustBeString);\n  let assetNames = getFlag(options, keys, \"assetNames\", mustBeString);\n  let inject = getFlag(options, keys, \"inject\", mustBeArray);\n  let banner = getFlag(options, keys, \"banner\", mustBeObject);\n  let footer = getFlag(options, keys, \"footer\", mustBeObject);\n  let entryPoints = getFlag(options, keys, \"entryPoints\", mustBeArrayOrRecord);\n  let absWorkingDir = getFlag(options, keys, \"absWorkingDir\", mustBeString);\n  let stdin = getFlag(options, keys, \"stdin\", mustBeObject);\n  let write = (_a2 = getFlag(options, keys, \"write\", mustBeBoolean)) != null ? _a2 : writeDefault;\n  let allowOverwrite = getFlag(options, keys, \"allowOverwrite\", mustBeBoolean);\n  let incremental = getFlag(options, keys, \"incremental\", mustBeBoolean) === true;\n  let mangleCache = getFlag(options, keys, \"mangleCache\", mustBeObject);\n  keys.plugins = true;\n  checkForInvalidFlags(options, keys, `in ${callName}() call`);\n  if (sourcemap)\n    flags.push(`--sourcemap${sourcemap === true ? \"\" : `=${sourcemap}`}`);\n  if (bundle)\n    flags.push(\"--bundle\");\n  if (allowOverwrite)\n    flags.push(\"--allow-overwrite\");\n  if (watch) {\n    flags.push(\"--watch\");\n    if (typeof watch === \"boolean\") {\n      watchMode = {};\n    } else {\n      let watchKeys = /* @__PURE__ */ Object.create(null);\n      let onRebuild = getFlag(watch, watchKeys, \"onRebuild\", mustBeFunction);\n      checkForInvalidFlags(watch, watchKeys, `on \"watch\" in ${callName}() call`);\n      watchMode = { onRebuild };\n    }\n  }\n  if (splitting)\n    flags.push(\"--splitting\");\n  if (preserveSymlinks)\n    flags.push(\"--preserve-symlinks\");\n  if (metafile)\n    flags.push(`--metafile`);\n  if (outfile)\n    flags.push(`--outfile=${outfile}`);\n  if (outdir)\n    flags.push(`--outdir=${outdir}`);\n  if (outbase)\n    flags.push(`--outbase=${outbase}`);\n  if (tsconfig)\n    flags.push(`--tsconfig=${tsconfig}`);\n  if (resolveExtensions) {\n    let values = [];\n    for (let value of resolveExtensions) {\n      value += \"\";\n      if (value.indexOf(\",\") >= 0)\n        throw new Error(`Invalid resolve extension: ${value}`);\n      values.push(value);\n    }\n    flags.push(`--resolve-extensions=${values.join(\",\")}`);\n  }\n  if (publicPath)\n    flags.push(`--public-path=${publicPath}`);\n  if (entryNames)\n    flags.push(`--entry-names=${entryNames}`);\n  if (chunkNames)\n    flags.push(`--chunk-names=${chunkNames}`);\n  if (assetNames)\n    flags.push(`--asset-names=${assetNames}`);\n  if (mainFields) {\n    let values = [];\n    for (let value of mainFields) {\n      value += \"\";\n      if (value.indexOf(\",\") >= 0)\n        throw new Error(`Invalid main field: ${value}`);\n      values.push(value);\n    }\n    flags.push(`--main-fields=${values.join(\",\")}`);\n  }\n  if (conditions) {\n    let values = [];\n    for (let value of conditions) {\n      value += \"\";\n      if (value.indexOf(\",\") >= 0)\n        throw new Error(`Invalid condition: ${value}`);\n      values.push(value);\n    }\n    flags.push(`--conditions=${values.join(\",\")}`);\n  }\n  if (external)\n    for (let name of external)\n      flags.push(`--external:${name}`);\n  if (alias) {\n    for (let old in alias) {\n      if (old.indexOf(\"=\") >= 0)\n        throw new Error(`Invalid package name in alias: ${old}`);\n      flags.push(`--alias:${old}=${alias[old]}`);\n    }\n  }\n  if (banner) {\n    for (let type in banner) {\n      if (type.indexOf(\"=\") >= 0)\n        throw new Error(`Invalid banner file type: ${type}`);\n      flags.push(`--banner:${type}=${banner[type]}`);\n    }\n  }\n  if (footer) {\n    for (let type in footer) {\n      if (type.indexOf(\"=\") >= 0)\n        throw new Error(`Invalid footer file type: ${type}`);\n      flags.push(`--footer:${type}=${footer[type]}`);\n    }\n  }\n  if (inject)\n    for (let path3 of inject)\n      flags.push(`--inject:${path3}`);\n  if (loader) {\n    for (let ext in loader) {\n      if (ext.indexOf(\"=\") >= 0)\n        throw new Error(`Invalid loader extension: ${ext}`);\n      flags.push(`--loader:${ext}=${loader[ext]}`);\n    }\n  }\n  if (outExtension) {\n    for (let ext in outExtension) {\n      if (ext.indexOf(\"=\") >= 0)\n        throw new Error(`Invalid out extension: ${ext}`);\n      flags.push(`--out-extension:${ext}=${outExtension[ext]}`);\n    }\n  }\n  if (entryPoints) {\n    if (Array.isArray(entryPoints)) {\n      for (let entryPoint of entryPoints) {\n        entries.push([\"\", entryPoint + \"\"]);\n      }\n    } else {\n      for (let [key, value] of Object.entries(entryPoints)) {\n        entries.push([key + \"\", value + \"\"]);\n      }\n    }\n  }\n  if (stdin) {\n    let stdinKeys = /* @__PURE__ */ Object.create(null);\n    let contents = getFlag(stdin, stdinKeys, \"contents\", mustBeStringOrUint8Array);\n    let resolveDir = getFlag(stdin, stdinKeys, \"resolveDir\", mustBeString);\n    let sourcefile = getFlag(stdin, stdinKeys, \"sourcefile\", mustBeString);\n    let loader2 = getFlag(stdin, stdinKeys, \"loader\", mustBeString);\n    checkForInvalidFlags(stdin, stdinKeys, 'in \"stdin\" object');\n    if (sourcefile)\n      flags.push(`--sourcefile=${sourcefile}`);\n    if (loader2)\n      flags.push(`--loader=${loader2}`);\n    if (resolveDir)\n      stdinResolveDir = resolveDir + \"\";\n    if (typeof contents === \"string\")\n      stdinContents = encodeUTF8(contents);\n    else if (contents instanceof Uint8Array)\n      stdinContents = contents;\n  }\n  let nodePaths = [];\n  if (nodePathsInput) {\n    for (let value of nodePathsInput) {\n      value += \"\";\n      nodePaths.push(value);\n    }\n  }\n  return {\n    entries,\n    flags,\n    write,\n    stdinContents,\n    stdinResolveDir,\n    absWorkingDir,\n    incremental,\n    nodePaths,\n    watch: watchMode,\n    mangleCache: validateMangleCache(mangleCache)\n  };\n}\nfunction flagsForTransformOptions(callName, options, isTTY2, logLevelDefault) {\n  let flags = [];\n  let keys = /* @__PURE__ */ Object.create(null);\n  pushLogFlags(flags, options, keys, isTTY2, logLevelDefault);\n  pushCommonFlags(flags, options, keys);\n  let sourcemap = getFlag(options, keys, \"sourcemap\", mustBeStringOrBoolean);\n  let tsconfigRaw = getFlag(options, keys, \"tsconfigRaw\", mustBeStringOrObject);\n  let sourcefile = getFlag(options, keys, \"sourcefile\", mustBeString);\n  let loader = getFlag(options, keys, \"loader\", mustBeString);\n  let banner = getFlag(options, keys, \"banner\", mustBeString);\n  let footer = getFlag(options, keys, \"footer\", mustBeString);\n  let mangleCache = getFlag(options, keys, \"mangleCache\", mustBeObject);\n  checkForInvalidFlags(options, keys, `in ${callName}() call`);\n  if (sourcemap)\n    flags.push(`--sourcemap=${sourcemap === true ? \"external\" : sourcemap}`);\n  if (tsconfigRaw)\n    flags.push(`--tsconfig-raw=${typeof tsconfigRaw === \"string\" ? tsconfigRaw : JSON.stringify(tsconfigRaw)}`);\n  if (sourcefile)\n    flags.push(`--sourcefile=${sourcefile}`);\n  if (loader)\n    flags.push(`--loader=${loader}`);\n  if (banner)\n    flags.push(`--banner=${banner}`);\n  if (footer)\n    flags.push(`--footer=${footer}`);\n  return {\n    flags,\n    mangleCache: validateMangleCache(mangleCache)\n  };\n}\nfunction createChannel(streamIn) {\n  const requestCallbacksByKey = {};\n  const closeData = { didClose: false, reason: \"\" };\n  let responseCallbacks = {};\n  let nextRequestID = 0;\n  let nextBuildKey = 0;\n  let stdout = new Uint8Array(16 * 1024);\n  let stdoutUsed = 0;\n  let readFromStdout = (chunk) => {\n    let limit = stdoutUsed + chunk.length;\n    if (limit > stdout.length) {\n      let swap = new Uint8Array(limit * 2);\n      swap.set(stdout);\n      stdout = swap;\n    }\n    stdout.set(chunk, stdoutUsed);\n    stdoutUsed += chunk.length;\n    let offset = 0;\n    while (offset + 4 <= stdoutUsed) {\n      let length = readUInt32LE(stdout, offset);\n      if (offset + 4 + length > stdoutUsed) {\n        break;\n      }\n      offset += 4;\n      handleIncomingPacket(stdout.subarray(offset, offset + length));\n      offset += length;\n    }\n    if (offset > 0) {\n      stdout.copyWithin(0, offset, stdoutUsed);\n      stdoutUsed -= offset;\n    }\n  };\n  let afterClose = (error) => {\n    closeData.didClose = true;\n    if (error)\n      closeData.reason = \": \" + (error.message || error);\n    const text = \"The service was stopped\" + closeData.reason;\n    for (let id in responseCallbacks) {\n      responseCallbacks[id](text, null);\n    }\n    responseCallbacks = {};\n  };\n  let sendRequest = (refs, value, callback) => {\n    if (closeData.didClose)\n      return callback(\"The service is no longer running\" + closeData.reason, null);\n    let id = nextRequestID++;\n    responseCallbacks[id] = (error, response) => {\n      try {\n        callback(error, response);\n      } finally {\n        if (refs)\n          refs.unref();\n      }\n    };\n    if (refs)\n      refs.ref();\n    streamIn.writeToStdin(encodePacket({ id, isRequest: true, value }));\n  };\n  let sendResponse = (id, value) => {\n    if (closeData.didClose)\n      throw new Error(\"The service is no longer running\" + closeData.reason);\n    streamIn.writeToStdin(encodePacket({ id, isRequest: false, value }));\n  };\n  let handleRequest = async (id, request) => {\n    try {\n      if (request.command === \"ping\") {\n        sendResponse(id, {});\n        return;\n      }\n      if (typeof request.key === \"number\") {\n        const requestCallbacks = requestCallbacksByKey[request.key];\n        if (requestCallbacks) {\n          const callback = requestCallbacks[request.command];\n          if (callback) {\n            await callback(id, request);\n            return;\n          }\n        }\n      }\n      throw new Error(`Invalid command: ` + request.command);\n    } catch (e) {\n      sendResponse(id, { errors: [extractErrorMessageV8(e, streamIn, null, void 0, \"\")] });\n    }\n  };\n  let isFirstPacket = true;\n  let handleIncomingPacket = (bytes) => {\n    if (isFirstPacket) {\n      isFirstPacket = false;\n      let binaryVersion = String.fromCharCode(...bytes);\n      if (binaryVersion !== \"0.15.18\") {\n        throw new Error(`Cannot start service: Host version \"${\"0.15.18\"}\" does not match binary version ${JSON.stringify(binaryVersion)}`);\n      }\n      return;\n    }\n    let packet = decodePacket(bytes);\n    if (packet.isRequest) {\n      handleRequest(packet.id, packet.value);\n    } else {\n      let callback = responseCallbacks[packet.id];\n      delete responseCallbacks[packet.id];\n      if (packet.value.error)\n        callback(packet.value.error, {});\n      else\n        callback(null, packet.value);\n    }\n  };\n  let buildOrServe = ({ callName, refs, serveOptions, options, isTTY: isTTY2, defaultWD: defaultWD2, callback }) => {\n    let refCount = 0;\n    const buildKey = nextBuildKey++;\n    const requestCallbacks = {};\n    const buildRefs = {\n      ref() {\n        if (++refCount === 1) {\n          if (refs)\n            refs.ref();\n        }\n      },\n      unref() {\n        if (--refCount === 0) {\n          delete requestCallbacksByKey[buildKey];\n          if (refs)\n            refs.unref();\n        }\n      }\n    };\n    requestCallbacksByKey[buildKey] = requestCallbacks;\n    buildRefs.ref();\n    buildOrServeImpl(\n      callName,\n      buildKey,\n      sendRequest,\n      sendResponse,\n      buildRefs,\n      streamIn,\n      requestCallbacks,\n      options,\n      serveOptions,\n      isTTY2,\n      defaultWD2,\n      closeData,\n      (err, res) => {\n        try {\n          callback(err, res);\n        } finally {\n          buildRefs.unref();\n        }\n      }\n    );\n  };\n  let transform2 = ({ callName, refs, input, options, isTTY: isTTY2, fs: fs3, callback }) => {\n    const details = createObjectStash();\n    let start = (inputPath) => {\n      try {\n        if (typeof input !== \"string\" && !(input instanceof Uint8Array))\n          throw new Error('The input to \"transform\" must be a string or a Uint8Array');\n        let {\n          flags,\n          mangleCache\n        } = flagsForTransformOptions(callName, options, isTTY2, transformLogLevelDefault);\n        let request = {\n          command: \"transform\",\n          flags,\n          inputFS: inputPath !== null,\n          input: inputPath !== null ? encodeUTF8(inputPath) : typeof input === \"string\" ? encodeUTF8(input) : input\n        };\n        if (mangleCache)\n          request.mangleCache = mangleCache;\n        sendRequest(refs, request, (error, response) => {\n          if (error)\n            return callback(new Error(error), null);\n          let errors = replaceDetailsInMessages(response.errors, details);\n          let warnings = replaceDetailsInMessages(response.warnings, details);\n          let outstanding = 1;\n          let next = () => {\n            if (--outstanding === 0) {\n              let result = { warnings, code: response.code, map: response.map };\n              if (response.mangleCache)\n                result.mangleCache = response == null ? void 0 : response.mangleCache;\n              callback(null, result);\n            }\n          };\n          if (errors.length > 0)\n            return callback(failureErrorWithLog(\"Transform failed\", errors, warnings), null);\n          if (response.codeFS) {\n            outstanding++;\n            fs3.readFile(response.code, (err, contents) => {\n              if (err !== null) {\n                callback(err, null);\n              } else {\n                response.code = contents;\n                next();\n              }\n            });\n          }\n          if (response.mapFS) {\n            outstanding++;\n            fs3.readFile(response.map, (err, contents) => {\n              if (err !== null) {\n                callback(err, null);\n              } else {\n                response.map = contents;\n                next();\n              }\n            });\n          }\n          next();\n        });\n      } catch (e) {\n        let flags = [];\n        try {\n          pushLogFlags(flags, options, {}, isTTY2, transformLogLevelDefault);\n        } catch {\n        }\n        const error = extractErrorMessageV8(e, streamIn, details, void 0, \"\");\n        sendRequest(refs, { command: \"error\", flags, error }, () => {\n          error.detail = details.load(error.detail);\n          callback(failureErrorWithLog(\"Transform failed\", [error], []), null);\n        });\n      }\n    };\n    if ((typeof input === \"string\" || input instanceof Uint8Array) && input.length > 1024 * 1024) {\n      let next = start;\n      start = () => fs3.writeFile(input, next);\n    }\n    start(null);\n  };\n  let formatMessages2 = ({ callName, refs, messages, options, callback }) => {\n    let result = sanitizeMessages(messages, \"messages\", null, \"\");\n    if (!options)\n      throw new Error(`Missing second argument in ${callName}() call`);\n    let keys = {};\n    let kind = getFlag(options, keys, \"kind\", mustBeString);\n    let color = getFlag(options, keys, \"color\", mustBeBoolean);\n    let terminalWidth = getFlag(options, keys, \"terminalWidth\", mustBeInteger);\n    checkForInvalidFlags(options, keys, `in ${callName}() call`);\n    if (kind === void 0)\n      throw new Error(`Missing \"kind\" in ${callName}() call`);\n    if (kind !== \"error\" && kind !== \"warning\")\n      throw new Error(`Expected \"kind\" to be \"error\" or \"warning\" in ${callName}() call`);\n    let request = {\n      command: \"format-msgs\",\n      messages: result,\n      isWarning: kind === \"warning\"\n    };\n    if (color !== void 0)\n      request.color = color;\n    if (terminalWidth !== void 0)\n      request.terminalWidth = terminalWidth;\n    sendRequest(refs, request, (error, response) => {\n      if (error)\n        return callback(new Error(error), null);\n      callback(null, response.messages);\n    });\n  };\n  let analyzeMetafile2 = ({ callName, refs, metafile, options, callback }) => {\n    if (options === void 0)\n      options = {};\n    let keys = {};\n    let color = getFlag(options, keys, \"color\", mustBeBoolean);\n    let verbose = getFlag(options, keys, \"verbose\", mustBeBoolean);\n    checkForInvalidFlags(options, keys, `in ${callName}() call`);\n    let request = {\n      command: \"analyze-metafile\",\n      metafile\n    };\n    if (color !== void 0)\n      request.color = color;\n    if (verbose !== void 0)\n      request.verbose = verbose;\n    sendRequest(refs, request, (error, response) => {\n      if (error)\n        return callback(new Error(error), null);\n      callback(null, response.result);\n    });\n  };\n  return {\n    readFromStdout,\n    afterClose,\n    service: {\n      buildOrServe,\n      transform: transform2,\n      formatMessages: formatMessages2,\n      analyzeMetafile: analyzeMetafile2\n    }\n  };\n}\nfunction buildOrServeImpl(callName, buildKey, sendRequest, sendResponse, refs, streamIn, requestCallbacks, options, serveOptions, isTTY2, defaultWD2, closeData, callback) {\n  const details = createObjectStash();\n  const logPluginError = (e, pluginName, note, done) => {\n    const flags = [];\n    try {\n      pushLogFlags(flags, options, {}, isTTY2, buildLogLevelDefault);\n    } catch {\n    }\n    const message = extractErrorMessageV8(e, streamIn, details, note, pluginName);\n    sendRequest(refs, { command: \"error\", flags, error: message }, () => {\n      message.detail = details.load(message.detail);\n      done(message);\n    });\n  };\n  const handleError = (e, pluginName) => {\n    logPluginError(e, pluginName, void 0, (error) => {\n      callback(failureErrorWithLog(\"Build failed\", [error], []), null);\n    });\n  };\n  let plugins;\n  if (typeof options === \"object\") {\n    const value = options.plugins;\n    if (value !== void 0) {\n      if (!Array.isArray(value))\n        throw new Error(`\"plugins\" must be an array`);\n      plugins = value;\n    }\n  }\n  if (plugins && plugins.length > 0) {\n    if (streamIn.isSync) {\n      handleError(new Error(\"Cannot use plugins in synchronous API calls\"), \"\");\n      return;\n    }\n    handlePlugins(\n      buildKey,\n      sendRequest,\n      sendResponse,\n      refs,\n      streamIn,\n      requestCallbacks,\n      options,\n      plugins,\n      details\n    ).then(\n      (result) => {\n        if (!result.ok) {\n          handleError(result.error, result.pluginName);\n          return;\n        }\n        try {\n          buildOrServeContinue(result.requestPlugins, result.runOnEndCallbacks);\n        } catch (e) {\n          handleError(e, \"\");\n        }\n      },\n      (e) => handleError(e, \"\")\n    );\n    return;\n  }\n  try {\n    buildOrServeContinue(null, (result, logPluginError2, done) => done());\n  } catch (e) {\n    handleError(e, \"\");\n  }\n  function buildOrServeContinue(requestPlugins, runOnEndCallbacks) {\n    let writeDefault = !streamIn.isWriteUnavailable;\n    let {\n      entries,\n      flags,\n      write,\n      stdinContents,\n      stdinResolveDir,\n      absWorkingDir,\n      incremental,\n      nodePaths,\n      watch,\n      mangleCache\n    } = flagsForBuildOptions(callName, options, isTTY2, buildLogLevelDefault, writeDefault);\n    let request = {\n      command: \"build\",\n      key: buildKey,\n      entries,\n      flags,\n      write,\n      stdinContents,\n      stdinResolveDir,\n      absWorkingDir: absWorkingDir || defaultWD2,\n      incremental,\n      nodePaths\n    };\n    if (requestPlugins)\n      request.plugins = requestPlugins;\n    if (mangleCache)\n      request.mangleCache = mangleCache;\n    let serve2 = serveOptions && buildServeData(buildKey, sendRequest, sendResponse, refs, requestCallbacks, serveOptions, request);\n    let rebuild;\n    let stop;\n    let copyResponseToResult = (response, result) => {\n      if (response.outputFiles)\n        result.outputFiles = response.outputFiles.map(convertOutputFiles);\n      if (response.metafile)\n        result.metafile = JSON.parse(response.metafile);\n      if (response.mangleCache)\n        result.mangleCache = response.mangleCache;\n      if (response.writeToStdout !== void 0)\n        console.log(decodeUTF8(response.writeToStdout).replace(/\\n$/, \"\"));\n    };\n    let buildResponseToResult = (response, callback2) => {\n      let result = {\n        errors: replaceDetailsInMessages(response.errors, details),\n        warnings: replaceDetailsInMessages(response.warnings, details)\n      };\n      copyResponseToResult(response, result);\n      runOnEndCallbacks(result, logPluginError, () => {\n        if (result.errors.length > 0) {\n          return callback2(failureErrorWithLog(\"Build failed\", result.errors, result.warnings), null);\n        }\n        if (response.rebuild) {\n          if (!rebuild) {\n            let isDisposed = false;\n            rebuild = () => new Promise((resolve, reject) => {\n              if (isDisposed || closeData.didClose)\n                throw new Error(\"Cannot rebuild\");\n              sendRequest(\n                refs,\n                { command: \"rebuild\", key: buildKey },\n                (error2, response2) => {\n                  if (error2) {\n                    const message = { id: \"\", pluginName: \"\", text: error2, location: null, notes: [], detail: void 0 };\n                    return callback2(failureErrorWithLog(\"Build failed\", [message], []), null);\n                  }\n                  buildResponseToResult(response2, (error3, result3) => {\n                    if (error3)\n                      reject(error3);\n                    else\n                      resolve(result3);\n                  });\n                }\n              );\n            });\n            refs.ref();\n            rebuild.dispose = () => {\n              if (isDisposed)\n                return;\n              isDisposed = true;\n              sendRequest(refs, { command: \"rebuild-dispose\", key: buildKey }, () => {\n              });\n              refs.unref();\n            };\n          }\n          result.rebuild = rebuild;\n        }\n        if (response.watch) {\n          if (!stop) {\n            let isStopped = false;\n            refs.ref();\n            stop = () => {\n              if (isStopped)\n                return;\n              isStopped = true;\n              delete requestCallbacks[\"watch-rebuild\"];\n              sendRequest(refs, { command: \"watch-stop\", key: buildKey }, () => {\n              });\n              refs.unref();\n            };\n            if (watch) {\n              requestCallbacks[\"watch-rebuild\"] = (id, request2) => {\n                try {\n                  let watchResponse = request2.args;\n                  let result2 = {\n                    errors: replaceDetailsInMessages(watchResponse.errors, details),\n                    warnings: replaceDetailsInMessages(watchResponse.warnings, details)\n                  };\n                  copyResponseToResult(watchResponse, result2);\n                  runOnEndCallbacks(result2, logPluginError, () => {\n                    if (result2.errors.length > 0) {\n                      if (watch.onRebuild)\n                        watch.onRebuild(failureErrorWithLog(\"Build failed\", result2.errors, result2.warnings), null);\n                      return;\n                    }\n                    result2.stop = stop;\n                    if (watch.onRebuild)\n                      watch.onRebuild(null, result2);\n                  });\n                } catch (err) {\n                  console.error(err);\n                }\n                sendResponse(id, {});\n              };\n            }\n          }\n          result.stop = stop;\n        }\n        callback2(null, result);\n      });\n    };\n    if (write && streamIn.isWriteUnavailable)\n      throw new Error(`The \"write\" option is unavailable in this environment`);\n    if (incremental && streamIn.isSync)\n      throw new Error(`Cannot use \"incremental\" with a synchronous build`);\n    if (watch && streamIn.isSync)\n      throw new Error(`Cannot use \"watch\" with a synchronous build`);\n    sendRequest(refs, request, (error, response) => {\n      if (error)\n        return callback(new Error(error), null);\n      if (serve2) {\n        let serveResponse = response;\n        let isStopped = false;\n        refs.ref();\n        let result = {\n          port: serveResponse.port,\n          host: serveResponse.host,\n          wait: serve2.wait,\n          stop() {\n            if (isStopped)\n              return;\n            isStopped = true;\n            serve2.stop();\n            refs.unref();\n          }\n        };\n        refs.ref();\n        serve2.wait.then(refs.unref, refs.unref);\n        return callback(null, result);\n      }\n      return buildResponseToResult(response, callback);\n    });\n  }\n}\nvar buildServeData = (buildKey, sendRequest, sendResponse, refs, requestCallbacks, options, request) => {\n  let keys = {};\n  let port = getFlag(options, keys, \"port\", mustBeInteger);\n  let host = getFlag(options, keys, \"host\", mustBeString);\n  let servedir = getFlag(options, keys, \"servedir\", mustBeString);\n  let onRequest = getFlag(options, keys, \"onRequest\", mustBeFunction);\n  let wait = new Promise((resolve, reject) => {\n    requestCallbacks[\"serve-wait\"] = (id, request2) => {\n      if (request2.error !== null)\n        reject(new Error(request2.error));\n      else\n        resolve();\n      sendResponse(id, {});\n    };\n  });\n  request.serve = {};\n  checkForInvalidFlags(options, keys, `in serve() call`);\n  if (port !== void 0)\n    request.serve.port = port;\n  if (host !== void 0)\n    request.serve.host = host;\n  if (servedir !== void 0)\n    request.serve.servedir = servedir;\n  requestCallbacks[\"serve-request\"] = (id, request2) => {\n    if (onRequest)\n      onRequest(request2.args);\n    sendResponse(id, {});\n  };\n  return {\n    wait,\n    stop() {\n      sendRequest(refs, { command: \"serve-stop\", key: buildKey }, () => {\n      });\n    }\n  };\n};\nvar handlePlugins = async (buildKey, sendRequest, sendResponse, refs, streamIn, requestCallbacks, initialOptions, plugins, details) => {\n  let onStartCallbacks = [];\n  let onEndCallbacks = [];\n  let onResolveCallbacks = {};\n  let onLoadCallbacks = {};\n  let nextCallbackID = 0;\n  let i = 0;\n  let requestPlugins = [];\n  let isSetupDone = false;\n  plugins = [...plugins];\n  for (let item of plugins) {\n    let keys = {};\n    if (typeof item !== \"object\")\n      throw new Error(`Plugin at index ${i} must be an object`);\n    const name = getFlag(item, keys, \"name\", mustBeString);\n    if (typeof name !== \"string\" || name === \"\")\n      throw new Error(`Plugin at index ${i} is missing a name`);\n    try {\n      let setup = getFlag(item, keys, \"setup\", mustBeFunction);\n      if (typeof setup !== \"function\")\n        throw new Error(`Plugin is missing a setup function`);\n      checkForInvalidFlags(item, keys, `on plugin ${JSON.stringify(name)}`);\n      let plugin = {\n        name,\n        onResolve: [],\n        onLoad: []\n      };\n      i++;\n      let resolve = (path3, options = {}) => {\n        if (!isSetupDone)\n          throw new Error('Cannot call \"resolve\" before plugin setup has completed');\n        if (typeof path3 !== \"string\")\n          throw new Error(`The path to resolve must be a string`);\n        let keys2 = /* @__PURE__ */ Object.create(null);\n        let pluginName = getFlag(options, keys2, \"pluginName\", mustBeString);\n        let importer = getFlag(options, keys2, \"importer\", mustBeString);\n        let namespace = getFlag(options, keys2, \"namespace\", mustBeString);\n        let resolveDir = getFlag(options, keys2, \"resolveDir\", mustBeString);\n        let kind = getFlag(options, keys2, \"kind\", mustBeString);\n        let pluginData = getFlag(options, keys2, \"pluginData\", canBeAnything);\n        checkForInvalidFlags(options, keys2, \"in resolve() call\");\n        return new Promise((resolve2, reject) => {\n          const request = {\n            command: \"resolve\",\n            path: path3,\n            key: buildKey,\n            pluginName: name\n          };\n          if (pluginName != null)\n            request.pluginName = pluginName;\n          if (importer != null)\n            request.importer = importer;\n          if (namespace != null)\n            request.namespace = namespace;\n          if (resolveDir != null)\n            request.resolveDir = resolveDir;\n          if (kind != null)\n            request.kind = kind;\n          if (pluginData != null)\n            request.pluginData = details.store(pluginData);\n          sendRequest(refs, request, (error, response) => {\n            if (error !== null)\n              reject(new Error(error));\n            else\n              resolve2({\n                errors: replaceDetailsInMessages(response.errors, details),\n                warnings: replaceDetailsInMessages(response.warnings, details),\n                path: response.path,\n                external: response.external,\n                sideEffects: response.sideEffects,\n                namespace: response.namespace,\n                suffix: response.suffix,\n                pluginData: details.load(response.pluginData)\n              });\n          });\n        });\n      };\n      let promise = setup({\n        initialOptions,\n        resolve,\n        onStart(callback) {\n          let registeredText = `This error came from the \"onStart\" callback registered here:`;\n          let registeredNote = extractCallerV8(new Error(registeredText), streamIn, \"onStart\");\n          onStartCallbacks.push({ name, callback, note: registeredNote });\n        },\n        onEnd(callback) {\n          let registeredText = `This error came from the \"onEnd\" callback registered here:`;\n          let registeredNote = extractCallerV8(new Error(registeredText), streamIn, \"onEnd\");\n          onEndCallbacks.push({ name, callback, note: registeredNote });\n        },\n        onResolve(options, callback) {\n          let registeredText = `This error came from the \"onResolve\" callback registered here:`;\n          let registeredNote = extractCallerV8(new Error(registeredText), streamIn, \"onResolve\");\n          let keys2 = {};\n          let filter = getFlag(options, keys2, \"filter\", mustBeRegExp);\n          let namespace = getFlag(options, keys2, \"namespace\", mustBeString);\n          checkForInvalidFlags(options, keys2, `in onResolve() call for plugin ${JSON.stringify(name)}`);\n          if (filter == null)\n            throw new Error(`onResolve() call is missing a filter`);\n          let id = nextCallbackID++;\n          onResolveCallbacks[id] = { name, callback, note: registeredNote };\n          plugin.onResolve.push({ id, filter: filter.source, namespace: namespace || \"\" });\n        },\n        onLoad(options, callback) {\n          let registeredText = `This error came from the \"onLoad\" callback registered here:`;\n          let registeredNote = extractCallerV8(new Error(registeredText), streamIn, \"onLoad\");\n          let keys2 = {};\n          let filter = getFlag(options, keys2, \"filter\", mustBeRegExp);\n          let namespace = getFlag(options, keys2, \"namespace\", mustBeString);\n          checkForInvalidFlags(options, keys2, `in onLoad() call for plugin ${JSON.stringify(name)}`);\n          if (filter == null)\n            throw new Error(`onLoad() call is missing a filter`);\n          let id = nextCallbackID++;\n          onLoadCallbacks[id] = { name, callback, note: registeredNote };\n          plugin.onLoad.push({ id, filter: filter.source, namespace: namespace || \"\" });\n        },\n        esbuild: streamIn.esbuild\n      });\n      if (promise)\n        await promise;\n      requestPlugins.push(plugin);\n    } catch (e) {\n      return { ok: false, error: e, pluginName: name };\n    }\n  }\n  requestCallbacks[\"on-start\"] = async (id, request) => {\n    let response = { errors: [], warnings: [] };\n    await Promise.all(onStartCallbacks.map(async ({ name, callback, note }) => {\n      try {\n        let result = await callback();\n        if (result != null) {\n          if (typeof result !== \"object\")\n            throw new Error(`Expected onStart() callback in plugin ${JSON.stringify(name)} to return an object`);\n          let keys = {};\n          let errors = getFlag(result, keys, \"errors\", mustBeArray);\n          let warnings = getFlag(result, keys, \"warnings\", mustBeArray);\n          checkForInvalidFlags(result, keys, `from onStart() callback in plugin ${JSON.stringify(name)}`);\n          if (errors != null)\n            response.errors.push(...sanitizeMessages(errors, \"errors\", details, name));\n          if (warnings != null)\n            response.warnings.push(...sanitizeMessages(warnings, \"warnings\", details, name));\n        }\n      } catch (e) {\n        response.errors.push(extractErrorMessageV8(e, streamIn, details, note && note(), name));\n      }\n    }));\n    sendResponse(id, response);\n  };\n  requestCallbacks[\"on-resolve\"] = async (id, request) => {\n    let response = {}, name = \"\", callback, note;\n    for (let id2 of request.ids) {\n      try {\n        ({ name, callback, note } = onResolveCallbacks[id2]);\n        let result = await callback({\n          path: request.path,\n          importer: request.importer,\n          namespace: request.namespace,\n          resolveDir: request.resolveDir,\n          kind: request.kind,\n          pluginData: details.load(request.pluginData)\n        });\n        if (result != null) {\n          if (typeof result !== \"object\")\n            throw new Error(`Expected onResolve() callback in plugin ${JSON.stringify(name)} to return an object`);\n          let keys = {};\n          let pluginName = getFlag(result, keys, \"pluginName\", mustBeString);\n          let path3 = getFlag(result, keys, \"path\", mustBeString);\n          let namespace = getFlag(result, keys, \"namespace\", mustBeString);\n          let suffix = getFlag(result, keys, \"suffix\", mustBeString);\n          let external = getFlag(result, keys, \"external\", mustBeBoolean);\n          let sideEffects = getFlag(result, keys, \"sideEffects\", mustBeBoolean);\n          let pluginData = getFlag(result, keys, \"pluginData\", canBeAnything);\n          let errors = getFlag(result, keys, \"errors\", mustBeArray);\n          let warnings = getFlag(result, keys, \"warnings\", mustBeArray);\n          let watchFiles = getFlag(result, keys, \"watchFiles\", mustBeArray);\n          let watchDirs = getFlag(result, keys, \"watchDirs\", mustBeArray);\n          checkForInvalidFlags(result, keys, `from onResolve() callback in plugin ${JSON.stringify(name)}`);\n          response.id = id2;\n          if (pluginName != null)\n            response.pluginName = pluginName;\n          if (path3 != null)\n            response.path = path3;\n          if (namespace != null)\n            response.namespace = namespace;\n          if (suffix != null)\n            response.suffix = suffix;\n          if (external != null)\n            response.external = external;\n          if (sideEffects != null)\n            response.sideEffects = sideEffects;\n          if (pluginData != null)\n            response.pluginData = details.store(pluginData);\n          if (errors != null)\n            response.errors = sanitizeMessages(errors, \"errors\", details, name);\n          if (warnings != null)\n            response.warnings = sanitizeMessages(warnings, \"warnings\", details, name);\n          if (watchFiles != null)\n            response.watchFiles = sanitizeStringArray(watchFiles, \"watchFiles\");\n          if (watchDirs != null)\n            response.watchDirs = sanitizeStringArray(watchDirs, \"watchDirs\");\n          break;\n        }\n      } catch (e) {\n        response = { id: id2, errors: [extractErrorMessageV8(e, streamIn, details, note && note(), name)] };\n        break;\n      }\n    }\n    sendResponse(id, response);\n  };\n  requestCallbacks[\"on-load\"] = async (id, request) => {\n    let response = {}, name = \"\", callback, note;\n    for (let id2 of request.ids) {\n      try {\n        ({ name, callback, note } = onLoadCallbacks[id2]);\n        let result = await callback({\n          path: request.path,\n          namespace: request.namespace,\n          suffix: request.suffix,\n          pluginData: details.load(request.pluginData)\n        });\n        if (result != null) {\n          if (typeof result !== \"object\")\n            throw new Error(`Expected onLoad() callback in plugin ${JSON.stringify(name)} to return an object`);\n          let keys = {};\n          let pluginName = getFlag(result, keys, \"pluginName\", mustBeString);\n          let contents = getFlag(result, keys, \"contents\", mustBeStringOrUint8Array);\n          let resolveDir = getFlag(result, keys, \"resolveDir\", mustBeString);\n          let pluginData = getFlag(result, keys, \"pluginData\", canBeAnything);\n          let loader = getFlag(result, keys, \"loader\", mustBeString);\n          let errors = getFlag(result, keys, \"errors\", mustBeArray);\n          let warnings = getFlag(result, keys, \"warnings\", mustBeArray);\n          let watchFiles = getFlag(result, keys, \"watchFiles\", mustBeArray);\n          let watchDirs = getFlag(result, keys, \"watchDirs\", mustBeArray);\n          checkForInvalidFlags(result, keys, `from onLoad() callback in plugin ${JSON.stringify(name)}`);\n          response.id = id2;\n          if (pluginName != null)\n            response.pluginName = pluginName;\n          if (contents instanceof Uint8Array)\n            response.contents = contents;\n          else if (contents != null)\n            response.contents = encodeUTF8(contents);\n          if (resolveDir != null)\n            response.resolveDir = resolveDir;\n          if (pluginData != null)\n            response.pluginData = details.store(pluginData);\n          if (loader != null)\n            response.loader = loader;\n          if (errors != null)\n            response.errors = sanitizeMessages(errors, \"errors\", details, name);\n          if (warnings != null)\n            response.warnings = sanitizeMessages(warnings, \"warnings\", details, name);\n          if (watchFiles != null)\n            response.watchFiles = sanitizeStringArray(watchFiles, \"watchFiles\");\n          if (watchDirs != null)\n            response.watchDirs = sanitizeStringArray(watchDirs, \"watchDirs\");\n          break;\n        }\n      } catch (e) {\n        response = { id: id2, errors: [extractErrorMessageV8(e, streamIn, details, note && note(), name)] };\n        break;\n      }\n    }\n    sendResponse(id, response);\n  };\n  let runOnEndCallbacks = (result, logPluginError, done) => done();\n  if (onEndCallbacks.length > 0) {\n    runOnEndCallbacks = (result, logPluginError, done) => {\n      (async () => {\n        for (const { name, callback, note } of onEndCallbacks) {\n          try {\n            await callback(result);\n          } catch (e) {\n            result.errors.push(await new Promise((resolve) => logPluginError(e, name, note && note(), resolve)));\n          }\n        }\n      })().then(done);\n    };\n  }\n  isSetupDone = true;\n  return {\n    ok: true,\n    requestPlugins,\n    runOnEndCallbacks\n  };\n};\nfunction createObjectStash() {\n  const map = /* @__PURE__ */ new Map();\n  let nextID = 0;\n  return {\n    load(id) {\n      return map.get(id);\n    },\n    store(value) {\n      if (value === void 0)\n        return -1;\n      const id = nextID++;\n      map.set(id, value);\n      return id;\n    }\n  };\n}\nfunction extractCallerV8(e, streamIn, ident) {\n  let note;\n  let tried = false;\n  return () => {\n    if (tried)\n      return note;\n    tried = true;\n    try {\n      let lines = (e.stack + \"\").split(\"\\n\");\n      lines.splice(1, 1);\n      let location = parseStackLinesV8(streamIn, lines, ident);\n      if (location) {\n        note = { text: e.message, location };\n        return note;\n      }\n    } catch {\n    }\n  };\n}\nfunction extractErrorMessageV8(e, streamIn, stash, note, pluginName) {\n  let text = \"Internal error\";\n  let location = null;\n  try {\n    text = (e && e.message || e) + \"\";\n  } catch {\n  }\n  try {\n    location = parseStackLinesV8(streamIn, (e.stack + \"\").split(\"\\n\"), \"\");\n  } catch {\n  }\n  return { id: \"\", pluginName, text, location, notes: note ? [note] : [], detail: stash ? stash.store(e) : -1 };\n}\nfunction parseStackLinesV8(streamIn, lines, ident) {\n  let at = \"    at \";\n  if (streamIn.readFileSync && !lines[0].startsWith(at) && lines[1].startsWith(at)) {\n    for (let i = 1; i < lines.length; i++) {\n      let line = lines[i];\n      if (!line.startsWith(at))\n        continue;\n      line = line.slice(at.length);\n      while (true) {\n        let match = /^(?:new |async )?\\S+ \\((.*)\\)$/.exec(line);\n        if (match) {\n          line = match[1];\n          continue;\n        }\n        match = /^eval at \\S+ \\((.*)\\)(?:, \\S+:\\d+:\\d+)?$/.exec(line);\n        if (match) {\n          line = match[1];\n          continue;\n        }\n        match = /^(\\S+):(\\d+):(\\d+)$/.exec(line);\n        if (match) {\n          let contents;\n          try {\n            contents = streamIn.readFileSync(match[1], \"utf8\");\n          } catch {\n            break;\n          }\n          let lineText = contents.split(/\\r\\n|\\r|\\n|\\u2028|\\u2029/)[+match[2] - 1] || \"\";\n          let column = +match[3] - 1;\n          let length = lineText.slice(column, column + ident.length) === ident ? ident.length : 0;\n          return {\n            file: match[1],\n            namespace: \"file\",\n            line: +match[2],\n            column: encodeUTF8(lineText.slice(0, column)).length,\n            length: encodeUTF8(lineText.slice(column, column + length)).length,\n            lineText: lineText + \"\\n\" + lines.slice(1).join(\"\\n\"),\n            suggestion: \"\"\n          };\n        }\n        break;\n      }\n    }\n  }\n  return null;\n}\nfunction failureErrorWithLog(text, errors, warnings) {\n  let limit = 5;\n  let summary = errors.length < 1 ? \"\" : ` with ${errors.length} error${errors.length < 2 ? \"\" : \"s\"}:` + errors.slice(0, limit + 1).map((e, i) => {\n    if (i === limit)\n      return \"\\n...\";\n    if (!e.location)\n      return `\nerror: ${e.text}`;\n    let { file, line, column } = e.location;\n    let pluginText = e.pluginName ? `[plugin: ${e.pluginName}] ` : \"\";\n    return `\n${file}:${line}:${column}: ERROR: ${pluginText}${e.text}`;\n  }).join(\"\");\n  let error = new Error(`${text}${summary}`);\n  error.errors = errors;\n  error.warnings = warnings;\n  return error;\n}\nfunction replaceDetailsInMessages(messages, stash) {\n  for (const message of messages) {\n    message.detail = stash.load(message.detail);\n  }\n  return messages;\n}\nfunction sanitizeLocation(location, where) {\n  if (location == null)\n    return null;\n  let keys = {};\n  let file = getFlag(location, keys, \"file\", mustBeString);\n  let namespace = getFlag(location, keys, \"namespace\", mustBeString);\n  let line = getFlag(location, keys, \"line\", mustBeInteger);\n  let column = getFlag(location, keys, \"column\", mustBeInteger);\n  let length = getFlag(location, keys, \"length\", mustBeInteger);\n  let lineText = getFlag(location, keys, \"lineText\", mustBeString);\n  let suggestion = getFlag(location, keys, \"suggestion\", mustBeString);\n  checkForInvalidFlags(location, keys, where);\n  return {\n    file: file || \"\",\n    namespace: namespace || \"\",\n    line: line || 0,\n    column: column || 0,\n    length: length || 0,\n    lineText: lineText || \"\",\n    suggestion: suggestion || \"\"\n  };\n}\nfunction sanitizeMessages(messages, property, stash, fallbackPluginName) {\n  let messagesClone = [];\n  let index = 0;\n  for (const message of messages) {\n    let keys = {};\n    let id = getFlag(message, keys, \"id\", mustBeString);\n    let pluginName = getFlag(message, keys, \"pluginName\", mustBeString);\n    let text = getFlag(message, keys, \"text\", mustBeString);\n    let location = getFlag(message, keys, \"location\", mustBeObjectOrNull);\n    let notes = getFlag(message, keys, \"notes\", mustBeArray);\n    let detail = getFlag(message, keys, \"detail\", canBeAnything);\n    let where = `in element ${index} of \"${property}\"`;\n    checkForInvalidFlags(message, keys, where);\n    let notesClone = [];\n    if (notes) {\n      for (const note of notes) {\n        let noteKeys = {};\n        let noteText = getFlag(note, noteKeys, \"text\", mustBeString);\n        let noteLocation = getFlag(note, noteKeys, \"location\", mustBeObjectOrNull);\n        checkForInvalidFlags(note, noteKeys, where);\n        notesClone.push({\n          text: noteText || \"\",\n          location: sanitizeLocation(noteLocation, where)\n        });\n      }\n    }\n    messagesClone.push({\n      id: id || \"\",\n      pluginName: pluginName || fallbackPluginName,\n      text: text || \"\",\n      location: sanitizeLocation(location, where),\n      notes: notesClone,\n      detail: stash ? stash.store(detail) : -1\n    });\n    index++;\n  }\n  return messagesClone;\n}\nfunction sanitizeStringArray(values, property) {\n  const result = [];\n  for (const value of values) {\n    if (typeof value !== \"string\")\n      throw new Error(`${JSON.stringify(property)} must be an array of strings`);\n    result.push(value);\n  }\n  return result;\n}\nfunction convertOutputFiles({ path: path3, contents }) {\n  let text = null;\n  return {\n    path: path3,\n    contents,\n    get text() {\n      const binary = this.contents;\n      if (text === null || binary !== contents) {\n        contents = binary;\n        text = decodeUTF8(binary);\n      }\n      return text;\n    }\n  };\n}\n\n// lib/npm/node-platform.ts\nvar fs = require(\"fs\");\nvar os = require(\"os\");\nvar path = require(\"path\");\nvar ESBUILD_BINARY_PATH = process.env.ESBUILD_BINARY_PATH || ESBUILD_BINARY_PATH;\nvar packageDarwin_arm64 = \"esbuild-darwin-arm64\";\nvar packageDarwin_x64 = \"esbuild-darwin-64\";\nvar knownWindowsPackages = {\n  \"win32 arm64 LE\": \"esbuild-windows-arm64\",\n  \"win32 ia32 LE\": \"esbuild-windows-32\",\n  \"win32 x64 LE\": \"esbuild-windows-64\"\n};\nvar knownUnixlikePackages = {\n  \"android arm64 LE\": \"esbuild-android-arm64\",\n  \"darwin arm64 LE\": \"esbuild-darwin-arm64\",\n  \"darwin x64 LE\": \"esbuild-darwin-64\",\n  \"freebsd arm64 LE\": \"esbuild-freebsd-arm64\",\n  \"freebsd x64 LE\": \"esbuild-freebsd-64\",\n  \"linux arm LE\": \"esbuild-linux-arm\",\n  \"linux arm64 LE\": \"esbuild-linux-arm64\",\n  \"linux ia32 LE\": \"esbuild-linux-32\",\n  \"linux mips64el LE\": \"esbuild-linux-mips64le\",\n  \"linux ppc64 LE\": \"esbuild-linux-ppc64le\",\n  \"linux riscv64 LE\": \"esbuild-linux-riscv64\",\n  \"linux s390x BE\": \"esbuild-linux-s390x\",\n  \"linux x64 LE\": \"esbuild-linux-64\",\n  \"linux loong64 LE\": \"@esbuild/linux-loong64\",\n  \"netbsd x64 LE\": \"esbuild-netbsd-64\",\n  \"openbsd x64 LE\": \"esbuild-openbsd-64\",\n  \"sunos x64 LE\": \"esbuild-sunos-64\"\n};\nvar knownWebAssemblyFallbackPackages = {\n  \"android arm LE\": \"@esbuild/android-arm\",\n  \"android x64 LE\": \"esbuild-android-64\"\n};\nfunction pkgAndSubpathForCurrentPlatform() {\n  let pkg;\n  let subpath;\n  let isWASM = false;\n  let platformKey = `${process.platform} ${os.arch()} ${os.endianness()}`;\n  if (platformKey in knownWindowsPackages) {\n    pkg = knownWindowsPackages[platformKey];\n    subpath = \"esbuild.exe\";\n  } else if (platformKey in knownUnixlikePackages) {\n    pkg = knownUnixlikePackages[platformKey];\n    subpath = \"bin/esbuild\";\n  } else if (platformKey in knownWebAssemblyFallbackPackages) {\n    pkg = knownWebAssemblyFallbackPackages[platformKey];\n    subpath = \"bin/esbuild\";\n    isWASM = true;\n  } else {\n    throw new Error(`Unsupported platform: ${platformKey}`);\n  }\n  return { pkg, subpath, isWASM };\n}\nfunction pkgForSomeOtherPlatform() {\n  const libMainJS = require.resolve(\"esbuild\");\n  const nodeModulesDirectory = path.dirname(path.dirname(path.dirname(libMainJS)));\n  if (path.basename(nodeModulesDirectory) === \"node_modules\") {\n    for (const unixKey in knownUnixlikePackages) {\n      try {\n        const pkg = knownUnixlikePackages[unixKey];\n        if (fs.existsSync(path.join(nodeModulesDirectory, pkg)))\n          return pkg;\n      } catch {\n      }\n    }\n    for (const windowsKey in knownWindowsPackages) {\n      try {\n        const pkg = knownWindowsPackages[windowsKey];\n        if (fs.existsSync(path.join(nodeModulesDirectory, pkg)))\n          return pkg;\n      } catch {\n      }\n    }\n  }\n  return null;\n}\nfunction downloadedBinPath(pkg, subpath) {\n  const esbuildLibDir = path.dirname(require.resolve(\"esbuild\"));\n  return path.join(esbuildLibDir, `downloaded-${pkg}-${path.basename(subpath)}`);\n}\nfunction generateBinPath() {\n  if (ESBUILD_BINARY_PATH) {\n    return { binPath: ESBUILD_BINARY_PATH, isWASM: false };\n  }\n  const { pkg, subpath, isWASM } = pkgAndSubpathForCurrentPlatform();\n  let binPath;\n  try {\n    binPath = require.resolve(`${pkg}/${subpath}`);\n  } catch (e) {\n    binPath = downloadedBinPath(pkg, subpath);\n    if (!fs.existsSync(binPath)) {\n      try {\n        require.resolve(pkg);\n      } catch {\n        const otherPkg = pkgForSomeOtherPlatform();\n        if (otherPkg) {\n          let suggestions = `\nSpecifically the \"${otherPkg}\" package is present but this platform\nneeds the \"${pkg}\" package instead. People often get into this\nsituation by installing esbuild on Windows or macOS and copying \"node_modules\"\ninto a Docker image that runs Linux, or by copying \"node_modules\" between\nWindows and WSL environments.\n\nIf you are installing with npm, you can try not copying the \"node_modules\"\ndirectory when you copy the files over, and running \"npm ci\" or \"npm install\"\non the destination platform after the copy. Or you could consider using yarn\ninstead of npm which has built-in support for installing a package on multiple\nplatforms simultaneously.\n\nIf you are installing with yarn, you can try listing both this platform and the\nother platform in your \".yarnrc.yml\" file using the \"supportedArchitectures\"\nfeature: https://yarnpkg.com/configuration/yarnrc/#supportedArchitectures\nKeep in mind that this means multiple copies of esbuild will be present.\n`;\n          if (pkg === packageDarwin_x64 && otherPkg === packageDarwin_arm64 || pkg === packageDarwin_arm64 && otherPkg === packageDarwin_x64) {\n            suggestions = `\nSpecifically the \"${otherPkg}\" package is present but this platform\nneeds the \"${pkg}\" package instead. People often get into this\nsituation by installing esbuild with npm running inside of Rosetta 2 and then\ntrying to use it with node running outside of Rosetta 2, or vice versa (Rosetta\n2 is Apple's on-the-fly x86_64-to-arm64 translation service).\n\nIf you are installing with npm, you can try ensuring that both npm and node are\nnot running under Rosetta 2 and then reinstalling esbuild. This likely involves\nchanging how you installed npm and/or node. For example, installing node with\nthe universal installer here should work: https://nodejs.org/en/download/. Or\nyou could consider using yarn instead of npm which has built-in support for\ninstalling a package on multiple platforms simultaneously.\n\nIf you are installing with yarn, you can try listing both \"arm64\" and \"x64\"\nin your \".yarnrc.yml\" file using the \"supportedArchitectures\" feature:\nhttps://yarnpkg.com/configuration/yarnrc/#supportedArchitectures\nKeep in mind that this means multiple copies of esbuild will be present.\n`;\n          }\n          throw new Error(`\nYou installed esbuild for another platform than the one you're currently using.\nThis won't work because esbuild is written with native code and needs to\ninstall a platform-specific binary executable.\n${suggestions}\nAnother alternative is to use the \"esbuild-wasm\" package instead, which works\nthe same way on all platforms. But it comes with a heavy performance cost and\ncan sometimes be 10x slower than the \"esbuild\" package, so you may also not\nwant to do that.\n`);\n        }\n        throw new Error(`The package \"${pkg}\" could not be found, and is needed by esbuild.\n\nIf you are installing esbuild with npm, make sure that you don't specify the\n\"--no-optional\" or \"--omit=optional\" flags. The \"optionalDependencies\" feature\nof \"package.json\" is used by esbuild to install the correct binary executable\nfor your current platform.`);\n      }\n      throw e;\n    }\n  }\n  if (/\\.zip\\//.test(binPath)) {\n    let pnpapi;\n    try {\n      pnpapi = require(\"pnpapi\");\n    } catch (e) {\n    }\n    if (pnpapi) {\n      const root = pnpapi.getPackageInformation(pnpapi.topLevel).packageLocation;\n      const binTargetPath = path.join(\n        root,\n        \"node_modules\",\n        \".cache\",\n        \"esbuild\",\n        `pnpapi-${pkg}-${\"0.15.18\"}-${path.basename(subpath)}`\n      );\n      if (!fs.existsSync(binTargetPath)) {\n        fs.mkdirSync(path.dirname(binTargetPath), { recursive: true });\n        fs.copyFileSync(binPath, binTargetPath);\n        fs.chmodSync(binTargetPath, 493);\n      }\n      return { binPath: binTargetPath, isWASM };\n    }\n  }\n  return { binPath, isWASM };\n}\n\n// lib/npm/node.ts\nvar child_process = require(\"child_process\");\nvar crypto = require(\"crypto\");\nvar path2 = require(\"path\");\nvar fs2 = require(\"fs\");\nvar os2 = require(\"os\");\nvar tty = require(\"tty\");\nvar worker_threads;\nif (process.env.ESBUILD_WORKER_THREADS !== \"0\") {\n  try {\n    worker_threads = require(\"worker_threads\");\n  } catch {\n  }\n  let [major, minor] = process.versions.node.split(\".\");\n  if (+major < 12 || +major === 12 && +minor < 17 || +major === 13 && +minor < 13) {\n    worker_threads = void 0;\n  }\n}\nvar _a;\nvar isInternalWorkerThread = ((_a = worker_threads == null ? void 0 : worker_threads.workerData) == null ? void 0 : _a.esbuildVersion) === \"0.15.18\";\nvar esbuildCommandAndArgs = () => {\n  if ((!ESBUILD_BINARY_PATH || false) && (path2.basename(__filename) !== \"main.js\" || path2.basename(__dirname) !== \"lib\")) {\n    throw new Error(\n      `The esbuild JavaScript API cannot be bundled. Please mark the \"esbuild\" package as external so it's not included in the bundle.\n\nMore information: The file containing the code for esbuild's JavaScript API (${__filename}) does not appear to be inside the esbuild package on the file system, which usually means that the esbuild package was bundled into another file. This is problematic because the API needs to run a binary executable inside the esbuild package which is located using a relative path from the API code to the executable. If the esbuild package is bundled, the relative path will be incorrect and the executable won't be found.`\n    );\n  }\n  if (false) {\n    return [\"node\", [path2.join(__dirname, \"..\", \"bin\", \"esbuild\")]];\n  } else {\n    const { binPath, isWASM } = generateBinPath();\n    if (isWASM) {\n      return [\"node\", [binPath]];\n    } else {\n      return [binPath, []];\n    }\n  }\n};\nvar isTTY = () => tty.isatty(2);\nvar fsSync = {\n  readFile(tempFile, callback) {\n    try {\n      let contents = fs2.readFileSync(tempFile, \"utf8\");\n      try {\n        fs2.unlinkSync(tempFile);\n      } catch {\n      }\n      callback(null, contents);\n    } catch (err) {\n      callback(err, null);\n    }\n  },\n  writeFile(contents, callback) {\n    try {\n      let tempFile = randomFileName();\n      fs2.writeFileSync(tempFile, contents);\n      callback(tempFile);\n    } catch {\n      callback(null);\n    }\n  }\n};\nvar fsAsync = {\n  readFile(tempFile, callback) {\n    try {\n      fs2.readFile(tempFile, \"utf8\", (err, contents) => {\n        try {\n          fs2.unlink(tempFile, () => callback(err, contents));\n        } catch {\n          callback(err, contents);\n        }\n      });\n    } catch (err) {\n      callback(err, null);\n    }\n  },\n  writeFile(contents, callback) {\n    try {\n      let tempFile = randomFileName();\n      fs2.writeFile(tempFile, contents, (err) => err !== null ? callback(null) : callback(tempFile));\n    } catch {\n      callback(null);\n    }\n  }\n};\nvar version = \"0.15.18\";\nvar build = (options) => ensureServiceIsRunning().build(options);\nvar serve = (serveOptions, buildOptions) => ensureServiceIsRunning().serve(serveOptions, buildOptions);\nvar transform = (input, options) => ensureServiceIsRunning().transform(input, options);\nvar formatMessages = (messages, options) => ensureServiceIsRunning().formatMessages(messages, options);\nvar analyzeMetafile = (messages, options) => ensureServiceIsRunning().analyzeMetafile(messages, options);\nvar buildSync = (options) => {\n  if (worker_threads && !isInternalWorkerThread) {\n    if (!workerThreadService)\n      workerThreadService = startWorkerThreadService(worker_threads);\n    return workerThreadService.buildSync(options);\n  }\n  let result;\n  runServiceSync((service) => service.buildOrServe({\n    callName: \"buildSync\",\n    refs: null,\n    serveOptions: null,\n    options,\n    isTTY: isTTY(),\n    defaultWD,\n    callback: (err, res) => {\n      if (err)\n        throw err;\n      result = res;\n    }\n  }));\n  return result;\n};\nvar transformSync = (input, options) => {\n  if (worker_threads && !isInternalWorkerThread) {\n    if (!workerThreadService)\n      workerThreadService = startWorkerThreadService(worker_threads);\n    return workerThreadService.transformSync(input, options);\n  }\n  let result;\n  runServiceSync((service) => service.transform({\n    callName: \"transformSync\",\n    refs: null,\n    input,\n    options: options || {},\n    isTTY: isTTY(),\n    fs: fsSync,\n    callback: (err, res) => {\n      if (err)\n        throw err;\n      result = res;\n    }\n  }));\n  return result;\n};\nvar formatMessagesSync = (messages, options) => {\n  if (worker_threads && !isInternalWorkerThread) {\n    if (!workerThreadService)\n      workerThreadService = startWorkerThreadService(worker_threads);\n    return workerThreadService.formatMessagesSync(messages, options);\n  }\n  let result;\n  runServiceSync((service) => service.formatMessages({\n    callName: \"formatMessagesSync\",\n    refs: null,\n    messages,\n    options,\n    callback: (err, res) => {\n      if (err)\n        throw err;\n      result = res;\n    }\n  }));\n  return result;\n};\nvar analyzeMetafileSync = (metafile, options) => {\n  if (worker_threads && !isInternalWorkerThread) {\n    if (!workerThreadService)\n      workerThreadService = startWorkerThreadService(worker_threads);\n    return workerThreadService.analyzeMetafileSync(metafile, options);\n  }\n  let result;\n  runServiceSync((service) => service.analyzeMetafile({\n    callName: \"analyzeMetafileSync\",\n    refs: null,\n    metafile: typeof metafile === \"string\" ? metafile : JSON.stringify(metafile),\n    options,\n    callback: (err, res) => {\n      if (err)\n        throw err;\n      result = res;\n    }\n  }));\n  return result;\n};\nvar initializeWasCalled = false;\nvar initialize = (options) => {\n  options = validateInitializeOptions(options || {});\n  if (options.wasmURL)\n    throw new Error(`The \"wasmURL\" option only works in the browser`);\n  if (options.wasmModule)\n    throw new Error(`The \"wasmModule\" option only works in the browser`);\n  if (options.worker)\n    throw new Error(`The \"worker\" option only works in the browser`);\n  if (initializeWasCalled)\n    throw new Error('Cannot call \"initialize\" more than once');\n  ensureServiceIsRunning();\n  initializeWasCalled = true;\n  return Promise.resolve();\n};\nvar defaultWD = process.cwd();\nvar longLivedService;\nvar ensureServiceIsRunning = () => {\n  if (longLivedService)\n    return longLivedService;\n  let [command, args] = esbuildCommandAndArgs();\n  let child = child_process.spawn(command, args.concat(`--service=${\"0.15.18\"}`, \"--ping\"), {\n    windowsHide: true,\n    stdio: [\"pipe\", \"pipe\", \"inherit\"],\n    cwd: defaultWD\n  });\n  let { readFromStdout, afterClose, service } = createChannel({\n    writeToStdin(bytes) {\n      child.stdin.write(bytes, (err) => {\n        if (err)\n          afterClose(err);\n      });\n    },\n    readFileSync: fs2.readFileSync,\n    isSync: false,\n    isWriteUnavailable: false,\n    esbuild: node_exports\n  });\n  child.stdin.on(\"error\", afterClose);\n  child.on(\"error\", afterClose);\n  const stdin = child.stdin;\n  const stdout = child.stdout;\n  stdout.on(\"data\", readFromStdout);\n  stdout.on(\"end\", afterClose);\n  let refCount = 0;\n  child.unref();\n  if (stdin.unref) {\n    stdin.unref();\n  }\n  if (stdout.unref) {\n    stdout.unref();\n  }\n  const refs = {\n    ref() {\n      if (++refCount === 1)\n        child.ref();\n    },\n    unref() {\n      if (--refCount === 0)\n        child.unref();\n    }\n  };\n  longLivedService = {\n    build: (options) => {\n      return new Promise((resolve, reject) => {\n        service.buildOrServe({\n          callName: \"build\",\n          refs,\n          serveOptions: null,\n          options,\n          isTTY: isTTY(),\n          defaultWD,\n          callback: (err, res) => err ? reject(err) : resolve(res)\n        });\n      });\n    },\n    serve: (serveOptions, buildOptions) => {\n      if (serveOptions === null || typeof serveOptions !== \"object\")\n        throw new Error(\"The first argument must be an object\");\n      return new Promise((resolve, reject) => service.buildOrServe({\n        callName: \"serve\",\n        refs,\n        serveOptions,\n        options: buildOptions,\n        isTTY: isTTY(),\n        defaultWD,\n        callback: (err, res) => err ? reject(err) : resolve(res)\n      }));\n    },\n    transform: (input, options) => {\n      return new Promise((resolve, reject) => service.transform({\n        callName: \"transform\",\n        refs,\n        input,\n        options: options || {},\n        isTTY: isTTY(),\n        fs: fsAsync,\n        callback: (err, res) => err ? reject(err) : resolve(res)\n      }));\n    },\n    formatMessages: (messages, options) => {\n      return new Promise((resolve, reject) => service.formatMessages({\n        callName: \"formatMessages\",\n        refs,\n        messages,\n        options,\n        callback: (err, res) => err ? reject(err) : resolve(res)\n      }));\n    },\n    analyzeMetafile: (metafile, options) => {\n      return new Promise((resolve, reject) => service.analyzeMetafile({\n        callName: \"analyzeMetafile\",\n        refs,\n        metafile: typeof metafile === \"string\" ? metafile : JSON.stringify(metafile),\n        options,\n        callback: (err, res) => err ? reject(err) : resolve(res)\n      }));\n    }\n  };\n  return longLivedService;\n};\nvar runServiceSync = (callback) => {\n  let [command, args] = esbuildCommandAndArgs();\n  let stdin = new Uint8Array();\n  let { readFromStdout, afterClose, service } = createChannel({\n    writeToStdin(bytes) {\n      if (stdin.length !== 0)\n        throw new Error(\"Must run at most one command\");\n      stdin = bytes;\n    },\n    isSync: true,\n    isWriteUnavailable: false,\n    esbuild: node_exports\n  });\n  callback(service);\n  let stdout = child_process.execFileSync(command, args.concat(`--service=${\"0.15.18\"}`), {\n    cwd: defaultWD,\n    windowsHide: true,\n    input: stdin,\n    maxBuffer: +process.env.ESBUILD_MAX_BUFFER || 16 * 1024 * 1024\n  });\n  readFromStdout(stdout);\n  afterClose(null);\n};\nvar randomFileName = () => {\n  return path2.join(os2.tmpdir(), `esbuild-${crypto.randomBytes(32).toString(\"hex\")}`);\n};\nvar workerThreadService = null;\nvar startWorkerThreadService = (worker_threads2) => {\n  let { port1: mainPort, port2: workerPort } = new worker_threads2.MessageChannel();\n  let worker = new worker_threads2.Worker(__filename, {\n    workerData: { workerPort, defaultWD, esbuildVersion: \"0.15.18\" },\n    transferList: [workerPort],\n    execArgv: []\n  });\n  let nextID = 0;\n  let fakeBuildError = (text) => {\n    let error = new Error(`Build failed with 1 error:\nerror: ${text}`);\n    let errors = [{ id: \"\", pluginName: \"\", text, location: null, notes: [], detail: void 0 }];\n    error.errors = errors;\n    error.warnings = [];\n    return error;\n  };\n  let validateBuildSyncOptions = (options) => {\n    if (!options)\n      return;\n    let plugins = options.plugins;\n    let incremental = options.incremental;\n    let watch = options.watch;\n    if (plugins && plugins.length > 0)\n      throw fakeBuildError(`Cannot use plugins in synchronous API calls`);\n    if (incremental)\n      throw fakeBuildError(`Cannot use \"incremental\" with a synchronous build`);\n    if (watch)\n      throw fakeBuildError(`Cannot use \"watch\" with a synchronous build`);\n  };\n  let applyProperties = (object, properties) => {\n    for (let key in properties) {\n      object[key] = properties[key];\n    }\n  };\n  let runCallSync = (command, args) => {\n    let id = nextID++;\n    let sharedBuffer = new SharedArrayBuffer(8);\n    let sharedBufferView = new Int32Array(sharedBuffer);\n    let msg = { sharedBuffer, id, command, args };\n    worker.postMessage(msg);\n    let status = Atomics.wait(sharedBufferView, 0, 0);\n    if (status !== \"ok\" && status !== \"not-equal\")\n      throw new Error(\"Internal error: Atomics.wait() failed: \" + status);\n    let { message: { id: id2, resolve, reject, properties } } = worker_threads2.receiveMessageOnPort(mainPort);\n    if (id !== id2)\n      throw new Error(`Internal error: Expected id ${id} but got id ${id2}`);\n    if (reject) {\n      applyProperties(reject, properties);\n      throw reject;\n    }\n    return resolve;\n  };\n  worker.unref();\n  return {\n    buildSync(options) {\n      validateBuildSyncOptions(options);\n      return runCallSync(\"build\", [options]);\n    },\n    transformSync(input, options) {\n      return runCallSync(\"transform\", [input, options]);\n    },\n    formatMessagesSync(messages, options) {\n      return runCallSync(\"formatMessages\", [messages, options]);\n    },\n    analyzeMetafileSync(metafile, options) {\n      return runCallSync(\"analyzeMetafile\", [metafile, options]);\n    }\n  };\n};\nvar startSyncServiceWorker = () => {\n  let workerPort = worker_threads.workerData.workerPort;\n  let parentPort = worker_threads.parentPort;\n  let extractProperties = (object) => {\n    let properties = {};\n    if (object && typeof object === \"object\") {\n      for (let key in object) {\n        properties[key] = object[key];\n      }\n    }\n    return properties;\n  };\n  try {\n    let service = ensureServiceIsRunning();\n    defaultWD = worker_threads.workerData.defaultWD;\n    parentPort.on(\"message\", (msg) => {\n      (async () => {\n        let { sharedBuffer, id, command, args } = msg;\n        let sharedBufferView = new Int32Array(sharedBuffer);\n        try {\n          switch (command) {\n            case \"build\":\n              workerPort.postMessage({ id, resolve: await service.build(args[0]) });\n              break;\n            case \"transform\":\n              workerPort.postMessage({ id, resolve: await service.transform(args[0], args[1]) });\n              break;\n            case \"formatMessages\":\n              workerPort.postMessage({ id, resolve: await service.formatMessages(args[0], args[1]) });\n              break;\n            case \"analyzeMetafile\":\n              workerPort.postMessage({ id, resolve: await service.analyzeMetafile(args[0], args[1]) });\n              break;\n            default:\n              throw new Error(`Invalid command: ${command}`);\n          }\n        } catch (reject) {\n          workerPort.postMessage({ id, reject, properties: extractProperties(reject) });\n        }\n        Atomics.add(sharedBufferView, 0, 1);\n        Atomics.notify(sharedBufferView, 0, Infinity);\n      })();\n    });\n  } catch (reject) {\n    parentPort.on(\"message\", (msg) => {\n      let { sharedBuffer, id } = msg;\n      let sharedBufferView = new Int32Array(sharedBuffer);\n      workerPort.postMessage({ id, reject, properties: extractProperties(reject) });\n      Atomics.add(sharedBufferView, 0, 1);\n      Atomics.notify(sharedBufferView, 0, Infinity);\n    });\n  }\n};\nif (isInternalWorkerThread) {\n  startSyncServiceWorker();\n}\nvar node_default = node_exports;\n// Annotate the CommonJS export names for ESM import in node:\n0 && (module.exports = {\n  analyzeMetafile,\n  analyzeMetafileSync,\n  build,\n  buildSync,\n  formatMessages,\n  formatMessagesSync,\n  initialize,\n  serve,\n  transform,\n  transformSync,\n  version\n});\n/install.js\"F\"use strict\";\nvar __create = Object.create;\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __getProtoOf = Object.getPrototypeOf;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __copyProps = (to, from, except, desc) => {\n  if (from && typeof from === \"object\" || typeof from === \"function\") {\n    for (let key of __getOwnPropNames(from))\n      if (!__hasOwnProp.call(to, key) && key !== except)\n        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n  }\n  return to;\n};\nvar __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(\n  isNodeMode || !mod || !mod.__esModule ? __defProp(target, \"default\", { value: mod, enumerable: true }) : target,\n  mod\n));\n\n// lib/npm/node-platform.ts\nvar fs = require(\"fs\");\nvar os = require(\"os\");\nvar path = require(\"path\");\nvar ESBUILD_BINARY_PATH = process.env.ESBUILD_BINARY_PATH || ESBUILD_BINARY_PATH;\nvar knownWindowsPackages = {\n  \"win32 arm64 LE\": \"esbuild-windows-arm64\",\n  \"win32 ia32 LE\": \"esbuild-windows-32\",\n  \"win32 x64 LE\": \"esbuild-windows-64\"\n};\nvar knownUnixlikePackages = {\n  \"android arm64 LE\": \"esbuild-android-arm64\",\n  \"darwin arm64 LE\": \"esbuild-darwin-arm64\",\n  \"darwin x64 LE\": \"esbuild-darwin-64\",\n  \"freebsd arm64 LE\": \"esbuild-freebsd-arm64\",\n  \"freebsd x64 LE\": \"esbuild-freebsd-64\",\n  \"linux arm LE\": \"esbuild-linux-arm\",\n  \"linux arm64 LE\": \"esbuild-linux-arm64\",\n  \"linux ia32 LE\": \"esbuild-linux-32\",\n  \"linux mips64el LE\": \"esbuild-linux-mips64le\",\n  \"linux ppc64 LE\": \"esbuild-linux-ppc64le\",\n  \"linux riscv64 LE\": \"esbuild-linux-riscv64\",\n  \"linux s390x BE\": \"esbuild-linux-s390x\",\n  \"linux x64 LE\": \"esbuild-linux-64\",\n  \"linux loong64 LE\": \"@esbuild/linux-loong64\",\n  \"netbsd x64 LE\": \"esbuild-netbsd-64\",\n  \"openbsd x64 LE\": \"esbuild-openbsd-64\",\n  \"sunos x64 LE\": \"esbuild-sunos-64\"\n};\nvar knownWebAssemblyFallbackPackages = {\n  \"android arm LE\": \"@esbuild/android-arm\",\n  \"android x64 LE\": \"esbuild-android-64\"\n};\nfunction pkgAndSubpathForCurrentPlatform() {\n  let pkg;\n  let subpath;\n  let isWASM = false;\n  let platformKey = `${process.platform} ${os.arch()} ${os.endianness()}`;\n  if (platformKey in knownWindowsPackages) {\n    pkg = knownWindowsPackages[platformKey];\n    subpath = \"esbuild.exe\";\n  } else if (platformKey in knownUnixlikePackages) {\n    pkg = knownUnixlikePackages[platformKey];\n    subpath = \"bin/esbuild\";\n  } else if (platformKey in knownWebAssemblyFallbackPackages) {\n    pkg = knownWebAssemblyFallbackPackages[platformKey];\n    subpath = \"bin/esbuild\";\n    isWASM = true;\n  } else {\n    throw new Error(`Unsupported platform: ${platformKey}`);\n  }\n  return { pkg, subpath, isWASM };\n}\nfunction downloadedBinPath(pkg, subpath) {\n  const esbuildLibDir = path.dirname(require.resolve(\"esbuild\"));\n  return path.join(esbuildLibDir, `downloaded-${pkg}-${path.basename(subpath)}`);\n}\n\n// lib/npm/node-install.ts\nvar fs2 = require(\"fs\");\nvar os2 = require(\"os\");\nvar path2 = require(\"path\");\nvar zlib = require(\"zlib\");\nvar https = require(\"https\");\nvar child_process = require(\"child_process\");\nvar toPath = path2.join(__dirname, \"bin\", \"esbuild\");\nvar isToPathJS = true;\nfunction validateBinaryVersion(...command) {\n  command.push(\"--version\");\n  const stdout = child_process.execFileSync(command.shift(), command, {\n    stdio: \"pipe\"\n  }).toString().trim();\n  if (stdout !== \"0.15.18\") {\n    throw new Error(`Expected ${JSON.stringify(\"0.15.18\")} but got ${JSON.stringify(stdout)}`);\n  }\n}\nfunction isYarn() {\n  const { npm_config_user_agent } = process.env;\n  if (npm_config_user_agent) {\n    return /\\byarn\\//.test(npm_config_user_agent);\n  }\n  return false;\n}\nfunction fetch(url) {\n  return new Promise((resolve, reject) => {\n    https.get(url, (res) => {\n      if ((res.statusCode === 301 || res.statusCode === 302) && res.headers.location)\n        return fetch(res.headers.location).then(resolve, reject);\n      if (res.statusCode !== 200)\n        return reject(new Error(`Server responded with ${res.statusCode}`));\n      let chunks = [];\n      res.on(\"data\", (chunk) => chunks.push(chunk));\n      res.on(\"end\", () => resolve(Buffer.concat(chunks)));\n    }).on(\"error\", reject);\n  });\n}\nfunction extractFileFromTarGzip(buffer, subpath) {\n  try {\n    buffer = zlib.unzipSync(buffer);\n  } catch (err) {\n    throw new Error(`Invalid gzip data in archive: ${err && err.message || err}`);\n  }\n  let str = (i, n) => String.fromCharCode(...buffer.subarray(i, i + n)).replace(/\\0.*$/, \"\");\n  let offset = 0;\n  subpath = `package/${subpath}`;\n  while (offset < buffer.length) {\n    let name = str(offset, 100);\n    let size = parseInt(str(offset + 124, 12), 8);\n    offset += 512;\n    if (!isNaN(size)) {\n      if (name === subpath)\n        return buffer.subarray(offset, offset + size);\n      offset += size + 511 & ~511;\n    }\n  }\n  throw new Error(`Could not find ${JSON.stringify(subpath)} in archive`);\n}\nfunction installUsingNPM(pkg, subpath, binPath) {\n  const env = { ...process.env, npm_config_global: void 0 };\n  const esbuildLibDir = path2.dirname(require.resolve(\"esbuild\"));\n  const installDir = path2.join(esbuildLibDir, \"npm-install\");\n  fs2.mkdirSync(installDir);\n  try {\n    fs2.writeFileSync(path2.join(installDir, \"package.json\"), \"{}\");\n    child_process.execSync(\n      `npm install --loglevel=error --prefer-offline --no-audit --progress=false ${pkg}@${\"0.15.18\"}`,\n      { cwd: installDir, stdio: \"pipe\", env }\n    );\n    const installedBinPath = path2.join(installDir, \"node_modules\", pkg, subpath);\n    fs2.renameSync(installedBinPath, binPath);\n  } finally {\n    try {\n      removeRecursive(installDir);\n    } catch {\n    }\n  }\n}\nfunction removeRecursive(dir) {\n  for (const entry of fs2.readdirSync(dir)) {\n    const entryPath = path2.join(dir, entry);\n    let stats;\n    try {\n      stats = fs2.lstatSync(entryPath);\n    } catch {\n      continue;\n    }\n    if (stats.isDirectory())\n      removeRecursive(entryPath);\n    else\n      fs2.unlinkSync(entryPath);\n  }\n  fs2.rmdirSync(dir);\n}\nfunction applyManualBinaryPathOverride(overridePath) {\n  const pathString = JSON.stringify(overridePath);\n  fs2.writeFileSync(toPath, `#!/usr/bin/env node\nrequire('child_process').execFileSync(${pathString}, process.argv.slice(2), { stdio: 'inherit' });\n`);\n  const libMain = path2.join(__dirname, \"lib\", \"main.js\");\n  const code = fs2.readFileSync(libMain, \"utf8\");\n  fs2.writeFileSync(libMain, `var ESBUILD_BINARY_PATH = ${pathString};\n${code}`);\n}\nfunction maybeOptimizePackage(binPath) {\n  if (os2.platform() !== \"win32\" && !isYarn()) {\n    const tempPath = path2.join(__dirname, \"bin-esbuild\");\n    try {\n      fs2.linkSync(binPath, tempPath);\n      fs2.renameSync(tempPath, toPath);\n      isToPathJS = false;\n      fs2.unlinkSync(tempPath);\n    } catch {\n    }\n  }\n}\nasync function downloadDirectlyFromNPM(pkg, subpath, binPath) {\n  const url = `https://registry.npmjs.org/${pkg}/-/${pkg}-${\"0.15.18\"}.tgz`;\n  console.error(`[esbuild] Trying to download ${JSON.stringify(url)}`);\n  try {\n    fs2.writeFileSync(binPath, extractFileFromTarGzip(await fetch(url), subpath));\n    fs2.chmodSync(binPath, 493);\n  } catch (e) {\n    console.error(`[esbuild] Failed to download ${JSON.stringify(url)}: ${e && e.message || e}`);\n    throw e;\n  }\n}\nasync function checkAndPreparePackage() {\n  if (ESBUILD_BINARY_PATH) {\n    applyManualBinaryPathOverride(ESBUILD_BINARY_PATH);\n    return;\n  }\n  const { pkg, subpath } = pkgAndSubpathForCurrentPlatform();\n  let binPath;\n  try {\n    binPath = require.resolve(`${pkg}/${subpath}`);\n  } catch (e) {\n    console.error(`[esbuild] Failed to find package \"${pkg}\" on the file system\n\nThis can happen if you use the \"--no-optional\" flag. The \"optionalDependencies\"\npackage.json feature is used by esbuild to install the correct binary executable\nfor your current platform. This install script will now attempt to work around\nthis. If that fails, you need to remove the \"--no-optional\" flag to use esbuild.\n`);\n    binPath = downloadedBinPath(pkg, subpath);\n    try {\n      console.error(`[esbuild] Trying to install package \"${pkg}\" using npm`);\n      installUsingNPM(pkg, subpath, binPath);\n    } catch (e2) {\n      console.error(`[esbuild] Failed to install package \"${pkg}\" using npm: ${e2 && e2.message || e2}`);\n      try {\n        await downloadDirectlyFromNPM(pkg, subpath, binPath);\n      } catch (e3) {\n        throw new Error(`Failed to install package \"${pkg}\"`);\n      }\n    }\n  }\n  maybeOptimizePackage(binPath);\n}\ncheckAndPreparePackage().then(() => {\n  if (isToPathJS) {\n    validateBinaryVersion(process.execPath, toPath);\n  } else {\n    validateBinaryVersion(toPath);\n  }\n});\n/LICENSE.md\u0004-MIT License\n\nCopyright (c) 2020 Evan Wallace\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/ZXNidWlsZEAwLjE3Ljk=",
    "content": "/bin/esbuild##!/usr/bin/env node\n\"use strict\";\nvar __create = Object.create;\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __getProtoOf = Object.getPrototypeOf;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __copyProps = (to, from, except, desc) => {\n  if (from && typeof from === \"object\" || typeof from === \"function\") {\n    for (let key of __getOwnPropNames(from))\n      if (!__hasOwnProp.call(to, key) && key !== except)\n        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n  }\n  return to;\n};\nvar __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(\n  // If the importer is in node compatibility mode or this is not an ESM\n  // file that has been converted to a CommonJS file using a Babel-\n  // compatible transform (i.e. \"__esModule\" has not been set), then set\n  // \"default\" to the CommonJS \"module.exports\" for node compatibility.\n  isNodeMode || !mod || !mod.__esModule ? __defProp(target, \"default\", { value: mod, enumerable: true }) : target,\n  mod\n));\n\n// lib/npm/node-platform.ts\nvar fs = require(\"fs\");\nvar os = require(\"os\");\nvar path = require(\"path\");\nvar ESBUILD_BINARY_PATH = process.env.ESBUILD_BINARY_PATH || ESBUILD_BINARY_PATH;\nvar isValidBinaryPath = (x) => !!x && x !== \"/usr/bin/esbuild\";\nvar packageDarwin_arm64 = \"@esbuild/darwin-arm64\";\nvar packageDarwin_x64 = \"@esbuild/darwin-x64\";\nvar knownWindowsPackages = {\n  \"win32 arm64 LE\": \"@esbuild/win32-arm64\",\n  \"win32 ia32 LE\": \"@esbuild/win32-ia32\",\n  \"win32 x64 LE\": \"@esbuild/win32-x64\"\n};\nvar knownUnixlikePackages = {\n  \"android arm64 LE\": \"@esbuild/android-arm64\",\n  \"darwin arm64 LE\": \"@esbuild/darwin-arm64\",\n  \"darwin x64 LE\": \"@esbuild/darwin-x64\",\n  \"freebsd arm64 LE\": \"@esbuild/freebsd-arm64\",\n  \"freebsd x64 LE\": \"@esbuild/freebsd-x64\",\n  \"linux arm LE\": \"@esbuild/linux-arm\",\n  \"linux arm64 LE\": \"@esbuild/linux-arm64\",\n  \"linux ia32 LE\": \"@esbuild/linux-ia32\",\n  \"linux mips64el LE\": \"@esbuild/linux-mips64el\",\n  \"linux ppc64 LE\": \"@esbuild/linux-ppc64\",\n  \"linux riscv64 LE\": \"@esbuild/linux-riscv64\",\n  \"linux s390x BE\": \"@esbuild/linux-s390x\",\n  \"linux x64 LE\": \"@esbuild/linux-x64\",\n  \"linux loong64 LE\": \"@esbuild/linux-loong64\",\n  \"netbsd x64 LE\": \"@esbuild/netbsd-x64\",\n  \"openbsd x64 LE\": \"@esbuild/openbsd-x64\",\n  \"sunos x64 LE\": \"@esbuild/sunos-x64\"\n};\nvar knownWebAssemblyFallbackPackages = {\n  \"android arm LE\": \"@esbuild/android-arm\",\n  \"android x64 LE\": \"@esbuild/android-x64\"\n};\nfunction pkgAndSubpathForCurrentPlatform() {\n  let pkg;\n  let subpath;\n  let isWASM2 = false;\n  let platformKey = `${process.platform} ${os.arch()} ${os.endianness()}`;\n  if (platformKey in knownWindowsPackages) {\n    pkg = knownWindowsPackages[platformKey];\n    subpath = \"esbuild.exe\";\n  } else if (platformKey in knownUnixlikePackages) {\n    pkg = knownUnixlikePackages[platformKey];\n    subpath = \"bin/esbuild\";\n  } else if (platformKey in knownWebAssemblyFallbackPackages) {\n    pkg = knownWebAssemblyFallbackPackages[platformKey];\n    subpath = \"bin/esbuild\";\n    isWASM2 = true;\n  } else {\n    throw new Error(`Unsupported platform: ${platformKey}`);\n  }\n  return { pkg, subpath, isWASM: isWASM2 };\n}\nfunction pkgForSomeOtherPlatform() {\n  const libMainJS = require.resolve(\"esbuild\");\n  const nodeModulesDirectory = path.dirname(path.dirname(path.dirname(libMainJS)));\n  if (path.basename(nodeModulesDirectory) === \"node_modules\") {\n    for (const unixKey in knownUnixlikePackages) {\n      try {\n        const pkg = knownUnixlikePackages[unixKey];\n        if (fs.existsSync(path.join(nodeModulesDirectory, pkg)))\n          return pkg;\n      } catch {\n      }\n    }\n    for (const windowsKey in knownWindowsPackages) {\n      try {\n        const pkg = knownWindowsPackages[windowsKey];\n        if (fs.existsSync(path.join(nodeModulesDirectory, pkg)))\n          return pkg;\n      } catch {\n      }\n    }\n  }\n  return null;\n}\nfunction downloadedBinPath(pkg, subpath) {\n  const esbuildLibDir = path.dirname(require.resolve(\"esbuild\"));\n  return path.join(esbuildLibDir, `downloaded-${pkg.replace(\"/\", \"-\")}-${path.basename(subpath)}`);\n}\nfunction generateBinPath() {\n  if (isValidBinaryPath(ESBUILD_BINARY_PATH)) {\n    if (!fs.existsSync(ESBUILD_BINARY_PATH)) {\n      console.warn(`[esbuild] Ignoring bad configuration: ESBUILD_BINARY_PATH=${ESBUILD_BINARY_PATH}`);\n    } else {\n      return { binPath: ESBUILD_BINARY_PATH, isWASM: false };\n    }\n  }\n  const { pkg, subpath, isWASM: isWASM2 } = pkgAndSubpathForCurrentPlatform();\n  let binPath2;\n  try {\n    binPath2 = require.resolve(`${pkg}/${subpath}`);\n  } catch (e) {\n    binPath2 = downloadedBinPath(pkg, subpath);\n    if (!fs.existsSync(binPath2)) {\n      try {\n        require.resolve(pkg);\n      } catch {\n        const otherPkg = pkgForSomeOtherPlatform();\n        if (otherPkg) {\n          let suggestions = `\nSpecifically the \"${otherPkg}\" package is present but this platform\nneeds the \"${pkg}\" package instead. People often get into this\nsituation by installing esbuild on Windows or macOS and copying \"node_modules\"\ninto a Docker image that runs Linux, or by copying \"node_modules\" between\nWindows and WSL environments.\n\nIf you are installing with npm, you can try not copying the \"node_modules\"\ndirectory when you copy the files over, and running \"npm ci\" or \"npm install\"\non the destination platform after the copy. Or you could consider using yarn\ninstead of npm which has built-in support for installing a package on multiple\nplatforms simultaneously.\n\nIf you are installing with yarn, you can try listing both this platform and the\nother platform in your \".yarnrc.yml\" file using the \"supportedArchitectures\"\nfeature: https://yarnpkg.com/configuration/yarnrc/#supportedArchitectures\nKeep in mind that this means multiple copies of esbuild will be present.\n`;\n          if (pkg === packageDarwin_x64 && otherPkg === packageDarwin_arm64 || pkg === packageDarwin_arm64 && otherPkg === packageDarwin_x64) {\n            suggestions = `\nSpecifically the \"${otherPkg}\" package is present but this platform\nneeds the \"${pkg}\" package instead. People often get into this\nsituation by installing esbuild with npm running inside of Rosetta 2 and then\ntrying to use it with node running outside of Rosetta 2, or vice versa (Rosetta\n2 is Apple's on-the-fly x86_64-to-arm64 translation service).\n\nIf you are installing with npm, you can try ensuring that both npm and node are\nnot running under Rosetta 2 and then reinstalling esbuild. This likely involves\nchanging how you installed npm and/or node. For example, installing node with\nthe universal installer here should work: https://nodejs.org/en/download/. Or\nyou could consider using yarn instead of npm which has built-in support for\ninstalling a package on multiple platforms simultaneously.\n\nIf you are installing with yarn, you can try listing both \"arm64\" and \"x64\"\nin your \".yarnrc.yml\" file using the \"supportedArchitectures\" feature:\nhttps://yarnpkg.com/configuration/yarnrc/#supportedArchitectures\nKeep in mind that this means multiple copies of esbuild will be present.\n`;\n          }\n          throw new Error(`\nYou installed esbuild for another platform than the one you're currently using.\nThis won't work because esbuild is written with native code and needs to\ninstall a platform-specific binary executable.\n${suggestions}\nAnother alternative is to use the \"esbuild-wasm\" package instead, which works\nthe same way on all platforms. But it comes with a heavy performance cost and\ncan sometimes be 10x slower than the \"esbuild\" package, so you may also not\nwant to do that.\n`);\n        }\n        throw new Error(`The package \"${pkg}\" could not be found, and is needed by esbuild.\n\nIf you are installing esbuild with npm, make sure that you don't specify the\n\"--no-optional\" or \"--omit=optional\" flags. The \"optionalDependencies\" feature\nof \"package.json\" is used by esbuild to install the correct binary executable\nfor your current platform.`);\n      }\n      throw e;\n    }\n  }\n  if (/\\.zip\\//.test(binPath2)) {\n    let pnpapi;\n    try {\n      pnpapi = require(\"pnpapi\");\n    } catch (e) {\n    }\n    if (pnpapi) {\n      const root = pnpapi.getPackageInformation(pnpapi.topLevel).packageLocation;\n      const binTargetPath = path.join(\n        root,\n        \"node_modules\",\n        \".cache\",\n        \"esbuild\",\n        `pnpapi-${pkg.replace(\"/\", \"-\")}-${\"0.17.9\"}-${path.basename(subpath)}`\n      );\n      if (!fs.existsSync(binTargetPath)) {\n        fs.mkdirSync(path.dirname(binTargetPath), { recursive: true });\n        fs.copyFileSync(binPath2, binTargetPath);\n        fs.chmodSync(binTargetPath, 493);\n      }\n      return { binPath: binTargetPath, isWASM: isWASM2 };\n    }\n  }\n  return { binPath: binPath2, isWASM: isWASM2 };\n}\n\n// lib/npm/node-shim.ts\nvar { binPath, isWASM } = generateBinPath();\nif (isWASM) {\n  require(\"child_process\").execFileSync(\"node\", [binPath].concat(process.argv.slice(2)), { stdio: \"inherit\" });\n} else {\n  require(\"child_process\").execFileSync(binPath, process.argv.slice(2), { stdio: \"inherit\" });\n}\n/README.mdį# esbuild\n\nThis is a JavaScript bundler and minifier. See https://github.com/evanw/esbuild and the [JavaScript API documentation](https://esbuild.github.io/api/) for details.\n/install.js*\u001e\"use strict\";\nvar __create = Object.create;\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __getProtoOf = Object.getPrototypeOf;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __copyProps = (to, from, except, desc) => {\n  if (from && typeof from === \"object\" || typeof from === \"function\") {\n    for (let key of __getOwnPropNames(from))\n      if (!__hasOwnProp.call(to, key) && key !== except)\n        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n  }\n  return to;\n};\nvar __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(\n  // If the importer is in node compatibility mode or this is not an ESM\n  // file that has been converted to a CommonJS file using a Babel-\n  // compatible transform (i.e. \"__esModule\" has not been set), then set\n  // \"default\" to the CommonJS \"module.exports\" for node compatibility.\n  isNodeMode || !mod || !mod.__esModule ? __defProp(target, \"default\", { value: mod, enumerable: true }) : target,\n  mod\n));\n\n// lib/npm/node-platform.ts\nvar fs = require(\"fs\");\nvar os = require(\"os\");\nvar path = require(\"path\");\nvar ESBUILD_BINARY_PATH = process.env.ESBUILD_BINARY_PATH || ESBUILD_BINARY_PATH;\nvar isValidBinaryPath = (x) => !!x && x !== \"/usr/bin/esbuild\";\nvar knownWindowsPackages = {\n  \"win32 arm64 LE\": \"@esbuild/win32-arm64\",\n  \"win32 ia32 LE\": \"@esbuild/win32-ia32\",\n  \"win32 x64 LE\": \"@esbuild/win32-x64\"\n};\nvar knownUnixlikePackages = {\n  \"android arm64 LE\": \"@esbuild/android-arm64\",\n  \"darwin arm64 LE\": \"@esbuild/darwin-arm64\",\n  \"darwin x64 LE\": \"@esbuild/darwin-x64\",\n  \"freebsd arm64 LE\": \"@esbuild/freebsd-arm64\",\n  \"freebsd x64 LE\": \"@esbuild/freebsd-x64\",\n  \"linux arm LE\": \"@esbuild/linux-arm\",\n  \"linux arm64 LE\": \"@esbuild/linux-arm64\",\n  \"linux ia32 LE\": \"@esbuild/linux-ia32\",\n  \"linux mips64el LE\": \"@esbuild/linux-mips64el\",\n  \"linux ppc64 LE\": \"@esbuild/linux-ppc64\",\n  \"linux riscv64 LE\": \"@esbuild/linux-riscv64\",\n  \"linux s390x BE\": \"@esbuild/linux-s390x\",\n  \"linux x64 LE\": \"@esbuild/linux-x64\",\n  \"linux loong64 LE\": \"@esbuild/linux-loong64\",\n  \"netbsd x64 LE\": \"@esbuild/netbsd-x64\",\n  \"openbsd x64 LE\": \"@esbuild/openbsd-x64\",\n  \"sunos x64 LE\": \"@esbuild/sunos-x64\"\n};\nvar knownWebAssemblyFallbackPackages = {\n  \"android arm LE\": \"@esbuild/android-arm\",\n  \"android x64 LE\": \"@esbuild/android-x64\"\n};\nfunction pkgAndSubpathForCurrentPlatform() {\n  let pkg;\n  let subpath;\n  let isWASM = false;\n  let platformKey = `${process.platform} ${os.arch()} ${os.endianness()}`;\n  if (platformKey in knownWindowsPackages) {\n    pkg = knownWindowsPackages[platformKey];\n    subpath = \"esbuild.exe\";\n  } else if (platformKey in knownUnixlikePackages) {\n    pkg = knownUnixlikePackages[platformKey];\n    subpath = \"bin/esbuild\";\n  } else if (platformKey in knownWebAssemblyFallbackPackages) {\n    pkg = knownWebAssemblyFallbackPackages[platformKey];\n    subpath = \"bin/esbuild\";\n    isWASM = true;\n  } else {\n    throw new Error(`Unsupported platform: ${platformKey}`);\n  }\n  return { pkg, subpath, isWASM };\n}\nfunction downloadedBinPath(pkg, subpath) {\n  const esbuildLibDir = path.dirname(require.resolve(\"esbuild\"));\n  return path.join(esbuildLibDir, `downloaded-${pkg.replace(\"/\", \"-\")}-${path.basename(subpath)}`);\n}\n\n// lib/npm/node-install.ts\nvar fs2 = require(\"fs\");\nvar os2 = require(\"os\");\nvar path2 = require(\"path\");\nvar zlib = require(\"zlib\");\nvar https = require(\"https\");\nvar child_process = require(\"child_process\");\nvar toPath = path2.join(__dirname, \"bin\", \"esbuild\");\nvar isToPathJS = true;\nfunction validateBinaryVersion(...command) {\n  command.push(\"--version\");\n  let stdout;\n  try {\n    stdout = child_process.execFileSync(command.shift(), command, {\n      // Without this, this install script strangely crashes with the error\n      // \"EACCES: permission denied, write\" but only on Ubuntu Linux when node is\n      // installed from the Snap Store. This is not a problem when you download\n      // the official version of node. The problem appears to be that stderr\n      // (i.e. file descriptor 2) isn't writable?\n      //\n      // More info:\n      // - https://snapcraft.io/ (what the Snap Store is)\n      // - https://nodejs.org/dist/ (download the official version of node)\n      // - https://github.com/evanw/esbuild/issues/1711#issuecomment-1027554035\n      //\n      stdio: \"pipe\"\n    }).toString().trim();\n  } catch (err) {\n    if (os2.platform() === \"darwin\" && /_SecTrustEvaluateWithError/.test(err + \"\")) {\n      let os3 = \"this version of macOS\";\n      try {\n        os3 = \"macOS \" + child_process.execFileSync(\"sw_vers\", [\"-productVersion\"]).toString().trim();\n      } catch {\n      }\n      throw new Error(`The \"esbuild\" package cannot be installed because ${os3} is too outdated.\n\nThe Go compiler (which esbuild relies on) no longer supports ${os3},\nwhich means the \"esbuild\" binary executable can't be run. You can either:\n\n  * Update your version of macOS to one that the Go compiler supports\n  * Use the \"esbuild-wasm\" package instead of the \"esbuild\" package\n  * Build esbuild yourself using an older version of the Go compiler\n`);\n    }\n    throw err;\n  }\n  if (stdout !== \"0.17.9\") {\n    throw new Error(`Expected ${JSON.stringify(\"0.17.9\")} but got ${JSON.stringify(stdout)}`);\n  }\n}\nfunction isYarn() {\n  const { npm_config_user_agent } = process.env;\n  if (npm_config_user_agent) {\n    return /\\byarn\\//.test(npm_config_user_agent);\n  }\n  return false;\n}\nfunction fetch(url) {\n  return new Promise((resolve, reject) => {\n    https.get(url, (res) => {\n      if ((res.statusCode === 301 || res.statusCode === 302) && res.headers.location)\n        return fetch(res.headers.location).then(resolve, reject);\n      if (res.statusCode !== 200)\n        return reject(new Error(`Server responded with ${res.statusCode}`));\n      let chunks = [];\n      res.on(\"data\", (chunk) => chunks.push(chunk));\n      res.on(\"end\", () => resolve(Buffer.concat(chunks)));\n    }).on(\"error\", reject);\n  });\n}\nfunction extractFileFromTarGzip(buffer, subpath) {\n  try {\n    buffer = zlib.unzipSync(buffer);\n  } catch (err) {\n    throw new Error(`Invalid gzip data in archive: ${err && err.message || err}`);\n  }\n  let str = (i, n) => String.fromCharCode(...buffer.subarray(i, i + n)).replace(/\\0.*$/, \"\");\n  let offset = 0;\n  subpath = `package/${subpath}`;\n  while (offset < buffer.length) {\n    let name = str(offset, 100);\n    let size = parseInt(str(offset + 124, 12), 8);\n    offset += 512;\n    if (!isNaN(size)) {\n      if (name === subpath)\n        return buffer.subarray(offset, offset + size);\n      offset += size + 511 & ~511;\n    }\n  }\n  throw new Error(`Could not find ${JSON.stringify(subpath)} in archive`);\n}\nfunction installUsingNPM(pkg, subpath, binPath) {\n  const env = { ...process.env, npm_config_global: void 0 };\n  const esbuildLibDir = path2.dirname(require.resolve(\"esbuild\"));\n  const installDir = path2.join(esbuildLibDir, \"npm-install\");\n  fs2.mkdirSync(installDir);\n  try {\n    fs2.writeFileSync(path2.join(installDir, \"package.json\"), \"{}\");\n    child_process.execSync(\n      `npm install --loglevel=error --prefer-offline --no-audit --progress=false ${pkg}@${\"0.17.9\"}`,\n      { cwd: installDir, stdio: \"pipe\", env }\n    );\n    const installedBinPath = path2.join(installDir, \"node_modules\", pkg, subpath);\n    fs2.renameSync(installedBinPath, binPath);\n  } finally {\n    try {\n      removeRecursive(installDir);\n    } catch {\n    }\n  }\n}\nfunction removeRecursive(dir) {\n  for (const entry of fs2.readdirSync(dir)) {\n    const entryPath = path2.join(dir, entry);\n    let stats;\n    try {\n      stats = fs2.lstatSync(entryPath);\n    } catch {\n      continue;\n    }\n    if (stats.isDirectory())\n      removeRecursive(entryPath);\n    else\n      fs2.unlinkSync(entryPath);\n  }\n  fs2.rmdirSync(dir);\n}\nfunction applyManualBinaryPathOverride(overridePath) {\n  const pathString = JSON.stringify(overridePath);\n  fs2.writeFileSync(toPath, `#!/usr/bin/env node\nrequire('child_process').execFileSync(${pathString}, process.argv.slice(2), { stdio: 'inherit' });\n`);\n  const libMain = path2.join(__dirname, \"lib\", \"main.js\");\n  const code = fs2.readFileSync(libMain, \"utf8\");\n  fs2.writeFileSync(libMain, `var ESBUILD_BINARY_PATH = ${pathString};\n${code}`);\n}\nfunction maybeOptimizePackage(binPath) {\n  if (os2.platform() !== \"win32\" && !isYarn()) {\n    const tempPath = path2.join(__dirname, \"bin-esbuild\");\n    try {\n      fs2.linkSync(binPath, tempPath);\n      fs2.renameSync(tempPath, toPath);\n      isToPathJS = false;\n      fs2.unlinkSync(tempPath);\n    } catch {\n    }\n  }\n}\nasync function downloadDirectlyFromNPM(pkg, subpath, binPath) {\n  const url = `https://registry.npmjs.org/${pkg}/-/${pkg.replace(\"@esbuild/\", \"\")}-${\"0.17.9\"}.tgz`;\n  console.error(`[esbuild] Trying to download ${JSON.stringify(url)}`);\n  try {\n    fs2.writeFileSync(binPath, extractFileFromTarGzip(await fetch(url), subpath));\n    fs2.chmodSync(binPath, 493);\n  } catch (e) {\n    console.error(`[esbuild] Failed to download ${JSON.stringify(url)}: ${e && e.message || e}`);\n    throw e;\n  }\n}\nasync function checkAndPreparePackage() {\n  if (isValidBinaryPath(ESBUILD_BINARY_PATH)) {\n    if (!fs2.existsSync(ESBUILD_BINARY_PATH)) {\n      console.warn(`[esbuild] Ignoring bad configuration: ESBUILD_BINARY_PATH=${ESBUILD_BINARY_PATH}`);\n    } else {\n      applyManualBinaryPathOverride(ESBUILD_BINARY_PATH);\n      return;\n    }\n  }\n  const { pkg, subpath } = pkgAndSubpathForCurrentPlatform();\n  let binPath;\n  try {\n    binPath = require.resolve(`${pkg}/${subpath}`);\n  } catch (e) {\n    console.error(`[esbuild] Failed to find package \"${pkg}\" on the file system\n\nThis can happen if you use the \"--no-optional\" flag. The \"optionalDependencies\"\npackage.json feature is used by esbuild to install the correct binary executable\nfor your current platform. This install script will now attempt to work around\nthis. If that fails, you need to remove the \"--no-optional\" flag to use esbuild.\n`);\n    binPath = downloadedBinPath(pkg, subpath);\n    try {\n      console.error(`[esbuild] Trying to install package \"${pkg}\" using npm`);\n      installUsingNPM(pkg, subpath, binPath);\n    } catch (e2) {\n      console.error(`[esbuild] Failed to install package \"${pkg}\" using npm: ${e2 && e2.message || e2}`);\n      try {\n        await downloadDirectlyFromNPM(pkg, subpath, binPath);\n      } catch (e3) {\n        throw new Error(`Failed to install package \"${pkg}\"`);\n      }\n    }\n  }\n  maybeOptimizePackage(binPath);\n}\ncheckAndPreparePackage().then(() => {\n  if (isToPathJS) {\n    validateBinaryVersion(process.execPath, toPath);\n  } else {\n    validateBinaryVersion(toPath);\n  }\n});\n/package.json\u0004{\n  \"name\": \"esbuild\",\n  \"version\": \"0.17.9\",\n  \"description\": \"An extremely fast JavaScript and CSS bundler and minifier.\",\n  \"repository\": \"https://github.com/evanw/esbuild\",\n  \"scripts\": {\n    \"postinstall\": \"node install.js\"\n  },\n  \"main\": \"lib/main.js\",\n  \"types\": \"lib/main.d.ts\",\n  \"engines\": {\n    \"node\": \">=12\"\n  },\n  \"bin\": {\n    \"esbuild\": \"bin/esbuild\"\n  },\n  \"optionalDependencies\": {\n    \"@esbuild/android-arm\": \"0.17.9\",\n    \"@esbuild/android-arm64\": \"0.17.9\",\n    \"@esbuild/android-x64\": \"0.17.9\",\n    \"@esbuild/darwin-arm64\": \"0.17.9\",\n    \"@esbuild/darwin-x64\": \"0.17.9\",\n    \"@esbuild/freebsd-arm64\": \"0.17.9\",\n    \"@esbuild/freebsd-x64\": \"0.17.9\",\n    \"@esbuild/linux-arm\": \"0.17.9\",\n    \"@esbuild/linux-arm64\": \"0.17.9\",\n    \"@esbuild/linux-ia32\": \"0.17.9\",\n    \"@esbuild/linux-loong64\": \"0.17.9\",\n    \"@esbuild/linux-mips64el\": \"0.17.9\",\n    \"@esbuild/linux-ppc64\": \"0.17.9\",\n    \"@esbuild/linux-riscv64\": \"0.17.9\",\n    \"@esbuild/linux-s390x\": \"0.17.9\",\n    \"@esbuild/linux-x64\": \"0.17.9\",\n    \"@esbuild/netbsd-x64\": \"0.17.9\",\n    \"@esbuild/openbsd-x64\": \"0.17.9\",\n    \"@esbuild/sunos-x64\": \"0.17.9\",\n    \"@esbuild/win32-arm64\": \"0.17.9\",\n    \"@esbuild/win32-ia32\": \"0.17.9\",\n    \"@esbuild/win32-x64\": \"0.17.9\"\n  },\n  \"license\": \"MIT\"\n}\n/lib/main.d.tsOexport type Platform = 'browser' | 'node' | 'neutral'\nexport type Format = 'iife' | 'cjs' | 'esm'\nexport type Loader = 'base64' | 'binary' | 'copy' | 'css' | 'dataurl' | 'default' | 'empty' | 'file' | 'js' | 'json' | 'jsx' | 'text' | 'ts' | 'tsx'\nexport type LogLevel = 'verbose' | 'debug' | 'info' | 'warning' | 'error' | 'silent'\nexport type Charset = 'ascii' | 'utf8'\nexport type Drop = 'console' | 'debugger'\n\ninterface CommonOptions {\n  /** Documentation: https://esbuild.github.io/api/#sourcemap */\n  sourcemap?: boolean | 'linked' | 'inline' | 'external' | 'both'\n  /** Documentation: https://esbuild.github.io/api/#legal-comments */\n  legalComments?: 'none' | 'inline' | 'eof' | 'linked' | 'external'\n  /** Documentation: https://esbuild.github.io/api/#source-root */\n  sourceRoot?: string\n  /** Documentation: https://esbuild.github.io/api/#sources-content */\n  sourcesContent?: boolean\n\n  /** Documentation: https://esbuild.github.io/api/#format */\n  format?: Format\n  /** Documentation: https://esbuild.github.io/api/#global-name */\n  globalName?: string\n  /** Documentation: https://esbuild.github.io/api/#target */\n  target?: string | string[]\n  /** Documentation: https://esbuild.github.io/api/#supported */\n  supported?: Record<string, boolean>\n  /** Documentation: https://esbuild.github.io/api/#platform */\n  platform?: Platform\n\n  /** Documentation: https://esbuild.github.io/api/#mangle-props */\n  mangleProps?: RegExp\n  /** Documentation: https://esbuild.github.io/api/#mangle-props */\n  reserveProps?: RegExp\n  /** Documentation: https://esbuild.github.io/api/#mangle-props */\n  mangleQuoted?: boolean\n  /** Documentation: https://esbuild.github.io/api/#mangle-props */\n  mangleCache?: Record<string, string | false>\n  /** Documentation: https://esbuild.github.io/api/#drop */\n  drop?: Drop[]\n  /** Documentation: https://esbuild.github.io/api/#minify */\n  minify?: boolean\n  /** Documentation: https://esbuild.github.io/api/#minify */\n  minifyWhitespace?: boolean\n  /** Documentation: https://esbuild.github.io/api/#minify */\n  minifyIdentifiers?: boolean\n  /** Documentation: https://esbuild.github.io/api/#minify */\n  minifySyntax?: boolean\n  /** Documentation: https://esbuild.github.io/api/#charset */\n  charset?: Charset\n  /** Documentation: https://esbuild.github.io/api/#tree-shaking */\n  treeShaking?: boolean\n  /** Documentation: https://esbuild.github.io/api/#ignore-annotations */\n  ignoreAnnotations?: boolean\n\n  /** Documentation: https://esbuild.github.io/api/#jsx */\n  jsx?: 'transform' | 'preserve' | 'automatic'\n  /** Documentation: https://esbuild.github.io/api/#jsx-factory */\n  jsxFactory?: string\n  /** Documentation: https://esbuild.github.io/api/#jsx-fragment */\n  jsxFragment?: string\n  /** Documentation: https://esbuild.github.io/api/#jsx-import-source */\n  jsxImportSource?: string\n  /** Documentation: https://esbuild.github.io/api/#jsx-development */\n  jsxDev?: boolean\n  /** Documentation: https://esbuild.github.io/api/#jsx-side-effects */\n  jsxSideEffects?: boolean\n\n  /** Documentation: https://esbuild.github.io/api/#define */\n  define?: { [key: string]: string }\n  /** Documentation: https://esbuild.github.io/api/#pure */\n  pure?: string[]\n  /** Documentation: https://esbuild.github.io/api/#keep-names */\n  keepNames?: boolean\n\n  /** Documentation: https://esbuild.github.io/api/#color */\n  color?: boolean\n  /** Documentation: https://esbuild.github.io/api/#log-level */\n  logLevel?: LogLevel\n  /** Documentation: https://esbuild.github.io/api/#log-limit */\n  logLimit?: number\n  /** Documentation: https://esbuild.github.io/api/#log-override */\n  logOverride?: Record<string, LogLevel>\n}\n\nexport interface BuildOptions extends CommonOptions {\n  /** Documentation: https://esbuild.github.io/api/#bundle */\n  bundle?: boolean\n  /** Documentation: https://esbuild.github.io/api/#splitting */\n  splitting?: boolean\n  /** Documentation: https://esbuild.github.io/api/#preserve-symlinks */\n  preserveSymlinks?: boolean\n  /** Documentation: https://esbuild.github.io/api/#outfile */\n  outfile?: string\n  /** Documentation: https://esbuild.github.io/api/#metafile */\n  metafile?: boolean\n  /** Documentation: https://esbuild.github.io/api/#outdir */\n  outdir?: string\n  /** Documentation: https://esbuild.github.io/api/#outbase */\n  outbase?: string\n  /** Documentation: https://esbuild.github.io/api/#external */\n  external?: string[]\n  /** Documentation: https://esbuild.github.io/api/#packages */\n  packages?: 'external'\n  /** Documentation: https://esbuild.github.io/api/#alias */\n  alias?: Record<string, string>\n  /** Documentation: https://esbuild.github.io/api/#loader */\n  loader?: { [ext: string]: Loader }\n  /** Documentation: https://esbuild.github.io/api/#resolve-extensions */\n  resolveExtensions?: string[]\n  /** Documentation: https://esbuild.github.io/api/#main-fields */\n  mainFields?: string[]\n  /** Documentation: https://esbuild.github.io/api/#conditions */\n  conditions?: string[]\n  /** Documentation: https://esbuild.github.io/api/#write */\n  write?: boolean\n  /** Documentation: https://esbuild.github.io/api/#allow-overwrite */\n  allowOverwrite?: boolean\n  /** Documentation: https://esbuild.github.io/api/#tsconfig */\n  tsconfig?: string\n  /** Documentation: https://esbuild.github.io/api/#out-extension */\n  outExtension?: { [ext: string]: string }\n  /** Documentation: https://esbuild.github.io/api/#public-path */\n  publicPath?: string\n  /** Documentation: https://esbuild.github.io/api/#entry-names */\n  entryNames?: string\n  /** Documentation: https://esbuild.github.io/api/#chunk-names */\n  chunkNames?: string\n  /** Documentation: https://esbuild.github.io/api/#asset-names */\n  assetNames?: string\n  /** Documentation: https://esbuild.github.io/api/#inject */\n  inject?: string[]\n  /** Documentation: https://esbuild.github.io/api/#banner */\n  banner?: { [type: string]: string }\n  /** Documentation: https://esbuild.github.io/api/#footer */\n  footer?: { [type: string]: string }\n  /** Documentation: https://esbuild.github.io/api/#entry-points */\n  entryPoints?: string[] | Record<string, string> | { in: string, out: string }[]\n  /** Documentation: https://esbuild.github.io/api/#stdin */\n  stdin?: StdinOptions\n  /** Documentation: https://esbuild.github.io/plugins/ */\n  plugins?: Plugin[]\n  /** Documentation: https://esbuild.github.io/api/#working-directory */\n  absWorkingDir?: string\n  /** Documentation: https://esbuild.github.io/api/#node-paths */\n  nodePaths?: string[]; // The \"NODE_PATH\" variable from Node.js\n}\n\nexport interface StdinOptions {\n  contents: string | Uint8Array\n  resolveDir?: string\n  sourcefile?: string\n  loader?: Loader\n}\n\nexport interface Message {\n  id: string\n  pluginName: string\n  text: string\n  location: Location | null\n  notes: Note[]\n\n  /**\n   * Optional user-specified data that is passed through unmodified. You can\n   * use this to stash the original error, for example.\n   */\n  detail: any\n}\n\nexport interface Note {\n  text: string\n  location: Location | null\n}\n\nexport interface Location {\n  file: string\n  namespace: string\n  /** 1-based */\n  line: number\n  /** 0-based, in bytes */\n  column: number\n  /** in bytes */\n  length: number\n  lineText: string\n  suggestion: string\n}\n\nexport interface OutputFile {\n  path: string\n  /** \"text\" as bytes */\n  contents: Uint8Array\n  /** \"contents\" as text (changes automatically with \"contents\") */\n  readonly text: string\n}\n\nexport interface BuildResult<SpecificOptions extends BuildOptions = BuildOptions> {\n  errors: Message[]\n  warnings: Message[]\n  /** Only when \"write: false\" */\n  outputFiles: OutputFile[] | (SpecificOptions['write'] extends false ? never : undefined)\n  /** Only when \"metafile: true\" */\n  metafile: Metafile | (SpecificOptions['metafile'] extends true ? never : undefined)\n  /** Only when \"mangleCache\" is present */\n  mangleCache: Record<string, string | false> | (SpecificOptions['mangleCache'] extends Object ? never : undefined)\n}\n\nexport interface BuildFailure extends Error {\n  errors: Message[]\n  warnings: Message[]\n}\n\n/** Documentation: https://esbuild.github.io/api/#serve-arguments */\nexport interface ServeOptions {\n  port?: number\n  host?: string\n  servedir?: string\n  keyfile?: string\n  certfile?: string\n  onRequest?: (args: ServeOnRequestArgs) => void\n}\n\nexport interface ServeOnRequestArgs {\n  remoteAddress: string\n  method: string\n  path: string\n  status: number\n  /** The time to generate the response, not to send it */\n  timeInMS: number\n}\n\n/** Documentation: https://esbuild.github.io/api/#serve-return-values */\nexport interface ServeResult {\n  port: number\n  host: string\n}\n\nexport interface TransformOptions extends CommonOptions {\n  tsconfigRaw?: string | {\n    compilerOptions?: {\n      alwaysStrict?: boolean,\n      importsNotUsedAsValues?: 'remove' | 'preserve' | 'error',\n      jsx?: 'react' | 'react-jsx' | 'react-jsxdev' | 'preserve',\n      jsxFactory?: string,\n      jsxFragmentFactory?: string,\n      jsxImportSource?: string,\n      preserveValueImports?: boolean,\n      target?: string,\n      useDefineForClassFields?: boolean,\n    },\n  }\n\n  sourcefile?: string\n  loader?: Loader\n  banner?: string\n  footer?: string\n}\n\nexport interface TransformResult<SpecificOptions extends TransformOptions = TransformOptions> {\n  code: string\n  map: string\n  warnings: Message[]\n  /** Only when \"mangleCache\" is present */\n  mangleCache: Record<string, string | false> | (SpecificOptions['mangleCache'] extends Object ? never : undefined)\n  /** Only when \"legalComments\" is \"external\" */\n  legalComments: string | (SpecificOptions['legalComments'] extends 'external' ? never : undefined)\n}\n\nexport interface TransformFailure extends Error {\n  errors: Message[]\n  warnings: Message[]\n}\n\nexport interface Plugin {\n  name: string\n  setup: (build: PluginBuild) => (void | Promise<void>)\n}\n\nexport interface PluginBuild {\n  /** Documentation: https://esbuild.github.io/plugins/#build-options */\n  initialOptions: BuildOptions\n\n  /** Documentation: https://esbuild.github.io/plugins/#resolve */\n  resolve(path: string, options?: ResolveOptions): Promise<ResolveResult>\n\n  /** Documentation: https://esbuild.github.io/plugins/#on-start */\n  onStart(callback: () =>\n    (OnStartResult | null | void | Promise<OnStartResult | null | void>)): void\n\n  /** Documentation: https://esbuild.github.io/plugins/#on-end */\n  onEnd(callback: (result: BuildResult) =>\n    (OnEndResult | null | void | Promise<OnEndResult | null | void>)): void\n\n  /** Documentation: https://esbuild.github.io/plugins/#on-resolve */\n  onResolve(options: OnResolveOptions, callback: (args: OnResolveArgs) =>\n    (OnResolveResult | null | undefined | Promise<OnResolveResult | null | undefined>)): void\n\n  /** Documentation: https://esbuild.github.io/plugins/#on-load */\n  onLoad(options: OnLoadOptions, callback: (args: OnLoadArgs) =>\n    (OnLoadResult | null | undefined | Promise<OnLoadResult | null | undefined>)): void\n\n  /** Documentation: https://esbuild.github.io/plugins/#on-dispose */\n  onDispose(callback: () => void): void\n\n  // This is a full copy of the esbuild library in case you need it\n  esbuild: {\n    context: typeof context,\n    build: typeof build,\n    buildSync: typeof buildSync,\n    transform: typeof transform,\n    transformSync: typeof transformSync,\n    formatMessages: typeof formatMessages,\n    formatMessagesSync: typeof formatMessagesSync,\n    analyzeMetafile: typeof analyzeMetafile,\n    analyzeMetafileSync: typeof analyzeMetafileSync,\n    initialize: typeof initialize,\n    version: typeof version,\n  }\n}\n\n/** Documentation: https://esbuild.github.io/plugins/#resolve-options */\nexport interface ResolveOptions {\n  pluginName?: string\n  importer?: string\n  namespace?: string\n  resolveDir?: string\n  kind?: ImportKind\n  pluginData?: any\n}\n\n/** Documentation: https://esbuild.github.io/plugins/#resolve-results */\nexport interface ResolveResult {\n  errors: Message[]\n  warnings: Message[]\n\n  path: string\n  external: boolean\n  sideEffects: boolean\n  namespace: string\n  suffix: string\n  pluginData: any\n}\n\nexport interface OnStartResult {\n  errors?: PartialMessage[]\n  warnings?: PartialMessage[]\n}\n\nexport interface OnEndResult {\n  errors?: PartialMessage[]\n  warnings?: PartialMessage[]\n}\n\n/** Documentation: https://esbuild.github.io/plugins/#on-resolve-options */\nexport interface OnResolveOptions {\n  filter: RegExp\n  namespace?: string\n}\n\n/** Documentation: https://esbuild.github.io/plugins/#on-resolve-arguments */\nexport interface OnResolveArgs {\n  path: string\n  importer: string\n  namespace: string\n  resolveDir: string\n  kind: ImportKind\n  pluginData: any\n}\n\nexport type ImportKind =\n  | 'entry-point'\n\n  // JS\n  | 'import-statement'\n  | 'require-call'\n  | 'dynamic-import'\n  | 'require-resolve'\n\n  // CSS\n  | 'import-rule'\n  | 'url-token'\n\n/** Documentation: https://esbuild.github.io/plugins/#on-resolve-results */\nexport interface OnResolveResult {\n  pluginName?: string\n\n  errors?: PartialMessage[]\n  warnings?: PartialMessage[]\n\n  path?: string\n  external?: boolean\n  sideEffects?: boolean\n  namespace?: string\n  suffix?: string\n  pluginData?: any\n\n  watchFiles?: string[]\n  watchDirs?: string[]\n}\n\n/** Documentation: https://esbuild.github.io/plugins/#on-load-options */\nexport interface OnLoadOptions {\n  filter: RegExp\n  namespace?: string\n}\n\n/** Documentation: https://esbuild.github.io/plugins/#on-load-arguments */\nexport interface OnLoadArgs {\n  path: string\n  namespace: string\n  suffix: string\n  pluginData: any\n}\n\n/** Documentation: https://esbuild.github.io/plugins/#on-load-results */\nexport interface OnLoadResult {\n  pluginName?: string\n\n  errors?: PartialMessage[]\n  warnings?: PartialMessage[]\n\n  contents?: string | Uint8Array\n  resolveDir?: string\n  loader?: Loader\n  pluginData?: any\n\n  watchFiles?: string[]\n  watchDirs?: string[]\n}\n\nexport interface PartialMessage {\n  id?: string\n  pluginName?: string\n  text?: string\n  location?: Partial<Location> | null\n  notes?: PartialNote[]\n  detail?: any\n}\n\nexport interface PartialNote {\n  text?: string\n  location?: Partial<Location> | null\n}\n\n/** Documentation: https://esbuild.github.io/api/#metafile */\nexport interface Metafile {\n  inputs: {\n    [path: string]: {\n      bytes: number\n      imports: {\n        path: string\n        kind: ImportKind\n        external?: boolean\n        original?: string\n      }[]\n      format?: 'cjs' | 'esm'\n    }\n  }\n  outputs: {\n    [path: string]: {\n      bytes: number\n      inputs: {\n        [path: string]: {\n          bytesInOutput: number\n        }\n      }\n      imports: {\n        path: string\n        kind: ImportKind | 'file-loader'\n        external?: boolean\n      }[]\n      exports: string[]\n      entryPoint?: string\n      cssBundle?: string\n    }\n  }\n}\n\nexport interface FormatMessagesOptions {\n  kind: 'error' | 'warning'\n  color?: boolean\n  terminalWidth?: number\n}\n\nexport interface AnalyzeMetafileOptions {\n  color?: boolean\n  verbose?: boolean\n}\n\nexport interface WatchOptions {\n}\n\nexport interface BuildContext<SpecificOptions extends BuildOptions = BuildOptions> {\n  /** Documentation: https://esbuild.github.io/api/#rebuild */\n  rebuild(): Promise<BuildResult<SpecificOptions>>\n\n  /** Documentation: https://esbuild.github.io/api/#watch */\n  watch(options?: WatchOptions): Promise<void>\n\n  /** Documentation: https://esbuild.github.io/api/#serve */\n  serve(options?: ServeOptions): Promise<ServeResult>\n\n  cancel(): Promise<void>\n  dispose(): Promise<void>\n}\n\n/**\n * This function invokes the \"esbuild\" command-line tool for you. It returns a\n * promise that either resolves with a \"BuildResult\" object or rejects with a\n * \"BuildFailure\" object.\n *\n * - Works in node: yes\n * - Works in browser: yes\n *\n * Documentation: https://esbuild.github.io/api/#build\n */\nexport declare function build<SpecificOptions extends BuildOptions>(options: SpecificOptions): Promise<BuildResult<SpecificOptions>>\nexport declare function build(options: BuildOptions): Promise<BuildResult>\n\n/**\n * This is the advanced long-running form of \"build\" that supports additional\n * features such as watch mode and a local development server.\n *\n * - Works in node: yes\n * - Works in browser: no\n *\n * Documentation: https://esbuild.github.io/api/#build\n */\nexport declare function context<T extends BuildOptions>(options: T): Promise<BuildContext<T>>\nexport declare function context(options: BuildOptions): Promise<BuildContext>\n\n/**\n * This function transforms a single JavaScript file. It can be used to minify\n * JavaScript, convert TypeScript/JSX to JavaScript, or convert newer JavaScript\n * to older JavaScript. It returns a promise that is either resolved with a\n * \"TransformResult\" object or rejected with a \"TransformFailure\" object.\n *\n * - Works in node: yes\n * - Works in browser: yes\n *\n * Documentation: https://esbuild.github.io/api/#transform\n */\nexport declare function transform<SpecificOptions extends TransformOptions>(input: string | Uint8Array, options?: SpecificOptions): Promise<TransformResult<SpecificOptions>>\nexport declare function transform(input: string | Uint8Array, options?: TransformOptions): Promise<TransformResult>\n\n/**\n * Converts log messages to formatted message strings suitable for printing in\n * the terminal. This allows you to reuse the built-in behavior of esbuild's\n * log message formatter. This is a batch-oriented API for efficiency.\n *\n * - Works in node: yes\n * - Works in browser: yes\n */\nexport declare function formatMessages(messages: PartialMessage[], options: FormatMessagesOptions): Promise<string[]>\n\n/**\n * Pretty-prints an analysis of the metafile JSON to a string. This is just for\n * convenience to be able to match esbuild's pretty-printing exactly. If you want\n * to customize it, you can just inspect the data in the metafile yourself.\n *\n * - Works in node: yes\n * - Works in browser: yes\n *\n * Documentation: https://esbuild.github.io/api/#analyze\n */\nexport declare function analyzeMetafile(metafile: Metafile | string, options?: AnalyzeMetafileOptions): Promise<string>\n\n/**\n * A synchronous version of \"build\".\n *\n * - Works in node: yes\n * - Works in browser: no\n *\n * Documentation: https://esbuild.github.io/api/#build\n */\nexport declare function buildSync<SpecificOptions extends BuildOptions>(options: SpecificOptions): BuildResult<SpecificOptions>\nexport declare function buildSync(options: BuildOptions): BuildResult\n\n/**\n * A synchronous version of \"transform\".\n *\n * - Works in node: yes\n * - Works in browser: no\n *\n * Documentation: https://esbuild.github.io/api/#transform\n */\nexport declare function transformSync<SpecificOptions extends TransformOptions>(input: string, options?: SpecificOptions): TransformResult<SpecificOptions>\nexport declare function transformSync(input: string | Uint8Array, options?: TransformOptions): TransformResult\n\n/**\n * A synchronous version of \"formatMessages\".\n *\n * - Works in node: yes\n * - Works in browser: no\n */\nexport declare function formatMessagesSync(messages: PartialMessage[], options: FormatMessagesOptions): string[]\n\n/**\n * A synchronous version of \"analyzeMetafile\".\n *\n * - Works in node: yes\n * - Works in browser: no\n *\n * Documentation: https://esbuild.github.io/api/#analyze\n */\nexport declare function analyzeMetafileSync(metafile: Metafile | string, options?: AnalyzeMetafileOptions): string\n\n/**\n * This configures the browser-based version of esbuild. It is necessary to\n * call this first and wait for the returned promise to be resolved before\n * making other API calls when using esbuild in the browser.\n *\n * - Works in node: yes\n * - Works in browser: yes (\"options\" is required)\n *\n * Documentation: https://esbuild.github.io/api/#browser\n */\nexport declare function initialize(options: InitializeOptions): Promise<void>\n\nexport interface InitializeOptions {\n  /**\n   * The URL of the \"esbuild.wasm\" file. This must be provided when running\n   * esbuild in the browser.\n   */\n  wasmURL?: string | URL\n\n  /**\n   * The result of calling \"new WebAssembly.Module(buffer)\" where \"buffer\"\n   * is a typed array or ArrayBuffer containing the binary code of the\n   * \"esbuild.wasm\" file.\n   *\n   * You can use this as an alternative to \"wasmURL\" for environments where it's\n   * not possible to download the WebAssembly module.\n   */\n  wasmModule?: WebAssembly.Module\n\n  /**\n   * By default esbuild runs the WebAssembly-based browser API in a web worker\n   * to avoid blocking the UI thread. This can be disabled by setting \"worker\"\n   * to false.\n   */\n  worker?: boolean\n}\n\nexport let version: string\n/lib/main.js\u0000\u0001S\"use strict\";\nvar __create = Object.create;\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __getProtoOf = Object.getPrototypeOf;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n  for (var name in all)\n    __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n  if (from && typeof from === \"object\" || typeof from === \"function\") {\n    for (let key of __getOwnPropNames(from))\n      if (!__hasOwnProp.call(to, key) && key !== except)\n        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n  }\n  return to;\n};\nvar __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(\n  // If the importer is in node compatibility mode or this is not an ESM\n  // file that has been converted to a CommonJS file using a Babel-\n  // compatible transform (i.e. \"__esModule\" has not been set), then set\n  // \"default\" to the CommonJS \"module.exports\" for node compatibility.\n  isNodeMode || !mod || !mod.__esModule ? __defProp(target, \"default\", { value: mod, enumerable: true }) : target,\n  mod\n));\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\n\n// lib/npm/node.ts\nvar node_exports = {};\n__export(node_exports, {\n  analyzeMetafile: () => analyzeMetafile,\n  analyzeMetafileSync: () => analyzeMetafileSync,\n  build: () => build,\n  buildSync: () => buildSync,\n  context: () => context,\n  default: () => node_default,\n  formatMessages: () => formatMessages,\n  formatMessagesSync: () => formatMessagesSync,\n  initialize: () => initialize,\n  transform: () => transform,\n  transformSync: () => transformSync,\n  version: () => version\n});\nmodule.exports = __toCommonJS(node_exports);\n\n// lib/shared/stdio_protocol.ts\nfunction encodePacket(packet) {\n  let visit = (value) => {\n    if (value === null) {\n      bb.write8(0);\n    } else if (typeof value === \"boolean\") {\n      bb.write8(1);\n      bb.write8(+value);\n    } else if (typeof value === \"number\") {\n      bb.write8(2);\n      bb.write32(value | 0);\n    } else if (typeof value === \"string\") {\n      bb.write8(3);\n      bb.write(encodeUTF8(value));\n    } else if (value instanceof Uint8Array) {\n      bb.write8(4);\n      bb.write(value);\n    } else if (value instanceof Array) {\n      bb.write8(5);\n      bb.write32(value.length);\n      for (let item of value) {\n        visit(item);\n      }\n    } else {\n      let keys = Object.keys(value);\n      bb.write8(6);\n      bb.write32(keys.length);\n      for (let key of keys) {\n        bb.write(encodeUTF8(key));\n        visit(value[key]);\n      }\n    }\n  };\n  let bb = new ByteBuffer();\n  bb.write32(0);\n  bb.write32(packet.id << 1 | +!packet.isRequest);\n  visit(packet.value);\n  writeUInt32LE(bb.buf, bb.len - 4, 0);\n  return bb.buf.subarray(0, bb.len);\n}\nfunction decodePacket(bytes) {\n  let visit = () => {\n    switch (bb.read8()) {\n      case 0:\n        return null;\n      case 1:\n        return !!bb.read8();\n      case 2:\n        return bb.read32();\n      case 3:\n        return decodeUTF8(bb.read());\n      case 4:\n        return bb.read();\n      case 5: {\n        let count = bb.read32();\n        let value2 = [];\n        for (let i = 0; i < count; i++) {\n          value2.push(visit());\n        }\n        return value2;\n      }\n      case 6: {\n        let count = bb.read32();\n        let value2 = {};\n        for (let i = 0; i < count; i++) {\n          value2[decodeUTF8(bb.read())] = visit();\n        }\n        return value2;\n      }\n      default:\n        throw new Error(\"Invalid packet\");\n    }\n  };\n  let bb = new ByteBuffer(bytes);\n  let id = bb.read32();\n  let isRequest = (id & 1) === 0;\n  id >>>= 1;\n  let value = visit();\n  if (bb.ptr !== bytes.length) {\n    throw new Error(\"Invalid packet\");\n  }\n  return { id, isRequest, value };\n}\nvar ByteBuffer = class {\n  constructor(buf = new Uint8Array(1024)) {\n    this.buf = buf;\n    this.len = 0;\n    this.ptr = 0;\n  }\n  _write(delta) {\n    if (this.len + delta > this.buf.length) {\n      let clone = new Uint8Array((this.len + delta) * 2);\n      clone.set(this.buf);\n      this.buf = clone;\n    }\n    this.len += delta;\n    return this.len - delta;\n  }\n  write8(value) {\n    let offset = this._write(1);\n    this.buf[offset] = value;\n  }\n  write32(value) {\n    let offset = this._write(4);\n    writeUInt32LE(this.buf, value, offset);\n  }\n  write(bytes) {\n    let offset = this._write(4 + bytes.length);\n    writeUInt32LE(this.buf, bytes.length, offset);\n    this.buf.set(bytes, offset + 4);\n  }\n  _read(delta) {\n    if (this.ptr + delta > this.buf.length) {\n      throw new Error(\"Invalid packet\");\n    }\n    this.ptr += delta;\n    return this.ptr - delta;\n  }\n  read8() {\n    return this.buf[this._read(1)];\n  }\n  read32() {\n    return readUInt32LE(this.buf, this._read(4));\n  }\n  read() {\n    let length = this.read32();\n    let bytes = new Uint8Array(length);\n    let ptr = this._read(bytes.length);\n    bytes.set(this.buf.subarray(ptr, ptr + length));\n    return bytes;\n  }\n};\nvar encodeUTF8;\nvar decodeUTF8;\nvar encodeInvariant;\nif (typeof TextEncoder !== \"undefined\" && typeof TextDecoder !== \"undefined\") {\n  let encoder = new TextEncoder();\n  let decoder = new TextDecoder();\n  encodeUTF8 = (text) => encoder.encode(text);\n  decodeUTF8 = (bytes) => decoder.decode(bytes);\n  encodeInvariant = 'new TextEncoder().encode(\"\")';\n} else if (typeof Buffer !== \"undefined\") {\n  encodeUTF8 = (text) => Buffer.from(text);\n  decodeUTF8 = (bytes) => {\n    let { buffer, byteOffset, byteLength } = bytes;\n    return Buffer.from(buffer, byteOffset, byteLength).toString();\n  };\n  encodeInvariant = 'Buffer.from(\"\")';\n} else {\n  throw new Error(\"No UTF-8 codec found\");\n}\nif (!(encodeUTF8(\"\") instanceof Uint8Array))\n  throw new Error(`Invariant violation: \"${encodeInvariant} instanceof Uint8Array\" is incorrectly false\n\nThis indicates that your JavaScript environment is broken. You cannot use\nesbuild in this environment because esbuild relies on this invariant. This\nis not a problem with esbuild. You need to fix your environment instead.\n`);\nfunction readUInt32LE(buffer, offset) {\n  return buffer[offset++] | buffer[offset++] << 8 | buffer[offset++] << 16 | buffer[offset++] << 24;\n}\nfunction writeUInt32LE(buffer, value, offset) {\n  buffer[offset++] = value;\n  buffer[offset++] = value >> 8;\n  buffer[offset++] = value >> 16;\n  buffer[offset++] = value >> 24;\n}\n\n// lib/shared/common.ts\nvar quote = JSON.stringify;\nvar buildLogLevelDefault = \"warning\";\nvar transformLogLevelDefault = \"silent\";\nfunction validateTarget(target) {\n  validateStringValue(target, \"target\");\n  if (target.indexOf(\",\") >= 0)\n    throw new Error(`Invalid target: ${target}`);\n  return target;\n}\nvar canBeAnything = () => null;\nvar mustBeBoolean = (value) => typeof value === \"boolean\" ? null : \"a boolean\";\nvar mustBeString = (value) => typeof value === \"string\" ? null : \"a string\";\nvar mustBeRegExp = (value) => value instanceof RegExp ? null : \"a RegExp object\";\nvar mustBeInteger = (value) => typeof value === \"number\" && value === (value | 0) ? null : \"an integer\";\nvar mustBeFunction = (value) => typeof value === \"function\" ? null : \"a function\";\nvar mustBeArray = (value) => Array.isArray(value) ? null : \"an array\";\nvar mustBeObject = (value) => typeof value === \"object\" && value !== null && !Array.isArray(value) ? null : \"an object\";\nvar mustBeEntryPoints = (value) => typeof value === \"object\" && value !== null ? null : \"an array or an object\";\nvar mustBeWebAssemblyModule = (value) => value instanceof WebAssembly.Module ? null : \"a WebAssembly.Module\";\nvar mustBeObjectOrNull = (value) => typeof value === \"object\" && !Array.isArray(value) ? null : \"an object or null\";\nvar mustBeStringOrBoolean = (value) => typeof value === \"string\" || typeof value === \"boolean\" ? null : \"a string or a boolean\";\nvar mustBeStringOrObject = (value) => typeof value === \"string\" || typeof value === \"object\" && value !== null && !Array.isArray(value) ? null : \"a string or an object\";\nvar mustBeStringOrArray = (value) => typeof value === \"string\" || Array.isArray(value) ? null : \"a string or an array\";\nvar mustBeStringOrUint8Array = (value) => typeof value === \"string\" || value instanceof Uint8Array ? null : \"a string or a Uint8Array\";\nvar mustBeStringOrURL = (value) => typeof value === \"string\" || value instanceof URL ? null : \"a string or a URL\";\nfunction getFlag(object, keys, key, mustBeFn) {\n  let value = object[key];\n  keys[key + \"\"] = true;\n  if (value === void 0)\n    return void 0;\n  let mustBe = mustBeFn(value);\n  if (mustBe !== null)\n    throw new Error(`${quote(key)} must be ${mustBe}`);\n  return value;\n}\nfunction checkForInvalidFlags(object, keys, where) {\n  for (let key in object) {\n    if (!(key in keys)) {\n      throw new Error(`Invalid option ${where}: ${quote(key)}`);\n    }\n  }\n}\nfunction validateInitializeOptions(options) {\n  let keys = /* @__PURE__ */ Object.create(null);\n  let wasmURL = getFlag(options, keys, \"wasmURL\", mustBeStringOrURL);\n  let wasmModule = getFlag(options, keys, \"wasmModule\", mustBeWebAssemblyModule);\n  let worker = getFlag(options, keys, \"worker\", mustBeBoolean);\n  checkForInvalidFlags(options, keys, \"in initialize() call\");\n  return {\n    wasmURL,\n    wasmModule,\n    worker\n  };\n}\nfunction validateMangleCache(mangleCache) {\n  let validated;\n  if (mangleCache !== void 0) {\n    validated = /* @__PURE__ */ Object.create(null);\n    for (let key in mangleCache) {\n      let value = mangleCache[key];\n      if (typeof value === \"string\" || value === false) {\n        validated[key] = value;\n      } else {\n        throw new Error(`Expected ${quote(key)} in mangle cache to map to either a string or false`);\n      }\n    }\n  }\n  return validated;\n}\nfunction pushLogFlags(flags, options, keys, isTTY2, logLevelDefault) {\n  let color = getFlag(options, keys, \"color\", mustBeBoolean);\n  let logLevel = getFlag(options, keys, \"logLevel\", mustBeString);\n  let logLimit = getFlag(options, keys, \"logLimit\", mustBeInteger);\n  if (color !== void 0)\n    flags.push(`--color=${color}`);\n  else if (isTTY2)\n    flags.push(`--color=true`);\n  flags.push(`--log-level=${logLevel || logLevelDefault}`);\n  flags.push(`--log-limit=${logLimit || 0}`);\n}\nfunction validateStringValue(value, what, key) {\n  if (typeof value !== \"string\") {\n    throw new Error(`Expected value for ${what}${key !== void 0 ? \" \" + quote(key) : \"\"} to be a string, got ${typeof value} instead`);\n  }\n  return value;\n}\nfunction pushCommonFlags(flags, options, keys) {\n  let legalComments = getFlag(options, keys, \"legalComments\", mustBeString);\n  let sourceRoot = getFlag(options, keys, \"sourceRoot\", mustBeString);\n  let sourcesContent = getFlag(options, keys, \"sourcesContent\", mustBeBoolean);\n  let target = getFlag(options, keys, \"target\", mustBeStringOrArray);\n  let format = getFlag(options, keys, \"format\", mustBeString);\n  let globalName = getFlag(options, keys, \"globalName\", mustBeString);\n  let mangleProps = getFlag(options, keys, \"mangleProps\", mustBeRegExp);\n  let reserveProps = getFlag(options, keys, \"reserveProps\", mustBeRegExp);\n  let mangleQuoted = getFlag(options, keys, \"mangleQuoted\", mustBeBoolean);\n  let minify = getFlag(options, keys, \"minify\", mustBeBoolean);\n  let minifySyntax = getFlag(options, keys, \"minifySyntax\", mustBeBoolean);\n  let minifyWhitespace = getFlag(options, keys, \"minifyWhitespace\", mustBeBoolean);\n  let minifyIdentifiers = getFlag(options, keys, \"minifyIdentifiers\", mustBeBoolean);\n  let drop = getFlag(options, keys, \"drop\", mustBeArray);\n  let charset = getFlag(options, keys, \"charset\", mustBeString);\n  let treeShaking = getFlag(options, keys, \"treeShaking\", mustBeBoolean);\n  let ignoreAnnotations = getFlag(options, keys, \"ignoreAnnotations\", mustBeBoolean);\n  let jsx = getFlag(options, keys, \"jsx\", mustBeString);\n  let jsxFactory = getFlag(options, keys, \"jsxFactory\", mustBeString);\n  let jsxFragment = getFlag(options, keys, \"jsxFragment\", mustBeString);\n  let jsxImportSource = getFlag(options, keys, \"jsxImportSource\", mustBeString);\n  let jsxDev = getFlag(options, keys, \"jsxDev\", mustBeBoolean);\n  let jsxSideEffects = getFlag(options, keys, \"jsxSideEffects\", mustBeBoolean);\n  let define = getFlag(options, keys, \"define\", mustBeObject);\n  let logOverride = getFlag(options, keys, \"logOverride\", mustBeObject);\n  let supported = getFlag(options, keys, \"supported\", mustBeObject);\n  let pure = getFlag(options, keys, \"pure\", mustBeArray);\n  let keepNames = getFlag(options, keys, \"keepNames\", mustBeBoolean);\n  let platform = getFlag(options, keys, \"platform\", mustBeString);\n  if (legalComments)\n    flags.push(`--legal-comments=${legalComments}`);\n  if (sourceRoot !== void 0)\n    flags.push(`--source-root=${sourceRoot}`);\n  if (sourcesContent !== void 0)\n    flags.push(`--sources-content=${sourcesContent}`);\n  if (target) {\n    if (Array.isArray(target))\n      flags.push(`--target=${Array.from(target).map(validateTarget).join(\",\")}`);\n    else\n      flags.push(`--target=${validateTarget(target)}`);\n  }\n  if (format)\n    flags.push(`--format=${format}`);\n  if (globalName)\n    flags.push(`--global-name=${globalName}`);\n  if (platform)\n    flags.push(`--platform=${platform}`);\n  if (minify)\n    flags.push(\"--minify\");\n  if (minifySyntax)\n    flags.push(\"--minify-syntax\");\n  if (minifyWhitespace)\n    flags.push(\"--minify-whitespace\");\n  if (minifyIdentifiers)\n    flags.push(\"--minify-identifiers\");\n  if (charset)\n    flags.push(`--charset=${charset}`);\n  if (treeShaking !== void 0)\n    flags.push(`--tree-shaking=${treeShaking}`);\n  if (ignoreAnnotations)\n    flags.push(`--ignore-annotations`);\n  if (drop)\n    for (let what of drop)\n      flags.push(`--drop:${validateStringValue(what, \"drop\")}`);\n  if (mangleProps)\n    flags.push(`--mangle-props=${mangleProps.source}`);\n  if (reserveProps)\n    flags.push(`--reserve-props=${reserveProps.source}`);\n  if (mangleQuoted !== void 0)\n    flags.push(`--mangle-quoted=${mangleQuoted}`);\n  if (jsx)\n    flags.push(`--jsx=${jsx}`);\n  if (jsxFactory)\n    flags.push(`--jsx-factory=${jsxFactory}`);\n  if (jsxFragment)\n    flags.push(`--jsx-fragment=${jsxFragment}`);\n  if (jsxImportSource)\n    flags.push(`--jsx-import-source=${jsxImportSource}`);\n  if (jsxDev)\n    flags.push(`--jsx-dev`);\n  if (jsxSideEffects)\n    flags.push(`--jsx-side-effects`);\n  if (define) {\n    for (let key in define) {\n      if (key.indexOf(\"=\") >= 0)\n        throw new Error(`Invalid define: ${key}`);\n      flags.push(`--define:${key}=${validateStringValue(define[key], \"define\", key)}`);\n    }\n  }\n  if (logOverride) {\n    for (let key in logOverride) {\n      if (key.indexOf(\"=\") >= 0)\n        throw new Error(`Invalid log override: ${key}`);\n      flags.push(`--log-override:${key}=${validateStringValue(logOverride[key], \"log override\", key)}`);\n    }\n  }\n  if (supported) {\n    for (let key in supported) {\n      if (key.indexOf(\"=\") >= 0)\n        throw new Error(`Invalid supported: ${key}`);\n      const value = supported[key];\n      if (typeof value !== \"boolean\")\n        throw new Error(`Expected value for supported ${quote(key)} to be a boolean, got ${typeof value} instead`);\n      flags.push(`--supported:${key}=${value}`);\n    }\n  }\n  if (pure)\n    for (let fn of pure)\n      flags.push(`--pure:${validateStringValue(fn, \"pure\")}`);\n  if (keepNames)\n    flags.push(`--keep-names`);\n}\nfunction flagsForBuildOptions(callName, options, isTTY2, logLevelDefault, writeDefault) {\n  var _a2;\n  let flags = [];\n  let entries = [];\n  let keys = /* @__PURE__ */ Object.create(null);\n  let stdinContents = null;\n  let stdinResolveDir = null;\n  pushLogFlags(flags, options, keys, isTTY2, logLevelDefault);\n  pushCommonFlags(flags, options, keys);\n  let sourcemap = getFlag(options, keys, \"sourcemap\", mustBeStringOrBoolean);\n  let bundle = getFlag(options, keys, \"bundle\", mustBeBoolean);\n  let splitting = getFlag(options, keys, \"splitting\", mustBeBoolean);\n  let preserveSymlinks = getFlag(options, keys, \"preserveSymlinks\", mustBeBoolean);\n  let metafile = getFlag(options, keys, \"metafile\", mustBeBoolean);\n  let outfile = getFlag(options, keys, \"outfile\", mustBeString);\n  let outdir = getFlag(options, keys, \"outdir\", mustBeString);\n  let outbase = getFlag(options, keys, \"outbase\", mustBeString);\n  let tsconfig = getFlag(options, keys, \"tsconfig\", mustBeString);\n  let resolveExtensions = getFlag(options, keys, \"resolveExtensions\", mustBeArray);\n  let nodePathsInput = getFlag(options, keys, \"nodePaths\", mustBeArray);\n  let mainFields = getFlag(options, keys, \"mainFields\", mustBeArray);\n  let conditions = getFlag(options, keys, \"conditions\", mustBeArray);\n  let external = getFlag(options, keys, \"external\", mustBeArray);\n  let packages = getFlag(options, keys, \"packages\", mustBeString);\n  let alias = getFlag(options, keys, \"alias\", mustBeObject);\n  let loader = getFlag(options, keys, \"loader\", mustBeObject);\n  let outExtension = getFlag(options, keys, \"outExtension\", mustBeObject);\n  let publicPath = getFlag(options, keys, \"publicPath\", mustBeString);\n  let entryNames = getFlag(options, keys, \"entryNames\", mustBeString);\n  let chunkNames = getFlag(options, keys, \"chunkNames\", mustBeString);\n  let assetNames = getFlag(options, keys, \"assetNames\", mustBeString);\n  let inject = getFlag(options, keys, \"inject\", mustBeArray);\n  let banner = getFlag(options, keys, \"banner\", mustBeObject);\n  let footer = getFlag(options, keys, \"footer\", mustBeObject);\n  let entryPoints = getFlag(options, keys, \"entryPoints\", mustBeEntryPoints);\n  let absWorkingDir = getFlag(options, keys, \"absWorkingDir\", mustBeString);\n  let stdin = getFlag(options, keys, \"stdin\", mustBeObject);\n  let write = (_a2 = getFlag(options, keys, \"write\", mustBeBoolean)) != null ? _a2 : writeDefault;\n  let allowOverwrite = getFlag(options, keys, \"allowOverwrite\", mustBeBoolean);\n  let mangleCache = getFlag(options, keys, \"mangleCache\", mustBeObject);\n  keys.plugins = true;\n  checkForInvalidFlags(options, keys, `in ${callName}() call`);\n  if (sourcemap)\n    flags.push(`--sourcemap${sourcemap === true ? \"\" : `=${sourcemap}`}`);\n  if (bundle)\n    flags.push(\"--bundle\");\n  if (allowOverwrite)\n    flags.push(\"--allow-overwrite\");\n  if (splitting)\n    flags.push(\"--splitting\");\n  if (preserveSymlinks)\n    flags.push(\"--preserve-symlinks\");\n  if (metafile)\n    flags.push(`--metafile`);\n  if (outfile)\n    flags.push(`--outfile=${outfile}`);\n  if (outdir)\n    flags.push(`--outdir=${outdir}`);\n  if (outbase)\n    flags.push(`--outbase=${outbase}`);\n  if (tsconfig)\n    flags.push(`--tsconfig=${tsconfig}`);\n  if (packages)\n    flags.push(`--packages=${packages}`);\n  if (resolveExtensions) {\n    let values = [];\n    for (let value of resolveExtensions) {\n      validateStringValue(value, \"resolve extension\");\n      if (value.indexOf(\",\") >= 0)\n        throw new Error(`Invalid resolve extension: ${value}`);\n      values.push(value);\n    }\n    flags.push(`--resolve-extensions=${values.join(\",\")}`);\n  }\n  if (publicPath)\n    flags.push(`--public-path=${publicPath}`);\n  if (entryNames)\n    flags.push(`--entry-names=${entryNames}`);\n  if (chunkNames)\n    flags.push(`--chunk-names=${chunkNames}`);\n  if (assetNames)\n    flags.push(`--asset-names=${assetNames}`);\n  if (mainFields) {\n    let values = [];\n    for (let value of mainFields) {\n      validateStringValue(value, \"main field\");\n      if (value.indexOf(\",\") >= 0)\n        throw new Error(`Invalid main field: ${value}`);\n      values.push(value);\n    }\n    flags.push(`--main-fields=${values.join(\",\")}`);\n  }\n  if (conditions) {\n    let values = [];\n    for (let value of conditions) {\n      validateStringValue(value, \"condition\");\n      if (value.indexOf(\",\") >= 0)\n        throw new Error(`Invalid condition: ${value}`);\n      values.push(value);\n    }\n    flags.push(`--conditions=${values.join(\",\")}`);\n  }\n  if (external)\n    for (let name of external)\n      flags.push(`--external:${validateStringValue(name, \"external\")}`);\n  if (alias) {\n    for (let old in alias) {\n      if (old.indexOf(\"=\") >= 0)\n        throw new Error(`Invalid package name in alias: ${old}`);\n      flags.push(`--alias:${old}=${validateStringValue(alias[old], \"alias\", old)}`);\n    }\n  }\n  if (banner) {\n    for (let type in banner) {\n      if (type.indexOf(\"=\") >= 0)\n        throw new Error(`Invalid banner file type: ${type}`);\n      flags.push(`--banner:${type}=${validateStringValue(banner[type], \"banner\", type)}`);\n    }\n  }\n  if (footer) {\n    for (let type in footer) {\n      if (type.indexOf(\"=\") >= 0)\n        throw new Error(`Invalid footer file type: ${type}`);\n      flags.push(`--footer:${type}=${validateStringValue(footer[type], \"footer\", type)}`);\n    }\n  }\n  if (inject)\n    for (let path3 of inject)\n      flags.push(`--inject:${validateStringValue(path3, \"inject\")}`);\n  if (loader) {\n    for (let ext in loader) {\n      if (ext.indexOf(\"=\") >= 0)\n        throw new Error(`Invalid loader extension: ${ext}`);\n      flags.push(`--loader:${ext}=${validateStringValue(loader[ext], \"loader\", ext)}`);\n    }\n  }\n  if (outExtension) {\n    for (let ext in outExtension) {\n      if (ext.indexOf(\"=\") >= 0)\n        throw new Error(`Invalid out extension: ${ext}`);\n      flags.push(`--out-extension:${ext}=${validateStringValue(outExtension[ext], \"out extension\", ext)}`);\n    }\n  }\n  if (entryPoints) {\n    if (Array.isArray(entryPoints)) {\n      for (let i = 0, n = entryPoints.length; i < n; i++) {\n        let entryPoint = entryPoints[i];\n        if (typeof entryPoint === \"object\" && entryPoint !== null) {\n          let entryPointKeys = /* @__PURE__ */ Object.create(null);\n          let input = getFlag(entryPoint, entryPointKeys, \"in\", mustBeString);\n          let output = getFlag(entryPoint, entryPointKeys, \"out\", mustBeString);\n          checkForInvalidFlags(entryPoint, entryPointKeys, \"in entry point at index \" + i);\n          if (input === void 0)\n            throw new Error('Missing property \"in\" for entry point at index ' + i);\n          if (output === void 0)\n            throw new Error('Missing property \"out\" for entry point at index ' + i);\n          entries.push([output, input]);\n        } else {\n          entries.push([\"\", validateStringValue(entryPoint, \"entry point at index \" + i)]);\n        }\n      }\n    } else {\n      for (let key in entryPoints) {\n        entries.push([key, validateStringValue(entryPoints[key], \"entry point\", key)]);\n      }\n    }\n  }\n  if (stdin) {\n    let stdinKeys = /* @__PURE__ */ Object.create(null);\n    let contents = getFlag(stdin, stdinKeys, \"contents\", mustBeStringOrUint8Array);\n    let resolveDir = getFlag(stdin, stdinKeys, \"resolveDir\", mustBeString);\n    let sourcefile = getFlag(stdin, stdinKeys, \"sourcefile\", mustBeString);\n    let loader2 = getFlag(stdin, stdinKeys, \"loader\", mustBeString);\n    checkForInvalidFlags(stdin, stdinKeys, 'in \"stdin\" object');\n    if (sourcefile)\n      flags.push(`--sourcefile=${sourcefile}`);\n    if (loader2)\n      flags.push(`--loader=${loader2}`);\n    if (resolveDir)\n      stdinResolveDir = resolveDir;\n    if (typeof contents === \"string\")\n      stdinContents = encodeUTF8(contents);\n    else if (contents instanceof Uint8Array)\n      stdinContents = contents;\n  }\n  let nodePaths = [];\n  if (nodePathsInput) {\n    for (let value of nodePathsInput) {\n      value += \"\";\n      nodePaths.push(value);\n    }\n  }\n  return {\n    entries,\n    flags,\n    write,\n    stdinContents,\n    stdinResolveDir,\n    absWorkingDir,\n    nodePaths,\n    mangleCache: validateMangleCache(mangleCache)\n  };\n}\nfunction flagsForTransformOptions(callName, options, isTTY2, logLevelDefault) {\n  let flags = [];\n  let keys = /* @__PURE__ */ Object.create(null);\n  pushLogFlags(flags, options, keys, isTTY2, logLevelDefault);\n  pushCommonFlags(flags, options, keys);\n  let sourcemap = getFlag(options, keys, \"sourcemap\", mustBeStringOrBoolean);\n  let tsconfigRaw = getFlag(options, keys, \"tsconfigRaw\", mustBeStringOrObject);\n  let sourcefile = getFlag(options, keys, \"sourcefile\", mustBeString);\n  let loader = getFlag(options, keys, \"loader\", mustBeString);\n  let banner = getFlag(options, keys, \"banner\", mustBeString);\n  let footer = getFlag(options, keys, \"footer\", mustBeString);\n  let mangleCache = getFlag(options, keys, \"mangleCache\", mustBeObject);\n  checkForInvalidFlags(options, keys, `in ${callName}() call`);\n  if (sourcemap)\n    flags.push(`--sourcemap=${sourcemap === true ? \"external\" : sourcemap}`);\n  if (tsconfigRaw)\n    flags.push(`--tsconfig-raw=${typeof tsconfigRaw === \"string\" ? tsconfigRaw : JSON.stringify(tsconfigRaw)}`);\n  if (sourcefile)\n    flags.push(`--sourcefile=${sourcefile}`);\n  if (loader)\n    flags.push(`--loader=${loader}`);\n  if (banner)\n    flags.push(`--banner=${banner}`);\n  if (footer)\n    flags.push(`--footer=${footer}`);\n  return {\n    flags,\n    mangleCache: validateMangleCache(mangleCache)\n  };\n}\nfunction createChannel(streamIn) {\n  const requestCallbacksByKey = {};\n  const closeData = { didClose: false, reason: \"\" };\n  let responseCallbacks = {};\n  let nextRequestID = 0;\n  let nextBuildKey = 0;\n  let stdout = new Uint8Array(16 * 1024);\n  let stdoutUsed = 0;\n  let readFromStdout = (chunk) => {\n    let limit = stdoutUsed + chunk.length;\n    if (limit > stdout.length) {\n      let swap = new Uint8Array(limit * 2);\n      swap.set(stdout);\n      stdout = swap;\n    }\n    stdout.set(chunk, stdoutUsed);\n    stdoutUsed += chunk.length;\n    let offset = 0;\n    while (offset + 4 <= stdoutUsed) {\n      let length = readUInt32LE(stdout, offset);\n      if (offset + 4 + length > stdoutUsed) {\n        break;\n      }\n      offset += 4;\n      handleIncomingPacket(stdout.subarray(offset, offset + length));\n      offset += length;\n    }\n    if (offset > 0) {\n      stdout.copyWithin(0, offset, stdoutUsed);\n      stdoutUsed -= offset;\n    }\n  };\n  let afterClose = (error) => {\n    closeData.didClose = true;\n    if (error)\n      closeData.reason = \": \" + (error.message || error);\n    const text = \"The service was stopped\" + closeData.reason;\n    for (let id in responseCallbacks) {\n      responseCallbacks[id](text, null);\n    }\n    responseCallbacks = {};\n  };\n  let sendRequest = (refs, value, callback) => {\n    if (closeData.didClose)\n      return callback(\"The service is no longer running\" + closeData.reason, null);\n    let id = nextRequestID++;\n    responseCallbacks[id] = (error, response) => {\n      try {\n        callback(error, response);\n      } finally {\n        if (refs)\n          refs.unref();\n      }\n    };\n    if (refs)\n      refs.ref();\n    streamIn.writeToStdin(encodePacket({ id, isRequest: true, value }));\n  };\n  let sendResponse = (id, value) => {\n    if (closeData.didClose)\n      throw new Error(\"The service is no longer running\" + closeData.reason);\n    streamIn.writeToStdin(encodePacket({ id, isRequest: false, value }));\n  };\n  let handleRequest = async (id, request) => {\n    try {\n      if (request.command === \"ping\") {\n        sendResponse(id, {});\n        return;\n      }\n      if (typeof request.key === \"number\") {\n        const requestCallbacks = requestCallbacksByKey[request.key];\n        if (requestCallbacks) {\n          const callback = requestCallbacks[request.command];\n          if (callback) {\n            await callback(id, request);\n            return;\n          }\n        }\n      }\n      throw new Error(`Invalid command: ` + request.command);\n    } catch (e) {\n      sendResponse(id, { errors: [extractErrorMessageV8(e, streamIn, null, void 0, \"\")] });\n    }\n  };\n  let isFirstPacket = true;\n  let handleIncomingPacket = (bytes) => {\n    if (isFirstPacket) {\n      isFirstPacket = false;\n      let binaryVersion = String.fromCharCode(...bytes);\n      if (binaryVersion !== \"0.17.9\") {\n        throw new Error(`Cannot start service: Host version \"${\"0.17.9\"}\" does not match binary version ${quote(binaryVersion)}`);\n      }\n      return;\n    }\n    let packet = decodePacket(bytes);\n    if (packet.isRequest) {\n      handleRequest(packet.id, packet.value);\n    } else {\n      let callback = responseCallbacks[packet.id];\n      delete responseCallbacks[packet.id];\n      if (packet.value.error)\n        callback(packet.value.error, {});\n      else\n        callback(null, packet.value);\n    }\n  };\n  let buildOrContext = ({ callName, refs, options, isTTY: isTTY2, defaultWD: defaultWD2, callback }) => {\n    let refCount = 0;\n    const buildKey = nextBuildKey++;\n    const requestCallbacks = {};\n    const buildRefs = {\n      ref() {\n        if (++refCount === 1) {\n          if (refs)\n            refs.ref();\n        }\n      },\n      unref() {\n        if (--refCount === 0) {\n          delete requestCallbacksByKey[buildKey];\n          if (refs)\n            refs.unref();\n        }\n      }\n    };\n    requestCallbacksByKey[buildKey] = requestCallbacks;\n    buildRefs.ref();\n    buildOrContextImpl(\n      callName,\n      buildKey,\n      sendRequest,\n      sendResponse,\n      buildRefs,\n      streamIn,\n      requestCallbacks,\n      options,\n      isTTY2,\n      defaultWD2,\n      (err, res) => {\n        try {\n          callback(err, res);\n        } finally {\n          buildRefs.unref();\n        }\n      }\n    );\n  };\n  let transform2 = ({ callName, refs, input, options, isTTY: isTTY2, fs: fs3, callback }) => {\n    const details = createObjectStash();\n    let start = (inputPath) => {\n      try {\n        if (typeof input !== \"string\" && !(input instanceof Uint8Array))\n          throw new Error('The input to \"transform\" must be a string or a Uint8Array');\n        let {\n          flags,\n          mangleCache\n        } = flagsForTransformOptions(callName, options, isTTY2, transformLogLevelDefault);\n        let request = {\n          command: \"transform\",\n          flags,\n          inputFS: inputPath !== null,\n          input: inputPath !== null ? encodeUTF8(inputPath) : typeof input === \"string\" ? encodeUTF8(input) : input\n        };\n        if (mangleCache)\n          request.mangleCache = mangleCache;\n        sendRequest(refs, request, (error, response) => {\n          if (error)\n            return callback(new Error(error), null);\n          let errors = replaceDetailsInMessages(response.errors, details);\n          let warnings = replaceDetailsInMessages(response.warnings, details);\n          let outstanding = 1;\n          let next = () => {\n            if (--outstanding === 0) {\n              let result = {\n                warnings,\n                code: response.code,\n                map: response.map,\n                mangleCache: void 0,\n                legalComments: void 0\n              };\n              if (\"legalComments\" in response)\n                result.legalComments = response == null ? void 0 : response.legalComments;\n              if (response.mangleCache)\n                result.mangleCache = response == null ? void 0 : response.mangleCache;\n              callback(null, result);\n            }\n          };\n          if (errors.length > 0)\n            return callback(failureErrorWithLog(\"Transform failed\", errors, warnings), null);\n          if (response.codeFS) {\n            outstanding++;\n            fs3.readFile(response.code, (err, contents) => {\n              if (err !== null) {\n                callback(err, null);\n              } else {\n                response.code = contents;\n                next();\n              }\n            });\n          }\n          if (response.mapFS) {\n            outstanding++;\n            fs3.readFile(response.map, (err, contents) => {\n              if (err !== null) {\n                callback(err, null);\n              } else {\n                response.map = contents;\n                next();\n              }\n            });\n          }\n          next();\n        });\n      } catch (e) {\n        let flags = [];\n        try {\n          pushLogFlags(flags, options, {}, isTTY2, transformLogLevelDefault);\n        } catch {\n        }\n        const error = extractErrorMessageV8(e, streamIn, details, void 0, \"\");\n        sendRequest(refs, { command: \"error\", flags, error }, () => {\n          error.detail = details.load(error.detail);\n          callback(failureErrorWithLog(\"Transform failed\", [error], []), null);\n        });\n      }\n    };\n    if ((typeof input === \"string\" || input instanceof Uint8Array) && input.length > 1024 * 1024) {\n      let next = start;\n      start = () => fs3.writeFile(input, next);\n    }\n    start(null);\n  };\n  let formatMessages2 = ({ callName, refs, messages, options, callback }) => {\n    let result = sanitizeMessages(messages, \"messages\", null, \"\");\n    if (!options)\n      throw new Error(`Missing second argument in ${callName}() call`);\n    let keys = {};\n    let kind = getFlag(options, keys, \"kind\", mustBeString);\n    let color = getFlag(options, keys, \"color\", mustBeBoolean);\n    let terminalWidth = getFlag(options, keys, \"terminalWidth\", mustBeInteger);\n    checkForInvalidFlags(options, keys, `in ${callName}() call`);\n    if (kind === void 0)\n      throw new Error(`Missing \"kind\" in ${callName}() call`);\n    if (kind !== \"error\" && kind !== \"warning\")\n      throw new Error(`Expected \"kind\" to be \"error\" or \"warning\" in ${callName}() call`);\n    let request = {\n      command: \"format-msgs\",\n      messages: result,\n      isWarning: kind === \"warning\"\n    };\n    if (color !== void 0)\n      request.color = color;\n    if (terminalWidth !== void 0)\n      request.terminalWidth = terminalWidth;\n    sendRequest(refs, request, (error, response) => {\n      if (error)\n        return callback(new Error(error), null);\n      callback(null, response.messages);\n    });\n  };\n  let analyzeMetafile2 = ({ callName, refs, metafile, options, callback }) => {\n    if (options === void 0)\n      options = {};\n    let keys = {};\n    let color = getFlag(options, keys, \"color\", mustBeBoolean);\n    let verbose = getFlag(options, keys, \"verbose\", mustBeBoolean);\n    checkForInvalidFlags(options, keys, `in ${callName}() call`);\n    let request = {\n      command: \"analyze-metafile\",\n      metafile\n    };\n    if (color !== void 0)\n      request.color = color;\n    if (verbose !== void 0)\n      request.verbose = verbose;\n    sendRequest(refs, request, (error, response) => {\n      if (error)\n        return callback(new Error(error), null);\n      callback(null, response.result);\n    });\n  };\n  return {\n    readFromStdout,\n    afterClose,\n    service: {\n      buildOrContext,\n      transform: transform2,\n      formatMessages: formatMessages2,\n      analyzeMetafile: analyzeMetafile2\n    }\n  };\n}\nfunction buildOrContextImpl(callName, buildKey, sendRequest, sendResponse, refs, streamIn, requestCallbacks, options, isTTY2, defaultWD2, callback) {\n  const details = createObjectStash();\n  const isContext = callName === \"context\";\n  const handleError = (e, pluginName) => {\n    const flags = [];\n    try {\n      pushLogFlags(flags, options, {}, isTTY2, buildLogLevelDefault);\n    } catch {\n    }\n    const message = extractErrorMessageV8(e, streamIn, details, void 0, pluginName);\n    sendRequest(refs, { command: \"error\", flags, error: message }, () => {\n      message.detail = details.load(message.detail);\n      callback(failureErrorWithLog(isContext ? \"Context failed\" : \"Build failed\", [message], []), null);\n    });\n  };\n  let plugins;\n  if (typeof options === \"object\") {\n    const value = options.plugins;\n    if (value !== void 0) {\n      if (!Array.isArray(value))\n        return handleError(new Error(`\"plugins\" must be an array`), \"\");\n      plugins = value;\n    }\n  }\n  if (plugins && plugins.length > 0) {\n    if (streamIn.isSync)\n      return handleError(new Error(\"Cannot use plugins in synchronous API calls\"), \"\");\n    handlePlugins(\n      buildKey,\n      sendRequest,\n      sendResponse,\n      refs,\n      streamIn,\n      requestCallbacks,\n      options,\n      plugins,\n      details\n    ).then(\n      (result) => {\n        if (!result.ok)\n          return handleError(result.error, result.pluginName);\n        try {\n          buildOrContextContinue(result.requestPlugins, result.runOnEndCallbacks, result.scheduleOnDisposeCallbacks);\n        } catch (e) {\n          handleError(e, \"\");\n        }\n      },\n      (e) => handleError(e, \"\")\n    );\n    return;\n  }\n  try {\n    buildOrContextContinue(null, (result, done) => done([], []), () => {\n    });\n  } catch (e) {\n    handleError(e, \"\");\n  }\n  function buildOrContextContinue(requestPlugins, runOnEndCallbacks, scheduleOnDisposeCallbacks) {\n    const writeDefault = streamIn.hasFS;\n    const {\n      entries,\n      flags,\n      write,\n      stdinContents,\n      stdinResolveDir,\n      absWorkingDir,\n      nodePaths,\n      mangleCache\n    } = flagsForBuildOptions(callName, options, isTTY2, buildLogLevelDefault, writeDefault);\n    if (write && !streamIn.hasFS)\n      throw new Error(`The \"write\" option is unavailable in this environment`);\n    const request = {\n      command: \"build\",\n      key: buildKey,\n      entries,\n      flags,\n      write,\n      stdinContents,\n      stdinResolveDir,\n      absWorkingDir: absWorkingDir || defaultWD2,\n      nodePaths,\n      context: isContext\n    };\n    if (requestPlugins)\n      request.plugins = requestPlugins;\n    if (mangleCache)\n      request.mangleCache = mangleCache;\n    const buildResponseToResult = (response, callback2) => {\n      const result = {\n        errors: replaceDetailsInMessages(response.errors, details),\n        warnings: replaceDetailsInMessages(response.warnings, details),\n        outputFiles: void 0,\n        metafile: void 0,\n        mangleCache: void 0\n      };\n      const originalErrors = result.errors.slice();\n      const originalWarnings = result.warnings.slice();\n      if (response.outputFiles)\n        result.outputFiles = response.outputFiles.map(convertOutputFiles);\n      if (response.metafile)\n        result.metafile = JSON.parse(response.metafile);\n      if (response.mangleCache)\n        result.mangleCache = response.mangleCache;\n      if (response.writeToStdout !== void 0)\n        console.log(decodeUTF8(response.writeToStdout).replace(/\\n$/, \"\"));\n      runOnEndCallbacks(result, (onEndErrors, onEndWarnings) => {\n        if (originalErrors.length > 0 || onEndErrors.length > 0) {\n          const error = failureErrorWithLog(\"Build failed\", originalErrors.concat(onEndErrors), originalWarnings.concat(onEndWarnings));\n          return callback2(error, null, onEndErrors, onEndWarnings);\n        }\n        callback2(null, result, onEndErrors, onEndWarnings);\n      });\n    };\n    let latestResultPromise;\n    let provideLatestResult;\n    if (isContext)\n      requestCallbacks[\"on-end\"] = (id, request2) => new Promise((resolve) => {\n        buildResponseToResult(request2, (err, result, onEndErrors, onEndWarnings) => {\n          const response = {\n            errors: onEndErrors,\n            warnings: onEndWarnings\n          };\n          if (provideLatestResult)\n            provideLatestResult(err, result);\n          latestResultPromise = void 0;\n          provideLatestResult = void 0;\n          sendResponse(id, response);\n          resolve();\n        });\n      });\n    sendRequest(refs, request, (error, response) => {\n      if (error)\n        return callback(new Error(error), null);\n      if (!isContext) {\n        return buildResponseToResult(response, (err, res) => {\n          scheduleOnDisposeCallbacks();\n          return callback(err, res);\n        });\n      }\n      if (response.errors.length > 0) {\n        return callback(failureErrorWithLog(\"Context failed\", response.errors, response.warnings), null);\n      }\n      let didDispose = false;\n      const result = {\n        rebuild: () => {\n          if (!latestResultPromise)\n            latestResultPromise = new Promise((resolve, reject) => {\n              let settlePromise;\n              provideLatestResult = (err, result2) => {\n                if (!settlePromise)\n                  settlePromise = () => err ? reject(err) : resolve(result2);\n              };\n              const triggerAnotherBuild = () => {\n                const request2 = {\n                  command: \"rebuild\",\n                  key: buildKey\n                };\n                sendRequest(refs, request2, (error2, response2) => {\n                  if (error2) {\n                    reject(new Error(error2));\n                  } else if (settlePromise) {\n                    settlePromise();\n                  } else {\n                    triggerAnotherBuild();\n                  }\n                });\n              };\n              triggerAnotherBuild();\n            });\n          return latestResultPromise;\n        },\n        watch: (options2 = {}) => new Promise((resolve, reject) => {\n          if (!streamIn.hasFS)\n            throw new Error(`Cannot use the \"watch\" API in this environment`);\n          const keys = {};\n          checkForInvalidFlags(options2, keys, `in watch() call`);\n          const request2 = {\n            command: \"watch\",\n            key: buildKey\n          };\n          sendRequest(refs, request2, (error2) => {\n            if (error2)\n              reject(new Error(error2));\n            else\n              resolve(void 0);\n          });\n        }),\n        serve: (options2 = {}) => new Promise((resolve, reject) => {\n          if (!streamIn.hasFS)\n            throw new Error(`Cannot use the \"serve\" API in this environment`);\n          const keys = {};\n          const port = getFlag(options2, keys, \"port\", mustBeInteger);\n          const host = getFlag(options2, keys, \"host\", mustBeString);\n          const servedir = getFlag(options2, keys, \"servedir\", mustBeString);\n          const keyfile = getFlag(options2, keys, \"keyfile\", mustBeString);\n          const certfile = getFlag(options2, keys, \"certfile\", mustBeString);\n          const onRequest = getFlag(options2, keys, \"onRequest\", mustBeFunction);\n          checkForInvalidFlags(options2, keys, `in serve() call`);\n          const request2 = {\n            command: \"serve\",\n            key: buildKey,\n            onRequest: !!onRequest\n          };\n          if (port !== void 0)\n            request2.port = port;\n          if (host !== void 0)\n            request2.host = host;\n          if (servedir !== void 0)\n            request2.servedir = servedir;\n          if (keyfile !== void 0)\n            request2.keyfile = keyfile;\n          if (certfile !== void 0)\n            request2.certfile = certfile;\n          sendRequest(refs, request2, (error2, response2) => {\n            if (error2)\n              return reject(new Error(error2));\n            if (onRequest) {\n              requestCallbacks[\"serve-request\"] = (id, request3) => {\n                onRequest(request3.args);\n                sendResponse(id, {});\n              };\n            }\n            resolve(response2);\n          });\n        }),\n        cancel: () => new Promise((resolve) => {\n          if (didDispose)\n            return resolve();\n          const request2 = {\n            command: \"cancel\",\n            key: buildKey\n          };\n          sendRequest(refs, request2, () => {\n            resolve();\n          });\n        }),\n        dispose: () => new Promise((resolve) => {\n          if (didDispose)\n            return resolve();\n          didDispose = true;\n          const request2 = {\n            command: \"dispose\",\n            key: buildKey\n          };\n          sendRequest(refs, request2, () => {\n            resolve();\n            scheduleOnDisposeCallbacks();\n            refs.unref();\n          });\n        })\n      };\n      refs.ref();\n      callback(null, result);\n    });\n  }\n}\nvar handlePlugins = async (buildKey, sendRequest, sendResponse, refs, streamIn, requestCallbacks, initialOptions, plugins, details) => {\n  let onStartCallbacks = [];\n  let onEndCallbacks = [];\n  let onResolveCallbacks = {};\n  let onLoadCallbacks = {};\n  let onDisposeCallbacks = [];\n  let nextCallbackID = 0;\n  let i = 0;\n  let requestPlugins = [];\n  let isSetupDone = false;\n  plugins = [...plugins];\n  for (let item of plugins) {\n    let keys = {};\n    if (typeof item !== \"object\")\n      throw new Error(`Plugin at index ${i} must be an object`);\n    const name = getFlag(item, keys, \"name\", mustBeString);\n    if (typeof name !== \"string\" || name === \"\")\n      throw new Error(`Plugin at index ${i} is missing a name`);\n    try {\n      let setup = getFlag(item, keys, \"setup\", mustBeFunction);\n      if (typeof setup !== \"function\")\n        throw new Error(`Plugin is missing a setup function`);\n      checkForInvalidFlags(item, keys, `on plugin ${quote(name)}`);\n      let plugin = {\n        name,\n        onStart: false,\n        onEnd: false,\n        onResolve: [],\n        onLoad: []\n      };\n      i++;\n      let resolve = (path3, options = {}) => {\n        if (!isSetupDone)\n          throw new Error('Cannot call \"resolve\" before plugin setup has completed');\n        if (typeof path3 !== \"string\")\n          throw new Error(`The path to resolve must be a string`);\n        let keys2 = /* @__PURE__ */ Object.create(null);\n        let pluginName = getFlag(options, keys2, \"pluginName\", mustBeString);\n        let importer = getFlag(options, keys2, \"importer\", mustBeString);\n        let namespace = getFlag(options, keys2, \"namespace\", mustBeString);\n        let resolveDir = getFlag(options, keys2, \"resolveDir\", mustBeString);\n        let kind = getFlag(options, keys2, \"kind\", mustBeString);\n        let pluginData = getFlag(options, keys2, \"pluginData\", canBeAnything);\n        checkForInvalidFlags(options, keys2, \"in resolve() call\");\n        return new Promise((resolve2, reject) => {\n          const request = {\n            command: \"resolve\",\n            path: path3,\n            key: buildKey,\n            pluginName: name\n          };\n          if (pluginName != null)\n            request.pluginName = pluginName;\n          if (importer != null)\n            request.importer = importer;\n          if (namespace != null)\n            request.namespace = namespace;\n          if (resolveDir != null)\n            request.resolveDir = resolveDir;\n          if (kind != null)\n            request.kind = kind;\n          else\n            throw new Error(`Must specify \"kind\" when calling \"resolve\"`);\n          if (pluginData != null)\n            request.pluginData = details.store(pluginData);\n          sendRequest(refs, request, (error, response) => {\n            if (error !== null)\n              reject(new Error(error));\n            else\n              resolve2({\n                errors: replaceDetailsInMessages(response.errors, details),\n                warnings: replaceDetailsInMessages(response.warnings, details),\n                path: response.path,\n                external: response.external,\n                sideEffects: response.sideEffects,\n                namespace: response.namespace,\n                suffix: response.suffix,\n                pluginData: details.load(response.pluginData)\n              });\n          });\n        });\n      };\n      let promise = setup({\n        initialOptions,\n        resolve,\n        onStart(callback) {\n          let registeredText = `This error came from the \"onStart\" callback registered here:`;\n          let registeredNote = extractCallerV8(new Error(registeredText), streamIn, \"onStart\");\n          onStartCallbacks.push({ name, callback, note: registeredNote });\n          plugin.onStart = true;\n        },\n        onEnd(callback) {\n          let registeredText = `This error came from the \"onEnd\" callback registered here:`;\n          let registeredNote = extractCallerV8(new Error(registeredText), streamIn, \"onEnd\");\n          onEndCallbacks.push({ name, callback, note: registeredNote });\n          plugin.onEnd = true;\n        },\n        onResolve(options, callback) {\n          let registeredText = `This error came from the \"onResolve\" callback registered here:`;\n          let registeredNote = extractCallerV8(new Error(registeredText), streamIn, \"onResolve\");\n          let keys2 = {};\n          let filter = getFlag(options, keys2, \"filter\", mustBeRegExp);\n          let namespace = getFlag(options, keys2, \"namespace\", mustBeString);\n          checkForInvalidFlags(options, keys2, `in onResolve() call for plugin ${quote(name)}`);\n          if (filter == null)\n            throw new Error(`onResolve() call is missing a filter`);\n          let id = nextCallbackID++;\n          onResolveCallbacks[id] = { name, callback, note: registeredNote };\n          plugin.onResolve.push({ id, filter: filter.source, namespace: namespace || \"\" });\n        },\n        onLoad(options, callback) {\n          let registeredText = `This error came from the \"onLoad\" callback registered here:`;\n          let registeredNote = extractCallerV8(new Error(registeredText), streamIn, \"onLoad\");\n          let keys2 = {};\n          let filter = getFlag(options, keys2, \"filter\", mustBeRegExp);\n          let namespace = getFlag(options, keys2, \"namespace\", mustBeString);\n          checkForInvalidFlags(options, keys2, `in onLoad() call for plugin ${quote(name)}`);\n          if (filter == null)\n            throw new Error(`onLoad() call is missing a filter`);\n          let id = nextCallbackID++;\n          onLoadCallbacks[id] = { name, callback, note: registeredNote };\n          plugin.onLoad.push({ id, filter: filter.source, namespace: namespace || \"\" });\n        },\n        onDispose(callback) {\n          onDisposeCallbacks.push(callback);\n        },\n        esbuild: streamIn.esbuild\n      });\n      if (promise)\n        await promise;\n      requestPlugins.push(plugin);\n    } catch (e) {\n      return { ok: false, error: e, pluginName: name };\n    }\n  }\n  requestCallbacks[\"on-start\"] = async (id, request) => {\n    let response = { errors: [], warnings: [] };\n    await Promise.all(onStartCallbacks.map(async ({ name, callback, note }) => {\n      try {\n        let result = await callback();\n        if (result != null) {\n          if (typeof result !== \"object\")\n            throw new Error(`Expected onStart() callback in plugin ${quote(name)} to return an object`);\n          let keys = {};\n          let errors = getFlag(result, keys, \"errors\", mustBeArray);\n          let warnings = getFlag(result, keys, \"warnings\", mustBeArray);\n          checkForInvalidFlags(result, keys, `from onStart() callback in plugin ${quote(name)}`);\n          if (errors != null)\n            response.errors.push(...sanitizeMessages(errors, \"errors\", details, name));\n          if (warnings != null)\n            response.warnings.push(...sanitizeMessages(warnings, \"warnings\", details, name));\n        }\n      } catch (e) {\n        response.errors.push(extractErrorMessageV8(e, streamIn, details, note && note(), name));\n      }\n    }));\n    sendResponse(id, response);\n  };\n  requestCallbacks[\"on-resolve\"] = async (id, request) => {\n    let response = {}, name = \"\", callback, note;\n    for (let id2 of request.ids) {\n      try {\n        ({ name, callback, note } = onResolveCallbacks[id2]);\n        let result = await callback({\n          path: request.path,\n          importer: request.importer,\n          namespace: request.namespace,\n          resolveDir: request.resolveDir,\n          kind: request.kind,\n          pluginData: details.load(request.pluginData)\n        });\n        if (result != null) {\n          if (typeof result !== \"object\")\n            throw new Error(`Expected onResolve() callback in plugin ${quote(name)} to return an object`);\n          let keys = {};\n          let pluginName = getFlag(result, keys, \"pluginName\", mustBeString);\n          let path3 = getFlag(result, keys, \"path\", mustBeString);\n          let namespace = getFlag(result, keys, \"namespace\", mustBeString);\n          let suffix = getFlag(result, keys, \"suffix\", mustBeString);\n          let external = getFlag(result, keys, \"external\", mustBeBoolean);\n          let sideEffects = getFlag(result, keys, \"sideEffects\", mustBeBoolean);\n          let pluginData = getFlag(result, keys, \"pluginData\", canBeAnything);\n          let errors = getFlag(result, keys, \"errors\", mustBeArray);\n          let warnings = getFlag(result, keys, \"warnings\", mustBeArray);\n          let watchFiles = getFlag(result, keys, \"watchFiles\", mustBeArray);\n          let watchDirs = getFlag(result, keys, \"watchDirs\", mustBeArray);\n          checkForInvalidFlags(result, keys, `from onResolve() callback in plugin ${quote(name)}`);\n          response.id = id2;\n          if (pluginName != null)\n            response.pluginName = pluginName;\n          if (path3 != null)\n            response.path = path3;\n          if (namespace != null)\n            response.namespace = namespace;\n          if (suffix != null)\n            response.suffix = suffix;\n          if (external != null)\n            response.external = external;\n          if (sideEffects != null)\n            response.sideEffects = sideEffects;\n          if (pluginData != null)\n            response.pluginData = details.store(pluginData);\n          if (errors != null)\n            response.errors = sanitizeMessages(errors, \"errors\", details, name);\n          if (warnings != null)\n            response.warnings = sanitizeMessages(warnings, \"warnings\", details, name);\n          if (watchFiles != null)\n            response.watchFiles = sanitizeStringArray(watchFiles, \"watchFiles\");\n          if (watchDirs != null)\n            response.watchDirs = sanitizeStringArray(watchDirs, \"watchDirs\");\n          break;\n        }\n      } catch (e) {\n        response = { id: id2, errors: [extractErrorMessageV8(e, streamIn, details, note && note(), name)] };\n        break;\n      }\n    }\n    sendResponse(id, response);\n  };\n  requestCallbacks[\"on-load\"] = async (id, request) => {\n    let response = {}, name = \"\", callback, note;\n    for (let id2 of request.ids) {\n      try {\n        ({ name, callback, note } = onLoadCallbacks[id2]);\n        let result = await callback({\n          path: request.path,\n          namespace: request.namespace,\n          suffix: request.suffix,\n          pluginData: details.load(request.pluginData)\n        });\n        if (result != null) {\n          if (typeof result !== \"object\")\n            throw new Error(`Expected onLoad() callback in plugin ${quote(name)} to return an object`);\n          let keys = {};\n          let pluginName = getFlag(result, keys, \"pluginName\", mustBeString);\n          let contents = getFlag(result, keys, \"contents\", mustBeStringOrUint8Array);\n          let resolveDir = getFlag(result, keys, \"resolveDir\", mustBeString);\n          let pluginData = getFlag(result, keys, \"pluginData\", canBeAnything);\n          let loader = getFlag(result, keys, \"loader\", mustBeString);\n          let errors = getFlag(result, keys, \"errors\", mustBeArray);\n          let warnings = getFlag(result, keys, \"warnings\", mustBeArray);\n          let watchFiles = getFlag(result, keys, \"watchFiles\", mustBeArray);\n          let watchDirs = getFlag(result, keys, \"watchDirs\", mustBeArray);\n          checkForInvalidFlags(result, keys, `from onLoad() callback in plugin ${quote(name)}`);\n          response.id = id2;\n          if (pluginName != null)\n            response.pluginName = pluginName;\n          if (contents instanceof Uint8Array)\n            response.contents = contents;\n          else if (contents != null)\n            response.contents = encodeUTF8(contents);\n          if (resolveDir != null)\n            response.resolveDir = resolveDir;\n          if (pluginData != null)\n            response.pluginData = details.store(pluginData);\n          if (loader != null)\n            response.loader = loader;\n          if (errors != null)\n            response.errors = sanitizeMessages(errors, \"errors\", details, name);\n          if (warnings != null)\n            response.warnings = sanitizeMessages(warnings, \"warnings\", details, name);\n          if (watchFiles != null)\n            response.watchFiles = sanitizeStringArray(watchFiles, \"watchFiles\");\n          if (watchDirs != null)\n            response.watchDirs = sanitizeStringArray(watchDirs, \"watchDirs\");\n          break;\n        }\n      } catch (e) {\n        response = { id: id2, errors: [extractErrorMessageV8(e, streamIn, details, note && note(), name)] };\n        break;\n      }\n    }\n    sendResponse(id, response);\n  };\n  let runOnEndCallbacks = (result, done) => done([], []);\n  if (onEndCallbacks.length > 0) {\n    runOnEndCallbacks = (result, done) => {\n      (async () => {\n        const onEndErrors = [];\n        const onEndWarnings = [];\n        for (const { name, callback, note } of onEndCallbacks) {\n          let newErrors;\n          let newWarnings;\n          try {\n            const value = await callback(result);\n            if (value != null) {\n              if (typeof value !== \"object\")\n                throw new Error(`Expected onEnd() callback in plugin ${quote(name)} to return an object`);\n              let keys = {};\n              let errors = getFlag(value, keys, \"errors\", mustBeArray);\n              let warnings = getFlag(value, keys, \"warnings\", mustBeArray);\n              checkForInvalidFlags(value, keys, `from onEnd() callback in plugin ${quote(name)}`);\n              if (errors != null)\n                newErrors = sanitizeMessages(errors, \"errors\", details, name);\n              if (warnings != null)\n                newWarnings = sanitizeMessages(warnings, \"warnings\", details, name);\n            }\n          } catch (e) {\n            newErrors = [extractErrorMessageV8(e, streamIn, details, note && note(), name)];\n          }\n          if (newErrors) {\n            onEndErrors.push(...newErrors);\n            try {\n              result.errors.push(...newErrors);\n            } catch {\n            }\n          }\n          if (newWarnings) {\n            onEndWarnings.push(...newWarnings);\n            try {\n              result.warnings.push(...newWarnings);\n            } catch {\n            }\n          }\n        }\n        done(onEndErrors, onEndWarnings);\n      })();\n    };\n  }\n  let scheduleOnDisposeCallbacks = () => {\n    for (const cb of onDisposeCallbacks) {\n      setTimeout(() => cb(), 0);\n    }\n  };\n  isSetupDone = true;\n  return {\n    ok: true,\n    requestPlugins,\n    runOnEndCallbacks,\n    scheduleOnDisposeCallbacks\n  };\n};\nfunction createObjectStash() {\n  const map = /* @__PURE__ */ new Map();\n  let nextID = 0;\n  return {\n    load(id) {\n      return map.get(id);\n    },\n    store(value) {\n      if (value === void 0)\n        return -1;\n      const id = nextID++;\n      map.set(id, value);\n      return id;\n    }\n  };\n}\nfunction extractCallerV8(e, streamIn, ident) {\n  let note;\n  let tried = false;\n  return () => {\n    if (tried)\n      return note;\n    tried = true;\n    try {\n      let lines = (e.stack + \"\").split(\"\\n\");\n      lines.splice(1, 1);\n      let location = parseStackLinesV8(streamIn, lines, ident);\n      if (location) {\n        note = { text: e.message, location };\n        return note;\n      }\n    } catch {\n    }\n  };\n}\nfunction extractErrorMessageV8(e, streamIn, stash, note, pluginName) {\n  let text = \"Internal error\";\n  let location = null;\n  try {\n    text = (e && e.message || e) + \"\";\n  } catch {\n  }\n  try {\n    location = parseStackLinesV8(streamIn, (e.stack + \"\").split(\"\\n\"), \"\");\n  } catch {\n  }\n  return { id: \"\", pluginName, text, location, notes: note ? [note] : [], detail: stash ? stash.store(e) : -1 };\n}\nfunction parseStackLinesV8(streamIn, lines, ident) {\n  let at = \"    at \";\n  if (streamIn.readFileSync && !lines[0].startsWith(at) && lines[1].startsWith(at)) {\n    for (let i = 1; i < lines.length; i++) {\n      let line = lines[i];\n      if (!line.startsWith(at))\n        continue;\n      line = line.slice(at.length);\n      while (true) {\n        let match = /^(?:new |async )?\\S+ \\((.*)\\)$/.exec(line);\n        if (match) {\n          line = match[1];\n          continue;\n        }\n        match = /^eval at \\S+ \\((.*)\\)(?:, \\S+:\\d+:\\d+)?$/.exec(line);\n        if (match) {\n          line = match[1];\n          continue;\n        }\n        match = /^(\\S+):(\\d+):(\\d+)$/.exec(line);\n        if (match) {\n          let contents;\n          try {\n            contents = streamIn.readFileSync(match[1], \"utf8\");\n          } catch {\n            break;\n          }\n          let lineText = contents.split(/\\r\\n|\\r|\\n|\\u2028|\\u2029/)[+match[2] - 1] || \"\";\n          let column = +match[3] - 1;\n          let length = lineText.slice(column, column + ident.length) === ident ? ident.length : 0;\n          return {\n            file: match[1],\n            namespace: \"file\",\n            line: +match[2],\n            column: encodeUTF8(lineText.slice(0, column)).length,\n            length: encodeUTF8(lineText.slice(column, column + length)).length,\n            lineText: lineText + \"\\n\" + lines.slice(1).join(\"\\n\"),\n            suggestion: \"\"\n          };\n        }\n        break;\n      }\n    }\n  }\n  return null;\n}\nfunction failureErrorWithLog(text, errors, warnings) {\n  let limit = 5;\n  let summary = errors.length < 1 ? \"\" : ` with ${errors.length} error${errors.length < 2 ? \"\" : \"s\"}:` + errors.slice(0, limit + 1).map((e, i) => {\n    if (i === limit)\n      return \"\\n...\";\n    if (!e.location)\n      return `\nerror: ${e.text}`;\n    let { file, line, column } = e.location;\n    let pluginText = e.pluginName ? `[plugin: ${e.pluginName}] ` : \"\";\n    return `\n${file}:${line}:${column}: ERROR: ${pluginText}${e.text}`;\n  }).join(\"\");\n  let error = new Error(`${text}${summary}`);\n  error.errors = errors;\n  error.warnings = warnings;\n  return error;\n}\nfunction replaceDetailsInMessages(messages, stash) {\n  for (const message of messages) {\n    message.detail = stash.load(message.detail);\n  }\n  return messages;\n}\nfunction sanitizeLocation(location, where) {\n  if (location == null)\n    return null;\n  let keys = {};\n  let file = getFlag(location, keys, \"file\", mustBeString);\n  let namespace = getFlag(location, keys, \"namespace\", mustBeString);\n  let line = getFlag(location, keys, \"line\", mustBeInteger);\n  let column = getFlag(location, keys, \"column\", mustBeInteger);\n  let length = getFlag(location, keys, \"length\", mustBeInteger);\n  let lineText = getFlag(location, keys, \"lineText\", mustBeString);\n  let suggestion = getFlag(location, keys, \"suggestion\", mustBeString);\n  checkForInvalidFlags(location, keys, where);\n  return {\n    file: file || \"\",\n    namespace: namespace || \"\",\n    line: line || 0,\n    column: column || 0,\n    length: length || 0,\n    lineText: lineText || \"\",\n    suggestion: suggestion || \"\"\n  };\n}\nfunction sanitizeMessages(messages, property, stash, fallbackPluginName) {\n  let messagesClone = [];\n  let index = 0;\n  for (const message of messages) {\n    let keys = {};\n    let id = getFlag(message, keys, \"id\", mustBeString);\n    let pluginName = getFlag(message, keys, \"pluginName\", mustBeString);\n    let text = getFlag(message, keys, \"text\", mustBeString);\n    let location = getFlag(message, keys, \"location\", mustBeObjectOrNull);\n    let notes = getFlag(message, keys, \"notes\", mustBeArray);\n    let detail = getFlag(message, keys, \"detail\", canBeAnything);\n    let where = `in element ${index} of \"${property}\"`;\n    checkForInvalidFlags(message, keys, where);\n    let notesClone = [];\n    if (notes) {\n      for (const note of notes) {\n        let noteKeys = {};\n        let noteText = getFlag(note, noteKeys, \"text\", mustBeString);\n        let noteLocation = getFlag(note, noteKeys, \"location\", mustBeObjectOrNull);\n        checkForInvalidFlags(note, noteKeys, where);\n        notesClone.push({\n          text: noteText || \"\",\n          location: sanitizeLocation(noteLocation, where)\n        });\n      }\n    }\n    messagesClone.push({\n      id: id || \"\",\n      pluginName: pluginName || fallbackPluginName,\n      text: text || \"\",\n      location: sanitizeLocation(location, where),\n      notes: notesClone,\n      detail: stash ? stash.store(detail) : -1\n    });\n    index++;\n  }\n  return messagesClone;\n}\nfunction sanitizeStringArray(values, property) {\n  const result = [];\n  for (const value of values) {\n    if (typeof value !== \"string\")\n      throw new Error(`${quote(property)} must be an array of strings`);\n    result.push(value);\n  }\n  return result;\n}\nfunction convertOutputFiles({ path: path3, contents }) {\n  let text = null;\n  return {\n    path: path3,\n    contents,\n    get text() {\n      const binary = this.contents;\n      if (text === null || binary !== contents) {\n        contents = binary;\n        text = decodeUTF8(binary);\n      }\n      return text;\n    }\n  };\n}\n\n// lib/npm/node-platform.ts\nvar fs = require(\"fs\");\nvar os = require(\"os\");\nvar path = require(\"path\");\nvar ESBUILD_BINARY_PATH = process.env.ESBUILD_BINARY_PATH || ESBUILD_BINARY_PATH;\nvar isValidBinaryPath = (x) => !!x && x !== \"/usr/bin/esbuild\";\nvar packageDarwin_arm64 = \"@esbuild/darwin-arm64\";\nvar packageDarwin_x64 = \"@esbuild/darwin-x64\";\nvar knownWindowsPackages = {\n  \"win32 arm64 LE\": \"@esbuild/win32-arm64\",\n  \"win32 ia32 LE\": \"@esbuild/win32-ia32\",\n  \"win32 x64 LE\": \"@esbuild/win32-x64\"\n};\nvar knownUnixlikePackages = {\n  \"android arm64 LE\": \"@esbuild/android-arm64\",\n  \"darwin arm64 LE\": \"@esbuild/darwin-arm64\",\n  \"darwin x64 LE\": \"@esbuild/darwin-x64\",\n  \"freebsd arm64 LE\": \"@esbuild/freebsd-arm64\",\n  \"freebsd x64 LE\": \"@esbuild/freebsd-x64\",\n  \"linux arm LE\": \"@esbuild/linux-arm\",\n  \"linux arm64 LE\": \"@esbuild/linux-arm64\",\n  \"linux ia32 LE\": \"@esbuild/linux-ia32\",\n  \"linux mips64el LE\": \"@esbuild/linux-mips64el\",\n  \"linux ppc64 LE\": \"@esbuild/linux-ppc64\",\n  \"linux riscv64 LE\": \"@esbuild/linux-riscv64\",\n  \"linux s390x BE\": \"@esbuild/linux-s390x\",\n  \"linux x64 LE\": \"@esbuild/linux-x64\",\n  \"linux loong64 LE\": \"@esbuild/linux-loong64\",\n  \"netbsd x64 LE\": \"@esbuild/netbsd-x64\",\n  \"openbsd x64 LE\": \"@esbuild/openbsd-x64\",\n  \"sunos x64 LE\": \"@esbuild/sunos-x64\"\n};\nvar knownWebAssemblyFallbackPackages = {\n  \"android arm LE\": \"@esbuild/android-arm\",\n  \"android x64 LE\": \"@esbuild/android-x64\"\n};\nfunction pkgAndSubpathForCurrentPlatform() {\n  let pkg;\n  let subpath;\n  let isWASM = false;\n  let platformKey = `${process.platform} ${os.arch()} ${os.endianness()}`;\n  if (platformKey in knownWindowsPackages) {\n    pkg = knownWindowsPackages[platformKey];\n    subpath = \"esbuild.exe\";\n  } else if (platformKey in knownUnixlikePackages) {\n    pkg = knownUnixlikePackages[platformKey];\n    subpath = \"bin/esbuild\";\n  } else if (platformKey in knownWebAssemblyFallbackPackages) {\n    pkg = knownWebAssemblyFallbackPackages[platformKey];\n    subpath = \"bin/esbuild\";\n    isWASM = true;\n  } else {\n    throw new Error(`Unsupported platform: ${platformKey}`);\n  }\n  return { pkg, subpath, isWASM };\n}\nfunction pkgForSomeOtherPlatform() {\n  const libMainJS = require.resolve(\"esbuild\");\n  const nodeModulesDirectory = path.dirname(path.dirname(path.dirname(libMainJS)));\n  if (path.basename(nodeModulesDirectory) === \"node_modules\") {\n    for (const unixKey in knownUnixlikePackages) {\n      try {\n        const pkg = knownUnixlikePackages[unixKey];\n        if (fs.existsSync(path.join(nodeModulesDirectory, pkg)))\n          return pkg;\n      } catch {\n      }\n    }\n    for (const windowsKey in knownWindowsPackages) {\n      try {\n        const pkg = knownWindowsPackages[windowsKey];\n        if (fs.existsSync(path.join(nodeModulesDirectory, pkg)))\n          return pkg;\n      } catch {\n      }\n    }\n  }\n  return null;\n}\nfunction downloadedBinPath(pkg, subpath) {\n  const esbuildLibDir = path.dirname(require.resolve(\"esbuild\"));\n  return path.join(esbuildLibDir, `downloaded-${pkg.replace(\"/\", \"-\")}-${path.basename(subpath)}`);\n}\nfunction generateBinPath() {\n  if (isValidBinaryPath(ESBUILD_BINARY_PATH)) {\n    if (!fs.existsSync(ESBUILD_BINARY_PATH)) {\n      console.warn(`[esbuild] Ignoring bad configuration: ESBUILD_BINARY_PATH=${ESBUILD_BINARY_PATH}`);\n    } else {\n      return { binPath: ESBUILD_BINARY_PATH, isWASM: false };\n    }\n  }\n  const { pkg, subpath, isWASM } = pkgAndSubpathForCurrentPlatform();\n  let binPath;\n  try {\n    binPath = require.resolve(`${pkg}/${subpath}`);\n  } catch (e) {\n    binPath = downloadedBinPath(pkg, subpath);\n    if (!fs.existsSync(binPath)) {\n      try {\n        require.resolve(pkg);\n      } catch {\n        const otherPkg = pkgForSomeOtherPlatform();\n        if (otherPkg) {\n          let suggestions = `\nSpecifically the \"${otherPkg}\" package is present but this platform\nneeds the \"${pkg}\" package instead. People often get into this\nsituation by installing esbuild on Windows or macOS and copying \"node_modules\"\ninto a Docker image that runs Linux, or by copying \"node_modules\" between\nWindows and WSL environments.\n\nIf you are installing with npm, you can try not copying the \"node_modules\"\ndirectory when you copy the files over, and running \"npm ci\" or \"npm install\"\non the destination platform after the copy. Or you could consider using yarn\ninstead of npm which has built-in support for installing a package on multiple\nplatforms simultaneously.\n\nIf you are installing with yarn, you can try listing both this platform and the\nother platform in your \".yarnrc.yml\" file using the \"supportedArchitectures\"\nfeature: https://yarnpkg.com/configuration/yarnrc/#supportedArchitectures\nKeep in mind that this means multiple copies of esbuild will be present.\n`;\n          if (pkg === packageDarwin_x64 && otherPkg === packageDarwin_arm64 || pkg === packageDarwin_arm64 && otherPkg === packageDarwin_x64) {\n            suggestions = `\nSpecifically the \"${otherPkg}\" package is present but this platform\nneeds the \"${pkg}\" package instead. People often get into this\nsituation by installing esbuild with npm running inside of Rosetta 2 and then\ntrying to use it with node running outside of Rosetta 2, or vice versa (Rosetta\n2 is Apple's on-the-fly x86_64-to-arm64 translation service).\n\nIf you are installing with npm, you can try ensuring that both npm and node are\nnot running under Rosetta 2 and then reinstalling esbuild. This likely involves\nchanging how you installed npm and/or node. For example, installing node with\nthe universal installer here should work: https://nodejs.org/en/download/. Or\nyou could consider using yarn instead of npm which has built-in support for\ninstalling a package on multiple platforms simultaneously.\n\nIf you are installing with yarn, you can try listing both \"arm64\" and \"x64\"\nin your \".yarnrc.yml\" file using the \"supportedArchitectures\" feature:\nhttps://yarnpkg.com/configuration/yarnrc/#supportedArchitectures\nKeep in mind that this means multiple copies of esbuild will be present.\n`;\n          }\n          throw new Error(`\nYou installed esbuild for another platform than the one you're currently using.\nThis won't work because esbuild is written with native code and needs to\ninstall a platform-specific binary executable.\n${suggestions}\nAnother alternative is to use the \"esbuild-wasm\" package instead, which works\nthe same way on all platforms. But it comes with a heavy performance cost and\ncan sometimes be 10x slower than the \"esbuild\" package, so you may also not\nwant to do that.\n`);\n        }\n        throw new Error(`The package \"${pkg}\" could not be found, and is needed by esbuild.\n\nIf you are installing esbuild with npm, make sure that you don't specify the\n\"--no-optional\" or \"--omit=optional\" flags. The \"optionalDependencies\" feature\nof \"package.json\" is used by esbuild to install the correct binary executable\nfor your current platform.`);\n      }\n      throw e;\n    }\n  }\n  if (/\\.zip\\//.test(binPath)) {\n    let pnpapi;\n    try {\n      pnpapi = require(\"pnpapi\");\n    } catch (e) {\n    }\n    if (pnpapi) {\n      const root = pnpapi.getPackageInformation(pnpapi.topLevel).packageLocation;\n      const binTargetPath = path.join(\n        root,\n        \"node_modules\",\n        \".cache\",\n        \"esbuild\",\n        `pnpapi-${pkg.replace(\"/\", \"-\")}-${\"0.17.9\"}-${path.basename(subpath)}`\n      );\n      if (!fs.existsSync(binTargetPath)) {\n        fs.mkdirSync(path.dirname(binTargetPath), { recursive: true });\n        fs.copyFileSync(binPath, binTargetPath);\n        fs.chmodSync(binTargetPath, 493);\n      }\n      return { binPath: binTargetPath, isWASM };\n    }\n  }\n  return { binPath, isWASM };\n}\n\n// lib/npm/node.ts\nvar child_process = require(\"child_process\");\nvar crypto = require(\"crypto\");\nvar path2 = require(\"path\");\nvar fs2 = require(\"fs\");\nvar os2 = require(\"os\");\nvar tty = require(\"tty\");\nvar worker_threads;\nif (process.env.ESBUILD_WORKER_THREADS !== \"0\") {\n  try {\n    worker_threads = require(\"worker_threads\");\n  } catch {\n  }\n  let [major, minor] = process.versions.node.split(\".\");\n  if (\n    // <v12.17.0 does not work\n    +major < 12 || +major === 12 && +minor < 17 || +major === 13 && +minor < 13\n  ) {\n    worker_threads = void 0;\n  }\n}\nvar _a;\nvar isInternalWorkerThread = ((_a = worker_threads == null ? void 0 : worker_threads.workerData) == null ? void 0 : _a.esbuildVersion) === \"0.17.9\";\nvar esbuildCommandAndArgs = () => {\n  if ((!ESBUILD_BINARY_PATH || false) && (path2.basename(__filename) !== \"main.js\" || path2.basename(__dirname) !== \"lib\")) {\n    throw new Error(\n      `The esbuild JavaScript API cannot be bundled. Please mark the \"esbuild\" package as external so it's not included in the bundle.\n\nMore information: The file containing the code for esbuild's JavaScript API (${__filename}) does not appear to be inside the esbuild package on the file system, which usually means that the esbuild package was bundled into another file. This is problematic because the API needs to run a binary executable inside the esbuild package which is located using a relative path from the API code to the executable. If the esbuild package is bundled, the relative path will be incorrect and the executable won't be found.`\n    );\n  }\n  if (false) {\n    return [\"node\", [path2.join(__dirname, \"..\", \"bin\", \"esbuild\")]];\n  } else {\n    const { binPath, isWASM } = generateBinPath();\n    if (isWASM) {\n      return [\"node\", [binPath]];\n    } else {\n      return [binPath, []];\n    }\n  }\n};\nvar isTTY = () => tty.isatty(2);\nvar fsSync = {\n  readFile(tempFile, callback) {\n    try {\n      let contents = fs2.readFileSync(tempFile, \"utf8\");\n      try {\n        fs2.unlinkSync(tempFile);\n      } catch {\n      }\n      callback(null, contents);\n    } catch (err) {\n      callback(err, null);\n    }\n  },\n  writeFile(contents, callback) {\n    try {\n      let tempFile = randomFileName();\n      fs2.writeFileSync(tempFile, contents);\n      callback(tempFile);\n    } catch {\n      callback(null);\n    }\n  }\n};\nvar fsAsync = {\n  readFile(tempFile, callback) {\n    try {\n      fs2.readFile(tempFile, \"utf8\", (err, contents) => {\n        try {\n          fs2.unlink(tempFile, () => callback(err, contents));\n        } catch {\n          callback(err, contents);\n        }\n      });\n    } catch (err) {\n      callback(err, null);\n    }\n  },\n  writeFile(contents, callback) {\n    try {\n      let tempFile = randomFileName();\n      fs2.writeFile(tempFile, contents, (err) => err !== null ? callback(null) : callback(tempFile));\n    } catch {\n      callback(null);\n    }\n  }\n};\nvar version = \"0.17.9\";\nvar build = (options) => ensureServiceIsRunning().build(options);\nvar context = (buildOptions) => ensureServiceIsRunning().context(buildOptions);\nvar transform = (input, options) => ensureServiceIsRunning().transform(input, options);\nvar formatMessages = (messages, options) => ensureServiceIsRunning().formatMessages(messages, options);\nvar analyzeMetafile = (messages, options) => ensureServiceIsRunning().analyzeMetafile(messages, options);\nvar buildSync = (options) => {\n  if (worker_threads && !isInternalWorkerThread) {\n    if (!workerThreadService)\n      workerThreadService = startWorkerThreadService(worker_threads);\n    return workerThreadService.buildSync(options);\n  }\n  let result;\n  runServiceSync((service) => service.buildOrContext({\n    callName: \"buildSync\",\n    refs: null,\n    options,\n    isTTY: isTTY(),\n    defaultWD,\n    callback: (err, res) => {\n      if (err)\n        throw err;\n      result = res;\n    }\n  }));\n  return result;\n};\nvar transformSync = (input, options) => {\n  if (worker_threads && !isInternalWorkerThread) {\n    if (!workerThreadService)\n      workerThreadService = startWorkerThreadService(worker_threads);\n    return workerThreadService.transformSync(input, options);\n  }\n  let result;\n  runServiceSync((service) => service.transform({\n    callName: \"transformSync\",\n    refs: null,\n    input,\n    options: options || {},\n    isTTY: isTTY(),\n    fs: fsSync,\n    callback: (err, res) => {\n      if (err)\n        throw err;\n      result = res;\n    }\n  }));\n  return result;\n};\nvar formatMessagesSync = (messages, options) => {\n  if (worker_threads && !isInternalWorkerThread) {\n    if (!workerThreadService)\n      workerThreadService = startWorkerThreadService(worker_threads);\n    return workerThreadService.formatMessagesSync(messages, options);\n  }\n  let result;\n  runServiceSync((service) => service.formatMessages({\n    callName: \"formatMessagesSync\",\n    refs: null,\n    messages,\n    options,\n    callback: (err, res) => {\n      if (err)\n        throw err;\n      result = res;\n    }\n  }));\n  return result;\n};\nvar analyzeMetafileSync = (metafile, options) => {\n  if (worker_threads && !isInternalWorkerThread) {\n    if (!workerThreadService)\n      workerThreadService = startWorkerThreadService(worker_threads);\n    return workerThreadService.analyzeMetafileSync(metafile, options);\n  }\n  let result;\n  runServiceSync((service) => service.analyzeMetafile({\n    callName: \"analyzeMetafileSync\",\n    refs: null,\n    metafile: typeof metafile === \"string\" ? metafile : JSON.stringify(metafile),\n    options,\n    callback: (err, res) => {\n      if (err)\n        throw err;\n      result = res;\n    }\n  }));\n  return result;\n};\nvar initializeWasCalled = false;\nvar initialize = (options) => {\n  options = validateInitializeOptions(options || {});\n  if (options.wasmURL)\n    throw new Error(`The \"wasmURL\" option only works in the browser`);\n  if (options.wasmModule)\n    throw new Error(`The \"wasmModule\" option only works in the browser`);\n  if (options.worker)\n    throw new Error(`The \"worker\" option only works in the browser`);\n  if (initializeWasCalled)\n    throw new Error('Cannot call \"initialize\" more than once');\n  ensureServiceIsRunning();\n  initializeWasCalled = true;\n  return Promise.resolve();\n};\nvar defaultWD = process.cwd();\nvar longLivedService;\nvar ensureServiceIsRunning = () => {\n  if (longLivedService)\n    return longLivedService;\n  let [command, args] = esbuildCommandAndArgs();\n  let child = child_process.spawn(command, args.concat(`--service=${\"0.17.9\"}`, \"--ping\"), {\n    windowsHide: true,\n    stdio: [\"pipe\", \"pipe\", \"inherit\"],\n    cwd: defaultWD\n  });\n  let { readFromStdout, afterClose, service } = createChannel({\n    writeToStdin(bytes) {\n      child.stdin.write(bytes, (err) => {\n        if (err)\n          afterClose(err);\n      });\n    },\n    readFileSync: fs2.readFileSync,\n    isSync: false,\n    hasFS: true,\n    esbuild: node_exports\n  });\n  child.stdin.on(\"error\", afterClose);\n  child.on(\"error\", afterClose);\n  const stdin = child.stdin;\n  const stdout = child.stdout;\n  stdout.on(\"data\", readFromStdout);\n  stdout.on(\"end\", afterClose);\n  let refCount = 0;\n  child.unref();\n  if (stdin.unref) {\n    stdin.unref();\n  }\n  if (stdout.unref) {\n    stdout.unref();\n  }\n  const refs = {\n    ref() {\n      if (++refCount === 1)\n        child.ref();\n    },\n    unref() {\n      if (--refCount === 0)\n        child.unref();\n    }\n  };\n  longLivedService = {\n    build: (options) => new Promise((resolve, reject) => {\n      service.buildOrContext({\n        callName: \"build\",\n        refs,\n        options,\n        isTTY: isTTY(),\n        defaultWD,\n        callback: (err, res) => err ? reject(err) : resolve(res)\n      });\n    }),\n    context: (options) => new Promise((resolve, reject) => service.buildOrContext({\n      callName: \"context\",\n      refs,\n      options,\n      isTTY: isTTY(),\n      defaultWD,\n      callback: (err, res) => err ? reject(err) : resolve(res)\n    })),\n    transform: (input, options) => new Promise((resolve, reject) => service.transform({\n      callName: \"transform\",\n      refs,\n      input,\n      options: options || {},\n      isTTY: isTTY(),\n      fs: fsAsync,\n      callback: (err, res) => err ? reject(err) : resolve(res)\n    })),\n    formatMessages: (messages, options) => new Promise((resolve, reject) => service.formatMessages({\n      callName: \"formatMessages\",\n      refs,\n      messages,\n      options,\n      callback: (err, res) => err ? reject(err) : resolve(res)\n    })),\n    analyzeMetafile: (metafile, options) => new Promise((resolve, reject) => service.analyzeMetafile({\n      callName: \"analyzeMetafile\",\n      refs,\n      metafile: typeof metafile === \"string\" ? metafile : JSON.stringify(metafile),\n      options,\n      callback: (err, res) => err ? reject(err) : resolve(res)\n    }))\n  };\n  return longLivedService;\n};\nvar runServiceSync = (callback) => {\n  let [command, args] = esbuildCommandAndArgs();\n  let stdin = new Uint8Array();\n  let { readFromStdout, afterClose, service } = createChannel({\n    writeToStdin(bytes) {\n      if (stdin.length !== 0)\n        throw new Error(\"Must run at most one command\");\n      stdin = bytes;\n    },\n    isSync: true,\n    hasFS: true,\n    esbuild: node_exports\n  });\n  callback(service);\n  let stdout = child_process.execFileSync(command, args.concat(`--service=${\"0.17.9\"}`), {\n    cwd: defaultWD,\n    windowsHide: true,\n    input: stdin,\n    // We don't know how large the output could be. If it's too large, the\n    // command will fail with ENOBUFS. Reserve 16mb for now since that feels\n    // like it should be enough. Also allow overriding this with an environment\n    // variable.\n    maxBuffer: +process.env.ESBUILD_MAX_BUFFER || 16 * 1024 * 1024\n  });\n  readFromStdout(stdout);\n  afterClose(null);\n};\nvar randomFileName = () => {\n  return path2.join(os2.tmpdir(), `esbuild-${crypto.randomBytes(32).toString(\"hex\")}`);\n};\nvar workerThreadService = null;\nvar startWorkerThreadService = (worker_threads2) => {\n  let { port1: mainPort, port2: workerPort } = new worker_threads2.MessageChannel();\n  let worker = new worker_threads2.Worker(__filename, {\n    workerData: { workerPort, defaultWD, esbuildVersion: \"0.17.9\" },\n    transferList: [workerPort],\n    // From node's documentation: https://nodejs.org/api/worker_threads.html\n    //\n    //   Take care when launching worker threads from preload scripts (scripts loaded\n    //   and run using the `-r` command line flag). Unless the `execArgv` option is\n    //   explicitly set, new Worker threads automatically inherit the command line flags\n    //   from the running process and will preload the same preload scripts as the main\n    //   thread. If the preload script unconditionally launches a worker thread, every\n    //   thread spawned will spawn another until the application crashes.\n    //\n    execArgv: []\n  });\n  let nextID = 0;\n  let fakeBuildError = (text) => {\n    let error = new Error(`Build failed with 1 error:\nerror: ${text}`);\n    let errors = [{ id: \"\", pluginName: \"\", text, location: null, notes: [], detail: void 0 }];\n    error.errors = errors;\n    error.warnings = [];\n    return error;\n  };\n  let validateBuildSyncOptions = (options) => {\n    if (!options)\n      return;\n    let plugins = options.plugins;\n    if (plugins && plugins.length > 0)\n      throw fakeBuildError(`Cannot use plugins in synchronous API calls`);\n  };\n  let applyProperties = (object, properties) => {\n    for (let key in properties) {\n      object[key] = properties[key];\n    }\n  };\n  let runCallSync = (command, args) => {\n    let id = nextID++;\n    let sharedBuffer = new SharedArrayBuffer(8);\n    let sharedBufferView = new Int32Array(sharedBuffer);\n    let msg = { sharedBuffer, id, command, args };\n    worker.postMessage(msg);\n    let status = Atomics.wait(sharedBufferView, 0, 0);\n    if (status !== \"ok\" && status !== \"not-equal\")\n      throw new Error(\"Internal error: Atomics.wait() failed: \" + status);\n    let { message: { id: id2, resolve, reject, properties } } = worker_threads2.receiveMessageOnPort(mainPort);\n    if (id !== id2)\n      throw new Error(`Internal error: Expected id ${id} but got id ${id2}`);\n    if (reject) {\n      applyProperties(reject, properties);\n      throw reject;\n    }\n    return resolve;\n  };\n  worker.unref();\n  return {\n    buildSync(options) {\n      validateBuildSyncOptions(options);\n      return runCallSync(\"build\", [options]);\n    },\n    transformSync(input, options) {\n      return runCallSync(\"transform\", [input, options]);\n    },\n    formatMessagesSync(messages, options) {\n      return runCallSync(\"formatMessages\", [messages, options]);\n    },\n    analyzeMetafileSync(metafile, options) {\n      return runCallSync(\"analyzeMetafile\", [metafile, options]);\n    }\n  };\n};\nvar startSyncServiceWorker = () => {\n  let workerPort = worker_threads.workerData.workerPort;\n  let parentPort = worker_threads.parentPort;\n  let extractProperties = (object) => {\n    let properties = {};\n    if (object && typeof object === \"object\") {\n      for (let key in object) {\n        properties[key] = object[key];\n      }\n    }\n    return properties;\n  };\n  try {\n    let service = ensureServiceIsRunning();\n    defaultWD = worker_threads.workerData.defaultWD;\n    parentPort.on(\"message\", (msg) => {\n      (async () => {\n        let { sharedBuffer, id, command, args } = msg;\n        let sharedBufferView = new Int32Array(sharedBuffer);\n        try {\n          switch (command) {\n            case \"build\":\n              workerPort.postMessage({ id, resolve: await service.build(args[0]) });\n              break;\n            case \"transform\":\n              workerPort.postMessage({ id, resolve: await service.transform(args[0], args[1]) });\n              break;\n            case \"formatMessages\":\n              workerPort.postMessage({ id, resolve: await service.formatMessages(args[0], args[1]) });\n              break;\n            case \"analyzeMetafile\":\n              workerPort.postMessage({ id, resolve: await service.analyzeMetafile(args[0], args[1]) });\n              break;\n            default:\n              throw new Error(`Invalid command: ${command}`);\n          }\n        } catch (reject) {\n          workerPort.postMessage({ id, reject, properties: extractProperties(reject) });\n        }\n        Atomics.add(sharedBufferView, 0, 1);\n        Atomics.notify(sharedBufferView, 0, Infinity);\n      })();\n    });\n  } catch (reject) {\n    parentPort.on(\"message\", (msg) => {\n      let { sharedBuffer, id } = msg;\n      let sharedBufferView = new Int32Array(sharedBuffer);\n      workerPort.postMessage({ id, reject, properties: extractProperties(reject) });\n      Atomics.add(sharedBufferView, 0, 1);\n      Atomics.notify(sharedBufferView, 0, Infinity);\n    });\n  }\n};\nif (isInternalWorkerThread) {\n  startSyncServiceWorker();\n}\nvar node_default = node_exports;\n// Annotate the CommonJS export names for ESM import in node:\n0 && (module.exports = {\n  analyzeMetafile,\n  analyzeMetafileSync,\n  build,\n  buildSync,\n  context,\n  formatMessages,\n  formatMessagesSync,\n  initialize,\n  transform,\n  transformSync,\n  version\n});\n/LICENSE.md\u0004-MIT License\n\nCopyright (c) 2020 Evan Wallace\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/ZXNjYWxhZGVAMy4xLjE=",
    "content": "/readme.md\u001a# escalade [![CI](https://github.com/lukeed/escalade/workflows/CI/badge.svg)](https://github.com/lukeed/escalade/actions) [![codecov](https://badgen.now.sh/codecov/c/github/lukeed/escalade)](https://codecov.io/gh/lukeed/escalade)\n\n> A tiny (183B to 210B) and [fast](#benchmarks) utility to ascend parent directories\n\nWith [escalade](https://en.wikipedia.org/wiki/Escalade), you can scale parent directories until you've found what you're looking for.<br>Given an input file or directory, `escalade` will continue executing your callback function until either:\n\n1) the callback returns a truthy value\n2) `escalade` has reached the system root directory (eg, `/`)\n\n> **Important:**<br>Please note that `escalade` only deals with direct ancestry – it will not dive into parents' sibling directories.\n\n---\n\n**Notice:** As of v3.1.0, `escalade` now includes [Deno support](http://deno.land/x/escalade)! Please see [Deno Usage](#deno) below.\n\n---\n\n## Install\n\n```\n$ npm install --save escalade\n```\n\n\n## Modes\n\nThere are two \"versions\" of `escalade` available:\n\n#### \"async\"\n> **Node.js:** >= 8.x<br>\n> **Size (gzip):** 210 bytes<br>\n> **Availability:** [CommonJS](https://unpkg.com/escalade/dist/index.js), [ES Module](https://unpkg.com/escalade/dist/index.mjs)\n\nThis is the primary/default mode. It makes use of `async`/`await` and [`util.promisify`](https://nodejs.org/api/util.html#util_util_promisify_original).\n\n#### \"sync\"\n> **Node.js:** >= 6.x<br>\n> **Size (gzip):** 183 bytes<br>\n> **Availability:** [CommonJS](https://unpkg.com/escalade/sync/index.js), [ES Module](https://unpkg.com/escalade/sync/index.mjs)\n\nThis is the opt-in mode, ideal for scenarios where `async` usage cannot be supported.\n\n\n## Usage\n\n***Example Structure***\n\n```\n/Users/lukeed\n  └── oss\n    ├── license\n    └── escalade\n      ├── package.json\n      └── test\n        └── fixtures\n          ├── index.js\n          └── foobar\n            └── demo.js\n```\n\n***Example Usage***\n\n```js\n//~> demo.js\nimport { join } from 'path';\nimport escalade from 'escalade';\n\nconst input = join(__dirname, 'demo.js');\n// or: const input = __dirname;\n\nconst pkg = await escalade(input, (dir, names) => {\n  console.log('~> dir:', dir);\n  console.log('~> names:', names);\n  console.log('---');\n\n  if (names.includes('package.json')) {\n    // will be resolved into absolute\n    return 'package.json';\n  }\n});\n\n//~> dir: /Users/lukeed/oss/escalade/test/fixtures/foobar\n//~> names: ['demo.js']\n//---\n//~> dir: /Users/lukeed/oss/escalade/test/fixtures\n//~> names: ['index.js', 'foobar']\n//---\n//~> dir: /Users/lukeed/oss/escalade/test\n//~> names: ['fixtures']\n//---\n//~> dir: /Users/lukeed/oss/escalade\n//~> names: ['package.json', 'test']\n//---\n\nconsole.log(pkg);\n//=> /Users/lukeed/oss/escalade/package.json\n\n// Now search for \"missing123.txt\"\n// (Assume it doesn't exist anywhere!)\nconst missing = await escalade(input, (dir, names) => {\n  console.log('~> dir:', dir);\n  return names.includes('missing123.txt') && 'missing123.txt';\n});\n\n//~> dir: /Users/lukeed/oss/escalade/test/fixtures/foobar\n//~> dir: /Users/lukeed/oss/escalade/test/fixtures\n//~> dir: /Users/lukeed/oss/escalade/test\n//~> dir: /Users/lukeed/oss/escalade\n//~> dir: /Users/lukeed/oss\n//~> dir: /Users/lukeed\n//~> dir: /Users\n//~> dir: /\n\nconsole.log(missing);\n//=> undefined\n```\n\n> **Note:** To run the above example with \"sync\" mode, import from `escalade/sync` and remove the `await` keyword.\n\n\n## API\n\n### escalade(input, callback)\nReturns: `string|void` or `Promise<string|void>`\n\nWhen your `callback` locates a file, `escalade` will resolve/return with an absolute path.<br>\nIf your `callback` was never satisfied, then `escalade` will resolve/return with nothing (undefined).\n\n> **Important:**<br>The `sync` and `async` versions share the same API.<br>The **only** difference is that `sync` is not Promise-based.\n\n#### input\nType: `string`\n\nThe path from which to start ascending.\n\nThis may be a file or a directory path.<br>However, when `input` is a file, `escalade` will begin with its parent directory.\n\n> **Important:** Unless given an absolute path, `input` will be resolved from `process.cwd()` location.\n\n#### callback\nType: `Function`\n\nThe callback to execute for each ancestry level. It always is given two arguments:\n\n1) `dir` - an absolute path of the current parent directory\n2) `names` - a list (`string[]`) of contents _relative to_ the `dir` parent\n\n> **Note:** The `names` list can contain names of files _and_ directories.\n\nWhen your callback returns a _falsey_ value, then `escalade` will continue with `dir`'s parent directory, re-invoking your callback with new argument values.\n\nWhen your callback returns a string, then `escalade` stops iteration immediately.<br>\nIf the string is an absolute path, then it's left as is. Otherwise, the string is resolved into an absolute path _from_ the `dir` that housed the satisfying condition.\n\n> **Important:** Your `callback` can be a `Promise/AsyncFunction` when using the \"async\" version of `escalade`.\n\n## Benchmarks\n\n> Running on Node.js v10.13.0\n\n```\n# Load Time\n  find-up         3.891ms\n  escalade        0.485ms\n  escalade/sync   0.309ms\n\n# Levels: 6 (target = \"foo.txt\"):\n  find-up          x 24,856 ops/sec ±6.46% (55 runs sampled)\n  escalade         x 73,084 ops/sec ±4.23% (73 runs sampled)\n  find-up.sync     x  3,663 ops/sec ±1.12% (83 runs sampled)\n  escalade/sync    x  9,360 ops/sec ±0.62% (88 runs sampled)\n\n# Levels: 12 (target = \"package.json\"):\n  find-up          x 29,300 ops/sec ±10.68% (70 runs sampled)\n  escalade         x 73,685 ops/sec ± 5.66% (66 runs sampled)\n  find-up.sync     x  1,707 ops/sec ± 0.58% (91 runs sampled)\n  escalade/sync    x  4,667 ops/sec ± 0.68% (94 runs sampled)\n\n# Levels: 18 (target = \"missing123.txt\"):\n  find-up          x 21,818 ops/sec ±17.37% (14 runs sampled)\n  escalade         x 67,101 ops/sec ±21.60% (20 runs sampled)\n  find-up.sync     x  1,037 ops/sec ± 2.86% (88 runs sampled)\n  escalade/sync    x  1,248 ops/sec ± 0.50% (93 runs sampled)\n```\n\n## Deno\n\nAs of v3.1.0, `escalade` is available on the Deno registry.\n\nPlease note that the [API](#api) is identical and that there are still [two modes](#modes) from which to choose:\n\n```ts\n// Choose \"async\" mode\nimport escalade from 'https://deno.land/escalade/async.ts';\n\n// Choose \"sync\" mode\nimport escalade from 'https://deno.land/escalade/sync.ts';\n```\n\n> **Important:** The `allow-read` permission is required!\n\n\n## Related\n\n- [premove](https://github.com/lukeed/premove) - A tiny (247B) utility to remove items recursively\n- [totalist](https://github.com/lukeed/totalist) - A tiny (195B to 224B) utility to recursively list all (total) files in a directory\n- [mk-dirs](https://github.com/lukeed/mk-dirs) - A tiny (420B) utility to make a directory and its parents, recursively\n\n## License\n\nMIT © [Luke Edwards](https://lukeed.com)\n/sync/index.mjs\u0001import { dirname, resolve } from 'path';\nimport { readdirSync, statSync } from 'fs';\n\nexport default function (start, callback) {\n\tlet dir = resolve('.', start);\n\tlet tmp, stats = statSync(dir);\n\n\tif (!stats.isDirectory()) {\n\t\tdir = dirname(dir);\n\t}\n\n\twhile (true) {\n\t\ttmp = callback(dir, readdirSync(dir));\n\t\tif (tmp) return resolve(dir, tmp);\n\t\tdir = dirname(tmp = dir);\n\t\tif (tmp === dir) break;\n\t}\n}\n/package.json\u0004{\n  \"name\": \"escalade\",\n  \"version\": \"3.1.1\",\n  \"repository\": \"lukeed/escalade\",\n  \"description\": \"A tiny (183B to 210B) and fast utility to ascend parent directories\",\n  \"module\": \"dist/index.mjs\",\n  \"main\": \"dist/index.js\",\n  \"types\": \"index.d.ts\",\n  \"license\": \"MIT\",\n  \"author\": {\n    \"name\": \"Luke Edwards\",\n    \"email\": \"luke.edwards05@gmail.com\",\n    \"url\": \"https://lukeed.com\"\n  },\n  \"exports\": {\n    \".\": [\n      {\n        \"import\": \"./dist/index.mjs\",\n        \"require\": \"./dist/index.js\"\n      },\n      \"./dist/index.js\"\n    ],\n    \"./sync\": [\n      {\n        \"import\": \"./sync/index.mjs\",\n        \"require\": \"./sync/index.js\"\n      },\n      \"./sync/index.js\"\n    ]\n  },\n  \"files\": [\n    \"*.d.ts\",\n    \"dist\",\n    \"sync\"\n  ],\n  \"modes\": {\n    \"sync\": \"src/sync.js\",\n    \"default\": \"src/async.js\"\n  },\n  \"engines\": {\n    \"node\": \">=6\"\n  },\n  \"scripts\": {\n    \"build\": \"bundt\",\n    \"pretest\": \"npm run build\",\n    \"test\": \"uvu -r esm test -i fixtures\"\n  },\n  \"keywords\": [\n    \"find\",\n    \"parent\",\n    \"parents\",\n    \"directory\",\n    \"search\",\n    \"walk\"\n  ],\n  \"devDependencies\": {\n    \"bundt\": \"1.1.1\",\n    \"esm\": \"3.2.25\",\n    \"uvu\": \"0.3.3\"\n  }\n}\n/sync/index.js\u0001const { dirname, resolve } = require('path');\nconst { readdirSync, statSync } = require('fs');\n\nmodule.exports = function (start, callback) {\n\tlet dir = resolve('.', start);\n\tlet tmp, stats = statSync(dir);\n\n\tif (!stats.isDirectory()) {\n\t\tdir = dirname(dir);\n\t}\n\n\twhile (true) {\n\t\ttmp = callback(dir, readdirSync(dir));\n\t\tif (tmp) return resolve(dir, tmp);\n\t\tdir = dirname(tmp = dir);\n\t\tif (tmp === dir) break;\n\t}\n}\n/license\u0004PMIT License\n\nCopyright (c) Luke Edwards <luke.edwards05@gmail.com> (lukeed.com)\n\nPermission 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:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE 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.\n/index.d.tstype Promisable<T> = T | Promise<T>;\nexport type Callback = (directory: string, files: string[]) => Promisable<string | false | void>;\nexport default function (directory: string, callback: Callback): Promise<string | void>;\n/dist/index.js\u0002\u0016const { dirname, resolve } = require('path');\nconst { readdir, stat } = require('fs');\nconst { promisify } = require('util');\n\nconst toStats = promisify(stat);\nconst toRead = promisify(readdir);\n\nmodule.exports = async function (start, callback) {\n\tlet dir = resolve('.', start);\n\tlet tmp, stats = await toStats(dir);\n\n\tif (!stats.isDirectory()) {\n\t\tdir = dirname(dir);\n\t}\n\n\twhile (true) {\n\t\ttmp = await callback(dir, await toRead(dir));\n\t\tif (tmp) return resolve(dir, tmp);\n\t\tdir = dirname(tmp = dir);\n\t\tif (tmp === dir) break;\n\t}\n}\n/sync/index.d.tsĦexport type Callback = (directory: string, files: string[]) => string | false | void;\nexport default function (directory: string, callback: Callback): string | void;\n/dist/index.mjs\u0002\u0005import { dirname, resolve } from 'path';\nimport { readdir, stat } from 'fs';\nimport { promisify } from 'util';\n\nconst toStats = promisify(stat);\nconst toRead = promisify(readdir);\n\nexport default async function (start, callback) {\n\tlet dir = resolve('.', start);\n\tlet tmp, stats = await toStats(dir);\n\n\tif (!stats.isDirectory()) {\n\t\tdir = dirname(dir);\n\t}\n\n\twhile (true) {\n\t\ttmp = await callback(dir, await toRead(dir));\n\t\tif (tmp) return resolve(dir, tmp);\n\t\tdir = dirname(tmp = dir);\n\t\tif (tmp === dir) break;\n\t}\n}\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/ZXNjYXBlLWh0bWxAMS4wLjM=",
    "content": "/index.js\u0005R/*!\n * escape-html\n * Copyright(c) 2012-2013 TJ Holowaychuk\n * Copyright(c) 2015 Andreas Lubbe\n * Copyright(c) 2015 Tiancheng \"Timothy\" Gu\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module variables.\n * @private\n */\n\nvar matchHtmlRegExp = /[\"'&<>]/;\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = escapeHtml;\n\n/**\n * Escape special characters in the given string of html.\n *\n * @param  {string} string The string to escape for inserting into HTML\n * @return {string}\n * @public\n */\n\nfunction escapeHtml(string) {\n  var str = '' + string;\n  var match = matchHtmlRegExp.exec(str);\n\n  if (!match) {\n    return str;\n  }\n\n  var escape;\n  var html = '';\n  var index = 0;\n  var lastIndex = 0;\n\n  for (index = match.index; index < str.length; index++) {\n    switch (str.charCodeAt(index)) {\n      case 34: // \"\n        escape = '&quot;';\n        break;\n      case 38: // &\n        escape = '&amp;';\n        break;\n      case 39: // '\n        escape = '&#39;';\n        break;\n      case 60: // <\n        escape = '&lt;';\n        break;\n      case 62: // >\n        escape = '&gt;';\n        break;\n      default:\n        continue;\n    }\n\n    if (lastIndex !== index) {\n      html += str.substring(lastIndex, index);\n    }\n\n    lastIndex = index + 1;\n    html += escape;\n  }\n\n  return lastIndex !== index\n    ? html + str.substring(lastIndex, index)\n    : html;\n}\n/Readme.md\u0002\n# escape-html\n\n  Escape string for use in HTML\n\n## Example\n\n```js\nvar escape = require('escape-html');\nvar html = escape('foo & bar');\n// -> foo &amp; bar\n```\n\n## Benchmark\n\n```\n$ npm run-script bench\n\n> escape-html@1.0.3 bench nodejs-escape-html\n> node benchmark/index.js\n\n\n  http_parser@1.0\n  node@0.10.33\n  v8@3.14.5.9\n  ares@1.9.0-DEV\n  uv@0.10.29\n  zlib@1.2.3\n  modules@11\n  openssl@1.0.1j\n\n  1 test completed.\n  2 tests completed.\n  3 tests completed.\n\n  no special characters    x 19,435,271 ops/sec ±0.85% (187 runs sampled)\n  single special character x  6,132,421 ops/sec ±0.67% (194 runs sampled)\n  many special characters  x  3,175,826 ops/sec ±0.65% (193 runs sampled)\n```\n\n## License\n\n  MIT/package.json\u0001{\n  \"name\": \"escape-html\",\n  \"description\": \"Escape string for use in HTML\",\n  \"version\": \"1.0.3\",\n  \"license\": \"MIT\",\n  \"keywords\": [\n    \"escape\",\n    \"html\",\n    \"utility\"\n  ],\n  \"repository\": \"component/escape-html\",\n  \"devDependencies\": {\n    \"benchmark\": \"1.0.0\",\n    \"beautify-benchmark\": \"0.2.4\"\n  },\n  \"files\": [\n    \"LICENSE\",\n    \"Readme.md\",\n    \"index.js\"\n  ],\n  \"scripts\": {\n    \"bench\": \"node benchmark/index.js\"\n  }\n}\n/LICENSE\u0004(The MIT License)\n\nCopyright (c) 2012-2013 TJ Holowaychuk\nCopyright (c) 2015 Andreas Lubbe\nCopyright (c) 2015 Tiancheng \"Timothy\" Gu\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/ZXNjYXBlLXN0cmluZy1yZWdleHBAMS4wLjU=",
    "content": "/readme.md\u0002(# escape-string-regexp [![Build Status](https://travis-ci.org/sindresorhus/escape-string-regexp.svg?branch=master)](https://travis-ci.org/sindresorhus/escape-string-regexp)\n\n> Escape RegExp special characters\n\n\n## Install\n\n```\n$ npm install --save escape-string-regexp\n```\n\n\n## Usage\n\n```js\nconst escapeStringRegexp = require('escape-string-regexp');\n\nconst escapedString = escapeStringRegexp('how much $ for a unicorn?');\n//=> 'how much \\$ for a unicorn\\?'\n\nnew RegExp(escapedString);\n```\n\n\n## License\n\nMIT © [Sindre Sorhus](http://sindresorhus.com)\n/license\u0004_The MIT License (MIT)\n\nCopyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n/index.js'use strict';\n\nvar matchOperatorsRe = /[|\\\\{}()[\\]^$+*?.]/g;\n\nmodule.exports = function (str) {\n\tif (typeof str !== 'string') {\n\t\tthrow new TypeError('Expected a string');\n\t}\n\n\treturn str.replace(matchOperatorsRe, '\\\\$&');\n};\n/package.json\u0003\u0017{\n  \"name\": \"escape-string-regexp\",\n  \"version\": \"1.0.5\",\n  \"description\": \"Escape RegExp special characters\",\n  \"license\": \"MIT\",\n  \"repository\": \"sindresorhus/escape-string-regexp\",\n  \"author\": {\n    \"name\": \"Sindre Sorhus\",\n    \"email\": \"sindresorhus@gmail.com\",\n    \"url\": \"sindresorhus.com\"\n  },\n  \"maintainers\": [\n    \"Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)\",\n    \"Joshua Boy Nicolai Appelman <joshua@jbna.nl> (jbna.nl)\"\n  ],\n  \"engines\": {\n    \"node\": \">=0.8.0\"\n  },\n  \"scripts\": {\n    \"test\": \"xo && ava\"\n  },\n  \"files\": [\n    \"index.js\"\n  ],\n  \"keywords\": [\n    \"escape\",\n    \"regex\",\n    \"regexp\",\n    \"re\",\n    \"regular\",\n    \"expression\",\n    \"string\",\n    \"str\",\n    \"special\",\n    \"characters\"\n  ],\n  \"devDependencies\": {\n    \"ava\": \"*\",\n    \"xo\": \"*\"\n  }\n}\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/ZXNjYXBlLXN0cmluZy1yZWdleHBANC4wLjA=",
    "content": "/readme.md\u0004## escape-string-regexp [![Build Status](https://travis-ci.org/sindresorhus/escape-string-regexp.svg?branch=master)](https://travis-ci.org/sindresorhus/escape-string-regexp)\n\n> Escape RegExp special characters\n\n## Install\n\n```\n$ npm install escape-string-regexp\n```\n\n## Usage\n\n```js\nconst escapeStringRegexp = require('escape-string-regexp');\n\nconst escapedString = escapeStringRegexp('How much $ for a 🦄?');\n//=> 'How much \\\\$ for a 🦄\\\\?'\n\nnew RegExp(escapedString);\n```\n\nYou can also use this to escape a string that is inserted into the middle of a regex, for example, into a character class.\n\n---\n\n<div align=\"center\">\n\t<b>\n\t\t<a href=\"https://tidelift.com/subscription/pkg/npm-escape-string-regexp?utm_source=npm-escape-string-regexp&utm_medium=referral&utm_campaign=readme\">Get professional support for this package with a Tidelift subscription</a>\n\t</b>\n\t<br>\n\t<sub>\n\t\tTidelift helps make open source sustainable for maintainers while giving companies<br>assurances about security, maintenance, and licensing for their dependencies.\n\t</sub>\n</div>\n/index.d.ts\u0001/**\nEscape RegExp special characters.\n\nYou can also use this to escape a string that is inserted into the middle of a regex, for example, into a character class.\n\n@example\n```\nimport escapeStringRegexp = require('escape-string-regexp');\n\nconst escapedString = escapeStringRegexp('How much $ for a 🦄?');\n//=> 'How much \\\\$ for a 🦄\\\\?'\n\nnew RegExp(escapedString);\n```\n*/\ndeclare const escapeStringRegexp: (string: string) => string;\n\nexport = escapeStringRegexp;\n/license\u0004]MIT License\n\nCopyright (c) Sindre Sorhus <sindresorhus@gmail.com> (https://sindresorhus.com)\n\nPermission 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:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE 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.\n/index.js\u0001'use strict';\n\nmodule.exports = string => {\n\tif (typeof string !== 'string') {\n\t\tthrow new TypeError('Expected a string');\n\t}\n\n\t// Escape characters with special meaning either inside or outside character sets.\n\t// Use a simple backslash escape when it’s always valid, and a \\unnnn escape when the simpler form would be disallowed by Unicode patterns’ stricter grammar.\n\treturn string\n\t\t.replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&')\n\t\t.replace(/-/g, '\\\\x2d');\n};\n/package.json\u0002{\n\t\"name\": \"escape-string-regexp\",\n\t\"version\": \"4.0.0\",\n\t\"description\": \"Escape RegExp special characters\",\n\t\"license\": \"MIT\",\n\t\"repository\": \"sindresorhus/escape-string-regexp\",\n\t\"funding\": \"https://github.com/sponsors/sindresorhus\",\n\t\"author\": {\n\t\t\"name\": \"Sindre Sorhus\",\n\t\t\"email\": \"sindresorhus@gmail.com\",\n\t\t\"url\": \"https://sindresorhus.com\"\n\t},\n\t\"engines\": {\n\t\t\"node\": \">=10\"\n\t},\n\t\"scripts\": {\n\t\t\"test\": \"xo && ava && tsd\"\n\t},\n\t\"files\": [\n\t\t\"index.js\",\n\t\t\"index.d.ts\"\n\t],\n\t\"keywords\": [\n\t\t\"escape\",\n\t\t\"regex\",\n\t\t\"regexp\",\n\t\t\"regular\",\n\t\t\"expression\",\n\t\t\"string\",\n\t\t\"special\",\n\t\t\"characters\"\n\t],\n\t\"devDependencies\": {\n\t\t\"ava\": \"^1.4.1\",\n\t\t\"tsd\": \"^0.11.0\",\n\t\t\"xo\": \"^0.28.3\"\n\t}\n}\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/ZXNsaW50LXNjb3BlQDcuMS4x",
    "content": "/lib/variable.js\f;/*\n  Copyright (C) 2015 Yusuke Suzuki <utatane.tea@gmail.com>\n\n  Redistribution and use in source and binary forms, with or without\n  modification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n  ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n/**\n * A Variable represents a locally scoped identifier. These include arguments to\n * functions.\n * @constructor Variable\n */\nclass Variable {\n    constructor(name, scope) {\n\n        /**\n         * The variable name, as given in the source code.\n         * @member {string} Variable#name\n         */\n        this.name = name;\n\n        /**\n         * List of defining occurrences of this variable (like in 'var ...'\n         * statements or as parameter), as AST nodes.\n         * @member {espree.Identifier[]} Variable#identifiers\n         */\n        this.identifiers = [];\n\n        /**\n         * List of {@link Reference|references} of this variable (excluding parameter entries)\n         * in its defining scope and all nested scopes. For defining\n         * occurrences only see {@link Variable#defs}.\n         * @member {Reference[]} Variable#references\n         */\n        this.references = [];\n\n        /**\n         * List of defining occurrences of this variable (like in 'var ...'\n         * statements or as parameter), as custom objects.\n         * @member {Definition[]} Variable#defs\n         */\n        this.defs = [];\n\n        this.tainted = false;\n\n        /**\n         * Whether this is a stack variable.\n         * @member {boolean} Variable#stack\n         */\n        this.stack = true;\n\n        /**\n         * Reference to the enclosing Scope.\n         * @member {Scope} Variable#scope\n         */\n        this.scope = scope;\n    }\n}\n\nVariable.CatchClause = \"CatchClause\";\nVariable.Parameter = \"Parameter\";\nVariable.FunctionName = \"FunctionName\";\nVariable.ClassName = \"ClassName\";\nVariable.Variable = \"Variable\";\nVariable.ImportBinding = \"ImportBinding\";\nVariable.ImplicitGlobalVariable = \"ImplicitGlobalVariable\";\n\nexport default Variable;\n\n/* vim: set sw=4 ts=4 et tw=80 : */\n/lib/version.js2const version = \"7.1.1\";\n\nexport default version;\n/lib/reference.js\u0012/*\n  Copyright (C) 2015 Yusuke Suzuki <utatane.tea@gmail.com>\n\n  Redistribution and use in source and binary forms, with or without\n  modification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n  ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\nconst READ = 0x1;\nconst WRITE = 0x2;\nconst RW = READ | WRITE;\n\n/**\n * A Reference represents a single occurrence of an identifier in code.\n * @constructor Reference\n */\nclass Reference {\n    constructor(ident, scope, flag, writeExpr, maybeImplicitGlobal, partial, init) {\n\n        /**\n         * Identifier syntax node.\n         * @member {espreeIdentifier} Reference#identifier\n         */\n        this.identifier = ident;\n\n        /**\n         * Reference to the enclosing Scope.\n         * @member {Scope} Reference#from\n         */\n        this.from = scope;\n\n        /**\n         * Whether the reference comes from a dynamic scope (such as 'eval',\n         * 'with', etc.), and may be trapped by dynamic scopes.\n         * @member {boolean} Reference#tainted\n         */\n        this.tainted = false;\n\n        /**\n         * The variable this reference is resolved with.\n         * @member {Variable} Reference#resolved\n         */\n        this.resolved = null;\n\n        /**\n         * The read-write mode of the reference. (Value is one of {@link\n         * Reference.READ}, {@link Reference.RW}, {@link Reference.WRITE}).\n         * @member {number} Reference#flag\n         * @private\n         */\n        this.flag = flag;\n        if (this.isWrite()) {\n\n            /**\n             * If reference is writeable, this is the tree being written to it.\n             * @member {espreeNode} Reference#writeExpr\n             */\n            this.writeExpr = writeExpr;\n\n            /**\n             * Whether the Reference might refer to a partial value of writeExpr.\n             * @member {boolean} Reference#partial\n             */\n            this.partial = partial;\n\n            /**\n             * Whether the Reference is to write of initialization.\n             * @member {boolean} Reference#init\n             */\n            this.init = init;\n        }\n        this.__maybeImplicitGlobal = maybeImplicitGlobal;\n    }\n\n    /**\n     * Whether the reference is static.\n     * @function Reference#isStatic\n     * @returns {boolean} static\n     */\n    isStatic() {\n        return !this.tainted && this.resolved && this.resolved.scope.isStatic();\n    }\n\n    /**\n     * Whether the reference is writeable.\n     * @function Reference#isWrite\n     * @returns {boolean} write\n     */\n    isWrite() {\n        return !!(this.flag & Reference.WRITE);\n    }\n\n    /**\n     * Whether the reference is readable.\n     * @function Reference#isRead\n     * @returns {boolean} read\n     */\n    isRead() {\n        return !!(this.flag & Reference.READ);\n    }\n\n    /**\n     * Whether the reference is read-only.\n     * @function Reference#isReadOnly\n     * @returns {boolean} read only\n     */\n    isReadOnly() {\n        return this.flag === Reference.READ;\n    }\n\n    /**\n     * Whether the reference is write-only.\n     * @function Reference#isWriteOnly\n     * @returns {boolean} write only\n     */\n    isWriteOnly() {\n        return this.flag === Reference.WRITE;\n    }\n\n    /**\n     * Whether the reference is read-write.\n     * @function Reference#isReadWrite\n     * @returns {boolean} read write\n     */\n    isReadWrite() {\n        return this.flag === Reference.RW;\n    }\n}\n\n/**\n * @constant Reference.READ\n * @private\n */\nReference.READ = READ;\n\n/**\n * @constant Reference.WRITE\n * @private\n */\nReference.WRITE = WRITE;\n\n/**\n * @constant Reference.RW\n * @private\n */\nReference.RW = RW;\n\nexport default Reference;\n\n/* vim: set sw=4 ts=4 et tw=80 : */\n/lib/scope-manager.js\u001d/*\n  Copyright (C) 2015 Yusuke Suzuki <utatane.tea@gmail.com>\n\n  Redistribution and use in source and binary forms, with or without\n  modification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n  ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n/* eslint-disable no-underscore-dangle */\n\nimport {\n    BlockScope,\n    CatchScope,\n    ClassFieldInitializerScope,\n    ClassStaticBlockScope,\n    ClassScope,\n    ForScope,\n    FunctionExpressionNameScope,\n    FunctionScope,\n    GlobalScope,\n    ModuleScope,\n    SwitchScope,\n    WithScope\n} from \"./scope.js\";\nimport assert from \"assert\";\n\n/**\n * @constructor ScopeManager\n */\nclass ScopeManager {\n    constructor(options) {\n        this.scopes = [];\n        this.globalScope = null;\n        this.__nodeToScope = new WeakMap();\n        this.__currentScope = null;\n        this.__options = options;\n        this.__declaredVariables = new WeakMap();\n    }\n\n    __useDirective() {\n        return this.__options.directive;\n    }\n\n    __isOptimistic() {\n        return this.__options.optimistic;\n    }\n\n    __ignoreEval() {\n        return this.__options.ignoreEval;\n    }\n\n    __isNodejsScope() {\n        return this.__options.nodejsScope || this.__options.sourceType === \"commonjs\";\n    }\n\n    isModule() {\n        return this.__options.sourceType === \"module\";\n    }\n\n    isImpliedStrict() {\n        return this.__options.impliedStrict;\n    }\n\n    isStrictModeSupported() {\n        return this.__options.ecmaVersion >= 5;\n    }\n\n    // Returns appropriate scope for this node.\n    __get(node) {\n        return this.__nodeToScope.get(node);\n    }\n\n    /**\n     * Get variables that are declared by the node.\n     *\n     * \"are declared by the node\" means the node is same as `Variable.defs[].node` or `Variable.defs[].parent`.\n     * If the node declares nothing, this method returns an empty array.\n     * CAUTION: This API is experimental. See https://github.com/estools/escope/pull/69 for more details.\n     * @param {Espree.Node} node a node to get.\n     * @returns {Variable[]} variables that declared by the node.\n     */\n    getDeclaredVariables(node) {\n        return this.__declaredVariables.get(node) || [];\n    }\n\n    /**\n     * acquire scope from node.\n     * @function ScopeManager#acquire\n     * @param {Espree.Node} node node for the acquired scope.\n     * @param {?boolean} [inner=false] look up the most inner scope, default value is false.\n     * @returns {Scope?} Scope from node\n     */\n    acquire(node, inner) {\n\n        /**\n         * predicate\n         * @param {Scope} testScope scope to test\n         * @returns {boolean} predicate\n         */\n        function predicate(testScope) {\n            if (testScope.type === \"function\" && testScope.functionExpressionScope) {\n                return false;\n            }\n            return true;\n        }\n\n        const scopes = this.__get(node);\n\n        if (!scopes || scopes.length === 0) {\n            return null;\n        }\n\n        // Heuristic selection from all scopes.\n        // If you would like to get all scopes, please use ScopeManager#acquireAll.\n        if (scopes.length === 1) {\n            return scopes[0];\n        }\n\n        if (inner) {\n            for (let i = scopes.length - 1; i >= 0; --i) {\n                const scope = scopes[i];\n\n                if (predicate(scope)) {\n                    return scope;\n                }\n            }\n        } else {\n            for (let i = 0, iz = scopes.length; i < iz; ++i) {\n                const scope = scopes[i];\n\n                if (predicate(scope)) {\n                    return scope;\n                }\n            }\n        }\n\n        return null;\n    }\n\n    /**\n     * acquire all scopes from node.\n     * @function ScopeManager#acquireAll\n     * @param {Espree.Node} node node for the acquired scope.\n     * @returns {Scopes?} Scope array\n     */\n    acquireAll(node) {\n        return this.__get(node);\n    }\n\n    /**\n     * release the node.\n     * @function ScopeManager#release\n     * @param {Espree.Node} node releasing node.\n     * @param {?boolean} [inner=false] look up the most inner scope, default value is false.\n     * @returns {Scope?} upper scope for the node.\n     */\n    release(node, inner) {\n        const scopes = this.__get(node);\n\n        if (scopes && scopes.length) {\n            const scope = scopes[0].upper;\n\n            if (!scope) {\n                return null;\n            }\n            return this.acquire(scope.block, inner);\n        }\n        return null;\n    }\n\n    attach() { } // eslint-disable-line class-methods-use-this\n\n    detach() { } // eslint-disable-line class-methods-use-this\n\n    __nestScope(scope) {\n        if (scope instanceof GlobalScope) {\n            assert(this.__currentScope === null);\n            this.globalScope = scope;\n        }\n        this.__currentScope = scope;\n        return scope;\n    }\n\n    __nestGlobalScope(node) {\n        return this.__nestScope(new GlobalScope(this, node));\n    }\n\n    __nestBlockScope(node) {\n        return this.__nestScope(new BlockScope(this, this.__currentScope, node));\n    }\n\n    __nestFunctionScope(node, isMethodDefinition) {\n        return this.__nestScope(new FunctionScope(this, this.__currentScope, node, isMethodDefinition));\n    }\n\n    __nestForScope(node) {\n        return this.__nestScope(new ForScope(this, this.__currentScope, node));\n    }\n\n    __nestCatchScope(node) {\n        return this.__nestScope(new CatchScope(this, this.__currentScope, node));\n    }\n\n    __nestWithScope(node) {\n        return this.__nestScope(new WithScope(this, this.__currentScope, node));\n    }\n\n    __nestClassScope(node) {\n        return this.__nestScope(new ClassScope(this, this.__currentScope, node));\n    }\n\n    __nestClassFieldInitializerScope(node) {\n        return this.__nestScope(new ClassFieldInitializerScope(this, this.__currentScope, node));\n    }\n\n    __nestClassStaticBlockScope(node) {\n        return this.__nestScope(new ClassStaticBlockScope(this, this.__currentScope, node));\n    }\n\n    __nestSwitchScope(node) {\n        return this.__nestScope(new SwitchScope(this, this.__currentScope, node));\n    }\n\n    __nestModuleScope(node) {\n        return this.__nestScope(new ModuleScope(this, this.__currentScope, node));\n    }\n\n    __nestFunctionExpressionNameScope(node) {\n        return this.__nestScope(new FunctionExpressionNameScope(this, this.__currentScope, node));\n    }\n\n    __isES6() {\n        return this.__options.ecmaVersion >= 6;\n    }\n}\n\nexport default ScopeManager;\n\n/* vim: set sw=4 ts=4 et tw=80 : */\n/lib/definition.js\u000b$/*\n  Copyright (C) 2015 Yusuke Suzuki <utatane.tea@gmail.com>\n\n  Redistribution and use in source and binary forms, with or without\n  modification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n  ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\nimport Variable from \"./variable.js\";\n\n/**\n * @constructor Definition\n */\nclass Definition {\n    constructor(type, name, node, parent, index, kind) {\n\n        /**\n         * @member {string} Definition#type - type of the occurrence (e.g. \"Parameter\", \"Variable\", ...).\n         */\n        this.type = type;\n\n        /**\n         * @member {espree.Identifier} Definition#name - the identifier AST node of the occurrence.\n         */\n        this.name = name;\n\n        /**\n         * @member {espree.Node} Definition#node - the enclosing node of the identifier.\n         */\n        this.node = node;\n\n        /**\n         * @member {espree.Node?} Definition#parent - the enclosing statement node of the identifier.\n         */\n        this.parent = parent;\n\n        /**\n         * @member {number?} Definition#index - the index in the declaration statement.\n         */\n        this.index = index;\n\n        /**\n         * @member {string?} Definition#kind - the kind of the declaration statement.\n         */\n        this.kind = kind;\n    }\n}\n\n/**\n * @constructor ParameterDefinition\n */\nclass ParameterDefinition extends Definition {\n    constructor(name, node, index, rest) {\n        super(Variable.Parameter, name, node, null, index, null);\n\n        /**\n         * Whether the parameter definition is a part of a rest parameter.\n         * @member {boolean} ParameterDefinition#rest\n         */\n        this.rest = rest;\n    }\n}\n\nexport {\n    ParameterDefinition,\n    Definition\n};\n\n/* vim: set sw=4 ts=4 et tw=80 : */\n/LICENSE\u0005nCopyright JS Foundation and other contributors, https://js.foundation\nCopyright (C) 2012-2013 Yusuke Suzuki (twitter: @Constellation) and other contributors.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n  * Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in the\n    documentation and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\nDIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\nON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\nTHIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n/package.json\u0006{\n  \"name\": \"eslint-scope\",\n  \"description\": \"ECMAScript scope analyzer for ESLint\",\n  \"homepage\": \"http://github.com/eslint/eslint-scope\",\n  \"main\": \"./dist/eslint-scope.cjs\",\n  \"type\": \"module\",\n  \"exports\": {\n    \".\": {\n      \"import\": \"./lib/index.js\",\n      \"require\": \"./dist/eslint-scope.cjs\"\n    },\n    \"./package.json\": \"./package.json\"\n  },\n  \"version\": \"7.1.1\",\n  \"engines\": {\n    \"node\": \"^12.22.0 || ^14.17.0 || >=16.0.0\"\n  },\n  \"repository\": \"eslint/eslint-scope\",\n  \"bugs\": {\n    \"url\": \"https://github.com/eslint/eslint-scope/issues\"\n  },\n  \"license\": \"BSD-2-Clause\",\n  \"scripts\": {\n    \"build\": \"rollup -c\",\n    \"lint\": \"npm run build && node Makefile.js lint\",\n    \"update-version\": \"node tools/update-version.js\",\n    \"test\": \"npm run build && node Makefile.js test\",\n    \"prepublishOnly\": \"npm run update-version && npm run build\",\n    \"generate-release\": \"eslint-generate-release\",\n    \"generate-alpharelease\": \"eslint-generate-prerelease alpha\",\n    \"generate-betarelease\": \"eslint-generate-prerelease beta\",\n    \"generate-rcrelease\": \"eslint-generate-prerelease rc\",\n    \"publish-release\": \"eslint-publish-release\"\n  },\n  \"files\": [\n    \"LICENSE\",\n    \"README.md\",\n    \"lib\",\n    \"dist/eslint-scope.cjs\"\n  ],\n  \"dependencies\": {\n    \"esrecurse\": \"^4.3.0\",\n    \"estraverse\": \"^5.2.0\"\n  },\n  \"devDependencies\": {\n    \"@typescript-eslint/parser\": \"^4.28.1\",\n    \"c8\": \"^7.7.3\",\n    \"chai\": \"^4.3.4\",\n    \"eslint\": \"^7.29.0\",\n    \"eslint-config-eslint\": \"^7.0.0\",\n    \"eslint-plugin-jsdoc\": \"^35.4.1\",\n    \"eslint-plugin-node\": \"^11.1.0\",\n    \"eslint-release\": \"^3.2.0\",\n    \"eslint-visitor-keys\": \"^3.3.0\",\n    \"espree\": \"^9.3.1\",\n    \"mocha\": \"^9.0.1\",\n    \"npm-license\": \"^0.3.3\",\n    \"rollup\": \"^2.52.7\",\n    \"shelljs\": \"^0.8.4\",\n    \"typescript\": \"^4.3.5\"\n  }\n}\n/README.md\u0006# ESLint Scope\n\nESLint Scope is the [ECMAScript](http://www.ecma-international.org/publications/standards/Ecma-262.htm) scope analyzer used in ESLint. It is a fork of [escope](http://github.com/estools/escope).\n\n## Install\n\n```\nnpm i eslint-scope --save\n```\n\n## 📖 Usage\n\nTo use in an ESM file:\n\n```js\nimport * as eslintScope from 'eslint-scope';\n```\n\nTo use in a CommonJS file:\n\n```js\nconst eslintScope = require('eslint-scope');\n```\n\nExample:\n\n```js\nimport * as eslintScope from 'eslint-scope';\nimport * as espree from 'espree';\nimport estraverse from 'estraverse';\n\nconst ast = espree.parse(code, { range: true });\nconst scopeManager = eslintScope.analyze(ast);\n\nconst currentScope = scopeManager.acquire(ast);   // global scope\n\nestraverse.traverse(ast, {\n    enter (node, parent) {\n        // do stuff\n\n        if (/Function/.test(node.type)) {\n            currentScope = scopeManager.acquire(node);  // get current function scope\n        }\n    },\n    leave(node, parent) {\n        if (/Function/.test(node.type)) {\n            currentScope = currentScope.upper;  // set to parent scope\n        }\n\n        // do stuff\n    }\n});\n```\n\n## Contributing\n\nIssues and pull requests will be triaged and responded to as quickly as possible. We operate under the [ESLint Contributor Guidelines](http://eslint.org/docs/developer-guide/contributing), so please be sure to read them before contributing. If you're not sure where to dig in, check out the [issues](https://github.com/eslint/eslint-scope/issues).\n\n## Build Commands\n\n* `npm test` - run all linting and tests\n* `npm run lint` - run all linting\n\n## License\n\nESLint Scope is licensed under a permissive BSD 2-clause license.\n/lib/scope.jsWY/*\n  Copyright (C) 2015 Yusuke Suzuki <utatane.tea@gmail.com>\n\n  Redistribution and use in source and binary forms, with or without\n  modification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n  ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n/* eslint-disable no-underscore-dangle */\n/* eslint-disable no-undefined */\n\nimport estraverse from \"estraverse\";\n\nimport Reference from \"./reference.js\";\nimport Variable from \"./variable.js\";\nimport { Definition } from \"./definition.js\";\nimport assert from \"assert\";\n\nconst { Syntax } = estraverse;\n\n/**\n * Test if scope is struct\n * @param {Scope} scope scope\n * @param {Block} block block\n * @param {boolean} isMethodDefinition is method definition\n * @param {boolean} useDirective use directive\n * @returns {boolean} is strict scope\n */\nfunction isStrictScope(scope, block, isMethodDefinition, useDirective) {\n    let body;\n\n    // When upper scope is exists and strict, inner scope is also strict.\n    if (scope.upper && scope.upper.isStrict) {\n        return true;\n    }\n\n    if (isMethodDefinition) {\n        return true;\n    }\n\n    if (scope.type === \"class\" || scope.type === \"module\") {\n        return true;\n    }\n\n    if (scope.type === \"block\" || scope.type === \"switch\") {\n        return false;\n    }\n\n    if (scope.type === \"function\") {\n        if (block.type === Syntax.ArrowFunctionExpression && block.body.type !== Syntax.BlockStatement) {\n            return false;\n        }\n\n        if (block.type === Syntax.Program) {\n            body = block;\n        } else {\n            body = block.body;\n        }\n\n        if (!body) {\n            return false;\n        }\n    } else if (scope.type === \"global\") {\n        body = block;\n    } else {\n        return false;\n    }\n\n    // Search 'use strict' directive.\n    if (useDirective) {\n        for (let i = 0, iz = body.body.length; i < iz; ++i) {\n            const stmt = body.body[i];\n\n            if (stmt.type !== Syntax.DirectiveStatement) {\n                break;\n            }\n            if (stmt.raw === \"\\\"use strict\\\"\" || stmt.raw === \"'use strict'\") {\n                return true;\n            }\n        }\n    } else {\n        for (let i = 0, iz = body.body.length; i < iz; ++i) {\n            const stmt = body.body[i];\n\n            if (stmt.type !== Syntax.ExpressionStatement) {\n                break;\n            }\n            const expr = stmt.expression;\n\n            if (expr.type !== Syntax.Literal || typeof expr.value !== \"string\") {\n                break;\n            }\n            if (expr.raw !== null && expr.raw !== undefined) {\n                if (expr.raw === \"\\\"use strict\\\"\" || expr.raw === \"'use strict'\") {\n                    return true;\n                }\n            } else {\n                if (expr.value === \"use strict\") {\n                    return true;\n                }\n            }\n        }\n    }\n    return false;\n}\n\n/**\n * Register scope\n * @param {ScopeManager} scopeManager scope manager\n * @param {Scope} scope scope\n * @returns {void}\n */\nfunction registerScope(scopeManager, scope) {\n    scopeManager.scopes.push(scope);\n\n    const scopes = scopeManager.__nodeToScope.get(scope.block);\n\n    if (scopes) {\n        scopes.push(scope);\n    } else {\n        scopeManager.__nodeToScope.set(scope.block, [scope]);\n    }\n}\n\n/**\n * Should be statically\n * @param {Object} def def\n * @returns {boolean} should be statically\n */\nfunction shouldBeStatically(def) {\n    return (\n        (def.type === Variable.ClassName) ||\n        (def.type === Variable.Variable && def.parent.kind !== \"var\")\n    );\n}\n\n/**\n * @constructor Scope\n */\nclass Scope {\n    constructor(scopeManager, type, upperScope, block, isMethodDefinition) {\n\n        /**\n         * One of \"global\", \"module\", \"function\", \"function-expression-name\", \"block\", \"switch\", \"catch\", \"with\", \"for\",\n         * \"class\", \"class-field-initializer\", \"class-static-block\".\n         * @member {string} Scope#type\n         */\n        this.type = type;\n\n        /**\n         * The scoped {@link Variable}s of this scope, as <code>{ Variable.name\n         * : Variable }</code>.\n         * @member {Map} Scope#set\n         */\n        this.set = new Map();\n\n        /**\n         * The tainted variables of this scope, as <code>{ Variable.name :\n         * boolean }</code>.\n         * @member {Map} Scope#taints */\n        this.taints = new Map();\n\n        /**\n         * Generally, through the lexical scoping of JS you can always know\n         * which variable an identifier in the source code refers to. There are\n         * a few exceptions to this rule. With 'global' and 'with' scopes you\n         * can only decide at runtime which variable a reference refers to.\n         * Moreover, if 'eval()' is used in a scope, it might introduce new\n         * bindings in this or its parent scopes.\n         * All those scopes are considered 'dynamic'.\n         * @member {boolean} Scope#dynamic\n         */\n        this.dynamic = this.type === \"global\" || this.type === \"with\";\n\n        /**\n         * A reference to the scope-defining syntax node.\n         * @member {espree.Node} Scope#block\n         */\n        this.block = block;\n\n        /**\n         * The {@link Reference|references} that are not resolved with this scope.\n         * @member {Reference[]} Scope#through\n         */\n        this.through = [];\n\n        /**\n         * The scoped {@link Variable}s of this scope. In the case of a\n         * 'function' scope this includes the automatic argument <em>arguments</em> as\n         * its first element, as well as all further formal arguments.\n         * @member {Variable[]} Scope#variables\n         */\n        this.variables = [];\n\n        /**\n         * Any variable {@link Reference|reference} found in this scope. This\n         * includes occurrences of local variables as well as variables from\n         * parent scopes (including the global scope). For local variables\n         * this also includes defining occurrences (like in a 'var' statement).\n         * In a 'function' scope this does not include the occurrences of the\n         * formal parameter in the parameter list.\n         * @member {Reference[]} Scope#references\n         */\n        this.references = [];\n\n        /**\n         * For 'global' and 'function' scopes, this is a self-reference. For\n         * other scope types this is the <em>variableScope</em> value of the\n         * parent scope.\n         * @member {Scope} Scope#variableScope\n         */\n        this.variableScope =\n            this.type === \"global\" ||\n            this.type === \"module\" ||\n            this.type === \"function\" ||\n            this.type === \"class-field-initializer\" ||\n            this.type === \"class-static-block\"\n                ? this\n                : upperScope.variableScope;\n\n        /**\n         * Whether this scope is created by a FunctionExpression.\n         * @member {boolean} Scope#functionExpressionScope\n         */\n        this.functionExpressionScope = false;\n\n        /**\n         * Whether this is a scope that contains an 'eval()' invocation.\n         * @member {boolean} Scope#directCallToEvalScope\n         */\n        this.directCallToEvalScope = false;\n\n        /**\n         * @member {boolean} Scope#thisFound\n         */\n        this.thisFound = false;\n\n        this.__left = [];\n\n        /**\n         * Reference to the parent {@link Scope|scope}.\n         * @member {Scope} Scope#upper\n         */\n        this.upper = upperScope;\n\n        /**\n         * Whether 'use strict' is in effect in this scope.\n         * @member {boolean} Scope#isStrict\n         */\n        this.isStrict = scopeManager.isStrictModeSupported()\n            ? isStrictScope(this, block, isMethodDefinition, scopeManager.__useDirective())\n            : false;\n\n        /**\n         * List of nested {@link Scope}s.\n         * @member {Scope[]} Scope#childScopes\n         */\n        this.childScopes = [];\n        if (this.upper) {\n            this.upper.childScopes.push(this);\n        }\n\n        this.__declaredVariables = scopeManager.__declaredVariables;\n\n        registerScope(scopeManager, this);\n    }\n\n    __shouldStaticallyClose(scopeManager) {\n        return (!this.dynamic || scopeManager.__isOptimistic());\n    }\n\n    __shouldStaticallyCloseForGlobal(ref) {\n\n        // On global scope, let/const/class declarations should be resolved statically.\n        const name = ref.identifier.name;\n\n        if (!this.set.has(name)) {\n            return false;\n        }\n\n        const variable = this.set.get(name);\n        const defs = variable.defs;\n\n        return defs.length > 0 && defs.every(shouldBeStatically);\n    }\n\n    __staticCloseRef(ref) {\n        if (!this.__resolve(ref)) {\n            this.__delegateToUpperScope(ref);\n        }\n    }\n\n    __dynamicCloseRef(ref) {\n\n        // notify all names are through to global\n        let current = this;\n\n        do {\n            current.through.push(ref);\n            current = current.upper;\n        } while (current);\n    }\n\n    __globalCloseRef(ref) {\n\n        // let/const/class declarations should be resolved statically.\n        // others should be resolved dynamically.\n        if (this.__shouldStaticallyCloseForGlobal(ref)) {\n            this.__staticCloseRef(ref);\n        } else {\n            this.__dynamicCloseRef(ref);\n        }\n    }\n\n    __close(scopeManager) {\n        let closeRef;\n\n        if (this.__shouldStaticallyClose(scopeManager)) {\n            closeRef = this.__staticCloseRef;\n        } else if (this.type !== \"global\") {\n            closeRef = this.__dynamicCloseRef;\n        } else {\n            closeRef = this.__globalCloseRef;\n        }\n\n        // Try Resolving all references in this scope.\n        for (let i = 0, iz = this.__left.length; i < iz; ++i) {\n            const ref = this.__left[i];\n\n            closeRef.call(this, ref);\n        }\n        this.__left = null;\n\n        return this.upper;\n    }\n\n    // To override by function scopes.\n    // References in default parameters isn't resolved to variables which are in their function body.\n    __isValidResolution(ref, variable) { // eslint-disable-line class-methods-use-this, no-unused-vars\n        return true;\n    }\n\n    __resolve(ref) {\n        const name = ref.identifier.name;\n\n        if (!this.set.has(name)) {\n            return false;\n        }\n        const variable = this.set.get(name);\n\n        if (!this.__isValidResolution(ref, variable)) {\n            return false;\n        }\n        variable.references.push(ref);\n        variable.stack = variable.stack && ref.from.variableScope === this.variableScope;\n        if (ref.tainted) {\n            variable.tainted = true;\n            this.taints.set(variable.name, true);\n        }\n        ref.resolved = variable;\n\n        return true;\n    }\n\n    __delegateToUpperScope(ref) {\n        if (this.upper) {\n            this.upper.__left.push(ref);\n        }\n        this.through.push(ref);\n    }\n\n    __addDeclaredVariablesOfNode(variable, node) {\n        if (node === null || node === undefined) {\n            return;\n        }\n\n        let variables = this.__declaredVariables.get(node);\n\n        if (variables === null || variables === undefined) {\n            variables = [];\n            this.__declaredVariables.set(node, variables);\n        }\n        if (variables.indexOf(variable) === -1) {\n            variables.push(variable);\n        }\n    }\n\n    __defineGeneric(name, set, variables, node, def) {\n        let variable;\n\n        variable = set.get(name);\n        if (!variable) {\n            variable = new Variable(name, this);\n            set.set(name, variable);\n            variables.push(variable);\n        }\n\n        if (def) {\n            variable.defs.push(def);\n            this.__addDeclaredVariablesOfNode(variable, def.node);\n            this.__addDeclaredVariablesOfNode(variable, def.parent);\n        }\n        if (node) {\n            variable.identifiers.push(node);\n        }\n    }\n\n    __define(node, def) {\n        if (node && node.type === Syntax.Identifier) {\n            this.__defineGeneric(\n                node.name,\n                this.set,\n                this.variables,\n                node,\n                def\n            );\n        }\n    }\n\n    __referencing(node, assign, writeExpr, maybeImplicitGlobal, partial, init) {\n\n        // because Array element may be null\n        if (!node || node.type !== Syntax.Identifier) {\n            return;\n        }\n\n        // Specially handle like `this`.\n        if (node.name === \"super\") {\n            return;\n        }\n\n        const ref = new Reference(node, this, assign || Reference.READ, writeExpr, maybeImplicitGlobal, !!partial, !!init);\n\n        this.references.push(ref);\n        this.__left.push(ref);\n    }\n\n    __detectEval() {\n        let current = this;\n\n        this.directCallToEvalScope = true;\n        do {\n            current.dynamic = true;\n            current = current.upper;\n        } while (current);\n    }\n\n    __detectThis() {\n        this.thisFound = true;\n    }\n\n    __isClosed() {\n        return this.__left === null;\n    }\n\n    /**\n     * returns resolved {Reference}\n     * @function Scope#resolve\n     * @param {Espree.Identifier} ident identifier to be resolved.\n     * @returns {Reference} reference\n     */\n    resolve(ident) {\n        let ref, i, iz;\n\n        assert(this.__isClosed(), \"Scope should be closed.\");\n        assert(ident.type === Syntax.Identifier, \"Target should be identifier.\");\n        for (i = 0, iz = this.references.length; i < iz; ++i) {\n            ref = this.references[i];\n            if (ref.identifier === ident) {\n                return ref;\n            }\n        }\n        return null;\n    }\n\n    /**\n     * returns this scope is static\n     * @function Scope#isStatic\n     * @returns {boolean} static\n     */\n    isStatic() {\n        return !this.dynamic;\n    }\n\n    /**\n     * returns this scope has materialized arguments\n     * @function Scope#isArgumentsMaterialized\n     * @returns {boolean} arguemnts materialized\n     */\n    isArgumentsMaterialized() { // eslint-disable-line class-methods-use-this\n        return true;\n    }\n\n    /**\n     * returns this scope has materialized `this` reference\n     * @function Scope#isThisMaterialized\n     * @returns {boolean} this materialized\n     */\n    isThisMaterialized() { // eslint-disable-line class-methods-use-this\n        return true;\n    }\n\n    isUsedName(name) {\n        if (this.set.has(name)) {\n            return true;\n        }\n        for (let i = 0, iz = this.through.length; i < iz; ++i) {\n            if (this.through[i].identifier.name === name) {\n                return true;\n            }\n        }\n        return false;\n    }\n}\n\nclass GlobalScope extends Scope {\n    constructor(scopeManager, block) {\n        super(scopeManager, \"global\", null, block, false);\n        this.implicit = {\n            set: new Map(),\n            variables: [],\n\n            /**\n             * List of {@link Reference}s that are left to be resolved (i.e. which\n             * need to be linked to the variable they refer to).\n             * @member {Reference[]} Scope#implicit#left\n             */\n            left: []\n        };\n    }\n\n    __close(scopeManager) {\n        const implicit = [];\n\n        for (let i = 0, iz = this.__left.length; i < iz; ++i) {\n            const ref = this.__left[i];\n\n            if (ref.__maybeImplicitGlobal && !this.set.has(ref.identifier.name)) {\n                implicit.push(ref.__maybeImplicitGlobal);\n            }\n        }\n\n        // create an implicit global variable from assignment expression\n        for (let i = 0, iz = implicit.length; i < iz; ++i) {\n            const info = implicit[i];\n\n            this.__defineImplicit(info.pattern,\n                new Definition(\n                    Variable.ImplicitGlobalVariable,\n                    info.pattern,\n                    info.node,\n                    null,\n                    null,\n                    null\n                ));\n\n        }\n\n        this.implicit.left = this.__left;\n\n        return super.__close(scopeManager);\n    }\n\n    __defineImplicit(node, def) {\n        if (node && node.type === Syntax.Identifier) {\n            this.__defineGeneric(\n                node.name,\n                this.implicit.set,\n                this.implicit.variables,\n                node,\n                def\n            );\n        }\n    }\n}\n\nclass ModuleScope extends Scope {\n    constructor(scopeManager, upperScope, block) {\n        super(scopeManager, \"module\", upperScope, block, false);\n    }\n}\n\nclass FunctionExpressionNameScope extends Scope {\n    constructor(scopeManager, upperScope, block) {\n        super(scopeManager, \"function-expression-name\", upperScope, block, false);\n        this.__define(block.id,\n            new Definition(\n                Variable.FunctionName,\n                block.id,\n                block,\n                null,\n                null,\n                null\n            ));\n        this.functionExpressionScope = true;\n    }\n}\n\nclass CatchScope extends Scope {\n    constructor(scopeManager, upperScope, block) {\n        super(scopeManager, \"catch\", upperScope, block, false);\n    }\n}\n\nclass WithScope extends Scope {\n    constructor(scopeManager, upperScope, block) {\n        super(scopeManager, \"with\", upperScope, block, false);\n    }\n\n    __close(scopeManager) {\n        if (this.__shouldStaticallyClose(scopeManager)) {\n            return super.__close(scopeManager);\n        }\n\n        for (let i = 0, iz = this.__left.length; i < iz; ++i) {\n            const ref = this.__left[i];\n\n            ref.tainted = true;\n            this.__delegateToUpperScope(ref);\n        }\n        this.__left = null;\n\n        return this.upper;\n    }\n}\n\nclass BlockScope extends Scope {\n    constructor(scopeManager, upperScope, block) {\n        super(scopeManager, \"block\", upperScope, block, false);\n    }\n}\n\nclass SwitchScope extends Scope {\n    constructor(scopeManager, upperScope, block) {\n        super(scopeManager, \"switch\", upperScope, block, false);\n    }\n}\n\nclass FunctionScope extends Scope {\n    constructor(scopeManager, upperScope, block, isMethodDefinition) {\n        super(scopeManager, \"function\", upperScope, block, isMethodDefinition);\n\n        // section 9.2.13, FunctionDeclarationInstantiation.\n        // NOTE Arrow functions never have an arguments objects.\n        if (this.block.type !== Syntax.ArrowFunctionExpression) {\n            this.__defineArguments();\n        }\n    }\n\n    isArgumentsMaterialized() {\n\n        // TODO(Constellation)\n        // We can more aggressive on this condition like this.\n        //\n        // function t() {\n        //     // arguments of t is always hidden.\n        //     function arguments() {\n        //     }\n        // }\n        if (this.block.type === Syntax.ArrowFunctionExpression) {\n            return false;\n        }\n\n        if (!this.isStatic()) {\n            return true;\n        }\n\n        const variable = this.set.get(\"arguments\");\n\n        assert(variable, \"Always have arguments variable.\");\n        return variable.tainted || variable.references.length !== 0;\n    }\n\n    isThisMaterialized() {\n        if (!this.isStatic()) {\n            return true;\n        }\n        return this.thisFound;\n    }\n\n    __defineArguments() {\n        this.__defineGeneric(\n            \"arguments\",\n            this.set,\n            this.variables,\n            null,\n            null\n        );\n        this.taints.set(\"arguments\", true);\n    }\n\n    // References in default parameters isn't resolved to variables which are in their function body.\n    //     const x = 1\n    //     function f(a = x) { // This `x` is resolved to the `x` in the outer scope.\n    //         const x = 2\n    //         console.log(a)\n    //     }\n    __isValidResolution(ref, variable) {\n\n        // If `options.nodejsScope` is true, `this.block` becomes a Program node.\n        if (this.block.type === \"Program\") {\n            return true;\n        }\n\n        const bodyStart = this.block.body.range[0];\n\n        // It's invalid resolution in the following case:\n        return !(\n            variable.scope === this &&\n            ref.identifier.range[0] < bodyStart && // the reference is in the parameter part.\n            variable.defs.every(d => d.name.range[0] >= bodyStart) // the variable is in the body.\n        );\n    }\n}\n\nclass ForScope extends Scope {\n    constructor(scopeManager, upperScope, block) {\n        super(scopeManager, \"for\", upperScope, block, false);\n    }\n}\n\nclass ClassScope extends Scope {\n    constructor(scopeManager, upperScope, block) {\n        super(scopeManager, \"class\", upperScope, block, false);\n    }\n}\n\nclass ClassFieldInitializerScope extends Scope {\n    constructor(scopeManager, upperScope, block) {\n        super(scopeManager, \"class-field-initializer\", upperScope, block, true);\n    }\n}\n\nclass ClassStaticBlockScope extends Scope {\n    constructor(scopeManager, upperScope, block) {\n        super(scopeManager, \"class-static-block\", upperScope, block, true);\n    }\n}\n\nexport {\n    Scope,\n    GlobalScope,\n    ModuleScope,\n    FunctionExpressionNameScope,\n    CatchScope,\n    WithScope,\n    BlockScope,\n    SwitchScope,\n    FunctionScope,\n    ForScope,\n    ClassScope,\n    ClassFieldInitializerScope,\n    ClassStaticBlockScope\n};\n\n/* vim: set sw=4 ts=4 et tw=80 : */\n/dist/eslint-scope.cjs\u0000\u0001\u000e'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar assert = require('assert');\nvar estraverse = require('estraverse');\nvar esrecurse = require('esrecurse');\n\nfunction _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\nvar assert__default = /*#__PURE__*/_interopDefaultLegacy(assert);\nvar estraverse__default = /*#__PURE__*/_interopDefaultLegacy(estraverse);\nvar esrecurse__default = /*#__PURE__*/_interopDefaultLegacy(esrecurse);\n\n/*\n  Copyright (C) 2015 Yusuke Suzuki <utatane.tea@gmail.com>\n\n  Redistribution and use in source and binary forms, with or without\n  modification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n  ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\nconst READ = 0x1;\nconst WRITE = 0x2;\nconst RW = READ | WRITE;\n\n/**\n * A Reference represents a single occurrence of an identifier in code.\n * @constructor Reference\n */\nclass Reference {\n    constructor(ident, scope, flag, writeExpr, maybeImplicitGlobal, partial, init) {\n\n        /**\n         * Identifier syntax node.\n         * @member {espreeIdentifier} Reference#identifier\n         */\n        this.identifier = ident;\n\n        /**\n         * Reference to the enclosing Scope.\n         * @member {Scope} Reference#from\n         */\n        this.from = scope;\n\n        /**\n         * Whether the reference comes from a dynamic scope (such as 'eval',\n         * 'with', etc.), and may be trapped by dynamic scopes.\n         * @member {boolean} Reference#tainted\n         */\n        this.tainted = false;\n\n        /**\n         * The variable this reference is resolved with.\n         * @member {Variable} Reference#resolved\n         */\n        this.resolved = null;\n\n        /**\n         * The read-write mode of the reference. (Value is one of {@link\n         * Reference.READ}, {@link Reference.RW}, {@link Reference.WRITE}).\n         * @member {number} Reference#flag\n         * @private\n         */\n        this.flag = flag;\n        if (this.isWrite()) {\n\n            /**\n             * If reference is writeable, this is the tree being written to it.\n             * @member {espreeNode} Reference#writeExpr\n             */\n            this.writeExpr = writeExpr;\n\n            /**\n             * Whether the Reference might refer to a partial value of writeExpr.\n             * @member {boolean} Reference#partial\n             */\n            this.partial = partial;\n\n            /**\n             * Whether the Reference is to write of initialization.\n             * @member {boolean} Reference#init\n             */\n            this.init = init;\n        }\n        this.__maybeImplicitGlobal = maybeImplicitGlobal;\n    }\n\n    /**\n     * Whether the reference is static.\n     * @function Reference#isStatic\n     * @returns {boolean} static\n     */\n    isStatic() {\n        return !this.tainted && this.resolved && this.resolved.scope.isStatic();\n    }\n\n    /**\n     * Whether the reference is writeable.\n     * @function Reference#isWrite\n     * @returns {boolean} write\n     */\n    isWrite() {\n        return !!(this.flag & Reference.WRITE);\n    }\n\n    /**\n     * Whether the reference is readable.\n     * @function Reference#isRead\n     * @returns {boolean} read\n     */\n    isRead() {\n        return !!(this.flag & Reference.READ);\n    }\n\n    /**\n     * Whether the reference is read-only.\n     * @function Reference#isReadOnly\n     * @returns {boolean} read only\n     */\n    isReadOnly() {\n        return this.flag === Reference.READ;\n    }\n\n    /**\n     * Whether the reference is write-only.\n     * @function Reference#isWriteOnly\n     * @returns {boolean} write only\n     */\n    isWriteOnly() {\n        return this.flag === Reference.WRITE;\n    }\n\n    /**\n     * Whether the reference is read-write.\n     * @function Reference#isReadWrite\n     * @returns {boolean} read write\n     */\n    isReadWrite() {\n        return this.flag === Reference.RW;\n    }\n}\n\n/**\n * @constant Reference.READ\n * @private\n */\nReference.READ = READ;\n\n/**\n * @constant Reference.WRITE\n * @private\n */\nReference.WRITE = WRITE;\n\n/**\n * @constant Reference.RW\n * @private\n */\nReference.RW = RW;\n\n/* vim: set sw=4 ts=4 et tw=80 : */\n\n/*\n  Copyright (C) 2015 Yusuke Suzuki <utatane.tea@gmail.com>\n\n  Redistribution and use in source and binary forms, with or without\n  modification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n  ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n/**\n * A Variable represents a locally scoped identifier. These include arguments to\n * functions.\n * @constructor Variable\n */\nclass Variable {\n    constructor(name, scope) {\n\n        /**\n         * The variable name, as given in the source code.\n         * @member {string} Variable#name\n         */\n        this.name = name;\n\n        /**\n         * List of defining occurrences of this variable (like in 'var ...'\n         * statements or as parameter), as AST nodes.\n         * @member {espree.Identifier[]} Variable#identifiers\n         */\n        this.identifiers = [];\n\n        /**\n         * List of {@link Reference|references} of this variable (excluding parameter entries)\n         * in its defining scope and all nested scopes. For defining\n         * occurrences only see {@link Variable#defs}.\n         * @member {Reference[]} Variable#references\n         */\n        this.references = [];\n\n        /**\n         * List of defining occurrences of this variable (like in 'var ...'\n         * statements or as parameter), as custom objects.\n         * @member {Definition[]} Variable#defs\n         */\n        this.defs = [];\n\n        this.tainted = false;\n\n        /**\n         * Whether this is a stack variable.\n         * @member {boolean} Variable#stack\n         */\n        this.stack = true;\n\n        /**\n         * Reference to the enclosing Scope.\n         * @member {Scope} Variable#scope\n         */\n        this.scope = scope;\n    }\n}\n\nVariable.CatchClause = \"CatchClause\";\nVariable.Parameter = \"Parameter\";\nVariable.FunctionName = \"FunctionName\";\nVariable.ClassName = \"ClassName\";\nVariable.Variable = \"Variable\";\nVariable.ImportBinding = \"ImportBinding\";\nVariable.ImplicitGlobalVariable = \"ImplicitGlobalVariable\";\n\n/* vim: set sw=4 ts=4 et tw=80 : */\n\n/*\n  Copyright (C) 2015 Yusuke Suzuki <utatane.tea@gmail.com>\n\n  Redistribution and use in source and binary forms, with or without\n  modification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n  ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n/**\n * @constructor Definition\n */\nclass Definition {\n    constructor(type, name, node, parent, index, kind) {\n\n        /**\n         * @member {string} Definition#type - type of the occurrence (e.g. \"Parameter\", \"Variable\", ...).\n         */\n        this.type = type;\n\n        /**\n         * @member {espree.Identifier} Definition#name - the identifier AST node of the occurrence.\n         */\n        this.name = name;\n\n        /**\n         * @member {espree.Node} Definition#node - the enclosing node of the identifier.\n         */\n        this.node = node;\n\n        /**\n         * @member {espree.Node?} Definition#parent - the enclosing statement node of the identifier.\n         */\n        this.parent = parent;\n\n        /**\n         * @member {number?} Definition#index - the index in the declaration statement.\n         */\n        this.index = index;\n\n        /**\n         * @member {string?} Definition#kind - the kind of the declaration statement.\n         */\n        this.kind = kind;\n    }\n}\n\n/**\n * @constructor ParameterDefinition\n */\nclass ParameterDefinition extends Definition {\n    constructor(name, node, index, rest) {\n        super(Variable.Parameter, name, node, null, index, null);\n\n        /**\n         * Whether the parameter definition is a part of a rest parameter.\n         * @member {boolean} ParameterDefinition#rest\n         */\n        this.rest = rest;\n    }\n}\n\n/* vim: set sw=4 ts=4 et tw=80 : */\n\n/*\n  Copyright (C) 2015 Yusuke Suzuki <utatane.tea@gmail.com>\n\n  Redistribution and use in source and binary forms, with or without\n  modification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n  ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\nconst { Syntax: Syntax$2 } = estraverse__default[\"default\"];\n\n/**\n * Test if scope is struct\n * @param {Scope} scope scope\n * @param {Block} block block\n * @param {boolean} isMethodDefinition is method definition\n * @param {boolean} useDirective use directive\n * @returns {boolean} is strict scope\n */\nfunction isStrictScope(scope, block, isMethodDefinition, useDirective) {\n    let body;\n\n    // When upper scope is exists and strict, inner scope is also strict.\n    if (scope.upper && scope.upper.isStrict) {\n        return true;\n    }\n\n    if (isMethodDefinition) {\n        return true;\n    }\n\n    if (scope.type === \"class\" || scope.type === \"module\") {\n        return true;\n    }\n\n    if (scope.type === \"block\" || scope.type === \"switch\") {\n        return false;\n    }\n\n    if (scope.type === \"function\") {\n        if (block.type === Syntax$2.ArrowFunctionExpression && block.body.type !== Syntax$2.BlockStatement) {\n            return false;\n        }\n\n        if (block.type === Syntax$2.Program) {\n            body = block;\n        } else {\n            body = block.body;\n        }\n\n        if (!body) {\n            return false;\n        }\n    } else if (scope.type === \"global\") {\n        body = block;\n    } else {\n        return false;\n    }\n\n    // Search 'use strict' directive.\n    if (useDirective) {\n        for (let i = 0, iz = body.body.length; i < iz; ++i) {\n            const stmt = body.body[i];\n\n            if (stmt.type !== Syntax$2.DirectiveStatement) {\n                break;\n            }\n            if (stmt.raw === \"\\\"use strict\\\"\" || stmt.raw === \"'use strict'\") {\n                return true;\n            }\n        }\n    } else {\n        for (let i = 0, iz = body.body.length; i < iz; ++i) {\n            const stmt = body.body[i];\n\n            if (stmt.type !== Syntax$2.ExpressionStatement) {\n                break;\n            }\n            const expr = stmt.expression;\n\n            if (expr.type !== Syntax$2.Literal || typeof expr.value !== \"string\") {\n                break;\n            }\n            if (expr.raw !== null && expr.raw !== undefined) {\n                if (expr.raw === \"\\\"use strict\\\"\" || expr.raw === \"'use strict'\") {\n                    return true;\n                }\n            } else {\n                if (expr.value === \"use strict\") {\n                    return true;\n                }\n            }\n        }\n    }\n    return false;\n}\n\n/**\n * Register scope\n * @param {ScopeManager} scopeManager scope manager\n * @param {Scope} scope scope\n * @returns {void}\n */\nfunction registerScope(scopeManager, scope) {\n    scopeManager.scopes.push(scope);\n\n    const scopes = scopeManager.__nodeToScope.get(scope.block);\n\n    if (scopes) {\n        scopes.push(scope);\n    } else {\n        scopeManager.__nodeToScope.set(scope.block, [scope]);\n    }\n}\n\n/**\n * Should be statically\n * @param {Object} def def\n * @returns {boolean} should be statically\n */\nfunction shouldBeStatically(def) {\n    return (\n        (def.type === Variable.ClassName) ||\n        (def.type === Variable.Variable && def.parent.kind !== \"var\")\n    );\n}\n\n/**\n * @constructor Scope\n */\nclass Scope {\n    constructor(scopeManager, type, upperScope, block, isMethodDefinition) {\n\n        /**\n         * One of \"global\", \"module\", \"function\", \"function-expression-name\", \"block\", \"switch\", \"catch\", \"with\", \"for\",\n         * \"class\", \"class-field-initializer\", \"class-static-block\".\n         * @member {string} Scope#type\n         */\n        this.type = type;\n\n        /**\n         * The scoped {@link Variable}s of this scope, as <code>{ Variable.name\n         * : Variable }</code>.\n         * @member {Map} Scope#set\n         */\n        this.set = new Map();\n\n        /**\n         * The tainted variables of this scope, as <code>{ Variable.name :\n         * boolean }</code>.\n         * @member {Map} Scope#taints */\n        this.taints = new Map();\n\n        /**\n         * Generally, through the lexical scoping of JS you can always know\n         * which variable an identifier in the source code refers to. There are\n         * a few exceptions to this rule. With 'global' and 'with' scopes you\n         * can only decide at runtime which variable a reference refers to.\n         * Moreover, if 'eval()' is used in a scope, it might introduce new\n         * bindings in this or its parent scopes.\n         * All those scopes are considered 'dynamic'.\n         * @member {boolean} Scope#dynamic\n         */\n        this.dynamic = this.type === \"global\" || this.type === \"with\";\n\n        /**\n         * A reference to the scope-defining syntax node.\n         * @member {espree.Node} Scope#block\n         */\n        this.block = block;\n\n        /**\n         * The {@link Reference|references} that are not resolved with this scope.\n         * @member {Reference[]} Scope#through\n         */\n        this.through = [];\n\n        /**\n         * The scoped {@link Variable}s of this scope. In the case of a\n         * 'function' scope this includes the automatic argument <em>arguments</em> as\n         * its first element, as well as all further formal arguments.\n         * @member {Variable[]} Scope#variables\n         */\n        this.variables = [];\n\n        /**\n         * Any variable {@link Reference|reference} found in this scope. This\n         * includes occurrences of local variables as well as variables from\n         * parent scopes (including the global scope). For local variables\n         * this also includes defining occurrences (like in a 'var' statement).\n         * In a 'function' scope this does not include the occurrences of the\n         * formal parameter in the parameter list.\n         * @member {Reference[]} Scope#references\n         */\n        this.references = [];\n\n        /**\n         * For 'global' and 'function' scopes, this is a self-reference. For\n         * other scope types this is the <em>variableScope</em> value of the\n         * parent scope.\n         * @member {Scope} Scope#variableScope\n         */\n        this.variableScope =\n            this.type === \"global\" ||\n            this.type === \"module\" ||\n            this.type === \"function\" ||\n            this.type === \"class-field-initializer\" ||\n            this.type === \"class-static-block\"\n                ? this\n                : upperScope.variableScope;\n\n        /**\n         * Whether this scope is created by a FunctionExpression.\n         * @member {boolean} Scope#functionExpressionScope\n         */\n        this.functionExpressionScope = false;\n\n        /**\n         * Whether this is a scope that contains an 'eval()' invocation.\n         * @member {boolean} Scope#directCallToEvalScope\n         */\n        this.directCallToEvalScope = false;\n\n        /**\n         * @member {boolean} Scope#thisFound\n         */\n        this.thisFound = false;\n\n        this.__left = [];\n\n        /**\n         * Reference to the parent {@link Scope|scope}.\n         * @member {Scope} Scope#upper\n         */\n        this.upper = upperScope;\n\n        /**\n         * Whether 'use strict' is in effect in this scope.\n         * @member {boolean} Scope#isStrict\n         */\n        this.isStrict = scopeManager.isStrictModeSupported()\n            ? isStrictScope(this, block, isMethodDefinition, scopeManager.__useDirective())\n            : false;\n\n        /**\n         * List of nested {@link Scope}s.\n         * @member {Scope[]} Scope#childScopes\n         */\n        this.childScopes = [];\n        if (this.upper) {\n            this.upper.childScopes.push(this);\n        }\n\n        this.__declaredVariables = scopeManager.__declaredVariables;\n\n        registerScope(scopeManager, this);\n    }\n\n    __shouldStaticallyClose(scopeManager) {\n        return (!this.dynamic || scopeManager.__isOptimistic());\n    }\n\n    __shouldStaticallyCloseForGlobal(ref) {\n\n        // On global scope, let/const/class declarations should be resolved statically.\n        const name = ref.identifier.name;\n\n        if (!this.set.has(name)) {\n            return false;\n        }\n\n        const variable = this.set.get(name);\n        const defs = variable.defs;\n\n        return defs.length > 0 && defs.every(shouldBeStatically);\n    }\n\n    __staticCloseRef(ref) {\n        if (!this.__resolve(ref)) {\n            this.__delegateToUpperScope(ref);\n        }\n    }\n\n    __dynamicCloseRef(ref) {\n\n        // notify all names are through to global\n        let current = this;\n\n        do {\n            current.through.push(ref);\n            current = current.upper;\n        } while (current);\n    }\n\n    __globalCloseRef(ref) {\n\n        // let/const/class declarations should be resolved statically.\n        // others should be resolved dynamically.\n        if (this.__shouldStaticallyCloseForGlobal(ref)) {\n            this.__staticCloseRef(ref);\n        } else {\n            this.__dynamicCloseRef(ref);\n        }\n    }\n\n    __close(scopeManager) {\n        let closeRef;\n\n        if (this.__shouldStaticallyClose(scopeManager)) {\n            closeRef = this.__staticCloseRef;\n        } else if (this.type !== \"global\") {\n            closeRef = this.__dynamicCloseRef;\n        } else {\n            closeRef = this.__globalCloseRef;\n        }\n\n        // Try Resolving all references in this scope.\n        for (let i = 0, iz = this.__left.length; i < iz; ++i) {\n            const ref = this.__left[i];\n\n            closeRef.call(this, ref);\n        }\n        this.__left = null;\n\n        return this.upper;\n    }\n\n    // To override by function scopes.\n    // References in default parameters isn't resolved to variables which are in their function body.\n    __isValidResolution(ref, variable) { // eslint-disable-line class-methods-use-this, no-unused-vars\n        return true;\n    }\n\n    __resolve(ref) {\n        const name = ref.identifier.name;\n\n        if (!this.set.has(name)) {\n            return false;\n        }\n        const variable = this.set.get(name);\n\n        if (!this.__isValidResolution(ref, variable)) {\n            return false;\n        }\n        variable.references.push(ref);\n        variable.stack = variable.stack && ref.from.variableScope === this.variableScope;\n        if (ref.tainted) {\n            variable.tainted = true;\n            this.taints.set(variable.name, true);\n        }\n        ref.resolved = variable;\n\n        return true;\n    }\n\n    __delegateToUpperScope(ref) {\n        if (this.upper) {\n            this.upper.__left.push(ref);\n        }\n        this.through.push(ref);\n    }\n\n    __addDeclaredVariablesOfNode(variable, node) {\n        if (node === null || node === undefined) {\n            return;\n        }\n\n        let variables = this.__declaredVariables.get(node);\n\n        if (variables === null || variables === undefined) {\n            variables = [];\n            this.__declaredVariables.set(node, variables);\n        }\n        if (variables.indexOf(variable) === -1) {\n            variables.push(variable);\n        }\n    }\n\n    __defineGeneric(name, set, variables, node, def) {\n        let variable;\n\n        variable = set.get(name);\n        if (!variable) {\n            variable = new Variable(name, this);\n            set.set(name, variable);\n            variables.push(variable);\n        }\n\n        if (def) {\n            variable.defs.push(def);\n            this.__addDeclaredVariablesOfNode(variable, def.node);\n            this.__addDeclaredVariablesOfNode(variable, def.parent);\n        }\n        if (node) {\n            variable.identifiers.push(node);\n        }\n    }\n\n    __define(node, def) {\n        if (node && node.type === Syntax$2.Identifier) {\n            this.__defineGeneric(\n                node.name,\n                this.set,\n                this.variables,\n                node,\n                def\n            );\n        }\n    }\n\n    __referencing(node, assign, writeExpr, maybeImplicitGlobal, partial, init) {\n\n        // because Array element may be null\n        if (!node || node.type !== Syntax$2.Identifier) {\n            return;\n        }\n\n        // Specially handle like `this`.\n        if (node.name === \"super\") {\n            return;\n        }\n\n        const ref = new Reference(node, this, assign || Reference.READ, writeExpr, maybeImplicitGlobal, !!partial, !!init);\n\n        this.references.push(ref);\n        this.__left.push(ref);\n    }\n\n    __detectEval() {\n        let current = this;\n\n        this.directCallToEvalScope = true;\n        do {\n            current.dynamic = true;\n            current = current.upper;\n        } while (current);\n    }\n\n    __detectThis() {\n        this.thisFound = true;\n    }\n\n    __isClosed() {\n        return this.__left === null;\n    }\n\n    /**\n     * returns resolved {Reference}\n     * @function Scope#resolve\n     * @param {Espree.Identifier} ident identifier to be resolved.\n     * @returns {Reference} reference\n     */\n    resolve(ident) {\n        let ref, i, iz;\n\n        assert__default[\"default\"](this.__isClosed(), \"Scope should be closed.\");\n        assert__default[\"default\"](ident.type === Syntax$2.Identifier, \"Target should be identifier.\");\n        for (i = 0, iz = this.references.length; i < iz; ++i) {\n            ref = this.references[i];\n            if (ref.identifier === ident) {\n                return ref;\n            }\n        }\n        return null;\n    }\n\n    /**\n     * returns this scope is static\n     * @function Scope#isStatic\n     * @returns {boolean} static\n     */\n    isStatic() {\n        return !this.dynamic;\n    }\n\n    /**\n     * returns this scope has materialized arguments\n     * @function Scope#isArgumentsMaterialized\n     * @returns {boolean} arguemnts materialized\n     */\n    isArgumentsMaterialized() { // eslint-disable-line class-methods-use-this\n        return true;\n    }\n\n    /**\n     * returns this scope has materialized `this` reference\n     * @function Scope#isThisMaterialized\n     * @returns {boolean} this materialized\n     */\n    isThisMaterialized() { // eslint-disable-line class-methods-use-this\n        return true;\n    }\n\n    isUsedName(name) {\n        if (this.set.has(name)) {\n            return true;\n        }\n        for (let i = 0, iz = this.through.length; i < iz; ++i) {\n            if (this.through[i].identifier.name === name) {\n                return true;\n            }\n        }\n        return false;\n    }\n}\n\nclass GlobalScope extends Scope {\n    constructor(scopeManager, block) {\n        super(scopeManager, \"global\", null, block, false);\n        this.implicit = {\n            set: new Map(),\n            variables: [],\n\n            /**\n             * List of {@link Reference}s that are left to be resolved (i.e. which\n             * need to be linked to the variable they refer to).\n             * @member {Reference[]} Scope#implicit#left\n             */\n            left: []\n        };\n    }\n\n    __close(scopeManager) {\n        const implicit = [];\n\n        for (let i = 0, iz = this.__left.length; i < iz; ++i) {\n            const ref = this.__left[i];\n\n            if (ref.__maybeImplicitGlobal && !this.set.has(ref.identifier.name)) {\n                implicit.push(ref.__maybeImplicitGlobal);\n            }\n        }\n\n        // create an implicit global variable from assignment expression\n        for (let i = 0, iz = implicit.length; i < iz; ++i) {\n            const info = implicit[i];\n\n            this.__defineImplicit(info.pattern,\n                new Definition(\n                    Variable.ImplicitGlobalVariable,\n                    info.pattern,\n                    info.node,\n                    null,\n                    null,\n                    null\n                ));\n\n        }\n\n        this.implicit.left = this.__left;\n\n        return super.__close(scopeManager);\n    }\n\n    __defineImplicit(node, def) {\n        if (node && node.type === Syntax$2.Identifier) {\n            this.__defineGeneric(\n                node.name,\n                this.implicit.set,\n                this.implicit.variables,\n                node,\n                def\n            );\n        }\n    }\n}\n\nclass ModuleScope extends Scope {\n    constructor(scopeManager, upperScope, block) {\n        super(scopeManager, \"module\", upperScope, block, false);\n    }\n}\n\nclass FunctionExpressionNameScope extends Scope {\n    constructor(scopeManager, upperScope, block) {\n        super(scopeManager, \"function-expression-name\", upperScope, block, false);\n        this.__define(block.id,\n            new Definition(\n                Variable.FunctionName,\n                block.id,\n                block,\n                null,\n                null,\n                null\n            ));\n        this.functionExpressionScope = true;\n    }\n}\n\nclass CatchScope extends Scope {\n    constructor(scopeManager, upperScope, block) {\n        super(scopeManager, \"catch\", upperScope, block, false);\n    }\n}\n\nclass WithScope extends Scope {\n    constructor(scopeManager, upperScope, block) {\n        super(scopeManager, \"with\", upperScope, block, false);\n    }\n\n    __close(scopeManager) {\n        if (this.__shouldStaticallyClose(scopeManager)) {\n            return super.__close(scopeManager);\n        }\n\n        for (let i = 0, iz = this.__left.length; i < iz; ++i) {\n            const ref = this.__left[i];\n\n            ref.tainted = true;\n            this.__delegateToUpperScope(ref);\n        }\n        this.__left = null;\n\n        return this.upper;\n    }\n}\n\nclass BlockScope extends Scope {\n    constructor(scopeManager, upperScope, block) {\n        super(scopeManager, \"block\", upperScope, block, false);\n    }\n}\n\nclass SwitchScope extends Scope {\n    constructor(scopeManager, upperScope, block) {\n        super(scopeManager, \"switch\", upperScope, block, false);\n    }\n}\n\nclass FunctionScope extends Scope {\n    constructor(scopeManager, upperScope, block, isMethodDefinition) {\n        super(scopeManager, \"function\", upperScope, block, isMethodDefinition);\n\n        // section 9.2.13, FunctionDeclarationInstantiation.\n        // NOTE Arrow functions never have an arguments objects.\n        if (this.block.type !== Syntax$2.ArrowFunctionExpression) {\n            this.__defineArguments();\n        }\n    }\n\n    isArgumentsMaterialized() {\n\n        // TODO(Constellation)\n        // We can more aggressive on this condition like this.\n        //\n        // function t() {\n        //     // arguments of t is always hidden.\n        //     function arguments() {\n        //     }\n        // }\n        if (this.block.type === Syntax$2.ArrowFunctionExpression) {\n            return false;\n        }\n\n        if (!this.isStatic()) {\n            return true;\n        }\n\n        const variable = this.set.get(\"arguments\");\n\n        assert__default[\"default\"](variable, \"Always have arguments variable.\");\n        return variable.tainted || variable.references.length !== 0;\n    }\n\n    isThisMaterialized() {\n        if (!this.isStatic()) {\n            return true;\n        }\n        return this.thisFound;\n    }\n\n    __defineArguments() {\n        this.__defineGeneric(\n            \"arguments\",\n            this.set,\n            this.variables,\n            null,\n            null\n        );\n        this.taints.set(\"arguments\", true);\n    }\n\n    // References in default parameters isn't resolved to variables which are in their function body.\n    //     const x = 1\n    //     function f(a = x) { // This `x` is resolved to the `x` in the outer scope.\n    //         const x = 2\n    //         console.log(a)\n    //     }\n    __isValidResolution(ref, variable) {\n\n        // If `options.nodejsScope` is true, `this.block` becomes a Program node.\n        if (this.block.type === \"Program\") {\n            return true;\n        }\n\n        const bodyStart = this.block.body.range[0];\n\n        // It's invalid resolution in the following case:\n        return !(\n            variable.scope === this &&\n            ref.identifier.range[0] < bodyStart && // the reference is in the parameter part.\n            variable.defs.every(d => d.name.range[0] >= bodyStart) // the variable is in the body.\n        );\n    }\n}\n\nclass ForScope extends Scope {\n    constructor(scopeManager, upperScope, block) {\n        super(scopeManager, \"for\", upperScope, block, false);\n    }\n}\n\nclass ClassScope extends Scope {\n    constructor(scopeManager, upperScope, block) {\n        super(scopeManager, \"class\", upperScope, block, false);\n    }\n}\n\nclass ClassFieldInitializerScope extends Scope {\n    constructor(scopeManager, upperScope, block) {\n        super(scopeManager, \"class-field-initializer\", upperScope, block, true);\n    }\n}\n\nclass ClassStaticBlockScope extends Scope {\n    constructor(scopeManager, upperScope, block) {\n        super(scopeManager, \"class-static-block\", upperScope, block, true);\n    }\n}\n\n/* vim: set sw=4 ts=4 et tw=80 : */\n\n/*\n  Copyright (C) 2015 Yusuke Suzuki <utatane.tea@gmail.com>\n\n  Redistribution and use in source and binary forms, with or without\n  modification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n  ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n/**\n * @constructor ScopeManager\n */\nclass ScopeManager {\n    constructor(options) {\n        this.scopes = [];\n        this.globalScope = null;\n        this.__nodeToScope = new WeakMap();\n        this.__currentScope = null;\n        this.__options = options;\n        this.__declaredVariables = new WeakMap();\n    }\n\n    __useDirective() {\n        return this.__options.directive;\n    }\n\n    __isOptimistic() {\n        return this.__options.optimistic;\n    }\n\n    __ignoreEval() {\n        return this.__options.ignoreEval;\n    }\n\n    __isNodejsScope() {\n        return this.__options.nodejsScope || this.__options.sourceType === \"commonjs\";\n    }\n\n    isModule() {\n        return this.__options.sourceType === \"module\";\n    }\n\n    isImpliedStrict() {\n        return this.__options.impliedStrict;\n    }\n\n    isStrictModeSupported() {\n        return this.__options.ecmaVersion >= 5;\n    }\n\n    // Returns appropriate scope for this node.\n    __get(node) {\n        return this.__nodeToScope.get(node);\n    }\n\n    /**\n     * Get variables that are declared by the node.\n     *\n     * \"are declared by the node\" means the node is same as `Variable.defs[].node` or `Variable.defs[].parent`.\n     * If the node declares nothing, this method returns an empty array.\n     * CAUTION: This API is experimental. See https://github.com/estools/escope/pull/69 for more details.\n     * @param {Espree.Node} node a node to get.\n     * @returns {Variable[]} variables that declared by the node.\n     */\n    getDeclaredVariables(node) {\n        return this.__declaredVariables.get(node) || [];\n    }\n\n    /**\n     * acquire scope from node.\n     * @function ScopeManager#acquire\n     * @param {Espree.Node} node node for the acquired scope.\n     * @param {?boolean} [inner=false] look up the most inner scope, default value is false.\n     * @returns {Scope?} Scope from node\n     */\n    acquire(node, inner) {\n\n        /**\n         * predicate\n         * @param {Scope} testScope scope to test\n         * @returns {boolean} predicate\n         */\n        function predicate(testScope) {\n            if (testScope.type === \"function\" && testScope.functionExpressionScope) {\n                return false;\n            }\n            return true;\n        }\n\n        const scopes = this.__get(node);\n\n        if (!scopes || scopes.length === 0) {\n            return null;\n        }\n\n        // Heuristic selection from all scopes.\n        // If you would like to get all scopes, please use ScopeManager#acquireAll.\n        if (scopes.length === 1) {\n            return scopes[0];\n        }\n\n        if (inner) {\n            for (let i = scopes.length - 1; i >= 0; --i) {\n                const scope = scopes[i];\n\n                if (predicate(scope)) {\n                    return scope;\n                }\n            }\n        } else {\n            for (let i = 0, iz = scopes.length; i < iz; ++i) {\n                const scope = scopes[i];\n\n                if (predicate(scope)) {\n                    return scope;\n                }\n            }\n        }\n\n        return null;\n    }\n\n    /**\n     * acquire all scopes from node.\n     * @function ScopeManager#acquireAll\n     * @param {Espree.Node} node node for the acquired scope.\n     * @returns {Scopes?} Scope array\n     */\n    acquireAll(node) {\n        return this.__get(node);\n    }\n\n    /**\n     * release the node.\n     * @function ScopeManager#release\n     * @param {Espree.Node} node releasing node.\n     * @param {?boolean} [inner=false] look up the most inner scope, default value is false.\n     * @returns {Scope?} upper scope for the node.\n     */\n    release(node, inner) {\n        const scopes = this.__get(node);\n\n        if (scopes && scopes.length) {\n            const scope = scopes[0].upper;\n\n            if (!scope) {\n                return null;\n            }\n            return this.acquire(scope.block, inner);\n        }\n        return null;\n    }\n\n    attach() { } // eslint-disable-line class-methods-use-this\n\n    detach() { } // eslint-disable-line class-methods-use-this\n\n    __nestScope(scope) {\n        if (scope instanceof GlobalScope) {\n            assert__default[\"default\"](this.__currentScope === null);\n            this.globalScope = scope;\n        }\n        this.__currentScope = scope;\n        return scope;\n    }\n\n    __nestGlobalScope(node) {\n        return this.__nestScope(new GlobalScope(this, node));\n    }\n\n    __nestBlockScope(node) {\n        return this.__nestScope(new BlockScope(this, this.__currentScope, node));\n    }\n\n    __nestFunctionScope(node, isMethodDefinition) {\n        return this.__nestScope(new FunctionScope(this, this.__currentScope, node, isMethodDefinition));\n    }\n\n    __nestForScope(node) {\n        return this.__nestScope(new ForScope(this, this.__currentScope, node));\n    }\n\n    __nestCatchScope(node) {\n        return this.__nestScope(new CatchScope(this, this.__currentScope, node));\n    }\n\n    __nestWithScope(node) {\n        return this.__nestScope(new WithScope(this, this.__currentScope, node));\n    }\n\n    __nestClassScope(node) {\n        return this.__nestScope(new ClassScope(this, this.__currentScope, node));\n    }\n\n    __nestClassFieldInitializerScope(node) {\n        return this.__nestScope(new ClassFieldInitializerScope(this, this.__currentScope, node));\n    }\n\n    __nestClassStaticBlockScope(node) {\n        return this.__nestScope(new ClassStaticBlockScope(this, this.__currentScope, node));\n    }\n\n    __nestSwitchScope(node) {\n        return this.__nestScope(new SwitchScope(this, this.__currentScope, node));\n    }\n\n    __nestModuleScope(node) {\n        return this.__nestScope(new ModuleScope(this, this.__currentScope, node));\n    }\n\n    __nestFunctionExpressionNameScope(node) {\n        return this.__nestScope(new FunctionExpressionNameScope(this, this.__currentScope, node));\n    }\n\n    __isES6() {\n        return this.__options.ecmaVersion >= 6;\n    }\n}\n\n/* vim: set sw=4 ts=4 et tw=80 : */\n\n/*\n  Copyright (C) 2015 Yusuke Suzuki <utatane.tea@gmail.com>\n\n  Redistribution and use in source and binary forms, with or without\n  modification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n  ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\nconst { Syntax: Syntax$1 } = estraverse__default[\"default\"];\n\n/**\n * Get last array element\n * @param {Array} xs array\n * @returns {any} Last elment\n */\nfunction getLast(xs) {\n    return xs[xs.length - 1] || null;\n}\n\nclass PatternVisitor extends esrecurse__default[\"default\"].Visitor {\n    static isPattern(node) {\n        const nodeType = node.type;\n\n        return (\n            nodeType === Syntax$1.Identifier ||\n            nodeType === Syntax$1.ObjectPattern ||\n            nodeType === Syntax$1.ArrayPattern ||\n            nodeType === Syntax$1.SpreadElement ||\n            nodeType === Syntax$1.RestElement ||\n            nodeType === Syntax$1.AssignmentPattern\n        );\n    }\n\n    constructor(options, rootPattern, callback) {\n        super(null, options);\n        this.rootPattern = rootPattern;\n        this.callback = callback;\n        this.assignments = [];\n        this.rightHandNodes = [];\n        this.restElements = [];\n    }\n\n    Identifier(pattern) {\n        const lastRestElement = getLast(this.restElements);\n\n        this.callback(pattern, {\n            topLevel: pattern === this.rootPattern,\n            rest: lastRestElement !== null && lastRestElement !== undefined && lastRestElement.argument === pattern,\n            assignments: this.assignments\n        });\n    }\n\n    Property(property) {\n\n        // Computed property's key is a right hand node.\n        if (property.computed) {\n            this.rightHandNodes.push(property.key);\n        }\n\n        // If it's shorthand, its key is same as its value.\n        // If it's shorthand and has its default value, its key is same as its value.left (the value is AssignmentPattern).\n        // If it's not shorthand, the name of new variable is its value's.\n        this.visit(property.value);\n    }\n\n    ArrayPattern(pattern) {\n        for (let i = 0, iz = pattern.elements.length; i < iz; ++i) {\n            const element = pattern.elements[i];\n\n            this.visit(element);\n        }\n    }\n\n    AssignmentPattern(pattern) {\n        this.assignments.push(pattern);\n        this.visit(pattern.left);\n        this.rightHandNodes.push(pattern.right);\n        this.assignments.pop();\n    }\n\n    RestElement(pattern) {\n        this.restElements.push(pattern);\n        this.visit(pattern.argument);\n        this.restElements.pop();\n    }\n\n    MemberExpression(node) {\n\n        // Computed property's key is a right hand node.\n        if (node.computed) {\n            this.rightHandNodes.push(node.property);\n        }\n\n        // the object is only read, write to its property.\n        this.rightHandNodes.push(node.object);\n    }\n\n    //\n    // ForInStatement.left and AssignmentExpression.left are LeftHandSideExpression.\n    // By spec, LeftHandSideExpression is Pattern or MemberExpression.\n    //   (see also: https://github.com/estree/estree/pull/20#issuecomment-74584758)\n    // But espree 2.0 parses to ArrayExpression, ObjectExpression, etc...\n    //\n\n    SpreadElement(node) {\n        this.visit(node.argument);\n    }\n\n    ArrayExpression(node) {\n        node.elements.forEach(this.visit, this);\n    }\n\n    AssignmentExpression(node) {\n        this.assignments.push(node);\n        this.visit(node.left);\n        this.rightHandNodes.push(node.right);\n        this.assignments.pop();\n    }\n\n    CallExpression(node) {\n\n        // arguments are right hand nodes.\n        node.arguments.forEach(a => {\n            this.rightHandNodes.push(a);\n        });\n        this.visit(node.callee);\n    }\n}\n\n/* vim: set sw=4 ts=4 et tw=80 : */\n\n/*\n  Copyright (C) 2015 Yusuke Suzuki <utatane.tea@gmail.com>\n\n  Redistribution and use in source and binary forms, with or without\n  modification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n  ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\nconst { Syntax } = estraverse__default[\"default\"];\n\n/**\n * Traverse identifier in pattern\n * @param {Object} options options\n * @param {pattern} rootPattern root pattern\n * @param {Refencer} referencer referencer\n * @param {callback} callback callback\n * @returns {void}\n */\nfunction traverseIdentifierInPattern(options, rootPattern, referencer, callback) {\n\n    // Call the callback at left hand identifier nodes, and Collect right hand nodes.\n    const visitor = new PatternVisitor(options, rootPattern, callback);\n\n    visitor.visit(rootPattern);\n\n    // Process the right hand nodes recursively.\n    if (referencer !== null && referencer !== undefined) {\n        visitor.rightHandNodes.forEach(referencer.visit, referencer);\n    }\n}\n\n// Importing ImportDeclaration.\n// http://people.mozilla.org/~jorendorff/es6-draft.html#sec-moduledeclarationinstantiation\n// https://github.com/estree/estree/blob/master/es6.md#importdeclaration\n// FIXME: Now, we don't create module environment, because the context is\n// implementation dependent.\n\nclass Importer extends esrecurse__default[\"default\"].Visitor {\n    constructor(declaration, referencer) {\n        super(null, referencer.options);\n        this.declaration = declaration;\n        this.referencer = referencer;\n    }\n\n    visitImport(id, specifier) {\n        this.referencer.visitPattern(id, pattern => {\n            this.referencer.currentScope().__define(pattern,\n                new Definition(\n                    Variable.ImportBinding,\n                    pattern,\n                    specifier,\n                    this.declaration,\n                    null,\n                    null\n                ));\n        });\n    }\n\n    ImportNamespaceSpecifier(node) {\n        const local = (node.local || node.id);\n\n        if (local) {\n            this.visitImport(local, node);\n        }\n    }\n\n    ImportDefaultSpecifier(node) {\n        const local = (node.local || node.id);\n\n        this.visitImport(local, node);\n    }\n\n    ImportSpecifier(node) {\n        const local = (node.local || node.id);\n\n        if (node.name) {\n            this.visitImport(node.name, node);\n        } else {\n            this.visitImport(local, node);\n        }\n    }\n}\n\n// Referencing variables and creating bindings.\nclass Referencer extends esrecurse__default[\"default\"].Visitor {\n    constructor(options, scopeManager) {\n        super(null, options);\n        this.options = options;\n        this.scopeManager = scopeManager;\n        this.parent = null;\n        this.isInnerMethodDefinition = false;\n    }\n\n    currentScope() {\n        return this.scopeManager.__currentScope;\n    }\n\n    close(node) {\n        while (this.currentScope() && node === this.currentScope().block) {\n            this.scopeManager.__currentScope = this.currentScope().__close(this.scopeManager);\n        }\n    }\n\n    pushInnerMethodDefinition(isInnerMethodDefinition) {\n        const previous = this.isInnerMethodDefinition;\n\n        this.isInnerMethodDefinition = isInnerMethodDefinition;\n        return previous;\n    }\n\n    popInnerMethodDefinition(isInnerMethodDefinition) {\n        this.isInnerMethodDefinition = isInnerMethodDefinition;\n    }\n\n    referencingDefaultValue(pattern, assignments, maybeImplicitGlobal, init) {\n        const scope = this.currentScope();\n\n        assignments.forEach(assignment => {\n            scope.__referencing(\n                pattern,\n                Reference.WRITE,\n                assignment.right,\n                maybeImplicitGlobal,\n                pattern !== assignment.left,\n                init\n            );\n        });\n    }\n\n    visitPattern(node, options, callback) {\n        let visitPatternOptions = options;\n        let visitPatternCallback = callback;\n\n        if (typeof options === \"function\") {\n            visitPatternCallback = options;\n            visitPatternOptions = { processRightHandNodes: false };\n        }\n\n        traverseIdentifierInPattern(\n            this.options,\n            node,\n            visitPatternOptions.processRightHandNodes ? this : null,\n            visitPatternCallback\n        );\n    }\n\n    visitFunction(node) {\n        let i, iz;\n\n        // FunctionDeclaration name is defined in upper scope\n        // NOTE: Not referring variableScope. It is intended.\n        // Since\n        //  in ES5, FunctionDeclaration should be in FunctionBody.\n        //  in ES6, FunctionDeclaration should be block scoped.\n\n        if (node.type === Syntax.FunctionDeclaration) {\n\n            // id is defined in upper scope\n            this.currentScope().__define(node.id,\n                new Definition(\n                    Variable.FunctionName,\n                    node.id,\n                    node,\n                    null,\n                    null,\n                    null\n                ));\n        }\n\n        // FunctionExpression with name creates its special scope;\n        // FunctionExpressionNameScope.\n        if (node.type === Syntax.FunctionExpression && node.id) {\n            this.scopeManager.__nestFunctionExpressionNameScope(node);\n        }\n\n        // Consider this function is in the MethodDefinition.\n        this.scopeManager.__nestFunctionScope(node, this.isInnerMethodDefinition);\n\n        const that = this;\n\n        /**\n         * Visit pattern callback\n         * @param {pattern} pattern pattern\n         * @param {Object} info info\n         * @returns {void}\n         */\n        function visitPatternCallback(pattern, info) {\n            that.currentScope().__define(pattern,\n                new ParameterDefinition(\n                    pattern,\n                    node,\n                    i,\n                    info.rest\n                ));\n\n            that.referencingDefaultValue(pattern, info.assignments, null, true);\n        }\n\n        // Process parameter declarations.\n        for (i = 0, iz = node.params.length; i < iz; ++i) {\n            this.visitPattern(node.params[i], { processRightHandNodes: true }, visitPatternCallback);\n        }\n\n        // if there's a rest argument, add that\n        if (node.rest) {\n            this.visitPattern({\n                type: \"RestElement\",\n                argument: node.rest\n            }, pattern => {\n                this.currentScope().__define(pattern,\n                    new ParameterDefinition(\n                        pattern,\n                        node,\n                        node.params.length,\n                        true\n                    ));\n            });\n        }\n\n        // In TypeScript there are a number of function-like constructs which have no body,\n        // so check it exists before traversing\n        if (node.body) {\n\n            // Skip BlockStatement to prevent creating BlockStatement scope.\n            if (node.body.type === Syntax.BlockStatement) {\n                this.visitChildren(node.body);\n            } else {\n                this.visit(node.body);\n            }\n        }\n\n        this.close(node);\n    }\n\n    visitClass(node) {\n        if (node.type === Syntax.ClassDeclaration) {\n            this.currentScope().__define(node.id,\n                new Definition(\n                    Variable.ClassName,\n                    node.id,\n                    node,\n                    null,\n                    null,\n                    null\n                ));\n        }\n\n        this.visit(node.superClass);\n\n        this.scopeManager.__nestClassScope(node);\n\n        if (node.id) {\n            this.currentScope().__define(node.id,\n                new Definition(\n                    Variable.ClassName,\n                    node.id,\n                    node\n                ));\n        }\n        this.visit(node.body);\n\n        this.close(node);\n    }\n\n    visitProperty(node) {\n        let previous;\n\n        if (node.computed) {\n            this.visit(node.key);\n        }\n\n        const isMethodDefinition = node.type === Syntax.MethodDefinition;\n\n        if (isMethodDefinition) {\n            previous = this.pushInnerMethodDefinition(true);\n        }\n        this.visit(node.value);\n        if (isMethodDefinition) {\n            this.popInnerMethodDefinition(previous);\n        }\n    }\n\n    visitForIn(node) {\n        if (node.left.type === Syntax.VariableDeclaration && node.left.kind !== \"var\") {\n            this.scopeManager.__nestForScope(node);\n        }\n\n        if (node.left.type === Syntax.VariableDeclaration) {\n            this.visit(node.left);\n            this.visitPattern(node.left.declarations[0].id, pattern => {\n                this.currentScope().__referencing(pattern, Reference.WRITE, node.right, null, true, true);\n            });\n        } else {\n            this.visitPattern(node.left, { processRightHandNodes: true }, (pattern, info) => {\n                let maybeImplicitGlobal = null;\n\n                if (!this.currentScope().isStrict) {\n                    maybeImplicitGlobal = {\n                        pattern,\n                        node\n                    };\n                }\n                this.referencingDefaultValue(pattern, info.assignments, maybeImplicitGlobal, false);\n                this.currentScope().__referencing(pattern, Reference.WRITE, node.right, maybeImplicitGlobal, true, false);\n            });\n        }\n        this.visit(node.right);\n        this.visit(node.body);\n\n        this.close(node);\n    }\n\n    visitVariableDeclaration(variableTargetScope, type, node, index) {\n\n        const decl = node.declarations[index];\n        const init = decl.init;\n\n        this.visitPattern(decl.id, { processRightHandNodes: true }, (pattern, info) => {\n            variableTargetScope.__define(\n                pattern,\n                new Definition(\n                    type,\n                    pattern,\n                    decl,\n                    node,\n                    index,\n                    node.kind\n                )\n            );\n\n            this.referencingDefaultValue(pattern, info.assignments, null, true);\n            if (init) {\n                this.currentScope().__referencing(pattern, Reference.WRITE, init, null, !info.topLevel, true);\n            }\n        });\n    }\n\n    AssignmentExpression(node) {\n        if (PatternVisitor.isPattern(node.left)) {\n            if (node.operator === \"=\") {\n                this.visitPattern(node.left, { processRightHandNodes: true }, (pattern, info) => {\n                    let maybeImplicitGlobal = null;\n\n                    if (!this.currentScope().isStrict) {\n                        maybeImplicitGlobal = {\n                            pattern,\n                            node\n                        };\n                    }\n                    this.referencingDefaultValue(pattern, info.assignments, maybeImplicitGlobal, false);\n                    this.currentScope().__referencing(pattern, Reference.WRITE, node.right, maybeImplicitGlobal, !info.topLevel, false);\n                });\n            } else {\n                this.currentScope().__referencing(node.left, Reference.RW, node.right);\n            }\n        } else {\n            this.visit(node.left);\n        }\n        this.visit(node.right);\n    }\n\n    CatchClause(node) {\n        this.scopeManager.__nestCatchScope(node);\n\n        this.visitPattern(node.param, { processRightHandNodes: true }, (pattern, info) => {\n            this.currentScope().__define(pattern,\n                new Definition(\n                    Variable.CatchClause,\n                    node.param,\n                    node,\n                    null,\n                    null,\n                    null\n                ));\n            this.referencingDefaultValue(pattern, info.assignments, null, true);\n        });\n        this.visit(node.body);\n\n        this.close(node);\n    }\n\n    Program(node) {\n        this.scopeManager.__nestGlobalScope(node);\n\n        if (this.scopeManager.__isNodejsScope()) {\n\n            // Force strictness of GlobalScope to false when using node.js scope.\n            this.currentScope().isStrict = false;\n            this.scopeManager.__nestFunctionScope(node, false);\n        }\n\n        if (this.scopeManager.__isES6() && this.scopeManager.isModule()) {\n            this.scopeManager.__nestModuleScope(node);\n        }\n\n        if (this.scopeManager.isStrictModeSupported() && this.scopeManager.isImpliedStrict()) {\n            this.currentScope().isStrict = true;\n        }\n\n        this.visitChildren(node);\n        this.close(node);\n    }\n\n    Identifier(node) {\n        this.currentScope().__referencing(node);\n    }\n\n    // eslint-disable-next-line class-methods-use-this\n    PrivateIdentifier() {\n\n        // Do nothing.\n    }\n\n    UpdateExpression(node) {\n        if (PatternVisitor.isPattern(node.argument)) {\n            this.currentScope().__referencing(node.argument, Reference.RW, null);\n        } else {\n            this.visitChildren(node);\n        }\n    }\n\n    MemberExpression(node) {\n        this.visit(node.object);\n        if (node.computed) {\n            this.visit(node.property);\n        }\n    }\n\n    Property(node) {\n        this.visitProperty(node);\n    }\n\n    PropertyDefinition(node) {\n        const { computed, key, value } = node;\n\n        if (computed) {\n            this.visit(key);\n        }\n        if (value) {\n            this.scopeManager.__nestClassFieldInitializerScope(value);\n            this.visit(value);\n            this.close(value);\n        }\n    }\n\n    StaticBlock(node) {\n        this.scopeManager.__nestClassStaticBlockScope(node);\n\n        this.visitChildren(node);\n\n        this.close(node);\n    }\n\n    MethodDefinition(node) {\n        this.visitProperty(node);\n    }\n\n    BreakStatement() {} // eslint-disable-line class-methods-use-this\n\n    ContinueStatement() {} // eslint-disable-line class-methods-use-this\n\n    LabeledStatement(node) {\n        this.visit(node.body);\n    }\n\n    ForStatement(node) {\n\n        // Create ForStatement declaration.\n        // NOTE: In ES6, ForStatement dynamically generates\n        // per iteration environment. However, escope is\n        // a static analyzer, we only generate one scope for ForStatement.\n        if (node.init && node.init.type === Syntax.VariableDeclaration && node.init.kind !== \"var\") {\n            this.scopeManager.__nestForScope(node);\n        }\n\n        this.visitChildren(node);\n\n        this.close(node);\n    }\n\n    ClassExpression(node) {\n        this.visitClass(node);\n    }\n\n    ClassDeclaration(node) {\n        this.visitClass(node);\n    }\n\n    CallExpression(node) {\n\n        // Check this is direct call to eval\n        if (!this.scopeManager.__ignoreEval() && node.callee.type === Syntax.Identifier && node.callee.name === \"eval\") {\n\n            // NOTE: This should be `variableScope`. Since direct eval call always creates Lexical environment and\n            // let / const should be enclosed into it. Only VariableDeclaration affects on the caller's environment.\n            this.currentScope().variableScope.__detectEval();\n        }\n        this.visitChildren(node);\n    }\n\n    BlockStatement(node) {\n        if (this.scopeManager.__isES6()) {\n            this.scopeManager.__nestBlockScope(node);\n        }\n\n        this.visitChildren(node);\n\n        this.close(node);\n    }\n\n    ThisExpression() {\n        this.currentScope().variableScope.__detectThis();\n    }\n\n    WithStatement(node) {\n        this.visit(node.object);\n\n        // Then nest scope for WithStatement.\n        this.scopeManager.__nestWithScope(node);\n\n        this.visit(node.body);\n\n        this.close(node);\n    }\n\n    VariableDeclaration(node) {\n        const variableTargetScope = (node.kind === \"var\") ? this.currentScope().variableScope : this.currentScope();\n\n        for (let i = 0, iz = node.declarations.length; i < iz; ++i) {\n            const decl = node.declarations[i];\n\n            this.visitVariableDeclaration(variableTargetScope, Variable.Variable, node, i);\n            if (decl.init) {\n                this.visit(decl.init);\n            }\n        }\n    }\n\n    // sec 13.11.8\n    SwitchStatement(node) {\n        this.visit(node.discriminant);\n\n        if (this.scopeManager.__isES6()) {\n            this.scopeManager.__nestSwitchScope(node);\n        }\n\n        for (let i = 0, iz = node.cases.length; i < iz; ++i) {\n            this.visit(node.cases[i]);\n        }\n\n        this.close(node);\n    }\n\n    FunctionDeclaration(node) {\n        this.visitFunction(node);\n    }\n\n    FunctionExpression(node) {\n        this.visitFunction(node);\n    }\n\n    ForOfStatement(node) {\n        this.visitForIn(node);\n    }\n\n    ForInStatement(node) {\n        this.visitForIn(node);\n    }\n\n    ArrowFunctionExpression(node) {\n        this.visitFunction(node);\n    }\n\n    ImportDeclaration(node) {\n        assert__default[\"default\"](this.scopeManager.__isES6() && this.scopeManager.isModule(), \"ImportDeclaration should appear when the mode is ES6 and in the module context.\");\n\n        const importer = new Importer(node, this);\n\n        importer.visit(node);\n    }\n\n    visitExportDeclaration(node) {\n        if (node.source) {\n            return;\n        }\n        if (node.declaration) {\n            this.visit(node.declaration);\n            return;\n        }\n\n        this.visitChildren(node);\n    }\n\n    // TODO: ExportDeclaration doesn't exist. for bc?\n    ExportDeclaration(node) {\n        this.visitExportDeclaration(node);\n    }\n\n    ExportAllDeclaration(node) {\n        this.visitExportDeclaration(node);\n    }\n\n    ExportDefaultDeclaration(node) {\n        this.visitExportDeclaration(node);\n    }\n\n    ExportNamedDeclaration(node) {\n        this.visitExportDeclaration(node);\n    }\n\n    ExportSpecifier(node) {\n\n        // TODO: `node.id` doesn't exist. for bc?\n        const local = (node.id || node.local);\n\n        this.visit(local);\n    }\n\n    MetaProperty() { // eslint-disable-line class-methods-use-this\n\n        // do nothing.\n    }\n}\n\n/* vim: set sw=4 ts=4 et tw=80 : */\n\nconst version = \"7.1.1\";\n\n/*\n  Copyright (C) 2012-2014 Yusuke Suzuki <utatane.tea@gmail.com>\n  Copyright (C) 2013 Alex Seville <hi@alexanderseville.com>\n  Copyright (C) 2014 Thiago de Arruda <tpadilha84@gmail.com>\n\n  Redistribution and use in source and binary forms, with or without\n  modification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n  ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n/**\n * Set the default options\n * @returns {Object} options\n */\nfunction defaultOptions() {\n    return {\n        optimistic: false,\n        directive: false,\n        nodejsScope: false,\n        impliedStrict: false,\n        sourceType: \"script\", // one of ['script', 'module', 'commonjs']\n        ecmaVersion: 5,\n        childVisitorKeys: null,\n        fallback: \"iteration\"\n    };\n}\n\n/**\n * Preform deep update on option object\n * @param {Object} target Options\n * @param {Object} override Updates\n * @returns {Object} Updated options\n */\nfunction updateDeeply(target, override) {\n\n    /**\n     * Is hash object\n     * @param {Object} value Test value\n     * @returns {boolean} Result\n     */\n    function isHashObject(value) {\n        return typeof value === \"object\" && value instanceof Object && !(value instanceof Array) && !(value instanceof RegExp);\n    }\n\n    for (const key in override) {\n        if (Object.prototype.hasOwnProperty.call(override, key)) {\n            const val = override[key];\n\n            if (isHashObject(val)) {\n                if (isHashObject(target[key])) {\n                    updateDeeply(target[key], val);\n                } else {\n                    target[key] = updateDeeply({}, val);\n                }\n            } else {\n                target[key] = val;\n            }\n        }\n    }\n    return target;\n}\n\n/**\n * Main interface function. Takes an Espree syntax tree and returns the\n * analyzed scopes.\n * @function analyze\n * @param {espree.Tree} tree Abstract Syntax Tree\n * @param {Object} providedOptions Options that tailor the scope analysis\n * @param {boolean} [providedOptions.optimistic=false] the optimistic flag\n * @param {boolean} [providedOptions.directive=false] the directive flag\n * @param {boolean} [providedOptions.ignoreEval=false] whether to check 'eval()' calls\n * @param {boolean} [providedOptions.nodejsScope=false] whether the whole\n * script is executed under node.js environment. When enabled, escope adds\n * a function scope immediately following the global scope.\n * @param {boolean} [providedOptions.impliedStrict=false] implied strict mode\n * (if ecmaVersion >= 5).\n * @param {string} [providedOptions.sourceType='script'] the source type of the script. one of 'script', 'module', and 'commonjs'\n * @param {number} [providedOptions.ecmaVersion=5] which ECMAScript version is considered\n * @param {Object} [providedOptions.childVisitorKeys=null] Additional known visitor keys. See [esrecurse](https://github.com/estools/esrecurse)'s the `childVisitorKeys` option.\n * @param {string} [providedOptions.fallback='iteration'] A kind of the fallback in order to encounter with unknown node. See [esrecurse](https://github.com/estools/esrecurse)'s the `fallback` option.\n * @returns {ScopeManager} ScopeManager\n */\nfunction analyze(tree, providedOptions) {\n    const options = updateDeeply(defaultOptions(), providedOptions);\n    const scopeManager = new ScopeManager(options);\n    const referencer = new Referencer(options, scopeManager);\n\n    referencer.visit(tree);\n\n    assert__default[\"default\"](scopeManager.__currentScope === null, \"currentScope should be null.\");\n\n    return scopeManager;\n}\n\n/* vim: set sw=4 ts=4 et tw=80 : */\n\nexports.Definition = Definition;\nexports.PatternVisitor = PatternVisitor;\nexports.Reference = Reference;\nexports.Referencer = Referencer;\nexports.Scope = Scope;\nexports.ScopeManager = ScopeManager;\nexports.Variable = Variable;\nexports.analyze = analyze;\nexports.version = version;\n//# sourceMappingURL=eslint-scope.cjs.map\n/lib/pattern-visitor.js\u0013=/*\n  Copyright (C) 2015 Yusuke Suzuki <utatane.tea@gmail.com>\n\n  Redistribution and use in source and binary forms, with or without\n  modification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n  ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n/* eslint-disable no-undefined */\n\nimport estraverse from \"estraverse\";\nimport esrecurse from \"esrecurse\";\n\nconst { Syntax } = estraverse;\n\n/**\n * Get last array element\n * @param {Array} xs array\n * @returns {any} Last elment\n */\nfunction getLast(xs) {\n    return xs[xs.length - 1] || null;\n}\n\nclass PatternVisitor extends esrecurse.Visitor {\n    static isPattern(node) {\n        const nodeType = node.type;\n\n        return (\n            nodeType === Syntax.Identifier ||\n            nodeType === Syntax.ObjectPattern ||\n            nodeType === Syntax.ArrayPattern ||\n            nodeType === Syntax.SpreadElement ||\n            nodeType === Syntax.RestElement ||\n            nodeType === Syntax.AssignmentPattern\n        );\n    }\n\n    constructor(options, rootPattern, callback) {\n        super(null, options);\n        this.rootPattern = rootPattern;\n        this.callback = callback;\n        this.assignments = [];\n        this.rightHandNodes = [];\n        this.restElements = [];\n    }\n\n    Identifier(pattern) {\n        const lastRestElement = getLast(this.restElements);\n\n        this.callback(pattern, {\n            topLevel: pattern === this.rootPattern,\n            rest: lastRestElement !== null && lastRestElement !== undefined && lastRestElement.argument === pattern,\n            assignments: this.assignments\n        });\n    }\n\n    Property(property) {\n\n        // Computed property's key is a right hand node.\n        if (property.computed) {\n            this.rightHandNodes.push(property.key);\n        }\n\n        // If it's shorthand, its key is same as its value.\n        // If it's shorthand and has its default value, its key is same as its value.left (the value is AssignmentPattern).\n        // If it's not shorthand, the name of new variable is its value's.\n        this.visit(property.value);\n    }\n\n    ArrayPattern(pattern) {\n        for (let i = 0, iz = pattern.elements.length; i < iz; ++i) {\n            const element = pattern.elements[i];\n\n            this.visit(element);\n        }\n    }\n\n    AssignmentPattern(pattern) {\n        this.assignments.push(pattern);\n        this.visit(pattern.left);\n        this.rightHandNodes.push(pattern.right);\n        this.assignments.pop();\n    }\n\n    RestElement(pattern) {\n        this.restElements.push(pattern);\n        this.visit(pattern.argument);\n        this.restElements.pop();\n    }\n\n    MemberExpression(node) {\n\n        // Computed property's key is a right hand node.\n        if (node.computed) {\n            this.rightHandNodes.push(node.property);\n        }\n\n        // the object is only read, write to its property.\n        this.rightHandNodes.push(node.object);\n    }\n\n    //\n    // ForInStatement.left and AssignmentExpression.left are LeftHandSideExpression.\n    // By spec, LeftHandSideExpression is Pattern or MemberExpression.\n    //   (see also: https://github.com/estree/estree/pull/20#issuecomment-74584758)\n    // But espree 2.0 parses to ArrayExpression, ObjectExpression, etc...\n    //\n\n    SpreadElement(node) {\n        this.visit(node.argument);\n    }\n\n    ArrayExpression(node) {\n        node.elements.forEach(this.visit, this);\n    }\n\n    AssignmentExpression(node) {\n        this.assignments.push(node);\n        this.visit(node.left);\n        this.rightHandNodes.push(node.right);\n        this.assignments.pop();\n    }\n\n    CallExpression(node) {\n\n        // arguments are right hand nodes.\n        node.arguments.forEach(a => {\n            this.rightHandNodes.push(a);\n        });\n        this.visit(node.callee);\n    }\n}\n\nexport default PatternVisitor;\n\n/* vim: set sw=4 ts=4 et tw=80 : */\n/lib/index.js\u0019/*\n  Copyright (C) 2012-2014 Yusuke Suzuki <utatane.tea@gmail.com>\n  Copyright (C) 2013 Alex Seville <hi@alexanderseville.com>\n  Copyright (C) 2014 Thiago de Arruda <tpadilha84@gmail.com>\n\n  Redistribution and use in source and binary forms, with or without\n  modification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n  ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n/**\n * Escope (<a href=\"http://github.com/estools/escope\">escope</a>) is an <a\n * href=\"http://www.ecma-international.org/publications/standards/Ecma-262.htm\">ECMAScript</a>\n * scope analyzer extracted from the <a\n * href=\"http://github.com/estools/esmangle\">esmangle project</a/>.\n * <p>\n * <em>escope</em> finds lexical scopes in a source program, i.e. areas of that\n * program where different occurrences of the same identifier refer to the same\n * variable. With each scope the contained variables are collected, and each\n * identifier reference in code is linked to its corresponding variable (if\n * possible).\n * <p>\n * <em>escope</em> works on a syntax tree of the parsed source code which has\n * to adhere to the <a\n * href=\"https://developer.mozilla.org/en-US/docs/SpiderMonkey/Parser_API\">\n * Mozilla Parser API</a>. E.g. <a href=\"https://github.com/eslint/espree\">espree</a> is a parser\n * that produces such syntax trees.\n * <p>\n * The main interface is the {@link analyze} function.\n * @module escope\n */\n/* eslint no-underscore-dangle: [\"error\", { \"allow\": [\"__currentScope\"] }] */\n\nimport assert from \"assert\";\n\nimport ScopeManager from \"./scope-manager.js\";\nimport Referencer from \"./referencer.js\";\nimport Reference from \"./reference.js\";\nimport Variable from \"./variable.js\";\n\nimport eslintScopeVersion from \"./version.js\";\n\n/**\n * Set the default options\n * @returns {Object} options\n */\nfunction defaultOptions() {\n    return {\n        optimistic: false,\n        directive: false,\n        nodejsScope: false,\n        impliedStrict: false,\n        sourceType: \"script\", // one of ['script', 'module', 'commonjs']\n        ecmaVersion: 5,\n        childVisitorKeys: null,\n        fallback: \"iteration\"\n    };\n}\n\n/**\n * Preform deep update on option object\n * @param {Object} target Options\n * @param {Object} override Updates\n * @returns {Object} Updated options\n */\nfunction updateDeeply(target, override) {\n\n    /**\n     * Is hash object\n     * @param {Object} value Test value\n     * @returns {boolean} Result\n     */\n    function isHashObject(value) {\n        return typeof value === \"object\" && value instanceof Object && !(value instanceof Array) && !(value instanceof RegExp);\n    }\n\n    for (const key in override) {\n        if (Object.prototype.hasOwnProperty.call(override, key)) {\n            const val = override[key];\n\n            if (isHashObject(val)) {\n                if (isHashObject(target[key])) {\n                    updateDeeply(target[key], val);\n                } else {\n                    target[key] = updateDeeply({}, val);\n                }\n            } else {\n                target[key] = val;\n            }\n        }\n    }\n    return target;\n}\n\n/**\n * Main interface function. Takes an Espree syntax tree and returns the\n * analyzed scopes.\n * @function analyze\n * @param {espree.Tree} tree Abstract Syntax Tree\n * @param {Object} providedOptions Options that tailor the scope analysis\n * @param {boolean} [providedOptions.optimistic=false] the optimistic flag\n * @param {boolean} [providedOptions.directive=false] the directive flag\n * @param {boolean} [providedOptions.ignoreEval=false] whether to check 'eval()' calls\n * @param {boolean} [providedOptions.nodejsScope=false] whether the whole\n * script is executed under node.js environment. When enabled, escope adds\n * a function scope immediately following the global scope.\n * @param {boolean} [providedOptions.impliedStrict=false] implied strict mode\n * (if ecmaVersion >= 5).\n * @param {string} [providedOptions.sourceType='script'] the source type of the script. one of 'script', 'module', and 'commonjs'\n * @param {number} [providedOptions.ecmaVersion=5] which ECMAScript version is considered\n * @param {Object} [providedOptions.childVisitorKeys=null] Additional known visitor keys. See [esrecurse](https://github.com/estools/esrecurse)'s the `childVisitorKeys` option.\n * @param {string} [providedOptions.fallback='iteration'] A kind of the fallback in order to encounter with unknown node. See [esrecurse](https://github.com/estools/esrecurse)'s the `fallback` option.\n * @returns {ScopeManager} ScopeManager\n */\nfunction analyze(tree, providedOptions) {\n    const options = updateDeeply(defaultOptions(), providedOptions);\n    const scopeManager = new ScopeManager(options);\n    const referencer = new Referencer(options, scopeManager);\n\n    referencer.visit(tree);\n\n    assert(scopeManager.__currentScope === null, \"currentScope should be null.\");\n\n    return scopeManager;\n}\n\nexport {\n\n    /** @name module:escope.version */\n    eslintScopeVersion as version,\n\n    /** @name module:escope.Reference */\n    Reference,\n\n    /** @name module:escope.Variable */\n    Variable,\n\n    /** @name module:escope.ScopeManager */\n    ScopeManager,\n\n    /** @name module:escope.Referencer */\n    Referencer,\n\n    analyze\n};\n\n/** @name module:escope.Definition */\nexport { Definition } from \"./definition.js\";\n\n/** @name module:escope.PatternVisitor */\nexport { default as PatternVisitor } from \"./pattern-visitor.js\";\n\n/** @name module:escope.Scope */\nexport { Scope } from \"./scope.js\";\n\n/* vim: set sw=4 ts=4 et tw=80 : */\n/lib/referencer.jsL\u000e/*\n  Copyright (C) 2015 Yusuke Suzuki <utatane.tea@gmail.com>\n\n  Redistribution and use in source and binary forms, with or without\n  modification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n  ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n/* eslint-disable no-underscore-dangle */\n/* eslint-disable no-undefined */\n\nimport estraverse from \"estraverse\";\nimport esrecurse from \"esrecurse\";\nimport Reference from \"./reference.js\";\nimport Variable from \"./variable.js\";\nimport PatternVisitor from \"./pattern-visitor.js\";\nimport { Definition, ParameterDefinition } from \"./definition.js\";\nimport assert from \"assert\";\n\nconst { Syntax } = estraverse;\n\n/**\n * Traverse identifier in pattern\n * @param {Object} options options\n * @param {pattern} rootPattern root pattern\n * @param {Refencer} referencer referencer\n * @param {callback} callback callback\n * @returns {void}\n */\nfunction traverseIdentifierInPattern(options, rootPattern, referencer, callback) {\n\n    // Call the callback at left hand identifier nodes, and Collect right hand nodes.\n    const visitor = new PatternVisitor(options, rootPattern, callback);\n\n    visitor.visit(rootPattern);\n\n    // Process the right hand nodes recursively.\n    if (referencer !== null && referencer !== undefined) {\n        visitor.rightHandNodes.forEach(referencer.visit, referencer);\n    }\n}\n\n// Importing ImportDeclaration.\n// http://people.mozilla.org/~jorendorff/es6-draft.html#sec-moduledeclarationinstantiation\n// https://github.com/estree/estree/blob/master/es6.md#importdeclaration\n// FIXME: Now, we don't create module environment, because the context is\n// implementation dependent.\n\nclass Importer extends esrecurse.Visitor {\n    constructor(declaration, referencer) {\n        super(null, referencer.options);\n        this.declaration = declaration;\n        this.referencer = referencer;\n    }\n\n    visitImport(id, specifier) {\n        this.referencer.visitPattern(id, pattern => {\n            this.referencer.currentScope().__define(pattern,\n                new Definition(\n                    Variable.ImportBinding,\n                    pattern,\n                    specifier,\n                    this.declaration,\n                    null,\n                    null\n                ));\n        });\n    }\n\n    ImportNamespaceSpecifier(node) {\n        const local = (node.local || node.id);\n\n        if (local) {\n            this.visitImport(local, node);\n        }\n    }\n\n    ImportDefaultSpecifier(node) {\n        const local = (node.local || node.id);\n\n        this.visitImport(local, node);\n    }\n\n    ImportSpecifier(node) {\n        const local = (node.local || node.id);\n\n        if (node.name) {\n            this.visitImport(node.name, node);\n        } else {\n            this.visitImport(local, node);\n        }\n    }\n}\n\n// Referencing variables and creating bindings.\nclass Referencer extends esrecurse.Visitor {\n    constructor(options, scopeManager) {\n        super(null, options);\n        this.options = options;\n        this.scopeManager = scopeManager;\n        this.parent = null;\n        this.isInnerMethodDefinition = false;\n    }\n\n    currentScope() {\n        return this.scopeManager.__currentScope;\n    }\n\n    close(node) {\n        while (this.currentScope() && node === this.currentScope().block) {\n            this.scopeManager.__currentScope = this.currentScope().__close(this.scopeManager);\n        }\n    }\n\n    pushInnerMethodDefinition(isInnerMethodDefinition) {\n        const previous = this.isInnerMethodDefinition;\n\n        this.isInnerMethodDefinition = isInnerMethodDefinition;\n        return previous;\n    }\n\n    popInnerMethodDefinition(isInnerMethodDefinition) {\n        this.isInnerMethodDefinition = isInnerMethodDefinition;\n    }\n\n    referencingDefaultValue(pattern, assignments, maybeImplicitGlobal, init) {\n        const scope = this.currentScope();\n\n        assignments.forEach(assignment => {\n            scope.__referencing(\n                pattern,\n                Reference.WRITE,\n                assignment.right,\n                maybeImplicitGlobal,\n                pattern !== assignment.left,\n                init\n            );\n        });\n    }\n\n    visitPattern(node, options, callback) {\n        let visitPatternOptions = options;\n        let visitPatternCallback = callback;\n\n        if (typeof options === \"function\") {\n            visitPatternCallback = options;\n            visitPatternOptions = { processRightHandNodes: false };\n        }\n\n        traverseIdentifierInPattern(\n            this.options,\n            node,\n            visitPatternOptions.processRightHandNodes ? this : null,\n            visitPatternCallback\n        );\n    }\n\n    visitFunction(node) {\n        let i, iz;\n\n        // FunctionDeclaration name is defined in upper scope\n        // NOTE: Not referring variableScope. It is intended.\n        // Since\n        //  in ES5, FunctionDeclaration should be in FunctionBody.\n        //  in ES6, FunctionDeclaration should be block scoped.\n\n        if (node.type === Syntax.FunctionDeclaration) {\n\n            // id is defined in upper scope\n            this.currentScope().__define(node.id,\n                new Definition(\n                    Variable.FunctionName,\n                    node.id,\n                    node,\n                    null,\n                    null,\n                    null\n                ));\n        }\n\n        // FunctionExpression with name creates its special scope;\n        // FunctionExpressionNameScope.\n        if (node.type === Syntax.FunctionExpression && node.id) {\n            this.scopeManager.__nestFunctionExpressionNameScope(node);\n        }\n\n        // Consider this function is in the MethodDefinition.\n        this.scopeManager.__nestFunctionScope(node, this.isInnerMethodDefinition);\n\n        const that = this;\n\n        /**\n         * Visit pattern callback\n         * @param {pattern} pattern pattern\n         * @param {Object} info info\n         * @returns {void}\n         */\n        function visitPatternCallback(pattern, info) {\n            that.currentScope().__define(pattern,\n                new ParameterDefinition(\n                    pattern,\n                    node,\n                    i,\n                    info.rest\n                ));\n\n            that.referencingDefaultValue(pattern, info.assignments, null, true);\n        }\n\n        // Process parameter declarations.\n        for (i = 0, iz = node.params.length; i < iz; ++i) {\n            this.visitPattern(node.params[i], { processRightHandNodes: true }, visitPatternCallback);\n        }\n\n        // if there's a rest argument, add that\n        if (node.rest) {\n            this.visitPattern({\n                type: \"RestElement\",\n                argument: node.rest\n            }, pattern => {\n                this.currentScope().__define(pattern,\n                    new ParameterDefinition(\n                        pattern,\n                        node,\n                        node.params.length,\n                        true\n                    ));\n            });\n        }\n\n        // In TypeScript there are a number of function-like constructs which have no body,\n        // so check it exists before traversing\n        if (node.body) {\n\n            // Skip BlockStatement to prevent creating BlockStatement scope.\n            if (node.body.type === Syntax.BlockStatement) {\n                this.visitChildren(node.body);\n            } else {\n                this.visit(node.body);\n            }\n        }\n\n        this.close(node);\n    }\n\n    visitClass(node) {\n        if (node.type === Syntax.ClassDeclaration) {\n            this.currentScope().__define(node.id,\n                new Definition(\n                    Variable.ClassName,\n                    node.id,\n                    node,\n                    null,\n                    null,\n                    null\n                ));\n        }\n\n        this.visit(node.superClass);\n\n        this.scopeManager.__nestClassScope(node);\n\n        if (node.id) {\n            this.currentScope().__define(node.id,\n                new Definition(\n                    Variable.ClassName,\n                    node.id,\n                    node\n                ));\n        }\n        this.visit(node.body);\n\n        this.close(node);\n    }\n\n    visitProperty(node) {\n        let previous;\n\n        if (node.computed) {\n            this.visit(node.key);\n        }\n\n        const isMethodDefinition = node.type === Syntax.MethodDefinition;\n\n        if (isMethodDefinition) {\n            previous = this.pushInnerMethodDefinition(true);\n        }\n        this.visit(node.value);\n        if (isMethodDefinition) {\n            this.popInnerMethodDefinition(previous);\n        }\n    }\n\n    visitForIn(node) {\n        if (node.left.type === Syntax.VariableDeclaration && node.left.kind !== \"var\") {\n            this.scopeManager.__nestForScope(node);\n        }\n\n        if (node.left.type === Syntax.VariableDeclaration) {\n            this.visit(node.left);\n            this.visitPattern(node.left.declarations[0].id, pattern => {\n                this.currentScope().__referencing(pattern, Reference.WRITE, node.right, null, true, true);\n            });\n        } else {\n            this.visitPattern(node.left, { processRightHandNodes: true }, (pattern, info) => {\n                let maybeImplicitGlobal = null;\n\n                if (!this.currentScope().isStrict) {\n                    maybeImplicitGlobal = {\n                        pattern,\n                        node\n                    };\n                }\n                this.referencingDefaultValue(pattern, info.assignments, maybeImplicitGlobal, false);\n                this.currentScope().__referencing(pattern, Reference.WRITE, node.right, maybeImplicitGlobal, true, false);\n            });\n        }\n        this.visit(node.right);\n        this.visit(node.body);\n\n        this.close(node);\n    }\n\n    visitVariableDeclaration(variableTargetScope, type, node, index) {\n\n        const decl = node.declarations[index];\n        const init = decl.init;\n\n        this.visitPattern(decl.id, { processRightHandNodes: true }, (pattern, info) => {\n            variableTargetScope.__define(\n                pattern,\n                new Definition(\n                    type,\n                    pattern,\n                    decl,\n                    node,\n                    index,\n                    node.kind\n                )\n            );\n\n            this.referencingDefaultValue(pattern, info.assignments, null, true);\n            if (init) {\n                this.currentScope().__referencing(pattern, Reference.WRITE, init, null, !info.topLevel, true);\n            }\n        });\n    }\n\n    AssignmentExpression(node) {\n        if (PatternVisitor.isPattern(node.left)) {\n            if (node.operator === \"=\") {\n                this.visitPattern(node.left, { processRightHandNodes: true }, (pattern, info) => {\n                    let maybeImplicitGlobal = null;\n\n                    if (!this.currentScope().isStrict) {\n                        maybeImplicitGlobal = {\n                            pattern,\n                            node\n                        };\n                    }\n                    this.referencingDefaultValue(pattern, info.assignments, maybeImplicitGlobal, false);\n                    this.currentScope().__referencing(pattern, Reference.WRITE, node.right, maybeImplicitGlobal, !info.topLevel, false);\n                });\n            } else {\n                this.currentScope().__referencing(node.left, Reference.RW, node.right);\n            }\n        } else {\n            this.visit(node.left);\n        }\n        this.visit(node.right);\n    }\n\n    CatchClause(node) {\n        this.scopeManager.__nestCatchScope(node);\n\n        this.visitPattern(node.param, { processRightHandNodes: true }, (pattern, info) => {\n            this.currentScope().__define(pattern,\n                new Definition(\n                    Variable.CatchClause,\n                    node.param,\n                    node,\n                    null,\n                    null,\n                    null\n                ));\n            this.referencingDefaultValue(pattern, info.assignments, null, true);\n        });\n        this.visit(node.body);\n\n        this.close(node);\n    }\n\n    Program(node) {\n        this.scopeManager.__nestGlobalScope(node);\n\n        if (this.scopeManager.__isNodejsScope()) {\n\n            // Force strictness of GlobalScope to false when using node.js scope.\n            this.currentScope().isStrict = false;\n            this.scopeManager.__nestFunctionScope(node, false);\n        }\n\n        if (this.scopeManager.__isES6() && this.scopeManager.isModule()) {\n            this.scopeManager.__nestModuleScope(node);\n        }\n\n        if (this.scopeManager.isStrictModeSupported() && this.scopeManager.isImpliedStrict()) {\n            this.currentScope().isStrict = true;\n        }\n\n        this.visitChildren(node);\n        this.close(node);\n    }\n\n    Identifier(node) {\n        this.currentScope().__referencing(node);\n    }\n\n    // eslint-disable-next-line class-methods-use-this\n    PrivateIdentifier() {\n\n        // Do nothing.\n    }\n\n    UpdateExpression(node) {\n        if (PatternVisitor.isPattern(node.argument)) {\n            this.currentScope().__referencing(node.argument, Reference.RW, null);\n        } else {\n            this.visitChildren(node);\n        }\n    }\n\n    MemberExpression(node) {\n        this.visit(node.object);\n        if (node.computed) {\n            this.visit(node.property);\n        }\n    }\n\n    Property(node) {\n        this.visitProperty(node);\n    }\n\n    PropertyDefinition(node) {\n        const { computed, key, value } = node;\n\n        if (computed) {\n            this.visit(key);\n        }\n        if (value) {\n            this.scopeManager.__nestClassFieldInitializerScope(value);\n            this.visit(value);\n            this.close(value);\n        }\n    }\n\n    StaticBlock(node) {\n        this.scopeManager.__nestClassStaticBlockScope(node);\n\n        this.visitChildren(node);\n\n        this.close(node);\n    }\n\n    MethodDefinition(node) {\n        this.visitProperty(node);\n    }\n\n    BreakStatement() {} // eslint-disable-line class-methods-use-this\n\n    ContinueStatement() {} // eslint-disable-line class-methods-use-this\n\n    LabeledStatement(node) {\n        this.visit(node.body);\n    }\n\n    ForStatement(node) {\n\n        // Create ForStatement declaration.\n        // NOTE: In ES6, ForStatement dynamically generates\n        // per iteration environment. However, escope is\n        // a static analyzer, we only generate one scope for ForStatement.\n        if (node.init && node.init.type === Syntax.VariableDeclaration && node.init.kind !== \"var\") {\n            this.scopeManager.__nestForScope(node);\n        }\n\n        this.visitChildren(node);\n\n        this.close(node);\n    }\n\n    ClassExpression(node) {\n        this.visitClass(node);\n    }\n\n    ClassDeclaration(node) {\n        this.visitClass(node);\n    }\n\n    CallExpression(node) {\n\n        // Check this is direct call to eval\n        if (!this.scopeManager.__ignoreEval() && node.callee.type === Syntax.Identifier && node.callee.name === \"eval\") {\n\n            // NOTE: This should be `variableScope`. Since direct eval call always creates Lexical environment and\n            // let / const should be enclosed into it. Only VariableDeclaration affects on the caller's environment.\n            this.currentScope().variableScope.__detectEval();\n        }\n        this.visitChildren(node);\n    }\n\n    BlockStatement(node) {\n        if (this.scopeManager.__isES6()) {\n            this.scopeManager.__nestBlockScope(node);\n        }\n\n        this.visitChildren(node);\n\n        this.close(node);\n    }\n\n    ThisExpression() {\n        this.currentScope().variableScope.__detectThis();\n    }\n\n    WithStatement(node) {\n        this.visit(node.object);\n\n        // Then nest scope for WithStatement.\n        this.scopeManager.__nestWithScope(node);\n\n        this.visit(node.body);\n\n        this.close(node);\n    }\n\n    VariableDeclaration(node) {\n        const variableTargetScope = (node.kind === \"var\") ? this.currentScope().variableScope : this.currentScope();\n\n        for (let i = 0, iz = node.declarations.length; i < iz; ++i) {\n            const decl = node.declarations[i];\n\n            this.visitVariableDeclaration(variableTargetScope, Variable.Variable, node, i);\n            if (decl.init) {\n                this.visit(decl.init);\n            }\n        }\n    }\n\n    // sec 13.11.8\n    SwitchStatement(node) {\n        this.visit(node.discriminant);\n\n        if (this.scopeManager.__isES6()) {\n            this.scopeManager.__nestSwitchScope(node);\n        }\n\n        for (let i = 0, iz = node.cases.length; i < iz; ++i) {\n            this.visit(node.cases[i]);\n        }\n\n        this.close(node);\n    }\n\n    FunctionDeclaration(node) {\n        this.visitFunction(node);\n    }\n\n    FunctionExpression(node) {\n        this.visitFunction(node);\n    }\n\n    ForOfStatement(node) {\n        this.visitForIn(node);\n    }\n\n    ForInStatement(node) {\n        this.visitForIn(node);\n    }\n\n    ArrowFunctionExpression(node) {\n        this.visitFunction(node);\n    }\n\n    ImportDeclaration(node) {\n        assert(this.scopeManager.__isES6() && this.scopeManager.isModule(), \"ImportDeclaration should appear when the mode is ES6 and in the module context.\");\n\n        const importer = new Importer(node, this);\n\n        importer.visit(node);\n    }\n\n    visitExportDeclaration(node) {\n        if (node.source) {\n            return;\n        }\n        if (node.declaration) {\n            this.visit(node.declaration);\n            return;\n        }\n\n        this.visitChildren(node);\n    }\n\n    // TODO: ExportDeclaration doesn't exist. for bc?\n    ExportDeclaration(node) {\n        this.visitExportDeclaration(node);\n    }\n\n    ExportAllDeclaration(node) {\n        this.visitExportDeclaration(node);\n    }\n\n    ExportDefaultDeclaration(node) {\n        this.visitExportDeclaration(node);\n    }\n\n    ExportNamedDeclaration(node) {\n        this.visitExportDeclaration(node);\n    }\n\n    ExportSpecifier(node) {\n\n        // TODO: `node.id` doesn't exist. for bc?\n        const local = (node.id || node.local);\n\n        this.visit(local);\n    }\n\n    MetaProperty() { // eslint-disable-line class-methods-use-this\n\n        // do nothing.\n    }\n}\n\nexport default Referencer;\n\n/* vim: set sw=4 ts=4 et tw=80 : */\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/ZXNsaW50LXZpc2l0b3Ita2V5c0AyLjEuMA==",
    "content": "/CHANGELOG.md\bsv2.1.0 - May 3, 2021\n\n* [`908fdf8`](https://github.com/eslint/eslint-visitor-keys/commit/908fdf8c0d9a352c696c8c1f4901280d1a0795f7) Update: add PrivateIdentifier and PropertyDefinition (#20) (Toru Nagashima)\n* [`2d7be11`](https://github.com/eslint/eslint-visitor-keys/commit/2d7be11e4d13ac702c9fe3c529cadbd75b370146) Chore: No longer test in Node.js 13 (#17) (Michaël De Boey)\n* [`b41b509`](https://github.com/eslint/eslint-visitor-keys/commit/b41b509b153ecd8d47af46a421122f64e93d4c67) Docs: Update required Node.js version (#15) (Michaël De Boey)\n\nv2.0.0 - August 14, 2020\n\n* [`fb86ca3`](https://github.com/eslint/eslint-visitor-keys/commit/fb86ca315daafc84e23ed9005db40b0892b972a6) Breaking: drop support for Node <10 (#13) (Kai Cataldo)\n* [`69383b3`](https://github.com/eslint/eslint-visitor-keys/commit/69383b372915e33ada094880ecc6b6e8f8c7ca4e) Chore: move to GitHub Actions (#14) (Kai Cataldo)\n\nv1.3.0 - June 19, 2020\n\n* [`c92dd7f`](https://github.com/eslint/eslint-visitor-keys/commit/c92dd7ff96f0044dba12d681406a025b92b4c437) Update: add `ChainExpression` node (#12) (Toru Nagashima)\n\nv1.2.0 - June 4, 2020\n\n* [`21f28bf`](https://github.com/eslint/eslint-visitor-keys/commit/21f28bf11be5329d740a8bf6bdbcd0ef13bbf1a2) Update: added exported in exportAllDeclaration key (#10) (Anix)\n\nv1.1.0 - August 13, 2019\n\n* [`9331cc0`](https://github.com/eslint/eslint-visitor-keys/commit/9331cc09e756e65b9044c9186445a474b037fac6) Update: add ImportExpression (#8) (Toru Nagashima)\n* [`5967f58`](https://github.com/eslint/eslint-visitor-keys/commit/5967f583b04f17fba9226aaa394e45d476d2b8af) Chore: add supported Node.js versions to CI (#7) (Kai Cataldo)\n* [`6f7c60f`](https://github.com/eslint/eslint-visitor-keys/commit/6f7c60fef2ceec9f6323202df718321cec45cab0) Upgrade: eslint-release@1.0.0 (#5) (Teddy Katz)\n\nv1.0.0 - December 18, 2017\n\n* 1f6bd38 Breaking: update keys (#4) (Toru Nagashima)\n\nv0.1.0 - November 17, 2017\n\n* 17b4a88 Chore: update `repository` field in package.json (#3) (Toru Nagashima)\n* a5a026b New: eslint-visitor-keys (#1) (Toru Nagashima)\n* a1a48b8 Update: Change license to Apache 2 (#2) (Ilya Volodin)\n* 2204715 Initial commit (Toru Nagashima)\n\n/README.md\n# eslint-visitor-keys\n\n[![npm version](https://img.shields.io/npm/v/eslint-visitor-keys.svg)](https://www.npmjs.com/package/eslint-visitor-keys)\n[![Downloads/month](https://img.shields.io/npm/dm/eslint-visitor-keys.svg)](http://www.npmtrends.com/eslint-visitor-keys)\n[![Build Status](https://travis-ci.org/eslint/eslint-visitor-keys.svg?branch=master)](https://travis-ci.org/eslint/eslint-visitor-keys)\n[![Dependency Status](https://david-dm.org/eslint/eslint-visitor-keys.svg)](https://david-dm.org/eslint/eslint-visitor-keys)\n\nConstants and utilities about visitor keys to traverse AST.\n\n## 💿 Installation\n\nUse [npm] to install.\n\n```bash\n$ npm install eslint-visitor-keys\n```\n\n### Requirements\n\n- [Node.js] 10.0.0 or later.\n\n## 📖 Usage\n\n```js\nconst evk = require(\"eslint-visitor-keys\")\n```\n\n### evk.KEYS\n\n> type: `{ [type: string]: string[] | undefined }`\n\nVisitor keys. This keys are frozen.\n\nThis is an object. Keys are the type of [ESTree] nodes. Their values are an array of property names which have child nodes.\n\nFor example:\n\n```\nconsole.log(evk.KEYS.AssignmentExpression) // → [\"left\", \"right\"]\n```\n\n### evk.getKeys(node)\n\n> type: `(node: object) => string[]`\n\nGet the visitor keys of a given AST node.\n\nThis is similar to `Object.keys(node)` of ES Standard, but some keys are excluded: `parent`, `leadingComments`, `trailingComments`, and names which start with `_`.\n\nThis will be used to traverse unknown nodes.\n\nFor example:\n\n```\nconst node = {\n    type: \"AssignmentExpression\",\n    left: { type: \"Identifier\", name: \"foo\" },\n    right: { type: \"Literal\", value: 0 }\n}\nconsole.log(evk.getKeys(node)) // → [\"type\", \"left\", \"right\"]\n```\n\n### evk.unionWith(additionalKeys)\n\n> type: `(additionalKeys: object) => { [type: string]: string[] | undefined }`\n\nMake the union set with `evk.KEYS` and the given keys.\n\n- The order of keys is, `additionalKeys` is at first, then `evk.KEYS` is concatenated after that.\n- It removes duplicated keys as keeping the first one.\n\nFor example:\n\n```\nconsole.log(evk.unionWith({\n    MethodDefinition: [\"decorators\"]\n})) // → { ..., MethodDefinition: [\"decorators\", \"key\", \"value\"], ... }\n```\n\n## 📰 Change log\n\nSee [GitHub releases](https://github.com/eslint/eslint-visitor-keys/releases).\n\n## 🍻 Contributing\n\nWelcome. See [ESLint contribution guidelines](https://eslint.org/docs/developer-guide/contributing/).\n\n### Development commands\n\n- `npm test` runs tests and measures code coverage.\n- `npm run lint` checks source codes with ESLint.\n- `npm run coverage` opens the code coverage report of the previous test with your default browser.\n- `npm run release` publishes this package to [npm] registory.\n\n\n[npm]: https://www.npmjs.com/\n[Node.js]: https://nodejs.org/en/\n[ESTree]: https://github.com/estree/estree\n/LICENSE,I                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"{}\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright contributors\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n/lib/index.js\b/**\n * @author Toru Nagashima <https://github.com/mysticatea>\n * See LICENSE file in root directory for full license.\n */\n\"use strict\";\n\nconst KEYS = require(\"./visitor-keys.json\");\n\n// Types.\nconst NODE_TYPES = Object.freeze(Object.keys(KEYS));\n\n// Freeze the keys.\nfor (const type of NODE_TYPES) {\n    Object.freeze(KEYS[type]);\n}\nObject.freeze(KEYS);\n\n// List to ignore keys.\nconst KEY_BLACKLIST = new Set([\n    \"parent\",\n    \"leadingComments\",\n    \"trailingComments\"\n]);\n\n/**\n * Check whether a given key should be used or not.\n * @param {string} key The key to check.\n * @returns {boolean} `true` if the key should be used.\n */\nfunction filterKey(key) {\n    return !KEY_BLACKLIST.has(key) && key[0] !== \"_\";\n}\n\n//------------------------------------------------------------------------------\n// Public interfaces\n//------------------------------------------------------------------------------\n\nmodule.exports = Object.freeze({\n\n    /**\n     * Visitor keys.\n     * @type {{ [type: string]: string[] | undefined }}\n     */\n    KEYS,\n\n    /**\n     * Get visitor keys of a given node.\n     * @param {Object} node The AST node to get keys.\n     * @returns {string[]} Visitor keys of the node.\n     */\n    getKeys(node) {\n        return Object.keys(node).filter(filterKey);\n    },\n\n    // Disable valid-jsdoc rule because it reports syntax error on the type of @returns.\n    // eslint-disable-next-line valid-jsdoc\n    /**\n     * Make the union set with `KEYS` and given keys.\n     * @param {Object} additionalKeys The additional keys.\n     * @returns {{ [type: string]: string[] | undefined }} The union set.\n     */\n    unionWith(additionalKeys) {\n        const retv = Object.assign({}, KEYS);\n\n        for (const type of Object.keys(additionalKeys)) {\n            if (retv.hasOwnProperty(type)) {\n                const keys = new Set(additionalKeys[type]);\n\n                for (const key of retv[type]) {\n                    keys.add(key);\n                }\n\n                retv[type] = Object.freeze(Array.from(keys));\n            } else {\n                retv[type] = Object.freeze(Array.from(additionalKeys[type]));\n            }\n        }\n\n        return Object.freeze(retv);\n    }\n});\n/lib/visitor-keys.json\u0013{\n    \"AssignmentExpression\": [\n        \"left\",\n        \"right\"\n    ],\n    \"AssignmentPattern\": [\n        \"left\",\n        \"right\"\n    ],\n    \"ArrayExpression\": [\n        \"elements\"\n    ],\n    \"ArrayPattern\": [\n        \"elements\"\n    ],\n    \"ArrowFunctionExpression\": [\n        \"params\",\n        \"body\"\n    ],\n    \"AwaitExpression\": [\n        \"argument\"\n    ],\n    \"BlockStatement\": [\n        \"body\"\n    ],\n    \"BinaryExpression\": [\n        \"left\",\n        \"right\"\n    ],\n    \"BreakStatement\": [\n        \"label\"\n    ],\n    \"CallExpression\": [\n        \"callee\",\n        \"arguments\"\n    ],\n    \"CatchClause\": [\n        \"param\",\n        \"body\"\n    ],\n    \"ChainExpression\": [\n        \"expression\"\n    ],\n    \"ClassBody\": [\n        \"body\"\n    ],\n    \"ClassDeclaration\": [\n        \"id\",\n        \"superClass\",\n        \"body\"\n    ],\n    \"ClassExpression\": [\n        \"id\",\n        \"superClass\",\n        \"body\"\n    ],\n    \"ConditionalExpression\": [\n        \"test\",\n        \"consequent\",\n        \"alternate\"\n    ],\n    \"ContinueStatement\": [\n        \"label\"\n    ],\n    \"DebuggerStatement\": [],\n    \"DoWhileStatement\": [\n        \"body\",\n        \"test\"\n    ],\n    \"EmptyStatement\": [],\n    \"ExportAllDeclaration\": [\n        \"exported\",\n        \"source\"\n    ],\n    \"ExportDefaultDeclaration\": [\n        \"declaration\"\n    ],\n    \"ExportNamedDeclaration\": [\n        \"declaration\",\n        \"specifiers\",\n        \"source\"\n    ],\n    \"ExportSpecifier\": [\n        \"exported\",\n        \"local\"\n    ],\n    \"ExpressionStatement\": [\n        \"expression\"\n    ],\n    \"ExperimentalRestProperty\": [\n        \"argument\"\n    ],\n    \"ExperimentalSpreadProperty\": [\n        \"argument\"\n    ],\n    \"ForStatement\": [\n        \"init\",\n        \"test\",\n        \"update\",\n        \"body\"\n    ],\n    \"ForInStatement\": [\n        \"left\",\n        \"right\",\n        \"body\"\n    ],\n    \"ForOfStatement\": [\n        \"left\",\n        \"right\",\n        \"body\"\n    ],\n    \"FunctionDeclaration\": [\n        \"id\",\n        \"params\",\n        \"body\"\n    ],\n    \"FunctionExpression\": [\n        \"id\",\n        \"params\",\n        \"body\"\n    ],\n    \"Identifier\": [],\n    \"IfStatement\": [\n        \"test\",\n        \"consequent\",\n        \"alternate\"\n    ],\n    \"ImportDeclaration\": [\n        \"specifiers\",\n        \"source\"\n    ],\n    \"ImportDefaultSpecifier\": [\n        \"local\"\n    ],\n    \"ImportExpression\": [\n        \"source\"\n    ],\n    \"ImportNamespaceSpecifier\": [\n        \"local\"\n    ],\n    \"ImportSpecifier\": [\n        \"imported\",\n        \"local\"\n    ],\n    \"JSXAttribute\": [\n        \"name\",\n        \"value\"\n    ],\n    \"JSXClosingElement\": [\n        \"name\"\n    ],\n    \"JSXElement\": [\n        \"openingElement\",\n        \"children\",\n        \"closingElement\"\n    ],\n    \"JSXEmptyExpression\": [],\n    \"JSXExpressionContainer\": [\n        \"expression\"\n    ],\n    \"JSXIdentifier\": [],\n    \"JSXMemberExpression\": [\n        \"object\",\n        \"property\"\n    ],\n    \"JSXNamespacedName\": [\n        \"namespace\",\n        \"name\"\n    ],\n    \"JSXOpeningElement\": [\n        \"name\",\n        \"attributes\"\n    ],\n    \"JSXSpreadAttribute\": [\n        \"argument\"\n    ],\n    \"JSXText\": [],\n    \"JSXFragment\": [\n        \"openingFragment\",\n        \"children\",\n        \"closingFragment\"\n    ],\n    \"Literal\": [],\n    \"LabeledStatement\": [\n        \"label\",\n        \"body\"\n    ],\n    \"LogicalExpression\": [\n        \"left\",\n        \"right\"\n    ],\n    \"MemberExpression\": [\n        \"object\",\n        \"property\"\n    ],\n    \"MetaProperty\": [\n        \"meta\",\n        \"property\"\n    ],\n    \"MethodDefinition\": [\n        \"key\",\n        \"value\"\n    ],\n    \"NewExpression\": [\n        \"callee\",\n        \"arguments\"\n    ],\n    \"ObjectExpression\": [\n        \"properties\"\n    ],\n    \"ObjectPattern\": [\n        \"properties\"\n    ],\n    \"PrivateIdentifier\": [],\n    \"Program\": [\n        \"body\"\n    ],\n    \"Property\": [\n        \"key\",\n        \"value\"\n    ],\n    \"PropertyDefinition\": [\n        \"key\",\n        \"value\"\n    ],\n    \"RestElement\": [\n        \"argument\"\n    ],\n    \"ReturnStatement\": [\n        \"argument\"\n    ],\n    \"SequenceExpression\": [\n        \"expressions\"\n    ],\n    \"SpreadElement\": [\n        \"argument\"\n    ],\n    \"Super\": [],\n    \"SwitchStatement\": [\n        \"discriminant\",\n        \"cases\"\n    ],\n    \"SwitchCase\": [\n        \"test\",\n        \"consequent\"\n    ],\n    \"TaggedTemplateExpression\": [\n        \"tag\",\n        \"quasi\"\n    ],\n    \"TemplateElement\": [],\n    \"TemplateLiteral\": [\n        \"quasis\",\n        \"expressions\"\n    ],\n    \"ThisExpression\": [],\n    \"ThrowStatement\": [\n        \"argument\"\n    ],\n    \"TryStatement\": [\n        \"block\",\n        \"handler\",\n        \"finalizer\"\n    ],\n    \"UnaryExpression\": [\n        \"argument\"\n    ],\n    \"UpdateExpression\": [\n        \"argument\"\n    ],\n    \"VariableDeclaration\": [\n        \"declarations\"\n    ],\n    \"VariableDeclarator\": [\n        \"id\",\n        \"init\"\n    ],\n    \"WhileStatement\": [\n        \"test\",\n        \"body\"\n    ],\n    \"WithStatement\": [\n        \"object\",\n        \"body\"\n    ],\n    \"YieldExpression\": [\n        \"argument\"\n    ]\n}\n/package.json\u0004{\n  \"name\": \"eslint-visitor-keys\",\n  \"version\": \"2.1.0\",\n  \"description\": \"Constants and utilities about visitor keys to traverse AST.\",\n  \"main\": \"lib/index.js\",\n  \"files\": [\n    \"lib\"\n  ],\n  \"engines\": {\n    \"node\": \">=10\"\n  },\n  \"dependencies\": {},\n  \"devDependencies\": {\n    \"eslint\": \"^4.7.2\",\n    \"eslint-config-eslint\": \"^4.0.0\",\n    \"eslint-release\": \"^1.0.0\",\n    \"mocha\": \"^3.5.3\",\n    \"nyc\": \"^11.2.1\",\n    \"opener\": \"^1.4.3\"\n  },\n  \"scripts\": {\n    \"lint\": \"eslint lib tests/lib\",\n    \"test\": \"nyc mocha tests/lib\",\n    \"coverage\": \"nyc report --reporter lcov && opener coverage/lcov-report/index.html\",\n    \"generate-release\": \"eslint-generate-release\",\n    \"generate-alpharelease\": \"eslint-generate-prerelease alpha\",\n    \"generate-betarelease\": \"eslint-generate-prerelease beta\",\n    \"generate-rcrelease\": \"eslint-generate-prerelease rc\",\n    \"publish-release\": \"eslint-publish-release\"\n  },\n  \"repository\": \"eslint/eslint-visitor-keys\",\n  \"keywords\": [],\n  \"author\": \"Toru Nagashima (https://github.com/mysticatea)\",\n  \"license\": \"Apache-2.0\",\n  \"bugs\": {\n    \"url\": \"https://github.com/eslint/eslint-visitor-keys/issues\"\n  },\n  \"homepage\": \"https://github.com/eslint/eslint-visitor-keys#readme\"\n}\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/ZXNsaW50LXZpc2l0b3Ita2V5c0AzLjMuMA==",
    "content": "/dist/index.d.ts\u0002`/**\n * Get visitor keys of a given node.\n * @param {object} node The AST node to get keys.\n * @returns {readonly string[]} Visitor keys of the node.\n */\nexport function getKeys(node: object): readonly string[];\n/**\n * Make the union set with `KEYS` and given keys.\n * @param {VisitorKeys} additionalKeys The additional keys.\n * @returns {VisitorKeys} The union set.\n */\nexport function unionWith(additionalKeys: VisitorKeys): VisitorKeys;\nexport { KEYS };\nexport type VisitorKeys = {\n    readonly [type: string]: readonly string[];\n};\nimport KEYS from \"./visitor-keys.js\";\n//# sourceMappingURL=index.d.ts.map/package.json\u0007e{\n  \"name\": \"eslint-visitor-keys\",\n  \"version\": \"3.3.0\",\n  \"description\": \"Constants and utilities about visitor keys to traverse AST.\",\n  \"type\": \"module\",\n  \"main\": \"dist/eslint-visitor-keys.cjs\",\n  \"types\": \"./dist/index.d.ts\",\n  \"exports\": {\n    \".\": [\n      {\n        \"import\": \"./lib/index.js\",\n        \"require\": \"./dist/eslint-visitor-keys.cjs\"\n      },\n      \"./dist/eslint-visitor-keys.cjs\"\n    ],\n    \"./package.json\": \"./package.json\"\n  },\n  \"files\": [\n    \"dist/index.d.ts\",\n    \"dist/visitor-keys.d.ts\",\n    \"dist/eslint-visitor-keys.cjs\",\n    \"lib\"\n  ],\n  \"engines\": {\n    \"node\": \"^12.22.0 || ^14.17.0 || >=16.0.0\"\n  },\n  \"devDependencies\": {\n    \"c8\": \"^7.7.3\",\n    \"eslint\": \"^7.29.0\",\n    \"eslint-config-eslint\": \"^7.0.0\",\n    \"eslint-plugin-jsdoc\": \"^35.4.0\",\n    \"eslint-plugin-node\": \"^11.1.0\",\n    \"eslint-release\": \"^3.2.0\",\n    \"mocha\": \"^9.0.1\",\n    \"opener\": \"^1.5.2\",\n    \"rollup\": \"^2.52.1\",\n    \"tsd\": \"^0.19.1\",\n    \"typescript\": \"^4.5.5\"\n  },\n  \"scripts\": {\n    \"prepare\": \"npm run build\",\n    \"build\": \"rollup -c && npm run tsc\",\n    \"lint\": \"eslint .\",\n    \"tsc\": \"tsc\",\n    \"tsd\": \"tsd\",\n    \"test\": \"mocha tests/lib/**/*.cjs && c8 mocha tests/lib/**/*.js && npm run tsd\",\n    \"coverage\": \"c8 report --reporter lcov && opener coverage/lcov-report/index.html\",\n    \"generate-release\": \"eslint-generate-release\",\n    \"generate-alpharelease\": \"eslint-generate-prerelease alpha\",\n    \"generate-betarelease\": \"eslint-generate-prerelease beta\",\n    \"generate-rcrelease\": \"eslint-generate-prerelease rc\",\n    \"publish-release\": \"eslint-publish-release\"\n  },\n  \"repository\": \"eslint/eslint-visitor-keys\",\n  \"keywords\": [],\n  \"author\": \"Toru Nagashima (https://github.com/mysticatea)\",\n  \"license\": \"Apache-2.0\",\n  \"bugs\": {\n    \"url\": \"https://github.com/eslint/eslint-visitor-keys/issues\"\n  },\n  \"homepage\": \"https://github.com/eslint/eslint-visitor-keys#readme\"\n}\n/lib/index.js\u0006/**\n * @author Toru Nagashima <https://github.com/mysticatea>\n * See LICENSE file in root directory for full license.\n */\nimport KEYS from \"./visitor-keys.js\";\n\n/**\n * @typedef {{ readonly [type: string]: ReadonlyArray<string> }} VisitorKeys\n */\n\n// List to ignore keys.\nconst KEY_BLACKLIST = new Set([\n    \"parent\",\n    \"leadingComments\",\n    \"trailingComments\"\n]);\n\n/**\n * Check whether a given key should be used or not.\n * @param {string} key The key to check.\n * @returns {boolean} `true` if the key should be used.\n */\nfunction filterKey(key) {\n    return !KEY_BLACKLIST.has(key) && key[0] !== \"_\";\n}\n\n/**\n * Get visitor keys of a given node.\n * @param {object} node The AST node to get keys.\n * @returns {readonly string[]} Visitor keys of the node.\n */\nexport function getKeys(node) {\n    return Object.keys(node).filter(filterKey);\n}\n\n// Disable valid-jsdoc rule because it reports syntax error on the type of @returns.\n// eslint-disable-next-line valid-jsdoc\n/**\n * Make the union set with `KEYS` and given keys.\n * @param {VisitorKeys} additionalKeys The additional keys.\n * @returns {VisitorKeys} The union set.\n */\nexport function unionWith(additionalKeys) {\n    const retv = /** @type {{\n        [type: string]: ReadonlyArray<string>\n    }} */ (Object.assign({}, KEYS));\n\n    for (const type of Object.keys(additionalKeys)) {\n        if (Object.prototype.hasOwnProperty.call(retv, type)) {\n            const keys = new Set(additionalKeys[type]);\n\n            for (const key of retv[type]) {\n                keys.add(key);\n            }\n\n            retv[type] = Object.freeze(Array.from(keys));\n        } else {\n            retv[type] = Object.freeze(Array.from(additionalKeys[type]));\n        }\n    }\n\n    return Object.freeze(retv);\n}\n\nexport { KEYS };\n/dist/eslint-visitor-keys.cjs\u001b'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n/**\n * @typedef {import('./index.js').VisitorKeys} VisitorKeys\n */\n\n/**\n * @type {VisitorKeys}\n */\nconst KEYS = {\n    AssignmentExpression: [\n        \"left\",\n        \"right\"\n    ],\n    AssignmentPattern: [\n        \"left\",\n        \"right\"\n    ],\n    ArrayExpression: [\n        \"elements\"\n    ],\n    ArrayPattern: [\n        \"elements\"\n    ],\n    ArrowFunctionExpression: [\n        \"params\",\n        \"body\"\n    ],\n    AwaitExpression: [\n        \"argument\"\n    ],\n    BlockStatement: [\n        \"body\"\n    ],\n    BinaryExpression: [\n        \"left\",\n        \"right\"\n    ],\n    BreakStatement: [\n        \"label\"\n    ],\n    CallExpression: [\n        \"callee\",\n        \"arguments\"\n    ],\n    CatchClause: [\n        \"param\",\n        \"body\"\n    ],\n    ChainExpression: [\n        \"expression\"\n    ],\n    ClassBody: [\n        \"body\"\n    ],\n    ClassDeclaration: [\n        \"id\",\n        \"superClass\",\n        \"body\"\n    ],\n    ClassExpression: [\n        \"id\",\n        \"superClass\",\n        \"body\"\n    ],\n    ConditionalExpression: [\n        \"test\",\n        \"consequent\",\n        \"alternate\"\n    ],\n    ContinueStatement: [\n        \"label\"\n    ],\n    DebuggerStatement: [],\n    DoWhileStatement: [\n        \"body\",\n        \"test\"\n    ],\n    EmptyStatement: [],\n    ExportAllDeclaration: [\n        \"exported\",\n        \"source\"\n    ],\n    ExportDefaultDeclaration: [\n        \"declaration\"\n    ],\n    ExportNamedDeclaration: [\n        \"declaration\",\n        \"specifiers\",\n        \"source\"\n    ],\n    ExportSpecifier: [\n        \"exported\",\n        \"local\"\n    ],\n    ExpressionStatement: [\n        \"expression\"\n    ],\n    ExperimentalRestProperty: [\n        \"argument\"\n    ],\n    ExperimentalSpreadProperty: [\n        \"argument\"\n    ],\n    ForStatement: [\n        \"init\",\n        \"test\",\n        \"update\",\n        \"body\"\n    ],\n    ForInStatement: [\n        \"left\",\n        \"right\",\n        \"body\"\n    ],\n    ForOfStatement: [\n        \"left\",\n        \"right\",\n        \"body\"\n    ],\n    FunctionDeclaration: [\n        \"id\",\n        \"params\",\n        \"body\"\n    ],\n    FunctionExpression: [\n        \"id\",\n        \"params\",\n        \"body\"\n    ],\n    Identifier: [],\n    IfStatement: [\n        \"test\",\n        \"consequent\",\n        \"alternate\"\n    ],\n    ImportDeclaration: [\n        \"specifiers\",\n        \"source\"\n    ],\n    ImportDefaultSpecifier: [\n        \"local\"\n    ],\n    ImportExpression: [\n        \"source\"\n    ],\n    ImportNamespaceSpecifier: [\n        \"local\"\n    ],\n    ImportSpecifier: [\n        \"imported\",\n        \"local\"\n    ],\n    JSXAttribute: [\n        \"name\",\n        \"value\"\n    ],\n    JSXClosingElement: [\n        \"name\"\n    ],\n    JSXElement: [\n        \"openingElement\",\n        \"children\",\n        \"closingElement\"\n    ],\n    JSXEmptyExpression: [],\n    JSXExpressionContainer: [\n        \"expression\"\n    ],\n    JSXIdentifier: [],\n    JSXMemberExpression: [\n        \"object\",\n        \"property\"\n    ],\n    JSXNamespacedName: [\n        \"namespace\",\n        \"name\"\n    ],\n    JSXOpeningElement: [\n        \"name\",\n        \"attributes\"\n    ],\n    JSXSpreadAttribute: [\n        \"argument\"\n    ],\n    JSXText: [],\n    JSXFragment: [\n        \"openingFragment\",\n        \"children\",\n        \"closingFragment\"\n    ],\n    JSXClosingFragment: [],\n    JSXOpeningFragment: [],\n    Literal: [],\n    LabeledStatement: [\n        \"label\",\n        \"body\"\n    ],\n    LogicalExpression: [\n        \"left\",\n        \"right\"\n    ],\n    MemberExpression: [\n        \"object\",\n        \"property\"\n    ],\n    MetaProperty: [\n        \"meta\",\n        \"property\"\n    ],\n    MethodDefinition: [\n        \"key\",\n        \"value\"\n    ],\n    NewExpression: [\n        \"callee\",\n        \"arguments\"\n    ],\n    ObjectExpression: [\n        \"properties\"\n    ],\n    ObjectPattern: [\n        \"properties\"\n    ],\n    PrivateIdentifier: [],\n    Program: [\n        \"body\"\n    ],\n    Property: [\n        \"key\",\n        \"value\"\n    ],\n    PropertyDefinition: [\n        \"key\",\n        \"value\"\n    ],\n    RestElement: [\n        \"argument\"\n    ],\n    ReturnStatement: [\n        \"argument\"\n    ],\n    SequenceExpression: [\n        \"expressions\"\n    ],\n    SpreadElement: [\n        \"argument\"\n    ],\n    StaticBlock: [\n        \"body\"\n    ],\n    Super: [],\n    SwitchStatement: [\n        \"discriminant\",\n        \"cases\"\n    ],\n    SwitchCase: [\n        \"test\",\n        \"consequent\"\n    ],\n    TaggedTemplateExpression: [\n        \"tag\",\n        \"quasi\"\n    ],\n    TemplateElement: [],\n    TemplateLiteral: [\n        \"quasis\",\n        \"expressions\"\n    ],\n    ThisExpression: [],\n    ThrowStatement: [\n        \"argument\"\n    ],\n    TryStatement: [\n        \"block\",\n        \"handler\",\n        \"finalizer\"\n    ],\n    UnaryExpression: [\n        \"argument\"\n    ],\n    UpdateExpression: [\n        \"argument\"\n    ],\n    VariableDeclaration: [\n        \"declarations\"\n    ],\n    VariableDeclarator: [\n        \"id\",\n        \"init\"\n    ],\n    WhileStatement: [\n        \"test\",\n        \"body\"\n    ],\n    WithStatement: [\n        \"object\",\n        \"body\"\n    ],\n    YieldExpression: [\n        \"argument\"\n    ]\n};\n\n// Types.\nconst NODE_TYPES = Object.keys(KEYS);\n\n// Freeze the keys.\nfor (const type of NODE_TYPES) {\n    Object.freeze(KEYS[type]);\n}\nObject.freeze(KEYS);\n\n/**\n * @author Toru Nagashima <https://github.com/mysticatea>\n * See LICENSE file in root directory for full license.\n */\n\n/**\n * @typedef {{ readonly [type: string]: ReadonlyArray<string> }} VisitorKeys\n */\n\n// List to ignore keys.\nconst KEY_BLACKLIST = new Set([\n    \"parent\",\n    \"leadingComments\",\n    \"trailingComments\"\n]);\n\n/**\n * Check whether a given key should be used or not.\n * @param {string} key The key to check.\n * @returns {boolean} `true` if the key should be used.\n */\nfunction filterKey(key) {\n    return !KEY_BLACKLIST.has(key) && key[0] !== \"_\";\n}\n\n/**\n * Get visitor keys of a given node.\n * @param {object} node The AST node to get keys.\n * @returns {readonly string[]} Visitor keys of the node.\n */\nfunction getKeys(node) {\n    return Object.keys(node).filter(filterKey);\n}\n\n// Disable valid-jsdoc rule because it reports syntax error on the type of @returns.\n// eslint-disable-next-line valid-jsdoc\n/**\n * Make the union set with `KEYS` and given keys.\n * @param {VisitorKeys} additionalKeys The additional keys.\n * @returns {VisitorKeys} The union set.\n */\nfunction unionWith(additionalKeys) {\n    const retv = /** @type {{\n        [type: string]: ReadonlyArray<string>\n    }} */ (Object.assign({}, KEYS));\n\n    for (const type of Object.keys(additionalKeys)) {\n        if (Object.prototype.hasOwnProperty.call(retv, type)) {\n            const keys = new Set(additionalKeys[type]);\n\n            for (const key of retv[type]) {\n                keys.add(key);\n            }\n\n            retv[type] = Object.freeze(Array.from(keys));\n        } else {\n            retv[type] = Object.freeze(Array.from(additionalKeys[type]));\n        }\n    }\n\n    return Object.freeze(retv);\n}\n\nexports.KEYS = KEYS;\nexports.getKeys = getKeys;\nexports.unionWith = unionWith;\n//# sourceMappingURL=eslint-visitor-keys.cjs.map\n/lib/visitor-keys.js\u0014e/**\n * @typedef {import('./index.js').VisitorKeys} VisitorKeys\n */\n\n/**\n * @type {VisitorKeys}\n */\nconst KEYS = {\n    AssignmentExpression: [\n        \"left\",\n        \"right\"\n    ],\n    AssignmentPattern: [\n        \"left\",\n        \"right\"\n    ],\n    ArrayExpression: [\n        \"elements\"\n    ],\n    ArrayPattern: [\n        \"elements\"\n    ],\n    ArrowFunctionExpression: [\n        \"params\",\n        \"body\"\n    ],\n    AwaitExpression: [\n        \"argument\"\n    ],\n    BlockStatement: [\n        \"body\"\n    ],\n    BinaryExpression: [\n        \"left\",\n        \"right\"\n    ],\n    BreakStatement: [\n        \"label\"\n    ],\n    CallExpression: [\n        \"callee\",\n        \"arguments\"\n    ],\n    CatchClause: [\n        \"param\",\n        \"body\"\n    ],\n    ChainExpression: [\n        \"expression\"\n    ],\n    ClassBody: [\n        \"body\"\n    ],\n    ClassDeclaration: [\n        \"id\",\n        \"superClass\",\n        \"body\"\n    ],\n    ClassExpression: [\n        \"id\",\n        \"superClass\",\n        \"body\"\n    ],\n    ConditionalExpression: [\n        \"test\",\n        \"consequent\",\n        \"alternate\"\n    ],\n    ContinueStatement: [\n        \"label\"\n    ],\n    DebuggerStatement: [],\n    DoWhileStatement: [\n        \"body\",\n        \"test\"\n    ],\n    EmptyStatement: [],\n    ExportAllDeclaration: [\n        \"exported\",\n        \"source\"\n    ],\n    ExportDefaultDeclaration: [\n        \"declaration\"\n    ],\n    ExportNamedDeclaration: [\n        \"declaration\",\n        \"specifiers\",\n        \"source\"\n    ],\n    ExportSpecifier: [\n        \"exported\",\n        \"local\"\n    ],\n    ExpressionStatement: [\n        \"expression\"\n    ],\n    ExperimentalRestProperty: [\n        \"argument\"\n    ],\n    ExperimentalSpreadProperty: [\n        \"argument\"\n    ],\n    ForStatement: [\n        \"init\",\n        \"test\",\n        \"update\",\n        \"body\"\n    ],\n    ForInStatement: [\n        \"left\",\n        \"right\",\n        \"body\"\n    ],\n    ForOfStatement: [\n        \"left\",\n        \"right\",\n        \"body\"\n    ],\n    FunctionDeclaration: [\n        \"id\",\n        \"params\",\n        \"body\"\n    ],\n    FunctionExpression: [\n        \"id\",\n        \"params\",\n        \"body\"\n    ],\n    Identifier: [],\n    IfStatement: [\n        \"test\",\n        \"consequent\",\n        \"alternate\"\n    ],\n    ImportDeclaration: [\n        \"specifiers\",\n        \"source\"\n    ],\n    ImportDefaultSpecifier: [\n        \"local\"\n    ],\n    ImportExpression: [\n        \"source\"\n    ],\n    ImportNamespaceSpecifier: [\n        \"local\"\n    ],\n    ImportSpecifier: [\n        \"imported\",\n        \"local\"\n    ],\n    JSXAttribute: [\n        \"name\",\n        \"value\"\n    ],\n    JSXClosingElement: [\n        \"name\"\n    ],\n    JSXElement: [\n        \"openingElement\",\n        \"children\",\n        \"closingElement\"\n    ],\n    JSXEmptyExpression: [],\n    JSXExpressionContainer: [\n        \"expression\"\n    ],\n    JSXIdentifier: [],\n    JSXMemberExpression: [\n        \"object\",\n        \"property\"\n    ],\n    JSXNamespacedName: [\n        \"namespace\",\n        \"name\"\n    ],\n    JSXOpeningElement: [\n        \"name\",\n        \"attributes\"\n    ],\n    JSXSpreadAttribute: [\n        \"argument\"\n    ],\n    JSXText: [],\n    JSXFragment: [\n        \"openingFragment\",\n        \"children\",\n        \"closingFragment\"\n    ],\n    JSXClosingFragment: [],\n    JSXOpeningFragment: [],\n    Literal: [],\n    LabeledStatement: [\n        \"label\",\n        \"body\"\n    ],\n    LogicalExpression: [\n        \"left\",\n        \"right\"\n    ],\n    MemberExpression: [\n        \"object\",\n        \"property\"\n    ],\n    MetaProperty: [\n        \"meta\",\n        \"property\"\n    ],\n    MethodDefinition: [\n        \"key\",\n        \"value\"\n    ],\n    NewExpression: [\n        \"callee\",\n        \"arguments\"\n    ],\n    ObjectExpression: [\n        \"properties\"\n    ],\n    ObjectPattern: [\n        \"properties\"\n    ],\n    PrivateIdentifier: [],\n    Program: [\n        \"body\"\n    ],\n    Property: [\n        \"key\",\n        \"value\"\n    ],\n    PropertyDefinition: [\n        \"key\",\n        \"value\"\n    ],\n    RestElement: [\n        \"argument\"\n    ],\n    ReturnStatement: [\n        \"argument\"\n    ],\n    SequenceExpression: [\n        \"expressions\"\n    ],\n    SpreadElement: [\n        \"argument\"\n    ],\n    StaticBlock: [\n        \"body\"\n    ],\n    Super: [],\n    SwitchStatement: [\n        \"discriminant\",\n        \"cases\"\n    ],\n    SwitchCase: [\n        \"test\",\n        \"consequent\"\n    ],\n    TaggedTemplateExpression: [\n        \"tag\",\n        \"quasi\"\n    ],\n    TemplateElement: [],\n    TemplateLiteral: [\n        \"quasis\",\n        \"expressions\"\n    ],\n    ThisExpression: [],\n    ThrowStatement: [\n        \"argument\"\n    ],\n    TryStatement: [\n        \"block\",\n        \"handler\",\n        \"finalizer\"\n    ],\n    UnaryExpression: [\n        \"argument\"\n    ],\n    UpdateExpression: [\n        \"argument\"\n    ],\n    VariableDeclaration: [\n        \"declarations\"\n    ],\n    VariableDeclarator: [\n        \"id\",\n        \"init\"\n    ],\n    WhileStatement: [\n        \"test\",\n        \"body\"\n    ],\n    WithStatement: [\n        \"object\",\n        \"body\"\n    ],\n    YieldExpression: [\n        \"argument\"\n    ]\n};\n\n// Types.\nconst NODE_TYPES = Object.keys(KEYS);\n\n// Freeze the keys.\nfor (const type of NODE_TYPES) {\n    Object.freeze(KEYS[type]);\n}\nObject.freeze(KEYS);\n\nexport default KEYS;\n/LICENSE,I                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"{}\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright contributors\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n/README.md\u000bT# eslint-visitor-keys\n\n[![npm version](https://img.shields.io/npm/v/eslint-visitor-keys.svg)](https://www.npmjs.com/package/eslint-visitor-keys)\n[![Downloads/month](https://img.shields.io/npm/dm/eslint-visitor-keys.svg)](http://www.npmtrends.com/eslint-visitor-keys)\n[![Build Status](https://travis-ci.org/eslint/eslint-visitor-keys.svg?branch=master)](https://travis-ci.org/eslint/eslint-visitor-keys)\n[![Dependency Status](https://david-dm.org/eslint/eslint-visitor-keys.svg)](https://david-dm.org/eslint/eslint-visitor-keys)\n\nConstants and utilities about visitor keys to traverse AST.\n\n## 💿 Installation\n\nUse [npm] to install.\n\n```bash\n$ npm install eslint-visitor-keys\n```\n\n### Requirements\n\n- [Node.js] `^12.22.0`, `^14.17.0`, or `>=16.0.0`\n\n\n## 📖 Usage\n\nTo use in an ESM file:\n\n```js\nimport * as evk from \"eslint-visitor-keys\"\n```\n\nTo use in a CommonJS file:\n\n```js\nconst evk = require(\"eslint-visitor-keys\")\n```\n\n### evk.KEYS\n\n> type: `{ [type: string]: string[] | undefined }`\n\nVisitor keys. This keys are frozen.\n\nThis is an object. Keys are the type of [ESTree] nodes. Their values are an array of property names which have child nodes.\n\nFor example:\n\n```\nconsole.log(evk.KEYS.AssignmentExpression) // → [\"left\", \"right\"]\n```\n\n### evk.getKeys(node)\n\n> type: `(node: object) => string[]`\n\nGet the visitor keys of a given AST node.\n\nThis is similar to `Object.keys(node)` of ES Standard, but some keys are excluded: `parent`, `leadingComments`, `trailingComments`, and names which start with `_`.\n\nThis will be used to traverse unknown nodes.\n\nFor example:\n\n```js\nconst node = {\n    type: \"AssignmentExpression\",\n    left: { type: \"Identifier\", name: \"foo\" },\n    right: { type: \"Literal\", value: 0 }\n}\nconsole.log(evk.getKeys(node)) // → [\"type\", \"left\", \"right\"]\n```\n\n### evk.unionWith(additionalKeys)\n\n> type: `(additionalKeys: object) => { [type: string]: string[] | undefined }`\n\nMake the union set with `evk.KEYS` and the given keys.\n\n- The order of keys is, `additionalKeys` is at first, then `evk.KEYS` is concatenated after that.\n- It removes duplicated keys as keeping the first one.\n\nFor example:\n\n```js\nconsole.log(evk.unionWith({\n    MethodDefinition: [\"decorators\"]\n})) // → { ..., MethodDefinition: [\"decorators\", \"key\", \"value\"], ... }\n```\n\n## 📰 Change log\n\nSee [GitHub releases](https://github.com/eslint/eslint-visitor-keys/releases).\n\n## 🍻 Contributing\n\nWelcome. See [ESLint contribution guidelines](https://eslint.org/docs/developer-guide/contributing/).\n\n### Development commands\n\n- `npm test` runs tests and measures code coverage.\n- `npm run lint` checks source codes with ESLint.\n- `npm run coverage` opens the code coverage report of the previous test with your default browser.\n- `npm run release` publishes this package to [npm] registory.\n\n\n[npm]: https://www.npmjs.com/\n[Node.js]: https://nodejs.org/\n[ESTree]: https://github.com/estree/estree\n/dist/visitor-keys.d.tsexport default KEYS;\nexport type VisitorKeys = import('./index.js').VisitorKeys;\n/**\n * @typedef {import('./index.js').VisitorKeys} VisitorKeys\n */\n/**\n * @type {VisitorKeys}\n */\ndeclare const KEYS: VisitorKeys;\n//# sourceMappingURL=visitor-keys.d.ts.map"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/ZXNsaW50QDguOS4w",
    "content": "\u0001/lib/rules/indent-legacy.jsŮ/**\n * @fileoverview This option sets a specific tab width for your code\n *\n * This rule has been ported and modified from nodeca.\n * @author Vitaly Puzrin\n * @author Gyandeep Singh\n * @deprecated in ESLint v4.0.0\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/* istanbul ignore next: this rule has known coverage issues, but it's deprecated and shouldn't be updated in the future anyway. */\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"layout\",\n\n        docs: {\n            description: \"enforce consistent indentation\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/indent-legacy\"\n        },\n\n        deprecated: true,\n\n        replacedBy: [\"indent\"],\n\n        fixable: \"whitespace\",\n\n        schema: [\n            {\n                oneOf: [\n                    {\n                        enum: [\"tab\"]\n                    },\n                    {\n                        type: \"integer\",\n                        minimum: 0\n                    }\n                ]\n            },\n            {\n                type: \"object\",\n                properties: {\n                    SwitchCase: {\n                        type: \"integer\",\n                        minimum: 0\n                    },\n                    VariableDeclarator: {\n                        oneOf: [\n                            {\n                                type: \"integer\",\n                                minimum: 0\n                            },\n                            {\n                                type: \"object\",\n                                properties: {\n                                    var: {\n                                        type: \"integer\",\n                                        minimum: 0\n                                    },\n                                    let: {\n                                        type: \"integer\",\n                                        minimum: 0\n                                    },\n                                    const: {\n                                        type: \"integer\",\n                                        minimum: 0\n                                    }\n                                }\n                            }\n                        ]\n                    },\n                    outerIIFEBody: {\n                        type: \"integer\",\n                        minimum: 0\n                    },\n                    MemberExpression: {\n                        type: \"integer\",\n                        minimum: 0\n                    },\n                    FunctionDeclaration: {\n                        type: \"object\",\n                        properties: {\n                            parameters: {\n                                oneOf: [\n                                    {\n                                        type: \"integer\",\n                                        minimum: 0\n                                    },\n                                    {\n                                        enum: [\"first\"]\n                                    }\n                                ]\n                            },\n                            body: {\n                                type: \"integer\",\n                                minimum: 0\n                            }\n                        }\n                    },\n                    FunctionExpression: {\n                        type: \"object\",\n                        properties: {\n                            parameters: {\n                                oneOf: [\n                                    {\n                                        type: \"integer\",\n                                        minimum: 0\n                                    },\n                                    {\n                                        enum: [\"first\"]\n                                    }\n                                ]\n                            },\n                            body: {\n                                type: \"integer\",\n                                minimum: 0\n                            }\n                        }\n                    },\n                    CallExpression: {\n                        type: \"object\",\n                        properties: {\n                            parameters: {\n                                oneOf: [\n                                    {\n                                        type: \"integer\",\n                                        minimum: 0\n                                    },\n                                    {\n                                        enum: [\"first\"]\n                                    }\n                                ]\n                            }\n                        }\n                    },\n                    ArrayExpression: {\n                        oneOf: [\n                            {\n                                type: \"integer\",\n                                minimum: 0\n                            },\n                            {\n                                enum: [\"first\"]\n                            }\n                        ]\n                    },\n                    ObjectExpression: {\n                        oneOf: [\n                            {\n                                type: \"integer\",\n                                minimum: 0\n                            },\n                            {\n                                enum: [\"first\"]\n                            }\n                        ]\n                    }\n                },\n                additionalProperties: false\n            }\n        ],\n        messages: {\n            expected: \"Expected indentation of {{expected}} but found {{actual}}.\"\n        }\n    },\n\n    create(context) {\n        const DEFAULT_VARIABLE_INDENT = 1;\n        const DEFAULT_PARAMETER_INDENT = null; // For backwards compatibility, don't check parameter indentation unless specified in the config\n        const DEFAULT_FUNCTION_BODY_INDENT = 1;\n\n        let indentType = \"space\";\n        let indentSize = 4;\n        const options = {\n            SwitchCase: 0,\n            VariableDeclarator: {\n                var: DEFAULT_VARIABLE_INDENT,\n                let: DEFAULT_VARIABLE_INDENT,\n                const: DEFAULT_VARIABLE_INDENT\n            },\n            outerIIFEBody: null,\n            FunctionDeclaration: {\n                parameters: DEFAULT_PARAMETER_INDENT,\n                body: DEFAULT_FUNCTION_BODY_INDENT\n            },\n            FunctionExpression: {\n                parameters: DEFAULT_PARAMETER_INDENT,\n                body: DEFAULT_FUNCTION_BODY_INDENT\n            },\n            CallExpression: {\n                arguments: DEFAULT_PARAMETER_INDENT\n            },\n            ArrayExpression: 1,\n            ObjectExpression: 1\n        };\n\n        const sourceCode = context.getSourceCode();\n\n        if (context.options.length) {\n            if (context.options[0] === \"tab\") {\n                indentSize = 1;\n                indentType = \"tab\";\n            } else /* istanbul ignore else : this will be caught by options validation */ if (typeof context.options[0] === \"number\") {\n                indentSize = context.options[0];\n                indentType = \"space\";\n            }\n\n            if (context.options[1]) {\n                const opts = context.options[1];\n\n                options.SwitchCase = opts.SwitchCase || 0;\n                const variableDeclaratorRules = opts.VariableDeclarator;\n\n                if (typeof variableDeclaratorRules === \"number\") {\n                    options.VariableDeclarator = {\n                        var: variableDeclaratorRules,\n                        let: variableDeclaratorRules,\n                        const: variableDeclaratorRules\n                    };\n                } else if (typeof variableDeclaratorRules === \"object\") {\n                    Object.assign(options.VariableDeclarator, variableDeclaratorRules);\n                }\n\n                if (typeof opts.outerIIFEBody === \"number\") {\n                    options.outerIIFEBody = opts.outerIIFEBody;\n                }\n\n                if (typeof opts.MemberExpression === \"number\") {\n                    options.MemberExpression = opts.MemberExpression;\n                }\n\n                if (typeof opts.FunctionDeclaration === \"object\") {\n                    Object.assign(options.FunctionDeclaration, opts.FunctionDeclaration);\n                }\n\n                if (typeof opts.FunctionExpression === \"object\") {\n                    Object.assign(options.FunctionExpression, opts.FunctionExpression);\n                }\n\n                if (typeof opts.CallExpression === \"object\") {\n                    Object.assign(options.CallExpression, opts.CallExpression);\n                }\n\n                if (typeof opts.ArrayExpression === \"number\" || typeof opts.ArrayExpression === \"string\") {\n                    options.ArrayExpression = opts.ArrayExpression;\n                }\n\n                if (typeof opts.ObjectExpression === \"number\" || typeof opts.ObjectExpression === \"string\") {\n                    options.ObjectExpression = opts.ObjectExpression;\n                }\n            }\n        }\n\n        const caseIndentStore = {};\n\n        /**\n         * Creates an error message for a line, given the expected/actual indentation.\n         * @param {int} expectedAmount The expected amount of indentation characters for this line\n         * @param {int} actualSpaces The actual number of indentation spaces that were found on this line\n         * @param {int} actualTabs The actual number of indentation tabs that were found on this line\n         * @returns {string} An error message for this line\n         */\n        function createErrorMessageData(expectedAmount, actualSpaces, actualTabs) {\n            const expectedStatement = `${expectedAmount} ${indentType}${expectedAmount === 1 ? \"\" : \"s\"}`; // e.g. \"2 tabs\"\n            const foundSpacesWord = `space${actualSpaces === 1 ? \"\" : \"s\"}`; // e.g. \"space\"\n            const foundTabsWord = `tab${actualTabs === 1 ? \"\" : \"s\"}`; // e.g. \"tabs\"\n            let foundStatement;\n\n            if (actualSpaces > 0 && actualTabs > 0) {\n                foundStatement = `${actualSpaces} ${foundSpacesWord} and ${actualTabs} ${foundTabsWord}`; // e.g. \"1 space and 2 tabs\"\n            } else if (actualSpaces > 0) {\n\n                /*\n                 * Abbreviate the message if the expected indentation is also spaces.\n                 * e.g. 'Expected 4 spaces but found 2' rather than 'Expected 4 spaces but found 2 spaces'\n                 */\n                foundStatement = indentType === \"space\" ? actualSpaces : `${actualSpaces} ${foundSpacesWord}`;\n            } else if (actualTabs > 0) {\n                foundStatement = indentType === \"tab\" ? actualTabs : `${actualTabs} ${foundTabsWord}`;\n            } else {\n                foundStatement = \"0\";\n            }\n            return {\n                expected: expectedStatement,\n                actual: foundStatement\n            };\n        }\n\n        /**\n         * Reports a given indent violation\n         * @param {ASTNode} node Node violating the indent rule\n         * @param {int} needed Expected indentation character count\n         * @param {int} gottenSpaces Indentation space count in the actual node/code\n         * @param {int} gottenTabs Indentation tab count in the actual node/code\n         * @param {Object} [loc] Error line and column location\n         * @param {boolean} isLastNodeCheck Is the error for last node check\n         * @returns {void}\n         */\n        function report(node, needed, gottenSpaces, gottenTabs, loc, isLastNodeCheck) {\n            if (gottenSpaces && gottenTabs) {\n\n                // To avoid conflicts with `no-mixed-spaces-and-tabs`, don't report lines that have both spaces and tabs.\n                return;\n            }\n\n            const desiredIndent = (indentType === \"space\" ? \" \" : \"\\t\").repeat(needed);\n\n            const textRange = isLastNodeCheck\n                ? [node.range[1] - node.loc.end.column, node.range[1] - node.loc.end.column + gottenSpaces + gottenTabs]\n                : [node.range[0] - node.loc.start.column, node.range[0] - node.loc.start.column + gottenSpaces + gottenTabs];\n\n            context.report({\n                node,\n                loc,\n                messageId: \"expected\",\n                data: createErrorMessageData(needed, gottenSpaces, gottenTabs),\n                fix: fixer => fixer.replaceTextRange(textRange, desiredIndent)\n            });\n        }\n\n        /**\n         * Get the actual indent of node\n         * @param {ASTNode|Token} node Node to examine\n         * @param {boolean} [byLastLine=false] get indent of node's last line\n         * @returns {Object} The node's indent. Contains keys `space` and `tab`, representing the indent of each character. Also\n         * contains keys `goodChar` and `badChar`, where `goodChar` is the amount of the user's desired indentation character, and\n         * `badChar` is the amount of the other indentation character.\n         */\n        function getNodeIndent(node, byLastLine) {\n            const token = byLastLine ? sourceCode.getLastToken(node) : sourceCode.getFirstToken(node);\n            const srcCharsBeforeNode = sourceCode.getText(token, token.loc.start.column).split(\"\");\n            const indentChars = srcCharsBeforeNode.slice(0, srcCharsBeforeNode.findIndex(char => char !== \" \" && char !== \"\\t\"));\n            const spaces = indentChars.filter(char => char === \" \").length;\n            const tabs = indentChars.filter(char => char === \"\\t\").length;\n\n            return {\n                space: spaces,\n                tab: tabs,\n                goodChar: indentType === \"space\" ? spaces : tabs,\n                badChar: indentType === \"space\" ? tabs : spaces\n            };\n        }\n\n        /**\n         * Checks node is the first in its own start line. By default it looks by start line.\n         * @param {ASTNode} node The node to check\n         * @param {boolean} [byEndLocation=false] Lookup based on start position or end\n         * @returns {boolean} true if its the first in the its start line\n         */\n        function isNodeFirstInLine(node, byEndLocation) {\n            const firstToken = byEndLocation === true ? sourceCode.getLastToken(node, 1) : sourceCode.getTokenBefore(node),\n                startLine = byEndLocation === true ? node.loc.end.line : node.loc.start.line,\n                endLine = firstToken ? firstToken.loc.end.line : -1;\n\n            return startLine !== endLine;\n        }\n\n        /**\n         * Check indent for node\n         * @param {ASTNode} node Node to check\n         * @param {int} neededIndent needed indent\n         * @returns {void}\n         */\n        function checkNodeIndent(node, neededIndent) {\n            const actualIndent = getNodeIndent(node, false);\n\n            if (\n                node.type !== \"ArrayExpression\" &&\n                node.type !== \"ObjectExpression\" &&\n                (actualIndent.goodChar !== neededIndent || actualIndent.badChar !== 0) &&\n                isNodeFirstInLine(node)\n            ) {\n                report(node, neededIndent, actualIndent.space, actualIndent.tab);\n            }\n\n            if (node.type === \"IfStatement\" && node.alternate) {\n                const elseToken = sourceCode.getTokenBefore(node.alternate);\n\n                checkNodeIndent(elseToken, neededIndent);\n\n                if (!isNodeFirstInLine(node.alternate)) {\n                    checkNodeIndent(node.alternate, neededIndent);\n                }\n            }\n\n            if (node.type === \"TryStatement\" && node.handler) {\n                const catchToken = sourceCode.getFirstToken(node.handler);\n\n                checkNodeIndent(catchToken, neededIndent);\n            }\n\n            if (node.type === \"TryStatement\" && node.finalizer) {\n                const finallyToken = sourceCode.getTokenBefore(node.finalizer);\n\n                checkNodeIndent(finallyToken, neededIndent);\n            }\n\n            if (node.type === \"DoWhileStatement\") {\n                const whileToken = sourceCode.getTokenAfter(node.body);\n\n                checkNodeIndent(whileToken, neededIndent);\n            }\n        }\n\n        /**\n         * Check indent for nodes list\n         * @param {ASTNode[]} nodes list of node objects\n         * @param {int} indent needed indent\n         * @returns {void}\n         */\n        function checkNodesIndent(nodes, indent) {\n            nodes.forEach(node => checkNodeIndent(node, indent));\n        }\n\n        /**\n         * Check last node line indent this detects, that block closed correctly\n         * @param {ASTNode} node Node to examine\n         * @param {int} lastLineIndent needed indent\n         * @returns {void}\n         */\n        function checkLastNodeLineIndent(node, lastLineIndent) {\n            const lastToken = sourceCode.getLastToken(node);\n            const endIndent = getNodeIndent(lastToken, true);\n\n            if ((endIndent.goodChar !== lastLineIndent || endIndent.badChar !== 0) && isNodeFirstInLine(node, true)) {\n                report(\n                    node,\n                    lastLineIndent,\n                    endIndent.space,\n                    endIndent.tab,\n                    { line: lastToken.loc.start.line, column: lastToken.loc.start.column },\n                    true\n                );\n            }\n        }\n\n        /**\n         * Check last node line indent this detects, that block closed correctly\n         * This function for more complicated return statement case, where closing parenthesis may be followed by ';'\n         * @param {ASTNode} node Node to examine\n         * @param {int} firstLineIndent first line needed indent\n         * @returns {void}\n         */\n        function checkLastReturnStatementLineIndent(node, firstLineIndent) {\n\n            /*\n             * in case if return statement ends with ');' we have traverse back to ')'\n             * otherwise we'll measure indent for ';' and replace ')'\n             */\n            const lastToken = sourceCode.getLastToken(node, astUtils.isClosingParenToken);\n            const textBeforeClosingParenthesis = sourceCode.getText(lastToken, lastToken.loc.start.column).slice(0, -1);\n\n            if (textBeforeClosingParenthesis.trim()) {\n\n                // There are tokens before the closing paren, don't report this case\n                return;\n            }\n\n            const endIndent = getNodeIndent(lastToken, true);\n\n            if (endIndent.goodChar !== firstLineIndent) {\n                report(\n                    node,\n                    firstLineIndent,\n                    endIndent.space,\n                    endIndent.tab,\n                    { line: lastToken.loc.start.line, column: lastToken.loc.start.column },\n                    true\n                );\n            }\n        }\n\n        /**\n         * Check first node line indent is correct\n         * @param {ASTNode} node Node to examine\n         * @param {int} firstLineIndent needed indent\n         * @returns {void}\n         */\n        function checkFirstNodeLineIndent(node, firstLineIndent) {\n            const startIndent = getNodeIndent(node, false);\n\n            if ((startIndent.goodChar !== firstLineIndent || startIndent.badChar !== 0) && isNodeFirstInLine(node)) {\n                report(\n                    node,\n                    firstLineIndent,\n                    startIndent.space,\n                    startIndent.tab,\n                    { line: node.loc.start.line, column: node.loc.start.column }\n                );\n            }\n        }\n\n        /**\n         * Returns a parent node of given node based on a specified type\n         * if not present then return null\n         * @param {ASTNode} node node to examine\n         * @param {string} type type that is being looked for\n         * @param {string} stopAtList end points for the evaluating code\n         * @returns {ASTNode|void} if found then node otherwise null\n         */\n        function getParentNodeByType(node, type, stopAtList) {\n            let parent = node.parent;\n            const stopAtSet = new Set(stopAtList || [\"Program\"]);\n\n            while (parent.type !== type && !stopAtSet.has(parent.type) && parent.type !== \"Program\") {\n                parent = parent.parent;\n            }\n\n            return parent.type === type ? parent : null;\n        }\n\n        /**\n         * Returns the VariableDeclarator based on the current node\n         * if not present then return null\n         * @param {ASTNode} node node to examine\n         * @returns {ASTNode|void} if found then node otherwise null\n         */\n        function getVariableDeclaratorNode(node) {\n            return getParentNodeByType(node, \"VariableDeclarator\");\n        }\n\n        /**\n         * Check to see if the node is part of the multi-line variable declaration.\n         * Also if its on the same line as the varNode\n         * @param {ASTNode} node node to check\n         * @param {ASTNode} varNode variable declaration node to check against\n         * @returns {boolean} True if all the above condition satisfy\n         */\n        function isNodeInVarOnTop(node, varNode) {\n            return varNode &&\n                varNode.parent.loc.start.line === node.loc.start.line &&\n                varNode.parent.declarations.length > 1;\n        }\n\n        /**\n         * Check to see if the argument before the callee node is multi-line and\n         * there should only be 1 argument before the callee node\n         * @param {ASTNode} node node to check\n         * @returns {boolean} True if arguments are multi-line\n         */\n        function isArgBeforeCalleeNodeMultiline(node) {\n            const parent = node.parent;\n\n            if (parent.arguments.length >= 2 && parent.arguments[1] === node) {\n                return parent.arguments[0].loc.end.line > parent.arguments[0].loc.start.line;\n            }\n\n            return false;\n        }\n\n        /**\n         * Check to see if the node is a file level IIFE\n         * @param {ASTNode} node The function node to check.\n         * @returns {boolean} True if the node is the outer IIFE\n         */\n        function isOuterIIFE(node) {\n            const parent = node.parent;\n            let stmt = parent.parent;\n\n            /*\n             * Verify that the node is an IIEF\n             */\n            if (\n                parent.type !== \"CallExpression\" ||\n                parent.callee !== node) {\n\n                return false;\n            }\n\n            /*\n             * Navigate legal ancestors to determine whether this IIEF is outer\n             */\n            while (\n                stmt.type === \"UnaryExpression\" && (\n                    stmt.operator === \"!\" ||\n                    stmt.operator === \"~\" ||\n                    stmt.operator === \"+\" ||\n                    stmt.operator === \"-\") ||\n                stmt.type === \"AssignmentExpression\" ||\n                stmt.type === \"LogicalExpression\" ||\n                stmt.type === \"SequenceExpression\" ||\n                stmt.type === \"VariableDeclarator\") {\n\n                stmt = stmt.parent;\n            }\n\n            return ((\n                stmt.type === \"ExpressionStatement\" ||\n                stmt.type === \"VariableDeclaration\") &&\n                stmt.parent && stmt.parent.type === \"Program\"\n            );\n        }\n\n        /**\n         * Check indent for function block content\n         * @param {ASTNode} node A BlockStatement node that is inside of a function.\n         * @returns {void}\n         */\n        function checkIndentInFunctionBlock(node) {\n\n            /*\n             * Search first caller in chain.\n             * Ex.:\n             *\n             * Models <- Identifier\n             *   .User\n             *   .find()\n             *   .exec(function() {\n             *   // function body\n             * });\n             *\n             * Looks for 'Models'\n             */\n            const calleeNode = node.parent; // FunctionExpression\n            let indent;\n\n            if (calleeNode.parent &&\n                (calleeNode.parent.type === \"Property\" ||\n                calleeNode.parent.type === \"ArrayExpression\")) {\n\n                // If function is part of array or object, comma can be put at left\n                indent = getNodeIndent(calleeNode, false).goodChar;\n            } else {\n\n                // If function is standalone, simple calculate indent\n                indent = getNodeIndent(calleeNode).goodChar;\n            }\n\n            if (calleeNode.parent.type === \"CallExpression\") {\n                const calleeParent = calleeNode.parent;\n\n                if (calleeNode.type !== \"FunctionExpression\" && calleeNode.type !== \"ArrowFunctionExpression\") {\n                    if (calleeParent && calleeParent.loc.start.line < node.loc.start.line) {\n                        indent = getNodeIndent(calleeParent).goodChar;\n                    }\n                } else {\n                    if (isArgBeforeCalleeNodeMultiline(calleeNode) &&\n                        calleeParent.callee.loc.start.line === calleeParent.callee.loc.end.line &&\n                        !isNodeFirstInLine(calleeNode)) {\n                        indent = getNodeIndent(calleeParent).goodChar;\n                    }\n                }\n            }\n\n            /*\n             * function body indent should be indent + indent size, unless this\n             * is a FunctionDeclaration, FunctionExpression, or outer IIFE and the corresponding options are enabled.\n             */\n            let functionOffset = indentSize;\n\n            if (options.outerIIFEBody !== null && isOuterIIFE(calleeNode)) {\n                functionOffset = options.outerIIFEBody * indentSize;\n            } else if (calleeNode.type === \"FunctionExpression\") {\n                functionOffset = options.FunctionExpression.body * indentSize;\n            } else if (calleeNode.type === \"FunctionDeclaration\") {\n                functionOffset = options.FunctionDeclaration.body * indentSize;\n            }\n            indent += functionOffset;\n\n            // check if the node is inside a variable\n            const parentVarNode = getVariableDeclaratorNode(node);\n\n            if (parentVarNode && isNodeInVarOnTop(node, parentVarNode)) {\n                indent += indentSize * options.VariableDeclarator[parentVarNode.parent.kind];\n            }\n\n            if (node.body.length > 0) {\n                checkNodesIndent(node.body, indent);\n            }\n\n            checkLastNodeLineIndent(node, indent - functionOffset);\n        }\n\n\n        /**\n         * Checks if the given node starts and ends on the same line\n         * @param {ASTNode} node The node to check\n         * @returns {boolean} Whether or not the block starts and ends on the same line.\n         */\n        function isSingleLineNode(node) {\n            const lastToken = sourceCode.getLastToken(node),\n                startLine = node.loc.start.line,\n                endLine = lastToken.loc.end.line;\n\n            return startLine === endLine;\n        }\n\n        /**\n         * Check indent for array block content or object block content\n         * @param {ASTNode} node node to examine\n         * @returns {void}\n         */\n        function checkIndentInArrayOrObjectBlock(node) {\n\n            // Skip inline\n            if (isSingleLineNode(node)) {\n                return;\n            }\n\n            let elements = (node.type === \"ArrayExpression\") ? node.elements : node.properties;\n\n            // filter out empty elements example would be [ , 2] so remove first element as espree considers it as null\n            elements = elements.filter(elem => elem !== null);\n\n            let nodeIndent;\n            let elementsIndent;\n            const parentVarNode = getVariableDeclaratorNode(node);\n\n            // TODO - come up with a better strategy in future\n            if (isNodeFirstInLine(node)) {\n                const parent = node.parent;\n\n                nodeIndent = getNodeIndent(parent).goodChar;\n                if (!parentVarNode || parentVarNode.loc.start.line !== node.loc.start.line) {\n                    if (parent.type !== \"VariableDeclarator\" || parentVarNode === parentVarNode.parent.declarations[0]) {\n                        if (parent.type === \"VariableDeclarator\" && parentVarNode.loc.start.line === parent.loc.start.line) {\n                            nodeIndent += (indentSize * options.VariableDeclarator[parentVarNode.parent.kind]);\n                        } else if (parent.type === \"ObjectExpression\" || parent.type === \"ArrayExpression\") {\n                            const parentElements = node.parent.type === \"ObjectExpression\" ? node.parent.properties : node.parent.elements;\n\n                            if (parentElements[0] &&\n                                    parentElements[0].loc.start.line === parent.loc.start.line &&\n                                    parentElements[0].loc.end.line !== parent.loc.start.line) {\n\n                                /*\n                                 * If the first element of the array spans multiple lines, don't increase the expected indentation of the rest.\n                                 * e.g. [{\n                                 *        foo: 1\n                                 *      },\n                                 *      {\n                                 *        bar: 1\n                                 *      }]\n                                 * the second object is not indented.\n                                 */\n                            } else if (typeof options[parent.type] === \"number\") {\n                                nodeIndent += options[parent.type] * indentSize;\n                            } else {\n                                nodeIndent = parentElements[0].loc.start.column;\n                            }\n                        } else if (parent.type === \"CallExpression\" || parent.type === \"NewExpression\") {\n                            if (typeof options.CallExpression.arguments === \"number\") {\n                                nodeIndent += options.CallExpression.arguments * indentSize;\n                            } else if (options.CallExpression.arguments === \"first\") {\n                                if (parent.arguments.indexOf(node) !== -1) {\n                                    nodeIndent = parent.arguments[0].loc.start.column;\n                                }\n                            } else {\n                                nodeIndent += indentSize;\n                            }\n                        } else if (parent.type === \"LogicalExpression\" || parent.type === \"ArrowFunctionExpression\") {\n                            nodeIndent += indentSize;\n                        }\n                    }\n                }\n\n                checkFirstNodeLineIndent(node, nodeIndent);\n            } else {\n                nodeIndent = getNodeIndent(node).goodChar;\n            }\n\n            if (options[node.type] === \"first\") {\n                elementsIndent = elements.length ? elements[0].loc.start.column : 0; // If there are no elements, elementsIndent doesn't matter.\n            } else {\n                elementsIndent = nodeIndent + indentSize * options[node.type];\n            }\n\n            /*\n             * Check if the node is a multiple variable declaration; if so, then\n             * make sure indentation takes that into account.\n             */\n            if (isNodeInVarOnTop(node, parentVarNode)) {\n                elementsIndent += indentSize * options.VariableDeclarator[parentVarNode.parent.kind];\n            }\n\n            checkNodesIndent(elements, elementsIndent);\n\n            if (elements.length > 0) {\n\n                // Skip last block line check if last item in same line\n                if (elements[elements.length - 1].loc.end.line === node.loc.end.line) {\n                    return;\n                }\n            }\n\n            checkLastNodeLineIndent(node, nodeIndent +\n                (isNodeInVarOnTop(node, parentVarNode) ? options.VariableDeclarator[parentVarNode.parent.kind] * indentSize : 0));\n        }\n\n        /**\n         * Check if the node or node body is a BlockStatement or not\n         * @param {ASTNode} node node to test\n         * @returns {boolean} True if it or its body is a block statement\n         */\n        function isNodeBodyBlock(node) {\n            return node.type === \"BlockStatement\" || node.type === \"ClassBody\" || (node.body && node.body.type === \"BlockStatement\") ||\n                (node.consequent && node.consequent.type === \"BlockStatement\");\n        }\n\n        /**\n         * Check indentation for blocks\n         * @param {ASTNode} node node to check\n         * @returns {void}\n         */\n        function blockIndentationCheck(node) {\n\n            // Skip inline blocks\n            if (isSingleLineNode(node)) {\n                return;\n            }\n\n            if (node.parent && (\n                node.parent.type === \"FunctionExpression\" ||\n                node.parent.type === \"FunctionDeclaration\" ||\n                node.parent.type === \"ArrowFunctionExpression\")\n            ) {\n                checkIndentInFunctionBlock(node);\n                return;\n            }\n\n            let indent;\n            let nodesToCheck = [];\n\n            /*\n             * For this statements we should check indent from statement beginning,\n             * not from the beginning of the block.\n             */\n            const statementsWithProperties = [\n                \"IfStatement\", \"WhileStatement\", \"ForStatement\", \"ForInStatement\", \"ForOfStatement\", \"DoWhileStatement\", \"ClassDeclaration\", \"TryStatement\"\n            ];\n\n            if (node.parent && statementsWithProperties.indexOf(node.parent.type) !== -1 && isNodeBodyBlock(node)) {\n                indent = getNodeIndent(node.parent).goodChar;\n            } else if (node.parent && node.parent.type === \"CatchClause\") {\n                indent = getNodeIndent(node.parent.parent).goodChar;\n            } else {\n                indent = getNodeIndent(node).goodChar;\n            }\n\n            if (node.type === \"IfStatement\" && node.consequent.type !== \"BlockStatement\") {\n                nodesToCheck = [node.consequent];\n            } else if (Array.isArray(node.body)) {\n                nodesToCheck = node.body;\n            } else {\n                nodesToCheck = [node.body];\n            }\n\n            if (nodesToCheck.length > 0) {\n                checkNodesIndent(nodesToCheck, indent + indentSize);\n            }\n\n            if (node.type === \"BlockStatement\") {\n                checkLastNodeLineIndent(node, indent);\n            }\n        }\n\n        /**\n         * Filter out the elements which are on the same line of each other or the node.\n         * basically have only 1 elements from each line except the variable declaration line.\n         * @param {ASTNode} node Variable declaration node\n         * @returns {ASTNode[]} Filtered elements\n         */\n        function filterOutSameLineVars(node) {\n            return node.declarations.reduce((finalCollection, elem) => {\n                const lastElem = finalCollection[finalCollection.length - 1];\n\n                if ((elem.loc.start.line !== node.loc.start.line && !lastElem) ||\n                    (lastElem && lastElem.loc.start.line !== elem.loc.start.line)) {\n                    finalCollection.push(elem);\n                }\n\n                return finalCollection;\n            }, []);\n        }\n\n        /**\n         * Check indentation for variable declarations\n         * @param {ASTNode} node node to examine\n         * @returns {void}\n         */\n        function checkIndentInVariableDeclarations(node) {\n            const elements = filterOutSameLineVars(node);\n            const nodeIndent = getNodeIndent(node).goodChar;\n            const lastElement = elements[elements.length - 1];\n\n            const elementsIndent = nodeIndent + indentSize * options.VariableDeclarator[node.kind];\n\n            checkNodesIndent(elements, elementsIndent);\n\n            // Only check the last line if there is any token after the last item\n            if (sourceCode.getLastToken(node).loc.end.line <= lastElement.loc.end.line) {\n                return;\n            }\n\n            const tokenBeforeLastElement = sourceCode.getTokenBefore(lastElement);\n\n            if (tokenBeforeLastElement.value === \",\") {\n\n                // Special case for comma-first syntax where the semicolon is indented\n                checkLastNodeLineIndent(node, getNodeIndent(tokenBeforeLastElement).goodChar);\n            } else {\n                checkLastNodeLineIndent(node, elementsIndent - indentSize);\n            }\n        }\n\n        /**\n         * Check and decide whether to check for indentation for blockless nodes\n         * Scenarios are for or while statements without braces around them\n         * @param {ASTNode} node node to examine\n         * @returns {void}\n         */\n        function blockLessNodes(node) {\n            if (node.body.type !== \"BlockStatement\") {\n                blockIndentationCheck(node);\n            }\n        }\n\n        /**\n         * Returns the expected indentation for the case statement\n         * @param {ASTNode} node node to examine\n         * @param {int} [providedSwitchIndent] indent for switch statement\n         * @returns {int} indent size\n         */\n        function expectedCaseIndent(node, providedSwitchIndent) {\n            const switchNode = (node.type === \"SwitchStatement\") ? node : node.parent;\n            const switchIndent = typeof providedSwitchIndent === \"undefined\"\n                ? getNodeIndent(switchNode).goodChar\n                : providedSwitchIndent;\n            let caseIndent;\n\n            if (caseIndentStore[switchNode.loc.start.line]) {\n                return caseIndentStore[switchNode.loc.start.line];\n            }\n\n            if (switchNode.cases.length > 0 && options.SwitchCase === 0) {\n                caseIndent = switchIndent;\n            } else {\n                caseIndent = switchIndent + (indentSize * options.SwitchCase);\n            }\n\n            caseIndentStore[switchNode.loc.start.line] = caseIndent;\n            return caseIndent;\n\n        }\n\n        /**\n         * Checks whether a return statement is wrapped in ()\n         * @param {ASTNode} node node to examine\n         * @returns {boolean} the result\n         */\n        function isWrappedInParenthesis(node) {\n            const regex = /^return\\s*?\\(\\s*?\\);*?/u;\n\n            const statementWithoutArgument = sourceCode.getText(node).replace(\n                sourceCode.getText(node.argument), \"\"\n            );\n\n            return regex.test(statementWithoutArgument);\n        }\n\n        return {\n            Program(node) {\n                if (node.body.length > 0) {\n\n                    // Root nodes should have no indent\n                    checkNodesIndent(node.body, getNodeIndent(node).goodChar);\n                }\n            },\n\n            ClassBody: blockIndentationCheck,\n\n            BlockStatement: blockIndentationCheck,\n\n            WhileStatement: blockLessNodes,\n\n            ForStatement: blockLessNodes,\n\n            ForInStatement: blockLessNodes,\n\n            ForOfStatement: blockLessNodes,\n\n            DoWhileStatement: blockLessNodes,\n\n            IfStatement(node) {\n                if (node.consequent.type !== \"BlockStatement\" && node.consequent.loc.start.line > node.loc.start.line) {\n                    blockIndentationCheck(node);\n                }\n            },\n\n            VariableDeclaration(node) {\n                if (node.declarations[node.declarations.length - 1].loc.start.line > node.declarations[0].loc.start.line) {\n                    checkIndentInVariableDeclarations(node);\n                }\n            },\n\n            ObjectExpression(node) {\n                checkIndentInArrayOrObjectBlock(node);\n            },\n\n            ArrayExpression(node) {\n                checkIndentInArrayOrObjectBlock(node);\n            },\n\n            MemberExpression(node) {\n\n                if (typeof options.MemberExpression === \"undefined\") {\n                    return;\n                }\n\n                if (isSingleLineNode(node)) {\n                    return;\n                }\n\n                /*\n                 * The typical layout of variable declarations and assignments\n                 * alter the expectation of correct indentation. Skip them.\n                 * TODO: Add appropriate configuration options for variable\n                 * declarations and assignments.\n                 */\n                if (getParentNodeByType(node, \"VariableDeclarator\", [\"FunctionExpression\", \"ArrowFunctionExpression\"])) {\n                    return;\n                }\n\n                if (getParentNodeByType(node, \"AssignmentExpression\", [\"FunctionExpression\"])) {\n                    return;\n                }\n\n                const propertyIndent = getNodeIndent(node).goodChar + indentSize * options.MemberExpression;\n\n                const checkNodes = [node.property];\n\n                const dot = sourceCode.getTokenBefore(node.property);\n\n                if (dot.type === \"Punctuator\" && dot.value === \".\") {\n                    checkNodes.push(dot);\n                }\n\n                checkNodesIndent(checkNodes, propertyIndent);\n            },\n\n            SwitchStatement(node) {\n\n                // Switch is not a 'BlockStatement'\n                const switchIndent = getNodeIndent(node).goodChar;\n                const caseIndent = expectedCaseIndent(node, switchIndent);\n\n                checkNodesIndent(node.cases, caseIndent);\n\n\n                checkLastNodeLineIndent(node, switchIndent);\n            },\n\n            SwitchCase(node) {\n\n                // Skip inline cases\n                if (isSingleLineNode(node)) {\n                    return;\n                }\n                const caseIndent = expectedCaseIndent(node);\n\n                checkNodesIndent(node.consequent, caseIndent + indentSize);\n            },\n\n            FunctionDeclaration(node) {\n                if (isSingleLineNode(node)) {\n                    return;\n                }\n                if (options.FunctionDeclaration.parameters === \"first\" && node.params.length) {\n                    checkNodesIndent(node.params.slice(1), node.params[0].loc.start.column);\n                } else if (options.FunctionDeclaration.parameters !== null) {\n                    checkNodesIndent(node.params, getNodeIndent(node).goodChar + indentSize * options.FunctionDeclaration.parameters);\n                }\n            },\n\n            FunctionExpression(node) {\n                if (isSingleLineNode(node)) {\n                    return;\n                }\n                if (options.FunctionExpression.parameters === \"first\" && node.params.length) {\n                    checkNodesIndent(node.params.slice(1), node.params[0].loc.start.column);\n                } else if (options.FunctionExpression.parameters !== null) {\n                    checkNodesIndent(node.params, getNodeIndent(node).goodChar + indentSize * options.FunctionExpression.parameters);\n                }\n            },\n\n            ReturnStatement(node) {\n                if (isSingleLineNode(node)) {\n                    return;\n                }\n\n                const firstLineIndent = getNodeIndent(node).goodChar;\n\n                // in case if return statement is wrapped in parenthesis\n                if (isWrappedInParenthesis(node)) {\n                    checkLastReturnStatementLineIndent(node, firstLineIndent);\n                } else {\n                    checkNodeIndent(node, firstLineIndent);\n                }\n            },\n\n            CallExpression(node) {\n                if (isSingleLineNode(node)) {\n                    return;\n                }\n                if (options.CallExpression.arguments === \"first\" && node.arguments.length) {\n                    checkNodesIndent(node.arguments.slice(1), node.arguments[0].loc.start.column);\n                } else if (options.CallExpression.arguments !== null) {\n                    checkNodesIndent(node.arguments, getNodeIndent(node).goodChar + indentSize * options.CallExpression.arguments);\n                }\n            }\n\n        };\n\n    }\n};\n/lib/rules/no-bitwise.js\u000e\u0005/**\n * @fileoverview Rule to flag bitwise identifiers\n * @author Nicholas C. Zakas\n */\n\n\"use strict\";\n\n/*\n *\n * Set of bitwise operators.\n *\n */\nconst BITWISE_OPERATORS = [\n    \"^\", \"|\", \"&\", \"<<\", \">>\", \">>>\",\n    \"^=\", \"|=\", \"&=\", \"<<=\", \">>=\", \">>>=\",\n    \"~\"\n];\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow bitwise operators\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-bitwise\"\n        },\n\n        schema: [\n            {\n                type: \"object\",\n                properties: {\n                    allow: {\n                        type: \"array\",\n                        items: {\n                            enum: BITWISE_OPERATORS\n                        },\n                        uniqueItems: true\n                    },\n                    int32Hint: {\n                        type: \"boolean\",\n                        default: false\n                    }\n                },\n                additionalProperties: false\n            }\n        ],\n\n        messages: {\n            unexpected: \"Unexpected use of '{{operator}}'.\"\n        }\n    },\n\n    create(context) {\n        const options = context.options[0] || {};\n        const allowed = options.allow || [];\n        const int32Hint = options.int32Hint === true;\n\n        /**\n         * Reports an unexpected use of a bitwise operator.\n         * @param {ASTNode} node Node which contains the bitwise operator.\n         * @returns {void}\n         */\n        function report(node) {\n            context.report({ node, messageId: \"unexpected\", data: { operator: node.operator } });\n        }\n\n        /**\n         * Checks if the given node has a bitwise operator.\n         * @param {ASTNode} node The node to check.\n         * @returns {boolean} Whether or not the node has a bitwise operator.\n         */\n        function hasBitwiseOperator(node) {\n            return BITWISE_OPERATORS.indexOf(node.operator) !== -1;\n        }\n\n        /**\n         * Checks if exceptions were provided, e.g. `{ allow: ['~', '|'] }`.\n         * @param {ASTNode} node The node to check.\n         * @returns {boolean} Whether or not the node has a bitwise operator.\n         */\n        function allowedOperator(node) {\n            return allowed.indexOf(node.operator) !== -1;\n        }\n\n        /**\n         * Checks if the given bitwise operator is used for integer typecasting, i.e. \"|0\"\n         * @param {ASTNode} node The node to check.\n         * @returns {boolean} whether the node is used in integer typecasting.\n         */\n        function isInt32Hint(node) {\n            return int32Hint && node.operator === \"|\" && node.right &&\n              node.right.type === \"Literal\" && node.right.value === 0;\n        }\n\n        /**\n         * Report if the given node contains a bitwise operator.\n         * @param {ASTNode} node The node to check.\n         * @returns {void}\n         */\n        function checkNodeForBitwiseOperator(node) {\n            if (hasBitwiseOperator(node) && !allowedOperator(node) && !isInt32Hint(node)) {\n                report(node);\n            }\n        }\n\n        return {\n            AssignmentExpression: checkNodeForBitwiseOperator,\n            BinaryExpression: checkNodeForBitwiseOperator,\n            UnaryExpression: checkNodeForBitwiseOperator\n        };\n\n    }\n};\n1/lib/linter/code-path-analysis/code-path-state.jsź/**\n * @fileoverview A class to manage state of generating a code path.\n * @author Toru Nagashima\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst CodePathSegment = require(\"./code-path-segment\"),\n    ForkContext = require(\"./fork-context\");\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\n/**\n * Adds given segments into the `dest` array.\n * If the `others` array does not includes the given segments, adds to the `all`\n * array as well.\n *\n * This adds only reachable and used segments.\n * @param {CodePathSegment[]} dest A destination array (`returnedSegments` or `thrownSegments`).\n * @param {CodePathSegment[]} others Another destination array (`returnedSegments` or `thrownSegments`).\n * @param {CodePathSegment[]} all The unified destination array (`finalSegments`).\n * @param {CodePathSegment[]} segments Segments to add.\n * @returns {void}\n */\nfunction addToReturnedOrThrown(dest, others, all, segments) {\n    for (let i = 0; i < segments.length; ++i) {\n        const segment = segments[i];\n\n        dest.push(segment);\n        if (others.indexOf(segment) === -1) {\n            all.push(segment);\n        }\n    }\n}\n\n/**\n * Gets a loop-context for a `continue` statement.\n * @param {CodePathState} state A state to get.\n * @param {string} label The label of a `continue` statement.\n * @returns {LoopContext} A loop-context for a `continue` statement.\n */\nfunction getContinueContext(state, label) {\n    if (!label) {\n        return state.loopContext;\n    }\n\n    let context = state.loopContext;\n\n    while (context) {\n        if (context.label === label) {\n            return context;\n        }\n        context = context.upper;\n    }\n\n    /* istanbul ignore next: foolproof (syntax error) */\n    return null;\n}\n\n/**\n * Gets a context for a `break` statement.\n * @param {CodePathState} state A state to get.\n * @param {string} label The label of a `break` statement.\n * @returns {LoopContext|SwitchContext} A context for a `break` statement.\n */\nfunction getBreakContext(state, label) {\n    let context = state.breakContext;\n\n    while (context) {\n        if (label ? context.label === label : context.breakable) {\n            return context;\n        }\n        context = context.upper;\n    }\n\n    /* istanbul ignore next: foolproof (syntax error) */\n    return null;\n}\n\n/**\n * Gets a context for a `return` statement.\n * @param {CodePathState} state A state to get.\n * @returns {TryContext|CodePathState} A context for a `return` statement.\n */\nfunction getReturnContext(state) {\n    let context = state.tryContext;\n\n    while (context) {\n        if (context.hasFinalizer && context.position !== \"finally\") {\n            return context;\n        }\n        context = context.upper;\n    }\n\n    return state;\n}\n\n/**\n * Gets a context for a `throw` statement.\n * @param {CodePathState} state A state to get.\n * @returns {TryContext|CodePathState} A context for a `throw` statement.\n */\nfunction getThrowContext(state) {\n    let context = state.tryContext;\n\n    while (context) {\n        if (context.position === \"try\" ||\n            (context.hasFinalizer && context.position === \"catch\")\n        ) {\n            return context;\n        }\n        context = context.upper;\n    }\n\n    return state;\n}\n\n/**\n * Removes a given element from a given array.\n * @param {any[]} xs An array to remove the specific element.\n * @param {any} x An element to be removed.\n * @returns {void}\n */\nfunction remove(xs, x) {\n    xs.splice(xs.indexOf(x), 1);\n}\n\n/**\n * Disconnect given segments.\n *\n * This is used in a process for switch statements.\n * If there is the \"default\" chunk before other cases, the order is different\n * between node's and running's.\n * @param {CodePathSegment[]} prevSegments Forward segments to disconnect.\n * @param {CodePathSegment[]} nextSegments Backward segments to disconnect.\n * @returns {void}\n */\nfunction removeConnection(prevSegments, nextSegments) {\n    for (let i = 0; i < prevSegments.length; ++i) {\n        const prevSegment = prevSegments[i];\n        const nextSegment = nextSegments[i];\n\n        remove(prevSegment.nextSegments, nextSegment);\n        remove(prevSegment.allNextSegments, nextSegment);\n        remove(nextSegment.prevSegments, prevSegment);\n        remove(nextSegment.allPrevSegments, prevSegment);\n    }\n}\n\n/**\n * Creates looping path.\n * @param {CodePathState} state The instance.\n * @param {CodePathSegment[]} unflattenedFromSegments Segments which are source.\n * @param {CodePathSegment[]} unflattenedToSegments Segments which are destination.\n * @returns {void}\n */\nfunction makeLooped(state, unflattenedFromSegments, unflattenedToSegments) {\n    const fromSegments = CodePathSegment.flattenUnusedSegments(unflattenedFromSegments);\n    const toSegments = CodePathSegment.flattenUnusedSegments(unflattenedToSegments);\n\n    const end = Math.min(fromSegments.length, toSegments.length);\n\n    for (let i = 0; i < end; ++i) {\n        const fromSegment = fromSegments[i];\n        const toSegment = toSegments[i];\n\n        if (toSegment.reachable) {\n            fromSegment.nextSegments.push(toSegment);\n        }\n        if (fromSegment.reachable) {\n            toSegment.prevSegments.push(fromSegment);\n        }\n        fromSegment.allNextSegments.push(toSegment);\n        toSegment.allPrevSegments.push(fromSegment);\n\n        if (toSegment.allPrevSegments.length >= 2) {\n            CodePathSegment.markPrevSegmentAsLooped(toSegment, fromSegment);\n        }\n\n        state.notifyLooped(fromSegment, toSegment);\n    }\n}\n\n/**\n * Finalizes segments of `test` chunk of a ForStatement.\n *\n * - Adds `false` paths to paths which are leaving from the loop.\n * - Sets `true` paths to paths which go to the body.\n * @param {LoopContext} context A loop context to modify.\n * @param {ChoiceContext} choiceContext A choice context of this loop.\n * @param {CodePathSegment[]} head The current head paths.\n * @returns {void}\n */\nfunction finalizeTestSegmentsOfFor(context, choiceContext, head) {\n    if (!choiceContext.processed) {\n        choiceContext.trueForkContext.add(head);\n        choiceContext.falseForkContext.add(head);\n        choiceContext.qqForkContext.add(head);\n    }\n\n    if (context.test !== true) {\n        context.brokenForkContext.addAll(choiceContext.falseForkContext);\n    }\n    context.endOfTestSegments = choiceContext.trueForkContext.makeNext(0, -1);\n}\n\n//------------------------------------------------------------------------------\n// Public Interface\n//------------------------------------------------------------------------------\n\n/**\n * A class which manages state to analyze code paths.\n */\nclass CodePathState {\n\n    /**\n     * @param {IdGenerator} idGenerator An id generator to generate id for code\n     *   path segments.\n     * @param {Function} onLooped A callback function to notify looping.\n     */\n    constructor(idGenerator, onLooped) {\n        this.idGenerator = idGenerator;\n        this.notifyLooped = onLooped;\n        this.forkContext = ForkContext.newRoot(idGenerator);\n        this.choiceContext = null;\n        this.switchContext = null;\n        this.tryContext = null;\n        this.loopContext = null;\n        this.breakContext = null;\n        this.chainContext = null;\n\n        this.currentSegments = [];\n        this.initialSegment = this.forkContext.head[0];\n\n        // returnedSegments and thrownSegments push elements into finalSegments also.\n        const final = this.finalSegments = [];\n        const returned = this.returnedForkContext = [];\n        const thrown = this.thrownForkContext = [];\n\n        returned.add = addToReturnedOrThrown.bind(null, returned, thrown, final);\n        thrown.add = addToReturnedOrThrown.bind(null, thrown, returned, final);\n    }\n\n    /**\n     * The head segments.\n     * @type {CodePathSegment[]}\n     */\n    get headSegments() {\n        return this.forkContext.head;\n    }\n\n    /**\n     * The parent forking context.\n     * This is used for the root of new forks.\n     * @type {ForkContext}\n     */\n    get parentForkContext() {\n        const current = this.forkContext;\n\n        return current && current.upper;\n    }\n\n    /**\n     * Creates and stacks new forking context.\n     * @param {boolean} forkLeavingPath A flag which shows being in a\n     *   \"finally\" block.\n     * @returns {ForkContext} The created context.\n     */\n    pushForkContext(forkLeavingPath) {\n        this.forkContext = ForkContext.newEmpty(\n            this.forkContext,\n            forkLeavingPath\n        );\n\n        return this.forkContext;\n    }\n\n    /**\n     * Pops and merges the last forking context.\n     * @returns {ForkContext} The last context.\n     */\n    popForkContext() {\n        const lastContext = this.forkContext;\n\n        this.forkContext = lastContext.upper;\n        this.forkContext.replaceHead(lastContext.makeNext(0, -1));\n\n        return lastContext;\n    }\n\n    /**\n     * Creates a new path.\n     * @returns {void}\n     */\n    forkPath() {\n        this.forkContext.add(this.parentForkContext.makeNext(-1, -1));\n    }\n\n    /**\n     * Creates a bypass path.\n     * This is used for such as IfStatement which does not have \"else\" chunk.\n     * @returns {void}\n     */\n    forkBypassPath() {\n        this.forkContext.add(this.parentForkContext.head);\n    }\n\n    //--------------------------------------------------------------------------\n    // ConditionalExpression, LogicalExpression, IfStatement\n    //--------------------------------------------------------------------------\n\n    /**\n     * Creates a context for ConditionalExpression, LogicalExpression, AssignmentExpression (logical assignments only),\n     * IfStatement, WhileStatement, DoWhileStatement, or ForStatement.\n     *\n     * LogicalExpressions have cases that it goes different paths between the\n     * `true` case and the `false` case.\n     *\n     * For Example:\n     *\n     *     if (a || b) {\n     *         foo();\n     *     } else {\n     *         bar();\n     *     }\n     *\n     * In this case, `b` is evaluated always in the code path of the `else`\n     * block, but it's not so in the code path of the `if` block.\n     * So there are 3 paths.\n     *\n     *     a -> foo();\n     *     a -> b -> foo();\n     *     a -> b -> bar();\n     * @param {string} kind A kind string.\n     *   If the new context is LogicalExpression's or AssignmentExpression's, this is `\"&&\"` or `\"||\"` or `\"??\"`.\n     *   If it's IfStatement's or ConditionalExpression's, this is `\"test\"`.\n     *   Otherwise, this is `\"loop\"`.\n     * @param {boolean} isForkingAsResult A flag that shows that goes different\n     *   paths between `true` and `false`.\n     * @returns {void}\n     */\n    pushChoiceContext(kind, isForkingAsResult) {\n        this.choiceContext = {\n            upper: this.choiceContext,\n            kind,\n            isForkingAsResult,\n            trueForkContext: ForkContext.newEmpty(this.forkContext),\n            falseForkContext: ForkContext.newEmpty(this.forkContext),\n            qqForkContext: ForkContext.newEmpty(this.forkContext),\n            processed: false\n        };\n    }\n\n    /**\n     * Pops the last choice context and finalizes it.\n     * @throws {Error} (Unreachable.)\n     * @returns {ChoiceContext} The popped context.\n     */\n    popChoiceContext() {\n        const context = this.choiceContext;\n\n        this.choiceContext = context.upper;\n\n        const forkContext = this.forkContext;\n        const headSegments = forkContext.head;\n\n        switch (context.kind) {\n            case \"&&\":\n            case \"||\":\n            case \"??\":\n\n                /*\n                 * If any result were not transferred from child contexts,\n                 * this sets the head segments to both cases.\n                 * The head segments are the path of the right-hand operand.\n                 */\n                if (!context.processed) {\n                    context.trueForkContext.add(headSegments);\n                    context.falseForkContext.add(headSegments);\n                    context.qqForkContext.add(headSegments);\n                }\n\n                /*\n                 * Transfers results to upper context if this context is in\n                 * test chunk.\n                 */\n                if (context.isForkingAsResult) {\n                    const parentContext = this.choiceContext;\n\n                    parentContext.trueForkContext.addAll(context.trueForkContext);\n                    parentContext.falseForkContext.addAll(context.falseForkContext);\n                    parentContext.qqForkContext.addAll(context.qqForkContext);\n                    parentContext.processed = true;\n\n                    return context;\n                }\n\n                break;\n\n            case \"test\":\n                if (!context.processed) {\n\n                    /*\n                     * The head segments are the path of the `if` block here.\n                     * Updates the `true` path with the end of the `if` block.\n                     */\n                    context.trueForkContext.clear();\n                    context.trueForkContext.add(headSegments);\n                } else {\n\n                    /*\n                     * The head segments are the path of the `else` block here.\n                     * Updates the `false` path with the end of the `else`\n                     * block.\n                     */\n                    context.falseForkContext.clear();\n                    context.falseForkContext.add(headSegments);\n                }\n\n                break;\n\n            case \"loop\":\n\n                /*\n                 * Loops are addressed in popLoopContext().\n                 * This is called from popLoopContext().\n                 */\n                return context;\n\n            /* istanbul ignore next */\n            default:\n                throw new Error(\"unreachable\");\n        }\n\n        // Merges all paths.\n        const prevForkContext = context.trueForkContext;\n\n        prevForkContext.addAll(context.falseForkContext);\n        forkContext.replaceHead(prevForkContext.makeNext(0, -1));\n\n        return context;\n    }\n\n    /**\n     * Makes a code path segment of the right-hand operand of a logical\n     * expression.\n     * @throws {Error} (Unreachable.)\n     * @returns {void}\n     */\n    makeLogicalRight() {\n        const context = this.choiceContext;\n        const forkContext = this.forkContext;\n\n        if (context.processed) {\n\n            /*\n             * This got segments already from the child choice context.\n             * Creates the next path from own true/false fork context.\n             */\n            let prevForkContext;\n\n            switch (context.kind) {\n                case \"&&\": // if true then go to the right-hand side.\n                    prevForkContext = context.trueForkContext;\n                    break;\n                case \"||\": // if false then go to the right-hand side.\n                    prevForkContext = context.falseForkContext;\n                    break;\n                case \"??\": // Both true/false can short-circuit, so needs the third path to go to the right-hand side. That's qqForkContext.\n                    prevForkContext = context.qqForkContext;\n                    break;\n                default:\n                    throw new Error(\"unreachable\");\n            }\n\n            forkContext.replaceHead(prevForkContext.makeNext(0, -1));\n            prevForkContext.clear();\n            context.processed = false;\n        } else {\n\n            /*\n             * This did not get segments from the child choice context.\n             * So addresses the head segments.\n             * The head segments are the path of the left-hand operand.\n             */\n            switch (context.kind) {\n                case \"&&\": // the false path can short-circuit.\n                    context.falseForkContext.add(forkContext.head);\n                    break;\n                case \"||\": // the true path can short-circuit.\n                    context.trueForkContext.add(forkContext.head);\n                    break;\n                case \"??\": // both can short-circuit.\n                    context.trueForkContext.add(forkContext.head);\n                    context.falseForkContext.add(forkContext.head);\n                    break;\n                default:\n                    throw new Error(\"unreachable\");\n            }\n\n            forkContext.replaceHead(forkContext.makeNext(-1, -1));\n        }\n    }\n\n    /**\n     * Makes a code path segment of the `if` block.\n     * @returns {void}\n     */\n    makeIfConsequent() {\n        const context = this.choiceContext;\n        const forkContext = this.forkContext;\n\n        /*\n         * If any result were not transferred from child contexts,\n         * this sets the head segments to both cases.\n         * The head segments are the path of the test expression.\n         */\n        if (!context.processed) {\n            context.trueForkContext.add(forkContext.head);\n            context.falseForkContext.add(forkContext.head);\n            context.qqForkContext.add(forkContext.head);\n        }\n\n        context.processed = false;\n\n        // Creates new path from the `true` case.\n        forkContext.replaceHead(\n            context.trueForkContext.makeNext(0, -1)\n        );\n    }\n\n    /**\n     * Makes a code path segment of the `else` block.\n     * @returns {void}\n     */\n    makeIfAlternate() {\n        const context = this.choiceContext;\n        const forkContext = this.forkContext;\n\n        /*\n         * The head segments are the path of the `if` block.\n         * Updates the `true` path with the end of the `if` block.\n         */\n        context.trueForkContext.clear();\n        context.trueForkContext.add(forkContext.head);\n        context.processed = true;\n\n        // Creates new path from the `false` case.\n        forkContext.replaceHead(\n            context.falseForkContext.makeNext(0, -1)\n        );\n    }\n\n    //--------------------------------------------------------------------------\n    // ChainExpression\n    //--------------------------------------------------------------------------\n\n    /**\n     * Push a new `ChainExpression` context to the stack.\n     * This method is called on entering to each `ChainExpression` node.\n     * This context is used to count forking in the optional chain then merge them on the exiting from the `ChainExpression` node.\n     * @returns {void}\n     */\n    pushChainContext() {\n        this.chainContext = {\n            upper: this.chainContext,\n            countChoiceContexts: 0\n        };\n    }\n\n    /**\n     * Pop a `ChainExpression` context from the stack.\n     * This method is called on exiting from each `ChainExpression` node.\n     * This merges all forks of the last optional chaining.\n     * @returns {void}\n     */\n    popChainContext() {\n        const context = this.chainContext;\n\n        this.chainContext = context.upper;\n\n        // pop all choice contexts of this.\n        for (let i = context.countChoiceContexts; i > 0; --i) {\n            this.popChoiceContext();\n        }\n    }\n\n    /**\n     * Create a choice context for optional access.\n     * This method is called on entering to each `(Call|Member)Expression[optional=true]` node.\n     * This creates a choice context as similar to `LogicalExpression[operator=\"??\"]` node.\n     * @returns {void}\n     */\n    makeOptionalNode() {\n        if (this.chainContext) {\n            this.chainContext.countChoiceContexts += 1;\n            this.pushChoiceContext(\"??\", false);\n        }\n    }\n\n    /**\n     * Create a fork.\n     * This method is called on entering to the `arguments|property` property of each `(Call|Member)Expression` node.\n     * @returns {void}\n     */\n    makeOptionalRight() {\n        if (this.chainContext) {\n            this.makeLogicalRight();\n        }\n    }\n\n    //--------------------------------------------------------------------------\n    // SwitchStatement\n    //--------------------------------------------------------------------------\n\n    /**\n     * Creates a context object of SwitchStatement and stacks it.\n     * @param {boolean} hasCase `true` if the switch statement has one or more\n     *   case parts.\n     * @param {string|null} label The label text.\n     * @returns {void}\n     */\n    pushSwitchContext(hasCase, label) {\n        this.switchContext = {\n            upper: this.switchContext,\n            hasCase,\n            defaultSegments: null,\n            defaultBodySegments: null,\n            foundDefault: false,\n            lastIsDefault: false,\n            countForks: 0\n        };\n\n        this.pushBreakContext(true, label);\n    }\n\n    /**\n     * Pops the last context of SwitchStatement and finalizes it.\n     *\n     * - Disposes all forking stack for `case` and `default`.\n     * - Creates the next code path segment from `context.brokenForkContext`.\n     * - If the last `SwitchCase` node is not a `default` part, creates a path\n     *   to the `default` body.\n     * @returns {void}\n     */\n    popSwitchContext() {\n        const context = this.switchContext;\n\n        this.switchContext = context.upper;\n\n        const forkContext = this.forkContext;\n        const brokenForkContext = this.popBreakContext().brokenForkContext;\n\n        if (context.countForks === 0) {\n\n            /*\n             * When there is only one `default` chunk and there is one or more\n             * `break` statements, even if forks are nothing, it needs to merge\n             * those.\n             */\n            if (!brokenForkContext.empty) {\n                brokenForkContext.add(forkContext.makeNext(-1, -1));\n                forkContext.replaceHead(brokenForkContext.makeNext(0, -1));\n            }\n\n            return;\n        }\n\n        const lastSegments = forkContext.head;\n\n        this.forkBypassPath();\n        const lastCaseSegments = forkContext.head;\n\n        /*\n         * `brokenForkContext` is used to make the next segment.\n         * It must add the last segment into `brokenForkContext`.\n         */\n        brokenForkContext.add(lastSegments);\n\n        /*\n         * A path which is failed in all case test should be connected to path\n         * of `default` chunk.\n         */\n        if (!context.lastIsDefault) {\n            if (context.defaultBodySegments) {\n\n                /*\n                 * Remove a link from `default` label to its chunk.\n                 * It's false route.\n                 */\n                removeConnection(context.defaultSegments, context.defaultBodySegments);\n                makeLooped(this, lastCaseSegments, context.defaultBodySegments);\n            } else {\n\n                /*\n                 * It handles the last case body as broken if `default` chunk\n                 * does not exist.\n                 */\n                brokenForkContext.add(lastCaseSegments);\n            }\n        }\n\n        // Pops the segment context stack until the entry segment.\n        for (let i = 0; i < context.countForks; ++i) {\n            this.forkContext = this.forkContext.upper;\n        }\n\n        /*\n         * Creates a path from all brokenForkContext paths.\n         * This is a path after switch statement.\n         */\n        this.forkContext.replaceHead(brokenForkContext.makeNext(0, -1));\n    }\n\n    /**\n     * Makes a code path segment for a `SwitchCase` node.\n     * @param {boolean} isEmpty `true` if the body is empty.\n     * @param {boolean} isDefault `true` if the body is the default case.\n     * @returns {void}\n     */\n    makeSwitchCaseBody(isEmpty, isDefault) {\n        const context = this.switchContext;\n\n        if (!context.hasCase) {\n            return;\n        }\n\n        /*\n         * Merge forks.\n         * The parent fork context has two segments.\n         * Those are from the current case and the body of the previous case.\n         */\n        const parentForkContext = this.forkContext;\n        const forkContext = this.pushForkContext();\n\n        forkContext.add(parentForkContext.makeNext(0, -1));\n\n        /*\n         * Save `default` chunk info.\n         * If the `default` label is not at the last, we must make a path from\n         * the last `case` to the `default` chunk.\n         */\n        if (isDefault) {\n            context.defaultSegments = parentForkContext.head;\n            if (isEmpty) {\n                context.foundDefault = true;\n            } else {\n                context.defaultBodySegments = forkContext.head;\n            }\n        } else {\n            if (!isEmpty && context.foundDefault) {\n                context.foundDefault = false;\n                context.defaultBodySegments = forkContext.head;\n            }\n        }\n\n        context.lastIsDefault = isDefault;\n        context.countForks += 1;\n    }\n\n    //--------------------------------------------------------------------------\n    // TryStatement\n    //--------------------------------------------------------------------------\n\n    /**\n     * Creates a context object of TryStatement and stacks it.\n     * @param {boolean} hasFinalizer `true` if the try statement has a\n     *   `finally` block.\n     * @returns {void}\n     */\n    pushTryContext(hasFinalizer) {\n        this.tryContext = {\n            upper: this.tryContext,\n            position: \"try\",\n            hasFinalizer,\n\n            returnedForkContext: hasFinalizer\n                ? ForkContext.newEmpty(this.forkContext)\n                : null,\n\n            thrownForkContext: ForkContext.newEmpty(this.forkContext),\n            lastOfTryIsReachable: false,\n            lastOfCatchIsReachable: false\n        };\n    }\n\n    /**\n     * Pops the last context of TryStatement and finalizes it.\n     * @returns {void}\n     */\n    popTryContext() {\n        const context = this.tryContext;\n\n        this.tryContext = context.upper;\n\n        if (context.position === \"catch\") {\n\n            // Merges two paths from the `try` block and `catch` block merely.\n            this.popForkContext();\n            return;\n        }\n\n        /*\n         * The following process is executed only when there is the `finally`\n         * block.\n         */\n\n        const returned = context.returnedForkContext;\n        const thrown = context.thrownForkContext;\n\n        if (returned.empty && thrown.empty) {\n            return;\n        }\n\n        // Separate head to normal paths and leaving paths.\n        const headSegments = this.forkContext.head;\n\n        this.forkContext = this.forkContext.upper;\n        const normalSegments = headSegments.slice(0, headSegments.length / 2 | 0);\n        const leavingSegments = headSegments.slice(headSegments.length / 2 | 0);\n\n        // Forwards the leaving path to upper contexts.\n        if (!returned.empty) {\n            getReturnContext(this).returnedForkContext.add(leavingSegments);\n        }\n        if (!thrown.empty) {\n            getThrowContext(this).thrownForkContext.add(leavingSegments);\n        }\n\n        // Sets the normal path as the next.\n        this.forkContext.replaceHead(normalSegments);\n\n        /*\n         * If both paths of the `try` block and the `catch` block are\n         * unreachable, the next path becomes unreachable as well.\n         */\n        if (!context.lastOfTryIsReachable && !context.lastOfCatchIsReachable) {\n            this.forkContext.makeUnreachable();\n        }\n    }\n\n    /**\n     * Makes a code path segment for a `catch` block.\n     * @returns {void}\n     */\n    makeCatchBlock() {\n        const context = this.tryContext;\n        const forkContext = this.forkContext;\n        const thrown = context.thrownForkContext;\n\n        // Update state.\n        context.position = \"catch\";\n        context.thrownForkContext = ForkContext.newEmpty(forkContext);\n        context.lastOfTryIsReachable = forkContext.reachable;\n\n        // Merge thrown paths.\n        thrown.add(forkContext.head);\n        const thrownSegments = thrown.makeNext(0, -1);\n\n        // Fork to a bypass and the merged thrown path.\n        this.pushForkContext();\n        this.forkBypassPath();\n        this.forkContext.add(thrownSegments);\n    }\n\n    /**\n     * Makes a code path segment for a `finally` block.\n     *\n     * In the `finally` block, parallel paths are created. The parallel paths\n     * are used as leaving-paths. The leaving-paths are paths from `return`\n     * statements and `throw` statements in a `try` block or a `catch` block.\n     * @returns {void}\n     */\n    makeFinallyBlock() {\n        const context = this.tryContext;\n        let forkContext = this.forkContext;\n        const returned = context.returnedForkContext;\n        const thrown = context.thrownForkContext;\n        const headOfLeavingSegments = forkContext.head;\n\n        // Update state.\n        if (context.position === \"catch\") {\n\n            // Merges two paths from the `try` block and `catch` block.\n            this.popForkContext();\n            forkContext = this.forkContext;\n\n            context.lastOfCatchIsReachable = forkContext.reachable;\n        } else {\n            context.lastOfTryIsReachable = forkContext.reachable;\n        }\n        context.position = \"finally\";\n\n        if (returned.empty && thrown.empty) {\n\n            // This path does not leave.\n            return;\n        }\n\n        /*\n         * Create a parallel segment from merging returned and thrown.\n         * This segment will leave at the end of this finally block.\n         */\n        const segments = forkContext.makeNext(-1, -1);\n\n        for (let i = 0; i < forkContext.count; ++i) {\n            const prevSegsOfLeavingSegment = [headOfLeavingSegments[i]];\n\n            for (let j = 0; j < returned.segmentsList.length; ++j) {\n                prevSegsOfLeavingSegment.push(returned.segmentsList[j][i]);\n            }\n            for (let j = 0; j < thrown.segmentsList.length; ++j) {\n                prevSegsOfLeavingSegment.push(thrown.segmentsList[j][i]);\n            }\n\n            segments.push(\n                CodePathSegment.newNext(\n                    this.idGenerator.next(),\n                    prevSegsOfLeavingSegment\n                )\n            );\n        }\n\n        this.pushForkContext(true);\n        this.forkContext.add(segments);\n    }\n\n    /**\n     * Makes a code path segment from the first throwable node to the `catch`\n     * block or the `finally` block.\n     * @returns {void}\n     */\n    makeFirstThrowablePathInTryBlock() {\n        const forkContext = this.forkContext;\n\n        if (!forkContext.reachable) {\n            return;\n        }\n\n        const context = getThrowContext(this);\n\n        if (context === this ||\n            context.position !== \"try\" ||\n            !context.thrownForkContext.empty\n        ) {\n            return;\n        }\n\n        context.thrownForkContext.add(forkContext.head);\n        forkContext.replaceHead(forkContext.makeNext(-1, -1));\n    }\n\n    //--------------------------------------------------------------------------\n    // Loop Statements\n    //--------------------------------------------------------------------------\n\n    /**\n     * Creates a context object of a loop statement and stacks it.\n     * @param {string} type The type of the node which was triggered. One of\n     *   `WhileStatement`, `DoWhileStatement`, `ForStatement`, `ForInStatement`,\n     *   and `ForStatement`.\n     * @param {string|null} label A label of the node which was triggered.\n     * @throws {Error} (Unreachable - unknown type.)\n     * @returns {void}\n     */\n    pushLoopContext(type, label) {\n        const forkContext = this.forkContext;\n        const breakContext = this.pushBreakContext(true, label);\n\n        switch (type) {\n            case \"WhileStatement\":\n                this.pushChoiceContext(\"loop\", false);\n                this.loopContext = {\n                    upper: this.loopContext,\n                    type,\n                    label,\n                    test: void 0,\n                    continueDestSegments: null,\n                    brokenForkContext: breakContext.brokenForkContext\n                };\n                break;\n\n            case \"DoWhileStatement\":\n                this.pushChoiceContext(\"loop\", false);\n                this.loopContext = {\n                    upper: this.loopContext,\n                    type,\n                    label,\n                    test: void 0,\n                    entrySegments: null,\n                    continueForkContext: ForkContext.newEmpty(forkContext),\n                    brokenForkContext: breakContext.brokenForkContext\n                };\n                break;\n\n            case \"ForStatement\":\n                this.pushChoiceContext(\"loop\", false);\n                this.loopContext = {\n                    upper: this.loopContext,\n                    type,\n                    label,\n                    test: void 0,\n                    endOfInitSegments: null,\n                    testSegments: null,\n                    endOfTestSegments: null,\n                    updateSegments: null,\n                    endOfUpdateSegments: null,\n                    continueDestSegments: null,\n                    brokenForkContext: breakContext.brokenForkContext\n                };\n                break;\n\n            case \"ForInStatement\":\n            case \"ForOfStatement\":\n                this.loopContext = {\n                    upper: this.loopContext,\n                    type,\n                    label,\n                    prevSegments: null,\n                    leftSegments: null,\n                    endOfLeftSegments: null,\n                    continueDestSegments: null,\n                    brokenForkContext: breakContext.brokenForkContext\n                };\n                break;\n\n            /* istanbul ignore next */\n            default:\n                throw new Error(`unknown type: \"${type}\"`);\n        }\n    }\n\n    /**\n     * Pops the last context of a loop statement and finalizes it.\n     * @throws {Error} (Unreachable - unknown type.)\n     * @returns {void}\n     */\n    popLoopContext() {\n        const context = this.loopContext;\n\n        this.loopContext = context.upper;\n\n        const forkContext = this.forkContext;\n        const brokenForkContext = this.popBreakContext().brokenForkContext;\n\n        // Creates a looped path.\n        switch (context.type) {\n            case \"WhileStatement\":\n            case \"ForStatement\":\n                this.popChoiceContext();\n                makeLooped(\n                    this,\n                    forkContext.head,\n                    context.continueDestSegments\n                );\n                break;\n\n            case \"DoWhileStatement\": {\n                const choiceContext = this.popChoiceContext();\n\n                if (!choiceContext.processed) {\n                    choiceContext.trueForkContext.add(forkContext.head);\n                    choiceContext.falseForkContext.add(forkContext.head);\n                }\n                if (context.test !== true) {\n                    brokenForkContext.addAll(choiceContext.falseForkContext);\n                }\n\n                // `true` paths go to looping.\n                const segmentsList = choiceContext.trueForkContext.segmentsList;\n\n                for (let i = 0; i < segmentsList.length; ++i) {\n                    makeLooped(\n                        this,\n                        segmentsList[i],\n                        context.entrySegments\n                    );\n                }\n                break;\n            }\n\n            case \"ForInStatement\":\n            case \"ForOfStatement\":\n                brokenForkContext.add(forkContext.head);\n                makeLooped(\n                    this,\n                    forkContext.head,\n                    context.leftSegments\n                );\n                break;\n\n            /* istanbul ignore next */\n            default:\n                throw new Error(\"unreachable\");\n        }\n\n        // Go next.\n        if (brokenForkContext.empty) {\n            forkContext.replaceHead(forkContext.makeUnreachable(-1, -1));\n        } else {\n            forkContext.replaceHead(brokenForkContext.makeNext(0, -1));\n        }\n    }\n\n    /**\n     * Makes a code path segment for the test part of a WhileStatement.\n     * @param {boolean|undefined} test The test value (only when constant).\n     * @returns {void}\n     */\n    makeWhileTest(test) {\n        const context = this.loopContext;\n        const forkContext = this.forkContext;\n        const testSegments = forkContext.makeNext(0, -1);\n\n        // Update state.\n        context.test = test;\n        context.continueDestSegments = testSegments;\n        forkContext.replaceHead(testSegments);\n    }\n\n    /**\n     * Makes a code path segment for the body part of a WhileStatement.\n     * @returns {void}\n     */\n    makeWhileBody() {\n        const context = this.loopContext;\n        const choiceContext = this.choiceContext;\n        const forkContext = this.forkContext;\n\n        if (!choiceContext.processed) {\n            choiceContext.trueForkContext.add(forkContext.head);\n            choiceContext.falseForkContext.add(forkContext.head);\n        }\n\n        // Update state.\n        if (context.test !== true) {\n            context.brokenForkContext.addAll(choiceContext.falseForkContext);\n        }\n        forkContext.replaceHead(choiceContext.trueForkContext.makeNext(0, -1));\n    }\n\n    /**\n     * Makes a code path segment for the body part of a DoWhileStatement.\n     * @returns {void}\n     */\n    makeDoWhileBody() {\n        const context = this.loopContext;\n        const forkContext = this.forkContext;\n        const bodySegments = forkContext.makeNext(-1, -1);\n\n        // Update state.\n        context.entrySegments = bodySegments;\n        forkContext.replaceHead(bodySegments);\n    }\n\n    /**\n     * Makes a code path segment for the test part of a DoWhileStatement.\n     * @param {boolean|undefined} test The test value (only when constant).\n     * @returns {void}\n     */\n    makeDoWhileTest(test) {\n        const context = this.loopContext;\n        const forkContext = this.forkContext;\n\n        context.test = test;\n\n        // Creates paths of `continue` statements.\n        if (!context.continueForkContext.empty) {\n            context.continueForkContext.add(forkContext.head);\n            const testSegments = context.continueForkContext.makeNext(0, -1);\n\n            forkContext.replaceHead(testSegments);\n        }\n    }\n\n    /**\n     * Makes a code path segment for the test part of a ForStatement.\n     * @param {boolean|undefined} test The test value (only when constant).\n     * @returns {void}\n     */\n    makeForTest(test) {\n        const context = this.loopContext;\n        const forkContext = this.forkContext;\n        const endOfInitSegments = forkContext.head;\n        const testSegments = forkContext.makeNext(-1, -1);\n\n        // Update state.\n        context.test = test;\n        context.endOfInitSegments = endOfInitSegments;\n        context.continueDestSegments = context.testSegments = testSegments;\n        forkContext.replaceHead(testSegments);\n    }\n\n    /**\n     * Makes a code path segment for the update part of a ForStatement.\n     * @returns {void}\n     */\n    makeForUpdate() {\n        const context = this.loopContext;\n        const choiceContext = this.choiceContext;\n        const forkContext = this.forkContext;\n\n        // Make the next paths of the test.\n        if (context.testSegments) {\n            finalizeTestSegmentsOfFor(\n                context,\n                choiceContext,\n                forkContext.head\n            );\n        } else {\n            context.endOfInitSegments = forkContext.head;\n        }\n\n        // Update state.\n        const updateSegments = forkContext.makeDisconnected(-1, -1);\n\n        context.continueDestSegments = context.updateSegments = updateSegments;\n        forkContext.replaceHead(updateSegments);\n    }\n\n    /**\n     * Makes a code path segment for the body part of a ForStatement.\n     * @returns {void}\n     */\n    makeForBody() {\n        const context = this.loopContext;\n        const choiceContext = this.choiceContext;\n        const forkContext = this.forkContext;\n\n        // Update state.\n        if (context.updateSegments) {\n            context.endOfUpdateSegments = forkContext.head;\n\n            // `update` -> `test`\n            if (context.testSegments) {\n                makeLooped(\n                    this,\n                    context.endOfUpdateSegments,\n                    context.testSegments\n                );\n            }\n        } else if (context.testSegments) {\n            finalizeTestSegmentsOfFor(\n                context,\n                choiceContext,\n                forkContext.head\n            );\n        } else {\n            context.endOfInitSegments = forkContext.head;\n        }\n\n        let bodySegments = context.endOfTestSegments;\n\n        if (!bodySegments) {\n\n            /*\n             * If there is not the `test` part, the `body` path comes from the\n             * `init` part and the `update` part.\n             */\n            const prevForkContext = ForkContext.newEmpty(forkContext);\n\n            prevForkContext.add(context.endOfInitSegments);\n            if (context.endOfUpdateSegments) {\n                prevForkContext.add(context.endOfUpdateSegments);\n            }\n\n            bodySegments = prevForkContext.makeNext(0, -1);\n        }\n        context.continueDestSegments = context.continueDestSegments || bodySegments;\n        forkContext.replaceHead(bodySegments);\n    }\n\n    /**\n     * Makes a code path segment for the left part of a ForInStatement and a\n     * ForOfStatement.\n     * @returns {void}\n     */\n    makeForInOfLeft() {\n        const context = this.loopContext;\n        const forkContext = this.forkContext;\n        const leftSegments = forkContext.makeDisconnected(-1, -1);\n\n        // Update state.\n        context.prevSegments = forkContext.head;\n        context.leftSegments = context.continueDestSegments = leftSegments;\n        forkContext.replaceHead(leftSegments);\n    }\n\n    /**\n     * Makes a code path segment for the right part of a ForInStatement and a\n     * ForOfStatement.\n     * @returns {void}\n     */\n    makeForInOfRight() {\n        const context = this.loopContext;\n        const forkContext = this.forkContext;\n        const temp = ForkContext.newEmpty(forkContext);\n\n        temp.add(context.prevSegments);\n        const rightSegments = temp.makeNext(-1, -1);\n\n        // Update state.\n        context.endOfLeftSegments = forkContext.head;\n        forkContext.replaceHead(rightSegments);\n    }\n\n    /**\n     * Makes a code path segment for the body part of a ForInStatement and a\n     * ForOfStatement.\n     * @returns {void}\n     */\n    makeForInOfBody() {\n        const context = this.loopContext;\n        const forkContext = this.forkContext;\n        const temp = ForkContext.newEmpty(forkContext);\n\n        temp.add(context.endOfLeftSegments);\n        const bodySegments = temp.makeNext(-1, -1);\n\n        // Make a path: `right` -> `left`.\n        makeLooped(this, forkContext.head, context.leftSegments);\n\n        // Update state.\n        context.brokenForkContext.add(forkContext.head);\n        forkContext.replaceHead(bodySegments);\n    }\n\n    //--------------------------------------------------------------------------\n    // Control Statements\n    //--------------------------------------------------------------------------\n\n    /**\n     * Creates new context for BreakStatement.\n     * @param {boolean} breakable The flag to indicate it can break by\n     *      an unlabeled BreakStatement.\n     * @param {string|null} label The label of this context.\n     * @returns {Object} The new context.\n     */\n    pushBreakContext(breakable, label) {\n        this.breakContext = {\n            upper: this.breakContext,\n            breakable,\n            label,\n            brokenForkContext: ForkContext.newEmpty(this.forkContext)\n        };\n        return this.breakContext;\n    }\n\n    /**\n     * Removes the top item of the break context stack.\n     * @returns {Object} The removed context.\n     */\n    popBreakContext() {\n        const context = this.breakContext;\n        const forkContext = this.forkContext;\n\n        this.breakContext = context.upper;\n\n        // Process this context here for other than switches and loops.\n        if (!context.breakable) {\n            const brokenForkContext = context.brokenForkContext;\n\n            if (!brokenForkContext.empty) {\n                brokenForkContext.add(forkContext.head);\n                forkContext.replaceHead(brokenForkContext.makeNext(0, -1));\n            }\n        }\n\n        return context;\n    }\n\n    /**\n     * Makes a path for a `break` statement.\n     *\n     * It registers the head segment to a context of `break`.\n     * It makes new unreachable segment, then it set the head with the segment.\n     * @param {string} label A label of the break statement.\n     * @returns {void}\n     */\n    makeBreak(label) {\n        const forkContext = this.forkContext;\n\n        if (!forkContext.reachable) {\n            return;\n        }\n\n        const context = getBreakContext(this, label);\n\n        /* istanbul ignore else: foolproof (syntax error) */\n        if (context) {\n            context.brokenForkContext.add(forkContext.head);\n        }\n\n        forkContext.replaceHead(forkContext.makeUnreachable(-1, -1));\n    }\n\n    /**\n     * Makes a path for a `continue` statement.\n     *\n     * It makes a looping path.\n     * It makes new unreachable segment, then it set the head with the segment.\n     * @param {string} label A label of the continue statement.\n     * @returns {void}\n     */\n    makeContinue(label) {\n        const forkContext = this.forkContext;\n\n        if (!forkContext.reachable) {\n            return;\n        }\n\n        const context = getContinueContext(this, label);\n\n        /* istanbul ignore else: foolproof (syntax error) */\n        if (context) {\n            if (context.continueDestSegments) {\n                makeLooped(this, forkContext.head, context.continueDestSegments);\n\n                // If the context is a for-in/of loop, this effects a break also.\n                if (context.type === \"ForInStatement\" ||\n                    context.type === \"ForOfStatement\"\n                ) {\n                    context.brokenForkContext.add(forkContext.head);\n                }\n            } else {\n                context.continueForkContext.add(forkContext.head);\n            }\n        }\n        forkContext.replaceHead(forkContext.makeUnreachable(-1, -1));\n    }\n\n    /**\n     * Makes a path for a `return` statement.\n     *\n     * It registers the head segment to a context of `return`.\n     * It makes new unreachable segment, then it set the head with the segment.\n     * @returns {void}\n     */\n    makeReturn() {\n        const forkContext = this.forkContext;\n\n        if (forkContext.reachable) {\n            getReturnContext(this).returnedForkContext.add(forkContext.head);\n            forkContext.replaceHead(forkContext.makeUnreachable(-1, -1));\n        }\n    }\n\n    /**\n     * Makes a path for a `throw` statement.\n     *\n     * It registers the head segment to a context of `throw`.\n     * It makes new unreachable segment, then it set the head with the segment.\n     * @returns {void}\n     */\n    makeThrow() {\n        const forkContext = this.forkContext;\n\n        if (forkContext.reachable) {\n            getThrowContext(this).thrownForkContext.add(forkContext.head);\n            forkContext.replaceHead(forkContext.makeUnreachable(-1, -1));\n        }\n    }\n\n    /**\n     * Makes the final path.\n     * @returns {void}\n     */\n    makeFinal() {\n        const segments = this.currentSegments;\n\n        if (segments.length > 0 && segments[0].reachable) {\n            this.returnedForkContext.add(segments);\n        }\n    }\n}\n\nmodule.exports = CodePathState;\n$/lib/linter/config-comment-parser.js\u0011/**\n * @fileoverview Config Comment Parser\n * @author Nicholas C. Zakas\n */\n\n/* eslint class-methods-use-this: off -- Methods desired on instance */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst levn = require(\"levn\"),\n    {\n        Legacy: {\n            ConfigOps\n        }\n    } = require(\"@eslint/eslintrc/universal\");\n\nconst debug = require(\"debug\")(\"eslint:config-comment-parser\");\n\n//------------------------------------------------------------------------------\n// Public Interface\n//------------------------------------------------------------------------------\n\n/**\n * Object to parse ESLint configuration comments inside JavaScript files.\n * @name ConfigCommentParser\n */\nmodule.exports = class ConfigCommentParser {\n\n    /**\n     * Parses a list of \"name:string_value\" or/and \"name\" options divided by comma or\n     * whitespace. Used for \"global\" and \"exported\" comments.\n     * @param {string} string The string to parse.\n     * @param {Comment} comment The comment node which has the string.\n     * @returns {Object} Result map object of names and string values, or null values if no value was provided\n     */\n    parseStringConfig(string, comment) {\n        debug(\"Parsing String config\");\n\n        const items = {};\n\n        // Collapse whitespace around `:` and `,` to make parsing easier\n        const trimmedString = string.replace(/\\s*([:,])\\s*/gu, \"$1\");\n\n        trimmedString.split(/\\s|,+/u).forEach(name => {\n            if (!name) {\n                return;\n            }\n\n            // value defaults to null (if not provided), e.g: \"foo\" => [\"foo\", null]\n            const [key, value = null] = name.split(\":\");\n\n            items[key] = { value, comment };\n        });\n        return items;\n    }\n\n    /**\n     * Parses a JSON-like config.\n     * @param {string} string The string to parse.\n     * @param {Object} location Start line and column of comments for potential error message.\n     * @returns {({success: true, config: Object}|{success: false, error: Problem})} Result map object\n     */\n    parseJsonConfig(string, location) {\n        debug(\"Parsing JSON config\");\n\n        let items = {};\n\n        // Parses a JSON-like comment by the same way as parsing CLI option.\n        try {\n            items = levn.parse(\"Object\", string) || {};\n\n            // Some tests say that it should ignore invalid comments such as `/*eslint no-alert:abc*/`.\n            // Also, commaless notations have invalid severity:\n            //     \"no-alert: 2 no-console: 2\" --> {\"no-alert\": \"2 no-console: 2\"}\n            // Should ignore that case as well.\n            if (ConfigOps.isEverySeverityValid(items)) {\n                return {\n                    success: true,\n                    config: items\n                };\n            }\n        } catch {\n\n            debug(\"Levn parsing failed; falling back to manual parsing.\");\n\n            // ignore to parse the string by a fallback.\n        }\n\n        /*\n         * Optionator cannot parse commaless notations.\n         * But we are supporting that. So this is a fallback for that.\n         */\n        items = {};\n        const normalizedString = string.replace(/([-a-zA-Z0-9/]+):/gu, \"\\\"$1\\\":\").replace(/(\\]|[0-9])\\s+(?=\")/u, \"$1,\");\n\n        try {\n            items = JSON.parse(`{${normalizedString}}`);\n        } catch (ex) {\n            debug(\"Manual parsing failed.\");\n\n            return {\n                success: false,\n                error: {\n                    ruleId: null,\n                    fatal: true,\n                    severity: 2,\n                    message: `Failed to parse JSON from '${normalizedString}': ${ex.message}`,\n                    line: location.start.line,\n                    column: location.start.column + 1\n                }\n            };\n\n        }\n\n        return {\n            success: true,\n            config: items\n        };\n    }\n\n    /**\n     * Parses a config of values separated by comma.\n     * @param {string} string The string to parse.\n     * @returns {Object} Result map of values and true values\n     */\n    parseListConfig(string) {\n        debug(\"Parsing list config\");\n\n        const items = {};\n\n        // Collapse whitespace around commas\n        string.replace(/\\s*,\\s*/gu, \",\").split(/,+/u).forEach(name => {\n            const trimmedName = name.trim();\n\n            if (trimmedName) {\n                items[trimmedName] = true;\n            }\n        });\n        return items;\n    }\n\n};\n/lib/unsupported-api.js\u0002/**\n * @fileoverview APIs that are not officially supported by ESLint.\n *      These APIs may change or be removed at any time. Use at your\n *      own risk.\n * @author Nicholas C. Zakas\n */\n\n\"use strict\";\n\n//-----------------------------------------------------------------------------\n// Requirements\n//-----------------------------------------------------------------------------\n\nconst { FileEnumerator } = require(\"./cli-engine/file-enumerator\");\n\n//-----------------------------------------------------------------------------\n// Exports\n//-----------------------------------------------------------------------------\n\nmodule.exports = {\n    builtinRules: require(\"./rules\"),\n    FileEnumerator\n};\n3/lib/source-code/token-store/padded-token-cursor.js\u0006N/**\n * @fileoverview Define the cursor which iterates tokens only, with inflated range.\n * @author Toru Nagashima\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst ForwardTokenCursor = require(\"./forward-token-cursor\");\n\n//------------------------------------------------------------------------------\n// Exports\n//------------------------------------------------------------------------------\n\n/**\n * The cursor which iterates tokens only, with inflated range.\n * This is for the backward compatibility of padding options.\n */\nmodule.exports = class PaddedTokenCursor extends ForwardTokenCursor {\n\n    /**\n     * Initializes this cursor.\n     * @param {Token[]} tokens The array of tokens.\n     * @param {Comment[]} comments The array of comments.\n     * @param {Object} indexMap The map from locations to indices in `tokens`.\n     * @param {number} startLoc The start location of the iteration range.\n     * @param {number} endLoc The end location of the iteration range.\n     * @param {number} beforeCount The number of tokens this cursor iterates before start.\n     * @param {number} afterCount The number of tokens this cursor iterates after end.\n     */\n    constructor(tokens, comments, indexMap, startLoc, endLoc, beforeCount, afterCount) {\n        super(tokens, comments, indexMap, startLoc, endLoc);\n        this.index = Math.max(0, this.index - beforeCount);\n        this.indexEnd = Math.min(tokens.length - 1, this.indexEnd + afterCount);\n    }\n};\n/LICENSE\u0004FCopyright OpenJS Foundation and other contributors, <www.openjsf.org>\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n/lib/rules/comma-spacing.js\u001a\u001a/**\n * @fileoverview Comma spacing - validates spacing before and after comma\n * @author Vignesh Anand aka vegetableman.\n */\n\"use strict\";\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"layout\",\n\n        docs: {\n            description: \"enforce consistent spacing before and after commas\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/comma-spacing\"\n        },\n\n        fixable: \"whitespace\",\n\n        schema: [\n            {\n                type: \"object\",\n                properties: {\n                    before: {\n                        type: \"boolean\",\n                        default: false\n                    },\n                    after: {\n                        type: \"boolean\",\n                        default: true\n                    }\n                },\n                additionalProperties: false\n            }\n        ],\n\n        messages: {\n            missing: \"A space is required {{loc}} ','.\",\n            unexpected: \"There should be no space {{loc}} ','.\"\n        }\n    },\n\n    create(context) {\n\n        const sourceCode = context.getSourceCode();\n        const tokensAndComments = sourceCode.tokensAndComments;\n\n        const options = {\n            before: context.options[0] ? context.options[0].before : false,\n            after: context.options[0] ? context.options[0].after : true\n        };\n\n        //--------------------------------------------------------------------------\n        // Helpers\n        //--------------------------------------------------------------------------\n\n        // list of comma tokens to ignore for the check of leading whitespace\n        const commaTokensToIgnore = [];\n\n        /**\n         * Reports a spacing error with an appropriate message.\n         * @param {ASTNode} node The binary expression node to report.\n         * @param {string} loc Is the error \"before\" or \"after\" the comma?\n         * @param {ASTNode} otherNode The node at the left or right of `node`\n         * @returns {void}\n         * @private\n         */\n        function report(node, loc, otherNode) {\n            context.report({\n                node,\n                fix(fixer) {\n                    if (options[loc]) {\n                        if (loc === \"before\") {\n                            return fixer.insertTextBefore(node, \" \");\n                        }\n                        return fixer.insertTextAfter(node, \" \");\n\n                    }\n                    let start, end;\n                    const newText = \"\";\n\n                    if (loc === \"before\") {\n                        start = otherNode.range[1];\n                        end = node.range[0];\n                    } else {\n                        start = node.range[1];\n                        end = otherNode.range[0];\n                    }\n\n                    return fixer.replaceTextRange([start, end], newText);\n\n                },\n                messageId: options[loc] ? \"missing\" : \"unexpected\",\n                data: {\n                    loc\n                }\n            });\n        }\n\n        /**\n         * Validates the spacing around a comma token.\n         * @param {Object} tokens The tokens to be validated.\n         * @param {Token} tokens.comma The token representing the comma.\n         * @param {Token} [tokens.left] The last token before the comma.\n         * @param {Token} [tokens.right] The first token after the comma.\n         * @param {Token|ASTNode} reportItem The item to use when reporting an error.\n         * @returns {void}\n         * @private\n         */\n        function validateCommaItemSpacing(tokens, reportItem) {\n            if (tokens.left && astUtils.isTokenOnSameLine(tokens.left, tokens.comma) &&\n                    (options.before !== sourceCode.isSpaceBetweenTokens(tokens.left, tokens.comma))\n            ) {\n                report(reportItem, \"before\", tokens.left);\n            }\n\n            if (tokens.right && astUtils.isClosingParenToken(tokens.right)) {\n                return;\n            }\n\n            if (tokens.right && !options.after && tokens.right.type === \"Line\") {\n                return;\n            }\n\n            if (tokens.right && astUtils.isTokenOnSameLine(tokens.comma, tokens.right) &&\n                    (options.after !== sourceCode.isSpaceBetweenTokens(tokens.comma, tokens.right))\n            ) {\n                report(reportItem, \"after\", tokens.right);\n            }\n        }\n\n        /**\n         * Adds null elements of the given ArrayExpression or ArrayPattern node to the ignore list.\n         * @param {ASTNode} node An ArrayExpression or ArrayPattern node.\n         * @returns {void}\n         */\n        function addNullElementsToIgnoreList(node) {\n            let previousToken = sourceCode.getFirstToken(node);\n\n            node.elements.forEach(element => {\n                let token;\n\n                if (element === null) {\n                    token = sourceCode.getTokenAfter(previousToken);\n\n                    if (astUtils.isCommaToken(token)) {\n                        commaTokensToIgnore.push(token);\n                    }\n                } else {\n                    token = sourceCode.getTokenAfter(element);\n                }\n\n                previousToken = token;\n            });\n        }\n\n        //--------------------------------------------------------------------------\n        // Public\n        //--------------------------------------------------------------------------\n\n        return {\n            \"Program:exit\"() {\n                tokensAndComments.forEach((token, i) => {\n\n                    if (!astUtils.isCommaToken(token)) {\n                        return;\n                    }\n\n                    if (token && token.type === \"JSXText\") {\n                        return;\n                    }\n\n                    const previousToken = tokensAndComments[i - 1];\n                    const nextToken = tokensAndComments[i + 1];\n\n                    validateCommaItemSpacing({\n                        comma: token,\n                        left: astUtils.isCommaToken(previousToken) || commaTokensToIgnore.includes(token) ? null : previousToken,\n                        right: astUtils.isCommaToken(nextToken) ? null : nextToken\n                    }, token);\n                });\n            },\n            ArrayExpression: addNullElementsToIgnoreList,\n            ArrayPattern: addNullElementsToIgnoreList\n\n        };\n\n    }\n};\n#/lib/linter/node-event-generator.js1/**\n * @fileoverview The event generator for AST nodes.\n * @author Toru Nagashima\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst esquery = require(\"esquery\");\n\n//------------------------------------------------------------------------------\n// Typedefs\n//------------------------------------------------------------------------------\n\n/**\n * An object describing an AST selector\n * @typedef {Object} ASTSelector\n * @property {string} rawSelector The string that was parsed into this selector\n * @property {boolean} isExit `true` if this should be emitted when exiting the node rather than when entering\n * @property {Object} parsedSelector An object (from esquery) describing the matching behavior of the selector\n * @property {string[]|null} listenerTypes A list of node types that could possibly cause the selector to match,\n * or `null` if all node types could cause a match\n * @property {number} attributeCount The total number of classes, pseudo-classes, and attribute queries in this selector\n * @property {number} identifierCount The total number of identifier queries in this selector\n */\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\n/**\n * Computes the union of one or more arrays\n * @param {...any[]} arrays One or more arrays to union\n * @returns {any[]} The union of the input arrays\n */\nfunction union(...arrays) {\n    return [...new Set(arrays.flat())];\n}\n\n/**\n * Computes the intersection of one or more arrays\n * @param {...any[]} arrays One or more arrays to intersect\n * @returns {any[]} The intersection of the input arrays\n */\nfunction intersection(...arrays) {\n    if (arrays.length === 0) {\n        return [];\n    }\n\n    let result = [...new Set(arrays[0])];\n\n    for (const array of arrays.slice(1)) {\n        result = result.filter(x => array.includes(x));\n    }\n    return result;\n}\n\n/**\n * Gets the possible types of a selector\n * @param {Object} parsedSelector An object (from esquery) describing the matching behavior of the selector\n * @returns {string[]|null} The node types that could possibly trigger this selector, or `null` if all node types could trigger it\n */\nfunction getPossibleTypes(parsedSelector) {\n    switch (parsedSelector.type) {\n        case \"identifier\":\n            return [parsedSelector.value];\n\n        case \"matches\": {\n            const typesForComponents = parsedSelector.selectors.map(getPossibleTypes);\n\n            if (typesForComponents.every(Boolean)) {\n                return union(...typesForComponents);\n            }\n            return null;\n        }\n\n        case \"compound\": {\n            const typesForComponents = parsedSelector.selectors.map(getPossibleTypes).filter(typesForComponent => typesForComponent);\n\n            // If all of the components could match any type, then the compound could also match any type.\n            if (!typesForComponents.length) {\n                return null;\n            }\n\n            /*\n             * If at least one of the components could only match a particular type, the compound could only match\n             * the intersection of those types.\n             */\n            return intersection(...typesForComponents);\n        }\n\n        case \"child\":\n        case \"descendant\":\n        case \"sibling\":\n        case \"adjacent\":\n            return getPossibleTypes(parsedSelector.right);\n\n        case \"class\":\n            if (parsedSelector.name === \"function\") {\n                return [\"FunctionDeclaration\", \"FunctionExpression\", \"ArrowFunctionExpression\"];\n            }\n\n            return null;\n\n        default:\n            return null;\n\n    }\n}\n\n/**\n * Counts the number of class, pseudo-class, and attribute queries in this selector\n * @param {Object} parsedSelector An object (from esquery) describing the selector's matching behavior\n * @returns {number} The number of class, pseudo-class, and attribute queries in this selector\n */\nfunction countClassAttributes(parsedSelector) {\n    switch (parsedSelector.type) {\n        case \"child\":\n        case \"descendant\":\n        case \"sibling\":\n        case \"adjacent\":\n            return countClassAttributes(parsedSelector.left) + countClassAttributes(parsedSelector.right);\n\n        case \"compound\":\n        case \"not\":\n        case \"matches\":\n            return parsedSelector.selectors.reduce((sum, childSelector) => sum + countClassAttributes(childSelector), 0);\n\n        case \"attribute\":\n        case \"field\":\n        case \"nth-child\":\n        case \"nth-last-child\":\n            return 1;\n\n        default:\n            return 0;\n    }\n}\n\n/**\n * Counts the number of identifier queries in this selector\n * @param {Object} parsedSelector An object (from esquery) describing the selector's matching behavior\n * @returns {number} The number of identifier queries\n */\nfunction countIdentifiers(parsedSelector) {\n    switch (parsedSelector.type) {\n        case \"child\":\n        case \"descendant\":\n        case \"sibling\":\n        case \"adjacent\":\n            return countIdentifiers(parsedSelector.left) + countIdentifiers(parsedSelector.right);\n\n        case \"compound\":\n        case \"not\":\n        case \"matches\":\n            return parsedSelector.selectors.reduce((sum, childSelector) => sum + countIdentifiers(childSelector), 0);\n\n        case \"identifier\":\n            return 1;\n\n        default:\n            return 0;\n    }\n}\n\n/**\n * Compares the specificity of two selector objects, with CSS-like rules.\n * @param {ASTSelector} selectorA An AST selector descriptor\n * @param {ASTSelector} selectorB Another AST selector descriptor\n * @returns {number}\n * a value less than 0 if selectorA is less specific than selectorB\n * a value greater than 0 if selectorA is more specific than selectorB\n * a value less than 0 if selectorA and selectorB have the same specificity, and selectorA <= selectorB alphabetically\n * a value greater than 0 if selectorA and selectorB have the same specificity, and selectorA > selectorB alphabetically\n */\nfunction compareSpecificity(selectorA, selectorB) {\n    return selectorA.attributeCount - selectorB.attributeCount ||\n        selectorA.identifierCount - selectorB.identifierCount ||\n        (selectorA.rawSelector <= selectorB.rawSelector ? -1 : 1);\n}\n\n/**\n * Parses a raw selector string, and throws a useful error if parsing fails.\n * @param {string} rawSelector A raw AST selector\n * @returns {Object} An object (from esquery) describing the matching behavior of this selector\n * @throws {Error} An error if the selector is invalid\n */\nfunction tryParseSelector(rawSelector) {\n    try {\n        return esquery.parse(rawSelector.replace(/:exit$/u, \"\"));\n    } catch (err) {\n        if (err.location && err.location.start && typeof err.location.start.offset === \"number\") {\n            throw new SyntaxError(`Syntax error in selector \"${rawSelector}\" at position ${err.location.start.offset}: ${err.message}`);\n        }\n        throw err;\n    }\n}\n\nconst selectorCache = new Map();\n\n/**\n * Parses a raw selector string, and returns the parsed selector along with specificity and type information.\n * @param {string} rawSelector A raw AST selector\n * @returns {ASTSelector} A selector descriptor\n */\nfunction parseSelector(rawSelector) {\n    if (selectorCache.has(rawSelector)) {\n        return selectorCache.get(rawSelector);\n    }\n\n    const parsedSelector = tryParseSelector(rawSelector);\n\n    const result = {\n        rawSelector,\n        isExit: rawSelector.endsWith(\":exit\"),\n        parsedSelector,\n        listenerTypes: getPossibleTypes(parsedSelector),\n        attributeCount: countClassAttributes(parsedSelector),\n        identifierCount: countIdentifiers(parsedSelector)\n    };\n\n    selectorCache.set(rawSelector, result);\n    return result;\n}\n\n//------------------------------------------------------------------------------\n// Public Interface\n//------------------------------------------------------------------------------\n\n/**\n * The event generator for AST nodes.\n * This implements below interface.\n *\n * ```ts\n * interface EventGenerator {\n *     emitter: SafeEmitter;\n *     enterNode(node: ASTNode): void;\n *     leaveNode(node: ASTNode): void;\n * }\n * ```\n */\nclass NodeEventGenerator {\n\n    /**\n     * @param {SafeEmitter} emitter\n     * An SafeEmitter which is the destination of events. This emitter must already\n     * have registered listeners for all of the events that it needs to listen for.\n     * (See lib/linter/safe-emitter.js for more details on `SafeEmitter`.)\n     * @param {ESQueryOptions} esqueryOptions `esquery` options for traversing custom nodes.\n     * @returns {NodeEventGenerator} new instance\n     */\n    constructor(emitter, esqueryOptions) {\n        this.emitter = emitter;\n        this.esqueryOptions = esqueryOptions;\n        this.currentAncestry = [];\n        this.enterSelectorsByNodeType = new Map();\n        this.exitSelectorsByNodeType = new Map();\n        this.anyTypeEnterSelectors = [];\n        this.anyTypeExitSelectors = [];\n\n        emitter.eventNames().forEach(rawSelector => {\n            const selector = parseSelector(rawSelector);\n\n            if (selector.listenerTypes) {\n                const typeMap = selector.isExit ? this.exitSelectorsByNodeType : this.enterSelectorsByNodeType;\n\n                selector.listenerTypes.forEach(nodeType => {\n                    if (!typeMap.has(nodeType)) {\n                        typeMap.set(nodeType, []);\n                    }\n                    typeMap.get(nodeType).push(selector);\n                });\n                return;\n            }\n            const selectors = selector.isExit ? this.anyTypeExitSelectors : this.anyTypeEnterSelectors;\n\n            selectors.push(selector);\n        });\n\n        this.anyTypeEnterSelectors.sort(compareSpecificity);\n        this.anyTypeExitSelectors.sort(compareSpecificity);\n        this.enterSelectorsByNodeType.forEach(selectorList => selectorList.sort(compareSpecificity));\n        this.exitSelectorsByNodeType.forEach(selectorList => selectorList.sort(compareSpecificity));\n    }\n\n    /**\n     * Checks a selector against a node, and emits it if it matches\n     * @param {ASTNode} node The node to check\n     * @param {ASTSelector} selector An AST selector descriptor\n     * @returns {void}\n     */\n    applySelector(node, selector) {\n        if (esquery.matches(node, selector.parsedSelector, this.currentAncestry, this.esqueryOptions)) {\n            this.emitter.emit(selector.rawSelector, node);\n        }\n    }\n\n    /**\n     * Applies all appropriate selectors to a node, in specificity order\n     * @param {ASTNode} node The node to check\n     * @param {boolean} isExit `false` if the node is currently being entered, `true` if it's currently being exited\n     * @returns {void}\n     */\n    applySelectors(node, isExit) {\n        const selectorsByNodeType = (isExit ? this.exitSelectorsByNodeType : this.enterSelectorsByNodeType).get(node.type) || [];\n        const anyTypeSelectors = isExit ? this.anyTypeExitSelectors : this.anyTypeEnterSelectors;\n\n        /*\n         * selectorsByNodeType and anyTypeSelectors were already sorted by specificity in the constructor.\n         * Iterate through each of them, applying selectors in the right order.\n         */\n        let selectorsByTypeIndex = 0;\n        let anyTypeSelectorsIndex = 0;\n\n        while (selectorsByTypeIndex < selectorsByNodeType.length || anyTypeSelectorsIndex < anyTypeSelectors.length) {\n            if (\n                selectorsByTypeIndex >= selectorsByNodeType.length ||\n                anyTypeSelectorsIndex < anyTypeSelectors.length &&\n                compareSpecificity(anyTypeSelectors[anyTypeSelectorsIndex], selectorsByNodeType[selectorsByTypeIndex]) < 0\n            ) {\n                this.applySelector(node, anyTypeSelectors[anyTypeSelectorsIndex++]);\n            } else {\n                this.applySelector(node, selectorsByNodeType[selectorsByTypeIndex++]);\n            }\n        }\n    }\n\n    /**\n     * Emits an event of entering AST node.\n     * @param {ASTNode} node A node which was entered.\n     * @returns {void}\n     */\n    enterNode(node) {\n        if (node.parent) {\n            this.currentAncestry.unshift(node.parent);\n        }\n        this.applySelectors(node, false);\n    }\n\n    /**\n     * Emits an event of leaving AST node.\n     * @param {ASTNode} node A node which was left.\n     * @returns {void}\n     */\n    leaveNode(node) {\n        this.applySelectors(node, true);\n        this.currentAncestry.shift();\n    }\n}\n\nmodule.exports = NodeEventGenerator;\n)/lib/rules/space-before-function-paren.js\u0017!/**\n * @fileoverview Rule to validate spacing before function paren.\n * @author Mathias Schreck <https://github.com/lo1tuma>\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"layout\",\n\n        docs: {\n            description: \"enforce consistent spacing before `function` definition opening parenthesis\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/space-before-function-paren\"\n        },\n\n        fixable: \"whitespace\",\n\n        schema: [\n            {\n                oneOf: [\n                    {\n                        enum: [\"always\", \"never\"]\n                    },\n                    {\n                        type: \"object\",\n                        properties: {\n                            anonymous: {\n                                enum: [\"always\", \"never\", \"ignore\"]\n                            },\n                            named: {\n                                enum: [\"always\", \"never\", \"ignore\"]\n                            },\n                            asyncArrow: {\n                                enum: [\"always\", \"never\", \"ignore\"]\n                            }\n                        },\n                        additionalProperties: false\n                    }\n                ]\n            }\n        ],\n\n        messages: {\n            unexpectedSpace: \"Unexpected space before function parentheses.\",\n            missingSpace: \"Missing space before function parentheses.\"\n        }\n    },\n\n    create(context) {\n        const sourceCode = context.getSourceCode();\n        const baseConfig = typeof context.options[0] === \"string\" ? context.options[0] : \"always\";\n        const overrideConfig = typeof context.options[0] === \"object\" ? context.options[0] : {};\n\n        /**\n         * Determines whether a function has a name.\n         * @param {ASTNode} node The function node.\n         * @returns {boolean} Whether the function has a name.\n         */\n        function isNamedFunction(node) {\n            if (node.id) {\n                return true;\n            }\n\n            const parent = node.parent;\n\n            return parent.type === \"MethodDefinition\" ||\n                (parent.type === \"Property\" &&\n                    (\n                        parent.kind === \"get\" ||\n                        parent.kind === \"set\" ||\n                        parent.method\n                    )\n                );\n        }\n\n        /**\n         * Gets the config for a given function\n         * @param {ASTNode} node The function node\n         * @returns {string} \"always\", \"never\", or \"ignore\"\n         */\n        function getConfigForFunction(node) {\n            if (node.type === \"ArrowFunctionExpression\") {\n\n                // Always ignore non-async functions and arrow functions without parens, e.g. async foo => bar\n                if (node.async && astUtils.isOpeningParenToken(sourceCode.getFirstToken(node, { skip: 1 }))) {\n                    return overrideConfig.asyncArrow || baseConfig;\n                }\n            } else if (isNamedFunction(node)) {\n                return overrideConfig.named || baseConfig;\n\n            // `generator-star-spacing` should warn anonymous generators. E.g. `function* () {}`\n            } else if (!node.generator) {\n                return overrideConfig.anonymous || baseConfig;\n            }\n\n            return \"ignore\";\n        }\n\n        /**\n         * Checks the parens of a function node\n         * @param {ASTNode} node A function node\n         * @returns {void}\n         */\n        function checkFunction(node) {\n            const functionConfig = getConfigForFunction(node);\n\n            if (functionConfig === \"ignore\") {\n                return;\n            }\n\n            const rightToken = sourceCode.getFirstToken(node, astUtils.isOpeningParenToken);\n            const leftToken = sourceCode.getTokenBefore(rightToken);\n            const hasSpacing = sourceCode.isSpaceBetweenTokens(leftToken, rightToken);\n\n            if (hasSpacing && functionConfig === \"never\") {\n                context.report({\n                    node,\n                    loc: {\n                        start: leftToken.loc.end,\n                        end: rightToken.loc.start\n                    },\n                    messageId: \"unexpectedSpace\",\n                    fix(fixer) {\n                        const comments = sourceCode.getCommentsBefore(rightToken);\n\n                        // Don't fix anything if there's a single line comment between the left and the right token\n                        if (comments.some(comment => comment.type === \"Line\")) {\n                            return null;\n                        }\n                        return fixer.replaceTextRange(\n                            [leftToken.range[1], rightToken.range[0]],\n                            comments.reduce((text, comment) => text + sourceCode.getText(comment), \"\")\n                        );\n                    }\n                });\n            } else if (!hasSpacing && functionConfig === \"always\") {\n                context.report({\n                    node,\n                    loc: rightToken.loc,\n                    messageId: \"missingSpace\",\n                    fix: fixer => fixer.insertTextAfter(leftToken, \" \")\n                });\n            }\n        }\n\n        return {\n            ArrowFunctionExpression: checkFunction,\n            FunctionDeclaration: checkFunction,\n            FunctionExpression: checkFunction\n        };\n    }\n};\n'/lib/shared/relative-module-resolver.js\u0006/*\n * STOP!!! DO NOT MODIFY.\n *\n * This file is part of the ongoing work to move the eslintrc-style config\n * system into the @eslint/eslintrc package. This file needs to remain\n * unchanged in order for this work to proceed.\n *\n * If you think you need to change this file, please contact @nzakas first.\n *\n * Thanks in advance for your cooperation.\n */\n\n/**\n * Utility for resolving a module relative to another module\n * @author Teddy Katz\n */\n\n\"use strict\";\n\nconst { createRequire } = require(\"module\");\n\nmodule.exports = {\n\n    /**\n     * Resolves a Node module relative to another module\n     * @param {string} moduleName The name of a Node module, or a path to a Node module.\n     * @param {string} relativeToPath An absolute path indicating the module that `moduleName` should be resolved relative to. This must be\n     * a file rather than a directory, but the file need not actually exist.\n     * @throws {Error} Any error from `module.createRequire` or its `resolve`.\n     * @returns {string} The absolute path that would result from calling `require.resolve(moduleName)` in a file located at `relativeToPath`\n     */\n    resolve(moduleName, relativeToPath) {\n        try {\n            return createRequire(relativeToPath).resolve(moduleName);\n        } catch (error) {\n\n            // This `if` block is for older Node.js than 12.0.0. We can remove this block in the future.\n            if (\n                typeof error === \"object\" &&\n                error !== null &&\n                error.code === \"MODULE_NOT_FOUND\" &&\n                !error.requireStack &&\n                error.message.includes(moduleName)\n            ) {\n                error.message += `\\nRequire stack:\\n- ${relativeToPath}`;\n            }\n            throw error;\n        }\n    }\n};\n/lib/rules/max-params.js\fe/**\n * @fileoverview Rule to flag when a function has too many parameters\n * @author Ilya Volodin\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\nconst { upperCaseFirst } = require(\"../shared/string-utils\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"enforce a maximum number of parameters in function definitions\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/max-params\"\n        },\n\n        schema: [\n            {\n                oneOf: [\n                    {\n                        type: \"integer\",\n                        minimum: 0\n                    },\n                    {\n                        type: \"object\",\n                        properties: {\n                            maximum: {\n                                type: \"integer\",\n                                minimum: 0\n                            },\n                            max: {\n                                type: \"integer\",\n                                minimum: 0\n                            }\n                        },\n                        additionalProperties: false\n                    }\n                ]\n            }\n        ],\n        messages: {\n            exceed: \"{{name}} has too many parameters ({{count}}). Maximum allowed is {{max}}.\"\n        }\n    },\n\n    create(context) {\n        const sourceCode = context.getSourceCode();\n        const option = context.options[0];\n        let numParams = 3;\n\n        if (\n            typeof option === \"object\" &&\n            (Object.prototype.hasOwnProperty.call(option, \"maximum\") || Object.prototype.hasOwnProperty.call(option, \"max\"))\n        ) {\n            numParams = option.maximum || option.max;\n        }\n        if (typeof option === \"number\") {\n            numParams = option;\n        }\n\n        /**\n         * Checks a function to see if it has too many parameters.\n         * @param {ASTNode} node The node to check.\n         * @returns {void}\n         * @private\n         */\n        function checkFunction(node) {\n            if (node.params.length > numParams) {\n                context.report({\n                    loc: astUtils.getFunctionHeadLoc(node, sourceCode),\n                    node,\n                    messageId: \"exceed\",\n                    data: {\n                        name: upperCaseFirst(astUtils.getFunctionNameWithKind(node)),\n                        count: node.params.length,\n                        max: numParams\n                    }\n                });\n            }\n        }\n\n        return {\n            FunctionDeclaration: checkFunction,\n            ArrowFunctionExpression: checkFunction,\n            FunctionExpression: checkFunction\n        };\n\n    }\n};\n!/lib/rules/no-compare-neg-zero.js\u0007/**\n * @fileoverview The rule should warn against code that tries to compare against -0.\n * @author Aladdin-ADD <hh_2013@foxmail.com>\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"problem\",\n\n        docs: {\n            description: \"disallow comparing against -0\",\n            recommended: true,\n            url: \"https://eslint.org/docs/rules/no-compare-neg-zero\"\n        },\n\n        fixable: null,\n        schema: [],\n\n        messages: {\n            unexpected: \"Do not use the '{{operator}}' operator to compare against -0.\"\n        }\n    },\n\n    create(context) {\n\n        //--------------------------------------------------------------------------\n        // Helpers\n        //--------------------------------------------------------------------------\n\n        /**\n         * Checks a given node is -0\n         * @param {ASTNode} node A node to check.\n         * @returns {boolean} `true` if the node is -0.\n         */\n        function isNegZero(node) {\n            return node.type === \"UnaryExpression\" && node.operator === \"-\" && node.argument.type === \"Literal\" && node.argument.value === 0;\n        }\n        const OPERATORS_TO_CHECK = new Set([\">\", \">=\", \"<\", \"<=\", \"==\", \"===\", \"!=\", \"!==\"]);\n\n        return {\n            BinaryExpression(node) {\n                if (OPERATORS_TO_CHECK.has(node.operator)) {\n                    if (isNegZero(node.left) || isNegZero(node.right)) {\n                        context.report({\n                            node,\n                            messageId: \"unexpected\",\n                            data: { operator: node.operator }\n                        });\n                    }\n                }\n            }\n        };\n    }\n};\n/lib/rules/no-octal.js\u0004\u0003/**\n * @fileoverview Rule to flag when initializing octal literal\n * @author Ilya Volodin\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow octal literals\",\n            recommended: true,\n            url: \"https://eslint.org/docs/rules/no-octal\"\n        },\n\n        schema: [],\n\n        messages: {\n            noOcatal: \"Octal literals should not be used.\"\n        }\n    },\n\n    create(context) {\n\n        return {\n\n            Literal(node) {\n                if (typeof node.value === \"number\" && /^0[0-9]/u.test(node.raw)) {\n                    context.report({\n                        node,\n                        messageId: \"noOcatal\"\n                    });\n                }\n            }\n        };\n\n    }\n};\n/lib/rules/no-new-wrappers.js\u0004/**\n * @fileoverview Rule to flag when using constructor for wrapper objects\n * @author Ilya Volodin\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow `new` operators with the `String`, `Number`, and `Boolean` objects\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-new-wrappers\"\n        },\n\n        schema: [],\n\n        messages: {\n            noConstructor: \"Do not use {{fn}} as a constructor.\"\n        }\n    },\n\n    create(context) {\n\n        return {\n\n            NewExpression(node) {\n                const wrapperObjects = [\"String\", \"Number\", \"Boolean\"];\n\n                if (wrapperObjects.indexOf(node.callee.name) > -1) {\n                    context.report({\n                        node,\n                        messageId: \"noConstructor\",\n                        data: { fn: node.callee.name }\n                    });\n                }\n            }\n        };\n\n    }\n};\n/lib/rules/no-lone-blocks.js\u0010m/**\n * @fileoverview Rule to flag blocks with no reason to exist\n * @author Brandon Mills\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow unnecessary nested blocks\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-lone-blocks\"\n        },\n\n        schema: [],\n\n        messages: {\n            redundantBlock: \"Block is redundant.\",\n            redundantNestedBlock: \"Nested block is redundant.\"\n        }\n    },\n\n    create(context) {\n\n        // A stack of lone blocks to be checked for block-level bindings\n        const loneBlocks = [];\n        let ruleDef;\n\n        /**\n         * Reports a node as invalid.\n         * @param {ASTNode} node The node to be reported.\n         * @returns {void}\n         */\n        function report(node) {\n            const messageId = node.parent.type === \"BlockStatement\" || node.parent.type === \"StaticBlock\"\n                ? \"redundantNestedBlock\"\n                : \"redundantBlock\";\n\n            context.report({\n                node,\n                messageId\n            });\n        }\n\n        /**\n         * Checks for any occurrence of a BlockStatement in a place where lists of statements can appear\n         * @param {ASTNode} node The node to check\n         * @returns {boolean} True if the node is a lone block.\n         */\n        function isLoneBlock(node) {\n            return node.parent.type === \"BlockStatement\" ||\n                node.parent.type === \"StaticBlock\" ||\n                node.parent.type === \"Program\" ||\n\n                // Don't report blocks in switch cases if the block is the only statement of the case.\n                node.parent.type === \"SwitchCase\" && !(node.parent.consequent[0] === node && node.parent.consequent.length === 1);\n        }\n\n        /**\n         * Checks the enclosing block of the current node for block-level bindings,\n         * and \"marks it\" as valid if any.\n         * @returns {void}\n         */\n        function markLoneBlock() {\n            if (loneBlocks.length === 0) {\n                return;\n            }\n\n            const block = context.getAncestors().pop();\n\n            if (loneBlocks[loneBlocks.length - 1] === block) {\n                loneBlocks.pop();\n            }\n        }\n\n        // Default rule definition: report all lone blocks\n        ruleDef = {\n            BlockStatement(node) {\n                if (isLoneBlock(node)) {\n                    report(node);\n                }\n            }\n        };\n\n        // ES6: report blocks without block-level bindings, or that's only child of another block\n        if (context.parserOptions.ecmaVersion >= 6) {\n            ruleDef = {\n                BlockStatement(node) {\n                    if (isLoneBlock(node)) {\n                        loneBlocks.push(node);\n                    }\n                },\n                \"BlockStatement:exit\"(node) {\n                    if (loneBlocks.length > 0 && loneBlocks[loneBlocks.length - 1] === node) {\n                        loneBlocks.pop();\n                        report(node);\n                    } else if (\n                        (\n                            node.parent.type === \"BlockStatement\" ||\n                            node.parent.type === \"StaticBlock\"\n                        ) &&\n                        node.parent.body.length === 1\n                    ) {\n                        report(node);\n                    }\n                }\n            };\n\n            ruleDef.VariableDeclaration = function(node) {\n                if (node.kind === \"let\" || node.kind === \"const\") {\n                    markLoneBlock();\n                }\n            };\n\n            ruleDef.FunctionDeclaration = function() {\n                if (context.getScope().isStrict) {\n                    markLoneBlock();\n                }\n            };\n\n            ruleDef.ClassDeclaration = markLoneBlock;\n        }\n\n        return ruleDef;\n    }\n};\n/lib/cli.js(/**\n * @fileoverview Main CLI object.\n * @author Nicholas C. Zakas\n */\n\n\"use strict\";\n\n/*\n * The CLI object should *not* call process.exit() directly. It should only return\n * exit codes. This allows other programs to use the CLI object and still control\n * when the program exits.\n */\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst fs = require(\"fs\"),\n    path = require(\"path\"),\n    { promisify } = require(\"util\"),\n    { ESLint } = require(\"./eslint\"),\n    CLIOptions = require(\"./options\"),\n    log = require(\"./shared/logging\"),\n    RuntimeInfo = require(\"./shared/runtime-info\");\n\nconst debug = require(\"debug\")(\"eslint:cli\");\n\n//------------------------------------------------------------------------------\n// Types\n//------------------------------------------------------------------------------\n\n/** @typedef {import(\"./eslint/eslint\").ESLintOptions} ESLintOptions */\n/** @typedef {import(\"./eslint/eslint\").LintMessage} LintMessage */\n/** @typedef {import(\"./eslint/eslint\").LintResult} LintResult */\n/** @typedef {import(\"./options\").ParsedCLIOptions} ParsedCLIOptions */\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\nconst mkdir = promisify(fs.mkdir);\nconst stat = promisify(fs.stat);\nconst writeFile = promisify(fs.writeFile);\n\n/**\n * Predicate function for whether or not to apply fixes in quiet mode.\n * If a message is a warning, do not apply a fix.\n * @param {LintMessage} message The lint result.\n * @returns {boolean} True if the lint message is an error (and thus should be\n * autofixed), false otherwise.\n */\nfunction quietFixPredicate(message) {\n    return message.severity === 2;\n}\n\n/**\n * Translates the CLI options into the options expected by the CLIEngine.\n * @param {ParsedCLIOptions} cliOptions The CLI options to translate.\n * @returns {ESLintOptions} The options object for the CLIEngine.\n * @private\n */\nfunction translateOptions({\n    cache,\n    cacheFile,\n    cacheLocation,\n    cacheStrategy,\n    config,\n    env,\n    errorOnUnmatchedPattern,\n    eslintrc,\n    ext,\n    fix,\n    fixDryRun,\n    fixType,\n    global,\n    ignore,\n    ignorePath,\n    ignorePattern,\n    inlineConfig,\n    parser,\n    parserOptions,\n    plugin,\n    quiet,\n    reportUnusedDisableDirectives,\n    resolvePluginsRelativeTo,\n    rule,\n    rulesdir\n}) {\n    return {\n        allowInlineConfig: inlineConfig,\n        cache,\n        cacheLocation: cacheLocation || cacheFile,\n        cacheStrategy,\n        errorOnUnmatchedPattern,\n        extensions: ext,\n        fix: (fix || fixDryRun) && (quiet ? quietFixPredicate : true),\n        fixTypes: fixType,\n        ignore,\n        ignorePath,\n        overrideConfig: {\n            env: env && env.reduce((obj, name) => {\n                obj[name] = true;\n                return obj;\n            }, {}),\n            globals: global && global.reduce((obj, name) => {\n                if (name.endsWith(\":true\")) {\n                    obj[name.slice(0, -5)] = \"writable\";\n                } else {\n                    obj[name] = \"readonly\";\n                }\n                return obj;\n            }, {}),\n            ignorePatterns: ignorePattern,\n            parser,\n            parserOptions,\n            plugins: plugin,\n            rules: rule\n        },\n        overrideConfigFile: config,\n        reportUnusedDisableDirectives: reportUnusedDisableDirectives ? \"error\" : void 0,\n        resolvePluginsRelativeTo,\n        rulePaths: rulesdir,\n        useEslintrc: eslintrc\n    };\n}\n\n/**\n * Count error messages.\n * @param {LintResult[]} results The lint results.\n * @returns {{errorCount:number;warningCount:number}} The number of error messages.\n */\nfunction countErrors(results) {\n    let errorCount = 0;\n    let fatalErrorCount = 0;\n    let warningCount = 0;\n\n    for (const result of results) {\n        errorCount += result.errorCount;\n        fatalErrorCount += result.fatalErrorCount;\n        warningCount += result.warningCount;\n    }\n\n    return { errorCount, fatalErrorCount, warningCount };\n}\n\n/**\n * Check if a given file path is a directory or not.\n * @param {string} filePath The path to a file to check.\n * @returns {Promise<boolean>} `true` if the given path is a directory.\n */\nasync function isDirectory(filePath) {\n    try {\n        return (await stat(filePath)).isDirectory();\n    } catch (error) {\n        if (error.code === \"ENOENT\" || error.code === \"ENOTDIR\") {\n            return false;\n        }\n        throw error;\n    }\n}\n\n/**\n * Outputs the results of the linting.\n * @param {ESLint} engine The ESLint instance to use.\n * @param {LintResult[]} results The results to print.\n * @param {string} format The name of the formatter to use or the path to the formatter.\n * @param {string} outputFile The path for the output file.\n * @returns {Promise<boolean>} True if the printing succeeds, false if not.\n * @private\n */\nasync function printResults(engine, results, format, outputFile) {\n    let formatter;\n\n    try {\n        formatter = await engine.loadFormatter(format);\n    } catch (e) {\n        log.error(e.message);\n        return false;\n    }\n\n    const output = await formatter.format(results);\n\n    if (output) {\n        if (outputFile) {\n            const filePath = path.resolve(process.cwd(), outputFile);\n\n            if (await isDirectory(filePath)) {\n                log.error(\"Cannot write to output file path, it is a directory: %s\", outputFile);\n                return false;\n            }\n\n            try {\n                await mkdir(path.dirname(filePath), { recursive: true });\n                await writeFile(filePath, output);\n            } catch (ex) {\n                log.error(\"There was a problem writing the output file:\\n%s\", ex);\n                return false;\n            }\n        } else {\n            log.info(output);\n        }\n    }\n\n    return true;\n}\n\n//------------------------------------------------------------------------------\n// Public Interface\n//------------------------------------------------------------------------------\n\n/**\n * Encapsulates all CLI behavior for eslint. Makes it easier to test as well as\n * for other Node.js programs to effectively run the CLI.\n */\nconst cli = {\n\n    /**\n     * Executes the CLI based on an array of arguments that is passed in.\n     * @param {string|Array|Object} args The arguments to process.\n     * @param {string} [text] The text to lint (used for TTY).\n     * @returns {Promise<number>} The exit code for the operation.\n     */\n    async execute(args, text) {\n        if (Array.isArray(args)) {\n            debug(\"CLI args: %o\", args.slice(2));\n        }\n\n        /** @type {ParsedCLIOptions} */\n        let options;\n\n        try {\n            options = CLIOptions.parse(args);\n        } catch (error) {\n            log.error(error.message);\n            return 2;\n        }\n\n        const files = options._;\n        const useStdin = typeof text === \"string\";\n\n        if (options.help) {\n            log.info(CLIOptions.generateHelp());\n            return 0;\n        }\n        if (options.version) {\n            log.info(RuntimeInfo.version());\n            return 0;\n        }\n        if (options.envInfo) {\n            try {\n                log.info(RuntimeInfo.environment());\n                return 0;\n            } catch (err) {\n                log.error(err.message);\n                return 2;\n            }\n        }\n\n        if (options.printConfig) {\n            if (files.length) {\n                log.error(\"The --print-config option must be used with exactly one file name.\");\n                return 2;\n            }\n            if (useStdin) {\n                log.error(\"The --print-config option is not available for piped-in code.\");\n                return 2;\n            }\n\n            const engine = new ESLint(translateOptions(options));\n            const fileConfig =\n                await engine.calculateConfigForFile(options.printConfig);\n\n            log.info(JSON.stringify(fileConfig, null, \"  \"));\n            return 0;\n        }\n\n        debug(`Running on ${useStdin ? \"text\" : \"files\"}`);\n\n        if (options.fix && options.fixDryRun) {\n            log.error(\"The --fix option and the --fix-dry-run option cannot be used together.\");\n            return 2;\n        }\n        if (useStdin && options.fix) {\n            log.error(\"The --fix option is not available for piped-in code; use --fix-dry-run instead.\");\n            return 2;\n        }\n        if (options.fixType && !options.fix && !options.fixDryRun) {\n            log.error(\"The --fix-type option requires either --fix or --fix-dry-run.\");\n            return 2;\n        }\n\n        const engine = new ESLint(translateOptions(options));\n        let results;\n\n        if (useStdin) {\n            results = await engine.lintText(text, {\n                filePath: options.stdinFilename,\n                warnIgnored: true\n            });\n        } else {\n            results = await engine.lintFiles(files);\n        }\n\n        if (options.fix) {\n            debug(\"Fix mode enabled - applying fixes\");\n            await ESLint.outputFixes(results);\n        }\n\n        let resultsToPrint = results;\n\n        if (options.quiet) {\n            debug(\"Quiet mode enabled - filtering out warnings\");\n            resultsToPrint = ESLint.getErrorResults(resultsToPrint);\n        }\n\n        if (await printResults(engine, resultsToPrint, options.format, options.outputFile)) {\n\n            // Errors and warnings from the original unfiltered results should determine the exit code\n            const { errorCount, fatalErrorCount, warningCount } = countErrors(results);\n\n            const tooManyWarnings =\n                options.maxWarnings >= 0 && warningCount > options.maxWarnings;\n            const shouldExitForFatalErrors =\n                options.exitOnFatalError && fatalErrorCount > 0;\n\n            if (!errorCount && tooManyWarnings) {\n                log.error(\n                    \"ESLint found too many warnings (maximum: %s).\",\n                    options.maxWarnings\n                );\n            }\n\n            if (shouldExitForFatalErrors) {\n                return 2;\n            }\n\n            return (errorCount || tooManyWarnings) ? 1 : 0;\n        }\n\n        return 2;\n    }\n};\n\nmodule.exports = cli;\n*/lib/rules/prefer-promise-reject-errors.js\u0015E/**\n * @fileoverview restrict values that can be used as Promise rejection reasons\n * @author Teddy Katz\n */\n\"use strict\";\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"require using Error objects as Promise rejection reasons\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/prefer-promise-reject-errors\"\n        },\n\n        fixable: null,\n\n        schema: [\n            {\n                type: \"object\",\n                properties: {\n                    allowEmptyReject: { type: \"boolean\", default: false }\n                },\n                additionalProperties: false\n            }\n        ],\n\n        messages: {\n            rejectAnError: \"Expected the Promise rejection reason to be an Error.\"\n        }\n    },\n\n    create(context) {\n\n        const ALLOW_EMPTY_REJECT = context.options.length && context.options[0].allowEmptyReject;\n\n        //----------------------------------------------------------------------\n        // Helpers\n        //----------------------------------------------------------------------\n\n        /**\n         * Checks the argument of a reject() or Promise.reject() CallExpression, and reports it if it can't be an Error\n         * @param {ASTNode} callExpression A CallExpression node which is used to reject a Promise\n         * @returns {void}\n         */\n        function checkRejectCall(callExpression) {\n            if (!callExpression.arguments.length && ALLOW_EMPTY_REJECT) {\n                return;\n            }\n            if (\n                !callExpression.arguments.length ||\n                !astUtils.couldBeError(callExpression.arguments[0]) ||\n                callExpression.arguments[0].type === \"Identifier\" && callExpression.arguments[0].name === \"undefined\"\n            ) {\n                context.report({\n                    node: callExpression,\n                    messageId: \"rejectAnError\"\n                });\n            }\n        }\n\n        /**\n         * Determines whether a function call is a Promise.reject() call\n         * @param {ASTNode} node A CallExpression node\n         * @returns {boolean} `true` if the call is a Promise.reject() call\n         */\n        function isPromiseRejectCall(node) {\n            return astUtils.isSpecificMemberAccess(node.callee, \"Promise\", \"reject\");\n        }\n\n        //----------------------------------------------------------------------\n        // Public\n        //----------------------------------------------------------------------\n\n        return {\n\n            // Check `Promise.reject(value)` calls.\n            CallExpression(node) {\n                if (isPromiseRejectCall(node)) {\n                    checkRejectCall(node);\n                }\n            },\n\n            /*\n             * Check for `new Promise((resolve, reject) => {})`, and check for reject() calls.\n             * This function is run on \"NewExpression:exit\" instead of \"NewExpression\" to ensure that\n             * the nodes in the expression already have the `parent` property.\n             */\n            \"NewExpression:exit\"(node) {\n                if (\n                    node.callee.type === \"Identifier\" && node.callee.name === \"Promise\" &&\n                    node.arguments.length && astUtils.isFunction(node.arguments[0]) &&\n                    node.arguments[0].params.length > 1 && node.arguments[0].params[1].type === \"Identifier\"\n                ) {\n                    context.getDeclaredVariables(node.arguments[0])\n\n                        /*\n                         * Find the first variable that matches the second parameter's name.\n                         * If the first parameter has the same name as the second parameter, then the variable will actually\n                         * be \"declared\" when the first parameter is evaluated, but then it will be immediately overwritten\n                         * by the second parameter. It's not possible for an expression with the variable to be evaluated before\n                         * the variable is overwritten, because functions with duplicate parameters cannot have destructuring or\n                         * default assignments in their parameter lists. Therefore, it's not necessary to explicitly account for\n                         * this case.\n                         */\n                        .find(variable => variable.name === node.arguments[0].params[1].name)\n\n                        // Get the references to that variable.\n                        .references\n\n                        // Only check the references that read the parameter's value.\n                        .filter(ref => ref.isRead())\n\n                        // Only check the references that are used as the callee in a function call, e.g. `reject(foo)`.\n                        .filter(ref => ref.identifier.parent.type === \"CallExpression\" && ref.identifier === ref.identifier.parent.callee)\n\n                        // Check the argument of the function call to determine whether it's an Error.\n                        .forEach(ref => checkRejectCall(ref.identifier.parent));\n                }\n            }\n        };\n    }\n};\n$/lib/rules/no-useless-constructor.js\u0016/**\n * @fileoverview Rule to flag the use of redundant constructors in classes.\n * @author Alberto Rodríguez\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\n/**\n * Checks whether a given array of statements is a single call of `super`.\n * @param {ASTNode[]} body An array of statements to check.\n * @returns {boolean} `true` if the body is a single call of `super`.\n */\nfunction isSingleSuperCall(body) {\n    return (\n        body.length === 1 &&\n        body[0].type === \"ExpressionStatement\" &&\n        body[0].expression.type === \"CallExpression\" &&\n        body[0].expression.callee.type === \"Super\"\n    );\n}\n\n/**\n * Checks whether a given node is a pattern which doesn't have any side effects.\n * Default parameters and Destructuring parameters can have side effects.\n * @param {ASTNode} node A pattern node.\n * @returns {boolean} `true` if the node doesn't have any side effects.\n */\nfunction isSimple(node) {\n    return node.type === \"Identifier\" || node.type === \"RestElement\";\n}\n\n/**\n * Checks whether a given array of expressions is `...arguments` or not.\n * `super(...arguments)` passes all arguments through.\n * @param {ASTNode[]} superArgs An array of expressions to check.\n * @returns {boolean} `true` if the superArgs is `...arguments`.\n */\nfunction isSpreadArguments(superArgs) {\n    return (\n        superArgs.length === 1 &&\n        superArgs[0].type === \"SpreadElement\" &&\n        superArgs[0].argument.type === \"Identifier\" &&\n        superArgs[0].argument.name === \"arguments\"\n    );\n}\n\n/**\n * Checks whether given 2 nodes are identifiers which have the same name or not.\n * @param {ASTNode} ctorParam A node to check.\n * @param {ASTNode} superArg A node to check.\n * @returns {boolean} `true` if the nodes are identifiers which have the same\n *      name.\n */\nfunction isValidIdentifierPair(ctorParam, superArg) {\n    return (\n        ctorParam.type === \"Identifier\" &&\n        superArg.type === \"Identifier\" &&\n        ctorParam.name === superArg.name\n    );\n}\n\n/**\n * Checks whether given 2 nodes are a rest/spread pair which has the same values.\n * @param {ASTNode} ctorParam A node to check.\n * @param {ASTNode} superArg A node to check.\n * @returns {boolean} `true` if the nodes are a rest/spread pair which has the\n *      same values.\n */\nfunction isValidRestSpreadPair(ctorParam, superArg) {\n    return (\n        ctorParam.type === \"RestElement\" &&\n        superArg.type === \"SpreadElement\" &&\n        isValidIdentifierPair(ctorParam.argument, superArg.argument)\n    );\n}\n\n/**\n * Checks whether given 2 nodes have the same value or not.\n * @param {ASTNode} ctorParam A node to check.\n * @param {ASTNode} superArg A node to check.\n * @returns {boolean} `true` if the nodes have the same value or not.\n */\nfunction isValidPair(ctorParam, superArg) {\n    return (\n        isValidIdentifierPair(ctorParam, superArg) ||\n        isValidRestSpreadPair(ctorParam, superArg)\n    );\n}\n\n/**\n * Checks whether the parameters of a constructor and the arguments of `super()`\n * have the same values or not.\n * @param {ASTNode} ctorParams The parameters of a constructor to check.\n * @param {ASTNode} superArgs The arguments of `super()` to check.\n * @returns {boolean} `true` if those have the same values.\n */\nfunction isPassingThrough(ctorParams, superArgs) {\n    if (ctorParams.length !== superArgs.length) {\n        return false;\n    }\n\n    for (let i = 0; i < ctorParams.length; ++i) {\n        if (!isValidPair(ctorParams[i], superArgs[i])) {\n            return false;\n        }\n    }\n\n    return true;\n}\n\n/**\n * Checks whether the constructor body is a redundant super call.\n * @param {Array} body constructor body content.\n * @param {Array} ctorParams The params to check against super call.\n * @returns {boolean} true if the constructor body is redundant\n */\nfunction isRedundantSuperCall(body, ctorParams) {\n    return (\n        isSingleSuperCall(body) &&\n        ctorParams.every(isSimple) &&\n        (\n            isSpreadArguments(body[0].expression.arguments) ||\n            isPassingThrough(ctorParams, body[0].expression.arguments)\n        )\n    );\n}\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow unnecessary constructors\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-useless-constructor\"\n        },\n\n        schema: [],\n\n        messages: {\n            noUselessConstructor: \"Useless constructor.\"\n        }\n    },\n\n    create(context) {\n\n        /**\n         * Checks whether a node is a redundant constructor\n         * @param {ASTNode} node node to check\n         * @returns {void}\n         */\n        function checkForConstructor(node) {\n            if (node.kind !== \"constructor\") {\n                return;\n            }\n\n            /*\n             * Prevent crashing on parsers which do not require class constructor\n             * to have a body, e.g. typescript and flow\n             */\n            if (!node.value.body) {\n                return;\n            }\n\n            const body = node.value.body.body;\n            const ctorParams = node.value.params;\n            const superClass = node.parent.parent.superClass;\n\n            if (superClass ? isRedundantSuperCall(body, ctorParams) : (body.length === 0)) {\n                context.report({\n                    node,\n                    messageId: \"noUselessConstructor\"\n                });\n            }\n        }\n\n        return {\n            MethodDefinition: checkForConstructor\n        };\n    }\n};\n/README.mdG[![npm version](https://img.shields.io/npm/v/eslint.svg)](https://www.npmjs.com/package/eslint)\n[![Downloads](https://img.shields.io/npm/dm/eslint.svg)](https://www.npmjs.com/package/eslint)\n[![Build Status](https://github.com/eslint/eslint/workflows/CI/badge.svg)](https://github.com/eslint/eslint/actions)\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bhttps%3A%2F%2Fgithub.com%2Feslint%2Feslint.svg?type=shield)](https://app.fossa.io/projects/git%2Bhttps%3A%2F%2Fgithub.com%2Feslint%2Feslint?ref=badge_shield)\n<br />\n[![Open Collective Backers](https://img.shields.io/opencollective/backers/eslint)](https://opencollective.com/eslint)\n[![Open Collective Sponsors](https://img.shields.io/opencollective/sponsors/eslint)](https://opencollective.com/eslint)\n[![Follow us on Twitter](https://img.shields.io/twitter/follow/geteslint?label=Follow&style=social)](https://twitter.com/intent/user?screen_name=geteslint)\n\n# ESLint\n\n[Website](https://eslint.org) |\n[Configuring](https://eslint.org/docs/user-guide/configuring) |\n[Rules](https://eslint.org/docs/rules/) |\n[Contributing](https://eslint.org/docs/developer-guide/contributing) |\n[Reporting Bugs](https://eslint.org/docs/developer-guide/contributing/reporting-bugs) |\n[Code of Conduct](https://eslint.org/conduct) |\n[Twitter](https://twitter.com/geteslint) |\n[Mailing List](https://groups.google.com/group/eslint) |\n[Chat Room](https://eslint.org/chat)\n\nESLint is a tool for identifying and reporting on patterns found in ECMAScript/JavaScript code. In many ways, it is similar to JSLint and JSHint with a few exceptions:\n\n* ESLint uses [Espree](https://github.com/eslint/espree) for JavaScript parsing.\n* ESLint uses an AST to evaluate patterns in code.\n* ESLint is completely pluggable, every single rule is a plugin and you can add more at runtime.\n\n## Table of Contents\n\n1. [Installation and Usage](#installation-and-usage)\n2. [Configuration](#configuration)\n3. [Code of Conduct](#code-of-conduct)\n4. [Filing Issues](#filing-issues)\n5. [Frequently Asked Questions](#faq)\n6. [Releases](#releases)\n7. [Security Policy](#security-policy)\n8. [Semantic Versioning Policy](#semantic-versioning-policy)\n9. [Stylistic Rule Updates](#stylistic-rule-updates)\n10. [License](#license)\n11. [Team](#team)\n12. [Sponsors](#sponsors)\n13. [Technology Sponsors](#technology-sponsors)\n\n## <a name=\"installation-and-usage\"></a>Installation and Usage\n\nPrerequisites: [Node.js](https://nodejs.org/) (`^12.22.0`, `^14.17.0`, or `>=16.0.0`) built with SSL support. (If you are using an official Node.js distribution, SSL is always built in.)\n\nYou can install ESLint using npm:\n\n```sh\nnpm install eslint --save-dev\n```\n\nYou should then set up a configuration file:\n\n```sh\nnpm init @eslint/config\n```\n\nAfter that, you can run ESLint on any file or directory like this:\n\n```sh\n./node_modules/.bin/eslint yourfile.js\n```\n\n## <a name=\"configuration\"></a>Configuration\n\nAfter running `npm init @eslint/config`, you'll have a `.eslintrc` file in your directory. In it, you'll see some rules configured like this:\n\n```json\n{\n    \"rules\": {\n        \"semi\": [\"error\", \"always\"],\n        \"quotes\": [\"error\", \"double\"]\n    }\n}\n```\n\nThe names `\"semi\"` and `\"quotes\"` are the names of [rules](https://eslint.org/docs/rules) in ESLint. The first value is the error level of the rule and can be one of these values:\n\n* `\"off\"` or `0` - turn the rule off\n* `\"warn\"` or `1` - turn the rule on as a warning (doesn't affect exit code)\n* `\"error\"` or `2` - turn the rule on as an error (exit code will be 1)\n\nThe three error levels allow you fine-grained control over how ESLint applies rules (for more configuration options and details, see the [configuration docs](https://eslint.org/docs/user-guide/configuring)).\n\n## <a name=\"code-of-conduct\"></a>Code of Conduct\n\nESLint adheres to the [JS Foundation Code of Conduct](https://eslint.org/conduct).\n\n## <a name=\"filing-issues\"></a>Filing Issues\n\nBefore filing an issue, please be sure to read the guidelines for what you're reporting:\n\n* [Bug Report](https://eslint.org/docs/developer-guide/contributing/reporting-bugs)\n* [Propose a New Rule](https://eslint.org/docs/developer-guide/contributing/new-rules)\n* [Proposing a Rule Change](https://eslint.org/docs/developer-guide/contributing/rule-changes)\n* [Request a Change](https://eslint.org/docs/developer-guide/contributing/changes)\n\n## <a name=\"faq\"></a>Frequently Asked Questions\n\n### I'm using JSCS, should I migrate to ESLint?\n\nYes. [JSCS has reached end of life](https://eslint.org/blog/2016/07/jscs-end-of-life) and is no longer supported.\n\nWe have prepared a [migration guide](https://eslint.org/docs/user-guide/migrating-from-jscs) to help you convert your JSCS settings to an ESLint configuration.\n\nWe are now at or near 100% compatibility with JSCS. If you try ESLint and believe we are not yet compatible with a JSCS rule/configuration, please create an issue (mentioning that it is a JSCS compatibility issue) and we will evaluate it as per our normal process.\n\n### Does Prettier replace ESLint?\n\nNo, ESLint does both traditional linting (looking for problematic patterns) and style checking (enforcement of conventions). You can use ESLint for everything, or you can combine both using Prettier to format your code and ESLint to catch possible errors.\n\n### Why can't ESLint find my plugins?\n\n* Make sure your plugins (and ESLint) are both in your project's `package.json` as devDependencies (or dependencies, if your project uses ESLint at runtime).\n* Make sure you have run `npm install` and all your dependencies are installed.\n* Make sure your plugins' peerDependencies have been installed as well. You can use `npm view eslint-plugin-myplugin peerDependencies` to see what peer dependencies `eslint-plugin-myplugin` has.\n\n### Does ESLint support JSX?\n\nYes, ESLint natively supports parsing JSX syntax (this must be enabled in [configuration](https://eslint.org/docs/user-guide/configuring)). Please note that supporting JSX syntax *is not* the same as supporting React. React applies specific semantics to JSX syntax that ESLint doesn't recognize. We recommend using [eslint-plugin-react](https://www.npmjs.com/package/eslint-plugin-react) if you are using React and want React semantics.\n\n### What ECMAScript versions does ESLint support?\n\nESLint has full support for ECMAScript 3, 5 (default), 2015, 2016, 2017, 2018, 2019, 2020, 2021 and 2022. You can set your desired ECMAScript syntax (and other settings, like global variables or your target environments) through [configuration](https://eslint.org/docs/user-guide/configuring).\n\n### What about experimental features?\n\nESLint's parser only officially supports the latest final ECMAScript standard. We will make changes to core rules in order to avoid crashes on stage 3 ECMAScript syntax proposals (as long as they are implemented using the correct experimental ESTree syntax). We may make changes to core rules to better work with language extensions (such as JSX, Flow, and TypeScript) on a case-by-case basis.\n\nIn other cases (including if rules need to warn on more or fewer cases due to new syntax, rather than just not crashing), we recommend you use other parsers and/or rule plugins. If you are using Babel, you can use the [babel-eslint](https://github.com/babel/babel-eslint) parser and [eslint-plugin-babel](https://github.com/babel/eslint-plugin-babel) to use any option available in Babel.\n\nOnce a language feature has been adopted into the ECMAScript standard (stage 4 according to the [TC39 process](https://tc39.github.io/process-document/)), we will accept issues and pull requests related to the new feature, subject to our [contributing guidelines](https://eslint.org/docs/developer-guide/contributing). Until then, please use the appropriate parser and plugin(s) for your experimental feature.\n\n### Where to ask for help?\n\nJoin our [Mailing List](https://groups.google.com/group/eslint) or [Chatroom](https://eslint.org/chat).\n\n### Why doesn't ESLint lock dependency versions?\n\nLock files like `package-lock.json` are helpful for deployed applications. They ensure that dependencies are consistent between environments and across deployments.\n\nPackages like `eslint` that get published to the npm registry do not include lock files. `npm install eslint` as a user will respect version constraints in ESLint's `package.json`. ESLint and its dependencies will be included in the user's lock file if one exists, but ESLint's own lock file would not be used.\n\nWe intentionally don't lock dependency versions so that we have the latest compatible dependency versions in development and CI that our users get when installing ESLint in a project.\n\nThe Twilio blog has a [deeper dive](https://www.twilio.com/blog/lockfiles-nodejs) to learn more.\n\n## <a name=\"releases\"></a>Releases\n\nWe have scheduled releases every two weeks on Friday or Saturday. You can follow a [release issue](https://github.com/eslint/eslint/issues?q=is%3Aopen+is%3Aissue+label%3Arelease) for updates about the scheduling of any particular release.\n\n## <a name=\"security-policy\"></a>Security Policy\n\nESLint takes security seriously. We work hard to ensure that ESLint is safe for everyone and that security issues are addressed quickly and responsibly. Read the full [security policy](https://github.com/eslint/.github/blob/master/SECURITY.md).\n\n## <a name=\"semantic-versioning-policy\"></a>Semantic Versioning Policy\n\nESLint follows [semantic versioning](https://semver.org). However, due to the nature of ESLint as a code quality tool, it's not always clear when a minor or major version bump occurs. To help clarify this for everyone, we've defined the following semantic versioning policy for ESLint:\n\n* Patch release (intended to not break your lint build)\n    * A bug fix in a rule that results in ESLint reporting fewer linting errors.\n    * A bug fix to the CLI or core (including formatters).\n    * Improvements to documentation.\n    * Non-user-facing changes such as refactoring code, adding, deleting, or modifying tests, and increasing test coverage.\n    * Re-releasing after a failed release (i.e., publishing a release that doesn't work for anyone).\n* Minor release (might break your lint build)\n    * A bug fix in a rule that results in ESLint reporting more linting errors.\n    * A new rule is created.\n    * A new option to an existing rule that does not result in ESLint reporting more linting errors by default.\n    * A new addition to an existing rule to support a newly-added language feature (within the last 12 months) that will result in ESLint reporting more linting errors by default.\n    * An existing rule is deprecated.\n    * A new CLI capability is created.\n    * New capabilities to the public API are added (new classes, new methods, new arguments to existing methods, etc.).\n    * A new formatter is created.\n    * `eslint:recommended` is updated and will result in strictly fewer linting errors (e.g., rule removals).\n* Major release (likely to break your lint build)\n    * `eslint:recommended` is updated and may result in new linting errors (e.g., rule additions, most rule option updates).\n    * A new option to an existing rule that results in ESLint reporting more linting errors by default.\n    * An existing formatter is removed.\n    * Part of the public API is removed or changed in an incompatible way. The public API includes:\n        * Rule schemas\n        * Configuration schema\n        * Command-line options\n        * Node.js API\n        * Rule, formatter, parser, plugin APIs\n\nAccording to our policy, any minor update may report more linting errors than the previous release (ex: from a bug fix). As such, we recommend using the tilde (`~`) in `package.json` e.g. `\"eslint\": \"~3.1.0\"` to guarantee the results of your builds.\n\n## <a name=\"stylistic-rule-updates\"></a>Stylistic Rule Updates\n\nStylistic rules are frozen according to [our policy](https://eslint.org/blog/2020/05/changes-to-rules-policies) on how we evaluate new rules and rule changes.\nThis means:\n\n* **Bug fixes**: We will still fix bugs in stylistic rules.\n* **New ECMAScript features**: We will also make sure stylistic rules are compatible with new ECMAScript features.\n* **New options**: We will **not** add any new options to stylistic rules unless an option is the only way to fix a bug or support a newly-added ECMAScript feature.\n\n## <a name=\"license\"></a>License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bhttps%3A%2F%2Fgithub.com%2Feslint%2Feslint.svg?type=large)](https://app.fossa.io/projects/git%2Bhttps%3A%2F%2Fgithub.com%2Feslint%2Feslint?ref=badge_large)\n\n## <a name=\"team\"></a>Team\n\nThese folks keep the project moving and are resources for help.\n\n<!-- NOTE: This section is autogenerated. Do not manually edit.-->\n\n<!--teamstart-->\n\n### Technical Steering Committee (TSC)\n\nThe people who manage releases, review feature requests, and meet regularly to ensure ESLint is properly maintained.\n\n<table><tbody><tr><td align=\"center\" valign=\"top\" width=\"11%\">\n<a href=\"https://github.com/nzakas\">\n<img src=\"https://github.com/nzakas.png?s=75\" width=\"75\" height=\"75\"><br />\nNicholas C. Zakas\n</a>\n</td><td align=\"center\" valign=\"top\" width=\"11%\">\n<a href=\"https://github.com/btmills\">\n<img src=\"https://github.com/btmills.png?s=75\" width=\"75\" height=\"75\"><br />\nBrandon Mills\n</a>\n</td><td align=\"center\" valign=\"top\" width=\"11%\">\n<a href=\"https://github.com/mdjermanovic\">\n<img src=\"https://github.com/mdjermanovic.png?s=75\" width=\"75\" height=\"75\"><br />\nMilos Djermanovic\n</a>\n</td></tr></tbody></table>\n\n### Reviewers\n\nThe people who review and implement new features.\n\n<table><tbody><tr><td align=\"center\" valign=\"top\" width=\"11%\">\n<a href=\"https://github.com/mysticatea\">\n<img src=\"https://github.com/mysticatea.png?s=75\" width=\"75\" height=\"75\"><br />\nToru Nagashima\n</a>\n</td><td align=\"center\" valign=\"top\" width=\"11%\">\n<a href=\"https://github.com/aladdin-add\">\n<img src=\"https://github.com/aladdin-add.png?s=75\" width=\"75\" height=\"75\"><br />\n唯然\n</a>\n</td></tr></tbody></table>\n\n### Committers\n\nThe people who review and fix bugs and help triage issues.\n\n<table><tbody><tr><td align=\"center\" valign=\"top\" width=\"11%\">\n<a href=\"https://github.com/brettz9\">\n<img src=\"https://github.com/brettz9.png?s=75\" width=\"75\" height=\"75\"><br />\nBrett Zamir\n</a>\n</td><td align=\"center\" valign=\"top\" width=\"11%\">\n<a href=\"https://github.com/bmish\">\n<img src=\"https://github.com/bmish.png?s=75\" width=\"75\" height=\"75\"><br />\nBryan Mishkin\n</a>\n</td><td align=\"center\" valign=\"top\" width=\"11%\">\n<a href=\"https://github.com/g-plane\">\n<img src=\"https://github.com/g-plane.png?s=75\" width=\"75\" height=\"75\"><br />\nPig Fang\n</a>\n</td><td align=\"center\" valign=\"top\" width=\"11%\">\n<a href=\"https://github.com/anikethsaha\">\n<img src=\"https://github.com/anikethsaha.png?s=75\" width=\"75\" height=\"75\"><br />\nAnix\n</a>\n</td><td align=\"center\" valign=\"top\" width=\"11%\">\n<a href=\"https://github.com/yeonjuan\">\n<img src=\"https://github.com/yeonjuan.png?s=75\" width=\"75\" height=\"75\"><br />\nYeonJuan\n</a>\n</td><td align=\"center\" valign=\"top\" width=\"11%\">\n<a href=\"https://github.com/snitin315\">\n<img src=\"https://github.com/snitin315.png?s=75\" width=\"75\" height=\"75\"><br />\nNitin Kumar\n</a>\n</td></tr></tbody></table>\n\n<!--teamend-->\n\n## <a name=\"sponsors\"></a>Sponsors\n\nThe following companies, organizations, and individuals support ESLint's ongoing maintenance and development. [Become a Sponsor](https://opencollective.com/eslint) to get your logo on our README and website.\n\n<!-- NOTE: This section is autogenerated. Do not manually edit.-->\n<!--sponsorsstart-->\n<h3>Platinum Sponsors</h3>\n<p><a href=\"https://automattic.com\"><img src=\"https://images.opencollective.com/automattic/d0ef3e1/logo.png\" alt=\"Automattic\" height=\"undefined\"></a></p><h3>Gold Sponsors</h3>\n<p><a href=\"https://contra.com\"><img src=\"https://images.opencollective.com/contra1/c70f93f/logo.png\" alt=\"Contra\" height=\"96\"></a> <a href=\"https://nx.dev\"><img src=\"https://images.opencollective.com/nx/0efbe42/logo.png\" alt=\"Nx (by Nrwl)\" height=\"96\"></a> <a href=\"https://google.com/chrome\"><img src=\"https://images.opencollective.com/chrome/dc55bd4/logo.png\" alt=\"Chrome's Web Framework & Tools Performance Fund\" height=\"96\"></a> <a href=\"https://www.salesforce.com\"><img src=\"https://images.opencollective.com/salesforce/ca8f997/logo.png\" alt=\"Salesforce\" height=\"96\"></a> <a href=\"https://www.airbnb.com/\"><img src=\"https://images.opencollective.com/airbnb/d327d66/logo.png\" alt=\"Airbnb\" height=\"96\"></a> <a href=\"https://americanexpress.io\"><img src=\"https://avatars.githubusercontent.com/u/3853301?v=4\" alt=\"American Express\" height=\"96\"></a> <a href=\"https://substack.com/\"><img src=\"https://avatars.githubusercontent.com/u/53023767?v=4\" alt=\"Substack\" height=\"96\"></a></p><h3>Silver Sponsors</h3>\n<p><a href=\"https://liftoff.io/\"><img src=\"https://images.opencollective.com/liftoff/5c4fa84/logo.png\" alt=\"Liftoff\" height=\"64\"></a></p><h3>Bronze Sponsors</h3>\n<p><a href=\"https://launchdarkly.com\"><img src=\"https://images.opencollective.com/launchdarkly/574bb9e/logo.png\" alt=\"launchdarkly\" height=\"32\"></a> <a href=\"https://www.crosswordsolver.org/anagram-solver/\"><img src=\"https://images.opencollective.com/anagram-solver/2666271/logo.png\" alt=\"Anagram Solver\" height=\"32\"></a> <a href=\"https://www.vpsserver.com\"><img src=\"https://images.opencollective.com/vpsservercom/logo.png\" alt=\"VPS Server\" height=\"32\"></a> <a href=\"https://icons8.com\"><img src=\"https://images.opencollective.com/icons8/7fa1641/logo.png\" alt=\"Icons8: free icons, photos, illustrations, and music\" height=\"32\"></a> <a href=\"https://discord.com\"><img src=\"https://images.opencollective.com/discordapp/f9645d9/logo.png\" alt=\"Discord\" height=\"32\"></a> <a href=\"https://themeisle.com\"><img src=\"https://images.opencollective.com/themeisle/d5592fe/logo.png\" alt=\"ThemeIsle\" height=\"32\"></a> <a href=\"https://www.practiceignition.com\"><img src=\"https://avatars.githubusercontent.com/u/5753491?v=4\" alt=\"Practice Ignition\" height=\"32\"></a></p>\n<!--sponsorsend-->\n\n## <a name=\"technology-sponsors\"></a>Technology Sponsors\n\n* Site search ([eslint.org](https://eslint.org)) is sponsored by [Algolia](https://www.algolia.com)\n* Hosting for ([eslint.org](https://eslint.org)) is sponsored by [Netlify](https://www.netlify.com)\n* Password management is sponsored by [1Password](https://www.1password.com)\n/lib/rules/no-tabs.js\ts/**\n * @fileoverview Rule to check for tabs inside a file\n * @author Gyandeep Singh\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\nconst tabRegex = /\\t+/gu;\nconst anyNonWhitespaceRegex = /\\S/u;\n\n//------------------------------------------------------------------------------\n// Public Interface\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"layout\",\n\n        docs: {\n            description: \"disallow all tabs\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-tabs\"\n        },\n        schema: [{\n            type: \"object\",\n            properties: {\n                allowIndentationTabs: {\n                    type: \"boolean\",\n                    default: false\n                }\n            },\n            additionalProperties: false\n        }],\n\n        messages: {\n            unexpectedTab: \"Unexpected tab character.\"\n        }\n    },\n\n    create(context) {\n        const sourceCode = context.getSourceCode();\n        const allowIndentationTabs = context.options && context.options[0] && context.options[0].allowIndentationTabs;\n\n        return {\n            Program(node) {\n                sourceCode.getLines().forEach((line, index) => {\n                    let match;\n\n                    while ((match = tabRegex.exec(line)) !== null) {\n                        if (allowIndentationTabs && !anyNonWhitespaceRegex.test(line.slice(0, match.index))) {\n                            continue;\n                        }\n\n                        context.report({\n                            node,\n                            loc: {\n                                start: {\n                                    line: index + 1,\n                                    column: match.index\n                                },\n                                end: {\n                                    line: index + 1,\n                                    column: match.index + match[0].length\n                                }\n                            },\n                            messageId: \"unexpectedTab\"\n                        });\n                    }\n                });\n            }\n        };\n    }\n};\n/lib/rules/no-empty-function.js\u0012/**\n * @fileoverview Rule to disallow empty functions.\n * @author Toru Nagashima\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\nconst ALLOW_OPTIONS = Object.freeze([\n    \"functions\",\n    \"arrowFunctions\",\n    \"generatorFunctions\",\n    \"methods\",\n    \"generatorMethods\",\n    \"getters\",\n    \"setters\",\n    \"constructors\",\n    \"asyncFunctions\",\n    \"asyncMethods\"\n]);\n\n/**\n * Gets the kind of a given function node.\n * @param {ASTNode} node A function node to get. This is one of\n *      an ArrowFunctionExpression, a FunctionDeclaration, or a\n *      FunctionExpression.\n * @returns {string} The kind of the function. This is one of \"functions\",\n *      \"arrowFunctions\", \"generatorFunctions\", \"asyncFunctions\", \"methods\",\n *      \"generatorMethods\", \"asyncMethods\", \"getters\", \"setters\", and\n *      \"constructors\".\n */\nfunction getKind(node) {\n    const parent = node.parent;\n    let kind = \"\";\n\n    if (node.type === \"ArrowFunctionExpression\") {\n        return \"arrowFunctions\";\n    }\n\n    // Detects main kind.\n    if (parent.type === \"Property\") {\n        if (parent.kind === \"get\") {\n            return \"getters\";\n        }\n        if (parent.kind === \"set\") {\n            return \"setters\";\n        }\n        kind = parent.method ? \"methods\" : \"functions\";\n\n    } else if (parent.type === \"MethodDefinition\") {\n        if (parent.kind === \"get\") {\n            return \"getters\";\n        }\n        if (parent.kind === \"set\") {\n            return \"setters\";\n        }\n        if (parent.kind === \"constructor\") {\n            return \"constructors\";\n        }\n        kind = \"methods\";\n\n    } else {\n        kind = \"functions\";\n    }\n\n    // Detects prefix.\n    let prefix = \"\";\n\n    if (node.generator) {\n        prefix = \"generator\";\n    } else if (node.async) {\n        prefix = \"async\";\n    } else {\n        return kind;\n    }\n    return prefix + kind[0].toUpperCase() + kind.slice(1);\n}\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow empty functions\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-empty-function\"\n        },\n\n        schema: [\n            {\n                type: \"object\",\n                properties: {\n                    allow: {\n                        type: \"array\",\n                        items: { enum: ALLOW_OPTIONS },\n                        uniqueItems: true\n                    }\n                },\n                additionalProperties: false\n            }\n        ],\n\n        messages: {\n            unexpected: \"Unexpected empty {{name}}.\"\n        }\n    },\n\n    create(context) {\n        const options = context.options[0] || {};\n        const allowed = options.allow || [];\n\n        const sourceCode = context.getSourceCode();\n\n        /**\n         * Reports a given function node if the node matches the following patterns.\n         *\n         * - Not allowed by options.\n         * - The body is empty.\n         * - The body doesn't have any comments.\n         * @param {ASTNode} node A function node to report. This is one of\n         *      an ArrowFunctionExpression, a FunctionDeclaration, or a\n         *      FunctionExpression.\n         * @returns {void}\n         */\n        function reportIfEmpty(node) {\n            const kind = getKind(node);\n            const name = astUtils.getFunctionNameWithKind(node);\n            const innerComments = sourceCode.getTokens(node.body, {\n                includeComments: true,\n                filter: astUtils.isCommentToken\n            });\n\n            if (allowed.indexOf(kind) === -1 &&\n                node.body.type === \"BlockStatement\" &&\n                node.body.body.length === 0 &&\n                innerComments.length === 0\n            ) {\n                context.report({\n                    node,\n                    loc: node.body.loc,\n                    messageId: \"unexpected\",\n                    data: { name }\n                });\n            }\n        }\n\n        return {\n            ArrowFunctionExpression: reportIfEmpty,\n            FunctionDeclaration: reportIfEmpty,\n            FunctionExpression: reportIfEmpty\n        };\n    }\n};\n /lib/linter/source-code-fixer.js\u0012I/**\n * @fileoverview An object that caches and applies source code fixes.\n * @author Nicholas C. Zakas\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst debug = require(\"debug\")(\"eslint:source-code-fixer\");\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\nconst BOM = \"\\uFEFF\";\n\n/**\n * Compares items in a messages array by range.\n * @param {Message} a The first message.\n * @param {Message} b The second message.\n * @returns {int} -1 if a comes before b, 1 if a comes after b, 0 if equal.\n * @private\n */\nfunction compareMessagesByFixRange(a, b) {\n    return a.fix.range[0] - b.fix.range[0] || a.fix.range[1] - b.fix.range[1];\n}\n\n/**\n * Compares items in a messages array by line and column.\n * @param {Message} a The first message.\n * @param {Message} b The second message.\n * @returns {int} -1 if a comes before b, 1 if a comes after b, 0 if equal.\n * @private\n */\nfunction compareMessagesByLocation(a, b) {\n    return a.line - b.line || a.column - b.column;\n}\n\n//------------------------------------------------------------------------------\n// Public Interface\n//------------------------------------------------------------------------------\n\n/**\n * Utility for apply fixes to source code.\n * @constructor\n */\nfunction SourceCodeFixer() {\n    Object.freeze(this);\n}\n\n/**\n * Applies the fixes specified by the messages to the given text. Tries to be\n * smart about the fixes and won't apply fixes over the same area in the text.\n * @param {string} sourceText The text to apply the changes to.\n * @param {Message[]} messages The array of messages reported by ESLint.\n * @param {boolean|Function} [shouldFix=true] Determines whether each message should be fixed\n * @returns {Object} An object containing the fixed text and any unfixed messages.\n */\nSourceCodeFixer.applyFixes = function(sourceText, messages, shouldFix) {\n    debug(\"Applying fixes\");\n\n    if (shouldFix === false) {\n        debug(\"shouldFix parameter was false, not attempting fixes\");\n        return {\n            fixed: false,\n            messages,\n            output: sourceText\n        };\n    }\n\n    // clone the array\n    const remainingMessages = [],\n        fixes = [],\n        bom = sourceText.startsWith(BOM) ? BOM : \"\",\n        text = bom ? sourceText.slice(1) : sourceText;\n    let lastPos = Number.NEGATIVE_INFINITY,\n        output = bom;\n\n    /**\n     * Try to use the 'fix' from a problem.\n     * @param {Message} problem The message object to apply fixes from\n     * @returns {boolean} Whether fix was successfully applied\n     */\n    function attemptFix(problem) {\n        const fix = problem.fix;\n        const start = fix.range[0];\n        const end = fix.range[1];\n\n        // Remain it as a problem if it's overlapped or it's a negative range\n        if (lastPos >= start || start > end) {\n            remainingMessages.push(problem);\n            return false;\n        }\n\n        // Remove BOM.\n        if ((start < 0 && end >= 0) || (start === 0 && fix.text.startsWith(BOM))) {\n            output = \"\";\n        }\n\n        // Make output to this fix.\n        output += text.slice(Math.max(0, lastPos), Math.max(0, start));\n        output += fix.text;\n        lastPos = end;\n        return true;\n    }\n\n    messages.forEach(problem => {\n        if (Object.prototype.hasOwnProperty.call(problem, \"fix\")) {\n            fixes.push(problem);\n        } else {\n            remainingMessages.push(problem);\n        }\n    });\n\n    if (fixes.length) {\n        debug(\"Found fixes to apply\");\n        let fixesWereApplied = false;\n\n        for (const problem of fixes.sort(compareMessagesByFixRange)) {\n            if (typeof shouldFix !== \"function\" || shouldFix(problem)) {\n                attemptFix(problem);\n\n                /*\n                 * The only time attemptFix will fail is if a previous fix was\n                 * applied which conflicts with it.  So we can mark this as true.\n                 */\n                fixesWereApplied = true;\n            } else {\n                remainingMessages.push(problem);\n            }\n        }\n        output += text.slice(Math.max(0, lastPos));\n\n        return {\n            fixed: fixesWereApplied,\n            messages: remainingMessages.sort(compareMessagesByLocation),\n            output\n        };\n    }\n\n    debug(\"No fixes to apply\");\n    return {\n        fixed: false,\n        messages,\n        output: bom + text\n    };\n\n};\n\nmodule.exports = SourceCodeFixer;\n)/lib/rules/no-unsafe-optional-chaining.js\u001b/**\n * @fileoverview Rule to disallow unsafe optional chaining\n * @author Yeon JuAn\n */\n\n\"use strict\";\n\nconst UNSAFE_ARITHMETIC_OPERATORS = new Set([\"+\", \"-\", \"/\", \"*\", \"%\", \"**\"]);\nconst UNSAFE_ASSIGNMENT_OPERATORS = new Set([\"+=\", \"-=\", \"/=\", \"*=\", \"%=\", \"**=\"]);\nconst UNSAFE_RELATIONAL_OPERATORS = new Set([\"in\", \"instanceof\"]);\n\n/**\n * Checks whether a node is a destructuring pattern or not\n * @param {ASTNode} node node to check\n * @returns {boolean} `true` if a node is a destructuring pattern, otherwise `false`\n */\nfunction isDestructuringPattern(node) {\n    return node.type === \"ObjectPattern\" || node.type === \"ArrayPattern\";\n}\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"problem\",\n\n        docs: {\n            description: \"disallow use of optional chaining in contexts where the `undefined` value is not allowed\",\n            recommended: true,\n            url: \"https://eslint.org/docs/rules/no-unsafe-optional-chaining\"\n        },\n        schema: [{\n            type: \"object\",\n            properties: {\n                disallowArithmeticOperators: {\n                    type: \"boolean\",\n                    default: false\n                }\n            },\n            additionalProperties: false\n        }],\n        fixable: null,\n        messages: {\n            unsafeOptionalChain: \"Unsafe usage of optional chaining. If it short-circuits with 'undefined' the evaluation will throw TypeError.\",\n            unsafeArithmetic: \"Unsafe arithmetic operation on optional chaining. It can result in NaN.\"\n        }\n    },\n\n    create(context) {\n        const options = context.options[0] || {};\n        const disallowArithmeticOperators = (options.disallowArithmeticOperators) || false;\n\n        /**\n         * Reports unsafe usage of optional chaining\n         * @param {ASTNode} node node to report\n         * @returns {void}\n         */\n        function reportUnsafeUsage(node) {\n            context.report({\n                messageId: \"unsafeOptionalChain\",\n                node\n            });\n        }\n\n        /**\n         * Reports unsafe arithmetic operation on optional chaining\n         * @param {ASTNode} node node to report\n         * @returns {void}\n         */\n        function reportUnsafeArithmetic(node) {\n            context.report({\n                messageId: \"unsafeArithmetic\",\n                node\n            });\n        }\n\n        /**\n         * Checks and reports if a node can short-circuit with `undefined` by optional chaining.\n         * @param {ASTNode} [node] node to check\n         * @param {Function} reportFunc report function\n         * @returns {void}\n         */\n        function checkUndefinedShortCircuit(node, reportFunc) {\n            if (!node) {\n                return;\n            }\n            switch (node.type) {\n                case \"LogicalExpression\":\n                    if (node.operator === \"||\" || node.operator === \"??\") {\n                        checkUndefinedShortCircuit(node.right, reportFunc);\n                    } else if (node.operator === \"&&\") {\n                        checkUndefinedShortCircuit(node.left, reportFunc);\n                        checkUndefinedShortCircuit(node.right, reportFunc);\n                    }\n                    break;\n                case \"SequenceExpression\":\n                    checkUndefinedShortCircuit(\n                        node.expressions[node.expressions.length - 1],\n                        reportFunc\n                    );\n                    break;\n                case \"ConditionalExpression\":\n                    checkUndefinedShortCircuit(node.consequent, reportFunc);\n                    checkUndefinedShortCircuit(node.alternate, reportFunc);\n                    break;\n                case \"AwaitExpression\":\n                    checkUndefinedShortCircuit(node.argument, reportFunc);\n                    break;\n                case \"ChainExpression\":\n                    reportFunc(node);\n                    break;\n                default:\n                    break;\n            }\n        }\n\n        /**\n         * Checks unsafe usage of optional chaining\n         * @param {ASTNode} node node to check\n         * @returns {void}\n         */\n        function checkUnsafeUsage(node) {\n            checkUndefinedShortCircuit(node, reportUnsafeUsage);\n        }\n\n        /**\n         * Checks unsafe arithmetic operations on optional chaining\n         * @param {ASTNode} node node to check\n         * @returns {void}\n         */\n        function checkUnsafeArithmetic(node) {\n            checkUndefinedShortCircuit(node, reportUnsafeArithmetic);\n        }\n\n        return {\n            \"AssignmentExpression, AssignmentPattern\"(node) {\n                if (isDestructuringPattern(node.left)) {\n                    checkUnsafeUsage(node.right);\n                }\n            },\n            \"ClassDeclaration, ClassExpression\"(node) {\n                checkUnsafeUsage(node.superClass);\n            },\n            CallExpression(node) {\n                if (!node.optional) {\n                    checkUnsafeUsage(node.callee);\n                }\n            },\n            NewExpression(node) {\n                checkUnsafeUsage(node.callee);\n            },\n            VariableDeclarator(node) {\n                if (isDestructuringPattern(node.id)) {\n                    checkUnsafeUsage(node.init);\n                }\n            },\n            MemberExpression(node) {\n                if (!node.optional) {\n                    checkUnsafeUsage(node.object);\n                }\n            },\n            TaggedTemplateExpression(node) {\n                checkUnsafeUsage(node.tag);\n            },\n            ForOfStatement(node) {\n                checkUnsafeUsage(node.right);\n            },\n            SpreadElement(node) {\n                if (node.parent && node.parent.type !== \"ObjectExpression\") {\n                    checkUnsafeUsage(node.argument);\n                }\n            },\n            BinaryExpression(node) {\n                if (UNSAFE_RELATIONAL_OPERATORS.has(node.operator)) {\n                    checkUnsafeUsage(node.right);\n                }\n                if (\n                    disallowArithmeticOperators &&\n                    UNSAFE_ARITHMETIC_OPERATORS.has(node.operator)\n                ) {\n                    checkUnsafeArithmetic(node.right);\n                    checkUnsafeArithmetic(node.left);\n                }\n            },\n            WithStatement(node) {\n                checkUnsafeUsage(node.object);\n            },\n            UnaryExpression(node) {\n                if (\n                    disallowArithmeticOperators &&\n                    UNSAFE_ARITHMETIC_OPERATORS.has(node.operator)\n                ) {\n                    checkUnsafeArithmetic(node.argument);\n                }\n            },\n            AssignmentExpression(node) {\n                if (\n                    disallowArithmeticOperators &&\n                    UNSAFE_ASSIGNMENT_OPERATORS.has(node.operator)\n                ) {\n                    checkUnsafeArithmetic(node.right);\n                }\n            }\n        };\n    }\n};\n\"/lib/rules/no-restricted-syntax.js\b/**\n * @fileoverview Rule to flag use of certain node types\n * @author Burak Yigit Kaya\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow specified syntax\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-restricted-syntax\"\n        },\n\n        schema: {\n            type: \"array\",\n            items: {\n                oneOf: [\n                    {\n                        type: \"string\"\n                    },\n                    {\n                        type: \"object\",\n                        properties: {\n                            selector: { type: \"string\" },\n                            message: { type: \"string\" }\n                        },\n                        required: [\"selector\"],\n                        additionalProperties: false\n                    }\n                ]\n            },\n            uniqueItems: true,\n            minItems: 0\n        },\n\n        messages: {\n            // eslint-disable-next-line eslint-plugin/report-message-format -- Custom message might not end in a period\n            restrictedSyntax: \"{{message}}\"\n        }\n    },\n\n    create(context) {\n        return context.options.reduce((result, selectorOrObject) => {\n            const isStringFormat = (typeof selectorOrObject === \"string\");\n            const hasCustomMessage = !isStringFormat && Boolean(selectorOrObject.message);\n\n            const selector = isStringFormat ? selectorOrObject : selectorOrObject.selector;\n            const message = hasCustomMessage ? selectorOrObject.message : `Using '${selector}' is not allowed.`;\n\n            return Object.assign(result, {\n                [selector](node) {\n                    context.report({\n                        node,\n                        messageId: \"restrictedSyntax\",\n                        data: { message }\n                    });\n                }\n            });\n        }, {});\n\n    }\n};\n\"/lib/rules/capitalized-comments.js)/**\n * @fileoverview enforce or disallow capitalization of the first letter of a comment\n * @author Kevin Partington\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst LETTER_PATTERN = require(\"./utils/patterns/letters\");\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\nconst DEFAULT_IGNORE_PATTERN = astUtils.COMMENTS_IGNORE_PATTERN,\n    WHITESPACE = /\\s/gu,\n    MAYBE_URL = /^\\s*[^:/?#\\s]+:\\/\\/[^?#]/u; // TODO: Combine w/ max-len pattern?\n\n/*\n * Base schema body for defining the basic capitalization rule, ignorePattern,\n * and ignoreInlineComments values.\n * This can be used in a few different ways in the actual schema.\n */\nconst SCHEMA_BODY = {\n    type: \"object\",\n    properties: {\n        ignorePattern: {\n            type: \"string\"\n        },\n        ignoreInlineComments: {\n            type: \"boolean\"\n        },\n        ignoreConsecutiveComments: {\n            type: \"boolean\"\n        }\n    },\n    additionalProperties: false\n};\nconst DEFAULTS = {\n    ignorePattern: \"\",\n    ignoreInlineComments: false,\n    ignoreConsecutiveComments: false\n};\n\n/**\n * Get normalized options for either block or line comments from the given\n * user-provided options.\n * - If the user-provided options is just a string, returns a normalized\n *   set of options using default values for all other options.\n * - If the user-provided options is an object, then a normalized option\n *   set is returned. Options specified in overrides will take priority\n *   over options specified in the main options object, which will in\n *   turn take priority over the rule's defaults.\n * @param {Object|string} rawOptions The user-provided options.\n * @param {string} which Either \"line\" or \"block\".\n * @returns {Object} The normalized options.\n */\nfunction getNormalizedOptions(rawOptions, which) {\n    return Object.assign({}, DEFAULTS, rawOptions[which] || rawOptions);\n}\n\n/**\n * Get normalized options for block and line comments.\n * @param {Object|string} rawOptions The user-provided options.\n * @returns {Object} An object with \"Line\" and \"Block\" keys and corresponding\n * normalized options objects.\n */\nfunction getAllNormalizedOptions(rawOptions = {}) {\n    return {\n        Line: getNormalizedOptions(rawOptions, \"line\"),\n        Block: getNormalizedOptions(rawOptions, \"block\")\n    };\n}\n\n/**\n * Creates a regular expression for each ignorePattern defined in the rule\n * options.\n *\n * This is done in order to avoid invoking the RegExp constructor repeatedly.\n * @param {Object} normalizedOptions The normalized rule options.\n * @returns {void}\n */\nfunction createRegExpForIgnorePatterns(normalizedOptions) {\n    Object.keys(normalizedOptions).forEach(key => {\n        const ignorePatternStr = normalizedOptions[key].ignorePattern;\n\n        if (ignorePatternStr) {\n            const regExp = RegExp(`^\\\\s*(?:${ignorePatternStr})`, \"u\");\n\n            normalizedOptions[key].ignorePatternRegExp = regExp;\n        }\n    });\n}\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"enforce or disallow capitalization of the first letter of a comment\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/capitalized-comments\"\n        },\n\n        fixable: \"code\",\n\n        schema: [\n            { enum: [\"always\", \"never\"] },\n            {\n                oneOf: [\n                    SCHEMA_BODY,\n                    {\n                        type: \"object\",\n                        properties: {\n                            line: SCHEMA_BODY,\n                            block: SCHEMA_BODY\n                        },\n                        additionalProperties: false\n                    }\n                ]\n            }\n        ],\n\n        messages: {\n            unexpectedLowercaseComment: \"Comments should not begin with a lowercase character.\",\n            unexpectedUppercaseComment: \"Comments should not begin with an uppercase character.\"\n        }\n    },\n\n    create(context) {\n\n        const capitalize = context.options[0] || \"always\",\n            normalizedOptions = getAllNormalizedOptions(context.options[1]),\n            sourceCode = context.getSourceCode();\n\n        createRegExpForIgnorePatterns(normalizedOptions);\n\n        //----------------------------------------------------------------------\n        // Helpers\n        //----------------------------------------------------------------------\n\n        /**\n         * Checks whether a comment is an inline comment.\n         *\n         * For the purpose of this rule, a comment is inline if:\n         * 1. The comment is preceded by a token on the same line; and\n         * 2. The command is followed by a token on the same line.\n         *\n         * Note that the comment itself need not be single-line!\n         *\n         * Also, it follows from this definition that only block comments can\n         * be considered as possibly inline. This is because line comments\n         * would consume any following tokens on the same line as the comment.\n         * @param {ASTNode} comment The comment node to check.\n         * @returns {boolean} True if the comment is an inline comment, false\n         * otherwise.\n         */\n        function isInlineComment(comment) {\n            const previousToken = sourceCode.getTokenBefore(comment, { includeComments: true }),\n                nextToken = sourceCode.getTokenAfter(comment, { includeComments: true });\n\n            return Boolean(\n                previousToken &&\n                nextToken &&\n                comment.loc.start.line === previousToken.loc.end.line &&\n                comment.loc.end.line === nextToken.loc.start.line\n            );\n        }\n\n        /**\n         * Determine if a comment follows another comment.\n         * @param {ASTNode} comment The comment to check.\n         * @returns {boolean} True if the comment follows a valid comment.\n         */\n        function isConsecutiveComment(comment) {\n            const previousTokenOrComment = sourceCode.getTokenBefore(comment, { includeComments: true });\n\n            return Boolean(\n                previousTokenOrComment &&\n                [\"Block\", \"Line\"].indexOf(previousTokenOrComment.type) !== -1\n            );\n        }\n\n        /**\n         * Check a comment to determine if it is valid for this rule.\n         * @param {ASTNode} comment The comment node to process.\n         * @param {Object} options The options for checking this comment.\n         * @returns {boolean} True if the comment is valid, false otherwise.\n         */\n        function isCommentValid(comment, options) {\n\n            // 1. Check for default ignore pattern.\n            if (DEFAULT_IGNORE_PATTERN.test(comment.value)) {\n                return true;\n            }\n\n            // 2. Check for custom ignore pattern.\n            const commentWithoutAsterisks = comment.value\n                .replace(/\\*/gu, \"\");\n\n            if (options.ignorePatternRegExp && options.ignorePatternRegExp.test(commentWithoutAsterisks)) {\n                return true;\n            }\n\n            // 3. Check for inline comments.\n            if (options.ignoreInlineComments && isInlineComment(comment)) {\n                return true;\n            }\n\n            // 4. Is this a consecutive comment (and are we tolerating those)?\n            if (options.ignoreConsecutiveComments && isConsecutiveComment(comment)) {\n                return true;\n            }\n\n            // 5. Does the comment start with a possible URL?\n            if (MAYBE_URL.test(commentWithoutAsterisks)) {\n                return true;\n            }\n\n            // 6. Is the initial word character a letter?\n            const commentWordCharsOnly = commentWithoutAsterisks\n                .replace(WHITESPACE, \"\");\n\n            if (commentWordCharsOnly.length === 0) {\n                return true;\n            }\n\n            const firstWordChar = commentWordCharsOnly[0];\n\n            if (!LETTER_PATTERN.test(firstWordChar)) {\n                return true;\n            }\n\n            // 7. Check the case of the initial word character.\n            const isUppercase = firstWordChar !== firstWordChar.toLocaleLowerCase(),\n                isLowercase = firstWordChar !== firstWordChar.toLocaleUpperCase();\n\n            if (capitalize === \"always\" && isLowercase) {\n                return false;\n            }\n            if (capitalize === \"never\" && isUppercase) {\n                return false;\n            }\n\n            return true;\n        }\n\n        /**\n         * Process a comment to determine if it needs to be reported.\n         * @param {ASTNode} comment The comment node to process.\n         * @returns {void}\n         */\n        function processComment(comment) {\n            const options = normalizedOptions[comment.type],\n                commentValid = isCommentValid(comment, options);\n\n            if (!commentValid) {\n                const messageId = capitalize === \"always\"\n                    ? \"unexpectedLowercaseComment\"\n                    : \"unexpectedUppercaseComment\";\n\n                context.report({\n                    node: null, // Intentionally using loc instead\n                    loc: comment.loc,\n                    messageId,\n                    fix(fixer) {\n                        const match = comment.value.match(LETTER_PATTERN);\n\n                        return fixer.replaceTextRange(\n\n                            // Offset match.index by 2 to account for the first 2 characters that start the comment (// or /*)\n                            [comment.range[0] + match.index + 2, comment.range[0] + match.index + 3],\n                            capitalize === \"always\" ? match[0].toLocaleUpperCase() : match[0].toLocaleLowerCase()\n                        );\n                    }\n                });\n            }\n        }\n\n        //----------------------------------------------------------------------\n        // Public\n        //----------------------------------------------------------------------\n\n        return {\n            Program() {\n                const comments = sourceCode.getAllComments();\n\n                comments.filter(token => token.type !== \"Shebang\").forEach(processComment);\n            }\n        };\n    }\n};\n%/lib/rules/no-unexpected-multiline.js\u0010/**\n * @fileoverview Rule to spot scenarios where a newline looks like it is ending a statement, but is not.\n * @author Glen Mailer\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"problem\",\n\n        docs: {\n            description: \"disallow confusing multiline expressions\",\n            recommended: true,\n            url: \"https://eslint.org/docs/rules/no-unexpected-multiline\"\n        },\n\n        schema: [],\n        messages: {\n            function: \"Unexpected newline between function and ( of function call.\",\n            property: \"Unexpected newline between object and [ of property access.\",\n            taggedTemplate: \"Unexpected newline between template tag and template literal.\",\n            division: \"Unexpected newline between numerator and division operator.\"\n        }\n    },\n\n    create(context) {\n\n        const REGEX_FLAG_MATCHER = /^[gimsuy]+$/u;\n\n        const sourceCode = context.getSourceCode();\n\n        /**\n         * Check to see if there is a newline between the node and the following open bracket\n         * line's expression\n         * @param {ASTNode} node The node to check.\n         * @param {string} messageId The error messageId to use.\n         * @returns {void}\n         * @private\n         */\n        function checkForBreakAfter(node, messageId) {\n            const openParen = sourceCode.getTokenAfter(node, astUtils.isNotClosingParenToken);\n            const nodeExpressionEnd = sourceCode.getTokenBefore(openParen);\n\n            if (openParen.loc.start.line !== nodeExpressionEnd.loc.end.line) {\n                context.report({\n                    node,\n                    loc: openParen.loc,\n                    messageId\n                });\n            }\n        }\n\n        //--------------------------------------------------------------------------\n        // Public API\n        //--------------------------------------------------------------------------\n\n        return {\n\n            MemberExpression(node) {\n                if (!node.computed || node.optional) {\n                    return;\n                }\n                checkForBreakAfter(node.object, \"property\");\n            },\n\n            TaggedTemplateExpression(node) {\n                const { quasi } = node;\n\n                // handles common tags, parenthesized tags, and typescript's generic type arguments\n                const tokenBefore = sourceCode.getTokenBefore(quasi);\n\n                if (tokenBefore.loc.end.line !== quasi.loc.start.line) {\n                    context.report({\n                        node,\n                        loc: {\n                            start: quasi.loc.start,\n                            end: {\n                                line: quasi.loc.start.line,\n                                column: quasi.loc.start.column + 1\n                            }\n                        },\n                        messageId: \"taggedTemplate\"\n                    });\n                }\n            },\n\n            CallExpression(node) {\n                if (node.arguments.length === 0 || node.optional) {\n                    return;\n                }\n                checkForBreakAfter(node.callee, \"function\");\n            },\n\n            \"BinaryExpression[operator='/'] > BinaryExpression[operator='/'].left\"(node) {\n                const secondSlash = sourceCode.getTokenAfter(node, token => token.value === \"/\");\n                const tokenAfterOperator = sourceCode.getTokenAfter(secondSlash);\n\n                if (\n                    tokenAfterOperator.type === \"Identifier\" &&\n                    REGEX_FLAG_MATCHER.test(tokenAfterOperator.value) &&\n                    secondSlash.range[1] === tokenAfterOperator.range[0]\n                ) {\n                    checkForBreakAfter(node.left, \"division\");\n                }\n            }\n        };\n\n    }\n};\n)/lib/rules/no-template-curly-in-string.js\u0004/**\n * @fileoverview Warn when using template string syntax in regular strings\n * @author Jeroen Engels\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"problem\",\n\n        docs: {\n            description: \"disallow template literal placeholder syntax in regular strings\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-template-curly-in-string\"\n        },\n\n        schema: [],\n\n        messages: {\n            unexpectedTemplateExpression: \"Unexpected template string expression.\"\n        }\n    },\n\n    create(context) {\n        const regex = /\\$\\{[^}]+\\}/u;\n\n        return {\n            Literal(node) {\n                if (typeof node.value === \"string\" && regex.test(node.value)) {\n                    context.report({\n                        node,\n                        messageId: \"unexpectedTemplateExpression\"\n                    });\n                }\n            }\n        };\n\n    }\n};\n#/lib/rules/no-restricted-exports.js\u000b/**\n * @fileoverview Rule to disallow specified names in exports\n * @author Milos Djermanovic\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow specified names in exports\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-restricted-exports\"\n        },\n\n        schema: [{\n            type: \"object\",\n            properties: {\n                restrictedNamedExports: {\n                    type: \"array\",\n                    items: {\n                        type: \"string\"\n                    },\n                    uniqueItems: true\n                }\n            },\n            additionalProperties: false\n        }],\n\n        messages: {\n            restrictedNamed: \"'{{name}}' is restricted from being used as an exported name.\"\n        }\n    },\n\n    create(context) {\n\n        const restrictedNames = new Set(context.options[0] && context.options[0].restrictedNamedExports);\n\n        /**\n         * Checks and reports given exported name.\n         * @param {ASTNode} node exported `Identifier` or string `Literal` node to check.\n         * @returns {void}\n         */\n        function checkExportedName(node) {\n            const name = astUtils.getModuleExportName(node);\n\n            if (restrictedNames.has(name)) {\n                context.report({\n                    node,\n                    messageId: \"restrictedNamed\",\n                    data: { name }\n                });\n            }\n        }\n\n        return {\n            ExportAllDeclaration(node) {\n                if (node.exported) {\n                    checkExportedName(node.exported);\n                }\n            },\n\n            ExportNamedDeclaration(node) {\n                const declaration = node.declaration;\n\n                if (declaration) {\n                    if (declaration.type === \"FunctionDeclaration\" || declaration.type === \"ClassDeclaration\") {\n                        checkExportedName(declaration.id);\n                    } else if (declaration.type === \"VariableDeclaration\") {\n                        context.getDeclaredVariables(declaration)\n                            .map(v => v.defs.find(d => d.parent === declaration))\n                            .map(d => d.name) // Identifier nodes\n                            .forEach(checkExportedName);\n                    }\n                } else {\n                    node.specifiers\n                        .map(s => s.exported)\n                        .forEach(checkExportedName);\n                }\n            }\n        };\n    }\n};\n//lib/linter/code-path-analysis/debug-helpers.js\u0019/**\n * @fileoverview Helpers to debug for code path analysis.\n * @author Toru Nagashima\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst debug = require(\"debug\")(\"eslint:code-path\");\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\n/**\n * Gets id of a given segment.\n * @param {CodePathSegment} segment A segment to get.\n * @returns {string} Id of the segment.\n */\n/* istanbul ignore next */\nfunction getId(segment) { // eslint-disable-line jsdoc/require-jsdoc -- Ignoring\n    return segment.id + (segment.reachable ? \"\" : \"!\");\n}\n\n/**\n * Get string for the given node and operation.\n * @param {ASTNode} node The node to convert.\n * @param {\"enter\" | \"exit\" | undefined} label The operation label.\n * @returns {string} The string representation.\n */\nfunction nodeToString(node, label) {\n    const suffix = label ? `:${label}` : \"\";\n\n    switch (node.type) {\n        case \"Identifier\": return `${node.type}${suffix} (${node.name})`;\n        case \"Literal\": return `${node.type}${suffix} (${node.value})`;\n        default: return `${node.type}${suffix}`;\n    }\n}\n\n//------------------------------------------------------------------------------\n// Public Interface\n//------------------------------------------------------------------------------\n\nmodule.exports = {\n\n    /**\n     * A flag that debug dumping is enabled or not.\n     * @type {boolean}\n     */\n    enabled: debug.enabled,\n\n    /**\n     * Dumps given objects.\n     * @param {...any} args objects to dump.\n     * @returns {void}\n     */\n    dump: debug,\n\n    /**\n     * Dumps the current analyzing state.\n     * @param {ASTNode} node A node to dump.\n     * @param {CodePathState} state A state to dump.\n     * @param {boolean} leaving A flag whether or not it's leaving\n     * @returns {void}\n     */\n    dumpState: !debug.enabled ? debug : /* istanbul ignore next */ function(node, state, leaving) {\n        for (let i = 0; i < state.currentSegments.length; ++i) {\n            const segInternal = state.currentSegments[i].internal;\n\n            if (leaving) {\n                const last = segInternal.nodes.length - 1;\n\n                if (last >= 0 && segInternal.nodes[last] === nodeToString(node, \"enter\")) {\n                    segInternal.nodes[last] = nodeToString(node, void 0);\n                } else {\n                    segInternal.nodes.push(nodeToString(node, \"exit\"));\n                }\n            } else {\n                segInternal.nodes.push(nodeToString(node, \"enter\"));\n            }\n        }\n\n        debug([\n            `${state.currentSegments.map(getId).join(\",\")})`,\n            `${node.type}${leaving ? \":exit\" : \"\"}`\n        ].join(\" \"));\n    },\n\n    /**\n     * Dumps a DOT code of a given code path.\n     * The DOT code can be visualized with Graphvis.\n     * @param {CodePath} codePath A code path to dump.\n     * @returns {void}\n     * @see http://www.graphviz.org\n     * @see http://www.webgraphviz.com\n     */\n    dumpDot: !debug.enabled ? debug : /* istanbul ignore next */ function(codePath) {\n        let text =\n            \"\\n\" +\n            \"digraph {\\n\" +\n            \"node[shape=box,style=\\\"rounded,filled\\\",fillcolor=white];\\n\" +\n            \"initial[label=\\\"\\\",shape=circle,style=filled,fillcolor=black,width=0.25,height=0.25];\\n\";\n\n        if (codePath.returnedSegments.length > 0) {\n            text += \"final[label=\\\"\\\",shape=doublecircle,style=filled,fillcolor=black,width=0.25,height=0.25];\\n\";\n        }\n        if (codePath.thrownSegments.length > 0) {\n            text += \"thrown[label=\\\"✘\\\",shape=circle,width=0.3,height=0.3,fixedsize];\\n\";\n        }\n\n        const traceMap = Object.create(null);\n        const arrows = this.makeDotArrows(codePath, traceMap);\n\n        for (const id in traceMap) { // eslint-disable-line guard-for-in -- Want ability to traverse prototype\n            const segment = traceMap[id];\n\n            text += `${id}[`;\n\n            if (segment.reachable) {\n                text += \"label=\\\"\";\n            } else {\n                text += \"style=\\\"rounded,dashed,filled\\\",fillcolor=\\\"#FF9800\\\",label=\\\"<<unreachable>>\\\\n\";\n            }\n\n            if (segment.internal.nodes.length > 0) {\n                text += segment.internal.nodes.join(\"\\\\n\");\n            } else {\n                text += \"????\";\n            }\n\n            text += \"\\\"];\\n\";\n        }\n\n        text += `${arrows}\\n`;\n        text += \"}\";\n        debug(\"DOT\", text);\n    },\n\n    /**\n     * Makes a DOT code of a given code path.\n     * The DOT code can be visualized with Graphvis.\n     * @param {CodePath} codePath A code path to make DOT.\n     * @param {Object} traceMap Optional. A map to check whether or not segments had been done.\n     * @returns {string} A DOT code of the code path.\n     */\n    makeDotArrows(codePath, traceMap) {\n        const stack = [[codePath.initialSegment, 0]];\n        const done = traceMap || Object.create(null);\n        let lastId = codePath.initialSegment.id;\n        let text = `initial->${codePath.initialSegment.id}`;\n\n        while (stack.length > 0) {\n            const item = stack.pop();\n            const segment = item[0];\n            const index = item[1];\n\n            if (done[segment.id] && index === 0) {\n                continue;\n            }\n            done[segment.id] = segment;\n\n            const nextSegment = segment.allNextSegments[index];\n\n            if (!nextSegment) {\n                continue;\n            }\n\n            if (lastId === segment.id) {\n                text += `->${nextSegment.id}`;\n            } else {\n                text += `;\\n${segment.id}->${nextSegment.id}`;\n            }\n            lastId = nextSegment.id;\n\n            stack.unshift([segment, 1 + index]);\n            stack.push([nextSegment, 0]);\n        }\n\n        codePath.returnedSegments.forEach(finalSegment => {\n            if (lastId === finalSegment.id) {\n                text += \"->final\";\n            } else {\n                text += `;\\n${finalSegment.id}->final`;\n            }\n            lastId = null;\n        });\n\n        codePath.thrownSegments.forEach(finalSegment => {\n            if (lastId === finalSegment.id) {\n                text += \"->thrown\";\n            } else {\n                text += `;\\n${finalSegment.id}->thrown`;\n            }\n            lastId = null;\n        });\n\n        return `${text};`;\n    }\n};\n/lib/rules/no-redeclare.js\u0016/**\n * @fileoverview Rule to flag when the same variable is declared more then once.\n * @author Ilya Volodin\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow variable redeclaration\",\n            recommended: true,\n            url: \"https://eslint.org/docs/rules/no-redeclare\"\n        },\n\n        messages: {\n            redeclared: \"'{{id}}' is already defined.\",\n            redeclaredAsBuiltin: \"'{{id}}' is already defined as a built-in global variable.\",\n            redeclaredBySyntax: \"'{{id}}' is already defined by a variable declaration.\"\n        },\n\n        schema: [\n            {\n                type: \"object\",\n                properties: {\n                    builtinGlobals: { type: \"boolean\", default: true }\n                },\n                additionalProperties: false\n            }\n        ]\n    },\n\n    create(context) {\n        const options = {\n            builtinGlobals: Boolean(\n                context.options.length === 0 ||\n                context.options[0].builtinGlobals\n            )\n        };\n        const sourceCode = context.getSourceCode();\n\n        /**\n         * Iterate declarations of a given variable.\n         * @param {escope.variable} variable The variable object to iterate declarations.\n         * @returns {IterableIterator<{type:string,node:ASTNode,loc:SourceLocation}>} The declarations.\n         */\n        function *iterateDeclarations(variable) {\n            if (options.builtinGlobals && (\n                variable.eslintImplicitGlobalSetting === \"readonly\" ||\n                variable.eslintImplicitGlobalSetting === \"writable\"\n            )) {\n                yield { type: \"builtin\" };\n            }\n\n            for (const id of variable.identifiers) {\n                yield { type: \"syntax\", node: id, loc: id.loc };\n            }\n\n            if (variable.eslintExplicitGlobalComments) {\n                for (const comment of variable.eslintExplicitGlobalComments) {\n                    yield {\n                        type: \"comment\",\n                        node: comment,\n                        loc: astUtils.getNameLocationInGlobalDirectiveComment(\n                            sourceCode,\n                            comment,\n                            variable.name\n                        )\n                    };\n                }\n            }\n        }\n\n        /**\n         * Find variables in a given scope and flag redeclared ones.\n         * @param {Scope} scope An eslint-scope scope object.\n         * @returns {void}\n         * @private\n         */\n        function findVariablesInScope(scope) {\n            for (const variable of scope.variables) {\n                const [\n                    declaration,\n                    ...extraDeclarations\n                ] = iterateDeclarations(variable);\n\n                if (extraDeclarations.length === 0) {\n                    continue;\n                }\n\n                /*\n                 * If the type of a declaration is different from the type of\n                 * the first declaration, it shows the location of the first\n                 * declaration.\n                 */\n                const detailMessageId = declaration.type === \"builtin\"\n                    ? \"redeclaredAsBuiltin\"\n                    : \"redeclaredBySyntax\";\n                const data = { id: variable.name };\n\n                // Report extra declarations.\n                for (const { type, node, loc } of extraDeclarations) {\n                    const messageId = type === declaration.type\n                        ? \"redeclared\"\n                        : detailMessageId;\n\n                    context.report({ node, loc, messageId, data });\n                }\n            }\n        }\n\n        /**\n         * Find variables in the current scope.\n         * @param {ASTNode} node The node of the current scope.\n         * @returns {void}\n         * @private\n         */\n        function checkForBlock(node) {\n            const scope = context.getScope();\n\n            /*\n             * In ES5, some node type such as `BlockStatement` doesn't have that scope.\n             * `scope.block` is a different node in such a case.\n             */\n            if (scope.block === node) {\n                findVariablesInScope(scope);\n            }\n        }\n\n        return {\n            Program() {\n                const scope = context.getScope();\n\n                findVariablesInScope(scope);\n\n                // Node.js or ES modules has a special scope.\n                if (\n                    scope.type === \"global\" &&\n                    scope.childScopes[0] &&\n\n                    // The special scope's block is the Program node.\n                    scope.block === scope.childScopes[0].block\n                ) {\n                    findVariablesInScope(scope.childScopes[0]);\n                }\n            },\n\n            FunctionDeclaration: checkForBlock,\n            FunctionExpression: checkForBlock,\n            ArrowFunctionExpression: checkForBlock,\n\n            StaticBlock: checkForBlock,\n\n            BlockStatement: checkForBlock,\n            ForStatement: checkForBlock,\n            ForInStatement: checkForBlock,\n            ForOfStatement: checkForBlock,\n            SwitchStatement: checkForBlock\n        };\n    }\n};\n$/lib/rules/generator-star-spacing.js\u001b/**\n * @fileoverview Rule to check the spacing around the * in generator functions.\n * @author Jamund Ferguson\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\nconst OVERRIDE_SCHEMA = {\n    oneOf: [\n        {\n            enum: [\"before\", \"after\", \"both\", \"neither\"]\n        },\n        {\n            type: \"object\",\n            properties: {\n                before: { type: \"boolean\" },\n                after: { type: \"boolean\" }\n            },\n            additionalProperties: false\n        }\n    ]\n};\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"layout\",\n\n        docs: {\n            description: \"enforce consistent spacing around `*` operators in generator functions\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/generator-star-spacing\"\n        },\n\n        fixable: \"whitespace\",\n\n        schema: [\n            {\n                oneOf: [\n                    {\n                        enum: [\"before\", \"after\", \"both\", \"neither\"]\n                    },\n                    {\n                        type: \"object\",\n                        properties: {\n                            before: { type: \"boolean\" },\n                            after: { type: \"boolean\" },\n                            named: OVERRIDE_SCHEMA,\n                            anonymous: OVERRIDE_SCHEMA,\n                            method: OVERRIDE_SCHEMA\n                        },\n                        additionalProperties: false\n                    }\n                ]\n            }\n        ],\n\n        messages: {\n            missingBefore: \"Missing space before *.\",\n            missingAfter: \"Missing space after *.\",\n            unexpectedBefore: \"Unexpected space before *.\",\n            unexpectedAfter: \"Unexpected space after *.\"\n        }\n    },\n\n    create(context) {\n\n        const optionDefinitions = {\n            before: { before: true, after: false },\n            after: { before: false, after: true },\n            both: { before: true, after: true },\n            neither: { before: false, after: false }\n        };\n\n        /**\n         * Returns resolved option definitions based on an option and defaults\n         * @param {any} option The option object or string value\n         * @param {Object} defaults The defaults to use if options are not present\n         * @returns {Object} the resolved object definition\n         */\n        function optionToDefinition(option, defaults) {\n            if (!option) {\n                return defaults;\n            }\n\n            return typeof option === \"string\"\n                ? optionDefinitions[option]\n                : Object.assign({}, defaults, option);\n        }\n\n        const modes = (function(option) {\n            const defaults = optionToDefinition(option, optionDefinitions.before);\n\n            return {\n                named: optionToDefinition(option.named, defaults),\n                anonymous: optionToDefinition(option.anonymous, defaults),\n                method: optionToDefinition(option.method, defaults)\n            };\n        }(context.options[0] || {}));\n\n        const sourceCode = context.getSourceCode();\n\n        /**\n         * Checks if the given token is a star token or not.\n         * @param {Token} token The token to check.\n         * @returns {boolean} `true` if the token is a star token.\n         */\n        function isStarToken(token) {\n            return token.value === \"*\" && token.type === \"Punctuator\";\n        }\n\n        /**\n         * Gets the generator star token of the given function node.\n         * @param {ASTNode} node The function node to get.\n         * @returns {Token} Found star token.\n         */\n        function getStarToken(node) {\n            return sourceCode.getFirstToken(\n                (node.parent.method || node.parent.type === \"MethodDefinition\") ? node.parent : node,\n                isStarToken\n            );\n        }\n\n        /**\n         * capitalize a given string.\n         * @param {string} str the given string.\n         * @returns {string} the capitalized string.\n         */\n        function capitalize(str) {\n            return str[0].toUpperCase() + str.slice(1);\n        }\n\n        /**\n         * Checks the spacing between two tokens before or after the star token.\n         * @param {string} kind Either \"named\", \"anonymous\", or \"method\"\n         * @param {string} side Either \"before\" or \"after\".\n         * @param {Token} leftToken `function` keyword token if side is \"before\", or\n         *     star token if side is \"after\".\n         * @param {Token} rightToken Star token if side is \"before\", or identifier\n         *     token if side is \"after\".\n         * @returns {void}\n         */\n        function checkSpacing(kind, side, leftToken, rightToken) {\n            if (!!(rightToken.range[0] - leftToken.range[1]) !== modes[kind][side]) {\n                const after = leftToken.value === \"*\";\n                const spaceRequired = modes[kind][side];\n                const node = after ? leftToken : rightToken;\n                const messageId = `${spaceRequired ? \"missing\" : \"unexpected\"}${capitalize(side)}`;\n\n                context.report({\n                    node,\n                    messageId,\n                    fix(fixer) {\n                        if (spaceRequired) {\n                            if (after) {\n                                return fixer.insertTextAfter(node, \" \");\n                            }\n                            return fixer.insertTextBefore(node, \" \");\n                        }\n                        return fixer.removeRange([leftToken.range[1], rightToken.range[0]]);\n                    }\n                });\n            }\n        }\n\n        /**\n         * Enforces the spacing around the star if node is a generator function.\n         * @param {ASTNode} node A function expression or declaration node.\n         * @returns {void}\n         */\n        function checkFunction(node) {\n            if (!node.generator) {\n                return;\n            }\n\n            const starToken = getStarToken(node);\n            const prevToken = sourceCode.getTokenBefore(starToken);\n            const nextToken = sourceCode.getTokenAfter(starToken);\n\n            let kind = \"named\";\n\n            if (node.parent.type === \"MethodDefinition\" || (node.parent.type === \"Property\" && node.parent.method)) {\n                kind = \"method\";\n            } else if (!node.id) {\n                kind = \"anonymous\";\n            }\n\n            // Only check before when preceded by `function`|`static` keyword\n            if (!(kind === \"method\" && starToken === sourceCode.getFirstToken(node.parent))) {\n                checkSpacing(kind, \"before\", prevToken, starToken);\n            }\n\n            checkSpacing(kind, \"after\", starToken, nextToken);\n        }\n\n        return {\n            FunctionDeclaration: checkFunction,\n            FunctionExpression: checkFunction\n        };\n\n    }\n};\n-/lib/rules/no-unused-private-class-members.js\u001e/**\n * @fileoverview Rule to flag declared but unused private class members\n * @author Tim van der Lippe\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"problem\",\n\n        docs: {\n            description: \"disallow unused private class members\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-unused-private-class-members\"\n        },\n\n        schema: [],\n\n        messages: {\n            unusedPrivateClassMember: \"'{{classMemberName}}' is defined but never used.\"\n        }\n    },\n\n    create(context) {\n        const trackedClasses = [];\n\n        /**\n         * Check whether the current node is in a write only assignment.\n         * @param {ASTNode} privateIdentifierNode Node referring to a private identifier\n         * @returns {boolean} Whether the node is in a write only assignment\n         * @private\n         */\n        function isWriteOnlyAssignment(privateIdentifierNode) {\n            const parentStatement = privateIdentifierNode.parent.parent;\n            const isAssignmentExpression = parentStatement.type === \"AssignmentExpression\";\n\n            if (!isAssignmentExpression &&\n                parentStatement.type !== \"ForInStatement\" &&\n                parentStatement.type !== \"ForOfStatement\" &&\n                parentStatement.type !== \"AssignmentPattern\") {\n                return false;\n            }\n\n            // It is a write-only usage, since we still allow usages on the right for reads\n            if (parentStatement.left !== privateIdentifierNode.parent) {\n                return false;\n            }\n\n            // For any other operator (such as '+=') we still consider it a read operation\n            if (isAssignmentExpression && parentStatement.operator !== \"=\") {\n\n                /*\n                 * However, if the read operation is \"discarded\" in an empty statement, then\n                 * we consider it write only.\n                 */\n                return parentStatement.parent.type === \"ExpressionStatement\";\n            }\n\n            return true;\n        }\n\n        //--------------------------------------------------------------------------\n        // Public\n        //--------------------------------------------------------------------------\n\n        return {\n\n            // Collect all declared members up front and assume they are all unused\n            ClassBody(classBodyNode) {\n                const privateMembers = new Map();\n\n                trackedClasses.unshift(privateMembers);\n                for (const bodyMember of classBodyNode.body) {\n                    if (bodyMember.type === \"PropertyDefinition\" || bodyMember.type === \"MethodDefinition\") {\n                        if (bodyMember.key.type === \"PrivateIdentifier\") {\n                            privateMembers.set(bodyMember.key.name, {\n                                declaredNode: bodyMember,\n                                isAccessor: bodyMember.type === \"MethodDefinition\" &&\n                                    (bodyMember.kind === \"set\" || bodyMember.kind === \"get\")\n                            });\n                        }\n                    }\n                }\n            },\n\n            /*\n             * Process all usages of the private identifier and remove a member from\n             * `declaredAndUnusedPrivateMembers` if we deem it used.\n             */\n            PrivateIdentifier(privateIdentifierNode) {\n                const classBody = trackedClasses.find(classProperties => classProperties.has(privateIdentifierNode.name));\n\n                // Can't happen, as it is a parser to have a missing class body, but let's code defensively here.\n                if (!classBody) {\n                    return;\n                }\n\n                // In case any other usage was already detected, we can short circuit the logic here.\n                const memberDefinition = classBody.get(privateIdentifierNode.name);\n\n                if (memberDefinition.isUsed) {\n                    return;\n                }\n\n                // The definition of the class member itself\n                if (privateIdentifierNode.parent.type === \"PropertyDefinition\" ||\n                    privateIdentifierNode.parent.type === \"MethodDefinition\") {\n                    return;\n                }\n\n                /*\n                 * Any usage of an accessor is considered a read, as the getter/setter can have\n                 * side-effects in its definition.\n                 */\n                if (memberDefinition.isAccessor) {\n                    memberDefinition.isUsed = true;\n                    return;\n                }\n\n                // Any assignments to this member, except for assignments that also read\n                if (isWriteOnlyAssignment(privateIdentifierNode)) {\n                    return;\n                }\n\n                const wrappingExpressionType = privateIdentifierNode.parent.parent.type;\n                const parentOfWrappingExpressionType = privateIdentifierNode.parent.parent.parent.type;\n\n                // A statement which only increments (`this.#x++;`)\n                if (wrappingExpressionType === \"UpdateExpression\" &&\n                    parentOfWrappingExpressionType === \"ExpressionStatement\") {\n                    return;\n                }\n\n                /*\n                 * ({ x: this.#usedInDestructuring } = bar);\n                 *\n                 * But should treat the following as a read:\n                 * ({ [this.#x]: a } = foo);\n                 */\n                if (wrappingExpressionType === \"Property\" &&\n                    parentOfWrappingExpressionType === \"ObjectPattern\" &&\n                    privateIdentifierNode.parent.parent.value === privateIdentifierNode.parent) {\n                    return;\n                }\n\n                // [...this.#unusedInRestPattern] = bar;\n                if (wrappingExpressionType === \"RestElement\") {\n                    return;\n                }\n\n                // [this.#unusedInAssignmentPattern] = bar;\n                if (wrappingExpressionType === \"ArrayPattern\") {\n                    return;\n                }\n\n                /*\n                 * We can't delete the memberDefinition, as we need to keep track of which member we are marking as used.\n                 * In the case of nested classes, we only mark the first member we encounter as used. If you were to delete\n                 * the member, then any subsequent usage could incorrectly mark the member of an encapsulating parent class\n                 * as used, which is incorrect.\n                 */\n                memberDefinition.isUsed = true;\n            },\n\n            /*\n             * Post-process the class members and report any remaining members.\n             * Since private members can only be accessed in the current class context,\n             * we can safely assume that all usages are within the current class body.\n             */\n            \"ClassBody:exit\"() {\n                const unusedPrivateMembers = trackedClasses.shift();\n\n                for (const [classMemberName, { declaredNode, isUsed }] of unusedPrivateMembers.entries()) {\n                    if (isUsed) {\n                        continue;\n                    }\n                    context.report({\n                        node: declaredNode,\n                        loc: declaredNode.key.loc,\n                        messageId: \"unusedPrivateClassMember\",\n                        data: {\n                            classMemberName: `#${classMemberName}`\n                        }\n                    });\n                }\n            }\n        };\n    }\n};\n/lib/rules/prefer-spread.js\u000b\u001f/**\n * @fileoverview A rule to suggest using of the spread operator instead of `.apply()`.\n * @author Toru Nagashima\n */\n\n\"use strict\";\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\n/**\n * Checks whether or not a node is a `.apply()` for variadic.\n * @param {ASTNode} node A CallExpression node to check.\n * @returns {boolean} Whether or not the node is a `.apply()` for variadic.\n */\nfunction isVariadicApplyCalling(node) {\n    return (\n        astUtils.isSpecificMemberAccess(node.callee, null, \"apply\") &&\n        node.arguments.length === 2 &&\n        node.arguments[1].type !== \"ArrayExpression\" &&\n        node.arguments[1].type !== \"SpreadElement\"\n    );\n}\n\n/**\n * Checks whether or not `thisArg` is not changed by `.apply()`.\n * @param {ASTNode|null} expectedThis The node that is the owner of the applied function.\n * @param {ASTNode} thisArg The node that is given to the first argument of the `.apply()`.\n * @param {RuleContext} context The ESLint rule context object.\n * @returns {boolean} Whether or not `thisArg` is not changed by `.apply()`.\n */\nfunction isValidThisArg(expectedThis, thisArg, context) {\n    if (!expectedThis) {\n        return astUtils.isNullOrUndefined(thisArg);\n    }\n    return astUtils.equalTokens(expectedThis, thisArg, context);\n}\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"require spread operators instead of `.apply()`\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/prefer-spread\"\n        },\n\n        schema: [],\n        fixable: null,\n\n        messages: {\n            preferSpread: \"Use the spread operator instead of '.apply()'.\"\n        }\n    },\n\n    create(context) {\n        const sourceCode = context.getSourceCode();\n\n        return {\n            CallExpression(node) {\n                if (!isVariadicApplyCalling(node)) {\n                    return;\n                }\n\n                const applied = astUtils.skipChainExpression(astUtils.skipChainExpression(node.callee).object);\n                const expectedThis = (applied.type === \"MemberExpression\") ? applied.object : null;\n                const thisArg = node.arguments[0];\n\n                if (isValidThisArg(expectedThis, thisArg, sourceCode)) {\n                    context.report({\n                        node,\n                        messageId: \"preferSpread\"\n                    });\n                }\n            }\n        };\n    }\n};\n/lib/rules/no-new-object.js\u0006 /**\n * @fileoverview A rule to disallow calls to the Object constructor\n * @author Matt DuVall <http://www.mattduvall.com/>\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow `Object` constructors\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-new-object\"\n        },\n\n        schema: [],\n\n        messages: {\n            preferLiteral: \"The object literal notation {} is preferrable.\"\n        }\n    },\n\n    create(context) {\n        return {\n            NewExpression(node) {\n                const variable = astUtils.getVariableByName(\n                    context.getScope(),\n                    node.callee.name\n                );\n\n                if (variable && variable.identifiers.length > 0) {\n                    return;\n                }\n\n                if (node.callee.name === \"Object\") {\n                    context.report({\n                        node,\n                        messageId: \"preferLiteral\"\n                    });\n                }\n            }\n        };\n    }\n};\n/lib/rules/no-octal-escape.js\u0005/**\n * @fileoverview Rule to flag octal escape sequences in string literals.\n * @author Ian Christian Myers\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow octal escape sequences in string literals\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-octal-escape\"\n        },\n\n        schema: [],\n\n        messages: {\n            octalEscapeSequence: \"Don't use octal: '\\\\{{sequence}}'. Use '\\\\u....' instead.\"\n        }\n    },\n\n    create(context) {\n\n        return {\n\n            Literal(node) {\n                if (typeof node.value !== \"string\") {\n                    return;\n                }\n\n                // \\0 represents a valid NULL character if it isn't followed by a digit.\n                const match = node.raw.match(\n                    /^(?:[^\\\\]|\\\\.)*?\\\\([0-3][0-7]{1,2}|[4-7][0-7]|0(?=[89])|[1-7])/su\n                );\n\n                if (match) {\n                    context.report({\n                        node,\n                        messageId: \"octalEscapeSequence\",\n                        data: { sequence: match[1] }\n                    });\n                }\n            }\n\n        };\n\n    }\n};\n/lib/rules/no-param-reassign.js!s/**\n * @fileoverview Disallow reassignment of function parameters.\n * @author Nat Burns\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\nconst stopNodePattern = /(?:Statement|Declaration|Function(?:Expression)?|Program)$/u;\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow reassigning `function` parameters\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-param-reassign\"\n        },\n\n        schema: [\n            {\n                oneOf: [\n                    {\n                        type: \"object\",\n                        properties: {\n                            props: {\n                                enum: [false]\n                            }\n                        },\n                        additionalProperties: false\n                    },\n                    {\n                        type: \"object\",\n                        properties: {\n                            props: {\n                                enum: [true]\n                            },\n                            ignorePropertyModificationsFor: {\n                                type: \"array\",\n                                items: {\n                                    type: \"string\"\n                                },\n                                uniqueItems: true\n                            },\n                            ignorePropertyModificationsForRegex: {\n                                type: \"array\",\n                                items: {\n                                    type: \"string\"\n                                },\n                                uniqueItems: true\n                            }\n                        },\n                        additionalProperties: false\n                    }\n                ]\n            }\n        ],\n\n        messages: {\n            assignmentToFunctionParam: \"Assignment to function parameter '{{name}}'.\",\n            assignmentToFunctionParamProp: \"Assignment to property of function parameter '{{name}}'.\"\n        }\n    },\n\n    create(context) {\n        const props = context.options[0] && context.options[0].props;\n        const ignoredPropertyAssignmentsFor = context.options[0] && context.options[0].ignorePropertyModificationsFor || [];\n        const ignoredPropertyAssignmentsForRegex = context.options[0] && context.options[0].ignorePropertyModificationsForRegex || [];\n\n        /**\n         * Checks whether or not the reference modifies properties of its variable.\n         * @param {Reference} reference A reference to check.\n         * @returns {boolean} Whether or not the reference modifies properties of its variable.\n         */\n        function isModifyingProp(reference) {\n            let node = reference.identifier;\n            let parent = node.parent;\n\n            while (parent && (!stopNodePattern.test(parent.type) ||\n                    parent.type === \"ForInStatement\" || parent.type === \"ForOfStatement\")) {\n                switch (parent.type) {\n\n                    // e.g. foo.a = 0;\n                    case \"AssignmentExpression\":\n                        return parent.left === node;\n\n                    // e.g. ++foo.a;\n                    case \"UpdateExpression\":\n                        return true;\n\n                    // e.g. delete foo.a;\n                    case \"UnaryExpression\":\n                        if (parent.operator === \"delete\") {\n                            return true;\n                        }\n                        break;\n\n                    // e.g. for (foo.a in b) {}\n                    case \"ForInStatement\":\n                    case \"ForOfStatement\":\n                        if (parent.left === node) {\n                            return true;\n                        }\n\n                        // this is a stop node for parent.right and parent.body\n                        return false;\n\n                    // EXCLUDES: e.g. cache.get(foo.a).b = 0;\n                    case \"CallExpression\":\n                        if (parent.callee !== node) {\n                            return false;\n                        }\n                        break;\n\n                    // EXCLUDES: e.g. cache[foo.a] = 0;\n                    case \"MemberExpression\":\n                        if (parent.property === node) {\n                            return false;\n                        }\n                        break;\n\n                    // EXCLUDES: e.g. ({ [foo]: a }) = bar;\n                    case \"Property\":\n                        if (parent.key === node) {\n                            return false;\n                        }\n\n                        break;\n\n                    // EXCLUDES: e.g. (foo ? a : b).c = bar;\n                    case \"ConditionalExpression\":\n                        if (parent.test === node) {\n                            return false;\n                        }\n\n                        break;\n\n                    // no default\n                }\n\n                node = parent;\n                parent = node.parent;\n            }\n\n            return false;\n        }\n\n        /**\n         * Tests that an identifier name matches any of the ignored property assignments.\n         * First we test strings in ignoredPropertyAssignmentsFor.\n         * Then we instantiate and test RegExp objects from ignoredPropertyAssignmentsForRegex strings.\n         * @param {string} identifierName A string that describes the name of an identifier to\n         * ignore property assignments for.\n         * @returns {boolean} Whether the string matches an ignored property assignment regular expression or not.\n         */\n        function isIgnoredPropertyAssignment(identifierName) {\n            return ignoredPropertyAssignmentsFor.includes(identifierName) ||\n                ignoredPropertyAssignmentsForRegex.some(ignored => new RegExp(ignored, \"u\").test(identifierName));\n        }\n\n        /**\n         * Reports a reference if is non initializer and writable.\n         * @param {Reference} reference A reference to check.\n         * @param {int} index The index of the reference in the references.\n         * @param {Reference[]} references The array that the reference belongs to.\n         * @returns {void}\n         */\n        function checkReference(reference, index, references) {\n            const identifier = reference.identifier;\n\n            if (identifier &&\n                !reference.init &&\n\n                /*\n                 * Destructuring assignments can have multiple default value,\n                 * so possibly there are multiple writeable references for the same identifier.\n                 */\n                (index === 0 || references[index - 1].identifier !== identifier)\n            ) {\n                if (reference.isWrite()) {\n                    context.report({\n                        node: identifier,\n                        messageId: \"assignmentToFunctionParam\",\n                        data: { name: identifier.name }\n                    });\n                } else if (props && isModifyingProp(reference) && !isIgnoredPropertyAssignment(identifier.name)) {\n                    context.report({\n                        node: identifier,\n                        messageId: \"assignmentToFunctionParamProp\",\n                        data: { name: identifier.name }\n                    });\n                }\n            }\n        }\n\n        /**\n         * Finds and reports references that are non initializer and writable.\n         * @param {Variable} variable A variable to check.\n         * @returns {void}\n         */\n        function checkVariable(variable) {\n            if (variable.defs[0].type === \"Parameter\") {\n                variable.references.forEach(checkReference);\n            }\n        }\n\n        /**\n         * Checks parameters of a given function node.\n         * @param {ASTNode} node A function node to check.\n         * @returns {void}\n         */\n        function checkForFunction(node) {\n            context.getDeclaredVariables(node).forEach(checkVariable);\n        }\n\n        return {\n\n            // `:exit` is needed for the `node.parent` property of identifier nodes.\n            \"FunctionDeclaration:exit\": checkForFunction,\n            \"FunctionExpression:exit\": checkForFunction,\n            \"ArrowFunctionExpression:exit\": checkForFunction\n        };\n\n    }\n};\n\"/lib/cli-engine/formatters/unix.js\u0005/**\n * @fileoverview unix-style formatter.\n * @author oshi-shinobu\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Helper Functions\n//------------------------------------------------------------------------------\n\n/**\n * Returns a canonical error level string based upon the error message passed in.\n * @param {Object} message Individual error message provided by eslint\n * @returns {string} Error level string\n */\nfunction getMessageType(message) {\n    if (message.fatal || message.severity === 2) {\n        return \"Error\";\n    }\n    return \"Warning\";\n\n}\n\n\n//------------------------------------------------------------------------------\n// Public Interface\n//------------------------------------------------------------------------------\n\nmodule.exports = function(results) {\n\n    let output = \"\",\n        total = 0;\n\n    results.forEach(result => {\n\n        const messages = result.messages;\n\n        total += messages.length;\n\n        messages.forEach(message => {\n\n            output += `${result.filePath}:`;\n            output += `${message.line || 0}:`;\n            output += `${message.column || 0}:`;\n            output += ` ${message.message} `;\n            output += `[${getMessageType(message)}${message.ruleId ? `/${message.ruleId}` : \"\"}]`;\n            output += \"\\n\";\n\n        });\n\n    });\n\n    if (total > 0) {\n        output += `\\n${total} problem${total !== 1 ? \"s\" : \"\"}`;\n    }\n\n    return output;\n};\n/lib/rules/no-control-regex.js\fo/**\n * @fileoverview Rule to forbid control characters from regular expressions.\n * @author Nicholas C. Zakas\n */\n\n\"use strict\";\n\nconst RegExpValidator = require(\"regexpp\").RegExpValidator;\nconst collector = new (class {\n    constructor() {\n        this._source = \"\";\n        this._controlChars = [];\n        this._validator = new RegExpValidator(this);\n    }\n\n    onPatternEnter() {\n        this._controlChars = [];\n    }\n\n    onCharacter(start, end, cp) {\n        if (cp >= 0x00 &&\n            cp <= 0x1F &&\n            (\n                this._source.codePointAt(start) === cp ||\n                this._source.slice(start, end).startsWith(\"\\\\x\") ||\n                this._source.slice(start, end).startsWith(\"\\\\u\")\n            )\n        ) {\n            this._controlChars.push(`\\\\x${`0${cp.toString(16)}`.slice(-2)}`);\n        }\n    }\n\n    collectControlChars(regexpStr) {\n        try {\n            this._source = regexpStr;\n            this._validator.validatePattern(regexpStr); // Call onCharacter hook\n        } catch {\n\n            // Ignore syntax errors in RegExp.\n        }\n        return this._controlChars;\n    }\n})();\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"problem\",\n\n        docs: {\n            description: \"disallow control characters in regular expressions\",\n            recommended: true,\n            url: \"https://eslint.org/docs/rules/no-control-regex\"\n        },\n\n        schema: [],\n\n        messages: {\n            unexpected: \"Unexpected control character(s) in regular expression: {{controlChars}}.\"\n        }\n    },\n\n    create(context) {\n\n        /**\n         * Get the regex expression\n         * @param {ASTNode} node node to evaluate\n         * @returns {RegExp|null} Regex if found else null\n         * @private\n         */\n        function getRegExpPattern(node) {\n            if (node.regex) {\n                return node.regex.pattern;\n            }\n            if (typeof node.value === \"string\" &&\n                (node.parent.type === \"NewExpression\" || node.parent.type === \"CallExpression\") &&\n                node.parent.callee.type === \"Identifier\" &&\n                node.parent.callee.name === \"RegExp\" &&\n                node.parent.arguments[0] === node\n            ) {\n                return node.value;\n            }\n\n            return null;\n        }\n\n        return {\n            Literal(node) {\n                const pattern = getRegExpPattern(node);\n\n                if (pattern) {\n                    const controlCharacters = collector.collectControlChars(pattern);\n\n                    if (controlCharacters.length > 0) {\n                        context.report({\n                            node,\n                            messageId: \"unexpected\",\n                            data: {\n                                controlChars: controlCharacters.join(\", \")\n                            }\n                        });\n                    }\n                }\n            }\n        };\n\n    }\n};\n)/lib/rules/lines-between-class-members.js\u001fF/**\n * @fileoverview Rule to check empty newline between class members\n * @author 薛定谔的猫<hh_2013@foxmail.com>\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"layout\",\n\n        docs: {\n            description: \"require or disallow an empty line between class members\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/lines-between-class-members\"\n        },\n\n        fixable: \"whitespace\",\n\n        schema: [\n            {\n                enum: [\"always\", \"never\"]\n            },\n            {\n                type: \"object\",\n                properties: {\n                    exceptAfterSingleLine: {\n                        type: \"boolean\",\n                        default: false\n                    }\n                },\n                additionalProperties: false\n            }\n        ],\n        messages: {\n            never: \"Unexpected blank line between class members.\",\n            always: \"Expected blank line between class members.\"\n        }\n    },\n\n    create(context) {\n\n        const options = [];\n\n        options[0] = context.options[0] || \"always\";\n        options[1] = context.options[1] || { exceptAfterSingleLine: false };\n\n        const sourceCode = context.getSourceCode();\n\n        /**\n         * Gets a pair of tokens that should be used to check lines between two class member nodes.\n         *\n         * In most cases, this returns the very last token of the current node and\n         * the very first token of the next node.\n         * For example:\n         *\n         *     class C {\n         *         x = 1;   // curLast: `;` nextFirst: `in`\n         *         in = 2\n         *     }\n         *\n         * There is only one exception. If the given node ends with a semicolon, and it looks like\n         * a semicolon-less style's semicolon - one that is not on the same line as the preceding\n         * token, but is on the line where the next class member starts - this returns the preceding\n         * token and the semicolon as boundary tokens.\n         * For example:\n         *\n         *     class C {\n         *         x = 1    // curLast: `1` nextFirst: `;`\n         *         ;in = 2\n         *     }\n         * When determining the desired layout of the code, we should treat this semicolon as\n         * a part of the next class member node instead of the one it technically belongs to.\n         * @param {ASTNode} curNode Current class member node.\n         * @param {ASTNode} nextNode Next class member node.\n         * @returns {Token} The actual last token of `node`.\n         * @private\n         */\n        function getBoundaryTokens(curNode, nextNode) {\n            const lastToken = sourceCode.getLastToken(curNode);\n            const prevToken = sourceCode.getTokenBefore(lastToken);\n            const nextToken = sourceCode.getFirstToken(nextNode); // skip possible lone `;` between nodes\n\n            const isSemicolonLessStyle = (\n                astUtils.isSemicolonToken(lastToken) &&\n                !astUtils.isTokenOnSameLine(prevToken, lastToken) &&\n                astUtils.isTokenOnSameLine(lastToken, nextToken)\n            );\n\n            return isSemicolonLessStyle\n                ? { curLast: prevToken, nextFirst: lastToken }\n                : { curLast: lastToken, nextFirst: nextToken };\n        }\n\n        /**\n         * Return the last token among the consecutive tokens that have no exceed max line difference in between, before the first token in the next member.\n         * @param {Token} prevLastToken The last token in the previous member node.\n         * @param {Token} nextFirstToken The first token in the next member node.\n         * @param {number} maxLine The maximum number of allowed line difference between consecutive tokens.\n         * @returns {Token} The last token among the consecutive tokens.\n         */\n        function findLastConsecutiveTokenAfter(prevLastToken, nextFirstToken, maxLine) {\n            const after = sourceCode.getTokenAfter(prevLastToken, { includeComments: true });\n\n            if (after !== nextFirstToken && after.loc.start.line - prevLastToken.loc.end.line <= maxLine) {\n                return findLastConsecutiveTokenAfter(after, nextFirstToken, maxLine);\n            }\n            return prevLastToken;\n        }\n\n        /**\n         * Return the first token among the consecutive tokens that have no exceed max line difference in between, after the last token in the previous member.\n         * @param {Token} nextFirstToken The first token in the next member node.\n         * @param {Token} prevLastToken The last token in the previous member node.\n         * @param {number} maxLine The maximum number of allowed line difference between consecutive tokens.\n         * @returns {Token} The first token among the consecutive tokens.\n         */\n        function findFirstConsecutiveTokenBefore(nextFirstToken, prevLastToken, maxLine) {\n            const before = sourceCode.getTokenBefore(nextFirstToken, { includeComments: true });\n\n            if (before !== prevLastToken && nextFirstToken.loc.start.line - before.loc.end.line <= maxLine) {\n                return findFirstConsecutiveTokenBefore(before, prevLastToken, maxLine);\n            }\n            return nextFirstToken;\n        }\n\n        /**\n         * Checks if there is a token or comment between two tokens.\n         * @param {Token} before The token before.\n         * @param {Token} after The token after.\n         * @returns {boolean} True if there is a token or comment between two tokens.\n         */\n        function hasTokenOrCommentBetween(before, after) {\n            return sourceCode.getTokensBetween(before, after, { includeComments: true }).length !== 0;\n        }\n\n        return {\n            ClassBody(node) {\n                const body = node.body;\n\n                for (let i = 0; i < body.length - 1; i++) {\n                    const curFirst = sourceCode.getFirstToken(body[i]);\n                    const { curLast, nextFirst } = getBoundaryTokens(body[i], body[i + 1]);\n                    const isMulti = !astUtils.isTokenOnSameLine(curFirst, curLast);\n                    const skip = !isMulti && options[1].exceptAfterSingleLine;\n                    const beforePadding = findLastConsecutiveTokenAfter(curLast, nextFirst, 1);\n                    const afterPadding = findFirstConsecutiveTokenBefore(nextFirst, curLast, 1);\n                    const isPadded = afterPadding.loc.start.line - beforePadding.loc.end.line > 1;\n                    const hasTokenInPadding = hasTokenOrCommentBetween(beforePadding, afterPadding);\n                    const curLineLastToken = findLastConsecutiveTokenAfter(curLast, nextFirst, 0);\n\n                    if ((options[0] === \"always\" && !skip && !isPadded) ||\n                        (options[0] === \"never\" && isPadded)) {\n                        context.report({\n                            node: body[i + 1],\n                            messageId: isPadded ? \"never\" : \"always\",\n                            fix(fixer) {\n                                if (hasTokenInPadding) {\n                                    return null;\n                                }\n                                return isPadded\n                                    ? fixer.replaceTextRange([beforePadding.range[1], afterPadding.range[0]], \"\\n\")\n                                    : fixer.insertTextAfter(curLineLastToken, \"\\n\");\n                            }\n                        });\n                    }\n                }\n            }\n        };\n    }\n};\n)/lib/rules/utils/lazy-loading-rule-map.js\u000b/**\n * @fileoverview `Map` to load rules lazily.\n * @author Toru Nagashima <https://github.com/mysticatea>\n */\n\"use strict\";\n\nconst debug = require(\"debug\")(\"eslint:rules\");\n\n/** @typedef {import(\"./types\").Rule} Rule */\n\n/**\n * The `Map` object that loads each rule when it's accessed.\n * @example\n * const rules = new LazyLoadingRuleMap([\n *     [\"eqeqeq\", () => require(\"eqeqeq\")],\n *     [\"semi\", () => require(\"semi\")],\n *     [\"no-unused-vars\", () => require(\"no-unused-vars\")]\n * ]);\n *\n * rules.get(\"semi\"); // call `() => require(\"semi\")` here.\n *\n * @extends {Map<string, () => Rule>}\n */\nclass LazyLoadingRuleMap extends Map {\n\n    /**\n     * Initialize this map.\n     * @param {Array<[string, function(): Rule]>} loaders The rule loaders.\n     */\n    constructor(loaders) {\n        let remaining = loaders.length;\n\n        super(\n            debug.enabled\n                ? loaders.map(([ruleId, load]) => {\n                    let cache = null;\n\n                    return [\n                        ruleId,\n                        () => {\n                            if (!cache) {\n                                debug(\"Loading rule %o (remaining=%d)\", ruleId, --remaining);\n                                cache = load();\n                            }\n                            return cache;\n                        }\n                    ];\n                })\n                : loaders\n        );\n\n        // `super(...iterable)` uses `this.set()`, so disable it here.\n        Object.defineProperty(LazyLoadingRuleMap.prototype, \"set\", {\n            configurable: true,\n            value: void 0\n        });\n    }\n\n    /**\n     * Get a rule.\n     * Each rule will be loaded on the first access.\n     * @param {string} ruleId The rule ID to get.\n     * @returns {Rule|undefined} The rule.\n     */\n    get(ruleId) {\n        const load = super.get(ruleId);\n\n        return load && load();\n    }\n\n    /**\n     * Iterate rules.\n     * @returns {IterableIterator<Rule>} Rules.\n     */\n    *values() {\n        for (const load of super.values()) {\n            yield load();\n        }\n    }\n\n    /**\n     * Iterate rules.\n     * @returns {IterableIterator<[string, Rule]>} Rules.\n     */\n    *entries() {\n        for (const [ruleId, load] of super.entries()) {\n            yield [ruleId, load()];\n        }\n    }\n\n    /**\n     * Call a function with each rule.\n     * @param {Function} callbackFn The callback function.\n     * @param {any} [thisArg] The object to pass to `this` of the callback function.\n     * @returns {void}\n     */\n    forEach(callbackFn, thisArg) {\n        for (const [ruleId, load] of super.entries()) {\n            callbackFn.call(thisArg, load(), ruleId, this);\n        }\n    }\n}\n\n// Forbid mutation.\nObject.defineProperties(LazyLoadingRuleMap.prototype, {\n    clear: { configurable: true, value: void 0 },\n    delete: { configurable: true, value: void 0 },\n    [Symbol.iterator]: {\n        configurable: true,\n        writable: true,\n        value: LazyLoadingRuleMap.prototype.entries\n    }\n});\n\nmodule.exports = { LazyLoadingRuleMap };\n$/lib/rules/function-paren-newline.js-/**\n * @fileoverview enforce consistent line breaks inside function parentheses\n * @author Teddy Katz\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"layout\",\n\n        docs: {\n            description: \"enforce consistent line breaks inside function parentheses\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/function-paren-newline\"\n        },\n\n        fixable: \"whitespace\",\n\n        schema: [\n            {\n                oneOf: [\n                    {\n                        enum: [\"always\", \"never\", \"consistent\", \"multiline\", \"multiline-arguments\"]\n                    },\n                    {\n                        type: \"object\",\n                        properties: {\n                            minItems: {\n                                type: \"integer\",\n                                minimum: 0\n                            }\n                        },\n                        additionalProperties: false\n                    }\n                ]\n            }\n        ],\n\n        messages: {\n            expectedBefore: \"Expected newline before ')'.\",\n            expectedAfter: \"Expected newline after '('.\",\n            expectedBetween: \"Expected newline between arguments/params.\",\n            unexpectedBefore: \"Unexpected newline before ')'.\",\n            unexpectedAfter: \"Unexpected newline after '('.\"\n        }\n    },\n\n    create(context) {\n        const sourceCode = context.getSourceCode();\n        const rawOption = context.options[0] || \"multiline\";\n        const multilineOption = rawOption === \"multiline\";\n        const multilineArgumentsOption = rawOption === \"multiline-arguments\";\n        const consistentOption = rawOption === \"consistent\";\n        let minItems;\n\n        if (typeof rawOption === \"object\") {\n            minItems = rawOption.minItems;\n        } else if (rawOption === \"always\") {\n            minItems = 0;\n        } else if (rawOption === \"never\") {\n            minItems = Infinity;\n        } else {\n            minItems = null;\n        }\n\n        //----------------------------------------------------------------------\n        // Helpers\n        //----------------------------------------------------------------------\n\n        /**\n         * Determines whether there should be newlines inside function parens\n         * @param {ASTNode[]} elements The arguments or parameters in the list\n         * @param {boolean} hasLeftNewline `true` if the left paren has a newline in the current code.\n         * @returns {boolean} `true` if there should be newlines inside the function parens\n         */\n        function shouldHaveNewlines(elements, hasLeftNewline) {\n            if (multilineArgumentsOption && elements.length === 1) {\n                return hasLeftNewline;\n            }\n            if (multilineOption || multilineArgumentsOption) {\n                return elements.some((element, index) => index !== elements.length - 1 && element.loc.end.line !== elements[index + 1].loc.start.line);\n            }\n            if (consistentOption) {\n                return hasLeftNewline;\n            }\n            return elements.length >= minItems;\n        }\n\n        /**\n         * Validates parens\n         * @param {Object} parens An object with keys `leftParen` for the left paren token, and `rightParen` for the right paren token\n         * @param {ASTNode[]} elements The arguments or parameters in the list\n         * @returns {void}\n         */\n        function validateParens(parens, elements) {\n            const leftParen = parens.leftParen;\n            const rightParen = parens.rightParen;\n            const tokenAfterLeftParen = sourceCode.getTokenAfter(leftParen);\n            const tokenBeforeRightParen = sourceCode.getTokenBefore(rightParen);\n            const hasLeftNewline = !astUtils.isTokenOnSameLine(leftParen, tokenAfterLeftParen);\n            const hasRightNewline = !astUtils.isTokenOnSameLine(tokenBeforeRightParen, rightParen);\n            const needsNewlines = shouldHaveNewlines(elements, hasLeftNewline);\n\n            if (hasLeftNewline && !needsNewlines) {\n                context.report({\n                    node: leftParen,\n                    messageId: \"unexpectedAfter\",\n                    fix(fixer) {\n                        return sourceCode.getText().slice(leftParen.range[1], tokenAfterLeftParen.range[0]).trim()\n\n                            // If there is a comment between the ( and the first element, don't do a fix.\n                            ? null\n                            : fixer.removeRange([leftParen.range[1], tokenAfterLeftParen.range[0]]);\n                    }\n                });\n            } else if (!hasLeftNewline && needsNewlines) {\n                context.report({\n                    node: leftParen,\n                    messageId: \"expectedAfter\",\n                    fix: fixer => fixer.insertTextAfter(leftParen, \"\\n\")\n                });\n            }\n\n            if (hasRightNewline && !needsNewlines) {\n                context.report({\n                    node: rightParen,\n                    messageId: \"unexpectedBefore\",\n                    fix(fixer) {\n                        return sourceCode.getText().slice(tokenBeforeRightParen.range[1], rightParen.range[0]).trim()\n\n                            // If there is a comment between the last element and the ), don't do a fix.\n                            ? null\n                            : fixer.removeRange([tokenBeforeRightParen.range[1], rightParen.range[0]]);\n                    }\n                });\n            } else if (!hasRightNewline && needsNewlines) {\n                context.report({\n                    node: rightParen,\n                    messageId: \"expectedBefore\",\n                    fix: fixer => fixer.insertTextBefore(rightParen, \"\\n\")\n                });\n            }\n        }\n\n        /**\n         * Validates a list of arguments or parameters\n         * @param {Object} parens An object with keys `leftParen` for the left paren token, and `rightParen` for the right paren token\n         * @param {ASTNode[]} elements The arguments or parameters in the list\n         * @returns {void}\n         */\n        function validateArguments(parens, elements) {\n            const leftParen = parens.leftParen;\n            const tokenAfterLeftParen = sourceCode.getTokenAfter(leftParen);\n            const hasLeftNewline = !astUtils.isTokenOnSameLine(leftParen, tokenAfterLeftParen);\n            const needsNewlines = shouldHaveNewlines(elements, hasLeftNewline);\n\n            for (let i = 0; i <= elements.length - 2; i++) {\n                const currentElement = elements[i];\n                const nextElement = elements[i + 1];\n                const hasNewLine = currentElement.loc.end.line !== nextElement.loc.start.line;\n\n                if (!hasNewLine && needsNewlines) {\n                    context.report({\n                        node: currentElement,\n                        messageId: \"expectedBetween\",\n                        fix: fixer => fixer.insertTextBefore(nextElement, \"\\n\")\n                    });\n                }\n            }\n        }\n\n        /**\n         * Gets the left paren and right paren tokens of a node.\n         * @param {ASTNode} node The node with parens\n         * @throws {TypeError} Unexecpted node type.\n         * @returns {Object} An object with keys `leftParen` for the left paren token, and `rightParen` for the right paren token.\n         * Can also return `null` if an expression has no parens (e.g. a NewExpression with no arguments, or an ArrowFunctionExpression\n         * with a single parameter)\n         */\n        function getParenTokens(node) {\n            switch (node.type) {\n                case \"NewExpression\":\n                    if (!node.arguments.length && !(\n                        astUtils.isOpeningParenToken(sourceCode.getLastToken(node, { skip: 1 })) &&\n                        astUtils.isClosingParenToken(sourceCode.getLastToken(node))\n                    )) {\n\n                        // If the NewExpression does not have parens (e.g. `new Foo`), return null.\n                        return null;\n                    }\n\n                    // falls through\n\n                case \"CallExpression\":\n                    return {\n                        leftParen: sourceCode.getTokenAfter(node.callee, astUtils.isOpeningParenToken),\n                        rightParen: sourceCode.getLastToken(node)\n                    };\n\n                case \"FunctionDeclaration\":\n                case \"FunctionExpression\": {\n                    const leftParen = sourceCode.getFirstToken(node, astUtils.isOpeningParenToken);\n                    const rightParen = node.params.length\n                        ? sourceCode.getTokenAfter(node.params[node.params.length - 1], astUtils.isClosingParenToken)\n                        : sourceCode.getTokenAfter(leftParen);\n\n                    return { leftParen, rightParen };\n                }\n\n                case \"ArrowFunctionExpression\": {\n                    const firstToken = sourceCode.getFirstToken(node, { skip: (node.async ? 1 : 0) });\n\n                    if (!astUtils.isOpeningParenToken(firstToken)) {\n\n                        // If the ArrowFunctionExpression has a single param without parens, return null.\n                        return null;\n                    }\n\n                    const rightParen = node.params.length\n                        ? sourceCode.getTokenAfter(node.params[node.params.length - 1], astUtils.isClosingParenToken)\n                        : sourceCode.getTokenAfter(firstToken);\n\n                    return {\n                        leftParen: firstToken,\n                        rightParen\n                    };\n                }\n\n                case \"ImportExpression\": {\n                    const leftParen = sourceCode.getFirstToken(node, 1);\n                    const rightParen = sourceCode.getLastToken(node);\n\n                    return { leftParen, rightParen };\n                }\n\n                default:\n                    throw new TypeError(`unexpected node with type ${node.type}`);\n            }\n        }\n\n        //----------------------------------------------------------------------\n        // Public\n        //----------------------------------------------------------------------\n\n        return {\n            [[\n                \"ArrowFunctionExpression\",\n                \"CallExpression\",\n                \"FunctionDeclaration\",\n                \"FunctionExpression\",\n                \"ImportExpression\",\n                \"NewExpression\"\n            ]](node) {\n                const parens = getParenTokens(node);\n                let params;\n\n                if (node.type === \"ImportExpression\") {\n                    params = [node.source];\n                } else if (astUtils.isFunction(node)) {\n                    params = node.params;\n                } else {\n                    params = node.arguments;\n                }\n\n                if (parens) {\n                    validateParens(parens, params);\n\n                    if (multilineArgumentsOption) {\n                        validateArguments(parens, params);\n                    }\n                }\n            }\n        };\n    }\n};\n2/lib/rules/utils/unicode/is-combining-character.js\u0001/**\n * @author Toru Nagashima <https://github.com/mysticatea>\n */\n\"use strict\";\n\n/**\n * Check whether a given character is a combining mark or not.\n * @param {number} codePoint The character code to check.\n * @returns {boolean} `true` if the character belongs to the category, any of `Mc`, `Me`, and `Mn`.\n */\nmodule.exports = function isCombiningCharacter(codePoint) {\n    return /^[\\p{Mc}\\p{Me}\\p{Mn}]$/u.test(String.fromCodePoint(codePoint));\n};\n/lib/rules/getter-return.js\u00176/**\n * @fileoverview Enforces that a return statement is present in property getters.\n * @author Aladdin-ADD(hh_2013@foxmail.com)\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\nconst TARGET_NODE_TYPE = /^(?:Arrow)?FunctionExpression$/u;\n\n/**\n * Checks a given code path segment is reachable.\n * @param {CodePathSegment} segment A segment to check.\n * @returns {boolean} `true` if the segment is reachable.\n */\nfunction isReachable(segment) {\n    return segment.reachable;\n}\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"problem\",\n\n        docs: {\n            description: \"enforce `return` statements in getters\",\n            recommended: true,\n            url: \"https://eslint.org/docs/rules/getter-return\"\n        },\n\n        fixable: null,\n\n        schema: [\n            {\n                type: \"object\",\n                properties: {\n                    allowImplicit: {\n                        type: \"boolean\",\n                        default: false\n                    }\n                },\n                additionalProperties: false\n            }\n        ],\n\n        messages: {\n            expected: \"Expected to return a value in {{name}}.\",\n            expectedAlways: \"Expected {{name}} to always return a value.\"\n        }\n    },\n\n    create(context) {\n\n        const options = context.options[0] || { allowImplicit: false };\n        const sourceCode = context.getSourceCode();\n\n        let funcInfo = {\n            upper: null,\n            codePath: null,\n            hasReturn: false,\n            shouldCheck: false,\n            node: null\n        };\n\n        /**\n         * Checks whether or not the last code path segment is reachable.\n         * Then reports this function if the segment is reachable.\n         *\n         * If the last code path segment is reachable, there are paths which are not\n         * returned or thrown.\n         * @param {ASTNode} node A node to check.\n         * @returns {void}\n         */\n        function checkLastSegment(node) {\n            if (funcInfo.shouldCheck &&\n                funcInfo.codePath.currentSegments.some(isReachable)\n            ) {\n                context.report({\n                    node,\n                    loc: astUtils.getFunctionHeadLoc(node, sourceCode),\n                    messageId: funcInfo.hasReturn ? \"expectedAlways\" : \"expected\",\n                    data: {\n                        name: astUtils.getFunctionNameWithKind(funcInfo.node)\n                    }\n                });\n            }\n        }\n\n        /**\n         * Checks whether a node means a getter function.\n         * @param {ASTNode} node a node to check.\n         * @returns {boolean} if node means a getter, return true; else return false.\n         */\n        function isGetter(node) {\n            const parent = node.parent;\n\n            if (TARGET_NODE_TYPE.test(node.type) && node.body.type === \"BlockStatement\") {\n                if (parent.kind === \"get\") {\n                    return true;\n                }\n                if (parent.type === \"Property\" && astUtils.getStaticPropertyName(parent) === \"get\" && parent.parent.type === \"ObjectExpression\") {\n\n                    // Object.defineProperty()\n                    if (parent.parent.parent.type === \"CallExpression\" &&\n                        astUtils.getStaticPropertyName(parent.parent.parent.callee) === \"defineProperty\") {\n                        return true;\n                    }\n\n                    // Object.defineProperties()\n                    if (parent.parent.parent.type === \"Property\" &&\n                        parent.parent.parent.parent.type === \"ObjectExpression\" &&\n                        parent.parent.parent.parent.parent.type === \"CallExpression\" &&\n                        astUtils.getStaticPropertyName(parent.parent.parent.parent.parent.callee) === \"defineProperties\") {\n                        return true;\n                    }\n                }\n            }\n            return false;\n        }\n        return {\n\n            // Stacks this function's information.\n            onCodePathStart(codePath, node) {\n                funcInfo = {\n                    upper: funcInfo,\n                    codePath,\n                    hasReturn: false,\n                    shouldCheck: isGetter(node),\n                    node\n                };\n            },\n\n            // Pops this function's information.\n            onCodePathEnd() {\n                funcInfo = funcInfo.upper;\n            },\n\n            // Checks the return statement is valid.\n            ReturnStatement(node) {\n                if (funcInfo.shouldCheck) {\n                    funcInfo.hasReturn = true;\n\n                    // if allowImplicit: false, should also check node.argument\n                    if (!options.allowImplicit && !node.argument) {\n                        context.report({\n                            node,\n                            messageId: \"expected\",\n                            data: {\n                                name: astUtils.getFunctionNameWithKind(funcInfo.node)\n                            }\n                        });\n                    }\n                }\n            },\n\n            // Reports a given function if the last path is reachable.\n            \"FunctionExpression:exit\": checkLastSegment,\n            \"ArrowFunctionExpression:exit\": checkLastSegment\n        };\n    }\n};\n/lib/rules/no-negated-in-lhs.js\u0004/**\n * @fileoverview A rule to disallow negated left operands of the `in` operator\n * @author Michael Ficarra\n * @deprecated in ESLint v3.3.0\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"problem\",\n\n        docs: {\n            description: \"disallow negating the left operand in `in` expressions\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-negated-in-lhs\"\n        },\n\n        replacedBy: [\"no-unsafe-negation\"],\n\n        deprecated: true,\n        schema: [],\n\n        messages: {\n            negatedLHS: \"The 'in' expression's left operand is negated.\"\n        }\n    },\n\n    create(context) {\n\n        return {\n\n            BinaryExpression(node) {\n                if (node.operator === \"in\" && node.left.type === \"UnaryExpression\" && node.left.operator === \"!\") {\n                    context.report({ node, messageId: \"negatedLHS\" });\n                }\n            }\n        };\n\n    }\n};\n(/lib/rules/no-promise-executor-return.js\u000e,/**\n * @fileoverview Rule to disallow returning values from Promise executor functions\n * @author Milos Djermanovic\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst { findVariable } = require(\"eslint-utils\");\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\nconst functionTypesToCheck = new Set([\"ArrowFunctionExpression\", \"FunctionExpression\"]);\n\n/**\n * Determines whether the given identifier node is a reference to a global variable.\n * @param {ASTNode} node `Identifier` node to check.\n * @param {Scope} scope Scope to which the node belongs.\n * @returns {boolean} True if the identifier is a reference to a global variable.\n */\nfunction isGlobalReference(node, scope) {\n    const variable = findVariable(scope, node);\n\n    return variable !== null && variable.scope.type === \"global\" && variable.defs.length === 0;\n}\n\n/**\n * Finds function's outer scope.\n * @param {Scope} scope Function's own scope.\n * @returns {Scope} Function's outer scope.\n */\nfunction getOuterScope(scope) {\n    const upper = scope.upper;\n\n    if (upper.type === \"function-expression-name\") {\n        return upper.upper;\n    }\n    return upper;\n}\n\n/**\n * Determines whether the given function node is used as a Promise executor.\n * @param {ASTNode} node The node to check.\n * @param {Scope} scope Function's own scope.\n * @returns {boolean} `true` if the node is a Promise executor.\n */\nfunction isPromiseExecutor(node, scope) {\n    const parent = node.parent;\n\n    return parent.type === \"NewExpression\" &&\n        parent.arguments[0] === node &&\n        parent.callee.type === \"Identifier\" &&\n        parent.callee.name === \"Promise\" &&\n        isGlobalReference(parent.callee, getOuterScope(scope));\n}\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"problem\",\n\n        docs: {\n            description: \"disallow returning values from Promise executor functions\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-promise-executor-return\"\n        },\n\n        schema: [],\n\n        messages: {\n            returnsValue: \"Return values from promise executor functions cannot be read.\"\n        }\n    },\n\n    create(context) {\n\n        let funcInfo = null;\n\n        /**\n         * Reports the given node.\n         * @param {ASTNode} node Node to report.\n         * @returns {void}\n         */\n        function report(node) {\n            context.report({ node, messageId: \"returnsValue\" });\n        }\n\n        return {\n\n            onCodePathStart(_, node) {\n                funcInfo = {\n                    upper: funcInfo,\n                    shouldCheck: functionTypesToCheck.has(node.type) && isPromiseExecutor(node, context.getScope())\n                };\n\n                if (funcInfo.shouldCheck && node.type === \"ArrowFunctionExpression\" && node.expression) {\n                    report(node.body);\n                }\n            },\n\n            onCodePathEnd() {\n                funcInfo = funcInfo.upper;\n            },\n\n            ReturnStatement(node) {\n                if (funcInfo.shouldCheck && node.argument) {\n                    report(node);\n                }\n            }\n        };\n    }\n};\n\"/lib/rules/prefer-object-spread.js)/**\n * @fileoverview Prefers object spread property over Object.assign\n * @author Sharmila Jesupaul\n * See LICENSE file in root directory for full license.\n */\n\n\"use strict\";\n\nconst { CALL, ReferenceTracker } = require(\"eslint-utils\");\nconst {\n    isCommaToken,\n    isOpeningParenToken,\n    isClosingParenToken,\n    isParenthesised\n} = require(\"./utils/ast-utils\");\n\nconst ANY_SPACE = /\\s/u;\n\n/**\n * Helper that checks if the Object.assign call has array spread\n * @param {ASTNode} node The node that the rule warns on\n * @returns {boolean} - Returns true if the Object.assign call has array spread\n */\nfunction hasArraySpread(node) {\n    return node.arguments.some(arg => arg.type === \"SpreadElement\");\n}\n\n/**\n * Determines whether the given node is an accessor property (getter/setter).\n * @param {ASTNode} node Node to check.\n * @returns {boolean} `true` if the node is a getter or a setter.\n */\nfunction isAccessorProperty(node) {\n    return node.type === \"Property\" &&\n        (node.kind === \"get\" || node.kind === \"set\");\n}\n\n/**\n * Determines whether the given object expression node has accessor properties (getters/setters).\n * @param {ASTNode} node `ObjectExpression` node to check.\n * @returns {boolean} `true` if the node has at least one getter/setter.\n */\nfunction hasAccessors(node) {\n    return node.properties.some(isAccessorProperty);\n}\n\n/**\n * Determines whether the given call expression node has object expression arguments with accessor properties (getters/setters).\n * @param {ASTNode} node `CallExpression` node to check.\n * @returns {boolean} `true` if the node has at least one argument that is an object expression with at least one getter/setter.\n */\nfunction hasArgumentsWithAccessors(node) {\n    return node.arguments\n        .filter(arg => arg.type === \"ObjectExpression\")\n        .some(hasAccessors);\n}\n\n/**\n * Helper that checks if the node needs parentheses to be valid JS.\n * The default is to wrap the node in parentheses to avoid parsing errors.\n * @param {ASTNode} node The node that the rule warns on\n * @param {Object} sourceCode in context sourcecode object\n * @returns {boolean} - Returns true if the node needs parentheses\n */\nfunction needsParens(node, sourceCode) {\n    const parent = node.parent;\n\n    switch (parent.type) {\n        case \"VariableDeclarator\":\n        case \"ArrayExpression\":\n        case \"ReturnStatement\":\n        case \"CallExpression\":\n        case \"Property\":\n            return false;\n        case \"AssignmentExpression\":\n            return parent.left === node && !isParenthesised(sourceCode, node);\n        default:\n            return !isParenthesised(sourceCode, node);\n    }\n}\n\n/**\n * Determines if an argument needs parentheses. The default is to not add parens.\n * @param {ASTNode} node The node to be checked.\n * @param {Object} sourceCode in context sourcecode object\n * @returns {boolean} True if the node needs parentheses\n */\nfunction argNeedsParens(node, sourceCode) {\n    switch (node.type) {\n        case \"AssignmentExpression\":\n        case \"ArrowFunctionExpression\":\n        case \"ConditionalExpression\":\n            return !isParenthesised(sourceCode, node);\n        default:\n            return false;\n    }\n}\n\n/**\n * Get the parenthesis tokens of a given ObjectExpression node.\n * This includes the braces of the object literal and enclosing parentheses.\n * @param {ASTNode} node The node to get.\n * @param {Token} leftArgumentListParen The opening paren token of the argument list.\n * @param {SourceCode} sourceCode The source code object to get tokens.\n * @returns {Token[]} The parenthesis tokens of the node. This is sorted by the location.\n */\nfunction getParenTokens(node, leftArgumentListParen, sourceCode) {\n    const parens = [sourceCode.getFirstToken(node), sourceCode.getLastToken(node)];\n    let leftNext = sourceCode.getTokenBefore(node);\n    let rightNext = sourceCode.getTokenAfter(node);\n\n    // Note: don't include the parens of the argument list.\n    while (\n        leftNext &&\n        rightNext &&\n        leftNext.range[0] > leftArgumentListParen.range[0] &&\n        isOpeningParenToken(leftNext) &&\n        isClosingParenToken(rightNext)\n    ) {\n        parens.push(leftNext, rightNext);\n        leftNext = sourceCode.getTokenBefore(leftNext);\n        rightNext = sourceCode.getTokenAfter(rightNext);\n    }\n\n    return parens.sort((a, b) => a.range[0] - b.range[0]);\n}\n\n/**\n * Get the range of a given token and around whitespaces.\n * @param {Token} token The token to get range.\n * @param {SourceCode} sourceCode The source code object to get tokens.\n * @returns {number} The end of the range of the token and around whitespaces.\n */\nfunction getStartWithSpaces(token, sourceCode) {\n    const text = sourceCode.text;\n    let start = token.range[0];\n\n    // If the previous token is a line comment then skip this step to avoid commenting this token out.\n    {\n        const prevToken = sourceCode.getTokenBefore(token, { includeComments: true });\n\n        if (prevToken && prevToken.type === \"Line\") {\n            return start;\n        }\n    }\n\n    // Detect spaces before the token.\n    while (ANY_SPACE.test(text[start - 1] || \"\")) {\n        start -= 1;\n    }\n\n    return start;\n}\n\n/**\n * Get the range of a given token and around whitespaces.\n * @param {Token} token The token to get range.\n * @param {SourceCode} sourceCode The source code object to get tokens.\n * @returns {number} The start of the range of the token and around whitespaces.\n */\nfunction getEndWithSpaces(token, sourceCode) {\n    const text = sourceCode.text;\n    let end = token.range[1];\n\n    // Detect spaces after the token.\n    while (ANY_SPACE.test(text[end] || \"\")) {\n        end += 1;\n    }\n\n    return end;\n}\n\n/**\n * Autofixes the Object.assign call to use an object spread instead.\n * @param {ASTNode|null} node The node that the rule warns on, i.e. the Object.assign call\n * @param {string} sourceCode sourceCode of the Object.assign call\n * @returns {Function} autofixer - replaces the Object.assign with a spread object.\n */\nfunction defineFixer(node, sourceCode) {\n    return function *(fixer) {\n        const leftParen = sourceCode.getTokenAfter(node.callee, isOpeningParenToken);\n        const rightParen = sourceCode.getLastToken(node);\n\n        // Remove everything before the opening paren: callee `Object.assign`, type arguments, and whitespace between the callee and the paren.\n        yield fixer.removeRange([node.range[0], leftParen.range[0]]);\n\n        // Replace the parens of argument list to braces.\n        if (needsParens(node, sourceCode)) {\n            yield fixer.replaceText(leftParen, \"({\");\n            yield fixer.replaceText(rightParen, \"})\");\n        } else {\n            yield fixer.replaceText(leftParen, \"{\");\n            yield fixer.replaceText(rightParen, \"}\");\n        }\n\n        // Process arguments.\n        for (const argNode of node.arguments) {\n            const innerParens = getParenTokens(argNode, leftParen, sourceCode);\n            const left = innerParens.shift();\n            const right = innerParens.pop();\n\n            if (argNode.type === \"ObjectExpression\") {\n                const maybeTrailingComma = sourceCode.getLastToken(argNode, 1);\n                const maybeArgumentComma = sourceCode.getTokenAfter(right);\n\n                /*\n                 * Make bare this object literal.\n                 * And remove spaces inside of the braces for better formatting.\n                 */\n                for (const innerParen of innerParens) {\n                    yield fixer.remove(innerParen);\n                }\n                const leftRange = [left.range[0], getEndWithSpaces(left, sourceCode)];\n                const rightRange = [\n                    Math.max(getStartWithSpaces(right, sourceCode), leftRange[1]), // Ensure ranges don't overlap\n                    right.range[1]\n                ];\n\n                yield fixer.removeRange(leftRange);\n                yield fixer.removeRange(rightRange);\n\n                // Remove the comma of this argument if it's duplication.\n                if (\n                    (argNode.properties.length === 0 || isCommaToken(maybeTrailingComma)) &&\n                    isCommaToken(maybeArgumentComma)\n                ) {\n                    yield fixer.remove(maybeArgumentComma);\n                }\n            } else {\n\n                // Make spread.\n                if (argNeedsParens(argNode, sourceCode)) {\n                    yield fixer.insertTextBefore(left, \"...(\");\n                    yield fixer.insertTextAfter(right, \")\");\n                } else {\n                    yield fixer.insertTextBefore(left, \"...\");\n                }\n            }\n        }\n    };\n}\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description:\n                \"disallow using Object.assign with an object literal as the first argument and prefer the use of object spread instead.\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/prefer-object-spread\"\n        },\n\n        schema: [],\n        fixable: \"code\",\n\n        messages: {\n            useSpreadMessage: \"Use an object spread instead of `Object.assign` eg: `{ ...foo }`.\",\n            useLiteralMessage: \"Use an object literal instead of `Object.assign`. eg: `{ foo: bar }`.\"\n        }\n    },\n\n    create(context) {\n        const sourceCode = context.getSourceCode();\n\n        return {\n            Program() {\n                const scope = context.getScope();\n                const tracker = new ReferenceTracker(scope);\n                const trackMap = {\n                    Object: {\n                        assign: { [CALL]: true }\n                    }\n                };\n\n                // Iterate all calls of `Object.assign` (only of the global variable `Object`).\n                for (const { node } of tracker.iterateGlobalReferences(trackMap)) {\n                    if (\n                        node.arguments.length >= 1 &&\n                        node.arguments[0].type === \"ObjectExpression\" &&\n                        !hasArraySpread(node) &&\n                        !(\n                            node.arguments.length > 1 &&\n                            hasArgumentsWithAccessors(node)\n                        )\n                    ) {\n                        const messageId = node.arguments.length === 1\n                            ? \"useLiteralMessage\"\n                            : \"useSpreadMessage\";\n                        const fix = defineFixer(node, sourceCode);\n\n                        context.report({ node, messageId, fix });\n                    }\n                }\n            }\n        };\n    }\n};\n!/lib/config/flat-config-schema.js4/**\n * @fileoverview Flat config schema\n * @author Nicholas C. Zakas\n */\n\n\"use strict\";\n\n//-----------------------------------------------------------------------------\n// Type Definitions\n//-----------------------------------------------------------------------------\n\n/**\n * @typedef ObjectPropertySchema\n * @property {Function|string} merge The function or name of the function to call\n *      to merge multiple objects with this property.\n * @property {Function|string} validate The function or name of the function to call\n *      to validate the value of this property.\n */\n\n//-----------------------------------------------------------------------------\n// Helpers\n//-----------------------------------------------------------------------------\n\nconst ruleSeverities = new Map([\n    [0, 0], [\"off\", 0],\n    [1, 1], [\"warn\", 1],\n    [2, 2], [\"error\", 2]\n]);\n\nconst globalVariablesValues = new Set([\n    true, \"true\", \"writable\", \"writeable\",\n    false, \"false\", \"readonly\", \"readable\", null,\n    \"off\"\n]);\n\n/**\n * Check if a value is a non-null object.\n * @param {any} value The value to check.\n * @returns {boolean} `true` if the value is a non-null object.\n */\nfunction isNonNullObject(value) {\n    return typeof value === \"object\" && value !== null;\n}\n\n/**\n * Check if a value is undefined.\n * @param {any} value The value to check.\n * @returns {boolean} `true` if the value is undefined.\n */\nfunction isUndefined(value) {\n    return typeof value === \"undefined\";\n}\n\n/**\n * Deeply merges two objects.\n * @param {Object} first The base object.\n * @param {Object} second The overrides object.\n * @returns {Object} An object with properties from both first and second.\n */\nfunction deepMerge(first = {}, second = {}) {\n\n    /*\n     * If the second value is an array, just return it. We don't merge\n     * arrays because order matters and we can't know the correct order.\n     */\n    if (Array.isArray(second)) {\n        return second;\n    }\n\n    /*\n     * First create a result object where properties from the second object\n     * overwrite properties from the first. This sets up a baseline to use\n     * later rather than needing to inspect and change every property\n     * individually.\n     */\n    const result = {\n        ...first,\n        ...second\n    };\n\n    for (const key of Object.keys(second)) {\n\n        // avoid hairy edge case\n        if (key === \"__proto__\") {\n            continue;\n        }\n\n        const firstValue = first[key];\n        const secondValue = second[key];\n\n        if (isNonNullObject(firstValue)) {\n            result[key] = deepMerge(firstValue, secondValue);\n        } else if (isUndefined(firstValue)) {\n            if (isNonNullObject(secondValue)) {\n                result[key] = deepMerge(\n                    Array.isArray(secondValue) ? [] : {},\n                    secondValue\n                );\n            } else if (!isUndefined(secondValue)) {\n                result[key] = secondValue;\n            }\n        }\n    }\n\n    return result;\n\n}\n\n/**\n * Normalizes the rule options config for a given rule by ensuring that\n * it is an array and that the first item is 0, 1, or 2.\n * @param {Array|string|number} ruleOptions The rule options config.\n * @returns {Array} An array of rule options.\n */\nfunction normalizeRuleOptions(ruleOptions) {\n\n    const finalOptions = Array.isArray(ruleOptions)\n        ? ruleOptions.slice(0)\n        : [ruleOptions];\n\n    finalOptions[0] = ruleSeverities.get(finalOptions[0]);\n    return finalOptions;\n}\n\n//-----------------------------------------------------------------------------\n// Assertions\n//-----------------------------------------------------------------------------\n\n/**\n * Validates that a value is a valid rule options entry.\n * @param {any} value The value to check.\n * @returns {void}\n * @throws {TypeError} If the value isn't a valid rule options.\n */\nfunction assertIsRuleOptions(value) {\n\n    if (typeof value !== \"string\" && typeof value !== \"number\" && !Array.isArray(value)) {\n        throw new TypeError(\"Expected a string, number, or array.\");\n    }\n}\n\n/**\n * Validates that a value is valid rule severity.\n * @param {any} value The value to check.\n * @returns {void}\n * @throws {TypeError} If the value isn't a valid rule severity.\n */\nfunction assertIsRuleSeverity(value) {\n    const severity = typeof value === \"string\"\n        ? ruleSeverities.get(value.toLowerCase())\n        : ruleSeverities.get(value);\n\n    if (typeof severity === \"undefined\") {\n        throw new TypeError(\"Expected severity of \\\"off\\\", 0, \\\"warn\\\", 1, \\\"error\\\", or 2.\");\n    }\n}\n\n/**\n * Validates that a given string is the form pluginName/objectName.\n * @param {string} value The string to check.\n * @returns {void}\n * @throws {TypeError} If the string isn't in the correct format.\n */\nfunction assertIsPluginMemberName(value) {\n    if (!/[@a-z0-9-_$]+(?:\\/(?:[a-z0-9-_$]+))+$/iu.test(value)) {\n        throw new TypeError(`Expected string in the form \"pluginName/objectName\" but found \"${value}\".`);\n    }\n}\n\n/**\n * Validates that a value is an object.\n * @param {any} value The value to check.\n * @returns {void}\n * @throws {TypeError} If the value isn't an object.\n */\nfunction assertIsObject(value) {\n    if (!isNonNullObject(value)) {\n        throw new TypeError(\"Expected an object.\");\n    }\n}\n\n/**\n * Validates that a value is an object or a string.\n * @param {any} value The value to check.\n * @returns {void}\n * @throws {TypeError} If the value isn't an object or a string.\n */\nfunction assertIsObjectOrString(value) {\n    if ((!value || typeof value !== \"object\") && typeof value !== \"string\") {\n        throw new TypeError(\"Expected an object or string.\");\n    }\n}\n\n//-----------------------------------------------------------------------------\n// Low-Level Schemas\n//-----------------------------------------------------------------------------\n\n/** @type {ObjectPropertySchema} */\nconst booleanSchema = {\n    merge: \"replace\",\n    validate: \"boolean\"\n};\n\n/** @type {ObjectPropertySchema} */\nconst deepObjectAssignSchema = {\n    merge(first = {}, second = {}) {\n        return deepMerge(first, second);\n    },\n    validate: \"object\"\n};\n\n//-----------------------------------------------------------------------------\n// High-Level Schemas\n//-----------------------------------------------------------------------------\n\n/** @type {ObjectPropertySchema} */\nconst globalsSchema = {\n    merge: \"assign\",\n    validate(value) {\n\n        assertIsObject(value);\n\n        for (const key of Object.keys(value)) {\n\n            // avoid hairy edge case\n            if (key === \"__proto__\") {\n                continue;\n            }\n\n            if (key !== key.trim()) {\n                throw new TypeError(`Global \"${key}\" has leading or trailing whitespace.`);\n            }\n\n            if (!globalVariablesValues.has(value[key])) {\n                throw new TypeError(`Key \"${key}\": Expected \"readonly\", \"writable\", or \"off\".`);\n            }\n        }\n    }\n};\n\n/** @type {ObjectPropertySchema} */\nconst parserSchema = {\n    merge: \"replace\",\n    validate(value) {\n        assertIsObjectOrString(value);\n\n        if (typeof value === \"object\" && typeof value.parse !== \"function\" && typeof value.parseForESLint !== \"function\") {\n            throw new TypeError(\"Expected object to have a parse() or parseForESLint() method.\");\n        }\n\n        if (typeof value === \"string\") {\n            assertIsPluginMemberName(value);\n        }\n    }\n};\n\n/** @type {ObjectPropertySchema} */\nconst pluginsSchema = {\n    merge(first = {}, second = {}) {\n        const keys = new Set([...Object.keys(first), ...Object.keys(second)]);\n        const result = {};\n\n        // manually validate that plugins are not redefined\n        for (const key of keys) {\n\n            // avoid hairy edge case\n            if (key === \"__proto__\") {\n                continue;\n            }\n\n            if (key in first && key in second && first[key] !== second[key]) {\n                throw new TypeError(`Cannot redefine plugin \"${key}\".`);\n            }\n\n            result[key] = second[key] || first[key];\n        }\n\n        return result;\n    },\n    validate(value) {\n\n        // first check the value to be sure it's an object\n        if (value === null || typeof value !== \"object\") {\n            throw new TypeError(\"Expected an object.\");\n        }\n\n        // second check the keys to make sure they are objects\n        for (const key of Object.keys(value)) {\n\n            // avoid hairy edge case\n            if (key === \"__proto__\") {\n                continue;\n            }\n\n            if (value[key] === null || typeof value[key] !== \"object\") {\n                throw new TypeError(`Key \"${key}\": Expected an object.`);\n            }\n        }\n    }\n};\n\n/** @type {ObjectPropertySchema} */\nconst processorSchema = {\n    merge: \"replace\",\n    validate(value) {\n        if (typeof value === \"string\") {\n            assertIsPluginMemberName(value);\n        } else if (value && typeof value === \"object\") {\n            if (typeof value.preprocess !== \"function\" || typeof value.postprocess !== \"function\") {\n                throw new TypeError(\"Object must have a preprocess() and a postprocess() method.\");\n            }\n        } else {\n            throw new TypeError(\"Expected an object or a string.\");\n        }\n    }\n};\n\n/** @type {ObjectPropertySchema} */\nconst rulesSchema = {\n    merge(first = {}, second = {}) {\n\n        const result = {\n            ...first,\n            ...second\n        };\n\n        for (const ruleId of Object.keys(result)) {\n\n            // avoid hairy edge case\n            if (ruleId === \"__proto__\") {\n\n                /* eslint-disable-next-line no-proto -- Though deprecated, may still be present */\n                delete result.__proto__;\n                continue;\n            }\n\n            result[ruleId] = normalizeRuleOptions(result[ruleId]);\n\n            /*\n             * If either rule config is missing, then the correct\n             * config is already present and we just need to normalize\n             * the severity.\n             */\n            if (!(ruleId in first) || !(ruleId in second)) {\n                continue;\n            }\n\n            const firstRuleOptions = normalizeRuleOptions(first[ruleId]);\n            const secondRuleOptions = normalizeRuleOptions(second[ruleId]);\n\n            /*\n             * If the second rule config only has a severity (length of 1),\n             * then use that severity and keep the rest of the options from\n             * the first rule config.\n             */\n            if (secondRuleOptions.length === 1) {\n                result[ruleId] = [secondRuleOptions[0], ...firstRuleOptions.slice(1)];\n                continue;\n            }\n\n            /*\n             * In any other situation, then the second rule config takes\n             * precedence. That means the value at `result[ruleId]` is\n             * already correct and no further work is necessary.\n             */\n        }\n\n        return result;\n    },\n\n    validate(value) {\n        assertIsObject(value);\n\n        let lastRuleId;\n\n        // Performance: One try-catch has less overhead than one per loop iteration\n        try {\n\n            /*\n             * We are not checking the rule schema here because there is no\n             * guarantee that the rule definition is present at this point. Instead\n             * we wait and check the rule schema during the finalization step\n             * of calculating a config.\n             */\n            for (const ruleId of Object.keys(value)) {\n\n                // avoid hairy edge case\n                if (ruleId === \"__proto__\") {\n                    continue;\n                }\n\n                lastRuleId = ruleId;\n\n                const ruleOptions = value[ruleId];\n\n                assertIsRuleOptions(ruleOptions);\n\n                if (Array.isArray(ruleOptions)) {\n                    assertIsRuleSeverity(ruleOptions[0]);\n                } else {\n                    assertIsRuleSeverity(ruleOptions);\n                }\n            }\n        } catch (error) {\n            error.message = `Key \"${lastRuleId}\": ${error.message}`;\n            throw error;\n        }\n    }\n};\n\n/** @type {ObjectPropertySchema} */\nconst ecmaVersionSchema = {\n    merge: \"replace\",\n    validate(value) {\n        if (typeof value === \"number\" || value === \"latest\") {\n            return;\n        }\n\n        throw new TypeError(\"Expected a number or \\\"latest\\\".\");\n    }\n};\n\n/** @type {ObjectPropertySchema} */\nconst sourceTypeSchema = {\n    merge: \"replace\",\n    validate(value) {\n        if (typeof value !== \"string\" || !/^(?:script|module|commonjs)$/u.test(value)) {\n            throw new TypeError(\"Expected \\\"script\\\", \\\"module\\\", or \\\"commonjs\\\".\");\n        }\n    }\n};\n\n//-----------------------------------------------------------------------------\n// Full schema\n//-----------------------------------------------------------------------------\n\nexports.flatConfigSchema = {\n    settings: deepObjectAssignSchema,\n    linterOptions: {\n        schema: {\n            noInlineConfig: booleanSchema,\n            reportUnusedDisableDirectives: booleanSchema\n        }\n    },\n    languageOptions: {\n        schema: {\n            ecmaVersion: ecmaVersionSchema,\n            sourceType: sourceTypeSchema,\n            globals: globalsSchema,\n            parser: parserSchema,\n            parserOptions: deepObjectAssignSchema\n        }\n    },\n    processor: processorSchema,\n    plugins: pluginsSchema,\n    rules: rulesSchema\n};\n/lib/shared/string-utils.js\u0001/**\n * @fileoverview Utilities to operate on strings.\n * @author Stephen Wade\n */\n\n\"use strict\";\n\n/**\n * Converts the first letter of a string to uppercase.\n * @param {string} string The string to operate on\n * @returns {string} The converted string\n */\nfunction upperCaseFirst(string) {\n    if (string.length <= 1) {\n        return string.toUpperCase();\n    }\n    return string[0].toUpperCase() + string.slice(1);\n}\n\nmodule.exports = {\n    upperCaseFirst\n};\n /messages/failed-to-read-json.jsġ\"use strict\";\n\nmodule.exports = function(it) {\n    const { path, message } = it;\n\n    return `\nFailed to read JSON file at ${path}:\n\n${message}\n`.trimLeft();\n};\n/lib/rules/key-spacing.jsg?/**\n * @fileoverview Rule to specify spacing of object literal keys and values\n * @author Brandon Mills\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\n/**\n * Checks whether a string contains a line terminator as defined in\n * http://www.ecma-international.org/ecma-262/5.1/#sec-7.3\n * @param {string} str String to test.\n * @returns {boolean} True if str contains a line terminator.\n */\nfunction containsLineTerminator(str) {\n    return astUtils.LINEBREAK_MATCHER.test(str);\n}\n\n/**\n * Gets the last element of an array.\n * @param {Array} arr An array.\n * @returns {any} Last element of arr.\n */\nfunction last(arr) {\n    return arr[arr.length - 1];\n}\n\n/**\n * Checks whether a node is contained on a single line.\n * @param {ASTNode} node AST Node being evaluated.\n * @returns {boolean} True if the node is a single line.\n */\nfunction isSingleLine(node) {\n    return (node.loc.end.line === node.loc.start.line);\n}\n\n/**\n * Checks whether the properties on a single line.\n * @param {ASTNode[]} properties List of Property AST nodes.\n * @returns {boolean} True if all properties is on a single line.\n */\nfunction isSingleLineProperties(properties) {\n    const [firstProp] = properties,\n        lastProp = last(properties);\n\n    return firstProp.loc.start.line === lastProp.loc.end.line;\n}\n\n/**\n * Initializes a single option property from the configuration with defaults for undefined values\n * @param {Object} toOptions Object to be initialized\n * @param {Object} fromOptions Object to be initialized from\n * @returns {Object} The object with correctly initialized options and values\n */\nfunction initOptionProperty(toOptions, fromOptions) {\n    toOptions.mode = fromOptions.mode || \"strict\";\n\n    // Set value of beforeColon\n    if (typeof fromOptions.beforeColon !== \"undefined\") {\n        toOptions.beforeColon = +fromOptions.beforeColon;\n    } else {\n        toOptions.beforeColon = 0;\n    }\n\n    // Set value of afterColon\n    if (typeof fromOptions.afterColon !== \"undefined\") {\n        toOptions.afterColon = +fromOptions.afterColon;\n    } else {\n        toOptions.afterColon = 1;\n    }\n\n    // Set align if exists\n    if (typeof fromOptions.align !== \"undefined\") {\n        if (typeof fromOptions.align === \"object\") {\n            toOptions.align = fromOptions.align;\n        } else { // \"string\"\n            toOptions.align = {\n                on: fromOptions.align,\n                mode: toOptions.mode,\n                beforeColon: toOptions.beforeColon,\n                afterColon: toOptions.afterColon\n            };\n        }\n    }\n\n    return toOptions;\n}\n\n/**\n * Initializes all the option values (singleLine, multiLine and align) from the configuration with defaults for undefined values\n * @param {Object} toOptions Object to be initialized\n * @param {Object} fromOptions Object to be initialized from\n * @returns {Object} The object with correctly initialized options and values\n */\nfunction initOptions(toOptions, fromOptions) {\n    if (typeof fromOptions.align === \"object\") {\n\n        // Initialize the alignment configuration\n        toOptions.align = initOptionProperty({}, fromOptions.align);\n        toOptions.align.on = fromOptions.align.on || \"colon\";\n        toOptions.align.mode = fromOptions.align.mode || \"strict\";\n\n        toOptions.multiLine = initOptionProperty({}, (fromOptions.multiLine || fromOptions));\n        toOptions.singleLine = initOptionProperty({}, (fromOptions.singleLine || fromOptions));\n\n    } else { // string or undefined\n        toOptions.multiLine = initOptionProperty({}, (fromOptions.multiLine || fromOptions));\n        toOptions.singleLine = initOptionProperty({}, (fromOptions.singleLine || fromOptions));\n\n        // If alignment options are defined in multiLine, pull them out into the general align configuration\n        if (toOptions.multiLine.align) {\n            toOptions.align = {\n                on: toOptions.multiLine.align.on,\n                mode: toOptions.multiLine.align.mode || toOptions.multiLine.mode,\n                beforeColon: toOptions.multiLine.align.beforeColon,\n                afterColon: toOptions.multiLine.align.afterColon\n            };\n        }\n    }\n\n    return toOptions;\n}\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"layout\",\n\n        docs: {\n            description: \"enforce consistent spacing between keys and values in object literal properties\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/key-spacing\"\n        },\n\n        fixable: \"whitespace\",\n\n        schema: [{\n            anyOf: [\n                {\n                    type: \"object\",\n                    properties: {\n                        align: {\n                            anyOf: [\n                                {\n                                    enum: [\"colon\", \"value\"]\n                                },\n                                {\n                                    type: \"object\",\n                                    properties: {\n                                        mode: {\n                                            enum: [\"strict\", \"minimum\"]\n                                        },\n                                        on: {\n                                            enum: [\"colon\", \"value\"]\n                                        },\n                                        beforeColon: {\n                                            type: \"boolean\"\n                                        },\n                                        afterColon: {\n                                            type: \"boolean\"\n                                        }\n                                    },\n                                    additionalProperties: false\n                                }\n                            ]\n                        },\n                        mode: {\n                            enum: [\"strict\", \"minimum\"]\n                        },\n                        beforeColon: {\n                            type: \"boolean\"\n                        },\n                        afterColon: {\n                            type: \"boolean\"\n                        }\n                    },\n                    additionalProperties: false\n                },\n                {\n                    type: \"object\",\n                    properties: {\n                        singleLine: {\n                            type: \"object\",\n                            properties: {\n                                mode: {\n                                    enum: [\"strict\", \"minimum\"]\n                                },\n                                beforeColon: {\n                                    type: \"boolean\"\n                                },\n                                afterColon: {\n                                    type: \"boolean\"\n                                }\n                            },\n                            additionalProperties: false\n                        },\n                        multiLine: {\n                            type: \"object\",\n                            properties: {\n                                align: {\n                                    anyOf: [\n                                        {\n                                            enum: [\"colon\", \"value\"]\n                                        },\n                                        {\n                                            type: \"object\",\n                                            properties: {\n                                                mode: {\n                                                    enum: [\"strict\", \"minimum\"]\n                                                },\n                                                on: {\n                                                    enum: [\"colon\", \"value\"]\n                                                },\n                                                beforeColon: {\n                                                    type: \"boolean\"\n                                                },\n                                                afterColon: {\n                                                    type: \"boolean\"\n                                                }\n                                            },\n                                            additionalProperties: false\n                                        }\n                                    ]\n                                },\n                                mode: {\n                                    enum: [\"strict\", \"minimum\"]\n                                },\n                                beforeColon: {\n                                    type: \"boolean\"\n                                },\n                                afterColon: {\n                                    type: \"boolean\"\n                                }\n                            },\n                            additionalProperties: false\n                        }\n                    },\n                    additionalProperties: false\n                },\n                {\n                    type: \"object\",\n                    properties: {\n                        singleLine: {\n                            type: \"object\",\n                            properties: {\n                                mode: {\n                                    enum: [\"strict\", \"minimum\"]\n                                },\n                                beforeColon: {\n                                    type: \"boolean\"\n                                },\n                                afterColon: {\n                                    type: \"boolean\"\n                                }\n                            },\n                            additionalProperties: false\n                        },\n                        multiLine: {\n                            type: \"object\",\n                            properties: {\n                                mode: {\n                                    enum: [\"strict\", \"minimum\"]\n                                },\n                                beforeColon: {\n                                    type: \"boolean\"\n                                },\n                                afterColon: {\n                                    type: \"boolean\"\n                                }\n                            },\n                            additionalProperties: false\n                        },\n                        align: {\n                            type: \"object\",\n                            properties: {\n                                mode: {\n                                    enum: [\"strict\", \"minimum\"]\n                                },\n                                on: {\n                                    enum: [\"colon\", \"value\"]\n                                },\n                                beforeColon: {\n                                    type: \"boolean\"\n                                },\n                                afterColon: {\n                                    type: \"boolean\"\n                                }\n                            },\n                            additionalProperties: false\n                        }\n                    },\n                    additionalProperties: false\n                }\n            ]\n        }],\n        messages: {\n            extraKey: \"Extra space after {{computed}}key '{{key}}'.\",\n            extraValue: \"Extra space before value for {{computed}}key '{{key}}'.\",\n            missingKey: \"Missing space after {{computed}}key '{{key}}'.\",\n            missingValue: \"Missing space before value for {{computed}}key '{{key}}'.\"\n        }\n    },\n\n    create(context) {\n\n        /**\n         * OPTIONS\n         * \"key-spacing\": [2, {\n         *     beforeColon: false,\n         *     afterColon: true,\n         *     align: \"colon\" // Optional, or \"value\"\n         * }\n         */\n        const options = context.options[0] || {},\n            ruleOptions = initOptions({}, options),\n            multiLineOptions = ruleOptions.multiLine,\n            singleLineOptions = ruleOptions.singleLine,\n            alignmentOptions = ruleOptions.align || null;\n\n        const sourceCode = context.getSourceCode();\n\n        /**\n         * Checks whether a property is a member of the property group it follows.\n         * @param {ASTNode} lastMember The last Property known to be in the group.\n         * @param {ASTNode} candidate The next Property that might be in the group.\n         * @returns {boolean} True if the candidate property is part of the group.\n         */\n        function continuesPropertyGroup(lastMember, candidate) {\n            const groupEndLine = lastMember.loc.start.line,\n                candidateStartLine = candidate.loc.start.line;\n\n            if (candidateStartLine - groupEndLine <= 1) {\n                return true;\n            }\n\n            /*\n             * Check that the first comment is adjacent to the end of the group, the\n             * last comment is adjacent to the candidate property, and that successive\n             * comments are adjacent to each other.\n             */\n            const leadingComments = sourceCode.getCommentsBefore(candidate);\n\n            if (\n                leadingComments.length &&\n                leadingComments[0].loc.start.line - groupEndLine <= 1 &&\n                candidateStartLine - last(leadingComments).loc.end.line <= 1\n            ) {\n                for (let i = 1; i < leadingComments.length; i++) {\n                    if (leadingComments[i].loc.start.line - leadingComments[i - 1].loc.end.line > 1) {\n                        return false;\n                    }\n                }\n                return true;\n            }\n\n            return false;\n        }\n\n        /**\n         * Determines if the given property is key-value property.\n         * @param {ASTNode} property Property node to check.\n         * @returns {boolean} Whether the property is a key-value property.\n         */\n        function isKeyValueProperty(property) {\n            return !(\n                (property.method ||\n                property.shorthand ||\n                property.kind !== \"init\" || property.type !== \"Property\") // Could be \"ExperimentalSpreadProperty\" or \"SpreadElement\"\n            );\n        }\n\n        /**\n         * Starting from the given a node (a property.key node here) looks forward\n         * until it finds the last token before a colon punctuator and returns it.\n         * @param {ASTNode} node The node to start looking from.\n         * @returns {ASTNode} The last token before a colon punctuator.\n         */\n        function getLastTokenBeforeColon(node) {\n            const colonToken = sourceCode.getTokenAfter(node, astUtils.isColonToken);\n\n            return sourceCode.getTokenBefore(colonToken);\n        }\n\n        /**\n         * Starting from the given a node (a property.key node here) looks forward\n         * until it finds the colon punctuator and returns it.\n         * @param {ASTNode} node The node to start looking from.\n         * @returns {ASTNode} The colon punctuator.\n         */\n        function getNextColon(node) {\n            return sourceCode.getTokenAfter(node, astUtils.isColonToken);\n        }\n\n        /**\n         * Gets an object literal property's key as the identifier name or string value.\n         * @param {ASTNode} property Property node whose key to retrieve.\n         * @returns {string} The property's key.\n         */\n        function getKey(property) {\n            const key = property.key;\n\n            if (property.computed) {\n                return sourceCode.getText().slice(key.range[0], key.range[1]);\n            }\n            return astUtils.getStaticPropertyName(property);\n        }\n\n        /**\n         * Reports an appropriately-formatted error if spacing is incorrect on one\n         * side of the colon.\n         * @param {ASTNode} property Key-value pair in an object literal.\n         * @param {string} side Side being verified - either \"key\" or \"value\".\n         * @param {string} whitespace Actual whitespace string.\n         * @param {int} expected Expected whitespace length.\n         * @param {string} mode Value of the mode as \"strict\" or \"minimum\"\n         * @returns {void}\n         */\n        function report(property, side, whitespace, expected, mode) {\n            const diff = whitespace.length - expected;\n\n            if ((\n                diff && mode === \"strict\" ||\n                diff < 0 && mode === \"minimum\" ||\n                diff > 0 && !expected && mode === \"minimum\") &&\n                !(expected && containsLineTerminator(whitespace))\n            ) {\n                const nextColon = getNextColon(property.key),\n                    tokenBeforeColon = sourceCode.getTokenBefore(nextColon, { includeComments: true }),\n                    tokenAfterColon = sourceCode.getTokenAfter(nextColon, { includeComments: true }),\n                    isKeySide = side === \"key\",\n                    isExtra = diff > 0,\n                    diffAbs = Math.abs(diff),\n                    spaces = Array(diffAbs + 1).join(\" \");\n\n                const locStart = isKeySide ? tokenBeforeColon.loc.end : nextColon.loc.start;\n                const locEnd = isKeySide ? nextColon.loc.start : tokenAfterColon.loc.start;\n                const missingLoc = isKeySide ? tokenBeforeColon.loc : tokenAfterColon.loc;\n                const loc = isExtra ? { start: locStart, end: locEnd } : missingLoc;\n\n                let fix;\n\n                if (isExtra) {\n                    let range;\n\n                    // Remove whitespace\n                    if (isKeySide) {\n                        range = [tokenBeforeColon.range[1], tokenBeforeColon.range[1] + diffAbs];\n                    } else {\n                        range = [tokenAfterColon.range[0] - diffAbs, tokenAfterColon.range[0]];\n                    }\n                    fix = function(fixer) {\n                        return fixer.removeRange(range);\n                    };\n                } else {\n\n                    // Add whitespace\n                    if (isKeySide) {\n                        fix = function(fixer) {\n                            return fixer.insertTextAfter(tokenBeforeColon, spaces);\n                        };\n                    } else {\n                        fix = function(fixer) {\n                            return fixer.insertTextBefore(tokenAfterColon, spaces);\n                        };\n                    }\n                }\n\n                let messageId = \"\";\n\n                if (isExtra) {\n                    messageId = side === \"key\" ? \"extraKey\" : \"extraValue\";\n                } else {\n                    messageId = side === \"key\" ? \"missingKey\" : \"missingValue\";\n                }\n\n                context.report({\n                    node: property[side],\n                    loc,\n                    messageId,\n                    data: {\n                        computed: property.computed ? \"computed \" : \"\",\n                        key: getKey(property)\n                    },\n                    fix\n                });\n            }\n        }\n\n        /**\n         * Gets the number of characters in a key, including quotes around string\n         * keys and braces around computed property keys.\n         * @param {ASTNode} property Property of on object literal.\n         * @returns {int} Width of the key.\n         */\n        function getKeyWidth(property) {\n            const startToken = sourceCode.getFirstToken(property);\n            const endToken = getLastTokenBeforeColon(property.key);\n\n            return endToken.range[1] - startToken.range[0];\n        }\n\n        /**\n         * Gets the whitespace around the colon in an object literal property.\n         * @param {ASTNode} property Property node from an object literal.\n         * @returns {Object} Whitespace before and after the property's colon.\n         */\n        function getPropertyWhitespace(property) {\n            const whitespace = /(\\s*):(\\s*)/u.exec(sourceCode.getText().slice(\n                property.key.range[1], property.value.range[0]\n            ));\n\n            if (whitespace) {\n                return {\n                    beforeColon: whitespace[1],\n                    afterColon: whitespace[2]\n                };\n            }\n            return null;\n        }\n\n        /**\n         * Creates groups of properties.\n         * @param {ASTNode} node ObjectExpression node being evaluated.\n         * @returns {Array<ASTNode[]>} Groups of property AST node lists.\n         */\n        function createGroups(node) {\n            if (node.properties.length === 1) {\n                return [node.properties];\n            }\n\n            return node.properties.reduce((groups, property) => {\n                const currentGroup = last(groups),\n                    prev = last(currentGroup);\n\n                if (!prev || continuesPropertyGroup(prev, property)) {\n                    currentGroup.push(property);\n                } else {\n                    groups.push([property]);\n                }\n\n                return groups;\n            }, [\n                []\n            ]);\n        }\n\n        /**\n         * Verifies correct vertical alignment of a group of properties.\n         * @param {ASTNode[]} properties List of Property AST nodes.\n         * @returns {void}\n         */\n        function verifyGroupAlignment(properties) {\n            const length = properties.length,\n                widths = properties.map(getKeyWidth), // Width of keys, including quotes\n                align = alignmentOptions.on; // \"value\" or \"colon\"\n            let targetWidth = Math.max(...widths),\n                beforeColon, afterColon, mode;\n\n            if (alignmentOptions && length > 1) { // When aligning values within a group, use the alignment configuration.\n                beforeColon = alignmentOptions.beforeColon;\n                afterColon = alignmentOptions.afterColon;\n                mode = alignmentOptions.mode;\n            } else {\n                beforeColon = multiLineOptions.beforeColon;\n                afterColon = multiLineOptions.afterColon;\n                mode = alignmentOptions.mode;\n            }\n\n            // Conditionally include one space before or after colon\n            targetWidth += (align === \"colon\" ? beforeColon : afterColon);\n\n            for (let i = 0; i < length; i++) {\n                const property = properties[i];\n                const whitespace = getPropertyWhitespace(property);\n\n                if (whitespace) { // Object literal getters/setters lack a colon\n                    const width = widths[i];\n\n                    if (align === \"value\") {\n                        report(property, \"key\", whitespace.beforeColon, beforeColon, mode);\n                        report(property, \"value\", whitespace.afterColon, targetWidth - width, mode);\n                    } else { // align = \"colon\"\n                        report(property, \"key\", whitespace.beforeColon, targetWidth - width, mode);\n                        report(property, \"value\", whitespace.afterColon, afterColon, mode);\n                    }\n                }\n            }\n        }\n\n        /**\n         * Verifies spacing of property conforms to specified options.\n         * @param {ASTNode} node Property node being evaluated.\n         * @param {Object} lineOptions Configured singleLine or multiLine options\n         * @returns {void}\n         */\n        function verifySpacing(node, lineOptions) {\n            const actual = getPropertyWhitespace(node);\n\n            if (actual) { // Object literal getters/setters lack colons\n                report(node, \"key\", actual.beforeColon, lineOptions.beforeColon, lineOptions.mode);\n                report(node, \"value\", actual.afterColon, lineOptions.afterColon, lineOptions.mode);\n            }\n        }\n\n        /**\n         * Verifies spacing of each property in a list.\n         * @param {ASTNode[]} properties List of Property AST nodes.\n         * @param {Object} lineOptions Configured singleLine or multiLine options\n         * @returns {void}\n         */\n        function verifyListSpacing(properties, lineOptions) {\n            const length = properties.length;\n\n            for (let i = 0; i < length; i++) {\n                verifySpacing(properties[i], lineOptions);\n            }\n        }\n\n        /**\n         * Verifies vertical alignment, taking into account groups of properties.\n         * @param {ASTNode} node ObjectExpression node being evaluated.\n         * @returns {void}\n         */\n        function verifyAlignment(node) {\n            createGroups(node).forEach(group => {\n                const properties = group.filter(isKeyValueProperty);\n\n                if (properties.length > 0 && isSingleLineProperties(properties)) {\n                    verifyListSpacing(properties, multiLineOptions);\n                } else {\n                    verifyGroupAlignment(properties);\n                }\n            });\n        }\n\n        //--------------------------------------------------------------------------\n        // Public API\n        //--------------------------------------------------------------------------\n\n        if (alignmentOptions) { // Verify vertical alignment\n\n            return {\n                ObjectExpression(node) {\n                    if (isSingleLine(node)) {\n                        verifyListSpacing(node.properties.filter(isKeyValueProperty), singleLineOptions);\n                    } else {\n                        verifyAlignment(node);\n                    }\n                }\n            };\n\n        }\n\n        // Obey beforeColon and afterColon in each property as configured\n        return {\n            Property(node) {\n                verifySpacing(node, isSingleLine(node.parent) ? singleLineOptions : multiLineOptions);\n            }\n        };\n\n\n    }\n};\n$/lib/rule-tester/flat-rule-tester.jsŢI/**\n * @fileoverview Mocha/Jest test wrapper\n * @author Ilya Volodin\n */\n\"use strict\";\n\n/* eslint-env mocha -- Mocha/Jest wrapper */\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst\n    assert = require(\"assert\"),\n    util = require(\"util\"),\n    equal = require(\"fast-deep-equal\"),\n    Traverser = require(\"../shared/traverser\"),\n    { getRuleOptionsSchema } = require(\"../config/flat-config-helpers\"),\n    { Linter, SourceCodeFixer, interpolate } = require(\"../linter\");\nconst { FlatConfigArray } = require(\"../config/flat-config-array\");\nconst { defaultConfig } = require(\"../config/default-config\");\n\nconst ajv = require(\"../shared/ajv\")({ strictDefaults: true });\n\nconst parserSymbol = Symbol.for(\"eslint.RuleTester.parser\");\nconst { SourceCode } = require(\"../source-code\");\nconst { ConfigArraySymbol } = require(\"@humanwhocodes/config-array\");\n\n//------------------------------------------------------------------------------\n// Typedefs\n//------------------------------------------------------------------------------\n\n/** @typedef {import(\"../shared/types\").Parser} Parser */\n/** @typedef {import(\"../shared/types\").LanguageOptions} LanguageOptions */\n\n/* eslint-disable jsdoc/valid-types -- https://github.com/jsdoc-type-pratt-parser/jsdoc-type-pratt-parser/issues/4#issuecomment-778805577 */\n/**\n * A test case that is expected to pass lint.\n * @typedef {Object} ValidTestCase\n * @property {string} [name] Name for the test case.\n * @property {string} code Code for the test case.\n * @property {any[]} [options] Options for the test case.\n * @property {LanguageOptions} [languageOptions] The language options to use in the test case.\n * @property {{ [name: string]: any }} [settings] Settings for the test case.\n * @property {string} [filename] The fake filename for the test case. Useful for rules that make assertion about filenames.\n * @property {boolean} [only] Run only this test case or the subset of test cases with this property.\n */\n\n/**\n * A test case that is expected to fail lint.\n * @typedef {Object} InvalidTestCase\n * @property {string} [name] Name for the test case.\n * @property {string} code Code for the test case.\n * @property {number | Array<TestCaseError | string | RegExp>} errors Expected errors.\n * @property {string | null} [output] The expected code after autofixes are applied. If set to `null`, the test runner will assert that no autofix is suggested.\n * @property {any[]} [options] Options for the test case.\n * @property {{ [name: string]: any }} [settings] Settings for the test case.\n * @property {string} [filename] The fake filename for the test case. Useful for rules that make assertion about filenames.\n * @property {LanguageOptions} [languageOptions] The language options to use in the test case.\n * @property {boolean} [only] Run only this test case or the subset of test cases with this property.\n */\n\n/**\n * A description of a reported error used in a rule tester test.\n * @typedef {Object} TestCaseError\n * @property {string | RegExp} [message] Message.\n * @property {string} [messageId] Message ID.\n * @property {string} [type] The type of the reported AST node.\n * @property {{ [name: string]: string }} [data] The data used to fill the message template.\n * @property {number} [line] The 1-based line number of the reported start location.\n * @property {number} [column] The 1-based column number of the reported start location.\n * @property {number} [endLine] The 1-based line number of the reported end location.\n * @property {number} [endColumn] The 1-based column number of the reported end location.\n */\n/* eslint-enable jsdoc/valid-types -- https://github.com/jsdoc-type-pratt-parser/jsdoc-type-pratt-parser/issues/4#issuecomment-778805577 */\n\n//------------------------------------------------------------------------------\n// Private Members\n//------------------------------------------------------------------------------\n\n/*\n * testerDefaultConfig must not be modified as it allows to reset the tester to\n * the initial default configuration\n */\nconst testerDefaultConfig = { rules: {} };\n\n/*\n * RuleTester uses this config as its default. This can be overwritten via\n * setDefaultConfig().\n */\nlet sharedDefaultConfig = { rules: {} };\n\n/*\n * List every parameters possible on a test case that are not related to eslint\n * configuration\n */\nconst RuleTesterParameters = [\n    \"name\",\n    \"code\",\n    \"filename\",\n    \"options\",\n    \"errors\",\n    \"output\",\n    \"only\"\n];\n\n/*\n * All allowed property names in error objects.\n */\nconst errorObjectParameters = new Set([\n    \"message\",\n    \"messageId\",\n    \"data\",\n    \"type\",\n    \"line\",\n    \"column\",\n    \"endLine\",\n    \"endColumn\",\n    \"suggestions\"\n]);\nconst friendlyErrorObjectParameterList = `[${[...errorObjectParameters].map(key => `'${key}'`).join(\", \")}]`;\n\n/*\n * All allowed property names in suggestion objects.\n */\nconst suggestionObjectParameters = new Set([\n    \"desc\",\n    \"messageId\",\n    \"data\",\n    \"output\"\n]);\nconst friendlySuggestionObjectParameterList = `[${[...suggestionObjectParameters].map(key => `'${key}'`).join(\", \")}]`;\n\nconst hasOwnProperty = Function.call.bind(Object.hasOwnProperty);\n\n/**\n * Clones a given value deeply.\n * Note: This ignores `parent` property.\n * @param {any} x A value to clone.\n * @returns {any} A cloned value.\n */\nfunction cloneDeeplyExcludesParent(x) {\n    if (typeof x === \"object\" && x !== null) {\n        if (Array.isArray(x)) {\n            return x.map(cloneDeeplyExcludesParent);\n        }\n\n        const retv = {};\n\n        for (const key in x) {\n            if (key !== \"parent\" && hasOwnProperty(x, key)) {\n                retv[key] = cloneDeeplyExcludesParent(x[key]);\n            }\n        }\n\n        return retv;\n    }\n\n    return x;\n}\n\n/**\n * Freezes a given value deeply.\n * @param {any} x A value to freeze.\n * @returns {void}\n */\nfunction freezeDeeply(x) {\n    if (typeof x === \"object\" && x !== null) {\n        if (Array.isArray(x)) {\n            x.forEach(freezeDeeply);\n        } else {\n            for (const key in x) {\n                if (key !== \"parent\" && hasOwnProperty(x, key)) {\n                    freezeDeeply(x[key]);\n                }\n            }\n        }\n        Object.freeze(x);\n    }\n}\n\n/**\n * Replace control characters by `\\u00xx` form.\n * @param {string} text The text to sanitize.\n * @returns {string} The sanitized text.\n */\nfunction sanitize(text) {\n    if (typeof text !== \"string\") {\n        return \"\";\n    }\n    return text.replace(\n        /[\\u0000-\\u0009\\u000b-\\u001a]/gu, // eslint-disable-line no-control-regex -- Escaping controls\n        c => `\\\\u${c.codePointAt(0).toString(16).padStart(4, \"0\")}`\n    );\n}\n\n/**\n * Define `start`/`end` properties as throwing error.\n * @param {string} objName Object name used for error messages.\n * @param {ASTNode} node The node to define.\n * @returns {void}\n */\nfunction defineStartEndAsError(objName, node) {\n    Object.defineProperties(node, {\n        start: {\n            get() {\n                throw new Error(`Use ${objName}.range[0] instead of ${objName}.start`);\n            },\n            configurable: true,\n            enumerable: false\n        },\n        end: {\n            get() {\n                throw new Error(`Use ${objName}.range[1] instead of ${objName}.end`);\n            },\n            configurable: true,\n            enumerable: false\n        }\n    });\n}\n\n\n/**\n * Define `start`/`end` properties of all nodes of the given AST as throwing error.\n * @param {ASTNode} ast The root node to errorize `start`/`end` properties.\n * @param {Object} [visitorKeys] Visitor keys to be used for traversing the given ast.\n * @returns {void}\n */\nfunction defineStartEndAsErrorInTree(ast, visitorKeys) {\n    Traverser.traverse(ast, { visitorKeys, enter: defineStartEndAsError.bind(null, \"node\") });\n    ast.tokens.forEach(defineStartEndAsError.bind(null, \"token\"));\n    ast.comments.forEach(defineStartEndAsError.bind(null, \"token\"));\n}\n\n/**\n * Wraps the given parser in order to intercept and modify return values from the `parse` and `parseForESLint` methods, for test purposes.\n * In particular, to modify ast nodes, tokens and comments to throw on access to their `start` and `end` properties.\n * @param {Parser} parser Parser object.\n * @returns {Parser} Wrapped parser object.\n */\nfunction wrapParser(parser) {\n\n    if (typeof parser.parseForESLint === \"function\") {\n        return {\n            [parserSymbol]: parser,\n            parseForESLint(...args) {\n                const ret = parser.parseForESLint(...args);\n\n                defineStartEndAsErrorInTree(ret.ast, ret.visitorKeys);\n                return ret;\n            }\n        };\n    }\n\n    return {\n        [parserSymbol]: parser,\n        parse(...args) {\n            const ast = parser.parse(...args);\n\n            defineStartEndAsErrorInTree(ast);\n            return ast;\n        }\n    };\n}\n\n/**\n * Function to replace `SourceCode.prototype.getComments`.\n * @returns {void}\n * @throws {Error} Deprecation message.\n */\nfunction getCommentsDeprecation() {\n    throw new Error(\n        \"`SourceCode#getComments()` is deprecated and will be removed in a future major version. Use `getCommentsBefore()`, `getCommentsAfter()`, and `getCommentsInside()` instead.\"\n    );\n}\n\n//------------------------------------------------------------------------------\n// Public Interface\n//------------------------------------------------------------------------------\n\n// default separators for testing\nconst DESCRIBE = Symbol(\"describe\");\nconst IT = Symbol(\"it\");\nconst IT_ONLY = Symbol(\"itOnly\");\n\n/**\n * This is `it` default handler if `it` don't exist.\n * @this {Mocha}\n * @param {string} text The description of the test case.\n * @param {Function} method The logic of the test case.\n * @throws {Error} Any error upon execution of `method`.\n * @returns {any} Returned value of `method`.\n */\nfunction itDefaultHandler(text, method) {\n    try {\n        return method.call(this);\n    } catch (err) {\n        if (err instanceof assert.AssertionError) {\n            err.message += ` (${util.inspect(err.actual)} ${err.operator} ${util.inspect(err.expected)})`;\n        }\n        throw err;\n    }\n}\n\n/**\n * This is `describe` default handler if `describe` don't exist.\n * @this {Mocha}\n * @param {string} text The description of the test case.\n * @param {Function} method The logic of the test case.\n * @returns {any} Returned value of `method`.\n */\nfunction describeDefaultHandler(text, method) {\n    return method.call(this);\n}\n\n/**\n * Mocha test wrapper.\n */\nclass FlatRuleTester {\n\n    /**\n     * Creates a new instance of RuleTester.\n     * @param {Object} [testerConfig] Optional, extra configuration for the tester\n     */\n    constructor(testerConfig = {}) {\n\n        /**\n         * The configuration to use for this tester. Combination of the tester\n         * configuration and the default configuration.\n         * @type {Object}\n         */\n        this.testerConfig = [\n            sharedDefaultConfig,\n            testerConfig,\n            { rules: { \"rule-tester/validate-ast\": \"error\" } }\n        ];\n\n        this.linter = new Linter({ configType: \"flat\" });\n    }\n\n    /**\n     * Set the configuration to use for all future tests\n     * @param {Object} config the configuration to use.\n     * @throws {TypeError} If non-object config.\n     * @returns {void}\n     */\n    static setDefaultConfig(config) {\n        if (typeof config !== \"object\") {\n            throw new TypeError(\"FlatRuleTester.setDefaultConfig: config must be an object\");\n        }\n        sharedDefaultConfig = config;\n\n        // Make sure the rules object exists since it is assumed to exist later\n        sharedDefaultConfig.rules = sharedDefaultConfig.rules || {};\n    }\n\n    /**\n     * Get the current configuration used for all tests\n     * @returns {Object} the current configuration\n     */\n    static getDefaultConfig() {\n        return sharedDefaultConfig;\n    }\n\n    /**\n     * Reset the configuration to the initial configuration of the tester removing\n     * any changes made until now.\n     * @returns {void}\n     */\n    static resetDefaultConfig() {\n        sharedDefaultConfig = {\n            rules: {\n                ...testerDefaultConfig.rules\n            }\n        };\n    }\n\n\n    /*\n     * If people use `mocha test.js --watch` command, `describe` and `it` function\n     * instances are different for each execution. So `describe` and `it` should get fresh instance\n     * always.\n     */\n    static get describe() {\n        return (\n            this[DESCRIBE] ||\n            (typeof describe === \"function\" ? describe : describeDefaultHandler)\n        );\n    }\n\n    static set describe(value) {\n        this[DESCRIBE] = value;\n    }\n\n    static get it() {\n        return (\n            this[IT] ||\n            (typeof it === \"function\" ? it : itDefaultHandler)\n        );\n    }\n\n    static set it(value) {\n        this[IT] = value;\n    }\n\n    /**\n     * Adds the `only` property to a test to run it in isolation.\n     * @param {string | ValidTestCase | InvalidTestCase} item A single test to run by itself.\n     * @returns {ValidTestCase | InvalidTestCase} The test with `only` set.\n     */\n    static only(item) {\n        if (typeof item === \"string\") {\n            return { code: item, only: true };\n        }\n\n        return { ...item, only: true };\n    }\n\n    static get itOnly() {\n        if (typeof this[IT_ONLY] === \"function\") {\n            return this[IT_ONLY];\n        }\n        if (typeof this[IT] === \"function\" && typeof this[IT].only === \"function\") {\n            return Function.bind.call(this[IT].only, this[IT]);\n        }\n        if (typeof it === \"function\" && typeof it.only === \"function\") {\n            return Function.bind.call(it.only, it);\n        }\n\n        if (typeof this[DESCRIBE] === \"function\" || typeof this[IT] === \"function\") {\n            throw new Error(\n                \"Set `RuleTester.itOnly` to use `only` with a custom test framework.\\n\" +\n                \"See https://eslint.org/docs/developer-guide/nodejs-api#customizing-ruletester for more.\"\n            );\n        }\n        if (typeof it === \"function\") {\n            throw new Error(\"The current test framework does not support exclusive tests with `only`.\");\n        }\n        throw new Error(\"To use `only`, use RuleTester with a test framework that provides `it.only()` like Mocha.\");\n    }\n\n    static set itOnly(value) {\n        this[IT_ONLY] = value;\n    }\n\n\n    /**\n     * Adds a new rule test to execute.\n     * @param {string} ruleName The name of the rule to run.\n     * @param {Function} rule The rule to test.\n     * @param {{\n     *   valid: (ValidTestCase | string)[],\n     *   invalid: InvalidTestCase[]\n     * }} test The collection of tests to run.\n     * @throws {TypeError|Error} If non-object `test`, or if a required\n     * scenario of the given type is missing.\n     * @returns {void}\n     */\n    run(ruleName, rule, test) {\n\n        const testerConfig = this.testerConfig,\n            requiredScenarios = [\"valid\", \"invalid\"],\n            scenarioErrors = [],\n            linter = this.linter,\n            ruleId = `rule-to-test/${ruleName}`;\n\n        if (!test || typeof test !== \"object\") {\n            throw new TypeError(`Test Scenarios for rule ${ruleName} : Could not find test scenario object`);\n        }\n\n        requiredScenarios.forEach(scenarioType => {\n            if (!test[scenarioType]) {\n                scenarioErrors.push(`Could not find any ${scenarioType} test scenarios`);\n            }\n        });\n\n        if (scenarioErrors.length > 0) {\n            throw new Error([\n                `Test Scenarios for rule ${ruleName} is invalid:`\n            ].concat(scenarioErrors).join(\"\\n\"));\n        }\n\n        const baseConfig = {\n            plugins: {\n\n                // copy root plugin over\n                \"@\": {\n\n                    /*\n                     * Parsers are wrapped to detect more errors, so this needs\n                     * to be a new object for each call to run(), otherwise the\n                     * parsers will be wrapped multiple times.\n                     */\n                    parsers: {\n                        ...defaultConfig[0].plugins[\"@\"].parsers\n                    },\n\n                    /*\n                     * The rules key on the default plugin is a proxy to lazy-load\n                     * just the rules that are needed. So, don't create a new object\n                     * here, just use the default one to keep that performance\n                     * enhancement.\n                     */\n                    rules: defaultConfig[0].plugins[\"@\"].rules\n                },\n                \"rule-to-test\": {\n                    rules: {\n                        [ruleName]: Object.assign({}, rule, {\n\n                            // Create a wrapper rule that freezes the `context` properties.\n                            create(context) {\n                                freezeDeeply(context.options);\n                                freezeDeeply(context.settings);\n                                freezeDeeply(context.parserOptions);\n\n                                // freezeDeeply(context.languageOptions);\n\n                                return (typeof rule === \"function\" ? rule : rule.create)(context);\n                            }\n                        })\n                    }\n                }\n            },\n            languageOptions: {\n                ...defaultConfig[0].languageOptions\n            }\n        };\n\n        /**\n         * Run the rule for the given item\n         * @param {string|Object} item Item to run the rule against\n         * @throws {Error} If an invalid schema.\n         * @returns {Object} Eslint run result\n         * @private\n         */\n        function runRuleForItem(item) {\n            const configs = new FlatConfigArray(testerConfig, { baseConfig });\n\n            /*\n             * Modify the returned config so that the parser is wrapped to catch\n             * access of the start/end properties. This method is called just\n             * once per code snippet being tested, so each test case gets a clean\n             * parser.\n             */\n            configs[ConfigArraySymbol.finalizeConfig] = function(...args) {\n\n                // can't do super here :(\n                const proto = Object.getPrototypeOf(this);\n                const calculatedConfig = proto[ConfigArraySymbol.finalizeConfig].apply(this, args);\n\n                // wrap the parser to catch start/end property access\n                calculatedConfig.languageOptions.parser = wrapParser(calculatedConfig.languageOptions.parser);\n                return calculatedConfig;\n            };\n\n            let code, filename, output, beforeAST, afterAST;\n\n            if (typeof item === \"string\") {\n                code = item;\n            } else {\n                code = item.code;\n\n                /*\n                 * Assumes everything on the item is a config except for the\n                 * parameters used by this tester\n                 */\n                const itemConfig = { ...item };\n\n                for (const parameter of RuleTesterParameters) {\n                    delete itemConfig[parameter];\n                }\n\n                // wrap any parsers\n                if (itemConfig.languageOptions && itemConfig.languageOptions.parser) {\n\n                    const parser = itemConfig.languageOptions.parser;\n\n                    if (parser && typeof parser !== \"object\") {\n                        throw new Error(\"Parser must be an object with a parse() or parseForESLint() method.\");\n                    }\n\n                }\n\n                /*\n                 * Create the config object from the tester config and this item\n                 * specific configurations.\n                 */\n                configs.push(itemConfig);\n            }\n\n            if (item.filename) {\n                filename = item.filename;\n            }\n\n            let ruleConfig = 1;\n\n            if (hasOwnProperty(item, \"options\")) {\n                assert(Array.isArray(item.options), \"options must be an array\");\n                ruleConfig = [1, ...item.options];\n            }\n\n            configs.push({\n                rules: {\n                    [ruleId]: ruleConfig\n                }\n            });\n\n            const schema = getRuleOptionsSchema(rule);\n\n            /*\n             * Setup AST getters.\n             * The goal is to check whether or not AST was modified when\n             * running the rule under test.\n             */\n            configs.push({\n                plugins: {\n                    \"rule-tester\": {\n                        rules: {\n                            \"validate-ast\"() {\n                                return {\n                                    Program(node) {\n                                        beforeAST = cloneDeeplyExcludesParent(node);\n                                    },\n                                    \"Program:exit\"(node) {\n                                        afterAST = node;\n                                    }\n                                };\n                            }\n                        }\n                    }\n                }\n            });\n\n            if (schema) {\n                ajv.validateSchema(schema);\n\n                if (ajv.errors) {\n                    const errors = ajv.errors.map(error => {\n                        const field = error.dataPath[0] === \".\" ? error.dataPath.slice(1) : error.dataPath;\n\n                        return `\\t${field}: ${error.message}`;\n                    }).join(\"\\n\");\n\n                    throw new Error([`Schema for rule ${ruleName} is invalid:`, errors]);\n                }\n\n                /*\n                 * `ajv.validateSchema` checks for errors in the structure of the schema (by comparing the schema against a \"meta-schema\"),\n                 * and it reports those errors individually. However, there are other types of schema errors that only occur when compiling\n                 * the schema (e.g. using invalid defaults in a schema), and only one of these errors can be reported at a time. As a result,\n                 * the schema is compiled here separately from checking for `validateSchema` errors.\n                 */\n                try {\n                    ajv.compile(schema);\n                } catch (err) {\n                    throw new Error(`Schema for rule ${ruleName} is invalid: ${err.message}`);\n                }\n            }\n\n            // Verify the code.\n            const { getComments } = SourceCode.prototype;\n            let messages;\n\n            // check for validation errors\n            try {\n                configs.normalizeSync();\n                configs.getConfig(\"test.js\");\n            } catch (error) {\n                error.message = `ESLint configuration in rule-tester is invalid: ${error.message}`;\n                throw error;\n            }\n\n            try {\n                SourceCode.prototype.getComments = getCommentsDeprecation;\n                messages = linter.verify(code, configs, filename);\n            } finally {\n                SourceCode.prototype.getComments = getComments;\n            }\n\n            const fatalErrorMessage = messages.find(m => m.fatal);\n\n            assert(!fatalErrorMessage, `A fatal parsing error occurred: ${fatalErrorMessage && fatalErrorMessage.message}`);\n\n            // Verify if autofix makes a syntax error or not.\n            if (messages.some(m => m.fix)) {\n                output = SourceCodeFixer.applyFixes(code, messages).output;\n                const errorMessageInFix = linter.verify(output, configs, filename).find(m => m.fatal);\n\n                assert(!errorMessageInFix, [\n                    \"A fatal parsing error occurred in autofix.\",\n                    `Error: ${errorMessageInFix && errorMessageInFix.message}`,\n                    \"Autofix output:\",\n                    output\n                ].join(\"\\n\"));\n            } else {\n                output = code;\n            }\n\n            return {\n                messages,\n                output,\n                beforeAST,\n                afterAST: cloneDeeplyExcludesParent(afterAST)\n            };\n        }\n\n        /**\n         * Check if the AST was changed\n         * @param {ASTNode} beforeAST AST node before running\n         * @param {ASTNode} afterAST AST node after running\n         * @returns {void}\n         * @private\n         */\n        function assertASTDidntChange(beforeAST, afterAST) {\n            if (!equal(beforeAST, afterAST)) {\n                assert.fail(\"Rule should not modify AST.\");\n            }\n        }\n\n        /**\n         * Check if the template is valid or not\n         * all valid cases go through this\n         * @param {string|Object} item Item to run the rule against\n         * @returns {void}\n         * @private\n         */\n        function testValidTemplate(item) {\n            const code = typeof item === \"object\" ? item.code : item;\n\n            assert.ok(typeof code === \"string\", \"Test case must specify a string value for 'code'\");\n            if (item.name) {\n                assert.ok(typeof item.name === \"string\", \"Optional test case property 'name' must be a string\");\n            }\n\n            const result = runRuleForItem(item);\n            const messages = result.messages;\n\n            assert.strictEqual(messages.length, 0, util.format(\"Should have no errors but had %d: %s\",\n                messages.length,\n                util.inspect(messages)));\n\n            assertASTDidntChange(result.beforeAST, result.afterAST);\n        }\n\n        /**\n         * Asserts that the message matches its expected value. If the expected\n         * value is a regular expression, it is checked against the actual\n         * value.\n         * @param {string} actual Actual value\n         * @param {string|RegExp} expected Expected value\n         * @returns {void}\n         * @private\n         */\n        function assertMessageMatches(actual, expected) {\n            if (expected instanceof RegExp) {\n\n                // assert.js doesn't have a built-in RegExp match function\n                assert.ok(\n                    expected.test(actual),\n                    `Expected '${actual}' to match ${expected}`\n                );\n            } else {\n                assert.strictEqual(actual, expected);\n            }\n        }\n\n        /**\n         * Check if the template is invalid or not\n         * all invalid cases go through this.\n         * @param {string|Object} item Item to run the rule against\n         * @returns {void}\n         * @private\n         */\n        function testInvalidTemplate(item) {\n            assert.ok(typeof item.code === \"string\", \"Test case must specify a string value for 'code'\");\n            if (item.name) {\n                assert.ok(typeof item.name === \"string\", \"Optional test case property 'name' must be a string\");\n            }\n            assert.ok(item.errors || item.errors === 0,\n                `Did not specify errors for an invalid test of ${ruleName}`);\n\n            if (Array.isArray(item.errors) && item.errors.length === 0) {\n                assert.fail(\"Invalid cases must have at least one error\");\n            }\n\n            const ruleHasMetaMessages = hasOwnProperty(rule, \"meta\") && hasOwnProperty(rule.meta, \"messages\");\n            const friendlyIDList = ruleHasMetaMessages ? `[${Object.keys(rule.meta.messages).map(key => `'${key}'`).join(\", \")}]` : null;\n\n            const result = runRuleForItem(item);\n            const messages = result.messages;\n\n            if (typeof item.errors === \"number\") {\n\n                if (item.errors === 0) {\n                    assert.fail(\"Invalid cases must have 'error' value greater than 0\");\n                }\n\n                assert.strictEqual(messages.length, item.errors, util.format(\"Should have %d error%s but had %d: %s\",\n                    item.errors,\n                    item.errors === 1 ? \"\" : \"s\",\n                    messages.length,\n                    util.inspect(messages)));\n            } else {\n                assert.strictEqual(\n                    messages.length, item.errors.length, util.format(\n                        \"Should have %d error%s but had %d: %s\",\n                        item.errors.length,\n                        item.errors.length === 1 ? \"\" : \"s\",\n                        messages.length,\n                        util.inspect(messages)\n                    )\n                );\n\n                const hasMessageOfThisRule = messages.some(m => m.ruleId === ruleId);\n\n                for (let i = 0, l = item.errors.length; i < l; i++) {\n                    const error = item.errors[i];\n                    const message = messages[i];\n\n                    assert(hasMessageOfThisRule, \"Error rule name should be the same as the name of the rule being tested\");\n\n                    if (typeof error === \"string\" || error instanceof RegExp) {\n\n                        // Just an error message.\n                        assertMessageMatches(message.message, error);\n                    } else if (typeof error === \"object\" && error !== null) {\n\n                        /*\n                         * Error object.\n                         * This may have a message, messageId, data, node type, line, and/or\n                         * column.\n                         */\n\n                        Object.keys(error).forEach(propertyName => {\n                            assert.ok(\n                                errorObjectParameters.has(propertyName),\n                                `Invalid error property name '${propertyName}'. Expected one of ${friendlyErrorObjectParameterList}.`\n                            );\n                        });\n\n                        if (hasOwnProperty(error, \"message\")) {\n                            assert.ok(!hasOwnProperty(error, \"messageId\"), \"Error should not specify both 'message' and a 'messageId'.\");\n                            assert.ok(!hasOwnProperty(error, \"data\"), \"Error should not specify both 'data' and 'message'.\");\n                            assertMessageMatches(message.message, error.message);\n                        } else if (hasOwnProperty(error, \"messageId\")) {\n                            assert.ok(\n                                ruleHasMetaMessages,\n                                \"Error can not use 'messageId' if rule under test doesn't define 'meta.messages'.\"\n                            );\n                            if (!hasOwnProperty(rule.meta.messages, error.messageId)) {\n                                assert(false, `Invalid messageId '${error.messageId}'. Expected one of ${friendlyIDList}.`);\n                            }\n                            assert.strictEqual(\n                                message.messageId,\n                                error.messageId,\n                                `messageId '${message.messageId}' does not match expected messageId '${error.messageId}'.`\n                            );\n                            if (hasOwnProperty(error, \"data\")) {\n\n                                /*\n                                 *  if data was provided, then directly compare the returned message to a synthetic\n                                 *  interpolated message using the same message ID and data provided in the test.\n                                 *  See https://github.com/eslint/eslint/issues/9890 for context.\n                                 */\n                                const unformattedOriginalMessage = rule.meta.messages[error.messageId];\n                                const rehydratedMessage = interpolate(unformattedOriginalMessage, error.data);\n\n                                assert.strictEqual(\n                                    message.message,\n                                    rehydratedMessage,\n                                    `Hydrated message \"${rehydratedMessage}\" does not match \"${message.message}\"`\n                                );\n                            }\n                        }\n\n                        assert.ok(\n                            hasOwnProperty(error, \"data\") ? hasOwnProperty(error, \"messageId\") : true,\n                            \"Error must specify 'messageId' if 'data' is used.\"\n                        );\n\n                        if (error.type) {\n                            assert.strictEqual(message.nodeType, error.type, `Error type should be ${error.type}, found ${message.nodeType}`);\n                        }\n\n                        if (hasOwnProperty(error, \"line\")) {\n                            assert.strictEqual(message.line, error.line, `Error line should be ${error.line}`);\n                        }\n\n                        if (hasOwnProperty(error, \"column\")) {\n                            assert.strictEqual(message.column, error.column, `Error column should be ${error.column}`);\n                        }\n\n                        if (hasOwnProperty(error, \"endLine\")) {\n                            assert.strictEqual(message.endLine, error.endLine, `Error endLine should be ${error.endLine}`);\n                        }\n\n                        if (hasOwnProperty(error, \"endColumn\")) {\n                            assert.strictEqual(message.endColumn, error.endColumn, `Error endColumn should be ${error.endColumn}`);\n                        }\n\n                        if (hasOwnProperty(error, \"suggestions\")) {\n\n                            // Support asserting there are no suggestions\n                            if (!error.suggestions || (Array.isArray(error.suggestions) && error.suggestions.length === 0)) {\n                                if (Array.isArray(message.suggestions) && message.suggestions.length > 0) {\n                                    assert.fail(`Error should have no suggestions on error with message: \"${message.message}\"`);\n                                }\n                            } else {\n                                assert.strictEqual(Array.isArray(message.suggestions), true, `Error should have an array of suggestions. Instead received \"${message.suggestions}\" on error with message: \"${message.message}\"`);\n                                assert.strictEqual(message.suggestions.length, error.suggestions.length, `Error should have ${error.suggestions.length} suggestions. Instead found ${message.suggestions.length} suggestions`);\n\n                                error.suggestions.forEach((expectedSuggestion, index) => {\n                                    assert.ok(\n                                        typeof expectedSuggestion === \"object\" && expectedSuggestion !== null,\n                                        \"Test suggestion in 'suggestions' array must be an object.\"\n                                    );\n                                    Object.keys(expectedSuggestion).forEach(propertyName => {\n                                        assert.ok(\n                                            suggestionObjectParameters.has(propertyName),\n                                            `Invalid suggestion property name '${propertyName}'. Expected one of ${friendlySuggestionObjectParameterList}.`\n                                        );\n                                    });\n\n                                    const actualSuggestion = message.suggestions[index];\n                                    const suggestionPrefix = `Error Suggestion at index ${index} :`;\n\n                                    if (hasOwnProperty(expectedSuggestion, \"desc\")) {\n                                        assert.ok(\n                                            !hasOwnProperty(expectedSuggestion, \"data\"),\n                                            `${suggestionPrefix} Test should not specify both 'desc' and 'data'.`\n                                        );\n                                        assert.strictEqual(\n                                            actualSuggestion.desc,\n                                            expectedSuggestion.desc,\n                                            `${suggestionPrefix} desc should be \"${expectedSuggestion.desc}\" but got \"${actualSuggestion.desc}\" instead.`\n                                        );\n                                    }\n\n                                    if (hasOwnProperty(expectedSuggestion, \"messageId\")) {\n                                        assert.ok(\n                                            ruleHasMetaMessages,\n                                            `${suggestionPrefix} Test can not use 'messageId' if rule under test doesn't define 'meta.messages'.`\n                                        );\n                                        assert.ok(\n                                            hasOwnProperty(rule.meta.messages, expectedSuggestion.messageId),\n                                            `${suggestionPrefix} Test has invalid messageId '${expectedSuggestion.messageId}', the rule under test allows only one of ${friendlyIDList}.`\n                                        );\n                                        assert.strictEqual(\n                                            actualSuggestion.messageId,\n                                            expectedSuggestion.messageId,\n                                            `${suggestionPrefix} messageId should be '${expectedSuggestion.messageId}' but got '${actualSuggestion.messageId}' instead.`\n                                        );\n                                        if (hasOwnProperty(expectedSuggestion, \"data\")) {\n                                            const unformattedMetaMessage = rule.meta.messages[expectedSuggestion.messageId];\n                                            const rehydratedDesc = interpolate(unformattedMetaMessage, expectedSuggestion.data);\n\n                                            assert.strictEqual(\n                                                actualSuggestion.desc,\n                                                rehydratedDesc,\n                                                `${suggestionPrefix} Hydrated test desc \"${rehydratedDesc}\" does not match received desc \"${actualSuggestion.desc}\".`\n                                            );\n                                        }\n                                    } else {\n                                        assert.ok(\n                                            !hasOwnProperty(expectedSuggestion, \"data\"),\n                                            `${suggestionPrefix} Test must specify 'messageId' if 'data' is used.`\n                                        );\n                                    }\n\n                                    if (hasOwnProperty(expectedSuggestion, \"output\")) {\n                                        const codeWithAppliedSuggestion = SourceCodeFixer.applyFixes(item.code, [actualSuggestion]).output;\n\n                                        assert.strictEqual(codeWithAppliedSuggestion, expectedSuggestion.output, `Expected the applied suggestion fix to match the test suggestion output for suggestion at index: ${index} on error with message: \"${message.message}\"`);\n                                    }\n                                });\n                            }\n                        }\n                    } else {\n\n                        // Message was an unexpected type\n                        assert.fail(`Error should be a string, object, or RegExp, but found (${util.inspect(message)})`);\n                    }\n                }\n            }\n\n            if (hasOwnProperty(item, \"output\")) {\n                if (item.output === null) {\n                    assert.strictEqual(\n                        result.output,\n                        item.code,\n                        \"Expected no autofixes to be suggested\"\n                    );\n                } else {\n                    assert.strictEqual(result.output, item.output, \"Output is incorrect.\");\n                }\n            } else {\n                assert.strictEqual(\n                    result.output,\n                    item.code,\n                    \"The rule fixed the code. Please add 'output' property.\"\n                );\n            }\n\n            assertASTDidntChange(result.beforeAST, result.afterAST);\n        }\n\n        /*\n         * This creates a mocha test suite and pipes all supplied info through\n         * one of the templates above.\n         */\n        this.constructor.describe(ruleName, () => {\n            this.constructor.describe(\"valid\", () => {\n                test.valid.forEach(valid => {\n                    this.constructor[valid.only ? \"itOnly\" : \"it\"](\n                        sanitize(typeof valid === \"object\" ? valid.name || valid.code : valid),\n                        () => {\n                            testValidTemplate(valid);\n                        }\n                    );\n                });\n            });\n\n            this.constructor.describe(\"invalid\", () => {\n                test.invalid.forEach(invalid => {\n                    this.constructor[invalid.only ? \"itOnly\" : \"it\"](\n                        sanitize(invalid.name || invalid.code),\n                        () => {\n                            testInvalidTemplate(invalid);\n                        }\n                    );\n                });\n            });\n        });\n    }\n}\n\nFlatRuleTester[DESCRIBE] = FlatRuleTester[IT] = FlatRuleTester[IT_ONLY] = null;\n\nmodule.exports = FlatRuleTester;\n/lib/rules/no-invalid-regexp.js\u0013/**\n * @fileoverview Validate strings passed to the RegExp constructor\n * @author Michael Ficarra\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst RegExpValidator = require(\"regexpp\").RegExpValidator;\nconst validator = new RegExpValidator();\nconst validFlags = /[dgimsuy]/gu;\nconst undefined1 = void 0;\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"problem\",\n\n        docs: {\n            description: \"disallow invalid regular expression strings in `RegExp` constructors\",\n            recommended: true,\n            url: \"https://eslint.org/docs/rules/no-invalid-regexp\"\n        },\n\n        schema: [{\n            type: \"object\",\n            properties: {\n                allowConstructorFlags: {\n                    type: \"array\",\n                    items: {\n                        type: \"string\"\n                    }\n                }\n            },\n            additionalProperties: false\n        }],\n\n        messages: {\n            regexMessage: \"{{message}}.\"\n        }\n    },\n\n    create(context) {\n\n        const options = context.options[0];\n        let allowedFlags = null;\n\n        if (options && options.allowConstructorFlags) {\n            const temp = options.allowConstructorFlags.join(\"\").replace(validFlags, \"\");\n\n            if (temp) {\n                allowedFlags = new RegExp(`[${temp}]`, \"giu\");\n            }\n        }\n\n        /**\n         * Check if node is a string\n         * @param {ASTNode} node node to evaluate\n         * @returns {boolean} True if its a string\n         * @private\n         */\n        function isString(node) {\n            return node && node.type === \"Literal\" && typeof node.value === \"string\";\n        }\n\n        /**\n         * Gets flags of a regular expression created by the given `RegExp()` or `new RegExp()` call\n         * Examples:\n         *     new RegExp(\".\")         // => \"\"\n         *     new RegExp(\".\", \"gu\")   // => \"gu\"\n         *     new RegExp(\".\", flags)  // => null\n         * @param {ASTNode} node `CallExpression` or `NewExpression` node\n         * @returns {string|null} flags if they can be determined, `null` otherwise\n         * @private\n         */\n        function getFlags(node) {\n            if (node.arguments.length < 2) {\n                return \"\";\n            }\n\n            if (isString(node.arguments[1])) {\n                return node.arguments[1].value;\n            }\n\n            return null;\n        }\n\n        /**\n         * Check syntax error in a given pattern.\n         * @param {string} pattern The RegExp pattern to validate.\n         * @param {boolean} uFlag The Unicode flag.\n         * @returns {string|null} The syntax error.\n         */\n        function validateRegExpPattern(pattern, uFlag) {\n            try {\n                validator.validatePattern(pattern, undefined1, undefined1, uFlag);\n                return null;\n            } catch (err) {\n                return err.message;\n            }\n        }\n\n        /**\n         * Check syntax error in a given flags.\n         * @param {string} flags The RegExp flags to validate.\n         * @returns {string|null} The syntax error.\n         */\n        function validateRegExpFlags(flags) {\n            try {\n                validator.validateFlags(flags);\n                return null;\n            } catch {\n                return `Invalid flags supplied to RegExp constructor '${flags}'`;\n            }\n        }\n\n        return {\n            \"CallExpression, NewExpression\"(node) {\n                if (node.callee.type !== \"Identifier\" || node.callee.name !== \"RegExp\" || !isString(node.arguments[0])) {\n                    return;\n                }\n                const pattern = node.arguments[0].value;\n                let flags = getFlags(node);\n\n                if (flags && allowedFlags) {\n                    flags = flags.replace(allowedFlags, \"\");\n                }\n\n                const message =\n                    (\n                        flags && validateRegExpFlags(flags)\n                    ) ||\n                    (\n\n                        // If flags are unknown, report the regex only if its pattern is invalid both with and without the \"u\" flag\n                        flags === null\n                            ? validateRegExpPattern(pattern, true) && validateRegExpPattern(pattern, false)\n                            : validateRegExpPattern(pattern, flags.includes(\"u\"))\n                    );\n\n                if (message) {\n                    context.report({\n                        node,\n                        messageId: \"regexMessage\",\n                        data: { message }\n                    });\n                }\n            }\n        };\n    }\n};\n/lib/rules/block-scoped-var.js\u000e/**\n * @fileoverview Rule to check for \"block scoped\" variables by binding context\n * @author Matt DuVall <http://www.mattduvall.com>\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"enforce the use of variables within the scope they are defined\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/block-scoped-var\"\n        },\n\n        schema: [],\n\n        messages: {\n            outOfScope: \"'{{name}}' used outside of binding context.\"\n        }\n    },\n\n    create(context) {\n        let stack = [];\n\n        /**\n         * Makes a block scope.\n         * @param {ASTNode} node A node of a scope.\n         * @returns {void}\n         */\n        function enterScope(node) {\n            stack.push(node.range);\n        }\n\n        /**\n         * Pops the last block scope.\n         * @returns {void}\n         */\n        function exitScope() {\n            stack.pop();\n        }\n\n        /**\n         * Reports a given reference.\n         * @param {eslint-scope.Reference} reference A reference to report.\n         * @returns {void}\n         */\n        function report(reference) {\n            const identifier = reference.identifier;\n\n            context.report({ node: identifier, messageId: \"outOfScope\", data: { name: identifier.name } });\n        }\n\n        /**\n         * Finds and reports references which are outside of valid scopes.\n         * @param {ASTNode} node A node to get variables.\n         * @returns {void}\n         */\n        function checkForVariables(node) {\n            if (node.kind !== \"var\") {\n                return;\n            }\n\n            // Defines a predicate to check whether or not a given reference is outside of valid scope.\n            const scopeRange = stack[stack.length - 1];\n\n            /**\n             * Check if a reference is out of scope\n             * @param {ASTNode} reference node to examine\n             * @returns {boolean} True is its outside the scope\n             * @private\n             */\n            function isOutsideOfScope(reference) {\n                const idRange = reference.identifier.range;\n\n                return idRange[0] < scopeRange[0] || idRange[1] > scopeRange[1];\n            }\n\n            // Gets declared variables, and checks its references.\n            const variables = context.getDeclaredVariables(node);\n\n            for (let i = 0; i < variables.length; ++i) {\n\n                // Reports.\n                variables[i]\n                    .references\n                    .filter(isOutsideOfScope)\n                    .forEach(report);\n            }\n        }\n\n        return {\n            Program(node) {\n                stack = [node.range];\n            },\n\n            // Manages scopes.\n            BlockStatement: enterScope,\n            \"BlockStatement:exit\": exitScope,\n            ForStatement: enterScope,\n            \"ForStatement:exit\": exitScope,\n            ForInStatement: enterScope,\n            \"ForInStatement:exit\": exitScope,\n            ForOfStatement: enterScope,\n            \"ForOfStatement:exit\": exitScope,\n            SwitchStatement: enterScope,\n            \"SwitchStatement:exit\": exitScope,\n            CatchClause: enterScope,\n            \"CatchClause:exit\": exitScope,\n            StaticBlock: enterScope,\n            \"StaticBlock:exit\": exitScope,\n\n            // Finds and reports references which are outside of valid scope.\n            VariableDeclaration: checkForVariables\n        };\n\n    }\n};\n\"/lib/rules/no-case-declarations.js\u0007M/**\n * @fileoverview Rule to flag use of an lexical declarations inside a case clause\n * @author Erik Arvidsson\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow lexical declarations in case clauses\",\n            recommended: true,\n            url: \"https://eslint.org/docs/rules/no-case-declarations\"\n        },\n\n        schema: [],\n\n        messages: {\n            unexpected: \"Unexpected lexical declaration in case block.\"\n        }\n    },\n\n    create(context) {\n\n        /**\n         * Checks whether or not a node is a lexical declaration.\n         * @param {ASTNode} node A direct child statement of a switch case.\n         * @returns {boolean} Whether or not the node is a lexical declaration.\n         */\n        function isLexicalDeclaration(node) {\n            switch (node.type) {\n                case \"FunctionDeclaration\":\n                case \"ClassDeclaration\":\n                    return true;\n                case \"VariableDeclaration\":\n                    return node.kind !== \"var\";\n                default:\n                    return false;\n            }\n        }\n\n        return {\n            SwitchCase(node) {\n                for (let i = 0; i < node.consequent.length; i++) {\n                    const statement = node.consequent[i];\n\n                    if (isLexicalDeclaration(statement)) {\n                        context.report({\n                            node: statement,\n                            messageId: \"unexpected\"\n                        });\n                    }\n                }\n            }\n        };\n\n    }\n};\n./lib/rules/nonblock-statement-body-position.js\u0011/**\n * @fileoverview enforce the location of single-line statements\n * @author Teddy Katz\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\nconst POSITION_SCHEMA = { enum: [\"beside\", \"below\", \"any\"] };\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"layout\",\n\n        docs: {\n            description: \"enforce the location of single-line statements\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/nonblock-statement-body-position\"\n        },\n\n        fixable: \"whitespace\",\n\n        schema: [\n            POSITION_SCHEMA,\n            {\n                properties: {\n                    overrides: {\n                        properties: {\n                            if: POSITION_SCHEMA,\n                            else: POSITION_SCHEMA,\n                            while: POSITION_SCHEMA,\n                            do: POSITION_SCHEMA,\n                            for: POSITION_SCHEMA\n                        },\n                        additionalProperties: false\n                    }\n                },\n                additionalProperties: false\n            }\n        ],\n\n        messages: {\n            expectNoLinebreak: \"Expected no linebreak before this statement.\",\n            expectLinebreak: \"Expected a linebreak before this statement.\"\n        }\n    },\n\n    create(context) {\n        const sourceCode = context.getSourceCode();\n\n        //----------------------------------------------------------------------\n        // Helpers\n        //----------------------------------------------------------------------\n\n        /**\n         * Gets the applicable preference for a particular keyword\n         * @param {string} keywordName The name of a keyword, e.g. 'if'\n         * @returns {string} The applicable option for the keyword, e.g. 'beside'\n         */\n        function getOption(keywordName) {\n            return context.options[1] && context.options[1].overrides && context.options[1].overrides[keywordName] ||\n                context.options[0] ||\n                \"beside\";\n        }\n\n        /**\n         * Validates the location of a single-line statement\n         * @param {ASTNode} node The single-line statement\n         * @param {string} keywordName The applicable keyword name for the single-line statement\n         * @returns {void}\n         */\n        function validateStatement(node, keywordName) {\n            const option = getOption(keywordName);\n\n            if (node.type === \"BlockStatement\" || option === \"any\") {\n                return;\n            }\n\n            const tokenBefore = sourceCode.getTokenBefore(node);\n\n            if (tokenBefore.loc.end.line === node.loc.start.line && option === \"below\") {\n                context.report({\n                    node,\n                    messageId: \"expectLinebreak\",\n                    fix: fixer => fixer.insertTextBefore(node, \"\\n\")\n                });\n            } else if (tokenBefore.loc.end.line !== node.loc.start.line && option === \"beside\") {\n                context.report({\n                    node,\n                    messageId: \"expectNoLinebreak\",\n                    fix(fixer) {\n                        if (sourceCode.getText().slice(tokenBefore.range[1], node.range[0]).trim()) {\n                            return null;\n                        }\n                        return fixer.replaceTextRange([tokenBefore.range[1], node.range[0]], \" \");\n                    }\n                });\n            }\n        }\n\n        //----------------------------------------------------------------------\n        // Public\n        //----------------------------------------------------------------------\n\n        return {\n            IfStatement(node) {\n                validateStatement(node.consequent, \"if\");\n\n                // Check the `else` node, but don't check 'else if' statements.\n                if (node.alternate && node.alternate.type !== \"IfStatement\") {\n                    validateStatement(node.alternate, \"else\");\n                }\n            },\n            WhileStatement: node => validateStatement(node.body, \"while\"),\n            DoWhileStatement: node => validateStatement(node.body, \"do\"),\n            ForStatement: node => validateStatement(node.body, \"for\"),\n            ForInStatement: node => validateStatement(node.body, \"for\"),\n            ForOfStatement: node => validateStatement(node.body, \"for\")\n        };\n    }\n};\n/lib/linter/rules.js\t\u0010/**\n * @fileoverview Defines a storage for rules.\n * @author Nicholas C. Zakas\n * @author aladdin-add\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst builtInRules = require(\"../rules\");\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\n/**\n * Normalizes a rule module to the new-style API\n * @param {(Function|{create: Function})} rule A rule object, which can either be a function\n * (\"old-style\") or an object with a `create` method (\"new-style\")\n * @returns {{create: Function}} A new-style rule.\n */\nfunction normalizeRule(rule) {\n    return typeof rule === \"function\" ? Object.assign({ create: rule }, rule) : rule;\n}\n\n//------------------------------------------------------------------------------\n// Public Interface\n//------------------------------------------------------------------------------\n\n/**\n * A storage for rules.\n */\nclass Rules {\n    constructor() {\n        this._rules = Object.create(null);\n    }\n\n    /**\n     * Registers a rule module for rule id in storage.\n     * @param {string} ruleId Rule id (file name).\n     * @param {Function} ruleModule Rule handler.\n     * @returns {void}\n     */\n    define(ruleId, ruleModule) {\n        this._rules[ruleId] = normalizeRule(ruleModule);\n    }\n\n    /**\n     * Access rule handler by id (file name).\n     * @param {string} ruleId Rule id (file name).\n     * @returns {{create: Function, schema: JsonSchema[]}}\n     * A rule. This is normalized to always have the new-style shape with a `create` method.\n     */\n    get(ruleId) {\n        if (typeof this._rules[ruleId] === \"string\") {\n            this.define(ruleId, require(this._rules[ruleId]));\n        }\n        if (this._rules[ruleId]) {\n            return this._rules[ruleId];\n        }\n        if (builtInRules.has(ruleId)) {\n            return builtInRules.get(ruleId);\n        }\n\n        return null;\n    }\n\n    *[Symbol.iterator]() {\n        yield* builtInRules;\n\n        for (const ruleId of Object.keys(this._rules)) {\n            yield [ruleId, this.get(ruleId)];\n        }\n    }\n}\n\nmodule.exports = Rules;\n/lib/rules/eol-last.js\u000f/**\n * @fileoverview Require or disallow newline at the end of files\n * @author Nodeca Team <https://github.com/nodeca>\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"layout\",\n\n        docs: {\n            description: \"require or disallow newline at the end of files\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/eol-last\"\n        },\n\n        fixable: \"whitespace\",\n\n        schema: [\n            {\n                enum: [\"always\", \"never\", \"unix\", \"windows\"]\n            }\n        ],\n\n        messages: {\n            missing: \"Newline required at end of file but not found.\",\n            unexpected: \"Newline not allowed at end of file.\"\n        }\n    },\n    create(context) {\n\n        //--------------------------------------------------------------------------\n        // Public\n        //--------------------------------------------------------------------------\n\n        return {\n            Program: function checkBadEOF(node) {\n                const sourceCode = context.getSourceCode(),\n                    src = sourceCode.getText(),\n                    lastLine = sourceCode.lines[sourceCode.lines.length - 1],\n                    location = {\n                        column: lastLine.length,\n                        line: sourceCode.lines.length\n                    },\n                    LF = \"\\n\",\n                    CRLF = `\\r${LF}`,\n                    endsWithNewline = src.endsWith(LF);\n\n                /*\n                 * Empty source is always valid: No content in file so we don't\n                 * need to lint for a newline on the last line of content.\n                 */\n                if (!src.length) {\n                    return;\n                }\n\n                let mode = context.options[0] || \"always\",\n                    appendCRLF = false;\n\n                if (mode === \"unix\") {\n\n                    // `\"unix\"` should behave exactly as `\"always\"`\n                    mode = \"always\";\n                }\n                if (mode === \"windows\") {\n\n                    // `\"windows\"` should behave exactly as `\"always\"`, but append CRLF in the fixer for backwards compatibility\n                    mode = \"always\";\n                    appendCRLF = true;\n                }\n                if (mode === \"always\" && !endsWithNewline) {\n\n                    // File is not newline-terminated, but should be\n                    context.report({\n                        node,\n                        loc: location,\n                        messageId: \"missing\",\n                        fix(fixer) {\n                            return fixer.insertTextAfterRange([0, src.length], appendCRLF ? CRLF : LF);\n                        }\n                    });\n                } else if (mode === \"never\" && endsWithNewline) {\n\n                    const secondLastLine = sourceCode.lines[sourceCode.lines.length - 2];\n\n                    // File is newline-terminated, but shouldn't be\n                    context.report({\n                        node,\n                        loc: {\n                            start: { line: sourceCode.lines.length - 1, column: secondLastLine.length },\n                            end: { line: sourceCode.lines.length, column: 0 }\n                        },\n                        messageId: \"unexpected\",\n                        fix(fixer) {\n                            const finalEOLs = /(?:\\r?\\n)+$/u,\n                                match = finalEOLs.exec(sourceCode.text),\n                                start = match.index,\n                                end = sourceCode.text.length;\n\n                            return fixer.replaceTextRange([start, end], \"\");\n                        }\n                    });\n                }\n            }\n        };\n    }\n};\n/messages/plugin-conflict.js\u0002!\"use strict\";\n\nmodule.exports = function(it) {\n    const { pluginId, plugins } = it;\n\n    let result = `ESLint couldn't determine the plugin \"${pluginId}\" uniquely.\n`;\n\n    for (const { filePath, importerName } of plugins) {\n        result += `\n- ${filePath} (loaded in \"${importerName}\")`;\n    }\n\n    result += `\n\nPlease remove the \"plugins\" setting from either config or remove either plugin installation.\n\nIf you still can't figure out the problem, please stop by https://eslint.org/chat/help to chat with the team.\n`;\n\n    return result;\n};\n/lib/rules/dot-notation.js\u001a/**\n * @fileoverview Rule to warn about using dot notation instead of square bracket notation when possible.\n * @author Josh Perez\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\nconst keywords = require(\"./utils/keywords\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\nconst validIdentifier = /^[a-zA-Z_$][a-zA-Z0-9_$]*$/u;\n\n// `null` literal must be handled separately.\nconst literalTypesToCheck = new Set([\"string\", \"boolean\"]);\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"enforce dot notation whenever possible\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/dot-notation\"\n        },\n\n        schema: [\n            {\n                type: \"object\",\n                properties: {\n                    allowKeywords: {\n                        type: \"boolean\",\n                        default: true\n                    },\n                    allowPattern: {\n                        type: \"string\",\n                        default: \"\"\n                    }\n                },\n                additionalProperties: false\n            }\n        ],\n\n        fixable: \"code\",\n\n        messages: {\n            useDot: \"[{{key}}] is better written in dot notation.\",\n            useBrackets: \".{{key}} is a syntax error.\"\n        }\n    },\n\n    create(context) {\n        const options = context.options[0] || {};\n        const allowKeywords = options.allowKeywords === void 0 || options.allowKeywords;\n        const sourceCode = context.getSourceCode();\n\n        let allowPattern;\n\n        if (options.allowPattern) {\n            allowPattern = new RegExp(options.allowPattern, \"u\");\n        }\n\n        /**\n         * Check if the property is valid dot notation\n         * @param {ASTNode} node The dot notation node\n         * @param {string} value Value which is to be checked\n         * @returns {void}\n         */\n        function checkComputedProperty(node, value) {\n            if (\n                validIdentifier.test(value) &&\n                (allowKeywords || keywords.indexOf(String(value)) === -1) &&\n                !(allowPattern && allowPattern.test(value))\n            ) {\n                const formattedValue = node.property.type === \"Literal\" ? JSON.stringify(value) : `\\`${value}\\``;\n\n                context.report({\n                    node: node.property,\n                    messageId: \"useDot\",\n                    data: {\n                        key: formattedValue\n                    },\n                    *fix(fixer) {\n                        const leftBracket = sourceCode.getTokenAfter(node.object, astUtils.isOpeningBracketToken);\n                        const rightBracket = sourceCode.getLastToken(node);\n                        const nextToken = sourceCode.getTokenAfter(node);\n\n                        // Don't perform any fixes if there are comments inside the brackets.\n                        if (sourceCode.commentsExistBetween(leftBracket, rightBracket)) {\n                            return;\n                        }\n\n                        // Replace the brackets by an identifier.\n                        if (!node.optional) {\n                            yield fixer.insertTextBefore(\n                                leftBracket,\n                                astUtils.isDecimalInteger(node.object) ? \" .\" : \".\"\n                            );\n                        }\n                        yield fixer.replaceTextRange(\n                            [leftBracket.range[0], rightBracket.range[1]],\n                            value\n                        );\n\n                        // Insert a space after the property if it will be connected to the next token.\n                        if (\n                            nextToken &&\n                            rightBracket.range[1] === nextToken.range[0] &&\n                            !astUtils.canTokensBeAdjacent(String(value), nextToken)\n                        ) {\n                            yield fixer.insertTextAfter(node, \" \");\n                        }\n                    }\n                });\n            }\n        }\n\n        return {\n            MemberExpression(node) {\n                if (\n                    node.computed &&\n                    node.property.type === \"Literal\" &&\n                    (literalTypesToCheck.has(typeof node.property.value) || astUtils.isNullLiteral(node.property))\n                ) {\n                    checkComputedProperty(node, node.property.value);\n                }\n                if (\n                    node.computed &&\n                    node.property.type === \"TemplateLiteral\" &&\n                    node.property.expressions.length === 0\n                ) {\n                    checkComputedProperty(node, node.property.quasis[0].value.cooked);\n                }\n                if (\n                    !allowKeywords &&\n                    !node.computed &&\n                    node.property.type === \"Identifier\" &&\n                    keywords.indexOf(String(node.property.name)) !== -1\n                ) {\n                    context.report({\n                        node: node.property,\n                        messageId: \"useBrackets\",\n                        data: {\n                            key: node.property.name\n                        },\n                        *fix(fixer) {\n                            const dotToken = sourceCode.getTokenBefore(node.property);\n\n                            // A statement that starts with `let[` is parsed as a destructuring variable declaration, not a MemberExpression.\n                            if (node.object.type === \"Identifier\" && node.object.name === \"let\" && !node.optional) {\n                                return;\n                            }\n\n                            // Don't perform any fixes if there are comments between the dot and the property name.\n                            if (sourceCode.commentsExistBetween(dotToken, node.property)) {\n                                return;\n                            }\n\n                            // Replace the identifier to brackets.\n                            if (!node.optional) {\n                                yield fixer.remove(dotToken);\n                            }\n                            yield fixer.replaceText(node.property, `[\"${node.property.name}\"]`);\n                        }\n                    });\n                }\n            }\n        };\n    }\n};\n/lib/rules/no-mixed-requires.js\u001d\u0005/**\n * @fileoverview Rule to enforce grouped require statements for Node.JS\n * @author Raphael Pigulla\n * @deprecated in ESLint v7.0.0\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        deprecated: true,\n\n        replacedBy: [],\n\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow `require` calls to be mixed with regular variable declarations\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-mixed-requires\"\n        },\n\n        schema: [\n            {\n                oneOf: [\n                    {\n                        type: \"boolean\"\n                    },\n                    {\n                        type: \"object\",\n                        properties: {\n                            grouping: {\n                                type: \"boolean\"\n                            },\n                            allowCall: {\n                                type: \"boolean\"\n                            }\n                        },\n                        additionalProperties: false\n                    }\n                ]\n            }\n        ],\n\n        messages: {\n            noMixRequire: \"Do not mix 'require' and other declarations.\",\n            noMixCoreModuleFileComputed: \"Do not mix core, module, file and computed requires.\"\n        }\n    },\n\n    create(context) {\n\n        const options = context.options[0];\n        let grouping = false,\n            allowCall = false;\n\n        if (typeof options === \"object\") {\n            grouping = options.grouping;\n            allowCall = options.allowCall;\n        } else {\n            grouping = !!options;\n        }\n\n        /**\n         * Returns the list of built-in modules.\n         * @returns {string[]} An array of built-in Node.js modules.\n         */\n        function getBuiltinModules() {\n\n            /*\n             * This list is generated using:\n             * `require(\"repl\")._builtinLibs.concat('repl').sort()`\n             * This particular list is as per nodejs v0.12.2 and iojs v0.7.1\n             */\n            return [\n                \"assert\", \"buffer\", \"child_process\", \"cluster\", \"crypto\",\n                \"dgram\", \"dns\", \"domain\", \"events\", \"fs\", \"http\", \"https\",\n                \"net\", \"os\", \"path\", \"punycode\", \"querystring\", \"readline\",\n                \"repl\", \"smalloc\", \"stream\", \"string_decoder\", \"tls\", \"tty\",\n                \"url\", \"util\", \"v8\", \"vm\", \"zlib\"\n            ];\n        }\n\n        const BUILTIN_MODULES = getBuiltinModules();\n\n        const DECL_REQUIRE = \"require\",\n            DECL_UNINITIALIZED = \"uninitialized\",\n            DECL_OTHER = \"other\";\n\n        const REQ_CORE = \"core\",\n            REQ_FILE = \"file\",\n            REQ_MODULE = \"module\",\n            REQ_COMPUTED = \"computed\";\n\n        /**\n         * Determines the type of a declaration statement.\n         * @param {ASTNode} initExpression The init node of the VariableDeclarator.\n         * @returns {string} The type of declaration represented by the expression.\n         */\n        function getDeclarationType(initExpression) {\n            if (!initExpression) {\n\n                // \"var x;\"\n                return DECL_UNINITIALIZED;\n            }\n\n            if (initExpression.type === \"CallExpression\" &&\n                initExpression.callee.type === \"Identifier\" &&\n                initExpression.callee.name === \"require\"\n            ) {\n\n                // \"var x = require('util');\"\n                return DECL_REQUIRE;\n            }\n            if (allowCall &&\n                initExpression.type === \"CallExpression\" &&\n                initExpression.callee.type === \"CallExpression\"\n            ) {\n\n                // \"var x = require('diagnose')('sub-module');\"\n                return getDeclarationType(initExpression.callee);\n            }\n            if (initExpression.type === \"MemberExpression\") {\n\n                // \"var x = require('glob').Glob;\"\n                return getDeclarationType(initExpression.object);\n            }\n\n            // \"var x = 42;\"\n            return DECL_OTHER;\n        }\n\n        /**\n         * Determines the type of module that is loaded via require.\n         * @param {ASTNode} initExpression The init node of the VariableDeclarator.\n         * @returns {string} The module type.\n         */\n        function inferModuleType(initExpression) {\n            if (initExpression.type === \"MemberExpression\") {\n\n                // \"var x = require('glob').Glob;\"\n                return inferModuleType(initExpression.object);\n            }\n            if (initExpression.arguments.length === 0) {\n\n                // \"var x = require();\"\n                return REQ_COMPUTED;\n            }\n\n            const arg = initExpression.arguments[0];\n\n            if (arg.type !== \"Literal\" || typeof arg.value !== \"string\") {\n\n                // \"var x = require(42);\"\n                return REQ_COMPUTED;\n            }\n\n            if (BUILTIN_MODULES.indexOf(arg.value) !== -1) {\n\n                // \"var fs = require('fs');\"\n                return REQ_CORE;\n            }\n            if (/^\\.{0,2}\\//u.test(arg.value)) {\n\n                // \"var utils = require('./utils');\"\n                return REQ_FILE;\n            }\n\n            // \"var async = require('async');\"\n            return REQ_MODULE;\n\n        }\n\n        /**\n         * Check if the list of variable declarations is mixed, i.e. whether it\n         * contains both require and other declarations.\n         * @param {ASTNode} declarations The list of VariableDeclarators.\n         * @returns {boolean} True if the declarations are mixed, false if not.\n         */\n        function isMixed(declarations) {\n            const contains = {};\n\n            declarations.forEach(declaration => {\n                const type = getDeclarationType(declaration.init);\n\n                contains[type] = true;\n            });\n\n            return !!(\n                contains[DECL_REQUIRE] &&\n                (contains[DECL_UNINITIALIZED] || contains[DECL_OTHER])\n            );\n        }\n\n        /**\n         * Check if all require declarations in the given list are of the same\n         * type.\n         * @param {ASTNode} declarations The list of VariableDeclarators.\n         * @returns {boolean} True if the declarations are grouped, false if not.\n         */\n        function isGrouped(declarations) {\n            const found = {};\n\n            declarations.forEach(declaration => {\n                if (getDeclarationType(declaration.init) === DECL_REQUIRE) {\n                    found[inferModuleType(declaration.init)] = true;\n                }\n            });\n\n            return Object.keys(found).length <= 1;\n        }\n\n\n        return {\n\n            VariableDeclaration(node) {\n\n                if (isMixed(node.declarations)) {\n                    context.report({\n                        node,\n                        messageId: \"noMixRequire\"\n                    });\n                } else if (grouping && !isGrouped(node.declarations)) {\n                    context.report({\n                        node,\n                        messageId: \"noMixCoreModuleFileComputed\"\n                    });\n                }\n            }\n        };\n\n    }\n};\n-/lib/rules/utils/unicode/is-surrogate-pair.js\u0001/**\n * @author Toru Nagashima <https://github.com/mysticatea>\n */\n\"use strict\";\n\n/**\n * Check whether given two characters are a surrogate pair.\n * @param {number} lead The code of the lead character.\n * @param {number} tail The code of the tail character.\n * @returns {boolean} `true` if the character pair is a surrogate pair.\n */\nmodule.exports = function isSurrogatePair(lead, tail) {\n    return lead >= 0xD800 && lead < 0xDC00 && tail >= 0xDC00 && tail < 0xE000;\n};\n/lib/rules/no-invalid-this.js\u0013/**\n * @fileoverview A rule to disallow `this` keywords outside of classes or class-like objects.\n * @author Toru Nagashima\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\n/**\n * Determines if the given code path is a code path with lexical `this` binding.\n * That is, if `this` within the code path refers to `this` of surrounding code path.\n * @param {CodePath} codePath Code path.\n * @param {ASTNode} node Node that started the code path.\n * @returns {boolean} `true` if it is a code path with lexical `this` binding.\n */\nfunction isCodePathWithLexicalThis(codePath, node) {\n    return codePath.origin === \"function\" && node.type === \"ArrowFunctionExpression\";\n}\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow `this` keywords outside of classes or class-like objects\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-invalid-this\"\n        },\n\n        schema: [\n            {\n                type: \"object\",\n                properties: {\n                    capIsConstructor: {\n                        type: \"boolean\",\n                        default: true\n                    }\n                },\n                additionalProperties: false\n            }\n        ],\n\n        messages: {\n            unexpectedThis: \"Unexpected 'this'.\"\n        }\n    },\n\n    create(context) {\n        const options = context.options[0] || {};\n        const capIsConstructor = options.capIsConstructor !== false;\n        const stack = [],\n            sourceCode = context.getSourceCode();\n\n        /**\n         * Gets the current checking context.\n         *\n         * The return value has a flag that whether or not `this` keyword is valid.\n         * The flag is initialized when got at the first time.\n         * @returns {{valid: boolean}}\n         *   an object which has a flag that whether or not `this` keyword is valid.\n         */\n        stack.getCurrent = function() {\n            const current = this[this.length - 1];\n\n            if (!current.init) {\n                current.init = true;\n                current.valid = !astUtils.isDefaultThisBinding(\n                    current.node,\n                    sourceCode,\n                    { capIsConstructor }\n                );\n            }\n            return current;\n        };\n\n        return {\n\n            onCodePathStart(codePath, node) {\n                if (isCodePathWithLexicalThis(codePath, node)) {\n                    return;\n                }\n\n                if (codePath.origin === \"program\") {\n                    const scope = context.getScope();\n                    const features = context.parserOptions.ecmaFeatures || {};\n\n                    stack.push({\n                        init: true,\n                        node,\n                        valid: !(\n                            scope.isStrict ||\n                            node.sourceType === \"module\" ||\n                            (features.globalReturn && scope.childScopes[0].isStrict)\n                        )\n                    });\n\n                    return;\n                }\n\n                /*\n                 * `init: false` means that `valid` isn't determined yet.\n                 * Most functions don't use `this`, and the calculation for `valid`\n                 * is relatively costly, so we'll calculate it lazily when the first\n                 * `this` within the function is traversed. A special case are non-strict\n                 * functions, because `this` refers to the global object and therefore is\n                 * always valid, so we can set `init: true` right away.\n                 */\n                stack.push({\n                    init: !context.getScope().isStrict,\n                    node,\n                    valid: true\n                });\n            },\n\n            onCodePathEnd(codePath, node) {\n                if (isCodePathWithLexicalThis(codePath, node)) {\n                    return;\n                }\n\n                stack.pop();\n            },\n\n            // Reports if `this` of the current context is invalid.\n            ThisExpression(node) {\n                const current = stack.getCurrent();\n\n                if (current && !current.valid) {\n                    context.report({\n                        node,\n                        messageId: \"unexpectedThis\"\n                    });\n                }\n            }\n        };\n    }\n};\n\"/lib/rules/no-underscore-dangle.js)/**\n * @fileoverview Rule to flag dangling underscores in variable declarations.\n * @author Matt DuVall <http://www.mattduvall.com>\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow dangling underscores in identifiers\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-underscore-dangle\"\n        },\n\n        schema: [\n            {\n                type: \"object\",\n                properties: {\n                    allow: {\n                        type: \"array\",\n                        items: {\n                            type: \"string\"\n                        }\n                    },\n                    allowAfterThis: {\n                        type: \"boolean\",\n                        default: false\n                    },\n                    allowAfterSuper: {\n                        type: \"boolean\",\n                        default: false\n                    },\n                    allowAfterThisConstructor: {\n                        type: \"boolean\",\n                        default: false\n                    },\n                    enforceInMethodNames: {\n                        type: \"boolean\",\n                        default: false\n                    },\n                    allowFunctionParams: {\n                        type: \"boolean\",\n                        default: true\n                    }\n                },\n                additionalProperties: false\n            }\n        ],\n\n        messages: {\n            unexpectedUnderscore: \"Unexpected dangling '_' in '{{identifier}}'.\"\n        }\n    },\n\n    create(context) {\n\n        const options = context.options[0] || {};\n        const ALLOWED_VARIABLES = options.allow ? options.allow : [];\n        const allowAfterThis = typeof options.allowAfterThis !== \"undefined\" ? options.allowAfterThis : false;\n        const allowAfterSuper = typeof options.allowAfterSuper !== \"undefined\" ? options.allowAfterSuper : false;\n        const allowAfterThisConstructor = typeof options.allowAfterThisConstructor !== \"undefined\" ? options.allowAfterThisConstructor : false;\n        const enforceInMethodNames = typeof options.enforceInMethodNames !== \"undefined\" ? options.enforceInMethodNames : false;\n        const allowFunctionParams = typeof options.allowFunctionParams !== \"undefined\" ? options.allowFunctionParams : true;\n\n        //-------------------------------------------------------------------------\n        // Helpers\n        //-------------------------------------------------------------------------\n\n        /**\n         * Check if identifier is present inside the allowed option\n         * @param {string} identifier name of the node\n         * @returns {boolean} true if its is present\n         * @private\n         */\n        function isAllowed(identifier) {\n            return ALLOWED_VARIABLES.some(ident => ident === identifier);\n        }\n\n        /**\n         * Check if identifier has a dangling underscore\n         * @param {string} identifier name of the node\n         * @returns {boolean} true if its is present\n         * @private\n         */\n        function hasDanglingUnderscore(identifier) {\n            const len = identifier.length;\n\n            return identifier !== \"_\" && (identifier[0] === \"_\" || identifier[len - 1] === \"_\");\n        }\n\n        /**\n         * Check if identifier is a special case member expression\n         * @param {string} identifier name of the node\n         * @returns {boolean} true if its is a special case\n         * @private\n         */\n        function isSpecialCaseIdentifierForMemberExpression(identifier) {\n            return identifier === \"__proto__\";\n        }\n\n        /**\n         * Check if identifier is a special case variable expression\n         * @param {string} identifier name of the node\n         * @returns {boolean} true if its is a special case\n         * @private\n         */\n        function isSpecialCaseIdentifierInVariableExpression(identifier) {\n\n            // Checks for the underscore library usage here\n            return identifier === \"_\";\n        }\n\n        /**\n         * Check if a node is a member reference of this.constructor\n         * @param {ASTNode} node node to evaluate\n         * @returns {boolean} true if it is a reference on this.constructor\n         * @private\n         */\n        function isThisConstructorReference(node) {\n            return node.object.type === \"MemberExpression\" &&\n                node.object.property.name === \"constructor\" &&\n                node.object.object.type === \"ThisExpression\";\n        }\n\n        /**\n         * Check if function parameter has a dangling underscore.\n         * @param {ASTNode} node function node to evaluate\n         * @returns {void}\n         * @private\n         */\n        function checkForDanglingUnderscoreInFunctionParameters(node) {\n            if (!allowFunctionParams) {\n                node.params.forEach(param => {\n                    const { type } = param;\n                    let nodeToCheck;\n\n                    if (type === \"RestElement\") {\n                        nodeToCheck = param.argument;\n                    } else if (type === \"AssignmentPattern\") {\n                        nodeToCheck = param.left;\n                    } else {\n                        nodeToCheck = param;\n                    }\n\n                    if (nodeToCheck.type === \"Identifier\") {\n                        const identifier = nodeToCheck.name;\n\n                        if (hasDanglingUnderscore(identifier) && !isAllowed(identifier)) {\n                            context.report({\n                                node: param,\n                                messageId: \"unexpectedUnderscore\",\n                                data: {\n                                    identifier\n                                }\n                            });\n                        }\n                    }\n                });\n            }\n        }\n\n        /**\n         * Check if function has a dangling underscore\n         * @param {ASTNode} node node to evaluate\n         * @returns {void}\n         * @private\n         */\n        function checkForDanglingUnderscoreInFunction(node) {\n            if (node.type === \"FunctionDeclaration\" && node.id) {\n                const identifier = node.id.name;\n\n                if (typeof identifier !== \"undefined\" && hasDanglingUnderscore(identifier) && !isAllowed(identifier)) {\n                    context.report({\n                        node,\n                        messageId: \"unexpectedUnderscore\",\n                        data: {\n                            identifier\n                        }\n                    });\n                }\n            }\n            checkForDanglingUnderscoreInFunctionParameters(node);\n        }\n\n        /**\n         * Check if variable expression has a dangling underscore\n         * @param {ASTNode} node node to evaluate\n         * @returns {void}\n         * @private\n         */\n        function checkForDanglingUnderscoreInVariableExpression(node) {\n            const identifier = node.id.name;\n\n            if (typeof identifier !== \"undefined\" && hasDanglingUnderscore(identifier) &&\n                !isSpecialCaseIdentifierInVariableExpression(identifier) && !isAllowed(identifier)) {\n                context.report({\n                    node,\n                    messageId: \"unexpectedUnderscore\",\n                    data: {\n                        identifier\n                    }\n                });\n            }\n        }\n\n        /**\n         * Check if member expression has a dangling underscore\n         * @param {ASTNode} node node to evaluate\n         * @returns {void}\n         * @private\n         */\n        function checkForDanglingUnderscoreInMemberExpression(node) {\n            const identifier = node.property.name,\n                isMemberOfThis = node.object.type === \"ThisExpression\",\n                isMemberOfSuper = node.object.type === \"Super\",\n                isMemberOfThisConstructor = isThisConstructorReference(node);\n\n            if (typeof identifier !== \"undefined\" && hasDanglingUnderscore(identifier) &&\n                !(isMemberOfThis && allowAfterThis) &&\n                !(isMemberOfSuper && allowAfterSuper) &&\n                !(isMemberOfThisConstructor && allowAfterThisConstructor) &&\n                !isSpecialCaseIdentifierForMemberExpression(identifier) && !isAllowed(identifier)) {\n                context.report({\n                    node,\n                    messageId: \"unexpectedUnderscore\",\n                    data: {\n                        identifier\n                    }\n                });\n            }\n        }\n\n        /**\n         * Check if method declaration or method property has a dangling underscore\n         * @param {ASTNode} node node to evaluate\n         * @returns {void}\n         * @private\n         */\n        function checkForDanglingUnderscoreInMethod(node) {\n            const identifier = node.key.name;\n            const isMethod = node.type === \"MethodDefinition\" || node.type === \"Property\" && node.method;\n\n            if (typeof identifier !== \"undefined\" && enforceInMethodNames && isMethod && hasDanglingUnderscore(identifier) && !isAllowed(identifier)) {\n                context.report({\n                    node,\n                    messageId: \"unexpectedUnderscore\",\n                    data: {\n                        identifier: node.key.type === \"PrivateIdentifier\"\n                            ? `#${identifier}`\n                            : identifier\n                    }\n                });\n            }\n        }\n\n        //--------------------------------------------------------------------------\n        // Public API\n        //--------------------------------------------------------------------------\n\n        return {\n            FunctionDeclaration: checkForDanglingUnderscoreInFunction,\n            VariableDeclarator: checkForDanglingUnderscoreInVariableExpression,\n            MemberExpression: checkForDanglingUnderscoreInMemberExpression,\n            MethodDefinition: checkForDanglingUnderscoreInMethod,\n            PropertyDefinition: checkForDanglingUnderscoreInMethod,\n            Property: checkForDanglingUnderscoreInMethod,\n            FunctionExpression: checkForDanglingUnderscoreInFunction,\n            ArrowFunctionExpression: checkForDanglingUnderscoreInFunction\n        };\n\n    }\n};\n/lib/rules/no-import-assign.js\u001c/**\n * @fileoverview Rule to flag updates of imported bindings.\n * @author Toru Nagashima <https://github.com/mysticatea>\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\nconst { findVariable } = require(\"eslint-utils\");\nconst astUtils = require(\"./utils/ast-utils\");\n\nconst WellKnownMutationFunctions = {\n    Object: /^(?:assign|definePropert(?:y|ies)|freeze|setPrototypeOf)$/u,\n    Reflect: /^(?:(?:define|delete)Property|set(?:PrototypeOf)?)$/u\n};\n\n/**\n * Check if a given node is LHS of an assignment node.\n * @param {ASTNode} node The node to check.\n * @returns {boolean} `true` if the node is LHS.\n */\nfunction isAssignmentLeft(node) {\n    const { parent } = node;\n\n    return (\n        (\n            parent.type === \"AssignmentExpression\" &&\n            parent.left === node\n        ) ||\n\n        // Destructuring assignments\n        parent.type === \"ArrayPattern\" ||\n        (\n            parent.type === \"Property\" &&\n            parent.value === node &&\n            parent.parent.type === \"ObjectPattern\"\n        ) ||\n        parent.type === \"RestElement\" ||\n        (\n            parent.type === \"AssignmentPattern\" &&\n            parent.left === node\n        )\n    );\n}\n\n/**\n * Check if a given node is the operand of mutation unary operator.\n * @param {ASTNode} node The node to check.\n * @returns {boolean} `true` if the node is the operand of mutation unary operator.\n */\nfunction isOperandOfMutationUnaryOperator(node) {\n    const argumentNode = node.parent.type === \"ChainExpression\"\n        ? node.parent\n        : node;\n    const { parent } = argumentNode;\n\n    return (\n        (\n            parent.type === \"UpdateExpression\" &&\n            parent.argument === argumentNode\n        ) ||\n        (\n            parent.type === \"UnaryExpression\" &&\n            parent.operator === \"delete\" &&\n            parent.argument === argumentNode\n        )\n    );\n}\n\n/**\n * Check if a given node is the iteration variable of `for-in`/`for-of` syntax.\n * @param {ASTNode} node The node to check.\n * @returns {boolean} `true` if the node is the iteration variable.\n */\nfunction isIterationVariable(node) {\n    const { parent } = node;\n\n    return (\n        (\n            parent.type === \"ForInStatement\" &&\n            parent.left === node\n        ) ||\n        (\n            parent.type === \"ForOfStatement\" &&\n            parent.left === node\n        )\n    );\n}\n\n/**\n * Check if a given node is at the first argument of a well-known mutation function.\n * - `Object.assign`\n * - `Object.defineProperty`\n * - `Object.defineProperties`\n * - `Object.freeze`\n * - `Object.setPrototypeOf`\n * - `Reflect.defineProperty`\n * - `Reflect.deleteProperty`\n * - `Reflect.set`\n * - `Reflect.setPrototypeOf`\n * @param {ASTNode} node The node to check.\n * @param {Scope} scope A `escope.Scope` object to find variable (whichever).\n * @returns {boolean} `true` if the node is at the first argument of a well-known mutation function.\n */\nfunction isArgumentOfWellKnownMutationFunction(node, scope) {\n    const { parent } = node;\n\n    if (parent.type !== \"CallExpression\" || parent.arguments[0] !== node) {\n        return false;\n    }\n    const callee = astUtils.skipChainExpression(parent.callee);\n\n    if (\n        !astUtils.isSpecificMemberAccess(callee, \"Object\", WellKnownMutationFunctions.Object) &&\n        !astUtils.isSpecificMemberAccess(callee, \"Reflect\", WellKnownMutationFunctions.Reflect)\n    ) {\n        return false;\n    }\n    const variable = findVariable(scope, callee.object);\n\n    return variable !== null && variable.scope.type === \"global\";\n}\n\n/**\n * Check if the identifier node is placed at to update members.\n * @param {ASTNode} id The Identifier node to check.\n * @param {Scope} scope A `escope.Scope` object to find variable (whichever).\n * @returns {boolean} `true` if the member of `id` was updated.\n */\nfunction isMemberWrite(id, scope) {\n    const { parent } = id;\n\n    return (\n        (\n            parent.type === \"MemberExpression\" &&\n            parent.object === id &&\n            (\n                isAssignmentLeft(parent) ||\n                isOperandOfMutationUnaryOperator(parent) ||\n                isIterationVariable(parent)\n            )\n        ) ||\n        isArgumentOfWellKnownMutationFunction(id, scope)\n    );\n}\n\n/**\n * Get the mutation node.\n * @param {ASTNode} id The Identifier node to get.\n * @returns {ASTNode} The mutation node.\n */\nfunction getWriteNode(id) {\n    let node = id.parent;\n\n    while (\n        node &&\n        node.type !== \"AssignmentExpression\" &&\n        node.type !== \"UpdateExpression\" &&\n        node.type !== \"UnaryExpression\" &&\n        node.type !== \"CallExpression\" &&\n        node.type !== \"ForInStatement\" &&\n        node.type !== \"ForOfStatement\"\n    ) {\n        node = node.parent;\n    }\n\n    return node || id;\n}\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"problem\",\n\n        docs: {\n            description: \"disallow assigning to imported bindings\",\n            recommended: true,\n            url: \"https://eslint.org/docs/rules/no-import-assign\"\n        },\n\n        schema: [],\n\n        messages: {\n            readonly: \"'{{name}}' is read-only.\",\n            readonlyMember: \"The members of '{{name}}' are read-only.\"\n        }\n    },\n\n    create(context) {\n        return {\n            ImportDeclaration(node) {\n                const scope = context.getScope();\n\n                for (const variable of context.getDeclaredVariables(node)) {\n                    const shouldCheckMembers = variable.defs.some(\n                        d => d.node.type === \"ImportNamespaceSpecifier\"\n                    );\n                    let prevIdNode = null;\n\n                    for (const reference of variable.references) {\n                        const idNode = reference.identifier;\n\n                        /*\n                         * AssignmentPattern (e.g. `[a = 0] = b`) makes two write\n                         * references for the same identifier. This should skip\n                         * the one of the two in order to prevent redundant reports.\n                         */\n                        if (idNode === prevIdNode) {\n                            continue;\n                        }\n                        prevIdNode = idNode;\n\n                        if (reference.isWrite()) {\n                            context.report({\n                                node: getWriteNode(idNode),\n                                messageId: \"readonly\",\n                                data: { name: idNode.name }\n                            });\n                        } else if (shouldCheckMembers && isMemberWrite(idNode, scope)) {\n                            context.report({\n                                node: getWriteNode(idNode),\n                                messageId: \"readonlyMember\",\n                                data: { name: idNode.name }\n                            });\n                        }\n                    }\n                }\n            }\n        };\n\n    }\n};\n/package.json\u0010{\n  \"name\": \"eslint\",\n  \"version\": \"8.9.0\",\n  \"author\": \"Nicholas C. Zakas <nicholas+npm@nczconsulting.com>\",\n  \"description\": \"An AST-based pattern checker for JavaScript.\",\n  \"bin\": {\n    \"eslint\": \"./bin/eslint.js\"\n  },\n  \"main\": \"./lib/api.js\",\n  \"exports\": {\n    \"./package.json\": \"./package.json\",\n    \".\": \"./lib/api.js\",\n    \"./use-at-your-own-risk\": \"./lib/unsupported-api.js\"\n  },\n  \"scripts\": {\n    \"test\": \"node Makefile.js test\",\n    \"test:cli\": \"mocha\",\n    \"lint\": \"node Makefile.js lint\",\n    \"fix\": \"node Makefile.js lint -- fix\",\n    \"fuzz\": \"node Makefile.js fuzz\",\n    \"generate-release\": \"node Makefile.js generateRelease\",\n    \"generate-alpharelease\": \"node Makefile.js generatePrerelease -- alpha\",\n    \"generate-betarelease\": \"node Makefile.js generatePrerelease -- beta\",\n    \"generate-rcrelease\": \"node Makefile.js generatePrerelease -- rc\",\n    \"publish-release\": \"node Makefile.js publishRelease\",\n    \"gensite\": \"node Makefile.js gensite\",\n    \"webpack\": \"node Makefile.js webpack\",\n    \"perf\": \"node Makefile.js perf\"\n  },\n  \"gitHooks\": {\n    \"pre-commit\": \"lint-staged\"\n  },\n  \"lint-staged\": {\n    \"*.js\": \"eslint --fix\",\n    \"*.md\": \"markdownlint\"\n  },\n  \"files\": [\n    \"LICENSE\",\n    \"README.md\",\n    \"bin\",\n    \"conf\",\n    \"lib\",\n    \"messages\"\n  ],\n  \"repository\": \"eslint/eslint\",\n  \"funding\": \"https://opencollective.com/eslint\",\n  \"homepage\": \"https://eslint.org\",\n  \"bugs\": \"https://github.com/eslint/eslint/issues/\",\n  \"dependencies\": {\n    \"@eslint/eslintrc\": \"^1.1.0\",\n    \"@humanwhocodes/config-array\": \"^0.9.2\",\n    \"ajv\": \"^6.10.0\",\n    \"chalk\": \"^4.0.0\",\n    \"cross-spawn\": \"^7.0.2\",\n    \"debug\": \"^4.3.2\",\n    \"doctrine\": \"^3.0.0\",\n    \"escape-string-regexp\": \"^4.0.0\",\n    \"eslint-scope\": \"^7.1.1\",\n    \"eslint-utils\": \"^3.0.0\",\n    \"eslint-visitor-keys\": \"^3.3.0\",\n    \"espree\": \"^9.3.1\",\n    \"esquery\": \"^1.4.0\",\n    \"esutils\": \"^2.0.2\",\n    \"fast-deep-equal\": \"^3.1.3\",\n    \"file-entry-cache\": \"^6.0.1\",\n    \"functional-red-black-tree\": \"^1.0.1\",\n    \"glob-parent\": \"^6.0.1\",\n    \"globals\": \"^13.6.0\",\n    \"ignore\": \"^5.2.0\",\n    \"import-fresh\": \"^3.0.0\",\n    \"imurmurhash\": \"^0.1.4\",\n    \"is-glob\": \"^4.0.0\",\n    \"js-yaml\": \"^4.1.0\",\n    \"json-stable-stringify-without-jsonify\": \"^1.0.1\",\n    \"levn\": \"^0.4.1\",\n    \"lodash.merge\": \"^4.6.2\",\n    \"minimatch\": \"^3.0.4\",\n    \"natural-compare\": \"^1.4.0\",\n    \"optionator\": \"^0.9.1\",\n    \"regexpp\": \"^3.2.0\",\n    \"strip-ansi\": \"^6.0.1\",\n    \"strip-json-comments\": \"^3.1.0\",\n    \"text-table\": \"^0.2.0\",\n    \"v8-compile-cache\": \"^2.0.3\"\n  },\n  \"devDependencies\": {\n    \"@babel/core\": \"^7.4.3\",\n    \"@babel/preset-env\": \"^7.4.3\",\n    \"babel-loader\": \"^8.0.5\",\n    \"chai\": \"^4.0.1\",\n    \"cheerio\": \"^0.22.0\",\n    \"common-tags\": \"^1.8.0\",\n    \"core-js\": \"^3.1.3\",\n    \"dateformat\": \"^4.5.1\",\n    \"ejs\": \"^3.0.2\",\n    \"eslint\": \"file:.\",\n    \"eslint-config-eslint\": \"file:packages/eslint-config-eslint\",\n    \"eslint-plugin-eslint-comments\": \"^3.2.0\",\n    \"eslint-plugin-eslint-plugin\": \"^4.0.1\",\n    \"eslint-plugin-internal-rules\": \"file:tools/internal-rules\",\n    \"eslint-plugin-jsdoc\": \"^37.0.0\",\n    \"eslint-plugin-node\": \"^11.1.0\",\n    \"eslint-release\": \"^3.2.0\",\n    \"eslump\": \"^3.0.0\",\n    \"esprima\": \"^4.0.1\",\n    \"fs-teardown\": \"^0.1.3\",\n    \"glob\": \"^7.1.6\",\n    \"jsdoc\": \"^3.5.5\",\n    \"karma\": \"^6.1.1\",\n    \"karma-chrome-launcher\": \"^3.1.0\",\n    \"karma-mocha\": \"^2.0.1\",\n    \"karma-mocha-reporter\": \"^2.2.5\",\n    \"karma-webpack\": \"^5.0.0\",\n    \"lint-staged\": \"^11.0.0\",\n    \"load-perf\": \"^0.2.0\",\n    \"markdownlint\": \"^0.24.0\",\n    \"markdownlint-cli\": \"^0.30.0\",\n    \"marked\": \"^4.0.8\",\n    \"memfs\": \"^3.0.1\",\n    \"mocha\": \"^8.3.2\",\n    \"mocha-junit-reporter\": \"^2.0.0\",\n    \"node-polyfill-webpack-plugin\": \"^1.0.3\",\n    \"npm-license\": \"^0.3.3\",\n    \"nyc\": \"^15.0.1\",\n    \"progress\": \"^2.0.3\",\n    \"proxyquire\": \"^2.0.1\",\n    \"puppeteer\": \"^9.1.1\",\n    \"recast\": \"^0.20.4\",\n    \"regenerator-runtime\": \"^0.13.2\",\n    \"semver\": \"^7.3.5\",\n    \"shelljs\": \"^0.8.2\",\n    \"sinon\": \"^11.0.0\",\n    \"temp\": \"^0.9.0\",\n    \"webpack\": \"^5.23.0\",\n    \"webpack-cli\": \"^4.5.0\",\n    \"yorkie\": \"^2.0.0\"\n  },\n  \"keywords\": [\n    \"ast\",\n    \"lint\",\n    \"javascript\",\n    \"ecmascript\",\n    \"espree\"\n  ],\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"node\": \"^12.22.0 || ^14.17.0 || >=16.0.0\"\n  }\n}\n#/lib/rules/no-inner-declarations.js\u000b/**\n * @fileoverview Rule to enforce declarations in program or function body root.\n * @author Brandon Mills\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\nconst validParent = new Set([\"Program\", \"StaticBlock\", \"ExportNamedDeclaration\", \"ExportDefaultDeclaration\"]);\nconst validBlockStatementParent = new Set([\"FunctionDeclaration\", \"FunctionExpression\", \"ArrowFunctionExpression\"]);\n\n/**\n * Finds the nearest enclosing context where this rule allows declarations and returns its description.\n * @param {ASTNode} node Node to search from.\n * @returns {string} Description. One of \"program\", \"function body\", \"class static block body\".\n */\nfunction getAllowedBodyDescription(node) {\n    let { parent } = node;\n\n    while (parent) {\n\n        if (parent.type === \"StaticBlock\") {\n            return \"class static block body\";\n        }\n\n        if (astUtils.isFunction(parent)) {\n            return \"function body\";\n        }\n\n        ({ parent } = parent);\n    }\n\n    return \"program\";\n}\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"problem\",\n\n        docs: {\n            description: \"disallow variable or `function` declarations in nested blocks\",\n            recommended: true,\n            url: \"https://eslint.org/docs/rules/no-inner-declarations\"\n        },\n\n        schema: [\n            {\n                enum: [\"functions\", \"both\"]\n            }\n        ],\n\n        messages: {\n            moveDeclToRoot: \"Move {{type}} declaration to {{body}} root.\"\n        }\n    },\n\n    create(context) {\n\n        /**\n         * Ensure that a given node is at a program or function body's root.\n         * @param {ASTNode} node Declaration node to check.\n         * @returns {void}\n         */\n        function check(node) {\n            const parent = node.parent;\n\n            if (\n                parent.type === \"BlockStatement\" && validBlockStatementParent.has(parent.parent.type)\n            ) {\n                return;\n            }\n\n            if (validParent.has(parent.type)) {\n                return;\n            }\n\n            context.report({\n                node,\n                messageId: \"moveDeclToRoot\",\n                data: {\n                    type: (node.type === \"FunctionDeclaration\" ? \"function\" : \"variable\"),\n                    body: getAllowedBodyDescription(node)\n                }\n            });\n        }\n\n\n        return {\n\n            FunctionDeclaration: check,\n            VariableDeclaration(node) {\n                if (context.options[0] === \"both\" && node.kind === \"var\") {\n                    check(node);\n                }\n            }\n\n        };\n\n    }\n};\n\"/lib/rules/object-curly-newline.js-/**\n * @fileoverview Rule to require or disallow line breaks inside braces.\n * @author Toru Nagashima\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\n// Schema objects.\nconst OPTION_VALUE = {\n    oneOf: [\n        {\n            enum: [\"always\", \"never\"]\n        },\n        {\n            type: \"object\",\n            properties: {\n                multiline: {\n                    type: \"boolean\"\n                },\n                minProperties: {\n                    type: \"integer\",\n                    minimum: 0\n                },\n                consistent: {\n                    type: \"boolean\"\n                }\n            },\n            additionalProperties: false,\n            minProperties: 1\n        }\n    ]\n};\n\n/**\n * Normalizes a given option value.\n * @param {string|Object|undefined} value An option value to parse.\n * @returns {{multiline: boolean, minProperties: number, consistent: boolean}} Normalized option object.\n */\nfunction normalizeOptionValue(value) {\n    let multiline = false;\n    let minProperties = Number.POSITIVE_INFINITY;\n    let consistent = false;\n\n    if (value) {\n        if (value === \"always\") {\n            minProperties = 0;\n        } else if (value === \"never\") {\n            minProperties = Number.POSITIVE_INFINITY;\n        } else {\n            multiline = Boolean(value.multiline);\n            minProperties = value.minProperties || Number.POSITIVE_INFINITY;\n            consistent = Boolean(value.consistent);\n        }\n    } else {\n        consistent = true;\n    }\n\n    return { multiline, minProperties, consistent };\n}\n\n/**\n * Checks if a value is an object.\n * @param {any} value The value to check\n * @returns {boolean} `true` if the value is an object, otherwise `false`\n */\nfunction isObject(value) {\n    return typeof value === \"object\" && value !== null;\n}\n\n/**\n * Checks if an option is a node-specific option\n * @param {any} option The option to check\n * @returns {boolean} `true` if the option is node-specific, otherwise `false`\n */\nfunction isNodeSpecificOption(option) {\n    return isObject(option) || typeof option === \"string\";\n}\n\n/**\n * Normalizes a given option value.\n * @param {string|Object|undefined} options An option value to parse.\n * @returns {{\n *   ObjectExpression: {multiline: boolean, minProperties: number, consistent: boolean},\n *   ObjectPattern: {multiline: boolean, minProperties: number, consistent: boolean},\n *   ImportDeclaration: {multiline: boolean, minProperties: number, consistent: boolean},\n *   ExportNamedDeclaration : {multiline: boolean, minProperties: number, consistent: boolean}\n * }} Normalized option object.\n */\nfunction normalizeOptions(options) {\n    if (isObject(options) && Object.values(options).some(isNodeSpecificOption)) {\n        return {\n            ObjectExpression: normalizeOptionValue(options.ObjectExpression),\n            ObjectPattern: normalizeOptionValue(options.ObjectPattern),\n            ImportDeclaration: normalizeOptionValue(options.ImportDeclaration),\n            ExportNamedDeclaration: normalizeOptionValue(options.ExportDeclaration)\n        };\n    }\n\n    const value = normalizeOptionValue(options);\n\n    return { ObjectExpression: value, ObjectPattern: value, ImportDeclaration: value, ExportNamedDeclaration: value };\n}\n\n/**\n * Determines if ObjectExpression, ObjectPattern, ImportDeclaration or ExportNamedDeclaration\n * node needs to be checked for missing line breaks\n * @param {ASTNode} node Node under inspection\n * @param {Object} options option specific to node type\n * @param {Token} first First object property\n * @param {Token} last Last object property\n * @returns {boolean} `true` if node needs to be checked for missing line breaks\n */\nfunction areLineBreaksRequired(node, options, first, last) {\n    let objectProperties;\n\n    if (node.type === \"ObjectExpression\" || node.type === \"ObjectPattern\") {\n        objectProperties = node.properties;\n    } else {\n\n        // is ImportDeclaration or ExportNamedDeclaration\n        objectProperties = node.specifiers\n            .filter(s => s.type === \"ImportSpecifier\" || s.type === \"ExportSpecifier\");\n    }\n\n    return objectProperties.length >= options.minProperties ||\n        (\n            options.multiline &&\n            objectProperties.length > 0 &&\n            first.loc.start.line !== last.loc.end.line\n        );\n}\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"layout\",\n\n        docs: {\n            description: \"enforce consistent line breaks after opening and before closing braces\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/object-curly-newline\"\n        },\n\n        fixable: \"whitespace\",\n\n        schema: [\n            {\n                oneOf: [\n                    OPTION_VALUE,\n                    {\n                        type: \"object\",\n                        properties: {\n                            ObjectExpression: OPTION_VALUE,\n                            ObjectPattern: OPTION_VALUE,\n                            ImportDeclaration: OPTION_VALUE,\n                            ExportDeclaration: OPTION_VALUE\n                        },\n                        additionalProperties: false,\n                        minProperties: 1\n                    }\n                ]\n            }\n        ],\n\n        messages: {\n            unexpectedLinebreakBeforeClosingBrace: \"Unexpected line break before this closing brace.\",\n            unexpectedLinebreakAfterOpeningBrace: \"Unexpected line break after this opening brace.\",\n            expectedLinebreakBeforeClosingBrace: \"Expected a line break before this closing brace.\",\n            expectedLinebreakAfterOpeningBrace: \"Expected a line break after this opening brace.\"\n        }\n    },\n\n    create(context) {\n        const sourceCode = context.getSourceCode();\n        const normalizedOptions = normalizeOptions(context.options[0]);\n\n        /**\n         * Reports a given node if it violated this rule.\n         * @param {ASTNode} node A node to check. This is an ObjectExpression, ObjectPattern, ImportDeclaration or ExportNamedDeclaration node.\n         * @returns {void}\n         */\n        function check(node) {\n            const options = normalizedOptions[node.type];\n\n            if (\n                (node.type === \"ImportDeclaration\" &&\n                    !node.specifiers.some(specifier => specifier.type === \"ImportSpecifier\")) ||\n                (node.type === \"ExportNamedDeclaration\" &&\n                    !node.specifiers.some(specifier => specifier.type === \"ExportSpecifier\"))\n            ) {\n                return;\n            }\n\n            const openBrace = sourceCode.getFirstToken(node, token => token.value === \"{\");\n\n            let closeBrace;\n\n            if (node.typeAnnotation) {\n                closeBrace = sourceCode.getTokenBefore(node.typeAnnotation);\n            } else {\n                closeBrace = sourceCode.getLastToken(node, token => token.value === \"}\");\n            }\n\n            let first = sourceCode.getTokenAfter(openBrace, { includeComments: true });\n            let last = sourceCode.getTokenBefore(closeBrace, { includeComments: true });\n\n            const needsLineBreaks = areLineBreaksRequired(node, options, first, last);\n\n            const hasCommentsFirstToken = astUtils.isCommentToken(first);\n            const hasCommentsLastToken = astUtils.isCommentToken(last);\n\n            /*\n             * Use tokens or comments to check multiline or not.\n             * But use only tokens to check whether line breaks are needed.\n             * This allows:\n             *     var obj = { // eslint-disable-line foo\n             *         a: 1\n             *     }\n             */\n            first = sourceCode.getTokenAfter(openBrace);\n            last = sourceCode.getTokenBefore(closeBrace);\n\n            if (needsLineBreaks) {\n                if (astUtils.isTokenOnSameLine(openBrace, first)) {\n                    context.report({\n                        messageId: \"expectedLinebreakAfterOpeningBrace\",\n                        node,\n                        loc: openBrace.loc,\n                        fix(fixer) {\n                            if (hasCommentsFirstToken) {\n                                return null;\n                            }\n\n                            return fixer.insertTextAfter(openBrace, \"\\n\");\n                        }\n                    });\n                }\n                if (astUtils.isTokenOnSameLine(last, closeBrace)) {\n                    context.report({\n                        messageId: \"expectedLinebreakBeforeClosingBrace\",\n                        node,\n                        loc: closeBrace.loc,\n                        fix(fixer) {\n                            if (hasCommentsLastToken) {\n                                return null;\n                            }\n\n                            return fixer.insertTextBefore(closeBrace, \"\\n\");\n                        }\n                    });\n                }\n            } else {\n                const consistent = options.consistent;\n                const hasLineBreakBetweenOpenBraceAndFirst = !astUtils.isTokenOnSameLine(openBrace, first);\n                const hasLineBreakBetweenCloseBraceAndLast = !astUtils.isTokenOnSameLine(last, closeBrace);\n\n                if (\n                    (!consistent && hasLineBreakBetweenOpenBraceAndFirst) ||\n                    (consistent && hasLineBreakBetweenOpenBraceAndFirst && !hasLineBreakBetweenCloseBraceAndLast)\n                ) {\n                    context.report({\n                        messageId: \"unexpectedLinebreakAfterOpeningBrace\",\n                        node,\n                        loc: openBrace.loc,\n                        fix(fixer) {\n                            if (hasCommentsFirstToken) {\n                                return null;\n                            }\n\n                            return fixer.removeRange([\n                                openBrace.range[1],\n                                first.range[0]\n                            ]);\n                        }\n                    });\n                }\n                if (\n                    (!consistent && hasLineBreakBetweenCloseBraceAndLast) ||\n                    (consistent && !hasLineBreakBetweenOpenBraceAndFirst && hasLineBreakBetweenCloseBraceAndLast)\n                ) {\n                    context.report({\n                        messageId: \"unexpectedLinebreakBeforeClosingBrace\",\n                        node,\n                        loc: closeBrace.loc,\n                        fix(fixer) {\n                            if (hasCommentsLastToken) {\n                                return null;\n                            }\n\n                            return fixer.removeRange([\n                                last.range[1],\n                                closeBrace.range[0]\n                            ]);\n                        }\n                    });\n                }\n            }\n        }\n\n        return {\n            ObjectExpression: check,\n            ObjectPattern: check,\n            ImportDeclaration: check,\n            ExportNamedDeclaration: check\n        };\n    }\n};\n/lib/rules/no-multi-spaces.js\u0013/**\n * @fileoverview Disallow use of multiple spaces.\n * @author Nicholas C. Zakas\n */\n\n\"use strict\";\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"layout\",\n\n        docs: {\n            description: \"disallow multiple spaces\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-multi-spaces\"\n        },\n\n        fixable: \"whitespace\",\n\n        schema: [\n            {\n                type: \"object\",\n                properties: {\n                    exceptions: {\n                        type: \"object\",\n                        patternProperties: {\n                            \"^([A-Z][a-z]*)+$\": {\n                                type: \"boolean\"\n                            }\n                        },\n                        additionalProperties: false\n                    },\n                    ignoreEOLComments: {\n                        type: \"boolean\",\n                        default: false\n                    }\n                },\n                additionalProperties: false\n            }\n        ],\n\n        messages: {\n            multipleSpaces: \"Multiple spaces found before '{{displayValue}}'.\"\n        }\n    },\n\n    create(context) {\n        const sourceCode = context.getSourceCode();\n        const options = context.options[0] || {};\n        const ignoreEOLComments = options.ignoreEOLComments;\n        const exceptions = Object.assign({ Property: true }, options.exceptions);\n        const hasExceptions = Object.keys(exceptions).filter(key => exceptions[key]).length > 0;\n\n        /**\n         * Formats value of given comment token for error message by truncating its length.\n         * @param {Token} token comment token\n         * @returns {string} formatted value\n         * @private\n         */\n        function formatReportedCommentValue(token) {\n            const valueLines = token.value.split(\"\\n\");\n            const value = valueLines[0];\n            const formattedValue = `${value.slice(0, 12)}...`;\n\n            return valueLines.length === 1 && value.length <= 12 ? value : formattedValue;\n        }\n\n        //--------------------------------------------------------------------------\n        // Public\n        //--------------------------------------------------------------------------\n\n        return {\n            Program() {\n                sourceCode.tokensAndComments.forEach((leftToken, leftIndex, tokensAndComments) => {\n                    if (leftIndex === tokensAndComments.length - 1) {\n                        return;\n                    }\n                    const rightToken = tokensAndComments[leftIndex + 1];\n\n                    // Ignore tokens that don't have 2 spaces between them or are on different lines\n                    if (\n                        !sourceCode.text.slice(leftToken.range[1], rightToken.range[0]).includes(\"  \") ||\n                        leftToken.loc.end.line < rightToken.loc.start.line\n                    ) {\n                        return;\n                    }\n\n                    // Ignore comments that are the last token on their line if `ignoreEOLComments` is active.\n                    if (\n                        ignoreEOLComments &&\n                        astUtils.isCommentToken(rightToken) &&\n                        (\n                            leftIndex === tokensAndComments.length - 2 ||\n                            rightToken.loc.end.line < tokensAndComments[leftIndex + 2].loc.start.line\n                        )\n                    ) {\n                        return;\n                    }\n\n                    // Ignore tokens that are in a node in the \"exceptions\" object\n                    if (hasExceptions) {\n                        const parentNode = sourceCode.getNodeByRangeIndex(rightToken.range[0] - 1);\n\n                        if (parentNode && exceptions[parentNode.type]) {\n                            return;\n                        }\n                    }\n\n                    let displayValue;\n\n                    if (rightToken.type === \"Block\") {\n                        displayValue = `/*${formatReportedCommentValue(rightToken)}*/`;\n                    } else if (rightToken.type === \"Line\") {\n                        displayValue = `//${formatReportedCommentValue(rightToken)}`;\n                    } else {\n                        displayValue = rightToken.value;\n                    }\n\n                    context.report({\n                        node: rightToken,\n                        loc: { start: leftToken.loc.end, end: rightToken.loc.start },\n                        messageId: \"multipleSpaces\",\n                        data: { displayValue },\n                        fix: fixer => fixer.replaceTextRange([leftToken.range[1], rightToken.range[0]], \" \")\n                    });\n                });\n            }\n        };\n\n    }\n};\n/lib/rules/no-useless-escape.js'X/**\n * @fileoverview Look for useless escapes in strings and regexes\n * @author Onur Temizkan\n */\n\n\"use strict\";\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/**\n * Returns the union of two sets.\n * @param {Set} setA The first set\n * @param {Set} setB The second set\n * @returns {Set} The union of the two sets\n */\nfunction union(setA, setB) {\n    return new Set(function *() {\n        yield* setA;\n        yield* setB;\n    }());\n}\n\nconst VALID_STRING_ESCAPES = union(new Set(\"\\\\nrvtbfux\"), astUtils.LINEBREAKS);\nconst REGEX_GENERAL_ESCAPES = new Set(\"\\\\bcdDfnpPrsStvwWxu0123456789]\");\nconst REGEX_NON_CHARCLASS_ESCAPES = union(REGEX_GENERAL_ESCAPES, new Set(\"^/.$*+?[{}|()Bk\"));\n\n/**\n * Parses a regular expression into a list of characters with character class info.\n * @param {string} regExpText The raw text used to create the regular expression\n * @returns {Object[]} A list of characters, each with info on escaping and whether they're in a character class.\n * @example\n *\n * parseRegExp(\"a\\\\b[cd-]\");\n *\n * // returns:\n * [\n *     { text: \"a\", index: 0, escaped: false, inCharClass: false, startsCharClass: false, endsCharClass: false },\n *     { text: \"b\", index: 2, escaped: true, inCharClass: false, startsCharClass: false, endsCharClass: false },\n *     { text: \"c\", index: 4, escaped: false, inCharClass: true, startsCharClass: true, endsCharClass: false },\n *     { text: \"d\", index: 5, escaped: false, inCharClass: true, startsCharClass: false, endsCharClass: false },\n *     { text: \"-\", index: 6, escaped: false, inCharClass: true, startsCharClass: false, endsCharClass: false }\n * ];\n *\n */\nfunction parseRegExp(regExpText) {\n    const charList = [];\n\n    regExpText.split(\"\").reduce((state, char, index) => {\n        if (!state.escapeNextChar) {\n            if (char === \"\\\\\") {\n                return Object.assign(state, { escapeNextChar: true });\n            }\n            if (char === \"[\" && !state.inCharClass) {\n                return Object.assign(state, { inCharClass: true, startingCharClass: true });\n            }\n            if (char === \"]\" && state.inCharClass) {\n                if (charList.length && charList[charList.length - 1].inCharClass) {\n                    charList[charList.length - 1].endsCharClass = true;\n                }\n                return Object.assign(state, { inCharClass: false, startingCharClass: false });\n            }\n        }\n        charList.push({\n            text: char,\n            index,\n            escaped: state.escapeNextChar,\n            inCharClass: state.inCharClass,\n            startsCharClass: state.startingCharClass,\n            endsCharClass: false\n        });\n        return Object.assign(state, { escapeNextChar: false, startingCharClass: false });\n    }, { escapeNextChar: false, inCharClass: false, startingCharClass: false });\n\n    return charList;\n}\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow unnecessary escape characters\",\n            recommended: true,\n            url: \"https://eslint.org/docs/rules/no-useless-escape\"\n        },\n\n        hasSuggestions: true,\n\n        messages: {\n            unnecessaryEscape: \"Unnecessary escape character: \\\\{{character}}.\",\n            removeEscape: \"Remove the `\\\\`. This maintains the current functionality.\",\n            escapeBackslash: \"Replace the `\\\\` with `\\\\\\\\` to include the actual backslash character.\"\n        },\n\n        schema: []\n    },\n\n    create(context) {\n        const sourceCode = context.getSourceCode();\n\n        /**\n         * Reports a node\n         * @param {ASTNode} node The node to report\n         * @param {number} startOffset The backslash's offset from the start of the node\n         * @param {string} character The uselessly escaped character (not including the backslash)\n         * @returns {void}\n         */\n        function report(node, startOffset, character) {\n            const rangeStart = node.range[0] + startOffset;\n            const range = [rangeStart, rangeStart + 1];\n            const start = sourceCode.getLocFromIndex(rangeStart);\n\n            context.report({\n                node,\n                loc: {\n                    start,\n                    end: { line: start.line, column: start.column + 1 }\n                },\n                messageId: \"unnecessaryEscape\",\n                data: { character },\n                suggest: [\n                    {\n                        messageId: \"removeEscape\",\n                        fix(fixer) {\n                            return fixer.removeRange(range);\n                        }\n                    },\n                    {\n                        messageId: \"escapeBackslash\",\n                        fix(fixer) {\n                            return fixer.insertTextBeforeRange(range, \"\\\\\");\n                        }\n                    }\n                ]\n            });\n        }\n\n        /**\n         * Checks if the escape character in given string slice is unnecessary.\n         * @private\n         * @param {ASTNode} node node to validate.\n         * @param {string} match string slice to validate.\n         * @returns {void}\n         */\n        function validateString(node, match) {\n            const isTemplateElement = node.type === \"TemplateElement\";\n            const escapedChar = match[0][1];\n            let isUnnecessaryEscape = !VALID_STRING_ESCAPES.has(escapedChar);\n            let isQuoteEscape;\n\n            if (isTemplateElement) {\n                isQuoteEscape = escapedChar === \"`\";\n\n                if (escapedChar === \"$\") {\n\n                    // Warn if `\\$` is not followed by `{`\n                    isUnnecessaryEscape = match.input[match.index + 2] !== \"{\";\n                } else if (escapedChar === \"{\") {\n\n                    /*\n                     * Warn if `\\{` is not preceded by `$`. If preceded by `$`, escaping\n                     * is necessary and the rule should not warn. If preceded by `/$`, the rule\n                     * will warn for the `/$` instead, as it is the first unnecessarily escaped character.\n                     */\n                    isUnnecessaryEscape = match.input[match.index - 1] !== \"$\";\n                }\n            } else {\n                isQuoteEscape = escapedChar === node.raw[0];\n            }\n\n            if (isUnnecessaryEscape && !isQuoteEscape) {\n                report(node, match.index, match[0].slice(1));\n            }\n        }\n\n        /**\n         * Checks if a node has an escape.\n         * @param {ASTNode} node node to check.\n         * @returns {void}\n         */\n        function check(node) {\n            const isTemplateElement = node.type === \"TemplateElement\";\n\n            if (\n                isTemplateElement &&\n                node.parent &&\n                node.parent.parent &&\n                node.parent.parent.type === \"TaggedTemplateExpression\" &&\n                node.parent === node.parent.parent.quasi\n            ) {\n\n                // Don't report tagged template literals, because the backslash character is accessible to the tag function.\n                return;\n            }\n\n            if (typeof node.value === \"string\" || isTemplateElement) {\n\n                /*\n                 * JSXAttribute doesn't have any escape sequence: https://facebook.github.io/jsx/.\n                 * In addition, backticks are not supported by JSX yet: https://github.com/facebook/jsx/issues/25.\n                 */\n                if (node.parent.type === \"JSXAttribute\" || node.parent.type === \"JSXElement\" || node.parent.type === \"JSXFragment\") {\n                    return;\n                }\n\n                const value = isTemplateElement ? sourceCode.getText(node) : node.raw;\n                const pattern = /\\\\[^\\d]/gu;\n                let match;\n\n                while ((match = pattern.exec(value))) {\n                    validateString(node, match);\n                }\n            } else if (node.regex) {\n                parseRegExp(node.regex.pattern)\n\n                    /*\n                     * The '-' character is a special case, because it's only valid to escape it if it's in a character\n                     * class, and is not at either edge of the character class. To account for this, don't consider '-'\n                     * characters to be valid in general, and filter out '-' characters that appear in the middle of a\n                     * character class.\n                     */\n                    .filter(charInfo => !(charInfo.text === \"-\" && charInfo.inCharClass && !charInfo.startsCharClass && !charInfo.endsCharClass))\n\n                    /*\n                     * The '^' character is also a special case; it must always be escaped outside of character classes, but\n                     * it only needs to be escaped in character classes if it's at the beginning of the character class. To\n                     * account for this, consider it to be a valid escape character outside of character classes, and filter\n                     * out '^' characters that appear at the start of a character class.\n                     */\n                    .filter(charInfo => !(charInfo.text === \"^\" && charInfo.startsCharClass))\n\n                    // Filter out characters that aren't escaped.\n                    .filter(charInfo => charInfo.escaped)\n\n                    // Filter out characters that are valid to escape, based on their position in the regular expression.\n                    .filter(charInfo => !(charInfo.inCharClass ? REGEX_GENERAL_ESCAPES : REGEX_NON_CHARCLASS_ESCAPES).has(charInfo.text))\n\n                    // Report all the remaining characters.\n                    .forEach(charInfo => report(node, charInfo.index, charInfo.text));\n            }\n\n        }\n\n        return {\n            Literal: check,\n            TemplateElement: check\n        };\n    }\n};\n/lib/rules/no-delete-var.js\u0003/**\n * @fileoverview Rule to flag when deleting variables\n * @author Ilya Volodin\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow deleting variables\",\n            recommended: true,\n            url: \"https://eslint.org/docs/rules/no-delete-var\"\n        },\n\n        schema: [],\n\n        messages: {\n            unexpected: \"Variables should not be deleted.\"\n        }\n    },\n\n    create(context) {\n\n        return {\n\n            UnaryExpression(node) {\n                if (node.operator === \"delete\" && node.argument.type === \"Identifier\") {\n                    context.report({ node, messageId: \"unexpected\" });\n                }\n            }\n        };\n\n    }\n};\n%/lib/rules/multiline-comment-style.jsP9/**\n * @fileoverview enforce a particular style for multiline comments\n * @author Teddy Katz\n */\n\"use strict\";\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"enforce a particular style for multiline comments\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/multiline-comment-style\"\n        },\n\n        fixable: \"whitespace\",\n        schema: [{ enum: [\"starred-block\", \"separate-lines\", \"bare-block\"] }],\n        messages: {\n            expectedBlock: \"Expected a block comment instead of consecutive line comments.\",\n            expectedBareBlock: \"Expected a block comment without padding stars.\",\n            startNewline: \"Expected a linebreak after '/*'.\",\n            endNewline: \"Expected a linebreak before '*/'.\",\n            missingStar: \"Expected a '*' at the start of this line.\",\n            alignment: \"Expected this line to be aligned with the start of the comment.\",\n            expectedLines: \"Expected multiple line comments instead of a block comment.\"\n        }\n    },\n\n    create(context) {\n        const sourceCode = context.getSourceCode();\n        const option = context.options[0] || \"starred-block\";\n\n        //----------------------------------------------------------------------\n        // Helpers\n        //----------------------------------------------------------------------\n\n        /**\n         * Checks if a comment line is starred.\n         * @param {string} line A string representing a comment line.\n         * @returns {boolean} Whether or not the comment line is starred.\n         */\n        function isStarredCommentLine(line) {\n            return /^\\s*\\*/u.test(line);\n        }\n\n        /**\n         * Checks if a comment group is in starred-block form.\n         * @param {Token[]} commentGroup A group of comments, containing either multiple line comments or a single block comment.\n         * @returns {boolean} Whether or not the comment group is in starred block form.\n         */\n        function isStarredBlockComment([firstComment]) {\n            if (firstComment.type !== \"Block\") {\n                return false;\n            }\n\n            const lines = firstComment.value.split(astUtils.LINEBREAK_MATCHER);\n\n            // The first and last lines can only contain whitespace.\n            return lines.length > 0 && lines.every((line, i) => (i === 0 || i === lines.length - 1 ? /^\\s*$/u : /^\\s*\\*/u).test(line));\n        }\n\n        /**\n         * Checks if a comment group is in JSDoc form.\n         * @param {Token[]} commentGroup A group of comments, containing either multiple line comments or a single block comment.\n         * @returns {boolean} Whether or not the comment group is in JSDoc form.\n         */\n        function isJSDocComment([firstComment]) {\n            if (firstComment.type !== \"Block\") {\n                return false;\n            }\n\n            const lines = firstComment.value.split(astUtils.LINEBREAK_MATCHER);\n\n            return /^\\*\\s*$/u.test(lines[0]) &&\n                lines.slice(1, -1).every(line => /^\\s* /u.test(line)) &&\n                /^\\s*$/u.test(lines[lines.length - 1]);\n        }\n\n        /**\n         * Processes a comment group that is currently in separate-line form, calculating the offset for each line.\n         * @param {Token[]} commentGroup A group of comments containing multiple line comments.\n         * @returns {string[]} An array of the processed lines.\n         */\n        function processSeparateLineComments(commentGroup) {\n            const allLinesHaveLeadingSpace = commentGroup\n                .map(({ value }) => value)\n                .filter(line => line.trim().length)\n                .every(line => line.startsWith(\" \"));\n\n            return commentGroup.map(({ value }) => (allLinesHaveLeadingSpace ? value.replace(/^ /u, \"\") : value));\n        }\n\n        /**\n         * Processes a comment group that is currently in starred-block form, calculating the offset for each line.\n         * @param {Token} comment A single block comment token in starred-block form.\n         * @returns {string[]} An array of the processed lines.\n         */\n        function processStarredBlockComment(comment) {\n            const lines = comment.value.split(astUtils.LINEBREAK_MATCHER)\n                .filter((line, i, linesArr) => !(i === 0 || i === linesArr.length - 1))\n                .map(line => line.replace(/^\\s*$/u, \"\"));\n            const allLinesHaveLeadingSpace = lines\n                .map(line => line.replace(/\\s*\\*/u, \"\"))\n                .filter(line => line.trim().length)\n                .every(line => line.startsWith(\" \"));\n\n            return lines.map(line => line.replace(allLinesHaveLeadingSpace ? /\\s*\\* ?/u : /\\s*\\*/u, \"\"));\n        }\n\n        /**\n         * Processes a comment group that is currently in bare-block form, calculating the offset for each line.\n         * @param {Token} comment A single block comment token in bare-block form.\n         * @returns {string[]} An array of the processed lines.\n         */\n        function processBareBlockComment(comment) {\n            const lines = comment.value.split(astUtils.LINEBREAK_MATCHER).map(line => line.replace(/^\\s*$/u, \"\"));\n            const leadingWhitespace = `${sourceCode.text.slice(comment.range[0] - comment.loc.start.column, comment.range[0])}   `;\n            let offset = \"\";\n\n            /*\n             * Calculate the offset of the least indented line and use that as the basis for offsetting all the lines.\n             * The first line should not be checked because it is inline with the opening block comment delimiter.\n             */\n            for (const [i, line] of lines.entries()) {\n                if (!line.trim().length || i === 0) {\n                    continue;\n                }\n\n                const [, lineOffset] = line.match(/^(\\s*\\*?\\s*)/u);\n\n                if (lineOffset.length < leadingWhitespace.length) {\n                    const newOffset = leadingWhitespace.slice(lineOffset.length - leadingWhitespace.length);\n\n                    if (newOffset.length > offset.length) {\n                        offset = newOffset;\n                    }\n                }\n            }\n\n            return lines.map(line => {\n                const match = line.match(/^(\\s*\\*?\\s*)(.*)/u);\n                const [, lineOffset, lineContents] = match;\n\n                if (lineOffset.length > leadingWhitespace.length) {\n                    return `${lineOffset.slice(leadingWhitespace.length - (offset.length + lineOffset.length))}${lineContents}`;\n                }\n\n                if (lineOffset.length < leadingWhitespace.length) {\n                    return `${lineOffset.slice(leadingWhitespace.length)}${lineContents}`;\n                }\n\n                return lineContents;\n            });\n        }\n\n        /**\n         * Gets a list of comment lines in a group, formatting leading whitespace as necessary.\n         * @param {Token[]} commentGroup A group of comments containing either multiple line comments or a single block comment.\n         * @returns {string[]} A list of comment lines.\n         */\n        function getCommentLines(commentGroup) {\n            const [firstComment] = commentGroup;\n\n            if (firstComment.type === \"Line\") {\n                return processSeparateLineComments(commentGroup);\n            }\n\n            if (isStarredBlockComment(commentGroup)) {\n                return processStarredBlockComment(firstComment);\n            }\n\n            return processBareBlockComment(firstComment);\n        }\n\n        /**\n         * Gets the initial offset (whitespace) from the beginning of a line to a given comment token.\n         * @param {Token} comment The token to check.\n         * @returns {string} The offset from the beginning of a line to the token.\n         */\n        function getInitialOffset(comment) {\n            return sourceCode.text.slice(comment.range[0] - comment.loc.start.column, comment.range[0]);\n        }\n\n        /**\n         * Converts a comment into starred-block form\n         * @param {Token} firstComment The first comment of the group being converted\n         * @param {string[]} commentLinesList A list of lines to appear in the new starred-block comment\n         * @returns {string} A representation of the comment value in starred-block form, excluding start and end markers\n         */\n        function convertToStarredBlock(firstComment, commentLinesList) {\n            const initialOffset = getInitialOffset(firstComment);\n\n            return `/*\\n${commentLinesList.map(line => `${initialOffset} * ${line}`).join(\"\\n\")}\\n${initialOffset} */`;\n        }\n\n        /**\n         * Converts a comment into separate-line form\n         * @param {Token} firstComment The first comment of the group being converted\n         * @param {string[]} commentLinesList A list of lines to appear in the new starred-block comment\n         * @returns {string} A representation of the comment value in separate-line form\n         */\n        function convertToSeparateLines(firstComment, commentLinesList) {\n            return commentLinesList.map(line => `// ${line}`).join(`\\n${getInitialOffset(firstComment)}`);\n        }\n\n        /**\n         * Converts a comment into bare-block form\n         * @param {Token} firstComment The first comment of the group being converted\n         * @param {string[]} commentLinesList A list of lines to appear in the new starred-block comment\n         * @returns {string} A representation of the comment value in bare-block form\n         */\n        function convertToBlock(firstComment, commentLinesList) {\n            return `/* ${commentLinesList.join(`\\n${getInitialOffset(firstComment)}   `)} */`;\n        }\n\n        /**\n         * Each method checks a group of comments to see if it's valid according to the given option.\n         * @param {Token[]} commentGroup A list of comments that appear together. This will either contain a single\n         * block comment or multiple line comments.\n         * @returns {void}\n         */\n        const commentGroupCheckers = {\n            \"starred-block\"(commentGroup) {\n                const [firstComment] = commentGroup;\n                const commentLines = getCommentLines(commentGroup);\n\n                if (commentLines.some(value => value.includes(\"*/\"))) {\n                    return;\n                }\n\n                if (commentGroup.length > 1) {\n                    context.report({\n                        loc: {\n                            start: firstComment.loc.start,\n                            end: commentGroup[commentGroup.length - 1].loc.end\n                        },\n                        messageId: \"expectedBlock\",\n                        fix(fixer) {\n                            const range = [firstComment.range[0], commentGroup[commentGroup.length - 1].range[1]];\n\n                            return commentLines.some(value => value.startsWith(\"/\"))\n                                ? null\n                                : fixer.replaceTextRange(range, convertToStarredBlock(firstComment, commentLines));\n                        }\n                    });\n                } else {\n                    const lines = firstComment.value.split(astUtils.LINEBREAK_MATCHER);\n                    const expectedLeadingWhitespace = getInitialOffset(firstComment);\n                    const expectedLinePrefix = `${expectedLeadingWhitespace} *`;\n\n                    if (!/^\\*?\\s*$/u.test(lines[0])) {\n                        const start = firstComment.value.startsWith(\"*\") ? firstComment.range[0] + 1 : firstComment.range[0];\n\n                        context.report({\n                            loc: {\n                                start: firstComment.loc.start,\n                                end: { line: firstComment.loc.start.line, column: firstComment.loc.start.column + 2 }\n                            },\n                            messageId: \"startNewline\",\n                            fix: fixer => fixer.insertTextAfterRange([start, start + 2], `\\n${expectedLinePrefix}`)\n                        });\n                    }\n\n                    if (!/^\\s*$/u.test(lines[lines.length - 1])) {\n                        context.report({\n                            loc: {\n                                start: { line: firstComment.loc.end.line, column: firstComment.loc.end.column - 2 },\n                                end: firstComment.loc.end\n                            },\n                            messageId: \"endNewline\",\n                            fix: fixer => fixer.replaceTextRange([firstComment.range[1] - 2, firstComment.range[1]], `\\n${expectedLinePrefix}/`)\n                        });\n                    }\n\n                    for (let lineNumber = firstComment.loc.start.line + 1; lineNumber <= firstComment.loc.end.line; lineNumber++) {\n                        const lineText = sourceCode.lines[lineNumber - 1];\n                        const errorType = isStarredCommentLine(lineText)\n                            ? \"alignment\"\n                            : \"missingStar\";\n\n                        if (!lineText.startsWith(expectedLinePrefix)) {\n                            context.report({\n                                loc: {\n                                    start: { line: lineNumber, column: 0 },\n                                    end: { line: lineNumber, column: lineText.length }\n                                },\n                                messageId: errorType,\n                                fix(fixer) {\n                                    const lineStartIndex = sourceCode.getIndexFromLoc({ line: lineNumber, column: 0 });\n\n                                    if (errorType === \"alignment\") {\n                                        const [, commentTextPrefix = \"\"] = lineText.match(/^(\\s*\\*)/u) || [];\n                                        const commentTextStartIndex = lineStartIndex + commentTextPrefix.length;\n\n                                        return fixer.replaceTextRange([lineStartIndex, commentTextStartIndex], expectedLinePrefix);\n                                    }\n\n                                    const [, commentTextPrefix = \"\"] = lineText.match(/^(\\s*)/u) || [];\n                                    const commentTextStartIndex = lineStartIndex + commentTextPrefix.length;\n                                    let offset;\n\n                                    for (const [idx, line] of lines.entries()) {\n                                        if (!/\\S+/u.test(line)) {\n                                            continue;\n                                        }\n\n                                        const lineTextToAlignWith = sourceCode.lines[firstComment.loc.start.line - 1 + idx];\n                                        const [, prefix = \"\", initialOffset = \"\"] = lineTextToAlignWith.match(/^(\\s*(?:\\/?\\*)?(\\s*))/u) || [];\n\n                                        offset = `${commentTextPrefix.slice(prefix.length)}${initialOffset}`;\n\n                                        if (/^\\s*\\//u.test(lineText) && offset.length === 0) {\n                                            offset += \" \";\n                                        }\n                                        break;\n                                    }\n\n                                    return fixer.replaceTextRange([lineStartIndex, commentTextStartIndex], `${expectedLinePrefix}${offset}`);\n                                }\n                            });\n                        }\n                    }\n                }\n            },\n            \"separate-lines\"(commentGroup) {\n                const [firstComment] = commentGroup;\n\n                if (firstComment.type !== \"Block\" || isJSDocComment(commentGroup)) {\n                    return;\n                }\n\n                const commentLines = getCommentLines(commentGroup);\n                const tokenAfter = sourceCode.getTokenAfter(firstComment, { includeComments: true });\n\n                if (tokenAfter && firstComment.loc.end.line === tokenAfter.loc.start.line) {\n                    return;\n                }\n\n                context.report({\n                    loc: {\n                        start: firstComment.loc.start,\n                        end: { line: firstComment.loc.start.line, column: firstComment.loc.start.column + 2 }\n                    },\n                    messageId: \"expectedLines\",\n                    fix(fixer) {\n                        return fixer.replaceText(firstComment, convertToSeparateLines(firstComment, commentLines));\n                    }\n                });\n            },\n            \"bare-block\"(commentGroup) {\n                if (isJSDocComment(commentGroup)) {\n                    return;\n                }\n\n                const [firstComment] = commentGroup;\n                const commentLines = getCommentLines(commentGroup);\n\n                // Disallows consecutive line comments in favor of using a block comment.\n                if (firstComment.type === \"Line\" && commentLines.length > 1 &&\n                    !commentLines.some(value => value.includes(\"*/\"))) {\n                    context.report({\n                        loc: {\n                            start: firstComment.loc.start,\n                            end: commentGroup[commentGroup.length - 1].loc.end\n                        },\n                        messageId: \"expectedBlock\",\n                        fix(fixer) {\n                            return fixer.replaceTextRange(\n                                [firstComment.range[0], commentGroup[commentGroup.length - 1].range[1]],\n                                convertToBlock(firstComment, commentLines)\n                            );\n                        }\n                    });\n                }\n\n                // Prohibits block comments from having a * at the beginning of each line.\n                if (isStarredBlockComment(commentGroup)) {\n                    context.report({\n                        loc: {\n                            start: firstComment.loc.start,\n                            end: { line: firstComment.loc.start.line, column: firstComment.loc.start.column + 2 }\n                        },\n                        messageId: \"expectedBareBlock\",\n                        fix(fixer) {\n                            return fixer.replaceText(firstComment, convertToBlock(firstComment, commentLines));\n                        }\n                    });\n                }\n            }\n        };\n\n        //----------------------------------------------------------------------\n        // Public\n        //----------------------------------------------------------------------\n\n        return {\n            Program() {\n                return sourceCode.getAllComments()\n                    .filter(comment => comment.type !== \"Shebang\")\n                    .filter(comment => !astUtils.COMMENTS_IGNORE_PATTERN.test(comment.value))\n                    .filter(comment => {\n                        const tokenBefore = sourceCode.getTokenBefore(comment, { includeComments: true });\n\n                        return !tokenBefore || tokenBefore.loc.end.line < comment.loc.start.line;\n                    })\n                    .reduce((commentGroups, comment, index, commentList) => {\n                        const tokenBefore = sourceCode.getTokenBefore(comment, { includeComments: true });\n\n                        if (\n                            comment.type === \"Line\" &&\n                            index && commentList[index - 1].type === \"Line\" &&\n                            tokenBefore && tokenBefore.loc.end.line === comment.loc.start.line - 1 &&\n                            tokenBefore === commentList[index - 1]\n                        ) {\n                            commentGroups[commentGroups.length - 1].push(comment);\n                        } else {\n                            commentGroups.push([comment]);\n                        }\n\n                        return commentGroups;\n                    }, [])\n                    .filter(commentGroup => !(commentGroup.length === 1 && commentGroup[0].loc.start.line === commentGroup[0].loc.end.line))\n                    .forEach(commentGroupCheckers[option]);\n            }\n        };\n    }\n};\n /lib/rules/prefer-rest-params.js\r\u001d/**\n * @fileoverview Rule to\n * @author Toru Nagashima\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\n/**\n * Gets the variable object of `arguments` which is defined implicitly.\n * @param {eslint-scope.Scope} scope A scope to get.\n * @returns {eslint-scope.Variable} The found variable object.\n */\nfunction getVariableOfArguments(scope) {\n    const variables = scope.variables;\n\n    for (let i = 0; i < variables.length; ++i) {\n        const variable = variables[i];\n\n        if (variable.name === \"arguments\") {\n\n            /*\n             * If there was a parameter which is named \"arguments\", the implicit \"arguments\" is not defined.\n             * So does fast return with null.\n             */\n            return (variable.identifiers.length === 0) ? variable : null;\n        }\n    }\n\n    /* istanbul ignore next : unreachable */\n    return null;\n}\n\n/**\n * Checks if the given reference is not normal member access.\n *\n * - arguments         .... true    // not member access\n * - arguments[i]      .... true    // computed member access\n * - arguments[0]      .... true    // computed member access\n * - arguments.length  .... false   // normal member access\n * @param {eslint-scope.Reference} reference The reference to check.\n * @returns {boolean} `true` if the reference is not normal member access.\n */\nfunction isNotNormalMemberAccess(reference) {\n    const id = reference.identifier;\n    const parent = id.parent;\n\n    return !(\n        parent.type === \"MemberExpression\" &&\n        parent.object === id &&\n        !parent.computed\n    );\n}\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"require rest parameters instead of `arguments`\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/prefer-rest-params\"\n        },\n\n        schema: [],\n\n        messages: {\n            preferRestParams: \"Use the rest parameters instead of 'arguments'.\"\n        }\n    },\n\n    create(context) {\n\n        /**\n         * Reports a given reference.\n         * @param {eslint-scope.Reference} reference A reference to report.\n         * @returns {void}\n         */\n        function report(reference) {\n            context.report({\n                node: reference.identifier,\n                loc: reference.identifier.loc,\n                messageId: \"preferRestParams\"\n            });\n        }\n\n        /**\n         * Reports references of the implicit `arguments` variable if exist.\n         * @returns {void}\n         */\n        function checkForArguments() {\n            const argumentsVar = getVariableOfArguments(context.getScope());\n\n            if (argumentsVar) {\n                argumentsVar\n                    .references\n                    .filter(isNotNormalMemberAccess)\n                    .forEach(report);\n            }\n        }\n\n        return {\n            \"FunctionDeclaration:exit\": checkForArguments,\n            \"FunctionExpression:exit\": checkForArguments\n        };\n    }\n};\n&/lib/rules/no-mixed-spaces-and-tabs.js\u000eW/**\n * @fileoverview Disallow mixed spaces and tabs for indentation\n * @author Jary Niebur\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"layout\",\n\n        docs: {\n            description: \"disallow mixed spaces and tabs for indentation\",\n            recommended: true,\n            url: \"https://eslint.org/docs/rules/no-mixed-spaces-and-tabs\"\n        },\n\n        schema: [\n            {\n                enum: [\"smart-tabs\", true, false]\n            }\n        ],\n\n        messages: {\n            mixedSpacesAndTabs: \"Mixed spaces and tabs.\"\n        }\n    },\n\n    create(context) {\n        const sourceCode = context.getSourceCode();\n\n        let smartTabs;\n\n        switch (context.options[0]) {\n            case true: // Support old syntax, maybe add deprecation warning here\n            case \"smart-tabs\":\n                smartTabs = true;\n                break;\n            default:\n                smartTabs = false;\n        }\n\n        //--------------------------------------------------------------------------\n        // Public\n        //--------------------------------------------------------------------------\n\n        return {\n\n            \"Program:exit\"(node) {\n                const lines = sourceCode.lines,\n                    comments = sourceCode.getAllComments(),\n                    ignoredCommentLines = new Set();\n\n                // Add all lines except the first ones.\n                comments.forEach(comment => {\n                    for (let i = comment.loc.start.line + 1; i <= comment.loc.end.line; i++) {\n                        ignoredCommentLines.add(i);\n                    }\n                });\n\n                /*\n                 * At least one space followed by a tab\n                 * or the reverse before non-tab/-space\n                 * characters begin.\n                 */\n                let regex = /^(?=( +|\\t+))\\1(?:\\t| )/u;\n\n                if (smartTabs) {\n\n                    /*\n                     * At least one space followed by a tab\n                     * before non-tab/-space characters begin.\n                     */\n                    regex = /^(?=(\\t*))\\1(?=( +))\\2\\t/u;\n                }\n\n                lines.forEach((line, i) => {\n                    const match = regex.exec(line);\n\n                    if (match) {\n                        const lineNumber = i + 1;\n                        const loc = {\n                            start: {\n                                line: lineNumber,\n                                column: match[0].length - 2\n                            },\n                            end: {\n                                line: lineNumber,\n                                column: match[0].length\n                            }\n                        };\n\n                        if (!ignoredCommentLines.has(lineNumber)) {\n                            const containingNode = sourceCode.getNodeByRangeIndex(sourceCode.getIndexFromLoc(loc.start));\n\n                            if (!(containingNode && [\"Literal\", \"TemplateElement\"].includes(containingNode.type))) {\n                                context.report({\n                                    node,\n                                    loc,\n                                    messageId: \"mixedSpacesAndTabs\"\n                                });\n                            }\n                        }\n                    }\n                });\n            }\n        };\n    }\n};\n/lib/source-code/index.jsN\"use strict\";\n\nmodule.exports = {\n    SourceCode: require(\"./source-code\")\n};\n/conf/replacements.json\u0004\u000f{\n    \"rules\": {\n        \"generator-star\": [\"generator-star-spacing\"],\n        \"global-strict\": [\"strict\"],\n        \"no-arrow-condition\": [\"no-confusing-arrow\", \"no-constant-condition\"],\n        \"no-comma-dangle\": [\"comma-dangle\"],\n        \"no-empty-class\": [\"no-empty-character-class\"],\n        \"no-empty-label\": [\"no-labels\"],\n        \"no-extra-strict\": [\"strict\"],\n        \"no-reserved-keys\": [\"quote-props\"],\n        \"no-space-before-semi\": [\"semi-spacing\"],\n        \"no-wrap-func\": [\"no-extra-parens\"],\n        \"space-after-function-name\": [\"space-before-function-paren\"],\n        \"space-after-keywords\": [\"keyword-spacing\"],\n        \"space-before-function-parentheses\": [\"space-before-function-paren\"],\n        \"space-before-keywords\": [\"keyword-spacing\"],\n        \"space-in-brackets\": [\"object-curly-spacing\", \"array-bracket-spacing\", \"computed-property-spacing\"],\n        \"space-return-throw-case\": [\"keyword-spacing\"],\n        \"space-unary-word-ops\": [\"space-unary-ops\"],\n        \"spaced-line-comment\": [\"spaced-comment\"]\n    }\n}\n\"/lib/rules/object-curly-spacing.js.)/**\n * @fileoverview Disallows or enforces spaces inside of object literals.\n * @author Jamund Ferguson\n */\n\"use strict\";\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"layout\",\n\n        docs: {\n            description: \"enforce consistent spacing inside braces\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/object-curly-spacing\"\n        },\n\n        fixable: \"whitespace\",\n\n        schema: [\n            {\n                enum: [\"always\", \"never\"]\n            },\n            {\n                type: \"object\",\n                properties: {\n                    arraysInObjects: {\n                        type: \"boolean\"\n                    },\n                    objectsInObjects: {\n                        type: \"boolean\"\n                    }\n                },\n                additionalProperties: false\n            }\n        ],\n\n        messages: {\n            requireSpaceBefore: \"A space is required before '{{token}}'.\",\n            requireSpaceAfter: \"A space is required after '{{token}}'.\",\n            unexpectedSpaceBefore: \"There should be no space before '{{token}}'.\",\n            unexpectedSpaceAfter: \"There should be no space after '{{token}}'.\"\n        }\n    },\n\n    create(context) {\n        const spaced = context.options[0] === \"always\",\n            sourceCode = context.getSourceCode();\n\n        /**\n         * Determines whether an option is set, relative to the spacing option.\n         * If spaced is \"always\", then check whether option is set to false.\n         * If spaced is \"never\", then check whether option is set to true.\n         * @param {Object} option The option to exclude.\n         * @returns {boolean} Whether or not the property is excluded.\n         */\n        function isOptionSet(option) {\n            return context.options[1] ? context.options[1][option] === !spaced : false;\n        }\n\n        const options = {\n            spaced,\n            arraysInObjectsException: isOptionSet(\"arraysInObjects\"),\n            objectsInObjectsException: isOptionSet(\"objectsInObjects\")\n        };\n\n        //--------------------------------------------------------------------------\n        // Helpers\n        //--------------------------------------------------------------------------\n\n        /**\n         * Reports that there shouldn't be a space after the first token\n         * @param {ASTNode} node The node to report in the event of an error.\n         * @param {Token} token The token to use for the report.\n         * @returns {void}\n         */\n        function reportNoBeginningSpace(node, token) {\n            const nextToken = context.getSourceCode().getTokenAfter(token, { includeComments: true });\n\n            context.report({\n                node,\n                loc: { start: token.loc.end, end: nextToken.loc.start },\n                messageId: \"unexpectedSpaceAfter\",\n                data: {\n                    token: token.value\n                },\n                fix(fixer) {\n                    return fixer.removeRange([token.range[1], nextToken.range[0]]);\n                }\n            });\n        }\n\n        /**\n         * Reports that there shouldn't be a space before the last token\n         * @param {ASTNode} node The node to report in the event of an error.\n         * @param {Token} token The token to use for the report.\n         * @returns {void}\n         */\n        function reportNoEndingSpace(node, token) {\n            const previousToken = context.getSourceCode().getTokenBefore(token, { includeComments: true });\n\n            context.report({\n                node,\n                loc: { start: previousToken.loc.end, end: token.loc.start },\n                messageId: \"unexpectedSpaceBefore\",\n                data: {\n                    token: token.value\n                },\n                fix(fixer) {\n                    return fixer.removeRange([previousToken.range[1], token.range[0]]);\n                }\n            });\n        }\n\n        /**\n         * Reports that there should be a space after the first token\n         * @param {ASTNode} node The node to report in the event of an error.\n         * @param {Token} token The token to use for the report.\n         * @returns {void}\n         */\n        function reportRequiredBeginningSpace(node, token) {\n            context.report({\n                node,\n                loc: token.loc,\n                messageId: \"requireSpaceAfter\",\n                data: {\n                    token: token.value\n                },\n                fix(fixer) {\n                    return fixer.insertTextAfter(token, \" \");\n                }\n            });\n        }\n\n        /**\n         * Reports that there should be a space before the last token\n         * @param {ASTNode} node The node to report in the event of an error.\n         * @param {Token} token The token to use for the report.\n         * @returns {void}\n         */\n        function reportRequiredEndingSpace(node, token) {\n            context.report({\n                node,\n                loc: token.loc,\n                messageId: \"requireSpaceBefore\",\n                data: {\n                    token: token.value\n                },\n                fix(fixer) {\n                    return fixer.insertTextBefore(token, \" \");\n                }\n            });\n        }\n\n        /**\n         * Determines if spacing in curly braces is valid.\n         * @param {ASTNode} node The AST node to check.\n         * @param {Token} first The first token to check (should be the opening brace)\n         * @param {Token} second The second token to check (should be first after the opening brace)\n         * @param {Token} penultimate The penultimate token to check (should be last before closing brace)\n         * @param {Token} last The last token to check (should be closing brace)\n         * @returns {void}\n         */\n        function validateBraceSpacing(node, first, second, penultimate, last) {\n            if (astUtils.isTokenOnSameLine(first, second)) {\n                const firstSpaced = sourceCode.isSpaceBetweenTokens(first, second);\n\n                if (options.spaced && !firstSpaced) {\n                    reportRequiredBeginningSpace(node, first);\n                }\n                if (!options.spaced && firstSpaced && second.type !== \"Line\") {\n                    reportNoBeginningSpace(node, first);\n                }\n            }\n\n            if (astUtils.isTokenOnSameLine(penultimate, last)) {\n                const shouldCheckPenultimate = (\n                    options.arraysInObjectsException && astUtils.isClosingBracketToken(penultimate) ||\n                    options.objectsInObjectsException && astUtils.isClosingBraceToken(penultimate)\n                );\n                const penultimateType = shouldCheckPenultimate && sourceCode.getNodeByRangeIndex(penultimate.range[0]).type;\n\n                const closingCurlyBraceMustBeSpaced = (\n                    options.arraysInObjectsException && penultimateType === \"ArrayExpression\" ||\n                    options.objectsInObjectsException && (penultimateType === \"ObjectExpression\" || penultimateType === \"ObjectPattern\")\n                ) ? !options.spaced : options.spaced;\n\n                const lastSpaced = sourceCode.isSpaceBetweenTokens(penultimate, last);\n\n                if (closingCurlyBraceMustBeSpaced && !lastSpaced) {\n                    reportRequiredEndingSpace(node, last);\n                }\n                if (!closingCurlyBraceMustBeSpaced && lastSpaced) {\n                    reportNoEndingSpace(node, last);\n                }\n            }\n        }\n\n        /**\n         * Gets '}' token of an object node.\n         *\n         * Because the last token of object patterns might be a type annotation,\n         * this traverses tokens preceded by the last property, then returns the\n         * first '}' token.\n         * @param {ASTNode} node The node to get. This node is an\n         *      ObjectExpression or an ObjectPattern. And this node has one or\n         *      more properties.\n         * @returns {Token} '}' token.\n         */\n        function getClosingBraceOfObject(node) {\n            const lastProperty = node.properties[node.properties.length - 1];\n\n            return sourceCode.getTokenAfter(lastProperty, astUtils.isClosingBraceToken);\n        }\n\n        /**\n         * Reports a given object node if spacing in curly braces is invalid.\n         * @param {ASTNode} node An ObjectExpression or ObjectPattern node to check.\n         * @returns {void}\n         */\n        function checkForObject(node) {\n            if (node.properties.length === 0) {\n                return;\n            }\n\n            const first = sourceCode.getFirstToken(node),\n                last = getClosingBraceOfObject(node),\n                second = sourceCode.getTokenAfter(first, { includeComments: true }),\n                penultimate = sourceCode.getTokenBefore(last, { includeComments: true });\n\n            validateBraceSpacing(node, first, second, penultimate, last);\n        }\n\n        /**\n         * Reports a given import node if spacing in curly braces is invalid.\n         * @param {ASTNode} node An ImportDeclaration node to check.\n         * @returns {void}\n         */\n        function checkForImport(node) {\n            if (node.specifiers.length === 0) {\n                return;\n            }\n\n            let firstSpecifier = node.specifiers[0];\n            const lastSpecifier = node.specifiers[node.specifiers.length - 1];\n\n            if (lastSpecifier.type !== \"ImportSpecifier\") {\n                return;\n            }\n            if (firstSpecifier.type !== \"ImportSpecifier\") {\n                firstSpecifier = node.specifiers[1];\n            }\n\n            const first = sourceCode.getTokenBefore(firstSpecifier),\n                last = sourceCode.getTokenAfter(lastSpecifier, astUtils.isNotCommaToken),\n                second = sourceCode.getTokenAfter(first, { includeComments: true }),\n                penultimate = sourceCode.getTokenBefore(last, { includeComments: true });\n\n            validateBraceSpacing(node, first, second, penultimate, last);\n        }\n\n        /**\n         * Reports a given export node if spacing in curly braces is invalid.\n         * @param {ASTNode} node An ExportNamedDeclaration node to check.\n         * @returns {void}\n         */\n        function checkForExport(node) {\n            if (node.specifiers.length === 0) {\n                return;\n            }\n\n            const firstSpecifier = node.specifiers[0],\n                lastSpecifier = node.specifiers[node.specifiers.length - 1],\n                first = sourceCode.getTokenBefore(firstSpecifier),\n                last = sourceCode.getTokenAfter(lastSpecifier, astUtils.isNotCommaToken),\n                second = sourceCode.getTokenAfter(first, { includeComments: true }),\n                penultimate = sourceCode.getTokenBefore(last, { includeComments: true });\n\n            validateBraceSpacing(node, first, second, penultimate, last);\n        }\n\n        //--------------------------------------------------------------------------\n        // Public\n        //--------------------------------------------------------------------------\n\n        return {\n\n            // var {x} = y;\n            ObjectPattern: checkForObject,\n\n            // var y = {x: 'y'}\n            ObjectExpression: checkForObject,\n\n            // import {y} from 'x';\n            ImportDeclaration: checkForImport,\n\n            // export {name} from 'yo';\n            ExportNamedDeclaration: checkForExport\n        };\n\n    }\n};\n,/lib/source-code/token-store/limit-cursor.js\u0004R/**\n * @fileoverview Define the cursor which limits the number of tokens.\n * @author Toru Nagashima\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst DecorativeCursor = require(\"./decorative-cursor\");\n\n//------------------------------------------------------------------------------\n// Exports\n//------------------------------------------------------------------------------\n\n/**\n * The decorative cursor which limits the number of tokens.\n */\nmodule.exports = class LimitCursor extends DecorativeCursor {\n\n    /**\n     * Initializes this cursor.\n     * @param {Cursor} cursor The cursor to be decorated.\n     * @param {number} count The count of tokens this cursor iterates.\n     */\n    constructor(cursor, count) {\n        super(cursor);\n        this.count = count;\n    }\n\n    /** @inheritdoc */\n    moveNext() {\n        if (this.count > 0) {\n            this.count -= 1;\n            return super.moveNext();\n        }\n        return false;\n    }\n};\n/lib/rules/no-spaced-func.js\t/**\n * @fileoverview Rule to check that spaced function application\n * @author Matt DuVall <http://www.mattduvall.com>\n * @deprecated in ESLint v3.3.0\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"layout\",\n\n        docs: {\n            description: \"disallow spacing between function identifiers and their applications (deprecated)\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-spaced-func\"\n        },\n\n        deprecated: true,\n\n        replacedBy: [\"func-call-spacing\"],\n\n        fixable: \"whitespace\",\n        schema: [],\n\n        messages: {\n            noSpacedFunction: \"Unexpected space between function name and paren.\"\n        }\n    },\n\n    create(context) {\n\n        const sourceCode = context.getSourceCode();\n\n        /**\n         * Check if open space is present in a function name\n         * @param {ASTNode} node node to evaluate\n         * @returns {void}\n         * @private\n         */\n        function detectOpenSpaces(node) {\n            const lastCalleeToken = sourceCode.getLastToken(node.callee);\n            let prevToken = lastCalleeToken,\n                parenToken = sourceCode.getTokenAfter(lastCalleeToken);\n\n            // advances to an open parenthesis.\n            while (\n                parenToken &&\n                parenToken.range[1] < node.range[1] &&\n                parenToken.value !== \"(\"\n            ) {\n                prevToken = parenToken;\n                parenToken = sourceCode.getTokenAfter(parenToken);\n            }\n\n            // look for a space between the callee and the open paren\n            if (parenToken &&\n                parenToken.range[1] < node.range[1] &&\n                sourceCode.isSpaceBetweenTokens(prevToken, parenToken)\n            ) {\n                context.report({\n                    node,\n                    loc: lastCalleeToken.loc.start,\n                    messageId: \"noSpacedFunction\",\n                    fix(fixer) {\n                        return fixer.removeRange([prevToken.range[1], parenToken.range[0]]);\n                    }\n                });\n            }\n        }\n\n        return {\n            CallExpression: detectOpenSpaces,\n            NewExpression: detectOpenSpaces\n        };\n\n    }\n};\n\"/lib/rules/no-array-constructor.js\u0005w/**\n * @fileoverview Disallow construction of dense arrays using the Array constructor\n * @author Matt DuVall <http://www.mattduvall.com/>\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow `Array` constructors\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-array-constructor\"\n        },\n\n        schema: [],\n\n        messages: {\n            preferLiteral: \"The array literal notation [] is preferable.\"\n        }\n    },\n\n    create(context) {\n\n        /**\n         * Disallow construction of dense arrays using the Array constructor\n         * @param {ASTNode} node node to evaluate\n         * @returns {void}\n         * @private\n         */\n        function check(node) {\n            if (\n                node.arguments.length !== 1 &&\n                node.callee.type === \"Identifier\" &&\n                node.callee.name === \"Array\"\n            ) {\n                context.report({ node, messageId: \"preferLiteral\" });\n            }\n        }\n\n        return {\n            CallExpression: check,\n            NewExpression: check\n        };\n\n    }\n};\n/lib/rules/no-dupe-else-if.js\u0012\r/**\n * @fileoverview Rule to disallow duplicate conditions in if-else-if chains\n * @author Milos Djermanovic\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\n/**\n * Determines whether the first given array is a subset of the second given array.\n * @param {Function} comparator A function to compare two elements, should return `true` if they are equal.\n * @param {Array} arrA The array to compare from.\n * @param {Array} arrB The array to compare against.\n * @returns {boolean} `true` if the array `arrA` is a subset of the array `arrB`.\n */\nfunction isSubsetByComparator(comparator, arrA, arrB) {\n    return arrA.every(a => arrB.some(b => comparator(a, b)));\n}\n\n/**\n * Splits the given node by the given logical operator.\n * @param {string} operator Logical operator `||` or `&&`.\n * @param {ASTNode} node The node to split.\n * @returns {ASTNode[]} Array of conditions that makes the node when joined by the operator.\n */\nfunction splitByLogicalOperator(operator, node) {\n    if (node.type === \"LogicalExpression\" && node.operator === operator) {\n        return [...splitByLogicalOperator(operator, node.left), ...splitByLogicalOperator(operator, node.right)];\n    }\n    return [node];\n}\n\nconst splitByOr = splitByLogicalOperator.bind(null, \"||\");\nconst splitByAnd = splitByLogicalOperator.bind(null, \"&&\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"problem\",\n\n        docs: {\n            description: \"disallow duplicate conditions in if-else-if chains\",\n            recommended: true,\n            url: \"https://eslint.org/docs/rules/no-dupe-else-if\"\n        },\n\n        schema: [],\n\n        messages: {\n            unexpected: \"This branch can never execute. Its condition is a duplicate or covered by previous conditions in the if-else-if chain.\"\n        }\n    },\n\n    create(context) {\n        const sourceCode = context.getSourceCode();\n\n        /**\n         * Determines whether the two given nodes are considered to be equal. In particular, given that the nodes\n         * represent expressions in a boolean context, `||` and `&&` can be considered as commutative operators.\n         * @param {ASTNode} a First node.\n         * @param {ASTNode} b Second node.\n         * @returns {boolean} `true` if the nodes are considered to be equal.\n         */\n        function equal(a, b) {\n            if (a.type !== b.type) {\n                return false;\n            }\n\n            if (\n                a.type === \"LogicalExpression\" &&\n                (a.operator === \"||\" || a.operator === \"&&\") &&\n                a.operator === b.operator\n            ) {\n                return equal(a.left, b.left) && equal(a.right, b.right) ||\n                    equal(a.left, b.right) && equal(a.right, b.left);\n            }\n\n            return astUtils.equalTokens(a, b, sourceCode);\n        }\n\n        const isSubset = isSubsetByComparator.bind(null, equal);\n\n        return {\n            IfStatement(node) {\n                const test = node.test,\n                    conditionsToCheck = test.type === \"LogicalExpression\" && test.operator === \"&&\"\n                        ? [test, ...splitByAnd(test)]\n                        : [test];\n                let current = node,\n                    listToCheck = conditionsToCheck.map(c => splitByOr(c).map(splitByAnd));\n\n                while (current.parent && current.parent.type === \"IfStatement\" && current.parent.alternate === current) {\n                    current = current.parent;\n\n                    const currentOrOperands = splitByOr(current.test).map(splitByAnd);\n\n                    listToCheck = listToCheck.map(orOperands => orOperands.filter(\n                        orOperand => !currentOrOperands.some(currentOrOperand => isSubset(currentOrOperand, orOperand))\n                    ));\n\n                    if (listToCheck.some(orOperands => orOperands.length === 0)) {\n                        context.report({ node: test, messageId: \"unexpected\" });\n                        break;\n                    }\n                }\n            }\n        };\n    }\n};\n/lib/rules/no-await-in-loop.js\n/**\n * @fileoverview Rule to disallow uses of await inside of loops.\n * @author Nat Mote (nmote)\n */\n\"use strict\";\n\n/**\n * Check whether it should stop traversing ancestors at the given node.\n * @param {ASTNode} node A node to check.\n * @returns {boolean} `true` if it should stop traversing.\n */\nfunction isBoundary(node) {\n    const t = node.type;\n\n    return (\n        t === \"FunctionDeclaration\" ||\n        t === \"FunctionExpression\" ||\n        t === \"ArrowFunctionExpression\" ||\n\n        /*\n         * Don't report the await expressions on for-await-of loop since it's\n         * asynchronous iteration intentionally.\n         */\n        (t === \"ForOfStatement\" && node.await === true)\n    );\n}\n\n/**\n * Check whether the given node is in loop.\n * @param {ASTNode} node A node to check.\n * @param {ASTNode} parent A parent node to check.\n * @returns {boolean} `true` if the node is in loop.\n */\nfunction isLooped(node, parent) {\n    switch (parent.type) {\n        case \"ForStatement\":\n            return (\n                node === parent.test ||\n                node === parent.update ||\n                node === parent.body\n            );\n\n        case \"ForOfStatement\":\n        case \"ForInStatement\":\n            return node === parent.body;\n\n        case \"WhileStatement\":\n        case \"DoWhileStatement\":\n            return node === parent.test || node === parent.body;\n\n        default:\n            return false;\n    }\n}\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"problem\",\n\n        docs: {\n            description: \"disallow `await` inside of loops\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-await-in-loop\"\n        },\n\n        schema: [],\n\n        messages: {\n            unexpectedAwait: \"Unexpected `await` inside a loop.\"\n        }\n    },\n    create(context) {\n\n        /**\n         * Validate an await expression.\n         * @param {ASTNode} awaitNode An AwaitExpression or ForOfStatement node to validate.\n         * @returns {void}\n         */\n        function validate(awaitNode) {\n            if (awaitNode.type === \"ForOfStatement\" && !awaitNode.await) {\n                return;\n            }\n\n            let node = awaitNode;\n            let parent = node.parent;\n\n            while (parent && !isBoundary(parent)) {\n                if (isLooped(node, parent)) {\n                    context.report({\n                        node: awaitNode,\n                        messageId: \"unexpectedAwait\"\n                    });\n                    return;\n                }\n                node = parent;\n                parent = parent.parent;\n            }\n        }\n\n        return {\n            AwaitExpression: validate,\n            ForOfStatement: validate\n        };\n    }\n};\n /lib/rules/no-unsafe-negation.js\u0012~/**\n * @fileoverview Rule to disallow negating the left operand of relational operators\n * @author Toru Nagashima\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\n/**\n * Checks whether the given operator is `in` or `instanceof`\n * @param {string} op The operator type to check.\n * @returns {boolean} `true` if the operator is `in` or `instanceof`\n */\nfunction isInOrInstanceOfOperator(op) {\n    return op === \"in\" || op === \"instanceof\";\n}\n\n/**\n * Checks whether the given operator is an ordering relational operator or not.\n * @param {string} op The operator type to check.\n * @returns {boolean} `true` if the operator is an ordering relational operator.\n */\nfunction isOrderingRelationalOperator(op) {\n    return op === \"<\" || op === \">\" || op === \">=\" || op === \"<=\";\n}\n\n/**\n * Checks whether the given node is a logical negation expression or not.\n * @param {ASTNode} node The node to check.\n * @returns {boolean} `true` if the node is a logical negation expression.\n */\nfunction isNegation(node) {\n    return node.type === \"UnaryExpression\" && node.operator === \"!\";\n}\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"problem\",\n\n        docs: {\n            description: \"disallow negating the left operand of relational operators\",\n            recommended: true,\n            url: \"https://eslint.org/docs/rules/no-unsafe-negation\"\n        },\n\n        hasSuggestions: true,\n\n        schema: [\n            {\n                type: \"object\",\n                properties: {\n                    enforceForOrderingRelations: {\n                        type: \"boolean\",\n                        default: false\n                    }\n                },\n                additionalProperties: false\n            }\n        ],\n\n        fixable: null,\n\n        messages: {\n            unexpected: \"Unexpected negating the left operand of '{{operator}}' operator.\",\n            suggestNegatedExpression: \"Negate '{{operator}}' expression instead of its left operand. This changes the current behavior.\",\n            suggestParenthesisedNegation: \"Wrap negation in '()' to make the intention explicit. This preserves the current behavior.\"\n        }\n    },\n\n    create(context) {\n        const sourceCode = context.getSourceCode();\n        const options = context.options[0] || {};\n        const enforceForOrderingRelations = options.enforceForOrderingRelations === true;\n\n        return {\n            BinaryExpression(node) {\n                const operator = node.operator;\n                const orderingRelationRuleApplies = enforceForOrderingRelations && isOrderingRelationalOperator(operator);\n\n                if (\n                    (isInOrInstanceOfOperator(operator) || orderingRelationRuleApplies) &&\n                    isNegation(node.left) &&\n                    !astUtils.isParenthesised(sourceCode, node.left)\n                ) {\n                    context.report({\n                        node,\n                        loc: node.left.loc,\n                        messageId: \"unexpected\",\n                        data: { operator },\n                        suggest: [\n                            {\n                                messageId: \"suggestNegatedExpression\",\n                                data: { operator },\n                                fix(fixer) {\n                                    const negationToken = sourceCode.getFirstToken(node.left);\n                                    const fixRange = [negationToken.range[1], node.range[1]];\n                                    const text = sourceCode.text.slice(fixRange[0], fixRange[1]);\n\n                                    return fixer.replaceTextRange(fixRange, `(${text})`);\n                                }\n                            },\n                            {\n                                messageId: \"suggestParenthesisedNegation\",\n                                fix(fixer) {\n                                    return fixer.replaceText(node.left, `(${sourceCode.getText(node.left)})`);\n                                }\n                            }\n                        ]\n                    });\n                }\n            }\n        };\n    }\n};\n/lib/rules/consistent-this.js\u0013l/**\n * @fileoverview Rule to enforce consistent naming of \"this\" context variables\n * @author Raphael Pigulla\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"enforce consistent naming when capturing the current execution context\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/consistent-this\"\n        },\n\n        schema: {\n            type: \"array\",\n            items: {\n                type: \"string\",\n                minLength: 1\n            },\n            uniqueItems: true\n        },\n\n        messages: {\n            aliasNotAssignedToThis: \"Designated alias '{{name}}' is not assigned to 'this'.\",\n            unexpectedAlias: \"Unexpected alias '{{name}}' for 'this'.\"\n        }\n    },\n\n    create(context) {\n        let aliases = [];\n\n        if (context.options.length === 0) {\n            aliases.push(\"that\");\n        } else {\n            aliases = context.options;\n        }\n\n        /**\n         * Reports that a variable declarator or assignment expression is assigning\n         * a non-'this' value to the specified alias.\n         * @param {ASTNode} node The assigning node.\n         * @param {string} name the name of the alias that was incorrectly used.\n         * @returns {void}\n         */\n        function reportBadAssignment(node, name) {\n            context.report({ node, messageId: \"aliasNotAssignedToThis\", data: { name } });\n        }\n\n        /**\n         * Checks that an assignment to an identifier only assigns 'this' to the\n         * appropriate alias, and the alias is only assigned to 'this'.\n         * @param {ASTNode} node The assigning node.\n         * @param {Identifier} name The name of the variable assigned to.\n         * @param {Expression} value The value of the assignment.\n         * @returns {void}\n         */\n        function checkAssignment(node, name, value) {\n            const isThis = value.type === \"ThisExpression\";\n\n            if (aliases.indexOf(name) !== -1) {\n                if (!isThis || node.operator && node.operator !== \"=\") {\n                    reportBadAssignment(node, name);\n                }\n            } else if (isThis) {\n                context.report({ node, messageId: \"unexpectedAlias\", data: { name } });\n            }\n        }\n\n        /**\n         * Ensures that a variable declaration of the alias in a program or function\n         * is assigned to the correct value.\n         * @param {string} alias alias the check the assignment of.\n         * @param {Object} scope scope of the current code we are checking.\n         * @private\n         * @returns {void}\n         */\n        function checkWasAssigned(alias, scope) {\n            const variable = scope.set.get(alias);\n\n            if (!variable) {\n                return;\n            }\n\n            if (variable.defs.some(def => def.node.type === \"VariableDeclarator\" &&\n                def.node.init !== null)) {\n                return;\n            }\n\n            /*\n             * The alias has been declared and not assigned: check it was\n             * assigned later in the same scope.\n             */\n            if (!variable.references.some(reference => {\n                const write = reference.writeExpr;\n\n                return (\n                    reference.from === scope &&\n                    write && write.type === \"ThisExpression\" &&\n                    write.parent.operator === \"=\"\n                );\n            })) {\n                variable.defs.map(def => def.node).forEach(node => {\n                    reportBadAssignment(node, alias);\n                });\n            }\n        }\n\n        /**\n         * Check each alias to ensure that is was assigned to the correct value.\n         * @returns {void}\n         */\n        function ensureWasAssigned() {\n            const scope = context.getScope();\n\n            aliases.forEach(alias => {\n                checkWasAssigned(alias, scope);\n            });\n        }\n\n        return {\n            \"Program:exit\": ensureWasAssigned,\n            \"FunctionExpression:exit\": ensureWasAssigned,\n            \"FunctionDeclaration:exit\": ensureWasAssigned,\n\n            VariableDeclarator(node) {\n                const id = node.id;\n                const isDestructuring =\n                    id.type === \"ArrayPattern\" || id.type === \"ObjectPattern\";\n\n                if (node.init !== null && !isDestructuring) {\n                    checkAssignment(node, id.name, node.init);\n                }\n            },\n\n            AssignmentExpression(node) {\n                if (node.left.type === \"Identifier\") {\n                    checkAssignment(node, node.left.name, node.right);\n                }\n            }\n        };\n\n    }\n};\n/lib/rules/no-useless-concat.js\f/**\n * @fileoverview disallow unnecessary concatenation of template strings\n * @author Henry Zhu\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\n/**\n * Checks whether or not a given node is a concatenation.\n * @param {ASTNode} node A node to check.\n * @returns {boolean} `true` if the node is a concatenation.\n */\nfunction isConcatenation(node) {\n    return node.type === \"BinaryExpression\" && node.operator === \"+\";\n}\n\n/**\n * Checks if the given token is a `+` token or not.\n * @param {Token} token The token to check.\n * @returns {boolean} `true` if the token is a `+` token.\n */\nfunction isConcatOperatorToken(token) {\n    return token.value === \"+\" && token.type === \"Punctuator\";\n}\n\n/**\n * Get's the right most node on the left side of a BinaryExpression with + operator.\n * @param {ASTNode} node A BinaryExpression node to check.\n * @returns {ASTNode} node\n */\nfunction getLeft(node) {\n    let left = node.left;\n\n    while (isConcatenation(left)) {\n        left = left.right;\n    }\n    return left;\n}\n\n/**\n * Get's the left most node on the right side of a BinaryExpression with + operator.\n * @param {ASTNode} node A BinaryExpression node to check.\n * @returns {ASTNode} node\n */\nfunction getRight(node) {\n    let right = node.right;\n\n    while (isConcatenation(right)) {\n        right = right.left;\n    }\n    return right;\n}\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow unnecessary concatenation of literals or template literals\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-useless-concat\"\n        },\n\n        schema: [],\n\n        messages: {\n            unexpectedConcat: \"Unexpected string concatenation of literals.\"\n        }\n    },\n\n    create(context) {\n        const sourceCode = context.getSourceCode();\n\n        return {\n            BinaryExpression(node) {\n\n                // check if not concatenation\n                if (node.operator !== \"+\") {\n                    return;\n                }\n\n                // account for the `foo + \"a\" + \"b\"` case\n                const left = getLeft(node);\n                const right = getRight(node);\n\n                if (astUtils.isStringLiteral(left) &&\n                    astUtils.isStringLiteral(right) &&\n                    astUtils.isTokenOnSameLine(left, right)\n                ) {\n                    const operatorToken = sourceCode.getFirstTokenBetween(left, right, isConcatOperatorToken);\n\n                    context.report({\n                        node,\n                        loc: operatorToken.loc,\n                        messageId: \"unexpectedConcat\"\n                    });\n                }\n            }\n        };\n    }\n};\n /lib/rules/func-name-matching.js'/**\n * @fileoverview Rule to require function names to match the name of the variable or property to which they are assigned.\n * @author Annie Zhang, Pavel Strashkin\n */\n\n\"use strict\";\n\n//--------------------------------------------------------------------------\n// Requirements\n//--------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\nconst esutils = require(\"esutils\");\n\n//--------------------------------------------------------------------------\n// Helpers\n//--------------------------------------------------------------------------\n\n/**\n * Determines if a pattern is `module.exports` or `module[\"exports\"]`\n * @param {ASTNode} pattern The left side of the AssignmentExpression\n * @returns {boolean} True if the pattern is `module.exports` or `module[\"exports\"]`\n */\nfunction isModuleExports(pattern) {\n    if (pattern.type === \"MemberExpression\" && pattern.object.type === \"Identifier\" && pattern.object.name === \"module\") {\n\n        // module.exports\n        if (pattern.property.type === \"Identifier\" && pattern.property.name === \"exports\") {\n            return true;\n        }\n\n        // module[\"exports\"]\n        if (pattern.property.type === \"Literal\" && pattern.property.value === \"exports\") {\n            return true;\n        }\n    }\n    return false;\n}\n\n/**\n * Determines if a string name is a valid identifier\n * @param {string} name The string to be checked\n * @param {int} ecmaVersion The ECMAScript version if specified in the parserOptions config\n * @returns {boolean} True if the string is a valid identifier\n */\nfunction isIdentifier(name, ecmaVersion) {\n    if (ecmaVersion >= 6) {\n        return esutils.keyword.isIdentifierES6(name);\n    }\n    return esutils.keyword.isIdentifierES5(name);\n}\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\nconst alwaysOrNever = { enum: [\"always\", \"never\"] };\nconst optionsObject = {\n    type: \"object\",\n    properties: {\n        considerPropertyDescriptor: {\n            type: \"boolean\"\n        },\n        includeCommonJSModuleExports: {\n            type: \"boolean\"\n        }\n    },\n    additionalProperties: false\n};\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"require function names to match the name of the variable or property to which they are assigned\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/func-name-matching\"\n        },\n\n        schema: {\n            anyOf: [{\n                type: \"array\",\n                additionalItems: false,\n                items: [alwaysOrNever, optionsObject]\n            }, {\n                type: \"array\",\n                additionalItems: false,\n                items: [optionsObject]\n            }]\n        },\n\n        messages: {\n            matchProperty: \"Function name `{{funcName}}` should match property name `{{name}}`.\",\n            matchVariable: \"Function name `{{funcName}}` should match variable name `{{name}}`.\",\n            notMatchProperty: \"Function name `{{funcName}}` should not match property name `{{name}}`.\",\n            notMatchVariable: \"Function name `{{funcName}}` should not match variable name `{{name}}`.\"\n        }\n    },\n\n    create(context) {\n        const options = (typeof context.options[0] === \"object\" ? context.options[0] : context.options[1]) || {};\n        const nameMatches = typeof context.options[0] === \"string\" ? context.options[0] : \"always\";\n        const considerPropertyDescriptor = options.considerPropertyDescriptor;\n        const includeModuleExports = options.includeCommonJSModuleExports;\n        const ecmaVersion = context.parserOptions && context.parserOptions.ecmaVersion ? context.parserOptions.ecmaVersion : 5;\n\n        /**\n         * Check whether node is a certain CallExpression.\n         * @param {string} objName object name\n         * @param {string} funcName function name\n         * @param {ASTNode} node The node to check\n         * @returns {boolean} `true` if node matches CallExpression\n         */\n        function isPropertyCall(objName, funcName, node) {\n            if (!node) {\n                return false;\n            }\n            return node.type === \"CallExpression\" && astUtils.isSpecificMemberAccess(node.callee, objName, funcName);\n        }\n\n        /**\n         * Compares identifiers based on the nameMatches option\n         * @param {string} x the first identifier\n         * @param {string} y the second identifier\n         * @returns {boolean} whether the two identifiers should warn.\n         */\n        function shouldWarn(x, y) {\n            return (nameMatches === \"always\" && x !== y) || (nameMatches === \"never\" && x === y);\n        }\n\n        /**\n         * Reports\n         * @param {ASTNode} node The node to report\n         * @param {string} name The variable or property name\n         * @param {string} funcName The function name\n         * @param {boolean} isProp True if the reported node is a property assignment\n         * @returns {void}\n         */\n        function report(node, name, funcName, isProp) {\n            let messageId;\n\n            if (nameMatches === \"always\" && isProp) {\n                messageId = \"matchProperty\";\n            } else if (nameMatches === \"always\") {\n                messageId = \"matchVariable\";\n            } else if (isProp) {\n                messageId = \"notMatchProperty\";\n            } else {\n                messageId = \"notMatchVariable\";\n            }\n            context.report({\n                node,\n                messageId,\n                data: {\n                    name,\n                    funcName\n                }\n            });\n        }\n\n        /**\n         * Determines whether a given node is a string literal\n         * @param {ASTNode} node The node to check\n         * @returns {boolean} `true` if the node is a string literal\n         */\n        function isStringLiteral(node) {\n            return node.type === \"Literal\" && typeof node.value === \"string\";\n        }\n\n        //--------------------------------------------------------------------------\n        // Public\n        //--------------------------------------------------------------------------\n\n        return {\n            VariableDeclarator(node) {\n                if (!node.init || node.init.type !== \"FunctionExpression\" || node.id.type !== \"Identifier\") {\n                    return;\n                }\n                if (node.init.id && shouldWarn(node.id.name, node.init.id.name)) {\n                    report(node, node.id.name, node.init.id.name, false);\n                }\n            },\n\n            AssignmentExpression(node) {\n                if (\n                    node.right.type !== \"FunctionExpression\" ||\n                    (node.left.computed && node.left.property.type !== \"Literal\") ||\n                    (!includeModuleExports && isModuleExports(node.left)) ||\n                    (node.left.type !== \"Identifier\" && node.left.type !== \"MemberExpression\")\n                ) {\n                    return;\n                }\n\n                const isProp = node.left.type === \"MemberExpression\";\n                const name = isProp ? astUtils.getStaticPropertyName(node.left) : node.left.name;\n\n                if (node.right.id && name && isIdentifier(name) && shouldWarn(name, node.right.id.name)) {\n                    report(node, name, node.right.id.name, isProp);\n                }\n            },\n\n            \"Property, PropertyDefinition[value]\"(node) {\n                if (!(node.value.type === \"FunctionExpression\" && node.value.id)) {\n                    return;\n                }\n\n                if (node.key.type === \"Identifier\" && !node.computed) {\n                    const functionName = node.value.id.name;\n                    let propertyName = node.key.name;\n\n                    if (\n                        considerPropertyDescriptor &&\n                        propertyName === \"value\" &&\n                        node.parent.type === \"ObjectExpression\"\n                    ) {\n                        if (isPropertyCall(\"Object\", \"defineProperty\", node.parent.parent) || isPropertyCall(\"Reflect\", \"defineProperty\", node.parent.parent)) {\n                            const property = node.parent.parent.arguments[1];\n\n                            if (isStringLiteral(property) && shouldWarn(property.value, functionName)) {\n                                report(node, property.value, functionName, true);\n                            }\n                        } else if (isPropertyCall(\"Object\", \"defineProperties\", node.parent.parent.parent.parent)) {\n                            propertyName = node.parent.parent.key.name;\n                            if (!node.parent.parent.computed && shouldWarn(propertyName, functionName)) {\n                                report(node, propertyName, functionName, true);\n                            }\n                        } else if (isPropertyCall(\"Object\", \"create\", node.parent.parent.parent.parent)) {\n                            propertyName = node.parent.parent.key.name;\n                            if (!node.parent.parent.computed && shouldWarn(propertyName, functionName)) {\n                                report(node, propertyName, functionName, true);\n                            }\n                        } else if (shouldWarn(propertyName, functionName)) {\n                            report(node, propertyName, functionName, true);\n                        }\n                    } else if (shouldWarn(propertyName, functionName)) {\n                        report(node, propertyName, functionName, true);\n                    }\n                    return;\n                }\n\n                if (\n                    isStringLiteral(node.key) &&\n                    isIdentifier(node.key.value, ecmaVersion) &&\n                    shouldWarn(node.key.value, node.value.id.name)\n                ) {\n                    report(node, node.key.value, node.value.id.name, true);\n                }\n            }\n        };\n    }\n};\n%/lib/rules/no-irregular-whitespace.js%j/**\n * @fileoverview Rule to disallow whitespace that is not a tab or space, whitespace inside strings and comments are allowed\n * @author Jonathan Kingston\n * @author Christophe Porteneuve\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Constants\n//------------------------------------------------------------------------------\n\nconst ALL_IRREGULARS = /[\\f\\v\\u0085\\ufeff\\u00a0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u200b\\u202f\\u205f\\u3000\\u2028\\u2029]/u;\nconst IRREGULAR_WHITESPACE = /[\\f\\v\\u0085\\ufeff\\u00a0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u200b\\u202f\\u205f\\u3000]+/mgu;\nconst IRREGULAR_LINE_TERMINATORS = /[\\u2028\\u2029]/mgu;\nconst LINE_BREAK = astUtils.createGlobalLinebreakMatcher();\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"problem\",\n\n        docs: {\n            description: \"disallow irregular whitespace\",\n            recommended: true,\n            url: \"https://eslint.org/docs/rules/no-irregular-whitespace\"\n        },\n\n        schema: [\n            {\n                type: \"object\",\n                properties: {\n                    skipComments: {\n                        type: \"boolean\",\n                        default: false\n                    },\n                    skipStrings: {\n                        type: \"boolean\",\n                        default: true\n                    },\n                    skipTemplates: {\n                        type: \"boolean\",\n                        default: false\n                    },\n                    skipRegExps: {\n                        type: \"boolean\",\n                        default: false\n                    }\n                },\n                additionalProperties: false\n            }\n        ],\n\n        messages: {\n            noIrregularWhitespace: \"Irregular whitespace not allowed.\"\n        }\n    },\n\n    create(context) {\n\n        // Module store of errors that we have found\n        let errors = [];\n\n        // Lookup the `skipComments` option, which defaults to `false`.\n        const options = context.options[0] || {};\n        const skipComments = !!options.skipComments;\n        const skipStrings = options.skipStrings !== false;\n        const skipRegExps = !!options.skipRegExps;\n        const skipTemplates = !!options.skipTemplates;\n\n        const sourceCode = context.getSourceCode();\n        const commentNodes = sourceCode.getAllComments();\n\n        /**\n         * Removes errors that occur inside the given node\n         * @param {ASTNode} node to check for matching errors.\n         * @returns {void}\n         * @private\n         */\n        function removeWhitespaceError(node) {\n            const locStart = node.loc.start;\n            const locEnd = node.loc.end;\n\n            errors = errors.filter(({ loc: { start: errorLocStart } }) => (\n                errorLocStart.line < locStart.line ||\n                errorLocStart.line === locStart.line && errorLocStart.column < locStart.column ||\n                errorLocStart.line === locEnd.line && errorLocStart.column >= locEnd.column ||\n                errorLocStart.line > locEnd.line\n            ));\n        }\n\n        /**\n         * Checks identifier or literal nodes for errors that we are choosing to ignore and calls the relevant methods to remove the errors\n         * @param {ASTNode} node to check for matching errors.\n         * @returns {void}\n         * @private\n         */\n        function removeInvalidNodeErrorsInIdentifierOrLiteral(node) {\n            const shouldCheckStrings = skipStrings && (typeof node.value === \"string\");\n            const shouldCheckRegExps = skipRegExps && Boolean(node.regex);\n\n            if (shouldCheckStrings || shouldCheckRegExps) {\n\n                // If we have irregular characters remove them from the errors list\n                if (ALL_IRREGULARS.test(node.raw)) {\n                    removeWhitespaceError(node);\n                }\n            }\n        }\n\n        /**\n         * Checks template string literal nodes for errors that we are choosing to ignore and calls the relevant methods to remove the errors\n         * @param {ASTNode} node to check for matching errors.\n         * @returns {void}\n         * @private\n         */\n        function removeInvalidNodeErrorsInTemplateLiteral(node) {\n            if (typeof node.value.raw === \"string\") {\n                if (ALL_IRREGULARS.test(node.value.raw)) {\n                    removeWhitespaceError(node);\n                }\n            }\n        }\n\n        /**\n         * Checks comment nodes for errors that we are choosing to ignore and calls the relevant methods to remove the errors\n         * @param {ASTNode} node to check for matching errors.\n         * @returns {void}\n         * @private\n         */\n        function removeInvalidNodeErrorsInComment(node) {\n            if (ALL_IRREGULARS.test(node.value)) {\n                removeWhitespaceError(node);\n            }\n        }\n\n        /**\n         * Checks the program source for irregular whitespace\n         * @param {ASTNode} node The program node\n         * @returns {void}\n         * @private\n         */\n        function checkForIrregularWhitespace(node) {\n            const sourceLines = sourceCode.lines;\n\n            sourceLines.forEach((sourceLine, lineIndex) => {\n                const lineNumber = lineIndex + 1;\n                let match;\n\n                while ((match = IRREGULAR_WHITESPACE.exec(sourceLine)) !== null) {\n                    errors.push({\n                        node,\n                        messageId: \"noIrregularWhitespace\",\n                        loc: {\n                            start: {\n                                line: lineNumber,\n                                column: match.index\n                            },\n                            end: {\n                                line: lineNumber,\n                                column: match.index + match[0].length\n                            }\n                        }\n                    });\n                }\n            });\n        }\n\n        /**\n         * Checks the program source for irregular line terminators\n         * @param {ASTNode} node The program node\n         * @returns {void}\n         * @private\n         */\n        function checkForIrregularLineTerminators(node) {\n            const source = sourceCode.getText(),\n                sourceLines = sourceCode.lines,\n                linebreaks = source.match(LINE_BREAK);\n            let lastLineIndex = -1,\n                match;\n\n            while ((match = IRREGULAR_LINE_TERMINATORS.exec(source)) !== null) {\n                const lineIndex = linebreaks.indexOf(match[0], lastLineIndex + 1) || 0;\n\n                errors.push({\n                    node,\n                    messageId: \"noIrregularWhitespace\",\n                    loc: {\n                        start: {\n                            line: lineIndex + 1,\n                            column: sourceLines[lineIndex].length\n                        },\n                        end: {\n                            line: lineIndex + 2,\n                            column: 0\n                        }\n                    }\n                });\n\n                lastLineIndex = lineIndex;\n            }\n        }\n\n        /**\n         * A no-op function to act as placeholder for comment accumulation when the `skipComments` option is `false`.\n         * @returns {void}\n         * @private\n         */\n        function noop() {}\n\n        const nodes = {};\n\n        if (ALL_IRREGULARS.test(sourceCode.getText())) {\n            nodes.Program = function(node) {\n\n                /*\n                 * As we can easily fire warnings for all white space issues with\n                 * all the source its simpler to fire them here.\n                 * This means we can check all the application code without having\n                 * to worry about issues caused in the parser tokens.\n                 * When writing this code also evaluating per node was missing out\n                 * connecting tokens in some cases.\n                 * We can later filter the errors when they are found to be not an\n                 * issue in nodes we don't care about.\n                 */\n                checkForIrregularWhitespace(node);\n                checkForIrregularLineTerminators(node);\n            };\n\n            nodes.Identifier = removeInvalidNodeErrorsInIdentifierOrLiteral;\n            nodes.Literal = removeInvalidNodeErrorsInIdentifierOrLiteral;\n            nodes.TemplateElement = skipTemplates ? removeInvalidNodeErrorsInTemplateLiteral : noop;\n            nodes[\"Program:exit\"] = function() {\n                if (skipComments) {\n\n                    // First strip errors occurring in comment nodes.\n                    commentNodes.forEach(removeInvalidNodeErrorsInComment);\n                }\n\n                // If we have any errors remaining report on them\n                errors.forEach(error => context.report(error));\n            };\n        } else {\n            nodes.Program = noop;\n        }\n\n        return nodes;\n    }\n};\n-/lib/source-code/token-store/filter-cursor.js\u0004/**\n * @fileoverview Define the cursor which ignores specified tokens.\n * @author Toru Nagashima\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst DecorativeCursor = require(\"./decorative-cursor\");\n\n//------------------------------------------------------------------------------\n// Exports\n//------------------------------------------------------------------------------\n\n/**\n * The decorative cursor which ignores specified tokens.\n */\nmodule.exports = class FilterCursor extends DecorativeCursor {\n\n    /**\n     * Initializes this cursor.\n     * @param {Cursor} cursor The cursor to be decorated.\n     * @param {Function} predicate The predicate function to decide tokens this cursor iterates.\n     */\n    constructor(cursor, predicate) {\n        super(cursor);\n        this.predicate = predicate;\n    }\n\n    /** @inheritdoc */\n    moveNext() {\n        const predicate = this.predicate;\n\n        while (super.moveNext()) {\n            if (predicate(this.current)) {\n                return true;\n            }\n        }\n        return false;\n    }\n};\n/lib/rules/no-nested-ternary.js\u0004s/**\n * @fileoverview Rule to flag nested ternary expressions\n * @author Ian Christian Myers\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow nested ternary expressions\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-nested-ternary\"\n        },\n\n        schema: [],\n\n        messages: {\n            noNestedTernary: \"Do not nest ternary expressions.\"\n        }\n    },\n\n    create(context) {\n\n        return {\n            ConditionalExpression(node) {\n                if (node.alternate.type === \"ConditionalExpression\" ||\n                        node.consequent.type === \"ConditionalExpression\") {\n                    context.report({\n                        node,\n                        messageId: \"noNestedTernary\"\n                    });\n                }\n            }\n        };\n    }\n};\n/lib/rules/space-in-parens.js)/**\n * @fileoverview Disallows or enforces spaces inside of parentheses.\n * @author Jonathan Rajavuori\n */\n\"use strict\";\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"layout\",\n\n        docs: {\n            description: \"enforce consistent spacing inside parentheses\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/space-in-parens\"\n        },\n\n        fixable: \"whitespace\",\n\n        schema: [\n            {\n                enum: [\"always\", \"never\"]\n            },\n            {\n                type: \"object\",\n                properties: {\n                    exceptions: {\n                        type: \"array\",\n                        items: {\n                            enum: [\"{}\", \"[]\", \"()\", \"empty\"]\n                        },\n                        uniqueItems: true\n                    }\n                },\n                additionalProperties: false\n            }\n        ],\n\n        messages: {\n            missingOpeningSpace: \"There must be a space after this paren.\",\n            missingClosingSpace: \"There must be a space before this paren.\",\n            rejectedOpeningSpace: \"There should be no space after this paren.\",\n            rejectedClosingSpace: \"There should be no space before this paren.\"\n        }\n    },\n\n    create(context) {\n        const ALWAYS = context.options[0] === \"always\",\n            exceptionsArrayOptions = (context.options[1] && context.options[1].exceptions) || [],\n            options = {};\n\n        let exceptions;\n\n        if (exceptionsArrayOptions.length) {\n            options.braceException = exceptionsArrayOptions.includes(\"{}\");\n            options.bracketException = exceptionsArrayOptions.includes(\"[]\");\n            options.parenException = exceptionsArrayOptions.includes(\"()\");\n            options.empty = exceptionsArrayOptions.includes(\"empty\");\n        }\n\n        /**\n         * Produces an object with the opener and closer exception values\n         * @returns {Object} `openers` and `closers` exception values\n         * @private\n         */\n        function getExceptions() {\n            const openers = [],\n                closers = [];\n\n            if (options.braceException) {\n                openers.push(\"{\");\n                closers.push(\"}\");\n            }\n\n            if (options.bracketException) {\n                openers.push(\"[\");\n                closers.push(\"]\");\n            }\n\n            if (options.parenException) {\n                openers.push(\"(\");\n                closers.push(\")\");\n            }\n\n            if (options.empty) {\n                openers.push(\")\");\n                closers.push(\"(\");\n            }\n\n            return {\n                openers,\n                closers\n            };\n        }\n\n        //--------------------------------------------------------------------------\n        // Helpers\n        //--------------------------------------------------------------------------\n        const sourceCode = context.getSourceCode();\n\n        /**\n         * Determines if a token is one of the exceptions for the opener paren\n         * @param {Object} token The token to check\n         * @returns {boolean} True if the token is one of the exceptions for the opener paren\n         */\n        function isOpenerException(token) {\n            return exceptions.openers.includes(token.value);\n        }\n\n        /**\n         * Determines if a token is one of the exceptions for the closer paren\n         * @param {Object} token The token to check\n         * @returns {boolean} True if the token is one of the exceptions for the closer paren\n         */\n        function isCloserException(token) {\n            return exceptions.closers.includes(token.value);\n        }\n\n        /**\n         * Determines if an opening paren is immediately followed by a required space\n         * @param {Object} openingParenToken The paren token\n         * @param {Object} tokenAfterOpeningParen The token after it\n         * @returns {boolean} True if the opening paren is missing a required space\n         */\n        function openerMissingSpace(openingParenToken, tokenAfterOpeningParen) {\n            if (sourceCode.isSpaceBetweenTokens(openingParenToken, tokenAfterOpeningParen)) {\n                return false;\n            }\n\n            if (!options.empty && astUtils.isClosingParenToken(tokenAfterOpeningParen)) {\n                return false;\n            }\n\n            if (ALWAYS) {\n                return !isOpenerException(tokenAfterOpeningParen);\n            }\n            return isOpenerException(tokenAfterOpeningParen);\n        }\n\n        /**\n         * Determines if an opening paren is immediately followed by a disallowed space\n         * @param {Object} openingParenToken The paren token\n         * @param {Object} tokenAfterOpeningParen The token after it\n         * @returns {boolean} True if the opening paren has a disallowed space\n         */\n        function openerRejectsSpace(openingParenToken, tokenAfterOpeningParen) {\n            if (!astUtils.isTokenOnSameLine(openingParenToken, tokenAfterOpeningParen)) {\n                return false;\n            }\n\n            if (tokenAfterOpeningParen.type === \"Line\") {\n                return false;\n            }\n\n            if (!sourceCode.isSpaceBetweenTokens(openingParenToken, tokenAfterOpeningParen)) {\n                return false;\n            }\n\n            if (ALWAYS) {\n                return isOpenerException(tokenAfterOpeningParen);\n            }\n            return !isOpenerException(tokenAfterOpeningParen);\n        }\n\n        /**\n         * Determines if a closing paren is immediately preceded by a required space\n         * @param {Object} tokenBeforeClosingParen The token before the paren\n         * @param {Object} closingParenToken The paren token\n         * @returns {boolean} True if the closing paren is missing a required space\n         */\n        function closerMissingSpace(tokenBeforeClosingParen, closingParenToken) {\n            if (sourceCode.isSpaceBetweenTokens(tokenBeforeClosingParen, closingParenToken)) {\n                return false;\n            }\n\n            if (!options.empty && astUtils.isOpeningParenToken(tokenBeforeClosingParen)) {\n                return false;\n            }\n\n            if (ALWAYS) {\n                return !isCloserException(tokenBeforeClosingParen);\n            }\n            return isCloserException(tokenBeforeClosingParen);\n        }\n\n        /**\n         * Determines if a closer paren is immediately preceded by a disallowed space\n         * @param {Object} tokenBeforeClosingParen The token before the paren\n         * @param {Object} closingParenToken The paren token\n         * @returns {boolean} True if the closing paren has a disallowed space\n         */\n        function closerRejectsSpace(tokenBeforeClosingParen, closingParenToken) {\n            if (!astUtils.isTokenOnSameLine(tokenBeforeClosingParen, closingParenToken)) {\n                return false;\n            }\n\n            if (!sourceCode.isSpaceBetweenTokens(tokenBeforeClosingParen, closingParenToken)) {\n                return false;\n            }\n\n            if (ALWAYS) {\n                return isCloserException(tokenBeforeClosingParen);\n            }\n            return !isCloserException(tokenBeforeClosingParen);\n        }\n\n        //--------------------------------------------------------------------------\n        // Public\n        //--------------------------------------------------------------------------\n\n        return {\n            Program: function checkParenSpaces(node) {\n                exceptions = getExceptions();\n                const tokens = sourceCode.tokensAndComments;\n\n                tokens.forEach((token, i) => {\n                    const prevToken = tokens[i - 1];\n                    const nextToken = tokens[i + 1];\n\n                    // if token is not an opening or closing paren token, do nothing\n                    if (!astUtils.isOpeningParenToken(token) && !astUtils.isClosingParenToken(token)) {\n                        return;\n                    }\n\n                    // if token is an opening paren and is not followed by a required space\n                    if (token.value === \"(\" && openerMissingSpace(token, nextToken)) {\n                        context.report({\n                            node,\n                            loc: token.loc,\n                            messageId: \"missingOpeningSpace\",\n                            fix(fixer) {\n                                return fixer.insertTextAfter(token, \" \");\n                            }\n                        });\n                    }\n\n                    // if token is an opening paren and is followed by a disallowed space\n                    if (token.value === \"(\" && openerRejectsSpace(token, nextToken)) {\n                        context.report({\n                            node,\n                            loc: { start: token.loc.end, end: nextToken.loc.start },\n                            messageId: \"rejectedOpeningSpace\",\n                            fix(fixer) {\n                                return fixer.removeRange([token.range[1], nextToken.range[0]]);\n                            }\n                        });\n                    }\n\n                    // if token is a closing paren and is not preceded by a required space\n                    if (token.value === \")\" && closerMissingSpace(prevToken, token)) {\n                        context.report({\n                            node,\n                            loc: token.loc,\n                            messageId: \"missingClosingSpace\",\n                            fix(fixer) {\n                                return fixer.insertTextBefore(token, \" \");\n                            }\n                        });\n                    }\n\n                    // if token is a closing paren and is preceded by a disallowed space\n                    if (token.value === \")\" && closerRejectsSpace(prevToken, token)) {\n                        context.report({\n                            node,\n                            loc: { start: prevToken.loc.end, end: token.loc.start },\n                            messageId: \"rejectedClosingSpace\",\n                            fix(fixer) {\n                                return fixer.removeRange([prevToken.range[1], token.range[0]]);\n                            }\n                        });\n                    }\n                });\n            }\n        };\n    }\n};\n/lib/rules/no-throw-literal.js\u0005\u0013/**\n * @fileoverview Rule to restrict what can be thrown as an exception.\n * @author Dieter Oberkofler\n */\n\n\"use strict\";\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow throwing literals as exceptions\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-throw-literal\"\n        },\n\n        schema: [],\n\n        messages: {\n            object: \"Expected an error object to be thrown.\",\n            undef: \"Do not throw undefined.\"\n        }\n    },\n\n    create(context) {\n\n        return {\n\n            ThrowStatement(node) {\n                if (!astUtils.couldBeError(node.argument)) {\n                    context.report({ node, messageId: \"object\" });\n                } else if (node.argument.type === \"Identifier\") {\n                    if (node.argument.name === \"undefined\") {\n                        context.report({ node, messageId: \"undef\" });\n                    }\n                }\n\n            }\n\n        };\n\n    }\n};\n/lib/rules/comma-dangle.js0/**\n * @fileoverview Rule to forbid or enforce dangling commas.\n * @author Ian Christian Myers\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\nconst DEFAULT_OPTIONS = Object.freeze({\n    arrays: \"never\",\n    objects: \"never\",\n    imports: \"never\",\n    exports: \"never\",\n    functions: \"never\"\n});\n\n/**\n * Checks whether or not a trailing comma is allowed in a given node.\n * If the `lastItem` is `RestElement` or `RestProperty`, it disallows trailing commas.\n * @param {ASTNode} lastItem The node of the last element in the given node.\n * @returns {boolean} `true` if a trailing comma is allowed.\n */\nfunction isTrailingCommaAllowed(lastItem) {\n    return !(\n        lastItem.type === \"RestElement\" ||\n        lastItem.type === \"RestProperty\" ||\n        lastItem.type === \"ExperimentalRestProperty\"\n    );\n}\n\n/**\n * Normalize option value.\n * @param {string|Object|undefined} optionValue The 1st option value to normalize.\n * @param {number} ecmaVersion The normalized ECMAScript version.\n * @returns {Object} The normalized option value.\n */\nfunction normalizeOptions(optionValue, ecmaVersion) {\n    if (typeof optionValue === \"string\") {\n        return {\n            arrays: optionValue,\n            objects: optionValue,\n            imports: optionValue,\n            exports: optionValue,\n            functions: (!ecmaVersion || ecmaVersion < 8) ? \"ignore\" : optionValue\n        };\n    }\n    if (typeof optionValue === \"object\" && optionValue !== null) {\n        return {\n            arrays: optionValue.arrays || DEFAULT_OPTIONS.arrays,\n            objects: optionValue.objects || DEFAULT_OPTIONS.objects,\n            imports: optionValue.imports || DEFAULT_OPTIONS.imports,\n            exports: optionValue.exports || DEFAULT_OPTIONS.exports,\n            functions: optionValue.functions || DEFAULT_OPTIONS.functions\n        };\n    }\n\n    return DEFAULT_OPTIONS;\n}\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"layout\",\n\n        docs: {\n            description: \"require or disallow trailing commas\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/comma-dangle\"\n        },\n\n        fixable: \"code\",\n\n        schema: {\n            definitions: {\n                value: {\n                    enum: [\n                        \"always-multiline\",\n                        \"always\",\n                        \"never\",\n                        \"only-multiline\"\n                    ]\n                },\n                valueWithIgnore: {\n                    enum: [\n                        \"always-multiline\",\n                        \"always\",\n                        \"ignore\",\n                        \"never\",\n                        \"only-multiline\"\n                    ]\n                }\n            },\n            type: \"array\",\n            items: [\n                {\n                    oneOf: [\n                        {\n                            $ref: \"#/definitions/value\"\n                        },\n                        {\n                            type: \"object\",\n                            properties: {\n                                arrays: { $ref: \"#/definitions/valueWithIgnore\" },\n                                objects: { $ref: \"#/definitions/valueWithIgnore\" },\n                                imports: { $ref: \"#/definitions/valueWithIgnore\" },\n                                exports: { $ref: \"#/definitions/valueWithIgnore\" },\n                                functions: { $ref: \"#/definitions/valueWithIgnore\" }\n                            },\n                            additionalProperties: false\n                        }\n                    ]\n                }\n            ],\n            additionalItems: false\n        },\n\n        messages: {\n            unexpected: \"Unexpected trailing comma.\",\n            missing: \"Missing trailing comma.\"\n        }\n    },\n\n    create(context) {\n        const options = normalizeOptions(context.options[0], context.parserOptions.ecmaVersion);\n\n        const sourceCode = context.getSourceCode();\n\n        /**\n         * Gets the last item of the given node.\n         * @param {ASTNode} node The node to get.\n         * @returns {ASTNode|null} The last node or null.\n         */\n        function getLastItem(node) {\n\n            /**\n             * Returns the last element of an array\n             * @param {any[]} array The input array\n             * @returns {any} The last element\n             */\n            function last(array) {\n                return array[array.length - 1];\n            }\n\n            switch (node.type) {\n                case \"ObjectExpression\":\n                case \"ObjectPattern\":\n                    return last(node.properties);\n                case \"ArrayExpression\":\n                case \"ArrayPattern\":\n                    return last(node.elements);\n                case \"ImportDeclaration\":\n                case \"ExportNamedDeclaration\":\n                    return last(node.specifiers);\n                case \"FunctionDeclaration\":\n                case \"FunctionExpression\":\n                case \"ArrowFunctionExpression\":\n                    return last(node.params);\n                case \"CallExpression\":\n                case \"NewExpression\":\n                    return last(node.arguments);\n                default:\n                    return null;\n            }\n        }\n\n        /**\n         * Gets the trailing comma token of the given node.\n         * If the trailing comma does not exist, this returns the token which is\n         * the insertion point of the trailing comma token.\n         * @param {ASTNode} node The node to get.\n         * @param {ASTNode} lastItem The last item of the node.\n         * @returns {Token} The trailing comma token or the insertion point.\n         */\n        function getTrailingToken(node, lastItem) {\n            switch (node.type) {\n                case \"ObjectExpression\":\n                case \"ArrayExpression\":\n                case \"CallExpression\":\n                case \"NewExpression\":\n                    return sourceCode.getLastToken(node, 1);\n                default: {\n                    const nextToken = sourceCode.getTokenAfter(lastItem);\n\n                    if (astUtils.isCommaToken(nextToken)) {\n                        return nextToken;\n                    }\n                    return sourceCode.getLastToken(lastItem);\n                }\n            }\n        }\n\n        /**\n         * Checks whether or not a given node is multiline.\n         * This rule handles a given node as multiline when the closing parenthesis\n         * and the last element are not on the same line.\n         * @param {ASTNode} node A node to check.\n         * @returns {boolean} `true` if the node is multiline.\n         */\n        function isMultiline(node) {\n            const lastItem = getLastItem(node);\n\n            if (!lastItem) {\n                return false;\n            }\n\n            const penultimateToken = getTrailingToken(node, lastItem);\n            const lastToken = sourceCode.getTokenAfter(penultimateToken);\n\n            return lastToken.loc.end.line !== penultimateToken.loc.end.line;\n        }\n\n        /**\n         * Reports a trailing comma if it exists.\n         * @param {ASTNode} node A node to check. Its type is one of\n         *   ObjectExpression, ObjectPattern, ArrayExpression, ArrayPattern,\n         *   ImportDeclaration, and ExportNamedDeclaration.\n         * @returns {void}\n         */\n        function forbidTrailingComma(node) {\n            const lastItem = getLastItem(node);\n\n            if (!lastItem || (node.type === \"ImportDeclaration\" && lastItem.type !== \"ImportSpecifier\")) {\n                return;\n            }\n\n            const trailingToken = getTrailingToken(node, lastItem);\n\n            if (astUtils.isCommaToken(trailingToken)) {\n                context.report({\n                    node: lastItem,\n                    loc: trailingToken.loc,\n                    messageId: \"unexpected\",\n                    fix(fixer) {\n                        return fixer.remove(trailingToken);\n                    }\n                });\n            }\n        }\n\n        /**\n         * Reports the last element of a given node if it does not have a trailing\n         * comma.\n         *\n         * If a given node is `ArrayPattern` which has `RestElement`, the trailing\n         * comma is disallowed, so report if it exists.\n         * @param {ASTNode} node A node to check. Its type is one of\n         *   ObjectExpression, ObjectPattern, ArrayExpression, ArrayPattern,\n         *   ImportDeclaration, and ExportNamedDeclaration.\n         * @returns {void}\n         */\n        function forceTrailingComma(node) {\n            const lastItem = getLastItem(node);\n\n            if (!lastItem || (node.type === \"ImportDeclaration\" && lastItem.type !== \"ImportSpecifier\")) {\n                return;\n            }\n            if (!isTrailingCommaAllowed(lastItem)) {\n                forbidTrailingComma(node);\n                return;\n            }\n\n            const trailingToken = getTrailingToken(node, lastItem);\n\n            if (trailingToken.value !== \",\") {\n                context.report({\n                    node: lastItem,\n                    loc: {\n                        start: trailingToken.loc.end,\n                        end: astUtils.getNextLocation(sourceCode, trailingToken.loc.end)\n                    },\n                    messageId: \"missing\",\n                    fix(fixer) {\n                        return fixer.insertTextAfter(trailingToken, \",\");\n                    }\n                });\n            }\n        }\n\n        /**\n         * If a given node is multiline, reports the last element of a given node\n         * when it does not have a trailing comma.\n         * Otherwise, reports a trailing comma if it exists.\n         * @param {ASTNode} node A node to check. Its type is one of\n         *   ObjectExpression, ObjectPattern, ArrayExpression, ArrayPattern,\n         *   ImportDeclaration, and ExportNamedDeclaration.\n         * @returns {void}\n         */\n        function forceTrailingCommaIfMultiline(node) {\n            if (isMultiline(node)) {\n                forceTrailingComma(node);\n            } else {\n                forbidTrailingComma(node);\n            }\n        }\n\n        /**\n         * Only if a given node is not multiline, reports the last element of a given node\n         * when it does not have a trailing comma.\n         * Otherwise, reports a trailing comma if it exists.\n         * @param {ASTNode} node A node to check. Its type is one of\n         *   ObjectExpression, ObjectPattern, ArrayExpression, ArrayPattern,\n         *   ImportDeclaration, and ExportNamedDeclaration.\n         * @returns {void}\n         */\n        function allowTrailingCommaIfMultiline(node) {\n            if (!isMultiline(node)) {\n                forbidTrailingComma(node);\n            }\n        }\n\n        const predicate = {\n            always: forceTrailingComma,\n            \"always-multiline\": forceTrailingCommaIfMultiline,\n            \"only-multiline\": allowTrailingCommaIfMultiline,\n            never: forbidTrailingComma,\n            ignore: () => {}\n        };\n\n        return {\n            ObjectExpression: predicate[options.objects],\n            ObjectPattern: predicate[options.objects],\n\n            ArrayExpression: predicate[options.arrays],\n            ArrayPattern: predicate[options.arrays],\n\n            ImportDeclaration: predicate[options.imports],\n\n            ExportNamedDeclaration: predicate[options.exports],\n\n            FunctionDeclaration: predicate[options.functions],\n            FunctionExpression: predicate[options.functions],\n            ArrowFunctionExpression: predicate[options.functions],\n            CallExpression: predicate[options.functions],\n            NewExpression: predicate[options.functions]\n        };\n    }\n};\n/lib/rules/id-blacklist.js\u001d/**\n * @fileoverview Rule that warns when identifier names that are\n * specified in the configuration are used.\n * @author Keith Cirkel (http://keithcirkel.co.uk)\n * @deprecated in ESLint v7.5.0\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\n/**\n * Checks whether the given node represents assignment target in a normal assignment or destructuring.\n * @param {ASTNode} node The node to check.\n * @returns {boolean} `true` if the node is assignment target.\n */\nfunction isAssignmentTarget(node) {\n    const parent = node.parent;\n\n    return (\n\n        // normal assignment\n        (\n            parent.type === \"AssignmentExpression\" &&\n            parent.left === node\n        ) ||\n\n        // destructuring\n        parent.type === \"ArrayPattern\" ||\n        parent.type === \"RestElement\" ||\n        (\n            parent.type === \"Property\" &&\n            parent.value === node &&\n            parent.parent.type === \"ObjectPattern\"\n        ) ||\n        (\n            parent.type === \"AssignmentPattern\" &&\n            parent.left === node\n        )\n    );\n}\n\n/**\n * Checks whether the given node represents an imported name that is renamed in the same import/export specifier.\n *\n * Examples:\n * import { a as b } from 'mod'; // node `a` is renamed import\n * export { a as b } from 'mod'; // node `a` is renamed import\n * @param {ASTNode} node `Identifier` node to check.\n * @returns {boolean} `true` if the node is a renamed import.\n */\nfunction isRenamedImport(node) {\n    const parent = node.parent;\n\n    return (\n        (\n            parent.type === \"ImportSpecifier\" &&\n            parent.imported !== parent.local &&\n            parent.imported === node\n        ) ||\n        (\n            parent.type === \"ExportSpecifier\" &&\n            parent.parent.source && // re-export\n            parent.local !== parent.exported &&\n            parent.local === node\n        )\n    );\n}\n\n/**\n * Checks whether the given node is a renamed identifier node in an ObjectPattern destructuring.\n *\n * Examples:\n * const { a : b } = foo; // node `a` is renamed node.\n * @param {ASTNode} node `Identifier` node to check.\n * @returns {boolean} `true` if the node is a renamed node in an ObjectPattern destructuring.\n */\nfunction isRenamedInDestructuring(node) {\n    const parent = node.parent;\n\n    return (\n        (\n            !parent.computed &&\n            parent.type === \"Property\" &&\n            parent.parent.type === \"ObjectPattern\" &&\n            parent.value !== node &&\n            parent.key === node\n        )\n    );\n}\n\n/**\n * Checks whether the given node represents shorthand definition of a property in an object literal.\n * @param {ASTNode} node `Identifier` node to check.\n * @returns {boolean} `true` if the node is a shorthand property definition.\n */\nfunction isShorthandPropertyDefinition(node) {\n    const parent = node.parent;\n\n    return (\n        parent.type === \"Property\" &&\n        parent.parent.type === \"ObjectExpression\" &&\n        parent.shorthand\n    );\n}\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        deprecated: true,\n        replacedBy: [\"id-denylist\"],\n\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow specified identifiers\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/id-blacklist\"\n        },\n\n        schema: {\n            type: \"array\",\n            items: {\n                type: \"string\"\n            },\n            uniqueItems: true\n        },\n        messages: {\n            restricted: \"Identifier '{{name}}' is restricted.\"\n        }\n    },\n\n    create(context) {\n\n        const denyList = new Set(context.options);\n        const reportedNodes = new Set();\n\n        let globalScope;\n\n        /**\n         * Checks whether the given name is restricted.\n         * @param {string} name The name to check.\n         * @returns {boolean} `true` if the name is restricted.\n         * @private\n         */\n        function isRestricted(name) {\n            return denyList.has(name);\n        }\n\n        /**\n         * Checks whether the given node represents a reference to a global variable that is not declared in the source code.\n         * These identifiers will be allowed, as it is assumed that user has no control over the names of external global variables.\n         * @param {ASTNode} node `Identifier` node to check.\n         * @returns {boolean} `true` if the node is a reference to a global variable.\n         */\n        function isReferenceToGlobalVariable(node) {\n            const variable = globalScope.set.get(node.name);\n\n            return variable && variable.defs.length === 0 &&\n                variable.references.some(ref => ref.identifier === node);\n        }\n\n        /**\n         * Determines whether the given node should be checked.\n         * @param {ASTNode} node `Identifier` node.\n         * @returns {boolean} `true` if the node should be checked.\n         */\n        function shouldCheck(node) {\n            const parent = node.parent;\n\n            /*\n             * Member access has special rules for checking property names.\n             * Read access to a property with a restricted name is allowed, because it can be on an object that user has no control over.\n             * Write access isn't allowed, because it potentially creates a new property with a restricted name.\n             */\n            if (\n                parent.type === \"MemberExpression\" &&\n                parent.property === node &&\n                !parent.computed\n            ) {\n                return isAssignmentTarget(parent);\n            }\n\n            return (\n                parent.type !== \"CallExpression\" &&\n                parent.type !== \"NewExpression\" &&\n                !isRenamedImport(node) &&\n                !isRenamedInDestructuring(node) &&\n                !(\n                    isReferenceToGlobalVariable(node) &&\n                    !isShorthandPropertyDefinition(node)\n                )\n            );\n        }\n\n        /**\n         * Reports an AST node as a rule violation.\n         * @param {ASTNode} node The node to report.\n         * @returns {void}\n         * @private\n         */\n        function report(node) {\n\n            /*\n             * We used the range instead of the node because it's possible\n             * for the same identifier to be represented by two different\n             * nodes, with the most clear example being shorthand properties:\n             * { foo }\n             * In this case, \"foo\" is represented by one node for the name\n             * and one for the value. The only way to know they are the same\n             * is to look at the range.\n             */\n            if (!reportedNodes.has(node.range.toString())) {\n                context.report({\n                    node,\n                    messageId: \"restricted\",\n                    data: {\n                        name: node.name\n                    }\n                });\n                reportedNodes.add(node.range.toString());\n            }\n\n        }\n\n        return {\n\n            Program() {\n                globalScope = context.getScope();\n            },\n\n            Identifier(node) {\n                if (isRestricted(node.name) && shouldCheck(node)) {\n                    report(node);\n                }\n            }\n        };\n    }\n};\n/lib/rules/no-proto.js\u0004/**\n * @fileoverview Rule to flag usage of __proto__ property\n * @author Ilya Volodin\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst { getStaticPropertyName } = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow the use of the `__proto__` property\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-proto\"\n        },\n\n        schema: [],\n\n        messages: {\n            unexpectedProto: \"The '__proto__' property is deprecated.\"\n        }\n    },\n\n    create(context) {\n\n        return {\n\n            MemberExpression(node) {\n                if (getStaticPropertyName(node) === \"__proto__\") {\n                    context.report({ node, messageId: \"unexpectedProto\" });\n                }\n            }\n        };\n\n    }\n};\n /lib/config/flat-config-array.js\u0011/**\n * @fileoverview Flat Config Array\n * @author Nicholas C. Zakas\n */\n\n\"use strict\";\n\n//-----------------------------------------------------------------------------\n// Requirements\n//-----------------------------------------------------------------------------\n\nconst { ConfigArray, ConfigArraySymbol } = require(\"@humanwhocodes/config-array\");\nconst { flatConfigSchema } = require(\"./flat-config-schema\");\nconst { RuleValidator } = require(\"./rule-validator\");\nconst { defaultConfig } = require(\"./default-config\");\nconst recommendedConfig = require(\"../../conf/eslint-recommended\");\nconst allConfig = require(\"../../conf/eslint-all\");\n\n//-----------------------------------------------------------------------------\n// Helpers\n//-----------------------------------------------------------------------------\n\nconst ruleValidator = new RuleValidator();\n\n/**\n * Splits a plugin identifier in the form a/b/c into two parts: a/b and c.\n * @param {string} identifier The identifier to parse.\n * @returns {{objectName: string, pluginName: string}} The parts of the plugin\n *      name.\n */\nfunction splitPluginIdentifier(identifier) {\n    const parts = identifier.split(\"/\");\n\n    return {\n        objectName: parts.pop(),\n        pluginName: parts.join(\"/\")\n    };\n}\n\n//-----------------------------------------------------------------------------\n// Exports\n//-----------------------------------------------------------------------------\n\n/**\n * Represents an array containing configuration information for ESLint.\n */\nclass FlatConfigArray extends ConfigArray {\n\n    /**\n     * Creates a new instance.\n     * @param {*[]} configs An array of configuration information.\n     * @param {{basePath: string, baseConfig: FlatConfig}} options The options\n     *      to use for the config array instance.\n     */\n    constructor(configs, { basePath, baseConfig = defaultConfig } = {}) {\n        super(configs, {\n            basePath,\n            schema: flatConfigSchema\n        });\n\n        if (baseConfig[Symbol.iterator]) {\n            this.unshift(...baseConfig);\n        } else {\n            this.unshift(baseConfig);\n        }\n    }\n\n    /* eslint-disable class-methods-use-this -- Desired as instance method */\n    /**\n     * Replaces a config with another config to allow us to put strings\n     * in the config array that will be replaced by objects before\n     * normalization.\n     * @param {Object} config The config to preprocess.\n     * @returns {Object} The preprocessed config.\n     */\n    [ConfigArraySymbol.preprocessConfig](config) {\n        if (config === \"eslint:recommended\") {\n            return recommendedConfig;\n        }\n\n        if (config === \"eslint:all\") {\n            return allConfig;\n        }\n\n        return config;\n    }\n\n    /**\n     * Finalizes the config by replacing plugin references with their objects\n     * and validating rule option schemas.\n     * @param {Object} config The config to finalize.\n     * @returns {Object} The finalized config.\n     * @throws {TypeError} If the config is invalid.\n     */\n    [ConfigArraySymbol.finalizeConfig](config) {\n\n        const { plugins, languageOptions, processor } = config;\n\n        // Check parser value\n        if (languageOptions && languageOptions.parser && typeof languageOptions.parser === \"string\") {\n            const { pluginName, objectName: parserName } = splitPluginIdentifier(languageOptions.parser);\n\n            if (!plugins || !plugins[pluginName] || !plugins[pluginName].parsers || !plugins[pluginName].parsers[parserName]) {\n                throw new TypeError(`Key \"parser\": Could not find \"${parserName}\" in plugin \"${pluginName}\".`);\n            }\n\n            languageOptions.parser = plugins[pluginName].parsers[parserName];\n        }\n\n        // Check processor value\n        if (processor && typeof processor === \"string\") {\n            const { pluginName, objectName: processorName } = splitPluginIdentifier(processor);\n\n            if (!plugins || !plugins[pluginName] || !plugins[pluginName].processors || !plugins[pluginName].processors[processorName]) {\n                throw new TypeError(`Key \"processor\": Could not find \"${processorName}\" in plugin \"${pluginName}\".`);\n            }\n\n            config.processor = plugins[pluginName].processors[processorName];\n        }\n\n        ruleValidator.validate(config);\n\n        return config;\n    }\n    /* eslint-enable class-methods-use-this -- Desired as instance method */\n\n}\n\nexports.FlatConfigArray = FlatConfigArray;\n&/lib/rules/implicit-arrow-linebreak.js\u000b2/**\n * @fileoverview enforce the location of arrow function bodies\n * @author Sharmila Jesupaul\n */\n\"use strict\";\n\nconst { isCommentToken, isNotOpeningParenToken } = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"layout\",\n\n        docs: {\n            description: \"enforce the location of arrow function bodies\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/implicit-arrow-linebreak\"\n        },\n\n        fixable: \"whitespace\",\n\n        schema: [\n            {\n                enum: [\"beside\", \"below\"]\n            }\n        ],\n        messages: {\n            expected: \"Expected a linebreak before this expression.\",\n            unexpected: \"Expected no linebreak before this expression.\"\n        }\n    },\n\n    create(context) {\n        const sourceCode = context.getSourceCode();\n        const option = context.options[0] || \"beside\";\n\n        /**\n         * Validates the location of an arrow function body\n         * @param {ASTNode} node The arrow function body\n         * @returns {void}\n         */\n        function validateExpression(node) {\n            if (node.body.type === \"BlockStatement\") {\n                return;\n            }\n\n            const arrowToken = sourceCode.getTokenBefore(node.body, isNotOpeningParenToken);\n            const firstTokenOfBody = sourceCode.getTokenAfter(arrowToken);\n\n            if (arrowToken.loc.end.line === firstTokenOfBody.loc.start.line && option === \"below\") {\n                context.report({\n                    node: firstTokenOfBody,\n                    messageId: \"expected\",\n                    fix: fixer => fixer.insertTextBefore(firstTokenOfBody, \"\\n\")\n                });\n            } else if (arrowToken.loc.end.line !== firstTokenOfBody.loc.start.line && option === \"beside\") {\n                context.report({\n                    node: firstTokenOfBody,\n                    messageId: \"unexpected\",\n                    fix(fixer) {\n                        if (sourceCode.getFirstTokenBetween(arrowToken, firstTokenOfBody, { includeComments: true, filter: isCommentToken })) {\n                            return null;\n                        }\n\n                        return fixer.replaceTextRange([arrowToken.range[1], firstTokenOfBody.range[0]], \" \");\n                    }\n                });\n            }\n        }\n\n        //----------------------------------------------------------------------\n        // Public\n        //----------------------------------------------------------------------\n        return {\n            ArrowFunctionExpression: node => validateExpression(node)\n        };\n    }\n};\n/conf/eslint-recommended.js\n7/**\n * @fileoverview Configuration applied when a user configuration extends from\n * eslint:recommended.\n * @author Nicholas C. Zakas\n */\n\n\"use strict\";\n\n/* eslint sort-keys: [\"error\", \"asc\"] -- Long, so make more readable */\n\n/** @type {import(\"../lib/shared/types\").ConfigData} */\nmodule.exports = {\n    rules: {\n        \"constructor-super\": \"error\",\n        \"for-direction\": \"error\",\n        \"getter-return\": \"error\",\n        \"no-async-promise-executor\": \"error\",\n        \"no-case-declarations\": \"error\",\n        \"no-class-assign\": \"error\",\n        \"no-compare-neg-zero\": \"error\",\n        \"no-cond-assign\": \"error\",\n        \"no-const-assign\": \"error\",\n        \"no-constant-condition\": \"error\",\n        \"no-control-regex\": \"error\",\n        \"no-debugger\": \"error\",\n        \"no-delete-var\": \"error\",\n        \"no-dupe-args\": \"error\",\n        \"no-dupe-class-members\": \"error\",\n        \"no-dupe-else-if\": \"error\",\n        \"no-dupe-keys\": \"error\",\n        \"no-duplicate-case\": \"error\",\n        \"no-empty\": \"error\",\n        \"no-empty-character-class\": \"error\",\n        \"no-empty-pattern\": \"error\",\n        \"no-ex-assign\": \"error\",\n        \"no-extra-boolean-cast\": \"error\",\n        \"no-extra-semi\": \"error\",\n        \"no-fallthrough\": \"error\",\n        \"no-func-assign\": \"error\",\n        \"no-global-assign\": \"error\",\n        \"no-import-assign\": \"error\",\n        \"no-inner-declarations\": \"error\",\n        \"no-invalid-regexp\": \"error\",\n        \"no-irregular-whitespace\": \"error\",\n        \"no-loss-of-precision\": \"error\",\n        \"no-misleading-character-class\": \"error\",\n        \"no-mixed-spaces-and-tabs\": \"error\",\n        \"no-new-symbol\": \"error\",\n        \"no-nonoctal-decimal-escape\": \"error\",\n        \"no-obj-calls\": \"error\",\n        \"no-octal\": \"error\",\n        \"no-prototype-builtins\": \"error\",\n        \"no-redeclare\": \"error\",\n        \"no-regex-spaces\": \"error\",\n        \"no-self-assign\": \"error\",\n        \"no-setter-return\": \"error\",\n        \"no-shadow-restricted-names\": \"error\",\n        \"no-sparse-arrays\": \"error\",\n        \"no-this-before-super\": \"error\",\n        \"no-undef\": \"error\",\n        \"no-unexpected-multiline\": \"error\",\n        \"no-unreachable\": \"error\",\n        \"no-unsafe-finally\": \"error\",\n        \"no-unsafe-negation\": \"error\",\n        \"no-unsafe-optional-chaining\": \"error\",\n        \"no-unused-labels\": \"error\",\n        \"no-unused-vars\": \"error\",\n        \"no-useless-backreference\": \"error\",\n        \"no-useless-catch\": \"error\",\n        \"no-useless-escape\": \"error\",\n        \"no-with\": \"error\",\n        \"require-yield\": \"error\",\n        \"use-isnan\": \"error\",\n        \"valid-typeof\": \"error\"\n    }\n};\n/lib/rules/vars-on-top.js\u0014/**\n * @fileoverview Rule to enforce var declarations are only at the top of a function.\n * @author Danny Fritz\n * @author Gyandeep Singh\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"require `var` declarations be placed at the top of their containing scope\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/vars-on-top\"\n        },\n\n        schema: [],\n        messages: {\n            top: \"All 'var' declarations must be at the top of the function scope.\"\n        }\n    },\n\n    create(context) {\n\n        //--------------------------------------------------------------------------\n        // Helpers\n        //--------------------------------------------------------------------------\n\n        /**\n         * Has AST suggesting a directive.\n         * @param {ASTNode} node any node\n         * @returns {boolean} whether the given node structurally represents a directive\n         */\n        function looksLikeDirective(node) {\n            return node.type === \"ExpressionStatement\" &&\n                node.expression.type === \"Literal\" && typeof node.expression.value === \"string\";\n        }\n\n        /**\n         * Check to see if its a ES6 import declaration\n         * @param {ASTNode} node any node\n         * @returns {boolean} whether the given node represents a import declaration\n         */\n        function looksLikeImport(node) {\n            return node.type === \"ImportDeclaration\" || node.type === \"ImportSpecifier\" ||\n                node.type === \"ImportDefaultSpecifier\" || node.type === \"ImportNamespaceSpecifier\";\n        }\n\n        /**\n         * Checks whether a given node is a variable declaration or not.\n         * @param {ASTNode} node any node\n         * @returns {boolean} `true` if the node is a variable declaration.\n         */\n        function isVariableDeclaration(node) {\n            return (\n                node.type === \"VariableDeclaration\" ||\n                (\n                    node.type === \"ExportNamedDeclaration\" &&\n                    node.declaration &&\n                    node.declaration.type === \"VariableDeclaration\"\n                )\n            );\n        }\n\n        /**\n         * Checks whether this variable is on top of the block body\n         * @param {ASTNode} node The node to check\n         * @param {ASTNode[]} statements collection of ASTNodes for the parent node block\n         * @returns {boolean} True if var is on top otherwise false\n         */\n        function isVarOnTop(node, statements) {\n            const l = statements.length;\n            let i = 0;\n\n            // Skip over directives and imports. Static blocks don't have either.\n            if (node.parent.type !== \"StaticBlock\") {\n                for (; i < l; ++i) {\n                    if (!looksLikeDirective(statements[i]) && !looksLikeImport(statements[i])) {\n                        break;\n                    }\n                }\n            }\n\n            for (; i < l; ++i) {\n                if (!isVariableDeclaration(statements[i])) {\n                    return false;\n                }\n                if (statements[i] === node) {\n                    return true;\n                }\n            }\n\n            return false;\n        }\n\n        /**\n         * Checks whether variable is on top at the global level\n         * @param {ASTNode} node The node to check\n         * @param {ASTNode} parent Parent of the node\n         * @returns {void}\n         */\n        function globalVarCheck(node, parent) {\n            if (!isVarOnTop(node, parent.body)) {\n                context.report({ node, messageId: \"top\" });\n            }\n        }\n\n        /**\n         * Checks whether variable is on top at functional block scope level\n         * @param {ASTNode} node The node to check\n         * @returns {void}\n         */\n        function blockScopeVarCheck(node) {\n            const { parent } = node;\n\n            if (\n                parent.type === \"BlockStatement\" &&\n                /Function/u.test(parent.parent.type) &&\n                isVarOnTop(node, parent.body)\n            ) {\n                return;\n            }\n\n            if (\n                parent.type === \"StaticBlock\" &&\n                isVarOnTop(node, parent.body)\n            ) {\n                return;\n            }\n\n            context.report({ node, messageId: \"top\" });\n        }\n\n        //--------------------------------------------------------------------------\n        // Public API\n        //--------------------------------------------------------------------------\n\n        return {\n            \"VariableDeclaration[kind='var']\"(node) {\n                if (node.parent.type === \"ExportNamedDeclaration\") {\n                    globalVarCheck(node.parent, node.parent.parent);\n                } else if (node.parent.type === \"Program\") {\n                    globalVarCheck(node, node.parent);\n                } else {\n                    blockScopeVarCheck(node);\n                }\n            }\n        };\n\n    }\n};\n/lib/rules/semi.js:/**\n * @fileoverview Rule to flag missing semicolons.\n * @author Nicholas C. Zakas\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst FixTracker = require(\"./utils/fix-tracker\");\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"layout\",\n\n        docs: {\n            description: \"require or disallow semicolons instead of ASI\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/semi\"\n        },\n\n        fixable: \"code\",\n\n        schema: {\n            anyOf: [\n                {\n                    type: \"array\",\n                    items: [\n                        {\n                            enum: [\"never\"]\n                        },\n                        {\n                            type: \"object\",\n                            properties: {\n                                beforeStatementContinuationChars: {\n                                    enum: [\"always\", \"any\", \"never\"]\n                                }\n                            },\n                            additionalProperties: false\n                        }\n                    ],\n                    minItems: 0,\n                    maxItems: 2\n                },\n                {\n                    type: \"array\",\n                    items: [\n                        {\n                            enum: [\"always\"]\n                        },\n                        {\n                            type: \"object\",\n                            properties: {\n                                omitLastInOneLineBlock: { type: \"boolean\" }\n                            },\n                            additionalProperties: false\n                        }\n                    ],\n                    minItems: 0,\n                    maxItems: 2\n                }\n            ]\n        },\n\n        messages: {\n            missingSemi: \"Missing semicolon.\",\n            extraSemi: \"Extra semicolon.\"\n        }\n    },\n\n    create(context) {\n\n        const OPT_OUT_PATTERN = /^[-[(/+`]/u; // One of [(/+-`\n        const unsafeClassFieldNames = new Set([\"get\", \"set\", \"static\"]);\n        const unsafeClassFieldFollowers = new Set([\"*\", \"in\", \"instanceof\"]);\n        const options = context.options[1];\n        const never = context.options[0] === \"never\";\n        const exceptOneLine = Boolean(options && options.omitLastInOneLineBlock);\n        const beforeStatementContinuationChars = options && options.beforeStatementContinuationChars || \"any\";\n        const sourceCode = context.getSourceCode();\n\n        //--------------------------------------------------------------------------\n        // Helpers\n        //--------------------------------------------------------------------------\n\n        /**\n         * Reports a semicolon error with appropriate location and message.\n         * @param {ASTNode} node The node with an extra or missing semicolon.\n         * @param {boolean} missing True if the semicolon is missing.\n         * @returns {void}\n         */\n        function report(node, missing) {\n            const lastToken = sourceCode.getLastToken(node);\n            let messageId,\n                fix,\n                loc;\n\n            if (!missing) {\n                messageId = \"missingSemi\";\n                loc = {\n                    start: lastToken.loc.end,\n                    end: astUtils.getNextLocation(sourceCode, lastToken.loc.end)\n                };\n                fix = function(fixer) {\n                    return fixer.insertTextAfter(lastToken, \";\");\n                };\n            } else {\n                messageId = \"extraSemi\";\n                loc = lastToken.loc;\n                fix = function(fixer) {\n\n                    /*\n                     * Expand the replacement range to include the surrounding\n                     * tokens to avoid conflicting with no-extra-semi.\n                     * https://github.com/eslint/eslint/issues/7928\n                     */\n                    return new FixTracker(fixer, sourceCode)\n                        .retainSurroundingTokens(lastToken)\n                        .remove(lastToken);\n                };\n            }\n\n            context.report({\n                node,\n                loc,\n                messageId,\n                fix\n            });\n\n        }\n\n        /**\n         * Check whether a given semicolon token is redundant.\n         * @param {Token} semiToken A semicolon token to check.\n         * @returns {boolean} `true` if the next token is `;` or `}`.\n         */\n        function isRedundantSemi(semiToken) {\n            const nextToken = sourceCode.getTokenAfter(semiToken);\n\n            return (\n                !nextToken ||\n                astUtils.isClosingBraceToken(nextToken) ||\n                astUtils.isSemicolonToken(nextToken)\n            );\n        }\n\n        /**\n         * Check whether a given token is the closing brace of an arrow function.\n         * @param {Token} lastToken A token to check.\n         * @returns {boolean} `true` if the token is the closing brace of an arrow function.\n         */\n        function isEndOfArrowBlock(lastToken) {\n            if (!astUtils.isClosingBraceToken(lastToken)) {\n                return false;\n            }\n            const node = sourceCode.getNodeByRangeIndex(lastToken.range[0]);\n\n            return (\n                node.type === \"BlockStatement\" &&\n                node.parent.type === \"ArrowFunctionExpression\"\n            );\n        }\n\n        /**\n         * Checks if a given PropertyDefinition node followed by a semicolon\n         * can safely remove that semicolon. It is not to safe to remove if\n         * the class field name is \"get\", \"set\", or \"static\", or if\n         * followed by a generator method.\n         * @param {ASTNode} node The node to check.\n         * @returns {boolean} `true` if the node cannot have the semicolon\n         *      removed.\n         */\n        function maybeClassFieldAsiHazard(node) {\n\n            if (node.type !== \"PropertyDefinition\") {\n                return false;\n            }\n\n            /*\n             * Computed property names and non-identifiers are always safe\n             * as they can be distinguished from keywords easily.\n             */\n            const needsNameCheck = !node.computed && node.key.type === \"Identifier\";\n\n            /*\n             * Certain names are problematic unless they also have a\n             * a way to distinguish between keywords and property\n             * names.\n             */\n            if (needsNameCheck && unsafeClassFieldNames.has(node.key.name)) {\n\n                /*\n                 * Special case: If the field name is `static`,\n                 * it is only valid if the field is marked as static,\n                 * so \"static static\" is okay but \"static\" is not.\n                 */\n                const isStaticStatic = node.static && node.key.name === \"static\";\n\n                /*\n                 * For other unsafe names, we only care if there is no\n                 * initializer. No initializer = hazard.\n                 */\n                if (!isStaticStatic && !node.value) {\n                    return true;\n                }\n            }\n\n            const followingToken = sourceCode.getTokenAfter(node);\n\n            return unsafeClassFieldFollowers.has(followingToken.value);\n        }\n\n        /**\n         * Check whether a given node is on the same line with the next token.\n         * @param {Node} node A statement node to check.\n         * @returns {boolean} `true` if the node is on the same line with the next token.\n         */\n        function isOnSameLineWithNextToken(node) {\n            const prevToken = sourceCode.getLastToken(node, 1);\n            const nextToken = sourceCode.getTokenAfter(node);\n\n            return !!nextToken && astUtils.isTokenOnSameLine(prevToken, nextToken);\n        }\n\n        /**\n         * Check whether a given node can connect the next line if the next line is unreliable.\n         * @param {Node} node A statement node to check.\n         * @returns {boolean} `true` if the node can connect the next line.\n         */\n        function maybeAsiHazardAfter(node) {\n            const t = node.type;\n\n            if (t === \"DoWhileStatement\" ||\n                t === \"BreakStatement\" ||\n                t === \"ContinueStatement\" ||\n                t === \"DebuggerStatement\" ||\n                t === \"ImportDeclaration\" ||\n                t === \"ExportAllDeclaration\"\n            ) {\n                return false;\n            }\n            if (t === \"ReturnStatement\") {\n                return Boolean(node.argument);\n            }\n            if (t === \"ExportNamedDeclaration\") {\n                return Boolean(node.declaration);\n            }\n            if (isEndOfArrowBlock(sourceCode.getLastToken(node, 1))) {\n                return false;\n            }\n\n            return true;\n        }\n\n        /**\n         * Check whether a given token can connect the previous statement.\n         * @param {Token} token A token to check.\n         * @returns {boolean} `true` if the token is one of `[`, `(`, `/`, `+`, `-`, ```, `++`, and `--`.\n         */\n        function maybeAsiHazardBefore(token) {\n            return (\n                Boolean(token) &&\n                OPT_OUT_PATTERN.test(token.value) &&\n                token.value !== \"++\" &&\n                token.value !== \"--\"\n            );\n        }\n\n        /**\n         * Check if the semicolon of a given node is unnecessary, only true if:\n         *   - next token is a valid statement divider (`;` or `}`).\n         *   - next token is on a new line and the node is not connectable to the new line.\n         * @param {Node} node A statement node to check.\n         * @returns {boolean} whether the semicolon is unnecessary.\n         */\n        function canRemoveSemicolon(node) {\n            if (isRedundantSemi(sourceCode.getLastToken(node))) {\n                return true; // `;;` or `;}`\n            }\n            if (maybeClassFieldAsiHazard(node)) {\n                return false;\n            }\n            if (isOnSameLineWithNextToken(node)) {\n                return false; // One liner.\n            }\n\n            // continuation characters should not apply to class fields\n            if (\n                node.type !== \"PropertyDefinition\" &&\n                beforeStatementContinuationChars === \"never\" &&\n                !maybeAsiHazardAfter(node)\n            ) {\n                return true; // ASI works. This statement doesn't connect to the next.\n            }\n            if (!maybeAsiHazardBefore(sourceCode.getTokenAfter(node))) {\n                return true; // ASI works. The next token doesn't connect to this statement.\n            }\n\n            return false;\n        }\n\n        /**\n         * Checks a node to see if it's the last item in a one-liner block.\n         * Block is any `BlockStatement` or `StaticBlock` node. Block is a one-liner if its\n         * braces (and consequently everything between them) are on the same line.\n         * @param {ASTNode} node The node to check.\n         * @returns {boolean} whether the node is the last item in a one-liner block.\n         */\n        function isLastInOneLinerBlock(node) {\n            const parent = node.parent;\n            const nextToken = sourceCode.getTokenAfter(node);\n\n            if (!nextToken || nextToken.value !== \"}\") {\n                return false;\n            }\n\n            if (parent.type === \"BlockStatement\") {\n                return parent.loc.start.line === parent.loc.end.line;\n            }\n\n            if (parent.type === \"StaticBlock\") {\n                const openingBrace = sourceCode.getFirstToken(parent, { skip: 1 }); // skip the `static` token\n\n                return openingBrace.loc.start.line === parent.loc.end.line;\n            }\n\n            return false;\n        }\n\n        /**\n         * Checks a node to see if it's followed by a semicolon.\n         * @param {ASTNode} node The node to check.\n         * @returns {void}\n         */\n        function checkForSemicolon(node) {\n            const isSemi = astUtils.isSemicolonToken(sourceCode.getLastToken(node));\n\n            if (never) {\n                if (isSemi && canRemoveSemicolon(node)) {\n                    report(node, true);\n                } else if (\n                    !isSemi && beforeStatementContinuationChars === \"always\" &&\n                    node.type !== \"PropertyDefinition\" &&\n                    maybeAsiHazardBefore(sourceCode.getTokenAfter(node))\n                ) {\n                    report(node);\n                }\n            } else {\n                const oneLinerBlock = (exceptOneLine && isLastInOneLinerBlock(node));\n\n                if (isSemi && oneLinerBlock) {\n                    report(node, true);\n                } else if (!isSemi && !oneLinerBlock) {\n                    report(node);\n                }\n            }\n        }\n\n        /**\n         * Checks to see if there's a semicolon after a variable declaration.\n         * @param {ASTNode} node The node to check.\n         * @returns {void}\n         */\n        function checkForSemicolonForVariableDeclaration(node) {\n            const parent = node.parent;\n\n            if ((parent.type !== \"ForStatement\" || parent.init !== node) &&\n                (!/^For(?:In|Of)Statement/u.test(parent.type) || parent.left !== node)\n            ) {\n                checkForSemicolon(node);\n            }\n        }\n\n        //--------------------------------------------------------------------------\n        // Public API\n        //--------------------------------------------------------------------------\n\n        return {\n            VariableDeclaration: checkForSemicolonForVariableDeclaration,\n            ExpressionStatement: checkForSemicolon,\n            ReturnStatement: checkForSemicolon,\n            ThrowStatement: checkForSemicolon,\n            DoWhileStatement: checkForSemicolon,\n            DebuggerStatement: checkForSemicolon,\n            BreakStatement: checkForSemicolon,\n            ContinueStatement: checkForSemicolon,\n            ImportDeclaration: checkForSemicolon,\n            ExportAllDeclaration: checkForSemicolon,\n            ExportNamedDeclaration(node) {\n                if (!node.declaration) {\n                    checkForSemicolon(node);\n                }\n            },\n            ExportDefaultDeclaration(node) {\n                if (!/(?:Class|Function)Declaration/u.test(node.declaration.type)) {\n                    checkForSemicolon(node);\n                }\n            },\n            PropertyDefinition: checkForSemicolon\n        };\n\n    }\n};\n,/lib/rules/function-call-argument-newline.js\u0010/**\n * @fileoverview Rule to enforce line breaks between arguments of a function call\n * @author Alexey Gonchar <https://github.com/finico>\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"layout\",\n\n        docs: {\n            description: \"enforce line breaks between arguments of a function call\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/function-call-argument-newline\"\n        },\n\n        fixable: \"whitespace\",\n\n        schema: [\n            {\n                enum: [\"always\", \"never\", \"consistent\"]\n            }\n        ],\n\n        messages: {\n            unexpectedLineBreak: \"There should be no line break here.\",\n            missingLineBreak: \"There should be a line break after this argument.\"\n        }\n    },\n\n    create(context) {\n        const sourceCode = context.getSourceCode();\n\n        const checkers = {\n            unexpected: {\n                messageId: \"unexpectedLineBreak\",\n                check: (prevToken, currentToken) => prevToken.loc.end.line !== currentToken.loc.start.line,\n                createFix: (token, tokenBefore) => fixer =>\n                    fixer.replaceTextRange([tokenBefore.range[1], token.range[0]], \" \")\n            },\n            missing: {\n                messageId: \"missingLineBreak\",\n                check: (prevToken, currentToken) => prevToken.loc.end.line === currentToken.loc.start.line,\n                createFix: (token, tokenBefore) => fixer =>\n                    fixer.replaceTextRange([tokenBefore.range[1], token.range[0]], \"\\n\")\n            }\n        };\n\n        /**\n         * Check all arguments for line breaks in the CallExpression\n         * @param {CallExpression} node node to evaluate\n         * @param {{ messageId: string, check: Function }} checker selected checker\n         * @returns {void}\n         * @private\n         */\n        function checkArguments(node, checker) {\n            for (let i = 1; i < node.arguments.length; i++) {\n                const prevArgToken = sourceCode.getLastToken(node.arguments[i - 1]);\n                const currentArgToken = sourceCode.getFirstToken(node.arguments[i]);\n\n                if (checker.check(prevArgToken, currentArgToken)) {\n                    const tokenBefore = sourceCode.getTokenBefore(\n                        currentArgToken,\n                        { includeComments: true }\n                    );\n\n                    const hasLineCommentBefore = tokenBefore.type === \"Line\";\n\n                    context.report({\n                        node,\n                        loc: {\n                            start: tokenBefore.loc.end,\n                            end: currentArgToken.loc.start\n                        },\n                        messageId: checker.messageId,\n                        fix: hasLineCommentBefore ? null : checker.createFix(currentArgToken, tokenBefore)\n                    });\n                }\n            }\n        }\n\n        /**\n         * Check if open space is present in a function name\n         * @param {CallExpression} node node to evaluate\n         * @returns {void}\n         * @private\n         */\n        function check(node) {\n            if (node.arguments.length < 2) {\n                return;\n            }\n\n            const option = context.options[0] || \"always\";\n\n            if (option === \"never\") {\n                checkArguments(node, checkers.unexpected);\n            } else if (option === \"always\") {\n                checkArguments(node, checkers.missing);\n            } else if (option === \"consistent\") {\n                const firstArgToken = sourceCode.getLastToken(node.arguments[0]);\n                const secondArgToken = sourceCode.getFirstToken(node.arguments[1]);\n\n                if (firstArgToken.loc.end.line === secondArgToken.loc.start.line) {\n                    checkArguments(node, checkers.unexpected);\n                } else {\n                    checkArguments(node, checkers.missing);\n                }\n            }\n        }\n\n        return {\n            CallExpression: check,\n            NewExpression: check\n        };\n    }\n};\n/lib/rules/prefer-reflect.js\u0012]/**\n * @fileoverview Rule to suggest using \"Reflect\" api over Function/Object methods\n * @author Keith Cirkel <http://keithcirkel.co.uk>\n * @deprecated in ESLint v3.9.0\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"require `Reflect` methods where applicable\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/prefer-reflect\"\n        },\n\n        deprecated: true,\n\n        replacedBy: [],\n\n        schema: [\n            {\n                type: \"object\",\n                properties: {\n                    exceptions: {\n                        type: \"array\",\n                        items: {\n                            enum: [\n                                \"apply\",\n                                \"call\",\n                                \"delete\",\n                                \"defineProperty\",\n                                \"getOwnPropertyDescriptor\",\n                                \"getPrototypeOf\",\n                                \"setPrototypeOf\",\n                                \"isExtensible\",\n                                \"getOwnPropertyNames\",\n                                \"preventExtensions\"\n                            ]\n                        },\n                        uniqueItems: true\n                    }\n                },\n                additionalProperties: false\n            }\n        ],\n\n        messages: {\n            preferReflect: \"Avoid using {{existing}}, instead use {{substitute}}.\"\n        }\n    },\n\n    create(context) {\n        const existingNames = {\n            apply: \"Function.prototype.apply\",\n            call: \"Function.prototype.call\",\n            defineProperty: \"Object.defineProperty\",\n            getOwnPropertyDescriptor: \"Object.getOwnPropertyDescriptor\",\n            getPrototypeOf: \"Object.getPrototypeOf\",\n            setPrototypeOf: \"Object.setPrototypeOf\",\n            isExtensible: \"Object.isExtensible\",\n            getOwnPropertyNames: \"Object.getOwnPropertyNames\",\n            preventExtensions: \"Object.preventExtensions\"\n        };\n\n        const reflectSubstitutes = {\n            apply: \"Reflect.apply\",\n            call: \"Reflect.apply\",\n            defineProperty: \"Reflect.defineProperty\",\n            getOwnPropertyDescriptor: \"Reflect.getOwnPropertyDescriptor\",\n            getPrototypeOf: \"Reflect.getPrototypeOf\",\n            setPrototypeOf: \"Reflect.setPrototypeOf\",\n            isExtensible: \"Reflect.isExtensible\",\n            getOwnPropertyNames: \"Reflect.getOwnPropertyNames\",\n            preventExtensions: \"Reflect.preventExtensions\"\n        };\n\n        const exceptions = (context.options[0] || {}).exceptions || [];\n\n        /**\n         * Reports the Reflect violation based on the `existing` and `substitute`\n         * @param {Object} node The node that violates the rule.\n         * @param {string} existing The existing method name that has been used.\n         * @param {string} substitute The Reflect substitute that should be used.\n         * @returns {void}\n         */\n        function report(node, existing, substitute) {\n            context.report({\n                node,\n                messageId: \"preferReflect\",\n                data: {\n                    existing,\n                    substitute\n                }\n            });\n        }\n\n        return {\n            CallExpression(node) {\n                const methodName = (node.callee.property || {}).name;\n                const isReflectCall = (node.callee.object || {}).name === \"Reflect\";\n                const hasReflectSubstitute = Object.prototype.hasOwnProperty.call(reflectSubstitutes, methodName);\n                const userConfiguredException = exceptions.indexOf(methodName) !== -1;\n\n                if (hasReflectSubstitute && !isReflectCall && !userConfiguredException) {\n                    report(node, existingNames[methodName], reflectSubstitutes[methodName]);\n                }\n            },\n            UnaryExpression(node) {\n                const isDeleteOperator = node.operator === \"delete\";\n                const targetsIdentifier = node.argument.type === \"Identifier\";\n                const userConfiguredException = exceptions.indexOf(\"delete\") !== -1;\n\n                if (isDeleteOperator && !targetsIdentifier && !userConfiguredException) {\n                    report(node, \"the delete keyword\", \"Reflect.deleteProperty\");\n                }\n            }\n        };\n\n    }\n};\n/lib/shared/ajv.js\u0003/**\n * @fileoverview The instance of Ajv validator.\n * @author Evgeny Poberezkin\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst Ajv = require(\"ajv\"),\n    metaSchema = require(\"ajv/lib/refs/json-schema-draft-04.json\");\n\n//------------------------------------------------------------------------------\n// Public Interface\n//------------------------------------------------------------------------------\n\nmodule.exports = (additionalOptions = {}) => {\n    const ajv = new Ajv({\n        meta: false,\n        useDefaults: true,\n        validateSchema: false,\n        missingRefs: \"ignore\",\n        verbose: true,\n        schemaId: \"auto\",\n        ...additionalOptions\n    });\n\n    ajv.addMetaSchema(metaSchema);\n    // eslint-disable-next-line no-underscore-dangle -- Ajv's API\n    ajv._opts.defaultMeta = metaSchema.id;\n\n    return ajv;\n};\n/lib/rules/accessor-pairs.js//**\n * @fileoverview Rule to enforce getter and setter pairs in objects and classes.\n * @author Gyandeep Singh\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Typedefs\n//------------------------------------------------------------------------------\n\n/**\n * Property name if it can be computed statically, otherwise the list of the tokens of the key node.\n * @typedef {string|Token[]} Key\n */\n\n/**\n * Accessor nodes with the same key.\n * @typedef {Object} AccessorData\n * @property {Key} key Accessor's key\n * @property {ASTNode[]} getters List of getter nodes.\n * @property {ASTNode[]} setters List of setter nodes.\n */\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\n/**\n * Checks whether or not the given lists represent the equal tokens in the same order.\n * Tokens are compared by their properties, not by instance.\n * @param {Token[]} left First list of tokens.\n * @param {Token[]} right Second list of tokens.\n * @returns {boolean} `true` if the lists have same tokens.\n */\nfunction areEqualTokenLists(left, right) {\n    if (left.length !== right.length) {\n        return false;\n    }\n\n    for (let i = 0; i < left.length; i++) {\n        const leftToken = left[i],\n            rightToken = right[i];\n\n        if (leftToken.type !== rightToken.type || leftToken.value !== rightToken.value) {\n            return false;\n        }\n    }\n\n    return true;\n}\n\n/**\n * Checks whether or not the given keys are equal.\n * @param {Key} left First key.\n * @param {Key} right Second key.\n * @returns {boolean} `true` if the keys are equal.\n */\nfunction areEqualKeys(left, right) {\n    if (typeof left === \"string\" && typeof right === \"string\") {\n\n        // Statically computed names.\n        return left === right;\n    }\n    if (Array.isArray(left) && Array.isArray(right)) {\n\n        // Token lists.\n        return areEqualTokenLists(left, right);\n    }\n\n    return false;\n}\n\n/**\n * Checks whether or not a given node is of an accessor kind ('get' or 'set').\n * @param {ASTNode} node A node to check.\n * @returns {boolean} `true` if the node is of an accessor kind.\n */\nfunction isAccessorKind(node) {\n    return node.kind === \"get\" || node.kind === \"set\";\n}\n\n/**\n * Checks whether or not a given node is an argument of a specified method call.\n * @param {ASTNode} node A node to check.\n * @param {number} index An expected index of the node in arguments.\n * @param {string} object An expected name of the object of the method.\n * @param {string} property An expected name of the method.\n * @returns {boolean} `true` if the node is an argument of the specified method call.\n */\nfunction isArgumentOfMethodCall(node, index, object, property) {\n    const parent = node.parent;\n\n    return (\n        parent.type === \"CallExpression\" &&\n        astUtils.isSpecificMemberAccess(parent.callee, object, property) &&\n        parent.arguments[index] === node\n    );\n}\n\n/**\n * Checks whether or not a given node is a property descriptor.\n * @param {ASTNode} node A node to check.\n * @returns {boolean} `true` if the node is a property descriptor.\n */\nfunction isPropertyDescriptor(node) {\n\n    // Object.defineProperty(obj, \"foo\", {set: ...})\n    if (isArgumentOfMethodCall(node, 2, \"Object\", \"defineProperty\") ||\n        isArgumentOfMethodCall(node, 2, \"Reflect\", \"defineProperty\")\n    ) {\n        return true;\n    }\n\n    /*\n     * Object.defineProperties(obj, {foo: {set: ...}})\n     * Object.create(proto, {foo: {set: ...}})\n     */\n    const grandparent = node.parent.parent;\n\n    return grandparent.type === \"ObjectExpression\" && (\n        isArgumentOfMethodCall(grandparent, 1, \"Object\", \"create\") ||\n        isArgumentOfMethodCall(grandparent, 1, \"Object\", \"defineProperties\")\n    );\n}\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"enforce getter and setter pairs in objects and classes\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/accessor-pairs\"\n        },\n\n        schema: [{\n            type: \"object\",\n            properties: {\n                getWithoutSet: {\n                    type: \"boolean\",\n                    default: false\n                },\n                setWithoutGet: {\n                    type: \"boolean\",\n                    default: true\n                },\n                enforceForClassMembers: {\n                    type: \"boolean\",\n                    default: true\n                }\n            },\n            additionalProperties: false\n        }],\n\n        messages: {\n            missingGetterInPropertyDescriptor: \"Getter is not present in property descriptor.\",\n            missingSetterInPropertyDescriptor: \"Setter is not present in property descriptor.\",\n            missingGetterInObjectLiteral: \"Getter is not present for {{ name }}.\",\n            missingSetterInObjectLiteral: \"Setter is not present for {{ name }}.\",\n            missingGetterInClass: \"Getter is not present for class {{ name }}.\",\n            missingSetterInClass: \"Setter is not present for class {{ name }}.\"\n        }\n    },\n    create(context) {\n        const config = context.options[0] || {};\n        const checkGetWithoutSet = config.getWithoutSet === true;\n        const checkSetWithoutGet = config.setWithoutGet !== false;\n        const enforceForClassMembers = config.enforceForClassMembers !== false;\n        const sourceCode = context.getSourceCode();\n\n        /**\n         * Reports the given node.\n         * @param {ASTNode} node The node to report.\n         * @param {string} messageKind \"missingGetter\" or \"missingSetter\".\n         * @returns {void}\n         * @private\n         */\n        function report(node, messageKind) {\n            if (node.type === \"Property\") {\n                context.report({\n                    node,\n                    messageId: `${messageKind}InObjectLiteral`,\n                    loc: astUtils.getFunctionHeadLoc(node.value, sourceCode),\n                    data: { name: astUtils.getFunctionNameWithKind(node.value) }\n                });\n            } else if (node.type === \"MethodDefinition\") {\n                context.report({\n                    node,\n                    messageId: `${messageKind}InClass`,\n                    loc: astUtils.getFunctionHeadLoc(node.value, sourceCode),\n                    data: { name: astUtils.getFunctionNameWithKind(node.value) }\n                });\n            } else {\n                context.report({\n                    node,\n                    messageId: `${messageKind}InPropertyDescriptor`\n                });\n            }\n        }\n\n        /**\n         * Reports each of the nodes in the given list using the same messageId.\n         * @param {ASTNode[]} nodes Nodes to report.\n         * @param {string} messageKind \"missingGetter\" or \"missingSetter\".\n         * @returns {void}\n         * @private\n         */\n        function reportList(nodes, messageKind) {\n            for (const node of nodes) {\n                report(node, messageKind);\n            }\n        }\n\n        /**\n         * Creates a new `AccessorData` object for the given getter or setter node.\n         * @param {ASTNode} node A getter or setter node.\n         * @returns {AccessorData} New `AccessorData` object that contains the given node.\n         * @private\n         */\n        function createAccessorData(node) {\n            const name = astUtils.getStaticPropertyName(node);\n            const key = (name !== null) ? name : sourceCode.getTokens(node.key);\n\n            return {\n                key,\n                getters: node.kind === \"get\" ? [node] : [],\n                setters: node.kind === \"set\" ? [node] : []\n            };\n        }\n\n        /**\n         * Merges the given `AccessorData` object into the given accessors list.\n         * @param {AccessorData[]} accessors The list to merge into.\n         * @param {AccessorData} accessorData The object to merge.\n         * @returns {AccessorData[]} The same instance with the merged object.\n         * @private\n         */\n        function mergeAccessorData(accessors, accessorData) {\n            const equalKeyElement = accessors.find(a => areEqualKeys(a.key, accessorData.key));\n\n            if (equalKeyElement) {\n                equalKeyElement.getters.push(...accessorData.getters);\n                equalKeyElement.setters.push(...accessorData.setters);\n            } else {\n                accessors.push(accessorData);\n            }\n\n            return accessors;\n        }\n\n        /**\n         * Checks accessor pairs in the given list of nodes.\n         * @param {ASTNode[]} nodes The list to check.\n         * @returns {void}\n         * @private\n         */\n        function checkList(nodes) {\n            const accessors = nodes\n                .filter(isAccessorKind)\n                .map(createAccessorData)\n                .reduce(mergeAccessorData, []);\n\n            for (const { getters, setters } of accessors) {\n                if (checkSetWithoutGet && setters.length && !getters.length) {\n                    reportList(setters, \"missingGetter\");\n                }\n                if (checkGetWithoutSet && getters.length && !setters.length) {\n                    reportList(getters, \"missingSetter\");\n                }\n            }\n        }\n\n        /**\n         * Checks accessor pairs in an object literal.\n         * @param {ASTNode} node `ObjectExpression` node to check.\n         * @returns {void}\n         * @private\n         */\n        function checkObjectLiteral(node) {\n            checkList(node.properties.filter(p => p.type === \"Property\"));\n        }\n\n        /**\n         * Checks accessor pairs in a property descriptor.\n         * @param {ASTNode} node Property descriptor `ObjectExpression` node to check.\n         * @returns {void}\n         * @private\n         */\n        function checkPropertyDescriptor(node) {\n            const namesToCheck = node.properties\n                .filter(p => p.type === \"Property\" && p.kind === \"init\" && !p.computed)\n                .map(({ key }) => key.name);\n\n            const hasGetter = namesToCheck.includes(\"get\");\n            const hasSetter = namesToCheck.includes(\"set\");\n\n            if (checkSetWithoutGet && hasSetter && !hasGetter) {\n                report(node, \"missingGetter\");\n            }\n            if (checkGetWithoutSet && hasGetter && !hasSetter) {\n                report(node, \"missingSetter\");\n            }\n        }\n\n        /**\n         * Checks the given object expression as an object literal and as a possible property descriptor.\n         * @param {ASTNode} node `ObjectExpression` node to check.\n         * @returns {void}\n         * @private\n         */\n        function checkObjectExpression(node) {\n            checkObjectLiteral(node);\n            if (isPropertyDescriptor(node)) {\n                checkPropertyDescriptor(node);\n            }\n        }\n\n        /**\n         * Checks the given class body.\n         * @param {ASTNode} node `ClassBody` node to check.\n         * @returns {void}\n         * @private\n         */\n        function checkClassBody(node) {\n            const methodDefinitions = node.body.filter(m => m.type === \"MethodDefinition\");\n\n            checkList(methodDefinitions.filter(m => m.static));\n            checkList(methodDefinitions.filter(m => !m.static));\n        }\n\n        const listeners = {};\n\n        if (checkSetWithoutGet || checkGetWithoutSet) {\n            listeners.ObjectExpression = checkObjectExpression;\n            if (enforceForClassMembers) {\n                listeners.ClassBody = checkClassBody;\n            }\n        }\n\n        return listeners;\n    }\n};\n/lib/rules/no-new-symbol.js\u0006\u0007/**\n * @fileoverview Rule to disallow use of the new operator with the `Symbol` object\n * @author Alberto Rodríguez\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"problem\",\n\n        docs: {\n            description: \"disallow `new` operators with the `Symbol` object\",\n            recommended: true,\n            url: \"https://eslint.org/docs/rules/no-new-symbol\"\n        },\n\n        schema: [],\n\n        messages: {\n            noNewSymbol: \"`Symbol` cannot be called as a constructor.\"\n        }\n    },\n\n    create(context) {\n\n        return {\n            \"Program:exit\"() {\n                const globalScope = context.getScope();\n                const variable = globalScope.set.get(\"Symbol\");\n\n                if (variable && variable.defs.length === 0) {\n                    variable.references.forEach(ref => {\n                        const node = ref.identifier;\n                        const parent = node.parent;\n\n                        if (parent && parent.type === \"NewExpression\" && parent.callee === node) {\n                            context.report({\n                                node,\n                                messageId: \"noNewSymbol\"\n                            });\n                        }\n                    });\n                }\n            }\n        };\n\n    }\n};\n\"/lib/rules/no-loss-of-precision.js\u001e/**\n * @fileoverview Rule to flag numbers that will lose significant figure precision at runtime\n * @author Jacob Moore\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"problem\",\n\n        docs: {\n            description: \"disallow literal numbers that lose precision\",\n            recommended: true,\n            url: \"https://eslint.org/docs/rules/no-loss-of-precision\"\n        },\n        schema: [],\n        messages: {\n            noLossOfPrecision: \"This number literal will lose precision at runtime.\"\n        }\n    },\n\n    create(context) {\n\n        /**\n         * Returns whether the node is number literal\n         * @param {Node} node the node literal being evaluated\n         * @returns {boolean} true if the node is a number literal\n         */\n        function isNumber(node) {\n            return typeof node.value === \"number\";\n        }\n\n        /**\n         * Gets the source code of the given number literal. Removes `_` numeric separators from the result.\n         * @param {Node} node the number `Literal` node\n         * @returns {string} raw source code of the literal, without numeric separators\n         */\n        function getRaw(node) {\n            return node.raw.replace(/_/gu, \"\");\n        }\n\n        /**\n         * Checks whether the number is  base ten\n         * @param {ASTNode} node the node being evaluated\n         * @returns {boolean} true if the node is in base ten\n         */\n        function isBaseTen(node) {\n            const prefixes = [\"0x\", \"0X\", \"0b\", \"0B\", \"0o\", \"0O\"];\n\n            return prefixes.every(prefix => !node.raw.startsWith(prefix)) &&\n            !/^0[0-7]+$/u.test(node.raw);\n        }\n\n        /**\n         * Checks that the user-intended non-base ten number equals the actual number after is has been converted to the Number type\n         * @param {Node} node the node being evaluated\n         * @returns {boolean} true if they do not match\n         */\n        function notBaseTenLosesPrecision(node) {\n            const rawString = getRaw(node).toUpperCase();\n            let base = 0;\n\n            if (rawString.startsWith(\"0B\")) {\n                base = 2;\n            } else if (rawString.startsWith(\"0X\")) {\n                base = 16;\n            } else {\n                base = 8;\n            }\n\n            return !rawString.endsWith(node.value.toString(base).toUpperCase());\n        }\n\n        /**\n         * Adds a decimal point to the numeric string at index 1\n         * @param {string} stringNumber the numeric string without any decimal point\n         * @returns {string} the numeric string with a decimal point in the proper place\n         */\n        function addDecimalPointToNumber(stringNumber) {\n            return `${stringNumber.slice(0, 1)}.${stringNumber.slice(1)}`;\n        }\n\n        /**\n         * Returns the number stripped of leading zeros\n         * @param {string} numberAsString the string representation of the number\n         * @returns {string} the stripped string\n         */\n        function removeLeadingZeros(numberAsString) {\n            return numberAsString.replace(/^0*/u, \"\");\n        }\n\n        /**\n         * Returns the number stripped of trailing zeros\n         * @param {string} numberAsString the string representation of the number\n         * @returns {string} the stripped string\n         */\n        function removeTrailingZeros(numberAsString) {\n            return numberAsString.replace(/0*$/u, \"\");\n        }\n\n        /**\n         * Converts an integer to to an object containing the integer's coefficient and order of magnitude\n         * @param {string} stringInteger the string representation of the integer being converted\n         * @returns {Object} the object containing the integer's coefficient and order of magnitude\n         */\n        function normalizeInteger(stringInteger) {\n            const significantDigits = removeTrailingZeros(removeLeadingZeros(stringInteger));\n\n            return {\n                magnitude: stringInteger.startsWith(\"0\") ? stringInteger.length - 2 : stringInteger.length - 1,\n                coefficient: addDecimalPointToNumber(significantDigits)\n            };\n        }\n\n        /**\n         *\n         * Converts a float to to an object containing the floats's coefficient and order of magnitude\n         * @param {string} stringFloat the string representation of the float being converted\n         * @returns {Object} the object containing the integer's coefficient and order of magnitude\n         */\n        function normalizeFloat(stringFloat) {\n            const trimmedFloat = removeLeadingZeros(stringFloat);\n\n            if (trimmedFloat.startsWith(\".\")) {\n                const decimalDigits = trimmedFloat.split(\".\").pop();\n                const significantDigits = removeLeadingZeros(decimalDigits);\n\n                return {\n                    magnitude: significantDigits.length - decimalDigits.length - 1,\n                    coefficient: addDecimalPointToNumber(significantDigits)\n                };\n\n            }\n            return {\n                magnitude: trimmedFloat.indexOf(\".\") - 1,\n                coefficient: addDecimalPointToNumber(trimmedFloat.replace(\".\", \"\"))\n\n            };\n        }\n\n\n        /**\n         * Converts a base ten number to proper scientific notation\n         * @param {string} stringNumber the string representation of the base ten number to be converted\n         * @returns {string} the number converted to scientific notation\n         */\n        function convertNumberToScientificNotation(stringNumber) {\n            const splitNumber = stringNumber.replace(\"E\", \"e\").split(\"e\");\n            const originalCoefficient = splitNumber[0];\n            const normalizedNumber = stringNumber.includes(\".\") ? normalizeFloat(originalCoefficient)\n                : normalizeInteger(originalCoefficient);\n            const normalizedCoefficient = normalizedNumber.coefficient;\n            const magnitude = splitNumber.length > 1 ? (parseInt(splitNumber[1], 10) + normalizedNumber.magnitude)\n                : normalizedNumber.magnitude;\n\n            return `${normalizedCoefficient}e${magnitude}`;\n\n        }\n\n        /**\n         * Checks that the user-intended base ten number equals the actual number after is has been converted to the Number type\n         * @param {Node} node the node being evaluated\n         * @returns {boolean} true if they do not match\n         */\n        function baseTenLosesPrecision(node) {\n            const normalizedRawNumber = convertNumberToScientificNotation(getRaw(node));\n            const requestedPrecision = normalizedRawNumber.split(\"e\")[0].replace(\".\", \"\").length;\n\n            if (requestedPrecision > 100) {\n                return true;\n            }\n            const storedNumber = node.value.toPrecision(requestedPrecision);\n            const normalizedStoredNumber = convertNumberToScientificNotation(storedNumber);\n\n            return normalizedRawNumber !== normalizedStoredNumber;\n        }\n\n\n        /**\n         * Checks that the user-intended number equals the actual number after is has been converted to the Number type\n         * @param {Node} node the node being evaluated\n         * @returns {boolean} true if they do not match\n         */\n        function losesPrecision(node) {\n            return isBaseTen(node) ? baseTenLosesPrecision(node) : notBaseTenLosesPrecision(node);\n        }\n\n\n        return {\n            Literal(node) {\n                if (node.value && isNumber(node) && losesPrecision(node)) {\n                    context.report({\n                        messageId: \"noLossOfPrecision\",\n                        node\n                    });\n                }\n            }\n        };\n    }\n};\n#/lib/rules/no-restricted-modules.js\u001c\"/**\n * @fileoverview Restrict usage of specified node modules.\n * @author Christian Schulz\n * @deprecated in ESLint v7.0.0\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\nconst ignore = require(\"ignore\");\n\nconst arrayOfStrings = {\n    type: \"array\",\n    items: { type: \"string\" },\n    uniqueItems: true\n};\n\nconst arrayOfStringsOrObjects = {\n    type: \"array\",\n    items: {\n        anyOf: [\n            { type: \"string\" },\n            {\n                type: \"object\",\n                properties: {\n                    name: { type: \"string\" },\n                    message: {\n                        type: \"string\",\n                        minLength: 1\n                    }\n                },\n                additionalProperties: false,\n                required: [\"name\"]\n            }\n        ]\n    },\n    uniqueItems: true\n};\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        deprecated: true,\n\n        replacedBy: [],\n\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow specified modules when loaded by `require`\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-restricted-modules\"\n        },\n\n        schema: {\n            anyOf: [\n                arrayOfStringsOrObjects,\n                {\n                    type: \"array\",\n                    items: {\n                        type: \"object\",\n                        properties: {\n                            paths: arrayOfStringsOrObjects,\n                            patterns: arrayOfStrings\n                        },\n                        additionalProperties: false\n                    },\n                    additionalItems: false\n                }\n            ]\n        },\n\n        messages: {\n            defaultMessage: \"'{{name}}' module is restricted from being used.\",\n            // eslint-disable-next-line eslint-plugin/report-message-format -- Custom message might not end in a period\n            customMessage: \"'{{name}}' module is restricted from being used. {{customMessage}}\",\n            patternMessage: \"'{{name}}' module is restricted from being used by a pattern.\"\n        }\n    },\n\n    create(context) {\n        const options = Array.isArray(context.options) ? context.options : [];\n        const isPathAndPatternsObject =\n            typeof options[0] === \"object\" &&\n            (Object.prototype.hasOwnProperty.call(options[0], \"paths\") || Object.prototype.hasOwnProperty.call(options[0], \"patterns\"));\n\n        const restrictedPaths = (isPathAndPatternsObject ? options[0].paths : context.options) || [];\n        const restrictedPatterns = (isPathAndPatternsObject ? options[0].patterns : []) || [];\n\n        const restrictedPathMessages = restrictedPaths.reduce((memo, importName) => {\n            if (typeof importName === \"string\") {\n                memo[importName] = null;\n            } else {\n                memo[importName.name] = importName.message;\n            }\n            return memo;\n        }, {});\n\n        // if no imports are restricted we don't need to check\n        if (Object.keys(restrictedPaths).length === 0 && restrictedPatterns.length === 0) {\n            return {};\n        }\n\n        // relative paths are supported for this rule\n        const ig = ignore({ allowRelativePaths: true }).add(restrictedPatterns);\n\n\n        /**\n         * Function to check if a node is a string literal.\n         * @param {ASTNode} node The node to check.\n         * @returns {boolean} If the node is a string literal.\n         */\n        function isStringLiteral(node) {\n            return node && node.type === \"Literal\" && typeof node.value === \"string\";\n        }\n\n        /**\n         * Function to check if a node is a static string template literal.\n         * @param {ASTNode} node The node to check.\n         * @returns {boolean} If the node is a string template literal.\n         */\n        function isStaticTemplateLiteral(node) {\n            return node && node.type === \"TemplateLiteral\" && node.expressions.length === 0;\n        }\n\n        /**\n         * Function to check if a node is a require call.\n         * @param {ASTNode} node The node to check.\n         * @returns {boolean} If the node is a require call.\n         */\n        function isRequireCall(node) {\n            return node.callee.type === \"Identifier\" && node.callee.name === \"require\";\n        }\n\n        /**\n         * Extract string from Literal or TemplateLiteral node\n         * @param {ASTNode} node The node to extract from\n         * @returns {string|null} Extracted string or null if node doesn't represent a string\n         */\n        function getFirstArgumentString(node) {\n            if (isStringLiteral(node)) {\n                return node.value.trim();\n            }\n\n            if (isStaticTemplateLiteral(node)) {\n                return node.quasis[0].value.cooked.trim();\n            }\n\n            return null;\n        }\n\n        /**\n         * Report a restricted path.\n         * @param {node} node representing the restricted path reference\n         * @param {string} name restricted path\n         * @returns {void}\n         * @private\n         */\n        function reportPath(node, name) {\n            const customMessage = restrictedPathMessages[name];\n            const messageId = customMessage\n                ? \"customMessage\"\n                : \"defaultMessage\";\n\n            context.report({\n                node,\n                messageId,\n                data: {\n                    name,\n                    customMessage\n                }\n            });\n        }\n\n        /**\n         * Check if the given name is a restricted path name\n         * @param {string} name name of a variable\n         * @returns {boolean} whether the variable is a restricted path or not\n         * @private\n         */\n        function isRestrictedPath(name) {\n            return Object.prototype.hasOwnProperty.call(restrictedPathMessages, name);\n        }\n\n        return {\n            CallExpression(node) {\n                if (isRequireCall(node)) {\n\n                    // node has arguments\n                    if (node.arguments.length) {\n                        const name = getFirstArgumentString(node.arguments[0]);\n\n                        // if first argument is a string literal or a static string template literal\n                        if (name) {\n\n                            // check if argument value is in restricted modules array\n                            if (isRestrictedPath(name)) {\n                                reportPath(node, name);\n                            }\n\n                            if (restrictedPatterns.length > 0 && ig.ignores(name)) {\n                                context.report({\n                                    node,\n                                    messageId: \"patternMessage\",\n                                    data: { name }\n                                });\n                            }\n                        }\n                    }\n                }\n            }\n        };\n    }\n};\n%/lib/rules/object-property-newline.js\u000e/**\n * @fileoverview Rule to enforce placing object properties on separate lines.\n * @author Vitor Balocco\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"layout\",\n\n        docs: {\n            description: \"enforce placing object properties on separate lines\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/object-property-newline\"\n        },\n\n        schema: [\n            {\n                type: \"object\",\n                properties: {\n                    allowAllPropertiesOnSameLine: {\n                        type: \"boolean\",\n                        default: false\n                    },\n                    allowMultiplePropertiesPerLine: { // Deprecated\n                        type: \"boolean\",\n                        default: false\n                    }\n                },\n                additionalProperties: false\n            }\n        ],\n\n        fixable: \"whitespace\",\n\n        messages: {\n            propertiesOnNewlineAll: \"Object properties must go on a new line if they aren't all on the same line.\",\n            propertiesOnNewline: \"Object properties must go on a new line.\"\n        }\n    },\n\n    create(context) {\n        const allowSameLine = context.options[0] && (\n            (context.options[0].allowAllPropertiesOnSameLine || context.options[0].allowMultiplePropertiesPerLine /* Deprecated */)\n        );\n        const messageId = allowSameLine\n            ? \"propertiesOnNewlineAll\"\n            : \"propertiesOnNewline\";\n\n        const sourceCode = context.getSourceCode();\n\n        return {\n            ObjectExpression(node) {\n                if (allowSameLine) {\n                    if (node.properties.length > 1) {\n                        const firstTokenOfFirstProperty = sourceCode.getFirstToken(node.properties[0]);\n                        const lastTokenOfLastProperty = sourceCode.getLastToken(node.properties[node.properties.length - 1]);\n\n                        if (firstTokenOfFirstProperty.loc.end.line === lastTokenOfLastProperty.loc.start.line) {\n\n                            // All keys and values are on the same line\n                            return;\n                        }\n                    }\n                }\n\n                for (let i = 1; i < node.properties.length; i++) {\n                    const lastTokenOfPreviousProperty = sourceCode.getLastToken(node.properties[i - 1]);\n                    const firstTokenOfCurrentProperty = sourceCode.getFirstToken(node.properties[i]);\n\n                    if (lastTokenOfPreviousProperty.loc.end.line === firstTokenOfCurrentProperty.loc.start.line) {\n                        context.report({\n                            node,\n                            loc: firstTokenOfCurrentProperty.loc,\n                            messageId,\n                            fix(fixer) {\n                                const comma = sourceCode.getTokenBefore(firstTokenOfCurrentProperty);\n                                const rangeAfterComma = [comma.range[1], firstTokenOfCurrentProperty.range[0]];\n\n                                // Don't perform a fix if there are any comments between the comma and the next property.\n                                if (sourceCode.text.slice(rangeAfterComma[0], rangeAfterComma[1]).trim()) {\n                                    return null;\n                                }\n\n                                return fixer.replaceTextRange(rangeAfterComma, \"\\n\");\n                            }\n                        });\n                    }\n                }\n            }\n        };\n    }\n};\n/lib/rules/sort-imports.js*z/**\n * @fileoverview Rule to require sorting of import declarations\n * @author Christian Schuller\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"enforce sorted import declarations within modules\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/sort-imports\"\n        },\n\n        schema: [\n            {\n                type: \"object\",\n                properties: {\n                    ignoreCase: {\n                        type: \"boolean\",\n                        default: false\n                    },\n                    memberSyntaxSortOrder: {\n                        type: \"array\",\n                        items: {\n                            enum: [\"none\", \"all\", \"multiple\", \"single\"]\n                        },\n                        uniqueItems: true,\n                        minItems: 4,\n                        maxItems: 4\n                    },\n                    ignoreDeclarationSort: {\n                        type: \"boolean\",\n                        default: false\n                    },\n                    ignoreMemberSort: {\n                        type: \"boolean\",\n                        default: false\n                    },\n                    allowSeparatedGroups: {\n                        type: \"boolean\",\n                        default: false\n                    }\n                },\n                additionalProperties: false\n            }\n        ],\n\n        fixable: \"code\",\n\n        messages: {\n            sortImportsAlphabetically: \"Imports should be sorted alphabetically.\",\n            sortMembersAlphabetically: \"Member '{{memberName}}' of the import declaration should be sorted alphabetically.\",\n            unexpectedSyntaxOrder: \"Expected '{{syntaxA}}' syntax before '{{syntaxB}}' syntax.\"\n        }\n    },\n\n    create(context) {\n\n        const configuration = context.options[0] || {},\n            ignoreCase = configuration.ignoreCase || false,\n            ignoreDeclarationSort = configuration.ignoreDeclarationSort || false,\n            ignoreMemberSort = configuration.ignoreMemberSort || false,\n            memberSyntaxSortOrder = configuration.memberSyntaxSortOrder || [\"none\", \"all\", \"multiple\", \"single\"],\n            allowSeparatedGroups = configuration.allowSeparatedGroups || false,\n            sourceCode = context.getSourceCode();\n        let previousDeclaration = null;\n\n        /**\n         * Gets the used member syntax style.\n         *\n         * import \"my-module.js\" --> none\n         * import * as myModule from \"my-module.js\" --> all\n         * import {myMember} from \"my-module.js\" --> single\n         * import {foo, bar} from  \"my-module.js\" --> multiple\n         * @param {ASTNode} node the ImportDeclaration node.\n         * @returns {string} used member parameter style, [\"all\", \"multiple\", \"single\"]\n         */\n        function usedMemberSyntax(node) {\n            if (node.specifiers.length === 0) {\n                return \"none\";\n            }\n            if (node.specifiers[0].type === \"ImportNamespaceSpecifier\") {\n                return \"all\";\n            }\n            if (node.specifiers.length === 1) {\n                return \"single\";\n            }\n            return \"multiple\";\n\n        }\n\n        /**\n         * Gets the group by member parameter index for given declaration.\n         * @param {ASTNode} node the ImportDeclaration node.\n         * @returns {number} the declaration group by member index.\n         */\n        function getMemberParameterGroupIndex(node) {\n            return memberSyntaxSortOrder.indexOf(usedMemberSyntax(node));\n        }\n\n        /**\n         * Gets the local name of the first imported module.\n         * @param {ASTNode} node the ImportDeclaration node.\n         * @returns {?string} the local name of the first imported module.\n         */\n        function getFirstLocalMemberName(node) {\n            if (node.specifiers[0]) {\n                return node.specifiers[0].local.name;\n            }\n            return null;\n\n        }\n\n        /**\n         * Calculates number of lines between two nodes. It is assumed that the given `left` node appears before\n         * the given `right` node in the source code. Lines are counted from the end of the `left` node till the\n         * start of the `right` node. If the given nodes are on the same line, it returns `0`, same as if they were\n         * on two consecutive lines.\n         * @param {ASTNode} left node that appears before the given `right` node.\n         * @param {ASTNode} right node that appears after the given `left` node.\n         * @returns {number} number of lines between nodes.\n         */\n        function getNumberOfLinesBetween(left, right) {\n            return Math.max(right.loc.start.line - left.loc.end.line - 1, 0);\n        }\n\n        return {\n            ImportDeclaration(node) {\n                if (!ignoreDeclarationSort) {\n                    if (\n                        previousDeclaration &&\n                        allowSeparatedGroups &&\n                        getNumberOfLinesBetween(previousDeclaration, node) > 0\n                    ) {\n\n                        // reset declaration sort\n                        previousDeclaration = null;\n                    }\n\n                    if (previousDeclaration) {\n                        const currentMemberSyntaxGroupIndex = getMemberParameterGroupIndex(node),\n                            previousMemberSyntaxGroupIndex = getMemberParameterGroupIndex(previousDeclaration);\n                        let currentLocalMemberName = getFirstLocalMemberName(node),\n                            previousLocalMemberName = getFirstLocalMemberName(previousDeclaration);\n\n                        if (ignoreCase) {\n                            previousLocalMemberName = previousLocalMemberName && previousLocalMemberName.toLowerCase();\n                            currentLocalMemberName = currentLocalMemberName && currentLocalMemberName.toLowerCase();\n                        }\n\n                        /*\n                         * When the current declaration uses a different member syntax,\n                         * then check if the ordering is correct.\n                         * Otherwise, make a default string compare (like rule sort-vars to be consistent) of the first used local member name.\n                         */\n                        if (currentMemberSyntaxGroupIndex !== previousMemberSyntaxGroupIndex) {\n                            if (currentMemberSyntaxGroupIndex < previousMemberSyntaxGroupIndex) {\n                                context.report({\n                                    node,\n                                    messageId: \"unexpectedSyntaxOrder\",\n                                    data: {\n                                        syntaxA: memberSyntaxSortOrder[currentMemberSyntaxGroupIndex],\n                                        syntaxB: memberSyntaxSortOrder[previousMemberSyntaxGroupIndex]\n                                    }\n                                });\n                            }\n                        } else {\n                            if (previousLocalMemberName &&\n                                currentLocalMemberName &&\n                                currentLocalMemberName < previousLocalMemberName\n                            ) {\n                                context.report({\n                                    node,\n                                    messageId: \"sortImportsAlphabetically\"\n                                });\n                            }\n                        }\n                    }\n\n                    previousDeclaration = node;\n                }\n\n                if (!ignoreMemberSort) {\n                    const importSpecifiers = node.specifiers.filter(specifier => specifier.type === \"ImportSpecifier\");\n                    const getSortableName = ignoreCase ? specifier => specifier.local.name.toLowerCase() : specifier => specifier.local.name;\n                    const firstUnsortedIndex = importSpecifiers.map(getSortableName).findIndex((name, index, array) => array[index - 1] > name);\n\n                    if (firstUnsortedIndex !== -1) {\n                        context.report({\n                            node: importSpecifiers[firstUnsortedIndex],\n                            messageId: \"sortMembersAlphabetically\",\n                            data: { memberName: importSpecifiers[firstUnsortedIndex].local.name },\n                            fix(fixer) {\n                                if (importSpecifiers.some(specifier =>\n                                    sourceCode.getCommentsBefore(specifier).length || sourceCode.getCommentsAfter(specifier).length)) {\n\n                                    // If there are comments in the ImportSpecifier list, don't rearrange the specifiers.\n                                    return null;\n                                }\n\n                                return fixer.replaceTextRange(\n                                    [importSpecifiers[0].range[0], importSpecifiers[importSpecifiers.length - 1].range[1]],\n                                    importSpecifiers\n\n                                        // Clone the importSpecifiers array to avoid mutating it\n                                        .slice()\n\n                                        // Sort the array into the desired order\n                                        .sort((specifierA, specifierB) => {\n                                            const aName = getSortableName(specifierA);\n                                            const bName = getSortableName(specifierB);\n\n                                            return aName > bName ? 1 : -1;\n                                        })\n\n                                        // Build a string out of the sorted list of import specifiers and the text between the originals\n                                        .reduce((sourceText, specifier, index) => {\n                                            const textAfterSpecifier = index === importSpecifiers.length - 1\n                                                ? \"\"\n                                                : sourceCode.getText().slice(importSpecifiers[index].range[1], importSpecifiers[index + 1].range[0]);\n\n                                            return sourceText + sourceCode.getText(specifier) + textAfterSpecifier;\n                                        }, \"\")\n                                );\n                            }\n                        });\n                    }\n                }\n            }\n        };\n    }\n};\n+/lib/rules/no-misleading-character-class.js\u0018/**\n * @author Toru Nagashima <https://github.com/mysticatea>\n */\n\"use strict\";\n\nconst { CALL, CONSTRUCT, ReferenceTracker, getStringIfConstant } = require(\"eslint-utils\");\nconst { RegExpParser, visitRegExpAST } = require(\"regexpp\");\nconst { isCombiningCharacter, isEmojiModifier, isRegionalIndicatorSymbol, isSurrogatePair } = require(\"./utils/unicode\");\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\n/**\n * Iterate character sequences of a given nodes.\n *\n * CharacterClassRange syntax can steal a part of character sequence,\n * so this function reverts CharacterClassRange syntax and restore the sequence.\n * @param {regexpp.AST.CharacterClassElement[]} nodes The node list to iterate character sequences.\n * @returns {IterableIterator<number[]>} The list of character sequences.\n */\nfunction *iterateCharacterSequence(nodes) {\n    let seq = [];\n\n    for (const node of nodes) {\n        switch (node.type) {\n            case \"Character\":\n                seq.push(node.value);\n                break;\n\n            case \"CharacterClassRange\":\n                seq.push(node.min.value);\n                yield seq;\n                seq = [node.max.value];\n                break;\n\n            case \"CharacterSet\":\n                if (seq.length > 0) {\n                    yield seq;\n                    seq = [];\n                }\n                break;\n\n            // no default\n        }\n    }\n\n    if (seq.length > 0) {\n        yield seq;\n    }\n}\n\nconst hasCharacterSequence = {\n    surrogatePairWithoutUFlag(chars) {\n        return chars.some((c, i) => i !== 0 && isSurrogatePair(chars[i - 1], c));\n    },\n\n    combiningClass(chars) {\n        return chars.some((c, i) => (\n            i !== 0 &&\n            isCombiningCharacter(c) &&\n            !isCombiningCharacter(chars[i - 1])\n        ));\n    },\n\n    emojiModifier(chars) {\n        return chars.some((c, i) => (\n            i !== 0 &&\n            isEmojiModifier(c) &&\n            !isEmojiModifier(chars[i - 1])\n        ));\n    },\n\n    regionalIndicatorSymbol(chars) {\n        return chars.some((c, i) => (\n            i !== 0 &&\n            isRegionalIndicatorSymbol(c) &&\n            isRegionalIndicatorSymbol(chars[i - 1])\n        ));\n    },\n\n    zwj(chars) {\n        const lastIndex = chars.length - 1;\n\n        return chars.some((c, i) => (\n            i !== 0 &&\n            i !== lastIndex &&\n            c === 0x200d &&\n            chars[i - 1] !== 0x200d &&\n            chars[i + 1] !== 0x200d\n        ));\n    }\n};\n\nconst kinds = Object.keys(hasCharacterSequence);\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"problem\",\n\n        docs: {\n            description: \"disallow characters which are made with multiple code points in character class syntax\",\n            recommended: true,\n            url: \"https://eslint.org/docs/rules/no-misleading-character-class\"\n        },\n\n        schema: [],\n\n        messages: {\n            surrogatePairWithoutUFlag: \"Unexpected surrogate pair in character class. Use 'u' flag.\",\n            combiningClass: \"Unexpected combined character in character class.\",\n            emojiModifier: \"Unexpected modified Emoji in character class.\",\n            regionalIndicatorSymbol: \"Unexpected national flag in character class.\",\n            zwj: \"Unexpected joined character sequence in character class.\"\n        }\n    },\n    create(context) {\n        const parser = new RegExpParser();\n\n        /**\n         * Verify a given regular expression.\n         * @param {Node} node The node to report.\n         * @param {string} pattern The regular expression pattern to verify.\n         * @param {string} flags The flags of the regular expression.\n         * @returns {void}\n         */\n        function verify(node, pattern, flags) {\n            const has = {\n                surrogatePairWithoutUFlag: false,\n                combiningClass: false,\n                variationSelector: false,\n                emojiModifier: false,\n                regionalIndicatorSymbol: false,\n                zwj: false\n            };\n            let patternNode;\n\n            try {\n                patternNode = parser.parsePattern(\n                    pattern,\n                    0,\n                    pattern.length,\n                    flags.includes(\"u\")\n                );\n            } catch {\n\n                // Ignore regular expressions with syntax errors\n                return;\n            }\n\n            visitRegExpAST(patternNode, {\n                onCharacterClassEnter(ccNode) {\n                    for (const chars of iterateCharacterSequence(ccNode.elements)) {\n                        for (const kind of kinds) {\n                            has[kind] = has[kind] || hasCharacterSequence[kind](chars);\n                        }\n                    }\n                }\n            });\n\n            for (const kind of kinds) {\n                if (has[kind]) {\n                    context.report({ node, messageId: kind });\n                }\n            }\n        }\n\n        return {\n            \"Literal[regex]\"(node) {\n                verify(node, node.regex.pattern, node.regex.flags);\n            },\n            \"Program\"() {\n                const scope = context.getScope();\n                const tracker = new ReferenceTracker(scope);\n\n                /*\n                 * Iterate calls of RegExp.\n                 * E.g., `new RegExp()`, `RegExp()`, `new window.RegExp()`,\n                 *       `const {RegExp: a} = window; new a()`, etc...\n                 */\n                for (const { node } of tracker.iterateGlobalReferences({\n                    RegExp: { [CALL]: true, [CONSTRUCT]: true }\n                })) {\n                    const [patternNode, flagsNode] = node.arguments;\n                    const pattern = getStringIfConstant(patternNode, scope);\n                    const flags = getStringIfConstant(flagsNode, scope);\n\n                    if (typeof pattern === \"string\") {\n                        verify(node, pattern, flags || \"\");\n                    }\n                }\n            }\n        };\n    }\n};\n /lib/rules/no-inline-comments.js\r'/**\n * @fileoverview Enforces or disallows inline comments.\n * @author Greg Cochard\n */\n\"use strict\";\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow inline comments after code\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-inline-comments\"\n        },\n\n        schema: [\n            {\n                type: \"object\",\n                properties: {\n                    ignorePattern: {\n                        type: \"string\"\n                    }\n                },\n                additionalProperties: false\n            }\n        ],\n\n        messages: {\n            unexpectedInlineComment: \"Unexpected comment inline with code.\"\n        }\n    },\n\n    create(context) {\n        const sourceCode = context.getSourceCode();\n        const options = context.options[0];\n        let customIgnoreRegExp;\n\n        if (options && options.ignorePattern) {\n            customIgnoreRegExp = new RegExp(options.ignorePattern, \"u\");\n        }\n\n        /**\n         * Will check that comments are not on lines starting with or ending with code\n         * @param {ASTNode} node The comment node to check\n         * @private\n         * @returns {void}\n         */\n        function testCodeAroundComment(node) {\n\n            const startLine = String(sourceCode.lines[node.loc.start.line - 1]),\n                endLine = String(sourceCode.lines[node.loc.end.line - 1]),\n                preamble = startLine.slice(0, node.loc.start.column).trim(),\n                postamble = endLine.slice(node.loc.end.column).trim(),\n                isPreambleEmpty = !preamble,\n                isPostambleEmpty = !postamble;\n\n            // Nothing on both sides\n            if (isPreambleEmpty && isPostambleEmpty) {\n                return;\n            }\n\n            // Matches the ignore pattern\n            if (customIgnoreRegExp && customIgnoreRegExp.test(node.value)) {\n                return;\n            }\n\n            // JSX Exception\n            if (\n                (isPreambleEmpty || preamble === \"{\") &&\n                (isPostambleEmpty || postamble === \"}\")\n            ) {\n                const enclosingNode = sourceCode.getNodeByRangeIndex(node.range[0]);\n\n                if (enclosingNode && enclosingNode.type === \"JSXEmptyExpression\") {\n                    return;\n                }\n            }\n\n            // Don't report ESLint directive comments\n            if (astUtils.isDirectiveComment(node)) {\n                return;\n            }\n\n            context.report({\n                node,\n                messageId: \"unexpectedInlineComment\"\n            });\n        }\n\n        //--------------------------------------------------------------------------\n        // Public\n        //--------------------------------------------------------------------------\n\n        return {\n            Program() {\n                sourceCode.getAllComments()\n                    .filter(token => token.type !== \"Shebang\")\n                    .forEach(testCodeAroundComment);\n            }\n        };\n    }\n};\n4/lib/linter/code-path-analysis/code-path-analyzer.jsa/**\n * @fileoverview A class of the code path analyzer.\n * @author Toru Nagashima\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst assert = require(\"assert\"),\n    { breakableTypePattern } = require(\"../../shared/ast-utils\"),\n    CodePath = require(\"./code-path\"),\n    CodePathSegment = require(\"./code-path-segment\"),\n    IdGenerator = require(\"./id-generator\"),\n    debug = require(\"./debug-helpers\");\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\n/**\n * Checks whether or not a given node is a `case` node (not `default` node).\n * @param {ASTNode} node A `SwitchCase` node to check.\n * @returns {boolean} `true` if the node is a `case` node (not `default` node).\n */\nfunction isCaseNode(node) {\n    return Boolean(node.test);\n}\n\n/**\n * Checks if a given node appears as the value of a PropertyDefinition node.\n * @param {ASTNode} node THe node to check.\n * @returns {boolean} `true` if the node is a PropertyDefinition value,\n *      false if not.\n */\nfunction isPropertyDefinitionValue(node) {\n    const parent = node.parent;\n\n    return parent && parent.type === \"PropertyDefinition\" && parent.value === node;\n}\n\n/**\n * Checks whether the given logical operator is taken into account for the code\n * path analysis.\n * @param {string} operator The operator found in the LogicalExpression node\n * @returns {boolean} `true` if the operator is \"&&\" or \"||\" or \"??\"\n */\nfunction isHandledLogicalOperator(operator) {\n    return operator === \"&&\" || operator === \"||\" || operator === \"??\";\n}\n\n/**\n * Checks whether the given assignment operator is a logical assignment operator.\n * Logical assignments are taken into account for the code path analysis\n * because of their short-circuiting semantics.\n * @param {string} operator The operator found in the AssignmentExpression node\n * @returns {boolean} `true` if the operator is \"&&=\" or \"||=\" or \"??=\"\n */\nfunction isLogicalAssignmentOperator(operator) {\n    return operator === \"&&=\" || operator === \"||=\" || operator === \"??=\";\n}\n\n/**\n * Gets the label if the parent node of a given node is a LabeledStatement.\n * @param {ASTNode} node A node to get.\n * @returns {string|null} The label or `null`.\n */\nfunction getLabel(node) {\n    if (node.parent.type === \"LabeledStatement\") {\n        return node.parent.label.name;\n    }\n    return null;\n}\n\n/**\n * Checks whether or not a given logical expression node goes different path\n * between the `true` case and the `false` case.\n * @param {ASTNode} node A node to check.\n * @returns {boolean} `true` if the node is a test of a choice statement.\n */\nfunction isForkingByTrueOrFalse(node) {\n    const parent = node.parent;\n\n    switch (parent.type) {\n        case \"ConditionalExpression\":\n        case \"IfStatement\":\n        case \"WhileStatement\":\n        case \"DoWhileStatement\":\n        case \"ForStatement\":\n            return parent.test === node;\n\n        case \"LogicalExpression\":\n            return isHandledLogicalOperator(parent.operator);\n\n        case \"AssignmentExpression\":\n            return isLogicalAssignmentOperator(parent.operator);\n\n        default:\n            return false;\n    }\n}\n\n/**\n * Gets the boolean value of a given literal node.\n *\n * This is used to detect infinity loops (e.g. `while (true) {}`).\n * Statements preceded by an infinity loop are unreachable if the loop didn't\n * have any `break` statement.\n * @param {ASTNode} node A node to get.\n * @returns {boolean|undefined} a boolean value if the node is a Literal node,\n *   otherwise `undefined`.\n */\nfunction getBooleanValueIfSimpleConstant(node) {\n    if (node.type === \"Literal\") {\n        return Boolean(node.value);\n    }\n    return void 0;\n}\n\n/**\n * Checks that a given identifier node is a reference or not.\n *\n * This is used to detect the first throwable node in a `try` block.\n * @param {ASTNode} node An Identifier node to check.\n * @returns {boolean} `true` if the node is a reference.\n */\nfunction isIdentifierReference(node) {\n    const parent = node.parent;\n\n    switch (parent.type) {\n        case \"LabeledStatement\":\n        case \"BreakStatement\":\n        case \"ContinueStatement\":\n        case \"ArrayPattern\":\n        case \"RestElement\":\n        case \"ImportSpecifier\":\n        case \"ImportDefaultSpecifier\":\n        case \"ImportNamespaceSpecifier\":\n        case \"CatchClause\":\n            return false;\n\n        case \"FunctionDeclaration\":\n        case \"FunctionExpression\":\n        case \"ArrowFunctionExpression\":\n        case \"ClassDeclaration\":\n        case \"ClassExpression\":\n        case \"VariableDeclarator\":\n            return parent.id !== node;\n\n        case \"Property\":\n        case \"PropertyDefinition\":\n        case \"MethodDefinition\":\n            return (\n                parent.key !== node ||\n                parent.computed ||\n                parent.shorthand\n            );\n\n        case \"AssignmentPattern\":\n            return parent.key !== node;\n\n        default:\n            return true;\n    }\n}\n\n/**\n * Updates the current segment with the head segment.\n * This is similar to local branches and tracking branches of git.\n *\n * To separate the current and the head is in order to not make useless segments.\n *\n * In this process, both \"onCodePathSegmentStart\" and \"onCodePathSegmentEnd\"\n * events are fired.\n * @param {CodePathAnalyzer} analyzer The instance.\n * @param {ASTNode} node The current AST node.\n * @returns {void}\n */\nfunction forwardCurrentToHead(analyzer, node) {\n    const codePath = analyzer.codePath;\n    const state = CodePath.getState(codePath);\n    const currentSegments = state.currentSegments;\n    const headSegments = state.headSegments;\n    const end = Math.max(currentSegments.length, headSegments.length);\n    let i, currentSegment, headSegment;\n\n    // Fires leaving events.\n    for (i = 0; i < end; ++i) {\n        currentSegment = currentSegments[i];\n        headSegment = headSegments[i];\n\n        if (currentSegment !== headSegment && currentSegment) {\n            debug.dump(`onCodePathSegmentEnd ${currentSegment.id}`);\n\n            if (currentSegment.reachable) {\n                analyzer.emitter.emit(\n                    \"onCodePathSegmentEnd\",\n                    currentSegment,\n                    node\n                );\n            }\n        }\n    }\n\n    // Update state.\n    state.currentSegments = headSegments;\n\n    // Fires entering events.\n    for (i = 0; i < end; ++i) {\n        currentSegment = currentSegments[i];\n        headSegment = headSegments[i];\n\n        if (currentSegment !== headSegment && headSegment) {\n            debug.dump(`onCodePathSegmentStart ${headSegment.id}`);\n\n            CodePathSegment.markUsed(headSegment);\n            if (headSegment.reachable) {\n                analyzer.emitter.emit(\n                    \"onCodePathSegmentStart\",\n                    headSegment,\n                    node\n                );\n            }\n        }\n    }\n\n}\n\n/**\n * Updates the current segment with empty.\n * This is called at the last of functions or the program.\n * @param {CodePathAnalyzer} analyzer The instance.\n * @param {ASTNode} node The current AST node.\n * @returns {void}\n */\nfunction leaveFromCurrentSegment(analyzer, node) {\n    const state = CodePath.getState(analyzer.codePath);\n    const currentSegments = state.currentSegments;\n\n    for (let i = 0; i < currentSegments.length; ++i) {\n        const currentSegment = currentSegments[i];\n\n        debug.dump(`onCodePathSegmentEnd ${currentSegment.id}`);\n        if (currentSegment.reachable) {\n            analyzer.emitter.emit(\n                \"onCodePathSegmentEnd\",\n                currentSegment,\n                node\n            );\n        }\n    }\n\n    state.currentSegments = [];\n}\n\n/**\n * Updates the code path due to the position of a given node in the parent node\n * thereof.\n *\n * For example, if the node is `parent.consequent`, this creates a fork from the\n * current path.\n * @param {CodePathAnalyzer} analyzer The instance.\n * @param {ASTNode} node The current AST node.\n * @returns {void}\n */\nfunction preprocess(analyzer, node) {\n    const codePath = analyzer.codePath;\n    const state = CodePath.getState(codePath);\n    const parent = node.parent;\n\n    switch (parent.type) {\n\n        // The `arguments.length == 0` case is in `postprocess` function.\n        case \"CallExpression\":\n            if (parent.optional === true && parent.arguments.length >= 1 && parent.arguments[0] === node) {\n                state.makeOptionalRight();\n            }\n            break;\n        case \"MemberExpression\":\n            if (parent.optional === true && parent.property === node) {\n                state.makeOptionalRight();\n            }\n            break;\n\n        case \"LogicalExpression\":\n            if (\n                parent.right === node &&\n                isHandledLogicalOperator(parent.operator)\n            ) {\n                state.makeLogicalRight();\n            }\n            break;\n\n        case \"AssignmentExpression\":\n            if (\n                parent.right === node &&\n                isLogicalAssignmentOperator(parent.operator)\n            ) {\n                state.makeLogicalRight();\n            }\n            break;\n\n        case \"ConditionalExpression\":\n        case \"IfStatement\":\n\n            /*\n             * Fork if this node is at `consequent`/`alternate`.\n             * `popForkContext()` exists at `IfStatement:exit` and\n             * `ConditionalExpression:exit`.\n             */\n            if (parent.consequent === node) {\n                state.makeIfConsequent();\n            } else if (parent.alternate === node) {\n                state.makeIfAlternate();\n            }\n            break;\n\n        case \"SwitchCase\":\n            if (parent.consequent[0] === node) {\n                state.makeSwitchCaseBody(false, !parent.test);\n            }\n            break;\n\n        case \"TryStatement\":\n            if (parent.handler === node) {\n                state.makeCatchBlock();\n            } else if (parent.finalizer === node) {\n                state.makeFinallyBlock();\n            }\n            break;\n\n        case \"WhileStatement\":\n            if (parent.test === node) {\n                state.makeWhileTest(getBooleanValueIfSimpleConstant(node));\n            } else {\n                assert(parent.body === node);\n                state.makeWhileBody();\n            }\n            break;\n\n        case \"DoWhileStatement\":\n            if (parent.body === node) {\n                state.makeDoWhileBody();\n            } else {\n                assert(parent.test === node);\n                state.makeDoWhileTest(getBooleanValueIfSimpleConstant(node));\n            }\n            break;\n\n        case \"ForStatement\":\n            if (parent.test === node) {\n                state.makeForTest(getBooleanValueIfSimpleConstant(node));\n            } else if (parent.update === node) {\n                state.makeForUpdate();\n            } else if (parent.body === node) {\n                state.makeForBody();\n            }\n            break;\n\n        case \"ForInStatement\":\n        case \"ForOfStatement\":\n            if (parent.left === node) {\n                state.makeForInOfLeft();\n            } else if (parent.right === node) {\n                state.makeForInOfRight();\n            } else {\n                assert(parent.body === node);\n                state.makeForInOfBody();\n            }\n            break;\n\n        case \"AssignmentPattern\":\n\n            /*\n             * Fork if this node is at `right`.\n             * `left` is executed always, so it uses the current path.\n             * `popForkContext()` exists at `AssignmentPattern:exit`.\n             */\n            if (parent.right === node) {\n                state.pushForkContext();\n                state.forkBypassPath();\n                state.forkPath();\n            }\n            break;\n\n        default:\n            break;\n    }\n}\n\n/**\n * Updates the code path due to the type of a given node in entering.\n * @param {CodePathAnalyzer} analyzer The instance.\n * @param {ASTNode} node The current AST node.\n * @returns {void}\n */\nfunction processCodePathToEnter(analyzer, node) {\n    let codePath = analyzer.codePath;\n    let state = codePath && CodePath.getState(codePath);\n    const parent = node.parent;\n\n    /**\n     * Creates a new code path and trigger the onCodePathStart event\n     * based on the currently selected node.\n     * @param {string} origin The reason the code path was started.\n     * @returns {void}\n     */\n    function startCodePath(origin) {\n        if (codePath) {\n\n            // Emits onCodePathSegmentStart events if updated.\n            forwardCurrentToHead(analyzer, node);\n            debug.dumpState(node, state, false);\n        }\n\n        // Create the code path of this scope.\n        codePath = analyzer.codePath = new CodePath({\n            id: analyzer.idGenerator.next(),\n            origin,\n            upper: codePath,\n            onLooped: analyzer.onLooped\n        });\n        state = CodePath.getState(codePath);\n\n        // Emits onCodePathStart events.\n        debug.dump(`onCodePathStart ${codePath.id}`);\n        analyzer.emitter.emit(\"onCodePathStart\", codePath, node);\n    }\n\n    /*\n     * Special case: The right side of class field initializer is considered\n     * to be its own function, so we need to start a new code path in this\n     * case.\n     */\n    if (isPropertyDefinitionValue(node)) {\n        startCodePath(\"class-field-initializer\");\n\n        /*\n         * Intentional fall through because `node` needs to also be\n         * processed by the code below. For example, if we have:\n         *\n         * class Foo {\n         *     a = () => {}\n         * }\n         *\n         * In this case, we also need start a second code path.\n         */\n\n    }\n\n    switch (node.type) {\n        case \"Program\":\n            startCodePath(\"program\");\n            break;\n\n        case \"FunctionDeclaration\":\n        case \"FunctionExpression\":\n        case \"ArrowFunctionExpression\":\n            startCodePath(\"function\");\n            break;\n\n        case \"StaticBlock\":\n            startCodePath(\"class-static-block\");\n            break;\n\n        case \"ChainExpression\":\n            state.pushChainContext();\n            break;\n        case \"CallExpression\":\n            if (node.optional === true) {\n                state.makeOptionalNode();\n            }\n            break;\n        case \"MemberExpression\":\n            if (node.optional === true) {\n                state.makeOptionalNode();\n            }\n            break;\n\n        case \"LogicalExpression\":\n            if (isHandledLogicalOperator(node.operator)) {\n                state.pushChoiceContext(\n                    node.operator,\n                    isForkingByTrueOrFalse(node)\n                );\n            }\n            break;\n\n        case \"AssignmentExpression\":\n            if (isLogicalAssignmentOperator(node.operator)) {\n                state.pushChoiceContext(\n                    node.operator.slice(0, -1), // removes `=` from the end\n                    isForkingByTrueOrFalse(node)\n                );\n            }\n            break;\n\n        case \"ConditionalExpression\":\n        case \"IfStatement\":\n            state.pushChoiceContext(\"test\", false);\n            break;\n\n        case \"SwitchStatement\":\n            state.pushSwitchContext(\n                node.cases.some(isCaseNode),\n                getLabel(node)\n            );\n            break;\n\n        case \"TryStatement\":\n            state.pushTryContext(Boolean(node.finalizer));\n            break;\n\n        case \"SwitchCase\":\n\n            /*\n             * Fork if this node is after the 2st node in `cases`.\n             * It's similar to `else` blocks.\n             * The next `test` node is processed in this path.\n             */\n            if (parent.discriminant !== node && parent.cases[0] !== node) {\n                state.forkPath();\n            }\n            break;\n\n        case \"WhileStatement\":\n        case \"DoWhileStatement\":\n        case \"ForStatement\":\n        case \"ForInStatement\":\n        case \"ForOfStatement\":\n            state.pushLoopContext(node.type, getLabel(node));\n            break;\n\n        case \"LabeledStatement\":\n            if (!breakableTypePattern.test(node.body.type)) {\n                state.pushBreakContext(false, node.label.name);\n            }\n            break;\n\n        default:\n            break;\n    }\n\n    // Emits onCodePathSegmentStart events if updated.\n    forwardCurrentToHead(analyzer, node);\n    debug.dumpState(node, state, false);\n}\n\n/**\n * Updates the code path due to the type of a given node in leaving.\n * @param {CodePathAnalyzer} analyzer The instance.\n * @param {ASTNode} node The current AST node.\n * @returns {void}\n */\nfunction processCodePathToExit(analyzer, node) {\n\n    const codePath = analyzer.codePath;\n    const state = CodePath.getState(codePath);\n    let dontForward = false;\n\n    switch (node.type) {\n        case \"ChainExpression\":\n            state.popChainContext();\n            break;\n\n        case \"IfStatement\":\n        case \"ConditionalExpression\":\n            state.popChoiceContext();\n            break;\n\n        case \"LogicalExpression\":\n            if (isHandledLogicalOperator(node.operator)) {\n                state.popChoiceContext();\n            }\n            break;\n\n        case \"AssignmentExpression\":\n            if (isLogicalAssignmentOperator(node.operator)) {\n                state.popChoiceContext();\n            }\n            break;\n\n        case \"SwitchStatement\":\n            state.popSwitchContext();\n            break;\n\n        case \"SwitchCase\":\n\n            /*\n             * This is the same as the process at the 1st `consequent` node in\n             * `preprocess` function.\n             * Must do if this `consequent` is empty.\n             */\n            if (node.consequent.length === 0) {\n                state.makeSwitchCaseBody(true, !node.test);\n            }\n            if (state.forkContext.reachable) {\n                dontForward = true;\n            }\n            break;\n\n        case \"TryStatement\":\n            state.popTryContext();\n            break;\n\n        case \"BreakStatement\":\n            forwardCurrentToHead(analyzer, node);\n            state.makeBreak(node.label && node.label.name);\n            dontForward = true;\n            break;\n\n        case \"ContinueStatement\":\n            forwardCurrentToHead(analyzer, node);\n            state.makeContinue(node.label && node.label.name);\n            dontForward = true;\n            break;\n\n        case \"ReturnStatement\":\n            forwardCurrentToHead(analyzer, node);\n            state.makeReturn();\n            dontForward = true;\n            break;\n\n        case \"ThrowStatement\":\n            forwardCurrentToHead(analyzer, node);\n            state.makeThrow();\n            dontForward = true;\n            break;\n\n        case \"Identifier\":\n            if (isIdentifierReference(node)) {\n                state.makeFirstThrowablePathInTryBlock();\n                dontForward = true;\n            }\n            break;\n\n        case \"CallExpression\":\n        case \"ImportExpression\":\n        case \"MemberExpression\":\n        case \"NewExpression\":\n        case \"YieldExpression\":\n            state.makeFirstThrowablePathInTryBlock();\n            break;\n\n        case \"WhileStatement\":\n        case \"DoWhileStatement\":\n        case \"ForStatement\":\n        case \"ForInStatement\":\n        case \"ForOfStatement\":\n            state.popLoopContext();\n            break;\n\n        case \"AssignmentPattern\":\n            state.popForkContext();\n            break;\n\n        case \"LabeledStatement\":\n            if (!breakableTypePattern.test(node.body.type)) {\n                state.popBreakContext();\n            }\n            break;\n\n        default:\n            break;\n    }\n\n    // Emits onCodePathSegmentStart events if updated.\n    if (!dontForward) {\n        forwardCurrentToHead(analyzer, node);\n    }\n    debug.dumpState(node, state, true);\n}\n\n/**\n * Updates the code path to finalize the current code path.\n * @param {CodePathAnalyzer} analyzer The instance.\n * @param {ASTNode} node The current AST node.\n * @returns {void}\n */\nfunction postprocess(analyzer, node) {\n\n    /**\n     * Ends the code path for the current node.\n     * @returns {void}\n     */\n    function endCodePath() {\n        let codePath = analyzer.codePath;\n\n        // Mark the current path as the final node.\n        CodePath.getState(codePath).makeFinal();\n\n        // Emits onCodePathSegmentEnd event of the current segments.\n        leaveFromCurrentSegment(analyzer, node);\n\n        // Emits onCodePathEnd event of this code path.\n        debug.dump(`onCodePathEnd ${codePath.id}`);\n        analyzer.emitter.emit(\"onCodePathEnd\", codePath, node);\n        debug.dumpDot(codePath);\n\n        codePath = analyzer.codePath = analyzer.codePath.upper;\n        if (codePath) {\n            debug.dumpState(node, CodePath.getState(codePath), true);\n        }\n\n    }\n\n    switch (node.type) {\n        case \"Program\":\n        case \"FunctionDeclaration\":\n        case \"FunctionExpression\":\n        case \"ArrowFunctionExpression\":\n        case \"StaticBlock\": {\n            endCodePath();\n            break;\n        }\n\n        // The `arguments.length >= 1` case is in `preprocess` function.\n        case \"CallExpression\":\n            if (node.optional === true && node.arguments.length === 0) {\n                CodePath.getState(analyzer.codePath).makeOptionalRight();\n            }\n            break;\n\n        default:\n            break;\n    }\n\n    /*\n     * Special case: The right side of class field initializer is considered\n     * to be its own function, so we need to end a code path in this\n     * case.\n     *\n     * We need to check after the other checks in order to close the\n     * code paths in the correct order for code like this:\n     *\n     *\n     * class Foo {\n     *     a = () => {}\n     * }\n     *\n     * In this case, The ArrowFunctionExpression code path is closed first\n     * and then we need to close the code path for the PropertyDefinition\n     * value.\n     */\n    if (isPropertyDefinitionValue(node)) {\n        endCodePath();\n    }\n}\n\n//------------------------------------------------------------------------------\n// Public Interface\n//------------------------------------------------------------------------------\n\n/**\n * The class to analyze code paths.\n * This class implements the EventGenerator interface.\n */\nclass CodePathAnalyzer {\n\n    /**\n     * @param {EventGenerator} eventGenerator An event generator to wrap.\n     */\n    constructor(eventGenerator) {\n        this.original = eventGenerator;\n        this.emitter = eventGenerator.emitter;\n        this.codePath = null;\n        this.idGenerator = new IdGenerator(\"s\");\n        this.currentNode = null;\n        this.onLooped = this.onLooped.bind(this);\n    }\n\n    /**\n     * Does the process to enter a given AST node.\n     * This updates state of analysis and calls `enterNode` of the wrapped.\n     * @param {ASTNode} node A node which is entering.\n     * @returns {void}\n     */\n    enterNode(node) {\n        this.currentNode = node;\n\n        // Updates the code path due to node's position in its parent node.\n        if (node.parent) {\n            preprocess(this, node);\n        }\n\n        /*\n         * Updates the code path.\n         * And emits onCodePathStart/onCodePathSegmentStart events.\n         */\n        processCodePathToEnter(this, node);\n\n        // Emits node events.\n        this.original.enterNode(node);\n\n        this.currentNode = null;\n    }\n\n    /**\n     * Does the process to leave a given AST node.\n     * This updates state of analysis and calls `leaveNode` of the wrapped.\n     * @param {ASTNode} node A node which is leaving.\n     * @returns {void}\n     */\n    leaveNode(node) {\n        this.currentNode = node;\n\n        /*\n         * Updates the code path.\n         * And emits onCodePathStart/onCodePathSegmentStart events.\n         */\n        processCodePathToExit(this, node);\n\n        // Emits node events.\n        this.original.leaveNode(node);\n\n        // Emits the last onCodePathStart/onCodePathSegmentStart events.\n        postprocess(this, node);\n\n        this.currentNode = null;\n    }\n\n    /**\n     * This is called on a code path looped.\n     * Then this raises a looped event.\n     * @param {CodePathSegment} fromSegment A segment of prev.\n     * @param {CodePathSegment} toSegment A segment of next.\n     * @returns {void}\n     */\n    onLooped(fromSegment, toSegment) {\n        if (fromSegment.reachable && toSegment.reachable) {\n            debug.dump(`onCodePathSegmentLoop ${fromSegment.id} -> ${toSegment.id}`);\n            this.emitter.emit(\n                \"onCodePathSegmentLoop\",\n                fromSegment,\n                toSegment,\n                this.currentNode\n            );\n        }\n    }\n}\n\nmodule.exports = CodePathAnalyzer;\n\"/lib/rules/max-classes-per-file.js\nK/**\n * @fileoverview Enforce a maximum number of classes per file\n * @author James Garbutt <https://github.com/43081j>\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"enforce a maximum number of classes per file\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/max-classes-per-file\"\n        },\n\n        schema: [\n            {\n                oneOf: [\n                    {\n                        type: \"integer\",\n                        minimum: 1\n                    },\n                    {\n                        type: \"object\",\n                        properties: {\n                            ignoreExpressions: {\n                                type: \"boolean\"\n                            },\n                            max: {\n                                type: \"integer\",\n                                minimum: 1\n                            }\n                        },\n                        additionalProperties: false\n                    }\n                ]\n            }\n        ],\n\n        messages: {\n            maximumExceeded: \"File has too many classes ({{ classCount }}). Maximum allowed is {{ max }}.\"\n        }\n    },\n    create(context) {\n        const [option = {}] = context.options;\n        const [ignoreExpressions, max] = typeof option === \"number\"\n            ? [false, option || 1]\n            : [option.ignoreExpressions, option.max || 1];\n\n        let classCount = 0;\n\n        return {\n            Program() {\n                classCount = 0;\n            },\n            \"Program:exit\"(node) {\n                if (classCount > max) {\n                    context.report({\n                        node,\n                        messageId: \"maximumExceeded\",\n                        data: {\n                            classCount,\n                            max\n                        }\n                    });\n                }\n            },\n            \"ClassDeclaration\"() {\n                classCount++;\n            },\n            \"ClassExpression\"() {\n                if (!ignoreExpressions) {\n                    classCount++;\n                }\n            }\n        };\n    }\n};\n/lib/eslint/eslint.jsi\n/**\n * @fileoverview Main API Class\n * @author Kai Cataldo\n * @author Toru Nagashima\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst path = require(\"path\");\nconst fs = require(\"fs\");\nconst { promisify } = require(\"util\");\nconst { CLIEngine, getCLIEngineInternalSlots } = require(\"../cli-engine/cli-engine\");\nconst BuiltinRules = require(\"../rules\");\nconst {\n    Legacy: {\n        ConfigOps: {\n            getRuleSeverity\n        }\n    }\n} = require(\"@eslint/eslintrc\");\nconst { version } = require(\"../../package.json\");\n\n//------------------------------------------------------------------------------\n// Typedefs\n//------------------------------------------------------------------------------\n\n/** @typedef {import(\"../cli-engine/cli-engine\").LintReport} CLIEngineLintReport */\n/** @typedef {import(\"../shared/types\").DeprecatedRuleInfo} DeprecatedRuleInfo */\n/** @typedef {import(\"../shared/types\").ConfigData} ConfigData */\n/** @typedef {import(\"../shared/types\").LintMessage} LintMessage */\n/** @typedef {import(\"../shared/types\").SuppressedLintMessage} SuppressedLintMessage */\n/** @typedef {import(\"../shared/types\").Plugin} Plugin */\n/** @typedef {import(\"../shared/types\").Rule} Rule */\n\n/**\n * The main formatter object.\n * @typedef Formatter\n * @property {function(LintResult[]): string | Promise<string>} format format function.\n */\n\n/**\n * The options with which to configure the ESLint instance.\n * @typedef {Object} ESLintOptions\n * @property {boolean} [allowInlineConfig] Enable or disable inline configuration comments.\n * @property {ConfigData} [baseConfig] Base config object, extended by all configs used with this instance\n * @property {boolean} [cache] Enable result caching.\n * @property {string} [cacheLocation] The cache file to use instead of .eslintcache.\n * @property {\"metadata\" | \"content\"} [cacheStrategy] The strategy used to detect changed files.\n * @property {string} [cwd] The value to use for the current working directory.\n * @property {boolean} [errorOnUnmatchedPattern] If `false` then `ESLint#lintFiles()` doesn't throw even if no target files found. Defaults to `true`.\n * @property {string[]} [extensions] An array of file extensions to check.\n * @property {boolean|Function} [fix] Execute in autofix mode. If a function, should return a boolean.\n * @property {string[]} [fixTypes] Array of rule types to apply fixes for.\n * @property {boolean} [globInputPaths] Set to false to skip glob resolution of input file paths to lint (default: true). If false, each input file paths is assumed to be a non-glob path to an existing file.\n * @property {boolean} [ignore] False disables use of .eslintignore.\n * @property {string} [ignorePath] The ignore file to use instead of .eslintignore.\n * @property {ConfigData} [overrideConfig] Override config object, overrides all configs used with this instance\n * @property {string} [overrideConfigFile] The configuration file to use.\n * @property {Record<string,Plugin>|null} [plugins] Preloaded plugins. This is a map-like object, keys are plugin IDs and each value is implementation.\n * @property {\"error\" | \"warn\" | \"off\"} [reportUnusedDisableDirectives] the severity to report unused eslint-disable directives.\n * @property {string} [resolvePluginsRelativeTo] The folder where plugins should be resolved from, defaulting to the CWD.\n * @property {string[]} [rulePaths] An array of directories to load custom rules from.\n * @property {boolean} [useEslintrc] False disables looking for .eslintrc.* files.\n */\n\n/**\n * A rules metadata object.\n * @typedef {Object} RulesMeta\n * @property {string} id The plugin ID.\n * @property {Object} definition The plugin definition.\n */\n\n/**\n * A linting result.\n * @typedef {Object} LintResult\n * @property {string} filePath The path to the file that was linted.\n * @property {LintMessage[]} messages All of the messages for the result.\n * @property {SuppressedLintMessage[]} suppressedMessages All of the suppressed messages for the result.\n * @property {number} errorCount Number of errors for the result.\n * @property {number} fatalErrorCount Number of fatal errors for the result.\n * @property {number} warningCount Number of warnings for the result.\n * @property {number} fixableErrorCount Number of fixable errors for the result.\n * @property {number} fixableWarningCount Number of fixable warnings for the result.\n * @property {string} [source] The source code of the file that was linted.\n * @property {string} [output] The source code of the file that was linted, with as many fixes applied as possible.\n * @property {DeprecatedRuleInfo[]} usedDeprecatedRules The list of used deprecated rules.\n */\n\n/**\n * Private members for the `ESLint` instance.\n * @typedef {Object} ESLintPrivateMembers\n * @property {CLIEngine} cliEngine The wrapped CLIEngine instance.\n * @property {ESLintOptions} options The options used to instantiate the ESLint instance.\n */\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\nconst writeFile = promisify(fs.writeFile);\n\n/**\n * The map with which to store private class members.\n * @type {WeakMap<ESLint, ESLintPrivateMembers>}\n */\nconst privateMembersMap = new WeakMap();\n\n/**\n * Check if a given value is a non-empty string or not.\n * @param {any} x The value to check.\n * @returns {boolean} `true` if `x` is a non-empty string.\n */\nfunction isNonEmptyString(x) {\n    return typeof x === \"string\" && x.trim() !== \"\";\n}\n\n/**\n * Check if a given value is an array of non-empty stringss or not.\n * @param {any} x The value to check.\n * @returns {boolean} `true` if `x` is an array of non-empty stringss.\n */\nfunction isArrayOfNonEmptyString(x) {\n    return Array.isArray(x) && x.every(isNonEmptyString);\n}\n\n/**\n * Check if a given value is a valid fix type or not.\n * @param {any} x The value to check.\n * @returns {boolean} `true` if `x` is valid fix type.\n */\nfunction isFixType(x) {\n    return x === \"directive\" || x === \"problem\" || x === \"suggestion\" || x === \"layout\";\n}\n\n/**\n * Check if a given value is an array of fix types or not.\n * @param {any} x The value to check.\n * @returns {boolean} `true` if `x` is an array of fix types.\n */\nfunction isFixTypeArray(x) {\n    return Array.isArray(x) && x.every(isFixType);\n}\n\n/**\n * The error for invalid options.\n */\nclass ESLintInvalidOptionsError extends Error {\n    constructor(messages) {\n        super(`Invalid Options:\\n- ${messages.join(\"\\n- \")}`);\n        this.code = \"ESLINT_INVALID_OPTIONS\";\n        Error.captureStackTrace(this, ESLintInvalidOptionsError);\n    }\n}\n\n/**\n * Validates and normalizes options for the wrapped CLIEngine instance.\n * @param {ESLintOptions} options The options to process.\n * @throws {ESLintInvalidOptionsError} If of any of a variety of type errors.\n * @returns {ESLintOptions} The normalized options.\n */\nfunction processOptions({\n    allowInlineConfig = true, // ← we cannot use `overrideConfig.noInlineConfig` instead because `allowInlineConfig` has side-effect that suppress warnings that show inline configs are ignored.\n    baseConfig = null,\n    cache = false,\n    cacheLocation = \".eslintcache\",\n    cacheStrategy = \"metadata\",\n    cwd = process.cwd(),\n    errorOnUnmatchedPattern = true,\n    extensions = null, // ← should be null by default because if it's an array then it suppresses RFC20 feature.\n    fix = false,\n    fixTypes = null, // ← should be null by default because if it's an array then it suppresses rules that don't have the `meta.type` property.\n    globInputPaths = true,\n    ignore = true,\n    ignorePath = null, // ← should be null by default because if it's a string then it may throw ENOENT.\n    overrideConfig = null,\n    overrideConfigFile = null,\n    plugins = {},\n    reportUnusedDisableDirectives = null, // ← should be null by default because if it's a string then it overrides the 'reportUnusedDisableDirectives' setting in config files. And we cannot use `overrideConfig.reportUnusedDisableDirectives` instead because we cannot configure the `error` severity with that.\n    resolvePluginsRelativeTo = null, // ← should be null by default because if it's a string then it suppresses RFC47 feature.\n    rulePaths = [],\n    useEslintrc = true,\n    ...unknownOptions\n}) {\n    const errors = [];\n    const unknownOptionKeys = Object.keys(unknownOptions);\n\n    if (unknownOptionKeys.length >= 1) {\n        errors.push(`Unknown options: ${unknownOptionKeys.join(\", \")}`);\n        if (unknownOptionKeys.includes(\"cacheFile\")) {\n            errors.push(\"'cacheFile' has been removed. Please use the 'cacheLocation' option instead.\");\n        }\n        if (unknownOptionKeys.includes(\"configFile\")) {\n            errors.push(\"'configFile' has been removed. Please use the 'overrideConfigFile' option instead.\");\n        }\n        if (unknownOptionKeys.includes(\"envs\")) {\n            errors.push(\"'envs' has been removed. Please use the 'overrideConfig.env' option instead.\");\n        }\n        if (unknownOptionKeys.includes(\"globals\")) {\n            errors.push(\"'globals' has been removed. Please use the 'overrideConfig.globals' option instead.\");\n        }\n        if (unknownOptionKeys.includes(\"ignorePattern\")) {\n            errors.push(\"'ignorePattern' has been removed. Please use the 'overrideConfig.ignorePatterns' option instead.\");\n        }\n        if (unknownOptionKeys.includes(\"parser\")) {\n            errors.push(\"'parser' has been removed. Please use the 'overrideConfig.parser' option instead.\");\n        }\n        if (unknownOptionKeys.includes(\"parserOptions\")) {\n            errors.push(\"'parserOptions' has been removed. Please use the 'overrideConfig.parserOptions' option instead.\");\n        }\n        if (unknownOptionKeys.includes(\"rules\")) {\n            errors.push(\"'rules' has been removed. Please use the 'overrideConfig.rules' option instead.\");\n        }\n    }\n    if (typeof allowInlineConfig !== \"boolean\") {\n        errors.push(\"'allowInlineConfig' must be a boolean.\");\n    }\n    if (typeof baseConfig !== \"object\") {\n        errors.push(\"'baseConfig' must be an object or null.\");\n    }\n    if (typeof cache !== \"boolean\") {\n        errors.push(\"'cache' must be a boolean.\");\n    }\n    if (!isNonEmptyString(cacheLocation)) {\n        errors.push(\"'cacheLocation' must be a non-empty string.\");\n    }\n    if (\n        cacheStrategy !== \"metadata\" &&\n        cacheStrategy !== \"content\"\n    ) {\n        errors.push(\"'cacheStrategy' must be any of \\\"metadata\\\", \\\"content\\\".\");\n    }\n    if (!isNonEmptyString(cwd) || !path.isAbsolute(cwd)) {\n        errors.push(\"'cwd' must be an absolute path.\");\n    }\n    if (typeof errorOnUnmatchedPattern !== \"boolean\") {\n        errors.push(\"'errorOnUnmatchedPattern' must be a boolean.\");\n    }\n    if (!isArrayOfNonEmptyString(extensions) && extensions !== null) {\n        errors.push(\"'extensions' must be an array of non-empty strings or null.\");\n    }\n    if (typeof fix !== \"boolean\" && typeof fix !== \"function\") {\n        errors.push(\"'fix' must be a boolean or a function.\");\n    }\n    if (fixTypes !== null && !isFixTypeArray(fixTypes)) {\n        errors.push(\"'fixTypes' must be an array of any of \\\"directive\\\", \\\"problem\\\", \\\"suggestion\\\", and \\\"layout\\\".\");\n    }\n    if (typeof globInputPaths !== \"boolean\") {\n        errors.push(\"'globInputPaths' must be a boolean.\");\n    }\n    if (typeof ignore !== \"boolean\") {\n        errors.push(\"'ignore' must be a boolean.\");\n    }\n    if (!isNonEmptyString(ignorePath) && ignorePath !== null) {\n        errors.push(\"'ignorePath' must be a non-empty string or null.\");\n    }\n    if (typeof overrideConfig !== \"object\") {\n        errors.push(\"'overrideConfig' must be an object or null.\");\n    }\n    if (!isNonEmptyString(overrideConfigFile) && overrideConfigFile !== null) {\n        errors.push(\"'overrideConfigFile' must be a non-empty string or null.\");\n    }\n    if (typeof plugins !== \"object\") {\n        errors.push(\"'plugins' must be an object or null.\");\n    } else if (plugins !== null && Object.keys(plugins).includes(\"\")) {\n        errors.push(\"'plugins' must not include an empty string.\");\n    }\n    if (Array.isArray(plugins)) {\n        errors.push(\"'plugins' doesn't add plugins to configuration to load. Please use the 'overrideConfig.plugins' option instead.\");\n    }\n    if (\n        reportUnusedDisableDirectives !== \"error\" &&\n        reportUnusedDisableDirectives !== \"warn\" &&\n        reportUnusedDisableDirectives !== \"off\" &&\n        reportUnusedDisableDirectives !== null\n    ) {\n        errors.push(\"'reportUnusedDisableDirectives' must be any of \\\"error\\\", \\\"warn\\\", \\\"off\\\", and null.\");\n    }\n    if (\n        !isNonEmptyString(resolvePluginsRelativeTo) &&\n        resolvePluginsRelativeTo !== null\n    ) {\n        errors.push(\"'resolvePluginsRelativeTo' must be a non-empty string or null.\");\n    }\n    if (!isArrayOfNonEmptyString(rulePaths)) {\n        errors.push(\"'rulePaths' must be an array of non-empty strings.\");\n    }\n    if (typeof useEslintrc !== \"boolean\") {\n        errors.push(\"'useEslintrc' must be a boolean.\");\n    }\n\n    if (errors.length > 0) {\n        throw new ESLintInvalidOptionsError(errors);\n    }\n\n    return {\n        allowInlineConfig,\n        baseConfig,\n        cache,\n        cacheLocation,\n        cacheStrategy,\n        configFile: overrideConfigFile,\n        cwd,\n        errorOnUnmatchedPattern,\n        extensions,\n        fix,\n        fixTypes,\n        globInputPaths,\n        ignore,\n        ignorePath,\n        reportUnusedDisableDirectives,\n        resolvePluginsRelativeTo,\n        rulePaths,\n        useEslintrc\n    };\n}\n\n/**\n * Check if a value has one or more properties and that value is not undefined.\n * @param {any} obj The value to check.\n * @returns {boolean} `true` if `obj` has one or more properties that that value is not undefined.\n */\nfunction hasDefinedProperty(obj) {\n    if (typeof obj === \"object\" && obj !== null) {\n        for (const key in obj) {\n            if (typeof obj[key] !== \"undefined\") {\n                return true;\n            }\n        }\n    }\n    return false;\n}\n\n/**\n * Create rulesMeta object.\n * @param {Map<string,Rule>} rules a map of rules from which to generate the object.\n * @returns {Object} metadata for all enabled rules.\n */\nfunction createRulesMeta(rules) {\n    return Array.from(rules).reduce((retVal, [id, rule]) => {\n        retVal[id] = rule.meta;\n        return retVal;\n    }, {});\n}\n\n/** @type {WeakMap<ExtractedConfig, DeprecatedRuleInfo[]>} */\nconst usedDeprecatedRulesCache = new WeakMap();\n\n/**\n * Create used deprecated rule list.\n * @param {CLIEngine} cliEngine The CLIEngine instance.\n * @param {string} maybeFilePath The absolute path to a lint target file or `\"<text>\"`.\n * @returns {DeprecatedRuleInfo[]} The used deprecated rule list.\n */\nfunction getOrFindUsedDeprecatedRules(cliEngine, maybeFilePath) {\n    const {\n        configArrayFactory,\n        options: { cwd }\n    } = getCLIEngineInternalSlots(cliEngine);\n    const filePath = path.isAbsolute(maybeFilePath)\n        ? maybeFilePath\n        : path.join(cwd, \"__placeholder__.js\");\n    const configArray = configArrayFactory.getConfigArrayForFile(filePath);\n    const config = configArray.extractConfig(filePath);\n\n    // Most files use the same config, so cache it.\n    if (!usedDeprecatedRulesCache.has(config)) {\n        const pluginRules = configArray.pluginRules;\n        const retv = [];\n\n        for (const [ruleId, ruleConf] of Object.entries(config.rules)) {\n            if (getRuleSeverity(ruleConf) === 0) {\n                continue;\n            }\n            const rule = pluginRules.get(ruleId) || BuiltinRules.get(ruleId);\n            const meta = rule && rule.meta;\n\n            if (meta && meta.deprecated) {\n                retv.push({ ruleId, replacedBy: meta.replacedBy || [] });\n            }\n        }\n\n        usedDeprecatedRulesCache.set(config, Object.freeze(retv));\n    }\n\n    return usedDeprecatedRulesCache.get(config);\n}\n\n/**\n * Processes the linting results generated by a CLIEngine linting report to\n * match the ESLint class's API.\n * @param {CLIEngine} cliEngine The CLIEngine instance.\n * @param {CLIEngineLintReport} report The CLIEngine linting report to process.\n * @returns {LintResult[]} The processed linting results.\n */\nfunction processCLIEngineLintReport(cliEngine, { results }) {\n    const descriptor = {\n        configurable: true,\n        enumerable: true,\n        get() {\n            return getOrFindUsedDeprecatedRules(cliEngine, this.filePath);\n        }\n    };\n\n    for (const result of results) {\n        Object.defineProperty(result, \"usedDeprecatedRules\", descriptor);\n    }\n\n    return results;\n}\n\n/**\n * An Array.prototype.sort() compatible compare function to order results by their file path.\n * @param {LintResult} a The first lint result.\n * @param {LintResult} b The second lint result.\n * @returns {number} An integer representing the order in which the two results should occur.\n */\nfunction compareResultsByFilePath(a, b) {\n    if (a.filePath < b.filePath) {\n        return -1;\n    }\n\n    if (a.filePath > b.filePath) {\n        return 1;\n    }\n\n    return 0;\n}\n\n/**\n * Main API.\n */\nclass ESLint {\n\n    /**\n     * Creates a new instance of the main ESLint API.\n     * @param {ESLintOptions} options The options for this instance.\n     */\n    constructor(options = {}) {\n        const processedOptions = processOptions(options);\n        const cliEngine = new CLIEngine(processedOptions, { preloadedPlugins: options.plugins });\n        const {\n            configArrayFactory,\n            lastConfigArrays\n        } = getCLIEngineInternalSlots(cliEngine);\n        let updated = false;\n\n        /*\n         * Address `overrideConfig` to set override config.\n         * Operate the `configArrayFactory` internal slot directly because this\n         * functionality doesn't exist as the public API of CLIEngine.\n         */\n        if (hasDefinedProperty(options.overrideConfig)) {\n            configArrayFactory.setOverrideConfig(options.overrideConfig);\n            updated = true;\n        }\n\n        // Update caches.\n        if (updated) {\n            configArrayFactory.clearCache();\n            lastConfigArrays[0] = configArrayFactory.getConfigArrayForFile();\n        }\n\n        // Initialize private properties.\n        privateMembersMap.set(this, {\n            cliEngine,\n            options: processedOptions\n        });\n    }\n\n    /**\n     * The version text.\n     * @type {string}\n     */\n    static get version() {\n        return version;\n    }\n\n    /**\n     * Outputs fixes from the given results to files.\n     * @param {LintResult[]} results The lint results.\n     * @returns {Promise<void>} Returns a promise that is used to track side effects.\n     */\n    static async outputFixes(results) {\n        if (!Array.isArray(results)) {\n            throw new Error(\"'results' must be an array\");\n        }\n\n        await Promise.all(\n            results\n                .filter(result => {\n                    if (typeof result !== \"object\" || result === null) {\n                        throw new Error(\"'results' must include only objects\");\n                    }\n                    return (\n                        typeof result.output === \"string\" &&\n                        path.isAbsolute(result.filePath)\n                    );\n                })\n                .map(r => writeFile(r.filePath, r.output))\n        );\n    }\n\n    /**\n     * Returns results that only contains errors.\n     * @param {LintResult[]} results The results to filter.\n     * @returns {LintResult[]} The filtered results.\n     */\n    static getErrorResults(results) {\n        return CLIEngine.getErrorResults(results);\n    }\n\n    /**\n     * Returns meta objects for each rule represented in the lint results.\n     * @param {LintResult[]} results The results to fetch rules meta for.\n     * @returns {Object} A mapping of ruleIds to rule meta objects.\n     */\n    getRulesMetaForResults(results) {\n\n        const resultRuleIds = new Set();\n\n        // first gather all ruleIds from all results\n\n        for (const result of results) {\n            for (const { ruleId } of result.messages) {\n                resultRuleIds.add(ruleId);\n            }\n            for (const { ruleId } of result.suppressedMessages) {\n                resultRuleIds.add(ruleId);\n            }\n        }\n\n        // create a map of all rules in the results\n\n        const { cliEngine } = privateMembersMap.get(this);\n        const rules = cliEngine.getRules();\n        const resultRules = new Map();\n\n        for (const [ruleId, rule] of rules) {\n            if (resultRuleIds.has(ruleId)) {\n                resultRules.set(ruleId, rule);\n            }\n        }\n\n        return createRulesMeta(resultRules);\n\n    }\n\n    /**\n     * Executes the current configuration on an array of file and directory names.\n     * @param {string[]} patterns An array of file and directory names.\n     * @returns {Promise<LintResult[]>} The results of linting the file patterns given.\n     */\n    async lintFiles(patterns) {\n        if (!isNonEmptyString(patterns) && !isArrayOfNonEmptyString(patterns)) {\n            throw new Error(\"'patterns' must be a non-empty string or an array of non-empty strings\");\n        }\n        const { cliEngine } = privateMembersMap.get(this);\n\n        return processCLIEngineLintReport(\n            cliEngine,\n            cliEngine.executeOnFiles(patterns)\n        );\n    }\n\n    /**\n     * Executes the current configuration on text.\n     * @param {string} code A string of JavaScript code to lint.\n     * @param {Object} [options] The options.\n     * @param {string} [options.filePath] The path to the file of the source code.\n     * @param {boolean} [options.warnIgnored] When set to true, warn if given filePath is an ignored path.\n     * @returns {Promise<LintResult[]>} The results of linting the string of code given.\n     */\n    async lintText(code, options = {}) {\n        if (typeof code !== \"string\") {\n            throw new Error(\"'code' must be a string\");\n        }\n        if (typeof options !== \"object\") {\n            throw new Error(\"'options' must be an object, null, or undefined\");\n        }\n        const {\n            filePath,\n            warnIgnored = false,\n            ...unknownOptions\n        } = options || {};\n\n        const unknownOptionKeys = Object.keys(unknownOptions);\n\n        if (unknownOptionKeys.length > 0) {\n            throw new Error(`'options' must not include the unknown option(s): ${unknownOptionKeys.join(\", \")}`);\n        }\n\n        if (filePath !== void 0 && !isNonEmptyString(filePath)) {\n            throw new Error(\"'options.filePath' must be a non-empty string or undefined\");\n        }\n        if (typeof warnIgnored !== \"boolean\") {\n            throw new Error(\"'options.warnIgnored' must be a boolean or undefined\");\n        }\n\n        const { cliEngine } = privateMembersMap.get(this);\n\n        return processCLIEngineLintReport(\n            cliEngine,\n            cliEngine.executeOnText(code, filePath, warnIgnored)\n        );\n    }\n\n    /**\n     * Returns the formatter representing the given formatter name.\n     * @param {string} [name] The name of the formatter to load.\n     * The following values are allowed:\n     * - `undefined` ... Load `stylish` builtin formatter.\n     * - A builtin formatter name ... Load the builtin formatter.\n     * - A thirdparty formatter name:\n     *   - `foo` → `eslint-formatter-foo`\n     *   - `@foo` → `@foo/eslint-formatter`\n     *   - `@foo/bar` → `@foo/eslint-formatter-bar`\n     * - A file path ... Load the file.\n     * @returns {Promise<Formatter>} A promise resolving to the formatter object.\n     * This promise will be rejected if the given formatter was not found or not\n     * a function.\n     */\n    async loadFormatter(name = \"stylish\") {\n        if (typeof name !== \"string\") {\n            throw new Error(\"'name' must be a string\");\n        }\n\n        const { cliEngine, options } = privateMembersMap.get(this);\n        const formatter = cliEngine.getFormatter(name);\n\n        if (typeof formatter !== \"function\") {\n            throw new Error(`Formatter must be a function, but got a ${typeof formatter}.`);\n        }\n\n        return {\n\n            /**\n             * The main formatter method.\n             * @param {LintResults[]} results The lint results to format.\n             * @returns {string | Promise<string>} The formatted lint results.\n             */\n            format(results) {\n                let rulesMeta = null;\n\n                results.sort(compareResultsByFilePath);\n\n                return formatter(results, {\n                    get cwd() {\n                        return options.cwd;\n                    },\n                    get rulesMeta() {\n                        if (!rulesMeta) {\n                            rulesMeta = createRulesMeta(cliEngine.getRules());\n                        }\n\n                        return rulesMeta;\n                    }\n                });\n            }\n        };\n    }\n\n    /**\n     * Returns a configuration object for the given file based on the CLI options.\n     * This is the same logic used by the ESLint CLI executable to determine\n     * configuration for each file it processes.\n     * @param {string} filePath The path of the file to retrieve a config object for.\n     * @returns {Promise<ConfigData>} A configuration object for the file.\n     */\n    async calculateConfigForFile(filePath) {\n        if (!isNonEmptyString(filePath)) {\n            throw new Error(\"'filePath' must be a non-empty string\");\n        }\n        const { cliEngine } = privateMembersMap.get(this);\n\n        return cliEngine.getConfigForFile(filePath);\n    }\n\n    /**\n     * Checks if a given path is ignored by ESLint.\n     * @param {string} filePath The path of the file to check.\n     * @returns {Promise<boolean>} Whether or not the given path is ignored.\n     */\n    async isPathIgnored(filePath) {\n        if (!isNonEmptyString(filePath)) {\n            throw new Error(\"'filePath' must be a non-empty string\");\n        }\n        const { cliEngine } = privateMembersMap.get(this);\n\n        return cliEngine.isPathIgnored(filePath);\n    }\n}\n\n//------------------------------------------------------------------------------\n// Public Interface\n//------------------------------------------------------------------------------\n\nmodule.exports = {\n    ESLint,\n\n    /**\n     * Get the private class members of a given ESLint instance for tests.\n     * @param {ESLint} instance The ESLint instance to get.\n     * @returns {ESLintPrivateMembers} The instance's private class members.\n     */\n    getESLintPrivateMembers(instance) {\n        return privateMembersMap.get(instance);\n    }\n};\n/lib/rules/one-var.jsYv/**\n * @fileoverview A rule to control the use of single variable declarations.\n * @author Ian Christian Myers\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\n/**\n * Determines whether the given node is in a statement list.\n * @param {ASTNode} node node to check\n * @returns {boolean} `true` if the given node is in a statement list\n */\nfunction isInStatementList(node) {\n    return astUtils.STATEMENT_LIST_PARENTS.has(node.parent.type);\n}\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"enforce variables to be declared either together or separately in functions\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/one-var\"\n        },\n\n        fixable: \"code\",\n\n        schema: [\n            {\n                oneOf: [\n                    {\n                        enum: [\"always\", \"never\", \"consecutive\"]\n                    },\n                    {\n                        type: \"object\",\n                        properties: {\n                            separateRequires: {\n                                type: \"boolean\"\n                            },\n                            var: {\n                                enum: [\"always\", \"never\", \"consecutive\"]\n                            },\n                            let: {\n                                enum: [\"always\", \"never\", \"consecutive\"]\n                            },\n                            const: {\n                                enum: [\"always\", \"never\", \"consecutive\"]\n                            }\n                        },\n                        additionalProperties: false\n                    },\n                    {\n                        type: \"object\",\n                        properties: {\n                            initialized: {\n                                enum: [\"always\", \"never\", \"consecutive\"]\n                            },\n                            uninitialized: {\n                                enum: [\"always\", \"never\", \"consecutive\"]\n                            }\n                        },\n                        additionalProperties: false\n                    }\n                ]\n            }\n        ],\n\n        messages: {\n            combineUninitialized: \"Combine this with the previous '{{type}}' statement with uninitialized variables.\",\n            combineInitialized: \"Combine this with the previous '{{type}}' statement with initialized variables.\",\n            splitUninitialized: \"Split uninitialized '{{type}}' declarations into multiple statements.\",\n            splitInitialized: \"Split initialized '{{type}}' declarations into multiple statements.\",\n            splitRequires: \"Split requires to be separated into a single block.\",\n            combine: \"Combine this with the previous '{{type}}' statement.\",\n            split: \"Split '{{type}}' declarations into multiple statements.\"\n        }\n    },\n\n    create(context) {\n        const MODE_ALWAYS = \"always\";\n        const MODE_NEVER = \"never\";\n        const MODE_CONSECUTIVE = \"consecutive\";\n        const mode = context.options[0] || MODE_ALWAYS;\n\n        const options = {};\n\n        if (typeof mode === \"string\") { // simple options configuration with just a string\n            options.var = { uninitialized: mode, initialized: mode };\n            options.let = { uninitialized: mode, initialized: mode };\n            options.const = { uninitialized: mode, initialized: mode };\n        } else if (typeof mode === \"object\") { // options configuration is an object\n            options.separateRequires = !!mode.separateRequires;\n            options.var = { uninitialized: mode.var, initialized: mode.var };\n            options.let = { uninitialized: mode.let, initialized: mode.let };\n            options.const = { uninitialized: mode.const, initialized: mode.const };\n            if (Object.prototype.hasOwnProperty.call(mode, \"uninitialized\")) {\n                options.var.uninitialized = mode.uninitialized;\n                options.let.uninitialized = mode.uninitialized;\n                options.const.uninitialized = mode.uninitialized;\n            }\n            if (Object.prototype.hasOwnProperty.call(mode, \"initialized\")) {\n                options.var.initialized = mode.initialized;\n                options.let.initialized = mode.initialized;\n                options.const.initialized = mode.initialized;\n            }\n        }\n\n        const sourceCode = context.getSourceCode();\n\n        //--------------------------------------------------------------------------\n        // Helpers\n        //--------------------------------------------------------------------------\n\n        const functionStack = [];\n        const blockStack = [];\n\n        /**\n         * Increments the blockStack counter.\n         * @returns {void}\n         * @private\n         */\n        function startBlock() {\n            blockStack.push({\n                let: { initialized: false, uninitialized: false },\n                const: { initialized: false, uninitialized: false }\n            });\n        }\n\n        /**\n         * Increments the functionStack counter.\n         * @returns {void}\n         * @private\n         */\n        function startFunction() {\n            functionStack.push({ initialized: false, uninitialized: false });\n            startBlock();\n        }\n\n        /**\n         * Decrements the blockStack counter.\n         * @returns {void}\n         * @private\n         */\n        function endBlock() {\n            blockStack.pop();\n        }\n\n        /**\n         * Decrements the functionStack counter.\n         * @returns {void}\n         * @private\n         */\n        function endFunction() {\n            functionStack.pop();\n            endBlock();\n        }\n\n        /**\n         * Check if a variable declaration is a require.\n         * @param {ASTNode} decl variable declaration Node\n         * @returns {bool} if decl is a require, return true; else return false.\n         * @private\n         */\n        function isRequire(decl) {\n            return decl.init && decl.init.type === \"CallExpression\" && decl.init.callee.name === \"require\";\n        }\n\n        /**\n         * Records whether initialized/uninitialized/required variables are defined in current scope.\n         * @param {string} statementType node.kind, one of: \"var\", \"let\", or \"const\"\n         * @param {ASTNode[]} declarations List of declarations\n         * @param {Object} currentScope The scope being investigated\n         * @returns {void}\n         * @private\n         */\n        function recordTypes(statementType, declarations, currentScope) {\n            for (let i = 0; i < declarations.length; i++) {\n                if (declarations[i].init === null) {\n                    if (options[statementType] && options[statementType].uninitialized === MODE_ALWAYS) {\n                        currentScope.uninitialized = true;\n                    }\n                } else {\n                    if (options[statementType] && options[statementType].initialized === MODE_ALWAYS) {\n                        if (options.separateRequires && isRequire(declarations[i])) {\n                            currentScope.required = true;\n                        } else {\n                            currentScope.initialized = true;\n                        }\n                    }\n                }\n            }\n        }\n\n        /**\n         * Determines the current scope (function or block)\n         * @param {string} statementType node.kind, one of: \"var\", \"let\", or \"const\"\n         * @returns {Object} The scope associated with statementType\n         */\n        function getCurrentScope(statementType) {\n            let currentScope;\n\n            if (statementType === \"var\") {\n                currentScope = functionStack[functionStack.length - 1];\n            } else if (statementType === \"let\") {\n                currentScope = blockStack[blockStack.length - 1].let;\n            } else if (statementType === \"const\") {\n                currentScope = blockStack[blockStack.length - 1].const;\n            }\n            return currentScope;\n        }\n\n        /**\n         * Counts the number of initialized and uninitialized declarations in a list of declarations\n         * @param {ASTNode[]} declarations List of declarations\n         * @returns {Object} Counts of 'uninitialized' and 'initialized' declarations\n         * @private\n         */\n        function countDeclarations(declarations) {\n            const counts = { uninitialized: 0, initialized: 0 };\n\n            for (let i = 0; i < declarations.length; i++) {\n                if (declarations[i].init === null) {\n                    counts.uninitialized++;\n                } else {\n                    counts.initialized++;\n                }\n            }\n            return counts;\n        }\n\n        /**\n         * Determines if there is more than one var statement in the current scope.\n         * @param {string} statementType node.kind, one of: \"var\", \"let\", or \"const\"\n         * @param {ASTNode[]} declarations List of declarations\n         * @returns {boolean} Returns true if it is the first var declaration, false if not.\n         * @private\n         */\n        function hasOnlyOneStatement(statementType, declarations) {\n\n            const declarationCounts = countDeclarations(declarations);\n            const currentOptions = options[statementType] || {};\n            const currentScope = getCurrentScope(statementType);\n            const hasRequires = declarations.some(isRequire);\n\n            if (currentOptions.uninitialized === MODE_ALWAYS && currentOptions.initialized === MODE_ALWAYS) {\n                if (currentScope.uninitialized || currentScope.initialized) {\n                    if (!hasRequires) {\n                        return false;\n                    }\n                }\n            }\n\n            if (declarationCounts.uninitialized > 0) {\n                if (currentOptions.uninitialized === MODE_ALWAYS && currentScope.uninitialized) {\n                    return false;\n                }\n            }\n            if (declarationCounts.initialized > 0) {\n                if (currentOptions.initialized === MODE_ALWAYS && currentScope.initialized) {\n                    if (!hasRequires) {\n                        return false;\n                    }\n                }\n            }\n            if (currentScope.required && hasRequires) {\n                return false;\n            }\n            recordTypes(statementType, declarations, currentScope);\n            return true;\n        }\n\n        /**\n         * Fixer to join VariableDeclaration's into a single declaration\n         * @param {VariableDeclarator[]} declarations The `VariableDeclaration` to join\n         * @returns {Function} The fixer function\n         */\n        function joinDeclarations(declarations) {\n            const declaration = declarations[0];\n            const body = Array.isArray(declaration.parent.parent.body) ? declaration.parent.parent.body : [];\n            const currentIndex = body.findIndex(node => node.range[0] === declaration.parent.range[0]);\n            const previousNode = body[currentIndex - 1];\n\n            return fixer => {\n                const type = sourceCode.getTokenBefore(declaration);\n                const prevSemi = sourceCode.getTokenBefore(type);\n                const res = [];\n\n                if (previousNode && previousNode.kind === sourceCode.getText(type)) {\n                    if (prevSemi.value === \";\") {\n                        res.push(fixer.replaceText(prevSemi, \",\"));\n                    } else {\n                        res.push(fixer.insertTextAfter(prevSemi, \",\"));\n                    }\n                    res.push(fixer.replaceText(type, \"\"));\n                }\n\n                return res;\n            };\n        }\n\n        /**\n         * Fixer to split a VariableDeclaration into individual declarations\n         * @param {VariableDeclaration} declaration The `VariableDeclaration` to split\n         * @returns {Function|null} The fixer function\n         */\n        function splitDeclarations(declaration) {\n            const { parent } = declaration;\n\n            // don't autofix code such as: if (foo) var x, y;\n            if (!isInStatementList(parent.type === \"ExportNamedDeclaration\" ? parent : declaration)) {\n                return null;\n            }\n\n            return fixer => declaration.declarations.map(declarator => {\n                const tokenAfterDeclarator = sourceCode.getTokenAfter(declarator);\n\n                if (tokenAfterDeclarator === null) {\n                    return null;\n                }\n\n                const afterComma = sourceCode.getTokenAfter(tokenAfterDeclarator, { includeComments: true });\n\n                if (tokenAfterDeclarator.value !== \",\") {\n                    return null;\n                }\n\n                const exportPlacement = declaration.parent.type === \"ExportNamedDeclaration\" ? \"export \" : \"\";\n\n                /*\n                 * `var x,y`\n                 * tokenAfterDeclarator ^^ afterComma\n                 */\n                if (afterComma.range[0] === tokenAfterDeclarator.range[1]) {\n                    return fixer.replaceText(tokenAfterDeclarator, `; ${exportPlacement}${declaration.kind} `);\n                }\n\n                /*\n                 * `var x,\n                 * tokenAfterDeclarator ^\n                 *      y`\n                 *      ^ afterComma\n                 */\n                if (\n                    afterComma.loc.start.line > tokenAfterDeclarator.loc.end.line ||\n                    afterComma.type === \"Line\" ||\n                    afterComma.type === \"Block\"\n                ) {\n                    let lastComment = afterComma;\n\n                    while (lastComment.type === \"Line\" || lastComment.type === \"Block\") {\n                        lastComment = sourceCode.getTokenAfter(lastComment, { includeComments: true });\n                    }\n\n                    return fixer.replaceTextRange(\n                        [tokenAfterDeclarator.range[0], lastComment.range[0]],\n                        `;${sourceCode.text.slice(tokenAfterDeclarator.range[1], lastComment.range[0])}${exportPlacement}${declaration.kind} `\n                    );\n                }\n\n                return fixer.replaceText(tokenAfterDeclarator, `; ${exportPlacement}${declaration.kind}`);\n            }).filter(x => x);\n        }\n\n        /**\n         * Checks a given VariableDeclaration node for errors.\n         * @param {ASTNode} node The VariableDeclaration node to check\n         * @returns {void}\n         * @private\n         */\n        function checkVariableDeclaration(node) {\n            const parent = node.parent;\n            const type = node.kind;\n\n            if (!options[type]) {\n                return;\n            }\n\n            const declarations = node.declarations;\n            const declarationCounts = countDeclarations(declarations);\n            const mixedRequires = declarations.some(isRequire) && !declarations.every(isRequire);\n\n            if (options[type].initialized === MODE_ALWAYS) {\n                if (options.separateRequires && mixedRequires) {\n                    context.report({\n                        node,\n                        messageId: \"splitRequires\"\n                    });\n                }\n            }\n\n            // consecutive\n            const nodeIndex = (parent.body && parent.body.length > 0 && parent.body.indexOf(node)) || 0;\n\n            if (nodeIndex > 0) {\n                const previousNode = parent.body[nodeIndex - 1];\n                const isPreviousNodeDeclaration = previousNode.type === \"VariableDeclaration\";\n                const declarationsWithPrevious = declarations.concat(previousNode.declarations || []);\n\n                if (\n                    isPreviousNodeDeclaration &&\n                    previousNode.kind === type &&\n                    !(declarationsWithPrevious.some(isRequire) && !declarationsWithPrevious.every(isRequire))\n                ) {\n                    const previousDeclCounts = countDeclarations(previousNode.declarations);\n\n                    if (options[type].initialized === MODE_CONSECUTIVE && options[type].uninitialized === MODE_CONSECUTIVE) {\n                        context.report({\n                            node,\n                            messageId: \"combine\",\n                            data: {\n                                type\n                            },\n                            fix: joinDeclarations(declarations)\n                        });\n                    } else if (options[type].initialized === MODE_CONSECUTIVE && declarationCounts.initialized > 0 && previousDeclCounts.initialized > 0) {\n                        context.report({\n                            node,\n                            messageId: \"combineInitialized\",\n                            data: {\n                                type\n                            },\n                            fix: joinDeclarations(declarations)\n                        });\n                    } else if (options[type].uninitialized === MODE_CONSECUTIVE &&\n                            declarationCounts.uninitialized > 0 &&\n                            previousDeclCounts.uninitialized > 0) {\n                        context.report({\n                            node,\n                            messageId: \"combineUninitialized\",\n                            data: {\n                                type\n                            },\n                            fix: joinDeclarations(declarations)\n                        });\n                    }\n                }\n            }\n\n            // always\n            if (!hasOnlyOneStatement(type, declarations)) {\n                if (options[type].initialized === MODE_ALWAYS && options[type].uninitialized === MODE_ALWAYS) {\n                    context.report({\n                        node,\n                        messageId: \"combine\",\n                        data: {\n                            type\n                        },\n                        fix: joinDeclarations(declarations)\n                    });\n                } else {\n                    if (options[type].initialized === MODE_ALWAYS && declarationCounts.initialized > 0) {\n                        context.report({\n                            node,\n                            messageId: \"combineInitialized\",\n                            data: {\n                                type\n                            },\n                            fix: joinDeclarations(declarations)\n                        });\n                    }\n                    if (options[type].uninitialized === MODE_ALWAYS && declarationCounts.uninitialized > 0) {\n                        if (node.parent.left === node && (node.parent.type === \"ForInStatement\" || node.parent.type === \"ForOfStatement\")) {\n                            return;\n                        }\n                        context.report({\n                            node,\n                            messageId: \"combineUninitialized\",\n                            data: {\n                                type\n                            },\n                            fix: joinDeclarations(declarations)\n                        });\n                    }\n                }\n            }\n\n            // never\n            if (parent.type !== \"ForStatement\" || parent.init !== node) {\n                const totalDeclarations = declarationCounts.uninitialized + declarationCounts.initialized;\n\n                if (totalDeclarations > 1) {\n                    if (options[type].initialized === MODE_NEVER && options[type].uninitialized === MODE_NEVER) {\n\n                        // both initialized and uninitialized\n                        context.report({\n                            node,\n                            messageId: \"split\",\n                            data: {\n                                type\n                            },\n                            fix: splitDeclarations(node)\n                        });\n                    } else if (options[type].initialized === MODE_NEVER && declarationCounts.initialized > 0) {\n\n                        // initialized\n                        context.report({\n                            node,\n                            messageId: \"splitInitialized\",\n                            data: {\n                                type\n                            },\n                            fix: splitDeclarations(node)\n                        });\n                    } else if (options[type].uninitialized === MODE_NEVER && declarationCounts.uninitialized > 0) {\n\n                        // uninitialized\n                        context.report({\n                            node,\n                            messageId: \"splitUninitialized\",\n                            data: {\n                                type\n                            },\n                            fix: splitDeclarations(node)\n                        });\n                    }\n                }\n            }\n        }\n\n        //--------------------------------------------------------------------------\n        // Public API\n        //--------------------------------------------------------------------------\n\n        return {\n            Program: startFunction,\n            FunctionDeclaration: startFunction,\n            FunctionExpression: startFunction,\n            ArrowFunctionExpression: startFunction,\n            StaticBlock: startFunction, // StaticBlock creates a new scope for `var` variables\n\n            BlockStatement: startBlock,\n            ForStatement: startBlock,\n            ForInStatement: startBlock,\n            ForOfStatement: startBlock,\n            SwitchStatement: startBlock,\n            VariableDeclaration: checkVariableDeclaration,\n            \"ForStatement:exit\": endBlock,\n            \"ForOfStatement:exit\": endBlock,\n            \"ForInStatement:exit\": endBlock,\n            \"SwitchStatement:exit\": endBlock,\n            \"BlockStatement:exit\": endBlock,\n\n            \"Program:exit\": endFunction,\n            \"FunctionDeclaration:exit\": endFunction,\n            \"FunctionExpression:exit\": endFunction,\n            \"ArrowFunctionExpression:exit\": endFunction,\n            \"StaticBlock:exit\": endFunction\n        };\n\n    }\n};\n/lib/rules/no-cond-assign.js\u0016\u0017/**\n * @fileoverview Rule to flag assignment in a conditional statement's test expression\n * @author Stephen Murray <spmurrayzzz>\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\nconst TEST_CONDITION_PARENT_TYPES = new Set([\"IfStatement\", \"WhileStatement\", \"DoWhileStatement\", \"ForStatement\", \"ConditionalExpression\"]);\n\nconst NODE_DESCRIPTIONS = {\n    DoWhileStatement: \"a 'do...while' statement\",\n    ForStatement: \"a 'for' statement\",\n    IfStatement: \"an 'if' statement\",\n    WhileStatement: \"a 'while' statement\"\n};\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"problem\",\n\n        docs: {\n            description: \"disallow assignment operators in conditional expressions\",\n            recommended: true,\n            url: \"https://eslint.org/docs/rules/no-cond-assign\"\n        },\n\n        schema: [\n            {\n                enum: [\"except-parens\", \"always\"]\n            }\n        ],\n\n        messages: {\n            unexpected: \"Unexpected assignment within {{type}}.\",\n\n            // must match JSHint's error message\n            missing: \"Expected a conditional expression and instead saw an assignment.\"\n        }\n    },\n\n    create(context) {\n\n        const prohibitAssign = (context.options[0] || \"except-parens\");\n\n        const sourceCode = context.getSourceCode();\n\n        /**\n         * Check whether an AST node is the test expression for a conditional statement.\n         * @param {!Object} node The node to test.\n         * @returns {boolean} `true` if the node is the text expression for a conditional statement; otherwise, `false`.\n         */\n        function isConditionalTestExpression(node) {\n            return node.parent &&\n                TEST_CONDITION_PARENT_TYPES.has(node.parent.type) &&\n                node === node.parent.test;\n        }\n\n        /**\n         * Given an AST node, perform a bottom-up search for the first ancestor that represents a conditional statement.\n         * @param {!Object} node The node to use at the start of the search.\n         * @returns {?Object} The closest ancestor node that represents a conditional statement.\n         */\n        function findConditionalAncestor(node) {\n            let currentAncestor = node;\n\n            do {\n                if (isConditionalTestExpression(currentAncestor)) {\n                    return currentAncestor.parent;\n                }\n            } while ((currentAncestor = currentAncestor.parent) && !astUtils.isFunction(currentAncestor));\n\n            return null;\n        }\n\n        /**\n         * Check whether the code represented by an AST node is enclosed in two sets of parentheses.\n         * @param {!Object} node The node to test.\n         * @returns {boolean} `true` if the code is enclosed in two sets of parentheses; otherwise, `false`.\n         */\n        function isParenthesisedTwice(node) {\n            const previousToken = sourceCode.getTokenBefore(node, 1),\n                nextToken = sourceCode.getTokenAfter(node, 1);\n\n            return astUtils.isParenthesised(sourceCode, node) &&\n                previousToken && astUtils.isOpeningParenToken(previousToken) && previousToken.range[1] <= node.range[0] &&\n                astUtils.isClosingParenToken(nextToken) && nextToken.range[0] >= node.range[1];\n        }\n\n        /**\n         * Check a conditional statement's test expression for top-level assignments that are not enclosed in parentheses.\n         * @param {!Object} node The node for the conditional statement.\n         * @returns {void}\n         */\n        function testForAssign(node) {\n            if (node.test &&\n                (node.test.type === \"AssignmentExpression\") &&\n                (node.type === \"ForStatement\"\n                    ? !astUtils.isParenthesised(sourceCode, node.test)\n                    : !isParenthesisedTwice(node.test)\n                )\n            ) {\n\n                context.report({\n                    node: node.test,\n                    messageId: \"missing\"\n                });\n            }\n        }\n\n        /**\n         * Check whether an assignment expression is descended from a conditional statement's test expression.\n         * @param {!Object} node The node for the assignment expression.\n         * @returns {void}\n         */\n        function testForConditionalAncestor(node) {\n            const ancestor = findConditionalAncestor(node);\n\n            if (ancestor) {\n                context.report({\n                    node,\n                    messageId: \"unexpected\",\n                    data: {\n                        type: NODE_DESCRIPTIONS[ancestor.type] || ancestor.type\n                    }\n                });\n            }\n        }\n\n        if (prohibitAssign === \"always\") {\n            return {\n                AssignmentExpression: testForConditionalAncestor\n            };\n        }\n\n        return {\n            DoWhileStatement: testForAssign,\n            ForStatement: testForAssign,\n            IfStatement: testForAssign,\n            WhileStatement: testForAssign,\n            ConditionalExpression: testForAssign\n        };\n\n    }\n};\n/lib/rules/no-extra-parens.jsŽ/**\n * @fileoverview Disallow parenthesising higher precedence subexpressions.\n * @author Michael Ficarra\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\nconst { isParenthesized: isParenthesizedRaw } = require(\"eslint-utils\");\nconst astUtils = require(\"./utils/ast-utils.js\");\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"layout\",\n\n        docs: {\n            description: \"disallow unnecessary parentheses\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-extra-parens\"\n        },\n\n        fixable: \"code\",\n\n        schema: {\n            anyOf: [\n                {\n                    type: \"array\",\n                    items: [\n                        {\n                            enum: [\"functions\"]\n                        }\n                    ],\n                    minItems: 0,\n                    maxItems: 1\n                },\n                {\n                    type: \"array\",\n                    items: [\n                        {\n                            enum: [\"all\"]\n                        },\n                        {\n                            type: \"object\",\n                            properties: {\n                                conditionalAssign: { type: \"boolean\" },\n                                nestedBinaryExpressions: { type: \"boolean\" },\n                                returnAssign: { type: \"boolean\" },\n                                ignoreJSX: { enum: [\"none\", \"all\", \"single-line\", \"multi-line\"] },\n                                enforceForArrowConditionals: { type: \"boolean\" },\n                                enforceForSequenceExpressions: { type: \"boolean\" },\n                                enforceForNewInMemberExpressions: { type: \"boolean\" },\n                                enforceForFunctionPrototypeMethods: { type: \"boolean\" }\n                            },\n                            additionalProperties: false\n                        }\n                    ],\n                    minItems: 0,\n                    maxItems: 2\n                }\n            ]\n        },\n\n        messages: {\n            unexpected: \"Unnecessary parentheses around expression.\"\n        }\n    },\n\n    create(context) {\n        const sourceCode = context.getSourceCode();\n\n        const tokensToIgnore = new WeakSet();\n        const precedence = astUtils.getPrecedence;\n        const ALL_NODES = context.options[0] !== \"functions\";\n        const EXCEPT_COND_ASSIGN = ALL_NODES && context.options[1] && context.options[1].conditionalAssign === false;\n        const NESTED_BINARY = ALL_NODES && context.options[1] && context.options[1].nestedBinaryExpressions === false;\n        const EXCEPT_RETURN_ASSIGN = ALL_NODES && context.options[1] && context.options[1].returnAssign === false;\n        const IGNORE_JSX = ALL_NODES && context.options[1] && context.options[1].ignoreJSX;\n        const IGNORE_ARROW_CONDITIONALS = ALL_NODES && context.options[1] &&\n            context.options[1].enforceForArrowConditionals === false;\n        const IGNORE_SEQUENCE_EXPRESSIONS = ALL_NODES && context.options[1] &&\n            context.options[1].enforceForSequenceExpressions === false;\n        const IGNORE_NEW_IN_MEMBER_EXPR = ALL_NODES && context.options[1] &&\n            context.options[1].enforceForNewInMemberExpressions === false;\n        const IGNORE_FUNCTION_PROTOTYPE_METHODS = ALL_NODES && context.options[1] &&\n            context.options[1].enforceForFunctionPrototypeMethods === false;\n\n        const PRECEDENCE_OF_ASSIGNMENT_EXPR = precedence({ type: \"AssignmentExpression\" });\n        const PRECEDENCE_OF_UPDATE_EXPR = precedence({ type: \"UpdateExpression\" });\n\n        let reportsBuffer;\n\n        /**\n         * Determines whether the given node is a `call` or `apply` method call, invoked directly on a `FunctionExpression` node.\n         * Example: function(){}.call()\n         * @param {ASTNode} node The node to be checked.\n         * @returns {boolean} True if the node is an immediate `call` or `apply` method call.\n         * @private\n         */\n        function isImmediateFunctionPrototypeMethodCall(node) {\n            const callNode = astUtils.skipChainExpression(node);\n\n            if (callNode.type !== \"CallExpression\") {\n                return false;\n            }\n            const callee = astUtils.skipChainExpression(callNode.callee);\n\n            return (\n                callee.type === \"MemberExpression\" &&\n                callee.object.type === \"FunctionExpression\" &&\n                [\"call\", \"apply\"].includes(astUtils.getStaticPropertyName(callee))\n            );\n        }\n\n        /**\n         * Determines if this rule should be enforced for a node given the current configuration.\n         * @param {ASTNode} node The node to be checked.\n         * @returns {boolean} True if the rule should be enforced for this node.\n         * @private\n         */\n        function ruleApplies(node) {\n            if (node.type === \"JSXElement\" || node.type === \"JSXFragment\") {\n                const isSingleLine = node.loc.start.line === node.loc.end.line;\n\n                switch (IGNORE_JSX) {\n\n                    // Exclude this JSX element from linting\n                    case \"all\":\n                        return false;\n\n                    // Exclude this JSX element if it is multi-line element\n                    case \"multi-line\":\n                        return isSingleLine;\n\n                    // Exclude this JSX element if it is single-line element\n                    case \"single-line\":\n                        return !isSingleLine;\n\n                    // Nothing special to be done for JSX elements\n                    case \"none\":\n                        break;\n\n                    // no default\n                }\n            }\n\n            if (node.type === \"SequenceExpression\" && IGNORE_SEQUENCE_EXPRESSIONS) {\n                return false;\n            }\n\n            if (isImmediateFunctionPrototypeMethodCall(node) && IGNORE_FUNCTION_PROTOTYPE_METHODS) {\n                return false;\n            }\n\n            return ALL_NODES || node.type === \"FunctionExpression\" || node.type === \"ArrowFunctionExpression\";\n        }\n\n        /**\n         * Determines if a node is surrounded by parentheses.\n         * @param {ASTNode} node The node to be checked.\n         * @returns {boolean} True if the node is parenthesised.\n         * @private\n         */\n        function isParenthesised(node) {\n            return isParenthesizedRaw(1, node, sourceCode);\n        }\n\n        /**\n         * Determines if a node is surrounded by parentheses twice.\n         * @param {ASTNode} node The node to be checked.\n         * @returns {boolean} True if the node is doubly parenthesised.\n         * @private\n         */\n        function isParenthesisedTwice(node) {\n            return isParenthesizedRaw(2, node, sourceCode);\n        }\n\n        /**\n         * Determines if a node is surrounded by (potentially) invalid parentheses.\n         * @param {ASTNode} node The node to be checked.\n         * @returns {boolean} True if the node is incorrectly parenthesised.\n         * @private\n         */\n        function hasExcessParens(node) {\n            return ruleApplies(node) && isParenthesised(node);\n        }\n\n        /**\n         * Determines if a node that is expected to be parenthesised is surrounded by\n         * (potentially) invalid extra parentheses.\n         * @param {ASTNode} node The node to be checked.\n         * @returns {boolean} True if the node is has an unexpected extra pair of parentheses.\n         * @private\n         */\n        function hasDoubleExcessParens(node) {\n            return ruleApplies(node) && isParenthesisedTwice(node);\n        }\n\n        /**\n         * Determines if a node that is expected to be parenthesised is surrounded by\n         * (potentially) invalid extra parentheses with considering precedence level of the node.\n         * If the preference level of the node is not higher or equal to precedence lower limit, it also checks\n         * whether the node is surrounded by parentheses twice or not.\n         * @param {ASTNode} node The node to be checked.\n         * @param {number} precedenceLowerLimit The lower limit of precedence.\n         * @returns {boolean} True if the node is has an unexpected extra pair of parentheses.\n         * @private\n         */\n        function hasExcessParensWithPrecedence(node, precedenceLowerLimit) {\n            if (ruleApplies(node) && isParenthesised(node)) {\n                if (\n                    precedence(node) >= precedenceLowerLimit ||\n                    isParenthesisedTwice(node)\n                ) {\n                    return true;\n                }\n            }\n            return false;\n        }\n\n        /**\n         * Determines if a node test expression is allowed to have a parenthesised assignment\n         * @param {ASTNode} node The node to be checked.\n         * @returns {boolean} True if the assignment can be parenthesised.\n         * @private\n         */\n        function isCondAssignException(node) {\n            return EXCEPT_COND_ASSIGN && node.test.type === \"AssignmentExpression\";\n        }\n\n        /**\n         * Determines if a node is in a return statement\n         * @param {ASTNode} node The node to be checked.\n         * @returns {boolean} True if the node is in a return statement.\n         * @private\n         */\n        function isInReturnStatement(node) {\n            for (let currentNode = node; currentNode; currentNode = currentNode.parent) {\n                if (\n                    currentNode.type === \"ReturnStatement\" ||\n                    (currentNode.type === \"ArrowFunctionExpression\" && currentNode.body.type !== \"BlockStatement\")\n                ) {\n                    return true;\n                }\n            }\n\n            return false;\n        }\n\n        /**\n         * Determines if a constructor function is newed-up with parens\n         * @param {ASTNode} newExpression The NewExpression node to be checked.\n         * @returns {boolean} True if the constructor is called with parens.\n         * @private\n         */\n        function isNewExpressionWithParens(newExpression) {\n            const lastToken = sourceCode.getLastToken(newExpression);\n            const penultimateToken = sourceCode.getTokenBefore(lastToken);\n\n            return newExpression.arguments.length > 0 ||\n                (\n\n                    // The expression should end with its own parens, e.g., new new foo() is not a new expression with parens\n                    astUtils.isOpeningParenToken(penultimateToken) &&\n                    astUtils.isClosingParenToken(lastToken) &&\n                    newExpression.callee.range[1] < newExpression.range[1]\n                );\n        }\n\n        /**\n         * Determines if a node is or contains an assignment expression\n         * @param {ASTNode} node The node to be checked.\n         * @returns {boolean} True if the node is or contains an assignment expression.\n         * @private\n         */\n        function containsAssignment(node) {\n            if (node.type === \"AssignmentExpression\") {\n                return true;\n            }\n            if (node.type === \"ConditionalExpression\" &&\n                    (node.consequent.type === \"AssignmentExpression\" || node.alternate.type === \"AssignmentExpression\")) {\n                return true;\n            }\n            if ((node.left && node.left.type === \"AssignmentExpression\") ||\n                    (node.right && node.right.type === \"AssignmentExpression\")) {\n                return true;\n            }\n\n            return false;\n        }\n\n        /**\n         * Determines if a node is contained by or is itself a return statement and is allowed to have a parenthesised assignment\n         * @param {ASTNode} node The node to be checked.\n         * @returns {boolean} True if the assignment can be parenthesised.\n         * @private\n         */\n        function isReturnAssignException(node) {\n            if (!EXCEPT_RETURN_ASSIGN || !isInReturnStatement(node)) {\n                return false;\n            }\n\n            if (node.type === \"ReturnStatement\") {\n                return node.argument && containsAssignment(node.argument);\n            }\n            if (node.type === \"ArrowFunctionExpression\" && node.body.type !== \"BlockStatement\") {\n                return containsAssignment(node.body);\n            }\n            return containsAssignment(node);\n\n        }\n\n        /**\n         * Determines if a node following a [no LineTerminator here] restriction is\n         * surrounded by (potentially) invalid extra parentheses.\n         * @param {Token} token The token preceding the [no LineTerminator here] restriction.\n         * @param {ASTNode} node The node to be checked.\n         * @returns {boolean} True if the node is incorrectly parenthesised.\n         * @private\n         */\n        function hasExcessParensNoLineTerminator(token, node) {\n            if (token.loc.end.line === node.loc.start.line) {\n                return hasExcessParens(node);\n            }\n\n            return hasDoubleExcessParens(node);\n        }\n\n        /**\n         * Determines whether a node should be preceded by an additional space when removing parens\n         * @param {ASTNode} node node to evaluate; must be surrounded by parentheses\n         * @returns {boolean} `true` if a space should be inserted before the node\n         * @private\n         */\n        function requiresLeadingSpace(node) {\n            const leftParenToken = sourceCode.getTokenBefore(node);\n            const tokenBeforeLeftParen = sourceCode.getTokenBefore(leftParenToken, { includeComments: true });\n            const tokenAfterLeftParen = sourceCode.getTokenAfter(leftParenToken, { includeComments: true });\n\n            return tokenBeforeLeftParen &&\n                tokenBeforeLeftParen.range[1] === leftParenToken.range[0] &&\n                leftParenToken.range[1] === tokenAfterLeftParen.range[0] &&\n                !astUtils.canTokensBeAdjacent(tokenBeforeLeftParen, tokenAfterLeftParen);\n        }\n\n        /**\n         * Determines whether a node should be followed by an additional space when removing parens\n         * @param {ASTNode} node node to evaluate; must be surrounded by parentheses\n         * @returns {boolean} `true` if a space should be inserted after the node\n         * @private\n         */\n        function requiresTrailingSpace(node) {\n            const nextTwoTokens = sourceCode.getTokensAfter(node, { count: 2 });\n            const rightParenToken = nextTwoTokens[0];\n            const tokenAfterRightParen = nextTwoTokens[1];\n            const tokenBeforeRightParen = sourceCode.getLastToken(node);\n\n            return rightParenToken && tokenAfterRightParen &&\n                !sourceCode.isSpaceBetweenTokens(rightParenToken, tokenAfterRightParen) &&\n                !astUtils.canTokensBeAdjacent(tokenBeforeRightParen, tokenAfterRightParen);\n        }\n\n        /**\n         * Determines if a given expression node is an IIFE\n         * @param {ASTNode} node The node to check\n         * @returns {boolean} `true` if the given node is an IIFE\n         */\n        function isIIFE(node) {\n            const maybeCallNode = astUtils.skipChainExpression(node);\n\n            return maybeCallNode.type === \"CallExpression\" && maybeCallNode.callee.type === \"FunctionExpression\";\n        }\n\n        /**\n         * Determines if the given node can be the assignment target in destructuring or the LHS of an assignment.\n         * This is to avoid an autofix that could change behavior because parsers mistakenly allow invalid syntax,\n         * such as `(a = b) = c` and `[(a = b) = c] = []`. Ideally, this function shouldn't be necessary.\n         * @param {ASTNode} [node] The node to check\n         * @returns {boolean} `true` if the given node can be a valid assignment target\n         */\n        function canBeAssignmentTarget(node) {\n            return node && (node.type === \"Identifier\" || node.type === \"MemberExpression\");\n        }\n\n        /**\n         * Report the node\n         * @param {ASTNode} node node to evaluate\n         * @returns {void}\n         * @private\n         */\n        function report(node) {\n            const leftParenToken = sourceCode.getTokenBefore(node);\n            const rightParenToken = sourceCode.getTokenAfter(node);\n\n            if (!isParenthesisedTwice(node)) {\n                if (tokensToIgnore.has(sourceCode.getFirstToken(node))) {\n                    return;\n                }\n\n                if (isIIFE(node) && !isParenthesised(node.callee)) {\n                    return;\n                }\n            }\n\n            /**\n             * Finishes reporting\n             * @returns {void}\n             * @private\n             */\n            function finishReport() {\n                context.report({\n                    node,\n                    loc: leftParenToken.loc,\n                    messageId: \"unexpected\",\n                    fix(fixer) {\n                        const parenthesizedSource = sourceCode.text.slice(leftParenToken.range[1], rightParenToken.range[0]);\n\n                        return fixer.replaceTextRange([\n                            leftParenToken.range[0],\n                            rightParenToken.range[1]\n                        ], (requiresLeadingSpace(node) ? \" \" : \"\") + parenthesizedSource + (requiresTrailingSpace(node) ? \" \" : \"\"));\n                    }\n                });\n            }\n\n            if (reportsBuffer) {\n                reportsBuffer.reports.push({ node, finishReport });\n                return;\n            }\n\n            finishReport();\n        }\n\n        /**\n         * Evaluate a argument of the node.\n         * @param {ASTNode} node node to evaluate\n         * @returns {void}\n         * @private\n         */\n        function checkArgumentWithPrecedence(node) {\n            if (hasExcessParensWithPrecedence(node.argument, precedence(node))) {\n                report(node.argument);\n            }\n        }\n\n        /**\n         * Check if a member expression contains a call expression\n         * @param {ASTNode} node MemberExpression node to evaluate\n         * @returns {boolean} true if found, false if not\n         */\n        function doesMemberExpressionContainCallExpression(node) {\n            let currentNode = node.object;\n            let currentNodeType = node.object.type;\n\n            while (currentNodeType === \"MemberExpression\") {\n                currentNode = currentNode.object;\n                currentNodeType = currentNode.type;\n            }\n\n            return currentNodeType === \"CallExpression\";\n        }\n\n        /**\n         * Evaluate a new call\n         * @param {ASTNode} node node to evaluate\n         * @returns {void}\n         * @private\n         */\n        function checkCallNew(node) {\n            const callee = node.callee;\n\n            if (hasExcessParensWithPrecedence(callee, precedence(node))) {\n                if (\n                    hasDoubleExcessParens(callee) ||\n                    !(\n                        isIIFE(node) ||\n\n                        // (new A)(); new (new A)();\n                        (\n                            callee.type === \"NewExpression\" &&\n                            !isNewExpressionWithParens(callee) &&\n                            !(\n                                node.type === \"NewExpression\" &&\n                                !isNewExpressionWithParens(node)\n                            )\n                        ) ||\n\n                        // new (a().b)(); new (a.b().c);\n                        (\n                            node.type === \"NewExpression\" &&\n                            callee.type === \"MemberExpression\" &&\n                            doesMemberExpressionContainCallExpression(callee)\n                        ) ||\n\n                        // (a?.b)(); (a?.())();\n                        (\n                            !node.optional &&\n                            callee.type === \"ChainExpression\"\n                        )\n                    )\n                ) {\n                    report(node.callee);\n                }\n            }\n            node.arguments\n                .filter(arg => hasExcessParensWithPrecedence(arg, PRECEDENCE_OF_ASSIGNMENT_EXPR))\n                .forEach(report);\n        }\n\n        /**\n         * Evaluate binary logicals\n         * @param {ASTNode} node node to evaluate\n         * @returns {void}\n         * @private\n         */\n        function checkBinaryLogical(node) {\n            const prec = precedence(node);\n            const leftPrecedence = precedence(node.left);\n            const rightPrecedence = precedence(node.right);\n            const isExponentiation = node.operator === \"**\";\n            const shouldSkipLeft = NESTED_BINARY && (node.left.type === \"BinaryExpression\" || node.left.type === \"LogicalExpression\");\n            const shouldSkipRight = NESTED_BINARY && (node.right.type === \"BinaryExpression\" || node.right.type === \"LogicalExpression\");\n\n            if (!shouldSkipLeft && hasExcessParens(node.left)) {\n                if (\n                    !([\"AwaitExpression\", \"UnaryExpression\"].includes(node.left.type) && isExponentiation) &&\n                    !astUtils.isMixedLogicalAndCoalesceExpressions(node.left, node) &&\n                    (leftPrecedence > prec || (leftPrecedence === prec && !isExponentiation)) ||\n                    isParenthesisedTwice(node.left)\n                ) {\n                    report(node.left);\n                }\n            }\n\n            if (!shouldSkipRight && hasExcessParens(node.right)) {\n                if (\n                    !astUtils.isMixedLogicalAndCoalesceExpressions(node.right, node) &&\n                    (rightPrecedence > prec || (rightPrecedence === prec && isExponentiation)) ||\n                    isParenthesisedTwice(node.right)\n                ) {\n                    report(node.right);\n                }\n            }\n        }\n\n        /**\n         * Check the parentheses around the super class of the given class definition.\n         * @param {ASTNode} node The node of class declarations to check.\n         * @returns {void}\n         */\n        function checkClass(node) {\n            if (!node.superClass) {\n                return;\n            }\n\n            /*\n             * If `node.superClass` is a LeftHandSideExpression, parentheses are extra.\n             * Otherwise, parentheses are needed.\n             */\n            const hasExtraParens = precedence(node.superClass) > PRECEDENCE_OF_UPDATE_EXPR\n                ? hasExcessParens(node.superClass)\n                : hasDoubleExcessParens(node.superClass);\n\n            if (hasExtraParens) {\n                report(node.superClass);\n            }\n        }\n\n        /**\n         * Check the parentheses around the argument of the given spread operator.\n         * @param {ASTNode} node The node of spread elements/properties to check.\n         * @returns {void}\n         */\n        function checkSpreadOperator(node) {\n            if (hasExcessParensWithPrecedence(node.argument, PRECEDENCE_OF_ASSIGNMENT_EXPR)) {\n                report(node.argument);\n            }\n        }\n\n        /**\n         * Checks the parentheses for an ExpressionStatement or ExportDefaultDeclaration\n         * @param {ASTNode} node The ExpressionStatement.expression or ExportDefaultDeclaration.declaration node\n         * @returns {void}\n         */\n        function checkExpressionOrExportStatement(node) {\n            const firstToken = isParenthesised(node) ? sourceCode.getTokenBefore(node) : sourceCode.getFirstToken(node);\n            const secondToken = sourceCode.getTokenAfter(firstToken, astUtils.isNotOpeningParenToken);\n            const thirdToken = secondToken ? sourceCode.getTokenAfter(secondToken) : null;\n            const tokenAfterClosingParens = secondToken ? sourceCode.getTokenAfter(secondToken, astUtils.isNotClosingParenToken) : null;\n\n            if (\n                astUtils.isOpeningParenToken(firstToken) &&\n                (\n                    astUtils.isOpeningBraceToken(secondToken) ||\n                    secondToken.type === \"Keyword\" && (\n                        secondToken.value === \"function\" ||\n                        secondToken.value === \"class\" ||\n                        secondToken.value === \"let\" &&\n                            tokenAfterClosingParens &&\n                            (\n                                astUtils.isOpeningBracketToken(tokenAfterClosingParens) ||\n                                tokenAfterClosingParens.type === \"Identifier\"\n                            )\n                    ) ||\n                    secondToken && secondToken.type === \"Identifier\" && secondToken.value === \"async\" && thirdToken && thirdToken.type === \"Keyword\" && thirdToken.value === \"function\"\n                )\n            ) {\n                tokensToIgnore.add(secondToken);\n            }\n\n            const hasExtraParens = node.parent.type === \"ExportDefaultDeclaration\"\n                ? hasExcessParensWithPrecedence(node, PRECEDENCE_OF_ASSIGNMENT_EXPR)\n                : hasExcessParens(node);\n\n            if (hasExtraParens) {\n                report(node);\n            }\n        }\n\n        /**\n         * Finds the path from the given node to the specified ancestor.\n         * @param {ASTNode} node First node in the path.\n         * @param {ASTNode} ancestor Last node in the path.\n         * @returns {ASTNode[]} Path, including both nodes.\n         * @throws {Error} If the given node does not have the specified ancestor.\n         */\n        function pathToAncestor(node, ancestor) {\n            const path = [node];\n            let currentNode = node;\n\n            while (currentNode !== ancestor) {\n\n                currentNode = currentNode.parent;\n\n                /* istanbul ignore if */\n                if (currentNode === null) {\n                    throw new Error(\"Nodes are not in the ancestor-descendant relationship.\");\n                }\n\n                path.push(currentNode);\n            }\n\n            return path;\n        }\n\n        /**\n         * Finds the path from the given node to the specified descendant.\n         * @param {ASTNode} node First node in the path.\n         * @param {ASTNode} descendant Last node in the path.\n         * @returns {ASTNode[]} Path, including both nodes.\n         * @throws {Error} If the given node does not have the specified descendant.\n         */\n        function pathToDescendant(node, descendant) {\n            return pathToAncestor(descendant, node).reverse();\n        }\n\n        /**\n         * Checks whether the syntax of the given ancestor of an 'in' expression inside a for-loop initializer\n         * is preventing the 'in' keyword from being interpreted as a part of an ill-formed for-in loop.\n         * @param {ASTNode} node Ancestor of an 'in' expression.\n         * @param {ASTNode} child Child of the node, ancestor of the same 'in' expression or the 'in' expression itself.\n         * @returns {boolean} True if the keyword 'in' would be interpreted as the 'in' operator, without any parenthesis.\n         */\n        function isSafelyEnclosingInExpression(node, child) {\n            switch (node.type) {\n                case \"ArrayExpression\":\n                case \"ArrayPattern\":\n                case \"BlockStatement\":\n                case \"ObjectExpression\":\n                case \"ObjectPattern\":\n                case \"TemplateLiteral\":\n                    return true;\n                case \"ArrowFunctionExpression\":\n                case \"FunctionExpression\":\n                    return node.params.includes(child);\n                case \"CallExpression\":\n                case \"NewExpression\":\n                    return node.arguments.includes(child);\n                case \"MemberExpression\":\n                    return node.computed && node.property === child;\n                case \"ConditionalExpression\":\n                    return node.consequent === child;\n                default:\n                    return false;\n            }\n        }\n\n        /**\n         * Starts a new reports buffering. Warnings will be stored in a buffer instead of being reported immediately.\n         * An additional logic that requires multiple nodes (e.g. a whole subtree) may dismiss some of the stored warnings.\n         * @returns {void}\n         */\n        function startNewReportsBuffering() {\n            reportsBuffer = {\n                upper: reportsBuffer,\n                inExpressionNodes: [],\n                reports: []\n            };\n        }\n\n        /**\n         * Ends the current reports buffering.\n         * @returns {void}\n         */\n        function endCurrentReportsBuffering() {\n            const { upper, inExpressionNodes, reports } = reportsBuffer;\n\n            if (upper) {\n                upper.inExpressionNodes.push(...inExpressionNodes);\n                upper.reports.push(...reports);\n            } else {\n\n                // flush remaining reports\n                reports.forEach(({ finishReport }) => finishReport());\n            }\n\n            reportsBuffer = upper;\n        }\n\n        /**\n         * Checks whether the given node is in the current reports buffer.\n         * @param {ASTNode} node Node to check.\n         * @returns {boolean} True if the node is in the current buffer, false otherwise.\n         */\n        function isInCurrentReportsBuffer(node) {\n            return reportsBuffer.reports.some(r => r.node === node);\n        }\n\n        /**\n         * Removes the given node from the current reports buffer.\n         * @param {ASTNode} node Node to remove.\n         * @returns {void}\n         */\n        function removeFromCurrentReportsBuffer(node) {\n            reportsBuffer.reports = reportsBuffer.reports.filter(r => r.node !== node);\n        }\n\n        /**\n         * Checks whether a node is a MemberExpression at NewExpression's callee.\n         * @param {ASTNode} node node to check.\n         * @returns {boolean} True if the node is a MemberExpression at NewExpression's callee. false otherwise.\n         */\n        function isMemberExpInNewCallee(node) {\n            if (node.type === \"MemberExpression\") {\n                return node.parent.type === \"NewExpression\" && node.parent.callee === node\n                    ? true\n                    : node.parent.object === node && isMemberExpInNewCallee(node.parent);\n            }\n            return false;\n        }\n\n        return {\n            ArrayExpression(node) {\n                node.elements\n                    .filter(e => e && hasExcessParensWithPrecedence(e, PRECEDENCE_OF_ASSIGNMENT_EXPR))\n                    .forEach(report);\n            },\n\n            ArrayPattern(node) {\n                node.elements\n                    .filter(e => canBeAssignmentTarget(e) && hasExcessParens(e))\n                    .forEach(report);\n            },\n\n            ArrowFunctionExpression(node) {\n                if (isReturnAssignException(node)) {\n                    return;\n                }\n\n                if (node.body.type === \"ConditionalExpression\" &&\n                    IGNORE_ARROW_CONDITIONALS\n                ) {\n                    return;\n                }\n\n                if (node.body.type !== \"BlockStatement\") {\n                    const firstBodyToken = sourceCode.getFirstToken(node.body, astUtils.isNotOpeningParenToken);\n                    const tokenBeforeFirst = sourceCode.getTokenBefore(firstBodyToken);\n\n                    if (astUtils.isOpeningParenToken(tokenBeforeFirst) && astUtils.isOpeningBraceToken(firstBodyToken)) {\n                        tokensToIgnore.add(firstBodyToken);\n                    }\n                    if (hasExcessParensWithPrecedence(node.body, PRECEDENCE_OF_ASSIGNMENT_EXPR)) {\n                        report(node.body);\n                    }\n                }\n            },\n\n            AssignmentExpression(node) {\n                if (canBeAssignmentTarget(node.left) && hasExcessParens(node.left)) {\n                    report(node.left);\n                }\n\n                if (!isReturnAssignException(node) && hasExcessParensWithPrecedence(node.right, precedence(node))) {\n                    report(node.right);\n                }\n            },\n\n            BinaryExpression(node) {\n                if (reportsBuffer && node.operator === \"in\") {\n                    reportsBuffer.inExpressionNodes.push(node);\n                }\n\n                checkBinaryLogical(node);\n            },\n\n            CallExpression: checkCallNew,\n\n            ConditionalExpression(node) {\n                if (isReturnAssignException(node)) {\n                    return;\n                }\n                if (\n                    !isCondAssignException(node) &&\n                    hasExcessParensWithPrecedence(node.test, precedence({ type: \"LogicalExpression\", operator: \"||\" }))\n                ) {\n                    report(node.test);\n                }\n\n                if (hasExcessParensWithPrecedence(node.consequent, PRECEDENCE_OF_ASSIGNMENT_EXPR)) {\n                    report(node.consequent);\n                }\n\n                if (hasExcessParensWithPrecedence(node.alternate, PRECEDENCE_OF_ASSIGNMENT_EXPR)) {\n                    report(node.alternate);\n                }\n            },\n\n            DoWhileStatement(node) {\n                if (hasExcessParens(node.test) && !isCondAssignException(node)) {\n                    report(node.test);\n                }\n            },\n\n            ExportDefaultDeclaration: node => checkExpressionOrExportStatement(node.declaration),\n            ExpressionStatement: node => checkExpressionOrExportStatement(node.expression),\n\n            ForInStatement(node) {\n                if (node.left.type !== \"VariableDeclaration\") {\n                    const firstLeftToken = sourceCode.getFirstToken(node.left, astUtils.isNotOpeningParenToken);\n\n                    if (\n                        firstLeftToken.value === \"let\" &&\n                        astUtils.isOpeningBracketToken(\n                            sourceCode.getTokenAfter(firstLeftToken, astUtils.isNotClosingParenToken)\n                        )\n                    ) {\n\n                        // ForInStatement#left expression cannot start with `let[`.\n                        tokensToIgnore.add(firstLeftToken);\n                    }\n                }\n\n                if (hasExcessParens(node.left)) {\n                    report(node.left);\n                }\n\n                if (hasExcessParens(node.right)) {\n                    report(node.right);\n                }\n            },\n\n            ForOfStatement(node) {\n                if (node.left.type !== \"VariableDeclaration\") {\n                    const firstLeftToken = sourceCode.getFirstToken(node.left, astUtils.isNotOpeningParenToken);\n\n                    if (firstLeftToken.value === \"let\") {\n\n                        // ForOfStatement#left expression cannot start with `let`.\n                        tokensToIgnore.add(firstLeftToken);\n                    }\n                }\n\n                if (hasExcessParens(node.left)) {\n                    report(node.left);\n                }\n\n                if (hasExcessParensWithPrecedence(node.right, PRECEDENCE_OF_ASSIGNMENT_EXPR)) {\n                    report(node.right);\n                }\n            },\n\n            ForStatement(node) {\n                if (node.test && hasExcessParens(node.test) && !isCondAssignException(node)) {\n                    report(node.test);\n                }\n\n                if (node.update && hasExcessParens(node.update)) {\n                    report(node.update);\n                }\n\n                if (node.init) {\n\n                    if (node.init.type !== \"VariableDeclaration\") {\n                        const firstToken = sourceCode.getFirstToken(node.init, astUtils.isNotOpeningParenToken);\n\n                        if (\n                            firstToken.value === \"let\" &&\n                            astUtils.isOpeningBracketToken(\n                                sourceCode.getTokenAfter(firstToken, astUtils.isNotClosingParenToken)\n                            )\n                        ) {\n\n                            // ForStatement#init expression cannot start with `let[`.\n                            tokensToIgnore.add(firstToken);\n                        }\n                    }\n\n                    startNewReportsBuffering();\n\n                    if (hasExcessParens(node.init)) {\n                        report(node.init);\n                    }\n                }\n            },\n\n            \"ForStatement > *.init:exit\"(node) {\n\n                /*\n                 * Removing parentheses around `in` expressions might change semantics and cause errors.\n                 *\n                 * For example, this valid for loop:\n                 *      for (let a = (b in c); ;);\n                 * after removing parentheses would be treated as an invalid for-in loop:\n                 *      for (let a = b in c; ;);\n                 */\n\n                if (reportsBuffer.reports.length) {\n                    reportsBuffer.inExpressionNodes.forEach(inExpressionNode => {\n                        const path = pathToDescendant(node, inExpressionNode);\n                        let nodeToExclude;\n\n                        for (let i = 0; i < path.length; i++) {\n                            const pathNode = path[i];\n\n                            if (i < path.length - 1) {\n                                const nextPathNode = path[i + 1];\n\n                                if (isSafelyEnclosingInExpression(pathNode, nextPathNode)) {\n\n                                    // The 'in' expression in safely enclosed by the syntax of its ancestor nodes (e.g. by '{}' or '[]').\n                                    return;\n                                }\n                            }\n\n                            if (isParenthesised(pathNode)) {\n                                if (isInCurrentReportsBuffer(pathNode)) {\n\n                                    // This node was supposed to be reported, but parentheses might be necessary.\n\n                                    if (isParenthesisedTwice(pathNode)) {\n\n                                        /*\n                                         * This node is parenthesised twice, it certainly has at least one pair of `extra` parentheses.\n                                         * If the --fix option is on, the current fixing iteration will remove only one pair of parentheses.\n                                         * The remaining pair is safely enclosing the 'in' expression.\n                                         */\n                                        return;\n                                    }\n\n                                    // Exclude the outermost node only.\n                                    if (!nodeToExclude) {\n                                        nodeToExclude = pathNode;\n                                    }\n\n                                    // Don't break the loop here, there might be some safe nodes or parentheses that will stay inside.\n\n                                } else {\n\n                                    // This node will stay parenthesised, the 'in' expression in safely enclosed by '()'.\n                                    return;\n                                }\n                            }\n                        }\n\n                        // Exclude the node from the list (i.e. treat parentheses as necessary)\n                        removeFromCurrentReportsBuffer(nodeToExclude);\n                    });\n                }\n\n                endCurrentReportsBuffering();\n            },\n\n            IfStatement(node) {\n                if (hasExcessParens(node.test) && !isCondAssignException(node)) {\n                    report(node.test);\n                }\n            },\n\n            ImportExpression(node) {\n                const { source } = node;\n\n                if (source.type === \"SequenceExpression\") {\n                    if (hasDoubleExcessParens(source)) {\n                        report(source);\n                    }\n                } else if (hasExcessParens(source)) {\n                    report(source);\n                }\n            },\n\n            LogicalExpression: checkBinaryLogical,\n\n            MemberExpression(node) {\n                const shouldAllowWrapOnce = isMemberExpInNewCallee(node) &&\n                  doesMemberExpressionContainCallExpression(node);\n                const nodeObjHasExcessParens = shouldAllowWrapOnce\n                    ? hasDoubleExcessParens(node.object)\n                    : hasExcessParens(node.object) &&\n                    !(\n                        isImmediateFunctionPrototypeMethodCall(node.parent) &&\n                        node.parent.callee === node &&\n                        IGNORE_FUNCTION_PROTOTYPE_METHODS\n                    );\n\n                if (\n                    nodeObjHasExcessParens &&\n                    precedence(node.object) >= precedence(node) &&\n                    (\n                        node.computed ||\n                        !(\n                            astUtils.isDecimalInteger(node.object) ||\n\n                            // RegExp literal is allowed to have parens (#1589)\n                            (node.object.type === \"Literal\" && node.object.regex)\n                        )\n                    )\n                ) {\n                    report(node.object);\n                }\n\n                if (nodeObjHasExcessParens &&\n                  node.object.type === \"CallExpression\"\n                ) {\n                    report(node.object);\n                }\n\n                if (nodeObjHasExcessParens &&\n                  !IGNORE_NEW_IN_MEMBER_EXPR &&\n                  node.object.type === \"NewExpression\" &&\n                  isNewExpressionWithParens(node.object)) {\n                    report(node.object);\n                }\n\n                if (nodeObjHasExcessParens &&\n                    node.optional &&\n                    node.object.type === \"ChainExpression\"\n                ) {\n                    report(node.object);\n                }\n\n                if (node.computed && hasExcessParens(node.property)) {\n                    report(node.property);\n                }\n            },\n\n            \"MethodDefinition[computed=true]\"(node) {\n                if (hasExcessParensWithPrecedence(node.key, PRECEDENCE_OF_ASSIGNMENT_EXPR)) {\n                    report(node.key);\n                }\n            },\n\n            NewExpression: checkCallNew,\n\n            ObjectExpression(node) {\n                node.properties\n                    .filter(property => property.value && hasExcessParensWithPrecedence(property.value, PRECEDENCE_OF_ASSIGNMENT_EXPR))\n                    .forEach(property => report(property.value));\n            },\n\n            ObjectPattern(node) {\n                node.properties\n                    .filter(property => {\n                        const value = property.value;\n\n                        return canBeAssignmentTarget(value) && hasExcessParens(value);\n                    }).forEach(property => report(property.value));\n            },\n\n            Property(node) {\n                if (node.computed) {\n                    const { key } = node;\n\n                    if (key && hasExcessParensWithPrecedence(key, PRECEDENCE_OF_ASSIGNMENT_EXPR)) {\n                        report(key);\n                    }\n                }\n            },\n\n            PropertyDefinition(node) {\n                if (node.computed && hasExcessParensWithPrecedence(node.key, PRECEDENCE_OF_ASSIGNMENT_EXPR)) {\n                    report(node.key);\n                }\n\n                if (node.value && hasExcessParensWithPrecedence(node.value, PRECEDENCE_OF_ASSIGNMENT_EXPR)) {\n                    report(node.value);\n                }\n            },\n\n            RestElement(node) {\n                const argument = node.argument;\n\n                if (canBeAssignmentTarget(argument) && hasExcessParens(argument)) {\n                    report(argument);\n                }\n            },\n\n            ReturnStatement(node) {\n                const returnToken = sourceCode.getFirstToken(node);\n\n                if (isReturnAssignException(node)) {\n                    return;\n                }\n\n                if (node.argument &&\n                        hasExcessParensNoLineTerminator(returnToken, node.argument) &&\n\n                        // RegExp literal is allowed to have parens (#1589)\n                        !(node.argument.type === \"Literal\" && node.argument.regex)) {\n                    report(node.argument);\n                }\n            },\n\n            SequenceExpression(node) {\n                const precedenceOfNode = precedence(node);\n\n                node.expressions\n                    .filter(e => hasExcessParensWithPrecedence(e, precedenceOfNode))\n                    .forEach(report);\n            },\n\n            SwitchCase(node) {\n                if (node.test && hasExcessParens(node.test)) {\n                    report(node.test);\n                }\n            },\n\n            SwitchStatement(node) {\n                if (hasExcessParens(node.discriminant)) {\n                    report(node.discriminant);\n                }\n            },\n\n            ThrowStatement(node) {\n                const throwToken = sourceCode.getFirstToken(node);\n\n                if (hasExcessParensNoLineTerminator(throwToken, node.argument)) {\n                    report(node.argument);\n                }\n            },\n\n            UnaryExpression: checkArgumentWithPrecedence,\n            UpdateExpression(node) {\n                if (node.prefix) {\n                    checkArgumentWithPrecedence(node);\n                } else {\n                    const { argument } = node;\n                    const operatorToken = sourceCode.getLastToken(node);\n\n                    if (argument.loc.end.line === operatorToken.loc.start.line) {\n                        checkArgumentWithPrecedence(node);\n                    } else {\n                        if (hasDoubleExcessParens(argument)) {\n                            report(argument);\n                        }\n                    }\n                }\n            },\n            AwaitExpression: checkArgumentWithPrecedence,\n\n            VariableDeclarator(node) {\n                if (\n                    node.init && hasExcessParensWithPrecedence(node.init, PRECEDENCE_OF_ASSIGNMENT_EXPR) &&\n\n                    // RegExp literal is allowed to have parens (#1589)\n                    !(node.init.type === \"Literal\" && node.init.regex)\n                ) {\n                    report(node.init);\n                }\n            },\n\n            WhileStatement(node) {\n                if (hasExcessParens(node.test) && !isCondAssignException(node)) {\n                    report(node.test);\n                }\n            },\n\n            WithStatement(node) {\n                if (hasExcessParens(node.object)) {\n                    report(node.object);\n                }\n            },\n\n            YieldExpression(node) {\n                if (node.argument) {\n                    const yieldToken = sourceCode.getFirstToken(node);\n\n                    if ((precedence(node.argument) >= precedence(node) &&\n                            hasExcessParensNoLineTerminator(yieldToken, node.argument)) ||\n                            hasDoubleExcessParens(node.argument)) {\n                        report(node.argument);\n                    }\n                }\n            },\n\n            ClassDeclaration: checkClass,\n            ClassExpression: checkClass,\n\n            SpreadElement: checkSpreadOperator,\n            SpreadProperty: checkSpreadOperator,\n            ExperimentalSpreadProperty: checkSpreadOperator,\n\n            TemplateLiteral(node) {\n                node.expressions\n                    .filter(e => e && hasExcessParens(e))\n                    .forEach(report);\n            },\n\n            AssignmentPattern(node) {\n                const { left, right } = node;\n\n                if (canBeAssignmentTarget(left) && hasExcessParens(left)) {\n                    report(left);\n                }\n\n                if (right && hasExcessParensWithPrecedence(right, PRECEDENCE_OF_ASSIGNMENT_EXPR)) {\n                    report(right);\n                }\n            }\n        };\n\n    }\n};\n/lib/rules/no-const-assign.js\u0005/**\n * @fileoverview A rule to disallow modifying variables that are declared using `const`\n * @author Toru Nagashima\n */\n\n\"use strict\";\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"problem\",\n\n        docs: {\n            description: \"disallow reassigning `const` variables\",\n            recommended: true,\n            url: \"https://eslint.org/docs/rules/no-const-assign\"\n        },\n\n        schema: [],\n\n        messages: {\n            const: \"'{{name}}' is constant.\"\n        }\n    },\n\n    create(context) {\n\n        /**\n         * Finds and reports references that are non initializer and writable.\n         * @param {Variable} variable A variable to check.\n         * @returns {void}\n         */\n        function checkVariable(variable) {\n            astUtils.getModifyingReferences(variable.references).forEach(reference => {\n                context.report({ node: reference.identifier, messageId: \"const\", data: { name: reference.identifier.name } });\n            });\n        }\n\n        return {\n            VariableDeclaration(node) {\n                if (node.kind === \"const\") {\n                    context.getDeclaredVariables(node).forEach(checkVariable);\n                }\n            }\n        };\n\n    }\n};\n%/lib/rules/max-statements-per-line.js\u001d\u0010/**\n * @fileoverview Specify the maximum number of statements allowed per line.\n * @author Kenneth Williams\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"layout\",\n\n        docs: {\n            description: \"enforce a maximum number of statements allowed per line\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/max-statements-per-line\"\n        },\n\n        schema: [\n            {\n                type: \"object\",\n                properties: {\n                    max: {\n                        type: \"integer\",\n                        minimum: 1,\n                        default: 1\n                    }\n                },\n                additionalProperties: false\n            }\n        ],\n        messages: {\n            exceed: \"This line has {{numberOfStatementsOnThisLine}} {{statements}}. Maximum allowed is {{maxStatementsPerLine}}.\"\n        }\n    },\n\n    create(context) {\n\n        const sourceCode = context.getSourceCode(),\n            options = context.options[0] || {},\n            maxStatementsPerLine = typeof options.max !== \"undefined\" ? options.max : 1;\n\n        let lastStatementLine = 0,\n            numberOfStatementsOnThisLine = 0,\n            firstExtraStatement;\n\n        //--------------------------------------------------------------------------\n        // Helpers\n        //--------------------------------------------------------------------------\n\n        const SINGLE_CHILD_ALLOWED = /^(?:(?:DoWhile|For|ForIn|ForOf|If|Labeled|While)Statement|Export(?:Default|Named)Declaration)$/u;\n\n        /**\n         * Reports with the first extra statement, and clears it.\n         * @returns {void}\n         */\n        function reportFirstExtraStatementAndClear() {\n            if (firstExtraStatement) {\n                context.report({\n                    node: firstExtraStatement,\n                    messageId: \"exceed\",\n                    data: {\n                        numberOfStatementsOnThisLine,\n                        maxStatementsPerLine,\n                        statements: numberOfStatementsOnThisLine === 1 ? \"statement\" : \"statements\"\n                    }\n                });\n            }\n            firstExtraStatement = null;\n        }\n\n        /**\n         * Gets the actual last token of a given node.\n         * @param {ASTNode} node A node to get. This is a node except EmptyStatement.\n         * @returns {Token} The actual last token.\n         */\n        function getActualLastToken(node) {\n            return sourceCode.getLastToken(node, astUtils.isNotSemicolonToken);\n        }\n\n        /**\n         * Addresses a given node.\n         * It updates the state of this rule, then reports the node if the node violated this rule.\n         * @param {ASTNode} node A node to check.\n         * @returns {void}\n         */\n        function enterStatement(node) {\n            const line = node.loc.start.line;\n\n            /*\n             * Skip to allow non-block statements if this is direct child of control statements.\n             * `if (a) foo();` is counted as 1.\n             * But `if (a) foo(); else foo();` should be counted as 2.\n             */\n            if (SINGLE_CHILD_ALLOWED.test(node.parent.type) &&\n                node.parent.alternate !== node\n            ) {\n                return;\n            }\n\n            // Update state.\n            if (line === lastStatementLine) {\n                numberOfStatementsOnThisLine += 1;\n            } else {\n                reportFirstExtraStatementAndClear();\n                numberOfStatementsOnThisLine = 1;\n                lastStatementLine = line;\n            }\n\n            // Reports if the node violated this rule.\n            if (numberOfStatementsOnThisLine === maxStatementsPerLine + 1) {\n                firstExtraStatement = firstExtraStatement || node;\n            }\n        }\n\n        /**\n         * Updates the state of this rule with the end line of leaving node to check with the next statement.\n         * @param {ASTNode} node A node to check.\n         * @returns {void}\n         */\n        function leaveStatement(node) {\n            const line = getActualLastToken(node).loc.end.line;\n\n            // Update state.\n            if (line !== lastStatementLine) {\n                reportFirstExtraStatementAndClear();\n                numberOfStatementsOnThisLine = 1;\n                lastStatementLine = line;\n            }\n        }\n\n        //--------------------------------------------------------------------------\n        // Public API\n        //--------------------------------------------------------------------------\n\n        return {\n            BreakStatement: enterStatement,\n            ClassDeclaration: enterStatement,\n            ContinueStatement: enterStatement,\n            DebuggerStatement: enterStatement,\n            DoWhileStatement: enterStatement,\n            ExpressionStatement: enterStatement,\n            ForInStatement: enterStatement,\n            ForOfStatement: enterStatement,\n            ForStatement: enterStatement,\n            FunctionDeclaration: enterStatement,\n            IfStatement: enterStatement,\n            ImportDeclaration: enterStatement,\n            LabeledStatement: enterStatement,\n            ReturnStatement: enterStatement,\n            SwitchStatement: enterStatement,\n            ThrowStatement: enterStatement,\n            TryStatement: enterStatement,\n            VariableDeclaration: enterStatement,\n            WhileStatement: enterStatement,\n            WithStatement: enterStatement,\n            ExportNamedDeclaration: enterStatement,\n            ExportDefaultDeclaration: enterStatement,\n            ExportAllDeclaration: enterStatement,\n\n            \"BreakStatement:exit\": leaveStatement,\n            \"ClassDeclaration:exit\": leaveStatement,\n            \"ContinueStatement:exit\": leaveStatement,\n            \"DebuggerStatement:exit\": leaveStatement,\n            \"DoWhileStatement:exit\": leaveStatement,\n            \"ExpressionStatement:exit\": leaveStatement,\n            \"ForInStatement:exit\": leaveStatement,\n            \"ForOfStatement:exit\": leaveStatement,\n            \"ForStatement:exit\": leaveStatement,\n            \"FunctionDeclaration:exit\": leaveStatement,\n            \"IfStatement:exit\": leaveStatement,\n            \"ImportDeclaration:exit\": leaveStatement,\n            \"LabeledStatement:exit\": leaveStatement,\n            \"ReturnStatement:exit\": leaveStatement,\n            \"SwitchStatement:exit\": leaveStatement,\n            \"ThrowStatement:exit\": leaveStatement,\n            \"TryStatement:exit\": leaveStatement,\n            \"VariableDeclaration:exit\": leaveStatement,\n            \"WhileStatement:exit\": leaveStatement,\n            \"WithStatement:exit\": leaveStatement,\n            \"ExportNamedDeclaration:exit\": leaveStatement,\n            \"ExportDefaultDeclaration:exit\": leaveStatement,\n            \"ExportAllDeclaration:exit\": leaveStatement,\n            \"Program:exit\": reportFirstExtraStatementAndClear\n        };\n    }\n};\n$/lib/rules/template-curly-spacing.js\u0012/**\n * @fileoverview Rule to enforce spacing around embedded expressions of template strings\n * @author Toru Nagashima\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"layout\",\n\n        docs: {\n            description: \"require or disallow spacing around embedded expressions of template strings\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/template-curly-spacing\"\n        },\n\n        fixable: \"whitespace\",\n\n        schema: [\n            { enum: [\"always\", \"never\"] }\n        ],\n        messages: {\n            expectedBefore: \"Expected space(s) before '}'.\",\n            expectedAfter: \"Expected space(s) after '${'.\",\n            unexpectedBefore: \"Unexpected space(s) before '}'.\",\n            unexpectedAfter: \"Unexpected space(s) after '${'.\"\n        }\n    },\n\n    create(context) {\n        const sourceCode = context.getSourceCode();\n        const always = context.options[0] === \"always\";\n\n        /**\n         * Checks spacing before `}` of a given token.\n         * @param {Token} token A token to check. This is a Template token.\n         * @returns {void}\n         */\n        function checkSpacingBefore(token) {\n            if (!token.value.startsWith(\"}\")) {\n                return; // starts with a backtick, this is the first template element in the template literal\n            }\n\n            const prevToken = sourceCode.getTokenBefore(token, { includeComments: true }),\n                hasSpace = sourceCode.isSpaceBetween(prevToken, token);\n\n            if (!astUtils.isTokenOnSameLine(prevToken, token)) {\n                return;\n            }\n\n            if (always && !hasSpace) {\n                context.report({\n                    loc: {\n                        start: token.loc.start,\n                        end: {\n                            line: token.loc.start.line,\n                            column: token.loc.start.column + 1\n                        }\n                    },\n                    messageId: \"expectedBefore\",\n                    fix: fixer => fixer.insertTextBefore(token, \" \")\n                });\n            }\n\n            if (!always && hasSpace) {\n                context.report({\n                    loc: {\n                        start: prevToken.loc.end,\n                        end: token.loc.start\n                    },\n                    messageId: \"unexpectedBefore\",\n                    fix: fixer => fixer.removeRange([prevToken.range[1], token.range[0]])\n                });\n            }\n        }\n\n        /**\n         * Checks spacing after `${` of a given token.\n         * @param {Token} token A token to check. This is a Template token.\n         * @returns {void}\n         */\n        function checkSpacingAfter(token) {\n            if (!token.value.endsWith(\"${\")) {\n                return; // ends with a backtick, this is the last template element in the template literal\n            }\n\n            const nextToken = sourceCode.getTokenAfter(token, { includeComments: true }),\n                hasSpace = sourceCode.isSpaceBetween(token, nextToken);\n\n            if (!astUtils.isTokenOnSameLine(token, nextToken)) {\n                return;\n            }\n\n            if (always && !hasSpace) {\n                context.report({\n                    loc: {\n                        start: {\n                            line: token.loc.end.line,\n                            column: token.loc.end.column - 2\n                        },\n                        end: token.loc.end\n                    },\n                    messageId: \"expectedAfter\",\n                    fix: fixer => fixer.insertTextAfter(token, \" \")\n                });\n            }\n\n            if (!always && hasSpace) {\n                context.report({\n                    loc: {\n                        start: token.loc.end,\n                        end: nextToken.loc.start\n                    },\n                    messageId: \"unexpectedAfter\",\n                    fix: fixer => fixer.removeRange([token.range[1], nextToken.range[0]])\n                });\n            }\n        }\n\n        return {\n            TemplateElement(node) {\n                const token = sourceCode.getFirstToken(node);\n\n                checkSpacingBefore(token);\n                checkSpacingAfter(token);\n            }\n        };\n    }\n};\n/lib/rules/no-magic-numbers.js!/**\n * @fileoverview Rule to flag statements that use magic numbers (adapted from https://github.com/danielstjules/buddy.js)\n * @author Vincent Lemeunier\n */\n\n\"use strict\";\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n// Maximum array length by the ECMAScript Specification.\nconst MAX_ARRAY_LENGTH = 2 ** 32 - 1;\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/**\n * Convert the value to bigint if it's a string. Otherwise return the value as-is.\n * @param {bigint|number|string} x The value to normalize.\n * @returns {bigint|number} The normalized value.\n */\nfunction normalizeIgnoreValue(x) {\n    if (typeof x === \"string\") {\n        return BigInt(x.slice(0, -1));\n    }\n    return x;\n}\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow magic numbers\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-magic-numbers\"\n        },\n\n        schema: [{\n            type: \"object\",\n            properties: {\n                detectObjects: {\n                    type: \"boolean\",\n                    default: false\n                },\n                enforceConst: {\n                    type: \"boolean\",\n                    default: false\n                },\n                ignore: {\n                    type: \"array\",\n                    items: {\n                        anyOf: [\n                            { type: \"number\" },\n                            { type: \"string\", pattern: \"^[+-]?(?:0|[1-9][0-9]*)n$\" }\n                        ]\n                    },\n                    uniqueItems: true\n                },\n                ignoreArrayIndexes: {\n                    type: \"boolean\",\n                    default: false\n                },\n                ignoreDefaultValues: {\n                    type: \"boolean\",\n                    default: false\n                }\n            },\n            additionalProperties: false\n        }],\n\n        messages: {\n            useConst: \"Number constants declarations must use 'const'.\",\n            noMagic: \"No magic number: {{raw}}.\"\n        }\n    },\n\n    create(context) {\n        const config = context.options[0] || {},\n            detectObjects = !!config.detectObjects,\n            enforceConst = !!config.enforceConst,\n            ignore = (config.ignore || []).map(normalizeIgnoreValue),\n            ignoreArrayIndexes = !!config.ignoreArrayIndexes,\n            ignoreDefaultValues = !!config.ignoreDefaultValues;\n\n        const okTypes = detectObjects ? [] : [\"ObjectExpression\", \"Property\", \"AssignmentExpression\"];\n\n        /**\n         * Returns whether the rule is configured to ignore the given value\n         * @param {bigint|number} value The value to check\n         * @returns {boolean} true if the value is ignored\n         */\n        function isIgnoredValue(value) {\n            return ignore.indexOf(value) !== -1;\n        }\n\n        /**\n         * Returns whether the number is a default value assignment.\n         * @param {ASTNode} fullNumberNode `Literal` or `UnaryExpression` full number node\n         * @returns {boolean} true if the number is a default value\n         */\n        function isDefaultValue(fullNumberNode) {\n            const parent = fullNumberNode.parent;\n\n            return parent.type === \"AssignmentPattern\" && parent.right === fullNumberNode;\n        }\n\n        /**\n         * Returns whether the given node is used as a radix within parseInt() or Number.parseInt()\n         * @param {ASTNode} fullNumberNode `Literal` or `UnaryExpression` full number node\n         * @returns {boolean} true if the node is radix\n         */\n        function isParseIntRadix(fullNumberNode) {\n            const parent = fullNumberNode.parent;\n\n            return parent.type === \"CallExpression\" && fullNumberNode === parent.arguments[1] &&\n                (\n                    astUtils.isSpecificId(parent.callee, \"parseInt\") ||\n                    astUtils.isSpecificMemberAccess(parent.callee, \"Number\", \"parseInt\")\n                );\n        }\n\n        /**\n         * Returns whether the given node is a direct child of a JSX node.\n         * In particular, it aims to detect numbers used as prop values in JSX tags.\n         * Example: <input maxLength={10} />\n         * @param {ASTNode} fullNumberNode `Literal` or `UnaryExpression` full number node\n         * @returns {boolean} true if the node is a JSX number\n         */\n        function isJSXNumber(fullNumberNode) {\n            return fullNumberNode.parent.type.indexOf(\"JSX\") === 0;\n        }\n\n        /**\n         * Returns whether the given node is used as an array index.\n         * Value must coerce to a valid array index name: \"0\", \"1\", \"2\" ... \"4294967294\".\n         *\n         * All other values, like \"-1\", \"2.5\", or \"4294967295\", are just \"normal\" object properties,\n         * which can be created and accessed on an array in addition to the array index properties,\n         * but they don't affect array's length and are not considered by methods such as .map(), .forEach() etc.\n         *\n         * The maximum array length by the specification is 2 ** 32 - 1 = 4294967295,\n         * thus the maximum valid index is 2 ** 32 - 2 = 4294967294.\n         *\n         * All notations are allowed, as long as the value coerces to one of \"0\", \"1\", \"2\" ... \"4294967294\".\n         *\n         * Valid examples:\n         * a[0], a[1], a[1.2e1], a[0xAB], a[0n], a[1n]\n         * a[-0] (same as a[0] because -0 coerces to \"0\")\n         * a[-0n] (-0n evaluates to 0n)\n         *\n         * Invalid examples:\n         * a[-1], a[-0xAB], a[-1n], a[2.5], a[1.23e1], a[12e-1]\n         * a[4294967295] (above the max index, it's an access to a regular property a[\"4294967295\"])\n         * a[999999999999999999999] (even if it wasn't above the max index, it would be a[\"1e+21\"])\n         * a[1e310] (same as a[\"Infinity\"])\n         * @param {ASTNode} fullNumberNode `Literal` or `UnaryExpression` full number node\n         * @param {bigint|number} value Value expressed by the fullNumberNode\n         * @returns {boolean} true if the node is a valid array index\n         */\n        function isArrayIndex(fullNumberNode, value) {\n            const parent = fullNumberNode.parent;\n\n            return parent.type === \"MemberExpression\" && parent.property === fullNumberNode &&\n                (Number.isInteger(value) || typeof value === \"bigint\") &&\n                value >= 0 && value < MAX_ARRAY_LENGTH;\n        }\n\n        return {\n            Literal(node) {\n                if (!astUtils.isNumericLiteral(node)) {\n                    return;\n                }\n\n                let fullNumberNode;\n                let value;\n                let raw;\n\n                // Treat unary minus as a part of the number\n                if (node.parent.type === \"UnaryExpression\" && node.parent.operator === \"-\") {\n                    fullNumberNode = node.parent;\n                    value = -node.value;\n                    raw = `-${node.raw}`;\n                } else {\n                    fullNumberNode = node;\n                    value = node.value;\n                    raw = node.raw;\n                }\n\n                const parent = fullNumberNode.parent;\n\n                // Always allow radix arguments and JSX props\n                if (\n                    isIgnoredValue(value) ||\n                    (ignoreDefaultValues && isDefaultValue(fullNumberNode)) ||\n                    isParseIntRadix(fullNumberNode) ||\n                    isJSXNumber(fullNumberNode) ||\n                    (ignoreArrayIndexes && isArrayIndex(fullNumberNode, value))\n                ) {\n                    return;\n                }\n\n                if (parent.type === \"VariableDeclarator\") {\n                    if (enforceConst && parent.parent.kind !== \"const\") {\n                        context.report({\n                            node: fullNumberNode,\n                            messageId: \"useConst\"\n                        });\n                    }\n                } else if (\n                    okTypes.indexOf(parent.type) === -1 ||\n                    (parent.type === \"AssignmentExpression\" && parent.left.type === \"Identifier\")\n                ) {\n                    context.report({\n                        node: fullNumberNode,\n                        messageId: \"noMagic\",\n                        data: {\n                            raw\n                        }\n                    });\n                }\n            }\n        };\n    }\n};\n/lib/linter/interpolate.js\u0002/**\n * @fileoverview Interpolate keys from an object into a string with {{ }} markers.\n * @author Jed Fox\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Public Interface\n//------------------------------------------------------------------------------\n\nmodule.exports = (text, data) => {\n    if (!data) {\n        return text;\n    }\n\n    // Substitution content for any {{ }} markers.\n    return text.replace(/\\{\\{([^{}]+?)\\}\\}/gu, (fullMatch, termWithWhitespace) => {\n        const term = termWithWhitespace.trim();\n\n        if (term in data) {\n            return data[term];\n        }\n\n        // Preserve old behavior: If parameter name not provided, don't replace it.\n        return fullMatch;\n    });\n};\n/lib/rules/jsx-quotes.js\u000b/**\n * @fileoverview A rule to ensure consistent quotes used in jsx syntax.\n * @author Mathias Schreck <https://github.com/lo1tuma>\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Constants\n//------------------------------------------------------------------------------\n\nconst QUOTE_SETTINGS = {\n    \"prefer-double\": {\n        quote: \"\\\"\",\n        description: \"singlequote\",\n        convert(str) {\n            return str.replace(/'/gu, \"\\\"\");\n        }\n    },\n    \"prefer-single\": {\n        quote: \"'\",\n        description: \"doublequote\",\n        convert(str) {\n            return str.replace(/\"/gu, \"'\");\n        }\n    }\n};\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"layout\",\n\n        docs: {\n            description: \"enforce the consistent use of either double or single quotes in JSX attributes\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/jsx-quotes\"\n        },\n\n        fixable: \"whitespace\",\n\n        schema: [\n            {\n                enum: [\"prefer-single\", \"prefer-double\"]\n            }\n        ],\n        messages: {\n            unexpected: \"Unexpected usage of {{description}}.\"\n        }\n    },\n\n    create(context) {\n        const quoteOption = context.options[0] || \"prefer-double\",\n            setting = QUOTE_SETTINGS[quoteOption];\n\n        /**\n         * Checks if the given string literal node uses the expected quotes\n         * @param {ASTNode} node A string literal node.\n         * @returns {boolean} Whether or not the string literal used the expected quotes.\n         * @public\n         */\n        function usesExpectedQuotes(node) {\n            return node.value.indexOf(setting.quote) !== -1 || astUtils.isSurroundedBy(node.raw, setting.quote);\n        }\n\n        return {\n            JSXAttribute(node) {\n                const attributeValue = node.value;\n\n                if (attributeValue && astUtils.isStringLiteral(attributeValue) && !usesExpectedQuotes(attributeValue)) {\n                    context.report({\n                        node: attributeValue,\n                        messageId: \"unexpected\",\n                        data: {\n                            description: setting.description\n                        },\n                        fix(fixer) {\n                            return fixer.replaceText(attributeValue, setting.convert(attributeValue.raw));\n                        }\n                    });\n                }\n            }\n        };\n    }\n};\n/lib/rules/no-caller.js\u0004/**\n * @fileoverview Rule to flag use of arguments.callee and arguments.caller.\n * @author Nicholas C. Zakas\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow the use of `arguments.caller` or `arguments.callee`\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-caller\"\n        },\n\n        schema: [],\n\n        messages: {\n            unexpected: \"Avoid arguments.{{prop}}.\"\n        }\n    },\n\n    create(context) {\n\n        return {\n\n            MemberExpression(node) {\n                const objectName = node.object.name,\n                    propertyName = node.property.name;\n\n                if (objectName === \"arguments\" && !node.computed && propertyName && propertyName.match(/^calle[er]$/u)) {\n                    context.report({ node, messageId: \"unexpected\", data: { prop: propertyName } });\n                }\n\n            }\n        };\n\n    }\n};\n/lib/rules/radix.js\u001a/**\n * @fileoverview Rule to flag use of parseInt without a radix argument\n * @author James Allardice\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\nconst MODE_ALWAYS = \"always\",\n    MODE_AS_NEEDED = \"as-needed\";\n\nconst validRadixValues = new Set(Array.from({ length: 37 - 2 }, (_, index) => index + 2));\n\n/**\n * Checks whether a given variable is shadowed or not.\n * @param {eslint-scope.Variable} variable A variable to check.\n * @returns {boolean} `true` if the variable is shadowed.\n */\nfunction isShadowed(variable) {\n    return variable.defs.length >= 1;\n}\n\n/**\n * Checks whether a given node is a MemberExpression of `parseInt` method or not.\n * @param {ASTNode} node A node to check.\n * @returns {boolean} `true` if the node is a MemberExpression of `parseInt`\n *      method.\n */\nfunction isParseIntMethod(node) {\n    return (\n        node.type === \"MemberExpression\" &&\n        !node.computed &&\n        node.property.type === \"Identifier\" &&\n        node.property.name === \"parseInt\"\n    );\n}\n\n/**\n * Checks whether a given node is a valid value of radix or not.\n *\n * The following values are invalid.\n *\n * - A literal except integers between 2 and 36.\n * - undefined.\n * @param {ASTNode} radix A node of radix to check.\n * @returns {boolean} `true` if the node is valid.\n */\nfunction isValidRadix(radix) {\n    return !(\n        (radix.type === \"Literal\" && !validRadixValues.has(radix.value)) ||\n        (radix.type === \"Identifier\" && radix.name === \"undefined\")\n    );\n}\n\n/**\n * Checks whether a given node is a default value of radix or not.\n * @param {ASTNode} radix A node of radix to check.\n * @returns {boolean} `true` if the node is the literal node of `10`.\n */\nfunction isDefaultRadix(radix) {\n    return radix.type === \"Literal\" && radix.value === 10;\n}\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"enforce the consistent use of the radix argument when using `parseInt()`\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/radix\"\n        },\n\n        hasSuggestions: true,\n\n        schema: [\n            {\n                enum: [\"always\", \"as-needed\"]\n            }\n        ],\n\n        messages: {\n            missingParameters: \"Missing parameters.\",\n            redundantRadix: \"Redundant radix parameter.\",\n            missingRadix: \"Missing radix parameter.\",\n            invalidRadix: \"Invalid radix parameter, must be an integer between 2 and 36.\",\n            addRadixParameter10: \"Add radix parameter `10` for parsing decimal numbers.\"\n        }\n    },\n\n    create(context) {\n        const mode = context.options[0] || MODE_ALWAYS;\n\n        /**\n         * Checks the arguments of a given CallExpression node and reports it if it\n         * offends this rule.\n         * @param {ASTNode} node A CallExpression node to check.\n         * @returns {void}\n         */\n        function checkArguments(node) {\n            const args = node.arguments;\n\n            switch (args.length) {\n                case 0:\n                    context.report({\n                        node,\n                        messageId: \"missingParameters\"\n                    });\n                    break;\n\n                case 1:\n                    if (mode === MODE_ALWAYS) {\n                        context.report({\n                            node,\n                            messageId: \"missingRadix\",\n                            suggest: [\n                                {\n                                    messageId: \"addRadixParameter10\",\n                                    fix(fixer) {\n                                        const sourceCode = context.getSourceCode();\n                                        const tokens = sourceCode.getTokens(node);\n                                        const lastToken = tokens[tokens.length - 1]; // Parenthesis.\n                                        const secondToLastToken = tokens[tokens.length - 2]; // May or may not be a comma.\n                                        const hasTrailingComma = secondToLastToken.type === \"Punctuator\" && secondToLastToken.value === \",\";\n\n                                        return fixer.insertTextBefore(lastToken, hasTrailingComma ? \" 10,\" : \", 10\");\n                                    }\n                                }\n                            ]\n                        });\n                    }\n                    break;\n\n                default:\n                    if (mode === MODE_AS_NEEDED && isDefaultRadix(args[1])) {\n                        context.report({\n                            node,\n                            messageId: \"redundantRadix\"\n                        });\n                    } else if (!isValidRadix(args[1])) {\n                        context.report({\n                            node,\n                            messageId: \"invalidRadix\"\n                        });\n                    }\n                    break;\n            }\n        }\n\n        return {\n            \"Program:exit\"() {\n                const scope = context.getScope();\n                let variable;\n\n                // Check `parseInt()`\n                variable = astUtils.getVariableByName(scope, \"parseInt\");\n                if (variable && !isShadowed(variable)) {\n                    variable.references.forEach(reference => {\n                        const node = reference.identifier;\n\n                        if (astUtils.isCallee(node)) {\n                            checkArguments(node.parent);\n                        }\n                    });\n                }\n\n                // Check `Number.parseInt()`\n                variable = astUtils.getVariableByName(scope, \"Number\");\n                if (variable && !isShadowed(variable)) {\n                    variable.references.forEach(reference => {\n                        const node = reference.identifier.parent;\n                        const maybeCallee = node.parent.type === \"ChainExpression\"\n                            ? node.parent\n                            : node;\n\n                        if (isParseIntMethod(node) && astUtils.isCallee(maybeCallee)) {\n                            checkArguments(maybeCallee.parent);\n                        }\n                    });\n                }\n            }\n        };\n    }\n};\n1/lib/source-code/token-store/decorative-cursor.js\u0003/**\n * @fileoverview Define the abstract class about cursors which manipulate another cursor.\n * @author Toru Nagashima\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst Cursor = require(\"./cursor\");\n\n//------------------------------------------------------------------------------\n// Exports\n//------------------------------------------------------------------------------\n\n/**\n * The abstract class about cursors which manipulate another cursor.\n */\nmodule.exports = class DecorativeCursor extends Cursor {\n\n    /**\n     * Initializes this cursor.\n     * @param {Cursor} cursor The cursor to be decorated.\n     */\n    constructor(cursor) {\n        super();\n        this.cursor = cursor;\n    }\n\n    /** @inheritdoc */\n    moveNext() {\n        const retv = this.cursor.moveNext();\n\n        this.current = this.cursor.current;\n\n        return retv;\n    }\n};\n/messages/file-not-found.js\u0001\u0010\"use strict\";\n\nmodule.exports = function(it) {\n    const { pattern, globDisabled } = it;\n\n    return `\nNo files matching the pattern \"${pattern}\"${globDisabled ? \" (with disabling globs)\" : \"\"} were found.\nPlease check for typing mistakes in the pattern.\n`.trimLeft();\n};\n#/lib/rules/array-bracket-spacing.js#}/**\n * @fileoverview Disallows or enforces spaces inside of array brackets.\n * @author Jamund Ferguson\n */\n\"use strict\";\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"layout\",\n\n        docs: {\n            description: \"enforce consistent spacing inside array brackets\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/array-bracket-spacing\"\n        },\n\n        fixable: \"whitespace\",\n\n        schema: [\n            {\n                enum: [\"always\", \"never\"]\n            },\n            {\n                type: \"object\",\n                properties: {\n                    singleValue: {\n                        type: \"boolean\"\n                    },\n                    objectsInArrays: {\n                        type: \"boolean\"\n                    },\n                    arraysInArrays: {\n                        type: \"boolean\"\n                    }\n                },\n                additionalProperties: false\n            }\n        ],\n\n        messages: {\n            unexpectedSpaceAfter: \"There should be no space after '{{tokenValue}}'.\",\n            unexpectedSpaceBefore: \"There should be no space before '{{tokenValue}}'.\",\n            missingSpaceAfter: \"A space is required after '{{tokenValue}}'.\",\n            missingSpaceBefore: \"A space is required before '{{tokenValue}}'.\"\n        }\n    },\n    create(context) {\n        const spaced = context.options[0] === \"always\",\n            sourceCode = context.getSourceCode();\n\n        /**\n         * Determines whether an option is set, relative to the spacing option.\n         * If spaced is \"always\", then check whether option is set to false.\n         * If spaced is \"never\", then check whether option is set to true.\n         * @param {Object} option The option to exclude.\n         * @returns {boolean} Whether or not the property is excluded.\n         */\n        function isOptionSet(option) {\n            return context.options[1] ? context.options[1][option] === !spaced : false;\n        }\n\n        const options = {\n            spaced,\n            singleElementException: isOptionSet(\"singleValue\"),\n            objectsInArraysException: isOptionSet(\"objectsInArrays\"),\n            arraysInArraysException: isOptionSet(\"arraysInArrays\")\n        };\n\n        //--------------------------------------------------------------------------\n        // Helpers\n        //--------------------------------------------------------------------------\n\n        /**\n         * Reports that there shouldn't be a space after the first token\n         * @param {ASTNode} node The node to report in the event of an error.\n         * @param {Token} token The token to use for the report.\n         * @returns {void}\n         */\n        function reportNoBeginningSpace(node, token) {\n            const nextToken = sourceCode.getTokenAfter(token);\n\n            context.report({\n                node,\n                loc: { start: token.loc.end, end: nextToken.loc.start },\n                messageId: \"unexpectedSpaceAfter\",\n                data: {\n                    tokenValue: token.value\n                },\n                fix(fixer) {\n                    return fixer.removeRange([token.range[1], nextToken.range[0]]);\n                }\n            });\n        }\n\n        /**\n         * Reports that there shouldn't be a space before the last token\n         * @param {ASTNode} node The node to report in the event of an error.\n         * @param {Token} token The token to use for the report.\n         * @returns {void}\n         */\n        function reportNoEndingSpace(node, token) {\n            const previousToken = sourceCode.getTokenBefore(token);\n\n            context.report({\n                node,\n                loc: { start: previousToken.loc.end, end: token.loc.start },\n                messageId: \"unexpectedSpaceBefore\",\n                data: {\n                    tokenValue: token.value\n                },\n                fix(fixer) {\n                    return fixer.removeRange([previousToken.range[1], token.range[0]]);\n                }\n            });\n        }\n\n        /**\n         * Reports that there should be a space after the first token\n         * @param {ASTNode} node The node to report in the event of an error.\n         * @param {Token} token The token to use for the report.\n         * @returns {void}\n         */\n        function reportRequiredBeginningSpace(node, token) {\n            context.report({\n                node,\n                loc: token.loc,\n                messageId: \"missingSpaceAfter\",\n                data: {\n                    tokenValue: token.value\n                },\n                fix(fixer) {\n                    return fixer.insertTextAfter(token, \" \");\n                }\n            });\n        }\n\n        /**\n         * Reports that there should be a space before the last token\n         * @param {ASTNode} node The node to report in the event of an error.\n         * @param {Token} token The token to use for the report.\n         * @returns {void}\n         */\n        function reportRequiredEndingSpace(node, token) {\n            context.report({\n                node,\n                loc: token.loc,\n                messageId: \"missingSpaceBefore\",\n                data: {\n                    tokenValue: token.value\n                },\n                fix(fixer) {\n                    return fixer.insertTextBefore(token, \" \");\n                }\n            });\n        }\n\n        /**\n         * Determines if a node is an object type\n         * @param {ASTNode} node The node to check.\n         * @returns {boolean} Whether or not the node is an object type.\n         */\n        function isObjectType(node) {\n            return node && (node.type === \"ObjectExpression\" || node.type === \"ObjectPattern\");\n        }\n\n        /**\n         * Determines if a node is an array type\n         * @param {ASTNode} node The node to check.\n         * @returns {boolean} Whether or not the node is an array type.\n         */\n        function isArrayType(node) {\n            return node && (node.type === \"ArrayExpression\" || node.type === \"ArrayPattern\");\n        }\n\n        /**\n         * Validates the spacing around array brackets\n         * @param {ASTNode} node The node we're checking for spacing\n         * @returns {void}\n         */\n        function validateArraySpacing(node) {\n            if (options.spaced && node.elements.length === 0) {\n                return;\n            }\n\n            const first = sourceCode.getFirstToken(node),\n                second = sourceCode.getFirstToken(node, 1),\n                last = node.typeAnnotation\n                    ? sourceCode.getTokenBefore(node.typeAnnotation)\n                    : sourceCode.getLastToken(node),\n                penultimate = sourceCode.getTokenBefore(last),\n                firstElement = node.elements[0],\n                lastElement = node.elements[node.elements.length - 1];\n\n            const openingBracketMustBeSpaced =\n                options.objectsInArraysException && isObjectType(firstElement) ||\n                options.arraysInArraysException && isArrayType(firstElement) ||\n                options.singleElementException && node.elements.length === 1\n                    ? !options.spaced : options.spaced;\n\n            const closingBracketMustBeSpaced =\n                options.objectsInArraysException && isObjectType(lastElement) ||\n                options.arraysInArraysException && isArrayType(lastElement) ||\n                options.singleElementException && node.elements.length === 1\n                    ? !options.spaced : options.spaced;\n\n            if (astUtils.isTokenOnSameLine(first, second)) {\n                if (openingBracketMustBeSpaced && !sourceCode.isSpaceBetweenTokens(first, second)) {\n                    reportRequiredBeginningSpace(node, first);\n                }\n                if (!openingBracketMustBeSpaced && sourceCode.isSpaceBetweenTokens(first, second)) {\n                    reportNoBeginningSpace(node, first);\n                }\n            }\n\n            if (first !== penultimate && astUtils.isTokenOnSameLine(penultimate, last)) {\n                if (closingBracketMustBeSpaced && !sourceCode.isSpaceBetweenTokens(penultimate, last)) {\n                    reportRequiredEndingSpace(node, last);\n                }\n                if (!closingBracketMustBeSpaced && sourceCode.isSpaceBetweenTokens(penultimate, last)) {\n                    reportNoEndingSpace(node, last);\n                }\n            }\n        }\n\n        //--------------------------------------------------------------------------\n        // Public\n        //--------------------------------------------------------------------------\n\n        return {\n            ArrayPattern: validateArraySpacing,\n            ArrayExpression: validateArraySpacing\n        };\n    }\n};\n/lib/rules/multiline-ternary.js\u001e./**\n * @fileoverview Enforce newlines between operands of ternary expressions\n * @author Kai Cataldo\n */\n\n\"use strict\";\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"layout\",\n\n        docs: {\n            description: \"enforce newlines between operands of ternary expressions\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/multiline-ternary\"\n        },\n\n        schema: [\n            {\n                enum: [\"always\", \"always-multiline\", \"never\"]\n            }\n        ],\n\n        messages: {\n            expectedTestCons: \"Expected newline between test and consequent of ternary expression.\",\n            expectedConsAlt: \"Expected newline between consequent and alternate of ternary expression.\",\n            unexpectedTestCons: \"Unexpected newline between test and consequent of ternary expression.\",\n            unexpectedConsAlt: \"Unexpected newline between consequent and alternate of ternary expression.\"\n        },\n\n        fixable: \"whitespace\"\n    },\n\n    create(context) {\n        const sourceCode = context.getSourceCode();\n        const option = context.options[0];\n        const multiline = option !== \"never\";\n        const allowSingleLine = option === \"always-multiline\";\n\n        //--------------------------------------------------------------------------\n        // Public\n        //--------------------------------------------------------------------------\n\n        return {\n            ConditionalExpression(node) {\n                const questionToken = sourceCode.getTokenAfter(node.test, astUtils.isNotClosingParenToken);\n                const colonToken = sourceCode.getTokenAfter(node.consequent, astUtils.isNotClosingParenToken);\n\n                const firstTokenOfTest = sourceCode.getFirstToken(node);\n                const lastTokenOfTest = sourceCode.getTokenBefore(questionToken);\n                const firstTokenOfConsequent = sourceCode.getTokenAfter(questionToken);\n                const lastTokenOfConsequent = sourceCode.getTokenBefore(colonToken);\n                const firstTokenOfAlternate = sourceCode.getTokenAfter(colonToken);\n\n                const areTestAndConsequentOnSameLine = astUtils.isTokenOnSameLine(lastTokenOfTest, firstTokenOfConsequent);\n                const areConsequentAndAlternateOnSameLine = astUtils.isTokenOnSameLine(lastTokenOfConsequent, firstTokenOfAlternate);\n\n                const hasComments = !!sourceCode.getCommentsInside(node).length;\n\n                if (!multiline) {\n                    if (!areTestAndConsequentOnSameLine) {\n                        context.report({\n                            node: node.test,\n                            loc: {\n                                start: firstTokenOfTest.loc.start,\n                                end: lastTokenOfTest.loc.end\n                            },\n                            messageId: \"unexpectedTestCons\",\n                            fix: fixer => {\n                                if (hasComments) {\n                                    return null;\n                                }\n                                const fixers = [];\n                                const areTestAndQuestionOnSameLine = astUtils.isTokenOnSameLine(lastTokenOfTest, questionToken);\n                                const areQuestionAndConsOnSameLine = astUtils.isTokenOnSameLine(questionToken, firstTokenOfConsequent);\n\n                                if (!areTestAndQuestionOnSameLine) {\n                                    fixers.push(fixer.removeRange([lastTokenOfTest.range[1], questionToken.range[0]]));\n                                }\n                                if (!areQuestionAndConsOnSameLine) {\n                                    fixers.push(fixer.removeRange([questionToken.range[1], firstTokenOfConsequent.range[0]]));\n                                }\n\n                                return fixers;\n                            }\n                        });\n                    }\n\n                    if (!areConsequentAndAlternateOnSameLine) {\n                        context.report({\n                            node: node.consequent,\n                            loc: {\n                                start: firstTokenOfConsequent.loc.start,\n                                end: lastTokenOfConsequent.loc.end\n                            },\n                            messageId: \"unexpectedConsAlt\",\n                            fix: fixer => {\n                                if (hasComments) {\n                                    return null;\n                                }\n                                const fixers = [];\n                                const areConsAndColonOnSameLine = astUtils.isTokenOnSameLine(lastTokenOfConsequent, colonToken);\n                                const areColonAndAltOnSameLine = astUtils.isTokenOnSameLine(colonToken, firstTokenOfAlternate);\n\n                                if (!areConsAndColonOnSameLine) {\n                                    fixers.push(fixer.removeRange([lastTokenOfConsequent.range[1], colonToken.range[0]]));\n                                }\n                                if (!areColonAndAltOnSameLine) {\n                                    fixers.push(fixer.removeRange([colonToken.range[1], firstTokenOfAlternate.range[0]]));\n                                }\n\n                                return fixers;\n                            }\n                        });\n                    }\n                } else {\n                    if (allowSingleLine && node.loc.start.line === node.loc.end.line) {\n                        return;\n                    }\n\n                    if (areTestAndConsequentOnSameLine) {\n                        context.report({\n                            node: node.test,\n                            loc: {\n                                start: firstTokenOfTest.loc.start,\n                                end: lastTokenOfTest.loc.end\n                            },\n                            messageId: \"expectedTestCons\",\n                            fix: fixer => (hasComments ? null : (\n                                fixer.replaceTextRange(\n                                    [\n                                        lastTokenOfTest.range[1],\n                                        questionToken.range[0]\n                                    ],\n                                    \"\\n\"\n                                )\n                            ))\n                        });\n                    }\n\n                    if (areConsequentAndAlternateOnSameLine) {\n                        context.report({\n                            node: node.consequent,\n                            loc: {\n                                start: firstTokenOfConsequent.loc.start,\n                                end: lastTokenOfConsequent.loc.end\n                            },\n                            messageId: \"expectedConsAlt\",\n                            fix: (fixer => (hasComments ? null : (\n                                fixer.replaceTextRange(\n                                    [\n                                        lastTokenOfConsequent.range[1],\n                                        colonToken.range[0]\n                                    ],\n                                    \"\\n\"\n                                )\n                            )))\n                        });\n                    }\n                }\n            }\n        };\n    }\n};\n/lib/rules/no-obj-calls.js\n]/**\n * @fileoverview Rule to flag use of an object property of the global object (Math and JSON) as a function\n * @author James Allardice\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst { CALL, CONSTRUCT, ReferenceTracker } = require(\"eslint-utils\");\nconst getPropertyName = require(\"./utils/ast-utils\").getStaticPropertyName;\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\nconst nonCallableGlobals = [\"Atomics\", \"JSON\", \"Math\", \"Reflect\"];\n\n/**\n * Returns the name of the node to report\n * @param {ASTNode} node A node to report\n * @returns {string} name to report\n */\nfunction getReportNodeName(node) {\n    if (node.type === \"ChainExpression\") {\n        return getReportNodeName(node.expression);\n    }\n    if (node.type === \"MemberExpression\") {\n        return getPropertyName(node);\n    }\n    return node.name;\n}\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"problem\",\n\n        docs: {\n            description: \"disallow calling global object properties as functions\",\n            recommended: true,\n            url: \"https://eslint.org/docs/rules/no-obj-calls\"\n        },\n\n        schema: [],\n\n        messages: {\n            unexpectedCall: \"'{{name}}' is not a function.\",\n            unexpectedRefCall: \"'{{name}}' is reference to '{{ref}}', which is not a function.\"\n        }\n    },\n\n    create(context) {\n\n        return {\n            Program() {\n                const scope = context.getScope();\n                const tracker = new ReferenceTracker(scope);\n                const traceMap = {};\n\n                for (const g of nonCallableGlobals) {\n                    traceMap[g] = {\n                        [CALL]: true,\n                        [CONSTRUCT]: true\n                    };\n                }\n\n                for (const { node, path } of tracker.iterateGlobalReferences(traceMap)) {\n                    const name = getReportNodeName(node.callee);\n                    const ref = path[0];\n                    const messageId = name === ref ? \"unexpectedCall\" : \"unexpectedRefCall\";\n\n                    context.report({ node, messageId, data: { name, ref } });\n                }\n            }\n        };\n    }\n};\n%/lib/cli-engine/formatters/stylish.js\r\t/**\n * @fileoverview Stylish reporter\n * @author Sindre Sorhus\n */\n\"use strict\";\n\nconst chalk = require(\"chalk\"),\n    stripAnsi = require(\"strip-ansi\"),\n    table = require(\"text-table\");\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\n/**\n * Given a word and a count, append an s if count is not one.\n * @param {string} word A word in its singular form.\n * @param {int} count A number controlling whether word should be pluralized.\n * @returns {string} The original word with an s on the end if count is not one.\n */\nfunction pluralize(word, count) {\n    return (count === 1 ? word : `${word}s`);\n}\n\n//------------------------------------------------------------------------------\n// Public Interface\n//------------------------------------------------------------------------------\n\nmodule.exports = function(results) {\n\n    let output = \"\\n\",\n        errorCount = 0,\n        warningCount = 0,\n        fixableErrorCount = 0,\n        fixableWarningCount = 0,\n        summaryColor = \"yellow\";\n\n    results.forEach(result => {\n        const messages = result.messages;\n\n        if (messages.length === 0) {\n            return;\n        }\n\n        errorCount += result.errorCount;\n        warningCount += result.warningCount;\n        fixableErrorCount += result.fixableErrorCount;\n        fixableWarningCount += result.fixableWarningCount;\n\n        output += `${chalk.underline(result.filePath)}\\n`;\n\n        output += `${table(\n            messages.map(message => {\n                let messageType;\n\n                if (message.fatal || message.severity === 2) {\n                    messageType = chalk.red(\"error\");\n                    summaryColor = \"red\";\n                } else {\n                    messageType = chalk.yellow(\"warning\");\n                }\n\n                return [\n                    \"\",\n                    message.line || 0,\n                    message.column || 0,\n                    messageType,\n                    message.message.replace(/([^ ])\\.$/u, \"$1\"),\n                    chalk.dim(message.ruleId || \"\")\n                ];\n            }),\n            {\n                align: [\"\", \"r\", \"l\"],\n                stringLength(str) {\n                    return stripAnsi(str).length;\n                }\n            }\n        ).split(\"\\n\").map(el => el.replace(/(\\d+)\\s+(\\d+)/u, (m, p1, p2) => chalk.dim(`${p1}:${p2}`))).join(\"\\n\")}\\n\\n`;\n    });\n\n    const total = errorCount + warningCount;\n\n    if (total > 0) {\n        output += chalk[summaryColor].bold([\n            \"\\u2716 \", total, pluralize(\" problem\", total),\n            \" (\", errorCount, pluralize(\" error\", errorCount), \", \",\n            warningCount, pluralize(\" warning\", warningCount), \")\\n\"\n        ].join(\"\"));\n\n        if (fixableErrorCount > 0 || fixableWarningCount > 0) {\n            output += chalk[summaryColor].bold([\n                \"  \", fixableErrorCount, pluralize(\" error\", fixableErrorCount), \" and \",\n                fixableWarningCount, pluralize(\" warning\", fixableWarningCount),\n                \" potentially fixable with the `--fix` option.\\n\"\n            ].join(\"\"));\n        }\n    }\n\n    // Resets output color, for prevent change on top level\n    return total > 0 ? chalk.reset(output) : \"\";\n};\n/lib/rules/no-dupe-keys.js\u000fz/**\n * @fileoverview Rule to flag use of duplicate keys in an object.\n * @author Ian Christian Myers\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\nconst GET_KIND = /^(?:init|get)$/u;\nconst SET_KIND = /^(?:init|set)$/u;\n\n/**\n * The class which stores properties' information of an object.\n */\nclass ObjectInfo {\n\n    /**\n     * @param {ObjectInfo|null} upper The information of the outer object.\n     * @param {ASTNode} node The ObjectExpression node of this information.\n     */\n    constructor(upper, node) {\n        this.upper = upper;\n        this.node = node;\n        this.properties = new Map();\n    }\n\n    /**\n     * Gets the information of the given Property node.\n     * @param {ASTNode} node The Property node to get.\n     * @returns {{get: boolean, set: boolean}} The information of the property.\n     */\n    getPropertyInfo(node) {\n        const name = astUtils.getStaticPropertyName(node);\n\n        if (!this.properties.has(name)) {\n            this.properties.set(name, { get: false, set: false });\n        }\n        return this.properties.get(name);\n    }\n\n    /**\n     * Checks whether the given property has been defined already or not.\n     * @param {ASTNode} node The Property node to check.\n     * @returns {boolean} `true` if the property has been defined.\n     */\n    isPropertyDefined(node) {\n        const entry = this.getPropertyInfo(node);\n\n        return (\n            (GET_KIND.test(node.kind) && entry.get) ||\n            (SET_KIND.test(node.kind) && entry.set)\n        );\n    }\n\n    /**\n     * Defines the given property.\n     * @param {ASTNode} node The Property node to define.\n     * @returns {void}\n     */\n    defineProperty(node) {\n        const entry = this.getPropertyInfo(node);\n\n        if (GET_KIND.test(node.kind)) {\n            entry.get = true;\n        }\n        if (SET_KIND.test(node.kind)) {\n            entry.set = true;\n        }\n    }\n}\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"problem\",\n\n        docs: {\n            description: \"disallow duplicate keys in object literals\",\n            recommended: true,\n            url: \"https://eslint.org/docs/rules/no-dupe-keys\"\n        },\n\n        schema: [],\n\n        messages: {\n            unexpected: \"Duplicate key '{{name}}'.\"\n        }\n    },\n\n    create(context) {\n        let info = null;\n\n        return {\n            ObjectExpression(node) {\n                info = new ObjectInfo(info, node);\n            },\n            \"ObjectExpression:exit\"() {\n                info = info.upper;\n            },\n\n            Property(node) {\n                const name = astUtils.getStaticPropertyName(node);\n\n                // Skip destructuring.\n                if (node.parent.type !== \"ObjectExpression\") {\n                    return;\n                }\n\n                // Skip if the name is not static.\n                if (name === null) {\n                    return;\n                }\n\n                // Reports if the name is defined already.\n                if (info.isPropertyDefined(node)) {\n                    context.report({\n                        node: info.node,\n                        loc: node.key.loc,\n                        messageId: \"unexpected\",\n                        data: { name }\n                    });\n                }\n\n                // Update info.\n                info.defineProperty(node);\n            }\n        };\n    }\n};\n /lib/linter/report-translator.js6j/**\n * @fileoverview A helper that translates context.report() calls from the rule API into generic problem objects\n * @author Teddy Katz\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst assert = require(\"assert\");\nconst ruleFixer = require(\"./rule-fixer\");\nconst interpolate = require(\"./interpolate\");\n\n//------------------------------------------------------------------------------\n// Typedefs\n//------------------------------------------------------------------------------\n\n/**\n * An error message description\n * @typedef {Object} MessageDescriptor\n * @property {ASTNode} [node] The reported node\n * @property {Location} loc The location of the problem.\n * @property {string} message The problem message.\n * @property {Object} [data] Optional data to use to fill in placeholders in the\n *      message.\n * @property {Function} [fix] The function to call that creates a fix command.\n * @property {Array<{desc?: string, messageId?: string, fix: Function}>} suggest Suggestion descriptions and functions to create a the associated fixes.\n */\n\n/**\n * Information about the report\n * @typedef {Object} ReportInfo\n * @property {string} ruleId The rule ID\n * @property {(0|1|2)} severity Severity of the error\n * @property {(string|undefined)} message The message\n * @property {(string|undefined)} [messageId] The message ID\n * @property {number} line The line number\n * @property {number} column The column number\n * @property {(number|undefined)} [endLine] The ending line number\n * @property {(number|undefined)} [endColumn] The ending column number\n * @property {(string|null)} nodeType Type of node\n * @property {string} source Source text\n * @property {({text: string, range: (number[]|null)}|null)} [fix] The fix object\n * @property {Array<{text: string, range: (number[]|null)}|null>} [suggestions] Suggestion info\n */\n\n//------------------------------------------------------------------------------\n// Module Definition\n//------------------------------------------------------------------------------\n\n\n/**\n * Translates a multi-argument context.report() call into a single object argument call\n * @param {...*} args A list of arguments passed to `context.report`\n * @returns {MessageDescriptor} A normalized object containing report information\n */\nfunction normalizeMultiArgReportCall(...args) {\n\n    // If there is one argument, it is considered to be a new-style call already.\n    if (args.length === 1) {\n\n        // Shallow clone the object to avoid surprises if reusing the descriptor\n        return Object.assign({}, args[0]);\n    }\n\n    // If the second argument is a string, the arguments are interpreted as [node, message, data, fix].\n    if (typeof args[1] === \"string\") {\n        return {\n            node: args[0],\n            message: args[1],\n            data: args[2],\n            fix: args[3]\n        };\n    }\n\n    // Otherwise, the arguments are interpreted as [node, loc, message, data, fix].\n    return {\n        node: args[0],\n        loc: args[1],\n        message: args[2],\n        data: args[3],\n        fix: args[4]\n    };\n}\n\n/**\n * Asserts that either a loc or a node was provided, and the node is valid if it was provided.\n * @param {MessageDescriptor} descriptor A descriptor to validate\n * @returns {void}\n * @throws AssertionError if neither a node nor a loc was provided, or if the node is not an object\n */\nfunction assertValidNodeInfo(descriptor) {\n    if (descriptor.node) {\n        assert(typeof descriptor.node === \"object\", \"Node must be an object\");\n    } else {\n        assert(descriptor.loc, \"Node must be provided when reporting error if location is not provided\");\n    }\n}\n\n/**\n * Normalizes a MessageDescriptor to always have a `loc` with `start` and `end` properties\n * @param {MessageDescriptor} descriptor A descriptor for the report from a rule.\n * @returns {{start: Location, end: (Location|null)}} An updated location that infers the `start` and `end` properties\n * from the `node` of the original descriptor, or infers the `start` from the `loc` of the original descriptor.\n */\nfunction normalizeReportLoc(descriptor) {\n    if (descriptor.loc) {\n        if (descriptor.loc.start) {\n            return descriptor.loc;\n        }\n        return { start: descriptor.loc, end: null };\n    }\n    return descriptor.node.loc;\n}\n\n/**\n * Check that a fix has a valid range.\n * @param {Fix|null} fix The fix to validate.\n * @returns {void}\n */\nfunction assertValidFix(fix) {\n    if (fix) {\n        assert(fix.range && typeof fix.range[0] === \"number\" && typeof fix.range[1] === \"number\", `Fix has invalid range: ${JSON.stringify(fix, null, 2)}`);\n    }\n}\n\n/**\n * Compares items in a fixes array by range.\n * @param {Fix} a The first message.\n * @param {Fix} b The second message.\n * @returns {int} -1 if a comes before b, 1 if a comes after b, 0 if equal.\n * @private\n */\nfunction compareFixesByRange(a, b) {\n    return a.range[0] - b.range[0] || a.range[1] - b.range[1];\n}\n\n/**\n * Merges the given fixes array into one.\n * @param {Fix[]} fixes The fixes to merge.\n * @param {SourceCode} sourceCode The source code object to get the text between fixes.\n * @returns {{text: string, range: number[]}} The merged fixes\n */\nfunction mergeFixes(fixes, sourceCode) {\n    for (const fix of fixes) {\n        assertValidFix(fix);\n    }\n\n    if (fixes.length === 0) {\n        return null;\n    }\n    if (fixes.length === 1) {\n        return fixes[0];\n    }\n\n    fixes.sort(compareFixesByRange);\n\n    const originalText = sourceCode.text;\n    const start = fixes[0].range[0];\n    const end = fixes[fixes.length - 1].range[1];\n    let text = \"\";\n    let lastPos = Number.MIN_SAFE_INTEGER;\n\n    for (const fix of fixes) {\n        assert(fix.range[0] >= lastPos, \"Fix objects must not be overlapped in a report.\");\n\n        if (fix.range[0] >= 0) {\n            text += originalText.slice(Math.max(0, start, lastPos), fix.range[0]);\n        }\n        text += fix.text;\n        lastPos = fix.range[1];\n    }\n    text += originalText.slice(Math.max(0, start, lastPos), end);\n\n    return { range: [start, end], text };\n}\n\n/**\n * Gets one fix object from the given descriptor.\n * If the descriptor retrieves multiple fixes, this merges those to one.\n * @param {MessageDescriptor} descriptor The report descriptor.\n * @param {SourceCode} sourceCode The source code object to get text between fixes.\n * @returns {({text: string, range: number[]}|null)} The fix for the descriptor\n */\nfunction normalizeFixes(descriptor, sourceCode) {\n    if (typeof descriptor.fix !== \"function\") {\n        return null;\n    }\n\n    // @type {null | Fix | Fix[] | IterableIterator<Fix>}\n    const fix = descriptor.fix(ruleFixer);\n\n    // Merge to one.\n    if (fix && Symbol.iterator in fix) {\n        return mergeFixes(Array.from(fix), sourceCode);\n    }\n\n    assertValidFix(fix);\n    return fix;\n}\n\n/**\n * Gets an array of suggestion objects from the given descriptor.\n * @param {MessageDescriptor} descriptor The report descriptor.\n * @param {SourceCode} sourceCode The source code object to get text between fixes.\n * @param {Object} messages Object of meta messages for the rule.\n * @returns {Array<SuggestionResult>} The suggestions for the descriptor\n */\nfunction mapSuggestions(descriptor, sourceCode, messages) {\n    if (!descriptor.suggest || !Array.isArray(descriptor.suggest)) {\n        return [];\n    }\n\n    return descriptor.suggest\n        .map(suggestInfo => {\n            const computedDesc = suggestInfo.desc || messages[suggestInfo.messageId];\n\n            return {\n                ...suggestInfo,\n                desc: interpolate(computedDesc, suggestInfo.data),\n                fix: normalizeFixes(suggestInfo, sourceCode)\n            };\n        })\n\n        // Remove suggestions that didn't provide a fix\n        .filter(({ fix }) => fix);\n}\n\n/**\n * Creates information about the report from a descriptor\n * @param {Object} options Information about the problem\n * @param {string} options.ruleId Rule ID\n * @param {(0|1|2)} options.severity Rule severity\n * @param {(ASTNode|null)} options.node Node\n * @param {string} options.message Error message\n * @param {string} [options.messageId] The error message ID.\n * @param {{start: SourceLocation, end: (SourceLocation|null)}} options.loc Start and end location\n * @param {{text: string, range: (number[]|null)}} options.fix The fix object\n * @param {Array<{text: string, range: (number[]|null)}>} options.suggestions The array of suggestions objects\n * @returns {function(...args): ReportInfo} Function that returns information about the report\n */\nfunction createProblem(options) {\n    const problem = {\n        ruleId: options.ruleId,\n        severity: options.severity,\n        message: options.message,\n        line: options.loc.start.line,\n        column: options.loc.start.column + 1,\n        nodeType: options.node && options.node.type || null\n    };\n\n    /*\n     * If this isn’t in the conditional, some of the tests fail\n     * because `messageId` is present in the problem object\n     */\n    if (options.messageId) {\n        problem.messageId = options.messageId;\n    }\n\n    if (options.loc.end) {\n        problem.endLine = options.loc.end.line;\n        problem.endColumn = options.loc.end.column + 1;\n    }\n\n    if (options.fix) {\n        problem.fix = options.fix;\n    }\n\n    if (options.suggestions && options.suggestions.length > 0) {\n        problem.suggestions = options.suggestions;\n    }\n\n    return problem;\n}\n\n/**\n * Validates that suggestions are properly defined. Throws if an error is detected.\n * @param {Array<{ desc?: string, messageId?: string }>} suggest The incoming suggest data.\n * @param {Object} messages Object of meta messages for the rule.\n * @returns {void}\n */\nfunction validateSuggestions(suggest, messages) {\n    if (suggest && Array.isArray(suggest)) {\n        suggest.forEach(suggestion => {\n            if (suggestion.messageId) {\n                const { messageId } = suggestion;\n\n                if (!messages) {\n                    throw new TypeError(`context.report() called with a suggest option with a messageId '${messageId}', but no messages were present in the rule metadata.`);\n                }\n\n                if (!messages[messageId]) {\n                    throw new TypeError(`context.report() called with a suggest option with a messageId '${messageId}' which is not present in the 'messages' config: ${JSON.stringify(messages, null, 2)}`);\n                }\n\n                if (suggestion.desc) {\n                    throw new TypeError(\"context.report() called with a suggest option that defines both a 'messageId' and an 'desc'. Please only pass one.\");\n                }\n            } else if (!suggestion.desc) {\n                throw new TypeError(\"context.report() called with a suggest option that doesn't have either a `desc` or `messageId`\");\n            }\n\n            if (typeof suggestion.fix !== \"function\") {\n                throw new TypeError(`context.report() called with a suggest option without a fix function. See: ${suggestion}`);\n            }\n        });\n    }\n}\n\n/**\n * Returns a function that converts the arguments of a `context.report` call from a rule into a reported\n * problem for the Node.js API.\n * @param {{ruleId: string, severity: number, sourceCode: SourceCode, messageIds: Object, disableFixes: boolean}} metadata Metadata for the reported problem\n * @param {SourceCode} sourceCode The `SourceCode` instance for the text being linted\n * @returns {function(...args): ReportInfo} Function that returns information about the report\n */\n\nmodule.exports = function createReportTranslator(metadata) {\n\n    /*\n     * `createReportTranslator` gets called once per enabled rule per file. It needs to be very performant.\n     * The report translator itself (i.e. the function that `createReportTranslator` returns) gets\n     * called every time a rule reports a problem, which happens much less frequently (usually, the vast\n     * majority of rules don't report any problems for a given file).\n     */\n    return (...args) => {\n        const descriptor = normalizeMultiArgReportCall(...args);\n        const messages = metadata.messageIds;\n\n        assertValidNodeInfo(descriptor);\n\n        let computedMessage;\n\n        if (descriptor.messageId) {\n            if (!messages) {\n                throw new TypeError(\"context.report() called with a messageId, but no messages were present in the rule metadata.\");\n            }\n            const id = descriptor.messageId;\n\n            if (descriptor.message) {\n                throw new TypeError(\"context.report() called with a message and a messageId. Please only pass one.\");\n            }\n            if (!messages || !Object.prototype.hasOwnProperty.call(messages, id)) {\n                throw new TypeError(`context.report() called with a messageId of '${id}' which is not present in the 'messages' config: ${JSON.stringify(messages, null, 2)}`);\n            }\n            computedMessage = messages[id];\n        } else if (descriptor.message) {\n            computedMessage = descriptor.message;\n        } else {\n            throw new TypeError(\"Missing `message` property in report() call; add a message that describes the linting problem.\");\n        }\n\n        validateSuggestions(descriptor.suggest, messages);\n\n        return createProblem({\n            ruleId: metadata.ruleId,\n            severity: metadata.severity,\n            node: descriptor.node,\n            message: interpolate(computedMessage, descriptor.data),\n            messageId: descriptor.messageId,\n            loc: normalizeReportLoc(descriptor),\n            fix: metadata.disableFixes ? null : normalizeFixes(descriptor, metadata.sourceCode),\n            suggestions: metadata.disableFixes ? [] : mapSuggestions(descriptor, metadata.sourceCode, messages)\n        });\n    };\n};\n/lib/rules/no-ternary.js\u0003r/**\n * @fileoverview Rule to flag use of ternary operators.\n * @author Ian Christian Myers\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow ternary operators\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-ternary\"\n        },\n\n        schema: [],\n\n        messages: {\n            noTernaryOperator: \"Ternary operator used.\"\n        }\n    },\n\n    create(context) {\n\n        return {\n\n            ConditionalExpression(node) {\n                context.report({ node, messageId: \"noTernaryOperator\" });\n            }\n\n        };\n\n    }\n};\n/lib/rules/no-plusplus.js\f`/**\n * @fileoverview Rule to flag use of unary increment and decrement operators.\n * @author Ian Christian Myers\n * @author Brody McKee (github.com/mrmckeb)\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\n/**\n * Determines whether the given node is the update node of a `ForStatement`.\n * @param {ASTNode} node The node to check.\n * @returns {boolean} `true` if the node is `ForStatement` update.\n */\nfunction isForStatementUpdate(node) {\n    const parent = node.parent;\n\n    return parent.type === \"ForStatement\" && parent.update === node;\n}\n\n/**\n * Determines whether the given node is considered to be a for loop \"afterthought\" by the logic of this rule.\n * In particular, it returns `true` if the given node is either:\n *   - The update node of a `ForStatement`: for (;; i++) {}\n *   - An operand of a sequence expression that is the update node: for (;; foo(), i++) {}\n *   - An operand of a sequence expression that is child of another sequence expression, etc.,\n *     up to the sequence expression that is the update node: for (;; foo(), (bar(), (baz(), i++))) {}\n * @param {ASTNode} node The node to check.\n * @returns {boolean} `true` if the node is a for loop afterthought.\n */\nfunction isForLoopAfterthought(node) {\n    const parent = node.parent;\n\n    if (parent.type === \"SequenceExpression\") {\n        return isForLoopAfterthought(parent);\n    }\n\n    return isForStatementUpdate(node);\n}\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow the unary operators `++` and `--`\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-plusplus\"\n        },\n\n        schema: [\n            {\n                type: \"object\",\n                properties: {\n                    allowForLoopAfterthoughts: {\n                        type: \"boolean\",\n                        default: false\n                    }\n                },\n                additionalProperties: false\n            }\n        ],\n\n        messages: {\n            unexpectedUnaryOp: \"Unary operator '{{operator}}' used.\"\n        }\n    },\n\n    create(context) {\n\n        const config = context.options[0];\n        let allowForLoopAfterthoughts = false;\n\n        if (typeof config === \"object\") {\n            allowForLoopAfterthoughts = config.allowForLoopAfterthoughts === true;\n        }\n\n        return {\n\n            UpdateExpression(node) {\n                if (allowForLoopAfterthoughts && isForLoopAfterthought(node)) {\n                    return;\n                }\n\n                context.report({\n                    node,\n                    messageId: \"unexpectedUnaryOp\",\n                    data: {\n                        operator: node.operator\n                    }\n                });\n            }\n\n        };\n\n    }\n};\n/lib/rules/no-new-require.js\u0004/**\n * @fileoverview Rule to disallow use of new operator with the `require` function\n * @author Wil Moore III\n * @deprecated in ESLint v7.0.0\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        deprecated: true,\n\n        replacedBy: [],\n\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow `new` operators with calls to `require`\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-new-require\"\n        },\n\n        schema: [],\n\n        messages: {\n            noNewRequire: \"Unexpected use of new with require.\"\n        }\n    },\n\n    create(context) {\n\n        return {\n\n            NewExpression(node) {\n                if (node.callee.type === \"Identifier\" && node.callee.name === \"require\") {\n                    context.report({\n                        node,\n                        messageId: \"noNewRequire\"\n                    });\n                }\n            }\n        };\n\n    }\n};\n\"/lib/rules/no-this-before-super.js'/**\n * @fileoverview A rule to disallow using `this`/`super` before `super()`.\n * @author Toru Nagashima\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\n/**\n * Checks whether or not a given node is a constructor.\n * @param {ASTNode} node A node to check. This node type is one of\n *   `Program`, `FunctionDeclaration`, `FunctionExpression`, and\n *   `ArrowFunctionExpression`.\n * @returns {boolean} `true` if the node is a constructor.\n */\nfunction isConstructorFunction(node) {\n    return (\n        node.type === \"FunctionExpression\" &&\n        node.parent.type === \"MethodDefinition\" &&\n        node.parent.kind === \"constructor\"\n    );\n}\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"problem\",\n\n        docs: {\n            description: \"disallow `this`/`super` before calling `super()` in constructors\",\n            recommended: true,\n            url: \"https://eslint.org/docs/rules/no-this-before-super\"\n        },\n\n        schema: [],\n\n        messages: {\n            noBeforeSuper: \"'{{kind}}' is not allowed before 'super()'.\"\n        }\n    },\n\n    create(context) {\n\n        /*\n         * Information for each constructor.\n         * - upper:      Information of the upper constructor.\n         * - hasExtends: A flag which shows whether the owner class has a valid\n         *   `extends` part.\n         * - scope:      The scope of the owner class.\n         * - codePath:   The code path of this constructor.\n         */\n        let funcInfo = null;\n\n        /*\n         * Information for each code path segment.\n         * Each key is the id of a code path segment.\n         * Each value is an object:\n         * - superCalled:  The flag which shows `super()` called in all code paths.\n         * - invalidNodes: The array of invalid ThisExpression and Super nodes.\n         */\n        let segInfoMap = Object.create(null);\n\n        /**\n         * Gets whether or not `super()` is called in a given code path segment.\n         * @param {CodePathSegment} segment A code path segment to get.\n         * @returns {boolean} `true` if `super()` is called.\n         */\n        function isCalled(segment) {\n            return !segment.reachable || segInfoMap[segment.id].superCalled;\n        }\n\n        /**\n         * Checks whether or not this is in a constructor.\n         * @returns {boolean} `true` if this is in a constructor.\n         */\n        function isInConstructorOfDerivedClass() {\n            return Boolean(funcInfo && funcInfo.isConstructor && funcInfo.hasExtends);\n        }\n\n        /**\n         * Checks whether or not this is before `super()` is called.\n         * @returns {boolean} `true` if this is before `super()` is called.\n         */\n        function isBeforeCallOfSuper() {\n            return (\n                isInConstructorOfDerivedClass() &&\n                !funcInfo.codePath.currentSegments.every(isCalled)\n            );\n        }\n\n        /**\n         * Sets a given node as invalid.\n         * @param {ASTNode} node A node to set as invalid. This is one of\n         *      a ThisExpression and a Super.\n         * @returns {void}\n         */\n        function setInvalid(node) {\n            const segments = funcInfo.codePath.currentSegments;\n\n            for (let i = 0; i < segments.length; ++i) {\n                const segment = segments[i];\n\n                if (segment.reachable) {\n                    segInfoMap[segment.id].invalidNodes.push(node);\n                }\n            }\n        }\n\n        /**\n         * Sets the current segment as `super` was called.\n         * @returns {void}\n         */\n        function setSuperCalled() {\n            const segments = funcInfo.codePath.currentSegments;\n\n            for (let i = 0; i < segments.length; ++i) {\n                const segment = segments[i];\n\n                if (segment.reachable) {\n                    segInfoMap[segment.id].superCalled = true;\n                }\n            }\n        }\n\n        return {\n\n            /**\n             * Adds information of a constructor into the stack.\n             * @param {CodePath} codePath A code path which was started.\n             * @param {ASTNode} node The current node.\n             * @returns {void}\n             */\n            onCodePathStart(codePath, node) {\n                if (isConstructorFunction(node)) {\n\n                    // Class > ClassBody > MethodDefinition > FunctionExpression\n                    const classNode = node.parent.parent.parent;\n\n                    funcInfo = {\n                        upper: funcInfo,\n                        isConstructor: true,\n                        hasExtends: Boolean(\n                            classNode.superClass &&\n                            !astUtils.isNullOrUndefined(classNode.superClass)\n                        ),\n                        codePath\n                    };\n                } else {\n                    funcInfo = {\n                        upper: funcInfo,\n                        isConstructor: false,\n                        hasExtends: false,\n                        codePath\n                    };\n                }\n            },\n\n            /**\n             * Removes the top of stack item.\n             *\n             * And this traverses all segments of this code path then reports every\n             * invalid node.\n             * @param {CodePath} codePath A code path which was ended.\n             * @returns {void}\n             */\n            onCodePathEnd(codePath) {\n                const isDerivedClass = funcInfo.hasExtends;\n\n                funcInfo = funcInfo.upper;\n                if (!isDerivedClass) {\n                    return;\n                }\n\n                codePath.traverseSegments((segment, controller) => {\n                    const info = segInfoMap[segment.id];\n\n                    for (let i = 0; i < info.invalidNodes.length; ++i) {\n                        const invalidNode = info.invalidNodes[i];\n\n                        context.report({\n                            messageId: \"noBeforeSuper\",\n                            node: invalidNode,\n                            data: {\n                                kind: invalidNode.type === \"Super\" ? \"super\" : \"this\"\n                            }\n                        });\n                    }\n\n                    if (info.superCalled) {\n                        controller.skip();\n                    }\n                });\n            },\n\n            /**\n             * Initialize information of a given code path segment.\n             * @param {CodePathSegment} segment A code path segment to initialize.\n             * @returns {void}\n             */\n            onCodePathSegmentStart(segment) {\n                if (!isInConstructorOfDerivedClass()) {\n                    return;\n                }\n\n                // Initialize info.\n                segInfoMap[segment.id] = {\n                    superCalled: (\n                        segment.prevSegments.length > 0 &&\n                        segment.prevSegments.every(isCalled)\n                    ),\n                    invalidNodes: []\n                };\n            },\n\n            /**\n             * Update information of the code path segment when a code path was\n             * looped.\n             * @param {CodePathSegment} fromSegment The code path segment of the\n             *      end of a loop.\n             * @param {CodePathSegment} toSegment A code path segment of the head\n             *      of a loop.\n             * @returns {void}\n             */\n            onCodePathSegmentLoop(fromSegment, toSegment) {\n                if (!isInConstructorOfDerivedClass()) {\n                    return;\n                }\n\n                // Update information inside of the loop.\n                funcInfo.codePath.traverseSegments(\n                    { first: toSegment, last: fromSegment },\n                    (segment, controller) => {\n                        const info = segInfoMap[segment.id];\n\n                        if (info.superCalled) {\n                            info.invalidNodes = [];\n                            controller.skip();\n                        } else if (\n                            segment.prevSegments.length > 0 &&\n                            segment.prevSegments.every(isCalled)\n                        ) {\n                            info.superCalled = true;\n                            info.invalidNodes = [];\n                        }\n                    }\n                );\n            },\n\n            /**\n             * Reports if this is before `super()`.\n             * @param {ASTNode} node A target node.\n             * @returns {void}\n             */\n            ThisExpression(node) {\n                if (isBeforeCallOfSuper()) {\n                    setInvalid(node);\n                }\n            },\n\n            /**\n             * Reports if this is before `super()`.\n             * @param {ASTNode} node A target node.\n             * @returns {void}\n             */\n            Super(node) {\n                if (!astUtils.isCallee(node) && isBeforeCallOfSuper()) {\n                    setInvalid(node);\n                }\n            },\n\n            /**\n             * Marks `super()` called.\n             * @param {ASTNode} node A target node.\n             * @returns {void}\n             */\n            \"CallExpression:exit\"(node) {\n                if (node.callee.type === \"Super\" && isBeforeCallOfSuper()) {\n                    setSuperCalled();\n                }\n            },\n\n            /**\n             * Resets state.\n             * @returns {void}\n             */\n            \"Program:exit\"() {\n                segInfoMap = Object.create(null);\n            }\n        };\n    }\n};\n/lib/shared/runtime-info.js\u0015/**\n * @fileoverview Utility to get information about the execution environment.\n * @author Kai Cataldo\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst path = require(\"path\");\nconst spawn = require(\"cross-spawn\");\nconst os = require(\"os\");\nconst log = require(\"../shared/logging\");\nconst packageJson = require(\"../../package.json\");\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\n/**\n * Generates and returns execution environment information.\n * @returns {string} A string that contains execution environment information.\n */\nfunction environment() {\n    const cache = new Map();\n\n    /**\n     * Checks if a path is a child of a directory.\n     * @param {string} parentPath The parent path to check.\n     * @param {string} childPath The path to check.\n     * @returns {boolean} Whether or not the given path is a child of a directory.\n     */\n    function isChildOfDirectory(parentPath, childPath) {\n        return !path.relative(parentPath, childPath).startsWith(\"..\");\n    }\n\n    /**\n     * Synchronously executes a shell command and formats the result.\n     * @param {string} cmd The command to execute.\n     * @param {Array} args The arguments to be executed with the command.\n     * @throws {Error} As may be collected by `cross-spawn.sync`.\n     * @returns {string} The version returned by the command.\n     */\n    function execCommand(cmd, args) {\n        const key = [cmd, ...args].join(\" \");\n\n        if (cache.has(key)) {\n            return cache.get(key);\n        }\n\n        const process = spawn.sync(cmd, args, { encoding: \"utf8\" });\n\n        if (process.error) {\n            throw process.error;\n        }\n\n        const result = process.stdout.trim();\n\n        cache.set(key, result);\n        return result;\n    }\n\n    /**\n     * Normalizes a version number.\n     * @param {string} versionStr The string to normalize.\n     * @returns {string} The normalized version number.\n     */\n    function normalizeVersionStr(versionStr) {\n        return versionStr.startsWith(\"v\") ? versionStr : `v${versionStr}`;\n    }\n\n    /**\n     * Gets bin version.\n     * @param {string} bin The bin to check.\n     * @throws {Error} As may be collected by `cross-spawn.sync`.\n     * @returns {string} The normalized version returned by the command.\n     */\n    function getBinVersion(bin) {\n        const binArgs = [\"--version\"];\n\n        try {\n            return normalizeVersionStr(execCommand(bin, binArgs));\n        } catch (e) {\n            log.error(`Error finding ${bin} version running the command \\`${bin} ${binArgs.join(\" \")}\\``);\n            throw e;\n        }\n    }\n\n    /**\n     * Gets installed npm package version.\n     * @param {string} pkg The package to check.\n     * @param {boolean} global Whether to check globally or not.\n     * @throws {Error} As may be collected by `cross-spawn.sync`.\n     * @returns {string} The normalized version returned by the command.\n     */\n    function getNpmPackageVersion(pkg, { global = false } = {}) {\n        const npmBinArgs = [\"bin\", \"-g\"];\n        const npmLsArgs = [\"ls\", \"--depth=0\", \"--json\", \"eslint\"];\n\n        if (global) {\n            npmLsArgs.push(\"-g\");\n        }\n\n        try {\n            const parsedStdout = JSON.parse(execCommand(\"npm\", npmLsArgs));\n\n            /*\n             * Checking globally returns an empty JSON object, while local checks\n             * include the name and version of the local project.\n             */\n            if (Object.keys(parsedStdout).length === 0 || !(parsedStdout.dependencies && parsedStdout.dependencies.eslint)) {\n                return \"Not found\";\n            }\n\n            const [, processBinPath] = process.argv;\n            let npmBinPath;\n\n            try {\n                npmBinPath = execCommand(\"npm\", npmBinArgs);\n            } catch (e) {\n                log.error(`Error finding npm binary path when running command \\`npm ${npmBinArgs.join(\" \")}\\``);\n                throw e;\n            }\n\n            const isGlobal = isChildOfDirectory(npmBinPath, processBinPath);\n            let pkgVersion = parsedStdout.dependencies.eslint.version;\n\n            if ((global && isGlobal) || (!global && !isGlobal)) {\n                pkgVersion += \" (Currently used)\";\n            }\n\n            return normalizeVersionStr(pkgVersion);\n        } catch (e) {\n            log.error(`Error finding ${pkg} version running the command \\`npm ${npmLsArgs.join(\" \")}\\``);\n            throw e;\n        }\n    }\n\n    return [\n        \"Environment Info:\",\n        \"\",\n        `Node version: ${getBinVersion(\"node\")}`,\n        `npm version: ${getBinVersion(\"npm\")}`,\n        `Local ESLint version: ${getNpmPackageVersion(\"eslint\", { global: false })}`,\n        `Global ESLint version: ${getNpmPackageVersion(\"eslint\", { global: true })}`,\n        `Operating System: ${os.platform()} ${os.release()}`\n    ].join(\"\\n\");\n}\n\n/**\n * Returns version of currently executing ESLint.\n * @returns {string} The version from the currently executing ESLint's package.json.\n */\nfunction version() {\n    return `v${packageJson.version}`;\n}\n\n//------------------------------------------------------------------------------\n// Public Interface\n//------------------------------------------------------------------------------\n\nmodule.exports = {\n    environment,\n    version\n};\n/lib/rules/utils/keywords.js\u0003/**\n * @fileoverview A shared list of ES3 keywords.\n * @author Josh Perez\n */\n\"use strict\";\n\nmodule.exports = [\n    \"abstract\",\n    \"boolean\",\n    \"break\",\n    \"byte\",\n    \"case\",\n    \"catch\",\n    \"char\",\n    \"class\",\n    \"const\",\n    \"continue\",\n    \"debugger\",\n    \"default\",\n    \"delete\",\n    \"do\",\n    \"double\",\n    \"else\",\n    \"enum\",\n    \"export\",\n    \"extends\",\n    \"false\",\n    \"final\",\n    \"finally\",\n    \"float\",\n    \"for\",\n    \"function\",\n    \"goto\",\n    \"if\",\n    \"implements\",\n    \"import\",\n    \"in\",\n    \"instanceof\",\n    \"int\",\n    \"interface\",\n    \"long\",\n    \"native\",\n    \"new\",\n    \"null\",\n    \"package\",\n    \"private\",\n    \"protected\",\n    \"public\",\n    \"return\",\n    \"short\",\n    \"static\",\n    \"super\",\n    \"switch\",\n    \"synchronized\",\n    \"this\",\n    \"throw\",\n    \"throws\",\n    \"transient\",\n    \"true\",\n    \"try\",\n    \"typeof\",\n    \"var\",\n    \"void\",\n    \"volatile\",\n    \"while\",\n    \"with\"\n];\n!/lib/rules/no-floating-decimal.js\t\\/**\n * @fileoverview Rule to flag use of a leading/trailing decimal point in a numeric literal\n * @author James Allardice\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow leading or trailing decimal points in numeric literals\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-floating-decimal\"\n        },\n\n        schema: [],\n        fixable: \"code\",\n        messages: {\n            leading: \"A leading decimal point can be confused with a dot.\",\n            trailing: \"A trailing decimal point can be confused with a dot.\"\n        }\n    },\n\n    create(context) {\n        const sourceCode = context.getSourceCode();\n\n        return {\n            Literal(node) {\n\n                if (typeof node.value === \"number\") {\n                    if (node.raw.startsWith(\".\")) {\n                        context.report({\n                            node,\n                            messageId: \"leading\",\n                            fix(fixer) {\n                                const tokenBefore = sourceCode.getTokenBefore(node);\n                                const needsSpaceBefore = tokenBefore &&\n                                    tokenBefore.range[1] === node.range[0] &&\n                                    !astUtils.canTokensBeAdjacent(tokenBefore, `0${node.raw}`);\n\n                                return fixer.insertTextBefore(node, needsSpaceBefore ? \" 0\" : \"0\");\n                            }\n                        });\n                    }\n                    if (node.raw.indexOf(\".\") === node.raw.length - 1) {\n                        context.report({\n                            node,\n                            messageId: \"trailing\",\n                            fix: fixer => fixer.insertTextAfter(node, \"0\")\n                        });\n                    }\n                }\n            }\n        };\n\n    }\n};\n/lib/linter/timing.js\u000fy/**\n * @fileoverview Tracks performance of individual rules.\n * @author Brandon Mills\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\n/* istanbul ignore next */\n/**\n * Align the string to left\n * @param {string} str string to evaluate\n * @param {int} len length of the string\n * @param {string} ch delimiter character\n * @returns {string} modified string\n * @private\n */\nfunction alignLeft(str, len, ch) {\n    return str + new Array(len - str.length + 1).join(ch || \" \");\n}\n\n/* istanbul ignore next */\n/**\n * Align the string to right\n * @param {string} str string to evaluate\n * @param {int} len length of the string\n * @param {string} ch delimiter character\n * @returns {string} modified string\n * @private\n */\nfunction alignRight(str, len, ch) {\n    return new Array(len - str.length + 1).join(ch || \" \") + str;\n}\n\n//------------------------------------------------------------------------------\n// Module definition\n//------------------------------------------------------------------------------\n\nconst enabled = !!process.env.TIMING;\n\nconst HEADERS = [\"Rule\", \"Time (ms)\", \"Relative\"];\nconst ALIGN = [alignLeft, alignRight, alignRight];\n\n/**\n * Decide how many rules to show in the output list.\n * @returns {number} the number of rules to show\n */\nfunction getListSize() {\n    const MINIMUM_SIZE = 10;\n\n    if (typeof process.env.TIMING !== \"string\") {\n        return MINIMUM_SIZE;\n    }\n\n    if (process.env.TIMING.toLowerCase() === \"all\") {\n        return Number.POSITIVE_INFINITY;\n    }\n\n    const TIMING_ENV_VAR_AS_INTEGER = Number.parseInt(process.env.TIMING, 10);\n\n    return TIMING_ENV_VAR_AS_INTEGER > 10 ? TIMING_ENV_VAR_AS_INTEGER : MINIMUM_SIZE;\n}\n\n/* istanbul ignore next */\n/**\n * display the data\n * @param {Object} data Data object to be displayed\n * @returns {void} prints modified string with console.log\n * @private\n */\nfunction display(data) {\n    let total = 0;\n    const rows = Object.keys(data)\n        .map(key => {\n            const time = data[key];\n\n            total += time;\n            return [key, time];\n        })\n        .sort((a, b) => b[1] - a[1])\n        .slice(0, getListSize());\n\n    rows.forEach(row => {\n        row.push(`${(row[1] * 100 / total).toFixed(1)}%`);\n        row[1] = row[1].toFixed(3);\n    });\n\n    rows.unshift(HEADERS);\n\n    const widths = [];\n\n    rows.forEach(row => {\n        const len = row.length;\n\n        for (let i = 0; i < len; i++) {\n            const n = row[i].length;\n\n            if (!widths[i] || n > widths[i]) {\n                widths[i] = n;\n            }\n        }\n    });\n\n    const table = rows.map(row => (\n        row\n            .map((cell, index) => ALIGN[index](cell, widths[index]))\n            .join(\" | \")\n    ));\n\n    table.splice(1, 0, widths.map((width, index) => {\n        const extraAlignment = index !== 0 && index !== widths.length - 1 ? 2 : 1;\n\n        return ALIGN[index](\":\", width + extraAlignment, \"-\");\n    }).join(\"|\"));\n\n    console.log(table.join(\"\\n\")); // eslint-disable-line no-console -- Debugging function\n}\n\n/* istanbul ignore next */\nmodule.exports = (function() {\n\n    const data = Object.create(null);\n\n    /**\n     * Time the run\n     * @param {any} key key from the data object\n     * @param {Function} fn function to be called\n     * @returns {Function} function to be executed\n     * @private\n     */\n    function time(key, fn) {\n        if (typeof data[key] === \"undefined\") {\n            data[key] = 0;\n        }\n\n        return function(...args) {\n            let t = process.hrtime();\n\n            fn(...args);\n            t = process.hrtime(t);\n            data[key] += t[0] * 1e3 + t[1] / 1e6;\n        };\n    }\n\n    if (enabled) {\n        process.on(\"exit\", () => {\n            display(data);\n        });\n    }\n\n    return {\n        time,\n        enabled,\n        getListSize\n    };\n\n}());\n/lib/rules/require-jsdoc.js\u000f\u0017/**\n * @fileoverview Rule to check for jsdoc presence.\n * @author Gyandeep Singh\n * @deprecated in ESLint v5.10.0\n */\n\"use strict\";\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"require JSDoc comments\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/require-jsdoc\"\n        },\n\n        schema: [\n            {\n                type: \"object\",\n                properties: {\n                    require: {\n                        type: \"object\",\n                        properties: {\n                            ClassDeclaration: {\n                                type: \"boolean\",\n                                default: false\n                            },\n                            MethodDefinition: {\n                                type: \"boolean\",\n                                default: false\n                            },\n                            FunctionDeclaration: {\n                                type: \"boolean\",\n                                default: true\n                            },\n                            ArrowFunctionExpression: {\n                                type: \"boolean\",\n                                default: false\n                            },\n                            FunctionExpression: {\n                                type: \"boolean\",\n                                default: false\n                            }\n                        },\n                        additionalProperties: false,\n                        default: {}\n                    }\n                },\n                additionalProperties: false\n            }\n        ],\n\n        deprecated: true,\n        replacedBy: [],\n\n        messages: {\n            missingJSDocComment: \"Missing JSDoc comment.\"\n        }\n    },\n\n    create(context) {\n        const source = context.getSourceCode();\n        const DEFAULT_OPTIONS = {\n            FunctionDeclaration: true,\n            MethodDefinition: false,\n            ClassDeclaration: false,\n            ArrowFunctionExpression: false,\n            FunctionExpression: false\n        };\n        const options = Object.assign(DEFAULT_OPTIONS, context.options[0] && context.options[0].require);\n\n        /**\n         * Report the error message\n         * @param {ASTNode} node node to report\n         * @returns {void}\n         */\n        function report(node) {\n            context.report({ node, messageId: \"missingJSDocComment\" });\n        }\n\n        /**\n         * Check if the jsdoc comment is present or not.\n         * @param {ASTNode} node node to examine\n         * @returns {void}\n         */\n        function checkJsDoc(node) {\n            const jsdocComment = source.getJSDocComment(node);\n\n            if (!jsdocComment) {\n                report(node);\n            }\n        }\n\n        return {\n            FunctionDeclaration(node) {\n                if (options.FunctionDeclaration) {\n                    checkJsDoc(node);\n                }\n            },\n            FunctionExpression(node) {\n                if (\n                    (options.MethodDefinition && node.parent.type === \"MethodDefinition\") ||\n                    (options.FunctionExpression && (node.parent.type === \"VariableDeclarator\" || (node.parent.type === \"Property\" && node === node.parent.value)))\n                ) {\n                    checkJsDoc(node);\n                }\n            },\n            ClassDeclaration(node) {\n                if (options.ClassDeclaration) {\n                    checkJsDoc(node);\n                }\n            },\n            ArrowFunctionExpression(node) {\n                if (options.ArrowFunctionExpression && node.parent.type === \"VariableDeclarator\") {\n                    checkJsDoc(node);\n                }\n            }\n        };\n    }\n};\n /lib/rules/symbol-description.js\u0007/**\n * @fileoverview Rule to enforce description with the `Symbol` object\n * @author Jarek Rencz\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"require symbol descriptions\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/symbol-description\"\n        },\n        fixable: null,\n        schema: [],\n        messages: {\n            expected: \"Expected Symbol to have a description.\"\n        }\n    },\n\n    create(context) {\n\n        /**\n         * Reports if node does not conform the rule in case rule is set to\n         * report missing description\n         * @param {ASTNode} node A CallExpression node to check.\n         * @returns {void}\n         */\n        function checkArgument(node) {\n            if (node.arguments.length === 0) {\n                context.report({\n                    node,\n                    messageId: \"expected\"\n                });\n            }\n        }\n\n        return {\n            \"Program:exit\"() {\n                const scope = context.getScope();\n                const variable = astUtils.getVariableByName(scope, \"Symbol\");\n\n                if (variable && variable.defs.length === 0) {\n                    variable.references.forEach(reference => {\n                        const node = reference.identifier;\n\n                        if (astUtils.isCallee(node)) {\n                            checkArgument(node.parent);\n                        }\n                    });\n                }\n            }\n        };\n\n    }\n};\n/lib/rules/keyword-spacing.js^t/**\n * @fileoverview Rule to enforce spacing before and after keywords.\n * @author Toru Nagashima\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\"),\n    keywords = require(\"./utils/keywords\");\n\n//------------------------------------------------------------------------------\n// Constants\n//------------------------------------------------------------------------------\n\nconst PREV_TOKEN = /^[)\\]}>]$/u;\nconst NEXT_TOKEN = /^(?:[([{<~!]|\\+\\+?|--?)$/u;\nconst PREV_TOKEN_M = /^[)\\]}>*]$/u;\nconst NEXT_TOKEN_M = /^[{*]$/u;\nconst TEMPLATE_OPEN_PAREN = /\\$\\{$/u;\nconst TEMPLATE_CLOSE_PAREN = /^\\}/u;\nconst CHECK_TYPE = /^(?:JSXElement|RegularExpression|String|Template|PrivateIdentifier)$/u;\nconst KEYS = keywords.concat([\"as\", \"async\", \"await\", \"from\", \"get\", \"let\", \"of\", \"set\", \"yield\"]);\n\n// check duplications.\n(function() {\n    KEYS.sort();\n    for (let i = 1; i < KEYS.length; ++i) {\n        if (KEYS[i] === KEYS[i - 1]) {\n            throw new Error(`Duplication was found in the keyword list: ${KEYS[i]}`);\n        }\n    }\n}());\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\n/**\n * Checks whether or not a given token is a \"Template\" token ends with \"${\".\n * @param {Token} token A token to check.\n * @returns {boolean} `true` if the token is a \"Template\" token ends with \"${\".\n */\nfunction isOpenParenOfTemplate(token) {\n    return token.type === \"Template\" && TEMPLATE_OPEN_PAREN.test(token.value);\n}\n\n/**\n * Checks whether or not a given token is a \"Template\" token starts with \"}\".\n * @param {Token} token A token to check.\n * @returns {boolean} `true` if the token is a \"Template\" token starts with \"}\".\n */\nfunction isCloseParenOfTemplate(token) {\n    return token.type === \"Template\" && TEMPLATE_CLOSE_PAREN.test(token.value);\n}\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"layout\",\n\n        docs: {\n            description: \"enforce consistent spacing before and after keywords\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/keyword-spacing\"\n        },\n\n        fixable: \"whitespace\",\n\n        schema: [\n            {\n                type: \"object\",\n                properties: {\n                    before: { type: \"boolean\", default: true },\n                    after: { type: \"boolean\", default: true },\n                    overrides: {\n                        type: \"object\",\n                        properties: KEYS.reduce((retv, key) => {\n                            retv[key] = {\n                                type: \"object\",\n                                properties: {\n                                    before: { type: \"boolean\" },\n                                    after: { type: \"boolean\" }\n                                },\n                                additionalProperties: false\n                            };\n                            return retv;\n                        }, {}),\n                        additionalProperties: false\n                    }\n                },\n                additionalProperties: false\n            }\n        ],\n        messages: {\n            expectedBefore: \"Expected space(s) before \\\"{{value}}\\\".\",\n            expectedAfter: \"Expected space(s) after \\\"{{value}}\\\".\",\n            unexpectedBefore: \"Unexpected space(s) before \\\"{{value}}\\\".\",\n            unexpectedAfter: \"Unexpected space(s) after \\\"{{value}}\\\".\"\n        }\n    },\n\n    create(context) {\n        const sourceCode = context.getSourceCode();\n\n        const tokensToIgnore = new WeakSet();\n\n        /**\n         * Reports a given token if there are not space(s) before the token.\n         * @param {Token} token A token to report.\n         * @param {RegExp} pattern A pattern of the previous token to check.\n         * @returns {void}\n         */\n        function expectSpaceBefore(token, pattern) {\n            const prevToken = sourceCode.getTokenBefore(token);\n\n            if (prevToken &&\n                (CHECK_TYPE.test(prevToken.type) || pattern.test(prevToken.value)) &&\n                !isOpenParenOfTemplate(prevToken) &&\n                !tokensToIgnore.has(prevToken) &&\n                astUtils.isTokenOnSameLine(prevToken, token) &&\n                !sourceCode.isSpaceBetweenTokens(prevToken, token)\n            ) {\n                context.report({\n                    loc: token.loc,\n                    messageId: \"expectedBefore\",\n                    data: token,\n                    fix(fixer) {\n                        return fixer.insertTextBefore(token, \" \");\n                    }\n                });\n            }\n        }\n\n        /**\n         * Reports a given token if there are space(s) before the token.\n         * @param {Token} token A token to report.\n         * @param {RegExp} pattern A pattern of the previous token to check.\n         * @returns {void}\n         */\n        function unexpectSpaceBefore(token, pattern) {\n            const prevToken = sourceCode.getTokenBefore(token);\n\n            if (prevToken &&\n                (CHECK_TYPE.test(prevToken.type) || pattern.test(prevToken.value)) &&\n                !isOpenParenOfTemplate(prevToken) &&\n                !tokensToIgnore.has(prevToken) &&\n                astUtils.isTokenOnSameLine(prevToken, token) &&\n                sourceCode.isSpaceBetweenTokens(prevToken, token)\n            ) {\n                context.report({\n                    loc: { start: prevToken.loc.end, end: token.loc.start },\n                    messageId: \"unexpectedBefore\",\n                    data: token,\n                    fix(fixer) {\n                        return fixer.removeRange([prevToken.range[1], token.range[0]]);\n                    }\n                });\n            }\n        }\n\n        /**\n         * Reports a given token if there are not space(s) after the token.\n         * @param {Token} token A token to report.\n         * @param {RegExp} pattern A pattern of the next token to check.\n         * @returns {void}\n         */\n        function expectSpaceAfter(token, pattern) {\n            const nextToken = sourceCode.getTokenAfter(token);\n\n            if (nextToken &&\n                (CHECK_TYPE.test(nextToken.type) || pattern.test(nextToken.value)) &&\n                !isCloseParenOfTemplate(nextToken) &&\n                !tokensToIgnore.has(nextToken) &&\n                astUtils.isTokenOnSameLine(token, nextToken) &&\n                !sourceCode.isSpaceBetweenTokens(token, nextToken)\n            ) {\n                context.report({\n                    loc: token.loc,\n                    messageId: \"expectedAfter\",\n                    data: token,\n                    fix(fixer) {\n                        return fixer.insertTextAfter(token, \" \");\n                    }\n                });\n            }\n        }\n\n        /**\n         * Reports a given token if there are space(s) after the token.\n         * @param {Token} token A token to report.\n         * @param {RegExp} pattern A pattern of the next token to check.\n         * @returns {void}\n         */\n        function unexpectSpaceAfter(token, pattern) {\n            const nextToken = sourceCode.getTokenAfter(token);\n\n            if (nextToken &&\n                (CHECK_TYPE.test(nextToken.type) || pattern.test(nextToken.value)) &&\n                !isCloseParenOfTemplate(nextToken) &&\n                !tokensToIgnore.has(nextToken) &&\n                astUtils.isTokenOnSameLine(token, nextToken) &&\n                sourceCode.isSpaceBetweenTokens(token, nextToken)\n            ) {\n\n                context.report({\n                    loc: { start: token.loc.end, end: nextToken.loc.start },\n                    messageId: \"unexpectedAfter\",\n                    data: token,\n                    fix(fixer) {\n                        return fixer.removeRange([token.range[1], nextToken.range[0]]);\n                    }\n                });\n            }\n        }\n\n        /**\n         * Parses the option object and determines check methods for each keyword.\n         * @param {Object|undefined} options The option object to parse.\n         * @returns {Object} - Normalized option object.\n         *      Keys are keywords (there are for every keyword).\n         *      Values are instances of `{\"before\": function, \"after\": function}`.\n         */\n        function parseOptions(options = {}) {\n            const before = options.before !== false;\n            const after = options.after !== false;\n            const defaultValue = {\n                before: before ? expectSpaceBefore : unexpectSpaceBefore,\n                after: after ? expectSpaceAfter : unexpectSpaceAfter\n            };\n            const overrides = (options && options.overrides) || {};\n            const retv = Object.create(null);\n\n            for (let i = 0; i < KEYS.length; ++i) {\n                const key = KEYS[i];\n                const override = overrides[key];\n\n                if (override) {\n                    const thisBefore = (\"before\" in override) ? override.before : before;\n                    const thisAfter = (\"after\" in override) ? override.after : after;\n\n                    retv[key] = {\n                        before: thisBefore ? expectSpaceBefore : unexpectSpaceBefore,\n                        after: thisAfter ? expectSpaceAfter : unexpectSpaceAfter\n                    };\n                } else {\n                    retv[key] = defaultValue;\n                }\n            }\n\n            return retv;\n        }\n\n        const checkMethodMap = parseOptions(context.options[0]);\n\n        /**\n         * Reports a given token if usage of spacing followed by the token is\n         * invalid.\n         * @param {Token} token A token to report.\n         * @param {RegExp} [pattern] Optional. A pattern of the previous\n         *      token to check.\n         * @returns {void}\n         */\n        function checkSpacingBefore(token, pattern) {\n            checkMethodMap[token.value].before(token, pattern || PREV_TOKEN);\n        }\n\n        /**\n         * Reports a given token if usage of spacing preceded by the token is\n         * invalid.\n         * @param {Token} token A token to report.\n         * @param {RegExp} [pattern] Optional. A pattern of the next\n         *      token to check.\n         * @returns {void}\n         */\n        function checkSpacingAfter(token, pattern) {\n            checkMethodMap[token.value].after(token, pattern || NEXT_TOKEN);\n        }\n\n        /**\n         * Reports a given token if usage of spacing around the token is invalid.\n         * @param {Token} token A token to report.\n         * @returns {void}\n         */\n        function checkSpacingAround(token) {\n            checkSpacingBefore(token);\n            checkSpacingAfter(token);\n        }\n\n        /**\n         * Reports the first token of a given node if the first token is a keyword\n         * and usage of spacing around the token is invalid.\n         * @param {ASTNode|null} node A node to report.\n         * @returns {void}\n         */\n        function checkSpacingAroundFirstToken(node) {\n            const firstToken = node && sourceCode.getFirstToken(node);\n\n            if (firstToken && firstToken.type === \"Keyword\") {\n                checkSpacingAround(firstToken);\n            }\n        }\n\n        /**\n         * Reports the first token of a given node if the first token is a keyword\n         * and usage of spacing followed by the token is invalid.\n         *\n         * This is used for unary operators (e.g. `typeof`), `function`, and `super`.\n         * Other rules are handling usage of spacing preceded by those keywords.\n         * @param {ASTNode|null} node A node to report.\n         * @returns {void}\n         */\n        function checkSpacingBeforeFirstToken(node) {\n            const firstToken = node && sourceCode.getFirstToken(node);\n\n            if (firstToken && firstToken.type === \"Keyword\") {\n                checkSpacingBefore(firstToken);\n            }\n        }\n\n        /**\n         * Reports the previous token of a given node if the token is a keyword and\n         * usage of spacing around the token is invalid.\n         * @param {ASTNode|null} node A node to report.\n         * @returns {void}\n         */\n        function checkSpacingAroundTokenBefore(node) {\n            if (node) {\n                const token = sourceCode.getTokenBefore(node, astUtils.isKeywordToken);\n\n                checkSpacingAround(token);\n            }\n        }\n\n        /**\n         * Reports `async` or `function` keywords of a given node if usage of\n         * spacing around those keywords is invalid.\n         * @param {ASTNode} node A node to report.\n         * @returns {void}\n         */\n        function checkSpacingForFunction(node) {\n            const firstToken = node && sourceCode.getFirstToken(node);\n\n            if (firstToken &&\n                ((firstToken.type === \"Keyword\" && firstToken.value === \"function\") ||\n                firstToken.value === \"async\")\n            ) {\n                checkSpacingBefore(firstToken);\n            }\n        }\n\n        /**\n         * Reports `class` and `extends` keywords of a given node if usage of\n         * spacing around those keywords is invalid.\n         * @param {ASTNode} node A node to report.\n         * @returns {void}\n         */\n        function checkSpacingForClass(node) {\n            checkSpacingAroundFirstToken(node);\n            checkSpacingAroundTokenBefore(node.superClass);\n        }\n\n        /**\n         * Reports `if` and `else` keywords of a given node if usage of spacing\n         * around those keywords is invalid.\n         * @param {ASTNode} node A node to report.\n         * @returns {void}\n         */\n        function checkSpacingForIfStatement(node) {\n            checkSpacingAroundFirstToken(node);\n            checkSpacingAroundTokenBefore(node.alternate);\n        }\n\n        /**\n         * Reports `try`, `catch`, and `finally` keywords of a given node if usage\n         * of spacing around those keywords is invalid.\n         * @param {ASTNode} node A node to report.\n         * @returns {void}\n         */\n        function checkSpacingForTryStatement(node) {\n            checkSpacingAroundFirstToken(node);\n            checkSpacingAroundFirstToken(node.handler);\n            checkSpacingAroundTokenBefore(node.finalizer);\n        }\n\n        /**\n         * Reports `do` and `while` keywords of a given node if usage of spacing\n         * around those keywords is invalid.\n         * @param {ASTNode} node A node to report.\n         * @returns {void}\n         */\n        function checkSpacingForDoWhileStatement(node) {\n            checkSpacingAroundFirstToken(node);\n            checkSpacingAroundTokenBefore(node.test);\n        }\n\n        /**\n         * Reports `for` and `in` keywords of a given node if usage of spacing\n         * around those keywords is invalid.\n         * @param {ASTNode} node A node to report.\n         * @returns {void}\n         */\n        function checkSpacingForForInStatement(node) {\n            checkSpacingAroundFirstToken(node);\n\n            const inToken = sourceCode.getTokenBefore(node.right, astUtils.isNotOpeningParenToken);\n            const previousToken = sourceCode.getTokenBefore(inToken);\n\n            if (previousToken.type !== \"PrivateIdentifier\") {\n                checkSpacingBefore(inToken);\n            }\n\n            checkSpacingAfter(inToken);\n        }\n\n        /**\n         * Reports `for` and `of` keywords of a given node if usage of spacing\n         * around those keywords is invalid.\n         * @param {ASTNode} node A node to report.\n         * @returns {void}\n         */\n        function checkSpacingForForOfStatement(node) {\n            if (node.await) {\n                checkSpacingBefore(sourceCode.getFirstToken(node, 0));\n                checkSpacingAfter(sourceCode.getFirstToken(node, 1));\n            } else {\n                checkSpacingAroundFirstToken(node);\n            }\n\n            const ofToken = sourceCode.getTokenBefore(node.right, astUtils.isNotOpeningParenToken);\n            const previousToken = sourceCode.getTokenBefore(ofToken);\n\n            if (previousToken.type !== \"PrivateIdentifier\") {\n                checkSpacingBefore(ofToken);\n            }\n\n            checkSpacingAfter(ofToken);\n        }\n\n        /**\n         * Reports `import`, `export`, `as`, and `from` keywords of a given node if\n         * usage of spacing around those keywords is invalid.\n         *\n         * This rule handles the `*` token in module declarations.\n         *\n         *     import*as A from \"./a\"; /*error Expected space(s) after \"import\".\n         *                               error Expected space(s) before \"as\".\n         * @param {ASTNode} node A node to report.\n         * @returns {void}\n         */\n        function checkSpacingForModuleDeclaration(node) {\n            const firstToken = sourceCode.getFirstToken(node);\n\n            checkSpacingBefore(firstToken, PREV_TOKEN_M);\n            checkSpacingAfter(firstToken, NEXT_TOKEN_M);\n\n            if (node.type === \"ExportDefaultDeclaration\") {\n                checkSpacingAround(sourceCode.getTokenAfter(firstToken));\n            }\n\n            if (node.type === \"ExportAllDeclaration\" && node.exported) {\n                const asToken = sourceCode.getTokenBefore(node.exported);\n\n                checkSpacingBefore(asToken, PREV_TOKEN_M);\n                checkSpacingAfter(asToken, NEXT_TOKEN_M);\n            }\n\n            if (node.source) {\n                const fromToken = sourceCode.getTokenBefore(node.source);\n\n                checkSpacingBefore(fromToken, PREV_TOKEN_M);\n                checkSpacingAfter(fromToken, NEXT_TOKEN_M);\n            }\n        }\n\n        /**\n         * Reports `as` keyword of a given node if usage of spacing around this\n         * keyword is invalid.\n         * @param {ASTNode} node An `ImportSpecifier` node to check.\n         * @returns {void}\n         */\n        function checkSpacingForImportSpecifier(node) {\n            if (node.imported.range[0] !== node.local.range[0]) {\n                const asToken = sourceCode.getTokenBefore(node.local);\n\n                checkSpacingBefore(asToken, PREV_TOKEN_M);\n            }\n        }\n\n        /**\n         * Reports `as` keyword of a given node if usage of spacing around this\n         * keyword is invalid.\n         * @param {ASTNode} node An `ExportSpecifier` node to check.\n         * @returns {void}\n         */\n        function checkSpacingForExportSpecifier(node) {\n            if (node.local.range[0] !== node.exported.range[0]) {\n                const asToken = sourceCode.getTokenBefore(node.exported);\n\n                checkSpacingBefore(asToken, PREV_TOKEN_M);\n                checkSpacingAfter(asToken, NEXT_TOKEN_M);\n            }\n        }\n\n        /**\n         * Reports `as` keyword of a given node if usage of spacing around this\n         * keyword is invalid.\n         * @param {ASTNode} node A node to report.\n         * @returns {void}\n         */\n        function checkSpacingForImportNamespaceSpecifier(node) {\n            const asToken = sourceCode.getFirstToken(node, 1);\n\n            checkSpacingBefore(asToken, PREV_TOKEN_M);\n        }\n\n        /**\n         * Reports `static`, `get`, and `set` keywords of a given node if usage of\n         * spacing around those keywords is invalid.\n         * @param {ASTNode} node A node to report.\n         * @throws {Error} If unable to find token get, set, or async beside method name.\n         * @returns {void}\n         */\n        function checkSpacingForProperty(node) {\n            if (node.static) {\n                checkSpacingAroundFirstToken(node);\n            }\n            if (node.kind === \"get\" ||\n                node.kind === \"set\" ||\n                (\n                    (node.method || node.type === \"MethodDefinition\") &&\n                    node.value.async\n                )\n            ) {\n                const token = sourceCode.getTokenBefore(\n                    node.key,\n                    tok => {\n                        switch (tok.value) {\n                            case \"get\":\n                            case \"set\":\n                            case \"async\":\n                                return true;\n                            default:\n                                return false;\n                        }\n                    }\n                );\n\n                if (!token) {\n                    throw new Error(\"Failed to find token get, set, or async beside method name\");\n                }\n\n\n                checkSpacingAround(token);\n            }\n        }\n\n        /**\n         * Reports `await` keyword of a given node if usage of spacing before\n         * this keyword is invalid.\n         * @param {ASTNode} node A node to report.\n         * @returns {void}\n         */\n        function checkSpacingForAwaitExpression(node) {\n            checkSpacingBefore(sourceCode.getFirstToken(node));\n        }\n\n        return {\n\n            // Statements\n            DebuggerStatement: checkSpacingAroundFirstToken,\n            WithStatement: checkSpacingAroundFirstToken,\n\n            // Statements - Control flow\n            BreakStatement: checkSpacingAroundFirstToken,\n            ContinueStatement: checkSpacingAroundFirstToken,\n            ReturnStatement: checkSpacingAroundFirstToken,\n            ThrowStatement: checkSpacingAroundFirstToken,\n            TryStatement: checkSpacingForTryStatement,\n\n            // Statements - Choice\n            IfStatement: checkSpacingForIfStatement,\n            SwitchStatement: checkSpacingAroundFirstToken,\n            SwitchCase: checkSpacingAroundFirstToken,\n\n            // Statements - Loops\n            DoWhileStatement: checkSpacingForDoWhileStatement,\n            ForInStatement: checkSpacingForForInStatement,\n            ForOfStatement: checkSpacingForForOfStatement,\n            ForStatement: checkSpacingAroundFirstToken,\n            WhileStatement: checkSpacingAroundFirstToken,\n\n            // Statements - Declarations\n            ClassDeclaration: checkSpacingForClass,\n            ExportNamedDeclaration: checkSpacingForModuleDeclaration,\n            ExportDefaultDeclaration: checkSpacingForModuleDeclaration,\n            ExportAllDeclaration: checkSpacingForModuleDeclaration,\n            FunctionDeclaration: checkSpacingForFunction,\n            ImportDeclaration: checkSpacingForModuleDeclaration,\n            VariableDeclaration: checkSpacingAroundFirstToken,\n\n            // Expressions\n            ArrowFunctionExpression: checkSpacingForFunction,\n            AwaitExpression: checkSpacingForAwaitExpression,\n            ClassExpression: checkSpacingForClass,\n            FunctionExpression: checkSpacingForFunction,\n            NewExpression: checkSpacingBeforeFirstToken,\n            Super: checkSpacingBeforeFirstToken,\n            ThisExpression: checkSpacingBeforeFirstToken,\n            UnaryExpression: checkSpacingBeforeFirstToken,\n            YieldExpression: checkSpacingBeforeFirstToken,\n\n            // Others\n            ImportSpecifier: checkSpacingForImportSpecifier,\n            ExportSpecifier: checkSpacingForExportSpecifier,\n            ImportNamespaceSpecifier: checkSpacingForImportNamespaceSpecifier,\n            MethodDefinition: checkSpacingForProperty,\n            PropertyDefinition: checkSpacingForProperty,\n            StaticBlock: checkSpacingAroundFirstToken,\n            Property: checkSpacingForProperty,\n\n            // To avoid conflicts with `space-infix-ops`, e.g. `a > this.b`\n            \"BinaryExpression[operator='>']\"(node) {\n                const operatorToken = sourceCode.getTokenBefore(node.right, astUtils.isNotOpeningParenToken);\n\n                tokensToIgnore.add(operatorToken);\n            }\n        };\n    }\n};\n/lib/shared/types.js!/**\n * @fileoverview Define common types for input completion.\n * @author Toru Nagashima <https://github.com/mysticatea>\n */\n\"use strict\";\n\n/** @type {any} */\nmodule.exports = {};\n\n/** @typedef {boolean | \"off\" | \"readable\" | \"readonly\" | \"writable\" | \"writeable\"} GlobalConf */\n/** @typedef {0 | 1 | 2 | \"off\" | \"warn\" | \"error\"} SeverityConf */\n/** @typedef {SeverityConf | [SeverityConf, ...any[]]} RuleConf */\n\n/**\n * @typedef {Object} EcmaFeatures\n * @property {boolean} [globalReturn] Enabling `return` statements at the top-level.\n * @property {boolean} [jsx] Enabling JSX syntax.\n * @property {boolean} [impliedStrict] Enabling strict mode always.\n */\n\n/**\n * @typedef {Object} ParserOptions\n * @property {EcmaFeatures} [ecmaFeatures] The optional features.\n * @property {3|5|6|7|8|9|10|11|12|13|2015|2016|2017|2018|2019|2020|2021|2022} [ecmaVersion] The ECMAScript version (or revision number).\n * @property {\"script\"|\"module\"} [sourceType] The source code type.\n * @property {boolean} [allowReserved] Allowing the use of reserved words as identifiers in ES3.\n */\n\n/**\n * @typedef {Object} LanguageOptions\n * @property {number|\"latest\"} [ecmaVersion] The ECMAScript version (or revision number).\n * @property {Record<string, GlobalConf>} [globals] The global variable settings.\n * @property {\"script\"|\"module\"|\"commonjs\"} [sourceType] The source code type.\n * @property {string|Object} [parser] The parser to use.\n * @property {Object} [parserOptions] The parser options to use.\n */\n\n/**\n * @typedef {Object} ConfigData\n * @property {Record<string, boolean>} [env] The environment settings.\n * @property {string | string[]} [extends] The path to other config files or the package name of shareable configs.\n * @property {Record<string, GlobalConf>} [globals] The global variable settings.\n * @property {string | string[]} [ignorePatterns] The glob patterns that ignore to lint.\n * @property {boolean} [noInlineConfig] The flag that disables directive comments.\n * @property {OverrideConfigData[]} [overrides] The override settings per kind of files.\n * @property {string} [parser] The path to a parser or the package name of a parser.\n * @property {ParserOptions} [parserOptions] The parser options.\n * @property {string[]} [plugins] The plugin specifiers.\n * @property {string} [processor] The processor specifier.\n * @property {boolean} [reportUnusedDisableDirectives] The flag to report unused `eslint-disable` comments.\n * @property {boolean} [root] The root flag.\n * @property {Record<string, RuleConf>} [rules] The rule settings.\n * @property {Object} [settings] The shared settings.\n */\n\n/**\n * @typedef {Object} OverrideConfigData\n * @property {Record<string, boolean>} [env] The environment settings.\n * @property {string | string[]} [excludedFiles] The glob patterns for excluded files.\n * @property {string | string[]} [extends] The path to other config files or the package name of shareable configs.\n * @property {string | string[]} files The glob patterns for target files.\n * @property {Record<string, GlobalConf>} [globals] The global variable settings.\n * @property {boolean} [noInlineConfig] The flag that disables directive comments.\n * @property {OverrideConfigData[]} [overrides] The override settings per kind of files.\n * @property {string} [parser] The path to a parser or the package name of a parser.\n * @property {ParserOptions} [parserOptions] The parser options.\n * @property {string[]} [plugins] The plugin specifiers.\n * @property {string} [processor] The processor specifier.\n * @property {boolean} [reportUnusedDisableDirectives] The flag to report unused `eslint-disable` comments.\n * @property {Record<string, RuleConf>} [rules] The rule settings.\n * @property {Object} [settings] The shared settings.\n */\n\n/**\n * @typedef {Object} ParseResult\n * @property {Object} ast The AST.\n * @property {ScopeManager} [scopeManager] The scope manager of the AST.\n * @property {Record<string, any>} [services] The services that the parser provides.\n * @property {Record<string, string[]>} [visitorKeys] The visitor keys of the AST.\n */\n\n/**\n * @typedef {Object} Parser\n * @property {(text:string, options:ParserOptions) => Object} parse The definition of global variables.\n * @property {(text:string, options:ParserOptions) => ParseResult} [parseForESLint] The parser options that will be enabled under this environment.\n */\n\n/**\n * @typedef {Object} Environment\n * @property {Record<string, GlobalConf>} [globals] The definition of global variables.\n * @property {ParserOptions} [parserOptions] The parser options that will be enabled under this environment.\n */\n\n/**\n * @typedef {Object} LintMessage\n * @property {number|undefined} column The 1-based column number.\n * @property {number} [endColumn] The 1-based column number of the end location.\n * @property {number} [endLine] The 1-based line number of the end location.\n * @property {boolean} fatal If `true` then this is a fatal error.\n * @property {{range:[number,number], text:string}} [fix] Information for autofix.\n * @property {number|undefined} line The 1-based line number.\n * @property {string} message The error message.\n * @property {string|null} ruleId The ID of the rule which makes this message.\n * @property {0|1|2} severity The severity of this message.\n * @property {Array<{desc?: string, messageId?: string, fix: {range: [number, number], text: string}}>} [suggestions] Information for suggestions.\n */\n\n/**\n * @typedef {Object} SuppressedLintMessage\n * @property {number|undefined} column The 1-based column number.\n * @property {number} [endColumn] The 1-based column number of the end location.\n * @property {number} [endLine] The 1-based line number of the end location.\n * @property {boolean} fatal If `true` then this is a fatal error.\n * @property {{range:[number,number], text:string}} [fix] Information for autofix.\n * @property {number|undefined} line The 1-based line number.\n * @property {string} message The error message.\n * @property {string|null} ruleId The ID of the rule which makes this message.\n * @property {0|1|2} severity The severity of this message.\n * @property {Array<{kind: string, justification: string}>} suppressions The suppression info.\n * @property {Array<{desc?: string, messageId?: string, fix: {range: [number, number], text: string}}>} [suggestions] Information for suggestions.\n */\n\n/**\n * @typedef {Object} SuggestionResult\n * @property {string} desc A short description.\n * @property {string} [messageId] Id referencing a message for the description.\n * @property {{ text: string, range: number[] }} fix fix result info\n */\n\n/**\n * @typedef {Object} Processor\n * @property {(text:string, filename:string) => Array<string | { text:string, filename:string }>} [preprocess] The function to extract code blocks.\n * @property {(messagesList:LintMessage[][], filename:string) => LintMessage[]} [postprocess] The function to merge messages.\n * @property {boolean} [supportsAutofix] If `true` then it means the processor supports autofix.\n */\n\n/**\n * @typedef {Object} RuleMetaDocs\n * @property {string} category The category of the rule.\n * @property {string} description The description of the rule.\n * @property {boolean} recommended If `true` then the rule is included in `eslint:recommended` preset.\n * @property {string} url The URL of the rule documentation.\n */\n\n/**\n * @typedef {Object} RuleMeta\n * @property {boolean} [deprecated] If `true` then the rule has been deprecated.\n * @property {RuleMetaDocs} docs The document information of the rule.\n * @property {\"code\"|\"whitespace\"} [fixable] The autofix type.\n * @property {Record<string,string>} [messages] The messages the rule reports.\n * @property {string[]} [replacedBy] The IDs of the alternative rules.\n * @property {Array|Object} schema The option schema of the rule.\n * @property {\"problem\"|\"suggestion\"|\"layout\"} type The rule type.\n */\n\n/**\n * @typedef {Object} Rule\n * @property {Function} create The factory of the rule.\n * @property {RuleMeta} meta The meta data of the rule.\n */\n\n/**\n * @typedef {Object} Plugin\n * @property {Record<string, ConfigData>} [configs] The definition of plugin configs.\n * @property {Record<string, Environment>} [environments] The definition of plugin environments.\n * @property {Record<string, Processor>} [processors] The definition of plugin processors.\n * @property {Record<string, Function | Rule>} [rules] The definition of plugin rules.\n */\n\n/**\n * Information of deprecated rules.\n * @typedef {Object} DeprecatedRuleInfo\n * @property {string} ruleId The rule ID.\n * @property {string[]} replacedBy The rule IDs that replace this deprecated rule.\n */\n/lib/rules/valid-jsdoc.jsPS/**\n * @fileoverview Validates JSDoc comments are syntactically correct\n * @author Nicholas C. Zakas\n * @deprecated in ESLint v5.10.0\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst doctrine = require(\"doctrine\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"enforce valid JSDoc comments\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/valid-jsdoc\"\n        },\n\n        schema: [\n            {\n                type: \"object\",\n                properties: {\n                    prefer: {\n                        type: \"object\",\n                        additionalProperties: {\n                            type: \"string\"\n                        }\n                    },\n                    preferType: {\n                        type: \"object\",\n                        additionalProperties: {\n                            type: \"string\"\n                        }\n                    },\n                    requireReturn: {\n                        type: \"boolean\",\n                        default: true\n                    },\n                    requireParamDescription: {\n                        type: \"boolean\",\n                        default: true\n                    },\n                    requireReturnDescription: {\n                        type: \"boolean\",\n                        default: true\n                    },\n                    matchDescription: {\n                        type: \"string\"\n                    },\n                    requireReturnType: {\n                        type: \"boolean\",\n                        default: true\n                    },\n                    requireParamType: {\n                        type: \"boolean\",\n                        default: true\n                    }\n                },\n                additionalProperties: false\n            }\n        ],\n\n        fixable: \"code\",\n        messages: {\n            unexpectedTag: \"Unexpected @{{title}} tag; function has no return statement.\",\n            expected: \"Expected JSDoc for '{{name}}' but found '{{jsdocName}}'.\",\n            use: \"Use @{{name}} instead.\",\n            useType: \"Use '{{expectedTypeName}}' instead of '{{currentTypeName}}'.\",\n            syntaxError: \"JSDoc syntax error.\",\n            missingBrace: \"JSDoc type missing brace.\",\n            missingParamDesc: \"Missing JSDoc parameter description for '{{name}}'.\",\n            missingParamType: \"Missing JSDoc parameter type for '{{name}}'.\",\n            missingReturnType: \"Missing JSDoc return type.\",\n            missingReturnDesc: \"Missing JSDoc return description.\",\n            missingReturn: \"Missing JSDoc @{{returns}} for function.\",\n            missingParam: \"Missing JSDoc for parameter '{{name}}'.\",\n            duplicateParam: \"Duplicate JSDoc parameter '{{name}}'.\",\n            unsatisfiedDesc: \"JSDoc description does not satisfy the regex pattern.\"\n        },\n\n        deprecated: true,\n        replacedBy: []\n    },\n\n    create(context) {\n\n        const options = context.options[0] || {},\n            prefer = options.prefer || {},\n            sourceCode = context.getSourceCode(),\n\n            // these both default to true, so you have to explicitly make them false\n            requireReturn = options.requireReturn !== false,\n            requireParamDescription = options.requireParamDescription !== false,\n            requireReturnDescription = options.requireReturnDescription !== false,\n            requireReturnType = options.requireReturnType !== false,\n            requireParamType = options.requireParamType !== false,\n            preferType = options.preferType || {},\n            checkPreferType = Object.keys(preferType).length !== 0;\n\n        //--------------------------------------------------------------------------\n        // Helpers\n        //--------------------------------------------------------------------------\n\n        // Using a stack to store if a function returns or not (handling nested functions)\n        const fns = [];\n\n        /**\n         * Check if node type is a Class\n         * @param {ASTNode} node node to check.\n         * @returns {boolean} True is its a class\n         * @private\n         */\n        function isTypeClass(node) {\n            return node.type === \"ClassExpression\" || node.type === \"ClassDeclaration\";\n        }\n\n        /**\n         * When parsing a new function, store it in our function stack.\n         * @param {ASTNode} node A function node to check.\n         * @returns {void}\n         * @private\n         */\n        function startFunction(node) {\n            fns.push({\n                returnPresent: (node.type === \"ArrowFunctionExpression\" && node.body.type !== \"BlockStatement\") ||\n                    isTypeClass(node) || node.async\n            });\n        }\n\n        /**\n         * Indicate that return has been found in the current function.\n         * @param {ASTNode} node The return node.\n         * @returns {void}\n         * @private\n         */\n        function addReturn(node) {\n            const functionState = fns[fns.length - 1];\n\n            if (functionState && node.argument !== null) {\n                functionState.returnPresent = true;\n            }\n        }\n\n        /**\n         * Check if return tag type is void or undefined\n         * @param {Object} tag JSDoc tag\n         * @returns {boolean} True if its of type void or undefined\n         * @private\n         */\n        function isValidReturnType(tag) {\n            return tag.type === null || tag.type.name === \"void\" || tag.type.type === \"UndefinedLiteral\";\n        }\n\n        /**\n         * Check if type should be validated based on some exceptions\n         * @param {Object} type JSDoc tag\n         * @returns {boolean} True if it can be validated\n         * @private\n         */\n        function canTypeBeValidated(type) {\n            return type !== \"UndefinedLiteral\" && // {undefined} as there is no name property available.\n                   type !== \"NullLiteral\" && // {null}\n                   type !== \"NullableLiteral\" && // {?}\n                   type !== \"FunctionType\" && // {function(a)}\n                   type !== \"AllLiteral\"; // {*}\n        }\n\n        /**\n         * Extract the current and expected type based on the input type object\n         * @param {Object} type JSDoc tag\n         * @returns {{currentType: Doctrine.Type, expectedTypeName: string}} The current type annotation and\n         * the expected name of the annotation\n         * @private\n         */\n        function getCurrentExpectedTypes(type) {\n            let currentType;\n\n            if (type.name) {\n                currentType = type;\n            } else if (type.expression) {\n                currentType = type.expression;\n            }\n\n            return {\n                currentType,\n                expectedTypeName: currentType && preferType[currentType.name]\n            };\n        }\n\n        /**\n         * Gets the location of a JSDoc node in a file\n         * @param {Token} jsdocComment The comment that this node is parsed from\n         * @param {{range: number[]}} parsedJsdocNode A tag or other node which was parsed from this comment\n         * @returns {{start: SourceLocation, end: SourceLocation}} The 0-based source location for the tag\n         */\n        function getAbsoluteRange(jsdocComment, parsedJsdocNode) {\n            return {\n                start: sourceCode.getLocFromIndex(jsdocComment.range[0] + 2 + parsedJsdocNode.range[0]),\n                end: sourceCode.getLocFromIndex(jsdocComment.range[0] + 2 + parsedJsdocNode.range[1])\n            };\n        }\n\n        /**\n         * Validate type for a given JSDoc node\n         * @param {Object} jsdocNode JSDoc node\n         * @param {Object} type JSDoc tag\n         * @returns {void}\n         * @private\n         */\n        function validateType(jsdocNode, type) {\n            if (!type || !canTypeBeValidated(type.type)) {\n                return;\n            }\n\n            const typesToCheck = [];\n            let elements = [];\n\n            switch (type.type) {\n                case \"TypeApplication\": // {Array.<String>}\n                    elements = type.applications[0].type === \"UnionType\" ? type.applications[0].elements : type.applications;\n                    typesToCheck.push(getCurrentExpectedTypes(type));\n                    break;\n                case \"RecordType\": // {{20:String}}\n                    elements = type.fields;\n                    break;\n                case \"UnionType\": // {String|number|Test}\n                case \"ArrayType\": // {[String, number, Test]}\n                    elements = type.elements;\n                    break;\n                case \"FieldType\": // Array.<{count: number, votes: number}>\n                    if (type.value) {\n                        typesToCheck.push(getCurrentExpectedTypes(type.value));\n                    }\n                    break;\n                default:\n                    typesToCheck.push(getCurrentExpectedTypes(type));\n            }\n\n            elements.forEach(validateType.bind(null, jsdocNode));\n\n            typesToCheck.forEach(typeToCheck => {\n                if (typeToCheck.expectedTypeName &&\n                    typeToCheck.expectedTypeName !== typeToCheck.currentType.name) {\n                    context.report({\n                        node: jsdocNode,\n                        messageId: \"useType\",\n                        loc: getAbsoluteRange(jsdocNode, typeToCheck.currentType),\n                        data: {\n                            currentTypeName: typeToCheck.currentType.name,\n                            expectedTypeName: typeToCheck.expectedTypeName\n                        },\n                        fix(fixer) {\n                            return fixer.replaceTextRange(\n                                typeToCheck.currentType.range.map(indexInComment => jsdocNode.range[0] + 2 + indexInComment),\n                                typeToCheck.expectedTypeName\n                            );\n                        }\n                    });\n                }\n            });\n        }\n\n        /**\n         * Validate the JSDoc node and output warnings if anything is wrong.\n         * @param {ASTNode} node The AST node to check.\n         * @returns {void}\n         * @private\n         */\n        function checkJSDoc(node) {\n            const jsdocNode = sourceCode.getJSDocComment(node),\n                functionData = fns.pop(),\n                paramTagsByName = Object.create(null),\n                paramTags = [];\n            let hasReturns = false,\n                returnsTag,\n                hasConstructor = false,\n                isInterface = false,\n                isOverride = false,\n                isAbstract = false;\n\n            // make sure only to validate JSDoc comments\n            if (jsdocNode) {\n                let jsdoc;\n\n                try {\n                    jsdoc = doctrine.parse(jsdocNode.value, {\n                        strict: true,\n                        unwrap: true,\n                        sloppy: true,\n                        range: true\n                    });\n                } catch (ex) {\n\n                    if (/braces/iu.test(ex.message)) {\n                        context.report({ node: jsdocNode, messageId: \"missingBrace\" });\n                    } else {\n                        context.report({ node: jsdocNode, messageId: \"syntaxError\" });\n                    }\n\n                    return;\n                }\n\n                jsdoc.tags.forEach(tag => {\n\n                    switch (tag.title.toLowerCase()) {\n\n                        case \"param\":\n                        case \"arg\":\n                        case \"argument\":\n                            paramTags.push(tag);\n                            break;\n\n                        case \"return\":\n                        case \"returns\":\n                            hasReturns = true;\n                            returnsTag = tag;\n                            break;\n\n                        case \"constructor\":\n                        case \"class\":\n                            hasConstructor = true;\n                            break;\n\n                        case \"override\":\n                        case \"inheritdoc\":\n                            isOverride = true;\n                            break;\n\n                        case \"abstract\":\n                        case \"virtual\":\n                            isAbstract = true;\n                            break;\n\n                        case \"interface\":\n                            isInterface = true;\n                            break;\n\n                        // no default\n                    }\n\n                    // check tag preferences\n                    if (Object.prototype.hasOwnProperty.call(prefer, tag.title) && tag.title !== prefer[tag.title]) {\n                        const entireTagRange = getAbsoluteRange(jsdocNode, tag);\n\n                        context.report({\n                            node: jsdocNode,\n                            messageId: \"use\",\n                            loc: {\n                                start: entireTagRange.start,\n                                end: {\n                                    line: entireTagRange.start.line,\n                                    column: entireTagRange.start.column + `@${tag.title}`.length\n                                }\n                            },\n                            data: { name: prefer[tag.title] },\n                            fix(fixer) {\n                                return fixer.replaceTextRange(\n                                    [\n                                        jsdocNode.range[0] + tag.range[0] + 3,\n                                        jsdocNode.range[0] + tag.range[0] + tag.title.length + 3\n                                    ],\n                                    prefer[tag.title]\n                                );\n                            }\n                        });\n                    }\n\n                    // validate the types\n                    if (checkPreferType && tag.type) {\n                        validateType(jsdocNode, tag.type);\n                    }\n                });\n\n                paramTags.forEach(param => {\n                    if (requireParamType && !param.type) {\n                        context.report({\n                            node: jsdocNode,\n                            messageId: \"missingParamType\",\n                            loc: getAbsoluteRange(jsdocNode, param),\n                            data: { name: param.name }\n                        });\n                    }\n                    if (!param.description && requireParamDescription) {\n                        context.report({\n                            node: jsdocNode,\n                            messageId: \"missingParamDesc\",\n                            loc: getAbsoluteRange(jsdocNode, param),\n                            data: { name: param.name }\n                        });\n                    }\n                    if (paramTagsByName[param.name]) {\n                        context.report({\n                            node: jsdocNode,\n                            messageId: \"duplicateParam\",\n                            loc: getAbsoluteRange(jsdocNode, param),\n                            data: { name: param.name }\n                        });\n                    } else if (param.name.indexOf(\".\") === -1) {\n                        paramTagsByName[param.name] = param;\n                    }\n                });\n\n                if (hasReturns) {\n                    if (!requireReturn && !functionData.returnPresent && (returnsTag.type === null || !isValidReturnType(returnsTag)) && !isAbstract) {\n                        context.report({\n                            node: jsdocNode,\n                            messageId: \"unexpectedTag\",\n                            loc: getAbsoluteRange(jsdocNode, returnsTag),\n                            data: {\n                                title: returnsTag.title\n                            }\n                        });\n                    } else {\n                        if (requireReturnType && !returnsTag.type) {\n                            context.report({ node: jsdocNode, messageId: \"missingReturnType\" });\n                        }\n\n                        if (!isValidReturnType(returnsTag) && !returnsTag.description && requireReturnDescription) {\n                            context.report({ node: jsdocNode, messageId: \"missingReturnDesc\" });\n                        }\n                    }\n                }\n\n                // check for functions missing @returns\n                if (!isOverride && !hasReturns && !hasConstructor && !isInterface &&\n                    node.parent.kind !== \"get\" && node.parent.kind !== \"constructor\" &&\n                    node.parent.kind !== \"set\" && !isTypeClass(node)) {\n                    if (requireReturn || (functionData.returnPresent && !node.async)) {\n                        context.report({\n                            node: jsdocNode,\n                            messageId: \"missingReturn\",\n                            data: {\n                                returns: prefer.returns || \"returns\"\n                            }\n                        });\n                    }\n                }\n\n                // check the parameters\n                const jsdocParamNames = Object.keys(paramTagsByName);\n\n                if (node.params) {\n                    node.params.forEach((param, paramsIndex) => {\n                        const bindingParam = param.type === \"AssignmentPattern\"\n                            ? param.left\n                            : param;\n\n                        // TODO(nzakas): Figure out logical things to do with destructured, default, rest params\n                        if (bindingParam.type === \"Identifier\") {\n                            const name = bindingParam.name;\n\n                            if (jsdocParamNames[paramsIndex] && (name !== jsdocParamNames[paramsIndex])) {\n                                context.report({\n                                    node: jsdocNode,\n                                    messageId: \"expected\",\n                                    loc: getAbsoluteRange(jsdocNode, paramTagsByName[jsdocParamNames[paramsIndex]]),\n                                    data: {\n                                        name,\n                                        jsdocName: jsdocParamNames[paramsIndex]\n                                    }\n                                });\n                            } else if (!paramTagsByName[name] && !isOverride) {\n                                context.report({\n                                    node: jsdocNode,\n                                    messageId: \"missingParam\",\n                                    data: {\n                                        name\n                                    }\n                                });\n                            }\n                        }\n                    });\n                }\n\n                if (options.matchDescription) {\n                    const regex = new RegExp(options.matchDescription, \"u\");\n\n                    if (!regex.test(jsdoc.description)) {\n                        context.report({ node: jsdocNode, messageId: \"unsatisfiedDesc\" });\n                    }\n                }\n\n            }\n\n        }\n\n        //--------------------------------------------------------------------------\n        // Public\n        //--------------------------------------------------------------------------\n\n        return {\n            ArrowFunctionExpression: startFunction,\n            FunctionExpression: startFunction,\n            FunctionDeclaration: startFunction,\n            ClassExpression: startFunction,\n            ClassDeclaration: startFunction,\n            \"ArrowFunctionExpression:exit\": checkJSDoc,\n            \"FunctionExpression:exit\": checkJSDoc,\n            \"FunctionDeclaration:exit\": checkJSDoc,\n            \"ClassExpression:exit\": checkJSDoc,\n            \"ClassDeclaration:exit\": checkJSDoc,\n            ReturnStatement: addReturn\n        };\n\n    }\n};\n#/lib/rules/no-buffer-constructor.js\u0005/**\n * @fileoverview disallow use of the Buffer() constructor\n * @author Teddy Katz\n * @deprecated in ESLint v7.0.0\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        deprecated: true,\n\n        replacedBy: [],\n\n        type: \"problem\",\n\n        docs: {\n            description: \"disallow use of the `Buffer()` constructor\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-buffer-constructor\"\n        },\n\n        schema: [],\n\n        messages: {\n            deprecated: \"{{expr}} is deprecated. Use Buffer.from(), Buffer.alloc(), or Buffer.allocUnsafe() instead.\"\n        }\n    },\n\n    create(context) {\n\n        //----------------------------------------------------------------------\n        // Public\n        //----------------------------------------------------------------------\n\n        return {\n            \"CallExpression[callee.name='Buffer'], NewExpression[callee.name='Buffer']\"(node) {\n                context.report({\n                    node,\n                    messageId: \"deprecated\",\n                    data: { expr: node.type === \"CallExpression\" ? \"Buffer()\" : \"new Buffer()\" }\n                });\n            }\n        };\n    }\n};\n/lib/rules/no-lonely-if.js\u000e/**\n * @fileoverview Rule to disallow if as the only statement in an else block\n * @author Brandon Mills\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow `if` statements as the only statement in `else` blocks\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-lonely-if\"\n        },\n\n        schema: [],\n        fixable: \"code\",\n\n        messages: {\n            unexpectedLonelyIf: \"Unexpected if as the only statement in an else block.\"\n        }\n    },\n\n    create(context) {\n        const sourceCode = context.getSourceCode();\n\n        return {\n            IfStatement(node) {\n                const ancestors = context.getAncestors(),\n                    parent = ancestors.pop(),\n                    grandparent = ancestors.pop();\n\n                if (parent && parent.type === \"BlockStatement\" &&\n                        parent.body.length === 1 && grandparent &&\n                        grandparent.type === \"IfStatement\" &&\n                        parent === grandparent.alternate) {\n                    context.report({\n                        node,\n                        messageId: \"unexpectedLonelyIf\",\n                        fix(fixer) {\n                            const openingElseCurly = sourceCode.getFirstToken(parent);\n                            const closingElseCurly = sourceCode.getLastToken(parent);\n                            const elseKeyword = sourceCode.getTokenBefore(openingElseCurly);\n                            const tokenAfterElseBlock = sourceCode.getTokenAfter(closingElseCurly);\n                            const lastIfToken = sourceCode.getLastToken(node.consequent);\n                            const sourceText = sourceCode.getText();\n\n                            if (sourceText.slice(openingElseCurly.range[1],\n                                node.range[0]).trim() || sourceText.slice(node.range[1], closingElseCurly.range[0]).trim()) {\n\n                                // Don't fix if there are any non-whitespace characters interfering (e.g. comments)\n                                return null;\n                            }\n\n                            if (\n                                node.consequent.type !== \"BlockStatement\" && lastIfToken.value !== \";\" && tokenAfterElseBlock &&\n                                (\n                                    node.consequent.loc.end.line === tokenAfterElseBlock.loc.start.line ||\n                                    /^[([/+`-]/u.test(tokenAfterElseBlock.value) ||\n                                    lastIfToken.value === \"++\" ||\n                                    lastIfToken.value === \"--\"\n                                )\n                            ) {\n\n                                /*\n                                 * If the `if` statement has no block, and is not followed by a semicolon, make sure that fixing\n                                 * the issue would not change semantics due to ASI. If this would happen, don't do a fix.\n                                 */\n                                return null;\n                            }\n\n                            return fixer.replaceTextRange(\n                                [openingElseCurly.range[0], closingElseCurly.range[1]],\n                                (elseKeyword.range[1] === openingElseCurly.range[0] ? \" \" : \"\") + sourceCode.getText(node)\n                            );\n                        }\n                    });\n                }\n            }\n        };\n\n    }\n};\n/conf/globals.js\n\t/**\n * @fileoverview Globals for ecmaVersion/sourceType\n * @author Nicholas C. Zakas\n */\n\n\"use strict\";\n\n//-----------------------------------------------------------------------------\n// Globals\n//-----------------------------------------------------------------------------\n\nconst commonjs = {\n    exports: true,\n    global: false,\n    module: false,\n    require: false\n};\n\nconst es3 = {\n    Array: false,\n    Boolean: false,\n    constructor: false,\n    Date: false,\n    decodeURI: false,\n    decodeURIComponent: false,\n    encodeURI: false,\n    encodeURIComponent: false,\n    Error: false,\n    escape: false,\n    eval: false,\n    EvalError: false,\n    Function: false,\n    hasOwnProperty: false,\n    Infinity: false,\n    isFinite: false,\n    isNaN: false,\n    isPrototypeOf: false,\n    Math: false,\n    NaN: false,\n    Number: false,\n    Object: false,\n    parseFloat: false,\n    parseInt: false,\n    propertyIsEnumerable: false,\n    RangeError: false,\n    ReferenceError: false,\n    RegExp: false,\n    String: false,\n    SyntaxError: false,\n    toLocaleString: false,\n    toString: false,\n    TypeError: false,\n    undefined: false,\n    unescape: false,\n    URIError: false,\n    valueOf: false\n};\n\nconst es5 = {\n    ...es3,\n    JSON: false\n};\n\nconst es2015 = {\n    ...es5,\n    ArrayBuffer: false,\n    DataView: false,\n    Float32Array: false,\n    Float64Array: false,\n    Int16Array: false,\n    Int32Array: false,\n    Int8Array: false,\n    Map: false,\n    Promise: false,\n    Proxy: false,\n    Reflect: false,\n    Set: false,\n    Symbol: false,\n    Uint16Array: false,\n    Uint32Array: false,\n    Uint8Array: false,\n    Uint8ClampedArray: false,\n    WeakMap: false,\n    WeakSet: false\n};\n\n// no new globals in ES2016\nconst es2016 = {\n    ...es2015\n};\n\nconst es2017 = {\n    ...es2016,\n    Atomics: false,\n    SharedArrayBuffer: false\n};\n\n// no new globals in ES2018\nconst es2018 = {\n    ...es2017\n};\n\n// no new globals in ES2019\nconst es2019 = {\n    ...es2018\n};\n\nconst es2020 = {\n    ...es2019,\n    BigInt: false,\n    BigInt64Array: false,\n    BigUint64Array: false,\n    globalThis: false\n};\n\nconst es2021 = {\n    ...es2020,\n    AggregateError: false,\n    FinalizationRegistry: false,\n    WeakRef: false\n};\n\nconst es2022 = {\n    ...es2021\n};\n\n\n//-----------------------------------------------------------------------------\n// Exports\n//-----------------------------------------------------------------------------\n\nmodule.exports = {\n    commonjs,\n    es3,\n    es5,\n    es2015,\n    es2016,\n    es2017,\n    es2018,\n    es2019,\n    es2020,\n    es2021,\n    es2022\n};\n/lib/rules/no-class-assign.js\u0006/**\n * @fileoverview A rule to disallow modifying variables of class declarations\n * @author Toru Nagashima\n */\n\n\"use strict\";\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"problem\",\n\n        docs: {\n            description: \"disallow reassigning class members\",\n            recommended: true,\n            url: \"https://eslint.org/docs/rules/no-class-assign\"\n        },\n\n        schema: [],\n\n        messages: {\n            class: \"'{{name}}' is a class.\"\n        }\n    },\n\n    create(context) {\n\n        /**\n         * Finds and reports references that are non initializer and writable.\n         * @param {Variable} variable A variable to check.\n         * @returns {void}\n         */\n        function checkVariable(variable) {\n            astUtils.getModifyingReferences(variable.references).forEach(reference => {\n                context.report({ node: reference.identifier, messageId: \"class\", data: { name: reference.identifier.name } });\n\n            });\n        }\n\n        /**\n         * Finds and reports references that are non initializer and writable.\n         * @param {ASTNode} node A ClassDeclaration/ClassExpression node to check.\n         * @returns {void}\n         */\n        function checkForClass(node) {\n            context.getDeclaredVariables(node).forEach(checkVariable);\n        }\n\n        return {\n            ClassDeclaration: checkForClass,\n            ClassExpression: checkForClass\n        };\n\n    }\n};\n/lib/rules/prefer-template.js,/**\n * @fileoverview A rule to suggest using template literals instead of string concatenation.\n * @author Toru Nagashima\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\n/**\n * Checks whether or not a given node is a concatenation.\n * @param {ASTNode} node A node to check.\n * @returns {boolean} `true` if the node is a concatenation.\n */\nfunction isConcatenation(node) {\n    return node.type === \"BinaryExpression\" && node.operator === \"+\";\n}\n\n/**\n * Gets the top binary expression node for concatenation in parents of a given node.\n * @param {ASTNode} node A node to get.\n * @returns {ASTNode} the top binary expression node in parents of a given node.\n */\nfunction getTopConcatBinaryExpression(node) {\n    let currentNode = node;\n\n    while (isConcatenation(currentNode.parent)) {\n        currentNode = currentNode.parent;\n    }\n    return currentNode;\n}\n\n/**\n * Checks whether or not a node contains a string literal with an octal or non-octal decimal escape sequence\n * @param {ASTNode} node A node to check\n * @returns {boolean} `true` if at least one string literal within the node contains\n * an octal or non-octal decimal escape sequence\n */\nfunction hasOctalOrNonOctalDecimalEscapeSequence(node) {\n    if (isConcatenation(node)) {\n        return (\n            hasOctalOrNonOctalDecimalEscapeSequence(node.left) ||\n            hasOctalOrNonOctalDecimalEscapeSequence(node.right)\n        );\n    }\n\n    // No need to check TemplateLiterals – would throw parsing error\n    if (node.type === \"Literal\" && typeof node.value === \"string\") {\n        return astUtils.hasOctalOrNonOctalDecimalEscapeSequence(node.raw);\n    }\n\n    return false;\n}\n\n/**\n * Checks whether or not a given binary expression has string literals.\n * @param {ASTNode} node A node to check.\n * @returns {boolean} `true` if the node has string literals.\n */\nfunction hasStringLiteral(node) {\n    if (isConcatenation(node)) {\n\n        // `left` is deeper than `right` normally.\n        return hasStringLiteral(node.right) || hasStringLiteral(node.left);\n    }\n    return astUtils.isStringLiteral(node);\n}\n\n/**\n * Checks whether or not a given binary expression has non string literals.\n * @param {ASTNode} node A node to check.\n * @returns {boolean} `true` if the node has non string literals.\n */\nfunction hasNonStringLiteral(node) {\n    if (isConcatenation(node)) {\n\n        // `left` is deeper than `right` normally.\n        return hasNonStringLiteral(node.right) || hasNonStringLiteral(node.left);\n    }\n    return !astUtils.isStringLiteral(node);\n}\n\n/**\n * Determines whether a given node will start with a template curly expression (`${}`) when being converted to a template literal.\n * @param {ASTNode} node The node that will be fixed to a template literal\n * @returns {boolean} `true` if the node will start with a template curly.\n */\nfunction startsWithTemplateCurly(node) {\n    if (node.type === \"BinaryExpression\") {\n        return startsWithTemplateCurly(node.left);\n    }\n    if (node.type === \"TemplateLiteral\") {\n        return node.expressions.length && node.quasis.length && node.quasis[0].range[0] === node.quasis[0].range[1];\n    }\n    return node.type !== \"Literal\" || typeof node.value !== \"string\";\n}\n\n/**\n * Determines whether a given node end with a template curly expression (`${}`) when being converted to a template literal.\n * @param {ASTNode} node The node that will be fixed to a template literal\n * @returns {boolean} `true` if the node will end with a template curly.\n */\nfunction endsWithTemplateCurly(node) {\n    if (node.type === \"BinaryExpression\") {\n        return startsWithTemplateCurly(node.right);\n    }\n    if (node.type === \"TemplateLiteral\") {\n        return node.expressions.length && node.quasis.length && node.quasis[node.quasis.length - 1].range[0] === node.quasis[node.quasis.length - 1].range[1];\n    }\n    return node.type !== \"Literal\" || typeof node.value !== \"string\";\n}\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"require template literals instead of string concatenation\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/prefer-template\"\n        },\n\n        schema: [],\n        fixable: \"code\",\n\n        messages: {\n            unexpectedStringConcatenation: \"Unexpected string concatenation.\"\n        }\n    },\n\n    create(context) {\n        const sourceCode = context.getSourceCode();\n        let done = Object.create(null);\n\n        /**\n         * Gets the non-token text between two nodes, ignoring any other tokens that appear between the two tokens.\n         * @param {ASTNode} node1 The first node\n         * @param {ASTNode} node2 The second node\n         * @returns {string} The text between the nodes, excluding other tokens\n         */\n        function getTextBetween(node1, node2) {\n            const allTokens = [node1].concat(sourceCode.getTokensBetween(node1, node2)).concat(node2);\n            const sourceText = sourceCode.getText();\n\n            return allTokens.slice(0, -1).reduce((accumulator, token, index) => accumulator + sourceText.slice(token.range[1], allTokens[index + 1].range[0]), \"\");\n        }\n\n        /**\n         * Returns a template literal form of the given node.\n         * @param {ASTNode} currentNode A node that should be converted to a template literal\n         * @param {string} textBeforeNode Text that should appear before the node\n         * @param {string} textAfterNode Text that should appear after the node\n         * @returns {string} A string form of this node, represented as a template literal\n         */\n        function getTemplateLiteral(currentNode, textBeforeNode, textAfterNode) {\n            if (currentNode.type === \"Literal\" && typeof currentNode.value === \"string\") {\n\n                /*\n                 * If the current node is a string literal, escape any instances of ${ or ` to prevent them from being interpreted\n                 * as a template placeholder. However, if the code already contains a backslash before the ${ or `\n                 * for some reason, don't add another backslash, because that would change the meaning of the code (it would cause\n                 * an actual backslash character to appear before the dollar sign).\n                 */\n                return `\\`${currentNode.raw.slice(1, -1).replace(/\\\\*(\\$\\{|`)/gu, matched => {\n                    if (matched.lastIndexOf(\"\\\\\") % 2) {\n                        return `\\\\${matched}`;\n                    }\n                    return matched;\n\n                // Unescape any quotes that appear in the original Literal that no longer need to be escaped.\n                }).replace(new RegExp(`\\\\\\\\${currentNode.raw[0]}`, \"gu\"), currentNode.raw[0])}\\``;\n            }\n\n            if (currentNode.type === \"TemplateLiteral\") {\n                return sourceCode.getText(currentNode);\n            }\n\n            if (isConcatenation(currentNode) && hasStringLiteral(currentNode)) {\n                const plusSign = sourceCode.getFirstTokenBetween(currentNode.left, currentNode.right, token => token.value === \"+\");\n                const textBeforePlus = getTextBetween(currentNode.left, plusSign);\n                const textAfterPlus = getTextBetween(plusSign, currentNode.right);\n                const leftEndsWithCurly = endsWithTemplateCurly(currentNode.left);\n                const rightStartsWithCurly = startsWithTemplateCurly(currentNode.right);\n\n                if (leftEndsWithCurly) {\n\n                    // If the left side of the expression ends with a template curly, add the extra text to the end of the curly bracket.\n                    // `foo${bar}` /* comment */ + 'baz' --> `foo${bar /* comment */  }${baz}`\n                    return getTemplateLiteral(currentNode.left, textBeforeNode, textBeforePlus + textAfterPlus).slice(0, -1) +\n                        getTemplateLiteral(currentNode.right, null, textAfterNode).slice(1);\n                }\n                if (rightStartsWithCurly) {\n\n                    // Otherwise, if the right side of the expression starts with a template curly, add the text there.\n                    // 'foo' /* comment */ + `${bar}baz` --> `foo${ /* comment */  bar}baz`\n                    return getTemplateLiteral(currentNode.left, textBeforeNode, null).slice(0, -1) +\n                        getTemplateLiteral(currentNode.right, textBeforePlus + textAfterPlus, textAfterNode).slice(1);\n                }\n\n                /*\n                 * Otherwise, these nodes should not be combined into a template curly, since there is nowhere to put\n                 * the text between them.\n                 */\n                return `${getTemplateLiteral(currentNode.left, textBeforeNode, null)}${textBeforePlus}+${textAfterPlus}${getTemplateLiteral(currentNode.right, textAfterNode, null)}`;\n            }\n\n            return `\\`\\${${textBeforeNode || \"\"}${sourceCode.getText(currentNode)}${textAfterNode || \"\"}}\\``;\n        }\n\n        /**\n         * Returns a fixer object that converts a non-string binary expression to a template literal\n         * @param {SourceCodeFixer} fixer The fixer object\n         * @param {ASTNode} node A node that should be converted to a template literal\n         * @returns {Object} A fix for this binary expression\n         */\n        function fixNonStringBinaryExpression(fixer, node) {\n            const topBinaryExpr = getTopConcatBinaryExpression(node.parent);\n\n            if (hasOctalOrNonOctalDecimalEscapeSequence(topBinaryExpr)) {\n                return null;\n            }\n\n            return fixer.replaceText(topBinaryExpr, getTemplateLiteral(topBinaryExpr, null, null));\n        }\n\n        /**\n         * Reports if a given node is string concatenation with non string literals.\n         * @param {ASTNode} node A node to check.\n         * @returns {void}\n         */\n        function checkForStringConcat(node) {\n            if (!astUtils.isStringLiteral(node) || !isConcatenation(node.parent)) {\n                return;\n            }\n\n            const topBinaryExpr = getTopConcatBinaryExpression(node.parent);\n\n            // Checks whether or not this node had been checked already.\n            if (done[topBinaryExpr.range[0]]) {\n                return;\n            }\n            done[topBinaryExpr.range[0]] = true;\n\n            if (hasNonStringLiteral(topBinaryExpr)) {\n                context.report({\n                    node: topBinaryExpr,\n                    messageId: \"unexpectedStringConcatenation\",\n                    fix: fixer => fixNonStringBinaryExpression(fixer, node)\n                });\n            }\n        }\n\n        return {\n            Program() {\n                done = Object.create(null);\n            },\n\n            Literal: checkForStringConcat,\n            TemplateLiteral: checkForStringConcat\n        };\n    }\n};\n/lib/rules/linebreak-style.js\r/**\n * @fileoverview Rule to enforce a single linebreak style.\n * @author Erik Mueller\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"layout\",\n\n        docs: {\n            description: \"enforce consistent linebreak style\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/linebreak-style\"\n        },\n\n        fixable: \"whitespace\",\n\n        schema: [\n            {\n                enum: [\"unix\", \"windows\"]\n            }\n        ],\n        messages: {\n            expectedLF: \"Expected linebreaks to be 'LF' but found 'CRLF'.\",\n            expectedCRLF: \"Expected linebreaks to be 'CRLF' but found 'LF'.\"\n        }\n    },\n\n    create(context) {\n        const sourceCode = context.getSourceCode();\n\n        //--------------------------------------------------------------------------\n        // Helpers\n        //--------------------------------------------------------------------------\n\n        /**\n         * Builds a fix function that replaces text at the specified range in the source text.\n         * @param {int[]} range The range to replace\n         * @param {string} text The text to insert.\n         * @returns {Function} Fixer function\n         * @private\n         */\n        function createFix(range, text) {\n            return function(fixer) {\n                return fixer.replaceTextRange(range, text);\n            };\n        }\n\n        //--------------------------------------------------------------------------\n        // Public\n        //--------------------------------------------------------------------------\n\n        return {\n            Program: function checkForLinebreakStyle(node) {\n                const linebreakStyle = context.options[0] || \"unix\",\n                    expectedLF = linebreakStyle === \"unix\",\n                    expectedLFChars = expectedLF ? \"\\n\" : \"\\r\\n\",\n                    source = sourceCode.getText(),\n                    pattern = astUtils.createGlobalLinebreakMatcher();\n                let match;\n\n                let i = 0;\n\n                while ((match = pattern.exec(source)) !== null) {\n                    i++;\n                    if (match[0] === expectedLFChars) {\n                        continue;\n                    }\n\n                    const index = match.index;\n                    const range = [index, index + match[0].length];\n\n                    context.report({\n                        node,\n                        loc: {\n                            start: {\n                                line: i,\n                                column: sourceCode.lines[i - 1].length\n                            },\n                            end: {\n                                line: i + 1,\n                                column: 0\n                            }\n                        },\n                        messageId: expectedLF ? \"expectedLF\" : \"expectedCRLF\",\n                        fix: createFix(range, expectedLFChars)\n                    });\n                }\n            }\n        };\n    }\n};\n#/lib/rules/no-dupe-class-members.js\r&/**\n * @fileoverview A rule to disallow duplicate name in class members.\n * @author Toru Nagashima\n */\n\n\"use strict\";\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"problem\",\n\n        docs: {\n            description: \"disallow duplicate class members\",\n            recommended: true,\n            url: \"https://eslint.org/docs/rules/no-dupe-class-members\"\n        },\n\n        schema: [],\n\n        messages: {\n            unexpected: \"Duplicate name '{{name}}'.\"\n        }\n    },\n\n    create(context) {\n        let stack = [];\n\n        /**\n         * Gets state of a given member name.\n         * @param {string} name A name of a member.\n         * @param {boolean} isStatic A flag which specifies that is a static member.\n         * @returns {Object} A state of a given member name.\n         *   - retv.init {boolean} A flag which shows the name is declared as normal member.\n         *   - retv.get {boolean} A flag which shows the name is declared as getter.\n         *   - retv.set {boolean} A flag which shows the name is declared as setter.\n         */\n        function getState(name, isStatic) {\n            const stateMap = stack[stack.length - 1];\n            const key = `$${name}`; // to avoid \"__proto__\".\n\n            if (!stateMap[key]) {\n                stateMap[key] = {\n                    nonStatic: { init: false, get: false, set: false },\n                    static: { init: false, get: false, set: false }\n                };\n            }\n\n            return stateMap[key][isStatic ? \"static\" : \"nonStatic\"];\n        }\n\n        return {\n\n            // Initializes the stack of state of member declarations.\n            Program() {\n                stack = [];\n            },\n\n            // Initializes state of member declarations for the class.\n            ClassBody() {\n                stack.push(Object.create(null));\n            },\n\n            // Disposes the state for the class.\n            \"ClassBody:exit\"() {\n                stack.pop();\n            },\n\n            // Reports the node if its name has been declared already.\n            \"MethodDefinition, PropertyDefinition\"(node) {\n                const name = astUtils.getStaticPropertyName(node);\n                const kind = node.type === \"MethodDefinition\" ? node.kind : \"field\";\n\n                if (name === null || kind === \"constructor\") {\n                    return;\n                }\n\n                const state = getState(name, node.static);\n                let isDuplicate = false;\n\n                if (kind === \"get\") {\n                    isDuplicate = (state.init || state.get);\n                    state.get = true;\n                } else if (kind === \"set\") {\n                    isDuplicate = (state.init || state.set);\n                    state.set = true;\n                } else {\n                    isDuplicate = (state.init || state.get || state.set);\n                    state.init = true;\n                }\n\n                if (isDuplicate) {\n                    context.report({ node, messageId: \"unexpected\", data: { name } });\n                }\n            }\n        };\n    }\n};\n#/lib/rules/array-bracket-newline.js%z/**\n * @fileoverview Rule to enforce linebreaks after open and before close array brackets\n * @author Jan Peer Stöcklmair <https://github.com/JPeer264>\n */\n\n\"use strict\";\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"layout\",\n\n        docs: {\n            description: \"enforce linebreaks after opening and before closing array brackets\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/array-bracket-newline\"\n        },\n\n        fixable: \"whitespace\",\n\n        schema: [\n            {\n                oneOf: [\n                    {\n                        enum: [\"always\", \"never\", \"consistent\"]\n                    },\n                    {\n                        type: \"object\",\n                        properties: {\n                            multiline: {\n                                type: \"boolean\"\n                            },\n                            minItems: {\n                                type: [\"integer\", \"null\"],\n                                minimum: 0\n                            }\n                        },\n                        additionalProperties: false\n                    }\n                ]\n            }\n        ],\n\n        messages: {\n            unexpectedOpeningLinebreak: \"There should be no linebreak after '['.\",\n            unexpectedClosingLinebreak: \"There should be no linebreak before ']'.\",\n            missingOpeningLinebreak: \"A linebreak is required after '['.\",\n            missingClosingLinebreak: \"A linebreak is required before ']'.\"\n        }\n    },\n\n    create(context) {\n        const sourceCode = context.getSourceCode();\n\n\n        //----------------------------------------------------------------------\n        // Helpers\n        //----------------------------------------------------------------------\n\n        /**\n         * Normalizes a given option value.\n         * @param {string|Object|undefined} option An option value to parse.\n         * @returns {{multiline: boolean, minItems: number}} Normalized option object.\n         */\n        function normalizeOptionValue(option) {\n            let consistent = false;\n            let multiline = false;\n            let minItems = 0;\n\n            if (option) {\n                if (option === \"consistent\") {\n                    consistent = true;\n                    minItems = Number.POSITIVE_INFINITY;\n                } else if (option === \"always\" || option.minItems === 0) {\n                    minItems = 0;\n                } else if (option === \"never\") {\n                    minItems = Number.POSITIVE_INFINITY;\n                } else {\n                    multiline = Boolean(option.multiline);\n                    minItems = option.minItems || Number.POSITIVE_INFINITY;\n                }\n            } else {\n                consistent = false;\n                multiline = true;\n                minItems = Number.POSITIVE_INFINITY;\n            }\n\n            return { consistent, multiline, minItems };\n        }\n\n        /**\n         * Normalizes a given option value.\n         * @param {string|Object|undefined} options An option value to parse.\n         * @returns {{ArrayExpression: {multiline: boolean, minItems: number}, ArrayPattern: {multiline: boolean, minItems: number}}} Normalized option object.\n         */\n        function normalizeOptions(options) {\n            const value = normalizeOptionValue(options);\n\n            return { ArrayExpression: value, ArrayPattern: value };\n        }\n\n        /**\n         * Reports that there shouldn't be a linebreak after the first token\n         * @param {ASTNode} node The node to report in the event of an error.\n         * @param {Token} token The token to use for the report.\n         * @returns {void}\n         */\n        function reportNoBeginningLinebreak(node, token) {\n            context.report({\n                node,\n                loc: token.loc,\n                messageId: \"unexpectedOpeningLinebreak\",\n                fix(fixer) {\n                    const nextToken = sourceCode.getTokenAfter(token, { includeComments: true });\n\n                    if (astUtils.isCommentToken(nextToken)) {\n                        return null;\n                    }\n\n                    return fixer.removeRange([token.range[1], nextToken.range[0]]);\n                }\n            });\n        }\n\n        /**\n         * Reports that there shouldn't be a linebreak before the last token\n         * @param {ASTNode} node The node to report in the event of an error.\n         * @param {Token} token The token to use for the report.\n         * @returns {void}\n         */\n        function reportNoEndingLinebreak(node, token) {\n            context.report({\n                node,\n                loc: token.loc,\n                messageId: \"unexpectedClosingLinebreak\",\n                fix(fixer) {\n                    const previousToken = sourceCode.getTokenBefore(token, { includeComments: true });\n\n                    if (astUtils.isCommentToken(previousToken)) {\n                        return null;\n                    }\n\n                    return fixer.removeRange([previousToken.range[1], token.range[0]]);\n                }\n            });\n        }\n\n        /**\n         * Reports that there should be a linebreak after the first token\n         * @param {ASTNode} node The node to report in the event of an error.\n         * @param {Token} token The token to use for the report.\n         * @returns {void}\n         */\n        function reportRequiredBeginningLinebreak(node, token) {\n            context.report({\n                node,\n                loc: token.loc,\n                messageId: \"missingOpeningLinebreak\",\n                fix(fixer) {\n                    return fixer.insertTextAfter(token, \"\\n\");\n                }\n            });\n        }\n\n        /**\n         * Reports that there should be a linebreak before the last token\n         * @param {ASTNode} node The node to report in the event of an error.\n         * @param {Token} token The token to use for the report.\n         * @returns {void}\n         */\n        function reportRequiredEndingLinebreak(node, token) {\n            context.report({\n                node,\n                loc: token.loc,\n                messageId: \"missingClosingLinebreak\",\n                fix(fixer) {\n                    return fixer.insertTextBefore(token, \"\\n\");\n                }\n            });\n        }\n\n        /**\n         * Reports a given node if it violated this rule.\n         * @param {ASTNode} node A node to check. This is an ArrayExpression node or an ArrayPattern node.\n         * @returns {void}\n         */\n        function check(node) {\n            const elements = node.elements;\n            const normalizedOptions = normalizeOptions(context.options[0]);\n            const options = normalizedOptions[node.type];\n            const openBracket = sourceCode.getFirstToken(node);\n            const closeBracket = sourceCode.getLastToken(node);\n            const firstIncComment = sourceCode.getTokenAfter(openBracket, { includeComments: true });\n            const lastIncComment = sourceCode.getTokenBefore(closeBracket, { includeComments: true });\n            const first = sourceCode.getTokenAfter(openBracket);\n            const last = sourceCode.getTokenBefore(closeBracket);\n\n            const needsLinebreaks = (\n                elements.length >= options.minItems ||\n                (\n                    options.multiline &&\n                    elements.length > 0 &&\n                    firstIncComment.loc.start.line !== lastIncComment.loc.end.line\n                ) ||\n                (\n                    elements.length === 0 &&\n                    firstIncComment.type === \"Block\" &&\n                    firstIncComment.loc.start.line !== lastIncComment.loc.end.line &&\n                    firstIncComment === lastIncComment\n                ) ||\n                (\n                    options.consistent &&\n                    openBracket.loc.end.line !== first.loc.start.line\n                )\n            );\n\n            /*\n             * Use tokens or comments to check multiline or not.\n             * But use only tokens to check whether linebreaks are needed.\n             * This allows:\n             *     var arr = [ // eslint-disable-line foo\n             *         'a'\n             *     ]\n             */\n\n            if (needsLinebreaks) {\n                if (astUtils.isTokenOnSameLine(openBracket, first)) {\n                    reportRequiredBeginningLinebreak(node, openBracket);\n                }\n                if (astUtils.isTokenOnSameLine(last, closeBracket)) {\n                    reportRequiredEndingLinebreak(node, closeBracket);\n                }\n            } else {\n                if (!astUtils.isTokenOnSameLine(openBracket, first)) {\n                    reportNoBeginningLinebreak(node, openBracket);\n                }\n                if (!astUtils.isTokenOnSameLine(last, closeBracket)) {\n                    reportNoEndingLinebreak(node, closeBracket);\n                }\n            }\n        }\n\n        //----------------------------------------------------------------------\n        // Public\n        //----------------------------------------------------------------------\n\n        return {\n            ArrayPattern: check,\n            ArrayExpression: check\n        };\n    }\n};\n/lib/rules/no-func-assign.js\b/**\n * @fileoverview Rule to flag use of function declaration identifiers as variables.\n * @author Ian Christian Myers\n */\n\n\"use strict\";\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"problem\",\n\n        docs: {\n            description: \"disallow reassigning `function` declarations\",\n            recommended: true,\n            url: \"https://eslint.org/docs/rules/no-func-assign\"\n        },\n\n        schema: [],\n\n        messages: {\n            isAFunction: \"'{{name}}' is a function.\"\n        }\n    },\n\n    create(context) {\n\n        /**\n         * Reports a reference if is non initializer and writable.\n         * @param {References} references Collection of reference to check.\n         * @returns {void}\n         */\n        function checkReference(references) {\n            astUtils.getModifyingReferences(references).forEach(reference => {\n                context.report({\n                    node: reference.identifier,\n                    messageId: \"isAFunction\",\n                    data: {\n                        name: reference.identifier.name\n                    }\n                });\n            });\n        }\n\n        /**\n         * Finds and reports references that are non initializer and writable.\n         * @param {Variable} variable A variable to check.\n         * @returns {void}\n         */\n        function checkVariable(variable) {\n            if (variable.defs[0].type === \"FunctionName\") {\n                checkReference(variable.references);\n            }\n        }\n\n        /**\n         * Checks parameters of a given function node.\n         * @param {ASTNode} node A function node to check.\n         * @returns {void}\n         */\n        function checkForFunction(node) {\n            context.getDeclaredVariables(node).forEach(checkVariable);\n        }\n\n        return {\n            FunctionDeclaration: checkForFunction,\n            FunctionExpression: checkForFunction\n        };\n    }\n};\n/lib/rules/no-continue.js\u0003o/**\n * @fileoverview Rule to flag use of continue statement\n * @author Borislav Zhivkov\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow `continue` statements\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-continue\"\n        },\n\n        schema: [],\n\n        messages: {\n            unexpected: \"Unexpected use of continue statement.\"\n        }\n    },\n\n    create(context) {\n\n        return {\n            ContinueStatement(node) {\n                context.report({ node, messageId: \"unexpected\" });\n            }\n        };\n\n    }\n};\n/lib/rules/no-loop-func.js\u0018V/**\n * @fileoverview Rule to flag creation of function inside a loop\n * @author Ilya Volodin\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\n/**\n * Gets the containing loop node of a specified node.\n *\n * We don't need to check nested functions, so this ignores those.\n * `Scope.through` contains references of nested functions.\n * @param {ASTNode} node An AST node to get.\n * @returns {ASTNode|null} The containing loop node of the specified node, or\n *      `null`.\n */\nfunction getContainingLoopNode(node) {\n    for (let currentNode = node; currentNode.parent; currentNode = currentNode.parent) {\n        const parent = currentNode.parent;\n\n        switch (parent.type) {\n            case \"WhileStatement\":\n            case \"DoWhileStatement\":\n                return parent;\n\n            case \"ForStatement\":\n\n                // `init` is outside of the loop.\n                if (parent.init !== currentNode) {\n                    return parent;\n                }\n                break;\n\n            case \"ForInStatement\":\n            case \"ForOfStatement\":\n\n                // `right` is outside of the loop.\n                if (parent.right !== currentNode) {\n                    return parent;\n                }\n                break;\n\n            case \"ArrowFunctionExpression\":\n            case \"FunctionExpression\":\n            case \"FunctionDeclaration\":\n\n                // We don't need to check nested functions.\n                return null;\n\n            default:\n                break;\n        }\n    }\n\n    return null;\n}\n\n/**\n * Gets the containing loop node of a given node.\n * If the loop was nested, this returns the most outer loop.\n * @param {ASTNode} node A node to get. This is a loop node.\n * @param {ASTNode|null} excludedNode A node that the result node should not\n *      include.\n * @returns {ASTNode} The most outer loop node.\n */\nfunction getTopLoopNode(node, excludedNode) {\n    const border = excludedNode ? excludedNode.range[1] : 0;\n    let retv = node;\n    let containingLoopNode = node;\n\n    while (containingLoopNode && containingLoopNode.range[0] >= border) {\n        retv = containingLoopNode;\n        containingLoopNode = getContainingLoopNode(containingLoopNode);\n    }\n\n    return retv;\n}\n\n/**\n * Checks whether a given reference which refers to an upper scope's variable is\n * safe or not.\n * @param {ASTNode} loopNode A containing loop node.\n * @param {eslint-scope.Reference} reference A reference to check.\n * @returns {boolean} `true` if the reference is safe or not.\n */\nfunction isSafe(loopNode, reference) {\n    const variable = reference.resolved;\n    const definition = variable && variable.defs[0];\n    const declaration = definition && definition.parent;\n    const kind = (declaration && declaration.type === \"VariableDeclaration\")\n        ? declaration.kind\n        : \"\";\n\n    // Variables which are declared by `const` is safe.\n    if (kind === \"const\") {\n        return true;\n    }\n\n    /*\n     * Variables which are declared by `let` in the loop is safe.\n     * It's a different instance from the next loop step's.\n     */\n    if (kind === \"let\" &&\n        declaration.range[0] > loopNode.range[0] &&\n        declaration.range[1] < loopNode.range[1]\n    ) {\n        return true;\n    }\n\n    /*\n     * WriteReferences which exist after this border are unsafe because those\n     * can modify the variable.\n     */\n    const border = getTopLoopNode(\n        loopNode,\n        (kind === \"let\") ? declaration : null\n    ).range[0];\n\n    /**\n     * Checks whether a given reference is safe or not.\n     * The reference is every reference of the upper scope's variable we are\n     * looking now.\n     *\n     * It's safeafe if the reference matches one of the following condition.\n     * - is readonly.\n     * - doesn't exist inside a local function and after the border.\n     * @param {eslint-scope.Reference} upperRef A reference to check.\n     * @returns {boolean} `true` if the reference is safe.\n     */\n    function isSafeReference(upperRef) {\n        const id = upperRef.identifier;\n\n        return (\n            !upperRef.isWrite() ||\n            variable.scope.variableScope === upperRef.from.variableScope &&\n            id.range[0] < border\n        );\n    }\n\n    return Boolean(variable) && variable.references.every(isSafeReference);\n}\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow function declarations that contain unsafe references inside loop statements\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-loop-func\"\n        },\n\n        schema: [],\n\n        messages: {\n            unsafeRefs: \"Function declared in a loop contains unsafe references to variable(s) {{ varNames }}.\"\n        }\n    },\n\n    create(context) {\n\n        /**\n         * Reports functions which match the following condition:\n         *\n         * - has a loop node in ancestors.\n         * - has any references which refers to an unsafe variable.\n         * @param {ASTNode} node The AST node to check.\n         * @returns {void}\n         */\n        function checkForLoops(node) {\n            const loopNode = getContainingLoopNode(node);\n\n            if (!loopNode) {\n                return;\n            }\n\n            const references = context.getScope().through;\n            const unsafeRefs = references.filter(r => !isSafe(loopNode, r)).map(r => r.identifier.name);\n\n            if (unsafeRefs.length > 0) {\n                context.report({\n                    node,\n                    messageId: \"unsafeRefs\",\n                    data: { varNames: `'${unsafeRefs.join(\"', '\")}'` }\n                });\n            }\n        }\n\n        return {\n            ArrowFunctionExpression: checkForLoops,\n            FunctionExpression: checkForLoops,\n            FunctionDeclaration: checkForLoops\n        };\n    }\n};\n/lib/shared/traverser.js\u0015k/**\n * @fileoverview Traverser to traverse AST trees.\n * @author Nicholas C. Zakas\n * @author Toru Nagashima\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst vk = require(\"eslint-visitor-keys\");\nconst debug = require(\"debug\")(\"eslint:traverser\");\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\n/**\n * Do nothing.\n * @returns {void}\n */\nfunction noop() {\n\n    // do nothing.\n}\n\n/**\n * Check whether the given value is an ASTNode or not.\n * @param {any} x The value to check.\n * @returns {boolean} `true` if the value is an ASTNode.\n */\nfunction isNode(x) {\n    return x !== null && typeof x === \"object\" && typeof x.type === \"string\";\n}\n\n/**\n * Get the visitor keys of a given node.\n * @param {Object} visitorKeys The map of visitor keys.\n * @param {ASTNode} node The node to get their visitor keys.\n * @returns {string[]} The visitor keys of the node.\n */\nfunction getVisitorKeys(visitorKeys, node) {\n    let keys = visitorKeys[node.type];\n\n    if (!keys) {\n        keys = vk.getKeys(node);\n        debug(\"Unknown node type \\\"%s\\\": Estimated visitor keys %j\", node.type, keys);\n    }\n\n    return keys;\n}\n\n/**\n * The traverser class to traverse AST trees.\n */\nclass Traverser {\n    constructor() {\n        this._current = null;\n        this._parents = [];\n        this._skipped = false;\n        this._broken = false;\n        this._visitorKeys = null;\n        this._enter = null;\n        this._leave = null;\n    }\n\n    /**\n     * Gives current node.\n     * @returns {ASTNode} The current node.\n     */\n    current() {\n        return this._current;\n    }\n\n    /**\n     * Gives a a copy of the ancestor nodes.\n     * @returns {ASTNode[]} The ancestor nodes.\n     */\n    parents() {\n        return this._parents.slice(0);\n    }\n\n    /**\n     * Break the current traversal.\n     * @returns {void}\n     */\n    break() {\n        this._broken = true;\n    }\n\n    /**\n     * Skip child nodes for the current traversal.\n     * @returns {void}\n     */\n    skip() {\n        this._skipped = true;\n    }\n\n    /**\n     * Traverse the given AST tree.\n     * @param {ASTNode} node The root node to traverse.\n     * @param {Object} options The option object.\n     * @param {Object} [options.visitorKeys=DEFAULT_VISITOR_KEYS] The keys of each node types to traverse child nodes. Default is `./default-visitor-keys.json`.\n     * @param {Function} [options.enter=noop] The callback function which is called on entering each node.\n     * @param {Function} [options.leave=noop] The callback function which is called on leaving each node.\n     * @returns {void}\n     */\n    traverse(node, options) {\n        this._current = null;\n        this._parents = [];\n        this._skipped = false;\n        this._broken = false;\n        this._visitorKeys = options.visitorKeys || vk.KEYS;\n        this._enter = options.enter || noop;\n        this._leave = options.leave || noop;\n        this._traverse(node, null);\n    }\n\n    /**\n     * Traverse the given AST tree recursively.\n     * @param {ASTNode} node The current node.\n     * @param {ASTNode|null} parent The parent node.\n     * @returns {void}\n     * @private\n     */\n    _traverse(node, parent) {\n        if (!isNode(node)) {\n            return;\n        }\n\n        this._current = node;\n        this._skipped = false;\n        this._enter(node, parent);\n\n        if (!this._skipped && !this._broken) {\n            const keys = getVisitorKeys(this._visitorKeys, node);\n\n            if (keys.length >= 1) {\n                this._parents.push(node);\n                for (let i = 0; i < keys.length && !this._broken; ++i) {\n                    const child = node[keys[i]];\n\n                    if (Array.isArray(child)) {\n                        for (let j = 0; j < child.length && !this._broken; ++j) {\n                            this._traverse(child[j], node);\n                        }\n                    } else {\n                        this._traverse(child, node);\n                    }\n                }\n                this._parents.pop();\n            }\n        }\n\n        if (!this._broken) {\n            this._leave(node, parent);\n        }\n\n        this._current = parent;\n    }\n\n    /**\n     * Calculates the keys to use for traversal.\n     * @param {ASTNode} node The node to read keys from.\n     * @returns {string[]} An array of keys to visit on the node.\n     * @private\n     */\n    static getKeys(node) {\n        return vk.getKeys(node);\n    }\n\n    /**\n     * Traverse the given AST tree.\n     * @param {ASTNode} node The root node to traverse.\n     * @param {Object} options The option object.\n     * @param {Object} [options.visitorKeys=DEFAULT_VISITOR_KEYS] The keys of each node types to traverse child nodes. Default is `./default-visitor-keys.json`.\n     * @param {Function} [options.enter=noop] The callback function which is called on entering each node.\n     * @param {Function} [options.leave=noop] The callback function which is called on leaving each node.\n     * @returns {void}\n     */\n    static traverse(node, options) {\n        new Traverser().traverse(node, options);\n    }\n\n    /**\n     * The default visitor keys.\n     * @type {Object}\n     */\n    static get DEFAULT_VISITOR_KEYS() {\n        return vk.KEYS;\n    }\n}\n\nmodule.exports = Traverser;\n/lib/rules/no-new-func.js\u000b/**\n * @fileoverview Rule to flag when using new Function\n * @author Ilya Volodin\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\nconst callMethods = new Set([\"apply\", \"bind\", \"call\"]);\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow `new` operators with the `Function` object\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-new-func\"\n        },\n\n        schema: [],\n\n        messages: {\n            noFunctionConstructor: \"The Function constructor is eval.\"\n        }\n    },\n\n    create(context) {\n\n        return {\n            \"Program:exit\"() {\n                const globalScope = context.getScope();\n                const variable = globalScope.set.get(\"Function\");\n\n                if (variable && variable.defs.length === 0) {\n                    variable.references.forEach(ref => {\n                        const node = ref.identifier;\n                        const { parent } = node;\n                        let evalNode;\n\n                        if (parent) {\n                            if (node === parent.callee && (\n                                parent.type === \"NewExpression\" ||\n                                parent.type === \"CallExpression\"\n                            )) {\n                                evalNode = parent;\n                            } else if (\n                                parent.type === \"MemberExpression\" &&\n                                node === parent.object &&\n                                callMethods.has(astUtils.getStaticPropertyName(parent))\n                            ) {\n                                const maybeCallee = parent.parent.type === \"ChainExpression\" ? parent.parent : parent;\n\n                                if (maybeCallee.parent.type === \"CallExpression\" && maybeCallee.parent.callee === maybeCallee) {\n                                    evalNode = maybeCallee.parent;\n                                }\n                            }\n                        }\n\n                        if (evalNode) {\n                            context.report({\n                                node: evalNode,\n                                messageId: \"noFunctionConstructor\"\n                            });\n                        }\n                    });\n                }\n            }\n        };\n\n    }\n};\n'/lib/source-code/token-store/cursors.js\u000e/**\n * @fileoverview Define 2 token factories; forward and backward.\n * @author Toru Nagashima\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst BackwardTokenCommentCursor = require(\"./backward-token-comment-cursor\");\nconst BackwardTokenCursor = require(\"./backward-token-cursor\");\nconst FilterCursor = require(\"./filter-cursor\");\nconst ForwardTokenCommentCursor = require(\"./forward-token-comment-cursor\");\nconst ForwardTokenCursor = require(\"./forward-token-cursor\");\nconst LimitCursor = require(\"./limit-cursor\");\nconst SkipCursor = require(\"./skip-cursor\");\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\n/**\n * The cursor factory.\n * @private\n */\nclass CursorFactory {\n\n    /**\n     * Initializes this cursor.\n     * @param {Function} TokenCursor The class of the cursor which iterates tokens only.\n     * @param {Function} TokenCommentCursor The class of the cursor which iterates the mix of tokens and comments.\n     */\n    constructor(TokenCursor, TokenCommentCursor) {\n        this.TokenCursor = TokenCursor;\n        this.TokenCommentCursor = TokenCommentCursor;\n    }\n\n    /**\n     * Creates a base cursor instance that can be decorated by createCursor.\n     * @param {Token[]} tokens The array of tokens.\n     * @param {Comment[]} comments The array of comments.\n     * @param {Object} indexMap The map from locations to indices in `tokens`.\n     * @param {number} startLoc The start location of the iteration range.\n     * @param {number} endLoc The end location of the iteration range.\n     * @param {boolean} includeComments The flag to iterate comments as well.\n     * @returns {Cursor} The created base cursor.\n     */\n    createBaseCursor(tokens, comments, indexMap, startLoc, endLoc, includeComments) {\n        const Cursor = includeComments ? this.TokenCommentCursor : this.TokenCursor;\n\n        return new Cursor(tokens, comments, indexMap, startLoc, endLoc);\n    }\n\n    /**\n     * Creates a cursor that iterates tokens with normalized options.\n     * @param {Token[]} tokens The array of tokens.\n     * @param {Comment[]} comments The array of comments.\n     * @param {Object} indexMap The map from locations to indices in `tokens`.\n     * @param {number} startLoc The start location of the iteration range.\n     * @param {number} endLoc The end location of the iteration range.\n     * @param {boolean} includeComments The flag to iterate comments as well.\n     * @param {Function|null} filter The predicate function to choose tokens.\n     * @param {number} skip The count of tokens the cursor skips.\n     * @param {number} count The maximum count of tokens the cursor iterates. Zero is no iteration for backward compatibility.\n     * @returns {Cursor} The created cursor.\n     */\n    createCursor(tokens, comments, indexMap, startLoc, endLoc, includeComments, filter, skip, count) {\n        let cursor = this.createBaseCursor(tokens, comments, indexMap, startLoc, endLoc, includeComments);\n\n        if (filter) {\n            cursor = new FilterCursor(cursor, filter);\n        }\n        if (skip >= 1) {\n            cursor = new SkipCursor(cursor, skip);\n        }\n        if (count >= 0) {\n            cursor = new LimitCursor(cursor, count);\n        }\n\n        return cursor;\n    }\n}\n\n//------------------------------------------------------------------------------\n// Exports\n//------------------------------------------------------------------------------\n\nexports.forward = new CursorFactory(ForwardTokenCursor, ForwardTokenCommentCursor);\nexports.backward = new CursorFactory(BackwardTokenCursor, BackwardTokenCommentCursor);\n/lib/rules/quote-props.js./**\n * @fileoverview Rule to flag non-quoted property names in object literals.\n * @author Mathias Bynens <http://mathiasbynens.be/>\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst espree = require(\"espree\");\nconst astUtils = require(\"./utils/ast-utils\");\nconst keywords = require(\"./utils/keywords\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"require quotes around object literal property names\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/quote-props\"\n        },\n\n        schema: {\n            anyOf: [\n                {\n                    type: \"array\",\n                    items: [\n                        {\n                            enum: [\"always\", \"as-needed\", \"consistent\", \"consistent-as-needed\"]\n                        }\n                    ],\n                    minItems: 0,\n                    maxItems: 1\n                },\n                {\n                    type: \"array\",\n                    items: [\n                        {\n                            enum: [\"always\", \"as-needed\", \"consistent\", \"consistent-as-needed\"]\n                        },\n                        {\n                            type: \"object\",\n                            properties: {\n                                keywords: {\n                                    type: \"boolean\"\n                                },\n                                unnecessary: {\n                                    type: \"boolean\"\n                                },\n                                numbers: {\n                                    type: \"boolean\"\n                                }\n                            },\n                            additionalProperties: false\n                        }\n                    ],\n                    minItems: 0,\n                    maxItems: 2\n                }\n            ]\n        },\n\n        fixable: \"code\",\n        messages: {\n            requireQuotesDueToReservedWord: \"Properties should be quoted as '{{property}}' is a reserved word.\",\n            inconsistentlyQuotedProperty: \"Inconsistently quoted property '{{key}}' found.\",\n            unnecessarilyQuotedProperty: \"Unnecessarily quoted property '{{property}}' found.\",\n            unquotedReservedProperty: \"Unquoted reserved word '{{property}}' used as key.\",\n            unquotedNumericProperty: \"Unquoted number literal '{{property}}' used as key.\",\n            unquotedPropertyFound: \"Unquoted property '{{property}}' found.\",\n            redundantQuoting: \"Properties shouldn't be quoted as all quotes are redundant.\"\n        }\n    },\n\n    create(context) {\n\n        const MODE = context.options[0],\n            KEYWORDS = context.options[1] && context.options[1].keywords,\n            CHECK_UNNECESSARY = !context.options[1] || context.options[1].unnecessary !== false,\n            NUMBERS = context.options[1] && context.options[1].numbers,\n\n            sourceCode = context.getSourceCode();\n\n\n        /**\n         * Checks whether a certain string constitutes an ES3 token\n         * @param {string} tokenStr The string to be checked.\n         * @returns {boolean} `true` if it is an ES3 token.\n         */\n        function isKeyword(tokenStr) {\n            return keywords.indexOf(tokenStr) >= 0;\n        }\n\n        /**\n         * Checks if an espree-tokenized key has redundant quotes (i.e. whether quotes are unnecessary)\n         * @param {string} rawKey The raw key value from the source\n         * @param {espreeTokens} tokens The espree-tokenized node key\n         * @param {boolean} [skipNumberLiterals=false] Indicates whether number literals should be checked\n         * @returns {boolean} Whether or not a key has redundant quotes.\n         * @private\n         */\n        function areQuotesRedundant(rawKey, tokens, skipNumberLiterals) {\n            return tokens.length === 1 && tokens[0].start === 0 && tokens[0].end === rawKey.length &&\n                ([\"Identifier\", \"Keyword\", \"Null\", \"Boolean\"].indexOf(tokens[0].type) >= 0 ||\n                (tokens[0].type === \"Numeric\" && !skipNumberLiterals && String(+tokens[0].value) === tokens[0].value));\n        }\n\n        /**\n         * Returns a string representation of a property node with quotes removed\n         * @param {ASTNode} key Key AST Node, which may or may not be quoted\n         * @returns {string} A replacement string for this property\n         */\n        function getUnquotedKey(key) {\n            return key.type === \"Identifier\" ? key.name : key.value;\n        }\n\n        /**\n         * Returns a string representation of a property node with quotes added\n         * @param {ASTNode} key Key AST Node, which may or may not be quoted\n         * @returns {string} A replacement string for this property\n         */\n        function getQuotedKey(key) {\n            if (key.type === \"Literal\" && typeof key.value === \"string\") {\n\n                // If the key is already a string literal, don't replace the quotes with double quotes.\n                return sourceCode.getText(key);\n            }\n\n            // Otherwise, the key is either an identifier or a number literal.\n            return `\"${key.type === \"Identifier\" ? key.name : key.value}\"`;\n        }\n\n        /**\n         * Ensures that a property's key is quoted only when necessary\n         * @param {ASTNode} node Property AST node\n         * @returns {void}\n         */\n        function checkUnnecessaryQuotes(node) {\n            const key = node.key;\n\n            if (node.method || node.computed || node.shorthand) {\n                return;\n            }\n\n            if (key.type === \"Literal\" && typeof key.value === \"string\") {\n                let tokens;\n\n                try {\n                    tokens = espree.tokenize(key.value);\n                } catch {\n                    return;\n                }\n\n                if (tokens.length !== 1) {\n                    return;\n                }\n\n                const isKeywordToken = isKeyword(tokens[0].value);\n\n                if (isKeywordToken && KEYWORDS) {\n                    return;\n                }\n\n                if (CHECK_UNNECESSARY && areQuotesRedundant(key.value, tokens, NUMBERS)) {\n                    context.report({\n                        node,\n                        messageId: \"unnecessarilyQuotedProperty\",\n                        data: { property: key.value },\n                        fix: fixer => fixer.replaceText(key, getUnquotedKey(key))\n                    });\n                }\n            } else if (KEYWORDS && key.type === \"Identifier\" && isKeyword(key.name)) {\n                context.report({\n                    node,\n                    messageId: \"unquotedReservedProperty\",\n                    data: { property: key.name },\n                    fix: fixer => fixer.replaceText(key, getQuotedKey(key))\n                });\n            } else if (NUMBERS && key.type === \"Literal\" && astUtils.isNumericLiteral(key)) {\n                context.report({\n                    node,\n                    messageId: \"unquotedNumericProperty\",\n                    data: { property: key.value },\n                    fix: fixer => fixer.replaceText(key, getQuotedKey(key))\n                });\n            }\n        }\n\n        /**\n         * Ensures that a property's key is quoted\n         * @param {ASTNode} node Property AST node\n         * @returns {void}\n         */\n        function checkOmittedQuotes(node) {\n            const key = node.key;\n\n            if (!node.method && !node.computed && !node.shorthand && !(key.type === \"Literal\" && typeof key.value === \"string\")) {\n                context.report({\n                    node,\n                    messageId: \"unquotedPropertyFound\",\n                    data: { property: key.name || key.value },\n                    fix: fixer => fixer.replaceText(key, getQuotedKey(key))\n                });\n            }\n        }\n\n        /**\n         * Ensures that an object's keys are consistently quoted, optionally checks for redundancy of quotes\n         * @param {ASTNode} node Property AST node\n         * @param {boolean} checkQuotesRedundancy Whether to check quotes' redundancy\n         * @returns {void}\n         */\n        function checkConsistency(node, checkQuotesRedundancy) {\n            const quotedProps = [],\n                unquotedProps = [];\n            let keywordKeyName = null,\n                necessaryQuotes = false;\n\n            node.properties.forEach(property => {\n                const key = property.key;\n\n                if (!key || property.method || property.computed || property.shorthand) {\n                    return;\n                }\n\n                if (key.type === \"Literal\" && typeof key.value === \"string\") {\n\n                    quotedProps.push(property);\n\n                    if (checkQuotesRedundancy) {\n                        let tokens;\n\n                        try {\n                            tokens = espree.tokenize(key.value);\n                        } catch {\n                            necessaryQuotes = true;\n                            return;\n                        }\n\n                        necessaryQuotes = necessaryQuotes || !areQuotesRedundant(key.value, tokens) || KEYWORDS && isKeyword(tokens[0].value);\n                    }\n                } else if (KEYWORDS && checkQuotesRedundancy && key.type === \"Identifier\" && isKeyword(key.name)) {\n                    unquotedProps.push(property);\n                    necessaryQuotes = true;\n                    keywordKeyName = key.name;\n                } else {\n                    unquotedProps.push(property);\n                }\n            });\n\n            if (checkQuotesRedundancy && quotedProps.length && !necessaryQuotes) {\n                quotedProps.forEach(property => {\n                    context.report({\n                        node: property,\n                        messageId: \"redundantQuoting\",\n                        fix: fixer => fixer.replaceText(property.key, getUnquotedKey(property.key))\n                    });\n                });\n            } else if (unquotedProps.length && keywordKeyName) {\n                unquotedProps.forEach(property => {\n                    context.report({\n                        node: property,\n                        messageId: \"requireQuotesDueToReservedWord\",\n                        data: { property: keywordKeyName },\n                        fix: fixer => fixer.replaceText(property.key, getQuotedKey(property.key))\n                    });\n                });\n            } else if (quotedProps.length && unquotedProps.length) {\n                unquotedProps.forEach(property => {\n                    context.report({\n                        node: property,\n                        messageId: \"inconsistentlyQuotedProperty\",\n                        data: { key: property.key.name || property.key.value },\n                        fix: fixer => fixer.replaceText(property.key, getQuotedKey(property.key))\n                    });\n                });\n            }\n        }\n\n        return {\n            Property(node) {\n                if (MODE === \"always\" || !MODE) {\n                    checkOmittedQuotes(node);\n                }\n                if (MODE === \"as-needed\") {\n                    checkUnnecessaryQuotes(node);\n                }\n            },\n            ObjectExpression(node) {\n                if (MODE === \"consistent\") {\n                    checkConsistency(node, false);\n                }\n                if (MODE === \"consistent-as-needed\") {\n                    checkConsistency(node, true);\n                }\n            }\n        };\n\n    }\n};\n/lib/rules/global-require.js\t/**\n * @fileoverview Rule for disallowing require() outside of the top-level module context\n * @author Jamund Ferguson\n * @deprecated in ESLint v7.0.0\n */\n\n\"use strict\";\n\nconst ACCEPTABLE_PARENTS = [\n    \"AssignmentExpression\",\n    \"VariableDeclarator\",\n    \"MemberExpression\",\n    \"ExpressionStatement\",\n    \"CallExpression\",\n    \"ConditionalExpression\",\n    \"Program\",\n    \"VariableDeclaration\",\n    \"ChainExpression\"\n];\n\n/**\n * Finds the eslint-scope reference in the given scope.\n * @param {Object} scope The scope to search.\n * @param {ASTNode} node The identifier node.\n * @returns {Reference|null} Returns the found reference or null if none were found.\n */\nfunction findReference(scope, node) {\n    const references = scope.references.filter(reference => reference.identifier.range[0] === node.range[0] &&\n            reference.identifier.range[1] === node.range[1]);\n\n    /* istanbul ignore else: correctly returns null */\n    if (references.length === 1) {\n        return references[0];\n    }\n    return null;\n\n}\n\n/**\n * Checks if the given identifier node is shadowed in the given scope.\n * @param {Object} scope The current scope.\n * @param {ASTNode} node The identifier node to check.\n * @returns {boolean} Whether or not the name is shadowed.\n */\nfunction isShadowed(scope, node) {\n    const reference = findReference(scope, node);\n\n    return reference && reference.resolved && reference.resolved.defs.length > 0;\n}\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        deprecated: true,\n\n        replacedBy: [],\n\n        type: \"suggestion\",\n\n        docs: {\n            description: \"require `require()` calls to be placed at top-level module scope\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/global-require\"\n        },\n\n        schema: [],\n        messages: {\n            unexpected: \"Unexpected require().\"\n        }\n    },\n\n    create(context) {\n        return {\n            CallExpression(node) {\n                const currentScope = context.getScope();\n\n                if (node.callee.name === \"require\" && !isShadowed(currentScope, node.callee)) {\n                    const isGoodRequire = context.getAncestors().every(parent => ACCEPTABLE_PARENTS.indexOf(parent.type) > -1);\n\n                    if (!isGoodRequire) {\n                        context.report({ node, messageId: \"unexpected\" });\n                    }\n                }\n            }\n        };\n    }\n};\n%/lib/source-code/token-store/utils.js\f/**\n * @fileoverview Define utility functions for token store.\n * @author Toru Nagashima\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\n/**\n * Gets `token.range[0]` from the given token.\n * @param {Node|Token|Comment} token The token to get.\n * @returns {number} The start location.\n * @private\n */\nfunction getStartLocation(token) {\n    return token.range[0];\n}\n\n//------------------------------------------------------------------------------\n// Exports\n//------------------------------------------------------------------------------\n\n/**\n * Finds the index of the first token which is after the given location.\n * If it was not found, this returns `tokens.length`.\n * @param {(Token|Comment)[]} tokens It searches the token in this list.\n * @param {number} location The location to search.\n * @returns {number} The found index or `tokens.length`.\n */\nexports.search = function search(tokens, location) {\n    const index = tokens.findIndex(el => location <= getStartLocation(el));\n\n    return index === -1 ? tokens.length : index;\n};\n\n/**\n * Gets the index of the `startLoc` in `tokens`.\n * `startLoc` can be the value of `node.range[1]`, so this checks about `startLoc - 1` as well.\n * @param {(Token|Comment)[]} tokens The tokens to find an index.\n * @param {Object} indexMap The map from locations to indices.\n * @param {number} startLoc The location to get an index.\n * @returns {number} The index.\n */\nexports.getFirstIndex = function getFirstIndex(tokens, indexMap, startLoc) {\n    if (startLoc in indexMap) {\n        return indexMap[startLoc];\n    }\n    if ((startLoc - 1) in indexMap) {\n        const index = indexMap[startLoc - 1];\n        const token = (index >= 0 && index < tokens.length) ? tokens[index] : null;\n\n        /*\n         * For the map of \"comment's location -> token's index\", it points the next token of a comment.\n         * In that case, +1 is unnecessary.\n         */\n        if (token && token.range[0] >= startLoc) {\n            return index;\n        }\n        return index + 1;\n    }\n    return 0;\n};\n\n/**\n * Gets the index of the `endLoc` in `tokens`.\n * The information of end locations are recorded at `endLoc - 1` in `indexMap`, so this checks about `endLoc - 1` as well.\n * @param {(Token|Comment)[]} tokens The tokens to find an index.\n * @param {Object} indexMap The map from locations to indices.\n * @param {number} endLoc The location to get an index.\n * @returns {number} The index.\n */\nexports.getLastIndex = function getLastIndex(tokens, indexMap, endLoc) {\n    if (endLoc in indexMap) {\n        return indexMap[endLoc] - 1;\n    }\n    if ((endLoc - 1) in indexMap) {\n        const index = indexMap[endLoc - 1];\n        const token = (index >= 0 && index < tokens.length) ? tokens[index] : null;\n\n        /*\n         * For the map of \"comment's location -> token's index\", it points the next token of a comment.\n         * In that case, -1 is necessary.\n         */\n        if (token && token.range[1] > endLoc) {\n            return index - 1;\n        }\n        return index;\n    }\n    return tokens.length - 1;\n};\n!/lib/rules/no-warning-comments.js\u0019/**\n * @fileoverview Rule that warns about used warning comments\n * @author Alexander Schmidt <https://github.com/lxanders>\n */\n\n\"use strict\";\n\nconst escapeRegExp = require(\"escape-string-regexp\");\nconst astUtils = require(\"./utils/ast-utils\");\n\nconst CHAR_LIMIT = 40;\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow specified warning terms in comments\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-warning-comments\"\n        },\n\n        schema: [\n            {\n                type: \"object\",\n                properties: {\n                    terms: {\n                        type: \"array\",\n                        items: {\n                            type: \"string\"\n                        }\n                    },\n                    location: {\n                        enum: [\"start\", \"anywhere\"]\n                    }\n                },\n                additionalProperties: false\n            }\n        ],\n\n        messages: {\n            unexpectedComment: \"Unexpected '{{matchedTerm}}' comment: '{{comment}}'.\"\n        }\n    },\n\n    create(context) {\n        const sourceCode = context.getSourceCode(),\n            configuration = context.options[0] || {},\n            warningTerms = configuration.terms || [\"todo\", \"fixme\", \"xxx\"],\n            location = configuration.location || \"start\",\n            selfConfigRegEx = /\\bno-warning-comments\\b/u;\n\n        /**\n         * Convert a warning term into a RegExp which will match a comment containing that whole word in the specified\n         * location (\"start\" or \"anywhere\"). If the term starts or ends with non word characters, then the match will not\n         * require word boundaries on that side.\n         * @param {string} term A term to convert to a RegExp\n         * @returns {RegExp} The term converted to a RegExp\n         */\n        function convertToRegExp(term) {\n            const escaped = escapeRegExp(term);\n            const wordBoundary = \"\\\\b\";\n            const eitherOrWordBoundary = `|${wordBoundary}`;\n            let prefix;\n\n            /*\n             * If the term ends in a word character (a-z0-9_), ensure a word\n             * boundary at the end, so that substrings do not get falsely\n             * matched. eg \"todo\" in a string such as \"mastodon\".\n             * If the term ends in a non-word character, then \\b won't match on\n             * the boundary to the next non-word character, which would likely\n             * be a space. For example `/\\bFIX!\\b/.test('FIX! blah') === false`.\n             * In these cases, use no bounding match. Same applies for the\n             * prefix, handled below.\n             */\n            const suffix = /\\w$/u.test(term) ? \"\\\\b\" : \"\";\n\n            if (location === \"start\") {\n\n                /*\n                 * When matching at the start, ignore leading whitespace, and\n                 * there's no need to worry about word boundaries.\n                 */\n                prefix = \"^\\\\s*\";\n            } else if (/^\\w/u.test(term)) {\n                prefix = wordBoundary;\n            } else {\n                prefix = \"\";\n            }\n\n            if (location === \"start\") {\n\n                /*\n                 * For location \"start\" the regex should be\n                 * ^\\s*TERM\\b.  This checks the word boundary\n                 * at the beginning of the comment.\n                 */\n                return new RegExp(prefix + escaped + suffix, \"iu\");\n            }\n\n            /*\n             * For location \"anywhere\" the regex should be\n             * \\bTERM\\b|\\bTERM\\b, this checks the entire comment\n             * for the term.\n             */\n            return new RegExp(\n                prefix +\n                    escaped +\n                    suffix +\n                    eitherOrWordBoundary +\n                    term +\n                    wordBoundary,\n                \"iu\"\n            );\n        }\n\n        const warningRegExps = warningTerms.map(convertToRegExp);\n\n        /**\n         * Checks the specified comment for matches of the configured warning terms and returns the matches.\n         * @param {string} comment The comment which is checked.\n         * @returns {Array} All matched warning terms for this comment.\n         */\n        function commentContainsWarningTerm(comment) {\n            const matches = [];\n\n            warningRegExps.forEach((regex, index) => {\n                if (regex.test(comment)) {\n                    matches.push(warningTerms[index]);\n                }\n            });\n\n            return matches;\n        }\n\n        /**\n         * Checks the specified node for matching warning comments and reports them.\n         * @param {ASTNode} node The AST node being checked.\n         * @returns {void} undefined.\n         */\n        function checkComment(node) {\n            const comment = node.value;\n\n            if (\n                astUtils.isDirectiveComment(node) &&\n                selfConfigRegEx.test(comment)\n            ) {\n                return;\n            }\n\n            const matches = commentContainsWarningTerm(comment);\n\n            matches.forEach(matchedTerm => {\n                let commentToDisplay = \"\";\n                let truncated = false;\n\n                for (const c of comment.trim().split(/\\s+/u)) {\n                    const tmp = commentToDisplay ? `${commentToDisplay} ${c}` : c;\n\n                    if (tmp.length <= CHAR_LIMIT) {\n                        commentToDisplay = tmp;\n                    } else {\n                        truncated = true;\n                        break;\n                    }\n                }\n\n                context.report({\n                    node,\n                    messageId: \"unexpectedComment\",\n                    data: {\n                        matchedTerm,\n                        comment: `${commentToDisplay}${\n                            truncated ? \"...\" : \"\"\n                        }`\n                    }\n                });\n            });\n        }\n\n        return {\n            Program() {\n                const comments = sourceCode.getAllComments();\n\n                comments\n                    .filter(token => token.type !== \"Shebang\")\n                    .forEach(checkComment);\n            }\n        };\n    }\n};\n/lib/rules/no-var.js0|/**\n * @fileoverview Rule to check for the usage of var.\n * @author Jamund Ferguson\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\n/**\n * Check whether a given variable is a global variable or not.\n * @param {eslint-scope.Variable} variable The variable to check.\n * @returns {boolean} `true` if the variable is a global variable.\n */\nfunction isGlobal(variable) {\n    return Boolean(variable.scope) && variable.scope.type === \"global\";\n}\n\n/**\n * Finds the nearest function scope or global scope walking up the scope\n * hierarchy.\n * @param {eslint-scope.Scope} scope The scope to traverse.\n * @returns {eslint-scope.Scope} a function scope or global scope containing the given\n *      scope.\n */\nfunction getEnclosingFunctionScope(scope) {\n    let currentScope = scope;\n\n    while (currentScope.type !== \"function\" && currentScope.type !== \"global\") {\n        currentScope = currentScope.upper;\n    }\n    return currentScope;\n}\n\n/**\n * Checks whether the given variable has any references from a more specific\n * function expression (i.e. a closure).\n * @param {eslint-scope.Variable} variable A variable to check.\n * @returns {boolean} `true` if the variable is used from a closure.\n */\nfunction isReferencedInClosure(variable) {\n    const enclosingFunctionScope = getEnclosingFunctionScope(variable.scope);\n\n    return variable.references.some(reference =>\n        getEnclosingFunctionScope(reference.from) !== enclosingFunctionScope);\n}\n\n/**\n * Checks whether the given node is the assignee of a loop.\n * @param {ASTNode} node A VariableDeclaration node to check.\n * @returns {boolean} `true` if the declaration is assigned as part of loop\n *      iteration.\n */\nfunction isLoopAssignee(node) {\n    return (node.parent.type === \"ForOfStatement\" || node.parent.type === \"ForInStatement\") &&\n        node === node.parent.left;\n}\n\n/**\n * Checks whether the given variable declaration is immediately initialized.\n * @param {ASTNode} node A VariableDeclaration node to check.\n * @returns {boolean} `true` if the declaration has an initializer.\n */\nfunction isDeclarationInitialized(node) {\n    return node.declarations.every(declarator => declarator.init !== null);\n}\n\nconst SCOPE_NODE_TYPE = /^(?:Program|BlockStatement|SwitchStatement|ForStatement|ForInStatement|ForOfStatement)$/u;\n\n/**\n * Gets the scope node which directly contains a given node.\n * @param {ASTNode} node A node to get. This is a `VariableDeclaration` or\n *      an `Identifier`.\n * @returns {ASTNode} A scope node. This is one of `Program`, `BlockStatement`,\n *      `SwitchStatement`, `ForStatement`, `ForInStatement`, and\n *      `ForOfStatement`.\n */\nfunction getScopeNode(node) {\n    for (let currentNode = node; currentNode; currentNode = currentNode.parent) {\n        if (SCOPE_NODE_TYPE.test(currentNode.type)) {\n            return currentNode;\n        }\n    }\n\n    /* istanbul ignore next : unreachable */\n    return null;\n}\n\n/**\n * Checks whether a given variable is redeclared or not.\n * @param {eslint-scope.Variable} variable A variable to check.\n * @returns {boolean} `true` if the variable is redeclared.\n */\nfunction isRedeclared(variable) {\n    return variable.defs.length >= 2;\n}\n\n/**\n * Checks whether a given variable is used from outside of the specified scope.\n * @param {ASTNode} scopeNode A scope node to check.\n * @returns {Function} The predicate function which checks whether a given\n *      variable is used from outside of the specified scope.\n */\nfunction isUsedFromOutsideOf(scopeNode) {\n\n    /**\n     * Checks whether a given reference is inside of the specified scope or not.\n     * @param {eslint-scope.Reference} reference A reference to check.\n     * @returns {boolean} `true` if the reference is inside of the specified\n     *      scope.\n     */\n    function isOutsideOfScope(reference) {\n        const scope = scopeNode.range;\n        const id = reference.identifier.range;\n\n        return id[0] < scope[0] || id[1] > scope[1];\n    }\n\n    return function(variable) {\n        return variable.references.some(isOutsideOfScope);\n    };\n}\n\n/**\n * Creates the predicate function which checks whether a variable has their references in TDZ.\n *\n * The predicate function would return `true`:\n *\n * - if a reference is before the declarator. E.g. (var a = b, b = 1;)(var {a = b, b} = {};)\n * - if a reference is in the expression of their default value.  E.g. (var {a = a} = {};)\n * - if a reference is in the expression of their initializer.  E.g. (var a = a;)\n * @param {ASTNode} node The initializer node of VariableDeclarator.\n * @returns {Function} The predicate function.\n * @private\n */\nfunction hasReferenceInTDZ(node) {\n    const initStart = node.range[0];\n    const initEnd = node.range[1];\n\n    return variable => {\n        const id = variable.defs[0].name;\n        const idStart = id.range[0];\n        const defaultValue = (id.parent.type === \"AssignmentPattern\" ? id.parent.right : null);\n        const defaultStart = defaultValue && defaultValue.range[0];\n        const defaultEnd = defaultValue && defaultValue.range[1];\n\n        return variable.references.some(reference => {\n            const start = reference.identifier.range[0];\n            const end = reference.identifier.range[1];\n\n            return !reference.init && (\n                start < idStart ||\n                (defaultValue !== null && start >= defaultStart && end <= defaultEnd) ||\n                (start >= initStart && end <= initEnd)\n            );\n        });\n    };\n}\n\n/**\n * Checks whether a given variable has name that is allowed for 'var' declarations,\n * but disallowed for `let` declarations.\n * @param {eslint-scope.Variable} variable The variable to check.\n * @returns {boolean} `true` if the variable has a disallowed name.\n */\nfunction hasNameDisallowedForLetDeclarations(variable) {\n    return variable.name === \"let\";\n}\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"require `let` or `const` instead of `var`\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-var\"\n        },\n\n        schema: [],\n        fixable: \"code\",\n\n        messages: {\n            unexpectedVar: \"Unexpected var, use let or const instead.\"\n        }\n    },\n\n    create(context) {\n        const sourceCode = context.getSourceCode();\n\n        /**\n         * Checks whether the variables which are defined by the given declarator node have their references in TDZ.\n         * @param {ASTNode} declarator The VariableDeclarator node to check.\n         * @returns {boolean} `true` if one of the variables which are defined by the given declarator node have their references in TDZ.\n         */\n        function hasSelfReferenceInTDZ(declarator) {\n            if (!declarator.init) {\n                return false;\n            }\n            const variables = context.getDeclaredVariables(declarator);\n\n            return variables.some(hasReferenceInTDZ(declarator.init));\n        }\n\n        /**\n         * Checks whether it can fix a given variable declaration or not.\n         * It cannot fix if the following cases:\n         *\n         * - A variable is a global variable.\n         * - A variable is declared on a SwitchCase node.\n         * - A variable is redeclared.\n         * - A variable is used from outside the scope.\n         * - A variable is used from a closure within a loop.\n         * - A variable might be used before it is assigned within a loop.\n         * - A variable might be used in TDZ.\n         * - A variable is declared in statement position (e.g. a single-line `IfStatement`)\n         * - A variable has name that is disallowed for `let` declarations.\n         *\n         * ## A variable is declared on a SwitchCase node.\n         *\n         * If this rule modifies 'var' declarations on a SwitchCase node, it\n         * would generate the warnings of 'no-case-declarations' rule. And the\n         * 'eslint:recommended' preset includes 'no-case-declarations' rule, so\n         * this rule doesn't modify those declarations.\n         *\n         * ## A variable is redeclared.\n         *\n         * The language spec disallows redeclarations of `let` declarations.\n         * Those variables would cause syntax errors.\n         *\n         * ## A variable is used from outside the scope.\n         *\n         * The language spec disallows accesses from outside of the scope for\n         * `let` declarations. Those variables would cause reference errors.\n         *\n         * ## A variable is used from a closure within a loop.\n         *\n         * A `var` declaration within a loop shares the same variable instance\n         * across all loop iterations, while a `let` declaration creates a new\n         * instance for each iteration. This means if a variable in a loop is\n         * referenced by any closure, changing it from `var` to `let` would\n         * change the behavior in a way that is generally unsafe.\n         *\n         * ## A variable might be used before it is assigned within a loop.\n         *\n         * Within a loop, a `let` declaration without an initializer will be\n         * initialized to null, while a `var` declaration will retain its value\n         * from the previous iteration, so it is only safe to change `var` to\n         * `let` if we can statically determine that the variable is always\n         * assigned a value before its first access in the loop body. To keep\n         * the implementation simple, we only convert `var` to `let` within\n         * loops when the variable is a loop assignee or the declaration has an\n         * initializer.\n         * @param {ASTNode} node A variable declaration node to check.\n         * @returns {boolean} `true` if it can fix the node.\n         */\n        function canFix(node) {\n            const variables = context.getDeclaredVariables(node);\n            const scopeNode = getScopeNode(node);\n\n            if (node.parent.type === \"SwitchCase\" ||\n                node.declarations.some(hasSelfReferenceInTDZ) ||\n                variables.some(isGlobal) ||\n                variables.some(isRedeclared) ||\n                variables.some(isUsedFromOutsideOf(scopeNode)) ||\n                variables.some(hasNameDisallowedForLetDeclarations)\n            ) {\n                return false;\n            }\n\n            if (astUtils.isInLoop(node)) {\n                if (variables.some(isReferencedInClosure)) {\n                    return false;\n                }\n                if (!isLoopAssignee(node) && !isDeclarationInitialized(node)) {\n                    return false;\n                }\n            }\n\n            if (\n                !isLoopAssignee(node) &&\n                !(node.parent.type === \"ForStatement\" && node.parent.init === node) &&\n                !astUtils.STATEMENT_LIST_PARENTS.has(node.parent.type)\n            ) {\n\n                // If the declaration is not in a block, e.g. `if (foo) var bar = 1;`, then it can't be fixed.\n                return false;\n            }\n\n            return true;\n        }\n\n        /**\n         * Reports a given variable declaration node.\n         * @param {ASTNode} node A variable declaration node to report.\n         * @returns {void}\n         */\n        function report(node) {\n            context.report({\n                node,\n                messageId: \"unexpectedVar\",\n\n                fix(fixer) {\n                    const varToken = sourceCode.getFirstToken(node, { filter: t => t.value === \"var\" });\n\n                    return canFix(node)\n                        ? fixer.replaceText(varToken, \"let\")\n                        : null;\n                }\n            });\n        }\n\n        return {\n            \"VariableDeclaration:exit\"(node) {\n                if (node.kind === \"var\") {\n                    report(node);\n                }\n            }\n        };\n    }\n};\n/lib/source-code/source-code.jsX\u0001/**\n * @fileoverview Abstraction of JavaScript source code.\n * @author Nicholas C. Zakas\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst\n    { isCommentToken } = require(\"eslint-utils\"),\n    TokenStore = require(\"./token-store\"),\n    astUtils = require(\"../shared/ast-utils\"),\n    Traverser = require(\"../shared/traverser\");\n\n//------------------------------------------------------------------------------\n// Private\n//------------------------------------------------------------------------------\n\n/**\n * Validates that the given AST has the required information.\n * @param {ASTNode} ast The Program node of the AST to check.\n * @throws {Error} If the AST doesn't contain the correct information.\n * @returns {void}\n * @private\n */\nfunction validate(ast) {\n    if (!ast.tokens) {\n        throw new Error(\"AST is missing the tokens array.\");\n    }\n\n    if (!ast.comments) {\n        throw new Error(\"AST is missing the comments array.\");\n    }\n\n    if (!ast.loc) {\n        throw new Error(\"AST is missing location information.\");\n    }\n\n    if (!ast.range) {\n        throw new Error(\"AST is missing range information\");\n    }\n}\n\n/**\n * Check to see if its a ES6 export declaration.\n * @param {ASTNode} astNode An AST node.\n * @returns {boolean} whether the given node represents an export declaration.\n * @private\n */\nfunction looksLikeExport(astNode) {\n    return astNode.type === \"ExportDefaultDeclaration\" || astNode.type === \"ExportNamedDeclaration\" ||\n        astNode.type === \"ExportAllDeclaration\" || astNode.type === \"ExportSpecifier\";\n}\n\n/**\n * Merges two sorted lists into a larger sorted list in O(n) time.\n * @param {Token[]} tokens The list of tokens.\n * @param {Token[]} comments The list of comments.\n * @returns {Token[]} A sorted list of tokens and comments.\n * @private\n */\nfunction sortedMerge(tokens, comments) {\n    const result = [];\n    let tokenIndex = 0;\n    let commentIndex = 0;\n\n    while (tokenIndex < tokens.length || commentIndex < comments.length) {\n        if (commentIndex >= comments.length || tokenIndex < tokens.length && tokens[tokenIndex].range[0] < comments[commentIndex].range[0]) {\n            result.push(tokens[tokenIndex++]);\n        } else {\n            result.push(comments[commentIndex++]);\n        }\n    }\n\n    return result;\n}\n\n/**\n * Determines if two nodes or tokens overlap.\n * @param {ASTNode|Token} first The first node or token to check.\n * @param {ASTNode|Token} second The second node or token to check.\n * @returns {boolean} True if the two nodes or tokens overlap.\n * @private\n */\nfunction nodesOrTokensOverlap(first, second) {\n    return (first.range[0] <= second.range[0] && first.range[1] >= second.range[0]) ||\n        (second.range[0] <= first.range[0] && second.range[1] >= first.range[0]);\n}\n\n/**\n * Determines if two nodes or tokens have at least one whitespace character\n * between them. Order does not matter. Returns false if the given nodes or\n * tokens overlap.\n * @param {SourceCode} sourceCode The source code object.\n * @param {ASTNode|Token} first The first node or token to check between.\n * @param {ASTNode|Token} second The second node or token to check between.\n * @param {boolean} checkInsideOfJSXText If `true` is present, check inside of JSXText tokens for backward compatibility.\n * @returns {boolean} True if there is a whitespace character between\n * any of the tokens found between the two given nodes or tokens.\n * @public\n */\nfunction isSpaceBetween(sourceCode, first, second, checkInsideOfJSXText) {\n    if (nodesOrTokensOverlap(first, second)) {\n        return false;\n    }\n\n    const [startingNodeOrToken, endingNodeOrToken] = first.range[1] <= second.range[0]\n        ? [first, second]\n        : [second, first];\n    const firstToken = sourceCode.getLastToken(startingNodeOrToken) || startingNodeOrToken;\n    const finalToken = sourceCode.getFirstToken(endingNodeOrToken) || endingNodeOrToken;\n    let currentToken = firstToken;\n\n    while (currentToken !== finalToken) {\n        const nextToken = sourceCode.getTokenAfter(currentToken, { includeComments: true });\n\n        if (\n            currentToken.range[1] !== nextToken.range[0] ||\n\n                /*\n                 * For backward compatibility, check spaces in JSXText.\n                 * https://github.com/eslint/eslint/issues/12614\n                 */\n                (\n                    checkInsideOfJSXText &&\n                    nextToken !== finalToken &&\n                    nextToken.type === \"JSXText\" &&\n                    /\\s/u.test(nextToken.value)\n                )\n        ) {\n            return true;\n        }\n\n        currentToken = nextToken;\n    }\n\n    return false;\n}\n\n//------------------------------------------------------------------------------\n// Public Interface\n//------------------------------------------------------------------------------\n\n/**\n * Represents parsed source code.\n */\nclass SourceCode extends TokenStore {\n\n    /**\n     * @param {string|Object} textOrConfig The source code text or config object.\n     * @param {string} textOrConfig.text The source code text.\n     * @param {ASTNode} textOrConfig.ast The Program node of the AST representing the code. This AST should be created from the text that BOM was stripped.\n     * @param {Object|null} textOrConfig.parserServices The parser services.\n     * @param {ScopeManager|null} textOrConfig.scopeManager The scope of this source code.\n     * @param {Object|null} textOrConfig.visitorKeys The visitor keys to traverse AST.\n     * @param {ASTNode} [astIfNoConfig] The Program node of the AST representing the code. This AST should be created from the text that BOM was stripped.\n     */\n    constructor(textOrConfig, astIfNoConfig) {\n        let text, ast, parserServices, scopeManager, visitorKeys;\n\n        // Process overloading.\n        if (typeof textOrConfig === \"string\") {\n            text = textOrConfig;\n            ast = astIfNoConfig;\n        } else if (typeof textOrConfig === \"object\" && textOrConfig !== null) {\n            text = textOrConfig.text;\n            ast = textOrConfig.ast;\n            parserServices = textOrConfig.parserServices;\n            scopeManager = textOrConfig.scopeManager;\n            visitorKeys = textOrConfig.visitorKeys;\n        }\n\n        validate(ast);\n        super(ast.tokens, ast.comments);\n\n        /**\n         * The flag to indicate that the source code has Unicode BOM.\n         * @type {boolean}\n         */\n        this.hasBOM = (text.charCodeAt(0) === 0xFEFF);\n\n        /**\n         * The original text source code.\n         * BOM was stripped from this text.\n         * @type {string}\n         */\n        this.text = (this.hasBOM ? text.slice(1) : text);\n\n        /**\n         * The parsed AST for the source code.\n         * @type {ASTNode}\n         */\n        this.ast = ast;\n\n        /**\n         * The parser services of this source code.\n         * @type {Object}\n         */\n        this.parserServices = parserServices || {};\n\n        /**\n         * The scope of this source code.\n         * @type {ScopeManager|null}\n         */\n        this.scopeManager = scopeManager || null;\n\n        /**\n         * The visitor keys to traverse AST.\n         * @type {Object}\n         */\n        this.visitorKeys = visitorKeys || Traverser.DEFAULT_VISITOR_KEYS;\n\n        // Check the source text for the presence of a shebang since it is parsed as a standard line comment.\n        const shebangMatched = this.text.match(astUtils.shebangPattern);\n        const hasShebang = shebangMatched && ast.comments.length && ast.comments[0].value === shebangMatched[1];\n\n        if (hasShebang) {\n            ast.comments[0].type = \"Shebang\";\n        }\n\n        this.tokensAndComments = sortedMerge(ast.tokens, ast.comments);\n\n        /**\n         * The source code split into lines according to ECMA-262 specification.\n         * This is done to avoid each rule needing to do so separately.\n         * @type {string[]}\n         */\n        this.lines = [];\n        this.lineStartIndices = [0];\n\n        const lineEndingPattern = astUtils.createGlobalLinebreakMatcher();\n        let match;\n\n        /*\n         * Previously, this was implemented using a regex that\n         * matched a sequence of non-linebreak characters followed by a\n         * linebreak, then adding the lengths of the matches. However,\n         * this caused a catastrophic backtracking issue when the end\n         * of a file contained a large number of non-newline characters.\n         * To avoid this, the current implementation just matches newlines\n         * and uses match.index to get the correct line start indices.\n         */\n        while ((match = lineEndingPattern.exec(this.text))) {\n            this.lines.push(this.text.slice(this.lineStartIndices[this.lineStartIndices.length - 1], match.index));\n            this.lineStartIndices.push(match.index + match[0].length);\n        }\n        this.lines.push(this.text.slice(this.lineStartIndices[this.lineStartIndices.length - 1]));\n\n        // Cache for comments found using getComments().\n        this._commentCache = new WeakMap();\n\n        // don't allow modification of this object\n        Object.freeze(this);\n        Object.freeze(this.lines);\n    }\n\n    /**\n     * Split the source code into multiple lines based on the line delimiters.\n     * @param {string} text Source code as a string.\n     * @returns {string[]} Array of source code lines.\n     * @public\n     */\n    static splitLines(text) {\n        return text.split(astUtils.createGlobalLinebreakMatcher());\n    }\n\n    /**\n     * Gets the source code for the given node.\n     * @param {ASTNode} [node] The AST node to get the text for.\n     * @param {int} [beforeCount] The number of characters before the node to retrieve.\n     * @param {int} [afterCount] The number of characters after the node to retrieve.\n     * @returns {string} The text representing the AST node.\n     * @public\n     */\n    getText(node, beforeCount, afterCount) {\n        if (node) {\n            return this.text.slice(Math.max(node.range[0] - (beforeCount || 0), 0),\n                node.range[1] + (afterCount || 0));\n        }\n        return this.text;\n    }\n\n    /**\n     * Gets the entire source text split into an array of lines.\n     * @returns {Array} The source text as an array of lines.\n     * @public\n     */\n    getLines() {\n        return this.lines;\n    }\n\n    /**\n     * Retrieves an array containing all comments in the source code.\n     * @returns {ASTNode[]} An array of comment nodes.\n     * @public\n     */\n    getAllComments() {\n        return this.ast.comments;\n    }\n\n    /**\n     * Gets all comments for the given node.\n     * @param {ASTNode} node The AST node to get the comments for.\n     * @returns {Object} An object containing a leading and trailing array\n     *      of comments indexed by their position.\n     * @public\n     * @deprecated replaced by getCommentsBefore(), getCommentsAfter(), and getCommentsInside().\n     */\n    getComments(node) {\n        if (this._commentCache.has(node)) {\n            return this._commentCache.get(node);\n        }\n\n        const comments = {\n            leading: [],\n            trailing: []\n        };\n\n        /*\n         * Return all comments as leading comments of the Program node when\n         * there is no executable code.\n         */\n        if (node.type === \"Program\") {\n            if (node.body.length === 0) {\n                comments.leading = node.comments;\n            }\n        } else {\n\n            /*\n             * Return comments as trailing comments of nodes that only contain\n             * comments (to mimic the comment attachment behavior present in Espree).\n             */\n            if ((node.type === \"BlockStatement\" || node.type === \"ClassBody\") && node.body.length === 0 ||\n                node.type === \"ObjectExpression\" && node.properties.length === 0 ||\n                node.type === \"ArrayExpression\" && node.elements.length === 0 ||\n                node.type === \"SwitchStatement\" && node.cases.length === 0\n            ) {\n                comments.trailing = this.getTokens(node, {\n                    includeComments: true,\n                    filter: isCommentToken\n                });\n            }\n\n            /*\n             * Iterate over tokens before and after node and collect comment tokens.\n             * Do not include comments that exist outside of the parent node\n             * to avoid duplication.\n             */\n            let currentToken = this.getTokenBefore(node, { includeComments: true });\n\n            while (currentToken && isCommentToken(currentToken)) {\n                if (node.parent && node.parent.type !== \"Program\" && (currentToken.start < node.parent.start)) {\n                    break;\n                }\n                comments.leading.push(currentToken);\n                currentToken = this.getTokenBefore(currentToken, { includeComments: true });\n            }\n\n            comments.leading.reverse();\n\n            currentToken = this.getTokenAfter(node, { includeComments: true });\n\n            while (currentToken && isCommentToken(currentToken)) {\n                if (node.parent && node.parent.type !== \"Program\" && (currentToken.end > node.parent.end)) {\n                    break;\n                }\n                comments.trailing.push(currentToken);\n                currentToken = this.getTokenAfter(currentToken, { includeComments: true });\n            }\n        }\n\n        this._commentCache.set(node, comments);\n        return comments;\n    }\n\n    /**\n     * Retrieves the JSDoc comment for a given node.\n     * @param {ASTNode} node The AST node to get the comment for.\n     * @returns {Token|null} The Block comment token containing the JSDoc comment\n     *      for the given node or null if not found.\n     * @public\n     * @deprecated\n     */\n    getJSDocComment(node) {\n\n        /**\n         * Checks for the presence of a JSDoc comment for the given node and returns it.\n         * @param {ASTNode} astNode The AST node to get the comment for.\n         * @returns {Token|null} The Block comment token containing the JSDoc comment\n         *      for the given node or null if not found.\n         * @private\n         */\n        const findJSDocComment = astNode => {\n            const tokenBefore = this.getTokenBefore(astNode, { includeComments: true });\n\n            if (\n                tokenBefore &&\n                isCommentToken(tokenBefore) &&\n                tokenBefore.type === \"Block\" &&\n                tokenBefore.value.charAt(0) === \"*\" &&\n                astNode.loc.start.line - tokenBefore.loc.end.line <= 1\n            ) {\n                return tokenBefore;\n            }\n\n            return null;\n        };\n        let parent = node.parent;\n\n        switch (node.type) {\n            case \"ClassDeclaration\":\n            case \"FunctionDeclaration\":\n                return findJSDocComment(looksLikeExport(parent) ? parent : node);\n\n            case \"ClassExpression\":\n                return findJSDocComment(parent.parent);\n\n            case \"ArrowFunctionExpression\":\n            case \"FunctionExpression\":\n                if (parent.type !== \"CallExpression\" && parent.type !== \"NewExpression\") {\n                    while (\n                        !this.getCommentsBefore(parent).length &&\n                        !/Function/u.test(parent.type) &&\n                        parent.type !== \"MethodDefinition\" &&\n                        parent.type !== \"Property\"\n                    ) {\n                        parent = parent.parent;\n\n                        if (!parent) {\n                            break;\n                        }\n                    }\n\n                    if (parent && parent.type !== \"FunctionDeclaration\" && parent.type !== \"Program\") {\n                        return findJSDocComment(parent);\n                    }\n                }\n\n                return findJSDocComment(node);\n\n            // falls through\n            default:\n                return null;\n        }\n    }\n\n    /**\n     * Gets the deepest node containing a range index.\n     * @param {int} index Range index of the desired node.\n     * @returns {ASTNode} The node if found or null if not found.\n     * @public\n     */\n    getNodeByRangeIndex(index) {\n        let result = null;\n\n        Traverser.traverse(this.ast, {\n            visitorKeys: this.visitorKeys,\n            enter(node) {\n                if (node.range[0] <= index && index < node.range[1]) {\n                    result = node;\n                } else {\n                    this.skip();\n                }\n            },\n            leave(node) {\n                if (node === result) {\n                    this.break();\n                }\n            }\n        });\n\n        return result;\n    }\n\n    /**\n     * Determines if two nodes or tokens have at least one whitespace character\n     * between them. Order does not matter. Returns false if the given nodes or\n     * tokens overlap.\n     * @param {ASTNode|Token} first The first node or token to check between.\n     * @param {ASTNode|Token} second The second node or token to check between.\n     * @returns {boolean} True if there is a whitespace character between\n     * any of the tokens found between the two given nodes or tokens.\n     * @public\n     */\n    isSpaceBetween(first, second) {\n        return isSpaceBetween(this, first, second, false);\n    }\n\n    /**\n     * Determines if two nodes or tokens have at least one whitespace character\n     * between them. Order does not matter. Returns false if the given nodes or\n     * tokens overlap.\n     * For backward compatibility, this method returns true if there are\n     * `JSXText` tokens that contain whitespaces between the two.\n     * @param {ASTNode|Token} first The first node or token to check between.\n     * @param {ASTNode|Token} second The second node or token to check between.\n     * @returns {boolean} True if there is a whitespace character between\n     * any of the tokens found between the two given nodes or tokens.\n     * @deprecated in favor of isSpaceBetween().\n     * @public\n     */\n    isSpaceBetweenTokens(first, second) {\n        return isSpaceBetween(this, first, second, true);\n    }\n\n    /**\n     * Converts a source text index into a (line, column) pair.\n     * @param {number} index The index of a character in a file\n     * @throws {TypeError} If non-numeric index or index out of range.\n     * @returns {Object} A {line, column} location object with a 0-indexed column\n     * @public\n     */\n    getLocFromIndex(index) {\n        if (typeof index !== \"number\") {\n            throw new TypeError(\"Expected `index` to be a number.\");\n        }\n\n        if (index < 0 || index > this.text.length) {\n            throw new RangeError(`Index out of range (requested index ${index}, but source text has length ${this.text.length}).`);\n        }\n\n        /*\n         * For an argument of this.text.length, return the location one \"spot\" past the last character\n         * of the file. If the last character is a linebreak, the location will be column 0 of the next\n         * line; otherwise, the location will be in the next column on the same line.\n         *\n         * See getIndexFromLoc for the motivation for this special case.\n         */\n        if (index === this.text.length) {\n            return { line: this.lines.length, column: this.lines[this.lines.length - 1].length };\n        }\n\n        /*\n         * To figure out which line index is on, determine the last place at which index could\n         * be inserted into lineStartIndices to keep the list sorted.\n         */\n        const lineNumber = index >= this.lineStartIndices[this.lineStartIndices.length - 1]\n            ? this.lineStartIndices.length\n            : this.lineStartIndices.findIndex(el => index < el);\n\n        return { line: lineNumber, column: index - this.lineStartIndices[lineNumber - 1] };\n    }\n\n    /**\n     * Converts a (line, column) pair into a range index.\n     * @param {Object} loc A line/column location\n     * @param {number} loc.line The line number of the location (1-indexed)\n     * @param {number} loc.column The column number of the location (0-indexed)\n     * @throws {TypeError|RangeError} If `loc` is not an object with a numeric\n     *   `line` and `column`, if the `line` is less than or equal to zero or\n     *   the line or column is out of the expected range.\n     * @returns {number} The range index of the location in the file.\n     * @public\n     */\n    getIndexFromLoc(loc) {\n        if (typeof loc !== \"object\" || typeof loc.line !== \"number\" || typeof loc.column !== \"number\") {\n            throw new TypeError(\"Expected `loc` to be an object with numeric `line` and `column` properties.\");\n        }\n\n        if (loc.line <= 0) {\n            throw new RangeError(`Line number out of range (line ${loc.line} requested). Line numbers should be 1-based.`);\n        }\n\n        if (loc.line > this.lineStartIndices.length) {\n            throw new RangeError(`Line number out of range (line ${loc.line} requested, but only ${this.lineStartIndices.length} lines present).`);\n        }\n\n        const lineStartIndex = this.lineStartIndices[loc.line - 1];\n        const lineEndIndex = loc.line === this.lineStartIndices.length ? this.text.length : this.lineStartIndices[loc.line];\n        const positionIndex = lineStartIndex + loc.column;\n\n        /*\n         * By design, getIndexFromLoc({ line: lineNum, column: 0 }) should return the start index of\n         * the given line, provided that the line number is valid element of this.lines. Since the\n         * last element of this.lines is an empty string for files with trailing newlines, add a\n         * special case where getting the index for the first location after the end of the file\n         * will return the length of the file, rather than throwing an error. This allows rules to\n         * use getIndexFromLoc consistently without worrying about edge cases at the end of a file.\n         */\n        if (\n            loc.line === this.lineStartIndices.length && positionIndex > lineEndIndex ||\n            loc.line < this.lineStartIndices.length && positionIndex >= lineEndIndex\n        ) {\n            throw new RangeError(`Column number out of range (column ${loc.column} requested, but the length of line ${loc.line} is ${lineEndIndex - lineStartIndex}).`);\n        }\n\n        return positionIndex;\n    }\n}\n\nmodule.exports = SourceCode;\n/messages/no-config-found.js\u0002\f\"use strict\";\n\nmodule.exports = function(it) {\n    const { directoryPath } = it;\n\n    return `\nESLint couldn't find a configuration file. To set up a configuration file for this project, please run:\n\n    npm init @eslint/config\n\nESLint looked for configuration files in ${directoryPath} and its ancestors. If it found none, it then looked in your home directory.\n\nIf you think you already have a configuration file or if you need more help, please stop by the ESLint chat room: https://eslint.org/chat/help\n`.trimLeft();\n};\n/lib/rules/for-direction.js\u0011\u001e/**\n * @fileoverview enforce \"for\" loop update clause moving the counter in the right direction.(for-direction)\n * @author Aladdin-ADD<hh_2013@foxmail.com>\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"problem\",\n\n        docs: {\n            description: \"enforce \\\"for\\\" loop update clause moving the counter in the right direction.\",\n            recommended: true,\n            url: \"https://eslint.org/docs/rules/for-direction\"\n        },\n\n        fixable: null,\n        schema: [],\n\n        messages: {\n            incorrectDirection: \"The update clause in this loop moves the variable in the wrong direction.\"\n        }\n    },\n\n    create(context) {\n\n        /**\n         * report an error.\n         * @param {ASTNode} node the node to report.\n         * @returns {void}\n         */\n        function report(node) {\n            context.report({\n                node,\n                messageId: \"incorrectDirection\"\n            });\n        }\n\n        /**\n         * check the right side of the assignment\n         * @param {ASTNode} update UpdateExpression to check\n         * @param {int} dir expected direction that could either be turned around or invalidated\n         * @returns {int} return dir, the negated dir or zero if it's not clear for identifiers\n         */\n        function getRightDirection(update, dir) {\n            if (update.right.type === \"UnaryExpression\") {\n                if (update.right.operator === \"-\") {\n                    return -dir;\n                }\n            } else if (update.right.type === \"Identifier\") {\n                return 0;\n            }\n            return dir;\n        }\n\n        /**\n         * check UpdateExpression add/sub the counter\n         * @param {ASTNode} update UpdateExpression to check\n         * @param {string} counter variable name to check\n         * @returns {int} if add return 1, if sub return -1, if nochange, return 0\n         */\n        function getUpdateDirection(update, counter) {\n            if (update.argument.type === \"Identifier\" && update.argument.name === counter) {\n                if (update.operator === \"++\") {\n                    return 1;\n                }\n                if (update.operator === \"--\") {\n                    return -1;\n                }\n            }\n            return 0;\n        }\n\n        /**\n         * check AssignmentExpression add/sub the counter\n         * @param {ASTNode} update AssignmentExpression to check\n         * @param {string} counter variable name to check\n         * @returns {int} if add return 1, if sub return -1, if nochange, return 0\n         */\n        function getAssignmentDirection(update, counter) {\n            if (update.left.name === counter) {\n                if (update.operator === \"+=\") {\n                    return getRightDirection(update, 1);\n                }\n                if (update.operator === \"-=\") {\n                    return getRightDirection(update, -1);\n                }\n            }\n            return 0;\n        }\n        return {\n            ForStatement(node) {\n\n                if (node.test && node.test.type === \"BinaryExpression\" && node.test.left.type === \"Identifier\" && node.update) {\n                    const counter = node.test.left.name;\n                    const operator = node.test.operator;\n                    const update = node.update;\n\n                    let wrongDirection;\n\n                    if (operator === \"<\" || operator === \"<=\") {\n                        wrongDirection = -1;\n                    } else if (operator === \">\" || operator === \">=\") {\n                        wrongDirection = 1;\n                    } else {\n                        return;\n                    }\n\n                    if (update.type === \"UpdateExpression\") {\n                        if (getUpdateDirection(update, counter) === wrongDirection) {\n                            report(node);\n                        }\n                    } else if (update.type === \"AssignmentExpression\" && getAssignmentDirection(update, counter) === wrongDirection) {\n                        report(node);\n                    }\n                }\n            }\n        };\n    }\n};\n./lib/linter/code-path-analysis/id-generator.js\u0003/**\n * @fileoverview A class of identifiers generator for code path segments.\n *\n * Each rule uses the identifier of code path segments to store additional\n * information of the code path.\n *\n * @author Toru Nagashima\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Public Interface\n//------------------------------------------------------------------------------\n\n/**\n * A generator for unique ids.\n */\nclass IdGenerator {\n\n    /**\n     * @param {string} prefix Optional. A prefix of generated ids.\n     */\n    constructor(prefix) {\n        this.prefix = String(prefix);\n        this.n = 0;\n    }\n\n    /**\n     * Generates id.\n     * @returns {string} A generated id.\n     */\n    next() {\n        this.n = 1 + this.n | 0;\n\n        /* istanbul ignore if */\n        if (this.n < 0) {\n            this.n = 1;\n        }\n\n        return this.prefix + this.n;\n    }\n}\n\nmodule.exports = IdGenerator;\n&/lib/rules/no-restricted-properties.js\u001a/**\n * @fileoverview Rule to disallow certain object properties\n * @author Will Klein & Eli White\n */\n\n\"use strict\";\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow certain properties on certain objects\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-restricted-properties\"\n        },\n\n        schema: {\n            type: \"array\",\n            items: {\n                anyOf: [ // `object` and `property` are both optional, but at least one of them must be provided.\n                    {\n                        type: \"object\",\n                        properties: {\n                            object: {\n                                type: \"string\"\n                            },\n                            property: {\n                                type: \"string\"\n                            },\n                            message: {\n                                type: \"string\"\n                            }\n                        },\n                        additionalProperties: false,\n                        required: [\"object\"]\n                    },\n                    {\n                        type: \"object\",\n                        properties: {\n                            object: {\n                                type: \"string\"\n                            },\n                            property: {\n                                type: \"string\"\n                            },\n                            message: {\n                                type: \"string\"\n                            }\n                        },\n                        additionalProperties: false,\n                        required: [\"property\"]\n                    }\n                ]\n            },\n            uniqueItems: true\n        },\n\n        messages: {\n            // eslint-disable-next-line eslint-plugin/report-message-format -- Custom message might not end in a period\n            restrictedObjectProperty: \"'{{objectName}}.{{propertyName}}' is restricted from being used.{{message}}\",\n            // eslint-disable-next-line eslint-plugin/report-message-format -- Custom message might not end in a period\n            restrictedProperty: \"'{{propertyName}}' is restricted from being used.{{message}}\"\n        }\n    },\n\n    create(context) {\n        const restrictedCalls = context.options;\n\n        if (restrictedCalls.length === 0) {\n            return {};\n        }\n\n        const restrictedProperties = new Map();\n        const globallyRestrictedObjects = new Map();\n        const globallyRestrictedProperties = new Map();\n\n        restrictedCalls.forEach(option => {\n            const objectName = option.object;\n            const propertyName = option.property;\n\n            if (typeof objectName === \"undefined\") {\n                globallyRestrictedProperties.set(propertyName, { message: option.message });\n            } else if (typeof propertyName === \"undefined\") {\n                globallyRestrictedObjects.set(objectName, { message: option.message });\n            } else {\n                if (!restrictedProperties.has(objectName)) {\n                    restrictedProperties.set(objectName, new Map());\n                }\n\n                restrictedProperties.get(objectName).set(propertyName, {\n                    message: option.message\n                });\n            }\n        });\n\n        /**\n         * Checks to see whether a property access is restricted, and reports it if so.\n         * @param {ASTNode} node The node to report\n         * @param {string} objectName The name of the object\n         * @param {string} propertyName The name of the property\n         * @returns {undefined}\n         */\n        function checkPropertyAccess(node, objectName, propertyName) {\n            if (propertyName === null) {\n                return;\n            }\n            const matchedObject = restrictedProperties.get(objectName);\n            const matchedObjectProperty = matchedObject ? matchedObject.get(propertyName) : globallyRestrictedObjects.get(objectName);\n            const globalMatchedProperty = globallyRestrictedProperties.get(propertyName);\n\n            if (matchedObjectProperty) {\n                const message = matchedObjectProperty.message ? ` ${matchedObjectProperty.message}` : \"\";\n\n                context.report({\n                    node,\n                    messageId: \"restrictedObjectProperty\",\n                    data: {\n                        objectName,\n                        propertyName,\n                        message\n                    }\n                });\n            } else if (globalMatchedProperty) {\n                const message = globalMatchedProperty.message ? ` ${globalMatchedProperty.message}` : \"\";\n\n                context.report({\n                    node,\n                    messageId: \"restrictedProperty\",\n                    data: {\n                        propertyName,\n                        message\n                    }\n                });\n            }\n        }\n\n        /**\n         * Checks property accesses in a destructuring assignment expression, e.g. `var foo; ({foo} = bar);`\n         * @param {ASTNode} node An AssignmentExpression or AssignmentPattern node\n         * @returns {undefined}\n         */\n        function checkDestructuringAssignment(node) {\n            if (node.right.type === \"Identifier\") {\n                const objectName = node.right.name;\n\n                if (node.left.type === \"ObjectPattern\") {\n                    node.left.properties.forEach(property => {\n                        checkPropertyAccess(node.left, objectName, astUtils.getStaticPropertyName(property));\n                    });\n                }\n            }\n        }\n\n        return {\n            MemberExpression(node) {\n                checkPropertyAccess(node, node.object && node.object.name, astUtils.getStaticPropertyName(node));\n            },\n            VariableDeclarator(node) {\n                if (node.init && node.init.type === \"Identifier\") {\n                    const objectName = node.init.name;\n\n                    if (node.id.type === \"ObjectPattern\") {\n                        node.id.properties.forEach(property => {\n                            checkPropertyAccess(node.id, objectName, astUtils.getStaticPropertyName(property));\n                        });\n                    }\n                }\n            },\n            AssignmentExpression: checkDestructuringAssignment,\n            AssignmentPattern: checkDestructuringAssignment\n        };\n    }\n};\n\"/lib/rules/switch-colon-spacing.js\u0013A/**\n * @fileoverview Rule to enforce spacing around colons of switch statements.\n * @author Toru Nagashima\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"layout\",\n\n        docs: {\n            description: \"enforce spacing around colons of switch statements\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/switch-colon-spacing\"\n        },\n\n        schema: [\n            {\n                type: \"object\",\n                properties: {\n                    before: { type: \"boolean\", default: false },\n                    after: { type: \"boolean\", default: true }\n                },\n                additionalProperties: false\n            }\n        ],\n        fixable: \"whitespace\",\n        messages: {\n            expectedBefore: \"Expected space(s) before this colon.\",\n            expectedAfter: \"Expected space(s) after this colon.\",\n            unexpectedBefore: \"Unexpected space(s) before this colon.\",\n            unexpectedAfter: \"Unexpected space(s) after this colon.\"\n        }\n    },\n\n    create(context) {\n        const sourceCode = context.getSourceCode();\n        const options = context.options[0] || {};\n        const beforeSpacing = options.before === true; // false by default\n        const afterSpacing = options.after !== false; // true by default\n\n        /**\n         * Check whether the spacing between the given 2 tokens is valid or not.\n         * @param {Token} left The left token to check.\n         * @param {Token} right The right token to check.\n         * @param {boolean} expected The expected spacing to check. `true` if there should be a space.\n         * @returns {boolean} `true` if the spacing between the tokens is valid.\n         */\n        function isValidSpacing(left, right, expected) {\n            return (\n                astUtils.isClosingBraceToken(right) ||\n                !astUtils.isTokenOnSameLine(left, right) ||\n                sourceCode.isSpaceBetweenTokens(left, right) === expected\n            );\n        }\n\n        /**\n         * Check whether comments exist between the given 2 tokens.\n         * @param {Token} left The left token to check.\n         * @param {Token} right The right token to check.\n         * @returns {boolean} `true` if comments exist between the given 2 tokens.\n         */\n        function commentsExistBetween(left, right) {\n            return sourceCode.getFirstTokenBetween(\n                left,\n                right,\n                {\n                    includeComments: true,\n                    filter: astUtils.isCommentToken\n                }\n            ) !== null;\n        }\n\n        /**\n         * Fix the spacing between the given 2 tokens.\n         * @param {RuleFixer} fixer The fixer to fix.\n         * @param {Token} left The left token of fix range.\n         * @param {Token} right The right token of fix range.\n         * @param {boolean} spacing The spacing style. `true` if there should be a space.\n         * @returns {Fix|null} The fix object.\n         */\n        function fix(fixer, left, right, spacing) {\n            if (commentsExistBetween(left, right)) {\n                return null;\n            }\n            if (spacing) {\n                return fixer.insertTextAfter(left, \" \");\n            }\n            return fixer.removeRange([left.range[1], right.range[0]]);\n        }\n\n        return {\n            SwitchCase(node) {\n                const colonToken = astUtils.getSwitchCaseColonToken(node, sourceCode);\n                const beforeToken = sourceCode.getTokenBefore(colonToken);\n                const afterToken = sourceCode.getTokenAfter(colonToken);\n\n                if (!isValidSpacing(beforeToken, colonToken, beforeSpacing)) {\n                    context.report({\n                        node,\n                        loc: colonToken.loc,\n                        messageId: beforeSpacing ? \"expectedBefore\" : \"unexpectedBefore\",\n                        fix: fixer => fix(fixer, beforeToken, colonToken, beforeSpacing)\n                    });\n                }\n                if (!isValidSpacing(colonToken, afterToken, afterSpacing)) {\n                    context.report({\n                        node,\n                        loc: colonToken.loc,\n                        messageId: afterSpacing ? \"expectedAfter\" : \"unexpectedAfter\",\n                        fix: fixer => fix(fixer, colonToken, afterToken, afterSpacing)\n                    });\n                }\n            }\n        };\n    }\n};\n(/lib/rules/no-nonoctal-decimal-escape.js\u0015/**\n * @fileoverview Rule to disallow `\\8` and `\\9` escape sequences in string literals.\n * @author Milos Djermanovic\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\nconst QUICK_TEST_REGEX = /\\\\[89]/u;\n\n/**\n * Returns unicode escape sequence that represents the given character.\n * @param {string} character A single code unit.\n * @returns {string} \"\\uXXXX\" sequence.\n */\nfunction getUnicodeEscape(character) {\n    return `\\\\u${character.charCodeAt(0).toString(16).padStart(4, \"0\")}`;\n}\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow `\\\\8` and `\\\\9` escape sequences in string literals\",\n            recommended: true,\n            url: \"https://eslint.org/docs/rules/no-nonoctal-decimal-escape\"\n        },\n\n        hasSuggestions: true,\n\n        schema: [],\n\n        messages: {\n            decimalEscape: \"Don't use '{{decimalEscape}}' escape sequence.\",\n\n            // suggestions\n            refactor: \"Replace '{{original}}' with '{{replacement}}'. This maintains the current functionality.\",\n            escapeBackslash: \"Replace '{{original}}' with '{{replacement}}' to include the actual backslash character.\"\n        }\n    },\n\n    create(context) {\n        const sourceCode = context.getSourceCode();\n\n        /**\n         * Creates a new Suggestion object.\n         * @param {string} messageId \"refactor\" or \"escapeBackslash\".\n         * @param {int[]} range The range to replace.\n         * @param {string} replacement New text for the range.\n         * @returns {Object} Suggestion\n         */\n        function createSuggestion(messageId, range, replacement) {\n            return {\n                messageId,\n                data: {\n                    original: sourceCode.getText().slice(...range),\n                    replacement\n                },\n                fix(fixer) {\n                    return fixer.replaceTextRange(range, replacement);\n                }\n            };\n        }\n\n        return {\n            Literal(node) {\n                if (typeof node.value !== \"string\") {\n                    return;\n                }\n\n                if (!QUICK_TEST_REGEX.test(node.raw)) {\n                    return;\n                }\n\n                const regex = /(?:[^\\\\]|(?<previousEscape>\\\\.))*?(?<decimalEscape>\\\\[89])/suy;\n                let match;\n\n                while ((match = regex.exec(node.raw))) {\n                    const { previousEscape, decimalEscape } = match.groups;\n                    const decimalEscapeRangeEnd = node.range[0] + match.index + match[0].length;\n                    const decimalEscapeRangeStart = decimalEscapeRangeEnd - decimalEscape.length;\n                    const decimalEscapeRange = [decimalEscapeRangeStart, decimalEscapeRangeEnd];\n                    const suggest = [];\n\n                    // When `regex` is matched, `previousEscape` can only capture characters adjacent to `decimalEscape`\n                    if (previousEscape === \"\\\\0\") {\n\n                        /*\n                         * Now we have a NULL escape \"\\0\" immediately followed by a decimal escape, e.g.: \"\\0\\8\".\n                         * Fixing this to \"\\08\" would turn \"\\0\" into a legacy octal escape. To avoid producing\n                         * an octal escape while fixing a decimal escape, we provide different suggestions.\n                         */\n                        suggest.push(\n                            createSuggestion( // \"\\0\\8\" -> \"\\u00008\"\n                                \"refactor\",\n                                [decimalEscapeRangeStart - previousEscape.length, decimalEscapeRangeEnd],\n                                `${getUnicodeEscape(\"\\0\")}${decimalEscape[1]}`\n                            ),\n                            createSuggestion( // \"\\8\" -> \"\\u0038\"\n                                \"refactor\",\n                                decimalEscapeRange,\n                                getUnicodeEscape(decimalEscape[1])\n                            )\n                        );\n                    } else {\n                        suggest.push(\n                            createSuggestion( // \"\\8\" -> \"8\"\n                                \"refactor\",\n                                decimalEscapeRange,\n                                decimalEscape[1]\n                            )\n                        );\n                    }\n\n                    suggest.push(\n                        createSuggestion( // \"\\8\" -> \"\\\\8\"\n                            \"escapeBackslash\",\n                            decimalEscapeRange,\n                            `\\\\${decimalEscape}`\n                        )\n                    );\n\n                    context.report({\n                        node,\n                        loc: {\n                            start: sourceCode.getLocFromIndex(decimalEscapeRangeStart),\n                            end: sourceCode.getLocFromIndex(decimalEscapeRangeEnd)\n                        },\n                        messageId: \"decimalEscape\",\n                        data: {\n                            decimalEscape\n                        },\n                        suggest\n                    });\n                }\n            }\n        };\n    }\n};\n/lib/rules/arrow-body-style.js2/**\n * @fileoverview Rule to require braces in arrow function body.\n * @author Alberto Rodríguez\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"require braces around arrow function bodies\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/arrow-body-style\"\n        },\n\n        schema: {\n            anyOf: [\n                {\n                    type: \"array\",\n                    items: [\n                        {\n                            enum: [\"always\", \"never\"]\n                        }\n                    ],\n                    minItems: 0,\n                    maxItems: 1\n                },\n                {\n                    type: \"array\",\n                    items: [\n                        {\n                            enum: [\"as-needed\"]\n                        },\n                        {\n                            type: \"object\",\n                            properties: {\n                                requireReturnForObjectLiteral: { type: \"boolean\" }\n                            },\n                            additionalProperties: false\n                        }\n                    ],\n                    minItems: 0,\n                    maxItems: 2\n                }\n            ]\n        },\n\n        fixable: \"code\",\n\n        messages: {\n            unexpectedOtherBlock: \"Unexpected block statement surrounding arrow body.\",\n            unexpectedEmptyBlock: \"Unexpected block statement surrounding arrow body; put a value of `undefined` immediately after the `=>`.\",\n            unexpectedObjectBlock: \"Unexpected block statement surrounding arrow body; parenthesize the returned value and move it immediately after the `=>`.\",\n            unexpectedSingleBlock: \"Unexpected block statement surrounding arrow body; move the returned value immediately after the `=>`.\",\n            expectedBlock: \"Expected block statement surrounding arrow body.\"\n        }\n    },\n\n    create(context) {\n        const options = context.options;\n        const always = options[0] === \"always\";\n        const asNeeded = !options[0] || options[0] === \"as-needed\";\n        const never = options[0] === \"never\";\n        const requireReturnForObjectLiteral = options[1] && options[1].requireReturnForObjectLiteral;\n        const sourceCode = context.getSourceCode();\n        let funcInfo = null;\n\n        /**\n         * Checks whether the given node has ASI problem or not.\n         * @param {Token} token The token to check.\n         * @returns {boolean} `true` if it changes semantics if `;` or `}` followed by the token are removed.\n         */\n        function hasASIProblem(token) {\n            return token && token.type === \"Punctuator\" && /^[([/`+-]/u.test(token.value);\n        }\n\n        /**\n         * Gets the closing parenthesis by the given node.\n         * @param {ASTNode} node first node after an opening parenthesis.\n         * @returns {Token} The found closing parenthesis token.\n         */\n        function findClosingParen(node) {\n            let nodeToCheck = node;\n\n            while (!astUtils.isParenthesised(sourceCode, nodeToCheck)) {\n                nodeToCheck = nodeToCheck.parent;\n            }\n            return sourceCode.getTokenAfter(nodeToCheck);\n        }\n\n        /**\n         * Check whether the node is inside of a for loop's init\n         * @param {ASTNode} node node is inside for loop\n         * @returns {boolean} `true` if the node is inside of a for loop, else `false`\n         */\n        function isInsideForLoopInitializer(node) {\n            if (node && node.parent) {\n                if (node.parent.type === \"ForStatement\" && node.parent.init === node) {\n                    return true;\n                }\n                return isInsideForLoopInitializer(node.parent);\n            }\n            return false;\n        }\n\n        /**\n         * Determines whether a arrow function body needs braces\n         * @param {ASTNode} node The arrow function node.\n         * @returns {void}\n         */\n        function validate(node) {\n            const arrowBody = node.body;\n\n            if (arrowBody.type === \"BlockStatement\") {\n                const blockBody = arrowBody.body;\n\n                if (blockBody.length !== 1 && !never) {\n                    return;\n                }\n\n                if (asNeeded && requireReturnForObjectLiteral && blockBody[0].type === \"ReturnStatement\" &&\n                    blockBody[0].argument && blockBody[0].argument.type === \"ObjectExpression\") {\n                    return;\n                }\n\n                if (never || asNeeded && blockBody[0].type === \"ReturnStatement\") {\n                    let messageId;\n\n                    if (blockBody.length === 0) {\n                        messageId = \"unexpectedEmptyBlock\";\n                    } else if (blockBody.length > 1) {\n                        messageId = \"unexpectedOtherBlock\";\n                    } else if (blockBody[0].argument === null) {\n                        messageId = \"unexpectedSingleBlock\";\n                    } else if (astUtils.isOpeningBraceToken(sourceCode.getFirstToken(blockBody[0], { skip: 1 }))) {\n                        messageId = \"unexpectedObjectBlock\";\n                    } else {\n                        messageId = \"unexpectedSingleBlock\";\n                    }\n\n                    context.report({\n                        node,\n                        loc: arrowBody.loc,\n                        messageId,\n                        fix(fixer) {\n                            const fixes = [];\n\n                            if (blockBody.length !== 1 ||\n                                blockBody[0].type !== \"ReturnStatement\" ||\n                                !blockBody[0].argument ||\n                                hasASIProblem(sourceCode.getTokenAfter(arrowBody))\n                            ) {\n                                return fixes;\n                            }\n\n                            const openingBrace = sourceCode.getFirstToken(arrowBody);\n                            const closingBrace = sourceCode.getLastToken(arrowBody);\n                            const firstValueToken = sourceCode.getFirstToken(blockBody[0], 1);\n                            const lastValueToken = sourceCode.getLastToken(blockBody[0]);\n                            const commentsExist =\n                                sourceCode.commentsExistBetween(openingBrace, firstValueToken) ||\n                                sourceCode.commentsExistBetween(lastValueToken, closingBrace);\n\n                            /*\n                             * Remove tokens around the return value.\n                             * If comments don't exist, remove extra spaces as well.\n                             */\n                            if (commentsExist) {\n                                fixes.push(\n                                    fixer.remove(openingBrace),\n                                    fixer.remove(closingBrace),\n                                    fixer.remove(sourceCode.getTokenAfter(openingBrace)) // return keyword\n                                );\n                            } else {\n                                fixes.push(\n                                    fixer.removeRange([openingBrace.range[0], firstValueToken.range[0]]),\n                                    fixer.removeRange([lastValueToken.range[1], closingBrace.range[1]])\n                                );\n                            }\n\n                            /*\n                             * If the first token of the return value is `{` or the return value is a sequence expression,\n                             * enclose the return value by parentheses to avoid syntax error.\n                             */\n                            if (astUtils.isOpeningBraceToken(firstValueToken) || blockBody[0].argument.type === \"SequenceExpression\" || (funcInfo.hasInOperator && isInsideForLoopInitializer(node))) {\n                                if (!astUtils.isParenthesised(sourceCode, blockBody[0].argument)) {\n                                    fixes.push(\n                                        fixer.insertTextBefore(firstValueToken, \"(\"),\n                                        fixer.insertTextAfter(lastValueToken, \")\")\n                                    );\n                                }\n                            }\n\n                            /*\n                             * If the last token of the return statement is semicolon, remove it.\n                             * Non-block arrow body is an expression, not a statement.\n                             */\n                            if (astUtils.isSemicolonToken(lastValueToken)) {\n                                fixes.push(fixer.remove(lastValueToken));\n                            }\n\n                            return fixes;\n                        }\n                    });\n                }\n            } else {\n                if (always || (asNeeded && requireReturnForObjectLiteral && arrowBody.type === \"ObjectExpression\")) {\n                    context.report({\n                        node,\n                        loc: arrowBody.loc,\n                        messageId: \"expectedBlock\",\n                        fix(fixer) {\n                            const fixes = [];\n                            const arrowToken = sourceCode.getTokenBefore(arrowBody, astUtils.isArrowToken);\n                            const [firstTokenAfterArrow, secondTokenAfterArrow] = sourceCode.getTokensAfter(arrowToken, { count: 2 });\n                            const lastToken = sourceCode.getLastToken(node);\n\n                            let parenthesisedObjectLiteral = null;\n\n                            if (\n                                astUtils.isOpeningParenToken(firstTokenAfterArrow) &&\n                                astUtils.isOpeningBraceToken(secondTokenAfterArrow)\n                            ) {\n                                const braceNode = sourceCode.getNodeByRangeIndex(secondTokenAfterArrow.range[0]);\n\n                                if (braceNode.type === \"ObjectExpression\") {\n                                    parenthesisedObjectLiteral = braceNode;\n                                }\n                            }\n\n                            // If the value is object literal, remove parentheses which were forced by syntax.\n                            if (parenthesisedObjectLiteral) {\n                                const openingParenToken = firstTokenAfterArrow;\n                                const openingBraceToken = secondTokenAfterArrow;\n\n                                if (astUtils.isTokenOnSameLine(openingParenToken, openingBraceToken)) {\n                                    fixes.push(fixer.replaceText(openingParenToken, \"{return \"));\n                                } else {\n\n                                    // Avoid ASI\n                                    fixes.push(\n                                        fixer.replaceText(openingParenToken, \"{\"),\n                                        fixer.insertTextBefore(openingBraceToken, \"return \")\n                                    );\n                                }\n\n                                // Closing paren for the object doesn't have to be lastToken, e.g.: () => ({}).foo()\n                                fixes.push(fixer.remove(findClosingParen(parenthesisedObjectLiteral)));\n                                fixes.push(fixer.insertTextAfter(lastToken, \"}\"));\n\n                            } else {\n                                fixes.push(fixer.insertTextBefore(firstTokenAfterArrow, \"{return \"));\n                                fixes.push(fixer.insertTextAfter(lastToken, \"}\"));\n                            }\n\n                            return fixes;\n                        }\n                    });\n                }\n            }\n        }\n\n        return {\n            \"BinaryExpression[operator='in']\"() {\n                let info = funcInfo;\n\n                while (info) {\n                    info.hasInOperator = true;\n                    info = info.upper;\n                }\n            },\n            ArrowFunctionExpression() {\n                funcInfo = {\n                    upper: funcInfo,\n                    hasInOperator: false\n                };\n            },\n            \"ArrowFunctionExpression:exit\"(node) {\n                validate(node);\n                funcInfo = funcInfo.upper;\n            }\n        };\n    }\n};\n/lib/rules/camelcase.js6\u0014/**\n * @fileoverview Rule to flag non-camelcased identifiers\n * @author Nicholas C. Zakas\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"enforce camelcase naming convention\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/camelcase\"\n        },\n\n        schema: [\n            {\n                type: \"object\",\n                properties: {\n                    ignoreDestructuring: {\n                        type: \"boolean\",\n                        default: false\n                    },\n                    ignoreImports: {\n                        type: \"boolean\",\n                        default: false\n                    },\n                    ignoreGlobals: {\n                        type: \"boolean\",\n                        default: false\n                    },\n                    properties: {\n                        enum: [\"always\", \"never\"]\n                    },\n                    allow: {\n                        type: \"array\",\n                        items: [\n                            {\n                                type: \"string\"\n                            }\n                        ],\n                        minItems: 0,\n                        uniqueItems: true\n                    }\n                },\n                additionalProperties: false\n            }\n        ],\n\n        messages: {\n            notCamelCase: \"Identifier '{{name}}' is not in camel case.\",\n            notCamelCasePrivate: \"#{{name}} is not in camel case.\"\n        }\n    },\n\n    create(context) {\n        const options = context.options[0] || {};\n        const properties = options.properties === \"never\" ? \"never\" : \"always\";\n        const ignoreDestructuring = options.ignoreDestructuring;\n        const ignoreImports = options.ignoreImports;\n        const ignoreGlobals = options.ignoreGlobals;\n        const allow = options.allow || [];\n\n        //--------------------------------------------------------------------------\n        // Helpers\n        //--------------------------------------------------------------------------\n\n        // contains reported nodes to avoid reporting twice on destructuring with shorthand notation\n        const reported = new Set();\n\n        /**\n         * Checks if a string contains an underscore and isn't all upper-case\n         * @param {string} name The string to check.\n         * @returns {boolean} if the string is underscored\n         * @private\n         */\n        function isUnderscored(name) {\n            const nameBody = name.replace(/^_+|_+$/gu, \"\");\n\n            // if there's an underscore, it might be A_CONSTANT, which is okay\n            return nameBody.includes(\"_\") && nameBody !== nameBody.toUpperCase();\n        }\n\n        /**\n         * Checks if a string match the ignore list\n         * @param {string} name The string to check.\n         * @returns {boolean} if the string is ignored\n         * @private\n         */\n        function isAllowed(name) {\n            return allow.some(\n                entry => name === entry || name.match(new RegExp(entry, \"u\"))\n            );\n        }\n\n        /**\n         * Checks if a given name is good or not.\n         * @param {string} name The name to check.\n         * @returns {boolean} `true` if the name is good.\n         * @private\n         */\n        function isGoodName(name) {\n            return !isUnderscored(name) || isAllowed(name);\n        }\n\n        /**\n         * Checks if a given identifier reference or member expression is an assignment\n         * target.\n         * @param {ASTNode} node The node to check.\n         * @returns {boolean} `true` if the node is an assignment target.\n         */\n        function isAssignmentTarget(node) {\n            const parent = node.parent;\n\n            switch (parent.type) {\n                case \"AssignmentExpression\":\n                case \"AssignmentPattern\":\n                    return parent.left === node;\n\n                case \"Property\":\n                    return (\n                        parent.parent.type === \"ObjectPattern\" &&\n                        parent.value === node\n                    );\n                case \"ArrayPattern\":\n                case \"RestElement\":\n                    return true;\n\n                default:\n                    return false;\n            }\n        }\n\n        /**\n         * Checks if a given binding identifier uses the original name as-is.\n         * - If it's in object destructuring, the original name is its property name.\n         * - If it's in import declaration, the original name is its exported name.\n         * @param {ASTNode} node The `Identifier` node to check.\n         * @returns {boolean} `true` if the identifier uses the original name as-is.\n         */\n        function equalsToOriginalName(node) {\n            const localName = node.name;\n            const valueNode = node.parent.type === \"AssignmentPattern\"\n                ? node.parent\n                : node;\n            const parent = valueNode.parent;\n\n            switch (parent.type) {\n                case \"Property\":\n                    return (\n                        parent.parent.type === \"ObjectPattern\" &&\n                        parent.value === valueNode &&\n                        !parent.computed &&\n                        parent.key.type === \"Identifier\" &&\n                        parent.key.name === localName\n                    );\n\n                case \"ImportSpecifier\":\n                    return (\n                        parent.local === node &&\n                        astUtils.getModuleExportName(parent.imported) === localName\n                    );\n\n                default:\n                    return false;\n            }\n        }\n\n        /**\n         * Reports an AST node as a rule violation.\n         * @param {ASTNode} node The node to report.\n         * @returns {void}\n         * @private\n         */\n        function report(node) {\n            if (reported.has(node.range[0])) {\n                return;\n            }\n            reported.add(node.range[0]);\n\n            // Report it.\n            context.report({\n                node,\n                messageId: node.type === \"PrivateIdentifier\"\n                    ? \"notCamelCasePrivate\"\n                    : \"notCamelCase\",\n                data: { name: node.name }\n            });\n        }\n\n        /**\n         * Reports an identifier reference or a binding identifier.\n         * @param {ASTNode} node The `Identifier` node to report.\n         * @returns {void}\n         */\n        function reportReferenceId(node) {\n\n            /*\n             * For backward compatibility, if it's in callings then ignore it.\n             * Not sure why it is.\n             */\n            if (\n                node.parent.type === \"CallExpression\" ||\n                node.parent.type === \"NewExpression\"\n            ) {\n                return;\n            }\n\n            /*\n             * For backward compatibility, if it's a default value of\n             * destructuring/parameters then ignore it.\n             * Not sure why it is.\n             */\n            if (\n                node.parent.type === \"AssignmentPattern\" &&\n                node.parent.right === node\n            ) {\n                return;\n            }\n\n            /*\n             * The `ignoreDestructuring` flag skips the identifiers that uses\n             * the property name as-is.\n             */\n            if (ignoreDestructuring && equalsToOriginalName(node)) {\n                return;\n            }\n\n            report(node);\n        }\n\n        return {\n\n            // Report camelcase of global variable references ------------------\n            Program() {\n                const scope = context.getScope();\n\n                if (!ignoreGlobals) {\n\n                    // Defined globals in config files or directive comments.\n                    for (const variable of scope.variables) {\n                        if (\n                            variable.identifiers.length > 0 ||\n                            isGoodName(variable.name)\n                        ) {\n                            continue;\n                        }\n                        for (const reference of variable.references) {\n\n                            /*\n                             * For backward compatibility, this rule reports read-only\n                             * references as well.\n                             */\n                            reportReferenceId(reference.identifier);\n                        }\n                    }\n                }\n\n                // Undefined globals.\n                for (const reference of scope.through) {\n                    const id = reference.identifier;\n\n                    if (isGoodName(id.name)) {\n                        continue;\n                    }\n\n                    /*\n                     * For backward compatibility, this rule reports read-only\n                     * references as well.\n                     */\n                    reportReferenceId(id);\n                }\n            },\n\n            // Report camelcase of declared variables --------------------------\n            [[\n                \"VariableDeclaration\",\n                \"FunctionDeclaration\",\n                \"FunctionExpression\",\n                \"ArrowFunctionExpression\",\n                \"ClassDeclaration\",\n                \"ClassExpression\",\n                \"CatchClause\"\n            ]](node) {\n                for (const variable of context.getDeclaredVariables(node)) {\n                    if (isGoodName(variable.name)) {\n                        continue;\n                    }\n                    const id = variable.identifiers[0];\n\n                    // Report declaration.\n                    if (!(ignoreDestructuring && equalsToOriginalName(id))) {\n                        report(id);\n                    }\n\n                    /*\n                     * For backward compatibility, report references as well.\n                     * It looks unnecessary because declarations are reported.\n                     */\n                    for (const reference of variable.references) {\n                        if (reference.init) {\n                            continue; // Skip the write references of initializers.\n                        }\n                        reportReferenceId(reference.identifier);\n                    }\n                }\n            },\n\n            // Report camelcase in properties ----------------------------------\n            [[\n                \"ObjectExpression > Property[computed!=true] > Identifier.key\",\n                \"MethodDefinition[computed!=true] > Identifier.key\",\n                \"PropertyDefinition[computed!=true] > Identifier.key\",\n                \"MethodDefinition > PrivateIdentifier.key\",\n                \"PropertyDefinition > PrivateIdentifier.key\"\n            ]](node) {\n                if (properties === \"never\" || isGoodName(node.name)) {\n                    return;\n                }\n                report(node);\n            },\n            \"MemberExpression[computed!=true] > Identifier.property\"(node) {\n                if (\n                    properties === \"never\" ||\n                    !isAssignmentTarget(node.parent) || // ← ignore read-only references.\n                    isGoodName(node.name)\n                ) {\n                    return;\n                }\n                report(node);\n            },\n\n            // Report camelcase in import --------------------------------------\n            ImportDeclaration(node) {\n                for (const variable of context.getDeclaredVariables(node)) {\n                    if (isGoodName(variable.name)) {\n                        continue;\n                    }\n                    const id = variable.identifiers[0];\n\n                    // Report declaration.\n                    if (!(ignoreImports && equalsToOriginalName(id))) {\n                        report(id);\n                    }\n\n                    /*\n                     * For backward compatibility, report references as well.\n                     * It looks unnecessary because declarations are reported.\n                     */\n                    for (const reference of variable.references) {\n                        reportReferenceId(reference.identifier);\n                    }\n                }\n            },\n\n            // Report camelcase in re-export -----------------------------------\n            [[\n                \"ExportAllDeclaration > Identifier.exported\",\n                \"ExportSpecifier > Identifier.exported\"\n            ]](node) {\n                if (isGoodName(node.name)) {\n                    return;\n                }\n                report(node);\n            },\n\n            // Report camelcase in labels --------------------------------------\n            [[\n                \"LabeledStatement > Identifier.label\",\n\n                /*\n                 * For backward compatibility, report references as well.\n                 * It looks unnecessary because declarations are reported.\n                 */\n                \"BreakStatement > Identifier.label\",\n                \"ContinueStatement > Identifier.label\"\n            ]](node) {\n                if (isGoodName(node.name)) {\n                    return;\n                }\n                report(node);\n            }\n        };\n    }\n};\n/lib/rules/max-len.js>/**\n * @fileoverview Rule to check for max length on a line.\n * @author Matt DuVall <http://www.mattduvall.com>\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Constants\n//------------------------------------------------------------------------------\n\nconst OPTIONS_SCHEMA = {\n    type: \"object\",\n    properties: {\n        code: {\n            type: \"integer\",\n            minimum: 0\n        },\n        comments: {\n            type: \"integer\",\n            minimum: 0\n        },\n        tabWidth: {\n            type: \"integer\",\n            minimum: 0\n        },\n        ignorePattern: {\n            type: \"string\"\n        },\n        ignoreComments: {\n            type: \"boolean\"\n        },\n        ignoreStrings: {\n            type: \"boolean\"\n        },\n        ignoreUrls: {\n            type: \"boolean\"\n        },\n        ignoreTemplateLiterals: {\n            type: \"boolean\"\n        },\n        ignoreRegExpLiterals: {\n            type: \"boolean\"\n        },\n        ignoreTrailingComments: {\n            type: \"boolean\"\n        }\n    },\n    additionalProperties: false\n};\n\nconst OPTIONS_OR_INTEGER_SCHEMA = {\n    anyOf: [\n        OPTIONS_SCHEMA,\n        {\n            type: \"integer\",\n            minimum: 0\n        }\n    ]\n};\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"layout\",\n\n        docs: {\n            description: \"enforce a maximum line length\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/max-len\"\n        },\n\n        schema: [\n            OPTIONS_OR_INTEGER_SCHEMA,\n            OPTIONS_OR_INTEGER_SCHEMA,\n            OPTIONS_SCHEMA\n        ],\n        messages: {\n            max: \"This line has a length of {{lineLength}}. Maximum allowed is {{maxLength}}.\",\n            maxComment: \"This line has a comment length of {{lineLength}}. Maximum allowed is {{maxCommentLength}}.\"\n        }\n    },\n\n    create(context) {\n\n        /*\n         * Inspired by http://tools.ietf.org/html/rfc3986#appendix-B, however:\n         * - They're matching an entire string that we know is a URI\n         * - We're matching part of a string where we think there *might* be a URL\n         * - We're only concerned about URLs, as picking out any URI would cause\n         *   too many false positives\n         * - We don't care about matching the entire URL, any small segment is fine\n         */\n        const URL_REGEXP = /[^:/?#]:\\/\\/[^?#]/u;\n\n        const sourceCode = context.getSourceCode();\n\n        /**\n         * Computes the length of a line that may contain tabs. The width of each\n         * tab will be the number of spaces to the next tab stop.\n         * @param {string} line The line.\n         * @param {int} tabWidth The width of each tab stop in spaces.\n         * @returns {int} The computed line length.\n         * @private\n         */\n        function computeLineLength(line, tabWidth) {\n            let extraCharacterCount = 0;\n\n            line.replace(/\\t/gu, (match, offset) => {\n                const totalOffset = offset + extraCharacterCount,\n                    previousTabStopOffset = tabWidth ? totalOffset % tabWidth : 0,\n                    spaceCount = tabWidth - previousTabStopOffset;\n\n                extraCharacterCount += spaceCount - 1; // -1 for the replaced tab\n            });\n            return Array.from(line).length + extraCharacterCount;\n        }\n\n        // The options object must be the last option specified…\n        const options = Object.assign({}, context.options[context.options.length - 1]);\n\n        // …but max code length…\n        if (typeof context.options[0] === \"number\") {\n            options.code = context.options[0];\n        }\n\n        // …and tabWidth can be optionally specified directly as integers.\n        if (typeof context.options[1] === \"number\") {\n            options.tabWidth = context.options[1];\n        }\n\n        const maxLength = typeof options.code === \"number\" ? options.code : 80,\n            tabWidth = typeof options.tabWidth === \"number\" ? options.tabWidth : 4,\n            ignoreComments = !!options.ignoreComments,\n            ignoreStrings = !!options.ignoreStrings,\n            ignoreTemplateLiterals = !!options.ignoreTemplateLiterals,\n            ignoreRegExpLiterals = !!options.ignoreRegExpLiterals,\n            ignoreTrailingComments = !!options.ignoreTrailingComments || !!options.ignoreComments,\n            ignoreUrls = !!options.ignoreUrls,\n            maxCommentLength = options.comments;\n        let ignorePattern = options.ignorePattern || null;\n\n        if (ignorePattern) {\n            ignorePattern = new RegExp(ignorePattern, \"u\");\n        }\n\n        //--------------------------------------------------------------------------\n        // Helpers\n        //--------------------------------------------------------------------------\n\n        /**\n         * Tells if a given comment is trailing: it starts on the current line and\n         * extends to or past the end of the current line.\n         * @param {string} line The source line we want to check for a trailing comment on\n         * @param {number} lineNumber The one-indexed line number for line\n         * @param {ASTNode} comment The comment to inspect\n         * @returns {boolean} If the comment is trailing on the given line\n         */\n        function isTrailingComment(line, lineNumber, comment) {\n            return comment &&\n                (comment.loc.start.line === lineNumber && lineNumber <= comment.loc.end.line) &&\n                (comment.loc.end.line > lineNumber || comment.loc.end.column === line.length);\n        }\n\n        /**\n         * Tells if a comment encompasses the entire line.\n         * @param {string} line The source line with a trailing comment\n         * @param {number} lineNumber The one-indexed line number this is on\n         * @param {ASTNode} comment The comment to remove\n         * @returns {boolean} If the comment covers the entire line\n         */\n        function isFullLineComment(line, lineNumber, comment) {\n            const start = comment.loc.start,\n                end = comment.loc.end,\n                isFirstTokenOnLine = !line.slice(0, comment.loc.start.column).trim();\n\n            return comment &&\n                (start.line < lineNumber || (start.line === lineNumber && isFirstTokenOnLine)) &&\n                (end.line > lineNumber || (end.line === lineNumber && end.column === line.length));\n        }\n\n        /**\n         * Check if a node is a JSXEmptyExpression contained in a single line JSXExpressionContainer.\n         * @param {ASTNode} node A node to check.\n         * @returns {boolean} True if the node is a JSXEmptyExpression contained in a single line JSXExpressionContainer.\n         */\n        function isJSXEmptyExpressionInSingleLineContainer(node) {\n            if (!node || !node.parent || node.type !== \"JSXEmptyExpression\" || node.parent.type !== \"JSXExpressionContainer\") {\n                return false;\n            }\n\n            const parent = node.parent;\n\n            return parent.loc.start.line === parent.loc.end.line;\n        }\n\n        /**\n         * Gets the line after the comment and any remaining trailing whitespace is\n         * stripped.\n         * @param {string} line The source line with a trailing comment\n         * @param {ASTNode} comment The comment to remove\n         * @returns {string} Line without comment and trailing whitespace\n         */\n        function stripTrailingComment(line, comment) {\n\n            // loc.column is zero-indexed\n            return line.slice(0, comment.loc.start.column).replace(/\\s+$/u, \"\");\n        }\n\n        /**\n         * Ensure that an array exists at [key] on `object`, and add `value` to it.\n         * @param {Object} object the object to mutate\n         * @param {string} key the object's key\n         * @param {any} value the value to add\n         * @returns {void}\n         * @private\n         */\n        function ensureArrayAndPush(object, key, value) {\n            if (!Array.isArray(object[key])) {\n                object[key] = [];\n            }\n            object[key].push(value);\n        }\n\n        /**\n         * Retrieves an array containing all strings (\" or ') in the source code.\n         * @returns {ASTNode[]} An array of string nodes.\n         */\n        function getAllStrings() {\n            return sourceCode.ast.tokens.filter(token => (token.type === \"String\" ||\n                (token.type === \"JSXText\" && sourceCode.getNodeByRangeIndex(token.range[0] - 1).type === \"JSXAttribute\")));\n        }\n\n        /**\n         * Retrieves an array containing all template literals in the source code.\n         * @returns {ASTNode[]} An array of template literal nodes.\n         */\n        function getAllTemplateLiterals() {\n            return sourceCode.ast.tokens.filter(token => token.type === \"Template\");\n        }\n\n\n        /**\n         * Retrieves an array containing all RegExp literals in the source code.\n         * @returns {ASTNode[]} An array of RegExp literal nodes.\n         */\n        function getAllRegExpLiterals() {\n            return sourceCode.ast.tokens.filter(token => token.type === \"RegularExpression\");\n        }\n\n\n        /**\n         * A reducer to group an AST node by line number, both start and end.\n         * @param {Object} acc the accumulator\n         * @param {ASTNode} node the AST node in question\n         * @returns {Object} the modified accumulator\n         * @private\n         */\n        function groupByLineNumber(acc, node) {\n            for (let i = node.loc.start.line; i <= node.loc.end.line; ++i) {\n                ensureArrayAndPush(acc, i, node);\n            }\n            return acc;\n        }\n\n        /**\n         * Returns an array of all comments in the source code.\n         * If the element in the array is a JSXEmptyExpression contained with a single line JSXExpressionContainer,\n         * the element is changed with JSXExpressionContainer node.\n         * @returns {ASTNode[]} An array of comment nodes\n         */\n        function getAllComments() {\n            const comments = [];\n\n            sourceCode.getAllComments()\n                .forEach(commentNode => {\n                    const containingNode = sourceCode.getNodeByRangeIndex(commentNode.range[0]);\n\n                    if (isJSXEmptyExpressionInSingleLineContainer(containingNode)) {\n\n                        // push a unique node only\n                        if (comments[comments.length - 1] !== containingNode.parent) {\n                            comments.push(containingNode.parent);\n                        }\n                    } else {\n                        comments.push(commentNode);\n                    }\n                });\n\n            return comments;\n        }\n\n        /**\n         * Check the program for max length\n         * @param {ASTNode} node Node to examine\n         * @returns {void}\n         * @private\n         */\n        function checkProgramForMaxLength(node) {\n\n            // split (honors line-ending)\n            const lines = sourceCode.lines,\n\n                // list of comments to ignore\n                comments = ignoreComments || maxCommentLength || ignoreTrailingComments ? getAllComments() : [];\n\n            // we iterate over comments in parallel with the lines\n            let commentsIndex = 0;\n\n            const strings = getAllStrings();\n            const stringsByLine = strings.reduce(groupByLineNumber, {});\n\n            const templateLiterals = getAllTemplateLiterals();\n            const templateLiteralsByLine = templateLiterals.reduce(groupByLineNumber, {});\n\n            const regExpLiterals = getAllRegExpLiterals();\n            const regExpLiteralsByLine = regExpLiterals.reduce(groupByLineNumber, {});\n\n            lines.forEach((line, i) => {\n\n                // i is zero-indexed, line numbers are one-indexed\n                const lineNumber = i + 1;\n\n                /*\n                 * if we're checking comment length; we need to know whether this\n                 * line is a comment\n                 */\n                let lineIsComment = false;\n                let textToMeasure;\n\n                /*\n                 * We can short-circuit the comment checks if we're already out of\n                 * comments to check.\n                 */\n                if (commentsIndex < comments.length) {\n                    let comment = null;\n\n                    // iterate over comments until we find one past the current line\n                    do {\n                        comment = comments[++commentsIndex];\n                    } while (comment && comment.loc.start.line <= lineNumber);\n\n                    // and step back by one\n                    comment = comments[--commentsIndex];\n\n                    if (isFullLineComment(line, lineNumber, comment)) {\n                        lineIsComment = true;\n                        textToMeasure = line;\n                    } else if (ignoreTrailingComments && isTrailingComment(line, lineNumber, comment)) {\n                        textToMeasure = stripTrailingComment(line, comment);\n\n                        // ignore multiple trailing comments in the same line\n                        let lastIndex = commentsIndex;\n\n                        while (isTrailingComment(textToMeasure, lineNumber, comments[--lastIndex])) {\n                            textToMeasure = stripTrailingComment(textToMeasure, comments[lastIndex]);\n                        }\n                    } else {\n                        textToMeasure = line;\n                    }\n                } else {\n                    textToMeasure = line;\n                }\n                if (ignorePattern && ignorePattern.test(textToMeasure) ||\n                    ignoreUrls && URL_REGEXP.test(textToMeasure) ||\n                    ignoreStrings && stringsByLine[lineNumber] ||\n                    ignoreTemplateLiterals && templateLiteralsByLine[lineNumber] ||\n                    ignoreRegExpLiterals && regExpLiteralsByLine[lineNumber]\n                ) {\n\n                    // ignore this line\n                    return;\n                }\n\n                const lineLength = computeLineLength(textToMeasure, tabWidth);\n                const commentLengthApplies = lineIsComment && maxCommentLength;\n\n                if (lineIsComment && ignoreComments) {\n                    return;\n                }\n\n                const loc = {\n                    start: {\n                        line: lineNumber,\n                        column: 0\n                    },\n                    end: {\n                        line: lineNumber,\n                        column: textToMeasure.length\n                    }\n                };\n\n                if (commentLengthApplies) {\n                    if (lineLength > maxCommentLength) {\n                        context.report({\n                            node,\n                            loc,\n                            messageId: \"maxComment\",\n                            data: {\n                                lineLength,\n                                maxCommentLength\n                            }\n                        });\n                    }\n                } else if (lineLength > maxLength) {\n                    context.report({\n                        node,\n                        loc,\n                        messageId: \"max\",\n                        data: {\n                            lineLength,\n                            maxLength\n                        }\n                    });\n                }\n            });\n        }\n\n\n        //--------------------------------------------------------------------------\n        // Public API\n        //--------------------------------------------------------------------------\n\n        return {\n            Program: checkProgramForMaxLength\n        };\n\n    }\n};\n/lib/rules/arrow-spacing.js\u0014Z/**\n * @fileoverview Rule to define spacing before/after arrow function's arrow.\n * @author Jxck\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"layout\",\n\n        docs: {\n            description: \"enforce consistent spacing before and after the arrow in arrow functions\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/arrow-spacing\"\n        },\n\n        fixable: \"whitespace\",\n\n        schema: [\n            {\n                type: \"object\",\n                properties: {\n                    before: {\n                        type: \"boolean\",\n                        default: true\n                    },\n                    after: {\n                        type: \"boolean\",\n                        default: true\n                    }\n                },\n                additionalProperties: false\n            }\n        ],\n\n        messages: {\n            expectedBefore: \"Missing space before =>.\",\n            unexpectedBefore: \"Unexpected space before =>.\",\n\n            expectedAfter: \"Missing space after =>.\",\n            unexpectedAfter: \"Unexpected space after =>.\"\n        }\n    },\n\n    create(context) {\n\n        // merge rules with default\n        const rule = Object.assign({}, context.options[0]);\n\n        rule.before = rule.before !== false;\n        rule.after = rule.after !== false;\n\n        const sourceCode = context.getSourceCode();\n\n        /**\n         * Get tokens of arrow(`=>`) and before/after arrow.\n         * @param {ASTNode} node The arrow function node.\n         * @returns {Object} Tokens of arrow and before/after arrow.\n         */\n        function getTokens(node) {\n            const arrow = sourceCode.getTokenBefore(node.body, astUtils.isArrowToken);\n\n            return {\n                before: sourceCode.getTokenBefore(arrow),\n                arrow,\n                after: sourceCode.getTokenAfter(arrow)\n            };\n        }\n\n        /**\n         * Count spaces before/after arrow(`=>`) token.\n         * @param {Object} tokens Tokens before/after arrow.\n         * @returns {Object} count of space before/after arrow.\n         */\n        function countSpaces(tokens) {\n            const before = tokens.arrow.range[0] - tokens.before.range[1];\n            const after = tokens.after.range[0] - tokens.arrow.range[1];\n\n            return { before, after };\n        }\n\n        /**\n         * Determines whether space(s) before after arrow(`=>`) is satisfy rule.\n         * if before/after value is `true`, there should be space(s).\n         * if before/after value is `false`, there should be no space.\n         * @param {ASTNode} node The arrow function node.\n         * @returns {void}\n         */\n        function spaces(node) {\n            const tokens = getTokens(node);\n            const countSpace = countSpaces(tokens);\n\n            if (rule.before) {\n\n                // should be space(s) before arrow\n                if (countSpace.before === 0) {\n                    context.report({\n                        node: tokens.before,\n                        messageId: \"expectedBefore\",\n                        fix(fixer) {\n                            return fixer.insertTextBefore(tokens.arrow, \" \");\n                        }\n                    });\n                }\n            } else {\n\n                // should be no space before arrow\n                if (countSpace.before > 0) {\n                    context.report({\n                        node: tokens.before,\n                        messageId: \"unexpectedBefore\",\n                        fix(fixer) {\n                            return fixer.removeRange([tokens.before.range[1], tokens.arrow.range[0]]);\n                        }\n                    });\n                }\n            }\n\n            if (rule.after) {\n\n                // should be space(s) after arrow\n                if (countSpace.after === 0) {\n                    context.report({\n                        node: tokens.after,\n                        messageId: \"expectedAfter\",\n                        fix(fixer) {\n                            return fixer.insertTextAfter(tokens.arrow, \" \");\n                        }\n                    });\n                }\n            } else {\n\n                // should be no space after arrow\n                if (countSpace.after > 0) {\n                    context.report({\n                        node: tokens.after,\n                        messageId: \"unexpectedAfter\",\n                        fix(fixer) {\n                            return fixer.removeRange([tokens.arrow.range[1], tokens.after.range[0]]);\n                        }\n                    });\n                }\n            }\n        }\n\n        return {\n            ArrowFunctionExpression: spaces\n        };\n    }\n};\n /lib/rules/no-mixed-operators.js\u001e\n/**\n * @fileoverview Rule to disallow mixed binary operators.\n * @author Toru Nagashima\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils.js\");\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\nconst ARITHMETIC_OPERATORS = [\"+\", \"-\", \"*\", \"/\", \"%\", \"**\"];\nconst BITWISE_OPERATORS = [\"&\", \"|\", \"^\", \"~\", \"<<\", \">>\", \">>>\"];\nconst COMPARISON_OPERATORS = [\"==\", \"!=\", \"===\", \"!==\", \">\", \">=\", \"<\", \"<=\"];\nconst LOGICAL_OPERATORS = [\"&&\", \"||\"];\nconst RELATIONAL_OPERATORS = [\"in\", \"instanceof\"];\nconst TERNARY_OPERATOR = [\"?:\"];\nconst COALESCE_OPERATOR = [\"??\"];\nconst ALL_OPERATORS = [].concat(\n    ARITHMETIC_OPERATORS,\n    BITWISE_OPERATORS,\n    COMPARISON_OPERATORS,\n    LOGICAL_OPERATORS,\n    RELATIONAL_OPERATORS,\n    TERNARY_OPERATOR,\n    COALESCE_OPERATOR\n);\nconst DEFAULT_GROUPS = [\n    ARITHMETIC_OPERATORS,\n    BITWISE_OPERATORS,\n    COMPARISON_OPERATORS,\n    LOGICAL_OPERATORS,\n    RELATIONAL_OPERATORS\n];\nconst TARGET_NODE_TYPE = /^(?:Binary|Logical|Conditional)Expression$/u;\n\n/**\n * Normalizes options.\n * @param {Object|undefined} options A options object to normalize.\n * @returns {Object} Normalized option object.\n */\nfunction normalizeOptions(options = {}) {\n    const hasGroups = options.groups && options.groups.length > 0;\n    const groups = hasGroups ? options.groups : DEFAULT_GROUPS;\n    const allowSamePrecedence = options.allowSamePrecedence !== false;\n\n    return {\n        groups,\n        allowSamePrecedence\n    };\n}\n\n/**\n * Checks whether any group which includes both given operator exists or not.\n * @param {Array<string[]>} groups A list of groups to check.\n * @param {string} left An operator.\n * @param {string} right Another operator.\n * @returns {boolean} `true` if such group existed.\n */\nfunction includesBothInAGroup(groups, left, right) {\n    return groups.some(group => group.indexOf(left) !== -1 && group.indexOf(right) !== -1);\n}\n\n/**\n * Checks whether the given node is a conditional expression and returns the test node else the left node.\n * @param {ASTNode} node A node which can be a BinaryExpression or a LogicalExpression node.\n * This parent node can be BinaryExpression, LogicalExpression\n *      , or a ConditionalExpression node\n * @returns {ASTNode} node the appropriate node(left or test).\n */\nfunction getChildNode(node) {\n    return node.type === \"ConditionalExpression\" ? node.test : node.left;\n}\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow mixed binary operators\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-mixed-operators\"\n        },\n\n        schema: [\n            {\n                type: \"object\",\n                properties: {\n                    groups: {\n                        type: \"array\",\n                        items: {\n                            type: \"array\",\n                            items: { enum: ALL_OPERATORS },\n                            minItems: 2,\n                            uniqueItems: true\n                        },\n                        uniqueItems: true\n                    },\n                    allowSamePrecedence: {\n                        type: \"boolean\",\n                        default: true\n                    }\n                },\n                additionalProperties: false\n            }\n        ],\n\n        messages: {\n            unexpectedMixedOperator: \"Unexpected mix of '{{leftOperator}}' and '{{rightOperator}}'. Use parentheses to clarify the intended order of operations.\"\n        }\n    },\n\n    create(context) {\n        const sourceCode = context.getSourceCode();\n        const options = normalizeOptions(context.options[0]);\n\n        /**\n         * Checks whether a given node should be ignored by options or not.\n         * @param {ASTNode} node A node to check. This is a BinaryExpression\n         *      node or a LogicalExpression node. This parent node is one of\n         *      them, too.\n         * @returns {boolean} `true` if the node should be ignored.\n         */\n        function shouldIgnore(node) {\n            const a = node;\n            const b = node.parent;\n\n            return (\n                !includesBothInAGroup(options.groups, a.operator, b.type === \"ConditionalExpression\" ? \"?:\" : b.operator) ||\n                (\n                    options.allowSamePrecedence &&\n                    astUtils.getPrecedence(a) === astUtils.getPrecedence(b)\n                )\n            );\n        }\n\n        /**\n         * Checks whether the operator of a given node is mixed with parent\n         * node's operator or not.\n         * @param {ASTNode} node A node to check. This is a BinaryExpression\n         *      node or a LogicalExpression node. This parent node is one of\n         *      them, too.\n         * @returns {boolean} `true` if the node was mixed.\n         */\n        function isMixedWithParent(node) {\n\n            return (\n                node.operator !== node.parent.operator &&\n                !astUtils.isParenthesised(sourceCode, node)\n            );\n        }\n\n        /**\n         * Gets the operator token of a given node.\n         * @param {ASTNode} node A node to check. This is a BinaryExpression\n         *      node or a LogicalExpression node.\n         * @returns {Token} The operator token of the node.\n         */\n        function getOperatorToken(node) {\n            return sourceCode.getTokenAfter(getChildNode(node), astUtils.isNotClosingParenToken);\n        }\n\n        /**\n         * Reports both the operator of a given node and the operator of the\n         * parent node.\n         * @param {ASTNode} node A node to check. This is a BinaryExpression\n         *      node or a LogicalExpression node. This parent node is one of\n         *      them, too.\n         * @returns {void}\n         */\n        function reportBothOperators(node) {\n            const parent = node.parent;\n            const left = (getChildNode(parent) === node) ? node : parent;\n            const right = (getChildNode(parent) !== node) ? node : parent;\n            const data = {\n                leftOperator: left.operator || \"?:\",\n                rightOperator: right.operator || \"?:\"\n            };\n\n            context.report({\n                node: left,\n                loc: getOperatorToken(left).loc,\n                messageId: \"unexpectedMixedOperator\",\n                data\n            });\n            context.report({\n                node: right,\n                loc: getOperatorToken(right).loc,\n                messageId: \"unexpectedMixedOperator\",\n                data\n            });\n        }\n\n        /**\n         * Checks between the operator of this node and the operator of the\n         * parent node.\n         * @param {ASTNode} node A node to check.\n         * @returns {void}\n         */\n        function check(node) {\n            if (\n                TARGET_NODE_TYPE.test(node.parent.type) &&\n                isMixedWithParent(node) &&\n                !shouldIgnore(node)\n            ) {\n                reportBothOperators(node);\n            }\n        }\n\n        return {\n            BinaryExpression: check,\n            LogicalExpression: check\n        };\n    }\n};\n/lib/rules/no-empty.js\t/**\n * @fileoverview Rule to flag use of an empty block statement\n * @author Nicholas C. Zakas\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow empty block statements\",\n            recommended: true,\n            url: \"https://eslint.org/docs/rules/no-empty\"\n        },\n\n        schema: [\n            {\n                type: \"object\",\n                properties: {\n                    allowEmptyCatch: {\n                        type: \"boolean\",\n                        default: false\n                    }\n                },\n                additionalProperties: false\n            }\n        ],\n\n        messages: {\n            unexpected: \"Empty {{type}} statement.\"\n        }\n    },\n\n    create(context) {\n        const options = context.options[0] || {},\n            allowEmptyCatch = options.allowEmptyCatch || false;\n\n        const sourceCode = context.getSourceCode();\n\n        return {\n            BlockStatement(node) {\n\n                // if the body is not empty, we can just return immediately\n                if (node.body.length !== 0) {\n                    return;\n                }\n\n                // a function is generally allowed to be empty\n                if (astUtils.isFunction(node.parent)) {\n                    return;\n                }\n\n                if (allowEmptyCatch && node.parent.type === \"CatchClause\") {\n                    return;\n                }\n\n                // any other block is only allowed to be empty, if it contains a comment\n                if (sourceCode.getCommentsInside(node).length > 0) {\n                    return;\n                }\n\n                context.report({ node, messageId: \"unexpected\", data: { type: \"block\" } });\n            },\n\n            SwitchStatement(node) {\n\n                if (typeof node.cases === \"undefined\" || node.cases.length === 0) {\n                    context.report({ node, messageId: \"unexpected\", data: { type: \"switch\" } });\n                }\n            }\n        };\n\n    }\n};\n/lib/rules/brace-style.js\u001f/**\n * @fileoverview Rule to flag block statements that do not use the one true brace style\n * @author Ian Christian Myers\n */\n\n\"use strict\";\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"layout\",\n\n        docs: {\n            description: \"enforce consistent brace style for blocks\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/brace-style\"\n        },\n\n        schema: [\n            {\n                enum: [\"1tbs\", \"stroustrup\", \"allman\"]\n            },\n            {\n                type: \"object\",\n                properties: {\n                    allowSingleLine: {\n                        type: \"boolean\",\n                        default: false\n                    }\n                },\n                additionalProperties: false\n            }\n        ],\n\n        fixable: \"whitespace\",\n\n        messages: {\n            nextLineOpen: \"Opening curly brace does not appear on the same line as controlling statement.\",\n            sameLineOpen: \"Opening curly brace appears on the same line as controlling statement.\",\n            blockSameLine: \"Statement inside of curly braces should be on next line.\",\n            nextLineClose: \"Closing curly brace does not appear on the same line as the subsequent block.\",\n            singleLineClose: \"Closing curly brace should be on the same line as opening curly brace or on the line after the previous block.\",\n            sameLineClose: \"Closing curly brace appears on the same line as the subsequent block.\"\n        }\n    },\n\n    create(context) {\n        const style = context.options[0] || \"1tbs\",\n            params = context.options[1] || {},\n            sourceCode = context.getSourceCode();\n\n        //--------------------------------------------------------------------------\n        // Helpers\n        //--------------------------------------------------------------------------\n\n        /**\n         * Fixes a place where a newline unexpectedly appears\n         * @param {Token} firstToken The token before the unexpected newline\n         * @param {Token} secondToken The token after the unexpected newline\n         * @returns {Function} A fixer function to remove the newlines between the tokens\n         */\n        function removeNewlineBetween(firstToken, secondToken) {\n            const textRange = [firstToken.range[1], secondToken.range[0]];\n            const textBetween = sourceCode.text.slice(textRange[0], textRange[1]);\n\n            // Don't do a fix if there is a comment between the tokens\n            if (textBetween.trim()) {\n                return null;\n            }\n            return fixer => fixer.replaceTextRange(textRange, \" \");\n        }\n\n        /**\n         * Validates a pair of curly brackets based on the user's config\n         * @param {Token} openingCurly The opening curly bracket\n         * @param {Token} closingCurly The closing curly bracket\n         * @returns {void}\n         */\n        function validateCurlyPair(openingCurly, closingCurly) {\n            const tokenBeforeOpeningCurly = sourceCode.getTokenBefore(openingCurly);\n            const tokenAfterOpeningCurly = sourceCode.getTokenAfter(openingCurly);\n            const tokenBeforeClosingCurly = sourceCode.getTokenBefore(closingCurly);\n            const singleLineException = params.allowSingleLine && astUtils.isTokenOnSameLine(openingCurly, closingCurly);\n\n            if (style !== \"allman\" && !astUtils.isTokenOnSameLine(tokenBeforeOpeningCurly, openingCurly)) {\n                context.report({\n                    node: openingCurly,\n                    messageId: \"nextLineOpen\",\n                    fix: removeNewlineBetween(tokenBeforeOpeningCurly, openingCurly)\n                });\n            }\n\n            if (style === \"allman\" && astUtils.isTokenOnSameLine(tokenBeforeOpeningCurly, openingCurly) && !singleLineException) {\n                context.report({\n                    node: openingCurly,\n                    messageId: \"sameLineOpen\",\n                    fix: fixer => fixer.insertTextBefore(openingCurly, \"\\n\")\n                });\n            }\n\n            if (astUtils.isTokenOnSameLine(openingCurly, tokenAfterOpeningCurly) && tokenAfterOpeningCurly !== closingCurly && !singleLineException) {\n                context.report({\n                    node: openingCurly,\n                    messageId: \"blockSameLine\",\n                    fix: fixer => fixer.insertTextAfter(openingCurly, \"\\n\")\n                });\n            }\n\n            if (tokenBeforeClosingCurly !== openingCurly && !singleLineException && astUtils.isTokenOnSameLine(tokenBeforeClosingCurly, closingCurly)) {\n                context.report({\n                    node: closingCurly,\n                    messageId: \"singleLineClose\",\n                    fix: fixer => fixer.insertTextBefore(closingCurly, \"\\n\")\n                });\n            }\n        }\n\n        /**\n         * Validates the location of a token that appears before a keyword (e.g. a newline before `else`)\n         * @param {Token} curlyToken The closing curly token. This is assumed to precede a keyword token (such as `else` or `finally`).\n         * @returns {void}\n         */\n        function validateCurlyBeforeKeyword(curlyToken) {\n            const keywordToken = sourceCode.getTokenAfter(curlyToken);\n\n            if (style === \"1tbs\" && !astUtils.isTokenOnSameLine(curlyToken, keywordToken)) {\n                context.report({\n                    node: curlyToken,\n                    messageId: \"nextLineClose\",\n                    fix: removeNewlineBetween(curlyToken, keywordToken)\n                });\n            }\n\n            if (style !== \"1tbs\" && astUtils.isTokenOnSameLine(curlyToken, keywordToken)) {\n                context.report({\n                    node: curlyToken,\n                    messageId: \"sameLineClose\",\n                    fix: fixer => fixer.insertTextAfter(curlyToken, \"\\n\")\n                });\n            }\n        }\n\n        //--------------------------------------------------------------------------\n        // Public API\n        //--------------------------------------------------------------------------\n\n        return {\n            BlockStatement(node) {\n                if (!astUtils.STATEMENT_LIST_PARENTS.has(node.parent.type)) {\n                    validateCurlyPair(sourceCode.getFirstToken(node), sourceCode.getLastToken(node));\n                }\n            },\n            StaticBlock(node) {\n                validateCurlyPair(\n                    sourceCode.getFirstToken(node, { skip: 1 }), // skip the `static` token\n                    sourceCode.getLastToken(node)\n                );\n            },\n            ClassBody(node) {\n                validateCurlyPair(sourceCode.getFirstToken(node), sourceCode.getLastToken(node));\n            },\n            SwitchStatement(node) {\n                const closingCurly = sourceCode.getLastToken(node);\n                const openingCurly = sourceCode.getTokenBefore(node.cases.length ? node.cases[0] : closingCurly);\n\n                validateCurlyPair(openingCurly, closingCurly);\n            },\n            IfStatement(node) {\n                if (node.consequent.type === \"BlockStatement\" && node.alternate) {\n\n                    // Handle the keyword after the `if` block (before `else`)\n                    validateCurlyBeforeKeyword(sourceCode.getLastToken(node.consequent));\n                }\n            },\n            TryStatement(node) {\n\n                // Handle the keyword after the `try` block (before `catch` or `finally`)\n                validateCurlyBeforeKeyword(sourceCode.getLastToken(node.block));\n\n                if (node.handler && node.finalizer) {\n\n                    // Handle the keyword after the `catch` block (before `finally`)\n                    validateCurlyBeforeKeyword(sourceCode.getLastToken(node.handler.body));\n                }\n            }\n        };\n    }\n};\n/lib/rules/no-duplicate-case.js\b%/**\n * @fileoverview Rule to disallow a duplicate case label.\n * @author Dieter Oberkofler\n * @author Burak Yigit Kaya\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"problem\",\n\n        docs: {\n            description: \"disallow duplicate case labels\",\n            recommended: true,\n            url: \"https://eslint.org/docs/rules/no-duplicate-case\"\n        },\n\n        schema: [],\n\n        messages: {\n            unexpected: \"Duplicate case label.\"\n        }\n    },\n\n    create(context) {\n        const sourceCode = context.getSourceCode();\n\n        /**\n         * Determines whether the two given nodes are considered to be equal.\n         * @param {ASTNode} a First node.\n         * @param {ASTNode} b Second node.\n         * @returns {boolean} `true` if the nodes are considered to be equal.\n         */\n        function equal(a, b) {\n            if (a.type !== b.type) {\n                return false;\n            }\n\n            return astUtils.equalTokens(a, b, sourceCode);\n        }\n        return {\n            SwitchStatement(node) {\n                const previousTests = [];\n\n                for (const switchCase of node.cases) {\n                    if (switchCase.test) {\n                        const test = switchCase.test;\n\n                        if (previousTests.some(previousTest => equal(previousTest, test))) {\n                            context.report({ node: switchCase, messageId: \"unexpected\" });\n                        } else {\n                            previousTests.push(test);\n                        }\n                    }\n                }\n            }\n        };\n    }\n};\n/lib/rules/no-unsafe-finally.js\u000f/**\n * @fileoverview Rule to flag unsafe statements in finally block\n * @author Onur Temizkan\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\nconst SENTINEL_NODE_TYPE_RETURN_THROW = /^(?:Program|(?:Function|Class)(?:Declaration|Expression)|ArrowFunctionExpression)$/u;\nconst SENTINEL_NODE_TYPE_BREAK = /^(?:Program|(?:Function|Class)(?:Declaration|Expression)|ArrowFunctionExpression|DoWhileStatement|WhileStatement|ForOfStatement|ForInStatement|ForStatement|SwitchStatement)$/u;\nconst SENTINEL_NODE_TYPE_CONTINUE = /^(?:Program|(?:Function|Class)(?:Declaration|Expression)|ArrowFunctionExpression|DoWhileStatement|WhileStatement|ForOfStatement|ForInStatement|ForStatement)$/u;\n\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"problem\",\n\n        docs: {\n            description: \"disallow control flow statements in `finally` blocks\",\n            recommended: true,\n            url: \"https://eslint.org/docs/rules/no-unsafe-finally\"\n        },\n\n        schema: [],\n\n        messages: {\n            unsafeUsage: \"Unsafe usage of {{nodeType}}.\"\n        }\n    },\n    create(context) {\n\n        /**\n         * Checks if the node is the finalizer of a TryStatement\n         * @param {ASTNode} node node to check.\n         * @returns {boolean} - true if the node is the finalizer of a TryStatement\n         */\n        function isFinallyBlock(node) {\n            return node.parent.type === \"TryStatement\" && node.parent.finalizer === node;\n        }\n\n        /**\n         * Climbs up the tree if the node is not a sentinel node\n         * @param {ASTNode} node node to check.\n         * @param {string} label label of the break or continue statement\n         * @returns {boolean} - return whether the node is a finally block or a sentinel node\n         */\n        function isInFinallyBlock(node, label) {\n            let labelInside = false;\n            let sentinelNodeType;\n\n            if (node.type === \"BreakStatement\" && !node.label) {\n                sentinelNodeType = SENTINEL_NODE_TYPE_BREAK;\n            } else if (node.type === \"ContinueStatement\") {\n                sentinelNodeType = SENTINEL_NODE_TYPE_CONTINUE;\n            } else {\n                sentinelNodeType = SENTINEL_NODE_TYPE_RETURN_THROW;\n            }\n\n            for (\n                let currentNode = node;\n                currentNode && !sentinelNodeType.test(currentNode.type);\n                currentNode = currentNode.parent\n            ) {\n                if (currentNode.parent.label && label && (currentNode.parent.label.name === label.name)) {\n                    labelInside = true;\n                }\n                if (isFinallyBlock(currentNode)) {\n                    if (label && labelInside) {\n                        return false;\n                    }\n                    return true;\n                }\n            }\n            return false;\n        }\n\n        /**\n         * Checks whether the possibly-unsafe statement is inside a finally block.\n         * @param {ASTNode} node node to check.\n         * @returns {void}\n         */\n        function check(node) {\n            if (isInFinallyBlock(node, node.label)) {\n                context.report({\n                    messageId: \"unsafeUsage\",\n                    data: {\n                        nodeType: node.type\n                    },\n                    node,\n                    line: node.loc.line,\n                    column: node.loc.column\n                });\n            }\n        }\n\n        return {\n            ReturnStatement: check,\n            ThrowStatement: check,\n            BreakStatement: check,\n            ContinueStatement: check\n        };\n    }\n};\n\"/lib/cli-engine/formatters/json.js\u0001]/**\n * @fileoverview JSON reporter\n * @author Burak Yigit Kaya aka BYK\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Public Interface\n//------------------------------------------------------------------------------\n\nmodule.exports = function(results) {\n    return JSON.stringify(results);\n};\n8/lib/rules/utils/unicode/is-regional-indicator-symbol.js\u0001/**\n * @author Toru Nagashima <https://github.com/mysticatea>\n */\n\"use strict\";\n\n/**\n * Check whether a given character is a regional indicator symbol.\n * @param {number} code The character code to check.\n * @returns {boolean} `true` if the character is a regional indicator symbol.\n */\nmodule.exports = function isRegionalIndicatorSymbol(code) {\n    return code >= 0x1F1E6 && code <= 0x1F1FF;\n};\n/bin/eslint.js\u0010#!/usr/bin/env node\n\n/**\n * @fileoverview Main CLI that is run via the eslint command.\n * @author Nicholas C. Zakas\n */\n\n/* eslint no-console:off -- CLI */\n\n\"use strict\";\n\n// to use V8's code cache to speed up instantiation time\nrequire(\"v8-compile-cache\");\n\n// must do this initialization *before* other requires in order to work\nif (process.argv.includes(\"--debug\")) {\n    require(\"debug\").enable(\"eslint:*,-eslint:code-path,eslintrc:*\");\n}\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\n/**\n * Read data from stdin til the end.\n *\n * Note: See\n * - https://github.com/nodejs/node/blob/master/doc/api/process.md#processstdin\n * - https://github.com/nodejs/node/blob/master/doc/api/process.md#a-note-on-process-io\n * - https://lists.gnu.org/archive/html/bug-gnu-emacs/2016-01/msg00419.html\n * - https://github.com/nodejs/node/issues/7439 (historical)\n *\n * On Windows using `fs.readFileSync(STDIN_FILE_DESCRIPTOR, \"utf8\")` seems\n * to read 4096 bytes before blocking and never drains to read further data.\n *\n * The investigation on the Emacs thread indicates:\n *\n * > Emacs on MS-Windows uses pipes to communicate with subprocesses; a\n * > pipe on Windows has a 4K buffer. So as soon as Emacs writes more than\n * > 4096 bytes to the pipe, the pipe becomes full, and Emacs then waits for\n * > the subprocess to read its end of the pipe, at which time Emacs will\n * > write the rest of the stuff.\n * @returns {Promise<string>} The read text.\n */\nfunction readStdin() {\n    return new Promise((resolve, reject) => {\n        let content = \"\";\n        let chunk = \"\";\n\n        process.stdin\n            .setEncoding(\"utf8\")\n            .on(\"readable\", () => {\n                while ((chunk = process.stdin.read()) !== null) {\n                    content += chunk;\n                }\n            })\n            .on(\"end\", () => resolve(content))\n            .on(\"error\", reject);\n    });\n}\n\n/**\n * Get the error message of a given value.\n * @param {any} error The value to get.\n * @returns {string} The error message.\n */\nfunction getErrorMessage(error) {\n\n    // Lazy loading because this is used only if an error happened.\n    const util = require(\"util\");\n\n    // Foolproof -- thirdparty module might throw non-object.\n    if (typeof error !== \"object\" || error === null) {\n        return String(error);\n    }\n\n    // Use templates if `error.messageTemplate` is present.\n    if (typeof error.messageTemplate === \"string\") {\n        try {\n            const template = require(`../messages/${error.messageTemplate}.js`);\n\n            return template(error.messageData || {});\n        } catch {\n\n            // Ignore template error then fallback to use `error.stack`.\n        }\n    }\n\n    // Use the stacktrace if it's an error object.\n    if (typeof error.stack === \"string\") {\n        return error.stack;\n    }\n\n    // Otherwise, dump the object.\n    return util.format(\"%o\", error);\n}\n\n/**\n * Catch and report unexpected error.\n * @param {any} error The thrown error object.\n * @returns {void}\n */\nfunction onFatalError(error) {\n    process.exitCode = 2;\n\n    const { version } = require(\"../package.json\");\n    const message = getErrorMessage(error);\n\n    console.error(`\nOops! Something went wrong! :(\n\nESLint: ${version}\n\n${message}`);\n}\n\n//------------------------------------------------------------------------------\n// Execution\n//------------------------------------------------------------------------------\n\n(async function main() {\n    process.on(\"uncaughtException\", onFatalError);\n    process.on(\"unhandledRejection\", onFatalError);\n\n    // Call the config initializer if `--init` is present.\n    if (process.argv.includes(\"--init\")) {\n\n        // `eslint --init` has been moved to `@eslint/create-config`\n        console.warn(\"You can also run this command directly using 'npm init @eslint/config'.\");\n\n        const spawn = require(\"cross-spawn\");\n\n        spawn.sync(\"npm\", [\"init\", \"@eslint/config\"], { encoding: \"utf8\", stdio: \"inherit\" });\n        return;\n    }\n\n    // Otherwise, call the CLI.\n    process.exitCode = await require(\"../lib/cli\").execute(\n        process.argv,\n        process.argv.includes(\"--stdin\") ? await readStdin() : null\n    );\n}()).catch(onFatalError);\n/lib/rules/spaced-comment.js3\u0016/**\n * @fileoverview Source code for spaced-comments rule\n * @author Gyandeep Singh\n */\n\"use strict\";\n\nconst escapeRegExp = require(\"escape-string-regexp\");\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\n/**\n * Escapes the control characters of a given string.\n * @param {string} s A string to escape.\n * @returns {string} An escaped string.\n */\nfunction escape(s) {\n    return `(?:${escapeRegExp(s)})`;\n}\n\n/**\n * Escapes the control characters of a given string.\n * And adds a repeat flag.\n * @param {string} s A string to escape.\n * @returns {string} An escaped string.\n */\nfunction escapeAndRepeat(s) {\n    return `${escape(s)}+`;\n}\n\n/**\n * Parses `markers` option.\n * If markers don't include `\"*\"`, this adds `\"*\"` to allow JSDoc comments.\n * @param {string[]} [markers] A marker list.\n * @returns {string[]} A marker list.\n */\nfunction parseMarkersOption(markers) {\n\n    // `*` is a marker for JSDoc comments.\n    if (markers.indexOf(\"*\") === -1) {\n        return markers.concat(\"*\");\n    }\n\n    return markers;\n}\n\n/**\n * Creates string pattern for exceptions.\n * Generated pattern:\n *\n * 1. A space or an exception pattern sequence.\n * @param {string[]} exceptions An exception pattern list.\n * @returns {string} A regular expression string for exceptions.\n */\nfunction createExceptionsPattern(exceptions) {\n    let pattern = \"\";\n\n    /*\n     * A space or an exception pattern sequence.\n     * []                 ==> \"\\s\"\n     * [\"-\"]              ==> \"(?:\\s|\\-+$)\"\n     * [\"-\", \"=\"]         ==> \"(?:\\s|(?:\\-+|=+)$)\"\n     * [\"-\", \"=\", \"--==\"] ==> \"(?:\\s|(?:\\-+|=+|(?:\\-\\-==)+)$)\" ==> https://jex.im/regulex/#!embed=false&flags=&re=(%3F%3A%5Cs%7C(%3F%3A%5C-%2B%7C%3D%2B%7C(%3F%3A%5C-%5C-%3D%3D)%2B)%24)\n     */\n    if (exceptions.length === 0) {\n\n        // a space.\n        pattern += \"\\\\s\";\n    } else {\n\n        // a space or...\n        pattern += \"(?:\\\\s|\";\n\n        if (exceptions.length === 1) {\n\n            // a sequence of the exception pattern.\n            pattern += escapeAndRepeat(exceptions[0]);\n        } else {\n\n            // a sequence of one of the exception patterns.\n            pattern += \"(?:\";\n            pattern += exceptions.map(escapeAndRepeat).join(\"|\");\n            pattern += \")\";\n        }\n        pattern += `(?:$|[${Array.from(astUtils.LINEBREAKS).join(\"\")}]))`;\n    }\n\n    return pattern;\n}\n\n/**\n * Creates RegExp object for `always` mode.\n * Generated pattern for beginning of comment:\n *\n * 1. First, a marker or nothing.\n * 2. Next, a space or an exception pattern sequence.\n * @param {string[]} markers A marker list.\n * @param {string[]} exceptions An exception pattern list.\n * @returns {RegExp} A RegExp object for the beginning of a comment in `always` mode.\n */\nfunction createAlwaysStylePattern(markers, exceptions) {\n    let pattern = \"^\";\n\n    /*\n     * A marker or nothing.\n     * [\"*\"]            ==> \"\\*?\"\n     * [\"*\", \"!\"]       ==> \"(?:\\*|!)?\"\n     * [\"*\", \"/\", \"!<\"] ==> \"(?:\\*|\\/|(?:!<))?\" ==> https://jex.im/regulex/#!embed=false&flags=&re=(%3F%3A%5C*%7C%5C%2F%7C(%3F%3A!%3C))%3F\n     */\n    if (markers.length === 1) {\n\n        // the marker.\n        pattern += escape(markers[0]);\n    } else {\n\n        // one of markers.\n        pattern += \"(?:\";\n        pattern += markers.map(escape).join(\"|\");\n        pattern += \")\";\n    }\n\n    pattern += \"?\"; // or nothing.\n    pattern += createExceptionsPattern(exceptions);\n\n    return new RegExp(pattern, \"u\");\n}\n\n/**\n * Creates RegExp object for `never` mode.\n * Generated pattern for beginning of comment:\n *\n * 1. First, a marker or nothing (captured).\n * 2. Next, a space or a tab.\n * @param {string[]} markers A marker list.\n * @returns {RegExp} A RegExp object for `never` mode.\n */\nfunction createNeverStylePattern(markers) {\n    const pattern = `^(${markers.map(escape).join(\"|\")})?[ \\t]+`;\n\n    return new RegExp(pattern, \"u\");\n}\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"enforce consistent spacing after the `//` or `/*` in a comment\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/spaced-comment\"\n        },\n\n        fixable: \"whitespace\",\n\n        schema: [\n            {\n                enum: [\"always\", \"never\"]\n            },\n            {\n                type: \"object\",\n                properties: {\n                    exceptions: {\n                        type: \"array\",\n                        items: {\n                            type: \"string\"\n                        }\n                    },\n                    markers: {\n                        type: \"array\",\n                        items: {\n                            type: \"string\"\n                        }\n                    },\n                    line: {\n                        type: \"object\",\n                        properties: {\n                            exceptions: {\n                                type: \"array\",\n                                items: {\n                                    type: \"string\"\n                                }\n                            },\n                            markers: {\n                                type: \"array\",\n                                items: {\n                                    type: \"string\"\n                                }\n                            }\n                        },\n                        additionalProperties: false\n                    },\n                    block: {\n                        type: \"object\",\n                        properties: {\n                            exceptions: {\n                                type: \"array\",\n                                items: {\n                                    type: \"string\"\n                                }\n                            },\n                            markers: {\n                                type: \"array\",\n                                items: {\n                                    type: \"string\"\n                                }\n                            },\n                            balanced: {\n                                type: \"boolean\",\n                                default: false\n                            }\n                        },\n                        additionalProperties: false\n                    }\n                },\n                additionalProperties: false\n            }\n        ],\n\n        messages: {\n            unexpectedSpaceAfterMarker: \"Unexpected space or tab after marker ({{refChar}}) in comment.\",\n            expectedExceptionAfter: \"Expected exception block, space or tab after '{{refChar}}' in comment.\",\n            unexpectedSpaceBefore: \"Unexpected space or tab before '*/' in comment.\",\n            unexpectedSpaceAfter: \"Unexpected space or tab after '{{refChar}}' in comment.\",\n            expectedSpaceBefore: \"Expected space or tab before '*/' in comment.\",\n            expectedSpaceAfter: \"Expected space or tab after '{{refChar}}' in comment.\"\n        }\n    },\n\n    create(context) {\n\n        const sourceCode = context.getSourceCode();\n\n        // Unless the first option is never, require a space\n        const requireSpace = context.options[0] !== \"never\";\n\n        /*\n         * Parse the second options.\n         * If markers don't include `\"*\"`, it's added automatically for JSDoc\n         * comments.\n         */\n        const config = context.options[1] || {};\n        const balanced = config.block && config.block.balanced;\n\n        const styleRules = [\"block\", \"line\"].reduce((rule, type) => {\n            const markers = parseMarkersOption(config[type] && config[type].markers || config.markers || []);\n            const exceptions = config[type] && config[type].exceptions || config.exceptions || [];\n            const endNeverPattern = \"[ \\t]+$\";\n\n            // Create RegExp object for valid patterns.\n            rule[type] = {\n                beginRegex: requireSpace ? createAlwaysStylePattern(markers, exceptions) : createNeverStylePattern(markers),\n                endRegex: balanced && requireSpace ? new RegExp(`${createExceptionsPattern(exceptions)}$`, \"u\") : new RegExp(endNeverPattern, \"u\"),\n                hasExceptions: exceptions.length > 0,\n                captureMarker: new RegExp(`^(${markers.map(escape).join(\"|\")})`, \"u\"),\n                markers: new Set(markers)\n            };\n\n            return rule;\n        }, {});\n\n        /**\n         * Reports a beginning spacing error with an appropriate message.\n         * @param {ASTNode} node A comment node to check.\n         * @param {string} messageId An error message to report.\n         * @param {Array} match An array of match results for markers.\n         * @param {string} refChar Character used for reference in the error message.\n         * @returns {void}\n         */\n        function reportBegin(node, messageId, match, refChar) {\n            const type = node.type.toLowerCase(),\n                commentIdentifier = type === \"block\" ? \"/*\" : \"//\";\n\n            context.report({\n                node,\n                fix(fixer) {\n                    const start = node.range[0];\n                    let end = start + 2;\n\n                    if (requireSpace) {\n                        if (match) {\n                            end += match[0].length;\n                        }\n                        return fixer.insertTextAfterRange([start, end], \" \");\n                    }\n                    end += match[0].length;\n                    return fixer.replaceTextRange([start, end], commentIdentifier + (match[1] ? match[1] : \"\"));\n\n                },\n                messageId,\n                data: { refChar }\n            });\n        }\n\n        /**\n         * Reports an ending spacing error with an appropriate message.\n         * @param {ASTNode} node A comment node to check.\n         * @param {string} messageId An error message to report.\n         * @param {string} match An array of the matched whitespace characters.\n         * @returns {void}\n         */\n        function reportEnd(node, messageId, match) {\n            context.report({\n                node,\n                fix(fixer) {\n                    if (requireSpace) {\n                        return fixer.insertTextAfterRange([node.range[0], node.range[1] - 2], \" \");\n                    }\n                    const end = node.range[1] - 2,\n                        start = end - match[0].length;\n\n                    return fixer.replaceTextRange([start, end], \"\");\n\n                },\n                messageId\n            });\n        }\n\n        /**\n         * Reports a given comment if it's invalid.\n         * @param {ASTNode} node a comment node to check.\n         * @returns {void}\n         */\n        function checkCommentForSpace(node) {\n            const type = node.type.toLowerCase(),\n                rule = styleRules[type],\n                commentIdentifier = type === \"block\" ? \"/*\" : \"//\";\n\n            // Ignores empty comments and comments that consist only of a marker.\n            if (node.value.length === 0 || rule.markers.has(node.value)) {\n                return;\n            }\n\n            const beginMatch = rule.beginRegex.exec(node.value);\n            const endMatch = rule.endRegex.exec(node.value);\n\n            // Checks.\n            if (requireSpace) {\n                if (!beginMatch) {\n                    const hasMarker = rule.captureMarker.exec(node.value);\n                    const marker = hasMarker ? commentIdentifier + hasMarker[0] : commentIdentifier;\n\n                    if (rule.hasExceptions) {\n                        reportBegin(node, \"expectedExceptionAfter\", hasMarker, marker);\n                    } else {\n                        reportBegin(node, \"expectedSpaceAfter\", hasMarker, marker);\n                    }\n                }\n\n                if (balanced && type === \"block\" && !endMatch) {\n                    reportEnd(node, \"expectedSpaceBefore\");\n                }\n            } else {\n                if (beginMatch) {\n                    if (!beginMatch[1]) {\n                        reportBegin(node, \"unexpectedSpaceAfter\", beginMatch, commentIdentifier);\n                    } else {\n                        reportBegin(node, \"unexpectedSpaceAfterMarker\", beginMatch, beginMatch[1]);\n                    }\n                }\n\n                if (balanced && type === \"block\" && endMatch) {\n                    reportEnd(node, \"unexpectedSpaceBefore\", endMatch);\n                }\n            }\n        }\n\n        return {\n            Program() {\n                const comments = sourceCode.getAllComments();\n\n                comments.filter(token => token.type !== \"Shebang\").forEach(checkCommentForSpace);\n            }\n        };\n    }\n};\n\"/lib/rules/no-duplicate-imports.js%\u0015/**\n * @fileoverview Restrict usage of duplicate imports.\n * @author Simen Bekkhus\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\nconst NAMED_TYPES = [\"ImportSpecifier\", \"ExportSpecifier\"];\nconst NAMESPACE_TYPES = [\n    \"ImportNamespaceSpecifier\",\n    \"ExportNamespaceSpecifier\"\n];\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/**\n * Check if an import/export type belongs to (ImportSpecifier|ExportSpecifier) or (ImportNamespaceSpecifier|ExportNamespaceSpecifier).\n * @param {string} importExportType An import/export type to check.\n * @param {string} type Can be \"named\" or \"namespace\"\n * @returns {boolean} True if import/export type belongs to (ImportSpecifier|ExportSpecifier) or (ImportNamespaceSpecifier|ExportNamespaceSpecifier) and false if it doesn't.\n */\nfunction isImportExportSpecifier(importExportType, type) {\n    const arrayToCheck = type === \"named\" ? NAMED_TYPES : NAMESPACE_TYPES;\n\n    return arrayToCheck.includes(importExportType);\n}\n\n/**\n * Return the type of (import|export).\n * @param {ASTNode} node A node to get.\n * @returns {string} The type of the (import|export).\n */\nfunction getImportExportType(node) {\n    if (node.specifiers && node.specifiers.length > 0) {\n        const nodeSpecifiers = node.specifiers;\n        const index = nodeSpecifiers.findIndex(\n            ({ type }) =>\n                isImportExportSpecifier(type, \"named\") ||\n                isImportExportSpecifier(type, \"namespace\")\n        );\n        const i = index > -1 ? index : 0;\n\n        return nodeSpecifiers[i].type;\n    }\n    if (node.type === \"ExportAllDeclaration\") {\n        if (node.exported) {\n            return \"ExportNamespaceSpecifier\";\n        }\n        return \"ExportAll\";\n    }\n    return \"SideEffectImport\";\n}\n\n/**\n * Returns a boolean indicates if two (import|export) can be merged\n * @param {ASTNode} node1 A node to check.\n * @param {ASTNode} node2 A node to check.\n * @returns {boolean} True if two (import|export) can be merged, false if they can't.\n */\nfunction isImportExportCanBeMerged(node1, node2) {\n    const importExportType1 = getImportExportType(node1);\n    const importExportType2 = getImportExportType(node2);\n\n    if (\n        (importExportType1 === \"ExportAll\" &&\n            importExportType2 !== \"ExportAll\" &&\n            importExportType2 !== \"SideEffectImport\") ||\n        (importExportType1 !== \"ExportAll\" &&\n            importExportType1 !== \"SideEffectImport\" &&\n            importExportType2 === \"ExportAll\")\n    ) {\n        return false;\n    }\n    if (\n        (isImportExportSpecifier(importExportType1, \"namespace\") &&\n            isImportExportSpecifier(importExportType2, \"named\")) ||\n        (isImportExportSpecifier(importExportType2, \"namespace\") &&\n            isImportExportSpecifier(importExportType1, \"named\"))\n    ) {\n        return false;\n    }\n    return true;\n}\n\n/**\n * Returns a boolean if we should report (import|export).\n * @param {ASTNode} node A node to be reported or not.\n * @param {[ASTNode]} previousNodes An array contains previous nodes of the module imported or exported.\n * @returns {boolean} True if the (import|export) should be reported.\n */\nfunction shouldReportImportExport(node, previousNodes) {\n    let i = 0;\n\n    while (i < previousNodes.length) {\n        if (isImportExportCanBeMerged(node, previousNodes[i])) {\n            return true;\n        }\n        i++;\n    }\n    return false;\n}\n\n/**\n * Returns array contains only nodes with declarations types equal to type.\n * @param {[{node: ASTNode, declarationType: string}]} nodes An array contains objects, each object contains a node and a declaration type.\n * @param {string} type Declaration type.\n * @returns {[ASTNode]} An array contains only nodes with declarations types equal to type.\n */\nfunction getNodesByDeclarationType(nodes, type) {\n    return nodes\n        .filter(({ declarationType }) => declarationType === type)\n        .map(({ node }) => node);\n}\n\n/**\n * Returns the name of the module imported or re-exported.\n * @param {ASTNode} node A node to get.\n * @returns {string} The name of the module, or empty string if no name.\n */\nfunction getModule(node) {\n    if (node && node.source && node.source.value) {\n        return node.source.value.trim();\n    }\n    return \"\";\n}\n\n/**\n * Checks if the (import|export) can be merged with at least one import or one export, and reports if so.\n * @param {RuleContext} context The ESLint rule context object.\n * @param {ASTNode} node A node to get.\n * @param {Map} modules A Map object contains as a key a module name and as value an array contains objects, each object contains a node and a declaration type.\n * @param {string} declarationType A declaration type can be an import or export.\n * @param {boolean} includeExports Whether or not to check for exports in addition to imports.\n * @returns {void} No return value.\n */\nfunction checkAndReport(\n    context,\n    node,\n    modules,\n    declarationType,\n    includeExports\n) {\n    const module = getModule(node);\n\n    if (modules.has(module)) {\n        const previousNodes = modules.get(module);\n        const messagesIds = [];\n        const importNodes = getNodesByDeclarationType(previousNodes, \"import\");\n        let exportNodes;\n\n        if (includeExports) {\n            exportNodes = getNodesByDeclarationType(previousNodes, \"export\");\n        }\n        if (declarationType === \"import\") {\n            if (shouldReportImportExport(node, importNodes)) {\n                messagesIds.push(\"import\");\n            }\n            if (includeExports) {\n                if (shouldReportImportExport(node, exportNodes)) {\n                    messagesIds.push(\"importAs\");\n                }\n            }\n        } else if (declarationType === \"export\") {\n            if (shouldReportImportExport(node, exportNodes)) {\n                messagesIds.push(\"export\");\n            }\n            if (shouldReportImportExport(node, importNodes)) {\n                messagesIds.push(\"exportAs\");\n            }\n        }\n        messagesIds.forEach(messageId =>\n            context.report({\n                node,\n                messageId,\n                data: {\n                    module\n                }\n            }));\n    }\n}\n\n/**\n * @callback nodeCallback\n * @param {ASTNode} node A node to handle.\n */\n\n/**\n * Returns a function handling the (imports|exports) of a given file\n * @param {RuleContext} context The ESLint rule context object.\n * @param {Map} modules A Map object contains as a key a module name and as value an array contains objects, each object contains a node and a declaration type.\n * @param {string} declarationType A declaration type can be an import or export.\n * @param {boolean} includeExports Whether or not to check for exports in addition to imports.\n * @returns {nodeCallback} A function passed to ESLint to handle the statement.\n */\nfunction handleImportsExports(\n    context,\n    modules,\n    declarationType,\n    includeExports\n) {\n    return function(node) {\n        const module = getModule(node);\n\n        if (module) {\n            checkAndReport(\n                context,\n                node,\n                modules,\n                declarationType,\n                includeExports\n            );\n            const currentNode = { node, declarationType };\n            let nodes = [currentNode];\n\n            if (modules.has(module)) {\n                const previousNodes = modules.get(module);\n\n                nodes = [...previousNodes, currentNode];\n            }\n            modules.set(module, nodes);\n        }\n    };\n}\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"problem\",\n\n        docs: {\n            description: \"disallow duplicate module imports\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-duplicate-imports\"\n        },\n\n        schema: [\n            {\n                type: \"object\",\n                properties: {\n                    includeExports: {\n                        type: \"boolean\",\n                        default: false\n                    }\n                },\n                additionalProperties: false\n            }\n        ],\n\n        messages: {\n            import: \"'{{module}}' import is duplicated.\",\n            importAs: \"'{{module}}' import is duplicated as export.\",\n            export: \"'{{module}}' export is duplicated.\",\n            exportAs: \"'{{module}}' export is duplicated as import.\"\n        }\n    },\n\n    create(context) {\n        const includeExports = (context.options[0] || {}).includeExports,\n            modules = new Map();\n        const handlers = {\n            ImportDeclaration: handleImportsExports(\n                context,\n                modules,\n                \"import\",\n                includeExports\n            )\n        };\n\n        if (includeExports) {\n            handlers.ExportNamedDeclaration = handleImportsExports(\n                context,\n                modules,\n                \"export\",\n                includeExports\n            );\n            handlers.ExportAllDeclaration = handleImportsExports(\n                context,\n                modules,\n                \"export\",\n                includeExports\n            );\n        }\n        return handlers;\n    }\n};\n%/lib/rules/no-useless-computed-key.js\u00198/**\n * @fileoverview Rule to disallow unnecessary computed property keys in object literals\n * @author Burak Yigit Kaya\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\n/**\n * Determines whether the computed key syntax is unnecessarily used for the given node.\n * In particular, it determines whether removing the square brackets and using the content between them\n * directly as the key (e.g. ['foo'] -> 'foo') would produce valid syntax and preserve the same behavior.\n * Valid non-computed keys are only: identifiers, number literals and string literals.\n * Only literals can preserve the same behavior, with a few exceptions for specific node types:\n * Property\n *   - { [\"__proto__\"]: foo } defines a property named \"__proto__\"\n *     { \"__proto__\": foo } defines object's prototype\n * PropertyDefinition\n *   - class C { [\"constructor\"]; } defines an instance field named \"constructor\"\n *     class C { \"constructor\"; } produces a parsing error\n *   - class C { static [\"constructor\"]; } defines a static field named \"constructor\"\n *     class C { static \"constructor\"; } produces a parsing error\n *   - class C { static [\"prototype\"]; } produces a runtime error (doesn't break the whole script)\n *     class C { static \"prototype\"; } produces a parsing error (breaks the whole script)\n * MethodDefinition\n *   - class C { [\"constructor\"]() {} } defines a prototype method named \"constructor\"\n *     class C { \"constructor\"() {} } defines the constructor\n *   - class C { static [\"prototype\"]() {} } produces a runtime error (doesn't break the whole script)\n *     class C { static \"prototype\"() {} } produces a parsing error (breaks the whole script)\n * @param {ASTNode} node The node to check. It can be `Property`, `PropertyDefinition` or `MethodDefinition`.\n * @throws {Error} (Unreachable.)\n * @returns {void} `true` if the node has useless computed key.\n */\nfunction hasUselessComputedKey(node) {\n    if (!node.computed) {\n        return false;\n    }\n\n    const { key } = node;\n\n    if (key.type !== \"Literal\") {\n        return false;\n    }\n\n    const { value } = key;\n\n    if (typeof value !== \"number\" && typeof value !== \"string\") {\n        return false;\n    }\n\n    switch (node.type) {\n        case \"Property\":\n            return value !== \"__proto__\";\n\n        case \"PropertyDefinition\":\n            if (node.static) {\n                return value !== \"constructor\" && value !== \"prototype\";\n            }\n\n            return value !== \"constructor\";\n\n        case \"MethodDefinition\":\n            if (node.static) {\n                return value !== \"prototype\";\n            }\n\n            return value !== \"constructor\";\n\n        /* istanbul ignore next */\n        default:\n            throw new Error(`Unexpected node type: ${node.type}`);\n    }\n\n}\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow unnecessary computed property keys in objects and classes\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-useless-computed-key\"\n        },\n\n        schema: [{\n            type: \"object\",\n            properties: {\n                enforceForClassMembers: {\n                    type: \"boolean\",\n                    default: false\n                }\n            },\n            additionalProperties: false\n        }],\n        fixable: \"code\",\n\n        messages: {\n            unnecessarilyComputedProperty: \"Unnecessarily computed property [{{property}}] found.\"\n        }\n    },\n    create(context) {\n        const sourceCode = context.getSourceCode();\n        const enforceForClassMembers = context.options[0] && context.options[0].enforceForClassMembers;\n\n        /**\n         * Reports a given node if it violated this rule.\n         * @param {ASTNode} node The node to check.\n         * @returns {void}\n         */\n        function check(node) {\n            if (hasUselessComputedKey(node)) {\n                const { key } = node;\n\n                context.report({\n                    node,\n                    messageId: \"unnecessarilyComputedProperty\",\n                    data: { property: sourceCode.getText(key) },\n                    fix(fixer) {\n                        const leftSquareBracket = sourceCode.getTokenBefore(key, astUtils.isOpeningBracketToken);\n                        const rightSquareBracket = sourceCode.getTokenAfter(key, astUtils.isClosingBracketToken);\n\n                        // If there are comments between the brackets and the property name, don't do a fix.\n                        if (sourceCode.commentsExistBetween(leftSquareBracket, rightSquareBracket)) {\n                            return null;\n                        }\n\n                        const tokenBeforeLeftBracket = sourceCode.getTokenBefore(leftSquareBracket);\n\n                        // Insert a space before the key to avoid changing identifiers, e.g. ({ get[2]() {} }) to ({ get2() {} })\n                        const needsSpaceBeforeKey = tokenBeforeLeftBracket.range[1] === leftSquareBracket.range[0] &&\n                            !astUtils.canTokensBeAdjacent(tokenBeforeLeftBracket, sourceCode.getFirstToken(key));\n\n                        const replacementKey = (needsSpaceBeforeKey ? \" \" : \"\") + key.raw;\n\n                        return fixer.replaceTextRange([leftSquareBracket.range[0], rightSquareBracket.range[1]], replacementKey);\n                    }\n                });\n            }\n        }\n\n        /**\n         * A no-op function to act as placeholder for checking a node when the `enforceForClassMembers` option is `false`.\n         * @returns {void}\n         * @private\n         */\n        function noop() {}\n\n        return {\n            Property: check,\n            MethodDefinition: enforceForClassMembers ? check : noop,\n            PropertyDefinition: enforceForClassMembers ? check : noop\n        };\n    }\n};\n/lib/shared/config-validator.js-K/*\n * STOP!!! DO NOT MODIFY.\n *\n * This file is part of the ongoing work to move the eslintrc-style config\n * system into the @eslint/eslintrc package. This file needs to remain\n * unchanged in order for this work to proceed.\n *\n * If you think you need to change this file, please contact @nzakas first.\n *\n * Thanks in advance for your cooperation.\n */\n\n/**\n * @fileoverview Validates configs.\n * @author Brandon Mills\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst\n    util = require(\"util\"),\n    configSchema = require(\"../../conf/config-schema\"),\n    BuiltInRules = require(\"../rules\"),\n    {\n        Legacy: {\n            ConfigOps,\n            environments: BuiltInEnvironments\n        }\n    } = require(\"@eslint/eslintrc\"),\n    { emitDeprecationWarning } = require(\"./deprecation-warnings\");\n\nconst ajv = require(\"./ajv\")();\nconst ruleValidators = new WeakMap();\nconst noop = Function.prototype;\n\n//------------------------------------------------------------------------------\n// Private\n//------------------------------------------------------------------------------\nlet validateSchema;\nconst severityMap = {\n    error: 2,\n    warn: 1,\n    off: 0\n};\n\n/**\n * Gets a complete options schema for a rule.\n * @param {{create: Function, schema: (Array|null)}} rule A new-style rule object\n * @returns {Object} JSON Schema for the rule's options.\n */\nfunction getRuleOptionsSchema(rule) {\n    if (!rule) {\n        return null;\n    }\n\n    const schema = rule.schema || rule.meta && rule.meta.schema;\n\n    // Given a tuple of schemas, insert warning level at the beginning\n    if (Array.isArray(schema)) {\n        if (schema.length) {\n            return {\n                type: \"array\",\n                items: schema,\n                minItems: 0,\n                maxItems: schema.length\n            };\n        }\n        return {\n            type: \"array\",\n            minItems: 0,\n            maxItems: 0\n        };\n\n    }\n\n    // Given a full schema, leave it alone\n    return schema || null;\n}\n\n/**\n * Validates a rule's severity and returns the severity value. Throws an error if the severity is invalid.\n * @param {options} options The given options for the rule.\n * @throws {Error} Wrong severity value.\n * @returns {number|string} The rule's severity value\n */\nfunction validateRuleSeverity(options) {\n    const severity = Array.isArray(options) ? options[0] : options;\n    const normSeverity = typeof severity === \"string\" ? severityMap[severity.toLowerCase()] : severity;\n\n    if (normSeverity === 0 || normSeverity === 1 || normSeverity === 2) {\n        return normSeverity;\n    }\n\n    throw new Error(`\\tSeverity should be one of the following: 0 = off, 1 = warn, 2 = error (you passed '${util.inspect(severity).replace(/'/gu, \"\\\"\").replace(/\\n/gu, \"\")}').\\n`);\n\n}\n\n/**\n * Validates the non-severity options passed to a rule, based on its schema.\n * @param {{create: Function}} rule The rule to validate\n * @param {Array} localOptions The options for the rule, excluding severity\n * @throws {Error} Any rule validation errors.\n * @returns {void}\n */\nfunction validateRuleSchema(rule, localOptions) {\n    if (!ruleValidators.has(rule)) {\n        const schema = getRuleOptionsSchema(rule);\n\n        if (schema) {\n            ruleValidators.set(rule, ajv.compile(schema));\n        }\n    }\n\n    const validateRule = ruleValidators.get(rule);\n\n    if (validateRule) {\n        validateRule(localOptions);\n        if (validateRule.errors) {\n            throw new Error(validateRule.errors.map(\n                error => `\\tValue ${JSON.stringify(error.data)} ${error.message}.\\n`\n            ).join(\"\"));\n        }\n    }\n}\n\n/**\n * Validates a rule's options against its schema.\n * @param {{create: Function}|null} rule The rule that the config is being validated for\n * @param {string} ruleId The rule's unique name.\n * @param {Array|number} options The given options for the rule.\n * @param {string|null} source The name of the configuration source to report in any errors. If null or undefined,\n * no source is prepended to the message.\n * @throws {Error} Upon any bad rule configuration.\n * @returns {void}\n */\nfunction validateRuleOptions(rule, ruleId, options, source = null) {\n    try {\n        const severity = validateRuleSeverity(options);\n\n        if (severity !== 0) {\n            validateRuleSchema(rule, Array.isArray(options) ? options.slice(1) : []);\n        }\n    } catch (err) {\n        const enhancedMessage = `Configuration for rule \"${ruleId}\" is invalid:\\n${err.message}`;\n\n        if (typeof source === \"string\") {\n            throw new Error(`${source}:\\n\\t${enhancedMessage}`);\n        } else {\n            throw new Error(enhancedMessage);\n        }\n    }\n}\n\n/**\n * Validates an environment object\n * @param {Object} environment The environment config object to validate.\n * @param {string} source The name of the configuration source to report in any errors.\n * @param {(envId:string) => Object} [getAdditionalEnv] A map from strings to loaded environments.\n * @returns {void}\n */\nfunction validateEnvironment(\n    environment,\n    source,\n    getAdditionalEnv = noop\n) {\n\n    // not having an environment is ok\n    if (!environment) {\n        return;\n    }\n\n    Object.keys(environment).forEach(id => {\n        const env = getAdditionalEnv(id) || BuiltInEnvironments.get(id) || null;\n\n        if (!env) {\n            const message = `${source}:\\n\\tEnvironment key \"${id}\" is unknown\\n`;\n\n            throw new Error(message);\n        }\n    });\n}\n\n/**\n * Validates a rules config object\n * @param {Object} rulesConfig The rules config object to validate.\n * @param {string} source The name of the configuration source to report in any errors.\n * @param {(ruleId:string) => Object} getAdditionalRule A map from strings to loaded rules\n * @returns {void}\n */\nfunction validateRules(\n    rulesConfig,\n    source,\n    getAdditionalRule = noop\n) {\n    if (!rulesConfig) {\n        return;\n    }\n\n    Object.keys(rulesConfig).forEach(id => {\n        const rule = getAdditionalRule(id) || BuiltInRules.get(id) || null;\n\n        validateRuleOptions(rule, id, rulesConfig[id], source);\n    });\n}\n\n/**\n * Validates a `globals` section of a config file\n * @param {Object} globalsConfig The `globals` section\n * @param {string|null} source The name of the configuration source to report in the event of an error.\n * @returns {void}\n */\nfunction validateGlobals(globalsConfig, source = null) {\n    if (!globalsConfig) {\n        return;\n    }\n\n    Object.entries(globalsConfig)\n        .forEach(([configuredGlobal, configuredValue]) => {\n            try {\n                ConfigOps.normalizeConfigGlobal(configuredValue);\n            } catch (err) {\n                throw new Error(`ESLint configuration of global '${configuredGlobal}' in ${source} is invalid:\\n${err.message}`);\n            }\n        });\n}\n\n/**\n * Validate `processor` configuration.\n * @param {string|undefined} processorName The processor name.\n * @param {string} source The name of config file.\n * @param {(id:string) => Processor} getProcessor The getter of defined processors.\n * @throws {Error} For invalid processor configuration.\n * @returns {void}\n */\nfunction validateProcessor(processorName, source, getProcessor) {\n    if (processorName && !getProcessor(processorName)) {\n        throw new Error(`ESLint configuration of processor in '${source}' is invalid: '${processorName}' was not found.`);\n    }\n}\n\n/**\n * Formats an array of schema validation errors.\n * @param {Array} errors An array of error messages to format.\n * @returns {string} Formatted error message\n */\nfunction formatErrors(errors) {\n    return errors.map(error => {\n        if (error.keyword === \"additionalProperties\") {\n            const formattedPropertyPath = error.dataPath.length ? `${error.dataPath.slice(1)}.${error.params.additionalProperty}` : error.params.additionalProperty;\n\n            return `Unexpected top-level property \"${formattedPropertyPath}\"`;\n        }\n        if (error.keyword === \"type\") {\n            const formattedField = error.dataPath.slice(1);\n            const formattedExpectedType = Array.isArray(error.schema) ? error.schema.join(\"/\") : error.schema;\n            const formattedValue = JSON.stringify(error.data);\n\n            return `Property \"${formattedField}\" is the wrong type (expected ${formattedExpectedType} but got \\`${formattedValue}\\`)`;\n        }\n\n        const field = error.dataPath[0] === \".\" ? error.dataPath.slice(1) : error.dataPath;\n\n        return `\"${field}\" ${error.message}. Value: ${JSON.stringify(error.data)}`;\n    }).map(message => `\\t- ${message}.\\n`).join(\"\");\n}\n\n/**\n * Validates the top level properties of the config object.\n * @param {Object} config The config object to validate.\n * @param {string} source The name of the configuration source to report in any errors.\n * @throws {Error} For any config invalid per the schema.\n * @returns {void}\n */\nfunction validateConfigSchema(config, source = null) {\n    validateSchema = validateSchema || ajv.compile(configSchema);\n\n    if (!validateSchema(config)) {\n        throw new Error(`ESLint configuration in ${source} is invalid:\\n${formatErrors(validateSchema.errors)}`);\n    }\n\n    if (Object.hasOwnProperty.call(config, \"ecmaFeatures\")) {\n        emitDeprecationWarning(source, \"ESLINT_LEGACY_ECMAFEATURES\");\n    }\n}\n\n/**\n * Validates an entire config object.\n * @param {Object} config The config object to validate.\n * @param {string} source The name of the configuration source to report in any errors.\n * @param {(ruleId:string) => Object} [getAdditionalRule] A map from strings to loaded rules.\n * @param {(envId:string) => Object} [getAdditionalEnv] A map from strings to loaded envs.\n * @returns {void}\n */\nfunction validate(config, source, getAdditionalRule, getAdditionalEnv) {\n    validateConfigSchema(config, source);\n    validateRules(config.rules, source, getAdditionalRule);\n    validateEnvironment(config.env, source, getAdditionalEnv);\n    validateGlobals(config.globals, source);\n\n    for (const override of config.overrides || []) {\n        validateRules(override.rules, source, getAdditionalRule);\n        validateEnvironment(override.env, source, getAdditionalEnv);\n        validateGlobals(config.globals, source);\n    }\n}\n\nconst validated = new WeakSet();\n\n/**\n * Validate config array object.\n * @param {ConfigArray} configArray The config array to validate.\n * @returns {void}\n */\nfunction validateConfigArray(configArray) {\n    const getPluginEnv = Map.prototype.get.bind(configArray.pluginEnvironments);\n    const getPluginProcessor = Map.prototype.get.bind(configArray.pluginProcessors);\n    const getPluginRule = Map.prototype.get.bind(configArray.pluginRules);\n\n    // Validate.\n    for (const element of configArray) {\n        if (validated.has(element)) {\n            continue;\n        }\n        validated.add(element);\n\n        validateEnvironment(element.env, element.name, getPluginEnv);\n        validateGlobals(element.globals, element.name);\n        validateProcessor(element.processor, element.name, getPluginProcessor);\n        validateRules(element.rules, element.name, getPluginRule);\n    }\n}\n\n//------------------------------------------------------------------------------\n// Public Interface\n//------------------------------------------------------------------------------\n\nmodule.exports = {\n    getRuleOptionsSchema,\n    validate,\n    validateConfigArray,\n    validateConfigSchema,\n    validateRuleOptions\n};\n/lib/rules/consistent-return.js\u0018/**\n * @fileoverview Rule to flag consistent return values\n * @author Nicholas C. Zakas\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\nconst { upperCaseFirst } = require(\"../shared/string-utils\");\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\n/**\n * Checks whether or not a given code path segment is unreachable.\n * @param {CodePathSegment} segment A CodePathSegment to check.\n * @returns {boolean} `true` if the segment is unreachable.\n */\nfunction isUnreachable(segment) {\n    return !segment.reachable;\n}\n\n/**\n * Checks whether a given node is a `constructor` method in an ES6 class\n * @param {ASTNode} node A node to check\n * @returns {boolean} `true` if the node is a `constructor` method\n */\nfunction isClassConstructor(node) {\n    return node.type === \"FunctionExpression\" &&\n        node.parent &&\n        node.parent.type === \"MethodDefinition\" &&\n        node.parent.kind === \"constructor\";\n}\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"require `return` statements to either always or never specify values\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/consistent-return\"\n        },\n\n        schema: [{\n            type: \"object\",\n            properties: {\n                treatUndefinedAsUnspecified: {\n                    type: \"boolean\",\n                    default: false\n                }\n            },\n            additionalProperties: false\n        }],\n\n        messages: {\n            missingReturn: \"Expected to return a value at the end of {{name}}.\",\n            missingReturnValue: \"{{name}} expected a return value.\",\n            unexpectedReturnValue: \"{{name}} expected no return value.\"\n        }\n    },\n\n    create(context) {\n        const options = context.options[0] || {};\n        const treatUndefinedAsUnspecified = options.treatUndefinedAsUnspecified === true;\n        let funcInfo = null;\n\n        /**\n         * Checks whether of not the implicit returning is consistent if the last\n         * code path segment is reachable.\n         * @param {ASTNode} node A program/function node to check.\n         * @returns {void}\n         */\n        function checkLastSegment(node) {\n            let loc, name;\n\n            /*\n             * Skip if it expected no return value or unreachable.\n             * When unreachable, all paths are returned or thrown.\n             */\n            if (!funcInfo.hasReturnValue ||\n                funcInfo.codePath.currentSegments.every(isUnreachable) ||\n                astUtils.isES5Constructor(node) ||\n                isClassConstructor(node)\n            ) {\n                return;\n            }\n\n            // Adjust a location and a message.\n            if (node.type === \"Program\") {\n\n                // The head of program.\n                loc = { line: 1, column: 0 };\n                name = \"program\";\n            } else if (node.type === \"ArrowFunctionExpression\") {\n\n                // `=>` token\n                loc = context.getSourceCode().getTokenBefore(node.body, astUtils.isArrowToken).loc;\n            } else if (\n                node.parent.type === \"MethodDefinition\" ||\n                (node.parent.type === \"Property\" && node.parent.method)\n            ) {\n\n                // Method name.\n                loc = node.parent.key.loc;\n            } else {\n\n                // Function name or `function` keyword.\n                loc = (node.id || context.getSourceCode().getFirstToken(node)).loc;\n            }\n\n            if (!name) {\n                name = astUtils.getFunctionNameWithKind(node);\n            }\n\n            // Reports.\n            context.report({\n                node,\n                loc,\n                messageId: \"missingReturn\",\n                data: { name }\n            });\n        }\n\n        return {\n\n            // Initializes/Disposes state of each code path.\n            onCodePathStart(codePath, node) {\n                funcInfo = {\n                    upper: funcInfo,\n                    codePath,\n                    hasReturn: false,\n                    hasReturnValue: false,\n                    messageId: \"\",\n                    node\n                };\n            },\n            onCodePathEnd() {\n                funcInfo = funcInfo.upper;\n            },\n\n            // Reports a given return statement if it's inconsistent.\n            ReturnStatement(node) {\n                const argument = node.argument;\n                let hasReturnValue = Boolean(argument);\n\n                if (treatUndefinedAsUnspecified && hasReturnValue) {\n                    hasReturnValue = !astUtils.isSpecificId(argument, \"undefined\") && argument.operator !== \"void\";\n                }\n\n                if (!funcInfo.hasReturn) {\n                    funcInfo.hasReturn = true;\n                    funcInfo.hasReturnValue = hasReturnValue;\n                    funcInfo.messageId = hasReturnValue ? \"missingReturnValue\" : \"unexpectedReturnValue\";\n                    funcInfo.data = {\n                        name: funcInfo.node.type === \"Program\"\n                            ? \"Program\"\n                            : upperCaseFirst(astUtils.getFunctionNameWithKind(funcInfo.node))\n                    };\n                } else if (funcInfo.hasReturnValue !== hasReturnValue) {\n                    context.report({\n                        node,\n                        messageId: funcInfo.messageId,\n                        data: funcInfo.data\n                    });\n                }\n            },\n\n            // Reports a given program/function if the implicit returning is not consistent.\n            \"Program:exit\": checkLastSegment,\n            \"FunctionDeclaration:exit\": checkLastSegment,\n            \"FunctionExpression:exit\": checkLastSegment,\n            \"ArrowFunctionExpression:exit\": checkLastSegment\n        };\n    }\n};\n/lib/rules/no-useless-rename.js\u0017~/**\n * @fileoverview Disallow renaming import, export, and destructured assignments to the same name.\n * @author Kai Cataldo\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow renaming import, export, and destructured assignments to the same name\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-useless-rename\"\n        },\n\n        fixable: \"code\",\n\n        schema: [\n            {\n                type: \"object\",\n                properties: {\n                    ignoreDestructuring: { type: \"boolean\", default: false },\n                    ignoreImport: { type: \"boolean\", default: false },\n                    ignoreExport: { type: \"boolean\", default: false }\n                },\n                additionalProperties: false\n            }\n        ],\n\n        messages: {\n            unnecessarilyRenamed: \"{{type}} {{name}} unnecessarily renamed.\"\n        }\n    },\n\n    create(context) {\n        const sourceCode = context.getSourceCode(),\n            options = context.options[0] || {},\n            ignoreDestructuring = options.ignoreDestructuring === true,\n            ignoreImport = options.ignoreImport === true,\n            ignoreExport = options.ignoreExport === true;\n\n        //--------------------------------------------------------------------------\n        // Helpers\n        //--------------------------------------------------------------------------\n\n        /**\n         * Reports error for unnecessarily renamed assignments\n         * @param {ASTNode} node node to report\n         * @param {ASTNode} initial node with initial name value\n         * @param {string} type the type of the offending node\n         * @returns {void}\n         */\n        function reportError(node, initial, type) {\n            const name = initial.type === \"Identifier\" ? initial.name : initial.value;\n\n            return context.report({\n                node,\n                messageId: \"unnecessarilyRenamed\",\n                data: {\n                    name,\n                    type\n                },\n                fix(fixer) {\n                    const replacementNode = node.type === \"Property\" ? node.value : node.local;\n\n                    if (sourceCode.getCommentsInside(node).length > sourceCode.getCommentsInside(replacementNode).length) {\n                        return null;\n                    }\n\n                    // Don't autofix code such as `({foo: (foo) = a} = obj);`, parens are not allowed in shorthand properties.\n                    if (\n                        replacementNode.type === \"AssignmentPattern\" &&\n                        astUtils.isParenthesised(sourceCode, replacementNode.left)\n                    ) {\n                        return null;\n                    }\n\n                    return fixer.replaceText(node, sourceCode.getText(replacementNode));\n                }\n            });\n        }\n\n        /**\n         * Checks whether a destructured assignment is unnecessarily renamed\n         * @param {ASTNode} node node to check\n         * @returns {void}\n         */\n        function checkDestructured(node) {\n            if (ignoreDestructuring) {\n                return;\n            }\n\n            for (const property of node.properties) {\n\n                /**\n                 * Properties using shorthand syntax and rest elements can not be renamed.\n                 * If the property is computed, we have no idea if a rename is useless or not.\n                 */\n                if (property.type !== \"Property\" || property.shorthand || property.computed) {\n                    continue;\n                }\n\n                const key = (property.key.type === \"Identifier\" && property.key.name) || (property.key.type === \"Literal\" && property.key.value);\n                const renamedKey = property.value.type === \"AssignmentPattern\" ? property.value.left.name : property.value.name;\n\n                if (key === renamedKey) {\n                    reportError(property, property.key, \"Destructuring assignment\");\n                }\n            }\n        }\n\n        /**\n         * Checks whether an import is unnecessarily renamed\n         * @param {ASTNode} node node to check\n         * @returns {void}\n         */\n        function checkImport(node) {\n            if (ignoreImport) {\n                return;\n            }\n\n            if (\n                node.imported.range[0] !== node.local.range[0] &&\n                astUtils.getModuleExportName(node.imported) === node.local.name\n            ) {\n                reportError(node, node.imported, \"Import\");\n            }\n        }\n\n        /**\n         * Checks whether an export is unnecessarily renamed\n         * @param {ASTNode} node node to check\n         * @returns {void}\n         */\n        function checkExport(node) {\n            if (ignoreExport) {\n                return;\n            }\n\n            if (\n                node.local.range[0] !== node.exported.range[0] &&\n                astUtils.getModuleExportName(node.local) === astUtils.getModuleExportName(node.exported)\n            ) {\n                reportError(node, node.local, \"Export\");\n            }\n\n        }\n\n        //--------------------------------------------------------------------------\n        // Public\n        //--------------------------------------------------------------------------\n\n        return {\n            ObjectPattern: checkDestructured,\n            ImportSpecifier: checkImport,\n            ExportSpecifier: checkExport\n        };\n    }\n};\n\"/lib/cli-engine/file-enumerator.jsJT/**\n * @fileoverview `FileEnumerator` class.\n *\n * `FileEnumerator` class has two responsibilities:\n *\n * 1. Find target files by processing glob patterns.\n * 2. Tie each target file and appropriate configuration.\n *\n * It provides a method:\n *\n * - `iterateFiles(patterns)`\n *     Iterate files which are matched by given patterns together with the\n *     corresponded configuration. This is for `CLIEngine#executeOnFiles()`.\n *     While iterating files, it loads the configuration file of each directory\n *     before iterate files on the directory, so we can use the configuration\n *     files to determine target files.\n *\n * @example\n * const enumerator = new FileEnumerator();\n * const linter = new Linter();\n *\n * for (const { config, filePath } of enumerator.iterateFiles([\"*.js\"])) {\n *     const code = fs.readFileSync(filePath, \"utf8\");\n *     const messages = linter.verify(code, config, filePath);\n *\n *     console.log(messages);\n * }\n *\n * @author Toru Nagashima <https://github.com/mysticatea>\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst fs = require(\"fs\");\nconst path = require(\"path\");\nconst getGlobParent = require(\"glob-parent\");\nconst isGlob = require(\"is-glob\");\nconst escapeRegExp = require(\"escape-string-regexp\");\nconst { Minimatch } = require(\"minimatch\");\n\nconst {\n    Legacy: {\n        IgnorePattern,\n        CascadingConfigArrayFactory\n    }\n} = require(\"@eslint/eslintrc\");\nconst debug = require(\"debug\")(\"eslint:file-enumerator\");\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\nconst minimatchOpts = { dot: true, matchBase: true };\nconst dotfilesPattern = /(?:(?:^\\.)|(?:[/\\\\]\\.))[^/\\\\.].*/u;\nconst NONE = 0;\nconst IGNORED_SILENTLY = 1;\nconst IGNORED = 2;\n\n// For VSCode intellisense\n/** @typedef {ReturnType<CascadingConfigArrayFactory.getConfigArrayForFile>} ConfigArray */\n\n/**\n * @typedef {Object} FileEnumeratorOptions\n * @property {CascadingConfigArrayFactory} [configArrayFactory] The factory for config arrays.\n * @property {string} [cwd] The base directory to start lookup.\n * @property {string[]} [extensions] The extensions to match files for directory patterns.\n * @property {boolean} [globInputPaths] Set to false to skip glob resolution of input file paths to lint (default: true). If false, each input file paths is assumed to be a non-glob path to an existing file.\n * @property {boolean} [ignore] The flag to check ignored files.\n * @property {string[]} [rulePaths] The value of `--rulesdir` option.\n */\n\n/**\n * @typedef {Object} FileAndConfig\n * @property {string} filePath The path to a target file.\n * @property {ConfigArray} config The config entries of that file.\n * @property {boolean} ignored If `true` then this file should be ignored and warned because it was directly specified.\n */\n\n/**\n * @typedef {Object} FileEntry\n * @property {string} filePath The path to a target file.\n * @property {ConfigArray} config The config entries of that file.\n * @property {NONE|IGNORED_SILENTLY|IGNORED} flag The flag.\n * - `NONE` means the file is a target file.\n * - `IGNORED_SILENTLY` means the file should be ignored silently.\n * - `IGNORED` means the file should be ignored and warned because it was directly specified.\n */\n\n/**\n * @typedef {Object} FileEnumeratorInternalSlots\n * @property {CascadingConfigArrayFactory} configArrayFactory The factory for config arrays.\n * @property {string} cwd The base directory to start lookup.\n * @property {RegExp|null} extensionRegExp The RegExp to test if a string ends with specific file extensions.\n * @property {boolean} globInputPaths Set to false to skip glob resolution of input file paths to lint (default: true). If false, each input file paths is assumed to be a non-glob path to an existing file.\n * @property {boolean} ignoreFlag The flag to check ignored files.\n * @property {(filePath:string, dot:boolean) => boolean} defaultIgnores The default predicate function to ignore files.\n */\n\n/** @type {WeakMap<FileEnumerator, FileEnumeratorInternalSlots>} */\nconst internalSlotsMap = new WeakMap();\n\n/**\n * Check if a string is a glob pattern or not.\n * @param {string} pattern A glob pattern.\n * @returns {boolean} `true` if the string is a glob pattern.\n */\nfunction isGlobPattern(pattern) {\n    return isGlob(path.sep === \"\\\\\" ? pattern.replace(/\\\\/gu, \"/\") : pattern);\n}\n\n/**\n * Get stats of a given path.\n * @param {string} filePath The path to target file.\n * @throws {Error} As may be thrown by `fs.statSync`.\n * @returns {fs.Stats|null} The stats.\n * @private\n */\nfunction statSafeSync(filePath) {\n    try {\n        return fs.statSync(filePath);\n    } catch (error) {\n        /* istanbul ignore next */\n        if (error.code !== \"ENOENT\") {\n            throw error;\n        }\n        return null;\n    }\n}\n\n/**\n * Get filenames in a given path to a directory.\n * @param {string} directoryPath The path to target directory.\n * @throws {Error} As may be thrown by `fs.readdirSync`.\n * @returns {import(\"fs\").Dirent[]} The filenames.\n * @private\n */\nfunction readdirSafeSync(directoryPath) {\n    try {\n        return fs.readdirSync(directoryPath, { withFileTypes: true });\n    } catch (error) {\n        /* istanbul ignore next */\n        if (error.code !== \"ENOENT\") {\n            throw error;\n        }\n        return [];\n    }\n}\n\n/**\n * Create a `RegExp` object to detect extensions.\n * @param {string[] | null} extensions The extensions to create.\n * @returns {RegExp | null} The created `RegExp` object or null.\n */\nfunction createExtensionRegExp(extensions) {\n    if (extensions) {\n        const normalizedExts = extensions.map(ext => escapeRegExp(\n            ext.startsWith(\".\")\n                ? ext.slice(1)\n                : ext\n        ));\n\n        return new RegExp(\n            `.\\\\.(?:${normalizedExts.join(\"|\")})$`,\n            \"u\"\n        );\n    }\n    return null;\n}\n\n/**\n * The error type when no files match a glob.\n */\nclass NoFilesFoundError extends Error {\n\n    /**\n     * @param {string} pattern The glob pattern which was not found.\n     * @param {boolean} globDisabled If `true` then the pattern was a glob pattern, but glob was disabled.\n     */\n    constructor(pattern, globDisabled) {\n        super(`No files matching '${pattern}' were found${globDisabled ? \" (glob was disabled)\" : \"\"}.`);\n        this.messageTemplate = \"file-not-found\";\n        this.messageData = { pattern, globDisabled };\n    }\n}\n\n/**\n * The error type when there are files matched by a glob, but all of them have been ignored.\n */\nclass AllFilesIgnoredError extends Error {\n\n    /**\n     * @param {string} pattern The glob pattern which was not found.\n     */\n    constructor(pattern) {\n        super(`All files matched by '${pattern}' are ignored.`);\n        this.messageTemplate = \"all-files-ignored\";\n        this.messageData = { pattern };\n    }\n}\n\n/**\n * This class provides the functionality that enumerates every file which is\n * matched by given glob patterns and that configuration.\n */\nclass FileEnumerator {\n\n    /**\n     * Initialize this enumerator.\n     * @param {FileEnumeratorOptions} options The options.\n     */\n    constructor({\n        cwd = process.cwd(),\n        configArrayFactory = new CascadingConfigArrayFactory({\n            cwd,\n            eslintRecommendedPath: path.resolve(__dirname, \"../../conf/eslint-recommended.js\"),\n            eslintAllPath: path.resolve(__dirname, \"../../conf/eslint-all.js\")\n        }),\n        extensions = null,\n        globInputPaths = true,\n        errorOnUnmatchedPattern = true,\n        ignore = true\n    } = {}) {\n        internalSlotsMap.set(this, {\n            configArrayFactory,\n            cwd,\n            defaultIgnores: IgnorePattern.createDefaultIgnore(cwd),\n            extensionRegExp: createExtensionRegExp(extensions),\n            globInputPaths,\n            errorOnUnmatchedPattern,\n            ignoreFlag: ignore\n        });\n    }\n\n    /**\n     * Check if a given file is target or not.\n     * @param {string} filePath The path to a candidate file.\n     * @param {ConfigArray} [providedConfig] Optional. The configuration for the file.\n     * @returns {boolean} `true` if the file is a target.\n     */\n    isTargetPath(filePath, providedConfig) {\n        const {\n            configArrayFactory,\n            extensionRegExp\n        } = internalSlotsMap.get(this);\n\n        // If `--ext` option is present, use it.\n        if (extensionRegExp) {\n            return extensionRegExp.test(filePath);\n        }\n\n        // `.js` file is target by default.\n        if (filePath.endsWith(\".js\")) {\n            return true;\n        }\n\n        // use `overrides[].files` to check additional targets.\n        const config =\n            providedConfig ||\n            configArrayFactory.getConfigArrayForFile(\n                filePath,\n                { ignoreNotFoundError: true }\n            );\n\n        return config.isAdditionalTargetPath(filePath);\n    }\n\n    /**\n     * Iterate files which are matched by given glob patterns.\n     * @param {string|string[]} patternOrPatterns The glob patterns to iterate files.\n     * @throws {NoFilesFoundError|AllFilesIgnoredError} On an unmatched pattern.\n     * @returns {IterableIterator<FileAndConfig>} The found files.\n     */\n    *iterateFiles(patternOrPatterns) {\n        const { globInputPaths, errorOnUnmatchedPattern } = internalSlotsMap.get(this);\n        const patterns = Array.isArray(patternOrPatterns)\n            ? patternOrPatterns\n            : [patternOrPatterns];\n\n        debug(\"Start to iterate files: %o\", patterns);\n\n        // The set of paths to remove duplicate.\n        const set = new Set();\n\n        for (const pattern of patterns) {\n            let foundRegardlessOfIgnored = false;\n            let found = false;\n\n            // Skip empty string.\n            if (!pattern) {\n                continue;\n            }\n\n            // Iterate files of this pattern.\n            for (const { config, filePath, flag } of this._iterateFiles(pattern)) {\n                foundRegardlessOfIgnored = true;\n                if (flag === IGNORED_SILENTLY) {\n                    continue;\n                }\n                found = true;\n\n                // Remove duplicate paths while yielding paths.\n                if (!set.has(filePath)) {\n                    set.add(filePath);\n                    yield {\n                        config,\n                        filePath,\n                        ignored: flag === IGNORED\n                    };\n                }\n            }\n\n            // Raise an error if any files were not found.\n            if (errorOnUnmatchedPattern) {\n                if (!foundRegardlessOfIgnored) {\n                    throw new NoFilesFoundError(\n                        pattern,\n                        !globInputPaths && isGlob(pattern)\n                    );\n                }\n                if (!found) {\n                    throw new AllFilesIgnoredError(pattern);\n                }\n            }\n        }\n\n        debug(`Complete iterating files: ${JSON.stringify(patterns)}`);\n    }\n\n    /**\n     * Iterate files which are matched by a given glob pattern.\n     * @param {string} pattern The glob pattern to iterate files.\n     * @returns {IterableIterator<FileEntry>} The found files.\n     */\n    _iterateFiles(pattern) {\n        const { cwd, globInputPaths } = internalSlotsMap.get(this);\n        const absolutePath = path.resolve(cwd, pattern);\n        const isDot = dotfilesPattern.test(pattern);\n        const stat = statSafeSync(absolutePath);\n\n        if (stat && stat.isDirectory()) {\n            return this._iterateFilesWithDirectory(absolutePath, isDot);\n        }\n        if (stat && stat.isFile()) {\n            return this._iterateFilesWithFile(absolutePath);\n        }\n        if (globInputPaths && isGlobPattern(pattern)) {\n            return this._iterateFilesWithGlob(absolutePath, isDot);\n        }\n\n        return [];\n    }\n\n    /**\n     * Iterate a file which is matched by a given path.\n     * @param {string} filePath The path to the target file.\n     * @returns {IterableIterator<FileEntry>} The found files.\n     * @private\n     */\n    _iterateFilesWithFile(filePath) {\n        debug(`File: ${filePath}`);\n\n        const { configArrayFactory } = internalSlotsMap.get(this);\n        const config = configArrayFactory.getConfigArrayForFile(filePath);\n        const ignored = this._isIgnoredFile(filePath, { config, direct: true });\n        const flag = ignored ? IGNORED : NONE;\n\n        return [{ config, filePath, flag }];\n    }\n\n    /**\n     * Iterate files in a given path.\n     * @param {string} directoryPath The path to the target directory.\n     * @param {boolean} dotfiles If `true` then it doesn't skip dot files by default.\n     * @returns {IterableIterator<FileEntry>} The found files.\n     * @private\n     */\n    _iterateFilesWithDirectory(directoryPath, dotfiles) {\n        debug(`Directory: ${directoryPath}`);\n\n        return this._iterateFilesRecursive(\n            directoryPath,\n            { dotfiles, recursive: true, selector: null }\n        );\n    }\n\n    /**\n     * Iterate files which are matched by a given glob pattern.\n     * @param {string} pattern The glob pattern to iterate files.\n     * @param {boolean} dotfiles If `true` then it doesn't skip dot files by default.\n     * @returns {IterableIterator<FileEntry>} The found files.\n     * @private\n     */\n    _iterateFilesWithGlob(pattern, dotfiles) {\n        debug(`Glob: ${pattern}`);\n\n        const directoryPath = path.resolve(getGlobParent(pattern));\n        const globPart = pattern.slice(directoryPath.length + 1);\n\n        /*\n         * recursive if there are `**` or path separators in the glob part.\n         * Otherwise, patterns such as `src/*.js`, it doesn't need recursive.\n         */\n        const recursive = /\\*\\*|\\/|\\\\/u.test(globPart);\n        const selector = new Minimatch(pattern, minimatchOpts);\n\n        debug(`recursive? ${recursive}`);\n\n        return this._iterateFilesRecursive(\n            directoryPath,\n            { dotfiles, recursive, selector }\n        );\n    }\n\n    /**\n     * Iterate files in a given path.\n     * @param {string} directoryPath The path to the target directory.\n     * @param {Object} options The options to iterate files.\n     * @param {boolean} [options.dotfiles] If `true` then it doesn't skip dot files by default.\n     * @param {boolean} [options.recursive] If `true` then it dives into sub directories.\n     * @param {InstanceType<Minimatch>} [options.selector] The matcher to choose files.\n     * @returns {IterableIterator<FileEntry>} The found files.\n     * @private\n     */\n    *_iterateFilesRecursive(directoryPath, options) {\n        debug(`Enter the directory: ${directoryPath}`);\n        const { configArrayFactory } = internalSlotsMap.get(this);\n\n        /** @type {ConfigArray|null} */\n        let config = null;\n\n        // Enumerate the files of this directory.\n        for (const entry of readdirSafeSync(directoryPath)) {\n            const filePath = path.join(directoryPath, entry.name);\n            const fileInfo = entry.isSymbolicLink() ? statSafeSync(filePath) : entry;\n\n            if (!fileInfo) {\n                continue;\n            }\n\n            // Check if the file is matched.\n            if (fileInfo.isFile()) {\n                if (!config) {\n                    config = configArrayFactory.getConfigArrayForFile(\n                        filePath,\n\n                        /*\n                         * We must ignore `ConfigurationNotFoundError` at this\n                         * point because we don't know if target files exist in\n                         * this directory.\n                         */\n                        { ignoreNotFoundError: true }\n                    );\n                }\n                const matched = options.selector\n\n                    // Started with a glob pattern; choose by the pattern.\n                    ? options.selector.match(filePath)\n\n                    // Started with a directory path; choose by file extensions.\n                    : this.isTargetPath(filePath, config);\n\n                if (matched) {\n                    const ignored = this._isIgnoredFile(filePath, { ...options, config });\n                    const flag = ignored ? IGNORED_SILENTLY : NONE;\n\n                    debug(`Yield: ${entry.name}${ignored ? \" but ignored\" : \"\"}`);\n                    yield {\n                        config: configArrayFactory.getConfigArrayForFile(filePath),\n                        filePath,\n                        flag\n                    };\n                } else {\n                    debug(`Didn't match: ${entry.name}`);\n                }\n\n            // Dive into the sub directory.\n            } else if (options.recursive && fileInfo.isDirectory()) {\n                if (!config) {\n                    config = configArrayFactory.getConfigArrayForFile(\n                        filePath,\n                        { ignoreNotFoundError: true }\n                    );\n                }\n                const ignored = this._isIgnoredFile(\n                    filePath + path.sep,\n                    { ...options, config }\n                );\n\n                if (!ignored) {\n                    yield* this._iterateFilesRecursive(filePath, options);\n                }\n            }\n        }\n\n        debug(`Leave the directory: ${directoryPath}`);\n    }\n\n    /**\n     * Check if a given file should be ignored.\n     * @param {string} filePath The path to a file to check.\n     * @param {Object} options Options\n     * @param {ConfigArray} [options.config] The config for this file.\n     * @param {boolean} [options.dotfiles] If `true` then this is not ignore dot files by default.\n     * @param {boolean} [options.direct] If `true` then this is a direct specified file.\n     * @returns {boolean} `true` if the file should be ignored.\n     * @private\n     */\n    _isIgnoredFile(filePath, {\n        config: providedConfig,\n        dotfiles = false,\n        direct = false\n    }) {\n        const {\n            configArrayFactory,\n            defaultIgnores,\n            ignoreFlag\n        } = internalSlotsMap.get(this);\n\n        if (ignoreFlag) {\n            const config =\n                providedConfig ||\n                configArrayFactory.getConfigArrayForFile(\n                    filePath,\n                    { ignoreNotFoundError: true }\n                );\n            const ignores =\n                config.extractConfig(filePath).ignores || defaultIgnores;\n\n            return ignores(filePath, dotfiles);\n        }\n\n        return !direct && defaultIgnores(filePath, dotfiles);\n    }\n}\n\n//------------------------------------------------------------------------------\n// Public Interface\n//------------------------------------------------------------------------------\n\nmodule.exports = { FileEnumerator };\n\"/lib/cli-engine/formatters/html.js%/**\n * @fileoverview HTML reporter\n * @author Julian Laval\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\nconst encodeHTML = (function() {\n    const encodeHTMLRules = {\n        \"&\": \"&#38;\",\n        \"<\": \"&#60;\",\n        \">\": \"&#62;\",\n        '\"': \"&#34;\",\n        \"'\": \"&#39;\"\n    };\n    const matchHTML = /[&<>\"']/ug;\n\n    return function(code) {\n        return code\n            ? code.toString().replace(matchHTML, m => encodeHTMLRules[m] || m)\n            : \"\";\n    };\n}());\n\n/**\n * Get the final HTML document.\n * @param {Object} it data for the document.\n * @returns {string} HTML document.\n */\nfunction pageTemplate(it) {\n    const { reportColor, reportSummary, date, results } = it;\n\n    return `\n<!DOCTYPE html>\n<html>\n    <head>\n        <meta charset=\"UTF-8\">\n        <title>ESLint Report</title>\n        <style>\n            body {\n                font-family:Arial, \"Helvetica Neue\", Helvetica, sans-serif;\n                font-size:16px;\n                font-weight:normal;\n                margin:0;\n                padding:0;\n                color:#333\n            }\n            #overview {\n                padding:20px 30px\n            }\n            td, th {\n                padding:5px 10px\n            }\n            h1 {\n                margin:0\n            }\n            table {\n                margin:30px;\n                width:calc(100% - 60px);\n                max-width:1000px;\n                border-radius:5px;\n                border:1px solid #ddd;\n                border-spacing:0px;\n            }\n            th {\n                font-weight:400;\n                font-size:medium;\n                text-align:left;\n                cursor:pointer\n            }\n            td.clr-1, td.clr-2, th span {\n                font-weight:700\n            }\n            th span {\n                float:right;\n                margin-left:20px\n            }\n            th span:after {\n                content:\"\";\n                clear:both;\n                display:block\n            }\n            tr:last-child td {\n                border-bottom:none\n            }\n            tr td:first-child, tr td:last-child {\n                color:#9da0a4\n            }\n            #overview.bg-0, tr.bg-0 th {\n                color:#468847;\n                background:#dff0d8;\n                border-bottom:1px solid #d6e9c6\n            }\n            #overview.bg-1, tr.bg-1 th {\n                color:#f0ad4e;\n                background:#fcf8e3;\n                border-bottom:1px solid #fbeed5\n            }\n            #overview.bg-2, tr.bg-2 th {\n                color:#b94a48;\n                background:#f2dede;\n                border-bottom:1px solid #eed3d7\n            }\n            td {\n                border-bottom:1px solid #ddd\n            }\n            td.clr-1 {\n                color:#f0ad4e\n            }\n            td.clr-2 {\n                color:#b94a48\n            }\n            td a {\n                color:#3a33d1;\n                text-decoration:none\n            }\n            td a:hover {\n                color:#272296;\n                text-decoration:underline\n            }\n        </style>\n    </head>\n    <body>\n        <div id=\"overview\" class=\"bg-${reportColor}\">\n            <h1>ESLint Report</h1>\n            <div>\n                <span>${reportSummary}</span> - Generated on ${date}\n            </div>\n        </div>\n        <table>\n            <tbody>\n                ${results}\n            </tbody>\n        </table>\n        <script type=\"text/javascript\">\n            var groups = document.querySelectorAll(\"tr[data-group]\");\n            for (i = 0; i < groups.length; i++) {\n                groups[i].addEventListener(\"click\", function() {\n                    var inGroup = document.getElementsByClassName(this.getAttribute(\"data-group\"));\n                    this.innerHTML = (this.innerHTML.indexOf(\"+\") > -1) ? this.innerHTML.replace(\"+\", \"-\") : this.innerHTML.replace(\"-\", \"+\");\n                    for (var j = 0; j < inGroup.length; j++) {\n                        inGroup[j].style.display = (inGroup[j].style.display !== \"none\") ? \"none\" : \"table-row\";\n                    }\n                });\n            }\n        </script>\n    </body>\n</html>\n`.trimLeft();\n}\n\n/**\n * Given a word and a count, append an s if count is not one.\n * @param {string} word A word in its singular form.\n * @param {int} count A number controlling whether word should be pluralized.\n * @returns {string} The original word with an s on the end if count is not one.\n */\nfunction pluralize(word, count) {\n    return (count === 1 ? word : `${word}s`);\n}\n\n/**\n * Renders text along the template of x problems (x errors, x warnings)\n * @param {string} totalErrors Total errors\n * @param {string} totalWarnings Total warnings\n * @returns {string} The formatted string, pluralized where necessary\n */\nfunction renderSummary(totalErrors, totalWarnings) {\n    const totalProblems = totalErrors + totalWarnings;\n    let renderedText = `${totalProblems} ${pluralize(\"problem\", totalProblems)}`;\n\n    if (totalProblems !== 0) {\n        renderedText += ` (${totalErrors} ${pluralize(\"error\", totalErrors)}, ${totalWarnings} ${pluralize(\"warning\", totalWarnings)})`;\n    }\n    return renderedText;\n}\n\n/**\n * Get the color based on whether there are errors/warnings...\n * @param {string} totalErrors Total errors\n * @param {string} totalWarnings Total warnings\n * @returns {int} The color code (0 = green, 1 = yellow, 2 = red)\n */\nfunction renderColor(totalErrors, totalWarnings) {\n    if (totalErrors !== 0) {\n        return 2;\n    }\n    if (totalWarnings !== 0) {\n        return 1;\n    }\n    return 0;\n}\n\n/**\n * Get HTML (table row) describing a single message.\n * @param {Object} it data for the message.\n * @returns {string} HTML (table row) describing the message.\n */\nfunction messageTemplate(it) {\n    const {\n        parentIndex,\n        lineNumber,\n        columnNumber,\n        severityNumber,\n        severityName,\n        message,\n        ruleUrl,\n        ruleId\n    } = it;\n\n    return `\n<tr style=\"display:none\" class=\"f-${parentIndex}\">\n    <td>${lineNumber}:${columnNumber}</td>\n    <td class=\"clr-${severityNumber}\">${severityName}</td>\n    <td>${encodeHTML(message)}</td>\n    <td>\n        <a href=\"${ruleUrl ? ruleUrl : \"\"}\" target=\"_blank\" rel=\"noopener noreferrer\">${ruleId ? ruleId : \"\"}</a>\n    </td>\n</tr>\n`.trimLeft();\n}\n\n/**\n * Get HTML (table rows) describing the messages.\n * @param {Array} messages Messages.\n * @param {int} parentIndex Index of the parent HTML row.\n * @param {Object} rulesMeta Dictionary containing metadata for each rule executed by the analysis.\n * @returns {string} HTML (table rows) describing the messages.\n */\nfunction renderMessages(messages, parentIndex, rulesMeta) {\n\n    /**\n     * Get HTML (table row) describing a message.\n     * @param {Object} message Message.\n     * @returns {string} HTML (table row) describing a message.\n     */\n    return messages.map(message => {\n        const lineNumber = message.line || 0;\n        const columnNumber = message.column || 0;\n        let ruleUrl;\n\n        if (rulesMeta) {\n            const meta = rulesMeta[message.ruleId];\n\n            if (meta && meta.docs && meta.docs.url) {\n                ruleUrl = meta.docs.url;\n            }\n        }\n\n        return messageTemplate({\n            parentIndex,\n            lineNumber,\n            columnNumber,\n            severityNumber: message.severity,\n            severityName: message.severity === 1 ? \"Warning\" : \"Error\",\n            message: message.message,\n            ruleId: message.ruleId,\n            ruleUrl\n        });\n    }).join(\"\\n\");\n}\n\n/**\n * Get HTML (table row) describing the result for a single file.\n * @param {Object} it data for the file.\n * @returns {string} HTML (table row) describing the result for the file.\n */\nfunction resultTemplate(it) {\n    const { color, index, filePath, summary } = it;\n\n    return `\n<tr class=\"bg-${color}\" data-group=\"f-${index}\">\n    <th colspan=\"4\">\n        [+] ${encodeHTML(filePath)}\n        <span>${encodeHTML(summary)}</span>\n    </th>\n</tr>\n`.trimLeft();\n}\n\n/**\n * Render the results.\n * @param {Array} results Test results.\n * @param {Object} rulesMeta Dictionary containing metadata for each rule executed by the analysis.\n * @returns {string} HTML string describing the results.\n */\nfunction renderResults(results, rulesMeta) {\n    return results.map((result, index) => resultTemplate({\n        index,\n        color: renderColor(result.errorCount, result.warningCount),\n        filePath: result.filePath,\n        summary: renderSummary(result.errorCount, result.warningCount)\n    }) + renderMessages(result.messages, index, rulesMeta)).join(\"\\n\");\n}\n\n//------------------------------------------------------------------------------\n// Public Interface\n//------------------------------------------------------------------------------\n\nmodule.exports = function(results, data) {\n    let totalErrors,\n        totalWarnings;\n\n    const metaData = data ? data.rulesMeta : {};\n\n    totalErrors = 0;\n    totalWarnings = 0;\n\n    // Iterate over results to get totals\n    results.forEach(result => {\n        totalErrors += result.errorCount;\n        totalWarnings += result.warningCount;\n    });\n\n    return pageTemplate({\n        date: new Date(),\n        reportColor: renderColor(totalErrors, totalWarnings),\n        reportSummary: renderSummary(totalErrors, totalWarnings),\n        results: renderResults(results, metaData)\n    });\n};\n/lib/rules/no-unused-labels.js\f/**\n * @fileoverview Rule to disallow unused labels.\n * @author Toru Nagashima\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow unused labels\",\n            recommended: true,\n            url: \"https://eslint.org/docs/rules/no-unused-labels\"\n        },\n\n        schema: [],\n\n        fixable: \"code\",\n\n        messages: {\n            unused: \"'{{name}}:' is defined but never used.\"\n        }\n    },\n\n    create(context) {\n        const sourceCode = context.getSourceCode();\n        let scopeInfo = null;\n\n        /**\n         * Adds a scope info to the stack.\n         * @param {ASTNode} node A node to add. This is a LabeledStatement.\n         * @returns {void}\n         */\n        function enterLabeledScope(node) {\n            scopeInfo = {\n                label: node.label.name,\n                used: false,\n                upper: scopeInfo\n            };\n        }\n\n        /**\n         * Removes the top of the stack.\n         * At the same time, this reports the label if it's never used.\n         * @param {ASTNode} node A node to report. This is a LabeledStatement.\n         * @returns {void}\n         */\n        function exitLabeledScope(node) {\n            if (!scopeInfo.used) {\n                context.report({\n                    node: node.label,\n                    messageId: \"unused\",\n                    data: node.label,\n                    fix(fixer) {\n\n                        /*\n                         * Only perform a fix if there are no comments between the label and the body. This will be the case\n                         * when there is exactly one token/comment (the \":\") between the label and the body.\n                         */\n                        if (sourceCode.getTokenAfter(node.label, { includeComments: true }) ===\n                                sourceCode.getTokenBefore(node.body, { includeComments: true })) {\n                            return fixer.removeRange([node.range[0], node.body.range[0]]);\n                        }\n\n                        return null;\n                    }\n                });\n            }\n\n            scopeInfo = scopeInfo.upper;\n        }\n\n        /**\n         * Marks the label of a given node as used.\n         * @param {ASTNode} node A node to mark. This is a BreakStatement or\n         *      ContinueStatement.\n         * @returns {void}\n         */\n        function markAsUsed(node) {\n            if (!node.label) {\n                return;\n            }\n\n            const label = node.label.name;\n            let info = scopeInfo;\n\n            while (info) {\n                if (info.label === label) {\n                    info.used = true;\n                    break;\n                }\n                info = info.upper;\n            }\n        }\n\n        return {\n            LabeledStatement: enterLabeledScope,\n            \"LabeledStatement:exit\": exitLabeledScope,\n            BreakStatement: markAsUsed,\n            ContinueStatement: markAsUsed\n        };\n    }\n};\n/lib/rules/strict.js)>/**\n * @fileoverview Rule to control usage of strict mode directives.\n * @author Brandon Mills\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\n/**\n * Gets all of the Use Strict Directives in the Directive Prologue of a group of\n * statements.\n * @param {ASTNode[]} statements Statements in the program or function body.\n * @returns {ASTNode[]} All of the Use Strict Directives.\n */\nfunction getUseStrictDirectives(statements) {\n    const directives = [];\n\n    for (let i = 0; i < statements.length; i++) {\n        const statement = statements[i];\n\n        if (\n            statement.type === \"ExpressionStatement\" &&\n            statement.expression.type === \"Literal\" &&\n            statement.expression.value === \"use strict\"\n        ) {\n            directives[i] = statement;\n        } else {\n            break;\n        }\n    }\n\n    return directives;\n}\n\n/**\n * Checks whether a given parameter is a simple parameter.\n * @param {ASTNode} node A pattern node to check.\n * @returns {boolean} `true` if the node is an Identifier node.\n */\nfunction isSimpleParameter(node) {\n    return node.type === \"Identifier\";\n}\n\n/**\n * Checks whether a given parameter list is a simple parameter list.\n * @param {ASTNode[]} params A parameter list to check.\n * @returns {boolean} `true` if the every parameter is an Identifier node.\n */\nfunction isSimpleParameterList(params) {\n    return params.every(isSimpleParameter);\n}\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"require or disallow strict mode directives\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/strict\"\n        },\n\n        schema: [\n            {\n                enum: [\"never\", \"global\", \"function\", \"safe\"]\n            }\n        ],\n\n        fixable: \"code\",\n        messages: {\n            function: \"Use the function form of 'use strict'.\",\n            global: \"Use the global form of 'use strict'.\",\n            multiple: \"Multiple 'use strict' directives.\",\n            never: \"Strict mode is not permitted.\",\n            unnecessary: \"Unnecessary 'use strict' directive.\",\n            module: \"'use strict' is unnecessary inside of modules.\",\n            implied: \"'use strict' is unnecessary when implied strict mode is enabled.\",\n            unnecessaryInClasses: \"'use strict' is unnecessary inside of classes.\",\n            nonSimpleParameterList: \"'use strict' directive inside a function with non-simple parameter list throws a syntax error since ES2016.\",\n            wrap: \"Wrap {{name}} in a function with 'use strict' directive.\"\n        }\n    },\n\n    create(context) {\n\n        const ecmaFeatures = context.parserOptions.ecmaFeatures || {},\n            scopes = [],\n            classScopes = [];\n        let mode = context.options[0] || \"safe\";\n\n        if (ecmaFeatures.impliedStrict) {\n            mode = \"implied\";\n        } else if (mode === \"safe\") {\n            mode = ecmaFeatures.globalReturn ? \"global\" : \"function\";\n        }\n\n        /**\n         * Determines whether a reported error should be fixed, depending on the error type.\n         * @param {string} errorType The type of error\n         * @returns {boolean} `true` if the reported error should be fixed\n         */\n        function shouldFix(errorType) {\n            return errorType === \"multiple\" || errorType === \"unnecessary\" || errorType === \"module\" || errorType === \"implied\" || errorType === \"unnecessaryInClasses\";\n        }\n\n        /**\n         * Gets a fixer function to remove a given 'use strict' directive.\n         * @param {ASTNode} node The directive that should be removed\n         * @returns {Function} A fixer function\n         */\n        function getFixFunction(node) {\n            return fixer => fixer.remove(node);\n        }\n\n        /**\n         * Report a slice of an array of nodes with a given message.\n         * @param {ASTNode[]} nodes Nodes.\n         * @param {string} start Index to start from.\n         * @param {string} end Index to end before.\n         * @param {string} messageId Message to display.\n         * @param {boolean} fix `true` if the directive should be fixed (i.e. removed)\n         * @returns {void}\n         */\n        function reportSlice(nodes, start, end, messageId, fix) {\n            nodes.slice(start, end).forEach(node => {\n                context.report({ node, messageId, fix: fix ? getFixFunction(node) : null });\n            });\n        }\n\n        /**\n         * Report all nodes in an array with a given message.\n         * @param {ASTNode[]} nodes Nodes.\n         * @param {string} messageId Message id to display.\n         * @param {boolean} fix `true` if the directive should be fixed (i.e. removed)\n         * @returns {void}\n         */\n        function reportAll(nodes, messageId, fix) {\n            reportSlice(nodes, 0, nodes.length, messageId, fix);\n        }\n\n        /**\n         * Report all nodes in an array, except the first, with a given message.\n         * @param {ASTNode[]} nodes Nodes.\n         * @param {string} messageId Message id to display.\n         * @param {boolean} fix `true` if the directive should be fixed (i.e. removed)\n         * @returns {void}\n         */\n        function reportAllExceptFirst(nodes, messageId, fix) {\n            reportSlice(nodes, 1, nodes.length, messageId, fix);\n        }\n\n        /**\n         * Entering a function in 'function' mode pushes a new nested scope onto the\n         * stack. The new scope is true if the nested function is strict mode code.\n         * @param {ASTNode} node The function declaration or expression.\n         * @param {ASTNode[]} useStrictDirectives The Use Strict Directives of the node.\n         * @returns {void}\n         */\n        function enterFunctionInFunctionMode(node, useStrictDirectives) {\n            const isInClass = classScopes.length > 0,\n                isParentGlobal = scopes.length === 0 && classScopes.length === 0,\n                isParentStrict = scopes.length > 0 && scopes[scopes.length - 1],\n                isStrict = useStrictDirectives.length > 0;\n\n            if (isStrict) {\n                if (!isSimpleParameterList(node.params)) {\n                    context.report({ node: useStrictDirectives[0], messageId: \"nonSimpleParameterList\" });\n                } else if (isParentStrict) {\n                    context.report({ node: useStrictDirectives[0], messageId: \"unnecessary\", fix: getFixFunction(useStrictDirectives[0]) });\n                } else if (isInClass) {\n                    context.report({ node: useStrictDirectives[0], messageId: \"unnecessaryInClasses\", fix: getFixFunction(useStrictDirectives[0]) });\n                }\n\n                reportAllExceptFirst(useStrictDirectives, \"multiple\", true);\n            } else if (isParentGlobal) {\n                if (isSimpleParameterList(node.params)) {\n                    context.report({ node, messageId: \"function\" });\n                } else {\n                    context.report({\n                        node,\n                        messageId: \"wrap\",\n                        data: { name: astUtils.getFunctionNameWithKind(node) }\n                    });\n                }\n            }\n\n            scopes.push(isParentStrict || isStrict);\n        }\n\n        /**\n         * Exiting a function in 'function' mode pops its scope off the stack.\n         * @returns {void}\n         */\n        function exitFunctionInFunctionMode() {\n            scopes.pop();\n        }\n\n        /**\n         * Enter a function and either:\n         * - Push a new nested scope onto the stack (in 'function' mode).\n         * - Report all the Use Strict Directives (in the other modes).\n         * @param {ASTNode} node The function declaration or expression.\n         * @returns {void}\n         */\n        function enterFunction(node) {\n            const isBlock = node.body.type === \"BlockStatement\",\n                useStrictDirectives = isBlock\n                    ? getUseStrictDirectives(node.body.body) : [];\n\n            if (mode === \"function\") {\n                enterFunctionInFunctionMode(node, useStrictDirectives);\n            } else if (useStrictDirectives.length > 0) {\n                if (isSimpleParameterList(node.params)) {\n                    reportAll(useStrictDirectives, mode, shouldFix(mode));\n                } else {\n                    context.report({ node: useStrictDirectives[0], messageId: \"nonSimpleParameterList\" });\n                    reportAllExceptFirst(useStrictDirectives, \"multiple\", true);\n                }\n            }\n        }\n\n        const rule = {\n            Program(node) {\n                const useStrictDirectives = getUseStrictDirectives(node.body);\n\n                if (node.sourceType === \"module\") {\n                    mode = \"module\";\n                }\n\n                if (mode === \"global\") {\n                    if (node.body.length > 0 && useStrictDirectives.length === 0) {\n                        context.report({ node, messageId: \"global\" });\n                    }\n                    reportAllExceptFirst(useStrictDirectives, \"multiple\", true);\n                } else {\n                    reportAll(useStrictDirectives, mode, shouldFix(mode));\n                }\n            },\n            FunctionDeclaration: enterFunction,\n            FunctionExpression: enterFunction,\n            ArrowFunctionExpression: enterFunction\n        };\n\n        if (mode === \"function\") {\n            Object.assign(rule, {\n\n                // Inside of class bodies are always strict mode.\n                ClassBody() {\n                    classScopes.push(true);\n                },\n                \"ClassBody:exit\"() {\n                    classScopes.pop();\n                },\n\n                \"FunctionDeclaration:exit\": exitFunctionInFunctionMode,\n                \"FunctionExpression:exit\": exitFunctionInFunctionMode,\n                \"ArrowFunctionExpression:exit\": exitFunctionInFunctionMode\n            });\n        }\n\n        return rule;\n    }\n};\n,/lib/rules/prefer-exponentiation-operator.js\u001d/**\n * @fileoverview Rule to disallow Math.pow in favor of the ** operator\n * @author Milos Djermanovic\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\nconst { CALL, ReferenceTracker } = require(\"eslint-utils\");\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\nconst PRECEDENCE_OF_EXPONENTIATION_EXPR = astUtils.getPrecedence({ type: \"BinaryExpression\", operator: \"**\" });\n\n/**\n * Determines whether the given node needs parens if used as the base in an exponentiation binary expression.\n * @param {ASTNode} base The node to check.\n * @returns {boolean} `true` if the node needs to be parenthesised.\n */\nfunction doesBaseNeedParens(base) {\n    return (\n\n        // '**' is right-associative, parens are needed when Math.pow(a ** b, c) is converted to (a ** b) ** c\n        astUtils.getPrecedence(base) <= PRECEDENCE_OF_EXPONENTIATION_EXPR ||\n\n        // An unary operator cannot be used immediately before an exponentiation expression\n        base.type === \"AwaitExpression\" ||\n        base.type === \"UnaryExpression\"\n    );\n}\n\n/**\n * Determines whether the given node needs parens if used as the exponent in an exponentiation binary expression.\n * @param {ASTNode} exponent The node to check.\n * @returns {boolean} `true` if the node needs to be parenthesised.\n */\nfunction doesExponentNeedParens(exponent) {\n\n    // '**' is right-associative, there is no need for parens when Math.pow(a, b ** c) is converted to a ** b ** c\n    return astUtils.getPrecedence(exponent) < PRECEDENCE_OF_EXPONENTIATION_EXPR;\n}\n\n/**\n * Determines whether an exponentiation binary expression at the place of the given node would need parens.\n * @param {ASTNode} node A node that would be replaced by an exponentiation binary expression.\n * @param {SourceCode} sourceCode A SourceCode object.\n * @returns {boolean} `true` if the expression needs to be parenthesised.\n */\nfunction doesExponentiationExpressionNeedParens(node, sourceCode) {\n    const parent = node.parent.type === \"ChainExpression\" ? node.parent.parent : node.parent;\n\n    const needsParens = (\n        parent.type === \"ClassDeclaration\" ||\n        (\n            parent.type.endsWith(\"Expression\") &&\n            astUtils.getPrecedence(parent) >= PRECEDENCE_OF_EXPONENTIATION_EXPR &&\n            !(parent.type === \"BinaryExpression\" && parent.operator === \"**\" && parent.right === node) &&\n            !((parent.type === \"CallExpression\" || parent.type === \"NewExpression\") && parent.arguments.includes(node)) &&\n            !(parent.type === \"MemberExpression\" && parent.computed && parent.property === node) &&\n            !(parent.type === \"ArrayExpression\")\n        )\n    );\n\n    return needsParens && !astUtils.isParenthesised(sourceCode, node);\n}\n\n/**\n * Optionally parenthesizes given text.\n * @param {string} text The text to parenthesize.\n * @param {boolean} shouldParenthesize If `true`, the text will be parenthesised.\n * @returns {string} parenthesised or unchanged text.\n */\nfunction parenthesizeIfShould(text, shouldParenthesize) {\n    return shouldParenthesize ? `(${text})` : text;\n}\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow the use of `Math.pow` in favor of the `**` operator\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/prefer-exponentiation-operator\"\n        },\n\n        schema: [],\n        fixable: \"code\",\n\n        messages: {\n            useExponentiation: \"Use the '**' operator instead of 'Math.pow'.\"\n        }\n    },\n\n    create(context) {\n        const sourceCode = context.getSourceCode();\n\n        /**\n         * Reports the given node.\n         * @param {ASTNode} node 'Math.pow()' node to report.\n         * @returns {void}\n         */\n        function report(node) {\n            context.report({\n                node,\n                messageId: \"useExponentiation\",\n                fix(fixer) {\n                    if (\n                        node.arguments.length !== 2 ||\n                        node.arguments.some(arg => arg.type === \"SpreadElement\") ||\n                        sourceCode.getCommentsInside(node).length > 0\n                    ) {\n                        return null;\n                    }\n\n                    const base = node.arguments[0],\n                        exponent = node.arguments[1],\n                        baseText = sourceCode.getText(base),\n                        exponentText = sourceCode.getText(exponent),\n                        shouldParenthesizeBase = doesBaseNeedParens(base),\n                        shouldParenthesizeExponent = doesExponentNeedParens(exponent),\n                        shouldParenthesizeAll = doesExponentiationExpressionNeedParens(node, sourceCode);\n\n                    let prefix = \"\",\n                        suffix = \"\";\n\n                    if (!shouldParenthesizeAll) {\n                        if (!shouldParenthesizeBase) {\n                            const firstReplacementToken = sourceCode.getFirstToken(base),\n                                tokenBefore = sourceCode.getTokenBefore(node);\n\n                            if (\n                                tokenBefore &&\n                                tokenBefore.range[1] === node.range[0] &&\n                                !astUtils.canTokensBeAdjacent(tokenBefore, firstReplacementToken)\n                            ) {\n                                prefix = \" \"; // a+Math.pow(++b, c) -> a+ ++b**c\n                            }\n                        }\n                        if (!shouldParenthesizeExponent) {\n                            const lastReplacementToken = sourceCode.getLastToken(exponent),\n                                tokenAfter = sourceCode.getTokenAfter(node);\n\n                            if (\n                                tokenAfter &&\n                                node.range[1] === tokenAfter.range[0] &&\n                                !astUtils.canTokensBeAdjacent(lastReplacementToken, tokenAfter)\n                            ) {\n                                suffix = \" \"; // Math.pow(a, b)in c -> a**b in c\n                            }\n                        }\n                    }\n\n                    const baseReplacement = parenthesizeIfShould(baseText, shouldParenthesizeBase),\n                        exponentReplacement = parenthesizeIfShould(exponentText, shouldParenthesizeExponent),\n                        replacement = parenthesizeIfShould(`${baseReplacement}**${exponentReplacement}`, shouldParenthesizeAll);\n\n                    return fixer.replaceText(node, `${prefix}${replacement}${suffix}`);\n                }\n            });\n        }\n\n        return {\n            Program() {\n                const scope = context.getScope();\n                const tracker = new ReferenceTracker(scope);\n                const trackMap = {\n                    Math: {\n                        pow: { [CALL]: true }\n                    }\n                };\n\n                for (const { node } of tracker.iterateGlobalReferences(trackMap)) {\n                    report(node);\n                }\n            }\n        };\n    }\n};\n/conf/rule-type-list.json\n\u0003{\n    \"types\": [\n        { \"name\": \"problem\", \"displayName\": \"Possible Problems\", \"description\": \"These rules relate to possible logic errors in code:\" },\n        { \"name\": \"suggestion\", \"displayName\": \"Suggestions\", \"description\": \"These rules suggest alternate ways of doing things:\" },\n        { \"name\": \"layout\", \"displayName\": \"Layout & Formatting\", \"description\": \"These rules care about how the code looks rather than how it executes:\" }\n    ],\n    \"deprecated\": {\n        \"name\": \"Deprecated\",\n        \"description\": \"These rules have been deprecated in accordance with the <a href=\\\"/docs/user-guide/rule-deprecation\\\">deprecation policy</a>, and replaced by newer rules:\",\n        \"rules\": []\n    },\n    \"removed\": {\n        \"name\": \"Removed\",\n        \"description\": \"These rules from older versions of ESLint (before the <a href=\\\"/docs/user-guide/rule-deprecation\\\">deprecation policy</a> existed) have been replaced by newer rules:\",\n        \"rules\": [\n            { \"removed\": \"generator-star\", \"replacedBy\": [\"generator-star-spacing\"] },\n            { \"removed\": \"global-strict\", \"replacedBy\": [\"strict\"] },\n            { \"removed\": \"no-arrow-condition\", \"replacedBy\": [\"no-confusing-arrow\", \"no-constant-condition\"] },\n            { \"removed\": \"no-comma-dangle\", \"replacedBy\": [\"comma-dangle\"] },\n            { \"removed\": \"no-empty-class\", \"replacedBy\": [\"no-empty-character-class\"] },\n            { \"removed\": \"no-empty-label\", \"replacedBy\": [\"no-labels\"] },\n            { \"removed\": \"no-extra-strict\", \"replacedBy\": [\"strict\"] },\n            { \"removed\": \"no-reserved-keys\", \"replacedBy\": [\"quote-props\"] },\n            { \"removed\": \"no-space-before-semi\", \"replacedBy\": [\"semi-spacing\"] },\n            { \"removed\": \"no-wrap-func\", \"replacedBy\": [\"no-extra-parens\"] },\n            { \"removed\": \"space-after-function-name\", \"replacedBy\": [\"space-before-function-paren\"] },\n            { \"removed\": \"space-after-keywords\", \"replacedBy\": [\"keyword-spacing\"] },\n            { \"removed\": \"space-before-function-parentheses\", \"replacedBy\": [\"space-before-function-paren\"] },\n            { \"removed\": \"space-before-keywords\", \"replacedBy\": [\"keyword-spacing\"] },\n            { \"removed\": \"space-in-brackets\", \"replacedBy\": [\"object-curly-spacing\", \"array-bracket-spacing\"] },\n            { \"removed\": \"space-return-throw-case\", \"replacedBy\": [\"keyword-spacing\"] },\n            { \"removed\": \"space-unary-word-ops\", \"replacedBy\": [\"space-unary-ops\"] },\n            { \"removed\": \"spaced-line-comment\", \"replacedBy\": [\"spaced-comment\"] }\n        ]\n    }\n}\n/lib/rules/no-useless-return.js//**\n * @fileoverview Disallow redundant return statements\n * @author Teddy Katz\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\"),\n    FixTracker = require(\"./utils/fix-tracker\");\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\n/**\n * Removes the given element from the array.\n * @param {Array} array The source array to remove.\n * @param {any} element The target item to remove.\n * @returns {void}\n */\nfunction remove(array, element) {\n    const index = array.indexOf(element);\n\n    if (index !== -1) {\n        array.splice(index, 1);\n    }\n}\n\n/**\n * Checks whether it can remove the given return statement or not.\n * @param {ASTNode} node The return statement node to check.\n * @returns {boolean} `true` if the node is removable.\n */\nfunction isRemovable(node) {\n    return astUtils.STATEMENT_LIST_PARENTS.has(node.parent.type);\n}\n\n/**\n * Checks whether the given return statement is in a `finally` block or not.\n * @param {ASTNode} node The return statement node to check.\n * @returns {boolean} `true` if the node is in a `finally` block.\n */\nfunction isInFinally(node) {\n    for (\n        let currentNode = node;\n        currentNode && currentNode.parent && !astUtils.isFunction(currentNode);\n        currentNode = currentNode.parent\n    ) {\n        if (currentNode.parent.type === \"TryStatement\" && currentNode.parent.finalizer === currentNode) {\n            return true;\n        }\n    }\n\n    return false;\n}\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow redundant return statements\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-useless-return\"\n        },\n\n        fixable: \"code\",\n        schema: [],\n\n        messages: {\n            unnecessaryReturn: \"Unnecessary return statement.\"\n        }\n    },\n\n    create(context) {\n        const segmentInfoMap = new WeakMap();\n        const usedUnreachableSegments = new WeakSet();\n        const sourceCode = context.getSourceCode();\n        let scopeInfo = null;\n\n        /**\n         * Checks whether the given segment is terminated by a return statement or not.\n         * @param {CodePathSegment} segment The segment to check.\n         * @returns {boolean} `true` if the segment is terminated by a return statement, or if it's still a part of unreachable.\n         */\n        function isReturned(segment) {\n            const info = segmentInfoMap.get(segment);\n\n            return !info || info.returned;\n        }\n\n        /**\n         * Collects useless return statements from the given previous segments.\n         *\n         * A previous segment may be an unreachable segment.\n         * In that case, the information object of the unreachable segment is not\n         * initialized because `onCodePathSegmentStart` event is not notified for\n         * unreachable segments.\n         * This goes to the previous segments of the unreachable segment recursively\n         * if the unreachable segment was generated by a return statement. Otherwise,\n         * this ignores the unreachable segment.\n         *\n         * This behavior would simulate code paths for the case that the return\n         * statement does not exist.\n         * @param {ASTNode[]} uselessReturns The collected return statements.\n         * @param {CodePathSegment[]} prevSegments The previous segments to traverse.\n         * @param {WeakSet<CodePathSegment>} [providedTraversedSegments] A set of segments that have already been traversed in this call\n         * @returns {ASTNode[]} `uselessReturns`.\n         */\n        function getUselessReturns(uselessReturns, prevSegments, providedTraversedSegments) {\n            const traversedSegments = providedTraversedSegments || new WeakSet();\n\n            for (const segment of prevSegments) {\n                if (!segment.reachable) {\n                    if (!traversedSegments.has(segment)) {\n                        traversedSegments.add(segment);\n                        getUselessReturns(\n                            uselessReturns,\n                            segment.allPrevSegments.filter(isReturned),\n                            traversedSegments\n                        );\n                    }\n                    continue;\n                }\n\n                uselessReturns.push(...segmentInfoMap.get(segment).uselessReturns);\n            }\n\n            return uselessReturns;\n        }\n\n        /**\n         * Removes the return statements on the given segment from the useless return\n         * statement list.\n         *\n         * This segment may be an unreachable segment.\n         * In that case, the information object of the unreachable segment is not\n         * initialized because `onCodePathSegmentStart` event is not notified for\n         * unreachable segments.\n         * This goes to the previous segments of the unreachable segment recursively\n         * if the unreachable segment was generated by a return statement. Otherwise,\n         * this ignores the unreachable segment.\n         *\n         * This behavior would simulate code paths for the case that the return\n         * statement does not exist.\n         * @param {CodePathSegment} segment The segment to get return statements.\n         * @returns {void}\n         */\n        function markReturnStatementsOnSegmentAsUsed(segment) {\n            if (!segment.reachable) {\n                usedUnreachableSegments.add(segment);\n                segment.allPrevSegments\n                    .filter(isReturned)\n                    .filter(prevSegment => !usedUnreachableSegments.has(prevSegment))\n                    .forEach(markReturnStatementsOnSegmentAsUsed);\n                return;\n            }\n\n            const info = segmentInfoMap.get(segment);\n\n            for (const node of info.uselessReturns) {\n                remove(scopeInfo.uselessReturns, node);\n            }\n            info.uselessReturns = [];\n        }\n\n        /**\n         * Removes the return statements on the current segments from the useless\n         * return statement list.\n         *\n         * This function will be called at every statement except FunctionDeclaration,\n         * BlockStatement, and BreakStatement.\n         *\n         * - FunctionDeclarations are always executed whether it's returned or not.\n         * - BlockStatements do nothing.\n         * - BreakStatements go the next merely.\n         * @returns {void}\n         */\n        function markReturnStatementsOnCurrentSegmentsAsUsed() {\n            scopeInfo\n                .codePath\n                .currentSegments\n                .forEach(markReturnStatementsOnSegmentAsUsed);\n        }\n\n        //----------------------------------------------------------------------\n        // Public\n        //----------------------------------------------------------------------\n\n        return {\n\n            // Makes and pushs a new scope information.\n            onCodePathStart(codePath) {\n                scopeInfo = {\n                    upper: scopeInfo,\n                    uselessReturns: [],\n                    codePath\n                };\n            },\n\n            // Reports useless return statements if exist.\n            onCodePathEnd() {\n                for (const node of scopeInfo.uselessReturns) {\n                    context.report({\n                        node,\n                        loc: node.loc,\n                        messageId: \"unnecessaryReturn\",\n                        fix(fixer) {\n                            if (isRemovable(node) && !sourceCode.getCommentsInside(node).length) {\n\n                                /*\n                                 * Extend the replacement range to include the\n                                 * entire function to avoid conflicting with\n                                 * no-else-return.\n                                 * https://github.com/eslint/eslint/issues/8026\n                                 */\n                                return new FixTracker(fixer, sourceCode)\n                                    .retainEnclosingFunction(node)\n                                    .remove(node);\n                            }\n                            return null;\n                        }\n                    });\n                }\n\n                scopeInfo = scopeInfo.upper;\n            },\n\n            /*\n             * Initializes segments.\n             * NOTE: This event is notified for only reachable segments.\n             */\n            onCodePathSegmentStart(segment) {\n                const info = {\n                    uselessReturns: getUselessReturns([], segment.allPrevSegments),\n                    returned: false\n                };\n\n                // Stores the info.\n                segmentInfoMap.set(segment, info);\n            },\n\n            // Adds ReturnStatement node to check whether it's useless or not.\n            ReturnStatement(node) {\n                if (node.argument) {\n                    markReturnStatementsOnCurrentSegmentsAsUsed();\n                }\n                if (\n                    node.argument ||\n                    astUtils.isInLoop(node) ||\n                    isInFinally(node) ||\n\n                    // Ignore `return` statements in unreachable places (https://github.com/eslint/eslint/issues/11647).\n                    !scopeInfo.codePath.currentSegments.some(s => s.reachable)\n                ) {\n                    return;\n                }\n\n                for (const segment of scopeInfo.codePath.currentSegments) {\n                    const info = segmentInfoMap.get(segment);\n\n                    if (info) {\n                        info.uselessReturns.push(node);\n                        info.returned = true;\n                    }\n                }\n                scopeInfo.uselessReturns.push(node);\n            },\n\n            /*\n             * Registers for all statement nodes except FunctionDeclaration, BlockStatement, BreakStatement.\n             * Removes return statements of the current segments from the useless return statement list.\n             */\n            ClassDeclaration: markReturnStatementsOnCurrentSegmentsAsUsed,\n            ContinueStatement: markReturnStatementsOnCurrentSegmentsAsUsed,\n            DebuggerStatement: markReturnStatementsOnCurrentSegmentsAsUsed,\n            DoWhileStatement: markReturnStatementsOnCurrentSegmentsAsUsed,\n            EmptyStatement: markReturnStatementsOnCurrentSegmentsAsUsed,\n            ExpressionStatement: markReturnStatementsOnCurrentSegmentsAsUsed,\n            ForInStatement: markReturnStatementsOnCurrentSegmentsAsUsed,\n            ForOfStatement: markReturnStatementsOnCurrentSegmentsAsUsed,\n            ForStatement: markReturnStatementsOnCurrentSegmentsAsUsed,\n            IfStatement: markReturnStatementsOnCurrentSegmentsAsUsed,\n            ImportDeclaration: markReturnStatementsOnCurrentSegmentsAsUsed,\n            LabeledStatement: markReturnStatementsOnCurrentSegmentsAsUsed,\n            SwitchStatement: markReturnStatementsOnCurrentSegmentsAsUsed,\n            ThrowStatement: markReturnStatementsOnCurrentSegmentsAsUsed,\n            TryStatement: markReturnStatementsOnCurrentSegmentsAsUsed,\n            VariableDeclaration: markReturnStatementsOnCurrentSegmentsAsUsed,\n            WhileStatement: markReturnStatementsOnCurrentSegmentsAsUsed,\n            WithStatement: markReturnStatementsOnCurrentSegmentsAsUsed,\n            ExportNamedDeclaration: markReturnStatementsOnCurrentSegmentsAsUsed,\n            ExportDefaultDeclaration: markReturnStatementsOnCurrentSegmentsAsUsed,\n            ExportAllDeclaration: markReturnStatementsOnCurrentSegmentsAsUsed\n        };\n    }\n};\n/lib/rules/max-depth.js\u0012/**\n * @fileoverview A rule to set the maximum depth block can be nested in a function.\n * @author Ian Christian Myers\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"enforce a maximum depth that blocks can be nested\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/max-depth\"\n        },\n\n        schema: [\n            {\n                oneOf: [\n                    {\n                        type: \"integer\",\n                        minimum: 0\n                    },\n                    {\n                        type: \"object\",\n                        properties: {\n                            maximum: {\n                                type: \"integer\",\n                                minimum: 0\n                            },\n                            max: {\n                                type: \"integer\",\n                                minimum: 0\n                            }\n                        },\n                        additionalProperties: false\n                    }\n                ]\n            }\n        ],\n        messages: {\n            tooDeeply: \"Blocks are nested too deeply ({{depth}}). Maximum allowed is {{maxDepth}}.\"\n        }\n    },\n\n    create(context) {\n\n        //--------------------------------------------------------------------------\n        // Helpers\n        //--------------------------------------------------------------------------\n\n        const functionStack = [],\n            option = context.options[0];\n        let maxDepth = 4;\n\n        if (\n            typeof option === \"object\" &&\n            (Object.prototype.hasOwnProperty.call(option, \"maximum\") || Object.prototype.hasOwnProperty.call(option, \"max\"))\n        ) {\n            maxDepth = option.maximum || option.max;\n        }\n        if (typeof option === \"number\") {\n            maxDepth = option;\n        }\n\n        /**\n         * When parsing a new function, store it in our function stack\n         * @returns {void}\n         * @private\n         */\n        function startFunction() {\n            functionStack.push(0);\n        }\n\n        /**\n         * When parsing is done then pop out the reference\n         * @returns {void}\n         * @private\n         */\n        function endFunction() {\n            functionStack.pop();\n        }\n\n        /**\n         * Save the block and Evaluate the node\n         * @param {ASTNode} node node to evaluate\n         * @returns {void}\n         * @private\n         */\n        function pushBlock(node) {\n            const len = ++functionStack[functionStack.length - 1];\n\n            if (len > maxDepth) {\n                context.report({ node, messageId: \"tooDeeply\", data: { depth: len, maxDepth } });\n            }\n        }\n\n        /**\n         * Pop the saved block\n         * @returns {void}\n         * @private\n         */\n        function popBlock() {\n            functionStack[functionStack.length - 1]--;\n        }\n\n        //--------------------------------------------------------------------------\n        // Public API\n        //--------------------------------------------------------------------------\n\n        return {\n            Program: startFunction,\n            FunctionDeclaration: startFunction,\n            FunctionExpression: startFunction,\n            ArrowFunctionExpression: startFunction,\n            StaticBlock: startFunction,\n\n            IfStatement(node) {\n                if (node.parent.type !== \"IfStatement\") {\n                    pushBlock(node);\n                }\n            },\n            SwitchStatement: pushBlock,\n            TryStatement: pushBlock,\n            DoWhileStatement: pushBlock,\n            WhileStatement: pushBlock,\n            WithStatement: pushBlock,\n            ForStatement: pushBlock,\n            ForInStatement: pushBlock,\n            ForOfStatement: pushBlock,\n\n            \"IfStatement:exit\": popBlock,\n            \"SwitchStatement:exit\": popBlock,\n            \"TryStatement:exit\": popBlock,\n            \"DoWhileStatement:exit\": popBlock,\n            \"WhileStatement:exit\": popBlock,\n            \"WithStatement:exit\": popBlock,\n            \"ForStatement:exit\": popBlock,\n            \"ForInStatement:exit\": popBlock,\n            \"ForOfStatement:exit\": popBlock,\n\n            \"FunctionDeclaration:exit\": endFunction,\n            \"FunctionExpression:exit\": endFunction,\n            \"ArrowFunctionExpression:exit\": endFunction,\n            \"StaticBlock:exit\": endFunction,\n            \"Program:exit\": endFunction\n        };\n\n    }\n};\n/lib/rules/id-match.js+/**\n * @fileoverview Rule to flag non-matching identifiers\n * @author Matthieu Larcher\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"require identifiers to match a specified regular expression\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/id-match\"\n        },\n\n        schema: [\n            {\n                type: \"string\"\n            },\n            {\n                type: \"object\",\n                properties: {\n                    properties: {\n                        type: \"boolean\",\n                        default: false\n                    },\n                    classFields: {\n                        type: \"boolean\",\n                        default: false\n                    },\n                    onlyDeclarations: {\n                        type: \"boolean\",\n                        default: false\n                    },\n                    ignoreDestructuring: {\n                        type: \"boolean\",\n                        default: false\n                    }\n                },\n                additionalProperties: false\n            }\n        ],\n        messages: {\n            notMatch: \"Identifier '{{name}}' does not match the pattern '{{pattern}}'.\",\n            notMatchPrivate: \"Identifier '#{{name}}' does not match the pattern '{{pattern}}'.\"\n        }\n    },\n\n    create(context) {\n\n        //--------------------------------------------------------------------------\n        // Options\n        //--------------------------------------------------------------------------\n        const pattern = context.options[0] || \"^.+$\",\n            regexp = new RegExp(pattern, \"u\");\n\n        const options = context.options[1] || {},\n            checkProperties = !!options.properties,\n            checkClassFields = !!options.classFields,\n            onlyDeclarations = !!options.onlyDeclarations,\n            ignoreDestructuring = !!options.ignoreDestructuring;\n\n        let globalScope;\n\n        //--------------------------------------------------------------------------\n        // Helpers\n        //--------------------------------------------------------------------------\n\n        // contains reported nodes to avoid reporting twice on destructuring with shorthand notation\n        const reportedNodes = new Set();\n        const ALLOWED_PARENT_TYPES = new Set([\"CallExpression\", \"NewExpression\"]);\n        const DECLARATION_TYPES = new Set([\"FunctionDeclaration\", \"VariableDeclarator\"]);\n        const IMPORT_TYPES = new Set([\"ImportSpecifier\", \"ImportNamespaceSpecifier\", \"ImportDefaultSpecifier\"]);\n\n        /**\n         * Checks whether the given node represents a reference to a global variable that is not declared in the source code.\n         * These identifiers will be allowed, as it is assumed that user has no control over the names of external global variables.\n         * @param {ASTNode} node `Identifier` node to check.\n         * @returns {boolean} `true` if the node is a reference to a global variable.\n         */\n        function isReferenceToGlobalVariable(node) {\n            const variable = globalScope.set.get(node.name);\n\n            return variable && variable.defs.length === 0 &&\n                variable.references.some(ref => ref.identifier === node);\n        }\n\n        /**\n         * Checks if a string matches the provided pattern\n         * @param {string} name The string to check.\n         * @returns {boolean} if the string is a match\n         * @private\n         */\n        function isInvalid(name) {\n            return !regexp.test(name);\n        }\n\n        /**\n         * Checks if a parent of a node is an ObjectPattern.\n         * @param {ASTNode} node The node to check.\n         * @returns {boolean} if the node is inside an ObjectPattern\n         * @private\n         */\n        function isInsideObjectPattern(node) {\n            let { parent } = node;\n\n            while (parent) {\n                if (parent.type === \"ObjectPattern\") {\n                    return true;\n                }\n\n                parent = parent.parent;\n            }\n\n            return false;\n        }\n\n        /**\n         * Verifies if we should report an error or not based on the effective\n         * parent node and the identifier name.\n         * @param {ASTNode} effectiveParent The effective parent node of the node to be reported\n         * @param {string} name The identifier name of the identifier node\n         * @returns {boolean} whether an error should be reported or not\n         */\n        function shouldReport(effectiveParent, name) {\n            return (!onlyDeclarations || DECLARATION_TYPES.has(effectiveParent.type)) &&\n                !ALLOWED_PARENT_TYPES.has(effectiveParent.type) && isInvalid(name);\n        }\n\n        /**\n         * Reports an AST node as a rule violation.\n         * @param {ASTNode} node The node to report.\n         * @returns {void}\n         * @private\n         */\n        function report(node) {\n\n            /*\n             * We used the range instead of the node because it's possible\n             * for the same identifier to be represented by two different\n             * nodes, with the most clear example being shorthand properties:\n             * { foo }\n             * In this case, \"foo\" is represented by one node for the name\n             * and one for the value. The only way to know they are the same\n             * is to look at the range.\n             */\n            if (!reportedNodes.has(node.range.toString())) {\n\n                const messageId = (node.type === \"PrivateIdentifier\")\n                    ? \"notMatchPrivate\" : \"notMatch\";\n\n                context.report({\n                    node,\n                    messageId,\n                    data: {\n                        name: node.name,\n                        pattern\n                    }\n                });\n                reportedNodes.add(node.range.toString());\n            }\n        }\n\n        return {\n\n            Program() {\n                globalScope = context.getScope();\n            },\n\n            Identifier(node) {\n                const name = node.name,\n                    parent = node.parent,\n                    effectiveParent = (parent.type === \"MemberExpression\") ? parent.parent : parent;\n\n                if (isReferenceToGlobalVariable(node)) {\n                    return;\n                }\n\n                if (parent.type === \"MemberExpression\") {\n\n                    if (!checkProperties) {\n                        return;\n                    }\n\n                    // Always check object names\n                    if (parent.object.type === \"Identifier\" &&\n                        parent.object.name === name) {\n                        if (isInvalid(name)) {\n                            report(node);\n                        }\n\n                    // Report AssignmentExpressions left side's assigned variable id\n                    } else if (effectiveParent.type === \"AssignmentExpression\" &&\n                        effectiveParent.left.type === \"MemberExpression\" &&\n                        effectiveParent.left.property.name === node.name) {\n                        if (isInvalid(name)) {\n                            report(node);\n                        }\n\n                    // Report AssignmentExpressions only if they are the left side of the assignment\n                    } else if (effectiveParent.type === \"AssignmentExpression\" && effectiveParent.right.type !== \"MemberExpression\") {\n                        if (isInvalid(name)) {\n                            report(node);\n                        }\n                    }\n\n                // For https://github.com/eslint/eslint/issues/15123\n                } else if (\n                    parent.type === \"Property\" &&\n                    parent.parent.type === \"ObjectExpression\" &&\n                    parent.key === node &&\n                    !parent.computed\n                ) {\n                    if (checkProperties && isInvalid(name)) {\n                        report(node);\n                    }\n\n                /*\n                 * Properties have their own rules, and\n                 * AssignmentPattern nodes can be treated like Properties:\n                 * e.g.: const { no_camelcased = false } = bar;\n                 */\n                } else if (parent.type === \"Property\" || parent.type === \"AssignmentPattern\") {\n\n                    if (parent.parent && parent.parent.type === \"ObjectPattern\") {\n                        if (!ignoreDestructuring && parent.shorthand && parent.value.left && isInvalid(name)) {\n                            report(node);\n                        }\n\n                        const assignmentKeyEqualsValue = parent.key.name === parent.value.name;\n\n                        // prevent checking righthand side of destructured object\n                        if (!assignmentKeyEqualsValue && parent.key === node) {\n                            return;\n                        }\n\n                        const valueIsInvalid = parent.value.name && isInvalid(name);\n\n                        // ignore destructuring if the option is set, unless a new identifier is created\n                        if (valueIsInvalid && !(assignmentKeyEqualsValue && ignoreDestructuring)) {\n                            report(node);\n                        }\n                    }\n\n                    // never check properties or always ignore destructuring\n                    if ((!checkProperties && !parent.computed) || (ignoreDestructuring && isInsideObjectPattern(node))) {\n                        return;\n                    }\n\n                    // don't check right hand side of AssignmentExpression to prevent duplicate warnings\n                    if (parent.right !== node && shouldReport(effectiveParent, name)) {\n                        report(node);\n                    }\n\n                // Check if it's an import specifier\n                } else if (IMPORT_TYPES.has(parent.type)) {\n\n                    // Report only if the local imported identifier is invalid\n                    if (parent.local && parent.local.name === node.name && isInvalid(name)) {\n                        report(node);\n                    }\n\n                } else if (parent.type === \"PropertyDefinition\") {\n\n                    if (checkClassFields && isInvalid(name)) {\n                        report(node);\n                    }\n\n                // Report anything that is invalid that isn't a CallExpression\n                } else if (shouldReport(effectiveParent, name)) {\n                    report(node);\n                }\n            },\n\n            \"PrivateIdentifier\"(node) {\n\n                const isClassField = node.parent.type === \"PropertyDefinition\";\n\n                if (isClassField && !checkClassFields) {\n                    return;\n                }\n\n                if (isInvalid(node.name)) {\n                    report(node);\n                }\n            }\n\n        };\n\n    }\n};\n/conf/config-schema.js\n)/*\n * STOP!!! DO NOT MODIFY.\n *\n * This file is part of the ongoing work to move the eslintrc-style config\n * system into the @eslint/eslintrc package. This file needs to remain\n * unchanged in order for this work to proceed.\n *\n * If you think you need to change this file, please contact @nzakas first.\n *\n * Thanks in advance for your cooperation.\n */\n\n/**\n * @fileoverview Defines a schema for configs.\n * @author Sylvan Mably\n */\n\n\"use strict\";\n\nconst baseConfigProperties = {\n    $schema: { type: \"string\" },\n    env: { type: \"object\" },\n    extends: { $ref: \"#/definitions/stringOrStrings\" },\n    globals: { type: \"object\" },\n    overrides: {\n        type: \"array\",\n        items: { $ref: \"#/definitions/overrideConfig\" },\n        additionalItems: false\n    },\n    parser: { type: [\"string\", \"null\"] },\n    parserOptions: { type: \"object\" },\n    plugins: { type: \"array\" },\n    processor: { type: \"string\" },\n    rules: { type: \"object\" },\n    settings: { type: \"object\" },\n    noInlineConfig: { type: \"boolean\" },\n    reportUnusedDisableDirectives: { type: \"boolean\" },\n\n    ecmaFeatures: { type: \"object\" } // deprecated; logs a warning when used\n};\n\nconst configSchema = {\n    definitions: {\n        stringOrStrings: {\n            oneOf: [\n                { type: \"string\" },\n                {\n                    type: \"array\",\n                    items: { type: \"string\" },\n                    additionalItems: false\n                }\n            ]\n        },\n        stringOrStringsRequired: {\n            oneOf: [\n                { type: \"string\" },\n                {\n                    type: \"array\",\n                    items: { type: \"string\" },\n                    additionalItems: false,\n                    minItems: 1\n                }\n            ]\n        },\n\n        // Config at top-level.\n        objectConfig: {\n            type: \"object\",\n            properties: {\n                root: { type: \"boolean\" },\n                ignorePatterns: { $ref: \"#/definitions/stringOrStrings\" },\n                ...baseConfigProperties\n            },\n            additionalProperties: false\n        },\n\n        // Config in `overrides`.\n        overrideConfig: {\n            type: \"object\",\n            properties: {\n                excludedFiles: { $ref: \"#/definitions/stringOrStrings\" },\n                files: { $ref: \"#/definitions/stringOrStringsRequired\" },\n                ...baseConfigProperties\n            },\n            required: [\"files\"],\n            additionalProperties: false\n        }\n    },\n\n    $ref: \"#/definitions/objectConfig\"\n};\n\nmodule.exports = configSchema;\n0/lib/cli-engine/formatters/json-with-metadata.js\u0001/**\n * @fileoverview JSON reporter, including rules metadata\n * @author Chris Meyer\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Public Interface\n//------------------------------------------------------------------------------\n\nmodule.exports = function(results, data) {\n    return JSON.stringify({\n        results,\n        metadata: data\n    });\n};\n#/lib/rules/no-restricted-imports.js//**\n * @fileoverview Restrict usage of specified node imports.\n * @author Guy Ellis\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\nconst ignore = require(\"ignore\");\n\nconst arrayOfStringsOrObjects = {\n    type: \"array\",\n    items: {\n        anyOf: [\n            { type: \"string\" },\n            {\n                type: \"object\",\n                properties: {\n                    name: { type: \"string\" },\n                    message: {\n                        type: \"string\",\n                        minLength: 1\n                    },\n                    importNames: {\n                        type: \"array\",\n                        items: {\n                            type: \"string\"\n                        }\n                    }\n                },\n                additionalProperties: false,\n                required: [\"name\"]\n            }\n        ]\n    },\n    uniqueItems: true\n};\n\nconst arrayOfStringsOrObjectPatterns = {\n    anyOf: [\n        {\n            type: \"array\",\n            items: {\n                type: \"string\"\n            },\n            uniqueItems: true\n        },\n        {\n            type: \"array\",\n            items: {\n                type: \"object\",\n                properties: {\n                    group: {\n                        type: \"array\",\n                        items: {\n                            type: \"string\"\n                        },\n                        minItems: 1,\n                        uniqueItems: true\n                    },\n                    message: {\n                        type: \"string\",\n                        minLength: 1\n                    },\n                    caseSensitive: {\n                        type: \"boolean\"\n                    }\n                },\n                additionalProperties: false,\n                required: [\"group\"]\n            },\n            uniqueItems: true\n        }\n    ]\n};\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow specified modules when loaded by `import`\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-restricted-imports\"\n        },\n\n        messages: {\n            path: \"'{{importSource}}' import is restricted from being used.\",\n            // eslint-disable-next-line eslint-plugin/report-message-format -- Custom message might not end in a period\n            pathWithCustomMessage: \"'{{importSource}}' import is restricted from being used. {{customMessage}}\",\n\n            patterns: \"'{{importSource}}' import is restricted from being used by a pattern.\",\n            // eslint-disable-next-line eslint-plugin/report-message-format -- Custom message might not end in a period\n            patternWithCustomMessage: \"'{{importSource}}' import is restricted from being used by a pattern. {{customMessage}}\",\n\n            everything: \"* import is invalid because '{{importNames}}' from '{{importSource}}' is restricted.\",\n            // eslint-disable-next-line eslint-plugin/report-message-format -- Custom message might not end in a period\n            everythingWithCustomMessage: \"* import is invalid because '{{importNames}}' from '{{importSource}}' is restricted. {{customMessage}}\",\n\n            importName: \"'{{importName}}' import from '{{importSource}}' is restricted.\",\n            // eslint-disable-next-line eslint-plugin/report-message-format -- Custom message might not end in a period\n            importNameWithCustomMessage: \"'{{importName}}' import from '{{importSource}}' is restricted. {{customMessage}}\"\n        },\n\n        schema: {\n            anyOf: [\n                arrayOfStringsOrObjects,\n                {\n                    type: \"array\",\n                    items: [{\n                        type: \"object\",\n                        properties: {\n                            paths: arrayOfStringsOrObjects,\n                            patterns: arrayOfStringsOrObjectPatterns\n                        },\n                        additionalProperties: false\n                    }],\n                    additionalItems: false\n                }\n            ]\n        }\n    },\n\n    create(context) {\n        const sourceCode = context.getSourceCode();\n        const options = Array.isArray(context.options) ? context.options : [];\n        const isPathAndPatternsObject =\n            typeof options[0] === \"object\" &&\n            (Object.prototype.hasOwnProperty.call(options[0], \"paths\") || Object.prototype.hasOwnProperty.call(options[0], \"patterns\"));\n\n        const restrictedPaths = (isPathAndPatternsObject ? options[0].paths : context.options) || [];\n        const restrictedPathMessages = restrictedPaths.reduce((memo, importSource) => {\n            if (typeof importSource === \"string\") {\n                memo[importSource] = { message: null };\n            } else {\n                memo[importSource.name] = {\n                    message: importSource.message,\n                    importNames: importSource.importNames\n                };\n            }\n            return memo;\n        }, {});\n\n        // Handle patterns too, either as strings or groups\n        let restrictedPatterns = (isPathAndPatternsObject ? options[0].patterns : []) || [];\n\n        // standardize to array of objects if we have an array of strings\n        if (restrictedPatterns.length > 0 && typeof restrictedPatterns[0] === \"string\") {\n            restrictedPatterns = [{ group: restrictedPatterns }];\n        }\n\n        // relative paths are supported for this rule\n        const restrictedPatternGroups = restrictedPatterns.map(({ group, message, caseSensitive }) => ({\n            matcher: ignore({ allowRelativePaths: true, ignorecase: !caseSensitive }).add(group),\n            customMessage: message\n        }));\n\n        // if no imports are restricted we don't need to check\n        if (Object.keys(restrictedPaths).length === 0 && restrictedPatternGroups.length === 0) {\n            return {};\n        }\n\n        /**\n         * Report a restricted path.\n         * @param {string} importSource path of the import\n         * @param {Map<string,Object[]>} importNames Map of import names that are being imported\n         * @param {node} node representing the restricted path reference\n         * @returns {void}\n         * @private\n         */\n        function checkRestrictedPathAndReport(importSource, importNames, node) {\n            if (!Object.prototype.hasOwnProperty.call(restrictedPathMessages, importSource)) {\n                return;\n            }\n\n            const customMessage = restrictedPathMessages[importSource].message;\n            const restrictedImportNames = restrictedPathMessages[importSource].importNames;\n\n            if (restrictedImportNames) {\n                if (importNames.has(\"*\")) {\n                    const specifierData = importNames.get(\"*\")[0];\n\n                    context.report({\n                        node,\n                        messageId: customMessage ? \"everythingWithCustomMessage\" : \"everything\",\n                        loc: specifierData.loc,\n                        data: {\n                            importSource,\n                            importNames: restrictedImportNames,\n                            customMessage\n                        }\n                    });\n                }\n\n                restrictedImportNames.forEach(importName => {\n                    if (importNames.has(importName)) {\n                        const specifiers = importNames.get(importName);\n\n                        specifiers.forEach(specifier => {\n                            context.report({\n                                node,\n                                messageId: customMessage ? \"importNameWithCustomMessage\" : \"importName\",\n                                loc: specifier.loc,\n                                data: {\n                                    importSource,\n                                    customMessage,\n                                    importName\n                                }\n                            });\n                        });\n                    }\n                });\n            } else {\n                context.report({\n                    node,\n                    messageId: customMessage ? \"pathWithCustomMessage\" : \"path\",\n                    data: {\n                        importSource,\n                        customMessage\n                    }\n                });\n            }\n        }\n\n        /**\n         * Report a restricted path specifically for patterns.\n         * @param {node} node representing the restricted path reference\n         * @param {Object} group contains a Ignore instance for paths, and the customMessage to show if it fails\n         * @returns {void}\n         * @private\n         */\n        function reportPathForPatterns(node, group) {\n            const importSource = node.source.value.trim();\n\n            context.report({\n                node,\n                messageId: group.customMessage ? \"patternWithCustomMessage\" : \"patterns\",\n                data: {\n                    importSource,\n                    customMessage: group.customMessage\n                }\n            });\n        }\n\n        /**\n         * Check if the given importSource is restricted by a pattern.\n         * @param {string} importSource path of the import\n         * @param {Object} group contains a Ignore instance for paths, and the customMessage to show if it fails\n         * @returns {boolean} whether the variable is a restricted pattern or not\n         * @private\n         */\n        function isRestrictedPattern(importSource, group) {\n            return group.matcher.ignores(importSource);\n        }\n\n        /**\n         * Checks a node to see if any problems should be reported.\n         * @param {ASTNode} node The node to check.\n         * @returns {void}\n         * @private\n         */\n        function checkNode(node) {\n            const importSource = node.source.value.trim();\n            const importNames = new Map();\n\n            if (node.type === \"ExportAllDeclaration\") {\n                const starToken = sourceCode.getFirstToken(node, 1);\n\n                importNames.set(\"*\", [{ loc: starToken.loc }]);\n            } else if (node.specifiers) {\n                for (const specifier of node.specifiers) {\n                    let name;\n                    const specifierData = { loc: specifier.loc };\n\n                    if (specifier.type === \"ImportDefaultSpecifier\") {\n                        name = \"default\";\n                    } else if (specifier.type === \"ImportNamespaceSpecifier\") {\n                        name = \"*\";\n                    } else if (specifier.imported) {\n                        name = astUtils.getModuleExportName(specifier.imported);\n                    } else if (specifier.local) {\n                        name = astUtils.getModuleExportName(specifier.local);\n                    }\n\n                    if (typeof name === \"string\") {\n                        if (importNames.has(name)) {\n                            importNames.get(name).push(specifierData);\n                        } else {\n                            importNames.set(name, [specifierData]);\n                        }\n                    }\n                }\n            }\n\n            checkRestrictedPathAndReport(importSource, importNames, node);\n            restrictedPatternGroups.forEach(group => {\n                if (isRestrictedPattern(importSource, group)) {\n                    reportPathForPatterns(node, group);\n                }\n            });\n        }\n\n        return {\n            ImportDeclaration: checkNode,\n            ExportNamedDeclaration(node) {\n                if (node.source) {\n                    checkNode(node);\n                }\n            },\n            ExportAllDeclaration: checkNode\n        };\n    }\n};\n/lib/linter/linter.js\u0000\u0001,Y/**\n * @fileoverview Main Linter Class\n * @author Gyandeep Singh\n * @author aladdin-add\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst\n    path = require(\"path\"),\n    eslintScope = require(\"eslint-scope\"),\n    evk = require(\"eslint-visitor-keys\"),\n    espree = require(\"espree\"),\n    merge = require(\"lodash.merge\"),\n    pkg = require(\"../../package.json\"),\n    astUtils = require(\"../shared/ast-utils\"),\n    {\n        Legacy: {\n            ConfigOps,\n            ConfigValidator,\n            environments: BuiltInEnvironments\n        }\n    } = require(\"@eslint/eslintrc/universal\"),\n    Traverser = require(\"../shared/traverser\"),\n    { SourceCode } = require(\"../source-code\"),\n    CodePathAnalyzer = require(\"./code-path-analysis/code-path-analyzer\"),\n    applyDisableDirectives = require(\"./apply-disable-directives\"),\n    ConfigCommentParser = require(\"./config-comment-parser\"),\n    NodeEventGenerator = require(\"./node-event-generator\"),\n    createReportTranslator = require(\"./report-translator\"),\n    Rules = require(\"./rules\"),\n    createEmitter = require(\"./safe-emitter\"),\n    SourceCodeFixer = require(\"./source-code-fixer\"),\n    timing = require(\"./timing\"),\n    ruleReplacements = require(\"../../conf/replacements.json\");\nconst { getRuleFromConfig } = require(\"../config/flat-config-helpers\");\nconst { FlatConfigArray } = require(\"../config/flat-config-array\");\n\nconst debug = require(\"debug\")(\"eslint:linter\");\nconst MAX_AUTOFIX_PASSES = 10;\nconst DEFAULT_PARSER_NAME = \"espree\";\nconst DEFAULT_ECMA_VERSION = 5;\nconst commentParser = new ConfigCommentParser();\nconst DEFAULT_ERROR_LOC = { start: { line: 1, column: 0 }, end: { line: 1, column: 1 } };\nconst parserSymbol = Symbol.for(\"eslint.RuleTester.parser\");\nconst globals = require(\"../../conf/globals\");\n\n//------------------------------------------------------------------------------\n// Typedefs\n//------------------------------------------------------------------------------\n\n/** @typedef {InstanceType<import(\"../cli-engine/config-array\").ConfigArray>} ConfigArray */\n/** @typedef {InstanceType<import(\"../cli-engine/config-array\").ExtractedConfig>} ExtractedConfig */\n/** @typedef {import(\"../shared/types\").ConfigData} ConfigData */\n/** @typedef {import(\"../shared/types\").Environment} Environment */\n/** @typedef {import(\"../shared/types\").GlobalConf} GlobalConf */\n/** @typedef {import(\"../shared/types\").LintMessage} LintMessage */\n/** @typedef {import(\"../shared/types\").SuppressedLintMessage} SuppressedLintMessage */\n/** @typedef {import(\"../shared/types\").ParserOptions} ParserOptions */\n/** @typedef {import(\"../shared/types\").LanguageOptions} LanguageOptions */\n/** @typedef {import(\"../shared/types\").Processor} Processor */\n/** @typedef {import(\"../shared/types\").Rule} Rule */\n\n/* eslint-disable jsdoc/valid-types -- https://github.com/jsdoc-type-pratt-parser/jsdoc-type-pratt-parser/issues/4#issuecomment-778805577 */\n/**\n * @template T\n * @typedef {{ [P in keyof T]-?: T[P] }} Required\n */\n/* eslint-enable jsdoc/valid-types -- https://github.com/jsdoc-type-pratt-parser/jsdoc-type-pratt-parser/issues/4#issuecomment-778805577 */\n\n/**\n * @typedef {Object} DisableDirective\n * @property {(\"disable\"|\"enable\"|\"disable-line\"|\"disable-next-line\")} type Type of directive\n * @property {number} line The line number\n * @property {number} column The column number\n * @property {(string|null)} ruleId The rule ID\n * @property {string} justification The justification of directive\n */\n\n/**\n * The private data for `Linter` instance.\n * @typedef {Object} LinterInternalSlots\n * @property {ConfigArray|null} lastConfigArray The `ConfigArray` instance that the last `verify()` call used.\n * @property {SourceCode|null} lastSourceCode The `SourceCode` instance that the last `verify()` call used.\n * @property {SuppressedLintMessage[]} lastSuppressedMessages The `SuppressedLintMessage[]` instance that the last `verify()` call produced.\n * @property {Map<string, Parser>} parserMap The loaded parsers.\n * @property {Rules} ruleMap The loaded rules.\n */\n\n/**\n * @typedef {Object} VerifyOptions\n * @property {boolean} [allowInlineConfig] Allow/disallow inline comments' ability\n *      to change config once it is set. Defaults to true if not supplied.\n *      Useful if you want to validate JS without comments overriding rules.\n * @property {boolean} [disableFixes] if `true` then the linter doesn't make `fix`\n *      properties into the lint result.\n * @property {string} [filename] the filename of the source code.\n * @property {boolean | \"off\" | \"warn\" | \"error\"} [reportUnusedDisableDirectives] Adds reported errors for\n *      unused `eslint-disable` directives.\n */\n\n/**\n * @typedef {Object} ProcessorOptions\n * @property {(filename:string, text:string) => boolean} [filterCodeBlock] the\n *      predicate function that selects adopt code blocks.\n * @property {Processor.postprocess} [postprocess] postprocessor for report\n *      messages. If provided, this should accept an array of the message lists\n *      for each code block returned from the preprocessor, apply a mapping to\n *      the messages as appropriate, and return a one-dimensional array of\n *      messages.\n * @property {Processor.preprocess} [preprocess] preprocessor for source text.\n *      If provided, this should accept a string of source text, and return an\n *      array of code blocks to lint.\n */\n\n/**\n * @typedef {Object} FixOptions\n * @property {boolean | ((message: LintMessage) => boolean)} [fix] Determines\n *      whether fixes should be applied.\n */\n\n/**\n * @typedef {Object} InternalOptions\n * @property {string | null} warnInlineConfig The config name what `noInlineConfig` setting came from. If `noInlineConfig` setting didn't exist, this is null. If this is a config name, then the linter warns directive comments.\n * @property {\"off\" | \"warn\" | \"error\"} reportUnusedDisableDirectives (boolean values were normalized)\n */\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\n/**\n * Determines if a given object is Espree.\n * @param {Object} parser The parser to check.\n * @returns {boolean} True if the parser is Espree or false if not.\n */\nfunction isEspree(parser) {\n    return !!(parser === espree || parser[parserSymbol] === espree);\n}\n\n/**\n * Retrieves globals for the given ecmaVersion.\n * @param {number} ecmaVersion The version to retrieve globals for.\n * @returns {Object} The globals for the given ecmaVersion.\n */\nfunction getGlobalsForEcmaVersion(ecmaVersion) {\n\n    switch (ecmaVersion) {\n        case 3:\n            return globals.es3;\n\n        case 5:\n            return globals.es5;\n\n        default:\n            if (ecmaVersion < 2015) {\n                return globals[`es${ecmaVersion + 2009}`];\n            }\n\n            return globals[`es${ecmaVersion}`];\n    }\n}\n\n/**\n * Ensures that variables representing built-in properties of the Global Object,\n * and any globals declared by special block comments, are present in the global\n * scope.\n * @param {Scope} globalScope The global scope.\n * @param {Object} configGlobals The globals declared in configuration\n * @param {{exportedVariables: Object, enabledGlobals: Object}} commentDirectives Directives from comment configuration\n * @returns {void}\n */\nfunction addDeclaredGlobals(globalScope, configGlobals, { exportedVariables, enabledGlobals }) {\n\n    // Define configured global variables.\n    for (const id of new Set([...Object.keys(configGlobals), ...Object.keys(enabledGlobals)])) {\n\n        /*\n         * `ConfigOps.normalizeConfigGlobal` will throw an error if a configured global value is invalid. However, these errors would\n         * typically be caught when validating a config anyway (validity for inline global comments is checked separately).\n         */\n        const configValue = configGlobals[id] === void 0 ? void 0 : ConfigOps.normalizeConfigGlobal(configGlobals[id]);\n        const commentValue = enabledGlobals[id] && enabledGlobals[id].value;\n        const value = commentValue || configValue;\n        const sourceComments = enabledGlobals[id] && enabledGlobals[id].comments;\n\n        if (value === \"off\") {\n            continue;\n        }\n\n        let variable = globalScope.set.get(id);\n\n        if (!variable) {\n            variable = new eslintScope.Variable(id, globalScope);\n\n            globalScope.variables.push(variable);\n            globalScope.set.set(id, variable);\n        }\n\n        variable.eslintImplicitGlobalSetting = configValue;\n        variable.eslintExplicitGlobal = sourceComments !== void 0;\n        variable.eslintExplicitGlobalComments = sourceComments;\n        variable.writeable = (value === \"writable\");\n    }\n\n    // mark all exported variables as such\n    Object.keys(exportedVariables).forEach(name => {\n        const variable = globalScope.set.get(name);\n\n        if (variable) {\n            variable.eslintUsed = true;\n        }\n    });\n\n    /*\n     * \"through\" contains all references which definitions cannot be found.\n     * Since we augment the global scope using configuration, we need to update\n     * references and remove the ones that were added by configuration.\n     */\n    globalScope.through = globalScope.through.filter(reference => {\n        const name = reference.identifier.name;\n        const variable = globalScope.set.get(name);\n\n        if (variable) {\n\n            /*\n             * Links the variable and the reference.\n             * And this reference is removed from `Scope#through`.\n             */\n            reference.resolved = variable;\n            variable.references.push(reference);\n\n            return false;\n        }\n\n        return true;\n    });\n}\n\n/**\n * creates a missing-rule message.\n * @param {string} ruleId the ruleId to create\n * @returns {string} created error message\n * @private\n */\nfunction createMissingRuleMessage(ruleId) {\n    return Object.prototype.hasOwnProperty.call(ruleReplacements.rules, ruleId)\n        ? `Rule '${ruleId}' was removed and replaced by: ${ruleReplacements.rules[ruleId].join(\", \")}`\n        : `Definition for rule '${ruleId}' was not found.`;\n}\n\n/**\n * creates a linting problem\n * @param {Object} options to create linting error\n * @param {string} [options.ruleId] the ruleId to report\n * @param {Object} [options.loc] the loc to report\n * @param {string} [options.message] the error message to report\n * @param {string} [options.severity] the error message to report\n * @returns {LintMessage} created problem, returns a missing-rule problem if only provided ruleId.\n * @private\n */\nfunction createLintingProblem(options) {\n    const {\n        ruleId = null,\n        loc = DEFAULT_ERROR_LOC,\n        message = createMissingRuleMessage(options.ruleId),\n        severity = 2\n    } = options;\n\n    return {\n        ruleId,\n        message,\n        line: loc.start.line,\n        column: loc.start.column + 1,\n        endLine: loc.end.line,\n        endColumn: loc.end.column + 1,\n        severity,\n        nodeType: null\n    };\n}\n\n/**\n * Creates a collection of disable directives from a comment\n * @param {Object} options to create disable directives\n * @param {(\"disable\"|\"enable\"|\"disable-line\"|\"disable-next-line\")} options.type The type of directive comment\n * @param {token} options.commentToken The Comment token\n * @param {string} options.value The value after the directive in the comment\n * comment specified no specific rules, so it applies to all rules (e.g. `eslint-disable`)\n * @param {string} options.justification The justification of the directive\n * @param {function(string): {create: Function}} options.ruleMapper A map from rule IDs to defined rules\n * @returns {Object} Directives and problems from the comment\n */\nfunction createDisableDirectives(options) {\n    const { commentToken, type, value, justification, ruleMapper } = options;\n    const ruleIds = Object.keys(commentParser.parseListConfig(value));\n    const directiveRules = ruleIds.length ? ruleIds : [null];\n    const result = {\n        directives: [], // valid disable directives\n        directiveProblems: [] // problems in directives\n    };\n\n    const parentComment = { commentToken, ruleIds };\n\n    for (const ruleId of directiveRules) {\n\n        // push to directives, if the rule is defined(including null, e.g. /*eslint enable*/)\n        if (ruleId === null || !!ruleMapper(ruleId)) {\n            if (type === \"disable-next-line\") {\n                result.directives.push({\n                    parentComment,\n                    type,\n                    line: commentToken.loc.end.line,\n                    column: commentToken.loc.end.column + 1,\n                    ruleId,\n                    justification\n                });\n            } else {\n                result.directives.push({\n                    parentComment,\n                    type,\n                    line: commentToken.loc.start.line,\n                    column: commentToken.loc.start.column + 1,\n                    ruleId,\n                    justification\n                });\n            }\n        } else {\n            result.directiveProblems.push(createLintingProblem({ ruleId, loc: commentToken.loc }));\n        }\n    }\n    return result;\n}\n\n/**\n * Extract the directive and the justification from a given directive comment and trim them.\n * @param {string} value The comment text to extract.\n * @returns {{directivePart: string, justificationPart: string}} The extracted directive and justification.\n */\nfunction extractDirectiveComment(value) {\n    const match = /\\s-{2,}\\s/u.exec(value);\n\n    if (!match) {\n        return { directivePart: value.trim(), justificationPart: \"\" };\n    }\n\n    const directive = value.slice(0, match.index).trim();\n    const justification = value.slice(match.index + match[0].length).trim();\n\n    return { directivePart: directive, justificationPart: justification };\n}\n\n/**\n * Parses comments in file to extract file-specific config of rules, globals\n * and environments and merges them with global config; also code blocks\n * where reporting is disabled or enabled and merges them with reporting config.\n * @param {ASTNode} ast The top node of the AST.\n * @param {function(string): {create: Function}} ruleMapper A map from rule IDs to defined rules\n * @param {string|null} warnInlineConfig If a string then it should warn directive comments as disabled. The string value is the config name what the setting came from.\n * @returns {{configuredRules: Object, enabledGlobals: {value:string,comment:Token}[], exportedVariables: Object, problems: Problem[], disableDirectives: DisableDirective[]}}\n * A collection of the directive comments that were found, along with any problems that occurred when parsing\n */\nfunction getDirectiveComments(ast, ruleMapper, warnInlineConfig) {\n    const configuredRules = {};\n    const enabledGlobals = Object.create(null);\n    const exportedVariables = {};\n    const problems = [];\n    const disableDirectives = [];\n    const validator = new ConfigValidator({\n        builtInRules: Rules\n    });\n\n    ast.comments.filter(token => token.type !== \"Shebang\").forEach(comment => {\n        const { directivePart, justificationPart } = extractDirectiveComment(comment.value);\n\n        const match = /^(eslint(?:-env|-enable|-disable(?:(?:-next)?-line)?)?|exported|globals?)(?:\\s|$)/u.exec(directivePart);\n\n        if (!match) {\n            return;\n        }\n        const directiveText = match[1];\n        const lineCommentSupported = /^eslint-disable-(next-)?line$/u.test(directiveText);\n\n        if (comment.type === \"Line\" && !lineCommentSupported) {\n            return;\n        }\n\n        if (warnInlineConfig) {\n            const kind = comment.type === \"Block\" ? `/*${directiveText}*/` : `//${directiveText}`;\n\n            problems.push(createLintingProblem({\n                ruleId: null,\n                message: `'${kind}' has no effect because you have 'noInlineConfig' setting in ${warnInlineConfig}.`,\n                loc: comment.loc,\n                severity: 1\n            }));\n            return;\n        }\n\n        if (directiveText === \"eslint-disable-line\" && comment.loc.start.line !== comment.loc.end.line) {\n            const message = `${directiveText} comment should not span multiple lines.`;\n\n            problems.push(createLintingProblem({\n                ruleId: null,\n                message,\n                loc: comment.loc\n            }));\n            return;\n        }\n\n        const directiveValue = directivePart.slice(match.index + directiveText.length);\n\n        switch (directiveText) {\n            case \"eslint-disable\":\n            case \"eslint-enable\":\n            case \"eslint-disable-next-line\":\n            case \"eslint-disable-line\": {\n                const directiveType = directiveText.slice(\"eslint-\".length);\n                const options = { commentToken: comment, type: directiveType, value: directiveValue, justification: justificationPart, ruleMapper };\n                const { directives, directiveProblems } = createDisableDirectives(options);\n\n                disableDirectives.push(...directives);\n                problems.push(...directiveProblems);\n                break;\n            }\n\n            case \"exported\":\n                Object.assign(exportedVariables, commentParser.parseStringConfig(directiveValue, comment));\n                break;\n\n            case \"globals\":\n            case \"global\":\n                for (const [id, { value }] of Object.entries(commentParser.parseStringConfig(directiveValue, comment))) {\n                    let normalizedValue;\n\n                    try {\n                        normalizedValue = ConfigOps.normalizeConfigGlobal(value);\n                    } catch (err) {\n                        problems.push(createLintingProblem({\n                            ruleId: null,\n                            loc: comment.loc,\n                            message: err.message\n                        }));\n                        continue;\n                    }\n\n                    if (enabledGlobals[id]) {\n                        enabledGlobals[id].comments.push(comment);\n                        enabledGlobals[id].value = normalizedValue;\n                    } else {\n                        enabledGlobals[id] = {\n                            comments: [comment],\n                            value: normalizedValue\n                        };\n                    }\n                }\n                break;\n\n            case \"eslint\": {\n                const parseResult = commentParser.parseJsonConfig(directiveValue, comment.loc);\n\n                if (parseResult.success) {\n                    Object.keys(parseResult.config).forEach(name => {\n                        const rule = ruleMapper(name);\n                        const ruleValue = parseResult.config[name];\n\n                        if (!rule) {\n                            problems.push(createLintingProblem({ ruleId: name, loc: comment.loc }));\n                            return;\n                        }\n\n                        try {\n                            validator.validateRuleOptions(rule, name, ruleValue);\n                        } catch (err) {\n                            problems.push(createLintingProblem({\n                                ruleId: name,\n                                message: err.message,\n                                loc: comment.loc\n                            }));\n\n                            // do not apply the config, if found invalid options.\n                            return;\n                        }\n\n                        configuredRules[name] = ruleValue;\n                    });\n                } else {\n                    problems.push(parseResult.error);\n                }\n\n                break;\n            }\n\n            // no default\n        }\n    });\n\n    return {\n        configuredRules,\n        enabledGlobals,\n        exportedVariables,\n        problems,\n        disableDirectives\n    };\n}\n\n/**\n * Normalize ECMAScript version from the initial config\n * @param {Parser} parser The parser which uses this options.\n * @param {number} ecmaVersion ECMAScript version from the initial config\n * @returns {number} normalized ECMAScript version\n */\nfunction normalizeEcmaVersion(parser, ecmaVersion) {\n\n    if (isEspree(parser)) {\n        if (ecmaVersion === \"latest\") {\n            return espree.latestEcmaVersion;\n        }\n    }\n\n    /*\n     * Calculate ECMAScript edition number from official year version starting with\n     * ES2015, which corresponds with ES6 (or a difference of 2009).\n     */\n    return ecmaVersion >= 2015 ? ecmaVersion - 2009 : ecmaVersion;\n}\n\n/**\n * Normalize ECMAScript version from the initial config into languageOptions (year)\n * format.\n * @param {any} [ecmaVersion] ECMAScript version from the initial config\n * @returns {number} normalized ECMAScript version\n */\nfunction normalizeEcmaVersionForLanguageOptions(ecmaVersion) {\n\n    switch (ecmaVersion) {\n        case 3:\n            return 3;\n\n        // void 0 = no ecmaVersion specified so use the default\n        case 5:\n        case void 0:\n            return 5;\n\n        default:\n            if (typeof ecmaVersion === \"number\") {\n                return ecmaVersion >= 2015 ? ecmaVersion : ecmaVersion + 2009;\n            }\n    }\n\n    /*\n     * We default to the latest supported ecmaVersion for everything else.\n     * Remember, this is for languageOptions.ecmaVersion, which sets the version\n     * that is used for a number of processes inside of ESLint. It's normally\n     * safe to assume people want the latest unless otherwise specified.\n     */\n    return espree.latestEcmaVersion + 2009;\n}\n\nconst eslintEnvPattern = /\\/\\*\\s*eslint-env\\s(.+?)(?:\\*\\/|$)/gsu;\n\n/**\n * Checks whether or not there is a comment which has \"eslint-env *\" in a given text.\n * @param {string} text A source code text to check.\n * @returns {Object|null} A result of parseListConfig() with \"eslint-env *\" comment.\n */\nfunction findEslintEnv(text) {\n    let match, retv;\n\n    eslintEnvPattern.lastIndex = 0;\n\n    while ((match = eslintEnvPattern.exec(text)) !== null) {\n        if (match[0].endsWith(\"*/\")) {\n            retv = Object.assign(\n                retv || {},\n                commentParser.parseListConfig(extractDirectiveComment(match[1]).directivePart)\n            );\n        }\n    }\n\n    return retv;\n}\n\n/**\n * Convert \"/path/to/<text>\" to \"<text>\".\n * `CLIEngine#executeOnText()` method gives \"/path/to/<text>\" if the filename\n * was omitted because `configArray.extractConfig()` requires an absolute path.\n * But the linter should pass `<text>` to `RuleContext#getFilename()` in that\n * case.\n * Also, code blocks can have their virtual filename. If the parent filename was\n * `<text>`, the virtual filename is `<text>/0_foo.js` or something like (i.e.,\n * it's not an absolute path).\n * @param {string} filename The filename to normalize.\n * @returns {string} The normalized filename.\n */\nfunction normalizeFilename(filename) {\n    const parts = filename.split(path.sep);\n    const index = parts.lastIndexOf(\"<text>\");\n\n    return index === -1 ? filename : parts.slice(index).join(path.sep);\n}\n\n/**\n * Normalizes the possible options for `linter.verify` and `linter.verifyAndFix` to a\n * consistent shape.\n * @param {VerifyOptions} providedOptions Options\n * @param {ConfigData} config Config.\n * @returns {Required<VerifyOptions> & InternalOptions} Normalized options\n */\nfunction normalizeVerifyOptions(providedOptions, config) {\n\n    const linterOptions = config.linterOptions || config;\n\n    // .noInlineConfig for eslintrc, .linterOptions.noInlineConfig for flat\n    const disableInlineConfig = linterOptions.noInlineConfig === true;\n    const ignoreInlineConfig = providedOptions.allowInlineConfig === false;\n    const configNameOfNoInlineConfig = config.configNameOfNoInlineConfig\n        ? ` (${config.configNameOfNoInlineConfig})`\n        : \"\";\n\n    let reportUnusedDisableDirectives = providedOptions.reportUnusedDisableDirectives;\n\n    if (typeof reportUnusedDisableDirectives === \"boolean\") {\n        reportUnusedDisableDirectives = reportUnusedDisableDirectives ? \"error\" : \"off\";\n    }\n    if (typeof reportUnusedDisableDirectives !== \"string\") {\n        reportUnusedDisableDirectives =\n            linterOptions.reportUnusedDisableDirectives\n                ? \"warn\" : \"off\";\n    }\n\n    return {\n        filename: normalizeFilename(providedOptions.filename || \"<input>\"),\n        allowInlineConfig: !ignoreInlineConfig,\n        warnInlineConfig: disableInlineConfig && !ignoreInlineConfig\n            ? `your config${configNameOfNoInlineConfig}`\n            : null,\n        reportUnusedDisableDirectives,\n        disableFixes: Boolean(providedOptions.disableFixes)\n    };\n}\n\n/**\n * Combines the provided parserOptions with the options from environments\n * @param {Parser} parser The parser which uses this options.\n * @param {ParserOptions} providedOptions The provided 'parserOptions' key in a config\n * @param {Environment[]} enabledEnvironments The environments enabled in configuration and with inline comments\n * @returns {ParserOptions} Resulting parser options after merge\n */\nfunction resolveParserOptions(parser, providedOptions, enabledEnvironments) {\n\n    const parserOptionsFromEnv = enabledEnvironments\n        .filter(env => env.parserOptions)\n        .reduce((parserOptions, env) => merge(parserOptions, env.parserOptions), {});\n    const mergedParserOptions = merge(parserOptionsFromEnv, providedOptions || {});\n    const isModule = mergedParserOptions.sourceType === \"module\";\n\n    if (isModule) {\n\n        /*\n         * can't have global return inside of modules\n         * TODO: espree validate parserOptions.globalReturn when sourceType is setting to module.(@aladdin-add)\n         */\n        mergedParserOptions.ecmaFeatures = Object.assign({}, mergedParserOptions.ecmaFeatures, { globalReturn: false });\n    }\n\n    mergedParserOptions.ecmaVersion = normalizeEcmaVersion(parser, mergedParserOptions.ecmaVersion);\n\n    return mergedParserOptions;\n}\n\n/**\n * Converts parserOptions to languageOptions for backwards compatibility with eslintrc.\n * @param {ConfigData} config Config object.\n * @param {Object} config.globals Global variable definitions.\n * @param {Parser} config.parser The parser to use.\n * @param {ParserOptions} config.parserOptions The parserOptions to use.\n * @returns {LanguageOptions} The languageOptions equivalent.\n */\nfunction createLanguageOptions({ globals: configuredGlobals, parser, parserOptions }) {\n\n    const {\n        ecmaVersion,\n        sourceType\n    } = parserOptions;\n\n    return {\n        globals: configuredGlobals,\n        ecmaVersion: normalizeEcmaVersionForLanguageOptions(ecmaVersion),\n        sourceType,\n        parser,\n        parserOptions\n    };\n}\n\n/**\n * Combines the provided globals object with the globals from environments\n * @param {Record<string, GlobalConf>} providedGlobals The 'globals' key in a config\n * @param {Environment[]} enabledEnvironments The environments enabled in configuration and with inline comments\n * @returns {Record<string, GlobalConf>} The resolved globals object\n */\nfunction resolveGlobals(providedGlobals, enabledEnvironments) {\n    return Object.assign(\n        {},\n        ...enabledEnvironments.filter(env => env.globals).map(env => env.globals),\n        providedGlobals\n    );\n}\n\n/**\n * Strips Unicode BOM from a given text.\n * @param {string} text A text to strip.\n * @returns {string} The stripped text.\n */\nfunction stripUnicodeBOM(text) {\n\n    /*\n     * Check Unicode BOM.\n     * In JavaScript, string data is stored as UTF-16, so BOM is 0xFEFF.\n     * http://www.ecma-international.org/ecma-262/6.0/#sec-unicode-format-control-characters\n     */\n    if (text.charCodeAt(0) === 0xFEFF) {\n        return text.slice(1);\n    }\n    return text;\n}\n\n/**\n * Get the options for a rule (not including severity), if any\n * @param {Array|number} ruleConfig rule configuration\n * @returns {Array} of rule options, empty Array if none\n */\nfunction getRuleOptions(ruleConfig) {\n    if (Array.isArray(ruleConfig)) {\n        return ruleConfig.slice(1);\n    }\n    return [];\n\n}\n\n/**\n * Analyze scope of the given AST.\n * @param {ASTNode} ast The `Program` node to analyze.\n * @param {LanguageOptions} languageOptions The parser options.\n * @param {Record<string, string[]>} visitorKeys The visitor keys.\n * @returns {ScopeManager} The analysis result.\n */\nfunction analyzeScope(ast, languageOptions, visitorKeys) {\n    const parserOptions = languageOptions.parserOptions;\n    const ecmaFeatures = parserOptions.ecmaFeatures || {};\n    const ecmaVersion = languageOptions.ecmaVersion || DEFAULT_ECMA_VERSION;\n\n    return eslintScope.analyze(ast, {\n        ignoreEval: true,\n        nodejsScope: ecmaFeatures.globalReturn,\n        impliedStrict: ecmaFeatures.impliedStrict,\n        ecmaVersion: typeof ecmaVersion === \"number\" ? ecmaVersion : 6,\n        sourceType: languageOptions.sourceType || \"script\",\n        childVisitorKeys: visitorKeys || evk.KEYS,\n        fallback: Traverser.getKeys\n    });\n}\n\n/**\n * Parses text into an AST. Moved out here because the try-catch prevents\n * optimization of functions, so it's best to keep the try-catch as isolated\n * as possible\n * @param {string} text The text to parse.\n * @param {LanguageOptions} languageOptions Options to pass to the parser\n * @param {string} filePath The path to the file being parsed.\n * @returns {{success: false, error: Problem}|{success: true, sourceCode: SourceCode}}\n * An object containing the AST and parser services if parsing was successful, or the error if parsing failed\n * @private\n */\nfunction parse(text, languageOptions, filePath) {\n    const textToParse = stripUnicodeBOM(text).replace(astUtils.shebangPattern, (match, captured) => `//${captured}`);\n    const { ecmaVersion, sourceType, parser } = languageOptions;\n    const parserOptions = Object.assign(\n        { ecmaVersion, sourceType },\n        languageOptions.parserOptions,\n        {\n            loc: true,\n            range: true,\n            raw: true,\n            tokens: true,\n            comment: true,\n            eslintVisitorKeys: true,\n            eslintScopeManager: true,\n            filePath\n        }\n    );\n\n    /*\n     * Check for parsing errors first. If there's a parsing error, nothing\n     * else can happen. However, a parsing error does not throw an error\n     * from this method - it's just considered a fatal error message, a\n     * problem that ESLint identified just like any other.\n     */\n    try {\n        const parseResult = (typeof parser.parseForESLint === \"function\")\n            ? parser.parseForESLint(textToParse, parserOptions)\n            : { ast: parser.parse(textToParse, parserOptions) };\n        const ast = parseResult.ast;\n        const parserServices = parseResult.services || {};\n        const visitorKeys = parseResult.visitorKeys || evk.KEYS;\n        const scopeManager = parseResult.scopeManager || analyzeScope(ast, languageOptions, visitorKeys);\n\n        return {\n            success: true,\n\n            /*\n             * Save all values that `parseForESLint()` returned.\n             * If a `SourceCode` object is given as the first parameter instead of source code text,\n             * linter skips the parsing process and reuses the source code object.\n             * In that case, linter needs all the values that `parseForESLint()` returned.\n             */\n            sourceCode: new SourceCode({\n                text,\n                ast,\n                parserServices,\n                scopeManager,\n                visitorKeys\n            })\n        };\n    } catch (ex) {\n\n        // If the message includes a leading line number, strip it:\n        const message = `Parsing error: ${ex.message.replace(/^line \\d+:/iu, \"\").trim()}`;\n\n        debug(\"%s\\n%s\", message, ex.stack);\n\n        return {\n            success: false,\n            error: {\n                ruleId: null,\n                fatal: true,\n                severity: 2,\n                message,\n                line: ex.lineNumber,\n                column: ex.column\n            }\n        };\n    }\n}\n\n/**\n * Gets the scope for the current node\n * @param {ScopeManager} scopeManager The scope manager for this AST\n * @param {ASTNode} currentNode The node to get the scope of\n * @returns {eslint-scope.Scope} The scope information for this node\n */\nfunction getScope(scopeManager, currentNode) {\n\n    // On Program node, get the outermost scope to avoid return Node.js special function scope or ES modules scope.\n    const inner = currentNode.type !== \"Program\";\n\n    for (let node = currentNode; node; node = node.parent) {\n        const scope = scopeManager.acquire(node, inner);\n\n        if (scope) {\n            if (scope.type === \"function-expression-name\") {\n                return scope.childScopes[0];\n            }\n            return scope;\n        }\n    }\n\n    return scopeManager.scopes[0];\n}\n\n/**\n * Marks a variable as used in the current scope\n * @param {ScopeManager} scopeManager The scope manager for this AST. The scope may be mutated by this function.\n * @param {ASTNode} currentNode The node currently being traversed\n * @param {LanguageOptions} languageOptions The options used to parse this text\n * @param {string} name The name of the variable that should be marked as used.\n * @returns {boolean} True if the variable was found and marked as used, false if not.\n */\nfunction markVariableAsUsed(scopeManager, currentNode, languageOptions, name) {\n    const parserOptions = languageOptions.parserOptions;\n    const sourceType = languageOptions.sourceType;\n    const hasGlobalReturn =\n        (parserOptions.ecmaFeatures && parserOptions.ecmaFeatures.globalReturn) ||\n        sourceType === \"commonjs\";\n    const specialScope = hasGlobalReturn || sourceType === \"module\";\n    const currentScope = getScope(scopeManager, currentNode);\n\n    // Special Node.js scope means we need to start one level deeper\n    const initialScope = currentScope.type === \"global\" && specialScope ? currentScope.childScopes[0] : currentScope;\n\n    for (let scope = initialScope; scope; scope = scope.upper) {\n        const variable = scope.variables.find(scopeVar => scopeVar.name === name);\n\n        if (variable) {\n            variable.eslintUsed = true;\n            return true;\n        }\n    }\n\n    return false;\n}\n\n/**\n * Runs a rule, and gets its listeners\n * @param {Rule} rule A normalized rule with a `create` method\n * @param {Context} ruleContext The context that should be passed to the rule\n * @throws {any} Any error during the rule's `create`\n * @returns {Object} A map of selector listeners provided by the rule\n */\nfunction createRuleListeners(rule, ruleContext) {\n    try {\n        return rule.create(ruleContext);\n    } catch (ex) {\n        ex.message = `Error while loading rule '${ruleContext.id}': ${ex.message}`;\n        throw ex;\n    }\n}\n\n/**\n * Gets all the ancestors of a given node\n * @param {ASTNode} node The node\n * @returns {ASTNode[]} All the ancestor nodes in the AST, not including the provided node, starting\n * from the root node and going inwards to the parent node.\n */\nfunction getAncestors(node) {\n    const ancestorsStartingAtParent = [];\n\n    for (let ancestor = node.parent; ancestor; ancestor = ancestor.parent) {\n        ancestorsStartingAtParent.push(ancestor);\n    }\n\n    return ancestorsStartingAtParent.reverse();\n}\n\n// methods that exist on SourceCode object\nconst DEPRECATED_SOURCECODE_PASSTHROUGHS = {\n    getSource: \"getText\",\n    getSourceLines: \"getLines\",\n    getAllComments: \"getAllComments\",\n    getNodeByRangeIndex: \"getNodeByRangeIndex\",\n    getComments: \"getComments\",\n    getCommentsBefore: \"getCommentsBefore\",\n    getCommentsAfter: \"getCommentsAfter\",\n    getCommentsInside: \"getCommentsInside\",\n    getJSDocComment: \"getJSDocComment\",\n    getFirstToken: \"getFirstToken\",\n    getFirstTokens: \"getFirstTokens\",\n    getLastToken: \"getLastToken\",\n    getLastTokens: \"getLastTokens\",\n    getTokenAfter: \"getTokenAfter\",\n    getTokenBefore: \"getTokenBefore\",\n    getTokenByRangeStart: \"getTokenByRangeStart\",\n    getTokens: \"getTokens\",\n    getTokensAfter: \"getTokensAfter\",\n    getTokensBefore: \"getTokensBefore\",\n    getTokensBetween: \"getTokensBetween\"\n};\n\nconst BASE_TRAVERSAL_CONTEXT = Object.freeze(\n    Object.keys(DEPRECATED_SOURCECODE_PASSTHROUGHS).reduce(\n        (contextInfo, methodName) =>\n            Object.assign(contextInfo, {\n                [methodName](...args) {\n                    return this.getSourceCode()[DEPRECATED_SOURCECODE_PASSTHROUGHS[methodName]](...args);\n                }\n            }),\n        {}\n    )\n);\n\n/**\n * Runs the given rules on the given SourceCode object\n * @param {SourceCode} sourceCode A SourceCode object for the given text\n * @param {Object} configuredRules The rules configuration\n * @param {function(string): Rule} ruleMapper A mapper function from rule names to rules\n * @param {string | undefined} parserName The name of the parser in the config\n * @param {LanguageOptions} languageOptions The options for parsing the code.\n * @param {Object} settings The settings that were enabled in the config\n * @param {string} filename The reported filename of the code\n * @param {boolean} disableFixes If true, it doesn't make `fix` properties.\n * @param {string | undefined} cwd cwd of the cli\n * @param {string} physicalFilename The full path of the file on disk without any code block information\n * @returns {Problem[]} An array of reported problems\n */\nfunction runRules(sourceCode, configuredRules, ruleMapper, parserName, languageOptions, settings, filename, disableFixes, cwd, physicalFilename) {\n    const emitter = createEmitter();\n    const nodeQueue = [];\n    let currentNode = sourceCode.ast;\n\n    Traverser.traverse(sourceCode.ast, {\n        enter(node, parent) {\n            node.parent = parent;\n            nodeQueue.push({ isEntering: true, node });\n        },\n        leave(node) {\n            nodeQueue.push({ isEntering: false, node });\n        },\n        visitorKeys: sourceCode.visitorKeys\n    });\n\n    /*\n     * Create a frozen object with the ruleContext properties and methods that are shared by all rules.\n     * All rule contexts will inherit from this object. This avoids the performance penalty of copying all the\n     * properties once for each rule.\n     */\n    const sharedTraversalContext = Object.freeze(\n        Object.assign(\n            Object.create(BASE_TRAVERSAL_CONTEXT),\n            {\n                getAncestors: () => getAncestors(currentNode),\n                getDeclaredVariables: sourceCode.scopeManager.getDeclaredVariables.bind(sourceCode.scopeManager),\n                getCwd: () => cwd,\n                getFilename: () => filename,\n                getPhysicalFilename: () => physicalFilename || filename,\n                getScope: () => getScope(sourceCode.scopeManager, currentNode),\n                getSourceCode: () => sourceCode,\n                markVariableAsUsed: name => markVariableAsUsed(sourceCode.scopeManager, currentNode, languageOptions, name),\n                parserOptions: {\n                    ...languageOptions.parserOptions\n                },\n                parserPath: parserName,\n                languageOptions,\n                parserServices: sourceCode.parserServices,\n                settings\n            }\n        )\n    );\n\n    const lintingProblems = [];\n\n    Object.keys(configuredRules).forEach(ruleId => {\n        const severity = ConfigOps.getRuleSeverity(configuredRules[ruleId]);\n\n        // not load disabled rules\n        if (severity === 0) {\n            return;\n        }\n\n        const rule = ruleMapper(ruleId);\n\n        if (!rule) {\n            lintingProblems.push(createLintingProblem({ ruleId }));\n            return;\n        }\n\n        const messageIds = rule.meta && rule.meta.messages;\n        let reportTranslator = null;\n        const ruleContext = Object.freeze(\n            Object.assign(\n                Object.create(sharedTraversalContext),\n                {\n                    id: ruleId,\n                    options: getRuleOptions(configuredRules[ruleId]),\n                    report(...args) {\n\n                        /*\n                         * Create a report translator lazily.\n                         * In a vast majority of cases, any given rule reports zero errors on a given\n                         * piece of code. Creating a translator lazily avoids the performance cost of\n                         * creating a new translator function for each rule that usually doesn't get\n                         * called.\n                         *\n                         * Using lazy report translators improves end-to-end performance by about 3%\n                         * with Node 8.4.0.\n                         */\n                        if (reportTranslator === null) {\n                            reportTranslator = createReportTranslator({\n                                ruleId,\n                                severity,\n                                sourceCode,\n                                messageIds,\n                                disableFixes\n                            });\n                        }\n                        const problem = reportTranslator(...args);\n\n                        if (problem.fix && !(rule.meta && rule.meta.fixable)) {\n                            throw new Error(\"Fixable rules must set the `meta.fixable` property to \\\"code\\\" or \\\"whitespace\\\".\");\n                        }\n                        if (problem.suggestions && !(rule.meta && rule.meta.hasSuggestions === true)) {\n                            if (rule.meta && rule.meta.docs && typeof rule.meta.docs.suggestion !== \"undefined\") {\n\n                                // Encourage migration from the former property name.\n                                throw new Error(\"Rules with suggestions must set the `meta.hasSuggestions` property to `true`. `meta.docs.suggestion` is ignored by ESLint.\");\n                            }\n                            throw new Error(\"Rules with suggestions must set the `meta.hasSuggestions` property to `true`.\");\n                        }\n                        lintingProblems.push(problem);\n                    }\n                }\n            )\n        );\n\n        const ruleListeners = createRuleListeners(rule, ruleContext);\n\n        /**\n         * Include `ruleId` in error logs\n         * @param {Function} ruleListener A rule method that listens for a node.\n         * @returns {Function} ruleListener wrapped in error handler\n         */\n        function addRuleErrorHandler(ruleListener) {\n            return function ruleErrorHandler(...listenerArgs) {\n                try {\n                    return ruleListener(...listenerArgs);\n                } catch (e) {\n                    e.ruleId = ruleId;\n                    throw e;\n                }\n            };\n        }\n\n        // add all the selectors from the rule as listeners\n        Object.keys(ruleListeners).forEach(selector => {\n            const ruleListener = timing.enabled\n                ? timing.time(ruleId, ruleListeners[selector])\n                : ruleListeners[selector];\n\n            emitter.on(\n                selector,\n                addRuleErrorHandler(ruleListener)\n            );\n        });\n    });\n\n    // only run code path analyzer if the top level node is \"Program\", skip otherwise\n    const eventGenerator = nodeQueue[0].node.type === \"Program\"\n        ? new CodePathAnalyzer(new NodeEventGenerator(emitter, { visitorKeys: sourceCode.visitorKeys, fallback: Traverser.getKeys }))\n        : new NodeEventGenerator(emitter, { visitorKeys: sourceCode.visitorKeys, fallback: Traverser.getKeys });\n\n    nodeQueue.forEach(traversalInfo => {\n        currentNode = traversalInfo.node;\n\n        try {\n            if (traversalInfo.isEntering) {\n                eventGenerator.enterNode(currentNode);\n            } else {\n                eventGenerator.leaveNode(currentNode);\n            }\n        } catch (err) {\n            err.currentNode = currentNode;\n            throw err;\n        }\n    });\n\n    return lintingProblems;\n}\n\n/**\n * Ensure the source code to be a string.\n * @param {string|SourceCode} textOrSourceCode The text or source code object.\n * @returns {string} The source code text.\n */\nfunction ensureText(textOrSourceCode) {\n    if (typeof textOrSourceCode === \"object\") {\n        const { hasBOM, text } = textOrSourceCode;\n        const bom = hasBOM ? \"\\uFEFF\" : \"\";\n\n        return bom + text;\n    }\n\n    return String(textOrSourceCode);\n}\n\n/**\n * Get an environment.\n * @param {LinterInternalSlots} slots The internal slots of Linter.\n * @param {string} envId The environment ID to get.\n * @returns {Environment|null} The environment.\n */\nfunction getEnv(slots, envId) {\n    return (\n        (slots.lastConfigArray && slots.lastConfigArray.pluginEnvironments.get(envId)) ||\n        BuiltInEnvironments.get(envId) ||\n        null\n    );\n}\n\n/**\n * Get a rule.\n * @param {LinterInternalSlots} slots The internal slots of Linter.\n * @param {string} ruleId The rule ID to get.\n * @returns {Rule|null} The rule.\n */\nfunction getRule(slots, ruleId) {\n    return (\n        (slots.lastConfigArray && slots.lastConfigArray.pluginRules.get(ruleId)) ||\n        slots.ruleMap.get(ruleId)\n    );\n}\n\n/**\n * Normalize the value of the cwd\n * @param {string | undefined} cwd raw value of the cwd, path to a directory that should be considered as the current working directory, can be undefined.\n * @returns {string | undefined} normalized cwd\n */\nfunction normalizeCwd(cwd) {\n    if (cwd) {\n        return cwd;\n    }\n    if (typeof process === \"object\") {\n        return process.cwd();\n    }\n\n    // It's more explicit to assign the undefined\n    // eslint-disable-next-line no-undefined -- Consistently returning a value\n    return undefined;\n}\n\n/**\n * The map to store private data.\n * @type {WeakMap<Linter, LinterInternalSlots>}\n */\nconst internalSlotsMap = new WeakMap();\n\n/**\n * Throws an error when the given linter is in flat config mode.\n * @param {Linter} linter The linter to check.\n * @returns {void}\n * @throws {Error} If the linter is in flat config mode.\n */\nfunction assertEslintrcConfig(linter) {\n    const { configType } = internalSlotsMap.get(linter);\n\n    if (configType === \"flat\") {\n        throw new Error(\"This method cannot be used with flat config. Add your entries directly into the config array.\");\n    }\n}\n\n\n//------------------------------------------------------------------------------\n// Public Interface\n//------------------------------------------------------------------------------\n\n/**\n * Object that is responsible for verifying JavaScript text\n * @name Linter\n */\nclass Linter {\n\n    /**\n     * Initialize the Linter.\n     * @param {Object} [config] the config object\n     * @param {string} [config.cwd] path to a directory that should be considered as the current working directory, can be undefined.\n     * @param {\"flat\"|\"eslintrc\"} [config.configType=\"eslintrc\"] the type of config used.\n     */\n    constructor({ cwd, configType } = {}) {\n        internalSlotsMap.set(this, {\n            cwd: normalizeCwd(cwd),\n            lastConfigArray: null,\n            lastSourceCode: null,\n            lastSuppressedMessages: [],\n            configType, // TODO: Remove after flat config conversion\n            parserMap: new Map([[\"espree\", espree]]),\n            ruleMap: new Rules()\n        });\n\n        this.version = pkg.version;\n    }\n\n    /**\n     * Getter for package version.\n     * @static\n     * @returns {string} The version from package.json.\n     */\n    static get version() {\n        return pkg.version;\n    }\n\n    /**\n     * Same as linter.verify, except without support for processors.\n     * @param {string|SourceCode} textOrSourceCode The text to parse or a SourceCode object.\n     * @param {ConfigData} providedConfig An ESLintConfig instance to configure everything.\n     * @param {VerifyOptions} [providedOptions] The optional filename of the file being checked.\n     * @throws {Error} If during rule execution.\n     * @returns {(LintMessage|SuppressedLintMessage)[]} The results as an array of messages or an empty array if no messages.\n     */\n    _verifyWithoutProcessors(textOrSourceCode, providedConfig, providedOptions) {\n        const slots = internalSlotsMap.get(this);\n        const config = providedConfig || {};\n        const options = normalizeVerifyOptions(providedOptions, config);\n        let text;\n\n        // evaluate arguments\n        if (typeof textOrSourceCode === \"string\") {\n            slots.lastSourceCode = null;\n            text = textOrSourceCode;\n        } else {\n            slots.lastSourceCode = textOrSourceCode;\n            text = textOrSourceCode.text;\n        }\n\n        // Resolve parser.\n        let parserName = DEFAULT_PARSER_NAME;\n        let parser = espree;\n\n        if (typeof config.parser === \"object\" && config.parser !== null) {\n            parserName = config.parser.filePath;\n            parser = config.parser.definition;\n        } else if (typeof config.parser === \"string\") {\n            if (!slots.parserMap.has(config.parser)) {\n                return [{\n                    ruleId: null,\n                    fatal: true,\n                    severity: 2,\n                    message: `Configured parser '${config.parser}' was not found.`,\n                    line: 0,\n                    column: 0\n                }];\n            }\n            parserName = config.parser;\n            parser = slots.parserMap.get(config.parser);\n        }\n\n        // search and apply \"eslint-env *\".\n        const envInFile = options.allowInlineConfig && !options.warnInlineConfig\n            ? findEslintEnv(text)\n            : {};\n        const resolvedEnvConfig = Object.assign({ builtin: true }, config.env, envInFile);\n        const enabledEnvs = Object.keys(resolvedEnvConfig)\n            .filter(envName => resolvedEnvConfig[envName])\n            .map(envName => getEnv(slots, envName))\n            .filter(env => env);\n\n        const parserOptions = resolveParserOptions(parser, config.parserOptions || {}, enabledEnvs);\n        const configuredGlobals = resolveGlobals(config.globals || {}, enabledEnvs);\n        const settings = config.settings || {};\n        const languageOptions = createLanguageOptions({\n            globals: config.globals,\n            parser,\n            parserOptions\n        });\n\n        if (!slots.lastSourceCode) {\n            const parseResult = parse(\n                text,\n                languageOptions,\n                options.filename\n            );\n\n            if (!parseResult.success) {\n                return [parseResult.error];\n            }\n\n            slots.lastSourceCode = parseResult.sourceCode;\n        } else {\n\n            /*\n             * If the given source code object as the first argument does not have scopeManager, analyze the scope.\n             * This is for backward compatibility (SourceCode is frozen so it cannot rebind).\n             */\n            if (!slots.lastSourceCode.scopeManager) {\n                slots.lastSourceCode = new SourceCode({\n                    text: slots.lastSourceCode.text,\n                    ast: slots.lastSourceCode.ast,\n                    parserServices: slots.lastSourceCode.parserServices,\n                    visitorKeys: slots.lastSourceCode.visitorKeys,\n                    scopeManager: analyzeScope(slots.lastSourceCode.ast, languageOptions)\n                });\n            }\n        }\n\n        const sourceCode = slots.lastSourceCode;\n        const commentDirectives = options.allowInlineConfig\n            ? getDirectiveComments(sourceCode.ast, ruleId => getRule(slots, ruleId), options.warnInlineConfig)\n            : { configuredRules: {}, enabledGlobals: {}, exportedVariables: {}, problems: [], disableDirectives: [] };\n\n        // augment global scope with declared global variables\n        addDeclaredGlobals(\n            sourceCode.scopeManager.scopes[0],\n            configuredGlobals,\n            { exportedVariables: commentDirectives.exportedVariables, enabledGlobals: commentDirectives.enabledGlobals }\n        );\n\n        const configuredRules = Object.assign({}, config.rules, commentDirectives.configuredRules);\n\n        let lintingProblems;\n\n        try {\n            lintingProblems = runRules(\n                sourceCode,\n                configuredRules,\n                ruleId => getRule(slots, ruleId),\n                parserName,\n                languageOptions,\n                settings,\n                options.filename,\n                options.disableFixes,\n                slots.cwd,\n                providedOptions.physicalFilename\n            );\n        } catch (err) {\n            err.message += `\\nOccurred while linting ${options.filename}`;\n            debug(\"An error occurred while traversing\");\n            debug(\"Filename:\", options.filename);\n            if (err.currentNode) {\n                const { line } = err.currentNode.loc.start;\n\n                debug(\"Line:\", line);\n                err.message += `:${line}`;\n            }\n            debug(\"Parser Options:\", parserOptions);\n            debug(\"Parser Path:\", parserName);\n            debug(\"Settings:\", settings);\n\n            if (err.ruleId) {\n                err.message += `\\nRule: \"${err.ruleId}\"`;\n            }\n\n            throw err;\n        }\n\n        return applyDisableDirectives({\n            directives: commentDirectives.disableDirectives,\n            disableFixes: options.disableFixes,\n            problems: lintingProblems\n                .concat(commentDirectives.problems)\n                .sort((problemA, problemB) => problemA.line - problemB.line || problemA.column - problemB.column),\n            reportUnusedDisableDirectives: options.reportUnusedDisableDirectives\n        });\n    }\n\n    /**\n     * Verifies the text against the rules specified by the second argument.\n     * @param {string|SourceCode} textOrSourceCode The text to parse or a SourceCode object.\n     * @param {ConfigData|ConfigArray} config An ESLintConfig instance to configure everything.\n     * @param {(string|(VerifyOptions&ProcessorOptions))} [filenameOrOptions] The optional filename of the file being checked.\n     *      If this is not set, the filename will default to '<input>' in the rule context. If\n     *      an object, then it has \"filename\", \"allowInlineConfig\", and some properties.\n     * @returns {LintMessage[]} The results as an array of messages or an empty array if no messages.\n     */\n    verify(textOrSourceCode, config, filenameOrOptions) {\n        debug(\"Verify\");\n\n        const { configType } = internalSlotsMap.get(this);\n\n        const options = typeof filenameOrOptions === \"string\"\n            ? { filename: filenameOrOptions }\n            : filenameOrOptions || {};\n\n        if (config) {\n            if (configType === \"flat\") {\n\n                /*\n                 * Because of how Webpack packages up the files, we can't\n                 * compare directly to `FlatConfigArray` using `instanceof`\n                 * because it's not the same `FlatConfigArray` as in the tests.\n                 * So, we work around it by assuming an array is, in fact, a\n                 * `FlatConfigArray` if it has a `getConfig()` method.\n                 */\n                let configArray = config;\n\n                if (!Array.isArray(config) || typeof config.getConfig !== \"function\") {\n                    configArray = new FlatConfigArray(config);\n                    configArray.normalizeSync();\n                }\n\n                return this._distinguishSuppressedMessages(this._verifyWithFlatConfigArray(textOrSourceCode, configArray, options, true));\n            }\n\n            if (typeof config.extractConfig === \"function\") {\n                return this._distinguishSuppressedMessages(this._verifyWithConfigArray(textOrSourceCode, config, options));\n            }\n        }\n\n        /*\n         * If we get to here, it means `config` is just an object rather\n         * than a config array so we can go right into linting.\n         */\n\n        /*\n         * `Linter` doesn't support `overrides` property in configuration.\n         * So we cannot apply multiple processors.\n         */\n        if (options.preprocess || options.postprocess) {\n            return this._distinguishSuppressedMessages(this._verifyWithProcessor(textOrSourceCode, config, options));\n        }\n        return this._distinguishSuppressedMessages(this._verifyWithoutProcessors(textOrSourceCode, config, options));\n    }\n\n    /**\n     * Verify with a processor.\n     * @param {string|SourceCode} textOrSourceCode The source code.\n     * @param {FlatConfig} config The config array.\n     * @param {VerifyOptions&ProcessorOptions} options The options.\n     * @param {FlatConfigArray} [configForRecursive] The `ConfigArray` object to apply multiple processors recursively.\n     * @returns {(LintMessage|SuppressedLintMessage)[]} The found problems.\n     */\n    _verifyWithFlatConfigArrayAndProcessor(textOrSourceCode, config, options, configForRecursive) {\n        const filename = options.filename || \"<input>\";\n        const filenameToExpose = normalizeFilename(filename);\n        const physicalFilename = options.physicalFilename || filenameToExpose;\n        const text = ensureText(textOrSourceCode);\n        const preprocess = options.preprocess || (rawText => [rawText]);\n        const postprocess = options.postprocess || (messagesList => messagesList.flat());\n        const filterCodeBlock =\n            options.filterCodeBlock ||\n            (blockFilename => blockFilename.endsWith(\".js\"));\n        const originalExtname = path.extname(filename);\n        const messageLists = preprocess(text, filenameToExpose).map((block, i) => {\n            debug(\"A code block was found: %o\", block.filename || \"(unnamed)\");\n\n            // Keep the legacy behavior.\n            if (typeof block === \"string\") {\n                return this._verifyWithFlatConfigArrayAndWithoutProcessors(block, config, options);\n            }\n\n            const blockText = block.text;\n            const blockName = path.join(filename, `${i}_${block.filename}`);\n\n            // Skip this block if filtered.\n            if (!filterCodeBlock(blockName, blockText)) {\n                debug(\"This code block was skipped.\");\n                return [];\n            }\n\n            // Resolve configuration again if the file content or extension was changed.\n            if (configForRecursive && (text !== blockText || path.extname(blockName) !== originalExtname)) {\n                debug(\"Resolving configuration again because the file content or extension was changed.\");\n                return this._verifyWithFlatConfigArray(\n                    blockText,\n                    configForRecursive,\n                    { ...options, filename: blockName, physicalFilename }\n                );\n            }\n\n            // Does lint.\n            return this._verifyWithFlatConfigArrayAndWithoutProcessors(\n                blockText,\n                config,\n                { ...options, filename: blockName, physicalFilename }\n            );\n        });\n\n        return postprocess(messageLists, filenameToExpose);\n    }\n\n    /**\n     * Same as linter.verify, except without support for processors.\n     * @param {string|SourceCode} textOrSourceCode The text to parse or a SourceCode object.\n     * @param {FlatConfig} providedConfig An ESLintConfig instance to configure everything.\n     * @param {VerifyOptions} [providedOptions] The optional filename of the file being checked.\n     * @throws {Error} If during rule execution.\n     * @returns {(LintMessage|SuppressedLintMessage)[]} The results as an array of messages or an empty array if no messages.\n     */\n    _verifyWithFlatConfigArrayAndWithoutProcessors(textOrSourceCode, providedConfig, providedOptions) {\n        const slots = internalSlotsMap.get(this);\n        const config = providedConfig || {};\n        const options = normalizeVerifyOptions(providedOptions, config);\n        let text;\n\n        // evaluate arguments\n        if (typeof textOrSourceCode === \"string\") {\n            slots.lastSourceCode = null;\n            text = textOrSourceCode;\n        } else {\n            slots.lastSourceCode = textOrSourceCode;\n            text = textOrSourceCode.text;\n        }\n\n        const languageOptions = config.languageOptions;\n\n        languageOptions.ecmaVersion = normalizeEcmaVersionForLanguageOptions(\n            languageOptions.ecmaVersion\n        );\n\n        // add configured globals and language globals\n        const configuredGlobals = {\n            ...(getGlobalsForEcmaVersion(languageOptions.ecmaVersion)),\n            ...(languageOptions.sourceType === \"commonjs\" ? globals.commonjs : void 0),\n            ...languageOptions.globals\n        };\n\n        // Espree expects this information to be passed in\n        if (isEspree(languageOptions.parser)) {\n            const parserOptions = languageOptions.parserOptions;\n\n            if (languageOptions.sourceType) {\n\n                parserOptions.sourceType = languageOptions.sourceType;\n\n                if (\n                    parserOptions.sourceType === \"module\" &&\n                    parserOptions.ecmaFeatures &&\n                    parserOptions.ecmaFeatures.globalReturn\n                ) {\n                    parserOptions.ecmaFeatures.globalReturn = false;\n                }\n            }\n        }\n\n        const settings = config.settings || {};\n\n        if (!slots.lastSourceCode) {\n            const parseResult = parse(\n                text,\n                languageOptions,\n                options.filename\n            );\n\n            if (!parseResult.success) {\n                return [parseResult.error];\n            }\n\n            slots.lastSourceCode = parseResult.sourceCode;\n        } else {\n\n            /*\n             * If the given source code object as the first argument does not have scopeManager, analyze the scope.\n             * This is for backward compatibility (SourceCode is frozen so it cannot rebind).\n             */\n            if (!slots.lastSourceCode.scopeManager) {\n                slots.lastSourceCode = new SourceCode({\n                    text: slots.lastSourceCode.text,\n                    ast: slots.lastSourceCode.ast,\n                    parserServices: slots.lastSourceCode.parserServices,\n                    visitorKeys: slots.lastSourceCode.visitorKeys,\n                    scopeManager: analyzeScope(slots.lastSourceCode.ast, languageOptions)\n                });\n            }\n        }\n\n        const sourceCode = slots.lastSourceCode;\n        const commentDirectives = options.allowInlineConfig\n            ? getDirectiveComments(\n                sourceCode.ast,\n                ruleId => getRuleFromConfig(ruleId, config),\n                options.warnInlineConfig\n            )\n            : { configuredRules: {}, enabledGlobals: {}, exportedVariables: {}, problems: [], disableDirectives: [] };\n\n        // augment global scope with declared global variables\n        addDeclaredGlobals(\n            sourceCode.scopeManager.scopes[0],\n            configuredGlobals,\n            { exportedVariables: commentDirectives.exportedVariables, enabledGlobals: commentDirectives.enabledGlobals }\n        );\n\n        const configuredRules = Object.assign({}, config.rules, commentDirectives.configuredRules);\n\n        let lintingProblems;\n\n        try {\n            lintingProblems = runRules(\n                sourceCode,\n                configuredRules,\n                ruleId => getRuleFromConfig(ruleId, config),\n                void 0,\n                languageOptions,\n                settings,\n                options.filename,\n                options.disableFixes,\n                slots.cwd,\n                providedOptions.physicalFilename\n            );\n        } catch (err) {\n            err.message += `\\nOccurred while linting ${options.filename}`;\n            debug(\"An error occurred while traversing\");\n            debug(\"Filename:\", options.filename);\n            if (err.currentNode) {\n                const { line } = err.currentNode.loc.start;\n\n                debug(\"Line:\", line);\n                err.message += `:${line}`;\n            }\n            debug(\"Parser Options:\", languageOptions.parserOptions);\n\n            // debug(\"Parser Path:\", parserName);\n            debug(\"Settings:\", settings);\n\n            if (err.ruleId) {\n                err.message += `\\nRule: \"${err.ruleId}\"`;\n            }\n\n            throw err;\n        }\n\n        return applyDisableDirectives({\n            directives: commentDirectives.disableDirectives,\n            disableFixes: options.disableFixes,\n            problems: lintingProblems\n                .concat(commentDirectives.problems)\n                .sort((problemA, problemB) => problemA.line - problemB.line || problemA.column - problemB.column),\n            reportUnusedDisableDirectives: options.reportUnusedDisableDirectives\n        });\n    }\n\n    /**\n     * Verify a given code with `ConfigArray`.\n     * @param {string|SourceCode} textOrSourceCode The source code.\n     * @param {ConfigArray} configArray The config array.\n     * @param {VerifyOptions&ProcessorOptions} options The options.\n     * @returns {(LintMessage|SuppressedLintMessage)[]} The found problems.\n     */\n    _verifyWithConfigArray(textOrSourceCode, configArray, options) {\n        debug(\"With ConfigArray: %s\", options.filename);\n\n        // Store the config array in order to get plugin envs and rules later.\n        internalSlotsMap.get(this).lastConfigArray = configArray;\n\n        // Extract the final config for this file.\n        const config = configArray.extractConfig(options.filename);\n        const processor =\n            config.processor &&\n            configArray.pluginProcessors.get(config.processor);\n\n        // Verify.\n        if (processor) {\n            debug(\"Apply the processor: %o\", config.processor);\n            const { preprocess, postprocess, supportsAutofix } = processor;\n            const disableFixes = options.disableFixes || !supportsAutofix;\n\n            return this._verifyWithProcessor(\n                textOrSourceCode,\n                config,\n                { ...options, disableFixes, postprocess, preprocess },\n                configArray\n            );\n        }\n        return this._verifyWithoutProcessors(textOrSourceCode, config, options);\n    }\n\n    /**\n     * Verify a given code with a flat config.\n     * @param {string|SourceCode} textOrSourceCode The source code.\n     * @param {FlatConfigArray} configArray The config array.\n     * @param {VerifyOptions&ProcessorOptions} options The options.\n     * @param {boolean} [firstCall=false] Indicates if this is being called directly\n     *      from verify(). (TODO: Remove once eslintrc is removed.)\n     * @returns {(LintMessage|SuppressedLintMessage)[]} The found problems.\n     */\n    _verifyWithFlatConfigArray(textOrSourceCode, configArray, options, firstCall = false) {\n        debug(\"With flat config: %s\", options.filename);\n\n        // we need a filename to match configs against\n        const filename = options.filename || \"<input>\";\n\n        // Store the config array in order to get plugin envs and rules later.\n        internalSlotsMap.get(this).lastConfigArray = configArray;\n        const config = configArray.getConfig(filename);\n\n        // Verify.\n        if (config.processor) {\n            debug(\"Apply the processor: %o\", config.processor);\n            const { preprocess, postprocess, supportsAutofix } = config.processor;\n            const disableFixes = options.disableFixes || !supportsAutofix;\n\n            return this._verifyWithFlatConfigArrayAndProcessor(\n                textOrSourceCode,\n                config,\n                { ...options, filename, disableFixes, postprocess, preprocess },\n                configArray\n            );\n        }\n\n        // check for options-based processing\n        if (firstCall && (options.preprocess || options.postprocess)) {\n            return this._verifyWithFlatConfigArrayAndProcessor(textOrSourceCode, config, options);\n        }\n\n        return this._verifyWithFlatConfigArrayAndWithoutProcessors(textOrSourceCode, config, options);\n    }\n\n    /**\n     * Verify with a processor.\n     * @param {string|SourceCode} textOrSourceCode The source code.\n     * @param {ConfigData|ExtractedConfig} config The config array.\n     * @param {VerifyOptions&ProcessorOptions} options The options.\n     * @param {ConfigArray} [configForRecursive] The `ConfigArray` object to apply multiple processors recursively.\n     * @returns {(LintMessage|SuppressedLintMessage)[]} The found problems.\n     */\n    _verifyWithProcessor(textOrSourceCode, config, options, configForRecursive) {\n        const filename = options.filename || \"<input>\";\n        const filenameToExpose = normalizeFilename(filename);\n        const physicalFilename = options.physicalFilename || filenameToExpose;\n        const text = ensureText(textOrSourceCode);\n        const preprocess = options.preprocess || (rawText => [rawText]);\n\n        const postprocess = options.postprocess || (messagesList => messagesList.flat());\n        const filterCodeBlock =\n            options.filterCodeBlock ||\n            (blockFilename => blockFilename.endsWith(\".js\"));\n        const originalExtname = path.extname(filename);\n        const messageLists = preprocess(text, filenameToExpose).map((block, i) => {\n            debug(\"A code block was found: %o\", block.filename || \"(unnamed)\");\n\n            // Keep the legacy behavior.\n            if (typeof block === \"string\") {\n                return this._verifyWithoutProcessors(block, config, options);\n            }\n\n            const blockText = block.text;\n            const blockName = path.join(filename, `${i}_${block.filename}`);\n\n            // Skip this block if filtered.\n            if (!filterCodeBlock(blockName, blockText)) {\n                debug(\"This code block was skipped.\");\n                return [];\n            }\n\n            // Resolve configuration again if the file content or extension was changed.\n            if (configForRecursive && (text !== blockText || path.extname(blockName) !== originalExtname)) {\n                debug(\"Resolving configuration again because the file content or extension was changed.\");\n                return this._verifyWithConfigArray(\n                    blockText,\n                    configForRecursive,\n                    { ...options, filename: blockName, physicalFilename }\n                );\n            }\n\n            // Does lint.\n            return this._verifyWithoutProcessors(\n                blockText,\n                config,\n                { ...options, filename: blockName, physicalFilename }\n            );\n        });\n\n        return postprocess(messageLists, filenameToExpose);\n    }\n\n    /**\n     * Given a list of reported problems, distinguish problems between normal messages and suppressed messages.\n     * The normal messages will be returned and the suppressed messages will be stored as lastSuppressedMessages.\n     * @param {Problem[]} problems A list of reported problems.\n     * @returns {LintMessage[]} A list of LintMessage.\n     */\n    _distinguishSuppressedMessages(problems) {\n        const messages = [];\n        const suppressedMessages = [];\n        const slots = internalSlotsMap.get(this);\n\n        for (const problem of problems) {\n            if (problem.suppressions) {\n                suppressedMessages.push(problem);\n            } else {\n                messages.push(problem);\n            }\n        }\n\n        slots.lastSuppressedMessages = suppressedMessages;\n\n        return messages;\n    }\n\n    /**\n     * Gets the SourceCode object representing the parsed source.\n     * @returns {SourceCode} The SourceCode object.\n     */\n    getSourceCode() {\n        return internalSlotsMap.get(this).lastSourceCode;\n    }\n\n    /**\n     * Gets the list of SuppressedLintMessage produced in the last running.\n     * @returns {SuppressedLintMessage[]} The list of SuppressedLintMessage\n     */\n    getSuppressedMessages() {\n        return internalSlotsMap.get(this).lastSuppressedMessages;\n    }\n\n    /**\n     * Defines a new linting rule.\n     * @param {string} ruleId A unique rule identifier\n     * @param {Function | Rule} ruleModule Function from context to object mapping AST node types to event handlers\n     * @returns {void}\n     */\n    defineRule(ruleId, ruleModule) {\n        assertEslintrcConfig(this);\n        internalSlotsMap.get(this).ruleMap.define(ruleId, ruleModule);\n    }\n\n    /**\n     * Defines many new linting rules.\n     * @param {Record<string, Function | Rule>} rulesToDefine map from unique rule identifier to rule\n     * @returns {void}\n     */\n    defineRules(rulesToDefine) {\n        assertEslintrcConfig(this);\n        Object.getOwnPropertyNames(rulesToDefine).forEach(ruleId => {\n            this.defineRule(ruleId, rulesToDefine[ruleId]);\n        });\n    }\n\n    /**\n     * Gets an object with all loaded rules.\n     * @returns {Map<string, Rule>} All loaded rules\n     */\n    getRules() {\n        assertEslintrcConfig(this);\n        const { lastConfigArray, ruleMap } = internalSlotsMap.get(this);\n\n        return new Map(function *() {\n            yield* ruleMap;\n\n            if (lastConfigArray) {\n                yield* lastConfigArray.pluginRules;\n            }\n        }());\n    }\n\n    /**\n     * Define a new parser module\n     * @param {string} parserId Name of the parser\n     * @param {Parser} parserModule The parser object\n     * @returns {void}\n     */\n    defineParser(parserId, parserModule) {\n        assertEslintrcConfig(this);\n        internalSlotsMap.get(this).parserMap.set(parserId, parserModule);\n    }\n\n    /**\n     * Performs multiple autofix passes over the text until as many fixes as possible\n     * have been applied.\n     * @param {string} text The source text to apply fixes to.\n     * @param {ConfigData|ConfigArray|FlatConfigArray} config The ESLint config object to use.\n     * @param {VerifyOptions&ProcessorOptions&FixOptions} options The ESLint options object to use.\n     * @returns {{fixed:boolean,messages:LintMessage[],output:string}} The result of the fix operation as returned from the\n     *      SourceCodeFixer.\n     */\n    verifyAndFix(text, config, options) {\n        let messages = [],\n            fixedResult,\n            fixed = false,\n            passNumber = 0,\n            currentText = text;\n        const debugTextDescription = options && options.filename || `${text.slice(0, 10)}...`;\n        const shouldFix = options && typeof options.fix !== \"undefined\" ? options.fix : true;\n\n        /**\n         * This loop continues until one of the following is true:\n         *\n         * 1. No more fixes have been applied.\n         * 2. Ten passes have been made.\n         *\n         * That means anytime a fix is successfully applied, there will be another pass.\n         * Essentially, guaranteeing a minimum of two passes.\n         */\n        do {\n            passNumber++;\n\n            debug(`Linting code for ${debugTextDescription} (pass ${passNumber})`);\n            messages = this.verify(currentText, config, options);\n\n            debug(`Generating fixed text for ${debugTextDescription} (pass ${passNumber})`);\n            fixedResult = SourceCodeFixer.applyFixes(currentText, messages, shouldFix);\n\n            /*\n             * stop if there are any syntax errors.\n             * 'fixedResult.output' is a empty string.\n             */\n            if (messages.length === 1 && messages[0].fatal) {\n                break;\n            }\n\n            // keep track if any fixes were ever applied - important for return value\n            fixed = fixed || fixedResult.fixed;\n\n            // update to use the fixed output instead of the original text\n            currentText = fixedResult.output;\n\n        } while (\n            fixedResult.fixed &&\n            passNumber < MAX_AUTOFIX_PASSES\n        );\n\n        /*\n         * If the last result had fixes, we need to lint again to be sure we have\n         * the most up-to-date information.\n         */\n        if (fixedResult.fixed) {\n            fixedResult.messages = this.verify(currentText, config, options);\n        }\n\n        // ensure the last result properly reflects if fixes were done\n        fixedResult.fixed = fixed;\n        fixedResult.output = currentText;\n\n        return fixedResult;\n    }\n}\n\nmodule.exports = {\n    Linter,\n\n    /**\n     * Get the internal slots of a given Linter instance for tests.\n     * @param {Linter} instance The Linter instance to get.\n     * @returns {LinterInternalSlots} The internal slots.\n     */\n    getLinterInternalSlots(instance) {\n        return internalSlotsMap.get(instance);\n    }\n};\n/lib/rules/no-multi-str.js\u0007./**\n * @fileoverview Rule to flag when using multiline strings\n * @author Ilya Volodin\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow multiline strings\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-multi-str\"\n        },\n\n        schema: [],\n\n        messages: {\n            multilineString: \"Multiline support is limited to browsers supporting ES5 only.\"\n        }\n    },\n\n    create(context) {\n\n        /**\n         * Determines if a given node is part of JSX syntax.\n         * @param {ASTNode} node The node to check.\n         * @returns {boolean} True if the node is a JSX node, false if not.\n         * @private\n         */\n        function isJSXElement(node) {\n            return node.type.indexOf(\"JSX\") === 0;\n        }\n\n        //--------------------------------------------------------------------------\n        // Public API\n        //--------------------------------------------------------------------------\n\n        return {\n\n            Literal(node) {\n                if (astUtils.LINEBREAK_MATCHER.test(node.raw) && !isJSXElement(node.parent)) {\n                    context.report({\n                        node,\n                        messageId: \"multilineString\"\n                    });\n                }\n            }\n        };\n\n    }\n};\n/lib/eslint/index.jsY\"use strict\";\n\nconst { ESLint } = require(\"./eslint\");\n\nmodule.exports = {\n    ESLint\n};\n!/lib/rules/no-unreachable-loop.js\u0014\u001c/**\n * @fileoverview Rule to disallow loops with a body that allows only one iteration\n * @author Milos Djermanovic\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\nconst allLoopTypes = [\"WhileStatement\", \"DoWhileStatement\", \"ForStatement\", \"ForInStatement\", \"ForOfStatement\"];\n\n/**\n * Determines whether the given node is the first node in the code path to which a loop statement\n * 'loops' for the next iteration.\n * @param {ASTNode} node The node to check.\n * @returns {boolean} `true` if the node is a looping target.\n */\nfunction isLoopingTarget(node) {\n    const parent = node.parent;\n\n    if (parent) {\n        switch (parent.type) {\n            case \"WhileStatement\":\n                return node === parent.test;\n            case \"DoWhileStatement\":\n                return node === parent.body;\n            case \"ForStatement\":\n                return node === (parent.update || parent.test || parent.body);\n            case \"ForInStatement\":\n            case \"ForOfStatement\":\n                return node === parent.left;\n\n            // no default\n        }\n    }\n\n    return false;\n}\n\n/**\n * Creates an array with elements from the first given array that are not included in the second given array.\n * @param {Array} arrA The array to compare from.\n * @param {Array} arrB The array to compare against.\n * @returns {Array} a new array that represents `arrA \\ arrB`.\n */\nfunction getDifference(arrA, arrB) {\n    return arrA.filter(a => !arrB.includes(a));\n}\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"problem\",\n\n        docs: {\n            description: \"disallow loops with a body that allows only one iteration\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-unreachable-loop\"\n        },\n\n        schema: [{\n            type: \"object\",\n            properties: {\n                ignore: {\n                    type: \"array\",\n                    items: {\n                        enum: allLoopTypes\n                    },\n                    uniqueItems: true\n                }\n            },\n            additionalProperties: false\n        }],\n\n        messages: {\n            invalid: \"Invalid loop. Its body allows only one iteration.\"\n        }\n    },\n\n    create(context) {\n        const ignoredLoopTypes = context.options[0] && context.options[0].ignore || [],\n            loopTypesToCheck = getDifference(allLoopTypes, ignoredLoopTypes),\n            loopSelector = loopTypesToCheck.join(\",\"),\n            loopsByTargetSegments = new Map(),\n            loopsToReport = new Set();\n\n        let currentCodePath = null;\n\n        return {\n            onCodePathStart(codePath) {\n                currentCodePath = codePath;\n            },\n\n            onCodePathEnd() {\n                currentCodePath = currentCodePath.upper;\n            },\n\n            [loopSelector](node) {\n\n                /**\n                 * Ignore unreachable loop statements to avoid unnecessary complexity in the implementation, or false positives otherwise.\n                 * For unreachable segments, the code path analysis does not raise events required for this implementation.\n                 */\n                if (currentCodePath.currentSegments.some(segment => segment.reachable)) {\n                    loopsToReport.add(node);\n                }\n            },\n\n            onCodePathSegmentStart(segment, node) {\n                if (isLoopingTarget(node)) {\n                    const loop = node.parent;\n\n                    loopsByTargetSegments.set(segment, loop);\n                }\n            },\n\n            onCodePathSegmentLoop(_, toSegment, node) {\n                const loop = loopsByTargetSegments.get(toSegment);\n\n                /**\n                 * The second iteration is reachable, meaning that the loop is valid by the logic of this rule,\n                 * only if there is at least one loop event with the appropriate target (which has been already\n                 * determined in the `loopsByTargetSegments` map), raised from either:\n                 *\n                 * - the end of the loop's body (in which case `node === loop`)\n                 * - a `continue` statement\n                 *\n                 * This condition skips loop events raised from `ForInStatement > .right` and `ForOfStatement > .right` nodes.\n                 */\n                if (node === loop || node.type === \"ContinueStatement\") {\n\n                    // Removes loop if it exists in the set. Otherwise, `Set#delete` has no effect and doesn't throw.\n                    loopsToReport.delete(loop);\n                }\n            },\n\n            \"Program:exit\"() {\n                loopsToReport.forEach(\n                    node => context.report({ node, messageId: \"invalid\" })\n                );\n            }\n        };\n    }\n};\n/lib/rules/no-eval.js#/**\n * @fileoverview Rule to flag use of eval() statement\n * @author Nicholas C. Zakas\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\nconst candidatesOfGlobalObject = Object.freeze([\n    \"global\",\n    \"window\",\n    \"globalThis\"\n]);\n\n/**\n * Checks a given node is a MemberExpression node which has the specified name's\n * property.\n * @param {ASTNode} node A node to check.\n * @param {string} name A name to check.\n * @returns {boolean} `true` if the node is a MemberExpression node which has\n *      the specified name's property\n */\nfunction isMember(node, name) {\n    return astUtils.isSpecificMemberAccess(node, null, name);\n}\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow the use of `eval()`\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-eval\"\n        },\n\n        schema: [\n            {\n                type: \"object\",\n                properties: {\n                    allowIndirect: { type: \"boolean\", default: false }\n                },\n                additionalProperties: false\n            }\n        ],\n\n        messages: {\n            unexpected: \"eval can be harmful.\"\n        }\n    },\n\n    create(context) {\n        const allowIndirect = Boolean(\n            context.options[0] &&\n            context.options[0].allowIndirect\n        );\n        const sourceCode = context.getSourceCode();\n        let funcInfo = null;\n\n        /**\n         * Pushs a variable scope (Program or Function) information to the stack.\n         *\n         * This is used in order to check whether or not `this` binding is a\n         * reference to the global object.\n         * @param {ASTNode} node A node of the scope. This is one of Program,\n         *      FunctionDeclaration, FunctionExpression, and ArrowFunctionExpression.\n         * @returns {void}\n         */\n        function enterVarScope(node) {\n            const strict = context.getScope().isStrict;\n\n            funcInfo = {\n                upper: funcInfo,\n                node,\n                strict,\n                defaultThis: false,\n                initialized: strict\n            };\n        }\n\n        /**\n         * Pops a variable scope from the stack.\n         * @returns {void}\n         */\n        function exitVarScope() {\n            funcInfo = funcInfo.upper;\n        }\n\n        /**\n         * Reports a given node.\n         *\n         * `node` is `Identifier` or `MemberExpression`.\n         * The parent of `node` might be `CallExpression`.\n         *\n         * The location of the report is always `eval` `Identifier` (or possibly\n         * `Literal`). The type of the report is `CallExpression` if the parent is\n         * `CallExpression`. Otherwise, it's the given node type.\n         * @param {ASTNode} node A node to report.\n         * @returns {void}\n         */\n        function report(node) {\n            const parent = node.parent;\n            const locationNode = node.type === \"MemberExpression\"\n                ? node.property\n                : node;\n\n            const reportNode = parent.type === \"CallExpression\" && parent.callee === node\n                ? parent\n                : node;\n\n            context.report({\n                node: reportNode,\n                loc: locationNode.loc,\n                messageId: \"unexpected\"\n            });\n        }\n\n        /**\n         * Reports accesses of `eval` via the global object.\n         * @param {eslint-scope.Scope} globalScope The global scope.\n         * @returns {void}\n         */\n        function reportAccessingEvalViaGlobalObject(globalScope) {\n            for (let i = 0; i < candidatesOfGlobalObject.length; ++i) {\n                const name = candidatesOfGlobalObject[i];\n                const variable = astUtils.getVariableByName(globalScope, name);\n\n                if (!variable) {\n                    continue;\n                }\n\n                const references = variable.references;\n\n                for (let j = 0; j < references.length; ++j) {\n                    const identifier = references[j].identifier;\n                    let node = identifier.parent;\n\n                    // To detect code like `window.window.eval`.\n                    while (isMember(node, name)) {\n                        node = node.parent;\n                    }\n\n                    // Reports.\n                    if (isMember(node, \"eval\")) {\n                        report(node);\n                    }\n                }\n            }\n        }\n\n        /**\n         * Reports all accesses of `eval` (excludes direct calls to eval).\n         * @param {eslint-scope.Scope} globalScope The global scope.\n         * @returns {void}\n         */\n        function reportAccessingEval(globalScope) {\n            const variable = astUtils.getVariableByName(globalScope, \"eval\");\n\n            if (!variable) {\n                return;\n            }\n\n            const references = variable.references;\n\n            for (let i = 0; i < references.length; ++i) {\n                const reference = references[i];\n                const id = reference.identifier;\n\n                if (id.name === \"eval\" && !astUtils.isCallee(id)) {\n\n                    // Is accessing to eval (excludes direct calls to eval)\n                    report(id);\n                }\n            }\n        }\n\n        if (allowIndirect) {\n\n            // Checks only direct calls to eval. It's simple!\n            return {\n                \"CallExpression:exit\"(node) {\n                    const callee = node.callee;\n\n                    /*\n                     * Optional call (`eval?.(\"code\")`) is not direct eval.\n                     * The direct eval is only step 6.a.vi of https://tc39.es/ecma262/#sec-function-calls-runtime-semantics-evaluation\n                     * But the optional call is https://tc39.es/ecma262/#sec-optional-chaining-chain-evaluation\n                     */\n                    if (!node.optional && astUtils.isSpecificId(callee, \"eval\")) {\n                        report(callee);\n                    }\n                }\n            };\n        }\n\n        return {\n            \"CallExpression:exit\"(node) {\n                const callee = node.callee;\n\n                if (astUtils.isSpecificId(callee, \"eval\")) {\n                    report(callee);\n                }\n            },\n\n            Program(node) {\n                const scope = context.getScope(),\n                    features = context.parserOptions.ecmaFeatures || {},\n                    strict =\n                        scope.isStrict ||\n                        node.sourceType === \"module\" ||\n                        (features.globalReturn && scope.childScopes[0].isStrict);\n\n                funcInfo = {\n                    upper: null,\n                    node,\n                    strict,\n                    defaultThis: true,\n                    initialized: true\n                };\n            },\n\n            \"Program:exit\"() {\n                const globalScope = context.getScope();\n\n                exitVarScope();\n                reportAccessingEval(globalScope);\n                reportAccessingEvalViaGlobalObject(globalScope);\n            },\n\n            FunctionDeclaration: enterVarScope,\n            \"FunctionDeclaration:exit\": exitVarScope,\n            FunctionExpression: enterVarScope,\n            \"FunctionExpression:exit\": exitVarScope,\n            ArrowFunctionExpression: enterVarScope,\n            \"ArrowFunctionExpression:exit\": exitVarScope,\n            \"PropertyDefinition > *.value\": enterVarScope,\n            \"PropertyDefinition > *.value:exit\": exitVarScope,\n            StaticBlock: enterVarScope,\n            \"StaticBlock:exit\": exitVarScope,\n\n            ThisExpression(node) {\n                if (!isMember(node.parent, \"eval\")) {\n                    return;\n                }\n\n                /*\n                 * `this.eval` is found.\n                 * Checks whether or not the value of `this` is the global object.\n                 */\n                if (!funcInfo.initialized) {\n                    funcInfo.initialized = true;\n                    funcInfo.defaultThis = astUtils.isDefaultThisBinding(\n                        funcInfo.node,\n                        sourceCode\n                    );\n                }\n\n                if (!funcInfo.strict && funcInfo.defaultThis) {\n\n                    // `this.eval` is possible built-in `eval`.\n                    report(node.parent);\n                }\n            }\n        };\n\n    }\n};\n/lib/rules/wrap-regex.js\u0007r/**\n * @fileoverview Rule to flag when regex literals are not wrapped in parens\n * @author Matt DuVall <http://www.mattduvall.com>\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"layout\",\n\n        docs: {\n            description: \"require parenthesis around regex literals\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/wrap-regex\"\n        },\n\n        schema: [],\n        fixable: \"code\",\n\n        messages: {\n            requireParens: \"Wrap the regexp literal in parens to disambiguate the slash.\"\n        }\n    },\n\n    create(context) {\n        const sourceCode = context.getSourceCode();\n\n        return {\n\n            Literal(node) {\n                const token = sourceCode.getFirstToken(node),\n                    nodeType = token.type;\n\n                if (nodeType === \"RegularExpression\") {\n                    const beforeToken = sourceCode.getTokenBefore(node);\n                    const afterToken = sourceCode.getTokenAfter(node);\n                    const ancestors = context.getAncestors();\n                    const grandparent = ancestors[ancestors.length - 1];\n\n                    if (grandparent.type === \"MemberExpression\" && grandparent.object === node &&\n                        !(beforeToken && beforeToken.value === \"(\" && afterToken && afterToken.value === \")\")) {\n                        context.report({\n                            node,\n                            messageId: \"requireParens\",\n                            fix: fixer => fixer.replaceText(node, `(${sourceCode.getText(node)})`)\n                        });\n                    }\n                }\n            }\n        };\n\n    }\n};\n#/lib/cli-engine/formatters/junit.js\n/**\n * @fileoverview jUnit Reporter\n * @author Jamund Ferguson\n */\n\"use strict\";\n\nconst xmlEscape = require(\"../xml-escape\");\nconst path = require(\"path\");\n\n//------------------------------------------------------------------------------\n// Helper Functions\n//------------------------------------------------------------------------------\n\n/**\n * Returns the severity of warning or error\n * @param {Object} message message object to examine\n * @returns {string} severity level\n * @private\n */\nfunction getMessageType(message) {\n    if (message.fatal || message.severity === 2) {\n        return \"Error\";\n    }\n    return \"Warning\";\n\n}\n\n/**\n * Returns a full file path without extension\n * @param {string} filePath input file path\n * @returns {string} file path without extension\n * @private\n */\nfunction pathWithoutExt(filePath) {\n    return path.join(path.dirname(filePath), path.basename(filePath, path.extname(filePath)));\n}\n\n//------------------------------------------------------------------------------\n// Public Interface\n//------------------------------------------------------------------------------\n\nmodule.exports = function(results) {\n\n    let output = \"\";\n\n    output += \"<?xml version=\\\"1.0\\\" encoding=\\\"utf-8\\\"?>\\n\";\n    output += \"<testsuites>\\n\";\n\n    results.forEach(result => {\n\n        const messages = result.messages;\n        const classname = pathWithoutExt(result.filePath);\n\n        if (messages.length > 0) {\n            output += `<testsuite package=\"org.eslint\" time=\"0\" tests=\"${messages.length}\" errors=\"${messages.length}\" name=\"${result.filePath}\">\\n`;\n            messages.forEach(message => {\n                const type = message.fatal ? \"error\" : \"failure\";\n\n                output += `<testcase time=\"0\" name=\"org.eslint.${message.ruleId || \"unknown\"}\" classname=\"${classname}\">`;\n                output += `<${type} message=\"${xmlEscape(message.message || \"\")}\">`;\n                output += \"<![CDATA[\";\n                output += `line ${message.line || 0}, col `;\n                output += `${message.column || 0}, ${getMessageType(message)}`;\n                output += ` - ${xmlEscape(message.message || \"\")}`;\n                output += (message.ruleId ? ` (${message.ruleId})` : \"\");\n                output += \"]]>\";\n                output += `</${type}>`;\n                output += \"</testcase>\\n\";\n            });\n            output += \"</testsuite>\\n\";\n        } else {\n            output += `<testsuite package=\"org.eslint\" time=\"0\" tests=\"1\" errors=\"0\" name=\"${result.filePath}\">\\n`;\n            output += `<testcase time=\"0\" name=\"${result.filePath}\" classname=\"${classname}\" />\\n`;\n            output += \"</testsuite>\\n\";\n        }\n\n    });\n\n    output += \"</testsuites>\\n\";\n\n    return output;\n};\n /lib/rules/operator-linebreak.js',/**\n * @fileoverview Operator linebreak - enforces operator linebreak style of two types: after and before\n * @author Benoît Zugmeyer\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"layout\",\n\n        docs: {\n            description: \"enforce consistent linebreak style for operators\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/operator-linebreak\"\n        },\n\n        schema: [\n            {\n                enum: [\"after\", \"before\", \"none\", null]\n            },\n            {\n                type: \"object\",\n                properties: {\n                    overrides: {\n                        type: \"object\",\n                        additionalProperties: {\n                            enum: [\"after\", \"before\", \"none\", \"ignore\"]\n                        }\n                    }\n                },\n                additionalProperties: false\n            }\n        ],\n\n        fixable: \"code\",\n\n        messages: {\n            operatorAtBeginning: \"'{{operator}}' should be placed at the beginning of the line.\",\n            operatorAtEnd: \"'{{operator}}' should be placed at the end of the line.\",\n            badLinebreak: \"Bad line breaking before and after '{{operator}}'.\",\n            noLinebreak: \"There should be no line break before or after '{{operator}}'.\"\n        }\n    },\n\n    create(context) {\n\n        const usedDefaultGlobal = !context.options[0];\n        const globalStyle = context.options[0] || \"after\";\n        const options = context.options[1] || {};\n        const styleOverrides = options.overrides ? Object.assign({}, options.overrides) : {};\n\n        if (usedDefaultGlobal && !styleOverrides[\"?\"]) {\n            styleOverrides[\"?\"] = \"before\";\n        }\n\n        if (usedDefaultGlobal && !styleOverrides[\":\"]) {\n            styleOverrides[\":\"] = \"before\";\n        }\n\n        const sourceCode = context.getSourceCode();\n\n        //--------------------------------------------------------------------------\n        // Helpers\n        //--------------------------------------------------------------------------\n\n        /**\n         * Gets a fixer function to fix rule issues\n         * @param {Token} operatorToken The operator token of an expression\n         * @param {string} desiredStyle The style for the rule. One of 'before', 'after', 'none'\n         * @returns {Function} A fixer function\n         */\n        function getFixer(operatorToken, desiredStyle) {\n            return fixer => {\n                const tokenBefore = sourceCode.getTokenBefore(operatorToken);\n                const tokenAfter = sourceCode.getTokenAfter(operatorToken);\n                const textBefore = sourceCode.text.slice(tokenBefore.range[1], operatorToken.range[0]);\n                const textAfter = sourceCode.text.slice(operatorToken.range[1], tokenAfter.range[0]);\n                const hasLinebreakBefore = !astUtils.isTokenOnSameLine(tokenBefore, operatorToken);\n                const hasLinebreakAfter = !astUtils.isTokenOnSameLine(operatorToken, tokenAfter);\n                let newTextBefore, newTextAfter;\n\n                if (hasLinebreakBefore !== hasLinebreakAfter && desiredStyle !== \"none\") {\n\n                    // If there is a comment before and after the operator, don't do a fix.\n                    if (sourceCode.getTokenBefore(operatorToken, { includeComments: true }) !== tokenBefore &&\n                        sourceCode.getTokenAfter(operatorToken, { includeComments: true }) !== tokenAfter) {\n\n                        return null;\n                    }\n\n                    /*\n                     * If there is only one linebreak and it's on the wrong side of the operator, swap the text before and after the operator.\n                     * foo &&\n                     *           bar\n                     * would get fixed to\n                     * foo\n                     *        && bar\n                     */\n                    newTextBefore = textAfter;\n                    newTextAfter = textBefore;\n                } else {\n                    const LINEBREAK_REGEX = astUtils.createGlobalLinebreakMatcher();\n\n                    // Otherwise, if no linebreak is desired and no comments interfere, replace the linebreaks with empty strings.\n                    newTextBefore = desiredStyle === \"before\" || textBefore.trim() ? textBefore : textBefore.replace(LINEBREAK_REGEX, \"\");\n                    newTextAfter = desiredStyle === \"after\" || textAfter.trim() ? textAfter : textAfter.replace(LINEBREAK_REGEX, \"\");\n\n                    // If there was no change (due to interfering comments), don't output a fix.\n                    if (newTextBefore === textBefore && newTextAfter === textAfter) {\n                        return null;\n                    }\n                }\n\n                if (newTextAfter === \"\" && tokenAfter.type === \"Punctuator\" && \"+-\".includes(operatorToken.value) && tokenAfter.value === operatorToken.value) {\n\n                    // To avoid accidentally creating a ++ or -- operator, insert a space if the operator is a +/- and the following token is a unary +/-.\n                    newTextAfter += \" \";\n                }\n\n                return fixer.replaceTextRange([tokenBefore.range[1], tokenAfter.range[0]], newTextBefore + operatorToken.value + newTextAfter);\n            };\n        }\n\n        /**\n         * Checks the operator placement\n         * @param {ASTNode} node The node to check\n         * @param {ASTNode} rightSide The node that comes after the operator in `node`\n         * @param {string} operator The operator\n         * @private\n         * @returns {void}\n         */\n        function validateNode(node, rightSide, operator) {\n\n            /*\n             * Find the operator token by searching from the right side, because between the left side and the operator\n             * there could be additional tokens from type annotations. Search specifically for the token which\n             * value equals the operator, in order to skip possible opening parentheses before the right side node.\n             */\n            const operatorToken = sourceCode.getTokenBefore(rightSide, token => token.value === operator);\n            const leftToken = sourceCode.getTokenBefore(operatorToken);\n            const rightToken = sourceCode.getTokenAfter(operatorToken);\n            const operatorStyleOverride = styleOverrides[operator];\n            const style = operatorStyleOverride || globalStyle;\n            const fix = getFixer(operatorToken, style);\n\n            // if single line\n            if (astUtils.isTokenOnSameLine(leftToken, operatorToken) &&\n                    astUtils.isTokenOnSameLine(operatorToken, rightToken)) {\n\n                // do nothing.\n\n            } else if (operatorStyleOverride !== \"ignore\" && !astUtils.isTokenOnSameLine(leftToken, operatorToken) &&\n                    !astUtils.isTokenOnSameLine(operatorToken, rightToken)) {\n\n                // lone operator\n                context.report({\n                    node,\n                    loc: operatorToken.loc,\n                    messageId: \"badLinebreak\",\n                    data: {\n                        operator\n                    },\n                    fix\n                });\n\n            } else if (style === \"before\" && astUtils.isTokenOnSameLine(leftToken, operatorToken)) {\n\n                context.report({\n                    node,\n                    loc: operatorToken.loc,\n                    messageId: \"operatorAtBeginning\",\n                    data: {\n                        operator\n                    },\n                    fix\n                });\n\n            } else if (style === \"after\" && astUtils.isTokenOnSameLine(operatorToken, rightToken)) {\n\n                context.report({\n                    node,\n                    loc: operatorToken.loc,\n                    messageId: \"operatorAtEnd\",\n                    data: {\n                        operator\n                    },\n                    fix\n                });\n\n            } else if (style === \"none\") {\n\n                context.report({\n                    node,\n                    loc: operatorToken.loc,\n                    messageId: \"noLinebreak\",\n                    data: {\n                        operator\n                    },\n                    fix\n                });\n\n            }\n        }\n\n        /**\n         * Validates a binary expression using `validateNode`\n         * @param {BinaryExpression|LogicalExpression|AssignmentExpression} node node to be validated\n         * @returns {void}\n         */\n        function validateBinaryExpression(node) {\n            validateNode(node, node.right, node.operator);\n        }\n\n        //--------------------------------------------------------------------------\n        // Public\n        //--------------------------------------------------------------------------\n\n        return {\n            BinaryExpression: validateBinaryExpression,\n            LogicalExpression: validateBinaryExpression,\n            AssignmentExpression: validateBinaryExpression,\n            VariableDeclarator(node) {\n                if (node.init) {\n                    validateNode(node, node.init, \"=\");\n                }\n            },\n            PropertyDefinition(node) {\n                if (node.value) {\n                    validateNode(node, node.value, \"=\");\n                }\n            },\n            ConditionalExpression(node) {\n                validateNode(node, node.consequent, \"?\");\n                validateNode(node, node.alternate, \":\");\n            }\n        };\n    }\n};\n'/lib/rules/no-async-promise-executor.js\u0004o/**\n * @fileoverview disallow using an async function as a Promise executor\n * @author Teddy Katz\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"problem\",\n\n        docs: {\n            description: \"disallow using an async function as a Promise executor\",\n            recommended: true,\n            url: \"https://eslint.org/docs/rules/no-async-promise-executor\"\n        },\n\n        fixable: null,\n        schema: [],\n        messages: {\n            async: \"Promise executor functions should not be async.\"\n        }\n    },\n\n    create(context) {\n        return {\n            \"NewExpression[callee.name='Promise'][arguments.0.async=true]\"(node) {\n                context.report({\n                    node: context.getSourceCode().getFirstToken(node.arguments[0], token => token.value === \"async\"),\n                    messageId: \"async\"\n                });\n            }\n        };\n    }\n};\n/lib/rules/no-ex-assign.js\u0005/**\n * @fileoverview Rule to flag assignment of the exception parameter\n * @author Stephen Murray <spmurrayzzz>\n */\n\n\"use strict\";\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"problem\",\n\n        docs: {\n            description: \"disallow reassigning exceptions in `catch` clauses\",\n            recommended: true,\n            url: \"https://eslint.org/docs/rules/no-ex-assign\"\n        },\n\n        schema: [],\n\n        messages: {\n            unexpected: \"Do not assign to the exception parameter.\"\n        }\n    },\n\n    create(context) {\n\n        /**\n         * Finds and reports references that are non initializer and writable.\n         * @param {Variable} variable A variable to check.\n         * @returns {void}\n         */\n        function checkVariable(variable) {\n            astUtils.getModifyingReferences(variable.references).forEach(reference => {\n                context.report({ node: reference.identifier, messageId: \"unexpected\" });\n            });\n        }\n\n        return {\n            CatchClause(node) {\n                context.getDeclaredVariables(node).forEach(checkVariable);\n            }\n        };\n\n    }\n};\n/lib/rules/utils/fix-tracker.js\u0010\u001d/**\n * @fileoverview Helper class to aid in constructing fix commands.\n * @author Alan Pierce\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./ast-utils\");\n\n//------------------------------------------------------------------------------\n// Public Interface\n//------------------------------------------------------------------------------\n\n/**\n * A helper class to combine fix options into a fix command. Currently, it\n * exposes some \"retain\" methods that extend the range of the text being\n * replaced so that other fixes won't touch that region in the same pass.\n */\nclass FixTracker {\n\n    /**\n     * Create a new FixTracker.\n     * @param {ruleFixer} fixer A ruleFixer instance.\n     * @param {SourceCode} sourceCode A SourceCode object for the current code.\n     */\n    constructor(fixer, sourceCode) {\n        this.fixer = fixer;\n        this.sourceCode = sourceCode;\n        this.retainedRange = null;\n    }\n\n    /**\n     * Mark the given range as \"retained\", meaning that other fixes may not\n     * may not modify this region in the same pass.\n     * @param {int[]} range The range to retain.\n     * @returns {FixTracker} The same RuleFixer, for chained calls.\n     */\n    retainRange(range) {\n        this.retainedRange = range;\n        return this;\n    }\n\n    /**\n     * Given a node, find the function containing it (or the entire program) and\n     * mark it as retained, meaning that other fixes may not modify it in this\n     * pass. This is useful for avoiding conflicts in fixes that modify control\n     * flow.\n     * @param {ASTNode} node The node to use as a starting point.\n     * @returns {FixTracker} The same RuleFixer, for chained calls.\n     */\n    retainEnclosingFunction(node) {\n        const functionNode = astUtils.getUpperFunction(node);\n\n        return this.retainRange(functionNode ? functionNode.range : this.sourceCode.ast.range);\n    }\n\n    /**\n     * Given a node or token, find the token before and afterward, and mark that\n     * range as retained, meaning that other fixes may not modify it in this\n     * pass. This is useful for avoiding conflicts in fixes that make a small\n     * change to the code where the AST should not be changed.\n     * @param {ASTNode|Token} nodeOrToken The node or token to use as a starting\n     *      point. The token to the left and right are use in the range.\n     * @returns {FixTracker} The same RuleFixer, for chained calls.\n     */\n    retainSurroundingTokens(nodeOrToken) {\n        const tokenBefore = this.sourceCode.getTokenBefore(nodeOrToken) || nodeOrToken;\n        const tokenAfter = this.sourceCode.getTokenAfter(nodeOrToken) || nodeOrToken;\n\n        return this.retainRange([tokenBefore.range[0], tokenAfter.range[1]]);\n    }\n\n    /**\n     * Create a fix command that replaces the given range with the given text,\n     * accounting for any retained ranges.\n     * @param {int[]} range The range to remove in the fix.\n     * @param {string} text The text to insert in place of the range.\n     * @returns {Object} The fix command.\n     */\n    replaceTextRange(range, text) {\n        let actualRange;\n\n        if (this.retainedRange) {\n            actualRange = [\n                Math.min(this.retainedRange[0], range[0]),\n                Math.max(this.retainedRange[1], range[1])\n            ];\n        } else {\n            actualRange = range;\n        }\n\n        return this.fixer.replaceTextRange(\n            actualRange,\n            this.sourceCode.text.slice(actualRange[0], range[0]) +\n                text +\n                this.sourceCode.text.slice(range[1], actualRange[1])\n        );\n    }\n\n    /**\n     * Create a fix command that removes the given node or token, accounting for\n     * any retained ranges.\n     * @param {ASTNode|Token} nodeOrToken The node or token to remove.\n     * @returns {Object} The fix command.\n     */\n    remove(nodeOrToken) {\n        return this.replaceTextRange(nodeOrToken.range, \"\");\n    }\n}\n\nmodule.exports = FixTracker;\n/lib/rules/no-label-var.js\t4/**\n * @fileoverview Rule to flag labels that are the same as an identifier\n * @author Ian Christian Myers\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow labels that share a name with a variable\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-label-var\"\n        },\n\n        schema: [],\n\n        messages: {\n            identifierClashWithLabel: \"Found identifier with same name as label.\"\n        }\n    },\n\n    create(context) {\n\n        //--------------------------------------------------------------------------\n        // Helpers\n        //--------------------------------------------------------------------------\n\n        /**\n         * Check if the identifier is present inside current scope\n         * @param {Object} scope current scope\n         * @param {string} name To evaluate\n         * @returns {boolean} True if its present\n         * @private\n         */\n        function findIdentifier(scope, name) {\n            return astUtils.getVariableByName(scope, name) !== null;\n        }\n\n        //--------------------------------------------------------------------------\n        // Public API\n        //--------------------------------------------------------------------------\n\n        return {\n\n            LabeledStatement(node) {\n\n                // Fetch the innermost scope.\n                const scope = context.getScope();\n\n                /*\n                 * Recursively find the identifier walking up the scope, starting\n                 * with the innermost scope.\n                 */\n                if (findIdentifier(scope, node.label.name)) {\n                    context.report({\n                        node,\n                        messageId: \"identifierClashWithLabel\"\n                    });\n                }\n            }\n\n        };\n\n    }\n};\n/lib/rules/no-script-url.js\u0006/**\n * @fileoverview Rule to flag when using javascript: urls\n * @author Ilya Volodin\n */\n/* eslint no-script-url: 0 -- Code is checking to report such URLs */\n\n\"use strict\";\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow `javascript:` urls\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-script-url\"\n        },\n\n        schema: [],\n\n        messages: {\n            unexpectedScriptURL: \"Script URL is a form of eval.\"\n        }\n    },\n\n    create(context) {\n\n        /**\n         * Check whether a node's static value starts with \"javascript:\" or not.\n         * And report an error for unexpected script URL.\n         * @param {ASTNode} node node to check\n         * @returns {void}\n         */\n        function check(node) {\n            const value = astUtils.getStaticStringValue(node);\n\n            if (typeof value === \"string\" && value.toLowerCase().indexOf(\"javascript:\") === 0) {\n                context.report({ node, messageId: \"unexpectedScriptURL\" });\n            }\n        }\n        return {\n            Literal(node) {\n                if (node.value && typeof node.value === \"string\") {\n                    check(node);\n                }\n            },\n            TemplateLiteral(node) {\n                if (!(node.parent && node.parent.type === \"TaggedTemplateExpression\")) {\n                    check(node);\n                }\n            }\n        };\n    }\n};\n&/lib/source-code/token-store/cursor.js\t\u001b/**\n * @fileoverview Define the abstract class about cursors which iterate tokens.\n * @author Toru Nagashima\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Exports\n//------------------------------------------------------------------------------\n\n/**\n * The abstract class about cursors which iterate tokens.\n *\n * This class has 2 abstract methods.\n *\n * - `current: Token | Comment | null` ... The current token.\n * - `moveNext(): boolean` ... Moves this cursor to the next token. If the next token didn't exist, it returns `false`.\n *\n * This is similar to ES2015 Iterators.\n * However, Iterators were slow (at 2017-01), so I created this class as similar to C# IEnumerable.\n *\n * There are the following known sub classes.\n *\n * - ForwardTokenCursor .......... The cursor which iterates tokens only.\n * - BackwardTokenCursor ......... The cursor which iterates tokens only in reverse.\n * - ForwardTokenCommentCursor ... The cursor which iterates tokens and comments.\n * - BackwardTokenCommentCursor .. The cursor which iterates tokens and comments in reverse.\n * - DecorativeCursor\n *     - FilterCursor ............ The cursor which ignores the specified tokens.\n *     - SkipCursor .............. The cursor which ignores the first few tokens.\n *     - LimitCursor ............. The cursor which limits the count of tokens.\n *\n */\nmodule.exports = class Cursor {\n\n    /**\n     * Initializes this cursor.\n     */\n    constructor() {\n        this.current = null;\n    }\n\n    /**\n     * Gets the first token.\n     * This consumes this cursor.\n     * @returns {Token|Comment} The first token or null.\n     */\n    getOneToken() {\n        return this.moveNext() ? this.current : null;\n    }\n\n    /**\n     * Gets the first tokens.\n     * This consumes this cursor.\n     * @returns {(Token|Comment)[]} All tokens.\n     */\n    getAllTokens() {\n        const tokens = [];\n\n        while (this.moveNext()) {\n            tokens.push(this.current);\n        }\n\n        return tokens;\n    }\n\n    /**\n     * Moves this cursor to the next token.\n     * @returns {boolean} `true` if the next token exists.\n     * @abstract\n     */\n    /* istanbul ignore next */\n    moveNext() { // eslint-disable-line class-methods-use-this -- Unused\n        throw new Error(\"Not implemented.\");\n    }\n};\n%/lib/cli-engine/formatters/compact.js\u0005/**\n * @fileoverview Compact reporter\n * @author Nicholas C. Zakas\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Helper Functions\n//------------------------------------------------------------------------------\n\n/**\n * Returns the severity of warning or error\n * @param {Object} message message object to examine\n * @returns {string} severity level\n * @private\n */\nfunction getMessageType(message) {\n    if (message.fatal || message.severity === 2) {\n        return \"Error\";\n    }\n    return \"Warning\";\n\n}\n\n\n//------------------------------------------------------------------------------\n// Public Interface\n//------------------------------------------------------------------------------\n\nmodule.exports = function(results) {\n\n    let output = \"\",\n        total = 0;\n\n    results.forEach(result => {\n\n        const messages = result.messages;\n\n        total += messages.length;\n\n        messages.forEach(message => {\n\n            output += `${result.filePath}: `;\n            output += `line ${message.line || 0}`;\n            output += `, col ${message.column || 0}`;\n            output += `, ${getMessageType(message)}`;\n            output += ` - ${message.message}`;\n            output += message.ruleId ? ` (${message.ruleId})` : \"\";\n            output += \"\\n\";\n\n        });\n\n    });\n\n    if (total > 0) {\n        output += `\\n${total} problem${total !== 1 ? \"s\" : \"\"}`;\n    }\n\n    return output;\n};\n/lib/rules/semi-spacing.js\"/**\n * @fileoverview Validates spacing before and after semicolon\n * @author Mathias Schreck\n */\n\n\"use strict\";\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"layout\",\n\n        docs: {\n            description: \"enforce consistent spacing before and after semicolons\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/semi-spacing\"\n        },\n\n        fixable: \"whitespace\",\n\n        schema: [\n            {\n                type: \"object\",\n                properties: {\n                    before: {\n                        type: \"boolean\",\n                        default: false\n                    },\n                    after: {\n                        type: \"boolean\",\n                        default: true\n                    }\n                },\n                additionalProperties: false\n            }\n        ],\n\n        messages: {\n            unexpectedWhitespaceBefore: \"Unexpected whitespace before semicolon.\",\n            unexpectedWhitespaceAfter: \"Unexpected whitespace after semicolon.\",\n            missingWhitespaceBefore: \"Missing whitespace before semicolon.\",\n            missingWhitespaceAfter: \"Missing whitespace after semicolon.\"\n        }\n    },\n\n    create(context) {\n\n        const config = context.options[0],\n            sourceCode = context.getSourceCode();\n        let requireSpaceBefore = false,\n            requireSpaceAfter = true;\n\n        if (typeof config === \"object\") {\n            requireSpaceBefore = config.before;\n            requireSpaceAfter = config.after;\n        }\n\n        /**\n         * Checks if a given token has leading whitespace.\n         * @param {Object} token The token to check.\n         * @returns {boolean} True if the given token has leading space, false if not.\n         */\n        function hasLeadingSpace(token) {\n            const tokenBefore = sourceCode.getTokenBefore(token);\n\n            return tokenBefore && astUtils.isTokenOnSameLine(tokenBefore, token) && sourceCode.isSpaceBetweenTokens(tokenBefore, token);\n        }\n\n        /**\n         * Checks if a given token has trailing whitespace.\n         * @param {Object} token The token to check.\n         * @returns {boolean} True if the given token has trailing space, false if not.\n         */\n        function hasTrailingSpace(token) {\n            const tokenAfter = sourceCode.getTokenAfter(token);\n\n            return tokenAfter && astUtils.isTokenOnSameLine(token, tokenAfter) && sourceCode.isSpaceBetweenTokens(token, tokenAfter);\n        }\n\n        /**\n         * Checks if the given token is the last token in its line.\n         * @param {Token} token The token to check.\n         * @returns {boolean} Whether or not the token is the last in its line.\n         */\n        function isLastTokenInCurrentLine(token) {\n            const tokenAfter = sourceCode.getTokenAfter(token);\n\n            return !(tokenAfter && astUtils.isTokenOnSameLine(token, tokenAfter));\n        }\n\n        /**\n         * Checks if the given token is the first token in its line\n         * @param {Token} token The token to check.\n         * @returns {boolean} Whether or not the token is the first in its line.\n         */\n        function isFirstTokenInCurrentLine(token) {\n            const tokenBefore = sourceCode.getTokenBefore(token);\n\n            return !(tokenBefore && astUtils.isTokenOnSameLine(token, tokenBefore));\n        }\n\n        /**\n         * Checks if the next token of a given token is a closing parenthesis.\n         * @param {Token} token The token to check.\n         * @returns {boolean} Whether or not the next token of a given token is a closing parenthesis.\n         */\n        function isBeforeClosingParen(token) {\n            const nextToken = sourceCode.getTokenAfter(token);\n\n            return (nextToken && astUtils.isClosingBraceToken(nextToken) || astUtils.isClosingParenToken(nextToken));\n        }\n\n        /**\n         * Report location example :\n         *\n         * for unexpected space `before`\n         *\n         * var a = 'b'   ;\n         *            ^^^\n         *\n         * for unexpected space `after`\n         *\n         * var a = 'b';  c = 10;\n         *             ^^\n         *\n         * Reports if the given token has invalid spacing.\n         * @param {Token} token The semicolon token to check.\n         * @param {ASTNode} node The corresponding node of the token.\n         * @returns {void}\n         */\n        function checkSemicolonSpacing(token, node) {\n            if (astUtils.isSemicolonToken(token)) {\n                if (hasLeadingSpace(token)) {\n                    if (!requireSpaceBefore) {\n                        const tokenBefore = sourceCode.getTokenBefore(token);\n                        const loc = {\n                            start: tokenBefore.loc.end,\n                            end: token.loc.start\n                        };\n\n                        context.report({\n                            node,\n                            loc,\n                            messageId: \"unexpectedWhitespaceBefore\",\n                            fix(fixer) {\n\n                                return fixer.removeRange([tokenBefore.range[1], token.range[0]]);\n                            }\n                        });\n                    }\n                } else {\n                    if (requireSpaceBefore) {\n                        const loc = token.loc;\n\n                        context.report({\n                            node,\n                            loc,\n                            messageId: \"missingWhitespaceBefore\",\n                            fix(fixer) {\n                                return fixer.insertTextBefore(token, \" \");\n                            }\n                        });\n                    }\n                }\n\n                if (!isFirstTokenInCurrentLine(token) && !isLastTokenInCurrentLine(token) && !isBeforeClosingParen(token)) {\n                    if (hasTrailingSpace(token)) {\n                        if (!requireSpaceAfter) {\n                            const tokenAfter = sourceCode.getTokenAfter(token);\n                            const loc = {\n                                start: token.loc.end,\n                                end: tokenAfter.loc.start\n                            };\n\n                            context.report({\n                                node,\n                                loc,\n                                messageId: \"unexpectedWhitespaceAfter\",\n                                fix(fixer) {\n\n                                    return fixer.removeRange([token.range[1], tokenAfter.range[0]]);\n                                }\n                            });\n                        }\n                    } else {\n                        if (requireSpaceAfter) {\n                            const loc = token.loc;\n\n                            context.report({\n                                node,\n                                loc,\n                                messageId: \"missingWhitespaceAfter\",\n                                fix(fixer) {\n                                    return fixer.insertTextAfter(token, \" \");\n                                }\n                            });\n                        }\n                    }\n                }\n            }\n        }\n\n        /**\n         * Checks the spacing of the semicolon with the assumption that the last token is the semicolon.\n         * @param {ASTNode} node The node to check.\n         * @returns {void}\n         */\n        function checkNode(node) {\n            const token = sourceCode.getLastToken(node);\n\n            checkSemicolonSpacing(token, node);\n        }\n\n        return {\n            VariableDeclaration: checkNode,\n            ExpressionStatement: checkNode,\n            BreakStatement: checkNode,\n            ContinueStatement: checkNode,\n            DebuggerStatement: checkNode,\n            DoWhileStatement: checkNode,\n            ReturnStatement: checkNode,\n            ThrowStatement: checkNode,\n            ImportDeclaration: checkNode,\n            ExportNamedDeclaration: checkNode,\n            ExportAllDeclaration: checkNode,\n            ExportDefaultDeclaration: checkNode,\n            ForStatement(node) {\n                if (node.init) {\n                    checkSemicolonSpacing(sourceCode.getTokenAfter(node.init), node);\n                }\n\n                if (node.test) {\n                    checkSemicolonSpacing(sourceCode.getTokenAfter(node.test), node);\n                }\n            },\n            PropertyDefinition: checkNode\n        };\n    }\n};\n!/lib/cli-engine/formatters/tap.js\f\u0013/**\n * @fileoverview TAP reporter\n * @author Jonathan Kingston\n */\n\"use strict\";\n\nconst yaml = require(\"js-yaml\");\n\n//------------------------------------------------------------------------------\n// Helper Functions\n//------------------------------------------------------------------------------\n\n/**\n * Returns a canonical error level string based upon the error message passed in.\n * @param {Object} message Individual error message provided by eslint\n * @returns {string} Error level string\n */\nfunction getMessageType(message) {\n    if (message.fatal || message.severity === 2) {\n        return \"error\";\n    }\n    return \"warning\";\n}\n\n/**\n * Takes in a JavaScript object and outputs a TAP diagnostics string\n * @param {Object} diagnostic JavaScript object to be embedded as YAML into output.\n * @returns {string} diagnostics string with YAML embedded - TAP version 13 compliant\n */\nfunction outputDiagnostics(diagnostic) {\n    const prefix = \"  \";\n    let output = `${prefix}---\\n`;\n\n    output += prefix + yaml.dump(diagnostic).split(\"\\n\").join(`\\n${prefix}`);\n    output += \"...\\n\";\n    return output;\n}\n\n//------------------------------------------------------------------------------\n// Public Interface\n//------------------------------------------------------------------------------\n\nmodule.exports = function(results) {\n    let output = `TAP version 13\\n1..${results.length}\\n`;\n\n    results.forEach((result, id) => {\n        const messages = result.messages;\n        let testResult = \"ok\";\n        let diagnostics = {};\n\n        if (messages.length > 0) {\n            messages.forEach(message => {\n                const severity = getMessageType(message);\n                const diagnostic = {\n                    message: message.message,\n                    severity,\n                    data: {\n                        line: message.line || 0,\n                        column: message.column || 0,\n                        ruleId: message.ruleId || \"\"\n                    }\n                };\n\n                // This ensures a warning message is not flagged as error\n                if (severity === \"error\") {\n                    testResult = \"not ok\";\n                }\n\n                /*\n                 * If we have multiple messages place them under a messages key\n                 * The first error will be logged as message key\n                 * This is to adhere to TAP 13 loosely defined specification of having a message key\n                 */\n                if (\"message\" in diagnostics) {\n                    if (typeof diagnostics.messages === \"undefined\") {\n                        diagnostics.messages = [];\n                    }\n                    diagnostics.messages.push(diagnostic);\n                } else {\n                    diagnostics = diagnostic;\n                }\n            });\n        }\n\n        output += `${testResult} ${id + 1} - ${result.filePath}\\n`;\n\n        // If we have an error include diagnostics\n        if (messages.length > 0) {\n            output += outputDiagnostics(diagnostics);\n        }\n\n    });\n\n    return output;\n};\n(/lib/cli-engine/formatters/jslint-xml.js\u0004 /**\n * @fileoverview JSLint XML reporter\n * @author Ian Christian Myers\n */\n\"use strict\";\n\nconst xmlEscape = require(\"../xml-escape\");\n\n//------------------------------------------------------------------------------\n// Public Interface\n//------------------------------------------------------------------------------\n\nmodule.exports = function(results) {\n\n    let output = \"\";\n\n    output += \"<?xml version=\\\"1.0\\\" encoding=\\\"utf-8\\\"?>\";\n    output += \"<jslint>\";\n\n    results.forEach(result => {\n        const messages = result.messages;\n\n        output += `<file name=\"${result.filePath}\">`;\n\n        messages.forEach(message => {\n            output += [\n                `<issue line=\"${message.line}\"`,\n                `char=\"${message.column}\"`,\n                `evidence=\"${xmlEscape(message.source || \"\")}\"`,\n                `reason=\"${xmlEscape(message.message || \"\")}${message.ruleId ? ` (${message.ruleId})` : \"\"}\" />`\n            ].join(\" \");\n        });\n\n        output += \"</file>\";\n\n    });\n\n    output += \"</jslint>\";\n\n    return output;\n};\n/lib/rules/sort-keys.js\u0015</**\n * @fileoverview Rule to require object keys to be sorted\n * @author Toru Nagashima\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\"),\n    naturalCompare = require(\"natural-compare\");\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\n/**\n * Gets the property name of the given `Property` node.\n *\n * - If the property's key is an `Identifier` node, this returns the key's name\n *   whether it's a computed property or not.\n * - If the property has a static name, this returns the static name.\n * - Otherwise, this returns null.\n * @param {ASTNode} node The `Property` node to get.\n * @returns {string|null} The property name or null.\n * @private\n */\nfunction getPropertyName(node) {\n    const staticName = astUtils.getStaticPropertyName(node);\n\n    if (staticName !== null) {\n        return staticName;\n    }\n\n    return node.key.name || null;\n}\n\n/**\n * Functions which check that the given 2 names are in specific order.\n *\n * Postfix `I` is meant insensitive.\n * Postfix `N` is meant natural.\n * @private\n */\nconst isValidOrders = {\n    asc(a, b) {\n        return a <= b;\n    },\n    ascI(a, b) {\n        return a.toLowerCase() <= b.toLowerCase();\n    },\n    ascN(a, b) {\n        return naturalCompare(a, b) <= 0;\n    },\n    ascIN(a, b) {\n        return naturalCompare(a.toLowerCase(), b.toLowerCase()) <= 0;\n    },\n    desc(a, b) {\n        return isValidOrders.asc(b, a);\n    },\n    descI(a, b) {\n        return isValidOrders.ascI(b, a);\n    },\n    descN(a, b) {\n        return isValidOrders.ascN(b, a);\n    },\n    descIN(a, b) {\n        return isValidOrders.ascIN(b, a);\n    }\n};\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"require object keys to be sorted\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/sort-keys\"\n        },\n\n        schema: [\n            {\n                enum: [\"asc\", \"desc\"]\n            },\n            {\n                type: \"object\",\n                properties: {\n                    caseSensitive: {\n                        type: \"boolean\",\n                        default: true\n                    },\n                    natural: {\n                        type: \"boolean\",\n                        default: false\n                    },\n                    minKeys: {\n                        type: \"integer\",\n                        minimum: 2,\n                        default: 2\n                    }\n                },\n                additionalProperties: false\n            }\n        ],\n\n        messages: {\n            sortKeys: \"Expected object keys to be in {{natural}}{{insensitive}}{{order}}ending order. '{{thisName}}' should be before '{{prevName}}'.\"\n        }\n    },\n\n    create(context) {\n\n        // Parse options.\n        const order = context.options[0] || \"asc\";\n        const options = context.options[1];\n        const insensitive = options && options.caseSensitive === false;\n        const natural = options && options.natural;\n        const minKeys = options && options.minKeys;\n        const isValidOrder = isValidOrders[\n            order + (insensitive ? \"I\" : \"\") + (natural ? \"N\" : \"\")\n        ];\n\n        // The stack to save the previous property's name for each object literals.\n        let stack = null;\n\n        return {\n            ObjectExpression(node) {\n                stack = {\n                    upper: stack,\n                    prevName: null,\n                    numKeys: node.properties.length\n                };\n            },\n\n            \"ObjectExpression:exit\"() {\n                stack = stack.upper;\n            },\n\n            SpreadElement(node) {\n                if (node.parent.type === \"ObjectExpression\") {\n                    stack.prevName = null;\n                }\n            },\n\n            Property(node) {\n                if (node.parent.type === \"ObjectPattern\") {\n                    return;\n                }\n\n                const prevName = stack.prevName;\n                const numKeys = stack.numKeys;\n                const thisName = getPropertyName(node);\n\n                if (thisName !== null) {\n                    stack.prevName = thisName;\n                }\n\n                if (prevName === null || thisName === null || numKeys < minKeys) {\n                    return;\n                }\n\n                if (!isValidOrder(prevName, thisName)) {\n                    context.report({\n                        node,\n                        loc: node.key.loc,\n                        messageId: \"sortKeys\",\n                        data: {\n                            thisName,\n                            prevName,\n                            order,\n                            insensitive: insensitive ? \"insensitive \" : \"\",\n                            natural: natural ? \"natural \" : \"\"\n                        }\n                    });\n                }\n            }\n        };\n    }\n};\n3/lib/linter/code-path-analysis/code-path-segment.js\u001c@/**\n * @fileoverview A class of the code path segment.\n * @author Toru Nagashima\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst debug = require(\"./debug-helpers\");\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\n/**\n * Checks whether or not a given segment is reachable.\n * @param {CodePathSegment} segment A segment to check.\n * @returns {boolean} `true` if the segment is reachable.\n */\nfunction isReachable(segment) {\n    return segment.reachable;\n}\n\n//------------------------------------------------------------------------------\n// Public Interface\n//------------------------------------------------------------------------------\n\n/**\n * A code path segment.\n */\nclass CodePathSegment {\n\n    /**\n     * @param {string} id An identifier.\n     * @param {CodePathSegment[]} allPrevSegments An array of the previous segments.\n     *   This array includes unreachable segments.\n     * @param {boolean} reachable A flag which shows this is reachable.\n     */\n    constructor(id, allPrevSegments, reachable) {\n\n        /**\n         * The identifier of this code path.\n         * Rules use it to store additional information of each rule.\n         * @type {string}\n         */\n        this.id = id;\n\n        /**\n         * An array of the next segments.\n         * @type {CodePathSegment[]}\n         */\n        this.nextSegments = [];\n\n        /**\n         * An array of the previous segments.\n         * @type {CodePathSegment[]}\n         */\n        this.prevSegments = allPrevSegments.filter(isReachable);\n\n        /**\n         * An array of the next segments.\n         * This array includes unreachable segments.\n         * @type {CodePathSegment[]}\n         */\n        this.allNextSegments = [];\n\n        /**\n         * An array of the previous segments.\n         * This array includes unreachable segments.\n         * @type {CodePathSegment[]}\n         */\n        this.allPrevSegments = allPrevSegments;\n\n        /**\n         * A flag which shows this is reachable.\n         * @type {boolean}\n         */\n        this.reachable = reachable;\n\n        // Internal data.\n        Object.defineProperty(this, \"internal\", {\n            value: {\n                used: false,\n                loopedPrevSegments: []\n            }\n        });\n\n        /* istanbul ignore if */\n        if (debug.enabled) {\n            this.internal.nodes = [];\n        }\n    }\n\n    /**\n     * Checks a given previous segment is coming from the end of a loop.\n     * @param {CodePathSegment} segment A previous segment to check.\n     * @returns {boolean} `true` if the segment is coming from the end of a loop.\n     */\n    isLoopedPrevSegment(segment) {\n        return this.internal.loopedPrevSegments.indexOf(segment) !== -1;\n    }\n\n    /**\n     * Creates the root segment.\n     * @param {string} id An identifier.\n     * @returns {CodePathSegment} The created segment.\n     */\n    static newRoot(id) {\n        return new CodePathSegment(id, [], true);\n    }\n\n    /**\n     * Creates a segment that follows given segments.\n     * @param {string} id An identifier.\n     * @param {CodePathSegment[]} allPrevSegments An array of the previous segments.\n     * @returns {CodePathSegment} The created segment.\n     */\n    static newNext(id, allPrevSegments) {\n        return new CodePathSegment(\n            id,\n            CodePathSegment.flattenUnusedSegments(allPrevSegments),\n            allPrevSegments.some(isReachable)\n        );\n    }\n\n    /**\n     * Creates an unreachable segment that follows given segments.\n     * @param {string} id An identifier.\n     * @param {CodePathSegment[]} allPrevSegments An array of the previous segments.\n     * @returns {CodePathSegment} The created segment.\n     */\n    static newUnreachable(id, allPrevSegments) {\n        const segment = new CodePathSegment(id, CodePathSegment.flattenUnusedSegments(allPrevSegments), false);\n\n        /*\n         * In `if (a) return a; foo();` case, the unreachable segment preceded by\n         * the return statement is not used but must not be remove.\n         */\n        CodePathSegment.markUsed(segment);\n\n        return segment;\n    }\n\n    /**\n     * Creates a segment that follows given segments.\n     * This factory method does not connect with `allPrevSegments`.\n     * But this inherits `reachable` flag.\n     * @param {string} id An identifier.\n     * @param {CodePathSegment[]} allPrevSegments An array of the previous segments.\n     * @returns {CodePathSegment} The created segment.\n     */\n    static newDisconnected(id, allPrevSegments) {\n        return new CodePathSegment(id, [], allPrevSegments.some(isReachable));\n    }\n\n    /**\n     * Makes a given segment being used.\n     *\n     * And this function registers the segment into the previous segments as a next.\n     * @param {CodePathSegment} segment A segment to mark.\n     * @returns {void}\n     */\n    static markUsed(segment) {\n        if (segment.internal.used) {\n            return;\n        }\n        segment.internal.used = true;\n\n        let i;\n\n        if (segment.reachable) {\n            for (i = 0; i < segment.allPrevSegments.length; ++i) {\n                const prevSegment = segment.allPrevSegments[i];\n\n                prevSegment.allNextSegments.push(segment);\n                prevSegment.nextSegments.push(segment);\n            }\n        } else {\n            for (i = 0; i < segment.allPrevSegments.length; ++i) {\n                segment.allPrevSegments[i].allNextSegments.push(segment);\n            }\n        }\n    }\n\n    /**\n     * Marks a previous segment as looped.\n     * @param {CodePathSegment} segment A segment.\n     * @param {CodePathSegment} prevSegment A previous segment to mark.\n     * @returns {void}\n     */\n    static markPrevSegmentAsLooped(segment, prevSegment) {\n        segment.internal.loopedPrevSegments.push(prevSegment);\n    }\n\n    /**\n     * Replaces unused segments with the previous segments of each unused segment.\n     * @param {CodePathSegment[]} segments An array of segments to replace.\n     * @returns {CodePathSegment[]} The replaced array.\n     */\n    static flattenUnusedSegments(segments) {\n        const done = Object.create(null);\n        const retv = [];\n\n        for (let i = 0; i < segments.length; ++i) {\n            const segment = segments[i];\n\n            // Ignores duplicated.\n            if (done[segment.id]) {\n                continue;\n            }\n\n            // Use previous segments if unused.\n            if (!segment.internal.used) {\n                for (let j = 0; j < segment.allPrevSegments.length; ++j) {\n                    const prevSegment = segment.allPrevSegments[j];\n\n                    if (!done[prevSegment.id]) {\n                        done[prevSegment.id] = true;\n                        retv.push(prevSegment);\n                    }\n                }\n            } else {\n                done[segment.id] = true;\n                retv.push(segment);\n            }\n        }\n\n        return retv;\n    }\n}\n\nmodule.exports = CodePathSegment;\n/lib/linter/index.js\"use strict\";\n\nconst { Linter } = require(\"./linter\");\nconst interpolate = require(\"./interpolate\");\nconst SourceCodeFixer = require(\"./source-code-fixer\");\n\nmodule.exports = {\n    Linter,\n\n    // For testers.\n    SourceCodeFixer,\n    interpolate\n};\n/lib/rules/no-extend-native.js\u0019/**\n * @fileoverview Rule to flag adding properties to native object's prototypes.\n * @author David Nelson\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\nconst globals = require(\"globals\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow extending native types\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-extend-native\"\n        },\n\n        schema: [\n            {\n                type: \"object\",\n                properties: {\n                    exceptions: {\n                        type: \"array\",\n                        items: {\n                            type: \"string\"\n                        },\n                        uniqueItems: true\n                    }\n                },\n                additionalProperties: false\n            }\n        ],\n\n        messages: {\n            unexpected: \"{{builtin}} prototype is read only, properties should not be added.\"\n        }\n    },\n\n    create(context) {\n\n        const config = context.options[0] || {};\n        const exceptions = new Set(config.exceptions || []);\n        const modifiedBuiltins = new Set(\n            Object.keys(globals.builtin)\n                .filter(builtin => builtin[0].toUpperCase() === builtin[0])\n                .filter(builtin => !exceptions.has(builtin))\n        );\n\n        /**\n         * Reports a lint error for the given node.\n         * @param {ASTNode} node The node to report.\n         * @param {string} builtin The name of the native builtin being extended.\n         * @returns {void}\n         */\n        function reportNode(node, builtin) {\n            context.report({\n                node,\n                messageId: \"unexpected\",\n                data: {\n                    builtin\n                }\n            });\n        }\n\n        /**\n         * Check to see if the `prototype` property of the given object\n         * identifier node is being accessed.\n         * @param {ASTNode} identifierNode The Identifier representing the object\n         * to check.\n         * @returns {boolean} True if the identifier is the object of a\n         * MemberExpression and its `prototype` property is being accessed,\n         * false otherwise.\n         */\n        function isPrototypePropertyAccessed(identifierNode) {\n            return Boolean(\n                identifierNode &&\n                identifierNode.parent &&\n                identifierNode.parent.type === \"MemberExpression\" &&\n                identifierNode.parent.object === identifierNode &&\n                astUtils.getStaticPropertyName(identifierNode.parent) === \"prototype\"\n            );\n        }\n\n        /**\n         * Check if it's an assignment to the property of the given node.\n         * Example: `*.prop = 0` // the `*` is the given node.\n         * @param {ASTNode} node The node to check.\n         * @returns {boolean} True if an assignment to the property of the node.\n         */\n        function isAssigningToPropertyOf(node) {\n            return (\n                node.parent.type === \"MemberExpression\" &&\n                node.parent.object === node &&\n                node.parent.parent.type === \"AssignmentExpression\" &&\n                node.parent.parent.left === node.parent\n            );\n        }\n\n        /**\n         * Checks if the given node is at the first argument of the method call of `Object.defineProperty()` or `Object.defineProperties()`.\n         * @param {ASTNode} node The node to check.\n         * @returns {boolean} True if the node is at the first argument of the method call of `Object.defineProperty()` or `Object.defineProperties()`.\n         */\n        function isInDefinePropertyCall(node) {\n            return (\n                node.parent.type === \"CallExpression\" &&\n                node.parent.arguments[0] === node &&\n                astUtils.isSpecificMemberAccess(node.parent.callee, \"Object\", /^definePropert(?:y|ies)$/u)\n            );\n        }\n\n        /**\n         * Check to see if object prototype access is part of a prototype\n         * extension. There are three ways a prototype can be extended:\n         * 1. Assignment to prototype property (Object.prototype.foo = 1)\n         * 2. Object.defineProperty()/Object.defineProperties() on a prototype\n         * If prototype extension is detected, report the AssignmentExpression\n         * or CallExpression node.\n         * @param {ASTNode} identifierNode The Identifier representing the object\n         * which prototype is being accessed and possibly extended.\n         * @returns {void}\n         */\n        function checkAndReportPrototypeExtension(identifierNode) {\n            if (!isPrototypePropertyAccessed(identifierNode)) {\n                return; // This is not `*.prototype` access.\n            }\n\n            /*\n             * `identifierNode.parent` is a MemberExpression `*.prototype`.\n             * If it's an optional member access, it may be wrapped by a `ChainExpression` node.\n             */\n            const prototypeNode =\n                identifierNode.parent.parent.type === \"ChainExpression\"\n                    ? identifierNode.parent.parent\n                    : identifierNode.parent;\n\n            if (isAssigningToPropertyOf(prototypeNode)) {\n\n                // `*.prototype` -> MemberExpression -> AssignmentExpression\n                reportNode(prototypeNode.parent.parent, identifierNode.name);\n            } else if (isInDefinePropertyCall(prototypeNode)) {\n\n                // `*.prototype` -> CallExpression\n                reportNode(prototypeNode.parent, identifierNode.name);\n            }\n        }\n\n        return {\n\n            \"Program:exit\"() {\n                const globalScope = context.getScope();\n\n                modifiedBuiltins.forEach(builtin => {\n                    const builtinVar = globalScope.set.get(builtin);\n\n                    if (builtinVar && builtinVar.references) {\n                        builtinVar.references\n                            .map(ref => ref.identifier)\n                            .forEach(checkAndReportPrototypeExtension);\n                    }\n                });\n            }\n        };\n\n    }\n};\n/lib/rules/no-regex-spaces.js\u0017/**\n * @fileoverview Rule to count multiple spaces in regular expressions\n * @author Matt DuVall <http://www.mattduvall.com/>\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\nconst regexpp = require(\"regexpp\");\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\nconst regExpParser = new regexpp.RegExpParser();\nconst DOUBLE_SPACE = / {2}/u;\n\n/**\n * Check if node is a string\n * @param {ASTNode} node node to evaluate\n * @returns {boolean} True if its a string\n * @private\n */\nfunction isString(node) {\n    return node && node.type === \"Literal\" && typeof node.value === \"string\";\n}\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow multiple spaces in regular expressions\",\n            recommended: true,\n            url: \"https://eslint.org/docs/rules/no-regex-spaces\"\n        },\n\n        schema: [],\n        fixable: \"code\",\n\n        messages: {\n            multipleSpaces: \"Spaces are hard to count. Use {{{length}}}.\"\n        }\n    },\n\n    create(context) {\n\n        /**\n         * Validate regular expression\n         * @param {ASTNode} nodeToReport Node to report.\n         * @param {string} pattern Regular expression pattern to validate.\n         * @param {string} rawPattern Raw representation of the pattern in the source code.\n         * @param {number} rawPatternStartRange Start range of the pattern in the source code.\n         * @param {string} flags Regular expression flags.\n         * @returns {void}\n         * @private\n         */\n        function checkRegex(nodeToReport, pattern, rawPattern, rawPatternStartRange, flags) {\n\n            // Skip if there are no consecutive spaces in the source code, to avoid reporting e.g., RegExp(' \\ ').\n            if (!DOUBLE_SPACE.test(rawPattern)) {\n                return;\n            }\n\n            const characterClassNodes = [];\n            let regExpAST;\n\n            try {\n                regExpAST = regExpParser.parsePattern(pattern, 0, pattern.length, flags.includes(\"u\"));\n            } catch {\n\n                // Ignore regular expressions with syntax errors\n                return;\n            }\n\n            regexpp.visitRegExpAST(regExpAST, {\n                onCharacterClassEnter(ccNode) {\n                    characterClassNodes.push(ccNode);\n                }\n            });\n\n            const spacesPattern = /( {2,})(?: [+*{?]|[^+*{?]|$)/gu;\n            let match;\n\n            while ((match = spacesPattern.exec(pattern))) {\n                const { 1: { length }, index } = match;\n\n                // Report only consecutive spaces that are not in character classes.\n                if (\n                    characterClassNodes.every(({ start, end }) => index < start || end <= index)\n                ) {\n                    context.report({\n                        node: nodeToReport,\n                        messageId: \"multipleSpaces\",\n                        data: { length },\n                        fix(fixer) {\n                            if (pattern !== rawPattern) {\n                                return null;\n                            }\n                            return fixer.replaceTextRange(\n                                [rawPatternStartRange + index, rawPatternStartRange + index + length],\n                                ` {${length}}`\n                            );\n                        }\n                    });\n\n                    // Report only the first occurrence of consecutive spaces\n                    return;\n                }\n            }\n        }\n\n        /**\n         * Validate regular expression literals\n         * @param {ASTNode} node node to validate\n         * @returns {void}\n         * @private\n         */\n        function checkLiteral(node) {\n            if (node.regex) {\n                const pattern = node.regex.pattern;\n                const rawPattern = node.raw.slice(1, node.raw.lastIndexOf(\"/\"));\n                const rawPatternStartRange = node.range[0] + 1;\n                const flags = node.regex.flags;\n\n                checkRegex(\n                    node,\n                    pattern,\n                    rawPattern,\n                    rawPatternStartRange,\n                    flags\n                );\n            }\n        }\n\n        /**\n         * Validate strings passed to the RegExp constructor\n         * @param {ASTNode} node node to validate\n         * @returns {void}\n         * @private\n         */\n        function checkFunction(node) {\n            const scope = context.getScope();\n            const regExpVar = astUtils.getVariableByName(scope, \"RegExp\");\n            const shadowed = regExpVar && regExpVar.defs.length > 0;\n            const patternNode = node.arguments[0];\n            const flagsNode = node.arguments[1];\n\n            if (node.callee.type === \"Identifier\" && node.callee.name === \"RegExp\" && isString(patternNode) && !shadowed) {\n                const pattern = patternNode.value;\n                const rawPattern = patternNode.raw.slice(1, -1);\n                const rawPatternStartRange = patternNode.range[0] + 1;\n                const flags = isString(flagsNode) ? flagsNode.value : \"\";\n\n                checkRegex(\n                    node,\n                    pattern,\n                    rawPattern,\n                    rawPatternStartRange,\n                    flags\n                );\n            }\n        }\n\n        return {\n            Literal: checkLiteral,\n            CallExpression: checkFunction,\n            NewExpression: checkFunction\n        };\n    }\n};\n\"/lib/rules/prefer-destructuring.js+/**\n * @fileoverview Prefer destructuring from arrays and objects\n * @author Alex LaFroscia\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\nconst PRECEDENCE_OF_ASSIGNMENT_EXPR = astUtils.getPrecedence({ type: \"AssignmentExpression\" });\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"require destructuring from arrays and/or objects\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/prefer-destructuring\"\n        },\n\n        fixable: \"code\",\n\n        schema: [\n            {\n\n                /*\n                 * old support {array: Boolean, object: Boolean}\n                 * new support {VariableDeclarator: {}, AssignmentExpression: {}}\n                 */\n                oneOf: [\n                    {\n                        type: \"object\",\n                        properties: {\n                            VariableDeclarator: {\n                                type: \"object\",\n                                properties: {\n                                    array: {\n                                        type: \"boolean\"\n                                    },\n                                    object: {\n                                        type: \"boolean\"\n                                    }\n                                },\n                                additionalProperties: false\n                            },\n                            AssignmentExpression: {\n                                type: \"object\",\n                                properties: {\n                                    array: {\n                                        type: \"boolean\"\n                                    },\n                                    object: {\n                                        type: \"boolean\"\n                                    }\n                                },\n                                additionalProperties: false\n                            }\n                        },\n                        additionalProperties: false\n                    },\n                    {\n                        type: \"object\",\n                        properties: {\n                            array: {\n                                type: \"boolean\"\n                            },\n                            object: {\n                                type: \"boolean\"\n                            }\n                        },\n                        additionalProperties: false\n                    }\n                ]\n            },\n            {\n                type: \"object\",\n                properties: {\n                    enforceForRenamedProperties: {\n                        type: \"boolean\"\n                    }\n                },\n                additionalProperties: false\n            }\n        ],\n\n        messages: {\n            preferDestructuring: \"Use {{type}} destructuring.\"\n        }\n    },\n    create(context) {\n\n        const enabledTypes = context.options[0];\n        const enforceForRenamedProperties = context.options[1] && context.options[1].enforceForRenamedProperties;\n        let normalizedOptions = {\n            VariableDeclarator: { array: true, object: true },\n            AssignmentExpression: { array: true, object: true }\n        };\n\n        if (enabledTypes) {\n            normalizedOptions = typeof enabledTypes.array !== \"undefined\" || typeof enabledTypes.object !== \"undefined\"\n                ? { VariableDeclarator: enabledTypes, AssignmentExpression: enabledTypes }\n                : enabledTypes;\n        }\n\n        //--------------------------------------------------------------------------\n        // Helpers\n        //--------------------------------------------------------------------------\n\n        /**\n         * Checks if destructuring type should be checked.\n         * @param {string} nodeType \"AssignmentExpression\" or \"VariableDeclarator\"\n         * @param {string} destructuringType \"array\" or \"object\"\n         * @returns {boolean} `true` if the destructuring type should be checked for the given node\n         */\n        function shouldCheck(nodeType, destructuringType) {\n            return normalizedOptions &&\n                normalizedOptions[nodeType] &&\n                normalizedOptions[nodeType][destructuringType];\n        }\n\n        /**\n         * Determines if the given node is accessing an array index\n         *\n         * This is used to differentiate array index access from object property\n         * access.\n         * @param {ASTNode} node the node to evaluate\n         * @returns {boolean} whether or not the node is an integer\n         */\n        function isArrayIndexAccess(node) {\n            return Number.isInteger(node.property.value);\n        }\n\n        /**\n         * Report that the given node should use destructuring\n         * @param {ASTNode} reportNode the node to report\n         * @param {string} type the type of destructuring that should have been done\n         * @param {Function|null} fix the fix function or null to pass to context.report\n         * @returns {void}\n         */\n        function report(reportNode, type, fix) {\n            context.report({\n                node: reportNode,\n                messageId: \"preferDestructuring\",\n                data: { type },\n                fix\n            });\n        }\n\n        /**\n         * Determines if a node should be fixed into object destructuring\n         *\n         * The fixer only fixes the simplest case of object destructuring,\n         * like: `let x = a.x`;\n         *\n         * Assignment expression is not fixed.\n         * Array destructuring is not fixed.\n         * Renamed property is not fixed.\n         * @param {ASTNode} node the node to evaluate\n         * @returns {boolean} whether or not the node should be fixed\n         */\n        function shouldFix(node) {\n            return node.type === \"VariableDeclarator\" &&\n                node.id.type === \"Identifier\" &&\n                node.init.type === \"MemberExpression\" &&\n                !node.init.computed &&\n                node.init.property.type === \"Identifier\" &&\n                node.id.name === node.init.property.name;\n        }\n\n        /**\n         * Fix a node into object destructuring.\n         * This function only handles the simplest case of object destructuring,\n         * see {@link shouldFix}.\n         * @param {SourceCodeFixer} fixer the fixer object\n         * @param {ASTNode} node the node to be fixed.\n         * @returns {Object} a fix for the node\n         */\n        function fixIntoObjectDestructuring(fixer, node) {\n            const rightNode = node.init;\n            const sourceCode = context.getSourceCode();\n\n            // Don't fix if that would remove any comments. Only comments inside `rightNode.object` can be preserved.\n            if (sourceCode.getCommentsInside(node).length > sourceCode.getCommentsInside(rightNode.object).length) {\n                return null;\n            }\n\n            let objectText = sourceCode.getText(rightNode.object);\n\n            if (astUtils.getPrecedence(rightNode.object) < PRECEDENCE_OF_ASSIGNMENT_EXPR) {\n                objectText = `(${objectText})`;\n            }\n\n            return fixer.replaceText(\n                node,\n                `{${rightNode.property.name}} = ${objectText}`\n            );\n        }\n\n        /**\n         * Check that the `prefer-destructuring` rules are followed based on the\n         * given left- and right-hand side of the assignment.\n         *\n         * Pulled out into a separate method so that VariableDeclarators and\n         * AssignmentExpressions can share the same verification logic.\n         * @param {ASTNode} leftNode the left-hand side of the assignment\n         * @param {ASTNode} rightNode the right-hand side of the assignment\n         * @param {ASTNode} reportNode the node to report the error on\n         * @returns {void}\n         */\n        function performCheck(leftNode, rightNode, reportNode) {\n            if (\n                rightNode.type !== \"MemberExpression\" ||\n                rightNode.object.type === \"Super\" ||\n                rightNode.property.type === \"PrivateIdentifier\"\n            ) {\n                return;\n            }\n\n            if (isArrayIndexAccess(rightNode)) {\n                if (shouldCheck(reportNode.type, \"array\")) {\n                    report(reportNode, \"array\", null);\n                }\n                return;\n            }\n\n            const fix = shouldFix(reportNode)\n                ? fixer => fixIntoObjectDestructuring(fixer, reportNode)\n                : null;\n\n            if (shouldCheck(reportNode.type, \"object\") && enforceForRenamedProperties) {\n                report(reportNode, \"object\", fix);\n                return;\n            }\n\n            if (shouldCheck(reportNode.type, \"object\")) {\n                const property = rightNode.property;\n\n                if (\n                    (property.type === \"Literal\" && leftNode.name === property.value) ||\n                    (property.type === \"Identifier\" && leftNode.name === property.name && !rightNode.computed)\n                ) {\n                    report(reportNode, \"object\", fix);\n                }\n            }\n        }\n\n        /**\n         * Check if a given variable declarator is coming from an property access\n         * that should be using destructuring instead\n         * @param {ASTNode} node the variable declarator to check\n         * @returns {void}\n         */\n        function checkVariableDeclarator(node) {\n\n            // Skip if variable is declared without assignment\n            if (!node.init) {\n                return;\n            }\n\n            // We only care about member expressions past this point\n            if (node.init.type !== \"MemberExpression\") {\n                return;\n            }\n\n            performCheck(node.id, node.init, node);\n        }\n\n        /**\n         * Run the `prefer-destructuring` check on an AssignmentExpression\n         * @param {ASTNode} node the AssignmentExpression node\n         * @returns {void}\n         */\n        function checkAssignmentExpression(node) {\n            if (node.operator === \"=\") {\n                performCheck(node.left, node.right, node);\n            }\n        }\n\n        //--------------------------------------------------------------------------\n        // Public\n        //--------------------------------------------------------------------------\n\n        return {\n            VariableDeclarator: checkVariableDeclarator,\n            AssignmentExpression: checkAssignmentExpression\n        };\n    }\n};\n/lib/rules/padded-blocks.js*/**\n * @fileoverview A rule to ensure blank lines within blocks.\n * @author Mathias Schreck <https://github.com/lo1tuma>\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"layout\",\n\n        docs: {\n            description: \"require or disallow padding within blocks\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/padded-blocks\"\n        },\n\n        fixable: \"whitespace\",\n\n        schema: [\n            {\n                oneOf: [\n                    {\n                        enum: [\"always\", \"never\"]\n                    },\n                    {\n                        type: \"object\",\n                        properties: {\n                            blocks: {\n                                enum: [\"always\", \"never\"]\n                            },\n                            switches: {\n                                enum: [\"always\", \"never\"]\n                            },\n                            classes: {\n                                enum: [\"always\", \"never\"]\n                            }\n                        },\n                        additionalProperties: false,\n                        minProperties: 1\n                    }\n                ]\n            },\n            {\n                type: \"object\",\n                properties: {\n                    allowSingleLineBlocks: {\n                        type: \"boolean\"\n                    }\n                },\n                additionalProperties: false\n            }\n        ],\n\n        messages: {\n            alwaysPadBlock: \"Block must be padded by blank lines.\",\n            neverPadBlock: \"Block must not be padded by blank lines.\"\n        }\n    },\n\n    create(context) {\n        const options = {};\n        const typeOptions = context.options[0] || \"always\";\n        const exceptOptions = context.options[1] || {};\n\n        if (typeof typeOptions === \"string\") {\n            const shouldHavePadding = typeOptions === \"always\";\n\n            options.blocks = shouldHavePadding;\n            options.switches = shouldHavePadding;\n            options.classes = shouldHavePadding;\n        } else {\n            if (Object.prototype.hasOwnProperty.call(typeOptions, \"blocks\")) {\n                options.blocks = typeOptions.blocks === \"always\";\n            }\n            if (Object.prototype.hasOwnProperty.call(typeOptions, \"switches\")) {\n                options.switches = typeOptions.switches === \"always\";\n            }\n            if (Object.prototype.hasOwnProperty.call(typeOptions, \"classes\")) {\n                options.classes = typeOptions.classes === \"always\";\n            }\n        }\n\n        if (Object.prototype.hasOwnProperty.call(exceptOptions, \"allowSingleLineBlocks\")) {\n            options.allowSingleLineBlocks = exceptOptions.allowSingleLineBlocks === true;\n        }\n\n        const sourceCode = context.getSourceCode();\n\n        /**\n         * Gets the open brace token from a given node.\n         * @param {ASTNode} node A BlockStatement or SwitchStatement node from which to get the open brace.\n         * @returns {Token} The token of the open brace.\n         */\n        function getOpenBrace(node) {\n            if (node.type === \"SwitchStatement\") {\n                return sourceCode.getTokenBefore(node.cases[0]);\n            }\n\n            if (node.type === \"StaticBlock\") {\n                return sourceCode.getFirstToken(node, { skip: 1 }); // skip the `static` token\n            }\n\n            // `BlockStatement` or `ClassBody`\n            return sourceCode.getFirstToken(node);\n        }\n\n        /**\n         * Checks if the given parameter is a comment node\n         * @param {ASTNode|Token} node An AST node or token\n         * @returns {boolean} True if node is a comment\n         */\n        function isComment(node) {\n            return node.type === \"Line\" || node.type === \"Block\";\n        }\n\n        /**\n         * Checks if there is padding between two tokens\n         * @param {Token} first The first token\n         * @param {Token} second The second token\n         * @returns {boolean} True if there is at least a line between the tokens\n         */\n        function isPaddingBetweenTokens(first, second) {\n            return second.loc.start.line - first.loc.end.line >= 2;\n        }\n\n\n        /**\n         * Checks if the given token has a blank line after it.\n         * @param {Token} token The token to check.\n         * @returns {boolean} Whether or not the token is followed by a blank line.\n         */\n        function getFirstBlockToken(token) {\n            let prev,\n                first = token;\n\n            do {\n                prev = first;\n                first = sourceCode.getTokenAfter(first, { includeComments: true });\n            } while (isComment(first) && first.loc.start.line === prev.loc.end.line);\n\n            return first;\n        }\n\n        /**\n         * Checks if the given token is preceded by a blank line.\n         * @param {Token} token The token to check\n         * @returns {boolean} Whether or not the token is preceded by a blank line\n         */\n        function getLastBlockToken(token) {\n            let last = token,\n                next;\n\n            do {\n                next = last;\n                last = sourceCode.getTokenBefore(last, { includeComments: true });\n            } while (isComment(last) && last.loc.end.line === next.loc.start.line);\n\n            return last;\n        }\n\n        /**\n         * Checks if a node should be padded, according to the rule config.\n         * @param {ASTNode} node The AST node to check.\n         * @throws {Error} (Unreachable)\n         * @returns {boolean} True if the node should be padded, false otherwise.\n         */\n        function requirePaddingFor(node) {\n            switch (node.type) {\n                case \"BlockStatement\":\n                case \"StaticBlock\":\n                    return options.blocks;\n                case \"SwitchStatement\":\n                    return options.switches;\n                case \"ClassBody\":\n                    return options.classes;\n\n                /* istanbul ignore next */\n                default:\n                    throw new Error(\"unreachable\");\n            }\n        }\n\n        /**\n         * Checks the given BlockStatement node to be padded if the block is not empty.\n         * @param {ASTNode} node The AST node of a BlockStatement.\n         * @returns {void} undefined.\n         */\n        function checkPadding(node) {\n            const openBrace = getOpenBrace(node),\n                firstBlockToken = getFirstBlockToken(openBrace),\n                tokenBeforeFirst = sourceCode.getTokenBefore(firstBlockToken, { includeComments: true }),\n                closeBrace = sourceCode.getLastToken(node),\n                lastBlockToken = getLastBlockToken(closeBrace),\n                tokenAfterLast = sourceCode.getTokenAfter(lastBlockToken, { includeComments: true }),\n                blockHasTopPadding = isPaddingBetweenTokens(tokenBeforeFirst, firstBlockToken),\n                blockHasBottomPadding = isPaddingBetweenTokens(lastBlockToken, tokenAfterLast);\n\n            if (options.allowSingleLineBlocks && astUtils.isTokenOnSameLine(tokenBeforeFirst, tokenAfterLast)) {\n                return;\n            }\n\n            if (requirePaddingFor(node)) {\n\n                if (!blockHasTopPadding) {\n                    context.report({\n                        node,\n                        loc: {\n                            start: tokenBeforeFirst.loc.start,\n                            end: firstBlockToken.loc.start\n                        },\n                        fix(fixer) {\n                            return fixer.insertTextAfter(tokenBeforeFirst, \"\\n\");\n                        },\n                        messageId: \"alwaysPadBlock\"\n                    });\n                }\n                if (!blockHasBottomPadding) {\n                    context.report({\n                        node,\n                        loc: {\n                            end: tokenAfterLast.loc.start,\n                            start: lastBlockToken.loc.end\n                        },\n                        fix(fixer) {\n                            return fixer.insertTextBefore(tokenAfterLast, \"\\n\");\n                        },\n                        messageId: \"alwaysPadBlock\"\n                    });\n                }\n            } else {\n                if (blockHasTopPadding) {\n\n                    context.report({\n                        node,\n                        loc: {\n                            start: tokenBeforeFirst.loc.start,\n                            end: firstBlockToken.loc.start\n                        },\n                        fix(fixer) {\n                            return fixer.replaceTextRange([tokenBeforeFirst.range[1], firstBlockToken.range[0] - firstBlockToken.loc.start.column], \"\\n\");\n                        },\n                        messageId: \"neverPadBlock\"\n                    });\n                }\n\n                if (blockHasBottomPadding) {\n\n                    context.report({\n                        node,\n                        loc: {\n                            end: tokenAfterLast.loc.start,\n                            start: lastBlockToken.loc.end\n                        },\n                        messageId: \"neverPadBlock\",\n                        fix(fixer) {\n                            return fixer.replaceTextRange([lastBlockToken.range[1], tokenAfterLast.range[0] - tokenAfterLast.loc.start.column], \"\\n\");\n                        }\n                    });\n                }\n            }\n        }\n\n        const rule = {};\n\n        if (Object.prototype.hasOwnProperty.call(options, \"switches\")) {\n            rule.SwitchStatement = function(node) {\n                if (node.cases.length === 0) {\n                    return;\n                }\n                checkPadding(node);\n            };\n        }\n\n        if (Object.prototype.hasOwnProperty.call(options, \"blocks\")) {\n            rule.BlockStatement = function(node) {\n                if (node.body.length === 0) {\n                    return;\n                }\n                checkPadding(node);\n            };\n            rule.StaticBlock = rule.BlockStatement;\n        }\n\n        if (Object.prototype.hasOwnProperty.call(options, \"classes\")) {\n            rule.ClassBody = function(node) {\n                if (node.body.length === 0) {\n                    return;\n                }\n                checkPadding(node);\n            };\n        }\n\n        return rule;\n    }\n};\n/lib/rules/no-setter-return.js\u001b/**\n * @fileoverview Rule to disallow returning values from setters\n * @author Milos Djermanovic\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\nconst { findVariable } = require(\"eslint-utils\");\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\n/**\n * Determines whether the given identifier node is a reference to a global variable.\n * @param {ASTNode} node `Identifier` node to check.\n * @param {Scope} scope Scope to which the node belongs.\n * @returns {boolean} True if the identifier is a reference to a global variable.\n */\nfunction isGlobalReference(node, scope) {\n    const variable = findVariable(scope, node);\n\n    return variable !== null && variable.scope.type === \"global\" && variable.defs.length === 0;\n}\n\n/**\n * Determines whether the given node is an argument of the specified global method call, at the given `index` position.\n * E.g., for given `index === 1`, this function checks for `objectName.methodName(foo, node)`, where objectName is a global variable.\n * @param {ASTNode} node The node to check.\n * @param {Scope} scope Scope to which the node belongs.\n * @param {string} objectName Name of the global object.\n * @param {string} methodName Name of the method.\n * @param {number} index The given position.\n * @returns {boolean} `true` if the node is argument at the given position.\n */\nfunction isArgumentOfGlobalMethodCall(node, scope, objectName, methodName, index) {\n    const callNode = node.parent;\n\n    return callNode.type === \"CallExpression\" &&\n        callNode.arguments[index] === node &&\n        astUtils.isSpecificMemberAccess(callNode.callee, objectName, methodName) &&\n        isGlobalReference(astUtils.skipChainExpression(callNode.callee).object, scope);\n}\n\n/**\n * Determines whether the given node is used as a property descriptor.\n * @param {ASTNode} node The node to check.\n * @param {Scope} scope Scope to which the node belongs.\n * @returns {boolean} `true` if the node is a property descriptor.\n */\nfunction isPropertyDescriptor(node, scope) {\n    if (\n        isArgumentOfGlobalMethodCall(node, scope, \"Object\", \"defineProperty\", 2) ||\n        isArgumentOfGlobalMethodCall(node, scope, \"Reflect\", \"defineProperty\", 2)\n    ) {\n        return true;\n    }\n\n    const parent = node.parent;\n\n    if (\n        parent.type === \"Property\" &&\n        parent.value === node\n    ) {\n        const grandparent = parent.parent;\n\n        if (\n            grandparent.type === \"ObjectExpression\" &&\n            (\n                isArgumentOfGlobalMethodCall(grandparent, scope, \"Object\", \"create\", 1) ||\n                isArgumentOfGlobalMethodCall(grandparent, scope, \"Object\", \"defineProperties\", 1)\n            )\n        ) {\n            return true;\n        }\n    }\n\n    return false;\n}\n\n/**\n * Determines whether the given function node is used as a setter function.\n * @param {ASTNode} node The node to check.\n * @param {Scope} scope Scope to which the node belongs.\n * @returns {boolean} `true` if the node is a setter.\n */\nfunction isSetter(node, scope) {\n    const parent = node.parent;\n\n    if (\n        (parent.type === \"Property\" || parent.type === \"MethodDefinition\") &&\n        parent.kind === \"set\" &&\n        parent.value === node\n    ) {\n\n        // Setter in an object literal or in a class\n        return true;\n    }\n\n    if (\n        parent.type === \"Property\" &&\n        parent.value === node &&\n        astUtils.getStaticPropertyName(parent) === \"set\" &&\n        parent.parent.type === \"ObjectExpression\" &&\n        isPropertyDescriptor(parent.parent, scope)\n    ) {\n\n        // Setter in a property descriptor\n        return true;\n    }\n\n    return false;\n}\n\n/**\n * Finds function's outer scope.\n * @param {Scope} scope Function's own scope.\n * @returns {Scope} Function's outer scope.\n */\nfunction getOuterScope(scope) {\n    const upper = scope.upper;\n\n    if (upper.type === \"function-expression-name\") {\n        return upper.upper;\n    }\n\n    return upper;\n}\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"problem\",\n\n        docs: {\n            description: \"disallow returning values from setters\",\n            recommended: true,\n            url: \"https://eslint.org/docs/rules/no-setter-return\"\n        },\n\n        schema: [],\n\n        messages: {\n            returnsValue: \"Setter cannot return a value.\"\n        }\n    },\n\n    create(context) {\n        let funcInfo = null;\n\n        /**\n         * Creates and pushes to the stack a function info object for the given function node.\n         * @param {ASTNode} node The function node.\n         * @returns {void}\n         */\n        function enterFunction(node) {\n            const outerScope = getOuterScope(context.getScope());\n\n            funcInfo = {\n                upper: funcInfo,\n                isSetter: isSetter(node, outerScope)\n            };\n        }\n\n        /**\n         * Pops the current function info object from the stack.\n         * @returns {void}\n         */\n        function exitFunction() {\n            funcInfo = funcInfo.upper;\n        }\n\n        /**\n         * Reports the given node.\n         * @param {ASTNode} node Node to report.\n         * @returns {void}\n         */\n        function report(node) {\n            context.report({ node, messageId: \"returnsValue\" });\n        }\n\n        return {\n\n            /*\n             * Function declarations cannot be setters, but we still have to track them in the `funcInfo` stack to avoid\n             * false positives, because a ReturnStatement node can belong to a function declaration inside a setter.\n             *\n             * Note: A previously declared function can be referenced and actually used as a setter in a property descriptor,\n             * but that's out of scope for this rule.\n             */\n            FunctionDeclaration: enterFunction,\n            FunctionExpression: enterFunction,\n            ArrowFunctionExpression(node) {\n                enterFunction(node);\n\n                if (funcInfo.isSetter && node.expression) {\n\n                    // { set: foo => bar } property descriptor. Report implicit return 'bar' as the equivalent for a return statement.\n                    report(node.body);\n                }\n            },\n\n            \"FunctionDeclaration:exit\": exitFunction,\n            \"FunctionExpression:exit\": exitFunction,\n            \"ArrowFunctionExpression:exit\": exitFunction,\n\n            ReturnStatement(node) {\n\n                // Global returns (e.g., at the top level of a Node module) don't have `funcInfo`.\n                if (funcInfo && funcInfo.isSetter && node.argument) {\n                    report(node);\n                }\n            }\n        };\n    }\n};\n/lib/rules/no-extra-label.js\u0014'/**\n * @fileoverview Rule to disallow unnecessary labels\n * @author Toru Nagashima\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow unnecessary labels\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-extra-label\"\n        },\n\n        schema: [],\n        fixable: \"code\",\n\n        messages: {\n            unexpected: \"This label '{{name}}' is unnecessary.\"\n        }\n    },\n\n    create(context) {\n        const sourceCode = context.getSourceCode();\n        let scopeInfo = null;\n\n        /**\n         * Creates a new scope with a breakable statement.\n         * @param {ASTNode} node A node to create. This is a BreakableStatement.\n         * @returns {void}\n         */\n        function enterBreakableStatement(node) {\n            scopeInfo = {\n                label: node.parent.type === \"LabeledStatement\" ? node.parent.label : null,\n                breakable: true,\n                upper: scopeInfo\n            };\n        }\n\n        /**\n         * Removes the top scope of the stack.\n         * @returns {void}\n         */\n        function exitBreakableStatement() {\n            scopeInfo = scopeInfo.upper;\n        }\n\n        /**\n         * Creates a new scope with a labeled statement.\n         *\n         * This ignores it if the body is a breakable statement.\n         * In this case it's handled in the `enterBreakableStatement` function.\n         * @param {ASTNode} node A node to create. This is a LabeledStatement.\n         * @returns {void}\n         */\n        function enterLabeledStatement(node) {\n            if (!astUtils.isBreakableStatement(node.body)) {\n                scopeInfo = {\n                    label: node.label,\n                    breakable: false,\n                    upper: scopeInfo\n                };\n            }\n        }\n\n        /**\n         * Removes the top scope of the stack.\n         *\n         * This ignores it if the body is a breakable statement.\n         * In this case it's handled in the `exitBreakableStatement` function.\n         * @param {ASTNode} node A node. This is a LabeledStatement.\n         * @returns {void}\n         */\n        function exitLabeledStatement(node) {\n            if (!astUtils.isBreakableStatement(node.body)) {\n                scopeInfo = scopeInfo.upper;\n            }\n        }\n\n        /**\n         * Reports a given control node if it's unnecessary.\n         * @param {ASTNode} node A node. This is a BreakStatement or a\n         *      ContinueStatement.\n         * @returns {void}\n         */\n        function reportIfUnnecessary(node) {\n            if (!node.label) {\n                return;\n            }\n\n            const labelNode = node.label;\n\n            for (let info = scopeInfo; info !== null; info = info.upper) {\n                if (info.breakable || info.label && info.label.name === labelNode.name) {\n                    if (info.breakable && info.label && info.label.name === labelNode.name) {\n                        context.report({\n                            node: labelNode,\n                            messageId: \"unexpected\",\n                            data: labelNode,\n                            fix(fixer) {\n                                const breakOrContinueToken = sourceCode.getFirstToken(node);\n\n                                if (sourceCode.commentsExistBetween(breakOrContinueToken, labelNode)) {\n                                    return null;\n                                }\n\n                                return fixer.removeRange([breakOrContinueToken.range[1], labelNode.range[1]]);\n                            }\n                        });\n                    }\n                    return;\n                }\n            }\n        }\n\n        return {\n            WhileStatement: enterBreakableStatement,\n            \"WhileStatement:exit\": exitBreakableStatement,\n            DoWhileStatement: enterBreakableStatement,\n            \"DoWhileStatement:exit\": exitBreakableStatement,\n            ForStatement: enterBreakableStatement,\n            \"ForStatement:exit\": exitBreakableStatement,\n            ForInStatement: enterBreakableStatement,\n            \"ForInStatement:exit\": exitBreakableStatement,\n            ForOfStatement: enterBreakableStatement,\n            \"ForOfStatement:exit\": exitBreakableStatement,\n            SwitchStatement: enterBreakableStatement,\n            \"SwitchStatement:exit\": exitBreakableStatement,\n            LabeledStatement: enterLabeledStatement,\n            \"LabeledStatement:exit\": exitLabeledStatement,\n            BreakStatement: reportIfUnnecessary,\n            ContinueStatement: reportIfUnnecessary\n        };\n    }\n};\n+/lib/source-code/token-store/skip-cursor.js\u0004/**\n * @fileoverview Define the cursor which ignores the first few tokens.\n * @author Toru Nagashima\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst DecorativeCursor = require(\"./decorative-cursor\");\n\n//------------------------------------------------------------------------------\n// Exports\n//------------------------------------------------------------------------------\n\n/**\n * The decorative cursor which ignores the first few tokens.\n */\nmodule.exports = class SkipCursor extends DecorativeCursor {\n\n    /**\n     * Initializes this cursor.\n     * @param {Cursor} cursor The cursor to be decorated.\n     * @param {number} count The count of tokens this cursor skips.\n     */\n    constructor(cursor, count) {\n        super(cursor);\n        this.count = count;\n    }\n\n    /** @inheritdoc */\n    moveNext() {\n        while (this.count > 0) {\n            this.count -= 1;\n            if (!super.moveNext()) {\n                return false;\n            }\n        }\n        return super.moveNext();\n    }\n};\n&/lib/rules/no-useless-backreference.js\u001d/**\n * @fileoverview Rule to disallow useless backreferences in regular expressions\n * @author Milos Djermanovic\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst { CALL, CONSTRUCT, ReferenceTracker, getStringIfConstant } = require(\"eslint-utils\");\nconst { RegExpParser, visitRegExpAST } = require(\"regexpp\");\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\nconst parser = new RegExpParser();\n\n/**\n * Finds the path from the given `regexpp` AST node to the root node.\n * @param {regexpp.Node} node Node.\n * @returns {regexpp.Node[]} Array that starts with the given node and ends with the root node.\n */\nfunction getPathToRoot(node) {\n    const path = [];\n    let current = node;\n\n    do {\n        path.push(current);\n        current = current.parent;\n    } while (current);\n\n    return path;\n}\n\n/**\n * Determines whether the given `regexpp` AST node is a lookaround node.\n * @param {regexpp.Node} node Node.\n * @returns {boolean} `true` if it is a lookaround node.\n */\nfunction isLookaround(node) {\n    return node.type === \"Assertion\" &&\n        (node.kind === \"lookahead\" || node.kind === \"lookbehind\");\n}\n\n/**\n * Determines whether the given `regexpp` AST node is a negative lookaround node.\n * @param {regexpp.Node} node Node.\n * @returns {boolean} `true` if it is a negative lookaround node.\n */\nfunction isNegativeLookaround(node) {\n    return isLookaround(node) && node.negate;\n}\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"problem\",\n\n        docs: {\n            description: \"disallow useless backreferences in regular expressions\",\n            recommended: true,\n            url: \"https://eslint.org/docs/rules/no-useless-backreference\"\n        },\n\n        schema: [],\n\n        messages: {\n            nested: \"Backreference '{{ bref }}' will be ignored. It references group '{{ group }}' from within that group.\",\n            forward: \"Backreference '{{ bref }}' will be ignored. It references group '{{ group }}' which appears later in the pattern.\",\n            backward: \"Backreference '{{ bref }}' will be ignored. It references group '{{ group }}' which appears before in the same lookbehind.\",\n            disjunctive: \"Backreference '{{ bref }}' will be ignored. It references group '{{ group }}' which is in another alternative.\",\n            intoNegativeLookaround: \"Backreference '{{ bref }}' will be ignored. It references group '{{ group }}' which is in a negative lookaround.\"\n        }\n    },\n\n    create(context) {\n\n        /**\n         * Checks and reports useless backreferences in the given regular expression.\n         * @param {ASTNode} node Node that represents regular expression. A regex literal or RegExp constructor call.\n         * @param {string} pattern Regular expression pattern.\n         * @param {string} flags Regular expression flags.\n         * @returns {void}\n         */\n        function checkRegex(node, pattern, flags) {\n            let regExpAST;\n\n            try {\n                regExpAST = parser.parsePattern(pattern, 0, pattern.length, flags.includes(\"u\"));\n            } catch {\n\n                // Ignore regular expressions with syntax errors\n                return;\n            }\n\n            visitRegExpAST(regExpAST, {\n                onBackreferenceEnter(bref) {\n                    const group = bref.resolved,\n                        brefPath = getPathToRoot(bref),\n                        groupPath = getPathToRoot(group);\n                    let messageId = null;\n\n                    if (brefPath.includes(group)) {\n\n                        // group is bref's ancestor => bref is nested ('nested reference') => group hasn't matched yet when bref starts to match.\n                        messageId = \"nested\";\n                    } else {\n\n                        // Start from the root to find the lowest common ancestor.\n                        let i = brefPath.length - 1,\n                            j = groupPath.length - 1;\n\n                        do {\n                            i--;\n                            j--;\n                        } while (brefPath[i] === groupPath[j]);\n\n                        const indexOfLowestCommonAncestor = j + 1,\n                            groupCut = groupPath.slice(0, indexOfLowestCommonAncestor),\n                            commonPath = groupPath.slice(indexOfLowestCommonAncestor),\n                            lowestCommonLookaround = commonPath.find(isLookaround),\n                            isMatchingBackward = lowestCommonLookaround && lowestCommonLookaround.kind === \"lookbehind\";\n\n                        if (!isMatchingBackward && bref.end <= group.start) {\n\n                            // bref is left, group is right ('forward reference') => group hasn't matched yet when bref starts to match.\n                            messageId = \"forward\";\n                        } else if (isMatchingBackward && group.end <= bref.start) {\n\n                            // the opposite of the previous when the regex is matching backward in a lookbehind context.\n                            messageId = \"backward\";\n                        } else if (groupCut[groupCut.length - 1].type === \"Alternative\") {\n\n                            // group's and bref's ancestor nodes below the lowest common ancestor are sibling alternatives => they're disjunctive.\n                            messageId = \"disjunctive\";\n                        } else if (groupCut.some(isNegativeLookaround)) {\n\n                            // group is in a negative lookaround which isn't bref's ancestor => group has already failed when bref starts to match.\n                            messageId = \"intoNegativeLookaround\";\n                        }\n                    }\n\n                    if (messageId) {\n                        context.report({\n                            node,\n                            messageId,\n                            data: {\n                                bref: bref.raw,\n                                group: group.raw\n                            }\n                        });\n                    }\n                }\n            });\n        }\n\n        return {\n            \"Literal[regex]\"(node) {\n                const { pattern, flags } = node.regex;\n\n                checkRegex(node, pattern, flags);\n            },\n            Program() {\n                const scope = context.getScope(),\n                    tracker = new ReferenceTracker(scope),\n                    traceMap = {\n                        RegExp: {\n                            [CALL]: true,\n                            [CONSTRUCT]: true\n                        }\n                    };\n\n                for (const { node } of tracker.iterateGlobalReferences(traceMap)) {\n                    const [patternNode, flagsNode] = node.arguments,\n                        pattern = getStringIfConstant(patternNode, scope),\n                        flags = getStringIfConstant(flagsNode, scope);\n\n                    if (typeof pattern === \"string\") {\n                        checkRegex(node, pattern, flags || \"\");\n                    }\n                }\n            }\n        };\n    }\n};\n!/lib/rules/no-unneeded-ternary.js\u001b)/**\n * @fileoverview Rule to flag no-unneeded-ternary\n * @author Gyandeep Singh\n */\n\n\"use strict\";\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n// Operators that always result in a boolean value\nconst BOOLEAN_OPERATORS = new Set([\"==\", \"===\", \"!=\", \"!==\", \">\", \">=\", \"<\", \"<=\", \"in\", \"instanceof\"]);\nconst OPERATOR_INVERSES = {\n    \"==\": \"!=\",\n    \"!=\": \"==\",\n    \"===\": \"!==\",\n    \"!==\": \"===\"\n\n    // Operators like < and >= are not true inverses, since both will return false with NaN.\n};\nconst OR_PRECEDENCE = astUtils.getPrecedence({ type: \"LogicalExpression\", operator: \"||\" });\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow ternary operators when simpler alternatives exist\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-unneeded-ternary\"\n        },\n\n        schema: [\n            {\n                type: \"object\",\n                properties: {\n                    defaultAssignment: {\n                        type: \"boolean\",\n                        default: true\n                    }\n                },\n                additionalProperties: false\n            }\n        ],\n\n        fixable: \"code\",\n\n        messages: {\n            unnecessaryConditionalExpression: \"Unnecessary use of boolean literals in conditional expression.\",\n            unnecessaryConditionalAssignment: \"Unnecessary use of conditional expression for default assignment.\"\n        }\n    },\n\n    create(context) {\n        const options = context.options[0] || {};\n        const defaultAssignment = options.defaultAssignment !== false;\n        const sourceCode = context.getSourceCode();\n\n        /**\n         * Test if the node is a boolean literal\n         * @param {ASTNode} node The node to report.\n         * @returns {boolean} True if the its a boolean literal\n         * @private\n         */\n        function isBooleanLiteral(node) {\n            return node.type === \"Literal\" && typeof node.value === \"boolean\";\n        }\n\n        /**\n         * Creates an expression that represents the boolean inverse of the expression represented by the original node\n         * @param {ASTNode} node A node representing an expression\n         * @returns {string} A string representing an inverted expression\n         */\n        function invertExpression(node) {\n            if (node.type === \"BinaryExpression\" && Object.prototype.hasOwnProperty.call(OPERATOR_INVERSES, node.operator)) {\n                const operatorToken = sourceCode.getFirstTokenBetween(\n                    node.left,\n                    node.right,\n                    token => token.value === node.operator\n                );\n                const text = sourceCode.getText();\n\n                return text.slice(node.range[0],\n                    operatorToken.range[0]) + OPERATOR_INVERSES[node.operator] + text.slice(operatorToken.range[1], node.range[1]);\n            }\n\n            if (astUtils.getPrecedence(node) < astUtils.getPrecedence({ type: \"UnaryExpression\" })) {\n                return `!(${astUtils.getParenthesisedText(sourceCode, node)})`;\n            }\n            return `!${astUtils.getParenthesisedText(sourceCode, node)}`;\n        }\n\n        /**\n         * Tests if a given node always evaluates to a boolean value\n         * @param {ASTNode} node An expression node\n         * @returns {boolean} True if it is determined that the node will always evaluate to a boolean value\n         */\n        function isBooleanExpression(node) {\n            return node.type === \"BinaryExpression\" && BOOLEAN_OPERATORS.has(node.operator) ||\n                node.type === \"UnaryExpression\" && node.operator === \"!\";\n        }\n\n        /**\n         * Test if the node matches the pattern id ? id : expression\n         * @param {ASTNode} node The ConditionalExpression to check.\n         * @returns {boolean} True if the pattern is matched, and false otherwise\n         * @private\n         */\n        function matchesDefaultAssignment(node) {\n            return node.test.type === \"Identifier\" &&\n                   node.consequent.type === \"Identifier\" &&\n                   node.test.name === node.consequent.name;\n        }\n\n        return {\n\n            ConditionalExpression(node) {\n                if (isBooleanLiteral(node.alternate) && isBooleanLiteral(node.consequent)) {\n                    context.report({\n                        node,\n                        messageId: \"unnecessaryConditionalExpression\",\n                        fix(fixer) {\n                            if (node.consequent.value === node.alternate.value) {\n\n                                // Replace `foo ? true : true` with just `true`, but don't replace `foo() ? true : true`\n                                return node.test.type === \"Identifier\" ? fixer.replaceText(node, node.consequent.value.toString()) : null;\n                            }\n                            if (node.alternate.value) {\n\n                                // Replace `foo() ? false : true` with `!(foo())`\n                                return fixer.replaceText(node, invertExpression(node.test));\n                            }\n\n                            // Replace `foo ? true : false` with `foo` if `foo` is guaranteed to be a boolean, or `!!foo` otherwise.\n\n                            return fixer.replaceText(node, isBooleanExpression(node.test) ? astUtils.getParenthesisedText(sourceCode, node.test) : `!${invertExpression(node.test)}`);\n                        }\n                    });\n                } else if (!defaultAssignment && matchesDefaultAssignment(node)) {\n                    context.report({\n                        node,\n                        messageId: \"unnecessaryConditionalAssignment\",\n                        fix: fixer => {\n                            const shouldParenthesizeAlternate =\n                                (\n                                    astUtils.getPrecedence(node.alternate) < OR_PRECEDENCE ||\n                                    astUtils.isCoalesceExpression(node.alternate)\n                                ) &&\n                                !astUtils.isParenthesised(sourceCode, node.alternate);\n                            const alternateText = shouldParenthesizeAlternate\n                                ? `(${sourceCode.getText(node.alternate)})`\n                                : astUtils.getParenthesisedText(sourceCode, node.alternate);\n                            const testText = astUtils.getParenthesisedText(sourceCode, node.test);\n\n                            return fixer.replaceText(node, `${testText} || ${alternateText}`);\n                        }\n                    });\n                }\n            }\n        };\n    }\n};\n$/lib/rules/lines-around-directive.js\u001ef/**\n * @fileoverview Require or disallow newlines around directives.\n * @author Kai Cataldo\n * @deprecated in ESLint v4.0.0\n */\n\n\"use strict\";\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"layout\",\n\n        docs: {\n            description: \"require or disallow newlines around directives\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/lines-around-directive\"\n        },\n\n        schema: [{\n            oneOf: [\n                {\n                    enum: [\"always\", \"never\"]\n                },\n                {\n                    type: \"object\",\n                    properties: {\n                        before: {\n                            enum: [\"always\", \"never\"]\n                        },\n                        after: {\n                            enum: [\"always\", \"never\"]\n                        }\n                    },\n                    additionalProperties: false,\n                    minProperties: 2\n                }\n            ]\n        }],\n\n        fixable: \"whitespace\",\n        messages: {\n            expected: \"Expected newline {{location}} \\\"{{value}}\\\" directive.\",\n            unexpected: \"Unexpected newline {{location}} \\\"{{value}}\\\" directive.\"\n        },\n        deprecated: true,\n        replacedBy: [\"padding-line-between-statements\"]\n    },\n\n    create(context) {\n        const sourceCode = context.getSourceCode();\n        const config = context.options[0] || \"always\";\n        const expectLineBefore = typeof config === \"string\" ? config : config.before;\n        const expectLineAfter = typeof config === \"string\" ? config : config.after;\n\n        //--------------------------------------------------------------------------\n        // Helpers\n        //--------------------------------------------------------------------------\n\n        /**\n         * Check if node is preceded by a blank newline.\n         * @param {ASTNode} node Node to check.\n         * @returns {boolean} Whether or not the passed in node is preceded by a blank newline.\n         */\n        function hasNewlineBefore(node) {\n            const tokenBefore = sourceCode.getTokenBefore(node, { includeComments: true });\n            const tokenLineBefore = tokenBefore ? tokenBefore.loc.end.line : 0;\n\n            return node.loc.start.line - tokenLineBefore >= 2;\n        }\n\n        /**\n         * Gets the last token of a node that is on the same line as the rest of the node.\n         * This will usually be the last token of the node, but it will be the second-to-last token if the node has a trailing\n         * semicolon on a different line.\n         * @param {ASTNode} node A directive node\n         * @returns {Token} The last token of the node on the line\n         */\n        function getLastTokenOnLine(node) {\n            const lastToken = sourceCode.getLastToken(node);\n            const secondToLastToken = sourceCode.getTokenBefore(lastToken);\n\n            return astUtils.isSemicolonToken(lastToken) && lastToken.loc.start.line > secondToLastToken.loc.end.line\n                ? secondToLastToken\n                : lastToken;\n        }\n\n        /**\n         * Check if node is followed by a blank newline.\n         * @param {ASTNode} node Node to check.\n         * @returns {boolean} Whether or not the passed in node is followed by a blank newline.\n         */\n        function hasNewlineAfter(node) {\n            const lastToken = getLastTokenOnLine(node);\n            const tokenAfter = sourceCode.getTokenAfter(lastToken, { includeComments: true });\n\n            return tokenAfter.loc.start.line - lastToken.loc.end.line >= 2;\n        }\n\n        /**\n         * Report errors for newlines around directives.\n         * @param {ASTNode} node Node to check.\n         * @param {string} location Whether the error was found before or after the directive.\n         * @param {boolean} expected Whether or not a newline was expected or unexpected.\n         * @returns {void}\n         */\n        function reportError(node, location, expected) {\n            context.report({\n                node,\n                messageId: expected ? \"expected\" : \"unexpected\",\n                data: {\n                    value: node.expression.value,\n                    location\n                },\n                fix(fixer) {\n                    const lastToken = getLastTokenOnLine(node);\n\n                    if (expected) {\n                        return location === \"before\" ? fixer.insertTextBefore(node, \"\\n\") : fixer.insertTextAfter(lastToken, \"\\n\");\n                    }\n                    return fixer.removeRange(location === \"before\" ? [node.range[0] - 1, node.range[0]] : [lastToken.range[1], lastToken.range[1] + 1]);\n                }\n            });\n        }\n\n        /**\n         * Check lines around directives in node\n         * @param {ASTNode} node node to check\n         * @returns {void}\n         */\n        function checkDirectives(node) {\n            const directives = astUtils.getDirectivePrologue(node);\n\n            if (!directives.length) {\n                return;\n            }\n\n            const firstDirective = directives[0];\n            const leadingComments = sourceCode.getCommentsBefore(firstDirective);\n\n            /*\n             * Only check before the first directive if it is preceded by a comment or if it is at the top of\n             * the file and expectLineBefore is set to \"never\". This is to not force a newline at the top of\n             * the file if there are no comments as well as for compatibility with padded-blocks.\n             */\n            if (leadingComments.length) {\n                if (expectLineBefore === \"always\" && !hasNewlineBefore(firstDirective)) {\n                    reportError(firstDirective, \"before\", true);\n                }\n\n                if (expectLineBefore === \"never\" && hasNewlineBefore(firstDirective)) {\n                    reportError(firstDirective, \"before\", false);\n                }\n            } else if (\n                node.type === \"Program\" &&\n                expectLineBefore === \"never\" &&\n                !leadingComments.length &&\n                hasNewlineBefore(firstDirective)\n            ) {\n                reportError(firstDirective, \"before\", false);\n            }\n\n            const lastDirective = directives[directives.length - 1];\n            const statements = node.type === \"Program\" ? node.body : node.body.body;\n\n            /*\n             * Do not check after the last directive if the body only\n             * contains a directive prologue and isn't followed by a comment to ensure\n             * this rule behaves well with padded-blocks.\n             */\n            if (lastDirective === statements[statements.length - 1] && !lastDirective.trailingComments) {\n                return;\n            }\n\n            if (expectLineAfter === \"always\" && !hasNewlineAfter(lastDirective)) {\n                reportError(lastDirective, \"after\", true);\n            }\n\n            if (expectLineAfter === \"never\" && hasNewlineAfter(lastDirective)) {\n                reportError(lastDirective, \"after\", false);\n            }\n        }\n\n        //--------------------------------------------------------------------------\n        // Public\n        //--------------------------------------------------------------------------\n\n        return {\n            Program: checkDirectives,\n            FunctionDeclaration: checkDirectives,\n            FunctionExpression: checkDirectives,\n            ArrowFunctionExpression: checkDirectives\n        };\n    }\n};\n/lib/rules/no-return-assign.js\n}/**\n * @fileoverview Rule to flag when return statement contains assignment\n * @author Ilya Volodin\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\nconst SENTINEL_TYPE = /^(?:[a-zA-Z]+?Statement|ArrowFunctionExpression|FunctionExpression|ClassExpression)$/u;\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow assignment operators in `return` statements\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-return-assign\"\n        },\n\n        schema: [\n            {\n                enum: [\"except-parens\", \"always\"]\n            }\n        ],\n\n        messages: {\n            returnAssignment: \"Return statement should not contain assignment.\",\n            arrowAssignment: \"Arrow function should not return assignment.\"\n        }\n    },\n\n    create(context) {\n        const always = (context.options[0] || \"except-parens\") !== \"except-parens\";\n        const sourceCode = context.getSourceCode();\n\n        return {\n            AssignmentExpression(node) {\n                if (!always && astUtils.isParenthesised(sourceCode, node)) {\n                    return;\n                }\n\n                let currentChild = node;\n                let parent = currentChild.parent;\n\n                // Find ReturnStatement or ArrowFunctionExpression in ancestors.\n                while (parent && !SENTINEL_TYPE.test(parent.type)) {\n                    currentChild = parent;\n                    parent = parent.parent;\n                }\n\n                // Reports.\n                if (parent && parent.type === \"ReturnStatement\") {\n                    context.report({\n                        node: parent,\n                        messageId: \"returnAssignment\"\n                    });\n                } else if (parent && parent.type === \"ArrowFunctionExpression\" && parent.body === currentChild) {\n                    context.report({\n                        node: parent,\n                        messageId: \"arrowAssignment\"\n                    });\n                }\n            }\n        };\n    }\n};\n/lib/rules/sort-vars.js\u0010&/**\n * @fileoverview Rule to require sorting of variables within a single Variable Declaration block\n * @author Ilya Volodin\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"require variables within the same declaration block to be sorted\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/sort-vars\"\n        },\n\n        schema: [\n            {\n                type: \"object\",\n                properties: {\n                    ignoreCase: {\n                        type: \"boolean\",\n                        default: false\n                    }\n                },\n                additionalProperties: false\n            }\n        ],\n\n        fixable: \"code\",\n\n        messages: {\n            sortVars: \"Variables within the same declaration block should be sorted alphabetically.\"\n        }\n    },\n\n    create(context) {\n\n        const configuration = context.options[0] || {},\n            ignoreCase = configuration.ignoreCase || false,\n            sourceCode = context.getSourceCode();\n\n        return {\n            VariableDeclaration(node) {\n                const idDeclarations = node.declarations.filter(decl => decl.id.type === \"Identifier\");\n                const getSortableName = ignoreCase ? decl => decl.id.name.toLowerCase() : decl => decl.id.name;\n                const unfixable = idDeclarations.some(decl => decl.init !== null && decl.init.type !== \"Literal\");\n                let fixed = false;\n\n                idDeclarations.slice(1).reduce((memo, decl) => {\n                    const lastVariableName = getSortableName(memo),\n                        currentVariableName = getSortableName(decl);\n\n                    if (currentVariableName < lastVariableName) {\n                        context.report({\n                            node: decl,\n                            messageId: \"sortVars\",\n                            fix(fixer) {\n                                if (unfixable || fixed) {\n                                    return null;\n                                }\n                                return fixer.replaceTextRange(\n                                    [idDeclarations[0].range[0], idDeclarations[idDeclarations.length - 1].range[1]],\n                                    idDeclarations\n\n                                        // Clone the idDeclarations array to avoid mutating it\n                                        .slice()\n\n                                        // Sort the array into the desired order\n                                        .sort((declA, declB) => {\n                                            const aName = getSortableName(declA);\n                                            const bName = getSortableName(declB);\n\n                                            return aName > bName ? 1 : -1;\n                                        })\n\n                                        // Build a string out of the sorted list of identifier declarations and the text between the originals\n                                        .reduce((sourceText, identifier, index) => {\n                                            const textAfterIdentifier = index === idDeclarations.length - 1\n                                                ? \"\"\n                                                : sourceCode.getText().slice(idDeclarations[index].range[1], idDeclarations[index + 1].range[0]);\n\n                                            return sourceText + sourceCode.getText(identifier) + textAfterIdentifier;\n                                        }, \"\")\n\n                                );\n                            }\n                        });\n                        fixed = true;\n                        return memo;\n                    }\n                    return decl;\n\n                }, idDeclarations[0]);\n            }\n        };\n    }\n};\n#/lib/rules/array-element-newline.js*/**\n * @fileoverview Rule to enforce line breaks after each array element\n * @author Jan Peer Stöcklmair <https://github.com/JPeer264>\n */\n\n\"use strict\";\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"layout\",\n\n        docs: {\n            description: \"enforce line breaks after each array element\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/array-element-newline\"\n        },\n\n        fixable: \"whitespace\",\n\n        schema: {\n            definitions: {\n                basicConfig: {\n                    oneOf: [\n                        {\n                            enum: [\"always\", \"never\", \"consistent\"]\n                        },\n                        {\n                            type: \"object\",\n                            properties: {\n                                multiline: {\n                                    type: \"boolean\"\n                                },\n                                minItems: {\n                                    type: [\"integer\", \"null\"],\n                                    minimum: 0\n                                }\n                            },\n                            additionalProperties: false\n                        }\n                    ]\n                }\n            },\n            items: [\n                {\n                    oneOf: [\n                        {\n                            $ref: \"#/definitions/basicConfig\"\n                        },\n                        {\n                            type: \"object\",\n                            properties: {\n                                ArrayExpression: {\n                                    $ref: \"#/definitions/basicConfig\"\n                                },\n                                ArrayPattern: {\n                                    $ref: \"#/definitions/basicConfig\"\n                                }\n                            },\n                            additionalProperties: false,\n                            minProperties: 1\n                        }\n                    ]\n                }\n            ]\n        },\n\n        messages: {\n            unexpectedLineBreak: \"There should be no linebreak here.\",\n            missingLineBreak: \"There should be a linebreak after this element.\"\n        }\n    },\n\n    create(context) {\n        const sourceCode = context.getSourceCode();\n\n        //----------------------------------------------------------------------\n        // Helpers\n        //----------------------------------------------------------------------\n\n        /**\n         * Normalizes a given option value.\n         * @param {string|Object|undefined} providedOption An option value to parse.\n         * @returns {{multiline: boolean, minItems: number}} Normalized option object.\n         */\n        function normalizeOptionValue(providedOption) {\n            let consistent = false;\n            let multiline = false;\n            let minItems;\n\n            const option = providedOption || \"always\";\n\n            if (!option || option === \"always\" || option.minItems === 0) {\n                minItems = 0;\n            } else if (option === \"never\") {\n                minItems = Number.POSITIVE_INFINITY;\n            } else if (option === \"consistent\") {\n                consistent = true;\n                minItems = Number.POSITIVE_INFINITY;\n            } else {\n                multiline = Boolean(option.multiline);\n                minItems = option.minItems || Number.POSITIVE_INFINITY;\n            }\n\n            return { consistent, multiline, minItems };\n        }\n\n        /**\n         * Normalizes a given option value.\n         * @param {string|Object|undefined} options An option value to parse.\n         * @returns {{ArrayExpression: {multiline: boolean, minItems: number}, ArrayPattern: {multiline: boolean, minItems: number}}} Normalized option object.\n         */\n        function normalizeOptions(options) {\n            if (options && (options.ArrayExpression || options.ArrayPattern)) {\n                let expressionOptions, patternOptions;\n\n                if (options.ArrayExpression) {\n                    expressionOptions = normalizeOptionValue(options.ArrayExpression);\n                }\n\n                if (options.ArrayPattern) {\n                    patternOptions = normalizeOptionValue(options.ArrayPattern);\n                }\n\n                return { ArrayExpression: expressionOptions, ArrayPattern: patternOptions };\n            }\n\n            const value = normalizeOptionValue(options);\n\n            return { ArrayExpression: value, ArrayPattern: value };\n        }\n\n        /**\n         * Reports that there shouldn't be a line break after the first token\n         * @param {Token} token The token to use for the report.\n         * @returns {void}\n         */\n        function reportNoLineBreak(token) {\n            const tokenBefore = sourceCode.getTokenBefore(token, { includeComments: true });\n\n            context.report({\n                loc: {\n                    start: tokenBefore.loc.end,\n                    end: token.loc.start\n                },\n                messageId: \"unexpectedLineBreak\",\n                fix(fixer) {\n                    if (astUtils.isCommentToken(tokenBefore)) {\n                        return null;\n                    }\n\n                    if (!astUtils.isTokenOnSameLine(tokenBefore, token)) {\n                        return fixer.replaceTextRange([tokenBefore.range[1], token.range[0]], \" \");\n                    }\n\n                    /*\n                     * This will check if the comma is on the same line as the next element\n                     * Following array:\n                     * [\n                     *     1\n                     *     , 2\n                     *     , 3\n                     * ]\n                     *\n                     * will be fixed to:\n                     * [\n                     *     1, 2, 3\n                     * ]\n                     */\n                    const twoTokensBefore = sourceCode.getTokenBefore(tokenBefore, { includeComments: true });\n\n                    if (astUtils.isCommentToken(twoTokensBefore)) {\n                        return null;\n                    }\n\n                    return fixer.replaceTextRange([twoTokensBefore.range[1], tokenBefore.range[0]], \"\");\n\n                }\n            });\n        }\n\n        /**\n         * Reports that there should be a line break after the first token\n         * @param {Token} token The token to use for the report.\n         * @returns {void}\n         */\n        function reportRequiredLineBreak(token) {\n            const tokenBefore = sourceCode.getTokenBefore(token, { includeComments: true });\n\n            context.report({\n                loc: {\n                    start: tokenBefore.loc.end,\n                    end: token.loc.start\n                },\n                messageId: \"missingLineBreak\",\n                fix(fixer) {\n                    return fixer.replaceTextRange([tokenBefore.range[1], token.range[0]], \"\\n\");\n                }\n            });\n        }\n\n        /**\n         * Reports a given node if it violated this rule.\n         * @param {ASTNode} node A node to check. This is an ObjectExpression node or an ObjectPattern node.\n         * @returns {void}\n         */\n        function check(node) {\n            const elements = node.elements;\n            const normalizedOptions = normalizeOptions(context.options[0]);\n            const options = normalizedOptions[node.type];\n\n            if (!options) {\n                return;\n            }\n\n            let elementBreak = false;\n\n            /*\n             * MULTILINE: true\n             * loop through every element and check\n             * if at least one element has linebreaks inside\n             * this ensures that following is not valid (due to elements are on the same line):\n             *\n             * [\n             *      1,\n             *      2,\n             *      3\n             * ]\n             */\n            if (options.multiline) {\n                elementBreak = elements\n                    .filter(element => element !== null)\n                    .some(element => element.loc.start.line !== element.loc.end.line);\n            }\n\n            const linebreaksCount = node.elements.map((element, i) => {\n                const previousElement = elements[i - 1];\n\n                if (i === 0 || element === null || previousElement === null) {\n                    return false;\n                }\n\n                const commaToken = sourceCode.getFirstTokenBetween(previousElement, element, astUtils.isCommaToken);\n                const lastTokenOfPreviousElement = sourceCode.getTokenBefore(commaToken);\n                const firstTokenOfCurrentElement = sourceCode.getTokenAfter(commaToken);\n\n                return !astUtils.isTokenOnSameLine(lastTokenOfPreviousElement, firstTokenOfCurrentElement);\n            }).filter(isBreak => isBreak === true).length;\n\n            const needsLinebreaks = (\n                elements.length >= options.minItems ||\n                (\n                    options.multiline &&\n                    elementBreak\n                ) ||\n                (\n                    options.consistent &&\n                    linebreaksCount > 0 &&\n                    linebreaksCount < node.elements.length\n                )\n            );\n\n            elements.forEach((element, i) => {\n                const previousElement = elements[i - 1];\n\n                if (i === 0 || element === null || previousElement === null) {\n                    return;\n                }\n\n                const commaToken = sourceCode.getFirstTokenBetween(previousElement, element, astUtils.isCommaToken);\n                const lastTokenOfPreviousElement = sourceCode.getTokenBefore(commaToken);\n                const firstTokenOfCurrentElement = sourceCode.getTokenAfter(commaToken);\n\n                if (needsLinebreaks) {\n                    if (astUtils.isTokenOnSameLine(lastTokenOfPreviousElement, firstTokenOfCurrentElement)) {\n                        reportRequiredLineBreak(firstTokenOfCurrentElement);\n                    }\n                } else {\n                    if (!astUtils.isTokenOnSameLine(lastTokenOfPreviousElement, firstTokenOfCurrentElement)) {\n                        reportNoLineBreak(firstTokenOfCurrentElement);\n                    }\n                }\n            });\n        }\n\n        //----------------------------------------------------------------------\n        // Public\n        //----------------------------------------------------------------------\n\n        return {\n            ArrayPattern: check,\n            ArrayExpression: check\n        };\n    }\n};\n/lib/rules/prefer-const.jsF/**\n * @fileoverview A rule to suggest using of const declaration for variables that are never reassigned after declared.\n * @author Toru Nagashima\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst FixTracker = require(\"./utils/fix-tracker\");\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\nconst PATTERN_TYPE = /^(?:.+?Pattern|RestElement|SpreadProperty|ExperimentalRestProperty|Property)$/u;\nconst DECLARATION_HOST_TYPE = /^(?:Program|BlockStatement|StaticBlock|SwitchCase)$/u;\nconst DESTRUCTURING_HOST_TYPE = /^(?:VariableDeclarator|AssignmentExpression)$/u;\n\n/**\n * Checks whether a given node is located at `ForStatement.init` or not.\n * @param {ASTNode} node A node to check.\n * @returns {boolean} `true` if the node is located at `ForStatement.init`.\n */\nfunction isInitOfForStatement(node) {\n    return node.parent.type === \"ForStatement\" && node.parent.init === node;\n}\n\n/**\n * Checks whether a given Identifier node becomes a VariableDeclaration or not.\n * @param {ASTNode} identifier An Identifier node to check.\n * @returns {boolean} `true` if the node can become a VariableDeclaration.\n */\nfunction canBecomeVariableDeclaration(identifier) {\n    let node = identifier.parent;\n\n    while (PATTERN_TYPE.test(node.type)) {\n        node = node.parent;\n    }\n\n    return (\n        node.type === \"VariableDeclarator\" ||\n        (\n            node.type === \"AssignmentExpression\" &&\n            node.parent.type === \"ExpressionStatement\" &&\n            DECLARATION_HOST_TYPE.test(node.parent.parent.type)\n        )\n    );\n}\n\n/**\n * Checks if an property or element is from outer scope or function parameters\n * in destructing pattern.\n * @param {string} name A variable name to be checked.\n * @param {eslint-scope.Scope} initScope A scope to start find.\n * @returns {boolean} Indicates if the variable is from outer scope or function parameters.\n */\nfunction isOuterVariableInDestructing(name, initScope) {\n\n    if (initScope.through.find(ref => ref.resolved && ref.resolved.name === name)) {\n        return true;\n    }\n\n    const variable = astUtils.getVariableByName(initScope, name);\n\n    if (variable !== null) {\n        return variable.defs.some(def => def.type === \"Parameter\");\n    }\n\n    return false;\n}\n\n/**\n * Gets the VariableDeclarator/AssignmentExpression node that a given reference\n * belongs to.\n * This is used to detect a mix of reassigned and never reassigned in a\n * destructuring.\n * @param {eslint-scope.Reference} reference A reference to get.\n * @returns {ASTNode|null} A VariableDeclarator/AssignmentExpression node or\n *      null.\n */\nfunction getDestructuringHost(reference) {\n    if (!reference.isWrite()) {\n        return null;\n    }\n    let node = reference.identifier.parent;\n\n    while (PATTERN_TYPE.test(node.type)) {\n        node = node.parent;\n    }\n\n    if (!DESTRUCTURING_HOST_TYPE.test(node.type)) {\n        return null;\n    }\n    return node;\n}\n\n/**\n * Determines if a destructuring assignment node contains\n * any MemberExpression nodes. This is used to determine if a\n * variable that is only written once using destructuring can be\n * safely converted into a const declaration.\n * @param {ASTNode} node The ObjectPattern or ArrayPattern node to check.\n * @returns {boolean} True if the destructuring pattern contains\n *      a MemberExpression, false if not.\n */\nfunction hasMemberExpressionAssignment(node) {\n    switch (node.type) {\n        case \"ObjectPattern\":\n            return node.properties.some(prop => {\n                if (prop) {\n\n                    /*\n                     * Spread elements have an argument property while\n                     * others have a value property. Because different\n                     * parsers use different node types for spread elements,\n                     * we just check if there is an argument property.\n                     */\n                    return hasMemberExpressionAssignment(prop.argument || prop.value);\n                }\n\n                return false;\n            });\n\n        case \"ArrayPattern\":\n            return node.elements.some(element => {\n                if (element) {\n                    return hasMemberExpressionAssignment(element);\n                }\n\n                return false;\n            });\n\n        case \"AssignmentPattern\":\n            return hasMemberExpressionAssignment(node.left);\n\n        case \"MemberExpression\":\n            return true;\n\n        // no default\n    }\n\n    return false;\n}\n\n/**\n * Gets an identifier node of a given variable.\n *\n * If the initialization exists or one or more reading references exist before\n * the first assignment, the identifier node is the node of the declaration.\n * Otherwise, the identifier node is the node of the first assignment.\n *\n * If the variable should not change to const, this function returns null.\n * - If the variable is reassigned.\n * - If the variable is never initialized nor assigned.\n * - If the variable is initialized in a different scope from the declaration.\n * - If the unique assignment of the variable cannot change to a declaration.\n *   e.g. `if (a) b = 1` / `return (b = 1)`\n * - If the variable is declared in the global scope and `eslintUsed` is `true`.\n *   `/*exported foo` directive comment makes such variables. This rule does not\n *   warn such variables because this rule cannot distinguish whether the\n *   exported variables are reassigned or not.\n * @param {eslint-scope.Variable} variable A variable to get.\n * @param {boolean} ignoreReadBeforeAssign\n *      The value of `ignoreReadBeforeAssign` option.\n * @returns {ASTNode|null}\n *      An Identifier node if the variable should change to const.\n *      Otherwise, null.\n */\nfunction getIdentifierIfShouldBeConst(variable, ignoreReadBeforeAssign) {\n    if (variable.eslintUsed && variable.scope.type === \"global\") {\n        return null;\n    }\n\n    // Finds the unique WriteReference.\n    let writer = null;\n    let isReadBeforeInit = false;\n    const references = variable.references;\n\n    for (let i = 0; i < references.length; ++i) {\n        const reference = references[i];\n\n        if (reference.isWrite()) {\n            const isReassigned = (\n                writer !== null &&\n                writer.identifier !== reference.identifier\n            );\n\n            if (isReassigned) {\n                return null;\n            }\n\n            const destructuringHost = getDestructuringHost(reference);\n\n            if (destructuringHost !== null && destructuringHost.left !== void 0) {\n                const leftNode = destructuringHost.left;\n                let hasOuterVariables = false,\n                    hasNonIdentifiers = false;\n\n                if (leftNode.type === \"ObjectPattern\") {\n                    const properties = leftNode.properties;\n\n                    hasOuterVariables = properties\n                        .filter(prop => prop.value)\n                        .map(prop => prop.value.name)\n                        .some(name => isOuterVariableInDestructing(name, variable.scope));\n\n                    hasNonIdentifiers = hasMemberExpressionAssignment(leftNode);\n\n                } else if (leftNode.type === \"ArrayPattern\") {\n                    const elements = leftNode.elements;\n\n                    hasOuterVariables = elements\n                        .map(element => element && element.name)\n                        .some(name => isOuterVariableInDestructing(name, variable.scope));\n\n                    hasNonIdentifiers = hasMemberExpressionAssignment(leftNode);\n                }\n\n                if (hasOuterVariables || hasNonIdentifiers) {\n                    return null;\n                }\n\n            }\n\n            writer = reference;\n\n        } else if (reference.isRead() && writer === null) {\n            if (ignoreReadBeforeAssign) {\n                return null;\n            }\n            isReadBeforeInit = true;\n        }\n    }\n\n    /*\n     * If the assignment is from a different scope, ignore it.\n     * If the assignment cannot change to a declaration, ignore it.\n     */\n    const shouldBeConst = (\n        writer !== null &&\n        writer.from === variable.scope &&\n        canBecomeVariableDeclaration(writer.identifier)\n    );\n\n    if (!shouldBeConst) {\n        return null;\n    }\n\n    if (isReadBeforeInit) {\n        return variable.defs[0].name;\n    }\n\n    return writer.identifier;\n}\n\n/**\n * Groups by the VariableDeclarator/AssignmentExpression node that each\n * reference of given variables belongs to.\n * This is used to detect a mix of reassigned and never reassigned in a\n * destructuring.\n * @param {eslint-scope.Variable[]} variables Variables to group by destructuring.\n * @param {boolean} ignoreReadBeforeAssign\n *      The value of `ignoreReadBeforeAssign` option.\n * @returns {Map<ASTNode, ASTNode[]>} Grouped identifier nodes.\n */\nfunction groupByDestructuring(variables, ignoreReadBeforeAssign) {\n    const identifierMap = new Map();\n\n    for (let i = 0; i < variables.length; ++i) {\n        const variable = variables[i];\n        const references = variable.references;\n        const identifier = getIdentifierIfShouldBeConst(variable, ignoreReadBeforeAssign);\n        let prevId = null;\n\n        for (let j = 0; j < references.length; ++j) {\n            const reference = references[j];\n            const id = reference.identifier;\n\n            /*\n             * Avoid counting a reference twice or more for default values of\n             * destructuring.\n             */\n            if (id === prevId) {\n                continue;\n            }\n            prevId = id;\n\n            // Add the identifier node into the destructuring group.\n            const group = getDestructuringHost(reference);\n\n            if (group) {\n                if (identifierMap.has(group)) {\n                    identifierMap.get(group).push(identifier);\n                } else {\n                    identifierMap.set(group, [identifier]);\n                }\n            }\n        }\n    }\n\n    return identifierMap;\n}\n\n/**\n * Finds the nearest parent of node with a given type.\n * @param {ASTNode} node The node to search from.\n * @param {string} type The type field of the parent node.\n * @param {Function} shouldStop A predicate that returns true if the traversal should stop, and false otherwise.\n * @returns {ASTNode} The closest ancestor with the specified type; null if no such ancestor exists.\n */\nfunction findUp(node, type, shouldStop) {\n    if (!node || shouldStop(node)) {\n        return null;\n    }\n    if (node.type === type) {\n        return node;\n    }\n    return findUp(node.parent, type, shouldStop);\n}\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"require `const` declarations for variables that are never reassigned after declared\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/prefer-const\"\n        },\n\n        fixable: \"code\",\n\n        schema: [\n            {\n                type: \"object\",\n                properties: {\n                    destructuring: { enum: [\"any\", \"all\"], default: \"any\" },\n                    ignoreReadBeforeAssign: { type: \"boolean\", default: false }\n                },\n                additionalProperties: false\n            }\n        ],\n        messages: {\n            useConst: \"'{{name}}' is never reassigned. Use 'const' instead.\"\n        }\n    },\n\n    create(context) {\n        const options = context.options[0] || {};\n        const sourceCode = context.getSourceCode();\n        const shouldMatchAnyDestructuredVariable = options.destructuring !== \"all\";\n        const ignoreReadBeforeAssign = options.ignoreReadBeforeAssign === true;\n        const variables = [];\n        let reportCount = 0;\n        let checkedId = null;\n        let checkedName = \"\";\n\n\n        /**\n         * Reports given identifier nodes if all of the nodes should be declared\n         * as const.\n         *\n         * The argument 'nodes' is an array of Identifier nodes.\n         * This node is the result of 'getIdentifierIfShouldBeConst()', so it's\n         * nullable. In simple declaration or assignment cases, the length of\n         * the array is 1. In destructuring cases, the length of the array can\n         * be 2 or more.\n         * @param {(eslint-scope.Reference|null)[]} nodes\n         *      References which are grouped by destructuring to report.\n         * @returns {void}\n         */\n        function checkGroup(nodes) {\n            const nodesToReport = nodes.filter(Boolean);\n\n            if (nodes.length && (shouldMatchAnyDestructuredVariable || nodesToReport.length === nodes.length)) {\n                const varDeclParent = findUp(nodes[0], \"VariableDeclaration\", parentNode => parentNode.type.endsWith(\"Statement\"));\n                const isVarDecParentNull = varDeclParent === null;\n\n                if (!isVarDecParentNull && varDeclParent.declarations.length > 0) {\n                    const firstDeclaration = varDeclParent.declarations[0];\n\n                    if (firstDeclaration.init) {\n                        const firstDecParent = firstDeclaration.init.parent;\n\n                        /*\n                         * First we check the declaration type and then depending on\n                         * if the type is a \"VariableDeclarator\" or its an \"ObjectPattern\"\n                         * we compare the name and id from the first identifier, if the names are different\n                         * we assign the new name, id and reset the count of reportCount and nodeCount in\n                         * order to check each block for the number of reported errors and base our fix\n                         * based on comparing nodes.length and nodesToReport.length.\n                         */\n\n                        if (firstDecParent.type === \"VariableDeclarator\") {\n\n                            if (firstDecParent.id.name !== checkedName) {\n                                checkedName = firstDecParent.id.name;\n                                reportCount = 0;\n                            }\n\n                            if (firstDecParent.id.type === \"ObjectPattern\") {\n                                if (firstDecParent.init.name !== checkedName) {\n                                    checkedName = firstDecParent.init.name;\n                                    reportCount = 0;\n                                }\n                            }\n\n                            if (firstDecParent.id !== checkedId) {\n                                checkedId = firstDecParent.id;\n                                reportCount = 0;\n                            }\n                        }\n                    }\n                }\n\n                let shouldFix = varDeclParent &&\n\n                    // Don't do a fix unless all variables in the declarations are initialized (or it's in a for-in or for-of loop)\n                    (varDeclParent.parent.type === \"ForInStatement\" || varDeclParent.parent.type === \"ForOfStatement\" ||\n                        varDeclParent.declarations.every(declaration => declaration.init)) &&\n\n                    /*\n                     * If options.destructuring is \"all\", then this warning will not occur unless\n                     * every assignment in the destructuring should be const. In that case, it's safe\n                     * to apply the fix.\n                     */\n                    nodesToReport.length === nodes.length;\n\n                if (!isVarDecParentNull && varDeclParent.declarations && varDeclParent.declarations.length !== 1) {\n\n                    if (varDeclParent && varDeclParent.declarations && varDeclParent.declarations.length >= 1) {\n\n                        /*\n                         * Add nodesToReport.length to a count, then comparing the count to the length\n                         * of the declarations in the current block.\n                         */\n\n                        reportCount += nodesToReport.length;\n\n                        shouldFix = shouldFix && (reportCount === varDeclParent.declarations.length);\n                    }\n                }\n\n                nodesToReport.forEach(node => {\n                    context.report({\n                        node,\n                        messageId: \"useConst\",\n                        data: node,\n                        fix: shouldFix\n                            ? fixer => {\n                                const letKeywordToken = sourceCode.getFirstToken(varDeclParent, t => t.value === varDeclParent.kind);\n\n                                /**\n                                 * Extend the replacement range to the whole declaration,\n                                 * in order to prevent other fixes in the same pass\n                                 * https://github.com/eslint/eslint/issues/13899\n                                 */\n                                return new FixTracker(fixer, sourceCode)\n                                    .retainRange(varDeclParent.range)\n                                    .replaceTextRange(letKeywordToken.range, \"const\");\n                            }\n                            : null\n                    });\n                });\n            }\n        }\n\n        return {\n            \"Program:exit\"() {\n                groupByDestructuring(variables, ignoreReadBeforeAssign).forEach(checkGroup);\n            },\n\n            VariableDeclaration(node) {\n                if (node.kind === \"let\" && !isInitOfForStatement(node)) {\n                    variables.push(...context.getDeclaredVariables(node));\n                }\n            }\n        };\n    }\n};\n/lib/rules/no-eq-null.js\u0004/**\n * @fileoverview Rule to flag comparisons to null without a type-checking\n * operator.\n * @author Ian Christian Myers\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow `null` comparisons without type-checking operators\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-eq-null\"\n        },\n\n        schema: [],\n\n        messages: {\n            unexpected: \"Use '===' to compare with null.\"\n        }\n    },\n\n    create(context) {\n\n        return {\n\n            BinaryExpression(node) {\n                const badOperator = node.operator === \"==\" || node.operator === \"!=\";\n\n                if (node.right.type === \"Literal\" && node.right.raw === \"null\" && badOperator ||\n                        node.left.type === \"Literal\" && node.left.raw === \"null\" && badOperator) {\n                    context.report({ node, messageId: \"unexpected\" });\n                }\n            }\n        };\n\n    }\n};\n/lib/cli-engine/index.jsc\"use strict\";\n\nconst { CLIEngine } = require(\"./cli-engine\");\n\nmodule.exports = {\n    CLIEngine\n};\n/lib/rules/no-useless-catch.js\u0006/**\n * @fileoverview Reports useless `catch` clauses that just rethrow their error.\n * @author Teddy Katz\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow unnecessary `catch` clauses\",\n            recommended: true,\n            url: \"https://eslint.org/docs/rules/no-useless-catch\"\n        },\n\n        schema: [],\n\n        messages: {\n            unnecessaryCatchClause: \"Unnecessary catch clause.\",\n            unnecessaryCatch: \"Unnecessary try/catch wrapper.\"\n        }\n    },\n\n    create(context) {\n        return {\n            CatchClause(node) {\n                if (\n                    node.param &&\n                    node.param.type === \"Identifier\" &&\n                    node.body.body.length &&\n                    node.body.body[0].type === \"ThrowStatement\" &&\n                    node.body.body[0].argument.type === \"Identifier\" &&\n                    node.body.body[0].argument.name === node.param.name\n                ) {\n                    if (node.parent.finalizer) {\n                        context.report({\n                            node,\n                            messageId: \"unnecessaryCatchClause\"\n                        });\n                    } else {\n                        context.report({\n                            node: node.parent,\n                            messageId: \"unnecessaryCatch\"\n                        });\n                    }\n                }\n            }\n        };\n    }\n};\n+/lib/rules/no-whitespace-before-property.js\u000fV/**\n * @fileoverview Rule to disallow whitespace before properties\n * @author Kai Cataldo\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"layout\",\n\n        docs: {\n            description: \"disallow whitespace before properties\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-whitespace-before-property\"\n        },\n\n        fixable: \"whitespace\",\n        schema: [],\n\n        messages: {\n            unexpectedWhitespace: \"Unexpected whitespace before property {{propName}}.\"\n        }\n    },\n\n    create(context) {\n        const sourceCode = context.getSourceCode();\n\n        //--------------------------------------------------------------------------\n        // Helpers\n        //--------------------------------------------------------------------------\n\n        /**\n         * Reports whitespace before property token\n         * @param {ASTNode} node the node to report in the event of an error\n         * @param {Token} leftToken the left token\n         * @param {Token} rightToken the right token\n         * @returns {void}\n         * @private\n         */\n        function reportError(node, leftToken, rightToken) {\n            context.report({\n                node,\n                messageId: \"unexpectedWhitespace\",\n                data: {\n                    propName: sourceCode.getText(node.property)\n                },\n                fix(fixer) {\n                    let replacementText = \"\";\n\n                    if (!node.computed && !node.optional && astUtils.isDecimalInteger(node.object)) {\n\n                        /*\n                         * If the object is a number literal, fixing it to something like 5.toString() would cause a SyntaxError.\n                         * Don't fix this case.\n                         */\n                        return null;\n                    }\n\n                    // Don't fix if comments exist.\n                    if (sourceCode.commentsExistBetween(leftToken, rightToken)) {\n                        return null;\n                    }\n\n                    if (node.optional) {\n                        replacementText = \"?.\";\n                    } else if (!node.computed) {\n                        replacementText = \".\";\n                    }\n\n                    return fixer.replaceTextRange([leftToken.range[1], rightToken.range[0]], replacementText);\n                }\n            });\n        }\n\n        //--------------------------------------------------------------------------\n        // Public\n        //--------------------------------------------------------------------------\n\n        return {\n            MemberExpression(node) {\n                let rightToken;\n                let leftToken;\n\n                if (!astUtils.isTokenOnSameLine(node.object, node.property)) {\n                    return;\n                }\n\n                if (node.computed) {\n                    rightToken = sourceCode.getTokenBefore(node.property, astUtils.isOpeningBracketToken);\n                    leftToken = sourceCode.getTokenBefore(rightToken, node.optional ? 1 : 0);\n                } else {\n                    rightToken = sourceCode.getFirstToken(node.property);\n                    leftToken = sourceCode.getTokenBefore(rightToken, 1);\n                }\n\n                if (sourceCode.isSpaceBetweenTokens(leftToken, rightToken)) {\n                    reportError(node, leftToken, rightToken);\n                }\n            }\n        };\n    }\n};\n/lib/rules/no-dupe-args.js\t3/**\n * @fileoverview Rule to flag duplicate arguments\n * @author Jamund Ferguson\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"problem\",\n\n        docs: {\n            description: \"disallow duplicate arguments in `function` definitions\",\n            recommended: true,\n            url: \"https://eslint.org/docs/rules/no-dupe-args\"\n        },\n\n        schema: [],\n\n        messages: {\n            unexpected: \"Duplicate param '{{name}}'.\"\n        }\n    },\n\n    create(context) {\n\n        //--------------------------------------------------------------------------\n        // Helpers\n        //--------------------------------------------------------------------------\n\n        /**\n         * Checks whether or not a given definition is a parameter's.\n         * @param {eslint-scope.DefEntry} def A definition to check.\n         * @returns {boolean} `true` if the definition is a parameter's.\n         */\n        function isParameter(def) {\n            return def.type === \"Parameter\";\n        }\n\n        /**\n         * Determines if a given node has duplicate parameters.\n         * @param {ASTNode} node The node to check.\n         * @returns {void}\n         * @private\n         */\n        function checkParams(node) {\n            const variables = context.getDeclaredVariables(node);\n\n            for (let i = 0; i < variables.length; ++i) {\n                const variable = variables[i];\n\n                // Checks and reports duplications.\n                const defs = variable.defs.filter(isParameter);\n\n                if (defs.length >= 2) {\n                    context.report({\n                        node,\n                        messageId: \"unexpected\",\n                        data: { name: variable.name }\n                    });\n                }\n            }\n        }\n\n        //--------------------------------------------------------------------------\n        // Public API\n        //--------------------------------------------------------------------------\n\n        return {\n            FunctionDeclaration: checkParams,\n            FunctionExpression: checkParams\n        };\n\n    }\n};\n%/lib/rules/prefer-numeric-literals.js\u0016/**\n * @fileoverview Rule to disallow `parseInt()` in favor of binary, octal, and hexadecimal literals\n * @author Annie Zhang, Henry Zhu\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\nconst radixMap = new Map([\n    [2, { system: \"binary\", literalPrefix: \"0b\" }],\n    [8, { system: \"octal\", literalPrefix: \"0o\" }],\n    [16, { system: \"hexadecimal\", literalPrefix: \"0x\" }]\n]);\n\n/**\n * Checks to see if a CallExpression's callee node is `parseInt` or\n * `Number.parseInt`.\n * @param {ASTNode} calleeNode The callee node to evaluate.\n * @returns {boolean} True if the callee is `parseInt` or `Number.parseInt`,\n * false otherwise.\n */\nfunction isParseInt(calleeNode) {\n    return (\n        astUtils.isSpecificId(calleeNode, \"parseInt\") ||\n        astUtils.isSpecificMemberAccess(calleeNode, \"Number\", \"parseInt\")\n    );\n}\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow `parseInt()` and `Number.parseInt()` in favor of binary, octal, and hexadecimal literals\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/prefer-numeric-literals\"\n        },\n\n        schema: [],\n\n        messages: {\n            useLiteral: \"Use {{system}} literals instead of {{functionName}}().\"\n        },\n\n        fixable: \"code\"\n    },\n\n    create(context) {\n        const sourceCode = context.getSourceCode();\n\n        //----------------------------------------------------------------------\n        // Public\n        //----------------------------------------------------------------------\n\n        return {\n\n            \"CallExpression[arguments.length=2]\"(node) {\n                const [strNode, radixNode] = node.arguments,\n                    str = astUtils.getStaticStringValue(strNode),\n                    radix = radixNode.value;\n\n                if (\n                    str !== null &&\n                    astUtils.isStringLiteral(strNode) &&\n                    radixNode.type === \"Literal\" &&\n                    typeof radix === \"number\" &&\n                    radixMap.has(radix) &&\n                    isParseInt(node.callee)\n                ) {\n\n                    const { system, literalPrefix } = radixMap.get(radix);\n\n                    context.report({\n                        node,\n                        messageId: \"useLiteral\",\n                        data: {\n                            system,\n                            functionName: sourceCode.getText(node.callee)\n                        },\n                        fix(fixer) {\n                            if (sourceCode.getCommentsInside(node).length) {\n                                return null;\n                            }\n\n                            const replacement = `${literalPrefix}${str}`;\n\n                            if (+replacement !== parseInt(str, radix)) {\n\n                                /*\n                                 * If the newly-produced literal would be invalid, (e.g. 0b1234),\n                                 * or it would yield an incorrect parseInt result for some other reason, don't make a fix.\n                                 *\n                                 * If `str` had numeric separators, `+replacement` will evaluate to `NaN` because unary `+`\n                                 * per the specification doesn't support numeric separators. Thus, the above condition will be `true`\n                                 * (`NaN !== anything` is always `true`) regardless of the `parseInt(str, radix)` value.\n                                 * Consequently, no autofixes will be made. This is correct behavior because `parseInt` also\n                                 * doesn't support numeric separators, but it does parse part of the string before the first `_`,\n                                 * so the autofix would be invalid:\n                                 *\n                                 *   parseInt(\"1_1\", 2) // === 1\n                                 *   0b1_1 // === 3\n                                 */\n                                return null;\n                            }\n\n                            const tokenBefore = sourceCode.getTokenBefore(node),\n                                tokenAfter = sourceCode.getTokenAfter(node);\n                            let prefix = \"\",\n                                suffix = \"\";\n\n                            if (\n                                tokenBefore &&\n                                tokenBefore.range[1] === node.range[0] &&\n                                !astUtils.canTokensBeAdjacent(tokenBefore, replacement)\n                            ) {\n                                prefix = \" \";\n                            }\n\n                            if (\n                                tokenAfter &&\n                                node.range[1] === tokenAfter.range[0] &&\n                                !astUtils.canTokensBeAdjacent(replacement, tokenAfter)\n                            ) {\n                                suffix = \" \";\n                            }\n\n                            return fixer.replaceText(node, `${prefix}${replacement}${suffix}`);\n                        }\n                    });\n                }\n            }\n        };\n    }\n};\n#/lib/rules/prefer-arrow-callback.js8/**\n * @fileoverview A rule to suggest using arrow functions as callbacks.\n * @author Toru Nagashima\n */\n\n\"use strict\";\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\n/**\n * Checks whether or not a given variable is a function name.\n * @param {eslint-scope.Variable} variable A variable to check.\n * @returns {boolean} `true` if the variable is a function name.\n */\nfunction isFunctionName(variable) {\n    return variable && variable.defs[0].type === \"FunctionName\";\n}\n\n/**\n * Checks whether or not a given MetaProperty node equals to a given value.\n * @param {ASTNode} node A MetaProperty node to check.\n * @param {string} metaName The name of `MetaProperty.meta`.\n * @param {string} propertyName The name of `MetaProperty.property`.\n * @returns {boolean} `true` if the node is the specific value.\n */\nfunction checkMetaProperty(node, metaName, propertyName) {\n    return node.meta.name === metaName && node.property.name === propertyName;\n}\n\n/**\n * Gets the variable object of `arguments` which is defined implicitly.\n * @param {eslint-scope.Scope} scope A scope to get.\n * @returns {eslint-scope.Variable} The found variable object.\n */\nfunction getVariableOfArguments(scope) {\n    const variables = scope.variables;\n\n    for (let i = 0; i < variables.length; ++i) {\n        const variable = variables[i];\n\n        if (variable.name === \"arguments\") {\n\n            /*\n             * If there was a parameter which is named \"arguments\", the\n             * implicit \"arguments\" is not defined.\n             * So does fast return with null.\n             */\n            return (variable.identifiers.length === 0) ? variable : null;\n        }\n    }\n\n    /* istanbul ignore next */\n    return null;\n}\n\n/**\n * Checks whether or not a given node is a callback.\n * @param {ASTNode} node A node to check.\n * @throws {Error} (Unreachable.)\n * @returns {Object}\n *   {boolean} retv.isCallback - `true` if the node is a callback.\n *   {boolean} retv.isLexicalThis - `true` if the node is with `.bind(this)`.\n */\nfunction getCallbackInfo(node) {\n    const retv = { isCallback: false, isLexicalThis: false };\n    let currentNode = node;\n    let parent = node.parent;\n    let bound = false;\n\n    while (currentNode) {\n        switch (parent.type) {\n\n            // Checks parents recursively.\n\n            case \"LogicalExpression\":\n            case \"ChainExpression\":\n            case \"ConditionalExpression\":\n                break;\n\n            // Checks whether the parent node is `.bind(this)` call.\n            case \"MemberExpression\":\n                if (\n                    parent.object === currentNode &&\n                    !parent.property.computed &&\n                    parent.property.type === \"Identifier\" &&\n                    parent.property.name === \"bind\"\n                ) {\n                    const maybeCallee = parent.parent.type === \"ChainExpression\"\n                        ? parent.parent\n                        : parent;\n\n                    if (astUtils.isCallee(maybeCallee)) {\n                        if (!bound) {\n                            bound = true; // Use only the first `.bind()` to make `isLexicalThis` value.\n                            retv.isLexicalThis = (\n                                maybeCallee.parent.arguments.length === 1 &&\n                                maybeCallee.parent.arguments[0].type === \"ThisExpression\"\n                            );\n                        }\n                        parent = maybeCallee.parent;\n                    } else {\n                        return retv;\n                    }\n                } else {\n                    return retv;\n                }\n                break;\n\n            // Checks whether the node is a callback.\n            case \"CallExpression\":\n            case \"NewExpression\":\n                if (parent.callee !== currentNode) {\n                    retv.isCallback = true;\n                }\n                return retv;\n\n            default:\n                return retv;\n        }\n\n        currentNode = parent;\n        parent = parent.parent;\n    }\n\n    /* istanbul ignore next */\n    throw new Error(\"unreachable\");\n}\n\n/**\n * Checks whether a simple list of parameters contains any duplicates. This does not handle complex\n * parameter lists (e.g. with destructuring), since complex parameter lists are a SyntaxError with duplicate\n * parameter names anyway. Instead, it always returns `false` for complex parameter lists.\n * @param {ASTNode[]} paramsList The list of parameters for a function\n * @returns {boolean} `true` if the list of parameters contains any duplicates\n */\nfunction hasDuplicateParams(paramsList) {\n    return paramsList.every(param => param.type === \"Identifier\") && paramsList.length !== new Set(paramsList.map(param => param.name)).size;\n}\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"require using arrow functions for callbacks\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/prefer-arrow-callback\"\n        },\n\n        schema: [\n            {\n                type: \"object\",\n                properties: {\n                    allowNamedFunctions: {\n                        type: \"boolean\",\n                        default: false\n                    },\n                    allowUnboundThis: {\n                        type: \"boolean\",\n                        default: true\n                    }\n                },\n                additionalProperties: false\n            }\n        ],\n\n        fixable: \"code\",\n\n        messages: {\n            preferArrowCallback: \"Unexpected function expression.\"\n        }\n    },\n\n    create(context) {\n        const options = context.options[0] || {};\n\n        const allowUnboundThis = options.allowUnboundThis !== false; // default to true\n        const allowNamedFunctions = options.allowNamedFunctions;\n        const sourceCode = context.getSourceCode();\n\n        /*\n         * {Array<{this: boolean, super: boolean, meta: boolean}>}\n         * - this - A flag which shows there are one or more ThisExpression.\n         * - super - A flag which shows there are one or more Super.\n         * - meta - A flag which shows there are one or more MethProperty.\n         */\n        let stack = [];\n\n        /**\n         * Pushes new function scope with all `false` flags.\n         * @returns {void}\n         */\n        function enterScope() {\n            stack.push({ this: false, super: false, meta: false });\n        }\n\n        /**\n         * Pops a function scope from the stack.\n         * @returns {{this: boolean, super: boolean, meta: boolean}} The information of the last scope.\n         */\n        function exitScope() {\n            return stack.pop();\n        }\n\n        return {\n\n            // Reset internal state.\n            Program() {\n                stack = [];\n            },\n\n            // If there are below, it cannot replace with arrow functions merely.\n            ThisExpression() {\n                const info = stack[stack.length - 1];\n\n                if (info) {\n                    info.this = true;\n                }\n            },\n\n            Super() {\n                const info = stack[stack.length - 1];\n\n                if (info) {\n                    info.super = true;\n                }\n            },\n\n            MetaProperty(node) {\n                const info = stack[stack.length - 1];\n\n                if (info && checkMetaProperty(node, \"new\", \"target\")) {\n                    info.meta = true;\n                }\n            },\n\n            // To skip nested scopes.\n            FunctionDeclaration: enterScope,\n            \"FunctionDeclaration:exit\": exitScope,\n\n            // Main.\n            FunctionExpression: enterScope,\n            \"FunctionExpression:exit\"(node) {\n                const scopeInfo = exitScope();\n\n                // Skip named function expressions\n                if (allowNamedFunctions && node.id && node.id.name) {\n                    return;\n                }\n\n                // Skip generators.\n                if (node.generator) {\n                    return;\n                }\n\n                // Skip recursive functions.\n                const nameVar = context.getDeclaredVariables(node)[0];\n\n                if (isFunctionName(nameVar) && nameVar.references.length > 0) {\n                    return;\n                }\n\n                // Skip if it's using arguments.\n                const variable = getVariableOfArguments(context.getScope());\n\n                if (variable && variable.references.length > 0) {\n                    return;\n                }\n\n                // Reports if it's a callback which can replace with arrows.\n                const callbackInfo = getCallbackInfo(node);\n\n                if (callbackInfo.isCallback &&\n                    (!allowUnboundThis || !scopeInfo.this || callbackInfo.isLexicalThis) &&\n                    !scopeInfo.super &&\n                    !scopeInfo.meta\n                ) {\n                    context.report({\n                        node,\n                        messageId: \"preferArrowCallback\",\n                        *fix(fixer) {\n                            if ((!callbackInfo.isLexicalThis && scopeInfo.this) || hasDuplicateParams(node.params)) {\n\n                                /*\n                                 * If the callback function does not have .bind(this) and contains a reference to `this`, there\n                                 * is no way to determine what `this` should be, so don't perform any fixes.\n                                 * If the callback function has duplicates in its list of parameters (possible in sloppy mode),\n                                 * don't replace it with an arrow function, because this is a SyntaxError with arrow functions.\n                                 */\n                                return;\n                            }\n\n                            // Remove `.bind(this)` if exists.\n                            if (callbackInfo.isLexicalThis) {\n                                const memberNode = node.parent;\n\n                                /*\n                                 * If `.bind(this)` exists but the parent is not `.bind(this)`, don't remove it automatically.\n                                 * E.g. `(foo || function(){}).bind(this)`\n                                 */\n                                if (memberNode.type !== \"MemberExpression\") {\n                                    return;\n                                }\n\n                                const callNode = memberNode.parent;\n                                const firstTokenToRemove = sourceCode.getTokenAfter(memberNode.object, astUtils.isNotClosingParenToken);\n                                const lastTokenToRemove = sourceCode.getLastToken(callNode);\n\n                                /*\n                                 * If the member expression is parenthesized, don't remove the right paren.\n                                 * E.g. `(function(){}.bind)(this)`\n                                 *                    ^^^^^^^^^^^^\n                                 */\n                                if (astUtils.isParenthesised(sourceCode, memberNode)) {\n                                    return;\n                                }\n\n                                // If comments exist in the `.bind(this)`, don't remove those.\n                                if (sourceCode.commentsExistBetween(firstTokenToRemove, lastTokenToRemove)) {\n                                    return;\n                                }\n\n                                yield fixer.removeRange([firstTokenToRemove.range[0], lastTokenToRemove.range[1]]);\n                            }\n\n                            // Convert the function expression to an arrow function.\n                            const functionToken = sourceCode.getFirstToken(node, node.async ? 1 : 0);\n                            const leftParenToken = sourceCode.getTokenAfter(functionToken, astUtils.isOpeningParenToken);\n\n                            if (sourceCode.commentsExistBetween(functionToken, leftParenToken)) {\n\n                                // Remove only extra tokens to keep comments.\n                                yield fixer.remove(functionToken);\n                                if (node.id) {\n                                    yield fixer.remove(node.id);\n                                }\n                            } else {\n\n                                // Remove extra tokens and spaces.\n                                yield fixer.removeRange([functionToken.range[0], leftParenToken.range[0]]);\n                            }\n                            yield fixer.insertTextBefore(node.body, \"=> \");\n\n                            // Get the node that will become the new arrow function.\n                            let replacedNode = callbackInfo.isLexicalThis ? node.parent.parent : node;\n\n                            if (replacedNode.type === \"ChainExpression\") {\n                                replacedNode = replacedNode.parent;\n                            }\n\n                            /*\n                             * If the replaced node is part of a BinaryExpression, LogicalExpression, or MemberExpression, then\n                             * the arrow function needs to be parenthesized, because `foo || () => {}` is invalid syntax even\n                             * though `foo || function() {}` is valid.\n                             */\n                            if (\n                                replacedNode.parent.type !== \"CallExpression\" &&\n                                replacedNode.parent.type !== \"ConditionalExpression\" &&\n                                !astUtils.isParenthesised(sourceCode, replacedNode) &&\n                                !astUtils.isParenthesised(sourceCode, node)\n                            ) {\n                                yield fixer.insertTextBefore(replacedNode, \"(\");\n                                yield fixer.insertTextAfter(replacedNode, \")\");\n                            }\n                        }\n                    });\n                }\n            }\n        };\n    }\n};\n$/lib/cli-engine/lint-result-cache.js\u001a/**\n * @fileoverview Utility for caching lint results.\n * @author Kevin Partington\n */\n\"use strict\";\n\n//-----------------------------------------------------------------------------\n// Requirements\n//-----------------------------------------------------------------------------\n\nconst assert = require(\"assert\");\nconst fs = require(\"fs\");\nconst fileEntryCache = require(\"file-entry-cache\");\nconst stringify = require(\"json-stable-stringify-without-jsonify\");\nconst pkg = require(\"../../package.json\");\nconst hash = require(\"./hash\");\n\nconst debug = require(\"debug\")(\"eslint:lint-result-cache\");\n\n//-----------------------------------------------------------------------------\n// Helpers\n//-----------------------------------------------------------------------------\n\nconst configHashCache = new WeakMap();\nconst nodeVersion = process && process.version;\n\nconst validCacheStrategies = [\"metadata\", \"content\"];\nconst invalidCacheStrategyErrorMessage = `Cache strategy must be one of: ${validCacheStrategies\n    .map(strategy => `\"${strategy}\"`)\n    .join(\", \")}`;\n\n/**\n * Tests whether a provided cacheStrategy is valid\n * @param {string} cacheStrategy The cache strategy to use\n * @returns {boolean} true if `cacheStrategy` is one of `validCacheStrategies`; false otherwise\n */\nfunction isValidCacheStrategy(cacheStrategy) {\n    return (\n        validCacheStrategies.indexOf(cacheStrategy) !== -1\n    );\n}\n\n/**\n * Calculates the hash of the config\n * @param {ConfigArray} config The config.\n * @returns {string} The hash of the config\n */\nfunction hashOfConfigFor(config) {\n    if (!configHashCache.has(config)) {\n        configHashCache.set(config, hash(`${pkg.version}_${nodeVersion}_${stringify(config)}`));\n    }\n\n    return configHashCache.get(config);\n}\n\n//-----------------------------------------------------------------------------\n// Public Interface\n//-----------------------------------------------------------------------------\n\n/**\n * Lint result cache. This wraps around the file-entry-cache module,\n * transparently removing properties that are difficult or expensive to\n * serialize and adding them back in on retrieval.\n */\nclass LintResultCache {\n\n    /**\n     * Creates a new LintResultCache instance.\n     * @param {string} cacheFileLocation The cache file location.\n     * @param {\"metadata\" | \"content\"} cacheStrategy The cache strategy to use.\n     */\n    constructor(cacheFileLocation, cacheStrategy) {\n        assert(cacheFileLocation, \"Cache file location is required\");\n        assert(cacheStrategy, \"Cache strategy is required\");\n        assert(\n            isValidCacheStrategy(cacheStrategy),\n            invalidCacheStrategyErrorMessage\n        );\n\n        debug(`Caching results to ${cacheFileLocation}`);\n\n        const useChecksum = cacheStrategy === \"content\";\n\n        debug(\n            `Using \"${cacheStrategy}\" strategy to detect changes`\n        );\n\n        this.fileEntryCache = fileEntryCache.create(\n            cacheFileLocation,\n            void 0,\n            useChecksum\n        );\n        this.cacheFileLocation = cacheFileLocation;\n    }\n\n    /**\n     * Retrieve cached lint results for a given file path, if present in the\n     * cache. If the file is present and has not been changed, rebuild any\n     * missing result information.\n     * @param {string} filePath The file for which to retrieve lint results.\n     * @param {ConfigArray} config The config of the file.\n     * @returns {Object|null} The rebuilt lint results, or null if the file is\n     *   changed or not in the filesystem.\n     */\n    getCachedLintResults(filePath, config) {\n\n        /*\n         * Cached lint results are valid if and only if:\n         * 1. The file is present in the filesystem\n         * 2. The file has not changed since the time it was previously linted\n         * 3. The ESLint configuration has not changed since the time the file\n         *    was previously linted\n         * If any of these are not true, we will not reuse the lint results.\n         */\n        const fileDescriptor = this.fileEntryCache.getFileDescriptor(filePath);\n        const hashOfConfig = hashOfConfigFor(config);\n        const changed =\n            fileDescriptor.changed ||\n            fileDescriptor.meta.hashOfConfig !== hashOfConfig;\n\n        if (fileDescriptor.notFound) {\n            debug(`File not found on the file system: ${filePath}`);\n            return null;\n        }\n\n        if (changed) {\n            debug(`Cache entry not found or no longer valid: ${filePath}`);\n            return null;\n        }\n\n        // If source is present but null, need to reread the file from the filesystem.\n        if (\n            fileDescriptor.meta.results &&\n            fileDescriptor.meta.results.source === null\n        ) {\n            debug(`Rereading cached result source from filesystem: ${filePath}`);\n            fileDescriptor.meta.results.source = fs.readFileSync(filePath, \"utf-8\");\n        }\n\n        return fileDescriptor.meta.results;\n    }\n\n    /**\n     * Set the cached lint results for a given file path, after removing any\n     * information that will be both unnecessary and difficult to serialize.\n     * Avoids caching results with an \"output\" property (meaning fixes were\n     * applied), to prevent potentially incorrect results if fixes are not\n     * written to disk.\n     * @param {string} filePath The file for which to set lint results.\n     * @param {ConfigArray} config The config of the file.\n     * @param {Object} result The lint result to be set for the file.\n     * @returns {void}\n     */\n    setCachedLintResults(filePath, config, result) {\n        if (result && Object.prototype.hasOwnProperty.call(result, \"output\")) {\n            return;\n        }\n\n        const fileDescriptor = this.fileEntryCache.getFileDescriptor(filePath);\n\n        if (fileDescriptor && !fileDescriptor.notFound) {\n            debug(`Updating cached result: ${filePath}`);\n\n            // Serialize the result, except that we want to remove the file source if present.\n            const resultToSerialize = Object.assign({}, result);\n\n            /*\n             * Set result.source to null.\n             * In `getCachedLintResults`, if source is explicitly null, we will\n             * read the file from the filesystem to set the value again.\n             */\n            if (Object.prototype.hasOwnProperty.call(resultToSerialize, \"source\")) {\n                resultToSerialize.source = null;\n            }\n\n            fileDescriptor.meta.results = resultToSerialize;\n            fileDescriptor.meta.hashOfConfig = hashOfConfigFor(config);\n        }\n    }\n\n    /**\n     * Persists the in-memory cache to disk.\n     * @returns {void}\n     */\n    reconcile() {\n        debug(`Persisting cached results: ${this.cacheFileLocation}`);\n        this.fileEntryCache.reconcile();\n    }\n}\n\nmodule.exports = LintResultCache;\n/lib/rules/semi-style.js\u0014/**\n * @fileoverview Rule to enforce location of semicolons.\n * @author Toru Nagashima\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\nconst SELECTOR = [\n    \"BreakStatement\", \"ContinueStatement\", \"DebuggerStatement\",\n    \"DoWhileStatement\", \"ExportAllDeclaration\",\n    \"ExportDefaultDeclaration\", \"ExportNamedDeclaration\",\n    \"ExpressionStatement\", \"ImportDeclaration\", \"ReturnStatement\",\n    \"ThrowStatement\", \"VariableDeclaration\", \"PropertyDefinition\"\n].join(\",\");\n\n/**\n * Get the child node list of a given node.\n * This returns `BlockStatement#body`, `StaticBlock#body`, `Program#body`,\n * `ClassBody#body`, or `SwitchCase#consequent`.\n * This is used to check whether a node is the first/last child.\n * @param {Node} node A node to get child node list.\n * @returns {Node[]|null} The child node list.\n */\nfunction getChildren(node) {\n    const t = node.type;\n\n    if (\n        t === \"BlockStatement\" ||\n        t === \"StaticBlock\" ||\n        t === \"Program\" ||\n        t === \"ClassBody\"\n    ) {\n        return node.body;\n    }\n    if (t === \"SwitchCase\") {\n        return node.consequent;\n    }\n    return null;\n}\n\n/**\n * Check whether a given node is the last statement in the parent block.\n * @param {Node} node A node to check.\n * @returns {boolean} `true` if the node is the last statement in the parent block.\n */\nfunction isLastChild(node) {\n    const t = node.parent.type;\n\n    if (t === \"IfStatement\" && node.parent.consequent === node && node.parent.alternate) { // before `else` keyword.\n        return true;\n    }\n    if (t === \"DoWhileStatement\") { // before `while` keyword.\n        return true;\n    }\n    const nodeList = getChildren(node.parent);\n\n    return nodeList !== null && nodeList[nodeList.length - 1] === node; // before `}` or etc.\n}\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"layout\",\n\n        docs: {\n            description: \"enforce location of semicolons\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/semi-style\"\n        },\n\n        schema: [{ enum: [\"last\", \"first\"] }],\n        fixable: \"whitespace\",\n\n        messages: {\n            expectedSemiColon: \"Expected this semicolon to be at {{pos}}.\"\n        }\n    },\n\n    create(context) {\n        const sourceCode = context.getSourceCode();\n        const option = context.options[0] || \"last\";\n\n        /**\n         * Check the given semicolon token.\n         * @param {Token} semiToken The semicolon token to check.\n         * @param {\"first\"|\"last\"} expected The expected location to check.\n         * @returns {void}\n         */\n        function check(semiToken, expected) {\n            const prevToken = sourceCode.getTokenBefore(semiToken);\n            const nextToken = sourceCode.getTokenAfter(semiToken);\n            const prevIsSameLine = !prevToken || astUtils.isTokenOnSameLine(prevToken, semiToken);\n            const nextIsSameLine = !nextToken || astUtils.isTokenOnSameLine(semiToken, nextToken);\n\n            if ((expected === \"last\" && !prevIsSameLine) || (expected === \"first\" && !nextIsSameLine)) {\n                context.report({\n                    loc: semiToken.loc,\n                    messageId: \"expectedSemiColon\",\n                    data: {\n                        pos: (expected === \"last\")\n                            ? \"the end of the previous line\"\n                            : \"the beginning of the next line\"\n                    },\n                    fix(fixer) {\n                        if (prevToken && nextToken && sourceCode.commentsExistBetween(prevToken, nextToken)) {\n                            return null;\n                        }\n\n                        const start = prevToken ? prevToken.range[1] : semiToken.range[0];\n                        const end = nextToken ? nextToken.range[0] : semiToken.range[1];\n                        const text = (expected === \"last\") ? \";\\n\" : \"\\n;\";\n\n                        return fixer.replaceTextRange([start, end], text);\n                    }\n                });\n            }\n        }\n\n        return {\n            [SELECTOR](node) {\n                if (option === \"first\" && isLastChild(node)) {\n                    return;\n                }\n\n                const lastToken = sourceCode.getLastToken(node);\n\n                if (astUtils.isSemicolonToken(lastToken)) {\n                    check(lastToken, option);\n                }\n            },\n\n            ForStatement(node) {\n                const firstSemi = node.init && sourceCode.getTokenAfter(node.init, astUtils.isSemicolonToken);\n                const secondSemi = node.test && sourceCode.getTokenAfter(node.test, astUtils.isSemicolonToken);\n\n                if (firstSemi) {\n                    check(firstSemi, \"last\");\n                }\n                if (secondSemi) {\n                    check(secondSemi, \"last\");\n                }\n            }\n        };\n    }\n};\n'/lib/linter/apply-disable-directives.js8/**\n * @fileoverview A module that filters reported problems based on `eslint-disable` and `eslint-enable` comments\n * @author Teddy Katz\n */\n\n\"use strict\";\n\nconst escapeRegExp = require(\"escape-string-regexp\");\n\n/**\n * Compares the locations of two objects in a source file\n * @param {{line: number, column: number}} itemA The first object\n * @param {{line: number, column: number}} itemB The second object\n * @returns {number} A value less than 1 if itemA appears before itemB in the source file, greater than 1 if\n * itemA appears after itemB in the source file, or 0 if itemA and itemB have the same location.\n */\nfunction compareLocations(itemA, itemB) {\n    return itemA.line - itemB.line || itemA.column - itemB.column;\n}\n\n/**\n * Groups a set of directives into sub-arrays by their parent comment.\n * @param {Directive[]} directives Unused directives to be removed.\n * @returns {Directive[][]} Directives grouped by their parent comment.\n */\nfunction groupByParentComment(directives) {\n    const groups = new Map();\n\n    for (const directive of directives) {\n        const { unprocessedDirective: { parentComment } } = directive;\n\n        if (groups.has(parentComment)) {\n            groups.get(parentComment).push(directive);\n        } else {\n            groups.set(parentComment, [directive]);\n        }\n    }\n\n    return [...groups.values()];\n}\n\n/**\n * Creates removal details for a set of directives within the same comment.\n * @param {Directive[]} directives Unused directives to be removed.\n * @param {Token} commentToken The backing Comment token.\n * @returns {{ description, fix, unprocessedDirective }[]} Details for later creation of output Problems.\n */\nfunction createIndividualDirectivesRemoval(directives, commentToken) {\n\n    /*\n     * `commentToken.value` starts right after `//` or `/*`.\n     * All calculated offsets will be relative to this index.\n     */\n    const commentValueStart = commentToken.range[0] + \"//\".length;\n\n    // Find where the list of rules starts. `\\S+` matches with the directive name (e.g. `eslint-disable-line`)\n    const listStartOffset = /^\\s*\\S+\\s+/u.exec(commentToken.value)[0].length;\n\n    /*\n     * Get the list text without any surrounding whitespace. In order to preserve the original\n     * formatting, we don't want to change that whitespace.\n     *\n     *     // eslint-disable-line rule-one , rule-two , rule-three -- comment\n     *                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n     */\n    const listText = commentToken.value\n        .slice(listStartOffset) // remove directive name and all whitespace before the list\n        .split(/\\s-{2,}\\s/u)[0] // remove `-- comment`, if it exists\n        .trimRight(); // remove all whitespace after the list\n\n    /*\n     * We can assume that `listText` contains multiple elements.\n     * Otherwise, this function wouldn't be called - if there is\n     * only one rule in the list, then the whole comment must be removed.\n     */\n\n    return directives.map(directive => {\n        const { ruleId } = directive;\n\n        const regex = new RegExp(String.raw`(?:^|\\s*,\\s*)${escapeRegExp(ruleId)}(?:\\s*,\\s*|$)`, \"u\");\n        const match = regex.exec(listText);\n        const matchedText = match[0];\n        const matchStartOffset = listStartOffset + match.index;\n        const matchEndOffset = matchStartOffset + matchedText.length;\n\n        const firstIndexOfComma = matchedText.indexOf(\",\");\n        const lastIndexOfComma = matchedText.lastIndexOf(\",\");\n\n        let removalStartOffset, removalEndOffset;\n\n        if (firstIndexOfComma !== lastIndexOfComma) {\n\n            /*\n             * Since there are two commas, this must one of the elements in the middle of the list.\n             * Matched range starts where the previous rule name ends, and ends where the next rule name starts.\n             *\n             *     // eslint-disable-line rule-one , rule-two , rule-three -- comment\n             *                                    ^^^^^^^^^^^^^^\n             *\n             * We want to remove only the content between the two commas, and also one of the commas.\n             *\n             *     // eslint-disable-line rule-one , rule-two , rule-three -- comment\n             *                                     ^^^^^^^^^^^\n             */\n            removalStartOffset = matchStartOffset + firstIndexOfComma;\n            removalEndOffset = matchStartOffset + lastIndexOfComma;\n\n        } else {\n\n            /*\n             * This is either the first element or the last element.\n             *\n             * If this is the first element, matched range starts where the first rule name starts\n             * and ends where the second rule name starts. This is exactly the range we want\n             * to remove so that the second rule name will start where the first one was starting\n             * and thus preserve the original formatting.\n             *\n             *     // eslint-disable-line rule-one , rule-two , rule-three -- comment\n             *                            ^^^^^^^^^^^\n             *\n             * Similarly, if this is the last element, we've already matched the range we want to\n             * remove. The previous rule name will end where the last one was ending, relative\n             * to the content on the right side.\n             *\n             *     // eslint-disable-line rule-one , rule-two , rule-three -- comment\n             *                                               ^^^^^^^^^^^^^\n             */\n            removalStartOffset = matchStartOffset;\n            removalEndOffset = matchEndOffset;\n        }\n\n        return {\n            description: `'${ruleId}'`,\n            fix: {\n                range: [\n                    commentValueStart + removalStartOffset,\n                    commentValueStart + removalEndOffset\n                ],\n                text: \"\"\n            },\n            unprocessedDirective: directive.unprocessedDirective\n        };\n    });\n}\n\n/**\n * Creates a description of deleting an entire unused disable comment.\n * @param {Directive[]} directives Unused directives to be removed.\n * @param {Token} commentToken The backing Comment token.\n * @returns {{ description, fix, unprocessedDirective }} Details for later creation of an output Problem.\n */\nfunction createCommentRemoval(directives, commentToken) {\n    const { range } = commentToken;\n    const ruleIds = directives.filter(directive => directive.ruleId).map(directive => `'${directive.ruleId}'`);\n\n    return {\n        description: ruleIds.length <= 2\n            ? ruleIds.join(\" or \")\n            : `${ruleIds.slice(0, ruleIds.length - 1).join(\", \")}, or ${ruleIds[ruleIds.length - 1]}`,\n        fix: {\n            range,\n            text: \" \"\n        },\n        unprocessedDirective: directives[0].unprocessedDirective\n    };\n}\n\n/**\n * Parses details from directives to create output Problems.\n * @param {Directive[]} allDirectives Unused directives to be removed.\n * @returns {{ description, fix, unprocessedDirective }[]} Details for later creation of output Problems.\n */\nfunction processUnusedDisableDirectives(allDirectives) {\n    const directiveGroups = groupByParentComment(allDirectives);\n\n    return directiveGroups.flatMap(\n        directives => {\n            const { parentComment } = directives[0].unprocessedDirective;\n            const remainingRuleIds = new Set(parentComment.ruleIds);\n\n            for (const directive of directives) {\n                remainingRuleIds.delete(directive.ruleId);\n            }\n\n            return remainingRuleIds.size\n                ? createIndividualDirectivesRemoval(directives, parentComment.commentToken)\n                : [createCommentRemoval(directives, parentComment.commentToken)];\n        }\n    );\n}\n\n/**\n * This is the same as the exported function, except that it\n * doesn't handle disable-line and disable-next-line directives, and it always reports unused\n * disable directives.\n * @param {Object} options options for applying directives. This is the same as the options\n * for the exported function, except that `reportUnusedDisableDirectives` is not supported\n * (this function always reports unused disable directives).\n * @returns {{problems: Problem[], unusedDisableDirectives: Problem[]}} An object with a list\n * of problems (including suppressed ones) and unused eslint-disable directives\n */\nfunction applyDirectives(options) {\n    const problems = [];\n    const usedDisableDirectives = new Set();\n\n    for (const problem of options.problems) {\n        let disableDirectivesForProblem = [];\n        let nextDirectiveIndex = 0;\n\n        while (\n            nextDirectiveIndex < options.directives.length &&\n            compareLocations(options.directives[nextDirectiveIndex], problem) <= 0\n        ) {\n            const directive = options.directives[nextDirectiveIndex++];\n\n            if (directive.ruleId === null || directive.ruleId === problem.ruleId) {\n                switch (directive.type) {\n                    case \"disable\":\n                        disableDirectivesForProblem.push(directive);\n                        break;\n\n                    case \"enable\":\n                        disableDirectivesForProblem = [];\n                        break;\n\n                    // no default\n                }\n            }\n        }\n\n        if (disableDirectivesForProblem.length > 0) {\n            const suppressions = disableDirectivesForProblem.map(directive => ({\n                kind: \"directive\",\n                justification: directive.unprocessedDirective.justification\n            }));\n\n            if (problem.suppressions) {\n                problem.suppressions = problem.suppressions.concat(suppressions);\n            } else {\n                problem.suppressions = suppressions;\n                usedDisableDirectives.add(disableDirectivesForProblem[disableDirectivesForProblem.length - 1]);\n            }\n        }\n\n        problems.push(problem);\n    }\n\n    const unusedDisableDirectivesToReport = options.directives\n        .filter(directive => directive.type === \"disable\" && !usedDisableDirectives.has(directive));\n\n    const processed = processUnusedDisableDirectives(unusedDisableDirectivesToReport);\n\n    const unusedDisableDirectives = processed\n        .map(({ description, fix, unprocessedDirective }) => {\n            const { parentComment, type, line, column } = unprocessedDirective;\n\n            return {\n                ruleId: null,\n                message: description\n                    ? `Unused eslint-disable directive (no problems were reported from ${description}).`\n                    : \"Unused eslint-disable directive (no problems were reported).\",\n                line: type === \"disable-next-line\" ? parentComment.commentToken.loc.start.line : line,\n                column: type === \"disable-next-line\" ? parentComment.commentToken.loc.start.column + 1 : column,\n                severity: options.reportUnusedDisableDirectives === \"warn\" ? 1 : 2,\n                nodeType: null,\n                ...options.disableFixes ? {} : { fix }\n            };\n        });\n\n    return { problems, unusedDisableDirectives };\n}\n\n/**\n * Given a list of directive comments (i.e. metadata about eslint-disable and eslint-enable comments) and a list\n * of reported problems, adds the suppression information to the problems.\n * @param {Object} options Information about directives and problems\n * @param {{\n *      type: (\"disable\"|\"enable\"|\"disable-line\"|\"disable-next-line\"),\n *      ruleId: (string|null),\n *      line: number,\n *      column: number,\n *      justification: string\n * }} options.directives Directive comments found in the file, with one-based columns.\n * Two directive comments can only have the same location if they also have the same type (e.g. a single eslint-disable\n * comment for two different rules is represented as two directives).\n * @param {{ruleId: (string|null), line: number, column: number}[]} options.problems\n * A list of problems reported by rules, sorted by increasing location in the file, with one-based columns.\n * @param {\"off\" | \"warn\" | \"error\"} options.reportUnusedDisableDirectives If `\"warn\"` or `\"error\"`, adds additional problems for unused directives\n * @param {boolean} options.disableFixes If true, it doesn't make `fix` properties.\n * @returns {{ruleId: (string|null), line: number, column: number, suppressions?: {kind: string, justification: string}}[]}\n * An object with a list of reported problems, the suppressed of which contain the suppression information.\n */\nmodule.exports = ({ directives, disableFixes, problems, reportUnusedDisableDirectives = \"off\" }) => {\n    const blockDirectives = directives\n        .filter(directive => directive.type === \"disable\" || directive.type === \"enable\")\n        .map(directive => Object.assign({}, directive, { unprocessedDirective: directive }))\n        .sort(compareLocations);\n\n    const lineDirectives = directives.flatMap(directive => {\n        switch (directive.type) {\n            case \"disable\":\n            case \"enable\":\n                return [];\n\n            case \"disable-line\":\n                return [\n                    { type: \"disable\", line: directive.line, column: 1, ruleId: directive.ruleId, unprocessedDirective: directive },\n                    { type: \"enable\", line: directive.line + 1, column: 0, ruleId: directive.ruleId, unprocessedDirective: directive }\n                ];\n\n            case \"disable-next-line\":\n                return [\n                    { type: \"disable\", line: directive.line + 1, column: 1, ruleId: directive.ruleId, unprocessedDirective: directive },\n                    { type: \"enable\", line: directive.line + 2, column: 0, ruleId: directive.ruleId, unprocessedDirective: directive }\n                ];\n\n            default:\n                throw new TypeError(`Unrecognized directive type '${directive.type}'`);\n        }\n    }).sort(compareLocations);\n\n    const blockDirectivesResult = applyDirectives({\n        problems,\n        directives: blockDirectives,\n        disableFixes,\n        reportUnusedDisableDirectives\n    });\n    const lineDirectivesResult = applyDirectives({\n        problems: blockDirectivesResult.problems,\n        directives: lineDirectives,\n        disableFixes,\n        reportUnusedDisableDirectives\n    });\n\n    return reportUnusedDisableDirectives !== \"off\"\n        ? lineDirectivesResult.problems\n            .concat(blockDirectivesResult.unusedDisableDirectives)\n            .concat(lineDirectivesResult.unusedDisableDirectives)\n            .sort(compareLocations)\n        : lineDirectivesResult.problems;\n};\n/lib/rules/callback-return.js\u0019/**\n * @fileoverview Enforce return after a callback.\n * @author Jamund Ferguson\n * @deprecated in ESLint v7.0.0\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        deprecated: true,\n\n        replacedBy: [],\n\n        type: \"suggestion\",\n\n        docs: {\n            description: \"require `return` statements after callbacks\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/callback-return\"\n        },\n\n        schema: [{\n            type: \"array\",\n            items: { type: \"string\" }\n        }],\n\n        messages: {\n            missingReturn: \"Expected return with your callback function.\"\n        }\n    },\n\n    create(context) {\n\n        const callbacks = context.options[0] || [\"callback\", \"cb\", \"next\"],\n            sourceCode = context.getSourceCode();\n\n        //--------------------------------------------------------------------------\n        // Helpers\n        //--------------------------------------------------------------------------\n\n        /**\n         * Find the closest parent matching a list of types.\n         * @param {ASTNode} node The node whose parents we are searching\n         * @param {Array} types The node types to match\n         * @returns {ASTNode} The matched node or undefined.\n         */\n        function findClosestParentOfType(node, types) {\n            if (!node.parent) {\n                return null;\n            }\n            if (types.indexOf(node.parent.type) === -1) {\n                return findClosestParentOfType(node.parent, types);\n            }\n            return node.parent;\n        }\n\n        /**\n         * Check to see if a node contains only identifiers\n         * @param {ASTNode} node The node to check\n         * @returns {boolean} Whether or not the node contains only identifiers\n         */\n        function containsOnlyIdentifiers(node) {\n            if (node.type === \"Identifier\") {\n                return true;\n            }\n\n            if (node.type === \"MemberExpression\") {\n                if (node.object.type === \"Identifier\") {\n                    return true;\n                }\n                if (node.object.type === \"MemberExpression\") {\n                    return containsOnlyIdentifiers(node.object);\n                }\n            }\n\n            return false;\n        }\n\n        /**\n         * Check to see if a CallExpression is in our callback list.\n         * @param {ASTNode} node The node to check against our callback names list.\n         * @returns {boolean} Whether or not this function matches our callback name.\n         */\n        function isCallback(node) {\n            return containsOnlyIdentifiers(node.callee) && callbacks.indexOf(sourceCode.getText(node.callee)) > -1;\n        }\n\n        /**\n         * Determines whether or not the callback is part of a callback expression.\n         * @param {ASTNode} node The callback node\n         * @param {ASTNode} parentNode The expression node\n         * @returns {boolean} Whether or not this is part of a callback expression\n         */\n        function isCallbackExpression(node, parentNode) {\n\n            // ensure the parent node exists and is an expression\n            if (!parentNode || parentNode.type !== \"ExpressionStatement\") {\n                return false;\n            }\n\n            // cb()\n            if (parentNode.expression === node) {\n                return true;\n            }\n\n            // special case for cb && cb() and similar\n            if (parentNode.expression.type === \"BinaryExpression\" || parentNode.expression.type === \"LogicalExpression\") {\n                if (parentNode.expression.right === node) {\n                    return true;\n                }\n            }\n\n            return false;\n        }\n\n        //--------------------------------------------------------------------------\n        // Public\n        //--------------------------------------------------------------------------\n\n        return {\n            CallExpression(node) {\n\n                // if we're not a callback we can return\n                if (!isCallback(node)) {\n                    return;\n                }\n\n                // find the closest block, return or loop\n                const closestBlock = findClosestParentOfType(node, [\"BlockStatement\", \"ReturnStatement\", \"ArrowFunctionExpression\"]) || {};\n\n                // if our parent is a return we know we're ok\n                if (closestBlock.type === \"ReturnStatement\") {\n                    return;\n                }\n\n                // arrow functions don't always have blocks and implicitly return\n                if (closestBlock.type === \"ArrowFunctionExpression\") {\n                    return;\n                }\n\n                // block statements are part of functions and most if statements\n                if (closestBlock.type === \"BlockStatement\") {\n\n                    // find the last item in the block\n                    const lastItem = closestBlock.body[closestBlock.body.length - 1];\n\n                    // if the callback is the last thing in a block that might be ok\n                    if (isCallbackExpression(node, lastItem)) {\n\n                        const parentType = closestBlock.parent.type;\n\n                        // but only if the block is part of a function\n                        if (parentType === \"FunctionExpression\" ||\n                            parentType === \"FunctionDeclaration\" ||\n                            parentType === \"ArrowFunctionExpression\"\n                        ) {\n                            return;\n                        }\n\n                    }\n\n                    // ending a block with a return is also ok\n                    if (lastItem.type === \"ReturnStatement\") {\n\n                        // but only if the callback is immediately before\n                        if (isCallbackExpression(node, closestBlock.body[closestBlock.body.length - 2])) {\n                            return;\n                        }\n                    }\n\n                }\n\n                // as long as you're the child of a function at this point you should be asked to return\n                if (findClosestParentOfType(node, [\"FunctionDeclaration\", \"FunctionExpression\", \"ArrowFunctionExpression\"])) {\n                    context.report({ node, messageId: \"missingReturn\" });\n                }\n\n            }\n\n        };\n    }\n};\n/lib/rules/no-sync.js\u0006/**\n * @fileoverview Rule to check for properties whose identifier ends with the string Sync\n * @author Matt DuVall<http://mattduvall.com/>\n * @deprecated in ESLint v7.0.0\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        deprecated: true,\n\n        replacedBy: [],\n\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow synchronous methods\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-sync\"\n        },\n\n        schema: [\n            {\n                type: \"object\",\n                properties: {\n                    allowAtRootLevel: {\n                        type: \"boolean\",\n                        default: false\n                    }\n                },\n                additionalProperties: false\n            }\n        ],\n\n        messages: {\n            noSync: \"Unexpected sync method: '{{propertyName}}'.\"\n        }\n    },\n\n    create(context) {\n        const selector = context.options[0] && context.options[0].allowAtRootLevel\n            ? \":function MemberExpression[property.name=/.*Sync$/]\"\n            : \"MemberExpression[property.name=/.*Sync$/]\";\n\n        return {\n            [selector](node) {\n                context.report({\n                    node,\n                    messageId: \"noSync\",\n                    data: {\n                        propertyName: node.property.name\n                    }\n                });\n            }\n        };\n\n    }\n};\n/conf/eslint-all.js\u0003/**\n * @fileoverview Config to enable all rules.\n * @author Robert Fletcher\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst builtInRules = require(\"../lib/rules\");\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\nconst allRules = {};\n\nfor (const [ruleId, rule] of builtInRules) {\n    if (!rule.meta.deprecated) {\n        allRules[ruleId] = \"error\";\n    }\n}\n\n//------------------------------------------------------------------------------\n// Public Interface\n//------------------------------------------------------------------------------\n\n/** @type {import(\"../lib/shared/types\").ConfigData} */\nmodule.exports = { rules: allRules };\n(/lib/rules/no-shadow-restricted-names.js\bk/**\n * @fileoverview Disallow shadowing of NaN, undefined, and Infinity (ES5 section 15.1.1)\n * @author Michael Ficarra\n */\n\"use strict\";\n\n/**\n * Determines if a variable safely shadows undefined.\n * This is the case when a variable named `undefined` is never assigned to a value (i.e. it always shares the same value\n * as the global).\n * @param {eslintScope.Variable} variable The variable to check\n * @returns {boolean} true if this variable safely shadows `undefined`\n */\nfunction safelyShadowsUndefined(variable) {\n    return variable.name === \"undefined\" &&\n        variable.references.every(ref => !ref.isWrite()) &&\n        variable.defs.every(def => def.node.type === \"VariableDeclarator\" && def.node.init === null);\n}\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow identifiers from shadowing restricted names\",\n            recommended: true,\n            url: \"https://eslint.org/docs/rules/no-shadow-restricted-names\"\n        },\n\n        schema: [],\n\n        messages: {\n            shadowingRestrictedName: \"Shadowing of global property '{{name}}'.\"\n        }\n    },\n\n    create(context) {\n\n\n        const RESTRICTED = new Set([\"undefined\", \"NaN\", \"Infinity\", \"arguments\", \"eval\"]);\n\n        return {\n            \"VariableDeclaration, :function, CatchClause\"(node) {\n                for (const variable of context.getDeclaredVariables(node)) {\n                    if (variable.defs.length > 0 && RESTRICTED.has(variable.name) && !safelyShadowsUndefined(variable)) {\n                        context.report({\n                            node: variable.defs[0].name,\n                            messageId: \"shadowingRestrictedName\",\n                            data: {\n                                name: variable.name\n                            }\n                        });\n                    }\n                }\n            }\n        };\n\n    }\n};\n\"/lib/rules/no-use-before-define.js)w/**\n * @fileoverview Rule to flag use of variables before they are defined\n * @author Ilya Volodin\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\nconst SENTINEL_TYPE = /^(?:(?:Function|Class)(?:Declaration|Expression)|ArrowFunctionExpression|CatchClause|ImportDeclaration|ExportNamedDeclaration)$/u;\nconst FOR_IN_OF_TYPE = /^For(?:In|Of)Statement$/u;\n\n/**\n * Parses a given value as options.\n * @param {any} options A value to parse.\n * @returns {Object} The parsed options.\n */\nfunction parseOptions(options) {\n    let functions = true;\n    let classes = true;\n    let variables = true;\n\n    if (typeof options === \"string\") {\n        functions = (options !== \"nofunc\");\n    } else if (typeof options === \"object\" && options !== null) {\n        functions = options.functions !== false;\n        classes = options.classes !== false;\n        variables = options.variables !== false;\n    }\n\n    return { functions, classes, variables };\n}\n\n/**\n * Checks whether or not a given location is inside of the range of a given node.\n * @param {ASTNode} node An node to check.\n * @param {number} location A location to check.\n * @returns {boolean} `true` if the location is inside of the range of the node.\n */\nfunction isInRange(node, location) {\n    return node && node.range[0] <= location && location <= node.range[1];\n}\n\n/**\n * Checks whether or not a given location is inside of the range of a class static initializer.\n * Static initializers are static blocks and initializers of static fields.\n * @param {ASTNode} node `ClassBody` node to check static initializers.\n * @param {number} location A location to check.\n * @returns {boolean} `true` if the location is inside of a class static initializer.\n */\nfunction isInClassStaticInitializerRange(node, location) {\n    return node.body.some(classMember => (\n        (\n            classMember.type === \"StaticBlock\" &&\n            isInRange(classMember, location)\n        ) ||\n        (\n            classMember.type === \"PropertyDefinition\" &&\n            classMember.static &&\n            classMember.value &&\n            isInRange(classMember.value, location)\n        )\n    ));\n}\n\n/**\n * Checks whether a given scope is the scope of a a class static initializer.\n * Static initializers are static blocks and initializers of static fields.\n * @param {eslint-scope.Scope} scope A scope to check.\n * @returns {boolean} `true` if the scope is a class static initializer scope.\n */\nfunction isClassStaticInitializerScope(scope) {\n    if (scope.type === \"class-static-block\") {\n        return true;\n    }\n\n    if (scope.type === \"class-field-initializer\") {\n\n        // `scope.block` is PropertyDefinition#value node\n        const propertyDefinition = scope.block.parent;\n\n        return propertyDefinition.static;\n    }\n\n    return false;\n}\n\n/**\n * Checks whether a given reference is evaluated in an execution context\n * that isn't the one where the variable it refers to is defined.\n * Execution contexts are:\n * - top-level\n * - functions\n * - class field initializers (implicit functions)\n * - class static blocks (implicit functions)\n * Static class field initializers and class static blocks are automatically run during the class definition evaluation,\n * and therefore we'll consider them as a part of the parent execution context.\n * Example:\n *\n *   const x = 1;\n *\n *   x; // returns `false`\n *   () => x; // returns `true`\n *\n *   class C {\n *       field = x; // returns `true`\n *       static field = x; // returns `false`\n *\n *       method() {\n *           x; // returns `true`\n *       }\n *\n *       static method() {\n *           x; // returns `true`\n *       }\n *\n *       static {\n *           x; // returns `false`\n *       }\n *   }\n * @param {eslint-scope.Reference} reference A reference to check.\n * @returns {boolean} `true` if the reference is from a separate execution context.\n */\nfunction isFromSeparateExecutionContext(reference) {\n    const variable = reference.resolved;\n    let scope = reference.from;\n\n    // Scope#variableScope represents execution context\n    while (variable.scope.variableScope !== scope.variableScope) {\n        if (isClassStaticInitializerScope(scope.variableScope)) {\n            scope = scope.variableScope.upper;\n        } else {\n            return true;\n        }\n    }\n\n    return false;\n}\n\n/**\n * Checks whether or not a given reference is evaluated during the initialization of its variable.\n *\n * This returns `true` in the following cases:\n *\n *     var a = a\n *     var [a = a] = list\n *     var {a = a} = obj\n *     for (var a in a) {}\n *     for (var a of a) {}\n *     var C = class { [C]; };\n *     var C = class { static foo = C; };\n *     var C = class { static { foo = C; } };\n *     class C extends C {}\n *     class C extends (class { static foo = C; }) {}\n *     class C { [C]; }\n * @param {Reference} reference A reference to check.\n * @returns {boolean} `true` if the reference is evaluated during the initialization.\n */\nfunction isEvaluatedDuringInitialization(reference) {\n    if (isFromSeparateExecutionContext(reference)) {\n\n        /*\n         * Even if the reference appears in the initializer, it isn't evaluated during the initialization.\n         * For example, `const x = () => x;` is valid.\n         */\n        return false;\n    }\n\n    const location = reference.identifier.range[1];\n    const definition = reference.resolved.defs[0];\n\n    if (definition.type === \"ClassName\") {\n\n        // `ClassDeclaration` or `ClassExpression`\n        const classDefinition = definition.node;\n\n        return (\n            isInRange(classDefinition, location) &&\n\n            /*\n             * Class binding is initialized before running static initializers.\n             * For example, `class C { static foo = C; static { bar = C; } }` is valid.\n             */\n            !isInClassStaticInitializerRange(classDefinition.body, location)\n        );\n    }\n\n    let node = definition.name.parent;\n\n    while (node) {\n        if (node.type === \"VariableDeclarator\") {\n            if (isInRange(node.init, location)) {\n                return true;\n            }\n            if (FOR_IN_OF_TYPE.test(node.parent.parent.type) &&\n                isInRange(node.parent.parent.right, location)\n            ) {\n                return true;\n            }\n            break;\n        } else if (node.type === \"AssignmentPattern\") {\n            if (isInRange(node.right, location)) {\n                return true;\n            }\n        } else if (SENTINEL_TYPE.test(node.type)) {\n            break;\n        }\n\n        node = node.parent;\n    }\n\n    return false;\n}\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"problem\",\n\n        docs: {\n            description: \"disallow the use of variables before they are defined\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-use-before-define\"\n        },\n\n        schema: [\n            {\n                oneOf: [\n                    {\n                        enum: [\"nofunc\"]\n                    },\n                    {\n                        type: \"object\",\n                        properties: {\n                            functions: { type: \"boolean\" },\n                            classes: { type: \"boolean\" },\n                            variables: { type: \"boolean\" }\n                        },\n                        additionalProperties: false\n                    }\n                ]\n            }\n        ],\n\n        messages: {\n            usedBeforeDefined: \"'{{name}}' was used before it was defined.\"\n        }\n    },\n\n    create(context) {\n        const options = parseOptions(context.options[0]);\n\n        /**\n         * Determines whether a given reference should be checked.\n         *\n         * Returns `false` if the reference is:\n         * - initialization's (e.g., `let a = 1`).\n         * - referring to an undefined variable (i.e., if it's an unresolved reference).\n         * - referring to a variable that is defined, but not in the given source code\n         *   (e.g., global environment variable or `arguments` in functions).\n         * - allowed by options.\n         * @param {eslint-scope.Reference} reference The reference\n         * @returns {boolean} `true` if the reference should be checked\n         */\n        function shouldCheck(reference) {\n            if (reference.init) {\n                return false;\n            }\n\n            const variable = reference.resolved;\n\n            if (!variable || variable.defs.length === 0) {\n                return false;\n            }\n\n            const definitionType = variable.defs[0].type;\n\n            if (!options.functions && definitionType === \"FunctionName\") {\n                return false;\n            }\n\n            if (\n                (\n                    !options.variables && definitionType === \"Variable\" ||\n                    !options.classes && definitionType === \"ClassName\"\n                ) &&\n\n                // don't skip checking the reference if it's in the same execution context, because of TDZ\n                isFromSeparateExecutionContext(reference)\n            ) {\n                return false;\n            }\n\n            return true;\n        }\n\n        /**\n         * Finds and validates all references in a given scope and its child scopes.\n         * @param {eslint-scope.Scope} scope The scope object.\n         * @returns {void}\n         */\n        function checkReferencesInScope(scope) {\n            scope.references.filter(shouldCheck).forEach(reference => {\n                const variable = reference.resolved;\n                const definitionIdentifier = variable.defs[0].name;\n\n                if (\n                    reference.identifier.range[1] < definitionIdentifier.range[1] ||\n                    isEvaluatedDuringInitialization(reference)\n                ) {\n                    context.report({\n                        node: reference.identifier,\n                        messageId: \"usedBeforeDefined\",\n                        data: reference.identifier\n                    });\n                }\n            });\n\n            scope.childScopes.forEach(checkReferencesInScope);\n        }\n\n        return {\n            Program() {\n                checkReferencesInScope(context.getScope());\n            }\n        };\n    }\n};\n/conf/default-cli-options.js\u0002/**\n * @fileoverview Default CLIEngineOptions.\n * @author Ian VanSchooten\n */\n\n\"use strict\";\n\nmodule.exports = {\n    configFile: null,\n    baseConfig: false,\n    rulePaths: [],\n    useEslintrc: true,\n    envs: [],\n    globals: [],\n    extensions: null,\n    ignore: true,\n    ignorePath: void 0,\n    cache: false,\n\n    /*\n     * in order to honor the cacheFile option if specified\n     * this option should not have a default value otherwise\n     * it will always be used\n     */\n    cacheLocation: \"\",\n    cacheFile: \".eslintcache\",\n    cacheStrategy: \"metadata\",\n    fix: false,\n    allowInlineConfig: true,\n    reportUnusedDisableDirectives: void 0,\n    globInputPaths: true\n};\n+/lib/linter/code-path-analysis/code-path.js\u001d\u0014/**\n * @fileoverview A class of the code path.\n * @author Toru Nagashima\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst CodePathState = require(\"./code-path-state\");\nconst IdGenerator = require(\"./id-generator\");\n\n//------------------------------------------------------------------------------\n// Public Interface\n//------------------------------------------------------------------------------\n\n/**\n * A code path.\n */\nclass CodePath {\n\n    /**\n     * Creates a new instance.\n     * @param {Object} options Options for the function (see below).\n     * @param {string} options.id An identifier.\n     * @param {string} options.origin The type of code path origin.\n     * @param {CodePath|null} options.upper The code path of the upper function scope.\n     * @param {Function} options.onLooped A callback function to notify looping.\n     */\n    constructor({ id, origin, upper, onLooped }) {\n\n        /**\n         * The identifier of this code path.\n         * Rules use it to store additional information of each rule.\n         * @type {string}\n         */\n        this.id = id;\n\n        /**\n         * The reason that this code path was started. May be \"program\",\n         * \"function\", \"class-field-initializer\", or \"class-static-block\".\n         * @type {string}\n         */\n        this.origin = origin;\n\n        /**\n         * The code path of the upper function scope.\n         * @type {CodePath|null}\n         */\n        this.upper = upper;\n\n        /**\n         * The code paths of nested function scopes.\n         * @type {CodePath[]}\n         */\n        this.childCodePaths = [];\n\n        // Initializes internal state.\n        Object.defineProperty(\n            this,\n            \"internal\",\n            { value: new CodePathState(new IdGenerator(`${id}_`), onLooped) }\n        );\n\n        // Adds this into `childCodePaths` of `upper`.\n        if (upper) {\n            upper.childCodePaths.push(this);\n        }\n    }\n\n    /**\n     * Gets the state of a given code path.\n     * @param {CodePath} codePath A code path to get.\n     * @returns {CodePathState} The state of the code path.\n     */\n    static getState(codePath) {\n        return codePath.internal;\n    }\n\n    /**\n     * The initial code path segment.\n     * @type {CodePathSegment}\n     */\n    get initialSegment() {\n        return this.internal.initialSegment;\n    }\n\n    /**\n     * Final code path segments.\n     * This array is a mix of `returnedSegments` and `thrownSegments`.\n     * @type {CodePathSegment[]}\n     */\n    get finalSegments() {\n        return this.internal.finalSegments;\n    }\n\n    /**\n     * Final code path segments which is with `return` statements.\n     * This array contains the last path segment if it's reachable.\n     * Since the reachable last path returns `undefined`.\n     * @type {CodePathSegment[]}\n     */\n    get returnedSegments() {\n        return this.internal.returnedForkContext;\n    }\n\n    /**\n     * Final code path segments which is with `throw` statements.\n     * @type {CodePathSegment[]}\n     */\n    get thrownSegments() {\n        return this.internal.thrownForkContext;\n    }\n\n    /**\n     * Current code path segments.\n     * @type {CodePathSegment[]}\n     */\n    get currentSegments() {\n        return this.internal.currentSegments;\n    }\n\n    /**\n     * Traverses all segments in this code path.\n     *\n     *     codePath.traverseSegments(function(segment, controller) {\n     *         // do something.\n     *     });\n     *\n     * This method enumerates segments in order from the head.\n     *\n     * The `controller` object has two methods.\n     *\n     * - `controller.skip()` - Skip the following segments in this branch.\n     * - `controller.break()` - Skip all following segments.\n     * @param {Object} [options] Omittable.\n     * @param {CodePathSegment} [options.first] The first segment to traverse.\n     * @param {CodePathSegment} [options.last] The last segment to traverse.\n     * @param {Function} callback A callback function.\n     * @returns {void}\n     */\n    traverseSegments(options, callback) {\n        let resolvedOptions;\n        let resolvedCallback;\n\n        if (typeof options === \"function\") {\n            resolvedCallback = options;\n            resolvedOptions = {};\n        } else {\n            resolvedOptions = options || {};\n            resolvedCallback = callback;\n        }\n\n        const startSegment = resolvedOptions.first || this.internal.initialSegment;\n        const lastSegment = resolvedOptions.last;\n\n        let item = null;\n        let index = 0;\n        let end = 0;\n        let segment = null;\n        const visited = Object.create(null);\n        const stack = [[startSegment, 0]];\n        let skippedSegment = null;\n        let broken = false;\n        const controller = {\n            skip() {\n                if (stack.length <= 1) {\n                    broken = true;\n                } else {\n                    skippedSegment = stack[stack.length - 2][0];\n                }\n            },\n            break() {\n                broken = true;\n            }\n        };\n\n        /**\n         * Checks a given previous segment has been visited.\n         * @param {CodePathSegment} prevSegment A previous segment to check.\n         * @returns {boolean} `true` if the segment has been visited.\n         */\n        function isVisited(prevSegment) {\n            return (\n                visited[prevSegment.id] ||\n                segment.isLoopedPrevSegment(prevSegment)\n            );\n        }\n\n        while (stack.length > 0) {\n            item = stack[stack.length - 1];\n            segment = item[0];\n            index = item[1];\n\n            if (index === 0) {\n\n                // Skip if this segment has been visited already.\n                if (visited[segment.id]) {\n                    stack.pop();\n                    continue;\n                }\n\n                // Skip if all previous segments have not been visited.\n                if (segment !== startSegment &&\n                    segment.prevSegments.length > 0 &&\n                    !segment.prevSegments.every(isVisited)\n                ) {\n                    stack.pop();\n                    continue;\n                }\n\n                // Reset the flag of skipping if all branches have been skipped.\n                if (skippedSegment && segment.prevSegments.indexOf(skippedSegment) !== -1) {\n                    skippedSegment = null;\n                }\n                visited[segment.id] = true;\n\n                // Call the callback when the first time.\n                if (!skippedSegment) {\n                    resolvedCallback.call(this, segment, controller);\n                    if (segment === lastSegment) {\n                        controller.skip();\n                    }\n                    if (broken) {\n                        break;\n                    }\n                }\n            }\n\n            // Update the stack.\n            end = segment.nextSegments.length - 1;\n            if (index < end) {\n                item[1] += 1;\n                stack.push([segment.nextSegments[index], 0]);\n            } else if (index === end) {\n                item[0] = segment.nextSegments[index];\n                item[1] = 0;\n            } else {\n                stack.pop();\n            }\n        }\n    }\n}\n\nmodule.exports = CodePath;\n$/lib/rules/utils/patterns/letters.js\u001f/**\n * @fileoverview Pattern for detecting any letter (even letters outside of ASCII).\n * NOTE: This file was generated using this script in JSCS based on the Unicode 7.0.0 standard: https://github.com/jscs-dev/node-jscs/blob/f5ed14427deb7e7aac84f3056a5aab2d9f3e563e/publish/helpers/generate-patterns.js\n * Do not edit this file by hand-- please use https://github.com/mathiasbynens/regenerate to regenerate the regular expression exported from this file.\n * @author Kevin Partington\n * @license MIT License (from JSCS). See below.\n */\n\n/*\n * The MIT License (MIT)\n *\n * Copyright 2013-2016 Dulin Marat and other contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n\n\"use strict\";\n\nmodule.exports = /[A-Za-z\\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-\\u08B2\\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\\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\\u0C59\\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\\u0D60\\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-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\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\\u19C1-\\u19C7\\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\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\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\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA7AD\\uA7B0\\uA7B1\\uA7F7-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\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-\\uAB5F\\uAB64\\uAB65\\uABC0-\\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\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF30-\\uDF40\\uDF42-\\uDF49\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF]|\\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\\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]|\\uD804[\\uDC03-\\uDC37\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF5D-\\uDF61]|\\uD805[\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA]|\\uD806[\\uDCA0-\\uDCDF\\uDCFF\\uDEC0-\\uDEF8]|\\uD808[\\uDC00-\\uDF98]|[\\uD80C\\uD840-\\uD868\\uD86A-\\uD86C][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\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]|\\uD87E[\\uDC00-\\uDE1D]/u;\n/lib/rules/no-undef.js\b/**\n * @fileoverview Rule to flag references to undeclared variables.\n * @author Mark Macdonald\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\n/**\n * Checks if the given node is the argument of a typeof operator.\n * @param {ASTNode} node The AST node being checked.\n * @returns {boolean} Whether or not the node is the argument of a typeof operator.\n */\nfunction hasTypeOfOperator(node) {\n    const parent = node.parent;\n\n    return parent.type === \"UnaryExpression\" && parent.operator === \"typeof\";\n}\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"problem\",\n\n        docs: {\n            description: \"disallow the use of undeclared variables unless mentioned in `/*global */` comments\",\n            recommended: true,\n            url: \"https://eslint.org/docs/rules/no-undef\"\n        },\n\n        schema: [\n            {\n                type: \"object\",\n                properties: {\n                    typeof: {\n                        type: \"boolean\",\n                        default: false\n                    }\n                },\n                additionalProperties: false\n            }\n        ],\n        messages: {\n            undef: \"'{{name}}' is not defined.\"\n        }\n    },\n\n    create(context) {\n        const options = context.options[0];\n        const considerTypeOf = options && options.typeof === true || false;\n\n        return {\n            \"Program:exit\"(/* node */) {\n                const globalScope = context.getScope();\n\n                globalScope.through.forEach(ref => {\n                    const identifier = ref.identifier;\n\n                    if (!considerTypeOf && hasTypeOfOperator(identifier)) {\n                        return;\n                    }\n\n                    context.report({\n                        node: identifier,\n                        messageId: \"undef\",\n                        data: identifier\n                    });\n                });\n            }\n        };\n    }\n};\n/lib/rules/require-await.js\r\u0014/**\n * @fileoverview Rule to disallow async functions which have no `await` expression.\n * @author Toru Nagashima\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\n/**\n * Capitalize the 1st letter of the given text.\n * @param {string} text The text to capitalize.\n * @returns {string} The text that the 1st letter was capitalized.\n */\nfunction capitalizeFirstLetter(text) {\n    return text[0].toUpperCase() + text.slice(1);\n}\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow async functions which have no `await` expression\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/require-await\"\n        },\n\n        schema: [],\n\n        messages: {\n            missingAwait: \"{{name}} has no 'await' expression.\"\n        }\n    },\n\n    create(context) {\n        const sourceCode = context.getSourceCode();\n        let scopeInfo = null;\n\n        /**\n         * Push the scope info object to the stack.\n         * @returns {void}\n         */\n        function enterFunction() {\n            scopeInfo = {\n                upper: scopeInfo,\n                hasAwait: false\n            };\n        }\n\n        /**\n         * Pop the top scope info object from the stack.\n         * Also, it reports the function if needed.\n         * @param {ASTNode} node The node to report.\n         * @returns {void}\n         */\n        function exitFunction(node) {\n            if (!node.generator && node.async && !scopeInfo.hasAwait && !astUtils.isEmptyFunction(node)) {\n                context.report({\n                    node,\n                    loc: astUtils.getFunctionHeadLoc(node, sourceCode),\n                    messageId: \"missingAwait\",\n                    data: {\n                        name: capitalizeFirstLetter(\n                            astUtils.getFunctionNameWithKind(node)\n                        )\n                    }\n                });\n            }\n\n            scopeInfo = scopeInfo.upper;\n        }\n\n        return {\n            FunctionDeclaration: enterFunction,\n            FunctionExpression: enterFunction,\n            ArrowFunctionExpression: enterFunction,\n            \"FunctionDeclaration:exit\": exitFunction,\n            \"FunctionExpression:exit\": exitFunction,\n            \"ArrowFunctionExpression:exit\": exitFunction,\n\n            AwaitExpression() {\n                if (!scopeInfo) {\n                    return;\n                }\n\n                scopeInfo.hasAwait = true;\n            },\n            ForOfStatement(node) {\n                if (!scopeInfo) {\n                    return;\n                }\n\n                if (node.await) {\n                    scopeInfo.hasAwait = true;\n                }\n            }\n        };\n    }\n};\n/lib/rules/no-unused-vars.jsf\u0002/**\n * @fileoverview Rule to flag declared but unused variables\n * @author Ilya Volodin\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Typedefs\n//------------------------------------------------------------------------------\n\n/**\n * Bag of data used for formatting the `unusedVar` lint message.\n * @typedef {Object} UnusedVarMessageData\n * @property {string} varName The name of the unused var.\n * @property {'defined'|'assigned a value'} action Description of the vars state.\n * @property {string} additional Any additional info to be appended at the end.\n */\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"problem\",\n\n        docs: {\n            description: \"disallow unused variables\",\n            recommended: true,\n            url: \"https://eslint.org/docs/rules/no-unused-vars\"\n        },\n\n        schema: [\n            {\n                oneOf: [\n                    {\n                        enum: [\"all\", \"local\"]\n                    },\n                    {\n                        type: \"object\",\n                        properties: {\n                            vars: {\n                                enum: [\"all\", \"local\"]\n                            },\n                            varsIgnorePattern: {\n                                type: \"string\"\n                            },\n                            args: {\n                                enum: [\"all\", \"after-used\", \"none\"]\n                            },\n                            ignoreRestSiblings: {\n                                type: \"boolean\"\n                            },\n                            argsIgnorePattern: {\n                                type: \"string\"\n                            },\n                            caughtErrors: {\n                                enum: [\"all\", \"none\"]\n                            },\n                            caughtErrorsIgnorePattern: {\n                                type: \"string\"\n                            }\n                        },\n                        additionalProperties: false\n                    }\n                ]\n            }\n        ],\n\n        messages: {\n            unusedVar: \"'{{varName}}' is {{action}} but never used{{additional}}.\"\n        }\n    },\n\n    create(context) {\n        const sourceCode = context.getSourceCode();\n\n        const REST_PROPERTY_TYPE = /^(?:RestElement|(?:Experimental)?RestProperty)$/u;\n\n        const config = {\n            vars: \"all\",\n            args: \"after-used\",\n            ignoreRestSiblings: false,\n            caughtErrors: \"none\"\n        };\n\n        const firstOption = context.options[0];\n\n        if (firstOption) {\n            if (typeof firstOption === \"string\") {\n                config.vars = firstOption;\n            } else {\n                config.vars = firstOption.vars || config.vars;\n                config.args = firstOption.args || config.args;\n                config.ignoreRestSiblings = firstOption.ignoreRestSiblings || config.ignoreRestSiblings;\n                config.caughtErrors = firstOption.caughtErrors || config.caughtErrors;\n\n                if (firstOption.varsIgnorePattern) {\n                    config.varsIgnorePattern = new RegExp(firstOption.varsIgnorePattern, \"u\");\n                }\n\n                if (firstOption.argsIgnorePattern) {\n                    config.argsIgnorePattern = new RegExp(firstOption.argsIgnorePattern, \"u\");\n                }\n\n                if (firstOption.caughtErrorsIgnorePattern) {\n                    config.caughtErrorsIgnorePattern = new RegExp(firstOption.caughtErrorsIgnorePattern, \"u\");\n                }\n            }\n        }\n\n        /**\n         * Generates the message data about the variable being defined and unused,\n         * including the ignore pattern if configured.\n         * @param {Variable} unusedVar eslint-scope variable object.\n         * @returns {UnusedVarMessageData} The message data to be used with this unused variable.\n         */\n        function getDefinedMessageData(unusedVar) {\n            const defType = unusedVar.defs && unusedVar.defs[0] && unusedVar.defs[0].type;\n            let type;\n            let pattern;\n\n            if (defType === \"CatchClause\" && config.caughtErrorsIgnorePattern) {\n                type = \"args\";\n                pattern = config.caughtErrorsIgnorePattern.toString();\n            } else if (defType === \"Parameter\" && config.argsIgnorePattern) {\n                type = \"args\";\n                pattern = config.argsIgnorePattern.toString();\n            } else if (defType !== \"Parameter\" && config.varsIgnorePattern) {\n                type = \"vars\";\n                pattern = config.varsIgnorePattern.toString();\n            }\n\n            const additional = type ? `. Allowed unused ${type} must match ${pattern}` : \"\";\n\n            return {\n                varName: unusedVar.name,\n                action: \"defined\",\n                additional\n            };\n        }\n\n        /**\n         * Generate the warning message about the variable being\n         * assigned and unused, including the ignore pattern if configured.\n         * @param {Variable} unusedVar eslint-scope variable object.\n         * @returns {UnusedVarMessageData} The message data to be used with this unused variable.\n         */\n        function getAssignedMessageData(unusedVar) {\n            const additional = config.varsIgnorePattern ? `. Allowed unused vars must match ${config.varsIgnorePattern.toString()}` : \"\";\n\n            return {\n                varName: unusedVar.name,\n                action: \"assigned a value\",\n                additional\n            };\n        }\n\n        //--------------------------------------------------------------------------\n        // Helpers\n        //--------------------------------------------------------------------------\n\n        const STATEMENT_TYPE = /(?:Statement|Declaration)$/u;\n\n        /**\n         * Determines if a given variable is being exported from a module.\n         * @param {Variable} variable eslint-scope variable object.\n         * @returns {boolean} True if the variable is exported, false if not.\n         * @private\n         */\n        function isExported(variable) {\n\n            const definition = variable.defs[0];\n\n            if (definition) {\n\n                let node = definition.node;\n\n                if (node.type === \"VariableDeclarator\") {\n                    node = node.parent;\n                } else if (definition.type === \"Parameter\") {\n                    return false;\n                }\n\n                return node.parent.type.indexOf(\"Export\") === 0;\n            }\n            return false;\n\n        }\n\n        /**\n         * Checks whether a node is a sibling of the rest property or not.\n         * @param {ASTNode} node a node to check\n         * @returns {boolean} True if the node is a sibling of the rest property, otherwise false.\n         */\n        function hasRestSibling(node) {\n            return node.type === \"Property\" &&\n                node.parent.type === \"ObjectPattern\" &&\n                REST_PROPERTY_TYPE.test(node.parent.properties[node.parent.properties.length - 1].type);\n        }\n\n        /**\n         * Determines if a variable has a sibling rest property\n         * @param {Variable} variable eslint-scope variable object.\n         * @returns {boolean} True if the variable is exported, false if not.\n         * @private\n         */\n        function hasRestSpreadSibling(variable) {\n            if (config.ignoreRestSiblings) {\n                const hasRestSiblingDefinition = variable.defs.some(def => hasRestSibling(def.name.parent));\n                const hasRestSiblingReference = variable.references.some(ref => hasRestSibling(ref.identifier.parent));\n\n                return hasRestSiblingDefinition || hasRestSiblingReference;\n            }\n\n            return false;\n        }\n\n        /**\n         * Determines if a reference is a read operation.\n         * @param {Reference} ref An eslint-scope Reference\n         * @returns {boolean} whether the given reference represents a read operation\n         * @private\n         */\n        function isReadRef(ref) {\n            return ref.isRead();\n        }\n\n        /**\n         * Determine if an identifier is referencing an enclosing function name.\n         * @param {Reference} ref The reference to check.\n         * @param {ASTNode[]} nodes The candidate function nodes.\n         * @returns {boolean} True if it's a self-reference, false if not.\n         * @private\n         */\n        function isSelfReference(ref, nodes) {\n            let scope = ref.from;\n\n            while (scope) {\n                if (nodes.indexOf(scope.block) >= 0) {\n                    return true;\n                }\n\n                scope = scope.upper;\n            }\n\n            return false;\n        }\n\n        /**\n         * Gets a list of function definitions for a specified variable.\n         * @param {Variable} variable eslint-scope variable object.\n         * @returns {ASTNode[]} Function nodes.\n         * @private\n         */\n        function getFunctionDefinitions(variable) {\n            const functionDefinitions = [];\n\n            variable.defs.forEach(def => {\n                const { type, node } = def;\n\n                // FunctionDeclarations\n                if (type === \"FunctionName\") {\n                    functionDefinitions.push(node);\n                }\n\n                // FunctionExpressions\n                if (type === \"Variable\" && node.init &&\n                    (node.init.type === \"FunctionExpression\" || node.init.type === \"ArrowFunctionExpression\")) {\n                    functionDefinitions.push(node.init);\n                }\n            });\n            return functionDefinitions;\n        }\n\n        /**\n         * Checks the position of given nodes.\n         * @param {ASTNode} inner A node which is expected as inside.\n         * @param {ASTNode} outer A node which is expected as outside.\n         * @returns {boolean} `true` if the `inner` node exists in the `outer` node.\n         * @private\n         */\n        function isInside(inner, outer) {\n            return (\n                inner.range[0] >= outer.range[0] &&\n                inner.range[1] <= outer.range[1]\n            );\n        }\n\n        /**\n         * Checks whether a given node is unused expression or not.\n         * @param {ASTNode} node The node itself\n         * @returns {boolean} The node is an unused expression.\n         * @private\n         */\n        function isUnusedExpression(node) {\n            const parent = node.parent;\n\n            if (parent.type === \"ExpressionStatement\") {\n                return true;\n            }\n\n            if (parent.type === \"SequenceExpression\") {\n                const isLastExpression = parent.expressions[parent.expressions.length - 1] === node;\n\n                if (!isLastExpression) {\n                    return true;\n                }\n                return isUnusedExpression(parent);\n            }\n\n            return false;\n        }\n\n        /**\n         * If a given reference is left-hand side of an assignment, this gets\n         * the right-hand side node of the assignment.\n         *\n         * In the following cases, this returns null.\n         *\n         * - The reference is not the LHS of an assignment expression.\n         * - The reference is inside of a loop.\n         * - The reference is inside of a function scope which is different from\n         *   the declaration.\n         * @param {eslint-scope.Reference} ref A reference to check.\n         * @param {ASTNode} prevRhsNode The previous RHS node.\n         * @returns {ASTNode|null} The RHS node or null.\n         * @private\n         */\n        function getRhsNode(ref, prevRhsNode) {\n            const id = ref.identifier;\n            const parent = id.parent;\n            const refScope = ref.from.variableScope;\n            const varScope = ref.resolved.scope.variableScope;\n            const canBeUsedLater = refScope !== varScope || astUtils.isInLoop(id);\n\n            /*\n             * Inherits the previous node if this reference is in the node.\n             * This is for `a = a + a`-like code.\n             */\n            if (prevRhsNode && isInside(id, prevRhsNode)) {\n                return prevRhsNode;\n            }\n\n            if (parent.type === \"AssignmentExpression\" &&\n                isUnusedExpression(parent) &&\n                id === parent.left &&\n                !canBeUsedLater\n            ) {\n                return parent.right;\n            }\n            return null;\n        }\n\n        /**\n         * Checks whether a given function node is stored to somewhere or not.\n         * If the function node is stored, the function can be used later.\n         * @param {ASTNode} funcNode A function node to check.\n         * @param {ASTNode} rhsNode The RHS node of the previous assignment.\n         * @returns {boolean} `true` if under the following conditions:\n         *      - the funcNode is assigned to a variable.\n         *      - the funcNode is bound as an argument of a function call.\n         *      - the function is bound to a property and the object satisfies above conditions.\n         * @private\n         */\n        function isStorableFunction(funcNode, rhsNode) {\n            let node = funcNode;\n            let parent = funcNode.parent;\n\n            while (parent && isInside(parent, rhsNode)) {\n                switch (parent.type) {\n                    case \"SequenceExpression\":\n                        if (parent.expressions[parent.expressions.length - 1] !== node) {\n                            return false;\n                        }\n                        break;\n\n                    case \"CallExpression\":\n                    case \"NewExpression\":\n                        return parent.callee !== node;\n\n                    case \"AssignmentExpression\":\n                    case \"TaggedTemplateExpression\":\n                    case \"YieldExpression\":\n                        return true;\n\n                    default:\n                        if (STATEMENT_TYPE.test(parent.type)) {\n\n                            /*\n                             * If it encountered statements, this is a complex pattern.\n                             * Since analyzing complex patterns is hard, this returns `true` to avoid false positive.\n                             */\n                            return true;\n                        }\n                }\n\n                node = parent;\n                parent = parent.parent;\n            }\n\n            return false;\n        }\n\n        /**\n         * Checks whether a given Identifier node exists inside of a function node which can be used later.\n         *\n         * \"can be used later\" means:\n         * - the function is assigned to a variable.\n         * - the function is bound to a property and the object can be used later.\n         * - the function is bound as an argument of a function call.\n         *\n         * If a reference exists in a function which can be used later, the reference is read when the function is called.\n         * @param {ASTNode} id An Identifier node to check.\n         * @param {ASTNode} rhsNode The RHS node of the previous assignment.\n         * @returns {boolean} `true` if the `id` node exists inside of a function node which can be used later.\n         * @private\n         */\n        function isInsideOfStorableFunction(id, rhsNode) {\n            const funcNode = astUtils.getUpperFunction(id);\n\n            return (\n                funcNode &&\n                isInside(funcNode, rhsNode) &&\n                isStorableFunction(funcNode, rhsNode)\n            );\n        }\n\n        /**\n         * Checks whether a given reference is a read to update itself or not.\n         * @param {eslint-scope.Reference} ref A reference to check.\n         * @param {ASTNode} rhsNode The RHS node of the previous assignment.\n         * @returns {boolean} The reference is a read to update itself.\n         * @private\n         */\n        function isReadForItself(ref, rhsNode) {\n            const id = ref.identifier;\n            const parent = id.parent;\n\n            return ref.isRead() && (\n\n                // self update. e.g. `a += 1`, `a++`\n                (\n                    (\n                        parent.type === \"AssignmentExpression\" &&\n                        parent.left === id &&\n                        isUnusedExpression(parent)\n                    ) ||\n                    (\n                        parent.type === \"UpdateExpression\" &&\n                        isUnusedExpression(parent)\n                    )\n                ) ||\n\n                // in RHS of an assignment for itself. e.g. `a = a + 1`\n                (\n                    rhsNode &&\n                    isInside(id, rhsNode) &&\n                    !isInsideOfStorableFunction(id, rhsNode)\n                )\n            );\n        }\n\n        /**\n         * Determine if an identifier is used either in for-in loops.\n         * @param {Reference} ref The reference to check.\n         * @returns {boolean} whether reference is used in the for-in loops\n         * @private\n         */\n        function isForInRef(ref) {\n            let target = ref.identifier.parent;\n\n\n            // \"for (var ...) { return; }\"\n            if (target.type === \"VariableDeclarator\") {\n                target = target.parent.parent;\n            }\n\n            if (target.type !== \"ForInStatement\") {\n                return false;\n            }\n\n            // \"for (...) { return; }\"\n            if (target.body.type === \"BlockStatement\") {\n                target = target.body.body[0];\n\n            // \"for (...) return;\"\n            } else {\n                target = target.body;\n            }\n\n            // For empty loop body\n            if (!target) {\n                return false;\n            }\n\n            return target.type === \"ReturnStatement\";\n        }\n\n        /**\n         * Determines if the variable is used.\n         * @param {Variable} variable The variable to check.\n         * @returns {boolean} True if the variable is used\n         * @private\n         */\n        function isUsedVariable(variable) {\n            const functionNodes = getFunctionDefinitions(variable),\n                isFunctionDefinition = functionNodes.length > 0;\n            let rhsNode = null;\n\n            return variable.references.some(ref => {\n                if (isForInRef(ref)) {\n                    return true;\n                }\n\n                const forItself = isReadForItself(ref, rhsNode);\n\n                rhsNode = getRhsNode(ref, rhsNode);\n\n                return (\n                    isReadRef(ref) &&\n                    !forItself &&\n                    !(isFunctionDefinition && isSelfReference(ref, functionNodes))\n                );\n            });\n        }\n\n        /**\n         * Checks whether the given variable is after the last used parameter.\n         * @param {eslint-scope.Variable} variable The variable to check.\n         * @returns {boolean} `true` if the variable is defined after the last\n         * used parameter.\n         */\n        function isAfterLastUsedArg(variable) {\n            const def = variable.defs[0];\n            const params = context.getDeclaredVariables(def.node);\n            const posteriorParams = params.slice(params.indexOf(variable) + 1);\n\n            // If any used parameters occur after this parameter, do not report.\n            return !posteriorParams.some(v => v.references.length > 0 || v.eslintUsed);\n        }\n\n        /**\n         * Gets an array of variables without read references.\n         * @param {Scope} scope an eslint-scope Scope object.\n         * @param {Variable[]} unusedVars an array that saving result.\n         * @returns {Variable[]} unused variables of the scope and descendant scopes.\n         * @private\n         */\n        function collectUnusedVariables(scope, unusedVars) {\n            const variables = scope.variables;\n            const childScopes = scope.childScopes;\n            let i, l;\n\n            if (scope.type !== \"global\" || config.vars === \"all\") {\n                for (i = 0, l = variables.length; i < l; ++i) {\n                    const variable = variables[i];\n\n                    // skip a variable of class itself name in the class scope\n                    if (scope.type === \"class\" && scope.block.id === variable.identifiers[0]) {\n                        continue;\n                    }\n\n                    // skip function expression names and variables marked with markVariableAsUsed()\n                    if (scope.functionExpressionScope || variable.eslintUsed) {\n                        continue;\n                    }\n\n                    // skip implicit \"arguments\" variable\n                    if (scope.type === \"function\" && variable.name === \"arguments\" && variable.identifiers.length === 0) {\n                        continue;\n                    }\n\n                    // explicit global variables don't have definitions.\n                    const def = variable.defs[0];\n\n                    if (def) {\n                        const type = def.type;\n\n                        // skip catch variables\n                        if (type === \"CatchClause\") {\n                            if (config.caughtErrors === \"none\") {\n                                continue;\n                            }\n\n                            // skip ignored parameters\n                            if (config.caughtErrorsIgnorePattern && config.caughtErrorsIgnorePattern.test(def.name.name)) {\n                                continue;\n                            }\n                        }\n\n                        if (type === \"Parameter\") {\n\n                            // skip any setter argument\n                            if ((def.node.parent.type === \"Property\" || def.node.parent.type === \"MethodDefinition\") && def.node.parent.kind === \"set\") {\n                                continue;\n                            }\n\n                            // if \"args\" option is \"none\", skip any parameter\n                            if (config.args === \"none\") {\n                                continue;\n                            }\n\n                            // skip ignored parameters\n                            if (config.argsIgnorePattern && config.argsIgnorePattern.test(def.name.name)) {\n                                continue;\n                            }\n\n                            // if \"args\" option is \"after-used\", skip used variables\n                            if (config.args === \"after-used\" && astUtils.isFunction(def.name.parent) && !isAfterLastUsedArg(variable)) {\n                                continue;\n                            }\n                        } else {\n\n                            // skip ignored variables\n                            if (config.varsIgnorePattern && config.varsIgnorePattern.test(def.name.name)) {\n                                continue;\n                            }\n                        }\n                    }\n\n                    if (!isUsedVariable(variable) && !isExported(variable) && !hasRestSpreadSibling(variable)) {\n                        unusedVars.push(variable);\n                    }\n                }\n            }\n\n            for (i = 0, l = childScopes.length; i < l; ++i) {\n                collectUnusedVariables(childScopes[i], unusedVars);\n            }\n\n            return unusedVars;\n        }\n\n        //--------------------------------------------------------------------------\n        // Public\n        //--------------------------------------------------------------------------\n\n        return {\n            \"Program:exit\"(programNode) {\n                const unusedVars = collectUnusedVariables(context.getScope(), []);\n\n                for (let i = 0, l = unusedVars.length; i < l; ++i) {\n                    const unusedVar = unusedVars[i];\n\n                    // Report the first declaration.\n                    if (unusedVar.defs.length > 0) {\n\n                        // report last write reference, https://github.com/eslint/eslint/issues/14324\n                        const writeReferences = unusedVar.references.filter(ref => ref.isWrite() && ref.from.variableScope === unusedVar.scope.variableScope);\n\n                        let referenceToReport;\n\n                        if (writeReferences.length > 0) {\n                            referenceToReport = writeReferences[writeReferences.length - 1];\n                        }\n\n                        context.report({\n                            node: referenceToReport ? referenceToReport.identifier : unusedVar.identifiers[0],\n                            messageId: \"unusedVar\",\n                            data: unusedVar.references.some(ref => ref.isWrite())\n                                ? getAssignedMessageData(unusedVar)\n                                : getDefinedMessageData(unusedVar)\n                        });\n\n                    // If there are no regular declaration, report the first `/*globals*/` comment directive.\n                    } else if (unusedVar.eslintExplicitGlobalComments) {\n                        const directiveComment = unusedVar.eslintExplicitGlobalComments[0];\n\n                        context.report({\n                            node: programNode,\n                            loc: astUtils.getNameLocationInGlobalDirectiveComment(sourceCode, directiveComment, unusedVar.name),\n                            messageId: \"unusedVar\",\n                            data: getDefinedMessageData(unusedVar)\n                        });\n                    }\n                }\n            }\n        };\n\n    }\n};\n$/lib/rules/require-unicode-regexp.js\u0007/**\n * @fileoverview Rule to enforce the use of `u` flag on RegExp.\n * @author Toru Nagashima\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst {\n    CALL,\n    CONSTRUCT,\n    ReferenceTracker,\n    getStringIfConstant\n} = require(\"eslint-utils\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"enforce the use of `u` flag on RegExp\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/require-unicode-regexp\"\n        },\n\n        messages: {\n            requireUFlag: \"Use the 'u' flag.\"\n        },\n\n        schema: []\n    },\n\n    create(context) {\n        return {\n            \"Literal[regex]\"(node) {\n                const flags = node.regex.flags || \"\";\n\n                if (!flags.includes(\"u\")) {\n                    context.report({ node, messageId: \"requireUFlag\" });\n                }\n            },\n\n            Program() {\n                const scope = context.getScope();\n                const tracker = new ReferenceTracker(scope);\n                const trackMap = {\n                    RegExp: { [CALL]: true, [CONSTRUCT]: true }\n                };\n\n                for (const { node } of tracker.iterateGlobalReferences(trackMap)) {\n                    const flagsNode = node.arguments[1];\n                    const flags = getStringIfConstant(flagsNode, scope);\n\n                    if (!flagsNode || (typeof flags === \"string\" && !flags.includes(\"u\"))) {\n                        context.report({ node, messageId: \"requireUFlag\" });\n                    }\n                }\n            }\n        };\n    }\n};\n/lib/rules/id-denylist.js\u001b/**\n * @fileoverview Rule that warns when identifier names that are\n * specified in the configuration are used.\n * @author Keith Cirkel (http://keithcirkel.co.uk)\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\n/**\n * Checks whether the given node represents assignment target in a normal assignment or destructuring.\n * @param {ASTNode} node The node to check.\n * @returns {boolean} `true` if the node is assignment target.\n */\nfunction isAssignmentTarget(node) {\n    const parent = node.parent;\n\n    return (\n\n        // normal assignment\n        (\n            parent.type === \"AssignmentExpression\" &&\n            parent.left === node\n        ) ||\n\n        // destructuring\n        parent.type === \"ArrayPattern\" ||\n        parent.type === \"RestElement\" ||\n        (\n            parent.type === \"Property\" &&\n            parent.value === node &&\n            parent.parent.type === \"ObjectPattern\"\n        ) ||\n        (\n            parent.type === \"AssignmentPattern\" &&\n            parent.left === node\n        )\n    );\n}\n\n/**\n * Checks whether the given node represents an imported name that is renamed in the same import/export specifier.\n *\n * Examples:\n * import { a as b } from 'mod'; // node `a` is renamed import\n * export { a as b } from 'mod'; // node `a` is renamed import\n * @param {ASTNode} node `Identifier` node to check.\n * @returns {boolean} `true` if the node is a renamed import.\n */\nfunction isRenamedImport(node) {\n    const parent = node.parent;\n\n    return (\n        (\n            parent.type === \"ImportSpecifier\" &&\n            parent.imported !== parent.local &&\n            parent.imported === node\n        ) ||\n        (\n            parent.type === \"ExportSpecifier\" &&\n            parent.parent.source && // re-export\n            parent.local !== parent.exported &&\n            parent.local === node\n        )\n    );\n}\n\n/**\n * Checks whether the given node is an ObjectPattern destructuring.\n *\n * Examples:\n * const { a : b } = foo;\n * @param {ASTNode} node `Identifier` node to check.\n * @returns {boolean} `true` if the node is in an ObjectPattern destructuring.\n */\nfunction isPropertyNameInDestructuring(node) {\n    const parent = node.parent;\n\n    return (\n        (\n            !parent.computed &&\n            parent.type === \"Property\" &&\n            parent.parent.type === \"ObjectPattern\" &&\n            parent.key === node\n        )\n    );\n}\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow specified identifiers\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/id-denylist\"\n        },\n\n        schema: {\n            type: \"array\",\n            items: {\n                type: \"string\"\n            },\n            uniqueItems: true\n        },\n        messages: {\n            restricted: \"Identifier '{{name}}' is restricted.\",\n            restrictedPrivate: \"Identifier '#{{name}}' is restricted.\"\n        }\n    },\n\n    create(context) {\n\n        const denyList = new Set(context.options);\n        const reportedNodes = new Set();\n\n        let globalScope;\n\n        /**\n         * Checks whether the given name is restricted.\n         * @param {string} name The name to check.\n         * @returns {boolean} `true` if the name is restricted.\n         * @private\n         */\n        function isRestricted(name) {\n            return denyList.has(name);\n        }\n\n        /**\n         * Checks whether the given node represents a reference to a global variable that is not declared in the source code.\n         * These identifiers will be allowed, as it is assumed that user has no control over the names of external global variables.\n         * @param {ASTNode} node `Identifier` node to check.\n         * @returns {boolean} `true` if the node is a reference to a global variable.\n         */\n        function isReferenceToGlobalVariable(node) {\n            const variable = globalScope.set.get(node.name);\n\n            return variable && variable.defs.length === 0 &&\n                variable.references.some(ref => ref.identifier === node);\n        }\n\n        /**\n         * Determines whether the given node should be checked.\n         * @param {ASTNode} node `Identifier` node.\n         * @returns {boolean} `true` if the node should be checked.\n         */\n        function shouldCheck(node) {\n            const parent = node.parent;\n\n            /*\n             * Member access has special rules for checking property names.\n             * Read access to a property with a restricted name is allowed, because it can be on an object that user has no control over.\n             * Write access isn't allowed, because it potentially creates a new property with a restricted name.\n             */\n            if (\n                parent.type === \"MemberExpression\" &&\n                parent.property === node &&\n                !parent.computed\n            ) {\n                return isAssignmentTarget(parent);\n            }\n\n            return (\n                parent.type !== \"CallExpression\" &&\n                parent.type !== \"NewExpression\" &&\n                !isRenamedImport(node) &&\n                !isPropertyNameInDestructuring(node) &&\n                !isReferenceToGlobalVariable(node)\n            );\n        }\n\n        /**\n         * Reports an AST node as a rule violation.\n         * @param {ASTNode} node The node to report.\n         * @returns {void}\n         * @private\n         */\n        function report(node) {\n\n            /*\n             * We used the range instead of the node because it's possible\n             * for the same identifier to be represented by two different\n             * nodes, with the most clear example being shorthand properties:\n             * { foo }\n             * In this case, \"foo\" is represented by one node for the name\n             * and one for the value. The only way to know they are the same\n             * is to look at the range.\n             */\n            if (!reportedNodes.has(node.range.toString())) {\n                const isPrivate = node.type === \"PrivateIdentifier\";\n\n                context.report({\n                    node,\n                    messageId: isPrivate ? \"restrictedPrivate\" : \"restricted\",\n                    data: {\n                        name: node.name\n                    }\n                });\n                reportedNodes.add(node.range.toString());\n            }\n        }\n\n        return {\n\n            Program() {\n                globalScope = context.getScope();\n            },\n\n            [[\n                \"Identifier\",\n                \"PrivateIdentifier\"\n            ]](node) {\n                if (isRestricted(node.name) && shouldCheck(node)) {\n                    report(node);\n                }\n            }\n        };\n    }\n};\n/lib/rules/id-length.js\u0018/**\n * @fileoverview Rule that warns when identifier names are shorter or longer\n * than the values provided in configuration.\n * @author Burak Yigit Kaya aka BYK\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"enforce minimum and maximum identifier lengths\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/id-length\"\n        },\n\n        schema: [\n            {\n                type: \"object\",\n                properties: {\n                    min: {\n                        type: \"integer\",\n                        default: 2\n                    },\n                    max: {\n                        type: \"integer\"\n                    },\n                    exceptions: {\n                        type: \"array\",\n                        uniqueItems: true,\n                        items: {\n                            type: \"string\"\n                        }\n                    },\n                    exceptionPatterns: {\n                        type: \"array\",\n                        uniqueItems: true,\n                        items: {\n                            type: \"string\"\n                        }\n                    },\n                    properties: {\n                        enum: [\"always\", \"never\"]\n                    }\n                },\n                additionalProperties: false\n            }\n        ],\n        messages: {\n            tooShort: \"Identifier name '{{name}}' is too short (< {{min}}).\",\n            tooShortPrivate: \"Identifier name '#{{name}}' is too short (< {{min}}).\",\n            tooLong: \"Identifier name '{{name}}' is too long (> {{max}}).\",\n            tooLongPrivate: \"Identifier name #'{{name}}' is too long (> {{max}}).\"\n        }\n    },\n\n    create(context) {\n        const options = context.options[0] || {};\n        const minLength = typeof options.min !== \"undefined\" ? options.min : 2;\n        const maxLength = typeof options.max !== \"undefined\" ? options.max : Infinity;\n        const properties = options.properties !== \"never\";\n        const exceptions = new Set(options.exceptions);\n        const exceptionPatterns = (options.exceptionPatterns || []).map(pattern => new RegExp(pattern, \"u\"));\n        const reportedNodes = new Set();\n\n        /**\n         * Checks if a string matches the provided exception patterns\n         * @param {string} name The string to check.\n         * @returns {boolean} if the string is a match\n         * @private\n         */\n        function matchesExceptionPattern(name) {\n            return exceptionPatterns.some(pattern => pattern.test(name));\n        }\n\n        const SUPPORTED_EXPRESSIONS = {\n            MemberExpression: properties && function(parent) {\n                return !parent.computed && (\n\n                    // regular property assignment\n                    (parent.parent.left === parent && parent.parent.type === \"AssignmentExpression\" ||\n\n                    // or the last identifier in an ObjectPattern destructuring\n                    parent.parent.type === \"Property\" && parent.parent.value === parent &&\n                    parent.parent.parent.type === \"ObjectPattern\" && parent.parent.parent.parent.left === parent.parent.parent)\n                );\n            },\n            AssignmentPattern(parent, node) {\n                return parent.left === node;\n            },\n            VariableDeclarator(parent, node) {\n                return parent.id === node;\n            },\n            Property(parent, node) {\n\n                if (parent.parent.type === \"ObjectPattern\") {\n                    const isKeyAndValueSame = parent.value.name === parent.key.name;\n\n                    return (\n                        !isKeyAndValueSame && parent.value === node ||\n                        isKeyAndValueSame && parent.key === node && properties\n                    );\n                }\n                return properties && !parent.computed && parent.key.name === node.name;\n            },\n            ImportDefaultSpecifier: true,\n            RestElement: true,\n            FunctionExpression: true,\n            ArrowFunctionExpression: true,\n            ClassDeclaration: true,\n            FunctionDeclaration: true,\n            MethodDefinition: true,\n            PropertyDefinition: true,\n            CatchClause: true,\n            ArrayPattern: true\n        };\n\n        return {\n            [[\n                \"Identifier\",\n                \"PrivateIdentifier\"\n            ]](node) {\n                const name = node.name;\n                const parent = node.parent;\n\n                const isShort = name.length < minLength;\n                const isLong = name.length > maxLength;\n\n                if (!(isShort || isLong) || exceptions.has(name) || matchesExceptionPattern(name)) {\n                    return; // Nothing to report\n                }\n\n                const isValidExpression = SUPPORTED_EXPRESSIONS[parent.type];\n\n                /*\n                 * We used the range instead of the node because it's possible\n                 * for the same identifier to be represented by two different\n                 * nodes, with the most clear example being shorthand properties:\n                 * { foo }\n                 * In this case, \"foo\" is represented by one node for the name\n                 * and one for the value. The only way to know they are the same\n                 * is to look at the range.\n                 */\n                if (isValidExpression && !reportedNodes.has(node.range.toString()) && (isValidExpression === true || isValidExpression(parent, node))) {\n                    reportedNodes.add(node.range.toString());\n\n                    let messageId = isShort ? \"tooShort\" : \"tooLong\";\n\n                    if (node.type === \"PrivateIdentifier\") {\n                        messageId += \"Private\";\n                    }\n\n                    context.report({\n                        node,\n                        messageId,\n                        data: { name, min: minLength, max: maxLength }\n                    });\n                }\n            }\n        };\n    }\n};\n/lib/rules/space-infix-ops.js\u0019[/**\n * @fileoverview Require spaces around infix operators\n * @author Michael Ficarra\n */\n\"use strict\";\n\nconst { isEqToken } = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"layout\",\n\n        docs: {\n            description: \"require spacing around infix operators\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/space-infix-ops\"\n        },\n\n        fixable: \"whitespace\",\n\n        schema: [\n            {\n                type: \"object\",\n                properties: {\n                    int32Hint: {\n                        type: \"boolean\",\n                        default: false\n                    }\n                },\n                additionalProperties: false\n            }\n        ],\n\n        messages: {\n            missingSpace: \"Operator '{{operator}}' must be spaced.\"\n        }\n    },\n\n    create(context) {\n        const int32Hint = context.options[0] ? context.options[0].int32Hint === true : false;\n        const sourceCode = context.getSourceCode();\n\n        /**\n         * Returns the first token which violates the rule\n         * @param {ASTNode} left The left node of the main node\n         * @param {ASTNode} right The right node of the main node\n         * @param {string} op The operator of the main node\n         * @returns {Object} The violator token or null\n         * @private\n         */\n        function getFirstNonSpacedToken(left, right, op) {\n            const operator = sourceCode.getFirstTokenBetween(left, right, token => token.value === op);\n            const prev = sourceCode.getTokenBefore(operator);\n            const next = sourceCode.getTokenAfter(operator);\n\n            if (!sourceCode.isSpaceBetweenTokens(prev, operator) || !sourceCode.isSpaceBetweenTokens(operator, next)) {\n                return operator;\n            }\n\n            return null;\n        }\n\n        /**\n         * Reports an AST node as a rule violation\n         * @param {ASTNode} mainNode The node to report\n         * @param {Object} culpritToken The token which has a problem\n         * @returns {void}\n         * @private\n         */\n        function report(mainNode, culpritToken) {\n            context.report({\n                node: mainNode,\n                loc: culpritToken.loc,\n                messageId: \"missingSpace\",\n                data: {\n                    operator: culpritToken.value\n                },\n                fix(fixer) {\n                    const previousToken = sourceCode.getTokenBefore(culpritToken);\n                    const afterToken = sourceCode.getTokenAfter(culpritToken);\n                    let fixString = \"\";\n\n                    if (culpritToken.range[0] - previousToken.range[1] === 0) {\n                        fixString = \" \";\n                    }\n\n                    fixString += culpritToken.value;\n\n                    if (afterToken.range[0] - culpritToken.range[1] === 0) {\n                        fixString += \" \";\n                    }\n\n                    return fixer.replaceText(culpritToken, fixString);\n                }\n            });\n        }\n\n        /**\n         * Check if the node is binary then report\n         * @param {ASTNode} node node to evaluate\n         * @returns {void}\n         * @private\n         */\n        function checkBinary(node) {\n            const leftNode = (node.left.typeAnnotation) ? node.left.typeAnnotation : node.left;\n            const rightNode = node.right;\n\n            // search for = in AssignmentPattern nodes\n            const operator = node.operator || \"=\";\n\n            const nonSpacedNode = getFirstNonSpacedToken(leftNode, rightNode, operator);\n\n            if (nonSpacedNode) {\n                if (!(int32Hint && sourceCode.getText(node).endsWith(\"|0\"))) {\n                    report(node, nonSpacedNode);\n                }\n            }\n        }\n\n        /**\n         * Check if the node is conditional\n         * @param {ASTNode} node node to evaluate\n         * @returns {void}\n         * @private\n         */\n        function checkConditional(node) {\n            const nonSpacedConsequentNode = getFirstNonSpacedToken(node.test, node.consequent, \"?\");\n            const nonSpacedAlternateNode = getFirstNonSpacedToken(node.consequent, node.alternate, \":\");\n\n            if (nonSpacedConsequentNode) {\n                report(node, nonSpacedConsequentNode);\n            }\n\n            if (nonSpacedAlternateNode) {\n                report(node, nonSpacedAlternateNode);\n            }\n        }\n\n        /**\n         * Check if the node is a variable\n         * @param {ASTNode} node node to evaluate\n         * @returns {void}\n         * @private\n         */\n        function checkVar(node) {\n            const leftNode = (node.id.typeAnnotation) ? node.id.typeAnnotation : node.id;\n            const rightNode = node.init;\n\n            if (rightNode) {\n                const nonSpacedNode = getFirstNonSpacedToken(leftNode, rightNode, \"=\");\n\n                if (nonSpacedNode) {\n                    report(node, nonSpacedNode);\n                }\n            }\n        }\n\n        return {\n            AssignmentExpression: checkBinary,\n            AssignmentPattern: checkBinary,\n            BinaryExpression: checkBinary,\n            LogicalExpression: checkBinary,\n            ConditionalExpression: checkConditional,\n            VariableDeclarator: checkVar,\n\n            PropertyDefinition(node) {\n                if (!node.value) {\n                    return;\n                }\n\n                /*\n                 * Because of computed properties and type annotations, some\n                 * tokens may exist between `node.key` and `=`.\n                 * Therefore, find the `=` from the right.\n                 */\n                const operatorToken = sourceCode.getTokenBefore(node.value, isEqToken);\n                const leftToken = sourceCode.getTokenBefore(operatorToken);\n                const rightToken = sourceCode.getTokenAfter(operatorToken);\n\n                if (\n                    !sourceCode.isSpaceBetweenTokens(leftToken, operatorToken) ||\n                    !sourceCode.isSpaceBetweenTokens(operatorToken, rightToken)\n                ) {\n                    report(node, operatorToken);\n                }\n            }\n        };\n\n    }\n};\n/lib/rules/no-empty-pattern.js\u0004/**\n * @fileoverview Rule to disallow an empty pattern\n * @author Alberto Rodríguez\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"problem\",\n\n        docs: {\n            description: \"disallow empty destructuring patterns\",\n            recommended: true,\n            url: \"https://eslint.org/docs/rules/no-empty-pattern\"\n        },\n\n        schema: [],\n\n        messages: {\n            unexpected: \"Unexpected empty {{type}} pattern.\"\n        }\n    },\n\n    create(context) {\n        return {\n            ObjectPattern(node) {\n                if (node.properties.length === 0) {\n                    context.report({ node, messageId: \"unexpected\", data: { type: \"object\" } });\n                }\n            },\n            ArrayPattern(node) {\n                if (node.elements.length === 0) {\n                    context.report({ node, messageId: \"unexpected\", data: { type: \"array\" } });\n                }\n            }\n        };\n    }\n};\n/lib/rules/space-unary-ops.js1:/**\n * @fileoverview This rule should require or disallow spaces before or after unary operations.\n * @author Marcin Kumorek\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"layout\",\n\n        docs: {\n            description: \"enforce consistent spacing before or after unary operators\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/space-unary-ops\"\n        },\n\n        fixable: \"whitespace\",\n\n        schema: [\n            {\n                type: \"object\",\n                properties: {\n                    words: {\n                        type: \"boolean\",\n                        default: true\n                    },\n                    nonwords: {\n                        type: \"boolean\",\n                        default: false\n                    },\n                    overrides: {\n                        type: \"object\",\n                        additionalProperties: {\n                            type: \"boolean\"\n                        }\n                    }\n                },\n                additionalProperties: false\n            }\n        ],\n        messages: {\n            unexpectedBefore: \"Unexpected space before unary operator '{{operator}}'.\",\n            unexpectedAfter: \"Unexpected space after unary operator '{{operator}}'.\",\n            unexpectedAfterWord: \"Unexpected space after unary word operator '{{word}}'.\",\n            wordOperator: \"Unary word operator '{{word}}' must be followed by whitespace.\",\n            operator: \"Unary operator '{{operator}}' must be followed by whitespace.\",\n            beforeUnaryExpressions: \"Space is required before unary expressions '{{token}}'.\"\n        }\n    },\n\n    create(context) {\n        const options = context.options[0] || { words: true, nonwords: false };\n\n        const sourceCode = context.getSourceCode();\n\n        //--------------------------------------------------------------------------\n        // Helpers\n        //--------------------------------------------------------------------------\n\n        /**\n         * Check if the node is the first \"!\" in a \"!!\" convert to Boolean expression\n         * @param {ASTnode} node AST node\n         * @returns {boolean} Whether or not the node is first \"!\" in \"!!\"\n         */\n        function isFirstBangInBangBangExpression(node) {\n            return node && node.type === \"UnaryExpression\" && node.argument.operator === \"!\" &&\n                node.argument && node.argument.type === \"UnaryExpression\" && node.argument.operator === \"!\";\n        }\n\n        /**\n         * Checks if an override exists for a given operator.\n         * @param {string} operator Operator\n         * @returns {boolean} Whether or not an override has been provided for the operator\n         */\n        function overrideExistsForOperator(operator) {\n            return options.overrides && Object.prototype.hasOwnProperty.call(options.overrides, operator);\n        }\n\n        /**\n         * Gets the value that the override was set to for this operator\n         * @param {string} operator Operator\n         * @returns {boolean} Whether or not an override enforces a space with this operator\n         */\n        function overrideEnforcesSpaces(operator) {\n            return options.overrides[operator];\n        }\n\n        /**\n         * Verify Unary Word Operator has spaces after the word operator\n         * @param {ASTnode} node AST node\n         * @param {Object} firstToken first token from the AST node\n         * @param {Object} secondToken second token from the AST node\n         * @param {string} word The word to be used for reporting\n         * @returns {void}\n         */\n        function verifyWordHasSpaces(node, firstToken, secondToken, word) {\n            if (secondToken.range[0] === firstToken.range[1]) {\n                context.report({\n                    node,\n                    messageId: \"wordOperator\",\n                    data: {\n                        word\n                    },\n                    fix(fixer) {\n                        return fixer.insertTextAfter(firstToken, \" \");\n                    }\n                });\n            }\n        }\n\n        /**\n         * Verify Unary Word Operator doesn't have spaces after the word operator\n         * @param {ASTnode} node AST node\n         * @param {Object} firstToken first token from the AST node\n         * @param {Object} secondToken second token from the AST node\n         * @param {string} word The word to be used for reporting\n         * @returns {void}\n         */\n        function verifyWordDoesntHaveSpaces(node, firstToken, secondToken, word) {\n            if (astUtils.canTokensBeAdjacent(firstToken, secondToken)) {\n                if (secondToken.range[0] > firstToken.range[1]) {\n                    context.report({\n                        node,\n                        messageId: \"unexpectedAfterWord\",\n                        data: {\n                            word\n                        },\n                        fix(fixer) {\n                            return fixer.removeRange([firstToken.range[1], secondToken.range[0]]);\n                        }\n                    });\n                }\n            }\n        }\n\n        /**\n         * Check Unary Word Operators for spaces after the word operator\n         * @param {ASTnode} node AST node\n         * @param {Object} firstToken first token from the AST node\n         * @param {Object} secondToken second token from the AST node\n         * @param {string} word The word to be used for reporting\n         * @returns {void}\n         */\n        function checkUnaryWordOperatorForSpaces(node, firstToken, secondToken, word) {\n            if (overrideExistsForOperator(word)) {\n                if (overrideEnforcesSpaces(word)) {\n                    verifyWordHasSpaces(node, firstToken, secondToken, word);\n                } else {\n                    verifyWordDoesntHaveSpaces(node, firstToken, secondToken, word);\n                }\n            } else if (options.words) {\n                verifyWordHasSpaces(node, firstToken, secondToken, word);\n            } else {\n                verifyWordDoesntHaveSpaces(node, firstToken, secondToken, word);\n            }\n        }\n\n        /**\n         * Verifies YieldExpressions satisfy spacing requirements\n         * @param {ASTnode} node AST node\n         * @returns {void}\n         */\n        function checkForSpacesAfterYield(node) {\n            const tokens = sourceCode.getFirstTokens(node, 3),\n                word = \"yield\";\n\n            if (!node.argument || node.delegate) {\n                return;\n            }\n\n            checkUnaryWordOperatorForSpaces(node, tokens[0], tokens[1], word);\n        }\n\n        /**\n         * Verifies AwaitExpressions satisfy spacing requirements\n         * @param {ASTNode} node AwaitExpression AST node\n         * @returns {void}\n         */\n        function checkForSpacesAfterAwait(node) {\n            const tokens = sourceCode.getFirstTokens(node, 3);\n\n            checkUnaryWordOperatorForSpaces(node, tokens[0], tokens[1], \"await\");\n        }\n\n        /**\n         * Verifies UnaryExpression, UpdateExpression and NewExpression have spaces before or after the operator\n         * @param {ASTnode} node AST node\n         * @param {Object} firstToken First token in the expression\n         * @param {Object} secondToken Second token in the expression\n         * @returns {void}\n         */\n        function verifyNonWordsHaveSpaces(node, firstToken, secondToken) {\n            if (node.prefix) {\n                if (isFirstBangInBangBangExpression(node)) {\n                    return;\n                }\n                if (firstToken.range[1] === secondToken.range[0]) {\n                    context.report({\n                        node,\n                        messageId: \"operator\",\n                        data: {\n                            operator: firstToken.value\n                        },\n                        fix(fixer) {\n                            return fixer.insertTextAfter(firstToken, \" \");\n                        }\n                    });\n                }\n            } else {\n                if (firstToken.range[1] === secondToken.range[0]) {\n                    context.report({\n                        node,\n                        messageId: \"beforeUnaryExpressions\",\n                        data: {\n                            token: secondToken.value\n                        },\n                        fix(fixer) {\n                            return fixer.insertTextBefore(secondToken, \" \");\n                        }\n                    });\n                }\n            }\n        }\n\n        /**\n         * Verifies UnaryExpression, UpdateExpression and NewExpression don't have spaces before or after the operator\n         * @param {ASTnode} node AST node\n         * @param {Object} firstToken First token in the expression\n         * @param {Object} secondToken Second token in the expression\n         * @returns {void}\n         */\n        function verifyNonWordsDontHaveSpaces(node, firstToken, secondToken) {\n            if (node.prefix) {\n                if (secondToken.range[0] > firstToken.range[1]) {\n                    context.report({\n                        node,\n                        messageId: \"unexpectedAfter\",\n                        data: {\n                            operator: firstToken.value\n                        },\n                        fix(fixer) {\n                            if (astUtils.canTokensBeAdjacent(firstToken, secondToken)) {\n                                return fixer.removeRange([firstToken.range[1], secondToken.range[0]]);\n                            }\n                            return null;\n                        }\n                    });\n                }\n            } else {\n                if (secondToken.range[0] > firstToken.range[1]) {\n                    context.report({\n                        node,\n                        messageId: \"unexpectedBefore\",\n                        data: {\n                            operator: secondToken.value\n                        },\n                        fix(fixer) {\n                            return fixer.removeRange([firstToken.range[1], secondToken.range[0]]);\n                        }\n                    });\n                }\n            }\n        }\n\n        /**\n         * Verifies UnaryExpression, UpdateExpression and NewExpression satisfy spacing requirements\n         * @param {ASTnode} node AST node\n         * @returns {void}\n         */\n        function checkForSpaces(node) {\n            const tokens = node.type === \"UpdateExpression\" && !node.prefix\n                ? sourceCode.getLastTokens(node, 2)\n                : sourceCode.getFirstTokens(node, 2);\n            const firstToken = tokens[0];\n            const secondToken = tokens[1];\n\n            if ((node.type === \"NewExpression\" || node.prefix) && firstToken.type === \"Keyword\") {\n                checkUnaryWordOperatorForSpaces(node, firstToken, secondToken, firstToken.value);\n                return;\n            }\n\n            const operator = node.prefix ? tokens[0].value : tokens[1].value;\n\n            if (overrideExistsForOperator(operator)) {\n                if (overrideEnforcesSpaces(operator)) {\n                    verifyNonWordsHaveSpaces(node, firstToken, secondToken);\n                } else {\n                    verifyNonWordsDontHaveSpaces(node, firstToken, secondToken);\n                }\n            } else if (options.nonwords) {\n                verifyNonWordsHaveSpaces(node, firstToken, secondToken);\n            } else {\n                verifyNonWordsDontHaveSpaces(node, firstToken, secondToken);\n            }\n        }\n\n        //--------------------------------------------------------------------------\n        // Public\n        //--------------------------------------------------------------------------\n\n        return {\n            UnaryExpression: checkForSpaces,\n            UpdateExpression: checkForSpaces,\n            NewExpression: checkForSpaces,\n            YieldExpression: checkForSpacesAfterYield,\n            AwaitExpression: checkForSpacesAfterAwait\n        };\n\n    }\n};\n/lib/rules/no-sequences.js\u0012/**\n * @fileoverview Rule to flag use of comma operator\n * @author Brandon Mills\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\nconst DEFAULT_OPTIONS = {\n    allowInParentheses: true\n};\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow comma operators\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-sequences\"\n        },\n\n        schema: [{\n            properties: {\n                allowInParentheses: {\n                    type: \"boolean\",\n                    default: true\n                }\n            },\n            additionalProperties: false\n        }],\n\n        messages: {\n            unexpectedCommaExpression: \"Unexpected use of comma operator.\"\n        }\n    },\n\n    create(context) {\n        const options = Object.assign({}, DEFAULT_OPTIONS, context.options[0]);\n        const sourceCode = context.getSourceCode();\n\n        /**\n         * Parts of the grammar that are required to have parens.\n         */\n        const parenthesized = {\n            DoWhileStatement: \"test\",\n            IfStatement: \"test\",\n            SwitchStatement: \"discriminant\",\n            WhileStatement: \"test\",\n            WithStatement: \"object\",\n            ArrowFunctionExpression: \"body\"\n\n            /*\n             * Omitting CallExpression - commas are parsed as argument separators\n             * Omitting NewExpression - commas are parsed as argument separators\n             * Omitting ForInStatement - parts aren't individually parenthesised\n             * Omitting ForStatement - parts aren't individually parenthesised\n             */\n        };\n\n        /**\n         * Determines whether a node is required by the grammar to be wrapped in\n         * parens, e.g. the test of an if statement.\n         * @param {ASTNode} node The AST node\n         * @returns {boolean} True if parens around node belong to parent node.\n         */\n        function requiresExtraParens(node) {\n            return node.parent && parenthesized[node.parent.type] &&\n                    node === node.parent[parenthesized[node.parent.type]];\n        }\n\n        /**\n         * Check if a node is wrapped in parens.\n         * @param {ASTNode} node The AST node\n         * @returns {boolean} True if the node has a paren on each side.\n         */\n        function isParenthesised(node) {\n            return astUtils.isParenthesised(sourceCode, node);\n        }\n\n        /**\n         * Check if a node is wrapped in two levels of parens.\n         * @param {ASTNode} node The AST node\n         * @returns {boolean} True if two parens surround the node on each side.\n         */\n        function isParenthesisedTwice(node) {\n            const previousToken = sourceCode.getTokenBefore(node, 1),\n                nextToken = sourceCode.getTokenAfter(node, 1);\n\n            return isParenthesised(node) && previousToken && nextToken &&\n                astUtils.isOpeningParenToken(previousToken) && previousToken.range[1] <= node.range[0] &&\n                astUtils.isClosingParenToken(nextToken) && nextToken.range[0] >= node.range[1];\n        }\n\n        return {\n            SequenceExpression(node) {\n\n                // Always allow sequences in for statement update\n                if (node.parent.type === \"ForStatement\" &&\n                        (node === node.parent.init || node === node.parent.update)) {\n                    return;\n                }\n\n                // Wrapping a sequence in extra parens indicates intent\n                if (options.allowInParentheses) {\n                    if (requiresExtraParens(node)) {\n                        if (isParenthesisedTwice(node)) {\n                            return;\n                        }\n                    } else {\n                        if (isParenthesised(node)) {\n                            return;\n                        }\n                    }\n                }\n\n                const firstCommaToken = sourceCode.getTokenAfter(node.expressions[0], astUtils.isCommaToken);\n\n                context.report({ node, loc: firstCommaToken.loc, messageId: \"unexpectedCommaExpression\" });\n            }\n        };\n\n    }\n};\n#/lib/rules/no-constant-condition.js-t/**\n * @fileoverview Rule to flag use constant conditions\n * @author Christian Schulz <http://rndm.de>\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"problem\",\n\n        docs: {\n            description: \"disallow constant expressions in conditions\",\n            recommended: true,\n            url: \"https://eslint.org/docs/rules/no-constant-condition\"\n        },\n\n        schema: [\n            {\n                type: \"object\",\n                properties: {\n                    checkLoops: {\n                        type: \"boolean\",\n                        default: true\n                    }\n                },\n                additionalProperties: false\n            }\n        ],\n\n        messages: {\n            unexpected: \"Unexpected constant condition.\"\n        }\n    },\n\n    create(context) {\n        const options = context.options[0] || {},\n            checkLoops = options.checkLoops !== false,\n            loopSetStack = [];\n\n        let loopsInCurrentScope = new Set();\n\n        //--------------------------------------------------------------------------\n        // Helpers\n        //--------------------------------------------------------------------------\n\n        /**\n         * Returns literal's value converted to the Boolean type\n         * @param {ASTNode} node any `Literal` node\n         * @returns {boolean | null} `true` when node is truthy, `false` when node is falsy,\n         *  `null` when it cannot be determined.\n         */\n        function getBooleanValue(node) {\n            if (node.value === null) {\n\n                /*\n                 * it might be a null literal or bigint/regex literal in unsupported environments .\n                 * https://github.com/estree/estree/blob/14df8a024956ea289bd55b9c2226a1d5b8a473ee/es5.md#regexpliteral\n                 * https://github.com/estree/estree/blob/14df8a024956ea289bd55b9c2226a1d5b8a473ee/es2020.md#bigintliteral\n                 */\n\n                if (node.raw === \"null\") {\n                    return false;\n                }\n\n                // regex is always truthy\n                if (typeof node.regex === \"object\") {\n                    return true;\n                }\n\n                return null;\n            }\n\n            return !!node.value;\n        }\n\n        /**\n         * Checks if a branch node of LogicalExpression short circuits the whole condition\n         * @param {ASTNode} node The branch of main condition which needs to be checked\n         * @param {string} operator The operator of the main LogicalExpression.\n         * @returns {boolean} true when condition short circuits whole condition\n         */\n        function isLogicalIdentity(node, operator) {\n            switch (node.type) {\n                case \"Literal\":\n                    return (operator === \"||\" && getBooleanValue(node) === true) ||\n                           (operator === \"&&\" && getBooleanValue(node) === false);\n\n                case \"UnaryExpression\":\n                    return (operator === \"&&\" && node.operator === \"void\");\n\n                case \"LogicalExpression\":\n\n                    /*\n                     * handles `a && false || b`\n                     * `false` is an identity element of `&&` but not `||`\n                     */\n                    return operator === node.operator &&\n                             (\n                                 isLogicalIdentity(node.left, operator) ||\n                                 isLogicalIdentity(node.right, operator)\n                             );\n\n                case \"AssignmentExpression\":\n                    return [\"||=\", \"&&=\"].includes(node.operator) &&\n                        operator === node.operator.slice(0, -1) &&\n                        isLogicalIdentity(node.right, operator);\n\n                // no default\n            }\n            return false;\n        }\n\n        /**\n         * Checks if a node has a constant truthiness value.\n         * @param {ASTNode} node The AST node to check.\n         * @param {boolean} inBooleanPosition `false` if checking branch of a condition.\n         *  `true` in all other cases. When `false`, checks if -- for both string and\n         *  number -- if coerced to that type, the value will be constant.\n         * @returns {Bool} true when node's truthiness is constant\n         * @private\n         */\n        function isConstant(node, inBooleanPosition) {\n\n            // node.elements can return null values in the case of sparse arrays ex. [,]\n            if (!node) {\n                return true;\n            }\n            switch (node.type) {\n                case \"Literal\":\n                case \"ArrowFunctionExpression\":\n                case \"FunctionExpression\":\n                    return true;\n                case \"ClassExpression\":\n                case \"ObjectExpression\":\n\n                    /**\n                     * In theory objects like:\n                     *\n                     * `{toString: () => a}`\n                     * `{valueOf: () => a}`\n                     *\n                     * Or a classes like:\n                     *\n                     * `class { static toString() { return a } }`\n                     * `class { static valueOf() { return a } }`\n                     *\n                     * Are not constant verifiably when `inBooleanPosition` is\n                     * false, but it's an edge case we've opted not to handle.\n                     */\n                    return true;\n                case \"TemplateLiteral\":\n                    return (inBooleanPosition && node.quasis.some(quasi => quasi.value.cooked.length)) ||\n                        node.expressions.every(exp => isConstant(exp, false));\n\n                case \"ArrayExpression\": {\n                    if (!inBooleanPosition) {\n                        return node.elements.every(element => isConstant(element, false));\n                    }\n                    return true;\n                }\n\n                case \"UnaryExpression\":\n                    if (\n                        node.operator === \"void\" ||\n                        node.operator === \"typeof\" && inBooleanPosition\n                    ) {\n                        return true;\n                    }\n\n                    if (node.operator === \"!\") {\n                        return isConstant(node.argument, true);\n                    }\n\n                    return isConstant(node.argument, false);\n\n                case \"BinaryExpression\":\n                    return isConstant(node.left, false) &&\n                            isConstant(node.right, false) &&\n                            node.operator !== \"in\";\n\n                case \"LogicalExpression\": {\n                    const isLeftConstant = isConstant(node.left, inBooleanPosition);\n                    const isRightConstant = isConstant(node.right, inBooleanPosition);\n                    const isLeftShortCircuit = (isLeftConstant && isLogicalIdentity(node.left, node.operator));\n                    const isRightShortCircuit = (inBooleanPosition && isRightConstant && isLogicalIdentity(node.right, node.operator));\n\n                    return (isLeftConstant && isRightConstant) ||\n                        isLeftShortCircuit ||\n                        isRightShortCircuit;\n                }\n                case \"NewExpression\":\n                    return inBooleanPosition;\n                case \"AssignmentExpression\":\n                    if (node.operator === \"=\") {\n                        return isConstant(node.right, inBooleanPosition);\n                    }\n\n                    if ([\"||=\", \"&&=\"].includes(node.operator) && inBooleanPosition) {\n                        return isLogicalIdentity(node.right, node.operator.slice(0, -1));\n                    }\n\n                    return false;\n\n                case \"SequenceExpression\":\n                    return isConstant(node.expressions[node.expressions.length - 1], inBooleanPosition);\n                case \"SpreadElement\":\n                    return isConstant(node.argument, inBooleanPosition);\n\n                // no default\n            }\n            return false;\n        }\n\n        /**\n         * Tracks when the given node contains a constant condition.\n         * @param {ASTNode} node The AST node to check.\n         * @returns {void}\n         * @private\n         */\n        function trackConstantConditionLoop(node) {\n            if (node.test && isConstant(node.test, true)) {\n                loopsInCurrentScope.add(node);\n            }\n        }\n\n        /**\n         * Reports when the set contains the given constant condition node\n         * @param {ASTNode} node The AST node to check.\n         * @returns {void}\n         * @private\n         */\n        function checkConstantConditionLoopInSet(node) {\n            if (loopsInCurrentScope.has(node)) {\n                loopsInCurrentScope.delete(node);\n                context.report({ node: node.test, messageId: \"unexpected\" });\n            }\n        }\n\n        /**\n         * Reports when the given node contains a constant condition.\n         * @param {ASTNode} node The AST node to check.\n         * @returns {void}\n         * @private\n         */\n        function reportIfConstant(node) {\n            if (node.test && isConstant(node.test, true)) {\n                context.report({ node: node.test, messageId: \"unexpected\" });\n            }\n        }\n\n        /**\n         * Stores current set of constant loops in loopSetStack temporarily\n         * and uses a new set to track constant loops\n         * @returns {void}\n         * @private\n         */\n        function enterFunction() {\n            loopSetStack.push(loopsInCurrentScope);\n            loopsInCurrentScope = new Set();\n        }\n\n        /**\n         * Reports when the set still contains stored constant conditions\n         * @returns {void}\n         * @private\n         */\n        function exitFunction() {\n            loopsInCurrentScope = loopSetStack.pop();\n        }\n\n        /**\n         * Checks node when checkLoops option is enabled\n         * @param {ASTNode} node The AST node to check.\n         * @returns {void}\n         * @private\n         */\n        function checkLoop(node) {\n            if (checkLoops) {\n                trackConstantConditionLoop(node);\n            }\n        }\n\n        //--------------------------------------------------------------------------\n        // Public\n        //--------------------------------------------------------------------------\n\n        return {\n            ConditionalExpression: reportIfConstant,\n            IfStatement: reportIfConstant,\n            WhileStatement: checkLoop,\n            \"WhileStatement:exit\": checkConstantConditionLoopInSet,\n            DoWhileStatement: checkLoop,\n            \"DoWhileStatement:exit\": checkConstantConditionLoopInSet,\n            ForStatement: checkLoop,\n            \"ForStatement > .test\": node => checkLoop(node.parent),\n            \"ForStatement:exit\": checkConstantConditionLoopInSet,\n            FunctionDeclaration: enterFunction,\n            \"FunctionDeclaration:exit\": exitFunction,\n            FunctionExpression: enterFunction,\n            \"FunctionExpression:exit\": exitFunction,\n            YieldExpression: () => loopsInCurrentScope.clear()\n        };\n\n    }\n};\n/lib/rules/no-fallthrough.js\u0014/**\n * @fileoverview Rule to flag fall-through cases in switch statements.\n * @author Matt DuVall <http://mattduvall.com/>\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\nconst DEFAULT_FALLTHROUGH_COMMENT = /falls?\\s?through/iu;\n\n/**\n * Checks whether or not a given case has a fallthrough comment.\n * @param {ASTNode} caseWhichFallsThrough SwitchCase node which falls through.\n * @param {ASTNode} subsequentCase The case after caseWhichFallsThrough.\n * @param {RuleContext} context A rule context which stores comments.\n * @param {RegExp} fallthroughCommentPattern A pattern to match comment to.\n * @returns {boolean} `true` if the case has a valid fallthrough comment.\n */\nfunction hasFallthroughComment(caseWhichFallsThrough, subsequentCase, context, fallthroughCommentPattern) {\n    const sourceCode = context.getSourceCode();\n\n    if (caseWhichFallsThrough.consequent.length === 1 && caseWhichFallsThrough.consequent[0].type === \"BlockStatement\") {\n        const trailingCloseBrace = sourceCode.getLastToken(caseWhichFallsThrough.consequent[0]);\n        const commentInBlock = sourceCode.getCommentsBefore(trailingCloseBrace).pop();\n\n        if (commentInBlock && fallthroughCommentPattern.test(commentInBlock.value)) {\n            return true;\n        }\n    }\n\n    const comment = sourceCode.getCommentsBefore(subsequentCase).pop();\n\n    return Boolean(comment && fallthroughCommentPattern.test(comment.value));\n}\n\n/**\n * Checks whether or not a given code path segment is reachable.\n * @param {CodePathSegment} segment A CodePathSegment to check.\n * @returns {boolean} `true` if the segment is reachable.\n */\nfunction isReachable(segment) {\n    return segment.reachable;\n}\n\n/**\n * Checks whether a node and a token are separated by blank lines\n * @param {ASTNode} node The node to check\n * @param {Token} token The token to compare against\n * @returns {boolean} `true` if there are blank lines between node and token\n */\nfunction hasBlankLinesBetween(node, token) {\n    return token.loc.start.line > node.loc.end.line + 1;\n}\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"problem\",\n\n        docs: {\n            description: \"disallow fallthrough of `case` statements\",\n            recommended: true,\n            url: \"https://eslint.org/docs/rules/no-fallthrough\"\n        },\n\n        schema: [\n            {\n                type: \"object\",\n                properties: {\n                    commentPattern: {\n                        type: \"string\",\n                        default: \"\"\n                    }\n                },\n                additionalProperties: false\n            }\n        ],\n        messages: {\n            case: \"Expected a 'break' statement before 'case'.\",\n            default: \"Expected a 'break' statement before 'default'.\"\n        }\n    },\n\n    create(context) {\n        const options = context.options[0] || {};\n        let currentCodePath = null;\n        const sourceCode = context.getSourceCode();\n\n        /*\n         * We need to use leading comments of the next SwitchCase node because\n         * trailing comments is wrong if semicolons are omitted.\n         */\n        let fallthroughCase = null;\n        let fallthroughCommentPattern = null;\n\n        if (options.commentPattern) {\n            fallthroughCommentPattern = new RegExp(options.commentPattern, \"u\");\n        } else {\n            fallthroughCommentPattern = DEFAULT_FALLTHROUGH_COMMENT;\n        }\n\n        return {\n            onCodePathStart(codePath) {\n                currentCodePath = codePath;\n            },\n            onCodePathEnd() {\n                currentCodePath = currentCodePath.upper;\n            },\n\n            SwitchCase(node) {\n\n                /*\n                 * Checks whether or not there is a fallthrough comment.\n                 * And reports the previous fallthrough node if that does not exist.\n                 */\n                if (fallthroughCase && !hasFallthroughComment(fallthroughCase, node, context, fallthroughCommentPattern)) {\n                    context.report({\n                        messageId: node.test ? \"case\" : \"default\",\n                        node\n                    });\n                }\n                fallthroughCase = null;\n            },\n\n            \"SwitchCase:exit\"(node) {\n                const nextToken = sourceCode.getTokenAfter(node);\n\n                /*\n                 * `reachable` meant fall through because statements preceded by\n                 * `break`, `return`, or `throw` are unreachable.\n                 * And allows empty cases and the last case.\n                 */\n                if (currentCodePath.currentSegments.some(isReachable) &&\n                    (node.consequent.length > 0 || hasBlankLinesBetween(node, nextToken)) &&\n                    node.parent.cases[node.parent.cases.length - 1] !== node) {\n                    fallthroughCase = node;\n                }\n            }\n        };\n    }\n};\n/lib/rules/no-labels.js\u0011/**\n * @fileoverview Disallow Labeled Statements\n * @author Nicholas C. Zakas\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow labeled statements\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-labels\"\n        },\n\n        schema: [\n            {\n                type: \"object\",\n                properties: {\n                    allowLoop: {\n                        type: \"boolean\",\n                        default: false\n                    },\n                    allowSwitch: {\n                        type: \"boolean\",\n                        default: false\n                    }\n                },\n                additionalProperties: false\n            }\n        ],\n\n        messages: {\n            unexpectedLabel: \"Unexpected labeled statement.\",\n            unexpectedLabelInBreak: \"Unexpected label in break statement.\",\n            unexpectedLabelInContinue: \"Unexpected label in continue statement.\"\n        }\n    },\n\n    create(context) {\n        const options = context.options[0];\n        const allowLoop = options && options.allowLoop;\n        const allowSwitch = options && options.allowSwitch;\n        let scopeInfo = null;\n\n        /**\n         * Gets the kind of a given node.\n         * @param {ASTNode} node A node to get.\n         * @returns {string} The kind of the node.\n         */\n        function getBodyKind(node) {\n            if (astUtils.isLoop(node)) {\n                return \"loop\";\n            }\n            if (node.type === \"SwitchStatement\") {\n                return \"switch\";\n            }\n            return \"other\";\n        }\n\n        /**\n         * Checks whether the label of a given kind is allowed or not.\n         * @param {string} kind A kind to check.\n         * @returns {boolean} `true` if the kind is allowed.\n         */\n        function isAllowed(kind) {\n            switch (kind) {\n                case \"loop\": return allowLoop;\n                case \"switch\": return allowSwitch;\n                default: return false;\n            }\n        }\n\n        /**\n         * Checks whether a given name is a label of a loop or not.\n         * @param {string} label A name of a label to check.\n         * @returns {boolean} `true` if the name is a label of a loop.\n         */\n        function getKind(label) {\n            let info = scopeInfo;\n\n            while (info) {\n                if (info.label === label) {\n                    return info.kind;\n                }\n                info = info.upper;\n            }\n\n            /* istanbul ignore next: syntax error */\n            return \"other\";\n        }\n\n        //--------------------------------------------------------------------------\n        // Public\n        //--------------------------------------------------------------------------\n\n        return {\n            LabeledStatement(node) {\n                scopeInfo = {\n                    label: node.label.name,\n                    kind: getBodyKind(node.body),\n                    upper: scopeInfo\n                };\n            },\n\n            \"LabeledStatement:exit\"(node) {\n                if (!isAllowed(scopeInfo.kind)) {\n                    context.report({\n                        node,\n                        messageId: \"unexpectedLabel\"\n                    });\n                }\n\n                scopeInfo = scopeInfo.upper;\n            },\n\n            BreakStatement(node) {\n                if (node.label && !isAllowed(getKind(node.label.name))) {\n                    context.report({\n                        node,\n                        messageId: \"unexpectedLabelInBreak\"\n                    });\n                }\n            },\n\n            ContinueStatement(node) {\n                if (node.label && !isAllowed(getKind(node.label.name))) {\n                    context.report({\n                        node,\n                        messageId: \"unexpectedLabelInContinue\"\n                    });\n                }\n            }\n        };\n\n    }\n};\n/lib/rules/no-process-env.js\u0004/**\n * @fileoverview Disallow the use of process.env()\n * @author Vignesh Anand\n * @deprecated in ESLint v7.0.0\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        deprecated: true,\n\n        replacedBy: [],\n\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow the use of `process.env`\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-process-env\"\n        },\n\n        schema: [],\n\n        messages: {\n            unexpectedProcessEnv: \"Unexpected use of process.env.\"\n        }\n    },\n\n    create(context) {\n\n        return {\n\n            MemberExpression(node) {\n                const objectName = node.object.name,\n                    propertyName = node.property.name;\n\n                if (objectName === \"process\" && !node.computed && propertyName && propertyName === \"env\") {\n                    context.report({ node, messageId: \"unexpectedProcessEnv\" });\n                }\n\n            }\n\n        };\n\n    }\n};\n/lib/rules/quotes.js0z/**\n * @fileoverview A rule to choose between single and double quote marks\n * @author Matt DuVall <http://www.mattduvall.com/>, Brandon Payton\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Constants\n//------------------------------------------------------------------------------\n\nconst QUOTE_SETTINGS = {\n    double: {\n        quote: \"\\\"\",\n        alternateQuote: \"'\",\n        description: \"doublequote\"\n    },\n    single: {\n        quote: \"'\",\n        alternateQuote: \"\\\"\",\n        description: \"singlequote\"\n    },\n    backtick: {\n        quote: \"`\",\n        alternateQuote: \"\\\"\",\n        description: \"backtick\"\n    }\n};\n\n// An unescaped newline is a newline preceded by an even number of backslashes.\nconst UNESCAPED_LINEBREAK_PATTERN = new RegExp(String.raw`(^|[^\\\\])(\\\\\\\\)*[${Array.from(astUtils.LINEBREAKS).join(\"\")}]`, \"u\");\n\n/**\n * Switches quoting of javascript string between ' \" and `\n * escaping and unescaping as necessary.\n * Only escaping of the minimal set of characters is changed.\n * Note: escaping of newlines when switching from backtick to other quotes is not handled.\n * @param {string} str A string to convert.\n * @returns {string} The string with changed quotes.\n * @private\n */\nQUOTE_SETTINGS.double.convert =\nQUOTE_SETTINGS.single.convert =\nQUOTE_SETTINGS.backtick.convert = function(str) {\n    const newQuote = this.quote;\n    const oldQuote = str[0];\n\n    if (newQuote === oldQuote) {\n        return str;\n    }\n    return newQuote + str.slice(1, -1).replace(/\\\\(\\$\\{|\\r\\n?|\\n|.)|[\"'`]|\\$\\{|(\\r\\n?|\\n)/gu, (match, escaped, newline) => {\n        if (escaped === oldQuote || oldQuote === \"`\" && escaped === \"${\") {\n            return escaped; // unescape\n        }\n        if (match === newQuote || newQuote === \"`\" && match === \"${\") {\n            return `\\\\${match}`; // escape\n        }\n        if (newline && oldQuote === \"`\") {\n            return \"\\\\n\"; // escape newlines\n        }\n        return match;\n    }) + newQuote;\n};\n\nconst AVOID_ESCAPE = \"avoid-escape\";\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"layout\",\n\n        docs: {\n            description: \"enforce the consistent use of either backticks, double, or single quotes\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/quotes\"\n        },\n\n        fixable: \"code\",\n\n        schema: [\n            {\n                enum: [\"single\", \"double\", \"backtick\"]\n            },\n            {\n                anyOf: [\n                    {\n                        enum: [\"avoid-escape\"]\n                    },\n                    {\n                        type: \"object\",\n                        properties: {\n                            avoidEscape: {\n                                type: \"boolean\"\n                            },\n                            allowTemplateLiterals: {\n                                type: \"boolean\"\n                            }\n                        },\n                        additionalProperties: false\n                    }\n                ]\n            }\n        ],\n\n        messages: {\n            wrongQuotes: \"Strings must use {{description}}.\"\n        }\n    },\n\n    create(context) {\n\n        const quoteOption = context.options[0],\n            settings = QUOTE_SETTINGS[quoteOption || \"double\"],\n            options = context.options[1],\n            allowTemplateLiterals = options && options.allowTemplateLiterals === true,\n            sourceCode = context.getSourceCode();\n        let avoidEscape = options && options.avoidEscape === true;\n\n        // deprecated\n        if (options === AVOID_ESCAPE) {\n            avoidEscape = true;\n        }\n\n        /**\n         * Determines if a given node is part of JSX syntax.\n         *\n         * This function returns `true` in the following cases:\n         *\n         * - `<div className=\"foo\"></div>` ... If the literal is an attribute value, the parent of the literal is `JSXAttribute`.\n         * - `<div>foo</div>` ... If the literal is a text content, the parent of the literal is `JSXElement`.\n         * - `<>foo</>` ... If the literal is a text content, the parent of the literal is `JSXFragment`.\n         *\n         * In particular, this function returns `false` in the following cases:\n         *\n         * - `<div className={\"foo\"}></div>`\n         * - `<div>{\"foo\"}</div>`\n         *\n         * In both cases, inside of the braces is handled as normal JavaScript.\n         * The braces are `JSXExpressionContainer` nodes.\n         * @param {ASTNode} node The Literal node to check.\n         * @returns {boolean} True if the node is a part of JSX, false if not.\n         * @private\n         */\n        function isJSXLiteral(node) {\n            return node.parent.type === \"JSXAttribute\" || node.parent.type === \"JSXElement\" || node.parent.type === \"JSXFragment\";\n        }\n\n        /**\n         * Checks whether or not a given node is a directive.\n         * The directive is a `ExpressionStatement` which has only a string literal.\n         * @param {ASTNode} node A node to check.\n         * @returns {boolean} Whether or not the node is a directive.\n         * @private\n         */\n        function isDirective(node) {\n            return (\n                node.type === \"ExpressionStatement\" &&\n                node.expression.type === \"Literal\" &&\n                typeof node.expression.value === \"string\"\n            );\n        }\n\n        /**\n         * Checks whether or not a given node is a part of directive prologues.\n         * See also: http://www.ecma-international.org/ecma-262/6.0/#sec-directive-prologues-and-the-use-strict-directive\n         * @param {ASTNode} node A node to check.\n         * @returns {boolean} Whether or not the node is a part of directive prologues.\n         * @private\n         */\n        function isPartOfDirectivePrologue(node) {\n            const block = node.parent.parent;\n\n            if (block.type !== \"Program\" && (block.type !== \"BlockStatement\" || !astUtils.isFunction(block.parent))) {\n                return false;\n            }\n\n            // Check the node is at a prologue.\n            for (let i = 0; i < block.body.length; ++i) {\n                const statement = block.body[i];\n\n                if (statement === node.parent) {\n                    return true;\n                }\n                if (!isDirective(statement)) {\n                    break;\n                }\n            }\n\n            return false;\n        }\n\n        /**\n         * Checks whether or not a given node is allowed as non backtick.\n         * @param {ASTNode} node A node to check.\n         * @returns {boolean} Whether or not the node is allowed as non backtick.\n         * @private\n         */\n        function isAllowedAsNonBacktick(node) {\n            const parent = node.parent;\n\n            switch (parent.type) {\n\n                // Directive Prologues.\n                case \"ExpressionStatement\":\n                    return isPartOfDirectivePrologue(node);\n\n                // LiteralPropertyName.\n                case \"Property\":\n                case \"PropertyDefinition\":\n                case \"MethodDefinition\":\n                    return parent.key === node && !parent.computed;\n\n                // ModuleSpecifier.\n                case \"ImportDeclaration\":\n                case \"ExportNamedDeclaration\":\n                    return parent.source === node;\n\n                // ModuleExportName or ModuleSpecifier.\n                case \"ExportAllDeclaration\":\n                    return parent.exported === node || parent.source === node;\n\n                // ModuleExportName.\n                case \"ImportSpecifier\":\n                    return parent.imported === node;\n\n                // ModuleExportName.\n                case \"ExportSpecifier\":\n                    return parent.local === node || parent.exported === node;\n\n                // Others don't allow.\n                default:\n                    return false;\n            }\n        }\n\n        /**\n         * Checks whether or not a given TemplateLiteral node is actually using any of the special features provided by template literal strings.\n         * @param {ASTNode} node A TemplateLiteral node to check.\n         * @returns {boolean} Whether or not the TemplateLiteral node is using any of the special features provided by template literal strings.\n         * @private\n         */\n        function isUsingFeatureOfTemplateLiteral(node) {\n            const hasTag = node.parent.type === \"TaggedTemplateExpression\" && node === node.parent.quasi;\n\n            if (hasTag) {\n                return true;\n            }\n\n            const hasStringInterpolation = node.expressions.length > 0;\n\n            if (hasStringInterpolation) {\n                return true;\n            }\n\n            const isMultilineString = node.quasis.length >= 1 && UNESCAPED_LINEBREAK_PATTERN.test(node.quasis[0].value.raw);\n\n            if (isMultilineString) {\n                return true;\n            }\n\n            return false;\n        }\n\n        return {\n\n            Literal(node) {\n                const val = node.value,\n                    rawVal = node.raw;\n\n                if (settings && typeof val === \"string\") {\n                    let isValid = (quoteOption === \"backtick\" && isAllowedAsNonBacktick(node)) ||\n                        isJSXLiteral(node) ||\n                        astUtils.isSurroundedBy(rawVal, settings.quote);\n\n                    if (!isValid && avoidEscape) {\n                        isValid = astUtils.isSurroundedBy(rawVal, settings.alternateQuote) && rawVal.indexOf(settings.quote) >= 0;\n                    }\n\n                    if (!isValid) {\n                        context.report({\n                            node,\n                            messageId: \"wrongQuotes\",\n                            data: {\n                                description: settings.description\n                            },\n                            fix(fixer) {\n                                if (quoteOption === \"backtick\" && astUtils.hasOctalOrNonOctalDecimalEscapeSequence(rawVal)) {\n\n                                    /*\n                                     * An octal or non-octal decimal escape sequence in a template literal would\n                                     * produce syntax error, even in non-strict mode.\n                                     */\n                                    return null;\n                                }\n\n                                return fixer.replaceText(node, settings.convert(node.raw));\n                            }\n                        });\n                    }\n                }\n            },\n\n            TemplateLiteral(node) {\n\n                // Don't throw an error if backticks are expected or a template literal feature is in use.\n                if (\n                    allowTemplateLiterals ||\n                    quoteOption === \"backtick\" ||\n                    isUsingFeatureOfTemplateLiteral(node)\n                ) {\n                    return;\n                }\n\n                context.report({\n                    node,\n                    messageId: \"wrongQuotes\",\n                    data: {\n                        description: settings.description\n                    },\n                    fix(fixer) {\n                        if (isPartOfDirectivePrologue(node)) {\n\n                            /*\n                             * TemplateLiterals in a directive prologue aren't actually directives, but if they're\n                             * in the directive prologue, then fixing them might turn them into directives and change\n                             * the behavior of the code.\n                             */\n                            return null;\n                        }\n                        return fixer.replaceText(node, settings.convert(sourceCode.getText(node)));\n                    }\n                });\n            }\n        };\n\n    }\n};\n/lib/rules/default-case-last.js\u0004/**\n * @fileoverview Rule to enforce default clauses in switch statements to be last\n * @author Milos Djermanovic\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"enforce default clauses in switch statements to be last\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/default-case-last\"\n        },\n\n        schema: [],\n\n        messages: {\n            notLast: \"Default clause should be the last clause.\"\n        }\n    },\n\n    create(context) {\n        return {\n            SwitchStatement(node) {\n                const cases = node.cases,\n                    indexOfDefault = cases.findIndex(c => c.test === null);\n\n                if (indexOfDefault !== -1 && indexOfDefault !== cases.length - 1) {\n                    const defaultClause = cases[indexOfDefault];\n\n                    context.report({ node: defaultClause, messageId: \"notLast\" });\n                }\n            }\n        };\n    }\n};\n/lib/rules/comma-style.js./**\n * @fileoverview Comma style - enforces comma styles of two types: last and first\n * @author Vignesh Anand aka vegetableman\n */\n\n\"use strict\";\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"layout\",\n\n        docs: {\n            description: \"enforce consistent comma style\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/comma-style\"\n        },\n\n        fixable: \"code\",\n\n        schema: [\n            {\n                enum: [\"first\", \"last\"]\n            },\n            {\n                type: \"object\",\n                properties: {\n                    exceptions: {\n                        type: \"object\",\n                        additionalProperties: {\n                            type: \"boolean\"\n                        }\n                    }\n                },\n                additionalProperties: false\n            }\n        ],\n\n        messages: {\n            unexpectedLineBeforeAndAfterComma: \"Bad line breaking before and after ','.\",\n            expectedCommaFirst: \"',' should be placed first.\",\n            expectedCommaLast: \"',' should be placed last.\"\n        }\n    },\n\n    create(context) {\n        const style = context.options[0] || \"last\",\n            sourceCode = context.getSourceCode();\n        const exceptions = {\n            ArrayPattern: true,\n            ArrowFunctionExpression: true,\n            CallExpression: true,\n            FunctionDeclaration: true,\n            FunctionExpression: true,\n            ImportDeclaration: true,\n            ObjectPattern: true,\n            NewExpression: true\n        };\n\n        if (context.options.length === 2 && Object.prototype.hasOwnProperty.call(context.options[1], \"exceptions\")) {\n            const keys = Object.keys(context.options[1].exceptions);\n\n            for (let i = 0; i < keys.length; i++) {\n                exceptions[keys[i]] = context.options[1].exceptions[keys[i]];\n            }\n        }\n\n        //--------------------------------------------------------------------------\n        // Helpers\n        //--------------------------------------------------------------------------\n\n        /**\n         * Modified text based on the style\n         * @param {string} styleType Style type\n         * @param {string} text Source code text\n         * @returns {string} modified text\n         * @private\n         */\n        function getReplacedText(styleType, text) {\n            switch (styleType) {\n                case \"between\":\n                    return `,${text.replace(astUtils.LINEBREAK_MATCHER, \"\")}`;\n\n                case \"first\":\n                    return `${text},`;\n\n                case \"last\":\n                    return `,${text}`;\n\n                default:\n                    return \"\";\n            }\n        }\n\n        /**\n         * Determines the fixer function for a given style.\n         * @param {string} styleType comma style\n         * @param {ASTNode} previousItemToken The token to check.\n         * @param {ASTNode} commaToken The token to check.\n         * @param {ASTNode} currentItemToken The token to check.\n         * @returns {Function} Fixer function\n         * @private\n         */\n        function getFixerFunction(styleType, previousItemToken, commaToken, currentItemToken) {\n            const text =\n                sourceCode.text.slice(previousItemToken.range[1], commaToken.range[0]) +\n                sourceCode.text.slice(commaToken.range[1], currentItemToken.range[0]);\n            const range = [previousItemToken.range[1], currentItemToken.range[0]];\n\n            return function(fixer) {\n                return fixer.replaceTextRange(range, getReplacedText(styleType, text));\n            };\n        }\n\n        /**\n         * Validates the spacing around single items in lists.\n         * @param {Token} previousItemToken The last token from the previous item.\n         * @param {Token} commaToken The token representing the comma.\n         * @param {Token} currentItemToken The first token of the current item.\n         * @param {Token} reportItem The item to use when reporting an error.\n         * @returns {void}\n         * @private\n         */\n        function validateCommaItemSpacing(previousItemToken, commaToken, currentItemToken, reportItem) {\n\n            // if single line\n            if (astUtils.isTokenOnSameLine(commaToken, currentItemToken) &&\n                    astUtils.isTokenOnSameLine(previousItemToken, commaToken)) {\n\n                // do nothing.\n\n            } else if (!astUtils.isTokenOnSameLine(commaToken, currentItemToken) &&\n                    !astUtils.isTokenOnSameLine(previousItemToken, commaToken)) {\n\n                const comment = sourceCode.getCommentsAfter(commaToken)[0];\n                const styleType = comment && comment.type === \"Block\" && astUtils.isTokenOnSameLine(commaToken, comment)\n                    ? style\n                    : \"between\";\n\n                // lone comma\n                context.report({\n                    node: reportItem,\n                    loc: commaToken.loc,\n                    messageId: \"unexpectedLineBeforeAndAfterComma\",\n                    fix: getFixerFunction(styleType, previousItemToken, commaToken, currentItemToken)\n                });\n\n            } else if (style === \"first\" && !astUtils.isTokenOnSameLine(commaToken, currentItemToken)) {\n\n                context.report({\n                    node: reportItem,\n                    loc: commaToken.loc,\n                    messageId: \"expectedCommaFirst\",\n                    fix: getFixerFunction(style, previousItemToken, commaToken, currentItemToken)\n                });\n\n            } else if (style === \"last\" && astUtils.isTokenOnSameLine(commaToken, currentItemToken)) {\n\n                context.report({\n                    node: reportItem,\n                    loc: commaToken.loc,\n                    messageId: \"expectedCommaLast\",\n                    fix: getFixerFunction(style, previousItemToken, commaToken, currentItemToken)\n                });\n            }\n        }\n\n        /**\n         * Checks the comma placement with regards to a declaration/property/element\n         * @param {ASTNode} node The binary expression node to check\n         * @param {string} property The property of the node containing child nodes.\n         * @private\n         * @returns {void}\n         */\n        function validateComma(node, property) {\n            const items = node[property],\n                arrayLiteral = (node.type === \"ArrayExpression\" || node.type === \"ArrayPattern\");\n\n            if (items.length > 1 || arrayLiteral) {\n\n                // seed as opening [\n                let previousItemToken = sourceCode.getFirstToken(node);\n\n                items.forEach(item => {\n                    const commaToken = item ? sourceCode.getTokenBefore(item) : previousItemToken,\n                        currentItemToken = item ? sourceCode.getFirstToken(item) : sourceCode.getTokenAfter(commaToken),\n                        reportItem = item || currentItemToken;\n\n                    /*\n                     * This works by comparing three token locations:\n                     * - previousItemToken is the last token of the previous item\n                     * - commaToken is the location of the comma before the current item\n                     * - currentItemToken is the first token of the current item\n                     *\n                     * These values get switched around if item is undefined.\n                     * previousItemToken will refer to the last token not belonging\n                     * to the current item, which could be a comma or an opening\n                     * square bracket. currentItemToken could be a comma.\n                     *\n                     * All comparisons are done based on these tokens directly, so\n                     * they are always valid regardless of an undefined item.\n                     */\n                    if (astUtils.isCommaToken(commaToken)) {\n                        validateCommaItemSpacing(previousItemToken, commaToken, currentItemToken, reportItem);\n                    }\n\n                    if (item) {\n                        const tokenAfterItem = sourceCode.getTokenAfter(item, astUtils.isNotClosingParenToken);\n\n                        previousItemToken = tokenAfterItem\n                            ? sourceCode.getTokenBefore(tokenAfterItem)\n                            : sourceCode.ast.tokens[sourceCode.ast.tokens.length - 1];\n                    } else {\n                        previousItemToken = currentItemToken;\n                    }\n                });\n\n                /*\n                 * Special case for array literals that have empty last items, such\n                 * as [ 1, 2, ]. These arrays only have two items show up in the\n                 * AST, so we need to look at the token to verify that there's no\n                 * dangling comma.\n                 */\n                if (arrayLiteral) {\n\n                    const lastToken = sourceCode.getLastToken(node),\n                        nextToLastToken = sourceCode.getTokenBefore(lastToken);\n\n                    if (astUtils.isCommaToken(nextToLastToken)) {\n                        validateCommaItemSpacing(\n                            sourceCode.getTokenBefore(nextToLastToken),\n                            nextToLastToken,\n                            lastToken,\n                            lastToken\n                        );\n                    }\n                }\n            }\n        }\n\n        //--------------------------------------------------------------------------\n        // Public\n        //--------------------------------------------------------------------------\n\n        const nodes = {};\n\n        if (!exceptions.VariableDeclaration) {\n            nodes.VariableDeclaration = function(node) {\n                validateComma(node, \"declarations\");\n            };\n        }\n        if (!exceptions.ObjectExpression) {\n            nodes.ObjectExpression = function(node) {\n                validateComma(node, \"properties\");\n            };\n        }\n        if (!exceptions.ObjectPattern) {\n            nodes.ObjectPattern = function(node) {\n                validateComma(node, \"properties\");\n            };\n        }\n        if (!exceptions.ArrayExpression) {\n            nodes.ArrayExpression = function(node) {\n                validateComma(node, \"elements\");\n            };\n        }\n        if (!exceptions.ArrayPattern) {\n            nodes.ArrayPattern = function(node) {\n                validateComma(node, \"elements\");\n            };\n        }\n        if (!exceptions.FunctionDeclaration) {\n            nodes.FunctionDeclaration = function(node) {\n                validateComma(node, \"params\");\n            };\n        }\n        if (!exceptions.FunctionExpression) {\n            nodes.FunctionExpression = function(node) {\n                validateComma(node, \"params\");\n            };\n        }\n        if (!exceptions.ArrowFunctionExpression) {\n            nodes.ArrowFunctionExpression = function(node) {\n                validateComma(node, \"params\");\n            };\n        }\n        if (!exceptions.CallExpression) {\n            nodes.CallExpression = function(node) {\n                validateComma(node, \"arguments\");\n            };\n        }\n        if (!exceptions.ImportDeclaration) {\n            nodes.ImportDeclaration = function(node) {\n                validateComma(node, \"specifiers\");\n            };\n        }\n        if (!exceptions.NewExpression) {\n            nodes.NewExpression = function(node) {\n                validateComma(node, \"arguments\");\n            };\n        }\n\n        return nodes;\n    }\n};\n(/lib/rules/prefer-named-capture-group.js\rc/**\n * @fileoverview Rule to enforce requiring named capture groups in regular expression.\n * @author Pig Fang <https://github.com/g-plane>\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst {\n    CALL,\n    CONSTRUCT,\n    ReferenceTracker,\n    getStringIfConstant\n} = require(\"eslint-utils\");\nconst regexpp = require(\"regexpp\");\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\nconst parser = new regexpp.RegExpParser();\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"enforce using named capture group in regular expression\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/prefer-named-capture-group\"\n        },\n\n        schema: [],\n\n        messages: {\n            required: \"Capture group '{{group}}' should be converted to a named or non-capturing group.\"\n        }\n    },\n\n    create(context) {\n\n        /**\n         * Function to check regular expression.\n         * @param {string} pattern The regular expression pattern to be check.\n         * @param {ASTNode} node AST node which contains regular expression.\n         * @param {boolean} uFlag Flag indicates whether unicode mode is enabled or not.\n         * @returns {void}\n         */\n        function checkRegex(pattern, node, uFlag) {\n            let ast;\n\n            try {\n                ast = parser.parsePattern(pattern, 0, pattern.length, uFlag);\n            } catch {\n\n                // ignore regex syntax errors\n                return;\n            }\n\n            regexpp.visitRegExpAST(ast, {\n                onCapturingGroupEnter(group) {\n                    if (!group.name) {\n                        context.report({\n                            node,\n                            messageId: \"required\",\n                            data: {\n                                group: group.raw\n                            }\n                        });\n                    }\n                }\n            });\n        }\n\n        return {\n            Literal(node) {\n                if (node.regex) {\n                    checkRegex(node.regex.pattern, node, node.regex.flags.includes(\"u\"));\n                }\n            },\n            Program() {\n                const scope = context.getScope();\n                const tracker = new ReferenceTracker(scope);\n                const traceMap = {\n                    RegExp: {\n                        [CALL]: true,\n                        [CONSTRUCT]: true\n                    }\n                };\n\n                for (const { node } of tracker.iterateGlobalReferences(traceMap)) {\n                    const regex = getStringIfConstant(node.arguments[0]);\n                    const flags = getStringIfConstant(node.arguments[1]);\n\n                    if (regex) {\n                        checkRegex(regex, node, flags && flags.includes(\"u\"));\n                    }\n                }\n            }\n        };\n    }\n};\n#/lib/rules/prefer-object-has-own.js\u0010/**\n * @fileoverview Prefers Object.hasOwn() instead of Object.prototype.hasOwnProperty.call()\n * @author Nitin Kumar\n * @author Gautam Arora\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\n/**\n * Checks if the given node is considered to be an access to a property of `Object.prototype`.\n * @param {ASTNode} node `MemberExpression` node to evaluate.\n * @returns {boolean} `true` if `node.object` is `Object`, `Object.prototype`, or `{}` (empty 'ObjectExpression' node).\n */\nfunction hasLeftHandObject(node) {\n\n    /*\n     * ({}).hasOwnProperty.call(obj, prop) - `true`\n     * ({ foo }.hasOwnProperty.call(obj, prop)) - `false`, object literal should be empty\n     */\n    if (node.object.type === \"ObjectExpression\" && node.object.properties.length === 0) {\n        return true;\n    }\n\n    const objectNodeToCheck = node.object.type === \"MemberExpression\" && astUtils.getStaticPropertyName(node.object) === \"prototype\" ? node.object.object : node.object;\n\n    if (objectNodeToCheck.type === \"Identifier\" && objectNodeToCheck.name === \"Object\") {\n        return true;\n    }\n\n    return false;\n}\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n        docs: {\n            description:\n                \"disallow use of `Object.prototype.hasOwnProperty.call()` and prefer use of `Object.hasOwn()`\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/prefer-object-has-own\"\n        },\n        schema: [],\n        messages: {\n            useHasOwn: \"Use 'Object.hasOwn()' instead of 'Object.prototype.hasOwnProperty.call()'.\"\n        },\n        fixable: \"code\"\n    },\n    create(context) {\n        return {\n            CallExpression(node) {\n                if (!(node.callee.type === \"MemberExpression\" && node.callee.object.type === \"MemberExpression\")) {\n                    return;\n                }\n\n                const calleePropertyName = astUtils.getStaticPropertyName(node.callee);\n                const objectPropertyName = astUtils.getStaticPropertyName(node.callee.object);\n                const isObject = hasLeftHandObject(node.callee.object);\n\n                // check `Object` scope\n                const scope = context.getScope();\n                const variable = astUtils.getVariableByName(scope, \"Object\");\n\n                if (\n                    calleePropertyName === \"call\" &&\n                    objectPropertyName === \"hasOwnProperty\" &&\n                    isObject &&\n                    variable && variable.scope.type === \"global\"\n                ) {\n                    context.report({\n                        node,\n                        messageId: \"useHasOwn\",\n                        fix(fixer) {\n                            const sourceCode = context.getSourceCode();\n\n                            if (sourceCode.getCommentsInside(node.callee).length > 0) {\n                                return null;\n                            }\n\n                            const tokenJustBeforeNode = sourceCode.getTokenBefore(node.callee, { includeComments: true });\n\n                            // for https://github.com/eslint/eslint/pull/15346#issuecomment-991417335\n                            if (\n                                tokenJustBeforeNode &&\n                                tokenJustBeforeNode.range[1] === node.callee.range[0] &&\n                                !astUtils.canTokensBeAdjacent(tokenJustBeforeNode, \"Object.hasOwn\")\n                            ) {\n                                return fixer.replaceText(node.callee, \" Object.hasOwn\");\n                            }\n\n                            return fixer.replaceText(node.callee, \"Object.hasOwn\");\n                        }\n                    });\n                }\n            }\n        };\n    }\n};\n\"/lib/rules/lines-around-comment.jsC/**\n * @fileoverview Enforces empty lines around comments.\n * @author Jamund Ferguson\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\n/**\n * Return an array with with any line numbers that are empty.\n * @param {Array} lines An array of each line of the file.\n * @returns {Array} An array of line numbers.\n */\nfunction getEmptyLineNums(lines) {\n    const emptyLines = lines.map((line, i) => ({\n        code: line.trim(),\n        num: i + 1\n    })).filter(line => !line.code).map(line => line.num);\n\n    return emptyLines;\n}\n\n/**\n * Return an array with with any line numbers that contain comments.\n * @param {Array} comments An array of comment tokens.\n * @returns {Array} An array of line numbers.\n */\nfunction getCommentLineNums(comments) {\n    const lines = [];\n\n    comments.forEach(token => {\n        const start = token.loc.start.line;\n        const end = token.loc.end.line;\n\n        lines.push(start, end);\n    });\n    return lines;\n}\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"layout\",\n\n        docs: {\n            description: \"require empty lines around comments\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/lines-around-comment\"\n        },\n\n        fixable: \"whitespace\",\n\n        schema: [\n            {\n                type: \"object\",\n                properties: {\n                    beforeBlockComment: {\n                        type: \"boolean\",\n                        default: true\n                    },\n                    afterBlockComment: {\n                        type: \"boolean\",\n                        default: false\n                    },\n                    beforeLineComment: {\n                        type: \"boolean\",\n                        default: false\n                    },\n                    afterLineComment: {\n                        type: \"boolean\",\n                        default: false\n                    },\n                    allowBlockStart: {\n                        type: \"boolean\",\n                        default: false\n                    },\n                    allowBlockEnd: {\n                        type: \"boolean\",\n                        default: false\n                    },\n                    allowClassStart: {\n                        type: \"boolean\"\n                    },\n                    allowClassEnd: {\n                        type: \"boolean\"\n                    },\n                    allowObjectStart: {\n                        type: \"boolean\"\n                    },\n                    allowObjectEnd: {\n                        type: \"boolean\"\n                    },\n                    allowArrayStart: {\n                        type: \"boolean\"\n                    },\n                    allowArrayEnd: {\n                        type: \"boolean\"\n                    },\n                    ignorePattern: {\n                        type: \"string\"\n                    },\n                    applyDefaultIgnorePatterns: {\n                        type: \"boolean\"\n                    }\n                },\n                additionalProperties: false\n            }\n        ],\n        messages: {\n            after: \"Expected line after comment.\",\n            before: \"Expected line before comment.\"\n        }\n    },\n\n    create(context) {\n\n        const options = Object.assign({}, context.options[0]);\n        const ignorePattern = options.ignorePattern;\n        const defaultIgnoreRegExp = astUtils.COMMENTS_IGNORE_PATTERN;\n        const customIgnoreRegExp = new RegExp(ignorePattern, \"u\");\n        const applyDefaultIgnorePatterns = options.applyDefaultIgnorePatterns !== false;\n\n        options.beforeBlockComment = typeof options.beforeBlockComment !== \"undefined\" ? options.beforeBlockComment : true;\n\n        const sourceCode = context.getSourceCode();\n\n        const lines = sourceCode.lines,\n            numLines = lines.length + 1,\n            comments = sourceCode.getAllComments(),\n            commentLines = getCommentLineNums(comments),\n            emptyLines = getEmptyLineNums(lines),\n            commentAndEmptyLines = commentLines.concat(emptyLines);\n\n        /**\n         * Returns whether or not comments are on lines starting with or ending with code\n         * @param {token} token The comment token to check.\n         * @returns {boolean} True if the comment is not alone.\n         */\n        function codeAroundComment(token) {\n            let currentToken = token;\n\n            do {\n                currentToken = sourceCode.getTokenBefore(currentToken, { includeComments: true });\n            } while (currentToken && astUtils.isCommentToken(currentToken));\n\n            if (currentToken && astUtils.isTokenOnSameLine(currentToken, token)) {\n                return true;\n            }\n\n            currentToken = token;\n            do {\n                currentToken = sourceCode.getTokenAfter(currentToken, { includeComments: true });\n            } while (currentToken && astUtils.isCommentToken(currentToken));\n\n            if (currentToken && astUtils.isTokenOnSameLine(token, currentToken)) {\n                return true;\n            }\n\n            return false;\n        }\n\n        /**\n         * Returns whether or not comments are inside a node type or not.\n         * @param {ASTNode} parent The Comment parent node.\n         * @param {string} nodeType The parent type to check against.\n         * @returns {boolean} True if the comment is inside nodeType.\n         */\n        function isParentNodeType(parent, nodeType) {\n            return parent.type === nodeType ||\n                (parent.body && parent.body.type === nodeType) ||\n                (parent.consequent && parent.consequent.type === nodeType);\n        }\n\n        /**\n         * Returns the parent node that contains the given token.\n         * @param {token} token The token to check.\n         * @returns {ASTNode|null} The parent node that contains the given token.\n         */\n        function getParentNodeOfToken(token) {\n            const node = sourceCode.getNodeByRangeIndex(token.range[0]);\n\n            /*\n             * For the purpose of this rule, the comment token is in a `StaticBlock` node only\n             * if it's inside the braces of that `StaticBlock` node.\n             *\n             * Example where this function returns `null`:\n             *\n             *   static\n             *   // comment\n             *   {\n             *   }\n             *\n             * Example where this function returns `StaticBlock` node:\n             *\n             *   static\n             *   {\n             *   // comment\n             *   }\n             *\n             */\n            if (node && node.type === \"StaticBlock\") {\n                const openingBrace = sourceCode.getFirstToken(node, { skip: 1 }); // skip the `static` token\n\n                return token.range[0] >= openingBrace.range[0]\n                    ? node\n                    : null;\n            }\n\n            return node;\n        }\n\n        /**\n         * Returns whether or not comments are at the parent start or not.\n         * @param {token} token The Comment token.\n         * @param {string} nodeType The parent type to check against.\n         * @returns {boolean} True if the comment is at parent start.\n         */\n        function isCommentAtParentStart(token, nodeType) {\n            const parent = getParentNodeOfToken(token);\n\n            if (parent && isParentNodeType(parent, nodeType)) {\n                const parentStartNodeOrToken = parent.type === \"StaticBlock\"\n                    ? sourceCode.getFirstToken(parent, { skip: 1 }) // opening brace of the static block\n                    : parent;\n\n                return token.loc.start.line - parentStartNodeOrToken.loc.start.line === 1;\n            }\n\n            return false;\n        }\n\n        /**\n         * Returns whether or not comments are at the parent end or not.\n         * @param {token} token The Comment token.\n         * @param {string} nodeType The parent type to check against.\n         * @returns {boolean} True if the comment is at parent end.\n         */\n        function isCommentAtParentEnd(token, nodeType) {\n            const parent = getParentNodeOfToken(token);\n\n            return !!parent && isParentNodeType(parent, nodeType) &&\n                    parent.loc.end.line - token.loc.end.line === 1;\n        }\n\n        /**\n         * Returns whether or not comments are at the block start or not.\n         * @param {token} token The Comment token.\n         * @returns {boolean} True if the comment is at block start.\n         */\n        function isCommentAtBlockStart(token) {\n            return (\n                isCommentAtParentStart(token, \"ClassBody\") ||\n                isCommentAtParentStart(token, \"BlockStatement\") ||\n                isCommentAtParentStart(token, \"StaticBlock\") ||\n                isCommentAtParentStart(token, \"SwitchCase\")\n            );\n        }\n\n        /**\n         * Returns whether or not comments are at the block end or not.\n         * @param {token} token The Comment token.\n         * @returns {boolean} True if the comment is at block end.\n         */\n        function isCommentAtBlockEnd(token) {\n            return (\n                isCommentAtParentEnd(token, \"ClassBody\") ||\n                isCommentAtParentEnd(token, \"BlockStatement\") ||\n                isCommentAtParentEnd(token, \"StaticBlock\") ||\n                isCommentAtParentEnd(token, \"SwitchCase\") ||\n                isCommentAtParentEnd(token, \"SwitchStatement\")\n            );\n        }\n\n        /**\n         * Returns whether or not comments are at the class start or not.\n         * @param {token} token The Comment token.\n         * @returns {boolean} True if the comment is at class start.\n         */\n        function isCommentAtClassStart(token) {\n            return isCommentAtParentStart(token, \"ClassBody\");\n        }\n\n        /**\n         * Returns whether or not comments are at the class end or not.\n         * @param {token} token The Comment token.\n         * @returns {boolean} True if the comment is at class end.\n         */\n        function isCommentAtClassEnd(token) {\n            return isCommentAtParentEnd(token, \"ClassBody\");\n        }\n\n        /**\n         * Returns whether or not comments are at the object start or not.\n         * @param {token} token The Comment token.\n         * @returns {boolean} True if the comment is at object start.\n         */\n        function isCommentAtObjectStart(token) {\n            return isCommentAtParentStart(token, \"ObjectExpression\") || isCommentAtParentStart(token, \"ObjectPattern\");\n        }\n\n        /**\n         * Returns whether or not comments are at the object end or not.\n         * @param {token} token The Comment token.\n         * @returns {boolean} True if the comment is at object end.\n         */\n        function isCommentAtObjectEnd(token) {\n            return isCommentAtParentEnd(token, \"ObjectExpression\") || isCommentAtParentEnd(token, \"ObjectPattern\");\n        }\n\n        /**\n         * Returns whether or not comments are at the array start or not.\n         * @param {token} token The Comment token.\n         * @returns {boolean} True if the comment is at array start.\n         */\n        function isCommentAtArrayStart(token) {\n            return isCommentAtParentStart(token, \"ArrayExpression\") || isCommentAtParentStart(token, \"ArrayPattern\");\n        }\n\n        /**\n         * Returns whether or not comments are at the array end or not.\n         * @param {token} token The Comment token.\n         * @returns {boolean} True if the comment is at array end.\n         */\n        function isCommentAtArrayEnd(token) {\n            return isCommentAtParentEnd(token, \"ArrayExpression\") || isCommentAtParentEnd(token, \"ArrayPattern\");\n        }\n\n        /**\n         * Checks if a comment token has lines around it (ignores inline comments)\n         * @param {token} token The Comment token.\n         * @param {Object} opts Options to determine the newline.\n         * @param {boolean} opts.after Should have a newline after this line.\n         * @param {boolean} opts.before Should have a newline before this line.\n         * @returns {void}\n         */\n        function checkForEmptyLine(token, opts) {\n            if (applyDefaultIgnorePatterns && defaultIgnoreRegExp.test(token.value)) {\n                return;\n            }\n\n            if (ignorePattern && customIgnoreRegExp.test(token.value)) {\n                return;\n            }\n\n            let after = opts.after,\n                before = opts.before;\n\n            const prevLineNum = token.loc.start.line - 1,\n                nextLineNum = token.loc.end.line + 1,\n                commentIsNotAlone = codeAroundComment(token);\n\n            const blockStartAllowed = options.allowBlockStart &&\n                    isCommentAtBlockStart(token) &&\n                    !(options.allowClassStart === false &&\n                    isCommentAtClassStart(token)),\n                blockEndAllowed = options.allowBlockEnd && isCommentAtBlockEnd(token) && !(options.allowClassEnd === false && isCommentAtClassEnd(token)),\n                classStartAllowed = options.allowClassStart && isCommentAtClassStart(token),\n                classEndAllowed = options.allowClassEnd && isCommentAtClassEnd(token),\n                objectStartAllowed = options.allowObjectStart && isCommentAtObjectStart(token),\n                objectEndAllowed = options.allowObjectEnd && isCommentAtObjectEnd(token),\n                arrayStartAllowed = options.allowArrayStart && isCommentAtArrayStart(token),\n                arrayEndAllowed = options.allowArrayEnd && isCommentAtArrayEnd(token);\n\n            const exceptionStartAllowed = blockStartAllowed || classStartAllowed || objectStartAllowed || arrayStartAllowed;\n            const exceptionEndAllowed = blockEndAllowed || classEndAllowed || objectEndAllowed || arrayEndAllowed;\n\n            // ignore top of the file and bottom of the file\n            if (prevLineNum < 1) {\n                before = false;\n            }\n            if (nextLineNum >= numLines) {\n                after = false;\n            }\n\n            // we ignore all inline comments\n            if (commentIsNotAlone) {\n                return;\n            }\n\n            const previousTokenOrComment = sourceCode.getTokenBefore(token, { includeComments: true });\n            const nextTokenOrComment = sourceCode.getTokenAfter(token, { includeComments: true });\n\n            // check for newline before\n            if (!exceptionStartAllowed && before && !commentAndEmptyLines.includes(prevLineNum) &&\n                    !(astUtils.isCommentToken(previousTokenOrComment) && astUtils.isTokenOnSameLine(previousTokenOrComment, token))) {\n                const lineStart = token.range[0] - token.loc.start.column;\n                const range = [lineStart, lineStart];\n\n                context.report({\n                    node: token,\n                    messageId: \"before\",\n                    fix(fixer) {\n                        return fixer.insertTextBeforeRange(range, \"\\n\");\n                    }\n                });\n            }\n\n            // check for newline after\n            if (!exceptionEndAllowed && after && !commentAndEmptyLines.includes(nextLineNum) &&\n                    !(astUtils.isCommentToken(nextTokenOrComment) && astUtils.isTokenOnSameLine(token, nextTokenOrComment))) {\n                context.report({\n                    node: token,\n                    messageId: \"after\",\n                    fix(fixer) {\n                        return fixer.insertTextAfter(token, \"\\n\");\n                    }\n                });\n            }\n\n        }\n\n        //--------------------------------------------------------------------------\n        // Public\n        //--------------------------------------------------------------------------\n\n        return {\n            Program() {\n                comments.forEach(token => {\n                    if (token.type === \"Line\") {\n                        if (options.beforeLineComment || options.afterLineComment) {\n                            checkForEmptyLine(token, {\n                                after: options.afterLineComment,\n                                before: options.beforeLineComment\n                            });\n                        }\n                    } else if (token.type === \"Block\") {\n                        if (options.beforeBlockComment || options.afterBlockComment) {\n                            checkForEmptyLine(token, {\n                                after: options.afterBlockComment,\n                                before: options.beforeBlockComment\n                            });\n                        }\n                    }\n                });\n            }\n        };\n    }\n};\n /lib/rules/default-param-last.js\u00061/**\n * @fileoverview enforce default parameters to be last\n * @author Chiawen Chen\n */\n\n\"use strict\";\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"enforce default parameters to be last\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/default-param-last\"\n        },\n\n        schema: [],\n\n        messages: {\n            shouldBeLast: \"Default parameters should be last.\"\n        }\n    },\n\n    create(context) {\n\n        /**\n         * Handler for function contexts.\n         * @param {ASTNode} node function node\n         * @returns {void}\n         */\n        function handleFunction(node) {\n            let hasSeenPlainParam = false;\n\n            for (let i = node.params.length - 1; i >= 0; i -= 1) {\n                const param = node.params[i];\n\n                if (\n                    param.type !== \"AssignmentPattern\" &&\n                    param.type !== \"RestElement\"\n                ) {\n                    hasSeenPlainParam = true;\n                    continue;\n                }\n\n                if (hasSeenPlainParam && param.type === \"AssignmentPattern\") {\n                    context.report({\n                        node: param,\n                        messageId: \"shouldBeLast\"\n                    });\n                }\n            }\n        }\n\n        return {\n            FunctionDeclaration: handleFunction,\n            FunctionExpression: handleFunction,\n            ArrowFunctionExpression: handleFunction\n        };\n    }\n};\n /lib/rules/no-native-reassign.js\u000b/**\n * @fileoverview Rule to disallow assignments to native objects or read-only global variables\n * @author Ilya Volodin\n * @deprecated in ESLint v3.3.0\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow assignments to native objects or read-only global variables\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-native-reassign\"\n        },\n\n        deprecated: true,\n\n        replacedBy: [\"no-global-assign\"],\n\n        schema: [\n            {\n                type: \"object\",\n                properties: {\n                    exceptions: {\n                        type: \"array\",\n                        items: { type: \"string\" },\n                        uniqueItems: true\n                    }\n                },\n                additionalProperties: false\n            }\n        ],\n\n        messages: {\n            nativeReassign: \"Read-only global '{{name}}' should not be modified.\"\n        }\n    },\n\n    create(context) {\n        const config = context.options[0];\n        const exceptions = (config && config.exceptions) || [];\n\n        /**\n         * Reports write references.\n         * @param {Reference} reference A reference to check.\n         * @param {int} index The index of the reference in the references.\n         * @param {Reference[]} references The array that the reference belongs to.\n         * @returns {void}\n         */\n        function checkReference(reference, index, references) {\n            const identifier = reference.identifier;\n\n            if (reference.init === false &&\n                reference.isWrite() &&\n\n                /*\n                 * Destructuring assignments can have multiple default value,\n                 * so possibly there are multiple writeable references for the same identifier.\n                 */\n                (index === 0 || references[index - 1].identifier !== identifier)\n            ) {\n                context.report({\n                    node: identifier,\n                    messageId: \"nativeReassign\",\n                    data: identifier\n                });\n            }\n        }\n\n        /**\n         * Reports write references if a given variable is read-only builtin.\n         * @param {Variable} variable A variable to check.\n         * @returns {void}\n         */\n        function checkVariable(variable) {\n            if (variable.writeable === false && exceptions.indexOf(variable.name) === -1) {\n                variable.references.forEach(checkReference);\n            }\n        }\n\n        return {\n            Program() {\n                const globalScope = context.getScope();\n\n                globalScope.variables.forEach(checkVariable);\n            }\n        };\n    }\n};\n!/lib/rules/handle-callback-err.js\u000b/**\n * @fileoverview Ensure handling of errors when we know they exist.\n * @author Jamund Ferguson\n * @deprecated in ESLint v7.0.0\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        deprecated: true,\n\n        replacedBy: [],\n\n        type: \"suggestion\",\n\n        docs: {\n            description: \"require error handling in callbacks\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/handle-callback-err\"\n        },\n\n        schema: [\n            {\n                type: \"string\"\n            }\n        ],\n        messages: {\n            expected: \"Expected error to be handled.\"\n        }\n    },\n\n    create(context) {\n\n        const errorArgument = context.options[0] || \"err\";\n\n        /**\n         * Checks if the given argument should be interpreted as a regexp pattern.\n         * @param {string} stringToCheck The string which should be checked.\n         * @returns {boolean} Whether or not the string should be interpreted as a pattern.\n         */\n        function isPattern(stringToCheck) {\n            const firstChar = stringToCheck[0];\n\n            return firstChar === \"^\";\n        }\n\n        /**\n         * Checks if the given name matches the configured error argument.\n         * @param {string} name The name which should be compared.\n         * @returns {boolean} Whether or not the given name matches the configured error variable name.\n         */\n        function matchesConfiguredErrorName(name) {\n            if (isPattern(errorArgument)) {\n                const regexp = new RegExp(errorArgument, \"u\");\n\n                return regexp.test(name);\n            }\n            return name === errorArgument;\n        }\n\n        /**\n         * Get the parameters of a given function scope.\n         * @param {Object} scope The function scope.\n         * @returns {Array} All parameters of the given scope.\n         */\n        function getParameters(scope) {\n            return scope.variables.filter(variable => variable.defs[0] && variable.defs[0].type === \"Parameter\");\n        }\n\n        /**\n         * Check to see if we're handling the error object properly.\n         * @param {ASTNode} node The AST node to check.\n         * @returns {void}\n         */\n        function checkForError(node) {\n            const scope = context.getScope(),\n                parameters = getParameters(scope),\n                firstParameter = parameters[0];\n\n            if (firstParameter && matchesConfiguredErrorName(firstParameter.name)) {\n                if (firstParameter.references.length === 0) {\n                    context.report({ node, messageId: \"expected\" });\n                }\n            }\n        }\n\n        return {\n            FunctionDeclaration: checkForError,\n            FunctionExpression: checkForError,\n            ArrowFunctionExpression: checkForError\n        };\n\n    }\n};\n./lib/linter/code-path-analysis/fork-context.js\u001d/**\n * @fileoverview A class to operate forking.\n *\n * This is state of forking.\n * This has a fork list and manages it.\n *\n * @author Toru Nagashima\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst assert = require(\"assert\"),\n    CodePathSegment = require(\"./code-path-segment\");\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\n/**\n * Gets whether or not a given segment is reachable.\n * @param {CodePathSegment} segment A segment to get.\n * @returns {boolean} `true` if the segment is reachable.\n */\nfunction isReachable(segment) {\n    return segment.reachable;\n}\n\n/**\n * Creates new segments from the specific range of `context.segmentsList`.\n *\n * When `context.segmentsList` is `[[a, b], [c, d], [e, f]]`, `begin` is `0`, and\n * `end` is `-1`, this creates `[g, h]`. This `g` is from `a`, `c`, and `e`.\n * This `h` is from `b`, `d`, and `f`.\n * @param {ForkContext} context An instance.\n * @param {number} begin The first index of the previous segments.\n * @param {number} end The last index of the previous segments.\n * @param {Function} create A factory function of new segments.\n * @returns {CodePathSegment[]} New segments.\n */\nfunction makeSegments(context, begin, end, create) {\n    const list = context.segmentsList;\n\n    const normalizedBegin = begin >= 0 ? begin : list.length + begin;\n    const normalizedEnd = end >= 0 ? end : list.length + end;\n\n    const segments = [];\n\n    for (let i = 0; i < context.count; ++i) {\n        const allPrevSegments = [];\n\n        for (let j = normalizedBegin; j <= normalizedEnd; ++j) {\n            allPrevSegments.push(list[j][i]);\n        }\n\n        segments.push(create(context.idGenerator.next(), allPrevSegments));\n    }\n\n    return segments;\n}\n\n/**\n * `segments` becomes doubly in a `finally` block. Then if a code path exits by a\n * control statement (such as `break`, `continue`) from the `finally` block, the\n * destination's segments may be half of the source segments. In that case, this\n * merges segments.\n * @param {ForkContext} context An instance.\n * @param {CodePathSegment[]} segments Segments to merge.\n * @returns {CodePathSegment[]} The merged segments.\n */\nfunction mergeExtraSegments(context, segments) {\n    let currentSegments = segments;\n\n    while (currentSegments.length > context.count) {\n        const merged = [];\n\n        for (let i = 0, length = currentSegments.length / 2 | 0; i < length; ++i) {\n            merged.push(CodePathSegment.newNext(\n                context.idGenerator.next(),\n                [currentSegments[i], currentSegments[i + length]]\n            ));\n        }\n        currentSegments = merged;\n    }\n    return currentSegments;\n}\n\n//------------------------------------------------------------------------------\n// Public Interface\n//------------------------------------------------------------------------------\n\n/**\n * A class to manage forking.\n */\nclass ForkContext {\n\n    /**\n     * @param {IdGenerator} idGenerator An identifier generator for segments.\n     * @param {ForkContext|null} upper An upper fork context.\n     * @param {number} count A number of parallel segments.\n     */\n    constructor(idGenerator, upper, count) {\n        this.idGenerator = idGenerator;\n        this.upper = upper;\n        this.count = count;\n        this.segmentsList = [];\n    }\n\n    /**\n     * The head segments.\n     * @type {CodePathSegment[]}\n     */\n    get head() {\n        const list = this.segmentsList;\n\n        return list.length === 0 ? [] : list[list.length - 1];\n    }\n\n    /**\n     * A flag which shows empty.\n     * @type {boolean}\n     */\n    get empty() {\n        return this.segmentsList.length === 0;\n    }\n\n    /**\n     * A flag which shows reachable.\n     * @type {boolean}\n     */\n    get reachable() {\n        const segments = this.head;\n\n        return segments.length > 0 && segments.some(isReachable);\n    }\n\n    /**\n     * Creates new segments from this context.\n     * @param {number} begin The first index of previous segments.\n     * @param {number} end The last index of previous segments.\n     * @returns {CodePathSegment[]} New segments.\n     */\n    makeNext(begin, end) {\n        return makeSegments(this, begin, end, CodePathSegment.newNext);\n    }\n\n    /**\n     * Creates new segments from this context.\n     * The new segments is always unreachable.\n     * @param {number} begin The first index of previous segments.\n     * @param {number} end The last index of previous segments.\n     * @returns {CodePathSegment[]} New segments.\n     */\n    makeUnreachable(begin, end) {\n        return makeSegments(this, begin, end, CodePathSegment.newUnreachable);\n    }\n\n    /**\n     * Creates new segments from this context.\n     * The new segments don't have connections for previous segments.\n     * But these inherit the reachable flag from this context.\n     * @param {number} begin The first index of previous segments.\n     * @param {number} end The last index of previous segments.\n     * @returns {CodePathSegment[]} New segments.\n     */\n    makeDisconnected(begin, end) {\n        return makeSegments(this, begin, end, CodePathSegment.newDisconnected);\n    }\n\n    /**\n     * Adds segments into this context.\n     * The added segments become the head.\n     * @param {CodePathSegment[]} segments Segments to add.\n     * @returns {void}\n     */\n    add(segments) {\n        assert(segments.length >= this.count, `${segments.length} >= ${this.count}`);\n\n        this.segmentsList.push(mergeExtraSegments(this, segments));\n    }\n\n    /**\n     * Replaces the head segments with given segments.\n     * The current head segments are removed.\n     * @param {CodePathSegment[]} segments Segments to add.\n     * @returns {void}\n     */\n    replaceHead(segments) {\n        assert(segments.length >= this.count, `${segments.length} >= ${this.count}`);\n\n        this.segmentsList.splice(-1, 1, mergeExtraSegments(this, segments));\n    }\n\n    /**\n     * Adds all segments of a given fork context into this context.\n     * @param {ForkContext} context A fork context to add.\n     * @returns {void}\n     */\n    addAll(context) {\n        assert(context.count === this.count);\n\n        const source = context.segmentsList;\n\n        for (let i = 0; i < source.length; ++i) {\n            this.segmentsList.push(source[i]);\n        }\n    }\n\n    /**\n     * Clears all segments in this context.\n     * @returns {void}\n     */\n    clear() {\n        this.segmentsList = [];\n    }\n\n    /**\n     * Creates the root fork context.\n     * @param {IdGenerator} idGenerator An identifier generator for segments.\n     * @returns {ForkContext} New fork context.\n     */\n    static newRoot(idGenerator) {\n        const context = new ForkContext(idGenerator, null, 1);\n\n        context.add([CodePathSegment.newRoot(idGenerator.next())]);\n\n        return context;\n    }\n\n    /**\n     * Creates an empty fork context preceded by a given context.\n     * @param {ForkContext} parentContext The parent fork context.\n     * @param {boolean} forkLeavingPath A flag which shows inside of `finally` block.\n     * @returns {ForkContext} New fork context.\n     */\n    static newEmpty(parentContext, forkLeavingPath) {\n        return new ForkContext(\n            parentContext.idGenerator,\n            parentContext,\n            (forkLeavingPath ? 2 : 1) * parentContext.count\n        );\n    }\n}\n\nmodule.exports = ForkContext;\n$/lib/rules/max-lines-per-function.js\u001b/**\n * @fileoverview A rule to set the maximum number of line of code in a function.\n * @author Pete Ward <peteward44@gmail.com>\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\nconst { upperCaseFirst } = require(\"../shared/string-utils\");\n\n//------------------------------------------------------------------------------\n// Constants\n//------------------------------------------------------------------------------\n\nconst OPTIONS_SCHEMA = {\n    type: \"object\",\n    properties: {\n        max: {\n            type: \"integer\",\n            minimum: 0\n        },\n        skipComments: {\n            type: \"boolean\"\n        },\n        skipBlankLines: {\n            type: \"boolean\"\n        },\n        IIFEs: {\n            type: \"boolean\"\n        }\n    },\n    additionalProperties: false\n};\n\nconst OPTIONS_OR_INTEGER_SCHEMA = {\n    oneOf: [\n        OPTIONS_SCHEMA,\n        {\n            type: \"integer\",\n            minimum: 1\n        }\n    ]\n};\n\n/**\n * Given a list of comment nodes, return a map with numeric keys (source code line numbers) and comment token values.\n * @param {Array} comments An array of comment nodes.\n * @returns {Map<string, Node>} A map with numeric keys (source code line numbers) and comment token values.\n */\nfunction getCommentLineNumbers(comments) {\n    const map = new Map();\n\n    comments.forEach(comment => {\n        for (let i = comment.loc.start.line; i <= comment.loc.end.line; i++) {\n            map.set(i, comment);\n        }\n    });\n    return map;\n}\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"enforce a maximum number of lines of code in a function\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/max-lines-per-function\"\n        },\n\n        schema: [\n            OPTIONS_OR_INTEGER_SCHEMA\n        ],\n        messages: {\n            exceed: \"{{name}} has too many lines ({{lineCount}}). Maximum allowed is {{maxLines}}.\"\n        }\n    },\n\n    create(context) {\n        const sourceCode = context.getSourceCode();\n        const lines = sourceCode.lines;\n\n        const option = context.options[0];\n        let maxLines = 50;\n        let skipComments = false;\n        let skipBlankLines = false;\n        let IIFEs = false;\n\n        if (typeof option === \"object\") {\n            maxLines = typeof option.max === \"number\" ? option.max : 50;\n            skipComments = !!option.skipComments;\n            skipBlankLines = !!option.skipBlankLines;\n            IIFEs = !!option.IIFEs;\n        } else if (typeof option === \"number\") {\n            maxLines = option;\n        }\n\n        const commentLineNumbers = getCommentLineNumbers(sourceCode.getAllComments());\n\n        //--------------------------------------------------------------------------\n        // Helpers\n        //--------------------------------------------------------------------------\n\n        /**\n         * Tells if a comment encompasses the entire line.\n         * @param {string} line The source line with a trailing comment\n         * @param {number} lineNumber The one-indexed line number this is on\n         * @param {ASTNode} comment The comment to remove\n         * @returns {boolean} If the comment covers the entire line\n         */\n        function isFullLineComment(line, lineNumber, comment) {\n            const start = comment.loc.start,\n                end = comment.loc.end,\n                isFirstTokenOnLine = start.line === lineNumber && !line.slice(0, start.column).trim(),\n                isLastTokenOnLine = end.line === lineNumber && !line.slice(end.column).trim();\n\n            return comment &&\n                (start.line < lineNumber || isFirstTokenOnLine) &&\n                (end.line > lineNumber || isLastTokenOnLine);\n        }\n\n        /**\n         * Identifies is a node is a FunctionExpression which is part of an IIFE\n         * @param {ASTNode} node Node to test\n         * @returns {boolean} True if it's an IIFE\n         */\n        function isIIFE(node) {\n            return (node.type === \"FunctionExpression\" || node.type === \"ArrowFunctionExpression\") && node.parent && node.parent.type === \"CallExpression\" && node.parent.callee === node;\n        }\n\n        /**\n         * Identifies is a node is a FunctionExpression which is embedded within a MethodDefinition or Property\n         * @param {ASTNode} node Node to test\n         * @returns {boolean} True if it's a FunctionExpression embedded within a MethodDefinition or Property\n         */\n        function isEmbedded(node) {\n            if (!node.parent) {\n                return false;\n            }\n            if (node !== node.parent.value) {\n                return false;\n            }\n            if (node.parent.type === \"MethodDefinition\") {\n                return true;\n            }\n            if (node.parent.type === \"Property\") {\n                return node.parent.method === true || node.parent.kind === \"get\" || node.parent.kind === \"set\";\n            }\n            return false;\n        }\n\n        /**\n         * Count the lines in the function\n         * @param {ASTNode} funcNode Function AST node\n         * @returns {void}\n         * @private\n         */\n        function processFunction(funcNode) {\n            const node = isEmbedded(funcNode) ? funcNode.parent : funcNode;\n\n            if (!IIFEs && isIIFE(node)) {\n                return;\n            }\n            let lineCount = 0;\n\n            for (let i = node.loc.start.line - 1; i < node.loc.end.line; ++i) {\n                const line = lines[i];\n\n                if (skipComments) {\n                    if (commentLineNumbers.has(i + 1) && isFullLineComment(line, i + 1, commentLineNumbers.get(i + 1))) {\n                        continue;\n                    }\n                }\n\n                if (skipBlankLines) {\n                    if (line.match(/^\\s*$/u)) {\n                        continue;\n                    }\n                }\n\n                lineCount++;\n            }\n\n            if (lineCount > maxLines) {\n                const name = upperCaseFirst(astUtils.getFunctionNameWithKind(funcNode));\n\n                context.report({\n                    node,\n                    messageId: \"exceed\",\n                    data: { name, lineCount, maxLines }\n                });\n            }\n        }\n\n        //--------------------------------------------------------------------------\n        // Public API\n        //--------------------------------------------------------------------------\n\n        return {\n            FunctionDeclaration: processFunction,\n            FunctionExpression: processFunction,\n            ArrowFunctionExpression: processFunction\n        };\n    }\n};\n/lib/rules/no-catch-shadow.js\t/**\n * @fileoverview Rule to flag variable leak in CatchClauses in IE 8 and earlier\n * @author Ian Christian Myers\n * @deprecated in ESLint v5.1.0\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow `catch` clause parameters from shadowing variables in the outer scope\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-catch-shadow\"\n        },\n\n        replacedBy: [\"no-shadow\"],\n\n        deprecated: true,\n        schema: [],\n\n        messages: {\n            mutable: \"Value of '{{name}}' may be overwritten in IE 8 and earlier.\"\n        }\n    },\n\n    create(context) {\n\n        //--------------------------------------------------------------------------\n        // Helpers\n        //--------------------------------------------------------------------------\n\n        /**\n         * Check if the parameters are been shadowed\n         * @param {Object} scope current scope\n         * @param {string} name parameter name\n         * @returns {boolean} True is its been shadowed\n         */\n        function paramIsShadowing(scope, name) {\n            return astUtils.getVariableByName(scope, name) !== null;\n        }\n\n        //--------------------------------------------------------------------------\n        // Public API\n        //--------------------------------------------------------------------------\n\n        return {\n\n            \"CatchClause[param!=null]\"(node) {\n                let scope = context.getScope();\n\n                /*\n                 * When ecmaVersion >= 6, CatchClause creates its own scope\n                 * so start from one upper scope to exclude the current node\n                 */\n                if (scope.block === node) {\n                    scope = scope.upper;\n                }\n\n                if (paramIsShadowing(scope, node.param.name)) {\n                    context.report({ node, messageId: \"mutable\", data: { name: node.param.name } });\n                }\n            }\n        };\n\n    }\n};\n/lib/rules/dot-location.js\rb/**\n * @fileoverview Validates newlines before and after dots\n * @author Greg Cochard\n */\n\n\"use strict\";\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"layout\",\n\n        docs: {\n            description: \"enforce consistent newlines before and after dots\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/dot-location\"\n        },\n\n        schema: [\n            {\n                enum: [\"object\", \"property\"]\n            }\n        ],\n\n        fixable: \"code\",\n\n        messages: {\n            expectedDotAfterObject: \"Expected dot to be on same line as object.\",\n            expectedDotBeforeProperty: \"Expected dot to be on same line as property.\"\n        }\n    },\n\n    create(context) {\n\n        const config = context.options[0];\n\n        // default to onObject if no preference is passed\n        const onObject = config === \"object\" || !config;\n\n        const sourceCode = context.getSourceCode();\n\n        /**\n         * Reports if the dot between object and property is on the correct location.\n         * @param {ASTNode} node The `MemberExpression` node.\n         * @returns {void}\n         */\n        function checkDotLocation(node) {\n            const property = node.property;\n            const dotToken = sourceCode.getTokenBefore(property);\n\n            if (onObject) {\n\n                // `obj` expression can be parenthesized, but those paren tokens are not a part of the `obj` node.\n                const tokenBeforeDot = sourceCode.getTokenBefore(dotToken);\n\n                if (!astUtils.isTokenOnSameLine(tokenBeforeDot, dotToken)) {\n                    context.report({\n                        node,\n                        loc: dotToken.loc,\n                        messageId: \"expectedDotAfterObject\",\n                        *fix(fixer) {\n                            if (dotToken.value.startsWith(\".\") && astUtils.isDecimalIntegerNumericToken(tokenBeforeDot)) {\n                                yield fixer.insertTextAfter(tokenBeforeDot, ` ${dotToken.value}`);\n                            } else {\n                                yield fixer.insertTextAfter(tokenBeforeDot, dotToken.value);\n                            }\n                            yield fixer.remove(dotToken);\n                        }\n                    });\n                }\n            } else if (!astUtils.isTokenOnSameLine(dotToken, property)) {\n                context.report({\n                    node,\n                    loc: dotToken.loc,\n                    messageId: \"expectedDotBeforeProperty\",\n                    *fix(fixer) {\n                        yield fixer.remove(dotToken);\n                        yield fixer.insertTextBefore(property, dotToken.value);\n                    }\n                });\n            }\n        }\n\n        /**\n         * Checks the spacing of the dot within a member expression.\n         * @param {ASTNode} node The node to check.\n         * @returns {void}\n         */\n        function checkNode(node) {\n            if (!node.computed) {\n                checkDotLocation(node);\n            }\n        }\n\n        return {\n            MemberExpression: checkNode\n        };\n    }\n};\n/lib/rules/new-cap.js%\"/**\n * @fileoverview Rule to flag use of constructors without capital letters\n * @author Nicholas C. Zakas\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\nconst CAPS_ALLOWED = [\n    \"Array\",\n    \"Boolean\",\n    \"Date\",\n    \"Error\",\n    \"Function\",\n    \"Number\",\n    \"Object\",\n    \"RegExp\",\n    \"String\",\n    \"Symbol\",\n    \"BigInt\"\n];\n\n/**\n * Ensure that if the key is provided, it must be an array.\n * @param {Object} obj Object to check with `key`.\n * @param {string} key Object key to check on `obj`.\n * @param {any} fallback If obj[key] is not present, this will be returned.\n * @throws {TypeError} If key is not an own array type property of `obj`.\n * @returns {string[]} Returns obj[key] if it's an Array, otherwise `fallback`\n */\nfunction checkArray(obj, key, fallback) {\n\n    /* istanbul ignore if */\n    if (Object.prototype.hasOwnProperty.call(obj, key) && !Array.isArray(obj[key])) {\n        throw new TypeError(`${key}, if provided, must be an Array`);\n    }\n    return obj[key] || fallback;\n}\n\n/**\n * A reducer function to invert an array to an Object mapping the string form of the key, to `true`.\n * @param {Object} map Accumulator object for the reduce.\n * @param {string} key Object key to set to `true`.\n * @returns {Object} Returns the updated Object for further reduction.\n */\nfunction invert(map, key) {\n    map[key] = true;\n    return map;\n}\n\n/**\n * Creates an object with the cap is new exceptions as its keys and true as their values.\n * @param {Object} config Rule configuration\n * @returns {Object} Object with cap is new exceptions.\n */\nfunction calculateCapIsNewExceptions(config) {\n    let capIsNewExceptions = checkArray(config, \"capIsNewExceptions\", CAPS_ALLOWED);\n\n    if (capIsNewExceptions !== CAPS_ALLOWED) {\n        capIsNewExceptions = capIsNewExceptions.concat(CAPS_ALLOWED);\n    }\n\n    return capIsNewExceptions.reduce(invert, {});\n}\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"require constructor names to begin with a capital letter\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/new-cap\"\n        },\n\n        schema: [\n            {\n                type: \"object\",\n                properties: {\n                    newIsCap: {\n                        type: \"boolean\",\n                        default: true\n                    },\n                    capIsNew: {\n                        type: \"boolean\",\n                        default: true\n                    },\n                    newIsCapExceptions: {\n                        type: \"array\",\n                        items: {\n                            type: \"string\"\n                        }\n                    },\n                    newIsCapExceptionPattern: {\n                        type: \"string\"\n                    },\n                    capIsNewExceptions: {\n                        type: \"array\",\n                        items: {\n                            type: \"string\"\n                        }\n                    },\n                    capIsNewExceptionPattern: {\n                        type: \"string\"\n                    },\n                    properties: {\n                        type: \"boolean\",\n                        default: true\n                    }\n                },\n                additionalProperties: false\n            }\n        ],\n        messages: {\n            upper: \"A function with a name starting with an uppercase letter should only be used as a constructor.\",\n            lower: \"A constructor name should not start with a lowercase letter.\"\n        }\n    },\n\n    create(context) {\n\n        const config = Object.assign({}, context.options[0]);\n\n        config.newIsCap = config.newIsCap !== false;\n        config.capIsNew = config.capIsNew !== false;\n        const skipProperties = config.properties === false;\n\n        const newIsCapExceptions = checkArray(config, \"newIsCapExceptions\", []).reduce(invert, {});\n        const newIsCapExceptionPattern = config.newIsCapExceptionPattern ? new RegExp(config.newIsCapExceptionPattern, \"u\") : null;\n\n        const capIsNewExceptions = calculateCapIsNewExceptions(config);\n        const capIsNewExceptionPattern = config.capIsNewExceptionPattern ? new RegExp(config.capIsNewExceptionPattern, \"u\") : null;\n\n        const listeners = {};\n\n        const sourceCode = context.getSourceCode();\n\n        //--------------------------------------------------------------------------\n        // Helpers\n        //--------------------------------------------------------------------------\n\n        /**\n         * Get exact callee name from expression\n         * @param {ASTNode} node CallExpression or NewExpression node\n         * @returns {string} name\n         */\n        function extractNameFromExpression(node) {\n            return node.callee.type === \"Identifier\"\n                ? node.callee.name\n                : astUtils.getStaticPropertyName(node.callee) || \"\";\n        }\n\n        /**\n         * Returns the capitalization state of the string -\n         * Whether the first character is uppercase, lowercase, or non-alphabetic\n         * @param {string} str String\n         * @returns {string} capitalization state: \"non-alpha\", \"lower\", or \"upper\"\n         */\n        function getCap(str) {\n            const firstChar = str.charAt(0);\n\n            const firstCharLower = firstChar.toLowerCase();\n            const firstCharUpper = firstChar.toUpperCase();\n\n            if (firstCharLower === firstCharUpper) {\n\n                // char has no uppercase variant, so it's non-alphabetic\n                return \"non-alpha\";\n            }\n            if (firstChar === firstCharLower) {\n                return \"lower\";\n            }\n            return \"upper\";\n\n        }\n\n        /**\n         * Check if capitalization is allowed for a CallExpression\n         * @param {Object} allowedMap Object mapping calleeName to a Boolean\n         * @param {ASTNode} node CallExpression node\n         * @param {string} calleeName Capitalized callee name from a CallExpression\n         * @param {Object} pattern RegExp object from options pattern\n         * @returns {boolean} Returns true if the callee may be capitalized\n         */\n        function isCapAllowed(allowedMap, node, calleeName, pattern) {\n            const sourceText = sourceCode.getText(node.callee);\n\n            if (allowedMap[calleeName] || allowedMap[sourceText]) {\n                return true;\n            }\n\n            if (pattern && pattern.test(sourceText)) {\n                return true;\n            }\n\n            const callee = astUtils.skipChainExpression(node.callee);\n\n            if (calleeName === \"UTC\" && callee.type === \"MemberExpression\") {\n\n                // allow if callee is Date.UTC\n                return callee.object.type === \"Identifier\" &&\n                    callee.object.name === \"Date\";\n            }\n\n            return skipProperties && callee.type === \"MemberExpression\";\n        }\n\n        /**\n         * Reports the given messageId for the given node. The location will be the start of the property or the callee.\n         * @param {ASTNode} node CallExpression or NewExpression node.\n         * @param {string} messageId The messageId to report.\n         * @returns {void}\n         */\n        function report(node, messageId) {\n            let callee = astUtils.skipChainExpression(node.callee);\n\n            if (callee.type === \"MemberExpression\") {\n                callee = callee.property;\n            }\n\n            context.report({ node, loc: callee.loc, messageId });\n        }\n\n        //--------------------------------------------------------------------------\n        // Public\n        //--------------------------------------------------------------------------\n\n        if (config.newIsCap) {\n            listeners.NewExpression = function(node) {\n\n                const constructorName = extractNameFromExpression(node);\n\n                if (constructorName) {\n                    const capitalization = getCap(constructorName);\n                    const isAllowed = capitalization !== \"lower\" || isCapAllowed(newIsCapExceptions, node, constructorName, newIsCapExceptionPattern);\n\n                    if (!isAllowed) {\n                        report(node, \"lower\");\n                    }\n                }\n            };\n        }\n\n        if (config.capIsNew) {\n            listeners.CallExpression = function(node) {\n\n                const calleeName = extractNameFromExpression(node);\n\n                if (calleeName) {\n                    const capitalization = getCap(calleeName);\n                    const isAllowed = capitalization !== \"upper\" || isCapAllowed(capIsNewExceptions, node, calleeName, capIsNewExceptionPattern);\n\n                    if (!isAllowed) {\n                        report(node, \"upper\");\n                    }\n                }\n            };\n        }\n\n        return listeners;\n    }\n};\n/lib/rules/utils/ast-utils.js\u0000\u0001\u0006/**\n * @fileoverview Common utils for AST.\n * @author Gyandeep Singh\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst esutils = require(\"esutils\");\nconst espree = require(\"espree\");\nconst escapeRegExp = require(\"escape-string-regexp\");\nconst {\n    breakableTypePattern,\n    createGlobalLinebreakMatcher,\n    lineBreakPattern,\n    shebangPattern\n} = require(\"../../shared/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\nconst anyFunctionPattern = /^(?:Function(?:Declaration|Expression)|ArrowFunctionExpression)$/u;\nconst anyLoopPattern = /^(?:DoWhile|For|ForIn|ForOf|While)Statement$/u;\nconst arrayOrTypedArrayPattern = /Array$/u;\nconst arrayMethodPattern = /^(?:every|filter|find|findIndex|forEach|map|some)$/u;\nconst bindOrCallOrApplyPattern = /^(?:bind|call|apply)$/u;\nconst thisTagPattern = /^[\\s*]*@this/mu;\n\n\nconst COMMENTS_IGNORE_PATTERN = /^\\s*(?:eslint|jshint\\s+|jslint\\s+|istanbul\\s+|globals?\\s+|exported\\s+|jscs)/u;\nconst LINEBREAKS = new Set([\"\\r\\n\", \"\\r\", \"\\n\", \"\\u2028\", \"\\u2029\"]);\n\n// A set of node types that can contain a list of statements\nconst STATEMENT_LIST_PARENTS = new Set([\"Program\", \"BlockStatement\", \"StaticBlock\", \"SwitchCase\"]);\n\nconst DECIMAL_INTEGER_PATTERN = /^(?:0|0[0-7]*[89]\\d*|[1-9](?:_?\\d)*)$/u;\n\n// Tests the presence of at least one LegacyOctalEscapeSequence or NonOctalDecimalEscapeSequence in a raw string\nconst OCTAL_OR_NON_OCTAL_DECIMAL_ESCAPE_PATTERN = /^(?:[^\\\\]|\\\\.)*\\\\(?:[1-9]|0[0-9])/su;\n\nconst LOGICAL_ASSIGNMENT_OPERATORS = new Set([\"&&=\", \"||=\", \"??=\"]);\n\n/**\n * Checks reference if is non initializer and writable.\n * @param {Reference} reference A reference to check.\n * @param {int} index The index of the reference in the references.\n * @param {Reference[]} references The array that the reference belongs to.\n * @returns {boolean} Success/Failure\n * @private\n */\nfunction isModifyingReference(reference, index, references) {\n    const identifier = reference.identifier;\n\n    /*\n     * Destructuring assignments can have multiple default value, so\n     * possibly there are multiple writeable references for the same\n     * identifier.\n     */\n    const modifyingDifferentIdentifier = index === 0 ||\n        references[index - 1].identifier !== identifier;\n\n    return (identifier &&\n        reference.init === false &&\n        reference.isWrite() &&\n        modifyingDifferentIdentifier\n    );\n}\n\n/**\n * Checks whether the given string starts with uppercase or not.\n * @param {string} s The string to check.\n * @returns {boolean} `true` if the string starts with uppercase.\n */\nfunction startsWithUpperCase(s) {\n    return s[0] !== s[0].toLocaleLowerCase();\n}\n\n/**\n * Checks whether or not a node is a constructor.\n * @param {ASTNode} node A function node to check.\n * @returns {boolean} Whether or not a node is a constructor.\n */\nfunction isES5Constructor(node) {\n    return (node.id && startsWithUpperCase(node.id.name));\n}\n\n/**\n * Finds a function node from ancestors of a node.\n * @param {ASTNode} node A start node to find.\n * @returns {Node|null} A found function node.\n */\nfunction getUpperFunction(node) {\n    for (let currentNode = node; currentNode; currentNode = currentNode.parent) {\n        if (anyFunctionPattern.test(currentNode.type)) {\n            return currentNode;\n        }\n    }\n    return null;\n}\n\n/**\n * Checks whether a given node is a function node or not.\n * The following types are function nodes:\n *\n * - ArrowFunctionExpression\n * - FunctionDeclaration\n * - FunctionExpression\n * @param {ASTNode|null} node A node to check.\n * @returns {boolean} `true` if the node is a function node.\n */\nfunction isFunction(node) {\n    return Boolean(node && anyFunctionPattern.test(node.type));\n}\n\n/**\n * Checks whether a given node is a loop node or not.\n * The following types are loop nodes:\n *\n * - DoWhileStatement\n * - ForInStatement\n * - ForOfStatement\n * - ForStatement\n * - WhileStatement\n * @param {ASTNode|null} node A node to check.\n * @returns {boolean} `true` if the node is a loop node.\n */\nfunction isLoop(node) {\n    return Boolean(node && anyLoopPattern.test(node.type));\n}\n\n/**\n * Checks whether the given node is in a loop or not.\n * @param {ASTNode} node The node to check.\n * @returns {boolean} `true` if the node is in a loop.\n */\nfunction isInLoop(node) {\n    for (let currentNode = node; currentNode && !isFunction(currentNode); currentNode = currentNode.parent) {\n        if (isLoop(currentNode)) {\n            return true;\n        }\n    }\n\n    return false;\n}\n\n/**\n * Determines whether the given node is a `null` literal.\n * @param {ASTNode} node The node to check\n * @returns {boolean} `true` if the node is a `null` literal\n */\nfunction isNullLiteral(node) {\n\n    /*\n     * Checking `node.value === null` does not guarantee that a literal is a null literal.\n     * When parsing values that cannot be represented in the current environment (e.g. unicode\n     * regexes in Node 4), `node.value` is set to `null` because it wouldn't be possible to\n     * set `node.value` to a unicode regex. To make sure a literal is actually `null`, check\n     * `node.regex` instead. Also see: https://github.com/eslint/eslint/issues/8020\n     */\n    return node.type === \"Literal\" && node.value === null && !node.regex && !node.bigint;\n}\n\n/**\n * Checks whether or not a node is `null` or `undefined`.\n * @param {ASTNode} node A node to check.\n * @returns {boolean} Whether or not the node is a `null` or `undefined`.\n * @public\n */\nfunction isNullOrUndefined(node) {\n    return (\n        isNullLiteral(node) ||\n        (node.type === \"Identifier\" && node.name === \"undefined\") ||\n        (node.type === \"UnaryExpression\" && node.operator === \"void\")\n    );\n}\n\n/**\n * Checks whether or not a node is callee.\n * @param {ASTNode} node A node to check.\n * @returns {boolean} Whether or not the node is callee.\n */\nfunction isCallee(node) {\n    return node.parent.type === \"CallExpression\" && node.parent.callee === node;\n}\n\n/**\n * Returns the result of the string conversion applied to the evaluated value of the given expression node,\n * if it can be determined statically.\n *\n * This function returns a `string` value for all `Literal` nodes and simple `TemplateLiteral` nodes only.\n * In all other cases, this function returns `null`.\n * @param {ASTNode} node Expression node.\n * @returns {string|null} String value if it can be determined. Otherwise, `null`.\n */\nfunction getStaticStringValue(node) {\n    switch (node.type) {\n        case \"Literal\":\n            if (node.value === null) {\n                if (isNullLiteral(node)) {\n                    return String(node.value); // \"null\"\n                }\n                if (node.regex) {\n                    return `/${node.regex.pattern}/${node.regex.flags}`;\n                }\n                if (node.bigint) {\n                    return node.bigint;\n                }\n\n                // Otherwise, this is an unknown literal. The function will return null.\n\n            } else {\n                return String(node.value);\n            }\n            break;\n        case \"TemplateLiteral\":\n            if (node.expressions.length === 0 && node.quasis.length === 1) {\n                return node.quasis[0].value.cooked;\n            }\n            break;\n\n            // no default\n    }\n\n    return null;\n}\n\n/**\n * Gets the property name of a given node.\n * The node can be a MemberExpression, a Property, or a MethodDefinition.\n *\n * If the name is dynamic, this returns `null`.\n *\n * For examples:\n *\n *     a.b           // => \"b\"\n *     a[\"b\"]        // => \"b\"\n *     a['b']        // => \"b\"\n *     a[`b`]        // => \"b\"\n *     a[100]        // => \"100\"\n *     a[b]          // => null\n *     a[\"a\" + \"b\"]  // => null\n *     a[tag`b`]     // => null\n *     a[`${b}`]     // => null\n *\n *     let a = {b: 1}            // => \"b\"\n *     let a = {[\"b\"]: 1}        // => \"b\"\n *     let a = {['b']: 1}        // => \"b\"\n *     let a = {[`b`]: 1}        // => \"b\"\n *     let a = {[100]: 1}        // => \"100\"\n *     let a = {[b]: 1}          // => null\n *     let a = {[\"a\" + \"b\"]: 1}  // => null\n *     let a = {[tag`b`]: 1}     // => null\n *     let a = {[`${b}`]: 1}     // => null\n * @param {ASTNode} node The node to get.\n * @returns {string|null} The property name if static. Otherwise, null.\n */\nfunction getStaticPropertyName(node) {\n    let prop;\n\n    switch (node && node.type) {\n        case \"ChainExpression\":\n            return getStaticPropertyName(node.expression);\n\n        case \"Property\":\n        case \"PropertyDefinition\":\n        case \"MethodDefinition\":\n            prop = node.key;\n            break;\n\n        case \"MemberExpression\":\n            prop = node.property;\n            break;\n\n            // no default\n    }\n\n    if (prop) {\n        if (prop.type === \"Identifier\" && !node.computed) {\n            return prop.name;\n        }\n\n        return getStaticStringValue(prop);\n    }\n\n    return null;\n}\n\n/**\n * Retrieve `ChainExpression#expression` value if the given node a `ChainExpression` node. Otherwise, pass through it.\n * @param {ASTNode} node The node to address.\n * @returns {ASTNode} The `ChainExpression#expression` value if the node is a `ChainExpression` node. Otherwise, the node.\n */\nfunction skipChainExpression(node) {\n    return node && node.type === \"ChainExpression\" ? node.expression : node;\n}\n\n/**\n * Check if the `actual` is an expected value.\n * @param {string} actual The string value to check.\n * @param {string | RegExp} expected The expected string value or pattern.\n * @returns {boolean} `true` if the `actual` is an expected value.\n */\nfunction checkText(actual, expected) {\n    return typeof expected === \"string\"\n        ? actual === expected\n        : expected.test(actual);\n}\n\n/**\n * Check if a given node is an Identifier node with a given name.\n * @param {ASTNode} node The node to check.\n * @param {string | RegExp} name The expected name or the expected pattern of the object name.\n * @returns {boolean} `true` if the node is an Identifier node with the name.\n */\nfunction isSpecificId(node, name) {\n    return node.type === \"Identifier\" && checkText(node.name, name);\n}\n\n/**\n * Check if a given node is member access with a given object name and property name pair.\n * This is regardless of optional or not.\n * @param {ASTNode} node The node to check.\n * @param {string | RegExp | null} objectName The expected name or the expected pattern of the object name. If this is nullish, this method doesn't check object.\n * @param {string | RegExp | null} propertyName The expected name or the expected pattern of the property name. If this is nullish, this method doesn't check property.\n * @returns {boolean} `true` if the node is member access with the object name and property name pair.\n * The node is a `MemberExpression` or `ChainExpression`.\n */\nfunction isSpecificMemberAccess(node, objectName, propertyName) {\n    const checkNode = skipChainExpression(node);\n\n    if (checkNode.type !== \"MemberExpression\") {\n        return false;\n    }\n\n    if (objectName && !isSpecificId(checkNode.object, objectName)) {\n        return false;\n    }\n\n    if (propertyName) {\n        const actualPropertyName = getStaticPropertyName(checkNode);\n\n        if (typeof actualPropertyName !== \"string\" || !checkText(actualPropertyName, propertyName)) {\n            return false;\n        }\n    }\n\n    return true;\n}\n\n/**\n * Check if two literal nodes are the same value.\n * @param {ASTNode} left The Literal node to compare.\n * @param {ASTNode} right The other Literal node to compare.\n * @returns {boolean} `true` if the two literal nodes are the same value.\n */\nfunction equalLiteralValue(left, right) {\n\n    // RegExp literal.\n    if (left.regex || right.regex) {\n        return Boolean(\n            left.regex &&\n            right.regex &&\n            left.regex.pattern === right.regex.pattern &&\n            left.regex.flags === right.regex.flags\n        );\n    }\n\n    // BigInt literal.\n    if (left.bigint || right.bigint) {\n        return left.bigint === right.bigint;\n    }\n\n    return left.value === right.value;\n}\n\n/**\n * Check if two expressions reference the same value. For example:\n *     a = a\n *     a.b = a.b\n *     a[0] = a[0]\n *     a['b'] = a['b']\n * @param {ASTNode} left The left side of the comparison.\n * @param {ASTNode} right The right side of the comparison.\n * @param {boolean} [disableStaticComputedKey] Don't address `a.b` and `a[\"b\"]` are the same if `true`. For backward compatibility.\n * @returns {boolean} `true` if both sides match and reference the same value.\n */\nfunction isSameReference(left, right, disableStaticComputedKey = false) {\n    if (left.type !== right.type) {\n\n        // Handle `a.b` and `a?.b` are samely.\n        if (left.type === \"ChainExpression\") {\n            return isSameReference(left.expression, right, disableStaticComputedKey);\n        }\n        if (right.type === \"ChainExpression\") {\n            return isSameReference(left, right.expression, disableStaticComputedKey);\n        }\n\n        return false;\n    }\n\n    switch (left.type) {\n        case \"Super\":\n        case \"ThisExpression\":\n            return true;\n\n        case \"Identifier\":\n        case \"PrivateIdentifier\":\n            return left.name === right.name;\n        case \"Literal\":\n            return equalLiteralValue(left, right);\n\n        case \"ChainExpression\":\n            return isSameReference(left.expression, right.expression, disableStaticComputedKey);\n\n        case \"MemberExpression\": {\n            if (!disableStaticComputedKey) {\n                const nameA = getStaticPropertyName(left);\n\n                // x.y = x[\"y\"]\n                if (nameA !== null) {\n                    return (\n                        isSameReference(left.object, right.object, disableStaticComputedKey) &&\n                        nameA === getStaticPropertyName(right)\n                    );\n                }\n            }\n\n            /*\n             * x[0] = x[0]\n             * x[y] = x[y]\n             * x.y = x.y\n             */\n            return (\n                left.computed === right.computed &&\n                isSameReference(left.object, right.object, disableStaticComputedKey) &&\n                isSameReference(left.property, right.property, disableStaticComputedKey)\n            );\n        }\n\n        default:\n            return false;\n    }\n}\n\n/**\n * Checks whether or not a node is `Reflect.apply`.\n * @param {ASTNode} node A node to check.\n * @returns {boolean} Whether or not the node is a `Reflect.apply`.\n */\nfunction isReflectApply(node) {\n    return isSpecificMemberAccess(node, \"Reflect\", \"apply\");\n}\n\n/**\n * Checks whether or not a node is `Array.from`.\n * @param {ASTNode} node A node to check.\n * @returns {boolean} Whether or not the node is a `Array.from`.\n */\nfunction isArrayFromMethod(node) {\n    return isSpecificMemberAccess(node, arrayOrTypedArrayPattern, \"from\");\n}\n\n/**\n * Checks whether or not a node is a method which has `thisArg`.\n * @param {ASTNode} node A node to check.\n * @returns {boolean} Whether or not the node is a method which has `thisArg`.\n */\nfunction isMethodWhichHasThisArg(node) {\n    return isSpecificMemberAccess(node, null, arrayMethodPattern);\n}\n\n/**\n * Creates the negate function of the given function.\n * @param {Function} f The function to negate.\n * @returns {Function} Negated function.\n */\nfunction negate(f) {\n    return token => !f(token);\n}\n\n/**\n * Checks whether or not a node has a `@this` tag in its comments.\n * @param {ASTNode} node A node to check.\n * @param {SourceCode} sourceCode A SourceCode instance to get comments.\n * @returns {boolean} Whether or not the node has a `@this` tag in its comments.\n */\nfunction hasJSDocThisTag(node, sourceCode) {\n    const jsdocComment = sourceCode.getJSDocComment(node);\n\n    if (jsdocComment && thisTagPattern.test(jsdocComment.value)) {\n        return true;\n    }\n\n    // Checks `@this` in its leading comments for callbacks,\n    // because callbacks don't have its JSDoc comment.\n    // e.g.\n    //     sinon.test(/* @this sinon.Sandbox */function() { this.spy(); });\n    return sourceCode.getCommentsBefore(node).some(comment => thisTagPattern.test(comment.value));\n}\n\n/**\n * Determines if a node is surrounded by parentheses.\n * @param {SourceCode} sourceCode The ESLint source code object\n * @param {ASTNode} node The node to be checked.\n * @returns {boolean} True if the node is parenthesised.\n * @private\n */\nfunction isParenthesised(sourceCode, node) {\n    const previousToken = sourceCode.getTokenBefore(node),\n        nextToken = sourceCode.getTokenAfter(node);\n\n    return Boolean(previousToken && nextToken) &&\n        previousToken.value === \"(\" && previousToken.range[1] <= node.range[0] &&\n        nextToken.value === \")\" && nextToken.range[0] >= node.range[1];\n}\n\n/**\n * Checks if the given token is a `=` token or not.\n * @param {Token} token The token to check.\n * @returns {boolean} `true` if the token is a `=` token.\n */\nfunction isEqToken(token) {\n    return token.value === \"=\" && token.type === \"Punctuator\";\n}\n\n/**\n * Checks if the given token is an arrow token or not.\n * @param {Token} token The token to check.\n * @returns {boolean} `true` if the token is an arrow token.\n */\nfunction isArrowToken(token) {\n    return token.value === \"=>\" && token.type === \"Punctuator\";\n}\n\n/**\n * Checks if the given token is a comma token or not.\n * @param {Token} token The token to check.\n * @returns {boolean} `true` if the token is a comma token.\n */\nfunction isCommaToken(token) {\n    return token.value === \",\" && token.type === \"Punctuator\";\n}\n\n/**\n * Checks if the given token is a dot token or not.\n * @param {Token} token The token to check.\n * @returns {boolean} `true` if the token is a dot token.\n */\nfunction isDotToken(token) {\n    return token.value === \".\" && token.type === \"Punctuator\";\n}\n\n/**\n * Checks if the given token is a `?.` token or not.\n * @param {Token} token The token to check.\n * @returns {boolean} `true` if the token is a `?.` token.\n */\nfunction isQuestionDotToken(token) {\n    return token.value === \"?.\" && token.type === \"Punctuator\";\n}\n\n/**\n * Checks if the given token is a semicolon token or not.\n * @param {Token} token The token to check.\n * @returns {boolean} `true` if the token is a semicolon token.\n */\nfunction isSemicolonToken(token) {\n    return token.value === \";\" && token.type === \"Punctuator\";\n}\n\n/**\n * Checks if the given token is a colon token or not.\n * @param {Token} token The token to check.\n * @returns {boolean} `true` if the token is a colon token.\n */\nfunction isColonToken(token) {\n    return token.value === \":\" && token.type === \"Punctuator\";\n}\n\n/**\n * Checks if the given token is an opening parenthesis token or not.\n * @param {Token} token The token to check.\n * @returns {boolean} `true` if the token is an opening parenthesis token.\n */\nfunction isOpeningParenToken(token) {\n    return token.value === \"(\" && token.type === \"Punctuator\";\n}\n\n/**\n * Checks if the given token is a closing parenthesis token or not.\n * @param {Token} token The token to check.\n * @returns {boolean} `true` if the token is a closing parenthesis token.\n */\nfunction isClosingParenToken(token) {\n    return token.value === \")\" && token.type === \"Punctuator\";\n}\n\n/**\n * Checks if the given token is an opening square bracket token or not.\n * @param {Token} token The token to check.\n * @returns {boolean} `true` if the token is an opening square bracket token.\n */\nfunction isOpeningBracketToken(token) {\n    return token.value === \"[\" && token.type === \"Punctuator\";\n}\n\n/**\n * Checks if the given token is a closing square bracket token or not.\n * @param {Token} token The token to check.\n * @returns {boolean} `true` if the token is a closing square bracket token.\n */\nfunction isClosingBracketToken(token) {\n    return token.value === \"]\" && token.type === \"Punctuator\";\n}\n\n/**\n * Checks if the given token is an opening brace token or not.\n * @param {Token} token The token to check.\n * @returns {boolean} `true` if the token is an opening brace token.\n */\nfunction isOpeningBraceToken(token) {\n    return token.value === \"{\" && token.type === \"Punctuator\";\n}\n\n/**\n * Checks if the given token is a closing brace token or not.\n * @param {Token} token The token to check.\n * @returns {boolean} `true` if the token is a closing brace token.\n */\nfunction isClosingBraceToken(token) {\n    return token.value === \"}\" && token.type === \"Punctuator\";\n}\n\n/**\n * Checks if the given token is a comment token or not.\n * @param {Token} token The token to check.\n * @returns {boolean} `true` if the token is a comment token.\n */\nfunction isCommentToken(token) {\n    return token.type === \"Line\" || token.type === \"Block\" || token.type === \"Shebang\";\n}\n\n/**\n * Checks if the given token is a keyword token or not.\n * @param {Token} token The token to check.\n * @returns {boolean} `true` if the token is a keyword token.\n */\nfunction isKeywordToken(token) {\n    return token.type === \"Keyword\";\n}\n\n/**\n * Gets the `(` token of the given function node.\n * @param {ASTNode} node The function node to get.\n * @param {SourceCode} sourceCode The source code object to get tokens.\n * @returns {Token} `(` token.\n */\nfunction getOpeningParenOfParams(node, sourceCode) {\n\n    // If the node is an arrow function and doesn't have parens, this returns the identifier of the first param.\n    if (node.type === \"ArrowFunctionExpression\" && node.params.length === 1) {\n        const argToken = sourceCode.getFirstToken(node.params[0]);\n        const maybeParenToken = sourceCode.getTokenBefore(argToken);\n\n        return isOpeningParenToken(maybeParenToken) ? maybeParenToken : argToken;\n    }\n\n    // Otherwise, returns paren.\n    return node.id\n        ? sourceCode.getTokenAfter(node.id, isOpeningParenToken)\n        : sourceCode.getFirstToken(node, isOpeningParenToken);\n}\n\n/**\n * Checks whether or not the tokens of two given nodes are same.\n * @param {ASTNode} left A node 1 to compare.\n * @param {ASTNode} right A node 2 to compare.\n * @param {SourceCode} sourceCode The ESLint source code object.\n * @returns {boolean} the source code for the given node.\n */\nfunction equalTokens(left, right, sourceCode) {\n    const tokensL = sourceCode.getTokens(left);\n    const tokensR = sourceCode.getTokens(right);\n\n    if (tokensL.length !== tokensR.length) {\n        return false;\n    }\n    for (let i = 0; i < tokensL.length; ++i) {\n        if (tokensL[i].type !== tokensR[i].type ||\n            tokensL[i].value !== tokensR[i].value\n        ) {\n            return false;\n        }\n    }\n\n    return true;\n}\n\n/**\n * Check if the given node is a true logical expression or not.\n *\n * The three binary expressions logical-or (`||`), logical-and (`&&`), and\n * coalesce (`??`) are known as `ShortCircuitExpression`.\n * But ESTree represents those by `LogicalExpression` node.\n *\n * This function rejects coalesce expressions of `LogicalExpression` node.\n * @param {ASTNode} node The node to check.\n * @returns {boolean} `true` if the node is `&&` or `||`.\n * @see https://tc39.es/ecma262/#prod-ShortCircuitExpression\n */\nfunction isLogicalExpression(node) {\n    return (\n        node.type === \"LogicalExpression\" &&\n            (node.operator === \"&&\" || node.operator === \"||\")\n    );\n}\n\n/**\n * Check if the given node is a nullish coalescing expression or not.\n *\n * The three binary expressions logical-or (`||`), logical-and (`&&`), and\n * coalesce (`??`) are known as `ShortCircuitExpression`.\n * But ESTree represents those by `LogicalExpression` node.\n *\n * This function finds only coalesce expressions of `LogicalExpression` node.\n * @param {ASTNode} node The node to check.\n * @returns {boolean} `true` if the node is `??`.\n */\nfunction isCoalesceExpression(node) {\n    return node.type === \"LogicalExpression\" && node.operator === \"??\";\n}\n\n/**\n * Check if given two nodes are the pair of a logical expression and a coalesce expression.\n * @param {ASTNode} left A node to check.\n * @param {ASTNode} right Another node to check.\n * @returns {boolean} `true` if the two nodes are the pair of a logical expression and a coalesce expression.\n */\nfunction isMixedLogicalAndCoalesceExpressions(left, right) {\n    return (\n        (isLogicalExpression(left) && isCoalesceExpression(right)) ||\n            (isCoalesceExpression(left) && isLogicalExpression(right))\n    );\n}\n\n/**\n * Checks if the given operator is a logical assignment operator.\n * @param {string} operator The operator to check.\n * @returns {boolean} `true` if the operator is a logical assignment operator.\n */\nfunction isLogicalAssignmentOperator(operator) {\n    return LOGICAL_ASSIGNMENT_OPERATORS.has(operator);\n}\n\n/**\n * Get the colon token of the given SwitchCase node.\n * @param {ASTNode} node The SwitchCase node to get.\n * @param {SourceCode} sourceCode The source code object to get tokens.\n * @returns {Token} The colon token of the node.\n */\nfunction getSwitchCaseColonToken(node, sourceCode) {\n    if (node.test) {\n        return sourceCode.getTokenAfter(node.test, isColonToken);\n    }\n    return sourceCode.getFirstToken(node, 1);\n}\n\n/**\n * Gets ESM module export name represented by the given node.\n * @param {ASTNode} node `Identifier` or string `Literal` node in a position\n * that represents a module export name:\n *   - `ImportSpecifier#imported`\n *   - `ExportSpecifier#local` (if it is a re-export from another module)\n *   - `ExportSpecifier#exported`\n *   - `ExportAllDeclaration#exported`\n * @returns {string} The module export name.\n */\nfunction getModuleExportName(node) {\n    if (node.type === \"Identifier\") {\n        return node.name;\n    }\n\n    // string literal\n    return node.value;\n}\n\n//------------------------------------------------------------------------------\n// Public Interface\n//------------------------------------------------------------------------------\n\nmodule.exports = {\n    COMMENTS_IGNORE_PATTERN,\n    LINEBREAKS,\n    LINEBREAK_MATCHER: lineBreakPattern,\n    SHEBANG_MATCHER: shebangPattern,\n    STATEMENT_LIST_PARENTS,\n\n    /**\n     * Determines whether two adjacent tokens are on the same line.\n     * @param {Object} left The left token object.\n     * @param {Object} right The right token object.\n     * @returns {boolean} Whether or not the tokens are on the same line.\n     * @public\n     */\n    isTokenOnSameLine(left, right) {\n        return left.loc.end.line === right.loc.start.line;\n    },\n\n    isNullOrUndefined,\n    isCallee,\n    isES5Constructor,\n    getUpperFunction,\n    isFunction,\n    isLoop,\n    isInLoop,\n    isArrayFromMethod,\n    isParenthesised,\n    createGlobalLinebreakMatcher,\n    equalTokens,\n\n    isArrowToken,\n    isClosingBraceToken,\n    isClosingBracketToken,\n    isClosingParenToken,\n    isColonToken,\n    isCommaToken,\n    isCommentToken,\n    isDotToken,\n    isQuestionDotToken,\n    isKeywordToken,\n    isNotClosingBraceToken: negate(isClosingBraceToken),\n    isNotClosingBracketToken: negate(isClosingBracketToken),\n    isNotClosingParenToken: negate(isClosingParenToken),\n    isNotColonToken: negate(isColonToken),\n    isNotCommaToken: negate(isCommaToken),\n    isNotDotToken: negate(isDotToken),\n    isNotQuestionDotToken: negate(isQuestionDotToken),\n    isNotOpeningBraceToken: negate(isOpeningBraceToken),\n    isNotOpeningBracketToken: negate(isOpeningBracketToken),\n    isNotOpeningParenToken: negate(isOpeningParenToken),\n    isNotSemicolonToken: negate(isSemicolonToken),\n    isOpeningBraceToken,\n    isOpeningBracketToken,\n    isOpeningParenToken,\n    isSemicolonToken,\n    isEqToken,\n\n    /**\n     * Checks whether or not a given node is a string literal.\n     * @param {ASTNode} node A node to check.\n     * @returns {boolean} `true` if the node is a string literal.\n     */\n    isStringLiteral(node) {\n        return (\n            (node.type === \"Literal\" && typeof node.value === \"string\") ||\n            node.type === \"TemplateLiteral\"\n        );\n    },\n\n    /**\n     * Checks whether a given node is a breakable statement or not.\n     * The node is breakable if the node is one of the following type:\n     *\n     * - DoWhileStatement\n     * - ForInStatement\n     * - ForOfStatement\n     * - ForStatement\n     * - SwitchStatement\n     * - WhileStatement\n     * @param {ASTNode} node A node to check.\n     * @returns {boolean} `true` if the node is breakable.\n     */\n    isBreakableStatement(node) {\n        return breakableTypePattern.test(node.type);\n    },\n\n    /**\n     * Gets references which are non initializer and writable.\n     * @param {Reference[]} references An array of references.\n     * @returns {Reference[]} An array of only references which are non initializer and writable.\n     * @public\n     */\n    getModifyingReferences(references) {\n        return references.filter(isModifyingReference);\n    },\n\n    /**\n     * Validate that a string passed in is surrounded by the specified character\n     * @param {string} val The text to check.\n     * @param {string} character The character to see if it's surrounded by.\n     * @returns {boolean} True if the text is surrounded by the character, false if not.\n     * @private\n     */\n    isSurroundedBy(val, character) {\n        return val[0] === character && val[val.length - 1] === character;\n    },\n\n    /**\n     * Returns whether the provided node is an ESLint directive comment or not\n     * @param {Line|Block} node The comment token to be checked\n     * @returns {boolean} `true` if the node is an ESLint directive comment\n     */\n    isDirectiveComment(node) {\n        const comment = node.value.trim();\n\n        return (\n            node.type === \"Line\" && comment.indexOf(\"eslint-\") === 0 ||\n            node.type === \"Block\" && (\n                comment.indexOf(\"global \") === 0 ||\n                comment.indexOf(\"eslint \") === 0 ||\n                comment.indexOf(\"eslint-\") === 0\n            )\n        );\n    },\n\n    /**\n     * Gets the trailing statement of a given node.\n     *\n     *     if (code)\n     *         consequent;\n     *\n     * When taking this `IfStatement`, returns `consequent;` statement.\n     * @param {ASTNode} A node to get.\n     * @returns {ASTNode|null} The trailing statement's node.\n     */\n    getTrailingStatement: esutils.ast.trailingStatement,\n\n    /**\n     * Finds the variable by a given name in a given scope and its upper scopes.\n     * @param {eslint-scope.Scope} initScope A scope to start find.\n     * @param {string} name A variable name to find.\n     * @returns {eslint-scope.Variable|null} A found variable or `null`.\n     */\n    getVariableByName(initScope, name) {\n        let scope = initScope;\n\n        while (scope) {\n            const variable = scope.set.get(name);\n\n            if (variable) {\n                return variable;\n            }\n\n            scope = scope.upper;\n        }\n\n        return null;\n    },\n\n    /**\n     * Checks whether or not a given function node is the default `this` binding.\n     *\n     * First, this checks the node:\n     *\n     * - The given node is not in `PropertyDefinition#value` position.\n     * - The given node is not `StaticBlock`.\n     * - The function name does not start with uppercase. It's a convention to capitalize the names\n     *   of constructor functions. This check is not performed if `capIsConstructor` is set to `false`.\n     * - The function does not have a JSDoc comment that has a @this tag.\n     *\n     * Next, this checks the location of the node.\n     * If the location is below, this judges `this` is valid.\n     *\n     * - The location is not on an object literal.\n     * - The location is not assigned to a variable which starts with an uppercase letter. Applies to anonymous\n     *   functions only, as the name of the variable is considered to be the name of the function in this case.\n     *   This check is not performed if `capIsConstructor` is set to `false`.\n     * - The location is not on an ES2015 class.\n     * - Its `bind`/`call`/`apply` method is not called directly.\n     * - The function is not a callback of array methods (such as `.forEach()`) if `thisArg` is given.\n     * @param {ASTNode} node A function node to check. It also can be an implicit function, like `StaticBlock`\n     * or any expression that is `PropertyDefinition#value` node.\n     * @param {SourceCode} sourceCode A SourceCode instance to get comments.\n     * @param {boolean} [capIsConstructor = true] `false` disables the assumption that functions which name starts\n     * with an uppercase or are assigned to a variable which name starts with an uppercase are constructors.\n     * @returns {boolean} The function node is the default `this` binding.\n     */\n    isDefaultThisBinding(node, sourceCode, { capIsConstructor = true } = {}) {\n\n        /*\n         * Class field initializers are implicit functions, but ESTree doesn't have the AST node of field initializers.\n         * Therefore, A expression node at `PropertyDefinition#value` is a function.\n         * In this case, `this` is always not default binding.\n         */\n        if (node.parent.type === \"PropertyDefinition\" && node.parent.value === node) {\n            return false;\n        }\n\n        // Class static blocks are implicit functions. In this case, `this` is always not default binding.\n        if (node.type === \"StaticBlock\") {\n            return false;\n        }\n\n        if (\n            (capIsConstructor && isES5Constructor(node)) ||\n            hasJSDocThisTag(node, sourceCode)\n        ) {\n            return false;\n        }\n        const isAnonymous = node.id === null;\n        let currentNode = node;\n\n        while (currentNode) {\n            const parent = currentNode.parent;\n\n            switch (parent.type) {\n\n                /*\n                 * Looks up the destination.\n                 * e.g., obj.foo = nativeFoo || function foo() { ... };\n                 */\n                case \"LogicalExpression\":\n                case \"ConditionalExpression\":\n                case \"ChainExpression\":\n                    currentNode = parent;\n                    break;\n\n                /*\n                 * If the upper function is IIFE, checks the destination of the return value.\n                 * e.g.\n                 *   obj.foo = (function() {\n                 *     // setup...\n                 *     return function foo() { ... };\n                 *   })();\n                 *   obj.foo = (() =>\n                 *     function foo() { ... }\n                 *   )();\n                 */\n                case \"ReturnStatement\": {\n                    const func = getUpperFunction(parent);\n\n                    if (func === null || !isCallee(func)) {\n                        return true;\n                    }\n                    currentNode = func.parent;\n                    break;\n                }\n                case \"ArrowFunctionExpression\":\n                    if (currentNode !== parent.body || !isCallee(parent)) {\n                        return true;\n                    }\n                    currentNode = parent.parent;\n                    break;\n\n                /*\n                 * e.g.\n                 *   var obj = { foo() { ... } };\n                 *   var obj = { foo: function() { ... } };\n                 *   class A { constructor() { ... } }\n                 *   class A { foo() { ... } }\n                 *   class A { get foo() { ... } }\n                 *   class A { set foo() { ... } }\n                 *   class A { static foo() { ... } }\n                 *   class A { foo = function() { ... } }\n                 */\n                case \"Property\":\n                case \"PropertyDefinition\":\n                case \"MethodDefinition\":\n                    return parent.value !== currentNode;\n\n                /*\n                 * e.g.\n                 *   obj.foo = function foo() { ... };\n                 *   Foo = function() { ... };\n                 *   [obj.foo = function foo() { ... }] = a;\n                 *   [Foo = function() { ... }] = a;\n                 */\n                case \"AssignmentExpression\":\n                case \"AssignmentPattern\":\n                    if (parent.left.type === \"MemberExpression\") {\n                        return false;\n                    }\n                    if (\n                        capIsConstructor &&\n                        isAnonymous &&\n                        parent.left.type === \"Identifier\" &&\n                        startsWithUpperCase(parent.left.name)\n                    ) {\n                        return false;\n                    }\n                    return true;\n\n                /*\n                 * e.g.\n                 *   var Foo = function() { ... };\n                 */\n                case \"VariableDeclarator\":\n                    return !(\n                        capIsConstructor &&\n                        isAnonymous &&\n                        parent.init === currentNode &&\n                        parent.id.type === \"Identifier\" &&\n                        startsWithUpperCase(parent.id.name)\n                    );\n\n                /*\n                 * e.g.\n                 *   var foo = function foo() { ... }.bind(obj);\n                 *   (function foo() { ... }).call(obj);\n                 *   (function foo() { ... }).apply(obj, []);\n                 */\n                case \"MemberExpression\":\n                    if (\n                        parent.object === currentNode &&\n                        isSpecificMemberAccess(parent, null, bindOrCallOrApplyPattern)\n                    ) {\n                        const maybeCalleeNode = parent.parent.type === \"ChainExpression\"\n                            ? parent.parent\n                            : parent;\n\n                        return !(\n                            isCallee(maybeCalleeNode) &&\n                            maybeCalleeNode.parent.arguments.length >= 1 &&\n                            !isNullOrUndefined(maybeCalleeNode.parent.arguments[0])\n                        );\n                    }\n                    return true;\n\n                /*\n                 * e.g.\n                 *   Reflect.apply(function() {}, obj, []);\n                 *   Array.from([], function() {}, obj);\n                 *   list.forEach(function() {}, obj);\n                 */\n                case \"CallExpression\":\n                    if (isReflectApply(parent.callee)) {\n                        return (\n                            parent.arguments.length !== 3 ||\n                            parent.arguments[0] !== currentNode ||\n                            isNullOrUndefined(parent.arguments[1])\n                        );\n                    }\n                    if (isArrayFromMethod(parent.callee)) {\n                        return (\n                            parent.arguments.length !== 3 ||\n                            parent.arguments[1] !== currentNode ||\n                            isNullOrUndefined(parent.arguments[2])\n                        );\n                    }\n                    if (isMethodWhichHasThisArg(parent.callee)) {\n                        return (\n                            parent.arguments.length !== 2 ||\n                            parent.arguments[0] !== currentNode ||\n                            isNullOrUndefined(parent.arguments[1])\n                        );\n                    }\n                    return true;\n\n                // Otherwise `this` is default.\n                default:\n                    return true;\n            }\n        }\n\n        /* istanbul ignore next */\n        return true;\n    },\n\n    /**\n     * Get the precedence level based on the node type\n     * @param {ASTNode} node node to evaluate\n     * @returns {int} precedence level\n     * @private\n     */\n    getPrecedence(node) {\n        switch (node.type) {\n            case \"SequenceExpression\":\n                return 0;\n\n            case \"AssignmentExpression\":\n            case \"ArrowFunctionExpression\":\n            case \"YieldExpression\":\n                return 1;\n\n            case \"ConditionalExpression\":\n                return 3;\n\n            case \"LogicalExpression\":\n                switch (node.operator) {\n                    case \"||\":\n                    case \"??\":\n                        return 4;\n                    case \"&&\":\n                        return 5;\n\n                    // no default\n                }\n\n                /* falls through */\n\n            case \"BinaryExpression\":\n\n                switch (node.operator) {\n                    case \"|\":\n                        return 6;\n                    case \"^\":\n                        return 7;\n                    case \"&\":\n                        return 8;\n                    case \"==\":\n                    case \"!=\":\n                    case \"===\":\n                    case \"!==\":\n                        return 9;\n                    case \"<\":\n                    case \"<=\":\n                    case \">\":\n                    case \">=\":\n                    case \"in\":\n                    case \"instanceof\":\n                        return 10;\n                    case \"<<\":\n                    case \">>\":\n                    case \">>>\":\n                        return 11;\n                    case \"+\":\n                    case \"-\":\n                        return 12;\n                    case \"*\":\n                    case \"/\":\n                    case \"%\":\n                        return 13;\n                    case \"**\":\n                        return 15;\n\n                    // no default\n                }\n\n                /* falls through */\n\n            case \"UnaryExpression\":\n            case \"AwaitExpression\":\n                return 16;\n\n            case \"UpdateExpression\":\n                return 17;\n\n            case \"CallExpression\":\n            case \"ChainExpression\":\n            case \"ImportExpression\":\n                return 18;\n\n            case \"NewExpression\":\n                return 19;\n\n            default:\n                return 20;\n        }\n    },\n\n    /**\n     * Checks whether the given node is an empty block node or not.\n     * @param {ASTNode|null} node The node to check.\n     * @returns {boolean} `true` if the node is an empty block.\n     */\n    isEmptyBlock(node) {\n        return Boolean(node && node.type === \"BlockStatement\" && node.body.length === 0);\n    },\n\n    /**\n     * Checks whether the given node is an empty function node or not.\n     * @param {ASTNode|null} node The node to check.\n     * @returns {boolean} `true` if the node is an empty function.\n     */\n    isEmptyFunction(node) {\n        return isFunction(node) && module.exports.isEmptyBlock(node.body);\n    },\n\n    /**\n     * Get directives from directive prologue of a Program or Function node.\n     * @param {ASTNode} node The node to check.\n     * @returns {ASTNode[]} The directives found in the directive prologue.\n     */\n    getDirectivePrologue(node) {\n        const directives = [];\n\n        // Directive prologues only occur at the top of files or functions.\n        if (\n            node.type === \"Program\" ||\n            node.type === \"FunctionDeclaration\" ||\n            node.type === \"FunctionExpression\" ||\n\n            /*\n             * Do not check arrow functions with implicit return.\n             * `() => \"use strict\";` returns the string `\"use strict\"`.\n             */\n            (node.type === \"ArrowFunctionExpression\" && node.body.type === \"BlockStatement\")\n        ) {\n            const statements = node.type === \"Program\" ? node.body : node.body.body;\n\n            for (const statement of statements) {\n                if (\n                    statement.type === \"ExpressionStatement\" &&\n                    statement.expression.type === \"Literal\"\n                ) {\n                    directives.push(statement);\n                } else {\n                    break;\n                }\n            }\n        }\n\n        return directives;\n    },\n\n\n    /**\n     * Determines whether this node is a decimal integer literal. If a node is a decimal integer literal, a dot added\n     * after the node will be parsed as a decimal point, rather than a property-access dot.\n     * @param {ASTNode} node The node to check.\n     * @returns {boolean} `true` if this node is a decimal integer.\n     * @example\n     *\n     * 0         // true\n     * 5         // true\n     * 50        // true\n     * 5_000     // true\n     * 1_234_56  // true\n     * 08        // true\n     * 0192      // true\n     * 5.        // false\n     * .5        // false\n     * 5.0       // false\n     * 5.00_00   // false\n     * 05        // false\n     * 0x5       // false\n     * 0b101     // false\n     * 0b11_01   // false\n     * 0o5       // false\n     * 5e0       // false\n     * 5e1_000   // false\n     * 5n        // false\n     * 1_000n    // false\n     * \"5\"       // false\n     *\n     */\n    isDecimalInteger(node) {\n        return node.type === \"Literal\" && typeof node.value === \"number\" &&\n            DECIMAL_INTEGER_PATTERN.test(node.raw);\n    },\n\n    /**\n     * Determines whether this token is a decimal integer numeric token.\n     * This is similar to isDecimalInteger(), but for tokens.\n     * @param {Token} token The token to check.\n     * @returns {boolean} `true` if this token is a decimal integer.\n     */\n    isDecimalIntegerNumericToken(token) {\n        return token.type === \"Numeric\" && DECIMAL_INTEGER_PATTERN.test(token.value);\n    },\n\n    /**\n     * Gets the name and kind of the given function node.\n     *\n     * - `function foo() {}`  .................... `function 'foo'`\n     * - `(function foo() {})`  .................. `function 'foo'`\n     * - `(function() {})`  ...................... `function`\n     * - `function* foo() {}`  ................... `generator function 'foo'`\n     * - `(function* foo() {})`  ................. `generator function 'foo'`\n     * - `(function*() {})`  ..................... `generator function`\n     * - `() => {}`  ............................. `arrow function`\n     * - `async () => {}`  ....................... `async arrow function`\n     * - `({ foo: function foo() {} })`  ......... `method 'foo'`\n     * - `({ foo: function() {} })`  ............. `method 'foo'`\n     * - `({ ['foo']: function() {} })`  ......... `method 'foo'`\n     * - `({ [foo]: function() {} })`  ........... `method`\n     * - `({ foo() {} })`  ....................... `method 'foo'`\n     * - `({ foo: function* foo() {} })`  ........ `generator method 'foo'`\n     * - `({ foo: function*() {} })`  ............ `generator method 'foo'`\n     * - `({ ['foo']: function*() {} })`  ........ `generator method 'foo'`\n     * - `({ [foo]: function*() {} })`  .......... `generator method`\n     * - `({ *foo() {} })`  ...................... `generator method 'foo'`\n     * - `({ foo: async function foo() {} })`  ... `async method 'foo'`\n     * - `({ foo: async function() {} })`  ....... `async method 'foo'`\n     * - `({ ['foo']: async function() {} })`  ... `async method 'foo'`\n     * - `({ [foo]: async function() {} })`  ..... `async method`\n     * - `({ async foo() {} })`  ................. `async method 'foo'`\n     * - `({ get foo() {} })`  ................... `getter 'foo'`\n     * - `({ set foo(a) {} })`  .................. `setter 'foo'`\n     * - `class A { constructor() {} }`  ......... `constructor`\n     * - `class A { foo() {} }`  ................. `method 'foo'`\n     * - `class A { *foo() {} }`  ................ `generator method 'foo'`\n     * - `class A { async foo() {} }`  ........... `async method 'foo'`\n     * - `class A { ['foo']() {} }`  ............. `method 'foo'`\n     * - `class A { *['foo']() {} }`  ............ `generator method 'foo'`\n     * - `class A { async ['foo']() {} }`  ....... `async method 'foo'`\n     * - `class A { [foo]() {} }`  ............... `method`\n     * - `class A { *[foo]() {} }`  .............. `generator method`\n     * - `class A { async [foo]() {} }`  ......... `async method`\n     * - `class A { get foo() {} }`  ............. `getter 'foo'`\n     * - `class A { set foo(a) {} }`  ............ `setter 'foo'`\n     * - `class A { static foo() {} }`  .......... `static method 'foo'`\n     * - `class A { static *foo() {} }`  ......... `static generator method 'foo'`\n     * - `class A { static async foo() {} }`  .... `static async method 'foo'`\n     * - `class A { static get foo() {} }`  ...... `static getter 'foo'`\n     * - `class A { static set foo(a) {} }`  ..... `static setter 'foo'`\n     * - `class A { foo = () => {}; }`  .......... `method 'foo'`\n     * - `class A { foo = function() {}; }`  ..... `method 'foo'`\n     * - `class A { foo = function bar() {}; }`  . `method 'foo'`\n     * - `class A { static foo = () => {}; }`  ... `static method 'foo'`\n     * - `class A { '#foo' = () => {}; }`  ....... `method '#foo'`\n     * - `class A { #foo = () => {}; }`  ......... `private method #foo`\n     * - `class A { static #foo = () => {}; }`  .. `static private method #foo`\n     * - `class A { '#foo'() {} }`  .............. `method '#foo'`\n     * - `class A { #foo() {} }`  ................ `private method #foo`\n     * - `class A { static #foo() {} }`  ......... `static private method #foo`\n     * @param {ASTNode} node The function node to get.\n     * @returns {string} The name and kind of the function node.\n     */\n    getFunctionNameWithKind(node) {\n        const parent = node.parent;\n        const tokens = [];\n\n        if (parent.type === \"MethodDefinition\" || parent.type === \"PropertyDefinition\") {\n\n            // The proposal uses `static` word consistently before visibility words: https://github.com/tc39/proposal-static-class-features\n            if (parent.static) {\n                tokens.push(\"static\");\n            }\n            if (!parent.computed && parent.key.type === \"PrivateIdentifier\") {\n                tokens.push(\"private\");\n            }\n        }\n        if (node.async) {\n            tokens.push(\"async\");\n        }\n        if (node.generator) {\n            tokens.push(\"generator\");\n        }\n\n        if (parent.type === \"Property\" || parent.type === \"MethodDefinition\") {\n            if (parent.kind === \"constructor\") {\n                return \"constructor\";\n            }\n            if (parent.kind === \"get\") {\n                tokens.push(\"getter\");\n            } else if (parent.kind === \"set\") {\n                tokens.push(\"setter\");\n            } else {\n                tokens.push(\"method\");\n            }\n        } else if (parent.type === \"PropertyDefinition\") {\n            tokens.push(\"method\");\n        } else {\n            if (node.type === \"ArrowFunctionExpression\") {\n                tokens.push(\"arrow\");\n            }\n            tokens.push(\"function\");\n        }\n\n        if (parent.type === \"Property\" || parent.type === \"MethodDefinition\" || parent.type === \"PropertyDefinition\") {\n            if (!parent.computed && parent.key.type === \"PrivateIdentifier\") {\n                tokens.push(`#${parent.key.name}`);\n            } else {\n                const name = getStaticPropertyName(parent);\n\n                if (name !== null) {\n                    tokens.push(`'${name}'`);\n                } else if (node.id) {\n                    tokens.push(`'${node.id.name}'`);\n                }\n            }\n        } else if (node.id) {\n            tokens.push(`'${node.id.name}'`);\n        }\n\n        return tokens.join(\" \");\n    },\n\n    /**\n     * Gets the location of the given function node for reporting.\n     *\n     * - `function foo() {}`\n     *    ^^^^^^^^^^^^\n     * - `(function foo() {})`\n     *     ^^^^^^^^^^^^\n     * - `(function() {})`\n     *     ^^^^^^^^\n     * - `function* foo() {}`\n     *    ^^^^^^^^^^^^^\n     * - `(function* foo() {})`\n     *     ^^^^^^^^^^^^^\n     * - `(function*() {})`\n     *     ^^^^^^^^^\n     * - `() => {}`\n     *       ^^\n     * - `async () => {}`\n     *             ^^\n     * - `({ foo: function foo() {} })`\n     *       ^^^^^^^^^^^^^^^^^\n     * - `({ foo: function() {} })`\n     *       ^^^^^^^^^^^^^\n     * - `({ ['foo']: function() {} })`\n     *       ^^^^^^^^^^^^^^^^^\n     * - `({ [foo]: function() {} })`\n     *       ^^^^^^^^^^^^^^^\n     * - `({ foo() {} })`\n     *       ^^^\n     * - `({ foo: function* foo() {} })`\n     *       ^^^^^^^^^^^^^^^^^^\n     * - `({ foo: function*() {} })`\n     *       ^^^^^^^^^^^^^^\n     * - `({ ['foo']: function*() {} })`\n     *       ^^^^^^^^^^^^^^^^^^\n     * - `({ [foo]: function*() {} })`\n     *       ^^^^^^^^^^^^^^^^\n     * - `({ *foo() {} })`\n     *       ^^^^\n     * - `({ foo: async function foo() {} })`\n     *       ^^^^^^^^^^^^^^^^^^^^^^^\n     * - `({ foo: async function() {} })`\n     *       ^^^^^^^^^^^^^^^^^^^\n     * - `({ ['foo']: async function() {} })`\n     *       ^^^^^^^^^^^^^^^^^^^^^^^\n     * - `({ [foo]: async function() {} })`\n     *       ^^^^^^^^^^^^^^^^^^^^^\n     * - `({ async foo() {} })`\n     *       ^^^^^^^^^\n     * - `({ get foo() {} })`\n     *       ^^^^^^^\n     * - `({ set foo(a) {} })`\n     *       ^^^^^^^\n     * - `class A { constructor() {} }`\n     *              ^^^^^^^^^^^\n     * - `class A { foo() {} }`\n     *              ^^^\n     * - `class A { *foo() {} }`\n     *              ^^^^\n     * - `class A { async foo() {} }`\n     *              ^^^^^^^^^\n     * - `class A { ['foo']() {} }`\n     *              ^^^^^^^\n     * - `class A { *['foo']() {} }`\n     *              ^^^^^^^^\n     * - `class A { async ['foo']() {} }`\n     *              ^^^^^^^^^^^^^\n     * - `class A { [foo]() {} }`\n     *              ^^^^^\n     * - `class A { *[foo]() {} }`\n     *              ^^^^^^\n     * - `class A { async [foo]() {} }`\n     *              ^^^^^^^^^^^\n     * - `class A { get foo() {} }`\n     *              ^^^^^^^\n     * - `class A { set foo(a) {} }`\n     *              ^^^^^^^\n     * - `class A { static foo() {} }`\n     *              ^^^^^^^^^^\n     * - `class A { static *foo() {} }`\n     *              ^^^^^^^^^^^\n     * - `class A { static async foo() {} }`\n     *              ^^^^^^^^^^^^^^^^\n     * - `class A { static get foo() {} }`\n     *              ^^^^^^^^^^^^^^\n     * - `class A { static set foo(a) {} }`\n     *              ^^^^^^^^^^^^^^\n     * - `class A { foo = function() {} }`\n     *              ^^^^^^^^^^^^^^\n     * - `class A { static foo = function() {} }`\n     *              ^^^^^^^^^^^^^^^^^^^^^\n     * - `class A { foo = (a, b) => {} }`\n     *              ^^^^^^\n     * @param {ASTNode} node The function node to get.\n     * @param {SourceCode} sourceCode The source code object to get tokens.\n     * @returns {string} The location of the function node for reporting.\n     */\n    getFunctionHeadLoc(node, sourceCode) {\n        const parent = node.parent;\n        let start = null;\n        let end = null;\n\n        if (parent.type === \"Property\" || parent.type === \"MethodDefinition\" || parent.type === \"PropertyDefinition\") {\n            start = parent.loc.start;\n            end = getOpeningParenOfParams(node, sourceCode).loc.start;\n        } else if (node.type === \"ArrowFunctionExpression\") {\n            const arrowToken = sourceCode.getTokenBefore(node.body, isArrowToken);\n\n            start = arrowToken.loc.start;\n            end = arrowToken.loc.end;\n        } else {\n            start = node.loc.start;\n            end = getOpeningParenOfParams(node, sourceCode).loc.start;\n        }\n\n        return {\n            start: Object.assign({}, start),\n            end: Object.assign({}, end)\n        };\n    },\n\n    /**\n     * Gets next location when the result is not out of bound, otherwise returns null.\n     *\n     * Assumptions:\n     *\n     * - The given location represents a valid location in the given source code.\n     * - Columns are 0-based.\n     * - Lines are 1-based.\n     * - Column immediately after the last character in a line (not incl. linebreaks) is considered to be a valid location.\n     * - If the source code ends with a linebreak, `sourceCode.lines` array will have an extra element (empty string) at the end.\n     *   The start (column 0) of that extra line is considered to be a valid location.\n     *\n     * Examples of successive locations (line, column):\n     *\n     * code: foo\n     * locations: (1, 0) -> (1, 1) -> (1, 2) -> (1, 3) -> null\n     *\n     * code: foo<LF>\n     * locations: (1, 0) -> (1, 1) -> (1, 2) -> (1, 3) -> (2, 0) -> null\n     *\n     * code: foo<CR><LF>\n     * locations: (1, 0) -> (1, 1) -> (1, 2) -> (1, 3) -> (2, 0) -> null\n     *\n     * code: a<LF>b\n     * locations: (1, 0) -> (1, 1) -> (2, 0) -> (2, 1) -> null\n     *\n     * code: a<LF>b<LF>\n     * locations: (1, 0) -> (1, 1) -> (2, 0) -> (2, 1) -> (3, 0) -> null\n     *\n     * code: a<CR><LF>b<CR><LF>\n     * locations: (1, 0) -> (1, 1) -> (2, 0) -> (2, 1) -> (3, 0) -> null\n     *\n     * code: a<LF><LF>\n     * locations: (1, 0) -> (1, 1) -> (2, 0) -> (3, 0) -> null\n     *\n     * code: <LF>\n     * locations: (1, 0) -> (2, 0) -> null\n     *\n     * code:\n     * locations: (1, 0) -> null\n     * @param {SourceCode} sourceCode The sourceCode\n     * @param {{line: number, column: number}} location The location\n     * @returns {{line: number, column: number} | null} Next location\n     */\n    getNextLocation(sourceCode, { line, column }) {\n        if (column < sourceCode.lines[line - 1].length) {\n            return {\n                line,\n                column: column + 1\n            };\n        }\n\n        if (line < sourceCode.lines.length) {\n            return {\n                line: line + 1,\n                column: 0\n            };\n        }\n\n        return null;\n    },\n\n    /**\n     * Gets the parenthesized text of a node. This is similar to sourceCode.getText(node), but it also includes any parentheses\n     * surrounding the node.\n     * @param {SourceCode} sourceCode The source code object\n     * @param {ASTNode} node An expression node\n     * @returns {string} The text representing the node, with all surrounding parentheses included\n     */\n    getParenthesisedText(sourceCode, node) {\n        let leftToken = sourceCode.getFirstToken(node);\n        let rightToken = sourceCode.getLastToken(node);\n\n        while (\n            sourceCode.getTokenBefore(leftToken) &&\n            sourceCode.getTokenBefore(leftToken).type === \"Punctuator\" &&\n            sourceCode.getTokenBefore(leftToken).value === \"(\" &&\n            sourceCode.getTokenAfter(rightToken) &&\n            sourceCode.getTokenAfter(rightToken).type === \"Punctuator\" &&\n            sourceCode.getTokenAfter(rightToken).value === \")\"\n        ) {\n            leftToken = sourceCode.getTokenBefore(leftToken);\n            rightToken = sourceCode.getTokenAfter(rightToken);\n        }\n\n        return sourceCode.getText().slice(leftToken.range[0], rightToken.range[1]);\n    },\n\n    /**\n     * Determine if a node has a possibility to be an Error object\n     * @param {ASTNode} node ASTNode to check\n     * @returns {boolean} True if there is a chance it contains an Error obj\n     */\n    couldBeError(node) {\n        switch (node.type) {\n            case \"Identifier\":\n            case \"CallExpression\":\n            case \"NewExpression\":\n            case \"MemberExpression\":\n            case \"TaggedTemplateExpression\":\n            case \"YieldExpression\":\n            case \"AwaitExpression\":\n            case \"ChainExpression\":\n                return true; // possibly an error object.\n\n            case \"AssignmentExpression\":\n                if ([\"=\", \"&&=\"].includes(node.operator)) {\n                    return module.exports.couldBeError(node.right);\n                }\n\n                if ([\"||=\", \"??=\"].includes(node.operator)) {\n                    return module.exports.couldBeError(node.left) || module.exports.couldBeError(node.right);\n                }\n\n                /**\n                 * All other assignment operators are mathematical assignment operators (arithmetic or bitwise).\n                 * An assignment expression with a mathematical operator can either evaluate to a primitive value,\n                 * or throw, depending on the operands. Thus, it cannot evaluate to an `Error` object.\n                 */\n                return false;\n\n            case \"SequenceExpression\": {\n                const exprs = node.expressions;\n\n                return exprs.length !== 0 && module.exports.couldBeError(exprs[exprs.length - 1]);\n            }\n\n            case \"LogicalExpression\":\n\n                /*\n                 * If the && operator short-circuits, the left side was falsy and therefore not an error, and if it\n                 * doesn't short-circuit, it takes the value from the right side, so the right side must always be\n                 * a plausible error. A future improvement could verify that the left side could be truthy by\n                 * excluding falsy literals.\n                 */\n                if (node.operator === \"&&\") {\n                    return module.exports.couldBeError(node.right);\n                }\n\n                return module.exports.couldBeError(node.left) || module.exports.couldBeError(node.right);\n\n            case \"ConditionalExpression\":\n                return module.exports.couldBeError(node.consequent) || module.exports.couldBeError(node.alternate);\n\n            default:\n                return false;\n        }\n    },\n\n    /**\n     * Check if a given node is a numeric literal or not.\n     * @param {ASTNode} node The node to check.\n     * @returns {boolean} `true` if the node is a number or bigint literal.\n     */\n    isNumericLiteral(node) {\n        return (\n            node.type === \"Literal\" &&\n            (typeof node.value === \"number\" || Boolean(node.bigint))\n        );\n    },\n\n    /**\n     * Determines whether two tokens can safely be placed next to each other without merging into a single token\n     * @param {Token|string} leftValue The left token. If this is a string, it will be tokenized and the last token will be used.\n     * @param {Token|string} rightValue The right token. If this is a string, it will be tokenized and the first token will be used.\n     * @returns {boolean} If the tokens cannot be safely placed next to each other, returns `false`. If the tokens can be placed\n     * next to each other, behavior is undefined (although it should return `true` in most cases).\n     */\n    canTokensBeAdjacent(leftValue, rightValue) {\n        const espreeOptions = {\n            ecmaVersion: espree.latestEcmaVersion,\n            comment: true,\n            range: true\n        };\n\n        let leftToken;\n\n        if (typeof leftValue === \"string\") {\n            let tokens;\n\n            try {\n                tokens = espree.tokenize(leftValue, espreeOptions);\n            } catch {\n                return false;\n            }\n\n            const comments = tokens.comments;\n\n            leftToken = tokens[tokens.length - 1];\n            if (comments.length) {\n                const lastComment = comments[comments.length - 1];\n\n                if (lastComment.range[0] > leftToken.range[0]) {\n                    leftToken = lastComment;\n                }\n            }\n        } else {\n            leftToken = leftValue;\n        }\n\n        if (leftToken.type === \"Shebang\") {\n            return false;\n        }\n\n        let rightToken;\n\n        if (typeof rightValue === \"string\") {\n            let tokens;\n\n            try {\n                tokens = espree.tokenize(rightValue, espreeOptions);\n            } catch {\n                return false;\n            }\n\n            const comments = tokens.comments;\n\n            rightToken = tokens[0];\n            if (comments.length) {\n                const firstComment = comments[0];\n\n                if (firstComment.range[0] < rightToken.range[0]) {\n                    rightToken = firstComment;\n                }\n            }\n        } else {\n            rightToken = rightValue;\n        }\n\n        if (leftToken.type === \"Punctuator\" || rightToken.type === \"Punctuator\") {\n            if (leftToken.type === \"Punctuator\" && rightToken.type === \"Punctuator\") {\n                const PLUS_TOKENS = new Set([\"+\", \"++\"]);\n                const MINUS_TOKENS = new Set([\"-\", \"--\"]);\n\n                return !(\n                    PLUS_TOKENS.has(leftToken.value) && PLUS_TOKENS.has(rightToken.value) ||\n                    MINUS_TOKENS.has(leftToken.value) && MINUS_TOKENS.has(rightToken.value)\n                );\n            }\n            if (leftToken.type === \"Punctuator\" && leftToken.value === \"/\") {\n                return ![\"Block\", \"Line\", \"RegularExpression\"].includes(rightToken.type);\n            }\n            return true;\n        }\n\n        if (\n            leftToken.type === \"String\" || rightToken.type === \"String\" ||\n            leftToken.type === \"Template\" || rightToken.type === \"Template\"\n        ) {\n            return true;\n        }\n\n        if (leftToken.type !== \"Numeric\" && rightToken.type === \"Numeric\" && rightToken.value.startsWith(\".\")) {\n            return true;\n        }\n\n        if (leftToken.type === \"Block\" || rightToken.type === \"Block\" || rightToken.type === \"Line\") {\n            return true;\n        }\n\n        if (rightToken.type === \"PrivateIdentifier\") {\n            return true;\n        }\n\n        return false;\n    },\n\n    /**\n     * Get the `loc` object of a given name in a `/*globals` directive comment.\n     * @param {SourceCode} sourceCode The source code to convert index to loc.\n     * @param {Comment} comment The `/*globals` directive comment which include the name.\n     * @param {string} name The name to find.\n     * @returns {SourceLocation} The `loc` object.\n     */\n    getNameLocationInGlobalDirectiveComment(sourceCode, comment, name) {\n        const namePattern = new RegExp(`[\\\\s,]${escapeRegExp(name)}(?:$|[\\\\s,:])`, \"gu\");\n\n        // To ignore the first text \"global\".\n        namePattern.lastIndex = comment.value.indexOf(\"global\") + 6;\n\n        // Search a given variable name.\n        const match = namePattern.exec(comment.value);\n\n        // Convert the index to loc.\n        const start = sourceCode.getLocFromIndex(\n            comment.range[0] +\n            \"/*\".length +\n            (match ? match.index + 1 : 0)\n        );\n        const end = {\n            line: start.line,\n            column: start.column + (match ? name.length : 1)\n        };\n\n        return { start, end };\n    },\n\n    /**\n     * Determines whether the given raw string contains an octal escape sequence\n     * or a non-octal decimal escape sequence (\"\\8\", \"\\9\").\n     *\n     * \"\\1\", \"\\2\" ... \"\\7\", \"\\8\", \"\\9\"\n     * \"\\00\", \"\\01\" ... \"\\07\", \"\\08\", \"\\09\"\n     *\n     * \"\\0\", when not followed by a digit, is not an octal escape sequence.\n     * @param {string} rawString A string in its raw representation.\n     * @returns {boolean} `true` if the string contains at least one octal escape sequence\n     * or at least one non-octal decimal escape sequence.\n     */\n    hasOctalOrNonOctalDecimalEscapeSequence(rawString) {\n        return OCTAL_OR_NON_OCTAL_DECIMAL_ESCAPE_PATTERN.test(rawString);\n    },\n\n    isLogicalExpression,\n    isCoalesceExpression,\n    isMixedLogicalAndCoalesceExpressions,\n    isNullLiteral,\n    getStaticStringValue,\n    getStaticPropertyName,\n    skipChainExpression,\n    isSpecificId,\n    isSpecificMemberAccess,\n    equalLiteralValue,\n    isSameReference,\n    isLogicalAssignmentOperator,\n    getSwitchCaseColonToken,\n    getModuleExportName\n};\n/messages/plugin-missing.js\u0002\"use strict\";\n\nmodule.exports = function(it) {\n    const { pluginName, resolvePluginsRelativeTo, importerName } = it;\n\n    return `\nESLint couldn't find the plugin \"${pluginName}\".\n\n(The package \"${pluginName}\" was not found when loaded as a Node module from the directory \"${resolvePluginsRelativeTo}\".)\n\nIt's likely that the plugin isn't installed correctly. Try reinstalling by running the following:\n\n    npm install ${pluginName}@latest --save-dev\n\nThe plugin \"${pluginName}\" was referenced from the config file in \"${importerName}\".\n\nIf you still can't figure out the problem, please stop by https://eslint.org/chat/help to chat with the team.\n`.trimLeft();\n};\n/lib/rules/func-names.js\u00193/**\n * @fileoverview Rule to warn when a function expression does not have a name.\n * @author Kyle T. Nunery\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n/**\n * Checks whether or not a given variable is a function name.\n * @param {eslint-scope.Variable} variable A variable to check.\n * @returns {boolean} `true` if the variable is a function name.\n */\nfunction isFunctionName(variable) {\n    return variable && variable.defs[0].type === \"FunctionName\";\n}\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"require or disallow named `function` expressions\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/func-names\"\n        },\n\n        schema: {\n            definitions: {\n                value: {\n                    enum: [\n                        \"always\",\n                        \"as-needed\",\n                        \"never\"\n                    ]\n                }\n            },\n            items: [\n                {\n                    $ref: \"#/definitions/value\"\n                },\n                {\n                    type: \"object\",\n                    properties: {\n                        generators: {\n                            $ref: \"#/definitions/value\"\n                        }\n                    },\n                    additionalProperties: false\n                }\n            ]\n        },\n\n        messages: {\n            unnamed: \"Unexpected unnamed {{name}}.\",\n            named: \"Unexpected named {{name}}.\"\n        }\n    },\n\n    create(context) {\n\n        const sourceCode = context.getSourceCode();\n\n        /**\n         * Returns the config option for the given node.\n         * @param {ASTNode} node A node to get the config for.\n         * @returns {string} The config option.\n         */\n        function getConfigForNode(node) {\n            if (\n                node.generator &&\n                context.options.length > 1 &&\n                context.options[1].generators\n            ) {\n                return context.options[1].generators;\n            }\n\n            return context.options[0] || \"always\";\n        }\n\n        /**\n         * Determines whether the current FunctionExpression node is a get, set, or\n         * shorthand method in an object literal or a class.\n         * @param {ASTNode} node A node to check.\n         * @returns {boolean} True if the node is a get, set, or shorthand method.\n         */\n        function isObjectOrClassMethod(node) {\n            const parent = node.parent;\n\n            return (parent.type === \"MethodDefinition\" || (\n                parent.type === \"Property\" && (\n                    parent.method ||\n                    parent.kind === \"get\" ||\n                    parent.kind === \"set\"\n                )\n            ));\n        }\n\n        /**\n         * Determines whether the current FunctionExpression node has a name that would be\n         * inferred from context in a conforming ES6 environment.\n         * @param {ASTNode} node A node to check.\n         * @returns {boolean} True if the node would have a name assigned automatically.\n         */\n        function hasInferredName(node) {\n            const parent = node.parent;\n\n            return isObjectOrClassMethod(node) ||\n                (parent.type === \"VariableDeclarator\" && parent.id.type === \"Identifier\" && parent.init === node) ||\n                (parent.type === \"Property\" && parent.value === node) ||\n                (parent.type === \"PropertyDefinition\" && parent.value === node) ||\n                (parent.type === \"AssignmentExpression\" && parent.left.type === \"Identifier\" && parent.right === node) ||\n                (parent.type === \"AssignmentPattern\" && parent.left.type === \"Identifier\" && parent.right === node);\n        }\n\n        /**\n         * Reports that an unnamed function should be named\n         * @param {ASTNode} node The node to report in the event of an error.\n         * @returns {void}\n         */\n        function reportUnexpectedUnnamedFunction(node) {\n            context.report({\n                node,\n                messageId: \"unnamed\",\n                loc: astUtils.getFunctionHeadLoc(node, sourceCode),\n                data: { name: astUtils.getFunctionNameWithKind(node) }\n            });\n        }\n\n        /**\n         * Reports that a named function should be unnamed\n         * @param {ASTNode} node The node to report in the event of an error.\n         * @returns {void}\n         */\n        function reportUnexpectedNamedFunction(node) {\n            context.report({\n                node,\n                messageId: \"named\",\n                loc: astUtils.getFunctionHeadLoc(node, sourceCode),\n                data: { name: astUtils.getFunctionNameWithKind(node) }\n            });\n        }\n\n        /**\n         * The listener for function nodes.\n         * @param {ASTNode} node function node\n         * @returns {void}\n         */\n        function handleFunction(node) {\n\n            // Skip recursive functions.\n            const nameVar = context.getDeclaredVariables(node)[0];\n\n            if (isFunctionName(nameVar) && nameVar.references.length > 0) {\n                return;\n            }\n\n            const hasName = Boolean(node.id && node.id.name);\n            const config = getConfigForNode(node);\n\n            if (config === \"never\") {\n                if (hasName && node.type !== \"FunctionDeclaration\") {\n                    reportUnexpectedNamedFunction(node);\n                }\n            } else if (config === \"as-needed\") {\n                if (!hasName && !hasInferredName(node)) {\n                    reportUnexpectedUnnamedFunction(node);\n                }\n            } else {\n                if (!hasName && !isObjectOrClassMethod(node)) {\n                    reportUnexpectedUnnamedFunction(node);\n                }\n            }\n        }\n\n        return {\n            \"FunctionExpression:exit\": handleFunction,\n            \"ExportDefaultDeclaration > FunctionDeclaration\": handleFunction\n        };\n    }\n};\n/lib/rules/no-alert.js\u0010/**\n * @fileoverview Rule to flag use of alert, confirm, prompt\n * @author Nicholas C. Zakas\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst {\n    getStaticPropertyName: getPropertyName,\n    getVariableByName,\n    skipChainExpression\n} = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\n/**\n * Checks if the given name is a prohibited identifier.\n * @param {string} name The name to check\n * @returns {boolean} Whether or not the name is prohibited.\n */\nfunction isProhibitedIdentifier(name) {\n    return /^(alert|confirm|prompt)$/u.test(name);\n}\n\n/**\n * Finds the eslint-scope reference in the given scope.\n * @param {Object} scope The scope to search.\n * @param {ASTNode} node The identifier node.\n * @returns {Reference|null} Returns the found reference or null if none were found.\n */\nfunction findReference(scope, node) {\n    const references = scope.references.filter(reference => reference.identifier.range[0] === node.range[0] &&\n            reference.identifier.range[1] === node.range[1]);\n\n    if (references.length === 1) {\n        return references[0];\n    }\n    return null;\n}\n\n/**\n * Checks if the given identifier node is shadowed in the given scope.\n * @param {Object} scope The current scope.\n * @param {string} node The identifier node to check\n * @returns {boolean} Whether or not the name is shadowed.\n */\nfunction isShadowed(scope, node) {\n    const reference = findReference(scope, node);\n\n    return reference && reference.resolved && reference.resolved.defs.length > 0;\n}\n\n/**\n * Checks if the given identifier node is a ThisExpression in the global scope or the global window property.\n * @param {Object} scope The current scope.\n * @param {string} node The identifier node to check\n * @returns {boolean} Whether or not the node is a reference to the global object.\n */\nfunction isGlobalThisReferenceOrGlobalWindow(scope, node) {\n    if (scope.type === \"global\" && node.type === \"ThisExpression\") {\n        return true;\n    }\n    if (\n        node.type === \"Identifier\" &&\n        (\n            node.name === \"window\" ||\n            (node.name === \"globalThis\" && getVariableByName(scope, \"globalThis\"))\n        )\n    ) {\n        return !isShadowed(scope, node);\n    }\n\n    return false;\n}\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow the use of `alert`, `confirm`, and `prompt`\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-alert\"\n        },\n\n        schema: [],\n\n        messages: {\n            unexpected: \"Unexpected {{name}}.\"\n        }\n    },\n\n    create(context) {\n        return {\n            CallExpression(node) {\n                const callee = skipChainExpression(node.callee),\n                    currentScope = context.getScope();\n\n                // without window.\n                if (callee.type === \"Identifier\") {\n                    const name = callee.name;\n\n                    if (!isShadowed(currentScope, callee) && isProhibitedIdentifier(callee.name)) {\n                        context.report({\n                            node,\n                            messageId: \"unexpected\",\n                            data: { name }\n                        });\n                    }\n\n                } else if (callee.type === \"MemberExpression\" && isGlobalThisReferenceOrGlobalWindow(currentScope, callee.object)) {\n                    const name = getPropertyName(callee);\n\n                    if (isProhibitedIdentifier(name)) {\n                        context.report({\n                            node,\n                            messageId: \"unexpected\",\n                            data: { name }\n                        });\n                    }\n                }\n            }\n        };\n\n    }\n};\n/lib/rule-tester/rule-tester.jsŝ/**\n * @fileoverview Mocha test wrapper\n * @author Ilya Volodin\n */\n\"use strict\";\n\n/* eslint-env mocha -- Mocha wrapper */\n\n/*\n * This is a wrapper around mocha to allow for DRY unittests for eslint\n * Format:\n * RuleTester.run(\"{ruleName}\", {\n *      valid: [\n *          \"{code}\",\n *          { code: \"{code}\", options: {options}, globals: {globals}, parser: \"{parser}\", settings: {settings} }\n *      ],\n *      invalid: [\n *          { code: \"{code}\", errors: {numErrors} },\n *          { code: \"{code}\", errors: [\"{errorMessage}\"] },\n *          { code: \"{code}\", options: {options}, globals: {globals}, parser: \"{parser}\", settings: {settings}, errors: [{ message: \"{errorMessage}\", type: \"{errorNodeType}\"}] }\n *      ]\n *  });\n *\n * Variables:\n * {code} - String that represents the code to be tested\n * {options} - Arguments that are passed to the configurable rules.\n * {globals} - An object representing a list of variables that are\n *             registered as globals\n * {parser} - String representing the parser to use\n * {settings} - An object representing global settings for all rules\n * {numErrors} - If failing case doesn't need to check error message,\n *               this integer will specify how many errors should be\n *               received\n * {errorMessage} - Message that is returned by the rule on failure\n * {errorNodeType} - AST node type that is returned by they rule as\n *                   a cause of the failure.\n */\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst\n    assert = require(\"assert\"),\n    path = require(\"path\"),\n    util = require(\"util\"),\n    merge = require(\"lodash.merge\"),\n    equal = require(\"fast-deep-equal\"),\n    Traverser = require(\"../../lib/shared/traverser\"),\n    { getRuleOptionsSchema, validate } = require(\"../shared/config-validator\"),\n    { Linter, SourceCodeFixer, interpolate } = require(\"../linter\");\n\nconst ajv = require(\"../shared/ajv\")({ strictDefaults: true });\n\nconst espreePath = require.resolve(\"espree\");\nconst parserSymbol = Symbol.for(\"eslint.RuleTester.parser\");\n\nconst { SourceCode } = require(\"../source-code\");\n\n//------------------------------------------------------------------------------\n// Typedefs\n//------------------------------------------------------------------------------\n\n/** @typedef {import(\"../shared/types\").Parser} Parser */\n\n/* eslint-disable jsdoc/valid-types -- https://github.com/jsdoc-type-pratt-parser/jsdoc-type-pratt-parser/issues/4#issuecomment-778805577 */\n/**\n * A test case that is expected to pass lint.\n * @typedef {Object} ValidTestCase\n * @property {string} [name] Name for the test case.\n * @property {string} code Code for the test case.\n * @property {any[]} [options] Options for the test case.\n * @property {{ [name: string]: any }} [settings] Settings for the test case.\n * @property {string} [filename] The fake filename for the test case. Useful for rules that make assertion about filenames.\n * @property {string} [parser] The absolute path for the parser.\n * @property {{ [name: string]: any }} [parserOptions] Options for the parser.\n * @property {{ [name: string]: \"readonly\" | \"writable\" | \"off\" }} [globals] The additional global variables.\n * @property {{ [name: string]: boolean }} [env] Environments for the test case.\n * @property {boolean} [only] Run only this test case or the subset of test cases with this property.\n */\n\n/**\n * A test case that is expected to fail lint.\n * @typedef {Object} InvalidTestCase\n * @property {string} [name] Name for the test case.\n * @property {string} code Code for the test case.\n * @property {number | Array<TestCaseError | string | RegExp>} errors Expected errors.\n * @property {string | null} [output] The expected code after autofixes are applied. If set to `null`, the test runner will assert that no autofix is suggested.\n * @property {any[]} [options] Options for the test case.\n * @property {{ [name: string]: any }} [settings] Settings for the test case.\n * @property {string} [filename] The fake filename for the test case. Useful for rules that make assertion about filenames.\n * @property {string} [parser] The absolute path for the parser.\n * @property {{ [name: string]: any }} [parserOptions] Options for the parser.\n * @property {{ [name: string]: \"readonly\" | \"writable\" | \"off\" }} [globals] The additional global variables.\n * @property {{ [name: string]: boolean }} [env] Environments for the test case.\n * @property {boolean} [only] Run only this test case or the subset of test cases with this property.\n */\n\n/**\n * A description of a reported error used in a rule tester test.\n * @typedef {Object} TestCaseError\n * @property {string | RegExp} [message] Message.\n * @property {string} [messageId] Message ID.\n * @property {string} [type] The type of the reported AST node.\n * @property {{ [name: string]: string }} [data] The data used to fill the message template.\n * @property {number} [line] The 1-based line number of the reported start location.\n * @property {number} [column] The 1-based column number of the reported start location.\n * @property {number} [endLine] The 1-based line number of the reported end location.\n * @property {number} [endColumn] The 1-based column number of the reported end location.\n */\n/* eslint-enable jsdoc/valid-types -- https://github.com/jsdoc-type-pratt-parser/jsdoc-type-pratt-parser/issues/4#issuecomment-778805577 */\n\n//------------------------------------------------------------------------------\n// Private Members\n//------------------------------------------------------------------------------\n\n/*\n * testerDefaultConfig must not be modified as it allows to reset the tester to\n * the initial default configuration\n */\nconst testerDefaultConfig = { rules: {} };\nlet defaultConfig = { rules: {} };\n\n/*\n * List every parameters possible on a test case that are not related to eslint\n * configuration\n */\nconst RuleTesterParameters = [\n    \"name\",\n    \"code\",\n    \"filename\",\n    \"options\",\n    \"errors\",\n    \"output\",\n    \"only\"\n];\n\n/*\n * All allowed property names in error objects.\n */\nconst errorObjectParameters = new Set([\n    \"message\",\n    \"messageId\",\n    \"data\",\n    \"type\",\n    \"line\",\n    \"column\",\n    \"endLine\",\n    \"endColumn\",\n    \"suggestions\"\n]);\nconst friendlyErrorObjectParameterList = `[${[...errorObjectParameters].map(key => `'${key}'`).join(\", \")}]`;\n\n/*\n * All allowed property names in suggestion objects.\n */\nconst suggestionObjectParameters = new Set([\n    \"desc\",\n    \"messageId\",\n    \"data\",\n    \"output\"\n]);\nconst friendlySuggestionObjectParameterList = `[${[...suggestionObjectParameters].map(key => `'${key}'`).join(\", \")}]`;\n\nconst hasOwnProperty = Function.call.bind(Object.hasOwnProperty);\n\n/**\n * Clones a given value deeply.\n * Note: This ignores `parent` property.\n * @param {any} x A value to clone.\n * @returns {any} A cloned value.\n */\nfunction cloneDeeplyExcludesParent(x) {\n    if (typeof x === \"object\" && x !== null) {\n        if (Array.isArray(x)) {\n            return x.map(cloneDeeplyExcludesParent);\n        }\n\n        const retv = {};\n\n        for (const key in x) {\n            if (key !== \"parent\" && hasOwnProperty(x, key)) {\n                retv[key] = cloneDeeplyExcludesParent(x[key]);\n            }\n        }\n\n        return retv;\n    }\n\n    return x;\n}\n\n/**\n * Freezes a given value deeply.\n * @param {any} x A value to freeze.\n * @returns {void}\n */\nfunction freezeDeeply(x) {\n    if (typeof x === \"object\" && x !== null) {\n        if (Array.isArray(x)) {\n            x.forEach(freezeDeeply);\n        } else {\n            for (const key in x) {\n                if (key !== \"parent\" && hasOwnProperty(x, key)) {\n                    freezeDeeply(x[key]);\n                }\n            }\n        }\n        Object.freeze(x);\n    }\n}\n\n/**\n * Replace control characters by `\\u00xx` form.\n * @param {string} text The text to sanitize.\n * @returns {string} The sanitized text.\n */\nfunction sanitize(text) {\n    if (typeof text !== \"string\") {\n        return \"\";\n    }\n    return text.replace(\n        /[\\u0000-\\u0009\\u000b-\\u001a]/gu, // eslint-disable-line no-control-regex -- Escaping controls\n        c => `\\\\u${c.codePointAt(0).toString(16).padStart(4, \"0\")}`\n    );\n}\n\n/**\n * Define `start`/`end` properties as throwing error.\n * @param {string} objName Object name used for error messages.\n * @param {ASTNode} node The node to define.\n * @returns {void}\n */\nfunction defineStartEndAsError(objName, node) {\n    Object.defineProperties(node, {\n        start: {\n            get() {\n                throw new Error(`Use ${objName}.range[0] instead of ${objName}.start`);\n            },\n            configurable: true,\n            enumerable: false\n        },\n        end: {\n            get() {\n                throw new Error(`Use ${objName}.range[1] instead of ${objName}.end`);\n            },\n            configurable: true,\n            enumerable: false\n        }\n    });\n}\n\n\n/**\n * Define `start`/`end` properties of all nodes of the given AST as throwing error.\n * @param {ASTNode} ast The root node to errorize `start`/`end` properties.\n * @param {Object} [visitorKeys] Visitor keys to be used for traversing the given ast.\n * @returns {void}\n */\nfunction defineStartEndAsErrorInTree(ast, visitorKeys) {\n    Traverser.traverse(ast, { visitorKeys, enter: defineStartEndAsError.bind(null, \"node\") });\n    ast.tokens.forEach(defineStartEndAsError.bind(null, \"token\"));\n    ast.comments.forEach(defineStartEndAsError.bind(null, \"token\"));\n}\n\n/**\n * Wraps the given parser in order to intercept and modify return values from the `parse` and `parseForESLint` methods, for test purposes.\n * In particular, to modify ast nodes, tokens and comments to throw on access to their `start` and `end` properties.\n * @param {Parser} parser Parser object.\n * @returns {Parser} Wrapped parser object.\n */\nfunction wrapParser(parser) {\n\n    if (typeof parser.parseForESLint === \"function\") {\n        return {\n            [parserSymbol]: parser,\n            parseForESLint(...args) {\n                const ret = parser.parseForESLint(...args);\n\n                defineStartEndAsErrorInTree(ret.ast, ret.visitorKeys);\n                return ret;\n            }\n        };\n    }\n\n    return {\n        [parserSymbol]: parser,\n        parse(...args) {\n            const ast = parser.parse(...args);\n\n            defineStartEndAsErrorInTree(ast);\n            return ast;\n        }\n    };\n}\n\n/**\n * Function to replace `SourceCode.prototype.getComments`.\n * @returns {void}\n * @throws {Error} Deprecation message.\n */\nfunction getCommentsDeprecation() {\n    throw new Error(\n        \"`SourceCode#getComments()` is deprecated and will be removed in a future major version. Use `getCommentsBefore()`, `getCommentsAfter()`, and `getCommentsInside()` instead.\"\n    );\n}\n\n//------------------------------------------------------------------------------\n// Public Interface\n//------------------------------------------------------------------------------\n\n// default separators for testing\nconst DESCRIBE = Symbol(\"describe\");\nconst IT = Symbol(\"it\");\nconst IT_ONLY = Symbol(\"itOnly\");\n\n/**\n * This is `it` default handler if `it` don't exist.\n * @this {Mocha}\n * @param {string} text The description of the test case.\n * @param {Function} method The logic of the test case.\n * @throws {Error} Any error upon execution of `method`.\n * @returns {any} Returned value of `method`.\n */\nfunction itDefaultHandler(text, method) {\n    try {\n        return method.call(this);\n    } catch (err) {\n        if (err instanceof assert.AssertionError) {\n            err.message += ` (${util.inspect(err.actual)} ${err.operator} ${util.inspect(err.expected)})`;\n        }\n        throw err;\n    }\n}\n\n/**\n * This is `describe` default handler if `describe` don't exist.\n * @this {Mocha}\n * @param {string} text The description of the test case.\n * @param {Function} method The logic of the test case.\n * @returns {any} Returned value of `method`.\n */\nfunction describeDefaultHandler(text, method) {\n    return method.call(this);\n}\n\n/**\n * Mocha test wrapper.\n */\nclass RuleTester {\n\n    /**\n     * Creates a new instance of RuleTester.\n     * @param {Object} [testerConfig] Optional, extra configuration for the tester\n     */\n    constructor(testerConfig) {\n\n        /**\n         * The configuration to use for this tester. Combination of the tester\n         * configuration and the default configuration.\n         * @type {Object}\n         */\n        this.testerConfig = merge(\n            {},\n            defaultConfig,\n            testerConfig,\n            { rules: { \"rule-tester/validate-ast\": \"error\" } }\n        );\n\n        /**\n         * Rule definitions to define before tests.\n         * @type {Object}\n         */\n        this.rules = {};\n        this.linter = new Linter();\n    }\n\n    /**\n     * Set the configuration to use for all future tests\n     * @param {Object} config the configuration to use.\n     * @throws {TypeError} If non-object config.\n     * @returns {void}\n     */\n    static setDefaultConfig(config) {\n        if (typeof config !== \"object\") {\n            throw new TypeError(\"RuleTester.setDefaultConfig: config must be an object\");\n        }\n        defaultConfig = config;\n\n        // Make sure the rules object exists since it is assumed to exist later\n        defaultConfig.rules = defaultConfig.rules || {};\n    }\n\n    /**\n     * Get the current configuration used for all tests\n     * @returns {Object} the current configuration\n     */\n    static getDefaultConfig() {\n        return defaultConfig;\n    }\n\n    /**\n     * Reset the configuration to the initial configuration of the tester removing\n     * any changes made until now.\n     * @returns {void}\n     */\n    static resetDefaultConfig() {\n        defaultConfig = merge({}, testerDefaultConfig);\n    }\n\n\n    /*\n     * If people use `mocha test.js --watch` command, `describe` and `it` function\n     * instances are different for each execution. So `describe` and `it` should get fresh instance\n     * always.\n     */\n    static get describe() {\n        return (\n            this[DESCRIBE] ||\n            (typeof describe === \"function\" ? describe : describeDefaultHandler)\n        );\n    }\n\n    static set describe(value) {\n        this[DESCRIBE] = value;\n    }\n\n    static get it() {\n        return (\n            this[IT] ||\n            (typeof it === \"function\" ? it : itDefaultHandler)\n        );\n    }\n\n    static set it(value) {\n        this[IT] = value;\n    }\n\n    /**\n     * Adds the `only` property to a test to run it in isolation.\n     * @param {string | ValidTestCase | InvalidTestCase} item A single test to run by itself.\n     * @returns {ValidTestCase | InvalidTestCase} The test with `only` set.\n     */\n    static only(item) {\n        if (typeof item === \"string\") {\n            return { code: item, only: true };\n        }\n\n        return { ...item, only: true };\n    }\n\n    static get itOnly() {\n        if (typeof this[IT_ONLY] === \"function\") {\n            return this[IT_ONLY];\n        }\n        if (typeof this[IT] === \"function\" && typeof this[IT].only === \"function\") {\n            return Function.bind.call(this[IT].only, this[IT]);\n        }\n        if (typeof it === \"function\" && typeof it.only === \"function\") {\n            return Function.bind.call(it.only, it);\n        }\n\n        if (typeof this[DESCRIBE] === \"function\" || typeof this[IT] === \"function\") {\n            throw new Error(\n                \"Set `RuleTester.itOnly` to use `only` with a custom test framework.\\n\" +\n                \"See https://eslint.org/docs/developer-guide/nodejs-api#customizing-ruletester for more.\"\n            );\n        }\n        if (typeof it === \"function\") {\n            throw new Error(\"The current test framework does not support exclusive tests with `only`.\");\n        }\n        throw new Error(\"To use `only`, use RuleTester with a test framework that provides `it.only()` like Mocha.\");\n    }\n\n    static set itOnly(value) {\n        this[IT_ONLY] = value;\n    }\n\n    /**\n     * Define a rule for one particular run of tests.\n     * @param {string} name The name of the rule to define.\n     * @param {Function} rule The rule definition.\n     * @returns {void}\n     */\n    defineRule(name, rule) {\n        this.rules[name] = rule;\n    }\n\n    /**\n     * Adds a new rule test to execute.\n     * @param {string} ruleName The name of the rule to run.\n     * @param {Function} rule The rule to test.\n     * @param {{\n     *   valid: (ValidTestCase | string)[],\n     *   invalid: InvalidTestCase[]\n     * }} test The collection of tests to run.\n     * @throws {TypeError|Error} If non-object `test`, or if a required\n     * scenario of the given type is missing.\n     * @returns {void}\n     */\n    run(ruleName, rule, test) {\n\n        const testerConfig = this.testerConfig,\n            requiredScenarios = [\"valid\", \"invalid\"],\n            scenarioErrors = [],\n            linter = this.linter;\n\n        if (!test || typeof test !== \"object\") {\n            throw new TypeError(`Test Scenarios for rule ${ruleName} : Could not find test scenario object`);\n        }\n\n        requiredScenarios.forEach(scenarioType => {\n            if (!test[scenarioType]) {\n                scenarioErrors.push(`Could not find any ${scenarioType} test scenarios`);\n            }\n        });\n\n        if (scenarioErrors.length > 0) {\n            throw new Error([\n                `Test Scenarios for rule ${ruleName} is invalid:`\n            ].concat(scenarioErrors).join(\"\\n\"));\n        }\n\n\n        linter.defineRule(ruleName, Object.assign({}, rule, {\n\n            // Create a wrapper rule that freezes the `context` properties.\n            create(context) {\n                freezeDeeply(context.options);\n                freezeDeeply(context.settings);\n                freezeDeeply(context.parserOptions);\n\n                return (typeof rule === \"function\" ? rule : rule.create)(context);\n            }\n        }));\n\n        linter.defineRules(this.rules);\n\n        /**\n         * Run the rule for the given item\n         * @param {string|Object} item Item to run the rule against\n         * @throws {Error} If an invalid schema.\n         * @returns {Object} Eslint run result\n         * @private\n         */\n        function runRuleForItem(item) {\n            let config = merge({}, testerConfig),\n                code, filename, output, beforeAST, afterAST;\n\n            if (typeof item === \"string\") {\n                code = item;\n            } else {\n                code = item.code;\n\n                /*\n                 * Assumes everything on the item is a config except for the\n                 * parameters used by this tester\n                 */\n                const itemConfig = { ...item };\n\n                for (const parameter of RuleTesterParameters) {\n                    delete itemConfig[parameter];\n                }\n\n                /*\n                 * Create the config object from the tester config and this item\n                 * specific configurations.\n                 */\n                config = merge(\n                    config,\n                    itemConfig\n                );\n            }\n\n            if (item.filename) {\n                filename = item.filename;\n            }\n\n            if (hasOwnProperty(item, \"options\")) {\n                assert(Array.isArray(item.options), \"options must be an array\");\n                config.rules[ruleName] = [1].concat(item.options);\n            } else {\n                config.rules[ruleName] = 1;\n            }\n\n            const schema = getRuleOptionsSchema(rule);\n\n            /*\n             * Setup AST getters.\n             * The goal is to check whether or not AST was modified when\n             * running the rule under test.\n             */\n            linter.defineRule(\"rule-tester/validate-ast\", () => ({\n                Program(node) {\n                    beforeAST = cloneDeeplyExcludesParent(node);\n                },\n                \"Program:exit\"(node) {\n                    afterAST = node;\n                }\n            }));\n\n            if (typeof config.parser === \"string\") {\n                assert(path.isAbsolute(config.parser), \"Parsers provided as strings to RuleTester must be absolute paths\");\n            } else {\n                config.parser = espreePath;\n            }\n\n            linter.defineParser(config.parser, wrapParser(require(config.parser)));\n\n            if (schema) {\n                ajv.validateSchema(schema);\n\n                if (ajv.errors) {\n                    const errors = ajv.errors.map(error => {\n                        const field = error.dataPath[0] === \".\" ? error.dataPath.slice(1) : error.dataPath;\n\n                        return `\\t${field}: ${error.message}`;\n                    }).join(\"\\n\");\n\n                    throw new Error([`Schema for rule ${ruleName} is invalid:`, errors]);\n                }\n\n                /*\n                 * `ajv.validateSchema` checks for errors in the structure of the schema (by comparing the schema against a \"meta-schema\"),\n                 * and it reports those errors individually. However, there are other types of schema errors that only occur when compiling\n                 * the schema (e.g. using invalid defaults in a schema), and only one of these errors can be reported at a time. As a result,\n                 * the schema is compiled here separately from checking for `validateSchema` errors.\n                 */\n                try {\n                    ajv.compile(schema);\n                } catch (err) {\n                    throw new Error(`Schema for rule ${ruleName} is invalid: ${err.message}`);\n                }\n            }\n\n            validate(config, \"rule-tester\", id => (id === ruleName ? rule : null));\n\n            // Verify the code.\n            const { getComments } = SourceCode.prototype;\n            let messages;\n\n            try {\n                SourceCode.prototype.getComments = getCommentsDeprecation;\n                messages = linter.verify(code, config, filename);\n            } finally {\n                SourceCode.prototype.getComments = getComments;\n            }\n\n            const fatalErrorMessage = messages.find(m => m.fatal);\n\n            assert(!fatalErrorMessage, `A fatal parsing error occurred: ${fatalErrorMessage && fatalErrorMessage.message}`);\n\n            // Verify if autofix makes a syntax error or not.\n            if (messages.some(m => m.fix)) {\n                output = SourceCodeFixer.applyFixes(code, messages).output;\n                const errorMessageInFix = linter.verify(output, config, filename).find(m => m.fatal);\n\n                assert(!errorMessageInFix, [\n                    \"A fatal parsing error occurred in autofix.\",\n                    `Error: ${errorMessageInFix && errorMessageInFix.message}`,\n                    \"Autofix output:\",\n                    output\n                ].join(\"\\n\"));\n            } else {\n                output = code;\n            }\n\n            return {\n                messages,\n                output,\n                beforeAST,\n                afterAST: cloneDeeplyExcludesParent(afterAST)\n            };\n        }\n\n        /**\n         * Check if the AST was changed\n         * @param {ASTNode} beforeAST AST node before running\n         * @param {ASTNode} afterAST AST node after running\n         * @returns {void}\n         * @private\n         */\n        function assertASTDidntChange(beforeAST, afterAST) {\n            if (!equal(beforeAST, afterAST)) {\n                assert.fail(\"Rule should not modify AST.\");\n            }\n        }\n\n        /**\n         * Check if the template is valid or not\n         * all valid cases go through this\n         * @param {string|Object} item Item to run the rule against\n         * @returns {void}\n         * @private\n         */\n        function testValidTemplate(item) {\n            const code = typeof item === \"object\" ? item.code : item;\n\n            assert.ok(typeof code === \"string\", \"Test case must specify a string value for 'code'\");\n            if (item.name) {\n                assert.ok(typeof item.name === \"string\", \"Optional test case property 'name' must be a string\");\n            }\n\n            const result = runRuleForItem(item);\n            const messages = result.messages;\n\n            assert.strictEqual(messages.length, 0, util.format(\"Should have no errors but had %d: %s\",\n                messages.length,\n                util.inspect(messages)));\n\n            assertASTDidntChange(result.beforeAST, result.afterAST);\n        }\n\n        /**\n         * Asserts that the message matches its expected value. If the expected\n         * value is a regular expression, it is checked against the actual\n         * value.\n         * @param {string} actual Actual value\n         * @param {string|RegExp} expected Expected value\n         * @returns {void}\n         * @private\n         */\n        function assertMessageMatches(actual, expected) {\n            if (expected instanceof RegExp) {\n\n                // assert.js doesn't have a built-in RegExp match function\n                assert.ok(\n                    expected.test(actual),\n                    `Expected '${actual}' to match ${expected}`\n                );\n            } else {\n                assert.strictEqual(actual, expected);\n            }\n        }\n\n        /**\n         * Check if the template is invalid or not\n         * all invalid cases go through this.\n         * @param {string|Object} item Item to run the rule against\n         * @returns {void}\n         * @private\n         */\n        function testInvalidTemplate(item) {\n            assert.ok(typeof item.code === \"string\", \"Test case must specify a string value for 'code'\");\n            if (item.name) {\n                assert.ok(typeof item.name === \"string\", \"Optional test case property 'name' must be a string\");\n            }\n            assert.ok(item.errors || item.errors === 0,\n                `Did not specify errors for an invalid test of ${ruleName}`);\n\n            if (Array.isArray(item.errors) && item.errors.length === 0) {\n                assert.fail(\"Invalid cases must have at least one error\");\n            }\n\n            const ruleHasMetaMessages = hasOwnProperty(rule, \"meta\") && hasOwnProperty(rule.meta, \"messages\");\n            const friendlyIDList = ruleHasMetaMessages ? `[${Object.keys(rule.meta.messages).map(key => `'${key}'`).join(\", \")}]` : null;\n\n            const result = runRuleForItem(item);\n            const messages = result.messages;\n\n            if (typeof item.errors === \"number\") {\n\n                if (item.errors === 0) {\n                    assert.fail(\"Invalid cases must have 'error' value greater than 0\");\n                }\n\n                assert.strictEqual(messages.length, item.errors, util.format(\"Should have %d error%s but had %d: %s\",\n                    item.errors,\n                    item.errors === 1 ? \"\" : \"s\",\n                    messages.length,\n                    util.inspect(messages)));\n            } else {\n                assert.strictEqual(\n                    messages.length, item.errors.length, util.format(\n                        \"Should have %d error%s but had %d: %s\",\n                        item.errors.length,\n                        item.errors.length === 1 ? \"\" : \"s\",\n                        messages.length,\n                        util.inspect(messages)\n                    )\n                );\n\n                const hasMessageOfThisRule = messages.some(m => m.ruleId === ruleName);\n\n                for (let i = 0, l = item.errors.length; i < l; i++) {\n                    const error = item.errors[i];\n                    const message = messages[i];\n\n                    assert(hasMessageOfThisRule, \"Error rule name should be the same as the name of the rule being tested\");\n\n                    if (typeof error === \"string\" || error instanceof RegExp) {\n\n                        // Just an error message.\n                        assertMessageMatches(message.message, error);\n                    } else if (typeof error === \"object\" && error !== null) {\n\n                        /*\n                         * Error object.\n                         * This may have a message, messageId, data, node type, line, and/or\n                         * column.\n                         */\n\n                        Object.keys(error).forEach(propertyName => {\n                            assert.ok(\n                                errorObjectParameters.has(propertyName),\n                                `Invalid error property name '${propertyName}'. Expected one of ${friendlyErrorObjectParameterList}.`\n                            );\n                        });\n\n                        if (hasOwnProperty(error, \"message\")) {\n                            assert.ok(!hasOwnProperty(error, \"messageId\"), \"Error should not specify both 'message' and a 'messageId'.\");\n                            assert.ok(!hasOwnProperty(error, \"data\"), \"Error should not specify both 'data' and 'message'.\");\n                            assertMessageMatches(message.message, error.message);\n                        } else if (hasOwnProperty(error, \"messageId\")) {\n                            assert.ok(\n                                ruleHasMetaMessages,\n                                \"Error can not use 'messageId' if rule under test doesn't define 'meta.messages'.\"\n                            );\n                            if (!hasOwnProperty(rule.meta.messages, error.messageId)) {\n                                assert(false, `Invalid messageId '${error.messageId}'. Expected one of ${friendlyIDList}.`);\n                            }\n                            assert.strictEqual(\n                                message.messageId,\n                                error.messageId,\n                                `messageId '${message.messageId}' does not match expected messageId '${error.messageId}'.`\n                            );\n                            if (hasOwnProperty(error, \"data\")) {\n\n                                /*\n                                 *  if data was provided, then directly compare the returned message to a synthetic\n                                 *  interpolated message using the same message ID and data provided in the test.\n                                 *  See https://github.com/eslint/eslint/issues/9890 for context.\n                                 */\n                                const unformattedOriginalMessage = rule.meta.messages[error.messageId];\n                                const rehydratedMessage = interpolate(unformattedOriginalMessage, error.data);\n\n                                assert.strictEqual(\n                                    message.message,\n                                    rehydratedMessage,\n                                    `Hydrated message \"${rehydratedMessage}\" does not match \"${message.message}\"`\n                                );\n                            }\n                        }\n\n                        assert.ok(\n                            hasOwnProperty(error, \"data\") ? hasOwnProperty(error, \"messageId\") : true,\n                            \"Error must specify 'messageId' if 'data' is used.\"\n                        );\n\n                        if (error.type) {\n                            assert.strictEqual(message.nodeType, error.type, `Error type should be ${error.type}, found ${message.nodeType}`);\n                        }\n\n                        if (hasOwnProperty(error, \"line\")) {\n                            assert.strictEqual(message.line, error.line, `Error line should be ${error.line}`);\n                        }\n\n                        if (hasOwnProperty(error, \"column\")) {\n                            assert.strictEqual(message.column, error.column, `Error column should be ${error.column}`);\n                        }\n\n                        if (hasOwnProperty(error, \"endLine\")) {\n                            assert.strictEqual(message.endLine, error.endLine, `Error endLine should be ${error.endLine}`);\n                        }\n\n                        if (hasOwnProperty(error, \"endColumn\")) {\n                            assert.strictEqual(message.endColumn, error.endColumn, `Error endColumn should be ${error.endColumn}`);\n                        }\n\n                        if (hasOwnProperty(error, \"suggestions\")) {\n\n                            // Support asserting there are no suggestions\n                            if (!error.suggestions || (Array.isArray(error.suggestions) && error.suggestions.length === 0)) {\n                                if (Array.isArray(message.suggestions) && message.suggestions.length > 0) {\n                                    assert.fail(`Error should have no suggestions on error with message: \"${message.message}\"`);\n                                }\n                            } else {\n                                assert.strictEqual(Array.isArray(message.suggestions), true, `Error should have an array of suggestions. Instead received \"${message.suggestions}\" on error with message: \"${message.message}\"`);\n                                assert.strictEqual(message.suggestions.length, error.suggestions.length, `Error should have ${error.suggestions.length} suggestions. Instead found ${message.suggestions.length} suggestions`);\n\n                                error.suggestions.forEach((expectedSuggestion, index) => {\n                                    assert.ok(\n                                        typeof expectedSuggestion === \"object\" && expectedSuggestion !== null,\n                                        \"Test suggestion in 'suggestions' array must be an object.\"\n                                    );\n                                    Object.keys(expectedSuggestion).forEach(propertyName => {\n                                        assert.ok(\n                                            suggestionObjectParameters.has(propertyName),\n                                            `Invalid suggestion property name '${propertyName}'. Expected one of ${friendlySuggestionObjectParameterList}.`\n                                        );\n                                    });\n\n                                    const actualSuggestion = message.suggestions[index];\n                                    const suggestionPrefix = `Error Suggestion at index ${index} :`;\n\n                                    if (hasOwnProperty(expectedSuggestion, \"desc\")) {\n                                        assert.ok(\n                                            !hasOwnProperty(expectedSuggestion, \"data\"),\n                                            `${suggestionPrefix} Test should not specify both 'desc' and 'data'.`\n                                        );\n                                        assert.strictEqual(\n                                            actualSuggestion.desc,\n                                            expectedSuggestion.desc,\n                                            `${suggestionPrefix} desc should be \"${expectedSuggestion.desc}\" but got \"${actualSuggestion.desc}\" instead.`\n                                        );\n                                    }\n\n                                    if (hasOwnProperty(expectedSuggestion, \"messageId\")) {\n                                        assert.ok(\n                                            ruleHasMetaMessages,\n                                            `${suggestionPrefix} Test can not use 'messageId' if rule under test doesn't define 'meta.messages'.`\n                                        );\n                                        assert.ok(\n                                            hasOwnProperty(rule.meta.messages, expectedSuggestion.messageId),\n                                            `${suggestionPrefix} Test has invalid messageId '${expectedSuggestion.messageId}', the rule under test allows only one of ${friendlyIDList}.`\n                                        );\n                                        assert.strictEqual(\n                                            actualSuggestion.messageId,\n                                            expectedSuggestion.messageId,\n                                            `${suggestionPrefix} messageId should be '${expectedSuggestion.messageId}' but got '${actualSuggestion.messageId}' instead.`\n                                        );\n                                        if (hasOwnProperty(expectedSuggestion, \"data\")) {\n                                            const unformattedMetaMessage = rule.meta.messages[expectedSuggestion.messageId];\n                                            const rehydratedDesc = interpolate(unformattedMetaMessage, expectedSuggestion.data);\n\n                                            assert.strictEqual(\n                                                actualSuggestion.desc,\n                                                rehydratedDesc,\n                                                `${suggestionPrefix} Hydrated test desc \"${rehydratedDesc}\" does not match received desc \"${actualSuggestion.desc}\".`\n                                            );\n                                        }\n                                    } else {\n                                        assert.ok(\n                                            !hasOwnProperty(expectedSuggestion, \"data\"),\n                                            `${suggestionPrefix} Test must specify 'messageId' if 'data' is used.`\n                                        );\n                                    }\n\n                                    if (hasOwnProperty(expectedSuggestion, \"output\")) {\n                                        const codeWithAppliedSuggestion = SourceCodeFixer.applyFixes(item.code, [actualSuggestion]).output;\n\n                                        assert.strictEqual(codeWithAppliedSuggestion, expectedSuggestion.output, `Expected the applied suggestion fix to match the test suggestion output for suggestion at index: ${index} on error with message: \"${message.message}\"`);\n                                    }\n                                });\n                            }\n                        }\n                    } else {\n\n                        // Message was an unexpected type\n                        assert.fail(`Error should be a string, object, or RegExp, but found (${util.inspect(message)})`);\n                    }\n                }\n            }\n\n            if (hasOwnProperty(item, \"output\")) {\n                if (item.output === null) {\n                    assert.strictEqual(\n                        result.output,\n                        item.code,\n                        \"Expected no autofixes to be suggested\"\n                    );\n                } else {\n                    assert.strictEqual(result.output, item.output, \"Output is incorrect.\");\n                }\n            } else {\n                assert.strictEqual(\n                    result.output,\n                    item.code,\n                    \"The rule fixed the code. Please add 'output' property.\"\n                );\n            }\n\n            assertASTDidntChange(result.beforeAST, result.afterAST);\n        }\n\n        /*\n         * This creates a mocha test suite and pipes all supplied info through\n         * one of the templates above.\n         */\n        this.constructor.describe(ruleName, () => {\n            this.constructor.describe(\"valid\", () => {\n                test.valid.forEach(valid => {\n                    this.constructor[valid.only ? \"itOnly\" : \"it\"](\n                        sanitize(typeof valid === \"object\" ? valid.name || valid.code : valid),\n                        () => {\n                            testValidTemplate(valid);\n                        }\n                    );\n                });\n            });\n\n            this.constructor.describe(\"invalid\", () => {\n                test.invalid.forEach(invalid => {\n                    this.constructor[invalid.only ? \"itOnly\" : \"it\"](\n                        sanitize(invalid.name || invalid.code),\n                        () => {\n                            testInvalidTemplate(invalid);\n                        }\n                    );\n                });\n            });\n        });\n    }\n}\n\nRuleTester[DESCRIBE] = RuleTester[IT] = RuleTester[IT_ONLY] = null;\n\nmodule.exports = RuleTester;\n/lib/rules/indent.js\u0000\u0001+c/**\n * @fileoverview This rule sets a specific indentation style and width for your code\n *\n * @author Teddy Katz\n * @author Vitaly Puzrin\n * @author Gyandeep Singh\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst createTree = require(\"functional-red-black-tree\");\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\nconst KNOWN_NODES = new Set([\n    \"AssignmentExpression\",\n    \"AssignmentPattern\",\n    \"ArrayExpression\",\n    \"ArrayPattern\",\n    \"ArrowFunctionExpression\",\n    \"AwaitExpression\",\n    \"BlockStatement\",\n    \"BinaryExpression\",\n    \"BreakStatement\",\n    \"CallExpression\",\n    \"CatchClause\",\n    \"ChainExpression\",\n    \"ClassBody\",\n    \"ClassDeclaration\",\n    \"ClassExpression\",\n    \"ConditionalExpression\",\n    \"ContinueStatement\",\n    \"DoWhileStatement\",\n    \"DebuggerStatement\",\n    \"EmptyStatement\",\n    \"ExperimentalRestProperty\",\n    \"ExperimentalSpreadProperty\",\n    \"ExpressionStatement\",\n    \"ForStatement\",\n    \"ForInStatement\",\n    \"ForOfStatement\",\n    \"FunctionDeclaration\",\n    \"FunctionExpression\",\n    \"Identifier\",\n    \"IfStatement\",\n    \"Literal\",\n    \"LabeledStatement\",\n    \"LogicalExpression\",\n    \"MemberExpression\",\n    \"MetaProperty\",\n    \"MethodDefinition\",\n    \"NewExpression\",\n    \"ObjectExpression\",\n    \"ObjectPattern\",\n    \"PrivateIdentifier\",\n    \"Program\",\n    \"Property\",\n    \"PropertyDefinition\",\n    \"RestElement\",\n    \"ReturnStatement\",\n    \"SequenceExpression\",\n    \"SpreadElement\",\n    \"StaticBlock\",\n    \"Super\",\n    \"SwitchCase\",\n    \"SwitchStatement\",\n    \"TaggedTemplateExpression\",\n    \"TemplateElement\",\n    \"TemplateLiteral\",\n    \"ThisExpression\",\n    \"ThrowStatement\",\n    \"TryStatement\",\n    \"UnaryExpression\",\n    \"UpdateExpression\",\n    \"VariableDeclaration\",\n    \"VariableDeclarator\",\n    \"WhileStatement\",\n    \"WithStatement\",\n    \"YieldExpression\",\n    \"JSXFragment\",\n    \"JSXOpeningFragment\",\n    \"JSXClosingFragment\",\n    \"JSXIdentifier\",\n    \"JSXNamespacedName\",\n    \"JSXMemberExpression\",\n    \"JSXEmptyExpression\",\n    \"JSXExpressionContainer\",\n    \"JSXElement\",\n    \"JSXClosingElement\",\n    \"JSXOpeningElement\",\n    \"JSXAttribute\",\n    \"JSXSpreadAttribute\",\n    \"JSXText\",\n    \"ExportDefaultDeclaration\",\n    \"ExportNamedDeclaration\",\n    \"ExportAllDeclaration\",\n    \"ExportSpecifier\",\n    \"ImportDeclaration\",\n    \"ImportSpecifier\",\n    \"ImportDefaultSpecifier\",\n    \"ImportNamespaceSpecifier\",\n    \"ImportExpression\"\n]);\n\n/*\n * General rule strategy:\n * 1. An OffsetStorage instance stores a map of desired offsets, where each token has a specified offset from another\n *    specified token or to the first column.\n * 2. As the AST is traversed, modify the desired offsets of tokens accordingly. For example, when entering a\n *    BlockStatement, offset all of the tokens in the BlockStatement by 1 indent level from the opening curly\n *    brace of the BlockStatement.\n * 3. After traversing the AST, calculate the expected indentation levels of every token according to the\n *    OffsetStorage container.\n * 4. For each line, compare the expected indentation of the first token to the actual indentation in the file,\n *    and report the token if the two values are not equal.\n */\n\n\n/**\n * A mutable balanced binary search tree that stores (key, value) pairs. The keys are numeric, and must be unique.\n * This is intended to be a generic wrapper around a balanced binary search tree library, so that the underlying implementation\n * can easily be swapped out.\n */\nclass BinarySearchTree {\n\n    /**\n     * Creates an empty tree\n     */\n    constructor() {\n        this._rbTree = createTree();\n    }\n\n    /**\n     * Inserts an entry into the tree.\n     * @param {number} key The entry's key\n     * @param {any} value The entry's value\n     * @returns {void}\n     */\n    insert(key, value) {\n        const iterator = this._rbTree.find(key);\n\n        if (iterator.valid) {\n            this._rbTree = iterator.update(value);\n        } else {\n            this._rbTree = this._rbTree.insert(key, value);\n        }\n    }\n\n    /**\n     * Finds the entry with the largest key less than or equal to the provided key\n     * @param {number} key The provided key\n     * @returns {{key: number, value: *}|null} The found entry, or null if no such entry exists.\n     */\n    findLe(key) {\n        const iterator = this._rbTree.le(key);\n\n        return iterator && { key: iterator.key, value: iterator.value };\n    }\n\n    /**\n     * Deletes all of the keys in the interval [start, end)\n     * @param {number} start The start of the range\n     * @param {number} end The end of the range\n     * @returns {void}\n     */\n    deleteRange(start, end) {\n\n        // Exit without traversing the tree if the range has zero size.\n        if (start === end) {\n            return;\n        }\n        const iterator = this._rbTree.ge(start);\n\n        while (iterator.valid && iterator.key < end) {\n            this._rbTree = this._rbTree.remove(iterator.key);\n            iterator.next();\n        }\n    }\n}\n\n/**\n * A helper class to get token-based info related to indentation\n */\nclass TokenInfo {\n\n    /**\n     * @param {SourceCode} sourceCode A SourceCode object\n     */\n    constructor(sourceCode) {\n        this.sourceCode = sourceCode;\n        this.firstTokensByLineNumber = sourceCode.tokensAndComments.reduce((map, token) => {\n            if (!map.has(token.loc.start.line)) {\n                map.set(token.loc.start.line, token);\n            }\n            if (!map.has(token.loc.end.line) && sourceCode.text.slice(token.range[1] - token.loc.end.column, token.range[1]).trim()) {\n                map.set(token.loc.end.line, token);\n            }\n            return map;\n        }, new Map());\n    }\n\n    /**\n     * Gets the first token on a given token's line\n     * @param {Token|ASTNode} token a node or token\n     * @returns {Token} The first token on the given line\n     */\n    getFirstTokenOfLine(token) {\n        return this.firstTokensByLineNumber.get(token.loc.start.line);\n    }\n\n    /**\n     * Determines whether a token is the first token in its line\n     * @param {Token} token The token\n     * @returns {boolean} `true` if the token is the first on its line\n     */\n    isFirstTokenOfLine(token) {\n        return this.getFirstTokenOfLine(token) === token;\n    }\n\n    /**\n     * Get the actual indent of a token\n     * @param {Token} token Token to examine. This should be the first token on its line.\n     * @returns {string} The indentation characters that precede the token\n     */\n    getTokenIndent(token) {\n        return this.sourceCode.text.slice(token.range[0] - token.loc.start.column, token.range[0]);\n    }\n}\n\n/**\n * A class to store information on desired offsets of tokens from each other\n */\nclass OffsetStorage {\n\n    /**\n     * @param {TokenInfo} tokenInfo a TokenInfo instance\n     * @param {number} indentSize The desired size of each indentation level\n     * @param {string} indentType The indentation character\n     */\n    constructor(tokenInfo, indentSize, indentType) {\n        this._tokenInfo = tokenInfo;\n        this._indentSize = indentSize;\n        this._indentType = indentType;\n\n        this._tree = new BinarySearchTree();\n        this._tree.insert(0, { offset: 0, from: null, force: false });\n\n        this._lockedFirstTokens = new WeakMap();\n        this._desiredIndentCache = new WeakMap();\n        this._ignoredTokens = new WeakSet();\n    }\n\n    _getOffsetDescriptor(token) {\n        return this._tree.findLe(token.range[0]).value;\n    }\n\n    /**\n     * Sets the offset column of token B to match the offset column of token A.\n     * - **WARNING**: This matches a *column*, even if baseToken is not the first token on its line. In\n     * most cases, `setDesiredOffset` should be used instead.\n     * @param {Token} baseToken The first token\n     * @param {Token} offsetToken The second token, whose offset should be matched to the first token\n     * @returns {void}\n     */\n    matchOffsetOf(baseToken, offsetToken) {\n\n        /*\n         * lockedFirstTokens is a map from a token whose indentation is controlled by the \"first\" option to\n         * the token that it depends on. For example, with the `ArrayExpression: first` option, the first\n         * token of each element in the array after the first will be mapped to the first token of the first\n         * element. The desired indentation of each of these tokens is computed based on the desired indentation\n         * of the \"first\" element, rather than through the normal offset mechanism.\n         */\n        this._lockedFirstTokens.set(offsetToken, baseToken);\n    }\n\n    /**\n     * Sets the desired offset of a token.\n     *\n     * This uses a line-based offset collapsing behavior to handle tokens on the same line.\n     * For example, consider the following two cases:\n     *\n     * (\n     *     [\n     *         bar\n     *     ]\n     * )\n     *\n     * ([\n     *     bar\n     * ])\n     *\n     * Based on the first case, it's clear that the `bar` token needs to have an offset of 1 indent level (4 spaces) from\n     * the `[` token, and the `[` token has to have an offset of 1 indent level from the `(` token. Since the `(` token is\n     * the first on its line (with an indent of 0 spaces), the `bar` token needs to be offset by 2 indent levels (8 spaces)\n     * from the start of its line.\n     *\n     * However, in the second case `bar` should only be indented by 4 spaces. This is because the offset of 1 indent level\n     * between the `(` and the `[` tokens gets \"collapsed\" because the two tokens are on the same line. As a result, the\n     * `(` token is mapped to the `[` token with an offset of 0, and the rule correctly decides that `bar` should be indented\n     * by 1 indent level from the start of the line.\n     *\n     * This is useful because rule listeners can usually just call `setDesiredOffset` for all the tokens in the node,\n     * without needing to check which lines those tokens are on.\n     *\n     * Note that since collapsing only occurs when two tokens are on the same line, there are a few cases where non-intuitive\n     * behavior can occur. For example, consider the following cases:\n     *\n     * foo(\n     * ).\n     *     bar(\n     *         baz\n     *     )\n     *\n     * foo(\n     * ).bar(\n     *     baz\n     * )\n     *\n     * Based on the first example, it would seem that `bar` should be offset by 1 indent level from `foo`, and `baz`\n     * should be offset by 1 indent level from `bar`. However, this is not correct, because it would result in `baz`\n     * being indented by 2 indent levels in the second case (since `foo`, `bar`, and `baz` are all on separate lines, no\n     * collapsing would occur).\n     *\n     * Instead, the correct way would be to offset `baz` by 1 level from `bar`, offset `bar` by 1 level from the `)`, and\n     * offset the `)` by 0 levels from `foo`. This ensures that the offset between `bar` and the `)` are correctly collapsed\n     * in the second case.\n     * @param {Token} token The token\n     * @param {Token} fromToken The token that `token` should be offset from\n     * @param {number} offset The desired indent level\n     * @returns {void}\n     */\n    setDesiredOffset(token, fromToken, offset) {\n        return this.setDesiredOffsets(token.range, fromToken, offset);\n    }\n\n    /**\n     * Sets the desired offset of all tokens in a range\n     * It's common for node listeners in this file to need to apply the same offset to a large, contiguous range of tokens.\n     * Moreover, the offset of any given token is usually updated multiple times (roughly once for each node that contains\n     * it). This means that the offset of each token is updated O(AST depth) times.\n     * It would not be performant to store and update the offsets for each token independently, because the rule would end\n     * up having a time complexity of O(number of tokens * AST depth), which is quite slow for large files.\n     *\n     * Instead, the offset tree is represented as a collection of contiguous offset ranges in a file. For example, the following\n     * list could represent the state of the offset tree at a given point:\n     *\n     * - Tokens starting in the interval [0, 15) are aligned with the beginning of the file\n     * - Tokens starting in the interval [15, 30) are offset by 1 indent level from the `bar` token\n     * - Tokens starting in the interval [30, 43) are offset by 1 indent level from the `foo` token\n     * - Tokens starting in the interval [43, 820) are offset by 2 indent levels from the `bar` token\n     * - Tokens starting in the interval [820, ∞) are offset by 1 indent level from the `baz` token\n     *\n     * The `setDesiredOffsets` methods inserts ranges like the ones above. The third line above would be inserted by using:\n     * `setDesiredOffsets([30, 43], fooToken, 1);`\n     * @param {[number, number]} range A [start, end] pair. All tokens with range[0] <= token.start < range[1] will have the offset applied.\n     * @param {Token} fromToken The token that this is offset from\n     * @param {number} offset The desired indent level\n     * @param {boolean} force `true` if this offset should not use the normal collapsing behavior. This should almost always be false.\n     * @returns {void}\n     */\n    setDesiredOffsets(range, fromToken, offset, force) {\n\n        /*\n         * Offset ranges are stored as a collection of nodes, where each node maps a numeric key to an offset\n         * descriptor. The tree for the example above would have the following nodes:\n         *\n         * * key: 0, value: { offset: 0, from: null }\n         * * key: 15, value: { offset: 1, from: barToken }\n         * * key: 30, value: { offset: 1, from: fooToken }\n         * * key: 43, value: { offset: 2, from: barToken }\n         * * key: 820, value: { offset: 1, from: bazToken }\n         *\n         * To find the offset descriptor for any given token, one needs to find the node with the largest key\n         * which is <= token.start. To make this operation fast, the nodes are stored in a balanced binary\n         * search tree indexed by key.\n         */\n\n        const descriptorToInsert = { offset, from: fromToken, force };\n\n        const descriptorAfterRange = this._tree.findLe(range[1]).value;\n\n        const fromTokenIsInRange = fromToken && fromToken.range[0] >= range[0] && fromToken.range[1] <= range[1];\n        const fromTokenDescriptor = fromTokenIsInRange && this._getOffsetDescriptor(fromToken);\n\n        // First, remove any existing nodes in the range from the tree.\n        this._tree.deleteRange(range[0] + 1, range[1]);\n\n        // Insert a new node into the tree for this range\n        this._tree.insert(range[0], descriptorToInsert);\n\n        /*\n         * To avoid circular offset dependencies, keep the `fromToken` token mapped to whatever it was mapped to previously,\n         * even if it's in the current range.\n         */\n        if (fromTokenIsInRange) {\n            this._tree.insert(fromToken.range[0], fromTokenDescriptor);\n            this._tree.insert(fromToken.range[1], descriptorToInsert);\n        }\n\n        /*\n         * To avoid modifying the offset of tokens after the range, insert another node to keep the offset of the following\n         * tokens the same as it was before.\n         */\n        this._tree.insert(range[1], descriptorAfterRange);\n    }\n\n    /**\n     * Gets the desired indent of a token\n     * @param {Token} token The token\n     * @returns {string} The desired indent of the token\n     */\n    getDesiredIndent(token) {\n        if (!this._desiredIndentCache.has(token)) {\n\n            if (this._ignoredTokens.has(token)) {\n\n                /*\n                 * If the token is ignored, use the actual indent of the token as the desired indent.\n                 * This ensures that no errors are reported for this token.\n                 */\n                this._desiredIndentCache.set(\n                    token,\n                    this._tokenInfo.getTokenIndent(token)\n                );\n            } else if (this._lockedFirstTokens.has(token)) {\n                const firstToken = this._lockedFirstTokens.get(token);\n\n                this._desiredIndentCache.set(\n                    token,\n\n                    // (indentation for the first element's line)\n                    this.getDesiredIndent(this._tokenInfo.getFirstTokenOfLine(firstToken)) +\n\n                        // (space between the start of the first element's line and the first element)\n                        this._indentType.repeat(firstToken.loc.start.column - this._tokenInfo.getFirstTokenOfLine(firstToken).loc.start.column)\n                );\n            } else {\n                const offsetInfo = this._getOffsetDescriptor(token);\n                const offset = (\n                    offsetInfo.from &&\n                    offsetInfo.from.loc.start.line === token.loc.start.line &&\n                    !/^\\s*?\\n/u.test(token.value) &&\n                    !offsetInfo.force\n                ) ? 0 : offsetInfo.offset * this._indentSize;\n\n                this._desiredIndentCache.set(\n                    token,\n                    (offsetInfo.from ? this.getDesiredIndent(offsetInfo.from) : \"\") + this._indentType.repeat(offset)\n                );\n            }\n        }\n        return this._desiredIndentCache.get(token);\n    }\n\n    /**\n     * Ignores a token, preventing it from being reported.\n     * @param {Token} token The token\n     * @returns {void}\n     */\n    ignoreToken(token) {\n        if (this._tokenInfo.isFirstTokenOfLine(token)) {\n            this._ignoredTokens.add(token);\n        }\n    }\n\n    /**\n     * Gets the first token that the given token's indentation is dependent on\n     * @param {Token} token The token\n     * @returns {Token} The token that the given token depends on, or `null` if the given token is at the top level\n     */\n    getFirstDependency(token) {\n        return this._getOffsetDescriptor(token).from;\n    }\n}\n\nconst ELEMENT_LIST_SCHEMA = {\n    oneOf: [\n        {\n            type: \"integer\",\n            minimum: 0\n        },\n        {\n            enum: [\"first\", \"off\"]\n        }\n    ]\n};\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"layout\",\n\n        docs: {\n            description: \"enforce consistent indentation\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/indent\"\n        },\n\n        fixable: \"whitespace\",\n\n        schema: [\n            {\n                oneOf: [\n                    {\n                        enum: [\"tab\"]\n                    },\n                    {\n                        type: \"integer\",\n                        minimum: 0\n                    }\n                ]\n            },\n            {\n                type: \"object\",\n                properties: {\n                    SwitchCase: {\n                        type: \"integer\",\n                        minimum: 0,\n                        default: 0\n                    },\n                    VariableDeclarator: {\n                        oneOf: [\n                            ELEMENT_LIST_SCHEMA,\n                            {\n                                type: \"object\",\n                                properties: {\n                                    var: ELEMENT_LIST_SCHEMA,\n                                    let: ELEMENT_LIST_SCHEMA,\n                                    const: ELEMENT_LIST_SCHEMA\n                                },\n                                additionalProperties: false\n                            }\n                        ]\n                    },\n                    outerIIFEBody: {\n                        oneOf: [\n                            {\n                                type: \"integer\",\n                                minimum: 0\n                            },\n                            {\n                                enum: [\"off\"]\n                            }\n                        ]\n                    },\n                    MemberExpression: {\n                        oneOf: [\n                            {\n                                type: \"integer\",\n                                minimum: 0\n                            },\n                            {\n                                enum: [\"off\"]\n                            }\n                        ]\n                    },\n                    FunctionDeclaration: {\n                        type: \"object\",\n                        properties: {\n                            parameters: ELEMENT_LIST_SCHEMA,\n                            body: {\n                                type: \"integer\",\n                                minimum: 0\n                            }\n                        },\n                        additionalProperties: false\n                    },\n                    FunctionExpression: {\n                        type: \"object\",\n                        properties: {\n                            parameters: ELEMENT_LIST_SCHEMA,\n                            body: {\n                                type: \"integer\",\n                                minimum: 0\n                            }\n                        },\n                        additionalProperties: false\n                    },\n                    StaticBlock: {\n                        type: \"object\",\n                        properties: {\n                            body: {\n                                type: \"integer\",\n                                minimum: 0\n                            }\n                        },\n                        additionalProperties: false\n                    },\n                    CallExpression: {\n                        type: \"object\",\n                        properties: {\n                            arguments: ELEMENT_LIST_SCHEMA\n                        },\n                        additionalProperties: false\n                    },\n                    ArrayExpression: ELEMENT_LIST_SCHEMA,\n                    ObjectExpression: ELEMENT_LIST_SCHEMA,\n                    ImportDeclaration: ELEMENT_LIST_SCHEMA,\n                    flatTernaryExpressions: {\n                        type: \"boolean\",\n                        default: false\n                    },\n                    offsetTernaryExpressions: {\n                        type: \"boolean\",\n                        default: false\n                    },\n                    ignoredNodes: {\n                        type: \"array\",\n                        items: {\n                            type: \"string\",\n                            not: {\n                                pattern: \":exit$\"\n                            }\n                        }\n                    },\n                    ignoreComments: {\n                        type: \"boolean\",\n                        default: false\n                    }\n                },\n                additionalProperties: false\n            }\n        ],\n        messages: {\n            wrongIndentation: \"Expected indentation of {{expected}} but found {{actual}}.\"\n        }\n    },\n\n    create(context) {\n        const DEFAULT_VARIABLE_INDENT = 1;\n        const DEFAULT_PARAMETER_INDENT = 1;\n        const DEFAULT_FUNCTION_BODY_INDENT = 1;\n\n        let indentType = \"space\";\n        let indentSize = 4;\n        const options = {\n            SwitchCase: 0,\n            VariableDeclarator: {\n                var: DEFAULT_VARIABLE_INDENT,\n                let: DEFAULT_VARIABLE_INDENT,\n                const: DEFAULT_VARIABLE_INDENT\n            },\n            outerIIFEBody: 1,\n            FunctionDeclaration: {\n                parameters: DEFAULT_PARAMETER_INDENT,\n                body: DEFAULT_FUNCTION_BODY_INDENT\n            },\n            FunctionExpression: {\n                parameters: DEFAULT_PARAMETER_INDENT,\n                body: DEFAULT_FUNCTION_BODY_INDENT\n            },\n            StaticBlock: {\n                body: DEFAULT_FUNCTION_BODY_INDENT\n            },\n            CallExpression: {\n                arguments: DEFAULT_PARAMETER_INDENT\n            },\n            MemberExpression: 1,\n            ArrayExpression: 1,\n            ObjectExpression: 1,\n            ImportDeclaration: 1,\n            flatTernaryExpressions: false,\n            ignoredNodes: [],\n            ignoreComments: false\n        };\n\n        if (context.options.length) {\n            if (context.options[0] === \"tab\") {\n                indentSize = 1;\n                indentType = \"tab\";\n            } else {\n                indentSize = context.options[0];\n                indentType = \"space\";\n            }\n\n            if (context.options[1]) {\n                Object.assign(options, context.options[1]);\n\n                if (typeof options.VariableDeclarator === \"number\" || options.VariableDeclarator === \"first\") {\n                    options.VariableDeclarator = {\n                        var: options.VariableDeclarator,\n                        let: options.VariableDeclarator,\n                        const: options.VariableDeclarator\n                    };\n                }\n            }\n        }\n\n        const sourceCode = context.getSourceCode();\n        const tokenInfo = new TokenInfo(sourceCode);\n        const offsets = new OffsetStorage(tokenInfo, indentSize, indentType === \"space\" ? \" \" : \"\\t\");\n        const parameterParens = new WeakSet();\n\n        /**\n         * Creates an error message for a line, given the expected/actual indentation.\n         * @param {int} expectedAmount The expected amount of indentation characters for this line\n         * @param {int} actualSpaces The actual number of indentation spaces that were found on this line\n         * @param {int} actualTabs The actual number of indentation tabs that were found on this line\n         * @returns {string} An error message for this line\n         */\n        function createErrorMessageData(expectedAmount, actualSpaces, actualTabs) {\n            const expectedStatement = `${expectedAmount} ${indentType}${expectedAmount === 1 ? \"\" : \"s\"}`; // e.g. \"2 tabs\"\n            const foundSpacesWord = `space${actualSpaces === 1 ? \"\" : \"s\"}`; // e.g. \"space\"\n            const foundTabsWord = `tab${actualTabs === 1 ? \"\" : \"s\"}`; // e.g. \"tabs\"\n            let foundStatement;\n\n            if (actualSpaces > 0) {\n\n                /*\n                 * Abbreviate the message if the expected indentation is also spaces.\n                 * e.g. 'Expected 4 spaces but found 2' rather than 'Expected 4 spaces but found 2 spaces'\n                 */\n                foundStatement = indentType === \"space\" ? actualSpaces : `${actualSpaces} ${foundSpacesWord}`;\n            } else if (actualTabs > 0) {\n                foundStatement = indentType === \"tab\" ? actualTabs : `${actualTabs} ${foundTabsWord}`;\n            } else {\n                foundStatement = \"0\";\n            }\n            return {\n                expected: expectedStatement,\n                actual: foundStatement\n            };\n        }\n\n        /**\n         * Reports a given indent violation\n         * @param {Token} token Token violating the indent rule\n         * @param {string} neededIndent Expected indentation string\n         * @returns {void}\n         */\n        function report(token, neededIndent) {\n            const actualIndent = Array.from(tokenInfo.getTokenIndent(token));\n            const numSpaces = actualIndent.filter(char => char === \" \").length;\n            const numTabs = actualIndent.filter(char => char === \"\\t\").length;\n\n            context.report({\n                node: token,\n                messageId: \"wrongIndentation\",\n                data: createErrorMessageData(neededIndent.length, numSpaces, numTabs),\n                loc: {\n                    start: { line: token.loc.start.line, column: 0 },\n                    end: { line: token.loc.start.line, column: token.loc.start.column }\n                },\n                fix(fixer) {\n                    const range = [token.range[0] - token.loc.start.column, token.range[0]];\n                    const newText = neededIndent;\n\n                    return fixer.replaceTextRange(range, newText);\n                }\n            });\n        }\n\n        /**\n         * Checks if a token's indentation is correct\n         * @param {Token} token Token to examine\n         * @param {string} desiredIndent Desired indentation of the string\n         * @returns {boolean} `true` if the token's indentation is correct\n         */\n        function validateTokenIndent(token, desiredIndent) {\n            const indentation = tokenInfo.getTokenIndent(token);\n\n            return indentation === desiredIndent ||\n\n                // To avoid conflicts with no-mixed-spaces-and-tabs, don't report mixed spaces and tabs.\n                indentation.includes(\" \") && indentation.includes(\"\\t\");\n        }\n\n        /**\n         * Check to see if the node is a file level IIFE\n         * @param {ASTNode} node The function node to check.\n         * @returns {boolean} True if the node is the outer IIFE\n         */\n        function isOuterIIFE(node) {\n\n            /*\n             * Verify that the node is an IIFE\n             */\n            if (!node.parent || node.parent.type !== \"CallExpression\" || node.parent.callee !== node) {\n                return false;\n            }\n\n            /*\n             * Navigate legal ancestors to determine whether this IIFE is outer.\n             * A \"legal ancestor\" is an expression or statement that causes the function to get executed immediately.\n             * For example, `!(function(){})()` is an outer IIFE even though it is preceded by a ! operator.\n             */\n            let statement = node.parent && node.parent.parent;\n\n            while (\n                statement.type === \"UnaryExpression\" && [\"!\", \"~\", \"+\", \"-\"].indexOf(statement.operator) > -1 ||\n                statement.type === \"AssignmentExpression\" ||\n                statement.type === \"LogicalExpression\" ||\n                statement.type === \"SequenceExpression\" ||\n                statement.type === \"VariableDeclarator\"\n            ) {\n                statement = statement.parent;\n            }\n\n            return (statement.type === \"ExpressionStatement\" || statement.type === \"VariableDeclaration\") && statement.parent.type === \"Program\";\n        }\n\n        /**\n         * Counts the number of linebreaks that follow the last non-whitespace character in a string\n         * @param {string} string The string to check\n         * @returns {number} The number of JavaScript linebreaks that follow the last non-whitespace character,\n         * or the total number of linebreaks if the string is all whitespace.\n         */\n        function countTrailingLinebreaks(string) {\n            const trailingWhitespace = string.match(/\\s*$/u)[0];\n            const linebreakMatches = trailingWhitespace.match(astUtils.createGlobalLinebreakMatcher());\n\n            return linebreakMatches === null ? 0 : linebreakMatches.length;\n        }\n\n        /**\n         * Check indentation for lists of elements (arrays, objects, function params)\n         * @param {ASTNode[]} elements List of elements that should be offset\n         * @param {Token} startToken The start token of the list that element should be aligned against, e.g. '['\n         * @param {Token} endToken The end token of the list, e.g. ']'\n         * @param {number|string} offset The amount that the elements should be offset\n         * @returns {void}\n         */\n        function addElementListIndent(elements, startToken, endToken, offset) {\n\n            /**\n             * Gets the first token of a given element, including surrounding parentheses.\n             * @param {ASTNode} element A node in the `elements` list\n             * @returns {Token} The first token of this element\n             */\n            function getFirstToken(element) {\n                let token = sourceCode.getTokenBefore(element);\n\n                while (astUtils.isOpeningParenToken(token) && token !== startToken) {\n                    token = sourceCode.getTokenBefore(token);\n                }\n                return sourceCode.getTokenAfter(token);\n            }\n\n            // Run through all the tokens in the list, and offset them by one indent level (mainly for comments, other things will end up overridden)\n            offsets.setDesiredOffsets(\n                [startToken.range[1], endToken.range[0]],\n                startToken,\n                typeof offset === \"number\" ? offset : 1\n            );\n            offsets.setDesiredOffset(endToken, startToken, 0);\n\n            // If the preference is \"first\" but there is no first element (e.g. sparse arrays w/ empty first slot), fall back to 1 level.\n            if (offset === \"first\" && elements.length && !elements[0]) {\n                return;\n            }\n            elements.forEach((element, index) => {\n                if (!element) {\n\n                    // Skip holes in arrays\n                    return;\n                }\n                if (offset === \"off\") {\n\n                    // Ignore the first token of every element if the \"off\" option is used\n                    offsets.ignoreToken(getFirstToken(element));\n                }\n\n                // Offset the following elements correctly relative to the first element\n                if (index === 0) {\n                    return;\n                }\n                if (offset === \"first\" && tokenInfo.isFirstTokenOfLine(getFirstToken(element))) {\n                    offsets.matchOffsetOf(getFirstToken(elements[0]), getFirstToken(element));\n                } else {\n                    const previousElement = elements[index - 1];\n                    const firstTokenOfPreviousElement = previousElement && getFirstToken(previousElement);\n                    const previousElementLastToken = previousElement && sourceCode.getLastToken(previousElement);\n\n                    if (\n                        previousElement &&\n                        previousElementLastToken.loc.end.line - countTrailingLinebreaks(previousElementLastToken.value) > startToken.loc.end.line\n                    ) {\n                        offsets.setDesiredOffsets(\n                            [previousElement.range[1], element.range[1]],\n                            firstTokenOfPreviousElement,\n                            0\n                        );\n                    }\n                }\n            });\n        }\n\n        /**\n         * Check and decide whether to check for indentation for blockless nodes\n         * Scenarios are for or while statements without braces around them\n         * @param {ASTNode} node node to examine\n         * @returns {void}\n         */\n        function addBlocklessNodeIndent(node) {\n            if (node.type !== \"BlockStatement\") {\n                const lastParentToken = sourceCode.getTokenBefore(node, astUtils.isNotOpeningParenToken);\n\n                let firstBodyToken = sourceCode.getFirstToken(node);\n                let lastBodyToken = sourceCode.getLastToken(node);\n\n                while (\n                    astUtils.isOpeningParenToken(sourceCode.getTokenBefore(firstBodyToken)) &&\n                    astUtils.isClosingParenToken(sourceCode.getTokenAfter(lastBodyToken))\n                ) {\n                    firstBodyToken = sourceCode.getTokenBefore(firstBodyToken);\n                    lastBodyToken = sourceCode.getTokenAfter(lastBodyToken);\n                }\n\n                offsets.setDesiredOffsets([firstBodyToken.range[0], lastBodyToken.range[1]], lastParentToken, 1);\n\n                /*\n                 * For blockless nodes with semicolon-first style, don't indent the semicolon.\n                 * e.g.\n                 * if (foo) bar()\n                 * ; [1, 2, 3].map(foo)\n                 */\n                const lastToken = sourceCode.getLastToken(node);\n\n                if (node.type !== \"EmptyStatement\" && astUtils.isSemicolonToken(lastToken)) {\n                    offsets.setDesiredOffset(lastToken, lastParentToken, 0);\n                }\n            }\n        }\n\n        /**\n         * Checks the indentation for nodes that are like function calls (`CallExpression` and `NewExpression`)\n         * @param {ASTNode} node A CallExpression or NewExpression node\n         * @returns {void}\n         */\n        function addFunctionCallIndent(node) {\n            let openingParen;\n\n            if (node.arguments.length) {\n                openingParen = sourceCode.getFirstTokenBetween(node.callee, node.arguments[0], astUtils.isOpeningParenToken);\n            } else {\n                openingParen = sourceCode.getLastToken(node, 1);\n            }\n            const closingParen = sourceCode.getLastToken(node);\n\n            parameterParens.add(openingParen);\n            parameterParens.add(closingParen);\n\n            /*\n             * If `?.` token exists, set desired offset for that.\n             * This logic is copied from `MemberExpression`'s.\n             */\n            if (node.optional) {\n                const dotToken = sourceCode.getTokenAfter(node.callee, astUtils.isQuestionDotToken);\n                const calleeParenCount = sourceCode.getTokensBetween(node.callee, dotToken, { filter: astUtils.isClosingParenToken }).length;\n                const firstTokenOfCallee = calleeParenCount\n                    ? sourceCode.getTokenBefore(node.callee, { skip: calleeParenCount - 1 })\n                    : sourceCode.getFirstToken(node.callee);\n                const lastTokenOfCallee = sourceCode.getTokenBefore(dotToken);\n                const offsetBase = lastTokenOfCallee.loc.end.line === openingParen.loc.start.line\n                    ? lastTokenOfCallee\n                    : firstTokenOfCallee;\n\n                offsets.setDesiredOffset(dotToken, offsetBase, 1);\n            }\n\n            const offsetAfterToken = node.callee.type === \"TaggedTemplateExpression\" ? sourceCode.getFirstToken(node.callee.quasi) : openingParen;\n            const offsetToken = sourceCode.getTokenBefore(offsetAfterToken);\n\n            offsets.setDesiredOffset(openingParen, offsetToken, 0);\n\n            addElementListIndent(node.arguments, openingParen, closingParen, options.CallExpression.arguments);\n        }\n\n        /**\n         * Checks the indentation of parenthesized values, given a list of tokens in a program\n         * @param {Token[]} tokens A list of tokens\n         * @returns {void}\n         */\n        function addParensIndent(tokens) {\n            const parenStack = [];\n            const parenPairs = [];\n\n            tokens.forEach(nextToken => {\n\n                // Accumulate a list of parenthesis pairs\n                if (astUtils.isOpeningParenToken(nextToken)) {\n                    parenStack.push(nextToken);\n                } else if (astUtils.isClosingParenToken(nextToken)) {\n                    parenPairs.unshift({ left: parenStack.pop(), right: nextToken });\n                }\n            });\n\n            parenPairs.forEach(pair => {\n                const leftParen = pair.left;\n                const rightParen = pair.right;\n\n                // We only want to handle parens around expressions, so exclude parentheses that are in function parameters and function call arguments.\n                if (!parameterParens.has(leftParen) && !parameterParens.has(rightParen)) {\n                    const parenthesizedTokens = new Set(sourceCode.getTokensBetween(leftParen, rightParen));\n\n                    parenthesizedTokens.forEach(token => {\n                        if (!parenthesizedTokens.has(offsets.getFirstDependency(token))) {\n                            offsets.setDesiredOffset(token, leftParen, 1);\n                        }\n                    });\n                }\n\n                offsets.setDesiredOffset(rightParen, leftParen, 0);\n            });\n        }\n\n        /**\n         * Ignore all tokens within an unknown node whose offset do not depend\n         * on another token's offset within the unknown node\n         * @param {ASTNode} node Unknown Node\n         * @returns {void}\n         */\n        function ignoreNode(node) {\n            const unknownNodeTokens = new Set(sourceCode.getTokens(node, { includeComments: true }));\n\n            unknownNodeTokens.forEach(token => {\n                if (!unknownNodeTokens.has(offsets.getFirstDependency(token))) {\n                    const firstTokenOfLine = tokenInfo.getFirstTokenOfLine(token);\n\n                    if (token === firstTokenOfLine) {\n                        offsets.ignoreToken(token);\n                    } else {\n                        offsets.setDesiredOffset(token, firstTokenOfLine, 0);\n                    }\n                }\n            });\n        }\n\n        /**\n         * Check whether the given token is on the first line of a statement.\n         * @param {Token} token The token to check.\n         * @param {ASTNode} leafNode The expression node that the token belongs directly.\n         * @returns {boolean} `true` if the token is on the first line of a statement.\n         */\n        function isOnFirstLineOfStatement(token, leafNode) {\n            let node = leafNode;\n\n            while (node.parent && !node.parent.type.endsWith(\"Statement\") && !node.parent.type.endsWith(\"Declaration\")) {\n                node = node.parent;\n            }\n            node = node.parent;\n\n            return !node || node.loc.start.line === token.loc.start.line;\n        }\n\n        /**\n         * Check whether there are any blank (whitespace-only) lines between\n         * two tokens on separate lines.\n         * @param {Token} firstToken The first token.\n         * @param {Token} secondToken The second token.\n         * @returns {boolean} `true` if the tokens are on separate lines and\n         *   there exists a blank line between them, `false` otherwise.\n         */\n        function hasBlankLinesBetween(firstToken, secondToken) {\n            const firstTokenLine = firstToken.loc.end.line;\n            const secondTokenLine = secondToken.loc.start.line;\n\n            if (firstTokenLine === secondTokenLine || firstTokenLine === secondTokenLine - 1) {\n                return false;\n            }\n\n            for (let line = firstTokenLine + 1; line < secondTokenLine; ++line) {\n                if (!tokenInfo.firstTokensByLineNumber.has(line)) {\n                    return true;\n                }\n            }\n\n            return false;\n        }\n\n        const ignoredNodeFirstTokens = new Set();\n\n        const baseOffsetListeners = {\n            \"ArrayExpression, ArrayPattern\"(node) {\n                const openingBracket = sourceCode.getFirstToken(node);\n                const closingBracket = sourceCode.getTokenAfter([...node.elements].reverse().find(_ => _) || openingBracket, astUtils.isClosingBracketToken);\n\n                addElementListIndent(node.elements, openingBracket, closingBracket, options.ArrayExpression);\n            },\n\n            \"ObjectExpression, ObjectPattern\"(node) {\n                const openingCurly = sourceCode.getFirstToken(node);\n                const closingCurly = sourceCode.getTokenAfter(\n                    node.properties.length ? node.properties[node.properties.length - 1] : openingCurly,\n                    astUtils.isClosingBraceToken\n                );\n\n                addElementListIndent(node.properties, openingCurly, closingCurly, options.ObjectExpression);\n            },\n\n            ArrowFunctionExpression(node) {\n                const maybeOpeningParen = sourceCode.getFirstToken(node, { skip: node.async ? 1 : 0 });\n\n                if (astUtils.isOpeningParenToken(maybeOpeningParen)) {\n                    const openingParen = maybeOpeningParen;\n                    const closingParen = sourceCode.getTokenBefore(node.body, astUtils.isClosingParenToken);\n\n                    parameterParens.add(openingParen);\n                    parameterParens.add(closingParen);\n                    addElementListIndent(node.params, openingParen, closingParen, options.FunctionExpression.parameters);\n                }\n\n                addBlocklessNodeIndent(node.body);\n            },\n\n            AssignmentExpression(node) {\n                const operator = sourceCode.getFirstTokenBetween(node.left, node.right, token => token.value === node.operator);\n\n                offsets.setDesiredOffsets([operator.range[0], node.range[1]], sourceCode.getLastToken(node.left), 1);\n                offsets.ignoreToken(operator);\n                offsets.ignoreToken(sourceCode.getTokenAfter(operator));\n            },\n\n            \"BinaryExpression, LogicalExpression\"(node) {\n                const operator = sourceCode.getFirstTokenBetween(node.left, node.right, token => token.value === node.operator);\n\n                /*\n                 * For backwards compatibility, don't check BinaryExpression indents, e.g.\n                 * var foo = bar &&\n                 *                   baz;\n                 */\n\n                const tokenAfterOperator = sourceCode.getTokenAfter(operator);\n\n                offsets.ignoreToken(operator);\n                offsets.ignoreToken(tokenAfterOperator);\n                offsets.setDesiredOffset(tokenAfterOperator, operator, 0);\n            },\n\n            \"BlockStatement, ClassBody\"(node) {\n                let blockIndentLevel;\n\n                if (node.parent && isOuterIIFE(node.parent)) {\n                    blockIndentLevel = options.outerIIFEBody;\n                } else if (node.parent && (node.parent.type === \"FunctionExpression\" || node.parent.type === \"ArrowFunctionExpression\")) {\n                    blockIndentLevel = options.FunctionExpression.body;\n                } else if (node.parent && node.parent.type === \"FunctionDeclaration\") {\n                    blockIndentLevel = options.FunctionDeclaration.body;\n                } else {\n                    blockIndentLevel = 1;\n                }\n\n                /*\n                 * For blocks that aren't lone statements, ensure that the opening curly brace\n                 * is aligned with the parent.\n                 */\n                if (!astUtils.STATEMENT_LIST_PARENTS.has(node.parent.type)) {\n                    offsets.setDesiredOffset(sourceCode.getFirstToken(node), sourceCode.getFirstToken(node.parent), 0);\n                }\n\n                addElementListIndent(node.body, sourceCode.getFirstToken(node), sourceCode.getLastToken(node), blockIndentLevel);\n            },\n\n            CallExpression: addFunctionCallIndent,\n\n            \"ClassDeclaration[superClass], ClassExpression[superClass]\"(node) {\n                const classToken = sourceCode.getFirstToken(node);\n                const extendsToken = sourceCode.getTokenBefore(node.superClass, astUtils.isNotOpeningParenToken);\n\n                offsets.setDesiredOffsets([extendsToken.range[0], node.body.range[0]], classToken, 1);\n            },\n\n            ConditionalExpression(node) {\n                const firstToken = sourceCode.getFirstToken(node);\n\n                // `flatTernaryExpressions` option is for the following style:\n                // var a =\n                //     foo > 0 ? bar :\n                //     foo < 0 ? baz :\n                //     /*else*/ qiz ;\n                if (!options.flatTernaryExpressions ||\n                    !astUtils.isTokenOnSameLine(node.test, node.consequent) ||\n                    isOnFirstLineOfStatement(firstToken, node)\n                ) {\n                    const questionMarkToken = sourceCode.getFirstTokenBetween(node.test, node.consequent, token => token.type === \"Punctuator\" && token.value === \"?\");\n                    const colonToken = sourceCode.getFirstTokenBetween(node.consequent, node.alternate, token => token.type === \"Punctuator\" && token.value === \":\");\n\n                    const firstConsequentToken = sourceCode.getTokenAfter(questionMarkToken);\n                    const lastConsequentToken = sourceCode.getTokenBefore(colonToken);\n                    const firstAlternateToken = sourceCode.getTokenAfter(colonToken);\n\n                    offsets.setDesiredOffset(questionMarkToken, firstToken, 1);\n                    offsets.setDesiredOffset(colonToken, firstToken, 1);\n\n                    offsets.setDesiredOffset(firstConsequentToken, firstToken, firstConsequentToken.type === \"Punctuator\" &&\n                        options.offsetTernaryExpressions ? 2 : 1);\n\n                    /*\n                     * The alternate and the consequent should usually have the same indentation.\n                     * If they share part of a line, align the alternate against the first token of the consequent.\n                     * This allows the alternate to be indented correctly in cases like this:\n                     * foo ? (\n                     *   bar\n                     * ) : ( // this '(' is aligned with the '(' above, so it's considered to be aligned with `foo`\n                     *   baz // as a result, `baz` is offset by 1 rather than 2\n                     * )\n                     */\n                    if (lastConsequentToken.loc.end.line === firstAlternateToken.loc.start.line) {\n                        offsets.setDesiredOffset(firstAlternateToken, firstConsequentToken, 0);\n                    } else {\n\n                        /**\n                         * If the alternate and consequent do not share part of a line, offset the alternate from the first\n                         * token of the conditional expression. For example:\n                         * foo ? bar\n                         *   : baz\n                         *\n                         * If `baz` were aligned with `bar` rather than being offset by 1 from `foo`, `baz` would end up\n                         * having no expected indentation.\n                         */\n                        offsets.setDesiredOffset(firstAlternateToken, firstToken, firstAlternateToken.type === \"Punctuator\" &&\n                            options.offsetTernaryExpressions ? 2 : 1);\n                    }\n                }\n            },\n\n            \"DoWhileStatement, WhileStatement, ForInStatement, ForOfStatement\": node => addBlocklessNodeIndent(node.body),\n\n            ExportNamedDeclaration(node) {\n                if (node.declaration === null) {\n                    const closingCurly = sourceCode.getLastToken(node, astUtils.isClosingBraceToken);\n\n                    // Indent the specifiers in `export {foo, bar, baz}`\n                    addElementListIndent(node.specifiers, sourceCode.getFirstToken(node, { skip: 1 }), closingCurly, 1);\n\n                    if (node.source) {\n\n                        // Indent everything after and including the `from` token in `export {foo, bar, baz} from 'qux'`\n                        offsets.setDesiredOffsets([closingCurly.range[1], node.range[1]], sourceCode.getFirstToken(node), 1);\n                    }\n                }\n            },\n\n            ForStatement(node) {\n                const forOpeningParen = sourceCode.getFirstToken(node, 1);\n\n                if (node.init) {\n                    offsets.setDesiredOffsets(node.init.range, forOpeningParen, 1);\n                }\n                if (node.test) {\n                    offsets.setDesiredOffsets(node.test.range, forOpeningParen, 1);\n                }\n                if (node.update) {\n                    offsets.setDesiredOffsets(node.update.range, forOpeningParen, 1);\n                }\n                addBlocklessNodeIndent(node.body);\n            },\n\n            \"FunctionDeclaration, FunctionExpression\"(node) {\n                const closingParen = sourceCode.getTokenBefore(node.body);\n                const openingParen = sourceCode.getTokenBefore(node.params.length ? node.params[0] : closingParen);\n\n                parameterParens.add(openingParen);\n                parameterParens.add(closingParen);\n                addElementListIndent(node.params, openingParen, closingParen, options[node.type].parameters);\n            },\n\n            IfStatement(node) {\n                addBlocklessNodeIndent(node.consequent);\n                if (node.alternate && node.alternate.type !== \"IfStatement\") {\n                    addBlocklessNodeIndent(node.alternate);\n                }\n            },\n\n            ImportDeclaration(node) {\n                if (node.specifiers.some(specifier => specifier.type === \"ImportSpecifier\")) {\n                    const openingCurly = sourceCode.getFirstToken(node, astUtils.isOpeningBraceToken);\n                    const closingCurly = sourceCode.getLastToken(node, astUtils.isClosingBraceToken);\n\n                    addElementListIndent(node.specifiers.filter(specifier => specifier.type === \"ImportSpecifier\"), openingCurly, closingCurly, options.ImportDeclaration);\n                }\n\n                const fromToken = sourceCode.getLastToken(node, token => token.type === \"Identifier\" && token.value === \"from\");\n                const sourceToken = sourceCode.getLastToken(node, token => token.type === \"String\");\n                const semiToken = sourceCode.getLastToken(node, token => token.type === \"Punctuator\" && token.value === \";\");\n\n                if (fromToken) {\n                    const end = semiToken && semiToken.range[1] === sourceToken.range[1] ? node.range[1] : sourceToken.range[1];\n\n                    offsets.setDesiredOffsets([fromToken.range[0], end], sourceCode.getFirstToken(node), 1);\n                }\n            },\n\n            ImportExpression(node) {\n                const openingParen = sourceCode.getFirstToken(node, 1);\n                const closingParen = sourceCode.getLastToken(node);\n\n                parameterParens.add(openingParen);\n                parameterParens.add(closingParen);\n                offsets.setDesiredOffset(openingParen, sourceCode.getTokenBefore(openingParen), 0);\n\n                addElementListIndent([node.source], openingParen, closingParen, options.CallExpression.arguments);\n            },\n\n            \"MemberExpression, JSXMemberExpression, MetaProperty\"(node) {\n                const object = node.type === \"MetaProperty\" ? node.meta : node.object;\n                const firstNonObjectToken = sourceCode.getFirstTokenBetween(object, node.property, astUtils.isNotClosingParenToken);\n                const secondNonObjectToken = sourceCode.getTokenAfter(firstNonObjectToken);\n\n                const objectParenCount = sourceCode.getTokensBetween(object, node.property, { filter: astUtils.isClosingParenToken }).length;\n                const firstObjectToken = objectParenCount\n                    ? sourceCode.getTokenBefore(object, { skip: objectParenCount - 1 })\n                    : sourceCode.getFirstToken(object);\n                const lastObjectToken = sourceCode.getTokenBefore(firstNonObjectToken);\n                const firstPropertyToken = node.computed ? firstNonObjectToken : secondNonObjectToken;\n\n                if (node.computed) {\n\n                    // For computed MemberExpressions, match the closing bracket with the opening bracket.\n                    offsets.setDesiredOffset(sourceCode.getLastToken(node), firstNonObjectToken, 0);\n                    offsets.setDesiredOffsets(node.property.range, firstNonObjectToken, 1);\n                }\n\n                /*\n                 * If the object ends on the same line that the property starts, match against the last token\n                 * of the object, to ensure that the MemberExpression is not indented.\n                 *\n                 * Otherwise, match against the first token of the object, e.g.\n                 * foo\n                 *   .bar\n                 *   .baz // <-- offset by 1 from `foo`\n                 */\n                const offsetBase = lastObjectToken.loc.end.line === firstPropertyToken.loc.start.line\n                    ? lastObjectToken\n                    : firstObjectToken;\n\n                if (typeof options.MemberExpression === \"number\") {\n\n                    // Match the dot (for non-computed properties) or the opening bracket (for computed properties) against the object.\n                    offsets.setDesiredOffset(firstNonObjectToken, offsetBase, options.MemberExpression);\n\n                    /*\n                     * For computed MemberExpressions, match the first token of the property against the opening bracket.\n                     * Otherwise, match the first token of the property against the object.\n                     */\n                    offsets.setDesiredOffset(secondNonObjectToken, node.computed ? firstNonObjectToken : offsetBase, options.MemberExpression);\n                } else {\n\n                    // If the MemberExpression option is off, ignore the dot and the first token of the property.\n                    offsets.ignoreToken(firstNonObjectToken);\n                    offsets.ignoreToken(secondNonObjectToken);\n\n                    // To ignore the property indentation, ensure that the property tokens depend on the ignored tokens.\n                    offsets.setDesiredOffset(firstNonObjectToken, offsetBase, 0);\n                    offsets.setDesiredOffset(secondNonObjectToken, firstNonObjectToken, 0);\n                }\n            },\n\n            NewExpression(node) {\n\n                // Only indent the arguments if the NewExpression has parens (e.g. `new Foo(bar)` or `new Foo()`, but not `new Foo`\n                if (node.arguments.length > 0 ||\n                        astUtils.isClosingParenToken(sourceCode.getLastToken(node)) &&\n                        astUtils.isOpeningParenToken(sourceCode.getLastToken(node, 1))) {\n                    addFunctionCallIndent(node);\n                }\n            },\n\n            Property(node) {\n                if (!node.shorthand && !node.method && node.kind === \"init\") {\n                    const colon = sourceCode.getFirstTokenBetween(node.key, node.value, astUtils.isColonToken);\n\n                    offsets.ignoreToken(sourceCode.getTokenAfter(colon));\n                }\n            },\n\n            PropertyDefinition(node) {\n                const firstToken = sourceCode.getFirstToken(node);\n                const maybeSemicolonToken = sourceCode.getLastToken(node);\n                let keyLastToken = null;\n\n                // Indent key.\n                if (node.computed) {\n                    const bracketTokenL = sourceCode.getTokenBefore(node.key, astUtils.isOpeningBracketToken);\n                    const bracketTokenR = keyLastToken = sourceCode.getTokenAfter(node.key, astUtils.isClosingBracketToken);\n                    const keyRange = [bracketTokenL.range[1], bracketTokenR.range[0]];\n\n                    if (bracketTokenL !== firstToken) {\n                        offsets.setDesiredOffset(bracketTokenL, firstToken, 0);\n                    }\n                    offsets.setDesiredOffsets(keyRange, bracketTokenL, 1);\n                    offsets.setDesiredOffset(bracketTokenR, bracketTokenL, 0);\n                } else {\n                    const idToken = keyLastToken = sourceCode.getFirstToken(node.key);\n\n                    if (idToken !== firstToken) {\n                        offsets.setDesiredOffset(idToken, firstToken, 1);\n                    }\n                }\n\n                // Indent initializer.\n                if (node.value) {\n                    const eqToken = sourceCode.getTokenBefore(node.value, astUtils.isEqToken);\n                    const valueToken = sourceCode.getTokenAfter(eqToken);\n\n                    offsets.setDesiredOffset(eqToken, keyLastToken, 1);\n                    offsets.setDesiredOffset(valueToken, eqToken, 1);\n                    if (astUtils.isSemicolonToken(maybeSemicolonToken)) {\n                        offsets.setDesiredOffset(maybeSemicolonToken, eqToken, 1);\n                    }\n                } else if (astUtils.isSemicolonToken(maybeSemicolonToken)) {\n                    offsets.setDesiredOffset(maybeSemicolonToken, keyLastToken, 1);\n                }\n            },\n\n            StaticBlock(node) {\n                const openingCurly = sourceCode.getFirstToken(node, { skip: 1 }); // skip the `static` token\n                const closingCurly = sourceCode.getLastToken(node);\n\n                addElementListIndent(node.body, openingCurly, closingCurly, options.StaticBlock.body);\n            },\n\n            SwitchStatement(node) {\n                const openingCurly = sourceCode.getTokenAfter(node.discriminant, astUtils.isOpeningBraceToken);\n                const closingCurly = sourceCode.getLastToken(node);\n\n                offsets.setDesiredOffsets([openingCurly.range[1], closingCurly.range[0]], openingCurly, options.SwitchCase);\n\n                if (node.cases.length) {\n                    sourceCode.getTokensBetween(\n                        node.cases[node.cases.length - 1],\n                        closingCurly,\n                        { includeComments: true, filter: astUtils.isCommentToken }\n                    ).forEach(token => offsets.ignoreToken(token));\n                }\n            },\n\n            SwitchCase(node) {\n                if (!(node.consequent.length === 1 && node.consequent[0].type === \"BlockStatement\")) {\n                    const caseKeyword = sourceCode.getFirstToken(node);\n                    const tokenAfterCurrentCase = sourceCode.getTokenAfter(node);\n\n                    offsets.setDesiredOffsets([caseKeyword.range[1], tokenAfterCurrentCase.range[0]], caseKeyword, 1);\n                }\n            },\n\n            TemplateLiteral(node) {\n                node.expressions.forEach((expression, index) => {\n                    const previousQuasi = node.quasis[index];\n                    const nextQuasi = node.quasis[index + 1];\n                    const tokenToAlignFrom = previousQuasi.loc.start.line === previousQuasi.loc.end.line\n                        ? sourceCode.getFirstToken(previousQuasi)\n                        : null;\n\n                    offsets.setDesiredOffsets([previousQuasi.range[1], nextQuasi.range[0]], tokenToAlignFrom, 1);\n                    offsets.setDesiredOffset(sourceCode.getFirstToken(nextQuasi), tokenToAlignFrom, 0);\n                });\n            },\n\n            VariableDeclaration(node) {\n                let variableIndent = Object.prototype.hasOwnProperty.call(options.VariableDeclarator, node.kind)\n                    ? options.VariableDeclarator[node.kind]\n                    : DEFAULT_VARIABLE_INDENT;\n\n                const firstToken = sourceCode.getFirstToken(node),\n                    lastToken = sourceCode.getLastToken(node);\n\n                if (options.VariableDeclarator[node.kind] === \"first\") {\n                    if (node.declarations.length > 1) {\n                        addElementListIndent(\n                            node.declarations,\n                            firstToken,\n                            lastToken,\n                            \"first\"\n                        );\n                        return;\n                    }\n\n                    variableIndent = DEFAULT_VARIABLE_INDENT;\n                }\n\n                if (node.declarations[node.declarations.length - 1].loc.start.line > node.loc.start.line) {\n\n                    /*\n                     * VariableDeclarator indentation is a bit different from other forms of indentation, in that the\n                     * indentation of an opening bracket sometimes won't match that of a closing bracket. For example,\n                     * the following indentations are correct:\n                     *\n                     * var foo = {\n                     *   ok: true\n                     * };\n                     *\n                     * var foo = {\n                     *     ok: true,\n                     *   },\n                     *   bar = 1;\n                     *\n                     * Account for when exiting the AST (after indentations have already been set for the nodes in\n                     * the declaration) by manually increasing the indentation level of the tokens in this declarator\n                     * on the same line as the start of the declaration, provided that there are declarators that\n                     * follow this one.\n                     */\n                    offsets.setDesiredOffsets(node.range, firstToken, variableIndent, true);\n                } else {\n                    offsets.setDesiredOffsets(node.range, firstToken, variableIndent);\n                }\n\n                if (astUtils.isSemicolonToken(lastToken)) {\n                    offsets.ignoreToken(lastToken);\n                }\n            },\n\n            VariableDeclarator(node) {\n                if (node.init) {\n                    const equalOperator = sourceCode.getTokenBefore(node.init, astUtils.isNotOpeningParenToken);\n                    const tokenAfterOperator = sourceCode.getTokenAfter(equalOperator);\n\n                    offsets.ignoreToken(equalOperator);\n                    offsets.ignoreToken(tokenAfterOperator);\n                    offsets.setDesiredOffsets([tokenAfterOperator.range[0], node.range[1]], equalOperator, 1);\n                    offsets.setDesiredOffset(equalOperator, sourceCode.getLastToken(node.id), 0);\n                }\n            },\n\n            \"JSXAttribute[value]\"(node) {\n                const equalsToken = sourceCode.getFirstTokenBetween(node.name, node.value, token => token.type === \"Punctuator\" && token.value === \"=\");\n\n                offsets.setDesiredOffsets([equalsToken.range[0], node.value.range[1]], sourceCode.getFirstToken(node.name), 1);\n            },\n\n            JSXElement(node) {\n                if (node.closingElement) {\n                    addElementListIndent(node.children, sourceCode.getFirstToken(node.openingElement), sourceCode.getFirstToken(node.closingElement), 1);\n                }\n            },\n\n            JSXOpeningElement(node) {\n                const firstToken = sourceCode.getFirstToken(node);\n                let closingToken;\n\n                if (node.selfClosing) {\n                    closingToken = sourceCode.getLastToken(node, { skip: 1 });\n                    offsets.setDesiredOffset(sourceCode.getLastToken(node), closingToken, 0);\n                } else {\n                    closingToken = sourceCode.getLastToken(node);\n                }\n                offsets.setDesiredOffsets(node.name.range, sourceCode.getFirstToken(node));\n                addElementListIndent(node.attributes, firstToken, closingToken, 1);\n            },\n\n            JSXClosingElement(node) {\n                const firstToken = sourceCode.getFirstToken(node);\n\n                offsets.setDesiredOffsets(node.name.range, firstToken, 1);\n            },\n\n            JSXFragment(node) {\n                const firstOpeningToken = sourceCode.getFirstToken(node.openingFragment);\n                const firstClosingToken = sourceCode.getFirstToken(node.closingFragment);\n\n                addElementListIndent(node.children, firstOpeningToken, firstClosingToken, 1);\n            },\n\n            JSXOpeningFragment(node) {\n                const firstToken = sourceCode.getFirstToken(node);\n                const closingToken = sourceCode.getLastToken(node);\n\n                offsets.setDesiredOffsets(node.range, firstToken, 1);\n                offsets.matchOffsetOf(firstToken, closingToken);\n            },\n\n            JSXClosingFragment(node) {\n                const firstToken = sourceCode.getFirstToken(node);\n                const slashToken = sourceCode.getLastToken(node, { skip: 1 });\n                const closingToken = sourceCode.getLastToken(node);\n                const tokenToMatch = astUtils.isTokenOnSameLine(slashToken, closingToken) ? slashToken : closingToken;\n\n                offsets.setDesiredOffsets(node.range, firstToken, 1);\n                offsets.matchOffsetOf(firstToken, tokenToMatch);\n            },\n\n            JSXExpressionContainer(node) {\n                const openingCurly = sourceCode.getFirstToken(node);\n                const closingCurly = sourceCode.getLastToken(node);\n\n                offsets.setDesiredOffsets(\n                    [openingCurly.range[1], closingCurly.range[0]],\n                    openingCurly,\n                    1\n                );\n            },\n\n            JSXSpreadAttribute(node) {\n                const openingCurly = sourceCode.getFirstToken(node);\n                const closingCurly = sourceCode.getLastToken(node);\n\n                offsets.setDesiredOffsets(\n                    [openingCurly.range[1], closingCurly.range[0]],\n                    openingCurly,\n                    1\n                );\n            },\n\n            \"*\"(node) {\n                const firstToken = sourceCode.getFirstToken(node);\n\n                // Ensure that the children of every node are indented at least as much as the first token.\n                if (firstToken && !ignoredNodeFirstTokens.has(firstToken)) {\n                    offsets.setDesiredOffsets(node.range, firstToken, 0);\n                }\n            }\n        };\n\n        const listenerCallQueue = [];\n\n        /*\n         * To ignore the indentation of a node:\n         * 1. Don't call the node's listener when entering it (if it has a listener)\n         * 2. Don't set any offsets against the first token of the node.\n         * 3. Call `ignoreNode` on the node sometime after exiting it and before validating offsets.\n         */\n        const offsetListeners = {};\n\n        for (const [selector, listener] of Object.entries(baseOffsetListeners)) {\n\n            /*\n             * Offset listener calls are deferred until traversal is finished, and are called as\n             * part of the final `Program:exit` listener. This is necessary because a node might\n             * be matched by multiple selectors.\n             *\n             * Example: Suppose there is an offset listener for `Identifier`, and the user has\n             * specified in configuration that `MemberExpression > Identifier` should be ignored.\n             * Due to selector specificity rules, the `Identifier` listener will get called first. However,\n             * if a given Identifier node is supposed to be ignored, then the `Identifier` offset listener\n             * should not have been called at all. Without doing extra selector matching, we don't know\n             * whether the Identifier matches the `MemberExpression > Identifier` selector until the\n             * `MemberExpression > Identifier` listener is called.\n             *\n             * To avoid this, the `Identifier` listener isn't called until traversal finishes and all\n             * ignored nodes are known.\n             */\n            offsetListeners[selector] = node => listenerCallQueue.push({ listener, node });\n        }\n\n        // For each ignored node selector, set up a listener to collect it into the `ignoredNodes` set.\n        const ignoredNodes = new Set();\n\n        /**\n         * Ignores a node\n         * @param {ASTNode} node The node to ignore\n         * @returns {void}\n         */\n        function addToIgnoredNodes(node) {\n            ignoredNodes.add(node);\n            ignoredNodeFirstTokens.add(sourceCode.getFirstToken(node));\n        }\n\n        const ignoredNodeListeners = options.ignoredNodes.reduce(\n            (listeners, ignoredSelector) => Object.assign(listeners, { [ignoredSelector]: addToIgnoredNodes }),\n            {}\n        );\n\n        /*\n         * Join the listeners, and add a listener to verify that all tokens actually have the correct indentation\n         * at the end.\n         *\n         * Using Object.assign will cause some offset listeners to be overwritten if the same selector also appears\n         * in `ignoredNodeListeners`. This isn't a problem because all of the matching nodes will be ignored,\n         * so those listeners wouldn't be called anyway.\n         */\n        return Object.assign(\n            offsetListeners,\n            ignoredNodeListeners,\n            {\n                \"*:exit\"(node) {\n\n                    // If a node's type is nonstandard, we can't tell how its children should be offset, so ignore it.\n                    if (!KNOWN_NODES.has(node.type)) {\n                        addToIgnoredNodes(node);\n                    }\n                },\n                \"Program:exit\"() {\n\n                    // If ignoreComments option is enabled, ignore all comment tokens.\n                    if (options.ignoreComments) {\n                        sourceCode.getAllComments()\n                            .forEach(comment => offsets.ignoreToken(comment));\n                    }\n\n                    // Invoke the queued offset listeners for the nodes that aren't ignored.\n                    listenerCallQueue\n                        .filter(nodeInfo => !ignoredNodes.has(nodeInfo.node))\n                        .forEach(nodeInfo => nodeInfo.listener(nodeInfo.node));\n\n                    // Update the offsets for ignored nodes to prevent their child tokens from being reported.\n                    ignoredNodes.forEach(ignoreNode);\n\n                    addParensIndent(sourceCode.ast.tokens);\n\n                    /*\n                     * Create a Map from (tokenOrComment) => (precedingToken).\n                     * This is necessary because sourceCode.getTokenBefore does not handle a comment as an argument correctly.\n                     */\n                    const precedingTokens = sourceCode.ast.comments.reduce((commentMap, comment) => {\n                        const tokenOrCommentBefore = sourceCode.getTokenBefore(comment, { includeComments: true });\n\n                        return commentMap.set(comment, commentMap.has(tokenOrCommentBefore) ? commentMap.get(tokenOrCommentBefore) : tokenOrCommentBefore);\n                    }, new WeakMap());\n\n                    sourceCode.lines.forEach((line, lineIndex) => {\n                        const lineNumber = lineIndex + 1;\n\n                        if (!tokenInfo.firstTokensByLineNumber.has(lineNumber)) {\n\n                            // Don't check indentation on blank lines\n                            return;\n                        }\n\n                        const firstTokenOfLine = tokenInfo.firstTokensByLineNumber.get(lineNumber);\n\n                        if (firstTokenOfLine.loc.start.line !== lineNumber) {\n\n                            // Don't check the indentation of multi-line tokens (e.g. template literals or block comments) twice.\n                            return;\n                        }\n\n                        if (astUtils.isCommentToken(firstTokenOfLine)) {\n                            const tokenBefore = precedingTokens.get(firstTokenOfLine);\n                            const tokenAfter = tokenBefore ? sourceCode.getTokenAfter(tokenBefore) : sourceCode.ast.tokens[0];\n                            const mayAlignWithBefore = tokenBefore && !hasBlankLinesBetween(tokenBefore, firstTokenOfLine);\n                            const mayAlignWithAfter = tokenAfter && !hasBlankLinesBetween(firstTokenOfLine, tokenAfter);\n\n                            /*\n                             * If a comment precedes a line that begins with a semicolon token, align to that token, i.e.\n                             *\n                             * let foo\n                             * // comment\n                             * ;(async () => {})()\n                             */\n                            if (tokenAfter && astUtils.isSemicolonToken(tokenAfter) && !astUtils.isTokenOnSameLine(firstTokenOfLine, tokenAfter)) {\n                                offsets.setDesiredOffset(firstTokenOfLine, tokenAfter, 0);\n                            }\n\n                            // If a comment matches the expected indentation of the token immediately before or after, don't report it.\n                            if (\n                                mayAlignWithBefore && validateTokenIndent(firstTokenOfLine, offsets.getDesiredIndent(tokenBefore)) ||\n                                mayAlignWithAfter && validateTokenIndent(firstTokenOfLine, offsets.getDesiredIndent(tokenAfter))\n                            ) {\n                                return;\n                            }\n                        }\n\n                        // If the token matches the expected indentation, don't report it.\n                        if (validateTokenIndent(firstTokenOfLine, offsets.getDesiredIndent(firstTokenOfLine))) {\n                            return;\n                        }\n\n                        // Otherwise, report the token/comment.\n                        report(firstTokenOfLine, offsets.getDesiredIndent(firstTokenOfLine));\n                    });\n                }\n            }\n        );\n    }\n};\n/lib/rules/no-self-assign.js\u0015/**\n * @fileoverview Rule to disallow assignments where both sides are exactly the same\n * @author Toru Nagashima\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\nconst SPACES = /\\s+/gu;\n\n/**\n * Traverses 2 Pattern nodes in parallel, then reports self-assignments.\n * @param {ASTNode|null} left A left node to traverse. This is a Pattern or\n *      a Property.\n * @param {ASTNode|null} right A right node to traverse. This is a Pattern or\n *      a Property.\n * @param {boolean} props The flag to check member expressions as well.\n * @param {Function} report A callback function to report.\n * @returns {void}\n */\nfunction eachSelfAssignment(left, right, props, report) {\n    if (!left || !right) {\n\n        // do nothing\n    } else if (\n        left.type === \"Identifier\" &&\n        right.type === \"Identifier\" &&\n        left.name === right.name\n    ) {\n        report(right);\n    } else if (\n        left.type === \"ArrayPattern\" &&\n        right.type === \"ArrayExpression\"\n    ) {\n        const end = Math.min(left.elements.length, right.elements.length);\n\n        for (let i = 0; i < end; ++i) {\n            const leftElement = left.elements[i];\n            const rightElement = right.elements[i];\n\n            // Avoid cases such as [...a] = [...a, 1]\n            if (\n                leftElement &&\n                leftElement.type === \"RestElement\" &&\n                i < right.elements.length - 1\n            ) {\n                break;\n            }\n\n            eachSelfAssignment(leftElement, rightElement, props, report);\n\n            // After a spread element, those indices are unknown.\n            if (rightElement && rightElement.type === \"SpreadElement\") {\n                break;\n            }\n        }\n    } else if (\n        left.type === \"RestElement\" &&\n        right.type === \"SpreadElement\"\n    ) {\n        eachSelfAssignment(left.argument, right.argument, props, report);\n    } else if (\n        left.type === \"ObjectPattern\" &&\n        right.type === \"ObjectExpression\" &&\n        right.properties.length >= 1\n    ) {\n\n        /*\n         * Gets the index of the last spread property.\n         * It's possible to overwrite properties followed by it.\n         */\n        let startJ = 0;\n\n        for (let i = right.properties.length - 1; i >= 0; --i) {\n            const propType = right.properties[i].type;\n\n            if (propType === \"SpreadElement\" || propType === \"ExperimentalSpreadProperty\") {\n                startJ = i + 1;\n                break;\n            }\n        }\n\n        for (let i = 0; i < left.properties.length; ++i) {\n            for (let j = startJ; j < right.properties.length; ++j) {\n                eachSelfAssignment(\n                    left.properties[i],\n                    right.properties[j],\n                    props,\n                    report\n                );\n            }\n        }\n    } else if (\n        left.type === \"Property\" &&\n        right.type === \"Property\" &&\n        right.kind === \"init\" &&\n        !right.method\n    ) {\n        const leftName = astUtils.getStaticPropertyName(left);\n\n        if (leftName !== null && leftName === astUtils.getStaticPropertyName(right)) {\n            eachSelfAssignment(left.value, right.value, props, report);\n        }\n    } else if (\n        props &&\n        astUtils.skipChainExpression(left).type === \"MemberExpression\" &&\n        astUtils.skipChainExpression(right).type === \"MemberExpression\" &&\n        astUtils.isSameReference(left, right)\n    ) {\n        report(right);\n    }\n}\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"problem\",\n\n        docs: {\n            description: \"disallow assignments where both sides are exactly the same\",\n            recommended: true,\n            url: \"https://eslint.org/docs/rules/no-self-assign\"\n        },\n\n        schema: [\n            {\n                type: \"object\",\n                properties: {\n                    props: {\n                        type: \"boolean\",\n                        default: true\n                    }\n                },\n                additionalProperties: false\n            }\n        ],\n\n        messages: {\n            selfAssignment: \"'{{name}}' is assigned to itself.\"\n        }\n    },\n\n    create(context) {\n        const sourceCode = context.getSourceCode();\n        const [{ props = true } = {}] = context.options;\n\n        /**\n         * Reports a given node as self assignments.\n         * @param {ASTNode} node A node to report. This is an Identifier node.\n         * @returns {void}\n         */\n        function report(node) {\n            context.report({\n                node,\n                messageId: \"selfAssignment\",\n                data: {\n                    name: sourceCode.getText(node).replace(SPACES, \"\")\n                }\n            });\n        }\n\n        return {\n            AssignmentExpression(node) {\n                if ([\"=\", \"&&=\", \"||=\", \"??=\"].includes(node.operator)) {\n                    eachSelfAssignment(node.left, node.right, props, report);\n                }\n            }\n        };\n    }\n};\n\"/lib/rules/max-nested-callbacks.js\r/**\n * @fileoverview Rule to enforce a maximum number of nested callbacks.\n * @author Ian Christian Myers\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"enforce a maximum depth that callbacks can be nested\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/max-nested-callbacks\"\n        },\n\n        schema: [\n            {\n                oneOf: [\n                    {\n                        type: \"integer\",\n                        minimum: 0\n                    },\n                    {\n                        type: \"object\",\n                        properties: {\n                            maximum: {\n                                type: \"integer\",\n                                minimum: 0\n                            },\n                            max: {\n                                type: \"integer\",\n                                minimum: 0\n                            }\n                        },\n                        additionalProperties: false\n                    }\n                ]\n            }\n        ],\n        messages: {\n            exceed: \"Too many nested callbacks ({{num}}). Maximum allowed is {{max}}.\"\n        }\n    },\n\n    create(context) {\n\n        //--------------------------------------------------------------------------\n        // Constants\n        //--------------------------------------------------------------------------\n        const option = context.options[0];\n        let THRESHOLD = 10;\n\n        if (\n            typeof option === \"object\" &&\n            (Object.prototype.hasOwnProperty.call(option, \"maximum\") || Object.prototype.hasOwnProperty.call(option, \"max\"))\n        ) {\n            THRESHOLD = option.maximum || option.max;\n        } else if (typeof option === \"number\") {\n            THRESHOLD = option;\n        }\n\n        //--------------------------------------------------------------------------\n        // Helpers\n        //--------------------------------------------------------------------------\n\n        const callbackStack = [];\n\n        /**\n         * Checks a given function node for too many callbacks.\n         * @param {ASTNode} node The node to check.\n         * @returns {void}\n         * @private\n         */\n        function checkFunction(node) {\n            const parent = node.parent;\n\n            if (parent.type === \"CallExpression\") {\n                callbackStack.push(node);\n            }\n\n            if (callbackStack.length > THRESHOLD) {\n                const opts = { num: callbackStack.length, max: THRESHOLD };\n\n                context.report({ node, messageId: \"exceed\", data: opts });\n            }\n        }\n\n        /**\n         * Pops the call stack.\n         * @returns {void}\n         * @private\n         */\n        function popStack() {\n            callbackStack.pop();\n        }\n\n        //--------------------------------------------------------------------------\n        // Public API\n        //--------------------------------------------------------------------------\n\n        return {\n            ArrowFunctionExpression: checkFunction,\n            \"ArrowFunctionExpression:exit\": popStack,\n\n            FunctionExpression: checkFunction,\n            \"FunctionExpression:exit\": popStack\n        };\n\n    }\n};\n#/lib/rules/line-comment-position.js\u0010X/**\n * @fileoverview Rule to enforce the position of line comments\n * @author Alberto Rodríguez\n */\n\"use strict\";\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"layout\",\n\n        docs: {\n            description: \"enforce position of line comments\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/line-comment-position\"\n        },\n\n        schema: [\n            {\n                oneOf: [\n                    {\n                        enum: [\"above\", \"beside\"]\n                    },\n                    {\n                        type: \"object\",\n                        properties: {\n                            position: {\n                                enum: [\"above\", \"beside\"]\n                            },\n                            ignorePattern: {\n                                type: \"string\"\n                            },\n                            applyDefaultPatterns: {\n                                type: \"boolean\"\n                            },\n                            applyDefaultIgnorePatterns: {\n                                type: \"boolean\"\n                            }\n                        },\n                        additionalProperties: false\n                    }\n                ]\n            }\n        ],\n        messages: {\n            above: \"Expected comment to be above code.\",\n            beside: \"Expected comment to be beside code.\"\n        }\n    },\n\n    create(context) {\n        const options = context.options[0];\n\n        let above,\n            ignorePattern,\n            applyDefaultIgnorePatterns = true;\n\n        if (!options || typeof options === \"string\") {\n            above = !options || options === \"above\";\n\n        } else {\n            above = !options.position || options.position === \"above\";\n            ignorePattern = options.ignorePattern;\n\n            if (Object.prototype.hasOwnProperty.call(options, \"applyDefaultIgnorePatterns\")) {\n                applyDefaultIgnorePatterns = options.applyDefaultIgnorePatterns;\n            } else {\n                applyDefaultIgnorePatterns = options.applyDefaultPatterns !== false;\n            }\n        }\n\n        const defaultIgnoreRegExp = astUtils.COMMENTS_IGNORE_PATTERN;\n        const fallThroughRegExp = /^\\s*falls?\\s?through/u;\n        const customIgnoreRegExp = new RegExp(ignorePattern, \"u\");\n        const sourceCode = context.getSourceCode();\n\n        //--------------------------------------------------------------------------\n        // Public\n        //--------------------------------------------------------------------------\n\n        return {\n            Program() {\n                const comments = sourceCode.getAllComments();\n\n                comments.filter(token => token.type === \"Line\").forEach(node => {\n                    if (applyDefaultIgnorePatterns && (defaultIgnoreRegExp.test(node.value) || fallThroughRegExp.test(node.value))) {\n                        return;\n                    }\n\n                    if (ignorePattern && customIgnoreRegExp.test(node.value)) {\n                        return;\n                    }\n\n                    const previous = sourceCode.getTokenBefore(node, { includeComments: true });\n                    const isOnSameLine = previous && previous.loc.end.line === node.loc.start.line;\n\n                    if (above) {\n                        if (isOnSameLine) {\n                            context.report({\n                                node,\n                                messageId: \"above\"\n                            });\n                        }\n                    } else {\n                        if (!isOnSameLine) {\n                            context.report({\n                                node,\n                                messageId: \"beside\"\n                            });\n                        }\n                    }\n                });\n            }\n        };\n    }\n};\n/messages/plugin-invalid.js\u0002\"use strict\";\n\nmodule.exports = function(it) {\n    const { configName, importerName } = it;\n\n    return `\n\"${configName}\" is invalid syntax for a config specifier.\n\n* If your intention is to extend from a configuration exported from the plugin, add the configuration name after a slash: e.g. \"${configName}/myConfig\".\n* If this is the name of a shareable config instead of a plugin, remove the \"plugin:\" prefix: i.e. \"${configName.slice(\"plugin:\".length)}\".\n\n\"${configName}\" was referenced from the config file in \"${importerName}\".\n\nIf you still can't figure out the problem, please stop by https://eslint.org/chat/help to chat with the team.\n`.trimLeft();\n};\n/lib/rules/no-iterator.js\u0005\u0015/**\n * @fileoverview Rule to flag usage of __iterator__ property\n * @author Ian Christian Myers\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst { getStaticPropertyName } = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow the use of the `__iterator__` property\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-iterator\"\n        },\n\n        schema: [],\n\n        messages: {\n            noIterator: \"Reserved name '__iterator__'.\"\n        }\n    },\n\n    create(context) {\n\n        return {\n\n            MemberExpression(node) {\n\n                if (getStaticPropertyName(node) === \"__iterator__\") {\n                    context.report({\n                        node,\n                        messageId: \"noIterator\"\n                    });\n                }\n            }\n        };\n\n    }\n};\n/lib/config/default-config.js\u0006/**\n * @fileoverview Default configuration\n * @author Nicholas C. Zakas\n */\n\n\"use strict\";\n\n//-----------------------------------------------------------------------------\n// Requirements\n//-----------------------------------------------------------------------------\n\nconst Rules = require(\"../rules\");\n\n//-----------------------------------------------------------------------------\n// Helpers\n//-----------------------------------------------------------------------------\n\n\nexports.defaultConfig = [\n    {\n        plugins: {\n            \"@\": {\n                parsers: {\n                    espree: require(\"espree\")\n                },\n\n                /*\n                 * Because we try to delay loading rules until absolutely\n                 * necessary, a proxy allows us to hook into the lazy-loading\n                 * aspect of the rules map while still keeping all of the\n                 * relevant configuration inside of the config array.\n                 */\n                rules: new Proxy({}, {\n                    get(target, property) {\n                        return Rules.get(property);\n                    },\n\n                    has(target, property) {\n                        return Rules.has(property);\n                    }\n                })\n            }\n        },\n        ignores: [\n            \"**/node_modules/**\",\n            \".git/**\"\n        ],\n        languageOptions: {\n            ecmaVersion: \"latest\",\n            sourceType: \"module\",\n            parser: \"@/espree\",\n            parserOptions: {}\n        }\n    },\n    {\n        files: [\"**/*.cjs\"],\n        languageOptions: {\n            sourceType: \"commonjs\"\n        }\n    }\n];\n/lib/rules/max-lines.js\u0017/**\n * @fileoverview enforce a maximum file length\n * @author Alberto Rodríguez\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\n/**\n * Creates an array of numbers from `start` up to, but not including, `end`\n * @param {number} start The start of the range\n * @param {number} end The end of the range\n * @returns {number[]} The range of numbers\n */\nfunction range(start, end) {\n    return [...Array(end - start).keys()].map(x => x + start);\n}\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"enforce a maximum number of lines per file\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/max-lines\"\n        },\n\n        schema: [\n            {\n                oneOf: [\n                    {\n                        type: \"integer\",\n                        minimum: 0\n                    },\n                    {\n                        type: \"object\",\n                        properties: {\n                            max: {\n                                type: \"integer\",\n                                minimum: 0\n                            },\n                            skipComments: {\n                                type: \"boolean\"\n                            },\n                            skipBlankLines: {\n                                type: \"boolean\"\n                            }\n                        },\n                        additionalProperties: false\n                    }\n                ]\n            }\n        ],\n        messages: {\n            exceed:\n                \"File has too many lines ({{actual}}). Maximum allowed is {{max}}.\"\n        }\n    },\n\n    create(context) {\n        const option = context.options[0];\n        let max = 300;\n\n        if (\n            typeof option === \"object\" &&\n            Object.prototype.hasOwnProperty.call(option, \"max\")\n        ) {\n            max = option.max;\n        } else if (typeof option === \"number\") {\n            max = option;\n        }\n\n        const skipComments = option && option.skipComments;\n        const skipBlankLines = option && option.skipBlankLines;\n\n        const sourceCode = context.getSourceCode();\n\n        /**\n         * Returns whether or not a token is a comment node type\n         * @param {Token} token The token to check\n         * @returns {boolean} True if the token is a comment node\n         */\n        function isCommentNodeType(token) {\n            return token && (token.type === \"Block\" || token.type === \"Line\");\n        }\n\n        /**\n         * Returns the line numbers of a comment that don't have any code on the same line\n         * @param {Node} comment The comment node to check\n         * @returns {number[]} The line numbers\n         */\n        function getLinesWithoutCode(comment) {\n            let start = comment.loc.start.line;\n            let end = comment.loc.end.line;\n\n            let token;\n\n            token = comment;\n            do {\n                token = sourceCode.getTokenBefore(token, {\n                    includeComments: true\n                });\n            } while (isCommentNodeType(token));\n\n            if (token && astUtils.isTokenOnSameLine(token, comment)) {\n                start += 1;\n            }\n\n            token = comment;\n            do {\n                token = sourceCode.getTokenAfter(token, {\n                    includeComments: true\n                });\n            } while (isCommentNodeType(token));\n\n            if (token && astUtils.isTokenOnSameLine(comment, token)) {\n                end -= 1;\n            }\n\n            if (start <= end) {\n                return range(start, end + 1);\n            }\n            return [];\n        }\n\n        return {\n            \"Program:exit\"() {\n                let lines = sourceCode.lines.map((text, i) => ({\n                    lineNumber: i + 1,\n                    text\n                }));\n\n                /*\n                 * If file ends with a linebreak, `sourceCode.lines` will have one extra empty line at the end.\n                 * That isn't a real line, so we shouldn't count it.\n                 */\n                if (lines.length > 1 && lines[lines.length - 1].text === \"\") {\n                    lines.pop();\n                }\n\n                if (skipBlankLines) {\n                    lines = lines.filter(l => l.text.trim() !== \"\");\n                }\n\n                if (skipComments) {\n                    const comments = sourceCode.getAllComments();\n\n                    const commentLines = comments.flatMap(getLinesWithoutCode);\n\n                    lines = lines.filter(\n                        l => !commentLines.includes(l.lineNumber)\n                    );\n                }\n\n                if (lines.length > max) {\n                    const loc = {\n                        start: {\n                            line: lines[max].lineNumber,\n                            column: 0\n                        },\n                        end: {\n                            line: sourceCode.lines.length,\n                            column: sourceCode.lines[sourceCode.lines.length - 1].length\n                        }\n                    };\n\n                    context.report({\n                        loc,\n                        messageId: \"exceed\",\n                        data: {\n                            max,\n                            actual: lines.length\n                        }\n                    });\n                }\n            }\n        };\n    }\n};\n/lib/rules/no-implied-eval.js\u0011/**\n * @fileoverview Rule to flag use of implied eval via setTimeout and setInterval\n * @author James Allardice\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\nconst { getStaticValue } = require(\"eslint-utils\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow the use of `eval()`-like methods\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-implied-eval\"\n        },\n\n        schema: [],\n\n        messages: {\n            impliedEval: \"Implied eval. Consider passing a function instead of a string.\"\n        }\n    },\n\n    create(context) {\n        const GLOBAL_CANDIDATES = Object.freeze([\"global\", \"window\", \"globalThis\"]);\n        const EVAL_LIKE_FUNC_PATTERN = /^(?:set(?:Interval|Timeout)|execScript)$/u;\n\n        /**\n         * Checks whether a node is evaluated as a string or not.\n         * @param {ASTNode} node A node to check.\n         * @returns {boolean} True if the node is evaluated as a string.\n         */\n        function isEvaluatedString(node) {\n            if (\n                (node.type === \"Literal\" && typeof node.value === \"string\") ||\n                node.type === \"TemplateLiteral\"\n            ) {\n                return true;\n            }\n            if (node.type === \"BinaryExpression\" && node.operator === \"+\") {\n                return isEvaluatedString(node.left) || isEvaluatedString(node.right);\n            }\n            return false;\n        }\n\n        /**\n         * Reports if the `CallExpression` node has evaluated argument.\n         * @param {ASTNode} node A CallExpression to check.\n         * @returns {void}\n         */\n        function reportImpliedEvalCallExpression(node) {\n            const [firstArgument] = node.arguments;\n\n            if (firstArgument) {\n\n                const staticValue = getStaticValue(firstArgument, context.getScope());\n                const isStaticString = staticValue && typeof staticValue.value === \"string\";\n                const isString = isStaticString || isEvaluatedString(firstArgument);\n\n                if (isString) {\n                    context.report({\n                        node,\n                        messageId: \"impliedEval\"\n                    });\n                }\n            }\n\n        }\n\n        /**\n         * Reports calls of `implied eval` via the global references.\n         * @param {Variable} globalVar A global variable to check.\n         * @returns {void}\n         */\n        function reportImpliedEvalViaGlobal(globalVar) {\n            const { references, name } = globalVar;\n\n            references.forEach(ref => {\n                const identifier = ref.identifier;\n                let node = identifier.parent;\n\n                while (astUtils.isSpecificMemberAccess(node, null, name)) {\n                    node = node.parent;\n                }\n\n                if (astUtils.isSpecificMemberAccess(node, null, EVAL_LIKE_FUNC_PATTERN)) {\n                    const calleeNode = node.parent.type === \"ChainExpression\" ? node.parent : node;\n                    const parent = calleeNode.parent;\n\n                    if (parent.type === \"CallExpression\" && parent.callee === calleeNode) {\n                        reportImpliedEvalCallExpression(parent);\n                    }\n                }\n            });\n        }\n\n        //--------------------------------------------------------------------------\n        // Public\n        //--------------------------------------------------------------------------\n\n        return {\n            CallExpression(node) {\n                if (astUtils.isSpecificId(node.callee, EVAL_LIKE_FUNC_PATTERN)) {\n                    reportImpliedEvalCallExpression(node);\n                }\n            },\n            \"Program:exit\"() {\n                const globalScope = context.getScope();\n\n                GLOBAL_CANDIDATES\n                    .map(candidate => astUtils.getVariableByName(globalScope, candidate))\n                    .filter(globalVar => !!globalVar && globalVar.defs.length === 0)\n                    .forEach(reportImpliedEvalViaGlobal);\n            }\n        };\n\n    }\n};\n/lib/rules/curly.jsK/**\n * @fileoverview Rule to flag statements without curly braces\n * @author Nicholas C. Zakas\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"enforce consistent brace style for all control statements\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/curly\"\n        },\n\n        schema: {\n            anyOf: [\n                {\n                    type: \"array\",\n                    items: [\n                        {\n                            enum: [\"all\"]\n                        }\n                    ],\n                    minItems: 0,\n                    maxItems: 1\n                },\n                {\n                    type: \"array\",\n                    items: [\n                        {\n                            enum: [\"multi\", \"multi-line\", \"multi-or-nest\"]\n                        },\n                        {\n                            enum: [\"consistent\"]\n                        }\n                    ],\n                    minItems: 0,\n                    maxItems: 2\n                }\n            ]\n        },\n\n        fixable: \"code\",\n\n        messages: {\n            missingCurlyAfter: \"Expected { after '{{name}}'.\",\n            missingCurlyAfterCondition: \"Expected { after '{{name}}' condition.\",\n            unexpectedCurlyAfter: \"Unnecessary { after '{{name}}'.\",\n            unexpectedCurlyAfterCondition: \"Unnecessary { after '{{name}}' condition.\"\n        }\n    },\n\n    create(context) {\n\n        const multiOnly = (context.options[0] === \"multi\");\n        const multiLine = (context.options[0] === \"multi-line\");\n        const multiOrNest = (context.options[0] === \"multi-or-nest\");\n        const consistent = (context.options[1] === \"consistent\");\n\n        const sourceCode = context.getSourceCode();\n\n        //--------------------------------------------------------------------------\n        // Helpers\n        //--------------------------------------------------------------------------\n\n        /**\n         * Determines if a given node is a one-liner that's on the same line as it's preceding code.\n         * @param {ASTNode} node The node to check.\n         * @returns {boolean} True if the node is a one-liner that's on the same line as it's preceding code.\n         * @private\n         */\n        function isCollapsedOneLiner(node) {\n            const before = sourceCode.getTokenBefore(node);\n            const last = sourceCode.getLastToken(node);\n            const lastExcludingSemicolon = astUtils.isSemicolonToken(last) ? sourceCode.getTokenBefore(last) : last;\n\n            return before.loc.start.line === lastExcludingSemicolon.loc.end.line;\n        }\n\n        /**\n         * Determines if a given node is a one-liner.\n         * @param {ASTNode} node The node to check.\n         * @returns {boolean} True if the node is a one-liner.\n         * @private\n         */\n        function isOneLiner(node) {\n            if (node.type === \"EmptyStatement\") {\n                return true;\n            }\n\n            const first = sourceCode.getFirstToken(node);\n            const last = sourceCode.getLastToken(node);\n            const lastExcludingSemicolon = astUtils.isSemicolonToken(last) ? sourceCode.getTokenBefore(last) : last;\n\n            return first.loc.start.line === lastExcludingSemicolon.loc.end.line;\n        }\n\n        /**\n         * Determines if the given node is a lexical declaration (let, const, function, or class)\n         * @param {ASTNode} node The node to check\n         * @returns {boolean} True if the node is a lexical declaration\n         * @private\n         */\n        function isLexicalDeclaration(node) {\n            if (node.type === \"VariableDeclaration\") {\n                return node.kind === \"const\" || node.kind === \"let\";\n            }\n\n            return node.type === \"FunctionDeclaration\" || node.type === \"ClassDeclaration\";\n        }\n\n        /**\n         * Checks if the given token is an `else` token or not.\n         * @param {Token} token The token to check.\n         * @returns {boolean} `true` if the token is an `else` token.\n         */\n        function isElseKeywordToken(token) {\n            return token.value === \"else\" && token.type === \"Keyword\";\n        }\n\n        /**\n         * Determines whether the given node has an `else` keyword token as the first token after.\n         * @param {ASTNode} node The node to check.\n         * @returns {boolean} `true` if the node is followed by an `else` keyword token.\n         */\n        function isFollowedByElseKeyword(node) {\n            const nextToken = sourceCode.getTokenAfter(node);\n\n            return Boolean(nextToken) && isElseKeywordToken(nextToken);\n        }\n\n        /**\n         * Determines if a semicolon needs to be inserted after removing a set of curly brackets, in order to avoid a SyntaxError.\n         * @param {Token} closingBracket The } token\n         * @returns {boolean} `true` if a semicolon needs to be inserted after the last statement in the block.\n         */\n        function needsSemicolon(closingBracket) {\n            const tokenBefore = sourceCode.getTokenBefore(closingBracket);\n            const tokenAfter = sourceCode.getTokenAfter(closingBracket);\n            const lastBlockNode = sourceCode.getNodeByRangeIndex(tokenBefore.range[0]);\n\n            if (astUtils.isSemicolonToken(tokenBefore)) {\n\n                // If the last statement already has a semicolon, don't add another one.\n                return false;\n            }\n\n            if (!tokenAfter) {\n\n                // If there are no statements after this block, there is no need to add a semicolon.\n                return false;\n            }\n\n            if (lastBlockNode.type === \"BlockStatement\" && lastBlockNode.parent.type !== \"FunctionExpression\" && lastBlockNode.parent.type !== \"ArrowFunctionExpression\") {\n\n                /*\n                 * If the last node surrounded by curly brackets is a BlockStatement (other than a FunctionExpression or an ArrowFunctionExpression),\n                 * don't insert a semicolon. Otherwise, the semicolon would be parsed as a separate statement, which would cause\n                 * a SyntaxError if it was followed by `else`.\n                 */\n                return false;\n            }\n\n            if (tokenBefore.loc.end.line === tokenAfter.loc.start.line) {\n\n                // If the next token is on the same line, insert a semicolon.\n                return true;\n            }\n\n            if (/^[([/`+-]/u.test(tokenAfter.value)) {\n\n                // If the next token starts with a character that would disrupt ASI, insert a semicolon.\n                return true;\n            }\n\n            if (tokenBefore.type === \"Punctuator\" && (tokenBefore.value === \"++\" || tokenBefore.value === \"--\")) {\n\n                // If the last token is ++ or --, insert a semicolon to avoid disrupting ASI.\n                return true;\n            }\n\n            // Otherwise, do not insert a semicolon.\n            return false;\n        }\n\n        /**\n         * Determines whether the code represented by the given node contains an `if` statement\n         * that would become associated with an `else` keyword directly appended to that code.\n         *\n         * Examples where it returns `true`:\n         *\n         *    if (a)\n         *        foo();\n         *\n         *    if (a) {\n         *        foo();\n         *    }\n         *\n         *    if (a)\n         *        foo();\n         *    else if (b)\n         *        bar();\n         *\n         *    while (a)\n         *        if (b)\n         *            if(c)\n         *                foo();\n         *            else\n         *                bar();\n         *\n         * Examples where it returns `false`:\n         *\n         *    if (a)\n         *        foo();\n         *    else\n         *        bar();\n         *\n         *    while (a) {\n         *        if (b)\n         *            if(c)\n         *                foo();\n         *            else\n         *                bar();\n         *    }\n         *\n         *    while (a)\n         *        if (b) {\n         *            if(c)\n         *                foo();\n         *        }\n         *        else\n         *            bar();\n         * @param {ASTNode} node Node representing the code to check.\n         * @returns {boolean} `true` if an `if` statement within the code would become associated with an `else` appended to that code.\n         */\n        function hasUnsafeIf(node) {\n            switch (node.type) {\n                case \"IfStatement\":\n                    if (!node.alternate) {\n                        return true;\n                    }\n                    return hasUnsafeIf(node.alternate);\n                case \"ForStatement\":\n                case \"ForInStatement\":\n                case \"ForOfStatement\":\n                case \"LabeledStatement\":\n                case \"WithStatement\":\n                case \"WhileStatement\":\n                    return hasUnsafeIf(node.body);\n                default:\n                    return false;\n            }\n        }\n\n        /**\n         * Determines whether the existing curly braces around the single statement are necessary to preserve the semantics of the code.\n         * The braces, which make the given block body, are necessary in either of the following situations:\n         *\n         * 1. The statement is a lexical declaration.\n         * 2. Without the braces, an `if` within the statement would become associated with an `else` after the closing brace:\n         *\n         *     if (a) {\n         *         if (b)\n         *             foo();\n         *     }\n         *     else\n         *         bar();\n         *\n         *     if (a)\n         *         while (b)\n         *             while (c) {\n         *                 while (d)\n         *                     if (e)\n         *                         while(f)\n         *                             foo();\n         *            }\n         *     else\n         *         bar();\n         * @param {ASTNode} node `BlockStatement` body with exactly one statement directly inside. The statement can have its own nested statements.\n         * @returns {boolean} `true` if the braces are necessary - removing them (replacing the given `BlockStatement` body with its single statement content)\n         * would change the semantics of the code or produce a syntax error.\n         */\n        function areBracesNecessary(node) {\n            const statement = node.body[0];\n\n            return isLexicalDeclaration(statement) ||\n                hasUnsafeIf(statement) && isFollowedByElseKeyword(node);\n        }\n\n        /**\n         * Prepares to check the body of a node to see if it's a block statement.\n         * @param {ASTNode} node The node to report if there's a problem.\n         * @param {ASTNode} body The body node to check for blocks.\n         * @param {string} name The name to report if there's a problem.\n         * @param {{ condition: boolean }} opts Options to pass to the report functions\n         * @returns {Object} a prepared check object, with \"actual\", \"expected\", \"check\" properties.\n         *   \"actual\" will be `true` or `false` whether the body is already a block statement.\n         *   \"expected\" will be `true` or `false` if the body should be a block statement or not, or\n         *   `null` if it doesn't matter, depending on the rule options. It can be modified to change\n         *   the final behavior of \"check\".\n         *   \"check\" will be a function reporting appropriate problems depending on the other\n         *   properties.\n         */\n        function prepareCheck(node, body, name, opts) {\n            const hasBlock = (body.type === \"BlockStatement\");\n            let expected = null;\n\n            if (hasBlock && (body.body.length !== 1 || areBracesNecessary(body))) {\n                expected = true;\n            } else if (multiOnly) {\n                expected = false;\n            } else if (multiLine) {\n                if (!isCollapsedOneLiner(body)) {\n                    expected = true;\n                }\n\n                // otherwise, the body is allowed to have braces or not to have braces\n\n            } else if (multiOrNest) {\n                if (hasBlock) {\n                    const statement = body.body[0];\n                    const leadingCommentsInBlock = sourceCode.getCommentsBefore(statement);\n\n                    expected = !isOneLiner(statement) || leadingCommentsInBlock.length > 0;\n                } else {\n                    expected = !isOneLiner(body);\n                }\n            } else {\n\n                // default \"all\"\n                expected = true;\n            }\n\n            return {\n                actual: hasBlock,\n                expected,\n                check() {\n                    if (this.expected !== null && this.expected !== this.actual) {\n                        if (this.expected) {\n                            context.report({\n                                node,\n                                loc: body.loc,\n                                messageId: opts && opts.condition ? \"missingCurlyAfterCondition\" : \"missingCurlyAfter\",\n                                data: {\n                                    name\n                                },\n                                fix: fixer => fixer.replaceText(body, `{${sourceCode.getText(body)}}`)\n                            });\n                        } else {\n                            context.report({\n                                node,\n                                loc: body.loc,\n                                messageId: opts && opts.condition ? \"unexpectedCurlyAfterCondition\" : \"unexpectedCurlyAfter\",\n                                data: {\n                                    name\n                                },\n                                fix(fixer) {\n\n                                    /*\n                                     * `do while` expressions sometimes need a space to be inserted after `do`.\n                                     * e.g. `do{foo()} while (bar)` should be corrected to `do foo() while (bar)`\n                                     */\n                                    const needsPrecedingSpace = node.type === \"DoWhileStatement\" &&\n                                        sourceCode.getTokenBefore(body).range[1] === body.range[0] &&\n                                        !astUtils.canTokensBeAdjacent(\"do\", sourceCode.getFirstToken(body, { skip: 1 }));\n\n                                    const openingBracket = sourceCode.getFirstToken(body);\n                                    const closingBracket = sourceCode.getLastToken(body);\n                                    const lastTokenInBlock = sourceCode.getTokenBefore(closingBracket);\n\n                                    if (needsSemicolon(closingBracket)) {\n\n                                        /*\n                                         * If removing braces would cause a SyntaxError due to multiple statements on the same line (or\n                                         * change the semantics of the code due to ASI), don't perform a fix.\n                                         */\n                                        return null;\n                                    }\n\n                                    const resultingBodyText = sourceCode.getText().slice(openingBracket.range[1], lastTokenInBlock.range[0]) +\n                                        sourceCode.getText(lastTokenInBlock) +\n                                        sourceCode.getText().slice(lastTokenInBlock.range[1], closingBracket.range[0]);\n\n                                    return fixer.replaceText(body, (needsPrecedingSpace ? \" \" : \"\") + resultingBodyText);\n                                }\n                            });\n                        }\n                    }\n                }\n            };\n        }\n\n        /**\n         * Prepares to check the bodies of a \"if\", \"else if\" and \"else\" chain.\n         * @param {ASTNode} node The first IfStatement node of the chain.\n         * @returns {Object[]} prepared checks for each body of the chain. See `prepareCheck` for more\n         *   information.\n         */\n        function prepareIfChecks(node) {\n            const preparedChecks = [];\n\n            for (let currentNode = node; currentNode; currentNode = currentNode.alternate) {\n                preparedChecks.push(prepareCheck(currentNode, currentNode.consequent, \"if\", { condition: true }));\n                if (currentNode.alternate && currentNode.alternate.type !== \"IfStatement\") {\n                    preparedChecks.push(prepareCheck(currentNode, currentNode.alternate, \"else\"));\n                    break;\n                }\n            }\n\n            if (consistent) {\n\n                /*\n                 * If any node should have or already have braces, make sure they\n                 * all have braces.\n                 * If all nodes shouldn't have braces, make sure they don't.\n                 */\n                const expected = preparedChecks.some(preparedCheck => {\n                    if (preparedCheck.expected !== null) {\n                        return preparedCheck.expected;\n                    }\n                    return preparedCheck.actual;\n                });\n\n                preparedChecks.forEach(preparedCheck => {\n                    preparedCheck.expected = expected;\n                });\n            }\n\n            return preparedChecks;\n        }\n\n        //--------------------------------------------------------------------------\n        // Public\n        //--------------------------------------------------------------------------\n\n        return {\n            IfStatement(node) {\n                const parent = node.parent;\n                const isElseIf = parent.type === \"IfStatement\" && parent.alternate === node;\n\n                if (!isElseIf) {\n\n                    // This is a top `if`, check the whole `if-else-if` chain\n                    prepareIfChecks(node).forEach(preparedCheck => {\n                        preparedCheck.check();\n                    });\n                }\n\n                // Skip `else if`, it's already checked (when the top `if` was visited)\n            },\n\n            WhileStatement(node) {\n                prepareCheck(node, node.body, \"while\", { condition: true }).check();\n            },\n\n            DoWhileStatement(node) {\n                prepareCheck(node, node.body, \"do\").check();\n            },\n\n            ForStatement(node) {\n                prepareCheck(node, node.body, \"for\", { condition: true }).check();\n            },\n\n            ForInStatement(node) {\n                prepareCheck(node, node.body, \"for-in\").check();\n            },\n\n            ForOfStatement(node) {\n                prepareCheck(node, node.body, \"for-of\").check();\n            }\n        };\n    }\n};\n/messages/whitespace-found.js\u0001\"use strict\";\n\nmodule.exports = function(it) {\n    const { pluginName } = it;\n\n    return `\nESLint couldn't find the plugin \"${pluginName}\". because there is whitespace in the name. Please check your configuration and remove all whitespace from the plugin name.\n\nIf you still can't figure out the problem, please stop by https://eslint.org/chat/help to chat with the team.\n`.trimLeft();\n};\n/lib/rules/no-self-compare.js\u0007</**\n * @fileoverview Rule to flag comparison where left part is the same as the right\n * part.\n * @author Ilya Volodin\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"problem\",\n\n        docs: {\n            description: \"disallow comparisons where both sides are exactly the same\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-self-compare\"\n        },\n\n        schema: [],\n\n        messages: {\n            comparingToSelf: \"Comparing to itself is potentially pointless.\"\n        }\n    },\n\n    create(context) {\n        const sourceCode = context.getSourceCode();\n\n        /**\n         * Determines whether two nodes are composed of the same tokens.\n         * @param {ASTNode} nodeA The first node\n         * @param {ASTNode} nodeB The second node\n         * @returns {boolean} true if the nodes have identical token representations\n         */\n        function hasSameTokens(nodeA, nodeB) {\n            const tokensA = sourceCode.getTokens(nodeA);\n            const tokensB = sourceCode.getTokens(nodeB);\n\n            return tokensA.length === tokensB.length &&\n                tokensA.every((token, index) => token.type === tokensB[index].type && token.value === tokensB[index].value);\n        }\n\n        return {\n\n            BinaryExpression(node) {\n                const operators = new Set([\"===\", \"==\", \"!==\", \"!=\", \">\", \"<\", \">=\", \"<=\"]);\n\n                if (operators.has(node.operator) && hasSameTokens(node.left, node.right)) {\n                    context.report({ node, messageId: \"comparingToSelf\" });\n                }\n            }\n        };\n\n    }\n};\n/lib/rule-tester/index.jsN\"use strict\";\n\nmodule.exports = {\n    RuleTester: require(\"./rule-tester\")\n};\n/lib/rules/no-useless-call.js\u000b/**\n * @fileoverview A rule to disallow unnecessary `.call()` and `.apply()`.\n * @author Toru Nagashima\n */\n\n\"use strict\";\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\n/**\n * Checks whether or not a node is a `.call()`/`.apply()`.\n * @param {ASTNode} node A CallExpression node to check.\n * @returns {boolean} Whether or not the node is a `.call()`/`.apply()`.\n */\nfunction isCallOrNonVariadicApply(node) {\n    const callee = astUtils.skipChainExpression(node.callee);\n\n    return (\n        callee.type === \"MemberExpression\" &&\n        callee.property.type === \"Identifier\" &&\n        callee.computed === false &&\n        (\n            (callee.property.name === \"call\" && node.arguments.length >= 1) ||\n            (callee.property.name === \"apply\" && node.arguments.length === 2 && node.arguments[1].type === \"ArrayExpression\")\n        )\n    );\n}\n\n\n/**\n * Checks whether or not `thisArg` is not changed by `.call()`/`.apply()`.\n * @param {ASTNode|null} expectedThis The node that is the owner of the applied function.\n * @param {ASTNode} thisArg The node that is given to the first argument of the `.call()`/`.apply()`.\n * @param {SourceCode} sourceCode The ESLint source code object.\n * @returns {boolean} Whether or not `thisArg` is not changed by `.call()`/`.apply()`.\n */\nfunction isValidThisArg(expectedThis, thisArg, sourceCode) {\n    if (!expectedThis) {\n        return astUtils.isNullOrUndefined(thisArg);\n    }\n    return astUtils.equalTokens(expectedThis, thisArg, sourceCode);\n}\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow unnecessary calls to `.call()` and `.apply()`\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-useless-call\"\n        },\n\n        schema: [],\n\n        messages: {\n            unnecessaryCall: \"Unnecessary '.{{name}}()'.\"\n        }\n    },\n\n    create(context) {\n        const sourceCode = context.getSourceCode();\n\n        return {\n            CallExpression(node) {\n                if (!isCallOrNonVariadicApply(node)) {\n                    return;\n                }\n\n                const callee = astUtils.skipChainExpression(node.callee);\n                const applied = astUtils.skipChainExpression(callee.object);\n                const expectedThis = (applied.type === \"MemberExpression\") ? applied.object : null;\n                const thisArg = node.arguments[0];\n\n                if (isValidThisArg(expectedThis, thisArg, sourceCode)) {\n                    context.report({ node, messageId: \"unnecessaryCall\", data: { name: callee.property.name } });\n                }\n            }\n        };\n    }\n};\n'/lib/rules/computed-property-spacing.js\u001dw/**\n * @fileoverview Disallows or enforces spaces inside computed properties.\n * @author Jamund Ferguson\n */\n\"use strict\";\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"layout\",\n\n        docs: {\n            description: \"enforce consistent spacing inside computed property brackets\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/computed-property-spacing\"\n        },\n\n        fixable: \"whitespace\",\n\n        schema: [\n            {\n                enum: [\"always\", \"never\"]\n            },\n            {\n                type: \"object\",\n                properties: {\n                    enforceForClassMembers: {\n                        type: \"boolean\",\n                        default: true\n                    }\n                },\n                additionalProperties: false\n            }\n        ],\n\n        messages: {\n            unexpectedSpaceBefore: \"There should be no space before '{{tokenValue}}'.\",\n            unexpectedSpaceAfter: \"There should be no space after '{{tokenValue}}'.\",\n\n            missingSpaceBefore: \"A space is required before '{{tokenValue}}'.\",\n            missingSpaceAfter: \"A space is required after '{{tokenValue}}'.\"\n        }\n    },\n\n    create(context) {\n        const sourceCode = context.getSourceCode();\n        const propertyNameMustBeSpaced = context.options[0] === \"always\"; // default is \"never\"\n        const enforceForClassMembers = !context.options[1] || context.options[1].enforceForClassMembers;\n\n        //--------------------------------------------------------------------------\n        // Helpers\n        //--------------------------------------------------------------------------\n\n        /**\n         * Reports that there shouldn't be a space after the first token\n         * @param {ASTNode} node The node to report in the event of an error.\n         * @param {Token} token The token to use for the report.\n         * @param {Token} tokenAfter The token after `token`.\n         * @returns {void}\n         */\n        function reportNoBeginningSpace(node, token, tokenAfter) {\n            context.report({\n                node,\n                loc: { start: token.loc.end, end: tokenAfter.loc.start },\n                messageId: \"unexpectedSpaceAfter\",\n                data: {\n                    tokenValue: token.value\n                },\n                fix(fixer) {\n                    return fixer.removeRange([token.range[1], tokenAfter.range[0]]);\n                }\n            });\n        }\n\n        /**\n         * Reports that there shouldn't be a space before the last token\n         * @param {ASTNode} node The node to report in the event of an error.\n         * @param {Token} token The token to use for the report.\n         * @param {Token} tokenBefore The token before `token`.\n         * @returns {void}\n         */\n        function reportNoEndingSpace(node, token, tokenBefore) {\n            context.report({\n                node,\n                loc: { start: tokenBefore.loc.end, end: token.loc.start },\n                messageId: \"unexpectedSpaceBefore\",\n                data: {\n                    tokenValue: token.value\n                },\n                fix(fixer) {\n                    return fixer.removeRange([tokenBefore.range[1], token.range[0]]);\n                }\n            });\n        }\n\n        /**\n         * Reports that there should be a space after the first token\n         * @param {ASTNode} node The node to report in the event of an error.\n         * @param {Token} token The token to use for the report.\n         * @returns {void}\n         */\n        function reportRequiredBeginningSpace(node, token) {\n            context.report({\n                node,\n                loc: token.loc,\n                messageId: \"missingSpaceAfter\",\n                data: {\n                    tokenValue: token.value\n                },\n                fix(fixer) {\n                    return fixer.insertTextAfter(token, \" \");\n                }\n            });\n        }\n\n        /**\n         * Reports that there should be a space before the last token\n         * @param {ASTNode} node The node to report in the event of an error.\n         * @param {Token} token The token to use for the report.\n         * @returns {void}\n         */\n        function reportRequiredEndingSpace(node, token) {\n            context.report({\n                node,\n                loc: token.loc,\n                messageId: \"missingSpaceBefore\",\n                data: {\n                    tokenValue: token.value\n                },\n                fix(fixer) {\n                    return fixer.insertTextBefore(token, \" \");\n                }\n            });\n        }\n\n        /**\n         * Returns a function that checks the spacing of a node on the property name\n         * that was passed in.\n         * @param {string} propertyName The property on the node to check for spacing\n         * @returns {Function} A function that will check spacing on a node\n         */\n        function checkSpacing(propertyName) {\n            return function(node) {\n                if (!node.computed) {\n                    return;\n                }\n\n                const property = node[propertyName];\n\n                const before = sourceCode.getTokenBefore(property, astUtils.isOpeningBracketToken),\n                    first = sourceCode.getTokenAfter(before, { includeComments: true }),\n                    after = sourceCode.getTokenAfter(property, astUtils.isClosingBracketToken),\n                    last = sourceCode.getTokenBefore(after, { includeComments: true });\n\n                if (astUtils.isTokenOnSameLine(before, first)) {\n                    if (propertyNameMustBeSpaced) {\n                        if (!sourceCode.isSpaceBetweenTokens(before, first) && astUtils.isTokenOnSameLine(before, first)) {\n                            reportRequiredBeginningSpace(node, before);\n                        }\n                    } else {\n                        if (sourceCode.isSpaceBetweenTokens(before, first)) {\n                            reportNoBeginningSpace(node, before, first);\n                        }\n                    }\n                }\n\n                if (astUtils.isTokenOnSameLine(last, after)) {\n                    if (propertyNameMustBeSpaced) {\n                        if (!sourceCode.isSpaceBetweenTokens(last, after) && astUtils.isTokenOnSameLine(last, after)) {\n                            reportRequiredEndingSpace(node, after);\n                        }\n                    } else {\n                        if (sourceCode.isSpaceBetweenTokens(last, after)) {\n                            reportNoEndingSpace(node, after, last);\n                        }\n                    }\n                }\n            };\n        }\n\n\n        //--------------------------------------------------------------------------\n        // Public\n        //--------------------------------------------------------------------------\n\n        const listeners = {\n            Property: checkSpacing(\"key\"),\n            MemberExpression: checkSpacing(\"property\")\n        };\n\n        if (enforceForClassMembers) {\n            listeners.MethodDefinition =\n                listeners.PropertyDefinition = listeners.Property;\n        }\n\n        return listeners;\n\n    }\n};\n/lib/rules/no-void.js\u0006/**\n * @fileoverview Rule to disallow use of void operator.\n * @author Mike Sidorov\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow `void` operators\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-void\"\n        },\n\n        messages: {\n            noVoid: \"Expected 'undefined' and instead saw 'void'.\"\n        },\n\n        schema: [\n            {\n                type: \"object\",\n                properties: {\n                    allowAsStatement: {\n                        type: \"boolean\",\n                        default: false\n                    }\n                },\n                additionalProperties: false\n            }\n        ]\n    },\n\n    create(context) {\n        const allowAsStatement =\n            context.options[0] && context.options[0].allowAsStatement;\n\n        //--------------------------------------------------------------------------\n        // Public\n        //--------------------------------------------------------------------------\n\n        return {\n            'UnaryExpression[operator=\"void\"]'(node) {\n                if (\n                    allowAsStatement &&\n                    node.parent &&\n                    node.parent.type === \"ExpressionStatement\"\n                ) {\n                    return;\n                }\n                context.report({\n                    node,\n                    messageId: \"noVoid\"\n                });\n            }\n        };\n    }\n};\n\"/lib/rules/no-implicit-coercion.js0L/**\n * @fileoverview A rule to disallow the type conversions with shorter notations.\n * @author Toru Nagashima\n */\n\n\"use strict\";\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\nconst INDEX_OF_PATTERN = /^(?:i|lastI)ndexOf$/u;\nconst ALLOWABLE_OPERATORS = [\"~\", \"!!\", \"+\", \"*\"];\n\n/**\n * Parses and normalizes an option object.\n * @param {Object} options An option object to parse.\n * @returns {Object} The parsed and normalized option object.\n */\nfunction parseOptions(options) {\n    return {\n        boolean: \"boolean\" in options ? options.boolean : true,\n        number: \"number\" in options ? options.number : true,\n        string: \"string\" in options ? options.string : true,\n        disallowTemplateShorthand: \"disallowTemplateShorthand\" in options ? options.disallowTemplateShorthand : false,\n        allow: options.allow || []\n    };\n}\n\n/**\n * Checks whether or not a node is a double logical nigating.\n * @param {ASTNode} node An UnaryExpression node to check.\n * @returns {boolean} Whether or not the node is a double logical nigating.\n */\nfunction isDoubleLogicalNegating(node) {\n    return (\n        node.operator === \"!\" &&\n        node.argument.type === \"UnaryExpression\" &&\n        node.argument.operator === \"!\"\n    );\n}\n\n/**\n * Checks whether or not a node is a binary negating of `.indexOf()` method calling.\n * @param {ASTNode} node An UnaryExpression node to check.\n * @returns {boolean} Whether or not the node is a binary negating of `.indexOf()` method calling.\n */\nfunction isBinaryNegatingOfIndexOf(node) {\n    if (node.operator !== \"~\") {\n        return false;\n    }\n    const callNode = astUtils.skipChainExpression(node.argument);\n\n    return (\n        callNode.type === \"CallExpression\" &&\n        astUtils.isSpecificMemberAccess(callNode.callee, null, INDEX_OF_PATTERN)\n    );\n}\n\n/**\n * Checks whether or not a node is a multiplying by one.\n * @param {BinaryExpression} node A BinaryExpression node to check.\n * @returns {boolean} Whether or not the node is a multiplying by one.\n */\nfunction isMultiplyByOne(node) {\n    return node.operator === \"*\" && (\n        node.left.type === \"Literal\" && node.left.value === 1 ||\n        node.right.type === \"Literal\" && node.right.value === 1\n    );\n}\n\n/**\n * Checks whether the result of a node is numeric or not\n * @param {ASTNode} node The node to test\n * @returns {boolean} true if the node is a number literal or a `Number()`, `parseInt` or `parseFloat` call\n */\nfunction isNumeric(node) {\n    return (\n        node.type === \"Literal\" && typeof node.value === \"number\" ||\n        node.type === \"CallExpression\" && (\n            node.callee.name === \"Number\" ||\n            node.callee.name === \"parseInt\" ||\n            node.callee.name === \"parseFloat\"\n        )\n    );\n}\n\n/**\n * Returns the first non-numeric operand in a BinaryExpression. Designed to be\n * used from bottom to up since it walks up the BinaryExpression trees using\n * node.parent to find the result.\n * @param {BinaryExpression} node The BinaryExpression node to be walked up on\n * @returns {ASTNode|null} The first non-numeric item in the BinaryExpression tree or null\n */\nfunction getNonNumericOperand(node) {\n    const left = node.left,\n        right = node.right;\n\n    if (right.type !== \"BinaryExpression\" && !isNumeric(right)) {\n        return right;\n    }\n\n    if (left.type !== \"BinaryExpression\" && !isNumeric(left)) {\n        return left;\n    }\n\n    return null;\n}\n\n/**\n * Checks whether an expression evaluates to a string.\n * @param {ASTNode} node node that represents the expression to check.\n * @returns {boolean} Whether or not the expression evaluates to a string.\n */\nfunction isStringType(node) {\n    return astUtils.isStringLiteral(node) ||\n        (\n            node.type === \"CallExpression\" &&\n            node.callee.type === \"Identifier\" &&\n            node.callee.name === \"String\"\n        );\n}\n\n/**\n * Checks whether a node is an empty string literal or not.\n * @param {ASTNode} node The node to check.\n * @returns {boolean} Whether or not the passed in node is an\n * empty string literal or not.\n */\nfunction isEmptyString(node) {\n    return astUtils.isStringLiteral(node) && (node.value === \"\" || (node.type === \"TemplateLiteral\" && node.quasis.length === 1 && node.quasis[0].value.cooked === \"\"));\n}\n\n/**\n * Checks whether or not a node is a concatenating with an empty string.\n * @param {ASTNode} node A BinaryExpression node to check.\n * @returns {boolean} Whether or not the node is a concatenating with an empty string.\n */\nfunction isConcatWithEmptyString(node) {\n    return node.operator === \"+\" && (\n        (isEmptyString(node.left) && !isStringType(node.right)) ||\n        (isEmptyString(node.right) && !isStringType(node.left))\n    );\n}\n\n/**\n * Checks whether or not a node is appended with an empty string.\n * @param {ASTNode} node An AssignmentExpression node to check.\n * @returns {boolean} Whether or not the node is appended with an empty string.\n */\nfunction isAppendEmptyString(node) {\n    return node.operator === \"+=\" && isEmptyString(node.right);\n}\n\n/**\n * Returns the operand that is not an empty string from a flagged BinaryExpression.\n * @param {ASTNode} node The flagged BinaryExpression node to check.\n * @returns {ASTNode} The operand that is not an empty string from a flagged BinaryExpression.\n */\nfunction getNonEmptyOperand(node) {\n    return isEmptyString(node.left) ? node.right : node.left;\n}\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow shorthand type conversions\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-implicit-coercion\"\n        },\n\n        fixable: \"code\",\n\n        schema: [{\n            type: \"object\",\n            properties: {\n                boolean: {\n                    type: \"boolean\",\n                    default: true\n                },\n                number: {\n                    type: \"boolean\",\n                    default: true\n                },\n                string: {\n                    type: \"boolean\",\n                    default: true\n                },\n                disallowTemplateShorthand: {\n                    type: \"boolean\",\n                    default: false\n                },\n                allow: {\n                    type: \"array\",\n                    items: {\n                        enum: ALLOWABLE_OPERATORS\n                    },\n                    uniqueItems: true\n                }\n            },\n            additionalProperties: false\n        }],\n\n        messages: {\n            useRecommendation: \"use `{{recommendation}}` instead.\"\n        }\n    },\n\n    create(context) {\n        const options = parseOptions(context.options[0] || {});\n        const sourceCode = context.getSourceCode();\n\n        /**\n         * Reports an error and autofixes the node\n         * @param {ASTNode} node An ast node to report the error on.\n         * @param {string} recommendation The recommended code for the issue\n         * @param {bool} shouldFix Whether this report should fix the node\n         * @returns {void}\n         */\n        function report(node, recommendation, shouldFix) {\n            context.report({\n                node,\n                messageId: \"useRecommendation\",\n                data: {\n                    recommendation\n                },\n                fix(fixer) {\n                    if (!shouldFix) {\n                        return null;\n                    }\n\n                    const tokenBefore = sourceCode.getTokenBefore(node);\n\n                    if (\n                        tokenBefore &&\n                        tokenBefore.range[1] === node.range[0] &&\n                        !astUtils.canTokensBeAdjacent(tokenBefore, recommendation)\n                    ) {\n                        return fixer.replaceText(node, ` ${recommendation}`);\n                    }\n                    return fixer.replaceText(node, recommendation);\n                }\n            });\n        }\n\n        return {\n            UnaryExpression(node) {\n                let operatorAllowed;\n\n                // !!foo\n                operatorAllowed = options.allow.indexOf(\"!!\") >= 0;\n                if (!operatorAllowed && options.boolean && isDoubleLogicalNegating(node)) {\n                    const recommendation = `Boolean(${sourceCode.getText(node.argument.argument)})`;\n\n                    report(node, recommendation, true);\n                }\n\n                // ~foo.indexOf(bar)\n                operatorAllowed = options.allow.indexOf(\"~\") >= 0;\n                if (!operatorAllowed && options.boolean && isBinaryNegatingOfIndexOf(node)) {\n\n                    // `foo?.indexOf(bar) !== -1` will be true (== found) if the `foo` is nullish. So use `>= 0` in that case.\n                    const comparison = node.argument.type === \"ChainExpression\" ? \">= 0\" : \"!== -1\";\n                    const recommendation = `${sourceCode.getText(node.argument)} ${comparison}`;\n\n                    report(node, recommendation, false);\n                }\n\n                // +foo\n                operatorAllowed = options.allow.indexOf(\"+\") >= 0;\n                if (!operatorAllowed && options.number && node.operator === \"+\" && !isNumeric(node.argument)) {\n                    const recommendation = `Number(${sourceCode.getText(node.argument)})`;\n\n                    report(node, recommendation, true);\n                }\n            },\n\n            // Use `:exit` to prevent double reporting\n            \"BinaryExpression:exit\"(node) {\n                let operatorAllowed;\n\n                // 1 * foo\n                operatorAllowed = options.allow.indexOf(\"*\") >= 0;\n                const nonNumericOperand = !operatorAllowed && options.number && isMultiplyByOne(node) && getNonNumericOperand(node);\n\n                if (nonNumericOperand) {\n                    const recommendation = `Number(${sourceCode.getText(nonNumericOperand)})`;\n\n                    report(node, recommendation, true);\n                }\n\n                // \"\" + foo\n                operatorAllowed = options.allow.indexOf(\"+\") >= 0;\n                if (!operatorAllowed && options.string && isConcatWithEmptyString(node)) {\n                    const recommendation = `String(${sourceCode.getText(getNonEmptyOperand(node))})`;\n\n                    report(node, recommendation, true);\n                }\n            },\n\n            AssignmentExpression(node) {\n\n                // foo += \"\"\n                const operatorAllowed = options.allow.indexOf(\"+\") >= 0;\n\n                if (!operatorAllowed && options.string && isAppendEmptyString(node)) {\n                    const code = sourceCode.getText(getNonEmptyOperand(node));\n                    const recommendation = `${code} = String(${code})`;\n\n                    report(node, recommendation, true);\n                }\n            },\n\n            TemplateLiteral(node) {\n                if (!options.disallowTemplateShorthand) {\n                    return;\n                }\n\n                // tag`${foo}`\n                if (node.parent.type === \"TaggedTemplateExpression\") {\n                    return;\n                }\n\n                // `` or `${foo}${bar}`\n                if (node.expressions.length !== 1) {\n                    return;\n                }\n\n\n                //  `prefix${foo}`\n                if (node.quasis[0].value.cooked !== \"\") {\n                    return;\n                }\n\n                //  `${foo}postfix`\n                if (node.quasis[1].value.cooked !== \"\") {\n                    return;\n                }\n\n                // if the expression is already a string, then this isn't a coercion\n                if (isStringType(node.expressions[0])) {\n                    return;\n                }\n\n                const code = sourceCode.getText(node.expressions[0]);\n                const recommendation = `String(${code})`;\n\n                report(node, recommendation, true);\n            }\n        };\n    }\n};\n/lib/rules/no-div-regex.js\u0005/**\n * @fileoverview Rule to check for ambiguous div operator in regexes\n * @author Matt DuVall <http://www.mattduvall.com>\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow division operators explicitly at the beginning of regular expressions\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-div-regex\"\n        },\n\n        fixable: \"code\",\n\n        schema: [],\n\n        messages: {\n            unexpected: \"A regular expression literal can be confused with '/='.\"\n        }\n    },\n\n    create(context) {\n        const sourceCode = context.getSourceCode();\n\n        return {\n\n            Literal(node) {\n                const token = sourceCode.getFirstToken(node);\n\n                if (token.type === \"RegularExpression\" && token.value[1] === \"=\") {\n                    context.report({\n                        node,\n                        messageId: \"unexpected\",\n                        fix(fixer) {\n                            return fixer.replaceTextRange([token.range[0] + 1, token.range[0] + 2], \"[=]\");\n                        }\n                    });\n                }\n            }\n        };\n\n    }\n};\n/lib/rules/max-statements.js\u0017;/**\n * @fileoverview A rule to set the maximum number of statements in a function.\n * @author Ian Christian Myers\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\nconst { upperCaseFirst } = require(\"../shared/string-utils\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"enforce a maximum number of statements allowed in function blocks\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/max-statements\"\n        },\n\n        schema: [\n            {\n                oneOf: [\n                    {\n                        type: \"integer\",\n                        minimum: 0\n                    },\n                    {\n                        type: \"object\",\n                        properties: {\n                            maximum: {\n                                type: \"integer\",\n                                minimum: 0\n                            },\n                            max: {\n                                type: \"integer\",\n                                minimum: 0\n                            }\n                        },\n                        additionalProperties: false\n                    }\n                ]\n            },\n            {\n                type: \"object\",\n                properties: {\n                    ignoreTopLevelFunctions: {\n                        type: \"boolean\"\n                    }\n                },\n                additionalProperties: false\n            }\n        ],\n        messages: {\n            exceed: \"{{name}} has too many statements ({{count}}). Maximum allowed is {{max}}.\"\n        }\n    },\n\n    create(context) {\n\n        //--------------------------------------------------------------------------\n        // Helpers\n        //--------------------------------------------------------------------------\n\n        const functionStack = [],\n            option = context.options[0],\n            ignoreTopLevelFunctions = context.options[1] && context.options[1].ignoreTopLevelFunctions || false,\n            topLevelFunctions = [];\n        let maxStatements = 10;\n\n        if (\n            typeof option === \"object\" &&\n            (Object.prototype.hasOwnProperty.call(option, \"maximum\") || Object.prototype.hasOwnProperty.call(option, \"max\"))\n        ) {\n            maxStatements = option.maximum || option.max;\n        } else if (typeof option === \"number\") {\n            maxStatements = option;\n        }\n\n        /**\n         * Reports a node if it has too many statements\n         * @param {ASTNode} node node to evaluate\n         * @param {int} count Number of statements in node\n         * @param {int} max Maximum number of statements allowed\n         * @returns {void}\n         * @private\n         */\n        function reportIfTooManyStatements(node, count, max) {\n            if (count > max) {\n                const name = upperCaseFirst(astUtils.getFunctionNameWithKind(node));\n\n                context.report({\n                    node,\n                    messageId: \"exceed\",\n                    data: { name, count, max }\n                });\n            }\n        }\n\n        /**\n         * When parsing a new function, store it in our function stack\n         * @returns {void}\n         * @private\n         */\n        function startFunction() {\n            functionStack.push(0);\n        }\n\n        /**\n         * Evaluate the node at the end of function\n         * @param {ASTNode} node node to evaluate\n         * @returns {void}\n         * @private\n         */\n        function endFunction(node) {\n            const count = functionStack.pop();\n\n            /*\n             * This rule does not apply to class static blocks, but we have to track them so\n             * that stataments in them do not count as statements in the enclosing function.\n             */\n            if (node.type === \"StaticBlock\") {\n                return;\n            }\n\n            if (ignoreTopLevelFunctions && functionStack.length === 0) {\n                topLevelFunctions.push({ node, count });\n            } else {\n                reportIfTooManyStatements(node, count, maxStatements);\n            }\n        }\n\n        /**\n         * Increment the count of the functions\n         * @param {ASTNode} node node to evaluate\n         * @returns {void}\n         * @private\n         */\n        function countStatements(node) {\n            functionStack[functionStack.length - 1] += node.body.length;\n        }\n\n        //--------------------------------------------------------------------------\n        // Public API\n        //--------------------------------------------------------------------------\n\n        return {\n            FunctionDeclaration: startFunction,\n            FunctionExpression: startFunction,\n            ArrowFunctionExpression: startFunction,\n            StaticBlock: startFunction,\n\n            BlockStatement: countStatements,\n\n            \"FunctionDeclaration:exit\": endFunction,\n            \"FunctionExpression:exit\": endFunction,\n            \"ArrowFunctionExpression:exit\": endFunction,\n            \"StaticBlock:exit\": endFunction,\n\n            \"Program:exit\"() {\n                if (topLevelFunctions.length === 1) {\n                    return;\n                }\n\n                topLevelFunctions.forEach(element => {\n                    const count = element.count;\n                    const node = element.node;\n\n                    reportIfTooManyStatements(node, count, maxStatements);\n                });\n            }\n        };\n\n    }\n};\n%/lib/source-code/token-store/index.js`/**\n * @fileoverview Object to handle access and retrieval of tokens.\n * @author Brandon Mills\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst assert = require(\"assert\");\nconst { isCommentToken } = require(\"eslint-utils\");\nconst cursors = require(\"./cursors\");\nconst ForwardTokenCursor = require(\"./forward-token-cursor\");\nconst PaddedTokenCursor = require(\"./padded-token-cursor\");\nconst utils = require(\"./utils\");\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\nconst TOKENS = Symbol(\"tokens\");\nconst COMMENTS = Symbol(\"comments\");\nconst INDEX_MAP = Symbol(\"indexMap\");\n\n/**\n * Creates the map from locations to indices in `tokens`.\n *\n * The first/last location of tokens is mapped to the index of the token.\n * The first/last location of comments is mapped to the index of the next token of each comment.\n * @param {Token[]} tokens The array of tokens.\n * @param {Comment[]} comments The array of comments.\n * @returns {Object} The map from locations to indices in `tokens`.\n * @private\n */\nfunction createIndexMap(tokens, comments) {\n    const map = Object.create(null);\n    let tokenIndex = 0;\n    let commentIndex = 0;\n    let nextStart = 0;\n    let range = null;\n\n    while (tokenIndex < tokens.length || commentIndex < comments.length) {\n        nextStart = (commentIndex < comments.length) ? comments[commentIndex].range[0] : Number.MAX_SAFE_INTEGER;\n        while (tokenIndex < tokens.length && (range = tokens[tokenIndex].range)[0] < nextStart) {\n            map[range[0]] = tokenIndex;\n            map[range[1] - 1] = tokenIndex;\n            tokenIndex += 1;\n        }\n\n        nextStart = (tokenIndex < tokens.length) ? tokens[tokenIndex].range[0] : Number.MAX_SAFE_INTEGER;\n        while (commentIndex < comments.length && (range = comments[commentIndex].range)[0] < nextStart) {\n            map[range[0]] = tokenIndex;\n            map[range[1] - 1] = tokenIndex;\n            commentIndex += 1;\n        }\n    }\n\n    return map;\n}\n\n/**\n * Creates the cursor iterates tokens with options.\n * @param {CursorFactory} factory The cursor factory to initialize cursor.\n * @param {Token[]} tokens The array of tokens.\n * @param {Comment[]} comments The array of comments.\n * @param {Object} indexMap The map from locations to indices in `tokens`.\n * @param {number} startLoc The start location of the iteration range.\n * @param {number} endLoc The end location of the iteration range.\n * @param {number|Function|Object} [opts=0] The option object. If this is a number then it's `opts.skip`. If this is a function then it's `opts.filter`.\n * @param {boolean} [opts.includeComments=false] The flag to iterate comments as well.\n * @param {Function|null} [opts.filter=null] The predicate function to choose tokens.\n * @param {number} [opts.skip=0] The count of tokens the cursor skips.\n * @returns {Cursor} The created cursor.\n * @private\n */\nfunction createCursorWithSkip(factory, tokens, comments, indexMap, startLoc, endLoc, opts) {\n    let includeComments = false;\n    let skip = 0;\n    let filter = null;\n\n    if (typeof opts === \"number\") {\n        skip = opts | 0;\n    } else if (typeof opts === \"function\") {\n        filter = opts;\n    } else if (opts) {\n        includeComments = !!opts.includeComments;\n        skip = opts.skip | 0;\n        filter = opts.filter || null;\n    }\n    assert(skip >= 0, \"options.skip should be zero or a positive integer.\");\n    assert(!filter || typeof filter === \"function\", \"options.filter should be a function.\");\n\n    return factory.createCursor(tokens, comments, indexMap, startLoc, endLoc, includeComments, filter, skip, -1);\n}\n\n/**\n * Creates the cursor iterates tokens with options.\n * @param {CursorFactory} factory The cursor factory to initialize cursor.\n * @param {Token[]} tokens The array of tokens.\n * @param {Comment[]} comments The array of comments.\n * @param {Object} indexMap The map from locations to indices in `tokens`.\n * @param {number} startLoc The start location of the iteration range.\n * @param {number} endLoc The end location of the iteration range.\n * @param {number|Function|Object} [opts=0] The option object. If this is a number then it's `opts.count`. If this is a function then it's `opts.filter`.\n * @param {boolean} [opts.includeComments] The flag to iterate comments as well.\n * @param {Function|null} [opts.filter=null] The predicate function to choose tokens.\n * @param {number} [opts.count=0] The maximum count of tokens the cursor iterates. Zero is no iteration for backward compatibility.\n * @returns {Cursor} The created cursor.\n * @private\n */\nfunction createCursorWithCount(factory, tokens, comments, indexMap, startLoc, endLoc, opts) {\n    let includeComments = false;\n    let count = 0;\n    let countExists = false;\n    let filter = null;\n\n    if (typeof opts === \"number\") {\n        count = opts | 0;\n        countExists = true;\n    } else if (typeof opts === \"function\") {\n        filter = opts;\n    } else if (opts) {\n        includeComments = !!opts.includeComments;\n        count = opts.count | 0;\n        countExists = typeof opts.count === \"number\";\n        filter = opts.filter || null;\n    }\n    assert(count >= 0, \"options.count should be zero or a positive integer.\");\n    assert(!filter || typeof filter === \"function\", \"options.filter should be a function.\");\n\n    return factory.createCursor(tokens, comments, indexMap, startLoc, endLoc, includeComments, filter, 0, countExists ? count : -1);\n}\n\n/**\n * Creates the cursor iterates tokens with options.\n * This is overload function of the below.\n * @param {Token[]} tokens The array of tokens.\n * @param {Comment[]} comments The array of comments.\n * @param {Object} indexMap The map from locations to indices in `tokens`.\n * @param {number} startLoc The start location of the iteration range.\n * @param {number} endLoc The end location of the iteration range.\n * @param {Function|Object} opts The option object. If this is a function then it's `opts.filter`.\n * @param {boolean} [opts.includeComments] The flag to iterate comments as well.\n * @param {Function|null} [opts.filter=null] The predicate function to choose tokens.\n * @param {number} [opts.count=0] The maximum count of tokens the cursor iterates. Zero is no iteration for backward compatibility.\n * @returns {Cursor} The created cursor.\n * @private\n */\n/**\n * Creates the cursor iterates tokens with options.\n * @param {Token[]} tokens The array of tokens.\n * @param {Comment[]} comments The array of comments.\n * @param {Object} indexMap The map from locations to indices in `tokens`.\n * @param {number} startLoc The start location of the iteration range.\n * @param {number} endLoc The end location of the iteration range.\n * @param {number} [beforeCount=0] The number of tokens before the node to retrieve.\n * @param {boolean} [afterCount=0] The number of tokens after the node to retrieve.\n * @returns {Cursor} The created cursor.\n * @private\n */\nfunction createCursorWithPadding(tokens, comments, indexMap, startLoc, endLoc, beforeCount, afterCount) {\n    if (typeof beforeCount === \"undefined\" && typeof afterCount === \"undefined\") {\n        return new ForwardTokenCursor(tokens, comments, indexMap, startLoc, endLoc);\n    }\n    if (typeof beforeCount === \"number\" || typeof beforeCount === \"undefined\") {\n        return new PaddedTokenCursor(tokens, comments, indexMap, startLoc, endLoc, beforeCount | 0, afterCount | 0);\n    }\n    return createCursorWithCount(cursors.forward, tokens, comments, indexMap, startLoc, endLoc, beforeCount);\n}\n\n/**\n * Gets comment tokens that are adjacent to the current cursor position.\n * @param {Cursor} cursor A cursor instance.\n * @returns {Array} An array of comment tokens adjacent to the current cursor position.\n * @private\n */\nfunction getAdjacentCommentTokensFromCursor(cursor) {\n    const tokens = [];\n    let currentToken = cursor.getOneToken();\n\n    while (currentToken && isCommentToken(currentToken)) {\n        tokens.push(currentToken);\n        currentToken = cursor.getOneToken();\n    }\n\n    return tokens;\n}\n\n//------------------------------------------------------------------------------\n// Exports\n//------------------------------------------------------------------------------\n\n/**\n * The token store.\n *\n * This class provides methods to get tokens by locations as fast as possible.\n * The methods are a part of public API, so we should be careful if it changes this class.\n *\n * People can get tokens in O(1) by the hash map which is mapping from the location of tokens/comments to tokens.\n * Also people can get a mix of tokens and comments in O(log k), the k is the number of comments.\n * Assuming that comments to be much fewer than tokens, this does not make hash map from token's locations to comments to reduce memory cost.\n * This uses binary-searching instead for comments.\n */\nmodule.exports = class TokenStore {\n\n    /**\n     * Initializes this token store.\n     * @param {Token[]} tokens The array of tokens.\n     * @param {Comment[]} comments The array of comments.\n     */\n    constructor(tokens, comments) {\n        this[TOKENS] = tokens;\n        this[COMMENTS] = comments;\n        this[INDEX_MAP] = createIndexMap(tokens, comments);\n    }\n\n    //--------------------------------------------------------------------------\n    // Gets single token.\n    //--------------------------------------------------------------------------\n\n    /**\n     * Gets the token starting at the specified index.\n     * @param {number} offset Index of the start of the token's range.\n     * @param {Object} [options=0] The option object.\n     * @param {boolean} [options.includeComments=false] The flag to iterate comments as well.\n     * @returns {Token|null} The token starting at index, or null if no such token.\n     */\n    getTokenByRangeStart(offset, options) {\n        const includeComments = options && options.includeComments;\n        const token = cursors.forward.createBaseCursor(\n            this[TOKENS],\n            this[COMMENTS],\n            this[INDEX_MAP],\n            offset,\n            -1,\n            includeComments\n        ).getOneToken();\n\n        if (token && token.range[0] === offset) {\n            return token;\n        }\n        return null;\n    }\n\n    /**\n     * Gets the first token of the given node.\n     * @param {ASTNode} node The AST node.\n     * @param {number|Function|Object} [options=0] The option object. If this is a number then it's `options.skip`. If this is a function then it's `options.filter`.\n     * @param {boolean} [options.includeComments=false] The flag to iterate comments as well.\n     * @param {Function|null} [options.filter=null] The predicate function to choose tokens.\n     * @param {number} [options.skip=0] The count of tokens the cursor skips.\n     * @returns {Token|null} An object representing the token.\n     */\n    getFirstToken(node, options) {\n        return createCursorWithSkip(\n            cursors.forward,\n            this[TOKENS],\n            this[COMMENTS],\n            this[INDEX_MAP],\n            node.range[0],\n            node.range[1],\n            options\n        ).getOneToken();\n    }\n\n    /**\n     * Gets the last token of the given node.\n     * @param {ASTNode} node The AST node.\n     * @param {number|Function|Object} [options=0] The option object. Same options as getFirstToken()\n     * @returns {Token|null} An object representing the token.\n     */\n    getLastToken(node, options) {\n        return createCursorWithSkip(\n            cursors.backward,\n            this[TOKENS],\n            this[COMMENTS],\n            this[INDEX_MAP],\n            node.range[0],\n            node.range[1],\n            options\n        ).getOneToken();\n    }\n\n    /**\n     * Gets the token that precedes a given node or token.\n     * @param {ASTNode|Token|Comment} node The AST node or token.\n     * @param {number|Function|Object} [options=0] The option object. Same options as getFirstToken()\n     * @returns {Token|null} An object representing the token.\n     */\n    getTokenBefore(node, options) {\n        return createCursorWithSkip(\n            cursors.backward,\n            this[TOKENS],\n            this[COMMENTS],\n            this[INDEX_MAP],\n            -1,\n            node.range[0],\n            options\n        ).getOneToken();\n    }\n\n    /**\n     * Gets the token that follows a given node or token.\n     * @param {ASTNode|Token|Comment} node The AST node or token.\n     * @param {number|Function|Object} [options=0] The option object. Same options as getFirstToken()\n     * @returns {Token|null} An object representing the token.\n     */\n    getTokenAfter(node, options) {\n        return createCursorWithSkip(\n            cursors.forward,\n            this[TOKENS],\n            this[COMMENTS],\n            this[INDEX_MAP],\n            node.range[1],\n            -1,\n            options\n        ).getOneToken();\n    }\n\n    /**\n     * Gets the first token between two non-overlapping nodes.\n     * @param {ASTNode|Token|Comment} left Node before the desired token range.\n     * @param {ASTNode|Token|Comment} right Node after the desired token range.\n     * @param {number|Function|Object} [options=0] The option object. Same options as getFirstToken()\n     * @returns {Token|null} An object representing the token.\n     */\n    getFirstTokenBetween(left, right, options) {\n        return createCursorWithSkip(\n            cursors.forward,\n            this[TOKENS],\n            this[COMMENTS],\n            this[INDEX_MAP],\n            left.range[1],\n            right.range[0],\n            options\n        ).getOneToken();\n    }\n\n    /**\n     * Gets the last token between two non-overlapping nodes.\n     * @param {ASTNode|Token|Comment} left Node before the desired token range.\n     * @param {ASTNode|Token|Comment} right Node after the desired token range.\n     * @param {number|Function|Object} [options=0] The option object. Same options as getFirstToken()\n     * @returns {Token|null} An object representing the token.\n     */\n    getLastTokenBetween(left, right, options) {\n        return createCursorWithSkip(\n            cursors.backward,\n            this[TOKENS],\n            this[COMMENTS],\n            this[INDEX_MAP],\n            left.range[1],\n            right.range[0],\n            options\n        ).getOneToken();\n    }\n\n    /**\n     * Gets the token that precedes a given node or token in the token stream.\n     * This is defined for backward compatibility. Use `includeComments` option instead.\n     * TODO: We have a plan to remove this in a future major version.\n     * @param {ASTNode|Token|Comment} node The AST node or token.\n     * @param {number} [skip=0] A number of tokens to skip.\n     * @returns {Token|null} An object representing the token.\n     * @deprecated\n     */\n    getTokenOrCommentBefore(node, skip) {\n        return this.getTokenBefore(node, { includeComments: true, skip });\n    }\n\n    /**\n     * Gets the token that follows a given node or token in the token stream.\n     * This is defined for backward compatibility. Use `includeComments` option instead.\n     * TODO: We have a plan to remove this in a future major version.\n     * @param {ASTNode|Token|Comment} node The AST node or token.\n     * @param {number} [skip=0] A number of tokens to skip.\n     * @returns {Token|null} An object representing the token.\n     * @deprecated\n     */\n    getTokenOrCommentAfter(node, skip) {\n        return this.getTokenAfter(node, { includeComments: true, skip });\n    }\n\n    //--------------------------------------------------------------------------\n    // Gets multiple tokens.\n    //--------------------------------------------------------------------------\n\n    /**\n     * Gets the first `count` tokens of the given node.\n     * @param {ASTNode} node The AST node.\n     * @param {number|Function|Object} [options=0] The option object. If this is a number then it's `options.count`. If this is a function then it's `options.filter`.\n     * @param {boolean} [options.includeComments=false] The flag to iterate comments as well.\n     * @param {Function|null} [options.filter=null] The predicate function to choose tokens.\n     * @param {number} [options.count=0] The maximum count of tokens the cursor iterates.\n     * @returns {Token[]} Tokens.\n     */\n    getFirstTokens(node, options) {\n        return createCursorWithCount(\n            cursors.forward,\n            this[TOKENS],\n            this[COMMENTS],\n            this[INDEX_MAP],\n            node.range[0],\n            node.range[1],\n            options\n        ).getAllTokens();\n    }\n\n    /**\n     * Gets the last `count` tokens of the given node.\n     * @param {ASTNode} node The AST node.\n     * @param {number|Function|Object} [options=0] The option object. Same options as getFirstTokens()\n     * @returns {Token[]} Tokens.\n     */\n    getLastTokens(node, options) {\n        return createCursorWithCount(\n            cursors.backward,\n            this[TOKENS],\n            this[COMMENTS],\n            this[INDEX_MAP],\n            node.range[0],\n            node.range[1],\n            options\n        ).getAllTokens().reverse();\n    }\n\n    /**\n     * Gets the `count` tokens that precedes a given node or token.\n     * @param {ASTNode|Token|Comment} node The AST node or token.\n     * @param {number|Function|Object} [options=0] The option object. Same options as getFirstTokens()\n     * @returns {Token[]} Tokens.\n     */\n    getTokensBefore(node, options) {\n        return createCursorWithCount(\n            cursors.backward,\n            this[TOKENS],\n            this[COMMENTS],\n            this[INDEX_MAP],\n            -1,\n            node.range[0],\n            options\n        ).getAllTokens().reverse();\n    }\n\n    /**\n     * Gets the `count` tokens that follows a given node or token.\n     * @param {ASTNode|Token|Comment} node The AST node or token.\n     * @param {number|Function|Object} [options=0] The option object. Same options as getFirstTokens()\n     * @returns {Token[]} Tokens.\n     */\n    getTokensAfter(node, options) {\n        return createCursorWithCount(\n            cursors.forward,\n            this[TOKENS],\n            this[COMMENTS],\n            this[INDEX_MAP],\n            node.range[1],\n            -1,\n            options\n        ).getAllTokens();\n    }\n\n    /**\n     * Gets the first `count` tokens between two non-overlapping nodes.\n     * @param {ASTNode|Token|Comment} left Node before the desired token range.\n     * @param {ASTNode|Token|Comment} right Node after the desired token range.\n     * @param {number|Function|Object} [options=0] The option object. Same options as getFirstTokens()\n     * @returns {Token[]} Tokens between left and right.\n     */\n    getFirstTokensBetween(left, right, options) {\n        return createCursorWithCount(\n            cursors.forward,\n            this[TOKENS],\n            this[COMMENTS],\n            this[INDEX_MAP],\n            left.range[1],\n            right.range[0],\n            options\n        ).getAllTokens();\n    }\n\n    /**\n     * Gets the last `count` tokens between two non-overlapping nodes.\n     * @param {ASTNode|Token|Comment} left Node before the desired token range.\n     * @param {ASTNode|Token|Comment} right Node after the desired token range.\n     * @param {number|Function|Object} [options=0] The option object. Same options as getFirstTokens()\n     * @returns {Token[]} Tokens between left and right.\n     */\n    getLastTokensBetween(left, right, options) {\n        return createCursorWithCount(\n            cursors.backward,\n            this[TOKENS],\n            this[COMMENTS],\n            this[INDEX_MAP],\n            left.range[1],\n            right.range[0],\n            options\n        ).getAllTokens().reverse();\n    }\n\n    /**\n     * Gets all tokens that are related to the given node.\n     * @param {ASTNode} node The AST node.\n     * @param {Function|Object} options The option object. If this is a function then it's `options.filter`.\n     * @param {boolean} [options.includeComments=false] The flag to iterate comments as well.\n     * @param {Function|null} [options.filter=null] The predicate function to choose tokens.\n     * @param {number} [options.count=0] The maximum count of tokens the cursor iterates.\n     * @returns {Token[]} Array of objects representing tokens.\n     */\n    /**\n     * Gets all tokens that are related to the given node.\n     * @param {ASTNode} node The AST node.\n     * @param {int} [beforeCount=0] The number of tokens before the node to retrieve.\n     * @param {int} [afterCount=0] The number of tokens after the node to retrieve.\n     * @returns {Token[]} Array of objects representing tokens.\n     */\n    getTokens(node, beforeCount, afterCount) {\n        return createCursorWithPadding(\n            this[TOKENS],\n            this[COMMENTS],\n            this[INDEX_MAP],\n            node.range[0],\n            node.range[1],\n            beforeCount,\n            afterCount\n        ).getAllTokens();\n    }\n\n    /**\n     * Gets all of the tokens between two non-overlapping nodes.\n     * @param {ASTNode|Token|Comment} left Node before the desired token range.\n     * @param {ASTNode|Token|Comment} right Node after the desired token range.\n     * @param {Function|Object} options The option object. If this is a function then it's `options.filter`.\n     * @param {boolean} [options.includeComments=false] The flag to iterate comments as well.\n     * @param {Function|null} [options.filter=null] The predicate function to choose tokens.\n     * @param {number} [options.count=0] The maximum count of tokens the cursor iterates.\n     * @returns {Token[]} Tokens between left and right.\n     */\n    /**\n     * Gets all of the tokens between two non-overlapping nodes.\n     * @param {ASTNode|Token|Comment} left Node before the desired token range.\n     * @param {ASTNode|Token|Comment} right Node after the desired token range.\n     * @param {int} [padding=0] Number of extra tokens on either side of center.\n     * @returns {Token[]} Tokens between left and right.\n     */\n    getTokensBetween(left, right, padding) {\n        return createCursorWithPadding(\n            this[TOKENS],\n            this[COMMENTS],\n            this[INDEX_MAP],\n            left.range[1],\n            right.range[0],\n            padding,\n            padding\n        ).getAllTokens();\n    }\n\n    //--------------------------------------------------------------------------\n    // Others.\n    //--------------------------------------------------------------------------\n\n    /**\n     * Checks whether any comments exist or not between the given 2 nodes.\n     * @param {ASTNode} left The node to check.\n     * @param {ASTNode} right The node to check.\n     * @returns {boolean} `true` if one or more comments exist.\n     */\n    commentsExistBetween(left, right) {\n        const index = utils.search(this[COMMENTS], left.range[1]);\n\n        return (\n            index < this[COMMENTS].length &&\n            this[COMMENTS][index].range[1] <= right.range[0]\n        );\n    }\n\n    /**\n     * Gets all comment tokens directly before the given node or token.\n     * @param {ASTNode|token} nodeOrToken The AST node or token to check for adjacent comment tokens.\n     * @returns {Array} An array of comments in occurrence order.\n     */\n    getCommentsBefore(nodeOrToken) {\n        const cursor = createCursorWithCount(\n            cursors.backward,\n            this[TOKENS],\n            this[COMMENTS],\n            this[INDEX_MAP],\n            -1,\n            nodeOrToken.range[0],\n            { includeComments: true }\n        );\n\n        return getAdjacentCommentTokensFromCursor(cursor).reverse();\n    }\n\n    /**\n     * Gets all comment tokens directly after the given node or token.\n     * @param {ASTNode|token} nodeOrToken The AST node or token to check for adjacent comment tokens.\n     * @returns {Array} An array of comments in occurrence order.\n     */\n    getCommentsAfter(nodeOrToken) {\n        const cursor = createCursorWithCount(\n            cursors.forward,\n            this[TOKENS],\n            this[COMMENTS],\n            this[INDEX_MAP],\n            nodeOrToken.range[1],\n            -1,\n            { includeComments: true }\n        );\n\n        return getAdjacentCommentTokensFromCursor(cursor);\n    }\n\n    /**\n     * Gets all comment tokens inside the given node.\n     * @param {ASTNode} node The AST node to get the comments for.\n     * @returns {Array} An array of comments in occurrence order.\n     */\n    getCommentsInside(node) {\n        return this.getTokens(node, {\n            includeComments: true,\n            filter: isCommentToken\n        });\n    }\n};\n /lib/rules/no-confusing-arrow.js\n;/**\n * @fileoverview A rule to warn against using arrow functions when they could be\n * confused with comparisons\n * @author Jxck <https://github.com/Jxck>\n */\n\n\"use strict\";\n\nconst astUtils = require(\"./utils/ast-utils.js\");\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\n/**\n * Checks whether or not a node is a conditional expression.\n * @param {ASTNode} node node to test\n * @returns {boolean} `true` if the node is a conditional expression.\n */\nfunction isConditional(node) {\n    return node && node.type === \"ConditionalExpression\";\n}\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow arrow functions where they could be confused with comparisons\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-confusing-arrow\"\n        },\n\n        fixable: \"code\",\n\n        schema: [{\n            type: \"object\",\n            properties: {\n                allowParens: { type: \"boolean\", default: true }\n            },\n            additionalProperties: false\n        }],\n\n        messages: {\n            confusing: \"Arrow function used ambiguously with a conditional expression.\"\n        }\n    },\n\n    create(context) {\n        const config = context.options[0] || {};\n        const allowParens = config.allowParens || (config.allowParens === void 0);\n        const sourceCode = context.getSourceCode();\n\n\n        /**\n         * Reports if an arrow function contains an ambiguous conditional.\n         * @param {ASTNode} node A node to check and report.\n         * @returns {void}\n         */\n        function checkArrowFunc(node) {\n            const body = node.body;\n\n            if (isConditional(body) && !(allowParens && astUtils.isParenthesised(sourceCode, body))) {\n                context.report({\n                    node,\n                    messageId: \"confusing\",\n                    fix(fixer) {\n\n                        // if `allowParens` is not set to true don't bother wrapping in parens\n                        return allowParens && fixer.replaceText(node.body, `(${sourceCode.getText(node.body)})`);\n                    }\n                });\n            }\n        }\n\n        return {\n            ArrowFunctionExpression: checkArrowFunc\n        };\n    }\n};\n/lib/cli-engine/cli-engine.jsŔD/**\n * @fileoverview Main CLI object.\n * @author Nicholas C. Zakas\n */\n\n\"use strict\";\n\n/*\n * The CLI object should *not* call process.exit() directly. It should only return\n * exit codes. This allows other programs to use the CLI object and still control\n * when the program exits.\n */\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst fs = require(\"fs\");\nconst path = require(\"path\");\nconst defaultOptions = require(\"../../conf/default-cli-options\");\nconst pkg = require(\"../../package.json\");\n\n\nconst {\n    Legacy: {\n        ConfigOps,\n        naming,\n        CascadingConfigArrayFactory,\n        IgnorePattern,\n        getUsedExtractedConfigs,\n        ModuleResolver\n    }\n} = require(\"@eslint/eslintrc\");\n\nconst { FileEnumerator } = require(\"./file-enumerator\");\n\nconst { Linter } = require(\"../linter\");\nconst builtInRules = require(\"../rules\");\nconst loadRules = require(\"./load-rules\");\nconst hash = require(\"./hash\");\nconst LintResultCache = require(\"./lint-result-cache\");\n\nconst debug = require(\"debug\")(\"eslint:cli-engine\");\nconst validFixTypes = new Set([\"directive\", \"problem\", \"suggestion\", \"layout\"]);\n\n//------------------------------------------------------------------------------\n// Typedefs\n//------------------------------------------------------------------------------\n\n// For VSCode IntelliSense\n/** @typedef {import(\"../shared/types\").ConfigData} ConfigData */\n/** @typedef {import(\"../shared/types\").DeprecatedRuleInfo} DeprecatedRuleInfo */\n/** @typedef {import(\"../shared/types\").LintMessage} LintMessage */\n/** @typedef {import(\"../shared/types\").SuppressedLintMessage} SuppressedLintMessage */\n/** @typedef {import(\"../shared/types\").ParserOptions} ParserOptions */\n/** @typedef {import(\"../shared/types\").Plugin} Plugin */\n/** @typedef {import(\"../shared/types\").RuleConf} RuleConf */\n/** @typedef {import(\"../shared/types\").Rule} Rule */\n/** @typedef {ReturnType<CascadingConfigArrayFactory.getConfigArrayForFile>} ConfigArray */\n/** @typedef {ReturnType<ConfigArray.extractConfig>} ExtractedConfig */\n\n/**\n * The options to configure a CLI engine with.\n * @typedef {Object} CLIEngineOptions\n * @property {boolean} [allowInlineConfig] Enable or disable inline configuration comments.\n * @property {ConfigData} [baseConfig] Base config object, extended by all configs used with this CLIEngine instance\n * @property {boolean} [cache] Enable result caching.\n * @property {string} [cacheLocation] The cache file to use instead of .eslintcache.\n * @property {string} [configFile] The configuration file to use.\n * @property {string} [cwd] The value to use for the current working directory.\n * @property {string[]} [envs] An array of environments to load.\n * @property {string[]|null} [extensions] An array of file extensions to check.\n * @property {boolean|Function} [fix] Execute in autofix mode. If a function, should return a boolean.\n * @property {string[]} [fixTypes] Array of rule types to apply fixes for.\n * @property {string[]} [globals] An array of global variables to declare.\n * @property {boolean} [ignore] False disables use of .eslintignore.\n * @property {string} [ignorePath] The ignore file to use instead of .eslintignore.\n * @property {string|string[]} [ignorePattern] One or more glob patterns to ignore.\n * @property {boolean} [useEslintrc] False disables looking for .eslintrc\n * @property {string} [parser] The name of the parser to use.\n * @property {ParserOptions} [parserOptions] An object of parserOption settings to use.\n * @property {string[]} [plugins] An array of plugins to load.\n * @property {Record<string,RuleConf>} [rules] An object of rules to use.\n * @property {string[]} [rulePaths] An array of directories to load custom rules from.\n * @property {boolean} [reportUnusedDisableDirectives] `true` adds reports for unused eslint-disable directives\n * @property {boolean} [globInputPaths] Set to false to skip glob resolution of input file paths to lint (default: true). If false, each input file paths is assumed to be a non-glob path to an existing file.\n * @property {string} [resolvePluginsRelativeTo] The folder where plugins should be resolved from, defaulting to the CWD\n */\n\n/**\n * A linting result.\n * @typedef {Object} LintResult\n * @property {string} filePath The path to the file that was linted.\n * @property {LintMessage[]} messages All of the messages for the result.\n * @property {SuppressedLintMessage[]} suppressedMessages All of the suppressed messages for the result.\n * @property {number} errorCount Number of errors for the result.\n * @property {number} fatalErrorCount Number of fatal errors for the result.\n * @property {number} warningCount Number of warnings for the result.\n * @property {number} fixableErrorCount Number of fixable errors for the result.\n * @property {number} fixableWarningCount Number of fixable warnings for the result.\n * @property {string} [source] The source code of the file that was linted.\n * @property {string} [output] The source code of the file that was linted, with as many fixes applied as possible.\n */\n\n/**\n * Linting results.\n * @typedef {Object} LintReport\n * @property {LintResult[]} results All of the result.\n * @property {number} errorCount Number of errors for the result.\n * @property {number} fatalErrorCount Number of fatal errors for the result.\n * @property {number} warningCount Number of warnings for the result.\n * @property {number} fixableErrorCount Number of fixable errors for the result.\n * @property {number} fixableWarningCount Number of fixable warnings for the result.\n * @property {DeprecatedRuleInfo[]} usedDeprecatedRules The list of used deprecated rules.\n */\n\n/**\n * Private data for CLIEngine.\n * @typedef {Object} CLIEngineInternalSlots\n * @property {Map<string, Plugin>} additionalPluginPool The map for additional plugins.\n * @property {string} cacheFilePath The path to the cache of lint results.\n * @property {CascadingConfigArrayFactory} configArrayFactory The factory of configs.\n * @property {(filePath: string) => boolean} defaultIgnores The default predicate function to check if a file ignored or not.\n * @property {FileEnumerator} fileEnumerator The file enumerator.\n * @property {ConfigArray[]} lastConfigArrays The list of config arrays that the last `executeOnFiles` or `executeOnText` used.\n * @property {LintResultCache|null} lintResultCache The cache of lint results.\n * @property {Linter} linter The linter instance which has loaded rules.\n * @property {CLIEngineOptions} options The normalized options of this instance.\n */\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\n/** @type {WeakMap<CLIEngine, CLIEngineInternalSlots>} */\nconst internalSlotsMap = new WeakMap();\n\n/**\n * Determines if each fix type in an array is supported by ESLint and throws\n * an error if not.\n * @param {string[]} fixTypes An array of fix types to check.\n * @returns {void}\n * @throws {Error} If an invalid fix type is found.\n */\nfunction validateFixTypes(fixTypes) {\n    for (const fixType of fixTypes) {\n        if (!validFixTypes.has(fixType)) {\n            throw new Error(`Invalid fix type \"${fixType}\" found.`);\n        }\n    }\n}\n\n/**\n * It will calculate the error and warning count for collection of messages per file\n * @param {LintMessage[]} messages Collection of messages\n * @returns {Object} Contains the stats\n * @private\n */\nfunction calculateStatsPerFile(messages) {\n    return messages.reduce((stat, message) => {\n        if (message.fatal || message.severity === 2) {\n            stat.errorCount++;\n            if (message.fatal) {\n                stat.fatalErrorCount++;\n            }\n            if (message.fix) {\n                stat.fixableErrorCount++;\n            }\n        } else {\n            stat.warningCount++;\n            if (message.fix) {\n                stat.fixableWarningCount++;\n            }\n        }\n        return stat;\n    }, {\n        errorCount: 0,\n        fatalErrorCount: 0,\n        warningCount: 0,\n        fixableErrorCount: 0,\n        fixableWarningCount: 0\n    });\n}\n\n/**\n * It will calculate the error and warning count for collection of results from all files\n * @param {LintResult[]} results Collection of messages from all the files\n * @returns {Object} Contains the stats\n * @private\n */\nfunction calculateStatsPerRun(results) {\n    return results.reduce((stat, result) => {\n        stat.errorCount += result.errorCount;\n        stat.fatalErrorCount += result.fatalErrorCount;\n        stat.warningCount += result.warningCount;\n        stat.fixableErrorCount += result.fixableErrorCount;\n        stat.fixableWarningCount += result.fixableWarningCount;\n        return stat;\n    }, {\n        errorCount: 0,\n        fatalErrorCount: 0,\n        warningCount: 0,\n        fixableErrorCount: 0,\n        fixableWarningCount: 0\n    });\n}\n\n/**\n * Processes an source code using ESLint.\n * @param {Object} config The config object.\n * @param {string} config.text The source code to verify.\n * @param {string} config.cwd The path to the current working directory.\n * @param {string|undefined} config.filePath The path to the file of `text`. If this is undefined, it uses `<text>`.\n * @param {ConfigArray} config.config The config.\n * @param {boolean} config.fix If `true` then it does fix.\n * @param {boolean} config.allowInlineConfig If `true` then it uses directive comments.\n * @param {boolean} config.reportUnusedDisableDirectives If `true` then it reports unused `eslint-disable` comments.\n * @param {FileEnumerator} config.fileEnumerator The file enumerator to check if a path is a target or not.\n * @param {Linter} config.linter The linter instance to verify.\n * @returns {LintResult} The result of linting.\n * @private\n */\nfunction verifyText({\n    text,\n    cwd,\n    filePath: providedFilePath,\n    config,\n    fix,\n    allowInlineConfig,\n    reportUnusedDisableDirectives,\n    fileEnumerator,\n    linter\n}) {\n    const filePath = providedFilePath || \"<text>\";\n\n    debug(`Lint ${filePath}`);\n\n    /*\n     * Verify.\n     * `config.extractConfig(filePath)` requires an absolute path, but `linter`\n     * doesn't know CWD, so it gives `linter` an absolute path always.\n     */\n    const filePathToVerify = filePath === \"<text>\" ? path.join(cwd, filePath) : filePath;\n    const { fixed, messages, output } = linter.verifyAndFix(\n        text,\n        config,\n        {\n            allowInlineConfig,\n            filename: filePathToVerify,\n            fix,\n            reportUnusedDisableDirectives,\n\n            /**\n             * Check if the linter should adopt a given code block or not.\n             * @param {string} blockFilename The virtual filename of a code block.\n             * @returns {boolean} `true` if the linter should adopt the code block.\n             */\n            filterCodeBlock(blockFilename) {\n                return fileEnumerator.isTargetPath(blockFilename);\n            }\n        }\n    );\n\n    // Tweak and return.\n    const result = {\n        filePath,\n        messages,\n        suppressedMessages: linter.getSuppressedMessages(),\n        ...calculateStatsPerFile(messages)\n    };\n\n    if (fixed) {\n        result.output = output;\n    }\n    if (\n        result.errorCount + result.warningCount > 0 &&\n        typeof result.output === \"undefined\"\n    ) {\n        result.source = text;\n    }\n\n    return result;\n}\n\n/**\n * Returns result with warning by ignore settings\n * @param {string} filePath File path of checked code\n * @param {string} baseDir Absolute path of base directory\n * @returns {LintResult} Result with single warning\n * @private\n */\nfunction createIgnoreResult(filePath, baseDir) {\n    let message;\n    const isHidden = filePath.split(path.sep)\n        .find(segment => /^\\./u.test(segment));\n    const isInNodeModules = baseDir && path.relative(baseDir, filePath).startsWith(\"node_modules\");\n\n    if (isHidden) {\n        message = \"File ignored by default.  Use a negated ignore pattern (like \\\"--ignore-pattern '!<relative/path/to/filename>'\\\") to override.\";\n    } else if (isInNodeModules) {\n        message = \"File ignored by default. Use \\\"--ignore-pattern '!node_modules/*'\\\" to override.\";\n    } else {\n        message = \"File ignored because of a matching ignore pattern. Use \\\"--no-ignore\\\" to override.\";\n    }\n\n    return {\n        filePath: path.resolve(filePath),\n        messages: [\n            {\n                fatal: false,\n                severity: 1,\n                message\n            }\n        ],\n        suppressedMessages: [],\n        errorCount: 0,\n        fatalErrorCount: 0,\n        warningCount: 1,\n        fixableErrorCount: 0,\n        fixableWarningCount: 0\n    };\n}\n\n/**\n * Get a rule.\n * @param {string} ruleId The rule ID to get.\n * @param {ConfigArray[]} configArrays The config arrays that have plugin rules.\n * @returns {Rule|null} The rule or null.\n */\nfunction getRule(ruleId, configArrays) {\n    for (const configArray of configArrays) {\n        const rule = configArray.pluginRules.get(ruleId);\n\n        if (rule) {\n            return rule;\n        }\n    }\n    return builtInRules.get(ruleId) || null;\n}\n\n/**\n * Checks whether a message's rule type should be fixed.\n * @param {LintMessage} message The message to check.\n * @param {ConfigArray[]} lastConfigArrays The list of config arrays that the last `executeOnFiles` or `executeOnText` used.\n * @param {string[]} fixTypes An array of fix types to check.\n * @returns {boolean} Whether the message should be fixed.\n */\nfunction shouldMessageBeFixed(message, lastConfigArrays, fixTypes) {\n    if (!message.ruleId) {\n        return fixTypes.has(\"directive\");\n    }\n\n    const rule = message.ruleId && getRule(message.ruleId, lastConfigArrays);\n\n    return Boolean(rule && rule.meta && fixTypes.has(rule.meta.type));\n}\n\n/**\n * Collect used deprecated rules.\n * @param {ConfigArray[]} usedConfigArrays The config arrays which were used.\n * @returns {IterableIterator<DeprecatedRuleInfo>} Used deprecated rules.\n */\nfunction *iterateRuleDeprecationWarnings(usedConfigArrays) {\n    const processedRuleIds = new Set();\n\n    // Flatten used configs.\n    /** @type {ExtractedConfig[]} */\n    const configs = [].concat(\n        ...usedConfigArrays.map(getUsedExtractedConfigs)\n    );\n\n    // Traverse rule configs.\n    for (const config of configs) {\n        for (const [ruleId, ruleConfig] of Object.entries(config.rules)) {\n\n            // Skip if it was processed.\n            if (processedRuleIds.has(ruleId)) {\n                continue;\n            }\n            processedRuleIds.add(ruleId);\n\n            // Skip if it's not used.\n            if (!ConfigOps.getRuleSeverity(ruleConfig)) {\n                continue;\n            }\n            const rule = getRule(ruleId, usedConfigArrays);\n\n            // Skip if it's not deprecated.\n            if (!(rule && rule.meta && rule.meta.deprecated)) {\n                continue;\n            }\n\n            // This rule was used and deprecated.\n            yield {\n                ruleId,\n                replacedBy: rule.meta.replacedBy || []\n            };\n        }\n    }\n}\n\n/**\n * Checks if the given message is an error message.\n * @param {LintMessage} message The message to check.\n * @returns {boolean} Whether or not the message is an error message.\n * @private\n */\nfunction isErrorMessage(message) {\n    return message.severity === 2;\n}\n\n\n/**\n * return the cacheFile to be used by eslint, based on whether the provided parameter is\n * a directory or looks like a directory (ends in `path.sep`), in which case the file\n * name will be the `cacheFile/.cache_hashOfCWD`\n *\n * if cacheFile points to a file or looks like a file then it will just use that file\n * @param {string} cacheFile The name of file to be used to store the cache\n * @param {string} cwd Current working directory\n * @returns {string} the resolved path to the cache file\n */\nfunction getCacheFile(cacheFile, cwd) {\n\n    /*\n     * make sure the path separators are normalized for the environment/os\n     * keeping the trailing path separator if present\n     */\n    const normalizedCacheFile = path.normalize(cacheFile);\n\n    const resolvedCacheFile = path.resolve(cwd, normalizedCacheFile);\n    const looksLikeADirectory = normalizedCacheFile.slice(-1) === path.sep;\n\n    /**\n     * return the name for the cache file in case the provided parameter is a directory\n     * @returns {string} the resolved path to the cacheFile\n     */\n    function getCacheFileForDirectory() {\n        return path.join(resolvedCacheFile, `.cache_${hash(cwd)}`);\n    }\n\n    let fileStats;\n\n    try {\n        fileStats = fs.lstatSync(resolvedCacheFile);\n    } catch {\n        fileStats = null;\n    }\n\n\n    /*\n     * in case the file exists we need to verify if the provided path\n     * is a directory or a file. If it is a directory we want to create a file\n     * inside that directory\n     */\n    if (fileStats) {\n\n        /*\n         * is a directory or is a file, but the original file the user provided\n         * looks like a directory but `path.resolve` removed the `last path.sep`\n         * so we need to still treat this like a directory\n         */\n        if (fileStats.isDirectory() || looksLikeADirectory) {\n            return getCacheFileForDirectory();\n        }\n\n        // is file so just use that file\n        return resolvedCacheFile;\n    }\n\n    /*\n     * here we known the file or directory doesn't exist,\n     * so we will try to infer if its a directory if it looks like a directory\n     * for the current operating system.\n     */\n\n    // if the last character passed is a path separator we assume is a directory\n    if (looksLikeADirectory) {\n        return getCacheFileForDirectory();\n    }\n\n    return resolvedCacheFile;\n}\n\n/**\n * Convert a string array to a boolean map.\n * @param {string[]|null} keys The keys to assign true.\n * @param {boolean} defaultValue The default value for each property.\n * @param {string} displayName The property name which is used in error message.\n * @throws {Error} Requires array.\n * @returns {Record<string,boolean>} The boolean map.\n */\nfunction toBooleanMap(keys, defaultValue, displayName) {\n    if (keys && !Array.isArray(keys)) {\n        throw new Error(`${displayName} must be an array.`);\n    }\n    if (keys && keys.length > 0) {\n        return keys.reduce((map, def) => {\n            const [key, value] = def.split(\":\");\n\n            if (key !== \"__proto__\") {\n                map[key] = value === void 0\n                    ? defaultValue\n                    : value === \"true\";\n            }\n\n            return map;\n        }, {});\n    }\n    return void 0;\n}\n\n/**\n * Create a config data from CLI options.\n * @param {CLIEngineOptions} options The options\n * @returns {ConfigData|null} The created config data.\n */\nfunction createConfigDataFromOptions(options) {\n    const {\n        ignorePattern,\n        parser,\n        parserOptions,\n        plugins,\n        rules\n    } = options;\n    const env = toBooleanMap(options.envs, true, \"envs\");\n    const globals = toBooleanMap(options.globals, false, \"globals\");\n\n    if (\n        env === void 0 &&\n        globals === void 0 &&\n        (ignorePattern === void 0 || ignorePattern.length === 0) &&\n        parser === void 0 &&\n        parserOptions === void 0 &&\n        plugins === void 0 &&\n        rules === void 0\n    ) {\n        return null;\n    }\n    return {\n        env,\n        globals,\n        ignorePatterns: ignorePattern,\n        parser,\n        parserOptions,\n        plugins,\n        rules\n    };\n}\n\n/**\n * Checks whether a directory exists at the given location\n * @param {string} resolvedPath A path from the CWD\n * @throws {Error} As thrown by `fs.statSync` or `fs.isDirectory`.\n * @returns {boolean} `true` if a directory exists\n */\nfunction directoryExists(resolvedPath) {\n    try {\n        return fs.statSync(resolvedPath).isDirectory();\n    } catch (error) {\n        if (error && (error.code === \"ENOENT\" || error.code === \"ENOTDIR\")) {\n            return false;\n        }\n        throw error;\n    }\n}\n\n//------------------------------------------------------------------------------\n// Public Interface\n//------------------------------------------------------------------------------\n\n/**\n * Core CLI.\n */\nclass CLIEngine {\n\n    /**\n     * Creates a new instance of the core CLI engine.\n     * @param {CLIEngineOptions} providedOptions The options for this instance.\n     * @param {Object} [additionalData] Additional settings that are not CLIEngineOptions.\n     * @param {Record<string,Plugin>|null} [additionalData.preloadedPlugins] Preloaded plugins.\n     */\n    constructor(providedOptions, { preloadedPlugins } = {}) {\n        const options = Object.assign(\n            Object.create(null),\n            defaultOptions,\n            { cwd: process.cwd() },\n            providedOptions\n        );\n\n        if (options.fix === void 0) {\n            options.fix = false;\n        }\n\n        const additionalPluginPool = new Map();\n\n        if (preloadedPlugins) {\n            for (const [id, plugin] of Object.entries(preloadedPlugins)) {\n                additionalPluginPool.set(id, plugin);\n            }\n        }\n\n        const cacheFilePath = getCacheFile(\n            options.cacheLocation || options.cacheFile,\n            options.cwd\n        );\n        const configArrayFactory = new CascadingConfigArrayFactory({\n            additionalPluginPool,\n            baseConfig: options.baseConfig || null,\n            cliConfig: createConfigDataFromOptions(options),\n            cwd: options.cwd,\n            ignorePath: options.ignorePath,\n            resolvePluginsRelativeTo: options.resolvePluginsRelativeTo,\n            rulePaths: options.rulePaths,\n            specificConfigPath: options.configFile,\n            useEslintrc: options.useEslintrc,\n            builtInRules,\n            loadRules,\n            eslintRecommendedPath: path.resolve(__dirname, \"../../conf/eslint-recommended.js\"),\n            eslintAllPath: path.resolve(__dirname, \"../../conf/eslint-all.js\")\n        });\n        const fileEnumerator = new FileEnumerator({\n            configArrayFactory,\n            cwd: options.cwd,\n            extensions: options.extensions,\n            globInputPaths: options.globInputPaths,\n            errorOnUnmatchedPattern: options.errorOnUnmatchedPattern,\n            ignore: options.ignore\n        });\n        const lintResultCache =\n            options.cache ? new LintResultCache(cacheFilePath, options.cacheStrategy) : null;\n        const linter = new Linter({ cwd: options.cwd });\n\n        /** @type {ConfigArray[]} */\n        const lastConfigArrays = [configArrayFactory.getConfigArrayForFile()];\n\n        // Store private data.\n        internalSlotsMap.set(this, {\n            additionalPluginPool,\n            cacheFilePath,\n            configArrayFactory,\n            defaultIgnores: IgnorePattern.createDefaultIgnore(options.cwd),\n            fileEnumerator,\n            lastConfigArrays,\n            lintResultCache,\n            linter,\n            options\n        });\n\n        // setup special filter for fixes\n        if (options.fix && options.fixTypes && options.fixTypes.length > 0) {\n            debug(`Using fix types ${options.fixTypes}`);\n\n            // throw an error if any invalid fix types are found\n            validateFixTypes(options.fixTypes);\n\n            // convert to Set for faster lookup\n            const fixTypes = new Set(options.fixTypes);\n\n            // save original value of options.fix in case it's a function\n            const originalFix = (typeof options.fix === \"function\")\n                ? options.fix : () => true;\n\n            options.fix = message => shouldMessageBeFixed(message, lastConfigArrays, fixTypes) && originalFix(message);\n        }\n    }\n\n    getRules() {\n        const { lastConfigArrays } = internalSlotsMap.get(this);\n\n        return new Map(function *() {\n            yield* builtInRules;\n\n            for (const configArray of lastConfigArrays) {\n                yield* configArray.pluginRules;\n            }\n        }());\n    }\n\n    /**\n     * Returns results that only contains errors.\n     * @param {LintResult[]} results The results to filter.\n     * @returns {LintResult[]} The filtered results.\n     */\n    static getErrorResults(results) {\n        const filtered = [];\n\n        results.forEach(result => {\n            const filteredMessages = result.messages.filter(isErrorMessage);\n            const filteredSuppressedMessages = result.suppressedMessages.filter(isErrorMessage);\n\n            if (filteredMessages.length > 0) {\n                filtered.push({\n                    ...result,\n                    messages: filteredMessages,\n                    suppressedMessages: filteredSuppressedMessages,\n                    errorCount: filteredMessages.length,\n                    warningCount: 0,\n                    fixableErrorCount: result.fixableErrorCount,\n                    fixableWarningCount: 0\n                });\n            }\n        });\n\n        return filtered;\n    }\n\n    /**\n     * Outputs fixes from the given results to files.\n     * @param {LintReport} report The report object created by CLIEngine.\n     * @returns {void}\n     */\n    static outputFixes(report) {\n        report.results.filter(result => Object.prototype.hasOwnProperty.call(result, \"output\")).forEach(result => {\n            fs.writeFileSync(result.filePath, result.output);\n        });\n    }\n\n    /**\n     * Resolves the patterns passed into executeOnFiles() into glob-based patterns\n     * for easier handling.\n     * @param {string[]} patterns The file patterns passed on the command line.\n     * @returns {string[]} The equivalent glob patterns.\n     */\n    resolveFileGlobPatterns(patterns) {\n        const { options } = internalSlotsMap.get(this);\n\n        if (options.globInputPaths === false) {\n            return patterns.filter(Boolean);\n        }\n\n        const extensions = (options.extensions || [\".js\"]).map(ext => ext.replace(/^\\./u, \"\"));\n        const dirSuffix = `/**/*.{${extensions.join(\",\")}}`;\n\n        return patterns.filter(Boolean).map(pathname => {\n            const resolvedPath = path.resolve(options.cwd, pathname);\n            const newPath = directoryExists(resolvedPath)\n                ? pathname.replace(/[/\\\\]$/u, \"\") + dirSuffix\n                : pathname;\n\n            return path.normalize(newPath).replace(/\\\\/gu, \"/\");\n        });\n    }\n\n    /**\n     * Executes the current configuration on an array of file and directory names.\n     * @param {string[]} patterns An array of file and directory names.\n     * @throws {Error} As may be thrown by `fs.unlinkSync`.\n     * @returns {LintReport} The results for all files that were linted.\n     */\n    executeOnFiles(patterns) {\n        const {\n            cacheFilePath,\n            fileEnumerator,\n            lastConfigArrays,\n            lintResultCache,\n            linter,\n            options: {\n                allowInlineConfig,\n                cache,\n                cwd,\n                fix,\n                reportUnusedDisableDirectives\n            }\n        } = internalSlotsMap.get(this);\n        const results = [];\n        const startTime = Date.now();\n\n        // Clear the last used config arrays.\n        lastConfigArrays.length = 0;\n\n        // Delete cache file; should this do here?\n        if (!cache) {\n            try {\n                fs.unlinkSync(cacheFilePath);\n            } catch (error) {\n                const errorCode = error && error.code;\n\n                // Ignore errors when no such file exists or file system is read only (and cache file does not exist)\n                if (errorCode !== \"ENOENT\" && !(errorCode === \"EROFS\" && !fs.existsSync(cacheFilePath))) {\n                    throw error;\n                }\n            }\n        }\n\n        // Iterate source code files.\n        for (const { config, filePath, ignored } of fileEnumerator.iterateFiles(patterns)) {\n            if (ignored) {\n                results.push(createIgnoreResult(filePath, cwd));\n                continue;\n            }\n\n            /*\n             * Store used configs for:\n             * - this method uses to collect used deprecated rules.\n             * - `getRules()` method uses to collect all loaded rules.\n             * - `--fix-type` option uses to get the loaded rule's meta data.\n             */\n            if (!lastConfigArrays.includes(config)) {\n                lastConfigArrays.push(config);\n            }\n\n            // Skip if there is cached result.\n            if (lintResultCache) {\n                const cachedResult =\n                    lintResultCache.getCachedLintResults(filePath, config);\n\n                if (cachedResult) {\n                    const hadMessages =\n                        cachedResult.messages &&\n                        cachedResult.messages.length > 0;\n\n                    if (hadMessages && fix) {\n                        debug(`Reprocessing cached file to allow autofix: ${filePath}`);\n                    } else {\n                        debug(`Skipping file since it hasn't changed: ${filePath}`);\n                        results.push(cachedResult);\n                        continue;\n                    }\n                }\n            }\n\n            // Do lint.\n            const result = verifyText({\n                text: fs.readFileSync(filePath, \"utf8\"),\n                filePath,\n                config,\n                cwd,\n                fix,\n                allowInlineConfig,\n                reportUnusedDisableDirectives,\n                fileEnumerator,\n                linter\n            });\n\n            results.push(result);\n\n            /*\n             * Store the lint result in the LintResultCache.\n             * NOTE: The LintResultCache will remove the file source and any\n             * other properties that are difficult to serialize, and will\n             * hydrate those properties back in on future lint runs.\n             */\n            if (lintResultCache) {\n                lintResultCache.setCachedLintResults(filePath, config, result);\n            }\n        }\n\n        // Persist the cache to disk.\n        if (lintResultCache) {\n            lintResultCache.reconcile();\n        }\n\n        debug(`Linting complete in: ${Date.now() - startTime}ms`);\n        let usedDeprecatedRules;\n\n        return {\n            results,\n            ...calculateStatsPerRun(results),\n\n            // Initialize it lazily because CLI and `ESLint` API don't use it.\n            get usedDeprecatedRules() {\n                if (!usedDeprecatedRules) {\n                    usedDeprecatedRules = Array.from(\n                        iterateRuleDeprecationWarnings(lastConfigArrays)\n                    );\n                }\n                return usedDeprecatedRules;\n            }\n        };\n    }\n\n    /**\n     * Executes the current configuration on text.\n     * @param {string} text A string of JavaScript code to lint.\n     * @param {string} [filename] An optional string representing the texts filename.\n     * @param {boolean} [warnIgnored] Always warn when a file is ignored\n     * @returns {LintReport} The results for the linting.\n     */\n    executeOnText(text, filename, warnIgnored) {\n        const {\n            configArrayFactory,\n            fileEnumerator,\n            lastConfigArrays,\n            linter,\n            options: {\n                allowInlineConfig,\n                cwd,\n                fix,\n                reportUnusedDisableDirectives\n            }\n        } = internalSlotsMap.get(this);\n        const results = [];\n        const startTime = Date.now();\n        const resolvedFilename = filename && path.resolve(cwd, filename);\n\n\n        // Clear the last used config arrays.\n        lastConfigArrays.length = 0;\n        if (resolvedFilename && this.isPathIgnored(resolvedFilename)) {\n            if (warnIgnored) {\n                results.push(createIgnoreResult(resolvedFilename, cwd));\n            }\n        } else {\n            const config = configArrayFactory.getConfigArrayForFile(\n                resolvedFilename || \"__placeholder__.js\"\n            );\n\n            /*\n             * Store used configs for:\n             * - this method uses to collect used deprecated rules.\n             * - `getRules()` method uses to collect all loaded rules.\n             * - `--fix-type` option uses to get the loaded rule's meta data.\n             */\n            lastConfigArrays.push(config);\n\n            // Do lint.\n            results.push(verifyText({\n                text,\n                filePath: resolvedFilename,\n                config,\n                cwd,\n                fix,\n                allowInlineConfig,\n                reportUnusedDisableDirectives,\n                fileEnumerator,\n                linter\n            }));\n        }\n\n        debug(`Linting complete in: ${Date.now() - startTime}ms`);\n        let usedDeprecatedRules;\n\n        return {\n            results,\n            ...calculateStatsPerRun(results),\n\n            // Initialize it lazily because CLI and `ESLint` API don't use it.\n            get usedDeprecatedRules() {\n                if (!usedDeprecatedRules) {\n                    usedDeprecatedRules = Array.from(\n                        iterateRuleDeprecationWarnings(lastConfigArrays)\n                    );\n                }\n                return usedDeprecatedRules;\n            }\n        };\n    }\n\n    /**\n     * Returns a configuration object for the given file based on the CLI options.\n     * This is the same logic used by the ESLint CLI executable to determine\n     * configuration for each file it processes.\n     * @param {string} filePath The path of the file to retrieve a config object for.\n     * @throws {Error} If filepath a directory path.\n     * @returns {ConfigData} A configuration object for the file.\n     */\n    getConfigForFile(filePath) {\n        const { configArrayFactory, options } = internalSlotsMap.get(this);\n        const absolutePath = path.resolve(options.cwd, filePath);\n\n        if (directoryExists(absolutePath)) {\n            throw Object.assign(\n                new Error(\"'filePath' should not be a directory path.\"),\n                { messageTemplate: \"print-config-with-directory-path\" }\n            );\n        }\n\n        return configArrayFactory\n            .getConfigArrayForFile(absolutePath)\n            .extractConfig(absolutePath)\n            .toCompatibleObjectAsConfigFileContent();\n    }\n\n    /**\n     * Checks if a given path is ignored by ESLint.\n     * @param {string} filePath The path of the file to check.\n     * @returns {boolean} Whether or not the given path is ignored.\n     */\n    isPathIgnored(filePath) {\n        const {\n            configArrayFactory,\n            defaultIgnores,\n            options: { cwd, ignore }\n        } = internalSlotsMap.get(this);\n        const absolutePath = path.resolve(cwd, filePath);\n\n        if (ignore) {\n            const config = configArrayFactory\n                .getConfigArrayForFile(absolutePath)\n                .extractConfig(absolutePath);\n            const ignores = config.ignores || defaultIgnores;\n\n            return ignores(absolutePath);\n        }\n\n        return defaultIgnores(absolutePath);\n    }\n\n    /**\n     * Returns the formatter representing the given format or null if the `format` is not a string.\n     * @param {string} [format] The name of the format to load or the path to a\n     *      custom formatter.\n     * @throws {any} As may be thrown by requiring of formatter\n     * @returns {(Function|null)} The formatter function or null if the `format` is not a string.\n     */\n    getFormatter(format) {\n\n        // default is stylish\n        const resolvedFormatName = format || \"stylish\";\n\n        // only strings are valid formatters\n        if (typeof resolvedFormatName === \"string\") {\n\n            // replace \\ with / for Windows compatibility\n            const normalizedFormatName = resolvedFormatName.replace(/\\\\/gu, \"/\");\n\n            const slots = internalSlotsMap.get(this);\n            const cwd = slots ? slots.options.cwd : process.cwd();\n            const namespace = naming.getNamespaceFromTerm(normalizedFormatName);\n\n            let formatterPath;\n\n            // if there's a slash, then it's a file (TODO: this check seems dubious for scoped npm packages)\n            if (!namespace && normalizedFormatName.indexOf(\"/\") > -1) {\n                formatterPath = path.resolve(cwd, normalizedFormatName);\n            } else {\n                try {\n                    const npmFormat = naming.normalizePackageName(normalizedFormatName, \"eslint-formatter\");\n\n                    formatterPath = ModuleResolver.resolve(npmFormat, path.join(cwd, \"__placeholder__.js\"));\n                } catch {\n                    formatterPath = path.resolve(__dirname, \"formatters\", normalizedFormatName);\n                }\n            }\n\n            try {\n                return require(formatterPath);\n            } catch (ex) {\n                if (format === \"table\" || format === \"codeframe\") {\n                    ex.message = `The ${format} formatter is no longer part of core ESLint. Install it manually with \\`npm install -D eslint-formatter-${format}\\``;\n                } else {\n                    ex.message = `There was a problem loading formatter: ${formatterPath}\\nError: ${ex.message}`;\n                }\n                throw ex;\n            }\n\n        } else {\n            return null;\n        }\n    }\n}\n\nCLIEngine.version = pkg.version;\nCLIEngine.getFormatter = CLIEngine.prototype.getFormatter;\n\nmodule.exports = {\n    CLIEngine,\n\n    /**\n     * Get the internal slots of a given CLIEngine instance for tests.\n     * @param {CLIEngine} instance The CLIEngine instance to get.\n     * @returns {CLIEngineInternalSlots} The internal slots.\n     */\n    getCLIEngineInternalSlots(instance) {\n        return internalSlotsMap.get(instance);\n    }\n};\n/lib/rules/use-isnan.js\u0012/**\n * @fileoverview Rule to flag comparisons to the value NaN\n * @author James Allardice\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\n/**\n * Determines if the given node is a NaN `Identifier` node.\n * @param {ASTNode|null} node The node to check.\n * @returns {boolean} `true` if the node is 'NaN' identifier.\n */\nfunction isNaNIdentifier(node) {\n    return Boolean(node) && (\n        astUtils.isSpecificId(node, \"NaN\") ||\n        astUtils.isSpecificMemberAccess(node, \"Number\", \"NaN\")\n    );\n}\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"problem\",\n\n        docs: {\n            description: \"require calls to `isNaN()` when checking for `NaN`\",\n            recommended: true,\n            url: \"https://eslint.org/docs/rules/use-isnan\"\n        },\n\n        schema: [\n            {\n                type: \"object\",\n                properties: {\n                    enforceForSwitchCase: {\n                        type: \"boolean\",\n                        default: true\n                    },\n                    enforceForIndexOf: {\n                        type: \"boolean\",\n                        default: false\n                    }\n                },\n                additionalProperties: false\n            }\n        ],\n\n        messages: {\n            comparisonWithNaN: \"Use the isNaN function to compare with NaN.\",\n            switchNaN: \"'switch(NaN)' can never match a case clause. Use Number.isNaN instead of the switch.\",\n            caseNaN: \"'case NaN' can never match. Use Number.isNaN before the switch.\",\n            indexOfNaN: \"Array prototype method '{{ methodName }}' cannot find NaN.\"\n        }\n    },\n\n    create(context) {\n\n        const enforceForSwitchCase = !context.options[0] || context.options[0].enforceForSwitchCase;\n        const enforceForIndexOf = context.options[0] && context.options[0].enforceForIndexOf;\n\n        /**\n         * Checks the given `BinaryExpression` node for `foo === NaN` and other comparisons.\n         * @param {ASTNode} node The node to check.\n         * @returns {void}\n         */\n        function checkBinaryExpression(node) {\n            if (\n                /^(?:[<>]|[!=]=)=?$/u.test(node.operator) &&\n                (isNaNIdentifier(node.left) || isNaNIdentifier(node.right))\n            ) {\n                context.report({ node, messageId: \"comparisonWithNaN\" });\n            }\n        }\n\n        /**\n         * Checks the discriminant and all case clauses of the given `SwitchStatement` node for `switch(NaN)` and `case NaN:`\n         * @param {ASTNode} node The node to check.\n         * @returns {void}\n         */\n        function checkSwitchStatement(node) {\n            if (isNaNIdentifier(node.discriminant)) {\n                context.report({ node, messageId: \"switchNaN\" });\n            }\n\n            for (const switchCase of node.cases) {\n                if (isNaNIdentifier(switchCase.test)) {\n                    context.report({ node: switchCase, messageId: \"caseNaN\" });\n                }\n            }\n        }\n\n        /**\n         * Checks the given `CallExpression` node for `.indexOf(NaN)` and `.lastIndexOf(NaN)`.\n         * @param {ASTNode} node The node to check.\n         * @returns {void}\n         */\n        function checkCallExpression(node) {\n            const callee = astUtils.skipChainExpression(node.callee);\n\n            if (callee.type === \"MemberExpression\") {\n                const methodName = astUtils.getStaticPropertyName(callee);\n\n                if (\n                    (methodName === \"indexOf\" || methodName === \"lastIndexOf\") &&\n                    node.arguments.length === 1 &&\n                    isNaNIdentifier(node.arguments[0])\n                ) {\n                    context.report({ node, messageId: \"indexOfNaN\", data: { methodName } });\n                }\n            }\n        }\n\n        const listeners = {\n            BinaryExpression: checkBinaryExpression\n        };\n\n        if (enforceForSwitchCase) {\n            listeners.SwitchStatement = checkSwitchStatement;\n        }\n\n        if (enforceForIndexOf) {\n            listeners.CallExpression = checkCallExpression;\n        }\n\n        return listeners;\n    }\n};\n#/lib/rules/prefer-regex-literals.js4/**\n * @fileoverview Rule to disallow use of the `RegExp` constructor in favor of regular expression literals\n * @author Milos Djermanovic\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\nconst { CALL, CONSTRUCT, ReferenceTracker, findVariable } = require(\"eslint-utils\");\nconst { RegExpValidator, visitRegExpAST, RegExpParser } = require(\"regexpp\");\nconst { canTokensBeAdjacent } = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\nconst REGEXPP_LATEST_ECMA_VERSION = 2022;\n\n/**\n * Determines whether the given node is a string literal.\n * @param {ASTNode} node Node to check.\n * @returns {boolean} True if the node is a string literal.\n */\nfunction isStringLiteral(node) {\n    return node.type === \"Literal\" && typeof node.value === \"string\";\n}\n\n/**\n * Determines whether the given node is a regex literal.\n * @param {ASTNode} node Node to check.\n * @returns {boolean} True if the node is a regex literal.\n */\nfunction isRegexLiteral(node) {\n    return node.type === \"Literal\" && Object.prototype.hasOwnProperty.call(node, \"regex\");\n}\n\n/**\n * Determines whether the given node is a template literal without expressions.\n * @param {ASTNode} node Node to check.\n * @returns {boolean} True if the node is a template literal without expressions.\n */\nfunction isStaticTemplateLiteral(node) {\n    return node.type === \"TemplateLiteral\" && node.expressions.length === 0;\n}\n\nconst validPrecedingTokens = [\n    \"(\",\n    \";\",\n    \"[\",\n    \",\",\n    \"=\",\n    \"+\",\n    \"*\",\n    \"-\",\n    \"?\",\n    \"~\",\n    \"%\",\n    \"**\",\n    \"!\",\n    \"typeof\",\n    \"instanceof\",\n    \"&&\",\n    \"||\",\n    \"??\",\n    \"return\",\n    \"...\",\n    \"delete\",\n    \"void\",\n    \"in\",\n    \"<\",\n    \">\",\n    \"<=\",\n    \">=\",\n    \"==\",\n    \"===\",\n    \"!=\",\n    \"!==\",\n    \"<<\",\n    \">>\",\n    \">>>\",\n    \"&\",\n    \"|\",\n    \"^\",\n    \":\",\n    \"{\",\n    \"=>\",\n    \"*=\",\n    \"<<=\",\n    \">>=\",\n    \">>>=\",\n    \"^=\",\n    \"|=\",\n    \"&=\",\n    \"??=\",\n    \"||=\",\n    \"&&=\",\n    \"**=\",\n    \"+=\",\n    \"-=\",\n    \"/=\",\n    \"%=\",\n    \"/\",\n    \"do\",\n    \"break\",\n    \"continue\",\n    \"debugger\",\n    \"case\",\n    \"throw\"\n];\n\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow use of the `RegExp` constructor in favor of regular expression literals\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/prefer-regex-literals\"\n        },\n\n        hasSuggestions: true,\n\n        schema: [\n            {\n                type: \"object\",\n                properties: {\n                    disallowRedundantWrapping: {\n                        type: \"boolean\",\n                        default: false\n                    }\n                },\n                additionalProperties: false\n            }\n        ],\n\n        messages: {\n            unexpectedRegExp: \"Use a regular expression literal instead of the 'RegExp' constructor.\",\n            replaceWithLiteral: \"Replace with an equivalent regular expression literal.\",\n            unexpectedRedundantRegExp: \"Regular expression literal is unnecessarily wrapped within a 'RegExp' constructor.\",\n            unexpectedRedundantRegExpWithFlags: \"Use regular expression literal with flags instead of the 'RegExp' constructor.\"\n        }\n    },\n\n    create(context) {\n        const [{ disallowRedundantWrapping = false } = {}] = context.options;\n        const sourceCode = context.getSourceCode();\n\n        /**\n         * Determines whether the given identifier node is a reference to a global variable.\n         * @param {ASTNode} node `Identifier` node to check.\n         * @returns {boolean} True if the identifier is a reference to a global variable.\n         */\n        function isGlobalReference(node) {\n            const scope = context.getScope();\n            const variable = findVariable(scope, node);\n\n            return variable !== null && variable.scope.type === \"global\" && variable.defs.length === 0;\n        }\n\n        /**\n         * Determines whether the given node is a String.raw`` tagged template expression\n         * with a static template literal.\n         * @param {ASTNode} node Node to check.\n         * @returns {boolean} True if the node is String.raw`` with a static template.\n         */\n        function isStringRawTaggedStaticTemplateLiteral(node) {\n            return node.type === \"TaggedTemplateExpression\" &&\n                astUtils.isSpecificMemberAccess(node.tag, \"String\", \"raw\") &&\n                isGlobalReference(astUtils.skipChainExpression(node.tag).object) &&\n                isStaticTemplateLiteral(node.quasi);\n        }\n\n        /**\n         * Gets the value of a string\n         * @param {ASTNode} node The node to get the string of.\n         * @returns {string|null} The value of the node.\n         */\n        function getStringValue(node) {\n            if (isStringLiteral(node)) {\n                return node.value;\n            }\n\n            if (isStaticTemplateLiteral(node)) {\n                return node.quasis[0].value.cooked;\n            }\n\n            if (isStringRawTaggedStaticTemplateLiteral(node)) {\n                return node.quasi.quasis[0].value.raw;\n            }\n\n            return null;\n        }\n\n        /**\n         * Determines whether the given node is considered to be a static string by the logic of this rule.\n         * @param {ASTNode} node Node to check.\n         * @returns {boolean} True if the node is a static string.\n         */\n        function isStaticString(node) {\n            return isStringLiteral(node) ||\n                isStaticTemplateLiteral(node) ||\n                isStringRawTaggedStaticTemplateLiteral(node);\n        }\n\n        /**\n         * Determines whether the relevant arguments of the given are all static string literals.\n         * @param {ASTNode} node Node to check.\n         * @returns {boolean} True if all arguments are static strings.\n         */\n        function hasOnlyStaticStringArguments(node) {\n            const args = node.arguments;\n\n            if ((args.length === 1 || args.length === 2) && args.every(isStaticString)) {\n                return true;\n            }\n\n            return false;\n        }\n\n        /**\n         * Determines whether the arguments of the given node indicate that a regex literal is unnecessarily wrapped.\n         * @param {ASTNode} node Node to check.\n         * @returns {boolean} True if the node already contains a regex literal argument.\n         */\n        function isUnnecessarilyWrappedRegexLiteral(node) {\n            const args = node.arguments;\n\n            if (args.length === 1 && isRegexLiteral(args[0])) {\n                return true;\n            }\n\n            if (args.length === 2 && isRegexLiteral(args[0]) && isStaticString(args[1])) {\n                return true;\n            }\n\n            return false;\n        }\n\n        /**\n         * Returns a ecmaVersion compatible for regexpp.\n         * @param {any} ecmaVersion The ecmaVersion to convert.\n         * @returns {import(\"regexpp/ecma-versions\").EcmaVersion} The resulting ecmaVersion compatible for regexpp.\n         */\n        function getRegexppEcmaVersion(ecmaVersion) {\n            if (typeof ecmaVersion !== \"number\" || ecmaVersion <= 5) {\n                return 5;\n            }\n            return Math.min(ecmaVersion + 2009, REGEXPP_LATEST_ECMA_VERSION);\n        }\n\n        /**\n         * Makes a character escaped or else returns null.\n         * @param {string} character The character to escape.\n         * @returns {string} The resulting escaped character.\n         */\n        function resolveEscapes(character) {\n            switch (character) {\n                case \"\\n\":\n                case \"\\\\\\n\":\n                    return \"\\\\n\";\n\n                case \"\\r\":\n                case \"\\\\\\r\":\n                    return \"\\\\r\";\n\n                case \"\\t\":\n                case \"\\\\\\t\":\n                    return \"\\\\t\";\n\n                case \"\\v\":\n                case \"\\\\\\v\":\n                    return \"\\\\v\";\n\n                case \"\\f\":\n                case \"\\\\\\f\":\n                    return \"\\\\f\";\n\n                case \"/\":\n                    return \"\\\\/\";\n\n                default:\n                    return null;\n            }\n        }\n\n        return {\n            Program() {\n                const scope = context.getScope();\n                const tracker = new ReferenceTracker(scope);\n                const traceMap = {\n                    RegExp: {\n                        [CALL]: true,\n                        [CONSTRUCT]: true\n                    }\n                };\n\n                for (const { node } of tracker.iterateGlobalReferences(traceMap)) {\n                    if (disallowRedundantWrapping && isUnnecessarilyWrappedRegexLiteral(node)) {\n                        if (node.arguments.length === 2) {\n                            context.report({ node, messageId: \"unexpectedRedundantRegExpWithFlags\" });\n                        } else {\n                            context.report({ node, messageId: \"unexpectedRedundantRegExp\" });\n                        }\n                    } else if (hasOnlyStaticStringArguments(node)) {\n                        let regexContent = getStringValue(node.arguments[0]);\n                        let noFix = false;\n                        let flags;\n\n                        if (node.arguments[1]) {\n                            flags = getStringValue(node.arguments[1]);\n                        }\n\n                        const regexppEcmaVersion = getRegexppEcmaVersion(context.parserOptions.ecmaVersion);\n                        const RegExpValidatorInstance = new RegExpValidator({ ecmaVersion: regexppEcmaVersion });\n\n                        try {\n                            RegExpValidatorInstance.validatePattern(regexContent, 0, regexContent.length, flags ? flags.includes(\"u\") : false);\n                            if (flags) {\n                                RegExpValidatorInstance.validateFlags(flags);\n                            }\n                        } catch {\n                            noFix = true;\n                        }\n\n                        const tokenBefore = sourceCode.getTokenBefore(node);\n\n                        if (tokenBefore && !validPrecedingTokens.includes(tokenBefore.value)) {\n                            noFix = true;\n                        }\n\n                        if (!/^[-a-zA-Z0-9\\\\[\\](){} \\t\\r\\n\\v\\f!@#$%^&*+^_=/~`.><?,'\"|:;]*$/u.test(regexContent)) {\n                            noFix = true;\n                        }\n\n                        if (sourceCode.getCommentsInside(node).length > 0) {\n                            noFix = true;\n                        }\n\n                        if (regexContent && !noFix) {\n                            let charIncrease = 0;\n\n                            const ast = new RegExpParser({ ecmaVersion: regexppEcmaVersion }).parsePattern(regexContent, 0, regexContent.length, flags ? flags.includes(\"u\") : false);\n\n                            visitRegExpAST(ast, {\n                                onCharacterEnter(characterNode) {\n                                    const escaped = resolveEscapes(characterNode.raw);\n\n                                    if (escaped) {\n                                        regexContent =\n                                            regexContent.slice(0, characterNode.start + charIncrease) +\n                                            escaped +\n                                            regexContent.slice(characterNode.end + charIncrease);\n\n                                        if (characterNode.raw.length === 1) {\n                                            charIncrease += 1;\n                                        }\n                                    }\n                                }\n                            });\n                        }\n\n                        const newRegExpValue = `/${regexContent || \"(?:)\"}/${flags || \"\"}`;\n\n                        context.report({\n                            node,\n                            messageId: \"unexpectedRegExp\",\n                            suggest: noFix ? [] : [{\n                                messageId: \"replaceWithLiteral\",\n                                fix(fixer) {\n                                    const tokenAfter = sourceCode.getTokenAfter(node);\n\n                                    return fixer.replaceText(\n                                        node,\n                                        (tokenBefore && !canTokensBeAdjacent(tokenBefore, newRegExpValue) && tokenBefore.range[1] === node.range[0] ? \" \" : \"\") +\n                                            newRegExpValue +\n                                            (tokenAfter && !canTokensBeAdjacent(newRegExpValue, tokenAfter) && node.range[1] === tokenAfter.range[0] ? \" \" : \"\")\n                                    );\n                                }\n                            }]\n                        });\n                    }\n                }\n            }\n        };\n    }\n};\n#/lib/rules/no-prototype-builtins.js\b\u0006/**\n * @fileoverview Rule to disallow use of Object.prototype builtins on objects\n * @author Andrew Levine\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"problem\",\n\n        docs: {\n            description: \"disallow calling some `Object.prototype` methods directly on objects\",\n            recommended: true,\n            url: \"https://eslint.org/docs/rules/no-prototype-builtins\"\n        },\n\n        schema: [],\n\n        messages: {\n            prototypeBuildIn: \"Do not access Object.prototype method '{{prop}}' from target object.\"\n        }\n    },\n\n    create(context) {\n        const DISALLOWED_PROPS = [\n            \"hasOwnProperty\",\n            \"isPrototypeOf\",\n            \"propertyIsEnumerable\"\n        ];\n\n        /**\n         * Reports if a disallowed property is used in a CallExpression\n         * @param {ASTNode} node The CallExpression node.\n         * @returns {void}\n         */\n        function disallowBuiltIns(node) {\n\n            const callee = astUtils.skipChainExpression(node.callee);\n\n            if (callee.type !== \"MemberExpression\") {\n                return;\n            }\n\n            const propName = astUtils.getStaticPropertyName(callee);\n\n            if (propName !== null && DISALLOWED_PROPS.indexOf(propName) > -1) {\n                context.report({\n                    messageId: \"prototypeBuildIn\",\n                    loc: callee.property.loc,\n                    data: { prop: propName },\n                    node\n                });\n            }\n        }\n\n        return {\n            CallExpression: disallowBuiltIns\n        };\n    }\n};\n/lib/api.js\u0002/**\n * @fileoverview Expose out ESLint and CLI to require.\n * @author Ian Christian Myers\n */\n\n\"use strict\";\n\n//-----------------------------------------------------------------------------\n// Requirements\n//-----------------------------------------------------------------------------\n\nconst { ESLint } = require(\"./eslint\");\nconst { Linter } = require(\"./linter\");\nconst { RuleTester } = require(\"./rule-tester\");\nconst { SourceCode } = require(\"./source-code\");\n\n//-----------------------------------------------------------------------------\n// Exports\n//-----------------------------------------------------------------------------\n\nmodule.exports = {\n    Linter,\n    ESLint,\n    RuleTester,\n    SourceCode\n};\n\"/lib/config/flat-config-helpers.js\n//**\n * @fileoverview Shared functions to work with configs.\n * @author Nicholas C. Zakas\n */\n\n\"use strict\";\n\n//-----------------------------------------------------------------------------\n// Functions\n//-----------------------------------------------------------------------------\n\n/**\n * Parses a ruleId into its plugin and rule parts.\n * @param {string} ruleId The rule ID to parse.\n * @returns {{pluginName:string,ruleName:string}} The plugin and rule\n *      parts of the ruleId;\n */\nfunction parseRuleId(ruleId) {\n    let pluginName, ruleName;\n\n    // distinguish between core rules and plugin rules\n    if (ruleId.includes(\"/\")) {\n        pluginName = ruleId.slice(0, ruleId.lastIndexOf(\"/\"));\n        ruleName = ruleId.slice(pluginName.length + 1);\n    } else {\n        pluginName = \"@\";\n        ruleName = ruleId;\n    }\n\n    return {\n        pluginName,\n        ruleName\n    };\n}\n\n/**\n * Retrieves a rule instance from a given config based on the ruleId.\n * @param {string} ruleId The rule ID to look for.\n * @param {FlatConfig} config The config to search.\n * @returns {import(\"../shared/types\").Rule|undefined} The rule if found\n *      or undefined if not.\n */\nfunction getRuleFromConfig(ruleId, config) {\n\n    const { pluginName, ruleName } = parseRuleId(ruleId);\n\n    const plugin = config.plugins && config.plugins[pluginName];\n    let rule = plugin && plugin.rules && plugin.rules[ruleName];\n\n    // normalize function rules into objects\n    if (rule && typeof rule === \"function\") {\n        rule = {\n            create: rule\n        };\n    }\n\n    return rule;\n}\n\n/**\n * Gets a complete options schema for a rule.\n * @param {{create: Function, schema: (Array|null)}} rule A new-style rule object\n * @returns {Object} JSON Schema for the rule's options.\n */\nfunction getRuleOptionsSchema(rule) {\n\n    if (!rule) {\n        return null;\n    }\n\n    const schema = rule.schema || rule.meta && rule.meta.schema;\n\n    if (Array.isArray(schema)) {\n        if (schema.length) {\n            return {\n                type: \"array\",\n                items: schema,\n                minItems: 0,\n                maxItems: schema.length\n            };\n        }\n        return {\n            type: \"array\",\n            minItems: 0,\n            maxItems: 0\n        };\n\n    }\n\n    // Given a full schema, leave it alone\n    return schema || null;\n}\n\n\n//-----------------------------------------------------------------------------\n// Exports\n//-----------------------------------------------------------------------------\n\nmodule.exports = {\n    parseRuleId,\n    getRuleFromConfig,\n    getRuleOptionsSchema\n};\n/lib/rules/no-debugger.js\u0003/**\n * @fileoverview Rule to flag use of a debugger statement\n * @author Nicholas C. Zakas\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"problem\",\n\n        docs: {\n            description: \"disallow the use of `debugger`\",\n            recommended: true,\n            url: \"https://eslint.org/docs/rules/no-debugger\"\n        },\n\n        fixable: null,\n        schema: [],\n\n        messages: {\n            unexpected: \"Unexpected 'debugger' statement.\"\n        }\n    },\n\n    create(context) {\n\n        return {\n            DebuggerStatement(node) {\n                context.report({\n                    node,\n                    messageId: \"unexpected\"\n                });\n            }\n        };\n\n    }\n};\n#/lib/rules/newline-before-return.js\u001f/**\n * @fileoverview Rule to require newlines before `return` statement\n * @author Kai Cataldo\n * @deprecated in ESLint v4.0.0\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"layout\",\n\n        docs: {\n            description: \"require an empty line before `return` statements\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/newline-before-return\"\n        },\n\n        fixable: \"whitespace\",\n        schema: [],\n        messages: {\n            expected: \"Expected newline before return statement.\"\n        },\n\n        deprecated: true,\n        replacedBy: [\"padding-line-between-statements\"]\n    },\n\n    create(context) {\n        const sourceCode = context.getSourceCode();\n\n        //--------------------------------------------------------------------------\n        // Helpers\n        //--------------------------------------------------------------------------\n\n        /**\n         * Tests whether node is preceded by supplied tokens\n         * @param {ASTNode} node node to check\n         * @param {Array} testTokens array of tokens to test against\n         * @returns {boolean} Whether or not the node is preceded by one of the supplied tokens\n         * @private\n         */\n        function isPrecededByTokens(node, testTokens) {\n            const tokenBefore = sourceCode.getTokenBefore(node);\n\n            return testTokens.some(token => tokenBefore.value === token);\n        }\n\n        /**\n         * Checks whether node is the first node after statement or in block\n         * @param {ASTNode} node node to check\n         * @returns {boolean} Whether or not the node is the first node after statement or in block\n         * @private\n         */\n        function isFirstNode(node) {\n            const parentType = node.parent.type;\n\n            if (node.parent.body) {\n                return Array.isArray(node.parent.body)\n                    ? node.parent.body[0] === node\n                    : node.parent.body === node;\n            }\n\n            if (parentType === \"IfStatement\") {\n                return isPrecededByTokens(node, [\"else\", \")\"]);\n            }\n            if (parentType === \"DoWhileStatement\") {\n                return isPrecededByTokens(node, [\"do\"]);\n            }\n            if (parentType === \"SwitchCase\") {\n                return isPrecededByTokens(node, [\":\"]);\n            }\n            return isPrecededByTokens(node, [\")\"]);\n\n        }\n\n        /**\n         * Returns the number of lines of comments that precede the node\n         * @param {ASTNode} node node to check for overlapping comments\n         * @param {number} lineNumTokenBefore line number of previous token, to check for overlapping comments\n         * @returns {number} Number of lines of comments that precede the node\n         * @private\n         */\n        function calcCommentLines(node, lineNumTokenBefore) {\n            const comments = sourceCode.getCommentsBefore(node);\n            let numLinesComments = 0;\n\n            if (!comments.length) {\n                return numLinesComments;\n            }\n\n            comments.forEach(comment => {\n                numLinesComments++;\n\n                if (comment.type === \"Block\") {\n                    numLinesComments += comment.loc.end.line - comment.loc.start.line;\n                }\n\n                // avoid counting lines with inline comments twice\n                if (comment.loc.start.line === lineNumTokenBefore) {\n                    numLinesComments--;\n                }\n\n                if (comment.loc.end.line === node.loc.start.line) {\n                    numLinesComments--;\n                }\n            });\n\n            return numLinesComments;\n        }\n\n        /**\n         * Returns the line number of the token before the node that is passed in as an argument\n         * @param {ASTNode} node The node to use as the start of the calculation\n         * @returns {number} Line number of the token before `node`\n         * @private\n         */\n        function getLineNumberOfTokenBefore(node) {\n            const tokenBefore = sourceCode.getTokenBefore(node);\n            let lineNumTokenBefore;\n\n            /**\n             * Global return (at the beginning of a script) is a special case.\n             * If there is no token before `return`, then we expect no line\n             * break before the return. Comments are allowed to occupy lines\n             * before the global return, just no blank lines.\n             * Setting lineNumTokenBefore to zero in that case results in the\n             * desired behavior.\n             */\n            if (tokenBefore) {\n                lineNumTokenBefore = tokenBefore.loc.end.line;\n            } else {\n                lineNumTokenBefore = 0; // global return at beginning of script\n            }\n\n            return lineNumTokenBefore;\n        }\n\n        /**\n         * Checks whether node is preceded by a newline\n         * @param {ASTNode} node node to check\n         * @returns {boolean} Whether or not the node is preceded by a newline\n         * @private\n         */\n        function hasNewlineBefore(node) {\n            const lineNumNode = node.loc.start.line;\n            const lineNumTokenBefore = getLineNumberOfTokenBefore(node);\n            const commentLines = calcCommentLines(node, lineNumTokenBefore);\n\n            return (lineNumNode - lineNumTokenBefore - commentLines) > 1;\n        }\n\n        /**\n         * Checks whether it is safe to apply a fix to a given return statement.\n         *\n         * The fix is not considered safe if the given return statement has leading comments,\n         * as we cannot safely determine if the newline should be added before or after the comments.\n         * For more information, see: https://github.com/eslint/eslint/issues/5958#issuecomment-222767211\n         * @param {ASTNode} node The return statement node to check.\n         * @returns {boolean} `true` if it can fix the node.\n         * @private\n         */\n        function canFix(node) {\n            const leadingComments = sourceCode.getCommentsBefore(node);\n            const lastLeadingComment = leadingComments[leadingComments.length - 1];\n            const tokenBefore = sourceCode.getTokenBefore(node);\n\n            if (leadingComments.length === 0) {\n                return true;\n            }\n\n            /*\n             * if the last leading comment ends in the same line as the previous token and\n             * does not share a line with the `return` node, we can consider it safe to fix.\n             * Example:\n             * function a() {\n             *     var b; //comment\n             *     return;\n             * }\n             */\n            if (lastLeadingComment.loc.end.line === tokenBefore.loc.end.line &&\n                lastLeadingComment.loc.end.line !== node.loc.start.line) {\n                return true;\n            }\n\n            return false;\n        }\n\n        //--------------------------------------------------------------------------\n        // Public\n        //--------------------------------------------------------------------------\n\n        return {\n            ReturnStatement(node) {\n                if (!isFirstNode(node) && !hasNewlineBefore(node)) {\n                    context.report({\n                        node,\n                        messageId: \"expected\",\n                        fix(fixer) {\n                            if (canFix(node)) {\n                                const tokenBefore = sourceCode.getTokenBefore(node);\n                                const newlines = node.loc.start.line === tokenBefore.loc.end.line ? \"\\n\\n\" : \"\\n\";\n\n                                return fixer.insertTextBefore(node, newlines);\n                            }\n                            return null;\n                        }\n                    });\n                }\n            }\n        };\n    }\n};\n/lib/rules/no-with.js\u0003e/**\n * @fileoverview Rule to flag use of with statement\n * @author Nicholas C. Zakas\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow `with` statements\",\n            recommended: true,\n            url: \"https://eslint.org/docs/rules/no-with\"\n        },\n\n        schema: [],\n\n        messages: {\n            unexpectedWith: \"Unexpected use of 'with' statement.\"\n        }\n    },\n\n    create(context) {\n\n        return {\n            WithStatement(node) {\n                context.report({ node, messageId: \"unexpectedWith\" });\n            }\n        };\n\n    }\n};\n#/lib/rules/no-restricted-globals.js\u000e/**\n * @fileoverview Restrict usage of specified globals.\n * @author Benoît Zugmeyer\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow specified global variables\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-restricted-globals\"\n        },\n\n        schema: {\n            type: \"array\",\n            items: {\n                oneOf: [\n                    {\n                        type: \"string\"\n                    },\n                    {\n                        type: \"object\",\n                        properties: {\n                            name: { type: \"string\" },\n                            message: { type: \"string\" }\n                        },\n                        required: [\"name\"],\n                        additionalProperties: false\n                    }\n                ]\n            },\n            uniqueItems: true,\n            minItems: 0\n        },\n\n        messages: {\n            defaultMessage: \"Unexpected use of '{{name}}'.\",\n            // eslint-disable-next-line eslint-plugin/report-message-format -- Custom message might not end in a period\n            customMessage: \"Unexpected use of '{{name}}'. {{customMessage}}\"\n        }\n    },\n\n    create(context) {\n\n        // If no globals are restricted, we don't need to do anything\n        if (context.options.length === 0) {\n            return {};\n        }\n\n        const restrictedGlobalMessages = context.options.reduce((memo, option) => {\n            if (typeof option === \"string\") {\n                memo[option] = null;\n            } else {\n                memo[option.name] = option.message;\n            }\n\n            return memo;\n        }, {});\n\n        /**\n         * Report a variable to be used as a restricted global.\n         * @param {Reference} reference the variable reference\n         * @returns {void}\n         * @private\n         */\n        function reportReference(reference) {\n            const name = reference.identifier.name,\n                customMessage = restrictedGlobalMessages[name],\n                messageId = customMessage\n                    ? \"customMessage\"\n                    : \"defaultMessage\";\n\n            context.report({\n                node: reference.identifier,\n                messageId,\n                data: {\n                    name,\n                    customMessage\n                }\n            });\n        }\n\n        /**\n         * Check if the given name is a restricted global name.\n         * @param {string} name name of a variable\n         * @returns {boolean} whether the variable is a restricted global or not\n         * @private\n         */\n        function isRestricted(name) {\n            return Object.prototype.hasOwnProperty.call(restrictedGlobalMessages, name);\n        }\n\n        return {\n            Program() {\n                const scope = context.getScope();\n\n                // Report variables declared elsewhere (ex: variables defined as \"global\" by eslint)\n                scope.variables.forEach(variable => {\n                    if (!variable.defs.length && isRestricted(variable.name)) {\n                        variable.references.forEach(reportReference);\n                    }\n                });\n\n                // Report variables not declared at all\n                scope.through.forEach(reference => {\n                    if (isRestricted(reference.identifier.name)) {\n                        reportReference(reference);\n                    }\n                });\n\n            }\n        };\n    }\n};\n-/messages/print-config-with-directory-path.js\"use strict\";\n\nmodule.exports = function() {\n    return `\nThe '--print-config' CLI option requires a path to a source code file rather than a directory.\nSee also: https://eslint.org/docs/user-guide/command-line-interface#--print-config\n`.trimLeft();\n};\n/lib/linter/safe-emitter.js\bW/**\n * @fileoverview A variant of EventEmitter which does not give listeners information about each other\n * @author Teddy Katz\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Typedefs\n//------------------------------------------------------------------------------\n\n/**\n * An event emitter\n * @typedef {Object} SafeEmitter\n * @property {(eventName: string, listenerFunc: Function) => void} on Adds a listener for a given event name\n * @property {(eventName: string, arg1?: any, arg2?: any, arg3?: any) => void} emit Emits an event with a given name.\n * This calls all the listeners that were listening for that name, with `arg1`, `arg2`, and `arg3` as arguments.\n * @property {function(): string[]} eventNames Gets the list of event names that have registered listeners.\n */\n\n/**\n * Creates an object which can listen for and emit events.\n * This is similar to the EventEmitter API in Node's standard library, but it has a few differences.\n * The goal is to allow multiple modules to attach arbitrary listeners to the same emitter, without\n * letting the modules know about each other at all.\n * 1. It has no special keys like `error` and `newListener`, which would allow modules to detect when\n * another module throws an error or registers a listener.\n * 2. It calls listener functions without any `this` value. (`EventEmitter` calls listeners with a\n * `this` value of the emitter instance, which would give listeners access to other listeners.)\n * @returns {SafeEmitter} An emitter\n */\nmodule.exports = () => {\n    const listeners = Object.create(null);\n\n    return Object.freeze({\n        on(eventName, listener) {\n            if (eventName in listeners) {\n                listeners[eventName].push(listener);\n            } else {\n                listeners[eventName] = [listener];\n            }\n        },\n        emit(eventName, ...args) {\n            if (eventName in listeners) {\n                listeners[eventName].forEach(listener => listener(...args));\n            }\n        },\n        eventNames() {\n            return Object.keys(listeners);\n        }\n    });\n};\n/lib/rules/eqeqeq.js\u0016/**\n * @fileoverview Rule to flag statements that use != and == instead of !== and ===\n * @author Nicholas C. Zakas\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"require the use of `===` and `!==`\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/eqeqeq\"\n        },\n\n        schema: {\n            anyOf: [\n                {\n                    type: \"array\",\n                    items: [\n                        {\n                            enum: [\"always\"]\n                        },\n                        {\n                            type: \"object\",\n                            properties: {\n                                null: {\n                                    enum: [\"always\", \"never\", \"ignore\"]\n                                }\n                            },\n                            additionalProperties: false\n                        }\n                    ],\n                    additionalItems: false\n                },\n                {\n                    type: \"array\",\n                    items: [\n                        {\n                            enum: [\"smart\", \"allow-null\"]\n                        }\n                    ],\n                    additionalItems: false\n                }\n            ]\n        },\n\n        fixable: \"code\",\n\n        messages: {\n            unexpected: \"Expected '{{expectedOperator}}' and instead saw '{{actualOperator}}'.\"\n        }\n    },\n\n    create(context) {\n        const config = context.options[0] || \"always\";\n        const options = context.options[1] || {};\n        const sourceCode = context.getSourceCode();\n\n        const nullOption = (config === \"always\")\n            ? options.null || \"always\"\n            : \"ignore\";\n        const enforceRuleForNull = (nullOption === \"always\");\n        const enforceInverseRuleForNull = (nullOption === \"never\");\n\n        /**\n         * Checks if an expression is a typeof expression\n         * @param {ASTNode} node The node to check\n         * @returns {boolean} if the node is a typeof expression\n         */\n        function isTypeOf(node) {\n            return node.type === \"UnaryExpression\" && node.operator === \"typeof\";\n        }\n\n        /**\n         * Checks if either operand of a binary expression is a typeof operation\n         * @param {ASTNode} node The node to check\n         * @returns {boolean} if one of the operands is typeof\n         * @private\n         */\n        function isTypeOfBinary(node) {\n            return isTypeOf(node.left) || isTypeOf(node.right);\n        }\n\n        /**\n         * Checks if operands are literals of the same type (via typeof)\n         * @param {ASTNode} node The node to check\n         * @returns {boolean} if operands are of same type\n         * @private\n         */\n        function areLiteralsAndSameType(node) {\n            return node.left.type === \"Literal\" && node.right.type === \"Literal\" &&\n                    typeof node.left.value === typeof node.right.value;\n        }\n\n        /**\n         * Checks if one of the operands is a literal null\n         * @param {ASTNode} node The node to check\n         * @returns {boolean} if operands are null\n         * @private\n         */\n        function isNullCheck(node) {\n            return astUtils.isNullLiteral(node.right) || astUtils.isNullLiteral(node.left);\n        }\n\n        /**\n         * Reports a message for this rule.\n         * @param {ASTNode} node The binary expression node that was checked\n         * @param {string} expectedOperator The operator that was expected (either '==', '!=', '===', or '!==')\n         * @returns {void}\n         * @private\n         */\n        function report(node, expectedOperator) {\n            const operatorToken = sourceCode.getFirstTokenBetween(\n                node.left,\n                node.right,\n                token => token.value === node.operator\n            );\n\n            context.report({\n                node,\n                loc: operatorToken.loc,\n                messageId: \"unexpected\",\n                data: { expectedOperator, actualOperator: node.operator },\n                fix(fixer) {\n\n                    // If the comparison is a `typeof` comparison or both sides are literals with the same type, then it's safe to fix.\n                    if (isTypeOfBinary(node) || areLiteralsAndSameType(node)) {\n                        return fixer.replaceText(operatorToken, expectedOperator);\n                    }\n                    return null;\n                }\n            });\n        }\n\n        return {\n            BinaryExpression(node) {\n                const isNull = isNullCheck(node);\n\n                if (node.operator !== \"==\" && node.operator !== \"!=\") {\n                    if (enforceInverseRuleForNull && isNull) {\n                        report(node, node.operator.slice(0, -1));\n                    }\n                    return;\n                }\n\n                if (config === \"smart\" && (isTypeOfBinary(node) ||\n                        areLiteralsAndSameType(node) || isNull)) {\n                    return;\n                }\n\n                if (!enforceRuleForNull && isNull) {\n                    return;\n                }\n\n                report(node, `${node.operator}=`);\n            }\n        };\n\n    }\n};\n#/lib/rules/array-callback-return.js&Y/**\n * @fileoverview Rule to enforce return statements in callbacks of array's methods\n * @author Toru Nagashima\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\nconst TARGET_NODE_TYPE = /^(?:Arrow)?FunctionExpression$/u;\nconst TARGET_METHODS = /^(?:every|filter|find(?:Index)?|flatMap|forEach|map|reduce(?:Right)?|some|sort)$/u;\n\n/**\n * Checks a given code path segment is reachable.\n * @param {CodePathSegment} segment A segment to check.\n * @returns {boolean} `true` if the segment is reachable.\n */\nfunction isReachable(segment) {\n    return segment.reachable;\n}\n\n/**\n * Checks a given node is a member access which has the specified name's\n * property.\n * @param {ASTNode} node A node to check.\n * @returns {boolean} `true` if the node is a member access which has\n *      the specified name's property. The node may be a `(Chain|Member)Expression` node.\n */\nfunction isTargetMethod(node) {\n    return astUtils.isSpecificMemberAccess(node, null, TARGET_METHODS);\n}\n\n/**\n * Returns a human-legible description of an array method\n * @param {string} arrayMethodName A method name to fully qualify\n * @returns {string} the method name prefixed with `Array.` if it is a class method,\n *      or else `Array.prototype.` if it is an instance method.\n */\nfunction fullMethodName(arrayMethodName) {\n    if ([\"from\", \"of\", \"isArray\"].includes(arrayMethodName)) {\n        return \"Array.\".concat(arrayMethodName);\n    }\n    return \"Array.prototype.\".concat(arrayMethodName);\n}\n\n/**\n * Checks whether or not a given node is a function expression which is the\n * callback of an array method, returning the method name.\n * @param {ASTNode} node A node to check. This is one of\n *      FunctionExpression or ArrowFunctionExpression.\n * @returns {string} The method name if the node is a callback method,\n *      null otherwise.\n */\nfunction getArrayMethodName(node) {\n    let currentNode = node;\n\n    while (currentNode) {\n        const parent = currentNode.parent;\n\n        switch (parent.type) {\n\n            /*\n             * Looks up the destination. e.g.,\n             * foo.every(nativeFoo || function foo() { ... });\n             */\n            case \"LogicalExpression\":\n            case \"ConditionalExpression\":\n            case \"ChainExpression\":\n                currentNode = parent;\n                break;\n\n            /*\n             * If the upper function is IIFE, checks the destination of the return value.\n             * e.g.\n             *   foo.every((function() {\n             *     // setup...\n             *     return function callback() { ... };\n             *   })());\n             */\n            case \"ReturnStatement\": {\n                const func = astUtils.getUpperFunction(parent);\n\n                if (func === null || !astUtils.isCallee(func)) {\n                    return null;\n                }\n                currentNode = func.parent;\n                break;\n            }\n\n            /*\n             * e.g.\n             *   Array.from([], function() {});\n             *   list.every(function() {});\n             */\n            case \"CallExpression\":\n                if (astUtils.isArrayFromMethod(parent.callee)) {\n                    if (\n                        parent.arguments.length >= 2 &&\n                        parent.arguments[1] === currentNode\n                    ) {\n                        return \"from\";\n                    }\n                }\n                if (isTargetMethod(parent.callee)) {\n                    if (\n                        parent.arguments.length >= 1 &&\n                        parent.arguments[0] === currentNode\n                    ) {\n                        return astUtils.getStaticPropertyName(parent.callee);\n                    }\n                }\n                return null;\n\n            // Otherwise this node is not target.\n            default:\n                return null;\n        }\n    }\n\n    /* istanbul ignore next: unreachable */\n    return null;\n}\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"problem\",\n\n        docs: {\n            description: \"enforce `return` statements in callbacks of array methods\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/array-callback-return\"\n        },\n\n        schema: [\n            {\n                type: \"object\",\n                properties: {\n                    allowImplicit: {\n                        type: \"boolean\",\n                        default: false\n                    },\n                    checkForEach: {\n                        type: \"boolean\",\n                        default: false\n                    }\n                },\n                additionalProperties: false\n            }\n        ],\n\n        messages: {\n            expectedAtEnd: \"{{arrayMethodName}}() expects a value to be returned at the end of {{name}}.\",\n            expectedInside: \"{{arrayMethodName}}() expects a return value from {{name}}.\",\n            expectedReturnValue: \"{{arrayMethodName}}() expects a return value from {{name}}.\",\n            expectedNoReturnValue: \"{{arrayMethodName}}() expects no useless return value from {{name}}.\"\n        }\n    },\n\n    create(context) {\n\n        const options = context.options[0] || { allowImplicit: false, checkForEach: false };\n        const sourceCode = context.getSourceCode();\n\n        let funcInfo = {\n            arrayMethodName: null,\n            upper: null,\n            codePath: null,\n            hasReturn: false,\n            shouldCheck: false,\n            node: null\n        };\n\n        /**\n         * Checks whether or not the last code path segment is reachable.\n         * Then reports this function if the segment is reachable.\n         *\n         * If the last code path segment is reachable, there are paths which are not\n         * returned or thrown.\n         * @param {ASTNode} node A node to check.\n         * @returns {void}\n         */\n        function checkLastSegment(node) {\n\n            if (!funcInfo.shouldCheck) {\n                return;\n            }\n\n            let messageId = null;\n\n            if (funcInfo.arrayMethodName === \"forEach\") {\n                if (options.checkForEach && node.type === \"ArrowFunctionExpression\" && node.expression) {\n                    messageId = \"expectedNoReturnValue\";\n                }\n            } else {\n                if (node.body.type === \"BlockStatement\" && funcInfo.codePath.currentSegments.some(isReachable)) {\n                    messageId = funcInfo.hasReturn ? \"expectedAtEnd\" : \"expectedInside\";\n                }\n            }\n\n            if (messageId) {\n                const name = astUtils.getFunctionNameWithKind(node);\n\n                context.report({\n                    node,\n                    loc: astUtils.getFunctionHeadLoc(node, sourceCode),\n                    messageId,\n                    data: { name, arrayMethodName: fullMethodName(funcInfo.arrayMethodName) }\n                });\n            }\n        }\n\n        return {\n\n            // Stacks this function's information.\n            onCodePathStart(codePath, node) {\n\n                let methodName = null;\n\n                if (TARGET_NODE_TYPE.test(node.type)) {\n                    methodName = getArrayMethodName(node);\n                }\n\n                funcInfo = {\n                    arrayMethodName: methodName,\n                    upper: funcInfo,\n                    codePath,\n                    hasReturn: false,\n                    shouldCheck:\n                        methodName &&\n                        !node.async &&\n                        !node.generator,\n                    node\n                };\n            },\n\n            // Pops this function's information.\n            onCodePathEnd() {\n                funcInfo = funcInfo.upper;\n            },\n\n            // Checks the return statement is valid.\n            ReturnStatement(node) {\n\n                if (!funcInfo.shouldCheck) {\n                    return;\n                }\n\n                funcInfo.hasReturn = true;\n\n                let messageId = null;\n\n                if (funcInfo.arrayMethodName === \"forEach\") {\n\n                    // if checkForEach: true, returning a value at any path inside a forEach is not allowed\n                    if (options.checkForEach && node.argument) {\n                        messageId = \"expectedNoReturnValue\";\n                    }\n                } else {\n\n                    // if allowImplicit: false, should also check node.argument\n                    if (!options.allowImplicit && !node.argument) {\n                        messageId = \"expectedReturnValue\";\n                    }\n                }\n\n                if (messageId) {\n                    context.report({\n                        node,\n                        messageId,\n                        data: {\n                            name: astUtils.getFunctionNameWithKind(funcInfo.node),\n                            arrayMethodName: fullMethodName(funcInfo.arrayMethodName)\n                        }\n                    });\n                }\n            },\n\n            // Reports a given function if the last path is reachable.\n            \"FunctionExpression:exit\": checkLastSegment,\n            \"ArrowFunctionExpression:exit\": checkLastSegment\n        };\n    }\n};\n/lib/rules/no-console.js\u0010/**\n * @fileoverview Rule to flag use of console object\n * @author Nicholas C. Zakas\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow the use of `console`\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-console\"\n        },\n\n        schema: [\n            {\n                type: \"object\",\n                properties: {\n                    allow: {\n                        type: \"array\",\n                        items: {\n                            type: \"string\"\n                        },\n                        minItems: 1,\n                        uniqueItems: true\n                    }\n                },\n                additionalProperties: false\n            }\n        ],\n\n        messages: {\n            unexpected: \"Unexpected console statement.\"\n        }\n    },\n\n    create(context) {\n        const options = context.options[0] || {};\n        const allowed = options.allow || [];\n\n        /**\n         * Checks whether the given reference is 'console' or not.\n         * @param {eslint-scope.Reference} reference The reference to check.\n         * @returns {boolean} `true` if the reference is 'console'.\n         */\n        function isConsole(reference) {\n            const id = reference.identifier;\n\n            return id && id.name === \"console\";\n        }\n\n        /**\n         * Checks whether the property name of the given MemberExpression node\n         * is allowed by options or not.\n         * @param {ASTNode} node The MemberExpression node to check.\n         * @returns {boolean} `true` if the property name of the node is allowed.\n         */\n        function isAllowed(node) {\n            const propertyName = astUtils.getStaticPropertyName(node);\n\n            return propertyName && allowed.indexOf(propertyName) !== -1;\n        }\n\n        /**\n         * Checks whether the given reference is a member access which is not\n         * allowed by options or not.\n         * @param {eslint-scope.Reference} reference The reference to check.\n         * @returns {boolean} `true` if the reference is a member access which\n         *      is not allowed by options.\n         */\n        function isMemberAccessExceptAllowed(reference) {\n            const node = reference.identifier;\n            const parent = node.parent;\n\n            return (\n                parent.type === \"MemberExpression\" &&\n                parent.object === node &&\n                !isAllowed(parent)\n            );\n        }\n\n        /**\n         * Reports the given reference as a violation.\n         * @param {eslint-scope.Reference} reference The reference to report.\n         * @returns {void}\n         */\n        function report(reference) {\n            const node = reference.identifier.parent;\n\n            context.report({\n                node,\n                loc: node.loc,\n                messageId: \"unexpected\"\n            });\n        }\n\n        return {\n            \"Program:exit\"() {\n                const scope = context.getScope();\n                const consoleVar = astUtils.getVariableByName(scope, \"console\");\n                const shadowed = consoleVar && consoleVar.defs.length > 0;\n\n                /*\n                 * 'scope.through' includes all references to undefined\n                 * variables. If the variable 'console' is not defined, it uses\n                 * 'scope.through'.\n                 */\n                const references = consoleVar\n                    ? consoleVar.references\n                    : scope.through.filter(isConsole);\n\n                if (!shadowed) {\n                    references\n                        .filter(isMemberAccessExceptAllowed)\n                        .forEach(report);\n                }\n            }\n        };\n    }\n};\n!/lib/rules/rest-spread-spacing.js\u000f/**\n * @fileoverview Enforce spacing between rest and spread operators and their expressions.\n * @author Kai Cataldo\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"layout\",\n\n        docs: {\n            description: \"enforce spacing between rest and spread operators and their expressions\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/rest-spread-spacing\"\n        },\n\n        fixable: \"whitespace\",\n\n        schema: [\n            {\n                enum: [\"always\", \"never\"]\n            }\n        ],\n\n        messages: {\n            unexpectedWhitespace: \"Unexpected whitespace after {{type}} operator.\",\n            expectedWhitespace: \"Expected whitespace after {{type}} operator.\"\n        }\n    },\n\n    create(context) {\n        const sourceCode = context.getSourceCode(),\n            alwaysSpace = context.options[0] === \"always\";\n\n        //--------------------------------------------------------------------------\n        // Helpers\n        //--------------------------------------------------------------------------\n\n        /**\n         * Checks whitespace between rest/spread operators and their expressions\n         * @param {ASTNode} node The node to check\n         * @returns {void}\n         */\n        function checkWhiteSpace(node) {\n            const operator = sourceCode.getFirstToken(node),\n                nextToken = sourceCode.getTokenAfter(operator),\n                hasWhitespace = sourceCode.isSpaceBetweenTokens(operator, nextToken);\n            let type;\n\n            switch (node.type) {\n                case \"SpreadElement\":\n                    type = \"spread\";\n                    if (node.parent.type === \"ObjectExpression\") {\n                        type += \" property\";\n                    }\n                    break;\n                case \"RestElement\":\n                    type = \"rest\";\n                    if (node.parent.type === \"ObjectPattern\") {\n                        type += \" property\";\n                    }\n                    break;\n                case \"ExperimentalSpreadProperty\":\n                    type = \"spread property\";\n                    break;\n                case \"ExperimentalRestProperty\":\n                    type = \"rest property\";\n                    break;\n                default:\n                    return;\n            }\n\n            if (alwaysSpace && !hasWhitespace) {\n                context.report({\n                    node,\n                    loc: operator.loc,\n                    messageId: \"expectedWhitespace\",\n                    data: {\n                        type\n                    },\n                    fix(fixer) {\n                        return fixer.replaceTextRange([operator.range[1], nextToken.range[0]], \" \");\n                    }\n                });\n            } else if (!alwaysSpace && hasWhitespace) {\n                context.report({\n                    node,\n                    loc: {\n                        start: operator.loc.end,\n                        end: nextToken.loc.start\n                    },\n                    messageId: \"unexpectedWhitespace\",\n                    data: {\n                        type\n                    },\n                    fix(fixer) {\n                        return fixer.removeRange([operator.range[1], nextToken.range[0]]);\n                    }\n                });\n            }\n        }\n\n        //--------------------------------------------------------------------------\n        // Public\n        //--------------------------------------------------------------------------\n\n        return {\n            SpreadElement: checkWhiteSpace,\n            RestElement: checkWhiteSpace,\n            ExperimentalSpreadProperty: checkWhiteSpace,\n            ExperimentalRestProperty: checkWhiteSpace\n        };\n    }\n};\n/lib/rules/default-case.js\u000b\u0015/**\n * @fileoverview require default case in switch statements\n * @author Aliaksei Shytkin\n */\n\"use strict\";\n\nconst DEFAULT_COMMENT_PATTERN = /^no default$/iu;\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"require `default` cases in `switch` statements\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/default-case\"\n        },\n\n        schema: [{\n            type: \"object\",\n            properties: {\n                commentPattern: {\n                    type: \"string\"\n                }\n            },\n            additionalProperties: false\n        }],\n\n        messages: {\n            missingDefaultCase: \"Expected a default case.\"\n        }\n    },\n\n    create(context) {\n        const options = context.options[0] || {};\n        const commentPattern = options.commentPattern\n            ? new RegExp(options.commentPattern, \"u\")\n            : DEFAULT_COMMENT_PATTERN;\n\n        const sourceCode = context.getSourceCode();\n\n        //--------------------------------------------------------------------------\n        // Helpers\n        //--------------------------------------------------------------------------\n\n        /**\n         * Shortcut to get last element of array\n         * @param {*[]} collection Array\n         * @returns {any} Last element\n         */\n        function last(collection) {\n            return collection[collection.length - 1];\n        }\n\n        //--------------------------------------------------------------------------\n        // Public\n        //--------------------------------------------------------------------------\n\n        return {\n\n            SwitchStatement(node) {\n\n                if (!node.cases.length) {\n\n                    /*\n                     * skip check of empty switch because there is no easy way\n                     * to extract comments inside it now\n                     */\n                    return;\n                }\n\n                const hasDefault = node.cases.some(v => v.test === null);\n\n                if (!hasDefault) {\n\n                    let comment;\n\n                    const lastCase = last(node.cases);\n                    const comments = sourceCode.getCommentsAfter(lastCase);\n\n                    if (comments.length) {\n                        comment = last(comments);\n                    }\n\n                    if (!comment || !commentPattern.test(comment.value.trim())) {\n                        context.report({ node, messageId: \"missingDefaultCase\" });\n                    }\n                }\n            }\n        };\n    }\n};\n/lib/rules/no-else-return.js>/**\n * @fileoverview Rule to flag `else` after a `return` in `if`\n * @author Ian Christian Myers\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\nconst FixTracker = require(\"./utils/fix-tracker\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow `else` blocks after `return` statements in `if` statements\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-else-return\"\n        },\n\n        schema: [{\n            type: \"object\",\n            properties: {\n                allowElseIf: {\n                    type: \"boolean\",\n                    default: true\n                }\n            },\n            additionalProperties: false\n        }],\n\n        fixable: \"code\",\n\n        messages: {\n            unexpected: \"Unnecessary 'else' after 'return'.\"\n        }\n    },\n\n    create(context) {\n\n        //--------------------------------------------------------------------------\n        // Helpers\n        //--------------------------------------------------------------------------\n\n        /**\n         * Checks whether the given names can be safely used to declare block-scoped variables\n         * in the given scope. Name collisions can produce redeclaration syntax errors,\n         * or silently change references and modify behavior of the original code.\n         *\n         * This is not a generic function. In particular, it is assumed that the scope is a function scope or\n         * a function's inner scope, and that the names can be valid identifiers in the given scope.\n         * @param {string[]} names Array of variable names.\n         * @param {eslint-scope.Scope} scope Function scope or a function's inner scope.\n         * @returns {boolean} True if all names can be safely declared, false otherwise.\n         */\n        function isSafeToDeclare(names, scope) {\n\n            if (names.length === 0) {\n                return true;\n            }\n\n            const functionScope = scope.variableScope;\n\n            /*\n             * If this is a function scope, scope.variables will contain parameters, implicit variables such as \"arguments\",\n             * all function-scoped variables ('var'), and block-scoped variables defined in the scope.\n             * If this is an inner scope, scope.variables will contain block-scoped variables defined in the scope.\n             *\n             * Redeclaring any of these would cause a syntax error, except for the implicit variables.\n             */\n            const declaredVariables = scope.variables.filter(({ defs }) => defs.length > 0);\n\n            if (declaredVariables.some(({ name }) => names.includes(name))) {\n                return false;\n            }\n\n            // Redeclaring a catch variable would also cause a syntax error.\n            if (scope !== functionScope && scope.upper.type === \"catch\") {\n                if (scope.upper.variables.some(({ name }) => names.includes(name))) {\n                    return false;\n                }\n            }\n\n            /*\n             * Redeclaring an implicit variable, such as \"arguments\", would not cause a syntax error.\n             * However, if the variable was used, declaring a new one with the same name would change references\n             * and modify behavior.\n             */\n            const usedImplicitVariables = scope.variables.filter(({ defs, references }) =>\n                defs.length === 0 && references.length > 0);\n\n            if (usedImplicitVariables.some(({ name }) => names.includes(name))) {\n                return false;\n            }\n\n            /*\n             * Declaring a variable with a name that was already used to reference a variable from an upper scope\n             * would change references and modify behavior.\n             */\n            if (scope.through.some(t => names.includes(t.identifier.name))) {\n                return false;\n            }\n\n            /*\n             * If the scope is an inner scope (not the function scope), an uninitialized `var` variable declared inside\n             * the scope node (directly or in one of its descendants) is neither declared nor 'through' in the scope.\n             *\n             * For example, this would be a syntax error \"Identifier 'a' has already been declared\":\n             * function foo() { if (bar) { let a; if (baz) { var a; } } }\n             */\n            if (scope !== functionScope) {\n                const scopeNodeRange = scope.block.range;\n                const variablesToCheck = functionScope.variables.filter(({ name }) => names.includes(name));\n\n                if (variablesToCheck.some(v => v.defs.some(({ node: { range } }) =>\n                    scopeNodeRange[0] <= range[0] && range[1] <= scopeNodeRange[1]))) {\n                    return false;\n                }\n            }\n\n            return true;\n        }\n\n\n        /**\n         * Checks whether the removal of `else` and its braces is safe from variable name collisions.\n         * @param {Node} node The 'else' node.\n         * @param {eslint-scope.Scope} scope The scope in which the node and the whole 'if' statement is.\n         * @returns {boolean} True if it is safe, false otherwise.\n         */\n        function isSafeFromNameCollisions(node, scope) {\n\n            if (node.type === \"FunctionDeclaration\") {\n\n                // Conditional function declaration. Scope and hoisting are unpredictable, different engines work differently.\n                return false;\n            }\n\n            if (node.type !== \"BlockStatement\") {\n                return true;\n            }\n\n            const elseBlockScope = scope.childScopes.find(({ block }) => block === node);\n\n            if (!elseBlockScope) {\n\n                // ecmaVersion < 6, `else` block statement cannot have its own scope, no possible collisions.\n                return true;\n            }\n\n            /*\n             * elseBlockScope is supposed to merge into its upper scope. elseBlockScope.variables array contains\n             * only block-scoped variables (such as let and const variables or class and function declarations)\n             * defined directly in the elseBlockScope. These are exactly the only names that could cause collisions.\n             */\n            const namesToCheck = elseBlockScope.variables.map(({ name }) => name);\n\n            return isSafeToDeclare(namesToCheck, scope);\n        }\n\n        /**\n         * Display the context report if rule is violated\n         * @param {Node} node The 'else' node\n         * @returns {void}\n         */\n        function displayReport(node) {\n            const currentScope = context.getScope();\n\n            context.report({\n                node,\n                messageId: \"unexpected\",\n                fix: fixer => {\n\n                    if (!isSafeFromNameCollisions(node, currentScope)) {\n                        return null;\n                    }\n\n                    const sourceCode = context.getSourceCode();\n                    const startToken = sourceCode.getFirstToken(node);\n                    const elseToken = sourceCode.getTokenBefore(startToken);\n                    const source = sourceCode.getText(node);\n                    const lastIfToken = sourceCode.getTokenBefore(elseToken);\n                    let fixedSource, firstTokenOfElseBlock;\n\n                    if (startToken.type === \"Punctuator\" && startToken.value === \"{\") {\n                        firstTokenOfElseBlock = sourceCode.getTokenAfter(startToken);\n                    } else {\n                        firstTokenOfElseBlock = startToken;\n                    }\n\n                    /*\n                     * If the if block does not have curly braces and does not end in a semicolon\n                     * and the else block starts with (, [, /, +, ` or -, then it is not\n                     * safe to remove the else keyword, because ASI will not add a semicolon\n                     * after the if block\n                     */\n                    const ifBlockMaybeUnsafe = node.parent.consequent.type !== \"BlockStatement\" && lastIfToken.value !== \";\";\n                    const elseBlockUnsafe = /^[([/+`-]/u.test(firstTokenOfElseBlock.value);\n\n                    if (ifBlockMaybeUnsafe && elseBlockUnsafe) {\n                        return null;\n                    }\n\n                    const endToken = sourceCode.getLastToken(node);\n                    const lastTokenOfElseBlock = sourceCode.getTokenBefore(endToken);\n\n                    if (lastTokenOfElseBlock.value !== \";\") {\n                        const nextToken = sourceCode.getTokenAfter(endToken);\n\n                        const nextTokenUnsafe = nextToken && /^[([/+`-]/u.test(nextToken.value);\n                        const nextTokenOnSameLine = nextToken && nextToken.loc.start.line === lastTokenOfElseBlock.loc.start.line;\n\n                        /*\n                         * If the else block contents does not end in a semicolon,\n                         * and the else block starts with (, [, /, +, ` or -, then it is not\n                         * safe to remove the else block, because ASI will not add a semicolon\n                         * after the remaining else block contents\n                         */\n                        if (nextTokenUnsafe || (nextTokenOnSameLine && nextToken.value !== \"}\")) {\n                            return null;\n                        }\n                    }\n\n                    if (startToken.type === \"Punctuator\" && startToken.value === \"{\") {\n                        fixedSource = source.slice(1, -1);\n                    } else {\n                        fixedSource = source;\n                    }\n\n                    /*\n                     * Extend the replacement range to include the entire\n                     * function to avoid conflicting with no-useless-return.\n                     * https://github.com/eslint/eslint/issues/8026\n                     *\n                     * Also, to avoid name collisions between two else blocks.\n                     */\n                    return new FixTracker(fixer, sourceCode)\n                        .retainEnclosingFunction(node)\n                        .replaceTextRange([elseToken.range[0], node.range[1]], fixedSource);\n                }\n            });\n        }\n\n        /**\n         * Check to see if the node is a ReturnStatement\n         * @param {Node} node The node being evaluated\n         * @returns {boolean} True if node is a return\n         */\n        function checkForReturn(node) {\n            return node.type === \"ReturnStatement\";\n        }\n\n        /**\n         * Naive return checking, does not iterate through the whole\n         * BlockStatement because we make the assumption that the ReturnStatement\n         * will be the last node in the body of the BlockStatement.\n         * @param {Node} node The consequent/alternate node\n         * @returns {boolean} True if it has a return\n         */\n        function naiveHasReturn(node) {\n            if (node.type === \"BlockStatement\") {\n                const body = node.body,\n                    lastChildNode = body[body.length - 1];\n\n                return lastChildNode && checkForReturn(lastChildNode);\n            }\n            return checkForReturn(node);\n        }\n\n        /**\n         * Check to see if the node is valid for evaluation,\n         * meaning it has an else.\n         * @param {Node} node The node being evaluated\n         * @returns {boolean} True if the node is valid\n         */\n        function hasElse(node) {\n            return node.alternate && node.consequent;\n        }\n\n        /**\n         * If the consequent is an IfStatement, check to see if it has an else\n         * and both its consequent and alternate path return, meaning this is\n         * a nested case of rule violation.  If-Else not considered currently.\n         * @param {Node} node The consequent node\n         * @returns {boolean} True if this is a nested rule violation\n         */\n        function checkForIf(node) {\n            return node.type === \"IfStatement\" && hasElse(node) &&\n                naiveHasReturn(node.alternate) && naiveHasReturn(node.consequent);\n        }\n\n        /**\n         * Check the consequent/body node to make sure it is not\n         * a ReturnStatement or an IfStatement that returns on both\n         * code paths.\n         * @param {Node} node The consequent or body node\n         * @returns {boolean} `true` if it is a Return/If node that always returns.\n         */\n        function checkForReturnOrIf(node) {\n            return checkForReturn(node) || checkForIf(node);\n        }\n\n\n        /**\n         * Check whether a node returns in every codepath.\n         * @param {Node} node The node to be checked\n         * @returns {boolean} `true` if it returns on every codepath.\n         */\n        function alwaysReturns(node) {\n            if (node.type === \"BlockStatement\") {\n\n                // If we have a BlockStatement, check each consequent body node.\n                return node.body.some(checkForReturnOrIf);\n            }\n\n            /*\n             * If not a block statement, make sure the consequent isn't a\n             * ReturnStatement or an IfStatement with returns on both paths.\n             */\n            return checkForReturnOrIf(node);\n        }\n\n\n        /**\n         * Check the if statement, but don't catch else-if blocks.\n         * @returns {void}\n         * @param {Node} node The node for the if statement to check\n         * @private\n         */\n        function checkIfWithoutElse(node) {\n            const parent = node.parent;\n\n            /*\n             * Fixing this would require splitting one statement into two, so no error should\n             * be reported if this node is in a position where only one statement is allowed.\n             */\n            if (!astUtils.STATEMENT_LIST_PARENTS.has(parent.type)) {\n                return;\n            }\n\n            const consequents = [];\n            let alternate;\n\n            for (let currentNode = node; currentNode.type === \"IfStatement\"; currentNode = currentNode.alternate) {\n                if (!currentNode.alternate) {\n                    return;\n                }\n                consequents.push(currentNode.consequent);\n                alternate = currentNode.alternate;\n            }\n\n            if (consequents.every(alwaysReturns)) {\n                displayReport(alternate);\n            }\n        }\n\n        /**\n         * Check the if statement\n         * @returns {void}\n         * @param {Node} node The node for the if statement to check\n         * @private\n         */\n        function checkIfWithElse(node) {\n            const parent = node.parent;\n\n\n            /*\n             * Fixing this would require splitting one statement into two, so no error should\n             * be reported if this node is in a position where only one statement is allowed.\n             */\n            if (!astUtils.STATEMENT_LIST_PARENTS.has(parent.type)) {\n                return;\n            }\n\n            const alternate = node.alternate;\n\n            if (alternate && alwaysReturns(node.consequent)) {\n                displayReport(alternate);\n            }\n        }\n\n        const allowElseIf = !(context.options[0] && context.options[0].allowElseIf === false);\n\n        //--------------------------------------------------------------------------\n        // Public API\n        //--------------------------------------------------------------------------\n\n        return {\n\n            \"IfStatement:exit\": allowElseIf ? checkIfWithoutElse : checkIfWithElse\n\n        };\n\n    }\n};\n#/lib/rules/no-constructor-return.js\u0006B/**\n * @fileoverview Rule to disallow returning value from constructor.\n * @author Pig Fang <https://github.com/g-plane>\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"problem\",\n\n        docs: {\n            description: \"disallow returning value from constructor\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-constructor-return\"\n        },\n\n        schema: {},\n\n        fixable: null,\n\n        messages: {\n            unexpected: \"Unexpected return statement in constructor.\"\n        }\n    },\n\n    create(context) {\n        const stack = [];\n\n        return {\n            onCodePathStart(_, node) {\n                stack.push(node);\n            },\n            onCodePathEnd() {\n                stack.pop();\n            },\n            ReturnStatement(node) {\n                const last = stack[stack.length - 1];\n\n                if (!last.parent) {\n                    return;\n                }\n\n                if (\n                    last.parent.type === \"MethodDefinition\" &&\n                    last.parent.kind === \"constructor\" &&\n                    (node.parent.parent === last || node.argument)\n                ) {\n                    context.report({\n                        node,\n                        messageId: \"unexpected\"\n                    });\n                }\n            }\n        };\n    }\n};\n(/lib/cli-engine/formatters/checkstyle.js\u0006/**\n * @fileoverview CheckStyle XML reporter\n * @author Ian Christian Myers\n */\n\"use strict\";\n\nconst xmlEscape = require(\"../xml-escape\");\n\n//------------------------------------------------------------------------------\n// Helper Functions\n//------------------------------------------------------------------------------\n\n/**\n * Returns the severity of warning or error\n * @param {Object} message message object to examine\n * @returns {string} severity level\n * @private\n */\nfunction getMessageType(message) {\n    if (message.fatal || message.severity === 2) {\n        return \"error\";\n    }\n    return \"warning\";\n\n}\n\n//------------------------------------------------------------------------------\n// Public Interface\n//------------------------------------------------------------------------------\n\nmodule.exports = function(results) {\n\n    let output = \"\";\n\n    output += \"<?xml version=\\\"1.0\\\" encoding=\\\"utf-8\\\"?>\";\n    output += \"<checkstyle version=\\\"4.3\\\">\";\n\n    results.forEach(result => {\n        const messages = result.messages;\n\n        output += `<file name=\"${xmlEscape(result.filePath)}\">`;\n\n        messages.forEach(message => {\n            output += [\n                `<error line=\"${xmlEscape(message.line || 0)}\"`,\n                `column=\"${xmlEscape(message.column || 0)}\"`,\n                `severity=\"${xmlEscape(getMessageType(message))}\"`,\n                `message=\"${xmlEscape(message.message)}${message.ruleId ? ` (${message.ruleId})` : \"\"}\"`,\n                `source=\"${message.ruleId ? xmlEscape(`eslint.rules.${message.ruleId}`) : \"\"}\" />`\n            ].join(\" \");\n        });\n\n        output += \"</file>\";\n\n    });\n\n    output += \"</checkstyle>\";\n\n    return output;\n};\n5/lib/source-code/token-store/backward-token-cursor.js\u0006/**\n * @fileoverview Define the cursor which iterates tokens only in reverse.\n * @author Toru Nagashima\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst Cursor = require(\"./cursor\");\nconst utils = require(\"./utils\");\n\n//------------------------------------------------------------------------------\n// Exports\n//------------------------------------------------------------------------------\n\n/**\n * The cursor which iterates tokens only in reverse.\n */\nmodule.exports = class BackwardTokenCursor extends Cursor {\n\n    /**\n     * Initializes this cursor.\n     * @param {Token[]} tokens The array of tokens.\n     * @param {Comment[]} comments The array of comments.\n     * @param {Object} indexMap The map from locations to indices in `tokens`.\n     * @param {number} startLoc The start location of the iteration range.\n     * @param {number} endLoc The end location of the iteration range.\n     */\n    constructor(tokens, comments, indexMap, startLoc, endLoc) {\n        super();\n        this.tokens = tokens;\n        this.index = utils.getLastIndex(tokens, indexMap, endLoc);\n        this.indexEnd = utils.getFirstIndex(tokens, indexMap, startLoc);\n    }\n\n    /** @inheritdoc */\n    moveNext() {\n        if (this.index >= this.indexEnd) {\n            this.current = this.tokens[this.index];\n            this.index -= 1;\n            return true;\n        }\n        return false;\n    }\n\n    /*\n     *\n     * Shorthand for performance.\n     *\n     */\n\n    /** @inheritdoc */\n    getOneToken() {\n        return (this.index >= this.indexEnd) ? this.tokens[this.index] : null;\n    }\n};\n/messages/all-files-ignored.js\u0002\"use strict\";\n\nmodule.exports = function(it) {\n    const { pattern } = it;\n\n    return `\nYou are linting \"${pattern}\", but all of the files matching the glob pattern \"${pattern}\" are ignored.\n\nIf you don't want to lint these files, remove the pattern \"${pattern}\" from the list of arguments passed to ESLint.\n\nIf you do want to lint these files, try the following solutions:\n\n* Check your .eslintignore file, or the eslintIgnore property in package.json, to ensure that the files are not configured to be ignored.\n* Explicitly list the files from this glob that you'd like to lint on the command-line, rather than providing a glob as an argument.\n`.trimLeft();\n};\n/lib/rules/yoda.js0/**\n * @fileoverview Rule to require or disallow yoda comparisons\n * @author Nicholas C. Zakas\n */\n\"use strict\";\n\n//--------------------------------------------------------------------------\n// Requirements\n//--------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//--------------------------------------------------------------------------\n// Helpers\n//--------------------------------------------------------------------------\n\n/**\n * Determines whether an operator is a comparison operator.\n * @param {string} operator The operator to check.\n * @returns {boolean} Whether or not it is a comparison operator.\n */\nfunction isComparisonOperator(operator) {\n    return /^(==|===|!=|!==|<|>|<=|>=)$/u.test(operator);\n}\n\n/**\n * Determines whether an operator is an equality operator.\n * @param {string} operator The operator to check.\n * @returns {boolean} Whether or not it is an equality operator.\n */\nfunction isEqualityOperator(operator) {\n    return /^(==|===)$/u.test(operator);\n}\n\n/**\n * Determines whether an operator is one used in a range test.\n * Allowed operators are `<` and `<=`.\n * @param {string} operator The operator to check.\n * @returns {boolean} Whether the operator is used in range tests.\n */\nfunction isRangeTestOperator(operator) {\n    return [\"<\", \"<=\"].indexOf(operator) >= 0;\n}\n\n/**\n * Determines whether a non-Literal node is a negative number that should be\n * treated as if it were a single Literal node.\n * @param {ASTNode} node Node to test.\n * @returns {boolean} True if the node is a negative number that looks like a\n *                    real literal and should be treated as such.\n */\nfunction isNegativeNumericLiteral(node) {\n    return (\n        node.type === \"UnaryExpression\" &&\n        node.operator === \"-\" &&\n        node.prefix &&\n        astUtils.isNumericLiteral(node.argument)\n    );\n}\n\n/**\n * Determines whether a node is a Template Literal which can be determined statically.\n * @param {ASTNode} node Node to test\n * @returns {boolean} True if the node is a Template Literal without expression.\n */\nfunction isStaticTemplateLiteral(node) {\n    return node.type === \"TemplateLiteral\" && node.expressions.length === 0;\n}\n\n/**\n * Determines whether a non-Literal node should be treated as a single Literal node.\n * @param {ASTNode} node Node to test\n * @returns {boolean} True if the node should be treated as a single Literal node.\n */\nfunction looksLikeLiteral(node) {\n    return isNegativeNumericLiteral(node) || isStaticTemplateLiteral(node);\n}\n\n/**\n * Attempts to derive a Literal node from nodes that are treated like literals.\n * @param {ASTNode} node Node to normalize.\n * @returns {ASTNode} One of the following options.\n *  1. The original node if the node is already a Literal\n *  2. A normalized Literal node with the negative number as the value if the\n *     node represents a negative number literal.\n *  3. A normalized Literal node with the string as the value if the node is\n *     a Template Literal without expression.\n *  4. Otherwise `null`.\n */\nfunction getNormalizedLiteral(node) {\n    if (node.type === \"Literal\") {\n        return node;\n    }\n\n    if (isNegativeNumericLiteral(node)) {\n        return {\n            type: \"Literal\",\n            value: -node.argument.value,\n            raw: `-${node.argument.value}`\n        };\n    }\n\n    if (isStaticTemplateLiteral(node)) {\n        return {\n            type: \"Literal\",\n            value: node.quasis[0].value.cooked,\n            raw: node.quasis[0].value.raw\n        };\n    }\n\n    return null;\n}\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: 'require or disallow \"Yoda\" conditions',\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/yoda\"\n        },\n\n        schema: [\n            {\n                enum: [\"always\", \"never\"]\n            },\n            {\n                type: \"object\",\n                properties: {\n                    exceptRange: {\n                        type: \"boolean\",\n                        default: false\n                    },\n                    onlyEquality: {\n                        type: \"boolean\",\n                        default: false\n                    }\n                },\n                additionalProperties: false\n            }\n        ],\n\n        fixable: \"code\",\n        messages: {\n            expected:\n                \"Expected literal to be on the {{expectedSide}} side of {{operator}}.\"\n        }\n    },\n\n    create(context) {\n\n        // Default to \"never\" (!always) if no option\n        const always = context.options[0] === \"always\";\n        const exceptRange =\n            context.options[1] && context.options[1].exceptRange;\n        const onlyEquality =\n            context.options[1] && context.options[1].onlyEquality;\n\n        const sourceCode = context.getSourceCode();\n\n        /**\n         * Determines whether node represents a range test.\n         * A range test is a \"between\" test like `(0 <= x && x < 1)` or an \"outside\"\n         * test like `(x < 0 || 1 <= x)`. It must be wrapped in parentheses, and\n         * both operators must be `<` or `<=`. Finally, the literal on the left side\n         * must be less than or equal to the literal on the right side so that the\n         * test makes any sense.\n         * @param {ASTNode} node LogicalExpression node to test.\n         * @returns {boolean} Whether node is a range test.\n         */\n        function isRangeTest(node) {\n            const left = node.left,\n                right = node.right;\n\n            /**\n             * Determines whether node is of the form `0 <= x && x < 1`.\n             * @returns {boolean} Whether node is a \"between\" range test.\n             */\n            function isBetweenTest() {\n                if (node.operator === \"&&\" && astUtils.isSameReference(left.right, right.left)) {\n                    const leftLiteral = getNormalizedLiteral(left.left);\n                    const rightLiteral = getNormalizedLiteral(right.right);\n\n                    if (leftLiteral === null && rightLiteral === null) {\n                        return false;\n                    }\n\n                    if (rightLiteral === null || leftLiteral === null) {\n                        return true;\n                    }\n\n                    if (leftLiteral.value <= rightLiteral.value) {\n                        return true;\n                    }\n                }\n                return false;\n            }\n\n            /**\n             * Determines whether node is of the form `x < 0 || 1 <= x`.\n             * @returns {boolean} Whether node is an \"outside\" range test.\n             */\n            function isOutsideTest() {\n                if (node.operator === \"||\" && astUtils.isSameReference(left.left, right.right)) {\n                    const leftLiteral = getNormalizedLiteral(left.right);\n                    const rightLiteral = getNormalizedLiteral(right.left);\n\n                    if (leftLiteral === null && rightLiteral === null) {\n                        return false;\n                    }\n\n                    if (rightLiteral === null || leftLiteral === null) {\n                        return true;\n                    }\n\n                    if (leftLiteral.value <= rightLiteral.value) {\n                        return true;\n                    }\n                }\n\n                return false;\n            }\n\n            /**\n             * Determines whether node is wrapped in parentheses.\n             * @returns {boolean} Whether node is preceded immediately by an open\n             *                    paren token and followed immediately by a close\n             *                    paren token.\n             */\n            function isParenWrapped() {\n                return astUtils.isParenthesised(sourceCode, node);\n            }\n\n            return (\n                node.type === \"LogicalExpression\" &&\n                left.type === \"BinaryExpression\" &&\n                right.type === \"BinaryExpression\" &&\n                isRangeTestOperator(left.operator) &&\n                isRangeTestOperator(right.operator) &&\n                (isBetweenTest() || isOutsideTest()) &&\n                isParenWrapped()\n            );\n        }\n\n        const OPERATOR_FLIP_MAP = {\n            \"===\": \"===\",\n            \"!==\": \"!==\",\n            \"==\": \"==\",\n            \"!=\": \"!=\",\n            \"<\": \">\",\n            \">\": \"<\",\n            \"<=\": \">=\",\n            \">=\": \"<=\"\n        };\n\n        /**\n         * Returns a string representation of a BinaryExpression node with its sides/operator flipped around.\n         * @param {ASTNode} node The BinaryExpression node\n         * @returns {string} A string representation of the node with the sides and operator flipped\n         */\n        function getFlippedString(node) {\n            const operatorToken = sourceCode.getFirstTokenBetween(\n                node.left,\n                node.right,\n                token => token.value === node.operator\n            );\n            const lastLeftToken = sourceCode.getTokenBefore(operatorToken);\n            const firstRightToken = sourceCode.getTokenAfter(operatorToken);\n\n            const source = sourceCode.getText();\n\n            const leftText = source.slice(\n                node.range[0],\n                lastLeftToken.range[1]\n            );\n            const textBeforeOperator = source.slice(\n                lastLeftToken.range[1],\n                operatorToken.range[0]\n            );\n            const textAfterOperator = source.slice(\n                operatorToken.range[1],\n                firstRightToken.range[0]\n            );\n            const rightText = source.slice(\n                firstRightToken.range[0],\n                node.range[1]\n            );\n\n            const tokenBefore = sourceCode.getTokenBefore(node);\n            const tokenAfter = sourceCode.getTokenAfter(node);\n            let prefix = \"\";\n            let suffix = \"\";\n\n            if (\n                tokenBefore &&\n                tokenBefore.range[1] === node.range[0] &&\n                !astUtils.canTokensBeAdjacent(tokenBefore, firstRightToken)\n            ) {\n                prefix = \" \";\n            }\n\n            if (\n                tokenAfter &&\n                node.range[1] === tokenAfter.range[0] &&\n                !astUtils.canTokensBeAdjacent(lastLeftToken, tokenAfter)\n            ) {\n                suffix = \" \";\n            }\n\n            return (\n                prefix +\n                rightText +\n                textBeforeOperator +\n                OPERATOR_FLIP_MAP[operatorToken.value] +\n                textAfterOperator +\n                leftText +\n                suffix\n            );\n        }\n\n        //--------------------------------------------------------------------------\n        // Public\n        //--------------------------------------------------------------------------\n\n        return {\n            BinaryExpression(node) {\n                const expectedLiteral = always ? node.left : node.right;\n                const expectedNonLiteral = always ? node.right : node.left;\n\n                // If `expectedLiteral` is not a literal, and `expectedNonLiteral` is a literal, raise an error.\n                if (\n                    (expectedNonLiteral.type === \"Literal\" ||\n                        looksLikeLiteral(expectedNonLiteral)) &&\n                    !(\n                        expectedLiteral.type === \"Literal\" ||\n                        looksLikeLiteral(expectedLiteral)\n                    ) &&\n                    !(!isEqualityOperator(node.operator) && onlyEquality) &&\n                    isComparisonOperator(node.operator) &&\n                    !(exceptRange && isRangeTest(context.getAncestors().pop()))\n                ) {\n                    context.report({\n                        node,\n                        messageId: \"expected\",\n                        data: {\n                            operator: node.operator,\n                            expectedSide: always ? \"left\" : \"right\"\n                        },\n                        fix: fixer =>\n                            fixer.replaceText(node, getFlippedString(node))\n                    });\n                }\n            }\n        };\n    }\n};\n/lib/rules/no-sparse-arrays.js\u0004/**\n * @fileoverview Disallow sparse arrays\n * @author Nicholas C. Zakas\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"problem\",\n\n        docs: {\n            description: \"disallow sparse arrays\",\n            recommended: true,\n            url: \"https://eslint.org/docs/rules/no-sparse-arrays\"\n        },\n\n        schema: [],\n\n        messages: {\n            unexpectedSparseArray: \"Unexpected comma in middle of array.\"\n        }\n    },\n\n    create(context) {\n\n\n        //--------------------------------------------------------------------------\n        // Public\n        //--------------------------------------------------------------------------\n\n        return {\n\n            ArrayExpression(node) {\n\n                const emptySpot = node.elements.indexOf(null) > -1;\n\n                if (emptySpot) {\n                    context.report({ node, messageId: \"unexpectedSparseArray\" });\n                }\n            }\n\n        };\n\n    }\n};\n/lib/rules/no-extra-semi.js\u0010/**\n * @fileoverview Rule to flag use of unnecessary semicolons\n * @author Nicholas C. Zakas\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst FixTracker = require(\"./utils/fix-tracker\");\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow unnecessary semicolons\",\n            recommended: true,\n            url: \"https://eslint.org/docs/rules/no-extra-semi\"\n        },\n\n        fixable: \"code\",\n        schema: [],\n\n        messages: {\n            unexpected: \"Unnecessary semicolon.\"\n        }\n    },\n\n    create(context) {\n        const sourceCode = context.getSourceCode();\n\n        /**\n         * Reports an unnecessary semicolon error.\n         * @param {Node|Token} nodeOrToken A node or a token to be reported.\n         * @returns {void}\n         */\n        function report(nodeOrToken) {\n            context.report({\n                node: nodeOrToken,\n                messageId: \"unexpected\",\n                fix(fixer) {\n\n                    /*\n                     * Expand the replacement range to include the surrounding\n                     * tokens to avoid conflicting with semi.\n                     * https://github.com/eslint/eslint/issues/7928\n                     */\n                    return new FixTracker(fixer, context.getSourceCode())\n                        .retainSurroundingTokens(nodeOrToken)\n                        .remove(nodeOrToken);\n                }\n            });\n        }\n\n        /**\n         * Checks for a part of a class body.\n         * This checks tokens from a specified token to a next MethodDefinition or the end of class body.\n         * @param {Token} firstToken The first token to check.\n         * @returns {void}\n         */\n        function checkForPartOfClassBody(firstToken) {\n            for (let token = firstToken;\n                token.type === \"Punctuator\" && !astUtils.isClosingBraceToken(token);\n                token = sourceCode.getTokenAfter(token)\n            ) {\n                if (astUtils.isSemicolonToken(token)) {\n                    report(token);\n                }\n            }\n        }\n\n        return {\n\n            /**\n             * Reports this empty statement, except if the parent node is a loop.\n             * @param {Node} node A EmptyStatement node to be reported.\n             * @returns {void}\n             */\n            EmptyStatement(node) {\n                const parent = node.parent,\n                    allowedParentTypes = [\n                        \"ForStatement\",\n                        \"ForInStatement\",\n                        \"ForOfStatement\",\n                        \"WhileStatement\",\n                        \"DoWhileStatement\",\n                        \"IfStatement\",\n                        \"LabeledStatement\",\n                        \"WithStatement\"\n                    ];\n\n                if (allowedParentTypes.indexOf(parent.type) === -1) {\n                    report(node);\n                }\n            },\n\n            /**\n             * Checks tokens from the head of this class body to the first MethodDefinition or the end of this class body.\n             * @param {Node} node A ClassBody node to check.\n             * @returns {void}\n             */\n            ClassBody(node) {\n                checkForPartOfClassBody(sourceCode.getFirstToken(node, 1)); // 0 is `{`.\n            },\n\n            /**\n             * Checks tokens from this MethodDefinition to the next MethodDefinition or the end of this class body.\n             * @param {Node} node A MethodDefinition node of the start point.\n             * @returns {void}\n             */\n            \"MethodDefinition, PropertyDefinition, StaticBlock\"(node) {\n                checkForPartOfClassBody(sourceCode.getTokenAfter(node));\n            }\n        };\n\n    }\n};\n /lib/rules/no-trailing-spaces.js\u001a/**\n * @fileoverview Disallow trailing spaces at the end of lines.\n * @author Nodeca Team <https://github.com/nodeca>\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"layout\",\n\n        docs: {\n            description: \"disallow trailing whitespace at the end of lines\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-trailing-spaces\"\n        },\n\n        fixable: \"whitespace\",\n\n        schema: [\n            {\n                type: \"object\",\n                properties: {\n                    skipBlankLines: {\n                        type: \"boolean\",\n                        default: false\n                    },\n                    ignoreComments: {\n                        type: \"boolean\",\n                        default: false\n                    }\n                },\n                additionalProperties: false\n            }\n        ],\n\n        messages: {\n            trailingSpace: \"Trailing spaces not allowed.\"\n        }\n    },\n\n    create(context) {\n        const sourceCode = context.getSourceCode();\n\n        const BLANK_CLASS = \"[ \\t\\u00a0\\u2000-\\u200b\\u3000]\",\n            SKIP_BLANK = `^${BLANK_CLASS}*$`,\n            NONBLANK = `${BLANK_CLASS}+$`;\n\n        const options = context.options[0] || {},\n            skipBlankLines = options.skipBlankLines || false,\n            ignoreComments = options.ignoreComments || false;\n\n        /**\n         * Report the error message\n         * @param {ASTNode} node node to report\n         * @param {int[]} location range information\n         * @param {int[]} fixRange Range based on the whole program\n         * @returns {void}\n         */\n        function report(node, location, fixRange) {\n\n            /*\n             * Passing node is a bit dirty, because message data will contain big\n             * text in `source`. But... who cares :) ?\n             * One more kludge will not make worse the bloody wizardry of this\n             * plugin.\n             */\n            context.report({\n                node,\n                loc: location,\n                messageId: \"trailingSpace\",\n                fix(fixer) {\n                    return fixer.removeRange(fixRange);\n                }\n            });\n        }\n\n        /**\n         * Given a list of comment nodes, return the line numbers for those comments.\n         * @param {Array} comments An array of comment nodes.\n         * @returns {number[]} An array of line numbers containing comments.\n         */\n        function getCommentLineNumbers(comments) {\n            const lines = new Set();\n\n            comments.forEach(comment => {\n                const endLine = comment.type === \"Block\"\n                    ? comment.loc.end.line - 1\n                    : comment.loc.end.line;\n\n                for (let i = comment.loc.start.line; i <= endLine; i++) {\n                    lines.add(i);\n                }\n            });\n\n            return lines;\n        }\n\n        //--------------------------------------------------------------------------\n        // Public\n        //--------------------------------------------------------------------------\n\n        return {\n\n            Program: function checkTrailingSpaces(node) {\n\n                /*\n                 * Let's hack. Since Espree does not return whitespace nodes,\n                 * fetch the source code and do matching via regexps.\n                 */\n\n                const re = new RegExp(NONBLANK, \"u\"),\n                    skipMatch = new RegExp(SKIP_BLANK, \"u\"),\n                    lines = sourceCode.lines,\n                    linebreaks = sourceCode.getText().match(astUtils.createGlobalLinebreakMatcher()),\n                    comments = sourceCode.getAllComments(),\n                    commentLineNumbers = getCommentLineNumbers(comments);\n\n                let totalLength = 0,\n                    fixRange = [];\n\n                for (let i = 0, ii = lines.length; i < ii; i++) {\n                    const lineNumber = i + 1;\n\n                    /*\n                     * Always add linebreak length to line length to accommodate for line break (\\n or \\r\\n)\n                     * Because during the fix time they also reserve one spot in the array.\n                     * Usually linebreak length is 2 for \\r\\n (CRLF) and 1 for \\n (LF)\n                     */\n                    const linebreakLength = linebreaks && linebreaks[i] ? linebreaks[i].length : 1;\n                    const lineLength = lines[i].length + linebreakLength;\n\n                    const matches = re.exec(lines[i]);\n\n                    if (matches) {\n                        const location = {\n                            start: {\n                                line: lineNumber,\n                                column: matches.index\n                            },\n                            end: {\n                                line: lineNumber,\n                                column: lineLength - linebreakLength\n                            }\n                        };\n\n                        const rangeStart = totalLength + location.start.column;\n                        const rangeEnd = totalLength + location.end.column;\n                        const containingNode = sourceCode.getNodeByRangeIndex(rangeStart);\n\n                        if (containingNode && containingNode.type === \"TemplateElement\" &&\n                          rangeStart > containingNode.parent.range[0] &&\n                          rangeEnd < containingNode.parent.range[1]) {\n                            totalLength += lineLength;\n                            continue;\n                        }\n\n                        /*\n                         * If the line has only whitespace, and skipBlankLines\n                         * is true, don't report it\n                         */\n                        if (skipBlankLines && skipMatch.test(lines[i])) {\n                            totalLength += lineLength;\n                            continue;\n                        }\n\n                        fixRange = [rangeStart, rangeEnd];\n\n                        if (!ignoreComments || !commentLineNumbers.has(lineNumber)) {\n                            report(node, location, fixRange);\n                        }\n                    }\n\n                    totalLength += lineLength;\n                }\n            }\n\n        };\n    }\n};\n-/lib/rules/utils/unicode/is-emoji-modifier.js\u0001o/**\n * @author Toru Nagashima <https://github.com/mysticatea>\n */\n\"use strict\";\n\n/**\n * Check whether a given character is an emoji modifier.\n * @param {number} code The character code to check.\n * @returns {boolean} `true` if the character is an emoji modifier.\n */\nmodule.exports = function isEmojiModifier(code) {\n    return code >= 0x1F3FB && code <= 0x1F3FF;\n};\n\"/lib/rules/template-tag-spacing.js\u000b/**\n * @fileoverview Rule to check spacing between template tags and their literals\n * @author Jonathan Wilsson\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"layout\",\n\n        docs: {\n            description: \"require or disallow spacing between template tags and their literals\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/template-tag-spacing\"\n        },\n\n        fixable: \"whitespace\",\n\n        schema: [\n            { enum: [\"always\", \"never\"] }\n        ],\n        messages: {\n            unexpected: \"Unexpected space between template tag and template literal.\",\n            missing: \"Missing space between template tag and template literal.\"\n        }\n    },\n\n    create(context) {\n        const never = context.options[0] !== \"always\";\n        const sourceCode = context.getSourceCode();\n\n        /**\n         * Check if a space is present between a template tag and its literal\n         * @param {ASTNode} node node to evaluate\n         * @returns {void}\n         * @private\n         */\n        function checkSpacing(node) {\n            const tagToken = sourceCode.getTokenBefore(node.quasi);\n            const literalToken = sourceCode.getFirstToken(node.quasi);\n            const hasWhitespace = sourceCode.isSpaceBetweenTokens(tagToken, literalToken);\n\n            if (never && hasWhitespace) {\n                context.report({\n                    node,\n                    loc: {\n                        start: tagToken.loc.end,\n                        end: literalToken.loc.start\n                    },\n                    messageId: \"unexpected\",\n                    fix(fixer) {\n                        const comments = sourceCode.getCommentsBefore(node.quasi);\n\n                        // Don't fix anything if there's a single line comment after the template tag\n                        if (comments.some(comment => comment.type === \"Line\")) {\n                            return null;\n                        }\n\n                        return fixer.replaceTextRange(\n                            [tagToken.range[1], literalToken.range[0]],\n                            comments.reduce((text, comment) => text + sourceCode.getText(comment), \"\")\n                        );\n                    }\n                });\n            } else if (!never && !hasWhitespace) {\n                context.report({\n                    node,\n                    loc: {\n                        start: node.loc.start,\n                        end: literalToken.loc.start\n                    },\n                    messageId: \"missing\",\n                    fix(fixer) {\n                        return fixer.insertTextAfter(tagToken, \" \");\n                    }\n                });\n            }\n        }\n\n        return {\n            TaggedTemplateExpression: checkSpacing\n        };\n    }\n};\n /lib/rules/yield-star-spacing.js\u0010/**\n * @fileoverview Rule to check the spacing around the * in yield* expressions.\n * @author Bryan Smith\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"layout\",\n\n        docs: {\n            description: \"require or disallow spacing around the `*` in `yield*` expressions\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/yield-star-spacing\"\n        },\n\n        fixable: \"whitespace\",\n\n        schema: [\n            {\n                oneOf: [\n                    {\n                        enum: [\"before\", \"after\", \"both\", \"neither\"]\n                    },\n                    {\n                        type: \"object\",\n                        properties: {\n                            before: { type: \"boolean\" },\n                            after: { type: \"boolean\" }\n                        },\n                        additionalProperties: false\n                    }\n                ]\n            }\n        ],\n        messages: {\n            missingBefore: \"Missing space before *.\",\n            missingAfter: \"Missing space after *.\",\n            unexpectedBefore: \"Unexpected space before *.\",\n            unexpectedAfter: \"Unexpected space after *.\"\n        }\n    },\n\n    create(context) {\n        const sourceCode = context.getSourceCode();\n\n        const mode = (function(option) {\n            if (!option || typeof option === \"string\") {\n                return {\n                    before: { before: true, after: false },\n                    after: { before: false, after: true },\n                    both: { before: true, after: true },\n                    neither: { before: false, after: false }\n                }[option || \"after\"];\n            }\n            return option;\n        }(context.options[0]));\n\n        /**\n         * Checks the spacing between two tokens before or after the star token.\n         * @param {string} side Either \"before\" or \"after\".\n         * @param {Token} leftToken `function` keyword token if side is \"before\", or\n         *     star token if side is \"after\".\n         * @param {Token} rightToken Star token if side is \"before\", or identifier\n         *     token if side is \"after\".\n         * @returns {void}\n         */\n        function checkSpacing(side, leftToken, rightToken) {\n            if (sourceCode.isSpaceBetweenTokens(leftToken, rightToken) !== mode[side]) {\n                const after = leftToken.value === \"*\";\n                const spaceRequired = mode[side];\n                const node = after ? leftToken : rightToken;\n                let messageId = \"\";\n\n                if (spaceRequired) {\n                    messageId = side === \"before\" ? \"missingBefore\" : \"missingAfter\";\n                } else {\n                    messageId = side === \"before\" ? \"unexpectedBefore\" : \"unexpectedAfter\";\n                }\n\n                context.report({\n                    node,\n                    messageId,\n                    fix(fixer) {\n                        if (spaceRequired) {\n                            if (after) {\n                                return fixer.insertTextAfter(node, \" \");\n                            }\n                            return fixer.insertTextBefore(node, \" \");\n                        }\n                        return fixer.removeRange([leftToken.range[1], rightToken.range[0]]);\n                    }\n                });\n            }\n        }\n\n        /**\n         * Enforces the spacing around the star if node is a yield* expression.\n         * @param {ASTNode} node A yield expression node.\n         * @returns {void}\n         */\n        function checkExpression(node) {\n            if (!node.delegate) {\n                return;\n            }\n\n            const tokens = sourceCode.getFirstTokens(node, 3);\n            const yieldToken = tokens[0];\n            const starToken = tokens[1];\n            const nextToken = tokens[2];\n\n            checkSpacing(\"before\", yieldToken, starToken);\n            checkSpacing(\"after\", starToken, nextToken);\n        }\n\n        return {\n            YieldExpression: checkExpression\n        };\n\n    }\n};\n/lib/rules/object-shorthand.jsTo/**\n * @fileoverview Rule to enforce concise object methods and properties.\n * @author Jamund Ferguson\n */\n\n\"use strict\";\n\nconst OPTIONS = {\n    always: \"always\",\n    never: \"never\",\n    methods: \"methods\",\n    properties: \"properties\",\n    consistent: \"consistent\",\n    consistentAsNeeded: \"consistent-as-needed\"\n};\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"require or disallow method and property shorthand syntax for object literals\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/object-shorthand\"\n        },\n\n        fixable: \"code\",\n\n        schema: {\n            anyOf: [\n                {\n                    type: \"array\",\n                    items: [\n                        {\n                            enum: [\"always\", \"methods\", \"properties\", \"never\", \"consistent\", \"consistent-as-needed\"]\n                        }\n                    ],\n                    minItems: 0,\n                    maxItems: 1\n                },\n                {\n                    type: \"array\",\n                    items: [\n                        {\n                            enum: [\"always\", \"methods\", \"properties\"]\n                        },\n                        {\n                            type: \"object\",\n                            properties: {\n                                avoidQuotes: {\n                                    type: \"boolean\"\n                                }\n                            },\n                            additionalProperties: false\n                        }\n                    ],\n                    minItems: 0,\n                    maxItems: 2\n                },\n                {\n                    type: \"array\",\n                    items: [\n                        {\n                            enum: [\"always\", \"methods\"]\n                        },\n                        {\n                            type: \"object\",\n                            properties: {\n                                ignoreConstructors: {\n                                    type: \"boolean\"\n                                },\n                                avoidQuotes: {\n                                    type: \"boolean\"\n                                },\n                                avoidExplicitReturnArrows: {\n                                    type: \"boolean\"\n                                }\n                            },\n                            additionalProperties: false\n                        }\n                    ],\n                    minItems: 0,\n                    maxItems: 2\n                }\n            ]\n        },\n\n        messages: {\n            expectedAllPropertiesShorthanded: \"Expected shorthand for all properties.\",\n            expectedLiteralMethodLongform: \"Expected longform method syntax for string literal keys.\",\n            expectedPropertyShorthand: \"Expected property shorthand.\",\n            expectedPropertyLongform: \"Expected longform property syntax.\",\n            expectedMethodShorthand: \"Expected method shorthand.\",\n            expectedMethodLongform: \"Expected longform method syntax.\",\n            unexpectedMix: \"Unexpected mix of shorthand and non-shorthand properties.\"\n        }\n    },\n\n    create(context) {\n        const APPLY = context.options[0] || OPTIONS.always;\n        const APPLY_TO_METHODS = APPLY === OPTIONS.methods || APPLY === OPTIONS.always;\n        const APPLY_TO_PROPS = APPLY === OPTIONS.properties || APPLY === OPTIONS.always;\n        const APPLY_NEVER = APPLY === OPTIONS.never;\n        const APPLY_CONSISTENT = APPLY === OPTIONS.consistent;\n        const APPLY_CONSISTENT_AS_NEEDED = APPLY === OPTIONS.consistentAsNeeded;\n\n        const PARAMS = context.options[1] || {};\n        const IGNORE_CONSTRUCTORS = PARAMS.ignoreConstructors;\n        const AVOID_QUOTES = PARAMS.avoidQuotes;\n        const AVOID_EXPLICIT_RETURN_ARROWS = !!PARAMS.avoidExplicitReturnArrows;\n        const sourceCode = context.getSourceCode();\n\n        //--------------------------------------------------------------------------\n        // Helpers\n        //--------------------------------------------------------------------------\n\n        const CTOR_PREFIX_REGEX = /[^_$0-9]/u;\n\n        /**\n         * Determines if the first character of the name is a capital letter.\n         * @param {string} name The name of the node to evaluate.\n         * @returns {boolean} True if the first character of the property name is a capital letter, false if not.\n         * @private\n         */\n        function isConstructor(name) {\n            const match = CTOR_PREFIX_REGEX.exec(name);\n\n            // Not a constructor if name has no characters apart from '_', '$' and digits e.g. '_', '$$', '_8'\n            if (!match) {\n                return false;\n            }\n\n            const firstChar = name.charAt(match.index);\n\n            return firstChar === firstChar.toUpperCase();\n        }\n\n        /**\n         * Determines if the property can have a shorthand form.\n         * @param {ASTNode} property Property AST node\n         * @returns {boolean} True if the property can have a shorthand form\n         * @private\n         */\n        function canHaveShorthand(property) {\n            return (property.kind !== \"set\" && property.kind !== \"get\" && property.type !== \"SpreadElement\" && property.type !== \"SpreadProperty\" && property.type !== \"ExperimentalSpreadProperty\");\n        }\n\n        /**\n         * Checks whether a node is a string literal.\n         * @param {ASTNode} node Any AST node.\n         * @returns {boolean} `true` if it is a string literal.\n         */\n        function isStringLiteral(node) {\n            return node.type === \"Literal\" && typeof node.value === \"string\";\n        }\n\n        /**\n         * Determines if the property is a shorthand or not.\n         * @param {ASTNode} property Property AST node\n         * @returns {boolean} True if the property is considered shorthand, false if not.\n         * @private\n         */\n        function isShorthand(property) {\n\n            // property.method is true when `{a(){}}`.\n            return (property.shorthand || property.method);\n        }\n\n        /**\n         * Determines if the property's key and method or value are named equally.\n         * @param {ASTNode} property Property AST node\n         * @returns {boolean} True if the key and value are named equally, false if not.\n         * @private\n         */\n        function isRedundant(property) {\n            const value = property.value;\n\n            if (value.type === \"FunctionExpression\") {\n                return !value.id; // Only anonymous should be shorthand method.\n            }\n            if (value.type === \"Identifier\") {\n                return astUtils.getStaticPropertyName(property) === value.name;\n            }\n\n            return false;\n        }\n\n        /**\n         * Ensures that an object's properties are consistently shorthand, or not shorthand at all.\n         * @param {ASTNode} node Property AST node\n         * @param {boolean} checkRedundancy Whether to check longform redundancy\n         * @returns {void}\n         */\n        function checkConsistency(node, checkRedundancy) {\n\n            // We are excluding getters/setters and spread properties as they are considered neither longform nor shorthand.\n            const properties = node.properties.filter(canHaveShorthand);\n\n            // Do we still have properties left after filtering the getters and setters?\n            if (properties.length > 0) {\n                const shorthandProperties = properties.filter(isShorthand);\n\n                /*\n                 * If we do not have an equal number of longform properties as\n                 * shorthand properties, we are using the annotations inconsistently\n                 */\n                if (shorthandProperties.length !== properties.length) {\n\n                    // We have at least 1 shorthand property\n                    if (shorthandProperties.length > 0) {\n                        context.report({ node, messageId: \"unexpectedMix\" });\n                    } else if (checkRedundancy) {\n\n                        /*\n                         * If all properties of the object contain a method or value with a name matching it's key,\n                         * all the keys are redundant.\n                         */\n                        const canAlwaysUseShorthand = properties.every(isRedundant);\n\n                        if (canAlwaysUseShorthand) {\n                            context.report({ node, messageId: \"expectedAllPropertiesShorthanded\" });\n                        }\n                    }\n                }\n            }\n        }\n\n        /**\n         * Fixes a FunctionExpression node by making it into a shorthand property.\n         * @param {SourceCodeFixer} fixer The fixer object\n         * @param {ASTNode} node A `Property` node that has a `FunctionExpression` or `ArrowFunctionExpression` as its value\n         * @returns {Object} A fix for this node\n         */\n        function makeFunctionShorthand(fixer, node) {\n            const firstKeyToken = node.computed\n                ? sourceCode.getFirstToken(node, astUtils.isOpeningBracketToken)\n                : sourceCode.getFirstToken(node.key);\n            const lastKeyToken = node.computed\n                ? sourceCode.getFirstTokenBetween(node.key, node.value, astUtils.isClosingBracketToken)\n                : sourceCode.getLastToken(node.key);\n            const keyText = sourceCode.text.slice(firstKeyToken.range[0], lastKeyToken.range[1]);\n            let keyPrefix = \"\";\n\n            // key: /* */ () => {}\n            if (sourceCode.commentsExistBetween(lastKeyToken, node.value)) {\n                return null;\n            }\n\n            if (node.value.async) {\n                keyPrefix += \"async \";\n            }\n            if (node.value.generator) {\n                keyPrefix += \"*\";\n            }\n\n            const fixRange = [firstKeyToken.range[0], node.range[1]];\n            const methodPrefix = keyPrefix + keyText;\n\n            if (node.value.type === \"FunctionExpression\") {\n                const functionToken = sourceCode.getTokens(node.value).find(token => token.type === \"Keyword\" && token.value === \"function\");\n                const tokenBeforeParams = node.value.generator ? sourceCode.getTokenAfter(functionToken) : functionToken;\n\n                return fixer.replaceTextRange(\n                    fixRange,\n                    methodPrefix + sourceCode.text.slice(tokenBeforeParams.range[1], node.value.range[1])\n                );\n            }\n\n            const arrowToken = sourceCode.getTokenBefore(node.value.body, astUtils.isArrowToken);\n            const fnBody = sourceCode.text.slice(arrowToken.range[1], node.value.range[1]);\n\n            let shouldAddParensAroundParameters = false;\n            let tokenBeforeParams;\n\n            if (node.value.params.length === 0) {\n                tokenBeforeParams = sourceCode.getFirstToken(node.value, astUtils.isOpeningParenToken);\n            } else {\n                tokenBeforeParams = sourceCode.getTokenBefore(node.value.params[0]);\n            }\n\n            if (node.value.params.length === 1) {\n                const hasParen = astUtils.isOpeningParenToken(tokenBeforeParams);\n                const isTokenOutsideNode = tokenBeforeParams.range[0] < node.range[0];\n\n                shouldAddParensAroundParameters = !hasParen || isTokenOutsideNode;\n            }\n\n            const sliceStart = shouldAddParensAroundParameters\n                ? node.value.params[0].range[0]\n                : tokenBeforeParams.range[0];\n            const sliceEnd = sourceCode.getTokenBefore(arrowToken).range[1];\n\n            const oldParamText = sourceCode.text.slice(sliceStart, sliceEnd);\n            const newParamText = shouldAddParensAroundParameters ? `(${oldParamText})` : oldParamText;\n\n            return fixer.replaceTextRange(\n                fixRange,\n                methodPrefix + newParamText + fnBody\n            );\n\n        }\n\n        /**\n         * Fixes a FunctionExpression node by making it into a longform property.\n         * @param {SourceCodeFixer} fixer The fixer object\n         * @param {ASTNode} node A `Property` node that has a `FunctionExpression` as its value\n         * @returns {Object} A fix for this node\n         */\n        function makeFunctionLongform(fixer, node) {\n            const firstKeyToken = node.computed ? sourceCode.getTokens(node).find(token => token.value === \"[\") : sourceCode.getFirstToken(node.key);\n            const lastKeyToken = node.computed ? sourceCode.getTokensBetween(node.key, node.value).find(token => token.value === \"]\") : sourceCode.getLastToken(node.key);\n            const keyText = sourceCode.text.slice(firstKeyToken.range[0], lastKeyToken.range[1]);\n            let functionHeader = \"function\";\n\n            if (node.value.async) {\n                functionHeader = `async ${functionHeader}`;\n            }\n            if (node.value.generator) {\n                functionHeader = `${functionHeader}*`;\n            }\n\n            return fixer.replaceTextRange([node.range[0], lastKeyToken.range[1]], `${keyText}: ${functionHeader}`);\n        }\n\n        /*\n         * To determine whether a given arrow function has a lexical identifier (`this`, `arguments`, `super`, or `new.target`),\n         * create a stack of functions that define these identifiers (i.e. all functions except arrow functions) as the AST is\n         * traversed. Whenever a new function is encountered, create a new entry on the stack (corresponding to a different lexical\n         * scope of `this`), and whenever a function is exited, pop that entry off the stack. When an arrow function is entered,\n         * keep a reference to it on the current stack entry, and remove that reference when the arrow function is exited.\n         * When a lexical identifier is encountered, mark all the arrow functions on the current stack entry by adding them\n         * to an `arrowsWithLexicalIdentifiers` set. Any arrow function in that set will not be reported by this rule,\n         * because converting it into a method would change the value of one of the lexical identifiers.\n         */\n        const lexicalScopeStack = [];\n        const arrowsWithLexicalIdentifiers = new WeakSet();\n        const argumentsIdentifiers = new WeakSet();\n\n        /**\n         * Enters a function. This creates a new lexical identifier scope, so a new Set of arrow functions is pushed onto the stack.\n         * Also, this marks all `arguments` identifiers so that they can be detected later.\n         * @returns {void}\n         */\n        function enterFunction() {\n            lexicalScopeStack.unshift(new Set());\n            context.getScope().variables.filter(variable => variable.name === \"arguments\").forEach(variable => {\n                variable.references.map(ref => ref.identifier).forEach(identifier => argumentsIdentifiers.add(identifier));\n            });\n        }\n\n        /**\n         * Exits a function. This pops the current set of arrow functions off the lexical scope stack.\n         * @returns {void}\n         */\n        function exitFunction() {\n            lexicalScopeStack.shift();\n        }\n\n        /**\n         * Marks the current function as having a lexical keyword. This implies that all arrow functions\n         * in the current lexical scope contain a reference to this lexical keyword.\n         * @returns {void}\n         */\n        function reportLexicalIdentifier() {\n            lexicalScopeStack[0].forEach(arrowFunction => arrowsWithLexicalIdentifiers.add(arrowFunction));\n        }\n\n        //--------------------------------------------------------------------------\n        // Public\n        //--------------------------------------------------------------------------\n\n        return {\n            Program: enterFunction,\n            FunctionDeclaration: enterFunction,\n            FunctionExpression: enterFunction,\n            \"Program:exit\": exitFunction,\n            \"FunctionDeclaration:exit\": exitFunction,\n            \"FunctionExpression:exit\": exitFunction,\n\n            ArrowFunctionExpression(node) {\n                lexicalScopeStack[0].add(node);\n            },\n            \"ArrowFunctionExpression:exit\"(node) {\n                lexicalScopeStack[0].delete(node);\n            },\n\n            ThisExpression: reportLexicalIdentifier,\n            Super: reportLexicalIdentifier,\n            MetaProperty(node) {\n                if (node.meta.name === \"new\" && node.property.name === \"target\") {\n                    reportLexicalIdentifier();\n                }\n            },\n            Identifier(node) {\n                if (argumentsIdentifiers.has(node)) {\n                    reportLexicalIdentifier();\n                }\n            },\n\n            ObjectExpression(node) {\n                if (APPLY_CONSISTENT) {\n                    checkConsistency(node, false);\n                } else if (APPLY_CONSISTENT_AS_NEEDED) {\n                    checkConsistency(node, true);\n                }\n            },\n\n            \"Property:exit\"(node) {\n                const isConciseProperty = node.method || node.shorthand;\n\n                // Ignore destructuring assignment\n                if (node.parent.type === \"ObjectPattern\") {\n                    return;\n                }\n\n                // getters and setters are ignored\n                if (node.kind === \"get\" || node.kind === \"set\") {\n                    return;\n                }\n\n                // only computed methods can fail the following checks\n                if (node.computed && node.value.type !== \"FunctionExpression\" && node.value.type !== \"ArrowFunctionExpression\") {\n                    return;\n                }\n\n                //--------------------------------------------------------------\n                // Checks for property/method shorthand.\n                if (isConciseProperty) {\n                    if (node.method && (APPLY_NEVER || AVOID_QUOTES && isStringLiteral(node.key))) {\n                        const messageId = APPLY_NEVER ? \"expectedMethodLongform\" : \"expectedLiteralMethodLongform\";\n\n                        // { x() {} } should be written as { x: function() {} }\n                        context.report({\n                            node,\n                            messageId,\n                            fix: fixer => makeFunctionLongform(fixer, node)\n                        });\n                    } else if (APPLY_NEVER) {\n\n                        // { x } should be written as { x: x }\n                        context.report({\n                            node,\n                            messageId: \"expectedPropertyLongform\",\n                            fix: fixer => fixer.insertTextAfter(node.key, `: ${node.key.name}`)\n                        });\n                    }\n                } else if (APPLY_TO_METHODS && !node.value.id && (node.value.type === \"FunctionExpression\" || node.value.type === \"ArrowFunctionExpression\")) {\n                    if (IGNORE_CONSTRUCTORS && node.key.type === \"Identifier\" && isConstructor(node.key.name)) {\n                        return;\n                    }\n                    if (AVOID_QUOTES && isStringLiteral(node.key)) {\n                        return;\n                    }\n\n                    // {[x]: function(){}} should be written as {[x]() {}}\n                    if (node.value.type === \"FunctionExpression\" ||\n                        node.value.type === \"ArrowFunctionExpression\" &&\n                        node.value.body.type === \"BlockStatement\" &&\n                        AVOID_EXPLICIT_RETURN_ARROWS &&\n                        !arrowsWithLexicalIdentifiers.has(node.value)\n                    ) {\n                        context.report({\n                            node,\n                            messageId: \"expectedMethodShorthand\",\n                            fix: fixer => makeFunctionShorthand(fixer, node)\n                        });\n                    }\n                } else if (node.value.type === \"Identifier\" && node.key.name === node.value.name && APPLY_TO_PROPS) {\n\n                    // {x: x} should be written as {x}\n                    context.report({\n                        node,\n                        messageId: \"expectedPropertyShorthand\",\n                        fix(fixer) {\n                            return fixer.replaceText(node, node.value.name);\n                        }\n                    });\n                } else if (node.value.type === \"Identifier\" && node.key.type === \"Literal\" && node.key.value === node.value.name && APPLY_TO_PROPS) {\n                    if (AVOID_QUOTES) {\n                        return;\n                    }\n\n                    // {\"x\": x} should be written as {x}\n                    context.report({\n                        node,\n                        messageId: \"expectedPropertyShorthand\",\n                        fix(fixer) {\n                            return fixer.replaceText(node, node.value.name);\n                        }\n                    });\n                }\n            }\n        };\n    }\n};\n/lib/rules/no-global-assign.js\u000b/**\n * @fileoverview Rule to disallow assignments to native objects or read-only global variables\n * @author Ilya Volodin\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow assignments to native objects or read-only global variables\",\n            recommended: true,\n            url: \"https://eslint.org/docs/rules/no-global-assign\"\n        },\n\n        schema: [\n            {\n                type: \"object\",\n                properties: {\n                    exceptions: {\n                        type: \"array\",\n                        items: { type: \"string\" },\n                        uniqueItems: true\n                    }\n                },\n                additionalProperties: false\n            }\n        ],\n\n        messages: {\n            globalShouldNotBeModified: \"Read-only global '{{name}}' should not be modified.\"\n        }\n    },\n\n    create(context) {\n        const config = context.options[0];\n        const exceptions = (config && config.exceptions) || [];\n\n        /**\n         * Reports write references.\n         * @param {Reference} reference A reference to check.\n         * @param {int} index The index of the reference in the references.\n         * @param {Reference[]} references The array that the reference belongs to.\n         * @returns {void}\n         */\n        function checkReference(reference, index, references) {\n            const identifier = reference.identifier;\n\n            if (reference.init === false &&\n                reference.isWrite() &&\n\n                /*\n                 * Destructuring assignments can have multiple default value,\n                 * so possibly there are multiple writeable references for the same identifier.\n                 */\n                (index === 0 || references[index - 1].identifier !== identifier)\n            ) {\n                context.report({\n                    node: identifier,\n                    messageId: \"globalShouldNotBeModified\",\n                    data: {\n                        name: identifier.name\n                    }\n                });\n            }\n        }\n\n        /**\n         * Reports write references if a given variable is read-only builtin.\n         * @param {Variable} variable A variable to check.\n         * @returns {void}\n         */\n        function checkVariable(variable) {\n            if (variable.writeable === false && exceptions.indexOf(variable.name) === -1) {\n                variable.references.forEach(checkReference);\n            }\n        }\n\n        return {\n            Program() {\n                const globalScope = context.getScope();\n\n                globalScope.variables.forEach(checkVariable);\n            }\n        };\n    }\n};\n/lib/rules/valid-typeof.js\u000b/**\n * @fileoverview Ensures that the results of typeof are compared against a valid string\n * @author Ian Christian Myers\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"problem\",\n\n        docs: {\n            description: \"enforce comparing `typeof` expressions against valid strings\",\n            recommended: true,\n            url: \"https://eslint.org/docs/rules/valid-typeof\"\n        },\n\n        schema: [\n            {\n                type: \"object\",\n                properties: {\n                    requireStringLiterals: {\n                        type: \"boolean\",\n                        default: false\n                    }\n                },\n                additionalProperties: false\n            }\n        ],\n        messages: {\n            invalidValue: \"Invalid typeof comparison value.\",\n            notString: \"Typeof comparisons should be to string literals.\"\n        }\n    },\n\n    create(context) {\n\n        const VALID_TYPES = [\"symbol\", \"undefined\", \"object\", \"boolean\", \"number\", \"string\", \"function\", \"bigint\"],\n            OPERATORS = [\"==\", \"===\", \"!=\", \"!==\"];\n\n        const requireStringLiterals = context.options[0] && context.options[0].requireStringLiterals;\n\n        /**\n         * Determines whether a node is a typeof expression.\n         * @param {ASTNode} node The node\n         * @returns {boolean} `true` if the node is a typeof expression\n         */\n        function isTypeofExpression(node) {\n            return node.type === \"UnaryExpression\" && node.operator === \"typeof\";\n        }\n\n        //--------------------------------------------------------------------------\n        // Public\n        //--------------------------------------------------------------------------\n\n        return {\n\n            UnaryExpression(node) {\n                if (isTypeofExpression(node)) {\n                    const parent = context.getAncestors().pop();\n\n                    if (parent.type === \"BinaryExpression\" && OPERATORS.indexOf(parent.operator) !== -1) {\n                        const sibling = parent.left === node ? parent.right : parent.left;\n\n                        if (sibling.type === \"Literal\" || sibling.type === \"TemplateLiteral\" && !sibling.expressions.length) {\n                            const value = sibling.type === \"Literal\" ? sibling.value : sibling.quasis[0].value.cooked;\n\n                            if (VALID_TYPES.indexOf(value) === -1) {\n                                context.report({ node: sibling, messageId: \"invalidValue\" });\n                            }\n                        } else if (requireStringLiterals && !isTypeofExpression(sibling)) {\n                            context.report({ node: sibling, messageId: \"notString\" });\n                        }\n                    }\n                }\n            }\n\n        };\n\n    }\n};\n$/lib/rules/grouped-accessor-pairs.js\u001e/**\n * @fileoverview Rule to require grouped accessor pairs in object literals and classes\n * @author Milos Djermanovic\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Typedefs\n//------------------------------------------------------------------------------\n\n/**\n * Property name if it can be computed statically, otherwise the list of the tokens of the key node.\n * @typedef {string|Token[]} Key\n */\n\n/**\n * Accessor nodes with the same key.\n * @typedef {Object} AccessorData\n * @property {Key} key Accessor's key\n * @property {ASTNode[]} getters List of getter nodes.\n * @property {ASTNode[]} setters List of setter nodes.\n */\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\n/**\n * Checks whether or not the given lists represent the equal tokens in the same order.\n * Tokens are compared by their properties, not by instance.\n * @param {Token[]} left First list of tokens.\n * @param {Token[]} right Second list of tokens.\n * @returns {boolean} `true` if the lists have same tokens.\n */\nfunction areEqualTokenLists(left, right) {\n    if (left.length !== right.length) {\n        return false;\n    }\n\n    for (let i = 0; i < left.length; i++) {\n        const leftToken = left[i],\n            rightToken = right[i];\n\n        if (leftToken.type !== rightToken.type || leftToken.value !== rightToken.value) {\n            return false;\n        }\n    }\n\n    return true;\n}\n\n/**\n * Checks whether or not the given keys are equal.\n * @param {Key} left First key.\n * @param {Key} right Second key.\n * @returns {boolean} `true` if the keys are equal.\n */\nfunction areEqualKeys(left, right) {\n    if (typeof left === \"string\" && typeof right === \"string\") {\n\n        // Statically computed names.\n        return left === right;\n    }\n    if (Array.isArray(left) && Array.isArray(right)) {\n\n        // Token lists.\n        return areEqualTokenLists(left, right);\n    }\n\n    return false;\n}\n\n/**\n * Checks whether or not a given node is of an accessor kind ('get' or 'set').\n * @param {ASTNode} node A node to check.\n * @returns {boolean} `true` if the node is of an accessor kind.\n */\nfunction isAccessorKind(node) {\n    return node.kind === \"get\" || node.kind === \"set\";\n}\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"require grouped accessor pairs in object literals and classes\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/grouped-accessor-pairs\"\n        },\n\n        schema: [\n            {\n                enum: [\"anyOrder\", \"getBeforeSet\", \"setBeforeGet\"]\n            }\n        ],\n\n        messages: {\n            notGrouped: \"Accessor pair {{ formerName }} and {{ latterName }} should be grouped.\",\n            invalidOrder: \"Expected {{ latterName }} to be before {{ formerName }}.\"\n        }\n    },\n\n    create(context) {\n        const order = context.options[0] || \"anyOrder\";\n        const sourceCode = context.getSourceCode();\n\n        /**\n         * Reports the given accessor pair.\n         * @param {string} messageId messageId to report.\n         * @param {ASTNode} formerNode getter/setter node that is defined before `latterNode`.\n         * @param {ASTNode} latterNode getter/setter node that is defined after `formerNode`.\n         * @returns {void}\n         * @private\n         */\n        function report(messageId, formerNode, latterNode) {\n            context.report({\n                node: latterNode,\n                messageId,\n                loc: astUtils.getFunctionHeadLoc(latterNode.value, sourceCode),\n                data: {\n                    formerName: astUtils.getFunctionNameWithKind(formerNode.value),\n                    latterName: astUtils.getFunctionNameWithKind(latterNode.value)\n                }\n            });\n        }\n\n        /**\n         * Creates a new `AccessorData` object for the given getter or setter node.\n         * @param {ASTNode} node A getter or setter node.\n         * @returns {AccessorData} New `AccessorData` object that contains the given node.\n         * @private\n         */\n        function createAccessorData(node) {\n            const name = astUtils.getStaticPropertyName(node);\n            const key = (name !== null) ? name : sourceCode.getTokens(node.key);\n\n            return {\n                key,\n                getters: node.kind === \"get\" ? [node] : [],\n                setters: node.kind === \"set\" ? [node] : []\n            };\n        }\n\n        /**\n         * Merges the given `AccessorData` object into the given accessors list.\n         * @param {AccessorData[]} accessors The list to merge into.\n         * @param {AccessorData} accessorData The object to merge.\n         * @returns {AccessorData[]} The same instance with the merged object.\n         * @private\n         */\n        function mergeAccessorData(accessors, accessorData) {\n            const equalKeyElement = accessors.find(a => areEqualKeys(a.key, accessorData.key));\n\n            if (equalKeyElement) {\n                equalKeyElement.getters.push(...accessorData.getters);\n                equalKeyElement.setters.push(...accessorData.setters);\n            } else {\n                accessors.push(accessorData);\n            }\n\n            return accessors;\n        }\n\n        /**\n         * Checks accessor pairs in the given list of nodes.\n         * @param {ASTNode[]} nodes The list to check.\n         * @param {Function} shouldCheck – Predicate that returns `true` if the node should be checked.\n         * @returns {void}\n         * @private\n         */\n        function checkList(nodes, shouldCheck) {\n            const accessors = nodes\n                .filter(shouldCheck)\n                .filter(isAccessorKind)\n                .map(createAccessorData)\n                .reduce(mergeAccessorData, []);\n\n            for (const { getters, setters } of accessors) {\n\n                // Don't report accessor properties that have duplicate getters or setters.\n                if (getters.length === 1 && setters.length === 1) {\n                    const [getter] = getters,\n                        [setter] = setters,\n                        getterIndex = nodes.indexOf(getter),\n                        setterIndex = nodes.indexOf(setter),\n                        formerNode = getterIndex < setterIndex ? getter : setter,\n                        latterNode = getterIndex < setterIndex ? setter : getter;\n\n                    if (Math.abs(getterIndex - setterIndex) > 1) {\n                        report(\"notGrouped\", formerNode, latterNode);\n                    } else if (\n                        (order === \"getBeforeSet\" && getterIndex > setterIndex) ||\n                        (order === \"setBeforeGet\" && getterIndex < setterIndex)\n                    ) {\n                        report(\"invalidOrder\", formerNode, latterNode);\n                    }\n                }\n            }\n        }\n\n        return {\n            ObjectExpression(node) {\n                checkList(node.properties, n => n.type === \"Property\");\n            },\n            ClassBody(node) {\n                checkList(node.body, n => n.type === \"MethodDefinition\" && !n.static);\n                checkList(node.body, n => n.type === \"MethodDefinition\" && n.static);\n            }\n        };\n    }\n};\n/lib/cli-engine/hash.js\u0004$/**\n * @fileoverview Defining the hashing function in one place.\n * @author Michael Ficarra\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst murmur = require(\"imurmurhash\");\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\n//------------------------------------------------------------------------------\n// Private\n//------------------------------------------------------------------------------\n\n/**\n * hash the given string\n * @param {string} str the string to hash\n * @returns {string} the hash\n */\nfunction hash(str) {\n    return murmur(str).result().toString(36);\n}\n\n//------------------------------------------------------------------------------\n// Public Interface\n//------------------------------------------------------------------------------\n\nmodule.exports = hash;\n&/lib/rules/no-empty-character-class.js\u0006/**\n * @fileoverview Rule to flag the use of empty character classes in regular expressions\n * @author Ian Christian Myers\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\n/*\n * plain-English description of the following regexp:\n * 0. `^` fix the match at the beginning of the string\n * 1. `([^\\\\[]|\\\\.|\\[([^\\\\\\]]|\\\\.)+\\])*`: regexp contents; 0 or more of the following\n * 1.0. `[^\\\\[]`: any character that's not a `\\` or a `[` (anything but escape sequences and character classes)\n * 1.1. `\\\\.`: an escape sequence\n * 1.2. `\\[([^\\\\\\]]|\\\\.)+\\]`: a character class that isn't empty\n * 2. `$`: fix the match at the end of the string\n */\nconst regex = /^([^\\\\[]|\\\\.|\\[([^\\\\\\]]|\\\\.)+\\])*$/u;\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"problem\",\n\n        docs: {\n            description: \"disallow empty character classes in regular expressions\",\n            recommended: true,\n            url: \"https://eslint.org/docs/rules/no-empty-character-class\"\n        },\n\n        schema: [],\n\n        messages: {\n            unexpected: \"Empty class.\"\n        }\n    },\n\n    create(context) {\n        return {\n            \"Literal[regex]\"(node) {\n                if (!regex.test(node.regex.pattern)) {\n                    context.report({ node, messageId: \"unexpected\" });\n                }\n            }\n        };\n\n    }\n};\n%/lib/rules/no-multiple-empty-lines.js\u0018/**\n * @fileoverview Disallows multiple blank lines.\n * implementation adapted from the no-trailing-spaces rule.\n * @author Greg Cochard\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"layout\",\n\n        docs: {\n            description: \"disallow multiple empty lines\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-multiple-empty-lines\"\n        },\n\n        fixable: \"whitespace\",\n\n        schema: [\n            {\n                type: \"object\",\n                properties: {\n                    max: {\n                        type: \"integer\",\n                        minimum: 0\n                    },\n                    maxEOF: {\n                        type: \"integer\",\n                        minimum: 0\n                    },\n                    maxBOF: {\n                        type: \"integer\",\n                        minimum: 0\n                    }\n                },\n                required: [\"max\"],\n                additionalProperties: false\n            }\n        ],\n\n        messages: {\n            blankBeginningOfFile: \"Too many blank lines at the beginning of file. Max of {{max}} allowed.\",\n            blankEndOfFile: \"Too many blank lines at the end of file. Max of {{max}} allowed.\",\n            consecutiveBlank: \"More than {{max}} blank {{pluralizedLines}} not allowed.\"\n        }\n    },\n\n    create(context) {\n\n        // Use options.max or 2 as default\n        let max = 2,\n            maxEOF = max,\n            maxBOF = max;\n\n        if (context.options.length) {\n            max = context.options[0].max;\n            maxEOF = typeof context.options[0].maxEOF !== \"undefined\" ? context.options[0].maxEOF : max;\n            maxBOF = typeof context.options[0].maxBOF !== \"undefined\" ? context.options[0].maxBOF : max;\n        }\n\n        const sourceCode = context.getSourceCode();\n\n        // Swallow the final newline, as some editors add it automatically and we don't want it to cause an issue\n        const allLines = sourceCode.lines[sourceCode.lines.length - 1] === \"\" ? sourceCode.lines.slice(0, -1) : sourceCode.lines;\n        const templateLiteralLines = new Set();\n\n        //--------------------------------------------------------------------------\n        // Public\n        //--------------------------------------------------------------------------\n\n        return {\n            TemplateLiteral(node) {\n                node.quasis.forEach(literalPart => {\n\n                    // Empty lines have a semantic meaning if they're inside template literals. Don't count these as empty lines.\n                    for (let ignoredLine = literalPart.loc.start.line; ignoredLine < literalPart.loc.end.line; ignoredLine++) {\n                        templateLiteralLines.add(ignoredLine);\n                    }\n                });\n            },\n            \"Program:exit\"(node) {\n                return allLines\n\n                    // Given a list of lines, first get a list of line numbers that are non-empty.\n                    .reduce((nonEmptyLineNumbers, line, index) => {\n                        if (line.trim() || templateLiteralLines.has(index + 1)) {\n                            nonEmptyLineNumbers.push(index + 1);\n                        }\n                        return nonEmptyLineNumbers;\n                    }, [])\n\n                    // Add a value at the end to allow trailing empty lines to be checked.\n                    .concat(allLines.length + 1)\n\n                    // Given two line numbers of non-empty lines, report the lines between if the difference is too large.\n                    .reduce((lastLineNumber, lineNumber) => {\n                        let messageId, maxAllowed;\n\n                        if (lastLineNumber === 0) {\n                            messageId = \"blankBeginningOfFile\";\n                            maxAllowed = maxBOF;\n                        } else if (lineNumber === allLines.length + 1) {\n                            messageId = \"blankEndOfFile\";\n                            maxAllowed = maxEOF;\n                        } else {\n                            messageId = \"consecutiveBlank\";\n                            maxAllowed = max;\n                        }\n\n                        if (lineNumber - lastLineNumber - 1 > maxAllowed) {\n                            context.report({\n                                node,\n                                loc: {\n                                    start: { line: lastLineNumber + maxAllowed + 1, column: 0 },\n                                    end: { line: lineNumber, column: 0 }\n                                },\n                                messageId,\n                                data: {\n                                    max: maxAllowed,\n                                    pluralizedLines: maxAllowed === 1 ? \"line\" : \"lines\"\n                                },\n                                fix(fixer) {\n                                    const rangeStart = sourceCode.getIndexFromLoc({ line: lastLineNumber + 1, column: 0 });\n\n                                    /*\n                                     * The end of the removal range is usually the start index of the next line.\n                                     * However, at the end of the file there is no next line, so the end of the\n                                     * range is just the length of the text.\n                                     */\n                                    const lineNumberAfterRemovedLines = lineNumber - maxAllowed;\n                                    const rangeEnd = lineNumberAfterRemovedLines <= allLines.length\n                                        ? sourceCode.getIndexFromLoc({ line: lineNumberAfterRemovedLines, column: 0 })\n                                        : sourceCode.text.length;\n\n                                    return fixer.removeRange([rangeStart, rangeEnd]);\n                                }\n                            });\n                        }\n\n                        return lineNumber;\n                    }, 0);\n            }\n        };\n    }\n};\n4/lib/source-code/token-store/forward-token-cursor.js\u0007\"/**\n * @fileoverview Define the cursor which iterates tokens only.\n * @author Toru Nagashima\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst Cursor = require(\"./cursor\");\nconst utils = require(\"./utils\");\n\n//------------------------------------------------------------------------------\n// Exports\n//------------------------------------------------------------------------------\n\n/**\n * The cursor which iterates tokens only.\n */\nmodule.exports = class ForwardTokenCursor extends Cursor {\n\n    /**\n     * Initializes this cursor.\n     * @param {Token[]} tokens The array of tokens.\n     * @param {Comment[]} comments The array of comments.\n     * @param {Object} indexMap The map from locations to indices in `tokens`.\n     * @param {number} startLoc The start location of the iteration range.\n     * @param {number} endLoc The end location of the iteration range.\n     */\n    constructor(tokens, comments, indexMap, startLoc, endLoc) {\n        super();\n        this.tokens = tokens;\n        this.index = utils.getFirstIndex(tokens, indexMap, startLoc);\n        this.indexEnd = utils.getLastIndex(tokens, indexMap, endLoc);\n    }\n\n    /** @inheritdoc */\n    moveNext() {\n        if (this.index <= this.indexEnd) {\n            this.current = this.tokens[this.index];\n            this.index += 1;\n            return true;\n        }\n        return false;\n    }\n\n    /*\n     *\n     * Shorthand for performance.\n     *\n     */\n\n    /** @inheritdoc */\n    getOneToken() {\n        return (this.index <= this.indexEnd) ? this.tokens[this.index] : null;\n    }\n\n    /** @inheritdoc */\n    getAllTokens() {\n        return this.tokens.slice(this.index, this.indexEnd + 1);\n    }\n};\n/lib/rules/no-undefined.js\b/**\n * @fileoverview Rule to flag references to the undefined variable.\n * @author Michael Ficarra\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow the use of `undefined` as an identifier\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-undefined\"\n        },\n\n        schema: [],\n\n        messages: {\n            unexpectedUndefined: \"Unexpected use of undefined.\"\n        }\n    },\n\n    create(context) {\n\n        /**\n         * Report an invalid \"undefined\" identifier node.\n         * @param {ASTNode} node The node to report.\n         * @returns {void}\n         */\n        function report(node) {\n            context.report({\n                node,\n                messageId: \"unexpectedUndefined\"\n            });\n        }\n\n        /**\n         * Checks the given scope for references to `undefined` and reports\n         * all references found.\n         * @param {eslint-scope.Scope} scope The scope to check.\n         * @returns {void}\n         */\n        function checkScope(scope) {\n            const undefinedVar = scope.set.get(\"undefined\");\n\n            if (!undefinedVar) {\n                return;\n            }\n\n            const references = undefinedVar.references;\n\n            const defs = undefinedVar.defs;\n\n            // Report non-initializing references (those are covered in defs below)\n            references\n                .filter(ref => !ref.init)\n                .forEach(ref => report(ref.identifier));\n\n            defs.forEach(def => report(def.name));\n        }\n\n        return {\n            \"Program:exit\"() {\n                const globalScope = context.getScope();\n\n                const stack = [globalScope];\n\n                while (stack.length) {\n                    const scope = stack.pop();\n\n                    stack.push(...scope.childScopes);\n                    checkScope(scope);\n                }\n            }\n        };\n\n    }\n};\n/lib/rules/require-yield.js\b[/**\n * @fileoverview Rule to flag the generator functions that does not have yield.\n * @author Toru Nagashima\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"require generator functions to contain `yield`\",\n            recommended: true,\n            url: \"https://eslint.org/docs/rules/require-yield\"\n        },\n\n        schema: [],\n\n        messages: {\n            missingYield: \"This generator function does not have 'yield'.\"\n        }\n    },\n\n    create(context) {\n        const stack = [];\n\n        /**\n         * If the node is a generator function, start counting `yield` keywords.\n         * @param {Node} node A function node to check.\n         * @returns {void}\n         */\n        function beginChecking(node) {\n            if (node.generator) {\n                stack.push(0);\n            }\n        }\n\n        /**\n         * If the node is a generator function, end counting `yield` keywords, then\n         * reports result.\n         * @param {Node} node A function node to check.\n         * @returns {void}\n         */\n        function endChecking(node) {\n            if (!node.generator) {\n                return;\n            }\n\n            const countYield = stack.pop();\n\n            if (countYield === 0 && node.body.body.length > 0) {\n                context.report({ node, messageId: \"missingYield\" });\n            }\n        }\n\n        return {\n            FunctionDeclaration: beginChecking,\n            \"FunctionDeclaration:exit\": endChecking,\n            FunctionExpression: beginChecking,\n            \"FunctionExpression:exit\": endChecking,\n\n            // Increases the count of `yield` keyword.\n            YieldExpression() {\n\n                /* istanbul ignore else */\n                if (stack.length > 0) {\n                    stack[stack.length - 1] += 1;\n                }\n            }\n        };\n    }\n};\n</lib/source-code/token-store/forward-token-comment-cursor.js\u0007/**\n * @fileoverview Define the cursor which iterates tokens and comments.\n * @author Toru Nagashima\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst Cursor = require(\"./cursor\");\nconst utils = require(\"./utils\");\n\n//------------------------------------------------------------------------------\n// Exports\n//------------------------------------------------------------------------------\n\n/**\n * The cursor which iterates tokens and comments.\n */\nmodule.exports = class ForwardTokenCommentCursor extends Cursor {\n\n    /**\n     * Initializes this cursor.\n     * @param {Token[]} tokens The array of tokens.\n     * @param {Comment[]} comments The array of comments.\n     * @param {Object} indexMap The map from locations to indices in `tokens`.\n     * @param {number} startLoc The start location of the iteration range.\n     * @param {number} endLoc The end location of the iteration range.\n     */\n    constructor(tokens, comments, indexMap, startLoc, endLoc) {\n        super();\n        this.tokens = tokens;\n        this.comments = comments;\n        this.tokenIndex = utils.getFirstIndex(tokens, indexMap, startLoc);\n        this.commentIndex = utils.search(comments, startLoc);\n        this.border = endLoc;\n    }\n\n    /** @inheritdoc */\n    moveNext() {\n        const token = (this.tokenIndex < this.tokens.length) ? this.tokens[this.tokenIndex] : null;\n        const comment = (this.commentIndex < this.comments.length) ? this.comments[this.commentIndex] : null;\n\n        if (token && (!comment || token.range[0] < comment.range[0])) {\n            this.current = token;\n            this.tokenIndex += 1;\n        } else if (comment) {\n            this.current = comment;\n            this.commentIndex += 1;\n        } else {\n            this.current = null;\n        }\n\n        return Boolean(this.current) && (this.border === -1 || this.current.range[1] <= this.border);\n    }\n};\n$/lib/rules/class-methods-use-this.js\u0018\u000f/**\n * @fileoverview Rule to enforce that all class methods use 'this'.\n * @author Patrick Williams\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"enforce that class methods utilize `this`\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/class-methods-use-this\"\n        },\n\n        schema: [{\n            type: \"object\",\n            properties: {\n                exceptMethods: {\n                    type: \"array\",\n                    items: {\n                        type: \"string\"\n                    }\n                },\n                enforceForClassFields: {\n                    type: \"boolean\",\n                    default: true\n                }\n            },\n            additionalProperties: false\n        }],\n\n        messages: {\n            missingThis: \"Expected 'this' to be used by class {{name}}.\"\n        }\n    },\n    create(context) {\n        const config = Object.assign({}, context.options[0]);\n        const enforceForClassFields = config.enforceForClassFields !== false;\n        const exceptMethods = new Set(config.exceptMethods || []);\n\n        const stack = [];\n\n        /**\n         * Push `this` used flag initialized with `false` onto the stack.\n         * @returns {void}\n         */\n        function pushContext() {\n            stack.push(false);\n        }\n\n        /**\n         * Pop `this` used flag from the stack.\n         * @returns {boolean | undefined} `this` used flag\n         */\n        function popContext() {\n            return stack.pop();\n        }\n\n        /**\n         * Initializes the current context to false and pushes it onto the stack.\n         * These booleans represent whether 'this' has been used in the context.\n         * @returns {void}\n         * @private\n         */\n        function enterFunction() {\n            pushContext();\n        }\n\n        /**\n         * Check if the node is an instance method\n         * @param {ASTNode} node node to check\n         * @returns {boolean} True if its an instance method\n         * @private\n         */\n        function isInstanceMethod(node) {\n            switch (node.type) {\n                case \"MethodDefinition\":\n                    return !node.static && node.kind !== \"constructor\";\n                case \"PropertyDefinition\":\n                    return !node.static && enforceForClassFields;\n                default:\n                    return false;\n            }\n        }\n\n        /**\n         * Check if the node is an instance method not excluded by config\n         * @param {ASTNode} node node to check\n         * @returns {boolean} True if it is an instance method, and not excluded by config\n         * @private\n         */\n        function isIncludedInstanceMethod(node) {\n            if (isInstanceMethod(node)) {\n                if (node.computed) {\n                    return true;\n                }\n\n                const hashIfNeeded = node.key.type === \"PrivateIdentifier\" ? \"#\" : \"\";\n                const name = node.key.type === \"Literal\"\n                    ? astUtils.getStaticStringValue(node.key)\n                    : (node.key.name || \"\");\n\n                return !exceptMethods.has(hashIfNeeded + name);\n            }\n            return false;\n        }\n\n        /**\n         * Checks if we are leaving a function that is a method, and reports if 'this' has not been used.\n         * Static methods and the constructor are exempt.\n         * Then pops the context off the stack.\n         * @param {ASTNode} node A function node that was entered.\n         * @returns {void}\n         * @private\n         */\n        function exitFunction(node) {\n            const methodUsesThis = popContext();\n\n            if (isIncludedInstanceMethod(node.parent) && !methodUsesThis) {\n                context.report({\n                    node,\n                    loc: astUtils.getFunctionHeadLoc(node, context.getSourceCode()),\n                    messageId: \"missingThis\",\n                    data: {\n                        name: astUtils.getFunctionNameWithKind(node)\n                    }\n                });\n            }\n        }\n\n        /**\n         * Mark the current context as having used 'this'.\n         * @returns {void}\n         * @private\n         */\n        function markThisUsed() {\n            if (stack.length) {\n                stack[stack.length - 1] = true;\n            }\n        }\n\n        return {\n            FunctionDeclaration: enterFunction,\n            \"FunctionDeclaration:exit\": exitFunction,\n            FunctionExpression: enterFunction,\n            \"FunctionExpression:exit\": exitFunction,\n\n            /*\n             * Class field value are implicit functions.\n             */\n            \"PropertyDefinition > *.key:exit\": pushContext,\n            \"PropertyDefinition:exit\": popContext,\n\n            /*\n             * Class static blocks are implicit functions. They aren't required to use `this`,\n             * but we have to push context so that it captures any use of `this` in the static block\n             * separately from enclosing contexts, because static blocks have their own `this` and it\n             * shouldn't count as used `this` in enclosing contexts.\n             */\n            StaticBlock: pushContext,\n            \"StaticBlock:exit\": popContext,\n\n            ThisExpression: markThisUsed,\n            Super: markThisUsed,\n            ...(\n                enforceForClassFields && {\n                    \"PropertyDefinition > ArrowFunctionExpression.value\": enterFunction,\n                    \"PropertyDefinition > ArrowFunctionExpression.value:exit\": exitFunction\n                }\n            )\n        };\n    }\n};\n#/lib/rules/no-unused-expressions.js\u0019a/**\n * @fileoverview Flag expressions in statement position that do not side effect\n * @author Michael Ficarra\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/**\n * Returns `true`.\n * @returns {boolean} `true`.\n */\nfunction alwaysTrue() {\n    return true;\n}\n\n/**\n * Returns `false`.\n * @returns {boolean} `false`.\n */\nfunction alwaysFalse() {\n    return false;\n}\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow unused expressions\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-unused-expressions\"\n        },\n\n        schema: [\n            {\n                type: \"object\",\n                properties: {\n                    allowShortCircuit: {\n                        type: \"boolean\",\n                        default: false\n                    },\n                    allowTernary: {\n                        type: \"boolean\",\n                        default: false\n                    },\n                    allowTaggedTemplates: {\n                        type: \"boolean\",\n                        default: false\n                    },\n                    enforceForJSX: {\n                        type: \"boolean\",\n                        default: false\n                    }\n                },\n                additionalProperties: false\n            }\n        ],\n\n        messages: {\n            unusedExpression: \"Expected an assignment or function call and instead saw an expression.\"\n        }\n    },\n\n    create(context) {\n        const config = context.options[0] || {},\n            allowShortCircuit = config.allowShortCircuit || false,\n            allowTernary = config.allowTernary || false,\n            allowTaggedTemplates = config.allowTaggedTemplates || false,\n            enforceForJSX = config.enforceForJSX || false;\n\n        /**\n         * Has AST suggesting a directive.\n         * @param {ASTNode} node any node\n         * @returns {boolean} whether the given node structurally represents a directive\n         */\n        function looksLikeDirective(node) {\n            return node.type === \"ExpressionStatement\" &&\n                node.expression.type === \"Literal\" && typeof node.expression.value === \"string\";\n        }\n\n        /**\n         * Gets the leading sequence of members in a list that pass the predicate.\n         * @param {Function} predicate ([a] -> Boolean) the function used to make the determination\n         * @param {a[]} list the input list\n         * @returns {a[]} the leading sequence of members in the given list that pass the given predicate\n         */\n        function takeWhile(predicate, list) {\n            for (let i = 0; i < list.length; ++i) {\n                if (!predicate(list[i])) {\n                    return list.slice(0, i);\n                }\n            }\n            return list.slice();\n        }\n\n        /**\n         * Gets leading directives nodes in a Node body.\n         * @param {ASTNode} node a Program or BlockStatement node\n         * @returns {ASTNode[]} the leading sequence of directive nodes in the given node's body\n         */\n        function directives(node) {\n            return takeWhile(looksLikeDirective, node.body);\n        }\n\n        /**\n         * Detect if a Node is a directive.\n         * @param {ASTNode} node any node\n         * @param {ASTNode[]} ancestors the given node's ancestors\n         * @returns {boolean} whether the given node is considered a directive in its current position\n         */\n        function isDirective(node, ancestors) {\n            const parent = ancestors[ancestors.length - 1],\n                grandparent = ancestors[ancestors.length - 2];\n\n            /**\n             * https://tc39.es/ecma262/#directive-prologue\n             *\n             * Only `FunctionBody`, `ScriptBody` and `ModuleBody` can have directive prologue.\n             * Class static blocks do not have directive prologue.\n             */\n            return (parent.type === \"Program\" || parent.type === \"BlockStatement\" &&\n                    (/Function/u.test(grandparent.type))) &&\n                    directives(parent).indexOf(node) >= 0;\n        }\n\n        /**\n         * The member functions return `true` if the type has no side-effects.\n         * Unknown nodes are handled as `false`, then this rule ignores those.\n         */\n        const Checker = Object.assign(Object.create(null), {\n            isDisallowed(node) {\n                return (Checker[node.type] || alwaysFalse)(node);\n            },\n\n            ArrayExpression: alwaysTrue,\n            ArrowFunctionExpression: alwaysTrue,\n            BinaryExpression: alwaysTrue,\n            ChainExpression(node) {\n                return Checker.isDisallowed(node.expression);\n            },\n            ClassExpression: alwaysTrue,\n            ConditionalExpression(node) {\n                if (allowTernary) {\n                    return Checker.isDisallowed(node.consequent) || Checker.isDisallowed(node.alternate);\n                }\n                return true;\n            },\n            FunctionExpression: alwaysTrue,\n            Identifier: alwaysTrue,\n            JSXElement() {\n                return enforceForJSX;\n            },\n            JSXFragment() {\n                return enforceForJSX;\n            },\n            Literal: alwaysTrue,\n            LogicalExpression(node) {\n                if (allowShortCircuit) {\n                    return Checker.isDisallowed(node.right);\n                }\n                return true;\n            },\n            MemberExpression: alwaysTrue,\n            MetaProperty: alwaysTrue,\n            ObjectExpression: alwaysTrue,\n            SequenceExpression: alwaysTrue,\n            TaggedTemplateExpression() {\n                return !allowTaggedTemplates;\n            },\n            TemplateLiteral: alwaysTrue,\n            ThisExpression: alwaysTrue,\n            UnaryExpression(node) {\n                return node.operator !== \"void\" && node.operator !== \"delete\";\n            }\n        });\n\n        return {\n            ExpressionStatement(node) {\n                if (Checker.isDisallowed(node.expression) && !isDirective(node, context.getAncestors())) {\n                    context.report({ node, messageId: \"unusedExpression\" });\n                }\n            }\n        };\n    }\n};\n/lib/rules/block-spacing.js\u0016/**\n * @fileoverview A rule to disallow or enforce spaces inside of single line blocks.\n * @author Toru Nagashima\n */\n\n\"use strict\";\n\nconst util = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"layout\",\n\n        docs: {\n            description: \"disallow or enforce spaces inside of blocks after opening block and before closing block\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/block-spacing\"\n        },\n\n        fixable: \"whitespace\",\n\n        schema: [\n            { enum: [\"always\", \"never\"] }\n        ],\n\n        messages: {\n            missing: \"Requires a space {{location}} '{{token}}'.\",\n            extra: \"Unexpected space(s) {{location}} '{{token}}'.\"\n        }\n    },\n\n    create(context) {\n        const always = (context.options[0] !== \"never\"),\n            messageId = always ? \"missing\" : \"extra\",\n            sourceCode = context.getSourceCode();\n\n        /**\n         * Gets the open brace token from a given node.\n         * @param {ASTNode} node A BlockStatement/StaticBlock/SwitchStatement node to get.\n         * @returns {Token} The token of the open brace.\n         */\n        function getOpenBrace(node) {\n            if (node.type === \"SwitchStatement\") {\n                if (node.cases.length > 0) {\n                    return sourceCode.getTokenBefore(node.cases[0]);\n                }\n                return sourceCode.getLastToken(node, 1);\n            }\n\n            if (node.type === \"StaticBlock\") {\n                return sourceCode.getFirstToken(node, { skip: 1 }); // skip the `static` token\n            }\n\n            // \"BlockStatement\"\n            return sourceCode.getFirstToken(node);\n        }\n\n        /**\n         * Checks whether or not:\n         *   - given tokens are on same line.\n         *   - there is/isn't a space between given tokens.\n         * @param {Token} left A token to check.\n         * @param {Token} right The token which is next to `left`.\n         * @returns {boolean}\n         *    When the option is `\"always\"`, `true` if there are one or more spaces between given tokens.\n         *    When the option is `\"never\"`, `true` if there are not any spaces between given tokens.\n         *    If given tokens are not on same line, it's always `true`.\n         */\n        function isValid(left, right) {\n            return (\n                !util.isTokenOnSameLine(left, right) ||\n                sourceCode.isSpaceBetweenTokens(left, right) === always\n            );\n        }\n\n        /**\n         * Checks and reports invalid spacing style inside braces.\n         * @param {ASTNode} node A BlockStatement/StaticBlock/SwitchStatement node to check.\n         * @returns {void}\n         */\n        function checkSpacingInsideBraces(node) {\n\n            // Gets braces and the first/last token of content.\n            const openBrace = getOpenBrace(node);\n            const closeBrace = sourceCode.getLastToken(node);\n            const firstToken = sourceCode.getTokenAfter(openBrace, { includeComments: true });\n            const lastToken = sourceCode.getTokenBefore(closeBrace, { includeComments: true });\n\n            // Skip if the node is invalid or empty.\n            if (openBrace.type !== \"Punctuator\" ||\n                openBrace.value !== \"{\" ||\n                closeBrace.type !== \"Punctuator\" ||\n                closeBrace.value !== \"}\" ||\n                firstToken === closeBrace\n            ) {\n                return;\n            }\n\n            // Skip line comments for option never\n            if (!always && firstToken.type === \"Line\") {\n                return;\n            }\n\n            // Check.\n            if (!isValid(openBrace, firstToken)) {\n                let loc = openBrace.loc;\n\n                if (messageId === \"extra\") {\n                    loc = {\n                        start: openBrace.loc.end,\n                        end: firstToken.loc.start\n                    };\n                }\n\n                context.report({\n                    node,\n                    loc,\n                    messageId,\n                    data: {\n                        location: \"after\",\n                        token: openBrace.value\n                    },\n                    fix(fixer) {\n                        if (always) {\n                            return fixer.insertTextBefore(firstToken, \" \");\n                        }\n\n                        return fixer.removeRange([openBrace.range[1], firstToken.range[0]]);\n                    }\n                });\n            }\n            if (!isValid(lastToken, closeBrace)) {\n                let loc = closeBrace.loc;\n\n                if (messageId === \"extra\") {\n                    loc = {\n                        start: lastToken.loc.end,\n                        end: closeBrace.loc.start\n                    };\n                }\n                context.report({\n                    node,\n                    loc,\n                    messageId,\n                    data: {\n                        location: \"before\",\n                        token: closeBrace.value\n                    },\n                    fix(fixer) {\n                        if (always) {\n                            return fixer.insertTextAfter(lastToken, \" \");\n                        }\n\n                        return fixer.removeRange([lastToken.range[1], closeBrace.range[0]]);\n                    }\n                });\n            }\n        }\n\n        return {\n            BlockStatement: checkSpacingInsideBraces,\n            StaticBlock: checkSpacingInsideBraces,\n            SwitchStatement: checkSpacingInsideBraces\n        };\n    }\n};\n/lib/rules/no-new.js\u0004\u001e/**\n * @fileoverview Rule to flag statements with function invocation preceded by\n * \"new\" and not part of assignment\n * @author Ilya Volodin\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow `new` operators outside of assignments or comparisons\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-new\"\n        },\n\n        schema: [],\n\n        messages: {\n            noNewStatement: \"Do not use 'new' for side effects.\"\n        }\n    },\n\n    create(context) {\n\n        return {\n            \"ExpressionStatement > NewExpression\"(node) {\n                context.report({\n                    node: node.parent,\n                    messageId: \"noNewStatement\"\n                });\n            }\n        };\n\n    }\n};\n\"/lib/rules/no-negated-condition.js\u000b/**\n * @fileoverview Rule to disallow a negated condition\n * @author Alberto Rodríguez\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow negated conditions\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-negated-condition\"\n        },\n\n        schema: [],\n\n        messages: {\n            unexpectedNegated: \"Unexpected negated condition.\"\n        }\n    },\n\n    create(context) {\n\n        /**\n         * Determines if a given node is an if-else without a condition on the else\n         * @param {ASTNode} node The node to check.\n         * @returns {boolean} True if the node has an else without an if.\n         * @private\n         */\n        function hasElseWithoutCondition(node) {\n            return node.alternate && node.alternate.type !== \"IfStatement\";\n        }\n\n        /**\n         * Determines if a given node is a negated unary expression\n         * @param {Object} test The test object to check.\n         * @returns {boolean} True if the node is a negated unary expression.\n         * @private\n         */\n        function isNegatedUnaryExpression(test) {\n            return test.type === \"UnaryExpression\" && test.operator === \"!\";\n        }\n\n        /**\n         * Determines if a given node is a negated binary expression\n         * @param {Test} test The test to check.\n         * @returns {boolean} True if the node is a negated binary expression.\n         * @private\n         */\n        function isNegatedBinaryExpression(test) {\n            return test.type === \"BinaryExpression\" &&\n                (test.operator === \"!=\" || test.operator === \"!==\");\n        }\n\n        /**\n         * Determines if a given node has a negated if expression\n         * @param {ASTNode} node The node to check.\n         * @returns {boolean} True if the node has a negated if expression.\n         * @private\n         */\n        function isNegatedIf(node) {\n            return isNegatedUnaryExpression(node.test) || isNegatedBinaryExpression(node.test);\n        }\n\n        return {\n            IfStatement(node) {\n                if (!hasElseWithoutCondition(node)) {\n                    return;\n                }\n\n                if (isNegatedIf(node)) {\n                    context.report({\n                        node,\n                        messageId: \"unexpectedNegated\"\n                    });\n                }\n            },\n            ConditionalExpression(node) {\n                if (isNegatedIf(node)) {\n                    context.report({\n                        node,\n                        messageId: \"unexpectedNegated\"\n                    });\n                }\n            }\n        };\n    }\n};\n/lib/rules/no-path-concat.js\u0006/**\n * @fileoverview Disallow string concatenation when using __dirname and __filename\n * @author Nicholas C. Zakas\n * @deprecated in ESLint v7.0.0\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        deprecated: true,\n\n        replacedBy: [],\n\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow string concatenation with `__dirname` and `__filename`\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-path-concat\"\n        },\n\n        schema: [],\n\n        messages: {\n            usePathFunctions: \"Use path.join() or path.resolve() instead of + to create paths.\"\n        }\n    },\n\n    create(context) {\n\n        const MATCHER = /^__(?:dir|file)name$/u;\n\n        //--------------------------------------------------------------------------\n        // Public\n        //--------------------------------------------------------------------------\n\n        return {\n\n            BinaryExpression(node) {\n\n                const left = node.left,\n                    right = node.right;\n\n                if (node.operator === \"+\" &&\n                        ((left.type === \"Identifier\" && MATCHER.test(left.name)) ||\n                        (right.type === \"Identifier\" && MATCHER.test(right.name)))\n                ) {\n\n                    context.report({\n                        node,\n                        messageId: \"usePathFunctions\"\n                    });\n                }\n            }\n\n        };\n\n    }\n};\n/lib/shared/ast-utils.js\u0003/**\n * @fileoverview Common utils for AST.\n *\n * This file contains only shared items for core and rules.\n * If you make a utility for rules, please see `../rules/utils/ast-utils.js`.\n *\n * @author Toru Nagashima <https://github.com/mysticatea>\n */\n\"use strict\";\n\nconst breakableTypePattern = /^(?:(?:Do)?While|For(?:In|Of)?|Switch)Statement$/u;\nconst lineBreakPattern = /\\r\\n|[\\r\\n\\u2028\\u2029]/u;\nconst shebangPattern = /^#!([^\\r\\n]+)/u;\n\n/**\n * Creates a version of the `lineBreakPattern` regex with the global flag.\n * Global regexes are mutable, so this needs to be a function instead of a constant.\n * @returns {RegExp} A global regular expression that matches line terminators\n */\nfunction createGlobalLinebreakMatcher() {\n    return new RegExp(lineBreakPattern.source, \"gu\");\n}\n\nmodule.exports = {\n    breakableTypePattern,\n    lineBreakPattern,\n    createGlobalLinebreakMatcher,\n    shebangPattern\n};\n/lib/rules/no-multi-assign.js\u0007\b/**\n * @fileoverview Rule to check use of chained assignment expressions\n * @author Stewart Rand\n */\n\n\"use strict\";\n\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow use of chained assignment expressions\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-multi-assign\"\n        },\n\n        schema: [{\n            type: \"object\",\n            properties: {\n                ignoreNonDeclaration: {\n                    type: \"boolean\",\n                    default: false\n                }\n            },\n            additionalProperties: false\n        }],\n\n        messages: {\n            unexpectedChain: \"Unexpected chained assignment.\"\n        }\n    },\n\n    create(context) {\n\n        //--------------------------------------------------------------------------\n        // Public\n        //--------------------------------------------------------------------------\n        const options = context.options[0] || {\n            ignoreNonDeclaration: false\n        };\n        const selectors = [\n            \"VariableDeclarator > AssignmentExpression.init\",\n            \"PropertyDefinition > AssignmentExpression.value\"\n        ];\n\n        if (!options.ignoreNonDeclaration) {\n            selectors.push(\"AssignmentExpression > AssignmentExpression.right\");\n        }\n\n        return {\n            [selectors](node) {\n                context.report({\n                    node,\n                    messageId: \"unexpectedChain\"\n                });\n            }\n        };\n\n    }\n};\n!/lib/rules/utils/unicode/index.js\u0001Y/**\n * @author Toru Nagashima <https://github.com/mysticatea>\n */\n\"use strict\";\n\nmodule.exports = {\n    isCombiningCharacter: require(\"./is-combining-character\"),\n    isEmojiModifier: require(\"./is-emoji-modifier\"),\n    isRegionalIndicatorSymbol: require(\"./is-regional-indicator-symbol\"),\n    isSurrogatePair: require(\"./is-surrogate-pair\")\n};\n\"/messages/extend-config-missing.js\u0001\"use strict\";\n\nmodule.exports = function(it) {\n    const { configName, importerName } = it;\n\n    return `\nESLint couldn't find the config \"${configName}\" to extend from. Please check that the name of the config is correct.\n\nThe config \"${configName}\" was referenced from the config file in \"${importerName}\".\n\nIf you still have problems, please stop by https://eslint.org/chat/help to chat with the team.\n`.trimLeft();\n};\n/lib/rules/constructor-super.js:/**\n * @fileoverview A rule to verify `super()` callings in constructor.\n * @author Toru Nagashima\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\n/**\n * Checks whether a given code path segment is reachable or not.\n * @param {CodePathSegment} segment A code path segment to check.\n * @returns {boolean} `true` if the segment is reachable.\n */\nfunction isReachable(segment) {\n    return segment.reachable;\n}\n\n/**\n * Checks whether or not a given node is a constructor.\n * @param {ASTNode} node A node to check. This node type is one of\n *   `Program`, `FunctionDeclaration`, `FunctionExpression`, and\n *   `ArrowFunctionExpression`.\n * @returns {boolean} `true` if the node is a constructor.\n */\nfunction isConstructorFunction(node) {\n    return (\n        node.type === \"FunctionExpression\" &&\n        node.parent.type === \"MethodDefinition\" &&\n        node.parent.kind === \"constructor\"\n    );\n}\n\n/**\n * Checks whether a given node can be a constructor or not.\n * @param {ASTNode} node A node to check.\n * @returns {boolean} `true` if the node can be a constructor.\n */\nfunction isPossibleConstructor(node) {\n    if (!node) {\n        return false;\n    }\n\n    switch (node.type) {\n        case \"ClassExpression\":\n        case \"FunctionExpression\":\n        case \"ThisExpression\":\n        case \"MemberExpression\":\n        case \"CallExpression\":\n        case \"NewExpression\":\n        case \"ChainExpression\":\n        case \"YieldExpression\":\n        case \"TaggedTemplateExpression\":\n        case \"MetaProperty\":\n            return true;\n\n        case \"Identifier\":\n            return node.name !== \"undefined\";\n\n        case \"AssignmentExpression\":\n            if ([\"=\", \"&&=\"].includes(node.operator)) {\n                return isPossibleConstructor(node.right);\n            }\n\n            if ([\"||=\", \"??=\"].includes(node.operator)) {\n                return (\n                    isPossibleConstructor(node.left) ||\n                    isPossibleConstructor(node.right)\n                );\n            }\n\n            /**\n             * All other assignment operators are mathematical assignment operators (arithmetic or bitwise).\n             * An assignment expression with a mathematical operator can either evaluate to a primitive value,\n             * or throw, depending on the operands. Thus, it cannot evaluate to a constructor function.\n             */\n            return false;\n\n        case \"LogicalExpression\":\n\n            /*\n             * If the && operator short-circuits, the left side was falsy and therefore not a constructor, and if\n             * it doesn't short-circuit, it takes the value from the right side, so the right side must always be a\n             * possible constructor. A future improvement could verify that the left side could be truthy by\n             * excluding falsy literals.\n             */\n            if (node.operator === \"&&\") {\n                return isPossibleConstructor(node.right);\n            }\n\n            return (\n                isPossibleConstructor(node.left) ||\n                isPossibleConstructor(node.right)\n            );\n\n        case \"ConditionalExpression\":\n            return (\n                isPossibleConstructor(node.alternate) ||\n                isPossibleConstructor(node.consequent)\n            );\n\n        case \"SequenceExpression\": {\n            const lastExpression = node.expressions[node.expressions.length - 1];\n\n            return isPossibleConstructor(lastExpression);\n        }\n\n        default:\n            return false;\n    }\n}\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"problem\",\n\n        docs: {\n            description: \"require `super()` calls in constructors\",\n            recommended: true,\n            url: \"https://eslint.org/docs/rules/constructor-super\"\n        },\n\n        schema: [],\n\n        messages: {\n            missingSome: \"Lacked a call of 'super()' in some code paths.\",\n            missingAll: \"Expected to call 'super()'.\",\n\n            duplicate: \"Unexpected duplicate 'super()'.\",\n            badSuper: \"Unexpected 'super()' because 'super' is not a constructor.\",\n            unexpected: \"Unexpected 'super()'.\"\n        }\n    },\n\n    create(context) {\n\n        /*\n         * {{hasExtends: boolean, scope: Scope, codePath: CodePath}[]}\n         * Information for each constructor.\n         * - upper:      Information of the upper constructor.\n         * - hasExtends: A flag which shows whether own class has a valid `extends`\n         *               part.\n         * - scope:      The scope of own class.\n         * - codePath:   The code path object of the constructor.\n         */\n        let funcInfo = null;\n\n        /*\n         * {Map<string, {calledInSomePaths: boolean, calledInEveryPaths: boolean}>}\n         * Information for each code path segment.\n         * - calledInSomePaths:  A flag of be called `super()` in some code paths.\n         * - calledInEveryPaths: A flag of be called `super()` in all code paths.\n         * - validNodes:\n         */\n        let segInfoMap = Object.create(null);\n\n        /**\n         * Gets the flag which shows `super()` is called in some paths.\n         * @param {CodePathSegment} segment A code path segment to get.\n         * @returns {boolean} The flag which shows `super()` is called in some paths\n         */\n        function isCalledInSomePath(segment) {\n            return segment.reachable && segInfoMap[segment.id].calledInSomePaths;\n        }\n\n        /**\n         * Gets the flag which shows `super()` is called in all paths.\n         * @param {CodePathSegment} segment A code path segment to get.\n         * @returns {boolean} The flag which shows `super()` is called in all paths.\n         */\n        function isCalledInEveryPath(segment) {\n\n            /*\n             * If specific segment is the looped segment of the current segment,\n             * skip the segment.\n             * If not skipped, this never becomes true after a loop.\n             */\n            if (segment.nextSegments.length === 1 &&\n                segment.nextSegments[0].isLoopedPrevSegment(segment)\n            ) {\n                return true;\n            }\n            return segment.reachable && segInfoMap[segment.id].calledInEveryPaths;\n        }\n\n        return {\n\n            /**\n             * Stacks a constructor information.\n             * @param {CodePath} codePath A code path which was started.\n             * @param {ASTNode} node The current node.\n             * @returns {void}\n             */\n            onCodePathStart(codePath, node) {\n                if (isConstructorFunction(node)) {\n\n                    // Class > ClassBody > MethodDefinition > FunctionExpression\n                    const classNode = node.parent.parent.parent;\n                    const superClass = classNode.superClass;\n\n                    funcInfo = {\n                        upper: funcInfo,\n                        isConstructor: true,\n                        hasExtends: Boolean(superClass),\n                        superIsConstructor: isPossibleConstructor(superClass),\n                        codePath\n                    };\n                } else {\n                    funcInfo = {\n                        upper: funcInfo,\n                        isConstructor: false,\n                        hasExtends: false,\n                        superIsConstructor: false,\n                        codePath\n                    };\n                }\n            },\n\n            /**\n             * Pops a constructor information.\n             * And reports if `super()` lacked.\n             * @param {CodePath} codePath A code path which was ended.\n             * @param {ASTNode} node The current node.\n             * @returns {void}\n             */\n            onCodePathEnd(codePath, node) {\n                const hasExtends = funcInfo.hasExtends;\n\n                // Pop.\n                funcInfo = funcInfo.upper;\n\n                if (!hasExtends) {\n                    return;\n                }\n\n                // Reports if `super()` lacked.\n                const segments = codePath.returnedSegments;\n                const calledInEveryPaths = segments.every(isCalledInEveryPath);\n                const calledInSomePaths = segments.some(isCalledInSomePath);\n\n                if (!calledInEveryPaths) {\n                    context.report({\n                        messageId: calledInSomePaths\n                            ? \"missingSome\"\n                            : \"missingAll\",\n                        node: node.parent\n                    });\n                }\n            },\n\n            /**\n             * Initialize information of a given code path segment.\n             * @param {CodePathSegment} segment A code path segment to initialize.\n             * @returns {void}\n             */\n            onCodePathSegmentStart(segment) {\n                if (!(funcInfo && funcInfo.isConstructor && funcInfo.hasExtends)) {\n                    return;\n                }\n\n                // Initialize info.\n                const info = segInfoMap[segment.id] = {\n                    calledInSomePaths: false,\n                    calledInEveryPaths: false,\n                    validNodes: []\n                };\n\n                // When there are previous segments, aggregates these.\n                const prevSegments = segment.prevSegments;\n\n                if (prevSegments.length > 0) {\n                    info.calledInSomePaths = prevSegments.some(isCalledInSomePath);\n                    info.calledInEveryPaths = prevSegments.every(isCalledInEveryPath);\n                }\n            },\n\n            /**\n             * Update information of the code path segment when a code path was\n             * looped.\n             * @param {CodePathSegment} fromSegment The code path segment of the\n             *      end of a loop.\n             * @param {CodePathSegment} toSegment A code path segment of the head\n             *      of a loop.\n             * @returns {void}\n             */\n            onCodePathSegmentLoop(fromSegment, toSegment) {\n                if (!(funcInfo && funcInfo.isConstructor && funcInfo.hasExtends)) {\n                    return;\n                }\n\n                // Update information inside of the loop.\n                const isRealLoop = toSegment.prevSegments.length >= 2;\n\n                funcInfo.codePath.traverseSegments(\n                    { first: toSegment, last: fromSegment },\n                    segment => {\n                        const info = segInfoMap[segment.id];\n                        const prevSegments = segment.prevSegments;\n\n                        // Updates flags.\n                        info.calledInSomePaths = prevSegments.some(isCalledInSomePath);\n                        info.calledInEveryPaths = prevSegments.every(isCalledInEveryPath);\n\n                        // If flags become true anew, reports the valid nodes.\n                        if (info.calledInSomePaths || isRealLoop) {\n                            const nodes = info.validNodes;\n\n                            info.validNodes = [];\n\n                            for (let i = 0; i < nodes.length; ++i) {\n                                const node = nodes[i];\n\n                                context.report({\n                                    messageId: \"duplicate\",\n                                    node\n                                });\n                            }\n                        }\n                    }\n                );\n            },\n\n            /**\n             * Checks for a call of `super()`.\n             * @param {ASTNode} node A CallExpression node to check.\n             * @returns {void}\n             */\n            \"CallExpression:exit\"(node) {\n                if (!(funcInfo && funcInfo.isConstructor)) {\n                    return;\n                }\n\n                // Skips except `super()`.\n                if (node.callee.type !== \"Super\") {\n                    return;\n                }\n\n                // Reports if needed.\n                if (funcInfo.hasExtends) {\n                    const segments = funcInfo.codePath.currentSegments;\n                    let duplicate = false;\n                    let info = null;\n\n                    for (let i = 0; i < segments.length; ++i) {\n                        const segment = segments[i];\n\n                        if (segment.reachable) {\n                            info = segInfoMap[segment.id];\n\n                            duplicate = duplicate || info.calledInSomePaths;\n                            info.calledInSomePaths = info.calledInEveryPaths = true;\n                        }\n                    }\n\n                    if (info) {\n                        if (duplicate) {\n                            context.report({\n                                messageId: \"duplicate\",\n                                node\n                            });\n                        } else if (!funcInfo.superIsConstructor) {\n                            context.report({\n                                messageId: \"badSuper\",\n                                node\n                            });\n                        } else {\n                            info.validNodes.push(node);\n                        }\n                    }\n                } else if (funcInfo.codePath.currentSegments.some(isReachable)) {\n                    context.report({\n                        messageId: \"unexpected\",\n                        node\n                    });\n                }\n            },\n\n            /**\n             * Set the mark to the returned path as `super()` was called.\n             * @param {ASTNode} node A ReturnStatement node to check.\n             * @returns {void}\n             */\n            ReturnStatement(node) {\n                if (!(funcInfo && funcInfo.isConstructor && funcInfo.hasExtends)) {\n                    return;\n                }\n\n                // Skips if no argument.\n                if (!node.argument) {\n                    return;\n                }\n\n                // Returning argument is a substitute of 'super()'.\n                const segments = funcInfo.codePath.currentSegments;\n\n                for (let i = 0; i < segments.length; ++i) {\n                    const segment = segments[i];\n\n                    if (segment.reachable) {\n                        const info = segInfoMap[segment.id];\n\n                        info.calledInSomePaths = info.calledInEveryPaths = true;\n                    }\n                }\n            },\n\n            /**\n             * Resets state.\n             * @returns {void}\n             */\n            \"Program:exit\"() {\n                segInfoMap = Object.create(null);\n            }\n        };\n    }\n};\n/lib/rules/no-unreachable.js M/**\n * @fileoverview Checks for unreachable code due to return, throws, break, and continue.\n * @author Joel Feenstra\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\n/**\n * @typedef {Object} ConstructorInfo\n * @property {ConstructorInfo | null} upper Info about the constructor that encloses this constructor.\n * @property {boolean} hasSuperCall The flag about having `super()` expressions.\n */\n\n/**\n * Checks whether or not a given variable declarator has the initializer.\n * @param {ASTNode} node A VariableDeclarator node to check.\n * @returns {boolean} `true` if the node has the initializer.\n */\nfunction isInitialized(node) {\n    return Boolean(node.init);\n}\n\n/**\n * Checks whether or not a given code path segment is unreachable.\n * @param {CodePathSegment} segment A CodePathSegment to check.\n * @returns {boolean} `true` if the segment is unreachable.\n */\nfunction isUnreachable(segment) {\n    return !segment.reachable;\n}\n\n/**\n * The class to distinguish consecutive unreachable statements.\n */\nclass ConsecutiveRange {\n    constructor(sourceCode) {\n        this.sourceCode = sourceCode;\n        this.startNode = null;\n        this.endNode = null;\n    }\n\n    /**\n     * The location object of this range.\n     * @type {Object}\n     */\n    get location() {\n        return {\n            start: this.startNode.loc.start,\n            end: this.endNode.loc.end\n        };\n    }\n\n    /**\n     * `true` if this range is empty.\n     * @type {boolean}\n     */\n    get isEmpty() {\n        return !(this.startNode && this.endNode);\n    }\n\n    /**\n     * Checks whether the given node is inside of this range.\n     * @param {ASTNode|Token} node The node to check.\n     * @returns {boolean} `true` if the node is inside of this range.\n     */\n    contains(node) {\n        return (\n            node.range[0] >= this.startNode.range[0] &&\n            node.range[1] <= this.endNode.range[1]\n        );\n    }\n\n    /**\n     * Checks whether the given node is consecutive to this range.\n     * @param {ASTNode} node The node to check.\n     * @returns {boolean} `true` if the node is consecutive to this range.\n     */\n    isConsecutive(node) {\n        return this.contains(this.sourceCode.getTokenBefore(node));\n    }\n\n    /**\n     * Merges the given node to this range.\n     * @param {ASTNode} node The node to merge.\n     * @returns {void}\n     */\n    merge(node) {\n        this.endNode = node;\n    }\n\n    /**\n     * Resets this range by the given node or null.\n     * @param {ASTNode|null} node The node to reset, or null.\n     * @returns {void}\n     */\n    reset(node) {\n        this.startNode = this.endNode = node;\n    }\n}\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"problem\",\n\n        docs: {\n            description: \"disallow unreachable code after `return`, `throw`, `continue`, and `break` statements\",\n            recommended: true,\n            url: \"https://eslint.org/docs/rules/no-unreachable\"\n        },\n\n        schema: [],\n\n        messages: {\n            unreachableCode: \"Unreachable code.\"\n        }\n    },\n\n    create(context) {\n        let currentCodePath = null;\n\n        /** @type {ConstructorInfo | null} */\n        let constructorInfo = null;\n\n        /** @type {ConsecutiveRange} */\n        const range = new ConsecutiveRange(context.getSourceCode());\n\n        /**\n         * Reports a given node if it's unreachable.\n         * @param {ASTNode} node A statement node to report.\n         * @returns {void}\n         */\n        function reportIfUnreachable(node) {\n            let nextNode = null;\n\n            if (node && (node.type === \"PropertyDefinition\" || currentCodePath.currentSegments.every(isUnreachable))) {\n\n                // Store this statement to distinguish consecutive statements.\n                if (range.isEmpty) {\n                    range.reset(node);\n                    return;\n                }\n\n                // Skip if this statement is inside of the current range.\n                if (range.contains(node)) {\n                    return;\n                }\n\n                // Merge if this statement is consecutive to the current range.\n                if (range.isConsecutive(node)) {\n                    range.merge(node);\n                    return;\n                }\n\n                nextNode = node;\n            }\n\n            /*\n             * Report the current range since this statement is reachable or is\n             * not consecutive to the current range.\n             */\n            if (!range.isEmpty) {\n                context.report({\n                    messageId: \"unreachableCode\",\n                    loc: range.location,\n                    node: range.startNode\n                });\n            }\n\n            // Update the current range.\n            range.reset(nextNode);\n        }\n\n        return {\n\n            // Manages the current code path.\n            onCodePathStart(codePath) {\n                currentCodePath = codePath;\n            },\n\n            onCodePathEnd() {\n                currentCodePath = currentCodePath.upper;\n            },\n\n            // Registers for all statement nodes (excludes FunctionDeclaration).\n            BlockStatement: reportIfUnreachable,\n            BreakStatement: reportIfUnreachable,\n            ClassDeclaration: reportIfUnreachable,\n            ContinueStatement: reportIfUnreachable,\n            DebuggerStatement: reportIfUnreachable,\n            DoWhileStatement: reportIfUnreachable,\n            ExpressionStatement: reportIfUnreachable,\n            ForInStatement: reportIfUnreachable,\n            ForOfStatement: reportIfUnreachable,\n            ForStatement: reportIfUnreachable,\n            IfStatement: reportIfUnreachable,\n            ImportDeclaration: reportIfUnreachable,\n            LabeledStatement: reportIfUnreachable,\n            ReturnStatement: reportIfUnreachable,\n            SwitchStatement: reportIfUnreachable,\n            ThrowStatement: reportIfUnreachable,\n            TryStatement: reportIfUnreachable,\n\n            VariableDeclaration(node) {\n                if (node.kind !== \"var\" || node.declarations.some(isInitialized)) {\n                    reportIfUnreachable(node);\n                }\n            },\n\n            WhileStatement: reportIfUnreachable,\n            WithStatement: reportIfUnreachable,\n            ExportNamedDeclaration: reportIfUnreachable,\n            ExportDefaultDeclaration: reportIfUnreachable,\n            ExportAllDeclaration: reportIfUnreachable,\n\n            \"Program:exit\"() {\n                reportIfUnreachable();\n            },\n\n            /*\n             * Instance fields defined in a subclass are never created if the constructor of the subclass\n             * doesn't call `super()`, so their definitions are unreachable code.\n             */\n            \"MethodDefinition[kind='constructor']\"() {\n                constructorInfo = {\n                    upper: constructorInfo,\n                    hasSuperCall: false\n                };\n            },\n            \"MethodDefinition[kind='constructor']:exit\"(node) {\n                const { hasSuperCall } = constructorInfo;\n\n                constructorInfo = constructorInfo.upper;\n\n                // skip typescript constructors without the body\n                if (!node.value.body) {\n                    return;\n                }\n\n                const classDefinition = node.parent.parent;\n\n                if (classDefinition.superClass && !hasSuperCall) {\n                    for (const element of classDefinition.body.body) {\n                        if (element.type === \"PropertyDefinition\" && !element.static) {\n                            reportIfUnreachable(element);\n                        }\n                    }\n                }\n            },\n            \"CallExpression > Super.callee\"() {\n                if (constructorInfo) {\n                    constructorInfo.hasSuperCall = true;\n                }\n            }\n        };\n    }\n};\n*/lib/rules/no-unmodified-loop-condition.js./**\n * @fileoverview Rule to disallow use of unmodified expressions in loop conditions\n * @author Toru Nagashima\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst Traverser = require(\"../shared/traverser\"),\n    astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\nconst SENTINEL_PATTERN = /(?:(?:Call|Class|Function|Member|New|Yield)Expression|Statement|Declaration)$/u;\nconst LOOP_PATTERN = /^(?:DoWhile|For|While)Statement$/u; // for-in/of statements don't have `test` property.\nconst GROUP_PATTERN = /^(?:BinaryExpression|ConditionalExpression)$/u;\nconst SKIP_PATTERN = /^(?:ArrowFunction|Class|Function)Expression$/u;\nconst DYNAMIC_PATTERN = /^(?:Call|Member|New|TaggedTemplate|Yield)Expression$/u;\n\n/**\n * @typedef {Object} LoopConditionInfo\n * @property {eslint-scope.Reference} reference - The reference.\n * @property {ASTNode} group - BinaryExpression or ConditionalExpression nodes\n *      that the reference is belonging to.\n * @property {Function} isInLoop - The predicate which checks a given reference\n *      is in this loop.\n * @property {boolean} modified - The flag that the reference is modified in\n *      this loop.\n */\n\n/**\n * Checks whether or not a given reference is a write reference.\n * @param {eslint-scope.Reference} reference A reference to check.\n * @returns {boolean} `true` if the reference is a write reference.\n */\nfunction isWriteReference(reference) {\n    if (reference.init) {\n        const def = reference.resolved && reference.resolved.defs[0];\n\n        if (!def || def.type !== \"Variable\" || def.parent.kind !== \"var\") {\n            return false;\n        }\n    }\n    return reference.isWrite();\n}\n\n/**\n * Checks whether or not a given loop condition info does not have the modified\n * flag.\n * @param {LoopConditionInfo} condition A loop condition info to check.\n * @returns {boolean} `true` if the loop condition info is \"unmodified\".\n */\nfunction isUnmodified(condition) {\n    return !condition.modified;\n}\n\n/**\n * Checks whether or not a given loop condition info does not have the modified\n * flag and does not have the group this condition belongs to.\n * @param {LoopConditionInfo} condition A loop condition info to check.\n * @returns {boolean} `true` if the loop condition info is \"unmodified\".\n */\nfunction isUnmodifiedAndNotBelongToGroup(condition) {\n    return !(condition.modified || condition.group);\n}\n\n/**\n * Checks whether or not a given reference is inside of a given node.\n * @param {ASTNode} node A node to check.\n * @param {eslint-scope.Reference} reference A reference to check.\n * @returns {boolean} `true` if the reference is inside of the node.\n */\nfunction isInRange(node, reference) {\n    const or = node.range;\n    const ir = reference.identifier.range;\n\n    return or[0] <= ir[0] && ir[1] <= or[1];\n}\n\n/**\n * Checks whether or not a given reference is inside of a loop node's condition.\n * @param {ASTNode} node A node to check.\n * @param {eslint-scope.Reference} reference A reference to check.\n * @returns {boolean} `true` if the reference is inside of the loop node's\n *      condition.\n */\nconst isInLoop = {\n    WhileStatement: isInRange,\n    DoWhileStatement: isInRange,\n    ForStatement(node, reference) {\n        return (\n            isInRange(node, reference) &&\n            !(node.init && isInRange(node.init, reference))\n        );\n    }\n};\n\n/**\n * Gets the function which encloses a given reference.\n * This supports only FunctionDeclaration.\n * @param {eslint-scope.Reference} reference A reference to get.\n * @returns {ASTNode|null} The function node or null.\n */\nfunction getEncloseFunctionDeclaration(reference) {\n    let node = reference.identifier;\n\n    while (node) {\n        if (node.type === \"FunctionDeclaration\") {\n            return node.id ? node : null;\n        }\n\n        node = node.parent;\n    }\n\n    return null;\n}\n\n/**\n * Updates the \"modified\" flags of given loop conditions with given modifiers.\n * @param {LoopConditionInfo[]} conditions The loop conditions to be updated.\n * @param {eslint-scope.Reference[]} modifiers The references to update.\n * @returns {void}\n */\nfunction updateModifiedFlag(conditions, modifiers) {\n\n    for (let i = 0; i < conditions.length; ++i) {\n        const condition = conditions[i];\n\n        for (let j = 0; !condition.modified && j < modifiers.length; ++j) {\n            const modifier = modifiers[j];\n            let funcNode, funcVar;\n\n            /*\n             * Besides checking for the condition being in the loop, we want to\n             * check the function that this modifier is belonging to is called\n             * in the loop.\n             * FIXME: This should probably be extracted to a function.\n             */\n            const inLoop = condition.isInLoop(modifier) || Boolean(\n                (funcNode = getEncloseFunctionDeclaration(modifier)) &&\n                (funcVar = astUtils.getVariableByName(modifier.from.upper, funcNode.id.name)) &&\n                funcVar.references.some(condition.isInLoop)\n            );\n\n            condition.modified = inLoop;\n        }\n    }\n}\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"problem\",\n\n        docs: {\n            description: \"disallow unmodified loop conditions\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-unmodified-loop-condition\"\n        },\n\n        schema: [],\n\n        messages: {\n            loopConditionNotModified: \"'{{name}}' is not modified in this loop.\"\n        }\n    },\n\n    create(context) {\n        const sourceCode = context.getSourceCode();\n        let groupMap = null;\n\n        /**\n         * Reports a given condition info.\n         * @param {LoopConditionInfo} condition A loop condition info to report.\n         * @returns {void}\n         */\n        function report(condition) {\n            const node = condition.reference.identifier;\n\n            context.report({\n                node,\n                messageId: \"loopConditionNotModified\",\n                data: node\n            });\n        }\n\n        /**\n         * Registers given conditions to the group the condition belongs to.\n         * @param {LoopConditionInfo[]} conditions A loop condition info to\n         *      register.\n         * @returns {void}\n         */\n        function registerConditionsToGroup(conditions) {\n            for (let i = 0; i < conditions.length; ++i) {\n                const condition = conditions[i];\n\n                if (condition.group) {\n                    let group = groupMap.get(condition.group);\n\n                    if (!group) {\n                        group = [];\n                        groupMap.set(condition.group, group);\n                    }\n                    group.push(condition);\n                }\n            }\n        }\n\n        /**\n         * Reports references which are inside of unmodified groups.\n         * @param {LoopConditionInfo[]} conditions A loop condition info to report.\n         * @returns {void}\n         */\n        function checkConditionsInGroup(conditions) {\n            if (conditions.every(isUnmodified)) {\n                conditions.forEach(report);\n            }\n        }\n\n        /**\n         * Checks whether or not a given group node has any dynamic elements.\n         * @param {ASTNode} root A node to check.\n         *      This node is one of BinaryExpression or ConditionalExpression.\n         * @returns {boolean} `true` if the node is dynamic.\n         */\n        function hasDynamicExpressions(root) {\n            let retv = false;\n\n            Traverser.traverse(root, {\n                visitorKeys: sourceCode.visitorKeys,\n                enter(node) {\n                    if (DYNAMIC_PATTERN.test(node.type)) {\n                        retv = true;\n                        this.break();\n                    } else if (SKIP_PATTERN.test(node.type)) {\n                        this.skip();\n                    }\n                }\n            });\n\n            return retv;\n        }\n\n        /**\n         * Creates the loop condition information from a given reference.\n         * @param {eslint-scope.Reference} reference A reference to create.\n         * @returns {LoopConditionInfo|null} Created loop condition info, or null.\n         */\n        function toLoopCondition(reference) {\n            if (reference.init) {\n                return null;\n            }\n\n            let group = null;\n            let child = reference.identifier;\n            let node = child.parent;\n\n            while (node) {\n                if (SENTINEL_PATTERN.test(node.type)) {\n                    if (LOOP_PATTERN.test(node.type) && node.test === child) {\n\n                        // This reference is inside of a loop condition.\n                        return {\n                            reference,\n                            group,\n                            isInLoop: isInLoop[node.type].bind(null, node),\n                            modified: false\n                        };\n                    }\n\n                    // This reference is outside of a loop condition.\n                    break;\n                }\n\n                /*\n                 * If it's inside of a group, OK if either operand is modified.\n                 * So stores the group this reference belongs to.\n                 */\n                if (GROUP_PATTERN.test(node.type)) {\n\n                    // If this expression is dynamic, no need to check.\n                    if (hasDynamicExpressions(node)) {\n                        break;\n                    } else {\n                        group = node;\n                    }\n                }\n\n                child = node;\n                node = node.parent;\n            }\n\n            return null;\n        }\n\n        /**\n         * Finds unmodified references which are inside of a loop condition.\n         * Then reports the references which are outside of groups.\n         * @param {eslint-scope.Variable} variable A variable to report.\n         * @returns {void}\n         */\n        function checkReferences(variable) {\n\n            // Gets references that exist in loop conditions.\n            const conditions = variable\n                .references\n                .map(toLoopCondition)\n                .filter(Boolean);\n\n            if (conditions.length === 0) {\n                return;\n            }\n\n            // Registers the conditions to belonging groups.\n            registerConditionsToGroup(conditions);\n\n            // Check the conditions are modified.\n            const modifiers = variable.references.filter(isWriteReference);\n\n            if (modifiers.length > 0) {\n                updateModifiedFlag(conditions, modifiers);\n            }\n\n            /*\n             * Reports the conditions which are not belonging to groups.\n             * Others will be reported after all variables are done.\n             */\n            conditions\n                .filter(isUnmodifiedAndNotBelongToGroup)\n                .forEach(report);\n        }\n\n        return {\n            \"Program:exit\"() {\n                const queue = [context.getScope()];\n\n                groupMap = new Map();\n\n                let scope;\n\n                while ((scope = queue.pop())) {\n                    queue.push(...scope.childScopes);\n                    scope.variables.forEach(checkReferences);\n                }\n\n                groupMap.forEach(checkConditionsInGroup);\n                groupMap = null;\n            }\n        };\n    }\n};\n/lib/shared/logging.js\u0002 /**\n * @fileoverview Handle logging for ESLint\n * @author Gyandeep Singh\n */\n\n\"use strict\";\n\n/* eslint no-console: \"off\" -- Logging util */\n\n/* istanbul ignore next */\nmodule.exports = {\n\n    /**\n     * Cover for console.log\n     * @param {...any} args The elements to log.\n     * @returns {void}\n     */\n    info(...args) {\n        console.log(...args);\n    },\n\n    /**\n     * Cover for console.error\n     * @param {...any} args The elements to log.\n     * @returns {void}\n     */\n    error(...args) {\n        console.error(...args);\n    }\n};\n/lib/rules/complexity.js\u0016a/**\n * @fileoverview Counts the cyclomatic complexity of each function of the script. See http://en.wikipedia.org/wiki/Cyclomatic_complexity.\n * Counts the number of if, conditional, for, while, try, switch/case,\n * @author Patrick Brosset\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\nconst { upperCaseFirst } = require(\"../shared/string-utils\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"enforce a maximum cyclomatic complexity allowed in a program\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/complexity\"\n        },\n\n        schema: [\n            {\n                oneOf: [\n                    {\n                        type: \"integer\",\n                        minimum: 0\n                    },\n                    {\n                        type: \"object\",\n                        properties: {\n                            maximum: {\n                                type: \"integer\",\n                                minimum: 0\n                            },\n                            max: {\n                                type: \"integer\",\n                                minimum: 0\n                            }\n                        },\n                        additionalProperties: false\n                    }\n                ]\n            }\n        ],\n\n        messages: {\n            complex: \"{{name}} has a complexity of {{complexity}}. Maximum allowed is {{max}}.\"\n        }\n    },\n\n    create(context) {\n        const option = context.options[0];\n        let THRESHOLD = 20;\n\n        if (\n            typeof option === \"object\" &&\n            (Object.prototype.hasOwnProperty.call(option, \"maximum\") || Object.prototype.hasOwnProperty.call(option, \"max\"))\n        ) {\n            THRESHOLD = option.maximum || option.max;\n        } else if (typeof option === \"number\") {\n            THRESHOLD = option;\n        }\n\n        //--------------------------------------------------------------------------\n        // Helpers\n        //--------------------------------------------------------------------------\n\n        // Using a stack to store complexity per code path\n        const complexities = [];\n\n        /**\n         * Increase the complexity of the code path in context\n         * @returns {void}\n         * @private\n         */\n        function increaseComplexity() {\n            complexities[complexities.length - 1]++;\n        }\n\n        //--------------------------------------------------------------------------\n        // Public API\n        //--------------------------------------------------------------------------\n\n        return {\n\n            onCodePathStart() {\n\n                // The initial complexity is 1, representing one execution path in the CodePath\n                complexities.push(1);\n            },\n\n            // Each branching in the code adds 1 to the complexity\n            CatchClause: increaseComplexity,\n            ConditionalExpression: increaseComplexity,\n            LogicalExpression: increaseComplexity,\n            ForStatement: increaseComplexity,\n            ForInStatement: increaseComplexity,\n            ForOfStatement: increaseComplexity,\n            IfStatement: increaseComplexity,\n            WhileStatement: increaseComplexity,\n            DoWhileStatement: increaseComplexity,\n\n            // Avoid `default`\n            \"SwitchCase[test]\": increaseComplexity,\n\n            // Logical assignment operators have short-circuiting behavior\n            AssignmentExpression(node) {\n                if (astUtils.isLogicalAssignmentOperator(node.operator)) {\n                    increaseComplexity();\n                }\n            },\n\n            onCodePathEnd(codePath, node) {\n                const complexity = complexities.pop();\n\n                /*\n                 * This rule only evaluates complexity of functions, so \"program\" is excluded.\n                 * Class field initializers and class static blocks are implicit functions. Therefore,\n                 * they shouldn't contribute to the enclosing function's complexity, but their\n                 * own complexity should be evaluated.\n                 */\n                if (\n                    codePath.origin !== \"function\" &&\n                    codePath.origin !== \"class-field-initializer\" &&\n                    codePath.origin !== \"class-static-block\"\n                ) {\n                    return;\n                }\n\n                if (complexity > THRESHOLD) {\n                    let name;\n\n                    if (codePath.origin === \"class-field-initializer\") {\n                        name = \"class field initializer\";\n                    } else if (codePath.origin === \"class-static-block\") {\n                        name = \"class static block\";\n                    } else {\n                        name = astUtils.getFunctionNameWithKind(node);\n                    }\n\n                    context.report({\n                        node,\n                        messageId: \"complex\",\n                        data: {\n                            name: upperCaseFirst(name),\n                            complexity,\n                            max: THRESHOLD\n                        }\n                    });\n                }\n            }\n        };\n\n    }\n};\n!/lib/rules/operator-assignment.js!/**\n * @fileoverview Rule to replace assignment expressions with operator assignment\n * @author Brandon Mills\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\n/**\n * Checks whether an operator is commutative and has an operator assignment\n * shorthand form.\n * @param {string} operator Operator to check.\n * @returns {boolean} True if the operator is commutative and has a\n *     shorthand form.\n */\nfunction isCommutativeOperatorWithShorthand(operator) {\n    return [\"*\", \"&\", \"^\", \"|\"].indexOf(operator) >= 0;\n}\n\n/**\n * Checks whether an operator is not commutative and has an operator assignment\n * shorthand form.\n * @param {string} operator Operator to check.\n * @returns {boolean} True if the operator is not commutative and has\n *     a shorthand form.\n */\nfunction isNonCommutativeOperatorWithShorthand(operator) {\n    return [\"+\", \"-\", \"/\", \"%\", \"<<\", \">>\", \">>>\", \"**\"].indexOf(operator) >= 0;\n}\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/**\n * Determines if the left side of a node can be safely fixed (i.e. if it activates the same getters/setters and)\n * toString calls regardless of whether assignment shorthand is used)\n * @param {ASTNode} node The node on the left side of the expression\n * @returns {boolean} `true` if the node can be fixed\n */\nfunction canBeFixed(node) {\n    return (\n        node.type === \"Identifier\" ||\n        (\n            node.type === \"MemberExpression\" &&\n            (node.object.type === \"Identifier\" || node.object.type === \"ThisExpression\") &&\n            (!node.computed || node.property.type === \"Literal\")\n        )\n    );\n}\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"require or disallow assignment operator shorthand where possible\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/operator-assignment\"\n        },\n\n        schema: [\n            {\n                enum: [\"always\", \"never\"]\n            }\n        ],\n\n        fixable: \"code\",\n        messages: {\n            replaced: \"Assignment (=) can be replaced with operator assignment ({{operator}}=).\",\n            unexpected: \"Unexpected operator assignment ({{operator}}=) shorthand.\"\n        }\n    },\n\n    create(context) {\n\n        const sourceCode = context.getSourceCode();\n\n        /**\n         * Returns the operator token of an AssignmentExpression or BinaryExpression\n         * @param {ASTNode} node An AssignmentExpression or BinaryExpression node\n         * @returns {Token} The operator token in the node\n         */\n        function getOperatorToken(node) {\n            return sourceCode.getFirstTokenBetween(node.left, node.right, token => token.value === node.operator);\n        }\n\n        /**\n         * Ensures that an assignment uses the shorthand form where possible.\n         * @param {ASTNode} node An AssignmentExpression node.\n         * @returns {void}\n         */\n        function verify(node) {\n            if (node.operator !== \"=\" || node.right.type !== \"BinaryExpression\") {\n                return;\n            }\n\n            const left = node.left;\n            const expr = node.right;\n            const operator = expr.operator;\n\n            if (isCommutativeOperatorWithShorthand(operator) || isNonCommutativeOperatorWithShorthand(operator)) {\n                if (astUtils.isSameReference(left, expr.left, true)) {\n                    context.report({\n                        node,\n                        messageId: \"replaced\",\n                        data: { operator },\n                        fix(fixer) {\n                            if (canBeFixed(left) && canBeFixed(expr.left)) {\n                                const equalsToken = getOperatorToken(node);\n                                const operatorToken = getOperatorToken(expr);\n                                const leftText = sourceCode.getText().slice(node.range[0], equalsToken.range[0]);\n                                const rightText = sourceCode.getText().slice(operatorToken.range[1], node.right.range[1]);\n\n                                // Check for comments that would be removed.\n                                if (sourceCode.commentsExistBetween(equalsToken, operatorToken)) {\n                                    return null;\n                                }\n\n                                return fixer.replaceText(node, `${leftText}${expr.operator}=${rightText}`);\n                            }\n                            return null;\n                        }\n                    });\n                } else if (astUtils.isSameReference(left, expr.right, true) && isCommutativeOperatorWithShorthand(operator)) {\n\n                    /*\n                     * This case can't be fixed safely.\n                     * If `a` and `b` both have custom valueOf() behavior, then fixing `a = b * a` to `a *= b` would\n                     * change the execution order of the valueOf() functions.\n                     */\n                    context.report({\n                        node,\n                        messageId: \"replaced\",\n                        data: { operator }\n                    });\n                }\n            }\n        }\n\n        /**\n         * Warns if an assignment expression uses operator assignment shorthand.\n         * @param {ASTNode} node An AssignmentExpression node.\n         * @returns {void}\n         */\n        function prohibit(node) {\n            if (node.operator !== \"=\" && !astUtils.isLogicalAssignmentOperator(node.operator)) {\n                context.report({\n                    node,\n                    messageId: \"unexpected\",\n                    data: { operator: node.operator },\n                    fix(fixer) {\n                        if (canBeFixed(node.left)) {\n                            const firstToken = sourceCode.getFirstToken(node);\n                            const operatorToken = getOperatorToken(node);\n                            const leftText = sourceCode.getText().slice(node.range[0], operatorToken.range[0]);\n                            const newOperator = node.operator.slice(0, -1);\n                            let rightText;\n\n                            // Check for comments that would be duplicated.\n                            if (sourceCode.commentsExistBetween(firstToken, operatorToken)) {\n                                return null;\n                            }\n\n                            // If this change would modify precedence (e.g. `foo *= bar + 1` => `foo = foo * (bar + 1)`), parenthesize the right side.\n                            if (\n                                astUtils.getPrecedence(node.right) <= astUtils.getPrecedence({ type: \"BinaryExpression\", operator: newOperator }) &&\n                                !astUtils.isParenthesised(sourceCode, node.right)\n                            ) {\n                                rightText = `${sourceCode.text.slice(operatorToken.range[1], node.right.range[0])}(${sourceCode.getText(node.right)})`;\n                            } else {\n                                const tokenAfterOperator = sourceCode.getTokenAfter(operatorToken, { includeComments: true });\n                                let rightTextPrefix = \"\";\n\n                                if (\n                                    operatorToken.range[1] === tokenAfterOperator.range[0] &&\n                                    !astUtils.canTokensBeAdjacent({ type: \"Punctuator\", value: newOperator }, tokenAfterOperator)\n                                ) {\n                                    rightTextPrefix = \" \"; // foo+=+bar -> foo= foo+ +bar\n                                }\n\n                                rightText = `${rightTextPrefix}${sourceCode.text.slice(operatorToken.range[1], node.range[1])}`;\n                            }\n\n                            return fixer.replaceText(node, `${leftText}= ${leftText}${newOperator}${rightText}`);\n                        }\n                        return null;\n                    }\n                });\n            }\n        }\n\n        return {\n            AssignmentExpression: context.options[0] !== \"never\" ? verify : prohibit\n        };\n\n    }\n};\n/lib/cli-engine/xml-escape.js\u0003/**\n * @fileoverview XML character escaper\n * @author George Chung\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Public Interface\n//------------------------------------------------------------------------------\n\n/**\n * Returns the escaped value for a character\n * @param {string} s string to examine\n * @returns {string} severity level\n * @private\n */\nmodule.exports = function(s) {\n    return (`${s}`).replace(/[<>&\"'\\x00-\\x1F\\x7F\\u0080-\\uFFFF]/gu, c => { // eslint-disable-line no-control-regex -- Converting controls to entities\n        switch (c) {\n            case \"<\":\n                return \"&lt;\";\n            case \">\":\n                return \"&gt;\";\n            case \"&\":\n                return \"&amp;\";\n            case \"\\\"\":\n                return \"&quot;\";\n            case \"'\":\n                return \"&apos;\";\n            default:\n                return `&#${c.charCodeAt(0)};`;\n        }\n    });\n};\n*/lib/cli-engine/formatters/visualstudio.js\u0005/**\n * @fileoverview Visual Studio compatible formatter\n * @author Ronald Pijnacker\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Helper Functions\n//------------------------------------------------------------------------------\n\n/**\n * Returns the severity of warning or error\n * @param {Object} message message object to examine\n * @returns {string} severity level\n * @private\n */\nfunction getMessageType(message) {\n    if (message.fatal || message.severity === 2) {\n        return \"error\";\n    }\n    return \"warning\";\n\n}\n\n\n//------------------------------------------------------------------------------\n// Public Interface\n//------------------------------------------------------------------------------\n\nmodule.exports = function(results) {\n\n    let output = \"\",\n        total = 0;\n\n    results.forEach(result => {\n\n        const messages = result.messages;\n\n        total += messages.length;\n\n        messages.forEach(message => {\n\n            output += result.filePath;\n            output += `(${message.line || 0}`;\n            output += message.column ? `,${message.column}` : \"\";\n            output += `): ${getMessageType(message)}`;\n            output += message.ruleId ? ` ${message.ruleId}` : \"\";\n            output += ` : ${message.message}`;\n            output += \"\\n\";\n\n        });\n\n    });\n\n    if (total === 0) {\n        output += \"no problems\";\n    } else {\n        output += `\\n${total} problem${total !== 1 ? \"s\" : \"\"}`;\n    }\n\n    return output;\n};\n&/lib/rules/newline-per-chained-call.js\u000f/**\n * @fileoverview Rule to ensure newline per method call when chaining calls\n * @author Rajendra Patil\n * @author Burak Yigit Kaya\n */\n\n\"use strict\";\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"layout\",\n\n        docs: {\n            description: \"require a newline after each call in a method chain\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/newline-per-chained-call\"\n        },\n\n        fixable: \"whitespace\",\n\n        schema: [{\n            type: \"object\",\n            properties: {\n                ignoreChainWithDepth: {\n                    type: \"integer\",\n                    minimum: 1,\n                    maximum: 10,\n                    default: 2\n                }\n            },\n            additionalProperties: false\n        }],\n        messages: {\n            expected: \"Expected line break before `{{callee}}`.\"\n        }\n    },\n\n    create(context) {\n\n        const options = context.options[0] || {},\n            ignoreChainWithDepth = options.ignoreChainWithDepth || 2;\n\n        const sourceCode = context.getSourceCode();\n\n        /**\n         * Get the prefix of a given MemberExpression node.\n         * If the MemberExpression node is a computed value it returns a\n         * left bracket. If not it returns a period.\n         * @param {ASTNode} node A MemberExpression node to get\n         * @returns {string} The prefix of the node.\n         */\n        function getPrefix(node) {\n            if (node.computed) {\n                if (node.optional) {\n                    return \"?.[\";\n                }\n                return \"[\";\n            }\n            if (node.optional) {\n                return \"?.\";\n            }\n            return \".\";\n        }\n\n        /**\n         * Gets the property text of a given MemberExpression node.\n         * If the text is multiline, this returns only the first line.\n         * @param {ASTNode} node A MemberExpression node to get.\n         * @returns {string} The property text of the node.\n         */\n        function getPropertyText(node) {\n            const prefix = getPrefix(node);\n            const lines = sourceCode.getText(node.property).split(astUtils.LINEBREAK_MATCHER);\n            const suffix = node.computed && lines.length === 1 ? \"]\" : \"\";\n\n            return prefix + lines[0] + suffix;\n        }\n\n        return {\n            \"CallExpression:exit\"(node) {\n                const callee = astUtils.skipChainExpression(node.callee);\n\n                if (callee.type !== \"MemberExpression\") {\n                    return;\n                }\n\n                let parent = astUtils.skipChainExpression(callee.object);\n                let depth = 1;\n\n                while (parent && parent.callee) {\n                    depth += 1;\n                    parent = astUtils.skipChainExpression(astUtils.skipChainExpression(parent.callee).object);\n                }\n\n                if (depth > ignoreChainWithDepth && astUtils.isTokenOnSameLine(callee.object, callee.property)) {\n                    const firstTokenAfterObject = sourceCode.getTokenAfter(callee.object, astUtils.isNotClosingParenToken);\n\n                    context.report({\n                        node: callee.property,\n                        loc: {\n                            start: firstTokenAfterObject.loc.start,\n                            end: callee.loc.end\n                        },\n                        messageId: \"expected\",\n                        data: {\n                            callee: getPropertyText(callee)\n                        },\n                        fix(fixer) {\n                            return fixer.insertTextBefore(firstTokenAfterObject, \"\\n\");\n                        }\n                    });\n                }\n            }\n        };\n    }\n};\n/lib/rules/newline-after-var.js&A/**\n * @fileoverview Rule to check empty newline after \"var\" statement\n * @author Gopal Venkatesan\n * @deprecated in ESLint v4.0.0\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"layout\",\n\n        docs: {\n            description: \"require or disallow an empty line after variable declarations\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/newline-after-var\"\n        },\n        schema: [\n            {\n                enum: [\"never\", \"always\"]\n            }\n        ],\n        fixable: \"whitespace\",\n        messages: {\n            expected: \"Expected blank line after variable declarations.\",\n            unexpected: \"Unexpected blank line after variable declarations.\"\n        },\n\n        deprecated: true,\n\n        replacedBy: [\"padding-line-between-statements\"]\n    },\n\n    create(context) {\n        const sourceCode = context.getSourceCode();\n\n        // Default `mode` to \"always\".\n        const mode = context.options[0] === \"never\" ? \"never\" : \"always\";\n\n        // Cache starting and ending line numbers of comments for faster lookup\n        const commentEndLine = sourceCode.getAllComments().reduce((result, token) => {\n            result[token.loc.start.line] = token.loc.end.line;\n            return result;\n        }, {});\n\n\n        //--------------------------------------------------------------------------\n        // Helpers\n        //--------------------------------------------------------------------------\n\n        /**\n         * Gets a token from the given node to compare line to the next statement.\n         *\n         * In general, the token is the last token of the node. However, the token is the second last token if the following conditions satisfy.\n         *\n         * - The last token is semicolon.\n         * - The semicolon is on a different line from the previous token of the semicolon.\n         *\n         * This behavior would address semicolon-less style code. e.g.:\n         *\n         *     var foo = 1\n         *\n         *     ;(a || b).doSomething()\n         * @param {ASTNode} node The node to get.\n         * @returns {Token} The token to compare line to the next statement.\n         */\n        function getLastToken(node) {\n            const lastToken = sourceCode.getLastToken(node);\n\n            if (lastToken.type === \"Punctuator\" && lastToken.value === \";\") {\n                const prevToken = sourceCode.getTokenBefore(lastToken);\n\n                if (prevToken.loc.end.line !== lastToken.loc.start.line) {\n                    return prevToken;\n                }\n            }\n\n            return lastToken;\n        }\n\n        /**\n         * Determine if provided keyword is a variable declaration\n         * @private\n         * @param {string} keyword keyword to test\n         * @returns {boolean} True if `keyword` is a type of var\n         */\n        function isVar(keyword) {\n            return keyword === \"var\" || keyword === \"let\" || keyword === \"const\";\n        }\n\n        /**\n         * Determine if provided keyword is a variant of for specifiers\n         * @private\n         * @param {string} keyword keyword to test\n         * @returns {boolean} True if `keyword` is a variant of for specifier\n         */\n        function isForTypeSpecifier(keyword) {\n            return keyword === \"ForStatement\" || keyword === \"ForInStatement\" || keyword === \"ForOfStatement\";\n        }\n\n        /**\n         * Determine if provided keyword is an export specifiers\n         * @private\n         * @param {string} nodeType nodeType to test\n         * @returns {boolean} True if `nodeType` is an export specifier\n         */\n        function isExportSpecifier(nodeType) {\n            return nodeType === \"ExportNamedDeclaration\" || nodeType === \"ExportSpecifier\" ||\n                nodeType === \"ExportDefaultDeclaration\" || nodeType === \"ExportAllDeclaration\";\n        }\n\n        /**\n         * Determine if provided node is the last of their parent block.\n         * @private\n         * @param {ASTNode} node node to test\n         * @returns {boolean} True if `node` is last of their parent block.\n         */\n        function isLastNode(node) {\n            const token = sourceCode.getTokenAfter(node);\n\n            return !token || (token.type === \"Punctuator\" && token.value === \"}\");\n        }\n\n        /**\n         * Gets the last line of a group of consecutive comments\n         * @param {number} commentStartLine The starting line of the group\n         * @returns {number} The number of the last comment line of the group\n         */\n        function getLastCommentLineOfBlock(commentStartLine) {\n            const currentCommentEnd = commentEndLine[commentStartLine];\n\n            return commentEndLine[currentCommentEnd + 1] ? getLastCommentLineOfBlock(currentCommentEnd + 1) : currentCommentEnd;\n        }\n\n        /**\n         * Determine if a token starts more than one line after a comment ends\n         * @param {token} token The token being checked\n         * @param {integer} commentStartLine The line number on which the comment starts\n         * @returns {boolean} True if `token` does not start immediately after a comment\n         */\n        function hasBlankLineAfterComment(token, commentStartLine) {\n            return token.loc.start.line > getLastCommentLineOfBlock(commentStartLine) + 1;\n        }\n\n        /**\n         * Checks that a blank line exists after a variable declaration when mode is\n         * set to \"always\", or checks that there is no blank line when mode is set\n         * to \"never\"\n         * @private\n         * @param {ASTNode} node `VariableDeclaration` node to test\n         * @returns {void}\n         */\n        function checkForBlankLine(node) {\n\n            /*\n             * lastToken is the last token on the node's line. It will usually also be the last token of the node, but it will\n             * sometimes be second-last if there is a semicolon on a different line.\n             */\n            const lastToken = getLastToken(node),\n\n                /*\n                 * If lastToken is the last token of the node, nextToken should be the token after the node. Otherwise, nextToken\n                 * is the last token of the node.\n                 */\n                nextToken = lastToken === sourceCode.getLastToken(node) ? sourceCode.getTokenAfter(node) : sourceCode.getLastToken(node),\n                nextLineNum = lastToken.loc.end.line + 1;\n\n            // Ignore if there is no following statement\n            if (!nextToken) {\n                return;\n            }\n\n            // Ignore if parent of node is a for variant\n            if (isForTypeSpecifier(node.parent.type)) {\n                return;\n            }\n\n            // Ignore if parent of node is an export specifier\n            if (isExportSpecifier(node.parent.type)) {\n                return;\n            }\n\n            /*\n             * Some coding styles use multiple `var` statements, so do nothing if\n             * the next token is a `var` statement.\n             */\n            if (nextToken.type === \"Keyword\" && isVar(nextToken.value)) {\n                return;\n            }\n\n            // Ignore if it is last statement in a block\n            if (isLastNode(node)) {\n                return;\n            }\n\n            // Next statement is not a `var`...\n            const noNextLineToken = nextToken.loc.start.line > nextLineNum;\n            const hasNextLineComment = (typeof commentEndLine[nextLineNum] !== \"undefined\");\n\n            if (mode === \"never\" && noNextLineToken && !hasNextLineComment) {\n                context.report({\n                    node,\n                    messageId: \"unexpected\",\n                    data: { identifier: node.name },\n                    fix(fixer) {\n                        const linesBetween = sourceCode.getText().slice(lastToken.range[1], nextToken.range[0]).split(astUtils.LINEBREAK_MATCHER);\n\n                        return fixer.replaceTextRange([lastToken.range[1], nextToken.range[0]], `${linesBetween.slice(0, -1).join(\"\")}\\n${linesBetween[linesBetween.length - 1]}`);\n                    }\n                });\n            }\n\n            // Token on the next line, or comment without blank line\n            if (\n                mode === \"always\" && (\n                    !noNextLineToken ||\n                    hasNextLineComment && !hasBlankLineAfterComment(nextToken, nextLineNum)\n                )\n            ) {\n                context.report({\n                    node,\n                    messageId: \"expected\",\n                    data: { identifier: node.name },\n                    fix(fixer) {\n                        if ((noNextLineToken ? getLastCommentLineOfBlock(nextLineNum) : lastToken.loc.end.line) === nextToken.loc.start.line) {\n                            return fixer.insertTextBefore(nextToken, \"\\n\\n\");\n                        }\n\n                        return fixer.insertTextBeforeRange([nextToken.range[0] - nextToken.loc.start.column, nextToken.range[1]], \"\\n\");\n                    }\n                });\n            }\n        }\n\n        //--------------------------------------------------------------------------\n        // Public\n        //--------------------------------------------------------------------------\n\n        return {\n            VariableDeclaration: checkForBlankLine\n        };\n\n    }\n};\n$/lib/rules/require-atomic-updates.js*/**\n * @fileoverview disallow assignments that can lead to race conditions due to usage of `await` or `yield`\n * @author Teddy Katz\n * @author Toru Nagashima\n */\n\"use strict\";\n\n/**\n * Make the map from identifiers to each reference.\n * @param {escope.Scope} scope The scope to get references.\n * @param {Map<Identifier, escope.Reference>} [outReferenceMap] The map from identifier nodes to each reference object.\n * @returns {Map<Identifier, escope.Reference>} `referenceMap`.\n */\nfunction createReferenceMap(scope, outReferenceMap = new Map()) {\n    for (const reference of scope.references) {\n        if (reference.resolved === null) {\n            continue;\n        }\n\n        outReferenceMap.set(reference.identifier, reference);\n    }\n    for (const childScope of scope.childScopes) {\n        if (childScope.type !== \"function\") {\n            createReferenceMap(childScope, outReferenceMap);\n        }\n    }\n\n    return outReferenceMap;\n}\n\n/**\n * Get `reference.writeExpr` of a given reference.\n * If it's the read reference of MemberExpression in LHS, returns RHS in order to address `a.b = await a`\n * @param {escope.Reference} reference The reference to get.\n * @returns {Expression|null} The `reference.writeExpr`.\n */\nfunction getWriteExpr(reference) {\n    if (reference.writeExpr) {\n        return reference.writeExpr;\n    }\n    let node = reference.identifier;\n\n    while (node) {\n        const t = node.parent.type;\n\n        if (t === \"AssignmentExpression\" && node.parent.left === node) {\n            return node.parent.right;\n        }\n        if (t === \"MemberExpression\" && node.parent.object === node) {\n            node = node.parent;\n            continue;\n        }\n\n        break;\n    }\n\n    return null;\n}\n\n/**\n * Checks if an expression is a variable that can only be observed within the given function.\n * @param {Variable|null} variable The variable to check\n * @param {boolean} isMemberAccess If `true` then this is a member access.\n * @returns {boolean} `true` if the variable is local to the given function, and is never referenced in a closure.\n */\nfunction isLocalVariableWithoutEscape(variable, isMemberAccess) {\n    if (!variable) {\n        return false; // A global variable which was not defined.\n    }\n\n    // If the reference is a property access and the variable is a parameter, it handles the variable is not local.\n    if (isMemberAccess && variable.defs.some(d => d.type === \"Parameter\")) {\n        return false;\n    }\n\n    const functionScope = variable.scope.variableScope;\n\n    return variable.references.every(reference =>\n        reference.from.variableScope === functionScope);\n}\n\n/**\n * Represents segment information.\n */\nclass SegmentInfo {\n    constructor() {\n        this.info = new WeakMap();\n    }\n\n    /**\n     * Initialize the segment information.\n     * @param {PathSegment} segment The segment to initialize.\n     * @returns {void}\n     */\n    initialize(segment) {\n        const outdatedReadVariables = new Set();\n        const freshReadVariables = new Set();\n\n        for (const prevSegment of segment.prevSegments) {\n            const info = this.info.get(prevSegment);\n\n            if (info) {\n                info.outdatedReadVariables.forEach(Set.prototype.add, outdatedReadVariables);\n                info.freshReadVariables.forEach(Set.prototype.add, freshReadVariables);\n            }\n        }\n\n        this.info.set(segment, { outdatedReadVariables, freshReadVariables });\n    }\n\n    /**\n     * Mark a given variable as read on given segments.\n     * @param {PathSegment[]} segments The segments that it read the variable on.\n     * @param {Variable} variable The variable to be read.\n     * @returns {void}\n     */\n    markAsRead(segments, variable) {\n        for (const segment of segments) {\n            const info = this.info.get(segment);\n\n            if (info) {\n                info.freshReadVariables.add(variable);\n\n                // If a variable is freshly read again, then it's no more out-dated.\n                info.outdatedReadVariables.delete(variable);\n            }\n        }\n    }\n\n    /**\n     * Move `freshReadVariables` to `outdatedReadVariables`.\n     * @param {PathSegment[]} segments The segments to process.\n     * @returns {void}\n     */\n    makeOutdated(segments) {\n        for (const segment of segments) {\n            const info = this.info.get(segment);\n\n            if (info) {\n                info.freshReadVariables.forEach(Set.prototype.add, info.outdatedReadVariables);\n                info.freshReadVariables.clear();\n            }\n        }\n    }\n\n    /**\n     * Check if a given variable is outdated on the current segments.\n     * @param {PathSegment[]} segments The current segments.\n     * @param {Variable} variable The variable to check.\n     * @returns {boolean} `true` if the variable is outdated on the segments.\n     */\n    isOutdated(segments, variable) {\n        for (const segment of segments) {\n            const info = this.info.get(segment);\n\n            if (info && info.outdatedReadVariables.has(variable)) {\n                return true;\n            }\n        }\n        return false;\n    }\n}\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"problem\",\n\n        docs: {\n            description: \"disallow assignments that can lead to race conditions due to usage of `await` or `yield`\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/require-atomic-updates\"\n        },\n\n        fixable: null,\n\n        schema: [{\n            type: \"object\",\n            properties: {\n                allowProperties: {\n                    type: \"boolean\",\n                    default: false\n                }\n            },\n            additionalProperties: false\n        }],\n\n        messages: {\n            nonAtomicUpdate: \"Possible race condition: `{{value}}` might be reassigned based on an outdated value of `{{value}}`.\",\n            nonAtomicObjectUpdate: \"Possible race condition: `{{value}}` might be assigned based on an outdated state of `{{object}}`.\"\n        }\n    },\n\n    create(context) {\n        const allowProperties = !!context.options[0] && context.options[0].allowProperties;\n\n        const sourceCode = context.getSourceCode();\n        const assignmentReferences = new Map();\n        const segmentInfo = new SegmentInfo();\n        let stack = null;\n\n        return {\n            onCodePathStart(codePath) {\n                const scope = context.getScope();\n                const shouldVerify =\n                    scope.type === \"function\" &&\n                    (scope.block.async || scope.block.generator);\n\n                stack = {\n                    upper: stack,\n                    codePath,\n                    referenceMap: shouldVerify ? createReferenceMap(scope) : null\n                };\n            },\n            onCodePathEnd() {\n                stack = stack.upper;\n            },\n\n            // Initialize the segment information.\n            onCodePathSegmentStart(segment) {\n                segmentInfo.initialize(segment);\n            },\n\n            // Handle references to prepare verification.\n            Identifier(node) {\n                const { codePath, referenceMap } = stack;\n                const reference = referenceMap && referenceMap.get(node);\n\n                // Ignore if this is not a valid variable reference.\n                if (!reference) {\n                    return;\n                }\n                const variable = reference.resolved;\n                const writeExpr = getWriteExpr(reference);\n                const isMemberAccess = reference.identifier.parent.type === \"MemberExpression\";\n\n                // Add a fresh read variable.\n                if (reference.isRead() && !(writeExpr && writeExpr.parent.operator === \"=\")) {\n                    segmentInfo.markAsRead(codePath.currentSegments, variable);\n                }\n\n                /*\n                 * Register the variable to verify after ESLint traversed the `writeExpr` node\n                 * if this reference is an assignment to a variable which is referred from other closure.\n                 */\n                if (writeExpr &&\n                    writeExpr.parent.right === writeExpr && // ← exclude variable declarations.\n                    !isLocalVariableWithoutEscape(variable, isMemberAccess)\n                ) {\n                    let refs = assignmentReferences.get(writeExpr);\n\n                    if (!refs) {\n                        refs = [];\n                        assignmentReferences.set(writeExpr, refs);\n                    }\n\n                    refs.push(reference);\n                }\n            },\n\n            /*\n             * Verify assignments.\n             * If the reference exists in `outdatedReadVariables` list, report it.\n             */\n            \":expression:exit\"(node) {\n                const { codePath, referenceMap } = stack;\n\n                // referenceMap exists if this is in a resumable function scope.\n                if (!referenceMap) {\n                    return;\n                }\n\n                // Mark the read variables on this code path as outdated.\n                if (node.type === \"AwaitExpression\" || node.type === \"YieldExpression\") {\n                    segmentInfo.makeOutdated(codePath.currentSegments);\n                }\n\n                // Verify.\n                const references = assignmentReferences.get(node);\n\n                if (references) {\n                    assignmentReferences.delete(node);\n\n                    for (const reference of references) {\n                        const variable = reference.resolved;\n\n                        if (segmentInfo.isOutdated(codePath.currentSegments, variable)) {\n                            if (node.parent.left === reference.identifier) {\n                                context.report({\n                                    node: node.parent,\n                                    messageId: \"nonAtomicUpdate\",\n                                    data: {\n                                        value: variable.name\n                                    }\n                                });\n                            } else if (!allowProperties) {\n                                context.report({\n                                    node: node.parent,\n                                    messageId: \"nonAtomicObjectUpdate\",\n                                    data: {\n                                        value: sourceCode.getText(node.parent.left),\n                                        object: variable.name\n                                    }\n                                });\n                            }\n\n                        }\n                    }\n                }\n            }\n        };\n    }\n};\n/lib/rules/wrap-iife.js\u001e/**\n * @fileoverview Rule to flag when IIFE is not wrapped in parens\n * @author Ilya Volodin\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\nconst eslintUtils = require(\"eslint-utils\");\n\n//----------------------------------------------------------------------\n// Helpers\n//----------------------------------------------------------------------\n\n/**\n * Check if the given node is callee of a `NewExpression` node\n * @param {ASTNode} node node to check\n * @returns {boolean} True if the node is callee of a `NewExpression` node\n * @private\n */\nfunction isCalleeOfNewExpression(node) {\n    const maybeCallee = node.parent.type === \"ChainExpression\"\n        ? node.parent\n        : node;\n\n    return (\n        maybeCallee.parent.type === \"NewExpression\" &&\n        maybeCallee.parent.callee === maybeCallee\n    );\n}\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"layout\",\n\n        docs: {\n            description: \"require parentheses around immediate `function` invocations\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/wrap-iife\"\n        },\n\n        schema: [\n            {\n                enum: [\"outside\", \"inside\", \"any\"]\n            },\n            {\n                type: \"object\",\n                properties: {\n                    functionPrototypeMethods: {\n                        type: \"boolean\",\n                        default: false\n                    }\n                },\n                additionalProperties: false\n            }\n        ],\n\n        fixable: \"code\",\n        messages: {\n            wrapInvocation: \"Wrap an immediate function invocation in parentheses.\",\n            wrapExpression: \"Wrap only the function expression in parens.\",\n            moveInvocation: \"Move the invocation into the parens that contain the function.\"\n        }\n    },\n\n    create(context) {\n\n        const style = context.options[0] || \"outside\";\n        const includeFunctionPrototypeMethods = context.options[1] && context.options[1].functionPrototypeMethods;\n\n        const sourceCode = context.getSourceCode();\n\n        /**\n         * Check if the node is wrapped in any (). All parens count: grouping parens and parens for constructs such as if()\n         * @param {ASTNode} node node to evaluate\n         * @returns {boolean} True if it is wrapped in any parens\n         * @private\n         */\n        function isWrappedInAnyParens(node) {\n            return astUtils.isParenthesised(sourceCode, node);\n        }\n\n        /**\n         * Check if the node is wrapped in grouping (). Parens for constructs such as if() don't count\n         * @param {ASTNode} node node to evaluate\n         * @returns {boolean} True if it is wrapped in grouping parens\n         * @private\n         */\n        function isWrappedInGroupingParens(node) {\n            return eslintUtils.isParenthesized(1, node, sourceCode);\n        }\n\n        /**\n         * Get the function node from an IIFE\n         * @param {ASTNode} node node to evaluate\n         * @returns {ASTNode} node that is the function expression of the given IIFE, or null if none exist\n         */\n        function getFunctionNodeFromIIFE(node) {\n            const callee = astUtils.skipChainExpression(node.callee);\n\n            if (callee.type === \"FunctionExpression\") {\n                return callee;\n            }\n\n            if (includeFunctionPrototypeMethods &&\n                callee.type === \"MemberExpression\" &&\n                callee.object.type === \"FunctionExpression\" &&\n                (astUtils.getStaticPropertyName(callee) === \"call\" || astUtils.getStaticPropertyName(callee) === \"apply\")\n            ) {\n                return callee.object;\n            }\n\n            return null;\n        }\n\n\n        return {\n            CallExpression(node) {\n                const innerNode = getFunctionNodeFromIIFE(node);\n\n                if (!innerNode) {\n                    return;\n                }\n\n                const isCallExpressionWrapped = isWrappedInAnyParens(node),\n                    isFunctionExpressionWrapped = isWrappedInAnyParens(innerNode);\n\n                if (!isCallExpressionWrapped && !isFunctionExpressionWrapped) {\n                    context.report({\n                        node,\n                        messageId: \"wrapInvocation\",\n                        fix(fixer) {\n                            const nodeToSurround = style === \"inside\" ? innerNode : node;\n\n                            return fixer.replaceText(nodeToSurround, `(${sourceCode.getText(nodeToSurround)})`);\n                        }\n                    });\n                } else if (style === \"inside\" && !isFunctionExpressionWrapped) {\n                    context.report({\n                        node,\n                        messageId: \"wrapExpression\",\n                        fix(fixer) {\n\n                            // The outer call expression will always be wrapped at this point.\n\n                            if (isWrappedInGroupingParens(node) && !isCalleeOfNewExpression(node)) {\n\n                                /*\n                                 * Parenthesize the function expression and remove unnecessary grouping parens around the call expression.\n                                 * Replace the range between the end of the function expression and the end of the call expression.\n                                 * for example, in `(function(foo) {}(bar))`, the range `(bar))` should get replaced with `)(bar)`.\n                                 */\n\n                                const parenAfter = sourceCode.getTokenAfter(node);\n\n                                return fixer.replaceTextRange(\n                                    [innerNode.range[1], parenAfter.range[1]],\n                                    `)${sourceCode.getText().slice(innerNode.range[1], parenAfter.range[0])}`\n                                );\n                            }\n\n                            /*\n                             * Call expression is wrapped in mandatory parens such as if(), or in necessary grouping parens.\n                             * These parens cannot be removed, so just parenthesize the function expression.\n                             */\n\n                            return fixer.replaceText(innerNode, `(${sourceCode.getText(innerNode)})`);\n                        }\n                    });\n                } else if (style === \"outside\" && !isCallExpressionWrapped) {\n                    context.report({\n                        node,\n                        messageId: \"moveInvocation\",\n                        fix(fixer) {\n\n                            /*\n                             * The inner function expression will always be wrapped at this point.\n                             * It's only necessary to replace the range between the end of the function expression\n                             * and the call expression. For example, in `(function(foo) {})(bar)`, the range `)(bar)`\n                             * should get replaced with `(bar))`.\n                             */\n                            const parenAfter = sourceCode.getTokenAfter(innerNode);\n\n                            return fixer.replaceTextRange(\n                                [parenAfter.range[0], node.range[1]],\n                                `${sourceCode.getText().slice(parenAfter.range[1], node.range[1])})`\n                            );\n                        }\n                    });\n                }\n            }\n        };\n\n    }\n};\n/lib/rules/unicode-bom.js\b/**\n * @fileoverview Require or disallow Unicode BOM\n * @author Andrew Johnston <https://github.com/ehjay>\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"layout\",\n\n        docs: {\n            description: \"require or disallow Unicode byte order mark (BOM)\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/unicode-bom\"\n        },\n\n        fixable: \"whitespace\",\n\n        schema: [\n            {\n                enum: [\"always\", \"never\"]\n            }\n        ],\n        messages: {\n            expected: \"Expected Unicode BOM (Byte Order Mark).\",\n            unexpected: \"Unexpected Unicode BOM (Byte Order Mark).\"\n        }\n    },\n\n    create(context) {\n\n        //--------------------------------------------------------------------------\n        // Public\n        //--------------------------------------------------------------------------\n\n        return {\n\n            Program: function checkUnicodeBOM(node) {\n\n                const sourceCode = context.getSourceCode(),\n                    location = { column: 0, line: 1 },\n                    requireBOM = context.options[0] || \"never\";\n\n                if (!sourceCode.hasBOM && (requireBOM === \"always\")) {\n                    context.report({\n                        node,\n                        loc: location,\n                        messageId: \"expected\",\n                        fix(fixer) {\n                            return fixer.insertTextBeforeRange([0, 1], \"\\uFEFF\");\n                        }\n                    });\n                } else if (sourceCode.hasBOM && (requireBOM === \"never\")) {\n                    context.report({\n                        node,\n                        loc: location,\n                        messageId: \"unexpected\",\n                        fix(fixer) {\n                            return fixer.removeRange([-1, 0]);\n                        }\n                    });\n                }\n            }\n\n        };\n\n    }\n};\n/lib/cli-engine/load-rules.js\u0005E/**\n * @fileoverview Module for loading rules from files and directories.\n * @author Michael Ficarra\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst fs = require(\"fs\"),\n    path = require(\"path\");\n\nconst rulesDirCache = {};\n\n//------------------------------------------------------------------------------\n// Public Interface\n//------------------------------------------------------------------------------\n\n/**\n * Load all rule modules from specified directory.\n * @param {string} relativeRulesDir Path to rules directory, may be relative.\n * @param {string} cwd Current working directory\n * @returns {Object} Loaded rule modules.\n */\nmodule.exports = function(relativeRulesDir, cwd) {\n    const rulesDir = path.resolve(cwd, relativeRulesDir);\n\n    // cache will help performance as IO operation are expensive\n    if (rulesDirCache[rulesDir]) {\n        return rulesDirCache[rulesDir];\n    }\n\n    const rules = Object.create(null);\n\n    fs.readdirSync(rulesDir).forEach(file => {\n        if (path.extname(file) !== \".js\") {\n            return;\n        }\n        rules[file.slice(0, -3)] = require(path.join(rulesDir, file));\n    });\n    rulesDirCache[rulesDir] = rules;\n\n    return rules;\n};\n#/lib/rules/no-extra-boolean-cast.js./**\n * @fileoverview Rule to flag unnecessary double negation in Boolean contexts\n * @author Brandon Mills\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\nconst eslintUtils = require(\"eslint-utils\");\n\nconst precedence = astUtils.getPrecedence;\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow unnecessary boolean casts\",\n            recommended: true,\n            url: \"https://eslint.org/docs/rules/no-extra-boolean-cast\"\n        },\n\n        schema: [{\n            type: \"object\",\n            properties: {\n                enforceForLogicalOperands: {\n                    type: \"boolean\",\n                    default: false\n                }\n            },\n            additionalProperties: false\n        }],\n        fixable: \"code\",\n\n        messages: {\n            unexpectedCall: \"Redundant Boolean call.\",\n            unexpectedNegation: \"Redundant double negation.\"\n        }\n    },\n\n    create(context) {\n        const sourceCode = context.getSourceCode();\n\n        // Node types which have a test which will coerce values to booleans.\n        const BOOLEAN_NODE_TYPES = [\n            \"IfStatement\",\n            \"DoWhileStatement\",\n            \"WhileStatement\",\n            \"ConditionalExpression\",\n            \"ForStatement\"\n        ];\n\n        /**\n         * Check if a node is a Boolean function or constructor.\n         * @param {ASTNode} node the node\n         * @returns {boolean} If the node is Boolean function or constructor\n         */\n        function isBooleanFunctionOrConstructorCall(node) {\n\n            // Boolean(<bool>) and new Boolean(<bool>)\n            return (node.type === \"CallExpression\" || node.type === \"NewExpression\") &&\n                    node.callee.type === \"Identifier\" &&\n                        node.callee.name === \"Boolean\";\n        }\n\n        /**\n         * Checks whether the node is a logical expression and that the option is enabled\n         * @param {ASTNode} node the node\n         * @returns {boolean} if the node is a logical expression and option is enabled\n         */\n        function isLogicalContext(node) {\n            return node.type === \"LogicalExpression\" &&\n            (node.operator === \"||\" || node.operator === \"&&\") &&\n            (context.options.length && context.options[0].enforceForLogicalOperands === true);\n\n        }\n\n\n        /**\n         * Check if a node is in a context where its value would be coerced to a boolean at runtime.\n         * @param {ASTNode} node The node\n         * @returns {boolean} If it is in a boolean context\n         */\n        function isInBooleanContext(node) {\n            return (\n                (isBooleanFunctionOrConstructorCall(node.parent) &&\n                node === node.parent.arguments[0]) ||\n\n                (BOOLEAN_NODE_TYPES.indexOf(node.parent.type) !== -1 &&\n                    node === node.parent.test) ||\n\n                // !<bool>\n                (node.parent.type === \"UnaryExpression\" &&\n                    node.parent.operator === \"!\")\n            );\n        }\n\n        /**\n         * Checks whether the node is a context that should report an error\n         * Acts recursively if it is in a logical context\n         * @param {ASTNode} node the node\n         * @returns {boolean} If the node is in one of the flagged contexts\n         */\n        function isInFlaggedContext(node) {\n            if (node.parent.type === \"ChainExpression\") {\n                return isInFlaggedContext(node.parent);\n            }\n\n            return isInBooleanContext(node) ||\n            (isLogicalContext(node.parent) &&\n\n            // For nested logical statements\n            isInFlaggedContext(node.parent)\n            );\n        }\n\n\n        /**\n         * Check if a node has comments inside.\n         * @param {ASTNode} node The node to check.\n         * @returns {boolean} `true` if it has comments inside.\n         */\n        function hasCommentsInside(node) {\n            return Boolean(sourceCode.getCommentsInside(node).length);\n        }\n\n        /**\n         * Checks if the given node is wrapped in grouping parentheses. Parentheses for constructs such as if() don't count.\n         * @param {ASTNode} node The node to check.\n         * @returns {boolean} `true` if the node is parenthesized.\n         * @private\n         */\n        function isParenthesized(node) {\n            return eslintUtils.isParenthesized(1, node, sourceCode);\n        }\n\n        /**\n         * Determines whether the given node needs to be parenthesized when replacing the previous node.\n         * It assumes that `previousNode` is the node to be reported by this rule, so it has a limited list\n         * of possible parent node types. By the same assumption, the node's role in a particular parent is already known.\n         * For example, if the parent is `ConditionalExpression`, `previousNode` must be its `test` child.\n         * @param {ASTNode} previousNode Previous node.\n         * @param {ASTNode} node The node to check.\n         * @throws {Error} (Unreachable.)\n         * @returns {boolean} `true` if the node needs to be parenthesized.\n         */\n        function needsParens(previousNode, node) {\n            if (previousNode.parent.type === \"ChainExpression\") {\n                return needsParens(previousNode.parent, node);\n            }\n            if (isParenthesized(previousNode)) {\n\n                // parentheses around the previous node will stay, so there is no need for an additional pair\n                return false;\n            }\n\n            // parent of the previous node will become parent of the replacement node\n            const parent = previousNode.parent;\n\n            switch (parent.type) {\n                case \"CallExpression\":\n                case \"NewExpression\":\n                    return node.type === \"SequenceExpression\";\n                case \"IfStatement\":\n                case \"DoWhileStatement\":\n                case \"WhileStatement\":\n                case \"ForStatement\":\n                    return false;\n                case \"ConditionalExpression\":\n                    return precedence(node) <= precedence(parent);\n                case \"UnaryExpression\":\n                    return precedence(node) < precedence(parent);\n                case \"LogicalExpression\":\n                    if (astUtils.isMixedLogicalAndCoalesceExpressions(node, parent)) {\n                        return true;\n                    }\n                    if (previousNode === parent.left) {\n                        return precedence(node) < precedence(parent);\n                    }\n                    return precedence(node) <= precedence(parent);\n\n                /* istanbul ignore next */\n                default:\n                    throw new Error(`Unexpected parent type: ${parent.type}`);\n            }\n        }\n\n        return {\n            UnaryExpression(node) {\n                const parent = node.parent;\n\n\n                // Exit early if it's guaranteed not to match\n                if (node.operator !== \"!\" ||\n                          parent.type !== \"UnaryExpression\" ||\n                          parent.operator !== \"!\") {\n                    return;\n                }\n\n\n                if (isInFlaggedContext(parent)) {\n                    context.report({\n                        node: parent,\n                        messageId: \"unexpectedNegation\",\n                        fix(fixer) {\n                            if (hasCommentsInside(parent)) {\n                                return null;\n                            }\n\n                            if (needsParens(parent, node.argument)) {\n                                return fixer.replaceText(parent, `(${sourceCode.getText(node.argument)})`);\n                            }\n\n                            let prefix = \"\";\n                            const tokenBefore = sourceCode.getTokenBefore(parent);\n                            const firstReplacementToken = sourceCode.getFirstToken(node.argument);\n\n                            if (\n                                tokenBefore &&\n                                tokenBefore.range[1] === parent.range[0] &&\n                                !astUtils.canTokensBeAdjacent(tokenBefore, firstReplacementToken)\n                            ) {\n                                prefix = \" \";\n                            }\n\n                            return fixer.replaceText(parent, prefix + sourceCode.getText(node.argument));\n                        }\n                    });\n                }\n            },\n\n            CallExpression(node) {\n                if (node.callee.type !== \"Identifier\" || node.callee.name !== \"Boolean\") {\n                    return;\n                }\n\n                if (isInFlaggedContext(node)) {\n                    context.report({\n                        node,\n                        messageId: \"unexpectedCall\",\n                        fix(fixer) {\n                            const parent = node.parent;\n\n                            if (node.arguments.length === 0) {\n                                if (parent.type === \"UnaryExpression\" && parent.operator === \"!\") {\n\n                                    /*\n                                     * !Boolean() -> true\n                                     */\n\n                                    if (hasCommentsInside(parent)) {\n                                        return null;\n                                    }\n\n                                    const replacement = \"true\";\n                                    let prefix = \"\";\n                                    const tokenBefore = sourceCode.getTokenBefore(parent);\n\n                                    if (\n                                        tokenBefore &&\n                                        tokenBefore.range[1] === parent.range[0] &&\n                                        !astUtils.canTokensBeAdjacent(tokenBefore, replacement)\n                                    ) {\n                                        prefix = \" \";\n                                    }\n\n                                    return fixer.replaceText(parent, prefix + replacement);\n                                }\n\n                                /*\n                                 * Boolean() -> false\n                                 */\n\n                                if (hasCommentsInside(node)) {\n                                    return null;\n                                }\n\n                                return fixer.replaceText(node, \"false\");\n                            }\n\n                            if (node.arguments.length === 1) {\n                                const argument = node.arguments[0];\n\n                                if (argument.type === \"SpreadElement\" || hasCommentsInside(node)) {\n                                    return null;\n                                }\n\n                                /*\n                                 * Boolean(expression) -> expression\n                                 */\n\n                                if (needsParens(node, argument)) {\n                                    return fixer.replaceText(node, `(${sourceCode.getText(argument)})`);\n                                }\n\n                                return fixer.replaceText(node, sourceCode.getText(argument));\n                            }\n\n                            // two or more arguments\n                            return null;\n                        }\n                    });\n                }\n            }\n        };\n\n    }\n};\n/lib/rules/no-process-exit.js\u0004/**\n * @fileoverview Disallow the use of process.exit()\n * @author Nicholas C. Zakas\n * @deprecated in ESLint v7.0.0\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        deprecated: true,\n\n        replacedBy: [],\n\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow the use of `process.exit()`\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-process-exit\"\n        },\n\n        schema: [],\n\n        messages: {\n            noProcessExit: \"Don't use process.exit(); throw an error instead.\"\n        }\n    },\n\n    create(context) {\n\n        //--------------------------------------------------------------------------\n        // Public\n        //--------------------------------------------------------------------------\n\n        return {\n            \"CallExpression > MemberExpression.callee[object.name = 'process'][property.name = 'exit']\"(node) {\n                context.report({ node: node.parent, messageId: \"noProcessExit\" });\n            }\n        };\n\n    }\n};\n!/lib/rules/space-before-blocks.js\u001c>/**\n * @fileoverview A rule to ensure whitespace before blocks.\n * @author Mathias Schreck <https://github.com/lo1tuma>\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\n/**\n * Checks whether the given node represents the body of a function.\n * @param {ASTNode} node the node to check.\n * @returns {boolean} `true` if the node is function body.\n */\nfunction isFunctionBody(node) {\n    const parent = node.parent;\n\n    return (\n        node.type === \"BlockStatement\" &&\n        astUtils.isFunction(parent) &&\n        parent.body === node\n    );\n}\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"layout\",\n\n        docs: {\n            description: \"enforce consistent spacing before blocks\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/space-before-blocks\"\n        },\n\n        fixable: \"whitespace\",\n\n        schema: [\n            {\n                oneOf: [\n                    {\n                        enum: [\"always\", \"never\"]\n                    },\n                    {\n                        type: \"object\",\n                        properties: {\n                            keywords: {\n                                enum: [\"always\", \"never\", \"off\"]\n                            },\n                            functions: {\n                                enum: [\"always\", \"never\", \"off\"]\n                            },\n                            classes: {\n                                enum: [\"always\", \"never\", \"off\"]\n                            }\n                        },\n                        additionalProperties: false\n                    }\n                ]\n            }\n        ],\n\n        messages: {\n            unexpectedSpace: \"Unexpected space before opening brace.\",\n            missingSpace: \"Missing space before opening brace.\"\n        }\n    },\n\n    create(context) {\n        const config = context.options[0],\n            sourceCode = context.getSourceCode();\n        let alwaysFunctions = true,\n            alwaysKeywords = true,\n            alwaysClasses = true,\n            neverFunctions = false,\n            neverKeywords = false,\n            neverClasses = false;\n\n        if (typeof config === \"object\") {\n            alwaysFunctions = config.functions === \"always\";\n            alwaysKeywords = config.keywords === \"always\";\n            alwaysClasses = config.classes === \"always\";\n            neverFunctions = config.functions === \"never\";\n            neverKeywords = config.keywords === \"never\";\n            neverClasses = config.classes === \"never\";\n        } else if (config === \"never\") {\n            alwaysFunctions = false;\n            alwaysKeywords = false;\n            alwaysClasses = false;\n            neverFunctions = true;\n            neverKeywords = true;\n            neverClasses = true;\n        }\n\n        /**\n         * Checks whether the spacing before the given block is already controlled by another rule:\n         * - `arrow-spacing` checks spaces after `=>`.\n         * - `keyword-spacing` checks spaces after keywords in certain contexts.\n         * - `switch-colon-spacing` checks spaces after `:` of switch cases.\n         * @param {Token} precedingToken first token before the block.\n         * @param {ASTNode|Token} node `BlockStatement` node or `{` token of a `SwitchStatement` node.\n         * @returns {boolean} `true` if requiring or disallowing spaces before the given block could produce conflicts with other rules.\n         */\n        function isConflicted(precedingToken, node) {\n            return (\n                astUtils.isArrowToken(precedingToken) ||\n                (\n                    astUtils.isKeywordToken(precedingToken) &&\n                    !isFunctionBody(node)\n                ) ||\n                (\n                    astUtils.isColonToken(precedingToken) &&\n                    node.parent &&\n                    node.parent.type === \"SwitchCase\" &&\n                    precedingToken === astUtils.getSwitchCaseColonToken(node.parent, sourceCode)\n                )\n            );\n        }\n\n        /**\n         * Checks the given BlockStatement node has a preceding space if it doesn’t start on a new line.\n         * @param {ASTNode|Token} node The AST node of a BlockStatement.\n         * @returns {void} undefined.\n         */\n        function checkPrecedingSpace(node) {\n            const precedingToken = sourceCode.getTokenBefore(node);\n\n            if (precedingToken && !isConflicted(precedingToken, node) && astUtils.isTokenOnSameLine(precedingToken, node)) {\n                const hasSpace = sourceCode.isSpaceBetweenTokens(precedingToken, node);\n                let requireSpace;\n                let requireNoSpace;\n\n                if (isFunctionBody(node)) {\n                    requireSpace = alwaysFunctions;\n                    requireNoSpace = neverFunctions;\n                } else if (node.type === \"ClassBody\") {\n                    requireSpace = alwaysClasses;\n                    requireNoSpace = neverClasses;\n                } else {\n                    requireSpace = alwaysKeywords;\n                    requireNoSpace = neverKeywords;\n                }\n\n                if (requireSpace && !hasSpace) {\n                    context.report({\n                        node,\n                        messageId: \"missingSpace\",\n                        fix(fixer) {\n                            return fixer.insertTextBefore(node, \" \");\n                        }\n                    });\n                } else if (requireNoSpace && hasSpace) {\n                    context.report({\n                        node,\n                        messageId: \"unexpectedSpace\",\n                        fix(fixer) {\n                            return fixer.removeRange([precedingToken.range[1], node.range[0]]);\n                        }\n                    });\n                }\n            }\n        }\n\n        /**\n         * Checks if the CaseBlock of an given SwitchStatement node has a preceding space.\n         * @param {ASTNode} node The node of a SwitchStatement.\n         * @returns {void} undefined.\n         */\n        function checkSpaceBeforeCaseBlock(node) {\n            const cases = node.cases;\n            let openingBrace;\n\n            if (cases.length > 0) {\n                openingBrace = sourceCode.getTokenBefore(cases[0]);\n            } else {\n                openingBrace = sourceCode.getLastToken(node, 1);\n            }\n\n            checkPrecedingSpace(openingBrace);\n        }\n\n        return {\n            BlockStatement: checkPrecedingSpace,\n            ClassBody: checkPrecedingSpace,\n            SwitchStatement: checkSpaceBeforeCaseBlock\n        };\n\n    }\n};\n*/lib/rules/one-var-declaration-per-line.js\u000b\u0016/**\n * @fileoverview Rule to check multiple var declarations per line\n * @author Alberto Rodríguez\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"require or disallow newlines around variable declarations\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/one-var-declaration-per-line\"\n        },\n\n        schema: [\n            {\n                enum: [\"always\", \"initializations\"]\n            }\n        ],\n\n        fixable: \"whitespace\",\n\n        messages: {\n            expectVarOnNewline: \"Expected variable declaration to be on a new line.\"\n        }\n    },\n\n    create(context) {\n\n        const always = context.options[0] === \"always\";\n\n        //--------------------------------------------------------------------------\n        // Helpers\n        //--------------------------------------------------------------------------\n\n\n        /**\n         * Determine if provided keyword is a variant of for specifiers\n         * @private\n         * @param {string} keyword keyword to test\n         * @returns {boolean} True if `keyword` is a variant of for specifier\n         */\n        function isForTypeSpecifier(keyword) {\n            return keyword === \"ForStatement\" || keyword === \"ForInStatement\" || keyword === \"ForOfStatement\";\n        }\n\n        /**\n         * Checks newlines around variable declarations.\n         * @private\n         * @param {ASTNode} node `VariableDeclaration` node to test\n         * @returns {void}\n         */\n        function checkForNewLine(node) {\n            if (isForTypeSpecifier(node.parent.type)) {\n                return;\n            }\n\n            const declarations = node.declarations;\n            let prev;\n\n            declarations.forEach(current => {\n                if (prev && prev.loc.end.line === current.loc.start.line) {\n                    if (always || prev.init || current.init) {\n                        context.report({\n                            node,\n                            messageId: \"expectVarOnNewline\",\n                            loc: current.loc,\n                            fix: fixer => fixer.insertTextBefore(current, \"\\n\")\n                        });\n                    }\n                }\n                prev = current;\n            });\n        }\n\n        //--------------------------------------------------------------------------\n        // Public\n        //--------------------------------------------------------------------------\n\n        return {\n            VariableDeclaration: checkForNewLine\n        };\n\n    }\n};\n/lib/rules/func-style.js\u000bd/**\n * @fileoverview Rule to enforce a particular function style\n * @author Nicholas C. Zakas\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"enforce the consistent use of either `function` declarations or expressions\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/func-style\"\n        },\n\n        schema: [\n            {\n                enum: [\"declaration\", \"expression\"]\n            },\n            {\n                type: \"object\",\n                properties: {\n                    allowArrowFunctions: {\n                        type: \"boolean\",\n                        default: false\n                    }\n                },\n                additionalProperties: false\n            }\n        ],\n\n        messages: {\n            expression: \"Expected a function expression.\",\n            declaration: \"Expected a function declaration.\"\n        }\n    },\n\n    create(context) {\n\n        const style = context.options[0],\n            allowArrowFunctions = context.options[1] && context.options[1].allowArrowFunctions,\n            enforceDeclarations = (style === \"declaration\"),\n            stack = [];\n\n        const nodesToCheck = {\n            FunctionDeclaration(node) {\n                stack.push(false);\n\n                if (!enforceDeclarations && node.parent.type !== \"ExportDefaultDeclaration\") {\n                    context.report({ node, messageId: \"expression\" });\n                }\n            },\n            \"FunctionDeclaration:exit\"() {\n                stack.pop();\n            },\n\n            FunctionExpression(node) {\n                stack.push(false);\n\n                if (enforceDeclarations && node.parent.type === \"VariableDeclarator\") {\n                    context.report({ node: node.parent, messageId: \"declaration\" });\n                }\n            },\n            \"FunctionExpression:exit\"() {\n                stack.pop();\n            },\n\n            ThisExpression() {\n                if (stack.length > 0) {\n                    stack[stack.length - 1] = true;\n                }\n            }\n        };\n\n        if (!allowArrowFunctions) {\n            nodesToCheck.ArrowFunctionExpression = function() {\n                stack.push(false);\n            };\n\n            nodesToCheck[\"ArrowFunctionExpression:exit\"] = function(node) {\n                const hasThisExpr = stack.pop();\n\n                if (enforceDeclarations && !hasThisExpr && node.parent.type === \"VariableDeclarator\") {\n                    context.report({ node: node.parent, messageId: \"declaration\" });\n                }\n            };\n        }\n\n        return nodesToCheck;\n\n    }\n};\n/lib/linter/rule-fixer.js\u0012\u0018/**\n * @fileoverview An object that creates fix commands for rules.\n * @author Nicholas C. Zakas\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\n// none!\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\n/**\n * Creates a fix command that inserts text at the specified index in the source text.\n * @param {int} index The 0-based index at which to insert the new text.\n * @param {string} text The text to insert.\n * @returns {Object} The fix command.\n * @private\n */\nfunction insertTextAt(index, text) {\n    return {\n        range: [index, index],\n        text\n    };\n}\n\n//------------------------------------------------------------------------------\n// Public Interface\n//------------------------------------------------------------------------------\n\n/**\n * Creates code fixing commands for rules.\n */\n\nconst ruleFixer = Object.freeze({\n\n    /**\n     * Creates a fix command that inserts text after the given node or token.\n     * The fix is not applied until applyFixes() is called.\n     * @param {ASTNode|Token} nodeOrToken The node or token to insert after.\n     * @param {string} text The text to insert.\n     * @returns {Object} The fix command.\n     */\n    insertTextAfter(nodeOrToken, text) {\n        return this.insertTextAfterRange(nodeOrToken.range, text);\n    },\n\n    /**\n     * Creates a fix command that inserts text after the specified range in the source text.\n     * The fix is not applied until applyFixes() is called.\n     * @param {int[]} range The range to replace, first item is start of range, second\n     *      is end of range.\n     * @param {string} text The text to insert.\n     * @returns {Object} The fix command.\n     */\n    insertTextAfterRange(range, text) {\n        return insertTextAt(range[1], text);\n    },\n\n    /**\n     * Creates a fix command that inserts text before the given node or token.\n     * The fix is not applied until applyFixes() is called.\n     * @param {ASTNode|Token} nodeOrToken The node or token to insert before.\n     * @param {string} text The text to insert.\n     * @returns {Object} The fix command.\n     */\n    insertTextBefore(nodeOrToken, text) {\n        return this.insertTextBeforeRange(nodeOrToken.range, text);\n    },\n\n    /**\n     * Creates a fix command that inserts text before the specified range in the source text.\n     * The fix is not applied until applyFixes() is called.\n     * @param {int[]} range The range to replace, first item is start of range, second\n     *      is end of range.\n     * @param {string} text The text to insert.\n     * @returns {Object} The fix command.\n     */\n    insertTextBeforeRange(range, text) {\n        return insertTextAt(range[0], text);\n    },\n\n    /**\n     * Creates a fix command that replaces text at the node or token.\n     * The fix is not applied until applyFixes() is called.\n     * @param {ASTNode|Token} nodeOrToken The node or token to remove.\n     * @param {string} text The text to insert.\n     * @returns {Object} The fix command.\n     */\n    replaceText(nodeOrToken, text) {\n        return this.replaceTextRange(nodeOrToken.range, text);\n    },\n\n    /**\n     * Creates a fix command that replaces text at the specified range in the source text.\n     * The fix is not applied until applyFixes() is called.\n     * @param {int[]} range The range to replace, first item is start of range, second\n     *      is end of range.\n     * @param {string} text The text to insert.\n     * @returns {Object} The fix command.\n     */\n    replaceTextRange(range, text) {\n        return {\n            range,\n            text\n        };\n    },\n\n    /**\n     * Creates a fix command that removes the node or token from the source.\n     * The fix is not applied until applyFixes() is called.\n     * @param {ASTNode|Token} nodeOrToken The node or token to remove.\n     * @returns {Object} The fix command.\n     */\n    remove(nodeOrToken) {\n        return this.removeRange(nodeOrToken.range);\n    },\n\n    /**\n     * Creates a fix command that removes the specified range of text from the source.\n     * The fix is not applied until applyFixes() is called.\n     * @param {int[]} range The range to remove, first item is start of range, second\n     *      is end of range.\n     * @returns {Object} The fix command.\n     */\n    removeRange(range) {\n        return {\n            range,\n            text: \"\"\n        };\n    }\n\n});\n\n\nmodule.exports = ruleFixer;\n/lib/rules/no-extra-bind.js\u001d/**\n * @fileoverview Rule to flag unnecessary bind calls\n * @author Bence Dányi <bence@danyi.me>\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\nconst SIDE_EFFECT_FREE_NODE_TYPES = new Set([\"Literal\", \"Identifier\", \"ThisExpression\", \"FunctionExpression\"]);\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow unnecessary calls to `.bind()`\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-extra-bind\"\n        },\n\n        schema: [],\n        fixable: \"code\",\n\n        messages: {\n            unexpected: \"The function binding is unnecessary.\"\n        }\n    },\n\n    create(context) {\n        const sourceCode = context.getSourceCode();\n        let scopeInfo = null;\n\n        /**\n         * Checks if a node is free of side effects.\n         *\n         * This check is stricter than it needs to be, in order to keep the implementation simple.\n         * @param {ASTNode} node A node to check.\n         * @returns {boolean} True if the node is known to be side-effect free, false otherwise.\n         */\n        function isSideEffectFree(node) {\n            return SIDE_EFFECT_FREE_NODE_TYPES.has(node.type);\n        }\n\n        /**\n         * Reports a given function node.\n         * @param {ASTNode} node A node to report. This is a FunctionExpression or\n         *      an ArrowFunctionExpression.\n         * @returns {void}\n         */\n        function report(node) {\n            const memberNode = node.parent;\n            const callNode = memberNode.parent.type === \"ChainExpression\"\n                ? memberNode.parent.parent\n                : memberNode.parent;\n\n            context.report({\n                node: callNode,\n                messageId: \"unexpected\",\n                loc: memberNode.property.loc,\n\n                fix(fixer) {\n                    if (!isSideEffectFree(callNode.arguments[0])) {\n                        return null;\n                    }\n\n                    /*\n                     * The list of the first/last token pair of a removal range.\n                     * This is two parts because closing parentheses may exist between the method name and arguments.\n                     * E.g. `(function(){}.bind ) (obj)`\n                     *                    ^^^^^   ^^^^^ < removal ranges\n                     * E.g. `(function(){}?.['bind'] ) ?.(obj)`\n                     *                    ^^^^^^^^^^   ^^^^^^^ < removal ranges\n                     */\n                    const tokenPairs = [\n                        [\n\n                            // `.`, `?.`, or `[` token.\n                            sourceCode.getTokenAfter(\n                                memberNode.object,\n                                astUtils.isNotClosingParenToken\n                            ),\n\n                            // property name or `]` token.\n                            sourceCode.getLastToken(memberNode)\n                        ],\n                        [\n\n                            // `?.` or `(` token of arguments.\n                            sourceCode.getTokenAfter(\n                                memberNode,\n                                astUtils.isNotClosingParenToken\n                            ),\n\n                            // `)` token of arguments.\n                            sourceCode.getLastToken(callNode)\n                        ]\n                    ];\n                    const firstTokenToRemove = tokenPairs[0][0];\n                    const lastTokenToRemove = tokenPairs[1][1];\n\n                    if (sourceCode.commentsExistBetween(firstTokenToRemove, lastTokenToRemove)) {\n                        return null;\n                    }\n\n                    return tokenPairs.map(([start, end]) =>\n                        fixer.removeRange([start.range[0], end.range[1]]));\n                }\n            });\n        }\n\n        /**\n         * Checks whether or not a given function node is the callee of `.bind()`\n         * method.\n         *\n         * e.g. `(function() {}.bind(foo))`\n         * @param {ASTNode} node A node to report. This is a FunctionExpression or\n         *      an ArrowFunctionExpression.\n         * @returns {boolean} `true` if the node is the callee of `.bind()` method.\n         */\n        function isCalleeOfBindMethod(node) {\n            if (!astUtils.isSpecificMemberAccess(node.parent, null, \"bind\")) {\n                return false;\n            }\n\n            // The node of `*.bind` member access.\n            const bindNode = node.parent.parent.type === \"ChainExpression\"\n                ? node.parent.parent\n                : node.parent;\n\n            return (\n                bindNode.parent.type === \"CallExpression\" &&\n                bindNode.parent.callee === bindNode &&\n                bindNode.parent.arguments.length === 1 &&\n                bindNode.parent.arguments[0].type !== \"SpreadElement\"\n            );\n        }\n\n        /**\n         * Adds a scope information object to the stack.\n         * @param {ASTNode} node A node to add. This node is a FunctionExpression\n         *      or a FunctionDeclaration node.\n         * @returns {void}\n         */\n        function enterFunction(node) {\n            scopeInfo = {\n                isBound: isCalleeOfBindMethod(node),\n                thisFound: false,\n                upper: scopeInfo\n            };\n        }\n\n        /**\n         * Removes the scope information object from the top of the stack.\n         * At the same time, this reports the function node if the function has\n         * `.bind()` and the `this` keywords found.\n         * @param {ASTNode} node A node to remove. This node is a\n         *      FunctionExpression or a FunctionDeclaration node.\n         * @returns {void}\n         */\n        function exitFunction(node) {\n            if (scopeInfo.isBound && !scopeInfo.thisFound) {\n                report(node);\n            }\n\n            scopeInfo = scopeInfo.upper;\n        }\n\n        /**\n         * Reports a given arrow function if the function is callee of `.bind()`\n         * method.\n         * @param {ASTNode} node A node to report. This node is an\n         *      ArrowFunctionExpression.\n         * @returns {void}\n         */\n        function exitArrowFunction(node) {\n            if (isCalleeOfBindMethod(node)) {\n                report(node);\n            }\n        }\n\n        /**\n         * Set the mark as the `this` keyword was found in this scope.\n         * @returns {void}\n         */\n        function markAsThisFound() {\n            if (scopeInfo) {\n                scopeInfo.thisFound = true;\n            }\n        }\n\n        return {\n            \"ArrowFunctionExpression:exit\": exitArrowFunction,\n            FunctionDeclaration: enterFunction,\n            \"FunctionDeclaration:exit\": exitFunction,\n            FunctionExpression: enterFunction,\n            \"FunctionExpression:exit\": exitFunction,\n            ThisExpression: markAsThisFound\n        };\n    }\n};\n/lib/rules/init-declarations.js\u0011~/**\n * @fileoverview A rule to control the style of variable initializations.\n * @author Colin Ihrig\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\n/**\n * Checks whether or not a given node is a for loop.\n * @param {ASTNode} block A node to check.\n * @returns {boolean} `true` when the node is a for loop.\n */\nfunction isForLoop(block) {\n    return block.type === \"ForInStatement\" ||\n    block.type === \"ForOfStatement\" ||\n    block.type === \"ForStatement\";\n}\n\n/**\n * Checks whether or not a given declarator node has its initializer.\n * @param {ASTNode} node A declarator node to check.\n * @returns {boolean} `true` when the node has its initializer.\n */\nfunction isInitialized(node) {\n    const declaration = node.parent;\n    const block = declaration.parent;\n\n    if (isForLoop(block)) {\n        if (block.type === \"ForStatement\") {\n            return block.init === declaration;\n        }\n        return block.left === declaration;\n    }\n    return Boolean(node.init);\n}\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"require or disallow initialization in variable declarations\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/init-declarations\"\n        },\n\n        schema: {\n            anyOf: [\n                {\n                    type: \"array\",\n                    items: [\n                        {\n                            enum: [\"always\"]\n                        }\n                    ],\n                    minItems: 0,\n                    maxItems: 1\n                },\n                {\n                    type: \"array\",\n                    items: [\n                        {\n                            enum: [\"never\"]\n                        },\n                        {\n                            type: \"object\",\n                            properties: {\n                                ignoreForLoopInit: {\n                                    type: \"boolean\"\n                                }\n                            },\n                            additionalProperties: false\n                        }\n                    ],\n                    minItems: 0,\n                    maxItems: 2\n                }\n            ]\n        },\n        messages: {\n            initialized: \"Variable '{{idName}}' should be initialized on declaration.\",\n            notInitialized: \"Variable '{{idName}}' should not be initialized on declaration.\"\n        }\n    },\n\n    create(context) {\n\n        const MODE_ALWAYS = \"always\",\n            MODE_NEVER = \"never\";\n\n        const mode = context.options[0] || MODE_ALWAYS;\n        const params = context.options[1] || {};\n\n        //--------------------------------------------------------------------------\n        // Public API\n        //--------------------------------------------------------------------------\n\n        return {\n            \"VariableDeclaration:exit\"(node) {\n\n                const kind = node.kind,\n                    declarations = node.declarations;\n\n                for (let i = 0; i < declarations.length; ++i) {\n                    const declaration = declarations[i],\n                        id = declaration.id,\n                        initialized = isInitialized(declaration),\n                        isIgnoredForLoop = params.ignoreForLoopInit && isForLoop(node.parent);\n                    let messageId = \"\";\n\n                    if (mode === MODE_ALWAYS && !initialized) {\n                        messageId = \"initialized\";\n                    } else if (mode === MODE_NEVER && kind !== \"const\" && initialized && !isIgnoredForLoop) {\n                        messageId = \"notInitialized\";\n                    }\n\n                    if (id.type === \"Identifier\" && messageId) {\n                        context.report({\n                            node: declaration,\n                            messageId,\n                            data: {\n                                idName: id.name\n                            }\n                        });\n                    }\n                }\n            }\n        };\n    }\n};\n/lib/config/rule-validator.js\u0013/**\n * @fileoverview Rule Validator\n * @author Nicholas C. Zakas\n */\n\n\"use strict\";\n\n//-----------------------------------------------------------------------------\n// Requirements\n//-----------------------------------------------------------------------------\n\nconst ajv = require(\"../shared/ajv\")();\nconst {\n    parseRuleId,\n    getRuleFromConfig,\n    getRuleOptionsSchema\n} = require(\"./flat-config-helpers\");\nconst ruleReplacements = require(\"../../conf/replacements.json\");\n\n//-----------------------------------------------------------------------------\n// Helpers\n//-----------------------------------------------------------------------------\n\n/**\n * Throws a helpful error when a rule cannot be found.\n * @param {Object} ruleId The rule identifier.\n * @param {string} ruleId.pluginName The ID of the rule to find.\n * @param {string} ruleId.ruleName The ID of the rule to find.\n * @param {Object} config The config to search in.\n * @throws {TypeError} For missing plugin or rule.\n * @returns {void}\n */\nfunction throwRuleNotFoundError({ pluginName, ruleName }, config) {\n\n    const ruleId = pluginName === \"@\" ? ruleName : `${pluginName}/${ruleName}`;\n\n    const errorMessageHeader = `Key \"rules\": Key \"${ruleId}\"`;\n    let errorMessage = `${errorMessageHeader}: Could not find plugin \"${pluginName}\".`;\n\n    // if the plugin exists then we need to check if the rule exists\n    if (config.plugins && config.plugins[pluginName]) {\n        const replacementRuleName = ruleReplacements.rules[ruleName];\n\n        if (pluginName === \"@\" && replacementRuleName) {\n\n            errorMessage = `${errorMessageHeader}: Rule \"${ruleName}\" was removed and replaced by \"${replacementRuleName}\".`;\n\n        } else {\n\n            errorMessage = `${errorMessageHeader}: Could not find \"${ruleName}\" in plugin \"${pluginName}\".`;\n\n            // otherwise, let's see if we can find the rule name elsewhere\n            for (const [otherPluginName, otherPlugin] of Object.entries(config.plugins)) {\n                if (otherPlugin.rules && otherPlugin.rules[ruleName]) {\n                    errorMessage += ` Did you mean \"${otherPluginName}/${ruleName}\"?`;\n                    break;\n                }\n            }\n\n        }\n\n        // falls through to throw error\n    }\n\n    throw new TypeError(errorMessage);\n}\n\n//-----------------------------------------------------------------------------\n// Exports\n//-----------------------------------------------------------------------------\n\n/**\n * Implements validation functionality for the rules portion of a config.\n */\nclass RuleValidator {\n\n    /**\n     * Creates a new instance.\n     */\n    constructor() {\n\n        /**\n         * A collection of compiled validators for rules that have already\n         * been validated.\n         * @type {WeakMap}\n         */\n        this.validators = new WeakMap();\n    }\n\n    /**\n     * Validates all of the rule configurations in a config against each\n     * rule's schema.\n     * @param {Object} config The full config to validate. This object must\n     *      contain both the rules section and the plugins section.\n     * @returns {void}\n     * @throws {Error} If a rule's configuration does not match its schema.\n     */\n    validate(config) {\n\n        if (!config.rules) {\n            return;\n        }\n\n        for (const [ruleId, ruleOptions] of Object.entries(config.rules)) {\n\n            // check for edge case\n            if (ruleId === \"__proto__\") {\n                continue;\n            }\n\n            /*\n             * If a rule is disabled, we don't do any validation. This allows\n             * users to safely set any value to 0 or \"off\" without worrying\n             * that it will cause a validation error.\n             *\n             * Note: ruleOptions is always an array at this point because\n             * this validation occurs after FlatConfigArray has merged and\n             * normalized values.\n             */\n            if (ruleOptions[0] === 0) {\n                continue;\n            }\n\n            const rule = getRuleFromConfig(ruleId, config);\n\n            if (!rule) {\n                throwRuleNotFoundError(parseRuleId(ruleId), config);\n            }\n\n            // Precompile and cache validator the first time\n            if (!this.validators.has(rule)) {\n                const schema = getRuleOptionsSchema(rule);\n\n                if (schema) {\n                    this.validators.set(rule, ajv.compile(schema));\n                }\n            }\n\n            const validateRule = this.validators.get(rule);\n\n            if (validateRule) {\n\n                validateRule(ruleOptions.slice(1));\n\n                if (validateRule.errors) {\n                    throw new Error(`Key \"rules\": Key \"${ruleId}\": ${\n                        validateRule.errors.map(\n                            error => `\\tValue ${JSON.stringify(error.data)} ${error.message}.\\n`\n                        ).join(\"\")\n                    }`);\n                }\n            }\n        }\n    }\n}\n\nexports.RuleValidator = RuleValidator;\n/lib/rules/new-parens.js\ru/**\n * @fileoverview Rule to flag when using constructor without parentheses\n * @author Ilya Volodin\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"layout\",\n\n        docs: {\n            description: \"enforce or disallow parentheses when invoking a constructor with no arguments\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/new-parens\"\n        },\n\n        fixable: \"code\",\n        schema: {\n            anyOf: [\n                {\n                    type: \"array\",\n                    items: [\n                        {\n                            enum: [\"always\", \"never\"]\n                        }\n                    ],\n                    minItems: 0,\n                    maxItems: 1\n                }\n            ]\n        },\n        messages: {\n            missing: \"Missing '()' invoking a constructor.\",\n            unnecessary: \"Unnecessary '()' invoking a constructor with no arguments.\"\n        }\n    },\n\n    create(context) {\n        const options = context.options;\n        const always = options[0] !== \"never\"; // Default is always\n\n        const sourceCode = context.getSourceCode();\n\n        return {\n            NewExpression(node) {\n                if (node.arguments.length !== 0) {\n                    return; // if there are arguments, there have to be parens\n                }\n\n                const lastToken = sourceCode.getLastToken(node);\n                const hasLastParen = lastToken && astUtils.isClosingParenToken(lastToken);\n\n                // `hasParens` is true only if the new expression ends with its own parens, e.g., new new foo() does not end with its own parens\n                const hasParens = hasLastParen &&\n                    astUtils.isOpeningParenToken(sourceCode.getTokenBefore(lastToken)) &&\n                    node.callee.range[1] < node.range[1];\n\n                if (always) {\n                    if (!hasParens) {\n                        context.report({\n                            node,\n                            messageId: \"missing\",\n                            fix: fixer => fixer.insertTextAfter(node, \"()\")\n                        });\n                    }\n                } else {\n                    if (hasParens) {\n                        context.report({\n                            node,\n                            messageId: \"unnecessary\",\n                            fix: fixer => [\n                                fixer.remove(sourceCode.getTokenBefore(lastToken)),\n                                fixer.remove(lastToken),\n                                fixer.insertTextBefore(node, \"(\"),\n                                fixer.insertTextAfter(node, \")\")\n                            ]\n                        });\n                    }\n                }\n            }\n        };\n    }\n};\n/lib/rules/no-return-await.js\u000f>/**\n * @fileoverview Disallows unnecessary `return await`\n * @author Jordan Harband\n */\n\"use strict\";\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow unnecessary `return await`\",\n\n            recommended: false,\n\n            url: \"https://eslint.org/docs/rules/no-return-await\"\n        },\n\n        fixable: null,\n\n        schema: [\n        ],\n\n        messages: {\n            redundantUseOfAwait: \"Redundant use of `await` on a return value.\"\n        }\n    },\n\n    create(context) {\n\n        /**\n         * Reports a found unnecessary `await` expression.\n         * @param {ASTNode} node The node representing the `await` expression to report\n         * @returns {void}\n         */\n        function reportUnnecessaryAwait(node) {\n            context.report({\n                node: context.getSourceCode().getFirstToken(node),\n                loc: node.loc,\n                messageId: \"redundantUseOfAwait\"\n            });\n        }\n\n        /**\n         * Determines whether a thrown error from this node will be caught/handled within this function rather than immediately halting\n         * this function. For example, a statement in a `try` block will always have an error handler. A statement in\n         * a `catch` block will only have an error handler if there is also a `finally` block.\n         * @param {ASTNode} node A node representing a location where an could be thrown\n         * @returns {boolean} `true` if a thrown error will be caught/handled in this function\n         */\n        function hasErrorHandler(node) {\n            let ancestor = node;\n\n            while (!astUtils.isFunction(ancestor) && ancestor.type !== \"Program\") {\n                if (ancestor.parent.type === \"TryStatement\" && (ancestor === ancestor.parent.block || ancestor === ancestor.parent.handler && ancestor.parent.finalizer)) {\n                    return true;\n                }\n                ancestor = ancestor.parent;\n            }\n            return false;\n        }\n\n        /**\n         * Checks if a node is placed in tail call position. Once `return` arguments (or arrow function expressions) can be a complex expression,\n         * an `await` expression could or could not be unnecessary by the definition of this rule. So we're looking for `await` expressions that are in tail position.\n         * @param {ASTNode} node A node representing the `await` expression to check\n         * @returns {boolean} The checking result\n         */\n        function isInTailCallPosition(node) {\n            if (node.parent.type === \"ArrowFunctionExpression\") {\n                return true;\n            }\n            if (node.parent.type === \"ReturnStatement\") {\n                return !hasErrorHandler(node.parent);\n            }\n            if (node.parent.type === \"ConditionalExpression\" && (node === node.parent.consequent || node === node.parent.alternate)) {\n                return isInTailCallPosition(node.parent);\n            }\n            if (node.parent.type === \"LogicalExpression\" && node === node.parent.right) {\n                return isInTailCallPosition(node.parent);\n            }\n            if (node.parent.type === \"SequenceExpression\" && node === node.parent.expressions[node.parent.expressions.length - 1]) {\n                return isInTailCallPosition(node.parent);\n            }\n            return false;\n        }\n\n        return {\n            AwaitExpression(node) {\n                if (isInTailCallPosition(node) && !hasErrorHandler(node)) {\n                    reportUnnecessaryAwait(node);\n                }\n            }\n        };\n    }\n};\n/lib/options.js+/**\n * @fileoverview Options configuration for optionator.\n * @author George Zahariev\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst optionator = require(\"optionator\");\n\n//------------------------------------------------------------------------------\n// Typedefs\n//------------------------------------------------------------------------------\n\n/**\n * The options object parsed by Optionator.\n * @typedef {Object} ParsedCLIOptions\n * @property {boolean} cache Only check changed files\n * @property {string} cacheFile Path to the cache file. Deprecated: use --cache-location\n * @property {string} [cacheLocation] Path to the cache file or directory\n * @property {\"metadata\" | \"content\"} cacheStrategy Strategy to use for detecting changed files in the cache\n * @property {boolean} [color] Force enabling/disabling of color\n * @property {string} [config] Use this configuration, overriding .eslintrc.* config options if present\n * @property {boolean} debug Output debugging information\n * @property {string[]} [env] Specify environments\n * @property {boolean} envInfo Output execution environment information\n * @property {boolean} errorOnUnmatchedPattern Prevent errors when pattern is unmatched\n * @property {boolean} eslintrc Disable use of configuration from .eslintrc.*\n * @property {string[]} [ext] Specify JavaScript file extensions\n * @property {boolean} fix Automatically fix problems\n * @property {boolean} fixDryRun Automatically fix problems without saving the changes to the file system\n * @property {(\"directive\" | \"problem\" | \"suggestion\" | \"layout\")[]} [fixType] Specify the types of fixes to apply (directive, problem, suggestion, layout)\n * @property {string} format Use a specific output format\n * @property {string[]} [global] Define global variables\n * @property {boolean} [help] Show help\n * @property {boolean} ignore Disable use of ignore files and patterns\n * @property {string} [ignorePath] Specify path of ignore file\n * @property {string[]} [ignorePattern] Pattern of files to ignore (in addition to those in .eslintignore)\n * @property {boolean} init Run config initialization wizard\n * @property {boolean} inlineConfig Prevent comments from changing config or rules\n * @property {number} maxWarnings Number of warnings to trigger nonzero exit code\n * @property {string} [outputFile] Specify file to write report to\n * @property {string} [parser] Specify the parser to be used\n * @property {Object} [parserOptions] Specify parser options\n * @property {string[]} [plugin] Specify plugins\n * @property {string} [printConfig] Print the configuration for the given file\n * @property {boolean | undefined} reportUnusedDisableDirectives Adds reported errors for unused eslint-disable directives\n * @property {string} [resolvePluginsRelativeTo] A folder where plugins should be resolved from, CWD by default\n * @property {Object} [rule] Specify rules\n * @property {string[]} [rulesdir] Load additional rules from this directory. Deprecated: Use rules from plugins\n * @property {boolean} stdin Lint code provided on <STDIN>\n * @property {string} [stdinFilename] Specify filename to process STDIN as\n * @property {boolean} quiet Report errors only\n * @property {boolean} [version] Output the version number\n * @property {string[]} _ Positional filenames or patterns\n */\n\n//------------------------------------------------------------------------------\n// Initialization and Public Interface\n//------------------------------------------------------------------------------\n\n// exports \"parse(args)\", \"generateHelp()\", and \"generateHelpForOption(optionName)\"\nmodule.exports = optionator({\n    prepend: \"eslint [options] file.js [file.js] [dir]\",\n    defaults: {\n        concatRepeatedArrays: true,\n        mergeRepeatedObjects: true\n    },\n    options: [\n        {\n            heading: \"Basic configuration\"\n        },\n        {\n            option: \"eslintrc\",\n            type: \"Boolean\",\n            default: \"true\",\n            description: \"Disable use of configuration from .eslintrc.*\"\n        },\n        {\n            option: \"config\",\n            alias: \"c\",\n            type: \"path::String\",\n            description: \"Use this configuration, overriding .eslintrc.* config options if present\"\n        },\n        {\n            option: \"env\",\n            type: \"[String]\",\n            description: \"Specify environments\"\n        },\n        {\n            option: \"ext\",\n            type: \"[String]\",\n            description: \"Specify JavaScript file extensions\"\n        },\n        {\n            option: \"global\",\n            type: \"[String]\",\n            description: \"Define global variables\"\n        },\n        {\n            option: \"parser\",\n            type: \"String\",\n            description: \"Specify the parser to be used\"\n        },\n        {\n            option: \"parser-options\",\n            type: \"Object\",\n            description: \"Specify parser options\"\n        },\n        {\n            option: \"resolve-plugins-relative-to\",\n            type: \"path::String\",\n            description: \"A folder where plugins should be resolved from, CWD by default\"\n        },\n        {\n            heading: \"Specifying rules and plugins\"\n        },\n        {\n            option: \"plugin\",\n            type: \"[String]\",\n            description: \"Specify plugins\"\n        },\n        {\n            option: \"rule\",\n            type: \"Object\",\n            description: \"Specify rules\"\n        },\n        {\n            option: \"rulesdir\",\n            type: \"[path::String]\",\n            description: \"Load additional rules from this directory. Deprecated: Use rules from plugins\"\n        },\n        {\n            heading: \"Fixing problems\"\n        },\n        {\n            option: \"fix\",\n            type: \"Boolean\",\n            default: false,\n            description: \"Automatically fix problems\"\n        },\n        {\n            option: \"fix-dry-run\",\n            type: \"Boolean\",\n            default: false,\n            description: \"Automatically fix problems without saving the changes to the file system\"\n        },\n        {\n            option: \"fix-type\",\n            type: \"Array\",\n            description: \"Specify the types of fixes to apply (directive, problem, suggestion, layout)\"\n        },\n        {\n            heading: \"Ignoring files\"\n        },\n        {\n            option: \"ignore-path\",\n            type: \"path::String\",\n            description: \"Specify path of ignore file\"\n        },\n        {\n            option: \"ignore\",\n            type: \"Boolean\",\n            default: \"true\",\n            description: \"Disable use of ignore files and patterns\"\n        },\n        {\n            option: \"ignore-pattern\",\n            type: \"[String]\",\n            description: \"Pattern of files to ignore (in addition to those in .eslintignore)\",\n            concatRepeatedArrays: [true, {\n                oneValuePerFlag: true\n            }]\n        },\n        {\n            heading: \"Using stdin\"\n        },\n        {\n            option: \"stdin\",\n            type: \"Boolean\",\n            default: \"false\",\n            description: \"Lint code provided on <STDIN>\"\n        },\n        {\n            option: \"stdin-filename\",\n            type: \"String\",\n            description: \"Specify filename to process STDIN as\"\n        },\n        {\n            heading: \"Handling warnings\"\n        },\n        {\n            option: \"quiet\",\n            type: \"Boolean\",\n            default: \"false\",\n            description: \"Report errors only\"\n        },\n        {\n            option: \"max-warnings\",\n            type: \"Int\",\n            default: \"-1\",\n            description: \"Number of warnings to trigger nonzero exit code\"\n        },\n        {\n            heading: \"Output\"\n        },\n        {\n            option: \"output-file\",\n            alias: \"o\",\n            type: \"path::String\",\n            description: \"Specify file to write report to\"\n        },\n        {\n            option: \"format\",\n            alias: \"f\",\n            type: \"String\",\n            default: \"stylish\",\n            description: \"Use a specific output format\"\n        },\n        {\n            option: \"color\",\n            type: \"Boolean\",\n            alias: \"no-color\",\n            description: \"Force enabling/disabling of color\"\n        },\n        {\n            heading: \"Inline configuration comments\"\n        },\n        {\n            option: \"inline-config\",\n            type: \"Boolean\",\n            default: \"true\",\n            description: \"Prevent comments from changing config or rules\"\n        },\n        {\n            option: \"report-unused-disable-directives\",\n            type: \"Boolean\",\n            default: void 0,\n            description: \"Adds reported errors for unused eslint-disable directives\"\n        },\n        {\n            heading: \"Caching\"\n        },\n        {\n            option: \"cache\",\n            type: \"Boolean\",\n            default: \"false\",\n            description: \"Only check changed files\"\n        },\n        {\n            option: \"cache-file\",\n            type: \"path::String\",\n            default: \".eslintcache\",\n            description: \"Path to the cache file. Deprecated: use --cache-location\"\n        },\n        {\n            option: \"cache-location\",\n            type: \"path::String\",\n            description: \"Path to the cache file or directory\"\n        },\n        {\n            option: \"cache-strategy\",\n            dependsOn: [\"cache\"],\n            type: \"String\",\n            default: \"metadata\",\n            enum: [\"metadata\", \"content\"],\n            description: \"Strategy to use for detecting changed files in the cache\"\n        },\n        {\n            heading: \"Miscellaneous\"\n        },\n        {\n            option: \"init\",\n            type: \"Boolean\",\n            default: \"false\",\n            description: \"Run config initialization wizard\"\n        },\n        {\n            option: \"env-info\",\n            type: \"Boolean\",\n            default: \"false\",\n            description: \"Output execution environment information\"\n        },\n        {\n            option: \"error-on-unmatched-pattern\",\n            type: \"Boolean\",\n            default: \"true\",\n            description: \"Prevent errors when pattern is unmatched\"\n        },\n        {\n            option: \"exit-on-fatal-error\",\n            type: \"Boolean\",\n            default: \"false\",\n            description: \"Exit with exit code 2 in case of fatal error\"\n        },\n        {\n            option: \"debug\",\n            type: \"Boolean\",\n            default: false,\n            description: \"Output debugging information\"\n        },\n        {\n            option: \"help\",\n            alias: \"h\",\n            type: \"Boolean\",\n            description: \"Show help\"\n        },\n        {\n            option: \"version\",\n            alias: \"v\",\n            type: \"Boolean\",\n            description: \"Output the version number\"\n        },\n        {\n            option: \"print-config\",\n            type: \"path::String\",\n            description: \"Print the configuration for the given file\"\n        }\n    ]\n});\n#/lib/shared/deprecation-warnings.js\t;/**\n * @fileoverview Provide the function that emits deprecation warnings.\n * @author Toru Nagashima <http://github.com/mysticatea>\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst path = require(\"path\");\n\n//------------------------------------------------------------------------------\n// Private\n//------------------------------------------------------------------------------\n\n// Definitions for deprecation warnings.\nconst deprecationWarningMessages = {\n    ESLINT_LEGACY_ECMAFEATURES:\n        \"The 'ecmaFeatures' config file property is deprecated and has no effect.\",\n    ESLINT_PERSONAL_CONFIG_LOAD:\n        \"'~/.eslintrc.*' config files have been deprecated. \" +\n        \"Please use a config file per project or the '--config' option.\",\n    ESLINT_PERSONAL_CONFIG_SUPPRESS:\n        \"'~/.eslintrc.*' config files have been deprecated. \" +\n        \"Please remove it or add 'root:true' to the config files in your \" +\n        \"projects in order to avoid loading '~/.eslintrc.*' accidentally.\"\n};\n\nconst sourceFileErrorCache = new Set();\n\n/**\n * Emits a deprecation warning containing a given filepath. A new deprecation warning is emitted\n * for each unique file path, but repeated invocations with the same file path have no effect.\n * No warnings are emitted if the `--no-deprecation` or `--no-warnings` Node runtime flags are active.\n * @param {string} source The name of the configuration source to report the warning for.\n * @param {string} errorCode The warning message to show.\n * @returns {void}\n */\nfunction emitDeprecationWarning(source, errorCode) {\n    const cacheKey = JSON.stringify({ source, errorCode });\n\n    if (sourceFileErrorCache.has(cacheKey)) {\n        return;\n    }\n\n    sourceFileErrorCache.add(cacheKey);\n\n    const rel = path.relative(process.cwd(), source);\n    const message = deprecationWarningMessages[errorCode];\n\n    process.emitWarning(\n        `${message} (found in \"${rel}\")`,\n        \"DeprecationWarning\",\n        errorCode\n    );\n}\n\n//------------------------------------------------------------------------------\n// Public Interface\n//------------------------------------------------------------------------------\n\nmodule.exports = {\n    emitDeprecationWarning\n};\n/lib/rules/no-shadow.js 3/**\n * @fileoverview Rule to flag on declaring variables already declared in the outer scope\n * @author Ilya Volodin\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow variable declarations from shadowing variables declared in the outer scope\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-shadow\"\n        },\n\n        schema: [\n            {\n                type: \"object\",\n                properties: {\n                    builtinGlobals: { type: \"boolean\", default: false },\n                    hoist: { enum: [\"all\", \"functions\", \"never\"], default: \"functions\" },\n                    allow: {\n                        type: \"array\",\n                        items: {\n                            type: \"string\"\n                        }\n                    }\n                },\n                additionalProperties: false\n            }\n        ],\n\n        messages: {\n            noShadow: \"'{{name}}' is already declared in the upper scope on line {{shadowedLine}} column {{shadowedColumn}}.\",\n            noShadowGlobal: \"'{{name}}' is already a global variable.\"\n        }\n    },\n\n    create(context) {\n\n        const options = {\n            builtinGlobals: context.options[0] && context.options[0].builtinGlobals,\n            hoist: (context.options[0] && context.options[0].hoist) || \"functions\",\n            allow: (context.options[0] && context.options[0].allow) || []\n        };\n\n        /**\n         * Check if variable name is allowed.\n         * @param {ASTNode} variable The variable to check.\n         * @returns {boolean} Whether or not the variable name is allowed.\n         */\n        function isAllowed(variable) {\n            return options.allow.indexOf(variable.name) !== -1;\n        }\n\n        /**\n         * Checks if a variable of the class name in the class scope of ClassDeclaration.\n         *\n         * ClassDeclaration creates two variables of its name into its outer scope and its class scope.\n         * So we should ignore the variable in the class scope.\n         * @param {Object} variable The variable to check.\n         * @returns {boolean} Whether or not the variable of the class name in the class scope of ClassDeclaration.\n         */\n        function isDuplicatedClassNameVariable(variable) {\n            const block = variable.scope.block;\n\n            return block.type === \"ClassDeclaration\" && block.id === variable.identifiers[0];\n        }\n\n        /**\n         * Checks if a variable is inside the initializer of scopeVar.\n         *\n         * To avoid reporting at declarations such as `var a = function a() {};`.\n         * But it should report `var a = function(a) {};` or `var a = function() { function a() {} };`.\n         * @param {Object} variable The variable to check.\n         * @param {Object} scopeVar The scope variable to look for.\n         * @returns {boolean} Whether or not the variable is inside initializer of scopeVar.\n         */\n        function isOnInitializer(variable, scopeVar) {\n            const outerScope = scopeVar.scope;\n            const outerDef = scopeVar.defs[0];\n            const outer = outerDef && outerDef.parent && outerDef.parent.range;\n            const innerScope = variable.scope;\n            const innerDef = variable.defs[0];\n            const inner = innerDef && innerDef.name.range;\n\n            return (\n                outer &&\n                inner &&\n                outer[0] < inner[0] &&\n                inner[1] < outer[1] &&\n                ((innerDef.type === \"FunctionName\" && innerDef.node.type === \"FunctionExpression\") || innerDef.node.type === \"ClassExpression\") &&\n                outerScope === innerScope.upper\n            );\n        }\n\n        /**\n         * Get a range of a variable's identifier node.\n         * @param {Object} variable The variable to get.\n         * @returns {Array|undefined} The range of the variable's identifier node.\n         */\n        function getNameRange(variable) {\n            const def = variable.defs[0];\n\n            return def && def.name.range;\n        }\n\n        /**\n         * Get declared line and column of a variable.\n         * @param {eslint-scope.Variable} variable The variable to get.\n         * @returns {Object} The declared line and column of the variable.\n         */\n        function getDeclaredLocation(variable) {\n            const identifier = variable.identifiers[0];\n            let obj;\n\n            if (identifier) {\n                obj = {\n                    global: false,\n                    line: identifier.loc.start.line,\n                    column: identifier.loc.start.column + 1\n                };\n            } else {\n                obj = {\n                    global: true\n                };\n            }\n            return obj;\n        }\n\n        /**\n         * Checks if a variable is in TDZ of scopeVar.\n         * @param {Object} variable The variable to check.\n         * @param {Object} scopeVar The variable of TDZ.\n         * @returns {boolean} Whether or not the variable is in TDZ of scopeVar.\n         */\n        function isInTdz(variable, scopeVar) {\n            const outerDef = scopeVar.defs[0];\n            const inner = getNameRange(variable);\n            const outer = getNameRange(scopeVar);\n\n            return (\n                inner &&\n                outer &&\n                inner[1] < outer[0] &&\n\n                // Excepts FunctionDeclaration if is {\"hoist\":\"function\"}.\n                (options.hoist !== \"functions\" || !outerDef || outerDef.node.type !== \"FunctionDeclaration\")\n            );\n        }\n\n        /**\n         * Checks the current context for shadowed variables.\n         * @param {Scope} scope Fixme\n         * @returns {void}\n         */\n        function checkForShadows(scope) {\n            const variables = scope.variables;\n\n            for (let i = 0; i < variables.length; ++i) {\n                const variable = variables[i];\n\n                // Skips \"arguments\" or variables of a class name in the class scope of ClassDeclaration.\n                if (variable.identifiers.length === 0 ||\n                    isDuplicatedClassNameVariable(variable) ||\n                    isAllowed(variable)\n                ) {\n                    continue;\n                }\n\n                // Gets shadowed variable.\n                const shadowed = astUtils.getVariableByName(scope.upper, variable.name);\n\n                if (shadowed &&\n                    (shadowed.identifiers.length > 0 || (options.builtinGlobals && \"writeable\" in shadowed)) &&\n                    !isOnInitializer(variable, shadowed) &&\n                    !(options.hoist !== \"all\" && isInTdz(variable, shadowed))\n                ) {\n                    const location = getDeclaredLocation(shadowed);\n                    const messageId = location.global ? \"noShadowGlobal\" : \"noShadow\";\n                    const data = { name: variable.name };\n\n                    if (!location.global) {\n                        data.shadowedLine = location.line;\n                        data.shadowedColumn = location.column;\n                    }\n                    context.report({\n                        node: variable.identifiers[0],\n                        messageId,\n                        data\n                    });\n                }\n            }\n        }\n\n        return {\n            \"Program:exit\"() {\n                const globalScope = context.getScope();\n                const stack = globalScope.childScopes.slice();\n\n                while (stack.length) {\n                    const scope = stack.pop();\n\n                    stack.push(...scope.childScopes);\n                    checkForShadows(scope);\n                }\n            }\n        };\n\n    }\n};\n/lib/rules/func-call-spacing.js&/**\n * @fileoverview Rule to control spacing within function calls\n * @author Matt DuVall <http://www.mattduvall.com>\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"layout\",\n\n        docs: {\n            description: \"require or disallow spacing between function identifiers and their invocations\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/func-call-spacing\"\n        },\n\n        fixable: \"whitespace\",\n\n        schema: {\n            anyOf: [\n                {\n                    type: \"array\",\n                    items: [\n                        {\n                            enum: [\"never\"]\n                        }\n                    ],\n                    minItems: 0,\n                    maxItems: 1\n                },\n                {\n                    type: \"array\",\n                    items: [\n                        {\n                            enum: [\"always\"]\n                        },\n                        {\n                            type: \"object\",\n                            properties: {\n                                allowNewlines: {\n                                    type: \"boolean\"\n                                }\n                            },\n                            additionalProperties: false\n                        }\n                    ],\n                    minItems: 0,\n                    maxItems: 2\n                }\n            ]\n        },\n\n        messages: {\n            unexpectedWhitespace: \"Unexpected whitespace between function name and paren.\",\n            unexpectedNewline: \"Unexpected newline between function name and paren.\",\n            missing: \"Missing space between function name and paren.\"\n        }\n    },\n\n    create(context) {\n\n        const never = context.options[0] !== \"always\";\n        const allowNewlines = !never && context.options[1] && context.options[1].allowNewlines;\n        const sourceCode = context.getSourceCode();\n        const text = sourceCode.getText();\n\n        /**\n         * Check if open space is present in a function name\n         * @param {ASTNode} node node to evaluate\n         * @param {Token} leftToken The last token of the callee. This may be the closing parenthesis that encloses the callee.\n         * @param {Token} rightToken Tha first token of the arguments. this is the opening parenthesis that encloses the arguments.\n         * @returns {void}\n         * @private\n         */\n        function checkSpacing(node, leftToken, rightToken) {\n            const textBetweenTokens = text.slice(leftToken.range[1], rightToken.range[0]).replace(/\\/\\*.*?\\*\\//gu, \"\");\n            const hasWhitespace = /\\s/u.test(textBetweenTokens);\n            const hasNewline = hasWhitespace && astUtils.LINEBREAK_MATCHER.test(textBetweenTokens);\n\n            /*\n             * never allowNewlines hasWhitespace hasNewline message\n             * F     F             F             F          Missing space between function name and paren.\n             * F     F             F             T          (Invalid `!hasWhitespace && hasNewline`)\n             * F     F             T             T          Unexpected newline between function name and paren.\n             * F     F             T             F          (OK)\n             * F     T             T             F          (OK)\n             * F     T             T             T          (OK)\n             * F     T             F             T          (Invalid `!hasWhitespace && hasNewline`)\n             * F     T             F             F          Missing space between function name and paren.\n             * T     T             F             F          (Invalid `never && allowNewlines`)\n             * T     T             F             T          (Invalid `!hasWhitespace && hasNewline`)\n             * T     T             T             T          (Invalid `never && allowNewlines`)\n             * T     T             T             F          (Invalid `never && allowNewlines`)\n             * T     F             T             F          Unexpected space between function name and paren.\n             * T     F             T             T          Unexpected space between function name and paren.\n             * T     F             F             T          (Invalid `!hasWhitespace && hasNewline`)\n             * T     F             F             F          (OK)\n             *\n             * T                   T                        Unexpected space between function name and paren.\n             * F                   F                        Missing space between function name and paren.\n             * F     F                           T          Unexpected newline between function name and paren.\n             */\n\n            if (never && hasWhitespace) {\n                context.report({\n                    node,\n                    loc: {\n                        start: leftToken.loc.end,\n                        end: {\n                            line: rightToken.loc.start.line,\n                            column: rightToken.loc.start.column - 1\n                        }\n                    },\n                    messageId: \"unexpectedWhitespace\",\n                    fix(fixer) {\n\n                        // Don't remove comments.\n                        if (sourceCode.commentsExistBetween(leftToken, rightToken)) {\n                            return null;\n                        }\n\n                        // If `?.` exists, it doesn't hide no-unexpected-multiline errors\n                        if (node.optional) {\n                            return fixer.replaceTextRange([leftToken.range[1], rightToken.range[0]], \"?.\");\n                        }\n\n                        /*\n                         * Only autofix if there is no newline\n                         * https://github.com/eslint/eslint/issues/7787\n                         */\n                        if (hasNewline) {\n                            return null;\n                        }\n                        return fixer.removeRange([leftToken.range[1], rightToken.range[0]]);\n                    }\n                });\n            } else if (!never && !hasWhitespace) {\n                context.report({\n                    node,\n                    loc: {\n                        start: {\n                            line: leftToken.loc.end.line,\n                            column: leftToken.loc.end.column - 1\n                        },\n                        end: rightToken.loc.start\n                    },\n                    messageId: \"missing\",\n                    fix(fixer) {\n                        if (node.optional) {\n                            return null; // Not sure if inserting a space to either before/after `?.` token.\n                        }\n                        return fixer.insertTextBefore(rightToken, \" \");\n                    }\n                });\n            } else if (!never && !allowNewlines && hasNewline) {\n                context.report({\n                    node,\n                    loc: {\n                        start: leftToken.loc.end,\n                        end: rightToken.loc.start\n                    },\n                    messageId: \"unexpectedNewline\",\n                    fix(fixer) {\n\n                        /*\n                         * Only autofix if there is no newline\n                         * https://github.com/eslint/eslint/issues/7787\n                         * But if `?.` exists, it doesn't hide no-unexpected-multiline errors\n                         */\n                        if (!node.optional) {\n                            return null;\n                        }\n\n                        // Don't remove comments.\n                        if (sourceCode.commentsExistBetween(leftToken, rightToken)) {\n                            return null;\n                        }\n\n                        const range = [leftToken.range[1], rightToken.range[0]];\n                        const qdToken = sourceCode.getTokenAfter(leftToken);\n\n                        if (qdToken.range[0] === leftToken.range[1]) {\n                            return fixer.replaceTextRange(range, \"?. \");\n                        }\n                        if (qdToken.range[1] === rightToken.range[0]) {\n                            return fixer.replaceTextRange(range, \" ?.\");\n                        }\n                        return fixer.replaceTextRange(range, \" ?. \");\n                    }\n                });\n            }\n        }\n\n        return {\n            \"CallExpression, NewExpression\"(node) {\n                const lastToken = sourceCode.getLastToken(node);\n                const lastCalleeToken = sourceCode.getLastToken(node.callee);\n                const parenToken = sourceCode.getFirstTokenBetween(lastCalleeToken, lastToken, astUtils.isOpeningParenToken);\n                const prevToken = parenToken && sourceCode.getTokenBefore(parenToken, astUtils.isNotQuestionDotToken);\n\n                // Parens in NewExpression are optional\n                if (!(parenToken && parenToken.range[1] < node.range[1])) {\n                    return;\n                }\n\n                checkSpacing(node, prevToken, parenToken);\n            },\n\n            ImportExpression(node) {\n                const leftToken = sourceCode.getFirstToken(node);\n                const rightToken = sourceCode.getTokenAfter(leftToken);\n\n                checkSpacing(node, leftToken, rightToken);\n            }\n        };\n\n    }\n};\n/lib/rules/arrow-parens.js\u001e /**\n * @fileoverview Rule to require parens in arrow function arguments.\n * @author Jxck\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\n/**\n * Determines if the given arrow function has block body.\n * @param {ASTNode} node `ArrowFunctionExpression` node.\n * @returns {boolean} `true` if the function has block body.\n */\nfunction hasBlockBody(node) {\n    return node.body.type === \"BlockStatement\";\n}\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"layout\",\n\n        docs: {\n            description: \"require parentheses around arrow function arguments\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/arrow-parens\"\n        },\n\n        fixable: \"code\",\n\n        schema: [\n            {\n                enum: [\"always\", \"as-needed\"]\n            },\n            {\n                type: \"object\",\n                properties: {\n                    requireForBlockBody: {\n                        type: \"boolean\",\n                        default: false\n                    }\n                },\n                additionalProperties: false\n            }\n        ],\n\n        messages: {\n            unexpectedParens: \"Unexpected parentheses around single function argument.\",\n            expectedParens: \"Expected parentheses around arrow function argument.\",\n\n            unexpectedParensInline: \"Unexpected parentheses around single function argument having a body with no curly braces.\",\n            expectedParensBlock: \"Expected parentheses around arrow function argument having a body with curly braces.\"\n        }\n    },\n\n    create(context) {\n        const asNeeded = context.options[0] === \"as-needed\";\n        const requireForBlockBody = asNeeded && context.options[1] && context.options[1].requireForBlockBody === true;\n\n        const sourceCode = context.getSourceCode();\n\n        /**\n         * Finds opening paren of parameters for the given arrow function, if it exists.\n         * It is assumed that the given arrow function has exactly one parameter.\n         * @param {ASTNode} node `ArrowFunctionExpression` node.\n         * @returns {Token|null} the opening paren, or `null` if the given arrow function doesn't have parens of parameters.\n         */\n        function findOpeningParenOfParams(node) {\n            const tokenBeforeParams = sourceCode.getTokenBefore(node.params[0]);\n\n            if (\n                tokenBeforeParams &&\n                astUtils.isOpeningParenToken(tokenBeforeParams) &&\n                node.range[0] <= tokenBeforeParams.range[0]\n            ) {\n                return tokenBeforeParams;\n            }\n\n            return null;\n        }\n\n        /**\n         * Finds closing paren of parameters for the given arrow function.\n         * It is assumed that the given arrow function has parens of parameters and that it has exactly one parameter.\n         * @param {ASTNode} node `ArrowFunctionExpression` node.\n         * @returns {Token} the closing paren of parameters.\n         */\n        function getClosingParenOfParams(node) {\n            return sourceCode.getTokenAfter(node.params[0], astUtils.isClosingParenToken);\n        }\n\n        /**\n         * Determines whether the given arrow function has comments inside parens of parameters.\n         * It is assumed that the given arrow function has parens of parameters.\n         * @param {ASTNode} node `ArrowFunctionExpression` node.\n         * @param {Token} openingParen Opening paren of parameters.\n         * @returns {boolean} `true` if the function has at least one comment inside of parens of parameters.\n         */\n        function hasCommentsInParensOfParams(node, openingParen) {\n            return sourceCode.commentsExistBetween(openingParen, getClosingParenOfParams(node));\n        }\n\n        /**\n         * Determines whether the given arrow function has unexpected tokens before opening paren of parameters,\n         * in which case it will be assumed that the existing parens of parameters are necessary.\n         * Only tokens within the range of the arrow function (tokens that are part of the arrow function) are taken into account.\n         * Example: <T>(a) => b\n         * @param {ASTNode} node `ArrowFunctionExpression` node.\n         * @param {Token} openingParen Opening paren of parameters.\n         * @returns {boolean} `true` if the function has at least one unexpected token.\n         */\n        function hasUnexpectedTokensBeforeOpeningParen(node, openingParen) {\n            const expectedCount = node.async ? 1 : 0;\n\n            return sourceCode.getFirstToken(node, { skip: expectedCount }) !== openingParen;\n        }\n\n        return {\n            \"ArrowFunctionExpression[params.length=1]\"(node) {\n                const shouldHaveParens = !asNeeded || requireForBlockBody && hasBlockBody(node);\n                const openingParen = findOpeningParenOfParams(node);\n                const hasParens = openingParen !== null;\n                const [param] = node.params;\n\n                if (shouldHaveParens && !hasParens) {\n                    context.report({\n                        node,\n                        messageId: requireForBlockBody ? \"expectedParensBlock\" : \"expectedParens\",\n                        loc: param.loc,\n                        *fix(fixer) {\n                            yield fixer.insertTextBefore(param, \"(\");\n                            yield fixer.insertTextAfter(param, \")\");\n                        }\n                    });\n                }\n\n                if (\n                    !shouldHaveParens &&\n                    hasParens &&\n                    param.type === \"Identifier\" &&\n                    !param.typeAnnotation &&\n                    !node.returnType &&\n                    !hasCommentsInParensOfParams(node, openingParen) &&\n                    !hasUnexpectedTokensBeforeOpeningParen(node, openingParen)\n                ) {\n                    context.report({\n                        node,\n                        messageId: requireForBlockBody ? \"unexpectedParensInline\" : \"unexpectedParens\",\n                        loc: param.loc,\n                        *fix(fixer) {\n                            const tokenBeforeOpeningParen = sourceCode.getTokenBefore(openingParen);\n                            const closingParen = getClosingParenOfParams(node);\n\n                            if (\n                                tokenBeforeOpeningParen &&\n                                tokenBeforeOpeningParen.range[1] === openingParen.range[0] &&\n                                !astUtils.canTokensBeAdjacent(tokenBeforeOpeningParen, sourceCode.getFirstToken(param))\n                            ) {\n                                yield fixer.insertTextBefore(openingParen, \" \");\n                            }\n\n                            // remove parens, whitespace inside parens, and possible trailing comma\n                            yield fixer.removeRange([openingParen.range[0], param.range[0]]);\n                            yield fixer.removeRange([param.range[1], closingParen.range[1]]);\n                        }\n                    });\n                }\n            }\n        };\n    }\n};\n/lib/rules/guard-for-in.js\t;/**\n * @fileoverview Rule to flag for-in loops without if statements inside\n * @author Nicholas C. Zakas\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"require `for-in` loops to include an `if` statement\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/guard-for-in\"\n        },\n\n        schema: [],\n        messages: {\n            wrap: \"The body of a for-in should be wrapped in an if statement to filter unwanted properties from the prototype.\"\n        }\n    },\n\n    create(context) {\n\n        return {\n\n            ForInStatement(node) {\n                const body = node.body;\n\n                // empty statement\n                if (body.type === \"EmptyStatement\") {\n                    return;\n                }\n\n                // if statement\n                if (body.type === \"IfStatement\") {\n                    return;\n                }\n\n                // empty block\n                if (body.type === \"BlockStatement\" && body.body.length === 0) {\n                    return;\n                }\n\n                // block with just if statement\n                if (body.type === \"BlockStatement\" && body.body.length === 1 && body.body[0].type === \"IfStatement\") {\n                    return;\n                }\n\n                // block that starts with if statement\n                if (body.type === \"BlockStatement\" && body.body.length >= 1 && body.body[0].type === \"IfStatement\") {\n                    const i = body.body[0];\n\n                    // ... whose consequent is a continue\n                    if (i.consequent.type === \"ContinueStatement\") {\n                        return;\n                    }\n\n                    // ... whose consequent is a block that contains only a continue\n                    if (i.consequent.type === \"BlockStatement\" && i.consequent.body.length === 1 && i.consequent.body[0].type === \"ContinueStatement\") {\n                        return;\n                    }\n                }\n\n                context.report({ node, messageId: \"wrap\" });\n            }\n        };\n\n    }\n};\n=/lib/source-code/token-store/backward-token-comment-cursor.js\u0007/**\n * @fileoverview Define the cursor which iterates tokens and comments in reverse.\n * @author Toru Nagashima\n */\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst Cursor = require(\"./cursor\");\nconst utils = require(\"./utils\");\n\n//------------------------------------------------------------------------------\n// Exports\n//------------------------------------------------------------------------------\n\n/**\n * The cursor which iterates tokens and comments in reverse.\n */\nmodule.exports = class BackwardTokenCommentCursor extends Cursor {\n\n    /**\n     * Initializes this cursor.\n     * @param {Token[]} tokens The array of tokens.\n     * @param {Comment[]} comments The array of comments.\n     * @param {Object} indexMap The map from locations to indices in `tokens`.\n     * @param {number} startLoc The start location of the iteration range.\n     * @param {number} endLoc The end location of the iteration range.\n     */\n    constructor(tokens, comments, indexMap, startLoc, endLoc) {\n        super();\n        this.tokens = tokens;\n        this.comments = comments;\n        this.tokenIndex = utils.getLastIndex(tokens, indexMap, endLoc);\n        this.commentIndex = utils.search(comments, endLoc) - 1;\n        this.border = startLoc;\n    }\n\n    /** @inheritdoc */\n    moveNext() {\n        const token = (this.tokenIndex >= 0) ? this.tokens[this.tokenIndex] : null;\n        const comment = (this.commentIndex >= 0) ? this.comments[this.commentIndex] : null;\n\n        if (token && (!comment || token.range[1] > comment.range[1])) {\n            this.current = token;\n            this.tokenIndex -= 1;\n        } else if (comment) {\n            this.current = comment;\n            this.commentIndex -= 1;\n        } else {\n            this.current = null;\n        }\n\n        return Boolean(this.current) && (this.border === -1 || this.current.range[0] >= this.border);\n    }\n};\n/lib/rules/no-undef-init.js\t_/**\n * @fileoverview Rule to flag when initializing to undefined\n * @author Ilya Volodin\n */\n\n\"use strict\";\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow initializing variables to `undefined`\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-undef-init\"\n        },\n\n        schema: [],\n        fixable: \"code\",\n\n        messages: {\n            unnecessaryUndefinedInit: \"It's not necessary to initialize '{{name}}' to undefined.\"\n        }\n    },\n\n    create(context) {\n\n        const sourceCode = context.getSourceCode();\n\n        return {\n\n            VariableDeclarator(node) {\n                const name = sourceCode.getText(node.id),\n                    init = node.init && node.init.name,\n                    scope = context.getScope(),\n                    undefinedVar = astUtils.getVariableByName(scope, \"undefined\"),\n                    shadowed = undefinedVar && undefinedVar.defs.length > 0,\n                    lastToken = sourceCode.getLastToken(node);\n\n                if (init === \"undefined\" && node.parent.kind !== \"const\" && !shadowed) {\n                    context.report({\n                        node,\n                        messageId: \"unnecessaryUndefinedInit\",\n                        data: { name },\n                        fix(fixer) {\n                            if (node.parent.kind === \"var\") {\n                                return null;\n                            }\n\n                            if (node.id.type === \"ArrayPattern\" || node.id.type === \"ObjectPattern\") {\n\n                                // Don't fix destructuring assignment to `undefined`.\n                                return null;\n                            }\n\n                            if (sourceCode.commentsExistBetween(node.id, lastToken)) {\n                                return null;\n                            }\n\n                            return fixer.removeRange([node.id.range[1], node.range[1]]);\n                        }\n                    });\n                }\n            }\n        };\n\n    }\n};\n!/lib/rules/no-implicit-globals.js\u0014/**\n * @fileoverview Rule to check for implicit global variables, functions and classes.\n * @author Joshua Peek\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"suggestion\",\n\n        docs: {\n            description: \"disallow declarations in the global scope\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/no-implicit-globals\"\n        },\n\n        schema: [{\n            type: \"object\",\n            properties: {\n                lexicalBindings: {\n                    type: \"boolean\",\n                    default: false\n                }\n            },\n            additionalProperties: false\n        }],\n\n        messages: {\n            globalNonLexicalBinding: \"Unexpected {{kind}} declaration in the global scope, wrap in an IIFE for a local variable, assign as global property for a global variable.\",\n            globalLexicalBinding: \"Unexpected {{kind}} declaration in the global scope, wrap in a block or in an IIFE.\",\n            globalVariableLeak: \"Global variable leak, declare the variable if it is intended to be local.\",\n            assignmentToReadonlyGlobal: \"Unexpected assignment to read-only global variable.\",\n            redeclarationOfReadonlyGlobal: \"Unexpected redeclaration of read-only global variable.\"\n        }\n    },\n\n    create(context) {\n\n        const checkLexicalBindings = context.options[0] && context.options[0].lexicalBindings === true;\n\n        /**\n         * Reports the node.\n         * @param {ASTNode} node Node to report.\n         * @param {string} messageId Id of the message to report.\n         * @param {string|undefined} kind Declaration kind, can be 'var', 'const', 'let', function or class.\n         * @returns {void}\n         */\n        function report(node, messageId, kind) {\n            context.report({\n                node,\n                messageId,\n                data: {\n                    kind\n                }\n            });\n        }\n\n        return {\n            Program() {\n                const scope = context.getScope();\n\n                scope.variables.forEach(variable => {\n\n                    // Only ESLint global variables have the `writable` key.\n                    const isReadonlyEslintGlobalVariable = variable.writeable === false;\n                    const isWritableEslintGlobalVariable = variable.writeable === true;\n\n                    if (isWritableEslintGlobalVariable) {\n\n                        // Everything is allowed with writable ESLint global variables.\n                        return;\n                    }\n\n                    variable.defs.forEach(def => {\n                        const defNode = def.node;\n\n                        if (def.type === \"FunctionName\" || (def.type === \"Variable\" && def.parent.kind === \"var\")) {\n                            if (isReadonlyEslintGlobalVariable) {\n                                report(defNode, \"redeclarationOfReadonlyGlobal\");\n                            } else {\n                                report(\n                                    defNode,\n                                    \"globalNonLexicalBinding\",\n                                    def.type === \"FunctionName\" ? \"function\" : `'${def.parent.kind}'`\n                                );\n                            }\n                        }\n\n                        if (checkLexicalBindings) {\n                            if (def.type === \"ClassName\" ||\n                                    (def.type === \"Variable\" && (def.parent.kind === \"let\" || def.parent.kind === \"const\"))) {\n                                if (isReadonlyEslintGlobalVariable) {\n                                    report(defNode, \"redeclarationOfReadonlyGlobal\");\n                                } else {\n                                    report(\n                                        defNode,\n                                        \"globalLexicalBinding\",\n                                        def.type === \"ClassName\" ? \"class\" : `'${def.parent.kind}'`\n                                    );\n                                }\n                            }\n                        }\n                    });\n                });\n\n                // Undeclared assigned variables.\n                scope.implicit.variables.forEach(variable => {\n                    const scopeVariable = scope.set.get(variable.name);\n                    let messageId;\n\n                    if (scopeVariable) {\n\n                        // ESLint global variable\n                        if (scopeVariable.writeable) {\n                            return;\n                        }\n                        messageId = \"assignmentToReadonlyGlobal\";\n\n                    } else {\n\n                        // Reference to an unknown variable, possible global leak.\n                        messageId = \"globalVariableLeak\";\n                    }\n\n                    // def.node is an AssignmentExpression, ForInStatement or ForOfStatement.\n                    variable.defs.forEach(def => {\n                        report(def.node, messageId);\n                    });\n                });\n            }\n        };\n\n    }\n};\n/lib/rules/index.jsE/**\n * @fileoverview Collects the built-in rules into a map structure so that they can be imported all at once and without\n * using the file-system directly.\n * @author Peter (Somogyvari) Metz\n */\n\n\"use strict\";\n\n/* eslint sort-keys: [\"error\", \"asc\"] -- More readable for long list */\n\nconst { LazyLoadingRuleMap } = require(\"./utils/lazy-loading-rule-map\");\n\n/** @type {Map<string, import(\"../shared/types\").Rule>} */\nmodule.exports = new LazyLoadingRuleMap(Object.entries({\n    \"accessor-pairs\": () => require(\"./accessor-pairs\"),\n    \"array-bracket-newline\": () => require(\"./array-bracket-newline\"),\n    \"array-bracket-spacing\": () => require(\"./array-bracket-spacing\"),\n    \"array-callback-return\": () => require(\"./array-callback-return\"),\n    \"array-element-newline\": () => require(\"./array-element-newline\"),\n    \"arrow-body-style\": () => require(\"./arrow-body-style\"),\n    \"arrow-parens\": () => require(\"./arrow-parens\"),\n    \"arrow-spacing\": () => require(\"./arrow-spacing\"),\n    \"block-scoped-var\": () => require(\"./block-scoped-var\"),\n    \"block-spacing\": () => require(\"./block-spacing\"),\n    \"brace-style\": () => require(\"./brace-style\"),\n    \"callback-return\": () => require(\"./callback-return\"),\n    camelcase: () => require(\"./camelcase\"),\n    \"capitalized-comments\": () => require(\"./capitalized-comments\"),\n    \"class-methods-use-this\": () => require(\"./class-methods-use-this\"),\n    \"comma-dangle\": () => require(\"./comma-dangle\"),\n    \"comma-spacing\": () => require(\"./comma-spacing\"),\n    \"comma-style\": () => require(\"./comma-style\"),\n    complexity: () => require(\"./complexity\"),\n    \"computed-property-spacing\": () => require(\"./computed-property-spacing\"),\n    \"consistent-return\": () => require(\"./consistent-return\"),\n    \"consistent-this\": () => require(\"./consistent-this\"),\n    \"constructor-super\": () => require(\"./constructor-super\"),\n    curly: () => require(\"./curly\"),\n    \"default-case\": () => require(\"./default-case\"),\n    \"default-case-last\": () => require(\"./default-case-last\"),\n    \"default-param-last\": () => require(\"./default-param-last\"),\n    \"dot-location\": () => require(\"./dot-location\"),\n    \"dot-notation\": () => require(\"./dot-notation\"),\n    \"eol-last\": () => require(\"./eol-last\"),\n    eqeqeq: () => require(\"./eqeqeq\"),\n    \"for-direction\": () => require(\"./for-direction\"),\n    \"func-call-spacing\": () => require(\"./func-call-spacing\"),\n    \"func-name-matching\": () => require(\"./func-name-matching\"),\n    \"func-names\": () => require(\"./func-names\"),\n    \"func-style\": () => require(\"./func-style\"),\n    \"function-call-argument-newline\": () => require(\"./function-call-argument-newline\"),\n    \"function-paren-newline\": () => require(\"./function-paren-newline\"),\n    \"generator-star-spacing\": () => require(\"./generator-star-spacing\"),\n    \"getter-return\": () => require(\"./getter-return\"),\n    \"global-require\": () => require(\"./global-require\"),\n    \"grouped-accessor-pairs\": () => require(\"./grouped-accessor-pairs\"),\n    \"guard-for-in\": () => require(\"./guard-for-in\"),\n    \"handle-callback-err\": () => require(\"./handle-callback-err\"),\n    \"id-blacklist\": () => require(\"./id-blacklist\"),\n    \"id-denylist\": () => require(\"./id-denylist\"),\n    \"id-length\": () => require(\"./id-length\"),\n    \"id-match\": () => require(\"./id-match\"),\n    \"implicit-arrow-linebreak\": () => require(\"./implicit-arrow-linebreak\"),\n    indent: () => require(\"./indent\"),\n    \"indent-legacy\": () => require(\"./indent-legacy\"),\n    \"init-declarations\": () => require(\"./init-declarations\"),\n    \"jsx-quotes\": () => require(\"./jsx-quotes\"),\n    \"key-spacing\": () => require(\"./key-spacing\"),\n    \"keyword-spacing\": () => require(\"./keyword-spacing\"),\n    \"line-comment-position\": () => require(\"./line-comment-position\"),\n    \"linebreak-style\": () => require(\"./linebreak-style\"),\n    \"lines-around-comment\": () => require(\"./lines-around-comment\"),\n    \"lines-around-directive\": () => require(\"./lines-around-directive\"),\n    \"lines-between-class-members\": () => require(\"./lines-between-class-members\"),\n    \"max-classes-per-file\": () => require(\"./max-classes-per-file\"),\n    \"max-depth\": () => require(\"./max-depth\"),\n    \"max-len\": () => require(\"./max-len\"),\n    \"max-lines\": () => require(\"./max-lines\"),\n    \"max-lines-per-function\": () => require(\"./max-lines-per-function\"),\n    \"max-nested-callbacks\": () => require(\"./max-nested-callbacks\"),\n    \"max-params\": () => require(\"./max-params\"),\n    \"max-statements\": () => require(\"./max-statements\"),\n    \"max-statements-per-line\": () => require(\"./max-statements-per-line\"),\n    \"multiline-comment-style\": () => require(\"./multiline-comment-style\"),\n    \"multiline-ternary\": () => require(\"./multiline-ternary\"),\n    \"new-cap\": () => require(\"./new-cap\"),\n    \"new-parens\": () => require(\"./new-parens\"),\n    \"newline-after-var\": () => require(\"./newline-after-var\"),\n    \"newline-before-return\": () => require(\"./newline-before-return\"),\n    \"newline-per-chained-call\": () => require(\"./newline-per-chained-call\"),\n    \"no-alert\": () => require(\"./no-alert\"),\n    \"no-array-constructor\": () => require(\"./no-array-constructor\"),\n    \"no-async-promise-executor\": () => require(\"./no-async-promise-executor\"),\n    \"no-await-in-loop\": () => require(\"./no-await-in-loop\"),\n    \"no-bitwise\": () => require(\"./no-bitwise\"),\n    \"no-buffer-constructor\": () => require(\"./no-buffer-constructor\"),\n    \"no-caller\": () => require(\"./no-caller\"),\n    \"no-case-declarations\": () => require(\"./no-case-declarations\"),\n    \"no-catch-shadow\": () => require(\"./no-catch-shadow\"),\n    \"no-class-assign\": () => require(\"./no-class-assign\"),\n    \"no-compare-neg-zero\": () => require(\"./no-compare-neg-zero\"),\n    \"no-cond-assign\": () => require(\"./no-cond-assign\"),\n    \"no-confusing-arrow\": () => require(\"./no-confusing-arrow\"),\n    \"no-console\": () => require(\"./no-console\"),\n    \"no-const-assign\": () => require(\"./no-const-assign\"),\n    \"no-constant-condition\": () => require(\"./no-constant-condition\"),\n    \"no-constructor-return\": () => require(\"./no-constructor-return\"),\n    \"no-continue\": () => require(\"./no-continue\"),\n    \"no-control-regex\": () => require(\"./no-control-regex\"),\n    \"no-debugger\": () => require(\"./no-debugger\"),\n    \"no-delete-var\": () => require(\"./no-delete-var\"),\n    \"no-div-regex\": () => require(\"./no-div-regex\"),\n    \"no-dupe-args\": () => require(\"./no-dupe-args\"),\n    \"no-dupe-class-members\": () => require(\"./no-dupe-class-members\"),\n    \"no-dupe-else-if\": () => require(\"./no-dupe-else-if\"),\n    \"no-dupe-keys\": () => require(\"./no-dupe-keys\"),\n    \"no-duplicate-case\": () => require(\"./no-duplicate-case\"),\n    \"no-duplicate-imports\": () => require(\"./no-duplicate-imports\"),\n    \"no-else-return\": () => require(\"./no-else-return\"),\n    \"no-empty\": () => require(\"./no-empty\"),\n    \"no-empty-character-class\": () => require(\"./no-empty-character-class\"),\n    \"no-empty-function\": () => require(\"./no-empty-function\"),\n    \"no-empty-pattern\": () => require(\"./no-empty-pattern\"),\n    \"no-eq-null\": () => require(\"./no-eq-null\"),\n    \"no-eval\": () => require(\"./no-eval\"),\n    \"no-ex-assign\": () => require(\"./no-ex-assign\"),\n    \"no-extend-native\": () => require(\"./no-extend-native\"),\n    \"no-extra-bind\": () => require(\"./no-extra-bind\"),\n    \"no-extra-boolean-cast\": () => require(\"./no-extra-boolean-cast\"),\n    \"no-extra-label\": () => require(\"./no-extra-label\"),\n    \"no-extra-parens\": () => require(\"./no-extra-parens\"),\n    \"no-extra-semi\": () => require(\"./no-extra-semi\"),\n    \"no-fallthrough\": () => require(\"./no-fallthrough\"),\n    \"no-floating-decimal\": () => require(\"./no-floating-decimal\"),\n    \"no-func-assign\": () => require(\"./no-func-assign\"),\n    \"no-global-assign\": () => require(\"./no-global-assign\"),\n    \"no-implicit-coercion\": () => require(\"./no-implicit-coercion\"),\n    \"no-implicit-globals\": () => require(\"./no-implicit-globals\"),\n    \"no-implied-eval\": () => require(\"./no-implied-eval\"),\n    \"no-import-assign\": () => require(\"./no-import-assign\"),\n    \"no-inline-comments\": () => require(\"./no-inline-comments\"),\n    \"no-inner-declarations\": () => require(\"./no-inner-declarations\"),\n    \"no-invalid-regexp\": () => require(\"./no-invalid-regexp\"),\n    \"no-invalid-this\": () => require(\"./no-invalid-this\"),\n    \"no-irregular-whitespace\": () => require(\"./no-irregular-whitespace\"),\n    \"no-iterator\": () => require(\"./no-iterator\"),\n    \"no-label-var\": () => require(\"./no-label-var\"),\n    \"no-labels\": () => require(\"./no-labels\"),\n    \"no-lone-blocks\": () => require(\"./no-lone-blocks\"),\n    \"no-lonely-if\": () => require(\"./no-lonely-if\"),\n    \"no-loop-func\": () => require(\"./no-loop-func\"),\n    \"no-loss-of-precision\": () => require(\"./no-loss-of-precision\"),\n    \"no-magic-numbers\": () => require(\"./no-magic-numbers\"),\n    \"no-misleading-character-class\": () => require(\"./no-misleading-character-class\"),\n    \"no-mixed-operators\": () => require(\"./no-mixed-operators\"),\n    \"no-mixed-requires\": () => require(\"./no-mixed-requires\"),\n    \"no-mixed-spaces-and-tabs\": () => require(\"./no-mixed-spaces-and-tabs\"),\n    \"no-multi-assign\": () => require(\"./no-multi-assign\"),\n    \"no-multi-spaces\": () => require(\"./no-multi-spaces\"),\n    \"no-multi-str\": () => require(\"./no-multi-str\"),\n    \"no-multiple-empty-lines\": () => require(\"./no-multiple-empty-lines\"),\n    \"no-native-reassign\": () => require(\"./no-native-reassign\"),\n    \"no-negated-condition\": () => require(\"./no-negated-condition\"),\n    \"no-negated-in-lhs\": () => require(\"./no-negated-in-lhs\"),\n    \"no-nested-ternary\": () => require(\"./no-nested-ternary\"),\n    \"no-new\": () => require(\"./no-new\"),\n    \"no-new-func\": () => require(\"./no-new-func\"),\n    \"no-new-object\": () => require(\"./no-new-object\"),\n    \"no-new-require\": () => require(\"./no-new-require\"),\n    \"no-new-symbol\": () => require(\"./no-new-symbol\"),\n    \"no-new-wrappers\": () => require(\"./no-new-wrappers\"),\n    \"no-nonoctal-decimal-escape\": () => require(\"./no-nonoctal-decimal-escape\"),\n    \"no-obj-calls\": () => require(\"./no-obj-calls\"),\n    \"no-octal\": () => require(\"./no-octal\"),\n    \"no-octal-escape\": () => require(\"./no-octal-escape\"),\n    \"no-param-reassign\": () => require(\"./no-param-reassign\"),\n    \"no-path-concat\": () => require(\"./no-path-concat\"),\n    \"no-plusplus\": () => require(\"./no-plusplus\"),\n    \"no-process-env\": () => require(\"./no-process-env\"),\n    \"no-process-exit\": () => require(\"./no-process-exit\"),\n    \"no-promise-executor-return\": () => require(\"./no-promise-executor-return\"),\n    \"no-proto\": () => require(\"./no-proto\"),\n    \"no-prototype-builtins\": () => require(\"./no-prototype-builtins\"),\n    \"no-redeclare\": () => require(\"./no-redeclare\"),\n    \"no-regex-spaces\": () => require(\"./no-regex-spaces\"),\n    \"no-restricted-exports\": () => require(\"./no-restricted-exports\"),\n    \"no-restricted-globals\": () => require(\"./no-restricted-globals\"),\n    \"no-restricted-imports\": () => require(\"./no-restricted-imports\"),\n    \"no-restricted-modules\": () => require(\"./no-restricted-modules\"),\n    \"no-restricted-properties\": () => require(\"./no-restricted-properties\"),\n    \"no-restricted-syntax\": () => require(\"./no-restricted-syntax\"),\n    \"no-return-assign\": () => require(\"./no-return-assign\"),\n    \"no-return-await\": () => require(\"./no-return-await\"),\n    \"no-script-url\": () => require(\"./no-script-url\"),\n    \"no-self-assign\": () => require(\"./no-self-assign\"),\n    \"no-self-compare\": () => require(\"./no-self-compare\"),\n    \"no-sequences\": () => require(\"./no-sequences\"),\n    \"no-setter-return\": () => require(\"./no-setter-return\"),\n    \"no-shadow\": () => require(\"./no-shadow\"),\n    \"no-shadow-restricted-names\": () => require(\"./no-shadow-restricted-names\"),\n    \"no-spaced-func\": () => require(\"./no-spaced-func\"),\n    \"no-sparse-arrays\": () => require(\"./no-sparse-arrays\"),\n    \"no-sync\": () => require(\"./no-sync\"),\n    \"no-tabs\": () => require(\"./no-tabs\"),\n    \"no-template-curly-in-string\": () => require(\"./no-template-curly-in-string\"),\n    \"no-ternary\": () => require(\"./no-ternary\"),\n    \"no-this-before-super\": () => require(\"./no-this-before-super\"),\n    \"no-throw-literal\": () => require(\"./no-throw-literal\"),\n    \"no-trailing-spaces\": () => require(\"./no-trailing-spaces\"),\n    \"no-undef\": () => require(\"./no-undef\"),\n    \"no-undef-init\": () => require(\"./no-undef-init\"),\n    \"no-undefined\": () => require(\"./no-undefined\"),\n    \"no-underscore-dangle\": () => require(\"./no-underscore-dangle\"),\n    \"no-unexpected-multiline\": () => require(\"./no-unexpected-multiline\"),\n    \"no-unmodified-loop-condition\": () => require(\"./no-unmodified-loop-condition\"),\n    \"no-unneeded-ternary\": () => require(\"./no-unneeded-ternary\"),\n    \"no-unreachable\": () => require(\"./no-unreachable\"),\n    \"no-unreachable-loop\": () => require(\"./no-unreachable-loop\"),\n    \"no-unsafe-finally\": () => require(\"./no-unsafe-finally\"),\n    \"no-unsafe-negation\": () => require(\"./no-unsafe-negation\"),\n    \"no-unsafe-optional-chaining\": () => require(\"./no-unsafe-optional-chaining\"),\n    \"no-unused-expressions\": () => require(\"./no-unused-expressions\"),\n    \"no-unused-labels\": () => require(\"./no-unused-labels\"),\n    \"no-unused-private-class-members\": () => require(\"./no-unused-private-class-members\"),\n    \"no-unused-vars\": () => require(\"./no-unused-vars\"),\n    \"no-use-before-define\": () => require(\"./no-use-before-define\"),\n    \"no-useless-backreference\": () => require(\"./no-useless-backreference\"),\n    \"no-useless-call\": () => require(\"./no-useless-call\"),\n    \"no-useless-catch\": () => require(\"./no-useless-catch\"),\n    \"no-useless-computed-key\": () => require(\"./no-useless-computed-key\"),\n    \"no-useless-concat\": () => require(\"./no-useless-concat\"),\n    \"no-useless-constructor\": () => require(\"./no-useless-constructor\"),\n    \"no-useless-escape\": () => require(\"./no-useless-escape\"),\n    \"no-useless-rename\": () => require(\"./no-useless-rename\"),\n    \"no-useless-return\": () => require(\"./no-useless-return\"),\n    \"no-var\": () => require(\"./no-var\"),\n    \"no-void\": () => require(\"./no-void\"),\n    \"no-warning-comments\": () => require(\"./no-warning-comments\"),\n    \"no-whitespace-before-property\": () => require(\"./no-whitespace-before-property\"),\n    \"no-with\": () => require(\"./no-with\"),\n    \"nonblock-statement-body-position\": () => require(\"./nonblock-statement-body-position\"),\n    \"object-curly-newline\": () => require(\"./object-curly-newline\"),\n    \"object-curly-spacing\": () => require(\"./object-curly-spacing\"),\n    \"object-property-newline\": () => require(\"./object-property-newline\"),\n    \"object-shorthand\": () => require(\"./object-shorthand\"),\n    \"one-var\": () => require(\"./one-var\"),\n    \"one-var-declaration-per-line\": () => require(\"./one-var-declaration-per-line\"),\n    \"operator-assignment\": () => require(\"./operator-assignment\"),\n    \"operator-linebreak\": () => require(\"./operator-linebreak\"),\n    \"padded-blocks\": () => require(\"./padded-blocks\"),\n    \"padding-line-between-statements\": () => require(\"./padding-line-between-statements\"),\n    \"prefer-arrow-callback\": () => require(\"./prefer-arrow-callback\"),\n    \"prefer-const\": () => require(\"./prefer-const\"),\n    \"prefer-destructuring\": () => require(\"./prefer-destructuring\"),\n    \"prefer-exponentiation-operator\": () => require(\"./prefer-exponentiation-operator\"),\n    \"prefer-named-capture-group\": () => require(\"./prefer-named-capture-group\"),\n    \"prefer-numeric-literals\": () => require(\"./prefer-numeric-literals\"),\n    \"prefer-object-has-own\": () => require(\"./prefer-object-has-own\"),\n    \"prefer-object-spread\": () => require(\"./prefer-object-spread\"),\n    \"prefer-promise-reject-errors\": () => require(\"./prefer-promise-reject-errors\"),\n    \"prefer-reflect\": () => require(\"./prefer-reflect\"),\n    \"prefer-regex-literals\": () => require(\"./prefer-regex-literals\"),\n    \"prefer-rest-params\": () => require(\"./prefer-rest-params\"),\n    \"prefer-spread\": () => require(\"./prefer-spread\"),\n    \"prefer-template\": () => require(\"./prefer-template\"),\n    \"quote-props\": () => require(\"./quote-props\"),\n    quotes: () => require(\"./quotes\"),\n    radix: () => require(\"./radix\"),\n    \"require-atomic-updates\": () => require(\"./require-atomic-updates\"),\n    \"require-await\": () => require(\"./require-await\"),\n    \"require-jsdoc\": () => require(\"./require-jsdoc\"),\n    \"require-unicode-regexp\": () => require(\"./require-unicode-regexp\"),\n    \"require-yield\": () => require(\"./require-yield\"),\n    \"rest-spread-spacing\": () => require(\"./rest-spread-spacing\"),\n    semi: () => require(\"./semi\"),\n    \"semi-spacing\": () => require(\"./semi-spacing\"),\n    \"semi-style\": () => require(\"./semi-style\"),\n    \"sort-imports\": () => require(\"./sort-imports\"),\n    \"sort-keys\": () => require(\"./sort-keys\"),\n    \"sort-vars\": () => require(\"./sort-vars\"),\n    \"space-before-blocks\": () => require(\"./space-before-blocks\"),\n    \"space-before-function-paren\": () => require(\"./space-before-function-paren\"),\n    \"space-in-parens\": () => require(\"./space-in-parens\"),\n    \"space-infix-ops\": () => require(\"./space-infix-ops\"),\n    \"space-unary-ops\": () => require(\"./space-unary-ops\"),\n    \"spaced-comment\": () => require(\"./spaced-comment\"),\n    strict: () => require(\"./strict\"),\n    \"switch-colon-spacing\": () => require(\"./switch-colon-spacing\"),\n    \"symbol-description\": () => require(\"./symbol-description\"),\n    \"template-curly-spacing\": () => require(\"./template-curly-spacing\"),\n    \"template-tag-spacing\": () => require(\"./template-tag-spacing\"),\n    \"unicode-bom\": () => require(\"./unicode-bom\"),\n    \"use-isnan\": () => require(\"./use-isnan\"),\n    \"valid-jsdoc\": () => require(\"./valid-jsdoc\"),\n    \"valid-typeof\": () => require(\"./valid-typeof\"),\n    \"vars-on-top\": () => require(\"./vars-on-top\"),\n    \"wrap-iife\": () => require(\"./wrap-iife\"),\n    \"wrap-regex\": () => require(\"./wrap-regex\"),\n    \"yield-star-spacing\": () => require(\"./yield-star-spacing\"),\n    yoda: () => require(\"./yoda\")\n}));\n-/lib/rules/padding-line-between-statements.jsQ\n/**\n * @fileoverview Rule to require or disallow newlines between statements\n * @author Toru Nagashima\n */\n\n\"use strict\";\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\nconst astUtils = require(\"./utils/ast-utils\");\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\nconst LT = `[${Array.from(astUtils.LINEBREAKS).join(\"\")}]`;\nconst PADDING_LINE_SEQUENCE = new RegExp(\n    String.raw`^(\\s*?${LT})\\s*${LT}(\\s*;?)$`,\n    \"u\"\n);\nconst CJS_EXPORT = /^(?:module\\s*\\.\\s*)?exports(?:\\s*\\.|\\s*\\[|$)/u;\nconst CJS_IMPORT = /^require\\(/u;\n\n/**\n * Creates tester which check if a node starts with specific keyword.\n * @param {string} keyword The keyword to test.\n * @returns {Object} the created tester.\n * @private\n */\nfunction newKeywordTester(keyword) {\n    return {\n        test: (node, sourceCode) =>\n            sourceCode.getFirstToken(node).value === keyword\n    };\n}\n\n/**\n * Creates tester which check if a node starts with specific keyword and spans a single line.\n * @param {string} keyword The keyword to test.\n * @returns {Object} the created tester.\n * @private\n */\nfunction newSinglelineKeywordTester(keyword) {\n    return {\n        test: (node, sourceCode) =>\n            node.loc.start.line === node.loc.end.line &&\n            sourceCode.getFirstToken(node).value === keyword\n    };\n}\n\n/**\n * Creates tester which check if a node starts with specific keyword and spans multiple lines.\n * @param {string} keyword The keyword to test.\n * @returns {Object} the created tester.\n * @private\n */\nfunction newMultilineKeywordTester(keyword) {\n    return {\n        test: (node, sourceCode) =>\n            node.loc.start.line !== node.loc.end.line &&\n            sourceCode.getFirstToken(node).value === keyword\n    };\n}\n\n/**\n * Creates tester which check if a node is specific type.\n * @param {string} type The node type to test.\n * @returns {Object} the created tester.\n * @private\n */\nfunction newNodeTypeTester(type) {\n    return {\n        test: node =>\n            node.type === type\n    };\n}\n\n/**\n * Checks the given node is an expression statement of IIFE.\n * @param {ASTNode} node The node to check.\n * @returns {boolean} `true` if the node is an expression statement of IIFE.\n * @private\n */\nfunction isIIFEStatement(node) {\n    if (node.type === \"ExpressionStatement\") {\n        let call = astUtils.skipChainExpression(node.expression);\n\n        if (call.type === \"UnaryExpression\") {\n            call = astUtils.skipChainExpression(call.argument);\n        }\n        return call.type === \"CallExpression\" && astUtils.isFunction(call.callee);\n    }\n    return false;\n}\n\n/**\n * Checks whether the given node is a block-like statement.\n * This checks the last token of the node is the closing brace of a block.\n * @param {SourceCode} sourceCode The source code to get tokens.\n * @param {ASTNode} node The node to check.\n * @returns {boolean} `true` if the node is a block-like statement.\n * @private\n */\nfunction isBlockLikeStatement(sourceCode, node) {\n\n    // do-while with a block is a block-like statement.\n    if (node.type === \"DoWhileStatement\" && node.body.type === \"BlockStatement\") {\n        return true;\n    }\n\n    /*\n     * IIFE is a block-like statement specially from\n     * JSCS#disallowPaddingNewLinesAfterBlocks.\n     */\n    if (isIIFEStatement(node)) {\n        return true;\n    }\n\n    // Checks the last token is a closing brace of blocks.\n    const lastToken = sourceCode.getLastToken(node, astUtils.isNotSemicolonToken);\n    const belongingNode = lastToken && astUtils.isClosingBraceToken(lastToken)\n        ? sourceCode.getNodeByRangeIndex(lastToken.range[0])\n        : null;\n\n    return Boolean(belongingNode) && (\n        belongingNode.type === \"BlockStatement\" ||\n        belongingNode.type === \"SwitchStatement\"\n    );\n}\n\n/**\n * Check whether the given node is a directive or not.\n * @param {ASTNode} node The node to check.\n * @param {SourceCode} sourceCode The source code object to get tokens.\n * @returns {boolean} `true` if the node is a directive.\n */\nfunction isDirective(node, sourceCode) {\n    return (\n        node.type === \"ExpressionStatement\" &&\n        (\n            node.parent.type === \"Program\" ||\n            (\n                node.parent.type === \"BlockStatement\" &&\n                astUtils.isFunction(node.parent.parent)\n            )\n        ) &&\n        node.expression.type === \"Literal\" &&\n        typeof node.expression.value === \"string\" &&\n        !astUtils.isParenthesised(sourceCode, node.expression)\n    );\n}\n\n/**\n * Check whether the given node is a part of directive prologue or not.\n * @param {ASTNode} node The node to check.\n * @param {SourceCode} sourceCode The source code object to get tokens.\n * @returns {boolean} `true` if the node is a part of directive prologue.\n */\nfunction isDirectivePrologue(node, sourceCode) {\n    if (isDirective(node, sourceCode)) {\n        for (const sibling of node.parent.body) {\n            if (sibling === node) {\n                break;\n            }\n            if (!isDirective(sibling, sourceCode)) {\n                return false;\n            }\n        }\n        return true;\n    }\n    return false;\n}\n\n/**\n * Gets the actual last token.\n *\n * If a semicolon is semicolon-less style's semicolon, this ignores it.\n * For example:\n *\n *     foo()\n *     ;[1, 2, 3].forEach(bar)\n * @param {SourceCode} sourceCode The source code to get tokens.\n * @param {ASTNode} node The node to get.\n * @returns {Token} The actual last token.\n * @private\n */\nfunction getActualLastToken(sourceCode, node) {\n    const semiToken = sourceCode.getLastToken(node);\n    const prevToken = sourceCode.getTokenBefore(semiToken);\n    const nextToken = sourceCode.getTokenAfter(semiToken);\n    const isSemicolonLessStyle = Boolean(\n        prevToken &&\n        nextToken &&\n        prevToken.range[0] >= node.range[0] &&\n        astUtils.isSemicolonToken(semiToken) &&\n        semiToken.loc.start.line !== prevToken.loc.end.line &&\n        semiToken.loc.end.line === nextToken.loc.start.line\n    );\n\n    return isSemicolonLessStyle ? prevToken : semiToken;\n}\n\n/**\n * This returns the concatenation of the first 2 captured strings.\n * @param {string} _ Unused. Whole matched string.\n * @param {string} trailingSpaces The trailing spaces of the first line.\n * @param {string} indentSpaces The indentation spaces of the last line.\n * @returns {string} The concatenation of trailingSpaces and indentSpaces.\n * @private\n */\nfunction replacerToRemovePaddingLines(_, trailingSpaces, indentSpaces) {\n    return trailingSpaces + indentSpaces;\n}\n\n/**\n * Check and report statements for `any` configuration.\n * It does nothing.\n * @returns {void}\n * @private\n */\nfunction verifyForAny() {\n}\n\n/**\n * Check and report statements for `never` configuration.\n * This autofix removes blank lines between the given 2 statements.\n * However, if comments exist between 2 blank lines, it does not remove those\n * blank lines automatically.\n * @param {RuleContext} context The rule context to report.\n * @param {ASTNode} _ Unused. The previous node to check.\n * @param {ASTNode} nextNode The next node to check.\n * @param {Array<Token[]>} paddingLines The array of token pairs that blank\n * lines exist between the pair.\n * @returns {void}\n * @private\n */\nfunction verifyForNever(context, _, nextNode, paddingLines) {\n    if (paddingLines.length === 0) {\n        return;\n    }\n\n    context.report({\n        node: nextNode,\n        messageId: \"unexpectedBlankLine\",\n        fix(fixer) {\n            if (paddingLines.length >= 2) {\n                return null;\n            }\n\n            const prevToken = paddingLines[0][0];\n            const nextToken = paddingLines[0][1];\n            const start = prevToken.range[1];\n            const end = nextToken.range[0];\n            const text = context.getSourceCode().text\n                .slice(start, end)\n                .replace(PADDING_LINE_SEQUENCE, replacerToRemovePaddingLines);\n\n            return fixer.replaceTextRange([start, end], text);\n        }\n    });\n}\n\n/**\n * Check and report statements for `always` configuration.\n * This autofix inserts a blank line between the given 2 statements.\n * If the `prevNode` has trailing comments, it inserts a blank line after the\n * trailing comments.\n * @param {RuleContext} context The rule context to report.\n * @param {ASTNode} prevNode The previous node to check.\n * @param {ASTNode} nextNode The next node to check.\n * @param {Array<Token[]>} paddingLines The array of token pairs that blank\n * lines exist between the pair.\n * @returns {void}\n * @private\n */\nfunction verifyForAlways(context, prevNode, nextNode, paddingLines) {\n    if (paddingLines.length > 0) {\n        return;\n    }\n\n    context.report({\n        node: nextNode,\n        messageId: \"expectedBlankLine\",\n        fix(fixer) {\n            const sourceCode = context.getSourceCode();\n            let prevToken = getActualLastToken(sourceCode, prevNode);\n            const nextToken = sourceCode.getFirstTokenBetween(\n                prevToken,\n                nextNode,\n                {\n                    includeComments: true,\n\n                    /**\n                     * Skip the trailing comments of the previous node.\n                     * This inserts a blank line after the last trailing comment.\n                     *\n                     * For example:\n                     *\n                     *     foo(); // trailing comment.\n                     *     // comment.\n                     *     bar();\n                     *\n                     * Get fixed to:\n                     *\n                     *     foo(); // trailing comment.\n                     *\n                     *     // comment.\n                     *     bar();\n                     * @param {Token} token The token to check.\n                     * @returns {boolean} `true` if the token is not a trailing comment.\n                     * @private\n                     */\n                    filter(token) {\n                        if (astUtils.isTokenOnSameLine(prevToken, token)) {\n                            prevToken = token;\n                            return false;\n                        }\n                        return true;\n                    }\n                }\n            ) || nextNode;\n            const insertText = astUtils.isTokenOnSameLine(prevToken, nextToken)\n                ? \"\\n\\n\"\n                : \"\\n\";\n\n            return fixer.insertTextAfter(prevToken, insertText);\n        }\n    });\n}\n\n/**\n * Types of blank lines.\n * `any`, `never`, and `always` are defined.\n * Those have `verify` method to check and report statements.\n * @private\n */\nconst PaddingTypes = {\n    any: { verify: verifyForAny },\n    never: { verify: verifyForNever },\n    always: { verify: verifyForAlways }\n};\n\n/**\n * Types of statements.\n * Those have `test` method to check it matches to the given statement.\n * @private\n */\nconst StatementTypes = {\n    \"*\": { test: () => true },\n    \"block-like\": {\n        test: (node, sourceCode) => isBlockLikeStatement(sourceCode, node)\n    },\n    \"cjs-export\": {\n        test: (node, sourceCode) =>\n            node.type === \"ExpressionStatement\" &&\n            node.expression.type === \"AssignmentExpression\" &&\n            CJS_EXPORT.test(sourceCode.getText(node.expression.left))\n    },\n    \"cjs-import\": {\n        test: (node, sourceCode) =>\n            node.type === \"VariableDeclaration\" &&\n            node.declarations.length > 0 &&\n            Boolean(node.declarations[0].init) &&\n            CJS_IMPORT.test(sourceCode.getText(node.declarations[0].init))\n    },\n    directive: {\n        test: isDirectivePrologue\n    },\n    expression: {\n        test: (node, sourceCode) =>\n            node.type === \"ExpressionStatement\" &&\n            !isDirectivePrologue(node, sourceCode)\n    },\n    iife: {\n        test: isIIFEStatement\n    },\n    \"multiline-block-like\": {\n        test: (node, sourceCode) =>\n            node.loc.start.line !== node.loc.end.line &&\n            isBlockLikeStatement(sourceCode, node)\n    },\n    \"multiline-expression\": {\n        test: (node, sourceCode) =>\n            node.loc.start.line !== node.loc.end.line &&\n            node.type === \"ExpressionStatement\" &&\n            !isDirectivePrologue(node, sourceCode)\n    },\n\n    \"multiline-const\": newMultilineKeywordTester(\"const\"),\n    \"multiline-let\": newMultilineKeywordTester(\"let\"),\n    \"multiline-var\": newMultilineKeywordTester(\"var\"),\n    \"singleline-const\": newSinglelineKeywordTester(\"const\"),\n    \"singleline-let\": newSinglelineKeywordTester(\"let\"),\n    \"singleline-var\": newSinglelineKeywordTester(\"var\"),\n\n    block: newNodeTypeTester(\"BlockStatement\"),\n    empty: newNodeTypeTester(\"EmptyStatement\"),\n    function: newNodeTypeTester(\"FunctionDeclaration\"),\n\n    break: newKeywordTester(\"break\"),\n    case: newKeywordTester(\"case\"),\n    class: newKeywordTester(\"class\"),\n    const: newKeywordTester(\"const\"),\n    continue: newKeywordTester(\"continue\"),\n    debugger: newKeywordTester(\"debugger\"),\n    default: newKeywordTester(\"default\"),\n    do: newKeywordTester(\"do\"),\n    export: newKeywordTester(\"export\"),\n    for: newKeywordTester(\"for\"),\n    if: newKeywordTester(\"if\"),\n    import: newKeywordTester(\"import\"),\n    let: newKeywordTester(\"let\"),\n    return: newKeywordTester(\"return\"),\n    switch: newKeywordTester(\"switch\"),\n    throw: newKeywordTester(\"throw\"),\n    try: newKeywordTester(\"try\"),\n    var: newKeywordTester(\"var\"),\n    while: newKeywordTester(\"while\"),\n    with: newKeywordTester(\"with\")\n};\n\n//------------------------------------------------------------------------------\n// Rule Definition\n//------------------------------------------------------------------------------\n\n/** @type {import('../shared/types').Rule} */\nmodule.exports = {\n    meta: {\n        type: \"layout\",\n\n        docs: {\n            description: \"require or disallow padding lines between statements\",\n            recommended: false,\n            url: \"https://eslint.org/docs/rules/padding-line-between-statements\"\n        },\n\n        fixable: \"whitespace\",\n\n        schema: {\n            definitions: {\n                paddingType: {\n                    enum: Object.keys(PaddingTypes)\n                },\n                statementType: {\n                    anyOf: [\n                        { enum: Object.keys(StatementTypes) },\n                        {\n                            type: \"array\",\n                            items: { enum: Object.keys(StatementTypes) },\n                            minItems: 1,\n                            uniqueItems: true,\n                            additionalItems: false\n                        }\n                    ]\n                }\n            },\n            type: \"array\",\n            items: {\n                type: \"object\",\n                properties: {\n                    blankLine: { $ref: \"#/definitions/paddingType\" },\n                    prev: { $ref: \"#/definitions/statementType\" },\n                    next: { $ref: \"#/definitions/statementType\" }\n                },\n                additionalProperties: false,\n                required: [\"blankLine\", \"prev\", \"next\"]\n            },\n            additionalItems: false\n        },\n\n        messages: {\n            unexpectedBlankLine: \"Unexpected blank line before this statement.\",\n            expectedBlankLine: \"Expected blank line before this statement.\"\n        }\n    },\n\n    create(context) {\n        const sourceCode = context.getSourceCode();\n        const configureList = context.options || [];\n        let scopeInfo = null;\n\n        /**\n         * Processes to enter to new scope.\n         * This manages the current previous statement.\n         * @returns {void}\n         * @private\n         */\n        function enterScope() {\n            scopeInfo = {\n                upper: scopeInfo,\n                prevNode: null\n            };\n        }\n\n        /**\n         * Processes to exit from the current scope.\n         * @returns {void}\n         * @private\n         */\n        function exitScope() {\n            scopeInfo = scopeInfo.upper;\n        }\n\n        /**\n         * Checks whether the given node matches the given type.\n         * @param {ASTNode} node The statement node to check.\n         * @param {string|string[]} type The statement type to check.\n         * @returns {boolean} `true` if the statement node matched the type.\n         * @private\n         */\n        function match(node, type) {\n            let innerStatementNode = node;\n\n            while (innerStatementNode.type === \"LabeledStatement\") {\n                innerStatementNode = innerStatementNode.body;\n            }\n            if (Array.isArray(type)) {\n                return type.some(match.bind(null, innerStatementNode));\n            }\n            return StatementTypes[type].test(innerStatementNode, sourceCode);\n        }\n\n        /**\n         * Finds the last matched configure from configureList.\n         * @param {ASTNode} prevNode The previous statement to match.\n         * @param {ASTNode} nextNode The current statement to match.\n         * @returns {Object} The tester of the last matched configure.\n         * @private\n         */\n        function getPaddingType(prevNode, nextNode) {\n            for (let i = configureList.length - 1; i >= 0; --i) {\n                const configure = configureList[i];\n                const matched =\n                    match(prevNode, configure.prev) &&\n                    match(nextNode, configure.next);\n\n                if (matched) {\n                    return PaddingTypes[configure.blankLine];\n                }\n            }\n            return PaddingTypes.any;\n        }\n\n        /**\n         * Gets padding line sequences between the given 2 statements.\n         * Comments are separators of the padding line sequences.\n         * @param {ASTNode} prevNode The previous statement to count.\n         * @param {ASTNode} nextNode The current statement to count.\n         * @returns {Array<Token[]>} The array of token pairs.\n         * @private\n         */\n        function getPaddingLineSequences(prevNode, nextNode) {\n            const pairs = [];\n            let prevToken = getActualLastToken(sourceCode, prevNode);\n\n            if (nextNode.loc.start.line - prevToken.loc.end.line >= 2) {\n                do {\n                    const token = sourceCode.getTokenAfter(\n                        prevToken,\n                        { includeComments: true }\n                    );\n\n                    if (token.loc.start.line - prevToken.loc.end.line >= 2) {\n                        pairs.push([prevToken, token]);\n                    }\n                    prevToken = token;\n\n                } while (prevToken.range[0] < nextNode.range[0]);\n            }\n\n            return pairs;\n        }\n\n        /**\n         * Verify padding lines between the given node and the previous node.\n         * @param {ASTNode} node The node to verify.\n         * @returns {void}\n         * @private\n         */\n        function verify(node) {\n            const parentType = node.parent.type;\n            const validParent =\n                astUtils.STATEMENT_LIST_PARENTS.has(parentType) ||\n                parentType === \"SwitchStatement\";\n\n            if (!validParent) {\n                return;\n            }\n\n            // Save this node as the current previous statement.\n            const prevNode = scopeInfo.prevNode;\n\n            // Verify.\n            if (prevNode) {\n                const type = getPaddingType(prevNode, node);\n                const paddingLines = getPaddingLineSequences(prevNode, node);\n\n                type.verify(context, prevNode, node, paddingLines);\n            }\n\n            scopeInfo.prevNode = node;\n        }\n\n        /**\n         * Verify padding lines between the given node and the previous node.\n         * Then process to enter to new scope.\n         * @param {ASTNode} node The node to verify.\n         * @returns {void}\n         * @private\n         */\n        function verifyThenEnterScope(node) {\n            verify(node);\n            enterScope();\n        }\n\n        return {\n            Program: enterScope,\n            BlockStatement: enterScope,\n            SwitchStatement: enterScope,\n            StaticBlock: enterScope,\n            \"Program:exit\": exitScope,\n            \"BlockStatement:exit\": exitScope,\n            \"SwitchStatement:exit\": exitScope,\n            \"StaticBlock:exit\": exitScope,\n\n            \":statement\": verify,\n\n            SwitchCase: verifyThenEnterScope,\n            \"SwitchCase:exit\": exitScope\n        };\n    }\n};\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/ZXNwcmVlQDkuNS4w",
    "content": "/lib/token-translator.js\u001f/**\n * @fileoverview Translates tokens between Acorn format and Esprima format.\n * @author Nicholas C. Zakas\n */\n/* eslint no-underscore-dangle: 0 */\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\n// none!\n\n//------------------------------------------------------------------------------\n// Private\n//------------------------------------------------------------------------------\n\n\n// Esprima Token Types\nconst Token = {\n    Boolean: \"Boolean\",\n    EOF: \"<end>\",\n    Identifier: \"Identifier\",\n    PrivateIdentifier: \"PrivateIdentifier\",\n    Keyword: \"Keyword\",\n    Null: \"Null\",\n    Numeric: \"Numeric\",\n    Punctuator: \"Punctuator\",\n    String: \"String\",\n    RegularExpression: \"RegularExpression\",\n    Template: \"Template\",\n    JSXIdentifier: \"JSXIdentifier\",\n    JSXText: \"JSXText\"\n};\n\n/**\n * Converts part of a template into an Esprima token.\n * @param {AcornToken[]} tokens The Acorn tokens representing the template.\n * @param {string} code The source code.\n * @returns {EsprimaToken} The Esprima equivalent of the template token.\n * @private\n */\nfunction convertTemplatePart(tokens, code) {\n    const firstToken = tokens[0],\n        lastTemplateToken = tokens[tokens.length - 1];\n\n    const token = {\n        type: Token.Template,\n        value: code.slice(firstToken.start, lastTemplateToken.end)\n    };\n\n    if (firstToken.loc) {\n        token.loc = {\n            start: firstToken.loc.start,\n            end: lastTemplateToken.loc.end\n        };\n    }\n\n    if (firstToken.range) {\n        token.start = firstToken.range[0];\n        token.end = lastTemplateToken.range[1];\n        token.range = [token.start, token.end];\n    }\n\n    return token;\n}\n\n/**\n * Contains logic to translate Acorn tokens into Esprima tokens.\n * @param {Object} acornTokTypes The Acorn token types.\n * @param {string} code The source code Acorn is parsing. This is necessary\n *      to correct the \"value\" property of some tokens.\n * @constructor\n */\nfunction TokenTranslator(acornTokTypes, code) {\n\n    // token types\n    this._acornTokTypes = acornTokTypes;\n\n    // token buffer for templates\n    this._tokens = [];\n\n    // track the last curly brace\n    this._curlyBrace = null;\n\n    // the source code\n    this._code = code;\n\n}\n\nTokenTranslator.prototype = {\n    constructor: TokenTranslator,\n\n    /**\n     * Translates a single Esprima token to a single Acorn token. This may be\n     * inaccurate due to how templates are handled differently in Esprima and\n     * Acorn, but should be accurate for all other tokens.\n     * @param {AcornToken} token The Acorn token to translate.\n     * @param {Object} extra Espree extra object.\n     * @returns {EsprimaToken} The Esprima version of the token.\n     */\n    translate(token, extra) {\n\n        const type = token.type,\n            tt = this._acornTokTypes;\n\n        if (type === tt.name) {\n            token.type = Token.Identifier;\n\n            // TODO: See if this is an Acorn bug\n            if (token.value === \"static\") {\n                token.type = Token.Keyword;\n            }\n\n            if (extra.ecmaVersion > 5 && (token.value === \"yield\" || token.value === \"let\")) {\n                token.type = Token.Keyword;\n            }\n\n        } else if (type === tt.privateId) {\n            token.type = Token.PrivateIdentifier;\n\n        } else if (type === tt.semi || type === tt.comma ||\n                 type === tt.parenL || type === tt.parenR ||\n                 type === tt.braceL || type === tt.braceR ||\n                 type === tt.dot || type === tt.bracketL ||\n                 type === tt.colon || type === tt.question ||\n                 type === tt.bracketR || type === tt.ellipsis ||\n                 type === tt.arrow || type === tt.jsxTagStart ||\n                 type === tt.incDec || type === tt.starstar ||\n                 type === tt.jsxTagEnd || type === tt.prefix ||\n                 type === tt.questionDot ||\n                 (type.binop && !type.keyword) ||\n                 type.isAssign) {\n\n            token.type = Token.Punctuator;\n            token.value = this._code.slice(token.start, token.end);\n        } else if (type === tt.jsxName) {\n            token.type = Token.JSXIdentifier;\n        } else if (type.label === \"jsxText\" || type === tt.jsxAttrValueToken) {\n            token.type = Token.JSXText;\n        } else if (type.keyword) {\n            if (type.keyword === \"true\" || type.keyword === \"false\") {\n                token.type = Token.Boolean;\n            } else if (type.keyword === \"null\") {\n                token.type = Token.Null;\n            } else {\n                token.type = Token.Keyword;\n            }\n        } else if (type === tt.num) {\n            token.type = Token.Numeric;\n            token.value = this._code.slice(token.start, token.end);\n        } else if (type === tt.string) {\n\n            if (extra.jsxAttrValueToken) {\n                extra.jsxAttrValueToken = false;\n                token.type = Token.JSXText;\n            } else {\n                token.type = Token.String;\n            }\n\n            token.value = this._code.slice(token.start, token.end);\n        } else if (type === tt.regexp) {\n            token.type = Token.RegularExpression;\n            const value = token.value;\n\n            token.regex = {\n                flags: value.flags,\n                pattern: value.pattern\n            };\n            token.value = `/${value.pattern}/${value.flags}`;\n        }\n\n        return token;\n    },\n\n    /**\n     * Function to call during Acorn's onToken handler.\n     * @param {AcornToken} token The Acorn token.\n     * @param {Object} extra The Espree extra object.\n     * @returns {void}\n     */\n    onToken(token, extra) {\n\n        const that = this,\n            tt = this._acornTokTypes,\n            tokens = extra.tokens,\n            templateTokens = this._tokens;\n\n        /**\n         * Flushes the buffered template tokens and resets the template\n         * tracking.\n         * @returns {void}\n         * @private\n         */\n        function translateTemplateTokens() {\n            tokens.push(convertTemplatePart(that._tokens, that._code));\n            that._tokens = [];\n        }\n\n        if (token.type === tt.eof) {\n\n            // might be one last curlyBrace\n            if (this._curlyBrace) {\n                tokens.push(this.translate(this._curlyBrace, extra));\n            }\n\n            return;\n        }\n\n        if (token.type === tt.backQuote) {\n\n            // if there's already a curly, it's not part of the template\n            if (this._curlyBrace) {\n                tokens.push(this.translate(this._curlyBrace, extra));\n                this._curlyBrace = null;\n            }\n\n            templateTokens.push(token);\n\n            // it's the end\n            if (templateTokens.length > 1) {\n                translateTemplateTokens();\n            }\n\n            return;\n        }\n        if (token.type === tt.dollarBraceL) {\n            templateTokens.push(token);\n            translateTemplateTokens();\n            return;\n        }\n        if (token.type === tt.braceR) {\n\n            // if there's already a curly, it's not part of the template\n            if (this._curlyBrace) {\n                tokens.push(this.translate(this._curlyBrace, extra));\n            }\n\n            // store new curly for later\n            this._curlyBrace = token;\n            return;\n        }\n        if (token.type === tt.template || token.type === tt.invalidTemplate) {\n            if (this._curlyBrace) {\n                templateTokens.push(this._curlyBrace);\n                this._curlyBrace = null;\n            }\n\n            templateTokens.push(token);\n            return;\n        }\n\n        if (this._curlyBrace) {\n            tokens.push(this.translate(this._curlyBrace, extra));\n            this._curlyBrace = null;\n        }\n\n        tokens.push(this.translate(token, extra));\n    }\n};\n\n//------------------------------------------------------------------------------\n// Public\n//------------------------------------------------------------------------------\n\nexport default TokenTranslator;\n/lib/espree.js/M/* eslint-disable no-param-reassign*/\nimport TokenTranslator from \"./token-translator.js\";\nimport { normalizeOptions } from \"./options.js\";\n\n\nconst STATE = Symbol(\"espree's internal state\");\nconst ESPRIMA_FINISH_NODE = Symbol(\"espree's esprimaFinishNode\");\n\n\n/**\n * Converts an Acorn comment to a Esprima comment.\n * @param {boolean} block True if it's a block comment, false if not.\n * @param {string} text The text of the comment.\n * @param {int} start The index at which the comment starts.\n * @param {int} end The index at which the comment ends.\n * @param {Location} startLoc The location at which the comment starts.\n * @param {Location} endLoc The location at which the comment ends.\n * @param {string} code The source code being parsed.\n * @returns {Object} The comment object.\n * @private\n */\nfunction convertAcornCommentToEsprimaComment(block, text, start, end, startLoc, endLoc, code) {\n    let type;\n\n    if (block) {\n        type = \"Block\";\n    } else if (code.slice(start, start + 2) === \"#!\") {\n        type = \"Hashbang\";\n    } else {\n        type = \"Line\";\n    }\n\n    const comment = {\n        type,\n        value: text\n    };\n\n    if (typeof start === \"number\") {\n        comment.start = start;\n        comment.end = end;\n        comment.range = [start, end];\n    }\n\n    if (typeof startLoc === \"object\") {\n        comment.loc = {\n            start: startLoc,\n            end: endLoc\n        };\n    }\n\n    return comment;\n}\n\nexport default () => Parser => {\n    const tokTypes = Object.assign({}, Parser.acorn.tokTypes);\n\n    if (Parser.acornJsx) {\n        Object.assign(tokTypes, Parser.acornJsx.tokTypes);\n    }\n\n    return class Espree extends Parser {\n        constructor(opts, code) {\n            if (typeof opts !== \"object\" || opts === null) {\n                opts = {};\n            }\n            if (typeof code !== \"string\" && !(code instanceof String)) {\n                code = String(code);\n            }\n\n            // save original source type in case of commonjs\n            const originalSourceType = opts.sourceType;\n            const options = normalizeOptions(opts);\n            const ecmaFeatures = options.ecmaFeatures || {};\n            const tokenTranslator =\n                options.tokens === true\n                    ? new TokenTranslator(tokTypes, code)\n                    : null;\n\n            /*\n             * Data that is unique to Espree and is not represented internally\n             * in Acorn.\n             *\n             * For ES2023 hashbangs, Espree will call `onComment()` during the\n             * constructor, so we must define state before having access to\n             * `this`.\n             */\n            const state = {\n                originalSourceType: originalSourceType || options.sourceType,\n                tokens: tokenTranslator ? [] : null,\n                comments: options.comment === true ? [] : null,\n                impliedStrict: ecmaFeatures.impliedStrict === true && options.ecmaVersion >= 5,\n                ecmaVersion: options.ecmaVersion,\n                jsxAttrValueToken: false,\n                lastToken: null,\n                templateElements: []\n            };\n\n            // Initialize acorn parser.\n            super({\n\n                // do not use spread, because we don't want to pass any unknown options to acorn\n                ecmaVersion: options.ecmaVersion,\n                sourceType: options.sourceType,\n                ranges: options.ranges,\n                locations: options.locations,\n                allowReserved: options.allowReserved,\n\n                // Truthy value is true for backward compatibility.\n                allowReturnOutsideFunction: options.allowReturnOutsideFunction,\n\n                // Collect tokens\n                onToken: token => {\n                    if (tokenTranslator) {\n\n                        // Use `tokens`, `ecmaVersion`, and `jsxAttrValueToken` in the state.\n                        tokenTranslator.onToken(token, state);\n                    }\n                    if (token.type !== tokTypes.eof) {\n                        state.lastToken = token;\n                    }\n                },\n\n                // Collect comments\n                onComment: (block, text, start, end, startLoc, endLoc) => {\n                    if (state.comments) {\n                        const comment = convertAcornCommentToEsprimaComment(block, text, start, end, startLoc, endLoc, code);\n\n                        state.comments.push(comment);\n                    }\n                }\n            }, code);\n\n            /*\n             * We put all of this data into a symbol property as a way to avoid\n             * potential naming conflicts with future versions of Acorn.\n             */\n            this[STATE] = state;\n        }\n\n        tokenize() {\n            do {\n                this.next();\n            } while (this.type !== tokTypes.eof);\n\n            // Consume the final eof token\n            this.next();\n\n            const extra = this[STATE];\n            const tokens = extra.tokens;\n\n            if (extra.comments) {\n                tokens.comments = extra.comments;\n            }\n\n            return tokens;\n        }\n\n        finishNode(...args) {\n            const result = super.finishNode(...args);\n\n            return this[ESPRIMA_FINISH_NODE](result);\n        }\n\n        finishNodeAt(...args) {\n            const result = super.finishNodeAt(...args);\n\n            return this[ESPRIMA_FINISH_NODE](result);\n        }\n\n        parse() {\n            const extra = this[STATE];\n            const program = super.parse();\n\n            program.sourceType = extra.originalSourceType;\n\n            if (extra.comments) {\n                program.comments = extra.comments;\n            }\n            if (extra.tokens) {\n                program.tokens = extra.tokens;\n            }\n\n            /*\n             * Adjust opening and closing position of program to match Esprima.\n             * Acorn always starts programs at range 0 whereas Esprima starts at the\n             * first AST node's start (the only real difference is when there's leading\n             * whitespace or leading comments). Acorn also counts trailing whitespace\n             * as part of the program whereas Esprima only counts up to the last token.\n             */\n            if (program.body.length) {\n                const [firstNode] = program.body;\n\n                if (program.range) {\n                    program.range[0] = firstNode.range[0];\n                }\n                if (program.loc) {\n                    program.loc.start = firstNode.loc.start;\n                }\n                program.start = firstNode.start;\n            }\n            if (extra.lastToken) {\n                if (program.range) {\n                    program.range[1] = extra.lastToken.range[1];\n                }\n                if (program.loc) {\n                    program.loc.end = extra.lastToken.loc.end;\n                }\n                program.end = extra.lastToken.end;\n            }\n\n\n            /*\n             * https://github.com/eslint/espree/issues/349\n             * Ensure that template elements have correct range information.\n             * This is one location where Acorn produces a different value\n             * for its start and end properties vs. the values present in the\n             * range property. In order to avoid confusion, we set the start\n             * and end properties to the values that are present in range.\n             * This is done here, instead of in finishNode(), because Acorn\n             * uses the values of start and end internally while parsing, making\n             * it dangerous to change those values while parsing is ongoing.\n             * By waiting until the end of parsing, we can safely change these\n             * values without affect any other part of the process.\n             */\n            this[STATE].templateElements.forEach(templateElement => {\n                const startOffset = -1;\n                const endOffset = templateElement.tail ? 1 : 2;\n\n                templateElement.start += startOffset;\n                templateElement.end += endOffset;\n\n                if (templateElement.range) {\n                    templateElement.range[0] += startOffset;\n                    templateElement.range[1] += endOffset;\n                }\n\n                if (templateElement.loc) {\n                    templateElement.loc.start.column += startOffset;\n                    templateElement.loc.end.column += endOffset;\n                }\n            });\n\n            return program;\n        }\n\n        parseTopLevel(node) {\n            if (this[STATE].impliedStrict) {\n                this.strict = true;\n            }\n            return super.parseTopLevel(node);\n        }\n\n        /**\n         * Overwrites the default raise method to throw Esprima-style errors.\n         * @param {int} pos The position of the error.\n         * @param {string} message The error message.\n         * @throws {SyntaxError} A syntax error.\n         * @returns {void}\n         */\n        raise(pos, message) {\n            const loc = Parser.acorn.getLineInfo(this.input, pos);\n            const err = new SyntaxError(message);\n\n            err.index = pos;\n            err.lineNumber = loc.line;\n            err.column = loc.column + 1; // acorn uses 0-based columns\n            throw err;\n        }\n\n        /**\n         * Overwrites the default raise method to throw Esprima-style errors.\n         * @param {int} pos The position of the error.\n         * @param {string} message The error message.\n         * @throws {SyntaxError} A syntax error.\n         * @returns {void}\n         */\n        raiseRecoverable(pos, message) {\n            this.raise(pos, message);\n        }\n\n        /**\n         * Overwrites the default unexpected method to throw Esprima-style errors.\n         * @param {int} pos The position of the error.\n         * @throws {SyntaxError} A syntax error.\n         * @returns {void}\n         */\n        unexpected(pos) {\n            let message = \"Unexpected token\";\n\n            if (pos !== null && pos !== void 0) {\n                this.pos = pos;\n\n                if (this.options.locations) {\n                    while (this.pos < this.lineStart) {\n                        this.lineStart = this.input.lastIndexOf(\"\\n\", this.lineStart - 2) + 1;\n                        --this.curLine;\n                    }\n                }\n\n                this.nextToken();\n            }\n\n            if (this.end > this.start) {\n                message += ` ${this.input.slice(this.start, this.end)}`;\n            }\n\n            this.raise(this.start, message);\n        }\n\n        /*\n        * Esprima-FB represents JSX strings as tokens called \"JSXText\", but Acorn-JSX\n        * uses regular tt.string without any distinction between this and regular JS\n        * strings. As such, we intercept an attempt to read a JSX string and set a flag\n        * on extra so that when tokens are converted, the next token will be switched\n        * to JSXText via onToken.\n        */\n        jsx_readString(quote) { // eslint-disable-line camelcase\n            const result = super.jsx_readString(quote);\n\n            if (this.type === tokTypes.string) {\n                this[STATE].jsxAttrValueToken = true;\n            }\n            return result;\n        }\n\n        /**\n         * Performs last-minute Esprima-specific compatibility checks and fixes.\n         * @param {ASTNode} result The node to check.\n         * @returns {ASTNode} The finished node.\n         */\n        [ESPRIMA_FINISH_NODE](result) {\n\n            // Acorn doesn't count the opening and closing backticks as part of templates\n            // so we have to adjust ranges/locations appropriately.\n            if (result.type === \"TemplateElement\") {\n\n                // save template element references to fix start/end later\n                this[STATE].templateElements.push(result);\n            }\n\n            if (result.type.includes(\"Function\") && !result.generator) {\n                result.generator = false;\n            }\n\n            return result;\n        }\n    };\n};\n/package.json\t{\n  \"name\": \"espree\",\n  \"description\": \"An Esprima-compatible JavaScript parser built on Acorn\",\n  \"author\": \"Nicholas C. Zakas <nicholas+npm@nczconsulting.com>\",\n  \"homepage\": \"https://github.com/eslint/espree\",\n  \"main\": \"dist/espree.cjs\",\n  \"type\": \"module\",\n  \"exports\": {\n    \".\": [\n      {\n        \"import\": \"./espree.js\",\n        \"require\": \"./dist/espree.cjs\",\n        \"default\": \"./dist/espree.cjs\"\n      },\n      \"./dist/espree.cjs\"\n    ],\n    \"./package.json\": \"./package.json\"\n  },\n  \"version\": \"9.5.0\",\n  \"files\": [\n    \"lib\",\n    \"dist/espree.cjs\",\n    \"espree.js\"\n  ],\n  \"engines\": {\n    \"node\": \"^12.22.0 || ^14.17.0 || >=16.0.0\"\n  },\n  \"repository\": \"eslint/espree\",\n  \"bugs\": {\n    \"url\": \"https://github.com/eslint/espree/issues\"\n  },\n  \"funding\": \"https://opencollective.com/eslint\",\n  \"license\": \"BSD-2-Clause\",\n  \"dependencies\": {\n    \"acorn\": \"^8.8.0\",\n    \"acorn-jsx\": \"^5.3.2\",\n    \"eslint-visitor-keys\": \"^3.3.0\"\n  },\n  \"devDependencies\": {\n    \"@rollup/plugin-commonjs\": \"^17.1.0\",\n    \"@rollup/plugin-json\": \"^4.1.0\",\n    \"@rollup/plugin-node-resolve\": \"^11.2.0\",\n    \"c8\": \"^7.11.0\",\n    \"chai\": \"^4.3.6\",\n    \"eslint\": \"^8.13.0\",\n    \"eslint-config-eslint\": \"^7.0.0\",\n    \"eslint-plugin-jsdoc\": \"^39.2.4\",\n    \"eslint-plugin-node\": \"^11.1.0\",\n    \"eslint-release\": \"^3.2.0\",\n    \"esprima-fb\": \"^8001.2001.0-dev-harmony-fb\",\n    \"mocha\": \"^9.2.2\",\n    \"npm-run-all\": \"^4.1.5\",\n    \"rollup\": \"^2.41.2\",\n    \"shelljs\": \"^0.3.0\"\n  },\n  \"keywords\": [\n    \"ast\",\n    \"ecmascript\",\n    \"javascript\",\n    \"parser\",\n    \"syntax\",\n    \"acorn\"\n  ],\n  \"scripts\": {\n    \"unit\": \"npm-run-all -s unit:*\",\n    \"unit:esm\": \"c8 mocha --color --reporter progress --timeout 30000 'tests/lib/**/*.js'\",\n    \"unit:cjs\": \"mocha --color --reporter progress --timeout 30000 tests/lib/commonjs.cjs\",\n    \"test\": \"npm-run-all -p unit lint\",\n    \"lint\": \"eslint .\",\n    \"fixlint\": \"npm run lint -- --fix\",\n    \"build\": \"rollup -c rollup.config.js\",\n    \"update-version\": \"node tools/update-version.js\",\n    \"pretest\": \"npm run build\",\n    \"prepublishOnly\": \"npm run update-version && npm run build\",\n    \"sync-docs\": \"node sync-docs.js\",\n    \"generate-release\": \"eslint-generate-release\",\n    \"generate-alpharelease\": \"eslint-generate-prerelease alpha\",\n    \"generate-betarelease\": \"eslint-generate-prerelease beta\",\n    \"generate-rcrelease\": \"eslint-generate-prerelease rc\",\n    \"publish-release\": \"eslint-publish-release\"\n  }\n}\n/espree.js\u0019,/**\n * @fileoverview Main Espree file that converts Acorn into Esprima output.\n *\n * This file contains code from the following MIT-licensed projects:\n * 1. Acorn\n * 2. Babylon\n * 3. Babel-ESLint\n *\n * This file also contains code from Esprima, which is BSD licensed.\n *\n * Acorn is Copyright 2012-2015 Acorn Contributors (https://github.com/marijnh/acorn/blob/master/AUTHORS)\n * Babylon is Copyright 2014-2015 various contributors (https://github.com/babel/babel/blob/master/packages/babylon/AUTHORS)\n * Babel-ESLint is Copyright 2014-2015 Sebastian McKenzie <sebmck@gmail.com>\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * * Redistributions of source code must retain the above copyright\n *   notice, this list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright\n *   notice, this list of conditions and the following disclaimer in the\n *   documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * Esprima is Copyright (c) jQuery Foundation, Inc. and Contributors, All Rights Reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n *   * Redistributions of source code must retain the above copyright\n *     notice, this list of conditions and the following disclaimer.\n *   * Redistributions in binary form must reproduce the above copyright\n *     notice, this list of conditions and the following disclaimer in the\n *     documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n/* eslint no-undefined:0, no-use-before-define: 0 */\n\nimport * as acorn from \"acorn\";\nimport jsx from \"acorn-jsx\";\nimport espree from \"./lib/espree.js\";\nimport espreeVersion from \"./lib/version.js\";\nimport * as visitorKeys from \"eslint-visitor-keys\";\nimport { getLatestEcmaVersion, getSupportedEcmaVersions } from \"./lib/options.js\";\n\n\n// To initialize lazily.\nconst parsers = {\n    _regular: null,\n    _jsx: null,\n\n    get regular() {\n        if (this._regular === null) {\n            this._regular = acorn.Parser.extend(espree());\n        }\n        return this._regular;\n    },\n\n    get jsx() {\n        if (this._jsx === null) {\n            this._jsx = acorn.Parser.extend(jsx(), espree());\n        }\n        return this._jsx;\n    },\n\n    get(options) {\n        const useJsx = Boolean(\n            options &&\n            options.ecmaFeatures &&\n            options.ecmaFeatures.jsx\n        );\n\n        return useJsx ? this.jsx : this.regular;\n    }\n};\n\n//------------------------------------------------------------------------------\n// Tokenizer\n//------------------------------------------------------------------------------\n\n/**\n * Tokenizes the given code.\n * @param {string} code The code to tokenize.\n * @param {Object} options Options defining how to tokenize.\n * @returns {Token[]} An array of tokens.\n * @throws {SyntaxError} If the input code is invalid.\n * @private\n */\nexport function tokenize(code, options) {\n    const Parser = parsers.get(options);\n\n    // Ensure to collect tokens.\n    if (!options || options.tokens !== true) {\n        options = Object.assign({}, options, { tokens: true }); // eslint-disable-line no-param-reassign\n    }\n\n    return new Parser(options, code).tokenize();\n}\n\n//------------------------------------------------------------------------------\n// Parser\n//------------------------------------------------------------------------------\n\n/**\n * Parses the given code.\n * @param {string} code The code to tokenize.\n * @param {Object} options Options defining how to tokenize.\n * @returns {ASTNode} The \"Program\" AST node.\n * @throws {SyntaxError} If the input code is invalid.\n */\nexport function parse(code, options) {\n    const Parser = parsers.get(options);\n\n    return new Parser(options, code).parse();\n}\n\n//------------------------------------------------------------------------------\n// Public\n//------------------------------------------------------------------------------\n\nexport const version = espreeVersion;\nexport const name = \"espree\";\n\n/* istanbul ignore next */\nexport const VisitorKeys = (function() {\n    return visitorKeys.KEYS;\n}());\n\n// Derive node types from VisitorKeys\n/* istanbul ignore next */\nexport const Syntax = (function() {\n    let key,\n        types = {};\n\n    if (typeof Object.create === \"function\") {\n        types = Object.create(null);\n    }\n\n    for (key in VisitorKeys) {\n        if (Object.hasOwnProperty.call(VisitorKeys, key)) {\n            types[key] = key;\n        }\n    }\n\n    if (typeof Object.freeze === \"function\") {\n        Object.freeze(types);\n    }\n\n    return types;\n}());\n\nexport const latestEcmaVersion = getLatestEcmaVersion();\n\nexport const supportedEcmaVersions = getSupportedEcmaVersions();\n/LICENSE\u0005*BSD 2-Clause License\n\nCopyright (c) Open JS Foundation\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n1. Redistributions of source code must retain the above copyright notice, this\n   list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright notice,\n   this list of conditions and the following disclaimer in the documentation\n   and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\nSERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\nOR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n/lib/features.js\u0002/**\n * @fileoverview The list of feature flags supported by the parser and their default\n *      settings.\n * @author Nicholas C. Zakas\n */\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\n// None!\n\n//------------------------------------------------------------------------------\n// Public\n//------------------------------------------------------------------------------\n\nexport default {\n\n    // React JSX parsing\n    jsx: false,\n\n    // allow return statement in global scope\n    globalReturn: false,\n\n    // allow implied strict mode\n    impliedStrict: false\n};\n/lib/version.js2const version = \"9.5.0\";\n\nexport default version;\n/README.md'X[![npm version](https://img.shields.io/npm/v/espree.svg)](https://www.npmjs.com/package/espree)\n[![npm downloads](https://img.shields.io/npm/dm/espree.svg)](https://www.npmjs.com/package/espree)\n[![Build Status](https://github.com/eslint/espree/workflows/CI/badge.svg)](https://github.com/eslint/espree/actions)\n[![Bountysource](https://www.bountysource.com/badge/tracker?tracker_id=9348450)](https://www.bountysource.com/trackers/9348450-eslint?utm_source=9348450&utm_medium=shield&utm_campaign=TRACKER_BADGE)\n\n# Espree\n\nEspree started out as a fork of [Esprima](http://esprima.org) v1.2.2, the last stable published released of Esprima before work on ECMAScript 6 began. Espree is now built on top of [Acorn](https://github.com/ternjs/acorn), which has a modular architecture that allows extension of core functionality. The goal of Espree is to produce output that is similar to Esprima with a similar API so that it can be used in place of Esprima.\n\n## Usage\n\nInstall:\n\n```\nnpm i espree\n```\n\nTo use in an ESM file:\n\n```js\nimport * as espree from \"espree\";\n\nconst ast = espree.parse(code);\n```\n\nTo use in a Common JS file:\n\n```js\nconst espree = require(\"espree\");\n\nconst ast = espree.parse(code);\n```\n\n## API\n\n### `parse()`\n\n`parse` parses the given code and returns a abstract syntax tree (AST). It takes two parameters.\n\n- `code` [string]() - the code which needs to be parsed.\n- `options (Optional)` [Object]() - read more about this [here](#options).\n\n```js\nimport * as espree from \"espree\";\n\nconst ast = espree.parse(code);\n```\n\n**Example :**\n\n```js\nconst ast = espree.parse('let foo = \"bar\"', { ecmaVersion: 6 });\nconsole.log(ast);\n```\n\n<details><summary>Output</summary>\n<p>\n\n```\nNode {\n  type: 'Program',\n  start: 0,\n  end: 15,\n  body: [\n    Node {\n      type: 'VariableDeclaration',\n      start: 0,\n      end: 15,\n      declarations: [Array],\n      kind: 'let'\n    }\n  ],\n  sourceType: 'script'\n}\n```\n\n</p>\n</details>\n\n### `tokenize()`\n\n`tokenize` returns the tokens of a given code. It takes two parameters.\n\n- `code` [string]() - the code which needs to be parsed.\n- `options (Optional)` [Object]() - read more about this [here](#options).\n\nEven if `options` is empty or undefined or `options.tokens` is `false`, it assigns it to `true` in order to get the `tokens` array\n\n**Example :**\n\n```js\nimport * as espree from \"espree\";\n\nconst tokens = espree.tokenize('let foo = \"bar\"', { ecmaVersion: 6 });\nconsole.log(tokens);\n```\n\n<details><summary>Output</summary>\n<p>\n\n```\nToken { type: 'Keyword', value: 'let', start: 0, end: 3 },\nToken { type: 'Identifier', value: 'foo', start: 4, end: 7 },\nToken { type: 'Punctuator', value: '=', start: 8, end: 9 },\nToken { type: 'String', value: '\"bar\"', start: 10, end: 15 }\n```\n\n</p>\n</details>\n\n### `version`\n\nReturns the current `espree` version\n\n### `VisitorKeys`\n\nReturns all visitor keys for traversing the AST from [eslint-visitor-keys](https://github.com/eslint/eslint-visitor-keys)\n\n### `latestEcmaVersion`\n\nReturns the latest ECMAScript supported by `espree`\n\n### `supportedEcmaVersions`\n\nReturns an array of all supported ECMAScript versions\n\n## Options\n\n```js\nconst options = {\n    // attach range information to each node\n    range: false,\n\n    // attach line/column location information to each node\n    loc: false,\n\n    // create a top-level comments array containing all comments\n    comment: false,\n\n    // create a top-level tokens array containing all tokens\n    tokens: false,\n\n    // Set to 3, 5 (the default), 6, 7, 8, 9, 10, 11, 12, 13 or 14 to specify the version of ECMAScript syntax you want to use.\n    // You can also set to 2015 (same as 6), 2016 (same as 7), 2017 (same as 8), 2018 (same as 9), 2019 (same as 10), 2020 (same as 11), 2021 (same as 12), 2022 (same as 13) or 2023 (same as 14) to use the year-based naming.\n    // You can also set \"latest\" to use the most recently supported version.\n    ecmaVersion: 3,\n\n    allowReserved: true, // only allowed when ecmaVersion is 3\n\n    // specify which type of script you're parsing (\"script\", \"module\", or \"commonjs\")\n    sourceType: \"script\",\n\n    // specify additional language features\n    ecmaFeatures: {\n\n        // enable JSX parsing\n        jsx: false,\n\n        // enable return in global scope (set to true automatically when sourceType is \"commonjs\")\n        globalReturn: false,\n\n        // enable implied strict mode (if ecmaVersion >= 5)\n        impliedStrict: false\n    }\n}\n```\n\n## Esprima Compatibility Going Forward\n\nThe primary goal is to produce the exact same AST structure and tokens as Esprima, and that takes precedence over anything else. (The AST structure being the [ESTree](https://github.com/estree/estree) API with JSX extensions.) Separate from that, Espree may deviate from what Esprima outputs in terms of where and how comments are attached, as well as what additional information is available on AST nodes. That is to say, Espree may add more things to the AST nodes than Esprima does but the overall AST structure produced will be the same.\n\nEspree may also deviate from Esprima in the interface it exposes.\n\n## Contributing\n\nIssues and pull requests will be triaged and responded to as quickly as possible. We operate under the [ESLint Contributor Guidelines](http://eslint.org/docs/developer-guide/contributing), so please be sure to read them before contributing. If you're not sure where to dig in, check out the [issues](https://github.com/eslint/espree/issues).\n\nEspree is licensed under a permissive BSD 2-clause license.\n\n## Security Policy\n\nWe work hard to ensure that Espree is safe for everyone and that security issues are addressed quickly and responsibly. Read the full [security policy](https://github.com/eslint/.github/blob/master/SECURITY.md).\n\n## Build Commands\n\n* `npm test` - run all linting and tests\n* `npm run lint` - run all linting\n\n## Differences from Espree 2.x\n\n* The `tokenize()` method does not use `ecmaFeatures`. Any string will be tokenized completely based on ECMAScript 6 semantics.\n* Trailing whitespace no longer is counted as part of a node.\n* `let` and `const` declarations are no longer parsed by default. You must opt-in by using an `ecmaVersion` newer than `5` or setting `sourceType` to `module`.\n* The `esparse` and `esvalidate` binary scripts have been removed.\n* There is no `tolerant` option. We will investigate adding this back in the future.\n\n## Known Incompatibilities\n\nIn an effort to help those wanting to transition from other parsers to Espree, the following is a list of noteworthy incompatibilities with other parsers. These are known differences that we do not intend to change.\n\n### Esprima 1.2.2\n\n* Esprima counts trailing whitespace as part of each AST node while Espree does not. In Espree, the end of a node is where the last token occurs.\n* Espree does not parse `let` and `const` declarations by default.\n* Error messages returned for parsing errors are different.\n* There are two addition properties on every node and token: `start` and `end`. These represent the same data as `range` and are used internally by Acorn.\n\n### Esprima 2.x\n\n* Esprima 2.x uses a different comment attachment algorithm that results in some comments being added in different places than Espree. The algorithm Espree uses is the same one used in Esprima 1.2.2.\n\n## Frequently Asked Questions\n\n### Why another parser\n\n[ESLint](http://eslint.org) had been relying on Esprima as its parser from the beginning. While that was fine when the JavaScript language was evolving slowly, the pace of development increased dramatically and Esprima had fallen behind. ESLint, like many other tools reliant on Esprima, has been stuck in using new JavaScript language features until Esprima updates, and that caused our users frustration.\n\nWe decided the only way for us to move forward was to create our own parser, bringing us inline with JSHint and JSLint, and allowing us to keep implementing new features as we need them. We chose to fork Esprima instead of starting from scratch in order to move as quickly as possible with a compatible API.\n\nWith Espree 2.0.0, we are no longer a fork of Esprima but rather a translation layer between Acorn and Esprima syntax. This allows us to put work back into a community-supported parser (Acorn) that is continuing to grow and evolve while maintaining an Esprima-compatible parser for those utilities still built on Esprima.\n\n### Have you tried working with Esprima?\n\nYes. Since the start of ESLint, we've regularly filed bugs and feature requests with Esprima and will continue to do so. However, there are some different philosophies around how the projects work that need to be worked through. The initial goal was to have Espree track Esprima and eventually merge the two back together, but we ultimately decided that building on top of Acorn was a better choice due to Acorn's plugin support.\n\n### Why don't you just use Acorn?\n\nAcorn is a great JavaScript parser that produces an AST that is compatible with Esprima. Unfortunately, ESLint relies on more than just the AST to do its job. It relies on Esprima's tokens and comment attachment features to get a complete picture of the source code. We investigated switching to Acorn, but the inconsistencies between Esprima and Acorn created too much work for a project like ESLint.\n\nWe are building on top of Acorn, however, so that we can contribute back and help make Acorn even better.\n\n### What ECMAScript features do you support?\n\nEspree supports all ECMAScript 2022 features and partially supports ECMAScript 2023 features.\n\nBecause ECMAScript 2023 is still under development, we are implementing features as they are finalized. Currently, Espree supports:\n\n* [Hashbang grammar](https://github.com/tc39/proposal-hashbang)\n\nSee [finished-proposals.md](https://github.com/tc39/proposals/blob/master/finished-proposals.md) to know what features are finalized.\n\n### How do you determine which experimental features to support?\n\nIn general, we do not support experimental JavaScript features. We may make exceptions from time to time depending on the maturity of the features.\n/lib/options.js\u000f\u0016/**\n * @fileoverview A collection of methods for processing Espree's options.\n * @author Kai Cataldo\n */\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\nconst SUPPORTED_VERSIONS = [\n    3,\n    5,\n    6, // 2015\n    7, // 2016\n    8, // 2017\n    9, // 2018\n    10, // 2019\n    11, // 2020\n    12, // 2021\n    13, // 2022\n    14 // 2023\n];\n\n/**\n * Get the latest ECMAScript version supported by Espree.\n * @returns {number} The latest ECMAScript version.\n */\nexport function getLatestEcmaVersion() {\n    return SUPPORTED_VERSIONS[SUPPORTED_VERSIONS.length - 1];\n}\n\n/**\n * Get the list of ECMAScript versions supported by Espree.\n * @returns {number[]} An array containing the supported ECMAScript versions.\n */\nexport function getSupportedEcmaVersions() {\n    return [...SUPPORTED_VERSIONS];\n}\n\n/**\n * Normalize ECMAScript version from the initial config\n * @param {(number|\"latest\")} ecmaVersion ECMAScript version from the initial config\n * @throws {Error} throws an error if the ecmaVersion is invalid.\n * @returns {number} normalized ECMAScript version\n */\nfunction normalizeEcmaVersion(ecmaVersion = 5) {\n\n    let version = ecmaVersion === \"latest\" ? getLatestEcmaVersion() : ecmaVersion;\n\n    if (typeof version !== \"number\") {\n        throw new Error(`ecmaVersion must be a number or \"latest\". Received value of type ${typeof ecmaVersion} instead.`);\n    }\n\n    // Calculate ECMAScript edition number from official year version starting with\n    // ES2015, which corresponds with ES6 (or a difference of 2009).\n    if (version >= 2015) {\n        version -= 2009;\n    }\n\n    if (!SUPPORTED_VERSIONS.includes(version)) {\n        throw new Error(\"Invalid ecmaVersion.\");\n    }\n\n    return version;\n}\n\n/**\n * Normalize sourceType from the initial config\n * @param {string} sourceType to normalize\n * @throws {Error} throw an error if sourceType is invalid\n * @returns {string} normalized sourceType\n */\nfunction normalizeSourceType(sourceType = \"script\") {\n    if (sourceType === \"script\" || sourceType === \"module\") {\n        return sourceType;\n    }\n\n    if (sourceType === \"commonjs\") {\n        return \"script\";\n    }\n\n    throw new Error(\"Invalid sourceType.\");\n}\n\n/**\n * Normalize parserOptions\n * @param {Object} options the parser options to normalize\n * @throws {Error} throw an error if found invalid option.\n * @returns {Object} normalized options\n */\nexport function normalizeOptions(options) {\n    const ecmaVersion = normalizeEcmaVersion(options.ecmaVersion);\n    const sourceType = normalizeSourceType(options.sourceType);\n    const ranges = options.range === true;\n    const locations = options.loc === true;\n\n    if (ecmaVersion !== 3 && options.allowReserved) {\n\n        // a value of `false` is intentionally allowed here, so a shared config can overwrite it when needed\n        throw new Error(\"`allowReserved` is only supported when ecmaVersion is 3\");\n    }\n    if (typeof options.allowReserved !== \"undefined\" && typeof options.allowReserved !== \"boolean\") {\n        throw new Error(\"`allowReserved`, when present, must be `true` or `false`\");\n    }\n    const allowReserved = ecmaVersion === 3 ? (options.allowReserved || \"never\") : false;\n    const ecmaFeatures = options.ecmaFeatures || {};\n    const allowReturnOutsideFunction = options.sourceType === \"commonjs\" ||\n        Boolean(ecmaFeatures.globalReturn);\n\n    if (sourceType === \"module\" && ecmaVersion < 6) {\n        throw new Error(\"sourceType 'module' is not supported when ecmaVersion < 2015. Consider adding `{ ecmaVersion: 2015 }` to the parser options.\");\n    }\n\n    return Object.assign({}, options, {\n        ecmaVersion,\n        sourceType,\n        ranges,\n        locations,\n        allowReserved,\n        allowReturnOutsideFunction\n    });\n}\n/dist/espree.cjsz\"'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar acorn = require('acorn');\nvar jsx = require('acorn-jsx');\nvar visitorKeys = require('eslint-visitor-keys');\n\nfunction _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\nfunction _interopNamespace(e) {\n    if (e && e.__esModule) return e;\n    var n = Object.create(null);\n    if (e) {\n        Object.keys(e).forEach(function (k) {\n            if (k !== 'default') {\n                var d = Object.getOwnPropertyDescriptor(e, k);\n                Object.defineProperty(n, k, d.get ? d : {\n                    enumerable: true,\n                    get: function () { return e[k]; }\n                });\n            }\n        });\n    }\n    n[\"default\"] = e;\n    return Object.freeze(n);\n}\n\nvar acorn__namespace = /*#__PURE__*/_interopNamespace(acorn);\nvar jsx__default = /*#__PURE__*/_interopDefaultLegacy(jsx);\nvar visitorKeys__namespace = /*#__PURE__*/_interopNamespace(visitorKeys);\n\n/**\n * @fileoverview Translates tokens between Acorn format and Esprima format.\n * @author Nicholas C. Zakas\n */\n/* eslint no-underscore-dangle: 0 */\n\n//------------------------------------------------------------------------------\n// Requirements\n//------------------------------------------------------------------------------\n\n// none!\n\n//------------------------------------------------------------------------------\n// Private\n//------------------------------------------------------------------------------\n\n\n// Esprima Token Types\nconst Token = {\n    Boolean: \"Boolean\",\n    EOF: \"<end>\",\n    Identifier: \"Identifier\",\n    PrivateIdentifier: \"PrivateIdentifier\",\n    Keyword: \"Keyword\",\n    Null: \"Null\",\n    Numeric: \"Numeric\",\n    Punctuator: \"Punctuator\",\n    String: \"String\",\n    RegularExpression: \"RegularExpression\",\n    Template: \"Template\",\n    JSXIdentifier: \"JSXIdentifier\",\n    JSXText: \"JSXText\"\n};\n\n/**\n * Converts part of a template into an Esprima token.\n * @param {AcornToken[]} tokens The Acorn tokens representing the template.\n * @param {string} code The source code.\n * @returns {EsprimaToken} The Esprima equivalent of the template token.\n * @private\n */\nfunction convertTemplatePart(tokens, code) {\n    const firstToken = tokens[0],\n        lastTemplateToken = tokens[tokens.length - 1];\n\n    const token = {\n        type: Token.Template,\n        value: code.slice(firstToken.start, lastTemplateToken.end)\n    };\n\n    if (firstToken.loc) {\n        token.loc = {\n            start: firstToken.loc.start,\n            end: lastTemplateToken.loc.end\n        };\n    }\n\n    if (firstToken.range) {\n        token.start = firstToken.range[0];\n        token.end = lastTemplateToken.range[1];\n        token.range = [token.start, token.end];\n    }\n\n    return token;\n}\n\n/**\n * Contains logic to translate Acorn tokens into Esprima tokens.\n * @param {Object} acornTokTypes The Acorn token types.\n * @param {string} code The source code Acorn is parsing. This is necessary\n *      to correct the \"value\" property of some tokens.\n * @constructor\n */\nfunction TokenTranslator(acornTokTypes, code) {\n\n    // token types\n    this._acornTokTypes = acornTokTypes;\n\n    // token buffer for templates\n    this._tokens = [];\n\n    // track the last curly brace\n    this._curlyBrace = null;\n\n    // the source code\n    this._code = code;\n\n}\n\nTokenTranslator.prototype = {\n    constructor: TokenTranslator,\n\n    /**\n     * Translates a single Esprima token to a single Acorn token. This may be\n     * inaccurate due to how templates are handled differently in Esprima and\n     * Acorn, but should be accurate for all other tokens.\n     * @param {AcornToken} token The Acorn token to translate.\n     * @param {Object} extra Espree extra object.\n     * @returns {EsprimaToken} The Esprima version of the token.\n     */\n    translate(token, extra) {\n\n        const type = token.type,\n            tt = this._acornTokTypes;\n\n        if (type === tt.name) {\n            token.type = Token.Identifier;\n\n            // TODO: See if this is an Acorn bug\n            if (token.value === \"static\") {\n                token.type = Token.Keyword;\n            }\n\n            if (extra.ecmaVersion > 5 && (token.value === \"yield\" || token.value === \"let\")) {\n                token.type = Token.Keyword;\n            }\n\n        } else if (type === tt.privateId) {\n            token.type = Token.PrivateIdentifier;\n\n        } else if (type === tt.semi || type === tt.comma ||\n                 type === tt.parenL || type === tt.parenR ||\n                 type === tt.braceL || type === tt.braceR ||\n                 type === tt.dot || type === tt.bracketL ||\n                 type === tt.colon || type === tt.question ||\n                 type === tt.bracketR || type === tt.ellipsis ||\n                 type === tt.arrow || type === tt.jsxTagStart ||\n                 type === tt.incDec || type === tt.starstar ||\n                 type === tt.jsxTagEnd || type === tt.prefix ||\n                 type === tt.questionDot ||\n                 (type.binop && !type.keyword) ||\n                 type.isAssign) {\n\n            token.type = Token.Punctuator;\n            token.value = this._code.slice(token.start, token.end);\n        } else if (type === tt.jsxName) {\n            token.type = Token.JSXIdentifier;\n        } else if (type.label === \"jsxText\" || type === tt.jsxAttrValueToken) {\n            token.type = Token.JSXText;\n        } else if (type.keyword) {\n            if (type.keyword === \"true\" || type.keyword === \"false\") {\n                token.type = Token.Boolean;\n            } else if (type.keyword === \"null\") {\n                token.type = Token.Null;\n            } else {\n                token.type = Token.Keyword;\n            }\n        } else if (type === tt.num) {\n            token.type = Token.Numeric;\n            token.value = this._code.slice(token.start, token.end);\n        } else if (type === tt.string) {\n\n            if (extra.jsxAttrValueToken) {\n                extra.jsxAttrValueToken = false;\n                token.type = Token.JSXText;\n            } else {\n                token.type = Token.String;\n            }\n\n            token.value = this._code.slice(token.start, token.end);\n        } else if (type === tt.regexp) {\n            token.type = Token.RegularExpression;\n            const value = token.value;\n\n            token.regex = {\n                flags: value.flags,\n                pattern: value.pattern\n            };\n            token.value = `/${value.pattern}/${value.flags}`;\n        }\n\n        return token;\n    },\n\n    /**\n     * Function to call during Acorn's onToken handler.\n     * @param {AcornToken} token The Acorn token.\n     * @param {Object} extra The Espree extra object.\n     * @returns {void}\n     */\n    onToken(token, extra) {\n\n        const that = this,\n            tt = this._acornTokTypes,\n            tokens = extra.tokens,\n            templateTokens = this._tokens;\n\n        /**\n         * Flushes the buffered template tokens and resets the template\n         * tracking.\n         * @returns {void}\n         * @private\n         */\n        function translateTemplateTokens() {\n            tokens.push(convertTemplatePart(that._tokens, that._code));\n            that._tokens = [];\n        }\n\n        if (token.type === tt.eof) {\n\n            // might be one last curlyBrace\n            if (this._curlyBrace) {\n                tokens.push(this.translate(this._curlyBrace, extra));\n            }\n\n            return;\n        }\n\n        if (token.type === tt.backQuote) {\n\n            // if there's already a curly, it's not part of the template\n            if (this._curlyBrace) {\n                tokens.push(this.translate(this._curlyBrace, extra));\n                this._curlyBrace = null;\n            }\n\n            templateTokens.push(token);\n\n            // it's the end\n            if (templateTokens.length > 1) {\n                translateTemplateTokens();\n            }\n\n            return;\n        }\n        if (token.type === tt.dollarBraceL) {\n            templateTokens.push(token);\n            translateTemplateTokens();\n            return;\n        }\n        if (token.type === tt.braceR) {\n\n            // if there's already a curly, it's not part of the template\n            if (this._curlyBrace) {\n                tokens.push(this.translate(this._curlyBrace, extra));\n            }\n\n            // store new curly for later\n            this._curlyBrace = token;\n            return;\n        }\n        if (token.type === tt.template || token.type === tt.invalidTemplate) {\n            if (this._curlyBrace) {\n                templateTokens.push(this._curlyBrace);\n                this._curlyBrace = null;\n            }\n\n            templateTokens.push(token);\n            return;\n        }\n\n        if (this._curlyBrace) {\n            tokens.push(this.translate(this._curlyBrace, extra));\n            this._curlyBrace = null;\n        }\n\n        tokens.push(this.translate(token, extra));\n    }\n};\n\n/**\n * @fileoverview A collection of methods for processing Espree's options.\n * @author Kai Cataldo\n */\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\nconst SUPPORTED_VERSIONS = [\n    3,\n    5,\n    6, // 2015\n    7, // 2016\n    8, // 2017\n    9, // 2018\n    10, // 2019\n    11, // 2020\n    12, // 2021\n    13, // 2022\n    14 // 2023\n];\n\n/**\n * Get the latest ECMAScript version supported by Espree.\n * @returns {number} The latest ECMAScript version.\n */\nfunction getLatestEcmaVersion() {\n    return SUPPORTED_VERSIONS[SUPPORTED_VERSIONS.length - 1];\n}\n\n/**\n * Get the list of ECMAScript versions supported by Espree.\n * @returns {number[]} An array containing the supported ECMAScript versions.\n */\nfunction getSupportedEcmaVersions() {\n    return [...SUPPORTED_VERSIONS];\n}\n\n/**\n * Normalize ECMAScript version from the initial config\n * @param {(number|\"latest\")} ecmaVersion ECMAScript version from the initial config\n * @throws {Error} throws an error if the ecmaVersion is invalid.\n * @returns {number} normalized ECMAScript version\n */\nfunction normalizeEcmaVersion(ecmaVersion = 5) {\n\n    let version = ecmaVersion === \"latest\" ? getLatestEcmaVersion() : ecmaVersion;\n\n    if (typeof version !== \"number\") {\n        throw new Error(`ecmaVersion must be a number or \"latest\". Received value of type ${typeof ecmaVersion} instead.`);\n    }\n\n    // Calculate ECMAScript edition number from official year version starting with\n    // ES2015, which corresponds with ES6 (or a difference of 2009).\n    if (version >= 2015) {\n        version -= 2009;\n    }\n\n    if (!SUPPORTED_VERSIONS.includes(version)) {\n        throw new Error(\"Invalid ecmaVersion.\");\n    }\n\n    return version;\n}\n\n/**\n * Normalize sourceType from the initial config\n * @param {string} sourceType to normalize\n * @throws {Error} throw an error if sourceType is invalid\n * @returns {string} normalized sourceType\n */\nfunction normalizeSourceType(sourceType = \"script\") {\n    if (sourceType === \"script\" || sourceType === \"module\") {\n        return sourceType;\n    }\n\n    if (sourceType === \"commonjs\") {\n        return \"script\";\n    }\n\n    throw new Error(\"Invalid sourceType.\");\n}\n\n/**\n * Normalize parserOptions\n * @param {Object} options the parser options to normalize\n * @throws {Error} throw an error if found invalid option.\n * @returns {Object} normalized options\n */\nfunction normalizeOptions(options) {\n    const ecmaVersion = normalizeEcmaVersion(options.ecmaVersion);\n    const sourceType = normalizeSourceType(options.sourceType);\n    const ranges = options.range === true;\n    const locations = options.loc === true;\n\n    if (ecmaVersion !== 3 && options.allowReserved) {\n\n        // a value of `false` is intentionally allowed here, so a shared config can overwrite it when needed\n        throw new Error(\"`allowReserved` is only supported when ecmaVersion is 3\");\n    }\n    if (typeof options.allowReserved !== \"undefined\" && typeof options.allowReserved !== \"boolean\") {\n        throw new Error(\"`allowReserved`, when present, must be `true` or `false`\");\n    }\n    const allowReserved = ecmaVersion === 3 ? (options.allowReserved || \"never\") : false;\n    const ecmaFeatures = options.ecmaFeatures || {};\n    const allowReturnOutsideFunction = options.sourceType === \"commonjs\" ||\n        Boolean(ecmaFeatures.globalReturn);\n\n    if (sourceType === \"module\" && ecmaVersion < 6) {\n        throw new Error(\"sourceType 'module' is not supported when ecmaVersion < 2015. Consider adding `{ ecmaVersion: 2015 }` to the parser options.\");\n    }\n\n    return Object.assign({}, options, {\n        ecmaVersion,\n        sourceType,\n        ranges,\n        locations,\n        allowReserved,\n        allowReturnOutsideFunction\n    });\n}\n\n/* eslint-disable no-param-reassign*/\n\n\nconst STATE = Symbol(\"espree's internal state\");\nconst ESPRIMA_FINISH_NODE = Symbol(\"espree's esprimaFinishNode\");\n\n\n/**\n * Converts an Acorn comment to a Esprima comment.\n * @param {boolean} block True if it's a block comment, false if not.\n * @param {string} text The text of the comment.\n * @param {int} start The index at which the comment starts.\n * @param {int} end The index at which the comment ends.\n * @param {Location} startLoc The location at which the comment starts.\n * @param {Location} endLoc The location at which the comment ends.\n * @param {string} code The source code being parsed.\n * @returns {Object} The comment object.\n * @private\n */\nfunction convertAcornCommentToEsprimaComment(block, text, start, end, startLoc, endLoc, code) {\n    let type;\n\n    if (block) {\n        type = \"Block\";\n    } else if (code.slice(start, start + 2) === \"#!\") {\n        type = \"Hashbang\";\n    } else {\n        type = \"Line\";\n    }\n\n    const comment = {\n        type,\n        value: text\n    };\n\n    if (typeof start === \"number\") {\n        comment.start = start;\n        comment.end = end;\n        comment.range = [start, end];\n    }\n\n    if (typeof startLoc === \"object\") {\n        comment.loc = {\n            start: startLoc,\n            end: endLoc\n        };\n    }\n\n    return comment;\n}\n\nvar espree = () => Parser => {\n    const tokTypes = Object.assign({}, Parser.acorn.tokTypes);\n\n    if (Parser.acornJsx) {\n        Object.assign(tokTypes, Parser.acornJsx.tokTypes);\n    }\n\n    return class Espree extends Parser {\n        constructor(opts, code) {\n            if (typeof opts !== \"object\" || opts === null) {\n                opts = {};\n            }\n            if (typeof code !== \"string\" && !(code instanceof String)) {\n                code = String(code);\n            }\n\n            // save original source type in case of commonjs\n            const originalSourceType = opts.sourceType;\n            const options = normalizeOptions(opts);\n            const ecmaFeatures = options.ecmaFeatures || {};\n            const tokenTranslator =\n                options.tokens === true\n                    ? new TokenTranslator(tokTypes, code)\n                    : null;\n\n            /*\n             * Data that is unique to Espree and is not represented internally\n             * in Acorn.\n             *\n             * For ES2023 hashbangs, Espree will call `onComment()` during the\n             * constructor, so we must define state before having access to\n             * `this`.\n             */\n            const state = {\n                originalSourceType: originalSourceType || options.sourceType,\n                tokens: tokenTranslator ? [] : null,\n                comments: options.comment === true ? [] : null,\n                impliedStrict: ecmaFeatures.impliedStrict === true && options.ecmaVersion >= 5,\n                ecmaVersion: options.ecmaVersion,\n                jsxAttrValueToken: false,\n                lastToken: null,\n                templateElements: []\n            };\n\n            // Initialize acorn parser.\n            super({\n\n                // do not use spread, because we don't want to pass any unknown options to acorn\n                ecmaVersion: options.ecmaVersion,\n                sourceType: options.sourceType,\n                ranges: options.ranges,\n                locations: options.locations,\n                allowReserved: options.allowReserved,\n\n                // Truthy value is true for backward compatibility.\n                allowReturnOutsideFunction: options.allowReturnOutsideFunction,\n\n                // Collect tokens\n                onToken: token => {\n                    if (tokenTranslator) {\n\n                        // Use `tokens`, `ecmaVersion`, and `jsxAttrValueToken` in the state.\n                        tokenTranslator.onToken(token, state);\n                    }\n                    if (token.type !== tokTypes.eof) {\n                        state.lastToken = token;\n                    }\n                },\n\n                // Collect comments\n                onComment: (block, text, start, end, startLoc, endLoc) => {\n                    if (state.comments) {\n                        const comment = convertAcornCommentToEsprimaComment(block, text, start, end, startLoc, endLoc, code);\n\n                        state.comments.push(comment);\n                    }\n                }\n            }, code);\n\n            /*\n             * We put all of this data into a symbol property as a way to avoid\n             * potential naming conflicts with future versions of Acorn.\n             */\n            this[STATE] = state;\n        }\n\n        tokenize() {\n            do {\n                this.next();\n            } while (this.type !== tokTypes.eof);\n\n            // Consume the final eof token\n            this.next();\n\n            const extra = this[STATE];\n            const tokens = extra.tokens;\n\n            if (extra.comments) {\n                tokens.comments = extra.comments;\n            }\n\n            return tokens;\n        }\n\n        finishNode(...args) {\n            const result = super.finishNode(...args);\n\n            return this[ESPRIMA_FINISH_NODE](result);\n        }\n\n        finishNodeAt(...args) {\n            const result = super.finishNodeAt(...args);\n\n            return this[ESPRIMA_FINISH_NODE](result);\n        }\n\n        parse() {\n            const extra = this[STATE];\n            const program = super.parse();\n\n            program.sourceType = extra.originalSourceType;\n\n            if (extra.comments) {\n                program.comments = extra.comments;\n            }\n            if (extra.tokens) {\n                program.tokens = extra.tokens;\n            }\n\n            /*\n             * Adjust opening and closing position of program to match Esprima.\n             * Acorn always starts programs at range 0 whereas Esprima starts at the\n             * first AST node's start (the only real difference is when there's leading\n             * whitespace or leading comments). Acorn also counts trailing whitespace\n             * as part of the program whereas Esprima only counts up to the last token.\n             */\n            if (program.body.length) {\n                const [firstNode] = program.body;\n\n                if (program.range) {\n                    program.range[0] = firstNode.range[0];\n                }\n                if (program.loc) {\n                    program.loc.start = firstNode.loc.start;\n                }\n                program.start = firstNode.start;\n            }\n            if (extra.lastToken) {\n                if (program.range) {\n                    program.range[1] = extra.lastToken.range[1];\n                }\n                if (program.loc) {\n                    program.loc.end = extra.lastToken.loc.end;\n                }\n                program.end = extra.lastToken.end;\n            }\n\n\n            /*\n             * https://github.com/eslint/espree/issues/349\n             * Ensure that template elements have correct range information.\n             * This is one location where Acorn produces a different value\n             * for its start and end properties vs. the values present in the\n             * range property. In order to avoid confusion, we set the start\n             * and end properties to the values that are present in range.\n             * This is done here, instead of in finishNode(), because Acorn\n             * uses the values of start and end internally while parsing, making\n             * it dangerous to change those values while parsing is ongoing.\n             * By waiting until the end of parsing, we can safely change these\n             * values without affect any other part of the process.\n             */\n            this[STATE].templateElements.forEach(templateElement => {\n                const startOffset = -1;\n                const endOffset = templateElement.tail ? 1 : 2;\n\n                templateElement.start += startOffset;\n                templateElement.end += endOffset;\n\n                if (templateElement.range) {\n                    templateElement.range[0] += startOffset;\n                    templateElement.range[1] += endOffset;\n                }\n\n                if (templateElement.loc) {\n                    templateElement.loc.start.column += startOffset;\n                    templateElement.loc.end.column += endOffset;\n                }\n            });\n\n            return program;\n        }\n\n        parseTopLevel(node) {\n            if (this[STATE].impliedStrict) {\n                this.strict = true;\n            }\n            return super.parseTopLevel(node);\n        }\n\n        /**\n         * Overwrites the default raise method to throw Esprima-style errors.\n         * @param {int} pos The position of the error.\n         * @param {string} message The error message.\n         * @throws {SyntaxError} A syntax error.\n         * @returns {void}\n         */\n        raise(pos, message) {\n            const loc = Parser.acorn.getLineInfo(this.input, pos);\n            const err = new SyntaxError(message);\n\n            err.index = pos;\n            err.lineNumber = loc.line;\n            err.column = loc.column + 1; // acorn uses 0-based columns\n            throw err;\n        }\n\n        /**\n         * Overwrites the default raise method to throw Esprima-style errors.\n         * @param {int} pos The position of the error.\n         * @param {string} message The error message.\n         * @throws {SyntaxError} A syntax error.\n         * @returns {void}\n         */\n        raiseRecoverable(pos, message) {\n            this.raise(pos, message);\n        }\n\n        /**\n         * Overwrites the default unexpected method to throw Esprima-style errors.\n         * @param {int} pos The position of the error.\n         * @throws {SyntaxError} A syntax error.\n         * @returns {void}\n         */\n        unexpected(pos) {\n            let message = \"Unexpected token\";\n\n            if (pos !== null && pos !== void 0) {\n                this.pos = pos;\n\n                if (this.options.locations) {\n                    while (this.pos < this.lineStart) {\n                        this.lineStart = this.input.lastIndexOf(\"\\n\", this.lineStart - 2) + 1;\n                        --this.curLine;\n                    }\n                }\n\n                this.nextToken();\n            }\n\n            if (this.end > this.start) {\n                message += ` ${this.input.slice(this.start, this.end)}`;\n            }\n\n            this.raise(this.start, message);\n        }\n\n        /*\n        * Esprima-FB represents JSX strings as tokens called \"JSXText\", but Acorn-JSX\n        * uses regular tt.string without any distinction between this and regular JS\n        * strings. As such, we intercept an attempt to read a JSX string and set a flag\n        * on extra so that when tokens are converted, the next token will be switched\n        * to JSXText via onToken.\n        */\n        jsx_readString(quote) { // eslint-disable-line camelcase\n            const result = super.jsx_readString(quote);\n\n            if (this.type === tokTypes.string) {\n                this[STATE].jsxAttrValueToken = true;\n            }\n            return result;\n        }\n\n        /**\n         * Performs last-minute Esprima-specific compatibility checks and fixes.\n         * @param {ASTNode} result The node to check.\n         * @returns {ASTNode} The finished node.\n         */\n        [ESPRIMA_FINISH_NODE](result) {\n\n            // Acorn doesn't count the opening and closing backticks as part of templates\n            // so we have to adjust ranges/locations appropriately.\n            if (result.type === \"TemplateElement\") {\n\n                // save template element references to fix start/end later\n                this[STATE].templateElements.push(result);\n            }\n\n            if (result.type.includes(\"Function\") && !result.generator) {\n                result.generator = false;\n            }\n\n            return result;\n        }\n    };\n};\n\nconst version$1 = \"9.5.0\";\n\n/**\n * @fileoverview Main Espree file that converts Acorn into Esprima output.\n *\n * This file contains code from the following MIT-licensed projects:\n * 1. Acorn\n * 2. Babylon\n * 3. Babel-ESLint\n *\n * This file also contains code from Esprima, which is BSD licensed.\n *\n * Acorn is Copyright 2012-2015 Acorn Contributors (https://github.com/marijnh/acorn/blob/master/AUTHORS)\n * Babylon is Copyright 2014-2015 various contributors (https://github.com/babel/babel/blob/master/packages/babylon/AUTHORS)\n * Babel-ESLint is Copyright 2014-2015 Sebastian McKenzie <sebmck@gmail.com>\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * * Redistributions of source code must retain the above copyright\n *   notice, this list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright\n *   notice, this list of conditions and the following disclaimer in the\n *   documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * Esprima is Copyright (c) jQuery Foundation, Inc. and Contributors, All Rights Reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n *   * Redistributions of source code must retain the above copyright\n *     notice, this list of conditions and the following disclaimer.\n *   * Redistributions in binary form must reproduce the above copyright\n *     notice, this list of conditions and the following disclaimer in the\n *     documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n\n// To initialize lazily.\nconst parsers = {\n    _regular: null,\n    _jsx: null,\n\n    get regular() {\n        if (this._regular === null) {\n            this._regular = acorn__namespace.Parser.extend(espree());\n        }\n        return this._regular;\n    },\n\n    get jsx() {\n        if (this._jsx === null) {\n            this._jsx = acorn__namespace.Parser.extend(jsx__default[\"default\"](), espree());\n        }\n        return this._jsx;\n    },\n\n    get(options) {\n        const useJsx = Boolean(\n            options &&\n            options.ecmaFeatures &&\n            options.ecmaFeatures.jsx\n        );\n\n        return useJsx ? this.jsx : this.regular;\n    }\n};\n\n//------------------------------------------------------------------------------\n// Tokenizer\n//------------------------------------------------------------------------------\n\n/**\n * Tokenizes the given code.\n * @param {string} code The code to tokenize.\n * @param {Object} options Options defining how to tokenize.\n * @returns {Token[]} An array of tokens.\n * @throws {SyntaxError} If the input code is invalid.\n * @private\n */\nfunction tokenize(code, options) {\n    const Parser = parsers.get(options);\n\n    // Ensure to collect tokens.\n    if (!options || options.tokens !== true) {\n        options = Object.assign({}, options, { tokens: true }); // eslint-disable-line no-param-reassign\n    }\n\n    return new Parser(options, code).tokenize();\n}\n\n//------------------------------------------------------------------------------\n// Parser\n//------------------------------------------------------------------------------\n\n/**\n * Parses the given code.\n * @param {string} code The code to tokenize.\n * @param {Object} options Options defining how to tokenize.\n * @returns {ASTNode} The \"Program\" AST node.\n * @throws {SyntaxError} If the input code is invalid.\n */\nfunction parse(code, options) {\n    const Parser = parsers.get(options);\n\n    return new Parser(options, code).parse();\n}\n\n//------------------------------------------------------------------------------\n// Public\n//------------------------------------------------------------------------------\n\nconst version = version$1;\nconst name = \"espree\";\n\n/* istanbul ignore next */\nconst VisitorKeys = (function() {\n    return visitorKeys__namespace.KEYS;\n}());\n\n// Derive node types from VisitorKeys\n/* istanbul ignore next */\nconst Syntax = (function() {\n    let key,\n        types = {};\n\n    if (typeof Object.create === \"function\") {\n        types = Object.create(null);\n    }\n\n    for (key in VisitorKeys) {\n        if (Object.hasOwnProperty.call(VisitorKeys, key)) {\n            types[key] = key;\n        }\n    }\n\n    if (typeof Object.freeze === \"function\") {\n        Object.freeze(types);\n    }\n\n    return types;\n}());\n\nconst latestEcmaVersion = getLatestEcmaVersion();\n\nconst supportedEcmaVersions = getSupportedEcmaVersions();\n\nexports.Syntax = Syntax;\nexports.VisitorKeys = VisitorKeys;\nexports.latestEcmaVersion = latestEcmaVersion;\nexports.name = name;\nexports.parse = parse;\nexports.supportedEcmaVersions = supportedEcmaVersions;\nexports.tokenize = tokenize;\nexports.version = version;\n//# sourceMappingURL=espree.cjs.map\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/ZXNwcmltYUA0LjAuMQ==",
    "content": "/bin/esvalidate.js\u001e@#!/usr/bin/env node\n/*\n  Copyright JS Foundation and other contributors, https://js.foundation/\n\n  Redistribution and use in source and binary forms, with or without\n  modification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n  ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n/*jslint sloppy:true plusplus:true node:true rhino:true */\n/*global phantom:true */\n\nvar fs, system, esprima, options, fnames, forceFile, count;\n\nif (typeof esprima === 'undefined') {\n    // PhantomJS can only require() relative files\n    if (typeof phantom === 'object') {\n        fs = require('fs');\n        system = require('system');\n        esprima = require('./esprima');\n    } else if (typeof require === 'function') {\n        fs = require('fs');\n        try {\n            esprima = require('esprima');\n        } catch (e) {\n            esprima = require('../');\n        }\n    } else if (typeof load === 'function') {\n        try {\n            load('esprima.js');\n        } catch (e) {\n            load('../esprima.js');\n        }\n    }\n}\n\n// Shims to Node.js objects when running under PhantomJS 1.7+.\nif (typeof phantom === 'object') {\n    fs.readFileSync = fs.read;\n    process = {\n        argv: [].slice.call(system.args),\n        exit: phantom.exit,\n        on: function (evt, callback) {\n            callback();\n        }\n    };\n    process.argv.unshift('phantomjs');\n}\n\n// Shims to Node.js objects when running under Rhino.\nif (typeof console === 'undefined' && typeof process === 'undefined') {\n    console = { log: print };\n    fs = { readFileSync: readFile };\n    process = {\n        argv: arguments,\n        exit: quit,\n        on: function (evt, callback) {\n            callback();\n        }\n    };\n    process.argv.unshift('esvalidate.js');\n    process.argv.unshift('rhino');\n}\n\nfunction showUsage() {\n    console.log('Usage:');\n    console.log('   esvalidate [options] [file.js...]');\n    console.log();\n    console.log('Available options:');\n    console.log();\n    console.log('  --format=type  Set the report format, plain (default) or junit');\n    console.log('  -v, --version  Print program version');\n    console.log();\n    process.exit(1);\n}\n\noptions = {\n    format: 'plain'\n};\n\nfnames = [];\n\nprocess.argv.splice(2).forEach(function (entry) {\n\n    if (forceFile || entry === '-' || entry.slice(0, 1) !== '-') {\n        fnames.push(entry);\n    } else if (entry === '-h' || entry === '--help') {\n        showUsage();\n    } else if (entry === '-v' || entry === '--version') {\n        console.log('ECMAScript Validator (using Esprima version', esprima.version, ')');\n        console.log();\n        process.exit(0);\n    } else if (entry.slice(0, 9) === '--format=') {\n        options.format = entry.slice(9);\n        if (options.format !== 'plain' && options.format !== 'junit') {\n            console.log('Error: unknown report format ' + options.format + '.');\n            process.exit(1);\n        }\n    } else if (entry === '--') {\n        forceFile = true;\n    } else {\n        console.log('Error: unknown option ' + entry + '.');\n        process.exit(1);\n    }\n});\n\nif (fnames.length === 0) {\n    fnames.push('');\n}\n\nif (options.format === 'junit') {\n    console.log('<?xml version=\"1.0\" encoding=\"UTF-8\"?>');\n    console.log('<testsuites>');\n}\n\ncount = 0;\n\nfunction run(fname, content) {\n    var timestamp, syntax, name;\n    try {\n        if (typeof content !== 'string') {\n            throw content;\n        }\n\n        if (content[0] === '#' && content[1] === '!') {\n            content = '//' + content.substr(2, content.length);\n        }\n\n        timestamp = Date.now();\n        syntax = esprima.parse(content, { tolerant: true });\n\n        if (options.format === 'junit') {\n\n            name = fname;\n            if (name.lastIndexOf('/') >= 0) {\n                name = name.slice(name.lastIndexOf('/') + 1);\n            }\n\n            console.log('<testsuite name=\"' + fname + '\" errors=\"0\" ' +\n                ' failures=\"' + syntax.errors.length + '\" ' +\n                ' tests=\"' + syntax.errors.length + '\" ' +\n                ' time=\"' + Math.round((Date.now() - timestamp) / 1000) +\n                '\">');\n\n            syntax.errors.forEach(function (error) {\n                var msg = error.message;\n                msg = msg.replace(/^Line\\ [0-9]*\\:\\ /, '');\n                console.log('  <testcase name=\"Line ' + error.lineNumber + ': ' + msg + '\" ' +\n                    ' time=\"0\">');\n                console.log('    <error type=\"SyntaxError\" message=\"' + error.message + '\">' +\n                    error.message + '(' + name + ':' + error.lineNumber + ')' +\n                    '</error>');\n                console.log('  </testcase>');\n            });\n\n            console.log('</testsuite>');\n\n        } else if (options.format === 'plain') {\n\n            syntax.errors.forEach(function (error) {\n                var msg = error.message;\n                msg = msg.replace(/^Line\\ [0-9]*\\:\\ /, '');\n                msg = fname + ':' + error.lineNumber + ': ' + msg;\n                console.log(msg);\n                ++count;\n            });\n\n        }\n    } catch (e) {\n        ++count;\n        if (options.format === 'junit') {\n            console.log('<testsuite name=\"' + fname + '\" errors=\"1\" failures=\"0\" tests=\"1\" ' +\n                ' time=\"' + Math.round((Date.now() - timestamp) / 1000) + '\">');\n            console.log(' <testcase name=\"' + e.message + '\" ' + ' time=\"0\">');\n            console.log(' <error type=\"ParseError\" message=\"' + e.message + '\">' +\n                e.message + '(' + fname + ((e.lineNumber) ? ':' + e.lineNumber : '') +\n                ')</error>');\n            console.log(' </testcase>');\n            console.log('</testsuite>');\n        } else {\n            console.log(fname + ':' + e.lineNumber + ': ' + e.message.replace(/^Line\\ [0-9]*\\:\\ /, ''));\n        }\n    }\n}\n\nfnames.forEach(function (fname) {\n    var content = '';\n    try {\n        if (fname && (fname !== '-' || forceFile)) {\n            content = fs.readFileSync(fname, 'utf-8');\n        } else {\n            fname = '';\n            process.stdin.resume();\n            process.stdin.on('data', function(chunk) {\n                content += chunk;\n            });\n            process.stdin.on('end', function() {\n                run(fname, content);\n            });\n            return;\n        }\n    } catch (e) {\n        content = e;\n    }\n    run(fname, content);\n});\n\nprocess.on('exit', function () {\n    if (options.format === 'junit') {\n        console.log('</testsuites>');\n    }\n\n    if (count > 0) {\n        process.exit(1);\n    }\n\n    if (count === 0 && typeof phantom === 'object') {\n        process.exit(0);\n    }\n});\n/ChangeLog&2018-06-17: Version 4.0.1\n\n      *  Fix parsing async get/set in a class (issue 1861, 1875)\n      *  Account for different return statement argument (issue 1829, 1897, 1928)\n      *  Correct the handling of HTML comment when parsing a module (issue 1841)\n      *  Fix incorrect parse async with proto-identifier-shorthand (issue 1847)\n      *  Fix negative column in binary expression (issue 1844)\n      *  Fix incorrect YieldExpression  in object methods (issue 1834)\n      *  Various documentation fixes\n\n2017-06-10: Version 4.0.0\n\n      * Support ES2017 async function and await expression (issue 1079)\n      * Support ES2017 trailing commas in function parameters (issue 1550)\n      * Explicitly distinguish parsing a module vs a script (issue 1576)\n      * Fix JSX non-empty container (issue 1786)\n      * Allow JSX element in a yield expression (issue 1765)\n      * Allow `in` expression in a concise body with a function body (issue 1793)\n      * Setter function argument must not be a rest parameter (issue 1693)\n      * Limit strict mode directive to functions with a simple parameter list (issue 1677)\n      * Prohibit any escape sequence in a reserved word (issue 1612)\n      * Only permit hex digits in hex escape sequence (issue 1619)\n      * Prohibit labelled class/generator/function declaration (issue 1484)\n      * Limit function declaration as if statement clause only in non-strict mode (issue 1657)\n      * Tolerate missing ) in a with and do-while statement (issue 1481)\n\n2016-12-22: Version 3.1.3\n\n      * Support binding patterns as rest element (issue 1681)\n      * Account for different possible arguments of a yield expression (issue 1469)\n\n2016-11-24: Version 3.1.2\n\n      * Ensure that import specifier is more restrictive (issue 1615)\n      * Fix duplicated JSX tokens (issue 1613)\n      * Scan template literal in a JSX expression container (issue 1622)\n      * Improve XHTML entity scanning in JSX (issue 1629)\n\n2016-10-31: Version 3.1.1\n\n      * Fix assignment expression problem in an export declaration (issue 1596)\n      * Fix incorrect tokenization of hex digits (issue 1605)\n\n2016-10-09: Version 3.1.0\n\n      * Do not implicitly collect comments when comment attachment is specified (issue 1553)\n      * Fix incorrect handling of duplicated proto shorthand fields (issue 1485)\n      * Prohibit initialization in some variants of for statements (issue 1309, 1561)\n      * Fix incorrect parsing of export specifier (issue 1578)\n      * Fix ESTree compatibility for assignment pattern (issue 1575)\n\n2016-09-03: Version 3.0.0\n\n      * Support ES2016 exponentiation expression (issue 1490)\n      * Support JSX syntax (issue 1467)\n      * Use the latest Unicode 8.0 (issue 1475)\n      * Add the support for syntax node delegate (issue 1435)\n      * Fix ESTree compatibility on meta property (issue 1338)\n      * Fix ESTree compatibility on default parameter value (issue 1081)\n      * Fix ESTree compatibility on try handler (issue 1030)\n\n2016-08-23: Version 2.7.3\n\n      * Fix tokenizer confusion with a comment (issue 1493, 1516)\n\n2016-02-02: Version 2.7.2\n\n      * Fix out-of-bound error location in an invalid string literal (issue 1457)\n      * Fix shorthand object destructuring defaults in variable declarations (issue 1459)\n\n2015-12-10: Version 2.7.1\n\n      * Do not allow trailing comma in a variable declaration (issue 1360)\n      * Fix assignment to `let` in non-strict mode (issue 1376)\n      * Fix missing delegate property in YieldExpression (issue 1407)\n\n2015-10-22: Version 2.7.0\n\n      * Fix the handling of semicolon in a break statement (issue 1044)\n      * Run the test suite with major web browsers (issue 1259, 1317)\n      * Allow `let` as an identifier in non-strict mode (issue 1289)\n      * Attach orphaned comments as `innerComments` (issue 1328)\n      * Add the support for token delegator (issue 1332)\n\n2015-09-01: Version 2.6.0\n\n      * Properly allow or prohibit `let` in a binding identifier/pattern (issue 1048, 1098)\n      * Add sourceType field for Program node (issue 1159)\n      * Ensure that strict mode reserved word binding throw an error (issue 1171)\n      * Run the test suite with Node.js and IE 11 on Windows (issue 1294)\n      * Allow binding pattern with no initializer in a for statement (issue 1301)\n\n2015-07-31: Version 2.5.0\n\n      * Run the test suite in a browser environment (issue 1004)\n      * Ensure a comma between imported default binding and named imports (issue 1046)\n      * Distinguish `yield` as a keyword vs an identifier (issue 1186)\n      * Support ES6 meta property `new.target` (issue 1203)\n      * Fix the syntax node for yield with expression (issue 1223)\n      * Fix the check of duplicated proto in property names (issue 1225)\n      * Fix ES6 Unicode escape in identifier name (issue 1229)\n      * Support ES6 IdentifierStart and IdentifierPart (issue 1232)\n      * Treat await as a reserved word when parsing as a module (issue 1234)\n      * Recognize identifier characters from Unicode SMP (issue 1244)\n      * Ensure that export and import can be followed by a comma (issue 1250)\n      * Fix yield operator precedence (issue 1262)\n\n2015-07-01: Version 2.4.1\n\n      * Fix some cases of comment attachment (issue 1071, 1175)\n      * Fix the handling of destructuring in function arguments (issue 1193)\n      * Fix invalid ranges in assignment expression (issue 1201)\n\n2015-06-26: Version 2.4.0\n\n      * Support ES6 for-of iteration (issue 1047)\n      * Support ES6 spread arguments (issue 1169)\n      * Minimize npm payload (issue 1191)\n\n2015-06-16: Version 2.3.0\n\n      * Support ES6 generator (issue 1033)\n      * Improve parsing of regular expressions with `u` flag (issue 1179)\n\n2015-04-17: Version 2.2.0\n\n      * Support ES6 import and export declarations (issue 1000)\n      * Fix line terminator before arrow not recognized as error (issue 1009)\n      * Support ES6 destructuring (issue 1045)\n      * Support ES6 template literal (issue 1074)\n      * Fix the handling of invalid/incomplete string escape sequences (issue 1106)\n      * Fix ES3 static member access restriction (issue 1120)\n      * Support for `super` in ES6 class (issue 1147)\n\n2015-03-09: Version 2.1.0\n\n      * Support ES6 class (issue 1001)\n      * Support ES6 rest parameter (issue 1011)\n      * Expand the location of property getter, setter, and methods (issue 1029)\n      * Enable TryStatement transition to a single handler (issue 1031)\n      * Support ES6 computed property name (issue 1037)\n      * Tolerate unclosed block comment (issue 1041)\n      * Support ES6 lexical declaration (issue 1065)\n\n2015-02-06: Version 2.0.0\n\n      * Support ES6 arrow function (issue 517)\n      * Support ES6 Unicode code point escape (issue 521)\n      * Improve the speed and accuracy of comment attachment (issue 522)\n      * Support ES6 default parameter (issue 519)\n      * Support ES6 regular expression flags (issue 557)\n      * Fix scanning of implicit octal literals (issue 565)\n      * Fix the handling of automatic semicolon insertion (issue 574)\n      * Support ES6 method definition (issue 620)\n      * Support ES6 octal integer literal (issue 621)\n      * Support ES6 binary integer literal (issue 622)\n      * Support ES6 object literal property value shorthand (issue 624)\n\n2015-03-03: Version 1.2.5\n\n      * Fix scanning of implicit octal literals (issue 565)\n\n2015-02-05: Version 1.2.4\n\n      * Fix parsing of LeftHandSideExpression in ForInStatement (issue 560)\n      * Fix the handling of automatic semicolon insertion (issue 574)\n\n2015-01-18: Version 1.2.3\n\n      * Fix division by this (issue 616)\n\n2014-05-18: Version 1.2.2\n\n      * Fix duplicated tokens when collecting comments (issue 537)\n\n2014-05-04: Version 1.2.1\n\n      * Ensure that Program node may still have leading comments (issue 536)\n\n2014-04-29: Version 1.2.0\n\n      * Fix semicolon handling for expression statement (issue 462, 533)\n      * Disallow escaped characters in regular expression flags (issue 503)\n      * Performance improvement for location tracking (issue 520)\n      * Improve the speed of comment attachment (issue 522)\n\n2014-03-26: Version 1.1.1\n\n      * Fix token handling of forward slash after an array literal (issue 512)\n\n2014-03-23: Version 1.1.0\n\n      * Optionally attach comments to the owning syntax nodes (issue 197)\n      * Simplify binary parsing with stack-based shift reduce (issue 352)\n      * Always include the raw source of literals (issue 376)\n      * Add optional input source information (issue 386)\n      * Tokenizer API for pure lexical scanning (issue 398)\n      * Improve the web site and its online demos (issue 337, 400, 404)\n      * Performance improvement for location tracking (issue 417, 424)\n      * Support HTML comment syntax (issue 451)\n      * Drop support for legacy browsers (issue 474)\n\n2013-08-27: Version 1.0.4\n\n      * Minimize the payload for packages (issue 362)\n      * Fix missing cases on an empty switch statement (issue 436)\n      * Support escaped ] in regexp literal character classes (issue 442)\n      * Tolerate invalid left-hand side expression (issue 130)\n\n2013-05-17: Version 1.0.3\n\n      * Variable declaration needs at least one declarator (issue 391)\n      * Fix benchmark's variance unit conversion (issue 397)\n      * IE < 9: \\v should be treated as vertical tab (issue 405)\n      * Unary expressions should always have prefix: true (issue 418)\n      * Catch clause should only accept an identifier (issue 423)\n      * Tolerate setters without parameter (issue 426)\n\n2012-11-02: Version 1.0.2\n\n    Improvement:\n\n      * Fix esvalidate JUnit output upon a syntax error (issue 374)\n\n2012-10-28: Version 1.0.1\n\n    Improvements:\n\n      * esvalidate understands shebang in a Unix shell script (issue 361)\n      * esvalidate treats fatal parsing failure as an error (issue 361)\n      * Reduce Node.js package via .npmignore (issue 362)\n\n2012-10-22: Version 1.0.0\n\n    Initial release.\n/bin/esparse.js\u0013T#!/usr/bin/env node\n/*\n  Copyright JS Foundation and other contributors, https://js.foundation/\n\n  Redistribution and use in source and binary forms, with or without\n  modification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n  ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n/*jslint sloppy:true node:true rhino:true */\n\nvar fs, esprima, fname, forceFile, content, options, syntax;\n\nif (typeof require === 'function') {\n    fs = require('fs');\n    try {\n        esprima = require('esprima');\n    } catch (e) {\n        esprima = require('../');\n    }\n} else if (typeof load === 'function') {\n    try {\n        load('esprima.js');\n    } catch (e) {\n        load('../esprima.js');\n    }\n}\n\n// Shims to Node.js objects when running under Rhino.\nif (typeof console === 'undefined' && typeof process === 'undefined') {\n    console = { log: print };\n    fs = { readFileSync: readFile };\n    process = { argv: arguments, exit: quit };\n    process.argv.unshift('esparse.js');\n    process.argv.unshift('rhino');\n}\n\nfunction showUsage() {\n    console.log('Usage:');\n    console.log('   esparse [options] [file.js]');\n    console.log();\n    console.log('Available options:');\n    console.log();\n    console.log('  --comment      Gather all line and block comments in an array');\n    console.log('  --loc          Include line-column location info for each syntax node');\n    console.log('  --range        Include index-based range for each syntax node');\n    console.log('  --raw          Display the raw value of literals');\n    console.log('  --tokens       List all tokens in an array');\n    console.log('  --tolerant     Tolerate errors on a best-effort basis (experimental)');\n    console.log('  -v, --version  Shows program version');\n    console.log();\n    process.exit(1);\n}\n\noptions = {};\n\nprocess.argv.splice(2).forEach(function (entry) {\n\n    if (forceFile || entry === '-' || entry.slice(0, 1) !== '-') {\n        if (typeof fname === 'string') {\n            console.log('Error: more than one input file.');\n            process.exit(1);\n        } else {\n            fname = entry;\n        }\n    } else if (entry === '-h' || entry === '--help') {\n        showUsage();\n    } else if (entry === '-v' || entry === '--version') {\n        console.log('ECMAScript Parser (using Esprima version', esprima.version, ')');\n        console.log();\n        process.exit(0);\n    } else if (entry === '--comment') {\n        options.comment = true;\n    } else if (entry === '--loc') {\n        options.loc = true;\n    } else if (entry === '--range') {\n        options.range = true;\n    } else if (entry === '--raw') {\n        options.raw = true;\n    } else if (entry === '--tokens') {\n        options.tokens = true;\n    } else if (entry === '--tolerant') {\n        options.tolerant = true;\n    } else if (entry === '--') {\n        forceFile = true;\n    } else {\n        console.log('Error: unknown option ' + entry + '.');\n        process.exit(1);\n    }\n});\n\n// Special handling for regular expression literal since we need to\n// convert it to a string literal, otherwise it will be decoded\n// as object \"{}\" and the regular expression would be lost.\nfunction adjustRegexLiteral(key, value) {\n    if (key === 'value' && value instanceof RegExp) {\n        value = value.toString();\n    }\n    return value;\n}\n\nfunction run(content) {\n    syntax = esprima.parse(content, options);\n    console.log(JSON.stringify(syntax, adjustRegexLiteral, 4));\n}\n\ntry {\n    if (fname && (fname !== '-' || forceFile)) {\n        run(fs.readFileSync(fname, 'utf-8'));\n    } else {\n        var content = '';\n        process.stdin.resume();\n        process.stdin.on('data', function(chunk) {\n            content += chunk;\n        });\n        process.stdin.on('end', function() {\n            run(content);\n        });\n    }\n} catch (e) {\n    console.log('Error: ' + e.message);\n    process.exit(1);\n}\n/README.md\t{[![NPM version](https://img.shields.io/npm/v/esprima.svg)](https://www.npmjs.com/package/esprima)\n[![npm download](https://img.shields.io/npm/dm/esprima.svg)](https://www.npmjs.com/package/esprima)\n[![Build Status](https://img.shields.io/travis/jquery/esprima/master.svg)](https://travis-ci.org/jquery/esprima)\n[![Coverage Status](https://img.shields.io/codecov/c/github/jquery/esprima/master.svg)](https://codecov.io/github/jquery/esprima)\n\n**Esprima** ([esprima.org](http://esprima.org), BSD license) is a high performance,\nstandard-compliant [ECMAScript](http://www.ecma-international.org/publications/standards/Ecma-262.htm)\nparser written in ECMAScript (also popularly known as\n[JavaScript](https://en.wikipedia.org/wiki/JavaScript)).\nEsprima is created and maintained by [Ariya Hidayat](https://twitter.com/ariyahidayat),\nwith the help of [many contributors](https://github.com/jquery/esprima/contributors).\n\n### Features\n\n- Full support for ECMAScript 2017 ([ECMA-262 8th Edition](http://www.ecma-international.org/publications/standards/Ecma-262.htm))\n- Sensible [syntax tree format](https://github.com/estree/estree/blob/master/es5.md) as standardized by [ESTree project](https://github.com/estree/estree)\n- Experimental support for [JSX](https://facebook.github.io/jsx/), a syntax extension for [React](https://facebook.github.io/react/)\n- Optional tracking of syntax node location (index-based and line-column)\n- [Heavily tested](http://esprima.org/test/ci.html) (~1500 [unit tests](https://github.com/jquery/esprima/tree/master/test/fixtures) with [full code coverage](https://codecov.io/github/jquery/esprima))\n\n### API\n\nEsprima can be used to perform [lexical analysis](https://en.wikipedia.org/wiki/Lexical_analysis) (tokenization) or [syntactic analysis](https://en.wikipedia.org/wiki/Parsing) (parsing) of a JavaScript program.\n\nA simple example on Node.js REPL:\n\n```javascript\n> var esprima = require('esprima');\n> var program = 'const answer = 42';\n\n> esprima.tokenize(program);\n[ { type: 'Keyword', value: 'const' },\n  { type: 'Identifier', value: 'answer' },\n  { type: 'Punctuator', value: '=' },\n  { type: 'Numeric', value: '42' } ]\n  \n> esprima.parseScript(program);\n{ type: 'Program',\n  body:\n   [ { type: 'VariableDeclaration',\n       declarations: [Object],\n       kind: 'const' } ],\n  sourceType: 'script' }\n```\n\nFor more information, please read the [complete documentation](http://esprima.org/doc)./dist/esprima.js\u0000\u0004S(function webpackUniversalModuleDefinition(root, factory) {\n/* istanbul ignore next */\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n/* istanbul ignore next */\n\telse if(typeof exports === 'object')\n\t\texports[\"esprima\"] = factory();\n\telse\n\t\troot[\"esprima\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/* istanbul ignore if */\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t/*\n\t  Copyright JS Foundation and other contributors, https://js.foundation/\n\n\t  Redistribution and use in source and binary forms, with or without\n\t  modification, are permitted provided that the following conditions are met:\n\n\t    * Redistributions of source code must retain the above copyright\n\t      notice, this list of conditions and the following disclaimer.\n\t    * Redistributions in binary form must reproduce the above copyright\n\t      notice, this list of conditions and the following disclaimer in the\n\t      documentation and/or other materials provided with the distribution.\n\n\t  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n\t  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n\t  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n\t  ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n\t  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n\t  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n\t  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n\t  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n\t  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n\t  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\t*/\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar comment_handler_1 = __webpack_require__(1);\n\tvar jsx_parser_1 = __webpack_require__(3);\n\tvar parser_1 = __webpack_require__(8);\n\tvar tokenizer_1 = __webpack_require__(15);\n\tfunction parse(code, options, delegate) {\n\t    var commentHandler = null;\n\t    var proxyDelegate = function (node, metadata) {\n\t        if (delegate) {\n\t            delegate(node, metadata);\n\t        }\n\t        if (commentHandler) {\n\t            commentHandler.visit(node, metadata);\n\t        }\n\t    };\n\t    var parserDelegate = (typeof delegate === 'function') ? proxyDelegate : null;\n\t    var collectComment = false;\n\t    if (options) {\n\t        collectComment = (typeof options.comment === 'boolean' && options.comment);\n\t        var attachComment = (typeof options.attachComment === 'boolean' && options.attachComment);\n\t        if (collectComment || attachComment) {\n\t            commentHandler = new comment_handler_1.CommentHandler();\n\t            commentHandler.attach = attachComment;\n\t            options.comment = true;\n\t            parserDelegate = proxyDelegate;\n\t        }\n\t    }\n\t    var isModule = false;\n\t    if (options && typeof options.sourceType === 'string') {\n\t        isModule = (options.sourceType === 'module');\n\t    }\n\t    var parser;\n\t    if (options && typeof options.jsx === 'boolean' && options.jsx) {\n\t        parser = new jsx_parser_1.JSXParser(code, options, parserDelegate);\n\t    }\n\t    else {\n\t        parser = new parser_1.Parser(code, options, parserDelegate);\n\t    }\n\t    var program = isModule ? parser.parseModule() : parser.parseScript();\n\t    var ast = program;\n\t    if (collectComment && commentHandler) {\n\t        ast.comments = commentHandler.comments;\n\t    }\n\t    if (parser.config.tokens) {\n\t        ast.tokens = parser.tokens;\n\t    }\n\t    if (parser.config.tolerant) {\n\t        ast.errors = parser.errorHandler.errors;\n\t    }\n\t    return ast;\n\t}\n\texports.parse = parse;\n\tfunction parseModule(code, options, delegate) {\n\t    var parsingOptions = options || {};\n\t    parsingOptions.sourceType = 'module';\n\t    return parse(code, parsingOptions, delegate);\n\t}\n\texports.parseModule = parseModule;\n\tfunction parseScript(code, options, delegate) {\n\t    var parsingOptions = options || {};\n\t    parsingOptions.sourceType = 'script';\n\t    return parse(code, parsingOptions, delegate);\n\t}\n\texports.parseScript = parseScript;\n\tfunction tokenize(code, options, delegate) {\n\t    var tokenizer = new tokenizer_1.Tokenizer(code, options);\n\t    var tokens;\n\t    tokens = [];\n\t    try {\n\t        while (true) {\n\t            var token = tokenizer.getNextToken();\n\t            if (!token) {\n\t                break;\n\t            }\n\t            if (delegate) {\n\t                token = delegate(token);\n\t            }\n\t            tokens.push(token);\n\t        }\n\t    }\n\t    catch (e) {\n\t        tokenizer.errorHandler.tolerate(e);\n\t    }\n\t    if (tokenizer.errorHandler.tolerant) {\n\t        tokens.errors = tokenizer.errors();\n\t    }\n\t    return tokens;\n\t}\n\texports.tokenize = tokenize;\n\tvar syntax_1 = __webpack_require__(2);\n\texports.Syntax = syntax_1.Syntax;\n\t// Sync with *.json manifests.\n\texports.version = '4.0.1';\n\n\n/***/ },\n/* 1 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar syntax_1 = __webpack_require__(2);\n\tvar CommentHandler = (function () {\n\t    function CommentHandler() {\n\t        this.attach = false;\n\t        this.comments = [];\n\t        this.stack = [];\n\t        this.leading = [];\n\t        this.trailing = [];\n\t    }\n\t    CommentHandler.prototype.insertInnerComments = function (node, metadata) {\n\t        //  innnerComments for properties empty block\n\t        //  `function a() {/** comments **\\/}`\n\t        if (node.type === syntax_1.Syntax.BlockStatement && node.body.length === 0) {\n\t            var innerComments = [];\n\t            for (var i = this.leading.length - 1; i >= 0; --i) {\n\t                var entry = this.leading[i];\n\t                if (metadata.end.offset >= entry.start) {\n\t                    innerComments.unshift(entry.comment);\n\t                    this.leading.splice(i, 1);\n\t                    this.trailing.splice(i, 1);\n\t                }\n\t            }\n\t            if (innerComments.length) {\n\t                node.innerComments = innerComments;\n\t            }\n\t        }\n\t    };\n\t    CommentHandler.prototype.findTrailingComments = function (metadata) {\n\t        var trailingComments = [];\n\t        if (this.trailing.length > 0) {\n\t            for (var i = this.trailing.length - 1; i >= 0; --i) {\n\t                var entry_1 = this.trailing[i];\n\t                if (entry_1.start >= metadata.end.offset) {\n\t                    trailingComments.unshift(entry_1.comment);\n\t                }\n\t            }\n\t            this.trailing.length = 0;\n\t            return trailingComments;\n\t        }\n\t        var entry = this.stack[this.stack.length - 1];\n\t        if (entry && entry.node.trailingComments) {\n\t            var firstComment = entry.node.trailingComments[0];\n\t            if (firstComment && firstComment.range[0] >= metadata.end.offset) {\n\t                trailingComments = entry.node.trailingComments;\n\t                delete entry.node.trailingComments;\n\t            }\n\t        }\n\t        return trailingComments;\n\t    };\n\t    CommentHandler.prototype.findLeadingComments = function (metadata) {\n\t        var leadingComments = [];\n\t        var target;\n\t        while (this.stack.length > 0) {\n\t            var entry = this.stack[this.stack.length - 1];\n\t            if (entry && entry.start >= metadata.start.offset) {\n\t                target = entry.node;\n\t                this.stack.pop();\n\t            }\n\t            else {\n\t                break;\n\t            }\n\t        }\n\t        if (target) {\n\t            var count = target.leadingComments ? target.leadingComments.length : 0;\n\t            for (var i = count - 1; i >= 0; --i) {\n\t                var comment = target.leadingComments[i];\n\t                if (comment.range[1] <= metadata.start.offset) {\n\t                    leadingComments.unshift(comment);\n\t                    target.leadingComments.splice(i, 1);\n\t                }\n\t            }\n\t            if (target.leadingComments && target.leadingComments.length === 0) {\n\t                delete target.leadingComments;\n\t            }\n\t            return leadingComments;\n\t        }\n\t        for (var i = this.leading.length - 1; i >= 0; --i) {\n\t            var entry = this.leading[i];\n\t            if (entry.start <= metadata.start.offset) {\n\t                leadingComments.unshift(entry.comment);\n\t                this.leading.splice(i, 1);\n\t            }\n\t        }\n\t        return leadingComments;\n\t    };\n\t    CommentHandler.prototype.visitNode = function (node, metadata) {\n\t        if (node.type === syntax_1.Syntax.Program && node.body.length > 0) {\n\t            return;\n\t        }\n\t        this.insertInnerComments(node, metadata);\n\t        var trailingComments = this.findTrailingComments(metadata);\n\t        var leadingComments = this.findLeadingComments(metadata);\n\t        if (leadingComments.length > 0) {\n\t            node.leadingComments = leadingComments;\n\t        }\n\t        if (trailingComments.length > 0) {\n\t            node.trailingComments = trailingComments;\n\t        }\n\t        this.stack.push({\n\t            node: node,\n\t            start: metadata.start.offset\n\t        });\n\t    };\n\t    CommentHandler.prototype.visitComment = function (node, metadata) {\n\t        var type = (node.type[0] === 'L') ? 'Line' : 'Block';\n\t        var comment = {\n\t            type: type,\n\t            value: node.value\n\t        };\n\t        if (node.range) {\n\t            comment.range = node.range;\n\t        }\n\t        if (node.loc) {\n\t            comment.loc = node.loc;\n\t        }\n\t        this.comments.push(comment);\n\t        if (this.attach) {\n\t            var entry = {\n\t                comment: {\n\t                    type: type,\n\t                    value: node.value,\n\t                    range: [metadata.start.offset, metadata.end.offset]\n\t                },\n\t                start: metadata.start.offset\n\t            };\n\t            if (node.loc) {\n\t                entry.comment.loc = node.loc;\n\t            }\n\t            node.type = type;\n\t            this.leading.push(entry);\n\t            this.trailing.push(entry);\n\t        }\n\t    };\n\t    CommentHandler.prototype.visit = function (node, metadata) {\n\t        if (node.type === 'LineComment') {\n\t            this.visitComment(node, metadata);\n\t        }\n\t        else if (node.type === 'BlockComment') {\n\t            this.visitComment(node, metadata);\n\t        }\n\t        else if (this.attach) {\n\t            this.visitNode(node, metadata);\n\t        }\n\t    };\n\t    return CommentHandler;\n\t}());\n\texports.CommentHandler = CommentHandler;\n\n\n/***/ },\n/* 2 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\texports.Syntax = {\n\t    AssignmentExpression: 'AssignmentExpression',\n\t    AssignmentPattern: 'AssignmentPattern',\n\t    ArrayExpression: 'ArrayExpression',\n\t    ArrayPattern: 'ArrayPattern',\n\t    ArrowFunctionExpression: 'ArrowFunctionExpression',\n\t    AwaitExpression: 'AwaitExpression',\n\t    BlockStatement: 'BlockStatement',\n\t    BinaryExpression: 'BinaryExpression',\n\t    BreakStatement: 'BreakStatement',\n\t    CallExpression: 'CallExpression',\n\t    CatchClause: 'CatchClause',\n\t    ClassBody: 'ClassBody',\n\t    ClassDeclaration: 'ClassDeclaration',\n\t    ClassExpression: 'ClassExpression',\n\t    ConditionalExpression: 'ConditionalExpression',\n\t    ContinueStatement: 'ContinueStatement',\n\t    DoWhileStatement: 'DoWhileStatement',\n\t    DebuggerStatement: 'DebuggerStatement',\n\t    EmptyStatement: 'EmptyStatement',\n\t    ExportAllDeclaration: 'ExportAllDeclaration',\n\t    ExportDefaultDeclaration: 'ExportDefaultDeclaration',\n\t    ExportNamedDeclaration: 'ExportNamedDeclaration',\n\t    ExportSpecifier: 'ExportSpecifier',\n\t    ExpressionStatement: 'ExpressionStatement',\n\t    ForStatement: 'ForStatement',\n\t    ForOfStatement: 'ForOfStatement',\n\t    ForInStatement: 'ForInStatement',\n\t    FunctionDeclaration: 'FunctionDeclaration',\n\t    FunctionExpression: 'FunctionExpression',\n\t    Identifier: 'Identifier',\n\t    IfStatement: 'IfStatement',\n\t    ImportDeclaration: 'ImportDeclaration',\n\t    ImportDefaultSpecifier: 'ImportDefaultSpecifier',\n\t    ImportNamespaceSpecifier: 'ImportNamespaceSpecifier',\n\t    ImportSpecifier: 'ImportSpecifier',\n\t    Literal: 'Literal',\n\t    LabeledStatement: 'LabeledStatement',\n\t    LogicalExpression: 'LogicalExpression',\n\t    MemberExpression: 'MemberExpression',\n\t    MetaProperty: 'MetaProperty',\n\t    MethodDefinition: 'MethodDefinition',\n\t    NewExpression: 'NewExpression',\n\t    ObjectExpression: 'ObjectExpression',\n\t    ObjectPattern: 'ObjectPattern',\n\t    Program: 'Program',\n\t    Property: 'Property',\n\t    RestElement: 'RestElement',\n\t    ReturnStatement: 'ReturnStatement',\n\t    SequenceExpression: 'SequenceExpression',\n\t    SpreadElement: 'SpreadElement',\n\t    Super: 'Super',\n\t    SwitchCase: 'SwitchCase',\n\t    SwitchStatement: 'SwitchStatement',\n\t    TaggedTemplateExpression: 'TaggedTemplateExpression',\n\t    TemplateElement: 'TemplateElement',\n\t    TemplateLiteral: 'TemplateLiteral',\n\t    ThisExpression: 'ThisExpression',\n\t    ThrowStatement: 'ThrowStatement',\n\t    TryStatement: 'TryStatement',\n\t    UnaryExpression: 'UnaryExpression',\n\t    UpdateExpression: 'UpdateExpression',\n\t    VariableDeclaration: 'VariableDeclaration',\n\t    VariableDeclarator: 'VariableDeclarator',\n\t    WhileStatement: 'WhileStatement',\n\t    WithStatement: 'WithStatement',\n\t    YieldExpression: 'YieldExpression'\n\t};\n\n\n/***/ },\n/* 3 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n/* istanbul ignore next */\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar character_1 = __webpack_require__(4);\n\tvar JSXNode = __webpack_require__(5);\n\tvar jsx_syntax_1 = __webpack_require__(6);\n\tvar Node = __webpack_require__(7);\n\tvar parser_1 = __webpack_require__(8);\n\tvar token_1 = __webpack_require__(13);\n\tvar xhtml_entities_1 = __webpack_require__(14);\n\ttoken_1.TokenName[100 /* Identifier */] = 'JSXIdentifier';\n\ttoken_1.TokenName[101 /* Text */] = 'JSXText';\n\t// Fully qualified element name, e.g. <svg:path> returns \"svg:path\"\n\tfunction getQualifiedElementName(elementName) {\n\t    var qualifiedName;\n\t    switch (elementName.type) {\n\t        case jsx_syntax_1.JSXSyntax.JSXIdentifier:\n\t            var id = elementName;\n\t            qualifiedName = id.name;\n\t            break;\n\t        case jsx_syntax_1.JSXSyntax.JSXNamespacedName:\n\t            var ns = elementName;\n\t            qualifiedName = getQualifiedElementName(ns.namespace) + ':' +\n\t                getQualifiedElementName(ns.name);\n\t            break;\n\t        case jsx_syntax_1.JSXSyntax.JSXMemberExpression:\n\t            var expr = elementName;\n\t            qualifiedName = getQualifiedElementName(expr.object) + '.' +\n\t                getQualifiedElementName(expr.property);\n\t            break;\n\t        /* istanbul ignore next */\n\t        default:\n\t            break;\n\t    }\n\t    return qualifiedName;\n\t}\n\tvar JSXParser = (function (_super) {\n\t    __extends(JSXParser, _super);\n\t    function JSXParser(code, options, delegate) {\n\t        return _super.call(this, code, options, delegate) || this;\n\t    }\n\t    JSXParser.prototype.parsePrimaryExpression = function () {\n\t        return this.match('<') ? this.parseJSXRoot() : _super.prototype.parsePrimaryExpression.call(this);\n\t    };\n\t    JSXParser.prototype.startJSX = function () {\n\t        // Unwind the scanner before the lookahead token.\n\t        this.scanner.index = this.startMarker.index;\n\t        this.scanner.lineNumber = this.startMarker.line;\n\t        this.scanner.lineStart = this.startMarker.index - this.startMarker.column;\n\t    };\n\t    JSXParser.prototype.finishJSX = function () {\n\t        // Prime the next lookahead.\n\t        this.nextToken();\n\t    };\n\t    JSXParser.prototype.reenterJSX = function () {\n\t        this.startJSX();\n\t        this.expectJSX('}');\n\t        // Pop the closing '}' added from the lookahead.\n\t        if (this.config.tokens) {\n\t            this.tokens.pop();\n\t        }\n\t    };\n\t    JSXParser.prototype.createJSXNode = function () {\n\t        this.collectComments();\n\t        return {\n\t            index: this.scanner.index,\n\t            line: this.scanner.lineNumber,\n\t            column: this.scanner.index - this.scanner.lineStart\n\t        };\n\t    };\n\t    JSXParser.prototype.createJSXChildNode = function () {\n\t        return {\n\t            index: this.scanner.index,\n\t            line: this.scanner.lineNumber,\n\t            column: this.scanner.index - this.scanner.lineStart\n\t        };\n\t    };\n\t    JSXParser.prototype.scanXHTMLEntity = function (quote) {\n\t        var result = '&';\n\t        var valid = true;\n\t        var terminated = false;\n\t        var numeric = false;\n\t        var hex = false;\n\t        while (!this.scanner.eof() && valid && !terminated) {\n\t            var ch = this.scanner.source[this.scanner.index];\n\t            if (ch === quote) {\n\t                break;\n\t            }\n\t            terminated = (ch === ';');\n\t            result += ch;\n\t            ++this.scanner.index;\n\t            if (!terminated) {\n\t                switch (result.length) {\n\t                    case 2:\n\t                        // e.g. '&#123;'\n\t                        numeric = (ch === '#');\n\t                        break;\n\t                    case 3:\n\t                        if (numeric) {\n\t                            // e.g. '&#x41;'\n\t                            hex = (ch === 'x');\n\t                            valid = hex || character_1.Character.isDecimalDigit(ch.charCodeAt(0));\n\t                            numeric = numeric && !hex;\n\t                        }\n\t                        break;\n\t                    default:\n\t                        valid = valid && !(numeric && !character_1.Character.isDecimalDigit(ch.charCodeAt(0)));\n\t                        valid = valid && !(hex && !character_1.Character.isHexDigit(ch.charCodeAt(0)));\n\t                        break;\n\t                }\n\t            }\n\t        }\n\t        if (valid && terminated && result.length > 2) {\n\t            // e.g. '&#x41;' becomes just '#x41'\n\t            var str = result.substr(1, result.length - 2);\n\t            if (numeric && str.length > 1) {\n\t                result = String.fromCharCode(parseInt(str.substr(1), 10));\n\t            }\n\t            else if (hex && str.length > 2) {\n\t                result = String.fromCharCode(parseInt('0' + str.substr(1), 16));\n\t            }\n\t            else if (!numeric && !hex && xhtml_entities_1.XHTMLEntities[str]) {\n\t                result = xhtml_entities_1.XHTMLEntities[str];\n\t            }\n\t        }\n\t        return result;\n\t    };\n\t    // Scan the next JSX token. This replaces Scanner#lex when in JSX mode.\n\t    JSXParser.prototype.lexJSX = function () {\n\t        var cp = this.scanner.source.charCodeAt(this.scanner.index);\n\t        // < > / : = { }\n\t        if (cp === 60 || cp === 62 || cp === 47 || cp === 58 || cp === 61 || cp === 123 || cp === 125) {\n\t            var value = this.scanner.source[this.scanner.index++];\n\t            return {\n\t                type: 7 /* Punctuator */,\n\t                value: value,\n\t                lineNumber: this.scanner.lineNumber,\n\t                lineStart: this.scanner.lineStart,\n\t                start: this.scanner.index - 1,\n\t                end: this.scanner.index\n\t            };\n\t        }\n\t        // \" '\n\t        if (cp === 34 || cp === 39) {\n\t            var start = this.scanner.index;\n\t            var quote = this.scanner.source[this.scanner.index++];\n\t            var str = '';\n\t            while (!this.scanner.eof()) {\n\t                var ch = this.scanner.source[this.scanner.index++];\n\t                if (ch === quote) {\n\t                    break;\n\t                }\n\t                else if (ch === '&') {\n\t                    str += this.scanXHTMLEntity(quote);\n\t                }\n\t                else {\n\t                    str += ch;\n\t                }\n\t            }\n\t            return {\n\t                type: 8 /* StringLiteral */,\n\t                value: str,\n\t                lineNumber: this.scanner.lineNumber,\n\t                lineStart: this.scanner.lineStart,\n\t                start: start,\n\t                end: this.scanner.index\n\t            };\n\t        }\n\t        // ... or .\n\t        if (cp === 46) {\n\t            var n1 = this.scanner.source.charCodeAt(this.scanner.index + 1);\n\t            var n2 = this.scanner.source.charCodeAt(this.scanner.index + 2);\n\t            var value = (n1 === 46 && n2 === 46) ? '...' : '.';\n\t            var start = this.scanner.index;\n\t            this.scanner.index += value.length;\n\t            return {\n\t                type: 7 /* Punctuator */,\n\t                value: value,\n\t                lineNumber: this.scanner.lineNumber,\n\t                lineStart: this.scanner.lineStart,\n\t                start: start,\n\t                end: this.scanner.index\n\t            };\n\t        }\n\t        // `\n\t        if (cp === 96) {\n\t            // Only placeholder, since it will be rescanned as a real assignment expression.\n\t            return {\n\t                type: 10 /* Template */,\n\t                value: '',\n\t                lineNumber: this.scanner.lineNumber,\n\t                lineStart: this.scanner.lineStart,\n\t                start: this.scanner.index,\n\t                end: this.scanner.index\n\t            };\n\t        }\n\t        // Identifer can not contain backslash (char code 92).\n\t        if (character_1.Character.isIdentifierStart(cp) && (cp !== 92)) {\n\t            var start = this.scanner.index;\n\t            ++this.scanner.index;\n\t            while (!this.scanner.eof()) {\n\t                var ch = this.scanner.source.charCodeAt(this.scanner.index);\n\t                if (character_1.Character.isIdentifierPart(ch) && (ch !== 92)) {\n\t                    ++this.scanner.index;\n\t                }\n\t                else if (ch === 45) {\n\t                    // Hyphen (char code 45) can be part of an identifier.\n\t                    ++this.scanner.index;\n\t                }\n\t                else {\n\t                    break;\n\t                }\n\t            }\n\t            var id = this.scanner.source.slice(start, this.scanner.index);\n\t            return {\n\t                type: 100 /* Identifier */,\n\t                value: id,\n\t                lineNumber: this.scanner.lineNumber,\n\t                lineStart: this.scanner.lineStart,\n\t                start: start,\n\t                end: this.scanner.index\n\t            };\n\t        }\n\t        return this.scanner.lex();\n\t    };\n\t    JSXParser.prototype.nextJSXToken = function () {\n\t        this.collectComments();\n\t        this.startMarker.index = this.scanner.index;\n\t        this.startMarker.line = this.scanner.lineNumber;\n\t        this.startMarker.column = this.scanner.index - this.scanner.lineStart;\n\t        var token = this.lexJSX();\n\t        this.lastMarker.index = this.scanner.index;\n\t        this.lastMarker.line = this.scanner.lineNumber;\n\t        this.lastMarker.column = this.scanner.index - this.scanner.lineStart;\n\t        if (this.config.tokens) {\n\t            this.tokens.push(this.convertToken(token));\n\t        }\n\t        return token;\n\t    };\n\t    JSXParser.prototype.nextJSXText = function () {\n\t        this.startMarker.index = this.scanner.index;\n\t        this.startMarker.line = this.scanner.lineNumber;\n\t        this.startMarker.column = this.scanner.index - this.scanner.lineStart;\n\t        var start = this.scanner.index;\n\t        var text = '';\n\t        while (!this.scanner.eof()) {\n\t            var ch = this.scanner.source[this.scanner.index];\n\t            if (ch === '{' || ch === '<') {\n\t                break;\n\t            }\n\t            ++this.scanner.index;\n\t            text += ch;\n\t            if (character_1.Character.isLineTerminator(ch.charCodeAt(0))) {\n\t                ++this.scanner.lineNumber;\n\t                if (ch === '\\r' && this.scanner.source[this.scanner.index] === '\\n') {\n\t                    ++this.scanner.index;\n\t                }\n\t                this.scanner.lineStart = this.scanner.index;\n\t            }\n\t        }\n\t        this.lastMarker.index = this.scanner.index;\n\t        this.lastMarker.line = this.scanner.lineNumber;\n\t        this.lastMarker.column = this.scanner.index - this.scanner.lineStart;\n\t        var token = {\n\t            type: 101 /* Text */,\n\t            value: text,\n\t            lineNumber: this.scanner.lineNumber,\n\t            lineStart: this.scanner.lineStart,\n\t            start: start,\n\t            end: this.scanner.index\n\t        };\n\t        if ((text.length > 0) && this.config.tokens) {\n\t            this.tokens.push(this.convertToken(token));\n\t        }\n\t        return token;\n\t    };\n\t    JSXParser.prototype.peekJSXToken = function () {\n\t        var state = this.scanner.saveState();\n\t        this.scanner.scanComments();\n\t        var next = this.lexJSX();\n\t        this.scanner.restoreState(state);\n\t        return next;\n\t    };\n\t    // Expect the next JSX token to match the specified punctuator.\n\t    // If not, an exception will be thrown.\n\t    JSXParser.prototype.expectJSX = function (value) {\n\t        var token = this.nextJSXToken();\n\t        if (token.type !== 7 /* Punctuator */ || token.value !== value) {\n\t            this.throwUnexpectedToken(token);\n\t        }\n\t    };\n\t    // Return true if the next JSX token matches the specified punctuator.\n\t    JSXParser.prototype.matchJSX = function (value) {\n\t        var next = this.peekJSXToken();\n\t        return next.type === 7 /* Punctuator */ && next.value === value;\n\t    };\n\t    JSXParser.prototype.parseJSXIdentifier = function () {\n\t        var node = this.createJSXNode();\n\t        var token = this.nextJSXToken();\n\t        if (token.type !== 100 /* Identifier */) {\n\t            this.throwUnexpectedToken(token);\n\t        }\n\t        return this.finalize(node, new JSXNode.JSXIdentifier(token.value));\n\t    };\n\t    JSXParser.prototype.parseJSXElementName = function () {\n\t        var node = this.createJSXNode();\n\t        var elementName = this.parseJSXIdentifier();\n\t        if (this.matchJSX(':')) {\n\t            var namespace = elementName;\n\t            this.expectJSX(':');\n\t            var name_1 = this.parseJSXIdentifier();\n\t            elementName = this.finalize(node, new JSXNode.JSXNamespacedName(namespace, name_1));\n\t        }\n\t        else if (this.matchJSX('.')) {\n\t            while (this.matchJSX('.')) {\n\t                var object = elementName;\n\t                this.expectJSX('.');\n\t                var property = this.parseJSXIdentifier();\n\t                elementName = this.finalize(node, new JSXNode.JSXMemberExpression(object, property));\n\t            }\n\t        }\n\t        return elementName;\n\t    };\n\t    JSXParser.prototype.parseJSXAttributeName = function () {\n\t        var node = this.createJSXNode();\n\t        var attributeName;\n\t        var identifier = this.parseJSXIdentifier();\n\t        if (this.matchJSX(':')) {\n\t            var namespace = identifier;\n\t            this.expectJSX(':');\n\t            var name_2 = this.parseJSXIdentifier();\n\t            attributeName = this.finalize(node, new JSXNode.JSXNamespacedName(namespace, name_2));\n\t        }\n\t        else {\n\t            attributeName = identifier;\n\t        }\n\t        return attributeName;\n\t    };\n\t    JSXParser.prototype.parseJSXStringLiteralAttribute = function () {\n\t        var node = this.createJSXNode();\n\t        var token = this.nextJSXToken();\n\t        if (token.type !== 8 /* StringLiteral */) {\n\t            this.throwUnexpectedToken(token);\n\t        }\n\t        var raw = this.getTokenRaw(token);\n\t        return this.finalize(node, new Node.Literal(token.value, raw));\n\t    };\n\t    JSXParser.prototype.parseJSXExpressionAttribute = function () {\n\t        var node = this.createJSXNode();\n\t        this.expectJSX('{');\n\t        this.finishJSX();\n\t        if (this.match('}')) {\n\t            this.tolerateError('JSX attributes must only be assigned a non-empty expression');\n\t        }\n\t        var expression = this.parseAssignmentExpression();\n\t        this.reenterJSX();\n\t        return this.finalize(node, new JSXNode.JSXExpressionContainer(expression));\n\t    };\n\t    JSXParser.prototype.parseJSXAttributeValue = function () {\n\t        return this.matchJSX('{') ? this.parseJSXExpressionAttribute() :\n\t            this.matchJSX('<') ? this.parseJSXElement() : this.parseJSXStringLiteralAttribute();\n\t    };\n\t    JSXParser.prototype.parseJSXNameValueAttribute = function () {\n\t        var node = this.createJSXNode();\n\t        var name = this.parseJSXAttributeName();\n\t        var value = null;\n\t        if (this.matchJSX('=')) {\n\t            this.expectJSX('=');\n\t            value = this.parseJSXAttributeValue();\n\t        }\n\t        return this.finalize(node, new JSXNode.JSXAttribute(name, value));\n\t    };\n\t    JSXParser.prototype.parseJSXSpreadAttribute = function () {\n\t        var node = this.createJSXNode();\n\t        this.expectJSX('{');\n\t        this.expectJSX('...');\n\t        this.finishJSX();\n\t        var argument = this.parseAssignmentExpression();\n\t        this.reenterJSX();\n\t        return this.finalize(node, new JSXNode.JSXSpreadAttribute(argument));\n\t    };\n\t    JSXParser.prototype.parseJSXAttributes = function () {\n\t        var attributes = [];\n\t        while (!this.matchJSX('/') && !this.matchJSX('>')) {\n\t            var attribute = this.matchJSX('{') ? this.parseJSXSpreadAttribute() :\n\t                this.parseJSXNameValueAttribute();\n\t            attributes.push(attribute);\n\t        }\n\t        return attributes;\n\t    };\n\t    JSXParser.prototype.parseJSXOpeningElement = function () {\n\t        var node = this.createJSXNode();\n\t        this.expectJSX('<');\n\t        var name = this.parseJSXElementName();\n\t        var attributes = this.parseJSXAttributes();\n\t        var selfClosing = this.matchJSX('/');\n\t        if (selfClosing) {\n\t            this.expectJSX('/');\n\t        }\n\t        this.expectJSX('>');\n\t        return this.finalize(node, new JSXNode.JSXOpeningElement(name, selfClosing, attributes));\n\t    };\n\t    JSXParser.prototype.parseJSXBoundaryElement = function () {\n\t        var node = this.createJSXNode();\n\t        this.expectJSX('<');\n\t        if (this.matchJSX('/')) {\n\t            this.expectJSX('/');\n\t            var name_3 = this.parseJSXElementName();\n\t            this.expectJSX('>');\n\t            return this.finalize(node, new JSXNode.JSXClosingElement(name_3));\n\t        }\n\t        var name = this.parseJSXElementName();\n\t        var attributes = this.parseJSXAttributes();\n\t        var selfClosing = this.matchJSX('/');\n\t        if (selfClosing) {\n\t            this.expectJSX('/');\n\t        }\n\t        this.expectJSX('>');\n\t        return this.finalize(node, new JSXNode.JSXOpeningElement(name, selfClosing, attributes));\n\t    };\n\t    JSXParser.prototype.parseJSXEmptyExpression = function () {\n\t        var node = this.createJSXChildNode();\n\t        this.collectComments();\n\t        this.lastMarker.index = this.scanner.index;\n\t        this.lastMarker.line = this.scanner.lineNumber;\n\t        this.lastMarker.column = this.scanner.index - this.scanner.lineStart;\n\t        return this.finalize(node, new JSXNode.JSXEmptyExpression());\n\t    };\n\t    JSXParser.prototype.parseJSXExpressionContainer = function () {\n\t        var node = this.createJSXNode();\n\t        this.expectJSX('{');\n\t        var expression;\n\t        if (this.matchJSX('}')) {\n\t            expression = this.parseJSXEmptyExpression();\n\t            this.expectJSX('}');\n\t        }\n\t        else {\n\t            this.finishJSX();\n\t            expression = this.parseAssignmentExpression();\n\t            this.reenterJSX();\n\t        }\n\t        return this.finalize(node, new JSXNode.JSXExpressionContainer(expression));\n\t    };\n\t    JSXParser.prototype.parseJSXChildren = function () {\n\t        var children = [];\n\t        while (!this.scanner.eof()) {\n\t            var node = this.createJSXChildNode();\n\t            var token = this.nextJSXText();\n\t            if (token.start < token.end) {\n\t                var raw = this.getTokenRaw(token);\n\t                var child = this.finalize(node, new JSXNode.JSXText(token.value, raw));\n\t                children.push(child);\n\t            }\n\t            if (this.scanner.source[this.scanner.index] === '{') {\n\t                var container = this.parseJSXExpressionContainer();\n\t                children.push(container);\n\t            }\n\t            else {\n\t                break;\n\t            }\n\t        }\n\t        return children;\n\t    };\n\t    JSXParser.prototype.parseComplexJSXElement = function (el) {\n\t        var stack = [];\n\t        while (!this.scanner.eof()) {\n\t            el.children = el.children.concat(this.parseJSXChildren());\n\t            var node = this.createJSXChildNode();\n\t            var element = this.parseJSXBoundaryElement();\n\t            if (element.type === jsx_syntax_1.JSXSyntax.JSXOpeningElement) {\n\t                var opening = element;\n\t                if (opening.selfClosing) {\n\t                    var child = this.finalize(node, new JSXNode.JSXElement(opening, [], null));\n\t                    el.children.push(child);\n\t                }\n\t                else {\n\t                    stack.push(el);\n\t                    el = { node: node, opening: opening, closing: null, children: [] };\n\t                }\n\t            }\n\t            if (element.type === jsx_syntax_1.JSXSyntax.JSXClosingElement) {\n\t                el.closing = element;\n\t                var open_1 = getQualifiedElementName(el.opening.name);\n\t                var close_1 = getQualifiedElementName(el.closing.name);\n\t                if (open_1 !== close_1) {\n\t                    this.tolerateError('Expected corresponding JSX closing tag for %0', open_1);\n\t                }\n\t                if (stack.length > 0) {\n\t                    var child = this.finalize(el.node, new JSXNode.JSXElement(el.opening, el.children, el.closing));\n\t                    el = stack[stack.length - 1];\n\t                    el.children.push(child);\n\t                    stack.pop();\n\t                }\n\t                else {\n\t                    break;\n\t                }\n\t            }\n\t        }\n\t        return el;\n\t    };\n\t    JSXParser.prototype.parseJSXElement = function () {\n\t        var node = this.createJSXNode();\n\t        var opening = this.parseJSXOpeningElement();\n\t        var children = [];\n\t        var closing = null;\n\t        if (!opening.selfClosing) {\n\t            var el = this.parseComplexJSXElement({ node: node, opening: opening, closing: closing, children: children });\n\t            children = el.children;\n\t            closing = el.closing;\n\t        }\n\t        return this.finalize(node, new JSXNode.JSXElement(opening, children, closing));\n\t    };\n\t    JSXParser.prototype.parseJSXRoot = function () {\n\t        // Pop the opening '<' added from the lookahead.\n\t        if (this.config.tokens) {\n\t            this.tokens.pop();\n\t        }\n\t        this.startJSX();\n\t        var element = this.parseJSXElement();\n\t        this.finishJSX();\n\t        return element;\n\t    };\n\t    JSXParser.prototype.isStartOfExpression = function () {\n\t        return _super.prototype.isStartOfExpression.call(this) || this.match('<');\n\t    };\n\t    return JSXParser;\n\t}(parser_1.Parser));\n\texports.JSXParser = JSXParser;\n\n\n/***/ },\n/* 4 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\t// See also tools/generate-unicode-regex.js.\n\tvar Regex = {\n\t    // Unicode v8.0.0 NonAsciiIdentifierStart:\n\t    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]/,\n\t    // Unicode v8.0.0 NonAsciiIdentifierPart:\n\t    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]/\n\t};\n\texports.Character = {\n\t    /* tslint:disable:no-bitwise */\n\t    fromCodePoint: function (cp) {\n\t        return (cp < 0x10000) ? String.fromCharCode(cp) :\n\t            String.fromCharCode(0xD800 + ((cp - 0x10000) >> 10)) +\n\t                String.fromCharCode(0xDC00 + ((cp - 0x10000) & 1023));\n\t    },\n\t    // https://tc39.github.io/ecma262/#sec-white-space\n\t    isWhiteSpace: function (cp) {\n\t        return (cp === 0x20) || (cp === 0x09) || (cp === 0x0B) || (cp === 0x0C) || (cp === 0xA0) ||\n\t            (cp >= 0x1680 && [0x1680, 0x2000, 0x2001, 0x2002, 0x2003, 0x2004, 0x2005, 0x2006, 0x2007, 0x2008, 0x2009, 0x200A, 0x202F, 0x205F, 0x3000, 0xFEFF].indexOf(cp) >= 0);\n\t    },\n\t    // https://tc39.github.io/ecma262/#sec-line-terminators\n\t    isLineTerminator: function (cp) {\n\t        return (cp === 0x0A) || (cp === 0x0D) || (cp === 0x2028) || (cp === 0x2029);\n\t    },\n\t    // https://tc39.github.io/ecma262/#sec-names-and-keywords\n\t    isIdentifierStart: function (cp) {\n\t        return (cp === 0x24) || (cp === 0x5F) ||\n\t            (cp >= 0x41 && cp <= 0x5A) ||\n\t            (cp >= 0x61 && cp <= 0x7A) ||\n\t            (cp === 0x5C) ||\n\t            ((cp >= 0x80) && Regex.NonAsciiIdentifierStart.test(exports.Character.fromCodePoint(cp)));\n\t    },\n\t    isIdentifierPart: function (cp) {\n\t        return (cp === 0x24) || (cp === 0x5F) ||\n\t            (cp >= 0x41 && cp <= 0x5A) ||\n\t            (cp >= 0x61 && cp <= 0x7A) ||\n\t            (cp >= 0x30 && cp <= 0x39) ||\n\t            (cp === 0x5C) ||\n\t            ((cp >= 0x80) && Regex.NonAsciiIdentifierPart.test(exports.Character.fromCodePoint(cp)));\n\t    },\n\t    // https://tc39.github.io/ecma262/#sec-literals-numeric-literals\n\t    isDecimalDigit: function (cp) {\n\t        return (cp >= 0x30 && cp <= 0x39); // 0..9\n\t    },\n\t    isHexDigit: function (cp) {\n\t        return (cp >= 0x30 && cp <= 0x39) ||\n\t            (cp >= 0x41 && cp <= 0x46) ||\n\t            (cp >= 0x61 && cp <= 0x66); // a..f\n\t    },\n\t    isOctalDigit: function (cp) {\n\t        return (cp >= 0x30 && cp <= 0x37); // 0..7\n\t    }\n\t};\n\n\n/***/ },\n/* 5 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar jsx_syntax_1 = __webpack_require__(6);\n\t/* tslint:disable:max-classes-per-file */\n\tvar JSXClosingElement = (function () {\n\t    function JSXClosingElement(name) {\n\t        this.type = jsx_syntax_1.JSXSyntax.JSXClosingElement;\n\t        this.name = name;\n\t    }\n\t    return JSXClosingElement;\n\t}());\n\texports.JSXClosingElement = JSXClosingElement;\n\tvar JSXElement = (function () {\n\t    function JSXElement(openingElement, children, closingElement) {\n\t        this.type = jsx_syntax_1.JSXSyntax.JSXElement;\n\t        this.openingElement = openingElement;\n\t        this.children = children;\n\t        this.closingElement = closingElement;\n\t    }\n\t    return JSXElement;\n\t}());\n\texports.JSXElement = JSXElement;\n\tvar JSXEmptyExpression = (function () {\n\t    function JSXEmptyExpression() {\n\t        this.type = jsx_syntax_1.JSXSyntax.JSXEmptyExpression;\n\t    }\n\t    return JSXEmptyExpression;\n\t}());\n\texports.JSXEmptyExpression = JSXEmptyExpression;\n\tvar JSXExpressionContainer = (function () {\n\t    function JSXExpressionContainer(expression) {\n\t        this.type = jsx_syntax_1.JSXSyntax.JSXExpressionContainer;\n\t        this.expression = expression;\n\t    }\n\t    return JSXExpressionContainer;\n\t}());\n\texports.JSXExpressionContainer = JSXExpressionContainer;\n\tvar JSXIdentifier = (function () {\n\t    function JSXIdentifier(name) {\n\t        this.type = jsx_syntax_1.JSXSyntax.JSXIdentifier;\n\t        this.name = name;\n\t    }\n\t    return JSXIdentifier;\n\t}());\n\texports.JSXIdentifier = JSXIdentifier;\n\tvar JSXMemberExpression = (function () {\n\t    function JSXMemberExpression(object, property) {\n\t        this.type = jsx_syntax_1.JSXSyntax.JSXMemberExpression;\n\t        this.object = object;\n\t        this.property = property;\n\t    }\n\t    return JSXMemberExpression;\n\t}());\n\texports.JSXMemberExpression = JSXMemberExpression;\n\tvar JSXAttribute = (function () {\n\t    function JSXAttribute(name, value) {\n\t        this.type = jsx_syntax_1.JSXSyntax.JSXAttribute;\n\t        this.name = name;\n\t        this.value = value;\n\t    }\n\t    return JSXAttribute;\n\t}());\n\texports.JSXAttribute = JSXAttribute;\n\tvar JSXNamespacedName = (function () {\n\t    function JSXNamespacedName(namespace, name) {\n\t        this.type = jsx_syntax_1.JSXSyntax.JSXNamespacedName;\n\t        this.namespace = namespace;\n\t        this.name = name;\n\t    }\n\t    return JSXNamespacedName;\n\t}());\n\texports.JSXNamespacedName = JSXNamespacedName;\n\tvar JSXOpeningElement = (function () {\n\t    function JSXOpeningElement(name, selfClosing, attributes) {\n\t        this.type = jsx_syntax_1.JSXSyntax.JSXOpeningElement;\n\t        this.name = name;\n\t        this.selfClosing = selfClosing;\n\t        this.attributes = attributes;\n\t    }\n\t    return JSXOpeningElement;\n\t}());\n\texports.JSXOpeningElement = JSXOpeningElement;\n\tvar JSXSpreadAttribute = (function () {\n\t    function JSXSpreadAttribute(argument) {\n\t        this.type = jsx_syntax_1.JSXSyntax.JSXSpreadAttribute;\n\t        this.argument = argument;\n\t    }\n\t    return JSXSpreadAttribute;\n\t}());\n\texports.JSXSpreadAttribute = JSXSpreadAttribute;\n\tvar JSXText = (function () {\n\t    function JSXText(value, raw) {\n\t        this.type = jsx_syntax_1.JSXSyntax.JSXText;\n\t        this.value = value;\n\t        this.raw = raw;\n\t    }\n\t    return JSXText;\n\t}());\n\texports.JSXText = JSXText;\n\n\n/***/ },\n/* 6 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\texports.JSXSyntax = {\n\t    JSXAttribute: 'JSXAttribute',\n\t    JSXClosingElement: 'JSXClosingElement',\n\t    JSXElement: 'JSXElement',\n\t    JSXEmptyExpression: 'JSXEmptyExpression',\n\t    JSXExpressionContainer: 'JSXExpressionContainer',\n\t    JSXIdentifier: 'JSXIdentifier',\n\t    JSXMemberExpression: 'JSXMemberExpression',\n\t    JSXNamespacedName: 'JSXNamespacedName',\n\t    JSXOpeningElement: 'JSXOpeningElement',\n\t    JSXSpreadAttribute: 'JSXSpreadAttribute',\n\t    JSXText: 'JSXText'\n\t};\n\n\n/***/ },\n/* 7 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar syntax_1 = __webpack_require__(2);\n\t/* tslint:disable:max-classes-per-file */\n\tvar ArrayExpression = (function () {\n\t    function ArrayExpression(elements) {\n\t        this.type = syntax_1.Syntax.ArrayExpression;\n\t        this.elements = elements;\n\t    }\n\t    return ArrayExpression;\n\t}());\n\texports.ArrayExpression = ArrayExpression;\n\tvar ArrayPattern = (function () {\n\t    function ArrayPattern(elements) {\n\t        this.type = syntax_1.Syntax.ArrayPattern;\n\t        this.elements = elements;\n\t    }\n\t    return ArrayPattern;\n\t}());\n\texports.ArrayPattern = ArrayPattern;\n\tvar ArrowFunctionExpression = (function () {\n\t    function ArrowFunctionExpression(params, body, expression) {\n\t        this.type = syntax_1.Syntax.ArrowFunctionExpression;\n\t        this.id = null;\n\t        this.params = params;\n\t        this.body = body;\n\t        this.generator = false;\n\t        this.expression = expression;\n\t        this.async = false;\n\t    }\n\t    return ArrowFunctionExpression;\n\t}());\n\texports.ArrowFunctionExpression = ArrowFunctionExpression;\n\tvar AssignmentExpression = (function () {\n\t    function AssignmentExpression(operator, left, right) {\n\t        this.type = syntax_1.Syntax.AssignmentExpression;\n\t        this.operator = operator;\n\t        this.left = left;\n\t        this.right = right;\n\t    }\n\t    return AssignmentExpression;\n\t}());\n\texports.AssignmentExpression = AssignmentExpression;\n\tvar AssignmentPattern = (function () {\n\t    function AssignmentPattern(left, right) {\n\t        this.type = syntax_1.Syntax.AssignmentPattern;\n\t        this.left = left;\n\t        this.right = right;\n\t    }\n\t    return AssignmentPattern;\n\t}());\n\texports.AssignmentPattern = AssignmentPattern;\n\tvar AsyncArrowFunctionExpression = (function () {\n\t    function AsyncArrowFunctionExpression(params, body, expression) {\n\t        this.type = syntax_1.Syntax.ArrowFunctionExpression;\n\t        this.id = null;\n\t        this.params = params;\n\t        this.body = body;\n\t        this.generator = false;\n\t        this.expression = expression;\n\t        this.async = true;\n\t    }\n\t    return AsyncArrowFunctionExpression;\n\t}());\n\texports.AsyncArrowFunctionExpression = AsyncArrowFunctionExpression;\n\tvar AsyncFunctionDeclaration = (function () {\n\t    function AsyncFunctionDeclaration(id, params, body) {\n\t        this.type = syntax_1.Syntax.FunctionDeclaration;\n\t        this.id = id;\n\t        this.params = params;\n\t        this.body = body;\n\t        this.generator = false;\n\t        this.expression = false;\n\t        this.async = true;\n\t    }\n\t    return AsyncFunctionDeclaration;\n\t}());\n\texports.AsyncFunctionDeclaration = AsyncFunctionDeclaration;\n\tvar AsyncFunctionExpression = (function () {\n\t    function AsyncFunctionExpression(id, params, body) {\n\t        this.type = syntax_1.Syntax.FunctionExpression;\n\t        this.id = id;\n\t        this.params = params;\n\t        this.body = body;\n\t        this.generator = false;\n\t        this.expression = false;\n\t        this.async = true;\n\t    }\n\t    return AsyncFunctionExpression;\n\t}());\n\texports.AsyncFunctionExpression = AsyncFunctionExpression;\n\tvar AwaitExpression = (function () {\n\t    function AwaitExpression(argument) {\n\t        this.type = syntax_1.Syntax.AwaitExpression;\n\t        this.argument = argument;\n\t    }\n\t    return AwaitExpression;\n\t}());\n\texports.AwaitExpression = AwaitExpression;\n\tvar BinaryExpression = (function () {\n\t    function BinaryExpression(operator, left, right) {\n\t        var logical = (operator === '||' || operator === '&&');\n\t        this.type = logical ? syntax_1.Syntax.LogicalExpression : syntax_1.Syntax.BinaryExpression;\n\t        this.operator = operator;\n\t        this.left = left;\n\t        this.right = right;\n\t    }\n\t    return BinaryExpression;\n\t}());\n\texports.BinaryExpression = BinaryExpression;\n\tvar BlockStatement = (function () {\n\t    function BlockStatement(body) {\n\t        this.type = syntax_1.Syntax.BlockStatement;\n\t        this.body = body;\n\t    }\n\t    return BlockStatement;\n\t}());\n\texports.BlockStatement = BlockStatement;\n\tvar BreakStatement = (function () {\n\t    function BreakStatement(label) {\n\t        this.type = syntax_1.Syntax.BreakStatement;\n\t        this.label = label;\n\t    }\n\t    return BreakStatement;\n\t}());\n\texports.BreakStatement = BreakStatement;\n\tvar CallExpression = (function () {\n\t    function CallExpression(callee, args) {\n\t        this.type = syntax_1.Syntax.CallExpression;\n\t        this.callee = callee;\n\t        this.arguments = args;\n\t    }\n\t    return CallExpression;\n\t}());\n\texports.CallExpression = CallExpression;\n\tvar CatchClause = (function () {\n\t    function CatchClause(param, body) {\n\t        this.type = syntax_1.Syntax.CatchClause;\n\t        this.param = param;\n\t        this.body = body;\n\t    }\n\t    return CatchClause;\n\t}());\n\texports.CatchClause = CatchClause;\n\tvar ClassBody = (function () {\n\t    function ClassBody(body) {\n\t        this.type = syntax_1.Syntax.ClassBody;\n\t        this.body = body;\n\t    }\n\t    return ClassBody;\n\t}());\n\texports.ClassBody = ClassBody;\n\tvar ClassDeclaration = (function () {\n\t    function ClassDeclaration(id, superClass, body) {\n\t        this.type = syntax_1.Syntax.ClassDeclaration;\n\t        this.id = id;\n\t        this.superClass = superClass;\n\t        this.body = body;\n\t    }\n\t    return ClassDeclaration;\n\t}());\n\texports.ClassDeclaration = ClassDeclaration;\n\tvar ClassExpression = (function () {\n\t    function ClassExpression(id, superClass, body) {\n\t        this.type = syntax_1.Syntax.ClassExpression;\n\t        this.id = id;\n\t        this.superClass = superClass;\n\t        this.body = body;\n\t    }\n\t    return ClassExpression;\n\t}());\n\texports.ClassExpression = ClassExpression;\n\tvar ComputedMemberExpression = (function () {\n\t    function ComputedMemberExpression(object, property) {\n\t        this.type = syntax_1.Syntax.MemberExpression;\n\t        this.computed = true;\n\t        this.object = object;\n\t        this.property = property;\n\t    }\n\t    return ComputedMemberExpression;\n\t}());\n\texports.ComputedMemberExpression = ComputedMemberExpression;\n\tvar ConditionalExpression = (function () {\n\t    function ConditionalExpression(test, consequent, alternate) {\n\t        this.type = syntax_1.Syntax.ConditionalExpression;\n\t        this.test = test;\n\t        this.consequent = consequent;\n\t        this.alternate = alternate;\n\t    }\n\t    return ConditionalExpression;\n\t}());\n\texports.ConditionalExpression = ConditionalExpression;\n\tvar ContinueStatement = (function () {\n\t    function ContinueStatement(label) {\n\t        this.type = syntax_1.Syntax.ContinueStatement;\n\t        this.label = label;\n\t    }\n\t    return ContinueStatement;\n\t}());\n\texports.ContinueStatement = ContinueStatement;\n\tvar DebuggerStatement = (function () {\n\t    function DebuggerStatement() {\n\t        this.type = syntax_1.Syntax.DebuggerStatement;\n\t    }\n\t    return DebuggerStatement;\n\t}());\n\texports.DebuggerStatement = DebuggerStatement;\n\tvar Directive = (function () {\n\t    function Directive(expression, directive) {\n\t        this.type = syntax_1.Syntax.ExpressionStatement;\n\t        this.expression = expression;\n\t        this.directive = directive;\n\t    }\n\t    return Directive;\n\t}());\n\texports.Directive = Directive;\n\tvar DoWhileStatement = (function () {\n\t    function DoWhileStatement(body, test) {\n\t        this.type = syntax_1.Syntax.DoWhileStatement;\n\t        this.body = body;\n\t        this.test = test;\n\t    }\n\t    return DoWhileStatement;\n\t}());\n\texports.DoWhileStatement = DoWhileStatement;\n\tvar EmptyStatement = (function () {\n\t    function EmptyStatement() {\n\t        this.type = syntax_1.Syntax.EmptyStatement;\n\t    }\n\t    return EmptyStatement;\n\t}());\n\texports.EmptyStatement = EmptyStatement;\n\tvar ExportAllDeclaration = (function () {\n\t    function ExportAllDeclaration(source) {\n\t        this.type = syntax_1.Syntax.ExportAllDeclaration;\n\t        this.source = source;\n\t    }\n\t    return ExportAllDeclaration;\n\t}());\n\texports.ExportAllDeclaration = ExportAllDeclaration;\n\tvar ExportDefaultDeclaration = (function () {\n\t    function ExportDefaultDeclaration(declaration) {\n\t        this.type = syntax_1.Syntax.ExportDefaultDeclaration;\n\t        this.declaration = declaration;\n\t    }\n\t    return ExportDefaultDeclaration;\n\t}());\n\texports.ExportDefaultDeclaration = ExportDefaultDeclaration;\n\tvar ExportNamedDeclaration = (function () {\n\t    function ExportNamedDeclaration(declaration, specifiers, source) {\n\t        this.type = syntax_1.Syntax.ExportNamedDeclaration;\n\t        this.declaration = declaration;\n\t        this.specifiers = specifiers;\n\t        this.source = source;\n\t    }\n\t    return ExportNamedDeclaration;\n\t}());\n\texports.ExportNamedDeclaration = ExportNamedDeclaration;\n\tvar ExportSpecifier = (function () {\n\t    function ExportSpecifier(local, exported) {\n\t        this.type = syntax_1.Syntax.ExportSpecifier;\n\t        this.exported = exported;\n\t        this.local = local;\n\t    }\n\t    return ExportSpecifier;\n\t}());\n\texports.ExportSpecifier = ExportSpecifier;\n\tvar ExpressionStatement = (function () {\n\t    function ExpressionStatement(expression) {\n\t        this.type = syntax_1.Syntax.ExpressionStatement;\n\t        this.expression = expression;\n\t    }\n\t    return ExpressionStatement;\n\t}());\n\texports.ExpressionStatement = ExpressionStatement;\n\tvar ForInStatement = (function () {\n\t    function ForInStatement(left, right, body) {\n\t        this.type = syntax_1.Syntax.ForInStatement;\n\t        this.left = left;\n\t        this.right = right;\n\t        this.body = body;\n\t        this.each = false;\n\t    }\n\t    return ForInStatement;\n\t}());\n\texports.ForInStatement = ForInStatement;\n\tvar ForOfStatement = (function () {\n\t    function ForOfStatement(left, right, body) {\n\t        this.type = syntax_1.Syntax.ForOfStatement;\n\t        this.left = left;\n\t        this.right = right;\n\t        this.body = body;\n\t    }\n\t    return ForOfStatement;\n\t}());\n\texports.ForOfStatement = ForOfStatement;\n\tvar ForStatement = (function () {\n\t    function ForStatement(init, test, update, body) {\n\t        this.type = syntax_1.Syntax.ForStatement;\n\t        this.init = init;\n\t        this.test = test;\n\t        this.update = update;\n\t        this.body = body;\n\t    }\n\t    return ForStatement;\n\t}());\n\texports.ForStatement = ForStatement;\n\tvar FunctionDeclaration = (function () {\n\t    function FunctionDeclaration(id, params, body, generator) {\n\t        this.type = syntax_1.Syntax.FunctionDeclaration;\n\t        this.id = id;\n\t        this.params = params;\n\t        this.body = body;\n\t        this.generator = generator;\n\t        this.expression = false;\n\t        this.async = false;\n\t    }\n\t    return FunctionDeclaration;\n\t}());\n\texports.FunctionDeclaration = FunctionDeclaration;\n\tvar FunctionExpression = (function () {\n\t    function FunctionExpression(id, params, body, generator) {\n\t        this.type = syntax_1.Syntax.FunctionExpression;\n\t        this.id = id;\n\t        this.params = params;\n\t        this.body = body;\n\t        this.generator = generator;\n\t        this.expression = false;\n\t        this.async = false;\n\t    }\n\t    return FunctionExpression;\n\t}());\n\texports.FunctionExpression = FunctionExpression;\n\tvar Identifier = (function () {\n\t    function Identifier(name) {\n\t        this.type = syntax_1.Syntax.Identifier;\n\t        this.name = name;\n\t    }\n\t    return Identifier;\n\t}());\n\texports.Identifier = Identifier;\n\tvar IfStatement = (function () {\n\t    function IfStatement(test, consequent, alternate) {\n\t        this.type = syntax_1.Syntax.IfStatement;\n\t        this.test = test;\n\t        this.consequent = consequent;\n\t        this.alternate = alternate;\n\t    }\n\t    return IfStatement;\n\t}());\n\texports.IfStatement = IfStatement;\n\tvar ImportDeclaration = (function () {\n\t    function ImportDeclaration(specifiers, source) {\n\t        this.type = syntax_1.Syntax.ImportDeclaration;\n\t        this.specifiers = specifiers;\n\t        this.source = source;\n\t    }\n\t    return ImportDeclaration;\n\t}());\n\texports.ImportDeclaration = ImportDeclaration;\n\tvar ImportDefaultSpecifier = (function () {\n\t    function ImportDefaultSpecifier(local) {\n\t        this.type = syntax_1.Syntax.ImportDefaultSpecifier;\n\t        this.local = local;\n\t    }\n\t    return ImportDefaultSpecifier;\n\t}());\n\texports.ImportDefaultSpecifier = ImportDefaultSpecifier;\n\tvar ImportNamespaceSpecifier = (function () {\n\t    function ImportNamespaceSpecifier(local) {\n\t        this.type = syntax_1.Syntax.ImportNamespaceSpecifier;\n\t        this.local = local;\n\t    }\n\t    return ImportNamespaceSpecifier;\n\t}());\n\texports.ImportNamespaceSpecifier = ImportNamespaceSpecifier;\n\tvar ImportSpecifier = (function () {\n\t    function ImportSpecifier(local, imported) {\n\t        this.type = syntax_1.Syntax.ImportSpecifier;\n\t        this.local = local;\n\t        this.imported = imported;\n\t    }\n\t    return ImportSpecifier;\n\t}());\n\texports.ImportSpecifier = ImportSpecifier;\n\tvar LabeledStatement = (function () {\n\t    function LabeledStatement(label, body) {\n\t        this.type = syntax_1.Syntax.LabeledStatement;\n\t        this.label = label;\n\t        this.body = body;\n\t    }\n\t    return LabeledStatement;\n\t}());\n\texports.LabeledStatement = LabeledStatement;\n\tvar Literal = (function () {\n\t    function Literal(value, raw) {\n\t        this.type = syntax_1.Syntax.Literal;\n\t        this.value = value;\n\t        this.raw = raw;\n\t    }\n\t    return Literal;\n\t}());\n\texports.Literal = Literal;\n\tvar MetaProperty = (function () {\n\t    function MetaProperty(meta, property) {\n\t        this.type = syntax_1.Syntax.MetaProperty;\n\t        this.meta = meta;\n\t        this.property = property;\n\t    }\n\t    return MetaProperty;\n\t}());\n\texports.MetaProperty = MetaProperty;\n\tvar MethodDefinition = (function () {\n\t    function MethodDefinition(key, computed, value, kind, isStatic) {\n\t        this.type = syntax_1.Syntax.MethodDefinition;\n\t        this.key = key;\n\t        this.computed = computed;\n\t        this.value = value;\n\t        this.kind = kind;\n\t        this.static = isStatic;\n\t    }\n\t    return MethodDefinition;\n\t}());\n\texports.MethodDefinition = MethodDefinition;\n\tvar Module = (function () {\n\t    function Module(body) {\n\t        this.type = syntax_1.Syntax.Program;\n\t        this.body = body;\n\t        this.sourceType = 'module';\n\t    }\n\t    return Module;\n\t}());\n\texports.Module = Module;\n\tvar NewExpression = (function () {\n\t    function NewExpression(callee, args) {\n\t        this.type = syntax_1.Syntax.NewExpression;\n\t        this.callee = callee;\n\t        this.arguments = args;\n\t    }\n\t    return NewExpression;\n\t}());\n\texports.NewExpression = NewExpression;\n\tvar ObjectExpression = (function () {\n\t    function ObjectExpression(properties) {\n\t        this.type = syntax_1.Syntax.ObjectExpression;\n\t        this.properties = properties;\n\t    }\n\t    return ObjectExpression;\n\t}());\n\texports.ObjectExpression = ObjectExpression;\n\tvar ObjectPattern = (function () {\n\t    function ObjectPattern(properties) {\n\t        this.type = syntax_1.Syntax.ObjectPattern;\n\t        this.properties = properties;\n\t    }\n\t    return ObjectPattern;\n\t}());\n\texports.ObjectPattern = ObjectPattern;\n\tvar Property = (function () {\n\t    function Property(kind, key, computed, value, method, shorthand) {\n\t        this.type = syntax_1.Syntax.Property;\n\t        this.key = key;\n\t        this.computed = computed;\n\t        this.value = value;\n\t        this.kind = kind;\n\t        this.method = method;\n\t        this.shorthand = shorthand;\n\t    }\n\t    return Property;\n\t}());\n\texports.Property = Property;\n\tvar RegexLiteral = (function () {\n\t    function RegexLiteral(value, raw, pattern, flags) {\n\t        this.type = syntax_1.Syntax.Literal;\n\t        this.value = value;\n\t        this.raw = raw;\n\t        this.regex = { pattern: pattern, flags: flags };\n\t    }\n\t    return RegexLiteral;\n\t}());\n\texports.RegexLiteral = RegexLiteral;\n\tvar RestElement = (function () {\n\t    function RestElement(argument) {\n\t        this.type = syntax_1.Syntax.RestElement;\n\t        this.argument = argument;\n\t    }\n\t    return RestElement;\n\t}());\n\texports.RestElement = RestElement;\n\tvar ReturnStatement = (function () {\n\t    function ReturnStatement(argument) {\n\t        this.type = syntax_1.Syntax.ReturnStatement;\n\t        this.argument = argument;\n\t    }\n\t    return ReturnStatement;\n\t}());\n\texports.ReturnStatement = ReturnStatement;\n\tvar Script = (function () {\n\t    function Script(body) {\n\t        this.type = syntax_1.Syntax.Program;\n\t        this.body = body;\n\t        this.sourceType = 'script';\n\t    }\n\t    return Script;\n\t}());\n\texports.Script = Script;\n\tvar SequenceExpression = (function () {\n\t    function SequenceExpression(expressions) {\n\t        this.type = syntax_1.Syntax.SequenceExpression;\n\t        this.expressions = expressions;\n\t    }\n\t    return SequenceExpression;\n\t}());\n\texports.SequenceExpression = SequenceExpression;\n\tvar SpreadElement = (function () {\n\t    function SpreadElement(argument) {\n\t        this.type = syntax_1.Syntax.SpreadElement;\n\t        this.argument = argument;\n\t    }\n\t    return SpreadElement;\n\t}());\n\texports.SpreadElement = SpreadElement;\n\tvar StaticMemberExpression = (function () {\n\t    function StaticMemberExpression(object, property) {\n\t        this.type = syntax_1.Syntax.MemberExpression;\n\t        this.computed = false;\n\t        this.object = object;\n\t        this.property = property;\n\t    }\n\t    return StaticMemberExpression;\n\t}());\n\texports.StaticMemberExpression = StaticMemberExpression;\n\tvar Super = (function () {\n\t    function Super() {\n\t        this.type = syntax_1.Syntax.Super;\n\t    }\n\t    return Super;\n\t}());\n\texports.Super = Super;\n\tvar SwitchCase = (function () {\n\t    function SwitchCase(test, consequent) {\n\t        this.type = syntax_1.Syntax.SwitchCase;\n\t        this.test = test;\n\t        this.consequent = consequent;\n\t    }\n\t    return SwitchCase;\n\t}());\n\texports.SwitchCase = SwitchCase;\n\tvar SwitchStatement = (function () {\n\t    function SwitchStatement(discriminant, cases) {\n\t        this.type = syntax_1.Syntax.SwitchStatement;\n\t        this.discriminant = discriminant;\n\t        this.cases = cases;\n\t    }\n\t    return SwitchStatement;\n\t}());\n\texports.SwitchStatement = SwitchStatement;\n\tvar TaggedTemplateExpression = (function () {\n\t    function TaggedTemplateExpression(tag, quasi) {\n\t        this.type = syntax_1.Syntax.TaggedTemplateExpression;\n\t        this.tag = tag;\n\t        this.quasi = quasi;\n\t    }\n\t    return TaggedTemplateExpression;\n\t}());\n\texports.TaggedTemplateExpression = TaggedTemplateExpression;\n\tvar TemplateElement = (function () {\n\t    function TemplateElement(value, tail) {\n\t        this.type = syntax_1.Syntax.TemplateElement;\n\t        this.value = value;\n\t        this.tail = tail;\n\t    }\n\t    return TemplateElement;\n\t}());\n\texports.TemplateElement = TemplateElement;\n\tvar TemplateLiteral = (function () {\n\t    function TemplateLiteral(quasis, expressions) {\n\t        this.type = syntax_1.Syntax.TemplateLiteral;\n\t        this.quasis = quasis;\n\t        this.expressions = expressions;\n\t    }\n\t    return TemplateLiteral;\n\t}());\n\texports.TemplateLiteral = TemplateLiteral;\n\tvar ThisExpression = (function () {\n\t    function ThisExpression() {\n\t        this.type = syntax_1.Syntax.ThisExpression;\n\t    }\n\t    return ThisExpression;\n\t}());\n\texports.ThisExpression = ThisExpression;\n\tvar ThrowStatement = (function () {\n\t    function ThrowStatement(argument) {\n\t        this.type = syntax_1.Syntax.ThrowStatement;\n\t        this.argument = argument;\n\t    }\n\t    return ThrowStatement;\n\t}());\n\texports.ThrowStatement = ThrowStatement;\n\tvar TryStatement = (function () {\n\t    function TryStatement(block, handler, finalizer) {\n\t        this.type = syntax_1.Syntax.TryStatement;\n\t        this.block = block;\n\t        this.handler = handler;\n\t        this.finalizer = finalizer;\n\t    }\n\t    return TryStatement;\n\t}());\n\texports.TryStatement = TryStatement;\n\tvar UnaryExpression = (function () {\n\t    function UnaryExpression(operator, argument) {\n\t        this.type = syntax_1.Syntax.UnaryExpression;\n\t        this.operator = operator;\n\t        this.argument = argument;\n\t        this.prefix = true;\n\t    }\n\t    return UnaryExpression;\n\t}());\n\texports.UnaryExpression = UnaryExpression;\n\tvar UpdateExpression = (function () {\n\t    function UpdateExpression(operator, argument, prefix) {\n\t        this.type = syntax_1.Syntax.UpdateExpression;\n\t        this.operator = operator;\n\t        this.argument = argument;\n\t        this.prefix = prefix;\n\t    }\n\t    return UpdateExpression;\n\t}());\n\texports.UpdateExpression = UpdateExpression;\n\tvar VariableDeclaration = (function () {\n\t    function VariableDeclaration(declarations, kind) {\n\t        this.type = syntax_1.Syntax.VariableDeclaration;\n\t        this.declarations = declarations;\n\t        this.kind = kind;\n\t    }\n\t    return VariableDeclaration;\n\t}());\n\texports.VariableDeclaration = VariableDeclaration;\n\tvar VariableDeclarator = (function () {\n\t    function VariableDeclarator(id, init) {\n\t        this.type = syntax_1.Syntax.VariableDeclarator;\n\t        this.id = id;\n\t        this.init = init;\n\t    }\n\t    return VariableDeclarator;\n\t}());\n\texports.VariableDeclarator = VariableDeclarator;\n\tvar WhileStatement = (function () {\n\t    function WhileStatement(test, body) {\n\t        this.type = syntax_1.Syntax.WhileStatement;\n\t        this.test = test;\n\t        this.body = body;\n\t    }\n\t    return WhileStatement;\n\t}());\n\texports.WhileStatement = WhileStatement;\n\tvar WithStatement = (function () {\n\t    function WithStatement(object, body) {\n\t        this.type = syntax_1.Syntax.WithStatement;\n\t        this.object = object;\n\t        this.body = body;\n\t    }\n\t    return WithStatement;\n\t}());\n\texports.WithStatement = WithStatement;\n\tvar YieldExpression = (function () {\n\t    function YieldExpression(argument, delegate) {\n\t        this.type = syntax_1.Syntax.YieldExpression;\n\t        this.argument = argument;\n\t        this.delegate = delegate;\n\t    }\n\t    return YieldExpression;\n\t}());\n\texports.YieldExpression = YieldExpression;\n\n\n/***/ },\n/* 8 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar assert_1 = __webpack_require__(9);\n\tvar error_handler_1 = __webpack_require__(10);\n\tvar messages_1 = __webpack_require__(11);\n\tvar Node = __webpack_require__(7);\n\tvar scanner_1 = __webpack_require__(12);\n\tvar syntax_1 = __webpack_require__(2);\n\tvar token_1 = __webpack_require__(13);\n\tvar ArrowParameterPlaceHolder = 'ArrowParameterPlaceHolder';\n\tvar Parser = (function () {\n\t    function Parser(code, options, delegate) {\n\t        if (options === void 0) { options = {}; }\n\t        this.config = {\n\t            range: (typeof options.range === 'boolean') && options.range,\n\t            loc: (typeof options.loc === 'boolean') && options.loc,\n\t            source: null,\n\t            tokens: (typeof options.tokens === 'boolean') && options.tokens,\n\t            comment: (typeof options.comment === 'boolean') && options.comment,\n\t            tolerant: (typeof options.tolerant === 'boolean') && options.tolerant\n\t        };\n\t        if (this.config.loc && options.source && options.source !== null) {\n\t            this.config.source = String(options.source);\n\t        }\n\t        this.delegate = delegate;\n\t        this.errorHandler = new error_handler_1.ErrorHandler();\n\t        this.errorHandler.tolerant = this.config.tolerant;\n\t        this.scanner = new scanner_1.Scanner(code, this.errorHandler);\n\t        this.scanner.trackComment = this.config.comment;\n\t        this.operatorPrecedence = {\n\t            ')': 0,\n\t            ';': 0,\n\t            ',': 0,\n\t            '=': 0,\n\t            ']': 0,\n\t            '||': 1,\n\t            '&&': 2,\n\t            '|': 3,\n\t            '^': 4,\n\t            '&': 5,\n\t            '==': 6,\n\t            '!=': 6,\n\t            '===': 6,\n\t            '!==': 6,\n\t            '<': 7,\n\t            '>': 7,\n\t            '<=': 7,\n\t            '>=': 7,\n\t            '<<': 8,\n\t            '>>': 8,\n\t            '>>>': 8,\n\t            '+': 9,\n\t            '-': 9,\n\t            '*': 11,\n\t            '/': 11,\n\t            '%': 11\n\t        };\n\t        this.lookahead = {\n\t            type: 2 /* EOF */,\n\t            value: '',\n\t            lineNumber: this.scanner.lineNumber,\n\t            lineStart: 0,\n\t            start: 0,\n\t            end: 0\n\t        };\n\t        this.hasLineTerminator = false;\n\t        this.context = {\n\t            isModule: false,\n\t            await: false,\n\t            allowIn: true,\n\t            allowStrictDirective: true,\n\t            allowYield: true,\n\t            firstCoverInitializedNameError: null,\n\t            isAssignmentTarget: false,\n\t            isBindingElement: false,\n\t            inFunctionBody: false,\n\t            inIteration: false,\n\t            inSwitch: false,\n\t            labelSet: {},\n\t            strict: false\n\t        };\n\t        this.tokens = [];\n\t        this.startMarker = {\n\t            index: 0,\n\t            line: this.scanner.lineNumber,\n\t            column: 0\n\t        };\n\t        this.lastMarker = {\n\t            index: 0,\n\t            line: this.scanner.lineNumber,\n\t            column: 0\n\t        };\n\t        this.nextToken();\n\t        this.lastMarker = {\n\t            index: this.scanner.index,\n\t            line: this.scanner.lineNumber,\n\t            column: this.scanner.index - this.scanner.lineStart\n\t        };\n\t    }\n\t    Parser.prototype.throwError = function (messageFormat) {\n\t        var values = [];\n\t        for (var _i = 1; _i < arguments.length; _i++) {\n\t            values[_i - 1] = arguments[_i];\n\t        }\n\t        var args = Array.prototype.slice.call(arguments, 1);\n\t        var msg = messageFormat.replace(/%(\\d)/g, function (whole, idx) {\n\t            assert_1.assert(idx < args.length, 'Message reference must be in range');\n\t            return args[idx];\n\t        });\n\t        var index = this.lastMarker.index;\n\t        var line = this.lastMarker.line;\n\t        var column = this.lastMarker.column + 1;\n\t        throw this.errorHandler.createError(index, line, column, msg);\n\t    };\n\t    Parser.prototype.tolerateError = function (messageFormat) {\n\t        var values = [];\n\t        for (var _i = 1; _i < arguments.length; _i++) {\n\t            values[_i - 1] = arguments[_i];\n\t        }\n\t        var args = Array.prototype.slice.call(arguments, 1);\n\t        var msg = messageFormat.replace(/%(\\d)/g, function (whole, idx) {\n\t            assert_1.assert(idx < args.length, 'Message reference must be in range');\n\t            return args[idx];\n\t        });\n\t        var index = this.lastMarker.index;\n\t        var line = this.scanner.lineNumber;\n\t        var column = this.lastMarker.column + 1;\n\t        this.errorHandler.tolerateError(index, line, column, msg);\n\t    };\n\t    // Throw an exception because of the token.\n\t    Parser.prototype.unexpectedTokenError = function (token, message) {\n\t        var msg = message || messages_1.Messages.UnexpectedToken;\n\t        var value;\n\t        if (token) {\n\t            if (!message) {\n\t                msg = (token.type === 2 /* EOF */) ? messages_1.Messages.UnexpectedEOS :\n\t                    (token.type === 3 /* Identifier */) ? messages_1.Messages.UnexpectedIdentifier :\n\t                        (token.type === 6 /* NumericLiteral */) ? messages_1.Messages.UnexpectedNumber :\n\t                            (token.type === 8 /* StringLiteral */) ? messages_1.Messages.UnexpectedString :\n\t                                (token.type === 10 /* Template */) ? messages_1.Messages.UnexpectedTemplate :\n\t                                    messages_1.Messages.UnexpectedToken;\n\t                if (token.type === 4 /* Keyword */) {\n\t                    if (this.scanner.isFutureReservedWord(token.value)) {\n\t                        msg = messages_1.Messages.UnexpectedReserved;\n\t                    }\n\t                    else if (this.context.strict && this.scanner.isStrictModeReservedWord(token.value)) {\n\t                        msg = messages_1.Messages.StrictReservedWord;\n\t                    }\n\t                }\n\t            }\n\t            value = token.value;\n\t        }\n\t        else {\n\t            value = 'ILLEGAL';\n\t        }\n\t        msg = msg.replace('%0', value);\n\t        if (token && typeof token.lineNumber === 'number') {\n\t            var index = token.start;\n\t            var line = token.lineNumber;\n\t            var lastMarkerLineStart = this.lastMarker.index - this.lastMarker.column;\n\t            var column = token.start - lastMarkerLineStart + 1;\n\t            return this.errorHandler.createError(index, line, column, msg);\n\t        }\n\t        else {\n\t            var index = this.lastMarker.index;\n\t            var line = this.lastMarker.line;\n\t            var column = this.lastMarker.column + 1;\n\t            return this.errorHandler.createError(index, line, column, msg);\n\t        }\n\t    };\n\t    Parser.prototype.throwUnexpectedToken = function (token, message) {\n\t        throw this.unexpectedTokenError(token, message);\n\t    };\n\t    Parser.prototype.tolerateUnexpectedToken = function (token, message) {\n\t        this.errorHandler.tolerate(this.unexpectedTokenError(token, message));\n\t    };\n\t    Parser.prototype.collectComments = function () {\n\t        if (!this.config.comment) {\n\t            this.scanner.scanComments();\n\t        }\n\t        else {\n\t            var comments = this.scanner.scanComments();\n\t            if (comments.length > 0 && this.delegate) {\n\t                for (var i = 0; i < comments.length; ++i) {\n\t                    var e = comments[i];\n\t                    var node = void 0;\n\t                    node = {\n\t                        type: e.multiLine ? 'BlockComment' : 'LineComment',\n\t                        value: this.scanner.source.slice(e.slice[0], e.slice[1])\n\t                    };\n\t                    if (this.config.range) {\n\t                        node.range = e.range;\n\t                    }\n\t                    if (this.config.loc) {\n\t                        node.loc = e.loc;\n\t                    }\n\t                    var metadata = {\n\t                        start: {\n\t                            line: e.loc.start.line,\n\t                            column: e.loc.start.column,\n\t                            offset: e.range[0]\n\t                        },\n\t                        end: {\n\t                            line: e.loc.end.line,\n\t                            column: e.loc.end.column,\n\t                            offset: e.range[1]\n\t                        }\n\t                    };\n\t                    this.delegate(node, metadata);\n\t                }\n\t            }\n\t        }\n\t    };\n\t    // From internal representation to an external structure\n\t    Parser.prototype.getTokenRaw = function (token) {\n\t        return this.scanner.source.slice(token.start, token.end);\n\t    };\n\t    Parser.prototype.convertToken = function (token) {\n\t        var t = {\n\t            type: token_1.TokenName[token.type],\n\t            value: this.getTokenRaw(token)\n\t        };\n\t        if (this.config.range) {\n\t            t.range = [token.start, token.end];\n\t        }\n\t        if (this.config.loc) {\n\t            t.loc = {\n\t                start: {\n\t                    line: this.startMarker.line,\n\t                    column: this.startMarker.column\n\t                },\n\t                end: {\n\t                    line: this.scanner.lineNumber,\n\t                    column: this.scanner.index - this.scanner.lineStart\n\t                }\n\t            };\n\t        }\n\t        if (token.type === 9 /* RegularExpression */) {\n\t            var pattern = token.pattern;\n\t            var flags = token.flags;\n\t            t.regex = { pattern: pattern, flags: flags };\n\t        }\n\t        return t;\n\t    };\n\t    Parser.prototype.nextToken = function () {\n\t        var token = this.lookahead;\n\t        this.lastMarker.index = this.scanner.index;\n\t        this.lastMarker.line = this.scanner.lineNumber;\n\t        this.lastMarker.column = this.scanner.index - this.scanner.lineStart;\n\t        this.collectComments();\n\t        if (this.scanner.index !== this.startMarker.index) {\n\t            this.startMarker.index = this.scanner.index;\n\t            this.startMarker.line = this.scanner.lineNumber;\n\t            this.startMarker.column = this.scanner.index - this.scanner.lineStart;\n\t        }\n\t        var next = this.scanner.lex();\n\t        this.hasLineTerminator = (token.lineNumber !== next.lineNumber);\n\t        if (next && this.context.strict && next.type === 3 /* Identifier */) {\n\t            if (this.scanner.isStrictModeReservedWord(next.value)) {\n\t                next.type = 4 /* Keyword */;\n\t            }\n\t        }\n\t        this.lookahead = next;\n\t        if (this.config.tokens && next.type !== 2 /* EOF */) {\n\t            this.tokens.push(this.convertToken(next));\n\t        }\n\t        return token;\n\t    };\n\t    Parser.prototype.nextRegexToken = function () {\n\t        this.collectComments();\n\t        var token = this.scanner.scanRegExp();\n\t        if (this.config.tokens) {\n\t            // Pop the previous token, '/' or '/='\n\t            // This is added from the lookahead token.\n\t            this.tokens.pop();\n\t            this.tokens.push(this.convertToken(token));\n\t        }\n\t        // Prime the next lookahead.\n\t        this.lookahead = token;\n\t        this.nextToken();\n\t        return token;\n\t    };\n\t    Parser.prototype.createNode = function () {\n\t        return {\n\t            index: this.startMarker.index,\n\t            line: this.startMarker.line,\n\t            column: this.startMarker.column\n\t        };\n\t    };\n\t    Parser.prototype.startNode = function (token, lastLineStart) {\n\t        if (lastLineStart === void 0) { lastLineStart = 0; }\n\t        var column = token.start - token.lineStart;\n\t        var line = token.lineNumber;\n\t        if (column < 0) {\n\t            column += lastLineStart;\n\t            line--;\n\t        }\n\t        return {\n\t            index: token.start,\n\t            line: line,\n\t            column: column\n\t        };\n\t    };\n\t    Parser.prototype.finalize = function (marker, node) {\n\t        if (this.config.range) {\n\t            node.range = [marker.index, this.lastMarker.index];\n\t        }\n\t        if (this.config.loc) {\n\t            node.loc = {\n\t                start: {\n\t                    line: marker.line,\n\t                    column: marker.column,\n\t                },\n\t                end: {\n\t                    line: this.lastMarker.line,\n\t                    column: this.lastMarker.column\n\t                }\n\t            };\n\t            if (this.config.source) {\n\t                node.loc.source = this.config.source;\n\t            }\n\t        }\n\t        if (this.delegate) {\n\t            var metadata = {\n\t                start: {\n\t                    line: marker.line,\n\t                    column: marker.column,\n\t                    offset: marker.index\n\t                },\n\t                end: {\n\t                    line: this.lastMarker.line,\n\t                    column: this.lastMarker.column,\n\t                    offset: this.lastMarker.index\n\t                }\n\t            };\n\t            this.delegate(node, metadata);\n\t        }\n\t        return node;\n\t    };\n\t    // Expect the next token to match the specified punctuator.\n\t    // If not, an exception will be thrown.\n\t    Parser.prototype.expect = function (value) {\n\t        var token = this.nextToken();\n\t        if (token.type !== 7 /* Punctuator */ || token.value !== value) {\n\t            this.throwUnexpectedToken(token);\n\t        }\n\t    };\n\t    // Quietly expect a comma when in tolerant mode, otherwise delegates to expect().\n\t    Parser.prototype.expectCommaSeparator = function () {\n\t        if (this.config.tolerant) {\n\t            var token = this.lookahead;\n\t            if (token.type === 7 /* Punctuator */ && token.value === ',') {\n\t                this.nextToken();\n\t            }\n\t            else if (token.type === 7 /* Punctuator */ && token.value === ';') {\n\t                this.nextToken();\n\t                this.tolerateUnexpectedToken(token);\n\t            }\n\t            else {\n\t                this.tolerateUnexpectedToken(token, messages_1.Messages.UnexpectedToken);\n\t            }\n\t        }\n\t        else {\n\t            this.expect(',');\n\t        }\n\t    };\n\t    // Expect the next token to match the specified keyword.\n\t    // If not, an exception will be thrown.\n\t    Parser.prototype.expectKeyword = function (keyword) {\n\t        var token = this.nextToken();\n\t        if (token.type !== 4 /* Keyword */ || token.value !== keyword) {\n\t            this.throwUnexpectedToken(token);\n\t        }\n\t    };\n\t    // Return true if the next token matches the specified punctuator.\n\t    Parser.prototype.match = function (value) {\n\t        return this.lookahead.type === 7 /* Punctuator */ && this.lookahead.value === value;\n\t    };\n\t    // Return true if the next token matches the specified keyword\n\t    Parser.prototype.matchKeyword = function (keyword) {\n\t        return this.lookahead.type === 4 /* Keyword */ && this.lookahead.value === keyword;\n\t    };\n\t    // Return true if the next token matches the specified contextual keyword\n\t    // (where an identifier is sometimes a keyword depending on the context)\n\t    Parser.prototype.matchContextualKeyword = function (keyword) {\n\t        return this.lookahead.type === 3 /* Identifier */ && this.lookahead.value === keyword;\n\t    };\n\t    // Return true if the next token is an assignment operator\n\t    Parser.prototype.matchAssign = function () {\n\t        if (this.lookahead.type !== 7 /* Punctuator */) {\n\t            return false;\n\t        }\n\t        var op = this.lookahead.value;\n\t        return op === '=' ||\n\t            op === '*=' ||\n\t            op === '**=' ||\n\t            op === '/=' ||\n\t            op === '%=' ||\n\t            op === '+=' ||\n\t            op === '-=' ||\n\t            op === '<<=' ||\n\t            op === '>>=' ||\n\t            op === '>>>=' ||\n\t            op === '&=' ||\n\t            op === '^=' ||\n\t            op === '|=';\n\t    };\n\t    // Cover grammar support.\n\t    //\n\t    // When an assignment expression position starts with an left parenthesis, the determination of the type\n\t    // of the syntax is to be deferred arbitrarily long until the end of the parentheses pair (plus a lookahead)\n\t    // or the first comma. This situation also defers the determination of all the expressions nested in the pair.\n\t    //\n\t    // There are three productions that can be parsed in a parentheses pair that needs to be determined\n\t    // after the outermost pair is closed. They are:\n\t    //\n\t    //   1. AssignmentExpression\n\t    //   2. BindingElements\n\t    //   3. AssignmentTargets\n\t    //\n\t    // In order to avoid exponential backtracking, we use two flags to denote if the production can be\n\t    // binding element or assignment target.\n\t    //\n\t    // The three productions have the relationship:\n\t    //\n\t    //   BindingElements ⊆ AssignmentTargets ⊆ AssignmentExpression\n\t    //\n\t    // with a single exception that CoverInitializedName when used directly in an Expression, generates\n\t    // an early error. Therefore, we need the third state, firstCoverInitializedNameError, to track the\n\t    // first usage of CoverInitializedName and report it when we reached the end of the parentheses pair.\n\t    //\n\t    // isolateCoverGrammar function runs the given parser function with a new cover grammar context, and it does not\n\t    // effect the current flags. This means the production the parser parses is only used as an expression. Therefore\n\t    // the CoverInitializedName check is conducted.\n\t    //\n\t    // inheritCoverGrammar function runs the given parse function with a new cover grammar context, and it propagates\n\t    // the flags outside of the parser. This means the production the parser parses is used as a part of a potential\n\t    // pattern. The CoverInitializedName check is deferred.\n\t    Parser.prototype.isolateCoverGrammar = function (parseFunction) {\n\t        var previousIsBindingElement = this.context.isBindingElement;\n\t        var previousIsAssignmentTarget = this.context.isAssignmentTarget;\n\t        var previousFirstCoverInitializedNameError = this.context.firstCoverInitializedNameError;\n\t        this.context.isBindingElement = true;\n\t        this.context.isAssignmentTarget = true;\n\t        this.context.firstCoverInitializedNameError = null;\n\t        var result = parseFunction.call(this);\n\t        if (this.context.firstCoverInitializedNameError !== null) {\n\t            this.throwUnexpectedToken(this.context.firstCoverInitializedNameError);\n\t        }\n\t        this.context.isBindingElement = previousIsBindingElement;\n\t        this.context.isAssignmentTarget = previousIsAssignmentTarget;\n\t        this.context.firstCoverInitializedNameError = previousFirstCoverInitializedNameError;\n\t        return result;\n\t    };\n\t    Parser.prototype.inheritCoverGrammar = function (parseFunction) {\n\t        var previousIsBindingElement = this.context.isBindingElement;\n\t        var previousIsAssignmentTarget = this.context.isAssignmentTarget;\n\t        var previousFirstCoverInitializedNameError = this.context.firstCoverInitializedNameError;\n\t        this.context.isBindingElement = true;\n\t        this.context.isAssignmentTarget = true;\n\t        this.context.firstCoverInitializedNameError = null;\n\t        var result = parseFunction.call(this);\n\t        this.context.isBindingElement = this.context.isBindingElement && previousIsBindingElement;\n\t        this.context.isAssignmentTarget = this.context.isAssignmentTarget && previousIsAssignmentTarget;\n\t        this.context.firstCoverInitializedNameError = previousFirstCoverInitializedNameError || this.context.firstCoverInitializedNameError;\n\t        return result;\n\t    };\n\t    Parser.prototype.consumeSemicolon = function () {\n\t        if (this.match(';')) {\n\t            this.nextToken();\n\t        }\n\t        else if (!this.hasLineTerminator) {\n\t            if (this.lookahead.type !== 2 /* EOF */ && !this.match('}')) {\n\t                this.throwUnexpectedToken(this.lookahead);\n\t            }\n\t            this.lastMarker.index = this.startMarker.index;\n\t            this.lastMarker.line = this.startMarker.line;\n\t            this.lastMarker.column = this.startMarker.column;\n\t        }\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-primary-expression\n\t    Parser.prototype.parsePrimaryExpression = function () {\n\t        var node = this.createNode();\n\t        var expr;\n\t        var token, raw;\n\t        switch (this.lookahead.type) {\n\t            case 3 /* Identifier */:\n\t                if ((this.context.isModule || this.context.await) && this.lookahead.value === 'await') {\n\t                    this.tolerateUnexpectedToken(this.lookahead);\n\t                }\n\t                expr = this.matchAsyncFunction() ? this.parseFunctionExpression() : this.finalize(node, new Node.Identifier(this.nextToken().value));\n\t                break;\n\t            case 6 /* NumericLiteral */:\n\t            case 8 /* StringLiteral */:\n\t                if (this.context.strict && this.lookahead.octal) {\n\t                    this.tolerateUnexpectedToken(this.lookahead, messages_1.Messages.StrictOctalLiteral);\n\t                }\n\t                this.context.isAssignmentTarget = false;\n\t                this.context.isBindingElement = false;\n\t                token = this.nextToken();\n\t                raw = this.getTokenRaw(token);\n\t                expr = this.finalize(node, new Node.Literal(token.value, raw));\n\t                break;\n\t            case 1 /* BooleanLiteral */:\n\t                this.context.isAssignmentTarget = false;\n\t                this.context.isBindingElement = false;\n\t                token = this.nextToken();\n\t                raw = this.getTokenRaw(token);\n\t                expr = this.finalize(node, new Node.Literal(token.value === 'true', raw));\n\t                break;\n\t            case 5 /* NullLiteral */:\n\t                this.context.isAssignmentTarget = false;\n\t                this.context.isBindingElement = false;\n\t                token = this.nextToken();\n\t                raw = this.getTokenRaw(token);\n\t                expr = this.finalize(node, new Node.Literal(null, raw));\n\t                break;\n\t            case 10 /* Template */:\n\t                expr = this.parseTemplateLiteral();\n\t                break;\n\t            case 7 /* Punctuator */:\n\t                switch (this.lookahead.value) {\n\t                    case '(':\n\t                        this.context.isBindingElement = false;\n\t                        expr = this.inheritCoverGrammar(this.parseGroupExpression);\n\t                        break;\n\t                    case '[':\n\t                        expr = this.inheritCoverGrammar(this.parseArrayInitializer);\n\t                        break;\n\t                    case '{':\n\t                        expr = this.inheritCoverGrammar(this.parseObjectInitializer);\n\t                        break;\n\t                    case '/':\n\t                    case '/=':\n\t                        this.context.isAssignmentTarget = false;\n\t                        this.context.isBindingElement = false;\n\t                        this.scanner.index = this.startMarker.index;\n\t                        token = this.nextRegexToken();\n\t                        raw = this.getTokenRaw(token);\n\t                        expr = this.finalize(node, new Node.RegexLiteral(token.regex, raw, token.pattern, token.flags));\n\t                        break;\n\t                    default:\n\t                        expr = this.throwUnexpectedToken(this.nextToken());\n\t                }\n\t                break;\n\t            case 4 /* Keyword */:\n\t                if (!this.context.strict && this.context.allowYield && this.matchKeyword('yield')) {\n\t                    expr = this.parseIdentifierName();\n\t                }\n\t                else if (!this.context.strict && this.matchKeyword('let')) {\n\t                    expr = this.finalize(node, new Node.Identifier(this.nextToken().value));\n\t                }\n\t                else {\n\t                    this.context.isAssignmentTarget = false;\n\t                    this.context.isBindingElement = false;\n\t                    if (this.matchKeyword('function')) {\n\t                        expr = this.parseFunctionExpression();\n\t                    }\n\t                    else if (this.matchKeyword('this')) {\n\t                        this.nextToken();\n\t                        expr = this.finalize(node, new Node.ThisExpression());\n\t                    }\n\t                    else if (this.matchKeyword('class')) {\n\t                        expr = this.parseClassExpression();\n\t                    }\n\t                    else {\n\t                        expr = this.throwUnexpectedToken(this.nextToken());\n\t                    }\n\t                }\n\t                break;\n\t            default:\n\t                expr = this.throwUnexpectedToken(this.nextToken());\n\t        }\n\t        return expr;\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-array-initializer\n\t    Parser.prototype.parseSpreadElement = function () {\n\t        var node = this.createNode();\n\t        this.expect('...');\n\t        var arg = this.inheritCoverGrammar(this.parseAssignmentExpression);\n\t        return this.finalize(node, new Node.SpreadElement(arg));\n\t    };\n\t    Parser.prototype.parseArrayInitializer = function () {\n\t        var node = this.createNode();\n\t        var elements = [];\n\t        this.expect('[');\n\t        while (!this.match(']')) {\n\t            if (this.match(',')) {\n\t                this.nextToken();\n\t                elements.push(null);\n\t            }\n\t            else if (this.match('...')) {\n\t                var element = this.parseSpreadElement();\n\t                if (!this.match(']')) {\n\t                    this.context.isAssignmentTarget = false;\n\t                    this.context.isBindingElement = false;\n\t                    this.expect(',');\n\t                }\n\t                elements.push(element);\n\t            }\n\t            else {\n\t                elements.push(this.inheritCoverGrammar(this.parseAssignmentExpression));\n\t                if (!this.match(']')) {\n\t                    this.expect(',');\n\t                }\n\t            }\n\t        }\n\t        this.expect(']');\n\t        return this.finalize(node, new Node.ArrayExpression(elements));\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-object-initializer\n\t    Parser.prototype.parsePropertyMethod = function (params) {\n\t        this.context.isAssignmentTarget = false;\n\t        this.context.isBindingElement = false;\n\t        var previousStrict = this.context.strict;\n\t        var previousAllowStrictDirective = this.context.allowStrictDirective;\n\t        this.context.allowStrictDirective = params.simple;\n\t        var body = this.isolateCoverGrammar(this.parseFunctionSourceElements);\n\t        if (this.context.strict && params.firstRestricted) {\n\t            this.tolerateUnexpectedToken(params.firstRestricted, params.message);\n\t        }\n\t        if (this.context.strict && params.stricted) {\n\t            this.tolerateUnexpectedToken(params.stricted, params.message);\n\t        }\n\t        this.context.strict = previousStrict;\n\t        this.context.allowStrictDirective = previousAllowStrictDirective;\n\t        return body;\n\t    };\n\t    Parser.prototype.parsePropertyMethodFunction = function () {\n\t        var isGenerator = false;\n\t        var node = this.createNode();\n\t        var previousAllowYield = this.context.allowYield;\n\t        this.context.allowYield = true;\n\t        var params = this.parseFormalParameters();\n\t        var method = this.parsePropertyMethod(params);\n\t        this.context.allowYield = previousAllowYield;\n\t        return this.finalize(node, new Node.FunctionExpression(null, params.params, method, isGenerator));\n\t    };\n\t    Parser.prototype.parsePropertyMethodAsyncFunction = function () {\n\t        var node = this.createNode();\n\t        var previousAllowYield = this.context.allowYield;\n\t        var previousAwait = this.context.await;\n\t        this.context.allowYield = false;\n\t        this.context.await = true;\n\t        var params = this.parseFormalParameters();\n\t        var method = this.parsePropertyMethod(params);\n\t        this.context.allowYield = previousAllowYield;\n\t        this.context.await = previousAwait;\n\t        return this.finalize(node, new Node.AsyncFunctionExpression(null, params.params, method));\n\t    };\n\t    Parser.prototype.parseObjectPropertyKey = function () {\n\t        var node = this.createNode();\n\t        var token = this.nextToken();\n\t        var key;\n\t        switch (token.type) {\n\t            case 8 /* StringLiteral */:\n\t            case 6 /* NumericLiteral */:\n\t                if (this.context.strict && token.octal) {\n\t                    this.tolerateUnexpectedToken(token, messages_1.Messages.StrictOctalLiteral);\n\t                }\n\t                var raw = this.getTokenRaw(token);\n\t                key = this.finalize(node, new Node.Literal(token.value, raw));\n\t                break;\n\t            case 3 /* Identifier */:\n\t            case 1 /* BooleanLiteral */:\n\t            case 5 /* NullLiteral */:\n\t            case 4 /* Keyword */:\n\t                key = this.finalize(node, new Node.Identifier(token.value));\n\t                break;\n\t            case 7 /* Punctuator */:\n\t                if (token.value === '[') {\n\t                    key = this.isolateCoverGrammar(this.parseAssignmentExpression);\n\t                    this.expect(']');\n\t                }\n\t                else {\n\t                    key = this.throwUnexpectedToken(token);\n\t                }\n\t                break;\n\t            default:\n\t                key = this.throwUnexpectedToken(token);\n\t        }\n\t        return key;\n\t    };\n\t    Parser.prototype.isPropertyKey = function (key, value) {\n\t        return (key.type === syntax_1.Syntax.Identifier && key.name === value) ||\n\t            (key.type === syntax_1.Syntax.Literal && key.value === value);\n\t    };\n\t    Parser.prototype.parseObjectProperty = function (hasProto) {\n\t        var node = this.createNode();\n\t        var token = this.lookahead;\n\t        var kind;\n\t        var key = null;\n\t        var value = null;\n\t        var computed = false;\n\t        var method = false;\n\t        var shorthand = false;\n\t        var isAsync = false;\n\t        if (token.type === 3 /* Identifier */) {\n\t            var id = token.value;\n\t            this.nextToken();\n\t            computed = this.match('[');\n\t            isAsync = !this.hasLineTerminator && (id === 'async') &&\n\t                !this.match(':') && !this.match('(') && !this.match('*') && !this.match(',');\n\t            key = isAsync ? this.parseObjectPropertyKey() : this.finalize(node, new Node.Identifier(id));\n\t        }\n\t        else if (this.match('*')) {\n\t            this.nextToken();\n\t        }\n\t        else {\n\t            computed = this.match('[');\n\t            key = this.parseObjectPropertyKey();\n\t        }\n\t        var lookaheadPropertyKey = this.qualifiedPropertyName(this.lookahead);\n\t        if (token.type === 3 /* Identifier */ && !isAsync && token.value === 'get' && lookaheadPropertyKey) {\n\t            kind = 'get';\n\t            computed = this.match('[');\n\t            key = this.parseObjectPropertyKey();\n\t            this.context.allowYield = false;\n\t            value = this.parseGetterMethod();\n\t        }\n\t        else if (token.type === 3 /* Identifier */ && !isAsync && token.value === 'set' && lookaheadPropertyKey) {\n\t            kind = 'set';\n\t            computed = this.match('[');\n\t            key = this.parseObjectPropertyKey();\n\t            value = this.parseSetterMethod();\n\t        }\n\t        else if (token.type === 7 /* Punctuator */ && token.value === '*' && lookaheadPropertyKey) {\n\t            kind = 'init';\n\t            computed = this.match('[');\n\t            key = this.parseObjectPropertyKey();\n\t            value = this.parseGeneratorMethod();\n\t            method = true;\n\t        }\n\t        else {\n\t            if (!key) {\n\t                this.throwUnexpectedToken(this.lookahead);\n\t            }\n\t            kind = 'init';\n\t            if (this.match(':') && !isAsync) {\n\t                if (!computed && this.isPropertyKey(key, '__proto__')) {\n\t                    if (hasProto.value) {\n\t                        this.tolerateError(messages_1.Messages.DuplicateProtoProperty);\n\t                    }\n\t                    hasProto.value = true;\n\t                }\n\t                this.nextToken();\n\t                value = this.inheritCoverGrammar(this.parseAssignmentExpression);\n\t            }\n\t            else if (this.match('(')) {\n\t                value = isAsync ? this.parsePropertyMethodAsyncFunction() : this.parsePropertyMethodFunction();\n\t                method = true;\n\t            }\n\t            else if (token.type === 3 /* Identifier */) {\n\t                var id = this.finalize(node, new Node.Identifier(token.value));\n\t                if (this.match('=')) {\n\t                    this.context.firstCoverInitializedNameError = this.lookahead;\n\t                    this.nextToken();\n\t                    shorthand = true;\n\t                    var init = this.isolateCoverGrammar(this.parseAssignmentExpression);\n\t                    value = this.finalize(node, new Node.AssignmentPattern(id, init));\n\t                }\n\t                else {\n\t                    shorthand = true;\n\t                    value = id;\n\t                }\n\t            }\n\t            else {\n\t                this.throwUnexpectedToken(this.nextToken());\n\t            }\n\t        }\n\t        return this.finalize(node, new Node.Property(kind, key, computed, value, method, shorthand));\n\t    };\n\t    Parser.prototype.parseObjectInitializer = function () {\n\t        var node = this.createNode();\n\t        this.expect('{');\n\t        var properties = [];\n\t        var hasProto = { value: false };\n\t        while (!this.match('}')) {\n\t            properties.push(this.parseObjectProperty(hasProto));\n\t            if (!this.match('}')) {\n\t                this.expectCommaSeparator();\n\t            }\n\t        }\n\t        this.expect('}');\n\t        return this.finalize(node, new Node.ObjectExpression(properties));\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-template-literals\n\t    Parser.prototype.parseTemplateHead = function () {\n\t        assert_1.assert(this.lookahead.head, 'Template literal must start with a template head');\n\t        var node = this.createNode();\n\t        var token = this.nextToken();\n\t        var raw = token.value;\n\t        var cooked = token.cooked;\n\t        return this.finalize(node, new Node.TemplateElement({ raw: raw, cooked: cooked }, token.tail));\n\t    };\n\t    Parser.prototype.parseTemplateElement = function () {\n\t        if (this.lookahead.type !== 10 /* Template */) {\n\t            this.throwUnexpectedToken();\n\t        }\n\t        var node = this.createNode();\n\t        var token = this.nextToken();\n\t        var raw = token.value;\n\t        var cooked = token.cooked;\n\t        return this.finalize(node, new Node.TemplateElement({ raw: raw, cooked: cooked }, token.tail));\n\t    };\n\t    Parser.prototype.parseTemplateLiteral = function () {\n\t        var node = this.createNode();\n\t        var expressions = [];\n\t        var quasis = [];\n\t        var quasi = this.parseTemplateHead();\n\t        quasis.push(quasi);\n\t        while (!quasi.tail) {\n\t            expressions.push(this.parseExpression());\n\t            quasi = this.parseTemplateElement();\n\t            quasis.push(quasi);\n\t        }\n\t        return this.finalize(node, new Node.TemplateLiteral(quasis, expressions));\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-grouping-operator\n\t    Parser.prototype.reinterpretExpressionAsPattern = function (expr) {\n\t        switch (expr.type) {\n\t            case syntax_1.Syntax.Identifier:\n\t            case syntax_1.Syntax.MemberExpression:\n\t            case syntax_1.Syntax.RestElement:\n\t            case syntax_1.Syntax.AssignmentPattern:\n\t                break;\n\t            case syntax_1.Syntax.SpreadElement:\n\t                expr.type = syntax_1.Syntax.RestElement;\n\t                this.reinterpretExpressionAsPattern(expr.argument);\n\t                break;\n\t            case syntax_1.Syntax.ArrayExpression:\n\t                expr.type = syntax_1.Syntax.ArrayPattern;\n\t                for (var i = 0; i < expr.elements.length; i++) {\n\t                    if (expr.elements[i] !== null) {\n\t                        this.reinterpretExpressionAsPattern(expr.elements[i]);\n\t                    }\n\t                }\n\t                break;\n\t            case syntax_1.Syntax.ObjectExpression:\n\t                expr.type = syntax_1.Syntax.ObjectPattern;\n\t                for (var i = 0; i < expr.properties.length; i++) {\n\t                    this.reinterpretExpressionAsPattern(expr.properties[i].value);\n\t                }\n\t                break;\n\t            case syntax_1.Syntax.AssignmentExpression:\n\t                expr.type = syntax_1.Syntax.AssignmentPattern;\n\t                delete expr.operator;\n\t                this.reinterpretExpressionAsPattern(expr.left);\n\t                break;\n\t            default:\n\t                // Allow other node type for tolerant parsing.\n\t                break;\n\t        }\n\t    };\n\t    Parser.prototype.parseGroupExpression = function () {\n\t        var expr;\n\t        this.expect('(');\n\t        if (this.match(')')) {\n\t            this.nextToken();\n\t            if (!this.match('=>')) {\n\t                this.expect('=>');\n\t            }\n\t            expr = {\n\t                type: ArrowParameterPlaceHolder,\n\t                params: [],\n\t                async: false\n\t            };\n\t        }\n\t        else {\n\t            var startToken = this.lookahead;\n\t            var params = [];\n\t            if (this.match('...')) {\n\t                expr = this.parseRestElement(params);\n\t                this.expect(')');\n\t                if (!this.match('=>')) {\n\t                    this.expect('=>');\n\t                }\n\t                expr = {\n\t                    type: ArrowParameterPlaceHolder,\n\t                    params: [expr],\n\t                    async: false\n\t                };\n\t            }\n\t            else {\n\t                var arrow = false;\n\t                this.context.isBindingElement = true;\n\t                expr = this.inheritCoverGrammar(this.parseAssignmentExpression);\n\t                if (this.match(',')) {\n\t                    var expressions = [];\n\t                    this.context.isAssignmentTarget = false;\n\t                    expressions.push(expr);\n\t                    while (this.lookahead.type !== 2 /* EOF */) {\n\t                        if (!this.match(',')) {\n\t                            break;\n\t                        }\n\t                        this.nextToken();\n\t                        if (this.match(')')) {\n\t                            this.nextToken();\n\t                            for (var i = 0; i < expressions.length; i++) {\n\t                                this.reinterpretExpressionAsPattern(expressions[i]);\n\t                            }\n\t                            arrow = true;\n\t                            expr = {\n\t                                type: ArrowParameterPlaceHolder,\n\t                                params: expressions,\n\t                                async: false\n\t                            };\n\t                        }\n\t                        else if (this.match('...')) {\n\t                            if (!this.context.isBindingElement) {\n\t                                this.throwUnexpectedToken(this.lookahead);\n\t                            }\n\t                            expressions.push(this.parseRestElement(params));\n\t                            this.expect(')');\n\t                            if (!this.match('=>')) {\n\t                                this.expect('=>');\n\t                            }\n\t                            this.context.isBindingElement = false;\n\t                            for (var i = 0; i < expressions.length; i++) {\n\t                                this.reinterpretExpressionAsPattern(expressions[i]);\n\t                            }\n\t                            arrow = true;\n\t                            expr = {\n\t                                type: ArrowParameterPlaceHolder,\n\t                                params: expressions,\n\t                                async: false\n\t                            };\n\t                        }\n\t                        else {\n\t                            expressions.push(this.inheritCoverGrammar(this.parseAssignmentExpression));\n\t                        }\n\t                        if (arrow) {\n\t                            break;\n\t                        }\n\t                    }\n\t                    if (!arrow) {\n\t                        expr = this.finalize(this.startNode(startToken), new Node.SequenceExpression(expressions));\n\t                    }\n\t                }\n\t                if (!arrow) {\n\t                    this.expect(')');\n\t                    if (this.match('=>')) {\n\t                        if (expr.type === syntax_1.Syntax.Identifier && expr.name === 'yield') {\n\t                            arrow = true;\n\t                            expr = {\n\t                                type: ArrowParameterPlaceHolder,\n\t                                params: [expr],\n\t                                async: false\n\t                            };\n\t                        }\n\t                        if (!arrow) {\n\t                            if (!this.context.isBindingElement) {\n\t                                this.throwUnexpectedToken(this.lookahead);\n\t                            }\n\t                            if (expr.type === syntax_1.Syntax.SequenceExpression) {\n\t                                for (var i = 0; i < expr.expressions.length; i++) {\n\t                                    this.reinterpretExpressionAsPattern(expr.expressions[i]);\n\t                                }\n\t                            }\n\t                            else {\n\t                                this.reinterpretExpressionAsPattern(expr);\n\t                            }\n\t                            var parameters = (expr.type === syntax_1.Syntax.SequenceExpression ? expr.expressions : [expr]);\n\t                            expr = {\n\t                                type: ArrowParameterPlaceHolder,\n\t                                params: parameters,\n\t                                async: false\n\t                            };\n\t                        }\n\t                    }\n\t                    this.context.isBindingElement = false;\n\t                }\n\t            }\n\t        }\n\t        return expr;\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-left-hand-side-expressions\n\t    Parser.prototype.parseArguments = function () {\n\t        this.expect('(');\n\t        var args = [];\n\t        if (!this.match(')')) {\n\t            while (true) {\n\t                var expr = this.match('...') ? this.parseSpreadElement() :\n\t                    this.isolateCoverGrammar(this.parseAssignmentExpression);\n\t                args.push(expr);\n\t                if (this.match(')')) {\n\t                    break;\n\t                }\n\t                this.expectCommaSeparator();\n\t                if (this.match(')')) {\n\t                    break;\n\t                }\n\t            }\n\t        }\n\t        this.expect(')');\n\t        return args;\n\t    };\n\t    Parser.prototype.isIdentifierName = function (token) {\n\t        return token.type === 3 /* Identifier */ ||\n\t            token.type === 4 /* Keyword */ ||\n\t            token.type === 1 /* BooleanLiteral */ ||\n\t            token.type === 5 /* NullLiteral */;\n\t    };\n\t    Parser.prototype.parseIdentifierName = function () {\n\t        var node = this.createNode();\n\t        var token = this.nextToken();\n\t        if (!this.isIdentifierName(token)) {\n\t            this.throwUnexpectedToken(token);\n\t        }\n\t        return this.finalize(node, new Node.Identifier(token.value));\n\t    };\n\t    Parser.prototype.parseNewExpression = function () {\n\t        var node = this.createNode();\n\t        var id = this.parseIdentifierName();\n\t        assert_1.assert(id.name === 'new', 'New expression must start with `new`');\n\t        var expr;\n\t        if (this.match('.')) {\n\t            this.nextToken();\n\t            if (this.lookahead.type === 3 /* Identifier */ && this.context.inFunctionBody && this.lookahead.value === 'target') {\n\t                var property = this.parseIdentifierName();\n\t                expr = new Node.MetaProperty(id, property);\n\t            }\n\t            else {\n\t                this.throwUnexpectedToken(this.lookahead);\n\t            }\n\t        }\n\t        else {\n\t            var callee = this.isolateCoverGrammar(this.parseLeftHandSideExpression);\n\t            var args = this.match('(') ? this.parseArguments() : [];\n\t            expr = new Node.NewExpression(callee, args);\n\t            this.context.isAssignmentTarget = false;\n\t            this.context.isBindingElement = false;\n\t        }\n\t        return this.finalize(node, expr);\n\t    };\n\t    Parser.prototype.parseAsyncArgument = function () {\n\t        var arg = this.parseAssignmentExpression();\n\t        this.context.firstCoverInitializedNameError = null;\n\t        return arg;\n\t    };\n\t    Parser.prototype.parseAsyncArguments = function () {\n\t        this.expect('(');\n\t        var args = [];\n\t        if (!this.match(')')) {\n\t            while (true) {\n\t                var expr = this.match('...') ? this.parseSpreadElement() :\n\t                    this.isolateCoverGrammar(this.parseAsyncArgument);\n\t                args.push(expr);\n\t                if (this.match(')')) {\n\t                    break;\n\t                }\n\t                this.expectCommaSeparator();\n\t                if (this.match(')')) {\n\t                    break;\n\t                }\n\t            }\n\t        }\n\t        this.expect(')');\n\t        return args;\n\t    };\n\t    Parser.prototype.parseLeftHandSideExpressionAllowCall = function () {\n\t        var startToken = this.lookahead;\n\t        var maybeAsync = this.matchContextualKeyword('async');\n\t        var previousAllowIn = this.context.allowIn;\n\t        this.context.allowIn = true;\n\t        var expr;\n\t        if (this.matchKeyword('super') && this.context.inFunctionBody) {\n\t            expr = this.createNode();\n\t            this.nextToken();\n\t            expr = this.finalize(expr, new Node.Super());\n\t            if (!this.match('(') && !this.match('.') && !this.match('[')) {\n\t                this.throwUnexpectedToken(this.lookahead);\n\t            }\n\t        }\n\t        else {\n\t            expr = this.inheritCoverGrammar(this.matchKeyword('new') ? this.parseNewExpression : this.parsePrimaryExpression);\n\t        }\n\t        while (true) {\n\t            if (this.match('.')) {\n\t                this.context.isBindingElement = false;\n\t                this.context.isAssignmentTarget = true;\n\t                this.expect('.');\n\t                var property = this.parseIdentifierName();\n\t                expr = this.finalize(this.startNode(startToken), new Node.StaticMemberExpression(expr, property));\n\t            }\n\t            else if (this.match('(')) {\n\t                var asyncArrow = maybeAsync && (startToken.lineNumber === this.lookahead.lineNumber);\n\t                this.context.isBindingElement = false;\n\t                this.context.isAssignmentTarget = false;\n\t                var args = asyncArrow ? this.parseAsyncArguments() : this.parseArguments();\n\t                expr = this.finalize(this.startNode(startToken), new Node.CallExpression(expr, args));\n\t                if (asyncArrow && this.match('=>')) {\n\t                    for (var i = 0; i < args.length; ++i) {\n\t                        this.reinterpretExpressionAsPattern(args[i]);\n\t                    }\n\t                    expr = {\n\t                        type: ArrowParameterPlaceHolder,\n\t                        params: args,\n\t                        async: true\n\t                    };\n\t                }\n\t            }\n\t            else if (this.match('[')) {\n\t                this.context.isBindingElement = false;\n\t                this.context.isAssignmentTarget = true;\n\t                this.expect('[');\n\t                var property = this.isolateCoverGrammar(this.parseExpression);\n\t                this.expect(']');\n\t                expr = this.finalize(this.startNode(startToken), new Node.ComputedMemberExpression(expr, property));\n\t            }\n\t            else if (this.lookahead.type === 10 /* Template */ && this.lookahead.head) {\n\t                var quasi = this.parseTemplateLiteral();\n\t                expr = this.finalize(this.startNode(startToken), new Node.TaggedTemplateExpression(expr, quasi));\n\t            }\n\t            else {\n\t                break;\n\t            }\n\t        }\n\t        this.context.allowIn = previousAllowIn;\n\t        return expr;\n\t    };\n\t    Parser.prototype.parseSuper = function () {\n\t        var node = this.createNode();\n\t        this.expectKeyword('super');\n\t        if (!this.match('[') && !this.match('.')) {\n\t            this.throwUnexpectedToken(this.lookahead);\n\t        }\n\t        return this.finalize(node, new Node.Super());\n\t    };\n\t    Parser.prototype.parseLeftHandSideExpression = function () {\n\t        assert_1.assert(this.context.allowIn, 'callee of new expression always allow in keyword.');\n\t        var node = this.startNode(this.lookahead);\n\t        var expr = (this.matchKeyword('super') && this.context.inFunctionBody) ? this.parseSuper() :\n\t            this.inheritCoverGrammar(this.matchKeyword('new') ? this.parseNewExpression : this.parsePrimaryExpression);\n\t        while (true) {\n\t            if (this.match('[')) {\n\t                this.context.isBindingElement = false;\n\t                this.context.isAssignmentTarget = true;\n\t                this.expect('[');\n\t                var property = this.isolateCoverGrammar(this.parseExpression);\n\t                this.expect(']');\n\t                expr = this.finalize(node, new Node.ComputedMemberExpression(expr, property));\n\t            }\n\t            else if (this.match('.')) {\n\t                this.context.isBindingElement = false;\n\t                this.context.isAssignmentTarget = true;\n\t                this.expect('.');\n\t                var property = this.parseIdentifierName();\n\t                expr = this.finalize(node, new Node.StaticMemberExpression(expr, property));\n\t            }\n\t            else if (this.lookahead.type === 10 /* Template */ && this.lookahead.head) {\n\t                var quasi = this.parseTemplateLiteral();\n\t                expr = this.finalize(node, new Node.TaggedTemplateExpression(expr, quasi));\n\t            }\n\t            else {\n\t                break;\n\t            }\n\t        }\n\t        return expr;\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-update-expressions\n\t    Parser.prototype.parseUpdateExpression = function () {\n\t        var expr;\n\t        var startToken = this.lookahead;\n\t        if (this.match('++') || this.match('--')) {\n\t            var node = this.startNode(startToken);\n\t            var token = this.nextToken();\n\t            expr = this.inheritCoverGrammar(this.parseUnaryExpression);\n\t            if (this.context.strict && expr.type === syntax_1.Syntax.Identifier && this.scanner.isRestrictedWord(expr.name)) {\n\t                this.tolerateError(messages_1.Messages.StrictLHSPrefix);\n\t            }\n\t            if (!this.context.isAssignmentTarget) {\n\t                this.tolerateError(messages_1.Messages.InvalidLHSInAssignment);\n\t            }\n\t            var prefix = true;\n\t            expr = this.finalize(node, new Node.UpdateExpression(token.value, expr, prefix));\n\t            this.context.isAssignmentTarget = false;\n\t            this.context.isBindingElement = false;\n\t        }\n\t        else {\n\t            expr = this.inheritCoverGrammar(this.parseLeftHandSideExpressionAllowCall);\n\t            if (!this.hasLineTerminator && this.lookahead.type === 7 /* Punctuator */) {\n\t                if (this.match('++') || this.match('--')) {\n\t                    if (this.context.strict && expr.type === syntax_1.Syntax.Identifier && this.scanner.isRestrictedWord(expr.name)) {\n\t                        this.tolerateError(messages_1.Messages.StrictLHSPostfix);\n\t                    }\n\t                    if (!this.context.isAssignmentTarget) {\n\t                        this.tolerateError(messages_1.Messages.InvalidLHSInAssignment);\n\t                    }\n\t                    this.context.isAssignmentTarget = false;\n\t                    this.context.isBindingElement = false;\n\t                    var operator = this.nextToken().value;\n\t                    var prefix = false;\n\t                    expr = this.finalize(this.startNode(startToken), new Node.UpdateExpression(operator, expr, prefix));\n\t                }\n\t            }\n\t        }\n\t        return expr;\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-unary-operators\n\t    Parser.prototype.parseAwaitExpression = function () {\n\t        var node = this.createNode();\n\t        this.nextToken();\n\t        var argument = this.parseUnaryExpression();\n\t        return this.finalize(node, new Node.AwaitExpression(argument));\n\t    };\n\t    Parser.prototype.parseUnaryExpression = function () {\n\t        var expr;\n\t        if (this.match('+') || this.match('-') || this.match('~') || this.match('!') ||\n\t            this.matchKeyword('delete') || this.matchKeyword('void') || this.matchKeyword('typeof')) {\n\t            var node = this.startNode(this.lookahead);\n\t            var token = this.nextToken();\n\t            expr = this.inheritCoverGrammar(this.parseUnaryExpression);\n\t            expr = this.finalize(node, new Node.UnaryExpression(token.value, expr));\n\t            if (this.context.strict && expr.operator === 'delete' && expr.argument.type === syntax_1.Syntax.Identifier) {\n\t                this.tolerateError(messages_1.Messages.StrictDelete);\n\t            }\n\t            this.context.isAssignmentTarget = false;\n\t            this.context.isBindingElement = false;\n\t        }\n\t        else if (this.context.await && this.matchContextualKeyword('await')) {\n\t            expr = this.parseAwaitExpression();\n\t        }\n\t        else {\n\t            expr = this.parseUpdateExpression();\n\t        }\n\t        return expr;\n\t    };\n\t    Parser.prototype.parseExponentiationExpression = function () {\n\t        var startToken = this.lookahead;\n\t        var expr = this.inheritCoverGrammar(this.parseUnaryExpression);\n\t        if (expr.type !== syntax_1.Syntax.UnaryExpression && this.match('**')) {\n\t            this.nextToken();\n\t            this.context.isAssignmentTarget = false;\n\t            this.context.isBindingElement = false;\n\t            var left = expr;\n\t            var right = this.isolateCoverGrammar(this.parseExponentiationExpression);\n\t            expr = this.finalize(this.startNode(startToken), new Node.BinaryExpression('**', left, right));\n\t        }\n\t        return expr;\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-exp-operator\n\t    // https://tc39.github.io/ecma262/#sec-multiplicative-operators\n\t    // https://tc39.github.io/ecma262/#sec-additive-operators\n\t    // https://tc39.github.io/ecma262/#sec-bitwise-shift-operators\n\t    // https://tc39.github.io/ecma262/#sec-relational-operators\n\t    // https://tc39.github.io/ecma262/#sec-equality-operators\n\t    // https://tc39.github.io/ecma262/#sec-binary-bitwise-operators\n\t    // https://tc39.github.io/ecma262/#sec-binary-logical-operators\n\t    Parser.prototype.binaryPrecedence = function (token) {\n\t        var op = token.value;\n\t        var precedence;\n\t        if (token.type === 7 /* Punctuator */) {\n\t            precedence = this.operatorPrecedence[op] || 0;\n\t        }\n\t        else if (token.type === 4 /* Keyword */) {\n\t            precedence = (op === 'instanceof' || (this.context.allowIn && op === 'in')) ? 7 : 0;\n\t        }\n\t        else {\n\t            precedence = 0;\n\t        }\n\t        return precedence;\n\t    };\n\t    Parser.prototype.parseBinaryExpression = function () {\n\t        var startToken = this.lookahead;\n\t        var expr = this.inheritCoverGrammar(this.parseExponentiationExpression);\n\t        var token = this.lookahead;\n\t        var prec = this.binaryPrecedence(token);\n\t        if (prec > 0) {\n\t            this.nextToken();\n\t            this.context.isAssignmentTarget = false;\n\t            this.context.isBindingElement = false;\n\t            var markers = [startToken, this.lookahead];\n\t            var left = expr;\n\t            var right = this.isolateCoverGrammar(this.parseExponentiationExpression);\n\t            var stack = [left, token.value, right];\n\t            var precedences = [prec];\n\t            while (true) {\n\t                prec = this.binaryPrecedence(this.lookahead);\n\t                if (prec <= 0) {\n\t                    break;\n\t                }\n\t                // Reduce: make a binary expression from the three topmost entries.\n\t                while ((stack.length > 2) && (prec <= precedences[precedences.length - 1])) {\n\t                    right = stack.pop();\n\t                    var operator = stack.pop();\n\t                    precedences.pop();\n\t                    left = stack.pop();\n\t                    markers.pop();\n\t                    var node = this.startNode(markers[markers.length - 1]);\n\t                    stack.push(this.finalize(node, new Node.BinaryExpression(operator, left, right)));\n\t                }\n\t                // Shift.\n\t                stack.push(this.nextToken().value);\n\t                precedences.push(prec);\n\t                markers.push(this.lookahead);\n\t                stack.push(this.isolateCoverGrammar(this.parseExponentiationExpression));\n\t            }\n\t            // Final reduce to clean-up the stack.\n\t            var i = stack.length - 1;\n\t            expr = stack[i];\n\t            var lastMarker = markers.pop();\n\t            while (i > 1) {\n\t                var marker = markers.pop();\n\t                var lastLineStart = lastMarker && lastMarker.lineStart;\n\t                var node = this.startNode(marker, lastLineStart);\n\t                var operator = stack[i - 1];\n\t                expr = this.finalize(node, new Node.BinaryExpression(operator, stack[i - 2], expr));\n\t                i -= 2;\n\t                lastMarker = marker;\n\t            }\n\t        }\n\t        return expr;\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-conditional-operator\n\t    Parser.prototype.parseConditionalExpression = function () {\n\t        var startToken = this.lookahead;\n\t        var expr = this.inheritCoverGrammar(this.parseBinaryExpression);\n\t        if (this.match('?')) {\n\t            this.nextToken();\n\t            var previousAllowIn = this.context.allowIn;\n\t            this.context.allowIn = true;\n\t            var consequent = this.isolateCoverGrammar(this.parseAssignmentExpression);\n\t            this.context.allowIn = previousAllowIn;\n\t            this.expect(':');\n\t            var alternate = this.isolateCoverGrammar(this.parseAssignmentExpression);\n\t            expr = this.finalize(this.startNode(startToken), new Node.ConditionalExpression(expr, consequent, alternate));\n\t            this.context.isAssignmentTarget = false;\n\t            this.context.isBindingElement = false;\n\t        }\n\t        return expr;\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-assignment-operators\n\t    Parser.prototype.checkPatternParam = function (options, param) {\n\t        switch (param.type) {\n\t            case syntax_1.Syntax.Identifier:\n\t                this.validateParam(options, param, param.name);\n\t                break;\n\t            case syntax_1.Syntax.RestElement:\n\t                this.checkPatternParam(options, param.argument);\n\t                break;\n\t            case syntax_1.Syntax.AssignmentPattern:\n\t                this.checkPatternParam(options, param.left);\n\t                break;\n\t            case syntax_1.Syntax.ArrayPattern:\n\t                for (var i = 0; i < param.elements.length; i++) {\n\t                    if (param.elements[i] !== null) {\n\t                        this.checkPatternParam(options, param.elements[i]);\n\t                    }\n\t                }\n\t                break;\n\t            case syntax_1.Syntax.ObjectPattern:\n\t                for (var i = 0; i < param.properties.length; i++) {\n\t                    this.checkPatternParam(options, param.properties[i].value);\n\t                }\n\t                break;\n\t            default:\n\t                break;\n\t        }\n\t        options.simple = options.simple && (param instanceof Node.Identifier);\n\t    };\n\t    Parser.prototype.reinterpretAsCoverFormalsList = function (expr) {\n\t        var params = [expr];\n\t        var options;\n\t        var asyncArrow = false;\n\t        switch (expr.type) {\n\t            case syntax_1.Syntax.Identifier:\n\t                break;\n\t            case ArrowParameterPlaceHolder:\n\t                params = expr.params;\n\t                asyncArrow = expr.async;\n\t                break;\n\t            default:\n\t                return null;\n\t        }\n\t        options = {\n\t            simple: true,\n\t            paramSet: {}\n\t        };\n\t        for (var i = 0; i < params.length; ++i) {\n\t            var param = params[i];\n\t            if (param.type === syntax_1.Syntax.AssignmentPattern) {\n\t                if (param.right.type === syntax_1.Syntax.YieldExpression) {\n\t                    if (param.right.argument) {\n\t                        this.throwUnexpectedToken(this.lookahead);\n\t                    }\n\t                    param.right.type = syntax_1.Syntax.Identifier;\n\t                    param.right.name = 'yield';\n\t                    delete param.right.argument;\n\t                    delete param.right.delegate;\n\t                }\n\t            }\n\t            else if (asyncArrow && param.type === syntax_1.Syntax.Identifier && param.name === 'await') {\n\t                this.throwUnexpectedToken(this.lookahead);\n\t            }\n\t            this.checkPatternParam(options, param);\n\t            params[i] = param;\n\t        }\n\t        if (this.context.strict || !this.context.allowYield) {\n\t            for (var i = 0; i < params.length; ++i) {\n\t                var param = params[i];\n\t                if (param.type === syntax_1.Syntax.YieldExpression) {\n\t                    this.throwUnexpectedToken(this.lookahead);\n\t                }\n\t            }\n\t        }\n\t        if (options.message === messages_1.Messages.StrictParamDupe) {\n\t            var token = this.context.strict ? options.stricted : options.firstRestricted;\n\t            this.throwUnexpectedToken(token, options.message);\n\t        }\n\t        return {\n\t            simple: options.simple,\n\t            params: params,\n\t            stricted: options.stricted,\n\t            firstRestricted: options.firstRestricted,\n\t            message: options.message\n\t        };\n\t    };\n\t    Parser.prototype.parseAssignmentExpression = function () {\n\t        var expr;\n\t        if (!this.context.allowYield && this.matchKeyword('yield')) {\n\t            expr = this.parseYieldExpression();\n\t        }\n\t        else {\n\t            var startToken = this.lookahead;\n\t            var token = startToken;\n\t            expr = this.parseConditionalExpression();\n\t            if (token.type === 3 /* Identifier */ && (token.lineNumber === this.lookahead.lineNumber) && token.value === 'async') {\n\t                if (this.lookahead.type === 3 /* Identifier */ || this.matchKeyword('yield')) {\n\t                    var arg = this.parsePrimaryExpression();\n\t                    this.reinterpretExpressionAsPattern(arg);\n\t                    expr = {\n\t                        type: ArrowParameterPlaceHolder,\n\t                        params: [arg],\n\t                        async: true\n\t                    };\n\t                }\n\t            }\n\t            if (expr.type === ArrowParameterPlaceHolder || this.match('=>')) {\n\t                // https://tc39.github.io/ecma262/#sec-arrow-function-definitions\n\t                this.context.isAssignmentTarget = false;\n\t                this.context.isBindingElement = false;\n\t                var isAsync = expr.async;\n\t                var list = this.reinterpretAsCoverFormalsList(expr);\n\t                if (list) {\n\t                    if (this.hasLineTerminator) {\n\t                        this.tolerateUnexpectedToken(this.lookahead);\n\t                    }\n\t                    this.context.firstCoverInitializedNameError = null;\n\t                    var previousStrict = this.context.strict;\n\t                    var previousAllowStrictDirective = this.context.allowStrictDirective;\n\t                    this.context.allowStrictDirective = list.simple;\n\t                    var previousAllowYield = this.context.allowYield;\n\t                    var previousAwait = this.context.await;\n\t                    this.context.allowYield = true;\n\t                    this.context.await = isAsync;\n\t                    var node = this.startNode(startToken);\n\t                    this.expect('=>');\n\t                    var body = void 0;\n\t                    if (this.match('{')) {\n\t                        var previousAllowIn = this.context.allowIn;\n\t                        this.context.allowIn = true;\n\t                        body = this.parseFunctionSourceElements();\n\t                        this.context.allowIn = previousAllowIn;\n\t                    }\n\t                    else {\n\t                        body = this.isolateCoverGrammar(this.parseAssignmentExpression);\n\t                    }\n\t                    var expression = body.type !== syntax_1.Syntax.BlockStatement;\n\t                    if (this.context.strict && list.firstRestricted) {\n\t                        this.throwUnexpectedToken(list.firstRestricted, list.message);\n\t                    }\n\t                    if (this.context.strict && list.stricted) {\n\t                        this.tolerateUnexpectedToken(list.stricted, list.message);\n\t                    }\n\t                    expr = isAsync ? this.finalize(node, new Node.AsyncArrowFunctionExpression(list.params, body, expression)) :\n\t                        this.finalize(node, new Node.ArrowFunctionExpression(list.params, body, expression));\n\t                    this.context.strict = previousStrict;\n\t                    this.context.allowStrictDirective = previousAllowStrictDirective;\n\t                    this.context.allowYield = previousAllowYield;\n\t                    this.context.await = previousAwait;\n\t                }\n\t            }\n\t            else {\n\t                if (this.matchAssign()) {\n\t                    if (!this.context.isAssignmentTarget) {\n\t                        this.tolerateError(messages_1.Messages.InvalidLHSInAssignment);\n\t                    }\n\t                    if (this.context.strict && expr.type === syntax_1.Syntax.Identifier) {\n\t                        var id = expr;\n\t                        if (this.scanner.isRestrictedWord(id.name)) {\n\t                            this.tolerateUnexpectedToken(token, messages_1.Messages.StrictLHSAssignment);\n\t                        }\n\t                        if (this.scanner.isStrictModeReservedWord(id.name)) {\n\t                            this.tolerateUnexpectedToken(token, messages_1.Messages.StrictReservedWord);\n\t                        }\n\t                    }\n\t                    if (!this.match('=')) {\n\t                        this.context.isAssignmentTarget = false;\n\t                        this.context.isBindingElement = false;\n\t                    }\n\t                    else {\n\t                        this.reinterpretExpressionAsPattern(expr);\n\t                    }\n\t                    token = this.nextToken();\n\t                    var operator = token.value;\n\t                    var right = this.isolateCoverGrammar(this.parseAssignmentExpression);\n\t                    expr = this.finalize(this.startNode(startToken), new Node.AssignmentExpression(operator, expr, right));\n\t                    this.context.firstCoverInitializedNameError = null;\n\t                }\n\t            }\n\t        }\n\t        return expr;\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-comma-operator\n\t    Parser.prototype.parseExpression = function () {\n\t        var startToken = this.lookahead;\n\t        var expr = this.isolateCoverGrammar(this.parseAssignmentExpression);\n\t        if (this.match(',')) {\n\t            var expressions = [];\n\t            expressions.push(expr);\n\t            while (this.lookahead.type !== 2 /* EOF */) {\n\t                if (!this.match(',')) {\n\t                    break;\n\t                }\n\t                this.nextToken();\n\t                expressions.push(this.isolateCoverGrammar(this.parseAssignmentExpression));\n\t            }\n\t            expr = this.finalize(this.startNode(startToken), new Node.SequenceExpression(expressions));\n\t        }\n\t        return expr;\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-block\n\t    Parser.prototype.parseStatementListItem = function () {\n\t        var statement;\n\t        this.context.isAssignmentTarget = true;\n\t        this.context.isBindingElement = true;\n\t        if (this.lookahead.type === 4 /* Keyword */) {\n\t            switch (this.lookahead.value) {\n\t                case 'export':\n\t                    if (!this.context.isModule) {\n\t                        this.tolerateUnexpectedToken(this.lookahead, messages_1.Messages.IllegalExportDeclaration);\n\t                    }\n\t                    statement = this.parseExportDeclaration();\n\t                    break;\n\t                case 'import':\n\t                    if (!this.context.isModule) {\n\t                        this.tolerateUnexpectedToken(this.lookahead, messages_1.Messages.IllegalImportDeclaration);\n\t                    }\n\t                    statement = this.parseImportDeclaration();\n\t                    break;\n\t                case 'const':\n\t                    statement = this.parseLexicalDeclaration({ inFor: false });\n\t                    break;\n\t                case 'function':\n\t                    statement = this.parseFunctionDeclaration();\n\t                    break;\n\t                case 'class':\n\t                    statement = this.parseClassDeclaration();\n\t                    break;\n\t                case 'let':\n\t                    statement = this.isLexicalDeclaration() ? this.parseLexicalDeclaration({ inFor: false }) : this.parseStatement();\n\t                    break;\n\t                default:\n\t                    statement = this.parseStatement();\n\t                    break;\n\t            }\n\t        }\n\t        else {\n\t            statement = this.parseStatement();\n\t        }\n\t        return statement;\n\t    };\n\t    Parser.prototype.parseBlock = function () {\n\t        var node = this.createNode();\n\t        this.expect('{');\n\t        var block = [];\n\t        while (true) {\n\t            if (this.match('}')) {\n\t                break;\n\t            }\n\t            block.push(this.parseStatementListItem());\n\t        }\n\t        this.expect('}');\n\t        return this.finalize(node, new Node.BlockStatement(block));\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-let-and-const-declarations\n\t    Parser.prototype.parseLexicalBinding = function (kind, options) {\n\t        var node = this.createNode();\n\t        var params = [];\n\t        var id = this.parsePattern(params, kind);\n\t        if (this.context.strict && id.type === syntax_1.Syntax.Identifier) {\n\t            if (this.scanner.isRestrictedWord(id.name)) {\n\t                this.tolerateError(messages_1.Messages.StrictVarName);\n\t            }\n\t        }\n\t        var init = null;\n\t        if (kind === 'const') {\n\t            if (!this.matchKeyword('in') && !this.matchContextualKeyword('of')) {\n\t                if (this.match('=')) {\n\t                    this.nextToken();\n\t                    init = this.isolateCoverGrammar(this.parseAssignmentExpression);\n\t                }\n\t                else {\n\t                    this.throwError(messages_1.Messages.DeclarationMissingInitializer, 'const');\n\t                }\n\t            }\n\t        }\n\t        else if ((!options.inFor && id.type !== syntax_1.Syntax.Identifier) || this.match('=')) {\n\t            this.expect('=');\n\t            init = this.isolateCoverGrammar(this.parseAssignmentExpression);\n\t        }\n\t        return this.finalize(node, new Node.VariableDeclarator(id, init));\n\t    };\n\t    Parser.prototype.parseBindingList = function (kind, options) {\n\t        var list = [this.parseLexicalBinding(kind, options)];\n\t        while (this.match(',')) {\n\t            this.nextToken();\n\t            list.push(this.parseLexicalBinding(kind, options));\n\t        }\n\t        return list;\n\t    };\n\t    Parser.prototype.isLexicalDeclaration = function () {\n\t        var state = this.scanner.saveState();\n\t        this.scanner.scanComments();\n\t        var next = this.scanner.lex();\n\t        this.scanner.restoreState(state);\n\t        return (next.type === 3 /* Identifier */) ||\n\t            (next.type === 7 /* Punctuator */ && next.value === '[') ||\n\t            (next.type === 7 /* Punctuator */ && next.value === '{') ||\n\t            (next.type === 4 /* Keyword */ && next.value === 'let') ||\n\t            (next.type === 4 /* Keyword */ && next.value === 'yield');\n\t    };\n\t    Parser.prototype.parseLexicalDeclaration = function (options) {\n\t        var node = this.createNode();\n\t        var kind = this.nextToken().value;\n\t        assert_1.assert(kind === 'let' || kind === 'const', 'Lexical declaration must be either let or const');\n\t        var declarations = this.parseBindingList(kind, options);\n\t        this.consumeSemicolon();\n\t        return this.finalize(node, new Node.VariableDeclaration(declarations, kind));\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-destructuring-binding-patterns\n\t    Parser.prototype.parseBindingRestElement = function (params, kind) {\n\t        var node = this.createNode();\n\t        this.expect('...');\n\t        var arg = this.parsePattern(params, kind);\n\t        return this.finalize(node, new Node.RestElement(arg));\n\t    };\n\t    Parser.prototype.parseArrayPattern = function (params, kind) {\n\t        var node = this.createNode();\n\t        this.expect('[');\n\t        var elements = [];\n\t        while (!this.match(']')) {\n\t            if (this.match(',')) {\n\t                this.nextToken();\n\t                elements.push(null);\n\t            }\n\t            else {\n\t                if (this.match('...')) {\n\t                    elements.push(this.parseBindingRestElement(params, kind));\n\t                    break;\n\t                }\n\t                else {\n\t                    elements.push(this.parsePatternWithDefault(params, kind));\n\t                }\n\t                if (!this.match(']')) {\n\t                    this.expect(',');\n\t                }\n\t            }\n\t        }\n\t        this.expect(']');\n\t        return this.finalize(node, new Node.ArrayPattern(elements));\n\t    };\n\t    Parser.prototype.parsePropertyPattern = function (params, kind) {\n\t        var node = this.createNode();\n\t        var computed = false;\n\t        var shorthand = false;\n\t        var method = false;\n\t        var key;\n\t        var value;\n\t        if (this.lookahead.type === 3 /* Identifier */) {\n\t            var keyToken = this.lookahead;\n\t            key = this.parseVariableIdentifier();\n\t            var init = this.finalize(node, new Node.Identifier(keyToken.value));\n\t            if (this.match('=')) {\n\t                params.push(keyToken);\n\t                shorthand = true;\n\t                this.nextToken();\n\t                var expr = this.parseAssignmentExpression();\n\t                value = this.finalize(this.startNode(keyToken), new Node.AssignmentPattern(init, expr));\n\t            }\n\t            else if (!this.match(':')) {\n\t                params.push(keyToken);\n\t                shorthand = true;\n\t                value = init;\n\t            }\n\t            else {\n\t                this.expect(':');\n\t                value = this.parsePatternWithDefault(params, kind);\n\t            }\n\t        }\n\t        else {\n\t            computed = this.match('[');\n\t            key = this.parseObjectPropertyKey();\n\t            this.expect(':');\n\t            value = this.parsePatternWithDefault(params, kind);\n\t        }\n\t        return this.finalize(node, new Node.Property('init', key, computed, value, method, shorthand));\n\t    };\n\t    Parser.prototype.parseObjectPattern = function (params, kind) {\n\t        var node = this.createNode();\n\t        var properties = [];\n\t        this.expect('{');\n\t        while (!this.match('}')) {\n\t            properties.push(this.parsePropertyPattern(params, kind));\n\t            if (!this.match('}')) {\n\t                this.expect(',');\n\t            }\n\t        }\n\t        this.expect('}');\n\t        return this.finalize(node, new Node.ObjectPattern(properties));\n\t    };\n\t    Parser.prototype.parsePattern = function (params, kind) {\n\t        var pattern;\n\t        if (this.match('[')) {\n\t            pattern = this.parseArrayPattern(params, kind);\n\t        }\n\t        else if (this.match('{')) {\n\t            pattern = this.parseObjectPattern(params, kind);\n\t        }\n\t        else {\n\t            if (this.matchKeyword('let') && (kind === 'const' || kind === 'let')) {\n\t                this.tolerateUnexpectedToken(this.lookahead, messages_1.Messages.LetInLexicalBinding);\n\t            }\n\t            params.push(this.lookahead);\n\t            pattern = this.parseVariableIdentifier(kind);\n\t        }\n\t        return pattern;\n\t    };\n\t    Parser.prototype.parsePatternWithDefault = function (params, kind) {\n\t        var startToken = this.lookahead;\n\t        var pattern = this.parsePattern(params, kind);\n\t        if (this.match('=')) {\n\t            this.nextToken();\n\t            var previousAllowYield = this.context.allowYield;\n\t            this.context.allowYield = true;\n\t            var right = this.isolateCoverGrammar(this.parseAssignmentExpression);\n\t            this.context.allowYield = previousAllowYield;\n\t            pattern = this.finalize(this.startNode(startToken), new Node.AssignmentPattern(pattern, right));\n\t        }\n\t        return pattern;\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-variable-statement\n\t    Parser.prototype.parseVariableIdentifier = function (kind) {\n\t        var node = this.createNode();\n\t        var token = this.nextToken();\n\t        if (token.type === 4 /* Keyword */ && token.value === 'yield') {\n\t            if (this.context.strict) {\n\t                this.tolerateUnexpectedToken(token, messages_1.Messages.StrictReservedWord);\n\t            }\n\t            else if (!this.context.allowYield) {\n\t                this.throwUnexpectedToken(token);\n\t            }\n\t        }\n\t        else if (token.type !== 3 /* Identifier */) {\n\t            if (this.context.strict && token.type === 4 /* Keyword */ && this.scanner.isStrictModeReservedWord(token.value)) {\n\t                this.tolerateUnexpectedToken(token, messages_1.Messages.StrictReservedWord);\n\t            }\n\t            else {\n\t                if (this.context.strict || token.value !== 'let' || kind !== 'var') {\n\t                    this.throwUnexpectedToken(token);\n\t                }\n\t            }\n\t        }\n\t        else if ((this.context.isModule || this.context.await) && token.type === 3 /* Identifier */ && token.value === 'await') {\n\t            this.tolerateUnexpectedToken(token);\n\t        }\n\t        return this.finalize(node, new Node.Identifier(token.value));\n\t    };\n\t    Parser.prototype.parseVariableDeclaration = function (options) {\n\t        var node = this.createNode();\n\t        var params = [];\n\t        var id = this.parsePattern(params, 'var');\n\t        if (this.context.strict && id.type === syntax_1.Syntax.Identifier) {\n\t            if (this.scanner.isRestrictedWord(id.name)) {\n\t                this.tolerateError(messages_1.Messages.StrictVarName);\n\t            }\n\t        }\n\t        var init = null;\n\t        if (this.match('=')) {\n\t            this.nextToken();\n\t            init = this.isolateCoverGrammar(this.parseAssignmentExpression);\n\t        }\n\t        else if (id.type !== syntax_1.Syntax.Identifier && !options.inFor) {\n\t            this.expect('=');\n\t        }\n\t        return this.finalize(node, new Node.VariableDeclarator(id, init));\n\t    };\n\t    Parser.prototype.parseVariableDeclarationList = function (options) {\n\t        var opt = { inFor: options.inFor };\n\t        var list = [];\n\t        list.push(this.parseVariableDeclaration(opt));\n\t        while (this.match(',')) {\n\t            this.nextToken();\n\t            list.push(this.parseVariableDeclaration(opt));\n\t        }\n\t        return list;\n\t    };\n\t    Parser.prototype.parseVariableStatement = function () {\n\t        var node = this.createNode();\n\t        this.expectKeyword('var');\n\t        var declarations = this.parseVariableDeclarationList({ inFor: false });\n\t        this.consumeSemicolon();\n\t        return this.finalize(node, new Node.VariableDeclaration(declarations, 'var'));\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-empty-statement\n\t    Parser.prototype.parseEmptyStatement = function () {\n\t        var node = this.createNode();\n\t        this.expect(';');\n\t        return this.finalize(node, new Node.EmptyStatement());\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-expression-statement\n\t    Parser.prototype.parseExpressionStatement = function () {\n\t        var node = this.createNode();\n\t        var expr = this.parseExpression();\n\t        this.consumeSemicolon();\n\t        return this.finalize(node, new Node.ExpressionStatement(expr));\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-if-statement\n\t    Parser.prototype.parseIfClause = function () {\n\t        if (this.context.strict && this.matchKeyword('function')) {\n\t            this.tolerateError(messages_1.Messages.StrictFunction);\n\t        }\n\t        return this.parseStatement();\n\t    };\n\t    Parser.prototype.parseIfStatement = function () {\n\t        var node = this.createNode();\n\t        var consequent;\n\t        var alternate = null;\n\t        this.expectKeyword('if');\n\t        this.expect('(');\n\t        var test = this.parseExpression();\n\t        if (!this.match(')') && this.config.tolerant) {\n\t            this.tolerateUnexpectedToken(this.nextToken());\n\t            consequent = this.finalize(this.createNode(), new Node.EmptyStatement());\n\t        }\n\t        else {\n\t            this.expect(')');\n\t            consequent = this.parseIfClause();\n\t            if (this.matchKeyword('else')) {\n\t                this.nextToken();\n\t                alternate = this.parseIfClause();\n\t            }\n\t        }\n\t        return this.finalize(node, new Node.IfStatement(test, consequent, alternate));\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-do-while-statement\n\t    Parser.prototype.parseDoWhileStatement = function () {\n\t        var node = this.createNode();\n\t        this.expectKeyword('do');\n\t        var previousInIteration = this.context.inIteration;\n\t        this.context.inIteration = true;\n\t        var body = this.parseStatement();\n\t        this.context.inIteration = previousInIteration;\n\t        this.expectKeyword('while');\n\t        this.expect('(');\n\t        var test = this.parseExpression();\n\t        if (!this.match(')') && this.config.tolerant) {\n\t            this.tolerateUnexpectedToken(this.nextToken());\n\t        }\n\t        else {\n\t            this.expect(')');\n\t            if (this.match(';')) {\n\t                this.nextToken();\n\t            }\n\t        }\n\t        return this.finalize(node, new Node.DoWhileStatement(body, test));\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-while-statement\n\t    Parser.prototype.parseWhileStatement = function () {\n\t        var node = this.createNode();\n\t        var body;\n\t        this.expectKeyword('while');\n\t        this.expect('(');\n\t        var test = this.parseExpression();\n\t        if (!this.match(')') && this.config.tolerant) {\n\t            this.tolerateUnexpectedToken(this.nextToken());\n\t            body = this.finalize(this.createNode(), new Node.EmptyStatement());\n\t        }\n\t        else {\n\t            this.expect(')');\n\t            var previousInIteration = this.context.inIteration;\n\t            this.context.inIteration = true;\n\t            body = this.parseStatement();\n\t            this.context.inIteration = previousInIteration;\n\t        }\n\t        return this.finalize(node, new Node.WhileStatement(test, body));\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-for-statement\n\t    // https://tc39.github.io/ecma262/#sec-for-in-and-for-of-statements\n\t    Parser.prototype.parseForStatement = function () {\n\t        var init = null;\n\t        var test = null;\n\t        var update = null;\n\t        var forIn = true;\n\t        var left, right;\n\t        var node = this.createNode();\n\t        this.expectKeyword('for');\n\t        this.expect('(');\n\t        if (this.match(';')) {\n\t            this.nextToken();\n\t        }\n\t        else {\n\t            if (this.matchKeyword('var')) {\n\t                init = this.createNode();\n\t                this.nextToken();\n\t                var previousAllowIn = this.context.allowIn;\n\t                this.context.allowIn = false;\n\t                var declarations = this.parseVariableDeclarationList({ inFor: true });\n\t                this.context.allowIn = previousAllowIn;\n\t                if (declarations.length === 1 && this.matchKeyword('in')) {\n\t                    var decl = declarations[0];\n\t                    if (decl.init && (decl.id.type === syntax_1.Syntax.ArrayPattern || decl.id.type === syntax_1.Syntax.ObjectPattern || this.context.strict)) {\n\t                        this.tolerateError(messages_1.Messages.ForInOfLoopInitializer, 'for-in');\n\t                    }\n\t                    init = this.finalize(init, new Node.VariableDeclaration(declarations, 'var'));\n\t                    this.nextToken();\n\t                    left = init;\n\t                    right = this.parseExpression();\n\t                    init = null;\n\t                }\n\t                else if (declarations.length === 1 && declarations[0].init === null && this.matchContextualKeyword('of')) {\n\t                    init = this.finalize(init, new Node.VariableDeclaration(declarations, 'var'));\n\t                    this.nextToken();\n\t                    left = init;\n\t                    right = this.parseAssignmentExpression();\n\t                    init = null;\n\t                    forIn = false;\n\t                }\n\t                else {\n\t                    init = this.finalize(init, new Node.VariableDeclaration(declarations, 'var'));\n\t                    this.expect(';');\n\t                }\n\t            }\n\t            else if (this.matchKeyword('const') || this.matchKeyword('let')) {\n\t                init = this.createNode();\n\t                var kind = this.nextToken().value;\n\t                if (!this.context.strict && this.lookahead.value === 'in') {\n\t                    init = this.finalize(init, new Node.Identifier(kind));\n\t                    this.nextToken();\n\t                    left = init;\n\t                    right = this.parseExpression();\n\t                    init = null;\n\t                }\n\t                else {\n\t                    var previousAllowIn = this.context.allowIn;\n\t                    this.context.allowIn = false;\n\t                    var declarations = this.parseBindingList(kind, { inFor: true });\n\t                    this.context.allowIn = previousAllowIn;\n\t                    if (declarations.length === 1 && declarations[0].init === null && this.matchKeyword('in')) {\n\t                        init = this.finalize(init, new Node.VariableDeclaration(declarations, kind));\n\t                        this.nextToken();\n\t                        left = init;\n\t                        right = this.parseExpression();\n\t                        init = null;\n\t                    }\n\t                    else if (declarations.length === 1 && declarations[0].init === null && this.matchContextualKeyword('of')) {\n\t                        init = this.finalize(init, new Node.VariableDeclaration(declarations, kind));\n\t                        this.nextToken();\n\t                        left = init;\n\t                        right = this.parseAssignmentExpression();\n\t                        init = null;\n\t                        forIn = false;\n\t                    }\n\t                    else {\n\t                        this.consumeSemicolon();\n\t                        init = this.finalize(init, new Node.VariableDeclaration(declarations, kind));\n\t                    }\n\t                }\n\t            }\n\t            else {\n\t                var initStartToken = this.lookahead;\n\t                var previousAllowIn = this.context.allowIn;\n\t                this.context.allowIn = false;\n\t                init = this.inheritCoverGrammar(this.parseAssignmentExpression);\n\t                this.context.allowIn = previousAllowIn;\n\t                if (this.matchKeyword('in')) {\n\t                    if (!this.context.isAssignmentTarget || init.type === syntax_1.Syntax.AssignmentExpression) {\n\t                        this.tolerateError(messages_1.Messages.InvalidLHSInForIn);\n\t                    }\n\t                    this.nextToken();\n\t                    this.reinterpretExpressionAsPattern(init);\n\t                    left = init;\n\t                    right = this.parseExpression();\n\t                    init = null;\n\t                }\n\t                else if (this.matchContextualKeyword('of')) {\n\t                    if (!this.context.isAssignmentTarget || init.type === syntax_1.Syntax.AssignmentExpression) {\n\t                        this.tolerateError(messages_1.Messages.InvalidLHSInForLoop);\n\t                    }\n\t                    this.nextToken();\n\t                    this.reinterpretExpressionAsPattern(init);\n\t                    left = init;\n\t                    right = this.parseAssignmentExpression();\n\t                    init = null;\n\t                    forIn = false;\n\t                }\n\t                else {\n\t                    if (this.match(',')) {\n\t                        var initSeq = [init];\n\t                        while (this.match(',')) {\n\t                            this.nextToken();\n\t                            initSeq.push(this.isolateCoverGrammar(this.parseAssignmentExpression));\n\t                        }\n\t                        init = this.finalize(this.startNode(initStartToken), new Node.SequenceExpression(initSeq));\n\t                    }\n\t                    this.expect(';');\n\t                }\n\t            }\n\t        }\n\t        if (typeof left === 'undefined') {\n\t            if (!this.match(';')) {\n\t                test = this.parseExpression();\n\t            }\n\t            this.expect(';');\n\t            if (!this.match(')')) {\n\t                update = this.parseExpression();\n\t            }\n\t        }\n\t        var body;\n\t        if (!this.match(')') && this.config.tolerant) {\n\t            this.tolerateUnexpectedToken(this.nextToken());\n\t            body = this.finalize(this.createNode(), new Node.EmptyStatement());\n\t        }\n\t        else {\n\t            this.expect(')');\n\t            var previousInIteration = this.context.inIteration;\n\t            this.context.inIteration = true;\n\t            body = this.isolateCoverGrammar(this.parseStatement);\n\t            this.context.inIteration = previousInIteration;\n\t        }\n\t        return (typeof left === 'undefined') ?\n\t            this.finalize(node, new Node.ForStatement(init, test, update, body)) :\n\t            forIn ? this.finalize(node, new Node.ForInStatement(left, right, body)) :\n\t                this.finalize(node, new Node.ForOfStatement(left, right, body));\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-continue-statement\n\t    Parser.prototype.parseContinueStatement = function () {\n\t        var node = this.createNode();\n\t        this.expectKeyword('continue');\n\t        var label = null;\n\t        if (this.lookahead.type === 3 /* Identifier */ && !this.hasLineTerminator) {\n\t            var id = this.parseVariableIdentifier();\n\t            label = id;\n\t            var key = '$' + id.name;\n\t            if (!Object.prototype.hasOwnProperty.call(this.context.labelSet, key)) {\n\t                this.throwError(messages_1.Messages.UnknownLabel, id.name);\n\t            }\n\t        }\n\t        this.consumeSemicolon();\n\t        if (label === null && !this.context.inIteration) {\n\t            this.throwError(messages_1.Messages.IllegalContinue);\n\t        }\n\t        return this.finalize(node, new Node.ContinueStatement(label));\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-break-statement\n\t    Parser.prototype.parseBreakStatement = function () {\n\t        var node = this.createNode();\n\t        this.expectKeyword('break');\n\t        var label = null;\n\t        if (this.lookahead.type === 3 /* Identifier */ && !this.hasLineTerminator) {\n\t            var id = this.parseVariableIdentifier();\n\t            var key = '$' + id.name;\n\t            if (!Object.prototype.hasOwnProperty.call(this.context.labelSet, key)) {\n\t                this.throwError(messages_1.Messages.UnknownLabel, id.name);\n\t            }\n\t            label = id;\n\t        }\n\t        this.consumeSemicolon();\n\t        if (label === null && !this.context.inIteration && !this.context.inSwitch) {\n\t            this.throwError(messages_1.Messages.IllegalBreak);\n\t        }\n\t        return this.finalize(node, new Node.BreakStatement(label));\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-return-statement\n\t    Parser.prototype.parseReturnStatement = function () {\n\t        if (!this.context.inFunctionBody) {\n\t            this.tolerateError(messages_1.Messages.IllegalReturn);\n\t        }\n\t        var node = this.createNode();\n\t        this.expectKeyword('return');\n\t        var hasArgument = (!this.match(';') && !this.match('}') &&\n\t            !this.hasLineTerminator && this.lookahead.type !== 2 /* EOF */) ||\n\t            this.lookahead.type === 8 /* StringLiteral */ ||\n\t            this.lookahead.type === 10 /* Template */;\n\t        var argument = hasArgument ? this.parseExpression() : null;\n\t        this.consumeSemicolon();\n\t        return this.finalize(node, new Node.ReturnStatement(argument));\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-with-statement\n\t    Parser.prototype.parseWithStatement = function () {\n\t        if (this.context.strict) {\n\t            this.tolerateError(messages_1.Messages.StrictModeWith);\n\t        }\n\t        var node = this.createNode();\n\t        var body;\n\t        this.expectKeyword('with');\n\t        this.expect('(');\n\t        var object = this.parseExpression();\n\t        if (!this.match(')') && this.config.tolerant) {\n\t            this.tolerateUnexpectedToken(this.nextToken());\n\t            body = this.finalize(this.createNode(), new Node.EmptyStatement());\n\t        }\n\t        else {\n\t            this.expect(')');\n\t            body = this.parseStatement();\n\t        }\n\t        return this.finalize(node, new Node.WithStatement(object, body));\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-switch-statement\n\t    Parser.prototype.parseSwitchCase = function () {\n\t        var node = this.createNode();\n\t        var test;\n\t        if (this.matchKeyword('default')) {\n\t            this.nextToken();\n\t            test = null;\n\t        }\n\t        else {\n\t            this.expectKeyword('case');\n\t            test = this.parseExpression();\n\t        }\n\t        this.expect(':');\n\t        var consequent = [];\n\t        while (true) {\n\t            if (this.match('}') || this.matchKeyword('default') || this.matchKeyword('case')) {\n\t                break;\n\t            }\n\t            consequent.push(this.parseStatementListItem());\n\t        }\n\t        return this.finalize(node, new Node.SwitchCase(test, consequent));\n\t    };\n\t    Parser.prototype.parseSwitchStatement = function () {\n\t        var node = this.createNode();\n\t        this.expectKeyword('switch');\n\t        this.expect('(');\n\t        var discriminant = this.parseExpression();\n\t        this.expect(')');\n\t        var previousInSwitch = this.context.inSwitch;\n\t        this.context.inSwitch = true;\n\t        var cases = [];\n\t        var defaultFound = false;\n\t        this.expect('{');\n\t        while (true) {\n\t            if (this.match('}')) {\n\t                break;\n\t            }\n\t            var clause = this.parseSwitchCase();\n\t            if (clause.test === null) {\n\t                if (defaultFound) {\n\t                    this.throwError(messages_1.Messages.MultipleDefaultsInSwitch);\n\t                }\n\t                defaultFound = true;\n\t            }\n\t            cases.push(clause);\n\t        }\n\t        this.expect('}');\n\t        this.context.inSwitch = previousInSwitch;\n\t        return this.finalize(node, new Node.SwitchStatement(discriminant, cases));\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-labelled-statements\n\t    Parser.prototype.parseLabelledStatement = function () {\n\t        var node = this.createNode();\n\t        var expr = this.parseExpression();\n\t        var statement;\n\t        if ((expr.type === syntax_1.Syntax.Identifier) && this.match(':')) {\n\t            this.nextToken();\n\t            var id = expr;\n\t            var key = '$' + id.name;\n\t            if (Object.prototype.hasOwnProperty.call(this.context.labelSet, key)) {\n\t                this.throwError(messages_1.Messages.Redeclaration, 'Label', id.name);\n\t            }\n\t            this.context.labelSet[key] = true;\n\t            var body = void 0;\n\t            if (this.matchKeyword('class')) {\n\t                this.tolerateUnexpectedToken(this.lookahead);\n\t                body = this.parseClassDeclaration();\n\t            }\n\t            else if (this.matchKeyword('function')) {\n\t                var token = this.lookahead;\n\t                var declaration = this.parseFunctionDeclaration();\n\t                if (this.context.strict) {\n\t                    this.tolerateUnexpectedToken(token, messages_1.Messages.StrictFunction);\n\t                }\n\t                else if (declaration.generator) {\n\t                    this.tolerateUnexpectedToken(token, messages_1.Messages.GeneratorInLegacyContext);\n\t                }\n\t                body = declaration;\n\t            }\n\t            else {\n\t                body = this.parseStatement();\n\t            }\n\t            delete this.context.labelSet[key];\n\t            statement = new Node.LabeledStatement(id, body);\n\t        }\n\t        else {\n\t            this.consumeSemicolon();\n\t            statement = new Node.ExpressionStatement(expr);\n\t        }\n\t        return this.finalize(node, statement);\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-throw-statement\n\t    Parser.prototype.parseThrowStatement = function () {\n\t        var node = this.createNode();\n\t        this.expectKeyword('throw');\n\t        if (this.hasLineTerminator) {\n\t            this.throwError(messages_1.Messages.NewlineAfterThrow);\n\t        }\n\t        var argument = this.parseExpression();\n\t        this.consumeSemicolon();\n\t        return this.finalize(node, new Node.ThrowStatement(argument));\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-try-statement\n\t    Parser.prototype.parseCatchClause = function () {\n\t        var node = this.createNode();\n\t        this.expectKeyword('catch');\n\t        this.expect('(');\n\t        if (this.match(')')) {\n\t            this.throwUnexpectedToken(this.lookahead);\n\t        }\n\t        var params = [];\n\t        var param = this.parsePattern(params);\n\t        var paramMap = {};\n\t        for (var i = 0; i < params.length; i++) {\n\t            var key = '$' + params[i].value;\n\t            if (Object.prototype.hasOwnProperty.call(paramMap, key)) {\n\t                this.tolerateError(messages_1.Messages.DuplicateBinding, params[i].value);\n\t            }\n\t            paramMap[key] = true;\n\t        }\n\t        if (this.context.strict && param.type === syntax_1.Syntax.Identifier) {\n\t            if (this.scanner.isRestrictedWord(param.name)) {\n\t                this.tolerateError(messages_1.Messages.StrictCatchVariable);\n\t            }\n\t        }\n\t        this.expect(')');\n\t        var body = this.parseBlock();\n\t        return this.finalize(node, new Node.CatchClause(param, body));\n\t    };\n\t    Parser.prototype.parseFinallyClause = function () {\n\t        this.expectKeyword('finally');\n\t        return this.parseBlock();\n\t    };\n\t    Parser.prototype.parseTryStatement = function () {\n\t        var node = this.createNode();\n\t        this.expectKeyword('try');\n\t        var block = this.parseBlock();\n\t        var handler = this.matchKeyword('catch') ? this.parseCatchClause() : null;\n\t        var finalizer = this.matchKeyword('finally') ? this.parseFinallyClause() : null;\n\t        if (!handler && !finalizer) {\n\t            this.throwError(messages_1.Messages.NoCatchOrFinally);\n\t        }\n\t        return this.finalize(node, new Node.TryStatement(block, handler, finalizer));\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-debugger-statement\n\t    Parser.prototype.parseDebuggerStatement = function () {\n\t        var node = this.createNode();\n\t        this.expectKeyword('debugger');\n\t        this.consumeSemicolon();\n\t        return this.finalize(node, new Node.DebuggerStatement());\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-ecmascript-language-statements-and-declarations\n\t    Parser.prototype.parseStatement = function () {\n\t        var statement;\n\t        switch (this.lookahead.type) {\n\t            case 1 /* BooleanLiteral */:\n\t            case 5 /* NullLiteral */:\n\t            case 6 /* NumericLiteral */:\n\t            case 8 /* StringLiteral */:\n\t            case 10 /* Template */:\n\t            case 9 /* RegularExpression */:\n\t                statement = this.parseExpressionStatement();\n\t                break;\n\t            case 7 /* Punctuator */:\n\t                var value = this.lookahead.value;\n\t                if (value === '{') {\n\t                    statement = this.parseBlock();\n\t                }\n\t                else if (value === '(') {\n\t                    statement = this.parseExpressionStatement();\n\t                }\n\t                else if (value === ';') {\n\t                    statement = this.parseEmptyStatement();\n\t                }\n\t                else {\n\t                    statement = this.parseExpressionStatement();\n\t                }\n\t                break;\n\t            case 3 /* Identifier */:\n\t                statement = this.matchAsyncFunction() ? this.parseFunctionDeclaration() : this.parseLabelledStatement();\n\t                break;\n\t            case 4 /* Keyword */:\n\t                switch (this.lookahead.value) {\n\t                    case 'break':\n\t                        statement = this.parseBreakStatement();\n\t                        break;\n\t                    case 'continue':\n\t                        statement = this.parseContinueStatement();\n\t                        break;\n\t                    case 'debugger':\n\t                        statement = this.parseDebuggerStatement();\n\t                        break;\n\t                    case 'do':\n\t                        statement = this.parseDoWhileStatement();\n\t                        break;\n\t                    case 'for':\n\t                        statement = this.parseForStatement();\n\t                        break;\n\t                    case 'function':\n\t                        statement = this.parseFunctionDeclaration();\n\t                        break;\n\t                    case 'if':\n\t                        statement = this.parseIfStatement();\n\t                        break;\n\t                    case 'return':\n\t                        statement = this.parseReturnStatement();\n\t                        break;\n\t                    case 'switch':\n\t                        statement = this.parseSwitchStatement();\n\t                        break;\n\t                    case 'throw':\n\t                        statement = this.parseThrowStatement();\n\t                        break;\n\t                    case 'try':\n\t                        statement = this.parseTryStatement();\n\t                        break;\n\t                    case 'var':\n\t                        statement = this.parseVariableStatement();\n\t                        break;\n\t                    case 'while':\n\t                        statement = this.parseWhileStatement();\n\t                        break;\n\t                    case 'with':\n\t                        statement = this.parseWithStatement();\n\t                        break;\n\t                    default:\n\t                        statement = this.parseExpressionStatement();\n\t                        break;\n\t                }\n\t                break;\n\t            default:\n\t                statement = this.throwUnexpectedToken(this.lookahead);\n\t        }\n\t        return statement;\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-function-definitions\n\t    Parser.prototype.parseFunctionSourceElements = function () {\n\t        var node = this.createNode();\n\t        this.expect('{');\n\t        var body = this.parseDirectivePrologues();\n\t        var previousLabelSet = this.context.labelSet;\n\t        var previousInIteration = this.context.inIteration;\n\t        var previousInSwitch = this.context.inSwitch;\n\t        var previousInFunctionBody = this.context.inFunctionBody;\n\t        this.context.labelSet = {};\n\t        this.context.inIteration = false;\n\t        this.context.inSwitch = false;\n\t        this.context.inFunctionBody = true;\n\t        while (this.lookahead.type !== 2 /* EOF */) {\n\t            if (this.match('}')) {\n\t                break;\n\t            }\n\t            body.push(this.parseStatementListItem());\n\t        }\n\t        this.expect('}');\n\t        this.context.labelSet = previousLabelSet;\n\t        this.context.inIteration = previousInIteration;\n\t        this.context.inSwitch = previousInSwitch;\n\t        this.context.inFunctionBody = previousInFunctionBody;\n\t        return this.finalize(node, new Node.BlockStatement(body));\n\t    };\n\t    Parser.prototype.validateParam = function (options, param, name) {\n\t        var key = '$' + name;\n\t        if (this.context.strict) {\n\t            if (this.scanner.isRestrictedWord(name)) {\n\t                options.stricted = param;\n\t                options.message = messages_1.Messages.StrictParamName;\n\t            }\n\t            if (Object.prototype.hasOwnProperty.call(options.paramSet, key)) {\n\t                options.stricted = param;\n\t                options.message = messages_1.Messages.StrictParamDupe;\n\t            }\n\t        }\n\t        else if (!options.firstRestricted) {\n\t            if (this.scanner.isRestrictedWord(name)) {\n\t                options.firstRestricted = param;\n\t                options.message = messages_1.Messages.StrictParamName;\n\t            }\n\t            else if (this.scanner.isStrictModeReservedWord(name)) {\n\t                options.firstRestricted = param;\n\t                options.message = messages_1.Messages.StrictReservedWord;\n\t            }\n\t            else if (Object.prototype.hasOwnProperty.call(options.paramSet, key)) {\n\t                options.stricted = param;\n\t                options.message = messages_1.Messages.StrictParamDupe;\n\t            }\n\t        }\n\t        /* istanbul ignore next */\n\t        if (typeof Object.defineProperty === 'function') {\n\t            Object.defineProperty(options.paramSet, key, { value: true, enumerable: true, writable: true, configurable: true });\n\t        }\n\t        else {\n\t            options.paramSet[key] = true;\n\t        }\n\t    };\n\t    Parser.prototype.parseRestElement = function (params) {\n\t        var node = this.createNode();\n\t        this.expect('...');\n\t        var arg = this.parsePattern(params);\n\t        if (this.match('=')) {\n\t            this.throwError(messages_1.Messages.DefaultRestParameter);\n\t        }\n\t        if (!this.match(')')) {\n\t            this.throwError(messages_1.Messages.ParameterAfterRestParameter);\n\t        }\n\t        return this.finalize(node, new Node.RestElement(arg));\n\t    };\n\t    Parser.prototype.parseFormalParameter = function (options) {\n\t        var params = [];\n\t        var param = this.match('...') ? this.parseRestElement(params) : this.parsePatternWithDefault(params);\n\t        for (var i = 0; i < params.length; i++) {\n\t            this.validateParam(options, params[i], params[i].value);\n\t        }\n\t        options.simple = options.simple && (param instanceof Node.Identifier);\n\t        options.params.push(param);\n\t    };\n\t    Parser.prototype.parseFormalParameters = function (firstRestricted) {\n\t        var options;\n\t        options = {\n\t            simple: true,\n\t            params: [],\n\t            firstRestricted: firstRestricted\n\t        };\n\t        this.expect('(');\n\t        if (!this.match(')')) {\n\t            options.paramSet = {};\n\t            while (this.lookahead.type !== 2 /* EOF */) {\n\t                this.parseFormalParameter(options);\n\t                if (this.match(')')) {\n\t                    break;\n\t                }\n\t                this.expect(',');\n\t                if (this.match(')')) {\n\t                    break;\n\t                }\n\t            }\n\t        }\n\t        this.expect(')');\n\t        return {\n\t            simple: options.simple,\n\t            params: options.params,\n\t            stricted: options.stricted,\n\t            firstRestricted: options.firstRestricted,\n\t            message: options.message\n\t        };\n\t    };\n\t    Parser.prototype.matchAsyncFunction = function () {\n\t        var match = this.matchContextualKeyword('async');\n\t        if (match) {\n\t            var state = this.scanner.saveState();\n\t            this.scanner.scanComments();\n\t            var next = this.scanner.lex();\n\t            this.scanner.restoreState(state);\n\t            match = (state.lineNumber === next.lineNumber) && (next.type === 4 /* Keyword */) && (next.value === 'function');\n\t        }\n\t        return match;\n\t    };\n\t    Parser.prototype.parseFunctionDeclaration = function (identifierIsOptional) {\n\t        var node = this.createNode();\n\t        var isAsync = this.matchContextualKeyword('async');\n\t        if (isAsync) {\n\t            this.nextToken();\n\t        }\n\t        this.expectKeyword('function');\n\t        var isGenerator = isAsync ? false : this.match('*');\n\t        if (isGenerator) {\n\t            this.nextToken();\n\t        }\n\t        var message;\n\t        var id = null;\n\t        var firstRestricted = null;\n\t        if (!identifierIsOptional || !this.match('(')) {\n\t            var token = this.lookahead;\n\t            id = this.parseVariableIdentifier();\n\t            if (this.context.strict) {\n\t                if (this.scanner.isRestrictedWord(token.value)) {\n\t                    this.tolerateUnexpectedToken(token, messages_1.Messages.StrictFunctionName);\n\t                }\n\t            }\n\t            else {\n\t                if (this.scanner.isRestrictedWord(token.value)) {\n\t                    firstRestricted = token;\n\t                    message = messages_1.Messages.StrictFunctionName;\n\t                }\n\t                else if (this.scanner.isStrictModeReservedWord(token.value)) {\n\t                    firstRestricted = token;\n\t                    message = messages_1.Messages.StrictReservedWord;\n\t                }\n\t            }\n\t        }\n\t        var previousAllowAwait = this.context.await;\n\t        var previousAllowYield = this.context.allowYield;\n\t        this.context.await = isAsync;\n\t        this.context.allowYield = !isGenerator;\n\t        var formalParameters = this.parseFormalParameters(firstRestricted);\n\t        var params = formalParameters.params;\n\t        var stricted = formalParameters.stricted;\n\t        firstRestricted = formalParameters.firstRestricted;\n\t        if (formalParameters.message) {\n\t            message = formalParameters.message;\n\t        }\n\t        var previousStrict = this.context.strict;\n\t        var previousAllowStrictDirective = this.context.allowStrictDirective;\n\t        this.context.allowStrictDirective = formalParameters.simple;\n\t        var body = this.parseFunctionSourceElements();\n\t        if (this.context.strict && firstRestricted) {\n\t            this.throwUnexpectedToken(firstRestricted, message);\n\t        }\n\t        if (this.context.strict && stricted) {\n\t            this.tolerateUnexpectedToken(stricted, message);\n\t        }\n\t        this.context.strict = previousStrict;\n\t        this.context.allowStrictDirective = previousAllowStrictDirective;\n\t        this.context.await = previousAllowAwait;\n\t        this.context.allowYield = previousAllowYield;\n\t        return isAsync ? this.finalize(node, new Node.AsyncFunctionDeclaration(id, params, body)) :\n\t            this.finalize(node, new Node.FunctionDeclaration(id, params, body, isGenerator));\n\t    };\n\t    Parser.prototype.parseFunctionExpression = function () {\n\t        var node = this.createNode();\n\t        var isAsync = this.matchContextualKeyword('async');\n\t        if (isAsync) {\n\t            this.nextToken();\n\t        }\n\t        this.expectKeyword('function');\n\t        var isGenerator = isAsync ? false : this.match('*');\n\t        if (isGenerator) {\n\t            this.nextToken();\n\t        }\n\t        var message;\n\t        var id = null;\n\t        var firstRestricted;\n\t        var previousAllowAwait = this.context.await;\n\t        var previousAllowYield = this.context.allowYield;\n\t        this.context.await = isAsync;\n\t        this.context.allowYield = !isGenerator;\n\t        if (!this.match('(')) {\n\t            var token = this.lookahead;\n\t            id = (!this.context.strict && !isGenerator && this.matchKeyword('yield')) ? this.parseIdentifierName() : this.parseVariableIdentifier();\n\t            if (this.context.strict) {\n\t                if (this.scanner.isRestrictedWord(token.value)) {\n\t                    this.tolerateUnexpectedToken(token, messages_1.Messages.StrictFunctionName);\n\t                }\n\t            }\n\t            else {\n\t                if (this.scanner.isRestrictedWord(token.value)) {\n\t                    firstRestricted = token;\n\t                    message = messages_1.Messages.StrictFunctionName;\n\t                }\n\t                else if (this.scanner.isStrictModeReservedWord(token.value)) {\n\t                    firstRestricted = token;\n\t                    message = messages_1.Messages.StrictReservedWord;\n\t                }\n\t            }\n\t        }\n\t        var formalParameters = this.parseFormalParameters(firstRestricted);\n\t        var params = formalParameters.params;\n\t        var stricted = formalParameters.stricted;\n\t        firstRestricted = formalParameters.firstRestricted;\n\t        if (formalParameters.message) {\n\t            message = formalParameters.message;\n\t        }\n\t        var previousStrict = this.context.strict;\n\t        var previousAllowStrictDirective = this.context.allowStrictDirective;\n\t        this.context.allowStrictDirective = formalParameters.simple;\n\t        var body = this.parseFunctionSourceElements();\n\t        if (this.context.strict && firstRestricted) {\n\t            this.throwUnexpectedToken(firstRestricted, message);\n\t        }\n\t        if (this.context.strict && stricted) {\n\t            this.tolerateUnexpectedToken(stricted, message);\n\t        }\n\t        this.context.strict = previousStrict;\n\t        this.context.allowStrictDirective = previousAllowStrictDirective;\n\t        this.context.await = previousAllowAwait;\n\t        this.context.allowYield = previousAllowYield;\n\t        return isAsync ? this.finalize(node, new Node.AsyncFunctionExpression(id, params, body)) :\n\t            this.finalize(node, new Node.FunctionExpression(id, params, body, isGenerator));\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-directive-prologues-and-the-use-strict-directive\n\t    Parser.prototype.parseDirective = function () {\n\t        var token = this.lookahead;\n\t        var node = this.createNode();\n\t        var expr = this.parseExpression();\n\t        var directive = (expr.type === syntax_1.Syntax.Literal) ? this.getTokenRaw(token).slice(1, -1) : null;\n\t        this.consumeSemicolon();\n\t        return this.finalize(node, directive ? new Node.Directive(expr, directive) : new Node.ExpressionStatement(expr));\n\t    };\n\t    Parser.prototype.parseDirectivePrologues = function () {\n\t        var firstRestricted = null;\n\t        var body = [];\n\t        while (true) {\n\t            var token = this.lookahead;\n\t            if (token.type !== 8 /* StringLiteral */) {\n\t                break;\n\t            }\n\t            var statement = this.parseDirective();\n\t            body.push(statement);\n\t            var directive = statement.directive;\n\t            if (typeof directive !== 'string') {\n\t                break;\n\t            }\n\t            if (directive === 'use strict') {\n\t                this.context.strict = true;\n\t                if (firstRestricted) {\n\t                    this.tolerateUnexpectedToken(firstRestricted, messages_1.Messages.StrictOctalLiteral);\n\t                }\n\t                if (!this.context.allowStrictDirective) {\n\t                    this.tolerateUnexpectedToken(token, messages_1.Messages.IllegalLanguageModeDirective);\n\t                }\n\t            }\n\t            else {\n\t                if (!firstRestricted && token.octal) {\n\t                    firstRestricted = token;\n\t                }\n\t            }\n\t        }\n\t        return body;\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-method-definitions\n\t    Parser.prototype.qualifiedPropertyName = function (token) {\n\t        switch (token.type) {\n\t            case 3 /* Identifier */:\n\t            case 8 /* StringLiteral */:\n\t            case 1 /* BooleanLiteral */:\n\t            case 5 /* NullLiteral */:\n\t            case 6 /* NumericLiteral */:\n\t            case 4 /* Keyword */:\n\t                return true;\n\t            case 7 /* Punctuator */:\n\t                return token.value === '[';\n\t            default:\n\t                break;\n\t        }\n\t        return false;\n\t    };\n\t    Parser.prototype.parseGetterMethod = function () {\n\t        var node = this.createNode();\n\t        var isGenerator = false;\n\t        var previousAllowYield = this.context.allowYield;\n\t        this.context.allowYield = !isGenerator;\n\t        var formalParameters = this.parseFormalParameters();\n\t        if (formalParameters.params.length > 0) {\n\t            this.tolerateError(messages_1.Messages.BadGetterArity);\n\t        }\n\t        var method = this.parsePropertyMethod(formalParameters);\n\t        this.context.allowYield = previousAllowYield;\n\t        return this.finalize(node, new Node.FunctionExpression(null, formalParameters.params, method, isGenerator));\n\t    };\n\t    Parser.prototype.parseSetterMethod = function () {\n\t        var node = this.createNode();\n\t        var isGenerator = false;\n\t        var previousAllowYield = this.context.allowYield;\n\t        this.context.allowYield = !isGenerator;\n\t        var formalParameters = this.parseFormalParameters();\n\t        if (formalParameters.params.length !== 1) {\n\t            this.tolerateError(messages_1.Messages.BadSetterArity);\n\t        }\n\t        else if (formalParameters.params[0] instanceof Node.RestElement) {\n\t            this.tolerateError(messages_1.Messages.BadSetterRestParameter);\n\t        }\n\t        var method = this.parsePropertyMethod(formalParameters);\n\t        this.context.allowYield = previousAllowYield;\n\t        return this.finalize(node, new Node.FunctionExpression(null, formalParameters.params, method, isGenerator));\n\t    };\n\t    Parser.prototype.parseGeneratorMethod = function () {\n\t        var node = this.createNode();\n\t        var isGenerator = true;\n\t        var previousAllowYield = this.context.allowYield;\n\t        this.context.allowYield = true;\n\t        var params = this.parseFormalParameters();\n\t        this.context.allowYield = false;\n\t        var method = this.parsePropertyMethod(params);\n\t        this.context.allowYield = previousAllowYield;\n\t        return this.finalize(node, new Node.FunctionExpression(null, params.params, method, isGenerator));\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-generator-function-definitions\n\t    Parser.prototype.isStartOfExpression = function () {\n\t        var start = true;\n\t        var value = this.lookahead.value;\n\t        switch (this.lookahead.type) {\n\t            case 7 /* Punctuator */:\n\t                start = (value === '[') || (value === '(') || (value === '{') ||\n\t                    (value === '+') || (value === '-') ||\n\t                    (value === '!') || (value === '~') ||\n\t                    (value === '++') || (value === '--') ||\n\t                    (value === '/') || (value === '/='); // regular expression literal\n\t                break;\n\t            case 4 /* Keyword */:\n\t                start = (value === 'class') || (value === 'delete') ||\n\t                    (value === 'function') || (value === 'let') || (value === 'new') ||\n\t                    (value === 'super') || (value === 'this') || (value === 'typeof') ||\n\t                    (value === 'void') || (value === 'yield');\n\t                break;\n\t            default:\n\t                break;\n\t        }\n\t        return start;\n\t    };\n\t    Parser.prototype.parseYieldExpression = function () {\n\t        var node = this.createNode();\n\t        this.expectKeyword('yield');\n\t        var argument = null;\n\t        var delegate = false;\n\t        if (!this.hasLineTerminator) {\n\t            var previousAllowYield = this.context.allowYield;\n\t            this.context.allowYield = false;\n\t            delegate = this.match('*');\n\t            if (delegate) {\n\t                this.nextToken();\n\t                argument = this.parseAssignmentExpression();\n\t            }\n\t            else if (this.isStartOfExpression()) {\n\t                argument = this.parseAssignmentExpression();\n\t            }\n\t            this.context.allowYield = previousAllowYield;\n\t        }\n\t        return this.finalize(node, new Node.YieldExpression(argument, delegate));\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-class-definitions\n\t    Parser.prototype.parseClassElement = function (hasConstructor) {\n\t        var token = this.lookahead;\n\t        var node = this.createNode();\n\t        var kind = '';\n\t        var key = null;\n\t        var value = null;\n\t        var computed = false;\n\t        var method = false;\n\t        var isStatic = false;\n\t        var isAsync = false;\n\t        if (this.match('*')) {\n\t            this.nextToken();\n\t        }\n\t        else {\n\t            computed = this.match('[');\n\t            key = this.parseObjectPropertyKey();\n\t            var id = key;\n\t            if (id.name === 'static' && (this.qualifiedPropertyName(this.lookahead) || this.match('*'))) {\n\t                token = this.lookahead;\n\t                isStatic = true;\n\t                computed = this.match('[');\n\t                if (this.match('*')) {\n\t                    this.nextToken();\n\t                }\n\t                else {\n\t                    key = this.parseObjectPropertyKey();\n\t                }\n\t            }\n\t            if ((token.type === 3 /* Identifier */) && !this.hasLineTerminator && (token.value === 'async')) {\n\t                var punctuator = this.lookahead.value;\n\t                if (punctuator !== ':' && punctuator !== '(' && punctuator !== '*') {\n\t                    isAsync = true;\n\t                    token = this.lookahead;\n\t                    key = this.parseObjectPropertyKey();\n\t                    if (token.type === 3 /* Identifier */ && token.value === 'constructor') {\n\t                        this.tolerateUnexpectedToken(token, messages_1.Messages.ConstructorIsAsync);\n\t                    }\n\t                }\n\t            }\n\t        }\n\t        var lookaheadPropertyKey = this.qualifiedPropertyName(this.lookahead);\n\t        if (token.type === 3 /* Identifier */) {\n\t            if (token.value === 'get' && lookaheadPropertyKey) {\n\t                kind = 'get';\n\t                computed = this.match('[');\n\t                key = this.parseObjectPropertyKey();\n\t                this.context.allowYield = false;\n\t                value = this.parseGetterMethod();\n\t            }\n\t            else if (token.value === 'set' && lookaheadPropertyKey) {\n\t                kind = 'set';\n\t                computed = this.match('[');\n\t                key = this.parseObjectPropertyKey();\n\t                value = this.parseSetterMethod();\n\t            }\n\t        }\n\t        else if (token.type === 7 /* Punctuator */ && token.value === '*' && lookaheadPropertyKey) {\n\t            kind = 'init';\n\t            computed = this.match('[');\n\t            key = this.parseObjectPropertyKey();\n\t            value = this.parseGeneratorMethod();\n\t            method = true;\n\t        }\n\t        if (!kind && key && this.match('(')) {\n\t            kind = 'init';\n\t            value = isAsync ? this.parsePropertyMethodAsyncFunction() : this.parsePropertyMethodFunction();\n\t            method = true;\n\t        }\n\t        if (!kind) {\n\t            this.throwUnexpectedToken(this.lookahead);\n\t        }\n\t        if (kind === 'init') {\n\t            kind = 'method';\n\t        }\n\t        if (!computed) {\n\t            if (isStatic && this.isPropertyKey(key, 'prototype')) {\n\t                this.throwUnexpectedToken(token, messages_1.Messages.StaticPrototype);\n\t            }\n\t            if (!isStatic && this.isPropertyKey(key, 'constructor')) {\n\t                if (kind !== 'method' || !method || (value && value.generator)) {\n\t                    this.throwUnexpectedToken(token, messages_1.Messages.ConstructorSpecialMethod);\n\t                }\n\t                if (hasConstructor.value) {\n\t                    this.throwUnexpectedToken(token, messages_1.Messages.DuplicateConstructor);\n\t                }\n\t                else {\n\t                    hasConstructor.value = true;\n\t                }\n\t                kind = 'constructor';\n\t            }\n\t        }\n\t        return this.finalize(node, new Node.MethodDefinition(key, computed, value, kind, isStatic));\n\t    };\n\t    Parser.prototype.parseClassElementList = function () {\n\t        var body = [];\n\t        var hasConstructor = { value: false };\n\t        this.expect('{');\n\t        while (!this.match('}')) {\n\t            if (this.match(';')) {\n\t                this.nextToken();\n\t            }\n\t            else {\n\t                body.push(this.parseClassElement(hasConstructor));\n\t            }\n\t        }\n\t        this.expect('}');\n\t        return body;\n\t    };\n\t    Parser.prototype.parseClassBody = function () {\n\t        var node = this.createNode();\n\t        var elementList = this.parseClassElementList();\n\t        return this.finalize(node, new Node.ClassBody(elementList));\n\t    };\n\t    Parser.prototype.parseClassDeclaration = function (identifierIsOptional) {\n\t        var node = this.createNode();\n\t        var previousStrict = this.context.strict;\n\t        this.context.strict = true;\n\t        this.expectKeyword('class');\n\t        var id = (identifierIsOptional && (this.lookahead.type !== 3 /* Identifier */)) ? null : this.parseVariableIdentifier();\n\t        var superClass = null;\n\t        if (this.matchKeyword('extends')) {\n\t            this.nextToken();\n\t            superClass = this.isolateCoverGrammar(this.parseLeftHandSideExpressionAllowCall);\n\t        }\n\t        var classBody = this.parseClassBody();\n\t        this.context.strict = previousStrict;\n\t        return this.finalize(node, new Node.ClassDeclaration(id, superClass, classBody));\n\t    };\n\t    Parser.prototype.parseClassExpression = function () {\n\t        var node = this.createNode();\n\t        var previousStrict = this.context.strict;\n\t        this.context.strict = true;\n\t        this.expectKeyword('class');\n\t        var id = (this.lookahead.type === 3 /* Identifier */) ? this.parseVariableIdentifier() : null;\n\t        var superClass = null;\n\t        if (this.matchKeyword('extends')) {\n\t            this.nextToken();\n\t            superClass = this.isolateCoverGrammar(this.parseLeftHandSideExpressionAllowCall);\n\t        }\n\t        var classBody = this.parseClassBody();\n\t        this.context.strict = previousStrict;\n\t        return this.finalize(node, new Node.ClassExpression(id, superClass, classBody));\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-scripts\n\t    // https://tc39.github.io/ecma262/#sec-modules\n\t    Parser.prototype.parseModule = function () {\n\t        this.context.strict = true;\n\t        this.context.isModule = true;\n\t        this.scanner.isModule = true;\n\t        var node = this.createNode();\n\t        var body = this.parseDirectivePrologues();\n\t        while (this.lookahead.type !== 2 /* EOF */) {\n\t            body.push(this.parseStatementListItem());\n\t        }\n\t        return this.finalize(node, new Node.Module(body));\n\t    };\n\t    Parser.prototype.parseScript = function () {\n\t        var node = this.createNode();\n\t        var body = this.parseDirectivePrologues();\n\t        while (this.lookahead.type !== 2 /* EOF */) {\n\t            body.push(this.parseStatementListItem());\n\t        }\n\t        return this.finalize(node, new Node.Script(body));\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-imports\n\t    Parser.prototype.parseModuleSpecifier = function () {\n\t        var node = this.createNode();\n\t        if (this.lookahead.type !== 8 /* StringLiteral */) {\n\t            this.throwError(messages_1.Messages.InvalidModuleSpecifier);\n\t        }\n\t        var token = this.nextToken();\n\t        var raw = this.getTokenRaw(token);\n\t        return this.finalize(node, new Node.Literal(token.value, raw));\n\t    };\n\t    // import {<foo as bar>} ...;\n\t    Parser.prototype.parseImportSpecifier = function () {\n\t        var node = this.createNode();\n\t        var imported;\n\t        var local;\n\t        if (this.lookahead.type === 3 /* Identifier */) {\n\t            imported = this.parseVariableIdentifier();\n\t            local = imported;\n\t            if (this.matchContextualKeyword('as')) {\n\t                this.nextToken();\n\t                local = this.parseVariableIdentifier();\n\t            }\n\t        }\n\t        else {\n\t            imported = this.parseIdentifierName();\n\t            local = imported;\n\t            if (this.matchContextualKeyword('as')) {\n\t                this.nextToken();\n\t                local = this.parseVariableIdentifier();\n\t            }\n\t            else {\n\t                this.throwUnexpectedToken(this.nextToken());\n\t            }\n\t        }\n\t        return this.finalize(node, new Node.ImportSpecifier(local, imported));\n\t    };\n\t    // {foo, bar as bas}\n\t    Parser.prototype.parseNamedImports = function () {\n\t        this.expect('{');\n\t        var specifiers = [];\n\t        while (!this.match('}')) {\n\t            specifiers.push(this.parseImportSpecifier());\n\t            if (!this.match('}')) {\n\t                this.expect(',');\n\t            }\n\t        }\n\t        this.expect('}');\n\t        return specifiers;\n\t    };\n\t    // import <foo> ...;\n\t    Parser.prototype.parseImportDefaultSpecifier = function () {\n\t        var node = this.createNode();\n\t        var local = this.parseIdentifierName();\n\t        return this.finalize(node, new Node.ImportDefaultSpecifier(local));\n\t    };\n\t    // import <* as foo> ...;\n\t    Parser.prototype.parseImportNamespaceSpecifier = function () {\n\t        var node = this.createNode();\n\t        this.expect('*');\n\t        if (!this.matchContextualKeyword('as')) {\n\t            this.throwError(messages_1.Messages.NoAsAfterImportNamespace);\n\t        }\n\t        this.nextToken();\n\t        var local = this.parseIdentifierName();\n\t        return this.finalize(node, new Node.ImportNamespaceSpecifier(local));\n\t    };\n\t    Parser.prototype.parseImportDeclaration = function () {\n\t        if (this.context.inFunctionBody) {\n\t            this.throwError(messages_1.Messages.IllegalImportDeclaration);\n\t        }\n\t        var node = this.createNode();\n\t        this.expectKeyword('import');\n\t        var src;\n\t        var specifiers = [];\n\t        if (this.lookahead.type === 8 /* StringLiteral */) {\n\t            // import 'foo';\n\t            src = this.parseModuleSpecifier();\n\t        }\n\t        else {\n\t            if (this.match('{')) {\n\t                // import {bar}\n\t                specifiers = specifiers.concat(this.parseNamedImports());\n\t            }\n\t            else if (this.match('*')) {\n\t                // import * as foo\n\t                specifiers.push(this.parseImportNamespaceSpecifier());\n\t            }\n\t            else if (this.isIdentifierName(this.lookahead) && !this.matchKeyword('default')) {\n\t                // import foo\n\t                specifiers.push(this.parseImportDefaultSpecifier());\n\t                if (this.match(',')) {\n\t                    this.nextToken();\n\t                    if (this.match('*')) {\n\t                        // import foo, * as foo\n\t                        specifiers.push(this.parseImportNamespaceSpecifier());\n\t                    }\n\t                    else if (this.match('{')) {\n\t                        // import foo, {bar}\n\t                        specifiers = specifiers.concat(this.parseNamedImports());\n\t                    }\n\t                    else {\n\t                        this.throwUnexpectedToken(this.lookahead);\n\t                    }\n\t                }\n\t            }\n\t            else {\n\t                this.throwUnexpectedToken(this.nextToken());\n\t            }\n\t            if (!this.matchContextualKeyword('from')) {\n\t                var message = this.lookahead.value ? messages_1.Messages.UnexpectedToken : messages_1.Messages.MissingFromClause;\n\t                this.throwError(message, this.lookahead.value);\n\t            }\n\t            this.nextToken();\n\t            src = this.parseModuleSpecifier();\n\t        }\n\t        this.consumeSemicolon();\n\t        return this.finalize(node, new Node.ImportDeclaration(specifiers, src));\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-exports\n\t    Parser.prototype.parseExportSpecifier = function () {\n\t        var node = this.createNode();\n\t        var local = this.parseIdentifierName();\n\t        var exported = local;\n\t        if (this.matchContextualKeyword('as')) {\n\t            this.nextToken();\n\t            exported = this.parseIdentifierName();\n\t        }\n\t        return this.finalize(node, new Node.ExportSpecifier(local, exported));\n\t    };\n\t    Parser.prototype.parseExportDeclaration = function () {\n\t        if (this.context.inFunctionBody) {\n\t            this.throwError(messages_1.Messages.IllegalExportDeclaration);\n\t        }\n\t        var node = this.createNode();\n\t        this.expectKeyword('export');\n\t        var exportDeclaration;\n\t        if (this.matchKeyword('default')) {\n\t            // export default ...\n\t            this.nextToken();\n\t            if (this.matchKeyword('function')) {\n\t                // export default function foo () {}\n\t                // export default function () {}\n\t                var declaration = this.parseFunctionDeclaration(true);\n\t                exportDeclaration = this.finalize(node, new Node.ExportDefaultDeclaration(declaration));\n\t            }\n\t            else if (this.matchKeyword('class')) {\n\t                // export default class foo {}\n\t                var declaration = this.parseClassDeclaration(true);\n\t                exportDeclaration = this.finalize(node, new Node.ExportDefaultDeclaration(declaration));\n\t            }\n\t            else if (this.matchContextualKeyword('async')) {\n\t                // export default async function f () {}\n\t                // export default async function () {}\n\t                // export default async x => x\n\t                var declaration = this.matchAsyncFunction() ? this.parseFunctionDeclaration(true) : this.parseAssignmentExpression();\n\t                exportDeclaration = this.finalize(node, new Node.ExportDefaultDeclaration(declaration));\n\t            }\n\t            else {\n\t                if (this.matchContextualKeyword('from')) {\n\t                    this.throwError(messages_1.Messages.UnexpectedToken, this.lookahead.value);\n\t                }\n\t                // export default {};\n\t                // export default [];\n\t                // export default (1 + 2);\n\t                var declaration = this.match('{') ? this.parseObjectInitializer() :\n\t                    this.match('[') ? this.parseArrayInitializer() : this.parseAssignmentExpression();\n\t                this.consumeSemicolon();\n\t                exportDeclaration = this.finalize(node, new Node.ExportDefaultDeclaration(declaration));\n\t            }\n\t        }\n\t        else if (this.match('*')) {\n\t            // export * from 'foo';\n\t            this.nextToken();\n\t            if (!this.matchContextualKeyword('from')) {\n\t                var message = this.lookahead.value ? messages_1.Messages.UnexpectedToken : messages_1.Messages.MissingFromClause;\n\t                this.throwError(message, this.lookahead.value);\n\t            }\n\t            this.nextToken();\n\t            var src = this.parseModuleSpecifier();\n\t            this.consumeSemicolon();\n\t            exportDeclaration = this.finalize(node, new Node.ExportAllDeclaration(src));\n\t        }\n\t        else if (this.lookahead.type === 4 /* Keyword */) {\n\t            // export var f = 1;\n\t            var declaration = void 0;\n\t            switch (this.lookahead.value) {\n\t                case 'let':\n\t                case 'const':\n\t                    declaration = this.parseLexicalDeclaration({ inFor: false });\n\t                    break;\n\t                case 'var':\n\t                case 'class':\n\t                case 'function':\n\t                    declaration = this.parseStatementListItem();\n\t                    break;\n\t                default:\n\t                    this.throwUnexpectedToken(this.lookahead);\n\t            }\n\t            exportDeclaration = this.finalize(node, new Node.ExportNamedDeclaration(declaration, [], null));\n\t        }\n\t        else if (this.matchAsyncFunction()) {\n\t            var declaration = this.parseFunctionDeclaration();\n\t            exportDeclaration = this.finalize(node, new Node.ExportNamedDeclaration(declaration, [], null));\n\t        }\n\t        else {\n\t            var specifiers = [];\n\t            var source = null;\n\t            var isExportFromIdentifier = false;\n\t            this.expect('{');\n\t            while (!this.match('}')) {\n\t                isExportFromIdentifier = isExportFromIdentifier || this.matchKeyword('default');\n\t                specifiers.push(this.parseExportSpecifier());\n\t                if (!this.match('}')) {\n\t                    this.expect(',');\n\t                }\n\t            }\n\t            this.expect('}');\n\t            if (this.matchContextualKeyword('from')) {\n\t                // export {default} from 'foo';\n\t                // export {foo} from 'foo';\n\t                this.nextToken();\n\t                source = this.parseModuleSpecifier();\n\t                this.consumeSemicolon();\n\t            }\n\t            else if (isExportFromIdentifier) {\n\t                // export {default}; // missing fromClause\n\t                var message = this.lookahead.value ? messages_1.Messages.UnexpectedToken : messages_1.Messages.MissingFromClause;\n\t                this.throwError(message, this.lookahead.value);\n\t            }\n\t            else {\n\t                // export {foo};\n\t                this.consumeSemicolon();\n\t            }\n\t            exportDeclaration = this.finalize(node, new Node.ExportNamedDeclaration(null, specifiers, source));\n\t        }\n\t        return exportDeclaration;\n\t    };\n\t    return Parser;\n\t}());\n\texports.Parser = Parser;\n\n\n/***/ },\n/* 9 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\t// Ensure the condition is true, otherwise throw an error.\n\t// This is only to have a better contract semantic, i.e. another safety net\n\t// to catch a logic error. The condition shall be fulfilled in normal case.\n\t// Do NOT use this to enforce a certain condition on any user input.\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tfunction assert(condition, message) {\n\t    /* istanbul ignore if */\n\t    if (!condition) {\n\t        throw new Error('ASSERT: ' + message);\n\t    }\n\t}\n\texports.assert = assert;\n\n\n/***/ },\n/* 10 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\t/* tslint:disable:max-classes-per-file */\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar ErrorHandler = (function () {\n\t    function ErrorHandler() {\n\t        this.errors = [];\n\t        this.tolerant = false;\n\t    }\n\t    ErrorHandler.prototype.recordError = function (error) {\n\t        this.errors.push(error);\n\t    };\n\t    ErrorHandler.prototype.tolerate = function (error) {\n\t        if (this.tolerant) {\n\t            this.recordError(error);\n\t        }\n\t        else {\n\t            throw error;\n\t        }\n\t    };\n\t    ErrorHandler.prototype.constructError = function (msg, column) {\n\t        var error = new Error(msg);\n\t        try {\n\t            throw error;\n\t        }\n\t        catch (base) {\n\t            /* istanbul ignore else */\n\t            if (Object.create && Object.defineProperty) {\n\t                error = Object.create(base);\n\t                Object.defineProperty(error, 'column', { value: column });\n\t            }\n\t        }\n\t        /* istanbul ignore next */\n\t        return error;\n\t    };\n\t    ErrorHandler.prototype.createError = function (index, line, col, description) {\n\t        var msg = 'Line ' + line + ': ' + description;\n\t        var error = this.constructError(msg, col);\n\t        error.index = index;\n\t        error.lineNumber = line;\n\t        error.description = description;\n\t        return error;\n\t    };\n\t    ErrorHandler.prototype.throwError = function (index, line, col, description) {\n\t        throw this.createError(index, line, col, description);\n\t    };\n\t    ErrorHandler.prototype.tolerateError = function (index, line, col, description) {\n\t        var error = this.createError(index, line, col, description);\n\t        if (this.tolerant) {\n\t            this.recordError(error);\n\t        }\n\t        else {\n\t            throw error;\n\t        }\n\t    };\n\t    return ErrorHandler;\n\t}());\n\texports.ErrorHandler = ErrorHandler;\n\n\n/***/ },\n/* 11 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\t// Error messages should be identical to V8.\n\texports.Messages = {\n\t    BadGetterArity: 'Getter must not have any formal parameters',\n\t    BadSetterArity: 'Setter must have exactly one formal parameter',\n\t    BadSetterRestParameter: 'Setter function argument must not be a rest parameter',\n\t    ConstructorIsAsync: 'Class constructor may not be an async method',\n\t    ConstructorSpecialMethod: 'Class constructor may not be an accessor',\n\t    DeclarationMissingInitializer: 'Missing initializer in %0 declaration',\n\t    DefaultRestParameter: 'Unexpected token =',\n\t    DuplicateBinding: 'Duplicate binding %0',\n\t    DuplicateConstructor: 'A class may only have one constructor',\n\t    DuplicateProtoProperty: 'Duplicate __proto__ fields are not allowed in object literals',\n\t    ForInOfLoopInitializer: '%0 loop variable declaration may not have an initializer',\n\t    GeneratorInLegacyContext: 'Generator declarations are not allowed in legacy contexts',\n\t    IllegalBreak: 'Illegal break statement',\n\t    IllegalContinue: 'Illegal continue statement',\n\t    IllegalExportDeclaration: 'Unexpected token',\n\t    IllegalImportDeclaration: 'Unexpected token',\n\t    IllegalLanguageModeDirective: 'Illegal \\'use strict\\' directive in function with non-simple parameter list',\n\t    IllegalReturn: 'Illegal return statement',\n\t    InvalidEscapedReservedWord: 'Keyword must not contain escaped characters',\n\t    InvalidHexEscapeSequence: 'Invalid hexadecimal escape sequence',\n\t    InvalidLHSInAssignment: 'Invalid left-hand side in assignment',\n\t    InvalidLHSInForIn: 'Invalid left-hand side in for-in',\n\t    InvalidLHSInForLoop: 'Invalid left-hand side in for-loop',\n\t    InvalidModuleSpecifier: 'Unexpected token',\n\t    InvalidRegExp: 'Invalid regular expression',\n\t    LetInLexicalBinding: 'let is disallowed as a lexically bound name',\n\t    MissingFromClause: 'Unexpected token',\n\t    MultipleDefaultsInSwitch: 'More than one default clause in switch statement',\n\t    NewlineAfterThrow: 'Illegal newline after throw',\n\t    NoAsAfterImportNamespace: 'Unexpected token',\n\t    NoCatchOrFinally: 'Missing catch or finally after try',\n\t    ParameterAfterRestParameter: 'Rest parameter must be last formal parameter',\n\t    Redeclaration: '%0 \\'%1\\' has already been declared',\n\t    StaticPrototype: 'Classes may not have static property named prototype',\n\t    StrictCatchVariable: 'Catch variable may not be eval or arguments in strict mode',\n\t    StrictDelete: 'Delete of an unqualified identifier in strict mode.',\n\t    StrictFunction: 'In strict mode code, functions can only be declared at top level or inside a block',\n\t    StrictFunctionName: 'Function name may not be eval or arguments in strict mode',\n\t    StrictLHSAssignment: 'Assignment to eval or arguments is not allowed in strict mode',\n\t    StrictLHSPostfix: 'Postfix increment/decrement may not have eval or arguments operand in strict mode',\n\t    StrictLHSPrefix: 'Prefix increment/decrement may not have eval or arguments operand in strict mode',\n\t    StrictModeWith: 'Strict mode code may not include a with statement',\n\t    StrictOctalLiteral: 'Octal literals are not allowed in strict mode.',\n\t    StrictParamDupe: 'Strict mode function may not have duplicate parameter names',\n\t    StrictParamName: 'Parameter name eval or arguments is not allowed in strict mode',\n\t    StrictReservedWord: 'Use of future reserved word in strict mode',\n\t    StrictVarName: 'Variable name may not be eval or arguments in strict mode',\n\t    TemplateOctalLiteral: 'Octal literals are not allowed in template strings.',\n\t    UnexpectedEOS: 'Unexpected end of input',\n\t    UnexpectedIdentifier: 'Unexpected identifier',\n\t    UnexpectedNumber: 'Unexpected number',\n\t    UnexpectedReserved: 'Unexpected reserved word',\n\t    UnexpectedString: 'Unexpected string',\n\t    UnexpectedTemplate: 'Unexpected quasi %0',\n\t    UnexpectedToken: 'Unexpected token %0',\n\t    UnexpectedTokenIllegal: 'Unexpected token ILLEGAL',\n\t    UnknownLabel: 'Undefined label \\'%0\\'',\n\t    UnterminatedRegExp: 'Invalid regular expression: missing /'\n\t};\n\n\n/***/ },\n/* 12 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar assert_1 = __webpack_require__(9);\n\tvar character_1 = __webpack_require__(4);\n\tvar messages_1 = __webpack_require__(11);\n\tfunction hexValue(ch) {\n\t    return '0123456789abcdef'.indexOf(ch.toLowerCase());\n\t}\n\tfunction octalValue(ch) {\n\t    return '01234567'.indexOf(ch);\n\t}\n\tvar Scanner = (function () {\n\t    function Scanner(code, handler) {\n\t        this.source = code;\n\t        this.errorHandler = handler;\n\t        this.trackComment = false;\n\t        this.isModule = false;\n\t        this.length = code.length;\n\t        this.index = 0;\n\t        this.lineNumber = (code.length > 0) ? 1 : 0;\n\t        this.lineStart = 0;\n\t        this.curlyStack = [];\n\t    }\n\t    Scanner.prototype.saveState = function () {\n\t        return {\n\t            index: this.index,\n\t            lineNumber: this.lineNumber,\n\t            lineStart: this.lineStart\n\t        };\n\t    };\n\t    Scanner.prototype.restoreState = function (state) {\n\t        this.index = state.index;\n\t        this.lineNumber = state.lineNumber;\n\t        this.lineStart = state.lineStart;\n\t    };\n\t    Scanner.prototype.eof = function () {\n\t        return this.index >= this.length;\n\t    };\n\t    Scanner.prototype.throwUnexpectedToken = function (message) {\n\t        if (message === void 0) { message = messages_1.Messages.UnexpectedTokenIllegal; }\n\t        return this.errorHandler.throwError(this.index, this.lineNumber, this.index - this.lineStart + 1, message);\n\t    };\n\t    Scanner.prototype.tolerateUnexpectedToken = function (message) {\n\t        if (message === void 0) { message = messages_1.Messages.UnexpectedTokenIllegal; }\n\t        this.errorHandler.tolerateError(this.index, this.lineNumber, this.index - this.lineStart + 1, message);\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-comments\n\t    Scanner.prototype.skipSingleLineComment = function (offset) {\n\t        var comments = [];\n\t        var start, loc;\n\t        if (this.trackComment) {\n\t            comments = [];\n\t            start = this.index - offset;\n\t            loc = {\n\t                start: {\n\t                    line: this.lineNumber,\n\t                    column: this.index - this.lineStart - offset\n\t                },\n\t                end: {}\n\t            };\n\t        }\n\t        while (!this.eof()) {\n\t            var ch = this.source.charCodeAt(this.index);\n\t            ++this.index;\n\t            if (character_1.Character.isLineTerminator(ch)) {\n\t                if (this.trackComment) {\n\t                    loc.end = {\n\t                        line: this.lineNumber,\n\t                        column: this.index - this.lineStart - 1\n\t                    };\n\t                    var entry = {\n\t                        multiLine: false,\n\t                        slice: [start + offset, this.index - 1],\n\t                        range: [start, this.index - 1],\n\t                        loc: loc\n\t                    };\n\t                    comments.push(entry);\n\t                }\n\t                if (ch === 13 && this.source.charCodeAt(this.index) === 10) {\n\t                    ++this.index;\n\t                }\n\t                ++this.lineNumber;\n\t                this.lineStart = this.index;\n\t                return comments;\n\t            }\n\t        }\n\t        if (this.trackComment) {\n\t            loc.end = {\n\t                line: this.lineNumber,\n\t                column: this.index - this.lineStart\n\t            };\n\t            var entry = {\n\t                multiLine: false,\n\t                slice: [start + offset, this.index],\n\t                range: [start, this.index],\n\t                loc: loc\n\t            };\n\t            comments.push(entry);\n\t        }\n\t        return comments;\n\t    };\n\t    Scanner.prototype.skipMultiLineComment = function () {\n\t        var comments = [];\n\t        var start, loc;\n\t        if (this.trackComment) {\n\t            comments = [];\n\t            start = this.index - 2;\n\t            loc = {\n\t                start: {\n\t                    line: this.lineNumber,\n\t                    column: this.index - this.lineStart - 2\n\t                },\n\t                end: {}\n\t            };\n\t        }\n\t        while (!this.eof()) {\n\t            var ch = this.source.charCodeAt(this.index);\n\t            if (character_1.Character.isLineTerminator(ch)) {\n\t                if (ch === 0x0D && this.source.charCodeAt(this.index + 1) === 0x0A) {\n\t                    ++this.index;\n\t                }\n\t                ++this.lineNumber;\n\t                ++this.index;\n\t                this.lineStart = this.index;\n\t            }\n\t            else if (ch === 0x2A) {\n\t                // Block comment ends with '*/'.\n\t                if (this.source.charCodeAt(this.index + 1) === 0x2F) {\n\t                    this.index += 2;\n\t                    if (this.trackComment) {\n\t                        loc.end = {\n\t                            line: this.lineNumber,\n\t                            column: this.index - this.lineStart\n\t                        };\n\t                        var entry = {\n\t                            multiLine: true,\n\t                            slice: [start + 2, this.index - 2],\n\t                            range: [start, this.index],\n\t                            loc: loc\n\t                        };\n\t                        comments.push(entry);\n\t                    }\n\t                    return comments;\n\t                }\n\t                ++this.index;\n\t            }\n\t            else {\n\t                ++this.index;\n\t            }\n\t        }\n\t        // Ran off the end of the file - the whole thing is a comment\n\t        if (this.trackComment) {\n\t            loc.end = {\n\t                line: this.lineNumber,\n\t                column: this.index - this.lineStart\n\t            };\n\t            var entry = {\n\t                multiLine: true,\n\t                slice: [start + 2, this.index],\n\t                range: [start, this.index],\n\t                loc: loc\n\t            };\n\t            comments.push(entry);\n\t        }\n\t        this.tolerateUnexpectedToken();\n\t        return comments;\n\t    };\n\t    Scanner.prototype.scanComments = function () {\n\t        var comments;\n\t        if (this.trackComment) {\n\t            comments = [];\n\t        }\n\t        var start = (this.index === 0);\n\t        while (!this.eof()) {\n\t            var ch = this.source.charCodeAt(this.index);\n\t            if (character_1.Character.isWhiteSpace(ch)) {\n\t                ++this.index;\n\t            }\n\t            else if (character_1.Character.isLineTerminator(ch)) {\n\t                ++this.index;\n\t                if (ch === 0x0D && this.source.charCodeAt(this.index) === 0x0A) {\n\t                    ++this.index;\n\t                }\n\t                ++this.lineNumber;\n\t                this.lineStart = this.index;\n\t                start = true;\n\t            }\n\t            else if (ch === 0x2F) {\n\t                ch = this.source.charCodeAt(this.index + 1);\n\t                if (ch === 0x2F) {\n\t                    this.index += 2;\n\t                    var comment = this.skipSingleLineComment(2);\n\t                    if (this.trackComment) {\n\t                        comments = comments.concat(comment);\n\t                    }\n\t                    start = true;\n\t                }\n\t                else if (ch === 0x2A) {\n\t                    this.index += 2;\n\t                    var comment = this.skipMultiLineComment();\n\t                    if (this.trackComment) {\n\t                        comments = comments.concat(comment);\n\t                    }\n\t                }\n\t                else {\n\t                    break;\n\t                }\n\t            }\n\t            else if (start && ch === 0x2D) {\n\t                // U+003E is '>'\n\t                if ((this.source.charCodeAt(this.index + 1) === 0x2D) && (this.source.charCodeAt(this.index + 2) === 0x3E)) {\n\t                    // '-->' is a single-line comment\n\t                    this.index += 3;\n\t                    var comment = this.skipSingleLineComment(3);\n\t                    if (this.trackComment) {\n\t                        comments = comments.concat(comment);\n\t                    }\n\t                }\n\t                else {\n\t                    break;\n\t                }\n\t            }\n\t            else if (ch === 0x3C && !this.isModule) {\n\t                if (this.source.slice(this.index + 1, this.index + 4) === '!--') {\n\t                    this.index += 4; // `<!--`\n\t                    var comment = this.skipSingleLineComment(4);\n\t                    if (this.trackComment) {\n\t                        comments = comments.concat(comment);\n\t                    }\n\t                }\n\t                else {\n\t                    break;\n\t                }\n\t            }\n\t            else {\n\t                break;\n\t            }\n\t        }\n\t        return comments;\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-future-reserved-words\n\t    Scanner.prototype.isFutureReservedWord = function (id) {\n\t        switch (id) {\n\t            case 'enum':\n\t            case 'export':\n\t            case 'import':\n\t            case 'super':\n\t                return true;\n\t            default:\n\t                return false;\n\t        }\n\t    };\n\t    Scanner.prototype.isStrictModeReservedWord = function (id) {\n\t        switch (id) {\n\t            case 'implements':\n\t            case 'interface':\n\t            case 'package':\n\t            case 'private':\n\t            case 'protected':\n\t            case 'public':\n\t            case 'static':\n\t            case 'yield':\n\t            case 'let':\n\t                return true;\n\t            default:\n\t                return false;\n\t        }\n\t    };\n\t    Scanner.prototype.isRestrictedWord = function (id) {\n\t        return id === 'eval' || id === 'arguments';\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-keywords\n\t    Scanner.prototype.isKeyword = function (id) {\n\t        switch (id.length) {\n\t            case 2:\n\t                return (id === 'if') || (id === 'in') || (id === 'do');\n\t            case 3:\n\t                return (id === 'var') || (id === 'for') || (id === 'new') ||\n\t                    (id === 'try') || (id === 'let');\n\t            case 4:\n\t                return (id === 'this') || (id === 'else') || (id === 'case') ||\n\t                    (id === 'void') || (id === 'with') || (id === 'enum');\n\t            case 5:\n\t                return (id === 'while') || (id === 'break') || (id === 'catch') ||\n\t                    (id === 'throw') || (id === 'const') || (id === 'yield') ||\n\t                    (id === 'class') || (id === 'super');\n\t            case 6:\n\t                return (id === 'return') || (id === 'typeof') || (id === 'delete') ||\n\t                    (id === 'switch') || (id === 'export') || (id === 'import');\n\t            case 7:\n\t                return (id === 'default') || (id === 'finally') || (id === 'extends');\n\t            case 8:\n\t                return (id === 'function') || (id === 'continue') || (id === 'debugger');\n\t            case 10:\n\t                return (id === 'instanceof');\n\t            default:\n\t                return false;\n\t        }\n\t    };\n\t    Scanner.prototype.codePointAt = function (i) {\n\t        var cp = this.source.charCodeAt(i);\n\t        if (cp >= 0xD800 && cp <= 0xDBFF) {\n\t            var second = this.source.charCodeAt(i + 1);\n\t            if (second >= 0xDC00 && second <= 0xDFFF) {\n\t                var first = cp;\n\t                cp = (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n\t            }\n\t        }\n\t        return cp;\n\t    };\n\t    Scanner.prototype.scanHexEscape = function (prefix) {\n\t        var len = (prefix === 'u') ? 4 : 2;\n\t        var code = 0;\n\t        for (var i = 0; i < len; ++i) {\n\t            if (!this.eof() && character_1.Character.isHexDigit(this.source.charCodeAt(this.index))) {\n\t                code = code * 16 + hexValue(this.source[this.index++]);\n\t            }\n\t            else {\n\t                return null;\n\t            }\n\t        }\n\t        return String.fromCharCode(code);\n\t    };\n\t    Scanner.prototype.scanUnicodeCodePointEscape = function () {\n\t        var ch = this.source[this.index];\n\t        var code = 0;\n\t        // At least, one hex digit is required.\n\t        if (ch === '}') {\n\t            this.throwUnexpectedToken();\n\t        }\n\t        while (!this.eof()) {\n\t            ch = this.source[this.index++];\n\t            if (!character_1.Character.isHexDigit(ch.charCodeAt(0))) {\n\t                break;\n\t            }\n\t            code = code * 16 + hexValue(ch);\n\t        }\n\t        if (code > 0x10FFFF || ch !== '}') {\n\t            this.throwUnexpectedToken();\n\t        }\n\t        return character_1.Character.fromCodePoint(code);\n\t    };\n\t    Scanner.prototype.getIdentifier = function () {\n\t        var start = this.index++;\n\t        while (!this.eof()) {\n\t            var ch = this.source.charCodeAt(this.index);\n\t            if (ch === 0x5C) {\n\t                // Blackslash (U+005C) marks Unicode escape sequence.\n\t                this.index = start;\n\t                return this.getComplexIdentifier();\n\t            }\n\t            else if (ch >= 0xD800 && ch < 0xDFFF) {\n\t                // Need to handle surrogate pairs.\n\t                this.index = start;\n\t                return this.getComplexIdentifier();\n\t            }\n\t            if (character_1.Character.isIdentifierPart(ch)) {\n\t                ++this.index;\n\t            }\n\t            else {\n\t                break;\n\t            }\n\t        }\n\t        return this.source.slice(start, this.index);\n\t    };\n\t    Scanner.prototype.getComplexIdentifier = function () {\n\t        var cp = this.codePointAt(this.index);\n\t        var id = character_1.Character.fromCodePoint(cp);\n\t        this.index += id.length;\n\t        // '\\u' (U+005C, U+0075) denotes an escaped character.\n\t        var ch;\n\t        if (cp === 0x5C) {\n\t            if (this.source.charCodeAt(this.index) !== 0x75) {\n\t                this.throwUnexpectedToken();\n\t            }\n\t            ++this.index;\n\t            if (this.source[this.index] === '{') {\n\t                ++this.index;\n\t                ch = this.scanUnicodeCodePointEscape();\n\t            }\n\t            else {\n\t                ch = this.scanHexEscape('u');\n\t                if (ch === null || ch === '\\\\' || !character_1.Character.isIdentifierStart(ch.charCodeAt(0))) {\n\t                    this.throwUnexpectedToken();\n\t                }\n\t            }\n\t            id = ch;\n\t        }\n\t        while (!this.eof()) {\n\t            cp = this.codePointAt(this.index);\n\t            if (!character_1.Character.isIdentifierPart(cp)) {\n\t                break;\n\t            }\n\t            ch = character_1.Character.fromCodePoint(cp);\n\t            id += ch;\n\t            this.index += ch.length;\n\t            // '\\u' (U+005C, U+0075) denotes an escaped character.\n\t            if (cp === 0x5C) {\n\t                id = id.substr(0, id.length - 1);\n\t                if (this.source.charCodeAt(this.index) !== 0x75) {\n\t                    this.throwUnexpectedToken();\n\t                }\n\t                ++this.index;\n\t                if (this.source[this.index] === '{') {\n\t                    ++this.index;\n\t                    ch = this.scanUnicodeCodePointEscape();\n\t                }\n\t                else {\n\t                    ch = this.scanHexEscape('u');\n\t                    if (ch === null || ch === '\\\\' || !character_1.Character.isIdentifierPart(ch.charCodeAt(0))) {\n\t                        this.throwUnexpectedToken();\n\t                    }\n\t                }\n\t                id += ch;\n\t            }\n\t        }\n\t        return id;\n\t    };\n\t    Scanner.prototype.octalToDecimal = function (ch) {\n\t        // \\0 is not octal escape sequence\n\t        var octal = (ch !== '0');\n\t        var code = octalValue(ch);\n\t        if (!this.eof() && character_1.Character.isOctalDigit(this.source.charCodeAt(this.index))) {\n\t            octal = true;\n\t            code = code * 8 + octalValue(this.source[this.index++]);\n\t            // 3 digits are only allowed when string starts\n\t            // with 0, 1, 2, 3\n\t            if ('0123'.indexOf(ch) >= 0 && !this.eof() && character_1.Character.isOctalDigit(this.source.charCodeAt(this.index))) {\n\t                code = code * 8 + octalValue(this.source[this.index++]);\n\t            }\n\t        }\n\t        return {\n\t            code: code,\n\t            octal: octal\n\t        };\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-names-and-keywords\n\t    Scanner.prototype.scanIdentifier = function () {\n\t        var type;\n\t        var start = this.index;\n\t        // Backslash (U+005C) starts an escaped character.\n\t        var id = (this.source.charCodeAt(start) === 0x5C) ? this.getComplexIdentifier() : this.getIdentifier();\n\t        // There is no keyword or literal with only one character.\n\t        // Thus, it must be an identifier.\n\t        if (id.length === 1) {\n\t            type = 3 /* Identifier */;\n\t        }\n\t        else if (this.isKeyword(id)) {\n\t            type = 4 /* Keyword */;\n\t        }\n\t        else if (id === 'null') {\n\t            type = 5 /* NullLiteral */;\n\t        }\n\t        else if (id === 'true' || id === 'false') {\n\t            type = 1 /* BooleanLiteral */;\n\t        }\n\t        else {\n\t            type = 3 /* Identifier */;\n\t        }\n\t        if (type !== 3 /* Identifier */ && (start + id.length !== this.index)) {\n\t            var restore = this.index;\n\t            this.index = start;\n\t            this.tolerateUnexpectedToken(messages_1.Messages.InvalidEscapedReservedWord);\n\t            this.index = restore;\n\t        }\n\t        return {\n\t            type: type,\n\t            value: id,\n\t            lineNumber: this.lineNumber,\n\t            lineStart: this.lineStart,\n\t            start: start,\n\t            end: this.index\n\t        };\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-punctuators\n\t    Scanner.prototype.scanPunctuator = function () {\n\t        var start = this.index;\n\t        // Check for most common single-character punctuators.\n\t        var str = this.source[this.index];\n\t        switch (str) {\n\t            case '(':\n\t            case '{':\n\t                if (str === '{') {\n\t                    this.curlyStack.push('{');\n\t                }\n\t                ++this.index;\n\t                break;\n\t            case '.':\n\t                ++this.index;\n\t                if (this.source[this.index] === '.' && this.source[this.index + 1] === '.') {\n\t                    // Spread operator: ...\n\t                    this.index += 2;\n\t                    str = '...';\n\t                }\n\t                break;\n\t            case '}':\n\t                ++this.index;\n\t                this.curlyStack.pop();\n\t                break;\n\t            case ')':\n\t            case ';':\n\t            case ',':\n\t            case '[':\n\t            case ']':\n\t            case ':':\n\t            case '?':\n\t            case '~':\n\t                ++this.index;\n\t                break;\n\t            default:\n\t                // 4-character punctuator.\n\t                str = this.source.substr(this.index, 4);\n\t                if (str === '>>>=') {\n\t                    this.index += 4;\n\t                }\n\t                else {\n\t                    // 3-character punctuators.\n\t                    str = str.substr(0, 3);\n\t                    if (str === '===' || str === '!==' || str === '>>>' ||\n\t                        str === '<<=' || str === '>>=' || str === '**=') {\n\t                        this.index += 3;\n\t                    }\n\t                    else {\n\t                        // 2-character punctuators.\n\t                        str = str.substr(0, 2);\n\t                        if (str === '&&' || str === '||' || str === '==' || str === '!=' ||\n\t                            str === '+=' || str === '-=' || str === '*=' || str === '/=' ||\n\t                            str === '++' || str === '--' || str === '<<' || str === '>>' ||\n\t                            str === '&=' || str === '|=' || str === '^=' || str === '%=' ||\n\t                            str === '<=' || str === '>=' || str === '=>' || str === '**') {\n\t                            this.index += 2;\n\t                        }\n\t                        else {\n\t                            // 1-character punctuators.\n\t                            str = this.source[this.index];\n\t                            if ('<>=!+-*%&|^/'.indexOf(str) >= 0) {\n\t                                ++this.index;\n\t                            }\n\t                        }\n\t                    }\n\t                }\n\t        }\n\t        if (this.index === start) {\n\t            this.throwUnexpectedToken();\n\t        }\n\t        return {\n\t            type: 7 /* Punctuator */,\n\t            value: str,\n\t            lineNumber: this.lineNumber,\n\t            lineStart: this.lineStart,\n\t            start: start,\n\t            end: this.index\n\t        };\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-literals-numeric-literals\n\t    Scanner.prototype.scanHexLiteral = function (start) {\n\t        var num = '';\n\t        while (!this.eof()) {\n\t            if (!character_1.Character.isHexDigit(this.source.charCodeAt(this.index))) {\n\t                break;\n\t            }\n\t            num += this.source[this.index++];\n\t        }\n\t        if (num.length === 0) {\n\t            this.throwUnexpectedToken();\n\t        }\n\t        if (character_1.Character.isIdentifierStart(this.source.charCodeAt(this.index))) {\n\t            this.throwUnexpectedToken();\n\t        }\n\t        return {\n\t            type: 6 /* NumericLiteral */,\n\t            value: parseInt('0x' + num, 16),\n\t            lineNumber: this.lineNumber,\n\t            lineStart: this.lineStart,\n\t            start: start,\n\t            end: this.index\n\t        };\n\t    };\n\t    Scanner.prototype.scanBinaryLiteral = function (start) {\n\t        var num = '';\n\t        var ch;\n\t        while (!this.eof()) {\n\t            ch = this.source[this.index];\n\t            if (ch !== '0' && ch !== '1') {\n\t                break;\n\t            }\n\t            num += this.source[this.index++];\n\t        }\n\t        if (num.length === 0) {\n\t            // only 0b or 0B\n\t            this.throwUnexpectedToken();\n\t        }\n\t        if (!this.eof()) {\n\t            ch = this.source.charCodeAt(this.index);\n\t            /* istanbul ignore else */\n\t            if (character_1.Character.isIdentifierStart(ch) || character_1.Character.isDecimalDigit(ch)) {\n\t                this.throwUnexpectedToken();\n\t            }\n\t        }\n\t        return {\n\t            type: 6 /* NumericLiteral */,\n\t            value: parseInt(num, 2),\n\t            lineNumber: this.lineNumber,\n\t            lineStart: this.lineStart,\n\t            start: start,\n\t            end: this.index\n\t        };\n\t    };\n\t    Scanner.prototype.scanOctalLiteral = function (prefix, start) {\n\t        var num = '';\n\t        var octal = false;\n\t        if (character_1.Character.isOctalDigit(prefix.charCodeAt(0))) {\n\t            octal = true;\n\t            num = '0' + this.source[this.index++];\n\t        }\n\t        else {\n\t            ++this.index;\n\t        }\n\t        while (!this.eof()) {\n\t            if (!character_1.Character.isOctalDigit(this.source.charCodeAt(this.index))) {\n\t                break;\n\t            }\n\t            num += this.source[this.index++];\n\t        }\n\t        if (!octal && num.length === 0) {\n\t            // only 0o or 0O\n\t            this.throwUnexpectedToken();\n\t        }\n\t        if (character_1.Character.isIdentifierStart(this.source.charCodeAt(this.index)) || character_1.Character.isDecimalDigit(this.source.charCodeAt(this.index))) {\n\t            this.throwUnexpectedToken();\n\t        }\n\t        return {\n\t            type: 6 /* NumericLiteral */,\n\t            value: parseInt(num, 8),\n\t            octal: octal,\n\t            lineNumber: this.lineNumber,\n\t            lineStart: this.lineStart,\n\t            start: start,\n\t            end: this.index\n\t        };\n\t    };\n\t    Scanner.prototype.isImplicitOctalLiteral = function () {\n\t        // Implicit octal, unless there is a non-octal digit.\n\t        // (Annex B.1.1 on Numeric Literals)\n\t        for (var i = this.index + 1; i < this.length; ++i) {\n\t            var ch = this.source[i];\n\t            if (ch === '8' || ch === '9') {\n\t                return false;\n\t            }\n\t            if (!character_1.Character.isOctalDigit(ch.charCodeAt(0))) {\n\t                return true;\n\t            }\n\t        }\n\t        return true;\n\t    };\n\t    Scanner.prototype.scanNumericLiteral = function () {\n\t        var start = this.index;\n\t        var ch = this.source[start];\n\t        assert_1.assert(character_1.Character.isDecimalDigit(ch.charCodeAt(0)) || (ch === '.'), 'Numeric literal must start with a decimal digit or a decimal point');\n\t        var num = '';\n\t        if (ch !== '.') {\n\t            num = this.source[this.index++];\n\t            ch = this.source[this.index];\n\t            // Hex number starts with '0x'.\n\t            // Octal number starts with '0'.\n\t            // Octal number in ES6 starts with '0o'.\n\t            // Binary number in ES6 starts with '0b'.\n\t            if (num === '0') {\n\t                if (ch === 'x' || ch === 'X') {\n\t                    ++this.index;\n\t                    return this.scanHexLiteral(start);\n\t                }\n\t                if (ch === 'b' || ch === 'B') {\n\t                    ++this.index;\n\t                    return this.scanBinaryLiteral(start);\n\t                }\n\t                if (ch === 'o' || ch === 'O') {\n\t                    return this.scanOctalLiteral(ch, start);\n\t                }\n\t                if (ch && character_1.Character.isOctalDigit(ch.charCodeAt(0))) {\n\t                    if (this.isImplicitOctalLiteral()) {\n\t                        return this.scanOctalLiteral(ch, start);\n\t                    }\n\t                }\n\t            }\n\t            while (character_1.Character.isDecimalDigit(this.source.charCodeAt(this.index))) {\n\t                num += this.source[this.index++];\n\t            }\n\t            ch = this.source[this.index];\n\t        }\n\t        if (ch === '.') {\n\t            num += this.source[this.index++];\n\t            while (character_1.Character.isDecimalDigit(this.source.charCodeAt(this.index))) {\n\t                num += this.source[this.index++];\n\t            }\n\t            ch = this.source[this.index];\n\t        }\n\t        if (ch === 'e' || ch === 'E') {\n\t            num += this.source[this.index++];\n\t            ch = this.source[this.index];\n\t            if (ch === '+' || ch === '-') {\n\t                num += this.source[this.index++];\n\t            }\n\t            if (character_1.Character.isDecimalDigit(this.source.charCodeAt(this.index))) {\n\t                while (character_1.Character.isDecimalDigit(this.source.charCodeAt(this.index))) {\n\t                    num += this.source[this.index++];\n\t                }\n\t            }\n\t            else {\n\t                this.throwUnexpectedToken();\n\t            }\n\t        }\n\t        if (character_1.Character.isIdentifierStart(this.source.charCodeAt(this.index))) {\n\t            this.throwUnexpectedToken();\n\t        }\n\t        return {\n\t            type: 6 /* NumericLiteral */,\n\t            value: parseFloat(num),\n\t            lineNumber: this.lineNumber,\n\t            lineStart: this.lineStart,\n\t            start: start,\n\t            end: this.index\n\t        };\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-literals-string-literals\n\t    Scanner.prototype.scanStringLiteral = function () {\n\t        var start = this.index;\n\t        var quote = this.source[start];\n\t        assert_1.assert((quote === '\\'' || quote === '\"'), 'String literal must starts with a quote');\n\t        ++this.index;\n\t        var octal = false;\n\t        var str = '';\n\t        while (!this.eof()) {\n\t            var ch = this.source[this.index++];\n\t            if (ch === quote) {\n\t                quote = '';\n\t                break;\n\t            }\n\t            else if (ch === '\\\\') {\n\t                ch = this.source[this.index++];\n\t                if (!ch || !character_1.Character.isLineTerminator(ch.charCodeAt(0))) {\n\t                    switch (ch) {\n\t                        case 'u':\n\t                            if (this.source[this.index] === '{') {\n\t                                ++this.index;\n\t                                str += this.scanUnicodeCodePointEscape();\n\t                            }\n\t                            else {\n\t                                var unescaped_1 = this.scanHexEscape(ch);\n\t                                if (unescaped_1 === null) {\n\t                                    this.throwUnexpectedToken();\n\t                                }\n\t                                str += unescaped_1;\n\t                            }\n\t                            break;\n\t                        case 'x':\n\t                            var unescaped = this.scanHexEscape(ch);\n\t                            if (unescaped === null) {\n\t                                this.throwUnexpectedToken(messages_1.Messages.InvalidHexEscapeSequence);\n\t                            }\n\t                            str += unescaped;\n\t                            break;\n\t                        case 'n':\n\t                            str += '\\n';\n\t                            break;\n\t                        case 'r':\n\t                            str += '\\r';\n\t                            break;\n\t                        case 't':\n\t                            str += '\\t';\n\t                            break;\n\t                        case 'b':\n\t                            str += '\\b';\n\t                            break;\n\t                        case 'f':\n\t                            str += '\\f';\n\t                            break;\n\t                        case 'v':\n\t                            str += '\\x0B';\n\t                            break;\n\t                        case '8':\n\t                        case '9':\n\t                            str += ch;\n\t                            this.tolerateUnexpectedToken();\n\t                            break;\n\t                        default:\n\t                            if (ch && character_1.Character.isOctalDigit(ch.charCodeAt(0))) {\n\t                                var octToDec = this.octalToDecimal(ch);\n\t                                octal = octToDec.octal || octal;\n\t                                str += String.fromCharCode(octToDec.code);\n\t                            }\n\t                            else {\n\t                                str += ch;\n\t                            }\n\t                            break;\n\t                    }\n\t                }\n\t                else {\n\t                    ++this.lineNumber;\n\t                    if (ch === '\\r' && this.source[this.index] === '\\n') {\n\t                        ++this.index;\n\t                    }\n\t                    this.lineStart = this.index;\n\t                }\n\t            }\n\t            else if (character_1.Character.isLineTerminator(ch.charCodeAt(0))) {\n\t                break;\n\t            }\n\t            else {\n\t                str += ch;\n\t            }\n\t        }\n\t        if (quote !== '') {\n\t            this.index = start;\n\t            this.throwUnexpectedToken();\n\t        }\n\t        return {\n\t            type: 8 /* StringLiteral */,\n\t            value: str,\n\t            octal: octal,\n\t            lineNumber: this.lineNumber,\n\t            lineStart: this.lineStart,\n\t            start: start,\n\t            end: this.index\n\t        };\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-template-literal-lexical-components\n\t    Scanner.prototype.scanTemplate = function () {\n\t        var cooked = '';\n\t        var terminated = false;\n\t        var start = this.index;\n\t        var head = (this.source[start] === '`');\n\t        var tail = false;\n\t        var rawOffset = 2;\n\t        ++this.index;\n\t        while (!this.eof()) {\n\t            var ch = this.source[this.index++];\n\t            if (ch === '`') {\n\t                rawOffset = 1;\n\t                tail = true;\n\t                terminated = true;\n\t                break;\n\t            }\n\t            else if (ch === '$') {\n\t                if (this.source[this.index] === '{') {\n\t                    this.curlyStack.push('${');\n\t                    ++this.index;\n\t                    terminated = true;\n\t                    break;\n\t                }\n\t                cooked += ch;\n\t            }\n\t            else if (ch === '\\\\') {\n\t                ch = this.source[this.index++];\n\t                if (!character_1.Character.isLineTerminator(ch.charCodeAt(0))) {\n\t                    switch (ch) {\n\t                        case 'n':\n\t                            cooked += '\\n';\n\t                            break;\n\t                        case 'r':\n\t                            cooked += '\\r';\n\t                            break;\n\t                        case 't':\n\t                            cooked += '\\t';\n\t                            break;\n\t                        case 'u':\n\t                            if (this.source[this.index] === '{') {\n\t                                ++this.index;\n\t                                cooked += this.scanUnicodeCodePointEscape();\n\t                            }\n\t                            else {\n\t                                var restore = this.index;\n\t                                var unescaped_2 = this.scanHexEscape(ch);\n\t                                if (unescaped_2 !== null) {\n\t                                    cooked += unescaped_2;\n\t                                }\n\t                                else {\n\t                                    this.index = restore;\n\t                                    cooked += ch;\n\t                                }\n\t                            }\n\t                            break;\n\t                        case 'x':\n\t                            var unescaped = this.scanHexEscape(ch);\n\t                            if (unescaped === null) {\n\t                                this.throwUnexpectedToken(messages_1.Messages.InvalidHexEscapeSequence);\n\t                            }\n\t                            cooked += unescaped;\n\t                            break;\n\t                        case 'b':\n\t                            cooked += '\\b';\n\t                            break;\n\t                        case 'f':\n\t                            cooked += '\\f';\n\t                            break;\n\t                        case 'v':\n\t                            cooked += '\\v';\n\t                            break;\n\t                        default:\n\t                            if (ch === '0') {\n\t                                if (character_1.Character.isDecimalDigit(this.source.charCodeAt(this.index))) {\n\t                                    // Illegal: \\01 \\02 and so on\n\t                                    this.throwUnexpectedToken(messages_1.Messages.TemplateOctalLiteral);\n\t                                }\n\t                                cooked += '\\0';\n\t                            }\n\t                            else if (character_1.Character.isOctalDigit(ch.charCodeAt(0))) {\n\t                                // Illegal: \\1 \\2\n\t                                this.throwUnexpectedToken(messages_1.Messages.TemplateOctalLiteral);\n\t                            }\n\t                            else {\n\t                                cooked += ch;\n\t                            }\n\t                            break;\n\t                    }\n\t                }\n\t                else {\n\t                    ++this.lineNumber;\n\t                    if (ch === '\\r' && this.source[this.index] === '\\n') {\n\t                        ++this.index;\n\t                    }\n\t                    this.lineStart = this.index;\n\t                }\n\t            }\n\t            else if (character_1.Character.isLineTerminator(ch.charCodeAt(0))) {\n\t                ++this.lineNumber;\n\t                if (ch === '\\r' && this.source[this.index] === '\\n') {\n\t                    ++this.index;\n\t                }\n\t                this.lineStart = this.index;\n\t                cooked += '\\n';\n\t            }\n\t            else {\n\t                cooked += ch;\n\t            }\n\t        }\n\t        if (!terminated) {\n\t            this.throwUnexpectedToken();\n\t        }\n\t        if (!head) {\n\t            this.curlyStack.pop();\n\t        }\n\t        return {\n\t            type: 10 /* Template */,\n\t            value: this.source.slice(start + 1, this.index - rawOffset),\n\t            cooked: cooked,\n\t            head: head,\n\t            tail: tail,\n\t            lineNumber: this.lineNumber,\n\t            lineStart: this.lineStart,\n\t            start: start,\n\t            end: this.index\n\t        };\n\t    };\n\t    // https://tc39.github.io/ecma262/#sec-literals-regular-expression-literals\n\t    Scanner.prototype.testRegExp = function (pattern, flags) {\n\t        // The BMP character to use as a replacement for astral symbols when\n\t        // translating an ES6 \"u\"-flagged pattern to an ES5-compatible\n\t        // approximation.\n\t        // Note: replacing with '\\uFFFF' enables false positives in unlikely\n\t        // scenarios. For example, `[\\u{1044f}-\\u{10440}]` is an invalid\n\t        // pattern that would not be detected by this substitution.\n\t        var astralSubstitute = '\\uFFFF';\n\t        var tmp = pattern;\n\t        var self = this;\n\t        if (flags.indexOf('u') >= 0) {\n\t            tmp = tmp\n\t                .replace(/\\\\u\\{([0-9a-fA-F]+)\\}|\\\\u([a-fA-F0-9]{4})/g, function ($0, $1, $2) {\n\t                var codePoint = parseInt($1 || $2, 16);\n\t                if (codePoint > 0x10FFFF) {\n\t                    self.throwUnexpectedToken(messages_1.Messages.InvalidRegExp);\n\t                }\n\t                if (codePoint <= 0xFFFF) {\n\t                    return String.fromCharCode(codePoint);\n\t                }\n\t                return astralSubstitute;\n\t            })\n\t                .replace(/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g, astralSubstitute);\n\t        }\n\t        // First, detect invalid regular expressions.\n\t        try {\n\t            RegExp(tmp);\n\t        }\n\t        catch (e) {\n\t            this.throwUnexpectedToken(messages_1.Messages.InvalidRegExp);\n\t        }\n\t        // Return a regular expression object for this pattern-flag pair, or\n\t        // `null` in case the current environment doesn't support the flags it\n\t        // uses.\n\t        try {\n\t            return new RegExp(pattern, flags);\n\t        }\n\t        catch (exception) {\n\t            /* istanbul ignore next */\n\t            return null;\n\t        }\n\t    };\n\t    Scanner.prototype.scanRegExpBody = function () {\n\t        var ch = this.source[this.index];\n\t        assert_1.assert(ch === '/', 'Regular expression literal must start with a slash');\n\t        var str = this.source[this.index++];\n\t        var classMarker = false;\n\t        var terminated = false;\n\t        while (!this.eof()) {\n\t            ch = this.source[this.index++];\n\t            str += ch;\n\t            if (ch === '\\\\') {\n\t                ch = this.source[this.index++];\n\t                // https://tc39.github.io/ecma262/#sec-literals-regular-expression-literals\n\t                if (character_1.Character.isLineTerminator(ch.charCodeAt(0))) {\n\t                    this.throwUnexpectedToken(messages_1.Messages.UnterminatedRegExp);\n\t                }\n\t                str += ch;\n\t            }\n\t            else if (character_1.Character.isLineTerminator(ch.charCodeAt(0))) {\n\t                this.throwUnexpectedToken(messages_1.Messages.UnterminatedRegExp);\n\t            }\n\t            else if (classMarker) {\n\t                if (ch === ']') {\n\t                    classMarker = false;\n\t                }\n\t            }\n\t            else {\n\t                if (ch === '/') {\n\t                    terminated = true;\n\t                    break;\n\t                }\n\t                else if (ch === '[') {\n\t                    classMarker = true;\n\t                }\n\t            }\n\t        }\n\t        if (!terminated) {\n\t            this.throwUnexpectedToken(messages_1.Messages.UnterminatedRegExp);\n\t        }\n\t        // Exclude leading and trailing slash.\n\t        return str.substr(1, str.length - 2);\n\t    };\n\t    Scanner.prototype.scanRegExpFlags = function () {\n\t        var str = '';\n\t        var flags = '';\n\t        while (!this.eof()) {\n\t            var ch = this.source[this.index];\n\t            if (!character_1.Character.isIdentifierPart(ch.charCodeAt(0))) {\n\t                break;\n\t            }\n\t            ++this.index;\n\t            if (ch === '\\\\' && !this.eof()) {\n\t                ch = this.source[this.index];\n\t                if (ch === 'u') {\n\t                    ++this.index;\n\t                    var restore = this.index;\n\t                    var char = this.scanHexEscape('u');\n\t                    if (char !== null) {\n\t                        flags += char;\n\t                        for (str += '\\\\u'; restore < this.index; ++restore) {\n\t                            str += this.source[restore];\n\t                        }\n\t                    }\n\t                    else {\n\t                        this.index = restore;\n\t                        flags += 'u';\n\t                        str += '\\\\u';\n\t                    }\n\t                    this.tolerateUnexpectedToken();\n\t                }\n\t                else {\n\t                    str += '\\\\';\n\t                    this.tolerateUnexpectedToken();\n\t                }\n\t            }\n\t            else {\n\t                flags += ch;\n\t                str += ch;\n\t            }\n\t        }\n\t        return flags;\n\t    };\n\t    Scanner.prototype.scanRegExp = function () {\n\t        var start = this.index;\n\t        var pattern = this.scanRegExpBody();\n\t        var flags = this.scanRegExpFlags();\n\t        var value = this.testRegExp(pattern, flags);\n\t        return {\n\t            type: 9 /* RegularExpression */,\n\t            value: '',\n\t            pattern: pattern,\n\t            flags: flags,\n\t            regex: value,\n\t            lineNumber: this.lineNumber,\n\t            lineStart: this.lineStart,\n\t            start: start,\n\t            end: this.index\n\t        };\n\t    };\n\t    Scanner.prototype.lex = function () {\n\t        if (this.eof()) {\n\t            return {\n\t                type: 2 /* EOF */,\n\t                value: '',\n\t                lineNumber: this.lineNumber,\n\t                lineStart: this.lineStart,\n\t                start: this.index,\n\t                end: this.index\n\t            };\n\t        }\n\t        var cp = this.source.charCodeAt(this.index);\n\t        if (character_1.Character.isIdentifierStart(cp)) {\n\t            return this.scanIdentifier();\n\t        }\n\t        // Very common: ( and ) and ;\n\t        if (cp === 0x28 || cp === 0x29 || cp === 0x3B) {\n\t            return this.scanPunctuator();\n\t        }\n\t        // String literal starts with single quote (U+0027) or double quote (U+0022).\n\t        if (cp === 0x27 || cp === 0x22) {\n\t            return this.scanStringLiteral();\n\t        }\n\t        // Dot (.) U+002E can also start a floating-point number, hence the need\n\t        // to check the next character.\n\t        if (cp === 0x2E) {\n\t            if (character_1.Character.isDecimalDigit(this.source.charCodeAt(this.index + 1))) {\n\t                return this.scanNumericLiteral();\n\t            }\n\t            return this.scanPunctuator();\n\t        }\n\t        if (character_1.Character.isDecimalDigit(cp)) {\n\t            return this.scanNumericLiteral();\n\t        }\n\t        // Template literals start with ` (U+0060) for template head\n\t        // or } (U+007D) for template middle or template tail.\n\t        if (cp === 0x60 || (cp === 0x7D && this.curlyStack[this.curlyStack.length - 1] === '${')) {\n\t            return this.scanTemplate();\n\t        }\n\t        // Possible identifier start in a surrogate pair.\n\t        if (cp >= 0xD800 && cp < 0xDFFF) {\n\t            if (character_1.Character.isIdentifierStart(this.codePointAt(this.index))) {\n\t                return this.scanIdentifier();\n\t            }\n\t        }\n\t        return this.scanPunctuator();\n\t    };\n\t    return Scanner;\n\t}());\n\texports.Scanner = Scanner;\n\n\n/***/ },\n/* 13 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\texports.TokenName = {};\n\texports.TokenName[1 /* BooleanLiteral */] = 'Boolean';\n\texports.TokenName[2 /* EOF */] = '<end>';\n\texports.TokenName[3 /* Identifier */] = 'Identifier';\n\texports.TokenName[4 /* Keyword */] = 'Keyword';\n\texports.TokenName[5 /* NullLiteral */] = 'Null';\n\texports.TokenName[6 /* NumericLiteral */] = 'Numeric';\n\texports.TokenName[7 /* Punctuator */] = 'Punctuator';\n\texports.TokenName[8 /* StringLiteral */] = 'String';\n\texports.TokenName[9 /* RegularExpression */] = 'RegularExpression';\n\texports.TokenName[10 /* Template */] = 'Template';\n\n\n/***/ },\n/* 14 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\t// Generated by generate-xhtml-entities.js. DO NOT MODIFY!\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\texports.XHTMLEntities = {\n\t    quot: '\\u0022',\n\t    amp: '\\u0026',\n\t    apos: '\\u0027',\n\t    gt: '\\u003E',\n\t    nbsp: '\\u00A0',\n\t    iexcl: '\\u00A1',\n\t    cent: '\\u00A2',\n\t    pound: '\\u00A3',\n\t    curren: '\\u00A4',\n\t    yen: '\\u00A5',\n\t    brvbar: '\\u00A6',\n\t    sect: '\\u00A7',\n\t    uml: '\\u00A8',\n\t    copy: '\\u00A9',\n\t    ordf: '\\u00AA',\n\t    laquo: '\\u00AB',\n\t    not: '\\u00AC',\n\t    shy: '\\u00AD',\n\t    reg: '\\u00AE',\n\t    macr: '\\u00AF',\n\t    deg: '\\u00B0',\n\t    plusmn: '\\u00B1',\n\t    sup2: '\\u00B2',\n\t    sup3: '\\u00B3',\n\t    acute: '\\u00B4',\n\t    micro: '\\u00B5',\n\t    para: '\\u00B6',\n\t    middot: '\\u00B7',\n\t    cedil: '\\u00B8',\n\t    sup1: '\\u00B9',\n\t    ordm: '\\u00BA',\n\t    raquo: '\\u00BB',\n\t    frac14: '\\u00BC',\n\t    frac12: '\\u00BD',\n\t    frac34: '\\u00BE',\n\t    iquest: '\\u00BF',\n\t    Agrave: '\\u00C0',\n\t    Aacute: '\\u00C1',\n\t    Acirc: '\\u00C2',\n\t    Atilde: '\\u00C3',\n\t    Auml: '\\u00C4',\n\t    Aring: '\\u00C5',\n\t    AElig: '\\u00C6',\n\t    Ccedil: '\\u00C7',\n\t    Egrave: '\\u00C8',\n\t    Eacute: '\\u00C9',\n\t    Ecirc: '\\u00CA',\n\t    Euml: '\\u00CB',\n\t    Igrave: '\\u00CC',\n\t    Iacute: '\\u00CD',\n\t    Icirc: '\\u00CE',\n\t    Iuml: '\\u00CF',\n\t    ETH: '\\u00D0',\n\t    Ntilde: '\\u00D1',\n\t    Ograve: '\\u00D2',\n\t    Oacute: '\\u00D3',\n\t    Ocirc: '\\u00D4',\n\t    Otilde: '\\u00D5',\n\t    Ouml: '\\u00D6',\n\t    times: '\\u00D7',\n\t    Oslash: '\\u00D8',\n\t    Ugrave: '\\u00D9',\n\t    Uacute: '\\u00DA',\n\t    Ucirc: '\\u00DB',\n\t    Uuml: '\\u00DC',\n\t    Yacute: '\\u00DD',\n\t    THORN: '\\u00DE',\n\t    szlig: '\\u00DF',\n\t    agrave: '\\u00E0',\n\t    aacute: '\\u00E1',\n\t    acirc: '\\u00E2',\n\t    atilde: '\\u00E3',\n\t    auml: '\\u00E4',\n\t    aring: '\\u00E5',\n\t    aelig: '\\u00E6',\n\t    ccedil: '\\u00E7',\n\t    egrave: '\\u00E8',\n\t    eacute: '\\u00E9',\n\t    ecirc: '\\u00EA',\n\t    euml: '\\u00EB',\n\t    igrave: '\\u00EC',\n\t    iacute: '\\u00ED',\n\t    icirc: '\\u00EE',\n\t    iuml: '\\u00EF',\n\t    eth: '\\u00F0',\n\t    ntilde: '\\u00F1',\n\t    ograve: '\\u00F2',\n\t    oacute: '\\u00F3',\n\t    ocirc: '\\u00F4',\n\t    otilde: '\\u00F5',\n\t    ouml: '\\u00F6',\n\t    divide: '\\u00F7',\n\t    oslash: '\\u00F8',\n\t    ugrave: '\\u00F9',\n\t    uacute: '\\u00FA',\n\t    ucirc: '\\u00FB',\n\t    uuml: '\\u00FC',\n\t    yacute: '\\u00FD',\n\t    thorn: '\\u00FE',\n\t    yuml: '\\u00FF',\n\t    OElig: '\\u0152',\n\t    oelig: '\\u0153',\n\t    Scaron: '\\u0160',\n\t    scaron: '\\u0161',\n\t    Yuml: '\\u0178',\n\t    fnof: '\\u0192',\n\t    circ: '\\u02C6',\n\t    tilde: '\\u02DC',\n\t    Alpha: '\\u0391',\n\t    Beta: '\\u0392',\n\t    Gamma: '\\u0393',\n\t    Delta: '\\u0394',\n\t    Epsilon: '\\u0395',\n\t    Zeta: '\\u0396',\n\t    Eta: '\\u0397',\n\t    Theta: '\\u0398',\n\t    Iota: '\\u0399',\n\t    Kappa: '\\u039A',\n\t    Lambda: '\\u039B',\n\t    Mu: '\\u039C',\n\t    Nu: '\\u039D',\n\t    Xi: '\\u039E',\n\t    Omicron: '\\u039F',\n\t    Pi: '\\u03A0',\n\t    Rho: '\\u03A1',\n\t    Sigma: '\\u03A3',\n\t    Tau: '\\u03A4',\n\t    Upsilon: '\\u03A5',\n\t    Phi: '\\u03A6',\n\t    Chi: '\\u03A7',\n\t    Psi: '\\u03A8',\n\t    Omega: '\\u03A9',\n\t    alpha: '\\u03B1',\n\t    beta: '\\u03B2',\n\t    gamma: '\\u03B3',\n\t    delta: '\\u03B4',\n\t    epsilon: '\\u03B5',\n\t    zeta: '\\u03B6',\n\t    eta: '\\u03B7',\n\t    theta: '\\u03B8',\n\t    iota: '\\u03B9',\n\t    kappa: '\\u03BA',\n\t    lambda: '\\u03BB',\n\t    mu: '\\u03BC',\n\t    nu: '\\u03BD',\n\t    xi: '\\u03BE',\n\t    omicron: '\\u03BF',\n\t    pi: '\\u03C0',\n\t    rho: '\\u03C1',\n\t    sigmaf: '\\u03C2',\n\t    sigma: '\\u03C3',\n\t    tau: '\\u03C4',\n\t    upsilon: '\\u03C5',\n\t    phi: '\\u03C6',\n\t    chi: '\\u03C7',\n\t    psi: '\\u03C8',\n\t    omega: '\\u03C9',\n\t    thetasym: '\\u03D1',\n\t    upsih: '\\u03D2',\n\t    piv: '\\u03D6',\n\t    ensp: '\\u2002',\n\t    emsp: '\\u2003',\n\t    thinsp: '\\u2009',\n\t    zwnj: '\\u200C',\n\t    zwj: '\\u200D',\n\t    lrm: '\\u200E',\n\t    rlm: '\\u200F',\n\t    ndash: '\\u2013',\n\t    mdash: '\\u2014',\n\t    lsquo: '\\u2018',\n\t    rsquo: '\\u2019',\n\t    sbquo: '\\u201A',\n\t    ldquo: '\\u201C',\n\t    rdquo: '\\u201D',\n\t    bdquo: '\\u201E',\n\t    dagger: '\\u2020',\n\t    Dagger: '\\u2021',\n\t    bull: '\\u2022',\n\t    hellip: '\\u2026',\n\t    permil: '\\u2030',\n\t    prime: '\\u2032',\n\t    Prime: '\\u2033',\n\t    lsaquo: '\\u2039',\n\t    rsaquo: '\\u203A',\n\t    oline: '\\u203E',\n\t    frasl: '\\u2044',\n\t    euro: '\\u20AC',\n\t    image: '\\u2111',\n\t    weierp: '\\u2118',\n\t    real: '\\u211C',\n\t    trade: '\\u2122',\n\t    alefsym: '\\u2135',\n\t    larr: '\\u2190',\n\t    uarr: '\\u2191',\n\t    rarr: '\\u2192',\n\t    darr: '\\u2193',\n\t    harr: '\\u2194',\n\t    crarr: '\\u21B5',\n\t    lArr: '\\u21D0',\n\t    uArr: '\\u21D1',\n\t    rArr: '\\u21D2',\n\t    dArr: '\\u21D3',\n\t    hArr: '\\u21D4',\n\t    forall: '\\u2200',\n\t    part: '\\u2202',\n\t    exist: '\\u2203',\n\t    empty: '\\u2205',\n\t    nabla: '\\u2207',\n\t    isin: '\\u2208',\n\t    notin: '\\u2209',\n\t    ni: '\\u220B',\n\t    prod: '\\u220F',\n\t    sum: '\\u2211',\n\t    minus: '\\u2212',\n\t    lowast: '\\u2217',\n\t    radic: '\\u221A',\n\t    prop: '\\u221D',\n\t    infin: '\\u221E',\n\t    ang: '\\u2220',\n\t    and: '\\u2227',\n\t    or: '\\u2228',\n\t    cap: '\\u2229',\n\t    cup: '\\u222A',\n\t    int: '\\u222B',\n\t    there4: '\\u2234',\n\t    sim: '\\u223C',\n\t    cong: '\\u2245',\n\t    asymp: '\\u2248',\n\t    ne: '\\u2260',\n\t    equiv: '\\u2261',\n\t    le: '\\u2264',\n\t    ge: '\\u2265',\n\t    sub: '\\u2282',\n\t    sup: '\\u2283',\n\t    nsub: '\\u2284',\n\t    sube: '\\u2286',\n\t    supe: '\\u2287',\n\t    oplus: '\\u2295',\n\t    otimes: '\\u2297',\n\t    perp: '\\u22A5',\n\t    sdot: '\\u22C5',\n\t    lceil: '\\u2308',\n\t    rceil: '\\u2309',\n\t    lfloor: '\\u230A',\n\t    rfloor: '\\u230B',\n\t    loz: '\\u25CA',\n\t    spades: '\\u2660',\n\t    clubs: '\\u2663',\n\t    hearts: '\\u2665',\n\t    diams: '\\u2666',\n\t    lang: '\\u27E8',\n\t    rang: '\\u27E9'\n\t};\n\n\n/***/ },\n/* 15 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar error_handler_1 = __webpack_require__(10);\n\tvar scanner_1 = __webpack_require__(12);\n\tvar token_1 = __webpack_require__(13);\n\tvar Reader = (function () {\n\t    function Reader() {\n\t        this.values = [];\n\t        this.curly = this.paren = -1;\n\t    }\n\t    // A function following one of those tokens is an expression.\n\t    Reader.prototype.beforeFunctionExpression = function (t) {\n\t        return ['(', '{', '[', 'in', 'typeof', 'instanceof', 'new',\n\t            'return', 'case', 'delete', 'throw', 'void',\n\t            // assignment operators\n\t            '=', '+=', '-=', '*=', '**=', '/=', '%=', '<<=', '>>=', '>>>=',\n\t            '&=', '|=', '^=', ',',\n\t            // binary/unary operators\n\t            '+', '-', '*', '**', '/', '%', '++', '--', '<<', '>>', '>>>', '&',\n\t            '|', '^', '!', '~', '&&', '||', '?', ':', '===', '==', '>=',\n\t            '<=', '<', '>', '!=', '!=='].indexOf(t) >= 0;\n\t    };\n\t    // Determine if forward slash (/) is an operator or part of a regular expression\n\t    // https://github.com/mozilla/sweet.js/wiki/design\n\t    Reader.prototype.isRegexStart = function () {\n\t        var previous = this.values[this.values.length - 1];\n\t        var regex = (previous !== null);\n\t        switch (previous) {\n\t            case 'this':\n\t            case ']':\n\t                regex = false;\n\t                break;\n\t            case ')':\n\t                var keyword = this.values[this.paren - 1];\n\t                regex = (keyword === 'if' || keyword === 'while' || keyword === 'for' || keyword === 'with');\n\t                break;\n\t            case '}':\n\t                // Dividing a function by anything makes little sense,\n\t                // but we have to check for that.\n\t                regex = false;\n\t                if (this.values[this.curly - 3] === 'function') {\n\t                    // Anonymous function, e.g. function(){} /42\n\t                    var check = this.values[this.curly - 4];\n\t                    regex = check ? !this.beforeFunctionExpression(check) : false;\n\t                }\n\t                else if (this.values[this.curly - 4] === 'function') {\n\t                    // Named function, e.g. function f(){} /42/\n\t                    var check = this.values[this.curly - 5];\n\t                    regex = check ? !this.beforeFunctionExpression(check) : true;\n\t                }\n\t                break;\n\t            default:\n\t                break;\n\t        }\n\t        return regex;\n\t    };\n\t    Reader.prototype.push = function (token) {\n\t        if (token.type === 7 /* Punctuator */ || token.type === 4 /* Keyword */) {\n\t            if (token.value === '{') {\n\t                this.curly = this.values.length;\n\t            }\n\t            else if (token.value === '(') {\n\t                this.paren = this.values.length;\n\t            }\n\t            this.values.push(token.value);\n\t        }\n\t        else {\n\t            this.values.push(null);\n\t        }\n\t    };\n\t    return Reader;\n\t}());\n\tvar Tokenizer = (function () {\n\t    function Tokenizer(code, config) {\n\t        this.errorHandler = new error_handler_1.ErrorHandler();\n\t        this.errorHandler.tolerant = config ? (typeof config.tolerant === 'boolean' && config.tolerant) : false;\n\t        this.scanner = new scanner_1.Scanner(code, this.errorHandler);\n\t        this.scanner.trackComment = config ? (typeof config.comment === 'boolean' && config.comment) : false;\n\t        this.trackRange = config ? (typeof config.range === 'boolean' && config.range) : false;\n\t        this.trackLoc = config ? (typeof config.loc === 'boolean' && config.loc) : false;\n\t        this.buffer = [];\n\t        this.reader = new Reader();\n\t    }\n\t    Tokenizer.prototype.errors = function () {\n\t        return this.errorHandler.errors;\n\t    };\n\t    Tokenizer.prototype.getNextToken = function () {\n\t        if (this.buffer.length === 0) {\n\t            var comments = this.scanner.scanComments();\n\t            if (this.scanner.trackComment) {\n\t                for (var i = 0; i < comments.length; ++i) {\n\t                    var e = comments[i];\n\t                    var value = this.scanner.source.slice(e.slice[0], e.slice[1]);\n\t                    var comment = {\n\t                        type: e.multiLine ? 'BlockComment' : 'LineComment',\n\t                        value: value\n\t                    };\n\t                    if (this.trackRange) {\n\t                        comment.range = e.range;\n\t                    }\n\t                    if (this.trackLoc) {\n\t                        comment.loc = e.loc;\n\t                    }\n\t                    this.buffer.push(comment);\n\t                }\n\t            }\n\t            if (!this.scanner.eof()) {\n\t                var loc = void 0;\n\t                if (this.trackLoc) {\n\t                    loc = {\n\t                        start: {\n\t                            line: this.scanner.lineNumber,\n\t                            column: this.scanner.index - this.scanner.lineStart\n\t                        },\n\t                        end: {}\n\t                    };\n\t                }\n\t                var startRegex = (this.scanner.source[this.scanner.index] === '/') && this.reader.isRegexStart();\n\t                var token = startRegex ? this.scanner.scanRegExp() : this.scanner.lex();\n\t                this.reader.push(token);\n\t                var entry = {\n\t                    type: token_1.TokenName[token.type],\n\t                    value: this.scanner.source.slice(token.start, token.end)\n\t                };\n\t                if (this.trackRange) {\n\t                    entry.range = [token.start, token.end];\n\t                }\n\t                if (this.trackLoc) {\n\t                    loc.end = {\n\t                        line: this.scanner.lineNumber,\n\t                        column: this.scanner.index - this.scanner.lineStart\n\t                    };\n\t                    entry.loc = loc;\n\t                }\n\t                if (token.type === 9 /* RegularExpression */) {\n\t                    var pattern = token.pattern;\n\t                    var flags = token.flags;\n\t                    entry.regex = { pattern: pattern, flags: flags };\n\t                }\n\t                this.buffer.push(entry);\n\t            }\n\t        }\n\t        return this.buffer.shift();\n\t    };\n\t    return Tokenizer;\n\t}());\n\texports.Tokenizer = Tokenizer;\n\n\n/***/ }\n/******/ ])\n});\n;/package.json\u0011k{\n  \"name\": \"esprima\",\n  \"description\": \"ECMAScript parsing infrastructure for multipurpose analysis\",\n  \"homepage\": \"http://esprima.org\",\n  \"main\": \"dist/esprima.js\",\n  \"bin\": {\n    \"esparse\": \"./bin/esparse.js\",\n    \"esvalidate\": \"./bin/esvalidate.js\"\n  },\n  \"version\": \"4.0.1\",\n  \"files\": [\n    \"bin\",\n    \"dist/esprima.js\"\n  ],\n  \"engines\": {\n    \"node\": \">=4\"\n  },\n  \"author\": {\n    \"name\": \"Ariya Hidayat\",\n    \"email\": \"ariya.hidayat@gmail.com\"\n  },\n  \"maintainers\": [\n    {\n      \"name\": \"Ariya Hidayat\",\n      \"email\": \"ariya.hidayat@gmail.com\",\n      \"web\": \"http://ariya.ofilabs.com\"\n    }\n  ],\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/jquery/esprima.git\"\n  },\n  \"bugs\": {\n    \"url\": \"https://github.com/jquery/esprima/issues\"\n  },\n  \"license\": \"BSD-2-Clause\",\n  \"devDependencies\": {\n    \"codecov.io\": \"~0.1.6\",\n    \"escomplex-js\": \"1.2.0\",\n    \"everything.js\": \"~1.0.3\",\n    \"glob\": \"~7.1.0\",\n    \"istanbul\": \"~0.4.0\",\n    \"json-diff\": \"~0.3.1\",\n    \"karma\": \"~1.3.0\",\n    \"karma-chrome-launcher\": \"~2.0.0\",\n    \"karma-detect-browsers\": \"~2.2.3\",\n    \"karma-edge-launcher\": \"~0.2.0\",\n    \"karma-firefox-launcher\": \"~1.0.0\",\n    \"karma-ie-launcher\": \"~1.0.0\",\n    \"karma-mocha\": \"~1.3.0\",\n    \"karma-safari-launcher\": \"~1.0.0\",\n    \"karma-safaritechpreview-launcher\": \"~0.0.4\",\n    \"karma-sauce-launcher\": \"~1.1.0\",\n    \"lodash\": \"~3.10.1\",\n    \"mocha\": \"~3.2.0\",\n    \"node-tick-processor\": \"~0.0.2\",\n    \"regenerate\": \"~1.3.2\",\n    \"temp\": \"~0.8.3\",\n    \"tslint\": \"~5.1.0\",\n    \"typescript\": \"~2.3.2\",\n    \"typescript-formatter\": \"~5.1.3\",\n    \"unicode-8.0.0\": \"~0.7.0\",\n    \"webpack\": \"~1.14.0\"\n  },\n  \"keywords\": [\n    \"ast\",\n    \"ecmascript\",\n    \"esprima\",\n    \"javascript\",\n    \"parser\",\n    \"syntax\"\n  ],\n  \"scripts\": {\n    \"check-version\": \"node test/check-version.js\",\n    \"tslint\": \"tslint src/*.ts\",\n    \"code-style\": \"tsfmt --verify src/*.ts && tsfmt --verify test/*.js\",\n    \"format-code\": \"tsfmt -r src/*.ts && tsfmt -r test/*.js\",\n    \"complexity\": \"node test/check-complexity.js\",\n    \"static-analysis\": \"npm run check-version && npm run tslint && npm run code-style && npm run complexity\",\n    \"hostile-env-tests\": \"node test/hostile-environment-tests.js\",\n    \"unit-tests\": \"node test/unit-tests.js\",\n    \"api-tests\": \"mocha -R dot test/api-tests.js\",\n    \"grammar-tests\": \"node test/grammar-tests.js\",\n    \"regression-tests\": \"node test/regression-tests.js\",\n    \"all-tests\": \"npm run verify-line-ending && npm run generate-fixtures && npm run unit-tests && npm run api-tests && npm run grammar-tests && npm run regression-tests && npm run hostile-env-tests\",\n    \"verify-line-ending\": \"node test/verify-line-ending.js\",\n    \"generate-fixtures\": \"node tools/generate-fixtures.js\",\n    \"browser-tests\": \"npm run compile && npm run generate-fixtures && cd test && karma start --single-run\",\n    \"saucelabs-evergreen\": \"cd test && karma start saucelabs-evergreen.conf.js\",\n    \"saucelabs-safari\": \"cd test && karma start saucelabs-safari.conf.js\",\n    \"saucelabs-ie\": \"cd test && karma start saucelabs-ie.conf.js\",\n    \"saucelabs\": \"npm run saucelabs-evergreen && npm run saucelabs-ie && npm run saucelabs-safari\",\n    \"analyze-coverage\": \"istanbul cover test/unit-tests.js\",\n    \"check-coverage\": \"istanbul check-coverage --statement 100 --branch 100 --function 100\",\n    \"dynamic-analysis\": \"npm run analyze-coverage && npm run check-coverage\",\n    \"compile\": \"tsc -p src/ && webpack && node tools/fixupbundle.js\",\n    \"test\": \"npm run compile && npm run all-tests && npm run static-analysis && npm run dynamic-analysis\",\n    \"prepublish\": \"npm run compile\",\n    \"profile\": \"node --prof test/profile.js && mv isolate*.log v8.log && node-tick-processor\",\n    \"benchmark-parser\": \"node -expose_gc test/benchmark-parser.js\",\n    \"benchmark-tokenizer\": \"node --expose_gc test/benchmark-tokenizer.js\",\n    \"benchmark\": \"npm run benchmark-parser && npm run benchmark-tokenizer\",\n    \"codecov\": \"istanbul report cobertura && codecov < ./coverage/cobertura-coverage.xml\",\n    \"downstream\": \"node test/downstream.js\",\n    \"travis\": \"npm test\",\n    \"circleci\": \"npm test && npm run codecov && npm run downstream\",\n    \"appveyor\": \"npm run compile && npm run all-tests && npm run browser-tests\",\n    \"droneio\": \"npm run compile && npm run all-tests && npm run saucelabs\",\n    \"generate-regex\": \"node tools/generate-identifier-regex.js\",\n    \"generate-xhtml-entities\": \"node tools/generate-xhtml-entities.js\"\n  }\n}\n/LICENSE.BSD\u0005\u0017Copyright JS Foundation and other contributors, https://js.foundation/\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n  * Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in the\n    documentation and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\nDIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\nON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\nTHIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/ZXNyZWN1cnNlQDQuMy4w",
    "content": "/package.json\u0004{\n  \"name\": \"esrecurse\",\n  \"description\": \"ECMAScript AST recursive visitor\",\n  \"homepage\": \"https://github.com/estools/esrecurse\",\n  \"main\": \"esrecurse.js\",\n  \"version\": \"4.3.0\",\n  \"engines\": {\n    \"node\": \">=4.0\"\n  },\n  \"maintainers\": [\n    {\n      \"name\": \"Yusuke Suzuki\",\n      \"email\": \"utatane.tea@gmail.com\",\n      \"web\": \"https://github.com/Constellation\"\n    }\n  ],\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/estools/esrecurse.git\"\n  },\n  \"dependencies\": {\n    \"estraverse\": \"^5.2.0\"\n  },\n  \"devDependencies\": {\n    \"babel-cli\": \"^6.24.1\",\n    \"babel-eslint\": \"^7.2.3\",\n    \"babel-preset-es2015\": \"^6.24.1\",\n    \"babel-register\": \"^6.24.1\",\n    \"chai\": \"^4.0.2\",\n    \"esprima\": \"^4.0.0\",\n    \"gulp\": \"^3.9.0\",\n    \"gulp-bump\": \"^2.7.0\",\n    \"gulp-eslint\": \"^4.0.0\",\n    \"gulp-filter\": \"^5.0.0\",\n    \"gulp-git\": \"^2.4.1\",\n    \"gulp-mocha\": \"^4.3.1\",\n    \"gulp-tag-version\": \"^1.2.1\",\n    \"jsdoc\": \"^3.3.0-alpha10\",\n    \"minimist\": \"^1.1.0\"\n  },\n  \"license\": \"BSD-2-Clause\",\n  \"scripts\": {\n    \"test\": \"gulp travis\",\n    \"unit-test\": \"gulp test\",\n    \"lint\": \"gulp lint\"\n  },\n  \"babel\": {\n    \"presets\": [\n      \"es2015\"\n    ]\n  }\n}\n/README.md\u0013### Esrecurse [![Build Status](https://travis-ci.org/estools/esrecurse.svg?branch=master)](https://travis-ci.org/estools/esrecurse)\n\nEsrecurse ([esrecurse](https://github.com/estools/esrecurse)) is\n[ECMAScript](https://www.ecma-international.org/publications/standards/Ecma-262.htm)\nrecursive traversing functionality.\n\n### Example Usage\n\nThe following code will output all variables declared at the root of a file.\n\n```javascript\nesrecurse.visit(ast, {\n    XXXStatement: function (node) {\n        this.visit(node.left);\n        // do something...\n        this.visit(node.right);\n    }\n});\n```\n\nWe can use `Visitor` instance.\n\n```javascript\nvar visitor = new esrecurse.Visitor({\n    XXXStatement: function (node) {\n        this.visit(node.left);\n        // do something...\n        this.visit(node.right);\n    }\n});\n\nvisitor.visit(ast);\n```\n\nWe can inherit `Visitor` instance easily.\n\n```javascript\nclass Derived extends esrecurse.Visitor {\n    constructor()\n    {\n        super(null);\n    }\n\n    XXXStatement(node) {\n    }\n}\n```\n\n```javascript\nfunction DerivedVisitor() {\n    esrecurse.Visitor.call(/* this for constructor */  this  /* visitor object automatically becomes this. */);\n}\nutil.inherits(DerivedVisitor, esrecurse.Visitor);\nDerivedVisitor.prototype.XXXStatement = function (node) {\n    this.visit(node.left);\n    // do something...\n    this.visit(node.right);\n};\n```\n\nAnd you can invoke default visiting operation inside custom visit operation.\n\n```javascript\nfunction DerivedVisitor() {\n    esrecurse.Visitor.call(/* this for constructor */  this  /* visitor object automatically becomes this. */);\n}\nutil.inherits(DerivedVisitor, esrecurse.Visitor);\nDerivedVisitor.prototype.XXXStatement = function (node) {\n    // do something...\n    this.visitChildren(node);\n};\n```\n\nThe `childVisitorKeys` option does customize the behaviour of `this.visitChildren(node)`.\nWe can use user-defined node types.\n\n```javascript\n// This tree contains a user-defined `TestExpression` node.\nvar tree = {\n    type: 'TestExpression',\n\n    // This 'argument' is the property containing the other **node**.\n    argument: {\n        type: 'Literal',\n        value: 20\n    },\n\n    // This 'extended' is the property not containing the other **node**.\n    extended: true\n};\nesrecurse.visit(\n    ast,\n    {\n        Literal: function (node) {\n            // do something...\n        }\n    },\n    {\n        // Extending the existing traversing rules.\n        childVisitorKeys: {\n            // TargetNodeName: [ 'keys', 'containing', 'the', 'other', '**node**' ]\n            TestExpression: ['argument']\n        }\n    }\n);\n```\n\nWe can use the `fallback` option as well.\nIf the `fallback` option is `\"iteration\"`, `esrecurse` would visit all enumerable properties of unknown nodes.\nPlease note circular references cause the stack overflow. AST might have circular references in additional properties for some purpose (e.g. `node.parent`).\n\n```javascript\nesrecurse.visit(\n    ast,\n    {\n        Literal: function (node) {\n            // do something...\n        }\n    },\n    {\n        fallback: 'iteration'\n    }\n);\n```\n\nIf the `fallback` option is a function, `esrecurse` calls this function to determine the enumerable properties of unknown nodes.\nPlease note circular references cause the stack overflow. AST might have circular references in additional properties for some purpose (e.g. `node.parent`).\n\n```javascript\nesrecurse.visit(\n    ast,\n    {\n        Literal: function (node) {\n            // do something...\n        }\n    },\n    {\n        fallback: function (node) {\n            return Object.keys(node).filter(function(key) {\n                return key !== 'argument'\n            });\n        }\n    }\n);\n```\n\n### License\n\nCopyright (C) 2014 [Yusuke Suzuki](https://github.com/Constellation)\n (twitter: [@Constellation](https://twitter.com/Constellation)) and other contributors.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n  * Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n\n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in the\n    documentation and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\nDIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\nON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\nTHIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n/esrecurse.js\u0010/*\n  Copyright (C) 2014 Yusuke Suzuki <utatane.tea@gmail.com>\n\n  Redistribution and use in source and binary forms, with or without\n  modification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n\n  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n  ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n(function () {\n    'use strict';\n\n    var estraverse = require('estraverse');\n\n    function isNode(node) {\n        if (node == null) {\n            return false;\n        }\n        return typeof node === 'object' && typeof node.type === 'string';\n    }\n\n    function isProperty(nodeType, key) {\n        return (nodeType === estraverse.Syntax.ObjectExpression || nodeType === estraverse.Syntax.ObjectPattern) && key === 'properties';\n    }\n\n    function Visitor(visitor, options) {\n        options = options || {};\n\n        this.__visitor = visitor ||  this;\n        this.__childVisitorKeys = options.childVisitorKeys\n            ? Object.assign({}, estraverse.VisitorKeys, options.childVisitorKeys)\n            : estraverse.VisitorKeys;\n        if (options.fallback === 'iteration') {\n            this.__fallback = Object.keys;\n        } else if (typeof options.fallback === 'function') {\n            this.__fallback = options.fallback;\n        }\n    }\n\n    /* Default method for visiting children.\n     * When you need to call default visiting operation inside custom visiting\n     * operation, you can use it with `this.visitChildren(node)`.\n     */\n    Visitor.prototype.visitChildren = function (node) {\n        var type, children, i, iz, j, jz, child;\n\n        if (node == null) {\n            return;\n        }\n\n        type = node.type || estraverse.Syntax.Property;\n\n        children = this.__childVisitorKeys[type];\n        if (!children) {\n            if (this.__fallback) {\n                children = this.__fallback(node);\n            } else {\n                throw new Error('Unknown node type ' + type + '.');\n            }\n        }\n\n        for (i = 0, iz = children.length; i < iz; ++i) {\n            child = node[children[i]];\n            if (child) {\n                if (Array.isArray(child)) {\n                    for (j = 0, jz = child.length; j < jz; ++j) {\n                        if (child[j]) {\n                            if (isNode(child[j]) || isProperty(type, children[i])) {\n                                this.visit(child[j]);\n                            }\n                        }\n                    }\n                } else if (isNode(child)) {\n                    this.visit(child);\n                }\n            }\n        }\n    };\n\n    /* Dispatching node. */\n    Visitor.prototype.visit = function (node) {\n        var type;\n\n        if (node == null) {\n            return;\n        }\n\n        type = node.type || estraverse.Syntax.Property;\n        if (this.__visitor[type]) {\n            this.__visitor[type].call(this, node);\n            return;\n        }\n        this.visitChildren(node);\n    };\n\n    exports.version = require('./package.json').version;\n    exports.Visitor = Visitor;\n    exports.visit = function (node, visitor, options) {\n        var v = new Visitor(visitor, options);\n        v.visit(node);\n    };\n}());\n/* vim: set sw=4 ts=4 et tw=80 : */\n/gulpfile.babel.js\u000b// Copyright (C) 2014 Yusuke Suzuki <utatane.tea@gmail.com>\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are met:\n//\n//   * Redistributions of source code must retain the above copyright\n//     notice, this list of conditions and the following disclaimer.\n//   * Redistributions in binary form must reproduce the above copyright\n//     notice, this list of conditions and the following disclaimer in the\n//     documentation and/or other materials provided with the distribution.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n// ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\nimport gulp from 'gulp';\nimport mocha from 'gulp-mocha';\nimport eslint from 'gulp-eslint';\nimport minimist from 'minimist';\nimport git from 'gulp-git';\nimport bump from 'gulp-bump';\nimport filter from 'gulp-filter';\nimport tagVersion from 'gulp-tag-version';\nimport 'babel-register';\n\nconst SOURCE = [\n    '*.js'\n];\n\nlet ESLINT_OPTION = {\n    parser: 'babel-eslint',\n    parserOptions: {\n        'sourceType': 'module'\n    },\n    rules: {\n        'quotes': 0,\n        'eqeqeq': 0,\n        'no-use-before-define': 0,\n        'no-shadow': 0,\n        'no-new': 0,\n        'no-underscore-dangle': 0,\n        'no-multi-spaces': 0,\n        'no-native-reassign': 0,\n        'no-loop-func': 0\n    },\n    env: {\n        'node': true\n    }\n};\n\ngulp.task('test', function() {\n    let options = minimist(process.argv.slice(2), {\n        string: 'test',\n        default: {\n            test: 'test/*.js'\n        }\n    }\n    );\n    return gulp.src(options.test).pipe(mocha({reporter: 'spec'}));\n});\n\ngulp.task('lint', () =>\n    gulp.src(SOURCE)\n    .pipe(eslint(ESLINT_OPTION))\n    .pipe(eslint.formatEach('stylish', process.stderr))\n    .pipe(eslint.failOnError())\n);\n\nlet inc = importance =>\n    gulp.src(['./package.json'])\n        .pipe(bump({type: importance}))\n        .pipe(gulp.dest('./'))\n        .pipe(git.commit('Bumps package version'))\n        .pipe(filter('package.json'))\n        .pipe(tagVersion({\n            prefix: ''\n        }))\n;\n\ngulp.task('travis', [ 'lint', 'test' ]);\ngulp.task('default', [ 'travis' ]);\n\ngulp.task('patch', [ ], () => inc('patch'));\ngulp.task('minor', [ ], () => inc('minor'));\ngulp.task('major', [ ], () => inc('major'));\n/.babelrc\u001e{\n    \"presets\": [\"es2015\"]\n}\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/ZXRhZ0AxLjguMQ==",
    "content": "/HISTORY.md\u00061.8.1 / 2017-09-12\n==================\n\n  * perf: replace regular expression with substring\n\n1.8.0 / 2017-02-18\n==================\n\n  * Use SHA1 instead of MD5 for ETag hashing\n    - Improves performance for larger entities\n    - Works with FIPS 140-2 OpenSSL configuration\n\n1.7.0 / 2015-06-08\n==================\n\n  * Always include entity length in ETags for hash length extensions\n  * Generate non-Stats ETags using MD5 only (no longer CRC32)\n  * Improve stat performance by removing hashing\n  * Remove base64 padding in ETags to shorten\n  * Use MD5 instead of MD4 in weak ETags over 1KB\n\n1.6.0 / 2015-05-10\n==================\n\n  * Improve support for JXcore\n  * Remove requirement of `atime` in the stats object\n  * Support \"fake\" stats objects in environments without `fs`\n\n1.5.1 / 2014-11-19\n==================\n\n  * deps: crc@3.2.1\n    - Minor fixes\n\n1.5.0 / 2014-10-14\n==================\n\n  * Improve string performance\n  * Slightly improve speed for weak ETags over 1KB\n\n1.4.0 / 2014-09-21\n==================\n\n  * Support \"fake\" stats objects\n  * Support Node.js 0.6\n\n1.3.1 / 2014-09-14\n==================\n\n  * Use the (new and improved) `crc` for crc32\n\n1.3.0 / 2014-08-29\n==================\n\n  * Default strings to strong ETags\n  * Improve speed for weak ETags over 1KB\n\n1.2.1 / 2014-08-29\n==================\n\n  * Use the (much faster) `buffer-crc32` for crc32\n\n1.2.0 / 2014-08-24\n==================\n\n  * Add support for file stat objects\n\n1.1.0 / 2014-08-24\n==================\n\n  * Add fast-path for empty entity\n  * Add weak ETag generation\n  * Shrink size of generated ETags\n\n1.0.1 / 2014-08-24\n==================\n\n  * Fix behavior of string containing Unicode\n\n1.0.0 / 2014-05-18\n==================\n\n  * Initial release\n/LICENSE\u0004F(The MIT License)\n\nCopyright (c) 2014-2016 Douglas Christopher Wilson\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n/package.json\u0005\u001a{\n  \"name\": \"etag\",\n  \"description\": \"Create simple HTTP ETags\",\n  \"version\": \"1.8.1\",\n  \"contributors\": [\n    \"Douglas Christopher Wilson <doug@somethingdoug.com>\",\n    \"David Björklund <david.bjorklund@gmail.com>\"\n  ],\n  \"license\": \"MIT\",\n  \"keywords\": [\n    \"etag\",\n    \"http\",\n    \"res\"\n  ],\n  \"repository\": \"jshttp/etag\",\n  \"devDependencies\": {\n    \"beautify-benchmark\": \"0.2.4\",\n    \"benchmark\": \"2.1.4\",\n    \"eslint\": \"3.19.0\",\n    \"eslint-config-standard\": \"10.2.1\",\n    \"eslint-plugin-import\": \"2.7.0\",\n    \"eslint-plugin-markdown\": \"1.0.0-beta.6\",\n    \"eslint-plugin-node\": \"5.1.1\",\n    \"eslint-plugin-promise\": \"3.5.0\",\n    \"eslint-plugin-standard\": \"3.0.1\",\n    \"istanbul\": \"0.4.5\",\n    \"mocha\": \"1.21.5\",\n    \"safe-buffer\": \"5.1.1\",\n    \"seedrandom\": \"2.4.3\"\n  },\n  \"files\": [\n    \"LICENSE\",\n    \"HISTORY.md\",\n    \"README.md\",\n    \"index.js\"\n  ],\n  \"engines\": {\n    \"node\": \">= 0.6\"\n  },\n  \"scripts\": {\n    \"bench\": \"node benchmark/index.js\",\n    \"lint\": \"eslint --plugin markdown --ext js,md .\",\n    \"test\": \"mocha --reporter spec --bail --check-leaks test/\",\n    \"test-cov\": \"istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/\",\n    \"test-travis\": \"istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/\"\n  }\n}\n/README.md\u0010f# etag\n\n[![NPM Version][npm-image]][npm-url]\n[![NPM Downloads][downloads-image]][downloads-url]\n[![Node.js Version][node-version-image]][node-version-url]\n[![Build Status][travis-image]][travis-url]\n[![Test Coverage][coveralls-image]][coveralls-url]\n\nCreate simple HTTP ETags\n\nThis module generates HTTP ETags (as defined in RFC 7232) for use in\nHTTP responses.\n\n## Installation\n\nThis is a [Node.js](https://nodejs.org/en/) module available through the\n[npm registry](https://www.npmjs.com/). Installation is done using the\n[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally):\n\n```sh\n$ npm install etag\n```\n\n## API\n\n<!-- eslint-disable no-unused-vars -->\n\n```js\nvar etag = require('etag')\n```\n\n### etag(entity, [options])\n\nGenerate a strong ETag for the given entity. This should be the complete\nbody of the entity. Strings, `Buffer`s, and `fs.Stats` are accepted. By\ndefault, a strong ETag is generated except for `fs.Stats`, which will\ngenerate a weak ETag (this can be overwritten by `options.weak`).\n\n<!-- eslint-disable no-undef -->\n\n```js\nres.setHeader('ETag', etag(body))\n```\n\n#### Options\n\n`etag` accepts these properties in the options object.\n\n##### weak\n\nSpecifies if the generated ETag will include the weak validator mark (that\nis, the leading `W/`). The actual entity tag is the same. The default value\nis `false`, unless the `entity` is `fs.Stats`, in which case it is `true`.\n\n## Testing\n\n```sh\n$ npm test\n```\n\n## Benchmark\n\n```bash\n$ npm run-script bench\n\n> etag@1.8.1 bench nodejs-etag\n> node benchmark/index.js\n\n  http_parser@2.7.0\n  node@6.11.1\n  v8@5.1.281.103\n  uv@1.11.0\n  zlib@1.2.11\n  ares@1.10.1-DEV\n  icu@58.2\n  modules@48\n  openssl@1.0.2k\n\n> node benchmark/body0-100b.js\n\n  100B body\n\n  4 tests completed.\n\n  buffer - strong x 258,647 ops/sec ±1.07% (180 runs sampled)\n  buffer - weak   x 263,812 ops/sec ±0.61% (184 runs sampled)\n  string - strong x 259,955 ops/sec ±1.19% (185 runs sampled)\n  string - weak   x 264,356 ops/sec ±1.09% (184 runs sampled)\n\n> node benchmark/body1-1kb.js\n\n  1KB body\n\n  4 tests completed.\n\n  buffer - strong x 189,018 ops/sec ±1.12% (182 runs sampled)\n  buffer - weak   x 190,586 ops/sec ±0.81% (186 runs sampled)\n  string - strong x 144,272 ops/sec ±0.96% (188 runs sampled)\n  string - weak   x 145,380 ops/sec ±1.43% (187 runs sampled)\n\n> node benchmark/body2-5kb.js\n\n  5KB body\n\n  4 tests completed.\n\n  buffer - strong x 92,435 ops/sec ±0.42% (188 runs sampled)\n  buffer - weak   x 92,373 ops/sec ±0.58% (189 runs sampled)\n  string - strong x 48,850 ops/sec ±0.56% (186 runs sampled)\n  string - weak   x 49,380 ops/sec ±0.56% (190 runs sampled)\n\n> node benchmark/body3-10kb.js\n\n  10KB body\n\n  4 tests completed.\n\n  buffer - strong x 55,989 ops/sec ±0.93% (188 runs sampled)\n  buffer - weak   x 56,148 ops/sec ±0.55% (190 runs sampled)\n  string - strong x 27,345 ops/sec ±0.43% (188 runs sampled)\n  string - weak   x 27,496 ops/sec ±0.45% (190 runs sampled)\n\n> node benchmark/body4-100kb.js\n\n  100KB body\n\n  4 tests completed.\n\n  buffer - strong x 7,083 ops/sec ±0.22% (190 runs sampled)\n  buffer - weak   x 7,115 ops/sec ±0.26% (191 runs sampled)\n  string - strong x 3,068 ops/sec ±0.34% (190 runs sampled)\n  string - weak   x 3,096 ops/sec ±0.35% (190 runs sampled)\n\n> node benchmark/stats.js\n\n  stat\n\n  4 tests completed.\n\n  real - strong x 871,642 ops/sec ±0.34% (189 runs sampled)\n  real - weak   x 867,613 ops/sec ±0.39% (190 runs sampled)\n  fake - strong x 401,051 ops/sec ±0.40% (189 runs sampled)\n  fake - weak   x 400,100 ops/sec ±0.47% (188 runs sampled)\n```\n\n## License\n\n[MIT](LICENSE)\n\n[npm-image]: https://img.shields.io/npm/v/etag.svg\n[npm-url]: https://npmjs.org/package/etag\n[node-version-image]: https://img.shields.io/node/v/etag.svg\n[node-version-url]: https://nodejs.org/en/download/\n[travis-image]: https://img.shields.io/travis/jshttp/etag/master.svg\n[travis-url]: https://travis-ci.org/jshttp/etag\n[coveralls-image]: https://img.shields.io/coveralls/jshttp/etag/master.svg\n[coveralls-url]: https://coveralls.io/r/jshttp/etag?branch=master\n[downloads-image]: https://img.shields.io/npm/dm/etag.svg\n[downloads-url]: https://npmjs.org/package/etag\n/index.js\t/*!\n * etag\n * Copyright(c) 2014-2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = etag\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar crypto = require('crypto')\nvar Stats = require('fs').Stats\n\n/**\n * Module variables.\n * @private\n */\n\nvar toString = Object.prototype.toString\n\n/**\n * Generate an entity tag.\n *\n * @param {Buffer|string} entity\n * @return {string}\n * @private\n */\n\nfunction entitytag (entity) {\n  if (entity.length === 0) {\n    // fast-path empty\n    return '\"0-2jmj7l5rSw0yVb/vlWAYkK/YBwk\"'\n  }\n\n  // compute hash of entity\n  var hash = crypto\n    .createHash('sha1')\n    .update(entity, 'utf8')\n    .digest('base64')\n    .substring(0, 27)\n\n  // compute length of entity\n  var len = typeof entity === 'string'\n    ? Buffer.byteLength(entity, 'utf8')\n    : entity.length\n\n  return '\"' + len.toString(16) + '-' + hash + '\"'\n}\n\n/**\n * Create a simple ETag.\n *\n * @param {string|Buffer|Stats} entity\n * @param {object} [options]\n * @param {boolean} [options.weak]\n * @return {String}\n * @public\n */\n\nfunction etag (entity, options) {\n  if (entity == null) {\n    throw new TypeError('argument entity is required')\n  }\n\n  // support fs.Stats object\n  var isStats = isstats(entity)\n  var weak = options && typeof options.weak === 'boolean'\n    ? options.weak\n    : isStats\n\n  // validate argument\n  if (!isStats && typeof entity !== 'string' && !Buffer.isBuffer(entity)) {\n    throw new TypeError('argument entity must be string, Buffer, or fs.Stats')\n  }\n\n  // generate entity tag\n  var tag = isStats\n    ? stattag(entity)\n    : entitytag(entity)\n\n  return weak\n    ? 'W/' + tag\n    : tag\n}\n\n/**\n * Determine if object is a Stats object.\n *\n * @param {object} obj\n * @return {boolean}\n * @api private\n */\n\nfunction isstats (obj) {\n  // genuine fs.Stats\n  if (typeof Stats === 'function' && obj instanceof Stats) {\n    return true\n  }\n\n  // quack quack\n  return obj && typeof obj === 'object' &&\n    'ctime' in obj && toString.call(obj.ctime) === '[object Date]' &&\n    'mtime' in obj && toString.call(obj.mtime) === '[object Date]' &&\n    'ino' in obj && typeof obj.ino === 'number' &&\n    'size' in obj && typeof obj.size === 'number'\n}\n\n/**\n * Generate a tag for a stat.\n *\n * @param {object} stat\n * @return {string}\n * @private\n */\n\nfunction stattag (stat) {\n  var mtime = stat.mtime.getTime().toString(16)\n  var size = stat.size.toString(16)\n\n  return '\"' + size + '-' + mtime + '\"'\n}\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/ZXZlbnQtdGFyZ2V0LXNoaW1ANS4wLjE=",
    "content": "/package.json\t{\n  \"name\": \"event-target-shim\",\n  \"version\": \"5.0.1\",\n  \"description\": \"An implementation of WHATWG EventTarget interface.\",\n  \"main\": \"dist/event-target-shim\",\n  \"types\": \"index.d.ts\",\n  \"files\": [\n    \"dist\",\n    \"index.d.ts\"\n  ],\n  \"engines\": {\n    \"node\": \">=6\"\n  },\n  \"scripts\": {\n    \"preversion\": \"npm test\",\n    \"version\": \"npm run build && git add dist/*\",\n    \"postversion\": \"git push && git push --tags\",\n    \"clean\": \"rimraf .nyc_output coverage\",\n    \"coverage\": \"nyc report --reporter lcov && opener coverage/lcov-report/index.html\",\n    \"lint\": \"eslint src test scripts --ext .js,.mjs\",\n    \"build\": \"rollup -c scripts/rollup.config.js\",\n    \"pretest\": \"npm run lint\",\n    \"test\": \"run-s test:*\",\n    \"test:mocha\": \"nyc --require ./scripts/babel-register mocha test/*.mjs\",\n    \"test:karma\": \"karma start scripts/karma.conf.js --single-run\",\n    \"watch\": \"run-p watch:*\",\n    \"watch:mocha\": \"mocha test/*.mjs --require ./scripts/babel-register --watch --watch-extensions js,mjs --growl\",\n    \"watch:karma\": \"karma start scripts/karma.conf.js --watch\",\n    \"codecov\": \"codecov\"\n  },\n  \"devDependencies\": {\n    \"@babel/core\": \"^7.2.2\",\n    \"@babel/plugin-transform-modules-commonjs\": \"^7.2.0\",\n    \"@babel/preset-env\": \"^7.2.3\",\n    \"@babel/register\": \"^7.0.0\",\n    \"@mysticatea/eslint-plugin\": \"^8.0.1\",\n    \"@mysticatea/spy\": \"^0.1.2\",\n    \"assert\": \"^1.4.1\",\n    \"codecov\": \"^3.1.0\",\n    \"eslint\": \"^5.12.1\",\n    \"karma\": \"^3.1.4\",\n    \"karma-chrome-launcher\": \"^2.2.0\",\n    \"karma-coverage\": \"^1.1.2\",\n    \"karma-firefox-launcher\": \"^1.0.0\",\n    \"karma-growl-reporter\": \"^1.0.0\",\n    \"karma-ie-launcher\": \"^1.0.0\",\n    \"karma-mocha\": \"^1.3.0\",\n    \"karma-rollup-preprocessor\": \"^7.0.0-rc.2\",\n    \"mocha\": \"^5.2.0\",\n    \"npm-run-all\": \"^4.1.5\",\n    \"nyc\": \"^13.1.0\",\n    \"opener\": \"^1.5.1\",\n    \"rimraf\": \"^2.6.3\",\n    \"rollup\": \"^1.1.1\",\n    \"rollup-plugin-babel\": \"^4.3.2\",\n    \"rollup-plugin-babel-minify\": \"^7.0.0\",\n    \"rollup-plugin-commonjs\": \"^9.2.0\",\n    \"rollup-plugin-json\": \"^3.1.0\",\n    \"rollup-plugin-node-resolve\": \"^4.0.0\",\n    \"rollup-watch\": \"^4.3.1\",\n    \"type-tester\": \"^1.0.0\",\n    \"typescript\": \"^3.2.4\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/mysticatea/event-target-shim.git\"\n  },\n  \"keywords\": [\n    \"w3c\",\n    \"whatwg\",\n    \"eventtarget\",\n    \"event\",\n    \"events\",\n    \"shim\"\n  ],\n  \"author\": \"Toru Nagashima\",\n  \"license\": \"MIT\",\n  \"bugs\": {\n    \"url\": \"https://github.com/mysticatea/event-target-shim/issues\"\n  },\n  \"homepage\": \"https://github.com/mysticatea/event-target-shim\"\n}\n/dist/event-target-shim.mjs.mapŐ{\"version\":3,\"file\":\"event-target-shim.mjs\",\"sources\":[\"../src/event.mjs\",\"../src/event-target.mjs\"],\"sourcesContent\":[\"/**\\n * @typedef {object} PrivateData\\n * @property {EventTarget} eventTarget The event target.\\n * @property {{type:string}} event The original event object.\\n * @property {number} eventPhase The current event phase.\\n * @property {EventTarget|null} currentTarget The current event target.\\n * @property {boolean} canceled The flag to prevent default.\\n * @property {boolean} stopped The flag to stop propagation.\\n * @property {boolean} immediateStopped The flag to stop propagation immediately.\\n * @property {Function|null} passiveListener The listener if the current listener is passive. Otherwise this is null.\\n * @property {number} timeStamp The unix time.\\n * @private\\n */\\n\\n/**\\n * Private data for event wrappers.\\n * @type {WeakMap<Event, PrivateData>}\\n * @private\\n */\\nconst privateData = new WeakMap()\\n\\n/**\\n * Cache for wrapper classes.\\n * @type {WeakMap<Object, Function>}\\n * @private\\n */\\nconst wrappers = new WeakMap()\\n\\n/**\\n * Get private data.\\n * @param {Event} event The event object to get private data.\\n * @returns {PrivateData} The private data of the event.\\n * @private\\n */\\nfunction pd(event) {\\n    const retv = privateData.get(event)\\n    console.assert(\\n        retv != null,\\n        \\\"'this' is expected an Event object, but got\\\",\\n        event\\n    )\\n    return retv\\n}\\n\\n/**\\n * https://dom.spec.whatwg.org/#set-the-canceled-flag\\n * @param data {PrivateData} private data.\\n */\\nfunction setCancelFlag(data) {\\n    if (data.passiveListener != null) {\\n        if (\\n            typeof console !== \\\"undefined\\\" &&\\n            typeof console.error === \\\"function\\\"\\n        ) {\\n            console.error(\\n                \\\"Unable to preventDefault inside passive event listener invocation.\\\",\\n                data.passiveListener\\n            )\\n        }\\n        return\\n    }\\n    if (!data.event.cancelable) {\\n        return\\n    }\\n\\n    data.canceled = true\\n    if (typeof data.event.preventDefault === \\\"function\\\") {\\n        data.event.preventDefault()\\n    }\\n}\\n\\n/**\\n * @see https://dom.spec.whatwg.org/#interface-event\\n * @private\\n */\\n/**\\n * The event wrapper.\\n * @constructor\\n * @param {EventTarget} eventTarget The event target of this dispatching.\\n * @param {Event|{type:string}} event The original event to wrap.\\n */\\nfunction Event(eventTarget, event) {\\n    privateData.set(this, {\\n        eventTarget,\\n        event,\\n        eventPhase: 2,\\n        currentTarget: eventTarget,\\n        canceled: false,\\n        stopped: false,\\n        immediateStopped: false,\\n        passiveListener: null,\\n        timeStamp: event.timeStamp || Date.now(),\\n    })\\n\\n    // https://heycam.github.io/webidl/#Unforgeable\\n    Object.defineProperty(this, \\\"isTrusted\\\", { value: false, enumerable: true })\\n\\n    // Define accessors\\n    const keys = Object.keys(event)\\n    for (let i = 0; i < keys.length; ++i) {\\n        const key = keys[i]\\n        if (!(key in this)) {\\n            Object.defineProperty(this, key, defineRedirectDescriptor(key))\\n        }\\n    }\\n}\\n\\n// Should be enumerable, but class methods are not enumerable.\\nEvent.prototype = {\\n    /**\\n     * The type of this event.\\n     * @type {string}\\n     */\\n    get type() {\\n        return pd(this).event.type\\n    },\\n\\n    /**\\n     * The target of this event.\\n     * @type {EventTarget}\\n     */\\n    get target() {\\n        return pd(this).eventTarget\\n    },\\n\\n    /**\\n     * The target of this event.\\n     * @type {EventTarget}\\n     */\\n    get currentTarget() {\\n        return pd(this).currentTarget\\n    },\\n\\n    /**\\n     * @returns {EventTarget[]} The composed path of this event.\\n     */\\n    composedPath() {\\n        const currentTarget = pd(this).currentTarget\\n        if (currentTarget == null) {\\n            return []\\n        }\\n        return [currentTarget]\\n    },\\n\\n    /**\\n     * Constant of NONE.\\n     * @type {number}\\n     */\\n    get NONE() {\\n        return 0\\n    },\\n\\n    /**\\n     * Constant of CAPTURING_PHASE.\\n     * @type {number}\\n     */\\n    get CAPTURING_PHASE() {\\n        return 1\\n    },\\n\\n    /**\\n     * Constant of AT_TARGET.\\n     * @type {number}\\n     */\\n    get AT_TARGET() {\\n        return 2\\n    },\\n\\n    /**\\n     * Constant of BUBBLING_PHASE.\\n     * @type {number}\\n     */\\n    get BUBBLING_PHASE() {\\n        return 3\\n    },\\n\\n    /**\\n     * The target of this event.\\n     * @type {number}\\n     */\\n    get eventPhase() {\\n        return pd(this).eventPhase\\n    },\\n\\n    /**\\n     * Stop event bubbling.\\n     * @returns {void}\\n     */\\n    stopPropagation() {\\n        const data = pd(this)\\n\\n        data.stopped = true\\n        if (typeof data.event.stopPropagation === \\\"function\\\") {\\n            data.event.stopPropagation()\\n        }\\n    },\\n\\n    /**\\n     * Stop event bubbling.\\n     * @returns {void}\\n     */\\n    stopImmediatePropagation() {\\n        const data = pd(this)\\n\\n        data.stopped = true\\n        data.immediateStopped = true\\n        if (typeof data.event.stopImmediatePropagation === \\\"function\\\") {\\n            data.event.stopImmediatePropagation()\\n        }\\n    },\\n\\n    /**\\n     * The flag to be bubbling.\\n     * @type {boolean}\\n     */\\n    get bubbles() {\\n        return Boolean(pd(this).event.bubbles)\\n    },\\n\\n    /**\\n     * The flag to be cancelable.\\n     * @type {boolean}\\n     */\\n    get cancelable() {\\n        return Boolean(pd(this).event.cancelable)\\n    },\\n\\n    /**\\n     * Cancel this event.\\n     * @returns {void}\\n     */\\n    preventDefault() {\\n        setCancelFlag(pd(this))\\n    },\\n\\n    /**\\n     * The flag to indicate cancellation state.\\n     * @type {boolean}\\n     */\\n    get defaultPrevented() {\\n        return pd(this).canceled\\n    },\\n\\n    /**\\n     * The flag to be composed.\\n     * @type {boolean}\\n     */\\n    get composed() {\\n        return Boolean(pd(this).event.composed)\\n    },\\n\\n    /**\\n     * The unix time of this event.\\n     * @type {number}\\n     */\\n    get timeStamp() {\\n        return pd(this).timeStamp\\n    },\\n\\n    /**\\n     * The target of this event.\\n     * @type {EventTarget}\\n     * @deprecated\\n     */\\n    get srcElement() {\\n        return pd(this).eventTarget\\n    },\\n\\n    /**\\n     * The flag to stop event bubbling.\\n     * @type {boolean}\\n     * @deprecated\\n     */\\n    get cancelBubble() {\\n        return pd(this).stopped\\n    },\\n    set cancelBubble(value) {\\n        if (!value) {\\n            return\\n        }\\n        const data = pd(this)\\n\\n        data.stopped = true\\n        if (typeof data.event.cancelBubble === \\\"boolean\\\") {\\n            data.event.cancelBubble = true\\n        }\\n    },\\n\\n    /**\\n     * The flag to indicate cancellation state.\\n     * @type {boolean}\\n     * @deprecated\\n     */\\n    get returnValue() {\\n        return !pd(this).canceled\\n    },\\n    set returnValue(value) {\\n        if (!value) {\\n            setCancelFlag(pd(this))\\n        }\\n    },\\n\\n    /**\\n     * Initialize this event object. But do nothing under event dispatching.\\n     * @param {string} type The event type.\\n     * @param {boolean} [bubbles=false] The flag to be possible to bubble up.\\n     * @param {boolean} [cancelable=false] The flag to be possible to cancel.\\n     * @deprecated\\n     */\\n    initEvent() {\\n        // Do nothing.\\n    },\\n}\\n\\n// `constructor` is not enumerable.\\nObject.defineProperty(Event.prototype, \\\"constructor\\\", {\\n    value: Event,\\n    configurable: true,\\n    writable: true,\\n})\\n\\n// Ensure `event instanceof window.Event` is `true`.\\nif (typeof window !== \\\"undefined\\\" && typeof window.Event !== \\\"undefined\\\") {\\n    Object.setPrototypeOf(Event.prototype, window.Event.prototype)\\n\\n    // Make association for wrappers.\\n    wrappers.set(window.Event.prototype, Event)\\n}\\n\\n/**\\n * Get the property descriptor to redirect a given property.\\n * @param {string} key Property name to define property descriptor.\\n * @returns {PropertyDescriptor} The property descriptor to redirect the property.\\n * @private\\n */\\nfunction defineRedirectDescriptor(key) {\\n    return {\\n        get() {\\n            return pd(this).event[key]\\n        },\\n        set(value) {\\n            pd(this).event[key] = value\\n        },\\n        configurable: true,\\n        enumerable: true,\\n    }\\n}\\n\\n/**\\n * Get the property descriptor to call a given method property.\\n * @param {string} key Property name to define property descriptor.\\n * @returns {PropertyDescriptor} The property descriptor to call the method property.\\n * @private\\n */\\nfunction defineCallDescriptor(key) {\\n    return {\\n        value() {\\n            const event = pd(this).event\\n            return event[key].apply(event, arguments)\\n        },\\n        configurable: true,\\n        enumerable: true,\\n    }\\n}\\n\\n/**\\n * Define new wrapper class.\\n * @param {Function} BaseEvent The base wrapper class.\\n * @param {Object} proto The prototype of the original event.\\n * @returns {Function} The defined wrapper class.\\n * @private\\n */\\nfunction defineWrapper(BaseEvent, proto) {\\n    const keys = Object.keys(proto)\\n    if (keys.length === 0) {\\n        return BaseEvent\\n    }\\n\\n    /** CustomEvent */\\n    function CustomEvent(eventTarget, event) {\\n        BaseEvent.call(this, eventTarget, event)\\n    }\\n\\n    CustomEvent.prototype = Object.create(BaseEvent.prototype, {\\n        constructor: { value: CustomEvent, configurable: true, writable: true },\\n    })\\n\\n    // Define accessors.\\n    for (let i = 0; i < keys.length; ++i) {\\n        const key = keys[i]\\n        if (!(key in BaseEvent.prototype)) {\\n            const descriptor = Object.getOwnPropertyDescriptor(proto, key)\\n            const isFunc = typeof descriptor.value === \\\"function\\\"\\n            Object.defineProperty(\\n                CustomEvent.prototype,\\n                key,\\n                isFunc\\n                    ? defineCallDescriptor(key)\\n                    : defineRedirectDescriptor(key)\\n            )\\n        }\\n    }\\n\\n    return CustomEvent\\n}\\n\\n/**\\n * Get the wrapper class of a given prototype.\\n * @param {Object} proto The prototype of the original event to get its wrapper.\\n * @returns {Function} The wrapper class.\\n * @private\\n */\\nfunction getWrapper(proto) {\\n    if (proto == null || proto === Object.prototype) {\\n        return Event\\n    }\\n\\n    let wrapper = wrappers.get(proto)\\n    if (wrapper == null) {\\n        wrapper = defineWrapper(getWrapper(Object.getPrototypeOf(proto)), proto)\\n        wrappers.set(proto, wrapper)\\n    }\\n    return wrapper\\n}\\n\\n/**\\n * Wrap a given event to management a dispatching.\\n * @param {EventTarget} eventTarget The event target of this dispatching.\\n * @param {Object} event The event to wrap.\\n * @returns {Event} The wrapper instance.\\n * @private\\n */\\nexport function wrapEvent(eventTarget, event) {\\n    const Wrapper = getWrapper(Object.getPrototypeOf(event))\\n    return new Wrapper(eventTarget, event)\\n}\\n\\n/**\\n * Get the immediateStopped flag of a given event.\\n * @param {Event} event The event to get.\\n * @returns {boolean} The flag to stop propagation immediately.\\n * @private\\n */\\nexport function isStopped(event) {\\n    return pd(event).immediateStopped\\n}\\n\\n/**\\n * Set the current event phase of a given event.\\n * @param {Event} event The event to set current target.\\n * @param {number} eventPhase New event phase.\\n * @returns {void}\\n * @private\\n */\\nexport function setEventPhase(event, eventPhase) {\\n    pd(event).eventPhase = eventPhase\\n}\\n\\n/**\\n * Set the current target of a given event.\\n * @param {Event} event The event to set current target.\\n * @param {EventTarget|null} currentTarget New current target.\\n * @returns {void}\\n * @private\\n */\\nexport function setCurrentTarget(event, currentTarget) {\\n    pd(event).currentTarget = currentTarget\\n}\\n\\n/**\\n * Set a passive listener of a given event.\\n * @param {Event} event The event to set current target.\\n * @param {Function|null} passiveListener New passive listener.\\n * @returns {void}\\n * @private\\n */\\nexport function setPassiveListener(event, passiveListener) {\\n    pd(event).passiveListener = passiveListener\\n}\\n\",\"import {\\n    isStopped,\\n    setCurrentTarget,\\n    setEventPhase,\\n    setPassiveListener,\\n    wrapEvent,\\n} from \\\"./event.mjs\\\"\\n\\n/**\\n * @typedef {object} ListenerNode\\n * @property {Function} listener\\n * @property {1|2|3} listenerType\\n * @property {boolean} passive\\n * @property {boolean} once\\n * @property {ListenerNode|null} next\\n * @private\\n */\\n\\n/**\\n * @type {WeakMap<object, Map<string, ListenerNode>>}\\n * @private\\n */\\nconst listenersMap = new WeakMap()\\n\\n// Listener types\\nconst CAPTURE = 1\\nconst BUBBLE = 2\\nconst ATTRIBUTE = 3\\n\\n/**\\n * Check whether a given value is an object or not.\\n * @param {any} x The value to check.\\n * @returns {boolean} `true` if the value is an object.\\n */\\nfunction isObject(x) {\\n    return x !== null && typeof x === \\\"object\\\" //eslint-disable-line no-restricted-syntax\\n}\\n\\n/**\\n * Get listeners.\\n * @param {EventTarget} eventTarget The event target to get.\\n * @returns {Map<string, ListenerNode>} The listeners.\\n * @private\\n */\\nfunction getListeners(eventTarget) {\\n    const listeners = listenersMap.get(eventTarget)\\n    if (listeners == null) {\\n        throw new TypeError(\\n            \\\"'this' is expected an EventTarget object, but got another value.\\\"\\n        )\\n    }\\n    return listeners\\n}\\n\\n/**\\n * Get the property descriptor for the event attribute of a given event.\\n * @param {string} eventName The event name to get property descriptor.\\n * @returns {PropertyDescriptor} The property descriptor.\\n * @private\\n */\\nfunction defineEventAttributeDescriptor(eventName) {\\n    return {\\n        get() {\\n            const listeners = getListeners(this)\\n            let node = listeners.get(eventName)\\n            while (node != null) {\\n                if (node.listenerType === ATTRIBUTE) {\\n                    return node.listener\\n                }\\n                node = node.next\\n            }\\n            return null\\n        },\\n\\n        set(listener) {\\n            if (typeof listener !== \\\"function\\\" && !isObject(listener)) {\\n                listener = null // eslint-disable-line no-param-reassign\\n            }\\n            const listeners = getListeners(this)\\n\\n            // Traverse to the tail while removing old value.\\n            let prev = null\\n            let node = listeners.get(eventName)\\n            while (node != null) {\\n                if (node.listenerType === ATTRIBUTE) {\\n                    // Remove old value.\\n                    if (prev !== null) {\\n                        prev.next = node.next\\n                    } else if (node.next !== null) {\\n                        listeners.set(eventName, node.next)\\n                    } else {\\n                        listeners.delete(eventName)\\n                    }\\n                } else {\\n                    prev = node\\n                }\\n\\n                node = node.next\\n            }\\n\\n            // Add new value.\\n            if (listener !== null) {\\n                const newNode = {\\n                    listener,\\n                    listenerType: ATTRIBUTE,\\n                    passive: false,\\n                    once: false,\\n                    next: null,\\n                }\\n                if (prev === null) {\\n                    listeners.set(eventName, newNode)\\n                } else {\\n                    prev.next = newNode\\n                }\\n            }\\n        },\\n        configurable: true,\\n        enumerable: true,\\n    }\\n}\\n\\n/**\\n * Define an event attribute (e.g. `eventTarget.onclick`).\\n * @param {Object} eventTargetPrototype The event target prototype to define an event attrbite.\\n * @param {string} eventName The event name to define.\\n * @returns {void}\\n */\\nfunction defineEventAttribute(eventTargetPrototype, eventName) {\\n    Object.defineProperty(\\n        eventTargetPrototype,\\n        `on${eventName}`,\\n        defineEventAttributeDescriptor(eventName)\\n    )\\n}\\n\\n/**\\n * Define a custom EventTarget with event attributes.\\n * @param {string[]} eventNames Event names for event attributes.\\n * @returns {EventTarget} The custom EventTarget.\\n * @private\\n */\\nfunction defineCustomEventTarget(eventNames) {\\n    /** CustomEventTarget */\\n    function CustomEventTarget() {\\n        EventTarget.call(this)\\n    }\\n\\n    CustomEventTarget.prototype = Object.create(EventTarget.prototype, {\\n        constructor: {\\n            value: CustomEventTarget,\\n            configurable: true,\\n            writable: true,\\n        },\\n    })\\n\\n    for (let i = 0; i < eventNames.length; ++i) {\\n        defineEventAttribute(CustomEventTarget.prototype, eventNames[i])\\n    }\\n\\n    return CustomEventTarget\\n}\\n\\n/**\\n * EventTarget.\\n *\\n * - This is constructor if no arguments.\\n * - This is a function which returns a CustomEventTarget constructor if there are arguments.\\n *\\n * For example:\\n *\\n *     class A extends EventTarget {}\\n *     class B extends EventTarget(\\\"message\\\") {}\\n *     class C extends EventTarget(\\\"message\\\", \\\"error\\\") {}\\n *     class D extends EventTarget([\\\"message\\\", \\\"error\\\"]) {}\\n */\\nfunction EventTarget() {\\n    /*eslint-disable consistent-return */\\n    if (this instanceof EventTarget) {\\n        listenersMap.set(this, new Map())\\n        return\\n    }\\n    if (arguments.length === 1 && Array.isArray(arguments[0])) {\\n        return defineCustomEventTarget(arguments[0])\\n    }\\n    if (arguments.length > 0) {\\n        const types = new Array(arguments.length)\\n        for (let i = 0; i < arguments.length; ++i) {\\n            types[i] = arguments[i]\\n        }\\n        return defineCustomEventTarget(types)\\n    }\\n    throw new TypeError(\\\"Cannot call a class as a function\\\")\\n    /*eslint-enable consistent-return */\\n}\\n\\n// Should be enumerable, but class methods are not enumerable.\\nEventTarget.prototype = {\\n    /**\\n     * Add a given listener to this event target.\\n     * @param {string} eventName The event name to add.\\n     * @param {Function} listener The listener to add.\\n     * @param {boolean|{capture?:boolean,passive?:boolean,once?:boolean}} [options] The options for this listener.\\n     * @returns {void}\\n     */\\n    addEventListener(eventName, listener, options) {\\n        if (listener == null) {\\n            return\\n        }\\n        if (typeof listener !== \\\"function\\\" && !isObject(listener)) {\\n            throw new TypeError(\\\"'listener' should be a function or an object.\\\")\\n        }\\n\\n        const listeners = getListeners(this)\\n        const optionsIsObj = isObject(options)\\n        const capture = optionsIsObj\\n            ? Boolean(options.capture)\\n            : Boolean(options)\\n        const listenerType = capture ? CAPTURE : BUBBLE\\n        const newNode = {\\n            listener,\\n            listenerType,\\n            passive: optionsIsObj && Boolean(options.passive),\\n            once: optionsIsObj && Boolean(options.once),\\n            next: null,\\n        }\\n\\n        // Set it as the first node if the first node is null.\\n        let node = listeners.get(eventName)\\n        if (node === undefined) {\\n            listeners.set(eventName, newNode)\\n            return\\n        }\\n\\n        // Traverse to the tail while checking duplication..\\n        let prev = null\\n        while (node != null) {\\n            if (\\n                node.listener === listener &&\\n                node.listenerType === listenerType\\n            ) {\\n                // Should ignore duplication.\\n                return\\n            }\\n            prev = node\\n            node = node.next\\n        }\\n\\n        // Add it.\\n        prev.next = newNode\\n    },\\n\\n    /**\\n     * Remove a given listener from this event target.\\n     * @param {string} eventName The event name to remove.\\n     * @param {Function} listener The listener to remove.\\n     * @param {boolean|{capture?:boolean,passive?:boolean,once?:boolean}} [options] The options for this listener.\\n     * @returns {void}\\n     */\\n    removeEventListener(eventName, listener, options) {\\n        if (listener == null) {\\n            return\\n        }\\n\\n        const listeners = getListeners(this)\\n        const capture = isObject(options)\\n            ? Boolean(options.capture)\\n            : Boolean(options)\\n        const listenerType = capture ? CAPTURE : BUBBLE\\n\\n        let prev = null\\n        let node = listeners.get(eventName)\\n        while (node != null) {\\n            if (\\n                node.listener === listener &&\\n                node.listenerType === listenerType\\n            ) {\\n                if (prev !== null) {\\n                    prev.next = node.next\\n                } else if (node.next !== null) {\\n                    listeners.set(eventName, node.next)\\n                } else {\\n                    listeners.delete(eventName)\\n                }\\n                return\\n            }\\n\\n            prev = node\\n            node = node.next\\n        }\\n    },\\n\\n    /**\\n     * Dispatch a given event.\\n     * @param {Event|{type:string}} event The event to dispatch.\\n     * @returns {boolean} `false` if canceled.\\n     */\\n    dispatchEvent(event) {\\n        if (event == null || typeof event.type !== \\\"string\\\") {\\n            throw new TypeError('\\\"event.type\\\" should be a string.')\\n        }\\n\\n        // If listeners aren't registered, terminate.\\n        const listeners = getListeners(this)\\n        const eventName = event.type\\n        let node = listeners.get(eventName)\\n        if (node == null) {\\n            return true\\n        }\\n\\n        // Since we cannot rewrite several properties, so wrap object.\\n        const wrappedEvent = wrapEvent(this, event)\\n\\n        // This doesn't process capturing phase and bubbling phase.\\n        // This isn't participating in a tree.\\n        let prev = null\\n        while (node != null) {\\n            // Remove this listener if it's once\\n            if (node.once) {\\n                if (prev !== null) {\\n                    prev.next = node.next\\n                } else if (node.next !== null) {\\n                    listeners.set(eventName, node.next)\\n                } else {\\n                    listeners.delete(eventName)\\n                }\\n            } else {\\n                prev = node\\n            }\\n\\n            // Call this listener\\n            setPassiveListener(\\n                wrappedEvent,\\n                node.passive ? node.listener : null\\n            )\\n            if (typeof node.listener === \\\"function\\\") {\\n                try {\\n                    node.listener.call(this, wrappedEvent)\\n                } catch (err) {\\n                    if (\\n                        typeof console !== \\\"undefined\\\" &&\\n                        typeof console.error === \\\"function\\\"\\n                    ) {\\n                        console.error(err)\\n                    }\\n                }\\n            } else if (\\n                node.listenerType !== ATTRIBUTE &&\\n                typeof node.listener.handleEvent === \\\"function\\\"\\n            ) {\\n                node.listener.handleEvent(wrappedEvent)\\n            }\\n\\n            // Break if `event.stopImmediatePropagation` was called.\\n            if (isStopped(wrappedEvent)) {\\n                break\\n            }\\n\\n            node = node.next\\n        }\\n        setPassiveListener(wrappedEvent, null)\\n        setEventPhase(wrappedEvent, 0)\\n        setCurrentTarget(wrappedEvent, null)\\n\\n        return !wrappedEvent.defaultPrevented\\n    },\\n}\\n\\n// `constructor` is not enumerable.\\nObject.defineProperty(EventTarget.prototype, \\\"constructor\\\", {\\n    value: EventTarget,\\n    configurable: true,\\n    writable: true,\\n})\\n\\n// Ensure `eventTarget instanceof window.EventTarget` is `true`.\\nif (\\n    typeof window !== \\\"undefined\\\" &&\\n    typeof window.EventTarget !== \\\"undefined\\\"\\n) {\\n    Object.setPrototypeOf(EventTarget.prototype, window.EventTarget.prototype)\\n}\\n\\nexport { defineEventAttribute, EventTarget }\\nexport default EventTarget\\n\"],\"names\":[],\"mappings\":\";;;;;AAAA;;;;;;;;;;;;;;;;;;;AAmBA,MAAM,WAAW,GAAG,IAAI,OAAO,GAAE;;;;;;;AAOjC,MAAM,QAAQ,GAAG,IAAI,OAAO,GAAE;;;;;;;;AAQ9B,SAAS,EAAE,CAAC,KAAK,EAAE;IACf,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,EAAC;IACnC,OAAO,CAAC,MAAM;QACV,IAAI,IAAI,IAAI;QACZ,6CAA6C;QAC7C,KAAK;MACR;IACD,OAAO,IAAI;CACd;;;;;;AAMD,SAAS,aAAa,CAAC,IAAI,EAAE;IACzB,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,EAAE;QAC9B;YACI,OAAO,OAAO,KAAK,WAAW;YAC9B,OAAO,OAAO,CAAC,KAAK,KAAK,UAAU;UACrC;YACE,OAAO,CAAC,KAAK;gBACT,oEAAoE;gBACpE,IAAI,CAAC,eAAe;cACvB;SACJ;QACD,MAAM;KACT;IACD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE;QACxB,MAAM;KACT;;IAED,IAAI,CAAC,QAAQ,GAAG,KAAI;IACpB,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,cAAc,KAAK,UAAU,EAAE;QACjD,IAAI,CAAC,KAAK,CAAC,cAAc,GAAE;KAC9B;CACJ;;;;;;;;;;;;AAYD,SAAS,KAAK,CAAC,WAAW,EAAE,KAAK,EAAE;IAC/B,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE;QAClB,WAAW;QACX,KAAK;QACL,UAAU,EAAE,CAAC;QACb,aAAa,EAAE,WAAW;QAC1B,QAAQ,EAAE,KAAK;QACf,OAAO,EAAE,KAAK;QACd,gBAAgB,EAAE,KAAK;QACvB,eAAe,EAAE,IAAI;QACrB,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE;KAC3C,EAAC;;;IAGF,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,EAAC;;;IAG5E,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,EAAC;IAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;QAClC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,EAAC;QACnB,IAAI,EAAE,GAAG,IAAI,IAAI,CAAC,EAAE;YAChB,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,EAAE,wBAAwB,CAAC,GAAG,CAAC,EAAC;SAClE;KACJ;CACJ;;;AAGD,KAAK,CAAC,SAAS,GAAG;;;;;IAKd,IAAI,IAAI,GAAG;QACP,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI;KAC7B;;;;;;IAMD,IAAI,MAAM,GAAG;QACT,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,WAAW;KAC9B;;;;;;IAMD,IAAI,aAAa,GAAG;QAChB,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,aAAa;KAChC;;;;;IAKD,YAAY,GAAG;QACX,MAAM,aAAa,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,cAAa;QAC5C,IAAI,aAAa,IAAI,IAAI,EAAE;YACvB,OAAO,EAAE;SACZ;QACD,OAAO,CAAC,aAAa,CAAC;KACzB;;;;;;IAMD,IAAI,IAAI,GAAG;QACP,OAAO,CAAC;KACX;;;;;;IAMD,IAAI,eAAe,GAAG;QAClB,OAAO,CAAC;KACX;;;;;;IAMD,IAAI,SAAS,GAAG;QACZ,OAAO,CAAC;KACX;;;;;;IAMD,IAAI,cAAc,GAAG;QACjB,OAAO,CAAC;KACX;;;;;;IAMD,IAAI,UAAU,GAAG;QACb,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,UAAU;KAC7B;;;;;;IAMD,eAAe,GAAG;QACd,MAAM,IAAI,GAAG,EAAE,CAAC,IAAI,EAAC;;QAErB,IAAI,CAAC,OAAO,GAAG,KAAI;QACnB,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,eAAe,KAAK,UAAU,EAAE;YAClD,IAAI,CAAC,KAAK,CAAC,eAAe,GAAE;SAC/B;KACJ;;;;;;IAMD,wBAAwB,GAAG;QACvB,MAAM,IAAI,GAAG,EAAE,CAAC,IAAI,EAAC;;QAErB,IAAI,CAAC,OAAO,GAAG,KAAI;QACnB,IAAI,CAAC,gBAAgB,GAAG,KAAI;QAC5B,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,wBAAwB,KAAK,UAAU,EAAE;YAC3D,IAAI,CAAC,KAAK,CAAC,wBAAwB,GAAE;SACxC;KACJ;;;;;;IAMD,IAAI,OAAO,GAAG;QACV,OAAO,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC;KACzC;;;;;;IAMD,IAAI,UAAU,GAAG;QACb,OAAO,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC;KAC5C;;;;;;IAMD,cAAc,GAAG;QACb,aAAa,CAAC,EAAE,CAAC,IAAI,CAAC,EAAC;KAC1B;;;;;;IAMD,IAAI,gBAAgB,GAAG;QACnB,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,QAAQ;KAC3B;;;;;;IAMD,IAAI,QAAQ,GAAG;QACX,OAAO,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC;KAC1C;;;;;;IAMD,IAAI,SAAS,GAAG;QACZ,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,SAAS;KAC5B;;;;;;;IAOD,IAAI,UAAU,GAAG;QACb,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,WAAW;KAC9B;;;;;;;IAOD,IAAI,YAAY,GAAG;QACf,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,OAAO;KAC1B;IACD,IAAI,YAAY,CAAC,KAAK,EAAE;QACpB,IAAI,CAAC,KAAK,EAAE;YACR,MAAM;SACT;QACD,MAAM,IAAI,GAAG,EAAE,CAAC,IAAI,EAAC;;QAErB,IAAI,CAAC,OAAO,GAAG,KAAI;QACnB,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,KAAK,SAAS,EAAE;YAC9C,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,KAAI;SACjC;KACJ;;;;;;;IAOD,IAAI,WAAW,GAAG;QACd,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,QAAQ;KAC5B;IACD,IAAI,WAAW,CAAC,KAAK,EAAE;QACnB,IAAI,CAAC,KAAK,EAAE;YACR,aAAa,CAAC,EAAE,CAAC,IAAI,CAAC,EAAC;SAC1B;KACJ;;;;;;;;;IASD,SAAS,GAAG;;KAEX;EACJ;;;AAGD,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,SAAS,EAAE,aAAa,EAAE;IAClD,KAAK,EAAE,KAAK;IACZ,YAAY,EAAE,IAAI;IAClB,QAAQ,EAAE,IAAI;CACjB,EAAC;;;AAGF,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,WAAW,EAAE;IACtE,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS,EAAC;;;IAG9D,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,EAAC;CAC9C;;;;;;;;AAQD,SAAS,wBAAwB,CAAC,GAAG,EAAE;IACnC,OAAO;QACH,GAAG,GAAG;YACF,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;SAC7B;QACD,GAAG,CAAC,KAAK,EAAE;YACP,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,MAAK;SAC9B;QACD,YAAY,EAAE,IAAI;QAClB,UAAU,EAAE,IAAI;KACnB;CACJ;;;;;;;;AAQD,SAAS,oBAAoB,CAAC,GAAG,EAAE;IAC/B,OAAO;QACH,KAAK,GAAG;YACJ,MAAM,KAAK,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,MAAK;YAC5B,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC;SAC5C;QACD,YAAY,EAAE,IAAI;QAClB,UAAU,EAAE,IAAI;KACnB;CACJ;;;;;;;;;AASD,SAAS,aAAa,CAAC,SAAS,EAAE,KAAK,EAAE;IACrC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,EAAC;IAC/B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;QACnB,OAAO,SAAS;KACnB;;;IAGD,SAAS,WAAW,CAAC,WAAW,EAAE,KAAK,EAAE;QACrC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAC;KAC3C;;IAED,WAAW,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,EAAE;QACvD,WAAW,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE;KAC1E,EAAC;;;IAGF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;QAClC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,EAAC;QACnB,IAAI,EAAE,GAAG,IAAI,SAAS,CAAC,SAAS,CAAC,EAAE;YAC/B,MAAM,UAAU,GAAG,MAAM,CAAC,wBAAwB,CAAC,KAAK,EAAE,GAAG,EAAC;YAC9D,MAAM,MAAM,GAAG,OAAO,UAAU,CAAC,KAAK,KAAK,WAAU;YACrD,MAAM,CAAC,cAAc;gBACjB,WAAW,CAAC,SAAS;gBACrB,GAAG;gBACH,MAAM;sBACA,oBAAoB,CAAC,GAAG,CAAC;sBACzB,wBAAwB,CAAC,GAAG,CAAC;cACtC;SACJ;KACJ;;IAED,OAAO,WAAW;CACrB;;;;;;;;AAQD,SAAS,UAAU,CAAC,KAAK,EAAE;IACvB,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,MAAM,CAAC,SAAS,EAAE;QAC7C,OAAO,KAAK;KACf;;IAED,IAAI,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAC;IACjC,IAAI,OAAO,IAAI,IAAI,EAAE;QACjB,OAAO,GAAG,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,EAAC;QACxE,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAC;KAC/B;IACD,OAAO,OAAO;CACjB;;;;;;;;;AASD,AAAO,SAAS,SAAS,CAAC,WAAW,EAAE,KAAK,EAAE;IAC1C,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,EAAC;IACxD,OAAO,IAAI,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC;CACzC;;;;;;;;AAQD,AAAO,SAAS,SAAS,CAAC,KAAK,EAAE;IAC7B,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC,gBAAgB;CACpC;;;;;;;;;AASD,AAAO,SAAS,aAAa,CAAC,KAAK,EAAE,UAAU,EAAE;IAC7C,EAAE,CAAC,KAAK,CAAC,CAAC,UAAU,GAAG,WAAU;CACpC;;;;;;;;;AASD,AAAO,SAAS,gBAAgB,CAAC,KAAK,EAAE,aAAa,EAAE;IACnD,EAAE,CAAC,KAAK,CAAC,CAAC,aAAa,GAAG,cAAa;CAC1C;;;;;;;;;AASD,AAAO,SAAS,kBAAkB,CAAC,KAAK,EAAE,eAAe,EAAE;IACvD,EAAE,CAAC,KAAK,CAAC,CAAC,eAAe,GAAG,gBAAe;CAC9C;;ACtdD;;;;;;;;;;;;;;AAcA,MAAM,YAAY,GAAG,IAAI,OAAO,GAAE;;;AAGlC,MAAM,OAAO,GAAG,EAAC;AACjB,MAAM,MAAM,GAAG,EAAC;AAChB,MAAM,SAAS,GAAG,EAAC;;;;;;;AAOnB,SAAS,QAAQ,CAAC,CAAC,EAAE;IACjB,OAAO,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,KAAK,QAAQ;CAC7C;;;;;;;;AAQD,SAAS,YAAY,CAAC,WAAW,EAAE;IAC/B,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,CAAC,WAAW,EAAC;IAC/C,IAAI,SAAS,IAAI,IAAI,EAAE;QACnB,MAAM,IAAI,SAAS;YACf,kEAAkE;SACrE;KACJ;IACD,OAAO,SAAS;CACnB;;;;;;;;AAQD,SAAS,8BAA8B,CAAC,SAAS,EAAE;IAC/C,OAAO;QACH,GAAG,GAAG;YACF,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,EAAC;YACpC,IAAI,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,SAAS,EAAC;YACnC,OAAO,IAAI,IAAI,IAAI,EAAE;gBACjB,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,EAAE;oBACjC,OAAO,IAAI,CAAC,QAAQ;iBACvB;gBACD,IAAI,GAAG,IAAI,CAAC,KAAI;aACnB;YACD,OAAO,IAAI;SACd;;QAED,GAAG,CAAC,QAAQ,EAAE;YACV,IAAI,OAAO,QAAQ,KAAK,UAAU,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;gBACvD,QAAQ,GAAG,KAAI;aAClB;YACD,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,EAAC;;;YAGpC,IAAI,IAAI,GAAG,KAAI;YACf,IAAI,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,SAAS,EAAC;YACnC,OAAO,IAAI,IAAI,IAAI,EAAE;gBACjB,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,EAAE;;oBAEjC,IAAI,IAAI,KAAK,IAAI,EAAE;wBACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAI;qBACxB,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE;wBAC3B,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,EAAC;qBACtC,MAAM;wBACH,SAAS,CAAC,MAAM,CAAC,SAAS,EAAC;qBAC9B;iBACJ,MAAM;oBACH,IAAI,GAAG,KAAI;iBACd;;gBAED,IAAI,GAAG,IAAI,CAAC,KAAI;aACnB;;;YAGD,IAAI,QAAQ,KAAK,IAAI,EAAE;gBACnB,MAAM,OAAO,GAAG;oBACZ,QAAQ;oBACR,YAAY,EAAE,SAAS;oBACvB,OAAO,EAAE,KAAK;oBACd,IAAI,EAAE,KAAK;oBACX,IAAI,EAAE,IAAI;kBACb;gBACD,IAAI,IAAI,KAAK,IAAI,EAAE;oBACf,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,EAAC;iBACpC,MAAM;oBACH,IAAI,CAAC,IAAI,GAAG,QAAO;iBACtB;aACJ;SACJ;QACD,YAAY,EAAE,IAAI;QAClB,UAAU,EAAE,IAAI;KACnB;CACJ;;;;;;;;AAQD,SAAS,oBAAoB,CAAC,oBAAoB,EAAE,SAAS,EAAE;IAC3D,MAAM,CAAC,cAAc;QACjB,oBAAoB;QACpB,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;QAChB,8BAA8B,CAAC,SAAS,CAAC;MAC5C;CACJ;;;;;;;;AAQD,SAAS,uBAAuB,CAAC,UAAU,EAAE;;IAEzC,SAAS,iBAAiB,GAAG;QACzB,WAAW,CAAC,IAAI,CAAC,IAAI,EAAC;KACzB;;IAED,iBAAiB,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE;QAC/D,WAAW,EAAE;YACT,KAAK,EAAE,iBAAiB;YACxB,YAAY,EAAE,IAAI;YAClB,QAAQ,EAAE,IAAI;SACjB;KACJ,EAAC;;IAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;QACxC,oBAAoB,CAAC,iBAAiB,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,EAAC;KACnE;;IAED,OAAO,iBAAiB;CAC3B;;;;;;;;;;;;;;;AAeD,SAAS,WAAW,GAAG;;IAEnB,IAAI,IAAI,YAAY,WAAW,EAAE;QAC7B,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,GAAG,EAAE,EAAC;QACjC,MAAM;KACT;IACD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE;QACvD,OAAO,uBAAuB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;KAC/C;IACD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;QACtB,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,EAAC;QACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;YACvC,KAAK,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,EAAC;SAC1B;QACD,OAAO,uBAAuB,CAAC,KAAK,CAAC;KACxC;IACD,MAAM,IAAI,SAAS,CAAC,mCAAmC,CAAC;;CAE3D;;;AAGD,WAAW,CAAC,SAAS,GAAG;;;;;;;;IAQpB,gBAAgB,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE;QAC3C,IAAI,QAAQ,IAAI,IAAI,EAAE;YAClB,MAAM;SACT;QACD,IAAI,OAAO,QAAQ,KAAK,UAAU,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;YACvD,MAAM,IAAI,SAAS,CAAC,+CAA+C,CAAC;SACvE;;QAED,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,EAAC;QACpC,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,EAAC;QACtC,MAAM,OAAO,GAAG,YAAY;cACtB,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;cACxB,OAAO,CAAC,OAAO,EAAC;QACtB,MAAM,YAAY,GAAG,OAAO,GAAG,OAAO,GAAG,OAAM;QAC/C,MAAM,OAAO,GAAG;YACZ,QAAQ;YACR,YAAY;YACZ,OAAO,EAAE,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;YACjD,IAAI,EAAE,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;YAC3C,IAAI,EAAE,IAAI;UACb;;;QAGD,IAAI,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,SAAS,EAAC;QACnC,IAAI,IAAI,KAAK,SAAS,EAAE;YACpB,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,EAAC;YACjC,MAAM;SACT;;;QAGD,IAAI,IAAI,GAAG,KAAI;QACf,OAAO,IAAI,IAAI,IAAI,EAAE;YACjB;gBACI,IAAI,CAAC,QAAQ,KAAK,QAAQ;gBAC1B,IAAI,CAAC,YAAY,KAAK,YAAY;cACpC;;gBAEE,MAAM;aACT;YACD,IAAI,GAAG,KAAI;YACX,IAAI,GAAG,IAAI,CAAC,KAAI;SACnB;;;QAGD,IAAI,CAAC,IAAI,GAAG,QAAO;KACtB;;;;;;;;;IASD,mBAAmB,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE;QAC9C,IAAI,QAAQ,IAAI,IAAI,EAAE;YAClB,MAAM;SACT;;QAED,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,EAAC;QACpC,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;cAC3B,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;cACxB,OAAO,CAAC,OAAO,EAAC;QACtB,MAAM,YAAY,GAAG,OAAO,GAAG,OAAO,GAAG,OAAM;;QAE/C,IAAI,IAAI,GAAG,KAAI;QACf,IAAI,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,SAAS,EAAC;QACnC,OAAO,IAAI,IAAI,IAAI,EAAE;YACjB;gBACI,IAAI,CAAC,QAAQ,KAAK,QAAQ;gBAC1B,IAAI,CAAC,YAAY,KAAK,YAAY;cACpC;gBACE,IAAI,IAAI,KAAK,IAAI,EAAE;oBACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAI;iBACxB,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE;oBAC3B,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,EAAC;iBACtC,MAAM;oBACH,SAAS,CAAC,MAAM,CAAC,SAAS,EAAC;iBAC9B;gBACD,MAAM;aACT;;YAED,IAAI,GAAG,KAAI;YACX,IAAI,GAAG,IAAI,CAAC,KAAI;SACnB;KACJ;;;;;;;IAOD,aAAa,CAAC,KAAK,EAAE;QACjB,IAAI,KAAK,IAAI,IAAI,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE;YACjD,MAAM,IAAI,SAAS,CAAC,kCAAkC,CAAC;SAC1D;;;QAGD,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,EAAC;QACpC,MAAM,SAAS,GAAG,KAAK,CAAC,KAAI;QAC5B,IAAI,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,SAAS,EAAC;QACnC,IAAI,IAAI,IAAI,IAAI,EAAE;YACd,OAAO,IAAI;SACd;;;QAGD,MAAM,YAAY,GAAG,SAAS,CAAC,IAAI,EAAE,KAAK,EAAC;;;;QAI3C,IAAI,IAAI,GAAG,KAAI;QACf,OAAO,IAAI,IAAI,IAAI,EAAE;;YAEjB,IAAI,IAAI,CAAC,IAAI,EAAE;gBACX,IAAI,IAAI,KAAK,IAAI,EAAE;oBACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAI;iBACxB,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE;oBAC3B,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,EAAC;iBACtC,MAAM;oBACH,SAAS,CAAC,MAAM,CAAC,SAAS,EAAC;iBAC9B;aACJ,MAAM;gBACH,IAAI,GAAG,KAAI;aACd;;;YAGD,kBAAkB;gBACd,YAAY;gBACZ,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI;cACtC;YACD,IAAI,OAAO,IAAI,CAAC,QAAQ,KAAK,UAAU,EAAE;gBACrC,IAAI;oBACA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,EAAC;iBACzC,CAAC,OAAO,GAAG,EAAE;oBACV;wBACI,OAAO,OAAO,KAAK,WAAW;wBAC9B,OAAO,OAAO,CAAC,KAAK,KAAK,UAAU;sBACrC;wBACE,OAAO,CAAC,KAAK,CAAC,GAAG,EAAC;qBACrB;iBACJ;aACJ,MAAM;gBACH,IAAI,CAAC,YAAY,KAAK,SAAS;gBAC/B,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,KAAK,UAAU;cACjD;gBACE,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,YAAY,EAAC;aAC1C;;;YAGD,IAAI,SAAS,CAAC,YAAY,CAAC,EAAE;gBACzB,KAAK;aACR;;YAED,IAAI,GAAG,IAAI,CAAC,KAAI;SACnB;QACD,kBAAkB,CAAC,YAAY,EAAE,IAAI,EAAC;QACtC,aAAa,CAAC,YAAY,EAAE,CAAC,EAAC;QAC9B,gBAAgB,CAAC,YAAY,EAAE,IAAI,EAAC;;QAEpC,OAAO,CAAC,YAAY,CAAC,gBAAgB;KACxC;EACJ;;;AAGD,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,SAAS,EAAE,aAAa,EAAE;IACxD,KAAK,EAAE,WAAW;IAClB,YAAY,EAAE,IAAI;IAClB,QAAQ,EAAE,IAAI;CACjB,EAAC;;;AAGF;IACI,OAAO,MAAM,KAAK,WAAW;IAC7B,OAAO,MAAM,CAAC,WAAW,KAAK,WAAW;EAC3C;IACE,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC,SAAS,EAAC;CAC7E;;;;;\"}/index.d.ts*\u0005export as namespace EventTargetShim\n\n/**\n * `Event` interface.\n * @see https://dom.spec.whatwg.org/#event\n */\nexport interface Event {\n    /**\n     * The type of this event.\n     */\n    readonly type: string\n\n    /**\n     * The target of this event.\n     */\n    readonly target: EventTarget<{}, {}, \"standard\"> | null\n\n    /**\n     * The current target of this event.\n     */\n    readonly currentTarget: EventTarget<{}, {}, \"standard\"> | null\n\n    /**\n     * The target of this event.\n     * @deprecated\n     */\n    readonly srcElement: any | null\n\n    /**\n     * The composed path of this event.\n     */\n    composedPath(): EventTarget<{}, {}, \"standard\">[]\n\n    /**\n     * Constant of NONE.\n     */\n    readonly NONE: number\n\n    /**\n     * Constant of CAPTURING_PHASE.\n     */\n    readonly CAPTURING_PHASE: number\n\n    /**\n     * Constant of BUBBLING_PHASE.\n     */\n    readonly BUBBLING_PHASE: number\n\n    /**\n     * Constant of AT_TARGET.\n     */\n    readonly AT_TARGET: number\n\n    /**\n     * Indicates which phase of the event flow is currently being evaluated.\n     */\n    readonly eventPhase: number\n\n    /**\n     * Stop event bubbling.\n     */\n    stopPropagation(): void\n\n    /**\n     * Stop event bubbling.\n     */\n    stopImmediatePropagation(): void\n\n    /**\n     * Initialize event.\n     * @deprecated\n     */\n    initEvent(type: string, bubbles?: boolean, cancelable?: boolean): void\n\n    /**\n     * The flag indicating bubbling.\n     */\n    readonly bubbles: boolean\n\n    /**\n     * Stop event bubbling.\n     * @deprecated\n     */\n    cancelBubble: boolean\n\n    /**\n     * Set or get cancellation flag.\n     * @deprecated\n     */\n    returnValue: boolean\n\n    /**\n     * The flag indicating whether the event can be canceled.\n     */\n    readonly cancelable: boolean\n\n    /**\n     * Cancel this event.\n     */\n    preventDefault(): void\n\n    /**\n     * The flag to indicating whether the event was canceled.\n     */\n    readonly defaultPrevented: boolean\n\n    /**\n     * The flag to indicating if event is composed.\n     */\n    readonly composed: boolean\n\n    /**\n     * Indicates whether the event was dispatched by the user agent.\n     */\n    readonly isTrusted: boolean\n\n    /**\n     * The unix time of this event.\n     */\n    readonly timeStamp: number\n}\n\n/**\n * The constructor of `EventTarget` interface.\n */\nexport type EventTargetConstructor<\n    TEvents extends EventTarget.EventDefinition = {},\n    TEventAttributes extends EventTarget.EventDefinition = {},\n    TMode extends EventTarget.Mode = \"loose\"\n> = {\n    prototype: EventTarget<TEvents, TEventAttributes, TMode>\n    new(): EventTarget<TEvents, TEventAttributes, TMode>\n}\n\n/**\n * `EventTarget` interface.\n * @see https://dom.spec.whatwg.org/#interface-eventtarget\n */\nexport type EventTarget<\n    TEvents extends EventTarget.EventDefinition = {},\n    TEventAttributes extends EventTarget.EventDefinition = {},\n    TMode extends EventTarget.Mode = \"loose\"\n> = EventTarget.EventAttributes<TEventAttributes> & {\n    /**\n     * Add a given listener to this event target.\n     * @param eventName The event name to add.\n     * @param listener The listener to add.\n     * @param options The options for this listener.\n     */\n    addEventListener<TEventType extends EventTarget.EventType<TEvents, TMode>>(\n        type: TEventType,\n        listener:\n            | EventTarget.Listener<EventTarget.PickEvent<TEvents, TEventType>>\n            | null,\n        options?: boolean | EventTarget.AddOptions\n    ): void\n\n    /**\n     * Remove a given listener from this event target.\n     * @param eventName The event name to remove.\n     * @param listener The listener to remove.\n     * @param options The options for this listener.\n     */\n    removeEventListener<TEventType extends EventTarget.EventType<TEvents, TMode>>(\n        type: TEventType,\n        listener:\n            | EventTarget.Listener<EventTarget.PickEvent<TEvents, TEventType>>\n            | null,\n        options?: boolean | EventTarget.RemoveOptions\n    ): void\n\n    /**\n     * Dispatch a given event.\n     * @param event The event to dispatch.\n     * @returns `false` if canceled.\n     */\n    dispatchEvent<TEventType extends EventTarget.EventType<TEvents, TMode>>(\n        event: EventTarget.EventData<TEvents, TEventType, TMode>\n    ): boolean\n}\n\nexport const EventTarget: EventTargetConstructor & {\n    /**\n     * Create an `EventTarget` instance with detailed event definition.\n     *\n     * The detailed event definition requires to use `defineEventAttribute()`\n     * function later.\n     *\n     * Unfortunately, the second type parameter `TEventAttributes` was needed\n     * because we cannot compute string literal types.\n     *\n     * @example\n     * const signal = new EventTarget<{ abort: Event }, { onabort: Event }>()\n     * defineEventAttribute(signal, \"abort\")\n     */\n    new <\n        TEvents extends EventTarget.EventDefinition,\n        TEventAttributes extends EventTarget.EventDefinition,\n        TMode extends EventTarget.Mode = \"loose\"\n    >(): EventTarget<TEvents, TEventAttributes, TMode>\n\n    /**\n     * Define an `EventTarget` constructor with attribute events and detailed event definition.\n     *\n     * Unfortunately, the second type parameter `TEventAttributes` was needed\n     * because we cannot compute string literal types.\n     *\n     * @example\n     * class AbortSignal extends EventTarget<{ abort: Event }, { onabort: Event }>(\"abort\") {\n     *      abort(): void {}\n     * }\n     *\n     * @param events Optional event attributes (e.g. passing in `\"click\"` adds `onclick` to prototype).\n     */\n    <\n        TEvents extends EventTarget.EventDefinition = {},\n        TEventAttributes extends EventTarget.EventDefinition = {},\n        TMode extends EventTarget.Mode = \"loose\"\n    >(events: string[]): EventTargetConstructor<\n        TEvents,\n        TEventAttributes,\n        TMode\n    >\n\n    /**\n     * Define an `EventTarget` constructor with attribute events and detailed event definition.\n     *\n     * Unfortunately, the second type parameter `TEventAttributes` was needed\n     * because we cannot compute string literal types.\n     *\n     * @example\n     * class AbortSignal extends EventTarget<{ abort: Event }, { onabort: Event }>(\"abort\") {\n     *      abort(): void {}\n     * }\n     *\n     * @param events Optional event attributes (e.g. passing in `\"click\"` adds `onclick` to prototype).\n     */\n    <\n        TEvents extends EventTarget.EventDefinition = {},\n        TEventAttributes extends EventTarget.EventDefinition = {},\n        TMode extends EventTarget.Mode = \"loose\"\n    >(event0: string, ...events: string[]): EventTargetConstructor<\n        TEvents,\n        TEventAttributes,\n        TMode\n    >\n}\n\nexport namespace EventTarget {\n    /**\n     * Options of `removeEventListener()` method.\n     */\n    export interface RemoveOptions {\n        /**\n         * The flag to indicate that the listener is for the capturing phase.\n         */\n        capture?: boolean\n    }\n\n    /**\n     * Options of `addEventListener()` method.\n     */\n    export interface AddOptions extends RemoveOptions {\n        /**\n         * The flag to indicate that the listener doesn't support\n         * `event.preventDefault()` operation.\n         */\n        passive?: boolean\n        /**\n         * The flag to indicate that the listener will be removed on the first\n         * event.\n         */\n        once?: boolean\n    }\n\n    /**\n     * The type of regular listeners.\n     */\n    export interface FunctionListener<TEvent> {\n        (event: TEvent): void\n    }\n\n    /**\n     * The type of object listeners.\n     */\n    export interface ObjectListener<TEvent> {\n        handleEvent(event: TEvent): void\n    }\n\n    /**\n     * The type of listeners.\n     */\n    export type Listener<TEvent> =\n        | FunctionListener<TEvent>\n        | ObjectListener<TEvent>\n\n    /**\n     * Event definition.\n     */\n    export type EventDefinition = {\n        readonly [key: string]: Event\n    }\n\n    /**\n     * Mapped type for event attributes.\n     */\n    export type EventAttributes<TEventAttributes extends EventDefinition> = {\n        [P in keyof TEventAttributes]:\n            | FunctionListener<TEventAttributes[P]>\n            | null\n    }\n\n    /**\n     * The type of event data for `dispatchEvent()` method.\n     */\n    export type EventData<\n        TEvents extends EventDefinition,\n        TEventType extends keyof TEvents | string,\n        TMode extends Mode\n    > =\n        TEventType extends keyof TEvents\n            ? (\n                // Require properties which are not generated automatically.\n                & Pick<\n                    TEvents[TEventType],\n                    Exclude<keyof TEvents[TEventType], OmittableEventKeys>\n                >\n                // Properties which are generated automatically are optional.\n                & Partial<Pick<Event, OmittableEventKeys>>\n            )\n            : (\n                TMode extends \"standard\"\n                    ? Event\n                    : Event | NonStandardEvent\n            )\n\n    /**\n     * The string literal types of the properties which are generated\n     * automatically in `dispatchEvent()` method.\n     */\n    export type OmittableEventKeys = Exclude<keyof Event, \"type\">\n\n    /**\n     * The type of event data.\n     */\n    export type NonStandardEvent = {\n        [key: string]: any\n        type: string\n    }\n\n    /**\n     * The type of listeners.\n     */\n    export type PickEvent<\n        TEvents extends EventDefinition,\n        TEventType extends keyof TEvents | string,\n    > =\n        TEventType extends keyof TEvents\n            ? TEvents[TEventType]\n            : Event\n\n    /**\n     * Event type candidates.\n     */\n    export type EventType<\n        TEvents extends EventDefinition,\n        TMode extends Mode\n    > =\n        TMode extends \"strict\"\n            ? keyof TEvents\n            : keyof TEvents | string\n\n    /**\n     * - `\"strict\"` ..... Methods don't accept unknown events.\n     *                    `dispatchEvent()` accepts partial objects.\n     * - `\"loose\"` ...... Methods accept unknown events.\n     *                    `dispatchEvent()` accepts partial objects.\n     * - `\"standard\"` ... Methods accept unknown events.\n     *                    `dispatchEvent()` doesn't accept partial objects.\n     */\n    export type Mode = \"strict\" | \"standard\" | \"loose\"\n}\n\n/**\n * Specialized `type` property.\n */\nexport type Type<T extends string> = { type: T }\n\n/**\n * Define an event attribute (e.g. `eventTarget.onclick`).\n * @param prototype The event target prototype to define an event attribute.\n * @param eventName The event name to define.\n */\nexport function defineEventAttribute(\n    prototype: EventTarget,\n    eventName: string\n): void\n\nexport default EventTarget\n/dist/event-target-shim.js\\/**\n * @author Toru Nagashima <https://github.com/mysticatea>\n * @copyright 2015 Toru Nagashima. All rights reserved.\n * See LICENSE file in root directory for full license.\n */\n'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n/**\n * @typedef {object} PrivateData\n * @property {EventTarget} eventTarget The event target.\n * @property {{type:string}} event The original event object.\n * @property {number} eventPhase The current event phase.\n * @property {EventTarget|null} currentTarget The current event target.\n * @property {boolean} canceled The flag to prevent default.\n * @property {boolean} stopped The flag to stop propagation.\n * @property {boolean} immediateStopped The flag to stop propagation immediately.\n * @property {Function|null} passiveListener The listener if the current listener is passive. Otherwise this is null.\n * @property {number} timeStamp The unix time.\n * @private\n */\n\n/**\n * Private data for event wrappers.\n * @type {WeakMap<Event, PrivateData>}\n * @private\n */\nconst privateData = new WeakMap();\n\n/**\n * Cache for wrapper classes.\n * @type {WeakMap<Object, Function>}\n * @private\n */\nconst wrappers = new WeakMap();\n\n/**\n * Get private data.\n * @param {Event} event The event object to get private data.\n * @returns {PrivateData} The private data of the event.\n * @private\n */\nfunction pd(event) {\n    const retv = privateData.get(event);\n    console.assert(\n        retv != null,\n        \"'this' is expected an Event object, but got\",\n        event\n    );\n    return retv\n}\n\n/**\n * https://dom.spec.whatwg.org/#set-the-canceled-flag\n * @param data {PrivateData} private data.\n */\nfunction setCancelFlag(data) {\n    if (data.passiveListener != null) {\n        if (\n            typeof console !== \"undefined\" &&\n            typeof console.error === \"function\"\n        ) {\n            console.error(\n                \"Unable to preventDefault inside passive event listener invocation.\",\n                data.passiveListener\n            );\n        }\n        return\n    }\n    if (!data.event.cancelable) {\n        return\n    }\n\n    data.canceled = true;\n    if (typeof data.event.preventDefault === \"function\") {\n        data.event.preventDefault();\n    }\n}\n\n/**\n * @see https://dom.spec.whatwg.org/#interface-event\n * @private\n */\n/**\n * The event wrapper.\n * @constructor\n * @param {EventTarget} eventTarget The event target of this dispatching.\n * @param {Event|{type:string}} event The original event to wrap.\n */\nfunction Event(eventTarget, event) {\n    privateData.set(this, {\n        eventTarget,\n        event,\n        eventPhase: 2,\n        currentTarget: eventTarget,\n        canceled: false,\n        stopped: false,\n        immediateStopped: false,\n        passiveListener: null,\n        timeStamp: event.timeStamp || Date.now(),\n    });\n\n    // https://heycam.github.io/webidl/#Unforgeable\n    Object.defineProperty(this, \"isTrusted\", { value: false, enumerable: true });\n\n    // Define accessors\n    const keys = Object.keys(event);\n    for (let i = 0; i < keys.length; ++i) {\n        const key = keys[i];\n        if (!(key in this)) {\n            Object.defineProperty(this, key, defineRedirectDescriptor(key));\n        }\n    }\n}\n\n// Should be enumerable, but class methods are not enumerable.\nEvent.prototype = {\n    /**\n     * The type of this event.\n     * @type {string}\n     */\n    get type() {\n        return pd(this).event.type\n    },\n\n    /**\n     * The target of this event.\n     * @type {EventTarget}\n     */\n    get target() {\n        return pd(this).eventTarget\n    },\n\n    /**\n     * The target of this event.\n     * @type {EventTarget}\n     */\n    get currentTarget() {\n        return pd(this).currentTarget\n    },\n\n    /**\n     * @returns {EventTarget[]} The composed path of this event.\n     */\n    composedPath() {\n        const currentTarget = pd(this).currentTarget;\n        if (currentTarget == null) {\n            return []\n        }\n        return [currentTarget]\n    },\n\n    /**\n     * Constant of NONE.\n     * @type {number}\n     */\n    get NONE() {\n        return 0\n    },\n\n    /**\n     * Constant of CAPTURING_PHASE.\n     * @type {number}\n     */\n    get CAPTURING_PHASE() {\n        return 1\n    },\n\n    /**\n     * Constant of AT_TARGET.\n     * @type {number}\n     */\n    get AT_TARGET() {\n        return 2\n    },\n\n    /**\n     * Constant of BUBBLING_PHASE.\n     * @type {number}\n     */\n    get BUBBLING_PHASE() {\n        return 3\n    },\n\n    /**\n     * The target of this event.\n     * @type {number}\n     */\n    get eventPhase() {\n        return pd(this).eventPhase\n    },\n\n    /**\n     * Stop event bubbling.\n     * @returns {void}\n     */\n    stopPropagation() {\n        const data = pd(this);\n\n        data.stopped = true;\n        if (typeof data.event.stopPropagation === \"function\") {\n            data.event.stopPropagation();\n        }\n    },\n\n    /**\n     * Stop event bubbling.\n     * @returns {void}\n     */\n    stopImmediatePropagation() {\n        const data = pd(this);\n\n        data.stopped = true;\n        data.immediateStopped = true;\n        if (typeof data.event.stopImmediatePropagation === \"function\") {\n            data.event.stopImmediatePropagation();\n        }\n    },\n\n    /**\n     * The flag to be bubbling.\n     * @type {boolean}\n     */\n    get bubbles() {\n        return Boolean(pd(this).event.bubbles)\n    },\n\n    /**\n     * The flag to be cancelable.\n     * @type {boolean}\n     */\n    get cancelable() {\n        return Boolean(pd(this).event.cancelable)\n    },\n\n    /**\n     * Cancel this event.\n     * @returns {void}\n     */\n    preventDefault() {\n        setCancelFlag(pd(this));\n    },\n\n    /**\n     * The flag to indicate cancellation state.\n     * @type {boolean}\n     */\n    get defaultPrevented() {\n        return pd(this).canceled\n    },\n\n    /**\n     * The flag to be composed.\n     * @type {boolean}\n     */\n    get composed() {\n        return Boolean(pd(this).event.composed)\n    },\n\n    /**\n     * The unix time of this event.\n     * @type {number}\n     */\n    get timeStamp() {\n        return pd(this).timeStamp\n    },\n\n    /**\n     * The target of this event.\n     * @type {EventTarget}\n     * @deprecated\n     */\n    get srcElement() {\n        return pd(this).eventTarget\n    },\n\n    /**\n     * The flag to stop event bubbling.\n     * @type {boolean}\n     * @deprecated\n     */\n    get cancelBubble() {\n        return pd(this).stopped\n    },\n    set cancelBubble(value) {\n        if (!value) {\n            return\n        }\n        const data = pd(this);\n\n        data.stopped = true;\n        if (typeof data.event.cancelBubble === \"boolean\") {\n            data.event.cancelBubble = true;\n        }\n    },\n\n    /**\n     * The flag to indicate cancellation state.\n     * @type {boolean}\n     * @deprecated\n     */\n    get returnValue() {\n        return !pd(this).canceled\n    },\n    set returnValue(value) {\n        if (!value) {\n            setCancelFlag(pd(this));\n        }\n    },\n\n    /**\n     * Initialize this event object. But do nothing under event dispatching.\n     * @param {string} type The event type.\n     * @param {boolean} [bubbles=false] The flag to be possible to bubble up.\n     * @param {boolean} [cancelable=false] The flag to be possible to cancel.\n     * @deprecated\n     */\n    initEvent() {\n        // Do nothing.\n    },\n};\n\n// `constructor` is not enumerable.\nObject.defineProperty(Event.prototype, \"constructor\", {\n    value: Event,\n    configurable: true,\n    writable: true,\n});\n\n// Ensure `event instanceof window.Event` is `true`.\nif (typeof window !== \"undefined\" && typeof window.Event !== \"undefined\") {\n    Object.setPrototypeOf(Event.prototype, window.Event.prototype);\n\n    // Make association for wrappers.\n    wrappers.set(window.Event.prototype, Event);\n}\n\n/**\n * Get the property descriptor to redirect a given property.\n * @param {string} key Property name to define property descriptor.\n * @returns {PropertyDescriptor} The property descriptor to redirect the property.\n * @private\n */\nfunction defineRedirectDescriptor(key) {\n    return {\n        get() {\n            return pd(this).event[key]\n        },\n        set(value) {\n            pd(this).event[key] = value;\n        },\n        configurable: true,\n        enumerable: true,\n    }\n}\n\n/**\n * Get the property descriptor to call a given method property.\n * @param {string} key Property name to define property descriptor.\n * @returns {PropertyDescriptor} The property descriptor to call the method property.\n * @private\n */\nfunction defineCallDescriptor(key) {\n    return {\n        value() {\n            const event = pd(this).event;\n            return event[key].apply(event, arguments)\n        },\n        configurable: true,\n        enumerable: true,\n    }\n}\n\n/**\n * Define new wrapper class.\n * @param {Function} BaseEvent The base wrapper class.\n * @param {Object} proto The prototype of the original event.\n * @returns {Function} The defined wrapper class.\n * @private\n */\nfunction defineWrapper(BaseEvent, proto) {\n    const keys = Object.keys(proto);\n    if (keys.length === 0) {\n        return BaseEvent\n    }\n\n    /** CustomEvent */\n    function CustomEvent(eventTarget, event) {\n        BaseEvent.call(this, eventTarget, event);\n    }\n\n    CustomEvent.prototype = Object.create(BaseEvent.prototype, {\n        constructor: { value: CustomEvent, configurable: true, writable: true },\n    });\n\n    // Define accessors.\n    for (let i = 0; i < keys.length; ++i) {\n        const key = keys[i];\n        if (!(key in BaseEvent.prototype)) {\n            const descriptor = Object.getOwnPropertyDescriptor(proto, key);\n            const isFunc = typeof descriptor.value === \"function\";\n            Object.defineProperty(\n                CustomEvent.prototype,\n                key,\n                isFunc\n                    ? defineCallDescriptor(key)\n                    : defineRedirectDescriptor(key)\n            );\n        }\n    }\n\n    return CustomEvent\n}\n\n/**\n * Get the wrapper class of a given prototype.\n * @param {Object} proto The prototype of the original event to get its wrapper.\n * @returns {Function} The wrapper class.\n * @private\n */\nfunction getWrapper(proto) {\n    if (proto == null || proto === Object.prototype) {\n        return Event\n    }\n\n    let wrapper = wrappers.get(proto);\n    if (wrapper == null) {\n        wrapper = defineWrapper(getWrapper(Object.getPrototypeOf(proto)), proto);\n        wrappers.set(proto, wrapper);\n    }\n    return wrapper\n}\n\n/**\n * Wrap a given event to management a dispatching.\n * @param {EventTarget} eventTarget The event target of this dispatching.\n * @param {Object} event The event to wrap.\n * @returns {Event} The wrapper instance.\n * @private\n */\nfunction wrapEvent(eventTarget, event) {\n    const Wrapper = getWrapper(Object.getPrototypeOf(event));\n    return new Wrapper(eventTarget, event)\n}\n\n/**\n * Get the immediateStopped flag of a given event.\n * @param {Event} event The event to get.\n * @returns {boolean} The flag to stop propagation immediately.\n * @private\n */\nfunction isStopped(event) {\n    return pd(event).immediateStopped\n}\n\n/**\n * Set the current event phase of a given event.\n * @param {Event} event The event to set current target.\n * @param {number} eventPhase New event phase.\n * @returns {void}\n * @private\n */\nfunction setEventPhase(event, eventPhase) {\n    pd(event).eventPhase = eventPhase;\n}\n\n/**\n * Set the current target of a given event.\n * @param {Event} event The event to set current target.\n * @param {EventTarget|null} currentTarget New current target.\n * @returns {void}\n * @private\n */\nfunction setCurrentTarget(event, currentTarget) {\n    pd(event).currentTarget = currentTarget;\n}\n\n/**\n * Set a passive listener of a given event.\n * @param {Event} event The event to set current target.\n * @param {Function|null} passiveListener New passive listener.\n * @returns {void}\n * @private\n */\nfunction setPassiveListener(event, passiveListener) {\n    pd(event).passiveListener = passiveListener;\n}\n\n/**\n * @typedef {object} ListenerNode\n * @property {Function} listener\n * @property {1|2|3} listenerType\n * @property {boolean} passive\n * @property {boolean} once\n * @property {ListenerNode|null} next\n * @private\n */\n\n/**\n * @type {WeakMap<object, Map<string, ListenerNode>>}\n * @private\n */\nconst listenersMap = new WeakMap();\n\n// Listener types\nconst CAPTURE = 1;\nconst BUBBLE = 2;\nconst ATTRIBUTE = 3;\n\n/**\n * Check whether a given value is an object or not.\n * @param {any} x The value to check.\n * @returns {boolean} `true` if the value is an object.\n */\nfunction isObject(x) {\n    return x !== null && typeof x === \"object\" //eslint-disable-line no-restricted-syntax\n}\n\n/**\n * Get listeners.\n * @param {EventTarget} eventTarget The event target to get.\n * @returns {Map<string, ListenerNode>} The listeners.\n * @private\n */\nfunction getListeners(eventTarget) {\n    const listeners = listenersMap.get(eventTarget);\n    if (listeners == null) {\n        throw new TypeError(\n            \"'this' is expected an EventTarget object, but got another value.\"\n        )\n    }\n    return listeners\n}\n\n/**\n * Get the property descriptor for the event attribute of a given event.\n * @param {string} eventName The event name to get property descriptor.\n * @returns {PropertyDescriptor} The property descriptor.\n * @private\n */\nfunction defineEventAttributeDescriptor(eventName) {\n    return {\n        get() {\n            const listeners = getListeners(this);\n            let node = listeners.get(eventName);\n            while (node != null) {\n                if (node.listenerType === ATTRIBUTE) {\n                    return node.listener\n                }\n                node = node.next;\n            }\n            return null\n        },\n\n        set(listener) {\n            if (typeof listener !== \"function\" && !isObject(listener)) {\n                listener = null; // eslint-disable-line no-param-reassign\n            }\n            const listeners = getListeners(this);\n\n            // Traverse to the tail while removing old value.\n            let prev = null;\n            let node = listeners.get(eventName);\n            while (node != null) {\n                if (node.listenerType === ATTRIBUTE) {\n                    // Remove old value.\n                    if (prev !== null) {\n                        prev.next = node.next;\n                    } else if (node.next !== null) {\n                        listeners.set(eventName, node.next);\n                    } else {\n                        listeners.delete(eventName);\n                    }\n                } else {\n                    prev = node;\n                }\n\n                node = node.next;\n            }\n\n            // Add new value.\n            if (listener !== null) {\n                const newNode = {\n                    listener,\n                    listenerType: ATTRIBUTE,\n                    passive: false,\n                    once: false,\n                    next: null,\n                };\n                if (prev === null) {\n                    listeners.set(eventName, newNode);\n                } else {\n                    prev.next = newNode;\n                }\n            }\n        },\n        configurable: true,\n        enumerable: true,\n    }\n}\n\n/**\n * Define an event attribute (e.g. `eventTarget.onclick`).\n * @param {Object} eventTargetPrototype The event target prototype to define an event attrbite.\n * @param {string} eventName The event name to define.\n * @returns {void}\n */\nfunction defineEventAttribute(eventTargetPrototype, eventName) {\n    Object.defineProperty(\n        eventTargetPrototype,\n        `on${eventName}`,\n        defineEventAttributeDescriptor(eventName)\n    );\n}\n\n/**\n * Define a custom EventTarget with event attributes.\n * @param {string[]} eventNames Event names for event attributes.\n * @returns {EventTarget} The custom EventTarget.\n * @private\n */\nfunction defineCustomEventTarget(eventNames) {\n    /** CustomEventTarget */\n    function CustomEventTarget() {\n        EventTarget.call(this);\n    }\n\n    CustomEventTarget.prototype = Object.create(EventTarget.prototype, {\n        constructor: {\n            value: CustomEventTarget,\n            configurable: true,\n            writable: true,\n        },\n    });\n\n    for (let i = 0; i < eventNames.length; ++i) {\n        defineEventAttribute(CustomEventTarget.prototype, eventNames[i]);\n    }\n\n    return CustomEventTarget\n}\n\n/**\n * EventTarget.\n *\n * - This is constructor if no arguments.\n * - This is a function which returns a CustomEventTarget constructor if there are arguments.\n *\n * For example:\n *\n *     class A extends EventTarget {}\n *     class B extends EventTarget(\"message\") {}\n *     class C extends EventTarget(\"message\", \"error\") {}\n *     class D extends EventTarget([\"message\", \"error\"]) {}\n */\nfunction EventTarget() {\n    /*eslint-disable consistent-return */\n    if (this instanceof EventTarget) {\n        listenersMap.set(this, new Map());\n        return\n    }\n    if (arguments.length === 1 && Array.isArray(arguments[0])) {\n        return defineCustomEventTarget(arguments[0])\n    }\n    if (arguments.length > 0) {\n        const types = new Array(arguments.length);\n        for (let i = 0; i < arguments.length; ++i) {\n            types[i] = arguments[i];\n        }\n        return defineCustomEventTarget(types)\n    }\n    throw new TypeError(\"Cannot call a class as a function\")\n    /*eslint-enable consistent-return */\n}\n\n// Should be enumerable, but class methods are not enumerable.\nEventTarget.prototype = {\n    /**\n     * Add a given listener to this event target.\n     * @param {string} eventName The event name to add.\n     * @param {Function} listener The listener to add.\n     * @param {boolean|{capture?:boolean,passive?:boolean,once?:boolean}} [options] The options for this listener.\n     * @returns {void}\n     */\n    addEventListener(eventName, listener, options) {\n        if (listener == null) {\n            return\n        }\n        if (typeof listener !== \"function\" && !isObject(listener)) {\n            throw new TypeError(\"'listener' should be a function or an object.\")\n        }\n\n        const listeners = getListeners(this);\n        const optionsIsObj = isObject(options);\n        const capture = optionsIsObj\n            ? Boolean(options.capture)\n            : Boolean(options);\n        const listenerType = capture ? CAPTURE : BUBBLE;\n        const newNode = {\n            listener,\n            listenerType,\n            passive: optionsIsObj && Boolean(options.passive),\n            once: optionsIsObj && Boolean(options.once),\n            next: null,\n        };\n\n        // Set it as the first node if the first node is null.\n        let node = listeners.get(eventName);\n        if (node === undefined) {\n            listeners.set(eventName, newNode);\n            return\n        }\n\n        // Traverse to the tail while checking duplication..\n        let prev = null;\n        while (node != null) {\n            if (\n                node.listener === listener &&\n                node.listenerType === listenerType\n            ) {\n                // Should ignore duplication.\n                return\n            }\n            prev = node;\n            node = node.next;\n        }\n\n        // Add it.\n        prev.next = newNode;\n    },\n\n    /**\n     * Remove a given listener from this event target.\n     * @param {string} eventName The event name to remove.\n     * @param {Function} listener The listener to remove.\n     * @param {boolean|{capture?:boolean,passive?:boolean,once?:boolean}} [options] The options for this listener.\n     * @returns {void}\n     */\n    removeEventListener(eventName, listener, options) {\n        if (listener == null) {\n            return\n        }\n\n        const listeners = getListeners(this);\n        const capture = isObject(options)\n            ? Boolean(options.capture)\n            : Boolean(options);\n        const listenerType = capture ? CAPTURE : BUBBLE;\n\n        let prev = null;\n        let node = listeners.get(eventName);\n        while (node != null) {\n            if (\n                node.listener === listener &&\n                node.listenerType === listenerType\n            ) {\n                if (prev !== null) {\n                    prev.next = node.next;\n                } else if (node.next !== null) {\n                    listeners.set(eventName, node.next);\n                } else {\n                    listeners.delete(eventName);\n                }\n                return\n            }\n\n            prev = node;\n            node = node.next;\n        }\n    },\n\n    /**\n     * Dispatch a given event.\n     * @param {Event|{type:string}} event The event to dispatch.\n     * @returns {boolean} `false` if canceled.\n     */\n    dispatchEvent(event) {\n        if (event == null || typeof event.type !== \"string\") {\n            throw new TypeError('\"event.type\" should be a string.')\n        }\n\n        // If listeners aren't registered, terminate.\n        const listeners = getListeners(this);\n        const eventName = event.type;\n        let node = listeners.get(eventName);\n        if (node == null) {\n            return true\n        }\n\n        // Since we cannot rewrite several properties, so wrap object.\n        const wrappedEvent = wrapEvent(this, event);\n\n        // This doesn't process capturing phase and bubbling phase.\n        // This isn't participating in a tree.\n        let prev = null;\n        while (node != null) {\n            // Remove this listener if it's once\n            if (node.once) {\n                if (prev !== null) {\n                    prev.next = node.next;\n                } else if (node.next !== null) {\n                    listeners.set(eventName, node.next);\n                } else {\n                    listeners.delete(eventName);\n                }\n            } else {\n                prev = node;\n            }\n\n            // Call this listener\n            setPassiveListener(\n                wrappedEvent,\n                node.passive ? node.listener : null\n            );\n            if (typeof node.listener === \"function\") {\n                try {\n                    node.listener.call(this, wrappedEvent);\n                } catch (err) {\n                    if (\n                        typeof console !== \"undefined\" &&\n                        typeof console.error === \"function\"\n                    ) {\n                        console.error(err);\n                    }\n                }\n            } else if (\n                node.listenerType !== ATTRIBUTE &&\n                typeof node.listener.handleEvent === \"function\"\n            ) {\n                node.listener.handleEvent(wrappedEvent);\n            }\n\n            // Break if `event.stopImmediatePropagation` was called.\n            if (isStopped(wrappedEvent)) {\n                break\n            }\n\n            node = node.next;\n        }\n        setPassiveListener(wrappedEvent, null);\n        setEventPhase(wrappedEvent, 0);\n        setCurrentTarget(wrappedEvent, null);\n\n        return !wrappedEvent.defaultPrevented\n    },\n};\n\n// `constructor` is not enumerable.\nObject.defineProperty(EventTarget.prototype, \"constructor\", {\n    value: EventTarget,\n    configurable: true,\n    writable: true,\n});\n\n// Ensure `eventTarget instanceof window.EventTarget` is `true`.\nif (\n    typeof window !== \"undefined\" &&\n    typeof window.EventTarget !== \"undefined\"\n) {\n    Object.setPrototypeOf(EventTarget.prototype, window.EventTarget.prototype);\n}\n\nexports.defineEventAttribute = defineEventAttribute;\nexports.EventTarget = EventTarget;\nexports.default = EventTarget;\n\nmodule.exports = EventTarget\nmodule.exports.EventTarget = module.exports[\"default\"] = EventTarget\nmodule.exports.defineEventAttribute = defineEventAttribute\n//# sourceMappingURL=event-target-shim.js.map\n\"/dist/event-target-shim.umd.js.mapő{\"version\":3,\"file\":\"event-target-shim.umd.js\",\"sources\":[\"../src/event.mjs\",\"../src/event-target.mjs\"],\"sourcesContent\":[\"/**\\n * @typedef {object} PrivateData\\n * @property {EventTarget} eventTarget The event target.\\n * @property {{type:string}} event The original event object.\\n * @property {number} eventPhase The current event phase.\\n * @property {EventTarget|null} currentTarget The current event target.\\n * @property {boolean} canceled The flag to prevent default.\\n * @property {boolean} stopped The flag to stop propagation.\\n * @property {boolean} immediateStopped The flag to stop propagation immediately.\\n * @property {Function|null} passiveListener The listener if the current listener is passive. Otherwise this is null.\\n * @property {number} timeStamp The unix time.\\n * @private\\n */\\n\\n/**\\n * Private data for event wrappers.\\n * @type {WeakMap<Event, PrivateData>}\\n * @private\\n */\\nconst privateData = new WeakMap()\\n\\n/**\\n * Cache for wrapper classes.\\n * @type {WeakMap<Object, Function>}\\n * @private\\n */\\nconst wrappers = new WeakMap()\\n\\n/**\\n * Get private data.\\n * @param {Event} event The event object to get private data.\\n * @returns {PrivateData} The private data of the event.\\n * @private\\n */\\nfunction pd(event) {\\n    const retv = privateData.get(event)\\n    console.assert(\\n        retv != null,\\n        \\\"'this' is expected an Event object, but got\\\",\\n        event\\n    )\\n    return retv\\n}\\n\\n/**\\n * https://dom.spec.whatwg.org/#set-the-canceled-flag\\n * @param data {PrivateData} private data.\\n */\\nfunction setCancelFlag(data) {\\n    if (data.passiveListener != null) {\\n        if (\\n            typeof console !== \\\"undefined\\\" &&\\n            typeof console.error === \\\"function\\\"\\n        ) {\\n            console.error(\\n                \\\"Unable to preventDefault inside passive event listener invocation.\\\",\\n                data.passiveListener\\n            )\\n        }\\n        return\\n    }\\n    if (!data.event.cancelable) {\\n        return\\n    }\\n\\n    data.canceled = true\\n    if (typeof data.event.preventDefault === \\\"function\\\") {\\n        data.event.preventDefault()\\n    }\\n}\\n\\n/**\\n * @see https://dom.spec.whatwg.org/#interface-event\\n * @private\\n */\\n/**\\n * The event wrapper.\\n * @constructor\\n * @param {EventTarget} eventTarget The event target of this dispatching.\\n * @param {Event|{type:string}} event The original event to wrap.\\n */\\nfunction Event(eventTarget, event) {\\n    privateData.set(this, {\\n        eventTarget,\\n        event,\\n        eventPhase: 2,\\n        currentTarget: eventTarget,\\n        canceled: false,\\n        stopped: false,\\n        immediateStopped: false,\\n        passiveListener: null,\\n        timeStamp: event.timeStamp || Date.now(),\\n    })\\n\\n    // https://heycam.github.io/webidl/#Unforgeable\\n    Object.defineProperty(this, \\\"isTrusted\\\", { value: false, enumerable: true })\\n\\n    // Define accessors\\n    const keys = Object.keys(event)\\n    for (let i = 0; i < keys.length; ++i) {\\n        const key = keys[i]\\n        if (!(key in this)) {\\n            Object.defineProperty(this, key, defineRedirectDescriptor(key))\\n        }\\n    }\\n}\\n\\n// Should be enumerable, but class methods are not enumerable.\\nEvent.prototype = {\\n    /**\\n     * The type of this event.\\n     * @type {string}\\n     */\\n    get type() {\\n        return pd(this).event.type\\n    },\\n\\n    /**\\n     * The target of this event.\\n     * @type {EventTarget}\\n     */\\n    get target() {\\n        return pd(this).eventTarget\\n    },\\n\\n    /**\\n     * The target of this event.\\n     * @type {EventTarget}\\n     */\\n    get currentTarget() {\\n        return pd(this).currentTarget\\n    },\\n\\n    /**\\n     * @returns {EventTarget[]} The composed path of this event.\\n     */\\n    composedPath() {\\n        const currentTarget = pd(this).currentTarget\\n        if (currentTarget == null) {\\n            return []\\n        }\\n        return [currentTarget]\\n    },\\n\\n    /**\\n     * Constant of NONE.\\n     * @type {number}\\n     */\\n    get NONE() {\\n        return 0\\n    },\\n\\n    /**\\n     * Constant of CAPTURING_PHASE.\\n     * @type {number}\\n     */\\n    get CAPTURING_PHASE() {\\n        return 1\\n    },\\n\\n    /**\\n     * Constant of AT_TARGET.\\n     * @type {number}\\n     */\\n    get AT_TARGET() {\\n        return 2\\n    },\\n\\n    /**\\n     * Constant of BUBBLING_PHASE.\\n     * @type {number}\\n     */\\n    get BUBBLING_PHASE() {\\n        return 3\\n    },\\n\\n    /**\\n     * The target of this event.\\n     * @type {number}\\n     */\\n    get eventPhase() {\\n        return pd(this).eventPhase\\n    },\\n\\n    /**\\n     * Stop event bubbling.\\n     * @returns {void}\\n     */\\n    stopPropagation() {\\n        const data = pd(this)\\n\\n        data.stopped = true\\n        if (typeof data.event.stopPropagation === \\\"function\\\") {\\n            data.event.stopPropagation()\\n        }\\n    },\\n\\n    /**\\n     * Stop event bubbling.\\n     * @returns {void}\\n     */\\n    stopImmediatePropagation() {\\n        const data = pd(this)\\n\\n        data.stopped = true\\n        data.immediateStopped = true\\n        if (typeof data.event.stopImmediatePropagation === \\\"function\\\") {\\n            data.event.stopImmediatePropagation()\\n        }\\n    },\\n\\n    /**\\n     * The flag to be bubbling.\\n     * @type {boolean}\\n     */\\n    get bubbles() {\\n        return Boolean(pd(this).event.bubbles)\\n    },\\n\\n    /**\\n     * The flag to be cancelable.\\n     * @type {boolean}\\n     */\\n    get cancelable() {\\n        return Boolean(pd(this).event.cancelable)\\n    },\\n\\n    /**\\n     * Cancel this event.\\n     * @returns {void}\\n     */\\n    preventDefault() {\\n        setCancelFlag(pd(this))\\n    },\\n\\n    /**\\n     * The flag to indicate cancellation state.\\n     * @type {boolean}\\n     */\\n    get defaultPrevented() {\\n        return pd(this).canceled\\n    },\\n\\n    /**\\n     * The flag to be composed.\\n     * @type {boolean}\\n     */\\n    get composed() {\\n        return Boolean(pd(this).event.composed)\\n    },\\n\\n    /**\\n     * The unix time of this event.\\n     * @type {number}\\n     */\\n    get timeStamp() {\\n        return pd(this).timeStamp\\n    },\\n\\n    /**\\n     * The target of this event.\\n     * @type {EventTarget}\\n     * @deprecated\\n     */\\n    get srcElement() {\\n        return pd(this).eventTarget\\n    },\\n\\n    /**\\n     * The flag to stop event bubbling.\\n     * @type {boolean}\\n     * @deprecated\\n     */\\n    get cancelBubble() {\\n        return pd(this).stopped\\n    },\\n    set cancelBubble(value) {\\n        if (!value) {\\n            return\\n        }\\n        const data = pd(this)\\n\\n        data.stopped = true\\n        if (typeof data.event.cancelBubble === \\\"boolean\\\") {\\n            data.event.cancelBubble = true\\n        }\\n    },\\n\\n    /**\\n     * The flag to indicate cancellation state.\\n     * @type {boolean}\\n     * @deprecated\\n     */\\n    get returnValue() {\\n        return !pd(this).canceled\\n    },\\n    set returnValue(value) {\\n        if (!value) {\\n            setCancelFlag(pd(this))\\n        }\\n    },\\n\\n    /**\\n     * Initialize this event object. But do nothing under event dispatching.\\n     * @param {string} type The event type.\\n     * @param {boolean} [bubbles=false] The flag to be possible to bubble up.\\n     * @param {boolean} [cancelable=false] The flag to be possible to cancel.\\n     * @deprecated\\n     */\\n    initEvent() {\\n        // Do nothing.\\n    },\\n}\\n\\n// `constructor` is not enumerable.\\nObject.defineProperty(Event.prototype, \\\"constructor\\\", {\\n    value: Event,\\n    configurable: true,\\n    writable: true,\\n})\\n\\n// Ensure `event instanceof window.Event` is `true`.\\nif (typeof window !== \\\"undefined\\\" && typeof window.Event !== \\\"undefined\\\") {\\n    Object.setPrototypeOf(Event.prototype, window.Event.prototype)\\n\\n    // Make association for wrappers.\\n    wrappers.set(window.Event.prototype, Event)\\n}\\n\\n/**\\n * Get the property descriptor to redirect a given property.\\n * @param {string} key Property name to define property descriptor.\\n * @returns {PropertyDescriptor} The property descriptor to redirect the property.\\n * @private\\n */\\nfunction defineRedirectDescriptor(key) {\\n    return {\\n        get() {\\n            return pd(this).event[key]\\n        },\\n        set(value) {\\n            pd(this).event[key] = value\\n        },\\n        configurable: true,\\n        enumerable: true,\\n    }\\n}\\n\\n/**\\n * Get the property descriptor to call a given method property.\\n * @param {string} key Property name to define property descriptor.\\n * @returns {PropertyDescriptor} The property descriptor to call the method property.\\n * @private\\n */\\nfunction defineCallDescriptor(key) {\\n    return {\\n        value() {\\n            const event = pd(this).event\\n            return event[key].apply(event, arguments)\\n        },\\n        configurable: true,\\n        enumerable: true,\\n    }\\n}\\n\\n/**\\n * Define new wrapper class.\\n * @param {Function} BaseEvent The base wrapper class.\\n * @param {Object} proto The prototype of the original event.\\n * @returns {Function} The defined wrapper class.\\n * @private\\n */\\nfunction defineWrapper(BaseEvent, proto) {\\n    const keys = Object.keys(proto)\\n    if (keys.length === 0) {\\n        return BaseEvent\\n    }\\n\\n    /** CustomEvent */\\n    function CustomEvent(eventTarget, event) {\\n        BaseEvent.call(this, eventTarget, event)\\n    }\\n\\n    CustomEvent.prototype = Object.create(BaseEvent.prototype, {\\n        constructor: { value: CustomEvent, configurable: true, writable: true },\\n    })\\n\\n    // Define accessors.\\n    for (let i = 0; i < keys.length; ++i) {\\n        const key = keys[i]\\n        if (!(key in BaseEvent.prototype)) {\\n            const descriptor = Object.getOwnPropertyDescriptor(proto, key)\\n            const isFunc = typeof descriptor.value === \\\"function\\\"\\n            Object.defineProperty(\\n                CustomEvent.prototype,\\n                key,\\n                isFunc\\n                    ? defineCallDescriptor(key)\\n                    : defineRedirectDescriptor(key)\\n            )\\n        }\\n    }\\n\\n    return CustomEvent\\n}\\n\\n/**\\n * Get the wrapper class of a given prototype.\\n * @param {Object} proto The prototype of the original event to get its wrapper.\\n * @returns {Function} The wrapper class.\\n * @private\\n */\\nfunction getWrapper(proto) {\\n    if (proto == null || proto === Object.prototype) {\\n        return Event\\n    }\\n\\n    let wrapper = wrappers.get(proto)\\n    if (wrapper == null) {\\n        wrapper = defineWrapper(getWrapper(Object.getPrototypeOf(proto)), proto)\\n        wrappers.set(proto, wrapper)\\n    }\\n    return wrapper\\n}\\n\\n/**\\n * Wrap a given event to management a dispatching.\\n * @param {EventTarget} eventTarget The event target of this dispatching.\\n * @param {Object} event The event to wrap.\\n * @returns {Event} The wrapper instance.\\n * @private\\n */\\nexport function wrapEvent(eventTarget, event) {\\n    const Wrapper = getWrapper(Object.getPrototypeOf(event))\\n    return new Wrapper(eventTarget, event)\\n}\\n\\n/**\\n * Get the immediateStopped flag of a given event.\\n * @param {Event} event The event to get.\\n * @returns {boolean} The flag to stop propagation immediately.\\n * @private\\n */\\nexport function isStopped(event) {\\n    return pd(event).immediateStopped\\n}\\n\\n/**\\n * Set the current event phase of a given event.\\n * @param {Event} event The event to set current target.\\n * @param {number} eventPhase New event phase.\\n * @returns {void}\\n * @private\\n */\\nexport function setEventPhase(event, eventPhase) {\\n    pd(event).eventPhase = eventPhase\\n}\\n\\n/**\\n * Set the current target of a given event.\\n * @param {Event} event The event to set current target.\\n * @param {EventTarget|null} currentTarget New current target.\\n * @returns {void}\\n * @private\\n */\\nexport function setCurrentTarget(event, currentTarget) {\\n    pd(event).currentTarget = currentTarget\\n}\\n\\n/**\\n * Set a passive listener of a given event.\\n * @param {Event} event The event to set current target.\\n * @param {Function|null} passiveListener New passive listener.\\n * @returns {void}\\n * @private\\n */\\nexport function setPassiveListener(event, passiveListener) {\\n    pd(event).passiveListener = passiveListener\\n}\\n\",\"import {\\n    isStopped,\\n    setCurrentTarget,\\n    setEventPhase,\\n    setPassiveListener,\\n    wrapEvent,\\n} from \\\"./event.mjs\\\"\\n\\n/**\\n * @typedef {object} ListenerNode\\n * @property {Function} listener\\n * @property {1|2|3} listenerType\\n * @property {boolean} passive\\n * @property {boolean} once\\n * @property {ListenerNode|null} next\\n * @private\\n */\\n\\n/**\\n * @type {WeakMap<object, Map<string, ListenerNode>>}\\n * @private\\n */\\nconst listenersMap = new WeakMap()\\n\\n// Listener types\\nconst CAPTURE = 1\\nconst BUBBLE = 2\\nconst ATTRIBUTE = 3\\n\\n/**\\n * Check whether a given value is an object or not.\\n * @param {any} x The value to check.\\n * @returns {boolean} `true` if the value is an object.\\n */\\nfunction isObject(x) {\\n    return x !== null && typeof x === \\\"object\\\" //eslint-disable-line no-restricted-syntax\\n}\\n\\n/**\\n * Get listeners.\\n * @param {EventTarget} eventTarget The event target to get.\\n * @returns {Map<string, ListenerNode>} The listeners.\\n * @private\\n */\\nfunction getListeners(eventTarget) {\\n    const listeners = listenersMap.get(eventTarget)\\n    if (listeners == null) {\\n        throw new TypeError(\\n            \\\"'this' is expected an EventTarget object, but got another value.\\\"\\n        )\\n    }\\n    return listeners\\n}\\n\\n/**\\n * Get the property descriptor for the event attribute of a given event.\\n * @param {string} eventName The event name to get property descriptor.\\n * @returns {PropertyDescriptor} The property descriptor.\\n * @private\\n */\\nfunction defineEventAttributeDescriptor(eventName) {\\n    return {\\n        get() {\\n            const listeners = getListeners(this)\\n            let node = listeners.get(eventName)\\n            while (node != null) {\\n                if (node.listenerType === ATTRIBUTE) {\\n                    return node.listener\\n                }\\n                node = node.next\\n            }\\n            return null\\n        },\\n\\n        set(listener) {\\n            if (typeof listener !== \\\"function\\\" && !isObject(listener)) {\\n                listener = null // eslint-disable-line no-param-reassign\\n            }\\n            const listeners = getListeners(this)\\n\\n            // Traverse to the tail while removing old value.\\n            let prev = null\\n            let node = listeners.get(eventName)\\n            while (node != null) {\\n                if (node.listenerType === ATTRIBUTE) {\\n                    // Remove old value.\\n                    if (prev !== null) {\\n                        prev.next = node.next\\n                    } else if (node.next !== null) {\\n                        listeners.set(eventName, node.next)\\n                    } else {\\n                        listeners.delete(eventName)\\n                    }\\n                } else {\\n                    prev = node\\n                }\\n\\n                node = node.next\\n            }\\n\\n            // Add new value.\\n            if (listener !== null) {\\n                const newNode = {\\n                    listener,\\n                    listenerType: ATTRIBUTE,\\n                    passive: false,\\n                    once: false,\\n                    next: null,\\n                }\\n                if (prev === null) {\\n                    listeners.set(eventName, newNode)\\n                } else {\\n                    prev.next = newNode\\n                }\\n            }\\n        },\\n        configurable: true,\\n        enumerable: true,\\n    }\\n}\\n\\n/**\\n * Define an event attribute (e.g. `eventTarget.onclick`).\\n * @param {Object} eventTargetPrototype The event target prototype to define an event attrbite.\\n * @param {string} eventName The event name to define.\\n * @returns {void}\\n */\\nfunction defineEventAttribute(eventTargetPrototype, eventName) {\\n    Object.defineProperty(\\n        eventTargetPrototype,\\n        `on${eventName}`,\\n        defineEventAttributeDescriptor(eventName)\\n    )\\n}\\n\\n/**\\n * Define a custom EventTarget with event attributes.\\n * @param {string[]} eventNames Event names for event attributes.\\n * @returns {EventTarget} The custom EventTarget.\\n * @private\\n */\\nfunction defineCustomEventTarget(eventNames) {\\n    /** CustomEventTarget */\\n    function CustomEventTarget() {\\n        EventTarget.call(this)\\n    }\\n\\n    CustomEventTarget.prototype = Object.create(EventTarget.prototype, {\\n        constructor: {\\n            value: CustomEventTarget,\\n            configurable: true,\\n            writable: true,\\n        },\\n    })\\n\\n    for (let i = 0; i < eventNames.length; ++i) {\\n        defineEventAttribute(CustomEventTarget.prototype, eventNames[i])\\n    }\\n\\n    return CustomEventTarget\\n}\\n\\n/**\\n * EventTarget.\\n *\\n * - This is constructor if no arguments.\\n * - This is a function which returns a CustomEventTarget constructor if there are arguments.\\n *\\n * For example:\\n *\\n *     class A extends EventTarget {}\\n *     class B extends EventTarget(\\\"message\\\") {}\\n *     class C extends EventTarget(\\\"message\\\", \\\"error\\\") {}\\n *     class D extends EventTarget([\\\"message\\\", \\\"error\\\"]) {}\\n */\\nfunction EventTarget() {\\n    /*eslint-disable consistent-return */\\n    if (this instanceof EventTarget) {\\n        listenersMap.set(this, new Map())\\n        return\\n    }\\n    if (arguments.length === 1 && Array.isArray(arguments[0])) {\\n        return defineCustomEventTarget(arguments[0])\\n    }\\n    if (arguments.length > 0) {\\n        const types = new Array(arguments.length)\\n        for (let i = 0; i < arguments.length; ++i) {\\n            types[i] = arguments[i]\\n        }\\n        return defineCustomEventTarget(types)\\n    }\\n    throw new TypeError(\\\"Cannot call a class as a function\\\")\\n    /*eslint-enable consistent-return */\\n}\\n\\n// Should be enumerable, but class methods are not enumerable.\\nEventTarget.prototype = {\\n    /**\\n     * Add a given listener to this event target.\\n     * @param {string} eventName The event name to add.\\n     * @param {Function} listener The listener to add.\\n     * @param {boolean|{capture?:boolean,passive?:boolean,once?:boolean}} [options] The options for this listener.\\n     * @returns {void}\\n     */\\n    addEventListener(eventName, listener, options) {\\n        if (listener == null) {\\n            return\\n        }\\n        if (typeof listener !== \\\"function\\\" && !isObject(listener)) {\\n            throw new TypeError(\\\"'listener' should be a function or an object.\\\")\\n        }\\n\\n        const listeners = getListeners(this)\\n        const optionsIsObj = isObject(options)\\n        const capture = optionsIsObj\\n            ? Boolean(options.capture)\\n            : Boolean(options)\\n        const listenerType = capture ? CAPTURE : BUBBLE\\n        const newNode = {\\n            listener,\\n            listenerType,\\n            passive: optionsIsObj && Boolean(options.passive),\\n            once: optionsIsObj && Boolean(options.once),\\n            next: null,\\n        }\\n\\n        // Set it as the first node if the first node is null.\\n        let node = listeners.get(eventName)\\n        if (node === undefined) {\\n            listeners.set(eventName, newNode)\\n            return\\n        }\\n\\n        // Traverse to the tail while checking duplication..\\n        let prev = null\\n        while (node != null) {\\n            if (\\n                node.listener === listener &&\\n                node.listenerType === listenerType\\n            ) {\\n                // Should ignore duplication.\\n                return\\n            }\\n            prev = node\\n            node = node.next\\n        }\\n\\n        // Add it.\\n        prev.next = newNode\\n    },\\n\\n    /**\\n     * Remove a given listener from this event target.\\n     * @param {string} eventName The event name to remove.\\n     * @param {Function} listener The listener to remove.\\n     * @param {boolean|{capture?:boolean,passive?:boolean,once?:boolean}} [options] The options for this listener.\\n     * @returns {void}\\n     */\\n    removeEventListener(eventName, listener, options) {\\n        if (listener == null) {\\n            return\\n        }\\n\\n        const listeners = getListeners(this)\\n        const capture = isObject(options)\\n            ? Boolean(options.capture)\\n            : Boolean(options)\\n        const listenerType = capture ? CAPTURE : BUBBLE\\n\\n        let prev = null\\n        let node = listeners.get(eventName)\\n        while (node != null) {\\n            if (\\n                node.listener === listener &&\\n                node.listenerType === listenerType\\n            ) {\\n                if (prev !== null) {\\n                    prev.next = node.next\\n                } else if (node.next !== null) {\\n                    listeners.set(eventName, node.next)\\n                } else {\\n                    listeners.delete(eventName)\\n                }\\n                return\\n            }\\n\\n            prev = node\\n            node = node.next\\n        }\\n    },\\n\\n    /**\\n     * Dispatch a given event.\\n     * @param {Event|{type:string}} event The event to dispatch.\\n     * @returns {boolean} `false` if canceled.\\n     */\\n    dispatchEvent(event) {\\n        if (event == null || typeof event.type !== \\\"string\\\") {\\n            throw new TypeError('\\\"event.type\\\" should be a string.')\\n        }\\n\\n        // If listeners aren't registered, terminate.\\n        const listeners = getListeners(this)\\n        const eventName = event.type\\n        let node = listeners.get(eventName)\\n        if (node == null) {\\n            return true\\n        }\\n\\n        // Since we cannot rewrite several properties, so wrap object.\\n        const wrappedEvent = wrapEvent(this, event)\\n\\n        // This doesn't process capturing phase and bubbling phase.\\n        // This isn't participating in a tree.\\n        let prev = null\\n        while (node != null) {\\n            // Remove this listener if it's once\\n            if (node.once) {\\n                if (prev !== null) {\\n                    prev.next = node.next\\n                } else if (node.next !== null) {\\n                    listeners.set(eventName, node.next)\\n                } else {\\n                    listeners.delete(eventName)\\n                }\\n            } else {\\n                prev = node\\n            }\\n\\n            // Call this listener\\n            setPassiveListener(\\n                wrappedEvent,\\n                node.passive ? node.listener : null\\n            )\\n            if (typeof node.listener === \\\"function\\\") {\\n                try {\\n                    node.listener.call(this, wrappedEvent)\\n                } catch (err) {\\n                    if (\\n                        typeof console !== \\\"undefined\\\" &&\\n                        typeof console.error === \\\"function\\\"\\n                    ) {\\n                        console.error(err)\\n                    }\\n                }\\n            } else if (\\n                node.listenerType !== ATTRIBUTE &&\\n                typeof node.listener.handleEvent === \\\"function\\\"\\n            ) {\\n                node.listener.handleEvent(wrappedEvent)\\n            }\\n\\n            // Break if `event.stopImmediatePropagation` was called.\\n            if (isStopped(wrappedEvent)) {\\n                break\\n            }\\n\\n            node = node.next\\n        }\\n        setPassiveListener(wrappedEvent, null)\\n        setEventPhase(wrappedEvent, 0)\\n        setCurrentTarget(wrappedEvent, null)\\n\\n        return !wrappedEvent.defaultPrevented\\n    },\\n}\\n\\n// `constructor` is not enumerable.\\nObject.defineProperty(EventTarget.prototype, \\\"constructor\\\", {\\n    value: EventTarget,\\n    configurable: true,\\n    writable: true,\\n})\\n\\n// Ensure `eventTarget instanceof window.EventTarget` is `true`.\\nif (\\n    typeof window !== \\\"undefined\\\" &&\\n    typeof window.EventTarget !== \\\"undefined\\\"\\n) {\\n    Object.setPrototypeOf(EventTarget.prototype, window.EventTarget.prototype)\\n}\\n\\nexport { defineEventAttribute, EventTarget }\\nexport default EventTarget\\n\"],\"names\":[\"pd\",\"event\",\"retv\",\"privateData\",\"get\",\"console\",\"assert\",\"setCancelFlag\",\"data\",\"passiveListener\",\"cancelable\",\"canceled\",\"preventDefault\",\"error\",\"Event\",\"eventTarget\",\"set\",\"eventPhase\",\"currentTarget\",\"stopped\",\"immediateStopped\",\"timeStamp\",\"Date\",\"now\",\"Object\",\"defineProperty\",\"value\",\"enumerable\",\"key\",\"keys\",\"i\",\"length\",\"defineRedirectDescriptor\",\"configurable\",\"defineCallDescriptor\",\"apply\",\"arguments\",\"defineWrapper\",\"BaseEvent\",\"proto\",\"CustomEvent\",\"call\",\"prototype\",\"create\",\"constructor\",\"writable\",\"descriptor\",\"getOwnPropertyDescriptor\",\"isFunc\",\"getWrapper\",\"wrapper\",\"wrappers\",\"getPrototypeOf\",\"wrapEvent\",\"Wrapper\",\"isStopped\",\"setEventPhase\",\"setCurrentTarget\",\"setPassiveListener\",\"isObject\",\"x\",\"_typeof\",\"getListeners\",\"listeners\",\"listenersMap\",\"TypeError\",\"defineEventAttributeDescriptor\",\"eventName\",\"node\",\"listenerType\",\"listener\",\"next\",\"prev\",\"delete\",\"newNode\",\"passive\",\"once\",\"defineEventAttribute\",\"eventTargetPrototype\",\"defineCustomEventTarget\",\"eventNames\",\"CustomEventTarget\",\"EventTarget\",\"Map\",\"Array\",\"isArray\",\"types\",\"WeakMap\",\"type\",\"target\",\"composedPath\",\"NONE\",\"CAPTURING_PHASE\",\"AT_TARGET\",\"BUBBLING_PHASE\",\"stopPropagation\",\"stopImmediatePropagation\",\"bubbles\",\"defaultPrevented\",\"composed\",\"srcElement\",\"cancelBubble\",\"returnValue\",\"initEvent\",\"window\",\"setPrototypeOf\",\"CAPTURE\",\"BUBBLE\",\"addEventListener\",\"options\",\"optionsIsObj\",\"capture\",\"removeEventListener\",\"dispatchEvent\",\"wrappedEvent\",\"err\",\"handleEvent\"],\"mappings\":\"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\"}/dist/event-target-shim.mjs[s/**\n * @author Toru Nagashima <https://github.com/mysticatea>\n * @copyright 2015 Toru Nagashima. All rights reserved.\n * See LICENSE file in root directory for full license.\n */\n/**\n * @typedef {object} PrivateData\n * @property {EventTarget} eventTarget The event target.\n * @property {{type:string}} event The original event object.\n * @property {number} eventPhase The current event phase.\n * @property {EventTarget|null} currentTarget The current event target.\n * @property {boolean} canceled The flag to prevent default.\n * @property {boolean} stopped The flag to stop propagation.\n * @property {boolean} immediateStopped The flag to stop propagation immediately.\n * @property {Function|null} passiveListener The listener if the current listener is passive. Otherwise this is null.\n * @property {number} timeStamp The unix time.\n * @private\n */\n\n/**\n * Private data for event wrappers.\n * @type {WeakMap<Event, PrivateData>}\n * @private\n */\nconst privateData = new WeakMap();\n\n/**\n * Cache for wrapper classes.\n * @type {WeakMap<Object, Function>}\n * @private\n */\nconst wrappers = new WeakMap();\n\n/**\n * Get private data.\n * @param {Event} event The event object to get private data.\n * @returns {PrivateData} The private data of the event.\n * @private\n */\nfunction pd(event) {\n    const retv = privateData.get(event);\n    console.assert(\n        retv != null,\n        \"'this' is expected an Event object, but got\",\n        event\n    );\n    return retv\n}\n\n/**\n * https://dom.spec.whatwg.org/#set-the-canceled-flag\n * @param data {PrivateData} private data.\n */\nfunction setCancelFlag(data) {\n    if (data.passiveListener != null) {\n        if (\n            typeof console !== \"undefined\" &&\n            typeof console.error === \"function\"\n        ) {\n            console.error(\n                \"Unable to preventDefault inside passive event listener invocation.\",\n                data.passiveListener\n            );\n        }\n        return\n    }\n    if (!data.event.cancelable) {\n        return\n    }\n\n    data.canceled = true;\n    if (typeof data.event.preventDefault === \"function\") {\n        data.event.preventDefault();\n    }\n}\n\n/**\n * @see https://dom.spec.whatwg.org/#interface-event\n * @private\n */\n/**\n * The event wrapper.\n * @constructor\n * @param {EventTarget} eventTarget The event target of this dispatching.\n * @param {Event|{type:string}} event The original event to wrap.\n */\nfunction Event(eventTarget, event) {\n    privateData.set(this, {\n        eventTarget,\n        event,\n        eventPhase: 2,\n        currentTarget: eventTarget,\n        canceled: false,\n        stopped: false,\n        immediateStopped: false,\n        passiveListener: null,\n        timeStamp: event.timeStamp || Date.now(),\n    });\n\n    // https://heycam.github.io/webidl/#Unforgeable\n    Object.defineProperty(this, \"isTrusted\", { value: false, enumerable: true });\n\n    // Define accessors\n    const keys = Object.keys(event);\n    for (let i = 0; i < keys.length; ++i) {\n        const key = keys[i];\n        if (!(key in this)) {\n            Object.defineProperty(this, key, defineRedirectDescriptor(key));\n        }\n    }\n}\n\n// Should be enumerable, but class methods are not enumerable.\nEvent.prototype = {\n    /**\n     * The type of this event.\n     * @type {string}\n     */\n    get type() {\n        return pd(this).event.type\n    },\n\n    /**\n     * The target of this event.\n     * @type {EventTarget}\n     */\n    get target() {\n        return pd(this).eventTarget\n    },\n\n    /**\n     * The target of this event.\n     * @type {EventTarget}\n     */\n    get currentTarget() {\n        return pd(this).currentTarget\n    },\n\n    /**\n     * @returns {EventTarget[]} The composed path of this event.\n     */\n    composedPath() {\n        const currentTarget = pd(this).currentTarget;\n        if (currentTarget == null) {\n            return []\n        }\n        return [currentTarget]\n    },\n\n    /**\n     * Constant of NONE.\n     * @type {number}\n     */\n    get NONE() {\n        return 0\n    },\n\n    /**\n     * Constant of CAPTURING_PHASE.\n     * @type {number}\n     */\n    get CAPTURING_PHASE() {\n        return 1\n    },\n\n    /**\n     * Constant of AT_TARGET.\n     * @type {number}\n     */\n    get AT_TARGET() {\n        return 2\n    },\n\n    /**\n     * Constant of BUBBLING_PHASE.\n     * @type {number}\n     */\n    get BUBBLING_PHASE() {\n        return 3\n    },\n\n    /**\n     * The target of this event.\n     * @type {number}\n     */\n    get eventPhase() {\n        return pd(this).eventPhase\n    },\n\n    /**\n     * Stop event bubbling.\n     * @returns {void}\n     */\n    stopPropagation() {\n        const data = pd(this);\n\n        data.stopped = true;\n        if (typeof data.event.stopPropagation === \"function\") {\n            data.event.stopPropagation();\n        }\n    },\n\n    /**\n     * Stop event bubbling.\n     * @returns {void}\n     */\n    stopImmediatePropagation() {\n        const data = pd(this);\n\n        data.stopped = true;\n        data.immediateStopped = true;\n        if (typeof data.event.stopImmediatePropagation === \"function\") {\n            data.event.stopImmediatePropagation();\n        }\n    },\n\n    /**\n     * The flag to be bubbling.\n     * @type {boolean}\n     */\n    get bubbles() {\n        return Boolean(pd(this).event.bubbles)\n    },\n\n    /**\n     * The flag to be cancelable.\n     * @type {boolean}\n     */\n    get cancelable() {\n        return Boolean(pd(this).event.cancelable)\n    },\n\n    /**\n     * Cancel this event.\n     * @returns {void}\n     */\n    preventDefault() {\n        setCancelFlag(pd(this));\n    },\n\n    /**\n     * The flag to indicate cancellation state.\n     * @type {boolean}\n     */\n    get defaultPrevented() {\n        return pd(this).canceled\n    },\n\n    /**\n     * The flag to be composed.\n     * @type {boolean}\n     */\n    get composed() {\n        return Boolean(pd(this).event.composed)\n    },\n\n    /**\n     * The unix time of this event.\n     * @type {number}\n     */\n    get timeStamp() {\n        return pd(this).timeStamp\n    },\n\n    /**\n     * The target of this event.\n     * @type {EventTarget}\n     * @deprecated\n     */\n    get srcElement() {\n        return pd(this).eventTarget\n    },\n\n    /**\n     * The flag to stop event bubbling.\n     * @type {boolean}\n     * @deprecated\n     */\n    get cancelBubble() {\n        return pd(this).stopped\n    },\n    set cancelBubble(value) {\n        if (!value) {\n            return\n        }\n        const data = pd(this);\n\n        data.stopped = true;\n        if (typeof data.event.cancelBubble === \"boolean\") {\n            data.event.cancelBubble = true;\n        }\n    },\n\n    /**\n     * The flag to indicate cancellation state.\n     * @type {boolean}\n     * @deprecated\n     */\n    get returnValue() {\n        return !pd(this).canceled\n    },\n    set returnValue(value) {\n        if (!value) {\n            setCancelFlag(pd(this));\n        }\n    },\n\n    /**\n     * Initialize this event object. But do nothing under event dispatching.\n     * @param {string} type The event type.\n     * @param {boolean} [bubbles=false] The flag to be possible to bubble up.\n     * @param {boolean} [cancelable=false] The flag to be possible to cancel.\n     * @deprecated\n     */\n    initEvent() {\n        // Do nothing.\n    },\n};\n\n// `constructor` is not enumerable.\nObject.defineProperty(Event.prototype, \"constructor\", {\n    value: Event,\n    configurable: true,\n    writable: true,\n});\n\n// Ensure `event instanceof window.Event` is `true`.\nif (typeof window !== \"undefined\" && typeof window.Event !== \"undefined\") {\n    Object.setPrototypeOf(Event.prototype, window.Event.prototype);\n\n    // Make association for wrappers.\n    wrappers.set(window.Event.prototype, Event);\n}\n\n/**\n * Get the property descriptor to redirect a given property.\n * @param {string} key Property name to define property descriptor.\n * @returns {PropertyDescriptor} The property descriptor to redirect the property.\n * @private\n */\nfunction defineRedirectDescriptor(key) {\n    return {\n        get() {\n            return pd(this).event[key]\n        },\n        set(value) {\n            pd(this).event[key] = value;\n        },\n        configurable: true,\n        enumerable: true,\n    }\n}\n\n/**\n * Get the property descriptor to call a given method property.\n * @param {string} key Property name to define property descriptor.\n * @returns {PropertyDescriptor} The property descriptor to call the method property.\n * @private\n */\nfunction defineCallDescriptor(key) {\n    return {\n        value() {\n            const event = pd(this).event;\n            return event[key].apply(event, arguments)\n        },\n        configurable: true,\n        enumerable: true,\n    }\n}\n\n/**\n * Define new wrapper class.\n * @param {Function} BaseEvent The base wrapper class.\n * @param {Object} proto The prototype of the original event.\n * @returns {Function} The defined wrapper class.\n * @private\n */\nfunction defineWrapper(BaseEvent, proto) {\n    const keys = Object.keys(proto);\n    if (keys.length === 0) {\n        return BaseEvent\n    }\n\n    /** CustomEvent */\n    function CustomEvent(eventTarget, event) {\n        BaseEvent.call(this, eventTarget, event);\n    }\n\n    CustomEvent.prototype = Object.create(BaseEvent.prototype, {\n        constructor: { value: CustomEvent, configurable: true, writable: true },\n    });\n\n    // Define accessors.\n    for (let i = 0; i < keys.length; ++i) {\n        const key = keys[i];\n        if (!(key in BaseEvent.prototype)) {\n            const descriptor = Object.getOwnPropertyDescriptor(proto, key);\n            const isFunc = typeof descriptor.value === \"function\";\n            Object.defineProperty(\n                CustomEvent.prototype,\n                key,\n                isFunc\n                    ? defineCallDescriptor(key)\n                    : defineRedirectDescriptor(key)\n            );\n        }\n    }\n\n    return CustomEvent\n}\n\n/**\n * Get the wrapper class of a given prototype.\n * @param {Object} proto The prototype of the original event to get its wrapper.\n * @returns {Function} The wrapper class.\n * @private\n */\nfunction getWrapper(proto) {\n    if (proto == null || proto === Object.prototype) {\n        return Event\n    }\n\n    let wrapper = wrappers.get(proto);\n    if (wrapper == null) {\n        wrapper = defineWrapper(getWrapper(Object.getPrototypeOf(proto)), proto);\n        wrappers.set(proto, wrapper);\n    }\n    return wrapper\n}\n\n/**\n * Wrap a given event to management a dispatching.\n * @param {EventTarget} eventTarget The event target of this dispatching.\n * @param {Object} event The event to wrap.\n * @returns {Event} The wrapper instance.\n * @private\n */\nfunction wrapEvent(eventTarget, event) {\n    const Wrapper = getWrapper(Object.getPrototypeOf(event));\n    return new Wrapper(eventTarget, event)\n}\n\n/**\n * Get the immediateStopped flag of a given event.\n * @param {Event} event The event to get.\n * @returns {boolean} The flag to stop propagation immediately.\n * @private\n */\nfunction isStopped(event) {\n    return pd(event).immediateStopped\n}\n\n/**\n * Set the current event phase of a given event.\n * @param {Event} event The event to set current target.\n * @param {number} eventPhase New event phase.\n * @returns {void}\n * @private\n */\nfunction setEventPhase(event, eventPhase) {\n    pd(event).eventPhase = eventPhase;\n}\n\n/**\n * Set the current target of a given event.\n * @param {Event} event The event to set current target.\n * @param {EventTarget|null} currentTarget New current target.\n * @returns {void}\n * @private\n */\nfunction setCurrentTarget(event, currentTarget) {\n    pd(event).currentTarget = currentTarget;\n}\n\n/**\n * Set a passive listener of a given event.\n * @param {Event} event The event to set current target.\n * @param {Function|null} passiveListener New passive listener.\n * @returns {void}\n * @private\n */\nfunction setPassiveListener(event, passiveListener) {\n    pd(event).passiveListener = passiveListener;\n}\n\n/**\n * @typedef {object} ListenerNode\n * @property {Function} listener\n * @property {1|2|3} listenerType\n * @property {boolean} passive\n * @property {boolean} once\n * @property {ListenerNode|null} next\n * @private\n */\n\n/**\n * @type {WeakMap<object, Map<string, ListenerNode>>}\n * @private\n */\nconst listenersMap = new WeakMap();\n\n// Listener types\nconst CAPTURE = 1;\nconst BUBBLE = 2;\nconst ATTRIBUTE = 3;\n\n/**\n * Check whether a given value is an object or not.\n * @param {any} x The value to check.\n * @returns {boolean} `true` if the value is an object.\n */\nfunction isObject(x) {\n    return x !== null && typeof x === \"object\" //eslint-disable-line no-restricted-syntax\n}\n\n/**\n * Get listeners.\n * @param {EventTarget} eventTarget The event target to get.\n * @returns {Map<string, ListenerNode>} The listeners.\n * @private\n */\nfunction getListeners(eventTarget) {\n    const listeners = listenersMap.get(eventTarget);\n    if (listeners == null) {\n        throw new TypeError(\n            \"'this' is expected an EventTarget object, but got another value.\"\n        )\n    }\n    return listeners\n}\n\n/**\n * Get the property descriptor for the event attribute of a given event.\n * @param {string} eventName The event name to get property descriptor.\n * @returns {PropertyDescriptor} The property descriptor.\n * @private\n */\nfunction defineEventAttributeDescriptor(eventName) {\n    return {\n        get() {\n            const listeners = getListeners(this);\n            let node = listeners.get(eventName);\n            while (node != null) {\n                if (node.listenerType === ATTRIBUTE) {\n                    return node.listener\n                }\n                node = node.next;\n            }\n            return null\n        },\n\n        set(listener) {\n            if (typeof listener !== \"function\" && !isObject(listener)) {\n                listener = null; // eslint-disable-line no-param-reassign\n            }\n            const listeners = getListeners(this);\n\n            // Traverse to the tail while removing old value.\n            let prev = null;\n            let node = listeners.get(eventName);\n            while (node != null) {\n                if (node.listenerType === ATTRIBUTE) {\n                    // Remove old value.\n                    if (prev !== null) {\n                        prev.next = node.next;\n                    } else if (node.next !== null) {\n                        listeners.set(eventName, node.next);\n                    } else {\n                        listeners.delete(eventName);\n                    }\n                } else {\n                    prev = node;\n                }\n\n                node = node.next;\n            }\n\n            // Add new value.\n            if (listener !== null) {\n                const newNode = {\n                    listener,\n                    listenerType: ATTRIBUTE,\n                    passive: false,\n                    once: false,\n                    next: null,\n                };\n                if (prev === null) {\n                    listeners.set(eventName, newNode);\n                } else {\n                    prev.next = newNode;\n                }\n            }\n        },\n        configurable: true,\n        enumerable: true,\n    }\n}\n\n/**\n * Define an event attribute (e.g. `eventTarget.onclick`).\n * @param {Object} eventTargetPrototype The event target prototype to define an event attrbite.\n * @param {string} eventName The event name to define.\n * @returns {void}\n */\nfunction defineEventAttribute(eventTargetPrototype, eventName) {\n    Object.defineProperty(\n        eventTargetPrototype,\n        `on${eventName}`,\n        defineEventAttributeDescriptor(eventName)\n    );\n}\n\n/**\n * Define a custom EventTarget with event attributes.\n * @param {string[]} eventNames Event names for event attributes.\n * @returns {EventTarget} The custom EventTarget.\n * @private\n */\nfunction defineCustomEventTarget(eventNames) {\n    /** CustomEventTarget */\n    function CustomEventTarget() {\n        EventTarget.call(this);\n    }\n\n    CustomEventTarget.prototype = Object.create(EventTarget.prototype, {\n        constructor: {\n            value: CustomEventTarget,\n            configurable: true,\n            writable: true,\n        },\n    });\n\n    for (let i = 0; i < eventNames.length; ++i) {\n        defineEventAttribute(CustomEventTarget.prototype, eventNames[i]);\n    }\n\n    return CustomEventTarget\n}\n\n/**\n * EventTarget.\n *\n * - This is constructor if no arguments.\n * - This is a function which returns a CustomEventTarget constructor if there are arguments.\n *\n * For example:\n *\n *     class A extends EventTarget {}\n *     class B extends EventTarget(\"message\") {}\n *     class C extends EventTarget(\"message\", \"error\") {}\n *     class D extends EventTarget([\"message\", \"error\"]) {}\n */\nfunction EventTarget() {\n    /*eslint-disable consistent-return */\n    if (this instanceof EventTarget) {\n        listenersMap.set(this, new Map());\n        return\n    }\n    if (arguments.length === 1 && Array.isArray(arguments[0])) {\n        return defineCustomEventTarget(arguments[0])\n    }\n    if (arguments.length > 0) {\n        const types = new Array(arguments.length);\n        for (let i = 0; i < arguments.length; ++i) {\n            types[i] = arguments[i];\n        }\n        return defineCustomEventTarget(types)\n    }\n    throw new TypeError(\"Cannot call a class as a function\")\n    /*eslint-enable consistent-return */\n}\n\n// Should be enumerable, but class methods are not enumerable.\nEventTarget.prototype = {\n    /**\n     * Add a given listener to this event target.\n     * @param {string} eventName The event name to add.\n     * @param {Function} listener The listener to add.\n     * @param {boolean|{capture?:boolean,passive?:boolean,once?:boolean}} [options] The options for this listener.\n     * @returns {void}\n     */\n    addEventListener(eventName, listener, options) {\n        if (listener == null) {\n            return\n        }\n        if (typeof listener !== \"function\" && !isObject(listener)) {\n            throw new TypeError(\"'listener' should be a function or an object.\")\n        }\n\n        const listeners = getListeners(this);\n        const optionsIsObj = isObject(options);\n        const capture = optionsIsObj\n            ? Boolean(options.capture)\n            : Boolean(options);\n        const listenerType = capture ? CAPTURE : BUBBLE;\n        const newNode = {\n            listener,\n            listenerType,\n            passive: optionsIsObj && Boolean(options.passive),\n            once: optionsIsObj && Boolean(options.once),\n            next: null,\n        };\n\n        // Set it as the first node if the first node is null.\n        let node = listeners.get(eventName);\n        if (node === undefined) {\n            listeners.set(eventName, newNode);\n            return\n        }\n\n        // Traverse to the tail while checking duplication..\n        let prev = null;\n        while (node != null) {\n            if (\n                node.listener === listener &&\n                node.listenerType === listenerType\n            ) {\n                // Should ignore duplication.\n                return\n            }\n            prev = node;\n            node = node.next;\n        }\n\n        // Add it.\n        prev.next = newNode;\n    },\n\n    /**\n     * Remove a given listener from this event target.\n     * @param {string} eventName The event name to remove.\n     * @param {Function} listener The listener to remove.\n     * @param {boolean|{capture?:boolean,passive?:boolean,once?:boolean}} [options] The options for this listener.\n     * @returns {void}\n     */\n    removeEventListener(eventName, listener, options) {\n        if (listener == null) {\n            return\n        }\n\n        const listeners = getListeners(this);\n        const capture = isObject(options)\n            ? Boolean(options.capture)\n            : Boolean(options);\n        const listenerType = capture ? CAPTURE : BUBBLE;\n\n        let prev = null;\n        let node = listeners.get(eventName);\n        while (node != null) {\n            if (\n                node.listener === listener &&\n                node.listenerType === listenerType\n            ) {\n                if (prev !== null) {\n                    prev.next = node.next;\n                } else if (node.next !== null) {\n                    listeners.set(eventName, node.next);\n                } else {\n                    listeners.delete(eventName);\n                }\n                return\n            }\n\n            prev = node;\n            node = node.next;\n        }\n    },\n\n    /**\n     * Dispatch a given event.\n     * @param {Event|{type:string}} event The event to dispatch.\n     * @returns {boolean} `false` if canceled.\n     */\n    dispatchEvent(event) {\n        if (event == null || typeof event.type !== \"string\") {\n            throw new TypeError('\"event.type\" should be a string.')\n        }\n\n        // If listeners aren't registered, terminate.\n        const listeners = getListeners(this);\n        const eventName = event.type;\n        let node = listeners.get(eventName);\n        if (node == null) {\n            return true\n        }\n\n        // Since we cannot rewrite several properties, so wrap object.\n        const wrappedEvent = wrapEvent(this, event);\n\n        // This doesn't process capturing phase and bubbling phase.\n        // This isn't participating in a tree.\n        let prev = null;\n        while (node != null) {\n            // Remove this listener if it's once\n            if (node.once) {\n                if (prev !== null) {\n                    prev.next = node.next;\n                } else if (node.next !== null) {\n                    listeners.set(eventName, node.next);\n                } else {\n                    listeners.delete(eventName);\n                }\n            } else {\n                prev = node;\n            }\n\n            // Call this listener\n            setPassiveListener(\n                wrappedEvent,\n                node.passive ? node.listener : null\n            );\n            if (typeof node.listener === \"function\") {\n                try {\n                    node.listener.call(this, wrappedEvent);\n                } catch (err) {\n                    if (\n                        typeof console !== \"undefined\" &&\n                        typeof console.error === \"function\"\n                    ) {\n                        console.error(err);\n                    }\n                }\n            } else if (\n                node.listenerType !== ATTRIBUTE &&\n                typeof node.listener.handleEvent === \"function\"\n            ) {\n                node.listener.handleEvent(wrappedEvent);\n            }\n\n            // Break if `event.stopImmediatePropagation` was called.\n            if (isStopped(wrappedEvent)) {\n                break\n            }\n\n            node = node.next;\n        }\n        setPassiveListener(wrappedEvent, null);\n        setEventPhase(wrappedEvent, 0);\n        setCurrentTarget(wrappedEvent, null);\n\n        return !wrappedEvent.defaultPrevented\n    },\n};\n\n// `constructor` is not enumerable.\nObject.defineProperty(EventTarget.prototype, \"constructor\", {\n    value: EventTarget,\n    configurable: true,\n    writable: true,\n});\n\n// Ensure `eventTarget instanceof window.EventTarget` is `true`.\nif (\n    typeof window !== \"undefined\" &&\n    typeof window.EventTarget !== \"undefined\"\n) {\n    Object.setPrototypeOf(EventTarget.prototype, window.EventTarget.prototype);\n}\n\nexport default EventTarget;\nexport { defineEventAttribute, EventTarget };\n//# sourceMappingURL=event-target-shim.mjs.map\n/README.md\"# event-target-shim\n\n[![npm version](https://img.shields.io/npm/v/event-target-shim.svg)](https://www.npmjs.com/package/event-target-shim)\n[![Downloads/month](https://img.shields.io/npm/dm/event-target-shim.svg)](http://www.npmtrends.com/event-target-shim)\n[![Build Status](https://travis-ci.org/mysticatea/event-target-shim.svg?branch=master)](https://travis-ci.org/mysticatea/event-target-shim)\n[![Coverage Status](https://codecov.io/gh/mysticatea/event-target-shim/branch/master/graph/badge.svg)](https://codecov.io/gh/mysticatea/event-target-shim)\n[![Dependency Status](https://david-dm.org/mysticatea/event-target-shim.svg)](https://david-dm.org/mysticatea/event-target-shim)\n\nAn implementation of [WHATWG EventTarget interface](https://dom.spec.whatwg.org/#interface-eventtarget), plus few extensions.\n\n- This provides `EventTarget` constructor that can inherit for your custom object.\n- This provides an utility that defines properties of attribute listeners (e.g. `obj.onclick`).\n\n```js\nimport {EventTarget, defineEventAttribute} from \"event-target-shim\"\n\nclass Foo extends EventTarget {\n    // ...\n}\n\n// Define `foo.onhello` property.\ndefineEventAttribute(Foo.prototype, \"hello\")\n\n// Use\nconst foo = new Foo()\nfoo.addEventListener(\"hello\", e => console.log(\"hello\", e))\nfoo.onhello = e => console.log(\"onhello:\", e)\nfoo.dispatchEvent(new CustomEvent(\"hello\"))\n```\n\n## 💿 Installation\n\nUse [npm](https://www.npmjs.com/) to install then use a bundler.\n\n```\nnpm install event-target-shim\n```\n\nOr download from [`dist` directory](./dist).\n\n- [dist/event-target-shim.mjs](dist/event-target-shim.mjs) ... ES modules version.\n- [dist/event-target-shim.js](dist/event-target-shim.js) ... Common JS version.\n- [dist/event-target-shim.umd.js](dist/event-target-shim.umd.js) ... UMD (Universal Module Definition) version. This is transpiled by [Babel](https://babeljs.io/) for IE 11.\n\n## 📖 Usage\n\n```js\nimport {EventTarget, defineEventAttribute} from \"event-target-shim\"\n// or\nconst {EventTarget, defineEventAttribute} = require(\"event-target-shim\")\n\n// or UMD version defines a global variable:\nconst {EventTarget, defineEventAttribute} = window.EventTargetShim\n```\n\n### EventTarget\n\n> https://dom.spec.whatwg.org/#interface-eventtarget\n\n#### eventTarget.addEventListener(type, callback, options)\n\nRegister an event listener.\n\n- `type` is a string. This is the event name to register.\n- `callback` is a function. This is the event listener to register.\n- `options` is a boolean or an object `{ capture?: boolean, passive?: boolean, once?: boolean }`. If this is a boolean, it's same meaning as `{ capture: options }`.\n    - `capture` is the flag to register the event listener for capture phase.\n    - `passive` is the flag to ignore `event.preventDefault()` method in the event listener.\n    - `once` is the flag to remove the event listener automatically after the first call.\n\n#### eventTarget.removeEventListener(type, callback, options)\n\nUnregister an event listener.\n\n- `type` is a string. This is the event name to unregister.\n- `callback` is a function. This is the event listener to unregister.\n- `options` is a boolean or an object `{ capture?: boolean }`. If this is a boolean, it's same meaning as `{ capture: options }`.\n    - `capture` is the flag to register the event listener for capture phase.\n\n#### eventTarget.dispatchEvent(event)\n\nDispatch an event.\n\n- `event` is a [Event](https://dom.spec.whatwg.org/#event) object or an object `{ type: string, [key: string]: any }`. The latter is non-standard but useful. In both cases, listeners receive the event as implementing [Event](https://dom.spec.whatwg.org/#event) interface.\n\n### defineEventAttribute(proto, type)\n\nDefine an event attribute (e.g. `onclick`) to `proto`. This is non-standard.\n\n- `proto` is an object (assuming it's a prototype object). This function defines a getter/setter pair for the event attribute.\n- `type` is a string. This is the event name to define.\n\nFor example:\n\n```js\nclass AbortSignal extends EventTarget {\n    constructor() {\n        this.aborted = false\n    }\n}\n// Define `onabort` property.\ndefineEventAttribute(AbortSignal.prototype, \"abort\")\n```\n\n### EventTarget(types)\n\nDefine a custom `EventTarget` class with event attributes. This is non-standard.\n\n- `types` is a string or an array of strings. This is the event name to define.\n\nFor example:\n\n```js\n// This has `onabort` property.\nclass AbortSignal extends EventTarget(\"abort\") {\n    constructor() {\n        this.aborted = false\n    }\n}\n```\n\n## 📚 Examples\n\n### ES2015 and later\n\n> https://jsfiddle.net/636vea92/\n\n```js\nconst {EventTarget, defineEventAttribute} = EventTargetShim\n\n// Define a derived class.\nclass Foo extends EventTarget {\n    // ...\n}\n\n// Define `foo.onhello` property.\ndefineEventAttribute(Foo.prototype, \"hello\")\n\n// Register event listeners.\nconst foo = new Foo()\nfoo.addEventListener(\"hello\", (e) => {\n    console.log(\"hello\", e)\n})\nfoo.onhello = (e) => {\n    console.log(\"onhello\", e)\n}\n\n// Dispatching events\nfoo.dispatchEvent(new CustomEvent(\"hello\", { detail: \"detail\" }))\n```\n\n### Typescript\n\n```ts\nimport { EventTarget, defineEventAttribute } from \"event-target-shim\";\n\n// Define events\ntype FooEvents = {\n    hello: CustomEvent\n}\ntype FooEventAttributes = {\n    onhello: CustomEvent\n}\n\n// Define a derived class.\nclass Foo extends EventTarget<FooEvents, FooEventAttributes> {\n    // ...\n}\n// Define `foo.onhello` property's implementation.\ndefineEventAttribute(Foo.prototype, \"hello\")\n\n// Register event listeners.\nconst foo = new Foo()\nfoo.addEventListener(\"hello\", (e) => {\n    console.log(\"hello\", e.detail)\n})\nfoo.onhello = (e) => {\n    console.log(\"onhello\", e.detail)\n}\n\n// Dispatching events\nfoo.dispatchEvent(new CustomEvent(\"hello\", { detail: \"detail\" }))\n```\n\nUnfortunately, both `FooEvents` and `FooEventAttributes` are needed because TypeScript doesn't allow the mutation of string literal types. If TypeScript allowed us to compute `\"onhello\"` from `\"hello\"` in types, `FooEventAttributes` will be optional.\n\nThis `EventTarget` type is compatible with `EventTarget` interface of `lib.dom.d.ts`.\n\n#### To disallow unknown events\n\nBy default, methods such as `addEventListener` accept unknown events. You can disallow unknown events by the third type parameter `\"strict\"`.\n\n```ts\ntype FooEvents = {\n    hello: CustomEvent\n}\nclass Foo extends EventTarget<FooEvents, {}, \"strict\"> {\n    // ...\n}\n\n// OK because `hello` is defined in FooEvents.\nfoo.addEventListener(\"hello\", (e) => {\n})\n// Error because `unknown` is not defined in FooEvents.\nfoo.addEventListener(\"unknown\", (e) => {\n})\n```\n\nHowever, if you use `\"strict\"` parameter, it loses compatibility with `EventTarget` interface of `lib.dom.d.ts`.\n\n#### To infer the type of `dispatchEvent()` method\n\nTypeScript cannot infer the event type of `dispatchEvent()` method properly from the argument in most cases. You can improve this behavior with the following steps:\n\n1. Use the third type parameter `\"strict\"`. This prevents inferring to `dispatchEvent<string>()`.\n2. Make the `type` property of event definitions stricter.\n\n```ts\ntype FooEvents = {\n    hello: CustomEvent & { type: \"hello\" }\n    hey: Event & { type: \"hey\" }\n}\nclass Foo extends EventTarget<FooEvents, {}, \"strict\"> {\n    // ...\n}\n\n// Error because `detail` property is lacking.\nfoo.dispatchEvent({ type: \"hello\" })\n```\n\n### ES5\n\n> https://jsfiddle.net/522zc9de/\n\n```js\n// Define a derived class.\nfunction Foo() {\n    EventTarget.call(this)\n}\nFoo.prototype = Object.create(EventTarget.prototype, {\n    constructor: { value: Foo, configurable: true, writable: true }\n    // ...\n})\n\n// Define `foo.onhello` property.\ndefineEventAttribute(Foo.prototype, \"hello\")\n\n// Register event listeners.\nvar foo = new Foo()\nfoo.addEventListener(\"hello\", function(e) {\n    console.log(\"hello\", e)\n})\nfoo.onhello = function(e) {\n    console.log(\"onhello\", e)\n}\n\n// Dispatching events\nfunction isSupportEventConstrucor() { // IE does not support.\n    try {\n        new CusomEvent(\"hello\")\n        return true\n    } catch (_err) {\n        return false\n    }\n}\nif (isSupportEventConstrucor()) {\n    foo.dispatchEvent(new CustomEvent(\"hello\", { detail: \"detail\" }))\n} else {\n    var e = document.createEvent(\"CustomEvent\")\n    e.initCustomEvent(\"hello\", false, false, \"detail\")\n    foo.dispatchEvent(e)\n}\n```\n\n## 📰 Changelog\n\n- See [GitHub releases](https://github.com/mysticatea/event-target-shim/releases).\n\n## 🍻 Contributing\n\nContributing is welcome ❤️\n\nPlease use GitHub issues/PRs.\n\n### Development tools\n\n- `npm install` installs dependencies for development.\n- `npm test` runs tests and measures code coverage.\n- `npm run clean` removes temporary files of tests.\n- `npm run coverage` opens code coverage of the previous test with your default browser.\n- `npm run lint` runs ESLint.\n- `npm run build` generates `dist` codes.\n- `npm run watch` runs tests on each file change.\n/dist/event-target-shim.js.mapŐ{\"version\":3,\"file\":\"event-target-shim.js\",\"sources\":[\"../src/event.mjs\",\"../src/event-target.mjs\"],\"sourcesContent\":[\"/**\\n * @typedef {object} PrivateData\\n * @property {EventTarget} eventTarget The event target.\\n * @property {{type:string}} event The original event object.\\n * @property {number} eventPhase The current event phase.\\n * @property {EventTarget|null} currentTarget The current event target.\\n * @property {boolean} canceled The flag to prevent default.\\n * @property {boolean} stopped The flag to stop propagation.\\n * @property {boolean} immediateStopped The flag to stop propagation immediately.\\n * @property {Function|null} passiveListener The listener if the current listener is passive. Otherwise this is null.\\n * @property {number} timeStamp The unix time.\\n * @private\\n */\\n\\n/**\\n * Private data for event wrappers.\\n * @type {WeakMap<Event, PrivateData>}\\n * @private\\n */\\nconst privateData = new WeakMap()\\n\\n/**\\n * Cache for wrapper classes.\\n * @type {WeakMap<Object, Function>}\\n * @private\\n */\\nconst wrappers = new WeakMap()\\n\\n/**\\n * Get private data.\\n * @param {Event} event The event object to get private data.\\n * @returns {PrivateData} The private data of the event.\\n * @private\\n */\\nfunction pd(event) {\\n    const retv = privateData.get(event)\\n    console.assert(\\n        retv != null,\\n        \\\"'this' is expected an Event object, but got\\\",\\n        event\\n    )\\n    return retv\\n}\\n\\n/**\\n * https://dom.spec.whatwg.org/#set-the-canceled-flag\\n * @param data {PrivateData} private data.\\n */\\nfunction setCancelFlag(data) {\\n    if (data.passiveListener != null) {\\n        if (\\n            typeof console !== \\\"undefined\\\" &&\\n            typeof console.error === \\\"function\\\"\\n        ) {\\n            console.error(\\n                \\\"Unable to preventDefault inside passive event listener invocation.\\\",\\n                data.passiveListener\\n            )\\n        }\\n        return\\n    }\\n    if (!data.event.cancelable) {\\n        return\\n    }\\n\\n    data.canceled = true\\n    if (typeof data.event.preventDefault === \\\"function\\\") {\\n        data.event.preventDefault()\\n    }\\n}\\n\\n/**\\n * @see https://dom.spec.whatwg.org/#interface-event\\n * @private\\n */\\n/**\\n * The event wrapper.\\n * @constructor\\n * @param {EventTarget} eventTarget The event target of this dispatching.\\n * @param {Event|{type:string}} event The original event to wrap.\\n */\\nfunction Event(eventTarget, event) {\\n    privateData.set(this, {\\n        eventTarget,\\n        event,\\n        eventPhase: 2,\\n        currentTarget: eventTarget,\\n        canceled: false,\\n        stopped: false,\\n        immediateStopped: false,\\n        passiveListener: null,\\n        timeStamp: event.timeStamp || Date.now(),\\n    })\\n\\n    // https://heycam.github.io/webidl/#Unforgeable\\n    Object.defineProperty(this, \\\"isTrusted\\\", { value: false, enumerable: true })\\n\\n    // Define accessors\\n    const keys = Object.keys(event)\\n    for (let i = 0; i < keys.length; ++i) {\\n        const key = keys[i]\\n        if (!(key in this)) {\\n            Object.defineProperty(this, key, defineRedirectDescriptor(key))\\n        }\\n    }\\n}\\n\\n// Should be enumerable, but class methods are not enumerable.\\nEvent.prototype = {\\n    /**\\n     * The type of this event.\\n     * @type {string}\\n     */\\n    get type() {\\n        return pd(this).event.type\\n    },\\n\\n    /**\\n     * The target of this event.\\n     * @type {EventTarget}\\n     */\\n    get target() {\\n        return pd(this).eventTarget\\n    },\\n\\n    /**\\n     * The target of this event.\\n     * @type {EventTarget}\\n     */\\n    get currentTarget() {\\n        return pd(this).currentTarget\\n    },\\n\\n    /**\\n     * @returns {EventTarget[]} The composed path of this event.\\n     */\\n    composedPath() {\\n        const currentTarget = pd(this).currentTarget\\n        if (currentTarget == null) {\\n            return []\\n        }\\n        return [currentTarget]\\n    },\\n\\n    /**\\n     * Constant of NONE.\\n     * @type {number}\\n     */\\n    get NONE() {\\n        return 0\\n    },\\n\\n    /**\\n     * Constant of CAPTURING_PHASE.\\n     * @type {number}\\n     */\\n    get CAPTURING_PHASE() {\\n        return 1\\n    },\\n\\n    /**\\n     * Constant of AT_TARGET.\\n     * @type {number}\\n     */\\n    get AT_TARGET() {\\n        return 2\\n    },\\n\\n    /**\\n     * Constant of BUBBLING_PHASE.\\n     * @type {number}\\n     */\\n    get BUBBLING_PHASE() {\\n        return 3\\n    },\\n\\n    /**\\n     * The target of this event.\\n     * @type {number}\\n     */\\n    get eventPhase() {\\n        return pd(this).eventPhase\\n    },\\n\\n    /**\\n     * Stop event bubbling.\\n     * @returns {void}\\n     */\\n    stopPropagation() {\\n        const data = pd(this)\\n\\n        data.stopped = true\\n        if (typeof data.event.stopPropagation === \\\"function\\\") {\\n            data.event.stopPropagation()\\n        }\\n    },\\n\\n    /**\\n     * Stop event bubbling.\\n     * @returns {void}\\n     */\\n    stopImmediatePropagation() {\\n        const data = pd(this)\\n\\n        data.stopped = true\\n        data.immediateStopped = true\\n        if (typeof data.event.stopImmediatePropagation === \\\"function\\\") {\\n            data.event.stopImmediatePropagation()\\n        }\\n    },\\n\\n    /**\\n     * The flag to be bubbling.\\n     * @type {boolean}\\n     */\\n    get bubbles() {\\n        return Boolean(pd(this).event.bubbles)\\n    },\\n\\n    /**\\n     * The flag to be cancelable.\\n     * @type {boolean}\\n     */\\n    get cancelable() {\\n        return Boolean(pd(this).event.cancelable)\\n    },\\n\\n    /**\\n     * Cancel this event.\\n     * @returns {void}\\n     */\\n    preventDefault() {\\n        setCancelFlag(pd(this))\\n    },\\n\\n    /**\\n     * The flag to indicate cancellation state.\\n     * @type {boolean}\\n     */\\n    get defaultPrevented() {\\n        return pd(this).canceled\\n    },\\n\\n    /**\\n     * The flag to be composed.\\n     * @type {boolean}\\n     */\\n    get composed() {\\n        return Boolean(pd(this).event.composed)\\n    },\\n\\n    /**\\n     * The unix time of this event.\\n     * @type {number}\\n     */\\n    get timeStamp() {\\n        return pd(this).timeStamp\\n    },\\n\\n    /**\\n     * The target of this event.\\n     * @type {EventTarget}\\n     * @deprecated\\n     */\\n    get srcElement() {\\n        return pd(this).eventTarget\\n    },\\n\\n    /**\\n     * The flag to stop event bubbling.\\n     * @type {boolean}\\n     * @deprecated\\n     */\\n    get cancelBubble() {\\n        return pd(this).stopped\\n    },\\n    set cancelBubble(value) {\\n        if (!value) {\\n            return\\n        }\\n        const data = pd(this)\\n\\n        data.stopped = true\\n        if (typeof data.event.cancelBubble === \\\"boolean\\\") {\\n            data.event.cancelBubble = true\\n        }\\n    },\\n\\n    /**\\n     * The flag to indicate cancellation state.\\n     * @type {boolean}\\n     * @deprecated\\n     */\\n    get returnValue() {\\n        return !pd(this).canceled\\n    },\\n    set returnValue(value) {\\n        if (!value) {\\n            setCancelFlag(pd(this))\\n        }\\n    },\\n\\n    /**\\n     * Initialize this event object. But do nothing under event dispatching.\\n     * @param {string} type The event type.\\n     * @param {boolean} [bubbles=false] The flag to be possible to bubble up.\\n     * @param {boolean} [cancelable=false] The flag to be possible to cancel.\\n     * @deprecated\\n     */\\n    initEvent() {\\n        // Do nothing.\\n    },\\n}\\n\\n// `constructor` is not enumerable.\\nObject.defineProperty(Event.prototype, \\\"constructor\\\", {\\n    value: Event,\\n    configurable: true,\\n    writable: true,\\n})\\n\\n// Ensure `event instanceof window.Event` is `true`.\\nif (typeof window !== \\\"undefined\\\" && typeof window.Event !== \\\"undefined\\\") {\\n    Object.setPrototypeOf(Event.prototype, window.Event.prototype)\\n\\n    // Make association for wrappers.\\n    wrappers.set(window.Event.prototype, Event)\\n}\\n\\n/**\\n * Get the property descriptor to redirect a given property.\\n * @param {string} key Property name to define property descriptor.\\n * @returns {PropertyDescriptor} The property descriptor to redirect the property.\\n * @private\\n */\\nfunction defineRedirectDescriptor(key) {\\n    return {\\n        get() {\\n            return pd(this).event[key]\\n        },\\n        set(value) {\\n            pd(this).event[key] = value\\n        },\\n        configurable: true,\\n        enumerable: true,\\n    }\\n}\\n\\n/**\\n * Get the property descriptor to call a given method property.\\n * @param {string} key Property name to define property descriptor.\\n * @returns {PropertyDescriptor} The property descriptor to call the method property.\\n * @private\\n */\\nfunction defineCallDescriptor(key) {\\n    return {\\n        value() {\\n            const event = pd(this).event\\n            return event[key].apply(event, arguments)\\n        },\\n        configurable: true,\\n        enumerable: true,\\n    }\\n}\\n\\n/**\\n * Define new wrapper class.\\n * @param {Function} BaseEvent The base wrapper class.\\n * @param {Object} proto The prototype of the original event.\\n * @returns {Function} The defined wrapper class.\\n * @private\\n */\\nfunction defineWrapper(BaseEvent, proto) {\\n    const keys = Object.keys(proto)\\n    if (keys.length === 0) {\\n        return BaseEvent\\n    }\\n\\n    /** CustomEvent */\\n    function CustomEvent(eventTarget, event) {\\n        BaseEvent.call(this, eventTarget, event)\\n    }\\n\\n    CustomEvent.prototype = Object.create(BaseEvent.prototype, {\\n        constructor: { value: CustomEvent, configurable: true, writable: true },\\n    })\\n\\n    // Define accessors.\\n    for (let i = 0; i < keys.length; ++i) {\\n        const key = keys[i]\\n        if (!(key in BaseEvent.prototype)) {\\n            const descriptor = Object.getOwnPropertyDescriptor(proto, key)\\n            const isFunc = typeof descriptor.value === \\\"function\\\"\\n            Object.defineProperty(\\n                CustomEvent.prototype,\\n                key,\\n                isFunc\\n                    ? defineCallDescriptor(key)\\n                    : defineRedirectDescriptor(key)\\n            )\\n        }\\n    }\\n\\n    return CustomEvent\\n}\\n\\n/**\\n * Get the wrapper class of a given prototype.\\n * @param {Object} proto The prototype of the original event to get its wrapper.\\n * @returns {Function} The wrapper class.\\n * @private\\n */\\nfunction getWrapper(proto) {\\n    if (proto == null || proto === Object.prototype) {\\n        return Event\\n    }\\n\\n    let wrapper = wrappers.get(proto)\\n    if (wrapper == null) {\\n        wrapper = defineWrapper(getWrapper(Object.getPrototypeOf(proto)), proto)\\n        wrappers.set(proto, wrapper)\\n    }\\n    return wrapper\\n}\\n\\n/**\\n * Wrap a given event to management a dispatching.\\n * @param {EventTarget} eventTarget The event target of this dispatching.\\n * @param {Object} event The event to wrap.\\n * @returns {Event} The wrapper instance.\\n * @private\\n */\\nexport function wrapEvent(eventTarget, event) {\\n    const Wrapper = getWrapper(Object.getPrototypeOf(event))\\n    return new Wrapper(eventTarget, event)\\n}\\n\\n/**\\n * Get the immediateStopped flag of a given event.\\n * @param {Event} event The event to get.\\n * @returns {boolean} The flag to stop propagation immediately.\\n * @private\\n */\\nexport function isStopped(event) {\\n    return pd(event).immediateStopped\\n}\\n\\n/**\\n * Set the current event phase of a given event.\\n * @param {Event} event The event to set current target.\\n * @param {number} eventPhase New event phase.\\n * @returns {void}\\n * @private\\n */\\nexport function setEventPhase(event, eventPhase) {\\n    pd(event).eventPhase = eventPhase\\n}\\n\\n/**\\n * Set the current target of a given event.\\n * @param {Event} event The event to set current target.\\n * @param {EventTarget|null} currentTarget New current target.\\n * @returns {void}\\n * @private\\n */\\nexport function setCurrentTarget(event, currentTarget) {\\n    pd(event).currentTarget = currentTarget\\n}\\n\\n/**\\n * Set a passive listener of a given event.\\n * @param {Event} event The event to set current target.\\n * @param {Function|null} passiveListener New passive listener.\\n * @returns {void}\\n * @private\\n */\\nexport function setPassiveListener(event, passiveListener) {\\n    pd(event).passiveListener = passiveListener\\n}\\n\",\"import {\\n    isStopped,\\n    setCurrentTarget,\\n    setEventPhase,\\n    setPassiveListener,\\n    wrapEvent,\\n} from \\\"./event.mjs\\\"\\n\\n/**\\n * @typedef {object} ListenerNode\\n * @property {Function} listener\\n * @property {1|2|3} listenerType\\n * @property {boolean} passive\\n * @property {boolean} once\\n * @property {ListenerNode|null} next\\n * @private\\n */\\n\\n/**\\n * @type {WeakMap<object, Map<string, ListenerNode>>}\\n * @private\\n */\\nconst listenersMap = new WeakMap()\\n\\n// Listener types\\nconst CAPTURE = 1\\nconst BUBBLE = 2\\nconst ATTRIBUTE = 3\\n\\n/**\\n * Check whether a given value is an object or not.\\n * @param {any} x The value to check.\\n * @returns {boolean} `true` if the value is an object.\\n */\\nfunction isObject(x) {\\n    return x !== null && typeof x === \\\"object\\\" //eslint-disable-line no-restricted-syntax\\n}\\n\\n/**\\n * Get listeners.\\n * @param {EventTarget} eventTarget The event target to get.\\n * @returns {Map<string, ListenerNode>} The listeners.\\n * @private\\n */\\nfunction getListeners(eventTarget) {\\n    const listeners = listenersMap.get(eventTarget)\\n    if (listeners == null) {\\n        throw new TypeError(\\n            \\\"'this' is expected an EventTarget object, but got another value.\\\"\\n        )\\n    }\\n    return listeners\\n}\\n\\n/**\\n * Get the property descriptor for the event attribute of a given event.\\n * @param {string} eventName The event name to get property descriptor.\\n * @returns {PropertyDescriptor} The property descriptor.\\n * @private\\n */\\nfunction defineEventAttributeDescriptor(eventName) {\\n    return {\\n        get() {\\n            const listeners = getListeners(this)\\n            let node = listeners.get(eventName)\\n            while (node != null) {\\n                if (node.listenerType === ATTRIBUTE) {\\n                    return node.listener\\n                }\\n                node = node.next\\n            }\\n            return null\\n        },\\n\\n        set(listener) {\\n            if (typeof listener !== \\\"function\\\" && !isObject(listener)) {\\n                listener = null // eslint-disable-line no-param-reassign\\n            }\\n            const listeners = getListeners(this)\\n\\n            // Traverse to the tail while removing old value.\\n            let prev = null\\n            let node = listeners.get(eventName)\\n            while (node != null) {\\n                if (node.listenerType === ATTRIBUTE) {\\n                    // Remove old value.\\n                    if (prev !== null) {\\n                        prev.next = node.next\\n                    } else if (node.next !== null) {\\n                        listeners.set(eventName, node.next)\\n                    } else {\\n                        listeners.delete(eventName)\\n                    }\\n                } else {\\n                    prev = node\\n                }\\n\\n                node = node.next\\n            }\\n\\n            // Add new value.\\n            if (listener !== null) {\\n                const newNode = {\\n                    listener,\\n                    listenerType: ATTRIBUTE,\\n                    passive: false,\\n                    once: false,\\n                    next: null,\\n                }\\n                if (prev === null) {\\n                    listeners.set(eventName, newNode)\\n                } else {\\n                    prev.next = newNode\\n                }\\n            }\\n        },\\n        configurable: true,\\n        enumerable: true,\\n    }\\n}\\n\\n/**\\n * Define an event attribute (e.g. `eventTarget.onclick`).\\n * @param {Object} eventTargetPrototype The event target prototype to define an event attrbite.\\n * @param {string} eventName The event name to define.\\n * @returns {void}\\n */\\nfunction defineEventAttribute(eventTargetPrototype, eventName) {\\n    Object.defineProperty(\\n        eventTargetPrototype,\\n        `on${eventName}`,\\n        defineEventAttributeDescriptor(eventName)\\n    )\\n}\\n\\n/**\\n * Define a custom EventTarget with event attributes.\\n * @param {string[]} eventNames Event names for event attributes.\\n * @returns {EventTarget} The custom EventTarget.\\n * @private\\n */\\nfunction defineCustomEventTarget(eventNames) {\\n    /** CustomEventTarget */\\n    function CustomEventTarget() {\\n        EventTarget.call(this)\\n    }\\n\\n    CustomEventTarget.prototype = Object.create(EventTarget.prototype, {\\n        constructor: {\\n            value: CustomEventTarget,\\n            configurable: true,\\n            writable: true,\\n        },\\n    })\\n\\n    for (let i = 0; i < eventNames.length; ++i) {\\n        defineEventAttribute(CustomEventTarget.prototype, eventNames[i])\\n    }\\n\\n    return CustomEventTarget\\n}\\n\\n/**\\n * EventTarget.\\n *\\n * - This is constructor if no arguments.\\n * - This is a function which returns a CustomEventTarget constructor if there are arguments.\\n *\\n * For example:\\n *\\n *     class A extends EventTarget {}\\n *     class B extends EventTarget(\\\"message\\\") {}\\n *     class C extends EventTarget(\\\"message\\\", \\\"error\\\") {}\\n *     class D extends EventTarget([\\\"message\\\", \\\"error\\\"]) {}\\n */\\nfunction EventTarget() {\\n    /*eslint-disable consistent-return */\\n    if (this instanceof EventTarget) {\\n        listenersMap.set(this, new Map())\\n        return\\n    }\\n    if (arguments.length === 1 && Array.isArray(arguments[0])) {\\n        return defineCustomEventTarget(arguments[0])\\n    }\\n    if (arguments.length > 0) {\\n        const types = new Array(arguments.length)\\n        for (let i = 0; i < arguments.length; ++i) {\\n            types[i] = arguments[i]\\n        }\\n        return defineCustomEventTarget(types)\\n    }\\n    throw new TypeError(\\\"Cannot call a class as a function\\\")\\n    /*eslint-enable consistent-return */\\n}\\n\\n// Should be enumerable, but class methods are not enumerable.\\nEventTarget.prototype = {\\n    /**\\n     * Add a given listener to this event target.\\n     * @param {string} eventName The event name to add.\\n     * @param {Function} listener The listener to add.\\n     * @param {boolean|{capture?:boolean,passive?:boolean,once?:boolean}} [options] The options for this listener.\\n     * @returns {void}\\n     */\\n    addEventListener(eventName, listener, options) {\\n        if (listener == null) {\\n            return\\n        }\\n        if (typeof listener !== \\\"function\\\" && !isObject(listener)) {\\n            throw new TypeError(\\\"'listener' should be a function or an object.\\\")\\n        }\\n\\n        const listeners = getListeners(this)\\n        const optionsIsObj = isObject(options)\\n        const capture = optionsIsObj\\n            ? Boolean(options.capture)\\n            : Boolean(options)\\n        const listenerType = capture ? CAPTURE : BUBBLE\\n        const newNode = {\\n            listener,\\n            listenerType,\\n            passive: optionsIsObj && Boolean(options.passive),\\n            once: optionsIsObj && Boolean(options.once),\\n            next: null,\\n        }\\n\\n        // Set it as the first node if the first node is null.\\n        let node = listeners.get(eventName)\\n        if (node === undefined) {\\n            listeners.set(eventName, newNode)\\n            return\\n        }\\n\\n        // Traverse to the tail while checking duplication..\\n        let prev = null\\n        while (node != null) {\\n            if (\\n                node.listener === listener &&\\n                node.listenerType === listenerType\\n            ) {\\n                // Should ignore duplication.\\n                return\\n            }\\n            prev = node\\n            node = node.next\\n        }\\n\\n        // Add it.\\n        prev.next = newNode\\n    },\\n\\n    /**\\n     * Remove a given listener from this event target.\\n     * @param {string} eventName The event name to remove.\\n     * @param {Function} listener The listener to remove.\\n     * @param {boolean|{capture?:boolean,passive?:boolean,once?:boolean}} [options] The options for this listener.\\n     * @returns {void}\\n     */\\n    removeEventListener(eventName, listener, options) {\\n        if (listener == null) {\\n            return\\n        }\\n\\n        const listeners = getListeners(this)\\n        const capture = isObject(options)\\n            ? Boolean(options.capture)\\n            : Boolean(options)\\n        const listenerType = capture ? CAPTURE : BUBBLE\\n\\n        let prev = null\\n        let node = listeners.get(eventName)\\n        while (node != null) {\\n            if (\\n                node.listener === listener &&\\n                node.listenerType === listenerType\\n            ) {\\n                if (prev !== null) {\\n                    prev.next = node.next\\n                } else if (node.next !== null) {\\n                    listeners.set(eventName, node.next)\\n                } else {\\n                    listeners.delete(eventName)\\n                }\\n                return\\n            }\\n\\n            prev = node\\n            node = node.next\\n        }\\n    },\\n\\n    /**\\n     * Dispatch a given event.\\n     * @param {Event|{type:string}} event The event to dispatch.\\n     * @returns {boolean} `false` if canceled.\\n     */\\n    dispatchEvent(event) {\\n        if (event == null || typeof event.type !== \\\"string\\\") {\\n            throw new TypeError('\\\"event.type\\\" should be a string.')\\n        }\\n\\n        // If listeners aren't registered, terminate.\\n        const listeners = getListeners(this)\\n        const eventName = event.type\\n        let node = listeners.get(eventName)\\n        if (node == null) {\\n            return true\\n        }\\n\\n        // Since we cannot rewrite several properties, so wrap object.\\n        const wrappedEvent = wrapEvent(this, event)\\n\\n        // This doesn't process capturing phase and bubbling phase.\\n        // This isn't participating in a tree.\\n        let prev = null\\n        while (node != null) {\\n            // Remove this listener if it's once\\n            if (node.once) {\\n                if (prev !== null) {\\n                    prev.next = node.next\\n                } else if (node.next !== null) {\\n                    listeners.set(eventName, node.next)\\n                } else {\\n                    listeners.delete(eventName)\\n                }\\n            } else {\\n                prev = node\\n            }\\n\\n            // Call this listener\\n            setPassiveListener(\\n                wrappedEvent,\\n                node.passive ? node.listener : null\\n            )\\n            if (typeof node.listener === \\\"function\\\") {\\n                try {\\n                    node.listener.call(this, wrappedEvent)\\n                } catch (err) {\\n                    if (\\n                        typeof console !== \\\"undefined\\\" &&\\n                        typeof console.error === \\\"function\\\"\\n                    ) {\\n                        console.error(err)\\n                    }\\n                }\\n            } else if (\\n                node.listenerType !== ATTRIBUTE &&\\n                typeof node.listener.handleEvent === \\\"function\\\"\\n            ) {\\n                node.listener.handleEvent(wrappedEvent)\\n            }\\n\\n            // Break if `event.stopImmediatePropagation` was called.\\n            if (isStopped(wrappedEvent)) {\\n                break\\n            }\\n\\n            node = node.next\\n        }\\n        setPassiveListener(wrappedEvent, null)\\n        setEventPhase(wrappedEvent, 0)\\n        setCurrentTarget(wrappedEvent, null)\\n\\n        return !wrappedEvent.defaultPrevented\\n    },\\n}\\n\\n// `constructor` is not enumerable.\\nObject.defineProperty(EventTarget.prototype, \\\"constructor\\\", {\\n    value: EventTarget,\\n    configurable: true,\\n    writable: true,\\n})\\n\\n// Ensure `eventTarget instanceof window.EventTarget` is `true`.\\nif (\\n    typeof window !== \\\"undefined\\\" &&\\n    typeof window.EventTarget !== \\\"undefined\\\"\\n) {\\n    Object.setPrototypeOf(EventTarget.prototype, window.EventTarget.prototype)\\n}\\n\\nexport { defineEventAttribute, EventTarget }\\nexport default EventTarget\\n\"],\"names\":[],\"mappings\":\";;;;;;;;;AAAA;;;;;;;;;;;;;;;;;;;AAmBA,MAAM,WAAW,GAAG,IAAI,OAAO,GAAE;;;;;;;AAOjC,MAAM,QAAQ,GAAG,IAAI,OAAO,GAAE;;;;;;;;AAQ9B,SAAS,EAAE,CAAC,KAAK,EAAE;IACf,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,EAAC;IACnC,OAAO,CAAC,MAAM;QACV,IAAI,IAAI,IAAI;QACZ,6CAA6C;QAC7C,KAAK;MACR;IACD,OAAO,IAAI;CACd;;;;;;AAMD,SAAS,aAAa,CAAC,IAAI,EAAE;IACzB,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,EAAE;QAC9B;YACI,OAAO,OAAO,KAAK,WAAW;YAC9B,OAAO,OAAO,CAAC,KAAK,KAAK,UAAU;UACrC;YACE,OAAO,CAAC,KAAK;gBACT,oEAAoE;gBACpE,IAAI,CAAC,eAAe;cACvB;SACJ;QACD,MAAM;KACT;IACD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE;QACxB,MAAM;KACT;;IAED,IAAI,CAAC,QAAQ,GAAG,KAAI;IACpB,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,cAAc,KAAK,UAAU,EAAE;QACjD,IAAI,CAAC,KAAK,CAAC,cAAc,GAAE;KAC9B;CACJ;;;;;;;;;;;;AAYD,SAAS,KAAK,CAAC,WAAW,EAAE,KAAK,EAAE;IAC/B,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE;QAClB,WAAW;QACX,KAAK;QACL,UAAU,EAAE,CAAC;QACb,aAAa,EAAE,WAAW;QAC1B,QAAQ,EAAE,KAAK;QACf,OAAO,EAAE,KAAK;QACd,gBAAgB,EAAE,KAAK;QACvB,eAAe,EAAE,IAAI;QACrB,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE;KAC3C,EAAC;;;IAGF,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,EAAC;;;IAG5E,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,EAAC;IAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;QAClC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,EAAC;QACnB,IAAI,EAAE,GAAG,IAAI,IAAI,CAAC,EAAE;YAChB,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,EAAE,wBAAwB,CAAC,GAAG,CAAC,EAAC;SAClE;KACJ;CACJ;;;AAGD,KAAK,CAAC,SAAS,GAAG;;;;;IAKd,IAAI,IAAI,GAAG;QACP,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI;KAC7B;;;;;;IAMD,IAAI,MAAM,GAAG;QACT,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,WAAW;KAC9B;;;;;;IAMD,IAAI,aAAa,GAAG;QAChB,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,aAAa;KAChC;;;;;IAKD,YAAY,GAAG;QACX,MAAM,aAAa,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,cAAa;QAC5C,IAAI,aAAa,IAAI,IAAI,EAAE;YACvB,OAAO,EAAE;SACZ;QACD,OAAO,CAAC,aAAa,CAAC;KACzB;;;;;;IAMD,IAAI,IAAI,GAAG;QACP,OAAO,CAAC;KACX;;;;;;IAMD,IAAI,eAAe,GAAG;QAClB,OAAO,CAAC;KACX;;;;;;IAMD,IAAI,SAAS,GAAG;QACZ,OAAO,CAAC;KACX;;;;;;IAMD,IAAI,cAAc,GAAG;QACjB,OAAO,CAAC;KACX;;;;;;IAMD,IAAI,UAAU,GAAG;QACb,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,UAAU;KAC7B;;;;;;IAMD,eAAe,GAAG;QACd,MAAM,IAAI,GAAG,EAAE,CAAC,IAAI,EAAC;;QAErB,IAAI,CAAC,OAAO,GAAG,KAAI;QACnB,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,eAAe,KAAK,UAAU,EAAE;YAClD,IAAI,CAAC,KAAK,CAAC,eAAe,GAAE;SAC/B;KACJ;;;;;;IAMD,wBAAwB,GAAG;QACvB,MAAM,IAAI,GAAG,EAAE,CAAC,IAAI,EAAC;;QAErB,IAAI,CAAC,OAAO,GAAG,KAAI;QACnB,IAAI,CAAC,gBAAgB,GAAG,KAAI;QAC5B,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,wBAAwB,KAAK,UAAU,EAAE;YAC3D,IAAI,CAAC,KAAK,CAAC,wBAAwB,GAAE;SACxC;KACJ;;;;;;IAMD,IAAI,OAAO,GAAG;QACV,OAAO,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC;KACzC;;;;;;IAMD,IAAI,UAAU,GAAG;QACb,OAAO,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC;KAC5C;;;;;;IAMD,cAAc,GAAG;QACb,aAAa,CAAC,EAAE,CAAC,IAAI,CAAC,EAAC;KAC1B;;;;;;IAMD,IAAI,gBAAgB,GAAG;QACnB,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,QAAQ;KAC3B;;;;;;IAMD,IAAI,QAAQ,GAAG;QACX,OAAO,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC;KAC1C;;;;;;IAMD,IAAI,SAAS,GAAG;QACZ,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,SAAS;KAC5B;;;;;;;IAOD,IAAI,UAAU,GAAG;QACb,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,WAAW;KAC9B;;;;;;;IAOD,IAAI,YAAY,GAAG;QACf,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,OAAO;KAC1B;IACD,IAAI,YAAY,CAAC,KAAK,EAAE;QACpB,IAAI,CAAC,KAAK,EAAE;YACR,MAAM;SACT;QACD,MAAM,IAAI,GAAG,EAAE,CAAC,IAAI,EAAC;;QAErB,IAAI,CAAC,OAAO,GAAG,KAAI;QACnB,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,KAAK,SAAS,EAAE;YAC9C,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,KAAI;SACjC;KACJ;;;;;;;IAOD,IAAI,WAAW,GAAG;QACd,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,QAAQ;KAC5B;IACD,IAAI,WAAW,CAAC,KAAK,EAAE;QACnB,IAAI,CAAC,KAAK,EAAE;YACR,aAAa,CAAC,EAAE,CAAC,IAAI,CAAC,EAAC;SAC1B;KACJ;;;;;;;;;IASD,SAAS,GAAG;;KAEX;EACJ;;;AAGD,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,SAAS,EAAE,aAAa,EAAE;IAClD,KAAK,EAAE,KAAK;IACZ,YAAY,EAAE,IAAI;IAClB,QAAQ,EAAE,IAAI;CACjB,EAAC;;;AAGF,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,WAAW,EAAE;IACtE,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS,EAAC;;;IAG9D,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,EAAC;CAC9C;;;;;;;;AAQD,SAAS,wBAAwB,CAAC,GAAG,EAAE;IACnC,OAAO;QACH,GAAG,GAAG;YACF,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;SAC7B;QACD,GAAG,CAAC,KAAK,EAAE;YACP,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,MAAK;SAC9B;QACD,YAAY,EAAE,IAAI;QAClB,UAAU,EAAE,IAAI;KACnB;CACJ;;;;;;;;AAQD,SAAS,oBAAoB,CAAC,GAAG,EAAE;IAC/B,OAAO;QACH,KAAK,GAAG;YACJ,MAAM,KAAK,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,MAAK;YAC5B,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC;SAC5C;QACD,YAAY,EAAE,IAAI;QAClB,UAAU,EAAE,IAAI;KACnB;CACJ;;;;;;;;;AASD,SAAS,aAAa,CAAC,SAAS,EAAE,KAAK,EAAE;IACrC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,EAAC;IAC/B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;QACnB,OAAO,SAAS;KACnB;;;IAGD,SAAS,WAAW,CAAC,WAAW,EAAE,KAAK,EAAE;QACrC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAC;KAC3C;;IAED,WAAW,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,EAAE;QACvD,WAAW,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE;KAC1E,EAAC;;;IAGF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;QAClC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,EAAC;QACnB,IAAI,EAAE,GAAG,IAAI,SAAS,CAAC,SAAS,CAAC,EAAE;YAC/B,MAAM,UAAU,GAAG,MAAM,CAAC,wBAAwB,CAAC,KAAK,EAAE,GAAG,EAAC;YAC9D,MAAM,MAAM,GAAG,OAAO,UAAU,CAAC,KAAK,KAAK,WAAU;YACrD,MAAM,CAAC,cAAc;gBACjB,WAAW,CAAC,SAAS;gBACrB,GAAG;gBACH,MAAM;sBACA,oBAAoB,CAAC,GAAG,CAAC;sBACzB,wBAAwB,CAAC,GAAG,CAAC;cACtC;SACJ;KACJ;;IAED,OAAO,WAAW;CACrB;;;;;;;;AAQD,SAAS,UAAU,CAAC,KAAK,EAAE;IACvB,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,MAAM,CAAC,SAAS,EAAE;QAC7C,OAAO,KAAK;KACf;;IAED,IAAI,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAC;IACjC,IAAI,OAAO,IAAI,IAAI,EAAE;QACjB,OAAO,GAAG,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,EAAC;QACxE,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAC;KAC/B;IACD,OAAO,OAAO;CACjB;;;;;;;;;AASD,AAAO,SAAS,SAAS,CAAC,WAAW,EAAE,KAAK,EAAE;IAC1C,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,EAAC;IACxD,OAAO,IAAI,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC;CACzC;;;;;;;;AAQD,AAAO,SAAS,SAAS,CAAC,KAAK,EAAE;IAC7B,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC,gBAAgB;CACpC;;;;;;;;;AASD,AAAO,SAAS,aAAa,CAAC,KAAK,EAAE,UAAU,EAAE;IAC7C,EAAE,CAAC,KAAK,CAAC,CAAC,UAAU,GAAG,WAAU;CACpC;;;;;;;;;AASD,AAAO,SAAS,gBAAgB,CAAC,KAAK,EAAE,aAAa,EAAE;IACnD,EAAE,CAAC,KAAK,CAAC,CAAC,aAAa,GAAG,cAAa;CAC1C;;;;;;;;;AASD,AAAO,SAAS,kBAAkB,CAAC,KAAK,EAAE,eAAe,EAAE;IACvD,EAAE,CAAC,KAAK,CAAC,CAAC,eAAe,GAAG,gBAAe;CAC9C;;ACtdD;;;;;;;;;;;;;;AAcA,MAAM,YAAY,GAAG,IAAI,OAAO,GAAE;;;AAGlC,MAAM,OAAO,GAAG,EAAC;AACjB,MAAM,MAAM,GAAG,EAAC;AAChB,MAAM,SAAS,GAAG,EAAC;;;;;;;AAOnB,SAAS,QAAQ,CAAC,CAAC,EAAE;IACjB,OAAO,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,KAAK,QAAQ;CAC7C;;;;;;;;AAQD,SAAS,YAAY,CAAC,WAAW,EAAE;IAC/B,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,CAAC,WAAW,EAAC;IAC/C,IAAI,SAAS,IAAI,IAAI,EAAE;QACnB,MAAM,IAAI,SAAS;YACf,kEAAkE;SACrE;KACJ;IACD,OAAO,SAAS;CACnB;;;;;;;;AAQD,SAAS,8BAA8B,CAAC,SAAS,EAAE;IAC/C,OAAO;QACH,GAAG,GAAG;YACF,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,EAAC;YACpC,IAAI,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,SAAS,EAAC;YACnC,OAAO,IAAI,IAAI,IAAI,EAAE;gBACjB,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,EAAE;oBACjC,OAAO,IAAI,CAAC,QAAQ;iBACvB;gBACD,IAAI,GAAG,IAAI,CAAC,KAAI;aACnB;YACD,OAAO,IAAI;SACd;;QAED,GAAG,CAAC,QAAQ,EAAE;YACV,IAAI,OAAO,QAAQ,KAAK,UAAU,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;gBACvD,QAAQ,GAAG,KAAI;aAClB;YACD,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,EAAC;;;YAGpC,IAAI,IAAI,GAAG,KAAI;YACf,IAAI,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,SAAS,EAAC;YACnC,OAAO,IAAI,IAAI,IAAI,EAAE;gBACjB,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,EAAE;;oBAEjC,IAAI,IAAI,KAAK,IAAI,EAAE;wBACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAI;qBACxB,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE;wBAC3B,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,EAAC;qBACtC,MAAM;wBACH,SAAS,CAAC,MAAM,CAAC,SAAS,EAAC;qBAC9B;iBACJ,MAAM;oBACH,IAAI,GAAG,KAAI;iBACd;;gBAED,IAAI,GAAG,IAAI,CAAC,KAAI;aACnB;;;YAGD,IAAI,QAAQ,KAAK,IAAI,EAAE;gBACnB,MAAM,OAAO,GAAG;oBACZ,QAAQ;oBACR,YAAY,EAAE,SAAS;oBACvB,OAAO,EAAE,KAAK;oBACd,IAAI,EAAE,KAAK;oBACX,IAAI,EAAE,IAAI;kBACb;gBACD,IAAI,IAAI,KAAK,IAAI,EAAE;oBACf,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,EAAC;iBACpC,MAAM;oBACH,IAAI,CAAC,IAAI,GAAG,QAAO;iBACtB;aACJ;SACJ;QACD,YAAY,EAAE,IAAI;QAClB,UAAU,EAAE,IAAI;KACnB;CACJ;;;;;;;;AAQD,SAAS,oBAAoB,CAAC,oBAAoB,EAAE,SAAS,EAAE;IAC3D,MAAM,CAAC,cAAc;QACjB,oBAAoB;QACpB,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;QAChB,8BAA8B,CAAC,SAAS,CAAC;MAC5C;CACJ;;;;;;;;AAQD,SAAS,uBAAuB,CAAC,UAAU,EAAE;;IAEzC,SAAS,iBAAiB,GAAG;QACzB,WAAW,CAAC,IAAI,CAAC,IAAI,EAAC;KACzB;;IAED,iBAAiB,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE;QAC/D,WAAW,EAAE;YACT,KAAK,EAAE,iBAAiB;YACxB,YAAY,EAAE,IAAI;YAClB,QAAQ,EAAE,IAAI;SACjB;KACJ,EAAC;;IAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;QACxC,oBAAoB,CAAC,iBAAiB,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,EAAC;KACnE;;IAED,OAAO,iBAAiB;CAC3B;;;;;;;;;;;;;;;AAeD,SAAS,WAAW,GAAG;;IAEnB,IAAI,IAAI,YAAY,WAAW,EAAE;QAC7B,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,GAAG,EAAE,EAAC;QACjC,MAAM;KACT;IACD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE;QACvD,OAAO,uBAAuB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;KAC/C;IACD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;QACtB,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,EAAC;QACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;YACvC,KAAK,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,EAAC;SAC1B;QACD,OAAO,uBAAuB,CAAC,KAAK,CAAC;KACxC;IACD,MAAM,IAAI,SAAS,CAAC,mCAAmC,CAAC;;CAE3D;;;AAGD,WAAW,CAAC,SAAS,GAAG;;;;;;;;IAQpB,gBAAgB,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE;QAC3C,IAAI,QAAQ,IAAI,IAAI,EAAE;YAClB,MAAM;SACT;QACD,IAAI,OAAO,QAAQ,KAAK,UAAU,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;YACvD,MAAM,IAAI,SAAS,CAAC,+CAA+C,CAAC;SACvE;;QAED,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,EAAC;QACpC,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,EAAC;QACtC,MAAM,OAAO,GAAG,YAAY;cACtB,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;cACxB,OAAO,CAAC,OAAO,EAAC;QACtB,MAAM,YAAY,GAAG,OAAO,GAAG,OAAO,GAAG,OAAM;QAC/C,MAAM,OAAO,GAAG;YACZ,QAAQ;YACR,YAAY;YACZ,OAAO,EAAE,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;YACjD,IAAI,EAAE,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;YAC3C,IAAI,EAAE,IAAI;UACb;;;QAGD,IAAI,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,SAAS,EAAC;QACnC,IAAI,IAAI,KAAK,SAAS,EAAE;YACpB,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,EAAC;YACjC,MAAM;SACT;;;QAGD,IAAI,IAAI,GAAG,KAAI;QACf,OAAO,IAAI,IAAI,IAAI,EAAE;YACjB;gBACI,IAAI,CAAC,QAAQ,KAAK,QAAQ;gBAC1B,IAAI,CAAC,YAAY,KAAK,YAAY;cACpC;;gBAEE,MAAM;aACT;YACD,IAAI,GAAG,KAAI;YACX,IAAI,GAAG,IAAI,CAAC,KAAI;SACnB;;;QAGD,IAAI,CAAC,IAAI,GAAG,QAAO;KACtB;;;;;;;;;IASD,mBAAmB,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE;QAC9C,IAAI,QAAQ,IAAI,IAAI,EAAE;YAClB,MAAM;SACT;;QAED,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,EAAC;QACpC,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;cAC3B,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;cACxB,OAAO,CAAC,OAAO,EAAC;QACtB,MAAM,YAAY,GAAG,OAAO,GAAG,OAAO,GAAG,OAAM;;QAE/C,IAAI,IAAI,GAAG,KAAI;QACf,IAAI,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,SAAS,EAAC;QACnC,OAAO,IAAI,IAAI,IAAI,EAAE;YACjB;gBACI,IAAI,CAAC,QAAQ,KAAK,QAAQ;gBAC1B,IAAI,CAAC,YAAY,KAAK,YAAY;cACpC;gBACE,IAAI,IAAI,KAAK,IAAI,EAAE;oBACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAI;iBACxB,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE;oBAC3B,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,EAAC;iBACtC,MAAM;oBACH,SAAS,CAAC,MAAM,CAAC,SAAS,EAAC;iBAC9B;gBACD,MAAM;aACT;;YAED,IAAI,GAAG,KAAI;YACX,IAAI,GAAG,IAAI,CAAC,KAAI;SACnB;KACJ;;;;;;;IAOD,aAAa,CAAC,KAAK,EAAE;QACjB,IAAI,KAAK,IAAI,IAAI,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE;YACjD,MAAM,IAAI,SAAS,CAAC,kCAAkC,CAAC;SAC1D;;;QAGD,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,EAAC;QACpC,MAAM,SAAS,GAAG,KAAK,CAAC,KAAI;QAC5B,IAAI,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,SAAS,EAAC;QACnC,IAAI,IAAI,IAAI,IAAI,EAAE;YACd,OAAO,IAAI;SACd;;;QAGD,MAAM,YAAY,GAAG,SAAS,CAAC,IAAI,EAAE,KAAK,EAAC;;;;QAI3C,IAAI,IAAI,GAAG,KAAI;QACf,OAAO,IAAI,IAAI,IAAI,EAAE;;YAEjB,IAAI,IAAI,CAAC,IAAI,EAAE;gBACX,IAAI,IAAI,KAAK,IAAI,EAAE;oBACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAI;iBACxB,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE;oBAC3B,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,EAAC;iBACtC,MAAM;oBACH,SAAS,CAAC,MAAM,CAAC,SAAS,EAAC;iBAC9B;aACJ,MAAM;gBACH,IAAI,GAAG,KAAI;aACd;;;YAGD,kBAAkB;gBACd,YAAY;gBACZ,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI;cACtC;YACD,IAAI,OAAO,IAAI,CAAC,QAAQ,KAAK,UAAU,EAAE;gBACrC,IAAI;oBACA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,EAAC;iBACzC,CAAC,OAAO,GAAG,EAAE;oBACV;wBACI,OAAO,OAAO,KAAK,WAAW;wBAC9B,OAAO,OAAO,CAAC,KAAK,KAAK,UAAU;sBACrC;wBACE,OAAO,CAAC,KAAK,CAAC,GAAG,EAAC;qBACrB;iBACJ;aACJ,MAAM;gBACH,IAAI,CAAC,YAAY,KAAK,SAAS;gBAC/B,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,KAAK,UAAU;cACjD;gBACE,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,YAAY,EAAC;aAC1C;;;YAGD,IAAI,SAAS,CAAC,YAAY,CAAC,EAAE;gBACzB,KAAK;aACR;;YAED,IAAI,GAAG,IAAI,CAAC,KAAI;SACnB;QACD,kBAAkB,CAAC,YAAY,EAAE,IAAI,EAAC;QACtC,aAAa,CAAC,YAAY,EAAE,CAAC,EAAC;QAC9B,gBAAgB,CAAC,YAAY,EAAE,IAAI,EAAC;;QAEpC,OAAO,CAAC,YAAY,CAAC,gBAAgB;KACxC;EACJ;;;AAGD,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,SAAS,EAAE,aAAa,EAAE;IACxD,KAAK,EAAE,WAAW;IAClB,YAAY,EAAE,IAAI;IAClB,QAAQ,EAAE,IAAI;CACjB,EAAC;;;AAGF;IACI,OAAO,MAAM,KAAK,WAAW;IAC7B,OAAO,MAAM,CAAC,WAAW,KAAK,WAAW;EAC3C;IACE,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC,SAAS,EAAC;CAC7E;;;;;;;;;;;;;\"}/dist/event-target-shim.umd.js\u001bR/**\n * @author Toru Nagashima <https://github.com/mysticatea>\n * @copyright 2015 Toru Nagashima. All rights reserved.\n * See LICENSE file in root directory for full license.\n */(function(a,b){\"object\"==typeof exports&&\"undefined\"!=typeof module?b(exports):\"function\"==typeof define&&define.amd?define([\"exports\"],b):(a=a||self,b(a.EventTargetShim={}))})(this,function(a){\"use strict\";function b(a){return b=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&\"function\"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?\"symbol\":typeof a},b(a)}function c(a){var b=u.get(a);return console.assert(null!=b,\"'this' is expected an Event object, but got\",a),b}function d(a){return null==a.passiveListener?void(!a.event.cancelable||(a.canceled=!0,\"function\"==typeof a.event.preventDefault&&a.event.preventDefault())):void(\"undefined\"!=typeof console&&\"function\"==typeof console.error&&console.error(\"Unable to preventDefault inside passive event listener invocation.\",a.passiveListener))}function e(a,b){u.set(this,{eventTarget:a,event:b,eventPhase:2,currentTarget:a,canceled:!1,stopped:!1,immediateStopped:!1,passiveListener:null,timeStamp:b.timeStamp||Date.now()}),Object.defineProperty(this,\"isTrusted\",{value:!1,enumerable:!0});for(var c,d=Object.keys(b),e=0;e<d.length;++e)c=d[e],c in this||Object.defineProperty(this,c,f(c))}function f(a){return{get:function(){return c(this).event[a]},set:function(b){c(this).event[a]=b},configurable:!0,enumerable:!0}}function g(a){return{value:function(){var b=c(this).event;return b[a].apply(b,arguments)},configurable:!0,enumerable:!0}}function h(a,b){function c(b,c){a.call(this,b,c)}var d=Object.keys(b);if(0===d.length)return a;c.prototype=Object.create(a.prototype,{constructor:{value:c,configurable:!0,writable:!0}});for(var e,h=0;h<d.length;++h)if(e=d[h],!(e in a.prototype)){var j=Object.getOwnPropertyDescriptor(b,e),k=\"function\"==typeof j.value;Object.defineProperty(c.prototype,e,k?g(e):f(e))}return c}function i(a){if(null==a||a===Object.prototype)return e;var b=v.get(a);return null==b&&(b=h(i(Object.getPrototypeOf(a)),a),v.set(a,b)),b}function j(a,b){var c=i(Object.getPrototypeOf(b));return new c(a,b)}function k(a){return c(a).immediateStopped}function l(a,b){c(a).eventPhase=b}function m(a,b){c(a).currentTarget=b}function n(a,b){c(a).passiveListener=b}function o(a){return null!==a&&\"object\"===b(a)}function p(a){var b=w.get(a);if(null==b)throw new TypeError(\"'this' is expected an EventTarget object, but got another value.\");return b}function q(a){return{get:function(){for(var b=p(this),c=b.get(a);null!=c;){if(3===c.listenerType)return c.listener;c=c.next}return null},set:function(b){\"function\"==typeof b||o(b)||(b=null);for(var c=p(this),d=null,e=c.get(a);null!=e;)3===e.listenerType?null===d?null===e.next?c.delete(a):c.set(a,e.next):d.next=e.next:d=e,e=e.next;if(null!==b){var f={listener:b,listenerType:3,passive:!1,once:!1,next:null};null===d?c.set(a,f):d.next=f}},configurable:!0,enumerable:!0}}function r(a,b){Object.defineProperty(a,\"on\".concat(b),q(b))}function s(a){function b(){t.call(this)}b.prototype=Object.create(t.prototype,{constructor:{value:b,configurable:!0,writable:!0}});for(var c=0;c<a.length;++c)r(b.prototype,a[c]);return b}function t(){if(this instanceof t)return void w.set(this,new Map);if(1===arguments.length&&Array.isArray(arguments[0]))return s(arguments[0]);if(0<arguments.length){for(var a=Array(arguments.length),b=0;b<arguments.length;++b)a[b]=arguments[b];return s(a)}throw new TypeError(\"Cannot call a class as a function\")}var u=new WeakMap,v=new WeakMap;e.prototype={get type(){return c(this).event.type},get target(){return c(this).eventTarget},get currentTarget(){return c(this).currentTarget},composedPath:function(){var a=c(this).currentTarget;return null==a?[]:[a]},get NONE(){return 0},get CAPTURING_PHASE(){return 1},get AT_TARGET(){return 2},get BUBBLING_PHASE(){return 3},get eventPhase(){return c(this).eventPhase},stopPropagation:function(){var a=c(this);a.stopped=!0,\"function\"==typeof a.event.stopPropagation&&a.event.stopPropagation()},stopImmediatePropagation:function(){var a=c(this);a.stopped=!0,a.immediateStopped=!0,\"function\"==typeof a.event.stopImmediatePropagation&&a.event.stopImmediatePropagation()},get bubbles(){return!!c(this).event.bubbles},get cancelable(){return!!c(this).event.cancelable},preventDefault:function(){d(c(this))},get defaultPrevented(){return c(this).canceled},get composed(){return!!c(this).event.composed},get timeStamp(){return c(this).timeStamp},get srcElement(){return c(this).eventTarget},get cancelBubble(){return c(this).stopped},set cancelBubble(a){if(a){var b=c(this);b.stopped=!0,\"boolean\"==typeof b.event.cancelBubble&&(b.event.cancelBubble=!0)}},get returnValue(){return!c(this).canceled},set returnValue(a){a||d(c(this))},initEvent:function(){}},Object.defineProperty(e.prototype,\"constructor\",{value:e,configurable:!0,writable:!0}),\"undefined\"!=typeof window&&\"undefined\"!=typeof window.Event&&(Object.setPrototypeOf(e.prototype,window.Event.prototype),v.set(window.Event.prototype,e));var w=new WeakMap,x=1,y=2;if(t.prototype={addEventListener:function(a,b,c){if(null!=b){if(\"function\"!=typeof b&&!o(b))throw new TypeError(\"'listener' should be a function or an object.\");var d=p(this),e=o(c),f=e?!!c.capture:!!c,g=f?x:y,h={listener:b,listenerType:g,passive:e&&!!c.passive,once:e&&!!c.once,next:null},i=d.get(a);if(void 0===i)return void d.set(a,h);for(var j=null;null!=i;){if(i.listener===b&&i.listenerType===g)return;j=i,i=i.next}j.next=h}},removeEventListener:function(a,b,c){if(null!=b)for(var d=p(this),e=o(c)?!!c.capture:!!c,f=e?x:y,g=null,h=d.get(a);null!=h;){if(h.listener===b&&h.listenerType===f)return void(null===g?null===h.next?d.delete(a):d.set(a,h.next):g.next=h.next);g=h,h=h.next}},dispatchEvent:function(a){if(null==a||\"string\"!=typeof a.type)throw new TypeError(\"\\\"event.type\\\" should be a string.\");var b=p(this),c=a.type,d=b.get(c);if(null==d)return!0;for(var e=j(this,a),f=null;null!=d;){if(d.once?null===f?null===d.next?b.delete(c):b.set(c,d.next):f.next=d.next:f=d,n(e,d.passive?d.listener:null),\"function\"==typeof d.listener)try{d.listener.call(this,e)}catch(a){\"undefined\"!=typeof console&&\"function\"==typeof console.error&&console.error(a)}else d.listenerType!==3&&\"function\"==typeof d.listener.handleEvent&&d.listener.handleEvent(e);if(k(e))break;d=d.next}return n(e,null),l(e,0),m(e,null),!e.defaultPrevented}},Object.defineProperty(t.prototype,\"constructor\",{value:t,configurable:!0,writable:!0}),\"undefined\"!=typeof window&&\"undefined\"!=typeof window.EventTarget&&Object.setPrototypeOf(t.prototype,window.EventTarget.prototype),a.defineEventAttribute=r,a.EventTarget=t,a.default=t,Object.defineProperty(a,\"__esModule\",{value:!0}),\"undefined\"==typeof module&&\"undefined\"==typeof define){var z=Function(\"return this\")();z.EventTargetShim=t,z.EventTargetShim.defineEventAttribute=r}});\n//# sourceMappingURL=event-target-shim.umd.js.map\n/LICENSE\u0004:The MIT License (MIT)\n\nCopyright (c) 2015 Toru Nagashima\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/ZXh0ZW5kLXNoYWxsb3dAMi4wLjE=",
    "content": "/package.json\u0004{\n  \"name\": \"extend-shallow\",\n  \"description\": \"Extend an object with the properties of additional objects. node.js/javascript util.\",\n  \"version\": \"2.0.1\",\n  \"homepage\": \"https://github.com/jonschlinkert/extend-shallow\",\n  \"author\": \"Jon Schlinkert (https://github.com/jonschlinkert)\",\n  \"repository\": \"jonschlinkert/extend-shallow\",\n  \"bugs\": {\n    \"url\": \"https://github.com/jonschlinkert/extend-shallow/issues\"\n  },\n  \"license\": \"MIT\",\n  \"files\": [\n    \"index.js\"\n  ],\n  \"main\": \"index.js\",\n  \"engines\": {\n    \"node\": \">=0.10.0\"\n  },\n  \"scripts\": {\n    \"test\": \"mocha\"\n  },\n  \"dependencies\": {\n    \"is-extendable\": \"^0.1.0\"\n  },\n  \"devDependencies\": {\n    \"array-slice\": \"^0.2.3\",\n    \"benchmarked\": \"^0.1.4\",\n    \"chalk\": \"^1.0.0\",\n    \"for-own\": \"^0.1.3\",\n    \"glob\": \"^5.0.12\",\n    \"is-plain-object\": \"^2.0.1\",\n    \"kind-of\": \"^2.0.0\",\n    \"minimist\": \"^1.1.1\",\n    \"mocha\": \"^2.2.5\",\n    \"should\": \"^7.0.1\"\n  },\n  \"keywords\": [\n    \"assign\",\n    \"extend\",\n    \"javascript\",\n    \"js\",\n    \"keys\",\n    \"merge\",\n    \"obj\",\n    \"object\",\n    \"prop\",\n    \"properties\",\n    \"property\",\n    \"props\",\n    \"shallow\",\n    \"util\",\n    \"utility\",\n    \"utils\",\n    \"value\"\n  ]\n}/LICENSE\u0004@The MIT License (MIT)\n\nCopyright (c) 2014-2015, Jon Schlinkert.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n/README.md\u0007# extend-shallow [![NPM version](https://badge.fury.io/js/extend-shallow.svg)](http://badge.fury.io/js/extend-shallow)  [![Build Status](https://travis-ci.org/jonschlinkert/extend-shallow.svg)](https://travis-ci.org/jonschlinkert/extend-shallow)\n\n> Extend an object with the properties of additional objects. node.js/javascript util.\n\n## Install\n\nInstall with [npm](https://www.npmjs.com/)\n\n```sh\n$ npm i extend-shallow --save\n```\n\n## Usage\n\n```js\nvar extend = require('extend-shallow');\n\nextend({a: 'b'}, {c: 'd'})\n//=> {a: 'b', c: 'd'}\n```\n\nPass an empty object to shallow clone:\n\n```js\nvar obj = {};\nextend(obj, {a: 'b'}, {c: 'd'})\n//=> {a: 'b', c: 'd'}\n```\n\n## Related\n\n* [extend-shallow](https://github.com/jonschlinkert/extend-shallow): Extend an object with the properties of additional objects. node.js/javascript util.\n* [for-own](https://github.com/jonschlinkert/for-own): Iterate over the own enumerable properties of an object, and return an object with properties… [more](https://github.com/jonschlinkert/for-own)\n* [for-in](https://github.com/jonschlinkert/for-in): Iterate over the own and inherited enumerable properties of an objecte, and return an object… [more](https://github.com/jonschlinkert/for-in)\n* [is-plain-object](https://github.com/jonschlinkert/is-plain-object): Returns true if an object was created by the `Object` constructor.\n* [isobject](https://github.com/jonschlinkert/isobject): Returns true if the value is an object and not an array or null.\n* [kind-of](https://github.com/jonschlinkert/kind-of): Get the native type of a value.\n\n## Running tests\n\nInstall dev dependencies:\n\n```sh\n$ npm i -d && npm test\n```\n\n## Author\n\n**Jon Schlinkert**\n\n+ [github/jonschlinkert](https://github.com/jonschlinkert)\n+ [twitter/jonschlinkert](http://twitter.com/jonschlinkert)\n\n## License\n\nCopyright © 2015 Jon Schlinkert\nReleased under the MIT license.\n\n***\n\n_This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on June 29, 2015._/index.js\u0002@'use strict';\n\nvar isObject = require('is-extendable');\n\nmodule.exports = function extend(o/*, objects*/) {\n  if (!isObject(o)) { o = {}; }\n\n  var len = arguments.length;\n  for (var i = 1; i < len; i++) {\n    var obj = arguments[i];\n\n    if (isObject(obj)) {\n      assign(o, obj);\n    }\n  }\n  return o;\n};\n\nfunction assign(a, b) {\n  for (var key in b) {\n    if (hasOwn(b, key)) {\n      a[key] = b[key];\n    }\n  }\n}\n\n/**\n * Returns true if the given `key` is an own property of `obj`.\n */\n\nfunction hasOwn(obj, key) {\n  return Object.prototype.hasOwnProperty.call(obj, key);\n}\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/ZXhlY2FANi4xLjA=",
    "content": "/lib/stdio.js\u0004const aliases = ['stdin', 'stdout', 'stderr'];\n\nconst hasAlias = options => aliases.some(alias => options[alias] !== undefined);\n\nexport const normalizeStdio = options => {\n\tif (!options) {\n\t\treturn;\n\t}\n\n\tconst {stdio} = options;\n\n\tif (stdio === undefined) {\n\t\treturn aliases.map(alias => options[alias]);\n\t}\n\n\tif (hasAlias(options)) {\n\t\tthrow new Error(`It's not possible to provide \\`stdio\\` in combination with one of ${aliases.map(alias => `\\`${alias}\\``).join(', ')}`);\n\t}\n\n\tif (typeof stdio === 'string') {\n\t\treturn stdio;\n\t}\n\n\tif (!Array.isArray(stdio)) {\n\t\tthrow new TypeError(`Expected \\`stdio\\` to be of type \\`string\\` or \\`Array\\`, got \\`${typeof stdio}\\``);\n\t}\n\n\tconst length = Math.max(stdio.length, aliases.length);\n\treturn Array.from({length}, (value, index) => stdio[index]);\n};\n\n// `ipc` is pushed unless it is already present\nexport const normalizeStdioNode = options => {\n\tconst stdio = normalizeStdio(options);\n\n\tif (stdio === 'ipc') {\n\t\treturn 'ipc';\n\t}\n\n\tif (stdio === undefined || typeof stdio === 'string') {\n\t\treturn [stdio, stdio, stdio, 'ipc'];\n\t}\n\n\tif (stdio.includes('ipc')) {\n\t\treturn stdio;\n\t}\n\n\treturn [...stdio, 'ipc'];\n};\n/lib/kill.js\u000bimport os from 'node:os';\nimport onExit from 'signal-exit';\n\nconst DEFAULT_FORCE_KILL_TIMEOUT = 1000 * 5;\n\n// Monkey-patches `childProcess.kill()` to add `forceKillAfterTimeout` behavior\nexport const spawnedKill = (kill, signal = 'SIGTERM', options = {}) => {\n\tconst killResult = kill(signal);\n\tsetKillTimeout(kill, signal, options, killResult);\n\treturn killResult;\n};\n\nconst setKillTimeout = (kill, signal, options, killResult) => {\n\tif (!shouldForceKill(signal, options, killResult)) {\n\t\treturn;\n\t}\n\n\tconst timeout = getForceKillAfterTimeout(options);\n\tconst t = setTimeout(() => {\n\t\tkill('SIGKILL');\n\t}, timeout);\n\n\t// Guarded because there's no `.unref()` when `execa` is used in the renderer\n\t// process in Electron. This cannot be tested since we don't run tests in\n\t// Electron.\n\t// istanbul ignore else\n\tif (t.unref) {\n\t\tt.unref();\n\t}\n};\n\nconst shouldForceKill = (signal, {forceKillAfterTimeout}, killResult) => isSigterm(signal) && forceKillAfterTimeout !== false && killResult;\n\nconst isSigterm = signal => signal === os.constants.signals.SIGTERM\n\t\t|| (typeof signal === 'string' && signal.toUpperCase() === 'SIGTERM');\n\nconst getForceKillAfterTimeout = ({forceKillAfterTimeout = true}) => {\n\tif (forceKillAfterTimeout === true) {\n\t\treturn DEFAULT_FORCE_KILL_TIMEOUT;\n\t}\n\n\tif (!Number.isFinite(forceKillAfterTimeout) || forceKillAfterTimeout < 0) {\n\t\tthrow new TypeError(`Expected the \\`forceKillAfterTimeout\\` option to be a non-negative integer, got \\`${forceKillAfterTimeout}\\` (${typeof forceKillAfterTimeout})`);\n\t}\n\n\treturn forceKillAfterTimeout;\n};\n\n// `childProcess.cancel()`\nexport const spawnedCancel = (spawned, context) => {\n\tconst killResult = spawned.kill();\n\n\tif (killResult) {\n\t\tcontext.isCanceled = true;\n\t}\n};\n\nconst timeoutKill = (spawned, signal, reject) => {\n\tspawned.kill(signal);\n\treject(Object.assign(new Error('Timed out'), {timedOut: true, signal}));\n};\n\n// `timeout` option handling\nexport const setupTimeout = (spawned, {timeout, killSignal = 'SIGTERM'}, spawnedPromise) => {\n\tif (timeout === 0 || timeout === undefined) {\n\t\treturn spawnedPromise;\n\t}\n\n\tlet timeoutId;\n\tconst timeoutPromise = new Promise((resolve, reject) => {\n\t\ttimeoutId = setTimeout(() => {\n\t\t\ttimeoutKill(spawned, killSignal, reject);\n\t\t}, timeout);\n\t});\n\n\tconst safeSpawnedPromise = spawnedPromise.finally(() => {\n\t\tclearTimeout(timeoutId);\n\t});\n\n\treturn Promise.race([timeoutPromise, safeSpawnedPromise]);\n};\n\nexport const validateTimeout = ({timeout}) => {\n\tif (timeout !== undefined && (!Number.isFinite(timeout) || timeout < 0)) {\n\t\tthrow new TypeError(`Expected the \\`timeout\\` option to be a non-negative integer, got \\`${timeout}\\` (${typeof timeout})`);\n\t}\n};\n\n// `cleanup` option handling\nexport const setExitHandler = async (spawned, {cleanup, detached}, timedPromise) => {\n\tif (!cleanup || detached) {\n\t\treturn timedPromise;\n\t}\n\n\tconst removeExitHandler = onExit(() => {\n\t\tspawned.kill();\n\t});\n\n\treturn timedPromise.finally(() => {\n\t\tremoveExitHandler();\n\t});\n};\n/lib/stream.js\t\u0006import {isStream} from 'is-stream';\nimport getStream from 'get-stream';\nimport mergeStream from 'merge-stream';\n\n// `input` option\nexport const handleInput = (spawned, input) => {\n\t// Checking for stdin is workaround for https://github.com/nodejs/node/issues/26852\n\t// @todo remove `|| spawned.stdin === undefined` once we drop support for Node.js <=12.2.0\n\tif (input === undefined || spawned.stdin === undefined) {\n\t\treturn;\n\t}\n\n\tif (isStream(input)) {\n\t\tinput.pipe(spawned.stdin);\n\t} else {\n\t\tspawned.stdin.end(input);\n\t}\n};\n\n// `all` interleaves `stdout` and `stderr`\nexport const makeAllStream = (spawned, {all}) => {\n\tif (!all || (!spawned.stdout && !spawned.stderr)) {\n\t\treturn;\n\t}\n\n\tconst mixed = mergeStream();\n\n\tif (spawned.stdout) {\n\t\tmixed.add(spawned.stdout);\n\t}\n\n\tif (spawned.stderr) {\n\t\tmixed.add(spawned.stderr);\n\t}\n\n\treturn mixed;\n};\n\n// On failure, `result.stdout|stderr|all` should contain the currently buffered stream\nconst getBufferedData = async (stream, streamPromise) => {\n\tif (!stream) {\n\t\treturn;\n\t}\n\n\tstream.destroy();\n\n\ttry {\n\t\treturn await streamPromise;\n\t} catch (error) {\n\t\treturn error.bufferedData;\n\t}\n};\n\nconst getStreamPromise = (stream, {encoding, buffer, maxBuffer}) => {\n\tif (!stream || !buffer) {\n\t\treturn;\n\t}\n\n\tif (encoding) {\n\t\treturn getStream(stream, {encoding, maxBuffer});\n\t}\n\n\treturn getStream.buffer(stream, {maxBuffer});\n};\n\n// Retrieve result of child process: exit code, signal, error, streams (stdout/stderr/all)\nexport const getSpawnedResult = async ({stdout, stderr, all}, {encoding, buffer, maxBuffer}, processDone) => {\n\tconst stdoutPromise = getStreamPromise(stdout, {encoding, buffer, maxBuffer});\n\tconst stderrPromise = getStreamPromise(stderr, {encoding, buffer, maxBuffer});\n\tconst allPromise = getStreamPromise(all, {encoding, buffer, maxBuffer: maxBuffer * 2});\n\n\ttry {\n\t\treturn await Promise.all([processDone, stdoutPromise, stderrPromise, allPromise]);\n\t} catch (error) {\n\t\treturn Promise.all([\n\t\t\t{error, signal: error.signal, timedOut: error.timedOut},\n\t\t\tgetBufferedData(stdout, stdoutPromise),\n\t\t\tgetBufferedData(stderr, stderrPromise),\n\t\t\tgetBufferedData(all, allPromise),\n\t\t]);\n\t}\n};\n\nexport const validateInputSync = ({input}) => {\n\tif (isStream(input)) {\n\t\tthrow new TypeError('The `input` option cannot be a stream in sync mode');\n\t}\n};\n/index.d.tsGimport {Buffer} from 'node:buffer';\nimport {ChildProcess} from 'node:child_process';\nimport {Stream, Readable as ReadableStream} from 'node:stream';\n\nexport type StdioOption =\n\t| 'pipe'\n\t| 'ipc'\n\t| 'ignore'\n\t| 'inherit'\n\t| Stream\n\t| number\n\t| undefined;\n\nexport interface CommonOptions<EncodingType> {\n\t/**\n\tKill the spawned process when the parent process exits unless either:\n\t\t- the spawned process is [`detached`](https://nodejs.org/api/child_process.html#child_process_options_detached)\n\t\t- the parent process is terminated abruptly, for example, with `SIGKILL` as opposed to `SIGTERM` or a normal exit\n\n\t@default true\n\t*/\n\treadonly cleanup?: boolean;\n\n\t/**\n\tPrefer locally installed binaries when looking for a binary to execute.\n\n\tIf you `$ npm install foo`, you can then `execa('foo')`.\n\n\t@default false\n\t*/\n\treadonly preferLocal?: boolean;\n\n\t/**\n\tPreferred path to find locally installed binaries in (use with `preferLocal`).\n\n\tUsing a `URL` is only supported in Node.js `14.18.0`, `16.14.0` or above.\n\n\t@default process.cwd()\n\t*/\n\treadonly localDir?: string | URL;\n\n\t/**\n\tPath to the Node.js executable to use in child processes.\n\n\tThis can be either an absolute path or a path relative to the `cwd` option.\n\n\tRequires `preferLocal` to be `true`.\n\n\tFor example, this can be used together with [`get-node`](https://github.com/ehmicky/get-node) to run a specific Node.js version in a child process.\n\n\t@default process.execPath\n\t*/\n\treadonly execPath?: string;\n\n\t/**\n\tBuffer the output from the spawned process. When set to `false`, you must read the output of `stdout` and `stderr` (or `all` if the `all` option is `true`). Otherwise the returned promise will not be resolved/rejected.\n\n\tIf the spawned process fails, `error.stdout`, `error.stderr`, and `error.all` will contain the buffered data.\n\n\t@default true\n\t*/\n\treadonly buffer?: boolean;\n\n\t/**\n\tSame options as [`stdio`](https://nodejs.org/dist/latest-v6.x/docs/api/child_process.html#child_process_options_stdio).\n\n\t@default 'pipe'\n\t*/\n\treadonly stdin?: StdioOption;\n\n\t/**\n\tSame options as [`stdio`](https://nodejs.org/dist/latest-v6.x/docs/api/child_process.html#child_process_options_stdio).\n\n\t@default 'pipe'\n\t*/\n\treadonly stdout?: StdioOption;\n\n\t/**\n\tSame options as [`stdio`](https://nodejs.org/dist/latest-v6.x/docs/api/child_process.html#child_process_options_stdio).\n\n\t@default 'pipe'\n\t*/\n\treadonly stderr?: StdioOption;\n\n\t/**\n\tSetting this to `false` resolves the promise with the error instead of rejecting it.\n\n\t@default true\n\t*/\n\treadonly reject?: boolean;\n\n\t/**\n\tAdd an `.all` property on the promise and the resolved value. The property contains the output of the process with `stdout` and `stderr` interleaved.\n\n\t@default false\n\t*/\n\treadonly all?: boolean;\n\n\t/**\n\tStrip the final [newline character](https://en.wikipedia.org/wiki/Newline) from the output.\n\n\t@default true\n\t*/\n\treadonly stripFinalNewline?: boolean;\n\n\t/**\n\tSet to `false` if you don't want to extend the environment variables when providing the `env` property.\n\n\t@default true\n\t*/\n\treadonly extendEnv?: boolean;\n\n\t/**\n\tCurrent working directory of the child process.\n\n\tUsing a `URL` is only supported in Node.js `14.18.0`, `16.14.0` or above.\n\n\t@default process.cwd()\n\t*/\n\treadonly cwd?: string | URL;\n\n\t/**\n\tEnvironment key-value pairs. Extends automatically from `process.env`. Set `extendEnv` to `false` if you don't want this.\n\n\t@default process.env\n\t*/\n\treadonly env?: NodeJS.ProcessEnv;\n\n\t/**\n\tExplicitly set the value of `argv[0]` sent to the child process. This will be set to `command` or `file` if not specified.\n\t*/\n\treadonly argv0?: string;\n\n\t/**\n\tChild's [stdio](https://nodejs.org/api/child_process.html#child_process_options_stdio) configuration.\n\n\t@default 'pipe'\n\t*/\n\treadonly stdio?: 'pipe' | 'ignore' | 'inherit' | readonly StdioOption[];\n\n\t/**\n\tSpecify the kind of serialization used for sending messages between processes when using the `stdio: 'ipc'` option or `execaNode()`:\n\t\t- `json`: Uses `JSON.stringify()` and `JSON.parse()`.\n\t\t- `advanced`: Uses [`v8.serialize()`](https://nodejs.org/api/v8.html#v8_v8_serialize_value)\n\n\tRequires Node.js `13.2.0` or later.\n\n\t[More info.](https://nodejs.org/api/child_process.html#child_process_advanced_serialization)\n\n\t@default 'json'\n\t*/\n\treadonly serialization?: 'json' | 'advanced';\n\n\t/**\n\tPrepare child to run independently of its parent process. Specific behavior [depends on the platform](https://nodejs.org/api/child_process.html#child_process_options_detached).\n\n\t@default false\n\t*/\n\treadonly detached?: boolean;\n\n\t/**\n\tSets the user identity of the process.\n\t*/\n\treadonly uid?: number;\n\n\t/**\n\tSets the group identity of the process.\n\t*/\n\treadonly gid?: number;\n\n\t/**\n\tIf `true`, runs `command` inside of a shell. Uses `/bin/sh` on UNIX and `cmd.exe` on Windows. A different shell can be specified as a string. The shell should understand the `-c` switch on UNIX or `/d /s /c` on Windows.\n\n\tWe recommend against using this option since it is:\n\t- not cross-platform, encouraging shell-specific syntax.\n\t- slower, because of the additional shell interpretation.\n\t- unsafe, potentially allowing command injection.\n\n\t@default false\n\t*/\n\treadonly shell?: boolean | string;\n\n\t/**\n\tSpecify the character encoding used to decode the `stdout` and `stderr` output. If set to `null`, then `stdout` and `stderr` will be a `Buffer` instead of a string.\n\n\t@default 'utf8'\n\t*/\n\treadonly encoding?: EncodingType;\n\n\t/**\n\tIf `timeout` is greater than `0`, the parent will send the signal identified by the `killSignal` property (the default is `SIGTERM`) if the child runs longer than `timeout` milliseconds.\n\n\t@default 0\n\t*/\n\treadonly timeout?: number;\n\n\t/**\n\tLargest amount of data in bytes allowed on `stdout` or `stderr`. Default: 100 MB.\n\n\t@default 100_000_000\n\t*/\n\treadonly maxBuffer?: number;\n\n\t/**\n\tSignal value to be used when the spawned process will be killed.\n\n\t@default 'SIGTERM'\n\t*/\n\treadonly killSignal?: string | number;\n\n\t/**\n\tYou can abort the spawned process using [`AbortController`](https://developer.mozilla.org/en-US/docs/Web/API/AbortController).\n\n\tWhen `AbortController.abort()` is called, [`.isCanceled`](https://github.com/sindresorhus/execa#iscanceled) becomes `false`.\n\n\t*Requires Node.js 16 or later.*\n\n\t@example\n\t```js\n\timport {execa} from 'execa';\n\n\tconst abortController = new AbortController();\n\tconst subprocess = execa('node', [], {signal: abortController.signal});\n\n\tsetTimeout(() => {\n\t\tabortController.abort();\n\t}, 1000);\n\n\ttry {\n\t\tawait subprocess;\n\t} catch (error) {\n\t\tconsole.log(subprocess.killed); // true\n\t\tconsole.log(error.isCanceled); // true\n\t}\n\t```\n\t*/\n\treadonly signal?: AbortSignal;\n\n\t/**\n\tIf `true`, no quoting or escaping of arguments is done on Windows. Ignored on other platforms. This is set to `true` automatically when the `shell` option is `true`.\n\n\t@default false\n\t*/\n\treadonly windowsVerbatimArguments?: boolean;\n\n\t/**\n\tOn Windows, do not create a new console window. Please note this also prevents `CTRL-C` [from working](https://github.com/nodejs/node/issues/29837) on Windows.\n\n\t@default true\n\t*/\n\treadonly windowsHide?: boolean;\n}\n\nexport interface Options<EncodingType = string> extends CommonOptions<EncodingType> {\n\t/**\n\tWrite some input to the `stdin` of your binary.\n\t*/\n\treadonly input?: string | Buffer | ReadableStream;\n}\n\nexport interface SyncOptions<EncodingType = string> extends CommonOptions<EncodingType> {\n\t/**\n\tWrite some input to the `stdin` of your binary.\n\t*/\n\treadonly input?: string | Buffer;\n}\n\nexport interface NodeOptions<EncodingType = string> extends Options<EncodingType> {\n\t/**\n\tThe Node.js executable to use.\n\n\t@default process.execPath\n\t*/\n\treadonly nodePath?: string;\n\n\t/**\n\tList of [CLI options](https://nodejs.org/api/cli.html#cli_options) passed to the Node.js executable.\n\n\t@default process.execArgv\n\t*/\n\treadonly nodeOptions?: string[];\n}\n\nexport interface ExecaReturnBase<StdoutStderrType> {\n\t/**\n\tThe file and arguments that were run, for logging purposes.\n\n\tThis is not escaped and should not be executed directly as a process, including using `execa()` or `execaCommand()`.\n\t*/\n\tcommand: string;\n\n\t/**\n\tSame as `command` but escaped.\n\n\tThis is meant to be copy and pasted into a shell, for debugging purposes.\n\tSince the escaping is fairly basic, this should not be executed directly as a process, including using `execa()` or `execaCommand()`.\n\t*/\n\tescapedCommand: string;\n\n\t/**\n\tThe numeric exit code of the process that was run.\n\t*/\n\texitCode: number;\n\n\t/**\n\tThe output of the process on stdout.\n\t*/\n\tstdout: StdoutStderrType;\n\n\t/**\n\tThe output of the process on stderr.\n\t*/\n\tstderr: StdoutStderrType;\n\n\t/**\n\tWhether the process failed to run.\n\t*/\n\tfailed: boolean;\n\n\t/**\n\tWhether the process timed out.\n\t*/\n\ttimedOut: boolean;\n\n\t/**\n\tWhether the process was killed.\n\t*/\n\tkilled: boolean;\n\n\t/**\n\tThe name of the signal that was used to terminate the process. For example, `SIGFPE`.\n\n\tIf a signal terminated the process, this property is defined and included in the error message. Otherwise it is `undefined`.\n\t*/\n\tsignal?: string;\n\n\t/**\n\tA human-friendly description of the signal that was used to terminate the process. For example, `Floating point arithmetic error`.\n\n\tIf a signal terminated the process, this property is defined and included in the error message. Otherwise it is `undefined`. It is also `undefined` when the signal is very uncommon which should seldomly happen.\n\t*/\n\tsignalDescription?: string;\n}\n\nexport interface ExecaSyncReturnValue<StdoutErrorType = string>\n\textends ExecaReturnBase<StdoutErrorType> {\n}\n\n/**\nResult of a child process execution. On success this is a plain object. On failure this is also an `Error` instance.\n\nThe child process fails when:\n- its exit code is not `0`\n- it was killed with a signal\n- timing out\n- being canceled\n- there's not enough memory or there are already too many child processes\n*/\nexport interface ExecaReturnValue<StdoutErrorType = string>\n\textends ExecaSyncReturnValue<StdoutErrorType> {\n\t/**\n\tThe output of the process with `stdout` and `stderr` interleaved.\n\n\tThis is `undefined` if either:\n\t- the `all` option is `false` (default value)\n\t- `execaSync()` was used\n\t*/\n\tall?: StdoutErrorType;\n\n\t/**\n\tWhether the process was canceled.\n\n\tYou can cancel the spawned process using the [`signal`](https://github.com/sindresorhus/execa#signal-1) option.\n\t*/\n\tisCanceled: boolean;\n}\n\nexport interface ExecaSyncError<StdoutErrorType = string>\n\textends Error,\n\tExecaReturnBase<StdoutErrorType> {\n\t/**\n\tError message when the child process failed to run. In addition to the underlying error message, it also contains some information related to why the child process errored.\n\n\tThe child process stderr then stdout are appended to the end, separated with newlines and not interleaved.\n\t*/\n\tmessage: string;\n\n\t/**\n\tThis is the same as the `message` property except it does not include the child process stdout/stderr.\n\t*/\n\tshortMessage: string;\n\n\t/**\n\tOriginal error message. This is the same as the `message` property except it includes neither the child process stdout/stderr nor some additional information added by Execa.\n\n\tThis is `undefined` unless the child process exited due to an `error` event or a timeout.\n\t*/\n\toriginalMessage?: string;\n}\n\nexport interface ExecaError<StdoutErrorType = string>\n\textends ExecaSyncError<StdoutErrorType> {\n\t/**\n\tThe output of the process with `stdout` and `stderr` interleaved.\n\n\tThis is `undefined` if either:\n\t- the `all` option is `false` (default value)\n\t- `execaSync()` was used\n\t*/\n\tall?: StdoutErrorType;\n\n\t/**\n\tWhether the process was canceled.\n\t*/\n\tisCanceled: boolean;\n}\n\nexport interface KillOptions {\n\t/**\n\tMilliseconds to wait for the child process to terminate before sending `SIGKILL`.\n\n\tCan be disabled with `false`.\n\n\t@default 5000\n\t*/\n\tforceKillAfterTimeout?: number | false;\n}\n\nexport interface ExecaChildPromise<StdoutErrorType> {\n\t/**\n\tStream combining/interleaving [`stdout`](https://nodejs.org/api/child_process.html#child_process_subprocess_stdout) and [`stderr`](https://nodejs.org/api/child_process.html#child_process_subprocess_stderr).\n\n\tThis is `undefined` if either:\n\t\t- the `all` option is `false` (the default value)\n\t\t- both `stdout` and `stderr` options are set to [`'inherit'`, `'ipc'`, `Stream` or `integer`](https://nodejs.org/dist/latest-v6.x/docs/api/child_process.html#child_process_options_stdio)\n\t*/\n\tall?: ReadableStream;\n\n\tcatch<ResultType = never>(\n\t\tonRejected?: (reason: ExecaError<StdoutErrorType>) => ResultType | PromiseLike<ResultType>\n\t): Promise<ExecaReturnValue<StdoutErrorType> | ResultType>;\n\n\t/**\n\tSame as the original [`child_process#kill()`](https://nodejs.org/api/child_process.html#child_process_subprocess_kill_signal), except if `signal` is `SIGTERM` (the default value) and the child process is not terminated after 5 seconds, force it by sending `SIGKILL`.\n\t*/\n\tkill(signal?: string, options?: KillOptions): void;\n\n\t/**\n\tSimilar to [`childProcess.kill()`](https://nodejs.org/api/child_process.html#child_process_subprocess_kill_signal). This is preferred when cancelling the child process execution as the error is more descriptive and [`childProcessResult.isCanceled`](#iscanceled) is set to `true`.\n\t*/\n\tcancel(): void;\n}\n\nexport type ExecaChildProcess<StdoutErrorType = string> = ChildProcess &\nExecaChildPromise<StdoutErrorType> &\nPromise<ExecaReturnValue<StdoutErrorType>>;\n\n/**\nExecute a file.\n\nThink of this as a mix of `child_process.execFile` and `child_process.spawn`.\n\n@param file - The program/script to execute.\n@param arguments - Arguments to pass to `file` on execution.\n@returns A [`child_process` instance](https://nodejs.org/api/child_process.html#child_process_class_childprocess), which is enhanced to also be a `Promise` for a result `Object` with `stdout` and `stderr` properties.\n\n@example\n```\nimport {execa} from 'execa';\n\nconst {stdout} = await execa('echo', ['unicorns']);\nconsole.log(stdout);\n//=> 'unicorns'\n\n// Cancelling a spawned process\n\nconst subprocess = execa('node');\n\nsetTimeout(() => {\n\tsubprocess.cancel()\n}, 1000);\n\ntry {\n\tawait subprocess;\n} catch (error) {\n\tconsole.log(subprocess.killed); // true\n\tconsole.log(error.isCanceled); // true\n}\n\n// Pipe the child process stdout to the current stdout\nexeca('echo', ['unicorns']).stdout.pipe(process.stdout);\n```\n*/\nexport function execa(\n\tfile: string,\n\targuments?: readonly string[],\n\toptions?: Options\n): ExecaChildProcess;\nexport function execa(\n\tfile: string,\n\targuments?: readonly string[],\n\toptions?: Options<null>\n): ExecaChildProcess<Buffer>;\nexport function execa(file: string, options?: Options): ExecaChildProcess;\nexport function execa(file: string, options?: Options<null>): ExecaChildProcess<Buffer>;\n\n/**\nExecute a file synchronously.\n\nThis method throws an `Error` if the command fails.\n\n@param file - The program/script to execute.\n@param arguments - Arguments to pass to `file` on execution.\n@returns A result `Object` with `stdout` and `stderr` properties.\n*/\nexport function execaSync(\n\tfile: string,\n\targuments?: readonly string[],\n\toptions?: SyncOptions\n): ExecaSyncReturnValue;\nexport function execaSync(\n\tfile: string,\n\targuments?: readonly string[],\n\toptions?: SyncOptions<null>\n): ExecaSyncReturnValue<Buffer>;\nexport function execaSync(file: string, options?: SyncOptions): ExecaSyncReturnValue;\nexport function execaSync(\n\tfile: string,\n\toptions?: SyncOptions<null>\n): ExecaSyncReturnValue<Buffer>;\n\n/**\nSame as `execa()` except both file and arguments are specified in a single `command` string. For example, `execa('echo', ['unicorns'])` is the same as `execaCommand('echo unicorns')`.\n\nIf the file or an argument contains spaces, they must be escaped with backslashes. This matters especially if `command` is not a constant but a variable, for example with `__dirname` or `process.cwd()`. Except for spaces, no escaping/quoting is needed.\n\nThe `shell` option must be used if the `command` uses shell-specific features (for example, `&&` or `||`), as opposed to being a simple `file` followed by its `arguments`.\n\n@param command - The program/script to execute and its arguments.\n@returns A [`child_process` instance](https://nodejs.org/api/child_process.html#child_process_class_childprocess), which is enhanced to also be a `Promise` for a result `Object` with `stdout` and `stderr` properties.\n\n@example\n```\nimport {execaCommand} from 'execa';\n\nconst {stdout} = await execaCommand('echo unicorns');\nconsole.log(stdout);\n//=> 'unicorns'\n```\n*/\nexport function execaCommand(command: string, options?: Options): ExecaChildProcess;\nexport function execaCommand(command: string, options?: Options<null>): ExecaChildProcess<Buffer>;\n\n/**\nSame as `execaCommand()` but synchronous.\n\n@param command - The program/script to execute and its arguments.\n@returns A result `Object` with `stdout` and `stderr` properties.\n*/\nexport function execaCommandSync(command: string, options?: SyncOptions): ExecaSyncReturnValue;\nexport function execaCommandSync(command: string, options?: SyncOptions<null>): ExecaSyncReturnValue<Buffer>;\n\n/**\nExecute a Node.js script as a child process.\n\nSame as `execa('node', [scriptPath, ...arguments], options)` except (like [`child_process#fork()`](https://nodejs.org/api/child_process.html#child_process_child_process_fork_modulepath_args_options)):\n\t- the current Node version and options are used. This can be overridden using the `nodePath` and `nodeArguments` options.\n\t- the `shell` option cannot be used\n\t- an extra channel [`ipc`](https://nodejs.org/api/child_process.html#child_process_options_stdio) is passed to [`stdio`](#stdio)\n\n@param scriptPath - Node.js script to execute.\n@param arguments - Arguments to pass to `scriptPath` on execution.\n@returns A [`child_process` instance](https://nodejs.org/api/child_process.html#child_process_class_childprocess), which is enhanced to also be a `Promise` for a result `Object` with `stdout` and `stderr` properties.\n*/\nexport function execaNode(\n\tscriptPath: string,\n\targuments?: readonly string[],\n\toptions?: NodeOptions\n): ExecaChildProcess;\nexport function execaNode(\n\tscriptPath: string,\n\targuments?: readonly string[],\n\toptions?: Options<null>\n): ExecaChildProcess<Buffer>;\nexport function execaNode(scriptPath: string, options?: Options): ExecaChildProcess;\nexport function execaNode(scriptPath: string, options?: Options<null>): ExecaChildProcess<Buffer>;\n/lib/command.js\u0004Jconst normalizeArgs = (file, args = []) => {\n\tif (!Array.isArray(args)) {\n\t\treturn [file];\n\t}\n\n\treturn [file, ...args];\n};\n\nconst NO_ESCAPE_REGEXP = /^[\\w.-]+$/;\nconst DOUBLE_QUOTES_REGEXP = /\"/g;\n\nconst escapeArg = arg => {\n\tif (typeof arg !== 'string' || NO_ESCAPE_REGEXP.test(arg)) {\n\t\treturn arg;\n\t}\n\n\treturn `\"${arg.replace(DOUBLE_QUOTES_REGEXP, '\\\\\"')}\"`;\n};\n\nexport const joinCommand = (file, args) => normalizeArgs(file, args).join(' ');\n\nexport const getEscapedCommand = (file, args) => normalizeArgs(file, args).map(arg => escapeArg(arg)).join(' ');\n\nconst SPACES_REGEXP = / +/g;\n\n// Handle `execaCommand()`\nexport const parseCommand = command => {\n\tconst tokens = [];\n\tfor (const token of command.trim().split(SPACES_REGEXP)) {\n\t\t// Allow spaces to be escaped by a backslash if not meant as a delimiter\n\t\tconst previousToken = tokens[tokens.length - 1];\n\t\tif (previousToken && previousToken.endsWith('\\\\')) {\n\t\t\t// Merge previous token with current one\n\t\t\ttokens[tokens.length - 1] = `${previousToken.slice(0, -1)} ${token}`;\n\t\t} else {\n\t\t\ttokens.push(token);\n\t\t}\n\t}\n\n\treturn tokens;\n};\n/package.json\u0005{\n\t\"name\": \"execa\",\n\t\"version\": \"6.1.0\",\n\t\"description\": \"Process execution for humans\",\n\t\"license\": \"MIT\",\n\t\"repository\": \"sindresorhus/execa\",\n\t\"funding\": \"https://github.com/sindresorhus/execa?sponsor=1\",\n\t\"author\": {\n\t\t\"name\": \"Sindre Sorhus\",\n\t\t\"email\": \"sindresorhus@gmail.com\",\n\t\t\"url\": \"https://sindresorhus.com\"\n\t},\n\t\"type\": \"module\",\n\t\"exports\": \"./index.js\",\n\t\"engines\": {\n\t\t\"node\": \"^12.20.0 || ^14.13.1 || >=16.0.0\"\n\t},\n\t\"scripts\": {\n\t\t\"test\": \"xo && c8 ava && tsd\"\n\t},\n\t\"files\": [\n\t\t\"index.js\",\n\t\t\"index.d.ts\",\n\t\t\"lib\"\n\t],\n\t\"keywords\": [\n\t\t\"exec\",\n\t\t\"child\",\n\t\t\"process\",\n\t\t\"execute\",\n\t\t\"fork\",\n\t\t\"execfile\",\n\t\t\"spawn\",\n\t\t\"file\",\n\t\t\"shell\",\n\t\t\"bin\",\n\t\t\"binary\",\n\t\t\"binaries\",\n\t\t\"npm\",\n\t\t\"path\",\n\t\t\"local\"\n\t],\n\t\"dependencies\": {\n\t\t\"cross-spawn\": \"^7.0.3\",\n\t\t\"get-stream\": \"^6.0.1\",\n\t\t\"human-signals\": \"^3.0.1\",\n\t\t\"is-stream\": \"^3.0.0\",\n\t\t\"merge-stream\": \"^2.0.0\",\n\t\t\"npm-run-path\": \"^5.1.0\",\n\t\t\"onetime\": \"^6.0.0\",\n\t\t\"signal-exit\": \"^3.0.7\",\n\t\t\"strip-final-newline\": \"^3.0.0\"\n\t},\n\t\"devDependencies\": {\n\t\t\"@types/node\": \"^17.0.17\",\n\t\t\"ava\": \"^4.0.1\",\n\t\t\"c8\": \"^7.11.0\",\n\t\t\"get-node\": \"^12.0.0\",\n\t\t\"is-running\": \"^2.1.0\",\n\t\t\"p-event\": \"^5.0.1\",\n\t\t\"semver\": \"^7.3.5\",\n\t\t\"tempfile\": \"^4.0.0\",\n\t\t\"tsd\": \"^0.19.1\",\n\t\t\"xo\": \"^0.48.0\"\n\t},\n\t\"c8\": {\n\t\t\"reporter\": [\n\t\t\t\"text\",\n\t\t\t\"lcov\"\n\t\t],\n\t\t\"exclude\": [\n\t\t\t\"**/fixtures/**\",\n\t\t\t\"**/test.js\",\n\t\t\t\"**/test/**\"\n\t\t]\n\t},\n\t\"xo\": {\n\t\t\"rules\": {\n\t\t\t\"unicorn/no-empty-file\": \"off\",\n\t\t\t\"@typescript-eslint/ban-types\": \"off\"\n\t\t}\n\t}\n}\n/lib/error.js\bQimport {signalsByName} from 'human-signals';\n\nconst getErrorPrefix = ({timedOut, timeout, errorCode, signal, signalDescription, exitCode, isCanceled}) => {\n\tif (timedOut) {\n\t\treturn `timed out after ${timeout} milliseconds`;\n\t}\n\n\tif (isCanceled) {\n\t\treturn 'was canceled';\n\t}\n\n\tif (errorCode !== undefined) {\n\t\treturn `failed with ${errorCode}`;\n\t}\n\n\tif (signal !== undefined) {\n\t\treturn `was killed with ${signal} (${signalDescription})`;\n\t}\n\n\tif (exitCode !== undefined) {\n\t\treturn `failed with exit code ${exitCode}`;\n\t}\n\n\treturn 'failed';\n};\n\nexport const makeError = ({\n\tstdout,\n\tstderr,\n\tall,\n\terror,\n\tsignal,\n\texitCode,\n\tcommand,\n\tescapedCommand,\n\ttimedOut,\n\tisCanceled,\n\tkilled,\n\tparsed: {options: {timeout}},\n}) => {\n\t// `signal` and `exitCode` emitted on `spawned.on('exit')` event can be `null`.\n\t// We normalize them to `undefined`\n\texitCode = exitCode === null ? undefined : exitCode;\n\tsignal = signal === null ? undefined : signal;\n\tconst signalDescription = signal === undefined ? undefined : signalsByName[signal].description;\n\n\tconst errorCode = error && error.code;\n\n\tconst prefix = getErrorPrefix({timedOut, timeout, errorCode, signal, signalDescription, exitCode, isCanceled});\n\tconst execaMessage = `Command ${prefix}: ${command}`;\n\tconst isError = Object.prototype.toString.call(error) === '[object Error]';\n\tconst shortMessage = isError ? `${execaMessage}\\n${error.message}` : execaMessage;\n\tconst message = [shortMessage, stderr, stdout].filter(Boolean).join('\\n');\n\n\tif (isError) {\n\t\terror.originalMessage = error.message;\n\t\terror.message = message;\n\t} else {\n\t\terror = new Error(message);\n\t}\n\n\terror.shortMessage = shortMessage;\n\terror.command = command;\n\terror.escapedCommand = escapedCommand;\n\terror.exitCode = exitCode;\n\terror.signal = signal;\n\terror.signalDescription = signalDescription;\n\terror.stdout = stdout;\n\terror.stderr = stderr;\n\n\tif (all !== undefined) {\n\t\terror.all = all;\n\t}\n\n\tif ('bufferedData' in error) {\n\t\tdelete error.bufferedData;\n\t}\n\n\terror.failed = true;\n\terror.timedOut = Boolean(timedOut);\n\terror.isCanceled = isCanceled;\n\terror.killed = killed && !timedOut;\n\n\treturn error;\n};\n/license\u0004]MIT License\n\nCopyright (c) Sindre Sorhus <sindresorhus@gmail.com> (https://sindresorhus.com)\n\nPermission 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:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE 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.\n/readme.mdN\u0002<img src=\"media/logo.svg\" width=\"400\">\n<br>\n\n[![Coverage Status](https://codecov.io/gh/sindresorhus/execa/branch/main/graph/badge.svg)](https://codecov.io/gh/sindresorhus/execa)\n\n> Process execution for humans\n\n## Why\n\nThis package improves [`child_process`](https://nodejs.org/api/child_process.html) methods with:\n\n- Promise interface.\n- [Strips the final newline](#stripfinalnewline) from the output so you don't have to do `stdout.trim()`.\n- Supports [shebang](https://en.wikipedia.org/wiki/Shebang_(Unix)) binaries cross-platform.\n- [Improved Windows support.](https://github.com/IndigoUnited/node-cross-spawn#why)\n- Higher max buffer. 100 MB instead of 200 KB.\n- [Executes locally installed binaries by name.](#preferlocal)\n- [Cleans up spawned processes when the parent process dies.](#cleanup)\n- [Get interleaved output](#all) from `stdout` and `stderr` similar to what is printed on the terminal. [*(Async only)*](#execasyncfile-arguments-options)\n- [Can specify file and arguments as a single string without a shell](#execacommandcommand-options)\n- More descriptive errors.\n\n## Install\n\n```sh\nnpm install execa\n```\n\n## Usage\n\n```js\nimport {execa} from 'execa';\n\nconst {stdout} = await execa('echo', ['unicorns']);\nconsole.log(stdout);\n//=> 'unicorns'\n```\n\n### Pipe the child process stdout to the parent\n\n```js\nimport {execa} from 'execa';\n\nexeca('echo', ['unicorns']).stdout.pipe(process.stdout);\n```\n\n### Handling Errors\n\n```js\nimport {execa} from 'execa';\n\n// Catching an error\ntry {\n\tawait execa('unknown', ['command']);\n} catch (error) {\n\tconsole.log(error);\n\t/*\n\t{\n\t\tmessage: 'Command failed with ENOENT: unknown command spawn unknown ENOENT',\n\t\terrno: -2,\n\t\tcode: 'ENOENT',\n\t\tsyscall: 'spawn unknown',\n\t\tpath: 'unknown',\n\t\tspawnargs: ['command'],\n\t\toriginalMessage: 'spawn unknown ENOENT',\n\t\tshortMessage: 'Command failed with ENOENT: unknown command spawn unknown ENOENT',\n\t\tcommand: 'unknown command',\n\t\tescapedCommand: 'unknown command',\n\t\tstdout: '',\n\t\tstderr: '',\n\t\tall: '',\n\t\tfailed: true,\n\t\ttimedOut: false,\n\t\tisCanceled: false,\n\t\tkilled: false\n\t}\n\t*/\n}\n```\n\n### Cancelling a spawned process\n\n```js\nimport {execa} from 'execa';\n\nconst abortController = new AbortController();\nconst subprocess = execa('node', [], {signal: abortController.signal});\n\nsetTimeout(() => {\n\tabortController.abort();\n}, 1000);\n\ntry {\n\tawait subprocess;\n} catch (error) {\n\tconsole.log(subprocess.killed); // true\n\tconsole.log(error.isCanceled); // true\n}\n```\n\n### Catching an error with the sync method\n\n```js\nimport {execaSync} from 'execa';\n\ntry {\n\texecaSync('unknown', ['command']);\n} catch (error) {\n\tconsole.log(error);\n\t/*\n\t{\n\t\tmessage: 'Command failed with ENOENT: unknown command spawnSync unknown ENOENT',\n\t\terrno: -2,\n\t\tcode: 'ENOENT',\n\t\tsyscall: 'spawnSync unknown',\n\t\tpath: 'unknown',\n\t\tspawnargs: ['command'],\n\t\toriginalMessage: 'spawnSync unknown ENOENT',\n\t\tshortMessage: 'Command failed with ENOENT: unknown command spawnSync unknown ENOENT',\n\t\tcommand: 'unknown command',\n\t\tescapedCommand: 'unknown command',\n\t\tstdout: '',\n\t\tstderr: '',\n\t\tall: '',\n\t\tfailed: true,\n\t\ttimedOut: false,\n\t\tisCanceled: false,\n\t\tkilled: false\n\t}\n\t*/\n}\n```\n\n### Kill a process\n\nUsing SIGTERM, and after 2 seconds, kill it with SIGKILL.\n\n```js\nconst subprocess = execa('node');\n\nsetTimeout(() => {\n\tsubprocess.kill('SIGTERM', {\n\t\tforceKillAfterTimeout: 2000\n\t});\n}, 1000);\n```\n\n## API\n\n### execa(file, arguments, options?)\n\nExecute a file. Think of this as a mix of [`child_process.execFile()`](https://nodejs.org/api/child_process.html#child_process_child_process_execfile_file_args_options_callback) and [`child_process.spawn()`](https://nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options).\n\nNo escaping/quoting is needed.\n\nUnless the [`shell`](#shell) option is used, no shell interpreter (Bash, `cmd.exe`, etc.) is used, so shell features such as variables substitution (`echo $PATH`) are not allowed.\n\nReturns a [`child_process` instance](https://nodejs.org/api/child_process.html#child_process_class_childprocess) which:\n  - is also a `Promise` resolving or rejecting with a [`childProcessResult`](#childProcessResult).\n  - exposes the following additional methods and properties.\n\n#### kill(signal?, options?)\n\nSame as the original [`child_process#kill()`](https://nodejs.org/api/child_process.html#child_process_subprocess_kill_signal) except: if `signal` is `SIGTERM` (the default value) and the child process is not terminated after 5 seconds, force it by sending `SIGKILL`.\n\n##### options.forceKillAfterTimeout\n\nType: `number | false`\\\nDefault: `5000`\n\nMilliseconds to wait for the child process to terminate before sending `SIGKILL`.\n\nCan be disabled with `false`.\n\n#### all\n\nType: `ReadableStream | undefined`\n\nStream combining/interleaving [`stdout`](https://nodejs.org/api/child_process.html#child_process_subprocess_stdout) and [`stderr`](https://nodejs.org/api/child_process.html#child_process_subprocess_stderr).\n\nThis is `undefined` if either:\n  - the [`all` option](#all-2) is `false` (the default value)\n  - both [`stdout`](#stdout-1) and [`stderr`](#stderr-1) options are set to [`'inherit'`, `'ipc'`, `Stream` or `integer`](https://nodejs.org/dist/latest-v6.x/docs/api/child_process.html#child_process_options_stdio)\n\n### execaSync(file, arguments?, options?)\n\nExecute a file synchronously.\n\nReturns or throws a [`childProcessResult`](#childProcessResult).\n\n### execaCommand(command, options?)\n\nSame as [`execa()`](#execafile-arguments-options) except both file and arguments are specified in a single `command` string. For example, `execa('echo', ['unicorns'])` is the same as `execaCommand('echo unicorns')`.\n\nIf the file or an argument contains spaces, they must be escaped with backslashes. This matters especially if `command` is not a constant but a variable, for example with `__dirname` or `process.cwd()`. Except for spaces, no escaping/quoting is needed.\n\nThe [`shell` option](#shell) must be used if the `command` uses shell-specific features (for example, `&&` or `||`), as opposed to being a simple `file` followed by its `arguments`.\n\n### execaCommandSync(command, options?)\n\nSame as [`execaCommand()`](#execacommand-command-options) but synchronous.\n\nReturns or throws a [`childProcessResult`](#childProcessResult).\n\n### execaNode(scriptPath, arguments?, options?)\n\nExecute a Node.js script as a child process.\n\nSame as `execa('node', [scriptPath, ...arguments], options)` except (like [`child_process#fork()`](https://nodejs.org/api/child_process.html#child_process_child_process_fork_modulepath_args_options)):\n  - the current Node version and options are used. This can be overridden using the [`nodePath`](#nodepath-for-node-only) and [`nodeOptions`](#nodeoptions-for-node-only) options.\n  - the [`shell`](#shell) option cannot be used\n  - an extra channel [`ipc`](https://nodejs.org/api/child_process.html#child_process_options_stdio) is passed to [`stdio`](#stdio)\n\n### childProcessResult\n\nType: `object`\n\nResult of a child process execution. On success this is a plain object. On failure this is also an `Error` instance.\n\nThe child process [fails](#failed) when:\n- its [exit code](#exitcode) is not `0`\n- it was [killed](#killed) with a [signal](#signal)\n- [timing out](#timedout)\n- [being canceled](#iscanceled)\n- there's not enough memory or there are already too many child processes\n\n#### command\n\nType: `string`\n\nThe file and arguments that were run, for logging purposes.\n\nThis is not escaped and should not be executed directly as a process, including using [`execa()`](#execafile-arguments-options) or [`execaCommand()`](#execacommandcommand-options).\n\n#### escapedCommand\n\nType: `string`\n\nSame as [`command`](#command) but escaped.\n\nThis is meant to be copy and pasted into a shell, for debugging purposes.\nSince the escaping is fairly basic, this should not be executed directly as a process, including using [`execa()`](#execafile-arguments-options) or [`execaCommand()`](#execacommandcommand-options).\n\n#### exitCode\n\nType: `number`\n\nThe numeric exit code of the process that was run.\n\n#### stdout\n\nType: `string | Buffer`\n\nThe output of the process on stdout.\n\n#### stderr\n\nType: `string | Buffer`\n\nThe output of the process on stderr.\n\n#### all\n\nType: `string | Buffer | undefined`\n\nThe output of the process with `stdout` and `stderr` interleaved.\n\nThis is `undefined` if either:\n  - the [`all` option](#all-2) is `false` (the default value)\n  - `execaSync()` was used\n\n#### failed\n\nType: `boolean`\n\nWhether the process failed to run.\n\n#### timedOut\n\nType: `boolean`\n\nWhether the process timed out.\n\n#### isCanceled\n\nType: `boolean`\n\nWhether the process was canceled.\n\nYou can cancel the spawned process using the [`signal`](#signal-1) option.\n\n#### killed\n\nType: `boolean`\n\nWhether the process was killed.\n\n#### signal\n\nType: `string | undefined`\n\nThe name of the signal that was used to terminate the process. For example, `SIGFPE`.\n\nIf a signal terminated the process, this property is defined and included in the error message. Otherwise it is `undefined`.\n\n#### signalDescription\n\nType: `string | undefined`\n\nA human-friendly description of the signal that was used to terminate the process. For example, `Floating point arithmetic error`.\n\nIf a signal terminated the process, this property is defined and included in the error message. Otherwise it is `undefined`. It is also `undefined` when the signal is very uncommon which should seldomly happen.\n\n#### message\n\nType: `string`\n\nError message when the child process failed to run. In addition to the [underlying error message](#originalMessage), it also contains some information related to why the child process errored.\n\nThe child process [stderr](#stderr) then [stdout](#stdout) are appended to the end, separated with newlines and not interleaved.\n\n#### shortMessage\n\nType: `string`\n\nThis is the same as the [`message` property](#message) except it does not include the child process stdout/stderr.\n\n#### originalMessage\n\nType: `string | undefined`\n\nOriginal error message. This is the same as the `message` property except it includes neither the child process stdout/stderr nor some additional information added by Execa.\n\nThis is `undefined` unless the child process exited due to an `error` event or a timeout.\n\n### options\n\nType: `object`\n\n#### cleanup\n\nType: `boolean`\\\nDefault: `true`\n\nKill the spawned process when the parent process exits unless either:\n\t- the spawned process is [`detached`](https://nodejs.org/api/child_process.html#child_process_options_detached)\n\t- the parent process is terminated abruptly, for example, with `SIGKILL` as opposed to `SIGTERM` or a normal exit\n\n#### preferLocal\n\nType: `boolean`\\\nDefault: `false`\n\nPrefer locally installed binaries when looking for a binary to execute.\\\nIf you `$ npm install foo`, you can then `execa('foo')`.\n\n#### localDir\n\nType: `string | URL`\\\nDefault: `process.cwd()`\n\nPreferred path to find locally installed binaries in (use with `preferLocal`).\n\nUsing a `URL` is only supported in Node.js `14.18.0`, `16.14.0` or above.\n\n#### execPath\n\nType: `string`\\\nDefault: `process.execPath` (Current Node.js executable)\n\nPath to the Node.js executable to use in child processes.\n\nThis can be either an absolute path or a path relative to the [`cwd` option](#cwd).\n\nRequires [`preferLocal`](#preferlocal) to be `true`.\n\nFor example, this can be used together with [`get-node`](https://github.com/ehmicky/get-node) to run a specific Node.js version in a child process.\n\n#### buffer\n\nType: `boolean`\\\nDefault: `true`\n\nBuffer the output from the spawned process. When set to `false`, you must read the output of [`stdout`](#stdout-1) and [`stderr`](#stderr-1) (or [`all`](#all) if the [`all`](#all-2) option is `true`). Otherwise the returned promise will not be resolved/rejected.\n\nIf the spawned process fails, [`error.stdout`](#stdout), [`error.stderr`](#stderr), and [`error.all`](#all) will contain the buffered data.\n\n#### input\n\nType: `string | Buffer | stream.Readable`\n\nWrite some input to the `stdin` of your binary.\\\nStreams are not allowed when using the synchronous methods.\n\n#### stdin\n\nType: `string | number | Stream | undefined`\\\nDefault: `pipe`\n\nSame options as [`stdio`](https://nodejs.org/dist/latest-v6.x/docs/api/child_process.html#child_process_options_stdio).\n\n#### stdout\n\nType: `string | number | Stream | undefined`\\\nDefault: `pipe`\n\nSame options as [`stdio`](https://nodejs.org/dist/latest-v6.x/docs/api/child_process.html#child_process_options_stdio).\n\n#### stderr\n\nType: `string | number | Stream | undefined`\\\nDefault: `pipe`\n\nSame options as [`stdio`](https://nodejs.org/dist/latest-v6.x/docs/api/child_process.html#child_process_options_stdio).\n\n#### all\n\nType: `boolean`\\\nDefault: `false`\n\nAdd an `.all` property on the [promise](#all) and the [resolved value](#all-1). The property contains the output of the process with `stdout` and `stderr` interleaved.\n\n#### reject\n\nType: `boolean`\\\nDefault: `true`\n\nSetting this to `false` resolves the promise with the error instead of rejecting it.\n\n#### stripFinalNewline\n\nType: `boolean`\\\nDefault: `true`\n\nStrip the final [newline character](https://en.wikipedia.org/wiki/Newline) from the output.\n\n#### extendEnv\n\nType: `boolean`\\\nDefault: `true`\n\nSet to `false` if you don't want to extend the environment variables when providing the `env` property.\n\n---\n\nExeca also accepts the below options which are the same as the options for [`child_process#spawn()`](https://nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options)/[`child_process#exec()`](https://nodejs.org/api/child_process.html#child_process_child_process_exec_command_options_callback)\n\n#### cwd\n\nType: `string | URL`\\\nDefault: `process.cwd()`\n\nCurrent working directory of the child process.\n\nUsing a `URL` is only supported in Node.js `14.18.0`, `16.14.0` or above.\n\n#### env\n\nType: `object`\\\nDefault: `process.env`\n\nEnvironment key-value pairs. Extends automatically from `process.env`. Set [`extendEnv`](#extendenv) to `false` if you don't want this.\n\n#### argv0\n\nType: `string`\n\nExplicitly set the value of `argv[0]` sent to the child process. This will be set to `file` if not specified.\n\n#### stdio\n\nType: `string | string[]`\\\nDefault: `pipe`\n\nChild's [stdio](https://nodejs.org/api/child_process.html#child_process_options_stdio) configuration.\n\n#### serialization\n\nType: `string`\\\nDefault: `'json'`\n\nSpecify the kind of serialization used for sending messages between processes when using the [`stdio: 'ipc'`](#stdio) option or [`execaNode()`](#execanodescriptpath-arguments-options):\n\t- `json`: Uses `JSON.stringify()` and `JSON.parse()`.\n\t- `advanced`: Uses [`v8.serialize()`](https://nodejs.org/api/v8.html#v8_v8_serialize_value)\n\nRequires Node.js `13.2.0` or later.\n\n[More info.](https://nodejs.org/api/child_process.html#child_process_advanced_serialization)\n\n#### detached\n\nType: `boolean`\n\nPrepare child to run independently of its parent process. Specific behavior [depends on the platform](https://nodejs.org/api/child_process.html#child_process_options_detached).\n\n#### uid\n\nType: `number`\n\nSets the user identity of the process.\n\n#### gid\n\nType: `number`\n\nSets the group identity of the process.\n\n#### shell\n\nType: `boolean | string`\\\nDefault: `false`\n\nIf `true`, runs `file` inside of a shell. Uses `/bin/sh` on UNIX and `cmd.exe` on Windows. A different shell can be specified as a string. The shell should understand the `-c` switch on UNIX or `/d /s /c` on Windows.\n\nWe recommend against using this option since it is:\n- not cross-platform, encouraging shell-specific syntax.\n- slower, because of the additional shell interpretation.\n- unsafe, potentially allowing command injection.\n\n#### encoding\n\nType: `string | null`\\\nDefault: `utf8`\n\nSpecify the character encoding used to decode the `stdout` and `stderr` output. If set to `null`, then `stdout` and `stderr` will be a `Buffer` instead of a string.\n\n#### timeout\n\nType: `number`\\\nDefault: `0`\n\nIf timeout is greater than `0`, the parent will send the signal identified by the `killSignal` property (the default is `SIGTERM`) if the child runs longer than timeout milliseconds.\n\n#### maxBuffer\n\nType: `number`\\\nDefault: `100_000_000` (100 MB)\n\nLargest amount of data in bytes allowed on `stdout` or `stderr`.\n\n#### killSignal\n\nType: `string | number`\\\nDefault: `SIGTERM`\n\nSignal value to be used when the spawned process will be killed.\n\n#### signal\n\nType: [`AbortSignal`](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal)\n\nYou can abort the spawned process using [`AbortController`](https://developer.mozilla.org/en-US/docs/Web/API/AbortController).\n\nWhen `AbortController.abort()` is called, [`.isCanceled`](#iscanceled) becomes `false`.\n\n*Requires Node.js 16 or later.*\n\n#### windowsVerbatimArguments\n\nType: `boolean`\\\nDefault: `false`\n\nIf `true`, no quoting or escaping of arguments is done on Windows. Ignored on other platforms. This is set to `true` automatically when the `shell` option is `true`.\n\n#### windowsHide\n\nType: `boolean`\\\nDefault: `true`\n\nOn Windows, do not create a new console window. Please note this also prevents `CTRL-C` [from working](https://github.com/nodejs/node/issues/29837) on Windows.\n\n#### nodePath *(For `.node()` only)*\n\nType: `string`\\\nDefault: [`process.execPath`](https://nodejs.org/api/process.html#process_process_execpath)\n\nNode.js executable used to create the child process.\n\n#### nodeOptions *(For `.node()` only)*\n\nType: `string[]`\\\nDefault: [`process.execArgv`](https://nodejs.org/api/process.html#process_process_execargv)\n\nList of [CLI options](https://nodejs.org/api/cli.html#cli_options) passed to the Node.js executable.\n\n## Tips\n\n### Retry on error\n\nGracefully handle failures by using automatic retries and exponential backoff with the [`p-retry`](https://github.com/sindresorhus/p-retry) package:\n\n```js\nimport pRetry from 'p-retry';\n\nconst run = async () => {\n\tconst results = await execa('curl', ['-sSL', 'https://sindresorhus.com/unicorn']);\n\treturn results;\n};\n\nconsole.log(await pRetry(run, {retries: 5}));\n```\n\n### Save and pipe output from a child process\n\nLet's say you want to show the output of a child process in real-time while also saving it to a variable.\n\n```js\nimport {execa} from 'execa';\n\nconst subprocess = execa('echo', ['foo']);\nsubprocess.stdout.pipe(process.stdout);\n\nconst {stdout} = await subprocess;\nconsole.log('child output:', stdout);\n```\n\n### Redirect output to a file\n\n```js\nimport {execa} from 'execa';\n\nconst subprocess = execa('echo', ['foo'])\nsubprocess.stdout.pipe(fs.createWriteStream('stdout.txt'))\n```\n\n### Redirect input from a file\n\n```js\nimport {execa} from 'execa';\n\nconst subprocess = execa('cat')\nfs.createReadStream('stdin.txt').pipe(subprocess.stdin)\n```\n\n### Execute the current package's binary\n\n```js\nimport {getBinPathSync} from 'get-bin-path';\n\nconst binPath = getBinPathSync();\nconst subprocess = execa(binPath);\n```\n\n`execa` can be combined with [`get-bin-path`](https://github.com/ehmicky/get-bin-path) to test the current package's binary. As opposed to hard-coding the path to the binary, this validates that the `package.json` `bin` field is correctly set up.\n\n## Related\n\n- [gulp-execa](https://github.com/ehmicky/gulp-execa) - Gulp plugin for `execa`\n- [nvexeca](https://github.com/ehmicky/nvexeca) - Run `execa` using any Node.js version\n- [sudo-prompt](https://github.com/jorangreef/sudo-prompt) - Run commands with elevated privileges.\n\n## Maintainers\n\n- [Sindre Sorhus](https://github.com/sindresorhus)\n- [@ehmicky](https://github.com/ehmicky)\n\n---\n\n<div align=\"center\">\n\t<b>\n\t\t<a href=\"https://tidelift.com/subscription/pkg/npm-execa?utm_source=npm-execa&utm_medium=referral&utm_campaign=readme\">Get professional support for this package with a Tidelift subscription</a>\n\t</b>\n\t<br>\n\t<sub>\n\t\tTidelift helps make open source sustainable for maintainers while giving companies<br>assurances about security, maintenance, and licensing for their dependencies.\n\t</sub>\n</div>\n/index.js\u0019import {Buffer} from 'node:buffer';\nimport path from 'node:path';\nimport childProcess from 'node:child_process';\nimport process from 'node:process';\nimport crossSpawn from 'cross-spawn';\nimport stripFinalNewline from 'strip-final-newline';\nimport {npmRunPathEnv} from 'npm-run-path';\nimport onetime from 'onetime';\nimport {makeError} from './lib/error.js';\nimport {normalizeStdio, normalizeStdioNode} from './lib/stdio.js';\nimport {spawnedKill, spawnedCancel, setupTimeout, validateTimeout, setExitHandler} from './lib/kill.js';\nimport {handleInput, getSpawnedResult, makeAllStream, validateInputSync} from './lib/stream.js';\nimport {mergePromise, getSpawnedPromise} from './lib/promise.js';\nimport {joinCommand, parseCommand, getEscapedCommand} from './lib/command.js';\n\nconst DEFAULT_MAX_BUFFER = 1000 * 1000 * 100;\n\nconst getEnv = ({env: envOption, extendEnv, preferLocal, localDir, execPath}) => {\n\tconst env = extendEnv ? {...process.env, ...envOption} : envOption;\n\n\tif (preferLocal) {\n\t\treturn npmRunPathEnv({env, cwd: localDir, execPath});\n\t}\n\n\treturn env;\n};\n\nconst handleArguments = (file, args, options = {}) => {\n\tconst parsed = crossSpawn._parse(file, args, options);\n\tfile = parsed.command;\n\targs = parsed.args;\n\toptions = parsed.options;\n\n\toptions = {\n\t\tmaxBuffer: DEFAULT_MAX_BUFFER,\n\t\tbuffer: true,\n\t\tstripFinalNewline: true,\n\t\textendEnv: true,\n\t\tpreferLocal: false,\n\t\tlocalDir: options.cwd || process.cwd(),\n\t\texecPath: process.execPath,\n\t\tencoding: 'utf8',\n\t\treject: true,\n\t\tcleanup: true,\n\t\tall: false,\n\t\twindowsHide: true,\n\t\t...options,\n\t};\n\n\toptions.env = getEnv(options);\n\n\toptions.stdio = normalizeStdio(options);\n\n\tif (process.platform === 'win32' && path.basename(file, '.exe') === 'cmd') {\n\t\t// #116\n\t\targs.unshift('/q');\n\t}\n\n\treturn {file, args, options, parsed};\n};\n\nconst handleOutput = (options, value, error) => {\n\tif (typeof value !== 'string' && !Buffer.isBuffer(value)) {\n\t\t// When `execaSync()` errors, we normalize it to '' to mimic `execa()`\n\t\treturn error === undefined ? undefined : '';\n\t}\n\n\tif (options.stripFinalNewline) {\n\t\treturn stripFinalNewline(value);\n\t}\n\n\treturn value;\n};\n\nexport function execa(file, args, options) {\n\tconst parsed = handleArguments(file, args, options);\n\tconst command = joinCommand(file, args);\n\tconst escapedCommand = getEscapedCommand(file, args);\n\n\tvalidateTimeout(parsed.options);\n\n\tlet spawned;\n\ttry {\n\t\tspawned = childProcess.spawn(parsed.file, parsed.args, parsed.options);\n\t} catch (error) {\n\t\t// Ensure the returned error is always both a promise and a child process\n\t\tconst dummySpawned = new childProcess.ChildProcess();\n\t\tconst errorPromise = Promise.reject(makeError({\n\t\t\terror,\n\t\t\tstdout: '',\n\t\t\tstderr: '',\n\t\t\tall: '',\n\t\t\tcommand,\n\t\t\tescapedCommand,\n\t\t\tparsed,\n\t\t\ttimedOut: false,\n\t\t\tisCanceled: false,\n\t\t\tkilled: false,\n\t\t}));\n\t\treturn mergePromise(dummySpawned, errorPromise);\n\t}\n\n\tconst spawnedPromise = getSpawnedPromise(spawned);\n\tconst timedPromise = setupTimeout(spawned, parsed.options, spawnedPromise);\n\tconst processDone = setExitHandler(spawned, parsed.options, timedPromise);\n\n\tconst context = {isCanceled: false};\n\n\tspawned.kill = spawnedKill.bind(null, spawned.kill.bind(spawned));\n\tspawned.cancel = spawnedCancel.bind(null, spawned, context);\n\n\tconst handlePromise = async () => {\n\t\tconst [{error, exitCode, signal, timedOut}, stdoutResult, stderrResult, allResult] = await getSpawnedResult(spawned, parsed.options, processDone);\n\t\tconst stdout = handleOutput(parsed.options, stdoutResult);\n\t\tconst stderr = handleOutput(parsed.options, stderrResult);\n\t\tconst all = handleOutput(parsed.options, allResult);\n\n\t\tif (error || exitCode !== 0 || signal !== null) {\n\t\t\tconst returnedError = makeError({\n\t\t\t\terror,\n\t\t\t\texitCode,\n\t\t\t\tsignal,\n\t\t\t\tstdout,\n\t\t\t\tstderr,\n\t\t\t\tall,\n\t\t\t\tcommand,\n\t\t\t\tescapedCommand,\n\t\t\t\tparsed,\n\t\t\t\ttimedOut,\n\t\t\t\tisCanceled: context.isCanceled || (parsed.options.signal ? parsed.options.signal.aborted : false),\n\t\t\t\tkilled: spawned.killed,\n\t\t\t});\n\n\t\t\tif (!parsed.options.reject) {\n\t\t\t\treturn returnedError;\n\t\t\t}\n\n\t\t\tthrow returnedError;\n\t\t}\n\n\t\treturn {\n\t\t\tcommand,\n\t\t\tescapedCommand,\n\t\t\texitCode: 0,\n\t\t\tstdout,\n\t\t\tstderr,\n\t\t\tall,\n\t\t\tfailed: false,\n\t\t\ttimedOut: false,\n\t\t\tisCanceled: false,\n\t\t\tkilled: false,\n\t\t};\n\t};\n\n\tconst handlePromiseOnce = onetime(handlePromise);\n\n\thandleInput(spawned, parsed.options.input);\n\n\tspawned.all = makeAllStream(spawned, parsed.options);\n\n\treturn mergePromise(spawned, handlePromiseOnce);\n}\n\nexport function execaSync(file, args, options) {\n\tconst parsed = handleArguments(file, args, options);\n\tconst command = joinCommand(file, args);\n\tconst escapedCommand = getEscapedCommand(file, args);\n\n\tvalidateInputSync(parsed.options);\n\n\tlet result;\n\ttry {\n\t\tresult = childProcess.spawnSync(parsed.file, parsed.args, parsed.options);\n\t} catch (error) {\n\t\tthrow makeError({\n\t\t\terror,\n\t\t\tstdout: '',\n\t\t\tstderr: '',\n\t\t\tall: '',\n\t\t\tcommand,\n\t\t\tescapedCommand,\n\t\t\tparsed,\n\t\t\ttimedOut: false,\n\t\t\tisCanceled: false,\n\t\t\tkilled: false,\n\t\t});\n\t}\n\n\tconst stdout = handleOutput(parsed.options, result.stdout, result.error);\n\tconst stderr = handleOutput(parsed.options, result.stderr, result.error);\n\n\tif (result.error || result.status !== 0 || result.signal !== null) {\n\t\tconst error = makeError({\n\t\t\tstdout,\n\t\t\tstderr,\n\t\t\terror: result.error,\n\t\t\tsignal: result.signal,\n\t\t\texitCode: result.status,\n\t\t\tcommand,\n\t\t\tescapedCommand,\n\t\t\tparsed,\n\t\t\ttimedOut: result.error && result.error.code === 'ETIMEDOUT',\n\t\t\tisCanceled: false,\n\t\t\tkilled: result.signal !== null,\n\t\t});\n\n\t\tif (!parsed.options.reject) {\n\t\t\treturn error;\n\t\t}\n\n\t\tthrow error;\n\t}\n\n\treturn {\n\t\tcommand,\n\t\tescapedCommand,\n\t\texitCode: 0,\n\t\tstdout,\n\t\tstderr,\n\t\tfailed: false,\n\t\ttimedOut: false,\n\t\tisCanceled: false,\n\t\tkilled: false,\n\t};\n}\n\nexport function execaCommand(command, options) {\n\tconst [file, ...args] = parseCommand(command);\n\treturn execa(file, args, options);\n}\n\nexport function execaCommandSync(command, options) {\n\tconst [file, ...args] = parseCommand(command);\n\treturn execaSync(file, args, options);\n}\n\nexport function execaNode(scriptPath, args, options = {}) {\n\tif (args && !Array.isArray(args) && typeof args === 'object') {\n\t\toptions = args;\n\t\targs = [];\n\t}\n\n\tconst stdio = normalizeStdioNode(options);\n\tconst defaultExecArgv = process.execArgv.filter(arg => !arg.startsWith('--inspect'));\n\n\tconst {\n\t\tnodePath = process.execPath,\n\t\tnodeOptions = defaultExecArgv,\n\t} = options;\n\n\treturn execa(\n\t\tnodePath,\n\t\t[\n\t\t\t...nodeOptions,\n\t\t\tscriptPath,\n\t\t\t...(Array.isArray(args) ? args : []),\n\t\t],\n\t\t{\n\t\t\t...options,\n\t\t\tstdin: undefined,\n\t\t\tstdout: undefined,\n\t\t\tstderr: undefined,\n\t\t\tstdio,\n\t\t\tshell: false,\n\t\t},\n\t);\n}\n/lib/promise.js\u0004+const nativePromisePrototype = (async () => {})().constructor.prototype;\nconst descriptors = ['then', 'catch', 'finally'].map(property => [\n\tproperty,\n\tReflect.getOwnPropertyDescriptor(nativePromisePrototype, property),\n]);\n\n// The return value is a mixin of `childProcess` and `Promise`\nexport const mergePromise = (spawned, promise) => {\n\tfor (const [property, descriptor] of descriptors) {\n\t\t// Starting the main `promise` is deferred to avoid consuming streams\n\t\tconst value = typeof promise === 'function'\n\t\t\t? (...args) => Reflect.apply(descriptor.value, promise(), args)\n\t\t\t: descriptor.value.bind(promise);\n\n\t\tReflect.defineProperty(spawned, property, {...descriptor, value});\n\t}\n\n\treturn spawned;\n};\n\n// Use promises instead of `child_process` events\nexport const getSpawnedPromise = spawned => new Promise((resolve, reject) => {\n\tspawned.on('exit', (exitCode, signal) => {\n\t\tresolve({exitCode, signal});\n\t});\n\n\tspawned.on('error', error => {\n\t\treject(error);\n\t});\n\n\tif (spawned.stdin) {\n\t\tspawned.stdin.on('error', error => {\n\t\t\treject(error);\n\t\t});\n\t}\n});\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/Zm9ybS1kYXRhQDMuMC4x",
    "content": "/License\u0004^Copyright (c) 2012 Felix Geisendörfer (felix@debuggable.com) and contributors\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in\n all copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n/README.md.bak.%# Form-Data [![NPM Module](https://img.shields.io/npm/v/form-data.svg)](https://www.npmjs.com/package/form-data) [![Join the chat at https://gitter.im/form-data/form-data](http://form-data.github.io/images/gitterbadge.svg)](https://gitter.im/form-data/form-data)\n\nA library to create readable ```\"multipart/form-data\"``` streams. Can be used to submit forms and file uploads to other web applications.\n\nThe API of this library is inspired by the [XMLHttpRequest-2 FormData Interface][xhr2-fd].\n\n[xhr2-fd]: http://dev.w3.org/2006/webapi/XMLHttpRequest-2/Overview.html#the-formdata-interface\n\n[![Linux Build](https://img.shields.io/travis/form-data/form-data/v3.0.1.svg?label=linux:6.x-12.x)](https://travis-ci.org/form-data/form-data)\n[![MacOS Build](https://img.shields.io/travis/form-data/form-data/v3.0.1.svg?label=macos:6.x-12.x)](https://travis-ci.org/form-data/form-data)\n[![Windows Build](https://img.shields.io/travis/form-data/form-data/v3.0.1.svg?label=windows:6.x-12.x)](https://travis-ci.org/form-data/form-data)\n\n[![Coverage Status](https://img.shields.io/coveralls/form-data/form-data/v3.0.1.svg?label=code+coverage)](https://coveralls.io/github/form-data/form-data?branch=master)\n[![Dependency Status](https://img.shields.io/david/form-data/form-data.svg)](https://david-dm.org/form-data/form-data)\n\n## Install\n\n```\nnpm install --save form-data\n```\n\n## Usage\n\nIn this example we are constructing a form with 3 fields that contain a string,\na buffer and a file stream.\n\n``` javascript\nvar FormData = require('form-data');\nvar fs = require('fs');\n\nvar form = new FormData();\nform.append('my_field', 'my value');\nform.append('my_buffer', new Buffer(10));\nform.append('my_file', fs.createReadStream('/foo/bar.jpg'));\n```\n\nAlso you can use http-response stream:\n\n``` javascript\nvar FormData = require('form-data');\nvar http = require('http');\n\nvar form = new FormData();\n\nhttp.request('http://nodejs.org/images/logo.png', function(response) {\n  form.append('my_field', 'my value');\n  form.append('my_buffer', new Buffer(10));\n  form.append('my_logo', response);\n});\n```\n\nOr @mikeal's [request](https://github.com/request/request) stream:\n\n``` javascript\nvar FormData = require('form-data');\nvar request = require('request');\n\nvar form = new FormData();\n\nform.append('my_field', 'my value');\nform.append('my_buffer', new Buffer(10));\nform.append('my_logo', request('http://nodejs.org/images/logo.png'));\n```\n\nIn order to submit this form to a web application, call ```submit(url, [callback])``` method:\n\n``` javascript\nform.submit('http://example.org/', function(err, res) {\n  // res – response object (http.IncomingMessage)  //\n  res.resume();\n});\n\n```\n\nFor more advanced request manipulations ```submit()``` method returns ```http.ClientRequest``` object, or you can choose from one of the alternative submission methods.\n\n### Custom options\n\nYou can provide custom options, such as `maxDataSize`:\n\n``` javascript\nvar FormData = require('form-data');\n\nvar form = new FormData({ maxDataSize: 20971520 });\nform.append('my_field', 'my value');\nform.append('my_buffer', /* something big */);\n```\n\nList of available options could be found in [combined-stream](https://github.com/felixge/node-combined-stream/blob/master/lib/combined_stream.js#L7-L15)\n\n### Alternative submission methods\n\nYou can use node's http client interface:\n\n``` javascript\nvar http = require('http');\n\nvar request = http.request({\n  method: 'post',\n  host: 'example.org',\n  path: '/upload',\n  headers: form.getHeaders()\n});\n\nform.pipe(request);\n\nrequest.on('response', function(res) {\n  console.log(res.statusCode);\n});\n```\n\nOr if you would prefer the `'Content-Length'` header to be set for you:\n\n``` javascript\nform.submit('example.org/upload', function(err, res) {\n  console.log(res.statusCode);\n});\n```\n\nTo use custom headers and pre-known length in parts:\n\n``` javascript\nvar CRLF = '\\r\\n';\nvar form = new FormData();\n\nvar options = {\n  header: CRLF + '--' + form.getBoundary() + CRLF + 'X-Custom-Header: 123' + CRLF + CRLF,\n  knownLength: 1\n};\n\nform.append('my_buffer', buffer, options);\n\nform.submit('http://example.com/', function(err, res) {\n  if (err) throw err;\n  console.log('Done');\n});\n```\n\nForm-Data can recognize and fetch all the required information from common types of streams (```fs.readStream```, ```http.response``` and ```mikeal's request```), for some other types of streams you'd need to provide \"file\"-related information manually:\n\n``` javascript\nsomeModule.stream(function(err, stdout, stderr) {\n  if (err) throw err;\n\n  var form = new FormData();\n\n  form.append('file', stdout, {\n    filename: 'unicycle.jpg', // ... or:\n    filepath: 'photos/toys/unicycle.jpg',\n    contentType: 'image/jpeg',\n    knownLength: 19806\n  });\n\n  form.submit('http://example.com/', function(err, res) {\n    if (err) throw err;\n    console.log('Done');\n  });\n});\n```\n\nThe `filepath` property overrides `filename` and may contain a relative path. This is typically used when uploading [multiple files from a directory](https://wicg.github.io/entries-api/#dom-htmlinputelement-webkitdirectory).\n\nFor edge cases, like POST request to URL with query string or to pass HTTP auth credentials, object can be passed to `form.submit()` as first parameter:\n\n``` javascript\nform.submit({\n  host: 'example.com',\n  path: '/probably.php?extra=params',\n  auth: 'username:password'\n}, function(err, res) {\n  console.log(res.statusCode);\n});\n```\n\nIn case you need to also send custom HTTP headers with the POST request, you can use the `headers` key in first parameter of `form.submit()`:\n\n``` javascript\nform.submit({\n  host: 'example.com',\n  path: '/surelynot.php',\n  headers: {'x-test-header': 'test-header-value'}\n}, function(err, res) {\n  console.log(res.statusCode);\n});\n```\n\n### Methods\n\n- [_Void_ append( **String** _field_, **Mixed** _value_ [, **Mixed** _options_] )](https://github.com/form-data/form-data#void-append-string-field-mixed-value--mixed-options-).\n- [_Headers_ getHeaders( [**Headers** _userHeaders_] )](https://github.com/form-data/form-data#array-getheaders-array-userheaders-)\n- [_String_ getBoundary()](https://github.com/form-data/form-data#string-getboundary)\n- [_Void_ setBoundary()](https://github.com/form-data/form-data#void-setboundary)\n- [_Buffer_ getBuffer()](https://github.com/form-data/form-data#buffer-getbuffer)\n- [_Integer_ getLengthSync()](https://github.com/form-data/form-data#integer-getlengthsync)\n- [_Integer_ getLength( **function** _callback_ )](https://github.com/form-data/form-data#integer-getlength-function-callback-)\n- [_Boolean_ hasKnownLength()](https://github.com/form-data/form-data#boolean-hasknownlength)\n- [_Request_ submit( _params_, **function** _callback_ )](https://github.com/form-data/form-data#request-submit-params-function-callback-)\n- [_String_ toString()](https://github.com/form-data/form-data#string-tostring)\n\n#### _Void_ append( **String** _field_, **Mixed** _value_ [, **Mixed** _options_] )\nAppend data to the form. You can submit about any format (string, integer, boolean, buffer, etc.). However, Arrays are not supported and need to be turned into strings by the user.\n```javascript\nvar form = new FormData();\nform.append( 'my_string', 'my value' );\nform.append( 'my_integer', 1 );\nform.append( 'my_boolean', true );\nform.append( 'my_buffer', new Buffer(10) );\nform.append( 'my_array_as_json', JSON.stringify( ['bird','cute'] ) )\n```\n\nYou may provide a string for options, or an object.\n```javascript\n// Set filename by providing a string for options\nform.append( 'my_file', fs.createReadStream('/foo/bar.jpg'), 'bar.jpg' );\n\n// provide an object.\nform.append( 'my_file', fs.createReadStream('/foo/bar.jpg'), {filename: 'bar.jpg', contentType: 'image/jpeg', knownLength: 19806} );\n```\n\n#### _Headers_ getHeaders( [**Headers** _userHeaders_] )\nThis method adds the correct `content-type` header to the provided array of `userHeaders`.  \n\n#### _String_ getBoundary()\nReturn the boundary of the formData. By default, the boundary consists of 26 `-` followed by 24 numbers\nfor example:\n```javascript\n--------------------------515890814546601021194782\n```\n\n#### _Void_ setBoundary(String _boundary_)\nSet the boundary string, overriding the default behavior described above.\n\n_Note: The boundary must be unique and may not appear in the data._\n\n#### _Buffer_ getBuffer()\nReturn the full formdata request package, as a Buffer. You can insert this Buffer in e.g. Axios to send multipart data.\n```javascript\nvar form = new FormData();\nform.append( 'my_buffer', Buffer.from([0x4a,0x42,0x20,0x52,0x6f,0x63,0x6b,0x73]) );\nform.append( 'my_file', fs.readFileSync('/foo/bar.jpg') );\n\naxios.post( 'https://example.com/path/to/api',\n            form.getBuffer(),\n            form.getHeaders()\n          )\n```\n**Note:** Because the output is of type Buffer, you can only append types that are accepted by Buffer: *string, Buffer, ArrayBuffer, Array, or Array-like Object*. A ReadStream for example will result in an error.\n\n#### _Integer_ getLengthSync()\nSame as `getLength` but synchronous.\n\n_Note: getLengthSync __doesn't__ calculate streams length._\n\n#### _Integer_ getLength( **function** _callback_ )\nReturns the `Content-Length` async. The callback is used to handle errors and continue once the length has been calculated\n```javascript\nthis.getLength(function(err, length) {\n  if (err) {\n    this._error(err);\n    return;\n  }\n\n  // add content length\n  request.setHeader('Content-Length', length);\n\n  ...\n}.bind(this));\n```\n\n#### _Boolean_ hasKnownLength()\nChecks if the length of added values is known.\n\n#### _Request_ submit( _params_, **function** _callback_ )\nSubmit the form to a web application.\n```javascript\nvar form = new FormData();\nform.append( 'my_string', 'Hello World' );\n\nform.submit( 'http://example.com/', function(err, res) {\n  // res – response object (http.IncomingMessage)  //\n  res.resume();\n} );\n```\n\n#### _String_ toString()\nReturns the form data as a string. Don't use this if you are sending files or buffers, use `getBuffer()` instead.\n\n### Integration with other libraries\n\n#### Request\n\nForm submission using  [request](https://github.com/request/request):\n\n```javascript\nvar formData = {\n  my_field: 'my_value',\n  my_file: fs.createReadStream(__dirname + '/unicycle.jpg'),\n};\n\nrequest.post({url:'http://service.com/upload', formData: formData}, function(err, httpResponse, body) {\n  if (err) {\n    return console.error('upload failed:', err);\n  }\n  console.log('Upload successful!  Server responded with:', body);\n});\n```\n\nFor more details see [request readme](https://github.com/request/request#multipartform-data-multipart-form-uploads).\n\n#### node-fetch\n\nYou can also submit a form using [node-fetch](https://github.com/bitinn/node-fetch):\n\n```javascript\nvar form = new FormData();\n\nform.append('a', 1);\n\nfetch('http://example.com', { method: 'POST', body: form })\n    .then(function(res) {\n        return res.json();\n    }).then(function(json) {\n        console.log(json);\n    });\n```\n\n#### axios\n\nIn Node.js you can post a file using [axios](https://github.com/axios/axios):\n```javascript\nconst form = new FormData();\nconst stream = fs.createReadStream(PATH_TO_FILE);\n\nform.append('image', stream);\n\n// In Node.js environment you need to set boundary in the header field 'Content-Type' by calling method `getHeaders`\nconst formHeaders = form.getHeaders();\n\naxios.post('http://example.com', form, {\n  headers: {\n    ...formHeaders,\n  },\n})\n.then(response => response)\n.catch(error => error)\n```\n\n## Notes\n\n- ```getLengthSync()``` method DOESN'T calculate length for streams, use ```knownLength``` options as workaround.\n- Starting version `2.x` FormData has dropped support for `node@0.10.x`.\n- Starting version `3.x` FormData has dropped support for `node@4.x`.\n\n## License\n\nForm-Data is released under the [MIT](License) license.\n/lib/populate.jsı// populates missing values\nmodule.exports = function(dst, src) {\n\n  Object.keys(src).forEach(function(prop)\n  {\n    dst[prop] = dst[prop] || src[prop];\n  });\n\n  return dst;\n};\n/package.json\t\u0001{\n  \"author\": \"Felix Geisendörfer <felix@debuggable.com> (http://debuggable.com/)\",\n  \"name\": \"form-data\",\n  \"description\": \"A library to create readable \\\"multipart/form-data\\\" streams. Can be used to submit forms and file uploads to other web applications.\",\n  \"version\": \"3.0.1\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git://github.com/form-data/form-data.git\"\n  },\n  \"main\": \"./lib/form_data\",\n  \"browser\": \"./lib/browser\",\n  \"typings\": \"./index.d.ts\",\n  \"scripts\": {\n    \"pretest\": \"rimraf coverage test/tmp\",\n    \"test\": \"istanbul cover test/run.js\",\n    \"posttest\": \"istanbul report lcov text\",\n    \"lint\": \"eslint lib/*.js test/*.js test/integration/*.js\",\n    \"report\": \"istanbul report lcov text\",\n    \"ci-lint\": \"is-node-modern 8 && npm run lint || is-node-not-modern 8\",\n    \"ci-test\": \"npm run test && npm run browser && npm run report\",\n    \"predebug\": \"rimraf coverage test/tmp\",\n    \"debug\": \"verbose=1 ./test/run.js\",\n    \"browser\": \"browserify -t browserify-istanbul test/run-browser.js | obake --coverage\",\n    \"check\": \"istanbul check-coverage coverage/coverage*.json\",\n    \"files\": \"pkgfiles --sort=name\",\n    \"get-version\": \"node -e \\\"console.log(require('./package.json').version)\\\"\",\n    \"update-readme\": \"sed -i.bak 's/\\\\/master\\\\.svg/\\\\/v'$(npm --silent run get-version)'.svg/g' README.md\",\n    \"restore-readme\": \"mv README.md.bak README.md\",\n    \"prepublish\": \"in-publish && npm run update-readme || not-in-publish\",\n    \"postpublish\": \"npm run restore-readme\"\n  },\n  \"pre-commit\": [\n    \"lint\",\n    \"ci-test\",\n    \"check\"\n  ],\n  \"engines\": {\n    \"node\": \">= 6\"\n  },\n  \"dependencies\": {\n    \"asynckit\": \"^0.4.0\",\n    \"combined-stream\": \"^1.0.8\",\n    \"mime-types\": \"^2.1.12\"\n  },\n  \"devDependencies\": {\n    \"@types/node\": \"^12.0.10\",\n    \"browserify\": \"^13.1.1\",\n    \"browserify-istanbul\": \"^2.0.0\",\n    \"coveralls\": \"^3.0.4\",\n    \"cross-spawn\": \"^6.0.5\",\n    \"eslint\": \"^6.0.1\",\n    \"fake\": \"^0.2.2\",\n    \"far\": \"^0.0.7\",\n    \"formidable\": \"^1.0.17\",\n    \"in-publish\": \"^2.0.0\",\n    \"is-node-modern\": \"^1.0.0\",\n    \"istanbul\": \"^0.4.5\",\n    \"obake\": \"^0.1.2\",\n    \"puppeteer\": \"^1.19.0\",\n    \"pkgfiles\": \"^2.3.0\",\n    \"pre-commit\": \"^1.1.3\",\n    \"request\": \"^2.88.0\",\n    \"rimraf\": \"^2.7.1\",\n    \"tape\": \"^4.6.2\",\n    \"typescript\": \"^3.5.2\"\n  },\n  \"license\": \"MIT\"\n}\n/lib/form_data.js5\tvar CombinedStream = require('combined-stream');\nvar util = require('util');\nvar path = require('path');\nvar http = require('http');\nvar https = require('https');\nvar parseUrl = require('url').parse;\nvar fs = require('fs');\nvar mime = require('mime-types');\nvar asynckit = require('asynckit');\nvar populate = require('./populate.js');\n\n// Public API\nmodule.exports = FormData;\n\n// make it a Stream\nutil.inherits(FormData, CombinedStream);\n\n/**\n * Create readable \"multipart/form-data\" streams.\n * Can be used to submit forms\n * and file uploads to other web applications.\n *\n * @constructor\n * @param {Object} options - Properties to be added/overriden for FormData and CombinedStream\n */\nfunction FormData(options) {\n  if (!(this instanceof FormData)) {\n    return new FormData(options);\n  }\n\n  this._overheadLength = 0;\n  this._valueLength = 0;\n  this._valuesToMeasure = [];\n\n  CombinedStream.call(this);\n\n  options = options || {};\n  for (var option in options) {\n    this[option] = options[option];\n  }\n}\n\nFormData.LINE_BREAK = '\\r\\n';\nFormData.DEFAULT_CONTENT_TYPE = 'application/octet-stream';\n\nFormData.prototype.append = function(field, value, options) {\n\n  options = options || {};\n\n  // allow filename as single option\n  if (typeof options == 'string') {\n    options = {filename: options};\n  }\n\n  var append = CombinedStream.prototype.append.bind(this);\n\n  // all that streamy business can't handle numbers\n  if (typeof value == 'number') {\n    value = '' + value;\n  }\n\n  // https://github.com/felixge/node-form-data/issues/38\n  if (util.isArray(value)) {\n    // Please convert your array into string\n    // the way web server expects it\n    this._error(new Error('Arrays are not supported.'));\n    return;\n  }\n\n  var header = this._multiPartHeader(field, value, options);\n  var footer = this._multiPartFooter();\n\n  append(header);\n  append(value);\n  append(footer);\n\n  // pass along options.knownLength\n  this._trackLength(header, value, options);\n};\n\nFormData.prototype._trackLength = function(header, value, options) {\n  var valueLength = 0;\n\n  // used w/ getLengthSync(), when length is known.\n  // e.g. for streaming directly from a remote server,\n  // w/ a known file a size, and not wanting to wait for\n  // incoming file to finish to get its size.\n  if (options.knownLength != null) {\n    valueLength += +options.knownLength;\n  } else if (Buffer.isBuffer(value)) {\n    valueLength = value.length;\n  } else if (typeof value === 'string') {\n    valueLength = Buffer.byteLength(value);\n  }\n\n  this._valueLength += valueLength;\n\n  // @check why add CRLF? does this account for custom/multiple CRLFs?\n  this._overheadLength +=\n    Buffer.byteLength(header) +\n    FormData.LINE_BREAK.length;\n\n  // empty or either doesn't have path or not an http response\n  if (!value || ( !value.path && !(value.readable && value.hasOwnProperty('httpVersion')) )) {\n    return;\n  }\n\n  // no need to bother with the length\n  if (!options.knownLength) {\n    this._valuesToMeasure.push(value);\n  }\n};\n\nFormData.prototype._lengthRetriever = function(value, callback) {\n\n  if (value.hasOwnProperty('fd')) {\n\n    // take read range into a account\n    // `end` = Infinity –> read file till the end\n    //\n    // TODO: Looks like there is bug in Node fs.createReadStream\n    // it doesn't respect `end` options without `start` options\n    // Fix it when node fixes it.\n    // https://github.com/joyent/node/issues/7819\n    if (value.end != undefined && value.end != Infinity && value.start != undefined) {\n\n      // when end specified\n      // no need to calculate range\n      // inclusive, starts with 0\n      callback(null, value.end + 1 - (value.start ? value.start : 0));\n\n    // not that fast snoopy\n    } else {\n      // still need to fetch file size from fs\n      fs.stat(value.path, function(err, stat) {\n\n        var fileSize;\n\n        if (err) {\n          callback(err);\n          return;\n        }\n\n        // update final size based on the range options\n        fileSize = stat.size - (value.start ? value.start : 0);\n        callback(null, fileSize);\n      });\n    }\n\n  // or http response\n  } else if (value.hasOwnProperty('httpVersion')) {\n    callback(null, +value.headers['content-length']);\n\n  // or request stream http://github.com/mikeal/request\n  } else if (value.hasOwnProperty('httpModule')) {\n    // wait till response come back\n    value.on('response', function(response) {\n      value.pause();\n      callback(null, +response.headers['content-length']);\n    });\n    value.resume();\n\n  // something else\n  } else {\n    callback('Unknown stream');\n  }\n};\n\nFormData.prototype._multiPartHeader = function(field, value, options) {\n  // custom header specified (as string)?\n  // it becomes responsible for boundary\n  // (e.g. to handle extra CRLFs on .NET servers)\n  if (typeof options.header == 'string') {\n    return options.header;\n  }\n\n  var contentDisposition = this._getContentDisposition(value, options);\n  var contentType = this._getContentType(value, options);\n\n  var contents = '';\n  var headers  = {\n    // add custom disposition as third element or keep it two elements if not\n    'Content-Disposition': ['form-data', 'name=\"' + field + '\"'].concat(contentDisposition || []),\n    // if no content type. allow it to be empty array\n    'Content-Type': [].concat(contentType || [])\n  };\n\n  // allow custom headers.\n  if (typeof options.header == 'object') {\n    populate(headers, options.header);\n  }\n\n  var header;\n  for (var prop in headers) {\n    if (!headers.hasOwnProperty(prop)) continue;\n    header = headers[prop];\n\n    // skip nullish headers.\n    if (header == null) {\n      continue;\n    }\n\n    // convert all headers to arrays.\n    if (!Array.isArray(header)) {\n      header = [header];\n    }\n\n    // add non-empty headers.\n    if (header.length) {\n      contents += prop + ': ' + header.join('; ') + FormData.LINE_BREAK;\n    }\n  }\n\n  return '--' + this.getBoundary() + FormData.LINE_BREAK + contents + FormData.LINE_BREAK;\n};\n\nFormData.prototype._getContentDisposition = function(value, options) {\n\n  var filename\n    , contentDisposition\n    ;\n\n  if (typeof options.filepath === 'string') {\n    // custom filepath for relative paths\n    filename = path.normalize(options.filepath).replace(/\\\\/g, '/');\n  } else if (options.filename || value.name || value.path) {\n    // custom filename take precedence\n    // formidable and the browser add a name property\n    // fs- and request- streams have path property\n    filename = path.basename(options.filename || value.name || value.path);\n  } else if (value.readable && value.hasOwnProperty('httpVersion')) {\n    // or try http response\n    filename = path.basename(value.client._httpMessage.path || '');\n  }\n\n  if (filename) {\n    contentDisposition = 'filename=\"' + filename + '\"';\n  }\n\n  return contentDisposition;\n};\n\nFormData.prototype._getContentType = function(value, options) {\n\n  // use custom content-type above all\n  var contentType = options.contentType;\n\n  // or try `name` from formidable, browser\n  if (!contentType && value.name) {\n    contentType = mime.lookup(value.name);\n  }\n\n  // or try `path` from fs-, request- streams\n  if (!contentType && value.path) {\n    contentType = mime.lookup(value.path);\n  }\n\n  // or if it's http-reponse\n  if (!contentType && value.readable && value.hasOwnProperty('httpVersion')) {\n    contentType = value.headers['content-type'];\n  }\n\n  // or guess it from the filepath or filename\n  if (!contentType && (options.filepath || options.filename)) {\n    contentType = mime.lookup(options.filepath || options.filename);\n  }\n\n  // fallback to the default content type if `value` is not simple value\n  if (!contentType && typeof value == 'object') {\n    contentType = FormData.DEFAULT_CONTENT_TYPE;\n  }\n\n  return contentType;\n};\n\nFormData.prototype._multiPartFooter = function() {\n  return function(next) {\n    var footer = FormData.LINE_BREAK;\n\n    var lastPart = (this._streams.length === 0);\n    if (lastPart) {\n      footer += this._lastBoundary();\n    }\n\n    next(footer);\n  }.bind(this);\n};\n\nFormData.prototype._lastBoundary = function() {\n  return '--' + this.getBoundary() + '--' + FormData.LINE_BREAK;\n};\n\nFormData.prototype.getHeaders = function(userHeaders) {\n  var header;\n  var formHeaders = {\n    'content-type': 'multipart/form-data; boundary=' + this.getBoundary()\n  };\n\n  for (header in userHeaders) {\n    if (userHeaders.hasOwnProperty(header)) {\n      formHeaders[header.toLowerCase()] = userHeaders[header];\n    }\n  }\n\n  return formHeaders;\n};\n\nFormData.prototype.setBoundary = function(boundary) {\n  this._boundary = boundary;\n};\n\nFormData.prototype.getBoundary = function() {\n  if (!this._boundary) {\n    this._generateBoundary();\n  }\n\n  return this._boundary;\n};\n\nFormData.prototype.getBuffer = function() {\n  var dataBuffer = new Buffer.alloc( 0 );\n  var boundary = this.getBoundary();\n\n  // Create the form content. Add Line breaks to the end of data.\n  for (var i = 0, len = this._streams.length; i < len; i++) {\n    if (typeof this._streams[i] !== 'function') {\n\n      // Add content to the buffer.\n      if(Buffer.isBuffer(this._streams[i])) {\n        dataBuffer = Buffer.concat( [dataBuffer, this._streams[i]]);\n      }else {\n        dataBuffer = Buffer.concat( [dataBuffer, Buffer.from(this._streams[i])]);\n      }\n\n      // Add break after content.\n      if (typeof this._streams[i] !== 'string' || this._streams[i].substring( 2, boundary.length + 2 ) !== boundary) {\n        dataBuffer = Buffer.concat( [dataBuffer, Buffer.from(FormData.LINE_BREAK)] );\n      }\n    }\n  }\n\n  // Add the footer and return the Buffer object.\n  return Buffer.concat( [dataBuffer, Buffer.from(this._lastBoundary())] );\n};\n\nFormData.prototype._generateBoundary = function() {\n  // This generates a 50 character boundary similar to those used by Firefox.\n  // They are optimized for boyer-moore parsing.\n  var boundary = '--------------------------';\n  for (var i = 0; i < 24; i++) {\n    boundary += Math.floor(Math.random() * 10).toString(16);\n  }\n\n  this._boundary = boundary;\n};\n\n// Note: getLengthSync DOESN'T calculate streams length\n// As workaround one can calculate file size manually\n// and add it as knownLength option\nFormData.prototype.getLengthSync = function() {\n  var knownLength = this._overheadLength + this._valueLength;\n\n  // Don't get confused, there are 3 \"internal\" streams for each keyval pair\n  // so it basically checks if there is any value added to the form\n  if (this._streams.length) {\n    knownLength += this._lastBoundary().length;\n  }\n\n  // https://github.com/form-data/form-data/issues/40\n  if (!this.hasKnownLength()) {\n    // Some async length retrievers are present\n    // therefore synchronous length calculation is false.\n    // Please use getLength(callback) to get proper length\n    this._error(new Error('Cannot calculate proper length in synchronous way.'));\n  }\n\n  return knownLength;\n};\n\n// Public API to check if length of added values is known\n// https://github.com/form-data/form-data/issues/196\n// https://github.com/form-data/form-data/issues/262\nFormData.prototype.hasKnownLength = function() {\n  var hasKnownLength = true;\n\n  if (this._valuesToMeasure.length) {\n    hasKnownLength = false;\n  }\n\n  return hasKnownLength;\n};\n\nFormData.prototype.getLength = function(cb) {\n  var knownLength = this._overheadLength + this._valueLength;\n\n  if (this._streams.length) {\n    knownLength += this._lastBoundary().length;\n  }\n\n  if (!this._valuesToMeasure.length) {\n    process.nextTick(cb.bind(this, null, knownLength));\n    return;\n  }\n\n  asynckit.parallel(this._valuesToMeasure, this._lengthRetriever, function(err, values) {\n    if (err) {\n      cb(err);\n      return;\n    }\n\n    values.forEach(function(length) {\n      knownLength += length;\n    });\n\n    cb(null, knownLength);\n  });\n};\n\nFormData.prototype.submit = function(params, cb) {\n  var request\n    , options\n    , defaults = {method: 'post'}\n    ;\n\n  // parse provided url if it's string\n  // or treat it as options object\n  if (typeof params == 'string') {\n\n    params = parseUrl(params);\n    options = populate({\n      port: params.port,\n      path: params.pathname,\n      host: params.hostname,\n      protocol: params.protocol\n    }, defaults);\n\n  // use custom params\n  } else {\n\n    options = populate(params, defaults);\n    // if no port provided use default one\n    if (!options.port) {\n      options.port = options.protocol == 'https:' ? 443 : 80;\n    }\n  }\n\n  // put that good code in getHeaders to some use\n  options.headers = this.getHeaders(params.headers);\n\n  // https if specified, fallback to http in any other case\n  if (options.protocol == 'https:') {\n    request = https.request(options);\n  } else {\n    request = http.request(options);\n  }\n\n  // get content length and fire away\n  this.getLength(function(err, length) {\n    if (err) {\n      this._error(err);\n      return;\n    }\n\n    // add content length\n    request.setHeader('Content-Length', length);\n\n    this.pipe(request);\n    if (cb) {\n      var onResponse;\n\n      var callback = function (error, responce) {\n        request.removeListener('error', callback);\n        request.removeListener('response', onResponse);\n\n        return cb.call(this, error, responce);\n      };\n\n      onResponse = callback.bind(this, null);\n\n      request.on('error', callback);\n      request.on('response', onResponse);\n    }\n  }.bind(this));\n\n  return request;\n};\n\nFormData.prototype._error = function(err) {\n  if (!this.error) {\n    this.error = err;\n    this.pause();\n    this.emit('error', err);\n  }\n};\n\nFormData.prototype.toString = function () {\n  return '[object FormData]';\n};\n/Readme.md.%# Form-Data [![NPM Module](https://img.shields.io/npm/v/form-data.svg)](https://www.npmjs.com/package/form-data) [![Join the chat at https://gitter.im/form-data/form-data](http://form-data.github.io/images/gitterbadge.svg)](https://gitter.im/form-data/form-data)\n\nA library to create readable ```\"multipart/form-data\"``` streams. Can be used to submit forms and file uploads to other web applications.\n\nThe API of this library is inspired by the [XMLHttpRequest-2 FormData Interface][xhr2-fd].\n\n[xhr2-fd]: http://dev.w3.org/2006/webapi/XMLHttpRequest-2/Overview.html#the-formdata-interface\n\n[![Linux Build](https://img.shields.io/travis/form-data/form-data/v3.0.1.svg?label=linux:6.x-12.x)](https://travis-ci.org/form-data/form-data)\n[![MacOS Build](https://img.shields.io/travis/form-data/form-data/v3.0.1.svg?label=macos:6.x-12.x)](https://travis-ci.org/form-data/form-data)\n[![Windows Build](https://img.shields.io/travis/form-data/form-data/v3.0.1.svg?label=windows:6.x-12.x)](https://travis-ci.org/form-data/form-data)\n\n[![Coverage Status](https://img.shields.io/coveralls/form-data/form-data/v3.0.1.svg?label=code+coverage)](https://coveralls.io/github/form-data/form-data?branch=master)\n[![Dependency Status](https://img.shields.io/david/form-data/form-data.svg)](https://david-dm.org/form-data/form-data)\n\n## Install\n\n```\nnpm install --save form-data\n```\n\n## Usage\n\nIn this example we are constructing a form with 3 fields that contain a string,\na buffer and a file stream.\n\n``` javascript\nvar FormData = require('form-data');\nvar fs = require('fs');\n\nvar form = new FormData();\nform.append('my_field', 'my value');\nform.append('my_buffer', new Buffer(10));\nform.append('my_file', fs.createReadStream('/foo/bar.jpg'));\n```\n\nAlso you can use http-response stream:\n\n``` javascript\nvar FormData = require('form-data');\nvar http = require('http');\n\nvar form = new FormData();\n\nhttp.request('http://nodejs.org/images/logo.png', function(response) {\n  form.append('my_field', 'my value');\n  form.append('my_buffer', new Buffer(10));\n  form.append('my_logo', response);\n});\n```\n\nOr @mikeal's [request](https://github.com/request/request) stream:\n\n``` javascript\nvar FormData = require('form-data');\nvar request = require('request');\n\nvar form = new FormData();\n\nform.append('my_field', 'my value');\nform.append('my_buffer', new Buffer(10));\nform.append('my_logo', request('http://nodejs.org/images/logo.png'));\n```\n\nIn order to submit this form to a web application, call ```submit(url, [callback])``` method:\n\n``` javascript\nform.submit('http://example.org/', function(err, res) {\n  // res – response object (http.IncomingMessage)  //\n  res.resume();\n});\n\n```\n\nFor more advanced request manipulations ```submit()``` method returns ```http.ClientRequest``` object, or you can choose from one of the alternative submission methods.\n\n### Custom options\n\nYou can provide custom options, such as `maxDataSize`:\n\n``` javascript\nvar FormData = require('form-data');\n\nvar form = new FormData({ maxDataSize: 20971520 });\nform.append('my_field', 'my value');\nform.append('my_buffer', /* something big */);\n```\n\nList of available options could be found in [combined-stream](https://github.com/felixge/node-combined-stream/blob/master/lib/combined_stream.js#L7-L15)\n\n### Alternative submission methods\n\nYou can use node's http client interface:\n\n``` javascript\nvar http = require('http');\n\nvar request = http.request({\n  method: 'post',\n  host: 'example.org',\n  path: '/upload',\n  headers: form.getHeaders()\n});\n\nform.pipe(request);\n\nrequest.on('response', function(res) {\n  console.log(res.statusCode);\n});\n```\n\nOr if you would prefer the `'Content-Length'` header to be set for you:\n\n``` javascript\nform.submit('example.org/upload', function(err, res) {\n  console.log(res.statusCode);\n});\n```\n\nTo use custom headers and pre-known length in parts:\n\n``` javascript\nvar CRLF = '\\r\\n';\nvar form = new FormData();\n\nvar options = {\n  header: CRLF + '--' + form.getBoundary() + CRLF + 'X-Custom-Header: 123' + CRLF + CRLF,\n  knownLength: 1\n};\n\nform.append('my_buffer', buffer, options);\n\nform.submit('http://example.com/', function(err, res) {\n  if (err) throw err;\n  console.log('Done');\n});\n```\n\nForm-Data can recognize and fetch all the required information from common types of streams (```fs.readStream```, ```http.response``` and ```mikeal's request```), for some other types of streams you'd need to provide \"file\"-related information manually:\n\n``` javascript\nsomeModule.stream(function(err, stdout, stderr) {\n  if (err) throw err;\n\n  var form = new FormData();\n\n  form.append('file', stdout, {\n    filename: 'unicycle.jpg', // ... or:\n    filepath: 'photos/toys/unicycle.jpg',\n    contentType: 'image/jpeg',\n    knownLength: 19806\n  });\n\n  form.submit('http://example.com/', function(err, res) {\n    if (err) throw err;\n    console.log('Done');\n  });\n});\n```\n\nThe `filepath` property overrides `filename` and may contain a relative path. This is typically used when uploading [multiple files from a directory](https://wicg.github.io/entries-api/#dom-htmlinputelement-webkitdirectory).\n\nFor edge cases, like POST request to URL with query string or to pass HTTP auth credentials, object can be passed to `form.submit()` as first parameter:\n\n``` javascript\nform.submit({\n  host: 'example.com',\n  path: '/probably.php?extra=params',\n  auth: 'username:password'\n}, function(err, res) {\n  console.log(res.statusCode);\n});\n```\n\nIn case you need to also send custom HTTP headers with the POST request, you can use the `headers` key in first parameter of `form.submit()`:\n\n``` javascript\nform.submit({\n  host: 'example.com',\n  path: '/surelynot.php',\n  headers: {'x-test-header': 'test-header-value'}\n}, function(err, res) {\n  console.log(res.statusCode);\n});\n```\n\n### Methods\n\n- [_Void_ append( **String** _field_, **Mixed** _value_ [, **Mixed** _options_] )](https://github.com/form-data/form-data#void-append-string-field-mixed-value--mixed-options-).\n- [_Headers_ getHeaders( [**Headers** _userHeaders_] )](https://github.com/form-data/form-data#array-getheaders-array-userheaders-)\n- [_String_ getBoundary()](https://github.com/form-data/form-data#string-getboundary)\n- [_Void_ setBoundary()](https://github.com/form-data/form-data#void-setboundary)\n- [_Buffer_ getBuffer()](https://github.com/form-data/form-data#buffer-getbuffer)\n- [_Integer_ getLengthSync()](https://github.com/form-data/form-data#integer-getlengthsync)\n- [_Integer_ getLength( **function** _callback_ )](https://github.com/form-data/form-data#integer-getlength-function-callback-)\n- [_Boolean_ hasKnownLength()](https://github.com/form-data/form-data#boolean-hasknownlength)\n- [_Request_ submit( _params_, **function** _callback_ )](https://github.com/form-data/form-data#request-submit-params-function-callback-)\n- [_String_ toString()](https://github.com/form-data/form-data#string-tostring)\n\n#### _Void_ append( **String** _field_, **Mixed** _value_ [, **Mixed** _options_] )\nAppend data to the form. You can submit about any format (string, integer, boolean, buffer, etc.). However, Arrays are not supported and need to be turned into strings by the user.\n```javascript\nvar form = new FormData();\nform.append( 'my_string', 'my value' );\nform.append( 'my_integer', 1 );\nform.append( 'my_boolean', true );\nform.append( 'my_buffer', new Buffer(10) );\nform.append( 'my_array_as_json', JSON.stringify( ['bird','cute'] ) )\n```\n\nYou may provide a string for options, or an object.\n```javascript\n// Set filename by providing a string for options\nform.append( 'my_file', fs.createReadStream('/foo/bar.jpg'), 'bar.jpg' );\n\n// provide an object.\nform.append( 'my_file', fs.createReadStream('/foo/bar.jpg'), {filename: 'bar.jpg', contentType: 'image/jpeg', knownLength: 19806} );\n```\n\n#### _Headers_ getHeaders( [**Headers** _userHeaders_] )\nThis method adds the correct `content-type` header to the provided array of `userHeaders`.  \n\n#### _String_ getBoundary()\nReturn the boundary of the formData. By default, the boundary consists of 26 `-` followed by 24 numbers\nfor example:\n```javascript\n--------------------------515890814546601021194782\n```\n\n#### _Void_ setBoundary(String _boundary_)\nSet the boundary string, overriding the default behavior described above.\n\n_Note: The boundary must be unique and may not appear in the data._\n\n#### _Buffer_ getBuffer()\nReturn the full formdata request package, as a Buffer. You can insert this Buffer in e.g. Axios to send multipart data.\n```javascript\nvar form = new FormData();\nform.append( 'my_buffer', Buffer.from([0x4a,0x42,0x20,0x52,0x6f,0x63,0x6b,0x73]) );\nform.append( 'my_file', fs.readFileSync('/foo/bar.jpg') );\n\naxios.post( 'https://example.com/path/to/api',\n            form.getBuffer(),\n            form.getHeaders()\n          )\n```\n**Note:** Because the output is of type Buffer, you can only append types that are accepted by Buffer: *string, Buffer, ArrayBuffer, Array, or Array-like Object*. A ReadStream for example will result in an error.\n\n#### _Integer_ getLengthSync()\nSame as `getLength` but synchronous.\n\n_Note: getLengthSync __doesn't__ calculate streams length._\n\n#### _Integer_ getLength( **function** _callback_ )\nReturns the `Content-Length` async. The callback is used to handle errors and continue once the length has been calculated\n```javascript\nthis.getLength(function(err, length) {\n  if (err) {\n    this._error(err);\n    return;\n  }\n\n  // add content length\n  request.setHeader('Content-Length', length);\n\n  ...\n}.bind(this));\n```\n\n#### _Boolean_ hasKnownLength()\nChecks if the length of added values is known.\n\n#### _Request_ submit( _params_, **function** _callback_ )\nSubmit the form to a web application.\n```javascript\nvar form = new FormData();\nform.append( 'my_string', 'Hello World' );\n\nform.submit( 'http://example.com/', function(err, res) {\n  // res – response object (http.IncomingMessage)  //\n  res.resume();\n} );\n```\n\n#### _String_ toString()\nReturns the form data as a string. Don't use this if you are sending files or buffers, use `getBuffer()` instead.\n\n### Integration with other libraries\n\n#### Request\n\nForm submission using  [request](https://github.com/request/request):\n\n```javascript\nvar formData = {\n  my_field: 'my_value',\n  my_file: fs.createReadStream(__dirname + '/unicycle.jpg'),\n};\n\nrequest.post({url:'http://service.com/upload', formData: formData}, function(err, httpResponse, body) {\n  if (err) {\n    return console.error('upload failed:', err);\n  }\n  console.log('Upload successful!  Server responded with:', body);\n});\n```\n\nFor more details see [request readme](https://github.com/request/request#multipartform-data-multipart-form-uploads).\n\n#### node-fetch\n\nYou can also submit a form using [node-fetch](https://github.com/bitinn/node-fetch):\n\n```javascript\nvar form = new FormData();\n\nform.append('a', 1);\n\nfetch('http://example.com', { method: 'POST', body: form })\n    .then(function(res) {\n        return res.json();\n    }).then(function(json) {\n        console.log(json);\n    });\n```\n\n#### axios\n\nIn Node.js you can post a file using [axios](https://github.com/axios/axios):\n```javascript\nconst form = new FormData();\nconst stream = fs.createReadStream(PATH_TO_FILE);\n\nform.append('image', stream);\n\n// In Node.js environment you need to set boundary in the header field 'Content-Type' by calling method `getHeaders`\nconst formHeaders = form.getHeaders();\n\naxios.post('http://example.com', form, {\n  headers: {\n    ...formHeaders,\n  },\n})\n.then(response => response)\n.catch(error => error)\n```\n\n## Notes\n\n- ```getLengthSync()``` method DOESN'T calculate length for streams, use ```knownLength``` options as workaround.\n- Starting version `2.x` FormData has dropped support for `node@0.10.x`.\n- Starting version `3.x` FormData has dropped support for `node@4.x`.\n\n## License\n\nForm-Data is released under the [MIT](License) license.\n/lib/browser.jse/* eslint-env browser */\nmodule.exports = typeof self == 'object' ? self.FormData : window.FormData;\n/index.d.ts\u0007!// Definitions by: Carlos Ballesteros Velasco <https://github.com/soywiz>\n//                 Leon Yu <https://github.com/leonyu>\n//                 BendingBender <https://github.com/BendingBender>\n//                 Maple Miao <https://github.com/mapleeit>\n\n/// <reference types=\"node\" />\nimport * as stream from 'stream';\nimport * as http from 'http';\n\nexport = FormData;\n\n// Extracted because @types/node doesn't export interfaces.\ninterface ReadableOptions {\n  highWaterMark?: number;\n  encoding?: string;\n  objectMode?: boolean;\n  read?(this: stream.Readable, size: number): void;\n  destroy?(this: stream.Readable, error: Error | null, callback: (error: Error | null) => void): void;\n  autoDestroy?: boolean;\n}\n\ninterface Options extends ReadableOptions {\n  writable?: boolean;\n  readable?: boolean;\n  dataSize?: number;\n  maxDataSize?: number;\n  pauseStreams?: boolean;\n}\n\ndeclare class FormData extends stream.Readable {\n  constructor(options?: Options);\n  append(key: string, value: any, options?: FormData.AppendOptions | string): void;\n  getHeaders(userHeaders?: FormData.Headers): FormData.Headers;\n  submit(\n    params: string | FormData.SubmitOptions,\n    callback?: (error: Error | null, response: http.IncomingMessage) => void\n  ): http.ClientRequest;\n  getBuffer(): Buffer;\n  setBoundary(boundary: string): void;\n  getBoundary(): string;\n  getLength(callback: (err: Error | null, length: number) => void): void;\n  getLengthSync(): number;\n  hasKnownLength(): boolean;\n}\n\ndeclare namespace FormData {\n  interface Headers {\n    [key: string]: any;\n  }\n\n  interface AppendOptions {\n    header?: string | Headers;\n    knownLength?: number;\n    filename?: string;\n    filepath?: string;\n    contentType?: string;\n  }\n\n  interface SubmitOptions extends http.RequestOptions {\n    protocol?: 'https:' | 'http:';\n  }\n}\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/Zm9ybWRhdGEtcG9seWZpbGxANC4wLjEw",
    "content": "/esm.min.js\tJ/*! formdata-polyfill. MIT License. Jimmy Wärting <https://jimmy.warting.se/opensource> */\n\nimport C from 'fetch-blob'\nimport F from 'fetch-blob/file.js'\n\nvar {toStringTag:t,iterator:i,hasInstance:h}=Symbol,\nr=Math.random,\nm='append,set,get,getAll,delete,keys,values,entries,forEach,constructor'.split(','),\nf=(a,b,c)=>(a+='',/^(Blob|File)$/.test(b && b[t])?[(c=c!==void 0?c+'':b[t]=='File'?b.name:'blob',a),b.name!==c||b[t]=='blob'?new F([b],c,b):b]:[a,b+'']),\ne=(c,f)=>(f?c:c.replace(/\\r?\\n|\\r/g,'\\r\\n')).replace(/\\n/g,'%0A').replace(/\\r/g,'%0D').replace(/\"/g,'%22'),\nx=(n, a, e)=>{if(a.length<e){throw new TypeError(`Failed to execute '${n}' on 'FormData': ${e} arguments required, but only ${a.length} present.`)}}\n\nexport const File = F\n\n/** @type {typeof globalThis.FormData} */\nexport const FormData = class FormData {\n#d=[];\nconstructor(...a){if(a.length)throw new TypeError(`Failed to construct 'FormData': parameter 1 is not of type 'HTMLFormElement'.`)}\nget [t]() {return 'FormData'}\n[i](){return this.entries()}\nstatic [h](o) {return o&&typeof o==='object'&&o[t]==='FormData'&&!m.some(m=>typeof o[m]!='function')}\nappend(...a){x('append',arguments,2);this.#d.push(f(...a))}\ndelete(a){x('delete',arguments,1);a+='';this.#d=this.#d.filter(([b])=>b!==a)}\nget(a){x('get',arguments,1);a+='';for(var b=this.#d,l=b.length,c=0;c<l;c++)if(b[c][0]===a)return b[c][1];return null}\ngetAll(a,b){x('getAll',arguments,1);b=[];a+='';this.#d.forEach(c=>c[0]===a&&b.push(c[1]));return b}\nhas(a){x('has',arguments,1);a+='';return this.#d.some(b=>b[0]===a)}\nforEach(a,b){x('forEach',arguments,1);for(var [c,d]of this)a.call(b,d,c,this)}\nset(...a){x('set',arguments,2);var b=[],c=!0;a=f(...a);this.#d.forEach(d=>{d[0]===a[0]?c&&(c=!b.push(a)):b.push(d)});c&&b.push(a);this.#d=b}\n*entries(){yield*this.#d}\n*keys(){for(var[a]of this)yield a}\n*values(){for(var[,a]of this)yield a}}\n\n/** @param {FormData} F */\nexport function formDataToBlob (F,B=C){\nvar b=`${r()}${r()}`.replace(/\\./g, '').slice(-28).padStart(32, '-'),c=[],p=`--${b}\\r\\nContent-Disposition: form-data; name=\"`\nF.forEach((v,n)=>typeof v=='string'\n?c.push(p+e(n)+`\"\\r\\n\\r\\n${v.replace(/\\r(?!\\n)|(?<!\\r)\\n/g, '\\r\\n')}\\r\\n`)\n:c.push(p+e(n)+`\"; filename=\"${e(v.name, 1)}\"\\r\\nContent-Type: ${v.type||\"application/octet-stream\"}\\r\\n\\r\\n`, v, '\\r\\n'))\nc.push(`--${b}--`)\nreturn new B(c,{type:\"multipart/form-data; boundary=\"+b})}\n/LICENSE\u0004;MIT License\n\nCopyright (c) 2016 Jimmy Karl Roland Wärting\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n/README.md\u0014### A `FormData` polyfill for the browser ...and a module for NodeJS (`New!`)\n\n```bash\nnpm install formdata-polyfill\n```\n\nThe browser polyfill will likely have done its part already, and i hope you stop supporting old browsers c\",)<br>\nBut NodeJS still laks a proper FormData<br>The good old form-data package is a very old and isn't spec compatible and dose some abnormal stuff to construct and read FormData instances that other http libraries are not happy about when it comes to follow the spec.\n\n### The NodeJS / ESM version\n- The modular (~2.3 KiB minified uncompressed) version of this package is independent of any browser stuff and don't patch anything\n- It's as pure/spec compatible as it possible gets the test are run by WPT.\n- It's compatible with [node-fetch](https://github.com/node-fetch/node-fetch).\n- It have higher platform dependencies as it uses classes, symbols, ESM & private fields\n- Only dependency it has is [fetch-blob](https://github.com/node-fetch/fetch-blob)\n\n```js\n// Node example\nimport fetch from 'node-fetch'\nimport File from 'fetch-blob/file.js'\nimport { fileFromSync } from 'fetch-blob/from.js'\nimport { FormData } from 'formdata-polyfill/esm.min.js'\n\nconst file = fileFromSync('./README.md')\nconst fd = new FormData()\n\nfd.append('file-upload', new File(['abc'], 'hello-world.txt'))\nfd.append('file-upload', file)\n\n// it's also possible to append file/blob look-a-like items\n// if you have streams coming from other destinations\nfd.append('file-upload', {\n  size: 123,\n  type: '',\n  name: 'cat-video.mp4',\n  stream() { return stream },\n  [Symbol.toStringTag]: 'File'\n})\n\nfetch('https://httpbin.org/post', { method: 'POST', body: fd })\n```\n\n----\n\nIt also comes with way to convert FormData into Blobs - it's not something that every developer should have to deal with.\nIt's mainly for [node-fetch](https://github.com/node-fetch/node-fetch) and other http library to ease the process of serializing a FormData into a blob and just wish to deal with Blobs instead (Both Deno and Undici adapted a version of this [formDataToBlob](https://github.com/jimmywarting/FormData/blob/5ddea9e0de2fc5e246ab1b2f9d404dee0c319c02/formdata-to-blob.js) to the core and passes all WPT tests run by the browser itself)\n```js\nimport { Readable } from 'node:stream'\nimport { FormData, formDataToBlob } from 'formdata-polyfill/esm.min.js'\n\nconst blob = formDataToBlob(new FormData())\nfetch('https://httpbin.org/post', { method: 'POST', body: blob })\n\n// node built in http and other similar http library have to do:\nconst stream = Readable.from(blob.stream())\nconst req = http.request('http://httpbin.org/post', {\n  method: 'post',\n  headers: {\n    'Content-Length': blob.size,\n    'Content-Type': blob.type\n  }\n})\nstream.pipe(req)\n```\n\nPS: blob & file that are appended to the FormData will not be read until any of the serialized blob read-methods gets called\n...so uploading very large files is no biggie\n\n### Browser polyfill\n\nusage:\n\n```js\nimport 'formdata-polyfill' // that's it\n```\n\nThe browser polyfill conditionally replaces the native implementation rather than fixing the missing functions,\nsince otherwise there is no way to get or delete existing values in the FormData object.\nTherefore this also patches `XMLHttpRequest.prototype.send` and `fetch` to send the `FormData` as a blob,\nand `navigator.sendBeacon` to send native `FormData`.\n\nI was unable to patch the Response/Request constructor\nso if you are constructing them with FormData then you need to call `fd._blob()` manually.\n\n```js\nnew Request(url, {\n  method: 'post',\n  body: fd._blob ? fd._blob() : fd\n})\n```\n\nDependencies\n---\n\nIf you need to support IE <= 9 then I recommend you to include eligrey's [blob.js]\n(which i hope you don't - since IE is now dead)\n\n<details>\n    <summary>Updating from 2.x to 3.x</summary>\n\nPreviously you had to import the polyfill and use that,\nsince it didn't replace the global (existing) FormData implementation.\nBut now it transparently calls `_blob()` for you when you are sending something with fetch or XHR,\nby way of monkey-patching the `XMLHttpRequest.prototype.send` and `fetch` functions.\n\nSo you maybe had something like this:\n\n```javascript\nvar FormData = require('formdata-polyfill')\nvar fd = new FormData(form)\nxhr.send(fd._blob())\n```\n\nThere is no longer anything exported from the module\n(though you of course still need to import it to install the polyfill),\nso you can now use the FormData object as normal:\n\n```javascript\nrequire('formdata-polyfill')\nvar fd = new FormData(form)\nxhr.send(fd)\n```\n\n</details>\n\n\n\nNative Browser compatibility (as of 2021-05-08)\n---\nBased on this you can decide for yourself if you need this polyfill.\n\n[![screenshot](https://user-images.githubusercontent.com/1148376/117550329-0993aa80-b040-11eb-976c-14e31f1a3ba4.png)](https://developer.mozilla.org/en-US/docs/Web/API/FormData#Browser_compatibility)\n\n\n\nThis normalizes support for the FormData API:\n\n - `append` with filename\n - `delete()`, `get()`, `getAll()`, `has()`, `set()`\n - `entries()`, `keys()`, `values()`, and support for `for...of`\n - Available in web workers (just include the polyfill)\n\n  [npm-image]: https://img.shields.io/npm/v/formdata-polyfill.svg\n  [npm-url]: https://www.npmjs.com/package/formdata-polyfill\n  [blob.js]: https://github.com/eligrey/Blob.js\n/esm.min.d.tsđexport declare const FormData: {\n  new (): FormData;\n  prototype: FormData;\n};\nexport declare function formDataToBlob(formData: FormData): Blob;\n/FormData.js.b/* formdata-polyfill. MIT License. Jimmy Wärting <https://jimmy.warting.se/opensource> */\n\n/* global FormData self Blob File */\n/* eslint-disable no-inner-declarations */\n\nif (typeof Blob !== 'undefined' && (typeof FormData === 'undefined' || !FormData.prototype.keys)) {\n  const global = typeof globalThis === 'object'\n    ? globalThis\n    : typeof window === 'object'\n      ? window\n      : typeof self === 'object' ? self : this\n\n  // keep a reference to native implementation\n  const _FormData = global.FormData\n\n  // To be monkey patched\n  const _send = global.XMLHttpRequest && global.XMLHttpRequest.prototype.send\n  const _fetch = global.Request && global.fetch\n  const _sendBeacon = global.navigator && global.navigator.sendBeacon\n  // Might be a worker thread...\n  const _match = global.Element && global.Element.prototype\n\n  // Unable to patch Request/Response constructor correctly #109\n  // only way is to use ES6 class extend\n  // https://github.com/babel/babel/issues/1966\n\n  const stringTag = global.Symbol && Symbol.toStringTag\n\n  // Add missing stringTags to blob and files\n  if (stringTag) {\n    if (!Blob.prototype[stringTag]) {\n      Blob.prototype[stringTag] = 'Blob'\n    }\n\n    if ('File' in global && !File.prototype[stringTag]) {\n      File.prototype[stringTag] = 'File'\n    }\n  }\n\n  // Fix so you can construct your own File\n  try {\n    new File([], '') // eslint-disable-line\n  } catch (a) {\n    global.File = function File (b, d, c) {\n      const blob = new Blob(b, c || {})\n      const t = c && void 0 !== c.lastModified ? new Date(c.lastModified) : new Date()\n\n      Object.defineProperties(blob, {\n        name: {\n          value: d\n        },\n        lastModified: {\n          value: +t\n        },\n        toString: {\n          value () {\n            return '[object File]'\n          }\n        }\n      })\n\n      if (stringTag) {\n        Object.defineProperty(blob, stringTag, {\n          value: 'File'\n        })\n      }\n\n      return blob\n    }\n  }\n\n  function ensureArgs (args, expected) {\n    if (args.length < expected) {\n      throw new TypeError(`${expected} argument required, but only ${args.length} present.`)\n    }\n  }\n\n  /**\n   * @param {string} name\n   * @param {string | undefined} filename\n   * @returns {[string, File|string]}\n   */\n  function normalizeArgs (name, value, filename) {\n    if (value instanceof Blob) {\n      filename = filename !== undefined\n      ? String(filename + '')\n      : typeof value.name === 'string'\n      ? value.name\n      : 'blob'\n\n      if (value.name !== filename || Object.prototype.toString.call(value) === '[object Blob]') {\n        value = new File([value], filename)\n      }\n      return [String(name), value]\n    }\n    return [String(name), String(value)]\n  }\n\n  // normalize line feeds for textarea\n  // https://html.spec.whatwg.org/multipage/form-elements.html#textarea-line-break-normalisation-transformation\n  function normalizeLinefeeds (value) {\n    return value.replace(/\\r?\\n|\\r/g, '\\r\\n')\n  }\n\n  /**\n   * @template T\n   * @param {ArrayLike<T>} arr\n   * @param {{ (elm: T): void; }} cb\n   */\n  function each (arr, cb) {\n    for (let i = 0; i < arr.length; i++) {\n      cb(arr[i])\n    }\n  }\n\n  const escape = str => str.replace(/\\n/g, '%0A').replace(/\\r/g, '%0D').replace(/\"/g, '%22')\n\n  /**\n   * @implements {Iterable}\n   */\n  class FormDataPolyfill {\n    /**\n     * FormData class\n     *\n     * @param {HTMLFormElement=} form\n     */\n    constructor (form) {\n      /** @type {[string, string|File][]} */\n      this._data = []\n\n      const self = this\n      form && each(form.elements, (/** @type {HTMLInputElement} */ elm) => {\n        if (\n          !elm.name ||\n          elm.disabled ||\n          elm.type === 'submit' ||\n          elm.type === 'button' ||\n          elm.matches('form fieldset[disabled] *')\n        ) return\n\n        if (elm.type === 'file') {\n          const files = elm.files && elm.files.length\n            ? elm.files\n            : [new File([], '', { type: 'application/octet-stream' })] // #78\n\n          each(files, file => {\n            self.append(elm.name, file)\n          })\n        } else if (elm.type === 'select-multiple' || elm.type === 'select-one') {\n          each(elm.options, opt => {\n            !opt.disabled && opt.selected && self.append(elm.name, opt.value)\n          })\n        } else if (elm.type === 'checkbox' || elm.type === 'radio') {\n          if (elm.checked) self.append(elm.name, elm.value)\n        } else {\n          const value = elm.type === 'textarea' ? normalizeLinefeeds(elm.value) : elm.value\n          self.append(elm.name, value)\n        }\n      })\n    }\n\n    /**\n     * Append a field\n     *\n     * @param   {string}           name      field name\n     * @param   {string|Blob|File} value     string / blob / file\n     * @param   {string=}          filename  filename to use with blob\n     * @return  {undefined}\n     */\n    append (name, value, filename) {\n      ensureArgs(arguments, 2)\n      this._data.push(normalizeArgs(name, value, filename))\n    }\n\n    /**\n     * Delete all fields values given name\n     *\n     * @param   {string}  name  Field name\n     * @return  {undefined}\n     */\n    delete (name) {\n      ensureArgs(arguments, 1)\n      const result = []\n      name = String(name)\n\n      each(this._data, entry => {\n        entry[0] !== name && result.push(entry)\n      })\n\n      this._data = result\n    }\n\n    /**\n     * Iterate over all fields as [name, value]\n     *\n     * @return {Iterator}\n     */\n    * entries () {\n      for (var i = 0; i < this._data.length; i++) {\n        yield this._data[i]\n      }\n    }\n\n    /**\n     * Iterate over all fields\n     *\n     * @param   {Function}  callback  Executed for each item with parameters (value, name, thisArg)\n     * @param   {Object=}   thisArg   `this` context for callback function\n     */\n    forEach (callback, thisArg) {\n      ensureArgs(arguments, 1)\n      for (const [name, value] of this) {\n        callback.call(thisArg, value, name, this)\n      }\n    }\n\n    /**\n     * Return first field value given name\n     * or null if non existent\n     *\n     * @param   {string}  name      Field name\n     * @return  {string|File|null}  value Fields value\n     */\n    get (name) {\n      ensureArgs(arguments, 1)\n      const entries = this._data\n      name = String(name)\n      for (let i = 0; i < entries.length; i++) {\n        if (entries[i][0] === name) {\n          return entries[i][1]\n        }\n      }\n      return null\n    }\n\n    /**\n     * Return all fields values given name\n     *\n     * @param   {string}  name  Fields name\n     * @return  {Array}         [{String|File}]\n     */\n    getAll (name) {\n      ensureArgs(arguments, 1)\n      const result = []\n      name = String(name)\n      each(this._data, data => {\n        data[0] === name && result.push(data[1])\n      })\n\n      return result\n    }\n\n    /**\n     * Check for field name existence\n     *\n     * @param   {string}   name  Field name\n     * @return  {boolean}\n     */\n    has (name) {\n      ensureArgs(arguments, 1)\n      name = String(name)\n      for (let i = 0; i < this._data.length; i++) {\n        if (this._data[i][0] === name) {\n          return true\n        }\n      }\n      return false\n    }\n\n    /**\n     * Iterate over all fields name\n     *\n     * @return {Iterator}\n     */\n    * keys () {\n      for (const [name] of this) {\n        yield name\n      }\n    }\n\n    /**\n     * Overwrite all values given name\n     *\n     * @param   {string}    name      Filed name\n     * @param   {string}    value     Field value\n     * @param   {string=}   filename  Filename (optional)\n     */\n    set (name, value, filename) {\n      ensureArgs(arguments, 2)\n      name = String(name)\n      /** @type {[string, string|File][]} */\n      const result = []\n      const args = normalizeArgs(name, value, filename)\n      let replace = true\n\n      // - replace the first occurrence with same name\n      // - discards the remaining with same name\n      // - while keeping the same order items where added\n      each(this._data, data => {\n        data[0] === name\n          ? replace && (replace = !result.push(args))\n          : result.push(data)\n      })\n\n      replace && result.push(args)\n\n      this._data = result\n    }\n\n    /**\n     * Iterate over all fields\n     *\n     * @return {Iterator}\n     */\n    * values () {\n      for (const [, value] of this) {\n        yield value\n      }\n    }\n\n    /**\n     * Return a native (perhaps degraded) FormData with only a `append` method\n     * Can throw if it's not supported\n     *\n     * @return {FormData}\n     */\n    ['_asNative'] () {\n      const fd = new _FormData()\n\n      for (const [name, value] of this) {\n        fd.append(name, value)\n      }\n\n      return fd\n    }\n\n    /**\n     * [_blob description]\n     *\n     * @return {Blob} [description]\n     */\n    ['_blob'] () {\n        const boundary = '----formdata-polyfill-' + Math.random(),\n          chunks = [],\n          p = `--${boundary}\\r\\nContent-Disposition: form-data; name=\"`\n        this.forEach((value, name) => typeof value == 'string'\n          ? chunks.push(p + escape(normalizeLinefeeds(name)) + `\"\\r\\n\\r\\n${normalizeLinefeeds(value)}\\r\\n`)\n          : chunks.push(p + escape(normalizeLinefeeds(name)) + `\"; filename=\"${escape(value.name)}\"\\r\\nContent-Type: ${value.type||\"application/octet-stream\"}\\r\\n\\r\\n`, value, `\\r\\n`))\n        chunks.push(`--${boundary}--`)\n        return new Blob(chunks, {\n          type: \"multipart/form-data; boundary=\" + boundary\n        })\n    }\n\n    /**\n     * The class itself is iterable\n     * alias for formdata.entries()\n     *\n     * @return {Iterator}\n     */\n    [Symbol.iterator] () {\n      return this.entries()\n    }\n\n    /**\n     * Create the default string description.\n     *\n     * @return  {string} [object FormData]\n     */\n    toString () {\n      return '[object FormData]'\n    }\n  }\n\n  if (_match && !_match.matches) {\n    _match.matches =\n      _match.matchesSelector ||\n      _match.mozMatchesSelector ||\n      _match.msMatchesSelector ||\n      _match.oMatchesSelector ||\n      _match.webkitMatchesSelector ||\n      function (s) {\n        var matches = (this.document || this.ownerDocument).querySelectorAll(s)\n        var i = matches.length\n        while (--i >= 0 && matches.item(i) !== this) {}\n        return i > -1\n      }\n  }\n\n  if (stringTag) {\n    /**\n     * Create the default string description.\n     * It is accessed internally by the Object.prototype.toString().\n     */\n    FormDataPolyfill.prototype[stringTag] = 'FormData'\n  }\n\n  // Patch xhr's send method to call _blob transparently\n  if (_send) {\n    const setRequestHeader = global.XMLHttpRequest.prototype.setRequestHeader\n\n    global.XMLHttpRequest.prototype.setRequestHeader = function (name, value) {\n      setRequestHeader.call(this, name, value)\n      if (name.toLowerCase() === 'content-type') this._hasContentType = true\n    }\n\n    global.XMLHttpRequest.prototype.send = function (data) {\n      // need to patch send b/c old IE don't send blob's type (#44)\n      if (data instanceof FormDataPolyfill) {\n        const blob = data['_blob']()\n        if (!this._hasContentType) this.setRequestHeader('Content-Type', blob.type)\n        _send.call(this, blob)\n      } else {\n        _send.call(this, data)\n      }\n    }\n  }\n\n  // Patch fetch's function to call _blob transparently\n  if (_fetch) {\n    global.fetch = function (input, init) {\n      if (init && init.body && init.body instanceof FormDataPolyfill) {\n        init.body = init.body['_blob']()\n      }\n\n      return _fetch.call(this, input, init)\n    }\n  }\n\n  // Patch navigator.sendBeacon to use native FormData\n  if (_sendBeacon) {\n    global.navigator.sendBeacon = function (url, data) {\n      if (data instanceof FormDataPolyfill) {\n        data = data['_asNative']()\n      }\n      return _sendBeacon.call(this, url, data)\n    }\n  }\n\n  global['FormData'] = FormDataPolyfill\n}\n/formdata-to-blob.js\u0005\u0010/*! formdata-polyfill. MIT License. Jimmy Wärting <https://jimmy.warting.se/opensource> */\n\nconst escape = (str, filename) =>\n  (filename ? str : str.replace(/\\r?\\n|\\r/g, '\\r\\n'))\n  .replace(/\\n/g, '%0A')\n  .replace(/\\r/g, '%0D')\n  .replace(/\"/g, '%22')\n\n/**\n * pure function to convert any formData instance to a Blob\n * instances synchronous without reading all of the files\n *\n * @param {FormData|*} formData an instance of a formData Class\n * @param {Blob|*} [BlobClass=Blob] the Blob class to use when constructing it\n */\nexport function formDataToBlob (formData, BlobClass = Blob) {\n  const boundary = ('----formdata-polyfill-' + Math.random())\n  const chunks = []\n  const prefix = `--${boundary}\\r\\nContent-Disposition: form-data; name=\"`\n\n  for (let [name, value] of formData) {\n    if (typeof value === 'string') {\n      chunks.push(prefix + escape(name) + `\"\\r\\n\\r\\n${value.replace(/\\r(?!\\n)|(?<!\\r)\\n/g, '\\r\\n')}\\r\\n`)\n    } else {\n      chunks.push(\n        prefix + escape(name) + `\"; filename=\"${escape(value.name, 1)}\"\\r\\n` +\n        `Content-Type: ${value.type || 'application/octet-stream'}\\r\\n\\r\\n`,\n        value,\n        '\\r\\n'\n      )\n    }\n  }\n\n  chunks.push(`--${boundary}--`)\n\n  return new BlobClass(chunks, {\n    type: 'multipart/form-data; boundary=' + boundary\n  })\n}\n/package.json\u0004{\n  \"name\": \"formdata-polyfill\",\n  \"version\": \"4.0.10\",\n  \"description\": \"HTML5 `FormData` for Browsers and Node.\",\n  \"type\": \"module\",\n  \"main\": \"formdata.min.js\",\n  \"scripts\": {\n    \"build\": \"node build.js\",\n    \"test\": \"node test/test-esm.js\",\n    \"test-wpt\": \"node --experimental-loader ./test/http-loader.js ./test/test-wpt-in-node.js\",\n    \"test-polyfill\": \"php -S localhost:4445 & open http://localhost:4445/test/test-polyfill.html\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://jimmywarting@github.com/jimmywarting/FormData.git\"\n  },\n  \"files\": [\n    \"esm.min.js\",\n    \"esm.min.d.ts\",\n    \"FormData.js\",\n    \"formdata-to-blob.js\",\n    \"formdata.min.js\",\n    \"README.md\"\n  ],\n  \"engines\": {\n    \"node\": \">=12.20.0\"\n  },\n  \"keywords\": [\n    \"formdata\",\n    \"fetch\",\n    \"node-fetch\",\n    \"html5\",\n    \"browser\",\n    \"polyfill\"\n  ],\n  \"author\": \"Jimmy Wärting\",\n  \"license\": \"MIT\",\n  \"bugs\": {\n    \"url\": \"https://github.com/jimmywarting/FormData/issues\"\n  },\n  \"homepage\": \"https://github.com/jimmywarting/FormData#readme\",\n  \"dependencies\": {\n    \"fetch-blob\": \"^3.1.2\"\n  },\n  \"devDependencies\": {\n    \"@types/google-closure-compiler\": \"^0.0.19\",\n    \"@types/node\": \"^16.7.10\",\n    \"google-closure-compiler\": \"^20210808.0.0\"\n  }\n}\n/formdata.min.js\"/*! formdata-polyfill. MIT License. Jimmy W?rting <https://jimmy.warting.se/opensource> */\n;(function(){var h;function l(a){var b=0;return function(){return b<a.length?{done:!1,value:a[b++]}:{done:!0}}}var m=\"function\"==typeof Object.defineProperties?Object.defineProperty:function(a,b,c){if(a==Array.prototype||a==Object.prototype)return a;a[b]=c.value;return a};\nfunction n(a){a=[\"object\"==typeof globalThis&&globalThis,a,\"object\"==typeof window&&window,\"object\"==typeof self&&self,\"object\"==typeof global&&global];for(var b=0;b<a.length;++b){var c=a[b];if(c&&c.Math==Math)return c}throw Error(\"Cannot find global object\");}var q=n(this);function r(a,b){if(b)a:{var c=q;a=a.split(\".\");for(var d=0;d<a.length-1;d++){var e=a[d];if(!(e in c))break a;c=c[e]}a=a[a.length-1];d=c[a];b=b(d);b!=d&&null!=b&&m(c,a,{configurable:!0,writable:!0,value:b})}}\nr(\"Symbol\",function(a){function b(f){if(this instanceof b)throw new TypeError(\"Symbol is not a constructor\");return new c(d+(f||\"\")+\"_\"+e++,f)}function c(f,g){this.A=f;m(this,\"description\",{configurable:!0,writable:!0,value:g})}if(a)return a;c.prototype.toString=function(){return this.A};var d=\"jscomp_symbol_\"+(1E9*Math.random()>>>0)+\"_\",e=0;return b});\nr(\"Symbol.iterator\",function(a){if(a)return a;a=Symbol(\"Symbol.iterator\");for(var b=\"Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array\".split(\" \"),c=0;c<b.length;c++){var d=q[b[c]];\"function\"===typeof d&&\"function\"!=typeof d.prototype[a]&&m(d.prototype,a,{configurable:!0,writable:!0,value:function(){return u(l(this))}})}return a});function u(a){a={next:a};a[Symbol.iterator]=function(){return this};return a}\nfunction v(a){var b=\"undefined\"!=typeof Symbol&&Symbol.iterator&&a[Symbol.iterator];return b?b.call(a):{next:l(a)}}var w;if(\"function\"==typeof Object.setPrototypeOf)w=Object.setPrototypeOf;else{var y;a:{var z={a:!0},A={};try{A.__proto__=z;y=A.a;break a}catch(a){}y=!1}w=y?function(a,b){a.__proto__=b;if(a.__proto__!==b)throw new TypeError(a+\" is not extensible\");return a}:null}var B=w;function C(){this.m=!1;this.j=null;this.v=void 0;this.h=1;this.u=this.C=0;this.l=null}\nfunction D(a){if(a.m)throw new TypeError(\"Generator is already running\");a.m=!0}C.prototype.o=function(a){this.v=a};C.prototype.s=function(a){this.l={D:a,F:!0};this.h=this.C||this.u};C.prototype.return=function(a){this.l={return:a};this.h=this.u};function E(a,b){a.h=3;return{value:b}}function F(a){this.g=new C;this.G=a}F.prototype.o=function(a){D(this.g);if(this.g.j)return G(this,this.g.j.next,a,this.g.o);this.g.o(a);return H(this)};\nfunction I(a,b){D(a.g);var c=a.g.j;if(c)return G(a,\"return\"in c?c[\"return\"]:function(d){return{value:d,done:!0}},b,a.g.return);a.g.return(b);return H(a)}F.prototype.s=function(a){D(this.g);if(this.g.j)return G(this,this.g.j[\"throw\"],a,this.g.o);this.g.s(a);return H(this)};\nfunction G(a,b,c,d){try{var e=b.call(a.g.j,c);if(!(e instanceof Object))throw new TypeError(\"Iterator result \"+e+\" is not an object\");if(!e.done)return a.g.m=!1,e;var f=e.value}catch(g){return a.g.j=null,a.g.s(g),H(a)}a.g.j=null;d.call(a.g,f);return H(a)}function H(a){for(;a.g.h;)try{var b=a.G(a.g);if(b)return a.g.m=!1,{value:b.value,done:!1}}catch(c){a.g.v=void 0,a.g.s(c)}a.g.m=!1;if(a.g.l){b=a.g.l;a.g.l=null;if(b.F)throw b.D;return{value:b.return,done:!0}}return{value:void 0,done:!0}}\nfunction J(a){this.next=function(b){return a.o(b)};this.throw=function(b){return a.s(b)};this.return=function(b){return I(a,b)};this[Symbol.iterator]=function(){return this}}function K(a,b){b=new J(new F(b));B&&a.prototype&&B(b,a.prototype);return b}function L(a,b){a instanceof String&&(a+=\"\");var c=0,d=!1,e={next:function(){if(!d&&c<a.length){var f=c++;return{value:b(f,a[f]),done:!1}}d=!0;return{done:!0,value:void 0}}};e[Symbol.iterator]=function(){return e};return e}\nr(\"Array.prototype.entries\",function(a){return a?a:function(){return L(this,function(b,c){return[b,c]})}});\nif(\"undefined\"!==typeof Blob&&(\"undefined\"===typeof FormData||!FormData.prototype.keys)){var M=function(a,b){for(var c=0;c<a.length;c++)b(a[c])},N=function(a){return a.replace(/\\r?\\n|\\r/g,\"\\r\\n\")},O=function(a,b,c){if(b instanceof Blob){c=void 0!==c?String(c+\"\"):\"string\"===typeof b.name?b.name:\"blob\";if(b.name!==c||\"[object Blob]\"===Object.prototype.toString.call(b))b=new File([b],c);return[String(a),b]}return[String(a),String(b)]},P=function(a,b){if(a.length<b)throw new TypeError(b+\" argument required, but only \"+\na.length+\" present.\");},Q=\"object\"===typeof globalThis?globalThis:\"object\"===typeof window?window:\"object\"===typeof self?self:this,R=Q.FormData,S=Q.XMLHttpRequest&&Q.XMLHttpRequest.prototype.send,T=Q.Request&&Q.fetch,U=Q.navigator&&Q.navigator.sendBeacon,V=Q.Element&&Q.Element.prototype,W=Q.Symbol&&Symbol.toStringTag;W&&(Blob.prototype[W]||(Blob.prototype[W]=\"Blob\"),\"File\"in Q&&!File.prototype[W]&&(File.prototype[W]=\"File\"));try{new File([],\"\")}catch(a){Q.File=function(b,c,d){b=new Blob(b,d||{});\nObject.defineProperties(b,{name:{value:c},lastModified:{value:+(d&&void 0!==d.lastModified?new Date(d.lastModified):new Date)},toString:{value:function(){return\"[object File]\"}}});W&&Object.defineProperty(b,W,{value:\"File\"});return b}}var escape=function(a){return a.replace(/\\n/g,\"%0A\").replace(/\\r/g,\"%0D\").replace(/\"/g,\"%22\")},X=function(a){this.i=[];var b=this;a&&M(a.elements,function(c){if(c.name&&!c.disabled&&\"submit\"!==c.type&&\"button\"!==c.type&&!c.matches(\"form fieldset[disabled] *\"))if(\"file\"===\nc.type){var d=c.files&&c.files.length?c.files:[new File([],\"\",{type:\"application/octet-stream\"})];M(d,function(e){b.append(c.name,e)})}else\"select-multiple\"===c.type||\"select-one\"===c.type?M(c.options,function(e){!e.disabled&&e.selected&&b.append(c.name,e.value)}):\"checkbox\"===c.type||\"radio\"===c.type?c.checked&&b.append(c.name,c.value):(d=\"textarea\"===c.type?N(c.value):c.value,b.append(c.name,d))})};h=X.prototype;h.append=function(a,b,c){P(arguments,2);this.i.push(O(a,b,c))};h.delete=function(a){P(arguments,\n1);var b=[];a=String(a);M(this.i,function(c){c[0]!==a&&b.push(c)});this.i=b};h.entries=function b(){var c,d=this;return K(b,function(e){1==e.h&&(c=0);if(3!=e.h)return c<d.i.length?e=E(e,d.i[c]):(e.h=0,e=void 0),e;c++;e.h=2})};h.forEach=function(b,c){P(arguments,1);for(var d=v(this),e=d.next();!e.done;e=d.next()){var f=v(e.value);e=f.next().value;f=f.next().value;b.call(c,f,e,this)}};h.get=function(b){P(arguments,1);var c=this.i;b=String(b);for(var d=0;d<c.length;d++)if(c[d][0]===b)return c[d][1];\nreturn null};h.getAll=function(b){P(arguments,1);var c=[];b=String(b);M(this.i,function(d){d[0]===b&&c.push(d[1])});return c};h.has=function(b){P(arguments,1);b=String(b);for(var c=0;c<this.i.length;c++)if(this.i[c][0]===b)return!0;return!1};h.keys=function c(){var d=this,e,f,g,k,p;return K(c,function(t){1==t.h&&(e=v(d),f=e.next());if(3!=t.h){if(f.done){t.h=0;return}g=f.value;k=v(g);p=k.next().value;return E(t,p)}f=e.next();t.h=2})};h.set=function(c,d,e){P(arguments,2);c=String(c);var f=[],g=O(c,\nd,e),k=!0;M(this.i,function(p){p[0]===c?k&&(k=!f.push(g)):f.push(p)});k&&f.push(g);this.i=f};h.values=function d(){var e=this,f,g,k,p,t;return K(d,function(x){1==x.h&&(f=v(e),g=f.next());if(3!=x.h){if(g.done){x.h=0;return}k=g.value;p=v(k);p.next();t=p.next().value;return E(x,t)}g=f.next();x.h=2})};X.prototype._asNative=function(){for(var d=new R,e=v(this),f=e.next();!f.done;f=e.next()){var g=v(f.value);f=g.next().value;g=g.next().value;d.append(f,g)}return d};X.prototype._blob=function(){var d=\"----formdata-polyfill-\"+\nMath.random(),e=[],f=\"--\"+d+'\\r\\nContent-Disposition: form-data; name=\"';this.forEach(function(g,k){return\"string\"==typeof g?e.push(f+escape(N(k))+('\"\\r\\n\\r\\n'+N(g)+\"\\r\\n\")):e.push(f+escape(N(k))+('\"; filename=\"'+escape(g.name)+'\"\\r\\nContent-Type: '+(g.type||\"application/octet-stream\")+\"\\r\\n\\r\\n\"),g,\"\\r\\n\")});e.push(\"--\"+d+\"--\");return new Blob(e,{type:\"multipart/form-data; boundary=\"+d})};X.prototype[Symbol.iterator]=function(){return this.entries()};X.prototype.toString=function(){return\"[object FormData]\"};\nV&&!V.matches&&(V.matches=V.matchesSelector||V.mozMatchesSelector||V.msMatchesSelector||V.oMatchesSelector||V.webkitMatchesSelector||function(d){d=(this.document||this.ownerDocument).querySelectorAll(d);for(var e=d.length;0<=--e&&d.item(e)!==this;);return-1<e});W&&(X.prototype[W]=\"FormData\");if(S){var Y=Q.XMLHttpRequest.prototype.setRequestHeader;Q.XMLHttpRequest.prototype.setRequestHeader=function(d,e){Y.call(this,d,e);\"content-type\"===d.toLowerCase()&&(this.B=!0)};Q.XMLHttpRequest.prototype.send=\nfunction(d){d instanceof X?(d=d._blob(),this.B||this.setRequestHeader(\"Content-Type\",d.type),S.call(this,d)):S.call(this,d)}}T&&(Q.fetch=function(d,e){e&&e.body&&e.body instanceof X&&(e.body=e.body._blob());return T.call(this,d,e)});U&&(Q.navigator.sendBeacon=function(d,e){e instanceof X&&(e=e._asNative());return U.call(this,d,e)});Q.FormData=X};})();\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/Zm9yd2FyZGVkQDAuMi4w",
    "content": "/README.md\u0006v# forwarded\n\n[![NPM Version][npm-image]][npm-url]\n[![NPM Downloads][downloads-image]][downloads-url]\n[![Node.js Version][node-version-image]][node-version-url]\n[![Build Status][ci-image]][ci-url]\n[![Test Coverage][coveralls-image]][coveralls-url]\n\nParse HTTP X-Forwarded-For header\n\n## Installation\n\nThis is a [Node.js](https://nodejs.org/en/) module available through the\n[npm registry](https://www.npmjs.com/). Installation is done using the\n[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally):\n\n```sh\n$ npm install forwarded\n```\n\n## API\n\n```js\nvar forwarded = require('forwarded')\n```\n\n### forwarded(req)\n\n```js\nvar addresses = forwarded(req)\n```\n\nParse the `X-Forwarded-For` header from the request. Returns an array\nof the addresses, including the socket address for the `req`, in reverse\norder (i.e. index `0` is the socket address and the last index is the\nfurthest address, typically the end-user).\n\n## Testing\n\n```sh\n$ npm test\n```\n\n## License\n\n[MIT](LICENSE)\n\n[ci-image]: https://badgen.net/github/checks/jshttp/forwarded/master?label=ci\n[ci-url]: https://github.com/jshttp/forwarded/actions?query=workflow%3Aci\n[npm-image]: https://img.shields.io/npm/v/forwarded.svg\n[npm-url]: https://npmjs.org/package/forwarded\n[node-version-image]: https://img.shields.io/node/v/forwarded.svg\n[node-version-url]: https://nodejs.org/en/download/\n[coveralls-image]: https://img.shields.io/coveralls/jshttp/forwarded/master.svg\n[coveralls-url]: https://coveralls.io/r/jshttp/forwarded?branch=master\n[downloads-image]: https://img.shields.io/npm/dm/forwarded.svg\n[downloads-url]: https://npmjs.org/package/forwarded\n/LICENSE\u0004F(The MIT License)\n\nCopyright (c) 2014-2017 Douglas Christopher Wilson\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n/package.json\u0004~{\n  \"name\": \"forwarded\",\n  \"description\": \"Parse HTTP X-Forwarded-For header\",\n  \"version\": \"0.2.0\",\n  \"contributors\": [\n    \"Douglas Christopher Wilson <doug@somethingdoug.com>\"\n  ],\n  \"license\": \"MIT\",\n  \"keywords\": [\n    \"x-forwarded-for\",\n    \"http\",\n    \"req\"\n  ],\n  \"repository\": \"jshttp/forwarded\",\n  \"devDependencies\": {\n    \"beautify-benchmark\": \"0.2.4\",\n    \"benchmark\": \"2.1.4\",\n    \"deep-equal\": \"1.0.1\",\n    \"eslint\": \"7.27.0\",\n    \"eslint-config-standard\": \"14.1.1\",\n    \"eslint-plugin-import\": \"2.23.4\",\n    \"eslint-plugin-node\": \"11.1.0\",\n    \"eslint-plugin-promise\": \"4.3.1\",\n    \"eslint-plugin-standard\": \"4.1.0\",\n    \"mocha\": \"8.4.0\",\n    \"nyc\": \"15.1.0\"\n  },\n  \"files\": [\n    \"LICENSE\",\n    \"HISTORY.md\",\n    \"README.md\",\n    \"index.js\"\n  ],\n  \"engines\": {\n    \"node\": \">= 0.6\"\n  },\n  \"scripts\": {\n    \"bench\": \"node benchmark/index.js\",\n    \"lint\": \"eslint .\",\n    \"test\": \"mocha --reporter spec --bail --check-leaks test/\",\n    \"test-ci\": \"nyc --reporter=lcov --reporter=text npm test\",\n    \"test-cov\": \"nyc --reporter=html --reporter=text npm test\",\n    \"version\": \"node scripts/version-history.js && git add HISTORY.md\"\n  }\n}\n/index.js\u0006*/*!\n * forwarded\n * Copyright(c) 2014-2017 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = forwarded\n\n/**\n * Get all addresses in the request, using the `X-Forwarded-For` header.\n *\n * @param {object} req\n * @return {array}\n * @public\n */\n\nfunction forwarded (req) {\n  if (!req) {\n    throw new TypeError('argument req is required')\n  }\n\n  // simple header parsing\n  var proxyAddrs = parse(req.headers['x-forwarded-for'] || '')\n  var socketAddr = getSocketAddr(req)\n  var addrs = [socketAddr].concat(proxyAddrs)\n\n  // return all addresses\n  return addrs\n}\n\n/**\n * Get the socket address for a request.\n *\n * @param {object} req\n * @return {string}\n * @private\n */\n\nfunction getSocketAddr (req) {\n  return req.socket\n    ? req.socket.remoteAddress\n    : req.connection.remoteAddress\n}\n\n/**\n * Parse the X-Forwarded-For header.\n *\n * @param {string} header\n * @private\n */\n\nfunction parse (header) {\n  var end = header.length\n  var list = []\n  var start = header.length\n\n  // gather addresses, backwards\n  for (var i = header.length - 1; i >= 0; i--) {\n    switch (header.charCodeAt(i)) {\n      case 0x20: /*   */\n        if (start === end) {\n          start = end = i\n        }\n        break\n      case 0x2c: /* , */\n        if (start !== end) {\n          list.push(header.substring(start, end))\n        }\n        start = end = i\n        break\n      default:\n        start = i\n        break\n    }\n  }\n\n  // final address\n  if (start !== end) {\n    list.push(header.substring(start, end))\n  }\n\n  return list\n}\n/HISTORY.md\u00010.2.0 / 2021-05-31\n==================\n\n  * Use `req.socket` over deprecated `req.connection`\n\n0.1.2 / 2017-09-14\n==================\n\n  * perf: improve header parsing\n  * perf: reduce overhead when no `X-Forwarded-For` header\n\n0.1.1 / 2017-09-10\n==================\n\n  * Fix trimming leading / trailing OWS\n  * perf: hoist regular expression\n\n0.1.0 / 2014-09-21\n==================\n\n  * Initial release\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/ZmFzdC1kZWNvZGUtdXJpLWNvbXBvbmVudEAxLjAuMQ==",
    "content": "/test.js\u0003'use strict'\n\nconst { test } = require('tap')\nconst randomstring = require('randomstring')\nconst fastDecode = require('./index')\n\nconst charset = 'abcdef_ghilmn%opqrstu-vzxywjk%ABCDEF_HGILMN%OPQRSTU-VZXYWJK%0123456789.-_~%'\n\ntest('Basic', t => {\n  // base test\n  const uri = [\n    'test', 'a+b+c+d', '=a', '%25', '%%25%%', 'st%C3%A5le', 'st%C3%A5le%', '%st%C3%A5le%', '%%7Bst%C3%A5le%7D%',\n    '%ab%C3%A5le%', '%C3%A5%able%', '%7B%ab%7C%de%7D', '%7B%ab%%7C%de%%7D', '%7 B%ab%%7C%de%%7 D', '%61+%4d%4D',\n    '\\uFEFFtest', '\\uFEFF', '%EF%BB%BFtest', '%EF%BB%BF', '†', '%C2%B5', '%C2%B5%', '%%C2%B5%', '%ab', '%ab%ab%ab',\n    '%', '%2', '%E0%A4%A', '/test/hel%\"Flo', '/test/hel%2Flo'\n  ]\n\n  // random generated uri\n  for (var i = 0; i < 20000; i++) {\n    uri.push(randomstring.generate({ charset }))\n  }\n\n  for (i = 0; i < uri.length; i++) {\n    try {\n      t.strictEqual(decodeURIComponent(uri[i]), fastDecode(uri[i]))\n    } catch (e) {\n      t.strictEqual(fastDecode(uri[i]), null)\n    }\n  }\n\n  t.end()\n})\n/package.json\u00032{\n  \"name\": \"fast-decode-uri-component\",\n  \"version\": \"1.0.1\",\n  \"description\": \"Fast and safe decodeURIComponent\",\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"test\": \"standard && tap test.js\",\n    \"bench\": \"node bench.js\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/delvedor/fast-decode-uri-component.git\"\n  },\n  \"keywords\": [\n    \"decode\",\n    \"uri\",\n    \"component\",\n    \"fast\",\n    \"safe\"\n  ],\n  \"author\": \"Tomas Della Vedova - @delvedor (http://delved.org)\",\n  \"license\": \"MIT\",\n  \"bugs\": {\n    \"url\": \"https://github.com/delvedor/fast-decode-uri-component/issues\"\n  },\n  \"homepage\": \"https://github.com/delvedor/fast-decode-uri-component#readme\",\n  \"devDependencies\": {\n    \"nanobench\": \"^2.1.1\",\n    \"randomstring\": \"^1.1.5\",\n    \"standard\": \"^11.0.1\",\n    \"tap\": \"^11.1.2\"\n  }\n}\n/index.js\f'use strict'\n\nvar UTF8_ACCEPT = 12\nvar UTF8_REJECT = 0\nvar UTF8_DATA = [\n  // The first part of the table maps bytes to character to a transition.\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n  3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,\n  3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,\n  4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,\n  5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,\n  6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 7, 7,\n  10, 9, 9, 9, 11, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,\n\n  // The second part of the table maps a state to a new state when adding a\n  // transition.\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  12, 0, 0, 0, 0, 24, 36, 48, 60, 72, 84, 96,\n  0, 12, 12, 12, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 24, 24, 24, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 24, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n\n  // The third part maps the current transition to a mask that needs to apply\n  // to the byte.\n  0x7F, 0x3F, 0x3F, 0x3F, 0x00, 0x1F, 0x0F, 0x0F, 0x0F, 0x07, 0x07, 0x07\n]\n\nfunction decodeURIComponent (uri) {\n  var percentPosition = uri.indexOf('%')\n  if (percentPosition === -1) return uri\n\n  var length = uri.length\n  var decoded = ''\n  var last = 0\n  var codepoint = 0\n  var startOfOctets = percentPosition\n  var state = UTF8_ACCEPT\n\n  while (percentPosition > -1 && percentPosition < length) {\n    var high = hexCodeToInt(uri[percentPosition + 1], 4)\n    var low = hexCodeToInt(uri[percentPosition + 2], 0)\n    var byte = high | low\n    var type = UTF8_DATA[byte]\n    state = UTF8_DATA[256 + state + type]\n    codepoint = (codepoint << 6) | (byte & UTF8_DATA[364 + type])\n\n    if (state === UTF8_ACCEPT) {\n      decoded += uri.slice(last, startOfOctets)\n\n      decoded += (codepoint <= 0xFFFF)\n        ? String.fromCharCode(codepoint)\n        : String.fromCharCode(\n          (0xD7C0 + (codepoint >> 10)),\n          (0xDC00 + (codepoint & 0x3FF))\n        )\n\n      codepoint = 0\n      last = percentPosition + 3\n      percentPosition = startOfOctets = uri.indexOf('%', last)\n    } else if (state === UTF8_REJECT) {\n      return null\n    } else {\n      percentPosition += 3\n      if (percentPosition < length && uri.charCodeAt(percentPosition) === 37) continue\n      return null\n    }\n  }\n\n  return decoded + uri.slice(last)\n}\n\nvar HEX = {\n  '0': 0,\n  '1': 1,\n  '2': 2,\n  '3': 3,\n  '4': 4,\n  '5': 5,\n  '6': 6,\n  '7': 7,\n  '8': 8,\n  '9': 9,\n  'a': 10,\n  'A': 10,\n  'b': 11,\n  'B': 11,\n  'c': 12,\n  'C': 12,\n  'd': 13,\n  'D': 13,\n  'e': 14,\n  'E': 14,\n  'f': 15,\n  'F': 15\n}\n\nfunction hexCodeToInt (c, shift) {\n  var i = HEX[c]\n  return i === undefined ? 255 : i << shift\n}\n\nmodule.exports = decodeURIComponent\n/LICENSE\u0004MIT License\n\nCopyright (c) 2018 Tomas Della Vedova\nCopyright (c) 2017 Justin Ridgewell\nCopyright (c) 2008-2009 Bjoern Hoehrmann <bjoern@hoehrmann.de>\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n/.travis.ymlĄlanguage: node_js\n\nnode_js:\n  - \"11\"\n  - \"10\"\n  - \"8\"\n  - \"6\"\n\nnotifications:\n  email:\n    on_success: never\n    on_failure: always\n/README.md\u0007# fast-decode-uri-component\n\n[![js-standard-style](https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat)](http://standardjs.com/)  [![Build Status](https://travis-ci.org/delvedor/fast-decode-uri-component.svg?branch=master)](https://travis-ci.org/delvedor/fast-decode-uri-component)\n\nDecodes strings encoded by `encodeURI` and `encodeURIComponent`, without throwing errors on invalid escapes, instead, it returns `null`.\n\n\n## Installation\n```\nnpm install fast-decode-uri-component\n```\n\n## Usage\n```js\nconst fastDecode = require('fast-decode-uri-component')\n\nconsole.log(fastDecode('test')) // 'test'\nconsole.log(fastDecode('%25')) // '%'\nconsole.log(fastDecode('/test/hel%2Flo')) // '/test/hel/lo'\n\nconsole.log(fastDecode('/test/hel%\"Flo')) // null\nconsole.log(fastDecode('%7B%ab%7C%de%7D')) // null\nconsole.log(fastDecode('%ab')) // null\n```\n\n## Benchmarks\nYou can find the benchmark file [here](https://github.com/delvedor/fast-decode-uri-component/blob/master/bench.js).\n```\n# fast-decode-uri-component\nok ~539 ms (0 s + 539114308 ns)\n\n# decodeURIComponent\nok ~6.06 s (6 s + 62305153 ns)\n```\n\n## Acknowledgements\nThis project has been forked from [`jridgewell/safe-decode-uri-component`](https://github.com/jridgewell/safe-decode-uri-component) because I wanted to change the behaviour of the library on invalid inputs, plus change some internals.<br>\nAll the credits before the commit [`53000fe`](https://github.com/delvedor/fast-decode-uri-component/commit/53000feb8c268eec7a24620fd440fdd540be32b7) goes to the `jridgewell/safe-decode-uri-component` project [contributors](https://github.com/delvedor/fast-decode-uri-component/graphs/contributors).<br>\nSince the commit [`9673ab7`](https://github.com/delvedor/fast-decode-uri-component/commit/9673ab7820ef92081206a9f4fd158ffe9a352861) the project will be maintained by [**@delvedor**](https://github.com/delvedor).\n\n## License\n\nLicensed under [MIT](./LICENSE).\n/bench.js\u0003'use strict'\n\nconst bench = require('nanobench')\nconst fastDecode = require('./index')\n\nconst uri = [\n  'test', 'a+b+c+d', '=a', '%25', '%%25%%', 'st%C3%A5le', 'st%C3%A5le%', '%st%C3%A5le%', '%%7Bst%C3%A5le%7D%',\n  '%ab%C3%A5le%', '%C3%A5%able%', '%7B%ab%7C%de%7D', '%7B%ab%%7C%de%%7D', '%7 B%ab%%7C%de%%7 D', '%61+%4d%4D',\n  '\\uFEFFtest', '\\uFEFF', '%EF%BB%BFtest', '%EF%BB%BF', '†', '%C2%B5', '%C2%B5%', '%%C2%B5%', '%ab', '%ab%ab%ab',\n  '%', '%E0%A4%A', '/test/hel%\"Flo', '/test/hel%2Flo'\n]\n\nconst uriLen = uri.length\n\nbench('fast-decode-uri-component', b => {\n  b.start()\n  for (var round = 0; round < 100000; round++) {\n    for (var i = 0; i < uriLen; i++) {\n      fastDecode(uri[i])\n    }\n  }\n  b.end()\n})\n\nbench('decodeURIComponent', b => {\n  b.start()\n  for (var round = 0; round < 100000; round++) {\n    for (var i = 0; i < uriLen; i++) {\n      try {\n        decodeURIComponent(uri[i])\n      } catch (e) {}\n    }\n  }\n  b.end()\n})\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/ZmFzdC1kZWVwLWVxdWFsQDMuMS4z",
    "content": "/es6/react.d.tsBdeclare const equal: (a: any, b: any) => boolean;\nexport = equal;\n/es6/react.js\b'use strict';\n\n// do not edit .js files directly - edit src/index.jst\n\n\n  var envHasBigInt64Array = typeof BigInt64Array !== 'undefined';\n\n\nmodule.exports = function equal(a, b) {\n  if (a === b) return true;\n\n  if (a && b && typeof a == 'object' && typeof b == 'object') {\n    if (a.constructor !== b.constructor) return false;\n\n    var length, i, keys;\n    if (Array.isArray(a)) {\n      length = a.length;\n      if (length != b.length) return false;\n      for (i = length; i-- !== 0;)\n        if (!equal(a[i], b[i])) return false;\n      return true;\n    }\n\n\n    if ((a instanceof Map) && (b instanceof Map)) {\n      if (a.size !== b.size) return false;\n      for (i of a.entries())\n        if (!b.has(i[0])) return false;\n      for (i of a.entries())\n        if (!equal(i[1], b.get(i[0]))) return false;\n      return true;\n    }\n\n    if ((a instanceof Set) && (b instanceof Set)) {\n      if (a.size !== b.size) return false;\n      for (i of a.entries())\n        if (!b.has(i[0])) return false;\n      return true;\n    }\n\n    if (ArrayBuffer.isView(a) && ArrayBuffer.isView(b)) {\n      length = a.length;\n      if (length != b.length) return false;\n      for (i = length; i-- !== 0;)\n        if (a[i] !== b[i]) return false;\n      return true;\n    }\n\n\n    if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n    if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n    if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n    keys = Object.keys(a);\n    length = keys.length;\n    if (length !== Object.keys(b).length) return false;\n\n    for (i = length; i-- !== 0;)\n      if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n\n    for (i = length; i-- !== 0;) {\n      var key = keys[i];\n\n      if (key === '_owner' && a.$$typeof) {\n        // React-specific: avoid traversing React elements' _owner.\n        //  _owner contains circular references\n        // and is not needed when comparing the actual elements (and not their owners)\n        continue;\n      }\n\n      if (!equal(a[key], b[key])) return false;\n    }\n\n    return true;\n  }\n\n  // true if both NaN, false otherwise\n  return a!==a && b!==b;\n};\n/package.json\u0005{\n  \"name\": \"fast-deep-equal\",\n  \"version\": \"3.1.3\",\n  \"description\": \"Fast deep equal\",\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"eslint\": \"eslint *.js benchmark/*.js spec/*.js\",\n    \"build\": \"node build\",\n    \"benchmark\": \"npm i && npm run build && cd ./benchmark && npm i && node ./\",\n    \"test-spec\": \"mocha spec/*.spec.js -R spec\",\n    \"test-cov\": \"nyc npm run test-spec\",\n    \"test-ts\": \"tsc --target ES5 --noImplicitAny index.d.ts\",\n    \"test\": \"npm run build && npm run eslint && npm run test-ts && npm run test-cov\",\n    \"prepublish\": \"npm run build\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/epoberezkin/fast-deep-equal.git\"\n  },\n  \"keywords\": [\n    \"fast\",\n    \"equal\",\n    \"deep-equal\"\n  ],\n  \"author\": \"Evgeny Poberezkin\",\n  \"license\": \"MIT\",\n  \"bugs\": {\n    \"url\": \"https://github.com/epoberezkin/fast-deep-equal/issues\"\n  },\n  \"homepage\": \"https://github.com/epoberezkin/fast-deep-equal#readme\",\n  \"devDependencies\": {\n    \"coveralls\": \"^3.1.0\",\n    \"dot\": \"^1.1.2\",\n    \"eslint\": \"^7.2.0\",\n    \"mocha\": \"^7.2.0\",\n    \"nyc\": \"^15.1.0\",\n    \"pre-commit\": \"^1.2.2\",\n    \"react\": \"^16.12.0\",\n    \"react-test-renderer\": \"^16.12.0\",\n    \"sinon\": \"^9.0.2\",\n    \"typescript\": \"^3.9.5\"\n  },\n  \"nyc\": {\n    \"exclude\": [\n      \"**/spec/**\",\n      \"node_modules\"\n    ],\n    \"reporter\": [\n      \"lcov\",\n      \"text-summary\"\n    ]\n  },\n  \"files\": [\n    \"index.js\",\n    \"index.d.ts\",\n    \"react.js\",\n    \"react.d.ts\",\n    \"es6/\"\n  ],\n  \"types\": \"index.d.ts\"\n}\n/README.md\f# fast-deep-equal\nThe fastest deep equal with ES6 Map, Set and Typed arrays support.\n\n[![Build Status](https://travis-ci.org/epoberezkin/fast-deep-equal.svg?branch=master)](https://travis-ci.org/epoberezkin/fast-deep-equal)\n[![npm](https://img.shields.io/npm/v/fast-deep-equal.svg)](https://www.npmjs.com/package/fast-deep-equal)\n[![Coverage Status](https://coveralls.io/repos/github/epoberezkin/fast-deep-equal/badge.svg?branch=master)](https://coveralls.io/github/epoberezkin/fast-deep-equal?branch=master)\n\n\n## Install\n\n```bash\nnpm install fast-deep-equal\n```\n\n\n## Features\n\n- ES5 compatible\n- works in node.js (8+) and browsers (IE9+)\n- checks equality of Date and RegExp objects by value.\n\nES6 equal (`require('fast-deep-equal/es6')`) also supports:\n- Maps\n- Sets\n- Typed arrays\n\n\n## Usage\n\n```javascript\nvar equal = require('fast-deep-equal');\nconsole.log(equal({foo: 'bar'}, {foo: 'bar'})); // true\n```\n\nTo support ES6 Maps, Sets and Typed arrays equality use:\n\n```javascript\nvar equal = require('fast-deep-equal/es6');\nconsole.log(equal(Int16Array([1, 2]), Int16Array([1, 2]))); // true\n```\n\nTo use with React (avoiding the traversal of React elements' _owner\nproperty that contains circular references and is not needed when\ncomparing the elements - borrowed from [react-fast-compare](https://github.com/FormidableLabs/react-fast-compare)):\n\n```javascript\nvar equal = require('fast-deep-equal/react');\nvar equal = require('fast-deep-equal/es6/react');\n```\n\n\n## Performance benchmark\n\nNode.js v12.6.0:\n\n```\nfast-deep-equal x 261,950 ops/sec ±0.52% (89 runs sampled)\nfast-deep-equal/es6 x 212,991 ops/sec ±0.34% (92 runs sampled)\nfast-equals x 230,957 ops/sec ±0.83% (85 runs sampled)\nnano-equal x 187,995 ops/sec ±0.53% (88 runs sampled)\nshallow-equal-fuzzy x 138,302 ops/sec ±0.49% (90 runs sampled)\nunderscore.isEqual x 74,423 ops/sec ±0.38% (89 runs sampled)\nlodash.isEqual x 36,637 ops/sec ±0.72% (90 runs sampled)\ndeep-equal x 2,310 ops/sec ±0.37% (90 runs sampled)\ndeep-eql x 35,312 ops/sec ±0.67% (91 runs sampled)\nramda.equals x 12,054 ops/sec ±0.40% (91 runs sampled)\nutil.isDeepStrictEqual x 46,440 ops/sec ±0.43% (90 runs sampled)\nassert.deepStrictEqual x 456 ops/sec ±0.71% (88 runs sampled)\n\nThe fastest is fast-deep-equal\n```\n\nTo run benchmark (requires node.js 6+):\n\n```bash\nnpm run benchmark\n```\n\n__Please note__: this benchmark runs against the available test cases. To choose the most performant library for your application, it is recommended to benchmark against your data and to NOT expect this benchmark to reflect the performance difference in your application.\n\n\n## Enterprise support\n\nfast-deep-equal package is a part of [Tidelift enterprise subscription](https://tidelift.com/subscription/pkg/npm-fast-deep-equal?utm_source=npm-fast-deep-equal&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) - it provides a centralised commercial support to open-source software users, in addition to the support provided by software maintainers.\n\n\n## Security contact\n\nTo report a security vulnerability, please use the\n[Tidelift security contact](https://tidelift.com/security).\nTidelift will coordinate the fix and disclosure. Please do NOT report security vulnerability via GitHub issues.\n\n\n## License\n\n[MIT](https://github.com/epoberezkin/fast-deep-equal/blob/master/LICENSE)\n/index.d.tsgdeclare module 'fast-deep-equal' {\n    const equal: (a: any, b: any) => boolean;\n    export = equal;\n}\n/es6/index.d.tsBdeclare const equal: (a: any, b: any) => boolean;\nexport = equal;\n/react.js\u0005'use strict';\n\n// do not edit .js files directly - edit src/index.jst\n\n\n\nmodule.exports = function equal(a, b) {\n  if (a === b) return true;\n\n  if (a && b && typeof a == 'object' && typeof b == 'object') {\n    if (a.constructor !== b.constructor) return false;\n\n    var length, i, keys;\n    if (Array.isArray(a)) {\n      length = a.length;\n      if (length != b.length) return false;\n      for (i = length; i-- !== 0;)\n        if (!equal(a[i], b[i])) return false;\n      return true;\n    }\n\n\n\n    if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n    if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n    if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n    keys = Object.keys(a);\n    length = keys.length;\n    if (length !== Object.keys(b).length) return false;\n\n    for (i = length; i-- !== 0;)\n      if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n\n    for (i = length; i-- !== 0;) {\n      var key = keys[i];\n\n      if (key === '_owner' && a.$$typeof) {\n        // React-specific: avoid traversing React elements' _owner.\n        //  _owner contains circular references\n        // and is not needed when comparing the actual elements (and not their owners)\n        continue;\n      }\n\n      if (!equal(a[key], b[key])) return false;\n    }\n\n    return true;\n  }\n\n  // true if both NaN, false otherwise\n  return a!==a && b!==b;\n};\n/index.js\u0004'use strict';\n\n// do not edit .js files directly - edit src/index.jst\n\n\n\nmodule.exports = function equal(a, b) {\n  if (a === b) return true;\n\n  if (a && b && typeof a == 'object' && typeof b == 'object') {\n    if (a.constructor !== b.constructor) return false;\n\n    var length, i, keys;\n    if (Array.isArray(a)) {\n      length = a.length;\n      if (length != b.length) return false;\n      for (i = length; i-- !== 0;)\n        if (!equal(a[i], b[i])) return false;\n      return true;\n    }\n\n\n\n    if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n    if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n    if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n    keys = Object.keys(a);\n    length = keys.length;\n    if (length !== Object.keys(b).length) return false;\n\n    for (i = length; i-- !== 0;)\n      if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n\n    for (i = length; i-- !== 0;) {\n      var key = keys[i];\n\n      if (!equal(a[key], b[key])) return false;\n    }\n\n    return true;\n  }\n\n  // true if both NaN, false otherwise\n  return a!==a && b!==b;\n};\n/es6/index.js\u0007'use strict';\n\n// do not edit .js files directly - edit src/index.jst\n\n\n  var envHasBigInt64Array = typeof BigInt64Array !== 'undefined';\n\n\nmodule.exports = function equal(a, b) {\n  if (a === b) return true;\n\n  if (a && b && typeof a == 'object' && typeof b == 'object') {\n    if (a.constructor !== b.constructor) return false;\n\n    var length, i, keys;\n    if (Array.isArray(a)) {\n      length = a.length;\n      if (length != b.length) return false;\n      for (i = length; i-- !== 0;)\n        if (!equal(a[i], b[i])) return false;\n      return true;\n    }\n\n\n    if ((a instanceof Map) && (b instanceof Map)) {\n      if (a.size !== b.size) return false;\n      for (i of a.entries())\n        if (!b.has(i[0])) return false;\n      for (i of a.entries())\n        if (!equal(i[1], b.get(i[0]))) return false;\n      return true;\n    }\n\n    if ((a instanceof Set) && (b instanceof Set)) {\n      if (a.size !== b.size) return false;\n      for (i of a.entries())\n        if (!b.has(i[0])) return false;\n      return true;\n    }\n\n    if (ArrayBuffer.isView(a) && ArrayBuffer.isView(b)) {\n      length = a.length;\n      if (length != b.length) return false;\n      for (i = length; i-- !== 0;)\n        if (a[i] !== b[i]) return false;\n      return true;\n    }\n\n\n    if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n    if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n    if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n    keys = Object.keys(a);\n    length = keys.length;\n    if (length !== Object.keys(b).length) return false;\n\n    for (i = length; i-- !== 0;)\n      if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n\n    for (i = length; i-- !== 0;) {\n      var key = keys[i];\n\n      if (!equal(a[key], b[key])) return false;\n    }\n\n    return true;\n  }\n\n  // true if both NaN, false otherwise\n  return a!==a && b!==b;\n};\n/LICENSE\u00042MIT License\n\nCopyright (c) 2017 Evgeny Poberezkin\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n/react.d.tsBdeclare const equal: (a: any, b: any) => boolean;\nexport = equal;\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/ZmFzdC1sZXZlbnNodGVpbkAyLjAuNg==",
    "content": "/LICENSE.md\u0004L(MIT License)\n\nCopyright (c) 2013 [Ramesh Nair](http://www.hiddentao.com/)\n\nPermission is hereby granted, free of charge, to any person\nobtaining a copy of this software and associated documentation\nfiles (the \"Software\"), to deal in the Software without\nrestriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the\nSoftware is furnished to do so, subject to the following\nconditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\nOF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\nHOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\nWHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\nFROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\nOTHER DEALINGS IN THE SOFTWARE.\n\n/README.md\rV# fast-levenshtein - Levenshtein algorithm in Javascript\n\n[![Build Status](https://secure.travis-ci.org/hiddentao/fast-levenshtein.png)](http://travis-ci.org/hiddentao/fast-levenshtein)\n[![NPM module](https://badge.fury.io/js/fast-levenshtein.png)](https://badge.fury.io/js/fast-levenshtein)\n[![NPM downloads](https://img.shields.io/npm/dm/fast-levenshtein.svg?maxAge=2592000)](https://www.npmjs.com/package/fast-levenshtein)\n[![Follow on Twitter](https://img.shields.io/twitter/url/http/shields.io.svg?style=social&label=Follow&maxAge=2592000)](https://twitter.com/hiddentao)\n\nAn efficient Javascript implementation of the [Levenshtein algorithm](http://en.wikipedia.org/wiki/Levenshtein_distance) with locale-specific collator support.\n\n## Features\n\n* Works in node.js and in the browser.\n* Better performance than other implementations by not needing to store the whole matrix ([more info](http://www.codeproject.com/Articles/13525/Fast-memory-efficient-Levenshtein-algorithm)).\n* Locale-sensitive string comparisions if needed.\n* Comprehensive test suite and performance benchmark.\n* Small: <1 KB minified and gzipped\n\n## Installation\n\n### node.js\n\nInstall using [npm](http://npmjs.org/):\n\n```bash\n$ npm install fast-levenshtein\n```\n\n### Browser\n\nUsing bower:\n\n```bash\n$ bower install fast-levenshtein\n```\n\nIf you are not using any module loader system then the API will then be accessible via the `window.Levenshtein` object.\n\n## Examples\n\n**Default usage**\n\n```javascript\nvar levenshtein = require('fast-levenshtein');\n\nvar distance = levenshtein.get('back', 'book');   // 2\nvar distance = levenshtein.get('我愛你', '我叫你');   // 1\n```\n\n**Locale-sensitive string comparisons**\n\nIt supports using [Intl.Collator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Collator) for locale-sensitive  string comparisons:\n\n```javascript\nvar levenshtein = require('fast-levenshtein');\n\nlevenshtein.get('mikailovitch', 'Mikhaïlovitch', { useCollator: true});\n// 1\n```\n\n## Building and Testing\n\nTo build the code and run the tests:\n\n```bash\n$ npm install -g grunt-cli\n$ npm install\n$ npm run build\n```\n\n## Performance\n\n_Thanks to [Titus Wormer](https://github.com/wooorm) for [encouraging me](https://github.com/hiddentao/fast-levenshtein/issues/1) to do this._\n\nBenchmarked against other node.js levenshtein distance modules (on Macbook Air 2012, Core i7, 8GB RAM):\n\n```bash\nRunning suite Implementation comparison [benchmark/speed.js]...\n>> levenshtein-edit-distance x 234 ops/sec ±3.02% (73 runs sampled)\n>> levenshtein-component x 422 ops/sec ±4.38% (83 runs sampled)\n>> levenshtein-deltas x 283 ops/sec ±3.83% (78 runs sampled)\n>> natural x 255 ops/sec ±0.76% (88 runs sampled)\n>> levenshtein x 180 ops/sec ±3.55% (86 runs sampled)\n>> fast-levenshtein x 1,792 ops/sec ±2.72% (95 runs sampled)\nBenchmark done.\nFastest test is fast-levenshtein at 4.2x faster than levenshtein-component\n```\n\nYou can run this benchmark yourself by doing:\n\n```bash\n$ npm install\n$ npm run build\n$ npm run benchmark\n```\n\n## Contributing\n\nIf you wish to submit a pull request please update and/or create new tests for any changes you make and ensure the grunt build passes.\n\nSee [CONTRIBUTING.md](https://github.com/hiddentao/fast-levenshtein/blob/master/CONTRIBUTING.md) for details.\n\n## License\n\nMIT - see [LICENSE.md](https://github.com/hiddentao/fast-levenshtein/blob/master/LICENSE.md)\n/package.json\u0003{\n  \"name\": \"fast-levenshtein\",\n  \"version\": \"2.0.6\",\n  \"description\": \"Efficient implementation of Levenshtein algorithm  with locale-specific collator support.\",\n  \"main\": \"levenshtein.js\",\n  \"files\": [\n    \"levenshtein.js\"\n  ],\n  \"scripts\": {\n    \"build\": \"grunt build\",\n    \"prepublish\": \"npm run build\",\n    \"benchmark\": \"grunt benchmark\",\n    \"test\": \"mocha\"\n  },\n  \"devDependencies\": {\n    \"chai\": \"~1.5.0\",\n    \"grunt\": \"~0.4.1\",\n    \"grunt-benchmark\": \"~0.2.0\",\n    \"grunt-cli\": \"^1.2.0\",\n    \"grunt-contrib-jshint\": \"~0.4.3\",\n    \"grunt-contrib-uglify\": \"~0.2.0\",\n    \"grunt-mocha-test\": \"~0.2.2\",\n    \"grunt-npm-install\": \"~0.1.0\",\n    \"load-grunt-tasks\": \"~0.6.0\",\n    \"lodash\": \"^4.0.1\",\n    \"mocha\": \"~1.9.0\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/hiddentao/fast-levenshtein.git\"\n  },\n  \"keywords\": [\n    \"levenshtein\",\n    \"distance\",\n    \"string\"\n  ],\n  \"author\": \"Ramesh Nair <ram@hiddentao.com> (http://www.hiddentao.com/)\",\n  \"license\": \"MIT\"\n}\n/levenshtein.js\u000f\\(function() {\n  'use strict';\n  \n  var collator;\n  try {\n    collator = (typeof Intl !== \"undefined\" && typeof Intl.Collator !== \"undefined\") ? Intl.Collator(\"generic\", { sensitivity: \"base\" }) : null;\n  } catch (err){\n    console.log(\"Collator could not be initialized and wouldn't be used\");\n  }\n  // arrays to re-use\n  var prevRow = [],\n    str2Char = [];\n  \n  /**\n   * Based on the algorithm at http://en.wikipedia.org/wiki/Levenshtein_distance.\n   */\n  var Levenshtein = {\n    /**\n     * Calculate levenshtein distance of the two strings.\n     *\n     * @param str1 String the first string.\n     * @param str2 String the second string.\n     * @param [options] Additional options.\n     * @param [options.useCollator] Use `Intl.Collator` for locale-sensitive string comparison.\n     * @return Integer the levenshtein distance (0 and above).\n     */\n    get: function(str1, str2, options) {\n      var useCollator = (options && collator && options.useCollator);\n      \n      var str1Len = str1.length,\n        str2Len = str2.length;\n      \n      // base cases\n      if (str1Len === 0) return str2Len;\n      if (str2Len === 0) return str1Len;\n\n      // two rows\n      var curCol, nextCol, i, j, tmp;\n\n      // initialise previous row\n      for (i=0; i<str2Len; ++i) {\n        prevRow[i] = i;\n        str2Char[i] = str2.charCodeAt(i);\n      }\n      prevRow[str2Len] = str2Len;\n\n      var strCmp;\n      if (useCollator) {\n        // calculate current row distance from previous row using collator\n        for (i = 0; i < str1Len; ++i) {\n          nextCol = i + 1;\n\n          for (j = 0; j < str2Len; ++j) {\n            curCol = nextCol;\n\n            // substution\n            strCmp = 0 === collator.compare(str1.charAt(i), String.fromCharCode(str2Char[j]));\n\n            nextCol = prevRow[j] + (strCmp ? 0 : 1);\n\n            // insertion\n            tmp = curCol + 1;\n            if (nextCol > tmp) {\n              nextCol = tmp;\n            }\n            // deletion\n            tmp = prevRow[j + 1] + 1;\n            if (nextCol > tmp) {\n              nextCol = tmp;\n            }\n\n            // copy current col value into previous (in preparation for next iteration)\n            prevRow[j] = curCol;\n          }\n\n          // copy last col value into previous (in preparation for next iteration)\n          prevRow[j] = nextCol;\n        }\n      }\n      else {\n        // calculate current row distance from previous row without collator\n        for (i = 0; i < str1Len; ++i) {\n          nextCol = i + 1;\n\n          for (j = 0; j < str2Len; ++j) {\n            curCol = nextCol;\n\n            // substution\n            strCmp = str1.charCodeAt(i) === str2Char[j];\n\n            nextCol = prevRow[j] + (strCmp ? 0 : 1);\n\n            // insertion\n            tmp = curCol + 1;\n            if (nextCol > tmp) {\n              nextCol = tmp;\n            }\n            // deletion\n            tmp = prevRow[j + 1] + 1;\n            if (nextCol > tmp) {\n              nextCol = tmp;\n            }\n\n            // copy current col value into previous (in preparation for next iteration)\n            prevRow[j] = curCol;\n          }\n\n          // copy last col value into previous (in preparation for next iteration)\n          prevRow[j] = nextCol;\n        }\n      }\n      return nextCol;\n    }\n\n  };\n\n  // amd\n  if (typeof define !== \"undefined\" && define !== null && define.amd) {\n    define(function() {\n      return Levenshtein;\n    });\n  }\n  // commonjs\n  else if (typeof module !== \"undefined\" && module !== null && typeof exports !== \"undefined\" && module.exports === exports) {\n    module.exports = Levenshtein;\n  }\n  // web worker\n  else if (typeof self !== \"undefined\" && typeof self.postMessage === 'function' && typeof self.importScripts === 'function') {\n    self.Levenshtein = Levenshtein;\n  }\n  // browser main thread\n  else if (typeof window !== \"undefined\" && window !== null) {\n    window.Levenshtein = Levenshtein;\n  }\n}());\n\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/ZmFzdC1xdWVyeXN0cmluZ0AxLjEuMQ==",
    "content": "/lib/stringify.js\u0006\"use strict\";\n\nconst { encodeString } = require(\"./internals/querystring\");\n\nfunction getAsPrimitive(value) {\n  const type = typeof value;\n\n  if (type === \"string\") {\n    // Length check is handled inside encodeString function\n    return encodeString(value);\n  } else if (type === \"bigint\") {\n    return value.toString();\n  } else if (type === \"boolean\") {\n    return value ? \"true\" : \"false\";\n  } else if (type === \"number\" && Number.isFinite(value)) {\n    return value < 1e21 ? \"\" + value : encodeString(\"\" + value);\n  }\n\n  return \"\";\n}\n\n/**\n * @param {Record<string, string | number | boolean\n * | ReadonlyArray<string | number | boolean> | null>} input\n * @returns {string}\n */\nfunction stringify(input) {\n  let result = \"\";\n\n  if (input === null || typeof input !== \"object\") {\n    return result;\n  }\n\n  const separator = \"&\";\n  const keys = Object.keys(input);\n  const keyLength = keys.length;\n  let valueLength = 0;\n\n  for (let i = 0; i < keyLength; i++) {\n    const key = keys[i];\n    const value = input[key];\n    const encodedKey = encodeString(key) + \"=\";\n\n    if (i) {\n      result += separator;\n    }\n\n    if (Array.isArray(value)) {\n      valueLength = value.length;\n      for (let j = 0; j < valueLength; j++) {\n        if (j) {\n          result += separator;\n        }\n\n        // Optimization: Dividing into multiple lines improves the performance.\n        // Since v8 does not need to care about the '+' character if it was one-liner.\n        result += encodedKey;\n        result += getAsPrimitive(value[j]);\n      }\n    } else {\n      result += encodedKey;\n      result += getAsPrimitive(value);\n    }\n  }\n\n  return result;\n}\n\nmodule.exports = stringify;\n/lib/parse.js\r\u0015\"use strict\";\n\nconst fastDecode = require(\"fast-decode-uri-component\");\n\nconst plusRegex = /\\+/g;\nconst Empty = function () {};\nEmpty.prototype = Object.create(null);\n\n/**\n * @callback parse\n * @param {string} input\n */\nfunction parse(input) {\n  // Optimization: Use new Empty() instead of Object.create(null) for performance\n  // v8 has a better optimization for initializing functions compared to Object\n  const result = new Empty();\n\n  if (typeof input !== \"string\") {\n    return result;\n  }\n\n  let inputLength = input.length;\n  let key = \"\";\n  let value = \"\";\n  let startingIndex = -1;\n  let equalityIndex = -1;\n  let shouldDecodeKey = false;\n  let shouldDecodeValue = false;\n  let keyHasPlus = false;\n  let valueHasPlus = false;\n  let hasBothKeyValuePair = false;\n  let c = 0;\n\n  // Have a boundary of input.length + 1 to access last pair inside the loop.\n  for (let i = 0; i < inputLength + 1; i++) {\n    c = i !== inputLength ? input.charCodeAt(i) : 38;\n\n    // Handle '&' and end of line to pass the current values to result\n    if (c === 38) {\n      hasBothKeyValuePair = equalityIndex > startingIndex;\n\n      // Optimization: Reuse equality index to store the end of key\n      if (!hasBothKeyValuePair) {\n        equalityIndex = i;\n      }\n\n      key = input.slice(startingIndex + 1, equalityIndex);\n\n      // Add key/value pair only if the range size is greater than 1; a.k.a. contains at least \"=\"\n      if (hasBothKeyValuePair || key.length > 0) {\n        // Optimization: Replace '+' with space\n        if (keyHasPlus) {\n          key = key.replace(plusRegex, \" \");\n        }\n\n        // Optimization: Do not decode if it's not necessary.\n        if (shouldDecodeKey) {\n          key = fastDecode(key) || key;\n        }\n\n        if (hasBothKeyValuePair) {\n          value = input.slice(equalityIndex + 1, i);\n\n          if (valueHasPlus) {\n            value = value.replace(plusRegex, \" \");\n          }\n\n          if (shouldDecodeValue) {\n            value = fastDecode(value) || value;\n          }\n        }\n        const currentValue = result[key];\n\n        if (currentValue === undefined) {\n          result[key] = value;\n        } else {\n          // Optimization: value.pop is faster than Array.isArray(value)\n          if (currentValue.pop) {\n            currentValue.push(value);\n          } else {\n            result[key] = [currentValue, value];\n          }\n        }\n      }\n\n      // Reset reading key value pairs\n      value = \"\";\n      startingIndex = i;\n      equalityIndex = i;\n      shouldDecodeKey = false;\n      shouldDecodeValue = false;\n      keyHasPlus = false;\n      valueHasPlus = false;\n    }\n    // Check '='\n    else if (c === 61) {\n      if (equalityIndex <= startingIndex) {\n        equalityIndex = i;\n      }\n      // If '=' character occurs again, we should decode the input.\n      else {\n        shouldDecodeValue = true;\n      }\n    }\n    // Check '+', and remember to replace it with empty space.\n    else if (c === 43) {\n      if (equalityIndex > startingIndex) {\n        valueHasPlus = true;\n      } else {\n        keyHasPlus = true;\n      }\n    }\n    // Check '%' character for encoding\n    else if (c === 37) {\n      if (equalityIndex > startingIndex) {\n        shouldDecodeValue = true;\n      } else {\n        shouldDecodeKey = true;\n      }\n    }\n  }\n\n  return result;\n}\n\nmodule.exports = parse;\n/LICENSE\u0004!Copyright (c) 2022 Yagiz Nizipli\n\nPermission is hereby granted, free of charge, to any\nperson obtaining a copy of this software and associated\ndocumentation files (the \"Software\"), to deal in the\nSoftware without restriction, including without\nlimitation the rights to use, copy, modify, merge,\npublish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software\nis furnished to do so, subject to the following\nconditions:\n\nThe above copyright notice and this permission notice\nshall be included in all copies or substantial portions\nof the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\nSHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR\nIN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\nDEALINGS IN THE SOFTWARE.\n/package.json\u0005{\n  \"name\": \"fast-querystring\",\n  \"version\": \"1.1.1\",\n  \"description\": \"A fast alternative to legacy querystring module\",\n  \"main\": \"./lib/index.js\",\n  \"types\": \"./lib/index.d.ts\",\n  \"scripts\": {\n    \"format\": \"rome format . --write\",\n    \"format:ci\": \"rome ci .\",\n    \"test\": \"vitest\",\n    \"test:watch\": \"vitest --watch\",\n    \"test:coverage\": \"vitest --coverage\",\n    \"coverage\": \"vitest run --coverage\",\n    \"benchmark\": \"node benchmark/bench.js\",\n    \"benchmark:cmp-branch\": \"node benchmark/bench-cmp-branch.js\",\n    \"benchmark:parse\": \"node benchmark/parse.mjs\",\n    \"benchmark:stringify\": \"node benchmark/stringify.mjs\",\n    \"benchmark:import\": \"node benchmark/import.mjs\"\n  },\n  \"keywords\": [\n    \"querystring\",\n    \"qs\",\n    \"parser\"\n  ],\n  \"author\": \"Yagiz Nizipli <yagiz@nizipli.com>\",\n  \"license\": \"MIT\",\n  \"devDependencies\": {\n    \"@aws-sdk/querystring-builder\": \"^3.201.0\",\n    \"@aws-sdk/querystring-parser\": \"^3.201.0\",\n    \"@types/node\": \"^18.11.9\",\n    \"@vitest/coverage-c8\": \"^0.28.1\",\n    \"benchmark\": \"^2.1.4\",\n    \"cli-select\": \"^1.1.2\",\n    \"cronometro\": \"^1.1.4\",\n    \"http-querystring-stringify\": \"^2.1.0\",\n    \"qs\": \"^6.11.0\",\n    \"query-string\": \"^8.1.0\",\n    \"querystringify\": \"^2.2.0\",\n    \"querystringparser\": \"^0.1.1\",\n    \"rome\": \"11.0.0\",\n    \"simple-git\": \"^3.14.1\",\n    \"vitest\": \"^0.28.1\"\n  },\n  \"repository\": {\n    \"url\": \"git+https://github.com/anonrig/fast-querystring.git\",\n    \"type\": \"git\"\n  },\n  \"dependencies\": {\n    \"fast-decode-uri-component\": \"^1.0.1\"\n  }\n}\n/lib/internals/querystring.js\nX// This file is taken from Node.js project.\n// Full implementation can be found from https://github.com/nodejs/node/blob/main/lib/internal/querystring.js\n\nconst hexTable = Array.from(\n  { length: 256 },\n  (_, i) => \"%\" + ((i < 16 ? \"0\" : \"\") + i.toString(16)).toUpperCase(),\n);\n\n// These characters do not need escaping when generating query strings:\n// ! - . _ ~\n// ' ( ) *\n// digits\n// alpha (uppercase)\n// alpha (lowercase)\n// rome-ignore format: the array should not be formatted\nconst noEscape = new Int8Array([\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0 - 15\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 16 - 31\n  0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, // 32 - 47\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, // 48 - 63\n  0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 64 - 79\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, // 80 - 95\n  0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 96 - 111\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, // 112 - 127\n]);\n\n/**\n * @param {string} str\n * @returns {string}\n */\nfunction encodeString(str) {\n  const len = str.length;\n  if (len === 0) return \"\";\n\n  let out = \"\";\n  let lastPos = 0;\n  let i = 0;\n\n  outer: for (; i < len; i++) {\n    let c = str.charCodeAt(i);\n\n    // ASCII\n    while (c < 0x80) {\n      if (noEscape[c] !== 1) {\n        if (lastPos < i) out += str.slice(lastPos, i);\n        lastPos = i + 1;\n        out += hexTable[c];\n      }\n\n      if (++i === len) break outer;\n\n      c = str.charCodeAt(i);\n    }\n\n    if (lastPos < i) out += str.slice(lastPos, i);\n\n    // Multi-byte characters ...\n    if (c < 0x800) {\n      lastPos = i + 1;\n      out += hexTable[0xc0 | (c >> 6)] + hexTable[0x80 | (c & 0x3f)];\n      continue;\n    }\n    if (c < 0xd800 || c >= 0xe000) {\n      lastPos = i + 1;\n      out +=\n        hexTable[0xe0 | (c >> 12)] +\n        hexTable[0x80 | ((c >> 6) & 0x3f)] +\n        hexTable[0x80 | (c & 0x3f)];\n      continue;\n    }\n    // Surrogate pair\n    ++i;\n\n    // This branch should never happen because all URLSearchParams entries\n    // should already be converted to USVString. But, included for\n    // completion's sake anyway.\n    if (i >= len) {\n      throw new Error(\"URI malformed\");\n    }\n\n    const c2 = str.charCodeAt(i) & 0x3ff;\n\n    lastPos = i + 1;\n    c = 0x10000 + (((c & 0x3ff) << 10) | c2);\n    out +=\n      hexTable[0xf0 | (c >> 18)] +\n      hexTable[0x80 | ((c >> 12) & 0x3f)] +\n      hexTable[0x80 | ((c >> 6) & 0x3f)] +\n      hexTable[0x80 | (c & 0x3f)];\n  }\n  if (lastPos === 0) return str;\n  if (lastPos < len) return out + str.slice(lastPos);\n  return out;\n}\n\nmodule.exports = { encodeString };\n/lib/index.d.ts\u0001vtype FastQueryString = {\n  stringify(value: Record<string, any>): string;\n  parse(value: string): Record<string, any>;\n};\n\ndeclare namespace fastQueryString {\n  export function stringify(value: Record<string, any>): string;\n  export function parse(value: string): Record<string, any>;\n\n  const fqs: FastQueryString;\n  export { fqs as default };\n}\n\nexport = fastQueryString;\n/lib/index.js\u0001\"use strict\";\n\nconst parse = require(\"./parse\");\nconst stringify = require(\"./stringify\");\n\nconst fastQuerystring = {\n  parse,\n  stringify,\n};\n\n/**\n * Enable TS and JS support\n *\n * - `const qs = require('fast-querystring')`\n * - `import qs from 'fast-querystring'`\n */\nmodule.exports = fastQuerystring;\nmodule.exports.default = fastQuerystring;\nmodule.exports.parse = parse;\nmodule.exports.stringify = stringify;\n/README.md\u0016# fast-querystring\n\n![Test](https://github.com/anonrig/fast-querystring/workflows/test/badge.svg)\n[![codecov](https://codecov.io/gh/anonrig/fast-querystring/branch/main/graph/badge.svg?token=4ZDJA2BMOH)](https://codecov.io/gh/anonrig/fast-querystring)\n[![NPM version](https://img.shields.io/npm/v/fast-querystring.svg?style=flat)](https://www.npmjs.com/package/fast-querystring)\n\nFast query-string parser and stringifier to replace the legacy `node:querystring` module.\n\n### Installation\n\n```\nnpm i fast-querystring\n```\n\n### Features\n\n- Supports both `parse` and `stringify` methods from `node:querystring` module\n- Parsed object does not have prototype methods\n- Uses `&` separator as default\n- Supports only input of type `string`\n- Supports repeating keys in query string\n  - `foo=bar&foo=baz` parses into `{foo: ['bar', 'baz']}`\n- Supports pairs with missing values\n  - `foo=bar&hola` parses into `{foo: 'bar', hola: ''}`\n- Stringify does not support nested values (just like `node:querystring`)\n\n### Usage\n\n```javascript\nconst qs = require('fast-querystring')\n\n// Parsing a querystring\nconsole.log(qs.parse('hello=world&foo=bar&values=v1&values=v2'))\n// {\n//   hello: 'world',\n//   foo: 'bar',\n//   values: ['v1', 'v2']\n// }\n\n// Stringifying an object\nconsole.log(qs.stringify({ foo: ['bar', 'baz'] }))\n// 'foo=bar&foo=baz'\n```\n\n### Benchmark\n\n- Parsing a query-string\n\n```\n> node benchmark/parse.mjs\n\n╔═════════════════════════════════════════╤═════════╤═══════════════════╤═══════════╗\n║ Slower tests                            │ Samples │            Result │ Tolerance ║\n╟─────────────────────────────────────────┼─────────┼───────────────────┼───────────╢\n║ qs                                      │   10000 │  350884.75 op/sec │  ± 1.36 % ║\n║ query-string                            │   10000 │  383165.31 op/sec │  ± 1.22 % ║\n║ querystringify                          │    1500 │  530280.43 op/sec │  ± 0.90 % ║\n║ @aws-sdk/querystring-parser             │    2000 │  556657.27 op/sec │  ± 0.79 % ║\n║ URLSearchParams-with-Object.fromEntries │   10000 │  845766.67 op/sec │  ± 2.85 % ║\n║ URLSearchParams-with-construct          │   10000 │ 1158368.83 op/sec │  ± 4.28 % ║\n║ node:querystring                        │    2000 │ 1460476.58 op/sec │  ± 0.96 % ║\n║ querystringparser                       │   10000 │ 1976384.97 op/sec │  ± 4.11 % ║\n╟─────────────────────────────────────────┼─────────┼───────────────────┼───────────╢\n║ Fastest test                            │ Samples │            Result │ Tolerance ║\n╟─────────────────────────────────────────┼─────────┼───────────────────┼───────────╢\n║ fast-querystring                        │   10000 │ 2123713.08 op/sec │  ± 2.87 % ║\n╚═════════════════════════════════════════╧═════════╧═══════════════════╧═══════════╝\n```\n\n- Stringify a query-string\n\n```\n> node benchmark/stringify.mjs\n\n╔══════════════════════════════╤═════════╤═══════════════════╤═══════════╗\n║ Slower tests                 │ Samples │            Result │ Tolerance ║\n╟──────────────────────────────┼─────────┼───────────────────┼───────────╢\n║ query-string                 │   10000 │  310383.60 op/sec │  ± 1.14 % ║\n║ qs                           │   10000 │  354332.59 op/sec │  ± 1.23 % ║\n║ @aws-sdk/querystring-builder │   10000 │  411500.38 op/sec │  ± 1.30 % ║\n║ http-querystring-stringify   │    1500 │  535883.47 op/sec │  ± 1.00 % ║\n║ URLSearchParams              │   10000 │  594068.52 op/sec │  ± 1.61 % ║\n║ querystringparser            │   10000 │  766081.64 op/sec │  ± 2.18 % ║\n║ querystringify               │   10000 │  914083.38 op/sec │  ± 1.67 % ║\n║ node:querystring             │    4000 │ 1822536.85 op/sec │  ± 0.91 % ║\n╟──────────────────────────────┼─────────┼───────────────────┼───────────╢\n║ Fastest test                 │ Samples │            Result │ Tolerance ║\n╟──────────────────────────────┼─────────┼───────────────────┼───────────╢\n║ fast-querystring             │   10000 │ 2186435.62 op/sec │  ± 3.48 % ║\n╚══════════════════════════════╧═════════╧═══════════════════╧═══════════╝\n```\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/ZmFzdGlmeUA0LjE0LjE=",
    "content": "\u0001\u0016/test/wrapThenable.test.js\u0003\u0006'use strict'\n\nconst t = require('tap')\nconst test = t.test\nconst { kReplyHijacked } = require('../lib/symbols')\nconst wrapThenable = require('../lib/wrapThenable')\nconst Reply = require('../lib/reply')\n\ntest('should resolve immediately when reply[kReplyHijacked] is true', t => {\n  const reply = {}\n  reply[kReplyHijacked] = true\n  const thenable = Promise.resolve()\n  wrapThenable(thenable, reply)\n  t.end()\n})\n\ntest('should reject immediately when reply[kReplyHijacked] is true', t => {\n  t.plan(1)\n  const reply = new Reply({}, {}, {})\n  reply[kReplyHijacked] = true\n  reply.log = {\n    error: ({ err }) => {\n      t.equal(err.message, 'Reply sent already')\n    }\n  }\n\n  const thenable = Promise.reject(new Error('Reply sent already'))\n  wrapThenable(thenable, reply)\n})\n/test/internals/plugin.test.js\u000e'use strict'\n\nconst t = require('tap')\nconst test = t.test\n\nconst pluginUtilsPublic = require('../../lib/pluginUtils.js')\nconst symbols = require('../../lib/symbols.js')\nconst pluginUtils = require('../../lib/pluginUtils')[symbols.kTestInternals]\n\ntest(\"shouldSkipOverride should check the 'skip-override' symbol\", t => {\n  t.plan(2)\n\n  yes[Symbol.for('skip-override')] = true\n\n  t.ok(pluginUtils.shouldSkipOverride(yes))\n  t.notOk(pluginUtils.shouldSkipOverride(no))\n\n  function yes () {}\n  function no () {}\n})\n\ntest('getPluginName should return plugin name if the file is cached', t => {\n  t.plan(1)\n  const expectedPluginName = 'example'\n  const fn = () => console.log('is just an example')\n  require.cache[expectedPluginName] = { exports: fn }\n  const pluginName = pluginUtilsPublic.getPluginName(fn)\n\n  t.equal(pluginName, expectedPluginName)\n})\n\ntest(\"getMeta should return the object stored with the 'plugin-meta' symbol\", t => {\n  t.plan(1)\n\n  const meta = { hello: 'world' }\n  fn[Symbol.for('plugin-meta')] = meta\n\n  t.same(meta, pluginUtils.getMeta(fn))\n\n  function fn () {}\n})\n\ntest('checkDecorators should check if the given decorator is present in the instance', t => {\n  t.plan(1)\n\n  fn[Symbol.for('plugin-meta')] = {\n    decorators: {\n      fastify: ['plugin'],\n      reply: ['plugin'],\n      request: ['plugin']\n    }\n  }\n\n  function context () {}\n  context.plugin = true\n  context[symbols.kReply] = { prototype: { plugin: true }, props: [] }\n  context[symbols.kRequest] = { prototype: { plugin: true }, props: [] }\n\n  try {\n    pluginUtils.checkDecorators.call(context, fn)\n    t.pass('Everything ok')\n  } catch (err) {\n    t.fail(err)\n  }\n\n  function fn () {}\n})\n\ntest('checkDecorators should check if the given decorator is present in the instance (errored)', t => {\n  t.plan(1)\n\n  fn[Symbol.for('plugin-meta')] = {\n    decorators: {\n      fastify: ['plugin'],\n      reply: ['plugin'],\n      request: ['plugin']\n    }\n  }\n\n  function context () {}\n  context.plugin = true\n  context[symbols.kReply] = { prototype: { plugin: true }, props: [] }\n  context[symbols.kRequest] = { prototype: {}, props: [] }\n\n  try {\n    pluginUtils.checkDecorators.call(context, fn)\n    t.fail('should throw')\n  } catch (err) {\n    t.equal(err.message, \"The decorator 'plugin' is not present in Request\")\n  }\n\n  function fn () {}\n})\n\ntest('checkDecorators should accept optional decorators', t => {\n  t.plan(1)\n\n  fn[Symbol.for('plugin-meta')] = {\n    decorators: { }\n  }\n\n  function context () {}\n  context.plugin = true\n  context[symbols.kReply] = { prototype: { plugin: true } }\n  context[symbols.kRequest] = { prototype: { plugin: true } }\n\n  try {\n    pluginUtils.checkDecorators.call(context, fn)\n    t.pass('Everything ok')\n  } catch (err) {\n    t.fail(err)\n  }\n\n  function fn () {}\n})\n\ntest('checkDependencies should check if the given dependency is present in the instance', t => {\n  t.plan(1)\n\n  fn[Symbol.for('plugin-meta')] = {\n    dependencies: ['plugin']\n  }\n\n  function context () {}\n  context[pluginUtilsPublic.registeredPlugins] = ['plugin']\n\n  try {\n    pluginUtils.checkDependencies.call(context, fn)\n    t.pass('Everything ok')\n  } catch (err) {\n    t.fail(err)\n  }\n\n  function fn () {}\n})\n\ntest('checkDependencies should check if the given dependency is present in the instance (errored)', t => {\n  t.plan(1)\n\n  fn[Symbol.for('plugin-meta')] = {\n    name: 'test-plugin',\n    dependencies: ['plugin']\n  }\n\n  function context () {}\n  context[pluginUtilsPublic.registeredPlugins] = []\n\n  try {\n    pluginUtils.checkDependencies.call(context, fn)\n    t.fail('should throw')\n  } catch (err) {\n    t.equal(err.message, \"The dependency 'plugin' of plugin 'test-plugin' is not registered\")\n  }\n\n  function fn () {}\n})\n/test/404s.test.jsž\u0005'use strict'\n\nconst t = require('tap')\nconst test = t.test\nconst fp = require('fastify-plugin')\nconst sget = require('simple-get').concat\nconst errors = require('http-errors')\nconst split = require('split2')\nconst FormData = require('form-data')\nconst Fastify = require('..')\n\nfunction getUrl (app) {\n  const { address, port } = app.server.address()\n  if (address === '::1') {\n    return `http://[${address}]:${port}`\n  } else {\n    return `http://${address}:${port}`\n  }\n}\n\ntest('default 404', t => {\n  t.plan(5)\n\n  const test = t.test\n  const fastify = Fastify()\n\n  fastify.get('/', function (req, reply) {\n    reply.send({ hello: 'world' })\n  })\n\n  t.teardown(fastify.close.bind(fastify))\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n\n    test('unsupported method', t => {\n      t.plan(3)\n      sget({\n        method: 'PUT',\n        url: getUrl(fastify),\n        body: {},\n        json: true\n      }, (err, response, body) => {\n        t.error(err)\n        t.equal(response.statusCode, 404)\n        t.equal(response.headers['content-type'], 'application/json; charset=utf-8')\n      })\n    })\n\n    // Return 404 instead of 405 see https://github.com/fastify/fastify/pull/862 for discussion\n    test('framework-unsupported method', t => {\n      t.plan(3)\n      sget({\n        method: 'PROPFIND',\n        url: getUrl(fastify),\n        body: {},\n        json: true\n      }, (err, response, body) => {\n        t.error(err)\n        t.equal(response.statusCode, 404)\n        t.equal(response.headers['content-type'], 'application/json; charset=utf-8')\n      })\n    })\n\n    test('unsupported route', t => {\n      t.plan(3)\n      sget({\n        method: 'GET',\n        url: getUrl(fastify) + '/notSupported',\n        body: {},\n        json: true\n      }, (err, response, body) => {\n        t.error(err)\n        t.equal(response.statusCode, 404)\n        t.equal(response.headers['content-type'], 'application/json; charset=utf-8')\n      })\n    })\n\n    test('using post method and multipart/formdata', t => {\n      t.plan(3)\n      const form = FormData()\n      form.append('test-field', 'just some field')\n\n      sget({\n        method: 'POST',\n        url: getUrl(fastify) + '/notSupported',\n        body: form,\n        json: false\n      }, (err, response, body) => {\n        t.error(err)\n        t.equal(response.statusCode, 404)\n        t.equal(response.headers['content-type'], 'application/json; charset=utf-8')\n      })\n    })\n  })\n})\n\ntest('customized 404', t => {\n  t.plan(6)\n\n  const test = t.test\n  const fastify = Fastify()\n\n  fastify.get('/', function (req, reply) {\n    reply.send({ hello: 'world' })\n  })\n\n  fastify.get('/with-error', function (req, reply) {\n    reply.send(new errors.NotFound())\n  })\n\n  fastify.get('/with-error-custom-header', function (req, reply) {\n    const err = new errors.NotFound()\n    err.headers = { 'x-foo': 'bar' }\n    reply.send(err)\n  })\n\n  fastify.setNotFoundHandler(function (req, reply) {\n    reply.code(404).send('this was not found')\n  })\n\n  t.teardown(fastify.close.bind(fastify))\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n\n    test('unsupported method', t => {\n      t.plan(3)\n      sget({\n        method: 'PUT',\n        url: getUrl(fastify),\n        body: JSON.stringify({ hello: 'world' }),\n        headers: { 'Content-Type': 'application/json' }\n      }, (err, response, body) => {\n        t.error(err)\n        t.equal(response.statusCode, 404)\n        t.equal(body.toString(), 'this was not found')\n      })\n    })\n\n    test('framework-unsupported method', t => {\n      t.plan(3)\n      sget({\n        method: 'PROPFIND',\n        url: getUrl(fastify),\n        body: JSON.stringify({ hello: 'world' }),\n        headers: { 'Content-Type': 'application/json' }\n      }, (err, response, body) => {\n        t.error(err)\n        t.equal(response.statusCode, 404)\n        t.equal(body.toString(), 'this was not found')\n      })\n    })\n\n    test('unsupported route', t => {\n      t.plan(3)\n      sget({\n        method: 'GET',\n        url: getUrl(fastify) + '/notSupported'\n      }, (err, response, body) => {\n        t.error(err)\n        t.equal(response.statusCode, 404)\n        t.equal(body.toString(), 'this was not found')\n      })\n    })\n\n    test('with error object', t => {\n      t.plan(3)\n      sget({\n        method: 'GET',\n        url: getUrl(fastify) + '/with-error'\n      }, (err, response, body) => {\n        t.error(err)\n        t.equal(response.statusCode, 404)\n        t.same(JSON.parse(body), {\n          error: 'Not Found',\n          message: 'Not Found',\n          statusCode: 404\n        })\n      })\n    })\n\n    test('error object with headers property', t => {\n      t.plan(4)\n      sget({\n        method: 'GET',\n        url: getUrl(fastify) + '/with-error-custom-header'\n      }, (err, response, body) => {\n        t.error(err)\n        t.equal(response.statusCode, 404)\n        t.equal(response.headers['x-foo'], 'bar')\n        t.same(JSON.parse(body), {\n          error: 'Not Found',\n          message: 'Not Found',\n          statusCode: 404\n        })\n      })\n    })\n  })\n})\n\ntest('custom header in notFound handler', t => {\n  t.plan(2)\n\n  const test = t.test\n  const fastify = Fastify()\n\n  fastify.setNotFoundHandler(function (req, reply) {\n    reply.code(404).header('x-foo', 'bar').send('this was not found')\n  })\n\n  t.teardown(fastify.close.bind(fastify))\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n\n    test('not found with custom header', t => {\n      t.plan(4)\n      sget({\n        method: 'GET',\n        url: getUrl(fastify) + '/notSupported'\n      }, (err, response, body) => {\n        t.error(err)\n        t.equal(response.statusCode, 404)\n        t.equal(response.headers['x-foo'], 'bar')\n        t.equal(body.toString(), 'this was not found')\n      })\n    })\n  })\n})\n\ntest('setting a custom 404 handler multiple times is an error', t => {\n  t.plan(5)\n\n  t.test('at the root level', t => {\n    t.plan(2)\n\n    const fastify = Fastify()\n\n    fastify.setNotFoundHandler(() => {})\n\n    try {\n      fastify.setNotFoundHandler(() => {})\n      t.fail('setting multiple 404 handlers at the same prefix encapsulation level should throw')\n    } catch (err) {\n      t.type(err, Error)\n      t.equal(err.message, 'Not found handler already set for Fastify instance with prefix: \\'/\\'')\n    }\n  })\n\n  t.test('at the plugin level', t => {\n    t.plan(3)\n\n    const fastify = Fastify()\n\n    fastify.register((instance, options, done) => {\n      instance.setNotFoundHandler(() => {})\n\n      try {\n        instance.setNotFoundHandler(() => {})\n        t.fail('setting multiple 404 handlers at the same prefix encapsulation level should throw')\n      } catch (err) {\n        t.type(err, Error)\n        t.equal(err.message, 'Not found handler already set for Fastify instance with prefix: \\'/prefix\\'')\n      }\n\n      done()\n    }, { prefix: '/prefix' })\n\n    fastify.listen({ port: 0 }, err => {\n      t.error(err)\n      fastify.close()\n    })\n  })\n\n  t.test('at multiple levels', t => {\n    t.plan(3)\n\n    const fastify = Fastify()\n\n    fastify.register((instance, options, done) => {\n      try {\n        instance.setNotFoundHandler(() => {})\n        t.fail('setting multiple 404 handlers at the same prefix encapsulation level should throw')\n      } catch (err) {\n        t.type(err, Error)\n        t.equal(err.message, 'Not found handler already set for Fastify instance with prefix: \\'/\\'')\n      }\n      done()\n    })\n\n    fastify.setNotFoundHandler(() => {})\n\n    fastify.listen({ port: 0 }, err => {\n      t.error(err)\n      fastify.close()\n    })\n  })\n\n  t.test('at multiple levels / 2', t => {\n    t.plan(3)\n\n    const fastify = Fastify()\n\n    fastify.register((instance, options, done) => {\n      instance.setNotFoundHandler(() => {})\n\n      instance.register((instance2, options, done) => {\n        try {\n          instance2.setNotFoundHandler(() => {})\n          t.fail('setting multiple 404 handlers at the same prefix encapsulation level should throw')\n        } catch (err) {\n          t.type(err, Error)\n          t.equal(err.message, 'Not found handler already set for Fastify instance with prefix: \\'/prefix\\'')\n        }\n        done()\n      })\n\n      done()\n    }, { prefix: '/prefix' })\n\n    fastify.setNotFoundHandler(() => {})\n\n    fastify.listen({ port: 0 }, err => {\n      t.error(err)\n      fastify.close()\n    })\n  })\n\n  t.test('in separate plugins at the same level', t => {\n    t.plan(3)\n\n    const fastify = Fastify()\n\n    fastify.register((instance, options, done) => {\n      instance.register((instance2A, options, done) => {\n        instance2A.setNotFoundHandler(() => {})\n        done()\n      })\n\n      instance.register((instance2B, options, done) => {\n        try {\n          instance2B.setNotFoundHandler(() => {})\n          t.fail('setting multiple 404 handlers at the same prefix encapsulation level should throw')\n        } catch (err) {\n          t.type(err, Error)\n          t.equal(err.message, 'Not found handler already set for Fastify instance with prefix: \\'/prefix\\'')\n        }\n        done()\n      })\n\n      done()\n    }, { prefix: '/prefix' })\n\n    fastify.setNotFoundHandler(() => {})\n\n    fastify.listen({ port: 0 }, err => {\n      t.error(err)\n      fastify.close()\n    })\n  })\n})\n\ntest('encapsulated 404', t => {\n  t.plan(13)\n\n  const test = t.test\n  const fastify = Fastify()\n\n  fastify.get('/', function (req, reply) {\n    reply.send({ hello: 'world' })\n  })\n\n  fastify.setNotFoundHandler(function (req, reply) {\n    reply.code(404).send('this was not found')\n  })\n\n  fastify.register(function (f, opts, done) {\n    f.setNotFoundHandler(function (req, reply) {\n      reply.code(404).send('this was not found 2')\n    })\n    done()\n  }, { prefix: '/test' })\n\n  fastify.register(function (f, opts, done) {\n    f.setNotFoundHandler(function (req, reply) {\n      reply.code(404).send('this was not found 3')\n    })\n    done()\n  }, { prefix: '/test2' })\n\n  fastify.register(function (f, opts, done) {\n    f.setNotFoundHandler(function (request, reply) {\n      reply.code(404).send('this was not found 4')\n    })\n    done()\n  }, { prefix: '/test3/' })\n\n  t.teardown(fastify.close.bind(fastify))\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n\n    test('root unsupported method', t => {\n      t.plan(3)\n      sget({\n        method: 'PUT',\n        url: getUrl(fastify),\n        body: JSON.stringify({ hello: 'world' }),\n        headers: { 'Content-Type': 'application/json' }\n      }, (err, response, body) => {\n        t.error(err)\n        t.equal(response.statusCode, 404)\n        t.equal(body.toString(), 'this was not found')\n      })\n    })\n\n    test('root framework-unsupported method', t => {\n      t.plan(3)\n      sget({\n        method: 'PROPFIND',\n        url: getUrl(fastify),\n        body: JSON.stringify({ hello: 'world' }),\n        headers: { 'Content-Type': 'application/json' }\n      }, (err, response, body) => {\n        t.error(err)\n        t.equal(response.statusCode, 404)\n        t.equal(body.toString(), 'this was not found')\n      })\n    })\n\n    test('root unsupported route', t => {\n      t.plan(3)\n      sget({\n        method: 'GET',\n        url: getUrl(fastify) + '/notSupported'\n      }, (err, response, body) => {\n        t.error(err)\n        t.equal(response.statusCode, 404)\n        t.equal(body.toString(), 'this was not found')\n      })\n    })\n\n    test('unsupported method', t => {\n      t.plan(3)\n      sget({\n        method: 'PUT',\n        url: getUrl(fastify) + '/test',\n        body: JSON.stringify({ hello: 'world' }),\n        headers: { 'Content-Type': 'application/json' }\n      }, (err, response, body) => {\n        t.error(err)\n        t.equal(response.statusCode, 404)\n        t.equal(body.toString(), 'this was not found 2')\n      })\n    })\n\n    test('framework-unsupported method', t => {\n      t.plan(3)\n      sget({\n        method: 'PROPFIND',\n        url: getUrl(fastify) + '/test',\n        body: JSON.stringify({ hello: 'world' }),\n        headers: { 'Content-Type': 'application/json' }\n      }, (err, response, body) => {\n        t.error(err)\n        t.equal(response.statusCode, 404)\n        t.equal(body.toString(), 'this was not found 2')\n      })\n    })\n\n    test('unsupported route', t => {\n      t.plan(3)\n      sget({\n        method: 'GET',\n        url: getUrl(fastify) + '/test/notSupported'\n      }, (err, response, body) => {\n        t.error(err)\n        t.equal(response.statusCode, 404)\n        t.equal(body.toString(), 'this was not found 2')\n      })\n    })\n\n    test('unsupported method 2', t => {\n      t.plan(3)\n      sget({\n        method: 'PUT',\n        url: getUrl(fastify) + '/test2',\n        body: JSON.stringify({ hello: 'world' }),\n        headers: { 'Content-Type': 'application/json' }\n      }, (err, response, body) => {\n        t.error(err)\n        t.equal(response.statusCode, 404)\n        t.equal(body.toString(), 'this was not found 3')\n      })\n    })\n\n    test('framework-unsupported method 2', t => {\n      t.plan(3)\n      sget({\n        method: 'PROPFIND',\n        url: getUrl(fastify) + '/test2',\n        body: JSON.stringify({ hello: 'world' }),\n        headers: { 'Content-Type': 'application/json' }\n      }, (err, response, body) => {\n        t.error(err)\n        t.equal(response.statusCode, 404)\n        t.equal(body.toString(), 'this was not found 3')\n      })\n    })\n\n    test('unsupported route 2', t => {\n      t.plan(3)\n      sget({\n        method: 'GET',\n        url: getUrl(fastify) + '/test2/notSupported'\n      }, (err, response, body) => {\n        t.error(err)\n        t.equal(response.statusCode, 404)\n        t.equal(body.toString(), 'this was not found 3')\n      })\n    })\n\n    test('unsupported method 3', t => {\n      t.plan(3)\n      sget({\n        method: 'PUT',\n        url: getUrl(fastify) + '/test3/',\n        body: JSON.stringify({ hello: 'world' }),\n        headers: { 'Content-Type': 'application/json' }\n      }, (err, response, body) => {\n        t.error(err)\n        t.equal(response.statusCode, 404)\n        t.equal(body.toString(), 'this was not found 4')\n      })\n    })\n\n    test('framework-unsupported method 3', t => {\n      t.plan(3)\n      sget({\n        method: 'PROPFIND',\n        url: getUrl(fastify) + '/test3/',\n        body: JSON.stringify({ hello: 'world' }),\n        headers: { 'Content-Type': 'application/json' }\n      }, (err, response, body) => {\n        t.error(err)\n        t.equal(response.statusCode, 404)\n        t.equal(body.toString(), 'this was not found 4')\n      })\n    })\n\n    test('unsupported route 3', t => {\n      t.plan(3)\n      sget({\n        method: 'GET',\n        url: getUrl(fastify) + '/test3/notSupported'\n      }, (err, response, body) => {\n        t.error(err)\n        t.equal(response.statusCode, 404)\n        t.equal(body.toString(), 'this was not found 4')\n      })\n    })\n  })\n})\n\ntest('custom 404 hook and handler context', t => {\n  t.plan(21)\n\n  const fastify = Fastify()\n\n  fastify.decorate('foo', 42)\n\n  fastify.addHook('onRequest', function (req, res, done) {\n    t.equal(this.foo, 42)\n    done()\n  })\n  fastify.addHook('preHandler', function (request, reply, done) {\n    t.equal(this.foo, 42)\n    done()\n  })\n  fastify.addHook('onSend', function (request, reply, payload, done) {\n    t.equal(this.foo, 42)\n    done()\n  })\n  fastify.addHook('onResponse', function (request, reply, done) {\n    t.equal(this.foo, 42)\n    done()\n  })\n\n  fastify.setNotFoundHandler(function (req, reply) {\n    t.equal(this.foo, 42)\n    reply.code(404).send('this was not found')\n  })\n\n  fastify.register(function (instance, opts, done) {\n    instance.decorate('bar', 84)\n\n    instance.addHook('onRequest', function (req, res, done) {\n      t.equal(this.bar, 84)\n      done()\n    })\n    instance.addHook('preHandler', function (request, reply, done) {\n      t.equal(this.bar, 84)\n      done()\n    })\n    instance.addHook('onSend', function (request, reply, payload, done) {\n      t.equal(this.bar, 84)\n      done()\n    })\n    instance.addHook('onResponse', function (request, reply, done) {\n      t.equal(this.bar, 84)\n      done()\n    })\n\n    instance.setNotFoundHandler(function (req, reply) {\n      t.equal(this.foo, 42)\n      t.equal(this.bar, 84)\n      reply.code(404).send('encapsulated was not found')\n    })\n\n    done()\n  }, { prefix: '/encapsulated' })\n\n  fastify.inject('/not-found', (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 404)\n    t.equal(res.payload, 'this was not found')\n  })\n\n  fastify.inject('/encapsulated/not-found', (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 404)\n    t.equal(res.payload, 'encapsulated was not found')\n  })\n})\n\ntest('encapsulated custom 404 without - prefix hook and handler context', t => {\n  t.plan(13)\n\n  const fastify = Fastify()\n\n  fastify.decorate('foo', 42)\n\n  fastify.register(function (instance, opts, done) {\n    instance.decorate('bar', 84)\n\n    instance.addHook('onRequest', function (req, res, done) {\n      t.equal(this.foo, 42)\n      t.equal(this.bar, 84)\n      done()\n    })\n    instance.addHook('preHandler', function (request, reply, done) {\n      t.equal(this.foo, 42)\n      t.equal(this.bar, 84)\n      done()\n    })\n    instance.addHook('onSend', function (request, reply, payload, done) {\n      t.equal(this.foo, 42)\n      t.equal(this.bar, 84)\n      done()\n    })\n    instance.addHook('onResponse', function (request, reply, done) {\n      t.equal(this.foo, 42)\n      t.equal(this.bar, 84)\n      done()\n    })\n\n    instance.setNotFoundHandler(function (request, reply) {\n      t.equal(this.foo, 42)\n      t.equal(this.bar, 84)\n      reply.code(404).send('custom not found')\n    })\n\n    done()\n  })\n\n  fastify.inject('/not-found', (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 404)\n    t.equal(res.payload, 'custom not found')\n  })\n})\n\ntest('run hooks on default 404', t => {\n  t.plan(7)\n\n  const fastify = Fastify()\n\n  fastify.addHook('onRequest', function (req, res, done) {\n    t.pass('onRequest called')\n    done()\n  })\n\n  fastify.addHook('preHandler', function (request, reply, done) {\n    t.pass('preHandler called')\n    done()\n  })\n\n  fastify.addHook('onSend', function (request, reply, payload, done) {\n    t.pass('onSend called')\n    done()\n  })\n\n  fastify.addHook('onResponse', function (request, reply, done) {\n    t.pass('onResponse called')\n    done()\n  })\n\n  fastify.get('/', function (req, reply) {\n    reply.send({ hello: 'world' })\n  })\n\n  t.teardown(fastify.close.bind(fastify))\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n\n    sget({\n      method: 'PUT',\n      url: getUrl(fastify),\n      body: JSON.stringify({ hello: 'world' }),\n      headers: { 'Content-Type': 'application/json' }\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 404)\n    })\n  })\n})\n\ntest('run non-encapsulated plugin hooks on default 404', t => {\n  t.plan(6)\n\n  const fastify = Fastify()\n\n  fastify.register(fp(function (instance, options, done) {\n    instance.addHook('onRequest', function (req, res, done) {\n      t.pass('onRequest called')\n      done()\n    })\n\n    instance.addHook('preHandler', function (request, reply, done) {\n      t.pass('preHandler called')\n      done()\n    })\n\n    instance.addHook('onSend', function (request, reply, payload, done) {\n      t.pass('onSend called')\n      done()\n    })\n\n    instance.addHook('onResponse', function (request, reply, done) {\n      t.pass('onResponse called')\n      done()\n    })\n\n    done()\n  }))\n\n  fastify.get('/', function (req, reply) {\n    reply.send({ hello: 'world' })\n  })\n\n  fastify.inject({\n    method: 'POST',\n    url: '/',\n    payload: { hello: 'world' }\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 404)\n  })\n})\n\ntest('run non-encapsulated plugin hooks on custom 404', t => {\n  t.plan(11)\n\n  const fastify = Fastify()\n\n  const plugin = fp((instance, opts, done) => {\n    instance.addHook('onRequest', function (req, res, done) {\n      t.pass('onRequest called')\n      done()\n    })\n\n    instance.addHook('preHandler', function (request, reply, done) {\n      t.pass('preHandler called')\n      done()\n    })\n\n    instance.addHook('onSend', function (request, reply, payload, done) {\n      t.pass('onSend called')\n      done()\n    })\n\n    instance.addHook('onResponse', function (request, reply, done) {\n      t.pass('onResponse called')\n      done()\n    })\n\n    done()\n  })\n\n  fastify.register(plugin)\n\n  fastify.get('/', function (req, reply) {\n    reply.send({ hello: 'world' })\n  })\n\n  fastify.setNotFoundHandler(function (req, reply) {\n    reply.code(404).send('this was not found')\n  })\n\n  fastify.register(plugin) // Registering plugin after handler also works\n\n  fastify.inject({ url: '/not-found' }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 404)\n    t.equal(res.payload, 'this was not found')\n  })\n})\n\ntest('run hook with encapsulated 404', t => {\n  t.plan(11)\n\n  const fastify = Fastify()\n\n  fastify.addHook('onRequest', function (req, res, done) {\n    t.pass('onRequest called')\n    done()\n  })\n\n  fastify.addHook('preHandler', function (request, reply, done) {\n    t.pass('preHandler called')\n    done()\n  })\n\n  fastify.addHook('onSend', function (request, reply, payload, done) {\n    t.pass('onSend called')\n    done()\n  })\n\n  fastify.addHook('onResponse', function (request, reply, done) {\n    t.pass('onResponse called')\n    done()\n  })\n\n  fastify.register(function (f, opts, done) {\n    f.setNotFoundHandler(function (req, reply) {\n      reply.code(404).send('this was not found 2')\n    })\n\n    f.addHook('onRequest', function (req, res, done) {\n      t.pass('onRequest 2 called')\n      done()\n    })\n\n    f.addHook('preHandler', function (request, reply, done) {\n      t.pass('preHandler 2 called')\n      done()\n    })\n\n    f.addHook('onSend', function (request, reply, payload, done) {\n      t.pass('onSend 2 called')\n      done()\n    })\n\n    f.addHook('onResponse', function (request, reply, done) {\n      t.pass('onResponse 2 called')\n      done()\n    })\n\n    done()\n  }, { prefix: '/test' })\n\n  t.teardown(fastify.close.bind(fastify))\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n\n    sget({\n      method: 'PUT',\n      url: getUrl(fastify) + '/test',\n      body: JSON.stringify({ hello: 'world' }),\n      headers: { 'Content-Type': 'application/json' }\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 404)\n    })\n  })\n})\n\ntest('run hook with encapsulated 404 and framework-unsupported method', t => {\n  t.plan(11)\n\n  const fastify = Fastify()\n\n  fastify.addHook('onRequest', function (req, res, done) {\n    t.pass('onRequest called')\n    done()\n  })\n\n  fastify.addHook('preHandler', function (request, reply, done) {\n    t.pass('preHandler called')\n    done()\n  })\n\n  fastify.addHook('onSend', function (request, reply, payload, done) {\n    t.pass('onSend called')\n    done()\n  })\n\n  fastify.addHook('onResponse', function (request, reply, done) {\n    t.pass('onResponse called')\n    done()\n  })\n\n  fastify.register(function (f, opts, done) {\n    f.setNotFoundHandler(function (req, reply) {\n      reply.code(404).send('this was not found 2')\n    })\n\n    f.addHook('onRequest', function (req, res, done) {\n      t.pass('onRequest 2 called')\n      done()\n    })\n\n    f.addHook('preHandler', function (request, reply, done) {\n      t.pass('preHandler 2 called')\n      done()\n    })\n\n    f.addHook('onSend', function (request, reply, payload, done) {\n      t.pass('onSend 2 called')\n      done()\n    })\n\n    f.addHook('onResponse', function (request, reply, done) {\n      t.pass('onResponse 2 called')\n      done()\n    })\n\n    done()\n  }, { prefix: '/test' })\n\n  t.teardown(fastify.close.bind(fastify))\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n\n    sget({\n      method: 'PROPFIND',\n      url: getUrl(fastify) + '/test',\n      body: JSON.stringify({ hello: 'world' }),\n      headers: { 'Content-Type': 'application/json' }\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 404)\n    })\n  })\n})\n\ntest('hooks check 404', t => {\n  t.plan(13)\n\n  const fastify = Fastify()\n\n  fastify.get('/', function (req, reply) {\n    reply.send({ hello: 'world' })\n  })\n\n  fastify.addHook('onSend', (req, reply, payload, done) => {\n    t.same(req.query, { foo: 'asd' })\n    t.ok('called', 'onSend')\n    done()\n  })\n  fastify.addHook('onRequest', (req, res, done) => {\n    t.ok('called', 'onRequest')\n    done()\n  })\n  fastify.addHook('onResponse', (request, reply, done) => {\n    t.ok('called', 'onResponse')\n    done()\n  })\n\n  t.teardown(fastify.close.bind(fastify))\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n\n    sget({\n      method: 'PUT',\n      url: getUrl(fastify) + '?foo=asd',\n      body: JSON.stringify({ hello: 'world' }),\n      headers: { 'Content-Type': 'application/json' }\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 404)\n    })\n\n    sget({\n      method: 'GET',\n      url: getUrl(fastify) + '/notSupported?foo=asd'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 404)\n    })\n  })\n})\n\ntest('setNotFoundHandler should not suppress duplicated routes checking', t => {\n  t.plan(1)\n\n  const fastify = Fastify()\n\n  try {\n    fastify.get('/', function (req, reply) {\n      reply.send({ hello: 'world' })\n    })\n    fastify.get('/', function (req, reply) {\n      reply.send({ hello: 'world' })\n    })\n    fastify.setNotFoundHandler(function (req, reply) {\n      reply.code(404).send('this was not found')\n    })\n\n    t.fail('setNotFoundHandler should not interfere duplicated route error')\n  } catch (error) {\n    t.ok(error)\n  }\n})\n\ntest('log debug for 404', t => {\n  t.plan(1)\n\n  const Writable = require('stream').Writable\n\n  const logStream = new Writable()\n  logStream.logs = []\n  logStream._write = function (chunk, encoding, callback) {\n    this.logs.push(chunk.toString())\n    callback()\n  }\n\n  const fastify = Fastify({\n    logger: {\n      level: 'trace',\n      stream: logStream\n    }\n  })\n\n  fastify.get('/', function (req, reply) {\n    reply.send({ hello: 'world' })\n  })\n\n  t.teardown(fastify.close.bind(fastify))\n\n  t.test('log debug', t => {\n    t.plan(7)\n    fastify.inject({\n      method: 'GET',\n      url: '/not-found'\n    }, (err, response) => {\n      t.error(err)\n      t.equal(response.statusCode, 404)\n\n      const INFO_LEVEL = 30\n      t.equal(JSON.parse(logStream.logs[0]).msg, 'incoming request')\n      t.equal(JSON.parse(logStream.logs[1]).msg, 'Route GET:/not-found not found')\n      t.equal(JSON.parse(logStream.logs[1]).level, INFO_LEVEL)\n      t.equal(JSON.parse(logStream.logs[2]).msg, 'request completed')\n      t.equal(logStream.logs.length, 3)\n    })\n  })\n})\n\ntest('Unknown method', t => {\n  t.plan(5)\n\n  const fastify = Fastify()\n\n  fastify.get('/', function (req, reply) {\n    reply.send({ hello: 'world' })\n  })\n\n  t.teardown(fastify.close.bind(fastify))\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n\n    const handler = () => {}\n    // See https://github.com/fastify/light-my-request/pull/20\n    t.throws(() => fastify.inject({\n      method: 'UNKNWON_METHOD',\n      url: '/'\n    }, handler), Error)\n\n    sget({\n      method: 'UNKNWON_METHOD',\n      url: getUrl(fastify)\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 400)\n      t.strictSame(JSON.parse(body), {\n        error: 'Bad Request',\n        message: 'Client Error',\n        statusCode: 400\n      })\n    })\n  })\n})\n\ntest('recognizes errors from the http-errors module', t => {\n  t.plan(5)\n\n  const fastify = Fastify()\n\n  fastify.get('/', function (req, reply) {\n    reply.send(new errors.NotFound())\n  })\n\n  t.teardown(fastify.close.bind(fastify))\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n\n    fastify.inject({\n      method: 'GET',\n      url: '/'\n    }, (err, res) => {\n      t.error(err)\n      t.equal(res.statusCode, 404)\n\n      sget(getUrl(fastify), (err, response, body) => {\n        t.error(err)\n        const obj = JSON.parse(body.toString())\n        t.strictSame(obj, {\n          error: 'Not Found',\n          message: 'Not Found',\n          statusCode: 404\n        })\n      })\n    })\n  })\n})\n\ntest('the default 404 handler can be invoked inside a prefixed plugin', t => {\n  t.plan(3)\n\n  const fastify = Fastify()\n\n  fastify.register(function (instance, opts, done) {\n    instance.get('/path', function (request, reply) {\n      reply.send(new errors.NotFound())\n    })\n\n    done()\n  }, { prefix: '/v1' })\n\n  fastify.inject('/v1/path', (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 404)\n    t.strictSame(JSON.parse(res.payload), {\n      error: 'Not Found',\n      message: 'Not Found',\n      statusCode: 404\n    })\n  })\n})\n\ntest('an inherited custom 404 handler can be invoked inside a prefixed plugin', t => {\n  t.plan(3)\n\n  const fastify = Fastify()\n\n  fastify.setNotFoundHandler(function (request, reply) {\n    reply.code(404).send('custom handler')\n  })\n\n  fastify.register(function (instance, opts, done) {\n    instance.get('/path', function (request, reply) {\n      reply.send(new errors.NotFound())\n    })\n\n    done()\n  }, { prefix: '/v1' })\n\n  fastify.inject('/v1/path', (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 404)\n    t.same(JSON.parse(res.payload), {\n      error: 'Not Found',\n      message: 'Not Found',\n      statusCode: 404\n    })\n  })\n})\n\ntest('encapsulated custom 404 handler without a prefix is the handler for the entire 404 level', t => {\n  t.plan(6)\n\n  const fastify = Fastify()\n\n  fastify.register(function (instance, opts, done) {\n    instance.setNotFoundHandler(function (request, reply) {\n      reply.code(404).send('custom handler')\n    })\n\n    done()\n  })\n\n  fastify.register(function (instance, opts, done) {\n    instance.register(function (instance2, opts, done) {\n      instance2.setNotFoundHandler(function (request, reply) {\n        reply.code(404).send('custom handler 2')\n      })\n      done()\n    })\n\n    done()\n  }, { prefix: 'prefixed' })\n\n  fastify.inject('/not-found', (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 404)\n    t.equal(res.payload, 'custom handler')\n  })\n\n  fastify.inject('/prefixed/not-found', (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 404)\n    t.equal(res.payload, 'custom handler 2')\n  })\n})\n\ntest('cannot set notFoundHandler after binding', t => {\n  t.plan(2)\n\n  const fastify = Fastify()\n  t.teardown(fastify.close.bind(fastify))\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n\n    try {\n      fastify.setNotFoundHandler(() => { })\n      t.fail()\n    } catch (e) {\n      t.pass()\n    }\n  })\n})\n\ntest('404 inside onSend', t => {\n  t.plan(3)\n\n  const fastify = Fastify()\n\n  let called = false\n\n  fastify.get('/', function (req, reply) {\n    reply.send({ hello: 'world' })\n  })\n\n  fastify.addHook('onSend', function (request, reply, payload, done) {\n    if (!called) {\n      called = true\n      done(new errors.NotFound())\n    } else {\n      done()\n    }\n  })\n\n  t.teardown(fastify.close.bind(fastify))\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n\n    sget({\n      method: 'GET',\n      url: getUrl(fastify)\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 404)\n    })\n  })\n})\n\n// https://github.com/fastify/fastify/issues/868\ntest('onSend hooks run when an encapsulated route invokes the notFound handler', t => {\n  t.plan(3)\n  const fastify = Fastify()\n\n  fastify.register((instance, options, done) => {\n    instance.addHook('onSend', (request, reply, payload, done) => {\n      t.pass('onSend hook called')\n      done()\n    })\n\n    instance.get('/', (request, reply) => {\n      reply.send(new errors.NotFound())\n    })\n\n    done()\n  })\n\n  fastify.inject('/', (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 404)\n  })\n})\n\n// https://github.com/fastify/fastify/issues/713\ntest('preHandler option for setNotFoundHandler', t => {\n  t.plan(10)\n\n  t.test('preHandler option', t => {\n    t.plan(2)\n    const fastify = Fastify()\n\n    fastify.setNotFoundHandler({\n      preHandler: (req, reply, done) => {\n        req.body.preHandler = true\n        done()\n      }\n    }, function (req, reply) {\n      reply.code(404).send(req.body)\n    })\n\n    fastify.inject({\n      method: 'POST',\n      url: '/not-found',\n      payload: { hello: 'world' }\n    }, (err, res) => {\n      t.error(err)\n      const payload = JSON.parse(res.payload)\n      t.same(payload, { preHandler: true, hello: 'world' })\n    })\n  })\n\n  // https://github.com/fastify/fastify/issues/2229\n  t.test('preHandler hook in setNotFoundHandler should be called when callNotFound', { timeout: 40000 }, t => {\n    t.plan(3)\n    const fastify = Fastify()\n\n    fastify.setNotFoundHandler({\n      preHandler: (req, reply, done) => {\n        req.body.preHandler = true\n        done()\n      }\n    }, function (req, reply) {\n      reply.code(404).send(req.body)\n    })\n\n    fastify.post('/', function (req, reply) {\n      t.equal(reply.callNotFound(), reply)\n    })\n\n    fastify.inject({\n      method: 'POST',\n      url: '/',\n      payload: { hello: 'world' }\n    }, (err, res) => {\n      t.error(err)\n      const payload = JSON.parse(res.payload)\n      t.same(payload, { preHandler: true, hello: 'world' })\n    })\n  })\n\n  t.test('preHandler hook in setNotFoundHandler should accept an array of functions and be called when callNotFound', t => {\n    t.plan(2)\n    const fastify = Fastify()\n\n    fastify.setNotFoundHandler({\n      preHandler: [\n        (req, reply, done) => {\n          req.body.preHandler1 = true\n          done()\n        },\n        (req, reply, done) => {\n          req.body.preHandler2 = true\n          done()\n        }\n      ]\n    }, function (req, reply) {\n      reply.code(404).send(req.body)\n    })\n\n    fastify.post('/', function (req, reply) {\n      reply.callNotFound()\n    })\n\n    fastify.inject({\n      method: 'POST',\n      url: '/',\n      payload: { hello: 'world' }\n    }, (err, res) => {\n      t.error(err)\n      const payload = JSON.parse(res.payload)\n      t.same(payload, { preHandler1: true, preHandler2: true, hello: 'world' })\n    })\n  })\n\n  t.test('preHandler option should be called after preHandler hook', t => {\n    t.plan(2)\n    const fastify = Fastify()\n\n    fastify.addHook('preHandler', (req, reply, done) => {\n      req.body.check = 'a'\n      done()\n    })\n\n    fastify.setNotFoundHandler({\n      preHandler: (req, reply, done) => {\n        req.body.check += 'b'\n        done()\n      }\n    }, (req, reply) => {\n      reply.send(req.body)\n    })\n\n    fastify.inject({\n      method: 'POST',\n      url: '/',\n      payload: { hello: 'world' }\n    }, (err, res) => {\n      t.error(err)\n      const payload = JSON.parse(res.payload)\n      t.same(payload, { check: 'ab', hello: 'world' })\n    })\n  })\n\n  t.test('preHandler option should be unique per prefix', t => {\n    t.plan(4)\n    const fastify = Fastify()\n\n    fastify.setNotFoundHandler({\n      preHandler: (req, reply, done) => {\n        req.body.hello = 'earth'\n        done()\n      }\n    }, (req, reply) => {\n      reply.send(req.body)\n    })\n\n    fastify.register(function (i, o, n) {\n      i.setNotFoundHandler((req, reply) => {\n        reply.send(req.body)\n      })\n\n      n()\n    }, { prefix: '/no' })\n\n    fastify.inject({\n      method: 'POST',\n      url: '/not-found',\n      payload: { hello: 'world' }\n    }, (err, res) => {\n      t.error(err)\n      const payload = JSON.parse(res.payload)\n      t.same(payload, { hello: 'earth' })\n    })\n\n    fastify.inject({\n      method: 'POST',\n      url: '/no/not-found',\n      payload: { hello: 'world' }\n    }, (err, res) => {\n      t.error(err)\n      const payload = JSON.parse(res.payload)\n      t.same(payload, { hello: 'world' })\n    })\n  })\n\n  t.test('preHandler option should handle errors', t => {\n    t.plan(3)\n    const fastify = Fastify()\n\n    fastify.setNotFoundHandler({\n      preHandler: (req, reply, done) => {\n        done(new Error('kaboom'))\n      }\n    }, (req, reply) => {\n      reply.send(req.body)\n    })\n\n    fastify.inject({\n      method: 'POST',\n      url: '/not-found',\n      payload: { hello: 'world' }\n    }, (err, res) => {\n      t.error(err)\n      const payload = JSON.parse(res.payload)\n      t.equal(res.statusCode, 500)\n      t.same(payload, {\n        message: 'kaboom',\n        error: 'Internal Server Error',\n        statusCode: 500\n      })\n    })\n  })\n\n  t.test('preHandler option should handle errors with custom status code', t => {\n    t.plan(3)\n    const fastify = Fastify()\n\n    fastify.setNotFoundHandler({\n      preHandler: (req, reply, done) => {\n        reply.code(401)\n        done(new Error('go away'))\n      }\n    }, (req, reply) => {\n      reply.send(req.body)\n    })\n\n    fastify.inject({\n      method: 'POST',\n      url: '/not-found',\n      payload: { hello: 'world' }\n    }, (err, res) => {\n      t.error(err)\n      const payload = JSON.parse(res.payload)\n      t.equal(res.statusCode, 401)\n      t.same(payload, {\n        message: 'go away',\n        error: 'Unauthorized',\n        statusCode: 401\n      })\n    })\n  })\n\n  t.test('preHandler option could accept an array of functions', t => {\n    t.plan(2)\n    const fastify = Fastify()\n\n    fastify.setNotFoundHandler({\n      preHandler: [\n        (req, reply, done) => {\n          req.body.preHandler = 'a'\n          done()\n        },\n        (req, reply, done) => {\n          req.body.preHandler += 'b'\n          done()\n        }\n      ]\n    }, (req, reply) => {\n      reply.send(req.body)\n    })\n\n    fastify.inject({\n      method: 'POST',\n      url: '/not-found',\n      payload: { hello: 'world' }\n    }, (err, res) => {\n      t.error(err)\n      const payload = JSON.parse(res.payload)\n      t.same(payload, { preHandler: 'ab', hello: 'world' })\n    })\n  })\n\n  t.test('preHandler option does not interfere with preHandler', t => {\n    t.plan(4)\n    const fastify = Fastify()\n\n    fastify.addHook('preHandler', (req, reply, done) => {\n      req.body.check = 'a'\n      done()\n    })\n\n    fastify.setNotFoundHandler({\n      preHandler: (req, reply, done) => {\n        req.body.check += 'b'\n        done()\n      }\n    }, (req, reply) => {\n      reply.send(req.body)\n    })\n\n    fastify.register(function (i, o, n) {\n      i.setNotFoundHandler((req, reply) => {\n        reply.send(req.body)\n      })\n\n      n()\n    }, { prefix: '/no' })\n\n    fastify.inject({\n      method: 'post',\n      url: '/not-found',\n      payload: { hello: 'world' }\n    }, (err, res) => {\n      t.error(err)\n      const payload = JSON.parse(res.payload)\n      t.same(payload, { check: 'ab', hello: 'world' })\n    })\n\n    fastify.inject({\n      method: 'post',\n      url: '/no/not-found',\n      payload: { hello: 'world' }\n    }, (err, res) => {\n      t.error(err)\n      const payload = JSON.parse(res.payload)\n      t.same(payload, { check: 'a', hello: 'world' })\n    })\n  })\n\n  t.test('preHandler option should keep the context', t => {\n    t.plan(3)\n    const fastify = Fastify()\n\n    fastify.decorate('foo', 42)\n\n    fastify.setNotFoundHandler({\n      preHandler: function (req, reply, done) {\n        t.equal(this.foo, 42)\n        this.foo += 1\n        req.body.foo = this.foo\n        done()\n      }\n    }, (req, reply) => {\n      reply.send(req.body)\n    })\n\n    fastify.inject({\n      method: 'POST',\n      url: '/not-found',\n      payload: { hello: 'world' }\n    }, (err, res) => {\n      t.error(err)\n      const payload = JSON.parse(res.payload)\n      t.same(payload, { foo: 43, hello: 'world' })\n    })\n  })\n})\n\ntest('reply.notFound invoked the notFound handler', t => {\n  t.plan(3)\n\n  const fastify = Fastify()\n\n  fastify.setNotFoundHandler((req, reply) => {\n    reply.code(404).send(new Error('kaboom'))\n  })\n\n  fastify.get('/', function (req, reply) {\n    reply.callNotFound()\n  })\n\n  fastify.inject({\n    url: '/',\n    method: 'GET'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 404)\n    t.same(JSON.parse(res.payload), {\n      error: 'Not Found',\n      message: 'kaboom',\n      statusCode: 404\n    })\n  })\n})\n\ntest('The custom error handler should be invoked after the custom not found handler', t => {\n  t.plan(6)\n\n  const fastify = Fastify()\n  const order = [1, 2]\n\n  fastify.setErrorHandler((err, req, reply) => {\n    t.equal(order.shift(), 2)\n    t.type(err, Error)\n    reply.send(err)\n  })\n\n  fastify.setNotFoundHandler((req, reply) => {\n    t.equal(order.shift(), 1)\n    reply.code(404).send(new Error('kaboom'))\n  })\n\n  fastify.get('/', function (req, reply) {\n    reply.callNotFound()\n  })\n\n  fastify.inject({\n    url: '/',\n    method: 'GET'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 404)\n    t.same(JSON.parse(res.payload), {\n      error: 'Not Found',\n      message: 'kaboom',\n      statusCode: 404\n    })\n  })\n})\n\ntest('If the custom not found handler does not use an Error, the custom error handler should not be called', t => {\n  t.plan(3)\n\n  const fastify = Fastify()\n\n  fastify.setErrorHandler((_err, req, reply) => {\n    t.fail('Should not be called')\n  })\n\n  fastify.setNotFoundHandler((req, reply) => {\n    reply.code(404).send('kaboom')\n  })\n\n  fastify.get('/', function (req, reply) {\n    reply.callNotFound()\n  })\n\n  fastify.inject({\n    url: '/',\n    method: 'GET'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 404)\n    t.equal(res.payload, 'kaboom')\n  })\n})\n\ntest('preValidation option', t => {\n  t.plan(3)\n  const fastify = Fastify()\n\n  fastify.decorate('foo', true)\n\n  fastify.setNotFoundHandler({\n    preValidation: function (req, reply, done) {\n      t.ok(this.foo)\n      done()\n    }\n  }, function (req, reply) {\n    reply.code(404).send(req.body)\n  })\n\n  fastify.inject({\n    method: 'POST',\n    url: '/not-found',\n    payload: { hello: 'world' }\n  }, (err, res) => {\n    t.error(err)\n    const payload = JSON.parse(res.payload)\n    t.same(payload, { hello: 'world' })\n  })\n})\n\nt.test('preValidation option could accept an array of functions', t => {\n  t.plan(4)\n  const fastify = Fastify()\n\n  fastify.setNotFoundHandler({\n    preValidation: [\n      (req, reply, done) => {\n        t.ok('called')\n        done()\n      },\n      (req, reply, done) => {\n        t.ok('called')\n        done()\n      }\n    ]\n  }, (req, reply) => {\n    reply.send(req.body)\n  })\n\n  fastify.inject({\n    method: 'POST',\n    url: '/not-found',\n    payload: { hello: 'world' }\n  }, (err, res) => {\n    t.error(err)\n    const payload = JSON.parse(res.payload)\n    t.same(payload, { hello: 'world' })\n  })\n})\n\ntest('Should fail to invoke callNotFound inside a 404 handler', t => {\n  t.plan(5)\n\n  let fastify = null\n  const logStream = split(JSON.parse)\n  try {\n    fastify = Fastify({\n      logger: {\n        stream: logStream,\n        level: 'warn'\n      }\n    })\n  } catch (e) {\n    t.fail()\n  }\n\n  fastify.setNotFoundHandler((req, reply) => {\n    reply.callNotFound()\n  })\n\n  fastify.get('/', function (req, reply) {\n    reply.callNotFound()\n  })\n\n  logStream.once('data', line => {\n    t.equal(line.msg, 'Trying to send a NotFound error inside a 404 handler. Sending basic 404 response.')\n    t.equal(line.level, 40)\n  })\n\n  fastify.inject({\n    url: '/',\n    method: 'GET'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 404)\n    t.equal(res.payload, '404 Not Found')\n  })\n})\n\ntest('400 in case of bad url (pre find-my-way v2.2.0 was a 404)', t => {\n  t.test('Dynamic route', t => {\n    t.plan(3)\n    const fastify = Fastify()\n    fastify.get('/hello/:id', () => t.fail('we should not be here'))\n    fastify.inject({\n      url: '/hello/%world',\n      method: 'GET'\n    }, (err, response) => {\n      t.error(err)\n      t.equal(response.statusCode, 400)\n      t.same(JSON.parse(response.payload), {\n        error: 'Bad Request',\n        message: \"'/hello/%world' is not a valid url component\",\n        statusCode: 400\n      })\n    })\n  })\n\n  t.test('Wildcard', t => {\n    t.plan(3)\n    const fastify = Fastify()\n    fastify.get('*', () => t.fail('we should not be here'))\n    fastify.inject({\n      url: '/hello/%world',\n      method: 'GET'\n    }, (err, response) => {\n      t.error(err)\n      t.equal(response.statusCode, 400)\n      t.same(JSON.parse(response.payload), {\n        error: 'Bad Request',\n        message: \"'/hello/%world' is not a valid url component\",\n        statusCode: 400\n      })\n    })\n  })\n\n  t.test('No route registered', t => {\n    t.plan(3)\n    const fastify = Fastify()\n    fastify.inject({\n      url: '/%c0',\n      method: 'GET'\n    }, (err, response) => {\n      t.error(err)\n      t.equal(response.statusCode, 404)\n      t.same(JSON.parse(response.payload), {\n        error: 'Not Found',\n        message: 'Route GET:/%c0 not found',\n        statusCode: 404\n      })\n    })\n  })\n\n  t.test('Only / is registered', t => {\n    t.plan(3)\n    const fastify = Fastify()\n    fastify.get('/', () => t.fail('we should not be here'))\n    fastify.inject({\n      url: '/non-existing',\n      method: 'GET'\n    }, (err, response) => {\n      t.error(err)\n      t.equal(response.statusCode, 404)\n      t.same(JSON.parse(response.payload), {\n        error: 'Not Found',\n        message: 'Route GET:/non-existing not found',\n        statusCode: 404\n      })\n    })\n  })\n\n  t.test('customized 404', t => {\n    t.plan(3)\n    const fastify = Fastify({ logger: true })\n    fastify.setNotFoundHandler(function (req, reply) {\n      reply.code(404).send('this was not found')\n    })\n    fastify.inject({\n      url: '/%c0',\n      method: 'GET'\n    }, (err, response) => {\n      t.error(err)\n      t.equal(response.statusCode, 404)\n      t.same(response.payload, 'this was not found')\n    })\n  })\n\n  t.end()\n})\n\ntest('setNotFoundHandler should be chaining fastify instance', t => {\n  t.test('Register route after setNotFoundHandler', t => {\n    t.plan(6)\n    const fastify = Fastify()\n    fastify.setNotFoundHandler(function (_req, reply) {\n      reply.code(404).send('this was not found')\n    }).get('/valid-route', function (_req, reply) {\n      reply.send('valid route')\n    })\n\n    fastify.inject({\n      url: '/invalid-route',\n      method: 'GET'\n    }, (err, response) => {\n      t.error(err)\n      t.equal(response.statusCode, 404)\n      t.equal(response.payload, 'this was not found')\n    })\n\n    fastify.inject({\n      url: '/valid-route',\n      method: 'GET'\n    }, (err, response) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(response.payload, 'valid route')\n    })\n  })\n\n  t.end()\n})\n\ntest('Send 404 when frameworkError calls reply.callNotFound', t => {\n  t.test('Dynamic route', t => {\n    t.plan(4)\n    const fastify = Fastify({\n      frameworkErrors: (error, req, reply) => {\n        t.equal(error.message, \"'/hello/%world' is not a valid url component\")\n        return reply.callNotFound()\n      }\n    })\n    fastify.get('/hello/:id', () => t.fail('we should not be here'))\n    fastify.inject({\n      url: '/hello/%world',\n      method: 'GET'\n    }, (err, response) => {\n      t.error(err)\n      t.equal(response.statusCode, 404)\n      t.equal(response.payload, '404 Not Found')\n    })\n  })\n\n  t.end()\n})\n\ntest('hooks are applied to not found handlers /1', async ({ equal }) => {\n  const fastify = Fastify()\n\n  // adding await here is fundamental for this test\n  await fastify.register(async function (fastify) {\n  })\n\n  fastify.setErrorHandler(function (_, request, reply) {\n    return reply.code(401).send({ error: 'Unauthorized' })\n  })\n\n  fastify.addHook('preValidation', async function (request, reply) {\n    throw new Error('kaboom')\n  })\n\n  const { statusCode } = await fastify.inject('/')\n  equal(statusCode, 401)\n})\n\ntest('hooks are applied to not found handlers /2', async ({ equal }) => {\n  const fastify = Fastify()\n\n  async function plugin (fastify) {\n    fastify.setErrorHandler(function (_, request, reply) {\n      return reply.code(401).send({ error: 'Unauthorized' })\n    })\n  }\n\n  plugin[Symbol.for('skip-override')] = true\n\n  fastify.register(plugin)\n\n  fastify.addHook('preValidation', async function (request, reply) {\n    throw new Error('kaboom')\n  })\n\n  const { statusCode } = await fastify.inject('/')\n  equal(statusCode, 401)\n})\n\ntest('hooks are applied to not found handlers /3', async ({ equal, fail }) => {\n  const fastify = Fastify()\n\n  async function plugin (fastify) {\n    fastify.setNotFoundHandler({ errorHandler }, async () => {\n      fail('this should never be called')\n    })\n\n    function errorHandler (_, request, reply) {\n      return reply.code(401).send({ error: 'Unauthorized' })\n    }\n  }\n\n  plugin[Symbol.for('skip-override')] = true\n\n  fastify.register(plugin)\n\n  fastify.addHook('preValidation', async function (request, reply) {\n    throw new Error('kaboom')\n  })\n\n  const { statusCode } = await fastify.inject('/')\n  equal(statusCode, 401)\n})\n/docs/Guides/Plugins-Guide.mdB<h1 align=\"center\">Fastify</h1>\n\n# The hitchhiker's guide to plugins\nFirst of all, `DON'T PANIC`!\n\nFastify was built from the beginning to be an extremely modular system. We built\na powerful API that allows you to add methods and utilities to Fastify by\ncreating a namespace. We built a system that creates an encapsulation model,\nwhich allows you to split your application into multiple microservices at any\nmoment, without the need to refactor the entire application.\n\n**Table of contents**\n- [The hitchhiker's guide to plugins](#the-hitchhikers-guide-to-plugins)\n  - [Register](#register)\n  - [Decorators](#decorators)\n  - [Hooks](#hooks)\n  - [How to handle encapsulation and\n    distribution](#how-to-handle-encapsulation-and-distribution)\n  - [ESM support](#esm-support)\n  - [Handle errors](#handle-errors)\n  - [Custom errors](#custom-errors)\n  - [Emit Warnings](#emit-warnings)\n  - [Let's start!](#lets-start)\n\n## Register\n<a id=\"register\"></a>\n\nAs with JavaScript, where everything is an object, in Fastify everything is a\nplugin.\n\nYour routes, your utilities, and so on are all plugins. To add a new plugin,\nwhatever its functionality may be, in Fastify you have a nice and unique API:\n[`register`](../Reference/Plugins.md).\n```js\nfastify.register(\n  require('./my-plugin'),\n  { options }\n)\n```\n`register` creates a new Fastify context, which means that if you perform any\nchanges on the Fastify instance, those changes will not be reflected in the\ncontext's ancestors. In other words, encapsulation!\n\n*Why is encapsulation important?*\n\nWell, let's say you are creating a new disruptive startup, what do you do? You\ncreate an API server with all your stuff, everything in the same place, a\nmonolith!\n\nOk, you are growing very fast and you want to change your architecture and try\nmicroservices. Usually, this implies a huge amount of work, because of cross\ndependencies and a lack of separation of concerns in the codebase.\n\nFastify helps you in that regard. Thanks to the encapsulation model, it will\ncompletely avoid cross dependencies and will help you structure your code into\ncohesive blocks.\n\n*Let's return to how to correctly use `register`.*\n\nAs you probably know, the required plugins must expose a single function with\nthe following signature\n```js\nmodule.exports = function (fastify, options, done) {}\n```\nWhere `fastify` is the encapsulated Fastify instance, `options` is the options\nobject, and `done` is the function you **must** call when your plugin is ready.\n\nFastify's plugin model is fully reentrant and graph-based, it handles\nasynchronous code without any problems and it enforces both the load and close\norder of plugins. *How?* Glad you asked, check out\n[`avvio`](https://github.com/mcollina/avvio)! Fastify starts loading the plugin\n__after__ `.listen()`, `.inject()` or `.ready()` are called.\n\nInside a plugin you can do whatever you want, register routes, utilities (we\nwill see this in a moment) and do nested registers, just remember to call `done`\nwhen everything is set up!\n```js\nmodule.exports = function (fastify, options, done) {\n  fastify.get('/plugin', (request, reply) => {\n    reply.send({ hello: 'world' })\n  })\n\n  done()\n}\n```\n\nWell, now you know how to use the `register` API and how it works, but how do we\nadd new functionality to Fastify and even better, share them with other\ndevelopers?\n\n## Decorators\n<a id=\"decorators\"></a>\n\nOkay, let's say that you wrote a utility that is so good that you decided to\nmake it available along with all your code. How would you do it? Probably\nsomething like the following:\n```js\n// your-awesome-utility.js\nmodule.exports = function (a, b) {\n  return a + b\n}\n```\n```js\nconst util = require('./your-awesome-utility')\nconsole.log(util('that is ', 'awesome'))\n```\nNow you will import your utility in every file you need it in. (And do not\nforget that you will probably also need it in your tests).\n\nFastify offers you a more elegant and comfortable way to do this, *decorators*.\nCreating a decorator is extremely easy, just use the\n[`decorate`](../Reference/Decorators.md) API:\n```js\nfastify.decorate('util', (a, b) => a + b)\n```\nNow you can access your utility just by calling `fastify.util` whenever you need\nit - even inside your test.\n\nAnd here starts the magic; do you remember how just now we were talking about\nencapsulation? Well, using `register` and `decorate` in conjunction enable\nexactly that, let me show you an example to clarify this:\n```js\nfastify.register((instance, opts, done) => {\n  instance.decorate('util', (a, b) => a + b)\n  console.log(instance.util('that is ', 'awesome'))\n\n  done()\n})\n\nfastify.register((instance, opts, done) => {\n  console.log(instance.util('that is ', 'awesome')) // This will throw an error\n\n  done()\n})\n```\nInside the second register call `instance.util` will throw an error because\n`util` exists only inside the first register context.\n\nLet's step back for a moment and dig deeper into this: every time you use the\n`register` API, a new context is created which avoids the negative situations\nmentioned above.\n\nDo note that encapsulation applies to the ancestors and siblings, but not the\nchildren.\n```js\nfastify.register((instance, opts, done) => {\n  instance.decorate('util', (a, b) => a + b)\n  console.log(instance.util('that is ', 'awesome'))\n\n  fastify.register((instance, opts, done) => {\n    console.log(instance.util('that is ', 'awesome')) // This will not throw an error\n    done()\n  })\n\n  done()\n})\n\nfastify.register((instance, opts, done) => {\n  console.log(instance.util('that is ', 'awesome')) // This will throw an error\n\n  done()\n})\n```\n*Take home message: if you need a utility that is available in every part of\nyour application, take care that it is declared in the root scope of your\napplication. If that is not an option,  you can use the `fastify-plugin` utility\nas described [here](#distribution).*\n\n`decorate` is not the only API that you can use to extend the server\nfunctionality, you can also use `decorateRequest` and `decorateReply`.\n\n*`decorateRequest` and `decorateReply`? Why do we need them if we already have\n`decorate`?*\n\nGood question, we added them to make Fastify more developer-friendly. Let's see\nan example:\n```js\nfastify.decorate('html', payload => {\n  return generateHtml(payload)\n})\n\nfastify.get('/html', (request, reply) => {\n  reply\n    .type('text/html')\n    .send(fastify.html({ hello: 'world' }))\n})\n```\nIt works, but it could be much better!\n```js\nfastify.decorateReply('html', function (payload) {\n  this.type('text/html') // This is the 'Reply' object\n  this.send(generateHtml(payload))\n})\n\nfastify.get('/html', (request, reply) => {\n  reply.html({ hello: 'world' })\n})\n```\nReminder that the `this` keyword is not available on *arrow functions*,\nso when passing functions in *`decorateReply`* and *`decorateRequest`* as\na utility that also needs access to the `request` and `reply` instance,\na function that is defined using the `function` keyword is needed instead\nof an *arrow function expression*.\n\nIn the same way you can do this for the `request` object:\n```js\nfastify.decorate('getHeader', (req, header) => {\n  return req.headers[header]\n})\n\nfastify.addHook('preHandler', (request, reply, done) => {\n  request.isHappy = fastify.getHeader(request.raw, 'happy')\n  done()\n})\n\nfastify.get('/happiness', (request, reply) => {\n  reply.send({ happy: request.isHappy })\n})\n```\nAgain, it works, but it can be much better!\n```js\nfastify.decorateRequest('setHeader', function (header) {\n  this.isHappy = this.headers[header]\n})\n\nfastify.decorateRequest('isHappy', false) // This will be added to the Request object prototype, yay speed!\n\nfastify.addHook('preHandler', (request, reply, done) => {\n  request.setHeader('happy')\n  done()\n})\n\nfastify.get('/happiness', (request, reply) => {\n  reply.send({ happy: request.isHappy })\n})\n```\n\nWe have seen how to extend server functionality and how to handle the\nencapsulation system, but what if you need to add a function that must be\nexecuted whenever the server \"[emits](../Reference/Lifecycle.md)\" an\nevent?\n\n## Hooks\n<a id=\"hooks\"></a>\n\nYou just built an amazing utility, but now you need to execute that for every\nrequest, this is what you will likely do:\n```js\nfastify.decorate('util', (request, key, value) => { request[key] = value })\n\nfastify.get('/plugin1', (request, reply) => {\n  fastify.util(request, 'timestamp', new Date())\n  reply.send(request)\n})\n\nfastify.get('/plugin2', (request, reply) => {\n  fastify.util(request, 'timestamp', new Date())\n  reply.send(request)\n})\n```\nI think we all agree that this is terrible. Repeated code, awful readability and\nit cannot scale.\n\nSo what can you do to avoid this annoying issue? Yes, you are right, use a\n[hook](../Reference/Hooks.md)!\n\n```js\nfastify.decorate('util', (request, key, value) => { request[key] = value })\n\nfastify.addHook('preHandler', (request, reply, done) => {\n  fastify.util(request, 'timestamp', new Date())\n  done()\n})\n\nfastify.get('/plugin1', (request, reply) => {\n  reply.send(request)\n})\n\nfastify.get('/plugin2', (request, reply) => {\n  reply.send(request)\n})\n```\nNow for every request, you will run your utility. You can register as many hooks\nas you need.\n\nSometimes you want a hook that should be executed for just a subset of routes,\nhow can you do that? Yep, encapsulation!\n\n```js\nfastify.register((instance, opts, done) => {\n  instance.decorate('util', (request, key, value) => { request[key] = value })\n\n  instance.addHook('preHandler', (request, reply, done) => {\n    instance.util(request, 'timestamp', new Date())\n    done()\n  })\n\n  instance.get('/plugin1', (request, reply) => {\n    reply.send(request)\n  })\n\n  done()\n})\n\nfastify.get('/plugin2', (request, reply) => {\n  reply.send(request)\n})\n```\nNow your hook will run just for the first route!\n\nAn alternative approach is to make use of the [onRoute hook](../Reference/Hooks.md#onroute)\nto customize application routes dynamically from inside the plugin. Every time\na new route is registered, you can read and modify the route options. For example,\nbased on a [route config option](../Reference/Routes.md#routes-options):\n\n```js\nfastify.register((instance, opts, done) => {\n  instance.decorate('util', (request, key, value) => { request[key] = value })\n  \n  function handler(request, reply, done) {\n    instance.util(request, 'timestamp', new Date())\n    done()\n  }\n\n  instance.addHook('onRoute', (routeOptions) => {\n    if (routeOptions.config && routeOptions.config.useUtil === true) {\n      // set or add our handler to the route preHandler hook\n      if (!routeOptions.preHandler) {\n        routeOptions.preHandler = [handler]\n        return\n      }\n      if (Array.isArray(routeOptions.preHandler)) {\n        routeOptions.preHandler.push(handler)\n        return\n      }\n      routeOptions.preHandler = [routeOptions.preHandler, handler]\n    }\n  })\n\n  fastify.get('/plugin1', {config: {useUtil: true}}, (request, reply) => {\n    reply.send(request)\n  })\n\n  fastify.get('/plugin2', (request, reply) => {\n    reply.send(request)\n  })\n\n  done()\n})\n```\n\nThis variant becomes extremely useful if you plan to distribute your plugin, as\ndescribed in the next section.\n\nAs you probably noticed by now, `request` and `reply` are not the standard\nNodejs *request* and *response* objects, but Fastify's objects.\n\n\n## How to handle encapsulation and distribution\n<a id=\"distribution\"></a>\n\nPerfect, now you know (almost) all of the tools that you can use to extend\nFastify. Nevertheless, chances are that you came across one big issue: how is\ndistribution handled?\n\nThe preferred way to distribute a utility is to wrap all your code inside a\n`register`. Using this, your plugin can support asynchronous bootstrapping\n*(since `decorate` is a synchronous API)*, in the case of a database connection\nfor example.\n\n*Wait, what? Didn't you tell me that `register` creates an encapsulation and\nthat the stuff I create inside will not be available outside?*\n\nYes, I said that. However, what I didn't tell you is that you can tell Fastify\nto avoid this behavior with the\n[`fastify-plugin`](https://github.com/fastify/fastify-plugin) module.\n```js\nconst fp = require('fastify-plugin')\nconst dbClient = require('db-client')\n\nfunction dbPlugin (fastify, opts, done) {\n  dbClient.connect(opts.url, (err, conn) => {\n    fastify.decorate('db', conn)\n    done()\n  })\n}\n\nmodule.exports = fp(dbPlugin)\n```\nYou can also tell `fastify-plugin` to check the installed version of Fastify, in\ncase you need a specific API.\n\nAs we mentioned earlier, Fastify starts loading its plugins __after__\n`.listen()`, `.inject()` or `.ready()` are called and as such, __after__ they\nhave been declared. This means that, even though the plugin may inject variables\nto the external Fastify instance via [`decorate`](../Reference/Decorators.md),\nthe decorated variables will not be accessible before calling `.listen()`,\n`.inject()` or `.ready()`.\n\nIn case you rely on a variable injected by a preceding plugin and want to pass\nthat in the `options` argument of `register`, you can do so by using a function\ninstead of an object:\n```js\nconst fastify = require('fastify')()\nconst fp = require('fastify-plugin')\nconst dbClient = require('db-client')\n\nfunction dbPlugin (fastify, opts, done) {\n  dbClient.connect(opts.url, (err, conn) => {\n    fastify.decorate('db', conn)\n    done()\n  })\n}\n\nfastify.register(fp(dbPlugin), { url: 'https://example.com' })\nfastify.register(require('your-plugin'), parent => {\n  return { connection: parent.db, otherOption: 'foo-bar' }\n})\n```\nIn the above example, the `parent` variable of the function passed in as the\nsecond argument of `register` is a copy of the **external Fastify instance**\nthat the plugin was registered at. This means that we can access any\nvariables that were injected by preceding plugins in the order of declaration.\n\n## ESM support\n<a id=\"esm-support\"></a>\n\nESM is supported as well from [Node.js\n`v13.3.0`](https://nodejs.org/api/esm.html) and above! Just export your plugin\nas ESM module and you are good to go!\n\n```js\n// plugin.mjs\nasync function plugin (fastify, opts) {\n  fastify.get('/', async (req, reply) => {\n    return { hello: 'world' }\n  })\n}\n\nexport default plugin\n```\n\n## Handle errors\n<a id=\"handle-errors\"></a>\n\nOne of your plugins may fail during startup. Maybe you expect it\nand you have a custom logic that will be triggered in that case. How can you\nimplement this? The `after` API is what you need. `after` simply registers a\ncallback that will be executed just after a register, and it can take up to\nthree parameters.\n\nThe callback changes based on the parameters you are giving:\n\n1. If no parameter is given to the callback and there is an error, that error\n   will be passed to the next error handler.\n1. If one parameter is given to the callback, that parameter will be the error\n   object.\n1. If two parameters are given to the callback, the first will be the error\n   object; the second will be the done callback.\n1. If three parameters are given to the callback, the first will be the error\n   object, the second will be the top-level context unless you have specified\n   both server and override, in that case, the context will be what the override\n   returns, and the third the done callback.\n\nLet's see how to use it:\n```js\nfastify\n  .register(require('./database-connector'))\n  .after(err => {\n    if (err) throw err\n  })\n```\n\n## Custom errors\n<a id=\"custom-errors\"></a>\n\nIf your plugin needs to expose custom errors, you can easily generate consistent\nerror objects across your codebase and plugins with the\n[`@fastify/error`](https://github.com/fastify/fastify-error) module.\n\n```js\nconst createError = require('@fastify/error')\nconst CustomError = createError('ERROR_CODE', 'message')\nconsole.log(new CustomError())\n```\n\n## Emit Warnings\n<a id=\"emit-warnings\"></a>\n\nIf you want to deprecate an API, or you want to warn the user about a specific\nuse case, you can use the\n[`process-warning`](https://github.com/fastify/process-warning) module.\n\n```js\nconst warning = require('process-warning')()\nwarning.create('FastifyDeprecation', 'FST_ERROR_CODE', 'message')\nwarning.emit('FST_ERROR_CODE')\n```\n\n## Let's start!\n<a id=\"start\"></a>\n\nAwesome, now you know everything you need to know about Fastify and its plugin\nsystem to start building your first plugin, and please if you do, tell us! We\nwill add it to the [*ecosystem*](https://github.com/fastify/fastify#ecosystem)\nsection of our documentation!\n\nIf you want to see some real-world examples, check out:\n- [`@fastify/view`](https://github.com/fastify/point-of-view) Templates\n  rendering (*ejs, pug, handlebars, marko*) plugin support for Fastify.\n- [`@fastify/mongodb`](https://github.com/fastify/fastify-mongodb) Fastify\n  MongoDB connection plugin, with this you can share the same MongoDB connection\n  pool in every part of your server.\n- [`@fastify/multipart`](https://github.com/fastify/fastify-multipart) Multipart\n  support for Fastify\n- [`@fastify/helmet`](https://github.com/fastify/fastify-helmet) Important\n  security headers for Fastify\n\n\n*Do you feel like something is missing here? Let us know! :)*\n/types/instance.d.tsximport { FastifyError } from '@fastify/error'\nimport { ConstraintStrategy, HTTPVersion } from 'find-my-way'\nimport * as http from 'http'\nimport { CallbackFunc as LightMyRequestCallback, Chain as LightMyRequestChain, InjectOptions, Response as LightMyRequestResponse } from 'light-my-request'\nimport { AddContentTypeParser, ConstructorAction, FastifyBodyParser, getDefaultJsonParser, hasContentTypeParser, ProtoAction, removeAllContentTypeParsers, removeContentTypeParser } from './content-type-parser'\nimport { onCloseAsyncHookHandler, onCloseHookHandler, onErrorAsyncHookHandler, onErrorHookHandler, onReadyAsyncHookHandler, onReadyHookHandler, onRegisterHookHandler, onRequestAsyncHookHandler, onRequestHookHandler, onRequestAbortAsyncHookHandler, onRequestAbortHookHandler, onResponseAsyncHookHandler, onResponseHookHandler, onRouteHookHandler, onSendAsyncHookHandler, onSendHookHandler, onTimeoutAsyncHookHandler, onTimeoutHookHandler, preHandlerAsyncHookHandler, preHandlerHookHandler, preParsingAsyncHookHandler, preParsingHookHandler, preSerializationAsyncHookHandler, preSerializationHookHandler, preValidationAsyncHookHandler, preValidationHookHandler } from './hooks'\nimport { FastifyBaseLogger } from './logger'\nimport { FastifyRegister } from './register'\nimport { FastifyReply } from './reply'\nimport { FastifyRequest } from './request'\nimport { DefaultRoute, RouteGenericInterface, RouteOptions, RouteShorthandMethod } from './route'\nimport {\n  FastifySchema,\n  FastifySchemaCompiler,\n  FastifySchemaControllerOptions,\n  FastifySerializerCompiler,\n  SchemaErrorFormatter\n} from './schema'\nimport {\n  FastifyTypeProvider,\n  FastifyTypeProviderDefault\n} from './type-provider'\nimport { ContextConfigDefault, RawReplyDefaultExpression, RawRequestDefaultExpression, RawServerBase, RawServerDefault } from './utils'\nimport { AddressInfo } from 'net'\n\nexport interface PrintRoutesOptions {\n  includeMeta?: boolean | (string | symbol)[]\n  commonPrefix?: boolean\n  includeHooks?: boolean\n}\n\nexport interface FastifyListenOptions {\n  /**\n   * Default to `0` (picks the first available open port).\n   */\n  port?: number;\n  /**\n   * Default to `localhost`.\n   */\n  host?: string;\n  /**\n   * Will be ignored if `port` is specified.\n   * @see [Identifying paths for IPC connections](https://nodejs.org/api/net.html#identifying-paths-for-ipc-connections).\n   */\n  path?: string;\n  /**\n   * Specify the maximum length of the queue of pending connections.\n   * The actual length will be determined by the OS through sysctl settings such as `tcp_max_syn_backlog` and `somaxconn` on Linux.\n   * Default to `511`.\n   */\n  backlog?: number;\n  /**\n   * Default to `false`.\n   */\n  exclusive?: boolean;\n  /**\n   * For IPC servers makes the pipe readable for all users.\n   * Default to `false`.\n   */\n  readableAll?: boolean;\n  /**\n   * For IPC servers makes the pipe writable for all users.\n   * Default to `false`.\n   */\n  writableAll?: boolean;\n  /**\n   * For TCP servers, setting `ipv6Only` to `true` will disable dual-stack support, i.e., binding to host `::` won't make `0.0.0.0` be bound.\n   * Default to `false`.\n   */\n  ipv6Only?: boolean;\n  /**\n   * An AbortSignal that may be used to close a listening server.\n   * @since This option is available only in Node.js v15.6.0 and greater\n   */\n  signal?: AbortSignal;\n}\n\ntype NotInInterface<Key, _Interface> = Key extends keyof _Interface ? never : Key\ntype FindMyWayVersion<RawServer extends RawServerBase> = RawServer extends http.Server ? HTTPVersion.V1 : HTTPVersion.V2\n\n/**\n * Fastify server instance. Returned by the core `fastify()` method.\n */\nexport interface FastifyInstance<\n  RawServer extends RawServerBase = RawServerDefault,\n  RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,\n  RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,\n  Logger extends FastifyBaseLogger = FastifyBaseLogger,\n  TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,\n> {\n  server: RawServer;\n  prefix: string;\n  version: string;\n  log: Logger;\n\n  addresses(): AddressInfo[]\n  withTypeProvider<Provider extends FastifyTypeProvider>(): FastifyInstance<RawServer, RawRequest, RawReply, Logger, Provider>;\n\n  addSchema(schema: unknown): FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>;\n  getSchema(schemaId: string): unknown;\n  getSchemas(): Record<string, unknown>;\n\n  after(): FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider> & PromiseLike<undefined>;\n  after(afterListener: (err: Error) => void): FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>;\n\n  close(): Promise<undefined>;\n  close(closeListener: () => void): undefined;\n\n  // should be able to define something useful with the decorator getter/setter pattern using Generics to enforce the users function returns what they expect it to\n  decorate<T>(property: string | symbol,\n    value: T extends (...args: any[]) => any\n      ? (this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>, ...args: Parameters<T>) => ReturnType<T>\n      : T,\n    dependencies?: string[]\n  ): FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>;\n\n  decorateRequest<T>(property: string | symbol,\n    value: T extends (...args: any[]) => any\n      ? (this: FastifyRequest, ...args: Parameters<T>) => ReturnType<T>\n      : T,\n    dependencies?: string[]\n  ): FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>;\n\n  decorateReply<T>(property: string | symbol,\n    value: T extends (...args: any[]) => any\n      ? (this: FastifyReply, ...args: Parameters<T>) => ReturnType<T>\n      : T,\n    dependencies?: string[]\n  ): FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>;\n\n  hasDecorator(decorator: string | symbol): boolean;\n  hasRequestDecorator(decorator: string | symbol): boolean;\n  hasReplyDecorator(decorator: string | symbol): boolean;\n  hasPlugin(name: string): boolean;\n\n  addConstraintStrategy(strategy: ConstraintStrategy<FindMyWayVersion<RawServer>, unknown>): void;\n  hasConstraintStrategy(strategyName: string): boolean;\n\n  inject(opts: InjectOptions | string, cb: LightMyRequestCallback): void;\n  inject(opts: InjectOptions | string): Promise<LightMyRequestResponse>;\n  inject(): LightMyRequestChain;\n\n  listen(opts: FastifyListenOptions, callback: (err: Error | null, address: string) => void): void;\n  listen(opts?: FastifyListenOptions): Promise<string>;\n  listen(callback: (err: Error | null, address: string) => void): void;\n\n  /**\n   * @deprecated Variadic listen method is deprecated. Please use `.listen(optionsObject, callback)` instead. The variadic signature will be removed in `fastify@5`\n   * @see https://github.com/fastify/fastify/pull/3712\n   */\n  listen(port: number | string, address: string, backlog: number, callback: (err: Error|null, address: string) => void): void;\n  /**\n   * @deprecated Variadic listen method is deprecated. Please use `.listen(optionsObject, callback)` instead. The variadic signature will be removed in `fastify@5`\n   * @see https://github.com/fastify/fastify/pull/3712\n   */\n  listen(port: number | string, address: string, callback: (err: Error|null, address: string) => void): void;\n  /**\n   * @deprecated Variadic listen method is deprecated. Please use `.listen(optionsObject, callback)` instead. The variadic signature will be removed in `fastify@5`\n   * @see https://github.com/fastify/fastify/pull/3712\n   */\n  listen(port: number | string, callback: (err: Error|null, address: string) => void): void;\n  /**\n   * @deprecated Variadic listen method is deprecated. Please use `.listen(optionsObject)` instead. The variadic signature will be removed in `fastify@5`\n   * @see https://github.com/fastify/fastify/pull/3712\n   */\n  listen(port: number | string, address?: string, backlog?: number): Promise<string>;\n\n  ready(): FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider> & PromiseLike<undefined>;\n  ready(readyListener: (err: Error) => void): FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>;\n\n  register: FastifyRegister<FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider> & PromiseLike<undefined>>;\n\n  routing(req: RawRequest, res: RawReply): void;\n  getDefaultRoute(): DefaultRoute<RawRequest, RawReply>;\n  setDefaultRoute(defaultRoute: DefaultRoute<RawRequest, RawReply>): void;\n\n  route<\n    RouteGeneric extends RouteGenericInterface = RouteGenericInterface,\n    ContextConfig = ContextConfigDefault,\n    SchemaCompiler extends FastifySchema = FastifySchema,\n  >(opts: RouteOptions<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider>): FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>;\n\n  get: RouteShorthandMethod<RawServer, RawRequest, RawReply, TypeProvider>;\n  head: RouteShorthandMethod<RawServer, RawRequest, RawReply, TypeProvider>;\n  post: RouteShorthandMethod<RawServer, RawRequest, RawReply, TypeProvider>;\n  put: RouteShorthandMethod<RawServer, RawRequest, RawReply, TypeProvider>;\n  delete: RouteShorthandMethod<RawServer, RawRequest, RawReply, TypeProvider>;\n  options: RouteShorthandMethod<RawServer, RawRequest, RawReply, TypeProvider>;\n  patch: RouteShorthandMethod<RawServer, RawRequest, RawReply, TypeProvider>;\n  all: RouteShorthandMethod<RawServer, RawRequest, RawReply, TypeProvider>;\n\n  hasRoute<\n    RouteGeneric extends RouteGenericInterface = RouteGenericInterface,\n    ContextConfig = ContextConfigDefault,\n    SchemaCompiler extends FastifySchema = FastifySchema,\n  >(opts: Pick<RouteOptions<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider>, 'method' | 'url' | 'constraints'>): boolean;\n\n  // addHook: overloads\n\n  // Lifecycle addHooks\n\n  /**\n   * `onRequest` is the first hook to be executed in the request lifecycle. There was no previous hook, the next hook will be `preParsing`.\n   *  Notice: in the `onRequest` hook, request.body will always be null, because the body parsing happens before the `preHandler` hook.\n   */\n  addHook<\n    RouteGeneric extends RouteGenericInterface = RouteGenericInterface,\n    ContextConfig = ContextConfigDefault,\n    SchemaCompiler extends FastifySchema = FastifySchema,\n    Logger extends FastifyBaseLogger = FastifyBaseLogger\n  >(\n    name: 'onRequest',\n    hook: onRequestHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>\n  ): FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>;\n\n  addHook<\n    RouteGeneric extends RouteGenericInterface = RouteGenericInterface,\n    ContextConfig = ContextConfigDefault,\n    SchemaCompiler extends FastifySchema = FastifySchema,\n    Logger extends FastifyBaseLogger = FastifyBaseLogger\n  >(\n    name: 'onRequest',\n    hook: onRequestAsyncHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>\n  ): FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>;\n\n  /**\n   * `preParsing` is the second hook to be executed in the request lifecycle. The previous hook was `onRequest`, the next hook will be `preValidation`.\n   * Notice: in the `preParsing` hook, request.body will always be null, because the body parsing happens before the `preHandler` hook.\n   */\n  addHook<\n    RouteGeneric extends RouteGenericInterface = RouteGenericInterface,\n    ContextConfig = ContextConfigDefault,\n    SchemaCompiler extends FastifySchema = FastifySchema,\n    Logger extends FastifyBaseLogger = FastifyBaseLogger\n  >(\n    name: 'preParsing',\n    hook: preParsingHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>\n  ): FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>;\n\n  addHook<\n    RouteGeneric extends RouteGenericInterface = RouteGenericInterface,\n    ContextConfig = ContextConfigDefault,\n    SchemaCompiler extends FastifySchema = FastifySchema,\n    Logger extends FastifyBaseLogger = FastifyBaseLogger\n  >(\n    name: 'preParsing',\n    hook: preParsingAsyncHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>\n  ): FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>;\n\n  /**\n   * `preValidation` is the third hook to be executed in the request lifecycle. The previous hook was `preParsing`, the next hook will be `preHandler`.\n   */\n  addHook<\n    RouteGeneric extends RouteGenericInterface = RouteGenericInterface,\n    ContextConfig = ContextConfigDefault,\n    SchemaCompiler extends FastifySchema = FastifySchema,\n    Logger extends FastifyBaseLogger = FastifyBaseLogger\n  >(\n    name: 'preValidation',\n    hook: preValidationHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>\n  ): FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>;\n\n  addHook<\n    RouteGeneric extends RouteGenericInterface = RouteGenericInterface,\n    ContextConfig = ContextConfigDefault,\n    SchemaCompiler extends FastifySchema = FastifySchema,\n    Logger extends FastifyBaseLogger = FastifyBaseLogger\n  >(\n    name: 'preValidation',\n    hook: preValidationAsyncHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>\n  ): FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>;\n\n  /**\n   * `preHandler` is the fourth hook to be executed in the request lifecycle. The previous hook was `preValidation`, the next hook will be `preSerialization`.\n   */\n  addHook<\n    RouteGeneric extends RouteGenericInterface = RouteGenericInterface,\n    ContextConfig = ContextConfigDefault,\n    SchemaCompiler extends FastifySchema = FastifySchema,\n    Logger extends FastifyBaseLogger = FastifyBaseLogger\n  >(\n    name: 'preHandler',\n    hook: preHandlerHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>\n  ): FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>;\n\n  addHook<\n    RouteGeneric extends RouteGenericInterface = RouteGenericInterface,\n    ContextConfig = ContextConfigDefault,\n    SchemaCompiler extends FastifySchema = FastifySchema,\n    Logger extends FastifyBaseLogger = FastifyBaseLogger\n  >(\n    name: 'preHandler',\n    hook: preHandlerAsyncHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>\n  ): FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>;\n\n  /**\n   * `preSerialization` is the fifth hook to be executed in the request lifecycle. The previous hook was `preHandler`, the next hook will be `onSend`.\n   *  Note: the hook is NOT called if the payload is a string, a Buffer, a stream or null.\n   */\n  addHook<\n    PreSerializationPayload = unknown,\n    RouteGeneric extends RouteGenericInterface = RouteGenericInterface,\n    ContextConfig = ContextConfigDefault,\n    SchemaCompiler extends FastifySchema = FastifySchema,\n    Logger extends FastifyBaseLogger = FastifyBaseLogger\n  >(\n    name: 'preSerialization',\n    hook: preSerializationHookHandler<PreSerializationPayload, RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>\n  ): FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>;\n\n  addHook<\n    PreSerializationPayload = unknown,\n    RouteGeneric extends RouteGenericInterface = RouteGenericInterface,\n    ContextConfig = ContextConfigDefault,\n    SchemaCompiler extends FastifySchema = FastifySchema,\n    Logger extends FastifyBaseLogger = FastifyBaseLogger\n  >(\n    name: 'preSerialization',\n    hook: preSerializationAsyncHookHandler<PreSerializationPayload, RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>\n  ): FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>;\n\n  /**\n   * You can change the payload with the `onSend` hook. It is the sixth hook to be executed in the request lifecycle. The previous hook was `preSerialization`, the next hook will be `onResponse`.\n   * Note: If you change the payload, you may only change it to a string, a Buffer, a stream, or null.\n   */\n  addHook<\n    OnSendPayload = unknown,\n    RouteGeneric extends RouteGenericInterface = RouteGenericInterface,\n    ContextConfig = ContextConfigDefault,\n    SchemaCompiler extends FastifySchema = FastifySchema,\n    Logger extends FastifyBaseLogger = FastifyBaseLogger\n  >(\n    name: 'onSend',\n    hook: onSendHookHandler<OnSendPayload, RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>\n  ): FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>;\n\n  addHook<\n    OnSendPayload = unknown,\n    RouteGeneric extends RouteGenericInterface = RouteGenericInterface,\n    ContextConfig = ContextConfigDefault,\n    SchemaCompiler extends FastifySchema = FastifySchema,\n    Logger extends FastifyBaseLogger = FastifyBaseLogger\n  >(\n    name: 'onSend',\n    hook: onSendAsyncHookHandler<OnSendPayload, RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>\n  ): FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>;\n\n  /**\n   * `onResponse` is the seventh and last hook in the request hook lifecycle. The previous hook was `onSend`, there is no next hook.\n   * The onResponse hook is executed when a response has been sent, so you will not be able to send more data to the client. It can however be useful for sending data to external services, for example to gather statistics.\n   */\n  addHook<\n    RouteGeneric extends RouteGenericInterface = RouteGenericInterface,\n    ContextConfig = ContextConfigDefault,\n    SchemaCompiler extends FastifySchema = FastifySchema,\n    Logger extends FastifyBaseLogger = FastifyBaseLogger\n  >(\n    name: 'onResponse',\n    hook: onResponseHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>\n  ): FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>;\n\n  addHook<\n    RouteGeneric extends RouteGenericInterface = RouteGenericInterface,\n    ContextConfig = ContextConfigDefault,\n    SchemaCompiler extends FastifySchema = FastifySchema,\n    Logger extends FastifyBaseLogger = FastifyBaseLogger\n  >(\n    name: 'onResponse',\n    hook: onResponseAsyncHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>\n  ): FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>;\n\n  /**\n   * `onTimeout` is useful if you need to monitor the request timed out in your service. (if the `connectionTimeout` property is set on the fastify instance)\n   * The onTimeout hook is executed when a request is timed out and the http socket has been hanged up. Therefore you will not be able to send data to the client.\n   */\n  addHook<\n    RouteGeneric extends RouteGenericInterface = RouteGenericInterface,\n    ContextConfig = ContextConfigDefault,\n    SchemaCompiler extends FastifySchema = FastifySchema,\n    Logger extends FastifyBaseLogger = FastifyBaseLogger\n  >(\n    name: 'onTimeout',\n    hook: onTimeoutHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>\n  ): FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>;\n\n  addHook<\n    RouteGeneric extends RouteGenericInterface = RouteGenericInterface,\n    ContextConfig = ContextConfigDefault,\n    SchemaCompiler extends FastifySchema = FastifySchema,\n    Logger extends FastifyBaseLogger = FastifyBaseLogger\n  >(\n    name: 'onTimeout',\n    hook: onTimeoutAsyncHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>\n  ): FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>;\n\n  /**\n   * `onRequestAbort` is useful if you need to monitor the if the client aborts the request (if the `request.raw.aborted` property is set to `true`).\n   * The `onRequestAbort` hook is executed when a client closes the connection before the entire request has been received. Therefore, you will not be able to send data to the client.\n   * Notice: client abort detection is not completely reliable. See: https://github.com/fastify/fastify/blob/main/docs/Guides/Detecting-When-Clients-Abort.md\n  */\n  addHook<\n    RouteGeneric extends RouteGenericInterface = RouteGenericInterface,\n    ContextConfig = ContextConfigDefault,\n    SchemaCompiler extends FastifySchema = FastifySchema,\n    Logger extends FastifyBaseLogger = FastifyBaseLogger\n  >(\n    name: 'onRequestAbort',\n    hook: onRequestAbortHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>\n  ): FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>;\n\n  addHook<\n    RouteGeneric extends RouteGenericInterface = RouteGenericInterface,\n    ContextConfig = ContextConfigDefault,\n    SchemaCompiler extends FastifySchema = FastifySchema,\n    Logger extends FastifyBaseLogger = FastifyBaseLogger\n  >(\n    name: 'onRequestAbort',\n    hook: onRequestAbortAsyncHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>\n  ): FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>;\n\n  /**\n   * This hook is useful if you need to do some custom error logging or add some specific header in case of error.\n   * It is not intended for changing the error, and calling reply.send will throw an exception.\n   * This hook will be executed only after the customErrorHandler has been executed, and only if the customErrorHandler sends an error back to the user (Note that the default customErrorHandler always sends the error back to the user).\n   * Notice: unlike the other hooks, pass an error to the done function is not supported.\n   */\n  addHook<\n    RouteGeneric extends RouteGenericInterface = RouteGenericInterface,\n    ContextConfig = ContextConfigDefault,\n    SchemaCompiler extends FastifySchema = FastifySchema,\n    Logger extends FastifyBaseLogger = FastifyBaseLogger\n  >(\n    name: 'onError',\n    hook: onErrorHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, FastifyError, SchemaCompiler, TypeProvider, Logger>\n  ): FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>;\n\n  addHook<\n    RouteGeneric extends RouteGenericInterface = RouteGenericInterface,\n    ContextConfig = ContextConfigDefault,\n    SchemaCompiler extends FastifySchema = FastifySchema,\n    Logger extends FastifyBaseLogger = FastifyBaseLogger\n  >(\n    name: 'onError',\n    hook: onErrorAsyncHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, FastifyError, SchemaCompiler, TypeProvider, Logger>\n  ): FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>;\n\n  // Application addHooks\n\n  /**\n   * Triggered when a new route is registered. Listeners are passed a routeOptions object as the sole parameter. The interface is synchronous, and, as such, the listener does not get passed a callback\n   */\n  addHook<\n    RouteGeneric extends RouteGenericInterface = RouteGenericInterface,\n    ContextConfig = ContextConfigDefault,\n    SchemaCompiler extends FastifySchema = FastifySchema,\n    Logger extends FastifyBaseLogger = FastifyBaseLogger\n  >(\n    name: 'onRoute',\n    hook: onRouteHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>\n  ): FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>;\n\n  /**\n  * Triggered when a new plugin is registered and a new encapsulation context is created. The hook will be executed before the registered code.\n  * This hook can be useful if you are developing a plugin that needs to know when a plugin context is formed, and you want to operate in that specific context.\n  * Note: This hook will not be called if a plugin is wrapped inside fastify-plugin.\n  */\n  addHook(\n    name: 'onRegister',\n    hook: onRegisterHookHandler<RawServer, RawRequest, RawReply, Logger, TypeProvider>\n  ): FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>;\n\n  /**\n  * Triggered when fastify.listen() or fastify.ready() is invoked to start the server. It is useful when plugins need a \"ready\" event, for example to load data before the server start listening for requests.\n  */\n  addHook(\n    name: 'onReady',\n    hook: onReadyHookHandler\n  ): FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>;\n\n  addHook(\n    name: 'onReady',\n    hook: onReadyAsyncHookHandler,\n  ): FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>;\n\n  /**\n  * Triggered when fastify.close() is invoked to stop the server. It is useful when plugins need a \"shutdown\" event, for example to close an open connection to a database.\n  */\n  addHook(\n    name: 'onClose',\n    hook: onCloseHookHandler<RawServer, RawRequest, RawReply, Logger, TypeProvider>\n  ): FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>;\n\n  addHook(\n    name: 'onClose',\n    hook: onCloseAsyncHookHandler<RawServer, RawRequest, RawReply, Logger>\n  ): FastifyInstance<RawServer, RawRequest, RawReply, Logger>;\n\n  /**\n   * Set the 404 handler\n   */\n  setNotFoundHandler<RouteGeneric extends RouteGenericInterface = RouteGenericInterface, TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault, SchemaCompiler extends FastifySchema = FastifySchema> (\n    handler: (request: FastifyRequest<RouteGeneric, RawServer, RawRequest, SchemaCompiler, TypeProvider>, reply: FastifyReply<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfigDefault, SchemaCompiler, TypeProvider>) => void | Promise<RouteGeneric['Reply'] | void>\n  ): FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>;\n\n  setNotFoundHandler<RouteGeneric extends RouteGenericInterface = RouteGenericInterface, ContextConfig extends ContextConfigDefault = ContextConfigDefault, TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault, SchemaCompiler extends FastifySchema = FastifySchema> (\n    opts: {\n      preValidation?: preValidationHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider> | preValidationHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider>[];\n      preHandler?: preHandlerHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider> | preHandlerHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider>[];\n    },\n    handler: (request: FastifyRequest<RouteGeneric, RawServer, RawRequest, SchemaCompiler, TypeProvider>, reply: FastifyReply<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfigDefault, SchemaCompiler, TypeProvider>) => void | Promise<RouteGeneric['Reply'] | void>\n  ): FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>\n\n  /**\n   * Fastify default error handler\n   */\n  errorHandler: (error: FastifyError, request: FastifyRequest, reply: FastifyReply) => void;\n\n  /**\n   * Set a function that will be called whenever an error happens\n   */\n  setErrorHandler<TError extends Error = FastifyError, RouteGeneric extends RouteGenericInterface = RouteGenericInterface, SchemaCompiler extends FastifySchema = FastifySchema, TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault>(\n    handler: (this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>, error: TError, request: FastifyRequest<RouteGeneric, RawServer, RawRequest, SchemaCompiler, TypeProvider>, reply: FastifyReply<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfigDefault, SchemaCompiler, TypeProvider>) => any | Promise<any>\n  ): FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>;\n\n  /**\n   * Fastify schema validator for all routes.\n   */\n  validatorCompiler: FastifySchemaCompiler<any> | undefined;\n\n  /**\n   * Set the schema validator for all routes.\n   */\n  setValidatorCompiler<T = FastifySchema>(schemaCompiler: FastifySchemaCompiler<T>): FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>;\n\n  /**\n   * Fastify schema serializer for all routes.\n   */\n  serializerCompiler: FastifySerializerCompiler<any> | undefined;\n\n  /**\n   * Set the schema serializer for all routes.\n   */\n  setSerializerCompiler<T = FastifySchema>(schemaCompiler: FastifySerializerCompiler<T>): FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>;\n\n  /**\n   * Set the schema controller for all routes.\n   */\n  setSchemaController(schemaControllerOpts: FastifySchemaControllerOptions): FastifyInstance<RawServer, RawRequest, RawReply, Logger>;\n\n  /**\n  * Set the reply serializer for all routes.\n  */\n  setReplySerializer(replySerializer: (payload: unknown, statusCode: number) => string): FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>;\n\n  /*\n  * Set the schema error formatter for all routes.\n  */\n  setSchemaErrorFormatter(errorFormatter: SchemaErrorFormatter): FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>;\n  /**\n   * Add a content type parser\n   */\n  addContentTypeParser: AddContentTypeParser<RawServer, RawRequest, RouteGenericInterface, FastifySchema, TypeProvider>;\n  hasContentTypeParser: hasContentTypeParser;\n  /**\n   * Remove an existing content type parser\n   */\n  removeContentTypeParser: removeContentTypeParser\n  /**\n   * Remove all content type parsers, including the default ones\n   */\n  removeAllContentTypeParsers: removeAllContentTypeParsers\n  /**\n   * Fastify default JSON parser\n   */\n  getDefaultJsonParser: getDefaultJsonParser;\n  /**\n   * Fastify default plain text parser\n   */\n  defaultTextParser: FastifyBodyParser<string>;\n\n  /**\n   * Prints the representation of the internal radix tree used by the router\n   */\n  printRoutes(opts?: PrintRoutesOptions): string;\n\n  /**\n   * Prints the representation of the plugin tree used by avvio, the plugin registration system\n   */\n  printPlugins(): string;\n\n  /**\n   *  Frozen read-only object registering the initial options passed down by the user to the fastify instance\n   */\n  initialConfig: Readonly<{\n    connectionTimeout?: number,\n    keepAliveTimeout?: number,\n    forceCloseConnections?: boolean,\n    bodyLimit?: number,\n    caseSensitive?: boolean,\n    allowUnsafeRegex?: boolean,\n    http2?: boolean,\n    https?: boolean | Readonly<{ allowHTTP1: boolean }>,\n    ignoreTrailingSlash?: boolean,\n    ignoreDuplicateSlashes?: boolean,\n    disableRequestLogging?: boolean,\n    maxParamLength?: number,\n    onProtoPoisoning?: ProtoAction,\n    onConstructorPoisoning?: ConstructorAction,\n    pluginTimeout?: number,\n    requestIdHeader?: string | false,\n    requestIdLogLabel?: string,\n    http2SessionTimeout?: number\n  }>\n}\n/lib/error-serializer.js\u0015S// This file is autogenerated by build/build-error-serializer.js, do not edit\n/* istanbul ignore file */\n\n  'use strict'\n  \n\n// eslint-disable-next-line\nconst STR_ESCAPE = /[\\u0000-\\u001f\\u0022\\u005c\\ud800-\\udfff]|[\\ud800-\\udbff](?![\\udc00-\\udfff])|(?:[^\\ud800-\\udbff]|^)[\\udc00-\\udfff]/\n\nclass Serializer {\n  constructor (options) {\n    switch (options && options.rounding) {\n      case 'floor':\n        this.parseInteger = Math.floor\n        break\n      case 'ceil':\n        this.parseInteger = Math.ceil\n        break\n      case 'round':\n        this.parseInteger = Math.round\n        break\n      case 'trunc':\n      default:\n        this.parseInteger = Math.trunc\n        break\n    }\n  }\n\n  asInteger (i) {\n    if (typeof i === 'number') {\n      if (i === Infinity || i === -Infinity) {\n        throw new Error(`The value \"${i}\" cannot be converted to an integer.`)\n      }\n      if (Number.isInteger(i)) {\n        return '' + i\n      }\n      if (Number.isNaN(i)) {\n        throw new Error(`The value \"${i}\" cannot be converted to an integer.`)\n      }\n      return this.parseInteger(i)\n    } else if (i === null) {\n      return '0'\n    } else if (typeof i === 'bigint') {\n      return i.toString()\n    } else {\n      /* eslint no-undef: \"off\" */\n      const integer = this.parseInteger(i)\n      if (Number.isFinite(integer)) {\n        return '' + integer\n      } else {\n        throw new Error(`The value \"${i}\" cannot be converted to an integer.`)\n      }\n    }\n  }\n\n  asNumber (i) {\n    const num = Number(i)\n    if (Number.isNaN(num)) {\n      throw new Error(`The value \"${i}\" cannot be converted to a number.`)\n    } else if (!Number.isFinite(num)) {\n      return null\n    } else {\n      return '' + num\n    }\n  }\n\n  asBoolean (bool) {\n    return bool && 'true' || 'false' // eslint-disable-line\n  }\n\n  asDateTime (date) {\n    if (date === null) return '\"\"'\n    if (date instanceof Date) {\n      return '\"' + date.toISOString() + '\"'\n    }\n    if (typeof date === 'string') {\n      return '\"' + date + '\"'\n    }\n    throw new Error(`The value \"${date}\" cannot be converted to a date-time.`)\n  }\n\n  asDate (date) {\n    if (date === null) return '\"\"'\n    if (date instanceof Date) {\n      return '\"' + new Date(date.getTime() - (date.getTimezoneOffset() * 60000)).toISOString().slice(0, 10) + '\"'\n    }\n    if (typeof date === 'string') {\n      return '\"' + date + '\"'\n    }\n    throw new Error(`The value \"${date}\" cannot be converted to a date.`)\n  }\n\n  asTime (date) {\n    if (date === null) return '\"\"'\n    if (date instanceof Date) {\n      return '\"' + new Date(date.getTime() - (date.getTimezoneOffset() * 60000)).toISOString().slice(11, 19) + '\"'\n    }\n    if (typeof date === 'string') {\n      return '\"' + date + '\"'\n    }\n    throw new Error(`The value \"${date}\" cannot be converted to a time.`)\n  }\n\n  asString (str) {\n    if (typeof str !== 'string') {\n      if (str === null) {\n        return '\"\"'\n      }\n      if (str instanceof Date) {\n        return '\"' + str.toISOString() + '\"'\n      }\n      if (str instanceof RegExp) {\n        str = str.source\n      } else {\n        str = str.toString()\n      }\n    }\n\n    // Fast escape chars check\n    if (!STR_ESCAPE.test(str)) {\n      return '\"' + str + '\"'\n    } else if (str.length < 42) {\n      return this.asStringSmall(str)\n    } else {\n      return JSON.stringify(str)\n    }\n  }\n\n  // magically escape strings for json\n  // relying on their charCodeAt\n  // everything below 32 needs JSON.stringify()\n  // every string that contain surrogate needs JSON.stringify()\n  // 34 and 92 happens all the time, so we\n  // have a fast case for them\n  asStringSmall (str) {\n    const l = str.length\n    let result = ''\n    let last = 0\n    let found = false\n    let surrogateFound = false\n    let point = 255\n    // eslint-disable-next-line\n    for (var i = 0; i < l && point >= 32; i++) {\n      point = str.charCodeAt(i)\n      if (point >= 0xD800 && point <= 0xDFFF) {\n        // The current character is a surrogate.\n        surrogateFound = true\n      }\n      if (point === 34 || point === 92) {\n        result += str.slice(last, i) + '\\\\'\n        last = i\n        found = true\n      }\n    }\n\n    if (!found) {\n      result = str\n    } else {\n      result += str.slice(last)\n    }\n    return ((point < 32) || (surrogateFound === true)) ? JSON.stringify(str) : '\"' + result + '\"'\n  }\n}\n\n  \n  const serializer = new Serializer()\n  \n\n  \n    \n    function anonymous0 (input) {\n      // #\n  \n      const obj = (input && typeof input.toJSON === 'function')\n    ? input.toJSON()\n    : input\n  \n      let json = '{'\n      let addComma = false\n  \n      if (obj[\"statusCode\"] !== undefined) {\n        !addComma && (addComma = true) || (json += ',')\n        json += \"\\\"statusCode\\\":\"\n      json += serializer.asNumber(obj[\"statusCode\"])\n      }\n    \n      if (obj[\"code\"] !== undefined) {\n        !addComma && (addComma = true) || (json += ',')\n        json += \"\\\"code\\\":\"\n      json += serializer.asString(obj[\"code\"])\n      }\n    \n      if (obj[\"error\"] !== undefined) {\n        !addComma && (addComma = true) || (json += ',')\n        json += \"\\\"error\\\":\"\n      json += serializer.asString(obj[\"error\"])\n      }\n    \n      if (obj[\"message\"] !== undefined) {\n        !addComma && (addComma = true) || (json += ',')\n        json += \"\\\"message\\\":\"\n      json += serializer.asString(obj[\"message\"])\n      }\n    \n      return json + '}'\n    }\n  \n    const main = anonymous0\n    \n    \n\n  module.exports = main\n/test/bodyLimit.test.js\u000b'use strict'\n\nconst Fastify = require('..')\nconst sget = require('simple-get').concat\nconst t = require('tap')\nconst test = t.test\n\ntest('bodyLimit', t => {\n  t.plan(5)\n\n  try {\n    Fastify({ bodyLimit: 1.3 })\n    t.fail('option must be an integer')\n  } catch (err) {\n    t.ok(err)\n  }\n\n  try {\n    Fastify({ bodyLimit: [] })\n    t.fail('option must be an integer')\n  } catch (err) {\n    t.ok(err)\n  }\n\n  const fastify = Fastify({ bodyLimit: 1 })\n\n  fastify.post('/', (request, reply) => {\n    reply.send({ error: 'handler should not be called' })\n  })\n\n  fastify.listen({ port: 0 }, function (err) {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    sget({\n      method: 'POST',\n      url: 'http://localhost:' + fastify.server.address().port,\n      headers: { 'Content-Type': 'application/json' },\n      body: [],\n      json: true\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 413)\n    })\n  })\n})\n\ntest('default request.routeOptions.bodyLimit should be 1048576', t => {\n  t.plan(4)\n  const fastify = Fastify()\n  fastify.post('/default-bodylimit', {\n    handler (request, reply) {\n      t.equal(1048576, request.routeOptions.bodyLimit)\n      reply.send({ })\n    }\n  })\n  fastify.listen({ port: 0 }, function (err) {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    sget({\n      method: 'POST',\n      url: 'http://localhost:' + fastify.server.address().port + '/default-bodylimit',\n      headers: { 'Content-Type': 'application/json' },\n      body: [],\n      json: true\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n    })\n  })\n})\n\ntest('request.routeOptions.bodyLimit should be equal to route limit', t => {\n  t.plan(4)\n  const fastify = Fastify({ bodyLimit: 1 })\n  fastify.post('/route-limit', {\n    bodyLimit: 1000,\n    handler (request, reply) {\n      t.equal(1000, request.routeOptions.bodyLimit)\n      reply.send({})\n    }\n  })\n  fastify.listen({ port: 0 }, function (err) {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    sget({\n      method: 'POST',\n      url: 'http://localhost:' + fastify.server.address().port + '/route-limit',\n      headers: { 'Content-Type': 'application/json' },\n      body: [],\n      json: true\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n    })\n  })\n})\n\ntest('request.routeOptions.bodyLimit should be equal to server limit', t => {\n  t.plan(4)\n  const fastify = Fastify({ bodyLimit: 100 })\n  fastify.post('/server-limit', {\n    handler (request, reply) {\n      t.equal(100, request.routeOptions.bodyLimit)\n      reply.send({})\n    }\n  })\n  fastify.listen({ port: 0 }, function (err) {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    sget({\n      method: 'POST',\n      url: 'http://localhost:' + fastify.server.address().port + '/server-limit',\n      headers: { 'Content-Type': 'application/json' },\n      body: [],\n      json: true\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n    })\n  })\n})\n/test/schema-feature.test.jsŤ'use strict'\n\nconst { test } = require('tap')\nconst Fastify = require('..')\nconst fp = require('fastify-plugin')\nconst deepClone = require('rfdc')({ circles: true, proto: false })\nconst Ajv = require('ajv')\nconst { kSchemaController } = require('../lib/symbols.js')\n\nconst echoParams = (req, reply) => { reply.send(req.params) }\nconst echoBody = (req, reply) => { reply.send(req.body) }\n\n;['addSchema', 'getSchema', 'getSchemas', 'setValidatorCompiler', 'setSerializerCompiler'].forEach(f => {\n  test(`Should expose ${f} function`, t => {\n    t.plan(1)\n    const fastify = Fastify()\n    t.equal(typeof fastify[f], 'function')\n  })\n})\n\n;['setValidatorCompiler', 'setSerializerCompiler'].forEach(f => {\n  test(`cannot call ${f} after binding`, t => {\n    t.plan(2)\n    const fastify = Fastify()\n    t.teardown(fastify.close.bind(fastify))\n    fastify.listen({ port: 0 }, err => {\n      t.error(err)\n      try {\n        fastify[f](() => { })\n        t.fail()\n      } catch (e) {\n        t.pass()\n      }\n    })\n  })\n})\n\ntest('The schemas should be added to an internal storage', t => {\n  t.plan(1)\n  const fastify = Fastify()\n  const schema = { $id: 'id', my: 'schema' }\n  fastify.addSchema(schema)\n  t.same(fastify[kSchemaController].schemaBucket.store, { id: schema })\n})\n\ntest('The schemas should be accessible via getSchemas', t => {\n  t.plan(1)\n  const fastify = Fastify()\n\n  const schemas = {\n    id: { $id: 'id', my: 'schema' },\n    abc: { $id: 'abc', my: 'schema' },\n    bcd: { $id: 'bcd', my: 'schema', properties: { a: 'a', b: 1 } }\n  }\n\n  Object.values(schemas).forEach(schema => { fastify.addSchema(schema) })\n  t.same(fastify.getSchemas(), schemas)\n})\n\ntest('The schema should be accessible by id via getSchema', t => {\n  t.plan(5)\n  const fastify = Fastify()\n\n  const schemas = [\n    { $id: 'id', my: 'schema' },\n    { $id: 'abc', my: 'schema' },\n    { $id: 'bcd', my: 'schema', properties: { a: 'a', b: 1 } }\n  ]\n  schemas.forEach(schema => { fastify.addSchema(schema) })\n  t.same(fastify.getSchema('abc'), schemas[1])\n  t.same(fastify.getSchema('id'), schemas[0])\n  t.same(fastify.getSchema('foo'), undefined)\n\n  fastify.register((instance, opts, done) => {\n    const pluginSchema = { $id: 'cde', my: 'schema' }\n    instance.addSchema(pluginSchema)\n    t.same(instance.getSchema('cde'), pluginSchema)\n    done()\n  })\n\n  fastify.ready(err => t.error(err))\n})\n\ntest('Get validatorCompiler after setValidatorCompiler', t => {\n  t.plan(2)\n  const myCompiler = () => { }\n  const fastify = Fastify()\n  fastify.setValidatorCompiler(myCompiler)\n  const sc = fastify.validatorCompiler\n  t.ok(Object.is(myCompiler, sc))\n  fastify.ready(err => t.error(err))\n})\n\ntest('Get serializerCompiler after setSerializerCompiler', t => {\n  t.plan(2)\n  const myCompiler = () => { }\n  const fastify = Fastify()\n  fastify.setSerializerCompiler(myCompiler)\n  const sc = fastify.serializerCompiler\n  t.ok(Object.is(myCompiler, sc))\n  fastify.ready(err => t.error(err))\n})\n\ntest('Get compilers is empty when settle on routes', t => {\n  t.plan(3)\n\n  const fastify = Fastify()\n\n  fastify.post('/', {\n    schema: {\n      body: { type: 'object', properties: { hello: { type: 'string' } } },\n      response: { '2xx': { foo: { type: 'array', items: { type: 'string' } } } }\n    },\n    validatorCompiler: ({ schema, method, url, httpPart }) => {},\n    serializerCompiler: ({ schema, method, url, httpPart }) => {}\n  }, function (req, reply) {\n    reply.send('ok')\n  })\n\n  fastify.inject({\n    method: 'POST',\n    payload: {},\n    url: '/'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(fastify.validatorCompiler, undefined)\n    t.equal(fastify.serializerCompiler, undefined)\n  })\n})\n\ntest('Should throw if the $id property is missing', t => {\n  t.plan(1)\n  const fastify = Fastify()\n  try {\n    fastify.addSchema({ type: 'string' })\n    t.fail()\n  } catch (err) {\n    t.equal(err.code, 'FST_ERR_SCH_MISSING_ID')\n  }\n})\n\ntest('Cannot add multiple times the same id', t => {\n  t.plan(2)\n  const fastify = Fastify()\n\n  fastify.addSchema({ $id: 'id' })\n  try {\n    fastify.addSchema({ $id: 'id' })\n  } catch (err) {\n    t.equal(err.code, 'FST_ERR_SCH_ALREADY_PRESENT')\n    t.equal(err.message, 'Schema with id \\'id\\' already declared!')\n  }\n})\n\ntest('Cannot add schema for query and querystring', t => {\n  t.plan(2)\n  const fastify = Fastify()\n\n  fastify.get('/', {\n    handler: () => {},\n    schema: {\n      query: { foo: { type: 'string' } },\n      querystring: { foo: { type: 'string' } }\n    }\n  })\n\n  fastify.ready(err => {\n    t.equal(err.code, 'FST_ERR_SCH_DUPLICATE')\n    t.equal(err.message, 'Schema with \\'querystring\\' already present!')\n  })\n})\n\ntest('Should throw of the schema does not exists in input', t => {\n  t.plan(2)\n  const fastify = Fastify()\n\n  fastify.get('/:id', {\n    handler: echoParams,\n    schema: {\n      params: {\n        name: { $ref: '#notExist' }\n      }\n    }\n  })\n\n  fastify.ready(err => {\n    t.equal(err.code, 'FST_ERR_SCH_VALIDATION_BUILD')\n    t.equal(err.message, \"Failed building the validation schema for GET: /:id, due to error can't resolve reference #notExist from id #\")\n  })\n})\n\ntest('Should throw of the schema does not exists in output', t => {\n  t.plan(2)\n  const fastify = Fastify()\n\n  fastify.get('/:id', {\n    handler: echoParams,\n    schema: {\n      response: {\n        '2xx': {\n          name: { $ref: '#notExist' }\n        }\n      }\n    }\n  })\n\n  fastify.ready(err => {\n    t.equal(err.code, 'FST_ERR_SCH_SERIALIZATION_BUILD')\n    t.match(err.message, /^Failed building the serialization schema for GET: \\/:id, due to error Cannot find reference.*/) // error from fast-json-strinfigy\n  })\n})\n\ntest('Should not change the input schemas', t => {\n  t.plan(4)\n\n  const theSchema = {\n    $id: 'helloSchema',\n    type: 'object',\n    definitions: {\n      hello: { type: 'string' }\n    }\n  }\n\n  const fastify = Fastify()\n  fastify.post('/', {\n    handler: echoBody,\n    schema: {\n      body: {\n        type: 'object',\n        additionalProperties: false,\n        properties: {\n          name: { $ref: 'helloSchema#/definitions/hello' }\n        }\n      },\n      response: {\n        '2xx': {\n          name: { $ref: 'helloSchema#/definitions/hello' }\n        }\n      }\n    }\n  })\n  fastify.addSchema(theSchema)\n\n  fastify.inject({\n    url: '/',\n    method: 'POST',\n    payload: { name: 'Foo', surname: 'Bar' }\n  }, (err, res) => {\n    t.error(err)\n    t.same(res.json(), { name: 'Foo' })\n    t.ok(theSchema.$id, 'the $id is not removed')\n    t.same(fastify.getSchema('helloSchema'), theSchema)\n  })\n})\n\ntest('First level $ref', t => {\n  t.plan(2)\n  const fastify = Fastify()\n\n  fastify.addSchema({\n    $id: 'test',\n    type: 'object',\n    properties: {\n      id: { type: 'number' }\n    }\n  })\n\n  fastify.get('/:id', {\n    handler: (req, reply) => {\n      reply.send({ id: req.params.id * 2, ignore: 'it' })\n    },\n    schema: {\n      params: { $ref: 'test#' },\n      response: {\n        200: { $ref: 'test#' }\n      }\n    }\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/123'\n  }, (err, res) => {\n    t.error(err)\n    t.same(res.json(), { id: 246 })\n  })\n})\n\ntest('Customize validator compiler in instance and route', t => {\n  t.plan(28)\n  const fastify = Fastify({ exposeHeadRoutes: false })\n\n  fastify.setValidatorCompiler(({ schema, method, url, httpPart }) => {\n    t.equal(method, 'POST') // run 4 times\n    t.equal(url, '/:id') // run 4 times\n    switch (httpPart) {\n      case 'body':\n        t.pass('body evaluated')\n        return body => {\n          t.same(body, { foo: ['bar', 'BAR'] })\n          return true\n        }\n      case 'params':\n        t.pass('params evaluated')\n        return params => {\n          t.same(params, { id: 1234 })\n          return true\n        }\n      case 'querystring':\n        t.pass('querystring evaluated')\n        return query => {\n          t.same(query, { lang: 'en' })\n          return true\n        }\n      case 'headers':\n        t.pass('headers evaluated')\n        return headers => {\n          t.match(headers, { x: 'hello' })\n          return true\n        }\n      case '2xx':\n        t.fail('the validator doesn\\'t process the response')\n        break\n      default:\n        t.fail(`unknown httpPart ${httpPart}`)\n    }\n  })\n\n  fastify.post('/:id', {\n    handler: echoBody,\n    schema: {\n      query: { lang: { type: 'string', enum: ['it', 'en'] } },\n      headers: { x: { type: 'string' } },\n      params: { id: { type: 'number' } },\n      body: { foo: { type: 'array' } },\n      response: {\n        '2xx': { foo: { type: 'array', items: { type: 'string' } } }\n      }\n    }\n  })\n\n  fastify.get('/wow/:id', {\n    handler: echoParams,\n    validatorCompiler: ({ schema, method, url, httpPart }) => {\n      t.equal(method, 'GET') // run 3 times (params, headers, query)\n      t.equal(url, '/wow/:id') // run 4 times\n      return () => { return true } // ignore the validation\n    },\n    schema: {\n      query: { lang: { type: 'string', enum: ['it', 'en'] } },\n      headers: { x: { type: 'string' } },\n      params: { id: { type: 'number' } },\n      response: { '2xx': { foo: { type: 'array', items: { type: 'string' } } } }\n    }\n  })\n\n  fastify.inject({\n    url: '/1234',\n    method: 'POST',\n    headers: { x: 'hello' },\n    query: { lang: 'en' },\n    payload: { foo: ['bar', 'BAR'] }\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 200)\n    t.same(res.json(), { foo: ['bar', 'BAR'] })\n  })\n\n  fastify.inject({\n    url: '/wow/should-be-a-num',\n    method: 'GET',\n    headers: { x: 'hello' },\n    query: { lang: 'jp' } // not in the enum\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 200) // the validation is always true\n    t.same(res.json(), {})\n  })\n})\n\ntest('Use the same schema across multiple routes', t => {\n  t.plan(4)\n  const fastify = Fastify()\n\n  fastify.addSchema({\n    $id: 'test',\n    type: 'object',\n    properties: {\n      id: { type: 'number' }\n    }\n  })\n\n  fastify.get('/first/:id', {\n    schema: {\n      params: { id: { $ref: 'test#/properties/id' } }\n    },\n    handler: (req, reply) => {\n      reply.send(typeof req.params.id)\n    }\n  })\n\n  fastify.get('/second/:id', {\n    schema: {\n      params: { id: { $ref: 'test#/properties/id' } }\n    },\n    handler: (req, reply) => {\n      reply.send(typeof req.params.id)\n    }\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/first/123'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.payload, 'number')\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/second/123'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.payload, 'number')\n  })\n})\n\ntest('Encapsulation should intervene', t => {\n  t.plan(2)\n  const fastify = Fastify()\n\n  fastify.register((instance, opts, done) => {\n    instance.addSchema({\n      $id: 'encapsulation',\n      type: 'object',\n      properties: {\n        id: { type: 'number' }\n      }\n    })\n    done()\n  })\n\n  fastify.register((instance, opts, done) => {\n    instance.get('/:id', {\n      handler: echoParams,\n      schema: {\n        params: { id: { $ref: 'encapsulation#/properties/id' } }\n      }\n    })\n    done()\n  })\n\n  fastify.ready(err => {\n    t.equal(err.code, 'FST_ERR_SCH_VALIDATION_BUILD')\n    t.equal(err.message, \"Failed building the validation schema for GET: /:id, due to error can't resolve reference encapsulation#/properties/id from id #\")\n  })\n})\n\ntest('Encapsulation isolation', t => {\n  t.plan(1)\n  const fastify = Fastify()\n\n  fastify.register((instance, opts, done) => {\n    instance.addSchema({ $id: 'id' })\n    done()\n  })\n\n  fastify.register((instance, opts, done) => {\n    instance.addSchema({ $id: 'id' })\n    done()\n  })\n\n  fastify.ready(err => t.error(err))\n})\n\ntest('Add schema after register', t => {\n  t.plan(5)\n\n  const fastify = Fastify()\n  fastify.register((instance, opts, done) => {\n    instance.get('/:id', {\n      handler: echoParams,\n      schema: {\n        params: { $ref: 'test#' }\n      }\n    })\n\n    // add it to the parent instance\n    fastify.addSchema({\n      $id: 'test',\n      type: 'object',\n      properties: {\n        id: { type: 'number' }\n      }\n    })\n\n    try {\n      instance.addSchema({ $id: 'test' })\n    } catch (err) {\n      t.equal(err.code, 'FST_ERR_SCH_ALREADY_PRESENT')\n      t.equal(err.message, 'Schema with id \\'test\\' already declared!')\n    }\n    done()\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/4242'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 200)\n    t.same(res.json(), { id: 4242 })\n  })\n})\n\ntest('Encapsulation isolation for getSchemas', t => {\n  t.plan(5)\n  const fastify = Fastify()\n\n  let pluginDeepOneSide\n  let pluginDeepOne\n  let pluginDeepTwo\n\n  const schemas = {\n    z: { $id: 'z', my: 'schema' },\n    a: { $id: 'a', my: 'schema' },\n    b: { $id: 'b', my: 'schema' },\n    c: { $id: 'c', my: 'schema', properties: { a: 'a', b: 1 } }\n  }\n\n  fastify.addSchema(schemas.z)\n\n  fastify.register((instance, opts, done) => {\n    instance.addSchema(schemas.a)\n    pluginDeepOneSide = instance\n    done()\n  })\n\n  fastify.register((instance, opts, done) => {\n    instance.addSchema(schemas.b)\n    instance.register((subinstance, opts, done) => {\n      subinstance.addSchema(schemas.c)\n      pluginDeepTwo = subinstance\n      done()\n    })\n    pluginDeepOne = instance\n    done()\n  })\n\n  fastify.ready(err => {\n    t.error(err)\n    t.same(fastify.getSchemas(), { z: schemas.z })\n    t.same(pluginDeepOneSide.getSchemas(), { z: schemas.z, a: schemas.a })\n    t.same(pluginDeepOne.getSchemas(), { z: schemas.z, b: schemas.b })\n    t.same(pluginDeepTwo.getSchemas(), { z: schemas.z, b: schemas.b, c: schemas.c })\n  })\n})\n\ntest('Use the same schema id in different places', t => {\n  t.plan(1)\n  const fastify = Fastify()\n\n  fastify.addSchema({\n    $id: 'test',\n    type: 'object',\n    properties: {\n      id: { type: 'number' }\n    }\n  })\n\n  fastify.get('/:id', {\n    handler: echoParams,\n    schema: {\n      response: {\n        200: {\n          type: 'array',\n          items: { $ref: 'test#/properties/id' }\n        }\n      }\n    }\n  })\n\n  fastify.post('/:id', {\n    handler: echoBody,\n    schema: {\n      body: { id: { $ref: 'test#/properties/id' } },\n      response: {\n        200: { id: { $ref: 'test#/properties/id' } }\n      }\n    }\n  })\n\n  fastify.ready(err => t.error(err))\n})\n\ntest('Get schema anyway should not add `properties` if allOf is present', t => {\n  t.plan(1)\n  const fastify = Fastify()\n\n  fastify.addSchema({\n    $id: 'first',\n    type: 'object',\n    properties: {\n      first: { type: 'number' }\n    }\n  })\n\n  fastify.addSchema({\n    $id: 'second',\n    type: 'object',\n    allOf: [\n      {\n        type: 'object',\n        properties: {\n          second: { type: 'number' }\n        }\n      },\n      fastify.getSchema('first')\n    ]\n  })\n\n  fastify.get('/', {\n    handler: () => {},\n    schema: {\n      querystring: fastify.getSchema('second'),\n      response: { 200: fastify.getSchema('second') }\n    }\n  })\n\n  fastify.ready(err => t.error(err))\n})\n\ntest('Get schema anyway should not add `properties` if oneOf is present', t => {\n  t.plan(1)\n  const fastify = Fastify()\n\n  fastify.addSchema({\n    $id: 'first',\n    type: 'object',\n    properties: {\n      first: { type: 'number' }\n    }\n  })\n\n  fastify.addSchema({\n    $id: 'second',\n    type: 'object',\n    oneOf: [\n      {\n        type: 'object',\n        properties: {\n          second: { type: 'number' }\n        }\n      },\n      fastify.getSchema('first')\n    ]\n  })\n\n  fastify.get('/', {\n    handler: () => {},\n    schema: {\n      querystring: fastify.getSchema('second'),\n      response: { 200: fastify.getSchema('second') }\n    }\n  })\n\n  fastify.ready(err => t.error(err))\n})\n\ntest('Get schema anyway should not add `properties` if anyOf is present', t => {\n  t.plan(1)\n  const fastify = Fastify()\n\n  fastify.addSchema({\n    $id: 'first',\n    type: 'object',\n    properties: {\n      first: { type: 'number' }\n    }\n  })\n\n  fastify.addSchema({\n    $id: 'second',\n    type: 'object',\n    anyOf: [\n      {\n        type: 'object',\n        properties: {\n          second: { type: 'number' }\n        }\n      },\n      fastify.getSchema('first')\n    ]\n  })\n\n  fastify.get('/', {\n    handler: () => {},\n    schema: {\n      querystring: fastify.getSchema('second'),\n      response: { 200: fastify.getSchema('second') }\n    }\n  })\n\n  fastify.ready(err => t.error(err))\n})\n\ntest('Shared schema should be ignored in string enum', t => {\n  t.plan(2)\n  const fastify = Fastify()\n\n  fastify.get('/:lang', {\n    handler: echoParams,\n    schema: {\n      params: {\n        type: 'object',\n        properties: {\n          lang: {\n            type: 'string',\n            enum: ['Javascript', 'C++', 'C#']\n          }\n        }\n      }\n    }\n  })\n\n  fastify.inject('/C%23', (err, res) => {\n    t.error(err)\n    t.same(res.json(), { lang: 'C#' })\n  })\n})\n\ntest('Shared schema should NOT be ignored in != string enum', t => {\n  t.plan(2)\n  const fastify = Fastify()\n\n  fastify.addSchema({\n    $id: 'C',\n    type: 'object',\n    properties: {\n      lang: {\n        type: 'string',\n        enum: ['Javascript', 'C++', 'C#']\n      }\n    }\n  })\n\n  fastify.post('/:lang', {\n    handler: echoBody,\n    schema: {\n      body: fastify.getSchema('C')\n    }\n  })\n\n  fastify.inject({\n    url: '/',\n    method: 'POST',\n    payload: { lang: 'C#' }\n  }, (err, res) => {\n    t.error(err)\n    t.same(res.json(), { lang: 'C#' })\n  })\n})\n\ntest('Case insensitive header validation', t => {\n  t.plan(2)\n  const fastify = Fastify()\n  fastify.get('/', {\n    handler: (req, reply) => {\n      reply.code(200).send(req.headers.foobar)\n    },\n    schema: {\n      headers: {\n        type: 'object',\n        required: ['FooBar'],\n        properties: {\n          FooBar: { type: 'string' }\n        }\n      }\n    }\n  })\n  fastify.inject({\n    url: '/',\n    method: 'GET',\n    headers: {\n      FooBar: 'Baz'\n    }\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.payload, 'Baz')\n  })\n})\n\ntest('Not evaluate json-schema $schema keyword', t => {\n  t.plan(2)\n  const fastify = Fastify()\n  fastify.post('/', {\n    handler: echoBody,\n    schema: {\n      body: {\n        $schema: 'http://json-schema.org/draft-07/schema#',\n        type: 'object',\n        additionalProperties: false,\n        properties: {\n          hello: {\n            type: 'string'\n          }\n        }\n      }\n    }\n  })\n  fastify.inject({\n    url: '/',\n    method: 'POST',\n    body: { hello: 'world', foo: 'bar' }\n  }, (err, res) => {\n    t.error(err)\n    t.same(res.json(), { hello: 'world' })\n  })\n})\n\ntest('Validation context in validation result', t => {\n  t.plan(5)\n  const fastify = Fastify()\n  // custom error handler to expose validation context in response, so we can test it later\n  fastify.setErrorHandler((err, request, reply) => {\n    t.equal(err instanceof Error, true)\n    t.ok(err.validation, 'detailed errors')\n    t.equal(err.validationContext, 'body')\n    reply.code(400).send()\n  })\n  fastify.post('/', {\n    handler: echoParams,\n    schema: {\n      body: {\n        type: 'object',\n        required: ['hello'],\n        properties: {\n          hello: { type: 'string' }\n        }\n      }\n    }\n  })\n  fastify.inject({\n    method: 'POST',\n    url: '/',\n    payload: {} // body lacks required field, will fail validation\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 400)\n  })\n})\n\ntest('The schema build should not modify the input', t => {\n  t.plan(3)\n  const fastify = Fastify()\n\n  const first = {\n    $id: 'first',\n    type: 'object',\n    properties: {\n      first: {\n        type: 'number'\n      }\n    }\n  }\n\n  fastify.addSchema(first)\n\n  fastify.addSchema({\n    $id: 'second',\n    type: 'object',\n    allOf: [\n      {\n        type: 'object',\n        properties: {\n          second: {\n            type: 'number'\n          }\n        }\n      },\n      { $ref: 'first#' }\n    ]\n  })\n\n  fastify.post('/', {\n    schema: {\n      description: 'get',\n      body: { $ref: 'second#' },\n      response: {\n        200: { $ref: 'second#' }\n      }\n    },\n    handler: (request, reply) => {\n      reply.send({ hello: 'world' })\n    }\n  })\n\n  fastify.patch('/', {\n    schema: {\n      description: 'patch',\n      body: { $ref: 'first#' },\n      response: {\n        200: { $ref: 'first#' }\n      }\n    },\n    handler: (request, reply) => {\n      reply.send({ hello: 'world' })\n    }\n  })\n\n  t.ok(first.$id)\n  fastify.ready(err => {\n    t.error(err)\n    t.ok(first.$id)\n  })\n})\n\ntest('Cross schema reference with encapsulation references', t => {\n  t.plan(1)\n\n  const fastify = Fastify()\n  fastify.addSchema({\n    $id: 'http://foo/item',\n    type: 'object',\n    properties: { foo: { type: 'string' } }\n  })\n\n  const refItem = { $ref: 'http://foo/item#' }\n\n  fastify.addSchema({\n    $id: 'itemList',\n    type: 'array',\n    items: refItem\n  })\n\n  fastify.register((instance, opts, done) => {\n    instance.addSchema({\n      $id: 'encapsulation',\n      type: 'object',\n      properties: {\n        id: { type: 'number' },\n        item: refItem,\n        secondItem: refItem\n      }\n    })\n\n    const multipleRef = {\n      type: 'object',\n      properties: {\n        a: { $ref: 'itemList#' },\n        b: refItem,\n        c: refItem,\n        d: refItem\n      }\n    }\n\n    instance.get('/get', { schema: { response: { 200: deepClone(multipleRef) } } }, () => { })\n    instance.get('/double-get', { schema: { querystring: multipleRef, response: { 200: multipleRef } } }, () => { })\n    instance.post('/post', { schema: { body: multipleRef, response: { 200: multipleRef } } }, () => { })\n    instance.post('/double', { schema: { response: { 200: { $ref: 'encapsulation' } } } }, () => { })\n    done()\n  }, { prefix: '/foo' })\n\n  fastify.post('/post', { schema: { body: refItem, response: { 200: refItem } } }, () => { })\n  fastify.get('/get', { schema: { params: refItem, response: { 200: refItem } } }, () => { })\n\n  fastify.ready(err => {\n    t.error(err)\n  })\n})\n\ntest('Check how many AJV instances are built #1', t => {\n  t.plan(12)\n  const fastify = Fastify()\n  addRandomRoute(fastify) // this trigger the schema validation creation\n  t.notOk(fastify.validatorCompiler, 'validator not initialized')\n\n  const instances = []\n  fastify.register((instance, opts, done) => {\n    t.notOk(fastify.validatorCompiler, 'validator not initialized')\n    instances.push(instance)\n    done()\n  })\n  fastify.register((instance, opts, done) => {\n    t.notOk(fastify.validatorCompiler, 'validator not initialized')\n    addRandomRoute(instance)\n    instances.push(instance)\n    done()\n    instance.register((instance, opts, done) => {\n      t.notOk(fastify.validatorCompiler, 'validator not initialized')\n      addRandomRoute(instance)\n      instances.push(instance)\n      done()\n    })\n  })\n\n  fastify.ready(err => {\n    t.error(err)\n\n    t.ok(fastify.validatorCompiler, 'validator initialized on preReady')\n    fastify.validatorCompiler.checkPointer = true\n    instances.forEach(i => {\n      t.ok(i.validatorCompiler, 'validator initialized on preReady')\n      t.equal(i.validatorCompiler.checkPointer, true, 'validator is only one for all the instances')\n    })\n  })\n})\n\ntest('onReady hook has the compilers ready', t => {\n  t.plan(6)\n\n  const fastify = Fastify()\n\n  fastify.get(`/${Math.random()}`, {\n    handler: (req, reply) => reply.send(),\n    schema: {\n      headers: { type: 'object' },\n      response: { 200: { type: 'object' } }\n    }\n  })\n\n  fastify.addHook('onReady', function (done) {\n    t.ok(this.validatorCompiler)\n    t.ok(this.serializerCompiler)\n    done()\n  })\n\n  let hookCallCounter = 0\n  fastify.register(async (i, o) => {\n    i.addHook('onReady', function (done) {\n      t.ok(this.validatorCompiler)\n      t.ok(this.serializerCompiler)\n      done()\n    })\n\n    i.register(async (i, o) => {})\n\n    i.addHook('onReady', function (done) {\n      hookCallCounter++\n      done()\n    })\n  })\n\n  fastify.ready(err => {\n    t.error(err)\n    t.equal(hookCallCounter, 1, 'it is called once')\n  })\n})\n\ntest('Check how many AJV instances are built #2 - verify validatorPool', t => {\n  t.plan(13)\n  const fastify = Fastify()\n  t.notOk(fastify.validatorCompiler, 'validator not initialized')\n\n  fastify.register(function sibling1 (instance, opts, done) {\n    addRandomRoute(instance)\n    t.notOk(instance.validatorCompiler, 'validator not initialized')\n    instance.ready(() => {\n      t.ok(instance.validatorCompiler, 'validator is initialized')\n      instance.validatorCompiler.sharedPool = 1\n    })\n    instance.after(() => {\n      t.notOk(instance.validatorCompiler, 'validator not initialized')\n    })\n    done()\n  })\n\n  fastify.register(function sibling2 (instance, opts, done) {\n    addRandomRoute(instance)\n    t.notOk(instance.validatorCompiler, 'validator not initialized')\n    instance.ready(() => {\n      t.equal(instance.validatorCompiler.sharedPool, 1, 'this context must share the validator with the same schemas')\n      instance.validatorCompiler.sharedPool = 2\n    })\n    instance.after(() => {\n      t.notOk(instance.validatorCompiler, 'validator not initialized')\n    })\n\n    instance.register((instance, opts, done) => {\n      t.notOk(instance.validatorCompiler, 'validator not initialized')\n      instance.ready(() => {\n        t.equal(instance.validatorCompiler.sharedPool, 2, 'this context must share the validator of the parent')\n      })\n      done()\n    })\n    done()\n  })\n\n  fastify.register(function sibling3 (instance, opts, done) {\n    addRandomRoute(instance)\n\n    // this trigger to dont't reuse the same compiler pool\n    instance.addSchema({ $id: 'diff', type: 'object' })\n\n    t.notOk(instance.validatorCompiler, 'validator not initialized')\n    instance.ready(() => {\n      t.ok(instance.validatorCompiler, 'validator is initialized')\n      t.notOk(instance.validatorCompiler.sharedPool, 'this context has its own compiler')\n    })\n    done()\n  })\n\n  fastify.ready(err => { t.error(err) })\n})\n\nfunction addRandomRoute (server) {\n  server.post(`/${Math.random()}`,\n    { schema: { body: { type: 'object' } } },\n    (req, reply) => reply.send()\n  )\n}\n\ntest('Add schema order should not break the startup', t => {\n  t.plan(1)\n  const fastify = Fastify()\n\n  fastify.get('/', { schema: { random: 'options' } }, () => {})\n\n  fastify.register(fp((f, opts) => {\n    f.addSchema({\n      $id: 'https://example.com/bson/objectId',\n      type: 'string',\n      pattern: '\\\\b[0-9A-Fa-f]{24}\\\\b'\n    })\n    return Promise.resolve() // avoid async for node 6\n  }))\n\n  fastify.get('/:id', {\n    schema: {\n      params: {\n        type: 'object',\n        properties: {\n          id: { $ref: 'https://example.com/bson/objectId#' }\n        }\n      }\n    }\n  }, () => {})\n\n  fastify.ready(err => { t.error(err) })\n})\n\ntest('The schema compiler recreate itself if needed', t => {\n  t.plan(1)\n  const fastify = Fastify()\n\n  fastify.options('/', { schema: { hide: true } }, echoBody)\n\n  fastify.register(function (fastify, options, done) {\n    fastify.addSchema({\n      $id: 'identifier',\n      type: 'string',\n      format: 'uuid'\n    })\n\n    fastify.get('/:foobarId', {\n      schema: {\n        params: {\n          foobarId: { $ref: 'identifier#' }\n        }\n      }\n    }, echoBody)\n\n    done()\n  })\n\n  fastify.ready(err => { t.error(err) })\n})\n\ntest('Schema controller setter', t => {\n  t.plan(2)\n  Fastify({ schemaController: {} })\n  t.pass('allow empty object')\n\n  try {\n    Fastify({ schemaController: { bucket: {} } })\n    t.fail('the bucket option must be a function')\n  } catch (err) {\n    t.equal(err.message, \"schemaController.bucket option should be a function, instead got 'object'\")\n  }\n})\n\ntest('Schema controller bucket', t => {\n  t.plan(10)\n\n  let added = 0\n  let builtBucket = 0\n\n  const initStoreQueue = []\n\n  function factoryBucket (storeInit) {\n    builtBucket++\n    t.same(initStoreQueue.pop(), storeInit)\n    const store = new Map(storeInit)\n    return {\n      add (schema) {\n        added++\n        store.set(schema.$id, schema)\n      },\n      getSchema (id) {\n        return store.get(id)\n      },\n      getSchemas () {\n        // what is returned by this function, will be the `storeInit` parameter\n        initStoreQueue.push(store)\n        return store\n      }\n    }\n  }\n\n  const fastify = Fastify({\n    schemaController: {\n      bucket: factoryBucket\n    }\n  })\n\n  fastify.register(async (instance) => {\n    instance.addSchema({ $id: 'b', type: 'string' })\n    instance.addHook('onReady', function (done) {\n      t.equal(instance.getSchemas().size, 2)\n      done()\n    })\n    instance.register(async (subinstance) => {\n      subinstance.addSchema({ $id: 'c', type: 'string' })\n      subinstance.addHook('onReady', function (done) {\n        t.equal(subinstance.getSchemas().size, 3)\n        done()\n      })\n    })\n  })\n\n  fastify.register(async (instance) => {\n    instance.addHook('onReady', function (done) {\n      t.equal(instance.getSchemas().size, 1)\n      done()\n    })\n  })\n\n  fastify.addSchema({ $id: 'a', type: 'string' })\n\n  fastify.ready(err => {\n    t.error(err)\n    t.equal(added, 3, 'three schema added')\n    t.equal(builtBucket, 4, 'one bucket built for every register call + 1 for the root instance')\n  })\n})\n\ntest('setSchemaController per instance', t => {\n  t.plan(7)\n  const fastify = Fastify({})\n\n  fastify.register(async (instance1) => {\n    instance1.setSchemaController({\n      bucket: function factoryBucket (storeInit) {\n        t.pass('instance1 has created the bucket')\n        return {\n          add (schema) { t.fail('add is not called') },\n          getSchema (id) { t.fail('getSchema is not called') },\n          getSchemas () { t.fail('getSchemas is not called') }\n        }\n      }\n    })\n  })\n\n  fastify.register(async (instance2) => {\n    const bSchema = { $id: 'b', type: 'string' }\n\n    instance2.setSchemaController({\n      bucket: function factoryBucket (storeInit) {\n        t.pass('instance2 has created the bucket')\n        const map = {}\n        return {\n          add (schema) {\n            t.equal(schema.$id, bSchema.$id, 'add is called')\n            map[schema.$id] = schema\n          },\n          getSchema (id) {\n            t.pass('getSchema is called')\n            return map[id]\n          },\n          getSchemas () {\n            t.pass('getSchemas is called')\n          }\n        }\n      }\n    })\n\n    instance2.addSchema(bSchema)\n\n    instance2.addHook('onReady', function (done) {\n      instance2.getSchemas()\n      t.same(instance2.getSchema('b'), bSchema, 'the schema are loaded')\n      done()\n    })\n  })\n\n  fastify.ready(err => { t.error(err) })\n})\n\ntest('setSchemaController: Inherits correctly parent schemas with a customized validator instance', async t => {\n  t.plan(5)\n  const customAjv = new Ajv({ coerceTypes: false })\n  const server = Fastify()\n  const someSchema = {\n    $id: 'some',\n    type: 'array',\n    items: {\n      type: 'string'\n    }\n  }\n  const errorResponseSchema = {\n    $id: 'error_response',\n    type: 'object',\n    properties: {\n      statusCode: {\n        type: 'integer'\n      },\n      message: {\n        type: 'string'\n      }\n    }\n  }\n\n  server.addSchema(someSchema)\n  server.addSchema(errorResponseSchema)\n\n  server.register((instance, _, done) => {\n    instance.setSchemaController({\n      compilersFactory: {\n        buildValidator: function (externalSchemas) {\n          const schemaKeys = Object.keys(externalSchemas)\n          t.equal(schemaKeys.length, 2, 'Contains same number of schemas')\n          t.hasStrict([someSchema, errorResponseSchema], Object.values(externalSchemas), 'Contains expected schemas')\n          for (const key of schemaKeys) {\n            if (customAjv.getSchema(key) == null) {\n              customAjv.addSchema(externalSchemas[key], key)\n            }\n          }\n          return function validatorCompiler ({ schema }) {\n            return customAjv.compile(schema)\n          }\n        }\n      }\n    })\n\n    instance.get(\n      '/',\n      {\n        schema: {\n          querystring: {\n            msg: {\n              $ref: 'some#'\n            }\n          },\n          response: {\n            '4xx': {\n              $ref: 'error_response#'\n            }\n          }\n        }\n      },\n      (req, reply) => {\n        reply.send({ noop: 'noop' })\n      }\n    )\n\n    done()\n  })\n\n  const res = await server.inject({\n    method: 'GET',\n    url: '/',\n    query: {\n      msg: 'string'\n    }\n  })\n  const json = res.json()\n\n  t.equal(json.message, 'querystring/msg must be array')\n  t.equal(json.statusCode, 400)\n  t.equal(res.statusCode, 400, 'Should not coearce the string into array')\n})\n\ntest('setSchemaController: Inherits buildSerializer from parent if not present within the instance', async t => {\n  t.plan(6)\n  const customAjv = new Ajv({ coerceTypes: false })\n  const someSchema = {\n    $id: 'some',\n    type: 'array',\n    items: {\n      type: 'string'\n    }\n  }\n  const errorResponseSchema = {\n    $id: 'error_response',\n    type: 'object',\n    properties: {\n      statusCode: {\n        type: 'integer'\n      },\n      message: {\n        type: 'string'\n      }\n    }\n  }\n  let rootSerializerCalled = 0\n  let rootValidatorCalled = 0\n  let childValidatorCalled = 0\n  const rootBuildSerializer = function (externalSchemas) {\n    rootSerializerCalled++\n    return function serializer () {\n      return data => {\n        return JSON.stringify({\n          statusCode: data.statusCode,\n          message: data.message\n        })\n      }\n    }\n  }\n  const rootBuildValidator = function (externalSchemas) {\n    rootValidatorCalled++\n    return function validatorCompiler ({ schema }) {\n      return customAjv.compile(schema)\n    }\n  }\n  const server = Fastify({\n    schemaController: {\n      compilersFactory: {\n        buildValidator: rootBuildValidator,\n        buildSerializer: rootBuildSerializer\n      }\n    }\n  })\n\n  server.addSchema(someSchema)\n  server.addSchema(errorResponseSchema)\n\n  server.register((instance, _, done) => {\n    instance.setSchemaController({\n      compilersFactory: {\n        buildValidator: function (externalSchemas) {\n          childValidatorCalled++\n          const schemaKeys = Object.keys(externalSchemas)\n          for (const key of schemaKeys) {\n            if (customAjv.getSchema(key) == null) {\n              customAjv.addSchema(externalSchemas[key], key)\n            }\n          }\n          return function validatorCompiler ({ schema }) {\n            return customAjv.compile(schema)\n          }\n        }\n      }\n    })\n\n    instance.get(\n      '/',\n      {\n        schema: {\n          querystring: {\n            msg: {\n              $ref: 'some#'\n            }\n          },\n          response: {\n            '4xx': {\n              $ref: 'error_response#'\n            }\n          }\n        }\n      },\n      (req, reply) => {\n        reply.send({ noop: 'noop' })\n      }\n    )\n\n    done()\n  })\n\n  const res = await server.inject({\n    method: 'GET',\n    url: '/',\n    query: {\n      msg: 'string'\n    }\n  })\n  const json = res.json()\n\n  t.equal(json.statusCode, 400)\n  t.equal(json.message, 'querystring/msg must be array')\n  t.equal(rootSerializerCalled, 1, 'Should be called from the child')\n  t.equal(rootValidatorCalled, 0, 'Should not be called from the child')\n  t.equal(childValidatorCalled, 1, 'Should be called from the child')\n  t.equal(res.statusCode, 400, 'Should not coerce the string into array')\n})\n\ntest('setSchemaController: Inherits buildValidator from parent if not present within the instance', async t => {\n  t.plan(6)\n  const customAjv = new Ajv({ coerceTypes: false })\n  const someSchema = {\n    $id: 'some',\n    type: 'array',\n    items: {\n      type: 'string'\n    }\n  }\n  const errorResponseSchema = {\n    $id: 'error_response',\n    type: 'object',\n    properties: {\n      statusCode: {\n        type: 'integer'\n      },\n      message: {\n        type: 'string'\n      }\n    }\n  }\n  let rootSerializerCalled = 0\n  let rootValidatorCalled = 0\n  let childSerializerCalled = 0\n  const rootBuildSerializer = function (externalSchemas) {\n    rootSerializerCalled++\n    return function serializer () {\n      return data => JSON.stringify(data)\n    }\n  }\n  const rootBuildValidator = function (externalSchemas) {\n    rootValidatorCalled++\n    const schemaKeys = Object.keys(externalSchemas)\n    for (const key of schemaKeys) {\n      if (customAjv.getSchema(key) == null) {\n        customAjv.addSchema(externalSchemas[key], key)\n      }\n    }\n    return function validatorCompiler ({ schema }) {\n      return customAjv.compile(schema)\n    }\n  }\n  const server = Fastify({\n    schemaController: {\n      compilersFactory: {\n        buildValidator: rootBuildValidator,\n        buildSerializer: rootBuildSerializer\n      }\n    }\n  })\n\n  server.register((instance, _, done) => {\n    instance.register((subInstance, _, subDone) => {\n      subInstance.setSchemaController({\n        compilersFactory: {\n          buildSerializer: function (externalSchemas) {\n            childSerializerCalled++\n            return function serializerCompiler () {\n              return data => {\n                return JSON.stringify({\n                  statusCode: data.statusCode,\n                  message: data.message\n                })\n              }\n            }\n          }\n        }\n      })\n\n      subInstance.get(\n        '/',\n        {\n          schema: {\n            querystring: {\n              msg: {\n                $ref: 'some#'\n              }\n            },\n            response: {\n              '4xx': {\n                $ref: 'error_response#'\n              }\n            }\n          }\n        },\n        (req, reply) => {\n          reply.send({ noop: 'noop' })\n        }\n      )\n\n      subDone()\n    })\n\n    done()\n  })\n\n  server.addSchema(someSchema)\n  server.addSchema(errorResponseSchema)\n\n  const res = await server.inject({\n    method: 'GET',\n    url: '/',\n    query: {\n      msg: ['string']\n    }\n  })\n  const json = res.json()\n\n  t.equal(json.statusCode, 400)\n  t.equal(json.message, 'querystring/msg must be array')\n  t.equal(rootSerializerCalled, 0, 'Should be called from the child')\n  t.equal(rootValidatorCalled, 1, 'Should not be called from the child')\n  t.equal(childSerializerCalled, 1, 'Should be called from the child')\n  t.equal(res.statusCode, 400, 'Should not coearce the string into array')\n})\n\ntest('Should throw if not default validator passed', async t => {\n  t.plan(4)\n  const customAjv = new Ajv({ coerceTypes: false })\n  const someSchema = {\n    $id: 'some',\n    type: 'array',\n    items: {\n      type: 'string'\n    }\n  }\n  const anotherSchema = {\n    $id: 'another',\n    type: 'integer'\n  }\n  const plugin = fp(function (pluginInstance, _, pluginDone) {\n    pluginInstance.setSchemaController({\n      compilersFactory: {\n        buildValidator: function (externalSchemas) {\n          const schemaKeys = Object.keys(externalSchemas)\n          t.equal(schemaKeys.length, 2)\n          t.same(schemaKeys, ['some', 'another'])\n\n          for (const key of schemaKeys) {\n            if (customAjv.getSchema(key) == null) {\n              customAjv.addSchema(externalSchemas[key], key)\n            }\n          }\n          return function validatorCompiler ({ schema }) {\n            return customAjv.compile(schema)\n          }\n        }\n      }\n    })\n\n    pluginDone()\n  })\n  const server = Fastify()\n\n  server.addSchema(someSchema)\n\n  server.register((instance, opts, done) => {\n    instance.addSchema(anotherSchema)\n\n    instance.register(plugin, {})\n\n    instance.post(\n      '/',\n      {\n        schema: {\n          query: {\n            msg: {\n              $ref: 'some#'\n            }\n          },\n          headers: {\n            'x-another': {\n              $ref: 'another#'\n            }\n          }\n        }\n      },\n      (req, reply) => {\n        reply.send({ noop: 'noop' })\n      }\n    )\n\n    done()\n  })\n\n  try {\n    const res = await server.inject({\n      method: 'POST',\n      url: '/',\n      query: {\n        msg: ['string']\n      }\n    })\n\n    t.equal(res.json().message, 'querystring/msg must be array')\n    t.equal(res.statusCode, 400, 'Should not coearce the string into array')\n  } catch (err) {\n    t.error(err)\n  }\n})\n\ntest('Should coerce the array if the default validator is used', async t => {\n  t.plan(2)\n  const someSchema = {\n    $id: 'some',\n    type: 'array',\n    items: {\n      type: 'string'\n    }\n  }\n  const anotherSchema = {\n    $id: 'another',\n    type: 'integer'\n  }\n\n  const server = Fastify()\n\n  server.addSchema(someSchema)\n\n  server.register((instance, opts, done) => {\n    instance.addSchema(anotherSchema)\n\n    instance.post(\n      '/',\n      {\n        schema: {\n          query: {\n            msg: {\n              $ref: 'some#'\n            }\n          },\n          headers: {\n            'x-another': {\n              $ref: 'another#'\n            }\n          }\n        }\n      },\n      (req, reply) => {\n        reply.send(req.query)\n      }\n    )\n\n    done()\n  })\n\n  try {\n    const res = await server.inject({\n      method: 'POST',\n      url: '/',\n      query: {\n        msg: 'string'\n      }\n    })\n\n    t.equal(res.statusCode, 200)\n    t.same(res.json(), { msg: ['string'] }, 'Should coearce the string into array')\n  } catch (err) {\n    t.error(err)\n  }\n})\n\ntest('Should return a human-friendly error if response status codes are not specified', t => {\n  t.plan(2)\n  const fastify = Fastify()\n\n  fastify.route({\n    url: '/',\n    method: 'GET',\n    schema: {\n      response: {\n        // This should be nested under a status code key, e.g { 200: { type: 'array' } }\n        type: 'array'\n      }\n    },\n    handler: (req, reply) => {\n      reply.send([])\n    }\n  })\n\n  fastify.ready(err => {\n    t.equal(err.code, 'FST_ERR_SCH_SERIALIZATION_BUILD')\n    t.match(err.message, 'Failed building the serialization schema for GET: /, due to error response schemas should be nested under a valid status code, e.g { 2xx: { type: \"object\" } }')\n  })\n})\n\ntest('setSchemaController: custom validator instance should not mutate headers schema', async t => {\n  t.plan(2)\n  class Headers {}\n  const fastify = Fastify()\n\n  fastify.setSchemaController({\n    compilersFactory: {\n      buildValidator: function () {\n        return ({ schema, method, url, httpPart }) => {\n          t.type(schema, Headers)\n          return () => {}\n        }\n      }\n    }\n  })\n\n  fastify.get('/', {\n    schema: {\n      headers: new Headers()\n    }\n  }, () => {})\n\n  await fastify.ready()\n})\n/test/types/request.test-d.ts\u0017`import { expectAssignable, expectType } from 'tsd'\nimport pino from 'pino'\nimport fastify, {\n  RouteHandler,\n  RawRequestDefaultExpression,\n  RequestBodyDefault,\n  RequestGenericInterface,\n  FastifyContext,\n  ContextConfigDefault,\n  FastifyContextConfig,\n  FastifyLogFn,\n  RouteHandlerMethod,\n  RawServerDefault,\n  RawReplyDefaultExpression,\n  FastifySchema,\n  FastifyTypeProviderDefault\n} from '../../fastify'\nimport { RequestParamsDefault, RequestHeadersDefault, RequestQuerystringDefault } from '../../types/utils'\nimport { FastifyLoggerInstance } from '../../types/logger'\nimport { FastifyRequest, RequestRouteOptions } from '../../types/request'\nimport { FastifyReply } from '../../types/reply'\nimport { FastifyInstance } from '../../types/instance'\nimport { RouteGenericInterface } from '../../types/route'\n\ninterface RequestBody {\n  content: string;\n}\n\ninterface RequestQuerystring {\n  from: string;\n}\n\ninterface RequestParams {\n  id: number;\n}\n\ninterface RequestHeaders {\n  'x-foobar': string;\n}\n\ninterface RequestData extends RequestGenericInterface {\n  Body: RequestBody;\n  Querystring: RequestQuerystring;\n  Params: RequestParams;\n  Headers: RequestHeaders;\n}\n\ntype Handler = RouteHandler<RequestData>\n\ntype CustomRequest = FastifyRequest<{\n  Body: RequestBody | undefined;\n  Querystring: RequestQuerystring;\n  Params: RequestParams;\n  Headers: RequestHeaders;\n}>\n\ntype HTTPRequestPart = 'body' | 'query' | 'querystring' | 'params' | 'headers'\ntype ExpectedGetValidationFunction = (input: {[key: string]: unknown}) => boolean\n\ninterface CustomLoggerInterface extends FastifyLoggerInstance {\n  foo: FastifyLogFn; // custom severity logger method\n}\n\nconst getHandler: RouteHandler = function (request, _reply) {\n  expectType<string>(request.url)\n  expectType<string>(request.method)\n  expectType<string>(request.routerPath)\n  expectType<string>(request.routerMethod)\n  expectType<Readonly<RequestRouteOptions>>(request.routeOptions)\n  expectType<boolean>(request.is404)\n  expectType<string>(request.hostname)\n  expectType<string>(request.ip)\n  expectType<string[] | undefined>(request.ips)\n  expectType<RawRequestDefaultExpression>(request.raw)\n  expectType<RequestBodyDefault>(request.body)\n  expectType<RequestParamsDefault>(request.params)\n  expectType<FastifyContext<ContextConfigDefault>>(request.context)\n  expectType<FastifyContextConfig>(request.context.config)\n  expectType<FastifyContextConfig>(request.routeConfig)\n  expectType<FastifySchema>(request.routeSchema)\n\n  expectType<RequestHeadersDefault & RawRequestDefaultExpression['headers']>(request.headers)\n  request.headers = {}\n\n  expectType<RequestQuerystringDefault>(request.query)\n  expectType<any>(request.id)\n  expectType<FastifyLoggerInstance>(request.log)\n  expectType<RawRequestDefaultExpression['socket']>(request.socket)\n  expectType<Error & { validation: any; validationContext: string } | undefined>(request.validationError)\n  expectType<FastifyInstance>(request.server)\n  expectAssignable<(httpPart: HTTPRequestPart) => ExpectedGetValidationFunction>(request.getValidationFunction)\n  expectAssignable<(schema: {[key: string]: unknown}) => ExpectedGetValidationFunction>(request.getValidationFunction)\n  expectAssignable<(input: {[key: string]: unknown}, schema: {[key: string]: unknown}, httpPart?: HTTPRequestPart) => boolean>(request.validateInput)\n  expectAssignable<(input: {[key: string]: unknown}, httpPart?: HTTPRequestPart) => boolean>(request.validateInput)\n}\n\nconst getHandlerWithCustomLogger: RouteHandlerMethod<RawServerDefault, RawRequestDefaultExpression, RawReplyDefaultExpression, RouteGenericInterface, ContextConfigDefault, FastifySchema, FastifyTypeProviderDefault, CustomLoggerInterface> = function (request, _reply) {\n  expectType<CustomLoggerInterface>(request.log)\n}\n\nconst postHandler: Handler = function (request) {\n  expectType<RequestBody>(request.body)\n  expectType<RequestParams>(request.params)\n  expectType<RequestHeaders & RawRequestDefaultExpression['headers']>(request.headers)\n  expectType<RequestQuerystring>(request.query)\n  expectType<string>(request.body.content)\n  expectType<string>(request.query.from)\n  expectType<number>(request.params.id)\n  expectType<string>(request.headers['x-foobar'])\n  expectType<FastifyInstance>(request.server)\n  expectType<FastifyContext<ContextConfigDefault>>(request.context)\n  expectType<FastifyContextConfig>(request.context.config)\n}\n\nfunction putHandler (request: CustomRequest, reply: FastifyReply) {\n  expectType<RequestBody | undefined>(request.body)\n  expectType<RequestParams>(request.params)\n  expectType<RequestHeaders & RawRequestDefaultExpression['headers']>(request.headers)\n  expectType<RequestQuerystring>(request.query)\n  if (typeof request.body === 'undefined') {\n    expectType<undefined>(request.body)\n  } else {\n    expectType<string>(request.body.content)\n  }\n  expectType<string>(request.query.from)\n  expectType<number>(request.params.id)\n  expectType<string>(request.headers['x-foobar'])\n  expectType<FastifyInstance>(request.server)\n  expectType<FastifyContext<ContextConfigDefault>>(request.context)\n  expectType<FastifyContextConfig>(request.context.config)\n}\n\nconst server = fastify()\nserver.get('/get', getHandler)\nserver.post('/post', postHandler)\nserver.put('/put', putHandler)\n\nconst customLogger: CustomLoggerInterface = {\n  level: 'info',\n  silent: () => { },\n  info: () => { },\n  warn: () => { },\n  error: () => { },\n  fatal: () => { },\n  trace: () => { },\n  debug: () => { },\n  foo: () => { }, // custom severity logger method\n  child: () => customLogger as pino.Logger<never>\n}\n\nconst serverWithCustomLogger = fastify({ logger: customLogger })\nexpectType<\nFastifyInstance<RawServerDefault, RawRequestDefaultExpression, RawReplyDefaultExpression, CustomLoggerInterface>\n& PromiseLike<FastifyInstance<RawServerDefault, RawRequestDefaultExpression, RawReplyDefaultExpression, CustomLoggerInterface>>\n>(serverWithCustomLogger)\n\nserverWithCustomLogger.get('/get', getHandlerWithCustomLogger)\n/lib/request.js!'use strict'\n\nconst proxyAddr = require('proxy-addr')\nconst semver = require('semver')\nconst warning = require('./warnings')\nconst {\n  kHasBeenDecorated,\n  kSchemaBody,\n  kSchemaHeaders,\n  kSchemaParams,\n  kSchemaQuerystring,\n  kSchemaController,\n  kOptions,\n  kRequestCacheValidateFns,\n  kRouteContext,\n  kPublicRouteContext\n} = require('./symbols')\nconst { FST_ERR_REQ_INVALID_VALIDATION_INVOCATION } = require('./errors')\n\nconst HTTP_PART_SYMBOL_MAP = {\n  body: kSchemaBody,\n  headers: kSchemaHeaders,\n  params: kSchemaParams,\n  querystring: kSchemaQuerystring,\n  query: kSchemaQuerystring\n}\n\nfunction Request (id, params, req, query, log, context) {\n  this.id = id\n  this[kRouteContext] = context\n  this.params = params\n  this.raw = req\n  this.query = query\n  this.log = log\n  this.body = undefined\n}\nRequest.props = []\n\nfunction getTrustProxyFn (tp) {\n  if (typeof tp === 'function') {\n    return tp\n  }\n  if (tp === true) {\n    // Support plain true/false\n    return function () { return true }\n  }\n  if (typeof tp === 'number') {\n    // Support trusting hop count\n    return function (a, i) { return i < tp }\n  }\n  if (typeof tp === 'string') {\n    // Support comma-separated tps\n    const vals = tp.split(',').map(it => it.trim())\n    return proxyAddr.compile(vals)\n  }\n  return proxyAddr.compile(tp)\n}\n\nfunction buildRequest (R, trustProxy) {\n  if (trustProxy) {\n    return buildRequestWithTrustProxy(R, trustProxy)\n  }\n\n  return buildRegularRequest(R)\n}\n\nfunction buildRegularRequest (R) {\n  const props = [...R.props]\n  function _Request (id, params, req, query, log, context) {\n    this.id = id\n    this[kRouteContext] = context\n    this.params = params\n    this.raw = req\n    this.query = query\n    this.log = log\n    this.body = undefined\n\n    // eslint-disable-next-line no-var\n    var prop\n    // eslint-disable-next-line no-var\n    for (var i = 0; i < props.length; i++) {\n      prop = props[i]\n      this[prop.key] = prop.value\n    }\n  }\n  Object.setPrototypeOf(_Request.prototype, R.prototype)\n  Object.setPrototypeOf(_Request, R)\n  _Request.props = props\n  _Request.parent = R\n\n  return _Request\n}\n\nfunction getLastEntryInMultiHeaderValue (headerValue) {\n  // we use the last one if the header is set more than once\n  const lastIndex = headerValue.lastIndexOf(',')\n  return lastIndex === -1 ? headerValue.trim() : headerValue.slice(lastIndex + 1).trim()\n}\n\nfunction buildRequestWithTrustProxy (R, trustProxy) {\n  const _Request = buildRegularRequest(R)\n  const proxyFn = getTrustProxyFn(trustProxy)\n\n  // This is a more optimized version of decoration\n  _Request[kHasBeenDecorated] = true\n\n  Object.defineProperties(_Request.prototype, {\n    ip: {\n      get () {\n        return proxyAddr(this.raw, proxyFn)\n      }\n    },\n    ips: {\n      get () {\n        return proxyAddr.all(this.raw, proxyFn)\n      }\n    },\n    hostname: {\n      get () {\n        if (this.ip !== undefined && this.headers['x-forwarded-host']) {\n          return getLastEntryInMultiHeaderValue(this.headers['x-forwarded-host'])\n        }\n        return this.headers.host || this.headers[':authority']\n      }\n    },\n    protocol: {\n      get () {\n        if (this.headers['x-forwarded-proto']) {\n          return getLastEntryInMultiHeaderValue(this.headers['x-forwarded-proto'])\n        }\n        if (this.socket) {\n          return this.socket.encrypted ? 'https' : 'http'\n        }\n      }\n    }\n  })\n\n  return _Request\n}\n\nObject.defineProperties(Request.prototype, {\n  server: {\n    get () {\n      return this[kRouteContext].server\n    }\n  },\n  url: {\n    get () {\n      return this.raw.url\n    }\n  },\n  method: {\n    get () {\n      return this.raw.method\n    }\n  },\n  context: {\n    get () {\n      warning.emit('FSTDEP012')\n      return this[kRouteContext]\n    }\n  },\n  routerPath: {\n    get () {\n      return this[kRouteContext].config.url\n    }\n  },\n  routeOptions: {\n    get () {\n      const context = this[kRouteContext]\n      const routeLimit = context._parserOptions.limit\n      const serverLimit = context.server.initialConfig.bodyLimit\n      const version = context.server.hasConstraintStrategy('version') ? this.raw.headers['accept-version'] : undefined\n      const options = {\n        method: context.config.method,\n        url: context.config.url,\n        bodyLimit: (routeLimit || serverLimit),\n        attachValidation: context.attachValidation,\n        logLevel: context.logLevel,\n        exposeHeadRoute: context.exposeHeadRoute,\n        prefixTrailingSlash: context.prefixTrailingSlash,\n        version\n      }\n      return Object.freeze(options)\n    }\n  },\n  routerMethod: {\n    get () {\n      return this[kRouteContext].config.method\n    }\n  },\n  routeConfig: {\n    get () {\n      return this[kRouteContext][kPublicRouteContext].config\n    }\n  },\n  routeSchema: {\n    get () {\n      return this[kRouteContext][kPublicRouteContext].schema\n    }\n  },\n  is404: {\n    get () {\n      return this[kRouteContext].config.url === undefined\n    }\n  },\n  connection: {\n    get () {\n      /* istanbul ignore next */\n      if (semver.gte(process.versions.node, '13.0.0')) {\n        warning.emit('FSTDEP005')\n      }\n      return this.raw.connection\n    }\n  },\n  socket: {\n    get () {\n      return this.raw.socket\n    }\n  },\n  ip: {\n    get () {\n      if (this.socket) {\n        return this.socket.remoteAddress\n      }\n    }\n  },\n  hostname: {\n    get () {\n      return this.raw.headers.host || this.raw.headers[':authority']\n    }\n  },\n  protocol: {\n    get () {\n      if (this.socket) {\n        return this.socket.encrypted ? 'https' : 'http'\n      }\n    }\n  },\n  headers: {\n    get () {\n      if (this.additionalHeaders) {\n        return Object.assign({}, this.raw.headers, this.additionalHeaders)\n      }\n      return this.raw.headers\n    },\n    set (headers) {\n      this.additionalHeaders = headers\n    }\n  },\n  getValidationFunction: {\n    value: function (httpPartOrSchema) {\n      if (typeof httpPartOrSchema === 'string') {\n        const symbol = HTTP_PART_SYMBOL_MAP[httpPartOrSchema]\n        return this[kRouteContext][symbol]\n      } else if (typeof httpPartOrSchema === 'object') {\n        return this[kRouteContext][kRequestCacheValidateFns]?.get(httpPartOrSchema)\n      }\n    }\n  },\n  compileValidationSchema: {\n    value: function (schema, httpPart = null) {\n      const { method, url } = this\n\n      if (this[kRouteContext][kRequestCacheValidateFns]?.has(schema)) {\n        return this[kRouteContext][kRequestCacheValidateFns].get(schema)\n      }\n\n      const validatorCompiler = this[kRouteContext].validatorCompiler ||\n      this.server[kSchemaController].validatorCompiler ||\n     (\n       // We compile the schemas if no custom validatorCompiler is provided\n       // nor set\n       this.server[kSchemaController].setupValidator(this.server[kOptions]) ||\n       this.server[kSchemaController].validatorCompiler\n     )\n\n      const validateFn = validatorCompiler({\n        schema,\n        method,\n        url,\n        httpPart\n      })\n\n      // We create a WeakMap to compile the schema only once\n      // Its done leazily to avoid add overhead by creating the WeakMap\n      // if it is not used\n      // TODO: Explore a central cache for all the schemas shared across\n      // encapsulated contexts\n      if (this[kRouteContext][kRequestCacheValidateFns] == null) {\n        this[kRouteContext][kRequestCacheValidateFns] = new WeakMap()\n      }\n\n      this[kRouteContext][kRequestCacheValidateFns].set(schema, validateFn)\n\n      return validateFn\n    }\n  },\n  validateInput: {\n    value: function (input, schema, httpPart) {\n      httpPart = typeof schema === 'string' ? schema : httpPart\n\n      const symbol = (httpPart != null && typeof httpPart === 'string') && HTTP_PART_SYMBOL_MAP[httpPart]\n      let validate\n\n      if (symbol) {\n        // Validate using the HTTP Request Part schema\n        validate = this[kRouteContext][symbol]\n      }\n\n      // We cannot compile if the schema is missed\n      if (validate == null && (schema == null ||\n          typeof schema !== 'object' ||\n          Array.isArray(schema))\n      ) {\n        throw new FST_ERR_REQ_INVALID_VALIDATION_INVOCATION(httpPart)\n      }\n\n      if (validate == null) {\n        if (this[kRouteContext][kRequestCacheValidateFns]?.has(schema)) {\n          validate = this[kRouteContext][kRequestCacheValidateFns].get(schema)\n        } else {\n          // We proceed to compile if there's no validate function yet\n          validate = this.compileValidationSchema(schema, httpPart)\n        }\n      }\n\n      return validate(input)\n    }\n  }\n})\n\nmodule.exports = Request\nmodule.exports.buildRequest = buildRequest\n/package.json\u0017{\n  \"name\": \"fastify\",\n  \"version\": \"4.14.1\",\n  \"description\": \"Fast and low overhead web framework, for Node.js\",\n  \"main\": \"fastify.js\",\n  \"type\": \"commonjs\",\n  \"types\": \"fastify.d.ts\",\n  \"scripts\": {\n    \"bench\": \"branchcmp -r 2 -g -s \\\"npm run benchmark\\\"\",\n    \"benchmark\": \"npx concurrently -k -s first \\\"node ./examples/benchmark/simple.js\\\" \\\"npx autocannon -c 100 -d 30 -p 10 localhost:3000/\\\"\",\n    \"coverage\": \"npm run unit -- --cov --coverage-report=html\",\n    \"coverage:ci\": \"npm run unit -- --cov --coverage-report=html --no-browser --no-check-coverage -R terse\",\n    \"coverage:ci-check-coverage\": \"nyc check-coverage --branches 100 --functions 100 --lines 100 --statements 100\",\n    \"license-checker\": \"license-checker --production --onlyAllow=\\\"MIT;ISC;BSD-3-Clause;BSD-2-Clause\\\"\",\n    \"lint\": \"npm run lint:standard && npm run lint:typescript && npm run lint:markdown\",\n    \"lint:fix\": \"standard --fix\",\n    \"lint:markdown\": \"markdownlint-cli2\",\n    \"lint:standard\": \"standard | snazzy\",\n    \"lint:typescript\": \"eslint -c types/.eslintrc.json types/**/*.d.ts test/types/**/*.test-d.ts\",\n    \"prepublishOnly\": \"PREPUBLISH=true tap --no-check-coverage test/build/**.test.js\",\n    \"test\": \"npm run lint && npm run unit && npm run test:typescript\",\n    \"test:ci\": \"npm run unit -- -R terse --cov --coverage-report=lcovonly && npm run test:typescript\",\n    \"test:report\": \"npm run lint && npm run unit:report && npm run test:typescript\",\n    \"test:typescript\": \"tsc test/types/import.ts && tsd\",\n    \"test:watch\": \"npm run unit -- -w --no-coverage-report -R terse\",\n    \"unit\": \"tap\",\n    \"unit:junit\": \"tap-mocha-reporter xunit < out.tap > test/junit-testresults.xml\",\n    \"unit:report\": \"tap --cov --coverage-report=html --coverage-report=cobertura | tee out.tap\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/fastify/fastify.git\"\n  },\n  \"keywords\": [\n    \"web\",\n    \"framework\",\n    \"json\",\n    \"schema\",\n    \"open\",\n    \"api\"\n  ],\n  \"author\": \"Matteo Collina <hello@matteocollina.com>\",\n  \"contributors\": [\n    {\n      \"name\": \"Tomas Della Vedova\",\n      \"url\": \"http://delved.org\",\n      \"author\": true\n    },\n    {\n      \"name\": \"Tommaso Allevi\",\n      \"email\": \"tomallevi@gmail.com\"\n    },\n    {\n      \"name\": \"Ethan Arrowood\",\n      \"url\": \"https://github.com/Ethan-Arrowood\",\n      \"email\": \"ethan.arrowood@gmail.com\"\n    },\n    {\n      \"name\": \"Dustin Deus\",\n      \"url\": \"http://starptech.de\",\n      \"email\": \"deusdustin@gmail.com\"\n    },\n    {\n      \"name\": \"Ayoub El Khattabi\",\n      \"url\": \"https://github.com/AyoubElk\",\n      \"email\": \"elkhattabi.ayoub@gmail.com\"\n    },\n    {\n      \"name\": \"Rafael Gonzaga\",\n      \"email\": \"rafael.nunu@hotmail.com\",\n      \"url\": \"https://github.com/rafaelgss\"\n    },\n    {\n      \"name\": \"Trivikram Kamat\",\n      \"url\": \"http://trivikr.github.io\",\n      \"email\": \"trivikr.dev@gmail.com\"\n    },\n    {\n      \"name\": \"Luciano Mammino\",\n      \"url\": \"https://loige.co\"\n    },\n    {\n      \"name\": \"Cemre Mengu\",\n      \"email\": \"cemremengu@gmail.com\"\n    },\n    {\n      \"name\": \"Evan Shortiss\",\n      \"email\": \"evanshortiss@gmail.com\"\n    },\n    {\n      \"name\": \"Maksim Sinik\",\n      \"url\": \"https://maksim.dev\"\n    },\n    {\n      \"name\": \"Manuel Spigolon\",\n      \"email\": \"behemoth89@gmail.com\"\n    },\n    {\n      \"name\": \"James Sumners\",\n      \"url\": \"https://james.sumners.info\"\n    },\n    {\n      \"name\": \"Denis Fäcke\",\n      \"url\": \"https://github.com/SerayaEryn\"\n    },\n    {\n      \"name\": \"Igor Savin\",\n      \"email\": \"kibertoad@gmail.com\",\n      \"url\": \"https://github.com/kibertoad\"\n    },\n    {\n      \"name\": \"Vincent Le Goff\",\n      \"email\": \"vince.legoff@gmail.com\",\n      \"url\": \"https://github.com/zekth\"\n    },\n    {\n      \"name\": \"Luis Orbaiceta\",\n      \"email\": \"luisorbaiceta@gmail.com\",\n      \"url\": \"https://luisorbaiceta.com\"\n    }\n  ],\n  \"license\": \"MIT\",\n  \"bugs\": {\n    \"url\": \"https://github.com/fastify/fastify/issues\"\n  },\n  \"homepage\": \"https://www.fastify.io/\",\n  \"devDependencies\": {\n    \"@fastify/pre-commit\": \"^2.0.2\",\n    \"@sinclair/typebox\": \"^0.25.2\",\n    \"@sinonjs/fake-timers\": \"^10.0.0\",\n    \"@types/node\": \"^18.7.18\",\n    \"@typescript-eslint/eslint-plugin\": \"^5.37.0\",\n    \"@typescript-eslint/parser\": \"^5.37.0\",\n    \"ajv\": \"^8.11.0\",\n    \"ajv-errors\": \"^3.0.0\",\n    \"ajv-formats\": \"^2.1.1\",\n    \"ajv-i18n\": \"^4.2.0\",\n    \"ajv-merge-patch\": \"^5.0.1\",\n    \"branch-comparer\": \"^1.1.0\",\n    \"eslint\": \"^8.23.1\",\n    \"eslint-config-standard\": \"^17.0.0\",\n    \"eslint-import-resolver-node\": \"^0.3.6\",\n    \"eslint-plugin-import\": \"^2.26.0\",\n    \"eslint-plugin-n\": \"^15.2.5\",\n    \"eslint-plugin-promise\": \"^6.0.1\",\n    \"fast-json-body\": \"^1.1.0\",\n    \"fast-json-stringify\": \"^5.3.0\",\n    \"fastify-plugin\": \"^4.2.1\",\n    \"fluent-json-schema\": \"^4.0.0\",\n    \"form-data\": \"^4.0.0\",\n    \"h2url\": \"^0.2.0\",\n    \"http-errors\": \"^2.0.0\",\n    \"joi\": \"^17.6.0\",\n    \"json-schema-to-ts\": \"^2.5.5\",\n    \"JSONStream\": \"^1.3.5\",\n    \"license-checker\": \"^25.0.1\",\n    \"markdownlint-cli2\": \"^0.6.0\",\n    \"proxyquire\": \"^2.1.3\",\n    \"pump\": \"^3.0.0\",\n    \"self-cert\": \"^2.0.0\",\n    \"send\": \"^0.18.0\",\n    \"simple-get\": \"^4.0.1\",\n    \"snazzy\": \"^9.0.0\",\n    \"split2\": \"^4.1.0\",\n    \"standard\": \"^17.0.0\",\n    \"tap\": \"^16.3.0\",\n    \"tsd\": \"^0.25.0\",\n    \"typescript\": \"^4.8.3\",\n    \"undici\": \"^5.10.0\",\n    \"vary\": \"^1.1.2\",\n    \"yup\": \"^1.0.0\"\n  },\n  \"dependencies\": {\n    \"@fastify/ajv-compiler\": \"^3.5.0\",\n    \"@fastify/error\": \"^3.0.0\",\n    \"@fastify/fast-json-stringify-compiler\": \"^4.1.0\",\n    \"abstract-logging\": \"^2.0.1\",\n    \"avvio\": \"^8.2.0\",\n    \"fast-content-type-parse\": \"^1.0.0\",\n    \"find-my-way\": \"^7.3.0\",\n    \"light-my-request\": \"^5.6.1\",\n    \"pino\": \"^8.5.0\",\n    \"process-warning\": \"^2.0.0\",\n    \"proxy-addr\": \"^2.0.7\",\n    \"rfdc\": \"^1.3.0\",\n    \"secure-json-parse\": \"^2.5.0\",\n    \"semver\": \"^7.3.7\",\n    \"tiny-lru\": \"^10.0.0\"\n  },\n  \"standard\": {\n    \"ignore\": [\n      \"lib/configValidator.js\",\n      \"lib/error-serializer.js\",\n      \"fastify.d.ts\",\n      \"types/*\",\n      \"test/types/*\",\n      \"test/same-shape.test.js\"\n    ]\n  },\n  \"tsd\": {\n    \"directory\": \"test/types\"\n  }\n}\n/types/content-type-parser.d.ts\u000eimport { RawServerBase, RawServerDefault, RawRequestDefaultExpression } from './utils'\nimport { FastifyRequest } from './request'\nimport { RouteGenericInterface } from './route'\nimport { FastifyTypeProvider, FastifyTypeProviderDefault } from './type-provider'\nimport { FastifySchema } from './schema'\n\ntype ContentTypeParserDoneFunction = (err: Error | null, body?: any) => void\n\n/**\n * Body parser method that operators on request body\n */\nexport type FastifyBodyParser<\n  RawBody extends string | Buffer,\n  RawServer extends RawServerBase = RawServerDefault,\n  RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,\n  RouteGeneric extends RouteGenericInterface = RouteGenericInterface,\n  SchemaCompiler extends FastifySchema = FastifySchema,\n  TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,\n> = ((request: FastifyRequest<RouteGeneric, RawServer, RawRequest, SchemaCompiler, TypeProvider>, rawBody: RawBody, done: ContentTypeParserDoneFunction) => void)\n| ((request: FastifyRequest<RouteGeneric, RawServer, RawRequest, SchemaCompiler, TypeProvider>, rawBody: RawBody) => Promise<any>)\n\n/**\n * Content Type Parser method that operates on request content\n */\nexport type FastifyContentTypeParser<\n  RawServer extends RawServerBase = RawServerDefault,\n  RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,\n  RouteGeneric extends RouteGenericInterface = RouteGenericInterface,\n  SchemaCompiler extends FastifySchema = FastifySchema,\n  TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,\n> = ((request: FastifyRequest<RouteGeneric, RawServer, RawRequest, SchemaCompiler, TypeProvider>, payload: RawRequest) => Promise<any>)\n| ((request: FastifyRequest<RouteGeneric, RawServer, RawRequest, SchemaCompiler, TypeProvider>, payload: RawRequest, done: ContentTypeParserDoneFunction) => void)\n\n/**\n * Natively, Fastify only supports 'application/json' and 'text/plain' content types. The default charset is utf-8. If you need to support different content types, you can use the addContentTypeParser API. The default JSON and/or plain text parser can be changed.\n */\nexport interface AddContentTypeParser<\n  RawServer extends RawServerBase = RawServerDefault,\n  RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,\n  RouteGeneric extends RouteGenericInterface = RouteGenericInterface,\n  SchemaCompiler extends FastifySchema = FastifySchema,\n  TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,\n> {\n  (\n    contentType: string | string[] | RegExp,\n    opts: {\n      bodyLimit?: number;\n    },\n    parser: FastifyContentTypeParser<RawServer, RawRequest, RouteGeneric, SchemaCompiler, TypeProvider>\n  ): void;\n  (contentType: string | string[] | RegExp, parser: FastifyContentTypeParser<RawServer, RawRequest, RouteGeneric, SchemaCompiler, TypeProvider>): void;\n  <parseAs extends string | Buffer>(\n    contentType: string | string[] | RegExp,\n    opts: {\n      parseAs: parseAs extends Buffer ? 'buffer' : 'string';\n      bodyLimit?: number;\n    },\n    parser: FastifyBodyParser<parseAs, RawServer, RawRequest, RouteGeneric, SchemaCompiler, TypeProvider>\n  ): void;\n}\n\n/**\n * Checks for a type parser of a content type\n */\nexport type hasContentTypeParser = (contentType: string | RegExp) => boolean\n\nexport type ProtoAction = 'error' | 'remove' | 'ignore'\n\nexport type ConstructorAction = 'error' | 'remove' | 'ignore'\n\nexport type getDefaultJsonParser = (onProtoPoisoning: ProtoAction, onConstructorPoisoning: ConstructorAction) => FastifyBodyParser<string>\n\nexport type removeContentTypeParser = (contentType: string | RegExp | (string | RegExp)[]) => void\n\nexport type removeAllContentTypeParsers = () => void\n\"/docs/Guides/Migration-Guide-V4.md\u0016\u0010# V4 Migration Guide\n\nThis guide is intended to help with migration from Fastify v3 to v4.\n\nBefore migrating to v4, please ensure that you have fixed all deprecation\nwarnings from v3. All v3 deprecations have been removed and they will no longer\nwork after upgrading.\n\n## Breaking Changes\n\n### Error handling composition ([#3261](https://github.com/fastify/fastify/pull/3261))\n\nWhen an error is thrown in an async error handler function, the upper-level\nerror handler is executed if set. If there is no upper-level error handler,\nthe default will be executed as it was previously:\n\n```js\nimport Fastify from 'fastify'\n\nconst fastify = Fastify()\n\nfastify.register(async fastify => {\n  fastify.setErrorHandler(async err => {\n    console.log(err.message) // 'kaboom'\n    throw new Error('caught')\n  })\n  \n  fastify.get('/encapsulated', async () => {\n    throw new Error('kaboom')\n  })\n})\n\nfastify.setErrorHandler(async err => {\n  console.log(err.message) // 'caught' \n  throw new Error('wrapped')\n})\n\nconst res = await fastify.inject('/encapsulated')\nconsole.log(res.json().message) // 'wrapped'\n```\n\n>The root error handler is Fastify’s generic error handler. \n>This error handler will use the headers and status code in the Error object, \n>if they exist. **The headers and status code will not be automatically set if\n>a custom error handler is provided**. \n\n### Removed `app.use()` ([#3506](https://github.com/fastify/fastify/pull/3506))\n\nWith v4 of Fastify, `app.use()` has been removed and the use of middleware is\nno longer supported.\n\nIf you need to use middleware, use\n[`@fastify/middie`](https://github.com/fastify/middie) or\n[`@fastify/express`](https://github.com/fastify/fastify-express), which will\ncontinue to be maintained.\nHowever, it is strongly recommended that you migrate to Fastify's [hooks](../Reference/Hooks.md).\n\n### `reply.res` moved to `reply.raw`\n\nIf you previously used the `reply.res` attribute to access the underlying Request\nobject you will now need to use `reply.raw`.\n\n### Need to `return reply` to signal a \"fork\" of the promise chain\n\nIn some situations, like when a response is sent asynchronously or when you are\nnot explicitly returning a response, you will now need to return the `reply`\nargument from your router handler.\n\n### `exposeHeadRoutes` true by default\n\nStarting with v4, every `GET` route will create a sibling `HEAD` route.\nYou can revert this behavior by setting `exposeHeadRoutes: false` in the server options.\n\n### Synchronous route definitions ([#2954](https://github.com/fastify/fastify/pull/2954))\n\nTo improve error reporting in route definitions, route registration is now synchronous.\nAs a result, if you specify an `onRoute` hook in a plugin you should now either:\n* wrap your routes in a plugin (recommended)\n\n  For example, refactor this:\n  ```js\n  fastify.register((instance, opts, done) => {\n    instance.addHook('onRoute', (routeOptions) => {\n      const { path, method } = routeOptions;\n      console.log({ path, method });\n      done();\n    });\n  });\n\n  fastify.get('/', (request, reply) => { reply.send('hello') });\n  ```\n\n  Into this:\n  ```js\n  fastify.register((instance, opts, done) => {\n    instance.addHook('onRoute', (routeOptions) => {\n      const { path, method } = routeOptions;\n      console.log({ path, method });\n      done();\n    });\n  });\n\n  fastify.register((instance, opts, done) => {\n    instance.get('/', (request, reply) => { reply.send('hello') });\n    done();\n  });\n  ```\n\n* use `await register(...)`\n\n  For example, refactor this:\n  ```js\n  fastify.register((instance, opts, done) => {\n    instance.addHook('onRoute', (routeOptions) => {\n      const { path, method } = routeOptions;\n      console.log({ path, method });\n    });\n    done();\n  });\n  ```\n\n  Into this:\n  ```js\n  await fastify.register((instance, opts, done) => {\n    instance.addHook('onRoute', (routeOptions) => {\n      const { path, method } = routeOptions;\n      console.log({ path, method });\n    });\n    done();\n  });\n  ```\n\n## Non-Breaking Changes\n\n### Deprecation of variadic `.listen()` signature\n\nThe [variadic signature](https://en.wikipedia.org/wiki/Variadic_function) of the\n`fastify.listen()` method is now deprecated.\n\nPrior to this release, the following invocations of this method were valid:\n\n  - `fastify.listen(8000)`\n  - `fastify.listen(8000, ‘127.0.0.1’)`\n  - `fastify.listen(8000, ‘127.0.0.1’, 511)`\n  - `fastify.listen(8000, (err) => { if (err) throw err })`\n  - `fastify.listen({ port: 8000 }, (err) => { if (err) throw err })`\n\nWith Fastify v4, only the following invocations are valid:\n\n  - `fastify.listen()`\n  - `fastify.listen({ port: 8000 })`\n  - `fastify.listen({ port: 8000 }, (err) => { if (err) throw err })`\n\n### Change of schema for multiple types\n\nAjv has been upgraded to v8 in Fastify v4, meaning \"type\" keywords with multiple\ntypes other than \"null\"\n[are now prohibited](https://ajv.js.org/strict-mode.html#strict-types).\n\nYou may encounter a console warning such as:\n```sh\nstrict mode: use allowUnionTypes to allow union type keyword at \"#/properties/image\" (strictTypes)\n```\n\nAs such, schemas like below will need to be changed from:\n```\ntype: 'object',\nproperties: {\n  api_key: { type: 'string' },\n  image: { type: ['object', 'array'] }\n  }\n}\n```\n\nInto:\n```\ntype: 'object',\nproperties: {\n  api_key: { type: 'string' },\n  image: {\n    anyOf: [\n      { type: 'array' },\n      { type: 'object' }\n    ]\n  }\n}\n```\n\n### Add `reply.trailers` methods ([#3794](https://github.com/fastify/fastify/pull/3794))\n\nFastify now supports the [HTTP Trailer] response headers.\n\n\n[HTTP Trailer]: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Trailer\n\"/test/bundler/esbuild/package.json\u0001\u0014{\n  \"version\": \"0.0.1\",\n  \"scripts\": {\n    \"bundle\": \"esbuild success=src/index.js failPlugin=src/fail-plugin-version.js --bundle  --outdir=dist --platform=node\",\n    \"test\": \"npm run bundle && node bundler-test.js\"\n  },\n  \"devDependencies\": {\n    \"esbuild\": \"^0.14.11\"\n  }\n}\n/types/plugin.d.ts\b\u0003import { FastifyInstance } from './instance'\nimport { RawServerBase, RawRequestDefaultExpression, RawReplyDefaultExpression, RawServerDefault } from './utils'\nimport { FastifyTypeProvider, FastifyTypeProviderDefault } from './type-provider'\nimport { FastifyBaseLogger } from './logger'\n\nexport type FastifyPluginOptions = Record<string, any>\n\n/**\n * FastifyPluginCallback\n *\n * Fastify allows the user to extend its functionalities with plugins. A plugin can be a set of routes, a server decorator or whatever. To activate plugins, use the `fastify.register()` method.\n */\nexport type FastifyPluginCallback<\n  Options extends FastifyPluginOptions = Record<never, never>,\n  Server extends RawServerBase = RawServerDefault,\n  TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,\n  Logger extends FastifyBaseLogger = FastifyBaseLogger,\n> = (\n  instance: FastifyInstance<Server, RawRequestDefaultExpression<Server>, RawReplyDefaultExpression<Server>, Logger, TypeProvider>,\n  opts: Options,\n  done: (err?: Error) => void\n) => void\n\n/**\n * FastifyPluginAsync\n *\n * Fastify allows the user to extend its functionalities with plugins. A plugin can be a set of routes, a server decorator or whatever. To activate plugins, use the `fastify.register()` method.\n */\nexport type FastifyPluginAsync<\n  Options extends FastifyPluginOptions = Record<never, never>,\n  Server extends RawServerBase = RawServerDefault,\n  TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,\n  Logger extends FastifyBaseLogger = FastifyBaseLogger,\n> = (\n  instance: FastifyInstance<Server, RawRequestDefaultExpression<Server>, RawReplyDefaultExpression<Server>, Logger, TypeProvider>,\n  opts: Options\n) => Promise<void>;\n\n/**\n * Generic plugin type.\n * @deprecated union type doesn't work well with type inference in TS and is therefore deprecated in favor of explicit types. See FastifyRegister.\n */\nexport type FastifyPlugin<Options extends FastifyPluginOptions = Record<never, never>> = FastifyPluginCallback<Options> | FastifyPluginAsync<Options>\n/test/custom-parser.test.jsŞ2'use strict'\n\nconst fs = require('fs')\nconst t = require('tap')\nconst test = t.test\nconst sget = require('simple-get').concat\nconst Fastify = require('..')\n\nconst jsonParser = require('fast-json-body')\n\nfunction plainTextParser (request, callback) {\n  let body = ''\n  request.setEncoding('utf8')\n  request.on('error', onError)\n  request.on('data', onData)\n  request.on('end', onEnd)\n  function onError (err) {\n    callback(err, null)\n  }\n  function onData (chunk) {\n    body += chunk\n  }\n  function onEnd () {\n    callback(null, body)\n  }\n}\n\nfunction getUrl (app) {\n  const { address, port } = app.server.address()\n  if (address === '::1') {\n    return `http://[${address}]:${port}`\n  } else {\n    return `http://${address}:${port}`\n  }\n}\n\nprocess.removeAllListeners('warning')\n\ntest('contentTypeParser method should exist', t => {\n  t.plan(1)\n  const fastify = Fastify()\n  t.ok(fastify.addContentTypeParser)\n})\n\ntest('contentTypeParser should add a custom parser', t => {\n  t.plan(3)\n  const fastify = Fastify()\n\n  fastify.post('/', (req, reply) => {\n    reply.send(req.body)\n  })\n\n  fastify.options('/', (req, reply) => {\n    reply.send(req.body)\n  })\n\n  fastify.addContentTypeParser('application/jsoff', function (req, payload, done) {\n    jsonParser(payload, function (err, body) {\n      done(err, body)\n    })\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n\n    t.teardown(() => fastify.close())\n\n    t.test('in POST', t => {\n      t.plan(3)\n\n      sget({\n        method: 'POST',\n        url: getUrl(fastify),\n        body: '{\"hello\":\"world\"}',\n        headers: {\n          'Content-Type': 'application/jsoff'\n        }\n      }, (err, response, body) => {\n        t.error(err)\n        t.equal(response.statusCode, 200)\n        t.same(body.toString(), JSON.stringify({ hello: 'world' }))\n      })\n    })\n\n    t.test('in OPTIONS', t => {\n      t.plan(3)\n\n      sget({\n        method: 'OPTIONS',\n        url: getUrl(fastify),\n        body: '{\"hello\":\"world\"}',\n        headers: {\n          'Content-Type': 'application/jsoff'\n        }\n      }, (err, response, body) => {\n        t.error(err)\n        t.equal(response.statusCode, 200)\n        t.same(body.toString(), JSON.stringify({ hello: 'world' }))\n      })\n    })\n  })\n})\n\ntest('contentTypeParser should handle multiple custom parsers', t => {\n  t.plan(7)\n  const fastify = Fastify()\n\n  fastify.post('/', (req, reply) => {\n    reply.send(req.body)\n  })\n\n  fastify.post('/hello', (req, reply) => {\n    reply.send(req.body)\n  })\n\n  function customParser (req, payload, done) {\n    jsonParser(payload, function (err, body) {\n      done(err, body)\n    })\n  }\n\n  fastify.addContentTypeParser('application/jsoff', customParser)\n  fastify.addContentTypeParser('application/ffosj', customParser)\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    sget({\n      method: 'POST',\n      url: getUrl(fastify),\n      body: '{\"hello\":\"world\"}',\n      headers: {\n        'Content-Type': 'application/jsoff'\n      }\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.same(body.toString(), JSON.stringify({ hello: 'world' }))\n    })\n\n    sget({\n      method: 'POST',\n      url: getUrl(fastify) + '/hello',\n      body: '{\"hello\":\"world\"}',\n      headers: {\n        'Content-Type': 'application/ffosj'\n      }\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.same(body.toString(), JSON.stringify({ hello: 'world' }))\n    })\n  })\n})\n\ntest('contentTypeParser should handle an array of custom contentTypes', t => {\n  t.plan(7)\n  const fastify = Fastify()\n\n  fastify.post('/', (req, reply) => {\n    reply.send(req.body)\n  })\n\n  fastify.post('/hello', (req, reply) => {\n    reply.send(req.body)\n  })\n\n  function customParser (req, payload, done) {\n    jsonParser(payload, function (err, body) {\n      done(err, body)\n    })\n  }\n\n  fastify.addContentTypeParser(['application/jsoff', 'application/ffosj'], customParser)\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    sget({\n      method: 'POST',\n      url: getUrl(fastify),\n      body: '{\"hello\":\"world\"}',\n      headers: {\n        'Content-Type': 'application/jsoff'\n      }\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.same(body.toString(), JSON.stringify({ hello: 'world' }))\n    })\n\n    sget({\n      method: 'POST',\n      url: getUrl(fastify) + '/hello',\n      body: '{\"hello\":\"world\"}',\n      headers: {\n        'Content-Type': 'application/ffosj'\n      }\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.same(body.toString(), JSON.stringify({ hello: 'world' }))\n    })\n  })\n})\n\ntest('contentTypeParser should handle errors', t => {\n  t.plan(3)\n  const fastify = Fastify()\n\n  fastify.post('/', (req, reply) => {\n    reply.send(req.body)\n  })\n\n  fastify.addContentTypeParser('application/jsoff', function (req, payload, done) {\n    done(new Error('kaboom!'), {})\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n\n    sget({\n      method: 'POST',\n      url: getUrl(fastify),\n      body: '{\"hello\":\"world\"}',\n      headers: {\n        'Content-Type': 'application/jsoff'\n      }\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 500)\n      fastify.close()\n    })\n  })\n})\n\ntest('contentTypeParser should support encapsulation', t => {\n  t.plan(6)\n  const fastify = Fastify()\n\n  fastify.register((instance, opts, done) => {\n    instance.addContentTypeParser('application/jsoff', () => {})\n    t.ok(instance.hasContentTypeParser('application/jsoff'))\n\n    instance.register((instance, opts, done) => {\n      instance.addContentTypeParser('application/ffosj', () => {})\n      t.ok(instance.hasContentTypeParser('application/jsoff'))\n      t.ok(instance.hasContentTypeParser('application/ffosj'))\n      done()\n    })\n\n    done()\n  })\n\n  fastify.ready(err => {\n    t.error(err)\n    t.notOk(fastify.hasContentTypeParser('application/jsoff'))\n    t.notOk(fastify.hasContentTypeParser('application/ffosj'))\n  })\n})\n\ntest('contentTypeParser should support encapsulation, second try', t => {\n  t.plan(4)\n  const fastify = Fastify()\n\n  fastify.register((instance, opts, done) => {\n    instance.post('/', (req, reply) => {\n      reply.send(req.body)\n    })\n\n    instance.addContentTypeParser('application/jsoff', function (req, payload, done) {\n      jsonParser(payload, function (err, body) {\n        done(err, body)\n      })\n    })\n\n    done()\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n\n    sget({\n      method: 'POST',\n      url: getUrl(fastify),\n      body: '{\"hello\":\"world\"}',\n      headers: {\n        'Content-Type': 'application/jsoff'\n      }\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.same(body.toString(), JSON.stringify({ hello: 'world' }))\n      fastify.close()\n    })\n  })\n})\n\ntest('contentTypeParser shouldn\\'t support request with undefined \"Content-Type\"', t => {\n  t.plan(3)\n  const fastify = Fastify()\n\n  fastify.post('/', (req, reply) => {\n    reply.send(req.body)\n  })\n\n  fastify.addContentTypeParser('application/jsoff', function (req, payload, done) {\n    jsonParser(payload, function (err, body) {\n      done(err, body)\n    })\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n\n    sget({\n      method: 'POST',\n      url: getUrl(fastify),\n      body: 'unknown content type!',\n      headers: {\n        // 'Content-Type': undefined\n      }\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 415)\n      fastify.close()\n    })\n  })\n})\n\ntest('the content type should be a string or RegExp', t => {\n  t.plan(2)\n  const fastify = Fastify()\n\n  try {\n    fastify.addContentTypeParser(null, () => {})\n    t.fail()\n  } catch (err) {\n    t.equal(err.code, 'FST_ERR_CTP_INVALID_TYPE')\n    t.equal(err.message, 'The content type should be a string or a RegExp')\n  }\n})\n\ntest('the content type cannot be an empty string', t => {\n  t.plan(2)\n  const fastify = Fastify()\n\n  try {\n    fastify.addContentTypeParser('', () => {})\n    t.fail()\n  } catch (err) {\n    t.equal(err.code, 'FST_ERR_CTP_EMPTY_TYPE')\n    t.equal(err.message, 'The content type cannot be an empty string')\n  }\n})\n\ntest('the content type handler should be a function', t => {\n  t.plan(2)\n  const fastify = Fastify()\n\n  try {\n    fastify.addContentTypeParser('aaa', null)\n    t.fail()\n  } catch (err) {\n    t.equal(err.code, 'FST_ERR_CTP_INVALID_HANDLER')\n    t.equal(err.message, 'The content type handler should be a function')\n  }\n})\n\ntest('catch all content type parser', t => {\n  t.plan(7)\n  const fastify = Fastify()\n\n  fastify.post('/', (req, reply) => {\n    reply.send(req.body)\n  })\n\n  fastify.addContentTypeParser('*', function (req, payload, done) {\n    let data = ''\n    payload.on('data', chunk => { data += chunk })\n    payload.on('end', () => {\n      done(null, data)\n    })\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n\n    sget({\n      method: 'POST',\n      url: getUrl(fastify),\n      body: 'hello',\n      headers: {\n        'Content-Type': 'application/jsoff'\n      }\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.same(body.toString(), 'hello')\n\n      sget({\n        method: 'POST',\n        url: getUrl(fastify),\n        body: 'hello',\n        headers: {\n          'Content-Type': 'very-weird-content-type'\n        }\n      }, (err, response, body) => {\n        t.error(err)\n        t.equal(response.statusCode, 200)\n        t.same(body.toString(), 'hello')\n        fastify.close()\n      })\n    })\n  })\n})\n\ntest('catch all content type parser should not interfere with other conte type parsers', t => {\n  t.plan(7)\n  const fastify = Fastify()\n\n  fastify.post('/', (req, reply) => {\n    reply.send(req.body)\n  })\n\n  fastify.addContentTypeParser('*', function (req, payload, done) {\n    let data = ''\n    payload.on('data', chunk => { data += chunk })\n    payload.on('end', () => {\n      done(null, data)\n    })\n  })\n\n  fastify.addContentTypeParser('application/jsoff', function (req, payload, done) {\n    jsonParser(payload, function (err, body) {\n      done(err, body)\n    })\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n\n    sget({\n      method: 'POST',\n      url: getUrl(fastify),\n      body: '{\"hello\":\"world\"}',\n      headers: {\n        'Content-Type': 'application/jsoff'\n      }\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.same(body.toString(), JSON.stringify({ hello: 'world' }))\n\n      sget({\n        method: 'POST',\n        url: getUrl(fastify),\n        body: 'hello',\n        headers: {\n          'Content-Type': 'very-weird-content-type'\n        }\n      }, (err, response, body) => {\n        t.error(err)\n        t.equal(response.statusCode, 200)\n        t.same(body.toString(), 'hello')\n        fastify.close()\n      })\n    })\n  })\n})\n\n// Issue 492 https://github.com/fastify/fastify/issues/492\ntest('\\'*\\' catch undefined Content-Type requests', t => {\n  t.plan(4)\n\n  const fastify = Fastify()\n\n  t.teardown(fastify.close.bind(fastify))\n\n  fastify.addContentTypeParser('*', function (req, payload, done) {\n    let data = ''\n    payload.on('data', chunk => { data += chunk })\n    payload.on('end', () => {\n      done(null, data)\n    })\n  })\n\n  fastify.post('/', (req, res) => {\n    // Needed to avoid json stringify\n    res.type('text/plain').send(req.body)\n  })\n\n  fastify.listen({ port: 0 }, function (err) {\n    t.error(err)\n\n    const fileStream = fs.createReadStream(__filename)\n\n    sget({\n      method: 'POST',\n      url: getUrl(fastify) + '/',\n      body: fileStream\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(body + '', fs.readFileSync(__filename).toString())\n    })\n  })\n})\n\ntest('cannot add custom parser after binding', t => {\n  t.plan(2)\n\n  const fastify = Fastify()\n\n  t.teardown(fastify.close.bind(fastify))\n\n  fastify.post('/', (req, res) => {\n    res.type('text/plain').send(req.body)\n  })\n\n  fastify.listen({ port: 0 }, function (err) {\n    t.error(err)\n\n    try {\n      fastify.addContentTypeParser('*', () => {})\n      t.fail()\n    } catch (e) {\n      t.pass()\n    }\n  })\n})\n\ntest('Can override the default json parser', t => {\n  t.plan(5)\n  const fastify = Fastify()\n\n  fastify.post('/', (req, reply) => {\n    reply.send(req.body)\n  })\n\n  fastify.addContentTypeParser('application/json', function (req, payload, done) {\n    t.ok('called')\n    jsonParser(payload, function (err, body) {\n      done(err, body)\n    })\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n\n    sget({\n      method: 'POST',\n      url: getUrl(fastify),\n      body: '{\"hello\":\"world\"}',\n      headers: {\n        'Content-Type': 'application/json'\n      }\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(body.toString(), '{\"hello\":\"world\"}')\n      fastify.close()\n    })\n  })\n})\n\ntest('Can override the default plain text parser', t => {\n  t.plan(5)\n  const fastify = Fastify()\n\n  fastify.post('/', (req, reply) => {\n    reply.send(req.body)\n  })\n\n  fastify.addContentTypeParser('text/plain', function (req, payload, done) {\n    t.ok('called')\n    plainTextParser(payload, function (err, body) {\n      done(err, body)\n    })\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n\n    sget({\n      method: 'POST',\n      url: getUrl(fastify),\n      body: 'hello world',\n      headers: {\n        'Content-Type': 'text/plain'\n      }\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(body.toString(), 'hello world')\n      fastify.close()\n    })\n  })\n})\n\ntest('Can override the default json parser in a plugin', t => {\n  t.plan(5)\n  const fastify = Fastify()\n\n  fastify.register((instance, opts, done) => {\n    instance.addContentTypeParser('application/json', function (req, payload, done) {\n      t.ok('called')\n      jsonParser(payload, function (err, body) {\n        done(err, body)\n      })\n    })\n\n    instance.post('/', (req, reply) => {\n      reply.send(req.body)\n    })\n\n    done()\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n\n    sget({\n      method: 'POST',\n      url: getUrl(fastify),\n      body: '{\"hello\":\"world\"}',\n      headers: {\n        'Content-Type': 'application/json'\n      }\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(body.toString(), '{\"hello\":\"world\"}')\n      fastify.close()\n    })\n  })\n})\n\ntest('Can\\'t override the json parser multiple times', t => {\n  t.plan(2)\n  const fastify = Fastify()\n\n  fastify.addContentTypeParser('application/json', function (req, payload, done) {\n    jsonParser(payload, function (err, body) {\n      done(err, body)\n    })\n  })\n\n  try {\n    fastify.addContentTypeParser('application/json', function (req, payload, done) {\n      t.ok('called')\n      jsonParser(payload, function (err, body) {\n        done(err, body)\n      })\n    })\n  } catch (err) {\n    t.equal(err.code, 'FST_ERR_CTP_ALREADY_PRESENT')\n    t.equal(err.message, 'Content type parser \\'application/json\\' already present.')\n  }\n})\n\ntest('Can\\'t override the plain text parser multiple times', t => {\n  t.plan(2)\n  const fastify = Fastify()\n\n  fastify.addContentTypeParser('text/plain', function (req, payload, done) {\n    plainTextParser(payload, function (err, body) {\n      done(err, body)\n    })\n  })\n\n  try {\n    fastify.addContentTypeParser('text/plain', function (req, payload, done) {\n      t.ok('called')\n      plainTextParser(payload, function (err, body) {\n        done(err, body)\n      })\n    })\n  } catch (err) {\n    t.equal(err.code, 'FST_ERR_CTP_ALREADY_PRESENT')\n    t.equal(err.message, 'Content type parser \\'text/plain\\' already present.')\n  }\n})\n\ntest('Should get the body as string', t => {\n  t.plan(6)\n  const fastify = Fastify()\n\n  fastify.post('/', (req, reply) => {\n    reply.send(req.body)\n  })\n\n  fastify.addContentTypeParser('application/json', { parseAs: 'string' }, function (req, body, done) {\n    t.ok('called')\n    t.ok(typeof body === 'string')\n    try {\n      const json = JSON.parse(body)\n      done(null, json)\n    } catch (err) {\n      err.statusCode = 400\n      done(err, undefined)\n    }\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n\n    sget({\n      method: 'POST',\n      url: getUrl(fastify),\n      body: '{\"hello\":\"world\"}',\n      headers: {\n        'Content-Type': 'application/json'\n      }\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(body.toString(), '{\"hello\":\"world\"}')\n      fastify.close()\n    })\n  })\n})\n\ntest('Should return defined body with no custom parser defined and content type = \\'text/plain\\'', t => {\n  t.plan(4)\n  const fastify = Fastify()\n\n  fastify.post('/', (req, reply) => {\n    reply.send(req.body)\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n\n    sget({\n      method: 'POST',\n      url: getUrl(fastify),\n      body: 'hello world',\n      headers: {\n        'Content-Type': 'text/plain'\n      }\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(body.toString(), 'hello world')\n      fastify.close()\n    })\n  })\n})\n\ntest('Should have typeof body object with no custom parser defined, no body defined and content type = \\'text/plain\\'', t => {\n  t.plan(4)\n  const fastify = Fastify()\n\n  fastify.post('/', (req, reply) => {\n    reply.send(req.body)\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n\n    sget({\n      method: 'POST',\n      url: getUrl(fastify),\n      headers: {\n        'Content-Type': 'text/plain'\n      }\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(typeof body, 'object')\n      fastify.close()\n    })\n  })\n})\n\ntest('Should have typeof body object with no custom parser defined, null body and content type = \\'text/plain\\'', t => {\n  t.plan(4)\n  const fastify = Fastify()\n\n  fastify.post('/', (req, reply) => {\n    reply.send(req.body)\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n\n    sget({\n      method: 'POST',\n      url: getUrl(fastify),\n      body: null,\n      headers: {\n        'Content-Type': 'text/plain'\n      }\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(typeof body, 'object')\n      fastify.close()\n    })\n  })\n})\n\ntest('Should have typeof body object with no custom parser defined, undefined body and content type = \\'text/plain\\'', t => {\n  t.plan(4)\n  const fastify = Fastify()\n\n  fastify.post('/', (req, reply) => {\n    reply.send(req.body)\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n\n    sget({\n      method: 'POST',\n      url: getUrl(fastify),\n      body: undefined,\n      headers: {\n        'Content-Type': 'text/plain'\n      }\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(typeof body, 'object')\n      fastify.close()\n    })\n  })\n})\n\ntest('Should get the body as string', t => {\n  t.plan(6)\n  const fastify = Fastify()\n\n  fastify.post('/', (req, reply) => {\n    reply.send(req.body)\n  })\n\n  fastify.addContentTypeParser('text/plain', { parseAs: 'string' }, function (req, body, done) {\n    t.ok('called')\n    t.ok(typeof body === 'string')\n    try {\n      const plainText = body\n      done(null, plainText)\n    } catch (err) {\n      err.statusCode = 400\n      done(err, undefined)\n    }\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n\n    sget({\n      method: 'POST',\n      url: getUrl(fastify),\n      body: 'hello world',\n      headers: {\n        'Content-Type': 'text/plain'\n      }\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(body.toString(), 'hello world')\n      fastify.close()\n    })\n  })\n})\n\ntest('Should get the body as buffer', t => {\n  t.plan(6)\n  const fastify = Fastify()\n\n  fastify.post('/', (req, reply) => {\n    reply.send(req.body)\n  })\n\n  fastify.addContentTypeParser('application/json', { parseAs: 'buffer' }, function (req, body, done) {\n    t.ok('called')\n    t.ok(body instanceof Buffer)\n    try {\n      const json = JSON.parse(body)\n      done(null, json)\n    } catch (err) {\n      err.statusCode = 400\n      done(err, undefined)\n    }\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n\n    sget({\n      method: 'POST',\n      url: getUrl(fastify),\n      body: '{\"hello\":\"world\"}',\n      headers: {\n        'Content-Type': 'application/json'\n      }\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(body.toString(), '{\"hello\":\"world\"}')\n      fastify.close()\n    })\n  })\n})\n\ntest('Should get the body as buffer', t => {\n  t.plan(6)\n  const fastify = Fastify()\n\n  fastify.post('/', (req, reply) => {\n    reply.send(req.body)\n  })\n\n  fastify.addContentTypeParser('text/plain', { parseAs: 'buffer' }, function (req, body, done) {\n    t.ok('called')\n    t.ok(body instanceof Buffer)\n    try {\n      const plainText = body\n      done(null, plainText)\n    } catch (err) {\n      err.statusCode = 400\n      done(err, undefined)\n    }\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n\n    sget({\n      method: 'POST',\n      url: getUrl(fastify),\n      body: 'hello world',\n      headers: {\n        'Content-Type': 'text/plain'\n      }\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(body.toString(), 'hello world')\n      fastify.close()\n    })\n  })\n})\n\ntest('Should parse empty bodies as a string', t => {\n  t.plan(9)\n  const fastify = Fastify()\n\n  fastify.addContentTypeParser('text/plain', { parseAs: 'string' }, (req, body, done) => {\n    t.equal(body, '')\n    done(null, body)\n  })\n\n  fastify.route({\n    method: ['POST', 'DELETE'],\n    url: '/',\n    handler (request, reply) {\n      reply.send(request.body)\n    }\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    sget({\n      method: 'POST',\n      url: getUrl(fastify),\n      body: '',\n      headers: {\n        'Content-Type': 'text/plain'\n      }\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(body.toString(), '')\n    })\n\n    sget({\n      method: 'DELETE',\n      url: getUrl(fastify),\n      body: '',\n      headers: {\n        'Content-Type': 'text/plain',\n        'Content-Length': '0'\n      }\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(body.toString(), '')\n    })\n  })\n})\n\ntest('Should parse empty bodies as a buffer', t => {\n  t.plan(6)\n  const fastify = Fastify()\n\n  fastify.post('/', (req, reply) => {\n    reply.send(req.body)\n  })\n\n  fastify.addContentTypeParser('text/plain', { parseAs: 'buffer' }, function (req, body, done) {\n    t.ok(body instanceof Buffer)\n    t.equal(body.length, 0)\n    done(null, body)\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n\n    sget({\n      method: 'POST',\n      url: getUrl(fastify),\n      body: '',\n      headers: {\n        'Content-Type': 'text/plain'\n      }\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(body.length, 0)\n      fastify.close()\n    })\n  })\n})\n\ntest('The charset should not interfere with the content type handling', t => {\n  t.plan(5)\n  const fastify = Fastify()\n\n  fastify.post('/', (req, reply) => {\n    reply.send(req.body)\n  })\n\n  fastify.addContentTypeParser('application/json', function (req, payload, done) {\n    t.ok('called')\n    jsonParser(payload, function (err, body) {\n      done(err, body)\n    })\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n\n    sget({\n      method: 'POST',\n      url: getUrl(fastify),\n      body: '{\"hello\":\"world\"}',\n      headers: {\n        'Content-Type': 'application/json; charset=utf-8'\n      }\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(body.toString(), '{\"hello\":\"world\"}')\n      fastify.close()\n    })\n  })\n})\n\ntest('Wrong parseAs parameter', t => {\n  t.plan(2)\n  const fastify = Fastify()\n\n  try {\n    fastify.addContentTypeParser('application/json', { parseAs: 'fireworks' }, () => {})\n    t.fail('should throw')\n  } catch (err) {\n    t.equal(err.code, 'FST_ERR_CTP_INVALID_PARSE_TYPE')\n    t.equal(err.message, \"The body parser can only parse your data as 'string' or 'buffer', you asked 'fireworks' which is not supported.\")\n  }\n})\n\ntest('Should allow defining the bodyLimit per parser', t => {\n  t.plan(3)\n  const fastify = Fastify()\n  t.teardown(() => fastify.close())\n\n  fastify.post('/', (req, reply) => {\n    reply.send(req.body)\n  })\n\n  fastify.addContentTypeParser(\n    'x/foo',\n    { parseAs: 'string', bodyLimit: 5 },\n    function (req, body, done) {\n      t.fail('should not be invoked')\n      done()\n    }\n  )\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n\n    sget({\n      method: 'POST',\n      url: getUrl(fastify),\n      body: '1234567890',\n      headers: {\n        'Content-Type': 'x/foo'\n      }\n    }, (err, response, body) => {\n      t.error(err)\n      t.strictSame(JSON.parse(body.toString()), {\n        statusCode: 413,\n        code: 'FST_ERR_CTP_BODY_TOO_LARGE',\n        error: 'Payload Too Large',\n        message: 'Request body is too large'\n      })\n      fastify.close()\n    })\n  })\n})\n\ntest('route bodyLimit should take precedence over a custom parser bodyLimit', t => {\n  t.plan(3)\n  const fastify = Fastify()\n  t.teardown(() => fastify.close())\n\n  fastify.post('/', { bodyLimit: 5 }, (request, reply) => {\n    reply.send(request.body)\n  })\n\n  fastify.addContentTypeParser(\n    'x/foo',\n    { parseAs: 'string', bodyLimit: 100 },\n    function (req, body, done) {\n      t.fail('should not be invoked')\n      done()\n    }\n  )\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n\n    sget({\n      method: 'POST',\n      url: getUrl(fastify),\n      body: '1234567890',\n      headers: { 'Content-Type': 'x/foo' }\n    }, (err, response, body) => {\n      t.error(err)\n      t.strictSame(JSON.parse(body.toString()), {\n        statusCode: 413,\n        code: 'FST_ERR_CTP_BODY_TOO_LARGE',\n        error: 'Payload Too Large',\n        message: 'Request body is too large'\n      })\n      fastify.close()\n    })\n  })\n})\n\ntest('should be able to use default parser for extra content type', t => {\n  t.plan(4)\n  const fastify = Fastify()\n  t.teardown(() => fastify.close())\n\n  fastify.post('/', (request, reply) => {\n    reply.send(request.body)\n  })\n\n  fastify.addContentTypeParser('text/json', { parseAs: 'string' }, fastify.getDefaultJsonParser('ignore', 'ignore'))\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n\n    sget({\n      method: 'POST',\n      url: getUrl(fastify),\n      body: '{\"hello\":\"world\"}',\n      headers: {\n        'Content-Type': 'text/json'\n      }\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.strictSame(JSON.parse(body.toString()), { hello: 'world' })\n      fastify.close()\n    })\n  })\n})\n\ntest('contentTypeParser should add a custom parser with RegExp value', t => {\n  t.plan(3)\n\n  const fastify = Fastify()\n\n  fastify.post('/', (req, reply) => {\n    reply.send(req.body)\n  })\n\n  fastify.options('/', (req, reply) => {\n    reply.send(req.body)\n  })\n\n  fastify.addContentTypeParser(/.*\\+json$/, function (req, payload, done) {\n    jsonParser(payload, function (err, body) {\n      done(err, body)\n    })\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n\n    t.teardown(() => fastify.close())\n\n    t.test('in POST', t => {\n      t.plan(3)\n\n      sget({\n        method: 'POST',\n        url: getUrl(fastify),\n        body: '{\"hello\":\"world\"}',\n        headers: {\n          'Content-Type': 'application/vnd.test+json'\n        }\n      }, (err, response, body) => {\n        t.error(err)\n        t.equal(response.statusCode, 200)\n        t.same(body.toString(), JSON.stringify({ hello: 'world' }))\n      })\n    })\n\n    t.test('in OPTIONS', t => {\n      t.plan(3)\n\n      sget({\n        method: 'OPTIONS',\n        url: getUrl(fastify),\n        body: '{\"hello\":\"world\"}',\n        headers: {\n          'Content-Type': 'weird/content-type+json'\n        }\n      }, (err, response, body) => {\n        t.error(err)\n        t.equal(response.statusCode, 200)\n        t.same(body.toString(), JSON.stringify({ hello: 'world' }))\n      })\n    })\n  })\n})\n\ntest('contentTypeParser should add multiple custom parsers with RegExp values', async t => {\n  t.plan(6)\n  const fastify = Fastify()\n  t.teardown(fastify.close.bind(fastify))\n\n  fastify.post('/', (req, reply) => {\n    reply.send(req.body)\n  })\n\n  fastify.addContentTypeParser(/.*\\+json$/, function (req, payload, done) {\n    jsonParser(payload, function (err, body) {\n      done(err, body)\n    })\n  })\n\n  fastify.addContentTypeParser(/.*\\+xml$/, function (req, payload, done) {\n    done(null, 'xml')\n  })\n\n  fastify.addContentTypeParser(/.*\\+myExtension$/i, function (req, payload, done) {\n    let data = ''\n    payload.on('data', chunk => { data += chunk })\n    payload.on('end', () => {\n      done(null, data + 'myExtension')\n    })\n  })\n\n  await fastify.ready()\n\n  {\n    const response = await fastify.inject({\n      method: 'POST',\n      url: '/',\n      body: '{\"hello\":\"world\"}',\n      headers: {\n        'Content-Type': 'application/vnd.hello+json'\n      }\n    })\n    t.equal(response.statusCode, 200)\n    t.same(response.payload.toString(), '{\"hello\":\"world\"}')\n  }\n\n  {\n    const response = await fastify.inject({\n      method: 'POST',\n      url: '/',\n      body: '{\"hello\":\"world\"}',\n      headers: {\n        'Content-Type': 'application/test+xml'\n      }\n    })\n    t.equal(response.statusCode, 200)\n    t.same(response.payload.toString(), 'xml')\n  }\n\n  await fastify.inject({\n    method: 'POST',\n    path: '/',\n    payload: 'abcdefg',\n    headers: {\n      'Content-Type': 'application/+myExtension'\n    }\n  }).then((response) => {\n    t.equal(response.statusCode, 200)\n    t.same(response.payload.toString(), 'abcdefgmyExtension')\n  }).catch((err) => {\n    t.error(err)\n  })\n})\n\ntest('catch all content type parser should not interfere with content type parser', t => {\n  t.plan(10)\n  const fastify = Fastify()\n  t.teardown(fastify.close.bind(fastify))\n\n  fastify.post('/', (req, reply) => {\n    reply.send(req.body)\n  })\n\n  fastify.addContentTypeParser('*', function (req, payload, done) {\n    let data = ''\n    payload.on('data', chunk => { data += chunk })\n    payload.on('end', () => {\n      done(null, data)\n    })\n  })\n\n  fastify.addContentTypeParser(/^application\\/.*/, function (req, payload, done) {\n    jsonParser(payload, function (err, body) {\n      done(err, body)\n    })\n  })\n\n  fastify.addContentTypeParser('text/html', function (req, payload, done) {\n    let data = ''\n    payload.on('data', chunk => { data += chunk })\n    payload.on('end', () => {\n      done(null, data + 'html')\n    })\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n\n    sget({\n      method: 'POST',\n      url: getUrl(fastify),\n      body: '{\"myKey\":\"myValue\"}',\n      headers: {\n        'Content-Type': 'application/json'\n      }\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.same(body.toString(), JSON.stringify({ myKey: 'myValue' }))\n    })\n\n    sget({\n      method: 'POST',\n      url: getUrl(fastify),\n      body: 'body',\n      headers: {\n        'Content-Type': 'very-weird-content-type'\n      }\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.same(body.toString(), 'body')\n    })\n\n    sget({\n      method: 'POST',\n      url: getUrl(fastify),\n      body: 'my text',\n      headers: {\n        'Content-Type': 'text/html'\n      }\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.same(body.toString(), 'my texthtml')\n    })\n  })\n})\n\ntest('should prefer string content types over RegExp ones', t => {\n  t.plan(7)\n  const fastify = Fastify()\n  t.teardown(fastify.close.bind(fastify))\n\n  fastify.post('/', (req, reply) => {\n    reply.send(req.body)\n  })\n\n  fastify.addContentTypeParser(/^application\\/.*/, function (req, payload, done) {\n    let data = ''\n    payload.on('data', chunk => { data += chunk })\n    payload.on('end', () => {\n      done(null, data)\n    })\n  })\n\n  fastify.addContentTypeParser('application/json', function (req, payload, done) {\n    jsonParser(payload, function (err, body) {\n      done(err, body)\n    })\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n\n    sget({\n      method: 'POST',\n      url: getUrl(fastify),\n      body: '{\"k1\":\"myValue\", \"k2\": \"myValue\"}',\n      headers: {\n        'Content-Type': 'application/json'\n      }\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.same(body.toString(), JSON.stringify({ k1: 'myValue', k2: 'myValue' }))\n    })\n\n    sget({\n      method: 'POST',\n      url: getUrl(fastify),\n      body: 'javascript',\n      headers: {\n        'Content-Type': 'application/javascript'\n      }\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.same(body.toString(), 'javascript')\n    })\n  })\n})\n\ntest('removeContentTypeParser should support arrays of content types to remove', t => {\n  t.plan(8)\n\n  const fastify = Fastify()\n  t.teardown(fastify.close.bind(fastify))\n\n  fastify.addContentTypeParser('application/xml', function (req, payload, done) {\n    payload.on('data', () => {})\n    payload.on('end', () => {\n      done(null, 'xml')\n    })\n  })\n\n  fastify.addContentTypeParser(/^image\\/.*/, function (req, payload, done) {\n    payload.on('data', () => {})\n    payload.on('end', () => {\n      done(null, 'image')\n    })\n  })\n\n  fastify.removeContentTypeParser([/^image\\/.*/, 'application/json'])\n\n  fastify.post('/', (req, reply) => {\n    reply.send(req.body)\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n\n    sget({\n      method: 'POST',\n      url: getUrl(fastify),\n      body: '<?xml version=\"1.0\">',\n      headers: {\n        'Content-Type': 'application/xml'\n      }\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.same(body.toString(), 'xml')\n    })\n\n    sget({\n      method: 'POST',\n      url: getUrl(fastify),\n      body: '',\n      headers: {\n        'Content-Type': 'image/png'\n      }\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 415)\n    })\n\n    sget({\n      method: 'POST',\n      url: getUrl(fastify),\n      body: '{test: \"test\"}',\n      headers: {\n        'Content-Type': 'application/json'\n      }\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 415)\n    })\n  })\n})\n\ntest('removeContentTypeParser should support encapsulation', t => {\n  t.plan(6)\n\n  const fastify = Fastify()\n\n  fastify.addContentTypeParser('application/xml', function (req, payload, done) {\n    payload.on('data', () => {})\n    payload.on('end', () => {\n      done(null, 'xml')\n    })\n  })\n\n  fastify.post('/', (req, reply) => {\n    reply.send(req.body)\n  })\n\n  fastify.register(function (instance, options, done) {\n    instance.removeContentTypeParser('application/xml')\n\n    instance.post('/encapsulated', (req, reply) => {\n      reply.send(req.body)\n    })\n\n    done()\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n\n    sget({\n      method: 'POST',\n      url: getUrl(fastify) + '/encapsulated',\n      body: '<?xml version=\"1.0\">',\n      headers: {\n        'Content-Type': 'application/xml'\n      }\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 415)\n    })\n\n    sget({\n      method: 'POST',\n      url: getUrl(fastify),\n      body: '<?xml version=\"1.0\">',\n      headers: {\n        'Content-Type': 'application/xml'\n      }\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.same(body.toString(), 'xml')\n      fastify.close()\n    })\n  })\n})\n\ntest('removeAllContentTypeParsers should support encapsulation', t => {\n  t.plan(6)\n\n  const fastify = Fastify()\n\n  fastify.post('/', (req, reply) => {\n    reply.send(req.body)\n  })\n\n  fastify.register(function (instance, options, done) {\n    instance.removeAllContentTypeParsers()\n\n    instance.post('/encapsulated', (req, reply) => {\n      reply.send(req.body)\n    })\n\n    done()\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n\n    sget({\n      method: 'POST',\n      url: getUrl(fastify) + '/encapsulated',\n      body: '{}',\n      headers: {\n        'Content-Type': 'application/json'\n      }\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 415)\n    })\n\n    sget({\n      method: 'POST',\n      url: getUrl(fastify),\n      body: '{\"test\":1}',\n      headers: {\n        'Content-Type': 'application/json'\n      }\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.same(JSON.parse(body.toString()).test, 1)\n      fastify.close()\n    })\n  })\n})\n\ntest('cannot remove all content type parsers after binding', t => {\n  t.plan(2)\n\n  const fastify = Fastify()\n\n  t.teardown(fastify.close.bind(fastify))\n\n  fastify.listen({ port: 0 }, function (err) {\n    t.error(err)\n\n    t.throws(() => fastify.removeAllContentTypeParsers())\n  })\n})\n\ntest('cannot remove content type parsers after binding', t => {\n  t.plan(2)\n\n  const fastify = Fastify()\n\n  t.teardown(fastify.close.bind(fastify))\n\n  fastify.listen({ port: 0 }, function (err) {\n    t.error(err)\n\n    t.throws(() => fastify.removeContentTypeParser('application/json'))\n  })\n})\n\ntest('should be able to override the default json parser after removeAllContentTypeParsers', t => {\n  t.plan(5)\n\n  const fastify = Fastify()\n\n  fastify.post('/', (req, reply) => {\n    reply.send(req.body)\n  })\n\n  fastify.removeAllContentTypeParsers()\n\n  fastify.addContentTypeParser('application/json', function (req, payload, done) {\n    t.ok('called')\n    jsonParser(payload, function (err, body) {\n      done(err, body)\n    })\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n\n    sget({\n      method: 'POST',\n      url: getUrl(fastify),\n      body: '{\"hello\":\"world\"}',\n      headers: {\n        'Content-Type': 'application/json'\n      }\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.same(body.toString(), JSON.stringify({ hello: 'world' }))\n      fastify.close()\n    })\n  })\n})\n\ntest('should be able to override the default plain text parser after removeAllContentTypeParsers', t => {\n  t.plan(5)\n\n  const fastify = Fastify()\n\n  fastify.post('/', (req, reply) => {\n    reply.send(req.body)\n  })\n\n  fastify.removeAllContentTypeParsers()\n\n  fastify.addContentTypeParser('text/plain', function (req, payload, done) {\n    t.ok('called')\n    plainTextParser(payload, function (err, body) {\n      done(err, body)\n    })\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n\n    sget({\n      method: 'POST',\n      url: getUrl(fastify),\n      body: 'hello world',\n      headers: {\n        'Content-Type': 'text/plain'\n      }\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(body.toString(), 'hello world')\n      fastify.close()\n    })\n  })\n})\n\ntest('should be able to add a custom content type parser after removeAllContentTypeParsers', t => {\n  t.plan(5)\n\n  const fastify = Fastify()\n\n  fastify.post('/', (req, reply) => {\n    reply.send(req.body)\n  })\n\n  fastify.removeAllContentTypeParsers()\n\n  fastify.addContentTypeParser('application/jsoff', function (req, payload, done) {\n    t.ok('called')\n    jsonParser(payload, function (err, body) {\n      done(err, body)\n    })\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n\n    sget({\n      method: 'POST',\n      url: getUrl(fastify),\n      body: '{\"hello\":\"world\"}',\n      headers: {\n        'Content-Type': 'application/jsoff'\n      }\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.same(body.toString(), JSON.stringify({ hello: 'world' }))\n      fastify.close()\n    })\n  })\n})\n/test/content-parser.test.jsB'use strict'\n\nconst t = require('tap')\nconst test = t.test\nconst Fastify = require('..')\nconst keys = require('../lib/symbols')\nconst { FST_ERR_CTP_ALREADY_PRESENT, FST_ERR_CTP_INVALID_TYPE, FST_ERR_CTP_INVALID_MEDIA_TYPE } = require('../lib/errors')\n\nconst first = function (req, payload, done) {}\nconst second = function (req, payload, done) {}\nconst third = function (req, payload, done) {}\n\ntest('hasContentTypeParser', t => {\n  test('should know about internal parsers', t => {\n    t.plan(4)\n\n    const fastify = Fastify()\n    fastify.ready(err => {\n      t.error(err)\n      t.ok(fastify.hasContentTypeParser('application/json'))\n      t.ok(fastify.hasContentTypeParser('text/plain'))\n      t.notOk(fastify.hasContentTypeParser('application/jsoff'))\n    })\n  })\n\n  test('should work with string and RegExp', t => {\n    t.plan(7)\n\n    const fastify = Fastify()\n    fastify.addContentTypeParser(/^image\\/.*/, first)\n    fastify.addContentTypeParser(/^application\\/.+\\+xml/, first)\n    fastify.addContentTypeParser('image/gif', first)\n\n    t.ok(fastify.hasContentTypeParser('application/json'))\n    t.ok(fastify.hasContentTypeParser(/^image\\/.*/))\n    t.ok(fastify.hasContentTypeParser(/^application\\/.+\\+xml/))\n    t.ok(fastify.hasContentTypeParser('image/gif'))\n    t.notOk(fastify.hasContentTypeParser(/^image\\/.+\\+xml/))\n    t.notOk(fastify.hasContentTypeParser('image/png'))\n    t.notOk(fastify.hasContentTypeParser('*'))\n  })\n\n  t.end()\n})\n\ntest('getParser', t => {\n  test('should return matching parser', t => {\n    t.plan(3)\n\n    const fastify = Fastify()\n\n    fastify.addContentTypeParser(/^image\\/.*/, first)\n    fastify.addContentTypeParser(/^application\\/.+\\+xml/, second)\n    fastify.addContentTypeParser('text/html', third)\n\n    t.equal(fastify[keys.kContentTypeParser].getParser('application/t+xml').fn, second)\n    t.equal(fastify[keys.kContentTypeParser].getParser('image/png').fn, first)\n    t.equal(fastify[keys.kContentTypeParser].getParser('text/html').fn, third)\n  })\n\n  test('should return matching parser with caching', t => {\n    t.plan(6)\n\n    const fastify = Fastify()\n\n    fastify.addContentTypeParser('text/html', first)\n\n    t.equal(fastify[keys.kContentTypeParser].getParser('text/html').fn, first)\n    t.equal(fastify[keys.kContentTypeParser].cache.size, 0)\n    t.equal(fastify[keys.kContentTypeParser].getParser('text/html ').fn, first)\n    t.equal(fastify[keys.kContentTypeParser].cache.size, 1)\n    t.equal(fastify[keys.kContentTypeParser].getParser('text/html ').fn, first)\n    t.equal(fastify[keys.kContentTypeParser].cache.size, 1)\n  })\n\n  test('should prefer content type parser with string value', t => {\n    t.plan(2)\n\n    const fastify = Fastify()\n\n    fastify.addContentTypeParser(/^image\\/.*/, first)\n    fastify.addContentTypeParser('image/gif', second)\n\n    t.equal(fastify[keys.kContentTypeParser].getParser('image/gif').fn, second)\n    t.equal(fastify[keys.kContentTypeParser].getParser('image/png').fn, first)\n  })\n\n  test('should return parser that catches all if no other is set', t => {\n    t.plan(3)\n\n    const fastify = Fastify()\n\n    fastify.addContentTypeParser('*', first)\n    fastify.addContentTypeParser(/^text\\/.*/, second)\n\n    t.equal(fastify[keys.kContentTypeParser].getParser('image/gif').fn, first)\n    t.equal(fastify[keys.kContentTypeParser].getParser('text/html').fn, second)\n    t.equal(fastify[keys.kContentTypeParser].getParser('text').fn, first)\n  })\n\n  test('should return undefined if no matching parser exist', t => {\n    t.plan(2)\n\n    const fastify = Fastify()\n\n    fastify.addContentTypeParser(/^weirdType\\/.+/, first)\n    fastify.addContentTypeParser('application/javascript', first)\n\n    t.notOk(fastify[keys.kContentTypeParser].getParser('application/xml'))\n    t.notOk(fastify[keys.kContentTypeParser].getParser('weirdType/'))\n  })\n\n  t.end()\n})\n\ntest('existingParser', t => {\n  test('returns always false for \"*\"', t => {\n    t.plan(2)\n\n    const fastify = Fastify()\n\n    fastify.addContentTypeParser(/^image\\/.*/, first)\n    fastify.addContentTypeParser(/^application\\/.+\\+xml/, first)\n    fastify.addContentTypeParser('text/html', first)\n\n    t.notOk(fastify[keys.kContentTypeParser].existingParser('*'))\n\n    fastify.addContentTypeParser('*', first)\n\n    t.notOk(fastify[keys.kContentTypeParser].existingParser('*'))\n  })\n\n  test('let you override the default parser once', t => {\n    t.plan(2)\n\n    const fastify = Fastify()\n\n    fastify.addContentTypeParser('application/json', first)\n    fastify.addContentTypeParser('text/plain', first)\n\n    t.throws(\n      () => fastify.addContentTypeParser('application/json', first),\n      FST_ERR_CTP_ALREADY_PRESENT,\n      \"Content type parser 'application/json' already present\"\n    )\n    t.throws(\n      () => fastify.addContentTypeParser('text/plain', first),\n      FST_ERR_CTP_ALREADY_PRESENT,\n      \"Content type parser 'text/plain' already present\"\n    )\n  })\n\n  const fastify = Fastify()\n  const contentTypeParser = fastify[keys.kContentTypeParser]\n\n  fastify.addContentTypeParser(/^image\\/.*/, first)\n  fastify.addContentTypeParser(/^application\\/.+\\+xml/, first)\n  fastify.addContentTypeParser('text/html', first)\n\n  t.ok(contentTypeParser.existingParser(/^image\\/.*/))\n  t.ok(contentTypeParser.existingParser('text/html'))\n  t.ok(contentTypeParser.existingParser(/^application\\/.+\\+xml/))\n  t.notOk(contentTypeParser.existingParser('application/json'))\n  t.notOk(contentTypeParser.existingParser('text/plain'))\n  t.notOk(contentTypeParser.existingParser('image/png'))\n  t.notOk(contentTypeParser.existingParser(/^application\\/.+\\+json/))\n\n  t.end()\n})\n\ntest('add', t => {\n  test('should only accept string and RegExp', t => {\n    t.plan(4)\n\n    const fastify = Fastify()\n    const contentTypeParser = fastify[keys.kContentTypeParser]\n\n    t.error(contentTypeParser.add('test', {}, first))\n    t.error(contentTypeParser.add(/test/, {}, first))\n    t.throws(\n      () => contentTypeParser.add({}, {}, first),\n      FST_ERR_CTP_INVALID_TYPE,\n      'The content type should be a string or a RegExp'\n    )\n    t.throws(\n      () => contentTypeParser.add(1, {}, first),\n      FST_ERR_CTP_INVALID_TYPE,\n      'The content type should be a string or a RegExp'\n    )\n  })\n\n  test('should set \"*\" as parser that catches all', t => {\n    t.plan(1)\n\n    const fastify = Fastify()\n    const contentTypeParser = fastify[keys.kContentTypeParser]\n\n    contentTypeParser.add('*', {}, first)\n    t.equal(contentTypeParser.customParsers.get('').fn, first)\n  })\n\n  t.end()\n})\n\ntest('non-Error thrown from content parser is properly handled', t => {\n  t.plan(3)\n\n  const fastify = Fastify()\n\n  const throwable = 'test'\n  const payload = 'error'\n\n  fastify.addContentTypeParser('text/test', (request, payload, done) => {\n    done(throwable)\n  })\n\n  fastify.post('/', (req, reply) => {\n  })\n\n  fastify.setErrorHandler((err, req, res) => {\n    t.equal(err, throwable)\n\n    res.send(payload)\n  })\n\n  fastify.inject({\n    method: 'POST',\n    url: '/',\n    headers: { 'Content-Type': 'text/test' },\n    body: 'some text'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.payload, payload)\n  })\n})\n\ntest('Error thrown 415 from content type is null and make post request to server', t => {\n  t.plan(3)\n\n  const fastify = Fastify()\n  const errMsg = new FST_ERR_CTP_INVALID_MEDIA_TYPE(undefined).message\n\n  fastify.post('/', (req, reply) => {\n  })\n\n  fastify.inject({\n    method: 'POST',\n    url: '/',\n    body: 'some text'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 415)\n    t.equal(JSON.parse(res.body).message, errMsg)\n  })\n})\n\ntest('remove', t => {\n  test('should remove default parser', t => {\n    t.plan(3)\n\n    const fastify = Fastify()\n    const contentTypeParser = fastify[keys.kContentTypeParser]\n\n    t.ok(contentTypeParser.remove('application/json'))\n    t.notOk(contentTypeParser.customParsers['application/json'])\n    t.notOk(contentTypeParser.parserList.find(parser => parser === 'application/json'))\n  })\n\n  test('should remove RegExp parser', t => {\n    t.plan(3)\n\n    const fastify = Fastify()\n    fastify.addContentTypeParser(/^text\\/*/, first)\n\n    const contentTypeParser = fastify[keys.kContentTypeParser]\n\n    t.ok(contentTypeParser.remove(/^text\\/*/))\n    t.notOk(contentTypeParser.customParsers[/^text\\/*/])\n    t.notOk(contentTypeParser.parserRegExpList.find(parser => parser.toString() === /^text\\/*/.toString()))\n  })\n\n  test('should throw an error if content type is neither string nor RegExp', t => {\n    t.plan(1)\n\n    const fastify = Fastify()\n\n    t.throws(() => fastify[keys.kContentTypeParser].remove(12), FST_ERR_CTP_INVALID_TYPE)\n  })\n\n  test('should return false if content type does not exist', t => {\n    t.plan(1)\n\n    const fastify = Fastify()\n\n    t.notOk(fastify[keys.kContentTypeParser].remove('image/png'))\n  })\n\n  test('should not remove any content type parser if content type does not exist', t => {\n    t.plan(2)\n\n    const fastify = Fastify()\n\n    const contentTypeParser = fastify[keys.kContentTypeParser]\n\n    t.notOk(contentTypeParser.remove('image/png'))\n    t.same(contentTypeParser.customParsers.size, 2)\n  })\n\n  t.end()\n})\n\ntest('remove all should remove all existing parsers and reset cache', t => {\n  t.plan(4)\n\n  const fastify = Fastify()\n  fastify.addContentTypeParser('application/xml', first)\n  fastify.addContentTypeParser(/^image\\/.*/, first)\n\n  const contentTypeParser = fastify[keys.kContentTypeParser]\n\n  contentTypeParser.getParser('application/xml') // fill cache with one entry\n  contentTypeParser.removeAll()\n\n  t.same(contentTypeParser.cache.size, 0)\n  t.same(contentTypeParser.parserList.length, 0)\n  t.same(contentTypeParser.parserRegExpList.length, 0)\n  t.same(Object.keys(contentTypeParser.customParsers).length, 0)\n})\n\ntest('Safeguard against malicious content-type / 1', async t => {\n  const badNames = Object.getOwnPropertyNames({}.__proto__) // eslint-disable-line\n  t.plan(badNames.length)\n\n  const fastify = Fastify()\n\n  fastify.post('/', async () => {\n    return 'ok'\n  })\n\n  for (const prop of badNames) {\n    const response = await fastify.inject({\n      method: 'POST',\n      path: '/',\n      headers: {\n        'content-type': prop\n      },\n      body: ''\n    })\n\n    t.same(response.statusCode, 415)\n  }\n})\n\ntest('Safeguard against malicious content-type / 2', async t => {\n  t.plan(1)\n\n  const fastify = Fastify()\n\n  fastify.post('/', async () => {\n    return 'ok'\n  })\n\n  const response = await fastify.inject({\n    method: 'POST',\n    path: '/',\n    headers: {\n      'content-type': '\\\\u0063\\\\u006fnstructor'\n    },\n    body: ''\n  })\n\n  t.same(response.statusCode, 415)\n})\n\ntest('Safeguard against malicious content-type / 3', async t => {\n  t.plan(1)\n\n  const fastify = Fastify()\n\n  fastify.post('/', async () => {\n    return 'ok'\n  })\n\n  const response = await fastify.inject({\n    method: 'POST',\n    path: '/',\n    headers: {\n      'content-type': 'constructor; charset=utf-8'\n    },\n    body: ''\n  })\n\n  t.same(response.statusCode, 415)\n})\n\ntest('Safeguard against content-type spoofing - string', async t => {\n  t.plan(1)\n\n  const fastify = Fastify()\n  fastify.removeAllContentTypeParsers()\n  fastify.addContentTypeParser('text/plain', function (request, body, done) {\n    t.pass('should be called')\n    done(null, body)\n  })\n  fastify.addContentTypeParser('application/json', function (request, body, done) {\n    t.fail('shouldn\\'t be called')\n    done(null, body)\n  })\n\n  fastify.post('/', async () => {\n    return 'ok'\n  })\n\n  await fastify.inject({\n    method: 'POST',\n    path: '/',\n    headers: {\n      'content-type': 'text/plain; content-type=\"application/json\"'\n    },\n    body: ''\n  })\n})\n\ntest('Safeguard against content-type spoofing - regexp', async t => {\n  t.plan(1)\n\n  const fastify = Fastify()\n  fastify.removeAllContentTypeParsers()\n  fastify.addContentTypeParser(/text\\/plain/, function (request, body, done) {\n    t.pass('should be called')\n    done(null, body)\n  })\n  fastify.addContentTypeParser(/application\\/json/, function (request, body, done) {\n    t.fail('shouldn\\'t be called')\n    done(null, body)\n  })\n\n  fastify.post('/', async () => {\n    return 'ok'\n  })\n\n  await fastify.inject({\n    method: 'POST',\n    path: '/',\n    headers: {\n      'content-type': 'text/plain; content-type=\"application/json\"'\n    },\n    body: ''\n  })\n})\n\ntest('content-type match parameters - string 1', async t => {\n  t.plan(1)\n\n  const fastify = Fastify()\n  fastify.removeAllContentTypeParsers()\n  fastify.addContentTypeParser('text/plain; charset=utf8', function (request, body, done) {\n    t.fail('shouldn\\'t be called')\n    done(null, body)\n  })\n  fastify.addContentTypeParser('application/json; charset=utf8', function (request, body, done) {\n    t.pass('should be called')\n    done(null, body)\n  })\n\n  fastify.post('/', async () => {\n    return 'ok'\n  })\n\n  await fastify.inject({\n    method: 'POST',\n    path: '/',\n    headers: {\n      'content-type': 'application/json; charset=utf8'\n    },\n    body: ''\n  })\n})\n\ntest('content-type match parameters - string 2', async t => {\n  t.plan(1)\n\n  const fastify = Fastify()\n  fastify.removeAllContentTypeParsers()\n  fastify.addContentTypeParser('application/json; charset=utf8; foo=bar', function (request, body, done) {\n    t.pass('should be called')\n    done(null, body)\n  })\n  fastify.addContentTypeParser('text/plain; charset=utf8; foo=bar', function (request, body, done) {\n    t.fail('shouldn\\'t be called')\n    done(null, body)\n  })\n\n  fastify.post('/', async () => {\n    return 'ok'\n  })\n\n  await fastify.inject({\n    method: 'POST',\n    path: '/',\n    headers: {\n      'content-type': 'application/json; foo=bar; charset=utf8'\n    },\n    body: ''\n  })\n})\n\ntest('content-type match parameters - regexp', async t => {\n  t.plan(1)\n\n  const fastify = Fastify()\n  fastify.removeAllContentTypeParsers()\n  fastify.addContentTypeParser(/application\\/json; charset=utf8/, function (request, body, done) {\n    t.pass('should be called')\n    done(null, body)\n  })\n\n  fastify.post('/', async () => {\n    return 'ok'\n  })\n\n  await fastify.inject({\n    method: 'POST',\n    path: '/',\n    headers: {\n      'content-type': 'application/json; charset=utf8'\n    },\n    body: ''\n  })\n})\n\ntest('content-type fail when parameters not match - string 1', async t => {\n  t.plan(1)\n\n  const fastify = Fastify()\n  fastify.removeAllContentTypeParsers()\n  fastify.addContentTypeParser('application/json; charset=utf8; foo=bar', function (request, body, done) {\n    t.fail('shouldn\\'t be called')\n    done(null, body)\n  })\n\n  fastify.post('/', async () => {\n    return 'ok'\n  })\n\n  const response = await fastify.inject({\n    method: 'POST',\n    path: '/',\n    headers: {\n      'content-type': 'application/json; charset=utf8'\n    },\n    body: ''\n  })\n\n  t.same(response.statusCode, 415)\n})\n\ntest('content-type fail when parameters not match - string 2', async t => {\n  t.plan(1)\n\n  const fastify = Fastify()\n  fastify.removeAllContentTypeParsers()\n  fastify.addContentTypeParser('application/json; charset=utf8; foo=bar', function (request, body, done) {\n    t.fail('shouldn\\'t be called')\n    done(null, body)\n  })\n\n  fastify.post('/', async () => {\n    return 'ok'\n  })\n\n  const response = await fastify.inject({\n    method: 'POST',\n    path: '/',\n    headers: {\n      'content-type': 'application/json; charset=utf8; foo=baz'\n    },\n    body: ''\n  })\n\n  t.same(response.statusCode, 415)\n})\n\ntest('content-type fail when parameters not match - regexp', async t => {\n  t.plan(1)\n\n  const fastify = Fastify()\n  fastify.removeAllContentTypeParsers()\n  fastify.addContentTypeParser(/application\\/json; charset=utf8; foo=bar/, function (request, body, done) {\n    t.fail('shouldn\\'t be called')\n    done(null, body)\n  })\n\n  fastify.post('/', async () => {\n    return 'ok'\n  })\n\n  const response = await fastify.inject({\n    method: 'POST',\n    path: '/',\n    headers: {\n      'content-type': 'application/json; charset=utf8'\n    },\n    body: ''\n  })\n\n  t.same(response.statusCode, 415)\n})\n\n// Refs: https://github.com/fastify/fastify/issues/4495\ntest('content-type regexp list should be cloned when plugin override', async t => {\n  t.plan(6)\n\n  const fastify = Fastify()\n\n  fastify.addContentTypeParser(/^image\\/.*/, { parseAs: 'buffer' }, (req, payload, done) => {\n    done(null, payload)\n  })\n\n  fastify.register(function plugin (fastify, options, done) {\n    fastify.post('/', function (request, reply) {\n      reply.type(request.headers['content-type']).send(request.body)\n    })\n\n    done()\n  })\n\n  {\n    const { payload, headers, statusCode } = await fastify.inject({\n      method: 'POST',\n      path: '/',\n      payload: 'jpeg',\n      headers: { 'content-type': 'image/jpeg' }\n    })\n    t.same(statusCode, 200)\n    t.same(headers['content-type'], 'image/jpeg')\n    t.same(payload, 'jpeg')\n  }\n\n  {\n    const { payload, headers, statusCode } = await fastify.inject({\n      method: 'POST',\n      path: '/',\n      payload: 'png',\n      headers: { 'content-type': 'image/png' }\n    })\n    t.same(statusCode, 200)\n    t.same(headers['content-type'], 'image/png')\n    t.same(payload, 'png')\n  }\n})\n/docs/Guides/Database.md!\u001c<h1 align=\"center\">Fastify</h1>\n\n## Database\n\nFastify's ecosystem provides a handful of \nplugins for connecting to various database engines. \nThis guide covers engines that have Fastify \nplugins maintained within the Fastify organization.\n\n> If a plugin for your database of choice does not exist \n> you can still use the database as Fastify is database agnostic. \n> By following the examples of the database plugins listed in this guide, \n> a plugin can be written for the missing database engine. \n\n> If you would like to write your own Fastify plugin \n> please take a look at the [plugins guide](./Plugins-Guide.md)\n\n### [MySQL](https://github.com/fastify/fastify-mysql)\n\nInstall the plugin by running `npm i @fastify/mysql`.\n\n*Usage:*\n\n```javascript\nconst fastify = require('fastify')()\n\nfastify.register(require('@fastify/mysql'), {\n  connectionString: 'mysql://root@localhost/mysql'\n})\n\nfastify.get('/user/:id', function(req, reply) {\n  fastify.mysql.query(\n    'SELECT id, username, hash, salt FROM users WHERE id=?', [req.params.id],\n    function onResult (err, result) {\n      reply.send(err || result)\n    }\n  )\n})\n\nfastify.listen({ port: 3000 }, err => {\n  if (err) throw err\n  console.log(`server listening on ${fastify.server.address().port}`)\n})\n```\n\n### [Postgres](https://github.com/fastify/fastify-postgres)\nInstall the plugin by running `npm i pg @fastify/postgres`.\n\n*Example*:\n\n```javascript\nconst fastify = require('fastify')()\n\nfastify.register(require('@fastify/postgres'), {\n  connectionString: 'postgres://postgres@localhost/postgres'\n})\n\nfastify.get('/user/:id', function (req, reply) {\n  fastify.pg.query(\n    'SELECT id, username, hash, salt FROM users WHERE id=$1', [req.params.id],\n    function onResult (err, result) {\n      reply.send(err || result)\n    }\n  )\n})\n\nfastify.listen({ port: 3000 }, err => {\n  if (err) throw err\n  console.log(`server listening on ${fastify.server.address().port}`)\n})\n```\n\n### [Redis](https://github.com/fastify/fastify-redis)\nInstall the plugin by running `npm i @fastify/redis`\n\n*Usage:*\n\n```javascript\n'use strict'\n\nconst fastify = require('fastify')()\n\nfastify.register(require('@fastify/redis'), { host: '127.0.0.1' })\n// or\nfastify.register(require('@fastify/redis'), { url: 'redis://127.0.0.1', /* other redis options */ })\n\nfastify.get('/foo', function (req, reply) {\n  const { redis } = fastify\n  redis.get(req.query.key, (err, val) => {\n    reply.send(err || val)\n  })\n})\n\nfastify.post('/foo', function (req, reply) {\n  const { redis } = fastify\n  redis.set(req.body.key, req.body.value, (err) => {\n    reply.send(err || { status: 'ok' })\n  })\n})\n\nfastify.listen({ port: 3000 }, err => {\n  if (err) throw err\n  console.log(`server listening on ${fastify.server.address().port}`)\n})\n```\n\nBy default `@fastify/redis` doesn't close \nthe client connection when Fastify server shuts down. \nTo opt-in to this behavior, register the client like so:\n\n```javascript\nfastify.register(require('@fastify/redis'), {\n  client: redis,\n  closeClient: true\n})\n```\n\n### [Mongo](https://github.com/fastify/fastify-mongodb)\nInstall the plugin by running `npm i @fastify/mongodb`\n\n*Usage:*\n```javascript\nconst fastify = require('fastify')()\n\nfastify.register(require('@fastify/mongodb'), {\n  // force to close the mongodb connection when app stopped\n  // the default value is false\n  forceClose: true,\n  \n  url: 'mongodb://mongo/mydb'\n})\n\nfastify.get('/user/:id', function (req, reply) {\n  // Or this.mongo.client.db('mydb').collection('users')\n  const users = this.mongo.db.collection('users')\n\n  // if the id is an ObjectId format, you need to create a new ObjectId\n  const id = this.mongo.ObjectId(req.params.id)\n  users.findOne({ id }, (err, user) => {\n    if (err) {\n      reply.send(err)\n      return\n    }\n    reply.send(user)\n  })\n})\n\nfastify.listen({ port: 3000 }, err => {\n  if (err) throw err\n})\n```\n\n### [LevelDB](https://github.com/fastify/fastify-leveldb)\nInstall the plugin by running `npm i @fastify/leveldb`\n\n*Usage:*\n```javascript\nconst fastify = require('fastify')()\n\nfastify.register(\n  require('@fastify/leveldb'),\n  { name: 'db' }\n)\n\nfastify.get('/foo', async function (req, reply) {\n  const val = await this.level.db.get(req.query.key)\n  return val\n})\n\nfastify.post('/foo', async function (req, reply) {\n  await this.level.db.put(req.body.key, req.body.value)\n  return { status: 'ok' }\n})\n\nfastify.listen({ port: 3000 }, err => {\n  if (err) throw err\n  console.log(`server listening on ${fastify.server.address().port}`)\n})\n```\n\n### Writing plugin for a database library\nWe could write a plugin for a database \nlibrary too (e.g. Knex, Prisma, or TypeORM). \nWe will use [Knex](https://knexjs.org/) in our example.\n\n```javascript\n'use strict'\n\nconst fp = require('fastify-plugin')\nconst knex = require('knex')\n\nfunction knexPlugin(fastify, options, done) {\n  if(!fastify.knex) {\n    const knex = knex(options)\n    fastify.decorate('knex', knex)\n\n    fastify.addHook('onClose', (fastify, done) => {\n      if (fastify.knex === knex) {\n        fastify.knex.destroy(done)\n      }\n    })\n  }\n\n  done()\n}\n\nexport default fp(knexPlugin, { name: 'fastify-knex-example' })\n```\n\n### Writing a plugin for a database engine\n\nIn this example, we will create a basic Fastify MySQL plugin from scratch (it is\na stripped-down example, please use the official plugin in production).\n\n```javascript\nconst fp = require('fastify-plugin')\nconst mysql = require('mysql2/promise')\n\nfunction fastifyMysql(fastify, options, done) {\n  const connection = mysql.createConnection(options)\n\n  if (!fastify.mysql) {\n    fastify.decorate('mysql', connection)\n  }\n\n  fastify.addHook('onClose', (fastify, done) => connection.end().then(done).catch(done))\n\n  done()\n}\n\nexport default fp(fastifyMysql, { name: 'fastify-mysql-example' })\n```\n\n### Migrations\n\nDatabase schema migrations are an integral part of database management and\ndevelopment. Migrations provide a repeatable and testable way to modify a\ndatabase's schema and prevent data loss.\n\nAs stated at the beginning of the guide, Fastify is database agnostic and any\nNodeJS database migration tool can be used with it. We will give an example of\nusing [Postgrator](https://www.npmjs.com/package/postgrator) which has support\nfor Postgres, MySQL, SQL Server and SQLite. For MongoDB migrations, please check\n[migrate-mongo](https://www.npmjs.com/package/migrate-mongo).\n\n#### [Postgrator](https://www.npmjs.com/package/postgrator)\n\nPostgrator is NodeJS SQL migration tool that uses a directory of SQL scripts to\nalter the database schema. Each file an migrations folder need to follow the\npattern: ` [version].[action].[optional-description].sql`.\n\n**version:** must be an incrementing number (e.g. `001` or a timestamp).\n\n**action:** should be `do` or `undo`. `do` implements the version, `undo`\nreverts it. Think about it like `up` and `down` in other migration tools.\n\n**optional-description** describes which changes migration makes. Although\noptional, it should be used for all migrations as it makes it easier for\neveryone to know which changes are made in a migration.\n\nIn our example, we are going to have a single migration that creates a `users`\ntable and we are going to use `Postgrator` to run the migration.\n\n> Run `npm i pg postgrator` to install dependencies needed for the\n> example.\n\n```sql\n// 001.do.create-users-table.sql\nCREATE TABLE IF NOT EXISTS users (\n  id SERIAL PRIMARY KEY NOT NULL,\n  created_at DATE NOT NULL DEFAULT CURRENT_DATE,\n  firstName TEXT NOT NULL,\n  lastName TEXT NOT NULL\n);\n```\n```javascript\nconst pg = require('pg')\nconst Postgrator = require('postgrator')\nconst path = require('path')\n\nasync function migrate() {\n  const client = new pg.Client({\n    host: 'localhost',\n    port: 5432,\n    database: 'example', \n    user: 'example',\n    password: 'example',\n  });\n\n  try {\n    const postgrator = new Postgrator({\n      migrationPattern: path.join(__dirname, '/migrations/*'),\n      driver: 'pg',\n      database: 'example',\n      schemaTable: 'migrations',\n      currentSchema: 'public', // Postgres and MS SQL Server only\n      execQuery: (query) => client.query(query),\n    });\n\n    const result = await postgrator.migrate()\n\n    if (result.length === 0) {\n      console.log(\n        'No migrations run for schema \"public\". Already at the latest one.'\n      )\n    }\n\n    console.log('Migration done.')\n\n    process.exitCode = 0\n  } catch(err) {\n    console.error(error)\n    process.exitCode = 1\n  }\n  \n  await client.end()\n}\n\nmigrate()\n```\n/test/type-provider.test.js\u0001p'use strict'\n\nconst { test } = require('tap')\nconst Fastify = require('..')\n\ntest('Should export withTypeProvider function', t => {\n  t.plan(1)\n  try {\n    Fastify().withTypeProvider()\n    t.pass()\n  } catch (e) {\n    t.fail()\n  }\n})\n\ntest('Should return same instance', t => {\n  t.plan(1)\n  const fastify = Fastify()\n  t.equal(fastify, fastify.withTypeProvider())\n})\n/test/plugin.helper.jsĚ'use strict'\n\nconst fp = require('fastify-plugin')\n\nmodule.exports = fp(function (fastify, opts, done) {\n  fastify.decorate('test', () => {})\n  done()\n})\n/examples/use-plugin.js\u0001const fastify = require('../fastify')({ logger: true })\n\nconst opts = {\n  schema: {\n    response: {\n      '2xx': {\n        type: 'object',\n        properties: {\n          hello: {\n            type: 'string'\n          }\n        }\n      }\n    }\n  }\n}\nfastify.register(require('./plugin'), opts, function (err) {\n  if (err) throw err\n})\n\nfastify.listen({ port: 3000 }, function (err) {\n  if (err) {\n    throw err\n  }\n})\n/test/plugin.test.jsu\"'use strict'\n\n/* eslint no-prototype-builtins: 0 */\n\nconst t = require('tap')\nconst test = t.test\nconst Fastify = require('..')\nconst sget = require('simple-get').concat\nconst fp = require('fastify-plugin')\nconst fakeTimer = require('@sinonjs/fake-timers')\n\ntest('require a plugin', t => {\n  t.plan(1)\n  const fastify = Fastify()\n  fastify.register(require('./plugin.helper'))\n  fastify.ready(() => {\n    t.ok(fastify.test)\n  })\n})\n\ntest('plugin metadata - ignore prefix', t => {\n  t.plan(2)\n  const fastify = Fastify()\n\n  plugin[Symbol.for('skip-override')] = true\n  fastify.register(plugin, { prefix: 'foo' })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/'\n  }, function (err, res) {\n    t.error(err)\n    t.equal(res.payload, 'hello')\n  })\n\n  function plugin (instance, opts, done) {\n    instance.get('/', function (request, reply) {\n      reply.send('hello')\n    })\n    done()\n  }\n})\n\ntest('plugin metadata - naming plugins', async t => {\n  t.plan(2)\n  const fastify = Fastify()\n\n  fastify.register(require('./plugin.name.display'))\n  fastify.register(function (fastify, opts, done) {\n    // one line\n    t.equal(fastify.pluginName, 'function (fastify, opts, done) { -- // one line')\n    done()\n  })\n  fastify.register(function fooBar (fastify, opts, done) {\n    t.equal(fastify.pluginName, 'fooBar')\n    done()\n  })\n\n  await fastify.ready()\n})\n\ntest('fastify.register with fastify-plugin should not encapsulate his code', t => {\n  t.plan(10)\n  const fastify = Fastify()\n\n  fastify.register((instance, opts, done) => {\n    instance.register(fp((i, o, n) => {\n      i.decorate('test', () => {})\n      t.ok(i.test)\n      n()\n    }))\n\n    t.notOk(instance.test)\n\n    // the decoration is added at the end\n    instance.after(() => {\n      t.ok(instance.test)\n    })\n\n    instance.get('/', (req, reply) => {\n      t.ok(instance.test)\n      reply.send({ hello: 'world' })\n    })\n\n    done()\n  })\n\n  fastify.ready(() => {\n    t.notOk(fastify.test)\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(response.headers['content-length'], '' + body.length)\n      t.same(JSON.parse(body), { hello: 'world' })\n    })\n  })\n})\n\ntest('fastify.register with fastify-plugin should provide access to external fastify instance if opts argument is a function', t => {\n  t.plan(22)\n  const fastify = Fastify()\n\n  fastify.register((instance, opts, done) => {\n    instance.register(fp((i, o, n) => {\n      i.decorate('global', () => {})\n      t.ok(i.global)\n      n()\n    }))\n\n    instance.register((i, o, n) => n(), p => {\n      t.notOk(p === instance || p === fastify)\n      t.ok(instance.isPrototypeOf(p))\n      t.ok(fastify.isPrototypeOf(p))\n      t.ok(p.global)\n    })\n\n    instance.register((i, o, n) => {\n      i.decorate('local', () => {})\n      n()\n    })\n\n    instance.register((i, o, n) => n(), p => t.notOk(p.local))\n\n    instance.register((i, o, n) => {\n      t.ok(i.local)\n      n()\n    }, p => p.decorate('local', () => {}))\n\n    instance.register((i, o, n) => n(), p => t.notOk(p.local))\n\n    instance.register(fp((i, o, n) => {\n      t.ok(i.global_2)\n      n()\n    }), p => p.decorate('global_2', () => 'hello'))\n\n    instance.register((i, o, n) => {\n      i.decorate('global_2', () => 'world')\n      n()\n    }, p => p.get('/', (req, reply) => {\n      t.ok(p.global_2)\n      reply.send({ hello: p.global_2() })\n    }))\n\n    t.notOk(instance.global)\n    t.notOk(instance.global_2)\n    t.notOk(instance.local)\n\n    // the decoration is added at the end\n    instance.after(() => {\n      t.ok(instance.global)\n      t.equal(instance.global_2(), 'hello')\n      t.notOk(instance.local)\n    })\n\n    done()\n  })\n\n  fastify.ready(() => {\n    t.notOk(fastify.global)\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(response.headers['content-length'], '' + body.length)\n      t.same(JSON.parse(body), { hello: 'world' })\n    })\n  })\n})\n\ntest('fastify.register with fastify-plugin registers fastify level plugins', t => {\n  t.plan(15)\n  const fastify = Fastify()\n\n  function fastifyPlugin (instance, opts, done) {\n    instance.decorate('test', 'first')\n    t.ok(instance.test)\n    done()\n  }\n\n  function innerPlugin (instance, opts, done) {\n    instance.decorate('test2', 'second')\n    done()\n  }\n\n  fastify.register(fp(fastifyPlugin))\n\n  fastify.register((instance, opts, done) => {\n    t.ok(instance.test)\n    instance.register(fp(innerPlugin))\n\n    instance.get('/test2', (req, reply) => {\n      t.ok(instance.test2)\n      reply.send({ test2: instance.test2 })\n    })\n\n    done()\n  })\n\n  fastify.ready(() => {\n    t.ok(fastify.test)\n    t.notOk(fastify.test2)\n  })\n\n  fastify.get('/', (req, reply) => {\n    t.ok(fastify.test)\n    reply.send({ test: fastify.test })\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(response.headers['content-length'], '' + body.length)\n      t.same(JSON.parse(body), { test: 'first' })\n    })\n\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port + '/test2'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(response.headers['content-length'], '' + body.length)\n      t.same(JSON.parse(body), { test2: 'second' })\n    })\n  })\n})\n\ntest('check dependencies - should not throw', t => {\n  t.plan(12)\n  const fastify = Fastify()\n\n  fastify.register((instance, opts, done) => {\n    instance.register(fp((i, o, n) => {\n      i.decorate('test', () => {})\n      t.ok(i.test)\n      n()\n    }))\n\n    instance.register(fp((i, o, n) => {\n      try {\n        i.decorate('otherTest', () => {}, ['test'])\n        t.ok(i.test)\n        t.ok(i.otherTest)\n        n()\n      } catch (e) {\n        t.fail()\n      }\n    }))\n\n    instance.get('/', (req, reply) => {\n      t.ok(instance.test)\n      t.ok(instance.otherTest)\n      reply.send({ hello: 'world' })\n    })\n\n    done()\n  })\n\n  fastify.ready(() => {\n    t.notOk(fastify.test)\n    t.notOk(fastify.otherTest)\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(response.headers['content-length'], '' + body.length)\n      t.same(JSON.parse(body), { hello: 'world' })\n    })\n  })\n})\n\ntest('check dependencies - should throw', t => {\n  t.plan(12)\n  const fastify = Fastify()\n\n  fastify.register((instance, opts, done) => {\n    instance.register(fp((i, o, n) => {\n      try {\n        i.decorate('otherTest', () => {}, ['test'])\n        t.fail()\n      } catch (e) {\n        t.equal(e.code, 'FST_ERR_DEC_MISSING_DEPENDENCY')\n        t.equal(e.message, 'The decorator is missing dependency \\'test\\'.')\n      }\n      n()\n    }))\n\n    instance.register(fp((i, o, n) => {\n      i.decorate('test', () => {})\n      t.ok(i.test)\n      t.notOk(i.otherTest)\n      n()\n    }))\n\n    instance.get('/', (req, reply) => {\n      t.ok(instance.test)\n      t.notOk(instance.otherTest)\n      reply.send({ hello: 'world' })\n    })\n\n    done()\n  })\n\n  fastify.ready(() => {\n    t.notOk(fastify.test)\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(response.headers['content-length'], '' + body.length)\n      t.same(JSON.parse(body), { hello: 'world' })\n    })\n  })\n})\n\ntest('set the plugin name based on the plugin displayName symbol', t => {\n  t.plan(6)\n  const fastify = Fastify()\n\n  fastify.register(fp((fastify, opts, done) => {\n    t.equal(fastify.pluginName, 'fastify -> plugin-A')\n    fastify.register(fp((fastify, opts, done) => {\n      t.equal(fastify.pluginName, 'fastify -> plugin-A -> plugin-AB')\n      done()\n    }, { name: 'plugin-AB' }))\n    fastify.register(fp((fastify, opts, done) => {\n      t.equal(fastify.pluginName, 'fastify -> plugin-A -> plugin-AB -> plugin-AC')\n      done()\n    }, { name: 'plugin-AC' }))\n    done()\n  }, { name: 'plugin-A' }))\n\n  fastify.register(fp((fastify, opts, done) => {\n    t.equal(fastify.pluginName, 'fastify -> plugin-A -> plugin-AB -> plugin-AC -> plugin-B')\n    done()\n  }, { name: 'plugin-B' }))\n\n  t.equal(fastify.pluginName, 'fastify')\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    fastify.close()\n  })\n})\n\ntest('plugin name will change when using no encapsulation', t => {\n  t.plan(6)\n  const fastify = Fastify()\n\n  fastify.register(fp((fastify, opts, done) => {\n    // store it in a different variable will hold the correct name\n    const pluginName = fastify.pluginName\n    fastify.register(fp((fastify, opts, done) => {\n      t.equal(fastify.pluginName, 'fastify -> plugin-A -> plugin-AB')\n      done()\n    }, { name: 'plugin-AB' }))\n    fastify.register(fp((fastify, opts, done) => {\n      t.equal(fastify.pluginName, 'fastify -> plugin-A -> plugin-AB -> plugin-AC')\n      done()\n    }, { name: 'plugin-AC' }))\n    setImmediate(() => {\n      // normally we would expect the name plugin-A\n      // but we operate on the same instance in each plugin\n      t.equal(fastify.pluginName, 'fastify -> plugin-A -> plugin-AB -> plugin-AC')\n      t.equal(pluginName, 'fastify -> plugin-A')\n    })\n    done()\n  }, { name: 'plugin-A' }))\n\n  t.equal(fastify.pluginName, 'fastify')\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    fastify.close()\n  })\n})\n\ntest('plugin name is undefined when accessing in no plugin context', t => {\n  t.plan(2)\n  const fastify = Fastify()\n\n  t.equal(fastify.pluginName, 'fastify')\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    fastify.close()\n  })\n})\n\ntest('set the plugin name based on the plugin function name', t => {\n  t.plan(5)\n  const fastify = Fastify()\n\n  fastify.register(function myPluginA (fastify, opts, done) {\n    t.equal(fastify.pluginName, 'myPluginA')\n    fastify.register(function myPluginAB (fastify, opts, done) {\n      t.equal(fastify.pluginName, 'myPluginAB')\n      done()\n    })\n    setImmediate(() => {\n      // exact name due to encapsulation\n      t.equal(fastify.pluginName, 'myPluginA')\n    })\n    done()\n  })\n\n  fastify.register(function myPluginB (fastify, opts, done) {\n    t.equal(fastify.pluginName, 'myPluginB')\n    done()\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    fastify.close()\n  })\n})\n\ntest('approximate a plugin name when no meta data is available', t => {\n  t.plan(7)\n  const fastify = Fastify()\n\n  fastify.register((fastify, opts, done) => {\n    // A\n    t.equal(fastify.pluginName.startsWith('(fastify, opts, done)'), true)\n    t.equal(fastify.pluginName.includes('// A'), true)\n    fastify.register((fastify, opts, done) => {\n      // B\n      t.equal(fastify.pluginName.startsWith('(fastify, opts, done)'), true)\n      t.equal(fastify.pluginName.includes('// B'), true)\n      done()\n    })\n    setImmediate(() => {\n      t.equal(fastify.pluginName.startsWith('(fastify, opts, done)'), true)\n      t.equal(fastify.pluginName.includes('// A'), true)\n    })\n    done()\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    fastify.close()\n  })\n})\n\ntest('approximate a plugin name also when fastify-plugin has no meta data', t => {\n  t.plan(4)\n  const fastify = Fastify()\n\n  fastify.register(fp((fastify, opts, done) => {\n    t.match(fastify.pluginName, /plugin\\.test/)\n    fastify.register(fp(function B (fastify, opts, done) {\n      // function has name\n      t.match(fastify.pluginName, /plugin\\.test-auto-\\d+ -> B/)\n      done()\n    }))\n    setImmediate(() => {\n      t.match(fastify.pluginName, /plugin\\.test-auto-\\d+ -> B/)\n    })\n    done()\n  }))\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    fastify.close()\n  })\n})\n\ntest('plugin encapsulation', t => {\n  t.plan(10)\n  const fastify = Fastify()\n\n  fastify.register((instance, opts, done) => {\n    instance.register(fp((i, o, n) => {\n      i.decorate('test', 'first')\n      n()\n    }))\n\n    instance.get('/first', (req, reply) => {\n      reply.send({ plugin: instance.test })\n    })\n\n    done()\n  })\n\n  fastify.register((instance, opts, done) => {\n    instance.register(fp((i, o, n) => {\n      i.decorate('test', 'second')\n      n()\n    }))\n\n    instance.get('/second', (req, reply) => {\n      reply.send({ plugin: instance.test })\n    })\n\n    done()\n  })\n\n  fastify.ready(() => {\n    t.notOk(fastify.test)\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port + '/first'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(response.headers['content-length'], '' + body.length)\n      t.same(JSON.parse(body), { plugin: 'first' })\n    })\n\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port + '/second'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(response.headers['content-length'], '' + body.length)\n      t.same(JSON.parse(body), { plugin: 'second' })\n    })\n  })\n})\n\ntest('if a plugin raises an error and there is not a callback to handle it, the server must not start', t => {\n  t.plan(2)\n  const fastify = Fastify()\n\n  fastify.register((instance, opts, done) => {\n    done(new Error('err'))\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.ok(err instanceof Error)\n    t.equal(err.message, 'err')\n  })\n})\n\ntest('add hooks after route declaration', t => {\n  t.plan(3)\n  const fastify = Fastify()\n\n  function plugin (instance, opts, done) {\n    instance.decorateRequest('check', null)\n    instance.addHook('onRequest', (req, reply, done) => {\n      req.check = {}\n      done()\n    })\n    setImmediate(done)\n  }\n  fastify.register(fp(plugin))\n\n  fastify.register((instance, options, done) => {\n    instance.addHook('preHandler', function b (req, res, done) {\n      req.check.hook2 = true\n      done()\n    })\n\n    instance.get('/', (req, reply) => {\n      reply.send(req.check)\n    })\n\n    instance.addHook('preHandler', function c (req, res, done) {\n      req.check.hook3 = true\n      done()\n    })\n\n    done()\n  })\n\n  fastify.addHook('preHandler', function a (req, res, done) {\n    req.check.hook1 = true\n    done()\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port\n    }, (err, response, body) => {\n      t.error(err)\n      t.same(JSON.parse(body), { hook1: true, hook2: true, hook3: true })\n      fastify.close()\n    })\n  })\n})\n\ntest('nested plugins', t => {\n  t.plan(5)\n\n  const fastify = Fastify()\n\n  t.teardown(fastify.close.bind(fastify))\n\n  fastify.register(function (fastify, opts, done) {\n    fastify.register((fastify, opts, done) => {\n      fastify.get('/', function (req, reply) {\n        reply.send('I am child 1')\n      })\n      done()\n    }, { prefix: '/child1' })\n\n    fastify.register((fastify, opts, done) => {\n      fastify.get('/', function (req, reply) {\n        reply.send('I am child 2')\n      })\n      done()\n    }, { prefix: '/child2' })\n\n    done()\n  }, { prefix: '/parent' })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port + '/parent/child1'\n    }, (err, response, body) => {\n      t.error(err)\n      t.same(body.toString(), 'I am child 1')\n    })\n\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port + '/parent/child2'\n    }, (err, response, body) => {\n      t.error(err)\n      t.same(body.toString(), 'I am child 2')\n    })\n  })\n})\n\ntest('nested plugins awaited', t => {\n  t.plan(5)\n\n  const fastify = Fastify()\n\n  t.teardown(fastify.close.bind(fastify))\n\n  fastify.register(async function wrap (fastify, opts) {\n    await fastify.register(async function child1 (fastify, opts) {\n      fastify.get('/', function (req, reply) {\n        reply.send('I am child 1')\n      })\n    }, { prefix: '/child1' })\n\n    await fastify.register(async function child2 (fastify, opts) {\n      fastify.get('/', function (req, reply) {\n        reply.send('I am child 2')\n      })\n    }, { prefix: '/child2' })\n  }, { prefix: '/parent' })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port + '/parent/child1'\n    }, (err, response, body) => {\n      t.error(err)\n      t.same(body.toString(), 'I am child 1')\n    })\n\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port + '/parent/child2'\n    }, (err, response, body) => {\n      t.error(err)\n      t.same(body.toString(), 'I am child 2')\n    })\n  })\n})\n\ntest('plugin metadata - decorators', t => {\n  t.plan(1)\n  const fastify = Fastify()\n\n  fastify.decorate('plugin1', true)\n  fastify.decorateReply('plugin1', true)\n  fastify.decorateRequest('plugin1', true)\n\n  plugin[Symbol.for('skip-override')] = true\n  plugin[Symbol.for('plugin-meta')] = {\n    decorators: {\n      fastify: ['plugin1'],\n      reply: ['plugin1'],\n      request: ['plugin1']\n    }\n  }\n\n  fastify.register(plugin)\n\n  fastify.ready(() => {\n    t.ok(fastify.plugin)\n  })\n\n  function plugin (instance, opts, done) {\n    instance.decorate('plugin', true)\n    done()\n  }\n})\n\ntest('plugin metadata - decorators - should throw', t => {\n  t.plan(1)\n  const fastify = Fastify()\n\n  fastify.decorate('plugin1', true)\n  fastify.decorateReply('plugin1', true)\n\n  plugin[Symbol.for('skip-override')] = true\n  plugin[Symbol.for('plugin-meta')] = {\n    decorators: {\n      fastify: ['plugin1'],\n      reply: ['plugin1'],\n      request: ['plugin1']\n    }\n  }\n\n  fastify.register(plugin)\n  fastify.ready((err) => {\n    t.equal(err.message, \"The decorator 'plugin1' is not present in Request\")\n  })\n\n  function plugin (instance, opts, done) {\n    instance.decorate('plugin', true)\n    done()\n  }\n})\n\ntest('plugin metadata - decorators - should throw with plugin name', t => {\n  t.plan(1)\n  const fastify = Fastify()\n\n  fastify.decorate('plugin1', true)\n  fastify.decorateReply('plugin1', true)\n\n  plugin[Symbol.for('skip-override')] = true\n  plugin[Symbol.for('plugin-meta')] = {\n    name: 'the-plugin',\n    decorators: {\n      fastify: ['plugin1'],\n      reply: ['plugin1'],\n      request: ['plugin1']\n    }\n  }\n\n  fastify.register(plugin)\n  fastify.ready((err) => {\n    t.equal(err.message, \"The decorator 'plugin1' required by 'the-plugin' is not present in Request\")\n  })\n\n  function plugin (instance, opts, done) {\n    instance.decorate('plugin', true)\n    done()\n  }\n})\n\ntest('plugin metadata - dependencies', t => {\n  t.plan(1)\n  const fastify = Fastify()\n\n  dependency[Symbol.for('skip-override')] = true\n  dependency[Symbol.for('plugin-meta')] = {\n    name: 'plugin'\n  }\n\n  plugin[Symbol.for('skip-override')] = true\n  plugin[Symbol.for('plugin-meta')] = {\n    dependencies: ['plugin']\n  }\n\n  fastify.register(dependency)\n  fastify.register(plugin)\n\n  fastify.ready(() => {\n    t.pass('everything right')\n  })\n\n  function dependency (instance, opts, done) {\n    done()\n  }\n\n  function plugin (instance, opts, done) {\n    done()\n  }\n})\n\ntest('plugin metadata - dependencies (nested)', t => {\n  t.plan(1)\n  const fastify = Fastify()\n\n  dependency[Symbol.for('skip-override')] = true\n  dependency[Symbol.for('plugin-meta')] = {\n    name: 'plugin'\n  }\n\n  nested[Symbol.for('skip-override')] = true\n  nested[Symbol.for('plugin-meta')] = {\n    dependencies: ['plugin']\n  }\n\n  fastify.register(dependency)\n  fastify.register(plugin)\n\n  fastify.ready(() => {\n    t.pass('everything right')\n  })\n\n  function dependency (instance, opts, done) {\n    done()\n  }\n\n  function plugin (instance, opts, done) {\n    instance.register(nested)\n    done()\n  }\n\n  function nested (instance, opts, done) {\n    done()\n  }\n})\n\ntest('pluginTimeout', t => {\n  t.plan(5)\n  const fastify = Fastify({\n    pluginTimeout: 10\n  })\n  fastify.register(function (app, opts, done) {\n    // to no call done on purpose\n  })\n  fastify.ready((err) => {\n    t.ok(err)\n    t.equal(err.message,\n      \"fastify-plugin: Plugin did not start in time: 'function (app, opts, done) { -- // to no call done on purpose'. You may have forgotten to call 'done' function or to resolve a Promise\")\n    t.equal(err.code, 'FST_ERR_PLUGIN_TIMEOUT')\n    t.ok(err.cause)\n    t.equal(err.cause.code, 'AVV_ERR_READY_TIMEOUT')\n  })\n})\n\ntest('pluginTimeout - named function', t => {\n  t.plan(5)\n  const fastify = Fastify({\n    pluginTimeout: 10\n  })\n  fastify.register(function nameFunction (app, opts, done) {\n    // to no call done on purpose\n  })\n  fastify.ready((err) => {\n    t.ok(err)\n    t.equal(err.message,\n      \"fastify-plugin: Plugin did not start in time: 'nameFunction'. You may have forgotten to call 'done' function or to resolve a Promise\")\n    t.equal(err.code, 'FST_ERR_PLUGIN_TIMEOUT')\n    t.ok(err.cause)\n    t.equal(err.cause.code, 'AVV_ERR_READY_TIMEOUT')\n  })\n})\n\ntest('pluginTimeout default', t => {\n  t.plan(5)\n  const clock = fakeTimer.install({ shouldClearNativeTimers: true })\n\n  const fastify = Fastify()\n  fastify.register(function (app, opts, done) {\n    // default time elapsed without calling done\n    clock.tick(10000)\n  })\n\n  fastify.ready((err) => {\n    t.ok(err)\n    t.equal(err.message,\n      \"fastify-plugin: Plugin did not start in time: 'function (app, opts, done) { -- // default time elapsed without calling done'. You may have forgotten to call 'done' function or to resolve a Promise\")\n    t.equal(err.code, 'FST_ERR_PLUGIN_TIMEOUT')\n    t.ok(err.cause)\n    t.equal(err.cause.code, 'AVV_ERR_READY_TIMEOUT')\n  })\n\n  t.teardown(clock.uninstall)\n})\n\ntest('plugin metadata - version', t => {\n  t.plan(1)\n  const fastify = Fastify()\n\n  plugin[Symbol.for('skip-override')] = true\n  plugin[Symbol.for('plugin-meta')] = {\n    name: 'plugin',\n    fastify: '2.0.0'\n  }\n\n  fastify.register(plugin)\n\n  fastify.ready(() => {\n    t.pass('everything right')\n  })\n\n  function plugin (instance, opts, done) {\n    done()\n  }\n})\n\ntest('plugin metadata - version range', t => {\n  t.plan(1)\n  const fastify = Fastify()\n\n  plugin[Symbol.for('skip-override')] = true\n  plugin[Symbol.for('plugin-meta')] = {\n    name: 'plugin',\n    fastify: '>=2.0.0'\n  }\n\n  fastify.register(plugin)\n\n  fastify.ready(() => {\n    t.pass('everything right')\n  })\n\n  function plugin (instance, opts, done) {\n    done()\n  }\n})\n\ntest('plugin metadata - version not matching requirement', t => {\n  t.plan(2)\n  const fastify = Fastify()\n\n  plugin[Symbol.for('skip-override')] = true\n  plugin[Symbol.for('plugin-meta')] = {\n    name: 'plugin',\n    fastify: '99.0.0'\n  }\n\n  fastify.register(plugin)\n\n  fastify.ready((err) => {\n    t.ok(err)\n    t.equal(err.code, 'FST_ERR_PLUGIN_VERSION_MISMATCH')\n  })\n\n  function plugin (instance, opts, done) {\n    done()\n  }\n})\n\ntest('plugin metadata - version not matching requirement 2', t => {\n  t.plan(2)\n  const fastify = Fastify()\n\n  plugin[Symbol.for('skip-override')] = true\n  plugin[Symbol.for('plugin-meta')] = {\n    name: 'plugin',\n    fastify: '<=3.0.0'\n  }\n\n  fastify.register(plugin)\n\n  fastify.ready((err) => {\n    t.ok(err)\n    t.equal(err.code, 'FST_ERR_PLUGIN_VERSION_MISMATCH')\n  })\n\n  function plugin (instance, opts, done) {\n    done()\n  }\n})\n\ntest('plugin metadata - version not matching requirement 3', t => {\n  t.plan(2)\n  const fastify = Fastify()\n\n  plugin[Symbol.for('skip-override')] = true\n  plugin[Symbol.for('plugin-meta')] = {\n    name: 'plugin',\n    fastify: '>=99.0.0'\n  }\n\n  fastify.register(plugin)\n\n  fastify.ready((err) => {\n    t.ok(err)\n    t.equal(err.code, 'FST_ERR_PLUGIN_VERSION_MISMATCH')\n  })\n\n  function plugin (instance, opts, done) {\n    done()\n  }\n})\n\ntest('plugin metadata - release candidate', t => {\n  t.plan(2)\n  const fastify = Fastify()\n  Object.defineProperty(fastify, 'version', {\n    value: '99.0.0-rc.1'\n  })\n\n  plugin[Symbol.for('plugin-meta')] = {\n    name: 'plugin',\n    fastify: '99.x'\n  }\n\n  fastify.register(plugin)\n\n  fastify.ready((err) => {\n    t.error(err)\n    t.pass('everything right')\n  })\n\n  function plugin (instance, opts, done) {\n    done()\n  }\n})\n\ntest('fastify-rc loads prior version plugins', t => {\n  t.plan(2)\n  const fastify = Fastify()\n  Object.defineProperty(fastify, 'version', {\n    value: '99.0.0-rc.1'\n  })\n\n  plugin[Symbol.for('plugin-meta')] = {\n    name: 'plugin',\n    fastify: '^98.1.0'\n  }\n  plugin2[Symbol.for('plugin-meta')] = {\n    name: 'plugin2',\n    fastify: '98.x'\n  }\n\n  fastify.register(plugin)\n\n  fastify.ready((err) => {\n    t.error(err)\n    t.pass('everything right')\n  })\n\n  function plugin (instance, opts, done) {\n    done()\n  }\n\n  function plugin2 (instance, opts, done) {\n    done()\n  }\n})\n\ntest('hasPlugin method exists as a function', t => {\n  t.plan(1)\n\n  const fastify = Fastify()\n  t.equal(typeof fastify.hasPlugin, 'function')\n})\n\ntest('hasPlugin returns true if the specified plugin has been registered', async t => {\n  t.plan(4)\n\n  const fastify = Fastify()\n\n  function pluginA (fastify, opts, done) {\n    t.ok(fastify.hasPlugin('plugin-A'))\n    done()\n  }\n  pluginA[Symbol.for('fastify.display-name')] = 'plugin-A'\n  fastify.register(pluginA)\n\n  fastify.register(function pluginB (fastify, opts, done) {\n    t.ok(fastify.hasPlugin('pluginB'))\n    done()\n  })\n\n  fastify.register(function (fastify, opts, done) {\n    // one line\n    t.ok(fastify.hasPlugin('function (fastify, opts, done) { -- // one line'))\n    done()\n  })\n\n  await fastify.ready()\n\n  t.ok(fastify.hasPlugin('fastify'))\n})\n\ntest('hasPlugin returns false if the specified plugin has not been registered', t => {\n  t.plan(1)\n\n  const fastify = Fastify()\n  t.notOk(fastify.hasPlugin('pluginFoo'))\n})\n\ntest('hasPlugin returns false when using encapsulation', async t => {\n  t.plan(25)\n\n  const fastify = Fastify()\n\n  fastify.register(function pluginA (fastify, opts, done) {\n    t.ok(fastify.hasPlugin('pluginA'))\n    t.notOk(fastify.hasPlugin('pluginAA'))\n    t.notOk(fastify.hasPlugin('pluginAAA'))\n    t.notOk(fastify.hasPlugin('pluginAB'))\n    t.notOk(fastify.hasPlugin('pluginB'))\n\n    fastify.register(function pluginAA (fastify, opts, done) {\n      t.notOk(fastify.hasPlugin('pluginA'))\n      t.ok(fastify.hasPlugin('pluginAA'))\n      t.notOk(fastify.hasPlugin('pluginAAA'))\n      t.notOk(fastify.hasPlugin('pluginAB'))\n      t.notOk(fastify.hasPlugin('pluginB'))\n\n      fastify.register(function pluginAAA (fastify, opts, done) {\n        t.notOk(fastify.hasPlugin('pluginA'))\n        t.notOk(fastify.hasPlugin('pluginAA'))\n        t.ok(fastify.hasPlugin('pluginAAA'))\n        t.notOk(fastify.hasPlugin('pluginAB'))\n        t.notOk(fastify.hasPlugin('pluginB'))\n\n        done()\n      })\n\n      done()\n    })\n\n    fastify.register(function pluginAB (fastify, opts, done) {\n      t.notOk(fastify.hasPlugin('pluginA'))\n      t.notOk(fastify.hasPlugin('pluginAA'))\n      t.notOk(fastify.hasPlugin('pluginAAA'))\n      t.ok(fastify.hasPlugin('pluginAB'))\n      t.notOk(fastify.hasPlugin('pluginB'))\n\n      done()\n    })\n\n    done()\n  })\n\n  fastify.register(function pluginB (fastify, opts, done) {\n    t.notOk(fastify.hasPlugin('pluginA'))\n    t.notOk(fastify.hasPlugin('pluginAA'))\n    t.notOk(fastify.hasPlugin('pluginAAA'))\n    t.notOk(fastify.hasPlugin('pluginAB'))\n    t.ok(fastify.hasPlugin('pluginB'))\n\n    done()\n  })\n\n  await fastify.ready()\n})\n\ntest('hasPlugin returns true when using no encapsulation', async t => {\n  t.plan(26)\n\n  const fastify = Fastify()\n\n  fastify.register(fp((fastify, opts, done) => {\n    t.equal(fastify.pluginName, 'fastify -> plugin-AA')\n    t.ok(fastify.hasPlugin('plugin-AA'))\n    t.notOk(fastify.hasPlugin('plugin-A'))\n    t.notOk(fastify.hasPlugin('plugin-AAA'))\n    t.notOk(fastify.hasPlugin('plugin-AB'))\n    t.notOk(fastify.hasPlugin('plugin-B'))\n\n    fastify.register(fp((fastify, opts, done) => {\n      t.ok(fastify.hasPlugin('plugin-AA'))\n      t.ok(fastify.hasPlugin('plugin-A'))\n      t.notOk(fastify.hasPlugin('plugin-AAA'))\n      t.notOk(fastify.hasPlugin('plugin-AB'))\n      t.notOk(fastify.hasPlugin('plugin-B'))\n\n      fastify.register(fp((fastify, opts, done) => {\n        t.ok(fastify.hasPlugin('plugin-AA'))\n        t.ok(fastify.hasPlugin('plugin-A'))\n        t.ok(fastify.hasPlugin('plugin-AAA'))\n        t.notOk(fastify.hasPlugin('plugin-AB'))\n        t.notOk(fastify.hasPlugin('plugin-B'))\n\n        done()\n      }, { name: 'plugin-AAA' }))\n\n      done()\n    }, { name: 'plugin-A' }))\n\n    fastify.register(fp((fastify, opts, done) => {\n      t.ok(fastify.hasPlugin('plugin-AA'))\n      t.ok(fastify.hasPlugin('plugin-A'))\n      t.ok(fastify.hasPlugin('plugin-AAA'))\n      t.ok(fastify.hasPlugin('plugin-AB'))\n      t.notOk(fastify.hasPlugin('plugin-B'))\n\n      done()\n    }, { name: 'plugin-AB' }))\n\n    done()\n  }, { name: 'plugin-AA' }))\n\n  fastify.register(fp((fastify, opts, done) => {\n    t.ok(fastify.hasPlugin('plugin-AA'))\n    t.ok(fastify.hasPlugin('plugin-A'))\n    t.ok(fastify.hasPlugin('plugin-AAA'))\n    t.ok(fastify.hasPlugin('plugin-AB'))\n    t.ok(fastify.hasPlugin('plugin-B'))\n\n    done()\n  }, { name: 'plugin-B' }))\n\n  await fastify.ready()\n})\n/test/trace.test.js\u0001`'use strict'\n\nconst t = require('tap')\nconst test = t.test\nconst fastify = require('..')()\n\ntest('shorthand - trace', t => {\n  t.plan(1)\n  try {\n    fastify.route({\n      method: 'TRACE',\n      url: '/',\n      handler: function (request, reply) {\n        reply.code(200).send('TRACE OK')\n      }\n    })\n    t.pass()\n  } catch (e) {\n    t.fail()\n  }\n})\n\"/test/bundler/webpack/package.json{\n  \"version\":\"0.0.1\",\n  \"scripts\": {\n    \"bundle\": \"webpack\",\n    \"test\": \"npm run bundle && node bundler-test.js\"\n  },\n  \"devDependencies\": {\n    \"webpack\": \"^5.49.0\",\n    \"webpack-cli\": \"^4.7.2\"\n  }\n}\n/test/has-route.test.js\u0006.'use strict'\n\nconst t = require('tap')\nconst test = t.test\nconst Fastify = require('../fastify')\n\ntest('hasRoute', t => {\n  t.plan(4)\n  const test = t.test\n  const fastify = Fastify()\n\n  test('hasRoute - invalid options', t => {\n    t.plan(3)\n\n    t.equal(fastify.hasRoute({ }), false)\n\n    t.equal(fastify.hasRoute({ method: 'GET' }), false)\n\n    t.equal(fastify.hasRoute({ constraints: [] }), false)\n  })\n\n  test('hasRoute - primitive method', t => {\n    t.plan(2)\n    fastify.route({\n      method: 'GET',\n      url: '/',\n      handler: function (req, reply) {\n        reply.send({ hello: 'world' })\n      }\n    })\n\n    t.equal(fastify.hasRoute({\n      method: 'GET',\n      url: '/'\n    }), true)\n\n    t.equal(fastify.hasRoute({\n      method: 'POST',\n      url: '/'\n    }), false)\n  })\n\n  test('hasRoute - with constraints', t => {\n    t.plan(2)\n    fastify.route({\n      method: 'GET',\n      url: '/',\n      constraints: { version: '1.2.0' },\n      handler: (req, reply) => {\n        reply.send({ hello: 'world' })\n      }\n    })\n\n    t.equal(fastify.hasRoute({\n      method: 'GET',\n      url: '/',\n      constraints: { version: '1.2.0' }\n    }), true)\n\n    t.equal(fastify.hasRoute({\n      method: 'GET',\n      url: '/',\n      constraints: { version: '1.3.0' }\n    }), false)\n  })\n\n  test('hasRoute - parametric route regexp with constraints', t => {\n    t.plan(1)\n    // parametric with regexp\n    fastify.get('/example/:file(^\\\\d+).png', function (request, reply) { })\n\n    t.equal(fastify.hasRoute({\n      method: 'GET',\n      url: '/example/12345.png'\n    }), true)\n  })\n})\n/lib/server.js0\u001e'use strict'\n\nconst http = require('http')\nconst https = require('https')\nconst dns = require('dns')\n\nconst warnings = require('./warnings')\nconst { kState, kOptions, kServerBindings } = require('./symbols')\nconst {\n  FST_ERR_HTTP2_INVALID_VERSION,\n  FST_ERR_REOPENED_CLOSE_SERVER,\n  FST_ERR_REOPENED_SERVER\n} = require('./errors')\n\nmodule.exports.createServer = createServer\nmodule.exports.compileValidateHTTPVersion = compileValidateHTTPVersion\n\nfunction createServer (options, httpHandler) {\n  const server = getServerInstance(options, httpHandler)\n\n  return { server, listen }\n\n  // `this` is the Fastify object\n  function listen (listenOptions, ...args) {\n    let cb = args.slice(-1).pop()\n    // When the variadic signature deprecation is complete, the function\n    // declaration should become:\n    //   function listen (listenOptions = { port: 0, host: 'localhost' }, cb = undefined)\n    // Upon doing so, the `normalizeListenArgs` function is no longer needed,\n    // and all of this preamble to feed it correctly also no longer needed.\n    const firstArgType = Object.prototype.toString.call(arguments[0])\n    if (arguments.length === 0) {\n      listenOptions = normalizeListenArgs([])\n    } else if (arguments.length > 0 && (firstArgType !== '[object Object]' && firstArgType !== '[object Function]')) {\n      warnings.emit('FSTDEP011')\n      listenOptions = normalizeListenArgs(Array.from(arguments))\n      cb = listenOptions.cb\n    } else if (args.length > 1) {\n      // `.listen(obj, a, ..., n, callback )`\n      warnings.emit('FSTDEP011')\n      // Deal with `.listen(port, host, backlog, [cb])`\n      const hostPath = listenOptions.path ? [listenOptions.path] : [listenOptions.port ?? 0, listenOptions.host ?? 'localhost']\n      Object.assign(listenOptions, normalizeListenArgs([...hostPath, ...args]))\n    } else {\n      listenOptions.cb = cb\n    }\n\n    // If we have a path specified, don't default host to 'localhost' so we don't end up listening\n    // on both path and host\n    // See https://github.com/fastify/fastify/issues/4007\n    let host\n    if (listenOptions.path == null) {\n      host = listenOptions.host ?? 'localhost'\n    } else {\n      host = listenOptions.host\n    }\n    if (Object.prototype.hasOwnProperty.call(listenOptions, 'host') === false) {\n      listenOptions.host = host\n    }\n\n    if (host === 'localhost') {\n      listenOptions.cb = (err, address) => {\n        if (err) {\n          // the server did not start\n          cb(err, address)\n          return\n        }\n\n        multipleBindings.call(this, server, httpHandler, options, listenOptions, () => {\n          this[kState].listening = true\n          cb(null, address)\n        })\n      }\n    }\n\n    // https://github.com/nodejs/node/issues/9390\n    // If listening to 'localhost', listen to both 127.0.0.1 or ::1 if they are available.\n    // If listening to 127.0.0.1, only listen to 127.0.0.1.\n    // If listening to ::1, only listen to ::1.\n\n    if (cb === undefined) {\n      const listening = listenPromise.call(this, server, listenOptions)\n      /* istanbul ignore else */\n      if (host === 'localhost') {\n        return listening.then(address => {\n          return new Promise((resolve, reject) => {\n            multipleBindings.call(this, server, httpHandler, options, listenOptions, () => {\n              this[kState].listening = true\n              resolve(address)\n            })\n          })\n        })\n      }\n      return listening\n    }\n\n    this.ready(listenCallback.call(this, server, listenOptions))\n  }\n}\n\nfunction multipleBindings (mainServer, httpHandler, serverOpts, listenOptions, onListen) {\n  // the main server is started, we need to start the secondary servers\n  this[kState].listening = false\n\n  // let's check if we need to bind additional addresses\n  dns.lookup(listenOptions.host, { all: true }, (dnsErr, addresses) => {\n    if (dnsErr) {\n      // not blocking the main server listening\n      // this.log.warn('dns.lookup error:', dnsErr)\n      onListen()\n      return\n    }\n\n    let binding = 0\n    let binded = 0\n    const primaryAddress = mainServer.address()\n    for (const adr of addresses) {\n      if (adr.address !== primaryAddress.address) {\n        binding++\n        const secondaryOpts = Object.assign({}, listenOptions, {\n          host: adr.address,\n          port: primaryAddress.port,\n          cb: (_ignoreErr) => {\n            binded++\n\n            if (!_ignoreErr) {\n              this[kServerBindings].push(secondaryServer)\n            }\n\n            if (binded === binding) {\n              // regardless of the error, we are done\n              onListen()\n            }\n          }\n        })\n\n        const secondaryServer = getServerInstance(serverOpts, httpHandler)\n        const closeSecondary = () => { secondaryServer.close(() => {}) }\n        secondaryServer.on('upgrade', mainServer.emit.bind(mainServer, 'upgrade'))\n        mainServer.on('unref', closeSecondary)\n        mainServer.on('close', closeSecondary)\n        mainServer.on('error', closeSecondary)\n        listenCallback.call(this, secondaryServer, secondaryOpts)()\n      }\n    }\n\n    // no extra bindings are necessary\n    if (binding === 0) {\n      onListen()\n      return\n    }\n\n    // in test files we are using unref so we need to propagate the unref event\n    // to the secondary servers. It is valid only when the user is\n    // listening on localhost\n    const originUnref = mainServer.unref\n    /* istanbul ignore next */\n    mainServer.unref = function () {\n      originUnref.call(mainServer)\n      mainServer.emit('unref')\n    }\n  })\n}\n\nfunction listenCallback (server, listenOptions) {\n  const wrap = (err) => {\n    server.removeListener('error', wrap)\n    if (!err) {\n      const address = logServerAddress.call(this, server)\n      listenOptions.cb(null, address)\n    } else {\n      this[kState].listening = false\n      listenOptions.cb(err, null)\n    }\n  }\n\n  return (err) => {\n    if (err != null) return listenOptions.cb(err)\n\n    if (this[kState].listening && this[kState].closing) {\n      return listenOptions.cb(new FST_ERR_REOPENED_CLOSE_SERVER(), null)\n    } else if (this[kState].listening) {\n      return listenOptions.cb(new FST_ERR_REOPENED_SERVER(), null)\n    }\n\n    server.once('error', wrap)\n    server.listen(listenOptions, wrap)\n\n    this[kState].listening = true\n  }\n}\n\nfunction listenPromise (server, listenOptions) {\n  if (this[kState].listening && this[kState].closing) {\n    return Promise.reject(new FST_ERR_REOPENED_CLOSE_SERVER())\n  } else if (this[kState].listening) {\n    return Promise.reject(new FST_ERR_REOPENED_SERVER())\n  }\n\n  return this.ready().then(() => {\n    let errEventHandler\n    const errEvent = new Promise((resolve, reject) => {\n      errEventHandler = (err) => {\n        this[kState].listening = false\n        reject(err)\n      }\n      server.once('error', errEventHandler)\n    })\n    const listen = new Promise((resolve, reject) => {\n      server.listen(listenOptions, () => {\n        server.removeListener('error', errEventHandler)\n        resolve(logServerAddress.call(this, server))\n      })\n      // we set it afterwards because listen can throw\n      this[kState].listening = true\n    })\n\n    return Promise.race([\n      errEvent, // e.g invalid port range error is always emitted before the server listening\n      listen\n    ])\n  })\n}\n\n/**\n * Creates a function that, based upon initial configuration, will\n * verify that every incoming request conforms to allowed\n * HTTP versions for the Fastify instance, e.g. a Fastify HTTP/1.1\n * server will not serve HTTP/2 requests upon the result of the\n * verification function.\n *\n * @param {object} options fastify option\n * @param {function} [options.serverFactory] If present, the\n * validator function will skip all checks.\n * @param {boolean} [options.http2 = false] If true, the validator\n * function will allow HTTP/2 requests.\n * @param {object} [options.https = null] https server options\n * @param {boolean} [options.https.allowHTTP1] If true and use\n * with options.http2 the validator function will allow HTTP/1\n * request to http2 server.\n *\n * @returns {function} HTTP version validator function.\n */\nfunction compileValidateHTTPVersion (options) {\n  let bypass = false\n  // key-value map to store valid http version\n  const map = new Map()\n  if (options.serverFactory) {\n    // When serverFactory is passed, we cannot identify how to check http version reliably\n    // So, we should skip the http version check\n    bypass = true\n  }\n  if (options.http2) {\n    // HTTP2 must serve HTTP/2.0\n    map.set('2.0', true)\n    if (options.https && options.https.allowHTTP1 === true) {\n      // HTTP2 with HTTPS.allowHTTP1 allow fallback to HTTP/1.1 and HTTP/1.0\n      map.set('1.1', true)\n      map.set('1.0', true)\n    }\n  } else {\n    // HTTP must server HTTP/1.1 and HTTP/1.0\n    map.set('1.1', true)\n    map.set('1.0', true)\n  }\n  // The compiled function here placed in one of the hottest path inside fastify\n  // the implementation here must be as performant as possible\n  return function validateHTTPVersion (httpVersion) {\n    // `bypass` skip the check when custom server factory provided\n    // `httpVersion in obj` check for the valid http version we should support\n    return bypass || map.has(httpVersion)\n  }\n}\n\nfunction getServerInstance (options, httpHandler) {\n  let server = null\n  if (options.serverFactory) {\n    server = options.serverFactory(httpHandler, options)\n  } else if (options.http2) {\n    if (options.https) {\n      server = http2().createSecureServer(options.https, httpHandler)\n    } else {\n      server = http2().createServer(httpHandler)\n    }\n    server.on('session', sessionTimeout(options.http2SessionTimeout))\n  } else {\n    // this is http1\n    if (options.https) {\n      server = https.createServer(options.https, httpHandler)\n    } else {\n      server = http.createServer(options.http, httpHandler)\n    }\n    server.keepAliveTimeout = options.keepAliveTimeout\n    server.requestTimeout = options.requestTimeout\n    // we treat zero as null\n    // and null is the default setting from nodejs\n    // so we do not pass the option to server\n    if (options.maxRequestsPerSocket > 0) {\n      server.maxRequestsPerSocket = options.maxRequestsPerSocket\n    }\n  }\n\n  if (!options.serverFactory) {\n    server.setTimeout(options.connectionTimeout)\n  }\n  return server\n}\n\nfunction normalizeListenArgs (args) {\n  if (args.length === 0) {\n    return { port: 0, host: 'localhost' }\n  }\n\n  const cb = typeof args[args.length - 1] === 'function' ? args.pop() : undefined\n  const options = { cb }\n\n  const firstArg = args[0]\n  const argsLength = args.length\n  const lastArg = args[argsLength - 1]\n  if (typeof firstArg === 'string' && isNaN(firstArg)) {\n    /* Deal with listen (pipe[, backlog]) */\n    options.path = firstArg\n    options.backlog = argsLength > 1 ? lastArg : undefined\n  } else {\n    /* Deal with listen ([port[, host[, backlog]]]) */\n    options.port = argsLength >= 1 && Number.isInteger(firstArg) ? firstArg : normalizePort(firstArg)\n    // This will listen to what localhost is.\n    // It can be 127.0.0.1 or ::1, depending on the operating system.\n    // Fixes https://github.com/fastify/fastify/issues/1022.\n    options.host = argsLength >= 2 && args[1] ? args[1] : 'localhost'\n    options.backlog = argsLength >= 3 ? args[2] : undefined\n  }\n\n  return options\n}\n\nfunction normalizePort (firstArg) {\n  const port = Number(firstArg)\n  return port >= 0 && !Number.isNaN(port) && Number.isInteger(port) ? port : 0\n}\n\nfunction logServerAddress (server) {\n  let address = server.address()\n  const isUnixSocket = typeof address === 'string'\n  /* istanbul ignore next */\n  if (!isUnixSocket) {\n    if (address.address.indexOf(':') === -1) {\n      address = address.address + ':' + address.port\n    } else {\n      address = '[' + address.address + ']:' + address.port\n    }\n  }\n  /* istanbul ignore next */\n  address = (isUnixSocket ? '' : ('http' + (this[kOptions].https ? 's' : '') + '://')) + address\n\n  this.log.info('Server listening at ' + address)\n  return address\n}\n\nfunction http2 () {\n  try {\n    return require('http2')\n  } catch (err) {\n    throw new FST_ERR_HTTP2_INVALID_VERSION()\n  }\n}\n\nfunction sessionTimeout (timeout) {\n  return function (session) {\n    session.setTimeout(timeout, close)\n  }\n}\n\nfunction close () {\n  this.close()\n}\n/test/types/hooks.test-d.ts&import { FastifyError } from '@fastify/error'\nimport { expectAssignable, expectError, expectType } from 'tsd'\nimport fastify, {\n  FastifyInstance,\n  FastifyReply,\n  FastifyRequest,\n  RawReplyDefaultExpression,\n  RawRequestDefaultExpression,\n  RouteOptions,\n  RegisterOptions,\n  FastifyPluginOptions,\n  FastifySchema,\n  FastifyTypeProviderDefault,\n  ContextConfigDefault, FastifyContextConfig, RawServerDefault\n} from '../../fastify'\nimport { preHandlerAsyncHookHandler, RequestPayload } from '../../types/hooks'\nimport { RouteGenericInterface } from '../../types/route'\nimport { ResolveFastifyRequestType } from '../../types/type-provider'\n\nconst server = fastify()\n\n// Test payload generic pass through for preSerialization and onSend\n\ntype TestPayloadType = {\n  foo: string;\n  bar: number;\n}\n\n// Synchronous Tests\n\nserver.addHook('onRequest', function (request, reply, done) {\n  expectType<FastifyInstance>(this)\n  expectType<FastifyRequest>(request)\n  expectType<FastifyReply>(reply)\n  expectAssignable<(err?: FastifyError) => void>(done)\n  expectAssignable<(err?: NodeJS.ErrnoException) => void>(done)\n  expectType<void>(done(new Error()))\n})\n\nserver.addHook('preParsing', function (request, reply, payload, done) {\n  expectType<FastifyInstance>(this)\n  expectType<FastifyRequest>(request)\n  expectType<FastifyReply>(reply)\n  expectType<RequestPayload>(payload)\n  expectAssignable<(err?: FastifyError | null, res?: RequestPayload) => void>(done)\n  expectAssignable<(err?: NodeJS.ErrnoException) => void>(done)\n  expectType<void>(done(new Error()))\n})\n\nserver.addHook('preValidation', function (request, reply, done) {\n  expectType<FastifyInstance>(this)\n  expectType<FastifyRequest>(request)\n  expectType<FastifyReply>(reply)\n  expectAssignable<(err?: FastifyError) => void>(done)\n  expectAssignable<(err?: NodeJS.ErrnoException) => void>(done)\n  expectType<void>(done(new Error()))\n})\n\nserver.addHook('preHandler', function (request, reply, done) {\n  expectType<FastifyInstance>(this)\n  expectType<FastifyRequest>(request)\n  expectType<FastifyReply>(reply)\n  expectAssignable<(err?: FastifyError) => void>(done)\n  expectAssignable<(err?: NodeJS.ErrnoException) => void>(done)\n  expectType<void>(done(new Error()))\n})\n\nserver.addHook<TestPayloadType>('preSerialization', function (request, reply, payload, done) {\n  expectType<FastifyInstance>(this)\n  expectType<FastifyRequest>(request)\n  expectType<FastifyReply>(reply)\n  expectType<TestPayloadType>(payload) // we expect this to be unknown when not specified like in the previous test\n  expectType<void>(done(new Error()))\n  expectType<void>(done(null, 'foobar'))\n  expectType<void>(done())\n  expectError<void>(done(new Error(), 'foobar'))\n})\n\nserver.addHook<TestPayloadType>('onSend', function (request, reply, payload, done) {\n  expectType<FastifyInstance>(this)\n  expectType<FastifyRequest>(request)\n  expectType<FastifyReply>(reply)\n  expectType<TestPayloadType>(payload)\n  expectType<void>(done(new Error()))\n  expectType<void>(done(null, 'foobar'))\n  expectType<void>(done())\n  expectError<void>(done(new Error(), 'foobar'))\n})\n\nserver.addHook('onResponse', function (request, reply, done) {\n  expectType<FastifyInstance>(this)\n  expectType<FastifyRequest>(request)\n  expectType<FastifyReply>(reply)\n  expectAssignable<(err?: FastifyError) => void>(done)\n  expectAssignable<(err?: NodeJS.ErrnoException) => void>(done)\n  expectType<void>(done(new Error()))\n})\n\nserver.addHook('onTimeout', function (request, reply, done) {\n  expectType<FastifyInstance>(this)\n  expectType<FastifyRequest>(request)\n  expectType<FastifyReply>(reply)\n  expectAssignable<(err?: FastifyError) => void>(done)\n  expectAssignable<(err?: NodeJS.ErrnoException) => void>(done)\n  expectType<void>(done(new Error()))\n})\n\nserver.addHook('onError', function (request, reply, error, done) {\n  expectType<FastifyInstance>(this)\n  expectType<FastifyRequest>(request)\n  expectType<FastifyReply>(reply)\n  expectType<FastifyError>(error)\n  expectType<() => void>(done)\n  expectType<void>(done())\n})\n\nserver.addHook('onRequestAbort', function (request, done) {\n  expectType<FastifyInstance>(this)\n  expectType<FastifyRequest>(request)\n  expectAssignable<(err?: FastifyError) => void>(done)\n  expectAssignable<(err?: NodeJS.ErrnoException) => void>(done)\n  expectType<void>(done(new Error()))\n})\n\nserver.addHook('onRoute', function (opts) {\n  expectType<FastifyInstance>(this)\n  expectType<RouteOptions & { routePath: string; path: string; prefix: string}>(opts)\n})\n\nserver.addHook('onRegister', (instance, opts, done) => {\n  expectType<FastifyInstance>(instance)\n  expectType<RegisterOptions & FastifyPluginOptions>(opts)\n  expectAssignable<(err?: FastifyError) => void>(done)\n  expectAssignable<(err?: NodeJS.ErrnoException) => void>(done)\n  expectType<void>(done(new Error()))\n})\n\nserver.addHook('onReady', function (done) {\n  expectType<FastifyInstance>(this)\n  expectAssignable<(err?: FastifyError) => void>(done)\n  expectAssignable<(err?: NodeJS.ErrnoException) => void>(done)\n  expectType<void>(done(new Error()))\n})\n\nserver.addHook('onClose', (instance, done) => {\n  expectType<FastifyInstance>(instance)\n  expectAssignable<(err?: FastifyError) => void>(done)\n  expectAssignable<(err?: NodeJS.ErrnoException) => void>(done)\n  expectType<void>(done(new Error()))\n})\n\n// Asynchronous\n\nserver.addHook('onRequest', async function (request, reply) {\n  expectType<FastifyInstance>(this)\n  expectType<FastifyRequest>(request)\n  expectType<FastifyReply>(reply)\n})\n\nserver.addHook('preParsing', async function (request, reply, payload) {\n  expectType<FastifyInstance>(this)\n  expectType<FastifyRequest>(request)\n  expectType<FastifyReply>(reply)\n  expectType<RequestPayload>(payload)\n})\n\nserver.addHook('preValidation', async function (request, reply) {\n  expectType<FastifyInstance>(this)\n  expectType<FastifyRequest>(request)\n  expectType<FastifyReply>(reply)\n})\n\nserver.addHook('preHandler', async function (request, reply) {\n  expectType<FastifyInstance>(this)\n  expectType<FastifyRequest>(request)\n  expectType<FastifyReply>(reply)\n})\n\nserver.addHook<TestPayloadType>('preSerialization', async function (request, reply, payload) {\n  expectType<FastifyInstance>(this)\n  expectType<FastifyRequest>(request)\n  expectType<FastifyReply>(reply)\n  expectType<TestPayloadType>(payload) // we expect this to be unknown when not specified like in the previous test\n})\n\nserver.addHook<TestPayloadType>('onSend', async function (request, reply, payload) {\n  expectType<FastifyInstance>(this)\n  expectType<FastifyRequest>(request)\n  expectType<FastifyReply>(reply)\n  expectType<TestPayloadType>(payload)\n})\n\nserver.addHook('onResponse', async function (request, reply) {\n  expectType<FastifyInstance>(this)\n  expectType<FastifyRequest>(request)\n  expectType<FastifyReply>(reply)\n})\n\nserver.addHook('onTimeout', async function (request, reply) {\n  expectType<FastifyInstance>(this)\n  expectType<FastifyRequest>(request)\n  expectType<FastifyReply>(reply)\n})\n\nserver.addHook('onError', async function (request, reply, error) {\n  expectType<FastifyInstance>(this)\n  expectType<FastifyRequest>(request)\n  expectType<FastifyReply>(reply)\n  expectType<FastifyError>(error)\n})\n\nserver.addHook('onRequestAbort', async function (request) {\n  expectType<FastifyInstance>(this)\n  expectType<FastifyRequest>(request)\n})\n\nserver.addHook('onRegister', async (instance, opts) => {\n  expectType<FastifyInstance>(instance)\n  expectType<RegisterOptions & FastifyPluginOptions>(opts)\n})\n\nserver.addHook('onReady', async function () {\n  expectType<FastifyInstance>(this)\n})\n\nserver.addHook('onClose', async (instance) => {\n  expectType<FastifyInstance>(instance)\n})\n\n// Use case to monitor any regression on issue #3620\n// ref.: https://github.com/fastify/fastify/issues/3620\nconst customTypedHook: preHandlerAsyncHookHandler<\nRawServerDefault,\nRawRequestDefaultExpression,\nRawReplyDefaultExpression,\nRouteGenericInterface,\nContextConfigDefault,\nFastifySchema,\nFastifyTypeProviderDefault\n> = async function (request, reply): Promise<void> {\n  expectType<FastifyInstance>(this)\n  expectAssignable<FastifyRequest>(request)\n  expectAssignable<FastifyReply>(reply)\n}\n\nserver.register(async (instance) => {\n  instance.addHook('preHandler', customTypedHook)\n})\n\n// Test custom Context Config types for hooks\ntype CustomContextConfig = FastifyContextConfig & {\n  foo: string;\n  bar: number;\n}\n\nserver.route<RouteGenericInterface, CustomContextConfig>({\n  method: 'GET',\n  url: '/',\n  handler: () => {},\n  onRequest: (request, reply) => {\n    expectType<CustomContextConfig>(request.context.config)\n    expectType<CustomContextConfig>(reply.context.config)\n  },\n  preParsing: (request, reply) => {\n    expectType<CustomContextConfig>(request.context.config)\n    expectType<CustomContextConfig>(reply.context.config)\n  },\n  preValidation: (request, reply) => {\n    expectType<CustomContextConfig>(request.context.config)\n    expectType<CustomContextConfig>(reply.context.config)\n  },\n  preHandler: (request, reply) => {\n    expectType<CustomContextConfig>(request.context.config)\n    expectType<CustomContextConfig>(reply.context.config)\n  },\n  preSerialization: (request, reply) => {\n    expectType<CustomContextConfig>(request.context.config)\n    expectType<CustomContextConfig>(reply.context.config)\n  },\n  onSend: (request, reply) => {\n    expectType<CustomContextConfig>(request.context.config)\n    expectType<CustomContextConfig>(reply.context.config)\n  },\n  onResponse: (request, reply) => {\n    expectType<CustomContextConfig>(request.context.config)\n    expectType<CustomContextConfig>(reply.context.config)\n  },\n  onTimeout: (request, reply) => {\n    expectType<CustomContextConfig>(request.context.config)\n    expectType<CustomContextConfig>(reply.context.config)\n  },\n  onError: (request, reply) => {\n    expectType<CustomContextConfig>(request.context.config)\n    expectType<CustomContextConfig>(reply.context.config)\n  }\n})\n!/test/internals/decorator.test.js\rC'use strict'\n\n/* eslint no-prototype-builtins: 0 */\n\nconst t = require('tap')\nconst test = t.test\nconst decorator = require('../../lib/decorate')\nconst {\n  kState\n} = require('../../lib/symbols')\n\ntest('decorate should add the given method to its instance', t => {\n  t.plan(1)\n  function build () {\n    server.add = decorator.add\n    server[kState] = {\n      listening: false,\n      closing: false,\n      started: false\n    }\n    return server\n    function server () {}\n  }\n\n  const server = build()\n  server.add('test', () => {})\n  t.ok(server.test)\n})\n\ntest('decorate is chainable', t => {\n  t.plan(3)\n  function build () {\n    server.add = decorator.add\n    server[kState] = {\n      listening: false,\n      closing: false,\n      started: false\n    }\n    return server\n    function server () {}\n  }\n\n  const server = build()\n  server\n    .add('test1', () => {})\n    .add('test2', () => {})\n    .add('test3', () => {})\n\n  t.ok(server.test1)\n  t.ok(server.test2)\n  t.ok(server.test3)\n})\n\ntest('checkExistence should check if a property is part of the given instance', t => {\n  t.plan(1)\n  const instance = { test: () => {} }\n  t.ok(decorator.exist(instance, 'test'))\n})\n\ntest('checkExistence should find the instance if not given', t => {\n  t.plan(1)\n  function build () {\n    server.add = decorator.add\n    server.check = decorator.exist\n    server[kState] = {\n      listening: false,\n      closing: false,\n      started: false\n    }\n    return server\n    function server () {}\n  }\n\n  const server = build()\n  server.add('test', () => {})\n  t.ok(server.check('test'))\n})\n\ntest('checkExistence should check the prototype as well', t => {\n  t.plan(1)\n  function Instance () {}\n  Instance.prototype.test = () => {}\n\n  const instance = new Instance()\n  t.ok(decorator.exist(instance, 'test'))\n})\n\ntest('checkDependencies should throw if a dependency is not present', t => {\n  t.plan(2)\n  const instance = {}\n  try {\n    decorator.dependencies(instance, 'foo', ['test'])\n    t.fail()\n  } catch (e) {\n    t.equal(e.code, 'FST_ERR_DEC_MISSING_DEPENDENCY')\n    t.equal(e.message, 'The decorator is missing dependency \\'test\\'.')\n  }\n})\n\ntest('decorate should internally call checkDependencies', t => {\n  t.plan(2)\n  function build () {\n    server.add = decorator.add\n    server[kState] = {\n      listening: false,\n      closing: false,\n      started: false\n    }\n    return server\n    function server () {}\n  }\n\n  const server = build()\n\n  try {\n    server.add('method', () => {}, ['test'])\n    t.fail()\n  } catch (e) {\n    t.equal(e.code, 'FST_ERR_DEC_MISSING_DEPENDENCY')\n    t.equal(e.message, 'The decorator is missing dependency \\'test\\'.')\n  }\n})\n\ntest('decorate should recognize getter/setter objects', t => {\n  t.plan(6)\n\n  const one = {\n    [kState]: {\n      listening: false,\n      closing: false,\n      started: false\n    }\n  }\n  decorator.add.call(one, 'foo', {\n    getter: () => this._a,\n    setter: (val) => {\n      t.pass()\n      this._a = val\n    }\n  })\n  t.equal(Object.prototype.hasOwnProperty.call(one, 'foo'), true)\n  t.equal(one.foo, undefined)\n  one.foo = 'a'\n  t.equal(one.foo, 'a')\n\n  // getter only\n  const two = {\n    [kState]: {\n      listening: false,\n      closing: false,\n      started: false\n    }\n  }\n  decorator.add.call(two, 'foo', {\n    getter: () => 'a getter'\n  })\n  t.equal(Object.prototype.hasOwnProperty.call(two, 'foo'), true)\n  t.equal(two.foo, 'a getter')\n})\n/test/handler-context.test.js\u0004S'use strict'\nconst test = require('tap').test\nconst { kRouteContext } = require('../lib/symbols')\nconst fastify = require('../')\n\ntest('handlers receive correct `this` context', async (t) => {\n  t.plan(4)\n\n  // simulate plugin that uses fastify-plugin\n  const plugin = function (instance, opts, done) {\n    instance.decorate('foo', 'foo')\n    done()\n  }\n  plugin[Symbol.for('skip-override')] = true\n\n  const instance = fastify()\n  instance.register(plugin)\n\n  instance.get('/', function (req, reply) {\n    t.ok(this.foo)\n    t.equal(this.foo, 'foo')\n    reply.send()\n  })\n\n  await instance.inject('/')\n\n  t.ok(instance.foo)\n  t.equal(instance.foo, 'foo')\n})\n\ntest('handlers have access to the internal context', async (t) => {\n  t.plan(5)\n\n  const instance = fastify()\n  instance.get('/', { config: { foo: 'bar' } }, function (req, reply) {\n    t.ok(reply[kRouteContext])\n    t.ok(reply[kRouteContext].config)\n    t.type(reply[kRouteContext].config, Object)\n    t.ok(reply[kRouteContext].config.foo)\n    t.equal(reply[kRouteContext].config.foo, 'bar')\n    reply.send()\n  })\n\n  await instance.inject('/')\n})\n!/docs/Reference/Type-Providers.md\u0018<h1 align=\"center\">Fastify</h1>\n\n## Type Providers\n\nType Providers are a TypeScript only feature that enables Fastify to statically\ninfer type information directly from inline JSON Schema. They are an alternative\nto specifying generic arguments on routes; and can greatly reduce the need to\nkeep associated types for each schema defined in your project.\n\n### Providers\n\nType Providers are offered as additional packages you will need to install into\nyour project. Each provider uses a different inference library under the hood;\nallowing you to select the library most appropriate for your needs. Type\nProvider packages follow a `@fastify/type-provider-{provider-name}` naming\nconvention.\n\nThe following inference packages are supported:\n\n- `json-schema-to-ts` -\n  [github](https://github.com/ThomasAribart/json-schema-to-ts)\n- `typebox` - [github](https://github.com/sinclairzx81/typebox)\n\n### Json Schema to Ts\n\nThe following sets up a `json-schema-to-ts` Type Provider\n\n```bash\n$ npm i @fastify/type-provider-json-schema-to-ts\n```\n\n```typescript\nimport { JsonSchemaToTsProvider } from '@fastify/type-provider-json-schema-to-ts'\n\nimport fastify from 'fastify'\n\nconst server = fastify().withTypeProvider<JsonSchemaToTsProvider>()\n\nserver.get('/route', {\n    schema: {\n        querystring: {\n            type: 'object',\n            properties: {\n                foo: { type: 'number' },\n                bar: { type: 'string' },\n            },\n            required: ['foo', 'bar']\n        }\n    } as const // don't forget to use const !\n\n}, (request, reply) => {\n\n    // type Query = { foo: number, bar: string }\n\n    const { foo, bar } = request.query // type safe!\n})\n```\n\n### TypeBox\n\nThe following sets up a TypeBox Type Provider\n\n```bash\n$ npm i @fastify/type-provider-typebox\n```\n\n```typescript\nimport { TypeBoxTypeProvider } from '@fastify/type-provider-typebox'\nimport { Type } from '@sinclair/typebox'\n\nimport fastify from 'fastify'\n\nconst server = fastify().withTypeProvider<TypeBoxTypeProvider>()\n\nserver.get('/route', {\n    schema: {\n        querystring: Type.Object({\n            foo: Type.Number(),\n            bar: Type.String()\n        })\n    }\n}, (request, reply) => {\n\n    // type Query = { foo: number, bar: string }\n\n    const { foo, bar } = request.query // type safe!\n})\n```\n\nSee also the [TypeBox\ndocumentation](https://github.com/sinclairzx81/typebox#validation) on how to set\nup AJV to work with TypeBox.\n\n### Scoped Type-Provider\n\nThe provider types don't propagate globally. In encapsulated usage, one can\nremap the context to use one or more providers (for example, `typebox` and\n`json-schema-to-ts` can be used in the same application).\n\nExample:\n\n```ts\nimport Fastify from 'fastify'\nimport { TypeBoxTypeProvider } from '@fastify/type-provider-typebox'\nimport { JsonSchemaToTsProvider } from '@fastify/type-provider-json-schema-to-ts'\nimport { Type } from '@sinclair/typebox'\n\nconst fastify = Fastify()\n\nfunction pluginWithTypebox(fastify: FastifyInstance, _opts, done): void {\n  fastify.withTypeProvider<TypeBoxTypeProvider>()\n    .get('/', {\n      schema: {\n        body: Type.Object({\n          x: Type.String(),\n          y: Type.Number(),\n          z: Type.Boolean()\n        })\n      }\n    }, (req) => {\n        const { x, y, z } = req.body // type safe\n    });\n  done()\n}\n\nfunction pluginWithJsonSchema(fastify: FastifyInstance, _opts, done): void {\n  fastify.withTypeProvider<JsonSchemaToTsProvider>()\n    .get('/', {\n      schema: {\n        body: {\n          type: 'object',\n          properties: {\n            x: { type: 'string' },\n            y: { type: 'number' },\n            z: { type: 'boolean' }\n          },\n        } as const\n      }\n    }, (req) => {\n      const { x, y, z } = req.body // type safe\n    });\n  done()\n}\n\nfastify.register(pluginWithJsonSchema)\nfastify.register(pluginWithTypebox)\n```\n\nIt's also important to mention that once the types don't propagate globally,\n_currently_ is not possible to avoid multiple registrations on routes when\ndealing with several scopes, see below:\n\n```ts\nimport Fastify from 'fastify'\nimport { TypeBoxTypeProvider } from '@fastify/type-provider-typebox'\nimport { Type } from '@sinclair/typebox'\n\nconst server = Fastify().withTypeProvider<TypeBoxTypeProvider>()\n\nserver.register(plugin1) // wrong\nserver.register(plugin2) // correct\n\nfunction plugin1(fastify: FastifyInstance, _opts, done): void {\n  fastify.get('/', {\n    schema: {\n      body: Type.Object({\n        x: Type.String(),\n        y: Type.Number(),\n        z: Type.Boolean()\n      })\n    }\n  }, (req) => {\n    // it doesn't works! in a new scope needs to call `withTypeProvider` again\n    const { x, y, z } = req.body\n  });\n  done()\n}\n\nfunction plugin2(fastify: FastifyInstance, _opts, done): void {\n  const server = fastify.withTypeProvider<TypeBoxTypeProvider>()\n\n  server.get('/', {\n    schema: {\n      body: Type.Object({\n        x: Type.String(),\n        y: Type.Number(),\n        z: Type.Boolean()\n      })\n    }\n  }, (req) => {\n    // works\n    const { x, y, z } = req.body\n  });\n  done()\n}\n```\n\n### Type Definition of FastifyInstance + TypeProvider\n\nWhen working with modules one has to make use of `FastifyInstance` with Type\nProvider generics. See the example below:\n\n```ts\n// index.ts\nimport Fastify from 'fastify'\nimport { TypeBoxTypeProvider } from '@fastify/type-provider-typebox'\nimport { registerRoutes } from './routes'\n\nconst server = Fastify().withTypeProvider<TypeBoxTypeProvider>()\n\nregisterRoutes(server)\n\nserver.listen({ port: 3000 })\n```\n\n```ts\n// routes.ts\nimport { Type } from '@sinclair/typebox'\nimport {\n  FastifyInstance,\n  FastifyBaseLogger,\n  RawReplyDefaultExpression,\n  RawRequestDefaultExpression,\n  RawServerDefault\n} from 'fastify'\nimport { TypeBoxTypeProvider } from '@fastify/type-provider-typebox'\n\ntype FastifyTypebox = FastifyInstance<\n  RawServerDefault,\n  RawRequestDefaultExpression<RawServerDefault>,\n  RawReplyDefaultExpression<RawServerDefault>,\n  FastifyBaseLogger,\n  TypeBoxTypeProvider\n>;\n\nexport function registerRoutes(fastify: FastifyTypebox): void {\n  fastify.get('/', {\n    schema: {\n      body: Type.Object({\n        x: Type.String(),\n        y: Type.Number(),\n        z: Type.Boolean()\n      })\n    }\n  }, (req) => {\n    // works\n    const { x, y, z } = req.body\n  });\n}\n```\n/test/move.test.js\u0003'use strict'\n\nconst t = require('tap')\nconst test = t.test\nconst sget = require('simple-get').concat\nconst fastify = require('..')()\n\ntest('shorthand - move', t => {\n  t.plan(1)\n  try {\n    fastify.route({\n      method: 'MOVE',\n      url: '*',\n      handler: function (req, reply) {\n        const destination = req.headers.destination\n        reply.code(201)\n          .header('location', destination)\n          .send()\n      }\n    })\n    t.pass()\n  } catch (e) {\n    t.fail()\n  }\n})\n\nfastify.listen({ port: 0 }, err => {\n  t.error(err)\n  t.teardown(() => { fastify.close() })\n\n  test('request - move', t => {\n    t.plan(3)\n    sget({\n      url: `http://localhost:${fastify.server.address().port}/test.txt`,\n      method: 'MOVE',\n      headers: {\n        Destination: '/test2.txt'\n      }\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 201)\n      t.equal(response.headers.location, '/test2.txt')\n    })\n  })\n})\n/test/unlock.test.js\u0003J'use strict'\n\nconst t = require('tap')\nconst test = t.test\nconst sget = require('simple-get').concat\nconst fastify = require('..')()\n\ntest('can be created - unlock', t => {\n  t.plan(1)\n  try {\n    fastify.route({\n      method: 'UNLOCK',\n      url: '*',\n      handler: function (req, reply) {\n        reply.code(204).send()\n      }\n    })\n    t.pass()\n  } catch (e) {\n    t.fail()\n  }\n})\n\nfastify.listen({ port: 0 }, err => {\n  t.error(err)\n  t.teardown(() => { fastify.close() })\n\n  test('request - unlock', t => {\n    t.plan(2)\n    sget({\n      url: `http://localhost:${fastify.server.address().port}/test/a.txt`,\n      method: 'UNLOCK',\n      headers: {\n        'Lock-Token': 'urn:uuid:a515cfa4-5da4-22e1-f5b5-00a0451e6bf7'\n      }\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 204)\n    })\n  })\n})\n/test/types/reply.test-d.ts\u0013import { expectType, expectError, expectAssignable } from 'tsd'\nimport fastify, { RouteHandlerMethod, RouteHandler, RawRequestDefaultExpression, FastifyContext, FastifyContextConfig, FastifyRequest, FastifyReply } from '../../fastify'\nimport { RawServerDefault, RawReplyDefaultExpression, ContextConfigDefault } from '../../types/utils'\nimport { FastifyLoggerInstance } from '../../types/logger'\nimport { RouteGenericInterface } from '../../types/route'\nimport { FastifyInstance } from '../../types/instance'\nimport { Buffer } from 'buffer'\n\ntype DefaultSerializationFunction = (payload: {[key: string]: unknown}) => string\n\nconst getHandler: RouteHandlerMethod = function (_request, reply) {\n  expectType<RawReplyDefaultExpression>(reply.raw)\n  expectType<FastifyContext<ContextConfigDefault>>(reply.context)\n  expectType<FastifyContextConfig>(reply.context.config)\n  expectType<FastifyLoggerInstance>(reply.log)\n  expectType<FastifyRequest<RouteGenericInterface, RawServerDefault, RawRequestDefaultExpression>>(reply.request)\n  expectType<(statusCode: number) => FastifyReply>(reply.code)\n  expectType<(statusCode: number) => FastifyReply>(reply.status)\n  expectType<number>(reply.statusCode)\n  expectType<boolean>(reply.sent)\n  expectType<((payload?: unknown) => FastifyReply)>(reply.send)\n  expectType<(key: string, value: any) => FastifyReply>(reply.header)\n  expectType<(values: {[key: string]: any}) => FastifyReply>(reply.headers)\n  expectType<(key: string) => number | string | string[] | undefined>(reply.getHeader)\n  expectType<() => { [key: string]: number | string | string[] | undefined }>(reply.getHeaders)\n  expectType<(key: string) => void>(reply.removeHeader)\n  expectType<(key: string) => boolean>(reply.hasHeader)\n  expectType<{(statusCode: number, url: string): FastifyReply; (url: string): FastifyReply }>(reply.redirect)\n  expectType<() => FastifyReply>(reply.hijack)\n  expectType<() => void>(reply.callNotFound)\n  expectType<() => number>(reply.getResponseTime)\n  expectType<(contentType: string) => FastifyReply>(reply.type)\n  expectType<(fn: (payload: any) => string) => FastifyReply>(reply.serializer)\n  expectType<(payload: any) => string | ArrayBuffer | Buffer>(reply.serialize)\n  expectType<(fulfilled: () => void, rejected: (err: Error) => void) => void>(reply.then)\n  expectType<FastifyInstance>(reply.server)\n  expectAssignable<((httpStatus: string) => DefaultSerializationFunction)>(reply.getSerializationFunction)\n  expectAssignable<((schema: {[key: string]: unknown}) => DefaultSerializationFunction)>(reply.getSerializationFunction)\n  expectAssignable<((schema: {[key: string]: unknown}, httpStatus?: string) => DefaultSerializationFunction)>(reply.compileSerializationSchema)\n  expectAssignable<((input: {[key: string]: unknown}, schema: {[key: string]: unknown}, httpStatus?: string) => unknown)>(reply.serializeInput)\n  expectAssignable<((input: {[key: string]: unknown}, httpStatus: string) => unknown)>(reply.serializeInput)\n}\n\ninterface ReplyPayload {\n  Reply: {\n    test: boolean;\n  };\n}\n\ninterface ReplyUnion {\n  Reply: {\n    success: boolean;\n  } | {\n    error: string;\n  }\n}\n\nconst typedHandler: RouteHandler<ReplyPayload> = async (request, reply) => {\n  expectType<((payload?: ReplyPayload['Reply']) => FastifyReply<RawServerDefault, RawRequestDefaultExpression<RawServerDefault>, RawReplyDefaultExpression<RawServerDefault>, ReplyPayload>)>(reply.send)\n}\n\nconst server = fastify()\nserver.get('/get', getHandler)\nserver.get('/typed', typedHandler)\nserver.get<ReplyPayload>('/get-generic-send', async function handler (request, reply) {\n  reply.send({ test: true })\n})\nserver.get<ReplyPayload>('/get-generic-return', async function handler (request, reply) {\n  return { test: false }\n})\nexpectError(server.get<ReplyPayload>('/get-generic-send-error', async function handler (request, reply) {\n  reply.send({ foo: 'bar' })\n}))\nexpectError(server.get<ReplyPayload>('/get-generic-return-error', async function handler (request, reply) {\n  return { foo: 'bar' }\n}))\nserver.get<ReplyUnion>('/get-generic-union-send', async function handler (request, reply) {\n  if (0 as number === 0) {\n    reply.send({ success: true })\n  } else {\n    reply.send({ error: 'error' })\n  }\n})\nserver.get<ReplyUnion>('/get-generic-union-return', async function handler (request, reply) {\n  if (0 as number === 0) {\n    return { success: true }\n  } else {\n    return { error: 'error' }\n  }\n})\nexpectError(server.get<ReplyUnion>('/get-generic-union-send-error-1', async function handler (request, reply) {\n  reply.send({ successes: true })\n}))\nexpectError(server.get<ReplyUnion>('/get-generic-union-send-error-2', async function handler (request, reply) {\n  reply.send({ error: 500 })\n}))\nexpectError(server.get<ReplyUnion>('/get-generic-union-return-error-1', async function handler (request, reply) {\n  return { successes: true }\n}))\nexpectError(server.get<ReplyUnion>('/get-generic-union-return-error-2', async function handler (request, reply) {\n  return { error: 500 }\n}))\n/docs/Reference/Routes.mdh%<h1 align=\"center\">Fastify</h1>\n\n## Routes\n\nThe route methods will configure the endpoints of your application. You have two\nways to declare a route with Fastify: the shorthand method and the full\ndeclaration.\n\n- [Full declaration](#full-declaration)\n- [Routes options](#routes-options)\n- [Shorthand declaration](#shorthand-declaration)\n- [Url building](#url-building)\n- [Async Await](#async-await)\n- [Promise resolution](#promise-resolution)\n- [Route Prefixing](#route-prefixing)\n  - [Handling of / route inside prefixed\n    plugins](#handling-of--route-inside-prefixed-plugins)\n- [Custom Log Level](#custom-log-level)\n- [Custom Log Serializer](#custom-log-serializer)\n- [Config](#config)\n- [Constraints](#constraints)\n  - [Version Constraints](#version-constraints)\n  - [Host Constraints](#host-constraints)\n\n### Full declaration\n<a id=\"full-declaration\"></a>\n\n```js\nfastify.route(options)\n```\n\n### Routes options\n<a id=\"options\"></a>\n\n* `method`: currently it supports `'DELETE'`, `'GET'`, `'HEAD'`, `'PATCH'`,\n  `'POST'`, `'PUT'`, `'OPTIONS'`, `'SEARCH'`, `'TRACE'`, `'PROPFIND'`,\n  `'PROPPATCH'`, `'MKCOL'`, `'COPY'`, `'MOVE'`, `'LOCK'`  and `'UNLOCK'`.\n  It could also be an array of methods.\n* `url`: the path of the URL to match this route (alias: `path`).\n* `schema`: an object containing the schemas for the request and response. They\n  need to be in [JSON Schema](https://json-schema.org/) format, check\n  [here](./Validation-and-Serialization.md) for more info.\n\n  * `body`: validates the body of the request if it is a POST, PUT, PATCH,\n    TRACE, or SEARCH method.\n  * `querystring` or `query`: validates the querystring. This can be a complete\n    JSON Schema object, with the property `type` of `object` and `properties`\n    object of parameters, or simply the values of what would be contained in the\n    `properties` object as shown below.\n  * `params`: validates the params.\n  * `response`: filter and generate a schema for the response, setting a schema\n    allows us to have 10-20% more throughput.\n* `exposeHeadRoute`: creates a sibling `HEAD` route for any `GET` routes.\n  Defaults to the value of [`exposeHeadRoutes`](./Server.md#exposeHeadRoutes)\n  instance option. If you want a custom `HEAD` handler without disabling this\n  option, make sure to define it before the `GET` route.\n* `attachValidation`: attach `validationError` to request, if there is a schema\n  validation error, instead of sending the error to the error handler. The\n  default [error format](https://ajv.js.org/api.html#error-objects) is the Ajv\n  one.\n* `onRequest(request, reply, done)`: a [function](./Hooks.md#onrequest) called\n  as soon as a request is received, it could also be an array of functions.\n* `preParsing(request, reply, done)`: a [function](./Hooks.md#preparsing) called\n  before parsing the request, it could also be an array of functions.\n* `preValidation(request, reply, done)`: a [function](./Hooks.md#prevalidation)\n  called after the shared `preValidation` hooks, useful if you need to perform\n  authentication at route level for example, it could also be an array of\n  functions.\n* `preHandler(request, reply, done)`: a [function](./Hooks.md#prehandler) called\n  just before the request handler, it could also be an array of functions.\n* `preSerialization(request, reply, payload, done)`: a\n  [function](./Hooks.md#preserialization) called just before the serialization,\n  it could also be an array of functions.\n* `onSend(request, reply, payload, done)`: a [function](./Hooks.md#route-hooks)\n  called right before a response is sent, it could also be an array of\n  functions.\n* `onResponse(request, reply, done)`: a [function](./Hooks.md#onresponse) called\n  when a response has been sent, so you will not be able to send more data to\n  the client. It could also be an array of functions.\n* `onTimeout(request, reply, done)`: a [function](./Hooks.md#ontimeout) called\n  when a request is timed out and the HTTP socket has been hanged up.\n* `onError(request, reply, error, done)`: a [function](./Hooks.md#onerror)\n  called when an Error is thrown or sent to the client by the route handler.\n* `handler(request, reply)`: the function that will handle this request. The\n  [Fastify server](./Server.md) will be bound to `this` when the handler is\n  called. Note: using an arrow function will break the binding of `this`.\n* `errorHandler(error, request, reply)`: a custom error handler for the scope of\n  the request. Overrides the default error global handler, and anything set by\n  [`setErrorHandler`](./Server.md#seterrorhandler), for requests to the route.\n  To access the default handler, you can access `instance.errorHandler`. Note\n  that this will point to fastify's default `errorHandler` only if a plugin\n  hasn't overridden it already.\n* `validatorCompiler({ schema, method, url, httpPart })`: function that builds\n  schemas for request validations. See the [Validation and\n  Serialization](./Validation-and-Serialization.md#schema-validator)\n  documentation.\n* `serializerCompiler({ { schema, method, url, httpStatus, contentType } })`: \n  function that builds schemas for response serialization. See the [Validation and\n  Serialization](./Validation-and-Serialization.md#schema-serializer)\n  documentation.\n* `schemaErrorFormatter(errors, dataVar)`: function that formats the errors from\n  the validation compiler. See the [Validation and\n  Serialization](./Validation-and-Serialization.md#error-handling)\n  documentation. Overrides the global schema error formatter handler, and\n  anything set by `setSchemaErrorFormatter`, for requests to the route.\n* `bodyLimit`: prevents the default JSON body parser from parsing request bodies\n  larger than this number of bytes. Must be an integer. You may also set this\n  option globally when first creating the Fastify instance with\n  `fastify(options)`. Defaults to `1048576` (1 MiB).\n* `logLevel`: set log level for this route. See below.\n* `logSerializers`: set serializers to log for this route.\n* `config`: object used to store custom configuration.\n* `version`: a [semver](https://semver.org/) compatible string that defined the\n  version of the endpoint. [Example](#version-constraints).\n* `prefixTrailingSlash`: string used to determine how to handle passing `/` as a\n  route with a prefix.\n  * `both` (default): Will register both `/prefix` and `/prefix/`.\n  * `slash`: Will register only `/prefix/`.\n  * `no-slash`: Will register only `/prefix`.\n\n  Note: this option does not override `ignoreTrailingSlash` in\n  [Server](./Server.md) configuration.\n\n* `request` is defined in [Request](./Request.md).\n\n* `reply` is defined in [Reply](./Reply.md).\n\n**Notice:** The documentation of `onRequest`, `preParsing`, `preValidation`,\n`preHandler`, `preSerialization`, `onSend`, and `onResponse` are described in\nmore detail in [Hooks](./Hooks.md). Additionally, to send a response before the\nrequest is handled by the `handler` please refer to [Respond to a request from a\nhook](./Hooks.md#respond-to-a-request-from-a-hook).\n\nExample:\n```js\nfastify.route({\n  method: 'GET',\n  url: '/',\n  schema: {\n    querystring: {\n      name: { type: 'string' },\n      excitement: { type: 'integer' }\n    },\n    response: {\n      200: {\n        type: 'object',\n        properties: {\n          hello: { type: 'string' }\n        }\n      }\n    }\n  },\n  handler: function (request, reply) {\n    reply.send({ hello: 'world' })\n  }\n})\n```\n\n### Shorthand declaration\n<a id=\"shorthand-declaration\"></a>\n\nThe above route declaration is more *Hapi*-like, but if you prefer an\n*Express/Restify* approach, we support it as well:\n\n`fastify.get(path, [options], handler)`\n\n`fastify.head(path, [options], handler)`\n\n`fastify.post(path, [options], handler)`\n\n`fastify.put(path, [options], handler)`\n\n`fastify.delete(path, [options], handler)`\n\n`fastify.options(path, [options], handler)`\n\n`fastify.patch(path, [options], handler)`\n\nExample:\n```js\nconst opts = {\n  schema: {\n    response: {\n      200: {\n        type: 'object',\n        properties: {\n          hello: { type: 'string' }\n        }\n      }\n    }\n  }\n}\nfastify.get('/', opts, (request, reply) => {\n  reply.send({ hello: 'world' })\n})\n```\n\n`fastify.all(path, [options], handler)` will add the same handler to all the\nsupported methods.\n\nThe handler may also be supplied via the `options` object:\n```js\nconst opts = {\n  schema: {\n    response: {\n      200: {\n        type: 'object',\n        properties: {\n          hello: { type: 'string' }\n        }\n      }\n    }\n  },\n  handler: function (request, reply) {\n    reply.send({ hello: 'world' })\n  }\n}\nfastify.get('/', opts)\n```\n\n> Note: if the handler is specified in both the `options` and as the third\n> parameter to the shortcut method then throws duplicate `handler` error.\n\n### Url building\n<a id=\"url-building\"></a>\n\nFastify supports both static and dynamic URLs.\n\nTo register a **parametric** path, use the *colon* before the parameter name.\nFor **wildcard**, use the *star*. *Remember that static routes are always\nchecked before parametric and wildcard.*\n\n```js\n// parametric\nfastify.get('/example/:userId', function (request, reply) {\n  // curl ${app-url}/example/12345\n  // userId === '12345'\n  const { userId } = request.params;\n  // your code here\n})\nfastify.get('/example/:userId/:secretToken', function (request, reply) {\n  // curl ${app-url}/example/12345/abc.zHi\n  // userId === '12345'\n  // secretToken === 'abc.zHi'\n  const { userId, secretToken } = request.params;\n  // your code here\n})\n\n// wildcard\nfastify.get('/example/*', function (request, reply) {})\n```\n\nRegular expression routes are supported as well, but be aware that you have to\nescape slashes. Take note that RegExp is also very expensive in terms of\nperformance!\n```js\n// parametric with regexp\nfastify.get('/example/:file(^\\\\d+).png', function (request, reply) {\n  // curl ${app-url}/example/12345.png\n  // file === '12345'\n  const { file } = request.params;\n  // your code here\n})\n```\n\nIt is possible to define more than one parameter within the same couple of slash\n(\"/\"). Such as:\n```js\nfastify.get('/example/near/:lat-:lng/radius/:r', function (request, reply) {\n  // curl ${app-url}/example/near/15°N-30°E/radius/20\n  // lat === \"15°N\"\n  // lng === \"30°E\"\n  // r ===\"20\"\n  const { lat, lng, r } = request.params;\n  // your code here\n})\n```\n*Remember in this case to use the dash (\"-\") as parameters separator.*\n\nFinally, it is possible to have multiple parameters with RegExp:\n```js\nfastify.get('/example/at/:hour(^\\\\d{2})h:minute(^\\\\d{2})m', function (request, reply) {\n  // curl ${app-url}/example/at/08h24m\n  // hour === \"08\"\n  // minute === \"24\"\n  const { hour, minute } = request.params;\n  // your code here\n})\n```\nIn this case as parameter separator it is possible to use whatever character is\nnot matched by the regular expression.\n\nHaving a route with multiple parameters may negatively affect performance, so\nprefer a single parameter approach whenever possible, especially on routes that\nare on the hot path of your application. If you are interested in how we handle\nthe routing, check out [find-my-way](https://github.com/delvedor/find-my-way).\n\nIf you want a path containing a colon without declaring a parameter, use a\ndouble colon. For example:\n```js\nfastify.post('/name::verb') // will be interpreted as /name:verb\n```\n\n### Async Await\n<a id=\"async-await\"></a>\n\nAre you an `async/await` user? We have you covered!\n```js\nfastify.get('/', options, async function (request, reply) {\n  var data = await getData()\n  var processed = await processData(data)\n  return processed\n})\n```\n\nAs you can see, we are not calling `reply.send` to send back the data to the\nuser. You just need to return the body and you are done!\n\nIf you need it you can also send back the data to the user with `reply.send`. In\nthis case do not forget to `return reply` or `await reply` in your `async`\nhandler or you will introduce a race condition in certain situations.\n\n```js\nfastify.get('/', options, async function (request, reply) {\n  var data = await getData()\n  var processed = await processData(data)\n  return reply.send(processed)\n})\n```\n\nIf the route is wrapping a callback-based API that will call `reply.send()`\noutside of the promise chain, it is possible to `await reply`:\n\n```js\nfastify.get('/', options, async function (request, reply) {\n  setImmediate(() => {\n    reply.send({ hello: 'world' })\n  })\n  await reply\n})\n```\n\nReturning reply also works:\n\n```js\nfastify.get('/', options, async function (request, reply) {\n  setImmediate(() => {\n    reply.send({ hello: 'world' })\n  })\n  return reply\n})\n```\n\n**Warning:**\n* When using both `return value` and `reply.send(value)` at the same time, the\n  first one that happens takes precedence, the second value will be discarded,\n  and a *warn* log will also be emitted because you tried to send a response\n  twice.\n* Calling `reply.send()` outside of the promise is possible but requires special\n  attention. For more details read [promise-resolution](#promise-resolution).\n* You cannot return `undefined`. For more details read\n  [promise-resolution](#promise-resolution).\n\n### Promise resolution\n<a id=\"promise-resolution\"></a>\n\nIf your handler is an `async` function or returns a promise, you should be aware\nof the special behavior that is necessary to support the callback and promise\ncontrol-flow. When the handler's promise is resolved, the reply will be\nautomatically sent with its value unless you explicitly await or return `reply`\nin your handler.\n\n1. If you want to use `async/await` or promises but respond with a value with\n   `reply.send`:\n    - **Do** `return reply` / `await reply`.\n    - **Do not** forget to call `reply.send`.\n2. If you want to use `async/await` or promises:\n    - **Do not** use `reply.send`.\n    - **Do** return the value that you want to send.\n\nIn this way, we can support both `callback-style` and `async-await`, with the\nminimum trade-off. Despite so much freedom we highly recommend going with only\none style because error handling should be handled in a consistent way within\nyour application.\n\n**Notice**: Every async function returns a promise by itself.\n\n### Route Prefixing\n<a id=\"route-prefixing\"></a>\n\nSometimes you need to maintain two or more different versions of the same API; a\nclassic approach is to prefix all the routes with the API version number,\n`/v1/user` for example. Fastify offers you a fast and smart way to create\ndifferent versions of the same API without changing all the route names by hand,\n*route prefixing*. Let's see how it works:\n\n```js\n// server.js\nconst fastify = require('fastify')()\n\nfastify.register(require('./routes/v1/users'), { prefix: '/v1' })\nfastify.register(require('./routes/v2/users'), { prefix: '/v2' })\n\nfastify.listen({ port: 3000 })\n```\n\n```js\n// routes/v1/users.js\nmodule.exports = function (fastify, opts, done) {\n  fastify.get('/user', handler_v1)\n  done()\n}\n```\n\n```js\n// routes/v2/users.js\nmodule.exports = function (fastify, opts, done) {\n  fastify.get('/user', handler_v2)\n  done()\n}\n```\nFastify will not complain because you are using the same name for two different\nroutes, because at compilation time it will handle the prefix automatically\n*(this also means that the performance will not be affected at all!)*.\n\nNow your clients will have access to the following routes:\n- `/v1/user`\n- `/v2/user`\n\nYou can do this as many times as you want, it also works for nested `register`,\nand route parameters are supported as well.\n\nIn case you want to use prefix for all of your routes, you can put them inside a\nplugin:\n\n```js\nconst fastify = require('fastify')()\n\nconst route = {\n    method: 'POST',\n    url: '/login',\n    handler: () => {},\n    schema: {},\n}\n\nfastify.register(function(app, _, done) {\n  app.get('/users', () => {})\n  app.route(route)\n\n  done()\n}, { prefix: '/v1' }) // global route prefix\n\nawait fastify.listen({ port: 0 })\n```\n\n### Route Prefixing and fastify-plugin\n<a id=\"fastify-plugin\"></a>\n\nBe aware that if you use\n[`fastify-plugin`](https://github.com/fastify/fastify-plugin) for wrapping your\nroutes, this option will not work. You can still make it work by wrapping a\nplugin in a plugin, e. g.:\n```js\nconst fp = require('fastify-plugin')\nconst routes = require('./lib/routes')\n\nmodule.exports = fp(async function (app, opts) {\n  app.register(routes, {\n    prefix: '/v1',\n  })\n}, {\n  name: 'my-routes'\n})\n```\n\n#### Handling of / route inside prefixed plugins\n\nThe `/` route has different behavior depending on if the prefix ends with `/` or\nnot. As an example, if we consider a prefix `/something/`, adding a `/` route\nwill only match `/something/`. If we consider a prefix `/something`, adding a\n`/` route will match both `/something` and `/something/`.\n\nSee the `prefixTrailingSlash` route option above to change this behavior.\n\n### Custom Log Level\n<a id=\"custom-log-level\"></a>\n\nYou might need different log levels in your routes; Fastify achieves this in a\nvery straightforward way.\n\nYou just need to pass the option `logLevel` to the plugin option or the route\noption with the\n[value](https://github.com/pinojs/pino/blob/master/docs/api.md#level-string)\nthat you need.\n\nBe aware that if you set the `logLevel` at plugin level, also the\n[`setNotFoundHandler`](./Server.md#setnotfoundhandler) and\n[`setErrorHandler`](./Server.md#seterrorhandler) will be affected.\n\n```js\n// server.js\nconst fastify = require('fastify')({ logger: true })\n\nfastify.register(require('./routes/user'), { logLevel: 'warn' })\nfastify.register(require('./routes/events'), { logLevel: 'debug' })\n\nfastify.listen({ port: 3000 })\n```\n\nOr you can directly pass it to a route:\n```js\nfastify.get('/', { logLevel: 'warn' }, (request, reply) => {\n  reply.send({ hello: 'world' })\n})\n```\n*Remember that the custom log level is applied only to the routes, and not to\nthe global Fastify Logger, accessible with `fastify.log`*\n\n### Custom Log Serializer\n<a id=\"custom-log-serializer\"></a>\n\nIn some contexts, you may need to log a large object but it could be a waste of\nresources for some routes. In this case, you can define custom\n[`serializers`](https://github.com/pinojs/pino/blob/master/docs/api.md#serializers-object)\nand attach them in the right context!\n\n```js\nconst fastify = require('fastify')({ logger: true })\n\nfastify.register(require('./routes/user'), {\n  logSerializers: {\n    user: (value) => `My serializer one - ${value.name}`\n  }\n})\nfastify.register(require('./routes/events'), {\n  logSerializers: {\n    user: (value) => `My serializer two - ${value.name} ${value.surname}`\n  }\n})\n\nfastify.listen({ port: 3000 })\n```\n\nYou can inherit serializers by context:\n\n```js\nconst fastify = Fastify({\n  logger: {\n    level: 'info',\n    serializers: {\n      user (req) {\n        return {\n          method: req.method,\n          url: req.url,\n          headers: req.headers,\n          hostname: req.hostname,\n          remoteAddress: req.ip,\n          remotePort: req.socket.remotePort\n        }\n      }\n    }\n  }\n})\n\nfastify.register(context1, {\n  logSerializers: {\n    user: value => `My serializer father - ${value}`\n  }\n})\n\nasync function context1 (fastify, opts) {\n  fastify.get('/', (req, reply) => {\n    req.log.info({ user: 'call father serializer', key: 'another key' })\n    // shows: { user: 'My serializer father - call father  serializer', key: 'another key' }\n    reply.send({})\n  })\n}\n\nfastify.listen({ port: 3000 })\n```\n\n### Config\n<a id=\"routes-config\"></a>\n\nRegistering a new handler, you can pass a configuration object to it and\nretrieve it in the handler.\n\n```js\n// server.js\nconst fastify = require('fastify')()\n\nfunction handler (req, reply) {\n  reply.send(reply.context.config.output)\n}\n\nfastify.get('/en', { config: { output: 'hello world!' } }, handler)\nfastify.get('/it', { config: { output: 'ciao mondo!' } }, handler)\n\nfastify.listen({ port: 3000 })\n```\n\n### Constraints\n<a id=\"constraints\"></a>\n\nFastify supports constraining routes to match only certain requests based on\nsome property of the request, like the `Host` header, or any other value via\n[`find-my-way`](https://github.com/delvedor/find-my-way) constraints.\nConstraints are specified in the `constraints` property of the route options.\nFastify has two built-in constraints ready for use: the `version` constraint and\nthe `host` constraint, and you can add your own custom constraint strategies to\ninspect other parts of a request to decide if a route should be executed for a\nrequest.\n\n#### Version Constraints\n\nYou can provide a `version` key in the `constraints` option to a route.\nVersioned routes allow you to declare multiple handlers for the same HTTP route\npath, which will then be matched according to each request's `Accept-Version`\nheader. The `Accept-Version` header value should follow the\n[semver](https://semver.org/) specification, and routes should be declared with\nexact semver versions for matching.\n\nFastify will require a request `Accept-Version` header to be set if the route\nhas a version set, and will prefer a versioned route to a non-versioned route\nfor the same path. Advanced version ranges and pre-releases currently are not\nsupported.\n\n*Be aware that using this feature will cause a degradation of the overall\nperformances of the router.*\n\n```js\nfastify.route({\n  method: 'GET',\n  url: '/',\n  constraints: { version: '1.2.0' },\n  handler: function (request, reply) {\n    reply.send({ hello: 'world' })\n  }\n})\n\nfastify.inject({\n  method: 'GET',\n  url: '/',\n  headers: {\n    'Accept-Version': '1.x' // it could also be '1.2.0' or '1.2.x'\n  }\n}, (err, res) => {\n  // { hello: 'world' }\n})\n```\n\n> ## ⚠  Security Notice\n> Remember to set a\n> [`Vary`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Vary)\n> header in your responses with the value you are using for defining the\n> versioning (e.g.: `'Accept-Version'`), to prevent cache poisoning attacks. You\n> can also configure this as part of your Proxy/CDN.\n>\n> ```js\n> const append = require('vary').append\n> fastify.addHook('onSend', (req, reply, payload, done) => {\n>   if (req.headers['accept-version']) { // or the custom header you are using\n>     let value = reply.getHeader('Vary') || ''\n>     const header = Array.isArray(value) ? value.join(', ') : String(value)\n>     if ((value = append(header, 'Accept-Version'))) { // or the custom header you are using\n>       reply.header('Vary', value)\n>     }\n>   }\n>  done()\n> })\n> ```\n\nIf you declare multiple versions with the same major or minor, Fastify will\nalways choose the highest compatible with the `Accept-Version` header value.\n\nIf the request will not have the `Accept-Version` header, a 404 error will be\nreturned.\n\nIt is possible to define a custom version matching logic. This can be done\nthrough the [`constraints`](./Server.md#constraints) configuration when creating\na Fastify server instance.\n\n#### Host Constraints\n\nYou can provide a `host` key in the `constraints` route option for to limit that\nroute to only be matched for certain values of the request `Host` header. `host`\nconstraint values can be specified as strings for exact matches or RegExps for\narbitrary host matching.\n\n```js\nfastify.route({\n  method: 'GET',\n  url: '/',\n  constraints: { host: 'auth.fastify.io' },\n  handler: function (request, reply) {\n    reply.send('hello world from auth.fastify.io')\n  }\n})\n\nfastify.inject({\n  method: 'GET',\n  url: '/',\n  headers: {\n    'Host': 'example.com'\n  }\n}, (err, res) => {\n  // 404 because the host doesn't match the constraint\n})\n\nfastify.inject({\n  method: 'GET',\n  url: '/',\n  headers: {\n    'Host': 'auth.fastify.io'\n  }\n}, (err, res) => {\n  // => 'hello world from auth.fastify.io'\n})\n```\n\nRegExp `host` constraints can also be specified allowing constraining to hosts\nmatching wildcard subdomains (or any other pattern):\n\n```js\nfastify.route({\n  method: 'GET',\n  url: '/',\n  constraints: { host: /.*\\.fastify\\.io/ }, // will match any subdomain of fastify.io\n  handler: function (request, reply) {\n    reply.send('hello world from ' + request.headers.host)\n  }\n})\n```\n\n#### Asynchronous Custom Constraints\n\nCustom constraints can be provided and the `constraint` criteria can be\nfetched from another source such as `database`. The use of asynchronous\ncustom constraints should be a last resort as it impacts router\nperformance.\n\n```js\nfunction databaseOperation(field, done) {\n  done(null, field)\n}\n\nconst secret = {\n  // strategy name for referencing in the route handler `constraints` options\n  name: 'secret',\n  // storage factory for storing routes in the find-my-way route tree\n  storage: function () {\n    let handlers = {}\n    return {\n      get: (type) => { return handlers[type] || null },\n      set: (type, store) => { handlers[type] = store }\n    }\n  },\n  // function to get the value of the constraint from each incoming request\n  deriveConstraint: (req, ctx, done) => {\n    databaseOperation(req.headers['secret'], done)\n  },\n  // optional flag marking if handlers without constraints can match requests that have a value for this constraint\n  mustMatchWhenDerived: true\n}\n```\n\n> ## ⚠  Security Notice\n> When using with asynchronous constraint. It is highly recommend never return error\n> inside the callback. If the error is not preventable, it is recommended to provide\n> a custom `frameworkErrors` handler to deal with it. Otherwise, you route selection\n> may break or expose sensitive information to attackers.\n> \n> ```js\n> const Fastify = require('fastify')\n> \n> const fastify = Fastify({\n>   frameworkErrors: function(err, res, res) {\n>     if(err instanceof Fastify.errorCodes.FST_ERR_ASYNC_CONSTRAINT) {\n>       res.code(400)\n>       return res.send(\"Invalid header provided\")\n>     } else {\n>       res.send(err)\n>     }\n>   }\n> })\n> ```\n\n\n### ⚠  HTTP version check\n\nFastify will check the HTTP version of every request, based on configuration\noptions ([http2](./Server.md#http2), [https](./Server.md#https), and\n[serverFactory](./Server.md#serverfactory)), to determine if it matches one or\nall of the > following versions: `2.0`, `1.1`, and `1.0`. If Fastify receives a\ndifferent HTTP version in the request it will return a `505 HTTP Version Not\nSupported` error.\n\n|                          | 2.0 | 1.1 | 1.0 | skip |\n|:------------------------:|:---:|:---:|:---:|:----:|\n| http2                    | ✓   |     |     |      |\n| http2 + https            | ✓   |     |     |      |\n| http2 + https.allowHTTP1 | ✓   | ✓   | ✓   |      |\n| https                    |     | ✓   | ✓   |      |\n| http                     |     | ✓   | ✓   |      |\n| serverFactory            |     |     |     | ✓    |\n\n Note: The internal HTTP version check will be removed in the future when Node\n implements [this feature](https://github.com/nodejs/node/issues/43115).\n/test/input-validation.js!'use strict'\n\nconst sget = require('simple-get').concat\nconst Ajv = require('ajv')\nconst Joi = require('joi')\nconst yup = require('yup')\n\nmodule.exports.payloadMethod = function (method, t) {\n  const test = t.test\n  const fastify = require('..')()\n  const upMethod = method.toUpperCase()\n  const loMethod = method.toLowerCase()\n\n  const opts = {\n    schema: {\n      body: {\n        type: 'object',\n        properties: {\n          hello: {\n            type: 'integer'\n          }\n        }\n      }\n    }\n  }\n\n  const ajv = new Ajv({ coerceTypes: true, removeAdditional: true })\n  const optsWithCustomValidator = {\n    schema: {\n      body: {\n        type: 'object',\n        properties: {\n          hello: {\n            type: 'integer'\n          }\n        },\n        additionalProperties: false\n      }\n    },\n    validatorCompiler: function ({ schema, method, url, httpPart }) {\n      return ajv.compile(schema)\n    }\n  }\n\n  const optsWithJoiValidator = {\n    schema: {\n      body: Joi.object().keys({\n        hello: Joi.string().required()\n      }).required()\n    },\n    validatorCompiler: function ({ schema, method, url, httpPart }) {\n      return schema.validate.bind(schema)\n    }\n  }\n\n  const yupOptions = {\n    strict: true, // don't coerce\n    abortEarly: false, // return all errors\n    stripUnknown: true, // remove additional properties\n    recursive: true\n  }\n\n  const optsWithYupValidator = {\n    schema: {\n      body: yup.object().shape({\n        hello: yup.string().required()\n      }).required()\n    },\n    validatorCompiler: function ({ schema, method, url, httpPart }) {\n      return data => {\n        try {\n          const result = schema.validateSync(data, yupOptions)\n          return { value: result }\n        } catch (e) {\n          return { error: e }\n        }\n      }\n    }\n  }\n\n  test(`${upMethod} can be created`, t => {\n    t.plan(1)\n    try {\n      fastify[loMethod]('/', opts, function (req, reply) {\n        reply.send(req.body)\n      })\n      fastify[loMethod]('/custom', optsWithCustomValidator, function (req, reply) {\n        reply.send(req.body)\n      })\n      fastify[loMethod]('/joi', optsWithJoiValidator, function (req, reply) {\n        reply.send(req.body)\n      })\n      fastify[loMethod]('/yup', optsWithYupValidator, function (req, reply) {\n        reply.send(req.body)\n      })\n\n      fastify.register(function (fastify2, opts, done) {\n        fastify2.setValidatorCompiler(function schema ({ schema, method, url, httpPart }) {\n          return body => ({ error: new Error('From custom schema compiler!') })\n        })\n        const withInstanceCustomCompiler = {\n          schema: {\n            body: {\n              type: 'object',\n              properties: { },\n              additionalProperties: false\n            }\n          }\n        }\n        fastify2[loMethod]('/plugin', withInstanceCustomCompiler, (req, reply) => reply.send({ hello: 'never here!' }))\n\n        const optsWithCustomValidator2 = {\n          schema: {\n            body: {\n              type: 'object',\n              properties: { },\n              additionalProperties: false\n            }\n          },\n          validatorCompiler: function ({ schema, method, url, httpPart }) {\n            return function (body) {\n              return { error: new Error('Always fail!') }\n            }\n          }\n        }\n        fastify2[loMethod]('/plugin/custom', optsWithCustomValidator2, (req, reply) => reply.send({ hello: 'never here!' }))\n\n        done()\n      })\n      t.pass()\n    } catch (e) {\n      t.fail()\n    }\n  })\n\n  fastify.listen({ port: 0 }, function (err) {\n    if (err) {\n      t.error(err)\n    }\n\n    t.teardown(() => { fastify.close() })\n\n    test(`${upMethod} - correctly replies`, t => {\n      if (upMethod === 'HEAD') {\n        t.plan(2)\n        sget({\n          method: upMethod,\n          url: 'http://localhost:' + fastify.server.address().port\n        }, (err, response) => {\n          t.error(err)\n          t.equal(response.statusCode, 200)\n        })\n      } else {\n        t.plan(3)\n        sget({\n          method: upMethod,\n          url: 'http://localhost:' + fastify.server.address().port,\n          body: {\n            hello: 42\n          },\n          json: true\n        }, (err, response, body) => {\n          t.error(err)\n          t.equal(response.statusCode, 200)\n          t.same(body, { hello: 42 })\n        })\n      }\n    })\n\n    test(`${upMethod} - 400 on bad parameters`, t => {\n      t.plan(3)\n      sget({\n        method: upMethod,\n        url: 'http://localhost:' + fastify.server.address().port,\n        body: {\n          hello: 'world'\n        },\n        json: true\n      }, (err, response, body) => {\n        t.error(err)\n        t.equal(response.statusCode, 400)\n        t.same(body, {\n          error: 'Bad Request',\n          message: 'body/hello must be integer',\n          statusCode: 400\n        })\n      })\n    })\n\n    test(`${upMethod} - input-validation coerce`, t => {\n      t.plan(3)\n      sget({\n        method: upMethod,\n        url: 'http://localhost:' + fastify.server.address().port,\n        body: {\n          hello: '42'\n        },\n        json: true\n      }, (err, response, body) => {\n        t.error(err)\n        t.equal(response.statusCode, 200)\n        t.same(body, { hello: 42 })\n      })\n    })\n\n    test(`${upMethod} - input-validation custom schema compiler`, t => {\n      t.plan(3)\n      sget({\n        method: upMethod,\n        url: 'http://localhost:' + fastify.server.address().port + '/custom',\n        body: {\n          hello: '42',\n          world: 55\n        },\n        json: true\n      }, (err, response, body) => {\n        t.error(err)\n        t.equal(response.statusCode, 200)\n        t.same(body, { hello: 42 })\n      })\n    })\n\n    test(`${upMethod} - input-validation joi schema compiler ok`, t => {\n      t.plan(3)\n      sget({\n        method: upMethod,\n        url: 'http://localhost:' + fastify.server.address().port + '/joi',\n        body: {\n          hello: '42'\n        },\n        json: true\n      }, (err, response, body) => {\n        t.error(err)\n        t.equal(response.statusCode, 200)\n        t.same(body, { hello: 42 })\n      })\n    })\n\n    test(`${upMethod} - input-validation joi schema compiler ko`, t => {\n      t.plan(3)\n      sget({\n        method: upMethod,\n        url: 'http://localhost:' + fastify.server.address().port + '/joi',\n        body: {\n          hello: 44\n        },\n        json: true\n      }, (err, response, body) => {\n        t.error(err)\n        t.equal(response.statusCode, 400)\n        t.same(body, {\n          error: 'Bad Request',\n          message: '\"hello\" must be a string',\n          statusCode: 400\n        })\n      })\n    })\n\n    test(`${upMethod} - input-validation yup schema compiler ok`, t => {\n      t.plan(3)\n      sget({\n        method: upMethod,\n        url: 'http://localhost:' + fastify.server.address().port + '/yup',\n        body: {\n          hello: '42'\n        },\n        json: true\n      }, (err, response, body) => {\n        t.error(err)\n        t.equal(response.statusCode, 200)\n        t.same(body, { hello: 42 })\n      })\n    })\n\n    test(`${upMethod} - input-validation yup schema compiler ko`, t => {\n      t.plan(3)\n      sget({\n        method: upMethod,\n        url: 'http://localhost:' + fastify.server.address().port + '/yup',\n        body: {\n          hello: 44\n        },\n        json: true\n      }, (err, response, body) => {\n        t.error(err)\n        t.equal(response.statusCode, 400)\n        t.same(body, {\n          error: 'Bad Request',\n          message: 'hello must be a `string` type, but the final value was: `44`.',\n          statusCode: 400\n        })\n      })\n    })\n\n    test(`${upMethod} - input-validation instance custom schema compiler encapsulated`, t => {\n      t.plan(3)\n      sget({\n        method: upMethod,\n        url: 'http://localhost:' + fastify.server.address().port + '/plugin',\n        body: { },\n        json: true\n      }, (err, response, body) => {\n        t.error(err)\n        t.equal(response.statusCode, 400)\n        t.same(body, {\n          error: 'Bad Request',\n          message: 'From custom schema compiler!',\n          statusCode: '400'\n        })\n      })\n    })\n\n    test(`${upMethod} - input-validation custom schema compiler encapsulated`, t => {\n      t.plan(3)\n      sget({\n        method: upMethod,\n        url: 'http://localhost:' + fastify.server.address().port + '/plugin/custom',\n        body: { },\n        json: true\n      }, (err, response, body) => {\n        t.error(err)\n        t.equal(response.statusCode, 400)\n        t.same(body, {\n          error: 'Bad Request',\n          message: 'Always fail!',\n          statusCode: '400'\n        })\n      })\n    })\n  })\n}\n/docs/Reference/Decorators.md%z<h1 align=\"center\">Fastify</h1>\n\n## Decorators\n\nThe decorators API allows customization of the core Fastify objects, such as the\nserver instance itself and any request and reply objects used during the HTTP\nrequest lifecycle. The decorators API can be used to attach any type of property\nto the core objects, e.g. functions, plain objects, or native types.\n\nThis API is *synchronous*. Attempting to define a decoration asynchronously\ncould result in the Fastify instance booting before the decoration completes its\ninitialization. To avoid this issue, and register an asynchronous decoration,\nthe `register` API, in combination with `fastify-plugin`, must be used instead.\nTo learn more, see the [Plugins](./Plugins.md) documentation.\n\nDecorating core objects with this API allows the underlying JavaScript engine to\noptimize the handling of server, request, and reply objects. This is\naccomplished by defining the shape of all such object instances before they are\ninstantiated and used. As an example, the following is not recommended because\nit will change the shape of objects during their lifecycle:\n\n```js\n// Bad example! Continue reading.\n\n// Attach a user property to the incoming request before the request\n// handler is invoked.\nfastify.addHook('preHandler', function (req, reply, done) {\n  req.user = 'Bob Dylan'\n  done()\n})\n\n// Use the attached user property in the request handler.\nfastify.get('/', function (req, reply) {\n  reply.send(`Hello, ${req.user}`)\n})\n```\n\nSince the above example mutates the request object after it has already been\ninstantiated, the JavaScript engine must deoptimize access to the request\nobject. By using the decoration API this deoptimization is avoided:\n\n```js\n// Decorate request with a 'user' property\nfastify.decorateRequest('user', '')\n\n// Update our property\nfastify.addHook('preHandler', (req, reply, done) => {\n  req.user = 'Bob Dylan'\n  done()\n})\n// And finally access it\nfastify.get('/', (req, reply) => {\n  reply.send(`Hello, ${req.user}!`)\n})\n```\n\nNote that it is important to keep the initial shape of a decorated field as\nclose as possible to the value intended to be set dynamically in the future.\nInitialize a decorator as a `''` if the intended value is a string, and as\n`null` if it will be an object or a function.\n\nRemember this example works only with value types as reference types will be\nshared amongst all requests. See [decorateRequest](#decorate-request).\n\nSee [JavaScript engine fundamentals: Shapes and Inline\nCaches](https://mathiasbynens.be/notes/shapes-ics) for more information on this\ntopic.\n\n### Usage\n<a id=\"usage\"></a>\n\n#### `decorate(name, value, [dependencies])`\n<a id=\"decorate\"></a>\n\nThis method is used to customize the Fastify [server](./Server.md)\ninstance.\n\nFor example, to attach a new method to the server instance:\n\n```js\nfastify.decorate('utility', function () {\n  // Something very useful\n})\n```\n\nAs mentioned above, non-function values can be attached:\n\n```js\nfastify.decorate('conf', {\n  db: 'some.db',\n  port: 3000\n})\n```\n\nTo access decorated properties, use the name provided to the decoration API:\n\n```js\nfastify.utility()\n\nconsole.log(fastify.conf.db)\n```\n\nThe decorated [Fastify server](./Server.md) is bound to `this` in\nroute [route](./Routes.md) handlers:\n\n```js\nfastify.decorate('db', new DbConnection())\n\nfastify.get('/', async function (request, reply) {\n  // using return\n  return { hello: await this.db.query('world') }\n  \n  // or\n  // using reply.send()\n  reply.send({ hello: await this.db.query('world') })\n  await reply\n})\n```\n\nThe `dependencies` parameter is an optional list of decorators that the\ndecorator being defined relies upon. This list is simply a list of string names\nof other decorators. In the following example, the \"utility\" decorator depends\nupon \"greet\" and \"hi\" decorators:\n\n```js\nasync function greetDecorator (fastify, opts) {\n  fastify.decorate('greet', () => {\n    return 'greet message'\n  })\n}\n\nasync function hiDecorator (fastify, opts) {\n  fastify.decorate('hi', () => {\n    return 'hi message'\n  })\n}\n\nasync function utilityDecorator (fastify, opts) {\n  fastify.decorate('utility', () => {\n    return `${fastify.greet()} | ${fastify.hi()}`\n  })\n}\n\nfastify.register(fastifyPlugin(greetDecorator, { name: 'greet' }))\nfastify.register(fastifyPlugin(hiDecorator, { name: 'hi' }))\nfastify.register(fastifyPlugin(utilityDecorator, { dependencies: ['greet', 'hi'] }))\n\nfastify.get('/', function (req, reply) {\n  // Response: {\"hello\":\"greet message | hi message\"}\n  reply.send({ hello: fastify.utility() })\n})\n\nfastify.listen({ port: 3000 }, (err, address) => {\n  if (err) throw err\n})\n```\n\nNote: using an arrow function will break the binding of `this` to the\n`FastifyInstance`.\n\nIf a dependency is not satisfied, the `decorate` method will throw an exception.\nThe dependency check is performed before the server instance is booted. Thus, it\ncannot occur during runtime.\n\n#### `decorateReply(name, value, [dependencies])`\n<a id=\"decorate-reply\"></a>\n\nAs the name suggests, this API is used to add new methods/properties to the core\n`Reply` object:\n\n```js\nfastify.decorateReply('utility', function () {\n  // Something very useful\n})\n```\n\nNote: using an arrow function will break the binding of `this` to the Fastify\n`Reply` instance.\n\nNote: using `decorateReply` will emit a warning if used with a reference type:\n\n```js\n// Don't do this\nfastify.decorateReply('foo', { bar: 'fizz'})\n```\nIn this example, the reference of the object is shared with all the requests:\n**any mutation will impact all requests, potentially creating security\nvulnerabilities or memory leaks**. To achieve proper encapsulation across\nrequests configure a new value for each incoming request in the [`'onRequest'`\nhook](./Hooks.md#onrequest). Example:\n\n```js\nconst fp = require('fastify-plugin')\n\nasync function myPlugin (app) {\n  app.decorateRequest('foo', null)\n  app.addHook('onRequest', async (req, reply) => {\n    req.foo = { bar: 42 }\n  })\n}\n\nmodule.exports = fp(myPlugin)\n```\n\nSee [`decorate`](#decorate) for information about the `dependencies` parameter.\n\n#### `decorateRequest(name, value, [dependencies])`\n<a id=\"decorate-request\"></a>\n\nAs above with [`decorateReply`](#decorate-reply), this API is used add new\nmethods/properties to the core `Request` object:\n\n```js\nfastify.decorateRequest('utility', function () {\n  // something very useful\n})\n```\n\nNote: using an arrow function will break the binding of `this` to the Fastify\n`Request` instance.\n\nNote: using `decorateRequest` will emit a warning if used with a reference type:\n\n```js\n// Don't do this\nfastify.decorateRequest('foo', { bar: 'fizz'})\n```\nIn this example, the reference of the object is shared with all the requests:\n**any mutation will impact all requests, potentially creating security\nvulnerabilities or memory leaks**.\n\nTo achieve proper encapsulation across requests configure a new value for each\nincoming request in the [`'onRequest'` hook](./Hooks.md#onrequest). Example:\n\n```js\nconst fp = require('fastify-plugin')\n\nasync function myPlugin (app) {\n  app.decorateRequest('foo', null)\n  app.addHook('onRequest', async (req, reply) => {\n    req.foo = { bar: 42 }\n  })\n}\n\nmodule.exports = fp(myPlugin)\n```\n\nSee [`decorate`](#decorate) for information about the `dependencies` parameter.\n\n#### `hasDecorator(name)`\n<a id=\"has-decorator\"></a>\n\nUsed to check for the existence of a server instance decoration:\n\n```js\nfastify.hasDecorator('utility')\n```\n\n#### hasRequestDecorator\n<a id=\"has-request-decorator\"></a>\n\nUsed to check for the existence of a Request decoration:\n\n```js\nfastify.hasRequestDecorator('utility')\n```\n\n#### hasReplyDecorator\n<a id=\"has-reply-decorator\"></a>\n\nUsed to check for the existence of a Reply decoration:\n\n```js\nfastify.hasReplyDecorator('utility')\n```\n\n### Decorators and Encapsulation\n<a id=\"decorators-encapsulation\"></a>\n\nDefining a decorator (using `decorate`, `decorateRequest`, or `decorateReply`)\nwith the same name more than once in the same **encapsulated** context will\nthrow an exception.\n\nAs an example, the following will throw:\n\n```js\nconst server = require('fastify')()\n\nserver.decorateReply('view', function (template, args) {\n  // Amazing view rendering engine\n})\n\nserver.get('/', (req, reply) => {\n  reply.view('/index.html', { hello: 'world' })\n})\n\n// Somewhere else in our codebase, we define another\n// view decorator. This throws.\nserver.decorateReply('view', function (template, args) {\n  // Another rendering engine\n})\n\nserver.listen({ port: 3000 })\n```\n\n\nBut this will not:\n\n```js\nconst server = require('fastify')()\n\nserver.decorateReply('view', function (template, args) {\n  // Amazing view rendering engine.\n})\n\nserver.register(async function (server, opts) {\n  // We add a view decorator to the current encapsulated\n  // plugin. This will not throw as outside of this encapsulated\n  // plugin view is the old one, while inside it is the new one.\n  server.decorateReply('view', function (template, args) {\n    // Another rendering engine\n  })\n\n  server.get('/', (req, reply) => {\n    reply.view('/index.page', { hello: 'world' })\n  })\n}, { prefix: '/bar' })\n\nserver.listen({ port: 3000 })\n```\n\n### Getters and Setters\n<a id=\"getters-setters\"></a>\n\nDecorators accept special \"getter/setter\" objects. These objects have functions\nnamed `getter` and `setter` (though the `setter` function is optional). This\nallows defining properties via decorators, for example:\n\n```js\nfastify.decorate('foo', {\n  getter () {\n    return 'a getter'\n  }\n})\n```\n\nWill define the `foo` property on the Fastify instance:\n\n```js\nconsole.log(fastify.foo) // 'a getter'\n```\n'/test/bundler/webpack/webpack.config.js\u0001\u001cconst path = require('path')\n\nmodule.exports = {\n  entry: { success: './src/index.js', failPlugin: './src/fail-plugin-version.js' },\n  target: 'node',\n  output: {\n    path: path.resolve(__dirname, 'dist'),\n    filename: '[name].js',\n    library: {\n      type: 'commonjs2'\n    }\n  }\n}\n/test/route-hooks.test.js1'use strict'\n\nconst { Readable } = require('stream')\nconst test = require('tap').test\nconst sget = require('simple-get').concat\nconst Fastify = require('../')\n\nprocess.removeAllListeners('warning')\n\nfunction endRouteHook (doneOrPayload, done, doneValue) {\n  if (typeof doneOrPayload === 'function') {\n    doneOrPayload(doneValue)\n  } else {\n    done(doneValue)\n  }\n}\n\nfunction testExecutionHook (hook) {\n  test(`${hook}`, t => {\n    t.plan(3)\n    const fastify = Fastify()\n\n    fastify.post('/', {\n      [hook]: (req, reply, doneOrPayload, done) => {\n        t.pass('hook called')\n        endRouteHook(doneOrPayload, done)\n      }\n    }, (req, reply) => {\n      reply.send(req.body)\n    })\n\n    fastify.inject({\n      method: 'POST',\n      url: '/',\n      payload: { hello: 'world' }\n    }, (err, res) => {\n      t.error(err)\n      const payload = JSON.parse(res.payload)\n      t.same(payload, { hello: 'world' })\n    })\n  })\n\n  test(`${hook} option should be called after ${hook} hook`, t => {\n    t.plan(3)\n    const fastify = Fastify()\n    const checker = Object.defineProperty({ calledTimes: 0 }, 'check', {\n      get: function () { return ++this.calledTimes }\n    })\n\n    fastify.addHook(hook, (req, reply, doneOrPayload, done) => {\n      t.equal(checker.check, 1)\n      endRouteHook(doneOrPayload, done)\n    })\n\n    fastify.post('/', {\n      [hook]: (req, reply, doneOrPayload, done) => {\n        t.equal(checker.check, 2)\n        endRouteHook(doneOrPayload, done)\n      }\n    }, (req, reply) => {\n      reply.send({})\n    })\n\n    fastify.inject({\n      method: 'POST',\n      url: '/',\n      payload: { hello: 'world' }\n    }, (err, res) => {\n      t.error(err)\n    })\n  })\n\n  test(`${hook} option could accept an array of functions`, t => {\n    t.plan(3)\n    const fastify = Fastify()\n    const checker = Object.defineProperty({ calledTimes: 0 }, 'check', {\n      get: function () { return ++this.calledTimes }\n    })\n\n    fastify.post('/', {\n      [hook]: [\n        (req, reply, doneOrPayload, done) => {\n          t.equal(checker.check, 1)\n          endRouteHook(doneOrPayload, done)\n        },\n        (req, reply, doneOrPayload, done) => {\n          t.equal(checker.check, 2)\n          endRouteHook(doneOrPayload, done)\n        }\n      ]\n    }, (req, reply) => {\n      reply.send({})\n    })\n\n    fastify.inject({\n      method: 'POST',\n      url: '/',\n      payload: { hello: 'world' }\n    }, (err, res) => {\n      t.error(err)\n    })\n  })\n\n  test(`${hook} option does not interfere with ${hook} hook`, t => {\n    t.plan(7)\n    const fastify = Fastify()\n    const checker = Object.defineProperty({ calledTimes: 0 }, 'check', {\n      get: function () { return ++this.calledTimes }\n    })\n\n    fastify.addHook(hook, (req, reply, doneOrPayload, done) => {\n      t.equal(checker.check, 1)\n      endRouteHook(doneOrPayload, done)\n    })\n\n    fastify.post('/', {\n      [hook]: (req, reply, doneOrPayload, done) => {\n        t.equal(checker.check, 2)\n        endRouteHook(doneOrPayload, done)\n      }\n    }, handler)\n\n    fastify.post('/no', handler)\n\n    function handler (req, reply) {\n      reply.send({})\n    }\n\n    fastify.inject({\n      method: 'post',\n      url: '/'\n    }, (err, res) => {\n      t.error(err)\n      t.equal(checker.calledTimes, 2)\n\n      checker.calledTimes = 0\n\n      fastify.inject({\n        method: 'post',\n        url: '/no'\n      }, (err, res) => {\n        t.error(err)\n        t.equal(checker.calledTimes, 1)\n      })\n    })\n  })\n}\n\nfunction testBeforeHandlerHook (hook) {\n  test(`${hook} option should be unique per route`, t => {\n    t.plan(4)\n    const fastify = Fastify()\n\n    fastify.post('/', {\n      [hook]: (req, reply, doneOrPayload, done) => {\n        req.hello = 'earth'\n        endRouteHook(doneOrPayload, done)\n      }\n    }, (req, reply) => {\n      reply.send({ hello: req.hello })\n    })\n\n    fastify.post('/no', (req, reply) => {\n      reply.send(req.body)\n    })\n\n    fastify.inject({\n      method: 'POST',\n      url: '/',\n      payload: { hello: 'world' }\n    }, (err, res) => {\n      t.error(err)\n      const payload = JSON.parse(res.payload)\n      t.same(payload, { hello: 'earth' })\n    })\n\n    fastify.inject({\n      method: 'POST',\n      url: '/no',\n      payload: { hello: 'world' }\n    }, (err, res) => {\n      t.error(err)\n      const payload = JSON.parse(res.payload)\n      t.same(payload, { hello: 'world' })\n    })\n  })\n\n  test(`${hook} option should handle errors`, t => {\n    t.plan(3)\n    const fastify = Fastify()\n\n    fastify.post('/', {\n      [hook]: (req, reply, doneOrPayload, done) => {\n        endRouteHook(doneOrPayload, done, new Error('kaboom'))\n      }\n    }, (req, reply) => {\n      reply.send(req.body)\n    })\n\n    fastify.inject({\n      method: 'POST',\n      url: '/',\n      payload: { hello: 'world' }\n    }, (err, res) => {\n      t.error(err)\n      const payload = JSON.parse(res.payload)\n      t.equal(res.statusCode, 500)\n      t.same(payload, {\n        message: 'kaboom',\n        error: 'Internal Server Error',\n        statusCode: 500\n      })\n    })\n  })\n\n  test(`${hook} option should handle throwing objects`, t => {\n    t.plan(4)\n    const fastify = Fastify()\n\n    const myError = { myError: 'kaboom' }\n\n    fastify.setErrorHandler(async (error, request, reply) => {\n      t.same(error, myError, 'the error object throws by the user')\n      return reply.code(500).send({ this: 'is', my: 'error' })\n    })\n\n    fastify.get('/', {\n      [hook]: async () => {\n        // eslint-disable-next-line no-throw-literal\n        throw myError\n      }\n    }, (req, reply) => {\n      t.fail('the handler must not be called')\n    })\n\n    fastify.inject({\n      url: '/',\n      method: 'GET'\n    }, (err, res) => {\n      t.error(err)\n      t.equal(res.statusCode, 500)\n      t.same(res.json(), { this: 'is', my: 'error' })\n    })\n  })\n\n  test(`${hook} option should handle throwing objects by default`, t => {\n    t.plan(3)\n    const fastify = Fastify()\n\n    fastify.get('/', {\n      [hook]: async () => {\n        // eslint-disable-next-line no-throw-literal\n        throw { myError: 'kaboom', message: 'i am an error' }\n      }\n    }, (req, reply) => {\n      t.fail('the handler must not be called')\n    })\n\n    fastify.inject({\n      url: '/',\n      method: 'GET'\n    }, (err, res) => {\n      t.error(err)\n      t.equal(res.statusCode, 500)\n      t.same(res.json(), { myError: 'kaboom', message: 'i am an error' })\n    })\n  })\n\n  test(`${hook} option should handle errors with custom status code`, t => {\n    t.plan(3)\n    const fastify = Fastify()\n\n    fastify.post('/', {\n      [hook]: (req, reply, doneOrPayload, done) => {\n        reply.code(401)\n        endRouteHook(doneOrPayload, done, new Error('go away'))\n      }\n    }, (req, reply) => {\n      reply.send(req.body)\n    })\n\n    fastify.inject({\n      method: 'POST',\n      url: '/',\n      payload: { hello: 'world' }\n    }, (err, res) => {\n      t.error(err)\n      const payload = JSON.parse(res.payload)\n      t.equal(res.statusCode, 401)\n      t.same(payload, {\n        message: 'go away',\n        error: 'Unauthorized',\n        statusCode: 401\n      })\n    })\n  })\n\n  test(`${hook} option should keep the context`, t => {\n    t.plan(3)\n    const fastify = Fastify()\n\n    fastify.decorate('foo', 42)\n\n    fastify.post('/', {\n      [hook]: function (req, reply, doneOrPayload, done) {\n        t.equal(this.foo, 42)\n        this.foo += 1\n        endRouteHook(doneOrPayload, done)\n      }\n    }, function (req, reply) {\n      reply.send({ foo: this.foo })\n    })\n\n    fastify.inject({\n      method: 'POST',\n      url: '/',\n      payload: { hello: 'world' }\n    }, (err, res) => {\n      t.error(err)\n      const payload = JSON.parse(res.payload)\n      t.same(payload, { foo: 43 })\n    })\n  })\n\n  test(`${hook} option should keep the context (array)`, t => {\n    t.plan(3)\n    const fastify = Fastify()\n\n    fastify.decorate('foo', 42)\n\n    fastify.post('/', {\n      [hook]: [function (req, reply, doneOrPayload, done) {\n        t.equal(this.foo, 42)\n        this.foo += 1\n        endRouteHook(doneOrPayload, done)\n      }]\n    }, function (req, reply) {\n      reply.send({ foo: this.foo })\n    })\n\n    fastify.inject({\n      method: 'POST',\n      url: '/',\n      payload: { hello: 'world' }\n    }, (err, res) => {\n      t.error(err)\n      const payload = JSON.parse(res.payload)\n      t.same(payload, { foo: 43 })\n    })\n  })\n}\n\ntestExecutionHook('preHandler')\ntestExecutionHook('onSend')\ntestExecutionHook('onRequest')\ntestExecutionHook('onResponse')\ntestExecutionHook('preValidation')\ntestExecutionHook('preParsing')\n// hooks that comes before the handler\ntestBeforeHandlerHook('preHandler')\ntestBeforeHandlerHook('onRequest')\ntestBeforeHandlerHook('preValidation')\ntestBeforeHandlerHook('preParsing')\n\ntest('preValidation option should be called before preHandler hook', t => {\n  t.plan(3)\n  const fastify = Fastify()\n\n  fastify.addHook('preHandler', (req, reply, done) => {\n    t.ok(req.called)\n    done()\n  })\n\n  fastify.post('/', {\n    preValidation: (req, reply, done) => {\n      req.called = true\n      done()\n    }\n  }, (req, reply) => {\n    reply.send(req.body)\n  })\n\n  fastify.inject({\n    method: 'POST',\n    url: '/',\n    payload: { hello: 'world' }\n  }, (err, res) => {\n    t.error(err)\n    const payload = JSON.parse(res.payload)\n    t.same(payload, { hello: 'world' })\n  })\n})\n\ntest('preSerialization option should be able to modify the payload', t => {\n  t.plan(3)\n  const fastify = Fastify()\n\n  fastify.get('/only', {\n    preSerialization: (req, reply, payload, done) => {\n      done(null, { hello: 'another world' })\n    }\n  }, (req, reply) => {\n    reply.send({ hello: 'world' })\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/only'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 200)\n    t.same(JSON.parse(res.payload), { hello: 'another world' })\n  })\n})\n\ntest('preParsing option should be called before preValidation hook', t => {\n  t.plan(3)\n  const fastify = Fastify()\n\n  fastify.addHook('preValidation', (req, reply, done) => {\n    t.ok(req.called)\n    done()\n  })\n\n  fastify.post('/', {\n    preParsing: (req, reply, payload, done) => {\n      req.called = true\n      done()\n    }\n  }, (req, reply) => {\n    reply.send(req.body)\n  })\n\n  fastify.inject({\n    method: 'POST',\n    url: '/',\n    payload: { hello: 'world' }\n  }, (err, res) => {\n    t.error(err)\n    const payload = JSON.parse(res.payload)\n    t.same(payload, { hello: 'world' })\n  })\n})\n\ntest('preParsing option should be able to modify the payload', t => {\n  t.plan(3)\n  const fastify = Fastify()\n\n  fastify.post('/only', {\n    preParsing: (req, reply, payload, done) => {\n      const stream = new Readable()\n      stream.receivedEncodedLength = parseInt(req.headers['content-length'], 10)\n      stream.push(JSON.stringify({ hello: 'another world' }))\n      stream.push(null)\n      done(null, stream)\n    }\n  }, (req, reply) => {\n    reply.send(req.body)\n  })\n\n  fastify.inject({\n    method: 'POST',\n    url: '/only',\n    payload: { hello: 'world' }\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 200)\n    t.same(JSON.parse(res.payload), { hello: 'another world' })\n  })\n})\n\ntest('onRequest option should be called before preParsing', t => {\n  t.plan(3)\n  const fastify = Fastify()\n\n  fastify.addHook('preParsing', (req, reply, payload, done) => {\n    t.ok(req.called)\n    done()\n  })\n\n  fastify.post('/', {\n    onRequest: (req, reply, done) => {\n      req.called = true\n      done()\n    }\n  }, (req, reply) => {\n    reply.send(req.body)\n  })\n\n  fastify.inject({\n    method: 'POST',\n    url: '/',\n    payload: { hello: 'world' }\n  }, (err, res) => {\n    t.error(err)\n    const payload = JSON.parse(res.payload)\n    t.same(payload, { hello: 'world' })\n  })\n})\n\ntest('onTimeout on route', t => {\n  t.plan(4)\n  const fastify = Fastify({ connectionTimeout: 500 })\n\n  fastify.get('/timeout', {\n    handler (request, reply) { },\n    onTimeout (request, reply, done) {\n      t.pass('onTimeout called')\n      done()\n    }\n  })\n\n  fastify.listen({ port: 0 }, (err, address) => {\n    t.error(err)\n    t.teardown(() => fastify.close())\n\n    sget({\n      method: 'GET',\n      url: `${address}/timeout`\n    }, (err, response, body) => {\n      t.type(err, Error)\n      t.equal(err.message, 'socket hang up')\n    })\n  })\n})\n\ntest('onError on route', t => {\n  t.plan(3)\n\n  const fastify = Fastify()\n\n  const err = new Error('kaboom')\n\n  fastify.get('/',\n    {\n      onError (request, reply, error, done) {\n        t.match(error, err)\n        done()\n      }\n    },\n    (req, reply) => {\n      reply.send(err)\n    })\n\n  fastify.inject('/', (err, res) => {\n    t.error(err)\n    t.same(JSON.parse(res.payload), {\n      error: 'Internal Server Error',\n      message: 'kaboom',\n      statusCode: 500\n    })\n  })\n})\n/examples/benchmark/simple.js\u0001'use strict'\n\nconst fastify = require('../../fastify')({\n  logger: false\n})\n\nconst schema = {\n  schema: {\n    response: {\n      200: {\n        type: 'object',\n        properties: {\n          hello: {\n            type: 'string'\n          }\n        }\n      }\n    }\n  }\n}\n\nfastify\n  .get('/', schema, function (req, reply) {\n    reply\n      .send({ hello: 'world' })\n  })\n\nfastify.listen({ port: 3000 }, (err, address) => {\n  if (err) throw err\n})\n/test/same-shape.test.js\u0007'use strict'\n\nconst { test } = require('tap')\nconst fastify = require('..')\n\ntest('same shape on Request', async (t) => {\n  t.plan(1)\n\n  const app = fastify()\n\n  let request\n\n  app.decorateRequest('user')\n\n  app.addHook('preHandler', (req, reply, done) => {\n    if (request) {\n      req.user = 'User'\n    }\n    done()\n  })\n\n  app.get('/', (req, reply) => {\n    if (request) {\n      t.equal(%HaveSameMap(request, req), true)\n    }\n\n    request = req\n\n    return 'hello world'\n  })\n\n  await app.inject('/')\n  await app.inject('/')\n})\n\ntest('same shape on Request when object', async (t) => {\n  t.plan(1)\n\n  const app = fastify()\n\n  let request\n\n  app.decorateRequest('object', null)\n\n  app.addHook('preHandler', (req, reply, done) => {\n    if (request) {\n      req.object = {}\n    }\n    done()\n  })\n\n  app.get('/', (req, reply) => {\n    if (request) {\n      t.equal(%HaveSameMap(request, req), true)\n    }\n\n    request = req\n\n    return 'hello world'\n  })\n\n  await app.inject('/')\n  await app.inject('/')\n})\n\ntest('same shape on Reply', async (t) => {\n  t.plan(1)\n\n  const app = fastify()\n\n  let _reply\n\n  app.decorateReply('user')\n\n  app.addHook('preHandler', (req, reply, done) => {\n    if (_reply) {\n      reply.user = 'User'\n    }\n    done()\n  })\n\n  app.get('/', (req, reply) => {\n    if (_reply) {\n      t.equal(%HaveSameMap(_reply, reply), true)\n    }\n\n    _reply = reply\n\n    return 'hello world'\n  })\n\n  await app.inject('/')\n  await app.inject('/')\n})\n\ntest('same shape on Reply when object', async (t) => {\n  t.plan(1)\n\n  const app = fastify()\n\n  let _reply\n\n  app.decorateReply('object', null)\n\n  app.addHook('preHandler', (req, reply, done) => {\n    if (_reply) {\n      reply.object = {}\n    }\n    done()\n  })\n\n  app.get('/', (req, reply) => {\n    if (_reply) {\n      t.equal(%HaveSameMap(_reply, reply), true)\n    }\n\n    _reply = reply\n\n    return 'hello world'\n  })\n\n  await app.inject('/')\n  await app.inject('/')\n})\n/test/types/register.test-d.ts$import { expectAssignable, expectError, expectType } from 'tsd'\nimport { IncomingMessage, Server, ServerResponse } from 'http'\nimport { Http2Server, Http2ServerRequest, Http2ServerResponse } from 'http2'\nimport fastify, { FastifyInstance, FastifyError, FastifyLoggerInstance, FastifyPluginAsync, FastifyPluginCallback, FastifyPluginOptions, RawServerDefault } from '../../fastify'\n\nconst testPluginCallback: FastifyPluginCallback = function (instance, opts, done) { }\nconst testPluginAsync: FastifyPluginAsync = async function (instance, opts) { }\n\nconst testPluginOpts: FastifyPluginCallback = function (instance, opts, done) { }\nconst testPluginOptsAsync: FastifyPluginAsync = async function (instance, opts) { }\n\nconst testPluginOptsWithType = (instance: FastifyInstance, opts: FastifyPluginOptions, done: (error?: FastifyError) => void) => { }\nconst testPluginOptsWithTypeAsync = async (instance: FastifyInstance, opts: FastifyPluginOptions) => { }\n\ninterface TestOptions extends FastifyPluginOptions {\n  option1: string;\n  option2: boolean;\n}\n\n// Type validation\nexpectError(fastify().register(testPluginOptsAsync, { prefix: 1 }))\nexpectError(fastify().register(testPluginOptsAsync, { logLevel: () => ({}) }))\nexpectError(fastify().register(testPluginOptsAsync, { logSerializers: () => ({}) }))\nexpectError(fastify().register({}))\n\nexpectAssignable<FastifyInstance>(\n  fastify().register(\n    testPluginOptsAsync, { prefix: '/example', logLevel: 'info', logSerializers: { key: (value: any) => `${value}` } }\n  )\n)\n\nexpectAssignable<FastifyInstance>(\n  fastify().register(testPluginOptsAsync, () => {\n    return {}\n  })\n)\n\nexpectAssignable<FastifyInstance>(\n  fastify().register(testPluginOptsAsync, (instance) => {\n    expectType<FastifyInstance>(instance)\n  })\n)\n\n// With Http2\nconst serverWithHttp2 = fastify({ http2: true })\ntype ServerWithHttp2 = FastifyInstance<Http2Server, Http2ServerRequest, Http2ServerResponse>\nconst testPluginWithHttp2: FastifyPluginCallback<TestOptions, Http2Server> = function (instance, opts, done) { }\nconst testPluginWithHttp2Async: FastifyPluginAsync<TestOptions, Http2Server> = async function (instance, opts) { }\nconst testPluginWithHttp2WithType = (instance: ServerWithHttp2, opts: FastifyPluginOptions, done: (error?: FastifyError) => void) => { }\nconst testPluginWithHttp2WithTypeAsync = async (instance: ServerWithHttp2, opts: FastifyPluginOptions) => { }\nexpectAssignable<ServerWithHttp2>(serverWithHttp2.register(testPluginCallback))\nexpectAssignable<ServerWithHttp2>(serverWithHttp2.register(testPluginAsync))\nexpectAssignable<ServerWithHttp2>(serverWithHttp2.register(testPluginOpts))\nexpectAssignable<ServerWithHttp2>(serverWithHttp2.register(testPluginOptsAsync))\nexpectAssignable<ServerWithHttp2>(serverWithHttp2.register(testPluginOptsWithType))\nexpectAssignable<ServerWithHttp2>(serverWithHttp2.register(testPluginOptsWithTypeAsync))\nexpectAssignable<ServerWithHttp2>(serverWithHttp2.register(testPluginWithHttp2))\nexpectAssignable<ServerWithHttp2>(serverWithHttp2.register(testPluginWithHttp2Async))\nexpectAssignable<ServerWithHttp2>(serverWithHttp2.register(testPluginWithHttp2WithType))\nexpectAssignable<ServerWithHttp2>(serverWithHttp2.register(testPluginWithHttp2WithTypeAsync))\nexpectAssignable<ServerWithHttp2>(serverWithHttp2.register((instance) => {\n  expectAssignable<FastifyInstance>(instance)\n}))\nexpectAssignable<ServerWithHttp2>(serverWithHttp2.register((instance: ServerWithHttp2) => {\n  expectAssignable<ServerWithHttp2>(instance)\n}))\nexpectAssignable<ServerWithHttp2>(serverWithHttp2.register(async (instance) => {\n  expectAssignable<FastifyInstance>(instance)\n}))\nexpectAssignable<ServerWithHttp2>(serverWithHttp2.register(async (instance: ServerWithHttp2) => {\n  expectAssignable<ServerWithHttp2>(instance)\n}))\n\n// With Type Provider\ntype TestTypeProvider = { input: 'test', output: 'test' }\nconst serverWithTypeProvider = fastify().withTypeProvider<TestTypeProvider>()\ntype ServerWithTypeProvider = FastifyInstance<Server, IncomingMessage, ServerResponse, FastifyLoggerInstance, TestTypeProvider>\nconst testPluginWithTypeProvider: FastifyPluginCallback<TestOptions, RawServerDefault, TestTypeProvider> = function (instance, opts, done) { }\nconst testPluginWithTypeProviderAsync: FastifyPluginAsync<TestOptions, RawServerDefault, TestTypeProvider> = async function (instance, opts) { }\nconst testPluginWithTypeProviderWithType = (instance: ServerWithTypeProvider, opts: FastifyPluginOptions, done: (error?: FastifyError) => void) => { }\nconst testPluginWithTypeProviderWithTypeAsync = async (instance: ServerWithTypeProvider, opts: FastifyPluginOptions) => { }\nexpectAssignable<ServerWithTypeProvider>(serverWithTypeProvider.register(testPluginCallback))\nexpectAssignable<ServerWithTypeProvider>(serverWithTypeProvider.register(testPluginAsync))\nexpectAssignable<ServerWithTypeProvider>(serverWithTypeProvider.register(testPluginOpts))\nexpectAssignable<ServerWithTypeProvider>(serverWithTypeProvider.register(testPluginOptsAsync))\nexpectAssignable<ServerWithTypeProvider>(serverWithTypeProvider.register(testPluginOptsWithType))\nexpectAssignable<ServerWithTypeProvider>(serverWithTypeProvider.register(testPluginOptsWithTypeAsync))\nexpectAssignable<ServerWithTypeProvider>(serverWithTypeProvider.register(testPluginWithTypeProvider))\nexpectAssignable<ServerWithTypeProvider>(serverWithTypeProvider.register(testPluginWithTypeProviderAsync))\nexpectAssignable<ServerWithTypeProvider>(serverWithTypeProvider.register(testPluginWithTypeProviderWithType))\nexpectAssignable<ServerWithTypeProvider>(serverWithTypeProvider.register(testPluginWithTypeProviderWithTypeAsync))\nexpectAssignable<ServerWithTypeProvider>(serverWithTypeProvider.register((instance) => {\n  expectAssignable<FastifyInstance>(instance)\n}))\nexpectAssignable<ServerWithTypeProvider>(serverWithTypeProvider.register((instance: ServerWithTypeProvider) => {\n  expectAssignable<ServerWithTypeProvider>(instance)\n}))\nexpectAssignable<ServerWithTypeProvider>(serverWithTypeProvider.register(async (instance) => {\n  expectAssignable<FastifyInstance>(instance)\n}))\nexpectAssignable<ServerWithTypeProvider>(serverWithTypeProvider.register(async (instance: ServerWithTypeProvider) => {\n  expectAssignable<ServerWithTypeProvider>(instance)\n}))\n\n// With Type Provider and logger\nconst customLogger = {\n  level: 'info',\n  info: () => { },\n  warn: () => { },\n  error: () => { },\n  fatal: () => { },\n  trace: () => { },\n  debug: () => { },\n  child: () => customLogger,\n  silent: () => { }\n}\nconst serverWithTypeProviderAndLogger = fastify({\n  logger: customLogger\n}).withTypeProvider<TestTypeProvider>()\ntype ServerWithTypeProviderAndLogger = FastifyInstance<Server, IncomingMessage, ServerResponse, typeof customLogger, TestTypeProvider>\nconst testPluginWithTypeProviderAndLogger: FastifyPluginCallback<TestOptions, RawServerDefault, TestTypeProvider, typeof customLogger> = function (instance, opts, done) { }\nconst testPluginWithTypeProviderAndLoggerAsync: FastifyPluginAsync<TestOptions, RawServerDefault, TestTypeProvider, typeof customLogger> = async function (instance, opts) { }\nconst testPluginWithTypeProviderAndLoggerWithType = (instance: ServerWithTypeProviderAndLogger, opts: FastifyPluginOptions, done: (error?: FastifyError) => void) => { }\nconst testPluginWithTypeProviderAndLoggerWithTypeAsync = async (instance: ServerWithTypeProviderAndLogger, opts: FastifyPluginOptions) => { }\nexpectAssignable<ServerWithTypeProviderAndLogger>(serverWithTypeProviderAndLogger.register(testPluginCallback))\nexpectAssignable<ServerWithTypeProviderAndLogger>(serverWithTypeProviderAndLogger.register(testPluginAsync))\nexpectAssignable<ServerWithTypeProviderAndLogger>(serverWithTypeProviderAndLogger.register(testPluginOpts))\nexpectAssignable<ServerWithTypeProviderAndLogger>(serverWithTypeProviderAndLogger.register(testPluginOptsAsync))\nexpectAssignable<ServerWithTypeProviderAndLogger>(serverWithTypeProviderAndLogger.register(testPluginOptsWithType))\nexpectAssignable<ServerWithTypeProviderAndLogger>(serverWithTypeProviderAndLogger.register(testPluginOptsWithTypeAsync))\nexpectAssignable<ServerWithTypeProviderAndLogger>(serverWithTypeProviderAndLogger.register(testPluginWithTypeProviderAndLogger))\nexpectAssignable<ServerWithTypeProviderAndLogger>(serverWithTypeProviderAndLogger.register(testPluginWithTypeProviderAndLoggerAsync))\nexpectAssignable<ServerWithTypeProviderAndLogger>(serverWithTypeProviderAndLogger.register(testPluginWithTypeProviderAndLoggerWithType))\nexpectAssignable<ServerWithTypeProviderAndLogger>(serverWithTypeProviderAndLogger.register(testPluginWithTypeProviderAndLoggerWithTypeAsync))\nexpectAssignable<ServerWithTypeProviderAndLogger>(serverWithTypeProviderAndLogger.register((instance) => {\n  expectAssignable<FastifyInstance>(instance)\n}))\nexpectAssignable<ServerWithTypeProviderAndLogger>(serverWithTypeProviderAndLogger.register((instance: ServerWithTypeProviderAndLogger) => {\n  expectAssignable<ServerWithTypeProviderAndLogger>(instance)\n}))\nexpectAssignable<ServerWithTypeProviderAndLogger>(serverWithTypeProviderAndLogger.register(async (instance) => {\n  expectAssignable<FastifyInstance>(instance)\n}))\nexpectAssignable<ServerWithTypeProviderAndLogger>(serverWithTypeProviderAndLogger.register(async (instance: ServerWithTypeProviderAndLogger) => {\n  expectAssignable<ServerWithTypeProviderAndLogger>(instance)\n}))\n /build/build-error-serializer.js\u0002/* istanbul ignore file */\n'use strict'\n\nconst FJS = require('fast-json-stringify')\nconst path = require('path')\nconst fs = require('fs')\n\nconst code = FJS({\n  type: 'object',\n  properties: {\n    statusCode: { type: 'number' },\n    code: { type: 'string' },\n    error: { type: 'string' },\n    message: { type: 'string' }\n  }\n}, { mode: 'standalone' })\n\nconst file = path.join(__dirname, '..', 'lib', 'error-serializer.js')\n\nconst moduleCode = `// This file is autogenerated by build/build-error-serializer.js, do not edit\n/* istanbul ignore file */\n${code}\n`\n\nif (require.main === module) {\n  fs.writeFileSync(file, moduleCode)\n  console.log(`Saved ${file} file successfully`)\n} else {\n  module.exports = {\n    code: moduleCode\n  }\n}\n/examples/simple-stream.js\u0001r'use strict'\n\nconst fastify = require('../fastify')({\n  logger: false\n})\n\nconst Readable = require('stream').Readable\n\nfastify\n  .get('/', function (req, reply) {\n    const stream = Readable.from(['hello world'])\n    reply.send(stream)\n  })\n\nfastify.listen({ port: 3000 }, (err, address) => {\n  if (err) throw err\n  fastify.log.info(`server listening on ${address}`)\n})\n/test/propfind.test.js\r\u0001'use strict'\n\nconst t = require('tap')\nconst test = t.test\nconst sget = require('simple-get').concat\nconst fastify = require('..')()\n\ntest('can be created - propfind', t => {\n  t.plan(1)\n  try {\n    fastify.route({\n      method: 'PROPFIND',\n      url: '*',\n      handler: function (req, reply) {\n        return reply.code(207)\n          .send(`<?xml version=\"1.0\" encoding=\"utf-8\"?>\n            <D:multistatus xmlns:D=\"DAV:\">\n              <D:response xmlns:lp1=\"DAV:\">\n                <D:href>/</D:href>\n                <D:propstat>\n                  <D:prop>\n                    <lp1:resourcetype>\n                      <D:collection/>\n                    </lp1:resourcetype>\n                    <lp1:creationdate>2022-04-13T12:35:30Z</lp1:creationdate>\n                    <lp1:getlastmodified>Wed, 13 Apr 2022 12:35:30 GMT</lp1:getlastmodified>\n                    <lp1:getetag>\"e0-5dc8869b53ef1\"</lp1:getetag>\n                    <D:supportedlock>\n                      <D:lockentry>\n                        <D:lockscope>\n                          <D:exclusive/>\n                        </D:lockscope>\n                        <D:locktype>\n                          <D:write/>\n                        </D:locktype>\n                      </D:lockentry>\n                      <D:lockentry>\n                        <D:lockscope>\n                          <D:shared/>\n                        </D:lockscope>\n                        <D:locktype>\n                          <D:write/>\n                        </D:locktype>\n                      </D:lockentry>\n                    </D:supportedlock>\n                    <D:lockdiscovery/>\n                    <D:getcontenttype>httpd/unix-directory</D:getcontenttype>\n                  </D:prop>\n                  <D:status>HTTP/1.1 200 OK</D:status>\n                </D:propstat>\n              </D:response>\n            </D:multistatus>`\n          )\n      }\n    })\n    t.pass()\n  } catch (e) {\n    t.fail()\n  }\n})\n\nfastify.listen({ port: 0 }, err => {\n  t.error(err)\n  t.teardown(() => { fastify.close() })\n\n  test('request - propfind', t => {\n    t.plan(3)\n    sget({\n      url: `http://localhost:${fastify.server.address().port}/`,\n      method: 'PROPFIND'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 207)\n      t.equal(response.headers['content-length'], '' + body.length)\n    })\n  })\n\n  test('request with other path - propfind', t => {\n    t.plan(3)\n    sget({\n      url: `http://localhost:${fastify.server.address().port}/test`,\n      method: 'PROPFIND'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 207)\n      t.equal(response.headers['content-length'], '' + body.length)\n    })\n  })\n\n  test('request with body - propfind', t => {\n    t.plan(3)\n    sget({\n      url: `http://localhost:${fastify.server.address().port}/test`,\n      body: `<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n        <D:propfind xmlns:D=\"DAV:\">\n          <D:prop xmlns:R=\"http://ns.example.com/boxschema/\">\n            <R:bigbox/> <R:author/> <R:DingALing/> <R:Random/>\n          </D:prop>\n        </D:propfind>\n      `,\n      method: 'PROPFIND'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 207)\n      t.equal(response.headers['content-length'], '' + body.length)\n    })\n  })\n})\n/examples/parser.js\u0006'use strict'\n\nconst fastify = require('../fastify')({ logger: true })\nconst jsonParser = require('fast-json-body')\nconst querystring = require('querystring')\n\n// Handled by fastify\n// curl -X POST -d '{\"hello\":\"world\"}' -H'Content-type: application/json' http://localhost:3000/\n\n// curl -X POST -d '{\"hello\":\"world\"}' -H'Content-type: application/jsoff' http://localhost:3000/\nfastify.addContentTypeParser('application/jsoff', function (request, payload, done) {\n  jsonParser(payload, function (err, body) {\n    done(err, body)\n  })\n})\n\n// curl -X POST -d 'hello=world' -H'Content-type: application/x-www-form-urlencoded' http://localhost:3000/\nfastify.addContentTypeParser('application/x-www-form-urlencoded', function (request, payload, done) {\n  let body = ''\n  payload.on('data', function (data) {\n    body += data\n  })\n  payload.on('end', function () {\n    try {\n      const parsed = querystring.parse(body)\n      done(null, parsed)\n    } catch (e) {\n      done(e)\n    }\n  })\n  payload.on('error', done)\n})\n\n// curl -X POST -d '{\"hello\":\"world\"}' -H'Content-type: application/vnd.custom+json' http://localhost:3000/\nfastify.addContentTypeParser(/^application\\/.+\\+json$/, { parseAs: 'string' }, fastify.getDefaultJsonParser('error', 'ignore'))\n\n// remove default json parser\n// curl -X POST -d '{\"hello\":\"world\"}' -H'Content-type: application/json' http://localhost:3000/ is now no longer handled by fastify\nfastify.removeContentTypeParser('application/json')\n\n// This call would remove any content type parser\n// fastify.removeAllContentTypeParsers()\n\nfastify\n  .post('/', function (req, reply) {\n    reply.send(req.body)\n  })\n\nfastify.listen({ port: 3000 }, err => {\n  if (err) throw err\n})\n/test/types/import.tsCimport { FastifyListenOptions, FastifyLogFn } from '../../fastify'\n/test/sync-routes.test.js\u0002'use strict'\n\nconst { test } = require('tap')\nconst Fastify = require('..')\n\ntest('sync route', async t => {\n  const app = Fastify()\n  t.teardown(app.close.bind(app))\n  app.get('/', () => 'hello world')\n  const res = await app.inject('/')\n  t.equal(res.statusCode, 200)\n  t.equal(res.body, 'hello world')\n})\n\ntest('sync route return null', async t => {\n  const app = Fastify()\n  t.teardown(app.close.bind(app))\n  app.get('/', () => null)\n  const res = await app.inject('/')\n  t.equal(res.statusCode, 200)\n  t.equal(res.body, 'null')\n})\n\ntest('sync route, error', async t => {\n  const app = Fastify()\n  t.teardown(app.close.bind(app))\n  app.get('/', () => {\n    throw new Error('kaboom')\n  })\n  const res = await app.inject('/')\n  t.equal(res.statusCode, 500)\n})\n/test/versioned-routes.test.js9'use strict'\n\nconst { test, before } = require('tap')\nconst helper = require('./helper')\nconst Fastify = require('..')\nconst sget = require('simple-get').concat\nconst http = require('http')\nconst split = require('split2')\nconst append = require('vary').append\nconst proxyquire = require('proxyquire')\n\nprocess.removeAllListeners('warning')\n\nlet localhost\nbefore(async function () {\n  [localhost] = await helper.getLoopbackHost()\n})\n\ntest('Should register a versioned route', t => {\n  t.plan(11)\n  const fastify = Fastify()\n\n  fastify.route({\n    method: 'GET',\n    url: '/',\n    constraints: { version: '1.2.0' },\n    handler: (req, reply) => {\n      reply.send({ hello: 'world' })\n    }\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/',\n    headers: {\n      'Accept-Version': '1.x'\n    }\n  }, (err, res) => {\n    t.error(err)\n    t.same(JSON.parse(res.payload), { hello: 'world' })\n    t.equal(res.statusCode, 200)\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/',\n    headers: {\n      'Accept-Version': '1.2.x'\n    }\n  }, (err, res) => {\n    t.error(err)\n    t.same(JSON.parse(res.payload), { hello: 'world' })\n    t.equal(res.statusCode, 200)\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/',\n    headers: {\n      'Accept-Version': '1.2.0'\n    }\n  }, (err, res) => {\n    t.error(err)\n    t.same(JSON.parse(res.payload), { hello: 'world' })\n    t.equal(res.statusCode, 200)\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/',\n    headers: {\n      'Accept-Version': '1.2.1'\n    }\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 404)\n  })\n})\n\ntest('Should register a versioned route via route constraints', t => {\n  t.plan(6)\n  const fastify = Fastify()\n\n  fastify.route({\n    method: 'GET',\n    url: '/',\n    constraints: { version: '1.2.0' },\n    handler: (req, reply) => {\n      reply.send({ hello: 'world' })\n    }\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/',\n    headers: {\n      'Accept-Version': '1.x'\n    }\n  }, (err, res) => {\n    t.error(err)\n    t.same(JSON.parse(res.payload), { hello: 'world' })\n    t.equal(res.statusCode, 200)\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/',\n    headers: {\n      'Accept-Version': '1.2.x'\n    }\n  }, (err, res) => {\n    t.error(err)\n    t.same(JSON.parse(res.payload), { hello: 'world' })\n    t.equal(res.statusCode, 200)\n  })\n})\n\ntest('Should register the same route with different versions', t => {\n  t.plan(8)\n  const fastify = Fastify()\n\n  fastify.route({\n    method: 'GET',\n    url: '/',\n    constraints: { version: '1.2.0' },\n    handler: (req, reply) => {\n      reply.send('1.2.0')\n    }\n  })\n\n  fastify.route({\n    method: 'GET',\n    url: '/',\n    constraints: { version: '1.3.0' },\n    handler: (req, reply) => {\n      reply.send('1.3.0')\n    }\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/',\n    headers: {\n      'Accept-Version': '1.x'\n    }\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 200)\n    t.equal(res.payload, '1.3.0')\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/',\n    headers: {\n      'Accept-Version': '1.2.x'\n    }\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 200)\n    t.equal(res.payload, '1.2.0')\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/',\n    headers: {\n      'Accept-Version': '2.x'\n    }\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 404)\n  })\n})\n\ntest('The versioned route should take precedence', t => {\n  t.plan(3)\n  const fastify = Fastify()\n\n  fastify.route({\n    method: 'GET',\n    url: '/',\n    handler: (req, reply) => {\n      reply.send({ winter: 'is coming' })\n    }\n  })\n\n  fastify.route({\n    method: 'GET',\n    url: '/',\n    constraints: { version: '1.2.0' },\n    handler: (req, reply) => {\n      reply.send({ hello: 'world' })\n    }\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/',\n    headers: {\n      'Accept-Version': '1.x'\n    }\n  }, (err, res) => {\n    t.error(err)\n    t.same(JSON.parse(res.payload), { hello: 'world' })\n    t.equal(res.statusCode, 200)\n  })\n})\n\ntest('Versioned route but not version header should return a 404', t => {\n  t.plan(2)\n  const fastify = Fastify()\n\n  fastify.route({\n    method: 'GET',\n    url: '/',\n    constraints: { version: '1.2.0' },\n    handler: (req, reply) => {\n      reply.send({ hello: 'world' })\n    }\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 404)\n  })\n})\n\ntest('Should register a versioned route', t => {\n  t.plan(6)\n  const fastify = Fastify()\n\n  fastify.route({\n    method: 'GET',\n    url: '/',\n    constraints: { version: '1.2.0' },\n    handler: (req, reply) => {\n      reply.send({ hello: 'world' })\n    }\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port,\n      headers: {\n        'Accept-Version': '1.x'\n      }\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.same(JSON.parse(body), { hello: 'world' })\n    })\n\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port,\n      headers: {\n        'Accept-Version': '2.x'\n      }\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 404)\n    })\n  })\n})\n\ntest('Shorthand route declaration', t => {\n  t.plan(5)\n  const fastify = Fastify()\n\n  fastify.get('/', { constraints: { version: '1.2.0' } }, (req, reply) => {\n    reply.send({ hello: 'world' })\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/',\n    headers: {\n      'Accept-Version': '1.x'\n    }\n  }, (err, res) => {\n    t.error(err)\n    t.same(JSON.parse(res.payload), { hello: 'world' })\n    t.equal(res.statusCode, 200)\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/',\n    headers: {\n      'Accept-Version': '1.2.1'\n    }\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 404)\n  })\n})\n\ntest('The not found handler should not erase the Accept-Version header', t => {\n  t.plan(13)\n  const fastify = Fastify()\n\n  fastify.addHook('onRequest', function (req, reply, done) {\n    t.same(req.headers['accept-version'], '2.x')\n    done()\n  })\n\n  fastify.addHook('preValidation', function (req, reply, done) {\n    t.same(req.headers['accept-version'], '2.x')\n    done()\n  })\n\n  fastify.addHook('preHandler', function (req, reply, done) {\n    t.same(req.headers['accept-version'], '2.x')\n    done()\n  })\n\n  fastify.route({\n    method: 'GET',\n    url: '/',\n    constraints: { version: '1.2.0' },\n    handler: (req, reply) => {\n      reply.send({ hello: 'world' })\n    }\n  })\n\n  fastify.setNotFoundHandler(function (req, reply) {\n    t.same(req.headers['accept-version'], '2.x')\n    // we check if the symbol is exposed on key or not\n    for (const key in req.headers) {\n      t.same(typeof key, 'string')\n    }\n\n    for (const key of Object.keys(req.headers)) {\n      t.same(typeof key, 'string')\n    }\n\n    reply.code(404).send('not found handler')\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/',\n    headers: {\n      'Accept-Version': '2.x'\n    }\n  }, (err, res) => {\n    t.error(err)\n    t.same(res.payload, 'not found handler')\n    t.equal(res.statusCode, 404)\n  })\n})\n\ntest('Bad accept version (inject)', t => {\n  t.plan(4)\n  const fastify = Fastify()\n\n  fastify.route({\n    method: 'GET',\n    url: '/',\n    constraints: { version: '1.2.0' },\n    handler: (req, reply) => {\n      reply.send({ hello: 'world' })\n    }\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/',\n    headers: {\n      'Accept-Version': 'a.b.c'\n    }\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 404)\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/',\n    headers: {\n      'Accept-Version': 12\n    }\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 404)\n  })\n})\n\ntest('Bas accept version (server)', t => {\n  t.plan(5)\n  const fastify = Fastify()\n\n  fastify.route({\n    method: 'GET',\n    url: '/',\n    constraints: { version: '1.2.0' },\n    handler: (req, reply) => {\n      reply.send({ hello: 'world' })\n    }\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port,\n      headers: {\n        'Accept-Version': 'a.b.c'\n      }\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 404)\n    })\n\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port,\n      headers: {\n        'Accept-Version': 12\n      }\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 404)\n    })\n  })\n})\n\ntest('test log stream', t => {\n  t.plan(3)\n  const stream = split(JSON.parse)\n  const fastify = Fastify({\n    logger: {\n      stream,\n      level: 'info'\n    }\n  })\n\n  fastify.get('/', { constraints: { version: '1.2.0' } }, function (req, reply) {\n    reply.send(new Error('kaboom'))\n  })\n\n  fastify.listen({ port: 0, host: localhost }, err => {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    http.get({\n      hostname: fastify.server.address().hostname,\n      port: fastify.server.address().port,\n      path: '/',\n      method: 'GET',\n      headers: {\n        'Accept-Version': '1.x'\n      }\n    })\n\n    stream.once('data', listenAtLogLine => {\n      stream.once('data', line => {\n        t.equal(line.req.version, '1.x')\n        stream.once('data', line => {\n          t.equal(line.req.version, '1.x')\n        })\n      })\n    })\n  })\n})\n\ntest('Should register a versioned route with custom versioning strategy', t => {\n  t.plan(8)\n\n  const customVersioning = {\n    name: 'version',\n    storage: function () {\n      const versions = {}\n      return {\n        get: (version) => { return versions[version] || null },\n        set: (version, store) => { versions[version] = store }\n      }\n    },\n    deriveConstraint: (req, ctx) => {\n      return req.headers.accept\n    },\n    mustMatchWhenDerived: true,\n    validate: () => true\n  }\n\n  const fastify = Fastify({\n    constraints: {\n      version: customVersioning\n    }\n  })\n\n  fastify.route({\n    method: 'GET',\n    url: '/',\n    constraints: { version: 'application/vnd.example.api+json;version=2' },\n    handler: (req, reply) => {\n      reply.send({ hello: 'from route v2' })\n    }\n  })\n\n  fastify.route({\n    method: 'GET',\n    url: '/',\n    constraints: { version: 'application/vnd.example.api+json;version=3' },\n    handler: (req, reply) => {\n      reply.send({ hello: 'from route v3' })\n    }\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/',\n    headers: {\n      Accept: 'application/vnd.example.api+json;version=2'\n    }\n  }, (err, res) => {\n    t.error(err)\n    t.same(JSON.parse(res.payload), { hello: 'from route v2' })\n    t.equal(res.statusCode, 200)\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/',\n    headers: {\n      Accept: 'application/vnd.example.api+json;version=3'\n    }\n  }, (err, res) => {\n    t.error(err)\n    t.same(JSON.parse(res.payload), { hello: 'from route v3' })\n    t.equal(res.statusCode, 200)\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/',\n    headers: {\n      Accept: 'application/vnd.example.api+json;version=4'\n    }\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 404)\n  })\n})\n\ntest('Should get error using an invalid a versioned route, using default validation (deprecated versioning option)', t => {\n  t.plan(3)\n\n  const fastify = Fastify({\n    versioning: {\n      storage: function () {\n        const versions = {}\n        return {\n          get: (version) => { return versions[version] || null },\n          set: (version, store) => { versions[version] = store }\n        }\n      },\n      deriveVersion: (req, ctx) => {\n        return req.headers.accept\n      }\n    }\n  })\n\n  fastify.route({\n    method: 'GET',\n    url: '/',\n    constraints: { version: 'application/vnd.example.api+json;version=1' },\n    handler: (req, reply) => {\n      reply.send({ hello: 'cant match route v1' })\n    }\n  })\n\n  try {\n    fastify.route({\n      method: 'GET',\n      url: '/',\n      // not a string version\n      constraints: { version: 2 },\n      handler: (req, reply) => {\n        reply.send({ hello: 'cant match route v2' })\n      }\n    })\n  } catch (err) {\n    t.equal(err.message, 'Version constraint should be a string.')\n  }\n\n  fastify.inject({\n    method: 'GET',\n    url: '/',\n    headers: {\n      Accept: 'application/vnd.example.api+json;version=2'\n    }\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 404)\n  })\n})\n\ntest('Vary header check (for documentation example)', t => {\n  t.plan(8)\n  const fastify = Fastify()\n  fastify.addHook('onSend', async (req, reply) => {\n    if (req.headers['accept-version']) { // or the custom header you are using\n      let value = reply.getHeader('Vary') || ''\n      const header = Array.isArray(value) ? value.join(', ') : String(value)\n      if ((value = append(header, 'Accept-Version'))) { // or the custom header you are using\n        reply.header('Vary', value)\n      }\n    }\n  })\n\n  fastify.route({\n    method: 'GET',\n    url: '/',\n    handler: (req, reply) => {\n      reply.send({ hello: 'world' })\n    }\n  })\n\n  fastify.route({\n    method: 'GET',\n    url: '/',\n    constraints: { version: '1.2.0' },\n    handler: (req, reply) => {\n      reply.send({ hello: 'world' })\n    }\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/',\n    headers: {\n      'Accept-Version': '1.x'\n    }\n  }, (err, res) => {\n    t.error(err)\n    t.same(JSON.parse(res.payload), { hello: 'world' })\n    t.equal(res.statusCode, 200)\n    t.equal(res.headers.vary, 'Accept-Version')\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/'\n  }, (err, res) => {\n    t.error(err)\n    t.same(JSON.parse(res.payload), { hello: 'world' })\n    t.equal(res.statusCode, 200)\n    t.equal(res.headers.vary, undefined)\n  })\n})\n\ntest('Should trigger a warning when a versioned route is registered via version option', t => {\n  t.plan(4)\n\n  function onWarning (code) {\n    t.equal(code, 'FSTDEP008')\n  }\n  const warning = {\n    emit: onWarning\n  }\n\n  const route = proxyquire('../lib/route', { './warnings': warning })\n  const fastify = proxyquire('..', { './lib/route.js': route })({ exposeHeadRoutes: false })\n\n  fastify.route({\n    method: 'GET',\n    url: '/',\n    version: '1.2.0',\n    handler: (req, reply) => {\n      reply.send({ hello: 'world' })\n    }\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/',\n    headers: {\n      'Accept-Version': '1.x'\n    }\n  }, (err, res) => {\n    t.error(err)\n    t.same(JSON.parse(res.payload), { hello: 'world' })\n    t.equal(res.statusCode, 200)\n  })\n})\n/lib/reply.js^'use strict'\n\nconst eos = require('stream').finished\n\nconst {\n  kFourOhFourContext,\n  kReplyErrorHandlerCalled,\n  kReplyHijacked,\n  kReplyStartTime,\n  kReplyEndTime,\n  kReplySerializer,\n  kReplySerializerDefault,\n  kReplyIsError,\n  kReplyHeaders,\n  kReplyTrailers,\n  kReplyHasStatusCode,\n  kReplyIsRunningOnErrorHook,\n  kReplyNextErrorHandler,\n  kDisableRequestLogging,\n  kSchemaResponse,\n  kReplyCacheSerializeFns,\n  kSchemaController,\n  kOptions,\n  kRouteContext\n} = require('./symbols.js')\nconst { hookRunner, hookIterator, onSendHookRunner } = require('./hooks')\n\nconst internals = require('./handleRequest')[Symbol.for('internals')]\nconst loggerUtils = require('./logger')\nconst now = loggerUtils.now\nconst { handleError } = require('./error-handler')\nconst { getSchemaSerializer } = require('./schemas')\n\nconst CONTENT_TYPE = {\n  JSON: 'application/json; charset=utf-8',\n  PLAIN: 'text/plain; charset=utf-8',\n  OCTET: 'application/octet-stream'\n}\nconst {\n  FST_ERR_REP_INVALID_PAYLOAD_TYPE,\n  FST_ERR_REP_ALREADY_SENT,\n  FST_ERR_REP_SENT_VALUE,\n  FST_ERR_SEND_INSIDE_ONERR,\n  FST_ERR_BAD_STATUS_CODE,\n  FST_ERR_BAD_TRAILER_NAME,\n  FST_ERR_BAD_TRAILER_VALUE,\n  FST_ERR_MISSING_SERIALIZATION_FN,\n  FST_ERR_MISSING_CONTENTTYPE_SERIALIZATION_FN\n} = require('./errors')\nconst warning = require('./warnings')\n\nfunction Reply (res, request, log) {\n  this.raw = res\n  this[kReplySerializer] = null\n  this[kReplyErrorHandlerCalled] = false\n  this[kReplyIsError] = false\n  this[kReplyIsRunningOnErrorHook] = false\n  this.request = request\n  this[kReplyHeaders] = {}\n  this[kReplyTrailers] = null\n  this[kReplyHasStatusCode] = false\n  this[kReplyStartTime] = undefined\n  this.log = log\n}\nReply.props = []\n\nObject.defineProperties(Reply.prototype, {\n  [kRouteContext]: {\n    get () {\n      return this.request[kRouteContext]\n    }\n  },\n  // TODO: remove once v5 is done\n  // Is temporary to avoid constant conflicts between `next` and `main`\n  context: {\n    get () {\n      return this.request[kRouteContext]\n    }\n  },\n  server: {\n    get () {\n      return this.request[kRouteContext].server\n    }\n  },\n  sent: {\n    enumerable: true,\n    get () {\n      // We are checking whether reply was hijacked or the response has ended.\n      return (this[kReplyHijacked] || this.raw.writableEnded) === true\n    },\n    set (value) {\n      warning.emit('FSTDEP010')\n\n      if (value !== true) {\n        throw new FST_ERR_REP_SENT_VALUE()\n      }\n\n      // We throw only if sent was overwritten from Fastify\n      if (this.sent && this[kReplyHijacked]) {\n        throw new FST_ERR_REP_ALREADY_SENT()\n      }\n\n      this[kReplyHijacked] = true\n    }\n  },\n  statusCode: {\n    get () {\n      return this.raw.statusCode\n    },\n    set (value) {\n      this.code(value)\n    }\n  }\n})\n\nReply.prototype.hijack = function () {\n  this[kReplyHijacked] = true\n  return this\n}\n\nReply.prototype.send = function (payload) {\n  if (this[kReplyIsRunningOnErrorHook] === true) {\n    throw new FST_ERR_SEND_INSIDE_ONERR()\n  }\n\n  if (this.sent) {\n    this.log.warn({ err: new FST_ERR_REP_ALREADY_SENT() }, 'Reply already sent')\n    return this\n  }\n\n  if (payload instanceof Error || this[kReplyIsError] === true) {\n    this[kReplyIsError] = false\n    onErrorHook(this, payload, onSendHook)\n    return this\n  }\n\n  if (payload === undefined) {\n    onSendHook(this, payload)\n    return this\n  }\n\n  const contentType = this.getHeader('content-type')\n  const hasContentType = contentType !== undefined\n\n  if (payload !== null) {\n    if (typeof payload.pipe === 'function') {\n      onSendHook(this, payload)\n      return this\n    }\n\n    if (Buffer.isBuffer(payload)) {\n      if (hasContentType === false) {\n        this[kReplyHeaders]['content-type'] = CONTENT_TYPE.OCTET\n      }\n      onSendHook(this, payload)\n      return this\n    }\n\n    if (hasContentType === false && typeof payload === 'string') {\n      this[kReplyHeaders]['content-type'] = CONTENT_TYPE.PLAIN\n      onSendHook(this, payload)\n      return this\n    }\n  }\n\n  if (this[kReplySerializer] !== null) {\n    if (typeof payload !== 'string') {\n      preserializeHook(this, payload)\n      return this\n    } else {\n      payload = this[kReplySerializer](payload)\n    }\n\n  // The indexOf below also matches custom json mimetypes such as 'application/hal+json' or 'application/ld+json'\n  } else if (hasContentType === false || contentType.indexOf('json') > -1) {\n    if (hasContentType === false) {\n      this[kReplyHeaders]['content-type'] = CONTENT_TYPE.JSON\n    } else {\n      // If user doesn't set charset, we will set charset to utf-8\n      if (contentType.indexOf('charset') === -1) {\n        const customContentType = contentType.trim()\n        if (customContentType.endsWith(';')) {\n          // custom content-type is ended with ';'\n          this[kReplyHeaders]['content-type'] = `${customContentType} charset=utf-8`\n        } else {\n          this[kReplyHeaders]['content-type'] = `${customContentType}; charset=utf-8`\n        }\n      }\n    }\n    if (typeof payload !== 'string') {\n      preserializeHook(this, payload)\n      return this\n    }\n  }\n\n  onSendHook(this, payload)\n\n  return this\n}\n\nReply.prototype.getHeader = function (key) {\n  key = key.toLowerCase()\n  const res = this.raw\n  let value = this[kReplyHeaders][key]\n  if (value === undefined && res.hasHeader(key)) {\n    value = res.getHeader(key)\n  }\n  return value\n}\n\nReply.prototype.getHeaders = function () {\n  return {\n    ...this.raw.getHeaders(),\n    ...this[kReplyHeaders]\n  }\n}\n\nReply.prototype.hasHeader = function (key) {\n  key = key.toLowerCase()\n\n  return this[kReplyHeaders][key] !== undefined || this.raw.hasHeader(key)\n}\n\nReply.prototype.removeHeader = function (key) {\n  // Node.js does not like headers with keys set to undefined,\n  // so we have to delete the key.\n  delete this[kReplyHeaders][key.toLowerCase()]\n  return this\n}\n\nReply.prototype.header = function (key, value = '') {\n  key = key.toLowerCase()\n\n  if (this[kReplyHeaders][key] && key === 'set-cookie') {\n    // https://tools.ietf.org/html/rfc7230#section-3.2.2\n    if (typeof this[kReplyHeaders][key] === 'string') {\n      this[kReplyHeaders][key] = [this[kReplyHeaders][key]]\n    }\n\n    if (Array.isArray(value)) {\n      this[kReplyHeaders][key].push(...value)\n    } else {\n      this[kReplyHeaders][key].push(value)\n    }\n  } else {\n    this[kReplyHeaders][key] = value\n  }\n\n  return this\n}\n\nReply.prototype.headers = function (headers) {\n  const keys = Object.keys(headers)\n  /* eslint-disable no-var */\n  for (var i = 0; i !== keys.length; ++i) {\n    const key = keys[i]\n    this.header(key, headers[key])\n  }\n\n  return this\n}\n\n// https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Trailer#directives\n// https://httpwg.org/specs/rfc7230.html#chunked.trailer.part\nconst INVALID_TRAILERS = new Set([\n  'transfer-encoding',\n  'content-length',\n  'host',\n  'cache-control',\n  'max-forwards',\n  'te',\n  'authorization',\n  'set-cookie',\n  'content-encoding',\n  'content-type',\n  'content-range',\n  'trailer'\n])\n\nReply.prototype.trailer = function (key, fn) {\n  key = key.toLowerCase()\n  if (INVALID_TRAILERS.has(key)) {\n    throw new FST_ERR_BAD_TRAILER_NAME(key)\n  }\n  if (typeof fn !== 'function') {\n    throw new FST_ERR_BAD_TRAILER_VALUE(key, typeof fn)\n  }\n  if (this[kReplyTrailers] === null) this[kReplyTrailers] = {}\n  this[kReplyTrailers][key] = fn\n  return this\n}\n\nReply.prototype.hasTrailer = function (key) {\n  return this[kReplyTrailers]?.[key.toLowerCase()] !== undefined\n}\n\nReply.prototype.removeTrailer = function (key) {\n  if (this[kReplyTrailers] === null) return this\n  this[kReplyTrailers][key.toLowerCase()] = undefined\n  return this\n}\n\nReply.prototype.code = function (code) {\n  const intValue = Number(code)\n  if (isNaN(intValue) || intValue < 100 || intValue > 599) {\n    throw new FST_ERR_BAD_STATUS_CODE(code || String(code))\n  }\n\n  this.raw.statusCode = intValue\n  this[kReplyHasStatusCode] = true\n  return this\n}\n\nReply.prototype.status = Reply.prototype.code\n\nReply.prototype.getSerializationFunction = function (schemaOrStatus, contentType) {\n  let serialize\n\n  if (typeof schemaOrStatus === 'string' || typeof schemaOrStatus === 'number') {\n    if (typeof contentType === 'string') {\n      serialize = this[kRouteContext][kSchemaResponse]?.[schemaOrStatus]?.[contentType]\n    } else {\n      serialize = this[kRouteContext][kSchemaResponse]?.[schemaOrStatus]\n    }\n  } else if (typeof schemaOrStatus === 'object') {\n    serialize = this[kRouteContext][kReplyCacheSerializeFns]?.get(schemaOrStatus)\n  }\n\n  return serialize\n}\n\nReply.prototype.compileSerializationSchema = function (schema, httpStatus = null, contentType = null) {\n  const { request } = this\n  const { method, url } = request\n\n  // Check if serialize function already compiled\n  if (this[kRouteContext][kReplyCacheSerializeFns]?.has(schema)) {\n    return this[kRouteContext][kReplyCacheSerializeFns].get(schema)\n  }\n\n  const serializerCompiler = this[kRouteContext].serializerCompiler ||\n   this.server[kSchemaController].serializerCompiler ||\n  (\n    // We compile the schemas if no custom serializerCompiler is provided\n    // nor set\n    this.server[kSchemaController].setupSerializer(this.server[kOptions]) ||\n    this.server[kSchemaController].serializerCompiler\n  )\n\n  const serializeFn = serializerCompiler({\n    schema,\n    method,\n    url,\n    httpStatus,\n    contentType\n  })\n\n  // We create a WeakMap to compile the schema only once\n  // Its done leazily to avoid add overhead by creating the WeakMap\n  // if it is not used\n  // TODO: Explore a central cache for all the schemas shared across\n  // encapsulated contexts\n  if (this[kRouteContext][kReplyCacheSerializeFns] == null) {\n    this[kRouteContext][kReplyCacheSerializeFns] = new WeakMap()\n  }\n\n  this[kRouteContext][kReplyCacheSerializeFns].set(schema, serializeFn)\n\n  return serializeFn\n}\n\nReply.prototype.serializeInput = function (input, schema, httpStatus, contentType) {\n  const possibleContentType = httpStatus\n  let serialize\n  httpStatus = typeof schema === 'string' || typeof schema === 'number'\n    ? schema\n    : httpStatus\n\n  contentType = httpStatus && possibleContentType !== httpStatus\n    ? possibleContentType\n    : contentType\n\n  if (httpStatus != null) {\n    if (contentType != null) {\n      serialize = this[kRouteContext][kSchemaResponse]?.[httpStatus]?.[contentType]\n    } else {\n      serialize = this[kRouteContext][kSchemaResponse]?.[httpStatus]\n    }\n\n    if (serialize == null) {\n      if (contentType) throw new FST_ERR_MISSING_CONTENTTYPE_SERIALIZATION_FN(httpStatus, contentType)\n      throw new FST_ERR_MISSING_SERIALIZATION_FN(httpStatus)\n    }\n  } else {\n    // Check if serialize function already compiled\n    if (this[kRouteContext][kReplyCacheSerializeFns]?.has(schema)) {\n      serialize = this[kRouteContext][kReplyCacheSerializeFns].get(schema)\n    } else {\n      serialize = this.compileSerializationSchema(schema, httpStatus, contentType)\n    }\n  }\n\n  return serialize(input)\n}\n\nReply.prototype.serialize = function (payload) {\n  if (this[kReplySerializer] !== null) {\n    return this[kReplySerializer](payload)\n  } else {\n    if (this[kRouteContext] && this[kRouteContext][kReplySerializerDefault]) {\n      return this[kRouteContext][kReplySerializerDefault](payload, this.raw.statusCode)\n    } else {\n      return serialize(this[kRouteContext], payload, this.raw.statusCode)\n    }\n  }\n}\n\nReply.prototype.serializer = function (fn) {\n  this[kReplySerializer] = fn\n  return this\n}\n\nReply.prototype.type = function (type) {\n  this[kReplyHeaders]['content-type'] = type\n  return this\n}\n\nReply.prototype.redirect = function (code, url) {\n  if (typeof code === 'string') {\n    url = code\n    code = this[kReplyHasStatusCode] ? this.raw.statusCode : 302\n  }\n\n  return this.header('location', url).code(code).send()\n}\n\nReply.prototype.callNotFound = function () {\n  notFound(this)\n  return this\n}\n\nReply.prototype.getResponseTime = function () {\n  let responseTime = 0\n\n  if (this[kReplyStartTime] !== undefined) {\n    responseTime = (this[kReplyEndTime] || now()) - this[kReplyStartTime]\n  }\n\n  return responseTime\n}\n\n// Make reply a thenable, so it could be used with async/await.\n// See\n// - https://github.com/fastify/fastify/issues/1864 for the discussions\n// - https://promisesaplus.com/ for the definition of thenable\n// - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/then for the signature\nReply.prototype.then = function (fulfilled, rejected) {\n  if (this.sent) {\n    fulfilled()\n    return\n  }\n\n  eos(this.raw, (err) => {\n    // We must not treat ERR_STREAM_PREMATURE_CLOSE as\n    // an error because it is created by eos, not by the stream.\n    if (err && err.code !== 'ERR_STREAM_PREMATURE_CLOSE') {\n      if (rejected) {\n        rejected(err)\n      } else {\n        this.log && this.log.warn('unhandled rejection on reply.then')\n      }\n    } else {\n      fulfilled()\n    }\n  })\n}\n\nfunction preserializeHook (reply, payload) {\n  if (reply[kRouteContext].preSerialization !== null) {\n    onSendHookRunner(\n      reply[kRouteContext].preSerialization,\n      reply.request,\n      reply,\n      payload,\n      preserializeHookEnd\n    )\n  } else {\n    preserializeHookEnd(null, reply.request, reply, payload)\n  }\n}\n\nfunction preserializeHookEnd (err, request, reply, payload) {\n  if (err != null) {\n    onErrorHook(reply, err)\n    return\n  }\n\n  try {\n    if (reply[kReplySerializer] !== null) {\n      payload = reply[kReplySerializer](payload)\n    } else if (reply[kRouteContext] && reply[kRouteContext][kReplySerializerDefault]) {\n      payload = reply[kRouteContext][kReplySerializerDefault](payload, reply.raw.statusCode)\n    } else {\n      payload = serialize(reply[kRouteContext], payload, reply.raw.statusCode, reply[kReplyHeaders]['content-type'])\n    }\n  } catch (e) {\n    wrapSeralizationError(e, reply)\n    onErrorHook(reply, e)\n    return\n  }\n\n  onSendHook(reply, payload)\n}\n\nfunction wrapSeralizationError (error, reply) {\n  error.serialization = reply[kRouteContext].config\n}\n\nfunction onSendHook (reply, payload) {\n  if (reply[kRouteContext].onSend !== null) {\n    onSendHookRunner(\n      reply[kRouteContext].onSend,\n      reply.request,\n      reply,\n      payload,\n      wrapOnSendEnd\n    )\n  } else {\n    onSendEnd(reply, payload)\n  }\n}\n\nfunction wrapOnSendEnd (err, request, reply, payload) {\n  if (err != null) {\n    onErrorHook(reply, err)\n  } else {\n    onSendEnd(reply, payload)\n  }\n}\n\nfunction onSendEnd (reply, payload) {\n  const res = reply.raw\n  const req = reply.request\n  const statusCode = res.statusCode\n\n  // we check if we need to update the trailers header and set it\n  if (reply[kReplyTrailers] !== null) {\n    const trailerHeaders = Object.keys(reply[kReplyTrailers])\n    let header = ''\n    for (const trailerName of trailerHeaders) {\n      if (typeof reply[kReplyTrailers][trailerName] !== 'function') continue\n      header += ' '\n      header += trailerName\n    }\n    // it must be chunked for trailer to work\n    reply.header('Transfer-Encoding', 'chunked')\n    reply.header('Trailer', header.trim())\n  }\n\n  if (payload === undefined || payload === null) {\n    // according to https://tools.ietf.org/html/rfc7230#section-3.3.2\n    // we cannot send a content-length for 304 and 204, and all status code\n    // < 200\n    // A sender MUST NOT send a Content-Length header field in any message\n    // that contains a Transfer-Encoding header field.\n    // For HEAD we don't overwrite the `content-length`\n    if (statusCode >= 200 && statusCode !== 204 && statusCode !== 304 && req.method !== 'HEAD' && reply[kReplyTrailers] === null) {\n      reply[kReplyHeaders]['content-length'] = '0'\n    }\n\n    res.writeHead(statusCode, reply[kReplyHeaders])\n    sendTrailer(payload, res, reply)\n    return\n  }\n\n  if (typeof payload.pipe === 'function') {\n    sendStream(payload, res, reply)\n    return\n  }\n\n  if (typeof payload !== 'string' && !Buffer.isBuffer(payload)) {\n    throw new FST_ERR_REP_INVALID_PAYLOAD_TYPE(typeof payload)\n  }\n\n  if (reply[kReplyTrailers] === null) {\n    const contentLength = reply[kReplyHeaders]['content-length']\n    if (!contentLength ||\n        (req.raw.method !== 'HEAD' &&\n         Number(contentLength) !== Buffer.byteLength(payload)\n        )\n    ) {\n      reply[kReplyHeaders]['content-length'] = '' + Buffer.byteLength(payload)\n    }\n  }\n\n  res.writeHead(statusCode, reply[kReplyHeaders])\n  // write payload first\n  res.write(payload)\n  // then send trailers\n  sendTrailer(payload, res, reply)\n}\n\nfunction logStreamError (logger, err, res) {\n  if (err.code === 'ERR_STREAM_PREMATURE_CLOSE') {\n    if (!logger[kDisableRequestLogging]) {\n      logger.info({ res }, 'stream closed prematurely')\n    }\n  } else {\n    logger.warn({ err }, 'response terminated with an error with headers already sent')\n  }\n}\n\nfunction sendStream (payload, res, reply) {\n  let sourceOpen = true\n  let errorLogged = false\n\n  // set trailer when stream ended\n  sendStreamTrailer(payload, res, reply)\n\n  eos(payload, { readable: true, writable: false }, function (err) {\n    sourceOpen = false\n    if (err != null) {\n      if (res.headersSent || reply.request.raw.aborted === true) {\n        if (!errorLogged) {\n          errorLogged = true\n          logStreamError(reply.log, err, res)\n        }\n        res.destroy()\n      } else {\n        onErrorHook(reply, err)\n      }\n    }\n    // there is nothing to do if there is not an error\n  })\n\n  eos(res, function (err) {\n    if (sourceOpen) {\n      if (err != null && res.headersSent && !errorLogged) {\n        errorLogged = true\n        logStreamError(reply.log, err, res)\n      }\n      if (typeof payload.destroy === 'function') {\n        payload.destroy()\n      } else if (typeof payload.close === 'function') {\n        payload.close(noop)\n      } else if (typeof payload.abort === 'function') {\n        payload.abort()\n      } else {\n        reply.log.warn('stream payload does not end properly')\n      }\n    }\n  })\n\n  // streams will error asynchronously, and we want to handle that error\n  // appropriately, e.g. a 404 for a missing file. So we cannot use\n  // writeHead, and we need to resort to setHeader, which will trigger\n  // a writeHead when there is data to send.\n  if (!res.headersSent) {\n    for (const key in reply[kReplyHeaders]) {\n      res.setHeader(key, reply[kReplyHeaders][key])\n    }\n  } else {\n    reply.log.warn('response will send, but you shouldn\\'t use res.writeHead in stream mode')\n  }\n  payload.pipe(res)\n}\n\nfunction sendTrailer (payload, res, reply) {\n  if (reply[kReplyTrailers] === null) {\n    // when no trailer, we close the stream\n    res.end(null, null, null) // avoid ArgumentsAdaptorTrampoline from V8\n    return\n  }\n  const trailerHeaders = Object.keys(reply[kReplyTrailers])\n  const trailers = {}\n  let handled = 0\n  let skipped = true\n  function send () {\n    // add trailers when all handler handled\n    /* istanbul ignore else */\n    if (handled === 0) {\n      res.addTrailers(trailers)\n      // we need to properly close the stream\n      // after trailers sent\n      res.end(null, null, null) // avoid ArgumentsAdaptorTrampoline from V8\n    }\n  }\n\n  for (const trailerName of trailerHeaders) {\n    if (typeof reply[kReplyTrailers][trailerName] !== 'function') continue\n    skipped = false\n    handled--\n\n    function cb (err, value) {\n      // TODO: we may protect multiple callback calls\n      //       or mixing async-await with callback\n      handled++\n\n      // we can safely ignore error for trailer\n      // since it does affect the client\n      // we log in here only for debug usage\n      if (err) reply.log.debug(err)\n      else trailers[trailerName] = value\n\n      // we push the check to the end of event\n      // loop, so the registration continue to\n      // process.\n      process.nextTick(send)\n    }\n\n    const result = reply[kReplyTrailers][trailerName](reply, payload, cb)\n    if (typeof result === 'object' && typeof result.then === 'function') {\n      result.then((v) => cb(null, v), cb)\n    } else if (result !== null && result !== undefined) {\n      // TODO: should be removed in fastify@5\n      warning.emit('FSTDEP013')\n      cb(null, result)\n    }\n  }\n\n  // when all trailers are skipped\n  // we need to close the stream\n  if (skipped) res.end(null, null, null) // avoid ArgumentsAdaptorTrampoline from V8\n}\n\nfunction sendStreamTrailer (payload, res, reply) {\n  if (reply[kReplyTrailers] === null) return\n  payload.on('end', () => sendTrailer(null, res, reply))\n}\n\nfunction onErrorHook (reply, error, cb) {\n  if (reply[kRouteContext].onError !== null && !reply[kReplyNextErrorHandler]) {\n    reply[kReplyIsRunningOnErrorHook] = true\n    onSendHookRunner(\n      reply[kRouteContext].onError,\n      reply.request,\n      reply,\n      error,\n      () => handleError(reply, error, cb)\n    )\n  } else {\n    handleError(reply, error, cb)\n  }\n}\n\nfunction setupResponseListeners (reply) {\n  reply[kReplyStartTime] = now()\n\n  const onResFinished = err => {\n    reply[kReplyEndTime] = now()\n    reply.raw.removeListener('finish', onResFinished)\n    reply.raw.removeListener('error', onResFinished)\n\n    const ctx = reply[kRouteContext]\n\n    if (ctx && ctx.onResponse !== null) {\n      hookRunner(\n        ctx.onResponse,\n        onResponseIterator,\n        reply.request,\n        reply,\n        onResponseCallback\n      )\n    } else {\n      onResponseCallback(err, reply.request, reply)\n    }\n  }\n\n  reply.raw.on('finish', onResFinished)\n  reply.raw.on('error', onResFinished)\n}\n\nfunction onResponseIterator (fn, request, reply, next) {\n  return fn(request, reply, next)\n}\n\nfunction onResponseCallback (err, request, reply) {\n  if (reply.log[kDisableRequestLogging]) {\n    return\n  }\n\n  const responseTime = reply.getResponseTime()\n\n  if (err != null) {\n    reply.log.error({\n      res: reply,\n      err,\n      responseTime\n    }, 'request errored')\n    return\n  }\n\n  reply.log.info({\n    res: reply,\n    responseTime\n  }, 'request completed')\n}\n\nfunction buildReply (R) {\n  const props = [...R.props]\n\n  function _Reply (res, request, log) {\n    this.raw = res\n    this[kReplyIsError] = false\n    this[kReplyErrorHandlerCalled] = false\n    this[kReplyHijacked] = false\n    this[kReplySerializer] = null\n    this.request = request\n    this[kReplyHeaders] = {}\n    this[kReplyTrailers] = null\n    this[kReplyStartTime] = undefined\n    this[kReplyEndTime] = undefined\n    this.log = log\n\n    // eslint-disable-next-line no-var\n    var prop\n    // eslint-disable-next-line no-var\n    for (var i = 0; i < props.length; i++) {\n      prop = props[i]\n      this[prop.key] = prop.value\n    }\n  }\n  Object.setPrototypeOf(_Reply.prototype, R.prototype)\n  Object.setPrototypeOf(_Reply, R)\n  _Reply.parent = R\n  _Reply.props = props\n  return _Reply\n}\n\nfunction notFound (reply) {\n  if (reply[kRouteContext][kFourOhFourContext] === null) {\n    reply.log.warn('Trying to send a NotFound error inside a 404 handler. Sending basic 404 response.')\n    reply.code(404).send('404 Not Found')\n    return\n  }\n\n  reply.request[kRouteContext] = reply[kRouteContext][kFourOhFourContext]\n\n  // preHandler hook\n  if (reply[kRouteContext].preHandler !== null) {\n    hookRunner(\n      reply[kRouteContext].preHandler,\n      hookIterator,\n      reply.request,\n      reply,\n      internals.preHandlerCallback\n    )\n  } else {\n    internals.preHandlerCallback(null, reply.request, reply)\n  }\n}\n\n/**\n * This function runs when a payload that is not a string|buffer|stream or null\n * should be serialized to be streamed to the response.\n * This is the default serializer that can be customized by the user using the replySerializer\n *\n * @param {object} context the request context\n * @param {object} data the JSON payload to serialize\n * @param {number} statusCode the http status code\n * @param {string} contentType the reply content type\n * @returns {string} the serialized payload\n */\nfunction serialize (context, data, statusCode, contentType) {\n  const fnSerialize = getSchemaSerializer(context, statusCode, contentType)\n  if (fnSerialize) {\n    return fnSerialize(data)\n  }\n  return JSON.stringify(data)\n}\n\nfunction noop () { }\n\nmodule.exports = Reply\nmodule.exports.buildReply = buildReply\nmodule.exports.setupResponseListeners = setupResponseListeners\n/types/type-provider.d.ts\u0017&\nimport { RouteGenericInterface } from './route'\nimport { FastifySchema } from './schema'\n\n// -----------------------------------------------------------------------------------------------\n// TypeProvider\n// -----------------------------------------------------------------------------------------------\n\nexport interface FastifyTypeProvider {\n  readonly input: unknown,\n  readonly output: unknown,\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface FastifyTypeProviderDefault extends FastifyTypeProvider {}\n\nexport type CallTypeProvider<F extends FastifyTypeProvider, I> = (F & { input: I })['output']\n\n// -----------------------------------------------------------------------------------------------\n// FastifyRequestType\n// -----------------------------------------------------------------------------------------------\n\n// Used to map undefined SchemaCompiler properties to unknown\n//   Without brackets, UndefinedToUnknown<undefined | null> => unknown\ntype UndefinedToUnknown<T> = [T] extends [undefined] ? unknown : T\n\n// union-aware keyof operator\n//    keyof ({ a: number} | { b: number}) => never\n//    KeysOf<{a: number} | {b: number}>   => \"a\" | \"b\"\n// this exists to allow users to override faulty type-provider logic.\ntype KeysOf<T> = T extends any ? keyof T : never\n\n// Resolves Request types either from generic argument or Type Provider.\ntype ResolveRequestParams<TypeProvider extends FastifyTypeProvider, SchemaCompiler extends FastifySchema, RouteGeneric extends RouteGenericInterface> =\n  UndefinedToUnknown<KeysOf<RouteGeneric['Params']> extends never ? CallTypeProvider<TypeProvider, SchemaCompiler['params']> : RouteGeneric['Params']>\ntype ResolveRequestQuerystring<TypeProvider extends FastifyTypeProvider, SchemaCompiler extends FastifySchema, RouteGeneric extends RouteGenericInterface> =\n  UndefinedToUnknown<KeysOf<RouteGeneric['Querystring']> extends never ? CallTypeProvider<TypeProvider, SchemaCompiler['querystring']> : RouteGeneric['Querystring']>\ntype ResolveRequestHeaders<TypeProvider extends FastifyTypeProvider, SchemaCompiler extends FastifySchema, RouteGeneric extends RouteGenericInterface> =\n  UndefinedToUnknown<KeysOf<RouteGeneric['Headers']> extends never ? CallTypeProvider<TypeProvider, SchemaCompiler['headers']> : RouteGeneric['Headers']>\ntype ResolveRequestBody<TypeProvider extends FastifyTypeProvider, SchemaCompiler extends FastifySchema, RouteGeneric extends RouteGenericInterface> =\n  UndefinedToUnknown<KeysOf<RouteGeneric['Body']> extends never ? CallTypeProvider<TypeProvider, SchemaCompiler['body']> : RouteGeneric['Body']>\n\n// The target request type. This type is inferenced on fastify 'requests' via generic argument assignment\nexport interface FastifyRequestType<Params = unknown, Querystring = unknown, Headers = unknown, Body = unknown> {\n  params: Params,\n  query: Querystring,\n  headers: Headers,\n  body: Body\n}\n\n// Resolves the FastifyRequest generic parameters\nexport interface ResolveFastifyRequestType<TypeProvider extends FastifyTypeProvider, SchemaCompiler extends FastifySchema, RouteGeneric extends RouteGenericInterface> extends FastifyRequestType {\n  params: ResolveRequestParams<TypeProvider, SchemaCompiler, RouteGeneric>,\n  query: ResolveRequestQuerystring<TypeProvider, SchemaCompiler, RouteGeneric>,\n  headers: ResolveRequestHeaders<TypeProvider, SchemaCompiler, RouteGeneric>,\n  body: ResolveRequestBody<TypeProvider, SchemaCompiler, RouteGeneric>\n}\n\n// -----------------------------------------------------------------------------------------------\n// FastifyReplyType\n// -----------------------------------------------------------------------------------------------\n\n// Resolves the Reply type by taking a union of response status codes and content-types\ntype ResolveReplyFromSchemaCompiler<TypeProvider extends FastifyTypeProvider, SchemaCompiler extends FastifySchema> = {\n  [K1 in keyof SchemaCompiler['response']]: SchemaCompiler['response'][K1] extends { content: { [keyof: string]: { schema: unknown } } } ? ({\n    [K2 in keyof SchemaCompiler['response'][K1]['content']]: CallTypeProvider<TypeProvider, SchemaCompiler['response'][K1]['content'][K2]['schema']>\n  } extends infer Result ? Result[keyof Result] : unknown) : CallTypeProvider<TypeProvider, SchemaCompiler['response'][K1]>\n} extends infer Result ? Result[keyof Result] : unknown;\n\n// The target reply type. This type is inferenced on fastify 'replies' via generic argument assignment\nexport type FastifyReplyType<Reply = unknown> = Reply\n\n// Resolves the Reply type either via generic argument or from response schema. This type uses a different\n// resolution strategy to Requests where the Reply will infer a union of each status code type specified\n// by the user. The Reply can be explicitly overriden by users providing a generic Reply type on the route.\nexport type ResolveFastifyReplyType<TypeProvider extends FastifyTypeProvider, SchemaCompiler extends FastifySchema, RouteGeneric extends RouteGenericInterface> = UndefinedToUnknown<KeysOf<RouteGeneric['Reply']> extends never ? ResolveReplyFromSchemaCompiler<TypeProvider, SchemaCompiler> : RouteGeneric['Reply']>\n\n// -----------------------------------------------------------------------------------------------\n// FastifyReplyReturnType\n// -----------------------------------------------------------------------------------------------\n\n// The target reply return type. This type is inferenced on fastify 'routes' via generic argument assignment\nexport type ResolveFastifyReplyReturnType<\n  TypeProvider extends FastifyTypeProvider,\n  SchemaCompiler extends FastifySchema,\n  RouteGeneric extends RouteGenericInterface,\n> = ResolveFastifyReplyType<\nTypeProvider,\nSchemaCompiler,\nRouteGeneric\n> extends infer Return ?\n  (Return | void | Promise<Return | void>)\n// review: support both async and sync return types\n// (Promise<Return> | Return | Promise<void> | void)\n  : unknown\n/test/types/instance.test-d.ts4Zimport { expectAssignable, expectDeprecated, expectError, expectNotDeprecated, expectType } from 'tsd'\nimport fastify, {\n  FastifyBodyParser,\n  FastifyError,\n  FastifyInstance,\n  RawReplyDefaultExpression,\n  RawRequestDefaultExpression,\n  RawServerDefault\n} from '../../fastify'\nimport { HookHandlerDoneFunction } from '../../types/hooks'\nimport { FastifyReply } from '../../types/reply'\nimport { FastifyRequest } from '../../types/request'\nimport { DefaultRoute } from '../../types/route'\nimport { FastifySchemaControllerOptions, FastifySchemaCompiler, FastifySerializerCompiler } from '../../types/schema'\nimport { AddressInfo } from 'net'\n\nconst server = fastify()\n\nexpectAssignable<FastifyInstance>(server.addSchema({\n  type: 'null'\n}))\nexpectAssignable<FastifyInstance>(server.addSchema({\n  schemaId: 'id'\n}))\nexpectAssignable<FastifyInstance>(server.addSchema({\n  schemas: []\n}))\n\nexpectType<Record<string, unknown>>(server.getSchemas())\nexpectType<AddressInfo[]>(server.addresses())\nexpectType<unknown>(server.getSchema('SchemaId'))\nexpectType<string>(server.printRoutes())\nexpectType<string>(server.printPlugins())\n\nexpectAssignable<FastifyInstance>(\n  server.setErrorHandler(function (error, request, reply) {\n    expectType<FastifyError>(error)\n    expectAssignable<FastifyInstance>(this)\n  })\n)\n\nexpectAssignable<FastifyInstance>(\n  server.setErrorHandler<FastifyError>(function (error, request, reply) {\n    expectType<FastifyError>(error)\n  })\n)\n\nfunction fastifyErrorHandler (this: FastifyInstance, error: FastifyError) {}\nserver.setErrorHandler(fastifyErrorHandler)\n\nasync function asyncFastifyErrorHandler (this: FastifyInstance, error: FastifyError) {}\nserver.setErrorHandler(asyncFastifyErrorHandler)\n\nfunction nodeJSErrorHandler (error: NodeJS.ErrnoException) {\n  if (error) { throw error }\n}\nserver.setErrorHandler(nodeJSErrorHandler)\n\nfunction asyncNodeJSErrorHandler (error: NodeJS.ErrnoException) {\n  if (error) { throw error }\n}\nserver.setErrorHandler(asyncNodeJSErrorHandler)\n\nclass CustomError extends Error {\n  private __brand: any\n}\ninterface ReplyPayload {\n  Reply: {\n    test: boolean;\n  };\n}\n// typed sync error handler\nserver.setErrorHandler<CustomError, ReplyPayload>((error, request, reply) => {\n  expectType<CustomError>(error)\n  expectType<((payload?: ReplyPayload['Reply']) => FastifyReply<RawServerDefault, RawRequestDefaultExpression<RawServerDefault>, RawReplyDefaultExpression<RawServerDefault>, ReplyPayload>)>(reply.send)\n})\n// typed async error handler send\nserver.setErrorHandler<CustomError, ReplyPayload>(async (error, request, reply) => {\n  expectType<CustomError>(error)\n  expectType<((payload?: ReplyPayload['Reply']) => FastifyReply<RawServerDefault, RawRequestDefaultExpression<RawServerDefault>, RawReplyDefaultExpression<RawServerDefault>, ReplyPayload>)>(reply.send)\n})\n// typed async error handler return\nserver.setErrorHandler<CustomError, ReplyPayload>(async (error, request, reply) => {\n  expectType<CustomError>(error)\n  return { test: true }\n})\n// typed sync error handler send error\nexpectError(server.setErrorHandler<CustomError, ReplyPayload>((error, request, reply) => {\n  expectType<CustomError>(error)\n  reply.send({ test: 'foo' })\n}))\n// typed sync error handler return error\nserver.setErrorHandler<CustomError, ReplyPayload>((error, request, reply) => {\n  expectType<CustomError>(error)\n  return { test: 'foo' }\n})\n// typed async error handler send error\nexpectError(server.setErrorHandler<CustomError, ReplyPayload>(async (error, request, reply) => {\n  expectType<CustomError>(error)\n  reply.send({ test: 'foo' })\n}))\n// typed async error handler return error\nserver.setErrorHandler<CustomError, ReplyPayload>(async (error, request, reply) => {\n  expectType<CustomError>(error)\n  return { test: 'foo' }\n})\n\nfunction notFoundHandler (request: FastifyRequest, reply: FastifyReply) {}\nasync function notFoundAsyncHandler (request: FastifyRequest, reply: FastifyReply) {}\nfunction notFoundpreHandlerHandler (request: FastifyRequest, reply: FastifyReply, done: HookHandlerDoneFunction) { done() }\nasync function notFoundpreHandlerAsyncHandler (request: FastifyRequest, reply: FastifyReply) {}\nfunction notFoundpreValidationHandler (request: FastifyRequest, reply: FastifyReply, done: HookHandlerDoneFunction) { done() }\nasync function notFoundpreValidationAsyncHandler (request: FastifyRequest, reply: FastifyReply) {}\n\nserver.setNotFoundHandler(notFoundHandler)\nserver.setNotFoundHandler({ preHandler: notFoundpreHandlerHandler }, notFoundHandler)\nserver.setNotFoundHandler({ preHandler: notFoundpreHandlerAsyncHandler }, notFoundHandler)\nserver.setNotFoundHandler({ preValidation: notFoundpreValidationHandler }, notFoundHandler)\nserver.setNotFoundHandler({ preValidation: notFoundpreValidationAsyncHandler }, notFoundHandler)\nserver.setNotFoundHandler({ preHandler: notFoundpreHandlerHandler, preValidation: notFoundpreValidationHandler }, notFoundHandler)\n\nserver.setNotFoundHandler(notFoundAsyncHandler)\nserver.setNotFoundHandler({ preHandler: notFoundpreHandlerHandler }, notFoundAsyncHandler)\nserver.setNotFoundHandler({ preHandler: notFoundpreHandlerAsyncHandler }, notFoundAsyncHandler)\nserver.setNotFoundHandler({ preValidation: notFoundpreValidationHandler }, notFoundAsyncHandler)\nserver.setNotFoundHandler({ preValidation: notFoundpreValidationAsyncHandler }, notFoundAsyncHandler)\nserver.setNotFoundHandler({ preHandler: notFoundpreHandlerHandler, preValidation: notFoundpreValidationHandler }, notFoundAsyncHandler)\n\nfunction invalidErrorHandler (error: number) {\n  if (error) throw error\n}\n\nexpectError(server.setErrorHandler(invalidErrorHandler))\n\nserver.setSchemaController({\n  bucket: (parentSchemas: unknown) => {\n    return {\n      add (schema: unknown) {\n        expectType<unknown>(schema)\n        expectType<FastifyInstance>(server.addSchema({ type: 'null' }))\n        return server.addSchema({ type: 'null' })\n      },\n      getSchema (schemaId: string) {\n        expectType<string>(schemaId)\n        return server.getSchema('SchemaId')\n      },\n      getSchemas () {\n        expectType<Record<string, unknown>>(server.getSchemas())\n        return server.getSchemas()\n      }\n    }\n  }\n})\n\nfunction invalidSchemaController (schemaControllerOptions: FastifySchemaControllerOptions) {}\nexpectError(server.setSchemaController(invalidSchemaController))\n\nserver.setReplySerializer(function (payload, statusCode) {\n  expectType<unknown>(payload)\n  expectType<number>(statusCode)\n  return 'serialized'\n})\n\nfunction invalidReplySerializer (payload: number, statusCode: string) {}\nexpectError(server.setReplySerializer(invalidReplySerializer))\n\nfunction serializerWithInvalidReturn (payload: unknown, statusCode: number) {}\nexpectError(server.setReplySerializer(serializerWithInvalidReturn))\n\nfunction invalidSchemaErrorFormatter (err: Error) {\n  if (err) { throw err }\n}\nexpectError(server.setSchemaErrorFormatter(invalidSchemaErrorFormatter))\n\n// test listen method callback\nexpectAssignable<void>(server.listen(3000, '', 0, (err, address) => {\n  expectType<Error | null>(err)\n}))\nexpectAssignable<void>(server.listen('3000', '', 0, (err, address) => {\n  expectType<Error | null>(err)\n}))\nexpectAssignable<void>(server.listen(3000, '', (err, address) => {\n  expectType<Error | null>(err)\n}))\nexpectAssignable<void>(server.listen('3000', '', (err, address) => {\n  expectType<Error | null>(err)\n}))\nexpectAssignable<void>(server.listen(3000, (err, address) => {\n  expectType<Error | null>(err)\n}))\nexpectAssignable<void>(server.listen('3000', (err, address) => {\n  expectType<Error | null>(err)\n}))\n\n// test listen method callback types\nexpectAssignable<void>(server.listen('3000', (err, address) => {\n  expectAssignable<Error|null>(err)\n  expectAssignable<string>(address)\n}))\n\n// test listen method promise\nexpectAssignable<PromiseLike<string>>(server.listen(3000))\nexpectAssignable<PromiseLike<string>>(server.listen('3000'))\nexpectAssignable<PromiseLike<string>>(server.listen(3000, '', 0))\nexpectAssignable<PromiseLike<string>>(server.listen('3000', '', 0))\nexpectAssignable<PromiseLike<string>>(server.listen(3000, ''))\nexpectAssignable<PromiseLike<string>>(server.listen('3000', ''))\n\n// Test variadic listen signatures Typescript deprecation\nexpectDeprecated(server.listen(3000))\nexpectDeprecated(server.listen('3000'))\nexpectDeprecated(server.listen(3000, '', 0))\nexpectDeprecated(server.listen('3000', '', 0))\nexpectDeprecated(server.listen(3000, ''))\nexpectDeprecated(server.listen('3000', ''))\n\n// test listen opts objects\nexpectAssignable<PromiseLike<string>>(server.listen())\nexpectAssignable<PromiseLike<string>>(server.listen({ port: 3000 }))\nexpectAssignable<PromiseLike<string>>(server.listen({ port: 3000, host: '0.0.0.0' }))\nexpectAssignable<PromiseLike<string>>(server.listen({ port: 3000, host: '0.0.0.0', backlog: 42 }))\nexpectAssignable<PromiseLike<string>>(server.listen({ port: 3000, host: '0.0.0.0', backlog: 42, exclusive: true }))\nexpectAssignable<PromiseLike<string>>(server.listen({ port: 3000, host: '::/0', ipv6Only: true }))\n\nexpectAssignable<void>(server.listen(() => {}))\nexpectAssignable<void>(server.listen({ port: 3000 }, () => {}))\nexpectAssignable<void>(server.listen({ port: 3000, host: '0.0.0.0' }, () => {}))\nexpectAssignable<void>(server.listen({ port: 3000, host: '0.0.0.0', backlog: 42 }, () => {}))\nexpectAssignable<void>(server.listen({ port: 3000, host: '0.0.0.0', backlog: 42, exclusive: true }, () => {}))\nexpectAssignable<void>(server.listen({ port: 3000, host: '::/0', ipv6Only: true }, () => {}))\n\n// test listen opts objects Typescript deprectation exclusion\nexpectNotDeprecated(server.listen())\nexpectNotDeprecated(server.listen({ port: 3000 }))\nexpectNotDeprecated(server.listen({ port: 3000, host: '0.0.0.0' }))\nexpectNotDeprecated(server.listen({ port: 3000, host: '0.0.0.0', backlog: 42 }))\nexpectNotDeprecated(server.listen({ port: 3000, host: '0.0.0.0', backlog: 42, exclusive: true }))\nexpectNotDeprecated(server.listen({ port: 3000, host: '::/0', ipv6Only: true }))\n\nexpectNotDeprecated(server.listen(() => {}))\nexpectNotDeprecated(server.listen({ port: 3000 }, () => {}))\nexpectNotDeprecated(server.listen({ port: 3000, host: '0.0.0.0' }, () => {}))\nexpectNotDeprecated(server.listen({ port: 3000, host: '0.0.0.0', backlog: 42 }, () => {}))\nexpectNotDeprecated(server.listen({ port: 3000, host: '0.0.0.0', backlog: 42, exclusive: true }, () => {}))\nexpectNotDeprecated(server.listen({ port: 3000, host: '::/0', ipv6Only: true }, () => {}))\n\nexpectAssignable<void>(server.routing({} as RawRequestDefaultExpression, {} as RawReplyDefaultExpression))\n\nexpectType<FastifyInstance>(fastify().get('/', {\n  handler: () => {},\n  errorHandler: (error, request, reply) => {\n    expectAssignable<void>(server.errorHandler(error, request, reply))\n  }\n}))\n\ntype InitialConfig = Readonly<{\n  connectionTimeout?: number,\n  keepAliveTimeout?: number,\n  bodyLimit?: number,\n  caseSensitive?: boolean,\n  allowUnsafeRegex?: boolean,\n  forceCloseConnections?: boolean,\n  http2?: boolean,\n  https?: boolean | Readonly<{ allowHTTP1: boolean }>,\n  ignoreTrailingSlash?: boolean,\n  ignoreDuplicateSlashes?: boolean,\n  disableRequestLogging?: boolean,\n  maxParamLength?: number,\n  onProtoPoisoning?: 'error' | 'remove' | 'ignore',\n  onConstructorPoisoning?: 'error' | 'remove' | 'ignore',\n  pluginTimeout?: number,\n  requestIdHeader?: string | false,\n  requestIdLogLabel?: string,\n  http2SessionTimeout?: number\n}>\n\nexpectType<InitialConfig>(fastify().initialConfig)\n\nexpectType<FastifyBodyParser<string>>(server.defaultTextParser)\n\nexpectType<FastifyBodyParser<string>>(server.getDefaultJsonParser('ignore', 'error'))\n\nexpectType<string>(server.printRoutes({ includeHooks: true, commonPrefix: false, includeMeta: true }))\n\nexpectType<string>(server.printRoutes({ includeMeta: ['key1', Symbol('key2')] }))\n\nexpectType<string>(server.printRoutes())\n\nserver.decorate<(x: string) => void>('test', function (x: string): void {\n  expectType<FastifyInstance>(this)\n})\nserver.decorate('test', function (x: string): void {\n  expectType<FastifyInstance>(this)\n})\n\nserver.decorateRequest<(x: string, y: number) => void>('test', function (x: string, y: number): void {\n  expectType<FastifyRequest>(this)\n})\nserver.decorateRequest('test', function (x: string, y: number): void {\n  expectType<FastifyRequest>(this)\n})\n\nserver.decorateReply<(x: string) => void>('test', function (x: string): void {\n  expectType<FastifyReply>(this)\n})\nserver.decorateReply('test', function (x: string): void {\n  expectType<FastifyReply>(this)\n})\n\nexpectError(server.decorate<string>('test', true))\nexpectError(server.decorate<(myNumber: number) => number>('test', function (myNumber: number): string {\n  return ''\n}))\n\nconst versionConstraintStrategy = {\n  name: 'version',\n  storage: () => ({\n    get: () => () => {},\n    set: () => { },\n    del: () => { },\n    empty: () => { }\n  }),\n  validate () {},\n  deriveConstraint: () => 'foo'\n}\nexpectType<void>(server.addConstraintStrategy(versionConstraintStrategy))\nexpectType<boolean>(server.hasConstraintStrategy(versionConstraintStrategy.name))\n\nexpectType<boolean>(server.hasPlugin(''))\n\nexpectAssignable<DefaultRoute<RawRequestDefaultExpression, RawReplyDefaultExpression>>(server.getDefaultRoute())\n\nexpectType<FastifySchemaCompiler<any> | undefined>(server.validatorCompiler)\nexpectType<FastifySerializerCompiler<any> | undefined>(server.serializerCompiler)\n/docs/Reference/TypeScript.md\"<h1 align=\"center\">Fastify</h1>\n\n## TypeScript\n\nThe Fastify framework is written in vanilla JavaScript, and as such type\ndefinitions are not as easy to maintain; however, since version 2 and beyond,\nmaintainers and contributors have put in a great effort to improve the types.\n\nThe type system was changed in Fastify version 3. The new type system introduces\ngeneric constraining and defaulting, plus a new way to define schema types such\nas a request body, querystring, and more! As the team works on improving\nframework and type definition synergy, sometimes parts of the API will not be\ntyped or may be typed incorrectly. We encourage you to **contribute** to help us\nfill in the gaps. Just make sure to read our\n[`CONTRIBUTING.md`](https://github.com/fastify/fastify/blob/main/CONTRIBUTING.md)\nfile before getting started to make sure things go smoothly!\n\n> The documentation in this section covers Fastify version 3.x typings\n\n> Plugins may or may not include typings. See [Plugins](#plugins) for more\n> information. We encourage users to send pull requests to improve typings\n> support.\n\n🚨 Don't forget to install `@types/node`\n\n## Learn By Example\n\nThe best way to learn the Fastify type system is by example! The following four\nexamples should cover the most common Fastify development cases. After the\nexamples there is further, more detailed documentation for the type system.\n\n### Getting Started\n\nThis example will get you up and running with Fastify and TypeScript. It results\nin a blank http Fastify server.\n\n1. Create a new npm project, install Fastify, and install typescript & node.js\n   types as peer dependencies:\n  ```bash\n  npm init -y\n  npm i fastify\n  npm i -D typescript @types/node\n  ```\n2. Add the following lines to the `\"scripts\"` section of the `package.json`:\n  ```json\n  {\n    \"scripts\": {\n      \"build\": \"tsc -p tsconfig.json\",\n      \"start\": \"node index.js\"\n    }\n  }\n  ```\n\n3. Initialize a TypeScript configuration file:\n  ```bash\n  npx tsc --init\n  ```\n  or use one of the [recommended\n  ones](https://github.com/tsconfig/bases#node-14-tsconfigjson).\n\n*Note: Set `target` property in `tsconfig.json` to `es2017` or greater to avoid\n[FastifyDeprecation](https://github.com/fastify/fastify/issues/3284) warning.*\n\n*Note 2: Avoid using ```\"moduleResolution\": \"NodeNext\"``` in tsconfig.json with \n```\"type\": \"module\"``` in package.json. This combination is currently not \nsupported by fastify typing system.\n[ts(2349)](https://github.com/fastify/fastify/issues/4241) warning.*\n\n4. Create an `index.ts` file - this will contain the server code\n5. Add the following code block to your file:\n   ```typescript\n   import fastify from 'fastify'\n\n   const server = fastify()\n\n   server.get('/ping', async (request, reply) => {\n     return 'pong\\n'\n   })\n\n   server.listen({ port: 8080 }, (err, address) => {\n     if (err) {\n       console.error(err)\n       process.exit(1)\n     }\n     console.log(`Server listening at ${address}`)\n   })\n   ```\n6. Run `npm run build` - this will compile `index.ts` into `index.js` which can\n   be executed using Node.js. If you run into any errors please open an issue in\n   [fastify/help](https://github.com/fastify/help/)\n7. Run `npm run start` to run the Fastify server\n8. You should see `Server listening at http://127.0.0.1:8080` in your console\n9. Try out your server using `curl localhost:8080/ping`, it should return `pong`\n   🏓\n\n🎉 You now have a working Typescript Fastify server! This example demonstrates\nthe simplicity of the version 3.x type system. By default, the type system\nassumes you are using an `http` server. The later examples will demonstrate how\nto create more complex servers such as `https` and `http2`, how to specify route\nschemas, and more!\n\n> For more examples on initializing Fastify with TypeScript (such as enabling\n> HTTP2) check out the detailed API section [here][Fastify]\n\n### Using Generics\n\nThe type system heavily relies on generic properties to provide the most\naccurate development experience. While some may find the overhead a bit\ncumbersome, the tradeoff is worth it! This example will dive into implementing\ngeneric types for route schemas and the dynamic properties located on the\nroute-level `request` object.\n\n1. If you did not complete the previous example, follow steps 1-4 to get set up.\n2. Inside `index.ts`, define two interfaces `IQuerystring` and `IHeaders`:\n   ```typescript\n   interface IQuerystring {\n     username: string;\n     password: string;\n   }\n\n   interface IHeaders {\n     'h-Custom': string;\n   }\n   ```\n3. Using the two interfaces, define a new API route and pass them as generics.\n   The shorthand route methods (i.e. `.get`) accept a generic object\n   `RouteGenericInterface` containing five named properties: `Body`,\n   `Querystring`, `Params`, `Headers` and `Reply`. The interfaces `Body`,\n   `Querystring`, `Params` and `Headers` will be passed down through the route\n   method into the route method handler `request` instance and the `Reply`\n   interface to the `reply` instance.\n   ```typescript\n   server.get<{\n     Querystring: IQuerystring,\n     Headers: IHeaders\n   }>('/auth', async (request, reply) => {\n     const { username, password } = request.query\n     const customerHeader = request.headers['h-Custom']\n     // do something with request data\n\n     return `logged in!`\n   })\n   ```\n\n4. Build and run the server code with `npm run build` and `npm run start`\n5. Query the api\n   ```bash\n   curl localhost:8080/auth?username=admin&password=Password123!\n   ```\n   And it should return back `logged in!`\n6. But wait there's more! The generic interfaces are also available inside route\n   level hook methods. Modify the previous route by adding a `preValidation`\n   hook:\n   ```typescript\n   server.get<{\n     Querystring: IQuerystring,\n     Headers: IHeaders\n   }>('/auth', {\n     preValidation: (request, reply, done) => {\n       const { username, password } = request.query\n       done(username !== 'admin' ? new Error('Must be admin') : undefined) // only validate `admin` account\n     }\n   }, async (request, reply) => {\n     const customerHeader = request.headers['h-Custom']\n     // do something with request data\n     return `logged in!`\n   })\n   ```\n7. Build and run and query with the `username` query string option set to\n   anything other than `admin`. The API should now return a HTTP 500 error\n   `{\"statusCode\":500,\"error\":\"Internal Server Error\",\"message\":\"Must be\n   admin\"}`\n\n🎉 Good work, now you can define interfaces for each route and have strictly\ntyped request and reply instances. Other parts of the Fastify type system rely\non generic properties. Make sure to reference the detailed type system\ndocumentation below to learn more about what is available.\n\n### JSON Schema\n\nTo validate your requests and responses you can use JSON Schema files. If you\ndidn't know already, defining schemas for your Fastify routes can increase their\nthroughput! Check out the [Validation and\nSerialization](./Validation-and-Serialization.md) documentation for more info.\n\nAlso it has the advantage to use the defined type within your handlers\n(including pre-validation, etc.).\n\nHere are some options how to achieve this.\n\n#### Fastify Type Providers\n\nFastify offers two packages wrapping `json-schema-to-ts` and `typebox`:\n\n- `@fastify/type-provider-json-schema-to-ts`\n- `@fastify/type-provider-typebox`\n\nThey simplify schema validation setup and you can read more about them in [Type\nProviders](./Type-Providers.md) page.\n\nBelow is how to setup schema validation using vanilla `typebox` and\n`json-schema-to-ts` packages.\n\n#### typebox\n\nA useful library for building types and a schema at once is\n[typebox](https://www.npmjs.com/package/@sinclair/typebox) along with \n[fastify-type-provider-typebox](https://github.com/fastify/fastify-type-provider-typebox).\nWith typebox you define your schema within your code and use them\ndirectly as types or schemas as you need them.\n\nWhen you want to use it for validation of some payload in a fastify route you\ncan do it as follows:\n\n1. Install `typebox` and `fastify-type-provider-typebox` in your project.\n\n    ```bash\n    npm i @sinclair/typebox @fastify/type-provider-typebox\n    ```\n\n2. Define the schema you need with `Type` and create the respective type  with\n   `Static`.\n\n    ```typescript\n    import { Static, Type } from '@sinclair/typebox'\n\n    export const User = Type.Object({\n      name: Type.String(),\n      mail: Type.Optional(Type.String({ format: 'email' })),\n    })\n\n    export type UserType = Static<typeof User>\n    ```\n\n3. Use the defined type and schema during the definition of your route\n\n    ```typescript\n    import Fastify from 'fastify'\n    import { TypeBoxTypeProvider } from '@fastify/type-provider-typebox'\n    // ...\n\n    const fastify = Fastify().withTypeProvider<TypeBoxTypeProvider>()\n\n    app.post<{ Body: UserType, Reply: UserType }>(\n      '/',\n      {\n        schema: {\n          body: User,\n          response: {\n            200: User\n          },\n        },\n      },\n      (request, reply) => {\n        // The `name` and `mail` types are automatically inferred\n        const { name, mail } = request.body;\n        reply.status(200).send({ name, mail });\n      }\n    )\n    ```\n\n\n#### Schemas in JSON Files\n\nIn the last example we used interfaces to define the types for the request\nquerystring and headers. Many users will already be using JSON Schemas to define\nthese properties, and luckily there is a way to transform existing JSON Schemas\ninto TypeScript interfaces!\n\n1. If you did not complete the 'Getting Started' example, go back and follow\n   steps 1-4 first.\n2. Install the `json-schema-to-typescript` module:\n\n   ```bash\n   npm i -D json-schema-to-typescript\n   ```\n\n3. Create a new folder called `schemas` and add two files `headers.json` and\n   `querystring.json`. Copy and paste the following schema definitions into the\n   respective files:\n\n   ```json\n   {\n     \"title\": \"Headers Schema\",\n     \"type\": \"object\",\n     \"properties\": {\n       \"h-Custom\": { \"type\": \"string\" }\n     },\n     \"additionalProperties\": false,\n     \"required\": [\"h-Custom\"]\n   }\n   ```\n\n   ```json\n   {\n     \"title\": \"Querystring Schema\",\n     \"type\": \"object\",\n     \"properties\": {\n       \"username\": { \"type\": \"string\" },\n       \"password\": { \"type\": \"string\" }\n     },\n     \"additionalProperties\": false,\n     \"required\": [\"username\", \"password\"]\n   }\n   ```\n\n4. Add a `compile-schemas` script to the package.json:\n\n```json\n   {\n     \"scripts\": {\n       \"compile-schemas\": \"json2ts -i schemas -o types\"\n     }\n   }\n```\n\n   `json2ts` is a CLI utility included in `json-schema-to-typescript`. `schemas`\n   is the input path, and `types` is the output path.\n5. Run `npm run compile-schemas`. Two new files should have been created in the\n   `types` directory.\n6. Update `index.ts` to have the following code:\n\n```typescript\n   import fastify from 'fastify'\n\n   // import json schemas as normal\n   import QuerystringSchema from './schemas/querystring.json'\n   import HeadersSchema from './schemas/headers.json'\n\n   // import the generated interfaces\n   import { QuerystringSchema as QuerystringSchemaInterface } from './types/querystring'\n   import { HeadersSchema as HeadersSchemaInterface } from './types/headers'\n\n   const server = fastify()\n\n   server.get<{\n     Querystring: QuerystringSchemaInterface,\n     Headers: HeadersSchemaInterface\n   }>('/auth', {\n     schema: {\n       querystring: QuerystringSchema,\n       headers: HeadersSchema\n     },\n     preValidation: (request, reply, done) => {\n       const { username, password } = request.query\n       done(username !== 'admin' ? new Error('Must be admin') : undefined)\n     }\n     //  or if using async\n     //  preValidation: async (request, reply) => {\n     //    const { username, password } = request.query\n     //    if (username !== \"admin\") throw new Error(\"Must be admin\");\n     //  }\n   }, async (request, reply) => {\n     const customerHeader = request.headers['h-Custom']\n     // do something with request data\n     return `logged in!`\n   })\n\n   server.route<{\n     Querystring: QuerystringSchemaInterface,\n     Headers: HeadersSchemaInterface\n   }>({\n     method: 'GET',\n     url: '/auth2',\n     schema: {\n       querystring: QuerystringSchema,\n       headers: HeadersSchema\n     },\n     preHandler: (request, reply, done) => {\n       const { username, password } = request.query\n       const customerHeader = request.headers['h-Custom']\n       done()\n     },\n     handler: (request, reply) => {\n       const { username, password } = request.query\n       const customerHeader = request.headers['h-Custom']\n       reply.status(200).send({username});\n     }\n   })\n\n   server.listen({ port: 8080 }, (err, address) => {\n     if (err) {\n       console.error(err)\n       process.exit(0)\n     }\n     console.log(`Server listening at ${address}`)\n   })\n   ```\n   Pay special attention to the imports at the top of this file. It might seem\n   redundant, but you need to import both the schema files and the generated\n   interfaces.\n\nGreat work! Now you can make use of both JSON Schemas and TypeScript\ndefinitions.\n\n#### json-schema-to-ts\n\nIf you do not want to generate types from your schemas, but want to use them\ndirectly from your code, you can use the package\n[json-schema-to-ts](https://www.npmjs.com/package/json-schema-to-ts).\n\nYou can install it as dev-dependency.\n\n```bash\nnpm i -D json-schema-to-ts\n```\n\nIn your code you can define your schema like a normal object. But be aware of\nmaking it *const* like explained in the docs of the module.\n\n```typescript\nconst todo = {\n  type: 'object',\n  properties: {\n    name: { type: 'string' },\n    description: { type: 'string' },\n    done: { type: 'boolean' },\n  },\n  required: ['name'],\n} as const; // don't forget to use const !\n```\n\nWith the provided type `FromSchema` you can build a type from your schema and\nuse it in your handler.\n\n```typescript\nimport { FromSchema } from \"json-schema-to-ts\";\nfastify.post<{ Body: FromSchema<typeof todo> }>(\n  '/todo',\n  {\n    schema: {\n      body: todo,\n      response: {\n        201: {\n          type: 'string',\n        },\n      },\n    }\n  },\n  async (request, reply): Promise<void> => {\n\n    /*\n    request.body has type\n    {\n      [x: string]: unknown;\n      description?: string;\n      done?: boolean;\n      name: string;\n    }\n    */\n\n    request.body.name // will not throw type error\n    request.body.notthere // will throw type error\n\n    reply.status(201).send();\n  },\n);\n```\n\n### Plugins\n\nOne of Fastify's most distinguishable features is its extensive plugin\necosystem. Plugin types are fully supported, and take advantage of the\n[declaration\nmerging](https://www.typescriptlang.org/docs/handbook/declaration-merging.html)\npattern. This example is broken up into three parts: Creating a TypeScript\nFastify Plugin, Creating Type Definitions for a Fastify Plugin, and Using a\nFastify Plugin in a TypeScript Project.\n\n#### Creating a TypeScript Fastify Plugin\n\n1. Initialize a new npm project and install required dependencies\n   ```bash\n   npm init -y\n   npm i fastify fastify-plugin\n   npm i -D typescript @types/node\n   ```\n2. Add a `build` script to the `\"scripts\"` section and `'index.d.ts'` to the\n   `\"types\"` section of the `package.json` file:\n   ```json\n   {\n     \"types\": \"index.d.ts\",\n     \"scripts\": {\n       \"build\": \"tsc -p tsconfig.json\"\n     }\n   }\n   ```\n3. Initialize a TypeScript configuration file:\n   ```bash\n   npx typescript --init\n   ```\n   Once the file is generated, enable the `\"declaration\"` option in the\n   `\"compilerOptions\"` object.\n   ```json\n   {\n     \"compileOptions\": {\n       \"declaration\": true\n     }\n   }\n   ```\n4. Create an `index.ts` file - this will contain the plugin code\n5. Add the following code to `index.ts`\n   ```typescript\n   import { FastifyPluginCallback, FastifyPluginAsync } from 'fastify'\n   import fp from 'fastify-plugin'\n\n   // using declaration merging, add your plugin props to the appropriate fastify interfaces\n   // if prop type is defined here, the value will be typechecked when you call decorate{,Request,Reply}\n   declare module 'fastify' {\n     interface FastifyRequest {\n       myPluginProp: string\n     }\n     interface FastifyReply {\n       myPluginProp: number\n     }\n   }\n\n   // define options\n   export interface MyPluginOptions {\n     myPluginOption: string\n   }\n\n   // define plugin using callbacks\n   const myPluginCallback: FastifyPluginCallback<MyPluginOptions> = (fastify, options, done) => {\n     fastify.decorateRequest('myPluginProp', 'super_secret_value')\n     fastify.decorateReply('myPluginProp', options.myPluginOption)\n\n     done()\n   }\n\n   // define plugin using promises\n   const myPluginAsync: FastifyPluginAsync<MyPluginOptions> = async (fastify, options) => {\n     fastify.decorateRequest('myPluginProp', 'super_secret_value')\n     fastify.decorateReply('myPluginProp', options.myPluginOption)\n   }\n\n   // export plugin using fastify-plugin\n   export default fp(myPluginCallback, '3.x')\n   // or\n   // export default fp(myPluginAsync, '3.x')\n   ```\n6. Run `npm run build` to compile the plugin code and produce both a JavaScript\n   source file and a type definition file.\n7. With the plugin now complete you can [publish to npm] or use it locally.\n   > You do not _need_ to publish your plugin to npm to use it. You can include\n   > it in a Fastify project and reference it as you would any piece of code! As\n   > a TypeScript user, make sure the declaration override exists somewhere that\n   > will be included in your project compilation so the TypeScript interpreter\n   > can process it.\n\n#### Creating Type Definitions for a Fastify Plugin\n\nThis plugin guide is for Fastify plugins written in JavaScript. The steps\noutlined in this example are for adding TypeScript support for users consuming\nyour plugin.\n\n1. Initialize a new npm project and install required dependencies\n   ```bash\n   npm init -y\n   npm i fastify-plugin\n   ```\n2. Create two files `index.js` and `index.d.ts`\n3. Modify the package json to include these files under the `main` and `types`\n   properties (the name does not have to be `index` explicitly, but it is\n   recommended the files have the same name):\n   ```json\n   {\n     \"main\": \"index.js\",\n     \"types\": \"index.d.ts\"\n   }\n   ```\n4. Open `index.js` and add the following code:\n   ```javascript\n   // fastify-plugin is highly recommended for any plugin you write\n   const fp = require('fastify-plugin')\n\n   function myPlugin (instance, options, done) {\n\n     // decorate the fastify instance with a custom function called myPluginFunc\n     instance.decorate('myPluginFunc', (input) => {\n       return input.toUpperCase()\n     })\n\n     done()\n   }\n\n   module.exports = fp(myPlugin, {\n     fastify: '3.x',\n     name: 'my-plugin' // this is used by fastify-plugin to derive the property name\n   })\n   ```\n5. Open `index.d.ts` and add the following code:\n   ```typescript\n   import { FastifyPlugin } from 'fastify'\n\n   interface PluginOptions {\n     //...\n   }\n\n   // Optionally, you can add any additional exports.\n   // Here we are exporting the decorator we added.\n   export interface myPluginFunc {\n     (input: string): string\n   }\n\n   // Most importantly, use declaration merging to add the custom property to the Fastify type system\n   declare module 'fastify' {\n     interface FastifyInstance {\n       myPluginFunc: myPluginFunc\n     }\n   }\n\n   // fastify-plugin automatically adds named export, so be sure to add also this type\n   // the variable name is derived from `options.name` property if `module.exports.myPlugin` is missing\n   export const myPlugin: FastifyPlugin<PluginOptions>\n\n   // fastify-plugin automatically adds `.default` property to the exported plugin. See the note below\n   export default myPlugin\n   ```\n\n__Note__: [fastify-plugin](https://github.com/fastify/fastify-plugin) v2.3.0 and\nnewer, automatically adds `.default` property and a named export to the exported\nplugin. Be sure to `export default` and `export const myPlugin` in your typings\nto provide the best developer experience. For a complete example you can check\nout\n[@fastify/swagger](https://github.com/fastify/fastify-swagger/blob/master/index.d.ts).\n\nWith those files completed, the plugin is now ready to be consumed by any\nTypeScript project!\n\nThe Fastify plugin system enables developers to decorate the Fastify instance,\nand the request/reply instances. For more information check out this blog post\non [Declaration Merging and Generic\nInheritance](https://dev.to/ethanarrowood/is-declaration-merging-and-generic-inheritance-at-the-same-time-impossible-53cp).\n\n#### Using a Plugin\n\nUsing a Fastify plugin in TypeScript is just as easy as using one in JavaScript.\nImport the plugin with `import/from` and you're all set -- except there is one\nexception users should be aware of.\n\nFastify plugins use declaration merging to modify existing Fastify type\ninterfaces (check out the previous two examples for more details). Declaration\nmerging is not very _smart_, meaning if the plugin type definition for a plugin\nis within the scope of the TypeScript interpreter, then the plugin types will be\nincluded **regardless** of if the plugin is being used or not. This is an\nunfortunate limitation of using TypeScript and is unavoidable as of right now.\n\nHowever, there are a couple of suggestions to help improve this experience:\n- Make sure the `no-unused-vars` rule is enabled in\n  [ESLint](https://eslint.org/docs/rules/no-unused-vars) and any imported plugin\n  are actually being loaded.\n- Use a module such as [depcheck](https://www.npmjs.com/package/depcheck) or\n  [npm-check](https://www.npmjs.com/package/npm-check) to verify plugin\n  dependencies are being used somewhere in your project.\n\nNote that using `require` will not load the type definitions properly and may\ncause type errors.\nTypeScript can only identify the types that are directly imported into code,\nwhich means that you can use require inline with import on top. For example:\n\n```typescript\nimport 'plugin' // here will trigger the type augmentation.\n\nfastify.register(require('plugin'))\n```\n\n```typescript\nimport plugin from 'plugin' //  here will trigger the type augmentation.\n\nfastify.register(plugin)\n```\n\nOr even explicit config on tsconfig\n```jsonc\n{\n  \"types\": [\"plugin\"] // we force TypeScript to import the types\n}\n```\n\n## Code Completion In Vanilla JavaScript\n\nVanilla JavaScript can use the published types to provide code completion (e.g.\n[Intellisense](https://code.visualstudio.com/docs/editor/intellisense)) by\nfollowing the [TypeScript JSDoc\nReference](https://www.typescriptlang.org/docs/handbook/jsdoc-supported-types.html).\n\nFor example:\n\n```js\n/**  @type {import('fastify').FastifyPluginAsync<{ optionA: boolean, optionB: string }>} */\nmodule.exports = async function (fastify, { optionA, optionB }) {\n  fastify.get('/look', () => 'at me');\n}\n```\n\n## API Type System Documentation\n\nThis section is a detailed account of all the types available to you in Fastify\nversion 3.x\n\nAll `http`, `https`, and `http2` types are inferred from `@types/node`\n\n[Generics](#generics) are documented by their default value as well as their\nconstraint value(s). Read these articles for more information on TypeScript\ngenerics.\n- [Generic Parameter\n  Default](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-3.html#generic-parameter-defaults)\n- [Generic\n  Constraints](https://www.typescriptlang.org/docs/handbook/generics.html#generic-constraints)\n\n#### How to import\n\nThe Fastify API is powered by the `fastify()` method. In JavaScript you would\nimport it using `const fastify = require('fastify')`. In TypeScript it is\nrecommended to use the `import/from` syntax instead so types can be resolved.\nThere are a couple supported import methods with the Fastify type system.\n\n1. `import fastify from 'fastify'`\n   - Types are resolved but not accessible using dot notation\n   - Example:\n     ```typescript\n     import fastify from 'fastify'\n\n     const f = fastify()\n     f.listen({ port: 8080 }, () => { console.log('running') })\n     ```\n   - Gain access to types with destructuring:\n     ```typescript\n     import fastify, { FastifyInstance } from 'fastify'\n\n     const f: FastifyInstance = fastify()\n     f.listen({ port: 8080 }, () => { console.log('running') })\n     ```\n   - Destructuring also works for the main API method:\n     ```typescript\n     import { fastify, FastifyInstance } from 'fastify'\n\n     const f: FastifyInstance = fastify()\n     f.listen({ port: 8080 }, () => { console.log('running') })\n     ```\n2. `import * as Fastify from 'fastify'`\n   - Types are resolved and accessible using dot notation\n   - Calling the main Fastify API method requires a slightly different syntax\n     (see example)\n   - Example:\n     ```typescript\n     import * as Fastify from 'fastify'\n\n     const f: Fastify.FastifyInstance = Fastify.fastify()\n     f.listen({ port: 8080 }, () => { console.log('running') })\n     ```\n3. `const fastify = require('fastify')`\n   - This syntax is valid and will import fastify as expected; however, types\n     will **not** be resolved\n   - Example:\n     ```typescript\n     const fastify = require('fastify')\n\n     const f = fastify()\n     f.listen({ port: 8080 }, () => { console.log('running') })\n     ```\n   - Destructuring is supported and will resolve types properly\n     ```typescript\n     const { fastify } = require('fastify')\n\n     const f = fastify()\n     f.listen({ port: 8080 }, () => { console.log('running') })\n     ```\n\n#### Generics\n\nMany type definitions share the same generic parameters; they are all\ndocumented, in detail, within this section.\n\nMost definitions depend on `@node/types` modules `http`, `https`, and `http2`\n\n##### RawServer\nUnderlying Node.js server type\n\nDefault: `http.Server`\n\nConstraints: `http.Server`, `https.Server`, `http2.Http2Server`,\n`http2.Http2SecureServer`\n\nEnforces generic parameters: [`RawRequest`][RawRequestGeneric],\n[`RawReply`][RawReplyGeneric]\n\n##### RawRequest\nUnderlying Node.js request type\n\nDefault: [`RawRequestDefaultExpression`][RawRequestDefaultExpression]\n\nConstraints: `http.IncomingMessage`, `http2.Http2ServerRequest`\n\nEnforced by: [`RawServer`][RawServerGeneric]\n\n##### RawReply\nUnderlying Node.js response type\n\nDefault: [`RawReplyDefaultExpression`][RawReplyDefaultExpression]\n\nConstraints: `http.ServerResponse`, `http2.Http2ServerResponse`\n\nEnforced by: [`RawServer`][RawServerGeneric]\n\n##### Logger\nFastify logging utility\n\nDefault: [`FastifyLoggerOptions`][FastifyLoggerOptions]\n\nEnforced by: [`RawServer`][RawServerGeneric]\n\n##### RawBody\nA generic parameter for the content-type-parser methods.\n\nConstraints: `string | Buffer`\n\n---\n\n#### Fastify\n\n##### fastify<[RawServer][RawServerGeneric], [RawRequest][RawRequestGeneric], [RawReply][RawReplyGeneric], [Logger][LoggerGeneric]>(opts?: [FastifyServerOptions][FastifyServerOptions]): [FastifyInstance][FastifyInstance]\n[src](https://github.com/fastify/fastify/blob/main/fastify.d.ts#L19)\n\nThe main Fastify API method. By default creates an HTTP server. Utilizing\ndiscriminant unions and overload methods, the type system will automatically\ninfer which type of server (http, https, or http2) is being created purely based\non the options based to the method (see the examples below for more\ninformation). It also supports an extensive generic type system to allow the\nuser to extend the underlying Node.js Server, Request, and Reply objects.\nAdditionally, the `Logger` generic exists for custom log types. See the examples\nand generic breakdown below for more information.\n\n###### Example 1: Standard HTTP server\n\nNo need to specify the `Server` generic as the type system defaults to HTTP.\n```typescript\nimport fastify from 'fastify'\n\nconst server = fastify()\n```\nCheck out the Learn By Example - [Getting Started](#getting-started) example for\na more detailed http server walkthrough.\n\n###### Example 2: HTTPS server\n\n1. Create the following imports from `@types/node` and `fastify`\n   ```typescript\n   import fs from 'fs'\n   import path from 'path'\n   import fastify from 'fastify'\n   ```\n2. Follow the steps in this official [Node.js https server\n   guide](https://nodejs.org/en/knowledge/HTTP/servers/how-to-create-a-HTTPS-server/)\n   to create the `key.pem` and `cert.pem` files\n3. Instantiate a Fastify https server and add a route:\n   ```typescript\n   const server = fastify({\n     https: {\n       key: fs.readFileSync(path.join(__dirname, 'key.pem')),\n       cert: fs.readFileSync(path.join(__dirname, 'cert.pem'))\n     }\n   })\n\n   server.get('/', async function (request, reply) {\n     return { hello: 'world' }\n   })\n\n   server.listen({ port: 8080 }, (err, address) => {\n     if (err) {\n       console.error(err)\n       process.exit(0)\n     }\n     console.log(`Server listening at ${address}`)\n   })\n   ```\n4. Build and run! Test your server out by querying with: `curl -k\n   https://localhost:8080`\n\n###### Example 3: HTTP2 server\n\nThere are two types of HTTP2 server types, insecure and secure. Both require\nspecifying the `http2` property as `true` in the `options` object. The `https`\nproperty is used for creating a secure http2 server; omitting the `https`\nproperty will create an insecure http2 server.\n\n```typescript\nconst insecureServer = fastify({ http2: true })\nconst secureServer = fastify({\n  http2: true,\n  https: {} // use the `key.pem` and `cert.pem` files from the https section\n})\n```\n\nFor more details on using HTTP2 check out the Fastify [HTTP2](./HTTP2.md)\ndocumentation page.\n\n###### Example 4: Extended HTTP server\n\nNot only can you specify the server type, but also the request and reply types.\nThus, allowing you to specify special properties, methods, and more! When\nspecified at server instantiation, the custom type becomes available on all\nfurther instances of the custom type.\n```typescript\nimport fastify from 'fastify'\nimport http from 'http'\n\ninterface customRequest extends http.IncomingMessage {\n  mySpecialProp: string\n}\n\nconst server = fastify<http.Server, customRequest>()\n\nserver.get('/', async (request, reply) => {\n  const someValue = request.raw.mySpecialProp // TS knows this is a string, because of the `customRequest` interface\n  return someValue.toUpperCase()\n})\n```\n\n###### Example 5: Specifying logger types\n\nFastify uses [Pino](https://getpino.io/#/) logging library under the hood. Since\n`pino@7`, all of it's properties can be configured via `logger` field when\nconstructing Fastify's instance. If properties you need aren't exposed, please\nopen an Issue to [`Pino`](https://github.com/pinojs/pino/issues) or pass a\npreconfigured external instance of Pino (or any other compatible logger) as\ntemporary fix to Fastify via the same field. This allows creating custom\nserializers as well, see the [Logging](Logging.md) documentation for more info.\n\n```typescript\nimport fastify from 'fastify'\n\nconst server = fastify({\n  logger: {\n    level: 'info',\n    redact: ['x-userinfo'],\n    messageKey: 'message'\n  }\n})\n\nserver.get('/', async (request, reply) => {\n  server.log.info('log message')\n  return 'another message'\n})\n```\n\n---\n\n##### fastify.HTTPMethods\n[src](https://github.com/fastify/fastify/blob/main/types/utils.d.ts#L8)\n\nUnion type of: `'DELETE' | 'GET' | 'HEAD' | 'PATCH' | 'POST' | 'PUT' |\n'OPTIONS'`\n\n##### fastify.RawServerBase\n[src](https://github.com/fastify/fastify/blob/main/types/utils.d.ts#L13)\n\nDependant on `@types/node` modules `http`, `https`, `http2`\n\nUnion type of: `http.Server | https.Server | http2.Http2Server |\nhttp2.Http2SecureServer`\n\n##### fastify.RawServerDefault\n[src](https://github.com/fastify/fastify/blob/main/types/utils.d.ts#L18)\n\nDependant on `@types/node` modules `http`\n\nType alias for `http.Server`\n\n---\n\n##### fastify.FastifyServerOptions<[RawServer][RawServerGeneric], [Logger][LoggerGeneric]>\n\n[src](https://github.com/fastify/fastify/blob/main/fastify.d.ts#L29)\n\nAn interface of properties used in the instantiation of the Fastify server. Is\nused in the main [`fastify()`][Fastify] method. The `RawServer` and `Logger`\ngeneric parameters are passed down through that method.\n\nSee the main [fastify][Fastify] method type definition section for examples on\ninstantiating a Fastify server with TypeScript.\n\n##### fastify.FastifyInstance<[RawServer][RawServerGeneric], [RawRequest][RawRequestGeneric], [RequestGeneric][FastifyRequestGenericInterface], [Logger][LoggerGeneric]>\n\n[src](https://github.com/fastify/fastify/blob/main/types/instance.d.ts#L16)\n\nInterface that represents the Fastify server object. This is the returned server\ninstance from the [`fastify()`][Fastify] method. This type is an interface so it\ncan be extended via [declaration\nmerging](https://www.typescriptlang.org/docs/handbook/declaration-merging.html)\nif your code makes use of the `decorate` method.\n\nThrough the use of generic cascading, all methods attached to the instance\ninherit the generic properties from instantiation. This means that by specifying\nthe server, request, or reply types, all methods will know how to type those\nobjects.\n\nCheck out the main [Learn by Example](#learn-by-example) section for detailed\nguides, or the more simplified [fastify][Fastify] method examples for additional\ndetails on this interface.\n\n---\n\n#### Request\n\n##### fastify.FastifyRequest<[RequestGeneric][FastifyRequestGenericInterface], [RawServer][RawServerGeneric], [RawRequest][RawRequestGeneric]>\n[src](https://github.com/fastify/fastify/blob/main/types/request.d.ts#L15)\n\nThis interface contains properties of Fastify request object. The properties\nadded here disregard what kind of request object (http vs http2) and disregard\nwhat route level it is serving; thus calling `request.body` inside a GET request\nwill not throw an error (but good luck sending a GET request with a body 😉).\n\nIf you need to add custom properties to the `FastifyRequest` object (such as\nwhen using the [`decorateRequest`][DecorateRequest] method) you need to use\ndeclaration merging on this interface.\n\nA basic example is provided in the [`FastifyRequest`][FastifyRequest] section.\nFor a more detailed example check out the Learn By Example section:\n[Plugins](#plugins)\n\n###### Example\n```typescript\nimport fastify from 'fastify'\n\nconst server = fastify()\n\nserver.decorateRequest('someProp', 'hello!')\n\nserver.get('/', async (request, reply) => {\n  const { someProp } = request // need to use declaration merging to add this prop to the request interface\n  return someProp\n})\n\n// this declaration must be in scope of the typescript interpreter to work\ndeclare module 'fastify' {\n  interface FastifyRequest { // you must reference the interface and not the type\n    someProp: string\n  }\n}\n\n// Or you can type your request using\ntype CustomRequest = FastifyRequest<{\n  Body: { test: boolean };\n}>\n\nserver.get('/typedRequest', async (request: CustomRequest, reply: FastifyReply) => {\n  return request.body.test\n})\n```\n\n##### fastify.RequestGenericInterface\n[src](https://github.com/fastify/fastify/blob/main/types/request.d.ts#L4)\n\nFastify request objects have four dynamic properties: `body`, `params`, `query`,\nand `headers`. Their respective types are assignable through this interface. It\nis a named property interface enabling the developer to ignore the properties\nthey do not want to specify. All omitted properties are defaulted to `unknown`.\nThe corresponding property names are: `Body`, `Querystring`, `Params`,\n`Headers`.\n\n```typescript\nimport fastify, { RequestGenericInterface } from 'fastify'\n\nconst server = fastify()\n\ninterface requestGeneric extends RequestGenericInterface {\n  Querystring: {\n    name: string\n  }\n}\n\nserver.get<requestGeneric>('/', async (request, reply) => {\n  const { name } = request.query // the name prop now exists on the query prop\n  return name.toUpperCase()\n})\n```\n\nIf you want to see a detailed example of using this interface check out the\nLearn by Example section: [JSON Schema](#jsonschema).\n\n##### fastify.RawRequestDefaultExpression\\<[RawServer][RawServerGeneric]\\>\n[src](https://github.com/fastify/fastify/blob/main/types/utils.d.ts#L23)\n\nDependant on `@types/node` modules `http`, `https`, `http2`\n\nGeneric parameter `RawServer` defaults to [`RawServerDefault`][RawServerDefault]\n\nIf `RawServer` is of type `http.Server` or `https.Server`, then this expression\nreturns `http.IncomingMessage`, otherwise, it returns\n`http2.Http2ServerRequest`.\n\n```typescript\nimport http from 'http'\nimport http2 from 'http2'\nimport { RawRequestDefaultExpression } from 'fastify'\n\nRawRequestDefaultExpression<http.Server> // -> http.IncomingMessage\nRawRequestDefaultExpression<http2.Http2Server> // -> http2.Http2ServerRequest\n```\n\n---\n\n#### Reply\n\n##### fastify.FastifyReply<[RawServer][RawServerGeneric], [RawRequest][RawRequestGeneric], [RawReply][RawReplyGeneric], [RequestGeneric][FastifyRequestGenericInterface], [ContextConfig][ContextConfigGeneric]>\n[src](https://github.com/fastify/fastify/blob/main/types/reply.d.ts#L32)\n\nThis interface contains the custom properties that Fastify adds to the standard\nNode.js reply object. The properties added here disregard what kind of reply\nobject (http vs http2).\n\nIf you need to add custom properties to the FastifyReply object (such as when\nusing the `decorateReply` method) you need to use declaration merging on this\ninterface.\n\nA basic example is provided in the [`FastifyReply`][FastifyReply] section. For a\nmore detailed example check out the Learn By Example section:\n[Plugins](#plugins)\n\n###### Example\n```typescript\nimport fastify from 'fastify'\n\nconst server = fastify()\n\nserver.decorateReply('someProp', 'world')\n\nserver.get('/', async (request, reply) => {\n  const { someProp } = reply // need to use declaration merging to add this prop to the reply interface\n  return someProp\n})\n\n// this declaration must be in scope of the typescript interpreter to work\ndeclare module 'fastify' {\n  interface FastifyReply { // you must reference the interface and not the type\n    someProp: string\n  }\n}\n```\n\n##### fastify.RawReplyDefaultExpression<[RawServer][RawServerGeneric]>\n[src](https://github.com/fastify/fastify/blob/main/types/utils.d.ts#L27)\n\nDependant on `@types/node` modules `http`, `https`, `http2`\n\nGeneric parameter `RawServer` defaults to [`RawServerDefault`][RawServerDefault]\n\nIf `RawServer` is of type `http.Server` or `https.Server`, then this expression\nreturns `http.ServerResponse`, otherwise, it returns\n`http2.Http2ServerResponse`.\n\n```typescript\nimport http from 'http'\nimport http2 from 'http2'\nimport { RawReplyDefaultExpression } from 'fastify'\n\nRawReplyDefaultExpression<http.Server> // -> http.ServerResponse\nRawReplyDefaultExpression<http2.Http2Server> // -> http2.Http2ServerResponse\n```\n\n---\n\n#### Plugin\n\nFastify allows the user to extend its functionalities with plugins. A plugin can\nbe a set of routes, a server decorator or whatever. To activate plugins, use the\n[`fastify.register()`][FastifyRegister] method.\n\nWhen creating plugins for Fastify, it is recommended to use the `fastify-plugin`\nmodule. Additionally, there is a guide to creating plugins with TypeScript and\nFastify available in the Learn by Example, [Plugins](#plugins) section.\n\n##### fastify.FastifyPluginCallback<[Options][FastifyPluginOptions]>\n[src](https://github.com/fastify/fastify/blob/main/types/plugin.d.ts#L9)\n\nInterface method definition used within the\n[`fastify.register()`][FastifyRegister] method.\n\n##### fastify.FastifyPluginAsync<[Options][FastifyPluginOptions]>\n[src](https://github.com/fastify/fastify/blob/main/types/plugin.d.ts#L20)\n\nInterface method definition used within the\n[`fastify.register()`][FastifyRegister] method.\n\n##### fastify.FastifyPlugin<[Options][FastifyPluginOptions]>\n[src](https://github.com/fastify/fastify/blob/main/types/plugin.d.ts#L29)\n\nInterface method definition used within the\n[`fastify.register()`][FastifyRegister] method. Document deprecated in favor of\n`FastifyPluginCallback` and `FastifyPluginAsync` since general `FastifyPlugin`\ndoesn't properly infer types for async functions.\n\n##### fastify.FastifyPluginOptions\n[src](https://github.com/fastify/fastify/blob/main/types/plugin.d.ts#L31)\n\nA loosely typed object used to constrain the `options` parameter of\n[`fastify.register()`][FastifyRegister] to an object. When creating a plugin,\ndefine its options as an extension of this interface (`interface MyPluginOptions\nextends FastifyPluginOptions`) so they can be passed to the register method.\n\n---\n\n#### Register\n\n##### fastify.FastifyRegister(plugin: [FastifyPluginCallback][FastifyPluginCallback], opts: [FastifyRegisterOptions][FastifyRegisterOptions])\n[src](https://github.com/fastify/fastify/blob/main/types/register.d.ts#L9)\n##### fastify.FastifyRegister(plugin: [FastifyPluginAsync][FastifyPluginAsync], opts: [FastifyRegisterOptions][FastifyRegisterOptions])\n[src](https://github.com/fastify/fastify/blob/main/types/register.d.ts#L9)\n##### fastify.FastifyRegister(plugin: [FastifyPlugin][FastifyPlugin], opts: [FastifyRegisterOptions][FastifyRegisterOptions])\n[src](https://github.com/fastify/fastify/blob/main/types/register.d.ts#L9)\n\nThis type interface specifies the type for the\n[`fastify.register()`](./Server.md#register) method. The type interface returns\na function signature with an underlying generic `Options` which is defaulted to\n[FastifyPluginOptions][FastifyPluginOptions]. It infers this generic from the\nFastifyPlugin parameter when calling this function so there is no need to\nspecify the underlying generic. The options parameter is the intersection of the\nplugin's options and two additional optional properties: `prefix: string` and\n`logLevel`: [LogLevel][LogLevel].\n\nBelow is an example of the options inference in action:\n\n```typescript\nconst server = fastify()\n\nconst plugin: FastifyPlugin<{\n  option1: string;\n  option2: boolean;\n}> = function (instance, opts, done) { }\n\nserver().register(plugin, {}) // Error - options object is missing required properties\nserver().register(plugin, { option1: '', option2: true }) // OK - options object contains required properties\n```\n\nSee the Learn By Example, [Plugins](#plugins) section for more detailed examples\nof creating TypeScript plugins in Fastify.\n\n##### fastify.FastifyRegisterOptions\n[src](https://github.com/fastify/fastify/blob/main/types/register.d.ts#L16)\n\nThis type is the intersection of the `Options` generic and a non-exported\ninterface `RegisterOptions` that specifies two optional properties: `prefix:\nstring` and `logLevel`: [LogLevel][LogLevel]. This type can also be specified as\na function that returns the previously described intersection.\n\n---\n\n#### Logger\n\nCheck out the [Specifying Logger Types](#example-5-specifying-logger-types)\nexample for more details on specifying a custom logger.\n\n##### fastify.FastifyLoggerOptions<[RawServer][RawServerGeneric], [RawRequest][RawRequestGeneric], [RawReply][RawReplyGeneric]>\n\n[src](https://github.com/fastify/fastify/blob/main/types/logger.d.ts#L17)\n\nAn interface definition for the internal Fastify logger. It is emulative of the\n[Pino.js](https://getpino.io/#/) logger. When enabled through server options,\nuse it following the general [logger](./Logging.md) documentation.\n\n##### fastify.FastifyLogFn\n\n[src](https://github.com/fastify/fastify/blob/main/types/logger.d.ts#L7)\n\nAn overload function interface that implements the two ways Fastify calls log\nmethods. This interface is passed to all associated log level properties on the\nFastifyLoggerOptions object.\n\n##### fastify.LogLevel\n\n[src](https://github.com/fastify/fastify/blob/main/types/logger.d.ts#L12)\n\nUnion type of: `'info' | 'error' | 'debug' | 'fatal' | 'warn' | 'trace'`\n\n---\n\n#### Context\n\nThe context type definition is similar to the other highly dynamic pieces of the\ntype system. Route context is available in the route handler method.\n\n##### fastify.FastifyContext\n\n[src](https://github.com/fastify/fastify/blob/main/types/context.d.ts#L6)\n\nAn interface with a single required property `config` that is set by default to\n`unknown`. Can be specified either using a generic or an overload.\n\nThis type definition is potentially incomplete. If you are using it and can\nprovide more details on how to improve the definition, we strongly encourage you\nto open an issue in the main\n[fastify/fastify](https://github.com/fastify/fastify) repository. Thank you in\nadvanced!\n\n---\n\n#### Routing\n\nOne of the core principles in Fastify is its routing capabilities. Most of the\ntypes defined in this section are used under-the-hood by the Fastify instance\n`.route` and `.get/.post/.etc` methods.\n\n##### fastify.RouteHandlerMethod<[RawServer][RawServerGeneric], [RawRequest][RawRequestGeneric], [RawReply][RawReplyGeneric], [RequestGeneric][FastifyRequestGenericInterface], [ContextConfig][ContextConfigGeneric]>\n\n[src](https://github.com/fastify/fastify/blob/main/types/route.d.ts#L105)\n\nA type declaration for the route handler methods. Has two arguments, `request`\nand `reply` which are typed by `FastifyRequest` and `FastifyReply` respectfully.\nThe generics parameters are passed through to these arguments. The method\nreturns either `void` or `Promise<any>` for synchronous and asynchronous\nhandlers respectfully.\n\n##### fastify.RouteOptions<[RawServer][RawServerGeneric], [RawRequest][RawRequestGeneric], [RawReply][RawReplyGeneric], [RequestGeneric][FastifyRequestGenericInterface], [ContextConfig][ContextConfigGeneric]>\n\n[src](https://github.com/fastify/fastify/blob/main/types/route.d.ts#L78)\n\nAn interface that extends RouteShorthandOptions and adds the following three\nrequired properties:\n1. `method` which corresponds to a singular [HTTPMethod][HTTPMethods] or a list\n   of [HTTPMethods][HTTPMethods]\n2. `url` a string for the route\n3. `handler` the route handler method, see [RouteHandlerMethod][] for more\n   details\n\n##### fastify.RouteShorthandMethod<[RawServer][RawServerGeneric], [RawRequest][RawRequestGeneric], [RawReply][RawReplyGeneric]>\n\n[src](https://github.com/fastify/fastify/blob/main/types/route.d.ts#12)\n\nAn overloaded function interface for three kinds of shorthand route methods to\nbe used in conjunction with the `.get/.post/.etc` methods.\n\n##### fastify.RouteShorthandOptions<[RawServer][RawServerGeneric], [RawRequest][RawRequestGeneric], [RawReply][RawReplyGeneric], [RequestGeneric][FastifyRequestGenericInterface], [ContextConfig][ContextConfigGeneric]>\n\n[src](https://github.com/fastify/fastify/blob/main/types/route.d.ts#55)\n\nAn interface that covers all of the base options for a route. Each property on\nthis interface is optional, and it serves as the base for the RouteOptions and\nRouteShorthandOptionsWithHandler interfaces.\n\n##### fastify.RouteShorthandOptionsWithHandler<[RawServer][RawServerGeneric], [RawRequest][RawRequestGeneric], [RawReply][RawReplyGeneric], [RequestGeneric][FastifyRequestGenericInterface], [ContextConfig][ContextConfigGeneric]>\n\n[src](https://github.com/fastify/fastify/blob/main/types/route.d.ts#93)\n\nThis interface adds a single, required property to the RouteShorthandOptions\ninterface `handler` which is of type RouteHandlerMethod\n\n---\n\n#### Parsers\n\n##### RawBody\n\nA generic type that is either a `string` or `Buffer`\n\n##### fastify.FastifyBodyParser<[RawBody][RawBodyGeneric], [RawServer][RawServerGeneric], [RawRequest][RawRequestGeneric]>\n\n[src](https://github.com/fastify/fastify/blob/main/types/content-type-parser.d.ts#L7)\n\nA function type definition for specifying a body parser method. Use the\n`RawBody` generic to specify the type of the body being parsed.\n\n##### fastify.FastifyContentTypeParser<[RawServer][RawServerGeneric], [RawRequest][RawRequestGeneric]>\n\n[src](https://github.com/fastify/fastify/blob/main/types/content-type-parser.d.ts#L17)\n\nA function type definition for specifying a body parser method. Content is typed\nvia the `RawRequest` generic.\n\n##### fastify.AddContentTypeParser<[RawServer][RawServerGeneric], [RawRequest][RawRequestGeneric]>\n\n[src](https://github.com/fastify/fastify/blob/main/types/content-type-parser.d.ts#L46)\n\nAn overloaded interface function definition for the `addContentTypeParser`\nmethod. If `parseAs` is passed to the `opts` parameter, the definition uses\n[FastifyBodyParser][] for the `parser` parameter; otherwise, it uses\n[FastifyContentTypeParser][].\n\n##### fastify.hasContentTypeParser\n\n[src](https://github.com/fastify/fastify/blob/main/types/content-type-parser.d.ts#L63)\n\nA method for checking the existence of a type parser of a certain content type\n\n---\n\n#### Errors\n\n##### fastify.FastifyError\n\n[src](https://github.com/fastify/fastify/blob/main/fastify.d.ts#L179)\n\nFastifyError is a custom error object that includes status code and validation\nresults.\n\nIt extends the Node.js `Error` type, and adds two additional, optional\nproperties: `statusCode: number` and `validation: ValidationResult[]`.\n\n##### fastify.ValidationResult\n\n[src](https://github.com/fastify/fastify/blob/main/fastify.d.ts#L184)\n\nThe route validation internally relies upon Ajv, which is a high-performance\nJSON schema validator.\n\nThis interface is passed to instance of FastifyError.\n\n---\n\n#### Hooks\n\n##### fastify.onRequestHookHandler<[RawServer][RawServerGeneric], [RawRequest][RawRequestGeneric], [RawReply][RawReplyGeneric], [RequestGeneric][FastifyRequestGenericInterface], [ContextConfig][ContextConfigGeneric]>(request: [FastifyRequest][FastifyRequest], reply: [FastifyReply][FastifyReply], done: (err?: [FastifyError][FastifyError]) => void): Promise\\<unknown\\> | void\n\n[src](https://github.com/fastify/fastify/blob/main/types/hooks.d.ts#L17)\n\n`onRequest` is the first hook to be executed in the request lifecycle. There was\nno previous hook, the next hook will be `preParsing`.\n\nNotice: in the `onRequest` hook, request.body will always be null, because the\nbody parsing happens before the `preHandler` hook.\n\n##### fastify.preParsingHookHandler<[RawServer][RawServerGeneric], [RawRequest][RawRequestGeneric], [RawReply][RawReplyGeneric], [RequestGeneric][FastifyRequestGenericInterface], [ContextConfig][ContextConfigGeneric]>(request: [FastifyRequest][FastifyRequest], reply: [FastifyReply][FastifyReply], done: (err?: [FastifyError][FastifyError]) => void): Promise\\<unknown\\> | void\n\n[src](https://github.com/fastify/fastify/blob/main/types/hooks.d.ts#L35)\n\n`preParsing` is the second hook to be executed in the request lifecycle. The\nprevious hook was `onRequest`, the next hook will be `preValidation`.\n\nNotice: in the `preParsing` hook, request.body will always be null, because the\nbody parsing happens before the `preValidation` hook.\n\nNotice: you should also add `receivedEncodedLength` property to the returned\nstream. This property is used to correctly match the request payload with the\n`Content-Length` header value. Ideally, this property should be updated on each\nreceived chunk.\n\n##### fastify.preValidationHookHandler<[RawServer][RawServerGeneric], [RawRequest][RawRequestGeneric], [RawReply][RawReplyGeneric], [RequestGeneric][FastifyRequestGenericInterface], [ContextConfig][ContextConfigGeneric]>(request: [FastifyRequest][FastifyRequest], reply: [FastifyReply][FastifyReply], done: (err?: [FastifyError][FastifyError]) => void): Promise\\<unknown\\> | void\n\n[src](https://github.com/fastify/fastify/blob/main/types/hooks.d.ts#L53)\n\n`preValidation` is the third hook to be executed in the request lifecycle. The\nprevious hook was `preParsing`, the next hook will be `preHandler`.\n\n##### fastify.preHandlerHookHandler<[RawServer][RawServerGeneric], [RawRequest][RawRequestGeneric], [RawReply][RawReplyGeneric], [RequestGeneric][FastifyRequestGenericInterface], [ContextConfig][ContextConfigGeneric]>(request: [FastifyRequest][FastifyRequest], reply: [FastifyReply][FastifyReply], done: (err?: [FastifyError][FastifyError]) => void): Promise\\<unknown\\> | void\n\n[src](https://github.com/fastify/fastify/blob/main/types/hooks.d.ts#L70)\n\n`preHandler` is the fourth hook to be executed in the request lifecycle. The\nprevious hook was `preValidation`, the next hook will be `preSerialization`.\n\n##### fastify.preSerializationHookHandler<PreSerializationPayload, [RawServer][RawServerGeneric], [RawRequest][RawRequestGeneric], [RawReply][RawReplyGeneric], [RequestGeneric][FastifyRequestGenericInterface], [ContextConfig][ContextConfigGeneric]>(request: [FastifyRequest][FastifyRequest], reply: [FastifyReply][FastifyReply], payload: PreSerializationPayload, done: (err: [FastifyError][FastifyError] | null, res?: unknown) => void): Promise\\<unknown\\> | void\n\n[src](https://github.com/fastify/fastify/blob/main/types/hooks.d.ts#L94)\n\n`preSerialization` is the fifth hook to be executed in the request lifecycle.\nThe previous hook was `preHandler`, the next hook will be `onSend`.\n\nNote: the hook is NOT called if the payload is a string, a Buffer, a stream or\nnull.\n\n##### fastify.onSendHookHandler<OnSendPayload, [RawServer][RawServerGeneric], [RawRequest][RawRequestGeneric], [RawReply][RawReplyGeneric], [RequestGeneric][FastifyRequestGenericInterface], [ContextConfig][ContextConfigGeneric]>(request: [FastifyRequest][FastifyRequest], reply: [FastifyReply][FastifyReply], payload: OnSendPayload, done: (err: [FastifyError][FastifyError] | null, res?: unknown) => void): Promise\\<unknown\\> | void\n\n[src](https://github.com/fastify/fastify/blob/main/types/hooks.d.ts#L114)\n\nYou can change the payload with the `onSend` hook. It is the sixth hook to be\nexecuted in the request lifecycle. The previous hook was `preSerialization`, the\nnext hook will be `onResponse`.\n\nNote: If you change the payload, you may only change it to a string, a Buffer, a\nstream, or null.\n\n##### fastify.onResponseHookHandler<[RawServer][RawServerGeneric], [RawRequest][RawRequestGeneric], [RawReply][RawReplyGeneric], [RequestGeneric][FastifyRequestGenericInterface], [ContextConfig][ContextConfigGeneric]>(request: [FastifyRequest][FastifyRequest], reply: [FastifyReply][FastifyReply], done: (err?: [FastifyError][FastifyError]) => void): Promise\\<unknown\\> | void\n\n[src](https://github.com/fastify/fastify/blob/main/types/hooks.d.ts#L134)\n\n`onResponse` is the seventh and last hook in the request hook lifecycle. The\nprevious hook was `onSend`, there is no next hook.\n\nThe onResponse hook is executed when a response has been sent, so you will not\nbe able to send more data to the client. It can however be useful for sending\ndata to external services, for example to gather statistics.\n\n##### fastify.onErrorHookHandler<[RawServer][RawServerGeneric], [RawRequest][RawRequestGeneric], [RawReply][RawReplyGeneric], [RequestGeneric][FastifyRequestGenericInterface], [ContextConfig][ContextConfigGeneric]>(request: [FastifyRequest][FastifyRequest], reply: [FastifyReply][FastifyReply], error: [FastifyError][FastifyError], done: () => void): Promise\\<unknown\\> | void\n\n[src](https://github.com/fastify/fastify/blob/main/types/hooks.d.ts#L154)\n\nThis hook is useful if you need to do some custom error logging or add some\nspecific header in case of error.\n\nIt is not intended for changing the error, and calling reply.send will throw an\nexception.\n\nThis hook will be executed only after the customErrorHandler has been executed,\nand only if the customErrorHandler sends an error back to the user (Note that\nthe default customErrorHandler always sends the error back to the user).\n\nNotice: unlike the other hooks, pass an error to the done function is not\nsupported.\n\n##### fastify.onRouteHookHandler<[RawServer][RawServerGeneric], [RawRequest][RawRequestGeneric], [RawReply][RawReplyGeneric], [RequestGeneric][FastifyRequestGenericInterface], [ContextConfig][ContextConfigGeneric]>(opts: [RouteOptions][RouteOptions] & { path: string; prefix: string }): Promise\\<unknown\\> | void\n\n[src](https://github.com/fastify/fastify/blob/main/types/hooks.d.ts#L174)\n\nTriggered when a new route is registered. Listeners are passed a routeOptions\nobject as the sole parameter. The interface is synchronous, and, as such, the\nlistener does not get passed a callback\n\n##### fastify.onRegisterHookHandler<[RawServer][RawServerGeneric], [RawRequest][RawRequestGeneric], [RawReply][RawReplyGeneric], [Logger][LoggerGeneric]>(instance: [FastifyInstance][FastifyInstance], done: (err?: [FastifyError][FastifyError]) => void): Promise\\<unknown\\> | void\n\n[src](https://github.com/fastify/fastify/blob/main/types/hooks.d.ts#L191)\n\nTriggered when a new plugin is registered and a new encapsulation context is\ncreated. The hook will be executed before the registered code.\n\nThis hook can be useful if you are developing a plugin that needs to know when a\nplugin context is formed, and you want to operate in that specific context.\n\nNote: This hook will not be called if a plugin is wrapped inside fastify-plugin.\n\n##### fastify.onCloseHookHandler<[RawServer][RawServerGeneric], [RawRequest][RawRequestGeneric], [RawReply][RawReplyGeneric], [Logger][LoggerGeneric]>(instance: [FastifyInstance][FastifyInstance], done: (err?: [FastifyError][FastifyError]) => void): Promise\\<unknown\\> | void\n\n[src](https://github.com/fastify/fastify/blob/main/types/hooks.d.ts#L206)\n\nTriggered when fastify.close() is invoked to stop the server. It is useful when\nplugins need a \"shutdown\" event, for example to close an open connection to a\ndatabase.\n\n\n<!-- Links -->\n\n[Fastify]:\n    #fastifyrawserver-rawrequest-rawreply-loggeropts-fastifyserveroptions-fastifyinstance\n[RawServerGeneric]: #rawserver\n[RawRequestGeneric]: #rawrequest\n[RawReplyGeneric]: #rawreply\n[LoggerGeneric]: #logger\n[RawBodyGeneric]: #rawbody\n[HTTPMethods]: #fastifyhttpmethods\n[RawServerBase]: #fastifyrawserverbase\n[RawServerDefault]: #fastifyrawserverdefault\n[FastifyRequest]: #fastifyfastifyrequestrawserver-rawrequest-requestgeneric\n[FastifyRequestGenericInterface]: #fastifyrequestgenericinterface\n[RawRequestDefaultExpression]: #fastifyrawrequestdefaultexpressionrawserver\n[FastifyReply]: #fastifyfastifyreplyrawserver-rawreply-contextconfig\n[RawReplyDefaultExpression]: #fastifyrawreplydefaultexpression\n[FastifyServerOptions]: #fastifyfastifyserveroptions-rawserver-logger\n[FastifyInstance]: #fastifyfastifyinstance\n[FastifyLoggerOptions]: #fastifyfastifyloggeroptions\n[ContextConfigGeneric]: #ContextConfigGeneric\n[FastifyPlugin]:\n    #fastifyfastifypluginoptions-rawserver-rawrequest-requestgeneric\n[FastifyPluginCallback]: #fastifyfastifyplugincallbackoptions\n[FastifyPluginAsync]: #fastifyfastifypluginasyncoptions\n[FastifyPluginOptions]: #fastifyfastifypluginoptions\n[FastifyRegister]:\n    #fastifyfastifyregisterrawserver-rawrequest-requestgenericplugin-fastifyplugin-opts-fastifyregisteroptions\n[FastifyRegisterOptions]: #fastifyfastifytregisteroptions\n[LogLevel]: #fastifyloglevel\n[FastifyError]: #fastifyfastifyerror\n[RouteOptions]:\n    #fastifyrouteoptionsrawserver-rawrequest-rawreply-requestgeneric-contextconfig\n/test/types/import.js)\"use strict\";\nexports.__esModule = true;\n/test/internals/all.test.js\u0003A'use strict'\n\nconst t = require('tap')\nconst test = t.test\nconst Fastify = require('../..')\nconst { supportedMethods } = require('../../lib/httpMethods')\n\ntest('fastify.all should add all the methods to the same url', t => {\n  const requirePayload = [\n    'POST',\n    'PUT',\n    'PATCH'\n  ]\n\n  t.plan(supportedMethods.length * 2)\n\n  const fastify = Fastify()\n\n  fastify.all('/', (req, reply) => {\n    reply.send({ method: req.raw.method })\n  })\n\n  supportedMethods.forEach(injectRequest)\n\n  function injectRequest (method) {\n    const options = {\n      url: '/',\n      method\n    }\n\n    if (requirePayload.includes(method)) {\n      options.payload = { hello: 'world' }\n    }\n\n    fastify.inject(options, (err, res) => {\n      t.error(err)\n      const payload = JSON.parse(res.payload)\n      t.same(payload, { method })\n    })\n  }\n})\n/types/reply.d.ts\u0011\u0002import { RawReplyDefaultExpression, RawServerBase, RawServerDefault, ContextConfigDefault, RawRequestDefaultExpression, ReplyDefault } from './utils'\nimport { FastifyReplyType, ResolveFastifyReplyType, FastifyTypeProvider, FastifyTypeProviderDefault } from './type-provider'\nimport { FastifyContext } from './context'\nimport { FastifyBaseLogger } from './logger'\nimport { FastifyRequest } from './request'\nimport { RouteGenericInterface } from './route'\nimport { FastifyInstance } from './instance'\nimport { FastifySchema } from './schema'\nimport { Buffer } from 'buffer'\n\nexport interface ReplyGenericInterface {\n  Reply?: ReplyDefault;\n}\n\n/**\n * FastifyReply is an instance of the standard http or http2 reply types.\n * It defaults to http.ServerResponse, and it also extends the relative reply object.\n */\nexport interface FastifyReply<\n  RawServer extends RawServerBase = RawServerDefault,\n  RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,\n  RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,\n  RouteGeneric extends RouteGenericInterface = RouteGenericInterface,\n  ContextConfig = ContextConfigDefault,\n  SchemaCompiler extends FastifySchema = FastifySchema,\n  TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,\n  ReplyType extends FastifyReplyType = ResolveFastifyReplyType<TypeProvider, SchemaCompiler, RouteGeneric>\n> {\n  raw: RawReply;\n  context: FastifyContext<ContextConfig>;\n  log: FastifyBaseLogger;\n  request: FastifyRequest<RouteGeneric, RawServer, RawRequest, SchemaCompiler, TypeProvider>;\n  server: FastifyInstance;\n  code(statusCode: number): FastifyReply<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider>;\n  status(statusCode: number): FastifyReply<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider>;\n  statusCode: number;\n  sent: boolean;\n  send(payload?: ReplyType): FastifyReply<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider>;\n  header(key: string, value: any): FastifyReply<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider>;\n  headers(values: {[key: string]: any}): FastifyReply<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider>;\n  getHeader(key: string): number | string | string[] | undefined;\n  getHeaders(): {\n    // Node's `getHeaders()` can return numbers and arrays, so they're included here as possible types.\n    [key: string]: number | string | string[] | undefined;\n  };\n  removeHeader(key: string): void;\n  hasHeader(key: string): boolean;\n  // Note: should consider refactoring the argument order for redirect. statusCode is optional so it should be after the required url param\n  redirect(statusCode: number, url: string): FastifyReply<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider>;\n  redirect(url: string): FastifyReply<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider>;\n  hijack(): FastifyReply<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider>;\n  callNotFound(): void;\n  getResponseTime(): number;\n  type(contentType: string): FastifyReply<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider>;\n  serializer(fn: (payload: any) => string): FastifyReply<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider>;\n  serialize(payload: any): string | ArrayBuffer | Buffer;\n  // Serialization Methods\n  getSerializationFunction(httpStatus: string, contentType?: string): (payload: {[key: string]: unknown}) => string;\n  getSerializationFunction(schema: {[key: string]: unknown}): (payload: {[key: string]: unknown}) => string;\n  compileSerializationSchema(schema: {[key: string]: unknown}, httpStatus?: string, contentType?: string): (payload: {[key: string]: unknown}) => string;\n  serializeInput(input: {[key: string]: unknown}, schema: {[key: string]: unknown}, httpStatus?: string, contentType?: string): string;\n  serializeInput(input: {[key: string]: unknown}, httpStatus: string, contentType?: string): unknown;\n  then(fulfilled: () => void, rejected: (err: Error) => void): void;\n}\n/test/fluent-schema.test.js\u0017\u0001'use strict'\n\nconst t = require('tap')\nconst test = t.test\nconst Fastify = require('..')\nconst S = require('fluent-json-schema')\n\ntest('use fluent-json-schema object', t => {\n  t.plan(15)\n  const fastify = Fastify()\n\n  fastify.post('/:id', {\n    handler: (req, reply) => { reply.send({ name: 'a', surname: 'b', dateOfBirth: '01-01-2020' }) },\n    schema: {\n      params: S.object().prop('id', S.integer().minimum(42)),\n      headers: S.object().prop('x-custom', S.string().format('email')),\n      query: S.object().prop('surname', S.string().required()),\n      body: S.object().prop('name', S.string().required()),\n      response: {\n        200: S.object()\n          .prop('name', S.string())\n          .prop('surname', S.string())\n      }\n    }\n  })\n\n  // check params\n  fastify.inject({\n    method: 'POST',\n    url: '/1',\n    headers: { 'x-custom': 'me@me.me' },\n    query: { surname: 'bar' },\n    payload: { name: 'foo' }\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 400)\n    t.same(res.json(), { statusCode: 400, error: 'Bad Request', message: 'params/id must be >= 42' })\n  })\n\n  // check header\n  fastify.inject({\n    method: 'POST',\n    url: '/42',\n    headers: { 'x-custom': 'invalid' },\n    query: { surname: 'bar' },\n    payload: { name: 'foo' }\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 400)\n    t.same(res.json(), { statusCode: 400, error: 'Bad Request', message: 'headers/x-custom must match format \"email\"' })\n  })\n\n  // check query\n  fastify.inject({\n    method: 'POST',\n    url: '/42',\n    headers: { 'x-custom': 'me@me.me' },\n    query: { },\n    payload: { name: 'foo' }\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 400)\n    t.same(res.json(), { statusCode: 400, error: 'Bad Request', message: 'querystring must have required property \\'surname\\'' })\n  })\n\n  // check body\n  fastify.inject({\n    method: 'POST',\n    url: '/42',\n    headers: { 'x-custom': 'me@me.me' },\n    query: { surname: 'bar' },\n    payload: { name: [1, 2, 3] }\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 400)\n    t.same(res.json(), { statusCode: 400, error: 'Bad Request', message: 'body/name must be string' })\n  })\n\n  // check response\n  fastify.inject({\n    method: 'POST',\n    url: '/42',\n    headers: { 'x-custom': 'me@me.me' },\n    query: { surname: 'bar' },\n    payload: { name: 'foo' }\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 200)\n    t.same(res.json(), { name: 'a', surname: 'b' })\n  })\n})\n\ntest('use complex fluent-json-schema object', t => {\n  t.plan(1)\n  const fastify = Fastify()\n\n  const addressSchema = S.object()\n    .id('#address')\n    .prop('line1').required()\n    .prop('line2')\n    .prop('country').required()\n    .prop('city').required()\n    .prop('zipcode').required()\n\n  const commonSchemas = S.object()\n    .id('https://fastify/demo')\n    .definition('addressSchema', addressSchema)\n\n  fastify.addSchema(commonSchemas)\n\n  const bodyJsonSchema = S.object()\n    .prop('residence', S.ref('https://fastify/demo#address')).required()\n    .prop('office', S.ref('https://fastify/demo#/definitions/addressSchema')).required()\n\n  fastify.post('/the/url', { schema: { body: bodyJsonSchema } }, () => { })\n  fastify.ready(err => t.error(err))\n})\n\ntest('use fluent schema and plain JSON schema', t => {\n  t.plan(1)\n\n  const fastify = Fastify()\n\n  const addressSchema = S.object()\n    .id('#address')\n    .prop('line1').required()\n    .prop('line2')\n    .prop('country').required()\n    .prop('city').required()\n    .prop('zipcode').required()\n\n  const commonSchemas = S.object()\n    .id('https://fastify/demo')\n    .definition('addressSchema', addressSchema)\n\n  const sharedAddressSchema = {\n    $id: 'sharedAddress',\n    type: 'object',\n    required: ['line1', 'country', 'city', 'zipcode'],\n    properties: {\n      line1: { type: 'string' },\n      line2: { type: 'string' },\n      country: { type: 'string' },\n      city: { type: 'string' },\n      zipcode: { type: 'string' }\n    }\n  }\n\n  fastify.addSchema(commonSchemas)\n  fastify.addSchema(sharedAddressSchema)\n\n  const bodyJsonSchema = S.object()\n    .prop('residence', S.ref('https://fastify/demo#address')).required()\n    .prop('office', S.ref('https://fastify/demo#/definitions/addressSchema')).required()\n\n  fastify.post('/the/url', { schema: { body: bodyJsonSchema } }, () => { })\n  fastify.ready(err => t.error(err))\n})\n\ntest('Should call valueOf internally', t => {\n  t.plan(1)\n\n  const fastify = new Fastify()\n\n  const addressSchema = S.object()\n    .id('#address')\n    .prop('line1').required()\n    .prop('line2')\n    .prop('country').required()\n    .prop('city').required()\n    .prop('zipcode').required()\n\n  const commonSchemas = S.object()\n    .id('https://fastify/demo')\n    .definition('addressSchema', addressSchema)\n\n  fastify.addSchema(commonSchemas)\n\n  fastify.route({\n    method: 'POST',\n    url: '/query',\n    handler: () => {},\n    schema: {\n      query: S.object().prop('hello', S.string()).required(),\n      body: S.object().prop('hello', S.string()).required(),\n      params: S.object().prop('hello', S.string()).required(),\n      headers: S.object().prop('hello', S.string()).required(),\n      response: {\n        200: S.object().prop('hello', S.string()).required(),\n        201: S.object().prop('hello', S.string()).required()\n      }\n    }\n  })\n\n  fastify.route({\n    method: 'POST',\n    url: '/querystring',\n    handler: () => {},\n    schema: {\n      querystring: S.object().prop('hello', S.string()).required(),\n      body: S.object().prop('hello', S.string()).required(),\n      params: S.object().prop('hello', S.string()).required(),\n      headers: S.object().prop('hello', S.string()).required(),\n      response: {\n        200: S.object().prop('hello', S.string()).required(),\n        201: S.object().prop('hello', S.string()).required()\n      }\n    }\n  })\n\n  fastify.ready(t.error)\n})\n/docs/Guides/Style-Guide.md\u001d# Fastify Style Guide\n\n## Welcome\n\nWelcome to *Fastify Style Guide*. This guide is here to provide you with a\nconventional writing style for users writing developer documentation on our Open\nSource framework. Each topic is precise and well explained to help you write\ndocumentation users can easily understand and implement.\n\n## Who is this guide for?\n\nThis guide is for anyone who loves to build with Fastify or wants to contribute\nto our documentation. You do not need to be an expert in writing technical\ndocumentation. This guide is here to help you.\n\nVisit the [contribute](https://www.fastify.io/contribute) page on our website or\nread the\n[CONTRIBUTING.md](https://github.com/fastify/fastify/blob/main/CONTRIBUTING.md)\nfile on GitHub to join our Open Source folks.\n\n## Before you write\n\nYou need to know the following:\n\n* JavaScript\n* Node.js\n* Git\n* GitHub\n* Markdown\n* HTTP\n* NPM\n\n### Consider your Audience\n\nBefore you start writing, think about your audience. In this case, your audience\nshould already know HTTP, JavaScript, NPM, and Node.js. It is necessary to keep\nyour readers in mind because they are the ones consuming your content. You want\nto give as much useful information as possible. Consider the vital things they\nneed to know and how they can understand them. Use words and references that\nreaders can relate to easily. Ask for feedback from the community, it can help\nyou write better documentation that focuses on the user and what you want to\nachieve.\n\n### Get straight to the point\n\nGive your readers a clear and precise action to take. Start with what is most\nimportant. This way, you can help them find what they need faster. Mostly,\nreaders tend to read the first content on a page, and many will not scroll\nfurther.\n\n**Example**\n\nLess like this: Colons are very important to register a parametric path. It lets\nthe framework know there is a new parameter created. You can place the colon\nbefore the parameter name so the parametric path can be created.\n\nMore Like this: To register a parametric path, put a colon before the parameter\nname. Using a colon lets the framework know it is a parametric path and not a\nstatic path.\n\n### Avoid adding video or image content\n\n\nDo not add videos or screenshots to the documentation. It is easier to keep\nunder version control. Videos and images will eventually end up becoming\noutdated as new updates keep developing. Instead, make a referral link or a\nYouTube video. You can add links by using `[Title](www.websitename.com)` in the\nmarkdown.\n\n**Example**\n\n```\nTo learn more about hooks, see [Fastify hooks](https://www.fastify.io/docs/latest/Reference/Hooks/).\n```\n\nResult:\n>To learn more about hooks, see [Fastify\n>hooks](https://www.fastify.io/docs/latest/Reference/Hooks/).\n\n\n\n### Avoid plagiarism\n\nMake sure you avoid copying other people's work. Keep it as original as\npossible. You can learn from what they have done and reference where it is from\nif you used a particular quote from their work.\n\n\n## Word Choice\n\nThere are a few things you need to use and avoid when writing your documentation\nto improve readability for readers and make documentation neat, direct, and\nclean.\n\n\n### When to use the second person \"you\" as the pronoun\n\nWhen writing articles or guides, your content should communicate directly to\nreaders in the second person (\"you\") addressed form. It is easier to give them\ndirect instruction on what to do on a particular topic. To see an example, visit\nthe [Plugins Guide](./Plugins-Guide.md).\n\n**Example**\n\nLess like this: we can use the following plugins.\n\nMore like this: You can use the following plugins.\n\n> According to [Wikipedia](#), ***You*** is usually a second person pronoun.\n> Also, used to refer to an indeterminate person, as a more common alternative\n> to a very formal indefinite pronoun.\n\n## When to avoid the second person \"you\" as the pronoun\n\nOne of the main rules of formal writing such as reference documentation, or API\ndocumentation, is to avoid the second person (\"you\") or directly addressing the\nreader.\n\n**Example**\n\nLess like this: You can use the following recommendation as an example.\n\nMore like this: As an example, the following recommendations should be\nreferenced.\n\nTo view a live example, refer to the [Decorators](../Reference/Decorators.md)\nreference document.\n\n\n### Avoid using contractions\n\nContractions are the shortened version of written and spoken forms of a word,\ni.e. using \"don't\" instead of \"do not\". Avoid contractions to provide a more\nformal tone.\n\n### Avoid using condescending terms\n\nCondescending terms are words that include:\n\n* Just\n* Easy\n* Simply\n* Basically\n* Obviously\n\nThe reader may not find it easy to use Fastify's framework and plugins; avoid\nwords that make it sound simple, easy, offensive, or insensitive. Not everyone\nwho reads the documentation has the same level of understanding.\n\n\n### Starting with a verb\n\nMostly start your description with a verb, which makes it simple and precise for\nthe reader to follow. Prefer using present tense because it is easier to read\nand understand than the past or future tense.\n\n**Example**\n\n Less like this: There is a need for Node.js to be installed before you can be\n able to use Fastify.\n\n More like this: Install Node.js to make use of Fastify.\n\n### Grammatical moods\n\nGrammatical moods are a great way to express your writing. Avoid sounding too\nbossy while making a direct statement. Know when to switch between indicative,\nimperative, and subjunctive moods.\n\n\n**Indicative** - Use when making a factual statement or question.\n\nExample: Since there is no testing framework available, \"Fastify recommends ways\nto write tests\".\n\n**Imperative** - Use when giving instructions, actions, commands, or when you\nwrite your headings.\n\nExample: Install dependencies before starting development.\n\n\n**Subjunctive** -  Use when making suggestions, hypotheses, or non-factual\nstatements.\n\nExample: Reading the documentation on our website is recommended to get\ncomprehensive knowledge of the framework.\n\n### Use **active** voice instead of **passive**\n\nUsing active voice is a more compact and direct way of conveying your\ndocumentation.\n\n**Example**\n\n\nPassive: The node dependencies and packages are installed by npm.\n\nActive:  npm installs packages and node dependencies.\n\n## Writing Style\n\n### Documentation titles\n\nWhen creating a new guide, API, or reference in the `/docs/` directory, use\nshort titles that best describe the topic of your documentation. Name your files\nin kebab-cases and avoid Raw or camelCase. To learn more about kebab-case you\ncan visit this medium article on [Case\nStyles](https://medium.com/better-programming/string-case-styles-camel-pascal-snake-and-kebab-case-981407998841).\n\n**Examples**:\n\n>`hook-and-plugins.md`,\n\n `adding-test-plugins.md`,\n\n `removing-requests.md`.\n\n### Hyperlinks\n\nHyperlinks should have a clear title of what it references. Here is how your\nhyperlink should look:\n\n```MD\n<!-- More like this -->\n\n// Add clear & brief description\n[Fastify Plugins] (https://www.fastify.io/docs/latest/Plugins/)\n\n<!--Less like this -->\n\n// incomplete description\n[Fastify] (https://www.fastify.io/docs/latest/Plugins/)\n\n// Adding title in link brackets\n[](https://www.fastify.io/docs/latest/Plugins/ \"fastify plugin\")\n\n// Empty title\n[](https://www.fastify.io/docs/latest/Plugins/)\n\n// Adding links localhost URLs instead of using code strings (``)\n[http://localhost:3000/](http://localhost:3000/)\n\n```\n\nInclude in your documentation as many essential references as possible, but\navoid having numerous links when writing for beginners to avoid distractions.\n/test/noop-set.test.js\u0001{'use strict'\n\nconst tap = require('tap')\nconst noopSet = require('../lib/noop-set')\n\ntap.test('does a lot of nothing', async t => {\n  const aSet = noopSet()\n  t.type(aSet, 'object')\n\n  const item = {}\n  aSet.add(item)\n  aSet.add({ another: 'item' })\n  aSet.delete(item)\n  t.equal(aSet.has(item), true)\n\n  for (const i of aSet) {\n    t.fail('should not have any items', i)\n  }\n})\n/test/hooks.test.js\u0000\u0001N{'use strict'\n\nconst t = require('tap')\nconst test = t.test\nconst sget = require('simple-get').concat\nconst stream = require('stream')\nconst Fastify = require('..')\nconst fp = require('fastify-plugin')\nconst fs = require('fs')\nconst split = require('split2')\nconst symbols = require('../lib/symbols.js')\nconst payload = { hello: 'world' }\nconst proxyquire = require('proxyquire')\nconst { promisify } = require('util')\nconst { connect } = require('net')\n\nconst sleep = promisify(setTimeout)\n\nprocess.removeAllListeners('warning')\n\nfunction getUrl (app) {\n  const { address, port } = app.server.address()\n  if (address === '::1') {\n    return `http://[${address}]:${port}`\n  } else {\n    return `http://${address}:${port}`\n  }\n}\n\ntest('hooks', t => {\n  t.plan(49)\n  const fastify = Fastify({ exposeHeadRoutes: false })\n\n  try {\n    fastify.addHook('preHandler', function (request, reply, done) {\n      t.equal(request.test, 'the request is coming')\n      t.equal(reply.test, 'the reply has come')\n      if (request.raw.method === 'HEAD') {\n        done(new Error('some error'))\n      } else {\n        done()\n      }\n    })\n    t.pass()\n  } catch (e) {\n    t.fail()\n  }\n\n  try {\n    fastify.addHook('preHandler', null)\n  } catch (e) {\n    t.equal(e.code, 'FST_ERR_HOOK_INVALID_HANDLER')\n    t.equal(e.message, 'preHandler hook should be a function, instead got null')\n    t.pass()\n  }\n\n  try {\n    fastify.addHook('preParsing')\n  } catch (e) {\n    t.equal(e.code, 'FST_ERR_HOOK_INVALID_HANDLER')\n    t.equal(e.message, 'preParsing hook should be a function, instead got undefined')\n    t.pass()\n  }\n\n  try {\n    fastify.addHook('preParsing', function (request, reply, payload, done) {\n      request.preParsing = true\n      t.equal(request.test, 'the request is coming')\n      t.equal(reply.test, 'the reply has come')\n      done()\n    })\n    t.pass()\n  } catch (e) {\n    t.fail()\n  }\n\n  try {\n    fastify.addHook('preParsing', function (request, reply, payload, done) {\n      request.preParsing = true\n      t.equal(request.test, 'the request is coming')\n      t.equal(reply.test, 'the reply has come')\n      done()\n    })\n    t.pass()\n  } catch (e) {\n    t.fail()\n  }\n\n  try {\n    fastify.addHook('preValidation', function (request, reply, done) {\n      t.equal(request.preParsing, true)\n      t.equal(request.test, 'the request is coming')\n      t.equal(reply.test, 'the reply has come')\n      done()\n    })\n    t.pass()\n  } catch (e) {\n    t.fail()\n  }\n\n  try {\n    fastify.addHook('preSerialization', function (request, reply, payload, done) {\n      t.ok('preSerialization called')\n      done()\n    })\n    t.pass()\n  } catch (e) {\n    t.fail()\n  }\n\n  try {\n    fastify.addHook('onRequest', function (request, reply, done) {\n      request.test = 'the request is coming'\n      reply.test = 'the reply has come'\n      if (request.raw.method === 'DELETE') {\n        done(new Error('some error'))\n      } else {\n        done()\n      }\n    })\n    t.pass()\n  } catch (e) {\n    t.fail()\n  }\n\n  fastify.addHook('onResponse', function (request, reply, done) {\n    t.ok('onResponse called')\n    done()\n  })\n\n  fastify.addHook('onSend', function (req, reply, thePayload, done) {\n    t.ok('onSend called')\n    done()\n  })\n\n  fastify.route({\n    method: 'GET',\n    url: '/',\n    handler: function (req, reply) {\n      t.equal(req.test, 'the request is coming')\n      t.equal(reply.test, 'the reply has come')\n      reply.code(200).send(payload)\n    },\n    onResponse: function (req, reply, done) {\n      t.ok('onResponse inside hook')\n    },\n    response: {\n      200: {\n        type: 'object'\n      }\n    }\n  })\n\n  fastify.head('/', function (req, reply) {\n    reply.code(200).send(payload)\n  })\n\n  fastify.delete('/', function (req, reply) {\n    reply.code(200).send(payload)\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(response.headers['content-length'], '' + body.length)\n      t.same(JSON.parse(body), { hello: 'world' })\n    })\n\n    sget({\n      method: 'HEAD',\n      url: 'http://localhost:' + fastify.server.address().port\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 500)\n    })\n\n    sget({\n      method: 'DELETE',\n      url: 'http://localhost:' + fastify.server.address().port\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 500)\n    })\n  })\n})\n\ntest('onRequest hook should support encapsulation / 1', t => {\n  t.plan(5)\n  const fastify = Fastify()\n\n  fastify.register((instance, opts, done) => {\n    instance.addHook('onRequest', (req, reply, done) => {\n      t.equal(req.raw.url, '/plugin')\n      done()\n    })\n\n    instance.get('/plugin', (request, reply) => {\n      reply.send()\n    })\n\n    done()\n  })\n\n  fastify.get('/root', (request, reply) => {\n    reply.send()\n  })\n\n  fastify.inject('/root', (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 200)\n  })\n\n  fastify.inject('/plugin', (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 200)\n  })\n})\n\ntest('onRequest hook should support encapsulation / 2', t => {\n  t.plan(3)\n  const fastify = Fastify()\n  let pluginInstance\n\n  fastify.addHook('onRequest', () => {})\n\n  fastify.register((instance, opts, done) => {\n    instance.addHook('onRequest', () => {})\n    pluginInstance = instance\n    done()\n  })\n\n  fastify.ready(err => {\n    t.error(err)\n    t.equal(fastify[symbols.kHooks].onRequest.length, 1)\n    t.equal(pluginInstance[symbols.kHooks].onRequest.length, 2)\n  })\n})\n\ntest('onRequest hook should support encapsulation / 3', t => {\n  t.plan(20)\n  const fastify = Fastify()\n  fastify.decorate('hello', 'world')\n\n  fastify.addHook('onRequest', function (req, reply, done) {\n    t.ok(this.hello)\n    t.ok(this.hello2)\n    req.first = true\n    done()\n  })\n\n  fastify.decorate('hello2', 'world')\n\n  fastify.get('/first', (req, reply) => {\n    t.ok(req.first)\n    t.notOk(req.second)\n    reply.send({ hello: 'world' })\n  })\n\n  fastify.register((instance, opts, done) => {\n    instance.decorate('hello3', 'world')\n    instance.addHook('onRequest', function (req, reply, done) {\n      t.ok(this.hello)\n      t.ok(this.hello2)\n      t.ok(this.hello3)\n      req.second = true\n      done()\n    })\n\n    instance.get('/second', (req, reply) => {\n      t.ok(req.first)\n      t.ok(req.second)\n      reply.send({ hello: 'world' })\n    })\n\n    done()\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port + '/first'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(response.headers['content-length'], '' + body.length)\n      t.same(JSON.parse(body), { hello: 'world' })\n    })\n\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port + '/second'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(response.headers['content-length'], '' + body.length)\n      t.same(JSON.parse(body), { hello: 'world' })\n    })\n  })\n})\n\ntest('preHandler hook should support encapsulation / 5', t => {\n  t.plan(17)\n  const fastify = Fastify()\n  fastify.decorate('hello', 'world')\n\n  fastify.addHook('preHandler', function (req, res, done) {\n    t.ok(this.hello)\n    req.first = true\n    done()\n  })\n\n  fastify.get('/first', (req, reply) => {\n    t.ok(req.first)\n    t.notOk(req.second)\n    reply.send({ hello: 'world' })\n  })\n\n  fastify.register((instance, opts, done) => {\n    instance.decorate('hello2', 'world')\n    instance.addHook('preHandler', function (req, res, done) {\n      t.ok(this.hello)\n      t.ok(this.hello2)\n      req.second = true\n      done()\n    })\n\n    instance.get('/second', (req, reply) => {\n      t.ok(req.first)\n      t.ok(req.second)\n      reply.send({ hello: 'world' })\n    })\n\n    done()\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port + '/first'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(response.headers['content-length'], '' + body.length)\n      t.same(JSON.parse(body), { hello: 'world' })\n    })\n\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port + '/second'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(response.headers['content-length'], '' + body.length)\n      t.same(JSON.parse(body), { hello: 'world' })\n    })\n  })\n})\n\ntest('onRoute hook should be called / 1', t => {\n  t.plan(2)\n  const fastify = Fastify({ exposeHeadRoutes: false })\n\n  fastify.register((instance, opts, done) => {\n    instance.addHook('onRoute', () => {\n      t.pass()\n    })\n    instance.get('/', opts, function (req, reply) {\n      reply.send()\n    })\n    done()\n  })\n\n  fastify.ready(err => {\n    t.error(err)\n  })\n})\n\ntest('onRoute hook should be called / 2', t => {\n  t.plan(5)\n  let firstHandler = 0\n  let secondHandler = 0\n  const fastify = Fastify({ exposeHeadRoutes: false })\n  fastify.addHook('onRoute', (route) => {\n    t.pass()\n    firstHandler++\n  })\n\n  fastify.register((instance, opts, done) => {\n    instance.addHook('onRoute', (route) => {\n      t.pass()\n      secondHandler++\n    })\n    instance.get('/', opts, function (req, reply) {\n      reply.send()\n    })\n    done()\n  })\n    .after(() => {\n      t.equal(firstHandler, 1)\n      t.equal(secondHandler, 1)\n    })\n\n  fastify.ready(err => {\n    t.error(err)\n  })\n})\n\ntest('onRoute hook should be called / 3', t => {\n  t.plan(5)\n  const fastify = Fastify({ exposeHeadRoutes: false })\n\n  function handler (req, reply) {\n    reply.send()\n  }\n\n  fastify.addHook('onRoute', (route) => {\n    t.pass()\n  })\n\n  fastify.register((instance, opts, done) => {\n    instance.addHook('onRoute', (route) => {\n      t.pass()\n    })\n    instance.get('/a', handler)\n    done()\n  })\n    .after((err, done) => {\n      t.error(err)\n      setTimeout(() => {\n        fastify.get('/b', handler)\n        done()\n      }, 10)\n    })\n\n  fastify.ready(err => {\n    t.error(err)\n  })\n})\n\ntest('onRoute hook should be called (encapsulation support) / 4', t => {\n  t.plan(4)\n  const fastify = Fastify({ exposeHeadRoutes: false })\n\n  fastify.addHook('onRoute', () => {\n    t.pass()\n  })\n\n  fastify.register((instance, opts, done) => {\n    instance.addHook('onRoute', () => {\n      t.pass()\n    })\n    instance.get('/nested', opts, function (req, reply) {\n      reply.send()\n    })\n    done()\n  })\n\n  fastify.get('/', function (req, reply) {\n    reply.send()\n  })\n\n  fastify.ready(err => {\n    t.error(err)\n  })\n})\n\ntest('onRoute hook should be called (encapsulation support) / 5', t => {\n  t.plan(2)\n  const fastify = Fastify({ exposeHeadRoutes: false })\n\n  fastify.get('/first', function (req, reply) {\n    reply.send()\n  })\n\n  fastify.register((instance, opts, done) => {\n    instance.addHook('onRoute', () => {\n      t.pass()\n    })\n    instance.get('/nested', opts, function (req, reply) {\n      reply.send()\n    })\n    done()\n  })\n\n  fastify.get('/second', function (req, reply) {\n    reply.send()\n  })\n\n  fastify.ready(err => {\n    t.error(err)\n  })\n})\n\ntest('onRoute hook should be called (encapsulation support) / 6', t => {\n  t.plan(1)\n  const fastify = Fastify({ exposeHeadRoutes: false })\n\n  fastify.get('/first', function (req, reply) {\n    reply.send()\n  })\n\n  fastify.addHook('onRoute', () => {\n    t.fail('This should not be called')\n  })\n\n  fastify.ready(err => {\n    t.error(err)\n  })\n})\n\ntest('onRoute should keep the context', t => {\n  t.plan(4)\n  const fastify = Fastify({ exposeHeadRoutes: false })\n  fastify.register((instance, opts, done) => {\n    instance.decorate('test', true)\n    instance.addHook('onRoute', onRoute)\n    t.ok(instance.prototype === fastify.prototype)\n\n    function onRoute (route) {\n      t.ok(this.test)\n      t.equal(this, instance)\n    }\n\n    instance.get('/', opts, function (req, reply) {\n      reply.send()\n    })\n\n    done()\n  })\n\n  fastify.close((err) => {\n    t.error(err)\n  })\n})\n\ntest('onRoute hook should pass correct route', t => {\n  t.plan(9)\n  const fastify = Fastify({ exposeHeadRoutes: false })\n  fastify.addHook('onRoute', (route) => {\n    t.equal(route.method, 'GET')\n    t.equal(route.url, '/')\n    t.equal(route.path, '/')\n    t.equal(route.routePath, '/')\n  })\n\n  fastify.register((instance, opts, done) => {\n    instance.addHook('onRoute', (route) => {\n      t.equal(route.method, 'GET')\n      t.equal(route.url, '/')\n      t.equal(route.path, '/')\n      t.equal(route.routePath, '/')\n    })\n    instance.get('/', opts, function (req, reply) {\n      reply.send()\n    })\n    done()\n  })\n\n  fastify.ready(err => {\n    t.error(err)\n  })\n})\n\ntest('onRoute hook should pass correct route with custom prefix', t => {\n  t.plan(11)\n  const fastify = Fastify({ exposeHeadRoutes: false })\n  fastify.addHook('onRoute', function (route) {\n    t.equal(route.method, 'GET')\n    t.equal(route.url, '/v1/foo')\n    t.equal(route.path, '/v1/foo')\n    t.equal(route.routePath, '/foo')\n    t.equal(route.prefix, '/v1')\n  })\n\n  fastify.register((instance, opts, done) => {\n    instance.addHook('onRoute', function (route) {\n      t.equal(route.method, 'GET')\n      t.equal(route.url, '/v1/foo')\n      t.equal(route.path, '/v1/foo')\n      t.equal(route.routePath, '/foo')\n      t.equal(route.prefix, '/v1')\n    })\n    instance.get('/foo', opts, function (req, reply) {\n      reply.send()\n    })\n    done()\n  }, { prefix: '/v1' })\n\n  fastify.ready(err => {\n    t.error(err)\n  })\n})\n\ntest('onRoute hook should pass correct route with custom options', t => {\n  t.plan(6)\n  const fastify = Fastify({ exposeHeadRoutes: false })\n  fastify.register((instance, opts, done) => {\n    instance.addHook('onRoute', function (route) {\n      t.equal(route.method, 'GET')\n      t.equal(route.url, '/foo')\n      t.equal(route.logLevel, 'info')\n      t.equal(route.bodyLimit, 100)\n      t.type(route.logSerializers.test, 'function')\n    })\n    instance.get('/foo', {\n      logLevel: 'info',\n      bodyLimit: 100,\n      logSerializers: {\n        test: value => value\n      }\n    }, function (req, reply) {\n      reply.send()\n    })\n    done()\n  })\n\n  fastify.ready(err => {\n    t.error(err)\n  })\n})\n\ntest('onRoute hook should receive any route option', t => {\n  t.plan(5)\n  const fastify = Fastify({ exposeHeadRoutes: false })\n  fastify.register((instance, opts, done) => {\n    instance.addHook('onRoute', function (route) {\n      t.equal(route.method, 'GET')\n      t.equal(route.url, '/foo')\n      t.equal(route.routePath, '/foo')\n      t.equal(route.auth, 'basic')\n    })\n    instance.get('/foo', { auth: 'basic' }, function (req, reply) {\n      reply.send()\n    })\n    done()\n  })\n\n  fastify.ready(err => {\n    t.error(err)\n  })\n})\n\ntest('onRoute hook should preserve system route configuration', t => {\n  t.plan(5)\n  const fastify = Fastify({ exposeHeadRoutes: false })\n  fastify.register((instance, opts, done) => {\n    instance.addHook('onRoute', function (route) {\n      t.equal(route.method, 'GET')\n      t.equal(route.url, '/foo')\n      t.equal(route.routePath, '/foo')\n      t.equal(route.handler.length, 2)\n    })\n    instance.get('/foo', { url: '/bar', method: 'POST' }, function (req, reply) {\n      reply.send()\n    })\n    done()\n  })\n\n  fastify.ready(err => {\n    t.error(err)\n  })\n})\n\ntest('onRoute hook should preserve handler function in options of shorthand route system configuration', t => {\n  t.plan(2)\n\n  const handler = (req, reply) => {}\n\n  const fastify = Fastify({ exposeHeadRoutes: false })\n  fastify.register((instance, opts, done) => {\n    instance.addHook('onRoute', function (route) {\n      t.equal(route.handler, handler)\n    })\n    instance.get('/foo', { handler })\n    done()\n  })\n\n  fastify.ready(err => {\n    t.error(err)\n  })\n})\n\n// issue ref https://github.com/fastify/fastify-compress/issues/140\ntest('onRoute hook should be called once when prefixTrailingSlash', t => {\n  t.plan(3)\n\n  let onRouteCalled = 0\n  let routePatched = 0\n\n  const fastify = Fastify({ ignoreTrailingSlash: false, exposeHeadRoutes: false })\n\n  // a plugin that patches route options, similar to fastify-compress\n  fastify.register(fp(function myPlugin (instance, opts, next) {\n    function patchTheRoute () {\n      routePatched++\n    }\n\n    instance.addHook('onRoute', function (routeOptions) {\n      onRouteCalled++\n      patchTheRoute(routeOptions)\n    })\n\n    next()\n  }))\n\n  fastify.register(function routes (instance, opts, next) {\n    instance.route({\n      method: 'GET',\n      url: '/',\n      prefixTrailingSlash: 'both',\n      handler: (req, reply) => {\n        reply.send({ hello: 'world' })\n      }\n    })\n\n    next()\n  }, { prefix: '/prefix' })\n\n  fastify.ready(err => {\n    t.error(err)\n    t.equal(onRouteCalled, 1) // onRoute hook was called once\n    t.equal(routePatched, 1) // and plugin acted once and avoided redundaunt route patching\n  })\n})\n\ntest('onRoute hook should able to change the route url', t => {\n  t.plan(5)\n\n  const fastify = Fastify({ exposeHeadRoutes: false })\n\n  fastify.register((instance, opts, done) => {\n    instance.addHook('onRoute', (route) => {\n      t.equal(route.url, '/foo')\n      route.url = encodeURI(route.url)\n    })\n\n    instance.get('/foo', (request, reply) => {\n      reply.send('here /foo')\n    })\n\n    done()\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    sget({\n      method: 'GET',\n      url: getUrl(fastify) + encodeURI('/foo')\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(body.toString(), 'here /foo')\n    })\n  })\n})\n\ntest('onRoute hook that throws should be caught', t => {\n  t.plan(1)\n  const fastify = Fastify({ exposeHeadRoutes: false })\n\n  fastify.register((instance, opts, done) => {\n    instance.addHook('onRoute', () => {\n      throw new Error('snap')\n    })\n\n    try {\n      instance.get('/', opts, function (req, reply) {\n        reply.send()\n      })\n\n      t.fail('onRoute should throw sync if error')\n    } catch (error) {\n      t.ok(error)\n    }\n\n    done()\n  })\n\n  fastify.ready()\n})\n\ntest('onRoute hook with many prefix', t => {\n  t.plan(3)\n  const fastify = Fastify({ exposeHeadRoutes: false })\n  const handler = (req, reply) => { reply.send({}) }\n\n  const onRouteChecks = [\n    { routePath: '/anotherPath', prefix: '/two', url: '/one/two/anotherPath' },\n    { routePath: '/aPath', prefix: '/one', url: '/one/aPath' }\n  ]\n\n  fastify.register((instance, opts, done) => {\n    instance.addHook('onRoute', (route) => {\n      t.match(route, onRouteChecks.pop())\n    })\n    instance.route({ method: 'GET', url: '/aPath', handler })\n\n    instance.register((instance, opts, done) => {\n      instance.route({ method: 'GET', path: '/anotherPath', handler })\n      done()\n    }, { prefix: '/two' })\n    done()\n  }, { prefix: '/one' })\n\n  fastify.ready(err => { t.error(err) })\n})\n\ntest('onRoute hook should not be called when it registered after route', t => {\n  t.plan(3)\n  const fastify = Fastify()\n\n  fastify.addHook('onRoute', () => {\n    t.pass()\n  })\n\n  fastify.get('/', function (req, reply) {\n    reply.send()\n  })\n\n  fastify.addHook('onRoute', () => {\n    t.fail('should not be called')\n  })\n\n  fastify.ready(err => {\n    t.error(err)\n  })\n})\n\ntest('onResponse hook should log request error', t => {\n  t.plan(4)\n\n  let fastify = null\n  const logStream = split(JSON.parse)\n  try {\n    fastify = Fastify({\n      logger: {\n        stream: logStream,\n        level: 'error'\n      }\n    })\n  } catch (e) {\n    t.fail()\n  }\n\n  logStream.once('data', line => {\n    t.equal(line.msg, 'request errored')\n    t.equal(line.level, 50)\n  })\n\n  fastify.addHook('onResponse', (request, reply, done) => {\n    done(new Error('kaboom'))\n  })\n\n  fastify.get('/root', (request, reply) => {\n    reply.send()\n  })\n\n  fastify.inject('/root', (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 200)\n  })\n})\n\ntest('onResponse hook should support encapsulation / 1', t => {\n  t.plan(5)\n  const fastify = Fastify()\n\n  fastify.register((instance, opts, done) => {\n    instance.addHook('onResponse', (request, reply, done) => {\n      t.equal(reply.plugin, true)\n      done()\n    })\n\n    instance.get('/plugin', (request, reply) => {\n      reply.plugin = true\n      reply.send()\n    })\n\n    done()\n  })\n\n  fastify.get('/root', (request, reply) => {\n    reply.send()\n  })\n\n  fastify.inject('/root', (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 200)\n  })\n\n  fastify.inject('/plugin', (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 200)\n  })\n})\n\ntest('onResponse hook should support encapsulation / 2', t => {\n  t.plan(3)\n  const fastify = Fastify()\n  let pluginInstance\n\n  fastify.addHook('onResponse', () => {})\n\n  fastify.register((instance, opts, done) => {\n    instance.addHook('onResponse', () => {})\n    pluginInstance = instance\n    done()\n  })\n\n  fastify.ready(err => {\n    t.error(err)\n    t.equal(fastify[symbols.kHooks].onResponse.length, 1)\n    t.equal(pluginInstance[symbols.kHooks].onResponse.length, 2)\n  })\n})\n\ntest('onResponse hook should support encapsulation / 3', t => {\n  t.plan(16)\n  const fastify = Fastify()\n  fastify.decorate('hello', 'world')\n\n  fastify.addHook('onResponse', function (request, reply, done) {\n    t.ok(this.hello)\n    t.ok('onResponse called')\n    done()\n  })\n\n  fastify.get('/first', (req, reply) => {\n    reply.send({ hello: 'world' })\n  })\n\n  fastify.register((instance, opts, done) => {\n    instance.decorate('hello2', 'world')\n    instance.addHook('onResponse', function (request, reply, done) {\n      t.ok(this.hello)\n      t.ok(this.hello2)\n      t.ok('onResponse called')\n      done()\n    })\n\n    instance.get('/second', (req, reply) => {\n      reply.send({ hello: 'world' })\n    })\n\n    done()\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port + '/first'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(response.headers['content-length'], '' + body.length)\n      t.same(JSON.parse(body), { hello: 'world' })\n    })\n\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port + '/second'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(response.headers['content-length'], '' + body.length)\n      t.same(JSON.parse(body), { hello: 'world' })\n    })\n  })\n})\n\ntest('onSend hook should support encapsulation / 1', t => {\n  t.plan(3)\n  const fastify = Fastify()\n  let pluginInstance\n\n  fastify.addHook('onSend', () => {})\n\n  fastify.register((instance, opts, done) => {\n    instance.addHook('onSend', () => {})\n    pluginInstance = instance\n    done()\n  })\n\n  fastify.ready(err => {\n    t.error(err)\n    t.equal(fastify[symbols.kHooks].onSend.length, 1)\n    t.equal(pluginInstance[symbols.kHooks].onSend.length, 2)\n  })\n})\n\ntest('onSend hook should support encapsulation / 2', t => {\n  t.plan(16)\n  const fastify = Fastify()\n  fastify.decorate('hello', 'world')\n\n  fastify.addHook('onSend', function (request, reply, thePayload, done) {\n    t.ok(this.hello)\n    t.ok('onSend called')\n    done()\n  })\n\n  fastify.get('/first', (req, reply) => {\n    reply.send({ hello: 'world' })\n  })\n\n  fastify.register((instance, opts, done) => {\n    instance.decorate('hello2', 'world')\n    instance.addHook('onSend', function (request, reply, thePayload, done) {\n      t.ok(this.hello)\n      t.ok(this.hello2)\n      t.ok('onSend called')\n      done()\n    })\n\n    instance.get('/second', (req, reply) => {\n      reply.send({ hello: 'world' })\n    })\n\n    done()\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port + '/first'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(response.headers['content-length'], '' + body.length)\n      t.same(JSON.parse(body), { hello: 'world' })\n    })\n\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port + '/second'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(response.headers['content-length'], '' + body.length)\n      t.same(JSON.parse(body), { hello: 'world' })\n    })\n  })\n})\n\ntest('onSend hook is called after payload is serialized and headers are set', t => {\n  t.plan(30)\n  const fastify = Fastify()\n\n  fastify.register((instance, opts, done) => {\n    const thePayload = { hello: 'world' }\n\n    instance.addHook('onSend', function (request, reply, payload, done) {\n      t.same(JSON.parse(payload), thePayload)\n      t.equal(reply[symbols.kReplyHeaders]['content-type'], 'application/json; charset=utf-8')\n      done()\n    })\n\n    instance.get('/json', (request, reply) => {\n      reply.send(thePayload)\n    })\n\n    done()\n  })\n\n  fastify.register((instance, opts, done) => {\n    instance.addHook('onSend', function (request, reply, payload, done) {\n      t.equal(payload, 'some text')\n      t.equal(reply[symbols.kReplyHeaders]['content-type'], 'text/plain; charset=utf-8')\n      done()\n    })\n\n    instance.get('/text', (request, reply) => {\n      reply.send('some text')\n    })\n\n    done()\n  })\n\n  fastify.register((instance, opts, done) => {\n    const thePayload = Buffer.from('buffer payload')\n\n    instance.addHook('onSend', function (request, reply, payload, done) {\n      t.equal(payload, thePayload)\n      t.equal(reply[symbols.kReplyHeaders]['content-type'], 'application/octet-stream')\n      done()\n    })\n\n    instance.get('/buffer', (request, reply) => {\n      reply.send(thePayload)\n    })\n\n    done()\n  })\n\n  fastify.register((instance, opts, done) => {\n    let chunk = 'stream payload'\n    const thePayload = new stream.Readable({\n      read () {\n        this.push(chunk)\n        chunk = null\n      }\n    })\n\n    instance.addHook('onSend', function (request, reply, payload, done) {\n      t.equal(payload, thePayload)\n      t.equal(reply[symbols.kReplyHeaders]['content-type'], 'application/octet-stream')\n      done()\n    })\n\n    instance.get('/stream', (request, reply) => {\n      reply.header('content-type', 'application/octet-stream')\n      reply.send(thePayload)\n    })\n\n    done()\n  })\n\n  fastify.register((instance, opts, done) => {\n    const serializedPayload = 'serialized'\n\n    instance.addHook('onSend', function (request, reply, payload, done) {\n      t.equal(payload, serializedPayload)\n      t.equal(reply[symbols.kReplyHeaders]['content-type'], 'text/custom')\n      done()\n    })\n\n    instance.get('/custom-serializer', (request, reply) => {\n      reply\n        .serializer(() => serializedPayload)\n        .type('text/custom')\n        .send('needs to be serialized')\n    })\n\n    done()\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/json'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 200)\n    t.same(JSON.parse(res.payload), { hello: 'world' })\n    t.equal(res.headers['content-length'], '17')\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/text'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 200)\n    t.same(res.payload, 'some text')\n    t.equal(res.headers['content-length'], '9')\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/buffer'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 200)\n    t.same(res.payload, 'buffer payload')\n    t.equal(res.headers['content-length'], '14')\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/stream'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 200)\n    t.same(res.payload, 'stream payload')\n    t.equal(res.headers['transfer-encoding'], 'chunked')\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/custom-serializer'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 200)\n    t.same(res.payload, 'serialized')\n    t.equal(res.headers['content-type'], 'text/custom')\n  })\n})\n\ntest('modify payload', t => {\n  t.plan(10)\n  const fastify = Fastify()\n  const payload = { hello: 'world' }\n  const modifiedPayload = { hello: 'modified' }\n  const anotherPayload = '\"winter is coming\"'\n\n  fastify.addHook('onSend', function (request, reply, thePayload, done) {\n    t.ok('onSend called')\n    t.same(JSON.parse(thePayload), payload)\n    thePayload = thePayload.replace('world', 'modified')\n    done(null, thePayload)\n  })\n\n  fastify.addHook('onSend', function (request, reply, thePayload, done) {\n    t.ok('onSend called')\n    t.same(JSON.parse(thePayload), modifiedPayload)\n    done(null, anotherPayload)\n  })\n\n  fastify.addHook('onSend', function (request, reply, thePayload, done) {\n    t.ok('onSend called')\n    t.equal(thePayload, anotherPayload)\n    done()\n  })\n\n  fastify.get('/', (req, reply) => {\n    reply.send(payload)\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.payload, anotherPayload)\n    t.equal(res.statusCode, 200)\n    t.equal(res.headers['content-length'], '18')\n  })\n})\n\ntest('clear payload', t => {\n  t.plan(6)\n  const fastify = Fastify()\n\n  fastify.addHook('onSend', function (request, reply, payload, done) {\n    t.ok('onSend called')\n    reply.code(304)\n    done(null, null)\n  })\n\n  fastify.get('/', (req, reply) => {\n    reply.send({ hello: 'world' })\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 304)\n    t.equal(res.payload, '')\n    t.equal(res.headers['content-length'], undefined)\n    t.equal(res.headers['content-type'], 'application/json; charset=utf-8')\n  })\n})\n\ntest('onSend hook throws', t => {\n  t.plan(11)\n  const Fastify = proxyquire('..', {\n    './lib/schemas.js': {\n      getSchemaSerializer: (param1, param2, param3) => {\n        t.equal(param3, 'application/json; charset=utf-8', 'param3 should be \"application/json; charset=utf-8\"')\n      }\n    }\n  })\n  const fastify = Fastify()\n  fastify.addHook('onSend', function (request, reply, payload, done) {\n    if (request.raw.method === 'DELETE') {\n      done(new Error('some error'))\n      return\n    }\n\n    if (request.raw.method === 'PUT') {\n      throw new Error('some error')\n    }\n\n    if (request.raw.method === 'POST') {\n      throw new Error('some error')\n    }\n\n    done()\n  })\n\n  fastify.get('/', (req, reply) => {\n    reply.send({ hello: 'world' })\n  })\n\n  fastify.post('/', {\n    schema: {\n      response: {\n        200: {\n          content: {\n            'application/json': {\n              schema: {\n                name: { type: 'string' },\n                image: { type: 'string' },\n                address: { type: 'string' }\n              }\n            }\n          }\n        }\n      }\n    }\n  }, (req, reply) => {\n    reply.send({ hello: 'world' })\n  })\n\n  fastify.delete('/', (req, reply) => {\n    reply.send({ hello: 'world' })\n  })\n\n  fastify.put('/', (req, reply) => {\n    reply.send({ hello: 'world' })\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(response.headers['content-length'], '' + body.length)\n      t.same(JSON.parse(body), { hello: 'world' })\n    })\n    sget({\n      method: 'POST',\n      url: 'http://localhost:' + fastify.server.address().port\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 500)\n    })\n    sget({\n      method: 'DELETE',\n      url: 'http://localhost:' + fastify.server.address().port\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 500)\n    })\n    sget({\n      method: 'PUT',\n      url: 'http://localhost:' + fastify.server.address().port\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 500)\n    })\n  })\n})\n\ntest('onSend hook should receive valid request and reply objects if onRequest hook fails', t => {\n  t.plan(4)\n  const fastify = Fastify()\n\n  fastify.decorateRequest('testDecorator', 'testDecoratorVal')\n  fastify.decorateReply('testDecorator', 'testDecoratorVal')\n\n  fastify.addHook('onRequest', function (req, reply, done) {\n    done(new Error('onRequest hook failed'))\n  })\n\n  fastify.addHook('onSend', function (request, reply, payload, done) {\n    t.equal(request.testDecorator, 'testDecoratorVal')\n    t.equal(reply.testDecorator, 'testDecoratorVal')\n    done()\n  })\n\n  fastify.get('/', (req, reply) => {\n    reply.send('hello')\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 500)\n  })\n})\n\ntest('onSend hook should receive valid request and reply objects if a custom content type parser fails', t => {\n  t.plan(4)\n  const fastify = Fastify()\n\n  fastify.decorateRequest('testDecorator', 'testDecoratorVal')\n  fastify.decorateReply('testDecorator', 'testDecoratorVal')\n\n  fastify.addContentTypeParser('*', function (req, payload, done) {\n    done(new Error('content type parser failed'))\n  })\n\n  fastify.addHook('onSend', function (request, reply, payload, done) {\n    t.equal(request.testDecorator, 'testDecoratorVal')\n    t.equal(reply.testDecorator, 'testDecoratorVal')\n    done()\n  })\n\n  fastify.get('/', (req, reply) => {\n    reply.send('hello')\n  })\n\n  fastify.inject({\n    method: 'POST',\n    url: '/',\n    payload: 'body'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 500)\n  })\n})\n\ntest('Content-Length header should be updated if onSend hook modifies the payload', t => {\n  t.plan(2)\n\n  const instance = Fastify()\n\n  instance.get('/', async (_, rep) => {\n    rep.header('content-length', 3)\n    return 'foo'\n  })\n\n  instance.addHook('onSend', async () => 'bar12233000')\n\n  instance.inject({\n    method: 'GET',\n    url: '/'\n  }, (err, res) => {\n    t.error(err)\n    const payloadLength = Buffer.byteLength(res.body)\n    const contentLength = Number(res.headers['content-length'])\n\n    t.equal(payloadLength, contentLength)\n  })\n})\n\ntest('cannot add hook after binding', t => {\n  t.plan(2)\n  const instance = Fastify()\n\n  instance.get('/', function (request, reply) {\n    reply.send({ hello: 'world' })\n  })\n\n  instance.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(instance.server.close.bind(instance.server))\n\n    try {\n      instance.addHook('onRequest', () => {})\n      t.fail()\n    } catch (e) {\n      t.pass()\n    }\n  })\n})\n\ntest('onRequest hooks should be able to block a request', t => {\n  t.plan(5)\n  const fastify = Fastify()\n\n  fastify.addHook('onRequest', (req, reply, done) => {\n    reply.send('hello')\n    done()\n  })\n\n  fastify.addHook('onRequest', (req, reply, done) => {\n    t.fail('this should not be called')\n  })\n\n  fastify.addHook('preHandler', (req, reply, done) => {\n    t.fail('this should not be called')\n  })\n\n  fastify.addHook('onSend', (req, reply, payload, done) => {\n    t.ok('called')\n    done()\n  })\n\n  fastify.addHook('onResponse', (request, reply, done) => {\n    t.ok('called')\n    done()\n  })\n\n  fastify.get('/', function (request, reply) {\n    t.fail('we should not be here')\n  })\n\n  fastify.inject({\n    url: '/',\n    method: 'GET'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 200)\n    t.equal(res.payload, 'hello')\n  })\n})\n\ntest('preValidation hooks should be able to block a request', t => {\n  t.plan(5)\n  const fastify = Fastify()\n\n  fastify.addHook('preValidation', (req, reply, done) => {\n    reply.send('hello')\n    done()\n  })\n\n  fastify.addHook('preValidation', (req, reply, done) => {\n    t.fail('this should not be called')\n  })\n\n  fastify.addHook('preHandler', (req, reply, done) => {\n    t.fail('this should not be called')\n  })\n\n  fastify.addHook('onSend', (req, reply, payload, done) => {\n    t.ok('called')\n    done()\n  })\n\n  fastify.addHook('onResponse', (request, reply, done) => {\n    t.ok('called')\n    done()\n  })\n\n  fastify.get('/', function (request, reply) {\n    t.fail('we should not be here')\n  })\n\n  fastify.inject({\n    url: '/',\n    method: 'GET'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 200)\n    t.equal(res.payload, 'hello')\n  })\n})\n\ntest('preValidation hooks should be able to change request body before validation', t => {\n  t.plan(4)\n  const fastify = Fastify()\n\n  fastify.addHook('preValidation', (req, _reply, done) => {\n    const buff = Buffer.from(req.body.message, 'base64')\n    req.body = JSON.parse(buff.toString('utf-8'))\n    done()\n  })\n\n  fastify.post(\n    '/',\n    {\n      schema: {\n        body: {\n          type: 'object',\n          properties: {\n            foo: {\n              type: 'string'\n            },\n            bar: {\n              type: 'number'\n            }\n          },\n          required: ['foo', 'bar']\n        }\n      }\n    },\n    (req, reply) => {\n      t.pass()\n      reply.status(200).send('hello')\n    }\n  )\n\n  fastify.inject({\n    url: '/',\n    method: 'POST',\n    payload: {\n      message: Buffer.from(JSON.stringify({ foo: 'example', bar: 1 })).toString('base64')\n    }\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 200)\n    t.equal(res.payload, 'hello')\n  })\n})\n\ntest('preParsing hooks should be able to block a request', t => {\n  t.plan(5)\n  const fastify = Fastify()\n\n  fastify.addHook('preParsing', (req, reply, payload, done) => {\n    reply.send('hello')\n    done()\n  })\n\n  fastify.addHook('preParsing', (req, reply, payload, done) => {\n    t.fail('this should not be called')\n  })\n\n  fastify.addHook('preHandler', (req, reply, done) => {\n    t.fail('this should not be called')\n  })\n\n  fastify.addHook('onSend', (req, reply, payload, done) => {\n    t.ok('called')\n    done()\n  })\n\n  fastify.addHook('onResponse', (request, reply, done) => {\n    t.ok('called')\n    done()\n  })\n\n  fastify.get('/', function (request, reply) {\n    t.fail('we should not be here')\n  })\n\n  fastify.inject({\n    url: '/',\n    method: 'GET'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 200)\n    t.equal(res.payload, 'hello')\n  })\n})\n\ntest('preHandler hooks should be able to block a request', t => {\n  t.plan(5)\n  const fastify = Fastify()\n\n  fastify.addHook('preHandler', (req, reply, done) => {\n    reply.send('hello')\n    done()\n  })\n\n  fastify.addHook('preHandler', (req, reply, done) => {\n    t.fail('this should not be called')\n  })\n\n  fastify.addHook('onSend', (req, reply, payload, done) => {\n    t.equal(payload, 'hello')\n    done()\n  })\n\n  fastify.addHook('onResponse', (request, reply, done) => {\n    t.ok('called')\n    done()\n  })\n\n  fastify.get('/', function (request, reply) {\n    t.fail('we should not be here')\n  })\n\n  fastify.inject({\n    url: '/',\n    method: 'GET'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 200)\n    t.equal(res.payload, 'hello')\n  })\n})\n\ntest('onRequest hooks should be able to block a request (last hook)', t => {\n  t.plan(5)\n  const fastify = Fastify()\n\n  fastify.addHook('onRequest', (req, reply, done) => {\n    reply.send('hello')\n    done()\n  })\n\n  fastify.addHook('preHandler', (req, reply, done) => {\n    t.fail('this should not be called')\n  })\n\n  fastify.addHook('onSend', (req, reply, payload, done) => {\n    t.ok('called')\n    done()\n  })\n\n  fastify.addHook('onResponse', (request, reply, done) => {\n    t.ok('called')\n    done()\n  })\n\n  fastify.get('/', function (request, reply) {\n    t.fail('we should not be here')\n  })\n\n  fastify.inject({\n    url: '/',\n    method: 'GET'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 200)\n    t.equal(res.payload, 'hello')\n  })\n})\n\ntest('preHandler hooks should be able to block a request (last hook)', t => {\n  t.plan(5)\n  const fastify = Fastify()\n\n  fastify.addHook('preHandler', (req, reply, done) => {\n    reply.send('hello')\n    done()\n  })\n\n  fastify.addHook('onSend', (req, reply, payload, done) => {\n    t.equal(payload, 'hello')\n    done()\n  })\n\n  fastify.addHook('onResponse', (request, reply, done) => {\n    t.ok('called')\n    done()\n  })\n\n  fastify.get('/', function (request, reply) {\n    t.fail('we should not be here')\n  })\n\n  fastify.inject({\n    url: '/',\n    method: 'GET'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 200)\n    t.equal(res.payload, 'hello')\n  })\n})\n\ntest('preParsing hooks should handle errors', t => {\n  t.plan(3)\n  const fastify = Fastify()\n\n  fastify.addHook('preParsing', (req, reply, payload, done) => {\n    const e = new Error('kaboom')\n    e.statusCode = 501\n    throw e\n  })\n\n  fastify.post('/', function (request, reply) {\n    reply.send(request.body)\n  })\n\n  fastify.inject({\n    method: 'POST',\n    url: '/',\n    payload: { hello: 'world' }\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 501)\n    t.same(JSON.parse(res.payload), { error: 'Not Implemented', message: 'kaboom', statusCode: 501 })\n  })\n})\n\ntest('onRequest respond with a stream', t => {\n  t.plan(4)\n  const fastify = Fastify()\n\n  fastify.addHook('onRequest', (req, reply, done) => {\n    const stream = fs.createReadStream(process.cwd() + '/test/stream.test.js', 'utf8')\n    // stream.pipe(res)\n    // res.once('finish', done)\n    reply.send(stream)\n  })\n\n  fastify.addHook('onRequest', (req, res, done) => {\n    t.fail('this should not be called')\n  })\n\n  fastify.addHook('preHandler', (req, reply, done) => {\n    t.fail('this should not be called')\n  })\n\n  fastify.addHook('onSend', (req, reply, payload, done) => {\n    t.ok('called')\n    done()\n  })\n\n  fastify.addHook('onResponse', (request, reply, done) => {\n    t.ok('called')\n    done()\n  })\n\n  fastify.get('/', function (request, reply) {\n    t.fail('we should not be here')\n  })\n\n  fastify.inject({\n    url: '/',\n    method: 'GET'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 200)\n  })\n})\n\ntest('preHandler respond with a stream', t => {\n  t.plan(7)\n  const fastify = Fastify()\n\n  fastify.addHook('onRequest', (req, reply, done) => {\n    t.ok('called')\n    done()\n  })\n\n  // we are calling `reply.send` inside the `preHandler` hook with a stream,\n  // this triggers the `onSend` hook event if `preHandler` has not yet finished\n  const order = [1, 2]\n\n  fastify.addHook('preHandler', (req, reply, done) => {\n    const stream = fs.createReadStream(process.cwd() + '/test/stream.test.js', 'utf8')\n    reply.send(stream)\n    reply.raw.once('finish', () => {\n      t.equal(order.shift(), 2)\n      done()\n    })\n  })\n\n  fastify.addHook('preHandler', (req, reply, done) => {\n    t.fail('this should not be called')\n  })\n\n  fastify.addHook('onSend', (req, reply, payload, done) => {\n    t.equal(order.shift(), 1)\n    t.equal(typeof payload.pipe, 'function')\n    done()\n  })\n\n  fastify.addHook('onResponse', (request, reply, done) => {\n    t.ok('called')\n    done()\n  })\n\n  fastify.get('/', function (request, reply) {\n    t.fail('we should not be here')\n  })\n\n  fastify.inject({\n    url: '/',\n    method: 'GET'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 200)\n  })\n})\n\ntest('Register an hook after a plugin inside a plugin', t => {\n  t.plan(6)\n  const fastify = Fastify()\n\n  fastify.register(fp(function (instance, opts, done) {\n    instance.addHook('preHandler', function (req, reply, done) {\n      t.ok('called')\n      done()\n    })\n\n    instance.get('/', function (request, reply) {\n      reply.send({ hello: 'world' })\n    })\n\n    done()\n  }))\n\n  fastify.register(fp(function (instance, opts, done) {\n    instance.addHook('preHandler', function (req, reply, done) {\n      t.ok('called')\n      done()\n    })\n\n    instance.addHook('preHandler', function (req, reply, done) {\n      t.ok('called')\n      done()\n    })\n\n    done()\n  }))\n\n  fastify.inject({\n    url: '/',\n    method: 'GET'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 200)\n    t.same(JSON.parse(res.payload), { hello: 'world' })\n  })\n})\n\ntest('Register an hook after a plugin inside a plugin (with preHandler option)', t => {\n  t.plan(7)\n  const fastify = Fastify()\n\n  fastify.register(fp(function (instance, opts, done) {\n    instance.addHook('preHandler', function (req, reply, done) {\n      t.ok('called')\n      done()\n    })\n\n    instance.get('/', {\n      preHandler: (req, reply, done) => {\n        t.ok('called')\n        done()\n      }\n    }, function (request, reply) {\n      reply.send({ hello: 'world' })\n    })\n\n    done()\n  }))\n\n  fastify.register(fp(function (instance, opts, done) {\n    instance.addHook('preHandler', function (req, reply, done) {\n      t.ok('called')\n      done()\n    })\n\n    instance.addHook('preHandler', function (req, reply, done) {\n      t.ok('called')\n      done()\n    })\n\n    done()\n  }))\n\n  fastify.inject({\n    url: '/',\n    method: 'GET'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 200)\n    t.same(JSON.parse(res.payload), { hello: 'world' })\n  })\n})\n\ntest('Register hooks inside a plugin after an encapsulated plugin', t => {\n  t.plan(7)\n  const fastify = Fastify()\n\n  fastify.register(function (instance, opts, done) {\n    instance.get('/', function (request, reply) {\n      reply.send({ hello: 'world' })\n    })\n\n    done()\n  })\n\n  fastify.register(fp(function (instance, opts, done) {\n    instance.addHook('onRequest', function (req, reply, done) {\n      t.ok('called')\n      done()\n    })\n\n    instance.addHook('preHandler', function (request, reply, done) {\n      t.ok('called')\n      done()\n    })\n\n    instance.addHook('onSend', function (request, reply, payload, done) {\n      t.ok('called')\n      done()\n    })\n\n    instance.addHook('onResponse', function (request, reply, done) {\n      t.ok('called')\n      done()\n    })\n\n    done()\n  }))\n\n  fastify.inject('/', (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 200)\n    t.same(JSON.parse(res.payload), { hello: 'world' })\n  })\n})\n\ntest('onRequest hooks should run in the order in which they are defined', t => {\n  t.plan(9)\n  const fastify = Fastify()\n\n  fastify.register(function (instance, opts, done) {\n    instance.addHook('onRequest', function (req, reply, done) {\n      t.equal(req.previous, undefined)\n      req.previous = 1\n      done()\n    })\n\n    instance.get('/', function (request, reply) {\n      t.equal(request.previous, 5)\n      reply.send({ hello: 'world' })\n    })\n\n    instance.register(fp(function (i, opts, done) {\n      i.addHook('onRequest', function (req, reply, done) {\n        t.equal(req.previous, 1)\n        req.previous = 2\n        done()\n      })\n      done()\n    }))\n\n    done()\n  })\n\n  fastify.register(fp(function (instance, opts, done) {\n    instance.addHook('onRequest', function (req, reply, done) {\n      t.equal(req.previous, 2)\n      req.previous = 3\n      done()\n    })\n\n    instance.register(fp(function (i, opts, done) {\n      i.addHook('onRequest', function (req, reply, done) {\n        t.equal(req.previous, 3)\n        req.previous = 4\n        done()\n      })\n      done()\n    }))\n\n    instance.addHook('onRequest', function (req, reply, done) {\n      t.equal(req.previous, 4)\n      req.previous = 5\n      done()\n    })\n\n    done()\n  }))\n\n  fastify.inject('/', (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 200)\n    t.same(JSON.parse(res.payload), { hello: 'world' })\n  })\n})\n\ntest('preHandler hooks should run in the order in which they are defined', t => {\n  t.plan(9)\n  const fastify = Fastify()\n\n  fastify.register(function (instance, opts, done) {\n    instance.addHook('preHandler', function (request, reply, done) {\n      t.equal(request.previous, undefined)\n      request.previous = 1\n      done()\n    })\n\n    instance.get('/', function (request, reply) {\n      t.equal(request.previous, 5)\n      reply.send({ hello: 'world' })\n    })\n\n    instance.register(fp(function (i, opts, done) {\n      i.addHook('preHandler', function (request, reply, done) {\n        t.equal(request.previous, 1)\n        request.previous = 2\n        done()\n      })\n      done()\n    }))\n\n    done()\n  })\n\n  fastify.register(fp(function (instance, opts, done) {\n    instance.addHook('preHandler', function (request, reply, done) {\n      t.equal(request.previous, 2)\n      request.previous = 3\n      done()\n    })\n\n    instance.register(fp(function (i, opts, done) {\n      i.addHook('preHandler', function (request, reply, done) {\n        t.equal(request.previous, 3)\n        request.previous = 4\n        done()\n      })\n      done()\n    }))\n\n    instance.addHook('preHandler', function (request, reply, done) {\n      t.equal(request.previous, 4)\n      request.previous = 5\n      done()\n    })\n\n    done()\n  }))\n\n  fastify.inject('/', (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 200)\n    t.same(JSON.parse(res.payload), { hello: 'world' })\n  })\n})\n\ntest('onSend hooks should run in the order in which they are defined', t => {\n  t.plan(8)\n  const fastify = Fastify()\n\n  fastify.register(function (instance, opts, done) {\n    instance.addHook('onSend', function (request, reply, payload, done) {\n      t.equal(request.previous, undefined)\n      request.previous = 1\n      done()\n    })\n\n    instance.get('/', function (request, reply) {\n      reply.send({})\n    })\n\n    instance.register(fp(function (i, opts, done) {\n      i.addHook('onSend', function (request, reply, payload, done) {\n        t.equal(request.previous, 1)\n        request.previous = 2\n        done()\n      })\n      done()\n    }))\n\n    done()\n  })\n\n  fastify.register(fp(function (instance, opts, done) {\n    instance.addHook('onSend', function (request, reply, payload, done) {\n      t.equal(request.previous, 2)\n      request.previous = 3\n      done()\n    })\n\n    instance.register(fp(function (i, opts, done) {\n      i.addHook('onSend', function (request, reply, payload, done) {\n        t.equal(request.previous, 3)\n        request.previous = 4\n        done()\n      })\n      done()\n    }))\n\n    instance.addHook('onSend', function (request, reply, payload, done) {\n      t.equal(request.previous, 4)\n      done(null, '5')\n    })\n\n    done()\n  }))\n\n  fastify.inject('/', (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 200)\n    t.same(JSON.parse(res.payload), 5)\n  })\n})\n\ntest('onResponse hooks should run in the order in which they are defined', t => {\n  t.plan(8)\n  const fastify = Fastify()\n\n  fastify.register(function (instance, opts, done) {\n    instance.addHook('onResponse', function (request, reply, done) {\n      t.equal(reply.previous, undefined)\n      reply.previous = 1\n      done()\n    })\n\n    instance.get('/', function (request, reply) {\n      reply.send({ hello: 'world' })\n    })\n\n    instance.register(fp(function (i, opts, done) {\n      i.addHook('onResponse', function (request, reply, done) {\n        t.equal(reply.previous, 1)\n        reply.previous = 2\n        done()\n      })\n      done()\n    }))\n\n    done()\n  })\n\n  fastify.register(fp(function (instance, opts, done) {\n    instance.addHook('onResponse', function (request, reply, done) {\n      t.equal(reply.previous, 2)\n      reply.previous = 3\n      done()\n    })\n\n    instance.register(fp(function (i, opts, done) {\n      i.addHook('onResponse', function (request, reply, done) {\n        t.equal(reply.previous, 3)\n        reply.previous = 4\n        done()\n      })\n      done()\n    }))\n\n    instance.addHook('onResponse', function (request, reply, done) {\n      t.equal(reply.previous, 4)\n      done()\n    })\n\n    done()\n  }))\n\n  fastify.inject('/', (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 200)\n    t.same(JSON.parse(res.payload), { hello: 'world' })\n  })\n})\n\ntest('onRequest, preHandler, and onResponse hooks that resolve to a value do not cause an error', t => {\n  t.plan(3)\n  const fastify = Fastify()\n\n  fastify\n    .addHook('onRequest', () => Promise.resolve(1))\n    .addHook('onRequest', () => Promise.resolve(true))\n    .addHook('preValidation', () => Promise.resolve(null))\n    .addHook('preValidation', () => Promise.resolve('a'))\n    .addHook('preHandler', () => Promise.resolve(null))\n    .addHook('preHandler', () => Promise.resolve('a'))\n    .addHook('onResponse', () => Promise.resolve({}))\n    .addHook('onResponse', () => Promise.resolve([]))\n\n  fastify.get('/', (request, reply) => {\n    reply.send('hello')\n  })\n\n  fastify.inject('/', (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 200)\n    t.equal(res.payload, 'hello')\n  })\n})\n\ntest('If a response header has been set inside an hook it shoulod not be overwritten by the final response handler', t => {\n  t.plan(5)\n  const fastify = Fastify()\n\n  fastify.addHook('onRequest', (req, reply, done) => {\n    reply.header('X-Custom-Header', 'hello')\n    done()\n  })\n\n  fastify.get('/', (request, reply) => {\n    reply.send('hello')\n  })\n\n  fastify.inject('/', (err, res) => {\n    t.error(err)\n    t.equal(res.headers['x-custom-header'], 'hello')\n    t.equal(res.headers['content-type'], 'text/plain; charset=utf-8')\n    t.equal(res.statusCode, 200)\n    t.equal(res.payload, 'hello')\n  })\n})\n\ntest('If the content type has been set inside an hook it should not be changed', t => {\n  t.plan(5)\n  const fastify = Fastify()\n\n  fastify.addHook('onRequest', (req, reply, done) => {\n    reply.header('content-type', 'text/html')\n    done()\n  })\n\n  fastify.get('/', (request, reply) => {\n    t.ok(reply[symbols.kReplyHeaders]['content-type'])\n    reply.send('hello')\n  })\n\n  fastify.inject('/', (err, res) => {\n    t.error(err)\n    t.equal(res.headers['content-type'], 'text/html')\n    t.equal(res.statusCode, 200)\n    t.equal(res.payload, 'hello')\n  })\n})\n\ntest('request in onRequest, preParsing, preValidation and onResponse', t => {\n  t.plan(18)\n  const fastify = Fastify()\n\n  fastify.addHook('onRequest', function (request, reply, done) {\n    t.same(request.body, undefined)\n    t.same(request.query, { key: 'value' })\n    t.same(request.params, { greeting: 'hello' })\n    t.same(request.headers, {\n      'content-length': '17',\n      'content-type': 'application/json',\n      host: 'localhost:80',\n      'user-agent': 'lightMyRequest',\n      'x-custom': 'hello'\n    })\n    done()\n  })\n\n  fastify.addHook('preParsing', function (request, reply, payload, done) {\n    t.same(request.body, undefined)\n    t.same(request.query, { key: 'value' })\n    t.same(request.params, { greeting: 'hello' })\n    t.same(request.headers, {\n      'content-length': '17',\n      'content-type': 'application/json',\n      host: 'localhost:80',\n      'user-agent': 'lightMyRequest',\n      'x-custom': 'hello'\n    })\n    done()\n  })\n\n  fastify.addHook('preValidation', function (request, reply, done) {\n    t.same(request.body, { hello: 'world' })\n    t.same(request.query, { key: 'value' })\n    t.same(request.params, { greeting: 'hello' })\n    t.same(request.headers, {\n      'content-length': '17',\n      'content-type': 'application/json',\n      host: 'localhost:80',\n      'user-agent': 'lightMyRequest',\n      'x-custom': 'hello'\n    })\n    done()\n  })\n\n  fastify.addHook('onResponse', function (request, reply, done) {\n    t.same(request.body, { hello: 'world' })\n    t.same(request.query, { key: 'value' })\n    t.same(request.params, { greeting: 'hello' })\n    t.same(request.headers, {\n      'content-length': '17',\n      'content-type': 'application/json',\n      host: 'localhost:80',\n      'user-agent': 'lightMyRequest',\n      'x-custom': 'hello'\n    })\n    done()\n  })\n\n  fastify.post('/:greeting', function (req, reply) {\n    reply.send('ok')\n  })\n\n  fastify.inject({\n    method: 'POST',\n    url: '/hello?key=value',\n    headers: { 'x-custom': 'hello' },\n    payload: { hello: 'world' }\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 200)\n  })\n})\n\ntest('preValidation hook should support encapsulation / 1', t => {\n  t.plan(5)\n  const fastify = Fastify()\n\n  fastify.register((instance, opts, done) => {\n    instance.addHook('preValidation', (req, reply, done) => {\n      t.equal(req.raw.url, '/plugin')\n      done()\n    })\n\n    instance.get('/plugin', (request, reply) => {\n      reply.send()\n    })\n\n    done()\n  })\n\n  fastify.get('/root', (request, reply) => {\n    reply.send()\n  })\n\n  fastify.inject('/root', (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 200)\n  })\n\n  fastify.inject('/plugin', (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 200)\n  })\n})\n\ntest('preValidation hook should support encapsulation / 2', t => {\n  t.plan(3)\n  const fastify = Fastify()\n  let pluginInstance\n\n  fastify.addHook('preValidation', () => {})\n\n  fastify.register((instance, opts, done) => {\n    instance.addHook('preValidation', () => {})\n    pluginInstance = instance\n    done()\n  })\n\n  fastify.ready(err => {\n    t.error(err)\n    t.equal(fastify[symbols.kHooks].preValidation.length, 1)\n    t.equal(pluginInstance[symbols.kHooks].preValidation.length, 2)\n  })\n})\n\ntest('preValidation hook should support encapsulation / 3', t => {\n  t.plan(20)\n  const fastify = Fastify()\n  fastify.decorate('hello', 'world')\n\n  fastify.addHook('preValidation', function (req, reply, done) {\n    t.ok(this.hello)\n    t.ok(this.hello2)\n    req.first = true\n    done()\n  })\n\n  fastify.decorate('hello2', 'world')\n\n  fastify.get('/first', (req, reply) => {\n    t.ok(req.first)\n    t.notOk(req.second)\n    reply.send({ hello: 'world' })\n  })\n\n  fastify.register((instance, opts, done) => {\n    instance.decorate('hello3', 'world')\n    instance.addHook('preValidation', function (req, reply, done) {\n      t.ok(this.hello)\n      t.ok(this.hello2)\n      t.ok(this.hello3)\n      req.second = true\n      done()\n    })\n\n    instance.get('/second', (req, reply) => {\n      t.ok(req.first)\n      t.ok(req.second)\n      reply.send({ hello: 'world' })\n    })\n\n    done()\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port + '/first'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(response.headers['content-length'], '' + body.length)\n      t.same(JSON.parse(body), { hello: 'world' })\n    })\n\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port + '/second'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(response.headers['content-length'], '' + body.length)\n      t.same(JSON.parse(body), { hello: 'world' })\n    })\n  })\n})\n\ntest('onError hook', t => {\n  t.plan(3)\n\n  const fastify = Fastify()\n\n  const err = new Error('kaboom')\n\n  fastify.addHook('onError', (request, reply, error, done) => {\n    t.match(error, err)\n    done()\n  })\n\n  fastify.get('/', (req, reply) => {\n    reply.send(err)\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/'\n  }, (err, res) => {\n    t.error(err)\n    t.same(JSON.parse(res.payload), {\n      error: 'Internal Server Error',\n      message: 'kaboom',\n      statusCode: 500\n    })\n  })\n})\n\ntest('reply.send should throw if called inside the onError hook', t => {\n  t.plan(3)\n\n  const fastify = Fastify()\n\n  const err = new Error('kaboom')\n\n  fastify.addHook('onError', (request, reply, error, done) => {\n    try {\n      reply.send()\n      t.fail('Should throw')\n    } catch (err) {\n      t.equal(err.code, 'FST_ERR_SEND_INSIDE_ONERR')\n    }\n    done()\n  })\n\n  fastify.get('/', (req, reply) => {\n    reply.send(err)\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/'\n  }, (err, res) => {\n    t.error(err)\n    t.same(JSON.parse(res.payload), {\n      error: 'Internal Server Error',\n      message: 'kaboom',\n      statusCode: 500\n    })\n  })\n})\n\ntest('onError hook with setErrorHandler', t => {\n  t.test('Send error', t => {\n    t.plan(3)\n\n    const fastify = Fastify()\n\n    const external = new Error('ouch')\n    const internal = new Error('kaboom')\n\n    fastify.setErrorHandler((_, req, reply) => {\n      reply.send(external)\n    })\n\n    fastify.addHook('onError', (request, reply, error, done) => {\n      t.match(error, internal)\n      done()\n    })\n\n    fastify.get('/', (req, reply) => {\n      reply.send(internal)\n    })\n\n    fastify.inject({\n      method: 'GET',\n      url: '/'\n    }, (err, res) => {\n      t.error(err)\n      t.same(JSON.parse(res.payload), {\n        error: 'Internal Server Error',\n        message: 'ouch',\n        statusCode: 500\n      })\n    })\n  })\n\n  t.end()\n})\n\ntest('preParsing hook should run before parsing and be able to modify the payload', t => {\n  t.plan(5)\n  const fastify = Fastify()\n\n  fastify.addHook('preParsing', function (req, reply, payload, done) {\n    const modified = new stream.Readable()\n    modified.receivedEncodedLength = parseInt(req.headers['content-length'], 10)\n    modified.push(JSON.stringify({ hello: 'another world' }))\n    modified.push(null)\n    done(null, modified)\n  })\n\n  fastify.route({\n    method: 'POST',\n    url: '/first',\n    handler: function (req, reply) {\n      reply.send(req.body)\n    }\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    sget({\n      method: 'POST',\n      url: 'http://localhost:' + fastify.server.address().port + '/first',\n      body: { hello: 'world' },\n      json: true\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(response.headers['content-length'], '' + JSON.stringify(body).length)\n      t.same(body, { hello: 'another world' })\n    })\n  })\n})\n\ntest('preParsing hooks should run in the order in which they are defined', t => {\n  t.plan(5)\n  const fastify = Fastify()\n\n  fastify.addHook('preParsing', function (req, reply, payload, done) {\n    const modified = new stream.Readable()\n    modified.receivedEncodedLength = parseInt(req.headers['content-length'], 10)\n    modified.push('{\"hello\":')\n    done(null, modified)\n  })\n\n  fastify.addHook('preParsing', function (req, reply, payload, done) {\n    payload.push('\"another world\"}')\n    payload.push(null)\n    done(null, payload)\n  })\n\n  fastify.route({\n    method: 'POST',\n    url: '/first',\n    handler: function (req, reply) {\n      reply.send(req.body)\n    }\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    sget({\n      method: 'POST',\n      url: 'http://localhost:' + fastify.server.address().port + '/first',\n      body: { hello: 'world' },\n      json: true\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(response.headers['content-length'], '' + JSON.stringify(body).length)\n      t.same(body, { hello: 'another world' })\n    })\n  })\n})\n\ntest('preParsing hooks should support encapsulation', t => {\n  t.plan(9)\n  const fastify = Fastify()\n\n  fastify.addHook('preParsing', function (req, reply, payload, done) {\n    const modified = new stream.Readable()\n    modified.receivedEncodedLength = parseInt(req.headers['content-length'], 10)\n    modified.push('{\"hello\":\"another world\"}')\n    modified.push(null)\n    done(null, modified)\n  })\n\n  fastify.post('/first', (req, reply) => {\n    reply.send(req.body)\n  })\n\n  fastify.register((instance, opts, done) => {\n    instance.addHook('preParsing', function (req, reply, payload, done) {\n      const modified = new stream.Readable()\n      modified.receivedEncodedLength = payload.receivedEncodedLength || parseInt(req.headers['content-length'], 10)\n      modified.push('{\"hello\":\"encapsulated world\"}')\n      modified.push(null)\n      done(null, modified)\n    })\n\n    instance.post('/second', (req, reply) => {\n      reply.send(req.body)\n    })\n\n    done()\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    sget({\n      method: 'POST',\n      url: 'http://localhost:' + fastify.server.address().port + '/first',\n      body: { hello: 'world' },\n      json: true\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(response.headers['content-length'], '' + JSON.stringify(body).length)\n      t.same(body, { hello: 'another world' })\n    })\n\n    sget({\n      method: 'POST',\n      url: 'http://localhost:' + fastify.server.address().port + '/second',\n      body: { hello: 'world' },\n      json: true\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(response.headers['content-length'], '' + JSON.stringify(body).length)\n      t.same(body, { hello: 'encapsulated world' })\n    })\n  })\n})\n\ntest('preParsing hook should support encapsulation / 1', t => {\n  t.plan(5)\n  const fastify = Fastify()\n\n  fastify.register((instance, opts, done) => {\n    instance.addHook('preParsing', (req, reply, payload, done) => {\n      t.equal(req.raw.url, '/plugin')\n      done()\n    })\n\n    instance.get('/plugin', (request, reply) => {\n      reply.send()\n    })\n\n    done()\n  })\n\n  fastify.get('/root', (request, reply) => {\n    reply.send()\n  })\n\n  fastify.inject('/root', (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 200)\n  })\n\n  fastify.inject('/plugin', (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 200)\n  })\n})\n\ntest('preParsing hook should support encapsulation / 2', t => {\n  t.plan(3)\n  const fastify = Fastify()\n  let pluginInstance\n\n  fastify.addHook('preParsing', function a () {})\n\n  fastify.register((instance, opts, done) => {\n    instance.addHook('preParsing', function b () {})\n    pluginInstance = instance\n    done()\n  })\n\n  fastify.ready(err => {\n    t.error(err)\n    t.equal(fastify[symbols.kHooks].preParsing.length, 1)\n    t.equal(pluginInstance[symbols.kHooks].preParsing.length, 2)\n  })\n})\n\ntest('preParsing hook should support encapsulation / 3', t => {\n  t.plan(20)\n  const fastify = Fastify()\n  fastify.decorate('hello', 'world')\n\n  fastify.addHook('preParsing', function (req, reply, payload, done) {\n    t.ok(this.hello)\n    t.ok(this.hello2)\n    req.first = true\n    done()\n  })\n\n  fastify.decorate('hello2', 'world')\n\n  fastify.get('/first', (req, reply) => {\n    t.ok(req.first)\n    t.notOk(req.second)\n    reply.send({ hello: 'world' })\n  })\n\n  fastify.register((instance, opts, done) => {\n    instance.decorate('hello3', 'world')\n    instance.addHook('preParsing', function (req, reply, payload, done) {\n      t.ok(this.hello)\n      t.ok(this.hello2)\n      t.ok(this.hello3)\n      req.second = true\n      done()\n    })\n\n    instance.get('/second', (req, reply) => {\n      t.ok(req.first)\n      t.ok(req.second)\n      reply.send({ hello: 'world' })\n    })\n\n    done()\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port + '/first'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(response.headers['content-length'], '' + body.length)\n      t.same(JSON.parse(body), { hello: 'world' })\n    })\n\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port + '/second'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(response.headers['content-length'], '' + body.length)\n      t.same(JSON.parse(body), { hello: 'world' })\n    })\n  })\n})\n\ntest('preSerialization hook should run before serialization and be able to modify the payload', t => {\n  t.plan(5)\n  const fastify = Fastify()\n\n  fastify.addHook('preSerialization', function (req, reply, payload, done) {\n    payload.hello += '1'\n    payload.world = 'ok'\n\n    done(null, payload)\n  })\n\n  fastify.route({\n    method: 'GET',\n    url: '/first',\n    handler: function (req, reply) {\n      reply.send({ hello: 'world' })\n    },\n    schema: {\n      response: {\n        200: {\n          type: 'object',\n          properties: {\n            hello: {\n              type: 'string'\n            },\n            world: {\n              type: 'string'\n            }\n          },\n          required: ['world'],\n          additionalProperties: false\n        }\n      }\n    }\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port + '/first'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(response.headers['content-length'], '' + body.length)\n      t.same(JSON.parse(body), { hello: 'world1', world: 'ok' })\n    })\n  })\n})\n\ntest('preSerialization hook should be able to throw errors which are validated against schema response', t => {\n  const fastify = Fastify()\n\n  fastify.addHook('preSerialization', function (req, reply, payload, done) {\n    done(new Error('preSerialization aborted'))\n  })\n\n  fastify.setErrorHandler((err, request, reply) => {\n    t.equal(err.message, 'preSerialization aborted')\n    err.world = 'error'\n    reply.send(err)\n  })\n\n  fastify.route({\n    method: 'GET',\n    url: '/first',\n    handler: function (req, reply) {\n      reply.send({ world: 'hello' })\n    },\n    schema: {\n      response: {\n        500: {\n          type: 'object',\n          properties: {\n            world: {\n              type: 'string'\n            }\n          },\n          required: ['world'],\n          additionalProperties: false\n        }\n      }\n    }\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port + '/first'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 500)\n      t.equal(response.headers['content-length'], '' + body.length)\n      t.same(JSON.parse(body), { world: 'error' })\n      t.end()\n    })\n  })\n})\n\ntest('preSerialization hook which returned error should still run onError hooks', t => {\n  t.plan(4)\n  const fastify = Fastify()\n\n  fastify.addHook('preSerialization', function (req, reply, payload, done) {\n    done(new Error('preSerialization aborted'))\n  })\n\n  fastify.addHook('onError', function (req, reply, payload, done) {\n    t.pass()\n    done()\n  })\n\n  fastify.get('/first', (req, reply) => {\n    reply.send({ hello: 'world' })\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port + '/first'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 500)\n    })\n  })\n})\n\ntest('preSerialization hooks should run in the order in which they are defined', t => {\n  t.plan(5)\n  const fastify = Fastify()\n\n  fastify.addHook('preSerialization', function (req, reply, payload, done) {\n    payload.hello += '2'\n\n    done(null, payload)\n  })\n\n  fastify.addHook('preSerialization', function (req, reply, payload, done) {\n    payload.hello += '1'\n\n    done(null, payload)\n  })\n\n  fastify.get('/first', (req, reply) => {\n    reply.send(payload)\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port + '/first'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(response.headers['content-length'], '' + body.length)\n      t.same(JSON.parse(body), { hello: 'world21' })\n    })\n  })\n})\n\ntest('preSerialization hooks should support encapsulation', t => {\n  t.plan(9)\n  const fastify = Fastify()\n\n  fastify.addHook('preSerialization', function (req, reply, payload, done) {\n    payload.hello += '1'\n\n    done(null, payload)\n  })\n\n  fastify.get('/first', (req, reply) => {\n    reply.send({ hello: 'world' })\n  })\n\n  fastify.register((instance, opts, done) => {\n    instance.addHook('preSerialization', function (req, reply, payload, done) {\n      payload.hello += '2'\n\n      done(null, payload)\n    })\n\n    instance.get('/second', (req, reply) => {\n      reply.send({ hello: 'world' })\n    })\n\n    done()\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port + '/first'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(response.headers['content-length'], '' + body.length)\n      t.same(JSON.parse(body), { hello: 'world1' })\n    })\n\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port + '/second'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(response.headers['content-length'], '' + body.length)\n      t.same(JSON.parse(body), { hello: 'world12' })\n    })\n  })\n})\n\ntest('onRegister hook should be called / 1', t => {\n  t.plan(3)\n  const fastify = Fastify()\n\n  fastify.addHook('onRegister', (instance, opts) => {\n    // duck typing for the win!\n    t.ok(instance.addHook)\n    t.same(opts, pluginOpts)\n  })\n\n  const pluginOpts = { prefix: 'hello', custom: 'world' }\n  fastify.register((instance, opts, done) => {\n    done()\n  }, pluginOpts)\n\n  fastify.ready(err => { t.error(err) })\n})\n\ntest('onRegister hook should be called / 2', t => {\n  t.plan(4)\n  const fastify = Fastify()\n\n  fastify.addHook('onRegister', instance => {\n    // duck typing for the win!\n    t.ok(instance.addHook)\n  })\n\n  fastify.register((instance, opts, done) => {\n    instance.register((instance, opts, done) => {\n      done()\n    })\n    done()\n  })\n\n  fastify.register((instance, opts, done) => {\n    done()\n  })\n\n  fastify.ready(err => {\n    t.error(err)\n  })\n})\n\ntest('onRegister hook should be called / 3', t => {\n  t.plan(4)\n  const fastify = Fastify()\n\n  fastify.decorate('data', [])\n\n  fastify.addHook('onRegister', instance => {\n    instance.data = instance.data.slice()\n  })\n\n  fastify.register((instance, opts, done) => {\n    instance.data.push(1)\n    instance.register((instance, opts, done) => {\n      instance.data.push(2)\n      t.same(instance.data, [1, 2])\n      done()\n    })\n    t.same(instance.data, [1])\n    done()\n  })\n\n  fastify.register((instance, opts, done) => {\n    t.same(instance.data, [])\n    done()\n  })\n\n  fastify.ready(err => {\n    t.error(err)\n  })\n})\n\ntest('onRegister hook should be called (encapsulation)', t => {\n  t.plan(1)\n  const fastify = Fastify()\n\n  function plugin (instance, opts, done) {\n    done()\n  }\n  plugin[Symbol.for('skip-override')] = true\n\n  fastify.addHook('onRegister', (instance, opts) => {\n    t.fail('This should not be called')\n  })\n\n  fastify.register(plugin)\n\n  fastify.ready(err => {\n    t.error(err)\n  })\n})\n\ntest('early termination, onRequest', t => {\n  t.plan(3)\n\n  const app = Fastify()\n\n  app.addHook('onRequest', (req, reply) => {\n    setImmediate(() => reply.send('hello world'))\n    return reply\n  })\n\n  app.get('/', (req, reply) => {\n    t.fail('should not happen')\n  })\n\n  app.inject('/', function (err, res) {\n    t.error(err)\n    t.equal(res.statusCode, 200)\n    t.equal(res.body.toString(), 'hello world')\n  })\n})\n\ntest('reply.send should throw if undefined error is thrown', t => {\n  /* eslint prefer-promise-reject-errors: [\"error\", {\"allowEmptyReject\": true}] */\n\n  t.plan(3)\n  const fastify = Fastify()\n\n  fastify.addHook('onRequest', function (req, reply, done) {\n    return Promise.reject()\n  })\n\n  fastify.get('/', (req, reply) => {\n    reply.send('hello')\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 500)\n    t.same(JSON.parse(res.payload), {\n      error: 'Internal Server Error',\n      code: 'FST_ERR_SEND_UNDEFINED_ERR',\n      message: 'Undefined error has occurred',\n      statusCode: 500\n    })\n  })\n})\n\ntest('reply.send should throw if undefined error is thrown at preParsing hook', t => {\n  /* eslint prefer-promise-reject-errors: [\"error\", {\"allowEmptyReject\": true}] */\n\n  t.plan(3)\n  const fastify = Fastify()\n\n  fastify.addHook('preParsing', function (req, reply, done) {\n    return Promise.reject()\n  })\n\n  fastify.get('/', (req, reply) => {\n    reply.send('hello')\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 500)\n    t.same(JSON.parse(res.payload), {\n      error: 'Internal Server Error',\n      code: 'FST_ERR_SEND_UNDEFINED_ERR',\n      message: 'Undefined error has occurred',\n      statusCode: 500\n    })\n  })\n})\n\ntest('reply.send should throw if undefined error is thrown at onSend hook', t => {\n  /* eslint prefer-promise-reject-errors: [\"error\", {\"allowEmptyReject\": true}] */\n\n  t.plan(3)\n  const fastify = Fastify()\n\n  fastify.addHook('onSend', function (req, reply, done) {\n    return Promise.reject()\n  })\n\n  fastify.get('/', (req, reply) => {\n    reply.send('hello')\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 500)\n    t.same(JSON.parse(res.payload), {\n      error: 'Internal Server Error',\n      code: 'FST_ERR_SEND_UNDEFINED_ERR',\n      message: 'Undefined error has occurred',\n      statusCode: 500\n    })\n  })\n})\n\ntest('onTimeout should be triggered', t => {\n  t.plan(6)\n  const fastify = Fastify({ connectionTimeout: 500 })\n\n  fastify.addHook('onTimeout', function (req, res, done) {\n    t.ok('called', 'onTimeout')\n    done()\n  })\n\n  fastify.get('/', async (req, reply) => {\n    await reply.send({ hello: 'world' })\n  })\n\n  fastify.get('/timeout', async (req, reply) => {\n    return reply\n  })\n\n  fastify.listen({ port: 0 }, (err, address) => {\n    t.error(err)\n    t.teardown(() => fastify.close())\n\n    sget({\n      method: 'GET',\n      url: address\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n    })\n    sget({\n      method: 'GET',\n      url: `${address}/timeout`\n    }, (err, response, body) => {\n      t.type(err, Error)\n      t.equal(err.message, 'socket hang up')\n    })\n  })\n})\n\ntest('onTimeout should be triggered and socket _meta is set', t => {\n  t.plan(6)\n  const fastify = Fastify({ connectionTimeout: 500 })\n\n  fastify.addHook('onTimeout', function (req, res, done) {\n    t.ok('called', 'onTimeout')\n    done()\n  })\n\n  fastify.get('/', async (req, reply) => {\n    req.raw.socket._meta = {}\n    return reply.send({ hello: 'world' })\n  })\n\n  fastify.get('/timeout', async (req, reply) => {\n    return reply\n  })\n\n  fastify.listen({ port: 0 }, (err, address) => {\n    t.error(err)\n    t.teardown(() => fastify.close())\n\n    sget({\n      method: 'GET',\n      url: address\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n    })\n    sget({\n      method: 'GET',\n      url: `${address}/timeout`\n    }, (err, response, body) => {\n      t.type(err, Error)\n      t.equal(err.message, 'socket hang up')\n    })\n  })\n})\n\ntest('registering invalid hooks should throw an error', async t => {\n  t.plan(3)\n\n  const fastify = Fastify()\n\n  t.throws(() => {\n    fastify.route({\n      method: 'GET',\n      path: '/invalidHook',\n      onRequest: [undefined],\n      async handler () {\n        return 'hello world'\n      }\n    })\n  }, new Error('onRequest hook should be a function, instead got [object Undefined]'))\n\n  t.throws(() => {\n    fastify.route({\n      method: 'GET',\n      path: '/invalidHook',\n      onRequest: null,\n      async handler () {\n        return 'hello world'\n      }\n    })\n  }, new Error('onRequest hook should be a function, instead got [object Null]'))\n\n  // undefined is ok\n  fastify.route({\n    method: 'GET',\n    path: '/validhook',\n    onRequest: undefined,\n    async handler () {\n      return 'hello world'\n    }\n  })\n\n  t.throws(() => {\n    fastify.addHook('onRoute', (routeOptions) => {\n      routeOptions.onSend = [undefined]\n    })\n\n    fastify.get('/', function (request, reply) {\n      reply.send('hello world')\n    })\n  }, new Error('onSend hook should be a function, instead got [object Undefined]'))\n})\n\ntest('onRequestAbort should be triggered', t => {\n  const fastify = Fastify()\n  let order = 0\n\n  t.plan(9)\n  t.teardown(() => fastify.close())\n\n  fastify.addHook('onRequestAbort', function (req, done) {\n    t.equal(++order, 1, 'called in hook')\n    t.ok(req.pendingResolve, 'request has pendingResolve')\n    req.pendingResolve()\n    done()\n  })\n\n  fastify.addHook('onError', function hook (request, reply, error, done) {\n    t.same(error, { hello: 'world' }, 'onError should be called')\n    t.ok(request.raw.aborted, 'request should be aborted')\n    done()\n  })\n\n  fastify.addHook('onSend', function hook (request, reply, payload, done) {\n    t.equal(payload, '{\"hello\":\"world\"}', 'onSend should be called')\n    done(null, payload)\n  })\n\n  fastify.addHook('onResponse', function hook (request, reply, done) {\n    t.fail('onResponse should not be called')\n    done()\n  })\n\n  fastify.route({\n    method: 'GET',\n    path: '/',\n    async handler (request, reply) {\n      t.pass('handler called')\n      let resolvePromise\n      const promise = new Promise(resolve => { resolvePromise = resolve })\n      request.pendingResolve = resolvePromise\n      await promise\n      t.pass('handler promise resolved')\n      return { hello: 'world' }\n    },\n    async onRequestAbort (req) {\n      t.equal(++order, 2, 'called in route')\n    }\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n\n    const socket = connect(fastify.server.address().port)\n\n    socket.write('GET / HTTP/1.1\\r\\nHost: example.com\\r\\n\\r\\n')\n\n    sleep(500).then(() => socket.destroy())\n  })\n})\n\ntest('onRequestAbort should support encapsulation', t => {\n  const fastify = Fastify()\n  let order = 0\n  let child\n\n  t.plan(6)\n  t.teardown(() => fastify.close())\n\n  fastify.addHook('onRequestAbort', function (req, done) {\n    t.equal(++order, 1, 'called in root')\n    t.strictSame(this.pluginName, child.pluginName)\n    done()\n  })\n\n  fastify.register(async function (_child, _, done) {\n    child = _child\n\n    fastify.addHook('onRequestAbort', async function (req) {\n      t.equal(++order, 2, 'called in child')\n      t.strictSame(this.pluginName, child.pluginName)\n    })\n\n    child.route({\n      method: 'GET',\n      path: '/',\n      async handler (request, reply) {\n        await sleep(1000)\n        return { hello: 'world' }\n      },\n      async onRequestAbort (_req) {\n        t.equal(++order, 3, 'called in route')\n      }\n    })\n\n    done()\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n\n    const socket = connect(fastify.server.address().port)\n\n    socket.write('GET / HTTP/1.1\\r\\nHost: example.com\\r\\n\\r\\n')\n\n    sleep(500).then(() => socket.destroy())\n  })\n})\n\ntest('onRequestAbort should handle errors / 1', t => {\n  const fastify = Fastify()\n\n  t.plan(2)\n  t.teardown(() => fastify.close())\n\n  fastify.addHook('onRequestAbort', function (req, done) {\n    process.nextTick(() => t.pass())\n    done(new Error('KABOOM!'))\n  })\n\n  fastify.route({\n    method: 'GET',\n    path: '/',\n    async handler (request, reply) {\n      await sleep(1000)\n      return { hello: 'world' }\n    }\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n\n    const socket = connect(fastify.server.address().port)\n\n    socket.write('GET / HTTP/1.1\\r\\nHost: example.com\\r\\n\\r\\n')\n\n    sleep(500).then(() => socket.destroy())\n  })\n})\n\ntest('onRequestAbort should handle errors / 2', t => {\n  const fastify = Fastify()\n\n  t.plan(2)\n  t.teardown(() => fastify.close())\n\n  fastify.addHook('onRequestAbort', function (req, done) {\n    process.nextTick(() => t.pass())\n    throw new Error('KABOOM!')\n  })\n\n  fastify.route({\n    method: 'GET',\n    path: '/',\n    async handler (request, reply) {\n      await sleep(1000)\n      return { hello: 'world' }\n    }\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n\n    const socket = connect(fastify.server.address().port)\n\n    socket.write('GET / HTTP/1.1\\r\\nHost: example.com\\r\\n\\r\\n')\n\n    sleep(500).then(() => socket.destroy())\n  })\n})\n\ntest('onRequestAbort should handle async errors / 1', t => {\n  const fastify = Fastify()\n\n  t.plan(2)\n  t.teardown(() => fastify.close())\n\n  fastify.addHook('onRequestAbort', async function (req) {\n    process.nextTick(() => t.pass())\n    throw new Error('KABOOM!')\n  })\n\n  fastify.route({\n    method: 'GET',\n    path: '/',\n    async handler (request, reply) {\n      await sleep(1000)\n      return { hello: 'world' }\n    }\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n\n    const socket = connect(fastify.server.address().port)\n\n    socket.write('GET / HTTP/1.1\\r\\nHost: example.com\\r\\n\\r\\n')\n\n    sleep(500).then(() => socket.destroy())\n  })\n})\n\ntest('onRequestAbort should handle async errors / 2', t => {\n  const fastify = Fastify()\n\n  t.plan(2)\n  t.teardown(() => fastify.close())\n\n  fastify.addHook('onRequestAbort', async function (req) {\n    process.nextTick(() => t.pass())\n    return Promise.reject()\n  })\n\n  fastify.route({\n    method: 'GET',\n    path: '/',\n    async handler (request, reply) {\n      await sleep(1000)\n      return { hello: 'world' }\n    }\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n\n    const socket = connect(fastify.server.address().port)\n\n    socket.write('GET / HTTP/1.1\\r\\nHost: example.com\\r\\n\\r\\n')\n\n    sleep(500).then(() => socket.destroy())\n  })\n})\n%/test/internals/initialConfig.test.js)\u0014'use strict'\n\nconst { test, before } = require('tap')\nconst Fastify = require('../..')\nconst helper = require('../helper')\nconst http = require('http')\nconst pino = require('pino')\nconst split = require('split2')\nconst deepClone = require('rfdc')({ circles: true, proto: false })\nconst { deepFreezeObject } = require('../../lib/initialConfigValidation').utils\n\nconst { buildCertificate } = require('../build-certificate')\n\nprocess.removeAllListeners('warning')\n\nlet localhost\nlet localhostForURL\n\nbefore(async function () {\n  await buildCertificate();\n  [localhost, localhostForURL] = await helper.getLoopbackHost()\n})\n\ntest('Fastify.initialConfig is an object', t => {\n  t.plan(1)\n  t.type(Fastify().initialConfig, 'object')\n})\n\ntest('without options passed to Fastify, initialConfig should expose default values', t => {\n  t.plan(1)\n\n  const fastifyDefaultOptions = {\n    connectionTimeout: 0,\n    keepAliveTimeout: 72000,\n    maxRequestsPerSocket: 0,\n    requestTimeout: 0,\n    bodyLimit: 1024 * 1024,\n    caseSensitive: true,\n    allowUnsafeRegex: false,\n    disableRequestLogging: false,\n    jsonShorthand: true,\n    ignoreTrailingSlash: false,\n    ignoreDuplicateSlashes: false,\n    maxParamLength: 100,\n    onProtoPoisoning: 'error',\n    onConstructorPoisoning: 'error',\n    pluginTimeout: 10000,\n    requestIdHeader: 'request-id',\n    requestIdLogLabel: 'reqId',\n    http2SessionTimeout: 72000,\n    exposeHeadRoutes: true\n  }\n\n  t.same(Fastify().initialConfig, fastifyDefaultOptions)\n})\n\ntest('Fastify.initialConfig should expose all options', t => {\n  t.plan(20)\n\n  const serverFactory = (handler, opts) => {\n    const server = http.createServer((req, res) => {\n      handler(req, res)\n    })\n\n    return server\n  }\n\n  const versionStrategy = {\n    name: 'version',\n    storage: function () {\n      const versions = {}\n      return {\n        get: (version) => { return versions[version] || null },\n        set: (version, store) => { versions[version] = store }\n      }\n    },\n    deriveConstraint: (req, ctx) => {\n      return req.headers.accept\n    },\n    validate () { return true }\n  }\n\n  let reqId = 0\n  const options = {\n    http2: true,\n    https: {\n      key: global.context.key,\n      cert: global.context.cert\n    },\n    ignoreTrailingSlash: true,\n    ignoreDuplicateSlashes: true,\n    maxParamLength: 200,\n    connectionTimeout: 0,\n    keepAliveTimeout: 72000,\n    bodyLimit: 1049600,\n    onProtoPoisoning: 'remove',\n    serverFactory,\n    caseSensitive: true,\n    allowUnsafeRegex: false,\n    requestIdHeader: 'request-id-alt',\n    pluginTimeout: 20000,\n    querystringParser: str => str,\n    genReqId: function (req) {\n      return reqId++\n    },\n    logger: pino({ level: 'info' }),\n    constraints: {\n      version: versionStrategy\n    },\n    trustProxy: function myTrustFn (address, hop) {\n      return address === '1.2.3.4' || hop === 1\n    }\n  }\n\n  const fastify = Fastify(options)\n  t.equal(fastify.initialConfig.http2, true)\n  t.equal(fastify.initialConfig.https, true, 'for security reason the key cert is hidden')\n  t.equal(fastify.initialConfig.ignoreTrailingSlash, true)\n  t.equal(fastify.initialConfig.ignoreDuplicateSlashes, true)\n  t.equal(fastify.initialConfig.maxParamLength, 200)\n  t.equal(fastify.initialConfig.connectionTimeout, 0)\n  t.equal(fastify.initialConfig.keepAliveTimeout, 72000)\n  t.equal(fastify.initialConfig.bodyLimit, 1049600)\n  t.equal(fastify.initialConfig.onProtoPoisoning, 'remove')\n  t.equal(fastify.initialConfig.caseSensitive, true)\n  t.equal(fastify.initialConfig.allowUnsafeRegex, false)\n  t.equal(fastify.initialConfig.requestIdHeader, 'request-id-alt')\n  t.equal(fastify.initialConfig.pluginTimeout, 20000)\n  t.ok(fastify.initialConfig.constraints.version)\n\n  // obfuscated options:\n  t.equal(fastify.initialConfig.serverFactory, undefined)\n  t.equal(fastify.initialConfig.trustProxy, undefined)\n  t.equal(fastify.initialConfig.genReqId, undefined)\n  t.equal(fastify.initialConfig.querystringParser, undefined)\n  t.equal(fastify.initialConfig.logger, undefined)\n  t.equal(fastify.initialConfig.trustProxy, undefined)\n})\n\ntest('Should throw if you try to modify Fastify.initialConfig', t => {\n  t.plan(4)\n\n  const fastify = Fastify({ ignoreTrailingSlash: true })\n  try {\n    fastify.initialConfig.ignoreTrailingSlash = false\n    t.fail()\n  } catch (error) {\n    t.type(error, TypeError)\n    t.equal(error.message, \"Cannot assign to read only property 'ignoreTrailingSlash' of object '#<Object>'\")\n    t.ok(error.stack)\n    t.pass()\n  }\n})\n\ntest('We must avoid shallow freezing and ensure that the whole object is freezed', t => {\n  t.plan(4)\n\n  const fastify = Fastify({\n    https: {\n      allowHTTP1: true,\n      key: global.context.key,\n      cert: global.context.cert\n    }\n  })\n\n  try {\n    fastify.initialConfig.https.allowHTTP1 = false\n    t.fail()\n  } catch (error) {\n    t.type(error, TypeError)\n    t.equal(error.message, \"Cannot assign to read only property 'allowHTTP1' of object '#<Object>'\")\n    t.ok(error.stack)\n    t.same(fastify.initialConfig.https, {\n      allowHTTP1: true\n    }, 'key cert removed')\n  }\n})\n\ntest('https value check', t => {\n  t.plan(1)\n\n  const fastify = Fastify({})\n  t.notOk(fastify.initialConfig.https)\n})\n\ntest('Return an error if options do not match the validation schema', t => {\n  t.plan(6)\n\n  try {\n    Fastify({ ignoreTrailingSlash: 'string instead of boolean' })\n\n    t.fail()\n  } catch (error) {\n    t.type(error, Error)\n    t.equal(error.name, 'FastifyError')\n    t.equal(error.message, 'Invalid initialization options: \\'[\"must be boolean\"]\\'')\n    t.equal(error.code, 'FST_ERR_INIT_OPTS_INVALID')\n    t.ok(error.stack)\n    t.pass()\n  }\n})\n\ntest('Original options must not be frozen', t => {\n  t.plan(4)\n\n  const originalOptions = {\n    https: {\n      allowHTTP1: true,\n      key: global.context.key,\n      cert: global.context.cert\n    }\n  }\n\n  const fastify = Fastify(originalOptions)\n\n  t.equal(Object.isFrozen(originalOptions), false)\n  t.equal(Object.isFrozen(originalOptions.https), false)\n  t.equal(Object.isFrozen(fastify.initialConfig), true)\n  t.equal(Object.isFrozen(fastify.initialConfig.https), true)\n})\n\ntest('Original options must not be altered (test deep cloning)', t => {\n  t.plan(3)\n\n  const originalOptions = {\n    https: {\n      allowHTTP1: true,\n      key: global.context.key,\n      cert: global.context.cert\n    }\n  }\n\n  const originalOptionsClone = deepClone(originalOptions)\n\n  const fastify = Fastify(originalOptions)\n\n  // initialConfig has been triggered\n  t.equal(Object.isFrozen(fastify.initialConfig), true)\n\n  // originalOptions must not have been altered\n  t.same(originalOptions.https.key, originalOptionsClone.https.key)\n  t.same(originalOptions.https.cert, originalOptionsClone.https.cert)\n})\n\ntest('Should not have issues when passing stream options to Pino.js', t => {\n  t.plan(15)\n\n  const stream = split(JSON.parse)\n\n  const originalOptions = {\n    ignoreTrailingSlash: true,\n    logger: {\n      level: 'trace',\n      stream\n    }\n  }\n\n  let fastify\n\n  try {\n    fastify = Fastify(originalOptions)\n\n    t.type(fastify, 'object')\n    t.same(fastify.initialConfig, {\n      connectionTimeout: 0,\n      keepAliveTimeout: 72000,\n      maxRequestsPerSocket: 0,\n      requestTimeout: 0,\n      bodyLimit: 1024 * 1024,\n      caseSensitive: true,\n      allowUnsafeRegex: false,\n      disableRequestLogging: false,\n      jsonShorthand: true,\n      ignoreTrailingSlash: true,\n      ignoreDuplicateSlashes: false,\n      maxParamLength: 100,\n      onProtoPoisoning: 'error',\n      onConstructorPoisoning: 'error',\n      pluginTimeout: 10000,\n      requestIdHeader: 'request-id',\n      requestIdLogLabel: 'reqId',\n      http2SessionTimeout: 72000,\n      exposeHeadRoutes: true\n    })\n  } catch (error) {\n    t.fail()\n  }\n\n  fastify.get('/', function (req, reply) {\n    t.ok(req.log)\n    reply.send({ hello: 'world' })\n  })\n\n  stream.once('data', listenAtLogLine => {\n    t.ok(listenAtLogLine, 'listen at log message is ok')\n\n    stream.once('data', line => {\n      const id = line.reqId\n      t.ok(line.reqId, 'reqId is defined')\n      t.ok(line.req, 'req is defined')\n      t.equal(line.msg, 'incoming request', 'message is set')\n      t.equal(line.req.method, 'GET', 'method is get')\n\n      stream.once('data', line => {\n        t.equal(line.reqId, id)\n        t.ok(line.reqId, 'reqId is defined')\n        t.ok(line.res, 'res is defined')\n        t.equal(line.msg, 'request completed', 'message is set')\n        t.equal(line.res.statusCode, 200, 'statusCode is 200')\n        t.ok(line.responseTime, 'responseTime is defined')\n      })\n    })\n  })\n\n  fastify.listen({ port: 0, host: localhost }, err => {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    http.get(`http://${localhostForURL}:${fastify.server.address().port}`)\n  })\n})\n\ntest('deepFreezeObject() should not throw on TypedArray', t => {\n  t.plan(5)\n\n  const object = {\n    buffer: Buffer.from(global.context.key),\n    dataView: new DataView(new ArrayBuffer(16)),\n    float: 1.1,\n    integer: 1,\n    object: {\n      nested: { string: 'string' }\n    },\n    stream: split(JSON.parse),\n    string: 'string'\n  }\n\n  try {\n    const frozenObject = deepFreezeObject(object)\n\n    // Buffers should not be frozen, as they are Uint8Array inherited instances\n    t.equal(Object.isFrozen(frozenObject.buffer), false)\n\n    t.equal(Object.isFrozen(frozenObject), true)\n    t.equal(Object.isFrozen(frozenObject.object), true)\n    t.equal(Object.isFrozen(frozenObject.object.nested), true)\n\n    t.pass()\n  } catch (error) {\n    t.fail()\n  }\n})\n\ntest('Fastify.initialConfig should accept the deprecated versioning option', t => {\n  t.plan(1)\n\n  function onWarning (warning) {\n    t.equal(warning.code, 'FSTDEP009')\n  }\n\n  process.on('warning', onWarning)\n\n  const versioning = {\n    storage: function () {\n      const versions = {}\n      return {\n        get: (version) => { return versions[version] || null },\n        set: (version, store) => { versions[version] = store }\n      }\n    },\n    deriveVersion: (req, ctx) => {\n      return req.headers.accept\n    }\n  }\n\n  Fastify({ versioning })\n  setImmediate(function () {\n    process.removeListener('warning', onWarning)\n    t.end()\n  })\n})\n\ntest('pluginTimeout should be parsed correctly', t => {\n  const withDisabledTimeout = Fastify({ pluginTimeout: '0' })\n  t.equal(withDisabledTimeout.initialConfig.pluginTimeout, 0)\n  const withInvalidTimeout = Fastify({ pluginTimeout: undefined })\n  t.equal(withInvalidTimeout.initialConfig.pluginTimeout, 10000)\n  t.end()\n})\n0/test/bundler/webpack/src/fail-plugin-version.js\u0001\rconst fp = require('fastify-plugin')\nconst fastify = require('../../../../')()\n\nfastify.get('/', function (request, reply) {\n  reply.send({ hello: 'world' })\n})\n\nfastify.register(fp((instance, opts, done) => {\n  done()\n}, { fastify: '9.x' }))\n\nmodule.exports = fastify\n(/test/encapsulated-error-handler.test.js\u0005!'use strict'\n\nconst { test } = require('tap')\nconst Fastify = require('..')\n\ntest('encapuslates an error handler', async t => {\n  t.plan(3)\n\n  const fastify = Fastify()\n  fastify.register(async function (fastify) {\n    fastify.setErrorHandler(async function a (err) {\n      t.equal(err.message, 'kaboom')\n      throw new Error('caught')\n    })\n    fastify.get('/encapsulated', async () => { throw new Error('kaboom') })\n  })\n\n  fastify.setErrorHandler(async function b (err) {\n    t.equal(err.message, 'caught')\n    throw new Error('wrapped')\n  })\n\n  const res = await fastify.inject('/encapsulated')\n  t.equal(res.json().message, 'wrapped')\n})\n\ntest('onError hook nested', async t => {\n  t.plan(4)\n\n  const fastify = Fastify()\n  fastify.register(async function (fastify) {\n    fastify.setErrorHandler(async function a (err) {\n      t.equal(err.message, 'kaboom')\n      throw new Error('caught')\n    })\n    fastify.get('/encapsulated', async () => { throw new Error('kaboom') })\n  })\n\n  fastify.setErrorHandler(async function b (err) {\n    t.equal(err.message, 'caught')\n    throw new Error('wrapped')\n  })\n\n  fastify.addHook('onError', async function (request, reply, err) {\n    t.equal(err.message, 'kaboom')\n  })\n\n  const res = await fastify.inject('/encapsulated')\n  t.equal(res.json().message, 'wrapped')\n})\n(/docs/Guides/Delay-Accepting-Requests.mdS<h1 align=\"center\">Fastify</h1>\n\n# Delay Accepting Requests\n\n## Introduction\n\nFastify provides several [hooks](../Reference/Hooks.md) useful for a variety of\nsituations. One of them is the [`onReady`](../Reference/Hooks.md#onready) hook,\nwhich is useful for executing tasks *right before* the server starts accepting\nnew requests. There isn't, though, a direct mechanism to handle scenarios in\nwhich you'd like the server to start accepting **specific** requests and denying\nall others, at least up to some point.\n\nSay, for instance, your server needs to authenticate with an OAuth provider to\nstart serving requests. To do that it'd need to engage in the [OAuth\nAuthorization Code\nFlow](https://auth0.com/docs/get-started/authentication-and-authorization-flow/authorization-code-flow),\nwhich would require it to listen to two requests from the authentication\nprovider:\n\n1. the Authorization Code webhook\n2. the tokens webhook\n\nUntil the authorization flow is done you wouldn't be able to serve customer\nrequests. What to do then?\n\nThere are several solutions for achieving that kind of behavior. Here we'll\nintroduce one of such techniques and, hopefully, you'll be able to get things\nrolling asap!\n\n## Solution\n\n### Overview\n\nThe proposed solution is one of many possible ways of dealing with this scenario\nand many similar to it. It relies solely on Fastify, so no fancy infrastructure\ntricks or third-party libraries will be necessary.\n\nTo simplify things we won't be dealing with a precise OAuth flow but, instead,\nsimulate a scenario in which some key is needed to serve a request and that key\ncan only be retrieved in runtime by authenticating with an external provider.\n\nThe main goal here is to deny requests that would otherwise fail **as early as\npossible** and with some **meaningful context**. That's both useful for the\nserver (fewer resources allocated to a bound-to-fail task) and for the client\n(they get some meaningful information and don't need to wait long for it).\n\nThat will be achieved by wrapping into a custom plugin two main features:\n\n1. the mechanism for authenticating with the provider\n[decorating](../Reference/Decorators.md) the `fastify` object with the\nauthentication key (`magicKey` from here onwards)\n1. the mechanism for denying requests that would, otherwise, fail\n\n### Hands-on\n\nFor this sample solution we'll be using the following:\n\n- `node.js v16.14.2`\n- `npm 8.5.0`\n- `fastify 4.0.0-rc.1`\n- `fastify-plugin 3.0.1`\n- `undici 5.0.0`\n\nSay we have the following base server set up at first:\n\n```js\nconst Fastify = require('fastify')\n\nconst provider = require('./provider')\n\nconst server = Fastify({ logger: true })\nconst USUAL_WAIT_TIME_MS = 5000\n\nserver.get('/ping', function (request, reply) {\n  reply.send({ error: false, ready: request.server.magicKey !== null })\n})\n\nserver.post('/webhook', function (request, reply) {\n  // It's good practice to validate webhook requests really come from\n  // whoever you expect. This is skipped in this sample for the sake\n  // of simplicity\n\n  const { magicKey } = request.body\n  request.server.magicKey = magicKey\n  request.log.info('Ready for customer requests!')\n\n  reply.send({ error: false })\n})\n\nserver.get('/v1*', async function (request, reply) {\n  try {\n    const data = await provider.fetchSensitiveData(request.server.magicKey)\n    return { customer: true, error: false }\n  } catch (error) {\n    request.log.error({\n      error,\n      message: 'Failed at fetching sensitive data from provider',\n    })\n\n    reply.statusCode = 500\n    return { customer: null, error: true }\n  }\n})\n\nserver.decorate('magicKey', null)\n\nserver.listen({ port: '1234' }, () => {\n  provider.thirdPartyMagicKeyGenerator(USUAL_WAIT_TIME_MS)\n    .catch((error) => {\n      server.log.error({\n        error,\n        message: 'Got an error while trying to get the magic key!'\n      })\n\n      // Since we won't be able to serve requests, might as well wrap\n      // things up\n      server.close(() => process.exit(1))\n    })\n})\n```\n\nOur code is simply setting up a Fastify server with a few routes:\n\n- a `/ping` route that specifies whether the service is ready or not to serve\nrequests by checking if the `magicKey` has been set up\n- a `/webhook` endpoint for our provider to reach back to us when they're ready\nto share the `magicKey`. The `magicKey` is, then, saved into the previously set\ndecorator on the `fastify` object\n- a catchall `/v1*` route to simulate what would have been customer-initiated\nrequests. These requests rely on us having a valid `magicKey`\n\nThe `provider.js` file, simulating actions of an external provider, is as\nfollows:\n\n```js\nconst { fetch } = require('undici')\nconst { setTimeout } = require('timers/promises')\n\nconst MAGIC_KEY = '12345'\n\nconst delay = setTimeout\n\nexports.thirdPartyMagicKeyGenerator = async (ms) => {\n  // Simulate processing delay\n  await delay(ms)\n\n  // Simulate webhook request to our server\n  const { status } = await fetch(\n    'http://localhost:1234/webhook',\n    {\n      body: JSON.stringify({ magicKey: MAGIC_KEY }),\n      method: 'POST',\n      headers: {\n        'content-type': 'application/json',\n      },\n    },\n  )\n\n  if (status !== 200) {\n    throw new Error('Failed to fetch magic key')\n  }\n}\n\nexports.fetchSensitiveData = async (key) => {\n  // Simulate processing delay\n  await delay(700)\n  const data = { sensitive: true }\n\n  if (key === MAGIC_KEY) {\n    return data\n  }\n\n  throw new Error('Invalid key')\n}\n```\n\nThe most important snippet here is the `thirdPartyMagicKeyGenerator` function,\nwhich will wait for 5 seconds and, then, make the POST request to our `/webhook`\nendpoint.\n\nWhen our server spins up we start listening to new connections without having\nour `magicKey` set up. Until we receive the webhook request from our external\nprovider (in this example we're simulating a 5 second delay) all our requests\nunder the `/v1*` path (customer requests) will fail. Worse than that: they'll\nfail after we've reached out to our provider with an invalid key and got an\nerror from them. That wasted time and resources for us and our customers.\nDepending on the kind of application we're running and on the request rate we're\nexpecting this delay is not acceptable or, at least, very annoying.\n\nOf course, that could be simply mitigated by checking whether or not the\n`magicKey` has been set up before hitting the provider in the `/v1*` handler.\nSure, but that would lead to bloat in the code. And imagine we have dozens of\ndifferent routes, with different controllers, that require that key. Should we\nrepeatedly add that check to all of them? That's error-prone and there are more\nelegant solutions.\n\nWhat we'll do to improve this setup overall is create a\n[`Plugin`](../Reference/Plugins.md) that'll be solely responsible for making\nsure we both:\n\n- do not accept requests that would otherwise fail until we're ready for them\n- make sure we reach out to our provider as soon as possible\n\nThis way we'll make sure all our setup regarding this specific _business rule_\nis placed on a single entity, instead of scattered all across our code base.\n\nWith the changes to improve this behavior, the code will look like this:\n\n##### index.js\n\n```js\nconst Fastify = require('fastify')\n\nconst customerRoutes = require('./customer-routes')\nconst { setup, delay } = require('./delay-incoming-requests')\n\nconst server = new Fastify({ logger: true })\n\nserver.register(setup)\n\n// Non-blocked URL\nserver.get('/ping', function (request, reply) {\n  reply.send({ error: false, ready: request.server.magicKey !== null })\n})\n\n// Webhook to handle the provider's response - also non-blocked\nserver.post('/webhook', function (request, reply) {\n  // It's good practice to validate webhook requests really come from\n  // whoever you expect. This is skipped in this sample for the sake\n  // of simplicity\n\n  const { magicKey } = request.body\n  request.server.magicKey = magicKey\n  request.log.info('Ready for customer requests!')\n\n  reply.send({ error: false })\n})\n\n// Blocked URLs\n// Mind we're building a new plugin by calling the `delay` factory with our\n// customerRoutes plugin\nserver.register(delay(customerRoutes), { prefix: '/v1' })\n\nserver.listen({ port: '1234' })\n```\n\n##### provider.js\n\n```js\nconst { fetch } = require('undici')\nconst { setTimeout } = require('timers/promises')\n\nconst MAGIC_KEY = '12345'\n\nconst delay = setTimeout\n\nexports.thirdPartyMagicKeyGenerator = async (ms) => {\n  // Simulate processing delay\n  await delay(ms)\n\n  // Simulate webhook request to our server\n  const { status } = await fetch(\n    'http://localhost:1234/webhook',\n    {\n      body: JSON.stringify({ magicKey: MAGIC_KEY }),\n      method: 'POST',\n      headers: {\n        'content-type': 'application/json',\n      },\n    },\n  )\n\n  if (status !== 200) {\n    throw new Error('Failed to fetch magic key')\n  }\n}\n\nexports.fetchSensitiveData = async (key) => {\n  // Simulate processing delay\n  await delay(700)\n  const data = { sensitive: true }\n\n  if (key === MAGIC_KEY) {\n    return data\n  }\n\n  throw new Error('Invalid key')\n}\n```\n\n##### delay-incoming-requests.js\n\n```js\nconst fp = require('fastify-plugin')\n\nconst provider = require('./provider')\n\nconst USUAL_WAIT_TIME_MS = 5000\n\nasync function setup(fastify) {\n  // As soon as we're listening for requests, let's work our magic\n  fastify.server.on('listening', doMagic)\n\n  // Set up the placeholder for the magicKey\n  fastify.decorate('magicKey', null)\n\n  // Our magic -- important to make sure errors are handled. Beware of async\n  // functions outside `try/catch` blocks\n  // If an error is thrown at this point and not captured it'll crash the\n  // application\n  function doMagic() {\n    fastify.log.info('Doing magic!')\n\n    provider.thirdPartyMagicKeyGenerator(USUAL_WAIT_TIME_MS)\n      .catch((error) => {\n        fastify.log.error({\n          error,\n          message: 'Got an error while trying to get the magic key!'\n        })\n\n        // Since we won't be able to serve requests, might as well wrap\n        // things up\n        fastify.close(() => process.exit(1))\n      })\n  }\n}\n\nconst delay = (routes) =>\n  function (fastify, opts, done) {\n    // Make sure customer requests won't be accepted if the magicKey is not\n    // available\n    fastify.addHook('onRequest', function (request, reply, next) {\n      if (!request.server.magicKey) {\n        reply.statusCode = 503\n        reply.header('Retry-After', USUAL_WAIT_TIME_MS)\n        reply.send({ error: true, retryInMs: USUAL_WAIT_TIME_MS })\n      }\n\n      next()\n    })\n\n    // Register to-be-delayed routes\n    fastify.register(routes, opts)\n\n    done()\n  }\n\nmodule.exports = {\n  setup: fp(setup),\n  delay,\n}\n```\n\n##### customer-routes.js\n\n```js\nconst fp = require('fastify-plugin')\n\nconst provider = require('./provider')\n\nmodule.exports = fp(async function (fastify) {\n  fastify.get('*', async function (request ,reply) {\n    try {\n      const data = await provider.fetchSensitiveData(request.server.magicKey)\n      return { customer: true, error: false }\n    } catch (error) {\n      request.log.error({\n        error,\n        message: 'Failed at fetching sensitive data from provider',\n      })\n\n      reply.statusCode = 500\n      return { customer: null, error: true }\n    }\n  })\n})\n```\n\nThere is a very specific change on the previously existing files that is worth\nmentioning: Beforehand we were using the `server.listen` callback to start the\nauthentication process with the external provider and we were decorating the\n`server` object right before initializing the server. That was bloating our\nserver initialization setup with unnecessary code and didn't have much to do\nwith starting the Fastify server. It was a business logic that didn't have its\nspecific place in the code base.\n\nNow we've implemented the `delayIncomingRequests` plugin in the\n`delay-incoming-requests.js` file. That's, in truth, a module split into two\ndifferent plugins that will build up to a single use-case. That's the brains of\nour operation. Let's walk through what the plugins do:\n\n##### setup\n\nThe `setup` plugin is responsible for making sure we reach out to our provider\nasap and store the `magicKey` somewhere available to all our handlers.\n\n```js\n  fastify.server.on('listening', doMagic)\n```\n\nAs soon as the server starts listening (very similar behavior to adding a piece\nof code to the `server.listen`'s callback function) a `listening` event is\nemitted (for more info refer to\nhttps://nodejs.org/api/net.html#event-listening). We use that to reach out to\nour provider as soon as possible, with the `doMagic` function.\n\n```js\n  fastify.decorate('magicKey', null)\n```\n\nThe `magicKey` decoration is also part of the plugin now. We initialize it with\na placeholder, waiting for the valid value to be retrieved.\n\n##### delay\n\n`delay` is not a plugin itself. It's actually a plugin *factory*. It expects a\nFastify plugin with `routes` and exports the actual plugin that'll handle\nenveloping those routes with an `onRequest` hook that will make sure no requests\nare handled until we're ready for them.\n\n```js\nconst delay = (routes) =>\n  function (fastify, opts, done) {\n    // Make sure customer requests won't be accepted if the magicKey is not\n    // available\n    fastify.addHook('onRequest', function (request, reply, next) {\n      if (!request.server.magicKey) {\n        reply.statusCode = 503\n        reply.header('Retry-After', USUAL_WAIT_TIME_MS)\n        reply.send({ error: true, retryInMs: USUAL_WAIT_TIME_MS })\n      }\n\n      next()\n    })\n\n    // Register to-be-delayed routes\n    fastify.register(routes, opts)\n\n    done()\n  }\n```\n\nInstead of updating every single controller that might use the `magicKey`, we\nsimply make sure that no route that's related to customer requests will be\nserved until we have everything ready. And there's more: we fail **FAST** and\nhave the possibility of giving the customer meaningful information, like how\nlong they should wait before retrying the request. Going even further, by\nissuing a [`503` status\ncode](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/503) we're\nsignaling to our infrastructure components (namely load balancers) we're still\nnot ready to take incoming requests and they should redirect traffic to other\ninstances, if available, besides in how long we estimate that will be solved.\nAll of that in a few simple lines!\n\nIt's noteworthy that we didn't use the `fastify-plugin` wrapper in the `delay`\nfactory. That's because we wanted the `onRequest` hook to only be set within\nthat specific scope and not to the scope that called it (in our case, the main\n`server` object defined in `index.js`). `fastify-plugin` sets the\n`skip-override` hidden property, which has a practical effect of making whatever\nchanges we make to our `fastify` object available to the upper scope. That's\nalso why we used it with the `customerRoutes` plugin: we wanted those routes to\nbe available to its calling scope, the `delay` plugin. For more info on that\nsubject refer to [Plugins](../Reference/Plugins.md#handle-the-scope).\n\nLet's see how that behaves in action. If we fired our server up with `node\nindex.js` and made a few requests to test things out. These were the logs we'd\nsee (some bloat was removed to ease things up):\n\n<!-- markdownlint-disable -->\n```sh\n{\"time\":1650063793316,\"msg\":\"Doing magic!\"}\n{\"time\":1650063793316,\"msg\":\"Server listening at http://127.0.0.1:1234\"}\n{\"time\":1650063795030,\"reqId\":\"req-1\",\"req\":{\"method\":\"GET\",\"url\":\"/v1\",\"hostname\":\"localhost:1234\",\"remoteAddress\":\"127.0.0.1\",\"remotePort\":51928},\"msg\":\"incoming request\"}\n{\"time\":1650063795033,\"reqId\":\"req-1\",\"res\":{\"statusCode\":503},\"responseTime\":2.5721680000424385,\"msg\":\"request completed\"}\n{\"time\":1650063796248,\"reqId\":\"req-2\",\"req\":{\"method\":\"GET\",\"url\":\"/ping\",\"hostname\":\"localhost:1234\",\"remoteAddress\":\"127.0.0.1\",\"remotePort\":51930},\"msg\":\"incoming request\"}\n{\"time\":1650063796248,\"reqId\":\"req-2\",\"res\":{\"statusCode\":200},\"responseTime\":0.4802369996905327,\"msg\":\"request completed\"}\n{\"time\":1650063798377,\"reqId\":\"req-3\",\"req\":{\"method\":\"POST\",\"url\":\"/webhook\",\"hostname\":\"localhost:1234\",\"remoteAddress\":\"127.0.0.1\",\"remotePort\":51932},\"msg\":\"incoming request\"}\n{\"time\":1650063798379,\"reqId\":\"req-3\",\"msg\":\"Ready for customer requests!\"}\n{\"time\":1650063798379,\"reqId\":\"req-3\",\"res\":{\"statusCode\":200},\"responseTime\":1.3567829988896847,\"msg\":\"request completed\"}\n{\"time\":1650063799858,\"reqId\":\"req-4\",\"req\":{\"method\":\"GET\",\"url\":\"/v1\",\"hostname\":\"localhost:1234\",\"remoteAddress\":\"127.0.0.1\",\"remotePort\":51934},\"msg\":\"incoming request\"}\n{\"time\":1650063800561,\"reqId\":\"req-4\",\"res\":{\"statusCode\":200},\"responseTime\":702.4662979990244,\"msg\":\"request completed\"}\n```\n<!-- markdownlint-enable -->\n\nLet's focus on a few parts:\n\n```sh\n{\"time\":1650063793316,\"msg\":\"Doing magic!\"}\n{\"time\":1650063793316,\"msg\":\"Server listening at http://127.0.0.1:1234\"}\n```\n\nThese are the initial logs we'd see as soon as the server started. We reach out\nto the external provider as early as possible within a valid time window (we\ncouldn't do that before the server was ready to receive connections).\n\nWhile the server is still not ready, a few requests are attempted:\n\n<!-- markdownlint-disable -->\n```sh\n{\"time\":1650063795030,\"reqId\":\"req-1\",\"req\":{\"method\":\"GET\",\"url\":\"/v1\",\"hostname\":\"localhost:1234\",\"remoteAddress\":\"127.0.0.1\",\"remotePort\":51928},\"msg\":\"incoming request\"}\n{\"time\":1650063795033,\"reqId\":\"req-1\",\"res\":{\"statusCode\":503},\"responseTime\":2.5721680000424385,\"msg\":\"request completed\"}\n{\"time\":1650063796248,\"reqId\":\"req-2\",\"req\":{\"method\":\"GET\",\"url\":\"/ping\",\"hostname\":\"localhost:1234\",\"remoteAddress\":\"127.0.0.1\",\"remotePort\":51930},\"msg\":\"incoming request\"}\n{\"time\":1650063796248,\"reqId\":\"req-2\",\"res\":{\"statusCode\":200},\"responseTime\":0.4802369996905327,\"msg\":\"request completed\"}\n```\n<!-- markdownlint-enable -->\n\nThe first one (`req-1`) was a `GET /v1`, that failed (**FAST** - `responseTime`\nis in `ms`) with our `503` status code and the meaningful information in the\nresponse. Below is the response for that request:\n\n```sh\nHTTP/1.1 503 Service Unavailable\nConnection: keep-alive\nContent-Length: 31\nContent-Type: application/json; charset=utf-8\nDate: Fri, 15 Apr 2022 23:03:15 GMT\nKeep-Alive: timeout=5\nRetry-After: 5000\n\n{\n    \"error\": true,\n    \"retryInMs\": 5000\n}\n```\n\nThen we attempt a new request (`req-2`), which was a `GET /ping`. As expected,\nsince that was not one of the requests we asked our plugin to filter, it\nsucceeded. That could also be used as means of informing an interested party\nwhether or not we were ready to serve requests (although `/ping` is more\ncommonly associated with *liveness* checks and that would be the responsibility\nof a *readiness* check -- the curious reader can get more info on these terms\n[here](https://cloud.google.com/blog/products/containers-kubernetes/kubernetes-best-practices-setting-up-health-checks-with-readiness-and-liveness-probes))\nwith the `ready` field. Below is the response for that request:\n\n```sh\nHTTP/1.1 200 OK\nConnection: keep-alive\nContent-Length: 29\nContent-Type: application/json; charset=utf-8\nDate: Fri, 15 Apr 2022 23:03:16 GMT\nKeep-Alive: timeout=5\n\n{\n    \"error\": false,\n    \"ready\": false\n}\n```\n\nAfter that there were more interesting log messages:\n\n<!-- markdownlint-disable -->\n```sh\n{\"time\":1650063798377,\"reqId\":\"req-3\",\"req\":{\"method\":\"POST\",\"url\":\"/webhook\",\"hostname\":\"localhost:1234\",\"remoteAddress\":\"127.0.0.1\",\"remotePort\":51932},\"msg\":\"incoming request\"}\n{\"time\":1650063798379,\"reqId\":\"req-3\",\"msg\":\"Ready for customer requests!\"}\n{\"time\":1650063798379,\"reqId\":\"req-3\",\"res\":{\"statusCode\":200},\"responseTime\":1.3567829988896847,\"msg\":\"request completed\"}\n```\n<!-- markdownlint-enable -->\n\nThis time it was our simulated external provider hitting us to let us know\nauthentication had gone well and telling us what our `magicKey` was. We saved\nthat into our `magicKey` decorator and celebrated with a log message saying we\nwere now ready for customers to hit us!\n\n<!-- markdownlint-disable -->\n```sh\n{\"time\":1650063799858,\"reqId\":\"req-4\",\"req\":{\"method\":\"GET\",\"url\":\"/v1\",\"hostname\":\"localhost:1234\",\"remoteAddress\":\"127.0.0.1\",\"remotePort\":51934},\"msg\":\"incoming request\"}\n{\"time\":1650063800561,\"reqId\":\"req-4\",\"res\":{\"statusCode\":200},\"responseTime\":702.4662979990244,\"msg\":\"request completed\"}\n```\n<!-- markdownlint-enable -->\n\nFinally, a final `GET /v1` request was made and, this time, it succeeded. Its\nresponse was the following:\n\n```sh\nHTTP/1.1 200 OK\nConnection: keep-alive\nContent-Length: 31\nContent-Type: application/json; charset=utf-8\nDate: Fri, 15 Apr 2022 23:03:20 GMT\nKeep-Alive: timeout=5\n\n{\n    \"customer\": true,\n    \"error\": false\n}\n```\n\n## Conclusion\n\nSpecifics of the implementation will vary from one problem to another, but the\nmain goal of this guide was to show a very specific use case of an issue that\ncould be solved within Fastify's ecosystem.\n\nThis guide is a tutorial on the use of plugins, decorators, and hooks to solve\nthe problem of delaying serving specific requests on our application. It's not\nproduction-ready, as it keeps local state (the `magicKey`) and it's not\nhorizontally scalable (we don't want to flood our provider, right?). One way of\nimproving it would be storing the `magicKey` somewhere else (perhaps a cache\ndatabase?).\n\nThe keywords here were [Decorators](../Reference/Decorators.md),\n[Hooks](../Reference/Hooks.md), and [Plugins](../Reference/Plugins.md).\nCombining what Fastify has to offer can lead to very ingenious and creative\nsolutions to a wide variety of problems. Let's be creative! :)\n/test/connectionTimeout.test.js\u0003'use strict'\n\nconst Fastify = require('..')\nconst http = require('http')\nconst t = require('tap')\nconst test = t.test\n\ntest('connectionTimeout', t => {\n  t.plan(6)\n\n  try {\n    Fastify({ connectionTimeout: 1.3 })\n    t.fail('option must be an integer')\n  } catch (err) {\n    t.ok(err)\n  }\n\n  try {\n    Fastify({ connectionTimeout: [] })\n    t.fail('option must be an integer')\n  } catch (err) {\n    t.ok(err)\n  }\n\n  const httpServer = Fastify({ connectionTimeout: 1 }).server\n  t.equal(httpServer.timeout, 1)\n\n  const httpsServer = Fastify({ connectionTimeout: 2, https: {} }).server\n  t.equal(httpsServer.timeout, 2)\n\n  const http2Server = Fastify({ connectionTimeout: 3, http2: true }).server\n  t.equal(http2Server.timeout, 3)\n\n  const serverFactory = (handler, _) => {\n    const server = http.createServer((req, res) => {\n      handler(req, res)\n    })\n    server.setTimeout(5)\n    return server\n  }\n  const customServer = Fastify({ connectionTimeout: 4, serverFactory }).server\n  t.equal(customServer.timeout, 5)\n})\n/docs/Guides/Ecosystem.mdŢ<h1 align=\"center\">Fastify</h1>\n\n## Ecosystem\n\nPlugins maintained by the Fastify team are listed under [Core](#core) while\nplugins maintained by the community are listed in the [Community](#community)\nsection.\n\n#### [Core](#core)\n\n- [`@fastify/accepts`](https://github.com/fastify/fastify-accepts) to have\n  [accepts](https://www.npmjs.com/package/accepts) in your request object.\n- [`@fastify/accepts-serializer`](https://github.com/fastify/fastify-accepts-serializer)\n  to serialize to output according to `Accept` header.\n- [`@fastify/any-schema`](https://github.com/fastify/any-schema-you-like) Save\n  multiple schemas and decide which one to use to serialize the payload\n- [`@fastify/auth`](https://github.com/fastify/fastify-auth) Run multiple auth\n  functions in Fastify.\n- [`@fastify/autoload`](https://github.com/fastify/fastify-autoload) Require all\n  plugins in a directory.\n- [`@fastify/awilix`](https://github.com/fastify/fastify-awilix) Dependency\n  injection support for Fastify, based on\n  [awilix](https://github.com/jeffijoe/awilix).\n- [`@fastify/aws-lambda`](https://github.com/fastify/aws-lambda-fastify) allows\n  you to easily build serverless web applications/services and RESTful APIs\n  using Fastify on top of AWS Lambda and Amazon API Gateway.\n- [`@fastify/basic-auth`](https://github.com/fastify/fastify-basic-auth) Basic\n  auth plugin for Fastify.\n- [`@fastify/bearer-auth`](https://github.com/fastify/fastify-bearer-auth)\n  Bearer auth plugin for Fastify.\n- [`@fastify/caching`](https://github.com/fastify/fastify-caching) General\n  server-side cache and ETag support.\n- [`@fastify/circuit-breaker`](https://github.com/fastify/fastify-circuit-breaker)\n  A low overhead circuit breaker for your routes.\n- [`@fastify/compress`](https://github.com/fastify/fastify-compress) Fastify\n  compression utils.\n- [`@fastify/cookie`](https://github.com/fastify/fastify-cookie) Parse and set\n  cookie headers.\n- [`@fastify/cors`](https://github.com/fastify/fastify-cors) Enables the use of\n  CORS in a Fastify application.\n- [`@fastify/csrf-protection`](https://github.com/fastify/csrf-protection) A\n  plugin for adding\n  [CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery) protection to\n  Fastify.\n- [`@fastify/diagnostics-channel`](https://github.com/fastify/fastify-diagnostics-channel)\n  Plugin to deal with `diagnostics_channel` on Fastify\n- [`@fastify/elasticsearch`](https://github.com/fastify/fastify-elasticsearch)\n  Plugin to share the same ES client.\n- [`@fastify/env`](https://github.com/fastify/fastify-env) Load and check\n  configuration.\n- [`@fastify/etag`](https://github.com/fastify/fastify-etag) Automatically\n  generate ETags for HTTP responses.\n- [`@fastify/flash`](https://github.com/fastify/fastify-flash) Set and get flash\n  messages using the session.\n- [`@fastify/formbody`](https://github.com/fastify/fastify-formbody) Plugin to\n  parse x-www-form-urlencoded bodies.\n- [`@fastify/funky`](https://github.com/fastify/fastify-funky) Makes functional\n  programming in Fastify more convenient. Adds support for Fastify routes\n  returning functional structures, such as Either, Task or plain parameterless\n  function.\n- [`@fastify/helmet`](https://github.com/fastify/fastify-helmet) Important\n  security headers for Fastify.\n- [`@fastify/hotwire`](https://github.com/fastify/fastify-hotwire) Use the\n  Hotwire pattern with Fastify.\n- [`@fastify/http-proxy`](https://github.com/fastify/fastify-http-proxy) Proxy\n  your HTTP requests to another server, with hooks.\n- [`@fastify/jwt`](https://github.com/fastify/fastify-jwt) JWT utils for\n  Fastify, internally uses [fast-jwt](https://github.com/nearform/fast-jwt).\n- [`@fastify/leveldb`](https://github.com/fastify/fastify-leveldb) Plugin to\n  share a common LevelDB connection across Fastify.\n- [`@fastify/middie`](https://github.com/fastify/middie) Middleware engine for\n  Fastify.\n- [`@fastify/mongodb`](https://github.com/fastify/fastify-mongodb) Fastify\n  MongoDB connection plugin, with which you can share the same MongoDB\n  connection pool across every part of your server.\n- [`@fastify/multipart`](https://github.com/fastify/fastify-multipart) Multipart\n  support for Fastify.\n- [`@fastify/nextjs`](https://github.com/fastify/fastify-nextjs) React\n  server-side rendering support for Fastify with\n  [Next](https://github.com/zeit/next.js/).\n- [`@fastify/oauth2`](https://github.com/fastify/fastify-oauth2) Wrap around\n  [`simple-oauth2`](https://github.com/lelylan/simple-oauth2).\n- [`@fastify/one-line-logger`](https://github.com/fastify/one-line-logger) Formats\n  Fastify's logs into a nice one-line message.\n- [`@fastify/postgres`](https://github.com/fastify/fastify-postgres) Fastify\n  PostgreSQL connection plugin, with this you can share the same PostgreSQL\n  connection pool in every part of your server.\n- [`@fastify/rate-limit`](https://github.com/fastify/fastify-rate-limit) A low\n  overhead rate limiter for your routes.\n- [`@fastify/redis`](https://github.com/fastify/fastify-redis) Fastify Redis\n  connection plugin, with which you can share the same Redis connection across\n  every part of your server.\n- [`@fastify/reply-from`](https://github.com/fastify/fastify-reply-from) Plugin\n  to forward the current HTTP request to another server.\n- [`@fastify/request-context`](https://github.com/fastify/fastify-request-context)\n  Request-scoped storage, based on\n  [AsyncLocalStorage](https://nodejs.org/api/async_hooks.html#async_hooks_class_asynclocalstorage)\n  (with fallback to [cls-hooked](https://github.com/Jeff-Lewis/cls-hooked)),\n  providing functionality similar to thread-local storages.\n- [`@fastify/response-validation`](https://github.com/fastify/fastify-response-validation)\n  A simple plugin that enables response validation for Fastify.\n- [`@fastify/routes`](https://github.com/fastify/fastify-routes) Plugin that\n  provides a `Map` of routes.\n- [`@fastify/schedule`](https://github.com/fastify/fastify-schedule) Plugin for\n  scheduling periodic jobs, based on\n  [toad-scheduler](https://github.com/kibertoad/toad-scheduler).\n- [`@fastify/secure-session`](https://github.com/fastify/fastify-secure-session)\n  Create a secure stateless cookie session for Fastify.\n- [`@fastify/sensible`](https://github.com/fastify/fastify-sensible) Defaults\n  for Fastify that everyone can agree on. It adds some useful decorators such as\n  HTTP errors and assertions, but also more request and reply methods.\n- [`@fastify/session`](https://github.com/fastify/session) a session plugin for\n  Fastify.\n- [`@fastify/soap-client`](https://github.com/fastify/fastify-soap-client) a SOAP\n  client plugin for Fastify.\n- [`@fastify/static`](https://github.com/fastify/fastify-static) Plugin for\n  serving static files as fast as possible.\n- [`@fastify/swagger`](https://github.com/fastify/fastify-swagger) Plugin for\n  serving Swagger/OpenAPI documentation for Fastify, supporting dynamic\n  generation.\n- [`@fastify/type-provider-json-schema-to-ts`](https://github.com/fastify/fastify-type-provider-json-schema-to-ts)\n  Fastify\n  [type provider](https://www.fastify.io/docs/latest/Reference/Type-Providers/)\n  for [json-schema-to-ts](https://github.com/ThomasAribart/json-schema-to-ts).\n- [`@fastify/type-provider-typebox`](https://github.com/fastify/fastify-type-provider-typebox)\n  Fastify\n  [type provider](https://www.fastify.io/docs/latest/Reference/Type-Providers/)\n  for [Typebox](https://github.com/sinclairzx81/typebox).\n- [`@fastify/under-pressure`](https://github.com/fastify/under-pressure) Measure\n  process load with automatic handling of _\"Service Unavailable\"_ plugin for\n  Fastify.\n- [`@fastify/url-data`](https://github.com/fastify/fastify-url-data) Decorate\n  the `Request` object with a method to access raw URL components.\n- [`@fastify/view`](https://github.com/fastify/point-of-view) Templates\n  rendering (_ejs, pug, handlebars, marko_) plugin support for Fastify.\n- [`@fastify/websocket`](https://github.com/fastify/fastify-websocket) WebSocket\n  support for Fastify. Built upon [ws](https://github.com/websockets/ws).\n\n#### [Community](#community)\n\n- [`@applicazza/fastify-nextjs`](https://github.com/applicazza/fastify-nextjs)\n  Alternate Fastify and Next.js integration.\n- [`@clerk/fastify`](https://github.com/clerkinc/javascript/tree/main/packages/fastify)\n  Add authentication and user management to your Fastify application with Clerk.\n- [`@coobaha/typed-fastify`](https://github.com/Coobaha/typed-fastify) Strongly\n  typed routes with a runtime validation using JSON schema generated from types.\n- [`@dnlup/fastify-doc`](https://github.com/dnlup/fastify-doc) A plugin for\n  sampling process metrics.\n- [`@dnlup/fastify-traps`](https://github.com/dnlup/fastify-traps) A plugin to\n  close the server gracefully on `SIGINT` and `SIGTERM` signals.\n- [`@eropple/fastify-openapi3`](https://github.com/eropple/fastify-openapi3) Provides\n  easy, developer-friendly OpenAPI 3.1 specs + doc explorer based on your routes.\n- [`@ethicdevs/fastify-custom-session`](https://github.com/EthicDevs/fastify-custom-session)\n  A plugin that let you use session and decide only where to load/save from/to. Has\n  great TypeScript support + built-in adapters for common ORMs/databases (Firebase,\n  Prisma Client, Postgres (wip), InMemory) and you can easily make your own adapter!\n- [`@ethicdevs/fastify-git-server`](https://github.com/EthicDevs/fastify-git-server)\n  A plugin to easily create git server and make one/many Git repositories available\n  for clone/fetch/push through the standard `git` (over http) commands.\n- [`@fastify-userland/request-id`](https://github.com/fastify-userland/request-id)\n  Fastify Request ID Plugin\n- [`@fastify-userland/typeorm-query-runner`](https://github.com/fastify-userland/typeorm-query-runner)\n  Fastify typeorm QueryRunner plugin\n- [`@gquittet/graceful-server`](https://github.com/gquittet/graceful-server)\n  Tiny (~5k), Fast, KISS, and dependency-free Node.JS library to make your\n  Fastify API graceful.\n- [`@h4ad/serverless-adapter`](https://github.com/H4ad/serverless-adapter)\n  Run REST APIs and other web applications using your existing Node.js\n  application framework (Express, Koa, Hapi and Fastify), on top of AWS Lambda,\n  Huawei and many other clouds.\n- [`@immobiliarelabs/fastify-metrics`](https://github.com/immobiliare/fastify-metrics)\n  Minimalistic and opinionated plugin that collects usage/process metrics and\n  dispatches to [statsd](https://github.com/statsd/statsd).\n- [`@immobiliarelabs/fastify-sentry`](https://github.com/immobiliare/fastify-sentry)\n  Sentry errors handler that just works! Install, add your DSN and you're good\n  to go!\n- [`@mateonunez/fastify-lyra`](https://github.com/mateonunez/fastify-lyra)\n  A plugin to implement [Lyra](https://github.com/nearform/lyra) search engine\n  on Fastify\n- [`@mgcrea/fastify-graceful-exit`](https://github.com/mgcrea/fastify-graceful-exit)\n  A plugin to close the server gracefully\n- [`@mgcrea/fastify-request-logger`](https://github.com/mgcrea/fastify-request-logger)\n  A plugin to enable compact request logging for Fastify\n- [`@mgcrea/fastify-session`](https://github.com/mgcrea/fastify-session) Session\n  plugin for Fastify that supports both stateless and stateful sessions\n- [`@mgcrea/fastify-session-redis-store`](https://github.com/mgcrea/fastify-session-redis-store)\n  Redis store for @mgcrea/fastify-session using ioredis\n- [`@mgcrea/fastify-session-sodium-crypto`](https://github.com/mgcrea/fastify-session-sodium-crypto)\n  Fast sodium-based crypto for @mgcrea/fastify-session\n- [`@mgcrea/pino-pretty-compact`](https://github.com/mgcrea/pino-pretty-compact)\n  A custom compact pino-base prettifier\n- [`@trubavuong/fastify-seaweedfs`](https://github.com/trubavuong/fastify-seaweedfs)\n  SeaweedFS for Fastify\n- [`apollo-server-fastify`](https://github.com/apollographql/apollo-server/tree/master/packages/apollo-server-fastify)\n  Run an [Apollo Server](https://github.com/apollographql/apollo-server) to\n  serve GraphQL with Fastify.\n- [`arecibo`](https://github.com/nucleode/arecibo) Fastify ping responder for\n  Kubernetes Liveness and Readiness Probes.\n- [`cls-rtracer`](https://github.com/puzpuzpuz/cls-rtracer) Fastify middleware\n  for CLS-based request ID generation. An out-of-the-box solution for adding\n  request IDs into your logs.\n- [`electron-server`](https://github.com/anonrig/electron-server) A plugin for\n  using Fastify without the need of consuming a port on Electron apps.\n- [`fast-water`](https://github.com/tswayne/fast-water) A Fastify plugin for\n  waterline. Decorates Fastify with waterline models.\n- [`fastify-204`](https://github.com/Shiva127/fastify-204) Fastify plugin that\n  return 204 status on empty response.\n- [`fastify-405`](https://github.com/Eomm/fastify-405) Fastify plugin that adds\n  405 HTTP status to your routes\n- [`fastify-allow`](https://github.com/mattbishop/fastify-allow) Fastify plugin\n  that automatically adds an Allow header to responses with routes. Also sends\n  405 responses for routes that have a handler but not for the request's method.\n- [`fastify-amqp`](https://github.com/RafaelGSS/fastify-amqp) Fastify AMQP\n  connection plugin, to use with RabbitMQ or another connector. Just a wrapper\n  to [`amqplib`](https://github.com/squaremo/amqp.node).\n- [`fastify-amqp-async`](https://github.com/kffl/fastify-amqp-async) Fastify\n  AMQP plugin with a Promise-based API provided by\n  [`amqplib-as-promised`](https://github.com/twawszczak/amqplib-as-promised).\n- [`fastify-angular-universal`](https://github.com/exequiel09/fastify-angular-universal)\n  Angular server-side rendering support using\n  [`@angular/platform-server`](https://github.com/angular/angular/tree/master/packages/platform-server)\n  for Fastify\n- [`fastify-api-key`](https://github.com/arkerone/fastify-api-key) Fastify\n  plugin to authenticate HTTP requests based on api key and signature\n- [`fastify-appwrite`](https://github.com/Dev-Manny/fastify-appwrite) Fastify\n  Plugin for interacting with Appwrite server.\n- [`fastify-at-mysql`](https://github.com/mateonunez/fastify-at-mysql) Fastify\n  MySQL plugin with auto SQL injection attack prevention.\n- [`fastify-at-postgres`](https://github.com/mateonunez/fastify-at-postgres) Fastify\n  Postgres plugin with auto SQL injection attack prevention.\n- [`fastify-auth0-verify`](https://github.com/nearform/fastify-auth0-verify):\n  Auth0 verification plugin for Fastify, internally uses\n  [fastify-jwt](https://npm.im/fastify-jwt) and\n  [jsonwebtoken](https://npm.im/jsonwebtoken).\n- [`fastify-autocrud`](https://github.com/paranoiasystem/fastify-autocrud)\n  Plugin to auto-generate CRUD routes as fast as possible.\n- [`fastify-autoroutes`](https://github.com/GiovanniCardamone/fastify-autoroutes)\n  Plugin to scan and load routes based on filesystem path from a custom\n  directory.\n- [`fastify-aws-sns`](https://github.com/gzileni/fastify-aws-sns) Fastify plugin\n  for AWS Simple Notification Service (AWS SNS) that coordinates and manages\n  the delivery or sending of messages to subscribing endpoints or clients.\n- [`fastify-aws-timestream`](https://github.com/gzileni/fastify-aws-timestream)\n  Fastify plugin for managing databases, tables, and querying and creating\n  scheduled queries with AWS Timestream.\n- [`fastify-axios`](https://github.com/davidedantonio/fastify-axios) Plugin to\n  send HTTP requests via [axios](https://github.com/axios/axios).\n- [`fastify-babel`](https://github.com/cfware/fastify-babel) Fastify plugin for\n  development servers that require Babel transformations of JavaScript sources.\n- [`fastify-bcrypt`](https://github.com/beliven-it/fastify-bcrypt) A Bcrypt hash\n  generator & checker.\n- [`fastify-blipp`](https://github.com/PavelPolyakov/fastify-blipp) Prints your\n  routes to the console, so you definitely know which endpoints are available.\n- [`fastify-bookshelf`](https://github.com/butlerx/fastify-bookshelfjs) Fastify\n  plugin to add [bookshelf.js](https://bookshelfjs.org/) ORM support.\n- [`fastify-boom`](https://github.com/jeromemacias/fastify-boom) Fastify plugin\n  to add [boom](https://github.com/hapijs/boom) support.\n- [`fastify-bree`](https://github.com/climba03003/fastify-bree) Fastify plugin\n  to add [bree](https://github.com/breejs/bree) support.\n- [`fastify-bugsnag`](https://github.com/ZigaStrgar/fastify-bugsnag) Fastify plugin\n  to add support for [Bugsnag](https://www.bugsnag.com/) error reporting.\n- [`fastify-casbin`](https://github.com/nearform/fastify-casbin) Casbin support\n  for Fastify.\n- [`fastify-casbin-rest`](https://github.com/nearform/fastify-casbin-rest)\n  Casbin support for Fastify based on a RESTful model.\n- [`fastify-casl`](https://github.com/Inlecom/fastify-casl) Fastify\n  [CASL](https://github.com/stalniy/casl) plugin that supports ACL-like\n  protection of endpoints via either a preSerialization & preHandler hook,\n  sanitizing the inputs and outputs of your application based on user rights.\n- [`fastify-cloudevents`](https://github.com/smartiniOnGitHub/fastify-cloudevents)\n  Fastify plugin to generate and forward Fastify events in the Cloudevents\n  format.\n- [`fastify-cloudinary`](https://github.com/Vanilla-IceCream/fastify-cloudinary)\n  The Cloudinary Fastify SDK allows you to quickly and easily integrate your\n  application with Cloudinary. Effortlessly optimize and transform your cloud's\n  assets.\n- [`fastify-cockroachdb`](https://github.com/alex-ppg/fastify-cockroachdb)\n  Fastify plugin to connect to a CockroachDB PostgreSQL instance via the\n  Sequelize ORM.\n- [`fastify-constraints`](https://github.com/nearform/fastify-constraints)\n  Fastify plugin to add constraints to multiple routes\n- [`fastify-couchdb`](https://github.com/nigelhanlon/fastify-couchdb) Fastify\n  plugin to add CouchDB support via [nano](https://github.com/apache/nano).\n- [`fastify-crud-generator`](https://github.com/beliven-it/fastify-crud-generator)\n  A plugin to rapidly generate CRUD routes for any entity.\n- [`fastify-custom-healthcheck`](https://github.com/gkampitakis/fastify-custom-healthcheck)\n  Fastify plugin to add health route in your server that asserts custom\n  functions.\n- [`fastify-decorators`](https://github.com/L2jLiga/fastify-decorators) Fastify\n  plugin that provides the set of TypeScript decorators.\n- [`fastify-delay-request`](https://github.com/climba03003/fastify-delay-request)\n  Fastify plugin that allows requests to be delayed whilst a task the response is\n  dependent on is run, such as a resource intensive process.\n- [`fastify-disablecache`](https://github.com/Fdawgs/fastify-disablecache)\n  Fastify plugin to disable client-side caching, inspired by\n  [nocache](https://github.com/helmetjs/nocache).\n- [`fastify-dynamodb`](https://github.com/matrus2/fastify-dynamodb) AWS DynamoDB\n  plugin for Fastify. It exposes\n  [AWS.DynamoDB.DocumentClient()](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB/DocumentClient.html)\n  object.\n- [`fastify-dynareg`](https://github.com/greguz/fastify-dynareg) Dynamic plugin\n  register for Fastify.\n- [`fastify-early-hints`](https://github.com/zekth/fastify-early-hints) Plugin\n  to add HTTP 103 feature based on [RFC\n  8297](https://httpwg.org/specs/rfc8297.html)\n- [`fastify-envalid`](https://github.com/alemagio/fastify-envalid) Fastify\n  plugin to integrate [envalid](https://github.com/af/envalid) in your Fastify\n  project.\n- [`fastify-error-page`](https://github.com/hemerajs/fastify-error-page) Fastify\n  plugin to print errors in structured HTML to the browser.\n- [`fastify-esso`](https://github.com/patrickpissurno/fastify-esso) The easiest\n  authentication plugin for Fastify, with built-in support for Single sign-on\n  (and great documentation).\n- [`fastify-explorer`](https://github.com/Eomm/fastify-explorer) Get control of\n  your decorators across all the encapsulated contexts.\n- [`fastify-favicon`](https://github.com/smartiniOnGitHub/fastify-favicon)\n  Fastify plugin to serve default favicon.\n- [`fastify-feature-flags`](https://gitlab.com/m03geek/fastify-feature-flags)\n  Fastify feature flags plugin with multiple providers support (e.g. env,\n  [config](https://lorenwest.github.io/node-config/),\n  [unleash](https://unleash.github.io/)).\n- [`fastify-file-routes`](https://github.com/spa5k/fastify-file-routes) Get\n  Next.js based file system routing into fastify.\n- [`fastify-file-upload`](https://github.com/huangang/fastify-file-upload)\n  Fastify plugin for uploading files.\n- [`fastify-firebase`](https://github.com/now-ims/fastify-firebase) Fastify\n  plugin for [Firebase Admin SDK](https://firebase.google.com/docs/admin/setup)\n  to Fastify so you can easily use Firebase Auth, Firestore, Cloud Storage,\n  Cloud Messaging, and more.\n- [`fastify-firebase-auth`](https://github.com/oxsav/fastify-firebase-auth)\n  Firebase Authentication for Fastify supporting all of the methods relating to\n  the authentication API.\n- [`fastify-formidable`](https://github.com/climba03003/fastify-formidable)\n  Handy plugin to provide multipart support and fastify-swagger integration.\n- [`fastify-gcloud-trace`](https://github.com/mkinoshi/fastify-gcloud-trace)\n  [Google Cloud Trace API](https://cloud.google.com/trace/docs/reference)\n  Connector for Fastify.\n- [`fastify-get-head`](https://github.com/MetCoder95/fastify-get-head) Small\n  plugin to set a new HEAD route handler for each GET route previously\n  registered in Fastify.\n- [`fastify-get-only`](https://github.com/DanieleFedeli/fastify-get-only) Small\n  plugin used to make fastify accept only GET requests\n- [`fastify-good-sessions`](https://github.com/Phara0h/fastify-good-sessions) A\n  good Fastify sessions plugin focused on speed.\n- [`fastify-google-cloud-storage`](https://github.com/carlozamagni/fastify-google-cloud-storage)\n  Fastify plugin that exposes a GCP Cloud Storage client instance.\n- [`fastify-graceful-shutdown`](https://github.com/hemerajs/fastify-graceful-shutdown)\n  Shutdown Fastify gracefully and asynchronously.\n- [`fastify-grant`](https://github.com/simov/fastify-grant)\n  Authentication/Authorization plugin for Fastify that supports 200+ OAuth\n  Providers.\n- [`fastify-guard`](https://github.com/hsynlms/fastify-guard) A Fastify plugin\n  that protects endpoints by checking authenticated user roles and/or scopes.\n- [`fastify-hasura`](https://github.com/ManUtopiK/fastify-hasura) A Fastify\n  plugin to have fun with [Hasura](https://github.com/hasura/graphql-engine).\n- [`fastify-healthcheck`](https://github.com/smartiniOnGitHub/fastify-healthcheck)\n  Fastify plugin to serve a health check route and a probe script.\n- [`fastify-hemera`](https://github.com/hemerajs/fastify-hemera) Fastify Hemera\n  plugin, for writing reliable & fault-tolerant microservices with\n  [nats.io](https://nats.io/).\n- [`fastify-http-client`](https://github.com/kenuyx/fastify-http-client) Plugin\n  to send HTTP(s) requests. Built upon [urllib](https://github.com/node-modules/urllib).\n- [`fastify-http-context`](https://github.com/thorough-developer/fastify-http-context)\n  Fastify plugin for \"simulating\" a thread of execution to allow for true HTTP\n  context to take place per API call within the Fastify lifecycle of calls.\n- [`fastify-http-errors-enhanced`](https://github.com/ShogunPanda/fastify-http-errors-enhanced)\n  An error handling plugin for Fastify that uses enhanced HTTP errors.\n- [`fastify-http2https`](https://github.com/lolo32/fastify-http2https) Redirect\n  HTTP requests to HTTPS, both using the same port number, or different response\n  on HTTP and HTTPS.\n- [`fastify-https-always`](https://github.com/mattbishop/fastify-https-always)\n  Lightweight, proxy-aware redirect plugin from HTTP to HTTPS.\n- [`fastify-https-redirect`](https://github.com/tomsvogel/fastify-https-redirect)\n  Fastify plugin for auto-redirect from HTTP to HTTPS.\n- [`fastify-impressions`](https://github.com/manju4ever/fastify-impressions)\n  Fastify plugin to track impressions of all the routes.\n- [`fastify-influxdb`](https://github.com/alex-ppg/fastify-influxdb) Fastify\n  InfluxDB plugin connecting to an InfluxDB instance via the Influx default\n  package.\n- [`fastify-ip`](https://github.com/metcoder95/fastify-ip) A plugin\n  for Fastify that allows you to infer a request ID by a\n  given set of custom Request headers.\n- [`fastify-json-to-xml`](https://github.com/Fdawgs/fastify-json-to-xml) Fastify\n  plugin to serialize JSON responses into XML.\n- [`fastify-jwt-authz`](https://github.com/Ethan-Arrowood/fastify-jwt-authz) JWT\n  user scope verifier.\n- [`fastify-jwt-webapp`](https://github.com/charlesread/fastify-jwt-webapp) JWT\n  authentication for Fastify-based web apps.\n- [`fastify-kafkajs`](https://github.com/kffl/fastify-kafkajs) Fastify plugin\n  that adds support for KafkaJS - a modern Apache Kafka client library.\n- [`fastify-keycloak-adapter`](https://github.com/yubinTW/fastify-keycloak-adapter)\n  A keycloak adapter for a Fastify app.\n- [`fastify-knexjs`](https://github.com/chapuletta/fastify-knexjs) Fastify\n  plugin for support KnexJS Query Builder.\n- [`fastify-knexjs-mock`](https://github.com/chapuletta/fastify-knexjs-mock)\n  Fastify Mock KnexJS for testing support.\n- [`fastify-kubernetes`](https://github.com/greguz/fastify-kubernetes) Fastify\n  Kubernetes client plugin.\n- [`fastify-language-parser`](https://github.com/lependu/fastify-language-parser)\n  Fastify plugin to parse request language.\n- [`fastify-lcache`](https://github.com/denbon05/fastify-lcache)\n  Lightweight cache plugin\n- [`fastify-list-routes`](https://github.com/chuongtrh/fastify-list-routes)\n  A simple plugin for Fastify list all available routes.\n- [`fastify-loader`](https://github.com/TheNoim/fastify-loader) Load routes from\n  a directory and inject the Fastify instance in each file.\n- [`fastify-lured`](https://github.com/lependu/fastify-lured) Plugin to load lua\n  scripts with [fastify-redis](https://github.com/fastify/fastify-redis) and\n  [lured](https://github.com/enobufs/lured).\n- [`fastify-lyra`](https://github.com/mateonunez/fastify-lyra)\n  A plugin to implement [Lyra](https://github.com/LyraSearch/lyra) search engine\n  on Fastify.\n- [`fastify-mailer`](https://github.com/coopflow/fastify-mailer) Plugin to\n  initialize and encapsulate [Nodemailer](https://nodemailer.com)'s transporters\n  instances in Fastify.\n- [`fastify-markdown`](https://github.com/freezestudio/fastify-markdown) Plugin\n  to markdown support.\n- [`fastify-method-override`](https://github.com/corsicanec82/fastify-method-override)\n  Plugin for Fastify, which allows the use of HTTP verbs, such as DELETE, PATCH,\n  HEAD, PUT, OPTIONS in case the client doesn't support them.\n- [`fastify-metrics`](https://gitlab.com/m03geek/fastify-metrics) Plugin for\n  exporting [Prometheus](https://prometheus.io) metrics.\n- [`fastify-minify`](https://github.com/Jelenkee/fastify-minify) Plugin for\n  minification and transformation of responses.\n- [`fastify-mongo-memory`](https://github.com/chapuletta/fastify-mongo-memory)\n  Fastify MongoDB in Memory Plugin for testing support.\n- [`fastify-mongodb-sanitizer`](https://github.com/KlemenKozelj/fastify-mongodb-sanitizer)\n  Fastify plugin that sanitizes client input to prevent\n  potential MongoDB query injection attacks.\n- [`fastify-mongoose-api`](https://github.com/jeka-kiselyov/fastify-mongoose-api)\n  Fastify plugin to create REST API methods based on Mongoose MongoDB models.\n- [`fastify-mongoose-driver`](https://github.com/alex-ppg/fastify-mongoose)\n  Fastify Mongoose plugin that connects to a MongoDB via the Mongoose plugin\n  with support for Models.\n- [`fastify-mqtt`](https://github.com/love-lena/fastify-mqtt) Plugin to share\n  [mqtt](https://www.npmjs.com/package/mqtt) client across Fastify.\n- [`fastify-msgpack`](https://github.com/kenriortega/fastify-msgpack) Fastify\n  and MessagePack, together at last. Uses @msgpack/msgpack by default.\n- [`fastify-multer`](https://github.com/fox1t/fastify-multer) Multer is a plugin\n  for handling multipart/form-data, which is primarily used for uploading files.\n- [`fastify-nats`](https://github.com/mahmed8003/fastify-nats) Plugin to share\n  [NATS](https://nats.io) client across Fastify.\n- [`fastify-next-auth`](https://github.com/wobsoriano/fastify-next-auth)\n  NextAuth.js plugin for Fastify.\n- [`fastify-no-additional-properties`](https://github.com/greguz/fastify-no-additional-properties)\n  Add `additionalProperties: false` by default to your JSON Schemas.\n- [`fastify-no-icon`](https://github.com/jsumners/fastify-no-icon) Plugin to\n  eliminate thrown errors for `/favicon.ico` requests.\n- [`fastify-nodemailer`](https://github.com/lependu/fastify-nodemailer) Plugin\n  to share [nodemailer](https://nodemailer.com) transporter across Fastify.\n- [`fastify-normalize-request-reply`](https://github.com/ericrglass/fastify-normalize-request-reply)\n  Plugin to normalize the request and reply to the Express version 4.x request\n  and response, which allows use of middleware, like swagger-stats, that was\n  originally written for Express.\n- [`fastify-now`](https://github.com/yonathan06/fastify-now) Structure your\n  endpoints in a folder and load them dynamically with Fastify.\n- [`fastify-nuxtjs`](https://github.com/gomah/fastify-nuxtjs) Vue server-side\n  rendering support for Fastify with Nuxt.js Framework.\n- [`fastify-oas`](https://gitlab.com/m03geek/fastify-oas) Generates OpenAPI 3.0+\n  documentation from routes schemas for Fastify.\n- [`fastify-objectionjs`](https://github.com/jarcodallo/fastify-objectionjs)\n  Plugin for the Fastify framework that provides integration with objectionjs\n  ORM.\n- [`fastify-objectionjs-classes`](https://github.com/kamikazechaser/fastify-objectionjs-classes)\n  Plugin to cherry-pick classes from objectionjs ORM.\n- [`fastify-openapi-docs`](https://github.com/ShogunPanda/fastify-openapi-docs)\n  A Fastify plugin that generates OpenAPI spec automatically.\n- [`fastify-openapi-glue`](https://github.com/seriousme/fastify-openapi-glue)\n  Glue for OpenAPI specifications in Fastify, autogenerates routes based on an\n  OpenAPI Specification.\n- [`fastify-opentelemetry`](https://github.com/autotelic/fastify-opentelemetry)\n  A Fastify plugin that uses the [OpenTelemetry\n  API](https://github.com/open-telemetry/opentelemetry-js-api) to provide\n  request tracing.\n- [`fastify-oracle`](https://github.com/cemremengu/fastify-oracle) Attaches an\n  [`oracledb`](https://github.com/oracle/node-oracledb) connection pool to a\n  Fastify server instance.\n- [`fastify-orientdb`](https://github.com/mahmed8003/fastify-orientdb) Fastify\n  OrientDB connection plugin, with which you can share the OrientDB connection\n  across every part of your server.\n- [`fastify-osm`](https://github.com/gzileni/fastify-osm) Fastify\n  OSM plugin to run overpass queries by OpenStreetMap.\n- [`fastify-peekaboo`](https://github.com/simone-sanfratello/fastify-peekaboo)\n  Fastify plugin for memoize responses by expressive settings.\n- [`fastify-piscina`](https://github.com/piscinajs/fastify-piscina) A worker\n  thread pool plugin using [Piscina](https://github.com/piscinajs/piscina).\n- [`fastify-polyglot`](https://github.com/beliven-it/fastify-polyglot) A plugin to\n  handle i18n using\n  [node-polyglot](https://www.npmjs.com/package/node-polyglot).\n- [`fastify-postgraphile`](https://github.com/alemagio/fastify-postgraphile)\n  Plugin to integrate [PostGraphile](https://www.graphile.org/postgraphile/) in\n  a Fastify project.\n- [`fastify-postgres-dot-js`](https://github.com/kylerush/fastify-postgresjs) Fastify\n  PostgreSQL connection plugin that uses [Postgres.js](https://github.com/porsager/postgres).\n- [`fastify-prettier`](https://github.com/hsynlms/fastify-prettier) A Fastify\n  plugin that uses [prettier](https://github.com/prettier/prettier) under the\n  hood to beautify outgoing responses and/or other things in the Fastify server.\n- [`fastify-print-routes`](https://github.com/ShogunPanda/fastify-print-routes)\n  A Fastify plugin that prints all available routes.\n- [`fastify-protobufjs`](https://github.com/kenriortega/fastify-protobufjs)\n  Fastify and protobufjs, together at last. Uses protobufjs by default.\n- [`fastify-qrcode`](https://github.com/chonla/fastify-qrcode) This plugin\n  utilizes [qrcode](https://github.com/soldair/node-qrcode) to generate QR Code.\n- [`fastify-qs`](https://github.com/vanodevium/fastify-qs) A plugin for Fastify\n  that adds support for parsing URL query parameters with\n  [qs](https://github.com/ljharb/qs).\n- [`fastify-racing`](https://github.com/metcoder95/fastify-racing) Fastify's\n  plugin that adds support to handle an aborted request asynchronous.\n- [`fastify-ravendb`](https://github.com/nearform/fastify-ravendb) RavenDB\n  connection plugin. It exposes the same `DocumentStore` (or multiple ones)\n  across the whole Fastify application.\n- [`fastify-raw-body`](https://github.com/Eomm/fastify-raw-body) Add the\n  `request.rawBody` field.\n- [`fastify-rbac`](https://gitlab.com/m03geek/fastify-rbac) Fastify role-based\n  access control plugin.\n- [`fastify-recaptcha`](https://github.com/qwertyforce/fastify-recaptcha)\n  Fastify plugin for recaptcha verification.\n- [`fastify-redis-channels`](https://github.com/hearit-io/fastify-redis-channels)\n  A plugin for fast, reliable, and scalable channels implementation based on\n  Redis streams.\n- [`fastify-register-routes`](https://github.com/israeleriston/fastify-register-routes)\n  Plugin to automatically load routes from a specified path and optionally limit\n  loaded file names by a regular expression.\n- [`fastify-response-caching`](https://github.com/codeaholicguy/fastify-response-caching)\n  A Fastify plugin for caching the response.\n- [`fastify-response-time`](https://github.com/lolo32/fastify-response-time) Add\n  `X-Response-Time` header at each request for Fastify, in milliseconds.\n- [`fastify-resty`](https://github.com/FastifyResty/fastify-resty) Fastify-based\n  web framework with REST API routes auto-generation for TypeORM entities using\n  DI and decorators.\n- [`fastify-reverse-routes`](https://github.com/dimonnwc3/fastify-reverse-routes)\n  Fastify reverse routes plugin, allows to defined named routes and build path\n  using name and parameters.\n- [`fastify-rob-config`](https://github.com/jeromemacias/fastify-rob-config)\n  Fastify Rob-Config integration.\n- [`fastify-route-group`](https://github.com/TakNePoidet/fastify-route-group)\n  Convenient grouping and inheritance of routes.\n- [`fastify-s3-buckets`](https://github.com/kibertoad/fastify-s3-buckets)\n  Ensure the existence of defined S3 buckets on the application startup.\n- [`fastify-schema-constraint`](https://github.com/Eomm/fastify-schema-constraint)\n  Choose the JSON schema to use based on request parameters.\n- [`fastify-schema-to-typescript`](https://github.com/thomasthiebaud/fastify-schema-to-typescript)\n  Generate typescript types based on your JSON/YAML validation schemas so they\n  are always in sync.\n- [`fastify-sentry`](https://github.com/alex-ppg/fastify-sentry) Fastify plugin\n  to add the Sentry SDK error handler to requests.\n- [`fastify-sequelize`](https://github.com/lyquocnam/fastify-sequelize) Fastify\n  plugin work with Sequelize (adapter for NodeJS -> Sqlite, Mysql, Mssql,\n  Postgres).\n- [`fastify-server-session`](https://github.com/jsumners/fastify-server-session)\n  A session plugin with support for arbitrary backing caches via\n  `fastify-caching`.\n- [`fastify-shared-schema`](https://github.com/Adibla/fastify-shared-schema) Plugin\n  for sharing schemas between different routes.\n- [`fastify-slonik`](https://github.com/Unbuttun/fastify-slonik) Fastify Slonik\n  plugin, with this you can use slonik in every part of your server.\n- [`fastify-slow-down`](https://github.com/nearform/fastify-slow-down) A plugin\n  to delay the response from the server.\n- [`fastify-socket.io`](https://github.com/alemagio/fastify-socket.io) a\n  Socket.io plugin for Fastify.\n- [`fastify-split-validator`](https://github.com/MetCoder95/fastify-split-validator)\n  Small plugin to allow you use multiple validators in one route based on each\n  HTTP part of the request.\n- [`fastify-sqlite`](https://github.com/Eomm/fastify-sqlite) connects your\n  application to a sqlite3 database.\n- [`fastify-sse`](https://github.com/lolo32/fastify-sse) to provide Server-Sent\n  Events with `reply.sse( … )` to Fastify.\n- [`fastify-sse-v2`](https://github.com/nodefactoryio/fastify-sse-v2) to provide\n  Server-Sent Events using Async Iterators (supports newer versions of Fastify).\n- [`fastify-ssr-vite`](https://github.com/nineohnine/fastify-ssr-vite) A simple\n  plugin for setting up server side rendering with vite.\n- [`fastify-stripe`](https://github.com/coopflow/fastify-stripe) Plugin to\n  initialize and encapsulate [Stripe\n  Node.js](https://github.com/stripe/stripe-node) instances in Fastify.\n- [`fastify-supabase`](https://github.com/coopflow/fastify-supabase) Plugin to\n  initialize and encapsulate [Supabase](https://github.com/supabase/supabase-js)\n  instances in Fastify.\n- [`fastify-tls-keygen`](https://gitlab.com/sebdeckers/fastify-tls-keygen)\n  Automatically generate a browser-compatible, trusted, self-signed,\n  localhost-only, TLS certificate.\n- [`fastify-tokenize`](https://github.com/Bowser65/fastify-tokenize)\n  [Tokenize](https://github.com/Bowser65/Tokenize) plugin for Fastify that\n  removes the pain of managing authentication tokens, with built-in integration\n  for `fastify-auth`.\n- [`fastify-totp`](https://github.com/beliven-it/fastify-totp) A plugin to handle\n  TOTP (e.g. for 2FA).\n- [`fastify-twitch-ebs-tools`](https://github.com/lukemnet/fastify-twitch-ebs-tools)\n  Useful functions for Twitch Extension Backend Services (EBS).\n- [`fastify-type-provider-zod`](https://github.com/turkerdev/fastify-type-provider-zod)\n  Fastify\n  [type provider](https://www.fastify.io/docs/latest/Reference/Type-Providers/)\n  for [zod](https://github.com/colinhacks/zod).\n- [`fastify-typeorm-plugin`](https://github.com/inthepocket/fastify-typeorm-plugin)\n  Fastify plugin to work with TypeORM.\n- [`fastify-user-agent`](https://github.com/Eomm/fastify-user-agent) parses your\n  request's `user-agent` header.\n- [`fastify-vhost`](https://github.com/patrickpissurno/fastify-vhost) Proxy\n  subdomain HTTP requests to another server (useful if you want to point\n  multiple subdomains to the same IP address, while running different servers on\n  the same machine).\n- [`fastify-vite`](https://github.com/galvez/fastify-vite)\n  [Vite](https://vitejs.dev/) plugin for Fastify with SSR data support.\n- [`fastify-vue-plugin`](https://github.com/TheNoim/fastify-vue)\n  [Nuxt.js](https://nuxtjs.org) plugin for Fastify. Control the routes nuxt\n  should use.\n- [`fastify-wamp-router`](https://github.com/lependu/fastify-wamp-router) Web\n  Application Messaging Protocol router for Fastify.\n- [`fastify-web-response`](https://github.com/erfanium/fastify-web-response)\n  Enables returning web streams objects `Response` and `ReadableStream` in routes.\n- [`fastify-webpack-hmr`](https://github.com/lependu/fastify-webpack-hmr)\n  Webpack hot module reloading plugin for Fastify.\n- [`fastify-webpack-hot`](https://github.com/gajus/fastify-webpack-hot) Webpack\n  Hot Module Replacement for Fastify.\n- [`fastify-ws`](https://github.com/gj/fastify-ws) WebSocket integration for\n  Fastify — with support for WebSocket lifecycle hooks instead of a single\n  handler function. Built upon [ws](https://github.com/websockets/ws) and\n  [uws](https://github.com/uNetworking/uWebSockets).\n- [`fastify-xml-body-parser`](https://github.com/NaturalIntelligence/fastify-xml-body-parser)\n  Parse XML payload / request body into JS / JSON object.\n- [`fastify-xray`](https://github.com/jeromemacias/fastify-xray) Fastify plugin\n  for AWS XRay recording.\n- [`i18next-http-middleware`](https://github.com/i18next/i18next-http-middleware#fastify-usage)\n  An [i18next](https://www.i18next.com) based i18n (internationalization)\n  middleware to be used with Node.js web frameworks like Express or Fastify and\n  also for Deno.\n- [`k-fastify-gateway`](https://github.com/jkyberneees/fastify-gateway) API\n  Gateway plugin for Fastify, a low footprint implementation that uses the\n  `fastify-reply-from` HTTP proxy library.\n- [`mercurius`](https://mercurius.dev/) A fully-featured and performant GraphQL\n  server implementation for Fastify.\n- [`nstats`](https://github.com/Phara0h/nstats) A fast and compact way to get\n  all your network and process stats for your node application. Websocket,\n  HTTP/S, and prometheus compatible!\n- [`oas-fastify`](https://github.com/ahmadnassri/node-oas-fastify) OAS 3.x to\n  Fastify routes automation. Automatically generates route handlers with fastify\n  configuration and validation.\n- [`openapi-validator-middleware`](https://github.com/PayU/openapi-validator-middleware#fastify)\n  Swagger and OpenAPI 3.0 spec-based request validation middleware that supports\n  Fastify.\n- [`pubsub-http-handler`](https://github.com/cobraz/pubsub-http-handler) A Fastify\n  plugin to easily create Google Cloud PubSub endpoints.\n- [`sequelize-fastify`](https://github.com/hsynlms/sequelize-fastify) A simple\n  and lightweight Sequelize plugin for Fastify.\n- [`typeorm-fastify-plugin`](https://github.com/jclemens24/fastify-typeorm) A simple\n  and updated Typeorm plugin for use with Fastify.\n#### [Community Tools](#community-tools)\n- [`@fastify-userland/workflows`](https://github.com/fastify-userland/workflows)\n  Reusable workflows for use in the Fastify plugin\n- [`fast-maker`](https://github.com/imjuni/fast-maker) route configuration\n  generator by directory structure.\n- [`fastify-flux`](https://github.com/Jnig/fastify-flux) Tool for building\n  Fastify APIs using decorators and convert Typescript interface to JSON Schema.\n- [`simple-tjscli`](https://github.com/imjuni/simple-tjscli) CLI tool to\n  generate JSON Schema from TypeScript interfaces.\n/types/hooks.d.tsnimport { Readable } from 'stream'\nimport { FastifyInstance } from './instance'\nimport { RouteOptions, RouteGenericInterface } from './route'\nimport { RawServerBase, RawServerDefault, RawRequestDefaultExpression, RawReplyDefaultExpression, ContextConfigDefault } from './utils'\nimport { FastifyRequest } from './request'\nimport { FastifyReply } from './reply'\nimport { FastifyError } from '@fastify/error'\nimport { FastifyBaseLogger } from './logger'\nimport {\n  FastifyTypeProvider,\n  FastifyTypeProviderDefault\n} from './type-provider'\nimport { RegisterOptions } from './register'\nimport { FastifySchema } from './schema'\nimport { FastifyPluginOptions } from './plugin'\n\ntype HookHandlerDoneFunction = <TError extends Error = FastifyError>(err?: TError) => void\n\ninterface RequestPayload extends Readable {\n  receivedEncodedLength?: number;\n}\n\n// Lifecycle Hooks\n\n/**\n * `onRequest` is the first hook to be executed in the request lifecycle. There was no previous hook, the next hook will be `preParsing`.\n *  Notice: in the `onRequest` hook, request.body will always be null, because the body parsing happens before the `preHandler` hook.\n */\nexport interface onRequestHookHandler<\n  RawServer extends RawServerBase = RawServerDefault,\n  RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,\n  RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,\n  RouteGeneric extends RouteGenericInterface = RouteGenericInterface,\n  ContextConfig = ContextConfigDefault,\n  SchemaCompiler extends FastifySchema = FastifySchema,\n  TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,\n  Logger extends FastifyBaseLogger = FastifyBaseLogger\n> {\n  (\n    this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,\n    request: FastifyRequest<RouteGeneric, RawServer, RawRequest, SchemaCompiler, TypeProvider, ContextConfig, Logger>,\n    reply: FastifyReply<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider>,\n    done: HookHandlerDoneFunction\n  ): void;\n}\n\nexport interface onRequestAsyncHookHandler<\n  RawServer extends RawServerBase = RawServerDefault,\n  RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,\n  RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,\n  RouteGeneric extends RouteGenericInterface = RouteGenericInterface,\n  ContextConfig = ContextConfigDefault,\n  SchemaCompiler extends FastifySchema = FastifySchema,\n  TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,\n  Logger extends FastifyBaseLogger = FastifyBaseLogger\n> {\n  (\n    this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,\n    request: FastifyRequest<RouteGeneric, RawServer, RawRequest, SchemaCompiler, TypeProvider, ContextConfig, Logger>,\n    reply: FastifyReply<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider>,\n  ): Promise<unknown>;\n}\n\n/**\n * `preParsing` is the second hook to be executed in the request lifecycle. The previous hook was `onRequest`, the next hook will be `preValidation`.\n * Notice: in the `preParsing` hook, request.body will always be null, because the body parsing happens before the `preHandler` hook.\n */\nexport interface preParsingHookHandler<\n  RawServer extends RawServerBase = RawServerDefault,\n  RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,\n  RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,\n  RouteGeneric extends RouteGenericInterface = RouteGenericInterface,\n  ContextConfig = ContextConfigDefault,\n  SchemaCompiler extends FastifySchema = FastifySchema,\n  TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,\n  Logger extends FastifyBaseLogger = FastifyBaseLogger\n> {\n  (\n    this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,\n    request: FastifyRequest<RouteGeneric, RawServer, RawRequest, SchemaCompiler, TypeProvider, ContextConfig, Logger>,\n    reply: FastifyReply<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider>,\n    payload: RequestPayload,\n    done: <TError extends Error = FastifyError>(err?: TError | null, res?: RequestPayload) => void\n  ): void;\n}\n\nexport interface preParsingAsyncHookHandler<\n  RawServer extends RawServerBase = RawServerDefault,\n  RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,\n  RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,\n  RouteGeneric extends RouteGenericInterface = RouteGenericInterface,\n  ContextConfig = ContextConfigDefault,\n  SchemaCompiler extends FastifySchema = FastifySchema,\n  TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,\n  Logger extends FastifyBaseLogger = FastifyBaseLogger\n> {\n  (\n    this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,\n    request: FastifyRequest<RouteGeneric, RawServer, RawRequest, SchemaCompiler, TypeProvider, ContextConfig, Logger>,\n    reply: FastifyReply<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider>,\n    payload: RequestPayload,\n  ): Promise<RequestPayload | unknown>;\n}\n\n/**\n * `preValidation` is the third hook to be executed in the request lifecycle. The previous hook was `preParsing`, the next hook will be `preHandler`.\n */\nexport interface preValidationHookHandler<\n  RawServer extends RawServerBase = RawServerDefault,\n  RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,\n  RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,\n  RouteGeneric extends RouteGenericInterface = RouteGenericInterface,\n  ContextConfig = ContextConfigDefault,\n  SchemaCompiler extends FastifySchema = FastifySchema,\n  TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,\n  Logger extends FastifyBaseLogger = FastifyBaseLogger\n> {\n  (\n    this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,\n    request: FastifyRequest<RouteGeneric, RawServer, RawRequest, SchemaCompiler, TypeProvider, ContextConfig, Logger>,\n    reply: FastifyReply<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider>,\n    done: HookHandlerDoneFunction\n  ): void;\n}\n\nexport interface preValidationAsyncHookHandler<\n  RawServer extends RawServerBase = RawServerDefault,\n  RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,\n  RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,\n  RouteGeneric extends RouteGenericInterface = RouteGenericInterface,\n  ContextConfig = ContextConfigDefault,\n  SchemaCompiler extends FastifySchema = FastifySchema,\n  TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,\n  Logger extends FastifyBaseLogger = FastifyBaseLogger\n> {\n  (\n    this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,\n    request: FastifyRequest<RouteGeneric, RawServer, RawRequest, SchemaCompiler, TypeProvider, ContextConfig, Logger>,\n    reply: FastifyReply<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider>,\n  ): Promise<unknown>;\n}\n\n/**\n * `preHandler` is the fourth hook to be executed in the request lifecycle. The previous hook was `preValidation`, the next hook will be `preSerialization`.\n */\nexport interface preHandlerHookHandler<\n  RawServer extends RawServerBase = RawServerDefault,\n  RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,\n  RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,\n  RouteGeneric extends RouteGenericInterface = RouteGenericInterface,\n  ContextConfig = ContextConfigDefault,\n  SchemaCompiler extends FastifySchema = FastifySchema,\n  TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,\n  Logger extends FastifyBaseLogger = FastifyBaseLogger\n> {\n  (\n    this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,\n    request: FastifyRequest<RouteGeneric, RawServer, RawRequest, SchemaCompiler, TypeProvider, ContextConfig, Logger>,\n    reply: FastifyReply<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider>,\n    done: HookHandlerDoneFunction\n  ): void;\n}\n\nexport interface preHandlerAsyncHookHandler<\n  RawServer extends RawServerBase = RawServerDefault,\n  RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,\n  RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,\n  RouteGeneric extends RouteGenericInterface = RouteGenericInterface,\n  ContextConfig = ContextConfigDefault,\n  SchemaCompiler extends FastifySchema = FastifySchema,\n  TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,\n  Logger extends FastifyBaseLogger = FastifyBaseLogger\n> {\n  (\n    this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,\n    request: FastifyRequest<RouteGeneric, RawServer, RawRequest, SchemaCompiler, TypeProvider, ContextConfig, Logger>,\n    reply: FastifyReply<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider>,\n  ): Promise<unknown>;\n}\n\n// This is used within the `preSerialization` and `onSend` hook handlers\ninterface DoneFuncWithErrOrRes {\n  (): void;\n  <TError extends Error = FastifyError>(err: TError): void;\n  (err: null, res: unknown): void;\n}\n\n/**\n * `preSerialization` is the fifth hook to be executed in the request lifecycle. The previous hook was `preHandler`, the next hook will be `onSend`.\n *  Note: the hook is NOT called if the payload is a string, a Buffer, a stream or null.\n */\nexport interface preSerializationHookHandler<\n  PreSerializationPayload,\n  RawServer extends RawServerBase = RawServerDefault,\n  RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,\n  RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,\n  RouteGeneric extends RouteGenericInterface = RouteGenericInterface,\n  ContextConfig = ContextConfigDefault,\n  SchemaCompiler extends FastifySchema = FastifySchema,\n  TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,\n  Logger extends FastifyBaseLogger = FastifyBaseLogger\n> {\n  (\n    this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,\n    request: FastifyRequest<RouteGeneric, RawServer, RawRequest, SchemaCompiler, TypeProvider, ContextConfig, Logger>,\n    reply: FastifyReply<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider>,\n    payload: PreSerializationPayload,\n    done: DoneFuncWithErrOrRes\n  ): void;\n}\n\nexport interface preSerializationAsyncHookHandler<\n  PreSerializationPayload,\n  RawServer extends RawServerBase = RawServerDefault,\n  RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,\n  RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,\n  RouteGeneric extends RouteGenericInterface = RouteGenericInterface,\n  ContextConfig = ContextConfigDefault,\n  SchemaCompiler extends FastifySchema = FastifySchema,\n  TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,\n  Logger extends FastifyBaseLogger = FastifyBaseLogger\n> {\n  (\n    this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,\n    request: FastifyRequest<RouteGeneric, RawServer, RawRequest, SchemaCompiler, TypeProvider, ContextConfig, Logger>,\n    reply: FastifyReply<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider>,\n    payload: PreSerializationPayload\n  ): Promise<unknown>;\n}\n\n/**\n * You can change the payload with the `onSend` hook. It is the sixth hook to be executed in the request lifecycle. The previous hook was `preSerialization`, the next hook will be `onResponse`.\n * Note: If you change the payload, you may only change it to a string, a Buffer, a stream, or null.\n */\nexport interface onSendHookHandler<\n  OnSendPayload,\n  RawServer extends RawServerBase = RawServerDefault,\n  RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,\n  RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,\n  RouteGeneric extends RouteGenericInterface = RouteGenericInterface,\n  ContextConfig = ContextConfigDefault,\n  SchemaCompiler extends FastifySchema = FastifySchema,\n  TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,\n  Logger extends FastifyBaseLogger = FastifyBaseLogger\n> {\n  (\n    this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,\n    request: FastifyRequest<RouteGeneric, RawServer, RawRequest, SchemaCompiler, TypeProvider, ContextConfig, Logger>,\n    reply: FastifyReply<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider>,\n    payload: OnSendPayload,\n    done: DoneFuncWithErrOrRes\n  ): void;\n}\n\nexport interface onSendAsyncHookHandler<\n  OnSendPayload,\n  RawServer extends RawServerBase = RawServerDefault,\n  RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,\n  RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,\n  RouteGeneric extends RouteGenericInterface = RouteGenericInterface,\n  ContextConfig = ContextConfigDefault,\n  SchemaCompiler extends FastifySchema = FastifySchema,\n  TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,\n  Logger extends FastifyBaseLogger = FastifyBaseLogger\n> {\n  (\n    this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,\n    request: FastifyRequest<RouteGeneric, RawServer, RawRequest, SchemaCompiler, TypeProvider, ContextConfig, Logger>,\n    reply: FastifyReply<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider>,\n    payload: OnSendPayload,\n  ): Promise<unknown>;\n}\n\n/**\n * `onResponse` is the seventh and last hook in the request hook lifecycle. The previous hook was `onSend`, there is no next hook.\n * The onResponse hook is executed when a response has been sent, so you will not be able to send more data to the client. It can however be useful for sending data to external services, for example to gather statistics.\n */\nexport interface onResponseHookHandler<\n  RawServer extends RawServerBase = RawServerDefault,\n  RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,\n  RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,\n  RouteGeneric extends RouteGenericInterface = RouteGenericInterface,\n  ContextConfig = ContextConfigDefault,\n  SchemaCompiler extends FastifySchema = FastifySchema,\n  TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,\n  Logger extends FastifyBaseLogger = FastifyBaseLogger\n> {\n  (\n    this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,\n    request: FastifyRequest<RouteGeneric, RawServer, RawRequest, SchemaCompiler, TypeProvider, ContextConfig, Logger>,\n    reply: FastifyReply<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider>,\n    done: HookHandlerDoneFunction\n  ): void;\n}\n\nexport interface onResponseAsyncHookHandler<\n  RawServer extends RawServerBase = RawServerDefault,\n  RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,\n  RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,\n  RouteGeneric extends RouteGenericInterface = RouteGenericInterface,\n  ContextConfig = ContextConfigDefault,\n  SchemaCompiler extends FastifySchema = FastifySchema,\n  TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,\n  Logger extends FastifyBaseLogger = FastifyBaseLogger\n> {\n  (\n    this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,\n    request: FastifyRequest<RouteGeneric, RawServer, RawRequest, SchemaCompiler, TypeProvider, ContextConfig, Logger>,\n    reply: FastifyReply<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider>\n  ): Promise<unknown>;\n}\n\n/**\n * `onTimeout` is useful if you need to monitor the request timed out in your service. (if the `connectionTimeout` property is set on the fastify instance)\n * The onTimeout hook is executed when a request is timed out and the http socket has been hanged up. Therefore you will not be able to send data to the client.\n */\nexport interface onTimeoutHookHandler<\n  RawServer extends RawServerBase = RawServerDefault,\n  RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,\n  RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,\n  RouteGeneric extends RouteGenericInterface = RouteGenericInterface,\n  ContextConfig = ContextConfigDefault,\n  SchemaCompiler extends FastifySchema = FastifySchema,\n  TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,\n  Logger extends FastifyBaseLogger = FastifyBaseLogger\n> {\n  (\n    this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,\n    request: FastifyRequest<RouteGeneric, RawServer, RawRequest, SchemaCompiler, TypeProvider, ContextConfig, Logger>,\n    reply: FastifyReply<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider>,\n    done: HookHandlerDoneFunction\n  ): void;\n}\n\nexport interface onTimeoutAsyncHookHandler<\n  RawServer extends RawServerBase = RawServerDefault,\n  RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,\n  RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,\n  RouteGeneric extends RouteGenericInterface = RouteGenericInterface,\n  ContextConfig = ContextConfigDefault,\n  SchemaCompiler extends FastifySchema = FastifySchema,\n  TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,\n  Logger extends FastifyBaseLogger = FastifyBaseLogger\n> {\n  (\n    this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,\n    request: FastifyRequest<RouteGeneric, RawServer, RawRequest, SchemaCompiler, TypeProvider, ContextConfig, Logger>,\n    reply: FastifyReply<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider>\n  ): Promise<unknown>;\n}\n\n/**\n * This hook is useful if you need to do some custom error logging or add some specific header in case of error.\n * It is not intended for changing the error, and calling reply.send will throw an exception.\n * This hook will be executed only after the customErrorHandler has been executed, and only if the customErrorHandler sends an error back to the user (Note that the default customErrorHandler always sends the error back to the user).\n * Notice: unlike the other hooks, pass an error to the done function is not supported.\n */\nexport interface onErrorHookHandler<\n  RawServer extends RawServerBase = RawServerDefault,\n  RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,\n  RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,\n  RouteGeneric extends RouteGenericInterface = RouteGenericInterface,\n  ContextConfig = ContextConfigDefault,\n  TError extends Error = FastifyError,\n  SchemaCompiler extends FastifySchema = FastifySchema,\n  TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,\n  Logger extends FastifyBaseLogger = FastifyBaseLogger\n> {\n  (\n    this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,\n    request: FastifyRequest<RouteGeneric, RawServer, RawRequest, SchemaCompiler, TypeProvider, ContextConfig, Logger>,\n    reply: FastifyReply<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider>,\n    error: TError,\n    done: () => void\n  ): void;\n}\n\nexport interface onErrorAsyncHookHandler<\n  RawServer extends RawServerBase = RawServerDefault,\n  RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,\n  RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,\n  RouteGeneric extends RouteGenericInterface = RouteGenericInterface,\n  ContextConfig = ContextConfigDefault,\n  TError extends Error = FastifyError,\n  SchemaCompiler extends FastifySchema = FastifySchema,\n  TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,\n  Logger extends FastifyBaseLogger = FastifyBaseLogger\n> {\n  (\n    this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,\n    request: FastifyRequest<RouteGeneric, RawServer, RawRequest, SchemaCompiler, TypeProvider, ContextConfig, Logger>,\n    reply: FastifyReply<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider>,\n    error: TError\n  ): Promise<unknown>;\n}\n\n/**\n * `onRequestAbort` is useful if you need to monitor the if the client aborts the request (if the `request.raw.aborted` property is set to `true`).\n * The `onRequestAbort` hook is executed when a client closes the connection before the entire request has been received. Therefore, you will not be able to send data to the client.\n * Notice: client abort detection is not completely reliable. See: https://github.com/fastify/fastify/blob/main/docs/Guides/Detecting-When-Clients-Abort.md\n */\nexport interface onRequestAbortHookHandler<\n  RawServer extends RawServerBase = RawServerDefault,\n  RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,\n  RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,\n  RouteGeneric extends RouteGenericInterface = RouteGenericInterface,\n  ContextConfig = ContextConfigDefault,\n  SchemaCompiler extends FastifySchema = FastifySchema,\n  TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,\n  Logger extends FastifyBaseLogger = FastifyBaseLogger\n> {\n  (\n    this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,\n    request: FastifyRequest<RouteGeneric, RawServer, RawRequest, SchemaCompiler, TypeProvider, ContextConfig, Logger>,\n    done: HookHandlerDoneFunction\n  ): void;\n}\n\nexport interface onRequestAbortAsyncHookHandler<\n  RawServer extends RawServerBase = RawServerDefault,\n  RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,\n  RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,\n  RouteGeneric extends RouteGenericInterface = RouteGenericInterface,\n  ContextConfig = ContextConfigDefault,\n  SchemaCompiler extends FastifySchema = FastifySchema,\n  TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,\n  Logger extends FastifyBaseLogger = FastifyBaseLogger\n> {\n  (\n    this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,\n    request: FastifyRequest<RouteGeneric, RawServer, RawRequest, SchemaCompiler, TypeProvider, ContextConfig, Logger>,\n  ): Promise<unknown>;\n}\n\n// Application Hooks\n\n/**\n * Triggered when a new route is registered. Listeners are passed a routeOptions object as the sole parameter. The interface is synchronous, and, as such, the listener does not get passed a callback\n */\nexport interface onRouteHookHandler<\n  RawServer extends RawServerBase = RawServerDefault,\n  RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,\n  RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,\n  RouteGeneric extends RouteGenericInterface = RouteGenericInterface,\n  ContextConfig = ContextConfigDefault,\n  SchemaCompiler extends FastifySchema = FastifySchema,\n  TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,\n  Logger extends FastifyBaseLogger = FastifyBaseLogger\n> {\n  (\n    this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,\n    opts: RouteOptions<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider> & { routePath: string; path: string; prefix: string }\n  ): Promise<unknown> | void;\n}\n\n/**\n * Triggered when a new plugin is registered and a new encapsulation context is created. The hook will be executed before the registered code.\n * This hook can be useful if you are developing a plugin that needs to know when a plugin context is formed, and you want to operate in that specific context.\n * Note: This hook will not be called if a plugin is wrapped inside fastify-plugin.\n */\nexport interface onRegisterHookHandler<\n  RawServer extends RawServerBase = RawServerDefault,\n  RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,\n  RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,\n  Logger extends FastifyBaseLogger = FastifyBaseLogger,\n  TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,\n  Options extends FastifyPluginOptions = FastifyPluginOptions\n> {\n  (\n    instance: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,\n    opts: RegisterOptions & Options,\n    done: HookHandlerDoneFunction\n  ): Promise<unknown> | void; // documentation is missing the `done` method\n}\n\n/**\n * Triggered when fastify.listen() or fastify.ready() is invoked to start the server. It is useful when plugins need a \"ready\" event, for example to load data before the server start listening for requests.\n */\nexport interface onReadyHookHandler<\n  RawServer extends RawServerBase = RawServerDefault,\n  RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,\n  RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,\n  Logger extends FastifyBaseLogger = FastifyBaseLogger,\n  TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,\n> {\n  (\n    this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,\n    done: HookHandlerDoneFunction\n  ): void;\n}\n\nexport interface onReadyAsyncHookHandler<\n  RawServer extends RawServerBase = RawServerDefault,\n  RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,\n  RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,\n  Logger extends FastifyBaseLogger = FastifyBaseLogger,\n  TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,\n> {\n  (\n    this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,\n  ): Promise<unknown>;\n}\n/**\n * Triggered when fastify.close() is invoked to stop the server. It is useful when plugins need a \"shutdown\" event, for example to close an open connection to a database.\n */\nexport interface onCloseHookHandler<\n  RawServer extends RawServerBase = RawServerDefault,\n  RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,\n  RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,\n  Logger extends FastifyBaseLogger = FastifyBaseLogger,\n  TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,\n> {\n  (\n    instance: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,\n    done: HookHandlerDoneFunction\n  ): void;\n}\n\nexport interface onCloseAsyncHookHandler<\n  RawServer extends RawServerBase = RawServerDefault,\n  RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,\n  RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,\n  Logger extends FastifyBaseLogger = FastifyBaseLogger,\n  TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault\n> {\n  (\n    instance: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>\n  ): Promise<unknown>;\n}\n/test/500s.test.js\u000eL'use strict'\n\nconst t = require('tap')\nconst test = t.test\nconst Fastify = require('..')\nconst symbols = require('../lib/symbols.js')\n\ntest('default 500', t => {\n  t.plan(4)\n\n  const fastify = Fastify()\n\n  fastify.get('/', function (req, reply) {\n    reply.send(new Error('kaboom'))\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 500)\n    t.equal(res.headers['content-type'], 'application/json; charset=utf-8')\n    t.same(JSON.parse(res.payload), {\n      error: 'Internal Server Error',\n      message: 'kaboom',\n      statusCode: 500\n    })\n  })\n})\n\ntest('custom 500', t => {\n  t.plan(6)\n\n  const fastify = Fastify()\n\n  fastify.get('/', function (req, reply) {\n    reply.send(new Error('kaboom'))\n  })\n\n  fastify.setErrorHandler(function (err, request, reply) {\n    t.type(request, 'object')\n    t.type(request, fastify[symbols.kRequest].parent)\n    reply\n      .code(500)\n      .type('text/plain')\n      .send('an error happened: ' + err.message)\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 500)\n    t.equal(res.headers['content-type'], 'text/plain')\n    t.same(res.payload.toString(), 'an error happened: kaboom')\n  })\n})\n\ntest('encapsulated 500', t => {\n  t.plan(10)\n\n  const fastify = Fastify()\n\n  fastify.get('/', function (req, reply) {\n    reply.send(new Error('kaboom'))\n  })\n\n  fastify.register(function (f, opts, done) {\n    f.get('/', function (req, reply) {\n      reply.send(new Error('kaboom'))\n    })\n\n    f.setErrorHandler(function (err, request, reply) {\n      t.type(request, 'object')\n      t.type(request, fastify[symbols.kRequest].parent)\n      reply\n        .code(500)\n        .type('text/plain')\n        .send('an error happened: ' + err.message)\n    })\n\n    done()\n  }, { prefix: 'test' })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/test'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 500)\n    t.equal(res.headers['content-type'], 'text/plain')\n    t.same(res.payload.toString(), 'an error happened: kaboom')\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 500)\n    t.equal(res.headers['content-type'], 'application/json; charset=utf-8')\n    t.same(JSON.parse(res.payload), {\n      error: 'Internal Server Error',\n      message: 'kaboom',\n      statusCode: 500\n    })\n  })\n})\n\ntest('custom 500 with hooks', t => {\n  t.plan(7)\n\n  const fastify = Fastify()\n\n  fastify.get('/', function (req, reply) {\n    reply.send(new Error('kaboom'))\n  })\n\n  fastify.setErrorHandler(function (err, request, reply) {\n    reply\n      .code(500)\n      .type('text/plain')\n      .send('an error happened: ' + err.message)\n  })\n\n  fastify.addHook('onSend', (req, res, payload, done) => {\n    t.ok('called', 'onSend')\n    done()\n  })\n  fastify.addHook('onRequest', (req, res, done) => {\n    t.ok('called', 'onRequest')\n    done()\n  })\n  fastify.addHook('onResponse', (request, reply, done) => {\n    t.ok('called', 'onResponse')\n    done()\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 500)\n    t.equal(res.headers['content-type'], 'text/plain')\n    t.same(res.payload.toString(), 'an error happened: kaboom')\n  })\n})\n\ntest('cannot set errorHandler after binding', t => {\n  t.plan(2)\n\n  const fastify = Fastify()\n  t.teardown(fastify.close.bind(fastify))\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n\n    try {\n      fastify.setErrorHandler(() => { })\n      t.fail()\n    } catch (e) {\n      t.pass()\n    }\n  })\n})\n/test/internals/hooks.test.js\bh'use strict'\n\nconst t = require('tap')\nconst test = t.test\n\nconst { Hooks } = require('../../lib/hooks')\nconst noop = () => {}\n\ntest('hooks should have 4 array with the registered hooks', t => {\n  const hooks = new Hooks()\n  t.equal(typeof hooks, 'object')\n  t.ok(Array.isArray(hooks.onRequest))\n  t.ok(Array.isArray(hooks.onSend))\n  t.ok(Array.isArray(hooks.preParsing))\n  t.ok(Array.isArray(hooks.preValidation))\n  t.ok(Array.isArray(hooks.preHandler))\n  t.ok(Array.isArray(hooks.onResponse))\n  t.ok(Array.isArray(hooks.onError))\n  t.end()\n})\n\ntest('hooks.add should add a hook to the given hook', t => {\n  const hooks = new Hooks()\n  hooks.add('onRequest', noop)\n  t.equal(hooks.onRequest.length, 1)\n  t.equal(typeof hooks.onRequest[0], 'function')\n\n  hooks.add('preParsing', noop)\n  t.equal(hooks.preParsing.length, 1)\n  t.equal(typeof hooks.preParsing[0], 'function')\n\n  hooks.add('preValidation', noop)\n  t.equal(hooks.preValidation.length, 1)\n  t.equal(typeof hooks.preValidation[0], 'function')\n\n  hooks.add('preHandler', noop)\n  t.equal(hooks.preHandler.length, 1)\n  t.equal(typeof hooks.preHandler[0], 'function')\n\n  hooks.add('onResponse', noop)\n  t.equal(hooks.onResponse.length, 1)\n  t.equal(typeof hooks.onResponse[0], 'function')\n\n  hooks.add('onSend', noop)\n  t.equal(hooks.onSend.length, 1)\n  t.equal(typeof hooks.onSend[0], 'function')\n\n  hooks.add('onError', noop)\n  t.equal(hooks.onError.length, 1)\n  t.equal(typeof hooks.onError[0], 'function')\n  t.end()\n})\n\ntest('hooks should throw on unexisting handler', t => {\n  t.plan(1)\n  const hooks = new Hooks()\n  try {\n    hooks.add('onUnexistingHook', noop)\n    t.fail()\n  } catch (e) {\n    t.pass()\n  }\n})\n\ntest('should throw on wrong parameters', t => {\n  const hooks = new Hooks()\n  t.plan(4)\n  try {\n    hooks.add(null, () => {})\n    t.fail()\n  } catch (e) {\n    t.equal(e.code, 'FST_ERR_HOOK_INVALID_TYPE')\n    t.equal(e.message, 'The hook name must be a string')\n  }\n\n  try {\n    hooks.add('onSend', null)\n    t.fail()\n  } catch (e) {\n    t.equal(e.code, 'FST_ERR_HOOK_INVALID_HANDLER')\n    t.equal(e.message, 'onSend hook should be a function, instead got [object Null]')\n  }\n})\n/docs/Guides/Benchmarking.md\u0006<h1 align=\"center\">Fastify</h1>\n\n## Benchmarking\nBenchmarking is important if you want to measure how a change can affect the\nperformance of your application. We provide a simple way to benchmark your\napplication from the point of view of a user and contributor. The setup allows\nyou to automate benchmarks in different branches and on different Node.js\nversions.\n\nThe modules we will use:\n- [Autocannon](https://github.com/mcollina/autocannon): A HTTP/1.1 benchmarking\n  tool written in node.\n- [Branch-comparer](https://github.com/StarpTech/branch-comparer): Checkout\n  multiple git branches, execute scripts and log the results.\n- [Concurrently](https://github.com/kimmobrunfeldt/concurrently): Run commands\n  concurrently.\n- [Npx](https://github.com/npm/npx): NPM package runner used to run scripts\n  against different Node.js Versions and execute local binaries. Shipped with\n  npm@5.2.0.\n\n## Simple\n\n### Run the test in the current branch\n```sh\nnpm run benchmark\n```\n\n### Run the test against different Node.js versions ✨\n```sh\nnpx -p node@10 -- npm run benchmark\n```\n\n## Advanced\n\n### Run the test in different branches\n```sh\nbranchcmp --rounds 2 --script \"npm run benchmark\"\n```\n\n### Run the test in different branches against different Node.js versions ✨\n```sh\nbranchcmp --rounds 2 --script \"npm run benchmark\"\n```\n\n### Compare current branch with main (Gitflow)\n```sh\nbranchcmp --rounds 2 --gitflow --script \"npm run benchmark\"\n```\nor\n```sh\nnpm run bench\n```\n\n### Run different examples\n\n<!-- markdownlint-disable -->\n```sh\nbranchcmp --rounds 2 -s \"node ./node_modules/concurrently -k -s first \\\"node ./examples/asyncawait.js\\\" \\\"node ./node_modules/autocannon -c 100 -d 5 -p 10 localhost:3000/\\\"\"\n```\n<!-- markdownlint-enable -->\n/test/internals/request.test.js\"\b'use strict'\n\nconst { test } = require('tap')\n\nconst Request = require('../../lib/request')\nconst Context = require('../../lib/context')\nconst {\n  kPublicRouteContext,\n  kReply,\n  kRequest\n} = require('../../lib/symbols')\n\nprocess.removeAllListeners('warning')\n\ntest('Regular request', t => {\n  const headers = {\n    host: 'hostname'\n  }\n  const req = {\n    method: 'GET',\n    url: '/',\n    socket: { remoteAddress: 'ip' },\n    headers\n  }\n  const context = new Context({\n    schema: {\n      body: {\n        type: 'object',\n        required: ['hello'],\n        properties: {\n          hello: { type: 'string' }\n        }\n      }\n    },\n    config: {\n      some: 'config',\n      url: req.url,\n      method: req.method\n    },\n    server: {\n      [kReply]: {},\n      [kRequest]: Request\n    }\n  })\n  req.connection = req.socket\n  const request = new Request('id', 'params', req, 'query', 'log', context)\n  t.type(request, Request)\n  t.type(request.validateInput, Function)\n  t.type(request.getValidationFunction, Function)\n  t.type(request.compileValidationSchema, Function)\n  t.equal(request.id, 'id')\n  t.equal(request.params, 'params')\n  t.equal(request.raw, req)\n  t.equal(request.query, 'query')\n  t.equal(request.headers, headers)\n  t.equal(request.log, 'log')\n  t.equal(request.ip, 'ip')\n  t.equal(request.ips, undefined)\n  t.equal(request.hostname, 'hostname')\n  t.equal(request.body, undefined)\n  t.equal(request.method, 'GET')\n  t.equal(request.url, '/')\n  t.equal(request.socket, req.socket)\n  t.equal(request.protocol, 'http')\n  t.equal(request.routerPath, context.config.url)\n  t.equal(request.routerMethod, context.config.method)\n  t.equal(request.routeConfig, context[kPublicRouteContext].config)\n  t.equal(request.routeSchema, context[kPublicRouteContext].schema)\n  // Aim to not bad property keys (including Symbols)\n  t.notOk('undefined' in request)\n\n  // This will be removed, it's deprecated\n  t.equal(request.connection, req.connection)\n  t.end()\n})\n\ntest('Regular request - hostname from authority', t => {\n  t.plan(2)\n  const headers = {\n    ':authority': 'authority'\n  }\n  const req = {\n    method: 'GET',\n    url: '/',\n    socket: { remoteAddress: 'ip' },\n    headers\n  }\n\n  const request = new Request('id', 'params', req, 'query', 'log')\n  t.type(request, Request)\n  t.equal(request.hostname, 'authority')\n})\n\ntest('Regular request - host header has precedence over authority', t => {\n  t.plan(2)\n  const headers = {\n    host: 'hostname',\n    ':authority': 'authority'\n  }\n  const req = {\n    method: 'GET',\n    url: '/',\n    socket: { remoteAddress: 'ip' },\n    headers\n  }\n  const request = new Request('id', 'params', req, 'query', 'log')\n  t.type(request, Request)\n  t.equal(request.hostname, 'hostname')\n})\n\ntest('Request with trust proxy', t => {\n  t.plan(22)\n  const headers = {\n    'x-forwarded-for': '2.2.2.2, 1.1.1.1',\n    'x-forwarded-host': 'example.com'\n  }\n  const req = {\n    method: 'GET',\n    url: '/',\n    socket: { remoteAddress: 'ip' },\n    headers\n  }\n  const context = new Context({\n    schema: {\n      body: {\n        type: 'object',\n        required: ['hello'],\n        properties: {\n          hello: { type: 'string' }\n        }\n      }\n    },\n    config: {\n      some: 'config',\n      url: req.url,\n      method: req.method\n    },\n    server: {\n      [kReply]: {},\n      [kRequest]: Request\n    }\n  })\n\n  const TpRequest = Request.buildRequest(Request, true)\n  const request = new TpRequest('id', 'params', req, 'query', 'log', context)\n  t.type(request, TpRequest)\n  t.equal(request.id, 'id')\n  t.equal(request.params, 'params')\n  t.same(request.raw, req)\n  t.equal(request.query, 'query')\n  t.equal(request.headers, headers)\n  t.equal(request.log, 'log')\n  t.equal(request.ip, '2.2.2.2')\n  t.same(request.ips, ['ip', '1.1.1.1', '2.2.2.2'])\n  t.equal(request.hostname, 'example.com')\n  t.equal(request.body, undefined)\n  t.equal(request.method, 'GET')\n  t.equal(request.url, '/')\n  t.equal(request.socket, req.socket)\n  t.equal(request.protocol, 'http')\n  t.type(request.validateInput, Function)\n  t.type(request.getValidationFunction, Function)\n  t.type(request.compileValidationSchema, Function)\n  t.equal(request.routerPath, context.config.url)\n  t.equal(request.routerMethod, context.config.method)\n  t.equal(request.routeConfig, context[kPublicRouteContext].config)\n  t.equal(request.routeSchema, context[kPublicRouteContext].schema)\n})\n\ntest('Request with trust proxy, encrypted', t => {\n  t.plan(2)\n  const headers = {\n    'x-forwarded-for': '2.2.2.2, 1.1.1.1',\n    'x-forwarded-host': 'example.com'\n  }\n  const req = {\n    method: 'GET',\n    url: '/',\n    socket: { remoteAddress: 'ip', encrypted: true },\n    headers\n  }\n\n  const TpRequest = Request.buildRequest(Request, true)\n  const request = new TpRequest('id', 'params', req, 'query', 'log')\n  t.type(request, TpRequest)\n  t.equal(request.protocol, 'https')\n})\n\ntest('Request with trust proxy - no x-forwarded-host header', t => {\n  t.plan(2)\n  const headers = {\n    'x-forwarded-for': '2.2.2.2, 1.1.1.1',\n    host: 'hostname'\n  }\n  const req = {\n    method: 'GET',\n    url: '/',\n    socket: { remoteAddress: 'ip' },\n    headers\n  }\n\n  const TpRequest = Request.buildRequest(Request, true)\n  const request = new TpRequest('id', 'params', req, 'query', 'log')\n  t.type(request, TpRequest)\n  t.equal(request.hostname, 'hostname')\n})\n\ntest('Request with trust proxy - no x-forwarded-host header and fallback to authority', t => {\n  t.plan(2)\n  const headers = {\n    'x-forwarded-for': '2.2.2.2, 1.1.1.1',\n    ':authority': 'authority'\n  }\n  const req = {\n    method: 'GET',\n    url: '/',\n    socket: { remoteAddress: 'ip' },\n    headers\n  }\n\n  const TpRequest = Request.buildRequest(Request, true)\n  const request = new TpRequest('id', 'params', req, 'query', 'log')\n  t.type(request, TpRequest)\n  t.equal(request.hostname, 'authority')\n})\n\ntest('Request with trust proxy - x-forwarded-host header has precedence over host', t => {\n  t.plan(2)\n  const headers = {\n    'x-forwarded-for': ' 2.2.2.2, 1.1.1.1',\n    'x-forwarded-host': 'example.com',\n    host: 'hostname'\n  }\n  const req = {\n    method: 'GET',\n    url: '/',\n    socket: { remoteAddress: 'ip' },\n    headers\n  }\n\n  const TpRequest = Request.buildRequest(Request, true)\n  const request = new TpRequest('id', 'params', req, 'query', 'log')\n  t.type(request, TpRequest)\n  t.equal(request.hostname, 'example.com')\n})\n\ntest('Request with trust proxy - handles multiple entries in x-forwarded-host/proto', t => {\n  t.plan(3)\n  const headers = {\n    'x-forwarded-host': 'example2.com, example.com',\n    'x-forwarded-proto': 'http, https'\n  }\n  const req = {\n    method: 'GET',\n    url: '/',\n    socket: { remoteAddress: 'ip' },\n    headers\n  }\n\n  const TpRequest = Request.buildRequest(Request, true)\n  const request = new TpRequest('id', 'params', req, 'query', 'log')\n  t.type(request, TpRequest)\n  t.equal(request.hostname, 'example.com')\n  t.equal(request.protocol, 'https')\n})\n\ntest('Request with trust proxy - plain', t => {\n  t.plan(1)\n  const headers = {\n    'x-forwarded-for': '2.2.2.2, 1.1.1.1',\n    'x-forwarded-host': 'example.com'\n  }\n  const req = {\n    method: 'GET',\n    url: '/',\n    socket: { remoteAddress: 'ip' },\n    headers\n  }\n\n  const TpRequest = Request.buildRequest(Request, true)\n  const request = new TpRequest('id', 'params', req, 'query', 'log')\n  t.same(request.protocol, 'http')\n})\n\ntest('Request with undefined socket', t => {\n  t.plan(18)\n  const headers = {\n    host: 'hostname'\n  }\n  const req = {\n    method: 'GET',\n    url: '/',\n    socket: undefined,\n    headers\n  }\n  const request = new Request('id', 'params', req, 'query', 'log')\n  t.type(request, Request)\n  t.equal(request.id, 'id')\n  t.equal(request.params, 'params')\n  t.same(request.raw, req)\n  t.equal(request.query, 'query')\n  t.equal(request.headers, headers)\n  t.equal(request.log, 'log')\n  t.equal(request.ip, undefined)\n  t.equal(request.ips, undefined)\n  t.equal(request.hostname, 'hostname')\n  t.same(request.body, null)\n  t.equal(request.method, 'GET')\n  t.equal(request.url, '/')\n  t.equal(request.protocol, undefined)\n  t.same(request.socket, req.socket)\n  t.type(request.validateInput, Function)\n  t.type(request.getValidationFunction, Function)\n  t.type(request.compileValidationSchema, Function)\n})\n\ntest('Request with trust proxy and undefined socket', t => {\n  t.plan(1)\n  const headers = {\n    'x-forwarded-for': '2.2.2.2, 1.1.1.1',\n    'x-forwarded-host': 'example.com'\n  }\n  const req = {\n    method: 'GET',\n    url: '/',\n    socket: undefined,\n    headers\n  }\n\n  const TpRequest = Request.buildRequest(Request, true)\n  const request = new TpRequest('id', 'params', req, 'query', 'log')\n  t.same(request.protocol, undefined)\n})\n/types/utils.d.ts\u0006(import * as http from 'http'\nimport * as http2 from 'http2'\nimport * as https from 'https'\n\n/**\n * Standard HTTP method strings\n */\nexport type HTTPMethods = 'DELETE' | 'GET' | 'HEAD' | 'PATCH' | 'POST' | 'PUT' | 'OPTIONS' |\n'PROPFIND' | 'PROPPATCH' | 'MKCOL' | 'COPY' | 'MOVE' | 'LOCK' | 'UNLOCK' | 'TRACE' | 'SEARCH'\n\n/**\n * A union type of the Node.js server types from the http, https, and http2 modules.\n */\nexport type RawServerBase = http.Server | https.Server | http2.Http2Server | http2.Http2SecureServer\n\n/**\n * The default server type\n */\nexport type RawServerDefault = http.Server\n\n/**\n * The default request type based on the server type. Utilizes generic constraining.\n */\nexport type RawRequestDefaultExpression<\n  RawServer extends RawServerBase = RawServerDefault,\n> = RawServer extends http.Server | https.Server ? http.IncomingMessage\n  : RawServer extends http2.Http2Server | http2.Http2SecureServer ? http2.Http2ServerRequest\n    : never\n\n/**\n * The default reply type based on the server type. Utilizes generic constraining.\n */\nexport type RawReplyDefaultExpression<\n  RawServer extends RawServerBase = RawServerDefault\n> = RawServer extends http.Server | https.Server ? http.ServerResponse\n  : RawServer extends http2.Http2Server | http2.Http2SecureServer ? http2.Http2ServerResponse\n    : never\n\nexport type RequestBodyDefault = unknown\nexport type RequestQuerystringDefault = unknown\nexport type RequestParamsDefault = unknown\nexport type RequestHeadersDefault = unknown\n\nexport type ContextConfigDefault = unknown\nexport type ReplyDefault = unknown\n/docs/Reference/Hooks.md]<h1 align=\"center\">Fastify</h1>\n\n## Hooks\n\nHooks are registered with the `fastify.addHook` method and allow you to listen\nto specific events in the application or request/response lifecycle. You have to\nregister a hook before the event is triggered, otherwise, the event is lost.\n\nBy using hooks you can interact directly with the lifecycle of Fastify. There\nare Request/Reply hooks and application hooks:\n\n- [Request/Reply Hooks](#requestreply-hooks)\n  - [onRequest](#onrequest)\n  - [preParsing](#preparsing)\n  - [preValidation](#prevalidation)\n  - [preHandler](#prehandler)\n  - [preSerialization](#preserialization)\n  - [onError](#onerror)\n  - [onSend](#onsend)\n  - [onResponse](#onresponse)\n  - [onTimeout](#ontimeout)\n  - [onRequestAbort](#onrequestabort)\n  - [Manage Errors from a hook](#manage-errors-from-a-hook)\n  - [Respond to a request from a hook](#respond-to-a-request-from-a-hook)\n- [Application Hooks](#application-hooks)\n  - [onReady](#onready)\n  - [onClose](#onclose)\n  - [onRoute](#onroute)\n  - [onRegister](#onregister)\n- [Scope](#scope)\n- [Route level hooks](#route-level-hooks)\n- [Using Hooks to Inject Custom Properties](#using-hooks-to-inject-custom-properties)\n- [Diagnostics Channel Hooks](#diagnostics-channel-hooks)\n\n**Notice:** the `done` callback is not available when using `async`/`await` or\nreturning a `Promise`. If you do invoke a `done` callback in this situation\nunexpected behavior may occur, e.g. duplicate invocation of handlers.\n\n## Request/Reply Hooks\n\n[Request](./Request.md) and [Reply](./Reply.md) are the core Fastify objects.\n\n`done` is the function to continue with the [lifecycle](./Lifecycle.md).\n\nIt is easy to understand where each hook is executed by looking at the\n[lifecycle page](./Lifecycle.md).\n\nHooks are affected by Fastify's encapsulation, and can thus be applied to\nselected routes. See the [Scopes](#scope) section for more information.\n\nThere are eight different hooks that you can use in Request/Reply *(in order of\nexecution)*:\n\n### onRequest\n```js\nfastify.addHook('onRequest', (request, reply, done) => {\n  // Some code\n  done()\n})\n```\nOr `async/await`:\n```js\nfastify.addHook('onRequest', async (request, reply) => {\n  // Some code\n  await asyncMethod()\n})\n```\n\n**Notice:** in the [onRequest](#onrequest) hook, `request.body` will always be\n`undefined`, because the body parsing happens before the\n[preValidation](#prevalidation) hook.\n\n### preParsing\n\nIf you are using the `preParsing` hook, you can transform the request payload\nstream before it is parsed. It receives the request and reply objects as other\nhooks, and a stream with the current request payload.\n\nIf it returns a value (via `return` or via the callback function), it must\nreturn a stream.\n\nFor instance, you can uncompress the request body:\n\n```js\nfastify.addHook('preParsing', (request, reply, payload, done) => {\n  // Some code\n  done(null, newPayload)\n})\n```\nOr `async/await`:\n```js\nfastify.addHook('preParsing', async (request, reply, payload) => {\n  // Some code\n  await asyncMethod()\n  return newPayload\n})\n```\n\n**Notice:** in the [preParsing](#preparsing) hook, `request.body` will always be\n`undefined`, because the body parsing happens before the\n[preValidation](#prevalidation) hook.\n\n**Notice:** you should also add a `receivedEncodedLength` property to the\nreturned stream. This property is used to correctly match the request payload\nwith the `Content-Length` header value. Ideally, this property should be updated\non each received chunk.\n\n### preValidation\n\nIf you are using the `preValidation` hook, you can change the payload before it\nis validated. For example:\n\n```js\nfastify.addHook('preValidation', (request, reply, done) => {\n  request.body = { ...request.body, importantKey: 'randomString' }\n  done()\n})\n```\nOr `async/await`:\n```js\nfastify.addHook('preValidation', async (request, reply) => {\n  const importantKey = await generateRandomString()\n  request.body = { ...request.body, importantKey }\n})\n```\n\n### preHandler\n```js\nfastify.addHook('preHandler', (request, reply, done) => {\n  // some code\n  done()\n})\n```\nOr `async/await`:\n```js\nfastify.addHook('preHandler', async (request, reply) => {\n  // Some code\n  await asyncMethod()\n})\n```\n### preSerialization\n\nIf you are using the `preSerialization` hook, you can change (or replace) the\npayload before it is serialized. For example:\n\n```js\nfastify.addHook('preSerialization', (request, reply, payload, done) => {\n  const err = null\n  const newPayload = { wrapped: payload }\n  done(err, newPayload)\n})\n```\nOr `async/await`:\n```js\nfastify.addHook('preSerialization', async (request, reply, payload) => {\n  return { wrapped: payload }\n})\n```\n\nNote: the hook is NOT called if the payload is a `string`, a `Buffer`, a\n`stream`, or `null`.\n\n### onError\n```js\nfastify.addHook('onError', (request, reply, error, done) => {\n  // Some code\n  done()\n})\n```\nOr `async/await`:\n```js\nfastify.addHook('onError', async (request, reply, error) => {\n  // Useful for custom error logging\n  // You should not use this hook to update the error\n})\n```\nThis hook is useful if you need to do some custom error logging or add some\nspecific header in case of error.\n\nIt is not intended for changing the error, and calling `reply.send` will throw\nan exception.\n\nThis hook will be executed only after the `customErrorHandler` has been\nexecuted, and only if the `customErrorHandler` sends an error back to the user\n*(Note that the default `customErrorHandler` always sends the error back to the\nuser)*.\n\n**Notice:** unlike the other hooks, passing an error to the `done` function is not\nsupported.\n\n### onSend\nIf you are using the `onSend` hook, you can change the payload. For example:\n\n```js\nfastify.addHook('onSend', (request, reply, payload, done) => {\n  const err = null;\n  const newPayload = payload.replace('some-text', 'some-new-text')\n  done(err, newPayload)\n})\n```\nOr `async/await`:\n```js\nfastify.addHook('onSend', async (request, reply, payload) => {\n  const newPayload = payload.replace('some-text', 'some-new-text')\n  return newPayload\n})\n```\n\nYou can also clear the payload to send a response with an empty body by\nreplacing the payload with `null`:\n\n```js\nfastify.addHook('onSend', (request, reply, payload, done) => {\n  reply.code(304)\n  const newPayload = null\n  done(null, newPayload)\n})\n```\n\n> You can also send an empty body by replacing the payload with the empty string\n> `''`, but be aware that this will cause the `Content-Length` header to be set\n> to `0`, whereas the `Content-Length` header will not be set if the payload is\n> `null`.\n\nNote: If you change the payload, you may only change it to a `string`, a\n`Buffer`, a `stream`, or `null`.\n\n\n### onResponse\n```js\nfastify.addHook('onResponse', (request, reply, done) => {\n  // Some code\n  done()\n})\n```\nOr `async/await`:\n```js\nfastify.addHook('onResponse', async (request, reply) => {\n  // Some code\n  await asyncMethod()\n})\n```\n\nThe `onResponse` hook is executed when a response has been sent, so you will not\nbe able to send more data to the client. It can however be useful for sending\ndata to external services, for example, to gather statistics.\n\n**Note:** setting `disableRequestLogging` to `true` will disable any error log \ninside the `onResponse` hook. In this case use `try - catch` to log errors. \n\n### onTimeout\n\n```js\nfastify.addHook('onTimeout', (request, reply, done) => {\n  // Some code\n  done()\n})\n```\nOr `async/await`:\n```js\nfastify.addHook('onTimeout', async (request, reply) => {\n  // Some code\n  await asyncMethod()\n})\n```\n`onTimeout` is useful if you need to monitor the request timed out in your\nservice (if the `connectionTimeout` property is set on the Fastify instance).\nThe `onTimeout` hook is executed when a request is timed out and the HTTP socket\nhas been hanged up. Therefore, you will not be able to send data to the client.\n\n### onRequestAbort\n\n```js\nfastify.addHook('onRequestAbort', (request, reply, done) => {\n  // Some code\n  done()\n})\n```\nOr `async/await`:\n```js\nfastify.addHook('onRequestAbort', async (request, reply) => {\n  // Some code\n  await asyncMethod()\n})\n```\nThe `onRequestAbort` hook is executed when a client closes the connection before\nthe entire request has been processed. Therefore, you will not be able to send\ndata to the client.\n\n**Notice:** client abort detection is not completely reliable. See: [`Detecting-When-Clients-Abort.md`](../Guides/Detecting-When-Clients-Abort.md)\n\n### Manage Errors from a hook\nIf you get an error during the execution of your hook, just pass it to `done()`\nand Fastify will automatically close the request and send the appropriate error\ncode to the user.\n\n```js\nfastify.addHook('onRequest', (request, reply, done) => {\n  done(new Error('Some error'))\n})\n```\n\nIf you want to pass a custom error code to the user, just use `reply.code()`:\n```js\nfastify.addHook('preHandler', (request, reply, done) => {\n  reply.code(400)\n  done(new Error('Some error'))\n})\n```\n*The error will be handled by [`Reply`](./Reply.md#errors).*\n\nOr if you're using `async/await` you can just throw an error:\n```js\nfastify.addHook('onRequest', async (request, reply) => {\n  throw new Error('Some error')\n})\n```\n\n### Respond to a request from a hook\n\nIf needed, you can respond to a request before you reach the route handler, for\nexample when implementing an authentication hook. Replying from a hook implies\nthat the hook chain is __stopped__ and the rest of the hooks and handlers are\nnot executed. If the hook is using the callback approach, i.e. it is not an\n`async` function or it returns a `Promise`, it is as simple as calling\n`reply.send()` and avoiding calling the callback. If the hook is `async`,\n`reply.send()` __must__ be called _before_ the function returns or the promise\nresolves, otherwise, the request will proceed. When `reply.send()` is called\noutside of the promise chain, it is important to `return reply` otherwise the\nrequest will be executed twice.\n\nIt is important to __not mix callbacks and `async`/`Promise`__, otherwise the\nhook chain will be executed twice.\n\nIf you are using `onRequest` or `preHandler` use `reply.send`.\n\n```js\nfastify.addHook('onRequest', (request, reply, done) => {\n  reply.send('Early response')\n})\n\n// Works with async functions too\nfastify.addHook('preHandler', async (request, reply) => {\n  await something()\n  reply.send({ hello: 'world' })\n  return reply // mandatory, so the request is not executed further\n})\n```\n\nIf you want to respond with a stream, you should avoid using an `async` function\nfor the hook. If you must use an `async` function, your code will need to follow\nthe pattern in\n[test/hooks-async.js](https://github.com/fastify/fastify/blob/94ea67ef2d8dce8a955d510cd9081aabd036fa85/test/hooks-async.js#L269-L275).\n\n```js\nfastify.addHook('onRequest', (request, reply, done) => {\n  const stream = fs.createReadStream('some-file', 'utf8')\n  reply.send(stream)\n})\n```\n\nIf you are sending a response without `await` on it, make sure to always `return\nreply`:\n\n```js\nfastify.addHook('preHandler', async (request, reply) => {\n  setImmediate(() => { reply.send('hello') })\n\n  // This is needed to signal the handler to wait for a response\n  // to be sent outside of the promise chain\n  return reply\n})\n\nfastify.addHook('preHandler', async (request, reply) => {\n  // the @fastify/static plugin will send a file asynchronously,\n  // so we should return reply\n  reply.sendFile('myfile')\n  return reply\n})\n```\n\n## Application Hooks\n\nYou can hook into the application-lifecycle as well.\n\n- [onReady](#onready)\n- [onClose](#onclose)\n- [onRoute](#onroute)\n- [onRegister](#onregister)\n\n### onReady\nTriggered before the server starts listening for requests and when `.ready()` is\ninvoked. It cannot change the routes or add new hooks. Registered hook functions\nare executed serially. Only after all `onReady` hook functions have completed\nwill the server start listening for requests. Hook functions accept one\nargument: a callback, `done`, to be invoked after the hook function is complete.\nHook functions are invoked with `this` bound to the associated Fastify instance.\n\n```js\n// callback style\nfastify.addHook('onReady', function (done) {\n  // Some code\n  const err = null;\n  done(err)\n})\n\n// or async/await style\nfastify.addHook('onReady', async function () {\n  // Some async code\n  await loadCacheFromDatabase()\n})\n```\n\n### onClose\n<a id=\"on-close\"></a>\n\nTriggered when `fastify.close()` is invoked to stop the server. It is useful\nwhen [plugins](./Plugins.md) need a \"shutdown\" event, for example, to close an\nopen connection to a database.\n\nThe hook function takes the Fastify instance as a first argument, \nand a `done` callback for synchronous hook functions.\n```js\n// callback style\nfastify.addHook('onClose', (instance, done) => {\n  // Some code\n  done()\n})\n\n// or async/await style\nfastify.addHook('onClose', async (instance) => {\n  // Some async code\n  await closeDatabaseConnections()\n})\n```\n\n### onRoute\n<a id=\"on-route\"></a>\n\nTriggered when a new route is registered. Listeners are passed a `routeOptions`\nobject as the sole parameter. The interface is synchronous, and, as such, the\nlisteners are not passed a callback. This hook is encapsulated.\n\n```js\nfastify.addHook('onRoute', (routeOptions) => {\n  //Some code\n  routeOptions.method\n  routeOptions.schema\n  routeOptions.url // the complete URL of the route, it will include the prefix if any\n  routeOptions.path // `url` alias\n  routeOptions.routePath // the URL of the route without the prefix\n  routeOptions.bodyLimit\n  routeOptions.logLevel\n  routeOptions.logSerializers\n  routeOptions.prefix\n})\n```\n\nIf you are authoring a plugin and you need to customize application routes, like\nmodifying the options or adding new route hooks, this is the right place.\n\n```js\nfastify.addHook('onRoute', (routeOptions) => {\n  function onPreSerialization(request, reply, payload, done) {\n    // Your code\n    done(null, payload)\n  }\n  // preSerialization can be an array or undefined\n  routeOptions.preSerialization = [...(routeOptions.preSerialization || []), onPreSerialization]\n})\n```\n\nTo add more routes within an onRoute hook, the routes must\nbe tagged correctly. The hook will run into an infinite loop if\nnot tagged. The recommended approach is shown below.\n\n```js\nconst kRouteAlreadyProcessed = Symbol('route-already-processed')\n\nfastify.addHook('onRoute', function (routeOptions) {\n  const { url, method } = routeOptions\n\n  const isAlreadyProcessed = (routeOptions.custom && routeOptions.custom[kRouteAlreadyProcessed]) || false\n\n  if (!isAlreadyProcessed) {\n    this.route({\n      url,\n      method,\n      custom: {\n        [kRouteAlreadyProcessed]: true\n      },\n      handler: () => {}\n    })\n  }\n})\n```\n\nFor more details, see this [issue](https://github.com/fastify/fastify/issues/4319).\n\n### onRegister\n<a id=\"on-register\"></a>\n\nTriggered when a new plugin is registered and a new encapsulation context is\ncreated. The hook will be executed **before** the registered code.\n\nThis hook can be useful if you are developing a plugin that needs to know when a\nplugin context is formed, and you want to operate in that specific context, thus\nthis hook is encapsulated.\n\n**Note:** This hook will not be called if a plugin is wrapped inside\n[`fastify-plugin`](https://github.com/fastify/fastify-plugin).\n```js\nfastify.decorate('data', [])\n\nfastify.register(async (instance, opts) => {\n  instance.data.push('hello')\n  console.log(instance.data) // ['hello']\n\n  instance.register(async (instance, opts) => {\n    instance.data.push('world')\n    console.log(instance.data) // ['hello', 'world']\n  }, { prefix: '/hola' })\n}, { prefix: '/ciao' })\n\nfastify.register(async (instance, opts) => {\n  console.log(instance.data) // []\n}, { prefix: '/hello' })\n\nfastify.addHook('onRegister', (instance, opts) => {\n  // Create a new array from the old one\n  // but without keeping the reference\n  // allowing the user to have encapsulated\n  // instances of the `data` property\n  instance.data = instance.data.slice()\n\n  // the options of the new registered instance\n  console.log(opts.prefix)\n})\n```\n\n## Scope\n<a id=\"scope\"></a>\n\nExcept for [onClose](#onclose), all hooks are encapsulated. This means that you\ncan decide where your hooks should run by using `register` as explained in the\n[plugins guide](../Guides/Plugins-Guide.md). If you pass a function, that\nfunction is bound to the right Fastify context and from there you have full\naccess to the Fastify API.\n\n```js\nfastify.addHook('onRequest', function (request, reply, done) {\n  const self = this // Fastify context\n  done()\n})\n```\n\nNote that the Fastify context in each hook is the same as the plugin where the\nroute was registered, for example:\n\n```js\nfastify.addHook('onRequest', async function (req, reply) {\n  if (req.raw.url === '/nested') {\n    assert.strictEqual(this.foo, 'bar')\n  } else {\n    assert.strictEqual(this.foo, undefined)\n  }\n})\n\nfastify.get('/', async function (req, reply) {\n  assert.strictEqual(this.foo, undefined)\n  return { hello: 'world' }\n})\n\nfastify.register(async function plugin (fastify, opts) {\n  fastify.decorate('foo', 'bar')\n\n  fastify.get('/nested', async function (req, reply) {\n    assert.strictEqual(this.foo, 'bar')\n    return { hello: 'world' }\n  })\n})\n```\n\nWarn: if you declare the function with an [arrow\nfunction](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions),\nthe `this` will not be Fastify, but the one of the current scope.\n\n\n## Route level hooks\n<a id=\"route-hooks\"></a>\n\nYou can declare one or more custom lifecycle hooks ([onRequest](#onrequest),\n[onResponse](#onresponse), [preParsing](#preparsing),\n[preValidation](#prevalidation), [preHandler](#prehandler),\n[preSerialization](#preserialization), [onSend](#onsend),\n[onTimeout](#ontimeout), and [onError](#onerror)) hook(s) that will be\n**unique** for the route. If you do so, those hooks are always executed as the\nlast hook in their category.\n\nThis can be useful if you need to implement authentication, where the\n[preParsing](#preparsing) or [preValidation](#prevalidation) hooks are exactly\nwhat you need. Multiple route-level hooks can also be specified as an array.\n\n```js\nfastify.addHook('onRequest', (request, reply, done) => {\n  // Your code\n  done()\n})\n\nfastify.addHook('onResponse', (request, reply, done) => {\n  // your code\n  done()\n})\n\nfastify.addHook('preParsing', (request, reply, done) => {\n  // Your code\n  done()\n})\n\nfastify.addHook('preValidation', (request, reply, done) => {\n  // Your code\n  done()\n})\n\nfastify.addHook('preHandler', (request, reply, done) => {\n  // Your code\n  done()\n})\n\nfastify.addHook('preSerialization', (request, reply, payload, done) => {\n  // Your code\n  done(null, payload)\n})\n\nfastify.addHook('onSend', (request, reply, payload, done) => {\n  // Your code\n  done(null, payload)\n})\n\nfastify.addHook('onTimeout', (request, reply, done) => {\n  // Your code\n  done()\n})\n\nfastify.addHook('onError', (request, reply, error, done) => {\n  // Your code\n  done()\n})\n\nfastify.route({\n  method: 'GET',\n  url: '/',\n  schema: { ... },\n  onRequest: function (request, reply, done) {\n    // This hook will always be executed after the shared `onRequest` hooks\n    done()\n  },\n  onResponse: function (request, reply, done) {\n    // this hook will always be executed after the shared `onResponse` hooks\n    done()\n  },\n  preParsing: function (request, reply, done) {\n    // This hook will always be executed after the shared `preParsing` hooks\n    done()\n  },\n  preValidation: function (request, reply, done) {\n    // This hook will always be executed after the shared `preValidation` hooks\n    done()\n  },\n  preHandler: function (request, reply, done) {\n    // This hook will always be executed after the shared `preHandler` hooks\n    done()\n  },\n  // // Example with an array. All hooks support this syntax.\n  //\n  // preHandler: [function (request, reply, done) {\n  //   // This hook will always be executed after the shared `preHandler` hooks\n  //   done()\n  // }],\n  preSerialization: (request, reply, payload, done) => {\n    // This hook will always be executed after the shared `preSerialization` hooks\n    done(null, payload)\n  },\n  onSend: (request, reply, payload, done) => {\n    // This hook will always be executed after the shared `onSend` hooks\n    done(null, payload)\n  },\n  onTimeout: (request, reply, done) => {\n    // This hook will always be executed after the shared `onTimeout` hooks\n    done()\n  },\n  onError: (request, reply, error, done) => {\n    // This hook will always be executed after the shared `onError` hooks\n    done()\n  },\n  handler: function (request, reply) {\n    reply.send({ hello: 'world' })\n  }\n})\n```\n\n**Note**: both options also accept an array of functions.\n\n## Using Hooks to Inject Custom Properties\n<a id=\"using-hooks-to-inject-custom-properties\"></a>\n\nYou can use a hook to inject custom properties into incoming requests.\nThis is useful for reusing processed data from hooks in controllers.\n\nA very common use case is, for example, checking user authentication based\non their token and then storing their recovered data into\nthe [Request](./Request.md) instance. This way, your controllers can read it\neasily with `request.authenticatedUser` or whatever you want to call it.\nThat's how it might look like:\n\n```js\nfastify.addHook('preParsing', async (request) => {\n  request.authenticatedUser = {\n    id: 42,\n    name: 'Jane Doe',\n    role: 'admin'\n  }\n})\n\nfastify.get('/me/is-admin', async function (req, reply) {\n  return { isAdmin: req.authenticatedUser?.role === 'admin' || false }\n})\n```\n\nNote that `.authenticatedUser` could actually be any property name\nchoosen by yourself. Using your own custom property prevents you\nfrom mutating existing properties, which\nwould be a dangerous and destructive operation. So be careful and\nmake sure your property is entirely new, also using this approach\nonly for very specific and small cases like this example.\n\nRegarding TypeScript in this example, you'd need to update the\n`FastifyRequest` core interface to include your new property typing\n(for more about it, see [TypeScript](./TypeScript.md) page), like:\n\n```ts\ninterface AuthenticatedUser { /* ... */ }\n\ndeclare module 'fastify' {\n  export interface FastifyRequest {\n    authenticatedUser?: AuthenticatedUser;\n  }\n}\n```\n\nAlthough this is a very pragmatic approach, if you're trying to do\nsomething more complex that changes these core objects, then\nconsider creating a custom [Plugin](./Plugins.md) instead.\n\n## Diagnostics Channel Hooks\n\n> **Note:** The `diagnostics_channel` is currently experimental on Node.js, so\n> its API is subject to change even in semver-patch releases of Node.js. For\n> versions of Node.js supported by Fastify where `diagnostics_channel` is\n> unavailable, the hook will use the\n> [polyfill](https://www.npmjs.com/package/diagnostics_channel) if it is\n> available. Otherwise, this feature will not be present.\n\nCurrently, one\n[`diagnostics_channel`](https://nodejs.org/api/diagnostics_channel.html) publish\nevent, `'fastify.initialization'`, happens at initialization time. The Fastify\ninstance is passed into the hook as a property of the object passed in. At this\npoint, the instance can be interacted with to add hooks, plugins, routes, or any\nother sort of modification.\n\nFor example, a tracing package might do something like the following (which is,\nof course, a simplification). This would be in a file loaded in the\ninitialization of the tracking package, in the typical \"require instrumentation\ntools first\" fashion.\n\n```js\nconst tracer = /* retrieved from elsehwere in the package */\nconst dc = require('diagnostics_channel')\nconst channel = dc.channel('fastify.initialization')\nconst spans = new WeakMap()\n\nchannel.subscribe(function ({ fastify }) {\n  fastify.addHook('onRequest', (request, reply, done) => {\n    const span = tracer.startSpan('fastify.request')\n    spans.set(request, span)\n    done()\n  })\n\n  fastify.addHook('onResponse', (request, reply, done) => {\n    const span = spans.get(request)\n    span.finish()\n    done()\n  })\n})\n```\n/.eslintrc,{\n  \"root\": true,\n  \"extends\": \"standard\"\n}\n/test/get.test.js \u0017'use strict'\n\nconst t = require('tap')\nconst test = t.test\nconst sget = require('simple-get').concat\nconst fastify = require('..')()\n\nconst schema = {\n  schema: {\n    response: {\n      '2xx': {\n        type: 'object',\n        properties: {\n          hello: {\n            type: 'string'\n          }\n        }\n      }\n    }\n  }\n}\n\nconst nullSchema = {\n  schema: {\n    response: {\n      '2xx': {\n        type: 'null'\n      }\n    }\n  }\n}\n\nconst numberSchema = {\n  schema: {\n    response: {\n      '2xx': {\n        type: 'object',\n        properties: {\n          hello: {\n            type: 'number'\n          }\n        }\n      }\n    }\n  }\n}\n\nconst querySchema = {\n  schema: {\n    querystring: {\n      type: 'object',\n      properties: {\n        hello: {\n          type: 'integer'\n        }\n      }\n    }\n  }\n}\n\nconst paramsSchema = {\n  schema: {\n    params: {\n      type: 'object',\n      properties: {\n        foo: {\n          type: 'string'\n        },\n        test: {\n          type: 'integer'\n        }\n      }\n    }\n  }\n}\n\nconst headersSchema = {\n  schema: {\n    headers: {\n      type: 'object',\n      properties: {\n        'x-test': {\n          type: 'number'\n        },\n        'Y-Test': {\n          type: 'number'\n        }\n      }\n    }\n  }\n}\n\ntest('shorthand - get', t => {\n  t.plan(1)\n  try {\n    fastify.get('/', schema, function (req, reply) {\n      reply.code(200).send({ hello: 'world' })\n    })\n    t.pass()\n  } catch (e) {\n    t.fail()\n  }\n})\n\ntest('shorthand - get (return null)', t => {\n  t.plan(1)\n  try {\n    fastify.get('/null', nullSchema, function (req, reply) {\n      reply.code(200).send(null)\n    })\n    t.pass()\n  } catch (e) {\n    t.fail()\n  }\n})\n\ntest('shorthand - get params', t => {\n  t.plan(1)\n  try {\n    fastify.get('/params/:foo/:test', paramsSchema, function (req, reply) {\n      reply.code(200).send(req.params)\n    })\n    t.pass()\n  } catch (e) {\n    t.fail()\n  }\n})\n\ntest('shorthand - get, querystring schema', t => {\n  t.plan(1)\n  try {\n    fastify.get('/query', querySchema, function (req, reply) {\n      reply.code(200).send(req.query)\n    })\n    t.pass()\n  } catch (e) {\n    t.fail()\n  }\n})\n\ntest('shorthand - get, headers schema', t => {\n  t.plan(1)\n  try {\n    fastify.get('/headers', headersSchema, function (req, reply) {\n      reply.code(200).send(req.headers)\n    })\n    t.pass()\n  } catch (e) {\n    t.fail()\n  }\n})\n\ntest('missing schema - get', t => {\n  t.plan(1)\n  try {\n    fastify.get('/missing', function (req, reply) {\n      reply.code(200).send({ hello: 'world' })\n    })\n    t.pass()\n  } catch (e) {\n    t.fail()\n  }\n})\n\ntest('custom serializer - get', t => {\n  t.plan(1)\n\n  function customSerializer (data) {\n    return JSON.stringify(data)\n  }\n\n  try {\n    fastify.get('/custom-serializer', numberSchema, function (req, reply) {\n      reply.code(200).serializer(customSerializer).send({ hello: 'world' })\n    })\n    t.pass()\n  } catch (e) {\n    t.fail()\n  }\n})\n\ntest('empty response', t => {\n  t.plan(1)\n  try {\n    fastify.get('/empty', function (req, reply) {\n      reply.code(200).send()\n    })\n    t.pass()\n  } catch (e) {\n    t.fail()\n  }\n})\n\ntest('send a falsy boolean', t => {\n  t.plan(1)\n  try {\n    fastify.get('/boolean', function (req, reply) {\n      reply.code(200).send(false)\n    })\n    t.pass()\n  } catch (e) {\n    t.fail()\n  }\n})\n\nfastify.listen({ port: 0 }, err => {\n  t.error(err)\n  t.teardown(() => { fastify.close() })\n\n  test('shorthand - request get', t => {\n    t.plan(4)\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(response.headers['content-length'], '' + body.length)\n      t.same(JSON.parse(body), { hello: 'world' })\n    })\n  })\n\n  test('shorthand - request get params schema', t => {\n    t.plan(4)\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port + '/params/world/123'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(response.headers['content-length'], '' + body.length)\n      t.same(JSON.parse(body), { foo: 'world', test: 123 })\n    })\n  })\n\n  test('shorthand - request get params schema error', t => {\n    t.plan(3)\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port + '/params/world/string'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 400)\n      t.same(JSON.parse(body), {\n        error: 'Bad Request',\n        message: 'params/test must be integer',\n        statusCode: 400\n      })\n    })\n  })\n\n  test('shorthand - request get headers schema', t => {\n    t.plan(4)\n    sget({\n      method: 'GET',\n      headers: {\n        'x-test': '1',\n        'Y-Test': '3'\n      },\n      json: true,\n      url: 'http://localhost:' + fastify.server.address().port + '/headers'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(body['x-test'], 1)\n      t.equal(body['y-test'], 3)\n    })\n  })\n\n  test('shorthand - request get headers schema error', t => {\n    t.plan(3)\n    sget({\n      method: 'GET',\n      headers: {\n        'x-test': 'abc'\n      },\n      url: 'http://localhost:' + fastify.server.address().port + '/headers'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 400)\n      t.same(JSON.parse(body), {\n        error: 'Bad Request',\n        message: 'headers/x-test must be number',\n        statusCode: 400\n      })\n    })\n  })\n\n  test('shorthand - request get querystring schema', t => {\n    t.plan(4)\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port + '/query?hello=123'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(response.headers['content-length'], '' + body.length)\n      t.same(JSON.parse(body), { hello: 123 })\n    })\n  })\n\n  test('shorthand - request get querystring schema error', t => {\n    t.plan(3)\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port + '/query?hello=world'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 400)\n      t.same(JSON.parse(body), {\n        error: 'Bad Request',\n        message: 'querystring/hello must be integer',\n        statusCode: 400\n      })\n    })\n  })\n\n  test('shorthand - request get missing schema', t => {\n    t.plan(4)\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port + '/missing'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(response.headers['content-length'], '' + body.length)\n      t.same(JSON.parse(body), { hello: 'world' })\n    })\n  })\n\n  test('shorthand - custom serializer', t => {\n    t.plan(4)\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port + '/custom-serializer'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(response.headers['content-length'], '' + body.length)\n      t.same(JSON.parse(body), { hello: 'world' })\n    })\n  })\n\n  test('shorthand - empty response', t => {\n    t.plan(4)\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port + '/empty'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(response.headers['content-length'], '0')\n      t.same(body.toString(), '')\n    })\n  })\n\n  test('shorthand - send a falsy boolean', t => {\n    t.plan(3)\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port + '/boolean'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.same(body.toString(), 'false')\n    })\n  })\n\n  test('shorthand - send null value', t => {\n    t.plan(3)\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port + '/null'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.same(body.toString(), 'null')\n    })\n  })\n})\n/types/tsconfig.json{\n  \"compilerOptions\": {\n    \"target\": \"es6\",\n    \"lib\": [ \"es2015\" ],\n    \"module\": \"commonjs\",\n    \"noEmit\": true,\n    \"strict\": true\n  },\n  \"include\": [\n    \"/test/types/*.test-d.ts\",\n    \"/types/*.d.ts\"\n  ]\n}\n/lib/schema-controller.js\u0010\t'use strict'\n\nconst { buildSchemas } = require('./schemas')\nconst SerializerSelector = require('@fastify/fast-json-stringify-compiler')\nconst ValidatorSelector = require('@fastify/ajv-compiler')\n\n/**\n * Called at every fastify context that is being created.\n * @param {object} parentSchemaCtrl: the SchemaController instance of the Fastify parent context\n * @param {object} opts: the `schemaController` server option. It can be undefined when a parentSchemaCtrl is set\n * @return {object}:a new SchemaController\n */\nfunction buildSchemaController (parentSchemaCtrl, opts) {\n  if (parentSchemaCtrl) {\n    return new SchemaController(parentSchemaCtrl, opts)\n  }\n\n  const compilersFactory = Object.assign({\n    buildValidator: null,\n    buildSerializer: null\n  }, opts?.compilersFactory)\n\n  if (!compilersFactory.buildValidator) {\n    compilersFactory.buildValidator = ValidatorSelector()\n  }\n  if (!compilersFactory.buildSerializer) {\n    compilersFactory.buildSerializer = SerializerSelector()\n  }\n\n  const option = {\n    bucket: (opts && opts.bucket) || buildSchemas,\n    compilersFactory,\n    isCustomValidatorCompiler: typeof opts?.compilersFactory?.buildValidator === 'function',\n    isCustomSerializerCompiler: typeof opts?.compilersFactory?.buildValidator === 'function'\n  }\n\n  return new SchemaController(undefined, option)\n}\n\nclass SchemaController {\n  constructor (parent, options) {\n    this.opts = options || (parent && parent.opts)\n    this.addedSchemas = false\n\n    this.compilersFactory = this.opts.compilersFactory\n    this.isCustomValidatorCompiler = this.opts.isCustomValidatorCompiler || false\n    this.isCustomSerializerCompiler = this.opts.isCustomSerializerCompiler || false\n\n    if (parent) {\n      this.schemaBucket = this.opts.bucket(parent.getSchemas())\n      this.validatorCompiler = parent.getValidatorCompiler()\n      this.serializerCompiler = parent.getSerializerCompiler()\n      this.parent = parent\n    } else {\n      this.schemaBucket = this.opts.bucket()\n    }\n  }\n\n  // Bucket interface\n  add (schema) {\n    this.addedSchemas = true\n    return this.schemaBucket.add(schema)\n  }\n\n  getSchema (schemaId) {\n    return this.schemaBucket.getSchema(schemaId)\n  }\n\n  getSchemas () {\n    return this.schemaBucket.getSchemas()\n  }\n\n  // Schema Controller compilers holder\n  setValidatorCompiler (validatorCompiler) {\n    this.validatorCompiler = validatorCompiler\n    this.isCustomValidatorCompiler = true\n  }\n\n  setSerializerCompiler (serializerCompiler) {\n    this.serializerCompiler = serializerCompiler\n    this.isCustomSerializerCompiler = true\n  }\n\n  getValidatorCompiler () {\n    return this.validatorCompiler || (this.parent && this.parent.getValidatorCompiler())\n  }\n\n  getSerializerCompiler () {\n    return this.serializerCompiler || (this.parent && this.parent.getSerializerCompiler())\n  }\n\n  getSerializerBuilder () {\n    return this.compilersFactory.buildSerializer || (this.parent && this.parent.getSerializerBuilder())\n  }\n\n  getValidatorBuilder () {\n    return this.compilersFactory.buildValidator || (this.parent && this.parent.getValidatorBuilder())\n  }\n\n  /**\n   * This method will be called when a validator must be setup.\n   * Do not setup the compiler more than once\n   * @param {object} serverOptions: the fastify server option\n   */\n  setupValidator (serverOption) {\n    const isReady = this.validatorCompiler !== undefined && !this.addedSchemas\n    if (isReady) {\n      return\n    }\n    this.validatorCompiler = this.getValidatorBuilder()(this.schemaBucket.getSchemas(), serverOption.ajv)\n  }\n\n  /**\n   * This method will be called when a serializer must be setup.\n   * Do not setup the compiler more than once\n   * @param {object} serverOptions: the fastify server option\n   */\n  setupSerializer (serverOption) {\n    const isReady = this.serializerCompiler !== undefined && !this.addedSchemas\n    if (isReady) {\n      return\n    }\n\n    this.serializerCompiler = this.getSerializerBuilder()(this.schemaBucket.getSchemas(), serverOption.serializerOpts)\n  }\n}\n\nSchemaController.buildSchemaController = buildSchemaController\nmodule.exports = SchemaController\n/test/hooks-async.test.jsJ\u001b'use strict'\n\nconst { Readable } = require('stream')\nconst t = require('tap')\nconst test = t.test\nconst sget = require('simple-get').concat\nconst Fastify = require('../fastify')\nconst fs = require('fs')\nconst sleep = ms => new Promise(resolve => setTimeout(resolve, ms))\n\nprocess.removeAllListeners('warning')\n\ntest('async hooks', t => {\n  t.plan(21)\n\n  const fastify = Fastify({ exposeHeadRoutes: false })\n  fastify.addHook('onRequest', async function (request, reply) {\n    await sleep(1)\n    request.test = 'the request is coming'\n    reply.test = 'the reply has come'\n    if (request.raw.method === 'DELETE') {\n      throw new Error('some error')\n    }\n  })\n\n  fastify.addHook('preHandler', async function (request, reply) {\n    await sleep(1)\n    t.equal(request.test, 'the request is coming')\n    t.equal(reply.test, 'the reply has come')\n    if (request.raw.method === 'HEAD') {\n      throw new Error('some error')\n    }\n  })\n\n  fastify.addHook('onSend', async function (request, reply, payload) {\n    await sleep(1)\n    t.ok('onSend called')\n  })\n\n  fastify.addHook('onResponse', async function (request, reply) {\n    await sleep(1)\n    t.ok('onResponse called')\n  })\n\n  fastify.get('/', function (request, reply) {\n    t.equal(request.test, 'the request is coming')\n    t.equal(reply.test, 'the reply has come')\n    reply.code(200).send({ hello: 'world' })\n  })\n\n  fastify.head('/', function (req, reply) {\n    reply.code(200).send({ hello: 'world' })\n  })\n\n  fastify.delete('/', function (req, reply) {\n    reply.code(200).send({ hello: 'world' })\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(response.headers['content-length'], '' + body.length)\n      t.same(JSON.parse(body), { hello: 'world' })\n    })\n\n    sget({\n      method: 'HEAD',\n      url: 'http://localhost:' + fastify.server.address().port\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 500)\n    })\n\n    sget({\n      method: 'DELETE',\n      url: 'http://localhost:' + fastify.server.address().port\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 500)\n    })\n  })\n})\n\ntest('modify payload', t => {\n  t.plan(10)\n  const fastify = Fastify()\n  const payload = { hello: 'world' }\n  const modifiedPayload = { hello: 'modified' }\n  const anotherPayload = '\"winter is coming\"'\n\n  fastify.addHook('onSend', async function (request, reply, thePayload) {\n    t.ok('onSend called')\n    t.same(JSON.parse(thePayload), payload)\n    return thePayload.replace('world', 'modified')\n  })\n\n  fastify.addHook('onSend', async function (request, reply, thePayload) {\n    t.ok('onSend called')\n    t.same(JSON.parse(thePayload), modifiedPayload)\n    return anotherPayload\n  })\n\n  fastify.addHook('onSend', async function (request, reply, thePayload) {\n    t.ok('onSend called')\n    t.equal(thePayload, anotherPayload)\n  })\n\n  fastify.get('/', (req, reply) => {\n    reply.send(payload)\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.payload, anotherPayload)\n    t.equal(res.statusCode, 200)\n    t.equal(res.headers['content-length'], '18')\n  })\n})\n\ntest('onRequest hooks should be able to block a request', t => {\n  t.plan(5)\n  const fastify = Fastify()\n\n  fastify.addHook('onRequest', async (req, reply) => {\n    await reply.send('hello')\n  })\n\n  fastify.addHook('onRequest', async (req, reply) => {\n    t.fail('this should not be called')\n  })\n\n  fastify.addHook('preHandler', async (req, reply) => {\n    t.fail('this should not be called')\n  })\n\n  fastify.addHook('onSend', async (req, reply, payload) => {\n    t.ok('called')\n  })\n\n  fastify.addHook('onResponse', async (request, reply) => {\n    t.ok('called')\n  })\n\n  fastify.get('/', function (request, reply) {\n    t.fail('we should not be here')\n  })\n\n  fastify.inject({\n    url: '/',\n    method: 'GET'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 200)\n    t.equal(res.payload, 'hello')\n  })\n})\n\ntest('preParsing hooks should be able to modify the payload', t => {\n  t.plan(3)\n  const fastify = Fastify()\n\n  fastify.addHook('preParsing', async (req, reply, payload) => {\n    const stream = new Readable()\n\n    stream.receivedEncodedLength = parseInt(req.headers['content-length'], 10)\n    stream.push(JSON.stringify({ hello: 'another world' }))\n    stream.push(null)\n\n    return stream\n  })\n\n  fastify.post('/', function (request, reply) {\n    reply.send(request.body)\n  })\n\n  fastify.inject({\n    method: 'POST',\n    url: '/',\n    payload: { hello: 'world' }\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 200)\n    t.same(JSON.parse(res.payload), { hello: 'another world' })\n  })\n})\n\ntest('preParsing hooks should handle errors', t => {\n  t.plan(3)\n  const fastify = Fastify()\n\n  fastify.addHook('preParsing', async (req, reply, payload) => {\n    const e = new Error('kaboom')\n    e.statusCode = 501\n    throw e\n  })\n\n  fastify.post('/', function (request, reply) {\n    reply.send(request.body)\n  })\n\n  fastify.inject({\n    method: 'POST',\n    url: '/',\n    payload: { hello: 'world' }\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 501)\n    t.same(JSON.parse(res.payload), { error: 'Not Implemented', message: 'kaboom', statusCode: 501 })\n  })\n})\n\ntest('preHandler hooks should be able to block a request', t => {\n  t.plan(5)\n  const fastify = Fastify()\n\n  fastify.addHook('preHandler', async (req, reply) => {\n    await reply.send('hello')\n  })\n\n  fastify.addHook('preHandler', async (req, reply) => {\n    t.fail('this should not be called')\n  })\n\n  fastify.addHook('onSend', async (req, reply, payload) => {\n    t.equal(payload, 'hello')\n  })\n\n  fastify.addHook('onResponse', async (request, reply) => {\n    t.ok('called')\n  })\n\n  fastify.get('/', function (request, reply) {\n    t.fail('we should not be here')\n  })\n\n  fastify.inject({\n    url: '/',\n    method: 'GET'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 200)\n    t.equal(res.payload, 'hello')\n  })\n})\n\ntest('preValidation hooks should be able to block a request', t => {\n  t.plan(5)\n  const fastify = Fastify()\n\n  fastify.addHook('preValidation', async (req, reply) => {\n    await reply.send('hello')\n  })\n\n  fastify.addHook('preValidation', async (req, reply) => {\n    t.fail('this should not be called')\n  })\n\n  fastify.addHook('onSend', async (req, reply, payload) => {\n    t.equal(payload, 'hello')\n  })\n\n  fastify.addHook('onResponse', async (request, reply) => {\n    t.ok('called')\n  })\n\n  fastify.get('/', function (request, reply) {\n    t.fail('we should not be here')\n  })\n\n  fastify.inject({\n    url: '/',\n    method: 'GET'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 200)\n    t.equal(res.payload, 'hello')\n  })\n})\n\ntest('preValidation hooks should be able to change request body before validation', t => {\n  t.plan(4)\n  const fastify = Fastify()\n\n  fastify.addHook('preValidation', async (req, _reply) => {\n    const buff = Buffer.from(req.body.message, 'base64')\n    req.body = JSON.parse(buff.toString('utf-8'))\n  })\n\n  fastify.post(\n    '/',\n    {\n      schema: {\n        body: {\n          type: 'object',\n          properties: {\n            foo: {\n              type: 'string'\n            },\n            bar: {\n              type: 'number'\n            }\n          },\n          required: ['foo', 'bar']\n        }\n      }\n    },\n    (req, reply) => {\n      t.pass()\n      reply.status(200).send('hello')\n    }\n  )\n\n  fastify.inject({\n    url: '/',\n    method: 'POST',\n    payload: {\n      message: Buffer.from(JSON.stringify({ foo: 'example', bar: 1 })).toString('base64')\n    }\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 200)\n    t.equal(res.payload, 'hello')\n  })\n})\n\ntest('preSerialization hooks should be able to modify the payload', t => {\n  t.plan(3)\n  const fastify = Fastify()\n\n  fastify.addHook('preSerialization', async (req, reply, payload) => {\n    return { hello: 'another world' }\n  })\n\n  fastify.get('/', function (request, reply) {\n    reply.send({ hello: 'world' })\n  })\n\n  fastify.inject({\n    url: '/',\n    method: 'GET'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 200)\n    t.same(JSON.parse(res.payload), { hello: 'another world' })\n  })\n})\n\ntest('preSerialization hooks should handle errors', t => {\n  t.plan(3)\n  const fastify = Fastify()\n\n  fastify.addHook('preSerialization', async (req, reply, payload) => {\n    throw new Error('kaboom')\n  })\n\n  fastify.get('/', function (request, reply) {\n    reply.send({ hello: 'world' })\n  })\n\n  fastify.inject({\n    url: '/',\n    method: 'GET'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 500)\n    t.same(JSON.parse(res.payload), { error: 'Internal Server Error', message: 'kaboom', statusCode: 500 })\n  })\n})\n\ntest('preValidation hooks should handle throwing null', t => {\n  t.plan(4)\n  const fastify = Fastify()\n\n  fastify.setErrorHandler(async (error, request, reply) => {\n    t.ok(error instanceof Error)\n    await reply.send(error)\n  })\n\n  fastify.addHook('preValidation', async () => {\n    // eslint-disable-next-line no-throw-literal\n    throw null\n  })\n\n  fastify.get('/', function (request, reply) { t.fail('the handler must not be called') })\n\n  fastify.inject({\n    url: '/',\n    method: 'GET'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 500)\n    t.same(res.json(), {\n      error: 'Internal Server Error',\n      code: 'FST_ERR_SEND_UNDEFINED_ERR',\n      message: 'Undefined error has occurred',\n      statusCode: 500\n    })\n  })\n})\n\ntest('preValidation hooks should handle throwing a string', t => {\n  t.plan(3)\n  const fastify = Fastify()\n\n  fastify.addHook('preValidation', async () => {\n    // eslint-disable-next-line no-throw-literal\n    throw 'this is an error'\n  })\n\n  fastify.get('/', function (request, reply) { t.fail('the handler must not be called') })\n\n  fastify.inject({\n    url: '/',\n    method: 'GET'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 500)\n    t.equal(res.payload, 'this is an error')\n  })\n})\n\ntest('onRequest hooks should be able to block a request (last hook)', t => {\n  t.plan(5)\n  const fastify = Fastify()\n\n  fastify.addHook('onRequest', async (req, reply) => {\n    await reply.send('hello')\n  })\n\n  fastify.addHook('preHandler', async (req, reply) => {\n    t.fail('this should not be called')\n  })\n\n  fastify.addHook('onSend', async (req, reply, payload) => {\n    t.ok('called')\n  })\n\n  fastify.addHook('onResponse', async (request, reply) => {\n    t.ok('called')\n  })\n\n  fastify.get('/', function (request, reply) {\n    t.fail('we should not be here')\n  })\n\n  fastify.inject({\n    url: '/',\n    method: 'GET'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 200)\n    t.equal(res.payload, 'hello')\n  })\n})\n\ntest('preHandler hooks should be able to block a request (last hook)', t => {\n  t.plan(5)\n  const fastify = Fastify()\n\n  fastify.addHook('preHandler', async (req, reply) => {\n    await reply.send('hello')\n  })\n\n  fastify.addHook('onSend', async (req, reply, payload) => {\n    t.equal(payload, 'hello')\n  })\n\n  fastify.addHook('onResponse', async (request, reply) => {\n    t.ok('called')\n  })\n\n  fastify.get('/', function (request, reply) {\n    t.fail('we should not be here')\n  })\n\n  fastify.inject({\n    url: '/',\n    method: 'GET'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 200)\n    t.equal(res.payload, 'hello')\n  })\n})\n\ntest('onRequest respond with a stream', t => {\n  t.plan(4)\n  const fastify = Fastify()\n\n  fastify.addHook('onRequest', async (req, reply) => {\n    return new Promise((resolve, reject) => {\n      const stream = fs.createReadStream(process.cwd() + '/test/stream.test.js', 'utf8')\n      // stream.pipe(res)\n      // res.once('finish', resolve)\n      reply.send(stream).then(() => {\n        reply.raw.once('finish', () => resolve())\n      })\n    })\n  })\n\n  fastify.addHook('onRequest', async (req, res) => {\n    t.fail('this should not be called')\n  })\n\n  fastify.addHook('preHandler', async (req, reply) => {\n    t.fail('this should not be called')\n  })\n\n  fastify.addHook('onSend', async (req, reply, payload) => {\n    t.ok('called')\n  })\n\n  fastify.addHook('onResponse', async (request, reply) => {\n    t.ok('called')\n  })\n\n  fastify.get('/', function (request, reply) {\n    t.fail('we should not be here')\n  })\n\n  fastify.inject({\n    url: '/',\n    method: 'GET'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 200)\n  })\n})\n\ntest('preHandler respond with a stream', t => {\n  t.plan(7)\n  const fastify = Fastify()\n\n  fastify.addHook('onRequest', async (req, res) => {\n    t.ok('called')\n  })\n\n  // we are calling `reply.send` inside the `preHandler` hook with a stream,\n  // this triggers the `onSend` hook event if `preHandler` has not yet finished\n  const order = [1, 2]\n\n  fastify.addHook('preHandler', async (req, reply) => {\n    const stream = fs.createReadStream(process.cwd() + '/test/stream.test.js', 'utf8')\n    reply.raw.once('finish', () => {\n      t.equal(order.shift(), 2)\n    })\n    return reply.send(stream)\n  })\n\n  fastify.addHook('preHandler', async (req, reply) => {\n    t.fail('this should not be called')\n  })\n\n  fastify.addHook('onSend', async (req, reply, payload) => {\n    t.equal(order.shift(), 1)\n    t.equal(typeof payload.pipe, 'function')\n  })\n\n  fastify.addHook('onResponse', async (request, reply) => {\n    t.ok('called')\n  })\n\n  fastify.get('/', function (request, reply) {\n    t.fail('we should not be here')\n  })\n\n  fastify.inject({\n    url: '/',\n    method: 'GET'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 200)\n  })\n})\n\ntest('Should log a warning if is an async function with `done`', t => {\n  t.test('2 arguments', t => {\n    t.plan(2)\n    const fastify = Fastify()\n\n    try {\n      fastify.addHook('onRequestAbort', async (req, done) => {})\n    } catch (e) {\n      t.ok(e.code, 'FST_ERR_HOOK_INVALID_ASYNC_HANDLER')\n      t.ok(e.message === 'Async function has too many arguments. Async hooks should not use the \\'done\\' argument.')\n    }\n  })\n\n  t.test('3 arguments', t => {\n    t.plan(2)\n    const fastify = Fastify()\n\n    try {\n      fastify.addHook('onRequest', async (req, reply, done) => {})\n    } catch (e) {\n      t.ok(e.code, 'FST_ERR_HOOK_INVALID_ASYNC_HANDLER')\n      t.ok(e.message === 'Async function has too many arguments. Async hooks should not use the \\'done\\' argument.')\n    }\n  })\n\n  t.test('4 arguments', t => {\n    t.plan(6)\n    const fastify = Fastify()\n\n    try {\n      fastify.addHook('onSend', async (req, reply, payload, done) => {})\n    } catch (e) {\n      t.ok(e.code, 'FST_ERR_HOOK_INVALID_ASYNC_HANDLER')\n      t.ok(e.message === 'Async function has too many arguments. Async hooks should not use the \\'done\\' argument.')\n    }\n    try {\n      fastify.addHook('preSerialization', async (req, reply, payload, done) => {})\n    } catch (e) {\n      t.ok(e.code, 'FST_ERR_HOOK_INVALID_ASYNC_HANDLER')\n      t.ok(e.message === 'Async function has too many arguments. Async hooks should not use the \\'done\\' argument.')\n    }\n    try {\n      fastify.addHook('onError', async (req, reply, payload, done) => {})\n    } catch (e) {\n      t.ok(e.code, 'FST_ERR_HOOK_INVALID_ASYNC_HANDLER')\n      t.ok(e.message === 'Async function has too many arguments. Async hooks should not use the \\'done\\' argument.')\n    }\n  })\n\n  t.end()\n})\n\ntest('early termination, onRequest async', async t => {\n  t.plan(2)\n\n  const app = Fastify()\n\n  app.addHook('onRequest', async (req, reply) => {\n    setImmediate(() => reply.send('hello world'))\n    return reply\n  })\n\n  app.get('/', (req, reply) => {\n    t.fail('should not happen')\n  })\n\n  const res = await app.inject('/')\n  t.equal(res.statusCode, 200)\n  t.equal(res.body.toString(), 'hello world')\n})\n\ntest('The this should be the same of the encapsulation level', async t => {\n  const fastify = Fastify()\n\n  fastify.addHook('onRequest', async function (req, reply) {\n    if (req.raw.url === '/nested') {\n      t.equal(this.foo, 'bar')\n    } else {\n      t.equal(this.foo, undefined)\n    }\n  })\n\n  fastify.register(plugin)\n  fastify.get('/', (req, reply) => reply.send('ok'))\n\n  async function plugin (fastify, opts) {\n    fastify.decorate('foo', 'bar')\n    fastify.get('/nested', (req, reply) => reply.send('ok'))\n  }\n\n  await fastify.inject({ method: 'GET', path: '/' })\n  await fastify.inject({ method: 'GET', path: '/nested' })\n  await fastify.inject({ method: 'GET', path: '/' })\n  await fastify.inject({ method: 'GET', path: '/nested' })\n})\n\ntest('preSerializationEnd should handle errors if the serialize method throws', t => {\n  t.test('works with sync preSerialization', t => {\n    t.plan(2)\n    const fastify = Fastify()\n\n    fastify.addHook('preSerialization', (request, reply, payload, done) => {\n      done(null, payload)\n    })\n\n    fastify.post('/', {\n      handler (req, reply) { reply.send({ notOk: true }) },\n      schema: { response: { 200: { required: ['ok'], properties: { ok: { type: 'boolean' } } } } }\n    })\n\n    fastify.inject({\n      method: 'POST',\n      url: '/'\n    }, (err, res) => {\n      t.error(err)\n      t.not(res.statusCode, 200)\n    })\n  })\n\n  t.test('works with async preSerialization', t => {\n    t.plan(2)\n    const fastify = Fastify()\n\n    fastify.addHook('preSerialization', async (request, reply, payload) => {\n      return payload\n    })\n\n    fastify.post('/', {\n      handler (req, reply) { reply.send({ notOk: true }) },\n      schema: { response: { 200: { required: ['ok'], properties: { ok: { type: 'boolean' } } } } }\n    })\n\n    fastify.inject({\n      method: 'POST',\n      url: '/'\n    }, (err, res) => {\n      t.error(err)\n      t.not(res.statusCode, 200)\n    })\n  })\n\n  t.end()\n})\n\nt.test('nested hooks to do not crash on 404', t => {\n  t.plan(2)\n  const fastify = Fastify()\n\n  fastify.get('/hello', (req, reply) => {\n    reply.send({ hello: 'world' })\n  })\n\n  fastify.register(async function (fastify) {\n    fastify.get('/something', (req, reply) => {\n      reply.callNotFound()\n    })\n\n    fastify.setNotFoundHandler(async (request, reply) => {\n      reply.statusCode = 404\n      return { status: 'nested-not-found' }\n    })\n\n    fastify.setErrorHandler(async (error, request, reply) => {\n      reply.statusCode = 500\n      return { status: 'nested-error', error }\n    })\n  }, { prefix: '/nested' })\n\n  fastify.setNotFoundHandler(async (request, reply) => {\n    reply.statusCode = 404\n    return { status: 'not-found' }\n  })\n\n  fastify.setErrorHandler(async (error, request, reply) => {\n    reply.statusCode = 500\n    return { status: 'error', error }\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/nested/something'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 404)\n  })\n})\n/docs/Guides/Write-Plugin.md\u0012<h1 align=\"center\">Fastify</h1>\n\n# How to write a good plugin\nFirst, thank you for deciding to write a plugin for Fastify. Fastify is a\nminimal framework and plugins are its strength, so thank you.\n\nThe core principles of Fastify are performance, low overhead, and providing a\ngood experience to our users. When writing a plugin, it is important to keep\nthese principles in mind. Therefore, in this document, we will analyze what\ncharacterizes a quality plugin.\n\n*Need some inspiration? You can use the label [\"plugin\nsuggestion\"](https://github.com/fastify/fastify/issues?q=is%3Aissue+is%3Aopen+label%3A%22plugin+suggestion%22)\nin our issue tracker!*\n\n## Code\nFastify uses different techniques to optimize its code, many of them are\ndocumented in our Guides. We highly recommend you read [the hitchhiker's guide\nto plugins](./Plugins-Guide.md) to discover all the APIs you can use to build\nyour plugin and learn how to use them.\n\nDo you have a question or need some advice? We are more than happy to help you!\nJust open an issue in our [help repository](https://github.com/fastify/help).\n\nOnce you submit a plugin to our [ecosystem list](./Ecosystem.md), we will review\nyour code and help you improve it if necessary.\n\n## Documentation\nDocumentation is extremely important. If your plugin is not well documented we\nwill not accept it to the ecosystem list. Lack of quality documentation makes it\nmore difficult for people to use your plugin, and will likely result in it going\nunused.\n\nIf you want to see some good examples of how to document a plugin take a look\nat:\n- [`@fastify/caching`](https://github.com/fastify/fastify-caching)\n- [`@fastify/compress`](https://github.com/fastify/fastify-compress)\n- [`@fastify/cookie`](https://github.com/fastify/fastify-cookie)\n- [`@fastify/under-pressure`](https://github.com/fastify/under-pressure)\n- [`@fastify/view`](https://github.com/fastify/point-of-view)\n\n## License\nYou can license your plugin as you prefer, we do not enforce any kind of\nlicense.\n\nWe prefer the [MIT license](https://choosealicense.com/licenses/mit/) because we\nthink it allows more people to use the code freely. For a list of alternative\nlicenses see the [OSI list](https://opensource.org/licenses) or GitHub's\n[choosealicense.com](https://choosealicense.com/).\n\n## Examples\nAlways put an example file in your repository. Examples are very helpful for\nusers and give a very fast way to test your plugin. Your users will be grateful.\n\n## Test\nIt is extremely important that a plugin is thoroughly tested to verify that is\nworking properly.\n\nA plugin without tests will not be accepted to the ecosystem list. A lack of\ntests does not inspire trust nor guarantee that the code will continue to work\namong different versions of its dependencies.\n\nWe do not enforce any testing library. We use [`tap`](https://www.node-tap.org/)\nsince it offers out-of-the-box parallel testing and code coverage, but it is up\nto you to choose your library of preference.\n\n## Code Linter\nIt is not mandatory, but we highly recommend you use a code linter in your\nplugin. It will ensure a consistent code style and help you to avoid many\nerrors.\n\nWe use [`standard`](https://standardjs.com/) since it works without the need to\nconfigure it and is very easy to integrate into a test suite.\n\n## Continuous Integration\nIt is not mandatory, but if you release your code as open source, it helps to\nuse Continuous Integration to ensure contributions do not break your plugin and\nto show that the plugin works as intended. Both\n[CircleCI](https://circleci.com/) and [GitHub\nActions](https://github.com/features/actions) are free for open source projects\nand easy to set up.\n\nIn addition, you can enable services like [Dependabot](https://github.com/dependabot),\nwhich will help you keep your dependencies up to date and discover if a new\nrelease of Fastify has some issues with your plugin.\n\n## Let's start!\nAwesome, now you know everything you need to know about how to write a good\nplugin for Fastify! After you have built one (or more!) let us know! We will add\nit to the [ecosystem](https://github.com/fastify/fastify#ecosystem) section of\nour documentation!\n\nIf you want to see some real world examples, check out:\n- [`@fastify/view`](https://github.com/fastify/point-of-view) Templates\n  rendering (*ejs, pug, handlebars, marko*) plugin support for Fastify.\n- [`@fastify/mongodb`](https://github.com/fastify/fastify-mongodb) Fastify\n  MongoDB connection plugin, with this you can share the same MongoDB connection\n  pool in every part of your server.\n- [`@fastify/multipart`](https://github.com/fastify/fastify-multipart) Multipart\n  support for Fastify.\n- [`@fastify/helmet`](https://github.com/fastify/fastify-helmet) Important\n  security headers for Fastify.\n/test/https/https.test.js\u0007'use strict'\n\nconst t = require('tap')\nconst test = t.test\nconst sget = require('simple-get').concat\nconst Fastify = require('../..')\n\nconst { buildCertificate } = require('../build-certificate')\nt.before(buildCertificate)\n\ntest('https', (t) => {\n  t.plan(4)\n\n  let fastify\n  try {\n    fastify = Fastify({\n      https: {\n        key: global.context.key,\n        cert: global.context.cert\n      }\n    })\n    t.pass('Key/cert successfully loaded')\n  } catch (e) {\n    t.fail('Key/cert loading failed', e)\n  }\n\n  fastify.get('/', function (req, reply) {\n    reply.code(200).send({ hello: 'world' })\n  })\n\n  fastify.get('/proto', function (req, reply) {\n    reply.code(200).send({ proto: req.protocol })\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    t.test('https get request', t => {\n      t.plan(4)\n      sget({\n        method: 'GET',\n        url: 'https://localhost:' + fastify.server.address().port,\n        rejectUnauthorized: false\n      }, (err, response, body) => {\n        t.error(err)\n        t.equal(response.statusCode, 200)\n        t.equal(response.headers['content-length'], '' + body.length)\n        t.same(JSON.parse(body), { hello: 'world' })\n      })\n    })\n\n    t.test('https get request without trust proxy - protocol', t => {\n      t.plan(4)\n      sget({\n        method: 'GET',\n        url: 'https://localhost:' + fastify.server.address().port + '/proto',\n        rejectUnauthorized: false\n      }, (err, response, body) => {\n        t.error(err)\n        t.same(JSON.parse(body), { proto: 'https' })\n      })\n      sget({\n        method: 'GET',\n        url: 'https://localhost:' + fastify.server.address().port + '/proto',\n        rejectUnauthorized: false,\n        headers: {\n          'x-forwarded-proto': 'lorem'\n        }\n      }, (err, response, body) => {\n        t.error(err)\n        t.same(JSON.parse(body), { proto: 'https' })\n      })\n    })\n  })\n})\n\"/test/bundler/webpack/src/index.jsĨconst fastify = require('../../../../')()\n// Declare a route\nfastify.get('/', function (request, reply) {\n  reply.send({ hello: 'world' })\n})\n\nmodule.exports = fastify\n/test/http2/plain.test.js\u0004{'use strict'\n\nconst t = require('tap')\nconst test = t.test\nconst Fastify = require('../..')\nconst h2url = require('h2url')\nconst msg = { hello: 'world' }\n\nlet fastify\ntry {\n  fastify = Fastify({\n    http2: true\n  })\n  t.pass('http2 successfully loaded')\n} catch (e) {\n  t.fail('http2 loading failed', e)\n}\n\nfastify.get('/', function (req, reply) {\n  reply.code(200).send(msg)\n})\n\nfastify.get('/hostname', function (req, reply) {\n  reply.code(200).send(req.hostname)\n})\n\nfastify.listen({ port: 0 }, err => {\n  t.error(err)\n  t.teardown(() => { fastify.close() })\n\n  test('http get request', async (t) => {\n    t.plan(3)\n\n    const url = `http://localhost:${fastify.server.address().port}`\n    const res = await h2url.concat({ url })\n\n    t.equal(res.headers[':status'], 200)\n    t.equal(res.headers['content-length'], '' + JSON.stringify(msg).length)\n\n    t.same(JSON.parse(res.body), msg)\n  })\n\n  test('http hostname', async (t) => {\n    t.plan(1)\n\n    const hostname = `localhost:${fastify.server.address().port}`\n\n    const url = `http://${hostname}/hostname`\n    const res = await h2url.concat({ url })\n\n    t.equal(res.body, hostname)\n  })\n})\n/test/types/plugin.test-d.ts\u000eimport fastify, { FastifyInstance, FastifyPluginOptions } from '../../fastify'\nimport * as http from 'http'\nimport * as https from 'https'\nimport { expectType, expectError, expectAssignable } from 'tsd'\nimport { FastifyPluginCallback, FastifyPluginAsync } from '../../types/plugin'\nimport { FastifyError } from '@fastify/error'\n\n// FastifyPlugin & FastifyRegister\ninterface TestOptions extends FastifyPluginOptions {\n  option1: string;\n  option2: boolean;\n}\nconst testPluginOpts: FastifyPluginCallback<TestOptions> = function (instance, opts, done) { }\nconst testPluginOptsAsync: FastifyPluginAsync<TestOptions> = async function (instance, opts) { }\n\nconst testPluginOptsWithType = (instance: FastifyInstance, opts: FastifyPluginOptions, done: (error?: FastifyError) => void) => { }\nconst testPluginOptsWithTypeAsync = async (instance: FastifyInstance, opts: FastifyPluginOptions) => { }\n\nexpectError(fastify().register(testPluginOpts, {})) // error because missing required options from generic declaration\nexpectError(fastify().register(testPluginOptsAsync, {})) // error because missing required options from generic declaration\n\nexpectAssignable<FastifyInstance>(fastify().register(testPluginOpts, { option1: '', option2: true }))\nexpectAssignable<FastifyInstance>(fastify().register(testPluginOptsAsync, { option1: '', option2: true }))\n\nexpectAssignable<FastifyInstance>(fastify().register(function (instance, opts, done) { }))\nexpectAssignable<FastifyInstance>(fastify().register(function (instance, opts, done) { }, () => { }))\nexpectAssignable<FastifyInstance>(fastify().register(function (instance, opts, done) { }, { logLevel: 'info', prefix: 'foobar' }))\n\nexpectAssignable<FastifyInstance>(fastify().register(import('./dummy-plugin')))\nexpectAssignable<FastifyInstance>(fastify().register(import('./dummy-plugin'), { foo: 1 }))\n\nconst testPluginCallback: FastifyPluginCallback = function (instance, opts, done) { }\nexpectAssignable<FastifyInstance>(fastify().register(testPluginCallback, {}))\n\nconst testPluginAsync: FastifyPluginAsync = async function (instance, opts) { }\nexpectAssignable<FastifyInstance>(fastify().register(testPluginAsync, {}))\n\nexpectAssignable<FastifyInstance>(fastify().register(function (instance, opts): Promise<void> { return Promise.resolve() }))\nexpectAssignable<FastifyInstance>(fastify().register(async function (instance, opts) { }, () => { }))\nexpectAssignable<FastifyInstance>(fastify().register(async function (instance, opts) { }, { logLevel: 'info', prefix: 'foobar' }))\n\nexpectError(fastify().register(function (instance, opts, done) { }, { logLevel: '' })) // must use a valid logLevel\n\nconst httpsServer = fastify({ https: {} })\nexpectType<FastifyInstance<https.Server, http.IncomingMessage, http.ServerResponse> & PromiseLike<FastifyInstance<https.Server, http.IncomingMessage, http.ServerResponse>>>(httpsServer)\n\n// Chainable\nhttpsServer\n  .register(testPluginOpts)\n  .after((_error) => { })\n  .ready((_error) => { })\n  .close(() => { })\n\n// Thenable\nexpectAssignable<PromiseLike<undefined>>(httpsServer.after())\nexpectAssignable<PromiseLike<undefined>>(httpsServer.close())\nexpectAssignable<PromiseLike<undefined>>(httpsServer.ready())\nexpectAssignable<PromiseLike<undefined>>(httpsServer.register(testPluginOpts))\nexpectAssignable<PromiseLike<undefined>>(httpsServer.register(testPluginOptsWithType))\nexpectAssignable<PromiseLike<undefined>>(httpsServer.register(testPluginOptsWithTypeAsync))\nexpectAssignable<PromiseLike<undefined>>(httpsServer.register(testPluginOptsWithType, { prefix: '/test' }))\nexpectAssignable<PromiseLike<undefined>>(httpsServer.register(testPluginOptsWithTypeAsync, { prefix: '/test' }))\n\nasync function testAsync (): Promise<void> {\n  await httpsServer\n    .register(testPluginOpts)\n    .register(testPluginOpts)\n}\n/test/promises.test.js\r?'use strict'\n\nconst t = require('tap')\nconst test = t.test\nconst sget = require('simple-get').concat\nconst fastify = require('..')()\n\nconst opts = {\n  schema: {\n    response: {\n      '2xx': {\n        type: 'object',\n        properties: {\n          hello: {\n            type: 'string'\n          }\n        }\n      }\n    }\n  }\n}\n\nfastify.get('/return', opts, function (req, reply) {\n  const promise = new Promise((resolve, reject) => {\n    resolve({ hello: 'world' })\n  })\n  return promise\n})\n\nfastify.get('/return-error', opts, function (req, reply) {\n  const promise = new Promise((resolve, reject) => {\n    reject(new Error('some error'))\n  })\n  return promise\n})\n\nfastify.get('/double', function (req, reply) {\n  setTimeout(function () {\n    // this should not throw\n    reply.send({ hello: 'world' })\n  }, 20)\n  return Promise.resolve({ hello: '42' })\n})\n\nfastify.get('/thenable', opts, function (req, reply) {\n  setImmediate(function () {\n    reply.send({ hello: 'world' })\n  })\n  return reply\n})\n\nfastify.get('/thenable-error', opts, function (req, reply) {\n  setImmediate(function () {\n    reply.send(new Error('kaboom'))\n  })\n  return reply\n})\n\nfastify.get('/return-reply', opts, function (req, reply) {\n  return reply.send({ hello: 'world' })\n})\n\nfastify.listen({ port: 0 }, err => {\n  t.error(err)\n  t.teardown(() => { fastify.close() })\n\n  test('shorthand - sget return promise es6 get', t => {\n    t.plan(4)\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port + '/return'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(response.headers['content-length'], '' + body.length)\n      t.same(JSON.parse(body), { hello: 'world' })\n    })\n  })\n\n  test('shorthand - sget promise es6 get return error', t => {\n    t.plan(2)\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port + '/return-error'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 500)\n    })\n  })\n\n  test('sget promise double send', t => {\n    t.plan(3)\n\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port + '/double'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.same(JSON.parse(body), { hello: '42' })\n    })\n  })\n\n  test('thenable', t => {\n    t.plan(4)\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port + '/thenable'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(response.headers['content-length'], '' + body.length)\n      t.same(JSON.parse(body), { hello: 'world' })\n    })\n  })\n\n  test('thenable (error)', t => {\n    t.plan(2)\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port + '/thenable-error'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 500)\n    })\n  })\n\n  test('return-reply', t => {\n    t.plan(4)\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port + '/return-reply'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(response.headers['content-length'], '' + body.length)\n      t.same(JSON.parse(body), { hello: 'world' })\n    })\n  })\n})\n/test/schema-validation.test.jsQ\u0011'use strict'\n\nconst { test } = require('tap')\nconst Fastify = require('..')\n\nconst AJV = require('ajv')\nconst Schema = require('fluent-json-schema')\n\nconst customSchemaCompilers = {\n  body: new AJV({\n    coerceTypes: false\n  }),\n  params: new AJV({\n    coerceTypes: true\n  }),\n  querystring: new AJV({\n    coerceTypes: true\n  })\n}\n\nconst customValidatorCompiler = req => {\n  if (!req.httpPart) {\n    throw new Error('Missing httpPart')\n  }\n\n  const compiler = customSchemaCompilers[req.httpPart]\n\n  if (!compiler) {\n    throw new Error(`Missing compiler for ${req.httpPart}`)\n  }\n\n  return compiler.compile(req.schema)\n}\n\nconst schemaA = {\n  $id: 'urn:schema:foo',\n  type: 'object',\n  definitions: {\n    foo: { type: 'integer' }\n  },\n  properties: {\n    foo: { $ref: '#/definitions/foo' }\n  }\n}\nconst schemaBRefToA = {\n  $id: 'urn:schema:response',\n  type: 'object',\n  required: ['foo'],\n  properties: {\n    foo: { $ref: 'urn:schema:foo#/definitions/foo' }\n  }\n}\n\nconst schemaCRefToB = {\n  $id: 'urn:schema:request',\n  type: 'object',\n  required: ['foo'],\n  properties: {\n    foo: { $ref: 'urn:schema:response#/properties/foo' }\n  }\n}\n\nconst schemaArtist = {\n  type: 'object',\n  properties: {\n    name: { type: 'string' },\n    work: { type: 'string' }\n  },\n  required: ['name', 'work']\n}\n\ntest('Basic validation test', t => {\n  t.plan(6)\n\n  const fastify = Fastify()\n  fastify.post('/', {\n    schema: {\n      body: schemaArtist\n    }\n  }, function (req, reply) {\n    reply.code(200).send(req.body.name)\n  })\n\n  fastify.inject({\n    method: 'POST',\n    payload: {\n      name: 'michelangelo',\n      work: 'sculptor, painter, architect and poet'\n    },\n    url: '/'\n  }, (err, res) => {\n    t.error(err)\n    t.same(res.payload, 'michelangelo')\n    t.equal(res.statusCode, 200)\n  })\n\n  fastify.inject({\n    method: 'POST',\n    payload: { name: 'michelangelo' },\n    url: '/'\n  }, (err, res) => {\n    t.error(err)\n    t.same(res.json(), { statusCode: 400, error: 'Bad Request', message: \"body must have required property 'work'\" })\n    t.equal(res.statusCode, 400)\n  })\n})\n\ntest('External AJV instance', t => {\n  t.plan(4)\n\n  const fastify = Fastify()\n  const ajv = new AJV()\n  ajv.addSchema(schemaA)\n  ajv.addSchema(schemaBRefToA)\n\n  // the user must provide the schemas to fastify also\n  fastify.addSchema(schemaA)\n  fastify.addSchema(schemaBRefToA)\n\n  fastify.setValidatorCompiler(({ schema, method, url, httpPart }) => {\n    return ajv.compile(schema)\n  })\n\n  fastify.post('/', {\n    handler (req, reply) { reply.send({ foo: 1 }) },\n    schema: {\n      body: schemaCRefToB,\n      response: {\n        '2xx': ajv.getSchema('urn:schema:response').schema\n      }\n    }\n  })\n\n  fastify.inject({\n    method: 'POST',\n    url: '/',\n    payload: { foo: 42 }\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 200)\n  })\n\n  fastify.inject({\n    method: 'POST',\n    url: '/',\n    payload: { foo: 'not a number' }\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 400)\n  })\n})\n\ntest('Encapsulation', t => {\n  t.plan(19)\n\n  const fastify = Fastify()\n  const ajv = new AJV()\n  ajv.addSchema(schemaA)\n  ajv.addSchema(schemaBRefToA)\n\n  // the user must provide the schemas to fastify also\n  fastify.addSchema(schemaA)\n  fastify.addSchema(schemaBRefToA)\n\n  fastify.register((instance, opts, done) => {\n    const validator = ({ schema, method, url, httpPart }) => {\n      return ajv.compile(schema)\n    }\n    instance.setValidatorCompiler(validator)\n    instance.post('/one', {\n      handler (req, reply) { reply.send({ foo: 'one' }) },\n      schema: {\n        body: ajv.getSchema('urn:schema:response').schema\n      }\n    })\n\n    instance.register((instance, opts, done) => {\n      instance.post('/two', {\n        handler (req, reply) {\n          t.same(instance.validatorCompiler, validator)\n          reply.send({ foo: 'two' })\n        },\n        schema: {\n          body: ajv.getSchema('urn:schema:response').schema\n        }\n      })\n\n      const anotherValidator = ({ schema, method, url, httpPart }) => {\n        return () => { return true } // always valid\n      }\n      instance.post('/three', {\n        validatorCompiler: anotherValidator,\n        handler (req, reply) {\n          t.same(instance.validatorCompiler, validator, 'the route validator does not change the instance one')\n          reply.send({ foo: 'three' })\n        },\n        schema: {\n          body: ajv.getSchema('urn:schema:response').schema\n        }\n      })\n      done()\n    })\n    done()\n  })\n\n  fastify.register((instance, opts, done) => {\n    instance.post('/clean', function (req, reply) {\n      t.equal(instance.validatorCompiler, undefined)\n      reply.send({ foo: 'bar' })\n    })\n    done()\n  })\n\n  fastify.inject({\n    method: 'POST',\n    url: '/one',\n    payload: { foo: 1 }\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 200)\n    t.same(res.json(), { foo: 'one' })\n  })\n\n  fastify.inject({\n    method: 'POST',\n    url: '/one',\n    payload: { wrongFoo: 'bar' }\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 400)\n  })\n\n  fastify.inject({\n    method: 'POST',\n    url: '/two',\n    payload: { foo: 2 }\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 200)\n    t.same(res.json(), { foo: 'two' })\n  })\n\n  fastify.inject({\n    method: 'POST',\n    url: '/two',\n    payload: { wrongFoo: 'bar' }\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 400)\n  })\n\n  fastify.inject({\n    method: 'POST',\n    url: '/three',\n    payload: { wrongFoo: 'but works' }\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 200)\n    t.same(res.json(), { foo: 'three' })\n  })\n\n  fastify.inject({\n    method: 'POST',\n    url: '/clean',\n    payload: { wrongFoo: 'bar' }\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 200)\n    t.same(res.json(), { foo: 'bar' })\n  })\n})\n\ntest('Triple $ref with a simple $id', t => {\n  t.plan(6)\n\n  const fastify = Fastify()\n  const ajv = new AJV()\n  ajv.addSchema(schemaA)\n  ajv.addSchema(schemaBRefToA)\n  ajv.addSchema(schemaCRefToB)\n\n  // the user must provide the schemas to fastify also\n  fastify.addSchema(schemaA)\n  fastify.addSchema(schemaBRefToA)\n  fastify.addSchema(schemaCRefToB)\n\n  fastify.setValidatorCompiler(({ schema, method, url, httpPart }) => {\n    return ajv.compile(schema)\n  })\n\n  fastify.post('/', {\n    handler (req, reply) { reply.send({ foo: 105, bar: 'foo' }) },\n    schema: {\n      body: ajv.getSchema('urn:schema:request').schema,\n      response: {\n        '2xx': ajv.getSchema('urn:schema:response').schema\n      }\n    }\n  })\n\n  fastify.inject({\n    method: 'POST',\n    url: '/',\n    payload: { foo: 43 }\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 200)\n    t.same(res.json(), { foo: 105 })\n  })\n\n  fastify.inject({\n    method: 'POST',\n    url: '/',\n    payload: { fool: 'bar' }\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 400)\n    t.same(res.json().message, \"body must have required property 'foo'\")\n  })\n})\n\ntest('Extending schema', t => {\n  t.plan(4)\n  const fastify = Fastify()\n\n  fastify.addSchema({\n    $id: 'address.id',\n    type: 'object',\n    definitions: {\n      address: {\n        type: 'object',\n        properties: {\n          city: { type: 'string' },\n          state: { type: 'string' }\n        },\n        required: ['city', 'state']\n      }\n    }\n  })\n\n  fastify.post('/', {\n    handler (req, reply) { reply.send('works') },\n    schema: {\n      body: {\n        type: 'object',\n        properties: {\n          billingAddress: { $ref: 'address.id#/definitions/address' },\n          shippingAddress: {\n            allOf: [\n              { $ref: 'address.id#/definitions/address' },\n              {\n                type: 'object',\n                properties: { type: { enum: ['residential', 'business'] } },\n                required: ['type']\n              }\n            ]\n          }\n        }\n      }\n    }\n  })\n\n  fastify.inject({\n    method: 'POST',\n    url: '/',\n    payload: {\n      shippingAddress: {\n        city: 'Forlì',\n        state: 'FC'\n      }\n    }\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 400)\n  })\n\n  fastify.inject({\n    method: 'POST',\n    url: '/',\n    payload: {\n      shippingAddress: {\n        city: 'Forlì',\n        state: 'FC',\n        type: 'business'\n      }\n    }\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 200)\n  })\n})\n\ntest('Should work with nested ids', t => {\n  t.plan(6)\n  const fastify = Fastify()\n\n  fastify.addSchema({\n    $id: 'test',\n    type: 'object',\n    properties: {\n      id: { type: 'number' }\n    }\n  })\n\n  fastify.addSchema({\n    $id: 'greetings',\n    type: 'string'\n  })\n\n  fastify.post('/:id', {\n    handler (req, reply) { reply.send(typeof req.params.id) },\n    schema: {\n      params: { $ref: 'test#' },\n      body: {\n        type: 'object',\n        properties: {\n          hello: { $ref: 'greetings#' }\n        }\n      }\n    }\n  })\n\n  fastify.inject({\n    method: 'POST',\n    url: '/123',\n    payload: {\n      hello: 'world'\n    }\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 200)\n    t.equal(res.payload, 'number')\n  })\n\n  fastify.inject({\n    method: 'POST',\n    url: '/abc',\n    payload: {\n      hello: 'world'\n    }\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 400)\n    t.equal(res.json().message, 'params/id must be number')\n  })\n})\n\ntest('Use the same schema across multiple routes', t => {\n  t.plan(8)\n  const fastify = Fastify()\n\n  fastify.addSchema({\n    $id: 'test',\n    type: 'object',\n    properties: {\n      id: { type: 'number' }\n    }\n  })\n\n  fastify.get('/first/:id', {\n    handler (req, reply) { reply.send(typeof req.params.id) },\n    schema: {\n      params: { $ref: 'test#' }\n    }\n  })\n\n  fastify.get('/second/:id', {\n    handler (req, reply) { reply.send(typeof req.params.id) },\n    schema: {\n      params: { $ref: 'test#' }\n    }\n  })\n\n  ;[\n    '/first/123',\n    '/second/123'\n  ].forEach(url => {\n    fastify.inject({\n      url,\n      method: 'GET'\n    }, (err, res) => {\n      t.error(err)\n      t.equal(res.payload, 'number')\n    })\n  })\n\n  ;[\n    '/first/abc',\n    '/second/abc'\n  ].forEach(url => {\n    fastify.inject({\n      url,\n      method: 'GET'\n    }, (err, res) => {\n      t.error(err)\n      t.equal(res.statusCode, 400)\n    })\n  })\n})\n\ntest('JSON Schema validation keywords', t => {\n  t.plan(6)\n  const fastify = Fastify()\n\n  fastify.addSchema({\n    $id: 'test',\n    type: 'object',\n    properties: {\n      ip: {\n        type: 'string',\n        format: 'ipv4'\n      }\n    }\n  })\n\n  fastify.get('/:ip', {\n    handler (req, reply) { reply.send(typeof req.params.ip) },\n    schema: {\n      params: { $ref: 'test#' }\n    }\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/127.0.0.1'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 200)\n    t.equal(res.payload, 'string')\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/localhost'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 400)\n    t.same(res.json(), {\n      statusCode: 400,\n      error: 'Bad Request',\n      message: 'params/ip must match format \"ipv4\"'\n    })\n  })\n})\n\ntest('Nested id calls', t => {\n  t.plan(6)\n  const fastify = Fastify()\n\n  fastify.addSchema({\n    $id: 'test',\n    type: 'object',\n    properties: {\n      ip: {\n        type: 'string',\n        format: 'ipv4'\n      }\n    }\n  })\n\n  fastify.addSchema({\n    $id: 'hello',\n    type: 'object',\n    properties: {\n      host: { $ref: 'test#' }\n    }\n  })\n\n  fastify.post('/', {\n    handler (req, reply) { reply.send(typeof req.body.host.ip) },\n    schema: {\n      body: { $ref: 'hello#' }\n    }\n  })\n\n  fastify.inject({\n    method: 'POST',\n    url: '/',\n    payload: { host: { ip: '127.0.0.1' } }\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 200)\n    t.equal(res.payload, 'string')\n  })\n\n  fastify.inject({\n    method: 'POST',\n    url: '/',\n    payload: { host: { ip: 'localhost' } }\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 400)\n    t.same(res.json(), {\n      error: 'Bad Request',\n      message: 'body/host/ip must match format \"ipv4\"',\n      statusCode: 400\n    })\n  })\n})\n\ntest('Use the same schema id in different places', t => {\n  t.plan(2)\n  const fastify = Fastify()\n\n  fastify.addSchema({\n    $id: 'test',\n    type: 'object',\n    properties: {\n      id: { type: 'number' }\n    }\n  })\n\n  fastify.post('/', {\n    handler (req, reply) { reply.send({ id: req.body.id / 2 }) },\n    schema: {\n      body: { $ref: 'test#' },\n      response: {\n        200: { $ref: 'test#' }\n      }\n    }\n  })\n\n  fastify.inject({\n    method: 'POST',\n    url: '/',\n    payload: { id: 42 }\n  }, (err, res) => {\n    t.error(err)\n    t.same(res.json(), { id: 21 })\n  })\n})\n\ntest('Use shared schema and $ref with $id ($ref to $id)', t => {\n  t.plan(5)\n  const fastify = Fastify()\n\n  fastify.addSchema({\n    $id: 'http://foo/test',\n    type: 'object',\n    properties: {\n      id: { type: 'number' }\n    }\n  })\n\n  const body = {\n    $id: 'http://foo/user',\n    $schema: 'http://json-schema.org/draft-07/schema#',\n    type: 'object',\n    definitions: {\n      address: {\n        $id: '#address',\n        type: 'object',\n        properties: {\n          city: { type: 'string' }\n        }\n      }\n    },\n    required: ['address'],\n    properties: {\n      test: { $ref: 'http://foo/test#' }, // to external\n      address: { $ref: '#address' } // to local\n    }\n  }\n\n  fastify.post('/', {\n    handler (req, reply) { reply.send(req.body.test) },\n    schema: {\n      body,\n      response: {\n        200: { $ref: 'http://foo/test#' }\n      }\n    }\n  })\n\n  const id = Date.now()\n  fastify.inject({\n    method: 'POST',\n    url: '/',\n    payload: {\n      address: { city: 'New Node' },\n      test: { id }\n    }\n  }, (err, res) => {\n    t.error(err)\n    t.same(res.json(), { id })\n  })\n\n  fastify.inject({\n    method: 'POST',\n    url: '/',\n    payload: { test: { id } }\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 400)\n    t.same(res.json(), {\n      error: 'Bad Request',\n      message: \"body must have required property 'address'\",\n      statusCode: 400\n    })\n  })\n})\n\ntest('Use items with $ref', t => {\n  t.plan(4)\n  const fastify = Fastify()\n\n  fastify.addSchema({\n    $id: 'http://example.com/ref-to-external-validator.json',\n    type: 'object',\n    properties: {\n      hello: { type: 'string' }\n    }\n  })\n\n  const body = {\n    type: 'array',\n    items: { $ref: 'http://example.com/ref-to-external-validator.json#' }\n  }\n\n  fastify.post('/', {\n    schema: { body },\n    handler: (_, r) => { r.send('ok') }\n  })\n\n  fastify.inject({\n    method: 'POST',\n    url: '/',\n    payload: [{ hello: 'world' }]\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.payload, 'ok')\n  })\n\n  fastify.inject({\n    method: 'POST',\n    url: '/',\n    payload: { hello: 'world' }\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 400)\n  })\n})\n\ntest('Use $ref to /definitions', t => {\n  t.plan(6)\n  const fastify = Fastify()\n\n  fastify.addSchema({\n    $id: 'test',\n    type: 'object',\n    properties: {\n      id: { type: 'number' }\n    }\n  })\n\n  const body = {\n    type: 'object',\n    definitions: {\n      address: {\n        $id: '#otherId',\n        type: 'object',\n        properties: {\n          city: { type: 'string' }\n        }\n      }\n    },\n    properties: {\n      test: { $ref: 'test#' },\n      address: { $ref: '#/definitions/address' }\n    },\n    required: ['address', 'test']\n  }\n\n  fastify.post('/', {\n    schema: {\n      body,\n      response: {\n        200: body\n      }\n    },\n    handler: (req, reply) => {\n      req.body.removeThis = 'it should not be serialized'\n      reply.send(req.body)\n    }\n  })\n\n  const payload = {\n    address: { city: 'New Node' },\n    test: { id: Date.now() }\n  }\n  fastify.inject({\n    method: 'POST',\n    url: '/',\n    payload\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 200)\n    t.same(res.json(), payload)\n  })\n\n  fastify.inject({\n    method: 'POST',\n    url: '/',\n    payload: {\n      address: { city: 'New Node' },\n      test: { id: 'wrong' }\n    }\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 400)\n    t.same(res.json(), {\n      error: 'Bad Request',\n      message: 'body/test/id must be number',\n      statusCode: 400\n    })\n  })\n})\n\ntest('Custom AJV settings - pt1', t => {\n  t.plan(4)\n  const fastify = Fastify()\n\n  fastify.post('/', {\n    schema: {\n      body: { num: { type: 'integer' } }\n    },\n    handler: (req, reply) => {\n      t.equal(req.body.num, 12)\n      reply.send(req.body)\n    }\n  })\n\n  fastify.inject({\n    method: 'POST',\n    url: '/',\n    payload: {\n      num: '12'\n    }\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 200)\n    t.same(res.json(), { num: 12 })\n  })\n})\n\ntest('Custom AJV settings - pt2', t => {\n  t.plan(2)\n  const fastify = Fastify({\n    ajv: {\n      customOptions: {\n        coerceTypes: false\n      }\n    }\n  })\n\n  fastify.post('/', {\n    schema: {\n      body: { num: { type: 'integer' } }\n    },\n    handler: (req, reply) => {\n      t.fail('the handler is not called because the \"12\" is not coerced to number')\n    }\n  })\n\n  fastify.inject({\n    method: 'POST',\n    url: '/',\n    payload: {\n      num: '12'\n    }\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 400)\n  })\n})\n\ntest('Custom AJV settings on different parameters - pt1', t => {\n  t.plan(2)\n  const fastify = Fastify()\n\n  fastify.setValidatorCompiler(customValidatorCompiler)\n\n  fastify.post('/api/:id', {\n    schema: {\n      querystring: { id: { type: 'integer' } },\n      body: {\n        type: 'object',\n        properties: {\n          num: { type: 'number' }\n        },\n        required: ['num']\n      }\n    },\n    handler: (req, reply) => {\n      t.fail('the handler is not called because the \"12\" is not coerced to number')\n    }\n  })\n\n  fastify.inject({\n    method: 'POST',\n    url: '/api/42',\n    payload: {\n      num: '12'\n    }\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 400)\n  })\n})\n\ntest('Custom AJV settings on different parameters - pt2', t => {\n  t.plan(4)\n  const fastify = Fastify()\n\n  fastify.setValidatorCompiler(customValidatorCompiler)\n\n  fastify.post('/api/:id', {\n    schema: {\n      params: {\n        type: 'object',\n        properties: {\n          id: { type: 'number' }\n        },\n        required: ['id']\n      },\n      body: {\n        type: 'object',\n        properties: {\n          num: { type: 'number' }\n        },\n        required: ['num']\n      }\n    },\n    handler: (req, reply) => {\n      t.same(typeof req.params.id, 'number')\n      t.same(typeof req.body.num, 'number')\n      t.same(req.params.id, 42)\n      t.same(req.body.num, 12)\n    }\n  })\n\n  fastify.inject({\n    method: 'POST',\n    url: '/api/42',\n    payload: {\n      num: 12\n    }\n  })\n})\n\ntest(\"The same $id in route's schema must not overwrite others\", t => {\n  t.plan(4)\n  const fastify = Fastify()\n\n  const UserSchema = Schema.object()\n    .id('http://mydomain.com/user')\n    .title('User schema')\n    .description('Contains all user fields')\n    .prop('id', Schema.integer())\n    .prop('username', Schema.string().minLength(4))\n    .prop('firstName', Schema.string().minLength(1))\n    .prop('lastName', Schema.string().minLength(1))\n    .prop('fullName', Schema.string().minLength(1))\n    .prop('email', Schema.string())\n    .prop('password', Schema.string().minLength(6))\n    .prop('bio', Schema.string())\n\n  const userCreateSchema = UserSchema.only([\n    'username',\n    'firstName',\n    'lastName',\n    'email',\n    'bio',\n    'password',\n    'password_confirm'\n  ])\n    .required([\n      'username',\n      'firstName',\n      'lastName',\n      'email',\n      'bio',\n      'password'\n    ])\n\n  const userPatchSchema = UserSchema.only([\n    'firstName',\n    'lastName',\n    'bio'\n  ])\n\n  fastify\n    .patch('/user/:id', {\n      schema: { body: userPatchSchema },\n      handler: () => { return 'ok' }\n    })\n    .post('/user', {\n      schema: { body: userCreateSchema },\n      handler: () => { return 'ok' }\n    })\n\n  fastify.inject({\n    method: 'POST',\n    url: '/user',\n    body: {}\n  }, (err, res) => {\n    t.error(err)\n    t.same(res.json().message, \"body must have required property 'username'\")\n  })\n\n  fastify.inject({\n    url: '/user/1',\n    method: 'PATCH',\n    body: {}\n  }, (err, res) => {\n    t.error(err)\n    t.same(res.payload, 'ok')\n  })\n})\n\ntest('Custom validator compiler should not mutate schema', async t => {\n  t.plan(2)\n  class Headers {}\n  const fastify = Fastify()\n\n  fastify.setValidatorCompiler(({ schema, method, url, httpPart }) => {\n    t.type(schema, Headers)\n    return () => {}\n  })\n\n  fastify.get('/', {\n    schema: {\n      headers: new Headers()\n    }\n  }, () => {})\n\n  await fastify.ready()\n})\n/test/case-insensitive.test.js\t'use strict'\n\nconst t = require('tap')\nconst test = t.test\nconst Fastify = require('..')\nconst sget = require('simple-get').concat\n\ntest('case insensitive', t => {\n  t.plan(4)\n\n  const fastify = Fastify({\n    caseSensitive: false\n  })\n  t.teardown(fastify.close.bind(fastify))\n\n  fastify.get('/foo', (req, reply) => {\n    reply.send({ hello: 'world' })\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port + '/FOO'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.same(JSON.parse(body), {\n        hello: 'world'\n      })\n    })\n  })\n})\n\ntest('case insensitive inject', t => {\n  t.plan(4)\n\n  const fastify = Fastify({\n    caseSensitive: false\n  })\n  t.teardown(fastify.close.bind(fastify))\n\n  fastify.get('/foo', (req, reply) => {\n    reply.send({ hello: 'world' })\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n\n    fastify.inject({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port + '/FOO'\n    }, (err, response) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.same(JSON.parse(response.payload), {\n        hello: 'world'\n      })\n    })\n  })\n})\n\ntest('case insensitive (parametric)', t => {\n  t.plan(5)\n\n  const fastify = Fastify({\n    caseSensitive: false\n  })\n  t.teardown(fastify.close.bind(fastify))\n\n  fastify.get('/foo/:param', (req, reply) => {\n    t.equal(req.params.param, 'bAr')\n    reply.send({ hello: 'world' })\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port + '/FoO/bAr'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.same(JSON.parse(body), {\n        hello: 'world'\n      })\n    })\n  })\n})\n\ntest('case insensitive (wildcard)', t => {\n  t.plan(5)\n\n  const fastify = Fastify({\n    caseSensitive: false\n  })\n  t.teardown(fastify.close.bind(fastify))\n\n  fastify.get('/foo/*', (req, reply) => {\n    t.equal(req.params['*'], 'bAr/baZ')\n    reply.send({ hello: 'world' })\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port + '/FoO/bAr/baZ'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.same(JSON.parse(body), {\n        hello: 'world'\n      })\n    })\n  })\n})\n/test/types/schema.test-d.ts\bimport { expectAssignable } from 'tsd'\nimport fastify, { FastifyInstance, FastifySchema } from '../../fastify'\nimport Ajv from 'ajv'\nimport { StandaloneValidator } from '@fastify/ajv-compiler'\nimport { StandaloneSerializer } from '@fastify/fast-json-stringify-compiler'\n\nconst server = fastify()\n\nexpectAssignable<FastifyInstance>(server.get(\n  '/full-schema',\n  {\n    schema: {\n      body: { type: 'null' },\n      querystring: { type: 'null' },\n      params: { type: 'null' },\n      headers: { type: 'null' },\n      response: { type: 'null' }\n    }\n  },\n  () => { }\n))\n\nexpectAssignable<FastifyInstance>(server.get(\n  '/empty-schema',\n  {\n    schema: {}\n  },\n  () => { }\n))\n\nexpectAssignable<FastifyInstance>(server.get(\n  '/no-schema',\n  {},\n  () => { }\n))\n\nexpectAssignable<FastifyInstance>(server.setValidatorCompiler(({ schema }) => {\n  return new Ajv().compile(schema)\n}))\n\nexpectAssignable<FastifyInstance>(server.setSerializerCompiler(() => {\n  return data => JSON.stringify(data)\n}))\n\nexpectAssignable<FastifyInstance>(server.post('/test', {\n  validatorCompiler: ({ schema }) => {\n    return data => {\n      if (!data || data.constructor !== Object) {\n        return { error: new Error('value is not an object') }\n      }\n      return { value: data }\n    }\n  }\n}, async req => req.body))\n\nexpectAssignable<FastifyInstance>(server.setValidatorCompiler<FastifySchema & { validate: Record<string, unknown> }>(\n  function ({ schema }) {\n    return new Ajv().compile(schema)\n  }\n))\n\nexpectAssignable<FastifyInstance>(server.setSerializerCompiler<FastifySchema & { validate: string }>(\n  () => data => JSON.stringify(data)\n))\n\n// https://github.com/fastify/ajv-compiler/issues/95\n{\n  const factory = StandaloneValidator({\n    readMode: false,\n    storeFunction (routeOpts, schemaValidationCode) { }\n  })\n\n  const app = fastify({\n    jsonShorthand: false,\n    schemaController: {\n      compilersFactory: {\n        buildValidator: factory\n      }\n    }\n  })\n}\n\n{\n  const factory = StandaloneSerializer({\n    readMode: false,\n    storeFunction (routeOpts, schemaValidationCode) { }\n  })\n\n  const app = fastify({\n    jsonShorthand: false,\n    schemaController: {\n      compilersFactory: {\n        buildSerializer: factory\n      }\n    }\n  })\n}\n/docs/Reference/Errors.md6<h1 align=\"center\">Fastify</h1>\n\n## Errors\n<a id=\"errors\"></a>\n\n### Error Handling In Node.js\n<a id=\"error-handling\"></a>\n\n#### Uncaught Errors\nIn Node.js, uncaught errors are likely to cause memory leaks, file descriptor\nleaks, and other major production issues.\n[Domains](https://nodejs.org/en/docs/guides/domain-postmortem/) were a failed\nattempt to fix this.\n\nGiven that it is not possible to process all uncaught errors sensibly, the best\nway to deal with them is to\n[crash](https://nodejs.org/api/process.html#process_warning_using_uncaughtexception_correctly).\n\n#### Catching Errors In Promises\nIf you are using promises, you should attach a `.catch()` handler synchronously.\n\n### Errors In Fastify\nFastify follows an all-or-nothing approach and aims to be lean and optimal as\nmuch as possible. The developer is responsible for making sure that the errors\nare handled properly.\n\n#### Errors In Input Data\nMost errors are a result of unexpected input data, so we recommend [validating\nyour input data against a JSON schema](./Validation-and-Serialization.md).\n\n#### Catching Uncaught Errors In Fastify\nFastify tries to catch as many uncaught errors as it can without hindering\nperformance. This includes:\n\n1. synchronous routes, e.g. `app.get('/', () => { throw new Error('kaboom') })`\n2. `async` routes, e.g. `app.get('/', async () => { throw new Error('kaboom')\n   })`\n\nThe error in both cases will be caught safely and routed to Fastify's default\nerror handler for a generic `500 Internal Server Error` response.\n\nTo customize this behavior you should use\n[`setErrorHandler`](./Server.md#seterrorhandler).\n\n### Errors In Fastify Lifecycle Hooks And A Custom Error Handler\n\nFrom the [Hooks documentation](./Hooks.md#manage-errors-from-a-hook):\n> If you get an error during the execution of your hook, just pass it to\n> `done()` and Fastify will automatically close the request and send the\n> appropriate error code to the user.\n\nWhen a custom error handler has been defined through\n[`setErrorHandler`](./Server.md#seterrorhandler), the custom error handler will\nreceive the error passed to the `done()` callback (or through other supported\nautomatic error handling mechanisms). If `setErrorHandler` has been used\nmultiple times to define multiple handlers, the error will be routed to the most\nprecedent handler defined within the error [encapsulation\ncontext](./Encapsulation.md). Error handlers are fully encapsulated, so a\n`setErrorHandler` call within a plugin will limit the error handler to that\nplugin's context.\n\nThe root error handler is Fastify's generic error handler. This error handler\nwill use the headers and status code in the `Error` object, if they exist. The\nheaders and status code will not be automatically set if a custom error handler\nis provided.\n\nSome things to consider in your custom error handler:\n\n- you can `reply.send(data)`, which will behave as it would in [regular route\n  handlers](./Reply.md#senddata)\n  - objects are serialized, triggering the `preSerialization` lifecycle hook if\n    you have one defined\n  - strings, buffers, and streams are sent to the client, with appropriate\n    headers (no serialization)\n\n- You can throw a new error in your custom error handler - errors (new error or\n\tthe received error parameter re-thrown) - will call the parent `errorHandler`.\n  - `onError` hook will be triggered once only for the first error being thrown.\n  - an error will not be triggered twice from a lifecycle hook - Fastify\n    internally monitors the error invocation to avoid infinite loops for errors\n    thrown in the reply phases of the lifecycle. (those after the route handler)\n\n### Fastify Error Codes\n<a id=\"fastify-error-codes\"></a>\n\nYou can access `errorCodes` for mapping:\n```js\n// ESM\nimport { errorCodes } from 'fastify'\n\n// CommonJs\nconst errorCodes = require('fastify').errorCodes\n```\n\nFor example:\n```js\nconst Fastify = require('./fastify')\n\n// Instantiate the framework\nconst fastify = Fastify({\n  logger: true\n})\n\n// Declare a route\nfastify.get('/', function (request, reply) {\n  reply.code('bad status code').send({ hello: 'world' })\n})\n\nfastify.setErrorHandler(function (error, request, reply) {\n  if (error instanceof Fastify.errorCodes.FST_ERR_BAD_STATUS_CODE) {\n    // Log error\n    this.log.error(error)\n    // Send error response\n    reply.status(500).send({ ok: false })\n  } else {\n    // fastify will use parent error handler to handle this\n    reply.send(error)\n  }\n})\n\n// Run the server!\nfastify.listen({ port: 3000 }, function (err, address) {\n  if (err) {\n    fastify.log.error(err)\n    process.exit(1)\n  }\n  // Server is now listening on ${address}\n})\n```\n\n#### FST_ERR_NOT_FOUND\n<a id=\"FST_ERR_NOT_FOUND\"></a>\n\n404 Not Found.\n\n#### FST_ERR_OPTIONS_NOT_OBJ\n<a id=\"FST_ERR_OPTIONS_NOT_OBJ\"></a>\n\nFastify options must be an object.\n\n#### FST_ERR_QSP_NOT_FN\n<a id=\"FST_ERR_QSP_NOT_FN\"></a>\n\nQueryStringParser option should be a function.\n\n#### FST_ERR_SCHEMA_CONTROLLER_BUCKET_OPT_NOT_FN\n<a id=\"FST_ERR_SCHEMA_CONTROLLER_BUCKET_OPT_NOT_FN\"></a>\n\nSchemaController.bucket option should be a function.\n\n#### FST_ERR_SCHEMA_ERROR_FORMATTER_NOT_FN\n<a id=\"FST_ERR_SCHEMA_ERROR_FORMATTER_NOT_FN\"></a>\n\nSchemaErrorFormatter option should be a non async function.\n\n#### FST_ERR_AJV_CUSTOM_OPTIONS_OPT_NOT_OBJ\n<a id=\"FST_ERR_AJV_CUSTOM_OPTIONS_OPT_NOT_OBJ\"></a>\n\najv.customOptions option should be an object.\n\n#### FST_ERR_AJV_CUSTOM_OPTIONS_OPT_NOT_ARR\n<a id=\"FST_ERR_AJV_CUSTOM_OPTIONS_OPT_NOT_ARR\"></a>\n\najv.plugins option should be an array.\n\n#### FST_ERR_VERSION_CONSTRAINT_NOT_STR\n<a id=\"FST_ERR_VERSION_CONSTRAINT_NOT_STR\"></a>\n\nVersion constraint should be a string.\n\n<a name=\"FST_ERR_CTP_ALREADY_PRESENT\"></a>\n\n#### FST_ERR_CTP_ALREADY_PRESENT\n<a id=\"FST_ERR_CTP_ALREADY_PRESENT\"></a>\n\nThe parser for this content type was already registered.\n\n#### FST_ERR_CTP_INVALID_TYPE\n<a id=\"FST_ERR_CTP_INVALID_TYPE\"></a>\n\nThe `Content-Type` should be a string.\n\n#### FST_ERR_CTP_EMPTY_TYPE\n<a id=\"FST_ERR_CTP_EMPTY_TYPE\"></a>\n\nThe content type cannot be an empty string.\n\n#### FST_ERR_CTP_INVALID_HANDLER\n<a id=\"FST_ERR_CTP_INVALID_HANDLER\"></a>\n\nAn invalid handler was passed for the content type.\n\n#### FST_ERR_CTP_INVALID_PARSE_TYPE\n<a id=\"FST_ERR_CTP_INVALID_PARSE_TYPE\"></a>\n\nThe provided parse type is not supported. Accepted values are `string` or\n`buffer`.\n\n#### FST_ERR_CTP_BODY_TOO_LARGE\n<a id=\"FST_ERR_CTP_BODY_TOO_LARGE\"></a>\n\nThe request body is larger than the provided limit.\n\nThis setting can be defined in the Fastify server instance:\n[`bodyLimit`](./Server.md#bodylimit)\n\n#### FST_ERR_CTP_INVALID_MEDIA_TYPE\n<a id=\"FST_ERR_CTP_INVALID_MEDIA_TYPE\"></a>\n\nThe received media type is not supported (i.e. there is no suitable\n`Content-Type` parser for it).\n\n#### FST_ERR_CTP_INVALID_CONTENT_LENGTH\n<a id=\"FST_ERR_CTP_INVALID_CONTENT_LENGTH\"></a>\n\nRequest body size did not match `Content-Length`.\n\n#### FST_ERR_CTP_EMPTY_JSON_BODY\n<a id=\"FST_ERR_CTP_EMPTY_JSON_BODY\"></a>\n\nBody cannot be empty when content-type is set to `application/json`.\n\n#### FST_ERR_CTP_INSTANCE_ALREADY_STARTED\n<a id=\"FST_ERR_CTP_INSTANCE_ALREADY_STARTED\"></a>\n\nFastify is already started.\n\n#### FST_ERR_INSTANCE_ALREADY_LISTENING\n<a id=\"FST_ERR_INSTANCE_ALREADY_LISTENING\"></a>\n\nFastify instance is already listening.\n\n#### FST_ERR_DEC_ALREADY_PRESENT\n<a id=\"FST_ERR_DEC_ALREADY_PRESENT\"></a>\n\nA decorator with the same name is already registered.\n\n#### FST_ERR_DEC_DEPENDENCY_INVALID_TYPE\n<a id=\"FST_ERR_DEC_DEPENDENCY_INVALID_TYPE\"></a>\n\nThe dependencies of decorator must be of type `Array`.\n\n#### FST_ERR_DEC_MISSING_DEPENDENCY\n<a id=\"FST_ERR_DEC_MISSING_DEPENDENCY\"></a>\n\nThe decorator cannot be registered due to a missing dependency.\n\n#### FST_ERR_DEC_AFTER_START\n<a id=\"FST_ERR_DEC_AFTER_START\"></a>\n\nThe decorator cannot be added after start.\n\n#### FST_ERR_HOOK_INVALID_TYPE\n<a id=\"FST_ERR_HOOK_INVALID_TYPE\"></a>\n\nThe hook name must be a string.\n\n#### FST_ERR_HOOK_INVALID_HANDLER\n<a id=\"FST_ERR_HOOK_INVALID_HANDLER\"></a>\n\nThe hook callback must be a function.\n\n#### FST_ERR_HOOK_NOT_SUPPORTED\n<a id=\"FST_ERR_HOOK_NOT_SUPPORTED\"></a>\n\nThe hook is not supported.\n\n#### FST_ERR_MISSING_MIDDLEWARE\n<a id=\"FST_ERR_MISSING_MIDDLEWARE\"></a>\n\nYou must register a plugin for handling middlewares,\nvisit [`Middleware`](./Middleware.md) for more info.\n\n<a name=\"FST_ERR_HOOK_TIMEOUT\"></a>\n#### FST_ERR_HOOK_TIMEOUT\n\nA callback for a hook timed out\n\n#### FST_ERR_LOG_INVALID_DESTINATION\n<a id=\"FST_ERR_LOG_INVALID_DESTINATION\"></a>\n\nThe logger accepts either a `'stream'` or a `'file'` as the destination.\n\n#### FST_ERR_REP_INVALID_PAYLOAD_TYPE\n<a id=\"FST_ERR_REP_INVALID_PAYLOAD_TYPE\"></a>\n\nReply payload can be either a `string` or a `Buffer`.\n\n#### FST_ERR_REP_ALREADY_SENT\n<a id=\"FST_ERR_REP_ALREADY_SENT\"></a>\n\nA response was already sent.\n\n#### FST_ERR_REP_SENT_VALUE\n<a id=\"FST_ERR_REP_SENT_VALUE\"></a>\n\nThe only possible value for `reply.sent` is `true`.\n\n#### FST_ERR_SEND_INSIDE_ONERR\n<a id=\"FST_ERR_SEND_INSIDE_ONERR\"></a>\n\nYou cannot use `send` inside the `onError` hook.\n\n#### FST_ERR_SEND_UNDEFINED_ERR\n<a id=\"FST_ERR_SEND_UNDEFINED_ERR\"></a>\n\nUndefined error has occurred.\n\n#### FST_ERR_BAD_STATUS_CODE\n<a id=\"FST_ERR_BAD_STATUS_CODE\"></a>\n\nCalled `reply` with an invalid status code.\n\n#### FST_ERR_BAD_TRAILER_NAME\n<a id=\"FST_ERR_BAD_TRAILER_NAME\"></a>\n\nCalled `reply.trailer` with an invalid header name.\n\n#### FST_ERR_BAD_TRAILER_VALUE\n<a id=\"FST_ERR_BAD_TRAILER_VALUE\"></a>\n\nCalled `reply.trailer` with an invalid type. Expected a function.\n\n#### FST_ERR_MISSING_SERIALIZATION_FN\n<a id=\"FST_ERR_MISSING_SERIALIZATION_FN\"></a>\n\nMissing serialization function.\n\n#### FST_ERR_REQ_INVALID_VALIDATION_INVOCATION\n<a id=\"FST_ERR_REQ_INVALID_VALIDATION_INVOCATION\"></a>\n\nInvalid validation invocation. Missing validation function for\nHTTP part nor schema provided.\n\n#### FST_ERR_SCH_MISSING_ID\n<a id=\"FST_ERR_SCH_MISSING_ID\"></a>\n\nThe schema provided does not have `$id` property.\n\n#### FST_ERR_SCH_ALREADY_PRESENT\n<a id=\"FST_ERR_SCH_ALREADY_PRESENT\"></a>\n\nA schema with the same `$id` already exists.\n\n#### FST_ERR_SCH_DUPLICATE\n<a id=\"FST_ERR_SCH_DUPLICATE\"></a>\n\nSchema with the same `$id` already present!\n\n#### FST_ERR_SCH_VALIDATION_BUILD\n<a id=\"FST_ERR_SCH_VALIDATION_BUILD\"></a>\n\nThe JSON schema provided for validation to a route is not valid.\n\n#### FST_ERR_SCH_SERIALIZATION_BUILD\n<a id=\"FST_ERR_SCH_SERIALIZATION_BUILD\"></a>\n\nThe JSON schema provided for serialization of a route response is not valid.\n\n#### FST_ERR_SCH_RESPONSE_SCHEMA_NOT_NESTED_2XX\n<a id=\"FST_ERR_SCH_RESPONSE_SCHEMA_NOT_NESTED_2XX\"></a>\n\nResponse schemas should be nested under a valid status code (2XX).\n\n#### FST_ERR_HTTP2_INVALID_VERSION\n<a id=\"FST_ERR_HTTP2_INVALID_VERSION\"></a>\n\nHTTP2 is available only from node >= 8.8.1.\n\n#### FST_ERR_INIT_OPTS_INVALID\n<a id=\"FST_ERR_INIT_OPTS_INVALID\"></a>\n\nInvalid initialization options.\n\n#### FST_ERR_FORCE_CLOSE_CONNECTIONS_IDLE_NOT_AVAILABLE\n<a id=\"FST_ERR_FORCE_CLOSE_CONNECTIONS_IDLE_NOT_AVAILABLE\"></a>\n\nCannot set forceCloseConnections to `idle` as your HTTP server\ndoes not support `closeIdleConnections` method.\n\n<a name=\"FST_ERR_DUPLICATED_ROUTE\"></a>\n#### FST_ERR_DUPLICATED_ROUTE\n\nThe HTTP method already has a registered controller for that URL\n\n#### FST_ERR_BAD_URL\n<a id=\"FST_ERR_BAD_URL\"></a>\n\nThe router received an invalid url.\n\n### FST_ERR_ASYNC_CONSTRAINT\n<a id=\"FST_ERR_ASYNC_CONSTRAINT\"></a>\n\nThe router received an error when using asynchronous constraints.\n\n#### FST_ERR_DEFAULT_ROUTE_INVALID_TYPE\n<a id=\"FST_ERR_DEFAULT_ROUTE_INVALID_TYPE\"></a>\n\nThe `defaultRoute` type should be a function.\n\n#### FST_ERR_INVALID_URL\n<a id=\"FST_ERR_INVALID_URL\"></a>\n\nURL must be a string.\n\n#### FST_ERR_ROUTE_OPTIONS_NOT_OBJ\n<a id=\"FST_ERR_ROUTE_OPTIONS_NOT_OBJ\"></a>\n\nOptions for the route must be an object.\n\n#### FST_ERR_ROUTE_DUPLICATED_HANDLER\n<a id=\"FST_ERR_ROUTE_DUPLICATED_HANDLER\"></a>\n\nDuplicate handler for the route is not allowed.\n\n#### FST_ERR_ROUTE_HANDLER_NOT_FN\n<a id=\"FST_ERR_ROUTE_HANDLER_NOT_FN\"></a>\n\nHandler for the route must be a function.\n\n#### FST_ERR_ROUTE_MISSING_HANDLER\n<a id=\"FST_ERR_ROUTE_MISSING_HANDLER\"></a>\n\nMissing handler function for the route.\n\n#### FST_ERR_ROUTE_METHOD_NOT_SUPPORTED\n<a id=\"FST_ERR_ROUTE_METHOD_NOT_SUPPORTED\"></a>\n\nMethod is not supported for the route.\n\n#### FST_ERR_ROUTE_BODY_VALIDATION_SCHEMA_NOT_SUPPORTED\n<a id=\"FST_ERR_ROUTE_BODY_VALIDATION_SCHEMA_NOT_SUPPORTED\"></a>\n\nBody validation schema route is not supported.\n\n#### FST_ERR_ROUTE_BODY_LIMIT_OPTION_NOT_INT\n<a id=\"FST_ERR_ROUTE_BODY_LIMIT_OPTION_NOT_INT\"></a>\n\nBodyLimit option must be an integer.\n\n#### FST_ERR_ROUTE_REWRITE_NOT_STR\n<a id=\"FST_ERR_ROUTE_REWRITE_NOT_STR\"></a>\n\nRewrite url needs to be of type \"string\".\n\n#### FST_ERR_REOPENED_CLOSE_SERVER\n<a id=\"FST_ERR_REOPENED_CLOSE_SERVER\"></a>\n\nFastify has already been closed and cannot be reopened.\n\n#### FST_ERR_REOPENED_SERVER\n<a id=\"FST_ERR_REOPENED_SERVER\"></a>\n\nFastify is already listening.\n\n#### FST_ERR_PLUGIN_VERSION_MISMATCH\n<a id=\"FST_ERR_PLUGIN_VERSION_MISMATCH\"></a>\n\nInstalled Fastify plugin mismatched expected version.\n\n<a name=\"FST_ERR_PLUGIN_CALLBACK_NOT_FN\"></a>\n\n#### FST_ERR_PLUGIN_CALLBACK_NOT_FN\n\nCallback for a hook is not a function (mapped directly from `avvio`)\n\n<a name=\"FST_ERR_PLUGIN_NOT_VALID\"></a>\n\n#### FST_ERR_PLUGIN_NOT_VALID\n\nPlugin must be a function or a promise.\n\n<a name=\"FST_ERR_ROOT_PLG_BOOTED\"></a>\n\n#### FST_ERR_ROOT_PLG_BOOTED\n\nRoot plugin has already booted (mapped directly from `avvio`)\n\n<a name=\"FST_ERR_PARENT_PLUGIN_BOOTED\"></a>\n\n#### FST_ERR_PARENT_PLUGIN_BOOTED\n\nImpossible to load plugin because the parent (mapped directly from `avvio`)\n\n<a name=\"FST_ERR_PLUGIN_TIMEOUT\"></a>\n\n#### FST_ERR_PLUGIN_TIMEOUT\n\nPlugin did not start in time. Default timeout (in millis): `10000`\n\n<a name=\"FST_ERR_PLUGIN_NOT_PRESENT_IN_INSTANCE\"></a>\n\n#### FST_ERR_PLUGIN_NOT_PRESENT_IN_INSTANCE\n\nThe decorator is not present in the instance.\n)/test/internals/contentTypeParser.test.js\t'use strict'\n\nconst t = require('tap')\nconst proxyquire = require('proxyquire')\nconst test = t.test\nconst { Readable } = require('stream')\nconst { kTestInternals, kRouteContext } = require('../../lib/symbols')\nconst Request = require('../../lib/request')\nconst Reply = require('../../lib/reply')\n\ntest('rawBody function', t => {\n  t.plan(2)\n\n  const internals = require('../../lib/contentTypeParser')[kTestInternals]\n  const body = Buffer.from('你好 世界')\n  const parser = {\n    asString: true,\n    asBuffer: false,\n    fn (req, bodyInString, done) {\n      t.equal(bodyInString, body.toString())\n      t.equal(typeof done, 'function')\n      return {\n        then (cb) {\n          cb()\n        }\n      }\n    }\n  }\n  const res = {}\n  res.end = () => { }\n  res.writeHead = () => { }\n\n  res.log = { error: () => { }, info: () => { } }\n  const context = {\n    Reply,\n    Request,\n    preHandler: [],\n    onSend: [],\n    _parserOptions: {\n      limit: 1024\n    }\n  }\n  const rs = new Readable()\n  rs._read = function () { }\n  rs.headers = { 'content-length': body.length }\n  const request = new Request('id', 'params', rs, 'query', 'log', context)\n  const reply = new Reply(res, request)\n  const done = () => { }\n\n  internals.rawBody(\n    request,\n    reply,\n    reply[kRouteContext]._parserOptions,\n    parser,\n    done\n  )\n  rs.emit('data', body.toString())\n  rs.emit('end')\n})\n\ntest('Should support Webpack and faux modules', t => {\n  t.plan(2)\n\n  const internals = proxyquire('../../lib/contentTypeParser', {\n    'tiny-lru': { default: () => { } }\n  })[kTestInternals]\n\n  const body = Buffer.from('你好 世界')\n  const parser = {\n    asString: true,\n    asBuffer: false,\n    fn (req, bodyInString, done) {\n      t.equal(bodyInString, body.toString())\n      t.equal(typeof done, 'function')\n      return {\n        then (cb) {\n          cb()\n        }\n      }\n    }\n  }\n  const res = {}\n  res.end = () => { }\n  res.writeHead = () => { }\n\n  res.log = { error: () => { }, info: () => { } }\n  const context = {\n    Reply,\n    Request,\n    preHandler: [],\n    onSend: [],\n    _parserOptions: {\n      limit: 1024\n    }\n  }\n  const rs = new Readable()\n  rs._read = function () { }\n  rs.headers = { 'content-length': body.length }\n  const request = new Request('id', 'params', rs, 'query', 'log', context)\n  const reply = new Reply(res, request)\n  const done = () => { }\n\n  internals.rawBody(\n    request,\n    reply,\n    reply[kRouteContext]._parserOptions,\n    parser,\n    done\n  )\n  rs.emit('data', body.toString())\n  rs.emit('end')\n})\n)/test/types/content-type-parser.test-d.ts\nimport fastify, { FastifyBodyParser } from '../../fastify'\nimport { expectError, expectType } from 'tsd'\nimport { IncomingMessage } from 'http'\nimport { FastifyRequest } from '../../types/request'\n\nexpectType<void>(fastify().addContentTypeParser('contentType', function (request, payload, done) {\n  expectType<FastifyRequest>(request)\n  expectType<IncomingMessage>(payload)\n  done(null)\n}))\n\n// Body limit options\n\nexpectType<void>(fastify().addContentTypeParser('contentType', { bodyLimit: 99 }, function (request, payload, done) {\n  expectType<FastifyRequest>(request)\n  expectType<IncomingMessage>(payload)\n  done(null)\n}))\n\n// Array for contentType\n\nexpectType<void>(fastify().addContentTypeParser(['contentType'], function (request, payload, done) {\n  expectType<FastifyRequest>(request)\n  expectType<IncomingMessage>(payload)\n  done(null)\n}))\n\n// Body Parser - the generic after addContentTypeParser enforces the type of the `body` parameter as well as the value of the `parseAs` property\n\nexpectType<void>(fastify().addContentTypeParser<string>('bodyContentType', { parseAs: 'string' }, function (request, body, done) {\n  expectType<FastifyRequest>(request)\n  expectType<string>(body)\n  done(null)\n}))\n\nexpectType<void>(fastify().addContentTypeParser<Buffer>('bodyContentType', { parseAs: 'buffer' }, function (request, body, done) {\n  expectType<FastifyRequest>(request)\n  expectType<Buffer>(body)\n  done(null)\n}))\n\nexpectType<void>(fastify().addContentTypeParser('contentType', async function (request: FastifyRequest, payload: IncomingMessage) {\n  expectType<FastifyRequest>(request)\n  expectType<IncomingMessage>(payload)\n  return null\n}))\n\nexpectType<void>(fastify().addContentTypeParser<string>('bodyContentType', { parseAs: 'string' }, async function (request: FastifyRequest, body: string) {\n  expectType<FastifyRequest>(request)\n  expectType<string>(body)\n  return null\n}))\n\nexpectType<void>(fastify().addContentTypeParser<Buffer>('bodyContentType', { parseAs: 'buffer' }, async function (request: FastifyRequest, body: Buffer) {\n  expectType<FastifyRequest>(request)\n  expectType<Buffer>(body)\n  return null\n}))\n\nexpectType<FastifyBodyParser<string>>(fastify().getDefaultJsonParser('error', 'ignore'))\n\nexpectError(fastify().getDefaultJsonParser('error', 'skip'))\n\nexpectError(fastify().getDefaultJsonParser('nothing', 'ignore'))\n\nexpectType<void>(fastify().removeAllContentTypeParsers())\nexpectError(fastify().removeAllContentTypeParsers('contentType'))\n\nexpectType<void>(fastify().removeContentTypeParser('contentType'))\nexpectType<void>(fastify().removeContentTypeParser(/contentType+.*/))\nexpectType<void>(fastify().removeContentTypeParser(['contentType', /contentType+.*/]))\nexpectError(fastify().removeContentTypeParser({}))\n/test/proppatch.test.js\b'use strict'\n\nconst t = require('tap')\nconst test = t.test\nconst sget = require('simple-get').concat\nconst fastify = require('..')()\n\ntest('shorthand - proppatch', t => {\n  t.plan(1)\n  try {\n    fastify.route({\n      method: 'PROPPATCH',\n      url: '*',\n      handler: function (req, reply) {\n        reply\n          .code(207)\n          .send(`<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n            <D:multistatus xmlns:D=\"DAV:\"\n              xmlns:Z=\"http://ns.example.com/standards/z39.50/\">\n              <D:response>\n                <D:href>http://www.example.com/bar.html</D:href>\n                <D:propstat>\n                  <D:prop>\n                    <Z:Authors/>\n                  </D:prop>\n                  <D:status>HTTP/1.1 424 Failed Dependency</D:status>\n                </D:propstat>\n                <D:propstat>\n                  <D:prop>\n                    <Z:Copyright-Owner/>\n                  </D:prop>\n                  <D:status>HTTP/1.1 409 Conflict</D:status>\n                </D:propstat>\n                <D:responsedescription> Copyright Owner cannot be deleted or altered.</D:responsedescription>\n              </D:response>\n            </D:multistatus>`\n          )\n      }\n    })\n    t.pass()\n  } catch (e) {\n    t.fail()\n  }\n})\n\nfastify.listen({ port: 0 }, err => {\n  t.error(err)\n  t.teardown(() => { fastify.close() })\n\n  test('request - proppatch', t => {\n    t.plan(3)\n    sget({\n      url: `http://localhost:${fastify.server.address().port}/test/a.txt`,\n      body: `<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n        <D:propertyupdate xmlns:D=\"DAV:\"\n          xmlns:Z=\"http://ns.example.com/standards/z39.50/\">\n          <D:set>\n            <D:prop>\n              <Z:Authors>\n                <Z:Author>Jim Whitehead</Z:Author>\n                <Z:Author>Roy Fielding</Z:Author>\n              </Z:Authors>\n            </D:prop>\n          </D:set>\n          <D:remove>\n            <D:prop>\n              <Z:Copyright-Owner/>\n            </D:prop>\n          </D:remove>\n        </D:propertyupdate>`,\n      method: 'PROPPATCH'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 207)\n      t.equal(response.headers['content-length'], '' + body.length)\n    })\n  })\n})\n/test/plugin.name.display.js'use strict'\n\nconst assert = require('assert')\n\nmodule.exports = function (fastify, opts, done) {\n  assert.strictEqual(fastify.pluginName, 'test-plugin')\n  done()\n}\n\nmodule.exports[Symbol.for('fastify.display-name')] = 'test-plugin'\n/test/client-timeout.test.js\u0004\u0017'use strict'\n\nconst { test } = require('tap')\nconst fastify = require('..')({ requestTimeout: 5, http: { connectionsCheckingInterval: 1000 } })\nconst { connect } = require('net')\n\ntest('requestTimeout should return 408', t => {\n  t.plan(1)\n\n  t.teardown(() => {\n    fastify.close()\n  })\n\n  fastify.post('/', async function (req, reply) {\n    await new Promise(resolve => setTimeout(resolve, 100))\n    return reply.send({ hello: 'world' })\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    if (err) {\n      throw err\n    }\n\n    let data = Buffer.alloc(0)\n    const socket = connect(fastify.server.address().port)\n\n    socket.write('POST / HTTP/1.1\\r\\nHost: example.com\\r\\nConnection-Length: 1\\r\\n')\n\n    socket.on('data', c => (data = Buffer.concat([data, c])))\n    socket.on('end', () => {\n      t.equal(\n        data.toString('utf-8'),\n        'HTTP/1.1 408 Request Timeout\\r\\nContent-Length: 71\\r\\nContent-Type: application/json\\r\\n\\r\\n{\"error\":\"Request Timeout\",\"message\":\"Client Timeout\",\"statusCode\":408}'\n      )\n      t.end()\n    })\n  })\n})\n/test/esm/plugin.mjsđasync function plugin (fastify, opts) {\n  fastify.decorate('foo', opts.foo)\n}\n\nplugin[Symbol.for('skip-override')] = true\n\nexport default plugin\n'/test/internals/reply-serialize.test.jsC'use strict'\n\nconst { test } = require('tap')\nconst { kReplyCacheSerializeFns, kRouteContext } = require('../../lib/symbols')\nconst Fastify = require('../../fastify')\n\nfunction getDefaultSchema () {\n  return {\n    type: 'object',\n    required: ['hello'],\n    properties: {\n      hello: { type: 'string' },\n      world: { type: 'string' }\n    }\n  }\n}\n\nfunction getResponseSchema () {\n  return {\n    201: {\n      type: 'object',\n      required: ['status'],\n      properties: {\n        status: {\n          type: 'string',\n          enum: ['ok']\n        },\n        message: {\n          type: 'string'\n        }\n      }\n    },\n    '4xx': {\n      type: 'object',\n      properties: {\n        status: {\n          type: 'string',\n          enum: ['error']\n        },\n        code: {\n          type: 'integer',\n          minimum: 1\n        },\n        message: {\n          type: 'string'\n        }\n      }\n    },\n    '3xx': {\n      content: {\n        'application/json': {\n          schema: {\n            fullName: { type: 'string' },\n            phone: { type: 'number' }\n          }\n        }\n      }\n    }\n  }\n}\n\ntest('Reply#compileSerializationSchema', t => {\n  t.plan(4)\n\n  t.test('Should return a serialization function', async t => {\n    const fastify = Fastify()\n\n    t.plan(4)\n\n    fastify.get('/', (req, reply) => {\n      const serialize = reply.compileSerializationSchema(getDefaultSchema())\n      const input = { hello: 'world' }\n      t.type(serialize, Function)\n      t.type(serialize(input), 'string')\n      t.equal(serialize(input), JSON.stringify(input))\n\n      try {\n        serialize({ world: 'foo' })\n      } catch (err) {\n        t.equal(err.message, '\"hello\" is required!')\n      }\n\n      reply.send({ hello: 'world' })\n    })\n\n    await fastify.inject({\n      path: '/',\n      method: 'GET'\n    })\n  })\n\n  t.test('Should reuse the serialize fn across multiple invocations - Route without schema',\n    async t => {\n      const fastify = Fastify()\n      let serialize = null\n      let counter = 0\n\n      t.plan(17)\n\n      const schemaObj = getDefaultSchema()\n\n      fastify.get('/', (req, reply) => {\n        const input = { hello: 'world' }\n        counter++\n        if (counter > 1) {\n          const newSerialize = reply.compileSerializationSchema(schemaObj)\n          t.equal(serialize, newSerialize, 'Are the same validate function')\n          serialize = newSerialize\n        } else {\n          t.pass('build the schema compilation function')\n          serialize = reply.compileSerializationSchema(schemaObj)\n        }\n\n        t.type(serialize, Function)\n        t.equal(serialize(input), JSON.stringify(input))\n\n        try {\n          serialize({ world: 'foo' })\n        } catch (err) {\n          t.equal(err.message, '\"hello\" is required!')\n        }\n\n        reply.send({ hello: 'world' })\n      })\n\n      await Promise.all([\n        fastify.inject('/'),\n        fastify.inject('/'),\n        fastify.inject('/'),\n        fastify.inject('/')\n      ])\n\n      t.equal(counter, 4)\n    }\n  )\n\n  t.test('Should use the custom serializer compiler for the route',\n    async t => {\n      const fastify = Fastify()\n      let called = 0\n      const custom = ({ schema, httpStatus, url, method }) => {\n        t.equal(schema, schemaObj)\n        t.equal(url, '/')\n        t.equal(method, 'GET')\n        t.equal(httpStatus, '201')\n\n        return input => {\n          called++\n          t.same(input, { hello: 'world' })\n          return JSON.stringify(input)\n        }\n      }\n\n      const custom2 = ({ schema, httpStatus, url, method, contentType }) => {\n        t.equal(schema, schemaObj)\n        t.equal(url, '/user')\n        t.equal(method, 'GET')\n        t.equal(httpStatus, '3xx')\n        t.equal(contentType, 'application/json')\n\n        return input => {\n          t.same(input, { fullName: 'Jone', phone: 1090243795 })\n          return JSON.stringify(input)\n        }\n      }\n\n      t.plan(17)\n      const schemaObj = getDefaultSchema()\n\n      fastify.get('/', { serializerCompiler: custom }, (req, reply) => {\n        const input = { hello: 'world' }\n        const first = reply.compileSerializationSchema(schemaObj, '201')\n        const second = reply.compileSerializationSchema(schemaObj, '201')\n\n        t.equal(first, second)\n        t.ok(first(input), JSON.stringify(input))\n        t.ok(second(input), JSON.stringify(input))\n        t.equal(called, 2)\n\n        reply.send({ hello: 'world' })\n      })\n\n      fastify.get('/user', { serializerCompiler: custom2 }, (req, reply) => {\n        const input = { fullName: 'Jone', phone: 1090243795 }\n        const first = reply.compileSerializationSchema(schemaObj, '3xx', 'application/json')\n        t.ok(first(input), JSON.stringify(input))\n        reply.send(input)\n      })\n\n      await fastify.inject({\n        path: '/',\n        method: 'GET'\n      })\n\n      await fastify.inject({\n        path: '/user',\n        method: 'GET'\n      })\n    }\n  )\n\n  t.test('Should build a WeakMap for cache when called', async t => {\n    const fastify = Fastify()\n\n    t.plan(4)\n\n    fastify.get('/', (req, reply) => {\n      const input = { hello: 'world' }\n\n      t.equal(reply[kRouteContext][kReplyCacheSerializeFns], null)\n      t.equal(reply.compileSerializationSchema(getDefaultSchema())(input), JSON.stringify(input))\n      t.type(reply[kRouteContext][kReplyCacheSerializeFns], WeakMap)\n      t.equal(reply.compileSerializationSchema(getDefaultSchema())(input), JSON.stringify(input))\n\n      reply.send({ hello: 'world' })\n    })\n\n    await fastify.inject({\n      path: '/',\n      method: 'GET'\n    })\n  })\n})\n\ntest('Reply#getSerializationFunction', t => {\n  t.plan(3)\n\n  t.test('Should retrieve the serialization function from the Schema definition',\n    async t => {\n      const fastify = Fastify()\n      const okInput201 = {\n        status: 'ok',\n        message: 'done!'\n      }\n      const notOkInput201 = {\n        message: 'created'\n      }\n      const okInput4xx = {\n        status: 'error',\n        code: 2,\n        message: 'oops!'\n      }\n      const notOkInput4xx = {\n        status: 'error',\n        code: 'something'\n      }\n      const okInput3xx = {\n        fullName: 'Jone',\n        phone: 0\n      }\n      const noOkInput3xx = {\n        fullName: 'Jone',\n        phone: 'phone'\n      }\n      let cached4xx\n      let cached201\n      let cachedJson3xx\n\n      t.plan(13)\n\n      const responseSchema = getResponseSchema()\n\n      fastify.get(\n        '/:id',\n        {\n          params: {\n            id: {\n              type: 'integer'\n            }\n          },\n          schema: {\n            response: responseSchema\n          }\n        },\n        (req, reply) => {\n          const { id } = req.params\n\n          if (Number(id) === 1) {\n            const serialize4xx = reply.getSerializationFunction('4xx')\n            const serialize201 = reply.getSerializationFunction(201)\n            const serializeJson3xx = reply.getSerializationFunction('3xx', 'application/json')\n            const serializeUndefined = reply.getSerializationFunction(undefined)\n\n            cached4xx = serialize4xx\n            cached201 = serialize201\n            cachedJson3xx = serializeJson3xx\n\n            t.type(serialize4xx, Function)\n            t.type(serialize201, Function)\n            t.type(serializeJson3xx, Function)\n            t.equal(serialize4xx(okInput4xx), JSON.stringify(okInput4xx))\n            t.equal(serialize201(okInput201), JSON.stringify(okInput201))\n            t.equal(serializeJson3xx(okInput3xx), JSON.stringify(okInput3xx))\n            t.notOk(serializeUndefined)\n\n            try {\n              serialize4xx(notOkInput4xx)\n            } catch (err) {\n              t.equal(\n                err.message,\n                'The value \"something\" cannot be converted to an integer.'\n              )\n            }\n\n            try {\n              serialize201(notOkInput201)\n            } catch (err) {\n              t.equal(err.message, '\"status\" is required!')\n            }\n\n            try {\n              serializeJson3xx(noOkInput3xx)\n            } catch (err) {\n              t.equal(err.message, 'The value \"phone\" cannot be converted to a number.')\n            }\n\n            reply.status(201).send(okInput201)\n          } else {\n            const serialize201 = reply.getSerializationFunction(201)\n            const serialize4xx = reply.getSerializationFunction('4xx')\n            const serializeJson3xx = reply.getSerializationFunction('3xx', 'application/json')\n\n            t.equal(serialize4xx, cached4xx)\n            t.equal(serialize201, cached201)\n            t.equal(serializeJson3xx, cachedJson3xx)\n            reply.status(401).send(okInput4xx)\n          }\n        }\n      )\n\n      await Promise.all([\n        fastify.inject('/1'),\n        fastify.inject('/2')\n      ])\n    }\n  )\n\n  t.test('Should retrieve the serialization function from the cached one',\n    async t => {\n      const fastify = Fastify()\n\n      const schemaObj = getDefaultSchema()\n\n      const okInput = {\n        hello: 'world',\n        world: 'done!'\n      }\n      const notOkInput = {\n        world: 'done!'\n      }\n      let cached\n\n      t.plan(6)\n\n      fastify.get(\n        '/:id',\n        {\n          params: {\n            id: {\n              type: 'integer'\n            }\n          }\n        },\n        (req, reply) => {\n          const { id } = req.params\n\n          if (Number(id) === 1) {\n            const serialize = reply.compileSerializationSchema(schemaObj)\n\n            t.type(serialize, Function)\n            t.equal(serialize(okInput), JSON.stringify(okInput))\n\n            try {\n              serialize(notOkInput)\n            } catch (err) {\n              t.equal(err.message, '\"hello\" is required!')\n            }\n\n            cached = serialize\n          } else {\n            const serialize = reply.getSerializationFunction(schemaObj)\n\n            t.equal(serialize, cached)\n            t.equal(serialize(okInput), JSON.stringify(okInput))\n\n            try {\n              serialize(notOkInput)\n            } catch (err) {\n              t.equal(err.message, '\"hello\" is required!')\n            }\n          }\n\n          reply.status(201).send(okInput)\n        }\n      )\n\n      await Promise.all([\n        fastify.inject('/1'),\n        fastify.inject('/2')\n      ])\n    }\n  )\n\n  t.test('Should not instantiate a WeakMap if it is not needed', async t => {\n    const fastify = Fastify()\n\n    t.plan(4)\n\n    fastify.get('/', (req, reply) => {\n      t.notOk(reply.getSerializationFunction(getDefaultSchema()))\n      t.equal(reply[kRouteContext][kReplyCacheSerializeFns], null)\n      t.notOk(reply.getSerializationFunction('200'))\n      t.equal(reply[kRouteContext][kReplyCacheSerializeFns], null)\n\n      reply.send({ hello: 'world' })\n    })\n\n    await fastify.inject({\n      path: '/',\n      method: 'GET'\n    })\n  })\n})\n\ntest('Reply#serializeInput', t => {\n  t.plan(6)\n\n  t.test(\n    'Should throw if missed serialization function from HTTP status',\n    async t => {\n      const fastify = Fastify()\n\n      t.plan(2)\n\n      fastify.get('/', (req, reply) => {\n        reply.serializeInput({}, 201)\n      })\n\n      const result = await fastify.inject({\n        path: '/',\n        method: 'GET'\n      })\n\n      t.equal(result.statusCode, 500)\n      t.same(result.json(), {\n        statusCode: 500,\n        code: 'FST_ERR_MISSING_SERIALIZATION_FN',\n        error: 'Internal Server Error',\n        message: 'Missing serialization function. Key \"201\"'\n      })\n    }\n  )\n\n  t.test(\n    'Should throw if missed serialization function from HTTP status with specific content type',\n    async t => {\n      const fastify = Fastify()\n\n      t.plan(2)\n\n      fastify.get('/', {\n        schema: {\n          response: {\n            '3xx': {\n              content: {\n                'application/json': {\n                  schema: {\n                    fullName: { type: 'string' },\n                    phone: { type: 'number' }\n                  }\n                }\n              }\n            }\n          }\n        }\n      }, (req, reply) => {\n        reply.serializeInput({}, '3xx', 'application/vnd.v1+json')\n      })\n\n      const result = await fastify.inject({\n        path: '/',\n        method: 'GET'\n      })\n\n      t.equal(result.statusCode, 500)\n      t.same(result.json(), {\n        statusCode: 500,\n        code: 'FST_ERR_MISSING_CONTENTTYPE_SERIALIZATION_FN',\n        error: 'Internal Server Error',\n        message: 'Missing serialization function. Key \"3xx:application/vnd.v1+json\"'\n      })\n    }\n  )\n\n  t.test('Should use a serializer fn from HTTP status', async t => {\n    const fastify = Fastify()\n    const okInput201 = {\n      status: 'ok',\n      message: 'done!'\n    }\n    const notOkInput201 = {\n      message: 'created'\n    }\n    const okInput4xx = {\n      status: 'error',\n      code: 2,\n      message: 'oops!'\n    }\n    const notOkInput4xx = {\n      status: 'error',\n      code: 'something'\n    }\n    const okInput3xx = {\n      fullName: 'Jone',\n      phone: 0\n    }\n    const noOkInput3xx = {\n      fullName: 'Jone',\n      phone: 'phone'\n    }\n\n    t.plan(6)\n\n    fastify.get(\n      '/',\n      {\n        params: {\n          id: {\n            type: 'integer'\n          }\n        },\n        schema: {\n          response: getResponseSchema()\n        }\n      },\n      (req, reply) => {\n        t.equal(\n          reply.serializeInput(okInput4xx, '4xx'),\n          JSON.stringify(okInput4xx)\n        )\n        t.equal(\n          reply.serializeInput(okInput201, 201),\n          JSON.stringify(okInput201)\n        )\n\n        t.equal(\n          reply.serializeInput(okInput3xx, {}, '3xx', 'application/json'),\n          JSON.stringify(okInput3xx)\n        )\n\n        try {\n          reply.serializeInput(noOkInput3xx, '3xx', 'application/json')\n        } catch (err) {\n          t.equal(err.message, 'The value \"phone\" cannot be converted to a number.')\n        }\n\n        try {\n          reply.serializeInput(notOkInput4xx, '4xx')\n        } catch (err) {\n          t.equal(\n            err.message,\n            'The value \"something\" cannot be converted to an integer.'\n          )\n        }\n\n        try {\n          reply.serializeInput(notOkInput201, 201)\n        } catch (err) {\n          t.equal(err.message, '\"status\" is required!')\n        }\n\n        reply.status(204).send('')\n      }\n    )\n\n    await fastify.inject({\n      path: '/',\n      method: 'GET'\n    })\n  })\n\n  t.test(\n    'Should compile a serializer out of a schema if serializer fn missed',\n    async t => {\n      let compilerCalled = 0\n      let serializerCalled = 0\n      const testInput = { hello: 'world' }\n      const schemaObj = getDefaultSchema()\n      const fastify = Fastify()\n      const serializerCompiler = ({ schema, httpStatus, method, url }) => {\n        t.equal(schema, schemaObj)\n        t.notOk(httpStatus)\n        t.equal(method, 'GET')\n        t.equal(url, '/')\n\n        compilerCalled++\n        return input => {\n          t.equal(input, testInput)\n          serializerCalled++\n          return JSON.stringify(input)\n        }\n      }\n\n      t.plan(10)\n\n      fastify.get('/', { serializerCompiler }, (req, reply) => {\n        t.equal(\n          reply.serializeInput(testInput, schemaObj),\n          JSON.stringify(testInput)\n        )\n\n        t.equal(\n          reply.serializeInput(testInput, schemaObj),\n          JSON.stringify(testInput)\n        )\n\n        reply.status(201).send(testInput)\n      })\n\n      await fastify.inject({\n        path: '/',\n        method: 'GET'\n      })\n\n      t.equal(compilerCalled, 1)\n      t.equal(serializerCalled, 2)\n    }\n  )\n\n  t.test('Should use a cached serializer fn', async t => {\n    let compilerCalled = 0\n    let serializerCalled = 0\n    let cached\n    const testInput = { hello: 'world' }\n    const schemaObj = getDefaultSchema()\n    const fastify = Fastify()\n    const serializer = input => {\n      t.equal(input, testInput)\n      serializerCalled++\n      return JSON.stringify(input)\n    }\n    const serializerCompiler = ({ schema, httpStatus, method, url }) => {\n      t.equal(schema, schemaObj)\n      t.notOk(httpStatus)\n      t.equal(method, 'GET')\n      t.equal(url, '/')\n\n      compilerCalled++\n      return serializer\n    }\n\n    t.plan(12)\n\n    fastify.get('/', { serializerCompiler }, (req, reply) => {\n      t.equal(\n        reply.serializeInput(testInput, schemaObj),\n        JSON.stringify(testInput)\n      )\n\n      cached = reply.getSerializationFunction(schemaObj)\n\n      t.equal(\n        reply.serializeInput(testInput, schemaObj),\n        cached(testInput)\n      )\n\n      reply.status(201).send(testInput)\n    })\n\n    await fastify.inject({\n      path: '/',\n      method: 'GET'\n    })\n\n    t.equal(cached, serializer)\n    t.equal(compilerCalled, 1)\n    t.equal(serializerCalled, 3)\n  })\n\n  t.test('Should instantiate a WeakMap after first call', async t => {\n    const fastify = Fastify()\n\n    t.plan(3)\n\n    fastify.get('/', (req, reply) => {\n      const input = { hello: 'world' }\n      t.equal(reply[kRouteContext][kReplyCacheSerializeFns], null)\n      t.equal(reply.serializeInput(input, getDefaultSchema()), JSON.stringify(input))\n      t.type(reply[kRouteContext][kReplyCacheSerializeFns], WeakMap)\n\n      reply.send({ hello: 'world' })\n    })\n\n    await fastify.inject({\n      path: '/',\n      method: 'GET'\n    })\n  })\n})\n/fastify.d.ts3import * as http from 'http'\nimport * as http2 from 'http2'\nimport * as https from 'https'\nimport { Socket } from 'net'\n\nimport { Options as AjvOptions, ValidatorFactory } from '@fastify/ajv-compiler'\nimport { FastifyError } from '@fastify/error'\nimport { Options as FJSOptions, SerializerFactory } from '@fastify/fast-json-stringify-compiler'\nimport { ConstraintStrategy, HTTPVersion } from 'find-my-way'\nimport { Chain as LightMyRequestChain, InjectOptions, Response as LightMyRequestResponse, CallbackFunc as LightMyRequestCallback } from 'light-my-request'\n\nimport { FastifyBodyParser, FastifyContentTypeParser, AddContentTypeParser, hasContentTypeParser, getDefaultJsonParser, ProtoAction, ConstructorAction } from './types/content-type-parser'\nimport { FastifyContext, FastifyContextConfig } from './types/context'\nimport { FastifyErrorCodes } from './types/errors'\nimport { DoneFuncWithErrOrRes, HookHandlerDoneFunction, RequestPayload, onCloseAsyncHookHandler, onCloseHookHandler, onErrorAsyncHookHandler, onErrorHookHandler, onReadyAsyncHookHandler, onReadyHookHandler, onRegisterHookHandler, onRequestAsyncHookHandler, onRequestHookHandler, onResponseAsyncHookHandler, onResponseHookHandler, onRouteHookHandler, onSendAsyncHookHandler, onSendHookHandler, onTimeoutAsyncHookHandler, onTimeoutHookHandler, preHandlerAsyncHookHandler, preHandlerHookHandler, preParsingAsyncHookHandler, preParsingHookHandler, preSerializationAsyncHookHandler, preSerializationHookHandler, preValidationAsyncHookHandler, preValidationHookHandler, onRequestAbortHookHandler, onRequestAbortAsyncHookHandler } from './types/hooks'\nimport { FastifyListenOptions, FastifyInstance, PrintRoutesOptions } from './types/instance'\nimport { FastifyBaseLogger, FastifyLoggerInstance, FastifyLoggerOptions, PinoLoggerOptions, FastifyLogFn, LogLevel } from './types/logger'\nimport { FastifyPluginCallback, FastifyPluginAsync, FastifyPluginOptions, FastifyPlugin } from './types/plugin'\nimport { FastifyRegister, FastifyRegisterOptions, RegisterOptions } from './types/register'\nimport { FastifyReply } from './types/reply'\nimport { FastifyRequest, RequestGenericInterface } from './types/request'\nimport { RouteHandler, RouteHandlerMethod, RouteOptions, RouteShorthandMethod, RouteShorthandOptions, RouteShorthandOptionsWithHandler, RouteGenericInterface } from './types/route'\nimport { FastifySchema, FastifySchemaCompiler, SchemaErrorDataVar, SchemaErrorFormatter } from './types/schema'\nimport { FastifyServerFactory, FastifyServerFactoryHandler } from './types/serverFactory'\nimport { FastifyTypeProvider, FastifyTypeProviderDefault } from './types/type-provider'\nimport { HTTPMethods, RawServerBase, RawRequestDefaultExpression, RawReplyDefaultExpression, RawServerDefault, ContextConfigDefault, RequestBodyDefault, RequestQuerystringDefault, RequestParamsDefault, RequestHeadersDefault } from './types/utils'\n\ndeclare module '@fastify/error' {\n  interface FastifyError {\n    validation?: fastify.ValidationResult[];\n    validationContext?: SchemaErrorDataVar;\n  }\n}\n\ntype Fastify = typeof fastify\n\ndeclare namespace fastify {\n  export const errorCodes: FastifyErrorCodes;\n\n  export type FastifyHttp2SecureOptions<\n    Server extends http2.Http2SecureServer,\n    Logger extends FastifyBaseLogger = FastifyBaseLogger\n  > = FastifyServerOptions<Server, Logger> & {\n    http2: true,\n    https: http2.SecureServerOptions,\n    http2SessionTimeout?: number\n  }\n\n  export type FastifyHttp2Options<\n    Server extends http2.Http2Server,\n    Logger extends FastifyBaseLogger = FastifyBaseLogger\n  > = FastifyServerOptions<Server, Logger> & {\n    http2: true,\n    http2SessionTimeout?: number\n  }\n\n  export type FastifyHttpsOptions<\n    Server extends https.Server,\n    Logger extends FastifyBaseLogger = FastifyBaseLogger\n  > = FastifyServerOptions<Server, Logger> & {\n    https: https.ServerOptions | null\n  }\n\n  export type FastifyHttpOptions<\n    Server extends http.Server,\n    Logger extends FastifyBaseLogger = FastifyBaseLogger\n  > = FastifyServerOptions<Server, Logger> & {\n    http?: http.ServerOptions | null\n  }\n\n  type FindMyWayVersion<RawServer extends RawServerBase> = RawServer extends http.Server ? HTTPVersion.V1 : HTTPVersion.V2\n\n  export interface ConnectionError extends Error {\n    code: string,\n    bytesParsed: number,\n    rawPacket: {\n      type: string,\n      data: number[]\n    }\n  }\n\n  type TrustProxyFunction = (address: string, hop: number) => boolean\n\n  /**\n   * Options for a fastify server instance. Utilizes conditional logic on the generic server parameter to enforce certain https and http2\n   */\n  export type FastifyServerOptions<\n    RawServer extends RawServerBase = RawServerDefault,\n    Logger extends FastifyBaseLogger = FastifyBaseLogger\n  > = {\n    ignoreTrailingSlash?: boolean,\n    ignoreDuplicateSlashes?: boolean,\n    connectionTimeout?: number,\n    keepAliveTimeout?: number,\n    maxRequestsPerSocket?: number,\n    forceCloseConnections?: boolean | 'idle',\n    requestTimeout?: number,\n    pluginTimeout?: number,\n    bodyLimit?: number,\n    maxParamLength?: number,\n    disableRequestLogging?: boolean,\n    exposeHeadRoutes?: boolean,\n    onProtoPoisoning?: ProtoAction,\n    onConstructorPoisoning?: ConstructorAction,\n    logger?: boolean | FastifyLoggerOptions<RawServer> & PinoLoggerOptions | Logger,\n    serializerOpts?: FJSOptions | Record<string, unknown>,\n    serverFactory?: FastifyServerFactory<RawServer>,\n    caseSensitive?: boolean,\n    requestIdHeader?: string | false,\n    requestIdLogLabel?: string;\n    jsonShorthand?: boolean;\n    genReqId?: <RequestGeneric extends RequestGenericInterface = RequestGenericInterface, TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault>(req: FastifyRequest<RequestGeneric, RawServer, RawRequestDefaultExpression<RawServer>, FastifySchema, TypeProvider>) => string,\n    trustProxy?: boolean | string | string[] | number | TrustProxyFunction,\n    querystringParser?: (str: string) => { [key: string]: unknown },\n    /**\n     * @deprecated Prefer using the `constraints.version` property\n     */\n    versioning?: {\n      storage(): {\n        get(version: string): string | null,\n        set(version: string, store: Function): void\n        del(version: string): void,\n        empty(): void\n      },\n      deriveVersion<Context>(req: Object, ctx?: Context): string // not a fan of using Object here. Also what is Context? Can either of these be better defined?\n    },\n    constraints?: {\n      [name: string]: ConstraintStrategy<FindMyWayVersion<RawServer>, unknown>,\n    },\n    schemaController?: {\n      bucket?: (parentSchemas?: unknown) => {\n        add(schema: unknown): FastifyInstance;\n        getSchema(schemaId: string): unknown;\n        getSchemas(): Record<string, unknown>;\n      };\n      compilersFactory?: {\n        buildValidator?: ValidatorFactory;\n        buildSerializer?: SerializerFactory;\n      };\n    };\n    return503OnClosing?: boolean,\n    ajv?: {\n      customOptions?: AjvOptions,\n      plugins?: (Function | [Function, unknown])[]\n    },\n    frameworkErrors?: <RequestGeneric extends RequestGenericInterface = RequestGenericInterface, TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault, SchemaCompiler extends FastifySchema = FastifySchema>(\n      error: FastifyError,\n      req: FastifyRequest<RequestGeneric, RawServer, RawRequestDefaultExpression<RawServer>, FastifySchema, TypeProvider>,\n      res: FastifyReply<RawServer, RawRequestDefaultExpression<RawServer>, RawReplyDefaultExpression<RawServer>, RequestGeneric, FastifyContextConfig, SchemaCompiler, TypeProvider>\n    ) => void,\n    rewriteUrl?: (req: RawRequestDefaultExpression<RawServer>) => string,\n    schemaErrorFormatter?: SchemaErrorFormatter,\n    /**\n     * listener to error events emitted by client connections\n     */\n    clientErrorHandler?: (error: ConnectionError, socket: Socket) => void\n  }\n\n  export interface ValidationResult {\n    keyword: string;\n    instancePath: string;\n    schemaPath: string;\n    params: Record<string, string | string[]>;\n    message?: string;\n  }\n\n  /* Export additional types */\n  export type {\n    LightMyRequestChain, InjectOptions, LightMyRequestResponse, LightMyRequestCallback, // 'light-my-request'\n    FastifyRequest, RequestGenericInterface, // './types/request'\n    FastifyReply, // './types/reply'\n    FastifyPluginCallback, FastifyPluginAsync, FastifyPluginOptions, FastifyPlugin, // './types/plugin'\n    FastifyListenOptions, FastifyInstance, PrintRoutesOptions, // './types/instance'\n    FastifyLoggerOptions, FastifyBaseLogger, FastifyLoggerInstance, FastifyLogFn, LogLevel, // './types/logger'\n    FastifyContext, FastifyContextConfig, // './types/context'\n    RouteHandler, RouteHandlerMethod, RouteOptions, RouteShorthandMethod, RouteShorthandOptions, RouteShorthandOptionsWithHandler, RouteGenericInterface, // './types/route'\n    FastifyRegister, FastifyRegisterOptions, RegisterOptions, // './types/register'\n    FastifyBodyParser, FastifyContentTypeParser, AddContentTypeParser, hasContentTypeParser, getDefaultJsonParser, ProtoAction, ConstructorAction, // './types/content-type-parser'\n    FastifyError, // '@fastify/error'\n    FastifySchema, FastifySchemaCompiler, // './types/schema'\n    HTTPMethods, RawServerBase, RawRequestDefaultExpression, RawReplyDefaultExpression, RawServerDefault, ContextConfigDefault, RequestBodyDefault, RequestQuerystringDefault, RequestParamsDefault, RequestHeadersDefault, // './types/utils'\n    DoneFuncWithErrOrRes, HookHandlerDoneFunction, RequestPayload, onCloseAsyncHookHandler, onCloseHookHandler, onErrorAsyncHookHandler, onErrorHookHandler, onReadyAsyncHookHandler, onReadyHookHandler, onRegisterHookHandler, onRequestAsyncHookHandler, onRequestHookHandler, onResponseAsyncHookHandler, onResponseHookHandler, onRouteHookHandler, onSendAsyncHookHandler, onSendHookHandler, onTimeoutAsyncHookHandler, onTimeoutHookHandler, preHandlerAsyncHookHandler, preHandlerHookHandler, preParsingAsyncHookHandler, preParsingHookHandler, preSerializationAsyncHookHandler, preSerializationHookHandler, preValidationAsyncHookHandler, preValidationHookHandler, onRequestAbortHookHandler, onRequestAbortAsyncHookHandler, // './types/hooks'\n    FastifyServerFactory, FastifyServerFactoryHandler, // './types/serverFactory'\n    FastifyTypeProvider, FastifyTypeProviderDefault, // './types/type-provider'\n    FastifyErrorCodes, // './types/errors'\n  }\n  // named export\n  // import { plugin } from 'plugin'\n  // const { plugin } = require('plugin')\n  export const fastify: Fastify\n  // default export\n  // import plugin from 'plugin'\n  export { fastify as default }\n}\n\n/**\n * Fastify factory function for the standard fastify http, https, or http2 server instance.\n *\n * The default function utilizes http\n *\n * @param opts Fastify server options\n * @returns Fastify server instance\n */\ndeclare function fastify<\n  Server extends http2.Http2SecureServer,\n  Request extends RawRequestDefaultExpression<Server> = RawRequestDefaultExpression<Server>,\n  Reply extends RawReplyDefaultExpression<Server> = RawReplyDefaultExpression<Server>,\n  Logger extends FastifyBaseLogger = FastifyBaseLogger,\n  TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,\n>(opts: fastify.FastifyHttp2SecureOptions<Server, Logger>): FastifyInstance<Server, Request, Reply, Logger, TypeProvider> & PromiseLike<FastifyInstance<Server, Request, Reply, Logger, TypeProvider>>\n\ndeclare function fastify<\n  Server extends http2.Http2Server,\n  Request extends RawRequestDefaultExpression<Server> = RawRequestDefaultExpression<Server>,\n  Reply extends RawReplyDefaultExpression<Server> = RawReplyDefaultExpression<Server>,\n  Logger extends FastifyBaseLogger = FastifyBaseLogger,\n  TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,\n>(opts: fastify.FastifyHttp2Options<Server, Logger>): FastifyInstance<Server, Request, Reply, Logger, TypeProvider> & PromiseLike<FastifyInstance<Server, Request, Reply, Logger, TypeProvider>>\n\ndeclare function fastify<\n  Server extends https.Server,\n  Request extends RawRequestDefaultExpression<Server> = RawRequestDefaultExpression<Server>,\n  Reply extends RawReplyDefaultExpression<Server> = RawReplyDefaultExpression<Server>,\n  Logger extends FastifyBaseLogger = FastifyBaseLogger,\n  TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,\n>(opts: fastify.FastifyHttpsOptions<Server, Logger>): FastifyInstance<Server, Request, Reply, Logger, TypeProvider> & PromiseLike<FastifyInstance<Server, Request, Reply, Logger, TypeProvider>>\n\ndeclare function fastify<\n  Server extends http.Server,\n  Request extends RawRequestDefaultExpression<Server> = RawRequestDefaultExpression<Server>,\n  Reply extends RawReplyDefaultExpression<Server> = RawReplyDefaultExpression<Server>,\n  Logger extends FastifyBaseLogger = FastifyBaseLogger,\n  TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,\n>(opts?: fastify.FastifyHttpOptions<Server, Logger>): FastifyInstance<Server, Request, Reply, Logger, TypeProvider> & PromiseLike<FastifyInstance<Server, Request, Reply, Logger, TypeProvider>>\n\n// CJS export\n// const fastify = require('fastify')\nexport = fastify\n/test/head.test.js\f'use strict'\n\nconst t = require('tap')\nconst test = t.test\nconst sget = require('simple-get').concat\nconst fastify = require('..')()\n\nconst schema = {\n  schema: {\n    response: {\n      '2xx': {\n        type: 'null'\n      }\n    }\n  }\n}\n\nconst querySchema = {\n  schema: {\n    querystring: {\n      type: 'object',\n      properties: {\n        hello: {\n          type: 'integer'\n        }\n      }\n    }\n  }\n}\n\nconst paramsSchema = {\n  schema: {\n    params: {\n      type: 'object',\n      properties: {\n        foo: {\n          type: 'string'\n        },\n        test: {\n          type: 'integer'\n        }\n      }\n    }\n  }\n}\n\ntest('shorthand - head', t => {\n  t.plan(1)\n  try {\n    fastify.head('/', schema, function (req, reply) {\n      reply.code(200).send(null)\n    })\n    t.pass()\n  } catch (e) {\n    t.fail()\n  }\n})\n\ntest('shorthand - head params', t => {\n  t.plan(1)\n  try {\n    fastify.head('/params/:foo/:test', paramsSchema, function (req, reply) {\n      reply.send(null)\n    })\n    t.pass()\n  } catch (e) {\n    t.fail()\n  }\n})\n\ntest('shorthand - head, querystring schema', t => {\n  t.plan(1)\n  try {\n    fastify.head('/query', querySchema, function (req, reply) {\n      reply.code(200).send(null)\n    })\n    t.pass()\n  } catch (e) {\n    t.fail()\n  }\n})\n\ntest('missing schema - head', t => {\n  t.plan(1)\n  try {\n    fastify.head('/missing', function (req, reply) {\n      reply.code(200).send(null)\n    })\n    t.pass()\n  } catch (e) {\n    t.fail()\n  }\n})\n\nfastify.listen({ port: 0 }, err => {\n  t.error(err)\n  t.teardown(() => { fastify.close() })\n\n  test('shorthand - request head', t => {\n    t.plan(2)\n    sget({\n      method: 'HEAD',\n      url: 'http://localhost:' + fastify.server.address().port\n    }, (err, response) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n    })\n  })\n\n  test('shorthand - request head params schema', t => {\n    t.plan(2)\n    sget({\n      method: 'HEAD',\n      url: 'http://localhost:' + fastify.server.address().port + '/params/world/123'\n    }, (err, response) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n    })\n  })\n\n  test('shorthand - request head params schema error', t => {\n    t.plan(2)\n    sget({\n      method: 'HEAD',\n      url: 'http://localhost:' + fastify.server.address().port + '/params/world/string'\n    }, (err, response) => {\n      t.error(err)\n      t.equal(response.statusCode, 400)\n    })\n  })\n\n  test('shorthand - request head querystring schema', t => {\n    t.plan(2)\n    sget({\n      method: 'HEAD',\n      url: 'http://localhost:' + fastify.server.address().port + '/query?hello=123'\n    }, (err, response) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n    })\n  })\n\n  test('shorthand - request head querystring schema error', t => {\n    t.plan(2)\n    sget({\n      method: 'HEAD',\n      url: 'http://localhost:' + fastify.server.address().port + '/query?hello=world'\n    }, (err, response) => {\n      t.error(err)\n      t.equal(response.statusCode, 400)\n    })\n  })\n\n  test('shorthand - request head missing schema', t => {\n    t.plan(2)\n    sget({\n      method: 'HEAD',\n      url: 'http://localhost:' + fastify.server.address().port + '/missing'\n    }, (err, response) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n    })\n  })\n})\n/PROJECT_CHARTER.md\u00113# Fastify Charter\n\nThe Fastify project aims to build a fast and low overhead web framework for\nNode.js.\n\n\n## Section 0: Guiding Principles\n\nThe Fastify project is part of the [OpenJS Foundation][openjs foundation]. It\noperates transparently, openly, collaboratively, and ethically. Project\nproposals, timelines, and status must not merely be open, but also easily\nvisible to outsiders.\n\n\n## Section 1: Scope\n\nFastify is a web framework highly focused on providing the best developer\nexperience with the least overhead and a plugin architecture.\n\n### 1.1: In-scope\n\n+ Develop a web framework for Node.js with a focus on developer experience,\n  performance and extensibility.\n+ Plugin Architecture\n+ Support web protocols\n+ Official plugins for common user requirements\n+ Documentation:\n  + Project (policies, processes, and releases)\n  + Guides and Tutorials\n  + Framework API\n  + Website\n+ Write easier APIs for developers\n+ Tools:\n  + CI services\n  + Bots to improve overall efficiency\n  + Releases\n+ Support:\n  + Community\n  + Users's issues and questions\n+ Contributors's pull request review\n\n### 1.2: Out-of-Scope\n\n+ Support versions of Node.js at EOL (end of life) stage\n+ Support serverless architecture\n+ Contributions that violates the [Code of Conduct](CODE_OF_CONDUCT.md)\n\n\n## Section 2: Relationship with OpenJS Foundation CPC.\n\nTechnical leadership for the projects within the [OpenJS Foundation][openjs\nfoundation] is delegated to the projects through their project charters by the\n[OpenJS Foundation Cross-Project Council](https://openjsf.org/about/governance/)\n(CPC). In the case of the Fastify project, it is delegated to the [Fastify\nCollaborators](README.md#team). The OpenJS Foundation's business leadership is\nthe Board of Directors (the \"Board\").\n\nThis Fastify Charter reflects a carefully constructed balanced role for the\nCollaborators and the CPC in the governance of the OpenJS Foundation. The\ncharter amendment process is for the Fastify Collaborators to propose change\nusing simple majority of the full Fastify Organization, the proposed changes\nbeing subject to review and approval by the CPC. The CPC may additionally make\namendments to the Collaborators charter at any time, though the CPC will not\ninterfere with day-to-day discussions, votes or meetings of the Fastify\nOrganization.\n\n\n### 2.1 Other Formal Project Relationships\n\nSection Intentionally Left Blank\n\n\n## Section 3: Fastify Governing Body\n\nFastify is governed by its [maintainers](README.md#team). See [how it is\nstructured](GOVERNANCE.md) for more information.\n\n\n## Section 4: Roles & Responsibilities\n\nThe roles and responsibilities of Fastify's maintainers are described in [the\nproject organization](GOVERNANCE.md).\n\n### Section 4.1 Project Operations & Management\n\nSection Intentionally Left Blank\n\n### Section 4.2: Decision-making, Voting, and/or Elections\n\n**Decision-making**\n\nFastify's features can be discussed in GitHub issues and/or projects. Consensus\non a discussion is reached when there is no objection by any collaborators.\n\nWhenever there is not consensus, Lead Maintainers will have final say on the\ntopic.\n\n**Voting, and/or Elections**\n\nThese processes are described in the [GOVERNANCE](GOVERNANCE.md) document.\n\n### Section 4.3: Other Project Roles\n\nSection Intentionally Left Blank\n\n## Section 5: Definitions\n\n+ *Contributors*: contribute code or other artifacts, but do not have the right\n  to commit to the code base. Contributors work with the project’s Collaborators\n  to have code committed to the code base. Contributors should rarely be\n  encumbered by the Fastify Collaborators and never by the CPC or OpenJS\n  Foundation Board.\n\n+ *Collaborators*: contribute code and other artifacts, have the right to commit\n  to the code base and release plugins projects. Collaborators follow the\n  [CONTRIBUTING](CONTRIBUTING.md) guidelines to manage the project. A\n  Collaborator could be encumbered by other Fastify Collaborators and never by\n  the CPC or OpenJS Foundation Board.\n\n+ *Lead Maintainers*: founders of the project, contribute code and other\n  artifacts, have the right to commit to the code base and release the project.\n  Lead Maintainers follow the [CONTRIBUTING](CONTRIBUTING.md) guidelines to\n  manage the project. A Lead Maintainer will be encumbered by the Fastify\n  Collaborators and by the CPC or OpenJS Foundation Board.\n\n[openjs foundation]: https://openjsf.org\n/docs/index.md\u0003h<h1 align=\"center\">Fastify</h1>\n\nThe documentation for Fastify is split into two categories:\n\n- [Reference documentation](./Reference/Index.md)\n- [Guides](./Guides/Index.md)\n\nThe reference documentation utilizes a very formal style in an effort to document\nFastify's API and implementation details thoroughly for the developer who needs\nsuch. The guides category utilizes an informal, educational, style as a means to\nintroduce newcomers to core, and advanced, Fastify concepts.\n\n## Where To Start\n\nComplete newcomers to Fastify should first read our [Getting\nStarted](./Guides/Getting-Started.md) guide.\n\nDevelopers experienced with Fastify should consult the [reference\ndocumentation](./Reference/Index.md) directly to find the topic they are seeking\nmore information about.\n\n## Additional Documentation\n\n- Fastify's [Long Term Support (LTS)](./Reference/LTS.md) policy\n/docs/Guides/Getting-Started.md=a<h1 align=\"center\">Fastify</h1>\n\n## Getting Started\n\nHello! Thank you for checking out Fastify!\n\nThis document aims to be a gentle introduction to the framework and its\nfeatures. It is an elementary preface with examples and links to other parts of\nthe documentation.\n\nLet's start!\n\n### Install\n<a id=\"install\"></a>\n\nInstall with npm:\n```\nnpm i fastify\n```\nInstall with yarn:\n```\nyarn add fastify\n```\n\n### Your first server\n<a id=\"first-server\"></a>\n\nLet's write our first server:\n```js\n// Require the framework and instantiate it\n\n// ESM\nimport Fastify from 'fastify'\nconst fastify = Fastify({\n  logger: true\n})\n// CommonJs\nconst fastify = require('fastify')({\n  logger: true\n})\n\n// Declare a route\nfastify.get('/', function (request, reply) {\n  reply.send({ hello: 'world' })\n})\n\n// Run the server!\nfastify.listen({ port: 3000 }, function (err, address) {\n  if (err) {\n    fastify.log.error(err)\n    process.exit(1)\n  }\n  // Server is now listening on ${address}\n})\n```\n\nDo you prefer to use `async/await`? Fastify supports it out-of-the-box.\n\n```js\n// ESM\nimport Fastify from 'fastify'\nconst fastify = Fastify({\n  logger: true\n})\n// CommonJs\nconst fastify = require('fastify')({\n  logger: true\n})\n\nfastify.get('/', async (request, reply) => {\n  return { hello: 'world' }\n})\n\n/**\n * Run the server!\n */\nconst start = async () => {\n  try {\n    await fastify.listen({ port: 3000 })\n  } catch (err) {\n    fastify.log.error(err)\n    process.exit(1)\n  }\n}\nstart()\n```\n\nAwesome, that was easy.\n\nUnfortunately, writing a complex application requires significantly more code\nthan this example. A classic problem when you are building a new application is\nhow to handle multiple files, asynchronous bootstrapping, and the architecture\nof your code.\n\nFastify offers an easy platform that helps to solve all of the problems outlined\nabove, and more!\n\n> ## Note\n> The above examples, and subsequent examples in this document, default to\n> listening *only* on the localhost `127.0.0.1` interface. To listen on all\n> available IPv4 interfaces the example should be modified to listen on\n> `0.0.0.0` like so:\n>\n> ```js\n> fastify.listen({ port: 3000, host: '0.0.0.0' }, function (err, address) {\n>   if (err) {\n>     fastify.log.error(err)\n>     process.exit(1)\n>   }\n>   fastify.log.info(`server listening on ${address}`)\n> })\n> ```\n>\n> Similarly, specify `::1` to accept only local connections via IPv6. Or specify\n> `::` to accept connections on all IPv6 addresses, and, if the operating system\n> supports it, also on all IPv4 addresses.\n>\n> When deploying to a Docker (or another type of) container using `0.0.0.0` or\n> `::` would be the easiest method for exposing the application.\n\n### Your first plugin\n<a id=\"first-plugin\"></a>\n\nAs with JavaScript, where everything is an object, with Fastify everything is a\nplugin.\n\nBefore digging into it, let's see how it works!\n\nLet's declare our basic server, but instead of declaring the route inside the\nentry point, we'll declare it in an external file (check out the [route\ndeclaration](../Reference/Routes.md) docs).\n```js\n// ESM\nimport Fastify from 'fastify'\nimport firstRoute from './our-first-route'\n/**\n * @type {import('fastify').FastifyInstance} Instance of Fastify\n */\nconst fastify = Fastify({\n  logger: true\n})\n\nfastify.register(firstRoute)\n\nfastify.listen({ port: 3000 }, function (err, address) {\n  if (err) {\n    fastify.log.error(err)\n    process.exit(1)\n  }\n  // Server is now listening on ${address}\n})\n```\n\n```js\n// CommonJs\n/**\n * @type {import('fastify').FastifyInstance} Instance of Fastify\n */\nconst fastify = require('fastify')({\n  logger: true\n})\n\nfastify.register(require('./our-first-route'))\n\nfastify.listen({ port: 3000 }, function (err, address) {\n  if (err) {\n    fastify.log.error(err)\n    process.exit(1)\n  }\n  // Server is now listening on ${address}\n})\n```\n\n```js\n// our-first-route.js\n\n/**\n * Encapsulates the routes\n * @param {FastifyInstance} fastify  Encapsulated Fastify Instance\n * @param {Object} options plugin options, refer to https://www.fastify.io/docs/latest/Reference/Plugins/#plugin-options\n */\nasync function routes (fastify, options) {\n  fastify.get('/', async (request, reply) => {\n    return { hello: 'world' }\n  })\n}\n\nmodule.exports = routes\n```\nIn this example, we used the `register` API, which is the core of the Fastify\nframework. It is the only way to add routes, plugins, et cetera.\n\nAt the beginning of this guide, we noted that Fastify provides a foundation that\nassists with asynchronous bootstrapping of your application. Why is this\nimportant?\n\nConsider the scenario where a database connection is needed to handle data\nstorage. The database connection needs to be available before the server is\naccepting connections. How do we address this problem?\n\nA typical solution is to use a complex callback, or promises - a system that\nwill mix the framework API with other libraries and the application code.\n\nFastify handles this internally, with minimum effort!\n\nLet's rewrite the above example with a database connection.\n\n\nFirst, install `fastify-plugin` and `@fastify/mongodb`:\n\n```\nnpm i fastify-plugin @fastify/mongodb\n```\n\n**server.js**\n```js\n// ESM\nimport Fastify from 'fastify'\nimport dbConnector from './our-db-connector'\nimport firstRoute from './our-first-route'\n\n/**\n * @type {import('fastify').FastifyInstance} Instance of Fastify\n */\nconst fastify = Fastify({\n  logger: true\n})\nfastify.register(dbConnector)\nfastify.register(firstRoute)\n\nfastify.listen({ port: 3000 }, function (err, address) {\n  if (err) {\n    fastify.log.error(err)\n    process.exit(1)\n  }\n  // Server is now listening on ${address}\n})\n```\n\n```js\n// CommonJs\n/**\n * @type {import('fastify').FastifyInstance} Instance of Fastify\n */\nconst fastify = require('fastify')({\n  logger: true\n})\n\nfastify.register(require('./our-db-connector'))\nfastify.register(require('./our-first-route'))\n\nfastify.listen({ port: 3000 }, function (err, address) {\n  if (err) {\n    fastify.log.error(err)\n    process.exit(1)\n  }\n  // Server is now listening on ${address}\n})\n\n```\n\n**our-db-connector.js**\n```js\n// ESM\nimport fastifyPlugin from 'fastify-plugin'\nimport fastifyMongo from '@fastify/mongodb'\n\n/**\n * @param {FastifyInstance} fastify\n * @param {Object} options\n */\nasync function dbConnector (fastify, options) {\n  fastify.register(fastifyMongo, {\n    url: 'mongodb://localhost:27017/test_database'\n  })\n}\n\n// Wrapping a plugin function with fastify-plugin exposes the decorators\n// and hooks, declared inside the plugin to the parent scope.\nmodule.exports = fastifyPlugin(dbConnector)\n\n```\n\n```js\n// CommonJs\n/**\n * @type {import('fastify-plugin').FastifyPlugin}\n */\nconst fastifyPlugin = require('fastify-plugin')\n\n\n/**\n * Connects to a MongoDB database\n * @param {FastifyInstance} fastify Encapsulated Fastify Instance\n * @param {Object} options plugin options, refer to https://www.fastify.io/docs/latest/Reference/Plugins/#plugin-options\n */\nasync function dbConnector (fastify, options) {\n  fastify.register(require('@fastify/mongodb'), {\n    url: 'mongodb://localhost:27017/test_database'\n  })\n}\n\n// Wrapping a plugin function with fastify-plugin exposes the decorators\n// and hooks, declared inside the plugin to the parent scope.\nmodule.exports = fastifyPlugin(dbConnector)\n\n```\n\n**our-first-route.js**\n```js\n/**\n * A plugin that provide encapsulated routes\n * @param {FastifyInstance} fastify encapsulated fastify instance\n * @param {Object} options plugin options, refer to https://www.fastify.io/docs/latest/Reference/Plugins/#plugin-options\n */\nasync function routes (fastify, options) {\n  const collection = fastify.mongo.db.collection('test_collection')\n\n  fastify.get('/', async (request, reply) => {\n    return { hello: 'world' }\n  })\n\n  fastify.get('/animals', async (request, reply) => {\n    const result = await collection.find().toArray()\n    if (result.length === 0) {\n      throw new Error('No documents found')\n    }\n    return result\n  })\n\n  fastify.get('/animals/:animal', async (request, reply) => {\n    const result = await collection.findOne({ animal: request.params.animal })\n    if (!result) {\n      throw new Error('Invalid value')\n    }\n    return result\n  })\n\n  const animalBodyJsonSchema = {\n    type: 'object',\n    required: ['animal'],\n    properties: {\n      animal: { type: 'string' },\n    },\n  }\n\n  const schema = {\n    body: animalBodyJsonSchema,\n  }\n\n  fastify.post('/animals', { schema }, async (request, reply) => {\n    // we can use the `request.body` object to get the data sent by the client\n    const result = await collection.insertOne({ animal: request.body.animal })\n    return result\n  })\n}\n\nmodule.exports = routes\n```\n\nWow, that was fast!\n\nLet's recap what we have done here since we've introduced some new concepts.\n\nAs you can see, we used `register` for both the database connector and the\nregistration of the routes.\n\nThis is one of the best features of Fastify, it will load your plugins in the\nsame order you declare them, and it will load the next plugin only once the\ncurrent one has been loaded. In this way, we can register the database connector\nin the first plugin and use it in the second *(read\n[here](../Reference/Plugins.md#handle-the-scope) to understand how to handle the\nscope of a plugin)*.\n\nPlugin loading starts when you call `fastify.listen()`, `fastify.inject()` or\n`fastify.ready()`\n\nThe MongoDB plugin uses the `decorate` API to add custom objects to the Fastify\ninstance, making them available for use everywhere. Use of this API is\nencouraged to facilitate easy code reuse and to decrease code or logic\nduplication.\n\nTo dig deeper into how Fastify plugins work, how to develop new plugins, and for\ndetails on how to use the whole Fastify API to deal with the complexity of\nasynchronously bootstrapping an application, read [the hitchhiker's guide to\nplugins](./Plugins-Guide.md).\n\n### Loading order of your plugins\n<a id=\"plugin-loading-order\"></a>\n\nTo guarantee consistent and predictable behavior of your application, we highly\nrecommend to always load your code as shown below:\n```\n└── plugins (from the Fastify ecosystem)\n└── your plugins (your custom plugins)\n└── decorators\n└── hooks\n└── your services\n```\nIn this way, you will always have access to all of the properties declared in\nthe current scope.\n\nAs discussed previously, Fastify offers a solid encapsulation model, to help you\nbuild your application as single and independent services. If you want to\nregister a plugin only for a subset of routes, you just have to replicate the\nabove structure.\n```\n└── plugins (from the Fastify ecosystem)\n└── your plugins (your custom plugins)\n└── decorators\n└── hooks\n└── your services\n    │\n    └──  service A\n    │     └── plugins (from the Fastify ecosystem)\n    │     └── your plugins (your custom plugins)\n    │     └── decorators\n    │     └── hooks\n    │     └── your services\n    │\n    └──  service B\n          └── plugins (from the Fastify ecosystem)\n          └── your plugins (your custom plugins)\n          └── decorators\n          └── hooks\n          └── your services\n```\n\n### Validate your data\n<a id=\"validate-data\"></a>\n\nData validation is extremely important and a core concept of the framework.\n\nTo validate incoming requests, Fastify uses [JSON\nSchema](https://json-schema.org/).\n\n(JTD schemas are loosely supported, but `jsonShorthand` must be disabled first)\n\nLet's look at an example demonstrating validation for routes:\n```js\n/**\n * @type {import('fastify').RouteShorthandOptions}\n * @const\n */\nconst opts = {\n  schema: {\n    body: {\n      type: 'object',\n      properties: {\n        someKey: { type: 'string' },\n        someOtherKey: { type: 'number' }\n      }\n    }\n  }\n}\n\nfastify.post('/', opts, async (request, reply) => {\n  return { hello: 'world' }\n})\n```\nThis example shows how to pass an options object to the route, which accepts a\n`schema` key that contains all of the schemas for route, `body`, `querystring`,\n`params`, and `headers`.\n\nRead [Validation and\nSerialization](../Reference/Validation-and-Serialization.md) to learn more.\n\n### Serialize your data\n<a id=\"serialize-data\"></a>\n\nFastify has first-class support for JSON. It is extremely optimized to parse\nJSON bodies and serialize JSON output.\n\nTo speed up JSON serialization (yes, it is slow!) use the `response` key of the\nschema option as shown in the following example:\n```js\n/**\n * @type {import('fastify').RouteShorthandOptions}\n * @const\n */\nconst opts = {\n  schema: {\n    response: {\n      200: {\n        type: 'object',\n        properties: {\n          hello: { type: 'string' }\n        }\n      }\n    }\n  }\n}\n\nfastify.get('/', opts, async (request, reply) => {\n  return { hello: 'world' }\n})\n```\nBy specifying a schema as shown, you can speed up serialization by a factor of\n2-3. This also helps to protect against leakage of potentially sensitive data,\nsince Fastify will serialize only the data present in the response schema. Read\n[Validation and Serialization](../Reference/Validation-and-Serialization.md) to\nlearn more.\n\n### Parsing request payloads\n<a id=\"request-payload\"></a>\n\nFastify parses `'application/json'` and `'text/plain'` request payloads\nnatively, with the result accessible from the [Fastify\nrequest](../Reference/Request.md) object at `request.body`.\n\nThe following example returns the parsed body of a request back to the client:\n\n```js\n/**\n * @type {import('fastify').RouteShorthandOptions}\n */\nconst opts = {}\nfastify.post('/', opts, async (request, reply) => {\n  return request.body\n})\n```\n\nRead [Content-Type Parser](../Reference/ContentTypeParser.md) to learn more\nabout Fastify's default parsing functionality and how to support other content\ntypes.\n\n### Extend your server\n<a id=\"extend-server\"></a>\n\nFastify is built to be extremely extensible and minimal, we believe that a\nbare-bones framework is all that is necessary to make great applications\npossible.\n\nIn other words, Fastify is not a \"batteries included\" framework, and relies on\nan amazing [ecosystem](./Ecosystem.md)!\n\n### Test your server\n<a id=\"test-server\"></a>\n\nFastify does not offer a testing framework, but we do recommend a way to write\nyour tests that uses the features and architecture of Fastify.\n\nRead the [testing](./Testing.md) documentation to learn more!\n\n### Run your server from CLI\n<a id=\"cli\"></a>\n\nFastify also has CLI integration thanks to\n[fastify-cli](https://github.com/fastify/fastify-cli).\n\nFirst, install `fastify-cli`:\n\n```\nnpm i fastify-cli\n```\n\nYou can also install it globally with `-g`.\n\nThen, add the following lines to `package.json`:\n```json\n{\n  \"scripts\": {\n    \"start\": \"fastify start server.js\"\n  }\n}\n```\n\nAnd create your server file(s):\n```js\n// server.js\n'use strict'\n\nmodule.exports = async function (fastify, opts) {\n  fastify.get('/', async (request, reply) => {\n    return { hello: 'world' }\n  })\n}\n```\n\nThen run your server with:\n```bash\nnpm start\n```\n\n### Slides and Videos\n<a id=\"slides\"></a>\n\n- Slides\n  - [Take your HTTP server to ludicrous\n    speed](https://mcollina.github.io/take-your-http-server-to-ludicrous-speed)\n    by [@mcollina](https://github.com/mcollina)\n  - [What if I told you that HTTP can be\n    fast](https://delvedor.github.io/What-if-I-told-you-that-HTTP-can-be-fast)\n    by [@delvedor](https://github.com/delvedor)\n\n- Videos\n  - [Take your HTTP server to ludicrous\n    speed](https://www.youtube.com/watch?v=5z46jJZNe8k) by\n    [@mcollina](https://github.com/mcollina)\n  - [What if I told you that HTTP can be\n    fast](https://www.webexpo.net/prague2017/talk/what-if-i-told-you-that-http-can-be-fast/)\n    by [@delvedor](https://github.com/delvedor)\n/test/internals/context.test.js\u0002'use strict'\n\nconst { test } = require('tap')\n\nconst { kRouteContext } = require('../../lib/symbols')\nconst Context = require('../../lib/context')\n\nconst Fastify = require('../..')\n\ntest('context', context => {\n  context.plan(1)\n\n  context.test('Should not contain undefined as key prop', async t => {\n    const app = Fastify()\n\n    app.get('/', (req, reply) => {\n      t.type(req[kRouteContext], Context)\n      t.type(reply[kRouteContext], Context)\n      t.notOk('undefined' in reply[kRouteContext])\n      t.notOk('undefined' in req[kRouteContext])\n\n      reply.send('hello world!')\n    })\n\n    try {\n      await app.inject('/')\n    } catch (e) {\n      t.fail(e)\n    }\n\n    t.plan(4)\n  })\n})\n,/test/types/decorate-request-reply.test-d.ts\u0001`import fastify from '../../fastify'\nimport { expectType } from 'tsd'\n\ntype TestType = void\n\ndeclare module '../../fastify' {\n  interface FastifyRequest {\n    testProp: TestType;\n  }\n  interface FastifyReply {\n    testProp: TestType;\n  }\n}\n\nfastify().get('/', (req, res) => {\n  expectType<TestType>(req.testProp)\n  expectType<TestType>(res.testProp)\n})\n/test/reply-error.test.jsD'use strict'\n\nconst t = require('tap')\nconst test = t.test\nconst net = require('net')\nconst Fastify = require('..')\nconst statusCodes = require('http').STATUS_CODES\nconst split = require('split2')\nconst fs = require('fs')\nconst path = require('path')\n\nconst codes = Object.keys(statusCodes)\ncodes.forEach(code => {\n  if (Number(code) >= 400) helper(code)\n})\n\nfunction helper (code) {\n  test('Reply error handling - code: ' + code, t => {\n    t.plan(4)\n    const fastify = Fastify()\n    const err = new Error('winter is coming')\n\n    fastify.get('/', (req, reply) => {\n      reply\n        .code(Number(code))\n        .send(err)\n    })\n\n    fastify.inject({\n      method: 'GET',\n      url: '/'\n    }, (error, res) => {\n      t.error(error)\n      t.equal(res.statusCode, Number(code))\n      t.equal(res.headers['content-type'], 'application/json; charset=utf-8')\n      t.same(\n        {\n          error: statusCodes[code],\n          message: err.message,\n          statusCode: Number(code)\n        },\n        JSON.parse(res.payload)\n      )\n    })\n  })\n}\n\ntest('preHandler hook error handling with external code', t => {\n  t.plan(3)\n  const fastify = Fastify()\n  const err = new Error('winter is coming')\n\n  fastify.addHook('preHandler', (req, reply, done) => {\n    reply.code(400)\n    done(err)\n  })\n\n  fastify.get('/', () => {})\n\n  fastify.inject({\n    method: 'GET',\n    url: '/'\n  }, (error, res) => {\n    t.error(error)\n    t.equal(res.statusCode, 400)\n    t.same(\n      {\n        error: statusCodes['400'],\n        message: err.message,\n        statusCode: 400\n      },\n      JSON.parse(res.payload)\n    )\n  })\n})\n\ntest('onRequest hook error handling with external done', t => {\n  t.plan(3)\n  const fastify = Fastify()\n  const err = new Error('winter is coming')\n\n  fastify.addHook('onRequest', (req, reply, done) => {\n    reply.code(400)\n    done(err)\n  })\n\n  fastify.get('/', () => {})\n\n  fastify.inject({\n    method: 'GET',\n    url: '/'\n  }, (error, res) => {\n    t.error(error)\n    t.equal(res.statusCode, 400)\n    t.same(\n      {\n        error: statusCodes['400'],\n        message: err.message,\n        statusCode: 400\n      },\n      JSON.parse(res.payload)\n    )\n  })\n})\n\ntest('Should reply 400 on client error', t => {\n  t.plan(2)\n\n  const fastify = Fastify()\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n\n    const client = net.connect(fastify.server.address().port)\n    client.end('oooops!')\n\n    let chunks = ''\n    client.on('data', chunk => {\n      chunks += chunk\n    })\n\n    client.once('end', () => {\n      const body = JSON.stringify({\n        error: 'Bad Request',\n        message: 'Client Error',\n        statusCode: 400\n      })\n      t.equal(`HTTP/1.1 400 Bad Request\\r\\nContent-Length: ${body.length}\\r\\nContent-Type: application/json\\r\\n\\r\\n${body}`, chunks)\n      fastify.close()\n    })\n  })\n})\n\ntest('Should set the response from client error handler', t => {\n  t.plan(5)\n\n  const responseBody = JSON.stringify({\n    error: 'Ended Request',\n    message: 'Serious Client Error',\n    statusCode: 400\n  })\n  const response = `HTTP/1.1 400 Bad Request\\r\\nContent-Length: ${responseBody.length}\\r\\nContent-Type: application/json; charset=utf-8\\r\\n\\r\\n${responseBody}`\n\n  function clientErrorHandler (err, socket) {\n    t.type(err, Error)\n\n    this.log.warn({ err }, 'Handled client error')\n    socket.end(response)\n  }\n\n  const logStream = split(JSON.parse)\n  const fastify = Fastify({\n    clientErrorHandler,\n    logger: {\n      stream: logStream,\n      level: 'warn'\n    }\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n\n    const client = net.connect(fastify.server.address().port)\n    client.end('oooops!')\n\n    let chunks = ''\n    client.on('data', chunk => {\n      chunks += chunk\n    })\n\n    client.once('end', () => {\n      t.equal(response, chunks)\n      fastify.close()\n    })\n  })\n\n  logStream.once('data', line => {\n    t.equal('Handled client error', line.msg)\n    t.equal(40, line.level, 'Log level is not warn')\n  })\n})\n\ntest('Error instance sets HTTP status code', t => {\n  t.plan(3)\n  const fastify = Fastify()\n  const err = new Error('winter is coming')\n  err.statusCode = 418\n\n  fastify.get('/', () => {\n    return Promise.reject(err)\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/'\n  }, (error, res) => {\n    t.error(error)\n    t.equal(res.statusCode, 418)\n    t.same(\n      {\n        error: statusCodes['418'],\n        message: err.message,\n        statusCode: 418\n      },\n      JSON.parse(res.payload)\n    )\n  })\n})\n\ntest('Error status code below 400 defaults to 500', t => {\n  t.plan(3)\n  const fastify = Fastify()\n  const err = new Error('winter is coming')\n  err.statusCode = 399\n\n  fastify.get('/', () => {\n    return Promise.reject(err)\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/'\n  }, (error, res) => {\n    t.error(error)\n    t.equal(res.statusCode, 500)\n    t.same(\n      {\n        error: statusCodes['500'],\n        message: err.message,\n        statusCode: 500\n      },\n      JSON.parse(res.payload)\n    )\n  })\n})\n\ntest('Error.status property support', t => {\n  t.plan(3)\n  const fastify = Fastify()\n  const err = new Error('winter is coming')\n  err.status = 418\n\n  fastify.get('/', () => {\n    return Promise.reject(err)\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/'\n  }, (error, res) => {\n    t.error(error)\n    t.equal(res.statusCode, 418)\n    t.same(\n      {\n        error: statusCodes['418'],\n        message: err.message,\n        statusCode: 418\n      },\n      JSON.parse(res.payload)\n    )\n  })\n})\n\ntest('Support rejection with values that are not Error instances', t => {\n  const objs = [\n    0,\n    '',\n    [],\n    {},\n    null,\n    undefined,\n    123,\n    'abc',\n    new RegExp(),\n    new Date(),\n    new Uint8Array()\n  ]\n  t.plan(objs.length)\n  for (const nonErr of objs) {\n    t.test('Type: ' + typeof nonErr, t => {\n      t.plan(4)\n      const fastify = Fastify()\n\n      fastify.get('/', () => {\n        return Promise.reject(nonErr)\n      })\n\n      fastify.setErrorHandler((err, request, reply) => {\n        if (typeof err === 'object') {\n          t.same(err, nonErr)\n        } else {\n          t.equal(err, nonErr)\n        }\n        reply.code(500).send('error')\n      })\n\n      fastify.inject({\n        method: 'GET',\n        url: '/'\n      }, (error, res) => {\n        t.error(error)\n        t.equal(res.statusCode, 500)\n        t.equal(res.payload, 'error')\n      })\n    })\n  }\n})\n\ntest('invalid schema - ajv', t => {\n  t.plan(4)\n\n  const fastify = Fastify()\n  fastify.get('/', {\n    schema: {\n      querystring: {\n        type: 'object',\n        properties: {\n          id: { type: 'number' }\n        }\n      }\n    }\n  }, (req, reply) => {\n    t.fail('we should not be here')\n  })\n\n  fastify.setErrorHandler((err, request, reply) => {\n    t.ok(Array.isArray(err.validation))\n    reply.code(400).send('error')\n  })\n\n  fastify.inject({\n    url: '/?id=abc',\n    method: 'GET'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 400)\n    t.equal(res.payload, 'error')\n  })\n})\n\ntest('should set the status code and the headers from the error object (from route handler) (no custom error handler)', t => {\n  t.plan(4)\n  const fastify = Fastify()\n\n  fastify.get('/', (req, reply) => {\n    const error = new Error('kaboom')\n    error.headers = { hello: 'world' }\n    error.statusCode = 400\n    reply.send(error)\n  })\n\n  fastify.inject({\n    url: '/',\n    method: 'GET'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 400)\n    t.equal(res.headers.hello, 'world')\n    t.same(JSON.parse(res.payload), {\n      error: 'Bad Request',\n      message: 'kaboom',\n      statusCode: 400\n    })\n  })\n})\n\ntest('should set the status code and the headers from the error object (from custom error handler)', t => {\n  t.plan(6)\n  const fastify = Fastify()\n\n  fastify.get('/', (req, reply) => {\n    const error = new Error('ouch')\n    error.statusCode = 401\n    reply.send(error)\n  })\n\n  fastify.setErrorHandler((err, request, reply) => {\n    t.equal(err.message, 'ouch')\n    t.equal(reply.raw.statusCode, 200)\n    const error = new Error('kaboom')\n    error.headers = { hello: 'world' }\n    error.statusCode = 400\n    reply.send(error)\n  })\n\n  fastify.inject({\n    url: '/',\n    method: 'GET'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 400)\n    t.equal(res.headers.hello, 'world')\n    t.same(JSON.parse(res.payload), {\n      error: 'Bad Request',\n      message: 'kaboom',\n      statusCode: 400\n    })\n  })\n})\n\n// Issue 595 https://github.com/fastify/fastify/issues/595\ntest('\\'*\\' should throw an error due to serializer can not handle the payload type', t => {\n  t.plan(3)\n  const fastify = Fastify()\n\n  fastify.get('/', (req, reply) => {\n    reply.type('text/html')\n    try {\n      reply.send({})\n    } catch (err) {\n      t.type(err, TypeError)\n      t.equal(err.code, 'FST_ERR_REP_INVALID_PAYLOAD_TYPE')\n      t.equal(err.message, \"Attempted to send payload of invalid type 'object'. Expected a string or Buffer.\")\n    }\n  })\n\n  fastify.inject({\n    url: '/',\n    method: 'GET'\n  }, (e, res) => {\n    t.fail('should not be called')\n  })\n})\n\ntest('should throw an error if the custom serializer does not serialize the payload to a valid type', t => {\n  t.plan(3)\n  const fastify = Fastify()\n\n  fastify.get('/', (req, reply) => {\n    try {\n      reply\n        .type('text/html')\n        .serializer(payload => payload)\n        .send({})\n    } catch (err) {\n      t.type(err, TypeError)\n      t.equal(err.code, 'FST_ERR_REP_INVALID_PAYLOAD_TYPE')\n      t.equal(err.message, \"Attempted to send payload of invalid type 'object'. Expected a string or Buffer.\")\n    }\n  })\n\n  fastify.inject({\n    url: '/',\n    method: 'GET'\n  }, (e, res) => {\n    t.fail('should not be called')\n  })\n})\n\ntest('should not set headers or status code for custom error handler', t => {\n  t.plan(7)\n\n  const fastify = Fastify()\n  fastify.get('/', function (req, reply) {\n    const err = new Error('kaboom')\n    err.headers = {\n      'fake-random-header': 'abc'\n    }\n    reply.send(err)\n  })\n\n  fastify.setErrorHandler(async (err, req, res) => {\n    t.equal(res.statusCode, 200)\n    t.equal('fake-random-header' in res.headers, false)\n    return res.code(500).send(err.message)\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 500)\n    t.equal('fake-random-header' in res.headers, false)\n    t.equal(res.headers['content-length'], ('kaboom'.length).toString())\n    t.same(res.payload, 'kaboom')\n  })\n})\n\ntest('error thrown by custom error handler routes to default error handler', t => {\n  t.plan(6)\n\n  const fastify = Fastify()\n\n  const error = new Error('kaboom')\n  error.headers = {\n    'fake-random-header': 'abc'\n  }\n\n  fastify.get('/', function (req, reply) {\n    reply.send(error)\n  })\n\n  const newError = new Error('kabong')\n\n  fastify.setErrorHandler(async (err, req, res) => {\n    t.equal(res.statusCode, 200)\n    t.equal('fake-random-header' in res.headers, false)\n    t.same(err.headers, error.headers)\n\n    return res.send(newError)\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 500)\n    t.same(JSON.parse(res.payload), {\n      error: statusCodes['500'],\n      message: newError.message,\n      statusCode: 500\n    })\n  })\n})\n\n// Refs: https://github.com/fastify/fastify/pull/4484#issuecomment-1367301750\ntest('allow re-thrown error to default error handler when route handler is async and error handler is sync', t => {\n  t.plan(4)\n  const fastify = Fastify()\n\n  fastify.setErrorHandler(function (error) {\n    t.equal(error.message, 'kaboom')\n    throw Error('kabong')\n  })\n\n  fastify.get('/', async function () {\n    throw Error('kaboom')\n  })\n\n  fastify.inject({\n    url: '/',\n    method: 'GET'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 500)\n    t.same(JSON.parse(res.payload), {\n      error: statusCodes['500'],\n      message: 'kabong',\n      statusCode: 500\n    })\n  })\n})\n\n// Issue 2078 https://github.com/fastify/fastify/issues/2078\n// Supported error code list: http://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml\nconst invalidErrorCodes = [\n  undefined,\n  null,\n  'error_code',\n\n  // out of the 100-599 range:\n  0,\n  1,\n  99,\n  600,\n  700\n]\ninvalidErrorCodes.forEach((invalidCode) => {\n  test(`should throw error if error code is ${invalidCode}`, t => {\n    t.plan(2)\n    const fastify = Fastify()\n    fastify.get('/', (request, reply) => {\n      try {\n        return reply.code(invalidCode).send('You should not read this')\n      } catch (err) {\n        t.equal(err.code, 'FST_ERR_BAD_STATUS_CODE')\n        t.equal(err.message, 'Called reply with an invalid status code: ' + invalidCode)\n      }\n    })\n    fastify.inject({\n      url: '/',\n      method: 'GET'\n    }, (e, res) => {\n      t.fail('should not be called')\n    })\n  })\n})\n\ntest('error handler is triggered when a string is thrown from sync handler', t => {\n  t.plan(3)\n\n  const fastify = Fastify()\n\n  const throwable = 'test'\n  const payload = 'error'\n\n  fastify.get('/', function (req, reply) {\n    // eslint-disable-next-line no-throw-literal\n    throw throwable\n  })\n\n  fastify.setErrorHandler((err, req, res) => {\n    t.equal(err, throwable)\n\n    res.send(payload)\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.payload, payload)\n  })\n})\n\ntest('status code should be set to 500 and return an error json payload if route handler throws any non Error object expression', async t => {\n  t.plan(2)\n  const fastify = Fastify()\n\n  fastify.get('/', () => {\n    /* eslint-disable-next-line */\n    throw { foo: 'bar' }\n  })\n\n  // ----\n  const reply = await fastify.inject({ method: 'GET', url: '/' })\n  t.equal(reply.statusCode, 500)\n  t.equal(JSON.parse(reply.body).foo, 'bar')\n})\n\ntest('should preserve the status code set by the user if an expression is thrown in a sync route', async t => {\n  t.plan(2)\n  const fastify = Fastify()\n\n  fastify.get('/', (_, rep) => {\n    rep.status(501)\n\n    /* eslint-disable-next-line */\n    throw { foo: 'bar' }\n  })\n\n  // ----\n  const reply = await fastify.inject({ method: 'GET', url: '/' })\n  t.equal(reply.statusCode, 501)\n  t.equal(JSON.parse(reply.body).foo, 'bar')\n})\n\ntest('should trigger error handlers if a sync route throws any non-error object', async t => {\n  t.plan(2)\n\n  const fastify = Fastify()\n\n  const throwable = 'test'\n  const payload = 'error'\n\n  fastify.get('/', function async (req, reply) {\n    // eslint-disable-next-line no-throw-literal\n    throw throwable\n  })\n\n  fastify.setErrorHandler((err, req, res) => {\n    t.equal(err, throwable)\n    res.code(500).send(payload)\n  })\n\n  const reply = await fastify.inject({ method: 'GET', url: '/' })\n  t.equal(reply.statusCode, 500)\n})\n\ntest('should trigger error handlers if a sync route throws undefined', async t => {\n  t.plan(1)\n\n  const fastify = Fastify()\n\n  fastify.get('/', function async (req, reply) {\n    // eslint-disable-next-line no-throw-literal\n    throw undefined\n  })\n\n  const reply = await fastify.inject({ method: 'GET', url: '/' })\n  t.equal(reply.statusCode, 500)\n})\n\ntest('setting content-type on reply object should not hang the server case 1', t => {\n  t.plan(2)\n  const fastify = Fastify()\n\n  fastify.get('/', (req, reply) => {\n    reply\n      .code(200)\n      .headers({ 'content-type': 'text/plain; charset=utf-32' })\n      .send(JSON.stringify({ bar: 'foo', baz: 'foobar' }))\n  })\n\n  fastify.inject({\n    url: '/',\n    method: 'GET'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 200)\n  })\n})\n\ntest('setting content-type on reply object should not hang the server case 2', async t => {\n  t.plan(1)\n  const fastify = Fastify()\n\n  fastify.get('/', (req, reply) => {\n    reply\n      .code(200)\n      .headers({ 'content-type': 'text/plain; charset=utf-8' })\n      .send({ bar: 'foo', baz: 'foobar' })\n  })\n\n  try {\n    await fastify.listen({ port: 0 })\n    const res = await fastify.inject({\n      url: '/',\n      method: 'GET'\n    })\n    t.same({\n      error: 'Internal Server Error',\n      message: 'Attempted to send payload of invalid type \\'object\\'. Expected a string or Buffer.',\n      statusCode: 500,\n      code: 'FST_ERR_REP_INVALID_PAYLOAD_TYPE'\n    },\n    res.json())\n  } catch (error) {\n    t.error(error)\n  } finally {\n    await fastify.close()\n  }\n})\n\ntest('setting content-type on reply object should not hang the server case 3', t => {\n  t.plan(2)\n  const fastify = Fastify()\n\n  fastify.get('/', (req, reply) => {\n    reply\n      .code(200)\n      .headers({ 'content-type': 'application/json' })\n      .send({ bar: 'foo', baz: 'foobar' })\n  })\n\n  fastify.inject({\n    url: '/',\n    method: 'GET'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 200)\n  })\n})\n\ntest('pipe stream inside error handler should not cause error', t => {\n  t.plan(3)\n  const location = path.join(__dirname, '..', 'package.json')\n  const json = JSON.parse(fs.readFileSync(path.join(__dirname, '..', 'package.json')).toString('utf8'))\n\n  const fastify = Fastify()\n\n  fastify.setErrorHandler((_error, _request, reply) => {\n    const stream = fs.createReadStream(location)\n    reply.code(400).type('application/json; charset=utf-8').send(stream)\n  })\n\n  fastify.get('/', (request, reply) => {\n    throw new Error('This is an error.')\n  })\n\n  fastify.inject({\n    url: '/',\n    method: 'GET'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 400)\n    t.same(JSON.parse(res.payload), json)\n  })\n})\n/lib/error-handler.js\u0011'use strict'\n\nconst statusCodes = require('http').STATUS_CODES\nconst wrapThenable = require('./wrapThenable')\nconst {\n  kReplyHeaders,\n  kReplyNextErrorHandler,\n  kReplyIsRunningOnErrorHook,\n  kReplyHasStatusCode,\n  kRouteContext\n} = require('./symbols.js')\n\nconst {\n  FST_ERR_REP_INVALID_PAYLOAD_TYPE,\n  FST_ERR_FAILED_ERROR_SERIALIZATION\n} = require('./errors')\n\nconst { getSchemaSerializer } = require('./schemas')\n\nconst serializeError = require('./error-serializer')\n\nconst rootErrorHandler = {\n  func: defaultErrorHandler,\n  toJSON () {\n    return this.func.name.toString() + '()'\n  }\n}\n\nfunction handleError (reply, error, cb) {\n  reply[kReplyIsRunningOnErrorHook] = false\n\n  const context = reply[kRouteContext]\n  if (reply[kReplyNextErrorHandler] === false) {\n    fallbackErrorHandler(error, reply, function (reply, payload) {\n      try {\n        reply.raw.writeHead(reply.raw.statusCode, reply[kReplyHeaders])\n      } catch (error) {\n        reply.log.warn(\n          { req: reply.request, res: reply, err: error },\n          error && error.message\n        )\n        reply.raw.writeHead(reply.raw.statusCode)\n      }\n      reply.raw.end(payload)\n    })\n    return\n  }\n  const errorHandler = reply[kReplyNextErrorHandler] || context.errorHandler\n\n  // In case the error handler throws, we set the next errorHandler so we can error again\n  reply[kReplyNextErrorHandler] = Object.getPrototypeOf(errorHandler)\n\n  // we need to remove content-type to allow content-type guessing for serialization\n  delete reply[kReplyHeaders]['content-type']\n  delete reply[kReplyHeaders]['content-length']\n\n  const func = errorHandler.func\n\n  if (!func) {\n    reply[kReplyNextErrorHandler] = false\n    fallbackErrorHandler(error, reply, cb)\n    return\n  }\n\n  const result = func(error, reply.request, reply)\n  if (result !== undefined) {\n    if (result !== null && typeof result.then === 'function') {\n      wrapThenable(result, reply)\n    } else {\n      reply.send(result)\n    }\n  }\n}\n\nfunction defaultErrorHandler (error, request, reply) {\n  setErrorHeaders(error, reply)\n  if (!reply[kReplyHasStatusCode] || reply.statusCode === 200) {\n    const statusCode = error.statusCode || error.status\n    reply.code(statusCode >= 400 ? statusCode : 500)\n  }\n  if (reply.statusCode < 500) {\n    reply.log.info(\n      { res: reply, err: error },\n      error && error.message\n    )\n  } else {\n    reply.log.error(\n      { req: request, res: reply, err: error },\n      error && error.message\n    )\n  }\n  reply.send(error)\n}\n\nfunction fallbackErrorHandler (error, reply, cb) {\n  const res = reply.raw\n  const statusCode = reply.statusCode\n  let payload\n  try {\n    const serializerFn = getSchemaSerializer(reply[kRouteContext], statusCode, reply[kReplyHeaders]['content-type'])\n    payload = (serializerFn === false)\n      ? serializeError({\n        error: statusCodes[statusCode + ''],\n        code: error.code,\n        message: error.message,\n        statusCode\n      })\n      : serializerFn(Object.create(error, {\n        error: { value: statusCodes[statusCode + ''] },\n        message: { value: error.message },\n        statusCode: { value: statusCode }\n      }))\n  } catch (err) {\n    // error is always FST_ERR_SCH_SERIALIZATION_BUILD because this is called from route/compileSchemasForSerialization\n    reply.log.error({ err, statusCode: res.statusCode }, 'The serializer for the given status code failed')\n    reply.code(500)\n    payload = serializeError(new FST_ERR_FAILED_ERROR_SERIALIZATION(err.message, error.message))\n  }\n\n  if (typeof payload !== 'string' && !Buffer.isBuffer(payload)) {\n    payload = serializeError(new FST_ERR_REP_INVALID_PAYLOAD_TYPE(typeof payload))\n  }\n\n  reply[kReplyHeaders]['content-type'] = 'application/json; charset=utf-8'\n  reply[kReplyHeaders]['content-length'] = '' + Buffer.byteLength(payload)\n\n  cb(reply, payload)\n}\n\nfunction buildErrorHandler (parent = rootErrorHandler, func) {\n  if (!func) {\n    return parent\n  }\n\n  const errorHandler = Object.create(parent)\n  errorHandler.func = func\n  return errorHandler\n}\n\nfunction setErrorHeaders (error, reply) {\n  const res = reply.raw\n  let statusCode = res.statusCode\n  statusCode = (statusCode >= 400) ? statusCode : 500\n  // treat undefined and null as same\n  if (error != null) {\n    if (error.headers !== undefined) {\n      reply.headers(error.headers)\n    }\n    if (error.status >= 400) {\n      statusCode = error.status\n    } else if (error.statusCode >= 400) {\n      statusCode = error.statusCode\n    }\n  }\n  res.statusCode = statusCode\n}\n\nmodule.exports = {\n  buildErrorHandler,\n  handleError\n}\n/test/output-validation.test.js\u000e9'use strict'\n\nconst t = require('tap')\nconst test = t.test\nconst sget = require('simple-get').concat\nconst fastify = require('..')()\n\nconst opts = {\n  schema: {\n    response: {\n      200: {\n        type: 'object',\n        properties: {\n          hello: {\n            type: 'string'\n          }\n        }\n      },\n      '2xx': {\n        type: 'object',\n        properties: {\n          hello: {\n            type: 'number'\n          }\n        }\n      }\n    }\n  }\n}\n\ntest('shorthand - output string', t => {\n  t.plan(1)\n  try {\n    fastify.get('/string', opts, function (req, reply) {\n      reply.code(200).send({ hello: 'world' })\n    })\n    t.pass()\n  } catch (e) {\n    t.fail()\n  }\n})\n\ntest('shorthand - output number', t => {\n  t.plan(1)\n  try {\n    fastify.get('/number', opts, function (req, reply) {\n      reply.code(201).send({ hello: 55 })\n    })\n    t.pass()\n  } catch (e) {\n    t.fail()\n  }\n})\n\ntest('wrong object for schema - output', t => {\n  t.plan(1)\n  try {\n    fastify.get('/wrong-object-for-schema', opts, function (req, reply) {\n      // will send { }\n      reply.code(201).send({ hello: 'world' })\n    })\n    t.pass()\n  } catch (e) {\n    t.fail()\n  }\n})\n\ntest('empty response', t => {\n  t.plan(1)\n  try {\n    // no checks\n    fastify.get('/empty', opts, function (req, reply) {\n      reply.code(204).send()\n    })\n    t.pass()\n  } catch (e) {\n    t.fail()\n  }\n})\n\ntest('unlisted response code', t => {\n  t.plan(1)\n  try {\n    fastify.get('/400', opts, function (req, reply) {\n      reply.code(400).send({ hello: 'DOOM' })\n    })\n    t.pass()\n  } catch (e) {\n    t.fail()\n  }\n})\n\nfastify.listen({ port: 0 }, err => {\n  t.error(err)\n  t.teardown(() => { fastify.close() })\n\n  test('shorthand - string get ok', t => {\n    t.plan(4)\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port + '/string'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(response.headers['content-length'], '' + body.length)\n      t.same(JSON.parse(body), { hello: 'world' })\n    })\n  })\n\n  test('shorthand - number get ok', t => {\n    t.plan(4)\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port + '/number'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 201)\n      t.equal(response.headers['content-length'], '' + body.length)\n      t.same(JSON.parse(body), { hello: 55 })\n    })\n  })\n\n  test('shorthand - wrong-object-for-schema', t => {\n    t.plan(4)\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port + '/wrong-object-for-schema'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 500)\n      t.equal(response.headers['content-length'], '' + body.length)\n      t.same(JSON.parse(body), {\n        statusCode: 500,\n        error: 'Internal Server Error',\n        message: 'The value \"world\" cannot be converted to a number.'\n      })\n    })\n  })\n\n  test('shorthand - empty', t => {\n    t.plan(2)\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port + '/empty'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 204)\n    })\n  })\n\n  test('shorthand - 400', t => {\n    t.plan(4)\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port + '/400'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 400)\n      t.equal(response.headers['content-length'], '' + body.length)\n      t.same(JSON.parse(body), { hello: 'DOOM' })\n    })\n  })\n})\n/test/esm/other.mjsrimport t from 'tap'\n\nasync function other (fastify, opts) {\n  t.equal(fastify.foo, 'bar')\n}\n\nexport default other\n/README.md;<div align=\"center\"> <a href=\"https://fastify.io/\">\n    <img\n      src=\"https://github.com/fastify/graphics/raw/HEAD/fastify-landscape-outlined.svg\"\n      width=\"650\"\n      height=\"auto\"\n    />\n  </a>\n</div>\n\n<div align=\"center\">\n\n[![CI](https://github.com/fastify/fastify/workflows/ci/badge.svg)](https://github.com/fastify/fastify/actions/workflows/ci.yml)\n[![Package Manager\nCI](https://github.com/fastify/fastify/workflows/package-manager-ci/badge.svg)](https://github.com/fastify/fastify/actions/workflows/package-manager-ci.yml)\n[![Web\nSIte](https://github.com/fastify/fastify/workflows/website/badge.svg)](https://github.com/fastify/fastify/actions/workflows/website.yml)\n[![js-standard-style](https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat)](https://standardjs.com/)\n\n</div>\n\n<div align=\"center\">\n\n[![NPM\nversion](https://img.shields.io/npm/v/fastify.svg?style=flat)](https://www.npmjs.com/package/fastify)\n[![NPM\ndownloads](https://img.shields.io/npm/dm/fastify.svg?style=flat)](https://www.npmjs.com/package/fastify)\n[![Security Responsible\nDisclosure](https://img.shields.io/badge/Security-Responsible%20Disclosure-yellow.svg)](https://github.com/fastify/fastify/blob/main/SECURITY.md)\n[![Discord](https://img.shields.io/discord/725613461949906985)](https://discord.gg/fastify)\n\n</div>\n\n<br />\n\nAn efficient server implies a lower cost of the infrastructure, a better\nresponsiveness under load and happy users. How can you efficiently handle the\nresources of your server, knowing that you are serving the highest number of\nrequests as possible, without sacrificing security validations and handy\ndevelopment?\n\n - [Quick start](#quick-start)\n - [Install](#install)\n - [Example](#example)\n - [Fastify v1.x and v2.x](#fastify-v1x-and-v2x)\n - [Core features](#core-features)\n - [Benchmarks](#benchmarks)\n - [Documentation](#documentation)\n - [Ecosystem](#ecosystem)\n - [Support](#support)\n - [Team](#team)\n - [Hosted by](#hosted-by)\n - [License](#license)\n\nEnter Fastify. Fastify is a web framework highly focused on providing the best\ndeveloper experience with the least overhead and a powerful plugin architecture.\nIt is inspired by Hapi and Express and as far as we know, it is one of the\nfastest web frameworks in town.\n\nThis branch refers to the Fastify v4 release. Check out the\n[v3.x](https://github.com/fastify/fastify/tree/v3.x) branch for v3.\n\n### Quick start\n\nCreate a folder and make it your current working directory:\n\n```sh\nmkdir my-app\ncd my-app\n```\n\nGenerate a fastify project with `npm init`:\n\n```sh\nnpm init fastify\n```\n\nInstall dependencies:\n\n```sh\nnpm i\n```\n\nTo start the app in dev mode:\n\n```sh\nnpm run dev\n```\n\nFor production mode:\n\n```sh\nnpm start\n```\n\nUnder the hood `npm init` downloads and runs [Fastify\nCreate](https://github.com/fastify/create-fastify), which in turn uses the\ngenerate functionality of [Fastify CLI](https://github.com/fastify/fastify-cli).\n\n\n### Install\n\nTo install Fastify in an existing project as a dependency:\n\nInstall with npm:\n```sh\nnpm i fastify\n```\nInstall with yarn:\n```sh\nyarn add fastify\n```\n\n### Example\n\n```js\n// Require the framework and instantiate it\n\n// ESM\nimport Fastify from 'fastify'\nconst fastify = Fastify({\n  logger: true\n})\n// CommonJs\nconst fastify = require('fastify')({\n  logger: true\n})\n\n// Declare a route\nfastify.get('/', (request, reply) => {\n  reply.send({ hello: 'world' })\n})\n\n// Run the server!\nfastify.listen({ port: 3000 }, (err, address) => {\n  if (err) throw err\n  // Server is now listening on ${address}\n})\n```\n\nwith async-await:\n\n```js\n// ESM\nimport Fastify from 'fastify'\nconst fastify = Fastify({\n  logger: true\n})\n// CommonJs\nconst fastify = require('fastify')({\n  logger: true\n})\n\nfastify.get('/', async (request, reply) => {\n  reply.type('application/json').code(200)\n  return { hello: 'world' }\n})\n\nfastify.listen({ port: 3000 }, (err, address) => {\n  if (err) throw err\n  // Server is now listening on ${address}\n})\n```\n\nDo you want to know more? Head to the <a\nhref=\"./docs/Guides/Getting-Started.md\"><code><b>Getting Started</b></code></a>.\n\n\n### Fastify v1.x and v2.x\n\nCode for Fastify's **v1.x** is in [**`branch\n1.x`**](https://github.com/fastify/fastify/tree/1.x), so all Fastify 1.x related\nchanges should be based on **`branch 1.x`**. In a similar way, all Fastify\n**v2.x** related changes should be based on [**`branch\n2.x`**](https://github.com/fastify/fastify/tree/2.x).\n\n> ## Note\n> `.listen` binds to the local host, `localhost`, interface by default\n> (`127.0.0.1` or `::1`, depending on the operating system configuration). If\n> you are running Fastify in a container (Docker,\n> [GCP](https://cloud.google.com/), etc.), you may need to bind to `0.0.0.0`. Be\n> careful when deciding to listen on all interfaces; it comes with inherent\n> [security\n> risks](https://web.archive.org/web/20170711105010/https://snyk.io/blog/mongodb-hack-and-secure-defaults/).\n> See [the documentation](./docs/Reference/Server.md#listen) for more\n> information.\n\n### Core features\n\n- **Highly performant:** as far as we know, Fastify is one of the fastest web\n  frameworks in town, depending on the code complexity we can serve up to 76+\n  thousand requests per second.\n- **Extendible:** Fastify is fully extensible via its hooks, plugins and\n  decorators.\n- **Schema based:** even if it is not mandatory we recommend to use [JSON\n  Schema](https://json-schema.org/) to validate your routes and serialize your\n  outputs, internally Fastify compiles the schema in a highly performant\n  function.\n- **Logging:** logs are extremely important but are costly; we chose the best\n  logger to almost remove this cost, [Pino](https://github.com/pinojs/pino)!\n- **Developer friendly:** the framework is built to be very expressive and help\n  the developer in their daily use, without sacrificing performance and\n  security.\n\n### Benchmarks\n\n__Machine:__ EX41S-SSD, Intel Core i7, 4Ghz, 64GB RAM, 4C/8T, SSD.\n\n__Method:__: `autocannon -c 100 -d 40 -p 10 localhost:3000` * 2, taking the\nsecond average\n\n| Framework          | Version                    | Router?      |  Requests/sec |\n| :----------------- | :------------------------- | :----------: | ------------: |\n| Express            | 4.17.3                     | &#10003;     | 14,200        |\n| hapi               | 20.2.1                     | &#10003;     | 42,284        |\n| Restify            | 8.6.1                      | &#10003;     | 50,363        |\n| Koa                | 2.13.0                     | &#10007;     | 54,272        |\n| **Fastify**        | **4.0.0**                  | **&#10003;** | **77,193**    |\n| -                  |                            |              |               |\n| `http.Server`      | 16.14.2\t                  | &#10007;     | 74,513        |\n\nBenchmarks taken using https://github.com/fastify/benchmarks. This is a\nsynthetic, \"hello world\" benchmark that aims to evaluate the framework overhead.\nThe overhead that each framework has on your application depends on your\napplication, you should __always__ benchmark if performance matters to you.\n\n## Documentation\n* <a href=\"./docs/Guides/Getting-Started.md\"><code><b>Getting\n  Started</b></code></a>\n* <a href=\"./docs/Guides/Index.md\"><code><b>Guides</b></code></a>\n* <a href=\"./docs/Reference/Server.md\"><code><b>Server</b></code></a>\n* <a href=\"./docs/Reference/Routes.md\"><code><b>Routes</b></code></a>\n* <a\n  href=\"./docs/Reference/Encapsulation.md\"><code><b>Encapsulation</b></code></a>\n* <a href=\"./docs/Reference/Logging.md\"><code><b>Logging</b></code></a>\n* <a href=\"./docs/Reference/Middleware.md\"><code><b>Middleware</b></code></a>\n* <a href=\"./docs/Reference/Hooks.md\"><code><b>Hooks</b></code></a>\n* <a href=\"./docs/Reference/Decorators.md\"><code><b>Decorators</b></code></a>\n* <a href=\"./docs/Reference/Validation-and-Serialization.md\"><code><b>Validation\n  and Serialization</b></code></a>\n* <a href=\"./docs/Guides/Fluent-Schema.md\"><code><b>Fluent Schema</b></code></a>\n* <a href=\"./docs/Reference/Lifecycle.md\"><code><b>Lifecycle</b></code></a>\n* <a href=\"./docs/Reference/Reply.md\"><code><b>Reply</b></code></a>\n* <a href=\"./docs/Reference/Request.md\"><code><b>Request</b></code></a>\n* <a href=\"./docs/Reference/Errors.md\"><code><b>Errors</b></code></a>\n* <a href=\"./docs/Reference/ContentTypeParser.md\"><code><b>Content Type\n  Parser</b></code></a>\n* <a href=\"./docs/Reference/Plugins.md\"><code><b>Plugins</b></code></a>\n* <a href=\"./docs/Guides/Testing.md\"><code><b>Testing</b></code></a>\n* <a href=\"./docs/Guides/Benchmarking.md\"><code><b>Benchmarking</b></code></a>\n* <a href=\"./docs/Guides/Write-Plugin.md\"><code><b>How to write a good\n  plugin</b></code></a>\n* <a href=\"./docs/Guides/Plugins-Guide.md\"><code><b>Plugins Guide</b></code></a>\n* <a href=\"./docs/Reference/HTTP2.md\"><code><b>HTTP2</b></code></a>\n* <a href=\"./docs/Reference/LTS.md\"><code><b>Long Term Support</b></code></a>\n* <a href=\"./docs/Reference/TypeScript.md\"><code><b>TypeScript and types\n  support</b></code></a>\n* <a href=\"./docs/Guides/Serverless.md\"><code><b>Serverless</b></code></a>\n* <a\n  href=\"./docs/Guides/Recommendations.md\"><code><b>Recommendations</b></code></a>\n\n中文文档[地址](https://github.com/fastify/docs-chinese/blob/HEAD/README.md)\n\n## Ecosystem\n\n- [Core](./docs/Guides/Ecosystem.md#core) - Core plugins maintained by the\n  _Fastify_ [team](#team).\n- [Community](./docs/Guides/Ecosystem.md#community) - Community supported\n  plugins.\n- [Live Examples](https://github.com/fastify/example) - Multirepo with a broad\n  set of real working examples.\n- [Discord](https://discord.gg/D3FZYPy) - Join our discord server and chat with\n  the maintainers.\n\n## Support\nPlease visit [Fastify help](https://github.com/fastify/help) to view prior\nsupport issues and to ask new support questions.\n\n## Team\n\n_Fastify_ is the result of the work of a great community. Team members are\nlisted in alphabetical order.\n\n**Lead Maintainers:**\n* [__Matteo Collina__](https://github.com/mcollina),\n  <https://twitter.com/matteocollina>, <https://www.npmjs.com/~matteo.collina>\n* [__Tomas Della Vedova__](https://github.com/delvedor),\n  <https://twitter.com/delvedor>, <https://www.npmjs.com/~delvedor>\n\n### Fastify Core team\n* [__Tommaso Allevi__](https://github.com/allevo),\n  <https://twitter.com/allevitommaso>, <https://www.npmjs.com/~allevo>\n* [__Harry Brundage__](https://github.com/airhorns/),\n  <https://twitter.com/harrybrundage>, <https://www.npmjs.com/~airhorns>\n* [__David Mark Clements__](https://github.com/davidmarkclements),\n  <https://twitter.com/davidmarkclem>,\n  <https://www.npmjs.com/~davidmarkclements>\n* [__Matteo Collina__](https://github.com/mcollina),\n  <https://twitter.com/matteocollina>, <https://www.npmjs.com/~matteo.collina>\n* [__Tomas Della Vedova__](https://github.com/delvedor),\n  <https://twitter.com/delvedor>, <https://www.npmjs.com/~delvedor>\n* [__Dustin Deus__](https://github.com/StarpTech),\n  <https://twitter.com/dustindeus>, <https://www.npmjs.com/~starptech>\n* [__Ayoub El Khattabi__](https://github.com/AyoubElk),\n  <https://twitter.com/ayoubelkh>, <https://www.npmjs.com/~ayoubelk>\n* [__Denis Fäcke__](https://github.com/SerayaEryn),\n  <https://twitter.com/serayaeryn>, <https://www.npmjs.com/~serayaeryn>\n* [__Rafael Gonzaga__](https://github.com/rafaelgss),\n  <https://twitter.com/_rafaelgss>, <https://www.npmjs.com/~rafaelgss>\n* [__Vincent Le Goff__](https://github.com/zekth)\n* [__Luciano Mammino__](https://github.com/lmammino),\n  <https://twitter.com/loige>, <https://www.npmjs.com/~lmammino>\n* [__Luis Orbaiceta__](https://github.com/luisorbaiceta),\n  <https://twitter.com/luisorbai>, <https://www.npmjs.com/~luisorbaiceta>\n* [__Maksim Sinik__](https://github.com/fox1t),\n  <https://twitter.com/maksimsinik>, <https://www.npmjs.com/~fox1t>\n* [__Manuel Spigolon__](https://github.com/eomm),\n  <https://twitter.com/manueomm>, <https://www.npmjs.com/~eomm>\n* [__James Sumners__](https://github.com/jsumners),\n  <https://twitter.com/jsumners79>, <https://www.npmjs.com/~jsumners>\n\n### Fastify Plugins team\n* [__Matteo Collina__](https://github.com/mcollina),\n  <https://twitter.com/matteocollina>, <https://www.npmjs.com/~matteo.collina>\n* [__Harry Brundage__](https://github.com/airhorns/),\n  <https://twitter.com/harrybrundage>, <https://www.npmjs.com/~airhorns>\n* [__Tomas Della Vedova__](https://github.com/delvedor),\n  <https://twitter.com/delvedor>, <https://www.npmjs.com/~delvedor>\n* [__Ayoub El Khattabi__](https://github.com/AyoubElk),\n  <https://twitter.com/ayoubelkh>, <https://www.npmjs.com/~ayoubelk>\n* [__Vincent Le Goff__](https://github.com/zekth)\n* [__Salman Mitha__](https://github.com/salmanm),\n  <https://www.npmjs.com/~salmanm>\n* [__Maksim Sinik__](https://github.com/fox1t),\n  <https://twitter.com/maksimsinik>, <https://www.npmjs.com/~fox1t>\n* [__Frazer Smith__](https://github.com/Fdawgs), <https://www.npmjs.com/~fdawgs>\n* [__Manuel Spigolon__](https://github.com/eomm),\n  <https://twitter.com/manueomm>, <https://www.npmjs.com/~eomm>\n* [__Rafael Gonzaga__](https://github.com/rafaelgss),\n  <https://twitter.com/_rafaelgss>, <https://www.npmjs.com/~rafaelgss>\n* [__Simone Busoli__](https://github.com/simoneb),\n  <https://twitter.com/simonebu>, <https://www.npmjs.com/~simoneb>  \n\n### Great Contributors\nGreat contributors on a specific area in the Fastify ecosystem will be invited\nto join this group by Lead Maintainers.\n\n* [__dalisoft__](https://github.com/dalisoft), <https://twitter.com/dalisoft>,\n  <https://www.npmjs.com/~dalisoft>\n* [__Luciano Mammino__](https://github.com/lmammino),\n  <https://twitter.com/loige>, <https://www.npmjs.com/~lmammino>\n* [__Evan Shortiss__](https://github.com/evanshortiss),\n  <https://twitter.com/evanshortiss>, <https://www.npmjs.com/~evanshortiss>\n\n**Past Collaborators**\n* [__Çağatay Çalı__](https://github.com/cagataycali),\n  <https://twitter.com/cagataycali>, <https://www.npmjs.com/~cagataycali>\n* [__Trivikram Kamat__](https://github.com/trivikr),\n  <https://twitter.com/trivikram>, <https://www.npmjs.com/~trivikr>\n* [__Cemre Mengu__](https://github.com/cemremengu),\n  <https://twitter.com/cemremengu>, <https://www.npmjs.com/~cemremengu>\n* [__Nathan Woltman__](https://github.com/nwoltman),\n  <https://twitter.com/NathanWoltman>, <https://www.npmjs.com/~nwoltman>\n* [__Ethan Arrowood__](https://github.com/Ethan-Arrowood/),\n  <https://twitter.com/arrowoodtech>, <https://www.npmjs.com/~ethan_arrowood>\n\n## Hosted by\n\n[<img\nsrc=\"https://github.com/openjs-foundation/artwork/blob/main/openjs_foundation/openjs_foundation-logo-horizontal-color.png?raw=true\"\nwidth=\"250px;\"/>](https://openjsf.org/projects/#growth)\n\nWe are a [Growth\nProject](https://github.com/openjs-foundation/cross-project-council/blob/HEAD/PROJECT_PROGRESSION.md#growth-stage)\nin the [OpenJS Foundation](https://openjsf.org/).\n\n## Acknowledgements\n\nThis project is kindly sponsored by:\n- [NearForm](https://nearform.com)\n- [Platformatic](https://platformatic.dev)\n\nPast Sponsors:\n- [LetzDoIt](https://www.letzdoitapp.com/)\n\nThis list includes all companies that support one or more of the team members\nin the maintainance of this project.\n\n## License\n\nLicensed under [MIT](./LICENSE).\n\nFor your convenience, here is a list of all the licenses of our production\ndependencies:\n- MIT\n- ISC\n- BSD-3-Clause\n- BSD-2-Clause\n/docs/Guides/Index.md\t\u001d<h1 align=\"center\">Fastify</h1>\n\n## Guides Table Of Contents\n<a id=\"guides-toc\"></a>\n\nThis table of contents is in alphabetical order.\n\n+ [Benchmarking](./Benchmarking.md): This guide introduces how to benchmark\n  applications based on Fastify.\n+ [Contributing](./Contributing.md): Details how to participate in the\n  development of Fastify, and shows how to setup an environment compatible with\n  the project's code style.\n+ [Delay Accepting Requests](./Delay-Accepting-Requests.md): A practical guide\n  on how to delay serving requests to specific routes until some condition is\n  met in your application. This guide focuses on solving the problem using\n  [`Hooks`](../Reference/Hooks.md), [`Decorators`](../Reference/Decorators.md),\n  and [`Plugins`](../Reference/Plugins.md).\n+ [Detecting When Clients Abort](./Detecting-When-Clients-Abort.md): A \n  practical guide on detecting if and when a client aborts a request.\n+ [Ecosystem](./Ecosystem.md): Lists all core plugins and many known community\n  plugins.\n+ [Fluent Schema](./Fluent-Schema.md): Shows how writing JSON Schema can be\n  written with a fluent API and used in Fastify.\n+ [Getting Started](./Getting-Started.md): Introduction tutorial for Fastify.\n  This is where beginners should start.\n+ [Migration Guide (v4)](./Migration-Guide-V4.md): Details how to migrate to\n  Fastify v4 from earlier versions.\n+ [Migration Guide (v3)](./Migration-Guide-V3.md): Details how to migrate to\n  Fastify v3 from earlier versions.\n+ [Plugins Guide](./Plugins-Guide.md): An informal introduction to writing\n  Fastify plugins.\n+ [Prototype Poisoning](./Prototype-Poisoning.md): A description of how the\n  prototype poisoning attack works and is mitigated.\n+ [Recommendations](./Recommendations.md): Recommendations for how to deploy\n  Fastify into production environments.\n+ [Serverless](./Serverless.md): Details on how to deploy Fastify applications\n  in various Function as a Service (FaaS) environments.\n+ [Style Guide](./Style-Guide.md): Explains the writing style we use for the\n  Fastify documentation for those who want to contribute documentation.\n+ [Testing](./Testing.md): Explains how to write unit tests for Fastify\n  applications.\n+ [Write Plugin](./Write-Plugin.md): A set of guidelines for what the Fastify\n  team considers good practices for writing a Fastify plugin.\n/examples/asyncawait.js\u0002'use strict'\n\nconst fastify = require('../fastify')({ logger: true })\n\nconst schema = {\n  schema: {\n    response: {\n      200: {\n        type: 'object',\n        properties: {\n          hello: {\n            type: 'string'\n          }\n        }\n      }\n    }\n  }\n}\n\nfunction result () {\n  return Promise.resolve({ hello: 'world' })\n}\n\nfastify\n  .get('/await', schema, async function (req, reply) {\n    reply.header('Content-Type', 'application/json').code(200)\n    return result()\n  })\n  .get('/', schema, async function (req, reply) {\n    reply.header('Content-Type', 'application/json').code(200)\n    return { hello: 'world' }\n  })\n\nfastify.listen({ port: 3000 }, err => {\n  if (err) throw err\n})\n/test/router-options.test.js\u0013'use strict'\n\nconst test = require('tap').test\nconst Fastify = require('../')\nconst {\n  FST_ERR_BAD_URL,\n  FST_ERR_ASYNC_CONSTRAINT\n} = require('../lib/errors')\n\ntest('Should honor ignoreTrailingSlash option', async t => {\n  t.plan(4)\n  const fastify = Fastify({\n    ignoreTrailingSlash: true\n  })\n\n  fastify.get('/test', (req, res) => {\n    res.send('test')\n  })\n\n  let res = await fastify.inject('/test')\n  t.equal(res.statusCode, 200)\n  t.equal(res.payload.toString(), 'test')\n\n  res = await fastify.inject('/test/')\n  t.equal(res.statusCode, 200)\n  t.equal(res.payload.toString(), 'test')\n})\n\ntest('Should honor ignoreDuplicateSlashes option', async t => {\n  t.plan(4)\n  const fastify = Fastify({\n    ignoreDuplicateSlashes: true\n  })\n\n  fastify.get('/test//test///test', (req, res) => {\n    res.send('test')\n  })\n\n  let res = await fastify.inject('/test/test/test')\n  t.equal(res.statusCode, 200)\n  t.equal(res.payload.toString(), 'test')\n\n  res = await fastify.inject('/test//test///test')\n  t.equal(res.statusCode, 200)\n  t.equal(res.payload.toString(), 'test')\n})\n\ntest('Should honor ignoreTrailingSlash and ignoreDuplicateSlashes options', async t => {\n  t.plan(4)\n  const fastify = Fastify({\n    ignoreTrailingSlash: true,\n    ignoreDuplicateSlashes: true\n  })\n\n  fastify.get('/test//test///test', (req, res) => {\n    res.send('test')\n  })\n\n  let res = await fastify.inject('/test/test/test/')\n  t.equal(res.statusCode, 200)\n  t.equal(res.payload.toString(), 'test')\n\n  res = await fastify.inject('/test//test///test//')\n  t.equal(res.statusCode, 200)\n  t.equal(res.payload.toString(), 'test')\n})\n\ntest('Should honor maxParamLength option', t => {\n  t.plan(4)\n  const fastify = Fastify({ maxParamLength: 10 })\n\n  fastify.get('/test/:id', (req, reply) => {\n    reply.send({ hello: 'world' })\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/test/123456789'\n  }, (error, res) => {\n    t.error(error)\n    t.equal(res.statusCode, 200)\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/test/123456789abcd'\n  }, (error, res) => {\n    t.error(error)\n    t.equal(res.statusCode, 404)\n  })\n})\n\ntest('Should expose router options via getters on request and reply', t => {\n  t.plan(10)\n  const fastify = Fastify()\n  const expectedSchema = {\n    params: {\n      id: { type: 'integer' }\n    }\n  }\n\n  fastify.get('/test/:id', {\n    schema: expectedSchema\n  }, (req, reply) => {\n    t.equal(reply.context.config.url, '/test/:id')\n    t.equal(reply.context.config.method, 'GET')\n    t.equal(req.routeConfig.url, '/test/:id')\n    t.equal(req.routeConfig.method, 'GET')\n    t.same(req.routeSchema, expectedSchema)\n    t.equal(req.routerPath, '/test/:id')\n    t.equal(req.routerMethod, 'GET')\n    t.equal(req.is404, false)\n    reply.send({ hello: 'world' })\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/test/123456789'\n  }, (error, res) => {\n    t.error(error)\n    t.equal(res.statusCode, 200)\n  })\n})\n\ntest('Should set is404 flag for unmatched paths', t => {\n  t.plan(3)\n  const fastify = Fastify()\n\n  fastify.setNotFoundHandler((req, reply) => {\n    t.equal(req.is404, true)\n    reply.code(404).send({ error: 'Not Found', message: 'Four oh for', statusCode: 404 })\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/nonexist/123456789'\n  }, (error, res) => {\n    t.error(error)\n    t.equal(res.statusCode, 404)\n  })\n})\n\ntest('Should honor frameworkErrors option - FST_ERR_BAD_URL', t => {\n  t.plan(3)\n  const fastify = Fastify({\n    frameworkErrors: function (err, req, res) {\n      if (err instanceof FST_ERR_BAD_URL) {\n        t.ok(true)\n      } else {\n        t.fail()\n      }\n      res.send(`${err.message} - ${err.code}`)\n    }\n  })\n\n  fastify.get('/test/:id', (req, res) => {\n    res.send('{ hello: \\'world\\' }')\n  })\n\n  fastify.inject(\n    {\n      method: 'GET',\n      url: '/test/%world'\n    },\n    (err, res) => {\n      t.error(err)\n      t.equal(res.body, '\\'/test/%world\\' is not a valid url component - FST_ERR_BAD_URL')\n    }\n  )\n})\n\ntest('Should honor frameworkErrors option - FST_ERR_ASYNC_CONSTRAINT', t => {\n  t.plan(3)\n\n  const constraint = {\n    name: 'secret',\n    storage: function () {\n      const secrets = {}\n      return {\n        get: (secret) => { return secrets[secret] || null },\n        set: (secret, store) => { secrets[secret] = store }\n      }\n    },\n    deriveConstraint: (req, ctx, done) => {\n      done(Error('kaboom'))\n    },\n    validate () { return true }\n  }\n\n  const fastify = Fastify({\n    frameworkErrors: function (err, req, res) {\n      if (err instanceof FST_ERR_ASYNC_CONSTRAINT) {\n        t.ok(true)\n      } else {\n        t.fail()\n      }\n      res.send(`${err.message} - ${err.code}`)\n    },\n    constraints: { secret: constraint }\n  })\n\n  fastify.route({\n    method: 'GET',\n    url: '/',\n    constraints: { secret: 'alpha' },\n    handler: (req, reply) => {\n      reply.send({ hello: 'from alpha' })\n    }\n  })\n\n  fastify.inject(\n    {\n      method: 'GET',\n      url: '/'\n    },\n    (err, res) => {\n      t.error(err)\n      t.equal(res.body, 'Unexpected error from async constraint - FST_ERR_ASYNC_CONSTRAINT')\n    }\n  )\n})\n&/examples/benchmark/hooks-benchmark.js\u0003'use strict'\n\nconst fastify = require('../../fastify')({ logger: false })\n\nconst opts = {\n  schema: {\n    response: {\n      200: {\n        type: 'object',\n        properties: {\n          hello: {\n            type: 'string'\n          }\n        }\n      }\n    }\n  }\n}\n\nfastify\n  .addHook('onRequest', function (request, reply, done) {\n    done()\n  })\n  .addHook('onRequest', function (request, reply, done) {\n    done()\n  })\n\nfastify\n  .addHook('preHandler', function (request, reply, done) {\n    done()\n  })\n  .addHook('preHandler', function (request, reply, done) {\n    setImmediate(done)\n  })\n  .addHook('preHandler', function (request, reply, done) {\n    done()\n  })\n\nfastify\n  .addHook('onSend', function (request, reply, payload, done) {\n    done()\n  })\n\nfastify.get('/', opts, function (request, reply) {\n  reply.send({ hello: 'world' })\n})\n\nfastify.listen({ port: 3000 }, function (err) {\n  if (err) {\n    throw err\n  }\n})\n/test/types/dummy-plugin.tsimport { FastifyPlugin } from '../../fastify'\n\nexport interface DummyPluginOptions {\n  foo?: number\n}\n\ndeclare const DummyPlugin: FastifyPlugin<DummyPluginOptions>\n\nexport default DummyPlugin\n/test/http2/secure.test.js\u0006$'use strict'\n\nconst t = require('tap')\nconst test = t.test\nconst Fastify = require('../..')\nconst h2url = require('h2url')\nconst msg = { hello: 'world' }\n\nconst { buildCertificate } = require('../build-certificate')\nt.before(buildCertificate)\n\ntest('secure', (t) => {\n  t.plan(4)\n\n  let fastify\n  try {\n    fastify = Fastify({\n      http2: true,\n      https: {\n        key: global.context.key,\n        cert: global.context.cert\n      }\n    })\n    t.pass('Key/cert successfully loaded')\n  } catch (e) {\n    t.fail('Key/cert loading failed', e)\n  }\n\n  fastify.get('/', function (req, reply) {\n    reply.code(200).send(msg)\n  })\n  fastify.get('/proto', function (req, reply) {\n    reply.code(200).send({ proto: req.protocol })\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    t.test('https get request', async (t) => {\n      t.plan(3)\n\n      const url = `https://localhost:${fastify.server.address().port}`\n      const res = await h2url.concat({ url })\n\n      t.equal(res.headers[':status'], 200)\n      t.equal(res.headers['content-length'], '' + JSON.stringify(msg).length)\n      t.same(JSON.parse(res.body), msg)\n    })\n\n    t.test('https get request without trust proxy - protocol', async (t) => {\n      t.plan(2)\n\n      const url = `https://localhost:${fastify.server.address().port}/proto`\n      t.same(JSON.parse((await h2url.concat({ url })).body), { proto: 'https' })\n      t.same(JSON.parse((await h2url.concat({ url, headers: { 'X-Forwarded-Proto': 'lorem' } })).body), { proto: 'https' })\n    })\n  })\n})\n/test/context-config.test.js\u000f\u0006'use strict'\n\nconst t = require('tap')\nconst test = t.test\nconst { kRouteContext } = require('../lib/symbols')\nconst Fastify = require('..')\n\nconst schema = {\n  schema: { },\n  config: {\n    value1: 'foo',\n    value2: true\n  }\n}\n\nfunction handler (req, reply) {\n  reply.send(reply[kRouteContext].config)\n}\n\ntest('config', t => {\n  t.plan(9)\n  const fastify = Fastify()\n\n  fastify.get('/get', {\n    schema: schema.schema,\n    config: Object.assign({}, schema.config)\n  }, handler)\n\n  fastify.route({\n    method: 'GET',\n    url: '/route',\n    schema: schema.schema,\n    handler,\n    config: Object.assign({}, schema.config)\n  })\n\n  fastify.route({\n    method: 'GET',\n    url: '/no-config',\n    schema: schema.schema,\n    handler\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/get'\n  }, (err, response) => {\n    t.error(err)\n    t.equal(response.statusCode, 200)\n    t.same(JSON.parse(response.payload), Object.assign({ url: '/get', method: 'GET' }, schema.config))\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/route'\n  }, (err, response) => {\n    t.error(err)\n    t.equal(response.statusCode, 200)\n    t.same(JSON.parse(response.payload), Object.assign({ url: '/route', method: 'GET' }, schema.config))\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/no-config'\n  }, (err, response) => {\n    t.error(err)\n    t.equal(response.statusCode, 200)\n    t.same(JSON.parse(response.payload), { url: '/no-config', method: 'GET' })\n  })\n})\n\ntest('config with exposeHeadRoutes', t => {\n  t.plan(9)\n  const fastify = Fastify({ exposeHeadRoutes: true })\n\n  fastify.get('/get', {\n    schema: schema.schema,\n    config: Object.assign({}, schema.config)\n  }, handler)\n\n  fastify.route({\n    method: 'GET',\n    url: '/route',\n    schema: schema.schema,\n    handler,\n    config: Object.assign({}, schema.config)\n  })\n\n  fastify.route({\n    method: 'GET',\n    url: '/no-config',\n    schema: schema.schema,\n    handler\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/get'\n  }, (err, response) => {\n    t.error(err)\n    t.equal(response.statusCode, 200)\n    t.same(JSON.parse(response.payload), Object.assign({ url: '/get', method: 'GET' }, schema.config))\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/route'\n  }, (err, response) => {\n    t.error(err)\n    t.equal(response.statusCode, 200)\n    t.same(JSON.parse(response.payload), Object.assign({ url: '/route', method: 'GET' }, schema.config))\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/no-config'\n  }, (err, response) => {\n    t.error(err)\n    t.equal(response.statusCode, 200)\n    t.same(JSON.parse(response.payload), { url: '/no-config', method: 'GET' })\n  })\n})\n\ntest('config without exposeHeadRoutes', t => {\n  t.plan(9)\n  const fastify = Fastify({ exposeHeadRoutes: false })\n\n  fastify.get('/get', {\n    schema: schema.schema,\n    config: Object.assign({}, schema.config)\n  }, handler)\n\n  fastify.route({\n    method: 'GET',\n    url: '/route',\n    schema: schema.schema,\n    handler,\n    config: Object.assign({}, schema.config)\n  })\n\n  fastify.route({\n    method: 'GET',\n    url: '/no-config',\n    schema: schema.schema,\n    handler\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/get'\n  }, (err, response) => {\n    t.error(err)\n    t.equal(response.statusCode, 200)\n    t.same(JSON.parse(response.payload), Object.assign({ url: '/get', method: 'GET' }, schema.config))\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/route'\n  }, (err, response) => {\n    t.error(err)\n    t.equal(response.statusCode, 200)\n    t.same(JSON.parse(response.payload), Object.assign({ url: '/route', method: 'GET' }, schema.config))\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/no-config'\n  }, (err, response) => {\n    t.error(err)\n    t.equal(response.statusCode, 200)\n    t.same(JSON.parse(response.payload), { url: '/no-config', method: 'GET' })\n  })\n})\n/examples/simple.mjs\u0001// works on Node v14.13.0+\nimport { fastify } from '../fastify.js'\n\nconst app = fastify({\n  logger: true\n})\n\nconst schema = {\n  schema: {\n    response: {\n      200: {\n        type: 'object',\n        properties: {\n          hello: {\n            type: 'string'\n          }\n        }\n      }\n    }\n  }\n}\n\napp.get('/', schema, async function (req, reply) {\n  return { hello: 'world' }\n})\n\napp.listen({ port: 3000 }).catch(console.error)\n/.taprcĆts: false\njsx: false\nflow: false\ncheck-coverage: true\ncoverage: true\nnode-arg: --allow-natives-syntax\n\nfiles:\n  - 'test/**/*.test.js'\n/test/default-route.test.js\u0007'use strict'\n\nconst t = require('tap')\nconst test = t.test\nconst Fastify = require('..')\nconst warning = require('../lib/warnings')\n\n// Silence the standard warning logs. We will test the messages explicitly.\nprocess.removeAllListeners('warning')\n\ntest('setDefaultRoute should emit a deprecation warning', t => {\n  t.plan(2)\n\n  const fastify = Fastify()\n  const defaultRoute = (req, res) => {\n    res.end('hello from defaultRoute')\n  }\n\n  process.on('warning', onWarning)\n  function onWarning (warning) {\n    t.equal(warning.name, 'FastifyDeprecation')\n    t.equal(warning.code, 'FSTDEP014')\n  }\n\n  t.teardown(() => {\n    process.removeListener('warning', onWarning)\n    warning.emitted.set('FSTDEP014', false)\n  })\n\n  fastify.setDefaultRoute(defaultRoute)\n})\n\ntest('getDefaultRoute should emit a deprecation warning', t => {\n  t.plan(2)\n\n  const fastify = Fastify()\n\n  process.on('warning', onWarning)\n  function onWarning (warning) {\n    t.equal(warning.name, 'FastifyDeprecation')\n    t.equal(warning.code, 'FSTDEP014')\n  }\n\n  t.teardown(() => {\n    process.removeListener('warning', onWarning)\n    warning.emitted.set('FSTDEP014', false)\n  })\n\n  fastify.getDefaultRoute()\n})\n\ntest('should fail if defaultRoute is not a function', t => {\n  t.plan(1)\n\n  const fastify = Fastify()\n  const defaultRoute = {}\n\n  fastify.get('/', () => {})\n\n  try {\n    fastify.setDefaultRoute(defaultRoute)\n  } catch (error) {\n    t.equal(error.code, 'FST_ERR_DEFAULT_ROUTE_INVALID_TYPE')\n  }\n})\n\ntest('correctly sets, returns, and calls defaultRoute', t => {\n  t.plan(3)\n\n  const fastify = Fastify()\n  const defaultRoute = (req, res) => {\n    res.end('hello from defaultRoute')\n  }\n\n  fastify.setDefaultRoute(defaultRoute)\n  const returnedDefaultRoute = fastify.getDefaultRoute()\n  t.equal(returnedDefaultRoute, defaultRoute)\n\n  fastify.get('/', () => {})\n\n  fastify.inject({\n    method: 'GET',\n    url: '/random'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.body, 'hello from defaultRoute')\n  })\n})\n/test/keepAliveTimeout.test.js\u0004\u001e'use strict'\n\nconst Fastify = require('..')\nconst http = require('http')\nconst t = require('tap')\nconst test = t.test\n\ntest('keepAliveTimeout', t => {\n  t.plan(6)\n\n  try {\n    Fastify({ keepAliveTimeout: 1.3 })\n    t.fail('option must be an integer')\n  } catch (err) {\n    t.ok(err)\n  }\n\n  try {\n    Fastify({ keepAliveTimeout: [] })\n    t.fail('option must be an integer')\n  } catch (err) {\n    t.ok(err)\n  }\n\n  const httpServer = Fastify({ keepAliveTimeout: 1 }).server\n  t.equal(httpServer.keepAliveTimeout, 1)\n\n  const httpsServer = Fastify({ keepAliveTimeout: 2, https: {} }).server\n  t.equal(httpsServer.keepAliveTimeout, 2)\n\n  const http2Server = Fastify({ keepAliveTimeout: 3, http2: true }).server\n  t.not(http2Server.keepAliveTimeout, 3)\n\n  const serverFactory = (handler, _) => {\n    const server = http.createServer((req, res) => {\n      handler(req, res)\n    })\n    server.keepAliveTimeout = 5\n    return server\n  }\n  const customServer = Fastify({ keepAliveTimeout: 4, serverFactory }).server\n  t.equal(customServer.keepAliveTimeout, 5)\n})\n/examples/plugin.js\u0001\u0006'use strict'\n\nmodule.exports = function (fastify, opts, done) {\n  fastify\n    .get('/', opts, function (req, reply) {\n      reply.send({ hello: 'world' })\n    })\n    .post('/', opts, function (req, reply) {\n      reply.send({ hello: 'world' })\n    })\n  done()\n}\n\"/docs/Guides/Migration-Guide-V3.md\"# V3 Migration Guide\n\nThis guide is intended to help with migration from Fastify v2 to v3.\n\nBefore beginning please ensure that any deprecation warnings from v2 are fixed.\nAll v2 deprecations have been removed and they will no longer work after\nupgrading. ([#1750](https://github.com/fastify/fastify/pull/1750))\n\n## Breaking changes\n\n### Changed middleware support ([#2014](https://github.com/fastify/fastify/pull/2014))\n\nFrom Fastify v3, middleware support does not come out-of-the-box with the\nframework itself.\n\nIf you use Express middleware in your application, please install and register\nthe [`@fastify/express`](https://github.com/fastify/fastify-express) or\n[`@fastify/middie`](https://github.com/fastify/middie) plugin before doing so.\n\n**v2:**\n\n```js\n// Using the Express `cors` middleware in Fastify v2.\nfastify.use(require('cors')());\n```\n\n**v3:**\n\n```js\n// Using the Express `cors` middleware in Fastify v3.\nawait fastify.register(require('@fastify/express'));\nfastify.use(require('cors')());\n```\n\n### Changed logging serialization ([#2017](https://github.com/fastify/fastify/pull/2017))\n\nThe logging [Serializers](../Reference/Logging.md) have been updated to now\nFastify [`Request`](../Reference/Request.md) and\n[`Reply`](../Reference/Reply.md) objects instead of native ones.\n\nAny custom serializers must be updated if they rely upon `request` or `reply`\nproperties that are present on the native objects but not the Fastify objects.\n\n**v2:**\n\n```js\nconst fastify = require('fastify')({\n  logger: {\n    serializers: {\n      res(res) {\n        return {\n          statusCode: res.statusCode,\n          customProp: res.customProp\n        };\n      }\n    }\n  }\n});\n```\n\n**v3:**\n\n```js\nconst fastify = require('fastify')({\n  logger: {\n    serializers: {\n      res(reply) {\n        return {\n          statusCode: reply.statusCode, // No change required\n          customProp: reply.raw.customProp // Log custom property from res object\n        };\n      }\n    }\n  }\n});\n```\n\n### Changed schema substitution ([#2023](https://github.com/fastify/fastify/pull/2023))\n\nThe non-standard `replace-way` shared schema support has been removed. This\nfeature has been replaced with JSON Schema specification compliant `$ref` based\nsubstitution. To help understand this change read [Validation and Serialization\nin Fastify\nv3](https://dev.to/eomm/validation-and-serialization-in-fastify-v3-2e8l).\n\n**v2:**\n\n```js\nconst schema = {\n  body: 'schemaId#'\n};\nfastify.route({ method, url, schema, handler });\n```\n\n**v3:**\n\n```js\nconst schema = {\n  body: {\n    $ref: 'schemaId#'\n  }\n};\nfastify.route({ method, url, schema, handler });\n```\n\n### Changed schema validation options ([#2023](https://github.com/fastify/fastify/pull/2023))\n\nThe `setSchemaCompiler` and `setSchemaResolver` options have been replaced with\nthe `setValidatorCompiler` to enable future tooling improvements. To help\nunderstand this change read [Validation and Serialization in Fastify\nv3](https://dev.to/eomm/validation-and-serialization-in-fastify-v3-2e8l).\n\n**v2:**\n\n```js\nconst fastify = Fastify();\nconst ajv = new AJV();\najv.addSchema(schemaA);\najv.addSchema(schemaB);\n\nfastify.setSchemaCompiler(schema => ajv.compile(schema));\nfastify.setSchemaResolver(ref => ajv.getSchema(ref).schema);\n```\n\n**v3:**\n\n```js\nconst fastify = Fastify();\nconst ajv = new AJV();\najv.addSchema(schemaA);\najv.addSchema(schemaB);\n\nfastify.setValidatorCompiler(({ schema, method, url, httpPart }) =>\n  ajv.compile(schema)\n);\n```\n\n### Changed preParsing hook behavior ([#2286](https://github.com/fastify/fastify/pull/2286))\n\nFrom Fastify v3, the behavior of the `preParsing` hook will change slightly\nto support request payload manipulation.\n\nThe hook now takes an additional argument, `payload`, and therefore the new hook\nsignature is `fn(request, reply, payload, done)` or `async fn(request, reply,\npayload)`.\n\nThe hook can optionally return a new stream via `done(null, stream)` or\nreturning the stream in case of async functions.\n\nIf the hook returns a new stream, it will be used instead of the original one in\nsubsequent hooks. A sample use case for this is handling compressed requests.\n\nThe new stream should add the `receivedEncodedLength` property to the stream\nthat should reflect the actual data size received from the client. For instance,\nin a compressed request it should be the size of the compressed payload. This\nproperty can (and should) be dynamically updated during `data` events.\n\nThe old syntax of Fastify v2 without payload is supported but it is deprecated.\n\n### Changed hooks behavior ([#2004](https://github.com/fastify/fastify/pull/2004))\n\nFrom Fastify v3, the behavior of `onRoute` and `onRegister` hooks will change\nslightly to support hook encapsulation.\n\n- `onRoute` - The hook will be called asynchronously. The hook is now inherited\n  when registering a new plugin within the same encapsulation scope. Thus, this\n  hook should be registered _before_ registering any plugins.\n- `onRegister` - Same as the onRoute hook. The only difference is that now the\n  very first call will no longer be the framework itself, but the first\n  registered plugin.\n\n### Changed Content Type Parser syntax ([#2286](https://github.com/fastify/fastify/pull/2286))\n\nIn Fastify v3 the content type parsers now have a single signature for parsers.\n\nThe new signatures are `fn(request, payload, done)` or `async fn(request,\npayload)`. Note that `request` is now a Fastify request, not an\n`IncomingMessage`. The payload is, by default, a stream. If the `parseAs` option\nis used in `addContentTypeParser`, then `payload` reflects the option value\n(string or buffer).\n\nThe old signatures `fn(req, [done])` or `fn(req, payload, [done])` (where `req`\nis `IncomingMessage`) are still supported but are deprecated.\n\n### Changed TypeScript support\n\nThe type system was changed in Fastify version 3. The new type system introduces\ngeneric constraining and defaulting, plus a new way to define schema types such\nas a request body, querystring, and more!\n\n**v2:**\n\n```ts\ninterface PingQuerystring {\n  foo?: number;\n}\n\ninterface PingParams {\n  bar?: string;\n}\n\ninterface PingHeaders {\n  a?: string;\n}\n\ninterface PingBody {\n  baz?: string;\n}\n\nserver.get<PingQuerystring, PingParams, PingHeaders, PingBody>(\n  '/ping/:bar',\n  opts,\n  (request, reply) => {\n    console.log(request.query); // This is of type `PingQuerystring`\n    console.log(request.params); // This is of type `PingParams`\n    console.log(request.headers); // This is of type `PingHeaders`\n    console.log(request.body); // This is of type `PingBody`\n  }\n);\n```\n\n**v3:**\n\n```ts\nserver.get<{\n  Querystring: PingQuerystring;\n  Params: PingParams;\n  Headers: PingHeaders;\n  Body: PingBody;\n}>('/ping/:bar', opts, async (request, reply) => {\n  console.log(request.query); // This is of type `PingQuerystring`\n  console.log(request.params); // This is of type `PingParams`\n  console.log(request.headers); // This is of type `PingHeaders`\n  console.log(request.body); // This is of type `PingBody`\n});\n```\n\n### Manage uncaught exception ([#2073](https://github.com/fastify/fastify/pull/2073))\n\nIn sync route handlers, if an error was thrown the server crashed by design\nwithout calling the configured `.setErrorHandler()`. This has changed and now\nall unexpected errors in sync and async routes are managed.\n\n**v2:**\n\n```js\nfastify.setErrorHandler((error, request, reply) => {\n  // this is NOT called\n  reply.send(error)\n})\nfastify.get('/', (request, reply) => {\n  const maybeAnArray = request.body.something ? [] : 'I am a string'\n  maybeAnArray.substr() // Thrown: [].substr is not a function and crash the server\n})\n```\n\n**v3:**\n\n```js\nfastify.setErrorHandler((error, request, reply) => {\n  // this IS called\n  reply.send(error)\n})\nfastify.get('/', (request, reply) => {\n  const maybeAnArray = request.body.something ? [] : 'I am a string'\n  maybeAnArray.substr() // Thrown: [].substr is not a function, but it is handled\n})\n```\n\n## Further additions and improvements\n\n- Hooks now have consistent context regardless of how they are registered\n  ([#2005](https://github.com/fastify/fastify/pull/2005))\n- Deprecated `request.req` and `reply.res` for\n  [`request.raw`](../Reference/Request.md) and\n  [`reply.raw`](../Reference/Reply.md)\n  ([#2008](https://github.com/fastify/fastify/pull/2008))\n- Removed `modifyCoreObjects` option\n  ([#2015](https://github.com/fastify/fastify/pull/2015))\n- Added [`connectionTimeout`](../Reference/Server.md#factory-connection-timeout)\n  option ([#2086](https://github.com/fastify/fastify/pull/2086))\n- Added [`keepAliveTimeout`](../Reference/Server.md#factory-keep-alive-timeout)\n  option ([#2086](https://github.com/fastify/fastify/pull/2086))\n- Added async-await support for [plugins](../Reference/Plugins.md#async-await)\n  ([#2093](https://github.com/fastify/fastify/pull/2093))\n- Added the feature to throw object as error\n  ([#2134](https://github.com/fastify/fastify/pull/2134))\n/lib/reqIdGenFactory.js\u0003'use strict'\n\nmodule.exports = function (requestIdHeader, optGenReqId) {\n  // 2,147,483,647 (2^31 − 1) stands for max SMI value (an internal optimization of V8).\n  // With this upper bound, if you'll be generating 1k ids/sec, you're going to hit it in ~25 days.\n  // This is very likely to happen in real-world applications, hence the limit is enforced.\n  // Growing beyond this value will make the id generation slower and cause a deopt.\n  // In the worst cases, it will become a float, losing accuracy.\n  const maxInt = 2147483647\n  let nextReqId = 0\n  function defaultGenReqId (req) {\n    nextReqId = (nextReqId + 1) & maxInt\n    return `req-${nextReqId.toString(36)}`\n  }\n\n  const genReqId = optGenReqId || defaultGenReqId\n\n  if (requestIdHeader) {\n    // requestIdHeader = typeof requestIdHeader === 'string' ? requestIdHeader : 'request-id'\n    return function (req) {\n      return req.headers[requestIdHeader] || genReqId(req)\n    }\n  }\n\n  return genReqId\n}\n/types/schema.d.ts\u0007import { ValidatorFactory } from '@fastify/ajv-compiler'\nimport { SerializerFactory } from '@fastify/fast-json-stringify-compiler'\nimport { FastifyInstance } from '../fastify'\n/**\n * Schemas in Fastify follow the JSON-Schema standard. For this reason\n * we have opted to not ship strict schema based types. Instead we provide\n * an example in our documentation on how to solve this problem. Check it\n * out here: https://github.com/fastify/fastify/blob/main/docs/Reference/TypeScript.md#json-schema\n */\nexport interface FastifySchema {\n  body?: unknown;\n  querystring?: unknown;\n  params?: unknown;\n  headers?: unknown;\n  response?: unknown;\n}\n\nexport interface FastifyRouteSchemaDef<T> {\n  schema: T;\n  method: string;\n  url: string;\n  httpPart?: string;\n  httpStatus?: string;\n  contentType?: string;\n}\n\nexport interface FastifySchemaValidationError {\n  keyword: string;\n  instancePath: string;\n  schemaPath: string;\n  params: Record<string, string | string[]>;\n  message?: string;\n}\n\nexport interface FastifyValidationResult {\n  (data: any): boolean | PromiseLike<any> | { error?: Error, value?: any }\n  errors?: FastifySchemaValidationError[] | null;\n}\n\n/**\n * Compiler for FastifySchema Type\n */\nexport type FastifySchemaCompiler<T> = (routeSchema: FastifyRouteSchemaDef<T>) => FastifyValidationResult\n\nexport type FastifySerializerCompiler<T> = (routeSchema: FastifyRouteSchemaDef<T>) => (data: any) => string\n\nexport interface FastifySchemaControllerOptions{\n  bucket?: (parentSchemas?: unknown) => {\n    add(schema: unknown): FastifyInstance;\n    getSchema(schemaId: string): unknown;\n    getSchemas(): Record<string, unknown>;\n  };\n  compilersFactory?: {\n    buildValidator?: ValidatorFactory;\n    buildSerializer?: SerializerFactory;\n  };\n}\n\nexport type SchemaErrorDataVar = 'body' | 'headers' | 'params' | 'querystring'\n\nexport type SchemaErrorFormatter = (errors: FastifySchemaValidationError[], dataVar: SchemaErrorDataVar) => Error\n#/test/types/type-provider.test-d.tsT\u0003import fastify, {\n  FastifyTypeProvider,\n  HookHandlerDoneFunction,\n  FastifyRequest,\n  FastifyReply,\n  FastifyInstance\n} from '../../fastify'\nimport { expectAssignable, expectError, expectType } from 'tsd'\nimport { IncomingHttpHeaders } from 'http'\nimport { Type, TSchema, Static } from '@sinclair/typebox'\nimport { FromSchema, JSONSchema } from 'json-schema-to-ts'\n\nconst server = fastify()\n\n// -------------------------------------------------------------------\n// Default (unknown)\n// -------------------------------------------------------------------\n\nexpectAssignable(server.get('/', (req) => expectType<unknown>(req.body)))\n\n// -------------------------------------------------------------------\n// Remapping\n// -------------------------------------------------------------------\n\ninterface NumberProvider extends FastifyTypeProvider { output: number } // remap all schemas to numbers\n\nexpectAssignable(server.withTypeProvider<NumberProvider>().get(\n  '/',\n  {\n    schema: {\n      body: { type: 'string' },\n      querystring: { type: 'string' },\n      headers: { type: 'string' },\n      params: { type: 'string' }\n    }\n  },\n  (req) => {\n    expectType<number & IncomingHttpHeaders>(req.headers)\n    expectType<number>(req.body)\n    expectType<number>(req.query)\n    expectType<number>(req.params)\n  }\n))\n\n// -------------------------------------------------------------------\n// Override\n// -------------------------------------------------------------------\n\ninterface OverriddenProvider extends FastifyTypeProvider { output: 'inferenced' }\n\nexpectAssignable(server.withTypeProvider<OverriddenProvider>().get<{ Body: 'override' }>(\n  '/',\n  {\n    schema: {\n      body: Type.Object({\n        x: Type.Number(),\n        y: Type.Number(),\n        z: Type.Number()\n      })\n    }\n  },\n  (req) => {\n    expectType<'override'>(req.body)\n  }\n))\n\n// -------------------------------------------------------------------\n// TypeBox\n// -------------------------------------------------------------------\n\ninterface TypeBoxProvider extends FastifyTypeProvider { output: this['input'] extends TSchema ? Static<this['input']> : unknown }\n\nexpectAssignable(server.withTypeProvider<TypeBoxProvider>().get(\n  '/',\n  {\n    schema: {\n      body: Type.Object({\n        x: Type.Number(),\n        y: Type.Number(),\n        z: Type.Number()\n      })\n    }\n  },\n  (req) => {\n    expectType<number>(req.body.x)\n    expectType<number>(req.body.y)\n    expectType<number>(req.body.z)\n  }\n))\n\nexpectAssignable<FastifyInstance>(server.withTypeProvider<TypeBoxProvider>())\n\n// -------------------------------------------------------------------\n// JsonSchemaToTs\n// -------------------------------------------------------------------\n\ninterface JsonSchemaToTsProvider extends FastifyTypeProvider { output: this['input'] extends JSONSchema ? FromSchema<this['input']> : unknown }\n\nexpectAssignable(server.withTypeProvider<JsonSchemaToTsProvider>().get(\n  '/',\n  {\n    schema: {\n      body: {\n        type: 'object',\n        properties: {\n          x: { type: 'number' },\n          y: { type: 'string' },\n          z: { type: 'boolean' }\n        }\n      } as const\n    }\n  },\n  (req) => {\n    expectType<number | undefined>(req.body.x)\n    expectType<string | undefined>(req.body.y)\n    expectType<boolean | undefined>(req.body.z)\n  }\n))\n\nexpectAssignable<FastifyInstance>(server.withTypeProvider<JsonSchemaToTsProvider>())\n\n// -------------------------------------------------------------------\n// Instance Type Remappable\n// -------------------------------------------------------------------\n\nexpectAssignable(server.withTypeProvider<TypeBoxProvider>().withTypeProvider<JsonSchemaToTsProvider>().get(\n  '/',\n  {\n    schema: {\n      body: {\n        type: 'object',\n        properties: {\n          x: { type: 'number' },\n          y: { type: 'string' },\n          z: { type: 'boolean' }\n        }\n      } as const\n    }\n  },\n  (req) => {\n    expectType<number | undefined>(req.body.x)\n    expectType<string | undefined>(req.body.y)\n    expectType<boolean | undefined>(req.body.z)\n  }\n))\n\n// -------------------------------------------------------------------\n// Request Hooks\n// -------------------------------------------------------------------\n\nexpectAssignable(server.withTypeProvider<TypeBoxProvider>().get(\n  '/',\n  {\n    schema: {\n      body: Type.Object({\n        x: Type.Number(),\n        y: Type.String(),\n        z: Type.Boolean()\n      })\n    },\n    preHandler: req => {\n      expectType<number>(req.body.x)\n      expectType<string>(req.body.y)\n      expectType<boolean>(req.body.z)\n    },\n    preParsing: req => {\n      expectType<number>(req.body.x)\n      expectType<string>(req.body.y)\n      expectType<boolean>(req.body.z)\n    },\n    preSerialization: req => {\n      expectType<number>(req.body.x)\n      expectType<string>(req.body.y)\n      expectType<boolean>(req.body.z)\n    },\n    preValidation: req => {\n      expectType<number>(req.body.x)\n      expectType<string>(req.body.y)\n      expectType<boolean>(req.body.z)\n    },\n    onError: req => {\n      expectType<number>(req.body.x)\n      expectType<string>(req.body.y)\n      expectType<boolean>(req.body.z)\n    },\n    onRequest: req => {\n      expectType<number>(req.body.x)\n      expectType<string>(req.body.y)\n      expectType<boolean>(req.body.z)\n    },\n    onResponse: req => {\n      expectType<number>(req.body.x)\n      expectType<string>(req.body.y)\n      expectType<boolean>(req.body.z)\n    },\n    onTimeout: req => {\n      expectType<number>(req.body.x)\n      expectType<string>(req.body.y)\n      expectType<boolean>(req.body.z)\n    },\n    onSend: req => {\n      expectType<number>(req.body.x)\n      expectType<string>(req.body.y)\n      expectType<boolean>(req.body.z)\n    }\n  },\n  req => {\n    expectType<number>(req.body.x)\n    expectType<string>(req.body.y)\n    expectType<boolean>(req.body.z)\n  }\n))\n\n// -------------------------------------------------------------------\n// TypeBox Reply Type\n// -------------------------------------------------------------------\n\nexpectAssignable(server.withTypeProvider<TypeBoxProvider>().get(\n  '/',\n  {\n    schema: {\n      response: {\n        200: Type.String(),\n        400: Type.Number(),\n        500: Type.Object({\n          error: Type.String()\n        })\n      }\n    }\n  },\n  async (_, res) => {\n    res.send('hello')\n    res.send(42)\n    res.send({ error: 'error' })\n  }\n))\n\n// -------------------------------------------------------------------\n// TypeBox Reply Type (Different Content-types)\n// -------------------------------------------------------------------\n\nexpectAssignable(server.withTypeProvider<TypeBoxProvider>().get(\n  '/',\n  {\n    schema: {\n      response: {\n        200: {\n          content: {\n            'text/string': {\n              schema: Type.String()\n            },\n            'application/json': {\n              schema: Type.Object({\n                msg: Type.String()\n              })\n            }\n          }\n        },\n        500: Type.Object({\n          error: Type.String()\n        })\n      }\n    }\n  },\n  async (_, res) => {\n    res.send('hello')\n    res.send({ msg: 'hello' })\n    res.send({ error: 'error' })\n  }\n))\n\n// -------------------------------------------------------------------\n// TypeBox Reply Type: Non Assignable\n// -------------------------------------------------------------------\n\nexpectError(server.withTypeProvider<TypeBoxProvider>().get(\n  '/',\n  {\n    schema: {\n      response: {\n        200: Type.String(),\n        400: Type.Number(),\n        500: Type.Object({\n          error: Type.String()\n        })\n      }\n    }\n  },\n  async (_, res) => {\n    res.send(false)\n  }\n))\n\n// -------------------------------------------------------------------\n// TypeBox Reply Type: Non Assignable (Different Content-types)\n// -------------------------------------------------------------------\n\nexpectError(server.withTypeProvider<TypeBoxProvider>().get(\n  '/',\n  {\n    schema: {\n      response: {\n        200: {\n          content: {\n            'text/string': {\n              schema: Type.String()\n            },\n            'application/json': {\n              schema: Type.Object({\n                msg: Type.String()\n              })\n            }\n          }\n        },\n        500: Type.Object({\n          error: Type.String()\n        })\n      }\n    }\n  },\n  async (_, res) => {\n    res.send(false)\n  }\n))\n\n// -------------------------------------------------------------------\n// TypeBox Reply Return Type\n// -------------------------------------------------------------------\n\nexpectAssignable(server.withTypeProvider<TypeBoxProvider>().get(\n  '/',\n  {\n    schema: {\n      response: {\n        200: Type.String(),\n        400: Type.Number(),\n        500: Type.Object({\n          error: Type.String()\n        })\n      }\n    }\n  },\n  async (_, res) => {\n    const option = 1 as 1 | 2 | 3\n    switch (option) {\n      case 1: return 'hello'\n      case 2: return 42\n      case 3: return { error: 'error' }\n    }\n  }\n))\n\n// -------------------------------------------------------------------\n// TypeBox Reply Return Type (Different Content-types)\n// -------------------------------------------------------------------\n\nexpectAssignable(server.withTypeProvider<TypeBoxProvider>().get(\n  '/',\n  {\n    schema: {\n      response: {\n        200: {\n          content: {\n            'text/string': {\n              schema: Type.String()\n            },\n            'application/json': {\n              schema: Type.Object({\n                msg: Type.String()\n              })\n            }\n          }\n        },\n        500: Type.Object({\n          error: Type.String()\n        })\n      }\n    }\n  },\n  async (_, res) => {\n    const option = 1 as 1 | 2 | 3\n    switch (option) {\n      case 1: return 'hello'\n      case 2: return { msg: 'hello' }\n      case 3: return { error: 'error' }\n    }\n  }\n))\n\n// -------------------------------------------------------------------\n// TypeBox Reply Return Type: Non Assignable\n// -------------------------------------------------------------------\n\nexpectError(server.withTypeProvider<TypeBoxProvider>().get(\n  '/',\n  {\n    schema: {\n      response: {\n        200: Type.String(),\n        400: Type.Number(),\n        500: Type.Object({\n          error: Type.String()\n        })\n      }\n    }\n  },\n  async (_, res) => {\n    return false\n  }\n))\n\n// -------------------------------------------------------------------\n// TypeBox Reply Return Type: Non Assignable (Different Content-types)\n// -------------------------------------------------------------------\n\nexpectError(server.withTypeProvider<TypeBoxProvider>().get(\n  '/',\n  {\n    schema: {\n      response: {\n        200: {\n          content: {\n            'text/string': {\n              schema: Type.String()\n            },\n            'application/json': {\n              schema: Type.Object({\n                msg: Type.String()\n              })\n            }\n          }\n        },\n        500: Type.Object({\n          error: Type.String()\n        })\n      }\n    }\n  },\n  async (_, res) => {\n    return false\n  }\n))\n\n// -------------------------------------------------------------------\n// JsonSchemaToTs Reply Type\n// -------------------------------------------------------------------\n\nexpectAssignable(server.withTypeProvider<JsonSchemaToTsProvider>().get(\n  '/',\n  {\n    schema: {\n      response: {\n        200: { type: 'string' },\n        400: { type: 'number' },\n        500: { type: 'object', properties: { error: { type: 'string' } } }\n      } as const\n    }\n  },\n  (_, res) => {\n    res.send('hello')\n    res.send(42)\n    res.send({ error: 'error' })\n  }\n))\n\n// -------------------------------------------------------------------\n// JsonSchemaToTs Reply Type (Different Content-types)\n// -------------------------------------------------------------------\n\nexpectAssignable(server.withTypeProvider<JsonSchemaToTsProvider>().get(\n  '/',\n  {\n    schema: {\n      response: {\n        200: {\n          content: {\n            'text/string': {\n              schema: { type: 'string' }\n            },\n            'application/json': {\n              schema: { type: 'object', properties: { msg: { type: 'string' } } }\n            }\n          }\n        },\n        500: { type: 'object', properties: { error: { type: 'string' } } }\n      } as const\n    }\n  },\n  (_, res) => {\n    res.send('hello')\n    res.send({ msg: 'hello' })\n    res.send({ error: 'error' })\n  }\n))\n\n// -------------------------------------------------------------------\n// JsonSchemaToTs Reply Type: Non Assignable\n// -------------------------------------------------------------------\n\nexpectError(server.withTypeProvider<JsonSchemaToTsProvider>().get(\n  '/',\n  {\n    schema: {\n      response: {\n        200: { type: 'string' },\n        400: { type: 'number' },\n        500: { type: 'object', properties: { error: { type: 'string' } } }\n      } as const\n    }\n  },\n  async (_, res) => {\n    res.send(false)\n  }\n))\n\n// -------------------------------------------------------------------\n// JsonSchemaToTs Reply Type: Non Assignable (Different Content-types)\n// -------------------------------------------------------------------\n\nexpectError(server.withTypeProvider<JsonSchemaToTsProvider>().get(\n  '/',\n  {\n    schema: {\n      response: {\n        200: {\n          content: {\n            'text/string': {\n              schema: { type: 'string' }\n            },\n            'application/json': {\n              schema: { type: 'object', properties: { msg: { type: 'string' } } }\n            }\n          }\n        },\n        500: { type: 'object', properties: { error: { type: 'string' } } }\n      } as const\n    }\n  },\n  async (_, res) => {\n    res.send(false)\n  }\n))\n\n// -------------------------------------------------------------------\n// JsonSchemaToTs Reply Type Return\n// -------------------------------------------------------------------\n\nexpectAssignable(server.withTypeProvider<JsonSchemaToTsProvider>().get(\n  '/',\n  {\n    schema: {\n      response: {\n        200: { type: 'string' },\n        400: { type: 'number' },\n        500: { type: 'object', properties: { error: { type: 'string' } } }\n      } as const\n    }\n  },\n  async (_, res) => {\n    const option = 1 as 1 | 2 | 3\n    switch (option) {\n      case 1: return 'hello'\n      case 2: return 42\n      case 3: return { error: 'error' }\n    }\n  }\n))\n\n// -------------------------------------------------------------------\n// JsonSchemaToTs Reply Type Return (Different Content-types)\n// -------------------------------------------------------------------\n\nexpectAssignable(server.withTypeProvider<JsonSchemaToTsProvider>().get(\n  '/',\n  {\n    schema: {\n      response: {\n        200: {\n          content: {\n            'text/string': {\n              schema: { type: 'string' }\n            },\n            'application/json': {\n              schema: { type: 'object', properties: { msg: { type: 'string' } } }\n            }\n          }\n        },\n        500: { type: 'object', properties: { error: { type: 'string' } } }\n      } as const\n    }\n  },\n  async (_, res) => {\n    const option = 1 as 1 | 2 | 3\n    switch (option) {\n      case 1: return 'hello'\n      case 2: return { msg: 'hello' }\n      case 3: return { error: 'error' }\n    }\n  }\n))\n\n// -------------------------------------------------------------------\n// JsonSchemaToTs Reply Type Return: Non Assignable\n// -------------------------------------------------------------------\n\nexpectError(server.withTypeProvider<JsonSchemaToTsProvider>().get(\n  '/',\n  {\n    schema: {\n      response: {\n        200: { type: 'string' },\n        400: { type: 'number' },\n        500: { type: 'object', properties: { error: { type: 'string' } } }\n      } as const\n    }\n  },\n  async (_, res) => {\n    return false\n  }\n))\n\n// https://github.com/fastify/fastify/issues/4088\nexpectError(server.withTypeProvider<JsonSchemaToTsProvider>().get('/', {\n  schema: {\n    response: {\n      200: { type: 'string' }\n    }\n  } as const\n}, (_, res) => {\n  return { foo: 555 }\n}))\n\n// -------------------------------------------------------------------\n// JsonSchemaToTs Reply Type Return: Non Assignable (Different Content-types)\n// -------------------------------------------------------------------\n\nexpectError(server.withTypeProvider<JsonSchemaToTsProvider>().get(\n  '/',\n  {\n    schema: {\n      response: {\n        200: {\n          content: {\n            'text/string': {\n              schema: { type: 'string' }\n            },\n            'application/json': {\n              schema: { type: 'object', properties: { msg: { type: 'string' } } }\n            }\n          }\n        },\n        500: { type: 'object', properties: { error: { type: 'string' } } }\n      } as const\n    }\n  },\n  async (_, res) => {\n    return false\n  }\n))\n\n// -------------------------------------------------------------------\n// Reply Type Override\n// -------------------------------------------------------------------\n\nexpectAssignable(server.withTypeProvider<JsonSchemaToTsProvider>().get<{Reply: boolean}>(\n  '/',\n  {\n    schema: {\n      response: {\n        200: { type: 'string' },\n        400: { type: 'number' },\n        500: { type: 'object', properties: { error: { type: 'string' } } }\n      } as const\n    }\n  },\n  async (_, res) => {\n    res.send(true)\n  }\n))\n\n// -------------------------------------------------------------------\n// Reply Type Override (Different Content-types)\n// -------------------------------------------------------------------\n\nexpectAssignable(server.withTypeProvider<JsonSchemaToTsProvider>().get<{Reply: boolean}>(\n  '/',\n  {\n    schema: {\n      response: {\n        200: {\n          content: {\n            'text/string': {\n              schema: { type: 'string' }\n            },\n            'application/json': {\n              schema: { type: 'object', properties: { msg: { type: 'string' } } }\n            }\n          }\n        },\n        500: { type: 'object', properties: { error: { type: 'string' } } }\n      } as const\n    }\n  },\n  async (_, res) => {\n    res.send(true)\n  }\n))\n\n// -------------------------------------------------------------------\n// Reply Type Return Override\n// -------------------------------------------------------------------\n\nexpectAssignable(server.withTypeProvider<JsonSchemaToTsProvider>().get<{Reply: boolean}>(\n  '/',\n  {\n    schema: {\n      response: {\n        200: { type: 'string' },\n        400: { type: 'number' },\n        500: { type: 'object', properties: { error: { type: 'string' } } }\n      } as const\n    }\n  },\n  async (_, res) => {\n    return true\n  }\n))\n\n// -------------------------------------------------------------------\n// Reply Type Return Override (Different Content-types)\n// -------------------------------------------------------------------\n\nexpectAssignable(server.withTypeProvider<JsonSchemaToTsProvider>().get<{Reply: boolean}>(\n  '/',\n  {\n    schema: {\n      response: {\n        200: {\n          content: {\n            'text/string': {\n              schema: { type: 'string' }\n            },\n            'application/json': {\n              schema: { type: 'object', properties: { msg: { type: 'string' } } }\n            }\n          }\n        },\n        500: { type: 'object', properties: { error: { type: 'string' } } }\n      } as const\n    }\n  },\n  async (_, res) => {\n    return true\n  }\n))\n\n// -------------------------------------------------------------------\n// FastifyPlugin: Auxiliary\n// -------------------------------------------------------------------\n\ninterface AuxiliaryPluginProvider extends FastifyTypeProvider { output: 'plugin-auxiliary' }\n\n// Auxiliary plugins may have varying server types per application. Recommendation would be to explicitly remap instance provider context within plugin if required.\nfunction plugin<T extends FastifyInstance> (instance: T) {\n  expectAssignable(instance.withTypeProvider<AuxiliaryPluginProvider>().get(\n    '/',\n    {\n      schema: { body: null }\n    },\n    (req) => {\n      expectType<'plugin-auxiliary'>(req.body)\n    }\n  ))\n}\n\nexpectAssignable(server.withTypeProvider<AuxiliaryPluginProvider>().register(plugin).get(\n  '/',\n  {\n    schema: { body: null }\n  },\n  (req) => {\n    expectType<'plugin-auxiliary'>(req.body)\n  }\n))\n\n// -------------------------------------------------------------------\n// Handlers: Inline\n// -------------------------------------------------------------------\n\ninterface InlineHandlerProvider extends FastifyTypeProvider { output: 'handler-inline' }\n\n// Inline handlers should infer for the request parameters (non-shared)\nexpectAssignable(server.withTypeProvider<InlineHandlerProvider>().get(\n  '/',\n  {\n    onRequest: (req, res) => {\n      expectType<'handler-inline'>(req.body)\n    },\n    schema: { body: null }\n  },\n  (req) => {\n    expectType<'handler-inline'>(req.body)\n  }\n))\n\n// -------------------------------------------------------------------\n// Handlers: Auxiliary\n// -------------------------------------------------------------------\n\ninterface AuxiliaryHandlerProvider extends FastifyTypeProvider { output: 'handler-auxiliary' }\n\n// Auxiliary handlers are likely shared for multiple routes and thus should infer as unknown due to potential varying parameters\nfunction auxiliaryHandler (request: FastifyRequest, reply: FastifyReply, done: HookHandlerDoneFunction): void {\n  expectType<unknown>(request.body)\n}\n\nexpectAssignable(server.withTypeProvider<AuxiliaryHandlerProvider>().get(\n  '/',\n  {\n    onRequest: auxiliaryHandler,\n    schema: { body: null }\n  },\n  (req) => {\n    expectType<'handler-auxiliary'>(req.body)\n  }\n))\n/test/content-type.test.js\u0004'use strict'\n\nconst t = require('tap')\nconst test = t.test\nconst Fastify = require('..')\n\ntest('should remove content-type for setErrorHandler', async t => {\n  t.plan(8)\n  let count = 0\n\n  const fastify = Fastify()\n  fastify.setErrorHandler(function (error, request, reply) {\n    t.same(error.message, 'kaboom')\n    t.same(reply.hasHeader('content-type'), false)\n    reply.code(400).send({ foo: 'bar' })\n  })\n  fastify.addHook('onSend', async function (request, reply, payload) {\n    count++\n    t.same(typeof payload, 'string')\n    switch (count) {\n      case 1: {\n        // should guess the correct content-type based on payload\n        t.same(reply.getHeader('content-type'), 'text/plain; charset=utf-8')\n        throw Error('kaboom')\n      }\n      case 2: {\n        // should guess the correct content-type based on payload\n        t.same(reply.getHeader('content-type'), 'application/json; charset=utf-8')\n        return payload\n      }\n      default: {\n        t.fail('should not reach')\n      }\n    }\n  })\n  fastify.get('/', function (request, reply) {\n    reply.send('plain-text')\n  })\n\n  const { statusCode, body } = await fastify.inject({ method: 'GET', path: '/' })\n  t.same(statusCode, 400)\n  t.same(body, JSON.stringify({ foo: 'bar' }))\n})\n/test/reply-code.test.js\u0004'use strict'\n\nconst t = require('tap')\nconst test = t.test\nconst Fastify = require('..')\n\ntest('code should handle null/undefined/float', t => {\n  t.plan(8)\n\n  const fastify = Fastify()\n\n  fastify.get('/null', function (request, reply) {\n    reply.status(null).send()\n  })\n\n  fastify.get('/undefined', function (request, reply) {\n    reply.status(undefined).send()\n  })\n\n  fastify.get('/404.5', function (request, reply) {\n    reply.status(404.5).send()\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/null'\n  }, (error, res) => {\n    t.error(error)\n    t.equal(res.statusCode, 500)\n    t.same(res.json(), {\n      statusCode: 500,\n      code: 'FST_ERR_BAD_STATUS_CODE',\n      error: 'Internal Server Error',\n      message: 'Called reply with an invalid status code: null'\n    })\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/undefined'\n  }, (error, res) => {\n    t.error(error)\n    t.equal(res.statusCode, 500)\n    t.same(res.json(), {\n      statusCode: 500,\n      code: 'FST_ERR_BAD_STATUS_CODE',\n      error: 'Internal Server Error',\n      message: 'Called reply with an invalid status code: undefined'\n    })\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/404.5'\n  }, (error, res) => {\n    t.error(error)\n    t.equal(res.statusCode, 404)\n  })\n})\n/lib/noop-set.jsī'use strict'\n\nmodule.exports = function noopSet () {\n  return {\n    [Symbol.iterator]: function * () {},\n    add () {},\n    delete () {},\n    has () { return true }\n  }\n}\n\"/test/internals/hookRunner.test.js#'use strict'\n\nconst t = require('tap')\nconst test = t.test\nconst { hookRunner, onSendHookRunner } = require('../../lib/hooks')\n\ntest('hookRunner - Basic', t => {\n  t.plan(9)\n\n  hookRunner([fn1, fn2, fn3], iterator, 'a', 'b', done)\n\n  function iterator (fn, a, b, done) {\n    return fn(a, b, done)\n  }\n\n  function fn1 (a, b, done) {\n    t.equal(a, 'a')\n    t.equal(b, 'b')\n    done()\n  }\n\n  function fn2 (a, b, done) {\n    t.equal(a, 'a')\n    t.equal(b, 'b')\n    done()\n  }\n\n  function fn3 (a, b, done) {\n    t.equal(a, 'a')\n    t.equal(b, 'b')\n    done()\n  }\n\n  function done (err, a, b) {\n    t.error(err)\n    t.equal(a, 'a')\n    t.equal(b, 'b')\n  }\n})\n\ntest('hookRunner - In case of error should skip to done', t => {\n  t.plan(7)\n\n  hookRunner([fn1, fn2, fn3], iterator, 'a', 'b', done)\n\n  function iterator (fn, a, b, done) {\n    return fn(a, b, done)\n  }\n\n  function fn1 (a, b, done) {\n    t.equal(a, 'a')\n    t.equal(b, 'b')\n    done()\n  }\n\n  function fn2 (a, b, done) {\n    t.equal(a, 'a')\n    t.equal(b, 'b')\n    done(new Error('kaboom'))\n  }\n\n  function fn3 () {\n    t.fail('We should not be here')\n  }\n\n  function done (err, a, b) {\n    t.equal(err.message, 'kaboom')\n    t.equal(a, 'a')\n    t.equal(b, 'b')\n  }\n})\n\ntest('hookRunner - Should handle throw', t => {\n  t.plan(7)\n\n  hookRunner([fn1, fn2, fn3], iterator, 'a', 'b', done)\n\n  function iterator (fn, a, b, done) {\n    return fn(a, b, done)\n  }\n\n  function fn1 (a, b, done) {\n    t.equal(a, 'a')\n    t.equal(b, 'b')\n    done()\n  }\n\n  function fn2 (a, b, done) {\n    t.equal(a, 'a')\n    t.equal(b, 'b')\n    throw new Error('kaboom')\n  }\n\n  function fn3 () {\n    t.fail('We should not be here')\n  }\n\n  function done (err, a, b) {\n    t.equal(err.message, 'kaboom')\n    t.equal(a, 'a')\n    t.equal(b, 'b')\n  }\n})\n\ntest('hookRunner - Should handle promises', t => {\n  t.plan(9)\n\n  hookRunner([fn1, fn2, fn3], iterator, 'a', 'b', done)\n\n  function iterator (fn, a, b, done) {\n    return fn(a, b, done)\n  }\n\n  function fn1 (a, b) {\n    t.equal(a, 'a')\n    t.equal(b, 'b')\n    return Promise.resolve()\n  }\n\n  function fn2 (a, b) {\n    t.equal(a, 'a')\n    t.equal(b, 'b')\n    return Promise.resolve()\n  }\n\n  function fn3 (a, b) {\n    t.equal(a, 'a')\n    t.equal(b, 'b')\n    return Promise.resolve()\n  }\n\n  function done (err, a, b) {\n    t.error(err)\n    t.equal(a, 'a')\n    t.equal(b, 'b')\n  }\n})\n\ntest('hookRunner - In case of error should skip to done (with promises)', t => {\n  t.plan(7)\n\n  hookRunner([fn1, fn2, fn3], iterator, 'a', 'b', done)\n\n  function iterator (fn, a, b, done) {\n    return fn(a, b, done)\n  }\n\n  function fn1 (a, b) {\n    t.equal(a, 'a')\n    t.equal(b, 'b')\n    return Promise.resolve()\n  }\n\n  function fn2 (a, b) {\n    t.equal(a, 'a')\n    t.equal(b, 'b')\n    return Promise.reject(new Error('kaboom'))\n  }\n\n  function fn3 () {\n    t.fail('We should not be here')\n  }\n\n  function done (err, a, b) {\n    t.equal(err.message, 'kaboom')\n    t.equal(a, 'a')\n    t.equal(b, 'b')\n  }\n})\n\ntest('hookRunner - Be able to exit before its natural end', t => {\n  t.plan(4)\n\n  let shouldStop = false\n  hookRunner([fn1, fn2, fn3], iterator, 'a', 'b', done)\n\n  function iterator (fn, a, b, done) {\n    if (shouldStop) {\n      return undefined\n    }\n    return fn(a, b, done)\n  }\n\n  function fn1 (a, b, done) {\n    t.equal(a, 'a')\n    t.equal(b, 'b')\n    done()\n  }\n\n  function fn2 (a, b) {\n    t.equal(a, 'a')\n    t.equal(b, 'b')\n    shouldStop = true\n    return Promise.resolve()\n  }\n\n  function fn3 () {\n    t.fail('this should not be called')\n  }\n\n  function done () {\n    t.fail('this should not be called')\n  }\n})\n\ntest('hookRunner - Promises that resolve to a value do not change the state', t => {\n  t.plan(5)\n\n  const originalState = { a: 'a', b: 'b' }\n\n  hookRunner([fn1, fn2, fn3], iterator, originalState, 'b', done)\n\n  function iterator (fn, state, b, done) {\n    return fn(state, b, done)\n  }\n\n  function fn1 (state, b, done) {\n    t.equal(state, originalState)\n    return Promise.resolve(null)\n  }\n\n  function fn2 (state, b, done) {\n    t.equal(state, originalState)\n    return Promise.resolve('string')\n  }\n\n  function fn3 (state, b, done) {\n    t.equal(state, originalState)\n    return Promise.resolve({ object: true })\n  }\n\n  function done (err, state, b) {\n    t.error(err)\n    t.equal(state, originalState)\n  }\n})\n\ntest('onSendHookRunner - Basic', t => {\n  t.plan(13)\n\n  const originalRequest = { body: null }\n  const originalReply = { request: originalRequest }\n  const originalPayload = 'payload'\n\n  onSendHookRunner([fn1, fn2, fn3], originalRequest, originalReply, originalPayload, done)\n\n  function fn1 (request, reply, payload, done) {\n    t.same(request, originalRequest)\n    t.same(reply, originalReply)\n    t.equal(payload, originalPayload)\n    done()\n  }\n\n  function fn2 (request, reply, payload, done) {\n    t.same(request, originalRequest)\n    t.same(reply, originalReply)\n    t.equal(payload, originalPayload)\n    done()\n  }\n\n  function fn3 (request, reply, payload, done) {\n    t.same(request, originalRequest)\n    t.same(reply, originalReply)\n    t.equal(payload, originalPayload)\n    done()\n  }\n\n  function done (err, request, reply, payload) {\n    t.error(err)\n    t.same(request, originalRequest)\n    t.same(reply, originalReply)\n    t.equal(payload, originalPayload)\n  }\n})\n\ntest('onSendHookRunner - Can change the payload', t => {\n  t.plan(7)\n\n  const originalRequest = { body: null }\n  const originalReply = { request: originalRequest }\n  const v1 = { hello: 'world' }\n  const v2 = { ciao: 'mondo' }\n  const v3 = { winter: 'is coming' }\n  const v4 = { winter: 'has come' }\n\n  onSendHookRunner([fn1, fn2, fn3], originalRequest, originalReply, v1, done)\n\n  function fn1 (request, reply, payload, done) {\n    t.same(payload, v1)\n    done(null, v2)\n  }\n\n  function fn2 (request, reply, payload, done) {\n    t.same(payload, v2)\n    done(null, v3)\n  }\n\n  function fn3 (request, reply, payload, done) {\n    t.same(payload, v3)\n    done(null, v4)\n  }\n\n  function done (err, request, reply, payload) {\n    t.error(err)\n    t.same(request, originalRequest)\n    t.same(reply, originalReply)\n    t.same(payload, v4)\n  }\n})\n\ntest('onSendHookRunner - In case of error should skip to done', t => {\n  t.plan(6)\n\n  const originalRequest = { body: null }\n  const originalReply = { request: originalRequest }\n  const v1 = { hello: 'world' }\n  const v2 = { ciao: 'mondo' }\n\n  onSendHookRunner([fn1, fn2, fn3], originalRequest, originalReply, v1, done)\n\n  function fn1 (request, reply, payload, done) {\n    t.same(payload, v1)\n    done(null, v2)\n  }\n\n  function fn2 (request, reply, payload, done) {\n    t.same(payload, v2)\n    done(new Error('kaboom'))\n  }\n\n  function fn3 () {\n    t.fail('We should not be here')\n  }\n\n  function done (err, request, reply, payload) {\n    t.equal(err.message, 'kaboom')\n    t.same(request, originalRequest)\n    t.same(reply, originalReply)\n    t.same(payload, v2)\n  }\n})\n\ntest('onSendHookRunner - Should handle promises', t => {\n  t.plan(7)\n\n  const originalRequest = { body: null }\n  const originalReply = { request: originalRequest }\n  const v1 = { hello: 'world' }\n  const v2 = { ciao: 'mondo' }\n  const v3 = { winter: 'is coming' }\n  const v4 = { winter: 'has come' }\n\n  onSendHookRunner([fn1, fn2, fn3], originalRequest, originalReply, v1, done)\n\n  function fn1 (request, reply, payload) {\n    t.same(payload, v1)\n    return Promise.resolve(v2)\n  }\n\n  function fn2 (request, reply, payload) {\n    t.same(payload, v2)\n    return Promise.resolve(v3)\n  }\n\n  function fn3 (request, reply, payload) {\n    t.same(payload, v3)\n    return Promise.resolve(v4)\n  }\n\n  function done (err, request, reply, payload) {\n    t.error(err)\n    t.same(request, originalRequest)\n    t.same(reply, originalReply)\n    t.same(payload, v4)\n  }\n})\n\ntest('onSendHookRunner - In case of error should skip to done (with promises)', t => {\n  t.plan(6)\n\n  const originalRequest = { body: null }\n  const originalReply = { request: originalRequest }\n  const v1 = { hello: 'world' }\n  const v2 = { ciao: 'mondo' }\n\n  onSendHookRunner([fn1, fn2, fn3], originalRequest, originalReply, v1, done)\n\n  function fn1 (request, reply, payload) {\n    t.same(payload, v1)\n    return Promise.resolve(v2)\n  }\n\n  function fn2 (request, reply, payload) {\n    t.same(payload, v2)\n    return Promise.reject(new Error('kaboom'))\n  }\n\n  function fn3 () {\n    t.fail('We should not be here')\n  }\n\n  function done (err, request, reply, payload) {\n    t.equal(err.message, 'kaboom')\n    t.same(request, originalRequest)\n    t.same(reply, originalReply)\n    t.same(payload, v2)\n  }\n})\n\ntest('onSendHookRunner - Be able to exit before its natural end', t => {\n  t.plan(2)\n\n  const originalRequest = { body: null }\n  const originalReply = { request: originalRequest }\n  const v1 = { hello: 'world' }\n  const v2 = { ciao: 'mondo' }\n\n  onSendHookRunner([fn1, fn2, fn3], originalRequest, originalReply, v1, done)\n\n  function fn1 (request, reply, payload, done) {\n    t.same(payload, v1)\n    done(null, v2)\n  }\n\n  function fn2 (request, reply, payload) {\n    t.same(payload, v2)\n  }\n\n  function fn3 () {\n    t.fail('this should not be called')\n  }\n\n  function done () {\n    t.fail('this should not be called')\n  }\n})\n/test/route.test.jsŃ'use strict'\n\nconst stream = require('stream')\nconst split = require('split2')\nconst t = require('tap')\nconst test = t.test\nconst sget = require('simple-get').concat\nconst joi = require('joi')\nconst Fastify = require('..')\nconst proxyquire = require('proxyquire')\nconst { FST_ERR_INVALID_URL } = require('../lib/errors')\n\nfunction getUrl (app) {\n  const { address, port } = app.server.address()\n  if (address === '::1') {\n    return `http://[${address}]:${port}`\n  } else {\n    return `http://${address}:${port}`\n  }\n}\n\ntest('route', t => {\n  t.plan(9)\n  const test = t.test\n  const fastify = Fastify()\n\n  test('route - get', t => {\n    t.plan(1)\n    try {\n      fastify.route({\n        method: 'GET',\n        url: '/',\n        schema: {\n          response: {\n            '2xx': {\n              type: 'object',\n              properties: {\n                hello: {\n                  type: 'string'\n                }\n              }\n            }\n          }\n        },\n        handler: function (req, reply) {\n          reply.send({ hello: 'world' })\n        }\n      })\n      t.pass()\n    } catch (e) {\n      t.fail()\n    }\n  })\n\n  test('missing schema - route', t => {\n    t.plan(1)\n    try {\n      fastify.route({\n        method: 'GET',\n        url: '/missing',\n        handler: function (req, reply) {\n          reply.send({ hello: 'world' })\n        }\n      })\n      t.pass()\n    } catch (e) {\n      t.fail()\n    }\n  })\n\n  test('invalid handler attribute - route', t => {\n    t.plan(1)\n    try {\n      fastify.get('/', { handler: 'not a function' }, () => {})\n      t.fail()\n    } catch (e) {\n      t.pass()\n    }\n  })\n\n  test('Multiple methods', t => {\n    t.plan(1)\n    try {\n      fastify.route({\n        method: ['GET', 'DELETE'],\n        url: '/multiple',\n        handler: function (req, reply) {\n          reply.send({ hello: 'world' })\n        }\n      })\n      t.pass()\n    } catch (e) {\n      t.fail()\n    }\n  })\n\n  test('Add multiple methods', t => {\n    t.plan(1)\n    try {\n      fastify.get('/add-multiple', function (req, reply) {\n        reply.send({ hello: 'Bob!' })\n      })\n      fastify.route({\n        method: ['PUT', 'DELETE'],\n        url: '/add-multiple',\n        handler: function (req, reply) {\n          reply.send({ hello: 'world' })\n        }\n      })\n      t.pass()\n    } catch (e) {\n      t.fail()\n    }\n  })\n\n  fastify.listen({ port: 0 }, function (err) {\n    if (err) t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    test('cannot add another route after binding', t => {\n      t.plan(1)\n      try {\n        fastify.route({\n          method: 'GET',\n          url: '/another-get-route',\n          handler: function (req, reply) {\n            reply.send({ hello: 'world' })\n          }\n        })\n        t.fail()\n      } catch (e) {\n        t.pass()\n      }\n    })\n\n    test('route - get', t => {\n      t.plan(3)\n      sget({\n        method: 'GET',\n        url: 'http://localhost:' + fastify.server.address().port\n      }, (err, response, body) => {\n        t.error(err)\n        t.equal(response.statusCode, 200)\n        t.same(JSON.parse(body), { hello: 'world' })\n      })\n    })\n\n    test('route - missing schema', t => {\n      t.plan(3)\n      sget({\n        method: 'GET',\n        url: 'http://localhost:' + fastify.server.address().port + '/missing'\n      }, (err, response, body) => {\n        t.error(err)\n        t.equal(response.statusCode, 200)\n        t.same(JSON.parse(body), { hello: 'world' })\n      })\n    })\n\n    test('route - multiple methods', t => {\n      t.plan(6)\n      sget({\n        method: 'GET',\n        url: 'http://localhost:' + fastify.server.address().port + '/multiple'\n      }, (err, response, body) => {\n        t.error(err)\n        t.equal(response.statusCode, 200)\n        t.same(JSON.parse(body), { hello: 'world' })\n      })\n\n      sget({\n        method: 'DELETE',\n        url: 'http://localhost:' + fastify.server.address().port + '/multiple'\n      }, (err, response, body) => {\n        t.error(err)\n        t.equal(response.statusCode, 200)\n        t.same(JSON.parse(body), { hello: 'world' })\n      })\n    })\n  })\n})\n\ntest('invalid schema - route', t => {\n  t.plan(3)\n\n  const fastify = Fastify()\n  fastify.route({\n    handler: () => {},\n    method: 'GET',\n    url: '/invalid',\n    schema: {\n      querystring: {\n        id: 'string'\n      }\n    }\n  })\n  fastify.after(err => {\n    t.notOk(err, 'the error is throw on preReady')\n  })\n  fastify.ready(err => {\n    t.equal(err.code, 'FST_ERR_SCH_VALIDATION_BUILD')\n    t.match(err.message, /Failed building the validation schema for GET: \\/invalid/)\n  })\n})\n\ntest('same route definition object on multiple prefixes', async t => {\n  t.plan(2)\n\n  const routeObject = {\n    handler: () => {},\n    method: 'GET',\n    url: '/simple'\n  }\n\n  const fastify = Fastify({ exposeHeadRoutes: false })\n\n  fastify.register(async function (f) {\n    f.addHook('onRoute', (routeOptions) => {\n      t.equal(routeOptions.url, '/v1/simple')\n    })\n    f.route(routeObject)\n  }, { prefix: '/v1' })\n  fastify.register(async function (f) {\n    f.addHook('onRoute', (routeOptions) => {\n      t.equal(routeOptions.url, '/v2/simple')\n    })\n    f.route(routeObject)\n  }, { prefix: '/v2' })\n\n  await fastify.ready()\n})\n\ntest('path can be specified in place of uri', t => {\n  t.plan(3)\n  const fastify = Fastify()\n\n  fastify.route({\n    method: 'GET',\n    path: '/path',\n    handler: function (req, reply) {\n      reply.send({ hello: 'world' })\n    }\n  })\n\n  const reqOpts = {\n    method: 'GET',\n    url: '/path'\n  }\n\n  fastify.inject(reqOpts, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 200)\n    t.same(JSON.parse(res.payload), { hello: 'world' })\n  })\n})\n\ntest('invalid bodyLimit option - route', t => {\n  t.plan(2)\n  const fastify = Fastify()\n\n  try {\n    fastify.route({\n      bodyLimit: false,\n      method: 'PUT',\n      handler: () => null\n    })\n    t.fail('bodyLimit must be an integer')\n  } catch (err) {\n    t.equal(err.message, \"'bodyLimit' option must be an integer > 0. Got 'false'\")\n  }\n\n  try {\n    fastify.post('/url', { bodyLimit: 10000.1 }, () => null)\n    t.fail('bodyLimit must be an integer')\n  } catch (err) {\n    t.equal(err.message, \"'bodyLimit' option must be an integer > 0. Got '10000.1'\")\n  }\n})\n\ntest('handler function in options of shorthand route should works correctly', t => {\n  t.plan(3)\n\n  const fastify = Fastify()\n  fastify.get('/foo', {\n    handler: (req, reply) => {\n      reply.send({ hello: 'world' })\n    }\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/foo'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 200)\n    t.same(JSON.parse(res.payload), { hello: 'world' })\n  })\n})\n\ntest('does not mutate joi schemas', t => {\n  t.plan(4)\n\n  const fastify = Fastify()\n  function validatorCompiler ({ schema, method, url, httpPart }) {\n    // Needed to extract the params part,\n    // without the JSON-schema encapsulation\n    // that is automatically added by the short\n    // form of params.\n    schema = joi.object(schema.properties)\n\n    return validateHttpData\n\n    function validateHttpData (data) {\n      return schema.validate(data)\n    }\n  }\n\n  fastify.setValidatorCompiler(validatorCompiler)\n\n  fastify.route({\n    path: '/foo/:an_id',\n    method: 'GET',\n    schema: {\n      params: { an_id: joi.number() }\n    },\n    handler (req, res) {\n      t.same(req.params, { an_id: 42 })\n      res.send({ hello: 'world' })\n    }\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/foo/42'\n  }, (err, result) => {\n    t.error(err)\n    t.equal(result.statusCode, 200)\n    t.same(JSON.parse(result.payload), { hello: 'world' })\n  })\n})\n\ntest('multiple routes with one schema', t => {\n  t.plan(2)\n\n  const fastify = Fastify()\n\n  const schema = {\n    query: {\n      id: { type: 'number' }\n    }\n  }\n\n  fastify.route({\n    schema,\n    method: 'GET',\n    path: '/first/:id',\n    handler (req, res) {\n      res.send({ hello: 'world' })\n    }\n  })\n\n  fastify.route({\n    schema,\n    method: 'GET',\n    path: '/second/:id',\n    handler (req, res) {\n      res.send({ hello: 'world' })\n    }\n  })\n\n  fastify.ready(error => {\n    t.error(error)\n    t.same(schema, schema)\n  })\n})\n\ntest('route error handler overrides default error handler', t => {\n  t.plan(4)\n\n  const fastify = Fastify()\n\n  const customRouteErrorHandler = (error, request, reply) => {\n    t.equal(error.message, 'Wrong Pot Error')\n\n    reply.code(418).send({\n      message: 'Make a brew',\n      statusCode: 418,\n      error: 'Wrong Pot Error'\n    })\n  }\n\n  fastify.route({\n    method: 'GET',\n    path: '/coffee',\n    handler: (req, res) => {\n      res.send(new Error('Wrong Pot Error'))\n    },\n    errorHandler: customRouteErrorHandler\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/coffee'\n  }, (error, res) => {\n    t.error(error)\n    t.equal(res.statusCode, 418)\n    t.same(JSON.parse(res.payload), {\n      message: 'Make a brew',\n      statusCode: 418,\n      error: 'Wrong Pot Error'\n    })\n  })\n})\n\ntest('route error handler does not affect other routes', t => {\n  t.plan(3)\n\n  const fastify = Fastify()\n\n  const customRouteErrorHandler = (error, request, reply) => {\n    t.equal(error.message, 'Wrong Pot Error')\n\n    reply.code(418).send({\n      message: 'Make a brew',\n      statusCode: 418,\n      error: 'Wrong Pot Error'\n    })\n  }\n\n  fastify.route({\n    method: 'GET',\n    path: '/coffee',\n    handler: (req, res) => {\n      res.send(new Error('Wrong Pot Error'))\n    },\n    errorHandler: customRouteErrorHandler\n  })\n\n  fastify.route({\n    method: 'GET',\n    path: '/tea',\n    handler: (req, res) => {\n      res.send(new Error('No tea today'))\n    }\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/tea'\n  }, (error, res) => {\n    t.error(error)\n    t.equal(res.statusCode, 500)\n    t.same(JSON.parse(res.payload), {\n      message: 'No tea today',\n      statusCode: 500,\n      error: 'Internal Server Error'\n    })\n  })\n})\n\ntest('async error handler for a route', t => {\n  t.plan(4)\n\n  const fastify = Fastify()\n\n  const customRouteErrorHandler = async (error, request, reply) => {\n    t.equal(error.message, 'Delayed Pot Error')\n    reply.code(418)\n    return {\n      message: 'Make a brew sometime later',\n      statusCode: 418,\n      error: 'Delayed Pot Error'\n    }\n  }\n\n  fastify.route({\n    method: 'GET',\n    path: '/late-coffee',\n    handler: (req, res) => {\n      res.send(new Error('Delayed Pot Error'))\n    },\n    errorHandler: customRouteErrorHandler\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/late-coffee'\n  }, (error, res) => {\n    t.error(error)\n    t.equal(res.statusCode, 418)\n    t.same(JSON.parse(res.payload), {\n      message: 'Make a brew sometime later',\n      statusCode: 418,\n      error: 'Delayed Pot Error'\n    })\n  })\n})\n\ntest('route error handler overrides global custom error handler', t => {\n  t.plan(4)\n\n  const fastify = Fastify()\n\n  const customGlobalErrorHandler = (error, request, reply) => {\n    t.error(error)\n    reply.code(429).send({ message: 'Too much coffee' })\n  }\n\n  const customRouteErrorHandler = (error, request, reply) => {\n    t.equal(error.message, 'Wrong Pot Error')\n    reply.code(418).send({\n      message: 'Make a brew',\n      statusCode: 418,\n      error: 'Wrong Pot Error'\n    })\n  }\n\n  fastify.setErrorHandler(customGlobalErrorHandler)\n\n  fastify.route({\n    method: 'GET',\n    path: '/more-coffee',\n    handler: (req, res) => {\n      res.send(new Error('Wrong Pot Error'))\n    },\n    errorHandler: customRouteErrorHandler\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/more-coffee'\n  }, (error, res) => {\n    t.error(error)\n    t.equal(res.statusCode, 418)\n    t.same(JSON.parse(res.payload), {\n      message: 'Make a brew',\n      statusCode: 418,\n      error: 'Wrong Pot Error'\n    })\n  })\n})\n\ntest('throws when route with empty url', async t => {\n  t.plan(1)\n\n  const fastify = Fastify()\n  try {\n    fastify.route({\n      method: 'GET',\n      url: '',\n      handler: (req, res) => {\n        res.send('hi!')\n      }\n    })\n  } catch (err) {\n    t.equal(err.message, 'The path could not be empty')\n  }\n})\n\ntest('throws when route with empty url in shorthand declaration', async t => {\n  t.plan(1)\n\n  const fastify = Fastify()\n  try {\n    fastify.get(\n      '',\n      async function handler () { return {} }\n    )\n  } catch (err) {\n    t.equal(err.message, 'The path could not be empty')\n  }\n})\n\ntest('throws when route-level error handler is not a function', t => {\n  t.plan(1)\n\n  const fastify = Fastify()\n\n  try {\n    fastify.route({\n      method: 'GET',\n      url: '/tea',\n      handler: (req, res) => {\n        res.send('hi!')\n      },\n      errorHandler: 'teapot'\n    })\n  } catch (err) {\n    t.equal(err.message, 'Error Handler for GET:/tea route, if defined, must be a function')\n  }\n})\n\ntest('Creates a HEAD route for each GET one (default)', t => {\n  t.plan(8)\n\n  const fastify = Fastify()\n\n  fastify.route({\n    method: 'GET',\n    path: '/more-coffee',\n    handler: (req, reply) => {\n      reply.send({ here: 'is coffee' })\n    }\n  })\n\n  fastify.route({\n    method: 'GET',\n    path: '/some-light',\n    handler: (req, reply) => {\n      reply.send('Get some light!')\n    }\n  })\n\n  fastify.inject({\n    method: 'HEAD',\n    url: '/more-coffee'\n  }, (error, res) => {\n    t.error(error)\n    t.equal(res.statusCode, 200)\n    t.equal(res.headers['content-type'], 'application/json; charset=utf-8')\n    t.same(res.body, '')\n  })\n\n  fastify.inject({\n    method: 'HEAD',\n    url: '/some-light'\n  }, (error, res) => {\n    t.error(error)\n    t.equal(res.statusCode, 200)\n    t.equal(res.headers['content-type'], 'text/plain; charset=utf-8')\n    t.equal(res.body, '')\n  })\n})\n\ntest('Do not create a HEAD route for each GET one (exposeHeadRoutes: false)', t => {\n  t.plan(4)\n\n  const fastify = Fastify({ exposeHeadRoutes: false })\n\n  fastify.route({\n    method: 'GET',\n    path: '/more-coffee',\n    handler: (req, reply) => {\n      reply.send({ here: 'is coffee' })\n    }\n  })\n\n  fastify.route({\n    method: 'GET',\n    path: '/some-light',\n    handler: (req, reply) => {\n      reply.send('Get some light!')\n    }\n  })\n\n  fastify.inject({\n    method: 'HEAD',\n    url: '/more-coffee'\n  }, (error, res) => {\n    t.error(error)\n    t.equal(res.statusCode, 404)\n  })\n\n  fastify.inject({\n    method: 'HEAD',\n    url: '/some-light'\n  }, (error, res) => {\n    t.error(error)\n    t.equal(res.statusCode, 404)\n  })\n})\n\ntest('Creates a HEAD route for each GET one', t => {\n  t.plan(8)\n\n  const fastify = Fastify({ exposeHeadRoutes: true })\n\n  fastify.route({\n    method: 'GET',\n    path: '/more-coffee',\n    handler: (req, reply) => {\n      reply.send({ here: 'is coffee' })\n    }\n  })\n\n  fastify.route({\n    method: 'GET',\n    path: '/some-light',\n    handler: (req, reply) => {\n      reply.send('Get some light!')\n    }\n  })\n\n  fastify.inject({\n    method: 'HEAD',\n    url: '/more-coffee'\n  }, (error, res) => {\n    t.error(error)\n    t.equal(res.statusCode, 200)\n    t.equal(res.headers['content-type'], 'application/json; charset=utf-8')\n    t.same(res.body, '')\n  })\n\n  fastify.inject({\n    method: 'HEAD',\n    url: '/some-light'\n  }, (error, res) => {\n    t.error(error)\n    t.equal(res.statusCode, 200)\n    t.equal(res.headers['content-type'], 'text/plain; charset=utf-8')\n    t.equal(res.body, '')\n  })\n})\n\ntest('Creates a HEAD route for a GET one with prefixTrailingSlash', async (t) => {\n  t.plan(1)\n\n  const fastify = Fastify()\n\n  const arr = []\n  fastify.register((instance, opts, next) => {\n    instance.addHook('onRoute', (routeOptions) => {\n      arr.push(`${routeOptions.method} ${routeOptions.url}`)\n    })\n\n    instance.route({\n      method: 'GET',\n      path: '/',\n      exposeHeadRoute: true,\n      prefixTrailingSlash: 'both',\n      handler: (req, reply) => {\n        reply.send({ here: 'is coffee' })\n      }\n    })\n\n    next()\n  }, { prefix: '/v1' })\n\n  await fastify.ready()\n\n  t.ok(true)\n})\n\ntest('Will not create a HEAD route that is not GET', t => {\n  t.plan(11)\n\n  const fastify = Fastify({ exposeHeadRoutes: true })\n\n  fastify.route({\n    method: 'GET',\n    path: '/more-coffee',\n    handler: (req, reply) => {\n      reply.send({ here: 'is coffee' })\n    }\n  })\n\n  fastify.route({\n    method: 'GET',\n    path: '/some-light',\n    handler: (req, reply) => {\n      reply.send()\n    }\n  })\n\n  fastify.route({\n    method: 'POST',\n    path: '/something',\n    handler: (req, reply) => {\n      reply.send({ look: 'It is something!' })\n    }\n  })\n\n  fastify.inject({\n    method: 'HEAD',\n    url: '/more-coffee'\n  }, (error, res) => {\n    t.error(error)\n    t.equal(res.statusCode, 200)\n    t.equal(res.headers['content-type'], 'application/json; charset=utf-8')\n    t.same(res.body, '')\n  })\n\n  fastify.inject({\n    method: 'HEAD',\n    url: '/some-light'\n  }, (error, res) => {\n    t.error(error)\n    t.equal(res.statusCode, 200)\n    t.equal(res.headers['content-type'], undefined)\n    t.equal(res.headers['content-length'], '0')\n    t.equal(res.body, '')\n  })\n\n  fastify.inject({\n    method: 'HEAD',\n    url: '/something'\n  }, (error, res) => {\n    t.error(error)\n    t.equal(res.statusCode, 404)\n  })\n})\n\ntest('HEAD route should handle properly each response type', t => {\n  t.plan(25)\n\n  const fastify = Fastify({ exposeHeadRoutes: true })\n  const resString = 'Found me!'\n  const resJSON = { here: 'is Johnny' }\n  const resBuffer = Buffer.from('I am a buffer!')\n  const resStream = stream.Readable.from('I am a stream!')\n\n  fastify.route({\n    method: 'GET',\n    path: '/json',\n    handler: (req, reply) => {\n      reply.send(resJSON)\n    }\n  })\n\n  fastify.route({\n    method: 'GET',\n    path: '/string',\n    handler: (req, reply) => {\n      reply.send(resString)\n    }\n  })\n\n  fastify.route({\n    method: 'GET',\n    path: '/buffer',\n    handler: (req, reply) => {\n      reply.send(resBuffer)\n    }\n  })\n\n  fastify.route({\n    method: 'GET',\n    path: '/buffer-with-content-type',\n    handler: (req, reply) => {\n      reply.headers({ 'content-type': 'image/jpeg' })\n      reply.send(resBuffer)\n    }\n  })\n\n  fastify.route({\n    method: 'GET',\n    path: '/stream',\n    handler: (req, reply) => {\n      return resStream\n    }\n  })\n\n  fastify.inject({\n    method: 'HEAD',\n    url: '/json'\n  }, (error, res) => {\n    t.error(error)\n    t.equal(res.statusCode, 200)\n    t.equal(res.headers['content-type'], 'application/json; charset=utf-8')\n    t.equal(res.headers['content-length'], `${Buffer.byteLength(JSON.stringify(resJSON))}`)\n    t.same(res.body, '')\n  })\n\n  fastify.inject({\n    method: 'HEAD',\n    url: '/string'\n  }, (error, res) => {\n    t.error(error)\n    t.equal(res.statusCode, 200)\n    t.equal(res.headers['content-type'], 'text/plain; charset=utf-8')\n    t.equal(res.headers['content-length'], `${Buffer.byteLength(resString)}`)\n    t.equal(res.body, '')\n  })\n\n  fastify.inject({\n    method: 'HEAD',\n    url: '/buffer'\n  }, (error, res) => {\n    t.error(error)\n    t.equal(res.statusCode, 200)\n    t.equal(res.headers['content-type'], 'application/octet-stream')\n    t.equal(res.headers['content-length'], `${resBuffer.byteLength}`)\n    t.equal(res.body, '')\n  })\n\n  fastify.inject({\n    method: 'HEAD',\n    url: '/buffer-with-content-type'\n  }, (error, res) => {\n    t.error(error)\n    t.equal(res.statusCode, 200)\n    t.equal(res.headers['content-type'], 'image/jpeg')\n    t.equal(res.headers['content-length'], `${resBuffer.byteLength}`)\n    t.equal(res.body, '')\n  })\n\n  fastify.inject({\n    method: 'HEAD',\n    url: '/stream'\n  }, (error, res) => {\n    t.error(error)\n    t.equal(res.statusCode, 200)\n    t.equal(res.headers['content-type'], undefined)\n    t.equal(res.headers['content-length'], undefined)\n    t.equal(res.body, '')\n  })\n})\n\ntest('HEAD route should respect custom onSend handlers', t => {\n  t.plan(6)\n\n  let counter = 0\n  const resBuffer = Buffer.from('I am a coffee!')\n  const fastify = Fastify({ exposeHeadRoutes: true })\n  const customOnSend = (res, reply, payload, done) => {\n    counter = counter + 1\n    done(null, payload)\n  }\n\n  fastify.route({\n    method: 'GET',\n    path: '/more-coffee',\n    handler: (req, reply) => {\n      reply.send(resBuffer)\n    },\n    onSend: [customOnSend, customOnSend]\n  })\n\n  fastify.inject({\n    method: 'HEAD',\n    url: '/more-coffee'\n  }, (error, res) => {\n    t.error(error)\n    t.equal(res.statusCode, 200)\n    t.equal(res.headers['content-type'], 'application/octet-stream')\n    t.equal(res.headers['content-length'], `${resBuffer.byteLength}`)\n    t.equal(res.body, '')\n    t.equal(counter, 2)\n  })\n})\n\ntest('route onSend can be function or array of functions', t => {\n  t.plan(12)\n  const counters = { single: 0, multiple: 0 }\n\n  const resBuffer = Buffer.from('I am a coffee!')\n  const fastify = Fastify({ exposeHeadRoutes: true })\n\n  fastify.route({\n    method: 'GET',\n    path: '/coffee',\n    handler: () => resBuffer,\n    onSend: (res, reply, payload, done) => {\n      counters.single += 1\n      done(null, payload)\n    }\n  })\n\n  const customOnSend = (res, reply, payload, done) => {\n    counters.multiple += 1\n    done(null, payload)\n  }\n\n  fastify.route({\n    method: 'GET',\n    path: '/more-coffee',\n    handler: () => resBuffer,\n    onSend: [customOnSend, customOnSend]\n  })\n\n  fastify.inject({ method: 'HEAD', url: '/coffee' }, (error, res) => {\n    t.error(error)\n    t.equal(res.statusCode, 200)\n    t.equal(res.headers['content-type'], 'application/octet-stream')\n    t.equal(res.headers['content-length'], `${resBuffer.byteLength}`)\n    t.equal(res.body, '')\n    t.equal(counters.single, 1)\n  })\n\n  fastify.inject({ method: 'HEAD', url: '/more-coffee' }, (error, res) => {\n    t.error(error)\n    t.equal(res.statusCode, 200)\n    t.equal(res.headers['content-type'], 'application/octet-stream')\n    t.equal(res.headers['content-length'], `${resBuffer.byteLength}`)\n    t.equal(res.body, '')\n    t.equal(counters.multiple, 2)\n  })\n})\n\ntest('no warning for exposeHeadRoute', async t => {\n  const fastify = Fastify()\n\n  fastify.route({\n    method: 'GET',\n    path: '/more-coffee',\n    exposeHeadRoute: true,\n    async handler () {\n      return 'hello world'\n    }\n  })\n\n  const listener = (w) => {\n    t.fail('no warning')\n  }\n\n  process.on('warning', listener)\n\n  await fastify.listen({ port: 0 })\n\n  process.removeListener('warning', listener)\n\n  await fastify.close()\n})\n\ntest(\"HEAD route should handle stream.on('error')\", t => {\n  t.plan(6)\n\n  const resStream = stream.Readable.from('Hello with error!')\n  const logStream = split(JSON.parse)\n  const expectedError = new Error('Hello!')\n  const fastify = Fastify({\n    logger: {\n      stream: logStream,\n      level: 'error'\n    }\n  })\n\n  fastify.route({\n    method: 'GET',\n    path: '/more-coffee',\n    exposeHeadRoute: true,\n    handler: (req, reply) => {\n      process.nextTick(() => resStream.emit('error', expectedError))\n      return resStream\n    }\n  })\n\n  logStream.once('data', line => {\n    const { message, stack } = expectedError\n    t.same(line.err, { type: 'Error', message, stack })\n    t.equal(line.msg, 'Error on Stream found for HEAD route')\n    t.equal(line.level, 50)\n  })\n\n  fastify.inject({\n    method: 'HEAD',\n    url: '/more-coffee'\n  }, (error, res) => {\n    t.error(error)\n    t.equal(res.statusCode, 200)\n    t.equal(res.headers['content-type'], undefined)\n  })\n})\n\ntest('HEAD route should be exposed by default', t => {\n  t.plan(7)\n\n  const resStream = stream.Readable.from('Hello with error!')\n  const resJson = { hello: 'world' }\n  const fastify = Fastify()\n\n  fastify.route({\n    method: 'GET',\n    path: '/without-flag',\n    handler: (req, reply) => {\n      return resStream\n    }\n  })\n\n  fastify.route({\n    exposeHeadRoute: true,\n    method: 'GET',\n    path: '/with-flag',\n    handler: (req, reply) => {\n      return resJson\n    }\n  })\n\n  fastify.inject({\n    method: 'HEAD',\n    url: '/without-flag'\n  }, (error, res) => {\n    t.error(error)\n    t.equal(res.statusCode, 200)\n  })\n\n  fastify.inject({\n    method: 'HEAD',\n    url: '/with-flag'\n  }, (error, res) => {\n    t.error(error)\n    t.equal(res.statusCode, 200)\n    t.equal(res.headers['content-type'], 'application/json; charset=utf-8')\n    t.equal(res.headers['content-length'], `${Buffer.byteLength(JSON.stringify(resJson))}`)\n    t.equal(res.body, '')\n  })\n})\n\ntest('HEAD route should be exposed if route exposeHeadRoute is set', t => {\n  t.plan(7)\n\n  const resBuffer = Buffer.from('I am a coffee!')\n  const resJson = { hello: 'world' }\n  const fastify = Fastify({ exposeHeadRoutes: false })\n\n  fastify.route({\n    exposeHeadRoute: true,\n    method: 'GET',\n    path: '/one',\n    handler: (req, reply) => {\n      return resBuffer\n    }\n  })\n\n  fastify.route({\n    method: 'GET',\n    path: '/two',\n    handler: (req, reply) => {\n      return resJson\n    }\n  })\n\n  fastify.inject({\n    method: 'HEAD',\n    url: '/one'\n  }, (error, res) => {\n    t.error(error)\n    t.equal(res.statusCode, 200)\n    t.equal(res.headers['content-type'], 'application/octet-stream')\n    t.equal(res.headers['content-length'], `${resBuffer.byteLength}`)\n    t.equal(res.body, '')\n  })\n\n  fastify.inject({\n    method: 'HEAD',\n    url: '/two'\n  }, (error, res) => {\n    t.error(error)\n    t.equal(res.statusCode, 404)\n  })\n})\n\ntest('Set a custom HEAD route before GET one without disabling exposeHeadRoutes (global)', t => {\n  t.plan(6)\n\n  const resBuffer = Buffer.from('I am a coffee!')\n  const fastify = Fastify({\n    exposeHeadRoutes: true\n  })\n\n  fastify.route({\n    method: 'HEAD',\n    path: '/one',\n    handler: (req, reply) => {\n      reply.header('content-type', 'application/pdf')\n      reply.header('content-length', `${resBuffer.byteLength}`)\n      reply.header('x-custom-header', 'some-custom-header')\n      reply.send()\n    }\n  })\n\n  fastify.route({\n    method: 'GET',\n    path: '/one',\n    handler: (req, reply) => {\n      return resBuffer\n    }\n  })\n\n  fastify.inject({\n    method: 'HEAD',\n    url: '/one'\n  }, (error, res) => {\n    t.error(error)\n    t.equal(res.statusCode, 200)\n    t.equal(res.headers['content-type'], 'application/pdf')\n    t.equal(res.headers['content-length'], `${resBuffer.byteLength}`)\n    t.equal(res.headers['x-custom-header'], 'some-custom-header')\n    t.equal(res.body, '')\n  })\n})\n\ntest('Set a custom HEAD route before GET one without disabling exposeHeadRoutes (route)', t => {\n  t.plan(7)\n\n  function onWarning (code) {\n    t.equal(code, 'FSTDEP007')\n  }\n  const warning = {\n    emit: onWarning\n  }\n\n  const route = proxyquire('../lib/route', { './warnings': warning })\n  const fastify = proxyquire('..', { './lib/route.js': route })()\n\n  const resBuffer = Buffer.from('I am a coffee!')\n\n  fastify.route({\n    method: 'HEAD',\n    path: '/one',\n    handler: (req, reply) => {\n      reply.header('content-type', 'application/pdf')\n      reply.header('content-length', `${resBuffer.byteLength}`)\n      reply.header('x-custom-header', 'some-custom-header')\n      reply.send()\n    }\n  })\n\n  fastify.route({\n    method: 'GET',\n    exposeHeadRoute: true,\n    path: '/one',\n    handler: (req, reply) => {\n      return resBuffer\n    }\n  })\n\n  fastify.inject({\n    method: 'HEAD',\n    url: '/one'\n  }, (error, res) => {\n    t.error(error)\n    t.equal(res.statusCode, 200)\n    t.equal(res.headers['content-type'], 'application/pdf')\n    t.equal(res.headers['content-length'], `${resBuffer.byteLength}`)\n    t.equal(res.headers['x-custom-header'], 'some-custom-header')\n    t.equal(res.body, '')\n  })\n})\n\ntest('HEAD routes properly auto created for GET routes when prefixTrailingSlash: \\'no-slash\\'', t => {\n  t.plan(2)\n\n  const fastify = Fastify()\n\n  fastify.register(function routes (f, opts, next) {\n    f.route({\n      method: 'GET',\n      url: '/',\n      exposeHeadRoute: true,\n      prefixTrailingSlash: 'no-slash',\n      handler: (req, reply) => {\n        reply.send({ hello: 'world' })\n      }\n    })\n\n    next()\n  }, { prefix: '/prefix' })\n\n  fastify.inject({ url: '/prefix/prefix', method: 'HEAD' }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 404)\n  })\n})\n\ntest('HEAD routes properly auto created for GET routes when prefixTrailingSlash: \\'both\\'', async t => {\n  t.plan(3)\n\n  const fastify = Fastify()\n\n  fastify.register(function routes (f, opts, next) {\n    f.route({\n      method: 'GET',\n      url: '/',\n      exposeHeadRoute: true,\n      prefixTrailingSlash: 'both',\n      handler: (req, reply) => {\n        reply.send({ hello: 'world' })\n      }\n    })\n\n    next()\n  }, { prefix: '/prefix' })\n\n  const doublePrefixReply = await fastify.inject({ url: '/prefix/prefix', method: 'HEAD' })\n  const trailingSlashReply = await fastify.inject({ url: '/prefix/', method: 'HEAD' })\n  const noneTrailingReply = await fastify.inject({ url: '/prefix', method: 'HEAD' })\n\n  t.equal(doublePrefixReply.statusCode, 404)\n  t.equal(trailingSlashReply.statusCode, 200)\n  t.equal(noneTrailingReply.statusCode, 200)\n})\n\ntest('Request and Reply share the route config', async t => {\n  t.plan(3)\n\n  const fastify = Fastify()\n\n  const config = {\n    this: 'is a string',\n    thisIs: function aFunction () {}\n  }\n\n  fastify.route({\n    method: 'GET',\n    url: '/',\n    config,\n    handler: (req, reply) => {\n      t.same(req.context, reply.context)\n      t.same(req.context.config, reply.context.config)\n      t.match(req.context.config, config, 'there are url and method additional properties')\n\n      reply.send({ hello: 'world' })\n    }\n  })\n\n  await fastify.inject('/')\n})\n\ntest('Will not try to re-createprefixed HEAD route if it already exists and exposeHeadRoutes is true', async (t) => {\n  t.plan(1)\n\n  const fastify = Fastify({ exposeHeadRoutes: true })\n\n  fastify.register((scope, opts, next) => {\n    scope.route({\n      method: 'HEAD',\n      path: '/route',\n      handler: (req, reply) => {\n        reply.header('content-type', 'text/plain')\n        reply.send('custom HEAD response')\n      }\n    })\n    scope.route({\n      method: 'GET',\n      path: '/route',\n      handler: (req, reply) => {\n        reply.send({ ok: true })\n      }\n    })\n\n    next()\n  }, { prefix: '/prefix' })\n\n  await fastify.ready()\n\n  t.ok(true)\n})\n\ntest('GET route with body schema should throw', t => {\n  t.plan(1)\n\n  const fastify = Fastify()\n\n  t.throws(() => {\n    fastify.route({\n      method: 'GET',\n      path: '/get',\n      schema: {\n        body: {}\n      },\n      handler: function (req, reply) {\n        reply.send({ hello: 'world' })\n      }\n    })\n  }, new Error('Body validation schema for GET:/get route is not supported!'))\n})\n\ntest('HEAD route with body schema should throw', t => {\n  t.plan(1)\n\n  const fastify = Fastify()\n\n  t.throws(() => {\n    fastify.route({\n      method: 'HEAD',\n      path: '/shouldThrow',\n      schema: {\n        body: {}\n      },\n      handler: function (req, reply) {\n        reply.send({ hello: 'world' })\n      }\n    })\n  }, new Error('Body validation schema for HEAD:/shouldThrow route is not supported!'))\n})\n\ntest('[HEAD, GET] route with body schema should throw', t => {\n  t.plan(1)\n\n  const fastify = Fastify()\n\n  t.throws(() => {\n    fastify.route({\n      method: ['HEAD', 'GET'],\n      path: '/shouldThrowHead',\n      schema: {\n        body: {}\n      },\n      handler: function (req, reply) {\n        reply.send({ hello: 'world' })\n      }\n    })\n  }, new Error('Body validation schema for HEAD:/shouldThrowHead route is not supported!'))\n})\n\ntest('GET route with body schema should throw - shorthand', t => {\n  t.plan(1)\n\n  const fastify = Fastify()\n\n  t.throws(() => {\n    fastify.get('/shouldThrow', {\n      schema: {\n        body: {}\n      }\n    },\n    function (req, reply) {\n      reply.send({ hello: 'world' })\n    }\n    )\n  }, new Error('Body validation schema for GET:/shouldThrow route is not supported!'))\n})\n\ntest('HEAD route with body schema should throw - shorthand', t => {\n  t.plan(1)\n\n  const fastify = Fastify()\n\n  t.throws(() => {\n    fastify.head('/shouldThrow2', {\n      schema: {\n        body: {}\n      }\n    },\n    function (req, reply) {\n      reply.send({ hello: 'world' })\n    }\n    )\n  }, new Error('Body validation schema for HEAD:/shouldThrow2 route is not supported!'))\n})\n\ntest('route with non-english characters', t => {\n  t.plan(4)\n\n  const fastify = Fastify()\n\n  fastify.get('/föö', (request, reply) => {\n    reply.send('here /föö')\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    sget({\n      method: 'GET',\n      url: getUrl(fastify) + encodeURI('/föö')\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(body.toString(), 'here /föö')\n    })\n  })\n})\n\ntest('invalid url attribute - non string URL', t => {\n  t.plan(1)\n  const fastify = Fastify()\n\n  try {\n    fastify.get(/^\\/(donations|skills|blogs)/, () => {})\n  } catch (error) {\n    t.equal(error.code, FST_ERR_INVALID_URL().code)\n  }\n})\n\ntest('exposeHeadRoute should not reuse the same route option', async t => {\n  t.plan(2)\n\n  const fastify = Fastify()\n\n  // we update the onRequest hook in onRoute hook\n  // if we reuse the same route option\n  // that means we will append another function inside the array\n  fastify.addHook('onRoute', function (routeOption) {\n    if (Array.isArray(routeOption.onRequest)) {\n      routeOption.onRequest.push(() => {})\n    } else {\n      routeOption.onRequest = [() => {}]\n    }\n  })\n\n  fastify.addHook('onRoute', function (routeOption) {\n    t.equal(routeOption.onRequest.length, 1)\n  })\n\n  fastify.route({\n    method: 'GET',\n    path: '/more-coffee',\n    async handler () {\n      return 'hello world'\n    }\n  })\n})\n\ntest('using fastify.all when a catchall is defined does not degrade performance', { timeout: 5000 }, async t => {\n  t.plan(1)\n\n  const fastify = Fastify()\n\n  fastify.get('/*', async (_, reply) => reply.json({ ok: true }))\n\n  for (let i = 0; i < 100; i++) {\n    fastify.all(`/${i}`, async (_, reply) => reply.json({ ok: true }))\n  }\n\n  t.pass()\n})\n/lib/configValidator.jsst// This file is autogenerated by build/build-validation.js, do not edit\n/* istanbul ignore file */\n\"use strict\";\nmodule.exports = validate10;\nmodule.exports.default = validate10;\nconst schema11 = {\"type\":\"object\",\"additionalProperties\":false,\"properties\":{\"connectionTimeout\":{\"type\":\"integer\",\"default\":0},\"keepAliveTimeout\":{\"type\":\"integer\",\"default\":72000},\"forceCloseConnections\":{\"oneOf\":[{\"type\":\"string\",\"pattern\":\"idle\"},{\"type\":\"boolean\"}]},\"maxRequestsPerSocket\":{\"type\":\"integer\",\"default\":0,\"nullable\":true},\"requestTimeout\":{\"type\":\"integer\",\"default\":0},\"bodyLimit\":{\"type\":\"integer\",\"default\":1048576},\"caseSensitive\":{\"type\":\"boolean\",\"default\":true},\"allowUnsafeRegex\":{\"type\":\"boolean\",\"default\":false},\"http2\":{\"type\":\"boolean\"},\"https\":{\"if\":{\"not\":{\"oneOf\":[{\"type\":\"boolean\"},{\"type\":\"null\"},{\"type\":\"object\",\"additionalProperties\":false,\"required\":[\"allowHTTP1\"],\"properties\":{\"allowHTTP1\":{\"type\":\"boolean\"}}}]}},\"then\":{\"setDefaultValue\":true}},\"ignoreTrailingSlash\":{\"type\":\"boolean\",\"default\":false},\"ignoreDuplicateSlashes\":{\"type\":\"boolean\",\"default\":false},\"disableRequestLogging\":{\"type\":\"boolean\",\"default\":false},\"jsonShorthand\":{\"type\":\"boolean\",\"default\":true},\"maxParamLength\":{\"type\":\"integer\",\"default\":100},\"onProtoPoisoning\":{\"type\":\"string\",\"default\":\"error\"},\"onConstructorPoisoning\":{\"type\":\"string\",\"default\":\"error\"},\"pluginTimeout\":{\"type\":\"integer\",\"default\":10000},\"requestIdHeader\":{\"anyOf\":[{\"enum\":[false]},{\"type\":\"string\"}],\"default\":\"request-id\"},\"requestIdLogLabel\":{\"type\":\"string\",\"default\":\"reqId\"},\"http2SessionTimeout\":{\"type\":\"integer\",\"default\":72000},\"exposeHeadRoutes\":{\"type\":\"boolean\",\"default\":true},\"versioning\":{\"type\":\"object\",\"additionalProperties\":true,\"required\":[\"storage\",\"deriveVersion\"],\"properties\":{\"storage\":{},\"deriveVersion\":{}}},\"constraints\":{\"type\":\"object\",\"additionalProperties\":{\"type\":\"object\",\"required\":[\"name\",\"storage\",\"validate\",\"deriveConstraint\"],\"additionalProperties\":true,\"properties\":{\"name\":{\"type\":\"string\"},\"storage\":{},\"validate\":{},\"deriveConstraint\":{}}}}}};\nconst func2 = Object.prototype.hasOwnProperty;\nconst pattern0 = new RegExp(\"idle\", \"u\");\n\nfunction validate10(data, {instancePath=\"\", parentData, parentDataProperty, rootData=data}={}){\nlet vErrors = null;\nlet errors = 0;\nif(errors === 0){\nif(data && typeof data == \"object\" && !Array.isArray(data)){\nif(data.connectionTimeout === undefined){\ndata.connectionTimeout = 0;\n}\nif(data.keepAliveTimeout === undefined){\ndata.keepAliveTimeout = 72000;\n}\nif(data.maxRequestsPerSocket === undefined){\ndata.maxRequestsPerSocket = 0;\n}\nif(data.requestTimeout === undefined){\ndata.requestTimeout = 0;\n}\nif(data.bodyLimit === undefined){\ndata.bodyLimit = 1048576;\n}\nif(data.caseSensitive === undefined){\ndata.caseSensitive = true;\n}\nif(data.allowUnsafeRegex === undefined){\ndata.allowUnsafeRegex = false;\n}\nif(data.ignoreTrailingSlash === undefined){\ndata.ignoreTrailingSlash = false;\n}\nif(data.ignoreDuplicateSlashes === undefined){\ndata.ignoreDuplicateSlashes = false;\n}\nif(data.disableRequestLogging === undefined){\ndata.disableRequestLogging = false;\n}\nif(data.jsonShorthand === undefined){\ndata.jsonShorthand = true;\n}\nif(data.maxParamLength === undefined){\ndata.maxParamLength = 100;\n}\nif(data.onProtoPoisoning === undefined){\ndata.onProtoPoisoning = \"error\";\n}\nif(data.onConstructorPoisoning === undefined){\ndata.onConstructorPoisoning = \"error\";\n}\nif(data.pluginTimeout === undefined){\ndata.pluginTimeout = 10000;\n}\nif(data.requestIdHeader === undefined){\ndata.requestIdHeader = \"request-id\";\n}\nif(data.requestIdLogLabel === undefined){\ndata.requestIdLogLabel = \"reqId\";\n}\nif(data.http2SessionTimeout === undefined){\ndata.http2SessionTimeout = 72000;\n}\nif(data.exposeHeadRoutes === undefined){\ndata.exposeHeadRoutes = true;\n}\nconst _errs1 = errors;\nfor(const key0 in data){\nif(!(func2.call(schema11.properties, key0))){\ndelete data[key0];\n}\n}\nif(_errs1 === errors){\nlet data0 = data.connectionTimeout;\nconst _errs2 = errors;\nif(!(((typeof data0 == \"number\") && (!(data0 % 1) && !isNaN(data0))) && (isFinite(data0)))){\nlet dataType0 = typeof data0;\nlet coerced0 = undefined;\nif(!(coerced0 !== undefined)){\nif(dataType0 === \"boolean\" || data0 === null\n              || (dataType0 === \"string\" && data0 && data0 == +data0 && !(data0 % 1))){\ncoerced0 = +data0;\n}\nelse {\nvalidate10.errors = [{instancePath:instancePath+\"/connectionTimeout\",schemaPath:\"#/properties/connectionTimeout/type\",keyword:\"type\",params:{type: \"integer\"},message:\"must be integer\"}];\nreturn false;\n}\n}\nif(coerced0 !== undefined){\ndata0 = coerced0;\nif(data !== undefined){\ndata[\"connectionTimeout\"] = coerced0;\n}\n}\n}\nvar valid0 = _errs2 === errors;\nif(valid0){\nlet data1 = data.keepAliveTimeout;\nconst _errs4 = errors;\nif(!(((typeof data1 == \"number\") && (!(data1 % 1) && !isNaN(data1))) && (isFinite(data1)))){\nlet dataType1 = typeof data1;\nlet coerced1 = undefined;\nif(!(coerced1 !== undefined)){\nif(dataType1 === \"boolean\" || data1 === null\n              || (dataType1 === \"string\" && data1 && data1 == +data1 && !(data1 % 1))){\ncoerced1 = +data1;\n}\nelse {\nvalidate10.errors = [{instancePath:instancePath+\"/keepAliveTimeout\",schemaPath:\"#/properties/keepAliveTimeout/type\",keyword:\"type\",params:{type: \"integer\"},message:\"must be integer\"}];\nreturn false;\n}\n}\nif(coerced1 !== undefined){\ndata1 = coerced1;\nif(data !== undefined){\ndata[\"keepAliveTimeout\"] = coerced1;\n}\n}\n}\nvar valid0 = _errs4 === errors;\nif(valid0){\nif(data.forceCloseConnections !== undefined){\nlet data2 = data.forceCloseConnections;\nconst _errs6 = errors;\nconst _errs7 = errors;\nlet valid1 = false;\nlet passing0 = null;\nconst _errs8 = errors;\nif(typeof data2 !== \"string\"){\nlet dataType2 = typeof data2;\nlet coerced2 = undefined;\nif(!(coerced2 !== undefined)){\nif(dataType2 == \"number\" || dataType2 == \"boolean\"){\ncoerced2 = \"\" + data2;\n}\nelse if(data2 === null){\ncoerced2 = \"\";\n}\nelse {\nconst err0 = {instancePath:instancePath+\"/forceCloseConnections\",schemaPath:\"#/properties/forceCloseConnections/oneOf/0/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};\nif(vErrors === null){\nvErrors = [err0];\n}\nelse {\nvErrors.push(err0);\n}\nerrors++;\n}\n}\nif(coerced2 !== undefined){\ndata2 = coerced2;\nif(data !== undefined){\ndata[\"forceCloseConnections\"] = coerced2;\n}\n}\n}\nif(errors === _errs8){\nif(typeof data2 === \"string\"){\nif(!pattern0.test(data2)){\nconst err1 = {instancePath:instancePath+\"/forceCloseConnections\",schemaPath:\"#/properties/forceCloseConnections/oneOf/0/pattern\",keyword:\"pattern\",params:{pattern: \"idle\"},message:\"must match pattern \\\"\"+\"idle\"+\"\\\"\"};\nif(vErrors === null){\nvErrors = [err1];\n}\nelse {\nvErrors.push(err1);\n}\nerrors++;\n}\n}\n}\nvar _valid0 = _errs8 === errors;\nif(_valid0){\nvalid1 = true;\npassing0 = 0;\n}\nconst _errs10 = errors;\nif(typeof data2 !== \"boolean\"){\nlet coerced3 = undefined;\nif(!(coerced3 !== undefined)){\nif(data2 === \"false\" || data2 === 0 || data2 === null){\ncoerced3 = false;\n}\nelse if(data2 === \"true\" || data2 === 1){\ncoerced3 = true;\n}\nelse {\nconst err2 = {instancePath:instancePath+\"/forceCloseConnections\",schemaPath:\"#/properties/forceCloseConnections/oneOf/1/type\",keyword:\"type\",params:{type: \"boolean\"},message:\"must be boolean\"};\nif(vErrors === null){\nvErrors = [err2];\n}\nelse {\nvErrors.push(err2);\n}\nerrors++;\n}\n}\nif(coerced3 !== undefined){\ndata2 = coerced3;\nif(data !== undefined){\ndata[\"forceCloseConnections\"] = coerced3;\n}\n}\n}\nvar _valid0 = _errs10 === errors;\nif(_valid0 && valid1){\nvalid1 = false;\npassing0 = [passing0, 1];\n}\nelse {\nif(_valid0){\nvalid1 = true;\npassing0 = 1;\n}\n}\nif(!valid1){\nconst err3 = {instancePath:instancePath+\"/forceCloseConnections\",schemaPath:\"#/properties/forceCloseConnections/oneOf\",keyword:\"oneOf\",params:{passingSchemas: passing0},message:\"must match exactly one schema in oneOf\"};\nif(vErrors === null){\nvErrors = [err3];\n}\nelse {\nvErrors.push(err3);\n}\nerrors++;\nvalidate10.errors = vErrors;\nreturn false;\n}\nelse {\nerrors = _errs7;\nif(vErrors !== null){\nif(_errs7){\nvErrors.length = _errs7;\n}\nelse {\nvErrors = null;\n}\n}\n}\nvar valid0 = _errs6 === errors;\n}\nelse {\nvar valid0 = true;\n}\nif(valid0){\nlet data3 = data.maxRequestsPerSocket;\nconst _errs12 = errors;\nif((!(((typeof data3 == \"number\") && (!(data3 % 1) && !isNaN(data3))) && (isFinite(data3)))) && (data3 !== null)){\nlet dataType4 = typeof data3;\nlet coerced4 = undefined;\nif(!(coerced4 !== undefined)){\nif(dataType4 === \"boolean\" || data3 === null\n              || (dataType4 === \"string\" && data3 && data3 == +data3 && !(data3 % 1))){\ncoerced4 = +data3;\n}\nelse if(data3 === \"\" || data3 === 0 || data3 === false){\ncoerced4 = null;\n}\nelse {\nvalidate10.errors = [{instancePath:instancePath+\"/maxRequestsPerSocket\",schemaPath:\"#/properties/maxRequestsPerSocket/type\",keyword:\"type\",params:{type: \"integer\"},message:\"must be integer\"}];\nreturn false;\n}\n}\nif(coerced4 !== undefined){\ndata3 = coerced4;\nif(data !== undefined){\ndata[\"maxRequestsPerSocket\"] = coerced4;\n}\n}\n}\nvar valid0 = _errs12 === errors;\nif(valid0){\nlet data4 = data.requestTimeout;\nconst _errs15 = errors;\nif(!(((typeof data4 == \"number\") && (!(data4 % 1) && !isNaN(data4))) && (isFinite(data4)))){\nlet dataType5 = typeof data4;\nlet coerced5 = undefined;\nif(!(coerced5 !== undefined)){\nif(dataType5 === \"boolean\" || data4 === null\n              || (dataType5 === \"string\" && data4 && data4 == +data4 && !(data4 % 1))){\ncoerced5 = +data4;\n}\nelse {\nvalidate10.errors = [{instancePath:instancePath+\"/requestTimeout\",schemaPath:\"#/properties/requestTimeout/type\",keyword:\"type\",params:{type: \"integer\"},message:\"must be integer\"}];\nreturn false;\n}\n}\nif(coerced5 !== undefined){\ndata4 = coerced5;\nif(data !== undefined){\ndata[\"requestTimeout\"] = coerced5;\n}\n}\n}\nvar valid0 = _errs15 === errors;\nif(valid0){\nlet data5 = data.bodyLimit;\nconst _errs17 = errors;\nif(!(((typeof data5 == \"number\") && (!(data5 % 1) && !isNaN(data5))) && (isFinite(data5)))){\nlet dataType6 = typeof data5;\nlet coerced6 = undefined;\nif(!(coerced6 !== undefined)){\nif(dataType6 === \"boolean\" || data5 === null\n              || (dataType6 === \"string\" && data5 && data5 == +data5 && !(data5 % 1))){\ncoerced6 = +data5;\n}\nelse {\nvalidate10.errors = [{instancePath:instancePath+\"/bodyLimit\",schemaPath:\"#/properties/bodyLimit/type\",keyword:\"type\",params:{type: \"integer\"},message:\"must be integer\"}];\nreturn false;\n}\n}\nif(coerced6 !== undefined){\ndata5 = coerced6;\nif(data !== undefined){\ndata[\"bodyLimit\"] = coerced6;\n}\n}\n}\nvar valid0 = _errs17 === errors;\nif(valid0){\nlet data6 = data.caseSensitive;\nconst _errs19 = errors;\nif(typeof data6 !== \"boolean\"){\nlet coerced7 = undefined;\nif(!(coerced7 !== undefined)){\nif(data6 === \"false\" || data6 === 0 || data6 === null){\ncoerced7 = false;\n}\nelse if(data6 === \"true\" || data6 === 1){\ncoerced7 = true;\n}\nelse {\nvalidate10.errors = [{instancePath:instancePath+\"/caseSensitive\",schemaPath:\"#/properties/caseSensitive/type\",keyword:\"type\",params:{type: \"boolean\"},message:\"must be boolean\"}];\nreturn false;\n}\n}\nif(coerced7 !== undefined){\ndata6 = coerced7;\nif(data !== undefined){\ndata[\"caseSensitive\"] = coerced7;\n}\n}\n}\nvar valid0 = _errs19 === errors;\nif(valid0){\nlet data7 = data.allowUnsafeRegex;\nconst _errs21 = errors;\nif(typeof data7 !== \"boolean\"){\nlet coerced8 = undefined;\nif(!(coerced8 !== undefined)){\nif(data7 === \"false\" || data7 === 0 || data7 === null){\ncoerced8 = false;\n}\nelse if(data7 === \"true\" || data7 === 1){\ncoerced8 = true;\n}\nelse {\nvalidate10.errors = [{instancePath:instancePath+\"/allowUnsafeRegex\",schemaPath:\"#/properties/allowUnsafeRegex/type\",keyword:\"type\",params:{type: \"boolean\"},message:\"must be boolean\"}];\nreturn false;\n}\n}\nif(coerced8 !== undefined){\ndata7 = coerced8;\nif(data !== undefined){\ndata[\"allowUnsafeRegex\"] = coerced8;\n}\n}\n}\nvar valid0 = _errs21 === errors;\nif(valid0){\nif(data.http2 !== undefined){\nlet data8 = data.http2;\nconst _errs23 = errors;\nif(typeof data8 !== \"boolean\"){\nlet coerced9 = undefined;\nif(!(coerced9 !== undefined)){\nif(data8 === \"false\" || data8 === 0 || data8 === null){\ncoerced9 = false;\n}\nelse if(data8 === \"true\" || data8 === 1){\ncoerced9 = true;\n}\nelse {\nvalidate10.errors = [{instancePath:instancePath+\"/http2\",schemaPath:\"#/properties/http2/type\",keyword:\"type\",params:{type: \"boolean\"},message:\"must be boolean\"}];\nreturn false;\n}\n}\nif(coerced9 !== undefined){\ndata8 = coerced9;\nif(data !== undefined){\ndata[\"http2\"] = coerced9;\n}\n}\n}\nvar valid0 = _errs23 === errors;\n}\nelse {\nvar valid0 = true;\n}\nif(valid0){\nif(data.https !== undefined){\nlet data9 = data.https;\nconst _errs25 = errors;\nconst _errs26 = errors;\nlet valid2 = true;\nconst _errs27 = errors;\nconst _errs28 = errors;\nconst _errs29 = errors;\nconst _errs30 = errors;\nlet valid4 = false;\nlet passing1 = null;\nconst _errs31 = errors;\nif(typeof data9 !== \"boolean\"){\nlet coerced10 = undefined;\nif(!(coerced10 !== undefined)){\nif(data9 === \"false\" || data9 === 0 || data9 === null){\ncoerced10 = false;\n}\nelse if(data9 === \"true\" || data9 === 1){\ncoerced10 = true;\n}\nelse {\nconst err4 = {};\nif(vErrors === null){\nvErrors = [err4];\n}\nelse {\nvErrors.push(err4);\n}\nerrors++;\n}\n}\nif(coerced10 !== undefined){\ndata9 = coerced10;\nif(data !== undefined){\ndata[\"https\"] = coerced10;\n}\n}\n}\nvar _valid2 = _errs31 === errors;\nif(_valid2){\nvalid4 = true;\npassing1 = 0;\n}\nconst _errs33 = errors;\nif(data9 !== null){\nlet coerced11 = undefined;\nif(!(coerced11 !== undefined)){\nif(data9 === \"\" || data9 === 0 || data9 === false){\ncoerced11 = null;\n}\nelse {\nconst err5 = {};\nif(vErrors === null){\nvErrors = [err5];\n}\nelse {\nvErrors.push(err5);\n}\nerrors++;\n}\n}\nif(coerced11 !== undefined){\ndata9 = coerced11;\nif(data !== undefined){\ndata[\"https\"] = coerced11;\n}\n}\n}\nvar _valid2 = _errs33 === errors;\nif(_valid2 && valid4){\nvalid4 = false;\npassing1 = [passing1, 1];\n}\nelse {\nif(_valid2){\nvalid4 = true;\npassing1 = 1;\n}\nconst _errs35 = errors;\nif(errors === _errs35){\nif(data9 && typeof data9 == \"object\" && !Array.isArray(data9)){\nlet missing0;\nif((data9.allowHTTP1 === undefined) && (missing0 = \"allowHTTP1\")){\nconst err6 = {};\nif(vErrors === null){\nvErrors = [err6];\n}\nelse {\nvErrors.push(err6);\n}\nerrors++;\n}\nelse {\nconst _errs37 = errors;\nfor(const key1 in data9){\nif(!(key1 === \"allowHTTP1\")){\ndelete data9[key1];\n}\n}\nif(_errs37 === errors){\nif(data9.allowHTTP1 !== undefined){\nlet data10 = data9.allowHTTP1;\nif(typeof data10 !== \"boolean\"){\nlet coerced12 = undefined;\nif(!(coerced12 !== undefined)){\nif(data10 === \"false\" || data10 === 0 || data10 === null){\ncoerced12 = false;\n}\nelse if(data10 === \"true\" || data10 === 1){\ncoerced12 = true;\n}\nelse {\nconst err7 = {};\nif(vErrors === null){\nvErrors = [err7];\n}\nelse {\nvErrors.push(err7);\n}\nerrors++;\n}\n}\nif(coerced12 !== undefined){\ndata10 = coerced12;\nif(data9 !== undefined){\ndata9[\"allowHTTP1\"] = coerced12;\n}\n}\n}\n}\n}\n}\n}\nelse {\nconst err8 = {};\nif(vErrors === null){\nvErrors = [err8];\n}\nelse {\nvErrors.push(err8);\n}\nerrors++;\n}\n}\nvar _valid2 = _errs35 === errors;\nif(_valid2 && valid4){\nvalid4 = false;\npassing1 = [passing1, 2];\n}\nelse {\nif(_valid2){\nvalid4 = true;\npassing1 = 2;\n}\n}\n}\nif(!valid4){\nconst err9 = {};\nif(vErrors === null){\nvErrors = [err9];\n}\nelse {\nvErrors.push(err9);\n}\nerrors++;\n}\nelse {\nerrors = _errs30;\nif(vErrors !== null){\nif(_errs30){\nvErrors.length = _errs30;\n}\nelse {\nvErrors = null;\n}\n}\n}\nvar valid3 = _errs29 === errors;\nif(valid3){\nconst err10 = {};\nif(vErrors === null){\nvErrors = [err10];\n}\nelse {\nvErrors.push(err10);\n}\nerrors++;\n}\nelse {\nerrors = _errs28;\nif(vErrors !== null){\nif(_errs28){\nvErrors.length = _errs28;\n}\nelse {\nvErrors = null;\n}\n}\n}\nvar _valid1 = _errs27 === errors;\nerrors = _errs26;\nif(vErrors !== null){\nif(_errs26){\nvErrors.length = _errs26;\n}\nelse {\nvErrors = null;\n}\n}\nif(_valid1){\nconst _errs40 = errors;\ndata[\"https\"] = true;\nvar _valid1 = _errs40 === errors;\nvalid2 = _valid1;\n}\nif(!valid2){\nconst err11 = {instancePath:instancePath+\"/https\",schemaPath:\"#/properties/https/if\",keyword:\"if\",params:{failingKeyword: \"then\"},message:\"must match \\\"then\\\" schema\"};\nif(vErrors === null){\nvErrors = [err11];\n}\nelse {\nvErrors.push(err11);\n}\nerrors++;\nvalidate10.errors = vErrors;\nreturn false;\n}\nvar valid0 = _errs25 === errors;\n}\nelse {\nvar valid0 = true;\n}\nif(valid0){\nlet data11 = data.ignoreTrailingSlash;\nconst _errs41 = errors;\nif(typeof data11 !== \"boolean\"){\nlet coerced13 = undefined;\nif(!(coerced13 !== undefined)){\nif(data11 === \"false\" || data11 === 0 || data11 === null){\ncoerced13 = false;\n}\nelse if(data11 === \"true\" || data11 === 1){\ncoerced13 = true;\n}\nelse {\nvalidate10.errors = [{instancePath:instancePath+\"/ignoreTrailingSlash\",schemaPath:\"#/properties/ignoreTrailingSlash/type\",keyword:\"type\",params:{type: \"boolean\"},message:\"must be boolean\"}];\nreturn false;\n}\n}\nif(coerced13 !== undefined){\ndata11 = coerced13;\nif(data !== undefined){\ndata[\"ignoreTrailingSlash\"] = coerced13;\n}\n}\n}\nvar valid0 = _errs41 === errors;\nif(valid0){\nlet data12 = data.ignoreDuplicateSlashes;\nconst _errs43 = errors;\nif(typeof data12 !== \"boolean\"){\nlet coerced14 = undefined;\nif(!(coerced14 !== undefined)){\nif(data12 === \"false\" || data12 === 0 || data12 === null){\ncoerced14 = false;\n}\nelse if(data12 === \"true\" || data12 === 1){\ncoerced14 = true;\n}\nelse {\nvalidate10.errors = [{instancePath:instancePath+\"/ignoreDuplicateSlashes\",schemaPath:\"#/properties/ignoreDuplicateSlashes/type\",keyword:\"type\",params:{type: \"boolean\"},message:\"must be boolean\"}];\nreturn false;\n}\n}\nif(coerced14 !== undefined){\ndata12 = coerced14;\nif(data !== undefined){\ndata[\"ignoreDuplicateSlashes\"] = coerced14;\n}\n}\n}\nvar valid0 = _errs43 === errors;\nif(valid0){\nlet data13 = data.disableRequestLogging;\nconst _errs45 = errors;\nif(typeof data13 !== \"boolean\"){\nlet coerced15 = undefined;\nif(!(coerced15 !== undefined)){\nif(data13 === \"false\" || data13 === 0 || data13 === null){\ncoerced15 = false;\n}\nelse if(data13 === \"true\" || data13 === 1){\ncoerced15 = true;\n}\nelse {\nvalidate10.errors = [{instancePath:instancePath+\"/disableRequestLogging\",schemaPath:\"#/properties/disableRequestLogging/type\",keyword:\"type\",params:{type: \"boolean\"},message:\"must be boolean\"}];\nreturn false;\n}\n}\nif(coerced15 !== undefined){\ndata13 = coerced15;\nif(data !== undefined){\ndata[\"disableRequestLogging\"] = coerced15;\n}\n}\n}\nvar valid0 = _errs45 === errors;\nif(valid0){\nlet data14 = data.jsonShorthand;\nconst _errs47 = errors;\nif(typeof data14 !== \"boolean\"){\nlet coerced16 = undefined;\nif(!(coerced16 !== undefined)){\nif(data14 === \"false\" || data14 === 0 || data14 === null){\ncoerced16 = false;\n}\nelse if(data14 === \"true\" || data14 === 1){\ncoerced16 = true;\n}\nelse {\nvalidate10.errors = [{instancePath:instancePath+\"/jsonShorthand\",schemaPath:\"#/properties/jsonShorthand/type\",keyword:\"type\",params:{type: \"boolean\"},message:\"must be boolean\"}];\nreturn false;\n}\n}\nif(coerced16 !== undefined){\ndata14 = coerced16;\nif(data !== undefined){\ndata[\"jsonShorthand\"] = coerced16;\n}\n}\n}\nvar valid0 = _errs47 === errors;\nif(valid0){\nlet data15 = data.maxParamLength;\nconst _errs49 = errors;\nif(!(((typeof data15 == \"number\") && (!(data15 % 1) && !isNaN(data15))) && (isFinite(data15)))){\nlet dataType17 = typeof data15;\nlet coerced17 = undefined;\nif(!(coerced17 !== undefined)){\nif(dataType17 === \"boolean\" || data15 === null\n              || (dataType17 === \"string\" && data15 && data15 == +data15 && !(data15 % 1))){\ncoerced17 = +data15;\n}\nelse {\nvalidate10.errors = [{instancePath:instancePath+\"/maxParamLength\",schemaPath:\"#/properties/maxParamLength/type\",keyword:\"type\",params:{type: \"integer\"},message:\"must be integer\"}];\nreturn false;\n}\n}\nif(coerced17 !== undefined){\ndata15 = coerced17;\nif(data !== undefined){\ndata[\"maxParamLength\"] = coerced17;\n}\n}\n}\nvar valid0 = _errs49 === errors;\nif(valid0){\nlet data16 = data.onProtoPoisoning;\nconst _errs51 = errors;\nif(typeof data16 !== \"string\"){\nlet dataType18 = typeof data16;\nlet coerced18 = undefined;\nif(!(coerced18 !== undefined)){\nif(dataType18 == \"number\" || dataType18 == \"boolean\"){\ncoerced18 = \"\" + data16;\n}\nelse if(data16 === null){\ncoerced18 = \"\";\n}\nelse {\nvalidate10.errors = [{instancePath:instancePath+\"/onProtoPoisoning\",schemaPath:\"#/properties/onProtoPoisoning/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"}];\nreturn false;\n}\n}\nif(coerced18 !== undefined){\ndata16 = coerced18;\nif(data !== undefined){\ndata[\"onProtoPoisoning\"] = coerced18;\n}\n}\n}\nvar valid0 = _errs51 === errors;\nif(valid0){\nlet data17 = data.onConstructorPoisoning;\nconst _errs53 = errors;\nif(typeof data17 !== \"string\"){\nlet dataType19 = typeof data17;\nlet coerced19 = undefined;\nif(!(coerced19 !== undefined)){\nif(dataType19 == \"number\" || dataType19 == \"boolean\"){\ncoerced19 = \"\" + data17;\n}\nelse if(data17 === null){\ncoerced19 = \"\";\n}\nelse {\nvalidate10.errors = [{instancePath:instancePath+\"/onConstructorPoisoning\",schemaPath:\"#/properties/onConstructorPoisoning/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"}];\nreturn false;\n}\n}\nif(coerced19 !== undefined){\ndata17 = coerced19;\nif(data !== undefined){\ndata[\"onConstructorPoisoning\"] = coerced19;\n}\n}\n}\nvar valid0 = _errs53 === errors;\nif(valid0){\nlet data18 = data.pluginTimeout;\nconst _errs55 = errors;\nif(!(((typeof data18 == \"number\") && (!(data18 % 1) && !isNaN(data18))) && (isFinite(data18)))){\nlet dataType20 = typeof data18;\nlet coerced20 = undefined;\nif(!(coerced20 !== undefined)){\nif(dataType20 === \"boolean\" || data18 === null\n              || (dataType20 === \"string\" && data18 && data18 == +data18 && !(data18 % 1))){\ncoerced20 = +data18;\n}\nelse {\nvalidate10.errors = [{instancePath:instancePath+\"/pluginTimeout\",schemaPath:\"#/properties/pluginTimeout/type\",keyword:\"type\",params:{type: \"integer\"},message:\"must be integer\"}];\nreturn false;\n}\n}\nif(coerced20 !== undefined){\ndata18 = coerced20;\nif(data !== undefined){\ndata[\"pluginTimeout\"] = coerced20;\n}\n}\n}\nvar valid0 = _errs55 === errors;\nif(valid0){\nlet data19 = data.requestIdHeader;\nconst _errs57 = errors;\nconst _errs58 = errors;\nlet valid6 = false;\nconst _errs59 = errors;\nif(!(data19 === false)){\nconst err12 = {instancePath:instancePath+\"/requestIdHeader\",schemaPath:\"#/properties/requestIdHeader/anyOf/0/enum\",keyword:\"enum\",params:{allowedValues: schema11.properties.requestIdHeader.anyOf[0].enum},message:\"must be equal to one of the allowed values\"};\nif(vErrors === null){\nvErrors = [err12];\n}\nelse {\nvErrors.push(err12);\n}\nerrors++;\n}\nvar _valid3 = _errs59 === errors;\nvalid6 = valid6 || _valid3;\nif(!valid6){\nconst _errs60 = errors;\nif(typeof data19 !== \"string\"){\nlet dataType21 = typeof data19;\nlet coerced21 = undefined;\nif(!(coerced21 !== undefined)){\nif(dataType21 == \"number\" || dataType21 == \"boolean\"){\ncoerced21 = \"\" + data19;\n}\nelse if(data19 === null){\ncoerced21 = \"\";\n}\nelse {\nconst err13 = {instancePath:instancePath+\"/requestIdHeader\",schemaPath:\"#/properties/requestIdHeader/anyOf/1/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};\nif(vErrors === null){\nvErrors = [err13];\n}\nelse {\nvErrors.push(err13);\n}\nerrors++;\n}\n}\nif(coerced21 !== undefined){\ndata19 = coerced21;\nif(data !== undefined){\ndata[\"requestIdHeader\"] = coerced21;\n}\n}\n}\nvar _valid3 = _errs60 === errors;\nvalid6 = valid6 || _valid3;\n}\nif(!valid6){\nconst err14 = {instancePath:instancePath+\"/requestIdHeader\",schemaPath:\"#/properties/requestIdHeader/anyOf\",keyword:\"anyOf\",params:{},message:\"must match a schema in anyOf\"};\nif(vErrors === null){\nvErrors = [err14];\n}\nelse {\nvErrors.push(err14);\n}\nerrors++;\nvalidate10.errors = vErrors;\nreturn false;\n}\nelse {\nerrors = _errs58;\nif(vErrors !== null){\nif(_errs58){\nvErrors.length = _errs58;\n}\nelse {\nvErrors = null;\n}\n}\n}\nvar valid0 = _errs57 === errors;\nif(valid0){\nlet data20 = data.requestIdLogLabel;\nconst _errs62 = errors;\nif(typeof data20 !== \"string\"){\nlet dataType22 = typeof data20;\nlet coerced22 = undefined;\nif(!(coerced22 !== undefined)){\nif(dataType22 == \"number\" || dataType22 == \"boolean\"){\ncoerced22 = \"\" + data20;\n}\nelse if(data20 === null){\ncoerced22 = \"\";\n}\nelse {\nvalidate10.errors = [{instancePath:instancePath+\"/requestIdLogLabel\",schemaPath:\"#/properties/requestIdLogLabel/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"}];\nreturn false;\n}\n}\nif(coerced22 !== undefined){\ndata20 = coerced22;\nif(data !== undefined){\ndata[\"requestIdLogLabel\"] = coerced22;\n}\n}\n}\nvar valid0 = _errs62 === errors;\nif(valid0){\nlet data21 = data.http2SessionTimeout;\nconst _errs64 = errors;\nif(!(((typeof data21 == \"number\") && (!(data21 % 1) && !isNaN(data21))) && (isFinite(data21)))){\nlet dataType23 = typeof data21;\nlet coerced23 = undefined;\nif(!(coerced23 !== undefined)){\nif(dataType23 === \"boolean\" || data21 === null\n              || (dataType23 === \"string\" && data21 && data21 == +data21 && !(data21 % 1))){\ncoerced23 = +data21;\n}\nelse {\nvalidate10.errors = [{instancePath:instancePath+\"/http2SessionTimeout\",schemaPath:\"#/properties/http2SessionTimeout/type\",keyword:\"type\",params:{type: \"integer\"},message:\"must be integer\"}];\nreturn false;\n}\n}\nif(coerced23 !== undefined){\ndata21 = coerced23;\nif(data !== undefined){\ndata[\"http2SessionTimeout\"] = coerced23;\n}\n}\n}\nvar valid0 = _errs64 === errors;\nif(valid0){\nlet data22 = data.exposeHeadRoutes;\nconst _errs66 = errors;\nif(typeof data22 !== \"boolean\"){\nlet coerced24 = undefined;\nif(!(coerced24 !== undefined)){\nif(data22 === \"false\" || data22 === 0 || data22 === null){\ncoerced24 = false;\n}\nelse if(data22 === \"true\" || data22 === 1){\ncoerced24 = true;\n}\nelse {\nvalidate10.errors = [{instancePath:instancePath+\"/exposeHeadRoutes\",schemaPath:\"#/properties/exposeHeadRoutes/type\",keyword:\"type\",params:{type: \"boolean\"},message:\"must be boolean\"}];\nreturn false;\n}\n}\nif(coerced24 !== undefined){\ndata22 = coerced24;\nif(data !== undefined){\ndata[\"exposeHeadRoutes\"] = coerced24;\n}\n}\n}\nvar valid0 = _errs66 === errors;\nif(valid0){\nif(data.versioning !== undefined){\nlet data23 = data.versioning;\nconst _errs68 = errors;\nif(errors === _errs68){\nif(data23 && typeof data23 == \"object\" && !Array.isArray(data23)){\nlet missing1;\nif(((data23.storage === undefined) && (missing1 = \"storage\")) || ((data23.deriveVersion === undefined) && (missing1 = \"deriveVersion\"))){\nvalidate10.errors = [{instancePath:instancePath+\"/versioning\",schemaPath:\"#/properties/versioning/required\",keyword:\"required\",params:{missingProperty: missing1},message:\"must have required property '\"+missing1+\"'\"}];\nreturn false;\n}\n}\nelse {\nvalidate10.errors = [{instancePath:instancePath+\"/versioning\",schemaPath:\"#/properties/versioning/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"}];\nreturn false;\n}\n}\nvar valid0 = _errs68 === errors;\n}\nelse {\nvar valid0 = true;\n}\nif(valid0){\nif(data.constraints !== undefined){\nlet data24 = data.constraints;\nconst _errs71 = errors;\nif(errors === _errs71){\nif(data24 && typeof data24 == \"object\" && !Array.isArray(data24)){\nfor(const key2 in data24){\nlet data25 = data24[key2];\nconst _errs74 = errors;\nif(errors === _errs74){\nif(data25 && typeof data25 == \"object\" && !Array.isArray(data25)){\nlet missing2;\nif(((((data25.name === undefined) && (missing2 = \"name\")) || ((data25.storage === undefined) && (missing2 = \"storage\"))) || ((data25.validate === undefined) && (missing2 = \"validate\"))) || ((data25.deriveConstraint === undefined) && (missing2 = \"deriveConstraint\"))){\nvalidate10.errors = [{instancePath:instancePath+\"/constraints/\" + key2.replace(/~/g, \"~0\").replace(/\\//g, \"~1\"),schemaPath:\"#/properties/constraints/additionalProperties/required\",keyword:\"required\",params:{missingProperty: missing2},message:\"must have required property '\"+missing2+\"'\"}];\nreturn false;\n}\nelse {\nif(data25.name !== undefined){\nlet data26 = data25.name;\nif(typeof data26 !== \"string\"){\nlet dataType25 = typeof data26;\nlet coerced25 = undefined;\nif(!(coerced25 !== undefined)){\nif(dataType25 == \"number\" || dataType25 == \"boolean\"){\ncoerced25 = \"\" + data26;\n}\nelse if(data26 === null){\ncoerced25 = \"\";\n}\nelse {\nvalidate10.errors = [{instancePath:instancePath+\"/constraints/\" + key2.replace(/~/g, \"~0\").replace(/\\//g, \"~1\")+\"/name\",schemaPath:\"#/properties/constraints/additionalProperties/properties/name/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"}];\nreturn false;\n}\n}\nif(coerced25 !== undefined){\ndata26 = coerced25;\nif(data25 !== undefined){\ndata25[\"name\"] = coerced25;\n}\n}\n}\n}\n}\n}\nelse {\nvalidate10.errors = [{instancePath:instancePath+\"/constraints/\" + key2.replace(/~/g, \"~0\").replace(/\\//g, \"~1\"),schemaPath:\"#/properties/constraints/additionalProperties/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"}];\nreturn false;\n}\n}\nvar valid7 = _errs74 === errors;\nif(!valid7){\nbreak;\n}\n}\n}\nelse {\nvalidate10.errors = [{instancePath:instancePath+\"/constraints\",schemaPath:\"#/properties/constraints/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"}];\nreturn false;\n}\n}\nvar valid0 = _errs71 === errors;\n}\nelse {\nvar valid0 = true;\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\nelse {\nvalidate10.errors = [{instancePath,schemaPath:\"#/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"}];\nreturn false;\n}\n}\nvalidate10.errors = vErrors;\nreturn errors === 0;\n}\n\n\nmodule.exports.defaultInitOptions = {\"connectionTimeout\":0,\"keepAliveTimeout\":72000,\"maxRequestsPerSocket\":0,\"requestTimeout\":0,\"bodyLimit\":1048576,\"caseSensitive\":true,\"allowUnsafeRegex\":false,\"disableRequestLogging\":false,\"jsonShorthand\":true,\"ignoreTrailingSlash\":false,\"ignoreDuplicateSlashes\":false,\"maxParamLength\":100,\"onProtoPoisoning\":\"error\",\"onConstructorPoisoning\":\"error\",\"pluginTimeout\":10000,\"requestIdHeader\":\"request-id\",\"requestIdLogLabel\":\"reqId\",\"http2SessionTimeout\":72000,\"exposeHeadRoutes\":true}\n'/test/validation-error-handling.test.jsDl'use strict'\n\nconst { test } = require('tap')\nconst Joi = require('joi')\nconst Fastify = require('..')\n\nconst schema = {\n  body: {\n    type: 'object',\n    properties: {\n      name: { type: 'string' },\n      work: { type: 'string' }\n    },\n    required: ['name', 'work']\n  }\n}\n\nfunction echoBody (req, reply) {\n  reply.code(200).send(req.body.name)\n}\n\ntest('should work with valid payload', t => {\n  t.plan(3)\n\n  const fastify = Fastify()\n\n  fastify.post('/', { schema }, echoBody)\n\n  fastify.inject({\n    method: 'POST',\n    payload: {\n      name: 'michelangelo',\n      work: 'sculptor, painter, architect and poet'\n    },\n    url: '/'\n  }, (err, res) => {\n    t.error(err)\n    t.same(res.payload, 'michelangelo')\n    t.equal(res.statusCode, 200)\n  })\n})\n\ntest('should fail immediately with invalid payload', t => {\n  t.plan(3)\n\n  const fastify = Fastify()\n\n  fastify.post('/', { schema }, echoBody)\n\n  fastify.inject({\n    method: 'POST',\n    payload: {\n      hello: 'michelangelo'\n    },\n    url: '/'\n  }, (err, res) => {\n    t.error(err)\n    t.same(res.json(), {\n      statusCode: 400,\n      error: 'Bad Request',\n      message: \"body must have required property 'name'\"\n    })\n    t.equal(res.statusCode, 400)\n  })\n})\n\ntest('should be able to use setErrorHandler specify custom validation error', t => {\n  t.plan(3)\n\n  const fastify = Fastify()\n\n  fastify.post('/', { schema }, function (req, reply) {\n    t.fail('should not be here')\n    reply.code(200).send(req.body.name)\n  })\n\n  fastify.setErrorHandler(function (error, request, reply) {\n    if (error.validation) {\n      reply.status(422).send(new Error('validation failed'))\n    }\n  })\n\n  fastify.inject({\n    method: 'POST',\n    payload: {\n      hello: 'michelangelo'\n    },\n    url: '/'\n  }, (err, res) => {\n    t.error(err)\n    t.same(JSON.parse(res.payload), {\n      statusCode: 422,\n      error: 'Unprocessable Entity',\n      message: 'validation failed'\n    })\n    t.equal(res.statusCode, 422)\n  })\n})\n\ntest('validation error has 400 statusCode set', t => {\n  t.plan(3)\n\n  const fastify = Fastify()\n\n  fastify.setErrorHandler((error, request, reply) => {\n    const errorResponse = {\n      message: error.message,\n      statusCode: error.statusCode || 500\n    }\n\n    reply.code(errorResponse.statusCode).send(errorResponse)\n  })\n\n  fastify.post('/', { schema }, echoBody)\n\n  fastify.inject({\n    method: 'POST',\n    payload: {\n      hello: 'michelangelo'\n    },\n    url: '/'\n  }, (err, res) => {\n    t.error(err)\n    t.same(res.json(), {\n      statusCode: 400,\n      message: \"body must have required property 'name'\"\n    })\n    t.equal(res.statusCode, 400)\n  })\n})\n\ntest('error inside custom error handler should have validationContext', t => {\n  t.plan(1)\n\n  const fastify = Fastify()\n\n  fastify.post('/', {\n    schema,\n    validatorCompiler: ({ schema, method, url, httpPart }) => {\n      return function (data) {\n        return { error: new Error('this failed') }\n      }\n    }\n  }, function (req, reply) {\n    t.fail('should not be here')\n    reply.code(200).send(req.body.name)\n  })\n\n  fastify.setErrorHandler(function (error, request, reply) {\n    t.equal(error.validationContext, 'body')\n    reply.status(500).send(error)\n  })\n\n  fastify.inject({\n    method: 'POST',\n    payload: {\n      name: 'michelangelo',\n      work: 'artist'\n    },\n    url: '/'\n  }, () => {})\n})\n\ntest('error inside custom error handler should have validationContext if specified by custom error handler', t => {\n  t.plan(1)\n\n  const fastify = Fastify()\n\n  fastify.post('/', {\n    schema,\n    validatorCompiler: ({ schema, method, url, httpPart }) => {\n      return function (data) {\n        const error = new Error('this failed')\n        error.validationContext = 'customContext'\n        return { error }\n      }\n    }\n  }, function (req, reply) {\n    t.fail('should not be here')\n    reply.code(200).send(req.body.name)\n  })\n\n  fastify.setErrorHandler(function (error, request, reply) {\n    t.equal(error.validationContext, 'customContext')\n    reply.status(500).send(error)\n  })\n\n  fastify.inject({\n    method: 'POST',\n    payload: {\n      name: 'michelangelo',\n      work: 'artist'\n    },\n    url: '/'\n  }, () => {})\n})\n\ntest('should be able to attach validation to request', t => {\n  t.plan(3)\n\n  const fastify = Fastify()\n\n  fastify.post('/', { schema, attachValidation: true }, function (req, reply) {\n    reply.code(400).send(req.validationError.validation)\n  })\n\n  fastify.inject({\n    method: 'POST',\n    payload: {\n      hello: 'michelangelo'\n    },\n    url: '/'\n  }, (err, res) => {\n    t.error(err)\n\n    t.same(res.json(), [{\n      keyword: 'required',\n      instancePath: '',\n      schemaPath: '#/required',\n      params: { missingProperty: 'name' },\n      message: 'must have required property \\'name\\''\n    }])\n    t.equal(res.statusCode, 400)\n  })\n})\n\ntest('should respect when attachValidation is explicitly set to false', t => {\n  t.plan(3)\n\n  const fastify = Fastify()\n\n  fastify.post('/', { schema, attachValidation: false }, function (req, reply) {\n    t.fail('should not be here')\n    reply.code(200).send(req.validationError.validation)\n  })\n\n  fastify.inject({\n    method: 'POST',\n    payload: {\n      hello: 'michelangelo'\n    },\n    url: '/'\n  }, (err, res) => {\n    t.error(err)\n    t.same(JSON.parse(res.payload), {\n      statusCode: 400,\n      error: 'Bad Request',\n      message: \"body must have required property 'name'\"\n    })\n    t.equal(res.statusCode, 400)\n  })\n})\n\ntest('Attached validation error should take precedence over setErrorHandler', t => {\n  t.plan(3)\n\n  const fastify = Fastify()\n\n  fastify.post('/', { schema, attachValidation: true }, function (req, reply) {\n    reply.code(400).send('Attached: ' + req.validationError)\n  })\n\n  fastify.setErrorHandler(function (error, request, reply) {\n    t.fail('should not be here')\n    if (error.validation) {\n      reply.status(422).send(new Error('validation failed'))\n    }\n  })\n\n  fastify.inject({\n    method: 'POST',\n    payload: {\n      hello: 'michelangelo'\n    },\n    url: '/'\n  }, (err, res) => {\n    t.error(err)\n    t.same(res.payload, \"Attached: Error: body must have required property 'name'\")\n    t.equal(res.statusCode, 400)\n  })\n})\n\ntest('should handle response validation error', t => {\n  t.plan(2)\n\n  const response = {\n    200: {\n      type: 'object',\n      required: ['name', 'work'],\n      properties: {\n        name: { type: 'string' },\n        work: { type: 'string' }\n      }\n    }\n  }\n\n  const fastify = Fastify()\n\n  fastify.get('/', { schema: { response } }, function (req, reply) {\n    try {\n      reply.code(200).send({ work: 'actor' })\n    } catch (error) {\n      reply.code(500).send(error)\n    }\n  })\n\n  fastify.inject({\n    method: 'GET',\n    payload: { },\n    url: '/'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.payload, '{\"statusCode\":500,\"error\":\"Internal Server Error\",\"message\":\"\\\\\"name\\\\\" is required!\"}')\n  })\n})\n\ntest('should handle response validation error with promises', t => {\n  t.plan(2)\n\n  const response = {\n    200: {\n      type: 'object',\n      required: ['name', 'work'],\n      properties: {\n        name: { type: 'string' },\n        work: { type: 'string' }\n      }\n    }\n  }\n\n  const fastify = Fastify()\n\n  fastify.get('/', { schema: { response } }, function (req, reply) {\n    return Promise.resolve({ work: 'actor' })\n  })\n\n  fastify.inject({\n    method: 'GET',\n    payload: { },\n    url: '/'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.payload, '{\"statusCode\":500,\"error\":\"Internal Server Error\",\"message\":\"\\\\\"name\\\\\" is required!\"}')\n  })\n})\n\ntest('should return a defined output message parsing AJV errors', t => {\n  t.plan(2)\n\n  const body = {\n    type: 'object',\n    required: ['name', 'work'],\n    properties: {\n      name: { type: 'string' },\n      work: { type: 'string' }\n    }\n  }\n\n  const fastify = Fastify()\n\n  fastify.post('/', { schema: { body } }, function (req, reply) {\n    t.fail()\n  })\n\n  fastify.inject({\n    method: 'POST',\n    payload: { },\n    url: '/'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.payload, '{\"statusCode\":400,\"error\":\"Bad Request\",\"message\":\"body must have required property \\'name\\'\"}')\n  })\n})\n\ntest('should return a defined output message parsing JOI errors', t => {\n  t.plan(2)\n\n  const body = Joi.object().keys({\n    name: Joi.string().required(),\n    work: Joi.string().required()\n  }).required()\n\n  const fastify = Fastify()\n\n  fastify.post('/', {\n    schema: { body },\n    validatorCompiler: ({ schema, method, url, httpPart }) => {\n      return data => schema.validate(data)\n    }\n  },\n  function (req, reply) {\n    t.fail()\n  })\n\n  fastify.inject({\n    method: 'POST',\n    payload: {},\n    url: '/'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.payload, '{\"statusCode\":400,\"error\":\"Bad Request\",\"message\":\"\\\\\"name\\\\\" is required\"}')\n  })\n})\n\ntest('should return a defined output message parsing JOI error details', t => {\n  t.plan(2)\n\n  const body = Joi.object().keys({\n    name: Joi.string().required(),\n    work: Joi.string().required()\n  }).required()\n\n  const fastify = Fastify()\n\n  fastify.post('/', {\n    schema: { body },\n    validatorCompiler: ({ schema, method, url, httpPart }) => {\n      return data => {\n        const validation = schema.validate(data)\n        return { error: validation.error.details }\n      }\n    }\n  },\n  function (req, reply) {\n    t.fail()\n  })\n\n  fastify.inject({\n    method: 'POST',\n    payload: {},\n    url: '/'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.payload, '{\"statusCode\":400,\"error\":\"Bad Request\",\"message\":\"body \\\\\"name\\\\\" is required\"}')\n  })\n})\n\ntest('the custom error formatter context must be the server instance', t => {\n  t.plan(4)\n\n  const fastify = Fastify()\n\n  fastify.setSchemaErrorFormatter(function (errors, dataVar) {\n    t.same(this, fastify)\n    return new Error('my error')\n  })\n\n  fastify.post('/', { schema }, echoBody)\n\n  fastify.inject({\n    method: 'POST',\n    payload: {\n      hello: 'michelangelo'\n    },\n    url: '/'\n  }, (err, res) => {\n    t.error(err)\n    t.same(res.json(), {\n      statusCode: 400,\n      error: 'Bad Request',\n      message: 'my error'\n    })\n    t.equal(res.statusCode, 400)\n  })\n})\n\ntest('the custom error formatter context must be the server instance in options', t => {\n  t.plan(4)\n\n  const fastify = Fastify({\n    schemaErrorFormatter: function (errors, dataVar) {\n      t.same(this, fastify)\n      return new Error('my error')\n    }\n  })\n\n  fastify.post('/', { schema }, echoBody)\n\n  fastify.inject({\n    method: 'POST',\n    payload: {\n      hello: 'michelangelo'\n    },\n    url: '/'\n  }, (err, res) => {\n    t.error(err)\n    t.same(res.json(), {\n      statusCode: 400,\n      error: 'Bad Request',\n      message: 'my error'\n    })\n    t.equal(res.statusCode, 400)\n  })\n})\n\ntest('should call custom error formatter', t => {\n  t.plan(9)\n\n  const fastify = Fastify({\n    schemaErrorFormatter: (errors, dataVar) => {\n      t.equal(errors.length, 1)\n      t.equal(errors[0].message, \"must have required property 'name'\")\n      t.equal(errors[0].keyword, 'required')\n      t.equal(errors[0].schemaPath, '#/required')\n      t.same(errors[0].params, {\n        missingProperty: 'name'\n      })\n      t.equal(dataVar, 'body')\n      return new Error('my error')\n    }\n  })\n\n  fastify.post('/', { schema }, echoBody)\n\n  fastify.inject({\n    method: 'POST',\n    payload: {\n      hello: 'michelangelo'\n    },\n    url: '/'\n  }, (err, res) => {\n    t.error(err)\n    t.same(res.json(), {\n      statusCode: 400,\n      error: 'Bad Request',\n      message: 'my error'\n    })\n    t.equal(res.statusCode, 400)\n  })\n})\n\ntest('should catch error inside formatter and return message', t => {\n  t.plan(3)\n\n  const fastify = Fastify({\n    schemaErrorFormatter: (errors, dataVar) => {\n      throw new Error('abc')\n    }\n  })\n\n  fastify.post('/', { schema }, echoBody)\n\n  fastify.inject({\n    method: 'POST',\n    payload: {\n      hello: 'michelangelo'\n    },\n    url: '/'\n  }, (err, res) => {\n    t.error(err)\n    t.same(res.json(), {\n      statusCode: 500,\n      error: 'Internal Server Error',\n      message: 'abc'\n    })\n    t.equal(res.statusCode, 500)\n    t.end()\n  })\n})\n\ntest('cannot create a fastify instance with wrong type of errorFormatter', t => {\n  t.plan(3)\n\n  try {\n    Fastify({\n      schemaErrorFormatter: async (errors, dataVar) => {\n        return new Error('should not execute')\n      }\n    })\n  } catch (err) {\n    t.equal(err.code, 'FST_ERR_SCHEMA_ERROR_FORMATTER_NOT_FN')\n  }\n\n  try {\n    Fastify({\n      schemaErrorFormatter: 500\n    })\n  } catch (err) {\n    t.equal(err.code, 'FST_ERR_SCHEMA_ERROR_FORMATTER_NOT_FN')\n  }\n\n  try {\n    const fastify = Fastify()\n    fastify.setSchemaErrorFormatter(500)\n  } catch (err) {\n    t.equal(err.code, 'FST_ERR_SCHEMA_ERROR_FORMATTER_NOT_FN')\n  }\n})\n\ntest('should register a route based schema error formatter', t => {\n  t.plan(3)\n\n  const fastify = Fastify()\n\n  fastify.post('/', {\n    schema,\n    schemaErrorFormatter: (errors, dataVar) => {\n      return new Error('abc')\n    }\n  }, echoBody)\n\n  fastify.inject({\n    method: 'POST',\n    payload: {\n      hello: 'michelangelo'\n    },\n    url: '/'\n  }, (err, res) => {\n    t.error(err)\n    t.same(res.json(), {\n      statusCode: 400,\n      error: 'Bad Request',\n      message: 'abc'\n    })\n    t.equal(res.statusCode, 400)\n    t.end()\n  })\n})\n\ntest('prefer route based error formatter over global one', t => {\n  t.plan(9)\n\n  const fastify = Fastify({\n    schemaErrorFormatter: (errors, dataVar) => {\n      return new Error('abc123')\n    }\n  })\n\n  fastify.post('/', {\n    schema,\n    schemaErrorFormatter: (errors, dataVar) => {\n      return new Error('123')\n    }\n  }, echoBody)\n\n  fastify.post('/abc', {\n    schema,\n    schemaErrorFormatter: (errors, dataVar) => {\n      return new Error('abc')\n    }\n  }, echoBody)\n\n  fastify.post('/test', { schema }, echoBody)\n\n  fastify.inject({\n    method: 'POST',\n    payload: {\n      hello: 'michelangelo'\n    },\n    url: '/'\n  }, (err, res) => {\n    t.error(err)\n    t.same(res.json(), {\n      statusCode: 400,\n      error: 'Bad Request',\n      message: '123'\n    })\n    t.equal(res.statusCode, 400)\n  })\n\n  fastify.inject({\n    method: 'POST',\n    payload: {\n      hello: 'michelangelo'\n    },\n    url: '/abc'\n  }, (err, res) => {\n    t.error(err)\n    t.same(res.json(), {\n      statusCode: 400,\n      error: 'Bad Request',\n      message: 'abc'\n    })\n    t.equal(res.statusCode, 400)\n  })\n\n  fastify.inject({\n    method: 'POST',\n    payload: {\n      hello: 'michelangelo'\n    },\n    url: '/test'\n  }, (err, res) => {\n    t.error(err)\n    t.same(res.json(), {\n      statusCode: 400,\n      error: 'Bad Request',\n      message: 'abc123'\n    })\n    t.equal(res.statusCode, 400)\n  })\n})\n\ntest('adding schemaErrorFormatter', t => {\n  t.plan(3)\n\n  const fastify = Fastify()\n\n  fastify.setSchemaErrorFormatter((errors, dataVar) => {\n    return new Error('abc')\n  })\n\n  fastify.post('/', { schema }, echoBody)\n\n  fastify.inject({\n    method: 'POST',\n    payload: {\n      hello: 'michelangelo'\n    },\n    url: '/'\n  }, (err, res) => {\n    t.error(err)\n    t.same(res.json(), {\n      statusCode: 400,\n      error: 'Bad Request',\n      message: 'abc'\n    })\n    t.equal(res.statusCode, 400)\n    t.end()\n  })\n})\n\ntest('plugin override', t => {\n  t.plan(15)\n\n  const fastify = Fastify({\n    schemaErrorFormatter: (errors, dataVar) => {\n      return new Error('B')\n    }\n  })\n\n  fastify.register((instance, opts, done) => {\n    instance.setSchemaErrorFormatter((errors, dataVar) => {\n      return new Error('C')\n    })\n\n    instance.post('/d', {\n      schema,\n      schemaErrorFormatter: (errors, dataVar) => {\n        return new Error('D')\n      }\n    }, function (req, reply) {\n      reply.code(200).send(req.body.name)\n    })\n\n    instance.post('/c', { schema }, echoBody)\n\n    instance.register((subinstance, opts, done) => {\n      subinstance.post('/stillC', { schema }, echoBody)\n      done()\n    })\n\n    done()\n  })\n\n  fastify.post('/b', { schema }, echoBody)\n\n  fastify.post('/', {\n    schema,\n    schemaErrorFormatter: (errors, dataVar) => {\n      return new Error('A')\n    }\n  }, echoBody)\n\n  fastify.inject({\n    method: 'POST',\n    payload: {\n      hello: 'michelangelo'\n    },\n    url: '/'\n  }, (err, res) => {\n    t.error(err)\n    t.same(res.json(), {\n      statusCode: 400,\n      error: 'Bad Request',\n      message: 'A'\n    })\n    t.equal(res.statusCode, 400)\n  })\n\n  fastify.inject({\n    method: 'POST',\n    payload: {\n      hello: 'michelangelo'\n    },\n    url: '/b'\n  }, (err, res) => {\n    t.error(err)\n    t.same(res.json(), {\n      statusCode: 400,\n      error: 'Bad Request',\n      message: 'B'\n    })\n    t.equal(res.statusCode, 400)\n  })\n\n  fastify.inject({\n    method: 'POST',\n    payload: {\n      hello: 'michelangelo'\n    },\n    url: '/c'\n  }, (err, res) => {\n    t.error(err)\n    t.same(res.json(), {\n      statusCode: 400,\n      error: 'Bad Request',\n      message: 'C'\n    })\n    t.equal(res.statusCode, 400)\n  })\n\n  fastify.inject({\n    method: 'POST',\n    payload: {\n      hello: 'michelangelo'\n    },\n    url: '/d'\n  }, (err, res) => {\n    t.error(err)\n    t.same(res.json(), {\n      statusCode: 400,\n      error: 'Bad Request',\n      message: 'D'\n    })\n    t.equal(res.statusCode, 400)\n  })\n\n  fastify.inject({\n    method: 'POST',\n    payload: {\n      hello: 'michelangelo'\n    },\n    url: '/stillC'\n  }, (err, res) => {\n    t.error(err)\n    t.same(res.json(), {\n      statusCode: 400,\n      error: 'Bad Request',\n      message: 'C'\n    })\n    t.equal(res.statusCode, 400)\n  })\n})\n/test/copy.test.js\u0003\u001c'use strict'\n\nconst t = require('tap')\nconst test = t.test\nconst sget = require('simple-get').concat\nconst fastify = require('..')()\n\ntest('can be created - copy', t => {\n  t.plan(1)\n  try {\n    fastify.route({\n      method: 'COPY',\n      url: '*',\n      handler: function (req, reply) {\n        reply.code(204).send()\n      }\n    })\n    t.pass()\n  } catch (e) {\n    t.fail()\n  }\n})\n\nfastify.listen({ port: 0 }, err => {\n  t.error(err)\n  t.teardown(() => { fastify.close() })\n\n  test('request - copy', t => {\n    t.plan(2)\n    sget({\n      url: `http://localhost:${fastify.server.address().port}/test.txt`,\n      method: 'COPY',\n      headers: {\n        Destination: '/test2.txt'\n      }\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 204)\n    })\n  })\n})\n/docs/Guides/Testing.md\u001c<h1 align=\"center\">Fastify</h1>\n\n## Testing\n\nTesting is one of the most important parts of developing an application. Fastify\nis very flexible when it comes to testing and is compatible with most testing\nframeworks (such as [Tap](https://www.npmjs.com/package/tap), which is used in\nthe examples below).\n\nLet's `cd` into a fresh directory called 'testing-example' and type `npm init\n-y` in our terminal.\n\nRun `npm i fastify && npm i tap pino-pretty -D`\n\n### Separating concerns makes testing easy\n\nFirst, we are going to separate our application code from our server code:\n\n**app.js**:\n\n```js\n'use strict'\n\nconst fastify = require('fastify')\n\nfunction build(opts={}) {\n  const app = fastify(opts)\n  app.get('/', async function (request, reply) {\n    return { hello: 'world' }\n  })\n\n  return app\n}\n\nmodule.exports = build\n```\n\n**server.js**:\n\n```js\n'use strict'\n\nconst server = require('./app')({\n  logger: {\n    level: 'info',\n    transport: {\n      target: 'pino-pretty'\n    }\n  }\n})\n\nserver.listen({ port: 3000 }, (err, address) => {\n  if (err) {\n    server.log.error(err)\n    process.exit(1)\n  }\n})\n```\n\n### Benefits of using fastify.inject()\n\nFastify comes with built-in support for fake HTTP injection thanks to\n[`light-my-request`](https://github.com/fastify/light-my-request).\n\nBefore introducing any tests, we will use the `.inject` method to make a fake\nrequest to our route:\n\n**app.test.js**:\n\n```js\n'use strict'\n\nconst build = require('./app')\n\nconst test = async () => {\n  const app = build()\n\n  const response = await app.inject({\n    method: 'GET',\n    url: '/'\n  })\n\n  console.log('status code: ', response.statusCode)\n  console.log('body: ', response.body)\n}\ntest()\n```\n\nFirst, our code will run inside an asynchronous function, giving us access to\nasync/await.\n\n`.inject` ensures all registered plugins have booted up and our application is\nready to test. Finally, we pass the request method we want to use and a route.\nUsing await we can store the response without a callback.\n\n\n\nRun the test file in your terminal `node app.test.js`\n\n```sh\nstatus code:  200\nbody:  {\"hello\":\"world\"}\n```\n\n\n\n### Testing with HTTP injection\n\nNow we can replace our `console.log` calls with actual tests!\n\nIn your `package.json` change the \"test\" script to:\n\n`\"test\": \"tap --reporter=list --watch\"`\n\n**app.test.js**:\n\n```js\n'use strict'\n\nconst { test } = require('tap')\nconst build = require('./app')\n\ntest('requests the \"/\" route', async t => {\n  const app = build()\n\n  const response = await app.inject({\n    method: 'GET',\n    url: '/'\n  })\n  t.equal(response.statusCode, 200, 'returns a status code of 200')\n})\n```\n\nFinally, run `npm test` in the terminal and see your test results!\n\nThe `inject` method can do much more than a simple GET request to a URL:\n```js\nfastify.inject({\n  method: String,\n  url: String,\n  query: Object,\n  payload: Object,\n  headers: Object,\n  cookies: Object\n}, (error, response) => {\n  // your tests\n})\n```\n\n`.inject` methods can also be chained by omitting the callback function:\n\n```js\nfastify\n  .inject()\n  .get('/')\n  .headers({ foo: 'bar' })\n  .query({ foo: 'bar' })\n  .end((err, res) => { // the .end call will trigger the request\n    console.log(res.payload)\n  })\n```\n\nor in the promisified version\n\n```js\nfastify\n  .inject({\n    method: String,\n    url: String,\n    query: Object,\n    payload: Object,\n    headers: Object,\n    cookies: Object\n  })\n  .then(response => {\n    // your tests\n  })\n  .catch(err => {\n    // handle error\n  })\n```\n\nAsync await is supported as well!\n```js\ntry {\n  const res = await fastify.inject({ method: String, url: String, payload: Object, headers: Object })\n  // your tests\n} catch (err) {\n  // handle error\n}\n```\n\n#### Another Example:\n\n**app.js**\n```js\nconst Fastify = require('fastify')\n\nfunction buildFastify () {\n  const fastify = Fastify()\n\n  fastify.get('/', function (request, reply) {\n    reply.send({ hello: 'world' })\n  })\n\n  return fastify\n}\n\nmodule.exports = buildFastify\n```\n\n**test.js**\n```js\nconst tap = require('tap')\nconst buildFastify = require('./app')\n\ntap.test('GET `/` route', t => {\n  t.plan(4)\n\n  const fastify = buildFastify()\n\n  // At the end of your tests it is highly recommended to call `.close()`\n  // to ensure that all connections to external services get closed.\n  t.teardown(() => fastify.close())\n\n  fastify.inject({\n    method: 'GET',\n    url: '/'\n  }, (err, response) => {\n    t.error(err)\n    t.equal(response.statusCode, 200)\n    t.equal(response.headers['content-type'], 'application/json; charset=utf-8')\n    t.same(response.json(), { hello: 'world' })\n  })\n})\n```\n\n### Testing with a running server\nFastify can also be tested after starting the server with `fastify.listen()` or\nafter initializing routes and plugins with `fastify.ready()`.\n\n#### Example:\n\nUses **app.js** from the previous example.\n\n**test-listen.js** (testing with [`undici`](https://www.npmjs.com/package/undici))\n```js\nconst tap = require('tap')\nconst { Client } = require('undici')\nconst buildFastify = require('./app')\n\ntap.test('should work with undici', async t => {\n  t.plan(2)\n\n  const fastify = buildFastify()\n\n  await fastify.listen()\n\n   const client = new Client(\n    'http://localhost:' + fastify.server.address().port, {\n      keepAliveTimeout: 10,\n      keepAliveMaxTimeout: 10\n    } \n  )\n\n  t.teardown(() => {\n    fastify.close()\n    client.close()\n  })\n\n  const response = await client.request({ method: 'GET', path: '/' })\n\n  t.equal(await response.body.text(), '{\"hello\":\"world\"}')\n  t.equal(response.statusCode, 200)\n})\n```\n\nAlternatively, starting with Node.js 18, \n[`fetch`](https://nodejs.org/docs/latest-v18.x/api/globals.html#fetch) \nmay be used without requiring any extra dependencies:\n\n**test-listen.js**\n```js\nconst tap = require('tap')\nconst buildFastify = require('./app')\n\ntap.test('should work with fetch', async t => {\n  t.plan(3)\n\n  const fastify = buildFastify()\n\n  t.teardown(() => fastify.close())\n\n  await fastify.listen()\n  \n  const response = await fetch(\n    'http://localhost:' + fastify.server.address().port\n  )\n\n  t.equal(response.status, 200)\n  t.equal(\n    response.headers.get('content-type'),\n    'application/json; charset=utf-8'\n  )\n  t.has(await response.json(), { hello: 'world' })\n})\n```\n\n**test-ready.js** (testing with\n[`SuperTest`](https://www.npmjs.com/package/supertest))\n```js\nconst tap = require('tap')\nconst supertest = require('supertest')\nconst buildFastify = require('./app')\n\ntap.test('GET `/` route', async (t) => {\n  const fastify = buildFastify()\n\n  t.teardown(() => fastify.close())\n\n  await fastify.ready()\n\n  const response = await supertest(fastify.server)\n    .get('/')\n    .expect(200)\n    .expect('Content-Type', 'application/json; charset=utf-8')\n  t.same(response.body, { hello: 'world' })\n})\n```\n\n### How to inspect tap tests\n1. Isolate your test by passing the `{only: true}` option\n```javascript\ntest('should ...', {only: true}, t => ...)\n```\n2. Run `tap` using `npx`\n```bash\n> npx tap -O -T --node-arg=--inspect-brk test/<test-file.test.js>\n```\n- `-O` specifies to run tests with the `only` option enabled\n- `-T` specifies not to timeout (while you're debugging)\n- `--node-arg=--inspect-brk` will launch the node debugger\n3. In VS Code, create and launch a `Node.js: Attach` debug configuration. No\n   modification should be necessary.\n\nNow you should be able to step through your test file (and the rest of\n`Fastify`) in your code editor.\n/test/schema-examples.test.js2'use strict'\n\nconst { test } = require('tap')\nconst localize = require('ajv-i18n')\nconst Fastify = require('..')\n\ntest('Example - URI $id', t => {\n  t.plan(1)\n  const fastify = Fastify()\n  fastify.addSchema({\n    $id: 'http://example.com/',\n    type: 'object',\n    properties: {\n      hello: { type: 'string' }\n    }\n  })\n\n  fastify.post('/', {\n    handler () { },\n    schema: {\n      body: {\n        type: 'array',\n        items: { $ref: 'http://example.com#/properties/hello' }\n      }\n    }\n  })\n\n  fastify.ready(err => t.error(err))\n})\n\ntest('Example - string $id', t => {\n  t.plan(1)\n  const fastify = Fastify()\n  fastify.addSchema({\n    $id: 'commonSchema',\n    type: 'object',\n    properties: {\n      hello: { type: 'string' }\n    }\n  })\n\n  fastify.post('/', {\n    handler () { },\n    schema: {\n      body: { $ref: 'commonSchema#' },\n      headers: { $ref: 'commonSchema#' }\n    }\n  })\n\n  fastify.ready(err => t.error(err))\n})\n\ntest('Example - get schema', t => {\n  t.plan(1)\n  const fastify = Fastify()\n  fastify.addSchema({\n    $id: 'schemaId',\n    type: 'object',\n    properties: {\n      hello: { type: 'string' }\n    }\n  })\n\n  const mySchemas = fastify.getSchemas()\n  const mySchema = fastify.getSchema('schemaId')\n  t.same(mySchemas.schemaId, mySchema)\n})\n\ntest('Example - get schema encapsulated', async t => {\n  const fastify = Fastify()\n\n  fastify.addSchema({ $id: 'one', my: 'hello' })\n  // will return only `one` schema\n  fastify.get('/', (request, reply) => { reply.send(fastify.getSchemas()) })\n\n  fastify.register((instance, opts, done) => {\n    instance.addSchema({ $id: 'two', my: 'ciao' })\n    // will return `one` and `two` schemas\n    instance.get('/sub', (request, reply) => { reply.send(instance.getSchemas()) })\n\n    instance.register((subinstance, opts, done) => {\n      subinstance.addSchema({ $id: 'three', my: 'hola' })\n      // will return `one`, `two` and `three`\n      subinstance.get('/deep', (request, reply) => { reply.send(subinstance.getSchemas()) })\n      done()\n    })\n    done()\n  })\n\n  const r1 = await fastify.inject('/')\n  const r2 = await fastify.inject('/sub')\n  const r3 = await fastify.inject('/deep')\n\n  t.same(Object.keys(r1.json()), ['one'])\n  t.same(Object.keys(r2.json()), ['one', 'two'])\n  t.same(Object.keys(r3.json()), ['one', 'two', 'three'])\n})\n\ntest('Example - validation', t => {\n  t.plan(1)\n  const fastify = Fastify({\n    ajv: {\n      customOptions: {\n        allowUnionTypes: true\n      }\n    }\n  })\n  const handler = () => { }\n\n  const bodyJsonSchema = {\n    type: 'object',\n    required: ['requiredKey'],\n    properties: {\n      someKey: { type: 'string' },\n      someOtherKey: { type: 'number' },\n      requiredKey: {\n        type: 'array',\n        maxItems: 3,\n        items: { type: 'integer' }\n      },\n      nullableKey: { type: ['number', 'null'] }, // or { type: 'number', nullable: true }\n      multipleTypesKey: { type: ['boolean', 'number'] },\n      multipleRestrictedTypesKey: {\n        oneOf: [\n          { type: 'string', maxLength: 5 },\n          { type: 'number', minimum: 10 }\n        ]\n      },\n      enumKey: {\n        type: 'string',\n        enum: ['John', 'Foo']\n      },\n      notTypeKey: {\n        not: { type: 'array' }\n      }\n    }\n  }\n\n  const queryStringJsonSchema = {\n    name: { type: 'string' },\n    excitement: { type: 'integer' }\n  }\n\n  const paramsJsonSchema = {\n    par1: { type: 'string' },\n    par2: { type: 'number' }\n  }\n\n  const headersJsonSchema = {\n    type: 'object',\n    properties: {\n      'x-foo': { type: 'string' }\n    },\n    required: ['x-foo']\n  }\n\n  const schema = {\n    body: bodyJsonSchema,\n    querystring: queryStringJsonSchema,\n    params: paramsJsonSchema,\n    headers: headersJsonSchema\n  }\n\n  fastify.post('/the/url', { schema }, handler)\n  fastify.ready(err => t.error(err))\n})\n\ntest('Example - ajv config', t => {\n  t.plan(1)\n\n  const fastify = Fastify({\n    ajv: {\n      plugins: [\n        require('ajv-merge-patch')\n      ]\n    }\n  })\n\n  fastify.post('/', {\n    handler (req, reply) { reply.send({ ok: 1 }) },\n    schema: {\n      body: {\n        $patch: {\n          source: {\n            type: 'object',\n            properties: {\n              q: {\n                type: 'string'\n              }\n            }\n          },\n          with: [\n            {\n              op: 'add',\n              path: '/properties/q',\n              value: { type: 'number' }\n            }\n          ]\n        }\n      }\n    }\n  })\n\n  fastify.post('/foo', {\n    handler (req, reply) { reply.send({ ok: 1 }) },\n    schema: {\n      body: {\n        $merge: {\n          source: {\n            type: 'object',\n            properties: {\n              q: {\n                type: 'string'\n              }\n            }\n          },\n          with: {\n            required: ['q']\n          }\n        }\n      }\n    }\n  })\n\n  fastify.ready(err => t.error(err))\n})\n\ntest('Example Joi', t => {\n  t.plan(1)\n  const fastify = Fastify()\n  const handler = () => { }\n\n  const Joi = require('joi')\n  fastify.post('/the/url', {\n    schema: {\n      body: Joi.object().keys({\n        hello: Joi.string().required()\n      }).required()\n    },\n    validatorCompiler: ({ schema, method, url, httpPart }) => {\n      return data => schema.validate(data)\n    }\n  }, handler)\n\n  fastify.ready(err => t.error(err))\n})\n\ntest('Example yup', t => {\n  t.plan(1)\n  const fastify = Fastify()\n  const handler = () => { }\n\n  const yup = require('yup')\n  // Validation options to match ajv's baseline options used in Fastify\n  const yupOptions = {\n    strict: false,\n    abortEarly: false, // return all errors\n    stripUnknown: true, // remove additional properties\n    recursive: true\n  }\n\n  fastify.post('/the/url', {\n    schema: {\n      body: yup.object({\n        age: yup.number().integer().required(),\n        sub: yup.object().shape({\n          name: yup.string().required()\n        }).required()\n      })\n    },\n    validatorCompiler: ({ schema, method, url, httpPart }) => {\n      return function (data) {\n        // with option strict = false, yup `validateSync` function returns the coerced value if validation was successful, or throws if validation failed\n        try {\n          const result = schema.validateSync(data, yupOptions)\n          return { value: result }\n        } catch (e) {\n          return { error: e }\n        }\n      }\n    }\n  }, handler)\n\n  fastify.ready(err => t.error(err))\n})\n\ntest('Example - serialization', t => {\n  t.plan(1)\n  const fastify = Fastify()\n  const handler = () => { }\n\n  const schema = {\n    response: {\n      200: {\n        type: 'object',\n        properties: {\n          value: { type: 'string' },\n          otherValue: { type: 'boolean' }\n        }\n      }\n    }\n  }\n\n  fastify.post('/the/url', { schema }, handler)\n  fastify.ready(err => t.error(err))\n})\n\ntest('Example - serialization 2', t => {\n  t.plan(1)\n  const fastify = Fastify()\n  const handler = () => { }\n\n  const schema = {\n    response: {\n      '2xx': {\n        type: 'object',\n        properties: {\n          value: { type: 'string' },\n          otherValue: { type: 'boolean' }\n        }\n      },\n      201: {\n        // the contract sintax\n        value: { type: 'string' }\n      }\n    }\n  }\n\n  fastify.post('/the/url', { schema }, handler)\n  fastify.ready(err => t.error(err))\n})\n\ntest('Example - serializator', t => {\n  t.plan(1)\n  const fastify = Fastify()\n\n  fastify.setSerializerCompiler(({ schema, method, url, httpStatus }) => {\n    return data => JSON.stringify(data)\n  })\n\n  fastify.get('/user', {\n    handler (req, reply) {\n      reply.send({ id: 1, name: 'Foo', image: 'BIG IMAGE' })\n    },\n    schema: {\n      response: {\n        '2xx': {\n          id: { type: 'number' },\n          name: { type: 'string' }\n        }\n      }\n    }\n  })\n\n  fastify.ready(err => t.error(err))\n})\n\ntest('Example - schemas examples', t => {\n  t.plan(1)\n  const fastify = Fastify()\n  const handler = () => { }\n\n  fastify.addSchema({\n    $id: 'http://foo/common.json',\n    type: 'object',\n    definitions: {\n      foo: {\n        $id: '#address',\n        type: 'object',\n        properties: {\n          city: { type: 'string' }\n        }\n      }\n    }\n  })\n\n  fastify.addSchema({\n    $id: 'http://foo/shared.json',\n    type: 'object',\n    definitions: {\n      foo: {\n        type: 'object',\n        properties: {\n          city: { type: 'string' }\n        }\n      }\n    }\n  })\n\n  const refToId = {\n    type: 'object',\n    definitions: {\n      foo: {\n        $id: '#address',\n        type: 'object',\n        properties: {\n          city: { type: 'string' }\n        }\n      }\n    },\n    properties: {\n      home: { $ref: '#address' },\n      work: { $ref: '#address' }\n    }\n  }\n\n  const refToDefinitions = {\n    type: 'object',\n    definitions: {\n      foo: {\n        $id: '#address',\n        type: 'object',\n        properties: {\n          city: { type: 'string' }\n        }\n      }\n    },\n    properties: {\n      home: { $ref: '#/definitions/foo' },\n      work: { $ref: '#/definitions/foo' }\n    }\n  }\n\n  const refToSharedSchemaId = {\n    type: 'object',\n    properties: {\n      home: { $ref: 'http://foo/common.json#address' },\n      work: { $ref: 'http://foo/common.json#address' }\n    }\n  }\n\n  const refToSharedSchemaDefinitions = {\n    type: 'object',\n    properties: {\n      home: { $ref: 'http://foo/shared.json#/definitions/foo' },\n      work: { $ref: 'http://foo/shared.json#/definitions/foo' }\n    }\n  }\n\n  fastify.post('/', {\n    handler,\n    schema: {\n      body: refToId,\n      headers: refToDefinitions,\n      params: refToSharedSchemaId,\n      query: refToSharedSchemaDefinitions\n    }\n\n  })\n\n  fastify.ready(err => t.error(err))\n})\n\ntest('should return custom error messages with ajv-errors', t => {\n  t.plan(3)\n\n  const fastify = Fastify({\n    ajv: {\n      customOptions: { allErrors: true },\n      plugins: [\n        require('ajv-errors')\n      ]\n    }\n  })\n\n  const schema = {\n    body: {\n      type: 'object',\n      properties: {\n        name: { type: 'string' },\n        work: { type: 'string' },\n        age: {\n          type: 'number',\n          errorMessage: {\n            type: 'bad age - should be num'\n          }\n        }\n      },\n      required: ['name', 'work'],\n      errorMessage: {\n        required: {\n          name: 'name please',\n          work: 'work please',\n          age: 'age please'\n        }\n      }\n    }\n  }\n\n  fastify.post('/', { schema }, function (req, reply) {\n    reply.code(200).send(req.body.name)\n  })\n\n  fastify.inject({\n    method: 'POST',\n    payload: {\n      hello: 'salman',\n      age: 'bad'\n    },\n    url: '/'\n  }, (err, res) => {\n    t.error(err)\n    t.same(JSON.parse(res.payload), {\n      statusCode: 400,\n      error: 'Bad Request',\n      message: 'body/age bad age - should be num, body name please, body work please'\n    })\n    t.equal(res.statusCode, 400)\n  })\n})\n\ntest('should be able to handle formats of ajv-formats when added by plugins option', t => {\n  t.plan(3)\n\n  const fastify = Fastify({\n    ajv: {\n      plugins: [\n        require('ajv-formats')\n      ]\n    }\n  })\n\n  const schema = {\n    body: {\n      type: 'object',\n      properties: {\n        id: { type: 'string', format: 'uuid' },\n        email: { type: 'string', format: 'email' }\n      },\n      required: ['id', 'email']\n    }\n  }\n\n  fastify.post('/', { schema }, function (req, reply) {\n    reply.code(200).send(req.body.id)\n  })\n\n  fastify.inject({\n    method: 'POST',\n    payload: {\n      id: '254381a5-888c-4b41-8116-e3b1a54980bd',\n      email: 'info@fastify.io'\n    },\n    url: '/'\n  }, (_err, res) => {\n    t.equal(res.body, '254381a5-888c-4b41-8116-e3b1a54980bd')\n    t.equal(res.statusCode, 200)\n  })\n\n  fastify.inject({\n    method: 'POST',\n    payload: {\n      id: 'invalid',\n      email: 'info@fastify.io'\n    },\n    url: '/'\n  }, (_err, res) => {\n    t.same(JSON.parse(res.payload), {\n      statusCode: 400,\n      error: 'Bad Request',\n      message: 'body/id must match format \"uuid\"'\n    })\n  })\n})\n\ntest('should return localized error messages with ajv-i18n', t => {\n  t.plan(3)\n\n  const schema = {\n    body: {\n      type: 'object',\n      properties: {\n        name: { type: 'string' },\n        work: { type: 'string' }\n      },\n      required: ['name', 'work']\n    }\n  }\n\n  const fastify = Fastify({\n    ajv: {\n      customOptions: { allErrors: true }\n    }\n  })\n\n  fastify.setErrorHandler(function (error, request, reply) {\n    if (error.validation) {\n      localize.ru(error.validation)\n      reply.status(400).send(error.validation)\n      return\n    }\n    reply.send(error)\n  })\n\n  fastify.post('/', { schema }, function (req, reply) {\n    reply.code(200).send(req.body.name)\n  })\n\n  fastify.inject({\n    method: 'POST',\n    payload: {\n      name: 'salman'\n    },\n    url: '/'\n  }, (err, res) => {\n    t.error(err)\n    t.same(JSON.parse(res.payload), [{\n      instancePath: '',\n      keyword: 'required',\n      message: 'должно иметь обязательное поле work',\n      params: { missingProperty: 'work' },\n      schemaPath: '#/required'\n    }])\n    t.equal(res.statusCode, 400)\n  })\n})\n/types/.eslintrc.json\u0005#{\n  \"extends\": [\n    \"eslint:recommended\",\n    \"plugin:@typescript-eslint/eslint-recommended\",\n    \"plugin:@typescript-eslint/recommended\",\n    \"standard\"\n  ],\n  \"parser\": \"@typescript-eslint/parser\",\n  \"plugins\": [\"@typescript-eslint\"],\n  \"env\": { \"node\": true },\n  \"parserOptions\": {\n    \"ecmaVersion\": 6,\n    \"sourceType\": \"module\",\n    \"project\": \"./types/tsconfig.json\",\n    \"createDefaultProgram\": true\n  },\n  \"rules\": {\n    \"no-console\": \"off\",\n    \"@typescript-eslint/indent\": [\"error\", 2],\n    \"semi\": [\"error\", \"never\"],\n    \"import/export\": \"off\" // this errors on multiple exports (overload interfaces)\n  },\n  \"overrides\": [\n    {\n      \"files\": [\"*.d.ts\",\"*.test-d.ts\"],\n      \"rules\": {\n        \"@typescript-eslint/no-explicit-any\": \"off\"\n      }\n    },\n    {\n      \"files\": [\"*.test-d.ts\"],\n      \"rules\": {\n        \"no-unused-vars\": \"off\",\n        \"n/handle-callback-err\": \"off\",\n        \"@typescript-eslint/no-empty-function\": \"off\",\n        \"@typescript-eslint/explicit-function-return-type\": \"off\",\n        \"@typescript-eslint/no-unused-vars\": \"off\",\n        \"@typescript-eslint/no-non-null-assertion\": \"off\",\n        \"@typescript-eslint/no-misused-promises\": [\"error\", {\n          \"checksVoidReturn\": false\n        }]\n      },\n      \"globals\": {\n        \"NodeJS\": \"readonly\"\n      }\n    }\n  ]\n}\n/lib/handleRequest.js\ra'use strict'\n\nconst { validate: validateSchema } = require('./validation')\nconst { hookRunner, hookIterator } = require('./hooks')\nconst wrapThenable = require('./wrapThenable')\nconst {\n  kReplyIsError,\n  kRouteContext\n} = require('./symbols')\n\nfunction handleRequest (err, request, reply) {\n  if (reply.sent === true) return\n  if (err != null) {\n    reply[kReplyIsError] = true\n    reply.send(err)\n    return\n  }\n\n  const method = request.raw.method\n  const headers = request.headers\n  const context = request[kRouteContext]\n\n  if (method === 'GET' || method === 'HEAD') {\n    handler(request, reply)\n    return\n  }\n\n  const contentType = headers['content-type']\n\n  if (method === 'POST' || method === 'PUT' || method === 'PATCH' || method === 'TRACE' || method === 'SEARCH') {\n    if (contentType === undefined) {\n      if (\n        headers['transfer-encoding'] === undefined &&\n        (headers['content-length'] === '0' || headers['content-length'] === undefined)\n      ) { // Request has no body to parse\n        handler(request, reply)\n      } else {\n        context.contentTypeParser.run('', handler, request, reply)\n      }\n    } else {\n      context.contentTypeParser.run(contentType, handler, request, reply)\n    }\n    return\n  }\n\n  if (method === 'OPTIONS' || method === 'DELETE') {\n    if (\n      contentType !== undefined &&\n      (\n        headers['transfer-encoding'] !== undefined ||\n        headers['content-length'] !== undefined\n      )\n    ) {\n      context.contentTypeParser.run(contentType, handler, request, reply)\n    } else {\n      handler(request, reply)\n    }\n    return\n  }\n\n  // Return 404 instead of 405 see https://github.com/fastify/fastify/pull/862 for discussion\n  handler(request, reply)\n}\n\nfunction handler (request, reply) {\n  try {\n    if (request[kRouteContext].preValidation !== null) {\n      hookRunner(\n        request[kRouteContext].preValidation,\n        hookIterator,\n        request,\n        reply,\n        preValidationCallback\n      )\n    } else {\n      preValidationCallback(null, request, reply)\n    }\n  } catch (err) {\n    preValidationCallback(err, request, reply)\n  }\n}\n\nfunction preValidationCallback (err, request, reply) {\n  if (reply.sent === true) return\n\n  if (err != null) {\n    reply[kReplyIsError] = true\n    reply.send(err)\n    return\n  }\n\n  const result = validateSchema(reply[kRouteContext], request)\n  if (result) {\n    if (reply[kRouteContext].attachValidation === false) {\n      reply.send(result)\n      return\n    }\n\n    reply.request.validationError = result\n  }\n\n  // preHandler hook\n  if (request[kRouteContext].preHandler !== null) {\n    hookRunner(\n      request[kRouteContext].preHandler,\n      hookIterator,\n      request,\n      reply,\n      preHandlerCallback\n    )\n  } else {\n    preHandlerCallback(null, request, reply)\n  }\n}\n\nfunction preHandlerCallback (err, request, reply) {\n  if (reply.sent) return\n\n  if (err != null) {\n    reply[kReplyIsError] = true\n    reply.send(err)\n    return\n  }\n\n  let result\n\n  try {\n    result = request[kRouteContext].handler(request, reply)\n  } catch (err) {\n    reply[kReplyIsError] = true\n    reply.send(err)\n    return\n  }\n\n  if (result !== undefined) {\n    if (result !== null && typeof result.then === 'function') {\n      wrapThenable(result, reply)\n    } else {\n      reply.send(result)\n    }\n  }\n}\n\nmodule.exports = handleRequest\nmodule.exports[Symbol.for('internals')] = { handler, preHandlerCallback }\n/test/options.test.jsđ'use strict'\n\nconst t = require('tap')\nrequire('./helper').payloadMethod('options', t)\nrequire('./input-validation').payloadMethod('options', t)\n/test/search.test.js\u0013'use strict'\n\nconst t = require('tap')\nconst sget = require('simple-get').concat\nconst test = t.test\nconst fastify = require('..')()\n\nconst schema = {\n  response: {\n    '2xx': {\n      type: 'object',\n      properties: {\n        hello: {\n          type: 'string'\n        }\n      }\n    }\n  }\n}\n\nconst querySchema = {\n  querystring: {\n    type: 'object',\n    properties: {\n      hello: {\n        type: 'integer'\n      }\n    }\n  }\n}\n\nconst paramsSchema = {\n  params: {\n    type: 'object',\n    properties: {\n      foo: {\n        type: 'string'\n      },\n      test: {\n        type: 'integer'\n      }\n    }\n  }\n}\n\nconst bodySchema = {\n  body: {\n    type: 'object',\n    properties: {\n      foo: {\n        type: 'string'\n      },\n      test: {\n        type: 'integer'\n      }\n    }\n  }\n}\n\ntest('search', t => {\n  t.plan(1)\n  try {\n    fastify.route({\n      method: 'SEARCH',\n      url: '/',\n      schema,\n      handler: function (request, reply) {\n        reply.code(200).send({ hello: 'world' })\n      }\n    })\n    t.pass()\n  } catch (e) {\n    t.fail()\n  }\n})\n\ntest('search, params schema', t => {\n  t.plan(1)\n  try {\n    fastify.route({\n      method: 'SEARCH',\n      url: '/params/:foo/:test',\n      schema: paramsSchema,\n      handler: function (request, reply) {\n        reply.code(200).send(request.params)\n      }\n    })\n    t.pass()\n  } catch (e) {\n    t.fail()\n  }\n})\n\ntest('search, querystring schema', t => {\n  t.plan(1)\n  try {\n    fastify.route({\n      method: 'SEARCH',\n      url: '/query',\n      schema: querySchema,\n      handler: function (request, reply) {\n        reply.code(200).send(request.query)\n      }\n    })\n    t.pass()\n  } catch (e) {\n    t.fail()\n  }\n})\n\ntest('search, body schema', t => {\n  t.plan(1)\n  try {\n    fastify.route({\n      method: 'SEARCH',\n      url: '/body',\n      schema: bodySchema,\n      handler: function (request, reply) {\n        reply.code(200).send(request.body)\n      }\n    })\n    t.pass()\n  } catch (e) {\n    t.fail()\n  }\n})\n\nfastify.listen({ port: 0 }, err => {\n  t.error(err)\n  t.teardown(() => { fastify.close() })\n\n  const url = `http://localhost:${fastify.server.address().port}`\n\n  test('request - search', t => {\n    t.plan(4)\n    sget({\n      method: 'SEARCH',\n      url\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(response.headers['content-length'], '' + body.length)\n      t.same(JSON.parse(body), { hello: 'world' })\n    })\n  })\n\n  test('request search params schema', t => {\n    t.plan(4)\n    sget({\n      method: 'SEARCH',\n      url: `${url}/params/world/123`\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(response.headers['content-length'], '' + body.length)\n      t.same(JSON.parse(body), { foo: 'world', test: 123 })\n    })\n  })\n\n  test('request search params schema error', t => {\n    t.plan(3)\n    sget({\n      method: 'SEARCH',\n      url: `${url}/params/world/string`\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 400)\n      t.same(JSON.parse(body), {\n        error: 'Bad Request',\n        message: 'params/test must be integer',\n        statusCode: 400\n      })\n    })\n  })\n\n  test('request search querystring schema', t => {\n    t.plan(4)\n    sget({\n      method: 'SEARCH',\n      url: `${url}/query?hello=123`\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(response.headers['content-length'], '' + body.length)\n      t.same(JSON.parse(body), { hello: 123 })\n    })\n  })\n\n  test('request search querystring schema error', t => {\n    t.plan(3)\n    sget({\n      method: 'SEARCH',\n      url: `${url}/query?hello=world`\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 400)\n      t.same(JSON.parse(body), {\n        error: 'Bad Request',\n        message: 'querystring/hello must be integer',\n        statusCode: 400\n      })\n    })\n  })\n\n  test('request search body schema', t => {\n    t.plan(4)\n    const replyBody = { foo: 'bar', test: 5 }\n    sget({\n      method: 'SEARCH',\n      url: `${url}/body`,\n      body: JSON.stringify(replyBody),\n      headers: { 'content-type': 'application/json' }\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(response.headers['content-length'], '' + body.length)\n      t.same(JSON.parse(body), replyBody)\n    })\n  })\n\n  test('request search body schema error', t => {\n    t.plan(4)\n    sget({\n      method: 'SEARCH',\n      url: `${url}/body`,\n      body: JSON.stringify({ foo: 'bar', test: 'test' }),\n      headers: { 'content-type': 'application/json' }\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 400)\n      t.equal(response.headers['content-length'], '' + body.length)\n      t.same(JSON.parse(body), {\n        error: 'Bad Request',\n        message: 'body/test must be integer',\n        statusCode: 400\n      })\n    })\n  })\n})\n/test/pretty-print.test.js\u0018;'use strict'\n\nconst t = require('tap')\nconst test = t.test\nconst Fastify = require('..')\n\ntest('pretty print - static routes', t => {\n  t.plan(2)\n\n  const fastify = Fastify({ exposeHeadRoutes: false })\n  fastify.get('/test', () => {})\n  fastify.get('/test/hello', () => {})\n  fastify.get('/hello/world', () => {})\n\n  fastify.ready(() => {\n    const tree = fastify.printRoutes()\n\n    const expected = `└── /\n    ├── test (GET)\n    │   └── /hello (GET)\n    └── hello/world (GET)\n`\n\n    t.equal(typeof tree, 'string')\n    t.equal(tree, expected)\n  })\n})\n\ntest('pretty print - parametric routes', t => {\n  t.plan(2)\n\n  const fastify = Fastify({ exposeHeadRoutes: false })\n  fastify.get('/test', () => {})\n  fastify.get('/test/:hello', () => {})\n  fastify.get('/hello/:world', () => {})\n\n  fastify.ready(() => {\n    const tree = fastify.printRoutes()\n\n    const expected = `└── /\n    ├── test (GET)\n    │   └── /:hello (GET)\n    └── hello/:world (GET)\n`\n\n    t.equal(typeof tree, 'string')\n    t.equal(tree, expected)\n  })\n})\n\ntest('pretty print - mixed parametric routes', t => {\n  t.plan(2)\n\n  const fastify = Fastify({ exposeHeadRoutes: false })\n  fastify.get('/test', () => {})\n  fastify.get('/test/:hello', () => {})\n  fastify.post('/test/:hello', () => {})\n  fastify.get('/test/:hello/world', () => {})\n\n  fastify.ready(() => {\n    const tree = fastify.printRoutes()\n\n    const expected = `└── /test (GET)\n    └── /\n        └── :hello (GET)\n            :hello (POST)\n            └── /world (GET)\n`\n\n    t.equal(typeof tree, 'string')\n    t.equal(tree, expected)\n  })\n})\n\ntest('pretty print - wildcard routes', t => {\n  t.plan(2)\n\n  const fastify = Fastify({ exposeHeadRoutes: false })\n  fastify.get('/test', () => {})\n  fastify.get('/test/*', () => {})\n  fastify.get('/hello/*', () => {})\n\n  fastify.ready(() => {\n    const tree = fastify.printRoutes()\n\n    const expected = `└── /\n    ├── test (GET)\n    │   └── /* (GET)\n    └── hello/* (GET)\n`\n\n    t.equal(typeof tree, 'string')\n    t.equal(tree, expected)\n  })\n})\n\ntest('pretty print - empty plugins', t => {\n  t.plan(2)\n\n  const fastify = Fastify()\n  fastify.ready(() => {\n    const tree = fastify.printPlugins()\n    t.equal(typeof tree, 'string')\n    t.match(tree, 'bound root')\n  })\n})\n\ntest('pretty print - nested plugins', t => {\n  t.plan(4)\n\n  const fastify = Fastify()\n  fastify.register(async function foo (instance) {\n    instance.register(async function bar () {})\n    instance.register(async function baz () {})\n  })\n  fastify.ready(() => {\n    const tree = fastify.printPlugins()\n    t.equal(typeof tree, 'string')\n    t.match(tree, 'foo')\n    t.match(tree, 'bar')\n    t.match(tree, 'baz')\n  })\n})\n\ntest('pretty print - commonPrefix', t => {\n  t.plan(4)\n\n  const fastify = Fastify()\n  fastify.get('/hello', () => {})\n  fastify.put('/hello', () => {})\n  fastify.get('/helicopter', () => {})\n\n  fastify.ready(() => {\n    const radixTree = fastify.printRoutes()\n    const flatTree = fastify.printRoutes({ commonPrefix: false })\n\n    const radixExpected = `└── /\n    ├── hel\n    │   ├── lo (GET)\n    │   │   lo (HEAD)\n    │   └── icopter (GET)\n    │       icopter (HEAD)\n    └── hello (PUT)\n`\n    const flatExpected = `└── / (-)\n    ├── helicopter (GET, HEAD)\n    └── hello (GET, HEAD, PUT)\n`\n    t.equal(typeof radixTree, 'string')\n    t.equal(typeof flatTree, 'string')\n    t.equal(radixTree, radixExpected)\n    t.equal(flatTree, flatExpected)\n  })\n})\n\ntest('pretty print - includeMeta, includeHooks', t => {\n  t.plan(6)\n\n  const fastify = Fastify()\n  const onTimeout = () => {}\n  fastify.get('/hello', () => {})\n  fastify.put('/hello', () => {})\n  fastify.get('/helicopter', () => {})\n\n  fastify.addHook('onRequest', () => {})\n  fastify.addHook('onTimeout', onTimeout)\n\n  fastify.ready(() => {\n    const radixTree = fastify.printRoutes({ includeHooks: true, includeMeta: ['errorHandler'] })\n    const flatTree = fastify.printRoutes({ commonPrefix: false, includeHooks: true, includeMeta: ['errorHandler'] })\n    const hooksOnly = fastify.printRoutes({ commonPrefix: false, includeHooks: true })\n\n    const radixExpected = `└── /\n    ├── hel\n    │   ├── lo (GET)\n    │   │   • (onTimeout) [\"onTimeout()\"]\n    │   │   • (onRequest) [\"anonymous()\"]\n    │   │   • (errorHandler) \"defaultErrorHandler()\"\n    │   │   lo (HEAD)\n    │   │   • (onTimeout) [\"onTimeout()\"]\n    │   │   • (onRequest) [\"anonymous()\"]\n    │   │   • (onSend) [\"headRouteOnSendHandler()\"]\n    │   │   • (errorHandler) \"defaultErrorHandler()\"\n    │   └── icopter (GET)\n    │       • (onTimeout) [\"onTimeout()\"]\n    │       • (onRequest) [\"anonymous()\"]\n    │       • (errorHandler) \"defaultErrorHandler()\"\n    │       icopter (HEAD)\n    │       • (onTimeout) [\"onTimeout()\"]\n    │       • (onRequest) [\"anonymous()\"]\n    │       • (onSend) [\"headRouteOnSendHandler()\"]\n    │       • (errorHandler) \"defaultErrorHandler()\"\n    └── hello (PUT)\n        • (onTimeout) [\"onTimeout()\"]\n        • (onRequest) [\"anonymous()\"]\n        • (errorHandler) \"defaultErrorHandler()\"\n`\n    const flatExpected = `└── / (-)\n    ├── helicopter (GET, HEAD)\n    │   • (onTimeout) [\"onTimeout()\"]\n    │   • (onRequest) [\"anonymous()\"]\n    │   • (errorHandler) \"defaultErrorHandler()\"\n    └── hello (GET, HEAD, PUT)\n        • (onTimeout) [\"onTimeout()\"]\n        • (onRequest) [\"anonymous()\"]\n        • (errorHandler) \"defaultErrorHandler()\"\n`\n\n    const hooksOnlyExpected = `└── / (-)\n    ├── helicopter (GET, HEAD)\n    │   • (onTimeout) [\"onTimeout()\"]\n    │   • (onRequest) [\"anonymous()\"]\n    └── hello (GET, HEAD, PUT)\n        • (onTimeout) [\"onTimeout()\"]\n        • (onRequest) [\"anonymous()\"]\n`\n    t.equal(typeof radixTree, 'string')\n    t.equal(typeof flatTree, 'string')\n    t.equal(typeof hooksOnlyExpected, 'string')\n    t.equal(radixTree, radixExpected)\n    t.equal(flatTree, flatExpected)\n    t.equal(hooksOnly, hooksOnlyExpected)\n  })\n})\n/examples/shared-schema.js\u0002F'use strict'\n\nconst fastify = require('../fastify')({ logger: true })\n\nfastify.addSchema({\n  $id: 'https://foo/common.json',\n  definitions: {\n    response: {\n      $id: '#reply',\n      type: 'object',\n      properties: {\n        hello: {\n          $id: '#bar',\n          type: 'string'\n        }\n      }\n    }\n  }\n})\n\nconst opts = {\n  schema: {\n    response: {\n      200: { $ref: 'https://foo/common.json#reply' }\n    }\n  }\n}\n\nfastify\n  .get('/', opts, function (req, reply) {\n    reply.send({ hello: 'world' })\n  })\n\nfastify.listen({ port: 3000 }, err => {\n  if (err) throw err\n})\n/test/build/version.test.js\u0001w'use strict'\n\nconst fs = require('fs')\nconst path = require('path')\nconst t = require('tap')\nconst test = t.test\nconst fastify = require('../../fastify')()\n\ntest('should be the same as package.json', t => {\n  t.plan(1)\n\n  const json = JSON.parse(fs.readFileSync(path.join(__dirname, '..', '..', 'package.json')).toString('utf8'))\n\n  t.equal(fastify.version, json.version)\n})\n/test/allowUnsafeRegex.test.js\t'use strict'\n\nconst t = require('tap')\nconst test = t.test\nconst Fastify = require('..')\nconst sget = require('simple-get').concat\n\ntest('allow unsafe regex', t => {\n  t.plan(4)\n\n  const fastify = Fastify({\n    allowUnsafeRegex: false\n  })\n  t.teardown(fastify.close.bind(fastify))\n\n  fastify.get('/:foo(^[0-9]*$)', (req, reply) => {\n    reply.send({ foo: req.params.foo })\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port + '/1234'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.same(JSON.parse(body), {\n        foo: '1234'\n      })\n    })\n  })\n})\n\ntest('allow unsafe regex not match', t => {\n  t.plan(3)\n\n  const fastify = Fastify({\n    allowUnsafeRegex: false\n  })\n  t.teardown(fastify.close.bind(fastify))\n\n  fastify.get('/:foo(^[0-9]*$)', (req, reply) => {\n    reply.send({ foo: req.params.foo })\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port + '/a1234'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 404)\n    })\n  })\n})\n\ntest('allow unsafe regex not safe', t => {\n  t.plan(1)\n\n  const fastify = Fastify({\n    allowUnsafeRegex: false\n  })\n  t.teardown(fastify.close.bind(fastify))\n\n  t.throws(() => {\n    fastify.get('/:foo(^([0-9]+){4}$)', (req, reply) => {\n      reply.send({ foo: req.params.foo })\n    })\n  })\n})\n\ntest('allow unsafe regex not safe by default', t => {\n  t.plan(1)\n\n  const fastify = Fastify()\n  t.teardown(fastify.close.bind(fastify))\n\n  t.throws(() => {\n    fastify.get('/:foo(^([0-9]+){4}$)', (req, reply) => {\n      reply.send({ foo: req.params.foo })\n    })\n  })\n})\n\ntest('allow unsafe regex allow unsafe', t => {\n  t.plan(5)\n\n  const fastify = Fastify({\n    allowUnsafeRegex: true\n  })\n  t.teardown(fastify.close.bind(fastify))\n\n  t.doesNotThrow(() => {\n    fastify.get('/:foo(^([0-9]+){4}$)', (req, reply) => {\n      reply.send({ foo: req.params.foo })\n    })\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port + '/1234'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.same(JSON.parse(body), {\n        foo: '1234'\n      })\n    })\n  })\n})\n/types/errors.d.ts\timport { FastifyErrorConstructor } from '@fastify/error'\n\nexport type FastifyErrorCodes = Record<\n'FST_ERR_NOT_FOUND' |\n'FST_ERR_CTP_ALREADY_PRESENT' |\n'FST_ERR_CTP_INVALID_TYPE' |\n'FST_ERR_CTP_EMPTY_TYPE' |\n'FST_ERR_CTP_INVALID_HANDLER' |\n'FST_ERR_CTP_INVALID_PARSE_TYPE' |\n'FST_ERR_CTP_BODY_TOO_LARGE' |\n'FST_ERR_CTP_INVALID_MEDIA_TYPE' |\n'FST_ERR_CTP_INVALID_CONTENT_LENGTH' |\n'FST_ERR_CTP_EMPTY_JSON_BODY' |\n'FST_ERR_DEC_ALREADY_PRESENT' |\n'FST_ERR_DEC_DEPENDENCY_INVALID_TYPE' |\n'FST_ERR_DEC_MISSING_DEPENDENCY' |\n'FST_ERR_DEC_AFTER_START' |\n'FST_ERR_HOOK_INVALID_TYPE' |\n'FST_ERR_HOOK_INVALID_HANDLER' |\n'FST_ERR_MISSING_MIDDLEWARE' |\n'FST_ERR_HOOK_TIMEOUT' |\n'FST_ERR_LOG_INVALID_DESTINATION' |\n'FST_ERR_REP_INVALID_PAYLOAD_TYPE' |\n'FST_ERR_REP_ALREADY_SENT' |\n'FST_ERR_REP_SENT_VALUE'|\n'FST_ERR_SEND_INSIDE_ONERR'|\n'FST_ERR_SEND_UNDEFINED_ERR'|\n'FST_ERR_BAD_STATUS_CODE'|\n'FST_ERR_BAD_TRAILER_NAME' |\n'FST_ERR_BAD_TRAILER_VALUE' |\n'FST_ERR_FAILED_ERROR_SERIALIZATION' |\n'FST_ERR_MISSING_SERIALIZATION_FN' |\n'FST_ERR_REQ_INVALID_VALIDATION_INVOCATION' |\n'FST_ERR_SCH_MISSING_ID' |\n'FST_ERR_SCH_ALREADY_PRESENT' |\n'FST_ERR_SCH_DUPLICATE' |\n'FST_ERR_SCH_VALIDATION_BUILD' |\n'FST_ERR_SCH_SERIALIZATION_BUILD' |\n'FST_ERR_HTTP2_INVALID_VERSION' |\n'FST_ERR_INIT_OPTS_INVALID' |\n'FST_ERR_FORCE_CLOSE_CONNECTIONS_IDLE_NOT_AVAILABLE' |\n'FST_ERR_DUPLICATED_ROUTE' |\n'FST_ERR_BAD_URL' |\n'FST_ERR_DEFAULT_ROUTE_INVALID_TYPE' |\n'FST_ERR_INVALID_URL' |\n'FST_ERR_REOPENED_CLOSE_SERVER' |\n'FST_ERR_REOPENED_SERVER' |\n'FST_ERR_PLUGIN_VERSION_MISMATCH' |\n'FST_ERR_PLUGIN_CALLBACK_NOT_FN' |\n'FST_ERR_PLUGIN_NOT_VALID' |\n'FST_ERR_ROOT_PLG_BOOTED' |\n'FST_ERR_PARENT_PLUGIN_BOOTED' |\n'FST_ERR_PLUGIN_TIMEOUT' |\n'FST_ERR_OPTIONS_NOT_OBJ' |\n'FST_ERR_QSP_NOT_FN' |\n'FST_ERR_SCHEMA_CONTROLLER_BUCKET_OPT_NOT_FN' |\n'FST_ERR_SCHEMA_ERROR_FORMATTER_NOT_FN' |\n'FST_ERR_AJV_CUSTOM_OPTIONS_OPT_NOT_OBJ' |\n'FST_ERR_AJV_CUSTOM_OPTIONS_OPT_NOT_ARR' |\n'FST_ERR_VERSION_CONSTRAINT_NOT_STR' |\n'FST_ERR_CTP_INSTANCE_ALREADY_STARTED' |\n'FST_ERR_HOOK_NOT_SUPPORTED' |\n'FST_ERR_SCH_RESPONSE_SCHEMA_NOT_NESTED_2XX' |\n'FST_ERR_ROUTE_OPTIONS_NOT_OBJ' |\n'FST_ERR_ROUTE_DUPLICATED_HANDLER' |\n'FST_ERR_ROUTE_HANDLER_NOT_FN' |\n'FST_ERR_ROUTE_MISSING_HANDLER' |\n'FST_ERR_ROUTE_METHOD_NOT_SUPPORTED' |\n'FST_ERR_ROUTE_BODY_VALIDATION_SCHEMA_NOT_SUPPORTED' |\n'FST_ERR_ROUTE_BODY_LIMIT_OPTION_NOT_INT' |\n'FST_ERR_ROUTE_REWRITE_NOT_STR' |\n'FST_ERR_PLUGIN_NOT_PRESENT_IN_INSTANCE' |\n'FST_ERR_INSTANCE_ALREADY_LISTENING'\n, FastifyErrorConstructor>\n/test/mkcol.test.js\u0002'use strict'\n\nconst t = require('tap')\nconst test = t.test\nconst sget = require('simple-get').concat\nconst fastify = require('..')()\n\ntest('can be created - mkcol', t => {\n  t.plan(1)\n  try {\n    fastify.route({\n      method: 'MKCOL',\n      url: '*',\n      handler: function (req, reply) {\n        reply.code(201).send()\n      }\n    })\n    t.pass()\n  } catch (e) {\n    t.fail()\n  }\n})\n\nfastify.listen({ port: 0 }, err => {\n  t.error(err)\n  t.teardown(() => { fastify.close() })\n\n  test('request - mkcol', t => {\n    t.plan(2)\n    sget({\n      url: `http://localhost:${fastify.server.address().port}/test/`,\n      method: 'MKCOL'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 201)\n    })\n  })\n})\n/test/build-certificate.js\u0002i'use strict'\n\nconst selfCert = require('self-cert')\n\nasync function buildCertificate () {\n  // \"global\" is used in here because \"t.context\" is only supported by \"t.beforeEach\" and \"t.afterEach\"\n  // For the test case which execute this code which will be using `t.before` and it can reduce the\n  // number of times executing it.\n  if (!global.context || !global.context.cert || !global.context.key) {\n    const certs = selfCert({\n      expires: new Date(Date.now() + 86400000)\n    })\n    global.context = {\n      cert: certs.certificate,\n      key: certs.privateKey\n    }\n  }\n}\n\nmodule.exports = { buildCertificate }\n/lib/httpMethods.js\u0001\u000f'use strict'\n\nmodule.exports = {\n  supportedMethods: [\n    'DELETE',\n    'GET',\n    'HEAD',\n    'PATCH',\n    'POST',\n    'PUT',\n    'OPTIONS',\n    'PROPFIND',\n    'PROPPATCH',\n    'MKCOL',\n    'COPY',\n    'MOVE',\n    'LOCK',\n    'UNLOCK',\n    'TRACE',\n    'SEARCH'\n  ]\n}\n#/test/options.error-handler.test.jsė'use strict'\n\nconst t = require('tap')\nrequire('./helper').payloadMethod('options', t, true)\nrequire('./input-validation').payloadMethod('options', t)\n/lib/headRoute.js\u00035'use strict'\nfunction headRouteOnSendHandler (req, reply, payload, done) {\n  // If payload is undefined\n  if (payload === undefined) {\n    reply.header('content-length', '0')\n    return done(null, null)\n  }\n\n  if (typeof payload.resume === 'function') {\n    payload.on('error', (err) => {\n      reply.log.error({ err }, 'Error on Stream found for HEAD route')\n    })\n    payload.resume()\n    return done(null, null)\n  }\n\n  const size = '' + Buffer.byteLength(payload)\n\n  reply.header('content-length', size)\n\n  done(null, null)\n}\n\nfunction parseHeadOnSendHandlers (onSendHandlers) {\n  if (onSendHandlers == null) return headRouteOnSendHandler\n  return Array.isArray(onSendHandlers) ? [...onSendHandlers, headRouteOnSendHandler] : [onSendHandlers, headRouteOnSendHandler]\n}\n\nmodule.exports = {\n  parseHeadOnSendHandlers\n}\n0/test/bundler/esbuild/src/fail-plugin-version.js\u0001\rconst fp = require('fastify-plugin')\nconst fastify = require('../../../../')()\n\nfastify.get('/', function (request, reply) {\n  reply.send({ hello: 'world' })\n})\n\nfastify.register(fp((instance, opts, done) => {\n  done()\n}, { fastify: '9.x' }))\n\nmodule.exports = fastify\n/test/close.test.js0['use strict'\n\nconst net = require('net')\nconst http = require('http')\nconst t = require('tap')\nconst test = t.test\nconst Fastify = require('..')\nconst { Client } = require('undici')\nconst semver = require('semver')\nconst split = require('split2')\n\ntest('close callback', t => {\n  t.plan(4)\n  const fastify = Fastify()\n  fastify.addHook('onClose', onClose)\n  function onClose (instance, done) {\n    t.type(fastify, instance)\n    done()\n  }\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n\n    fastify.close((err) => {\n      t.error(err)\n      t.ok('close callback')\n    })\n  })\n})\n\ntest('inside register', t => {\n  t.plan(5)\n  const fastify = Fastify()\n  fastify.register(function (f, opts, done) {\n    f.addHook('onClose', onClose)\n    function onClose (instance, done) {\n      t.ok(instance.prototype === fastify.prototype)\n      t.equal(instance, f)\n      done()\n    }\n\n    done()\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n\n    fastify.close((err) => {\n      t.error(err)\n      t.ok('close callback')\n    })\n  })\n})\n\ntest('close order', t => {\n  t.plan(5)\n  const fastify = Fastify()\n  const order = [1, 2, 3]\n\n  fastify.register(function (f, opts, done) {\n    f.addHook('onClose', (instance, done) => {\n      t.equal(order.shift(), 1)\n      done()\n    })\n\n    done()\n  })\n\n  fastify.addHook('onClose', (instance, done) => {\n    t.equal(order.shift(), 2)\n    done()\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n\n    fastify.close((err) => {\n      t.error(err)\n      t.equal(order.shift(), 3)\n    })\n  })\n})\n\ntest('close order - async', async t => {\n  t.plan(3)\n  const fastify = Fastify()\n  const order = [1, 2, 3]\n\n  fastify.register(function (f, opts, done) {\n    f.addHook('onClose', async instance => {\n      t.equal(order.shift(), 1)\n    })\n\n    done()\n  })\n\n  fastify.addHook('onClose', () => {\n    t.equal(order.shift(), 2)\n  })\n\n  await fastify.listen({ port: 0 })\n  await fastify.close()\n\n  t.equal(order.shift(), 3)\n})\n\ntest('should not throw an error if the server is not listening', t => {\n  t.plan(2)\n  const fastify = Fastify()\n  fastify.addHook('onClose', onClose)\n  function onClose (instance, done) {\n    t.type(fastify, instance)\n    done()\n  }\n\n  fastify.close((err) => {\n    t.error(err)\n  })\n})\n\ntest('onClose should keep the context', t => {\n  t.plan(4)\n  const fastify = Fastify()\n  fastify.register(plugin)\n\n  function plugin (instance, opts, done) {\n    instance.decorate('test', true)\n    instance.addHook('onClose', onClose)\n    t.ok(instance.prototype === fastify.prototype)\n\n    function onClose (i, done) {\n      t.ok(i.test)\n      t.equal(i, instance)\n      done()\n    }\n\n    done()\n  }\n\n  fastify.close((err) => {\n    t.error(err)\n  })\n})\n\ntest('Should return error while closing (promise) - injection', t => {\n  t.plan(4)\n  const fastify = Fastify()\n\n  fastify.addHook('onClose', (instance, done) => { done() })\n\n  fastify.get('/', (req, reply) => {\n    reply.send({ hello: 'world' })\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 200)\n    fastify.close()\n\n    process.nextTick(() => {\n      fastify.inject({\n        method: 'GET',\n        url: '/'\n      }).catch(err => {\n        t.ok(err)\n        t.equal(err.code, 'FST_ERR_REOPENED_CLOSE_SERVER')\n      })\n    }, 100)\n  })\n})\n\ntest('Should return error while closing (callback) - injection', t => {\n  t.plan(4)\n  const fastify = Fastify()\n\n  fastify.addHook('onClose', (instance, done) => {\n    setTimeout(done, 150)\n  })\n\n  fastify.get('/', (req, reply) => {\n    reply.send({ hello: 'world' })\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 200)\n    fastify.close()\n\n    setTimeout(() => {\n      fastify.inject({\n        method: 'GET',\n        url: '/'\n      }, (err, res) => {\n        t.ok(err)\n        t.equal(err.code, 'FST_ERR_REOPENED_CLOSE_SERVER')\n      })\n    }, 100)\n  })\n})\n\nconst isV19plus = semver.gte(process.version, '19.0.0')\nt.test('Current opened connection should continue to work after closing and return \"connection: close\" header - return503OnClosing: false, skip Node >= v19.x', { skip: isV19plus }, t => {\n  const fastify = Fastify({\n    return503OnClosing: false,\n    forceCloseConnections: false\n  })\n\n  fastify.get('/', (req, reply) => {\n    fastify.close()\n    reply.send({ hello: 'world' })\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n\n    const port = fastify.server.address().port\n    const client = net.createConnection({ port }, () => {\n      client.write('GET / HTTP/1.1\\r\\nHost: example.com\\r\\n\\r\\n')\n\n      client.once('data', data => {\n        t.match(data.toString(), /Connection:\\s*keep-alive/i)\n        t.match(data.toString(), /200 OK/i)\n\n        client.write('GET / HTTP/1.1\\r\\nHost: example.com\\r\\n\\r\\n')\n\n        client.once('data', data => {\n          t.match(data.toString(), /Connection:\\s*close/i)\n          t.match(data.toString(), /200 OK/i)\n\n          // Test that fastify closes the TCP connection\n          client.once('close', () => {\n            t.end()\n          })\n        })\n      })\n    })\n  })\n})\n\nt.test('Current opened connection should NOT continue to work after closing and return \"connection: close\" header - return503OnClosing: false, skip Node < v19.x', { skip: !isV19plus }, t => {\n  t.plan(4)\n  const fastify = Fastify({\n    return503OnClosing: false,\n    forceCloseConnections: false\n  })\n\n  fastify.get('/', (req, reply) => {\n    fastify.close()\n    reply.send({ hello: 'world' })\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n\n    const port = fastify.server.address().port\n    const client = net.createConnection({ port }, () => {\n      client.write('GET / HTTP/1.1\\r\\nHost: example.com\\r\\n\\r\\n')\n\n      client.on('error', function () {\n        // Dependending on the Operating System\n        // the socket could error or not.\n        // However, it will always be closed.\n      })\n\n      client.on('close', function () {\n        t.pass('close')\n      })\n\n      client.once('data', data => {\n        t.match(data.toString(), /Connection:\\s*keep-alive/i)\n        t.match(data.toString(), /200 OK/i)\n\n        client.write('GET / HTTP/1.1\\r\\nHost: example.com\\r\\n\\r\\n')\n      })\n    })\n  })\n})\n\nt.test('Current opened connection should not accept new incoming connections', t => {\n  t.plan(3)\n  const fastify = Fastify({ forceCloseConnections: false })\n  fastify.get('/', (req, reply) => {\n    fastify.close()\n    setTimeout(() => {\n      reply.send({ hello: 'world' })\n    }, 250)\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    const instance = new Client('http://localhost:' + fastify.server.address().port)\n    instance.request({ path: '/', method: 'GET' }).then(data => {\n      t.equal(data.statusCode, 200)\n    })\n    instance.request({ path: '/', method: 'GET' }).then(data => {\n      t.equal(data.statusCode, 503)\n    })\n  })\n})\n\nt.test('rejected incoming connections should be logged', t => {\n  t.plan(2)\n  const stream = split(JSON.parse)\n  const fastify = Fastify({\n    forceCloseConnections: false,\n    logger: {\n      stream,\n      level: 'info'\n    }\n  })\n\n  const messages = []\n  stream.on('data', message => {\n    messages.push(message)\n  })\n  fastify.get('/', (req, reply) => {\n    fastify.close()\n    setTimeout(() => {\n      reply.send({ hello: 'world' })\n    }, 250)\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    const instance = new Client('http://localhost:' + fastify.server.address().port)\n    // initial request to trigger close\n    instance.request({ path: '/', method: 'GET' })\n    // subsequent request should be rejected\n    instance.request({ path: '/', method: 'GET' }).then(() => {\n      t.ok(messages.find(message => message.msg.includes('request aborted')))\n    })\n  })\n})\n\ntest('Cannot be reopened the closed server without listen callback', async t => {\n  t.plan(2)\n  const fastify = Fastify()\n\n  await fastify.listen({ port: 0 })\n  await fastify.close()\n\n  try {\n    await fastify.listen({ port: 0 })\n  } catch (err) {\n    t.ok(err)\n    t.equal(err.code, 'FST_ERR_REOPENED_CLOSE_SERVER')\n  }\n})\n\ntest('Cannot be reopened the closed server has listen callback', async t => {\n  t.plan(2)\n  const fastify = Fastify()\n\n  await fastify.listen({ port: 0 })\n  await fastify.close()\n\n  await new Promise((resolve, reject) => {\n    fastify.listen({ port: 0 }, err => {\n      reject(err)\n    })\n  }).catch(err => {\n    t.equal(err.code, 'FST_ERR_REOPENED_CLOSE_SERVER')\n    t.ok(err)\n  })\n})\n\nconst server = http.createServer()\nconst noSupport = typeof server.closeAllConnections !== 'function'\n\ntest('shutsdown while keep-alive connections are active (non-async, native)', { skip: noSupport }, t => {\n  t.plan(5)\n\n  const timeoutTime = 2 * 60 * 1000\n  const fastify = Fastify({ forceCloseConnections: true })\n\n  fastify.server.setTimeout(timeoutTime)\n  fastify.server.keepAliveTimeout = timeoutTime\n\n  fastify.get('/', (req, reply) => {\n    reply.send({ hello: 'world' })\n  })\n\n  fastify.listen({ port: 0 }, (err, address) => {\n    t.error(err)\n\n    const client = new Client(\n      'http://localhost:' + fastify.server.address().port,\n      { keepAliveTimeout: 1 * 60 * 1000 }\n    )\n    client.request({ path: '/', method: 'GET' }, (err, response) => {\n      t.error(err)\n      t.equal(client.closed, false)\n\n      fastify.close((err) => {\n        t.error(err)\n\n        // Due to the nature of the way we reap these keep-alive connections,\n        // there hasn't been enough time before the server fully closed in order\n        // for the client to have seen the socket get destroyed. The mere fact\n        // that we have reached this callback is enough indication that the\n        // feature being tested works as designed.\n        t.equal(client.closed, false)\n      })\n    })\n  })\n})\n\ntest('shutsdown while keep-alive connections are active (non-async, idle, native)', { skip: noSupport }, t => {\n  t.plan(5)\n\n  const timeoutTime = 2 * 60 * 1000\n  const fastify = Fastify({ forceCloseConnections: 'idle' })\n\n  fastify.server.setTimeout(timeoutTime)\n  fastify.server.keepAliveTimeout = timeoutTime\n\n  fastify.get('/', (req, reply) => {\n    reply.send({ hello: 'world' })\n  })\n\n  fastify.listen({ port: 0 }, (err, address) => {\n    t.error(err)\n\n    const client = new Client(\n      'http://localhost:' + fastify.server.address().port,\n      { keepAliveTimeout: 1 * 60 * 1000 }\n    )\n    client.request({ path: '/', method: 'GET' }, (err, response) => {\n      t.error(err)\n      t.equal(client.closed, false)\n\n      fastify.close((err) => {\n        t.error(err)\n\n        // Due to the nature of the way we reap these keep-alive connections,\n        // there hasn't been enough time before the server fully closed in order\n        // for the client to have seen the socket get destroyed. The mere fact\n        // that we have reached this callback is enough indication that the\n        // feature being tested works as designed.\n        t.equal(client.closed, false)\n      })\n    })\n  })\n})\n\ntest('shutsdown while keep-alive connections are active (non-async, custom)', t => {\n  t.plan(5)\n\n  const timeoutTime = 2 * 60 * 1000\n  const fastify = Fastify({\n    forceCloseConnections: true,\n    serverFactory (handler) {\n      const server = http.createServer(handler)\n\n      server.closeAllConnections = null\n\n      return server\n    }\n  })\n\n  fastify.server.setTimeout(timeoutTime)\n  fastify.server.keepAliveTimeout = timeoutTime\n\n  fastify.get('/', (req, reply) => {\n    reply.send({ hello: 'world' })\n  })\n\n  fastify.listen({ port: 0 }, (err, address) => {\n    t.error(err)\n\n    const client = new Client(\n      'http://localhost:' + fastify.server.address().port,\n      { keepAliveTimeout: 1 * 60 * 1000 }\n    )\n    client.request({ path: '/', method: 'GET' }, (err, response) => {\n      t.error(err)\n      t.equal(client.closed, false)\n\n      fastify.close((err) => {\n        t.error(err)\n\n        // Due to the nature of the way we reap these keep-alive connections,\n        // there hasn't been enough time before the server fully closed in order\n        // for the client to have seen the socket get destroyed. The mere fact\n        // that we have reached this callback is enough indication that the\n        // feature being tested works as designed.\n        t.equal(client.closed, false)\n      })\n    })\n  })\n})\n\"/test/internals/validation.test.js\u001e5'use strict'\n\nconst t = require('tap')\nconst test = t.test\n\nconst Ajv = require('ajv')\nconst ajv = new Ajv({ coerceTypes: true })\n\nconst validation = require('../../lib/validation')\nconst { normalizeSchema } = require('../../lib/schemas')\nconst symbols = require('../../lib/validation').symbols\nconst { kSchemaVisited } = require('../../lib/symbols')\n\ntest('Symbols', t => {\n  t.plan(5)\n  t.equal(typeof symbols.responseSchema, 'symbol')\n  t.equal(typeof symbols.bodySchema, 'symbol')\n  t.equal(typeof symbols.querystringSchema, 'symbol')\n  t.equal(typeof symbols.paramsSchema, 'symbol')\n  t.equal(typeof symbols.headersSchema, 'symbol')\n})\n\n;['compileSchemasForValidation',\n  'compileSchemasForSerialization'].forEach(func => {\n  test(`${func} schema - missing schema`, t => {\n    t.plan(2)\n    const context = {}\n    validation[func](context)\n    t.equal(typeof context[symbols.bodySchema], 'undefined')\n    t.equal(typeof context[symbols.responseSchema], 'undefined')\n  })\n\n  test(`${func} schema - missing output schema`, t => {\n    t.plan(1)\n    const context = { schema: {} }\n    validation[func](context, null)\n    t.equal(typeof context[symbols.responseSchema], 'undefined')\n  })\n})\n\ntest('build schema - output schema', t => {\n  t.plan(2)\n  const opts = {\n    schema: {\n      response: {\n        '2xx': {\n          type: 'object',\n          properties: {\n            hello: { type: 'string' }\n          }\n        },\n        201: {\n          type: 'object',\n          properties: {\n            hello: { type: 'number' }\n          }\n        }\n      }\n    }\n  }\n  validation.compileSchemasForSerialization(opts, ({ schema, method, url, httpPart }) => ajv.compile(schema))\n  t.equal(typeof opts[symbols.responseSchema]['2xx'], 'function')\n  t.equal(typeof opts[symbols.responseSchema]['201'], 'function')\n})\n\ntest('build schema - payload schema', t => {\n  t.plan(1)\n  const opts = {\n    schema: {\n      body: {\n        type: 'object',\n        properties: {\n          hello: { type: 'string' }\n        }\n      }\n    }\n  }\n  validation.compileSchemasForValidation(opts, ({ schema, method, url, httpPart }) => ajv.compile(schema))\n  t.equal(typeof opts[symbols.bodySchema], 'function')\n})\n\ntest('build schema - avoid repeated normalize schema', t => {\n  t.plan(3)\n  const serverConfig = {\n    jsonShorthand: true\n  }\n  const opts = {\n    schema: {\n      query: {\n        type: 'object',\n        properties: {\n          hello: { type: 'string' }\n        }\n      }\n    }\n  }\n  opts.schema = normalizeSchema(opts.schema, serverConfig)\n  t.not(kSchemaVisited, undefined)\n  t.equal(opts.schema[kSchemaVisited], true)\n  t.equal(opts.schema, normalizeSchema(opts.schema, serverConfig))\n})\n\ntest('build schema - query schema', t => {\n  t.plan(2)\n  const serverConfig = {\n    jsonShorthand: true\n  }\n  const opts = {\n    schema: {\n      query: {\n        type: 'object',\n        properties: {\n          hello: { type: 'string' }\n        }\n      }\n    }\n  }\n  opts.schema = normalizeSchema(opts.schema, serverConfig)\n  validation.compileSchemasForValidation(opts, ({ schema, method, url, httpPart }) => ajv.compile(schema))\n  t.type(opts[symbols.querystringSchema].schema.type, 'string')\n  t.equal(typeof opts[symbols.querystringSchema], 'function')\n})\n\ntest('build schema - query schema abbreviated', t => {\n  t.plan(2)\n  const serverConfig = {\n    jsonShorthand: true\n  }\n  const opts = {\n    schema: {\n      query: {\n        hello: { type: 'string' }\n      }\n    }\n  }\n  opts.schema = normalizeSchema(opts.schema, serverConfig)\n  validation.compileSchemasForValidation(opts, ({ schema, method, url, httpPart }) => ajv.compile(schema))\n  t.type(opts[symbols.querystringSchema].schema.type, 'string')\n  t.equal(typeof opts[symbols.querystringSchema], 'function')\n})\n\ntest('build schema - querystring schema', t => {\n  t.plan(2)\n  const opts = {\n    schema: {\n      querystring: {\n        type: 'object',\n        properties: {\n          hello: { type: 'string' }\n        }\n      }\n    }\n  }\n  validation.compileSchemasForValidation(opts, ({ schema, method, url, httpPart }) => ajv.compile(schema))\n  t.type(opts[symbols.querystringSchema].schema.type, 'string')\n  t.equal(typeof opts[symbols.querystringSchema], 'function')\n})\n\ntest('build schema - querystring schema abbreviated', t => {\n  t.plan(2)\n  const serverConfig = {\n    jsonShorthand: true\n  }\n  const opts = {\n    schema: {\n      querystring: {\n        hello: { type: 'string' }\n      }\n    }\n  }\n  opts.schema = normalizeSchema(opts.schema, serverConfig)\n  validation.compileSchemasForValidation(opts, ({ schema, method, url, httpPart }) => ajv.compile(schema))\n  t.type(opts[symbols.querystringSchema].schema.type, 'string')\n  t.equal(typeof opts[symbols.querystringSchema], 'function')\n})\n\ntest('build schema - must throw if querystring and query schema exist', t => {\n  t.plan(2)\n  try {\n    const serverConfig = {\n      jsonShorthand: true\n    }\n    const opts = {\n      schema: {\n        query: {\n          type: 'object',\n          properties: {\n            hello: { type: 'string' }\n          }\n        },\n        querystring: {\n          type: 'object',\n          properties: {\n            hello: { type: 'string' }\n          }\n        }\n      }\n    }\n    opts.schema = normalizeSchema(opts.schema, serverConfig)\n  } catch (err) {\n    t.equal(err.code, 'FST_ERR_SCH_DUPLICATE')\n    t.equal(err.message, 'Schema with \\'querystring\\' already present!')\n  }\n})\n\ntest('build schema - params schema', t => {\n  t.plan(1)\n  const opts = {\n    schema: {\n      params: {\n        type: 'object',\n        properties: {\n          hello: { type: 'string' }\n        }\n      }\n    }\n  }\n  validation.compileSchemasForValidation(opts, ({ schema, method, url, httpPart }) => ajv.compile(schema))\n  t.equal(typeof opts[symbols.paramsSchema], 'function')\n})\n\ntest('build schema - headers schema', t => {\n  t.plan(1)\n  const opts = {\n    schema: {\n      headers: {\n        type: 'object',\n        properties: {\n          'content-type': { type: 'string' }\n        }\n      }\n    }\n  }\n  validation.compileSchemasForValidation(opts, ({ schema, method, url, httpPart }) => ajv.compile(schema))\n  t.equal(typeof opts[symbols.headersSchema], 'function')\n})\n\ntest('build schema - headers are lowercase', t => {\n  t.plan(1)\n  const opts = {\n    schema: {\n      headers: {\n        type: 'object',\n        properties: {\n          'Content-Type': { type: 'string' }\n        }\n      }\n    }\n  }\n  validation.compileSchemasForValidation(opts, ({ schema, method, url, httpPart }) => {\n    t.ok(schema.properties['content-type'], 'lowercase content-type exists')\n    return () => {}\n  })\n})\n\ntest('build schema - headers are not lowercased in case of custom object', t => {\n  t.plan(1)\n\n  class Headers {}\n  const opts = {\n    schema: {\n      headers: new Headers()\n    }\n  }\n  validation.compileSchemasForValidation(opts, ({ schema, method, url, httpPart }) => {\n    t.type(schema, Headers)\n    return () => {}\n  })\n})\n\ntest('build schema - headers are not lowercased in case of custom validator provided', t => {\n  t.plan(1)\n\n  class Headers {}\n  const opts = {\n    schema: {\n      headers: new Headers()\n    }\n  }\n  validation.compileSchemasForValidation(opts, ({ schema, method, url, httpPart }) => {\n    t.type(schema, Headers)\n    return () => {}\n  }, true)\n})\n\ntest('build schema - uppercased headers are not included', t => {\n  t.plan(1)\n  const opts = {\n    schema: {\n      headers: {\n        type: 'object',\n        properties: {\n          'Content-Type': { type: 'string' }\n        }\n      }\n    }\n  }\n  validation.compileSchemasForValidation(opts, ({ schema, method, url, httpPart }) => {\n    t.notOk('Content-Type' in schema.properties, 'uppercase does not exist')\n    return () => {}\n  })\n})\n/test/request-error.test.js)E'use strict'\n\nconst { connect } = require('net')\nconst sget = require('simple-get').concat\nconst t = require('tap')\nconst test = t.test\nconst Fastify = require('..')\nconst { kRequest } = require('../lib/symbols.js')\n\ntest('default 400 on request error', t => {\n  t.plan(4)\n\n  const fastify = Fastify()\n\n  fastify.post('/', function (req, reply) {\n    reply.send({ hello: 'world' })\n  })\n\n  fastify.inject({\n    method: 'POST',\n    url: '/',\n    simulate: {\n      error: true\n    },\n    body: {\n      text: '12345678901234567890123456789012345678901234567890'\n    }\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 400)\n    t.equal(res.headers['content-type'], 'application/json; charset=utf-8')\n    t.same(JSON.parse(res.payload), {\n      error: 'Bad Request',\n      message: 'Simulated',\n      statusCode: 400\n    })\n  })\n})\n\ntest('default 400 on request error with custom error handler', t => {\n  t.plan(6)\n\n  const fastify = Fastify()\n\n  fastify.setErrorHandler(function (err, request, reply) {\n    t.type(request, 'object')\n    t.type(request, fastify[kRequest].parent)\n    reply\n      .code(err.statusCode)\n      .type('application/json; charset=utf-8')\n      .send(err)\n  })\n\n  fastify.post('/', function (req, reply) {\n    reply.send({ hello: 'world' })\n  })\n\n  fastify.inject({\n    method: 'POST',\n    url: '/',\n    simulate: {\n      error: true\n    },\n    body: {\n      text: '12345678901234567890123456789012345678901234567890'\n    }\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 400)\n    t.equal(res.headers['content-type'], 'application/json; charset=utf-8')\n    t.same(JSON.parse(res.payload), {\n      error: 'Bad Request',\n      message: 'Simulated',\n      statusCode: 400\n    })\n  })\n})\n\ntest('default clientError handler ignores ECONNRESET', t => {\n  t.plan(3)\n\n  let logs = ''\n  let response = ''\n\n  const fastify = Fastify({\n    bodyLimit: 1,\n    keepAliveTimeout: 100,\n    logger: {\n      level: 'trace',\n      stream: {\n        write () {\n          logs += JSON.stringify(arguments)\n        }\n      }\n    }\n  })\n\n  fastify.get('/', (request, reply) => {\n    reply.send('OK')\n\n    process.nextTick(() => {\n      const error = new Error()\n      error.code = 'ECONNRESET'\n\n      fastify.server.emit('clientError', error, request.raw.socket)\n    })\n  })\n\n  fastify.listen({ port: 0 }, function (err) {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    const client = connect(fastify.server.address().port)\n\n    client.on('data', chunk => {\n      response += chunk.toString('utf-8')\n    })\n\n    client.on('end', () => {\n      t.match(response, /^HTTP\\/1.1 200 OK/)\n      t.notMatch(logs, /ECONNRESET/)\n    })\n\n    client.resume()\n    client.write('GET / HTTP/1.1\\r\\n')\n    client.write('Connection: close\\r\\n')\n    client.write('\\r\\n\\r\\n')\n  })\n})\n\ntest('default clientError handler ignores sockets in destroyed state', t => {\n  t.plan(1)\n\n  const fastify = Fastify({\n    bodyLimit: 1,\n    keepAliveTimeout: 100\n  })\n  fastify.server.on('clientError', () => {\n    // this handler is called after default handler, so we can make sure end was not called\n    t.pass()\n  })\n  fastify.server.emit('clientError', new Error(), {\n    destroyed: true,\n    end () {\n      t.fail('end should not be called')\n    },\n    destroy () {\n      t.fail('destroy should not be called')\n    }\n  })\n})\n\ntest('default clientError handler destroys sockets in writable state', t => {\n  t.plan(2)\n\n  const fastify = Fastify({\n    bodyLimit: 1,\n    keepAliveTimeout: 100\n  })\n\n  fastify.server.emit('clientError', new Error(), {\n    destroyed: false,\n    writable: true,\n    encrypted: true,\n    end () {\n      t.fail('end should not be called')\n    },\n    destroy () {\n      t.pass('destroy should be called')\n    },\n    write (response) {\n      t.match(response, /^HTTP\\/1.1 400 Bad Request/)\n    }\n  })\n})\n\ntest('default clientError handler destroys http sockets in non-writable state', t => {\n  t.plan(1)\n\n  const fastify = Fastify({\n    bodyLimit: 1,\n    keepAliveTimeout: 100\n  })\n\n  fastify.server.emit('clientError', new Error(), {\n    destroyed: false,\n    writable: false,\n    end () {\n      t.fail('end should not be called')\n    },\n    destroy () {\n      t.pass('destroy should be called')\n    },\n    write (response) {\n      t.fail('write should not be called')\n    }\n  })\n})\n\ntest('error handler binding', t => {\n  t.plan(5)\n\n  const fastify = Fastify()\n\n  fastify.setErrorHandler(function (err, request, reply) {\n    t.equal(this, fastify)\n    reply\n      .code(err.statusCode)\n      .type('application/json; charset=utf-8')\n      .send(err)\n  })\n\n  fastify.post('/', function (req, reply) {\n    reply.send({ hello: 'world' })\n  })\n\n  fastify.inject({\n    method: 'POST',\n    url: '/',\n    simulate: {\n      error: true\n    },\n    body: {\n      text: '12345678901234567890123456789012345678901234567890'\n    }\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 400)\n    t.equal(res.headers['content-type'], 'application/json; charset=utf-8')\n    t.same(JSON.parse(res.payload), {\n      error: 'Bad Request',\n      message: 'Simulated',\n      statusCode: 400\n    })\n  })\n})\n\ntest('encapsulated error handler binding', t => {\n  t.plan(7)\n\n  const fastify = Fastify()\n\n  fastify.register(function (app, opts, done) {\n    app.decorate('hello', 'world')\n    t.equal(app.hello, 'world')\n    app.post('/', function (req, reply) {\n      reply.send({ hello: 'world' })\n    })\n    app.setErrorHandler(function (err, request, reply) {\n      t.equal(this.hello, 'world')\n      reply\n        .code(err.statusCode)\n        .type('application/json; charset=utf-8')\n        .send(err)\n    })\n    done()\n  })\n\n  fastify.inject({\n    method: 'POST',\n    url: '/',\n    simulate: {\n      error: true\n    },\n    body: {\n      text: '12345678901234567890123456789012345678901234567890'\n    }\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 400)\n    t.equal(res.headers['content-type'], 'application/json; charset=utf-8')\n    t.same(res.json(), {\n      error: 'Bad Request',\n      message: 'Simulated',\n      statusCode: 400\n    })\n    t.equal(fastify.hello, undefined)\n  })\n})\n\ntest('default clientError replies with bad request on reused keep-alive connection', t => {\n  t.plan(2)\n\n  let response = ''\n\n  const fastify = Fastify({\n    bodyLimit: 1,\n    keepAliveTimeout: 100\n  })\n\n  fastify.get('/', (request, reply) => {\n    reply.send('OK\\n')\n  })\n\n  fastify.listen({ port: 0 }, function (err) {\n    t.error(err)\n    fastify.server.unref()\n\n    const client = connect(fastify.server.address().port)\n\n    client.on('data', chunk => {\n      response += chunk.toString('utf-8')\n    })\n\n    client.on('end', () => {\n      t.match(response, /^HTTP\\/1.1 200 OK.*HTTP\\/1.1 400 Bad Request/s)\n    })\n\n    client.resume()\n    client.write('GET / HTTP/1.1\\r\\n')\n    client.write('\\r\\n\\r\\n')\n    client.write('GET /?a b HTTP/1.1\\r\\n')\n    client.write('Connection: close\\r\\n')\n    client.write('\\r\\n\\r\\n')\n  })\n})\n\ntest('request.routeOptions should be immutable', t => {\n  t.plan(14)\n  const fastify = Fastify()\n  const handler = function (req, res) {\n    t.equal('POST', req.routeOptions.method)\n    t.equal('/', req.routeOptions.url)\n    t.throws(() => { req.routeOptions = null }, new TypeError('Cannot set property routeOptions of #<Request> which has only a getter'))\n    t.throws(() => { req.routeOptions.method = 'INVALID' }, new TypeError('Cannot assign to read only property \\'method\\' of object \\'#<Object>\\''))\n    t.throws(() => { req.routeOptions.url = '//' }, new TypeError('Cannot assign to read only property \\'url\\' of object \\'#<Object>\\''))\n    t.throws(() => { req.routeOptions.bodyLimit = 0xDEADBEEF }, new TypeError('Cannot assign to read only property \\'bodyLimit\\' of object \\'#<Object>\\''))\n    t.throws(() => { req.routeOptions.attachValidation = true }, new TypeError('Cannot assign to read only property \\'attachValidation\\' of object \\'#<Object>\\''))\n    t.throws(() => { req.routeOptions.logLevel = 'invalid' }, new TypeError('Cannot assign to read only property \\'logLevel\\' of object \\'#<Object>\\''))\n    t.throws(() => { req.routeOptions.version = '95.0.1' }, new TypeError('Cannot assign to read only property \\'version\\' of object \\'#<Object>\\''))\n    t.throws(() => { req.routeOptions.prefixTrailingSlash = true }, new TypeError('Cannot assign to read only property \\'prefixTrailingSlash\\' of object \\'#<Object>\\''))\n    t.throws(() => { req.routeOptions.newAttribute = {} }, new TypeError('Cannot add property newAttribute, object is not extensible'))\n\n    for (const key of Object.keys(req.routeOptions)) {\n      if (typeof req.routeOptions[key] === 'object' && req.routeOptions[key] !== null) {\n        t.fail('Object.freeze must run recursively on nested structures to ensure that routeOptions is immutable.')\n      }\n    }\n\n    res.send({})\n  }\n  fastify.post('/', {\n    bodyLimit: 1000,\n    handler\n  })\n  fastify.listen({ port: 0 }, function (err) {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    sget({\n      method: 'POST',\n      url: 'http://localhost:' + fastify.server.address().port,\n      headers: { 'Content-Type': 'application/json' },\n      body: [],\n      json: true\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n    })\n  })\n})\n\ntest('test request.routeOptions.version', t => {\n  t.plan(7)\n  const fastify = Fastify()\n\n  fastify.route({\n    method: 'POST',\n    url: '/version',\n    constraints: { version: '1.2.0' },\n    handler: function (request, reply) {\n      t.equal('1.2.0', request.routeOptions.version)\n      reply.send({})\n    }\n  })\n\n  fastify.route({\n    method: 'POST',\n    url: '/version-undefined',\n    handler: function (request, reply) {\n      t.equal(undefined, request.routeOptions.version)\n      reply.send({})\n    }\n  })\n  fastify.listen({ port: 0 }, function (err) {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    sget({\n      method: 'POST',\n      url: 'http://localhost:' + fastify.server.address().port + '/version',\n      headers: { 'Content-Type': 'application/json', 'Accept-Version': '1.2.0' },\n      body: [],\n      json: true\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n    })\n\n    sget({\n      method: 'POST',\n      url: 'http://localhost:' + fastify.server.address().port + '/version-undefined',\n      headers: { 'Content-Type': 'application/json' },\n      body: [],\n      json: true\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n    })\n  })\n})\n/test/close-pipelining.test.js\n'use strict'\n\nconst t = require('tap')\nconst test = t.test\nconst Fastify = require('..')\nconst { Client } = require('undici')\nconst semver = require('semver')\n\ntest('Should return 503 while closing - pipelining', async t => {\n  const fastify = Fastify({\n    return503OnClosing: true,\n    forceCloseConnections: false\n  })\n\n  fastify.get('/', async (req, reply) => {\n    fastify.close()\n    return { hello: 'world' }\n  })\n\n  await fastify.listen({ port: 0 })\n\n  const instance = new Client('http://localhost:' + fastify.server.address().port, {\n    pipelining: 2\n  })\n\n  const codes = [200, 200, 503]\n  const responses = await Promise.all([\n    instance.request({ path: '/', method: 'GET' }),\n    instance.request({ path: '/', method: 'GET' }),\n    instance.request({ path: '/', method: 'GET' })\n  ])\n  const actual = responses.map(r => r.statusCode)\n\n  t.same(actual, codes)\n\n  await instance.close()\n})\n\nconst isV19plus = semver.gte(process.version, '19.0.0')\ntest('Should not return 503 while closing - pipelining - return503OnClosing: false, skip Node >= v19.x', { skip: isV19plus }, async t => {\n  const fastify = Fastify({\n    return503OnClosing: false,\n    forceCloseConnections: false\n  })\n\n  fastify.get('/', (req, reply) => {\n    fastify.close()\n    reply.send({ hello: 'world' })\n  })\n\n  await fastify.listen({ port: 0 })\n\n  const instance = new Client('http://localhost:' + fastify.server.address().port, {\n    pipelining: 2\n  })\n\n  const codes = [200, 200, 200]\n  const responses = await Promise.all([\n    instance.request({ path: '/', method: 'GET' }),\n    instance.request({ path: '/', method: 'GET' }),\n    instance.request({ path: '/', method: 'GET' })\n  ])\n  const actual = responses.map(r => r.statusCode)\n\n  t.same(actual, codes)\n\n  await instance.close()\n})\n\ntest('Should close the socket abruptly - pipelining - return503OnClosing: false, skip Node < v19.x', { skip: !isV19plus }, async t => {\n  // Since Node v19, we will always invoke server.closeIdleConnections()\n  // therefore our socket will be closed\n  const fastify = Fastify({\n    return503OnClosing: false,\n    forceCloseConnections: false\n  })\n\n  fastify.get('/', (req, reply) => {\n    fastify.close()\n    reply.send({ hello: 'world' })\n  })\n\n  await fastify.listen({ port: 0 })\n\n  const instance = new Client('http://localhost:' + fastify.server.address().port, {\n    pipelining: 2\n  })\n\n  const responses = await Promise.allSettled([\n    instance.request({ path: '/', method: 'GET' }),\n    instance.request({ path: '/', method: 'GET' }),\n    instance.request({ path: '/', method: 'GET' })\n  ])\n  t.equal(responses[0].status, 'fulfilled')\n  t.equal(responses[1].status, 'rejected')\n  t.equal(responses[2].status, 'rejected')\n\n  await instance.close()\n})\n/test/esm/index.test.js\u0002\u0015'use strict'\n\nconst t = require('tap')\nconst semver = require('semver')\n\nif (semver.lt(process.versions.node, '14.13.0')) {\n  t.skip('Skip named exports because Node version < 14.13.0')\n} else {\n  // Node v8 throw a `SyntaxError: Unexpected token import`\n  // even if this branch is never touch in the code,\n  // by using `eval` we can avoid this issue.\n  // eslint-disable-next-line\n  new Function('module', 'return import(module)')('./named-exports.mjs').catch((err) => {\n    process.nextTick(() => {\n      throw err\n    })\n  })\n}\n/integration/server.js\u0002vconst Fastify = require('../fastify')\n\nconst fastify = Fastify()\n\nfastify.listen({\n  host: '::',\n  port: 3000\n})\n\nfastify.get('/', async function (request, reply) {\n  reply.code(200).send({ data: 'home page' })\n})\n\nfastify.post('/post/:id', async function (request, reply) {\n  const { id } = request.params\n  reply.code(201).send({ data: `${id}` })\n})\n\nfastify.put('/put/:id', async function (request, reply) {\n  const { id } = request.params\n  reply.code(200).send({ data: `${id}` })\n})\n\nfastify.delete('/delete/:id', async function (request, reply) {\n  const { id } = request.params\n  reply.code(204).send({ data: `${id}` })\n})\n/test/middleware.test.js\u0003!'use strict'\n\nconst { test } = require('tap')\nconst Fastify = require('..')\nconst {\n  FST_ERR_DEC_ALREADY_PRESENT\n} = require('../lib/errors')\n\ntest('Should be able to override the default use API', t => {\n  t.plan(1)\n  const fastify = Fastify()\n  fastify.decorate('use', () => true)\n  t.equal(fastify.use(), true)\n})\n\ntest('Cannot decorate use twice', t => {\n  t.plan(1)\n  const fastify = Fastify()\n  fastify.decorate('use', () => true)\n  try {\n    fastify.decorate('use', () => true)\n  } catch (err) {\n    t.ok(err instanceof FST_ERR_DEC_ALREADY_PRESENT)\n  }\n})\n\ntest('Encapsulation works', t => {\n  t.plan(1)\n  const fastify = Fastify()\n\n  fastify.register((instance, opts, done) => {\n    instance.decorate('use', () => true)\n    t.equal(instance.use(), true)\n    done()\n  })\n\n  fastify.ready()\n})\n/docs/Reference/Logging.md\u00186<h1 align=\"center\">Fastify</h1>\n\n## Logging\n\n### Enable logging\nLogging is disabled by default, and you can enable it by passing `{ logger: true\n}` or `{ logger: { level: 'info' } }` when you create a Fastify instance. Note\nthat if the logger is disabled, it is impossible to enable it at runtime. We use\n[abstract-logging](https://www.npmjs.com/package/abstract-logging) for this\npurpose.\n\nAs Fastify is focused on performance, it uses\n[pino](https://github.com/pinojs/pino) as its logger, with the default log\nlevel, when enabled, set to `'info'`.\n\nEnabling the production JSON logger:\n\n```js\nconst fastify = require('fastify')({\n  logger: true\n})\n```\n\nEnabling the logger with appropriate configuration for both local development\nand production and test environment requires bit more configuration:\n\n```js\nconst envToLogger = {\n  development: {\n    transport: {\n      target: 'pino-pretty',\n      options: {\n        translateTime: 'HH:MM:ss Z',\n        ignore: 'pid,hostname',\n      },\n    },\n  },\n  production: true,\n  test: false,\n}\nconst fastify = require('fastify')({\n  logger: envToLogger[environment] ?? true // defaults to true if no entry matches in the map\n})\n```\n⚠️ `pino-pretty` needs to be installed as a dev dependency, it is not included\nby default for performance reasons.\n\n### Usage\nYou can use the logger like this in your route handlers:\n\n```js\nfastify.get('/', options, function (request, reply) {\n  request.log.info('Some info about the current request')\n  reply.send({ hello: 'world' })\n})\n```\n\nYou can trigger new logs outside route handlers by using the Pino instance from\nthe Fastify instance:\n```js\nfastify.log.info('Something important happened!');\n```\n\nIf you want to pass some options to the logger, just pass them to Fastify. You\ncan find all available options in the [Pino\ndocumentation](https://github.com/pinojs/pino/blob/master/docs/api.md#pinooptions-stream).\nIf you want to specify a file destination, use:\n\n```js\nconst fastify = require('fastify')({\n  logger: {\n    level: 'info',\n    file: '/path/to/file' // Will use pino.destination()\n  }\n})\n\nfastify.get('/', options, function (request, reply) {\n  request.log.info('Some info about the current request')\n  reply.send({ hello: 'world' })\n})\n```\n\nIf you want to pass a custom stream to the Pino instance, just add a stream\nfield to the logger object.\n\n```js\nconst split = require('split2')\nconst stream = split(JSON.parse)\n\nconst fastify = require('fastify')({\n  logger: {\n    level: 'info',\n    stream: stream\n  }\n})\n```\n\n<a id=\"logging-request-id\"></a>\n\nBy default, Fastify adds an ID to every request for easier tracking. If the\n\"request-id\" header is present its value is used, otherwise a new incremental ID\nis generated. See Fastify Factory\n[`requestIdHeader`](./Server.md#factory-request-id-header) and Fastify Factory\n[`genReqId`](./Server.md#genreqid) for customization options.\n\nThe default logger is configured with a set of standard serializers that\nserialize objects with `req`, `res`, and `err` properties. The object received\nby `req` is the Fastify [`Request`](./Request.md) object, while the object\nreceived by `res` is the Fastify [`Reply`](./Reply.md) object. This behaviour\ncan be customized by specifying custom serializers.\n```js\nconst fastify = require('fastify')({\n  logger: {\n    serializers: {\n      req (request) {\n        return { url: request.url }\n      }\n    }\n  }\n})\n```\nFor example, the response payload and headers could be logged using the approach\nbelow (even if it is *not recommended*):\n\n```js\nconst fastify = require('fastify')({\n  logger: {\n    transport: {\n      target: 'pino-pretty'\n    },\n    serializers: {\n      res (reply) {\n        // The default\n        return {\n          statusCode: reply.statusCode\n        }\n      },\n      req (request) {\n        return {\n          method: request.method,\n          url: request.url,\n          path: request.routerPath,\n          parameters: request.params,\n          // Including the headers in the log could be in violation\n          // of privacy laws, e.g. GDPR. You should use the \"redact\" option to\n          // remove sensitive fields. It could also leak authentication data in\n          // the logs.\n          headers: request.headers\n        };\n      }\n    }\n  }\n});\n```\n**Note**: The body cannot be serialized inside a `req` method because the\nrequest is serialized when we create the child logger. At that time, the body is\nnot yet parsed.\n\nSee an approach to log `req.body`\n\n```js\napp.addHook('preHandler', function (req, reply, done) {\n  if (req.body) {\n    req.log.info({ body: req.body }, 'parsed body')\n  }\n  done()\n})\n```\n\n\n*Any logger other than Pino will ignore this option.*\n\nYou can also supply your own logger instance. Instead of passing configuration\noptions, pass the instance. The logger you supply must conform to the Pino\ninterface; that is, it must have the following methods: `info`, `error`,\n`debug`, `fatal`, `warn`, `trace`, `silent`, `child` and a string property `level`.\n\nExample:\n\n```js\nconst log = require('pino')({ level: 'info' })\nconst fastify = require('fastify')({ logger: log })\n\nlog.info('does not have request information')\n\nfastify.get('/', function (request, reply) {\n  request.log.info('includes request information, but is the same logger instance as `log`')\n  reply.send({ hello: 'world' })\n})\n```\n\n*The logger instance for the current request is available in every part of the\n[lifecycle](./Lifecycle.md).*\n\n## Log Redaction\n\n[Pino](https://getpino.io) supports low-overhead log redaction for obscuring\nvalues of specific properties in recorded logs. As an example, we might want to\nlog all the HTTP headers minus the `Authorization` header for security concerns:\n\n```js\nconst fastify = Fastify({\n  logger: {\n    stream: stream,\n    redact: ['req.headers.authorization'],\n    level: 'info',\n    serializers: {\n      req (request) {\n        return {\n          method: request.method,\n          url: request.url,\n          headers: request.headers,\n          hostname: request.hostname,\n          remoteAddress: request.ip,\n          remotePort: request.socket.remotePort\n        }\n      }\n    }\n  }\n})\n```\n\nSee https://getpino.io/#/docs/redaction for more details.\n$/docs/Reference/ContentTypeParser.md\"P<h1 align=\"center\">Fastify</h1>\n\n## `Content-Type` Parser\nNatively, Fastify only supports `'application/json'` and `'text/plain'` content\ntypes. If the content type is not one of these, an\n`FST_ERR_CTP_INVALID_MEDIA_TYPE` error will be thrown.\n\nThe default charset is `utf-8`. If you need to support different content types,\nyou can use the `addContentTypeParser` API. *The default JSON and/or plain text\nparser can be changed or removed.*\n\n*Note: If you decide to specify your own content type with the `Content-Type`\nheader, UTF-8 will not be the default. Be sure to include UTF-8 like this\n`text/html; charset=utf-8`.*\n\nAs with the other APIs, `addContentTypeParser` is encapsulated in the scope in\nwhich it is declared. This means that if you declare it in the root scope it\nwill be available everywhere, while if you declare it inside a plugin it will be\navailable only in that scope and its children.\n\nFastify automatically adds the parsed request payload to the [Fastify\nrequest](./Request.md) object which you can access with `request.body`.\n\nNote that for `GET` and `HEAD` requests the payload is never parsed. For\n`OPTIONS` and `DELETE` requests the payload is only parsed if the content type\nis given in the content-type header. If it is not given, the\n[catch-all](#catch-all) parser is not executed as with `POST`, `PUT` and\n`PATCH`, but the payload is simply not parsed.\n\n### Usage\n```js\nfastify.addContentTypeParser('application/jsoff', function (request, payload, done) {\n  jsoffParser(payload, function (err, body) {\n    done(err, body)\n  })\n})\n\n// Handle multiple content types with the same function\nfastify.addContentTypeParser(['text/xml', 'application/xml'], function (request, payload, done) {\n  xmlParser(payload, function (err, body) {\n    done(err, body)\n  })\n})\n\n// Async is also supported in Node versions >= 8.0.0\nfastify.addContentTypeParser('application/jsoff', async function (request, payload) {\n  var res = await jsoffParserAsync(payload)\n\n  return res\n})\n\n// Handle all content types that matches RegExp\nfastify.addContentTypeParser(/^image\\/.*/, function (request, payload, done) {\n  imageParser(payload, function (err, body) {\n    done(err, body)\n  })\n})\n\n// Can use default JSON/Text parser for different content Types\nfastify.addContentTypeParser('text/json', { parseAs: 'string' }, fastify.getDefaultJsonParser('ignore', 'ignore'))\n```\n\nFastify first tries to match a content-type parser with a `string` value before\ntrying to find a matching `RegExp`. If you provide overlapping content types,\nFastify tries to find a matching content type by starting with the last one\npassed and ending with the first one. So if you want to specify a general\ncontent type more precisely, first specify the general content type and then the\nmore specific one, like in the example below.\n\n```js\n// Here only the second content type parser is called because its value also matches the first one\nfastify.addContentTypeParser('application/vnd.custom+xml', (request, body, done) => {} )\nfastify.addContentTypeParser('application/vnd.custom', (request, body, done) => {} )\n\n// Here the desired behavior is achieved because fastify first tries to match the\n// `application/vnd.custom+xml` content type parser\nfastify.addContentTypeParser('application/vnd.custom', (request, body, done) => {} )\nfastify.addContentTypeParser('application/vnd.custom+xml', (request, body, done) => {} )\n```\n\nBesides the `addContentTypeParser` API there are further APIs that can be used.\nThese are `hasContentTypeParser`, `removeContentTypeParser` and\n`removeAllContentTypeParsers`.\n\n#### hasContentTypeParser\n\nYou can use the `hasContentTypeParser` API to find if a specific content type\nparser already exists.\n\n```js\nif (!fastify.hasContentTypeParser('application/jsoff')){\n  fastify.addContentTypeParser('application/jsoff', function (request, payload, done) {\n    jsoffParser(payload, function (err, body) {\n      done(err, body)\n    })\n  })\n}\n```\n\n=======\n#### removeContentTypeParser\n\nWith `removeContentTypeParser` a single or an array of content types can be\nremoved. The method supports `string` and `RegExp` content types.\n\n```js\nfastify.addContentTypeParser('text/xml', function (request, payload, done) {\n  xmlParser(payload, function (err, body) {\n    done(err, body)\n  })\n})\n\n// Removes the both built-in content type parsers so that only the content type parser for text/html is available\nfastify.removeContentTypeParser(['application/json', 'text/plain'])\n```\n\n#### removeAllContentTypeParsers\n\nIn the example from just above, it is noticeable that we need to specify each\ncontent type that we want to remove. To solve this problem Fastify provides the\n`removeAllContentTypeParsers` API. This can be used to remove all currently\nexisting content type parsers. In the example below we achieve the same as in\nthe example above except that we do not need to specify each content type to\ndelete. Just like `removeContentTypeParser`, this API supports encapsulation.\nThe API is especially useful if you want to register a [catch-all content type\nparser](#catch-all) that should be executed for every content type and the\nbuilt-in parsers should be ignored as well.\n\n```js\nfastify.removeAllContentTypeParsers()\n\nfastify.addContentTypeParser('text/xml', function (request, payload, done) {\n  xmlParser(payload, function (err, body) {\n    done(err, body)\n  })\n})\n```\n\n**Notice**: The old syntaxes `function(req, done)` and `async function(req)` for\nthe parser are still supported but they are deprecated.\n\n#### Body Parser\nYou can parse the body of a request in two ways. The first one is shown above:\nyou add a custom content type parser and handle the request stream. In the\nsecond one, you should pass a `parseAs` option to the `addContentTypeParser`\nAPI, where you declare how you want to get the body. It could be of type\n`'string'` or `'buffer'`. If you use the `parseAs` option, Fastify will\ninternally handle the stream and perform some checks, such as the [maximum\nsize](./Server.md#factory-body-limit) of the body and the content length. If the\nlimit is exceeded the custom parser will not be invoked.\n```js\nfastify.addContentTypeParser('application/json', { parseAs: 'string' }, function (req, body, done) {\n  try {\n    var json = JSON.parse(body)\n    done(null, json)\n  } catch (err) {\n    err.statusCode = 400\n    done(err, undefined)\n  }\n})\n```\n\nSee\n[`example/parser.js`](https://github.com/fastify/fastify/blob/main/examples/parser.js)\nfor an example.\n\n##### Custom Parser Options\n+ `parseAs` (string): Either `'string'` or `'buffer'` to designate how the\n  incoming data should be collected. Default: `'buffer'`.\n+ `bodyLimit` (number): The maximum payload size, in bytes, that the custom\n  parser will accept. Defaults to the global body limit passed to the [`Fastify\n  factory function`](./Server.md#bodylimit).\n\n#### Catch-All\nThere are some cases where you need to catch all requests regardless of their\ncontent type. With Fastify, you can just use the `'*'` content type.\n```js\nfastify.addContentTypeParser('*', function (request, payload, done) {\n  var data = ''\n  payload.on('data', chunk => { data += chunk })\n  payload.on('end', () => {\n    done(null, data)\n  })\n})\n```\n\nUsing this, all requests that do not have a corresponding content type parser\nwill be handled by the specified function.\n\nThis is also useful for piping the request stream. You can define a content\nparser like:\n\n```js\nfastify.addContentTypeParser('*', function (request, payload, done) {\n  done()\n})\n```\n\nand then access the core HTTP request directly for piping it where you want:\n\n```js\napp.post('/hello', (request, reply) => {\n  reply.send(request.raw)\n})\n```\n\nHere is a complete example that logs incoming [json\nline](https://jsonlines.org/) objects:\n\n```js\nconst split2 = require('split2')\nconst pump = require('pump')\n\nfastify.addContentTypeParser('*', (request, payload, done) => {\n  done(null, pump(payload, split2(JSON.parse)))\n})\n\nfastify.route({\n  method: 'POST',\n  url: '/api/log/jsons',\n  handler: (req, res) => {\n    req.body.on('data', d => console.log(d)) // log every incoming object\n  }\n})\n ```\n\nFor piping file uploads you may want to check out [this\nplugin](https://github.com/fastify/fastify-multipart).\n\nIf you want the content type parser to be executed on all content types and not\nonly on those that don't have a specific one, you should call the\n`removeAllContentTypeParsers` method first.\n\n```js\n// Without this call, the request body with the content type application/json would be processed by the built-in JSON parser\nfastify.removeAllContentTypeParsers()\n\nfastify.addContentTypeParser('*', function (request, payload, done) {\n  var data = ''\n  payload.on('data', chunk => { data += chunk })\n  payload.on('end', () => {\n    done(null, data)\n  })\n})\n```\n/test/put.test.jsĉ'use strict'\n\nconst t = require('tap')\nrequire('./helper').payloadMethod('put', t)\nrequire('./input-validation').payloadMethod('put', t)\n/test/register.test.js\u000f'use strict'\n\n/* eslint no-prototype-builtins: 0 */\n\nconst t = require('tap')\nconst test = t.test\nconst sget = require('simple-get').concat\nconst Fastify = require('..')\n\ntest('register', t => {\n  t.plan(17)\n\n  const fastify = Fastify()\n\n  fastify.register(function (instance, opts, done) {\n    t.not(instance, fastify)\n    t.ok(fastify.isPrototypeOf(instance))\n\n    t.equal(typeof opts, 'object')\n    t.equal(typeof done, 'function')\n\n    instance.get('/first', function (req, reply) {\n      reply.send({ hello: 'world' })\n    })\n    done()\n  })\n\n  fastify.register(function (instance, opts, done) {\n    t.not(instance, fastify)\n    t.ok(fastify.isPrototypeOf(instance))\n\n    t.equal(typeof opts, 'object')\n    t.equal(typeof done, 'function')\n\n    instance.get('/second', function (req, reply) {\n      reply.send({ hello: 'world' })\n    })\n    done()\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    makeRequest('first')\n    makeRequest('second')\n  })\n\n  function makeRequest (path) {\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port + '/' + path\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(response.headers['content-length'], '' + body.length)\n      t.same(JSON.parse(body), { hello: 'world' })\n    })\n  }\n})\n\ntest('internal route declaration should pass the error generated by the register to the done handler / 1', t => {\n  t.plan(1)\n  const fastify = Fastify()\n\n  fastify.register((instance, opts, done) => {\n    done(new Error('kaboom'))\n  })\n\n  fastify.get('/', (req, reply) => {\n    reply.send({ hello: 'world' })\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    fastify.close()\n    t.equal(err.message, 'kaboom')\n  })\n})\n\ntest('internal route declaration should pass the error generated by the register to the done handler / 2', t => {\n  t.plan(2)\n  const fastify = Fastify()\n\n  fastify.register((instance, opts, done) => {\n    done(new Error('kaboom'))\n  })\n\n  fastify.get('/', (req, reply) => {\n    reply.send({ hello: 'world' })\n  })\n\n  fastify.after(err => {\n    t.equal(err.message, 'kaboom')\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    fastify.close()\n    t.error(err)\n  })\n})\n\ntest('awaitable register and after', async t => {\n  const fastify = Fastify()\n  let first = false\n  let second = false\n  let third = false\n\n  await fastify.register(async (instance, opts, done) => {\n    first = true\n  })\n\n  t.equal(first, true)\n\n  fastify.register(async (instance, opts, done) => {\n    second = true\n  })\n\n  await fastify.after()\n  t.equal(second, true)\n\n  fastify.register(async (instance, opts, done) => {\n    third = true\n  })\n\n  await fastify.ready()\n  t.equal(third, true)\n})\n\nfunction thenableRejects (t, promise, error) {\n  return t.rejects(async () => { await promise }, error)\n}\n\ntest('awaitable register error handling', async t => {\n  const fastify = Fastify()\n\n  const e = new Error('kaboom')\n\n  await thenableRejects(t, fastify.register(async (instance, opts) => {\n    throw e\n  }), e)\n\n  fastify.register(async (instance, opts) => {\n    t.fail('should not be executed')\n  })\n\n  await t.rejects(fastify.after(), e)\n\n  fastify.register(async (instance, opts, done) => {\n    t.fail('should not be executed')\n  })\n\n  await thenableRejects(t, fastify.ready(), e)\n})\n\ntest('awaitable after error handling', async t => {\n  const fastify = Fastify()\n\n  const e = new Error('kaboom')\n\n  fastify.register(async (instance, opts) => {\n    throw e\n  })\n\n  fastify.register(async (instance, opts) => {\n    t.fail('should not be executed')\n  })\n\n  await t.rejects(fastify.after(), e)\n\n  fastify.register(async (instance, opts, done) => {\n    t.fail('should not be executed')\n  })\n\n  await t.rejects(fastify.ready())\n})\n\ntest('chainable register', async t => {\n  t.plan(3)\n\n  const fastify = Fastify()\n\n  fastify.register(async () => {\n    t.pass('first loaded')\n  }).register(async () => {\n    t.pass('second loaded')\n  }).register(async () => {\n    t.pass('third loaded')\n  })\n\n  await fastify.ready()\n})\n/examples/typescript-server.ts\bJ/**\n * Most type annotations in this file are not strictly necessary but are\n * included for this example.\n *\n * To run this example execute the following commands to install typescript,\n * transpile the code, and start the server:\n *\n * npm i -g typescript\n * tsc examples/typescript-server.ts --target es6 --module commonjs\n * node examples/typescript-server.js\n */\n\nimport fastify, { FastifyInstance, RouteShorthandOptions } from '../fastify';\nimport { Server, IncomingMessage, ServerResponse } from 'http';\n\n// Create an http server. We pass the relevant typings for our http version used.\n// By passing types we get correctly typed access to the underlying http objects in routes.\n// If using http2 we'd pass <http2.Http2Server, http2.Http2ServerRequest, http2.Http2ServerResponse>\nconst server: FastifyInstance<\n  Server,\n  IncomingMessage,\n  ServerResponse\n> = fastify({ logger: true });\n\n// Define interfaces for our request. We can create these automatically\n// off our JSON Schema files (See TypeScript.md) but for the purpose of this\n// example we manually define them.\ninterface PingQuerystring {\n  foo?: number;\n}\n\ninterface PingParams {\n  bar?: string;\n}\n\ninterface PingHeaders {\n  a?: string;\n}\n\ninterface PingBody {\n  baz?: string;\n}\n\n// Define our route options with schema validation\nconst opts: RouteShorthandOptions = {\n  schema: {\n    body: {\n      type: 'object',\n      properties: {\n        pong: {\n          type: 'string'\n        }\n      }\n    }\n  }\n};\n\n// Add our route handler with correct types\nserver.post<{\n  Querystring: PingQuerystring;\n  Params: PingParams;\n  Headers: PingHeaders;\n  Body: PingBody;\n}>('/ping/:bar', opts, (request, reply) => {\n  console.log(request.query); // this is of type `PingQuerystring`\n  console.log(request.params); // this is of type `PingParams`\n  console.log(request.headers); // this is of type `PingHeaders`\n  console.log(request.body); // this is of type `PingBody`\n  reply.code(200).send({ pong: 'it worked!' });\n});\n\n// Start your server\nserver.listen({ port: 8080 }, (err, address) => {\n  if (err) {\n    console.error(err);\n    process.exit(1);\n  }\n});\n/docs/Reference/Plugins.md\u001f\u0002<h1 align=\"center\">Fastify</h1>\n\n## Plugins\nFastify allows the user to extend its functionalities with plugins. A plugin can\nbe a set of routes, a server [decorator](./Decorators.md), or whatever. The API\nthat you will need to use one or more plugins, is `register`.\n\nBy default, `register` creates a *new scope*, this means that if you make some\nchanges to the Fastify instance (via `decorate`), this change will not be\nreflected by the current context ancestors, but only by its descendants. This\nfeature allows us to achieve plugin *encapsulation* and *inheritance*, in this\nway we create a *directed acyclic graph* (DAG) and we will not have issues\ncaused by cross dependencies.\n\nYou may have already seen in the [Getting\nStarted](../Guides/Getting-Started.md#your-first-plugin) guide how easy it is\nto use this API:\n```\nfastify.register(plugin, [options])\n```\n\n### Plugin Options\n<a id=\"plugin-options\"></a>\n\nThe optional `options` parameter for `fastify.register` supports a predefined\nset of options that Fastify itself will use, except when the plugin has been\nwrapped with [fastify-plugin](https://github.com/fastify/fastify-plugin). This\noptions object will also be passed to the plugin upon invocation, regardless of\nwhether or not the plugin has been wrapped. The currently supported list of\nFastify specific options is:\n\n+ [`logLevel`](./Routes.md#custom-log-level)\n+ [`logSerializers`](./Routes.md#custom-log-serializer)\n+ [`prefix`](#route-prefixing-option)\n\n**Note: Those options will be ignored when used with fastify-plugin**\n\nIt is possible that Fastify will directly support other options in the future.\nThus, to avoid collisions, a plugin should consider namespacing its options. For\nexample, a plugin `foo` might be registered like so:\n\n```js\nfastify.register(require('fastify-foo'), {\n  prefix: '/foo',\n  foo: {\n    fooOption1: 'value',\n    fooOption2: 'value'\n  }\n})\n```\n\nIf collisions are not a concern, the plugin may simply accept the options object\nas-is:\n\n```js\nfastify.register(require('fastify-foo'), {\n  prefix: '/foo',\n  fooOption1: 'value',\n  fooOption2: 'value'\n})\n```\n\nThe `options` parameter can also be a `Function` that will be evaluated at the\ntime the plugin is registered while giving access to the Fastify instance via\nthe first positional argument:\n\n```js\nconst fp = require('fastify-plugin')\n\nfastify.register(fp((fastify, opts, done) => {\n  fastify.decorate('foo_bar', { hello: 'world' })\n\n  done()\n}))\n\n// The opts argument of fastify-foo will be { hello: 'world' }\nfastify.register(require('fastify-foo'), parent => parent.foo_bar)\n```\n\nThe Fastify instance passed on to the function is the latest state of the\n**external Fastify instance** the plugin was declared on, allowing access to\nvariables injected via [`decorate`](./Decorators.md) by preceding plugins\naccording to the **order of registration**. This is useful in case a plugin\ndepends on changes made to the Fastify instance by a preceding plugin i.e.\nutilizing an existing database connection to wrap around it.\n\nKeep in mind that the Fastify instance passed on to the function is the same as\nthe one that will be passed into the plugin, a copy of the external Fastify\ninstance rather than a reference. Any usage of the instance will behave the same\nas it would if called within the plugins function i.e. if `decorate` is called,\nthe decorated variables will be available within the plugins function unless it\nwas wrapped with [`fastify-plugin`](https://github.com/fastify/fastify-plugin).\n\n#### Route Prefixing option\n<a id=\"route-prefixing-option\"></a>\n\nIf you pass an option with the key `prefix` with a `string` value, Fastify will\nuse it to prefix all the routes inside the register, for more info check\n[here](./Routes.md#route-prefixing).\n\nBe aware that if you wrap your routes with\n[`fastify-plugin`](https://github.com/fastify/fastify-plugin), this option will\nnot work (there is a [workaround](./Routes.md#fastify-plugin) available).\n\n#### Error handling\n<a id=\"error-handling\"></a>\n\nThe error handling is done by\n[avvio](https://github.com/mcollina/avvio#error-handling).\n\nAs a general rule, it is highly recommended that you handle your errors in the\nnext `after` or `ready` block, otherwise you will get them inside the `listen`\ncallback.\n\n```js\nfastify.register(require('my-plugin'))\n\n// `after` will be executed once\n// the previous declared `register` has finished\nfastify.after(err => console.log(err))\n\n// `ready` will be executed once all the registers declared\n// have finished their execution\nfastify.ready(err => console.log(err))\n\n// `listen` is a special ready,\n// so it behaves in the same way\nfastify.listen({ port: 3000 }, (err, address) => {\n  if (err) console.log(err)\n})\n```\n\n### async/await\n<a id=\"async-await\"></a>\n\n*async/await* is supported by `after`, `ready`, and `listen`, as well as\n`fastify` being a [Thenable](https://promisesaplus.com/).\n\n```js\nawait fastify.register(require('my-plugin'))\n\nawait fastify.after()\n\nawait fastify.ready()\n\nawait fastify.listen({ port: 3000 })\n```\n\n#### ESM support\n<a id=\"esm-support\"></a>\n\nESM is supported as well from [Node.js\n`v13.3.0`](https://nodejs.org/api/esm.html) and above!\n\n```js\n// main.mjs\nimport Fastify from 'fastify'\nconst fastify = Fastify()\n\nfastify.register(import('./plugin.mjs'))\n\nfastify.listen({ port: 3000 }, console.log)\n\n\n// plugin.mjs\nasync function plugin (fastify, opts) {\n  fastify.get('/', async (req, reply) => {\n    return { hello: 'world' }\n  })\n}\n\nexport default plugin\n```\n\n### Create a plugin\n<a id=\"create-plugin\"></a>\n\nCreating a plugin is very easy, you just need to create a function that takes\nthree parameters, the `fastify` instance, an `options` object, and the `done`\ncallback.\n\nExample:\n```js\nmodule.exports = function (fastify, opts, done) {\n  fastify.decorate('utility', function () {})\n\n  fastify.get('/', handler)\n\n  done()\n}\n```\nYou can also use `register` inside another `register`:\n```js\nmodule.exports = function (fastify, opts, done) {\n  fastify.decorate('utility', function () {})\n\n  fastify.get('/', handler)\n\n  fastify.register(require('./other-plugin'))\n\n  done()\n}\n```\nSometimes, you will need to know when the server is about to close, for example,\nbecause you must close a connection to a database. To know when this is going to\nhappen, you can use the [`'onClose'`](./Hooks.md#on-close) hook.\n\nDo not forget that `register` will always create a new Fastify scope, if you do\nnot need that, read the following section.\n\n### Handle the scope\n<a id=\"handle-scope\"></a>\n\nIf you are using `register` only for extending the functionality of the server\nwith  [`decorate`](./Decorators.md), it is your responsibility to tell Fastify\nnot to create a new scope. Otherwise, your changes will not be accessible by the\nuser in the upper scope.\n\nYou have two ways to tell Fastify to avoid the creation of a new context:\n- Use the [`fastify-plugin`](https://github.com/fastify/fastify-plugin) module\n- Use the `'skip-override'` hidden property\n\nWe recommend using the `fastify-plugin` module, because it solves this problem\nfor you, and you can pass a version range of Fastify as a parameter that your\nplugin will support.\n```js\nconst fp = require('fastify-plugin')\n\nmodule.exports = fp(function (fastify, opts, done) {\n  fastify.decorate('utility', function () {})\n  done()\n}, '0.x')\n```\nCheck the [`fastify-plugin`](https://github.com/fastify/fastify-plugin)\ndocumentation to learn more about how to use this module.\n\nIf you do not use the `fastify-plugin` module, you can use the `'skip-override'`\nhidden property, but we do not recommend it. If in the future the Fastify API\nchanges it will be your responsibility to update the module, while if you use\n`fastify-plugin`, you can be sure about backward compatibility.\n```js\nfunction yourPlugin (fastify, opts, done) {\n  fastify.decorate('utility', function () {})\n  done()\n}\nyourPlugin[Symbol.for('skip-override')] = true\nmodule.exports = yourPlugin\n```\n/lib/symbols.js\u000bp'use strict'\n\nconst keys = {\n  kAvvioBoot: Symbol('fastify.avvioBoot'),\n  kChildren: Symbol('fastify.children'),\n  kServerBindings: Symbol('fastify.serverBindings'),\n  kBodyLimit: Symbol('fastify.bodyLimit'),\n  kRoutePrefix: Symbol('fastify.routePrefix'),\n  kLogLevel: Symbol('fastify.logLevel'),\n  kLogSerializers: Symbol('fastify.logSerializers'),\n  kHooks: Symbol('fastify.hooks'),\n  kContentTypeParser: Symbol('fastify.contentTypeParser'),\n  kState: Symbol('fastify.state'),\n  kOptions: Symbol('fastify.options'),\n  kDisableRequestLogging: Symbol('fastify.disableRequestLogging'),\n  kPluginNameChain: Symbol('fastify.pluginNameChain'),\n  kRouteContext: Symbol('fastify.context'),\n  kPublicRouteContext: Symbol('fastify.routeOptions'),\n  // Schema\n  kSchemaController: Symbol('fastify.schemaController'),\n  kSchemaHeaders: Symbol('headers-schema'),\n  kSchemaParams: Symbol('params-schema'),\n  kSchemaQuerystring: Symbol('querystring-schema'),\n  kSchemaBody: Symbol('body-schema'),\n  kSchemaResponse: Symbol('response-schema'),\n  kSchemaErrorFormatter: Symbol('fastify.schemaErrorFormatter'),\n  kSchemaVisited: Symbol('fastify.schemas.visited'),\n  // Request\n  kRequest: Symbol('fastify.Request'),\n  kRequestPayloadStream: Symbol('fastify.RequestPayloadStream'),\n  kRequestAcceptVersion: Symbol('fastify.RequestAcceptVersion'),\n  kRequestCacheValidateFns: Symbol('fastify.request.cache.validateFns'),\n  // 404\n  kFourOhFour: Symbol('fastify.404'),\n  kCanSetNotFoundHandler: Symbol('fastify.canSetNotFoundHandler'),\n  kFourOhFourLevelInstance: Symbol('fastify.404LogLevelInstance'),\n  kFourOhFourContext: Symbol('fastify.404ContextKey'),\n  kDefaultJsonParse: Symbol('fastify.defaultJSONParse'),\n  // Reply\n  kReply: Symbol('fastify.Reply'),\n  kReplySerializer: Symbol('fastify.reply.serializer'),\n  kReplyIsError: Symbol('fastify.reply.isError'),\n  kReplyHeaders: Symbol('fastify.reply.headers'),\n  kReplyTrailers: Symbol('fastify.reply.trailers'),\n  kReplyHasStatusCode: Symbol('fastify.reply.hasStatusCode'),\n  kReplyHijacked: Symbol('fastify.reply.hijacked'),\n  kReplyStartTime: Symbol('fastify.reply.startTime'),\n  kReplyNextErrorHandler: Symbol('fastify.reply.nextErrorHandler'),\n  kReplyEndTime: Symbol('fastify.reply.endTime'),\n  kReplyErrorHandlerCalled: Symbol('fastify.reply.errorHandlerCalled'),\n  kReplyIsRunningOnErrorHook: Symbol('fastify.reply.isRunningOnErrorHook'),\n  kReplySerializerDefault: Symbol('fastify.replySerializerDefault'),\n  kReplyCacheSerializeFns: Symbol('fastify.reply.cache.serializeFns'),\n  // This symbol is only meant to be used for fastify tests and should not be used for any other purpose\n  kTestInternals: Symbol('fastify.testInternals'),\n  kErrorHandler: Symbol('fastify.errorHandler'),\n  kHasBeenDecorated: Symbol('fastify.hasBeenDecorated'),\n  kKeepAliveConnections: Symbol('fastify.keepAliveConnections'),\n  kRouteByFastify: Symbol('fastify.routeByFastify')\n}\n\nmodule.exports = keys\n/test/http2/closing.test.js\u0010'use strict'\n\nconst t = require('tap')\nconst Fastify = require('../..')\nconst http2 = require('http2')\nconst { promisify } = require('util')\nconst connect = promisify(http2.connect)\nconst { once } = require('events')\n\nconst { buildCertificate } = require('../build-certificate')\nt.before(buildCertificate)\n\nfunction getUrl (app) {\n  const { address, port } = app.server.address()\n  if (address === '::1') {\n    return `http://[${address}]:${port}`\n  } else {\n    return `http://${address}:${port}`\n  }\n}\n\nt.test('http/2 request while fastify closing', t => {\n  let fastify\n  try {\n    fastify = Fastify({\n      http2: true\n    })\n    t.pass('http2 successfully loaded')\n  } catch (e) {\n    t.fail('http2 loading failed', e)\n  }\n\n  fastify.get('/', () => Promise.resolve({}))\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    t.test('return 200', t => {\n      const url = getUrl(fastify)\n      const session = http2.connect(url, function () {\n        this.request({\n          ':method': 'GET',\n          ':path': '/'\n        }).on('response', headers => {\n          t.equal(headers[':status'], 503)\n          t.end()\n          this.destroy()\n        }).on('error', () => {\n          // Nothing to do here,\n          // we are not interested in this error that might\n          // happen or not\n        })\n        fastify.close()\n      })\n      session.on('error', () => {\n        // Nothing to do here,\n        // we are not interested in this error that might\n        // happen or not\n        t.end()\n      })\n    })\n\n    t.end()\n  })\n})\n\nt.test('http/2 request while fastify closing - return503OnClosing: false', t => {\n  let fastify\n  try {\n    fastify = Fastify({\n      http2: true,\n      return503OnClosing: false\n    })\n    t.pass('http2 successfully loaded')\n  } catch (e) {\n    t.fail('http2 loading failed', e)\n  }\n\n  fastify.get('/', () => Promise.resolve({}))\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    t.test('return 200', t => {\n      const url = getUrl(fastify)\n      const session = http2.connect(url, function () {\n        this.request({\n          ':method': 'GET',\n          ':path': '/'\n        }).on('response', headers => {\n          t.equal(headers[':status'], 200)\n          t.end()\n          this.destroy()\n        }).on('error', () => {\n          // Nothing to do here,\n          // we are not interested in this error that might\n          // happen or not\n        })\n        fastify.close()\n      })\n      session.on('error', () => {\n        // Nothing to do here,\n        // we are not interested in this error that might\n        // happen or not\n        t.end()\n      })\n    })\n\n    t.end()\n  })\n})\n\nt.test('http/2 closes successfully with async await', async t => {\n  const fastify = Fastify({\n    http2SessionTimeout: 100,\n    http2: true\n  })\n\n  await fastify.listen({ port: 0 })\n\n  const url = getUrl(fastify)\n  const session = await connect(url)\n  // An error might or might not happen, as it's OS dependent.\n  session.on('error', () => {})\n  await fastify.close()\n})\n\nt.test('https/2 closes successfully with async await', async t => {\n  const fastify = Fastify({\n    http2SessionTimeout: 100,\n    http2: true,\n    https: {\n      key: global.context.key,\n      cert: global.context.cert\n    }\n  })\n\n  await fastify.listen({ port: 0 })\n\n  const url = getUrl(fastify)\n  const session = await connect(url)\n  // An error might or might not happen, as it's OS dependent.\n  session.on('error', () => {})\n  await fastify.close()\n})\n\nt.test('http/2 server side session emits a timeout event', async t => {\n  let _resolve\n  const p = new Promise((resolve) => { _resolve = resolve })\n\n  const fastify = Fastify({\n    http2SessionTimeout: 100,\n    http2: true\n  })\n\n  fastify.get('/', async (req) => {\n    req.raw.stream.session.on('timeout', () => _resolve())\n    return {}\n  })\n\n  await fastify.listen({ port: 0 })\n\n  const url = getUrl(fastify)\n  const session = await connect(url)\n  const req = session.request({\n    ':method': 'GET',\n    ':path': '/'\n  }).end()\n\n  const [headers] = await once(req, 'response')\n  t.equal(headers[':status'], 200)\n  req.resume()\n\n  // An error might or might not happen, as it's OS dependent.\n  session.on('error', () => {})\n  await p\n  await fastify.close()\n})\n/test/async-await.test.js8'use strict'\n\nconst t = require('tap')\nconst test = t.test\nconst sget = require('simple-get').concat\nconst Fastify = require('..')\nconst split = require('split2')\nconst pino = require('pino')\nconst statusCodes = require('http').STATUS_CODES\nconst sleep = ms => new Promise(resolve => setTimeout(resolve, ms))\n\nconst opts = {\n  schema: {\n    response: {\n      '2xx': {\n        type: 'object',\n        properties: {\n          hello: {\n            type: 'string'\n          }\n        }\n      }\n    }\n  }\n}\n\ntest('async await', t => {\n  t.plan(11)\n  const fastify = Fastify()\n  try {\n    fastify.get('/', opts, async function awaitMyFunc (req, reply) {\n      await sleep(200)\n      return { hello: 'world' }\n    })\n    t.pass()\n  } catch (e) {\n    t.fail()\n  }\n\n  try {\n    fastify.get('/no-await', opts, async function (req, reply) {\n      return { hello: 'world' }\n    })\n    t.pass()\n  } catch (e) {\n    t.fail()\n  }\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(response.headers['content-length'], '' + body.length)\n      t.same(JSON.parse(body), { hello: 'world' })\n    })\n\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port + '/no-await'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(response.headers['content-length'], '' + body.length)\n      t.same(JSON.parse(body), { hello: 'world' })\n    })\n  })\n})\n\ntest('ignore the result of the promise if reply.send is called beforehand (undefined)', t => {\n  t.plan(4)\n\n  const server = Fastify()\n  const payload = { hello: 'world' }\n\n  server.get('/', async function awaitMyFunc (req, reply) {\n    await reply.send(payload)\n  })\n\n  t.teardown(server.close.bind(server))\n\n  server.listen({ port: 0 }, (err) => {\n    t.error(err)\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + server.server.address().port + '/'\n    }, (err, res, body) => {\n      t.error(err)\n      t.same(payload, JSON.parse(body))\n      t.equal(res.statusCode, 200)\n    })\n  })\n})\n\ntest('ignore the result of the promise if reply.send is called beforehand (object)', t => {\n  t.plan(4)\n\n  const server = Fastify()\n  const payload = { hello: 'world2' }\n\n  server.get('/', async function awaitMyFunc (req, reply) {\n    await reply.send(payload)\n    return { hello: 'world' }\n  })\n\n  t.teardown(server.close.bind(server))\n\n  server.listen({ port: 0 }, (err) => {\n    t.error(err)\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + server.server.address().port + '/'\n    }, (err, res, body) => {\n      t.error(err)\n      t.same(payload, JSON.parse(body))\n      t.equal(res.statusCode, 200)\n    })\n  })\n})\n\ntest('server logs an error if reply.send is called and a value is returned via async/await', t => {\n  const lines = ['incoming request', 'request completed', 'Reply already sent']\n  t.plan(lines.length + 2)\n\n  const splitStream = split(JSON.parse)\n  splitStream.on('data', (line) => {\n    t.equal(line.msg, lines.shift())\n  })\n\n  const logger = pino(splitStream)\n\n  const fastify = Fastify({\n    logger\n  })\n\n  fastify.get('/', async (req, reply) => {\n    await reply.send({ hello: 'world' })\n    return { hello: 'world2' }\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/'\n  }, (err, res) => {\n    t.error(err)\n    const payload = JSON.parse(res.payload)\n    t.same(payload, { hello: 'world' })\n  })\n})\n\ntest('ignore the result of the promise if reply.send is called beforehand (undefined)', t => {\n  t.plan(4)\n\n  const server = Fastify()\n  const payload = { hello: 'world' }\n\n  server.get('/', async function awaitMyFunc (req, reply) {\n    await reply.send(payload)\n  })\n\n  t.teardown(server.close.bind(server))\n\n  server.listen({ port: 0 }, (err) => {\n    t.error(err)\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + server.server.address().port + '/'\n    }, (err, res, body) => {\n      t.error(err)\n      t.same(payload, JSON.parse(body))\n      t.equal(res.statusCode, 200)\n    })\n  })\n})\n\ntest('ignore the result of the promise if reply.send is called beforehand (object)', t => {\n  t.plan(4)\n\n  const server = Fastify()\n  const payload = { hello: 'world2' }\n\n  server.get('/', async function awaitMyFunc (req, reply) {\n    await reply.send(payload)\n    return { hello: 'world' }\n  })\n\n  t.teardown(server.close.bind(server))\n\n  server.listen({ port: 0 }, (err) => {\n    t.error(err)\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + server.server.address().port + '/'\n    }, (err, res, body) => {\n      t.error(err)\n      t.same(payload, JSON.parse(body))\n      t.equal(res.statusCode, 200)\n    })\n  })\n})\n\ntest('await reply if we will be calling reply.send in the future', t => {\n  const lines = ['incoming request', 'request completed']\n  t.plan(lines.length + 2)\n\n  const splitStream = split(JSON.parse)\n  splitStream.on('data', (line) => {\n    t.equal(line.msg, lines.shift())\n  })\n\n  const server = Fastify({\n    logger: {\n      stream: splitStream\n    }\n  })\n  const payload = { hello: 'world' }\n\n  server.get('/', async function awaitMyFunc (req, reply) {\n    setImmediate(function () {\n      reply.send(payload)\n    })\n\n    await reply\n  })\n\n  server.inject({\n    method: 'GET',\n    url: '/'\n  }, (err, res) => {\n    t.error(err)\n    const payload = JSON.parse(res.payload)\n    t.same(payload, { hello: 'world' })\n  })\n})\n\ntest('await reply if we will be calling reply.send in the future (error case)', t => {\n  const lines = ['incoming request', 'kaboom', 'request completed']\n  t.plan(lines.length + 2)\n\n  const splitStream = split(JSON.parse)\n  splitStream.on('data', (line) => {\n    t.equal(line.msg, lines.shift())\n  })\n\n  const server = Fastify({\n    logger: {\n      stream: splitStream\n    }\n  })\n\n  server.get('/', async function awaitMyFunc (req, reply) {\n    setImmediate(function () {\n      reply.send(new Error('kaboom'))\n    })\n\n    await reply\n  })\n\n  server.inject({\n    method: 'GET',\n    url: '/'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 500)\n  })\n})\n\ntest('support reply decorators with await', t => {\n  t.plan(2)\n\n  const fastify = Fastify()\n\n  fastify.decorateReply('wow', function () {\n    setImmediate(() => {\n      this.send({ hello: 'world' })\n    })\n\n    return this\n  })\n\n  fastify.get('/', async (req, reply) => {\n    await sleep(1)\n    await reply.wow()\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/'\n  }, (err, res) => {\n    t.error(err)\n    const payload = JSON.parse(res.payload)\n    t.same(payload, { hello: 'world' })\n  })\n})\n\ntest('inject async await', async t => {\n  t.plan(1)\n\n  const fastify = Fastify()\n\n  fastify.get('/', (req, reply) => {\n    reply.send({ hello: 'world' })\n  })\n\n  try {\n    const res = await fastify.inject({ method: 'GET', url: '/' })\n    t.same({ hello: 'world' }, JSON.parse(res.payload))\n  } catch (err) {\n    t.fail(err)\n  }\n})\n\ntest('inject async await - when the server equal up', async t => {\n  t.plan(2)\n\n  const fastify = Fastify()\n\n  fastify.get('/', (req, reply) => {\n    reply.send({ hello: 'world' })\n  })\n\n  try {\n    const res = await fastify.inject({ method: 'GET', url: '/' })\n    t.same({ hello: 'world' }, JSON.parse(res.payload))\n  } catch (err) {\n    t.fail(err)\n  }\n\n  await sleep(200)\n\n  try {\n    const res2 = await fastify.inject({ method: 'GET', url: '/' })\n    t.same({ hello: 'world' }, JSON.parse(res2.payload))\n  } catch (err) {\n    t.fail(err)\n  }\n})\n\ntest('async await plugin', async t => {\n  t.plan(1)\n\n  const fastify = Fastify()\n\n  fastify.register(async (fastify, opts) => {\n    fastify.get('/', (req, reply) => {\n      reply.send({ hello: 'world' })\n    })\n\n    await sleep(200)\n  })\n\n  try {\n    const res = await fastify.inject({ method: 'GET', url: '/' })\n    t.same({ hello: 'world' }, JSON.parse(res.payload))\n  } catch (err) {\n    t.fail(err)\n  }\n})\n\ntest('does not call reply.send() twice if 204 response equal already sent', t => {\n  t.plan(2)\n\n  const fastify = Fastify()\n\n  fastify.get('/', async (req, reply) => {\n    reply.code(204).send()\n    reply.send = () => {\n      throw new Error('reply.send() was called twice')\n    }\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 204)\n  })\n})\n\ntest('promise was fulfilled with undefined', t => {\n  t.plan(4)\n\n  let fastify = null\n  const stream = split(JSON.parse)\n  try {\n    fastify = Fastify({\n      logger: {\n        stream,\n        level: 'error'\n      }\n    })\n  } catch (e) {\n    t.fail()\n  }\n\n  t.teardown(fastify.close.bind(fastify))\n\n  fastify.get('/', async (req, reply) => {\n  })\n\n  stream.once('data', line => {\n    t.fail('should not log an error')\n  })\n\n  fastify.listen({ port: 0 }, (err) => {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port + '/'\n    }, (err, res, body) => {\n      t.error(err)\n      t.equal(res.body, undefined)\n      t.equal(res.statusCode, 200)\n    })\n  })\n})\n\ntest('promise was fulfilled with undefined using inject', async (t) => {\n  const stream = split(JSON.parse)\n  const fastify = Fastify({\n    logger: {\n      stream,\n      level: 'error'\n    }\n  })\n\n  fastify.get('/', async (req, reply) => {\n  })\n\n  stream.once('data', line => {\n    t.fail('should not log an error')\n  })\n\n  const res = await fastify.inject('/')\n\n  t.equal(res.body, '')\n  t.equal(res.statusCode, 200)\n})\n\ntest('error is not logged because promise was fulfilled with undefined but response was sent before promise resolution', t => {\n  t.plan(4)\n\n  let fastify = null\n  const stream = split(JSON.parse)\n  const payload = { hello: 'world' }\n  try {\n    fastify = Fastify({\n      logger: {\n        stream,\n        level: 'error'\n      }\n    })\n  } catch (e) {\n    t.fail()\n  }\n\n  t.teardown(fastify.close.bind(fastify))\n\n  fastify.get('/', async (req, reply) => {\n    reply.send(payload)\n  })\n\n  stream.once('data', line => {\n    t.fail('should not log an error')\n  })\n\n  fastify.listen({ port: 0 }, (err) => {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port + '/'\n    }, (err, res, body) => {\n      t.error(err)\n      t.equal(res.statusCode, 200)\n      t.same(\n        payload,\n        JSON.parse(body)\n      )\n    })\n  })\n})\n\ntest('Thrown Error instance sets HTTP status code', t => {\n  t.plan(3)\n\n  const fastify = Fastify()\n\n  const err = new Error('winter is coming')\n  err.statusCode = 418\n\n  fastify.get('/', async (req, reply) => {\n    throw err\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/'\n  }, (error, res) => {\n    t.error(error)\n    t.equal(res.statusCode, 418)\n    t.same(\n      {\n        error: statusCodes['418'],\n        message: err.message,\n        statusCode: 418\n      },\n      JSON.parse(res.payload)\n    )\n  })\n})\n\ntest('customErrorHandler support', t => {\n  t.plan(4)\n\n  const fastify = Fastify()\n\n  fastify.get('/', async (req, reply) => {\n    const error = new Error('ouch')\n    error.statusCode = 400\n    throw error\n  })\n\n  fastify.setErrorHandler(async err => {\n    t.equal(err.message, 'ouch')\n    const error = new Error('kaboom')\n    error.statusCode = 401\n    throw error\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 401)\n    t.same(\n      {\n        error: statusCodes['401'],\n        message: 'kaboom',\n        statusCode: 401\n      },\n      JSON.parse(res.payload)\n    )\n  })\n})\n\ntest('customErrorHandler support without throwing', t => {\n  t.plan(4)\n\n  const fastify = Fastify()\n\n  fastify.get('/', async (req, reply) => {\n    const error = new Error('ouch')\n    error.statusCode = 400\n    throw error\n  })\n\n  fastify.setErrorHandler(async (err, req, reply) => {\n    t.equal(err.message, 'ouch')\n    await reply.code(401).send('kaboom')\n    reply.send = t.fail.bind(t, 'should not be called')\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 401)\n    t.same(\n      'kaboom',\n      res.payload\n    )\n  })\n})\n\n// See https://github.com/fastify/fastify/issues/2653\ntest('customErrorHandler only called if reply not already sent', t => {\n  t.plan(3)\n\n  const fastify = Fastify()\n\n  fastify.get('/', async (req, reply) => {\n    await reply.send('success')\n    const error = new Error('ouch')\n    error.statusCode = 400\n    throw error\n  })\n\n  fastify.setErrorHandler(t.fail.bind(t, 'should not be called'))\n\n  fastify.inject({\n    method: 'GET',\n    url: '/'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 200)\n    t.same(\n      'success',\n      res.payload\n    )\n  })\n})\n\n// See https://github.com/fastify/fastify/issues/3209\ntest('setNotFoundHandler should accept return value', t => {\n  t.plan(3)\n\n  const fastify = Fastify()\n\n  fastify.get('/', async () => ({ hello: 'world' }))\n\n  fastify.setNotFoundHandler((req, reply) => {\n    reply.code(404)\n    return {\n      error: statusCodes['404'],\n      message: 'lost',\n      statusCode: 404\n    }\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/elsewhere'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 404)\n    t.same(\n      {\n        error: statusCodes['404'],\n        message: 'lost',\n        statusCode: 404\n      },\n      JSON.parse(res.payload)\n    )\n  })\n})\n\n// See https://github.com/fastify/fastify/issues/3209\ntest('customErrorHandler should accept return value', t => {\n  t.plan(4)\n\n  const fastify = Fastify()\n\n  fastify.get('/', async (req, reply) => {\n    const error = new Error('ouch')\n    error.statusCode = 400\n    throw error\n  })\n\n  fastify.setErrorHandler((err, req, reply) => {\n    t.equal(err.message, 'ouch')\n    reply.code(401)\n    return {\n      error: statusCodes['401'],\n      message: 'kaboom',\n      statusCode: 401\n    }\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 401)\n    t.same(\n      {\n        error: statusCodes['401'],\n        message: 'kaboom',\n        statusCode: 401\n      },\n      JSON.parse(res.payload)\n    )\n  })\n})\n\ntest('await self', async t => {\n  const app = Fastify()\n  t.equal(await app, app)\n})\n/docs/Reference/Middleware.md\u000b|<h1 align=\"center\">Fastify</h1>\n\n## Middleware\n\nStarting with Fastify v3.0.0, middleware is not supported out of the box and\nrequires an external plugin such as\n[`@fastify/express`](https://github.com/fastify/fastify-express) or\n[`@fastify/middie`](https://github.com/fastify/middie).\n\n\nAn example of registering the\n[`@fastify/express`](https://github.com/fastify/fastify-express) plugin to `use`\nExpress middleware:\n\n```js\nawait fastify.register(require('@fastify/express'))\nfastify.use(require('cors')())\nfastify.use(require('dns-prefetch-control')())\nfastify.use(require('frameguard')())\nfastify.use(require('hsts')())\nfastify.use(require('ienoopen')())\nfastify.use(require('x-xss-protection')())\n```\n\nYou can also use [`@fastify/middie`](https://github.com/fastify/middie), which provides\nsupport for simple Express-style middleware but with improved performance:\n\n```js\nawait fastify.register(require('@fastify/middie'))\nfastify.use(require('cors')())\n```\n\nRemember that middleware can be encapsulated; this means that you can decide\nwhere your middleware should run by using `register` as explained in the\n[plugins guide](../Guides/Plugins-Guide.md).\n\nFastify middleware does not expose the `send` method or other methods specific to\nthe Fastify [Reply](./Reply.md#reply) instance. This is because Fastify wraps\nthe incoming `req` and `res` Node instances using the\n[Request](./Request.md#request) and [Reply](./Reply.md#reply) objects\ninternally, but this is done after the middleware phase. If you need to create\nmiddleware, you have to use the Node `req` and `res` instances. Otherwise, you\ncan use the `preHandler` hook that already has the\n[Request](./Request.md#request) and [Reply](./Reply.md#reply) Fastify instances.\nFor more information, see [Hooks](./Hooks.md#hooks).\n\n#### Restrict middleware execution to certain paths\n<a id=\"restrict-usage\"></a>\n\nIf you need to only run middleware under certain paths, just pass the path as\nthe first parameter to `use` and you are done!\n\n*Note that this does not support routes with parameters, (e.g.\n`/user/:id/comments`) and wildcards are not supported in multiple paths.*\n\n```js\nconst path = require('path')\nconst serveStatic = require('serve-static')\n\n// Single path\nfastify.use('/css', serveStatic(path.join(__dirname, '/assets')))\n\n// Wildcard path\nfastify.use('/css/(.*)', serveStatic(path.join(__dirname, '/assets')))\n\n// Multiple paths\nfastify.use(['/css', '/js'], serveStatic(path.join(__dirname, '/assets')))\n```\n\n### Alternatives\n\nFastify offers some alternatives to the most commonly used middleware, such as\n[`@fastify/helmet`](https://github.com/fastify/fastify-helmet) in case of\n[`helmet`](https://github.com/helmetjs/helmet),\n[`@fastify/cors`](https://github.com/fastify/fastify-cors) for\n[`cors`](https://github.com/expressjs/cors), and\n[`@fastify/static`](https://github.com/fastify/fastify-static) for\n[`serve-static`](https://github.com/expressjs/serve-static).\n/docs/Reference/Request.md'<<h1 align=\"center\">Fastify</h1>\n\n## Request\nThe first parameter of the handler function is `Request`.\n\nRequest is a core Fastify object containing the following fields:\n- `query` - the parsed querystring, its format is specified by\n  [`querystringParser`](./Server.md#querystringparser)\n- `body` - the request payload, see [Content-Type\n  Parser](./ContentTypeParser.md) for details on what request payloads Fastify\n  natively parses and how to support other content types\n- `params` - the params matching the URL\n- [`headers`](#headers) - the headers getter and setter\n- `raw` - the incoming HTTP request from Node core\n- `server` - The Fastify server instance, scoped to the current [encapsulation\n  context](./Encapsulation.md)\n- `id` - the request ID\n- `log` - the logger instance of the incoming request\n- `ip` - the IP address of the incoming request\n- `ips` - an array of the IP addresses, ordered from closest to furthest, in the\n  `X-Forwarded-For` header of the incoming request (only when the\n  [`trustProxy`](./Server.md#factory-trust-proxy) option is enabled)\n- `hostname` - the host of the incoming request (derived from `X-Forwarded-Host`\n  header when the [`trustProxy`](./Server.md#factory-trust-proxy) option is\n  enabled). For HTTP/2 compatibility it returns `:authority` if no host header\n  exists.\n- `protocol` - the protocol of the incoming request (`https` or `http`)\n- `method` - the method of the incoming request\n- `url` - the URL of the incoming request\n- `routerMethod` - the method defined for the router that is handling the\n  request\n- `routerPath` - the path pattern defined for the router that is handling the\n  request\n- `is404` - true if request is being handled by 404 handler, false if it is not\n- `connection` - Deprecated, use `socket` instead. The underlying connection of\n  the incoming request.\n- `socket` - the underlying connection of the incoming request\n- `context` - A Fastify internal object. You should not use it directly or\n  modify it. It is useful to access one special key:\t\n  - `context.config` - The route [`config`](./Routes.md#routes-config) object.\n- `routeSchema` - the scheme definition set for the router that is\n  handling the request\n- `routeConfig` - The route [`config`](./Routes.md#routes-config) \n  object.\n- `routeOptions` - The route [`option`](./Routes.md#routes-options) object\n  - `bodyLimit` - either server limit or route limit\n  - `method` - the http method for the route\n  - `url` - the path of the URL to match this route\n  - `attachValidation` - attach `validationError` to request \n    (if there is a schema defined)\n  - `logLevel` - log level defined for this route\n  - `version` -  a semver compatible string that defines the version of the endpoint\n  - `exposeHeadRoute` - creates a sibling HEAD route for any GET routes\n  - `prefixTrailingSlash` - string used to determine how to handle passing / \n    as a route with a prefix.\n- [.getValidationFunction(schema | httpPart)](#getvalidationfunction) - \n  Returns a validation function for the specified schema or http part,\n  if any of either are set or cached.\n- [.compileValidationSchema(schema, [httpPart])](#compilevalidationschema) -\n  Compiles the specified schema and returns a validation function\n  using the default (or customized) `ValidationCompiler`.\n  The optional `httpPart` is forwarded to the `ValidationCompiler`\n  if provided, defaults to `null`.\n- [.validateInput(data, schema | httpPart, [httpPart])](#validate) -\n  Validates the specified input by using the specified\n  schema and returns the serialized payload. If the optional\n  `httpPart` is provided, the function will use the serializer\n  function given for that HTTP Status Code. Defaults to `null`.\n\n### Headers\n\nThe `request.headers` is a getter that returns an Object with the headers of the\nincoming request. You can set custom headers like this:\n\n```js\nrequest.headers = {\n  'foo': 'bar',\n  'baz': 'qux'\n}\n```\n\nThis operation will add to the request headers the new values that can be read\ncalling `request.headers.bar`. Moreover, you can still access the standard\nrequest's headers with the `request.raw.headers` property.\n\n> Note: For performance reason on `not found` route, you may see that we will\nadd an extra property `Symbol('fastify.RequestAcceptVersion')` on the headers.\n\n```js\nfastify.post('/:params', options, function (request, reply) {\n  console.log(request.body)\n  console.log(request.query)\n  console.log(request.params)\n  console.log(request.headers)\n  console.log(request.raw)\n  console.log(request.server)\n  console.log(request.id)\n  console.log(request.ip)\n  console.log(request.ips)\n  console.log(request.hostname)\n  console.log(request.protocol)\n  console.log(request.url)\n  console.log(request.routerMethod)\n  console.log(request.routeOptions.bodyLimit)\n  console.log(request.routeOptions.method)\n  console.log(request.routeOptions.url)\n  console.log(request.routeOptions.attachValidation)\n  console.log(request.routeOptions.logLevel)\n  console.log(request.routeOptions.version)\n  console.log(request.routeOptions.exposeHeadRoute)\n  console.log(request.routeOptions.prefixTrailingSlash)\n  console.log(request.routerPath.logLevel)\n  request.log.info('some info')\n})\n```\n### .getValidationFunction(schema | httpPart)\n<a id=\"getvalidationfunction\"></a>\n\nBy calling this function using a provided `schema` or `httpPart`, \nit will return a `validation` function that can be used to\nvalidate diverse inputs. It returns `undefined` if no\nserialization function was found using either of the provided inputs.\n\nThis function has property errors. Errors encountered during the last validation\nare assigned to errors\n\n```js\nconst validate = request\n                  .getValidationFunction({\n                    type: 'object', \n                    properties: { \n                      foo: { \n                        type: 'string' \n                      } \n                    } \n                  })\nconsole.log(validate({ foo: 'bar' })) // true\nconsole.log(validate.errors) // null\n\n// or\n\nconst validate = request\n                  .getValidationFunction('body')\nconsole.log(validate({ foo: 0.5 })) // false\nconsole.log(validate.errors) // validation errors\n```\n\nSee [.compilaValidationSchema(schema, [httpStatus])](#compilevalidationschema)\nfor more information on how to compile validation function.\n\n### .compileValidationSchema(schema, [httpPart])\n<a id=\"compilevalidationschema\"></a>\n\nThis function will compile a validation schema and\nreturn a function that can be used to validate data.\nThe function returned (a.k.a. _validation function_) is compiled\nby using the provided [`SchemaControler#ValidationCompiler`](./Server.md#schema-controller).\nA `WeakMap` is used to cached this, reducing compilation calls.\n\nThe optional parameter `httpPart`, if provided, is forwarded directly\nthe `ValidationCompiler`, so it can be used to compile the validation\nfunction if a custom `ValidationCompiler` is provided for the route.\n\nThis function has property errors. Errors encountered during the last validation\nare assigned to errors\n\n```js\nconst validate = request\n                  .compileValidationSchema({\n                    type: 'object', \n                    properties: { \n                      foo: { \n                        type: 'string' \n                      } \n                    } \n                  })\nconsole.log(validate({ foo: 'bar' })) // true\nconsole.log(validate.errors) // null\n\n// or\n\nconst validate = request\n                  .compileValidationSchema({\n                    type: 'object', \n                    properties: { \n                      foo: { \n                        type: 'string' \n                      } \n                    } \n                  }, 200)\nconsole.log(validate({ hello: 'world' })) // false\nconsole.log(validate.errors) // validation errors\n```\n\nNote that you should be careful when using this function, as it will cache\nthe compiled validation functions based on the schema provided. If the\nschemas provided are mutated or changed, the validation functions will not\ndetect that the schema has been altered and for instance it will reuse the\npreviously compiled validation function, as the cache is based on\nthe reference of the schema (Object) previously provided.\n\nIf there is a need to change the properties of a schema, always opt to create\na totally new schema (object), otherwise the implementation will not benefit from\nthe cache mechanism.\n\nUsing the following schema as an example:\n```js\nconst schema1 = {\n  type: 'object',\n  properties: {\n    foo: {\n      type: 'string'\n    }\n  }\n}\n```\n\n*Not*\n```js \nconst validate = request.compileValidationSchema(schema1)\n\n// Later on...\nschema1.properties.foo.type. = 'integer'\nconst newValidate = request.compileValidationSchema(schema1)\n\nconsole.log(newValidate === validate) // true\n```\n\n*Instead*\n```js\nconst validate = request.compileValidationSchema(schema1)\n\n// Later on...\nconst newSchema = Object.assign({}, schema1)\nnewSchema.properties.foo.type = 'integer'\n\nconst newValidate = request.compileValidationSchema(newSchema)\n\nconsole.log(newValidate === validate) // false\n```\n\n### .validateInput(data, [schema | httpStatus], [httpStatus])\n<a id=\"validate\"></a>\n\nThis function will validate the input based on the provided schema,\nor HTTP part passed. If both are provided, the `httpPart` parameter\nwill take precedence.\n\nIf there is not a validation function for a given `schema`, a new validation\nfunction will be compiled, forwarding the `httpPart` if provided.\n\n```js\nrequest\n  .validateInput({ foo: 'bar'}, {  \n    type: 'object', \n    properties: { \n      foo: { \n        type: 'string' \n      } \n    } \n  }) // true\n\n// or\n\nrequest\n  .validateInput({ foo: 'bar'}, {\n    type: 'object', \n    properties: { \n      foo: { \n        type: 'string' \n      } \n    } \n  }, 'body') // true\n\n// or\n\nrequest\n  .validateInput({ hello: 'world'}, 'query') // false\n```\n\nSee [.compileValidationSchema(schema, [httpStatus])](#compileValidationSchema)\nfor more information on how to compile validation schemas.\n/test/requestTimeout.test.js\u0005\u000e'use strict'\n\nconst http = require('http')\nconst { test } = require('tap')\nconst Fastify = require('../fastify')\n\ntest('requestTimeout passed to server', t => {\n  t.plan(5)\n\n  try {\n    Fastify({ requestTimeout: 500.1 })\n    t.fail('option must be an integer')\n  } catch (err) {\n    t.ok(err)\n  }\n\n  try {\n    Fastify({ requestTimeout: [] })\n    t.fail('option must be an integer')\n  } catch (err) {\n    t.ok(err)\n  }\n\n  const httpServer = Fastify({ requestTimeout: 1000 }).server\n  t.equal(httpServer.requestTimeout, 1000)\n\n  const httpsServer = Fastify({ requestTimeout: 1000, https: true }).server\n  t.equal(httpsServer.requestTimeout, 1000)\n\n  const serverFactory = (handler, _) => {\n    const server = http.createServer((req, res) => {\n      handler(req, res)\n    })\n    server.requestTimeout = 5000\n    return server\n  }\n  const customServer = Fastify({ requestTimeout: 4000, serverFactory }).server\n  t.equal(customServer.requestTimeout, 5000)\n})\n\ntest('requestTimeout should be set', async (t) => {\n  t.plan(1)\n\n  const initialConfig = Fastify({ requestTimeout: 5000 }).initialConfig\n  t.same(initialConfig.requestTimeout, 5000)\n})\n\ntest('requestTimeout should 0', async (t) => {\n  t.plan(1)\n\n  const initialConfig = Fastify().initialConfig\n  t.same(initialConfig.requestTimeout, 0)\n})\n/test/internals/reply.test.js̢'use strict'\n\nconst t = require('tap')\nconst test = t.test\nconst sget = require('simple-get').concat\nconst http = require('http')\nconst NotFound = require('http-errors').NotFound\nconst Reply = require('../../lib/reply')\nconst { Readable, Writable } = require('stream')\nconst {\n  kReplyErrorHandlerCalled,\n  kReplyHeaders,\n  kReplySerializer,\n  kReplyIsError,\n  kReplySerializerDefault,\n  kRouteContext\n} = require('../../lib/symbols')\nconst fs = require('fs')\nconst path = require('path')\nconst warning = require('../../lib/warnings')\n\nconst doGet = function (url) {\n  return new Promise((resolve, reject) => {\n    sget({ method: 'GET', url, followRedirects: false }, (err, response, body) => {\n      if (err) {\n        reject(err)\n      } else {\n        resolve({ response, body })\n      }\n    })\n  })\n}\n\ntest('Once called, Reply should return an object with methods', t => {\n  t.plan(14)\n  const response = { res: 'res' }\n  const context = {}\n  const request = { [kRouteContext]: context }\n  const reply = new Reply(response, request)\n  t.equal(typeof reply, 'object')\n  t.equal(typeof reply[kReplyIsError], 'boolean')\n  t.equal(typeof reply[kReplyErrorHandlerCalled], 'boolean')\n  t.equal(typeof reply.send, 'function')\n  t.equal(typeof reply.code, 'function')\n  t.equal(typeof reply.status, 'function')\n  t.equal(typeof reply.header, 'function')\n  t.equal(typeof reply.serialize, 'function')\n  t.equal(typeof reply.getResponseTime, 'function')\n  t.equal(typeof reply[kReplyHeaders], 'object')\n  t.same(reply.raw, response)\n  t.equal(reply[kRouteContext], context)\n  t.equal(reply.request, request)\n  // Aim to not bad property keys (including Symbols)\n  t.notOk('undefined' in reply)\n})\n\ntest('reply.send will logStream error and destroy the stream', t => {\n  t.plan(1)\n  let destroyCalled\n  const payload = new Readable({\n    read () {},\n    destroy (err, cb) {\n      destroyCalled = true\n      cb(err)\n    }\n  })\n\n  const response = new Writable()\n  Object.assign(response, {\n    setHeader: () => {},\n    hasHeader: () => false,\n    getHeader: () => undefined,\n    writeHead: () => {},\n    write: () => {},\n    headersSent: true\n  })\n\n  const log = {\n    warn: () => {}\n  }\n\n  const reply = new Reply(response, { [kRouteContext]: { onSend: null } }, log)\n  reply.send(payload)\n  payload.destroy(new Error('stream error'))\n\n  t.equal(destroyCalled, true, 'Error not logged and not streamed')\n})\n\ntest('reply.send throw with circular JSON', t => {\n  t.plan(1)\n  const response = {\n    setHeader: () => {},\n    hasHeader: () => false,\n    getHeader: () => undefined,\n    writeHead: () => {},\n    write: () => {},\n    end: () => {}\n  }\n  const reply = new Reply(response, { [kRouteContext]: { onSend: [] } })\n  t.throws(() => {\n    const obj = {}\n    obj.obj = obj\n    reply.send(JSON.stringify(obj))\n  }, 'Converting circular structure to JSON')\n})\n\ntest('reply.send returns itself', t => {\n  t.plan(1)\n  const response = {\n    setHeader: () => {},\n    hasHeader: () => false,\n    getHeader: () => undefined,\n    writeHead: () => {},\n    write: () => {},\n    end: () => {}\n  }\n  const reply = new Reply(response, { [kRouteContext]: { onSend: [] } })\n  t.equal(reply.send('hello'), reply)\n})\n\ntest('reply.serializer should set a custom serializer', t => {\n  t.plan(2)\n  const reply = new Reply(null, null, null)\n  t.equal(reply[kReplySerializer], null)\n  reply.serializer('serializer')\n  t.equal(reply[kReplySerializer], 'serializer')\n})\n\ntest('reply.serializer should support running preSerialization hooks', t => {\n  t.plan(3)\n  const fastify = require('../..')()\n\n  fastify.addHook('preSerialization', async (request, reply, payload) => { t.ok('called', 'preSerialization') })\n  fastify.route({\n    method: 'GET',\n    url: '/',\n    handler: (req, reply) => {\n      reply\n        .type('application/json')\n        .serializer(JSON.stringify)\n        .send({ foo: 'bar' })\n    }\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.payload, '{\"foo\":\"bar\"}')\n  })\n})\n\ntest('reply.serialize should serialize payload', t => {\n  t.plan(1)\n  const response = { statusCode: 200 }\n  const context = {}\n  const reply = new Reply(response, { [kRouteContext]: context })\n  t.equal(reply.serialize({ foo: 'bar' }), '{\"foo\":\"bar\"}')\n})\n\ntest('reply.serialize should serialize payload with a custom serializer', t => {\n  t.plan(2)\n  let customSerializerCalled = false\n  const response = { statusCode: 200 }\n  const context = {}\n  const reply = new Reply(response, { [kRouteContext]: context })\n  reply.serializer((x) => (customSerializerCalled = true) && JSON.stringify(x))\n  t.equal(reply.serialize({ foo: 'bar' }), '{\"foo\":\"bar\"}')\n  t.equal(customSerializerCalled, true, 'custom serializer not called')\n})\n\ntest('reply.serialize should serialize payload with a context default serializer', t => {\n  t.plan(2)\n  let customSerializerCalled = false\n  const response = { statusCode: 200 }\n  const context = { [kReplySerializerDefault]: (x) => (customSerializerCalled = true) && JSON.stringify(x) }\n  const reply = new Reply(response, { [kRouteContext]: context })\n  t.equal(reply.serialize({ foo: 'bar' }), '{\"foo\":\"bar\"}')\n  t.equal(customSerializerCalled, true, 'custom serializer not called')\n})\n\ntest('reply.serialize should serialize payload with Fastify instance', t => {\n  t.plan(2)\n  const fastify = require('../..')()\n  fastify.route({\n    method: 'GET',\n    url: '/',\n    schema: {\n      response: {\n        200: {\n          type: 'object',\n          properties: {\n            foo: { type: 'string' }\n          }\n        }\n      }\n    },\n    handler: (req, reply) => {\n      reply.send(\n        reply.serialize({ foo: 'bar' })\n      )\n    }\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.payload, '{\"foo\":\"bar\"}')\n  })\n})\n\ntest('within an instance', t => {\n  const fastify = require('../..')()\n  const test = t.test\n\n  fastify.get('/', function (req, reply) {\n    reply.code(200)\n    reply.header('Content-Type', 'text/plain')\n    reply.send('hello world!')\n  })\n\n  fastify.get('/auto-type', function (req, reply) {\n    reply.code(200)\n    reply.type('text/plain')\n    reply.send('hello world!')\n  })\n\n  fastify.get('/auto-status-code', function (req, reply) {\n    reply.send('hello world!')\n  })\n\n  fastify.get('/redirect', function (req, reply) {\n    reply.redirect('/')\n  })\n\n  fastify.get('/redirect-async', async function (req, reply) {\n    return reply.redirect('/')\n  })\n\n  fastify.get('/redirect-code', function (req, reply) {\n    reply.redirect(301, '/')\n  })\n\n  fastify.get('/redirect-code-before-call', function (req, reply) {\n    reply.code(307).redirect('/')\n  })\n\n  fastify.get('/redirect-code-before-call-overwrite', function (req, reply) {\n    reply.code(307).redirect(302, '/')\n  })\n\n  fastify.get('/custom-serializer', function (req, reply) {\n    reply.code(200)\n    reply.type('text/plain')\n    reply.serializer(function (body) {\n      return require('querystring').stringify(body)\n    })\n    reply.send({ hello: 'world!' })\n  })\n\n  fastify.register(function (instance, options, done) {\n    fastify.addHook('onSend', function (req, reply, payload, done) {\n      reply.header('x-onsend', 'yes')\n      done()\n    })\n    fastify.get('/redirect-onsend', function (req, reply) {\n      reply.redirect('/')\n    })\n    done()\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(fastify.close.bind(fastify))\n\n    test('custom serializer should be used', t => {\n      t.plan(3)\n      sget({\n        method: 'GET',\n        url: 'http://localhost:' + fastify.server.address().port + '/custom-serializer'\n      }, (err, response, body) => {\n        t.error(err)\n        t.equal(response.headers['content-type'], 'text/plain')\n        t.same(body.toString(), 'hello=world!')\n      })\n    })\n\n    test('status code and content-type should be correct', t => {\n      t.plan(4)\n      sget({\n        method: 'GET',\n        url: 'http://localhost:' + fastify.server.address().port\n      }, (err, response, body) => {\n        t.error(err)\n        t.equal(response.statusCode, 200)\n        t.equal(response.headers['content-type'], 'text/plain')\n        t.same(body.toString(), 'hello world!')\n      })\n    })\n\n    test('auto status code shoud be 200', t => {\n      t.plan(3)\n      sget({\n        method: 'GET',\n        url: 'http://localhost:' + fastify.server.address().port + '/auto-status-code'\n      }, (err, response, body) => {\n        t.error(err)\n        t.equal(response.statusCode, 200)\n        t.same(body.toString(), 'hello world!')\n      })\n    })\n\n    test('auto type shoud be text/plain', t => {\n      t.plan(3)\n      sget({\n        method: 'GET',\n        url: 'http://localhost:' + fastify.server.address().port + '/auto-type'\n      }, (err, response, body) => {\n        t.error(err)\n        t.equal(response.headers['content-type'], 'text/plain')\n        t.same(body.toString(), 'hello world!')\n      })\n    })\n\n    test('redirect to `/` - 1', t => {\n      t.plan(1)\n\n      http.get('http://localhost:' + fastify.server.address().port + '/redirect', function (response) {\n        t.equal(response.statusCode, 302)\n      })\n    })\n\n    test('redirect to `/` - 2', t => {\n      t.plan(1)\n\n      http.get('http://localhost:' + fastify.server.address().port + '/redirect-code', function (response) {\n        t.equal(response.statusCode, 301)\n      })\n    })\n\n    test('redirect to `/` - 3', t => {\n      t.plan(4)\n      sget({\n        method: 'GET',\n        url: 'http://localhost:' + fastify.server.address().port + '/redirect'\n      }, (err, response, body) => {\n        t.error(err)\n        t.equal(response.statusCode, 200)\n        t.equal(response.headers['content-type'], 'text/plain')\n        t.same(body.toString(), 'hello world!')\n      })\n    })\n\n    test('redirect to `/` - 4', t => {\n      t.plan(4)\n      sget({\n        method: 'GET',\n        url: 'http://localhost:' + fastify.server.address().port + '/redirect-code'\n      }, (err, response, body) => {\n        t.error(err)\n        t.equal(response.statusCode, 200)\n        t.equal(response.headers['content-type'], 'text/plain')\n        t.same(body.toString(), 'hello world!')\n      })\n    })\n\n    test('redirect to `/` - 5', t => {\n      t.plan(3)\n      const url = 'http://localhost:' + fastify.server.address().port + '/redirect-onsend'\n      http.get(url, (response) => {\n        t.equal(response.headers['x-onsend'], 'yes')\n        t.equal(response.headers['content-length'], '0')\n        t.equal(response.headers.location, '/')\n      })\n    })\n\n    test('redirect to `/` - 6', t => {\n      t.plan(4)\n      sget({\n        method: 'GET',\n        url: 'http://localhost:' + fastify.server.address().port + '/redirect-code-before-call'\n      }, (err, response, body) => {\n        t.error(err)\n        t.equal(response.statusCode, 200)\n        t.equal(response.headers['content-type'], 'text/plain')\n        t.same(body.toString(), 'hello world!')\n      })\n    })\n\n    test('redirect to `/` - 7', t => {\n      t.plan(4)\n      sget({\n        method: 'GET',\n        url: 'http://localhost:' + fastify.server.address().port + '/redirect-code-before-call-overwrite'\n      }, (err, response, body) => {\n        t.error(err)\n        t.equal(response.statusCode, 200)\n        t.equal(response.headers['content-type'], 'text/plain')\n        t.same(body.toString(), 'hello world!')\n      })\n    })\n\n    test('redirect to `/` - 8', t => {\n      t.plan(1)\n\n      http.get('http://localhost:' + fastify.server.address().port + '/redirect-code-before-call', function (response) {\n        t.equal(response.statusCode, 307)\n      })\n    })\n\n    test('redirect to `/` - 9', t => {\n      t.plan(1)\n\n      http.get('http://localhost:' + fastify.server.address().port + '/redirect-code-before-call-overwrite', function (response) {\n        t.equal(response.statusCode, 302)\n      })\n    })\n\n    test('redirect with async function to `/` - 10', t => {\n      t.plan(1)\n\n      http.get('http://localhost:' + fastify.server.address().port + '/redirect-async', function (response) {\n        t.equal(response.statusCode, 302)\n      })\n    })\n\n    t.end()\n  })\n})\n\ntest('buffer without content type should send a application/octet-stream and raw buffer', t => {\n  t.plan(4)\n\n  const fastify = require('../..')()\n\n  fastify.get('/', function (req, reply) {\n    reply.send(Buffer.alloc(1024))\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(fastify.close.bind(fastify))\n\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.headers['content-type'], 'application/octet-stream')\n      t.same(body, Buffer.alloc(1024))\n    })\n  })\n})\n\ntest('buffer with content type should not send application/octet-stream', t => {\n  t.plan(4)\n\n  const fastify = require('../..')()\n\n  fastify.get('/', function (req, reply) {\n    reply.header('Content-Type', 'text/plain')\n    reply.send(Buffer.alloc(1024))\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(fastify.close.bind(fastify))\n\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.headers['content-type'], 'text/plain')\n      t.same(body, Buffer.alloc(1024))\n    })\n  })\n})\n\ntest('stream with content type should not send application/octet-stream', t => {\n  t.plan(4)\n\n  const fastify = require('../..')()\n\n  const streamPath = path.join(__dirname, '..', '..', 'package.json')\n  const stream = fs.createReadStream(streamPath)\n  const buf = fs.readFileSync(streamPath)\n\n  fastify.get('/', function (req, reply) {\n    reply.header('Content-Type', 'text/plain').send(stream)\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(fastify.close.bind(fastify))\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.headers['content-type'], 'text/plain')\n      t.same(body, buf)\n    })\n  })\n})\n\ntest('stream without content type should not send application/octet-stream', t => {\n  t.plan(4)\n\n  const fastify = require('../..')()\n\n  const stream = fs.createReadStream(__filename)\n  const buf = fs.readFileSync(__filename)\n\n  fastify.get('/', function (req, reply) {\n    reply.send(stream)\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(fastify.close.bind(fastify))\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.headers['content-type'], undefined)\n      t.same(body, buf)\n    })\n  })\n})\n\ntest('stream using reply.raw.writeHead should return customize headers', t => {\n  t.plan(6)\n\n  const fastify = require('../..')()\n  const fs = require('fs')\n  const path = require('path')\n\n  const streamPath = path.join(__dirname, '..', '..', 'package.json')\n  const stream = fs.createReadStream(streamPath)\n  const buf = fs.readFileSync(streamPath)\n\n  fastify.get('/', function (req, reply) {\n    reply.log.warn = function mockWarn (message) {\n      t.equal(message, 'response will send, but you shouldn\\'t use res.writeHead in stream mode')\n    }\n    reply.raw.writeHead(200, {\n      location: '/'\n    })\n    reply.send(stream)\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(fastify.close.bind(fastify))\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.headers.location, '/')\n      t.equal(response.headers['Content-Type'], undefined)\n      t.same(body, buf)\n    })\n  })\n})\n\ntest('plain string without content type should send a text/plain', t => {\n  t.plan(4)\n\n  const fastify = require('../..')()\n\n  fastify.get('/', function (req, reply) {\n    reply.send('hello world!')\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(fastify.close.bind(fastify))\n\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.headers['content-type'], 'text/plain; charset=utf-8')\n      t.same(body.toString(), 'hello world!')\n    })\n  })\n})\n\ntest('plain string with content type should be sent unmodified', t => {\n  t.plan(4)\n\n  const fastify = require('../..')()\n\n  fastify.get('/', function (req, reply) {\n    reply.type('text/css').send('hello world!')\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(fastify.close.bind(fastify))\n\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.headers['content-type'], 'text/css')\n      t.same(body.toString(), 'hello world!')\n    })\n  })\n})\n\ntest('plain string with content type and custom serializer should be serialized', t => {\n  t.plan(4)\n\n  const fastify = require('../..')()\n\n  fastify.get('/', function (req, reply) {\n    reply\n      .serializer(() => 'serialized')\n      .type('text/css')\n      .send('hello world!')\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(fastify.close.bind(fastify))\n\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.headers['content-type'], 'text/css')\n      t.same(body.toString(), 'serialized')\n    })\n  })\n})\n\ntest('plain string with content type application/json should NOT be serialized as json', t => {\n  t.plan(4)\n\n  const fastify = require('../..')()\n\n  fastify.get('/', function (req, reply) {\n    reply.type('application/json').send('{\"key\": \"hello world!\"}')\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(fastify.close.bind(fastify))\n\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.headers['content-type'], 'application/json; charset=utf-8')\n      t.same(body.toString(), '{\"key\": \"hello world!\"}')\n    })\n  })\n})\n\ntest('plain string with custom json content type should NOT be serialized as json', t => {\n  t.plan(19)\n\n  const fastify = require('../..')()\n\n  const customSamples = {\n    collectionjson: {\n      mimeType: 'application/vnd.collection+json',\n      sample: '{\"collection\":{\"version\":\"1.0\",\"href\":\"http://api.example.com/people/\"}}'\n    },\n    hal: {\n      mimeType: 'application/hal+json',\n      sample: '{\"_links\":{\"self\":{\"href\":\"https://api.example.com/people/1\"}},\"name\":\"John Doe\"}'\n    },\n    jsonapi: {\n      mimeType: 'application/vnd.api+json',\n      sample: '{\"data\":{\"type\":\"people\",\"id\":\"1\"}}'\n    },\n    jsonld: {\n      mimeType: 'application/ld+json',\n      sample: '{\"@context\":\"https://json-ld.org/contexts/person.jsonld\",\"name\":\"John Doe\"}'\n    },\n    ndjson: {\n      mimeType: 'application/x-ndjson',\n      sample: '{\"a\":\"apple\",\"b\":{\"bb\":\"bubble\"}}\\n{\"c\":\"croissant\",\"bd\":{\"dd\":\"dribble\"}}'\n    },\n    siren: {\n      mimeType: 'application/vnd.siren+json',\n      sample: '{\"class\":\"person\",\"properties\":{\"name\":\"John Doe\"}}'\n    }\n  }\n\n  Object.keys(customSamples).forEach((path) => {\n    fastify.get(`/${path}`, function (req, reply) {\n      reply.type(customSamples[path].mimeType).send(customSamples[path].sample)\n    })\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(fastify.close.bind(fastify))\n\n    Object.keys(customSamples).forEach((path) => {\n      sget({\n        method: 'GET',\n        url: 'http://localhost:' + fastify.server.address().port + '/' + path\n      }, (err, response, body) => {\n        t.error(err)\n        t.equal(response.headers['content-type'], customSamples[path].mimeType + '; charset=utf-8')\n        t.same(body.toString(), customSamples[path].sample)\n      })\n    })\n  })\n})\n\ntest('non-string with content type application/json SHOULD be serialized as json', t => {\n  t.plan(4)\n\n  const fastify = require('../..')()\n\n  fastify.get('/', function (req, reply) {\n    reply.type('application/json').send({ key: 'hello world!' })\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(fastify.close.bind(fastify))\n\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.headers['content-type'], 'application/json; charset=utf-8')\n      t.same(body.toString(), JSON.stringify({ key: 'hello world!' }))\n    })\n  })\n})\n\ntest('non-string with custom json\\'s content-type SHOULD be serialized as json', t => {\n  t.plan(4)\n\n  const fastify = require('../..')()\n\n  fastify.get('/', function (req, reply) {\n    reply.type('application/json; version=2; ').send({ key: 'hello world!' })\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(fastify.close.bind(fastify))\n\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.headers['content-type'], 'application/json; version=2; charset=utf-8')\n      t.same(body.toString(), JSON.stringify({ key: 'hello world!' }))\n    })\n  })\n})\n\ntest('non-string with custom json content type SHOULD be serialized as json', t => {\n  t.plan(16)\n\n  const fastify = require('../..')()\n\n  const customSamples = {\n    collectionjson: {\n      mimeType: 'application/vnd.collection+json',\n      sample: JSON.parse('{\"collection\":{\"version\":\"1.0\",\"href\":\"http://api.example.com/people/\"}}')\n    },\n    hal: {\n      mimeType: 'application/hal+json',\n      sample: JSON.parse('{\"_links\":{\"self\":{\"href\":\"https://api.example.com/people/1\"}},\"name\":\"John Doe\"}')\n    },\n    jsonapi: {\n      mimeType: 'application/vnd.api+json',\n      sample: JSON.parse('{\"data\":{\"type\":\"people\",\"id\":\"1\"}}')\n    },\n    jsonld: {\n      mimeType: 'application/ld+json',\n      sample: JSON.parse('{\"@context\":\"https://json-ld.org/contexts/person.jsonld\",\"name\":\"John Doe\"}')\n    },\n    siren: {\n      mimeType: 'application/vnd.siren+json',\n      sample: JSON.parse('{\"class\":\"person\",\"properties\":{\"name\":\"John Doe\"}}')\n    }\n  }\n\n  Object.keys(customSamples).forEach((path) => {\n    fastify.get(`/${path}`, function (req, reply) {\n      reply.type(customSamples[path].mimeType).send(customSamples[path].sample)\n    })\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(fastify.close.bind(fastify))\n\n    Object.keys(customSamples).forEach((path) => {\n      sget({\n        method: 'GET',\n        url: 'http://localhost:' + fastify.server.address().port + '/' + path\n      }, (err, response, body) => {\n        t.error(err)\n        t.equal(response.headers['content-type'], customSamples[path].mimeType + '; charset=utf-8')\n        t.same(body.toString(), JSON.stringify(customSamples[path].sample))\n      })\n    })\n  })\n})\n\ntest('error object with a content type that is not application/json should work', t => {\n  t.plan(6)\n\n  const fastify = require('../..')()\n\n  fastify.get('/text', function (req, reply) {\n    reply.type('text/plain')\n    reply.send(new Error('some application error'))\n  })\n\n  fastify.get('/html', function (req, reply) {\n    reply.type('text/html')\n    reply.send(new Error('some application error'))\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/text'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 500)\n    t.equal(JSON.parse(res.payload).message, 'some application error')\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/html'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 500)\n    t.equal(JSON.parse(res.payload).message, 'some application error')\n  })\n})\n\ntest('undefined payload should be sent as-is', t => {\n  t.plan(6)\n\n  const fastify = require('../..')()\n\n  fastify.addHook('onSend', function (request, reply, payload, done) {\n    t.equal(payload, undefined)\n    done()\n  })\n\n  fastify.get('/', function (req, reply) {\n    reply.code(204).send()\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(fastify.close.bind(fastify))\n\n    sget({\n      method: 'GET',\n      url: `http://localhost:${fastify.server.address().port}`\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.headers['content-type'], undefined)\n      t.equal(response.headers['content-length'], undefined)\n      t.equal(body.length, 0)\n    })\n  })\n})\n\ntest('for HEAD method, no body should be sent but content-length should be', t => {\n  t.plan(11)\n\n  const fastify = require('../..')()\n  const contentType = 'application/json; charset=utf-8'\n  const bodySize = JSON.stringify({ foo: 'bar' }).length\n\n  fastify.head('/', {\n    onSend: function (request, reply, payload, done) {\n      t.equal(payload, undefined)\n      done()\n    }\n  }, function (req, reply) {\n    reply.header('content-length', bodySize)\n    reply.header('content-type', contentType)\n    reply.code(200).send()\n  })\n\n  fastify.head('/with/null', {\n    onSend: function (request, reply, payload, done) {\n      t.equal(payload, 'null')\n      done()\n    }\n  }, function (req, reply) {\n    reply.header('content-length', bodySize)\n    reply.header('content-type', contentType)\n    reply.code(200).send(null)\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(fastify.close.bind(fastify))\n\n    sget({\n      method: 'HEAD',\n      url: `http://localhost:${fastify.server.address().port}`\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.headers['content-type'], contentType)\n      t.equal(response.headers['content-length'], bodySize.toString())\n      t.equal(body.length, 0)\n    })\n\n    sget({\n      method: 'HEAD',\n      url: `http://localhost:${fastify.server.address().port}/with/null`\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.headers['content-type'], contentType)\n      t.equal(response.headers['content-length'], bodySize.toString())\n      t.equal(body.length, 0)\n    })\n  })\n})\n\ntest('reply.send(new NotFound()) should not invoke the 404 handler', t => {\n  t.plan(9)\n\n  const fastify = require('../..')()\n\n  fastify.setNotFoundHandler((req, reply) => {\n    t.fail('Should not be called')\n  })\n\n  fastify.get('/not-found', function (req, reply) {\n    reply.send(new NotFound())\n  })\n\n  fastify.register(function (instance, options, done) {\n    instance.get('/not-found', function (req, reply) {\n      reply.send(new NotFound())\n    })\n\n    done()\n  }, { prefix: '/prefixed' })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n\n    t.teardown(fastify.close.bind(fastify))\n\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port + '/not-found'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 404)\n      t.equal(response.headers['content-type'], 'application/json; charset=utf-8')\n      t.same(JSON.parse(body.toString()), {\n        statusCode: 404,\n        error: 'Not Found',\n        message: 'Not Found'\n      })\n    })\n\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port + '/prefixed/not-found'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 404)\n      t.equal(response.headers['content-type'], 'application/json; charset=utf-8')\n      t.same(JSON.parse(body), {\n        error: 'Not Found',\n        message: 'Not Found',\n        statusCode: 404\n      })\n    })\n  })\n})\n\ntest('reply can set multiple instances of same header', t => {\n  t.plan(4)\n\n  const fastify = require('../../')()\n\n  fastify.get('/headers', function (req, reply) {\n    reply\n      .header('set-cookie', 'one')\n      .header('set-cookie', 'two')\n      .send({})\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(fastify.close.bind(fastify))\n\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port + '/headers'\n    }, (err, response, body) => {\n      t.error(err)\n      t.ok(response.headers['set-cookie'])\n      t.strictSame(response.headers['set-cookie'], ['one', 'two'])\n    })\n  })\n})\n\ntest('reply.hasHeader returns correct values', t => {\n  t.plan(3)\n\n  const fastify = require('../../')()\n\n  fastify.get('/headers', function (req, reply) {\n    reply.header('x-foo', 'foo')\n    t.equal(reply.hasHeader('x-foo'), true)\n    t.equal(reply.hasHeader('x-bar'), false)\n    reply.send()\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(fastify.close.bind(fastify))\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port + '/headers'\n    }, () => {})\n  })\n})\n\ntest('reply.getHeader returns correct values', t => {\n  t.plan(5)\n\n  const fastify = require('../../')()\n\n  fastify.get('/headers', function (req, reply) {\n    reply.header('x-foo', 'foo')\n    t.equal(reply.getHeader('x-foo'), 'foo')\n\n    reply.header('x-foo', 'bar')\n    t.strictSame(reply.getHeader('x-foo'), 'bar')\n\n    reply.header('x-foo', 42)\n    t.strictSame(reply.getHeader('x-foo'), 42)\n\n    reply.header('set-cookie', 'one')\n    reply.header('set-cookie', 'two')\n    t.strictSame(reply.getHeader('set-cookie'), ['one', 'two'])\n\n    reply.send()\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(fastify.close.bind(fastify))\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port + '/headers'\n    }, () => {})\n  })\n})\n\ntest('reply.getHeader returns raw header if there is not in the reply headers', t => {\n  t.plan(1)\n  const response = {\n    setHeader: () => {},\n    hasHeader: () => true,\n    getHeader: () => 'bar',\n    writeHead: () => {},\n    end: () => {}\n  }\n  const reply = new Reply(response, { onSend: [] }, null)\n  t.equal(reply.getHeader('foo'), 'bar')\n})\n\ntest('reply.getHeaders returns correct values', t => {\n  t.plan(3)\n\n  const fastify = require('../../')()\n\n  fastify.get('/headers', function (req, reply) {\n    reply.header('x-foo', 'foo')\n\n    t.strictSame(reply.getHeaders(), {\n      'x-foo': 'foo'\n    })\n\n    reply.header('x-bar', 'bar')\n    reply.raw.setHeader('x-foo', 'foo2')\n    reply.raw.setHeader('x-baz', 'baz')\n\n    t.strictSame(reply.getHeaders(), {\n      'x-foo': 'foo',\n      'x-bar': 'bar',\n      'x-baz': 'baz'\n    })\n\n    reply.send()\n  })\n\n  fastify.inject('/headers', (err) => {\n    t.error(err)\n  })\n})\n\ntest('reply.removeHeader can remove the value', t => {\n  t.plan(5)\n\n  const fastify = require('../../')()\n\n  t.teardown(fastify.close.bind(fastify))\n\n  fastify.get('/headers', function (req, reply) {\n    reply.header('x-foo', 'foo')\n    t.equal(reply.getHeader('x-foo'), 'foo')\n\n    t.equal(reply.removeHeader('x-foo'), reply)\n    t.strictSame(reply.getHeader('x-foo'), undefined)\n\n    reply.send()\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(fastify.close.bind(fastify))\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port + '/headers'\n    }, () => {\n      t.pass()\n    })\n  })\n})\n\ntest('reply.header can reset the value', t => {\n  t.plan(3)\n\n  const fastify = require('../../')()\n\n  t.teardown(fastify.close.bind(fastify))\n\n  fastify.get('/headers', function (req, reply) {\n    reply.header('x-foo', 'foo')\n    reply.header('x-foo', undefined)\n    t.strictSame(reply.getHeader('x-foo'), '')\n\n    reply.send()\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(fastify.close.bind(fastify))\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port + '/headers'\n    }, () => {\n      t.pass()\n    })\n  })\n})\n\n// https://github.com/fastify/fastify/issues/3030\ntest('reply.hasHeader computes raw and fastify headers', t => {\n  t.plan(4)\n\n  const fastify = require('../../')()\n\n  t.teardown(fastify.close.bind(fastify))\n\n  fastify.get('/headers', function (req, reply) {\n    reply.header('x-foo', 'foo')\n    reply.raw.setHeader('x-bar', 'bar')\n    t.ok(reply.hasHeader('x-foo'))\n    t.ok(reply.hasHeader('x-bar'))\n\n    reply.send()\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(fastify.close.bind(fastify))\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port + '/headers'\n    }, () => {\n      t.pass()\n    })\n  })\n})\n\ntest('Reply should handle JSON content type with a charset', t => {\n  t.plan(16)\n\n  const fastify = require('../../')()\n\n  fastify.get('/default', function (req, reply) {\n    reply.send({ hello: 'world' })\n  })\n\n  fastify.get('/utf8', function (req, reply) {\n    reply\n      .header('content-type', 'application/json; charset=utf-8')\n      .send({ hello: 'world' })\n  })\n\n  fastify.get('/utf16', function (req, reply) {\n    reply\n      .header('content-type', 'application/json; charset=utf-16')\n      .send({ hello: 'world' })\n  })\n\n  fastify.get('/utf32', function (req, reply) {\n    reply\n      .header('content-type', 'application/json; charset=utf-32')\n      .send({ hello: 'world' })\n  })\n\n  fastify.get('/type-utf8', function (req, reply) {\n    reply\n      .type('application/json; charset=utf-8')\n      .send({ hello: 'world' })\n  })\n\n  fastify.get('/type-utf16', function (req, reply) {\n    reply\n      .type('application/json; charset=utf-16')\n      .send({ hello: 'world' })\n  })\n\n  fastify.get('/type-utf32', function (req, reply) {\n    reply\n      .type('application/json; charset=utf-32')\n      .send({ hello: 'world' })\n  })\n\n  fastify.get('/no-space-type-utf32', function (req, reply) {\n    reply\n      .type('application/json;charset=utf-32')\n      .send({ hello: 'world' })\n  })\n\n  fastify.inject('/default', (err, res) => {\n    t.error(err)\n    t.equal(res.headers['content-type'], 'application/json; charset=utf-8')\n  })\n\n  fastify.inject('/utf8', (err, res) => {\n    t.error(err)\n    t.equal(res.headers['content-type'], 'application/json; charset=utf-8')\n  })\n\n  fastify.inject('/utf16', (err, res) => {\n    t.error(err)\n    t.equal(res.headers['content-type'], 'application/json; charset=utf-16')\n  })\n\n  fastify.inject('/utf32', (err, res) => {\n    t.error(err)\n    t.equal(res.headers['content-type'], 'application/json; charset=utf-32')\n  })\n\n  fastify.inject('/type-utf8', (err, res) => {\n    t.error(err)\n    t.equal(res.headers['content-type'], 'application/json; charset=utf-8')\n  })\n\n  fastify.inject('/type-utf16', (err, res) => {\n    t.error(err)\n    t.equal(res.headers['content-type'], 'application/json; charset=utf-16')\n  })\n\n  fastify.inject('/type-utf32', (err, res) => {\n    t.error(err)\n    t.equal(res.headers['content-type'], 'application/json; charset=utf-32')\n  })\n\n  fastify.inject('/no-space-type-utf32', (err, res) => {\n    t.error(err)\n    t.equal(res.headers['content-type'], 'application/json;charset=utf-32')\n  })\n})\n\ntest('Content type and charset set previously', t => {\n  t.plan(2)\n\n  const fastify = require('../../')()\n\n  fastify.addHook('onRequest', function (req, reply, done) {\n    reply.header('content-type', 'application/json; charset=utf-16')\n    done()\n  })\n\n  fastify.get('/', function (req, reply) {\n    reply.send({ hello: 'world' })\n  })\n\n  fastify.inject('/', (err, res) => {\n    t.error(err)\n    t.equal(res.headers['content-type'], 'application/json; charset=utf-16')\n  })\n})\n\ntest('.status() is an alias for .code()', t => {\n  t.plan(2)\n  const fastify = require('../..')()\n\n  fastify.get('/', function (req, reply) {\n    reply.status(418).send()\n  })\n\n  fastify.inject('/', (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 418)\n  })\n})\n\ntest('.statusCode is getter and setter', t => {\n  t.plan(4)\n  const fastify = require('../..')()\n\n  fastify.get('/', function (req, reply) {\n    t.ok(reply.statusCode, 200, 'default status value')\n    reply.statusCode = 418\n    t.ok(reply.statusCode, 418)\n    reply.send()\n  })\n\n  fastify.inject('/', (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 418)\n  })\n})\n\ntest('reply.header setting multiple cookies as multiple Set-Cookie headers', t => {\n  t.plan(7)\n\n  const fastify = require('../../')()\n\n  fastify.get('/headers', function (req, reply) {\n    reply\n      .header('set-cookie', 'one')\n      .header('set-cookie', 'two')\n      .header('set-cookie', 'three')\n      .header('set-cookie', ['four', 'five', 'six'])\n      .send({})\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(fastify.close.bind(fastify))\n\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port + '/headers'\n    }, (err, response, body) => {\n      t.error(err)\n      t.ok(response.headers['set-cookie'])\n      t.strictSame(response.headers['set-cookie'], ['one', 'two', 'three', 'four', 'five', 'six'])\n    })\n  })\n\n  fastify.inject('/headers', (error, response) => {\n    t.error(error)\n    t.ok(response.headers['set-cookie'])\n    t.strictSame(response.headers['set-cookie'], ['one', 'two', 'three', 'four', 'five', 'six'])\n  })\n})\n\ntest('should emit deprecation warning when trying to modify the reply.sent property', t => {\n  t.plan(4)\n  const fastify = require('../..')()\n\n  const deprecationCode = 'FSTDEP010'\n  warning.emitted.delete(deprecationCode)\n\n  process.removeAllListeners('warning')\n  process.on('warning', onWarning)\n  function onWarning (warning) {\n    t.equal(warning.name, 'FastifyDeprecation')\n    t.equal(warning.code, deprecationCode)\n  }\n\n  fastify.get('/', (req, reply) => {\n    reply.sent = true\n\n    reply.raw.end()\n  })\n\n  fastify.inject('/', (err, res) => {\n    t.error(err)\n    t.pass()\n\n    process.removeListener('warning', onWarning)\n  })\n})\n\ntest('should throw error when passing falsy value to reply.sent', t => {\n  t.plan(4)\n  const fastify = require('../..')()\n\n  fastify.get('/', function (req, reply) {\n    try {\n      reply.sent = false\n    } catch (err) {\n      t.equal(err.code, 'FST_ERR_REP_SENT_VALUE')\n      t.equal(err.message, 'The only possible value for reply.sent is true.')\n      reply.send()\n    }\n  })\n\n  fastify.inject('/', (err, res) => {\n    t.error(err)\n    t.pass()\n  })\n})\n\ntest('should throw error when attempting to set reply.sent more than once', t => {\n  t.plan(4)\n  const fastify = require('../..')()\n\n  fastify.get('/', function (req, reply) {\n    reply.sent = true\n    try {\n      reply.sent = true\n      t.fail('must throw')\n    } catch (err) {\n      t.equal(err.code, 'FST_ERR_REP_ALREADY_SENT')\n      t.equal(err.message, 'Reply was already sent.')\n    }\n    reply.raw.end()\n  })\n\n  fastify.inject('/', (err, res) => {\n    t.error(err)\n    t.pass()\n  })\n})\n\ntest('should not throw error when attempting to set reply.sent if the underlining request was sent', t => {\n  t.plan(3)\n  const fastify = require('../..')()\n\n  fastify.get('/', function (req, reply) {\n    reply.raw.end()\n    t.doesNotThrow(() => {\n      reply.sent = true\n    })\n  })\n\n  fastify.inject('/', (err, res) => {\n    t.error(err)\n    t.pass()\n  })\n})\n\ntest('reply.getResponseTime() should return 0 before the timer is initialised on the reply by setting up response listeners', t => {\n  t.plan(1)\n  const response = { statusCode: 200 }\n  const reply = new Reply(response, null)\n  t.equal(reply.getResponseTime(), 0)\n})\n\ntest('reply.getResponseTime() should return a number greater than 0 after the timer is initialised on the reply by setting up response listeners', t => {\n  t.plan(1)\n  const fastify = require('../..')()\n  fastify.route({\n    method: 'GET',\n    url: '/',\n    handler: (req, reply) => {\n      reply.send('hello world')\n    }\n  })\n\n  fastify.addHook('onResponse', (req, reply) => {\n    t.ok(reply.getResponseTime() > 0)\n    t.end()\n  })\n\n  fastify.inject({ method: 'GET', url: '/' })\n})\n\ntest('reply.getResponseTime() should return the time since a request started while inflight', t => {\n  t.plan(1)\n  const fastify = require('../..')()\n  fastify.route({\n    method: 'GET',\n    url: '/',\n    handler: (req, reply) => {\n      reply.send('hello world')\n    }\n  })\n\n  fastify.addHook('preValidation', (req, reply, done) => {\n    t.not(reply.getResponseTime(), reply.getResponseTime())\n    done()\n  })\n\n  fastify.addHook('onResponse', (req, reply) => {\n    t.end()\n  })\n\n  fastify.inject({ method: 'GET', url: '/' })\n})\n\ntest('reply.getResponseTime() should return the same value after a request is finished', t => {\n  t.plan(1)\n  const fastify = require('../..')()\n  fastify.route({\n    method: 'GET',\n    url: '/',\n    handler: (req, reply) => {\n      reply.send('hello world')\n    }\n  })\n\n  fastify.addHook('onResponse', (req, reply) => {\n    t.equal(reply.getResponseTime(), reply.getResponseTime())\n    t.end()\n  })\n\n  fastify.inject({ method: 'GET', url: '/' })\n})\n\ntest('reply should use the custom serializer', t => {\n  t.plan(4)\n  const fastify = require('../..')()\n  fastify.setReplySerializer((payload, statusCode) => {\n    t.same(payload, { foo: 'bar' })\n    t.equal(statusCode, 200)\n    payload.foo = 'bar bar'\n    return JSON.stringify(payload)\n  })\n\n  fastify.route({\n    method: 'GET',\n    url: '/',\n    handler: (req, reply) => {\n      reply.send({ foo: 'bar' })\n    }\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.payload, '{\"foo\":\"bar bar\"}')\n  })\n})\n\ntest('reply should use the right serializer in encapsulated context', t => {\n  t.plan(9)\n\n  const fastify = require('../..')()\n  fastify.setReplySerializer((payload) => {\n    t.same(payload, { foo: 'bar' })\n    payload.foo = 'bar bar'\n    return JSON.stringify(payload)\n  })\n\n  fastify.route({\n    method: 'GET',\n    url: '/',\n    handler: (req, reply) => { reply.send({ foo: 'bar' }) }\n  })\n\n  fastify.register(function (instance, opts, done) {\n    instance.route({\n      method: 'GET',\n      url: '/sub',\n      handler: (req, reply) => { reply.send({ john: 'doo' }) }\n    })\n    instance.setReplySerializer((payload) => {\n      t.same(payload, { john: 'doo' })\n      payload.john = 'too too'\n      return JSON.stringify(payload)\n    })\n    done()\n  })\n\n  fastify.register(function (instance, opts, done) {\n    instance.route({\n      method: 'GET',\n      url: '/sub',\n      handler: (req, reply) => { reply.send({ sweet: 'potato' }) }\n    })\n    instance.setReplySerializer((payload) => {\n      t.same(payload, { sweet: 'potato' })\n      payload.sweet = 'potato potato'\n      return JSON.stringify(payload)\n    })\n    done()\n  }, { prefix: 'sub' })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.payload, '{\"foo\":\"bar bar\"}')\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/sub'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.payload, '{\"john\":\"too too\"}')\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/sub/sub'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.payload, '{\"sweet\":\"potato potato\"}')\n  })\n})\n\ntest('reply should use the right serializer in deep encapsulated context', t => {\n  t.plan(8)\n\n  const fastify = require('../..')()\n\n  fastify.route({\n    method: 'GET',\n    url: '/',\n    handler: (req, reply) => { reply.send({ foo: 'bar' }) }\n  })\n\n  fastify.register(function (instance, opts, done) {\n    instance.route({\n      method: 'GET',\n      url: '/sub',\n      handler: (req, reply) => { reply.send({ john: 'doo' }) }\n    })\n    instance.setReplySerializer((payload) => {\n      t.same(payload, { john: 'doo' })\n      payload.john = 'too too'\n      return JSON.stringify(payload)\n    })\n\n    instance.register(function (subInstance, opts, done) {\n      subInstance.route({\n        method: 'GET',\n        url: '/deep',\n        handler: (req, reply) => { reply.send({ john: 'deep' }) }\n      })\n      subInstance.setReplySerializer((payload) => {\n        t.same(payload, { john: 'deep' })\n        payload.john = 'deep deep'\n        return JSON.stringify(payload)\n      })\n      done()\n    })\n    done()\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.payload, '{\"foo\":\"bar\"}')\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/sub'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.payload, '{\"john\":\"too too\"}')\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/deep'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.payload, '{\"john\":\"deep deep\"}')\n  })\n})\n\ntest('reply should use the route serializer', t => {\n  t.plan(3)\n\n  const fastify = require('../..')()\n  fastify.setReplySerializer(() => {\n    t.fail('this serializer should not be executed')\n  })\n\n  fastify.route({\n    method: 'GET',\n    url: '/',\n    handler: (req, reply) => {\n      reply\n        .serializer((payload) => {\n          t.same(payload, { john: 'doo' })\n          payload.john = 'too too'\n          return JSON.stringify(payload)\n        })\n        .send({ john: 'doo' })\n    }\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.payload, '{\"john\":\"too too\"}')\n  })\n})\n\ntest('cannot set the replySerializer when the server is running', t => {\n  t.plan(2)\n\n  const fastify = require('../..')()\n  t.teardown(fastify.close.bind(fastify))\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    try {\n      fastify.setReplySerializer(() => {})\n      t.fail('this serializer should not be setup')\n    } catch (e) {\n      t.equal(e.code, 'FST_ERR_INSTANCE_ALREADY_LISTENING')\n    }\n  })\n})\n\ntest('reply should not call the custom serializer for errors and not found', t => {\n  t.plan(9)\n\n  const fastify = require('../..')()\n  fastify.setReplySerializer((payload, statusCode) => {\n    t.same(payload, { foo: 'bar' })\n    t.equal(statusCode, 200)\n    return JSON.stringify(payload)\n  })\n\n  fastify.get('/', (req, reply) => { reply.send({ foo: 'bar' }) })\n  fastify.get('/err', (req, reply) => { reply.send(new Error('an error')) })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 200)\n    t.equal(res.payload, '{\"foo\":\"bar\"}')\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/err'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 500)\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/not-existing'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 404)\n  })\n})\n\ntest('reply.then', t => {\n  t.plan(4)\n\n  function request () {}\n\n  t.test('without an error', t => {\n    t.plan(1)\n\n    const response = new Writable()\n    const reply = new Reply(response, request)\n\n    reply.then(function () {\n      t.pass('fulfilled called')\n    })\n\n    response.destroy()\n  })\n\n  t.test('with an error', t => {\n    t.plan(1)\n\n    const response = new Writable()\n    const reply = new Reply(response, request)\n    const _err = new Error('kaboom')\n\n    reply.then(function () {\n      t.fail('fulfilled called')\n    }, function (err) {\n      t.equal(err, _err)\n    })\n\n    response.destroy(_err)\n  })\n\n  t.test('with error but without reject callback', t => {\n    t.plan(1)\n\n    const response = new Writable()\n    const reply = new Reply(response, request)\n    const _err = new Error('kaboom')\n\n    reply.then(function () {\n      t.fail('fulfilled called')\n    })\n\n    t.pass()\n\n    response.destroy(_err)\n  })\n\n  t.test('with error, without reject callback, with logger', t => {\n    t.plan(1)\n\n    const response = new Writable()\n    const reply = new Reply(response, request)\n    // spy logger\n    reply.log = {\n      warn: (message) => {\n        t.equal(message, 'unhandled rejection on reply.then')\n      }\n    }\n    const _err = new Error('kaboom')\n\n    reply.then(function () {\n      t.fail('fulfilled called')\n    })\n\n    response.destroy(_err)\n  })\n})\n\ntest('reply.sent should read from response.writableEnded if it is defined', t => {\n  t.plan(1)\n\n  const reply = new Reply({ writableEnded: true }, {}, {})\n\n  t.equal(reply.sent, true)\n})\n\ntest('redirect to an invalid URL should not crash the server', async t => {\n  const fastify = require('../..')()\n  fastify.route({\n    method: 'GET',\n    url: '/redirect',\n    handler: (req, reply) => {\n      reply.log.warn = function mockWarn (obj, message) {\n        t.equal(message, 'Invalid character in header content [\"location\"]')\n      }\n\n      switch (req.query.useCase) {\n        case '1':\n          reply.redirect('/?key=a’b')\n          break\n\n        case '2':\n          reply.redirect(encodeURI('/?key=a’b'))\n          break\n\n        default:\n          reply.redirect('/?key=ab')\n          break\n      }\n    }\n  })\n\n  await fastify.listen({ port: 0 })\n\n  {\n    const { response, body } = await doGet(`http://localhost:${fastify.server.address().port}/redirect?useCase=1`)\n    t.equal(response.statusCode, 500)\n    t.same(JSON.parse(body), {\n      statusCode: 500,\n      code: 'ERR_INVALID_CHAR',\n      error: 'Internal Server Error',\n      message: 'Invalid character in header content [\"location\"]'\n    })\n  }\n  {\n    const { response } = await doGet(`http://localhost:${fastify.server.address().port}/redirect?useCase=2`)\n    t.equal(response.statusCode, 302)\n    t.equal(response.headers.location, '/?key=a%E2%80%99b')\n  }\n\n  {\n    const { response } = await doGet(`http://localhost:${fastify.server.address().port}/redirect?useCase=3`)\n    t.equal(response.statusCode, 302)\n    t.equal(response.headers.location, '/?key=ab')\n  }\n\n  await fastify.close()\n})\n\ntest('invalid response headers should not crash the server', async t => {\n  const fastify = require('../..')()\n  fastify.route({\n    method: 'GET',\n    url: '/bad-headers',\n    handler: (req, reply) => {\n      reply.log.warn = function mockWarn (obj, message) {\n        t.equal(message, 'Invalid character in header content [\"smile-encoded\"]', 'only the first invalid header is logged')\n      }\n\n      reply.header('foo', '$')\n      reply.header('smile-encoded', '\\uD83D\\uDE00')\n      reply.header('smile', '😄')\n      reply.header('bar', 'ƒ∂å')\n\n      reply.send({})\n    }\n  })\n\n  await fastify.listen({ port: 0 })\n\n  const { response, body } = await doGet(`http://localhost:${fastify.server.address().port}/bad-headers`)\n  t.equal(response.statusCode, 500)\n  t.same(JSON.parse(body), {\n    statusCode: 500,\n    code: 'ERR_INVALID_CHAR',\n    error: 'Internal Server Error',\n    message: 'Invalid character in header content [\"smile-encoded\"]'\n  })\n\n  await fastify.close()\n})\n\ntest('invalid response headers when sending back an error', async t => {\n  const fastify = require('../..')()\n  fastify.route({\n    method: 'GET',\n    url: '/bad-headers',\n    handler: (req, reply) => {\n      reply.log.warn = function mockWarn (obj, message) {\n        t.equal(message, 'Invalid character in header content [\"smile\"]', 'only the first invalid header is logged')\n      }\n\n      reply.header('smile', '😄')\n      reply.send(new Error('user land error'))\n    }\n  })\n\n  await fastify.listen({ port: 0 })\n\n  const { response, body } = await doGet(`http://localhost:${fastify.server.address().port}/bad-headers`)\n  t.equal(response.statusCode, 500)\n  t.same(JSON.parse(body), {\n    statusCode: 500,\n    code: 'ERR_INVALID_CHAR',\n    error: 'Internal Server Error',\n    message: 'Invalid character in header content [\"smile\"]'\n  })\n\n  await fastify.close()\n})\n\ntest('invalid response headers and custom error handler', async t => {\n  const fastify = require('../..')()\n  fastify.route({\n    method: 'GET',\n    url: '/bad-headers',\n    handler: (req, reply) => {\n      reply.log.warn = function mockWarn (obj, message) {\n        t.equal(message, 'Invalid character in header content [\"smile\"]', 'only the first invalid header is logged')\n      }\n\n      reply.header('smile', '😄')\n      reply.send(new Error('user land error'))\n    }\n  })\n\n  fastify.setErrorHandler(function (error, request, reply) {\n    t.equal(error.message, 'user land error', 'custom error handler receives the error')\n    reply.status(500).send({ ops: true })\n  })\n\n  await fastify.listen({ port: 0 })\n\n  const { response, body } = await doGet(`http://localhost:${fastify.server.address().port}/bad-headers`)\n  t.equal(response.statusCode, 500)\n  t.same(JSON.parse(body), {\n    statusCode: 500,\n    code: 'ERR_INVALID_CHAR',\n    error: 'Internal Server Error',\n    message: 'Invalid character in header content [\"smile\"]'\n  })\n\n  await fastify.close()\n})\n/lib/decorate.js\r'use strict'\n\n/* eslint no-prototype-builtins: 0 */\n\nconst {\n  kReply,\n  kRequest,\n  kState,\n  kHasBeenDecorated\n} = require('./symbols.js')\n\nconst {\n  FST_ERR_DEC_ALREADY_PRESENT,\n  FST_ERR_DEC_MISSING_DEPENDENCY,\n  FST_ERR_DEC_AFTER_START,\n  FST_ERR_DEC_DEPENDENCY_INVALID_TYPE\n} = require('./errors')\n\nconst warning = require('./warnings')\n\nfunction decorate (instance, name, fn, dependencies) {\n  if (Object.prototype.hasOwnProperty.call(instance, name)) {\n    throw new FST_ERR_DEC_ALREADY_PRESENT(name)\n  }\n\n  checkDependencies(instance, name, dependencies)\n\n  if (fn && (typeof fn.getter === 'function' || typeof fn.setter === 'function')) {\n    Object.defineProperty(instance, name, {\n      get: fn.getter,\n      set: fn.setter\n    })\n  } else {\n    instance[name] = fn\n  }\n}\n\nfunction decorateConstructor (konstructor, name, fn, dependencies) {\n  const instance = konstructor.prototype\n  if (Object.prototype.hasOwnProperty.call(instance, name) || hasKey(konstructor, name)) {\n    throw new FST_ERR_DEC_ALREADY_PRESENT(name)\n  }\n\n  konstructor[kHasBeenDecorated] = true\n  checkDependencies(konstructor, name, dependencies)\n\n  if (fn && (typeof fn.getter === 'function' || typeof fn.setter === 'function')) {\n    Object.defineProperty(instance, name, {\n      get: fn.getter,\n      set: fn.setter\n    })\n  } else if (typeof fn === 'function') {\n    instance[name] = fn\n  } else {\n    konstructor.props.push({ key: name, value: fn })\n  }\n}\n\nfunction checkReferenceType (name, fn) {\n  if (typeof fn === 'object' && fn && !(typeof fn.getter === 'function' || typeof fn.setter === 'function')) {\n    warning.emit('FSTDEP006', name)\n  }\n}\n\nfunction decorateFastify (name, fn, dependencies) {\n  assertNotStarted(this, name)\n  decorate(this, name, fn, dependencies)\n  return this\n}\n\nfunction checkExistence (instance, name) {\n  if (name) {\n    return name in instance || (instance.prototype && name in instance.prototype) || hasKey(instance, name)\n  }\n\n  return instance in this\n}\n\nfunction hasKey (fn, name) {\n  if (fn.props) {\n    return fn.props.find(({ key }) => key === name)\n  }\n  return false\n}\n\nfunction checkRequestExistence (name) {\n  if (name && hasKey(this[kRequest], name)) return true\n  return checkExistence(this[kRequest].prototype, name)\n}\n\nfunction checkReplyExistence (name) {\n  if (name && hasKey(this[kReply], name)) return true\n  return checkExistence(this[kReply].prototype, name)\n}\n\nfunction checkDependencies (instance, name, deps) {\n  if (deps === undefined || deps === null) {\n    return\n  }\n\n  if (!Array.isArray(deps)) {\n    throw new FST_ERR_DEC_DEPENDENCY_INVALID_TYPE(name)\n  }\n\n  // eslint-disable-next-line no-var\n  for (var i = 0; i !== deps.length; ++i) {\n    if (!checkExistence(instance, deps[i])) {\n      throw new FST_ERR_DEC_MISSING_DEPENDENCY(deps[i])\n    }\n  }\n}\n\nfunction decorateReply (name, fn, dependencies) {\n  assertNotStarted(this, name)\n  checkReferenceType(name, fn)\n  decorateConstructor(this[kReply], name, fn, dependencies)\n  return this\n}\n\nfunction decorateRequest (name, fn, dependencies) {\n  assertNotStarted(this, name)\n  checkReferenceType(name, fn)\n  decorateConstructor(this[kRequest], name, fn, dependencies)\n  return this\n}\n\nfunction assertNotStarted (instance, name) {\n  if (instance[kState].started) {\n    throw new FST_ERR_DEC_AFTER_START(name)\n  }\n}\n\nmodule.exports = {\n  add: decorateFastify,\n  exist: checkExistence,\n  existRequest: checkRequestExistence,\n  existReply: checkReplyExistence,\n  dependencies: checkDependencies,\n  decorateReply,\n  decorateRequest\n}\n/test/server.test.js\u0004X'use strict'\n\nconst t = require('tap')\nconst test = t.test\nconst Fastify = require('..')\n\ntest('listen should accept null port', t => {\n  t.plan(1)\n\n  const fastify = Fastify()\n  t.teardown(fastify.close.bind(fastify))\n  fastify.listen({ port: null }, (err) => {\n    t.error(err)\n  })\n})\n\ntest('listen should accept undefined port', t => {\n  t.plan(1)\n\n  const fastify = Fastify()\n  t.teardown(fastify.close.bind(fastify))\n  fastify.listen({ port: undefined }, (err) => {\n    t.error(err)\n  })\n})\n\ntest('listen should accept stringified number port', t => {\n  t.plan(1)\n\n  const fastify = Fastify()\n  t.teardown(fastify.close.bind(fastify))\n  fastify.listen({ port: '1234' }, (err) => {\n    t.error(err)\n  })\n})\n\ntest('listen should reject string port', async (t) => {\n  t.plan(2)\n  const fastify = Fastify()\n  t.teardown(fastify.close.bind(fastify))\n\n  try {\n    await fastify.listen({ port: 'hello-world' })\n  } catch (error) {\n    t.equal(error.code, 'ERR_SOCKET_BAD_PORT')\n  }\n\n  try {\n    await fastify.listen({ port: '1234hello' })\n  } catch (error) {\n    t.equal(error.code, 'ERR_SOCKET_BAD_PORT')\n  }\n})\n/test/esm/esm.mjs\u0001\u001cimport t from 'tap'\nimport Fastify from '../../fastify.js'\n\nt.test('esm support', async t => {\n  const fastify = Fastify()\n\n  fastify.register(import('./plugin.mjs'), { foo: 'bar' })\n  fastify.register(import('./other.mjs'))\n\n  await fastify.ready()\n\n  t.equal(fastify.foo, 'bar')\n})\n/test/types/route.test-d.ts!import fastify, { FastifyInstance, FastifyRequest, FastifyReply, RouteHandlerMethod } from '../../fastify'\nimport { expectType, expectError, expectAssignable, printType } from 'tsd'\nimport { HTTPMethods } from '../../types/utils'\nimport * as http from 'http'\nimport { RequestPayload } from '../../types/hooks'\nimport { FastifyError } from '@fastify/error'\n\n/*\n * Testing Fastify HTTP Routes and Route Shorthands.\n * Verifies Request and Reply types as well.\n * For the route shorthand tests the argument orders are:\n * - `(path, handler)`\n * - `(path, options, handler)`\n * - `(path, options)`\n */\n\ndeclare module '../../fastify' {\n  interface FastifyContextConfig {\n    foo: string;\n    bar: number;\n  }\n}\n\nconst routeHandler: RouteHandlerMethod = function (request, reply) {\n  expectType<FastifyInstance>(this)\n  expectType<FastifyRequest>(request)\n  expectType<FastifyReply>(reply)\n}\n\nconst routeHandlerWithReturnValue: RouteHandlerMethod = function (request, reply) {\n  expectType<FastifyInstance>(this)\n  expectType<FastifyRequest>(request)\n  expectType<FastifyReply>(reply)\n\n  return reply.send()\n}\n\ntype LowerCaseHTTPMethods = 'get' | 'post' | 'put' | 'patch' | 'head' | 'delete' | 'options'\n\n;['GET', 'POST', 'PUT', 'PATCH', 'HEAD', 'DELETE', 'OPTIONS'].forEach(method => {\n  // route method\n  expectType<FastifyInstance>(fastify().route({\n    method: method as HTTPMethods,\n    url: '/',\n    handler: routeHandler\n  }))\n\n  const lowerCaseMethod: LowerCaseHTTPMethods = method.toLowerCase() as LowerCaseHTTPMethods\n\n  // method as method\n  expectType<FastifyInstance>(fastify()[lowerCaseMethod]('/', routeHandler))\n  expectType<FastifyInstance>(fastify()[lowerCaseMethod]('/', {}, routeHandler))\n  expectType<FastifyInstance>(fastify()[lowerCaseMethod]('/', { handler: routeHandler }))\n\n  expectType<FastifyInstance>(fastify()[lowerCaseMethod]('/', {\n    handler: routeHandler,\n    errorHandler: (error, request, reply) => {\n      expectType<FastifyError>(error)\n      reply.send('error')\n    }\n  }))\n\n  interface BodyInterface { prop: string }\n  interface QuerystringInterface { prop: number }\n  interface ParamsInterface { prop: boolean }\n  interface HeadersInterface { prop: string }\n  interface RouteSpecificContextConfigType {\n    extra: boolean\n  }\n  interface RouteGeneric {\n    Body: BodyInterface;\n    Querystring: QuerystringInterface;\n    Params: ParamsInterface;\n    Headers: HeadersInterface;\n  }\n\n  fastify()[lowerCaseMethod]<RouteGeneric, RouteSpecificContextConfigType>('/', { config: { foo: 'bar', bar: 100, extra: true } }, (req, res) => {\n    expectType<BodyInterface>(req.body)\n    expectType<QuerystringInterface>(req.query)\n    expectType<ParamsInterface>(req.params)\n    expectType<http.IncomingHttpHeaders & HeadersInterface>(req.headers)\n    expectType<string>(req.context.config.foo)\n    expectType<number>(req.context.config.bar)\n    expectType<boolean>(req.context.config.extra)\n    expectType<string>(res.context.config.foo)\n    expectType<number>(res.context.config.bar)\n    expectType<boolean>(res.context.config.extra)\n  })\n\n  fastify().route<RouteGeneric>({\n    url: '/',\n    method: method as HTTPMethods,\n    config: { foo: 'bar', bar: 100 },\n    prefixTrailingSlash: 'slash',\n    onRequest: (req, res, done) => { // these handlers are tested in `hooks.test-d.ts`\n      expectType<BodyInterface>(req.body)\n      expectType<QuerystringInterface>(req.query)\n      expectType<ParamsInterface>(req.params)\n      expectType<http.IncomingHttpHeaders & HeadersInterface>(req.headers)\n      expectType<string>(req.context.config.foo)\n      expectType<number>(req.context.config.bar)\n      expectType<string>(res.context.config.foo)\n      expectType<number>(res.context.config.bar)\n    },\n    preParsing: (req, res, payload, done) => {\n      expectType<BodyInterface>(req.body)\n      expectType<QuerystringInterface>(req.query)\n      expectType<ParamsInterface>(req.params)\n      expectType<http.IncomingHttpHeaders & HeadersInterface>(req.headers)\n      expectType<string>(req.context.config.foo)\n      expectType<number>(req.context.config.bar)\n      expectType<string>(res.context.config.foo)\n      expectType<number>(res.context.config.bar)\n      expectType<RequestPayload>(payload)\n      expectAssignable<(err?: FastifyError | null, res?: RequestPayload) => void>(done)\n      expectAssignable<(err?: NodeJS.ErrnoException) => void>(done)\n    },\n    preValidation: (req, res, done) => {\n      expectType<BodyInterface>(req.body)\n      expectType<QuerystringInterface>(req.query)\n      expectType<ParamsInterface>(req.params)\n      expectType<http.IncomingHttpHeaders & HeadersInterface>(req.headers)\n      expectType<string>(req.context.config.foo)\n      expectType<number>(req.context.config.bar)\n      expectType<string>(res.context.config.foo)\n      expectType<number>(res.context.config.bar)\n    },\n    preHandler: (req, res, done) => {\n      expectType<BodyInterface>(req.body)\n      expectType<QuerystringInterface>(req.query)\n      expectType<ParamsInterface>(req.params)\n      expectType<http.IncomingHttpHeaders & HeadersInterface>(req.headers)\n      expectType<string>(req.context.config.foo)\n      expectType<number>(req.context.config.bar)\n      expectType<string>(res.context.config.foo)\n      expectType<number>(res.context.config.bar)\n    },\n    onResponse: (req, res, done) => {\n      expectType<BodyInterface>(req.body)\n      expectType<QuerystringInterface>(req.query)\n      expectType<ParamsInterface>(req.params)\n      expectType<http.IncomingHttpHeaders & HeadersInterface>(req.headers)\n      expectType<string>(req.context.config.foo)\n      expectType<number>(req.context.config.bar)\n      expectType<string>(res.context.config.foo)\n      expectType<number>(res.context.config.bar)\n      expectType<number>(res.statusCode)\n    },\n    onError: (req, res, done) => {\n      expectType<BodyInterface>(req.body)\n      expectType<QuerystringInterface>(req.query)\n      expectType<ParamsInterface>(req.params)\n      expectType<http.IncomingHttpHeaders & HeadersInterface>(req.headers)\n      expectType<string>(req.context.config.foo)\n      expectType<number>(req.context.config.bar)\n      expectType<string>(res.context.config.foo)\n      expectType<number>(res.context.config.bar)\n    },\n    preSerialization: (req, res, done) => {\n      expectType<BodyInterface>(req.body)\n      expectType<QuerystringInterface>(req.query)\n      expectType<ParamsInterface>(req.params)\n      expectType<http.IncomingHttpHeaders & HeadersInterface>(req.headers)\n      expectType<string>(req.context.config.foo)\n      expectType<number>(req.context.config.bar)\n      expectType<string>(res.context.config.foo)\n      expectType<number>(res.context.config.bar)\n    },\n    onSend: (req, res, done) => {\n      expectType<BodyInterface>(req.body)\n      expectType<QuerystringInterface>(req.query)\n      expectType<ParamsInterface>(req.params)\n      expectType<http.IncomingHttpHeaders & HeadersInterface>(req.headers)\n      expectType<string>(req.context.config.foo)\n      expectType<number>(req.context.config.bar)\n      expectType<string>(res.context.config.foo)\n      expectType<number>(res.context.config.bar)\n    },\n    handler: (req, res) => {\n      expectType<BodyInterface>(req.body)\n      expectType<QuerystringInterface>(req.query)\n      expectType<ParamsInterface>(req.params)\n      expectType<http.IncomingHttpHeaders & HeadersInterface>(req.headers)\n      expectType<string>(req.context.config.foo)\n      expectType<number>(req.context.config.bar)\n      expectType<string>(res.context.config.foo)\n      expectType<number>(res.context.config.bar)\n    }\n  })\n})\n\nexpectError(fastify().route({\n  url: '/',\n  method: 'CONNECT', // not a valid method\n  handler: routeHandler\n}))\n\nexpectType<FastifyInstance>(fastify().route({\n  url: '/',\n  method: ['GET', 'POST'],\n  handler: routeHandler\n}))\n\nexpectError(fastify().route({\n  url: '/',\n  method: ['GET', 'POST', 'OPTION'], // OPTION is a typo for OPTIONS\n  handler: routeHandler\n}))\n\nexpectError(fastify().route({\n  url: '/',\n  method: 'GET',\n  handler: routeHandler,\n  schemaErrorFormatter: 500 // Not a valid formatter\n}))\n\nexpectType<FastifyInstance>(fastify().route({\n  url: '/',\n  method: 'GET',\n  handler: routeHandler,\n  schemaErrorFormatter: (errors, dataVar) => new Error('')\n}))\n\nexpectError(fastify().route({\n  prefixTrailingSlash: true // Not a valid value\n}))\n\nexpectType<FastifyInstance>(fastify().route({\n  url: '/',\n  method: 'GET',\n  handler: routeHandlerWithReturnValue\n}))\n\nexpectType<boolean>(fastify().hasRoute({\n  url: '/',\n  method: 'GET'\n}))\n\nexpectType<boolean>(fastify().hasRoute({\n  url: '/',\n  method: 'GET',\n  constraints: { version: '1.2.0' }\n}))\n/docs/Reference/Index.md\u000en<h1 align=\"center\">Fastify</h1>\n\n## Core Documents\n<a id=\"reference-core-docs\"></a>\n\nFor the full table of contents (TOC), see [below](#reference-toc). The following\nlist is a subset of the full TOC that detail core Fastify APIs and concepts in\norder of most likely importance to the reader:\n\n+ [Server](./Server.md): Documents the core Fastify API. Includes documentation\n  for the factory function and the object returned by the factory function.\n+ [Lifecycle](./Lifecycle.md): Explains the Fastify request lifecycle and\n  illustrates where [Hooks](./Hooks.md) are available for integrating with it.\n+ [Routes](./Routes.md): Details how to register routes with Fastify and how\n  Fastify builds and evaluates the routing trie.\n+ [Request](./Request.md): Details Fastify's request object that is passed into\n  each request handler.\n+ [Reply](./Reply.md): Details Fastify's response object available to each\n  request handler.\n+ [Validation and Serialization](./Validation-and-Serialization.md): Details\n  Fastify's support for validating incoming data and how Fastify serializes data\n  for responses.\n+ [Plugins](./Plugins.md): Explains Fastify's plugin architecture and API.\n+ [Encapsulation](./Encapsulation.md): Explains a core concept upon which all\n  Fastify plugins are built.\n+ [Decorators](./Decorators.md): Explains the server, request, and response\n  decorator APIs.\n+ [Hooks](./Hooks.md): Details the API by which Fastify plugins can inject\n  themselves into Fastify's handling of the request lifecycle.\n\n\n## Reference Documentation Table Of Contents\n<a id=\"reference-toc\"></a>\n\nThis table of contents is in alphabetical order.\n\n+ [Content Type Parser](./ContentTypeParser.md): Documents Fastify's default\n  content type parser and how to add support for new content types.\n+ [Decorators](./Decorators.md): Explains the server, request, and response\n  decorator APIs.\n+ [Encapsulation](./Encapsulation.md): Explains a core concept upon which all\n  Fastify plugins are built.\n+ [Errors](./Errors.md): Details how Fastify handles errors and lists the\n  standard set of errors Fastify generates.\n+ [Hooks](./Hooks.md): Details the API by which Fastify plugins can inject\n  themselves into Fastify's handling of the request lifecycle.\n+ [HTTP2](./HTTP2.md): Details Fastify's HTTP2 support.\n+ [Lifecycle](./Lifecycle.md): Explains the Fastify request lifecycle and\n  illustrates where [Hooks](./Hooks.md) are available for integrating with it.\n+ [Logging](./Logging.md): Details Fastify's included logging and how to\n  customize it.\n+ [Long Term Support](./LTS.md): Explains Fastify's long term support (LTS)\n  guarantee and the exceptions possible to the [semver](https://semver.org)\n  contract.\n+ [Middleware](./Middleware.md): Details Fastify's support for Express.js style\n  middleware.\n+ [Plugins](./Plugins.md): Explains Fastify's plugin architecture and API.\n+ [Reply](./Reply.md): Details Fastify's response object available to each\n  request handler.\n+ [Request](./Request.md): Details Fastify's request object that is passed into\n  each request handler.\n+ [Routes](./Routes.md): Details how to register routes with Fastify and how\n  Fastify builds and evaluates the routing trie.\n+ [Server](./Server.md): Documents the core Fastify API. Includes documentation\n  for the factory function and the object returned by the factory function.\n+ [TypeScript](./TypeScript.md): Documents Fastify's TypeScript support and\n  provides recommendations for writing applications in TypeScript that utilize\n  Fastify.\n+ [Validation and Serialization](./Validation-and-Serialization.md): Details\n  Fastify's support for validating incoming data and how Fastify serializes data\n  for responses.\n/test/put.error-handler.test.jsď'use strict'\n\nconst t = require('tap')\nrequire('./helper').payloadMethod('put', t, true)\nrequire('./input-validation').payloadMethod('put', t)\n/test/internals/logger.test.js\u000bB'use strict'\n\nconst t = require('tap')\nconst test = t.test\nconst Fastify = require('../..')\nconst loggerUtils = require('../../lib/logger')\n\ntest('time resolution', t => {\n  t.plan(2)\n  t.equal(typeof loggerUtils.now, 'function')\n  t.equal(typeof loggerUtils.now(), 'number')\n})\n\ntest('The logger should add a unique id for every request', t => {\n  const ids = []\n\n  const fastify = Fastify()\n  fastify.get('/', (req, reply) => {\n    t.ok(req.id)\n    reply.send({ id: req.id })\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    const queue = new Queue()\n    for (let i = 0; i < 10; i++) {\n      queue.add(checkId)\n    }\n    queue.add(() => {\n      fastify.close()\n      t.end()\n    })\n  })\n\n  function checkId (done) {\n    fastify.inject({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port\n    }, (err, res) => {\n      t.error(err)\n      const payload = JSON.parse(res.payload)\n      t.ok(ids.indexOf(payload.id) === -1, 'the id should not be duplicated')\n      ids.push(payload.id)\n      done()\n    })\n  }\n})\n\ntest('The logger should reuse request id header for req.id', t => {\n  const fastify = Fastify()\n  fastify.get('/', (req, reply) => {\n    t.ok(req.id)\n    reply.send({ id: req.id })\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n\n    fastify.inject({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port,\n      headers: {\n        'Request-Id': 'request-id-1'\n      }\n    }, (err, res) => {\n      t.error(err)\n      const payload = JSON.parse(res.payload)\n      t.ok(payload.id === 'request-id-1', 'the request id from the header should be returned')\n      fastify.close()\n      t.end()\n    })\n  })\n})\n\nfunction Queue () {\n  this.q = []\n  this.running = false\n}\n\nQueue.prototype.add = function add (job) {\n  this.q.push(job)\n  if (!this.running) this.run()\n}\n\nQueue.prototype.run = function run () {\n  this.running = true\n  const job = this.q.shift()\n  job(() => {\n    if (this.q.length) {\n      this.run()\n    } else {\n      this.running = false\n    }\n  })\n}\n\ntest('The logger should error if both stream and file destination are given', t => {\n  t.plan(2)\n\n  const stream = require('stream').Writable\n\n  try {\n    Fastify({\n      logger: {\n        level: 'info',\n        stream,\n        file: '/test'\n      }\n    })\n  } catch (err) {\n    t.equal(err.code, 'FST_ERR_LOG_INVALID_DESTINATION')\n    t.equal(err.message, 'Cannot specify both logger.stream and logger.file options')\n  }\n})\n\ntest('The serializer prevent fails if the request socket is undefined', t => {\n  t.plan(1)\n\n  const serialized = loggerUtils.serializers.req({\n    method: 'GET',\n    url: '/',\n    socket: undefined,\n    headers: {}\n  })\n\n  t.same(serialized, {\n    method: 'GET',\n    url: '/',\n    version: undefined,\n    hostname: undefined,\n    remoteAddress: undefined,\n    remotePort: undefined\n  })\n})\n/docs/Guides/Recommendations.md7T<h1 align=\"center\">Fastify</h1>\n\n## Recommendations\n\nThis document contains a set of recommendations when using Fastify.\n\n- [Use A Reverse Proxy](#use-a-reverse-proxy)\n  - [HAProxy](#haproxy)\n  - [Nginx](#nginx)\n- [Kubernetes](#kubernetes)\n- [Capacity Planning For Production](#capacity)\n- [Running Multiple Instances](#multiple)\n\n## Use A Reverse Proxy\n<a id=\"reverseproxy\"></a>\n\nNode.js is an early adopter of frameworks shipping with an easy-to-use web\nserver within the standard library. Previously, with languages like PHP or\nPython, one would need either a web server with specific support for the\nlanguage or the ability to set up some sort of [CGI gateway][cgi] that works\nwith the language. With Node.js, one can write an application that _directly_\nhandles HTTP requests. As a result, the temptation is to write applications that\nhandle requests for multiple domains, listen on multiple ports (i.e. HTTP _and_\nHTTPS), and then expose these applications directly to the Internet to handle\nrequests.\n\nThe Fastify team **strongly** considers this to be an anti-pattern and extremely\nbad practice:\n\n1. It adds unnecessary complexity to the application by diluting its focus.\n2. It prevents [horizontal scalability][scale-horiz].\n\nSee [Why should I use a Reverse Proxy if Node.js is Production Ready?][why-use]\nfor a more thorough discussion of why one should opt to use a reverse proxy.\n\nFor a concrete example, consider the situation where:\n\n1. The app needs multiple instances to handle load.\n1. The app needs TLS termination.\n1. The app needs to redirect HTTP requests to HTTPS.\n1. The app needs to serve multiple domains.\n1. The app needs to serve static resources, e.g. jpeg files.\n\nThere are many reverse proxy solutions available, and your environment may\ndictate the solution to use, e.g. AWS or GCP. Given the above, we could use\n[HAProxy][haproxy] or [Nginx][nginx] to solve these requirements:\n\n### HAProxy\n\n```conf\n# The global section defines base HAProxy (engine) instance configuration.\nglobal\n  log /dev/log syslog\n  maxconn 4096\n  chroot /var/lib/haproxy\n  user haproxy\n  group haproxy\n\n  # Set some baseline TLS options.\n  tune.ssl.default-dh-param 2048\n  ssl-default-bind-options no-sslv3 no-tlsv10 no-tlsv11\n  ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AESGCM:RSA+AES:!aNULL:!MD5:!DSS\n  ssl-default-server-options no-sslv3 no-tlsv10 no-tlsv11\n  ssl-default-server-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AESGCM:RSA+AES:!aNULL:!MD5:!DSS\n\n# Each defaults section defines options that will apply to each subsequent\n# subsection until another defaults section is encountered.\ndefaults\n  log   global\n  mode  http\n  option        httplog\n  option        dontlognull\n  retries       3\n  option redispatch\n  # The following option makes haproxy close connections to backend servers\n  # instead of keeping them open. This can alleviate unexpected connection\n  # reset errors in the Node process.\n  option http-server-close\n  maxconn       2000\n  timeout connect 5000\n  timeout client 50000\n  timeout server 50000\n\n  # Enable content compression for specific content types.\n  compression algo gzip\n  compression type text/html text/plain text/css application/javascript\n\n# A \"frontend\" section defines a public listener, i.e. an \"http server\"\n# as far as clients are concerned.\nfrontend proxy\n  # The IP address here would be the _public_ IP address of the server.\n  # Here, we use a private address as an example.\n  bind 10.0.0.10:80\n  # This redirect rule will redirect all traffic that is not TLS traffic\n  # to the same incoming request URL on the HTTPS port.\n  redirect scheme https code 308 if !{ ssl_fc }\n  # Technically this use_backend directive is useless since we are simply\n  # redirecting all traffic to this frontend to the HTTPS frontend. It is\n  # merely included here for completeness sake.\n  use_backend default-server\n\n# This frontend defines our primary, TLS only, listener. It is here where\n# we will define the TLS certificates to expose and how to direct incoming\n# requests.\nfrontend proxy-ssl\n  # The `/etc/haproxy/certs` directory in this example contains a set of\n  # certificate PEM files that are named for the domains the certificates are\n  # issued for. When HAProxy starts, it will read this directory, load all of\n  # the certificates it finds here, and use SNI matching to apply the correct\n  # certificate to the connection.\n  bind 10.0.0.10:443 ssl crt /etc/haproxy/certs\n\n  # Here we define rule pairs to handle static resources. Any incoming request\n  # that has a path starting with `/static`, e.g.\n  # `https://one.example.com/static/foo.jpeg`, will be redirected to the\n  # static resources server.\n  acl is_static path -i -m beg /static\n  use_backend static-backend if is_static\n\n  # Here we define rule pairs to direct requests to appropriate Node.js\n  # servers based on the requested domain. The `acl` line is used to match\n  # the incoming hostname and define a boolean indicating if it is a match.\n  # The `use_backend` line is used to direct the traffic if the boolean is\n  # true.\n  acl example1 hdr_sub(Host) one.example.com\n  use_backend example1-backend if example1\n\n  acl example2 hdr_sub(Host) two.example.com\n  use_backend example2-backend if example2\n\n  # Finally, we have a fallback redirect if none of the requested hosts\n  # match the above rules.\n  default_backend default-server\n\n# A \"backend\" is used to tell HAProxy where to request information for the\n# proxied request. These sections are where we will define where our Node.js\n# apps live and any other servers for things like static assets.\nbackend default-server\n  # In this example we are defaulting unmatched domain requests to a single\n  # backend server for all requests. Notice that the backend server does not\n  # have to be serving TLS requests. This is called \"TLS termination\": the TLS\n  # connection is \"terminated\" at the reverse proxy.\n  # It is possible to also proxy to backend servers that are themselves serving\n  # requests over TLS, but that is outside the scope of this example.\n  server server1 10.10.10.2:80\n\n# This backend configuration will serve requests for `https://one.example.com`\n# by proxying requests to three backend servers in a round-robin manner.\nbackend example1-backend\n  server example1-1 10.10.11.2:80\n  server example1-2 10.10.11.2:80\n  server example2-2 10.10.11.3:80\n\n# This one serves requests for `https://two.example.com`\nbackend example2-backend\n  server example2-1 10.10.12.2:80\n  server example2-2 10.10.12.2:80\n  server example2-3 10.10.12.3:80\n\n# This backend handles the static resources requests.\nbackend static-backend\n  server static-server1 10.10.9.2:80\n```\n\n[cgi]: https://en.wikipedia.org/wiki/Common_Gateway_Interface\n[scale-horiz]: https://en.wikipedia.org/wiki/Scalability#Horizontal\n[why-use]: https://web.archive.org/web/20190821102906/https://medium.com/intrinsic/why-should-i-use-a-reverse-proxy-if-node-js-is-production-ready-5a079408b2ca\n[haproxy]: https://www.haproxy.org/\n\n### Nginx\n\n```nginx\n# This upstream block groups 3 servers into one named backend fastify_app\n# with 2 primary servers distributed via round-robin\n# and one backup which is used when the first 2 are not reachable\n# This also assumes your fastify servers are listening on port 80.\n# more info: https://nginx.org/en/docs/http/ngx_http_upstream_module.html\nupstream fastify_app {\n  server 10.10.11.1:80;\n  server 10.10.11.2:80;\n  server 10.10.11.3:80 backup;\n}\n\n# This server block asks NGINX to respond with a redirect when\n# an incoming request from port 80 (typically plain HTTP), to\n# the same request URL but with HTTPS as protocol.\n# This block is optional, and usually used if you are handling\n# SSL termination in NGINX, like in the example here.\nserver {\n  # default server is a special parameter to ask NGINX\n  # to set this server block to the default for this address/port\n  # which in this case is any address and port 80\n  listen 80 default_server;\n  listen [::]:80 default_server;\n\n  # With a server_name directive you can also ask NGINX to\n  # use this server block only with matching server name(s)\n  # listen 80;\n  # listen [::]:80;\n  # server_name example.tld;\n\n  # This matches all paths from the request and responds with\n  # the redirect mentioned above.\n  location / {\n    return 301 https://$host$request_uri;\n  }\n}\n\n# This server block asks NGINX to respond to requests from\n# port 443 with SSL enabled and accept HTTP/2 connections.\n# This is where the request is then proxied to the fastify_app\n# server group via port 3000.\nserver {\n  # This listen directive asks NGINX to accept requests\n  # coming to any address, port 443, with SSL, and HTTP/2\n  # if possible.\n  listen 443 ssl http2 default_server;\n  listen [::]:443 ssl http2 default_server;\n\n  # With a server_name directive you can also ask NGINX to\n  # use this server block only with matching server name(s)\n  # listen 443 ssl http2;\n  # listen [::]:443 ssl http2;\n  # server_name example.tld;\n\n  # Your SSL/TLS certificate (chain) and secret key in the PEM format\n  ssl_certificate /path/to/fullchain.pem;\n  ssl_certificate_key /path/to/private.pem;\n\n  # A generic best practice baseline for based\n  # on https://ssl-config.mozilla.org/\n  ssl_session_timeout 1d;\n  ssl_session_cache shared:FastifyApp:10m;\n  ssl_session_tickets off;\n\n  # This tells NGINX to only accept TLS 1.3, which should be fine\n  # with most modern browsers including IE 11 with certain updates.\n  # If you want to support older browsers you might need to add\n  # additional fallback protocols.\n  ssl_protocols TLSv1.3;\n  ssl_prefer_server_ciphers off;\n\n  # This adds a header that tells browsers to only ever use HTTPS\n  # with this server.\n  add_header Strict-Transport-Security \"max-age=63072000\" always;\n\n  # The following directives are only necessary if you want to\n  # enable OCSP Stapling.\n  ssl_stapling on;\n  ssl_stapling_verify on;\n  ssl_trusted_certificate /path/to/chain.pem;\n\n  # Custom nameserver to resolve upstream server names\n  # resolver 127.0.0.1;\n\n  # This section matches all paths and proxies it to the backend server\n  # group specified above. Note the additional headers that forward\n  # information about the original request. You might want to set\n  # trustProxy to the address of your NGINX server so the X-Forwarded\n  # fields are used by fastify.\n  location / {\n    # more info: https://nginx.org/en/docs/http/ngx_http_proxy_module.html\n    proxy_http_version 1.1;\n    proxy_cache_bypass $http_upgrade;\n    proxy_set_header Upgrade $http_upgrade;\n    proxy_set_header Connection 'upgrade';\n    proxy_set_header Host $host;\n    proxy_set_header X-Real-IP $remote_addr;\n    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n    proxy_set_header X-Forwarded-Proto $scheme;\n\n    # This is the directive that proxies requests to the specified server.\n    # If you are using an upstream group, then you do not need to specify a port.\n    # If you are directly proxying to a server e.g.\n    # proxy_pass http://127.0.0.1:3000 then specify a port.\n    proxy_pass http://fastify_app;\n  }\n}\n```\n\n[nginx]: https://nginx.org/\n\n## Kubernetes\n<a id=\"kubernetes\"></a>\n\nThe `readinessProbe` uses [(by\ndefault](https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/#configure-probes))\nthe pod IP as the hostname. Fastify listens on `127.0.0.1` by default. The probe\nwill not be able to reach the application in this case. To make it work,\nthe application must listen on `0.0.0.0` or specify a custom hostname in\nthe `readinessProbe.httpGet` spec, as per the following example:\n\n```yaml\nreadinessProbe:\n    httpGet:\n        path: /health\n        port: 4000\n    initialDelaySeconds: 30\n    periodSeconds: 30\n    timeoutSeconds: 3\n    successThreshold: 1\n    failureThreshold: 5\n```\n\n## Capacity Planning For Production\n<a id=\"capacity\"></a>\n\nIn order to rightsize the production environment for your Fastify application, \nit is highly recommended that you perform your own measurements against \ndifferent configurations of the environment, which may\nuse real CPU cores, virtual CPU cores (vCPU), or even fractional\nvCPU cores. We will use the term vCPU throughout this\nrecommendation to represent any CPU type.\n\nTools such as [k6](https://github.com/grafana/k6) \nor [autocannon](https://github.com/mcollina/autocannon) can be used for\nconducting the necessary performance tests.\n\nThat said, you may also consider the following as a rule of thumb:\n\n* To have the lowest possible latency, 2 vCPU are recommended per app \ninstance (e.g., a k8s pod). The second vCPU will mostly be used by the \ngarbage collector (GC) and libuv threadpool. This will minimize the latency \nfor your users, as well as the memory usage, as the GC will be run more\nfrequently. Also, the main thread won't have to stop to let the GC run.\n\n* To optimize for throughput (handling the largest possible amount of\nrequests per second per vCPU available), consider using a smaller amount of vCPUs\nper app instance. It is totally fine to run Node.js application with 1 vCPU.\n\n* You may experiment with an even smaller amount of vCPU, which may provide \neven better throughput in certain use-cases. There are reports of API gateway\nsolutions working well with 100m-200m vCPU in Kubernetes.\n\nSee [Node's Event Loop From the Inside Out ](https://www.youtube.com/watch?v=P9csgxBgaZ8)\nto understand the workings of Node.js in greater detail and make a\nbetter determination about what your specific application needs.\n\n## Running Multiple Instances\n<a id=\"multiple\"></a>\n\nThere are several use-cases where running multiple Fastify\napps on the same server might be considered. A common example\nwould be exposing metrics endpoints on a separate port,\nto prevent public access, when using a reverse proxy or an ingress\nfirewall is not an option.\n\nIt is perfectly fine to spin up several Fastify instances within the same \nNode.js process and run them concurrently, even in high load systems. \nEach Fastify instance only generates as much load as the traffic it receives,\nplus the memory used for that Fastify instance.\n/docs/Reference/Reply.mdk\u0000<h1 align=\"center\">Fastify</h1>\n\n## Reply\n- [Reply](#reply)\n  - [Introduction](#introduction)\n  - [.code(statusCode)](#codestatuscode)\n  - [.statusCode](#statuscode)\n  - [.server](#server)\n  - [.header(key, value)](#headerkey-value)\n  - [.headers(object)](#headersobject)\n  - [.getHeader(key)](#getheaderkey)\n  - [.getHeaders()](#getheaders)\n    - [set-cookie](#set-cookie)\n  - [.removeHeader(key)](#removeheaderkey)\n  - [.hasHeader(key)](#hasheaderkey)\n  - [.trailer(key, function)](#trailerkey-function)\n  - [.hasTrailer(key)](#hastrailerkey)\n  - [.removeTrailer(key)](#removetrailerkey)\n  - [.redirect([code ,] dest)](#redirectcode--dest)\n  - [.callNotFound()](#callnotfound)\n  - [.getResponseTime()](#getresponsetime)\n  - [.type(contentType)](#typecontenttype)\n  - [.getSerializationFunction(schema | httpStatus, [contentType])](#getserializationfunctionschema--httpstatus)\n  - [.compileSerializationSchema(schema, [httpStatus], [contentType])](#compileserializationschemaschema-httpstatus)\n  - [.serializeInput(data, [schema | httpStatus], [httpStatus], [contentType])](#serializeinputdata-schema--httpstatus-httpstatus)\n  - [.serializer(func)](#serializerfunc)\n  - [.raw](#raw)\n  - [.sent](#sent)\n  - [.hijack()](#hijack)\n  - [.send(data)](#senddata)\n    - [Objects](#objects)\n    - [Strings](#strings)\n    - [Streams](#streams)\n    - [Buffers](#buffers)\n    - [Errors](#errors)\n    - [Type of the final payload](#type-of-the-final-payload)\n    - [Async-Await and Promises](#async-await-and-promises)\n  - [.then(fulfilled, rejected)](#thenfulfilled-rejected)\n\n### Introduction\n<a id=\"introduction\"></a>\n\nThe second parameter of the handler function is `Reply`. Reply is a core Fastify\nobject that exposes the following functions and properties:\n\n- `.code(statusCode)` - Sets the status code.\n- `.status(statusCode)` - An alias for `.code(statusCode)`.\n- `.statusCode` - Read and set the HTTP status code.\n- `.server` - A reference to the fastify instance object.\n- `.header(name, value)` - Sets a response header.\n- `.headers(object)` - Sets all the keys of the object as response headers.\n- `.getHeader(name)` - Retrieve value of already set header.\n- `.getHeaders()` - Gets a shallow copy of all current response headers.\n- `.removeHeader(key)` - Remove the value of a previously set header.\n- `.hasHeader(name)` - Determine if a header has been set.\n- `.trailer(key, function)` - Sets a response trailer.\n- `.hasTrailer(key)` - Determine if a trailer has been set.\n- `.removeTrailer(key)` - Remove the value of a previously set trailer.\n- `.type(value)` - Sets the header `Content-Type`.\n- `.redirect([code,] dest)` - Redirect to the specified url, the status code is\n  optional (default to `302`).\n- `.callNotFound()` - Invokes the custom not found handler.\n- `.serialize(payload)` - Serializes the specified payload using the default\n  JSON serializer or using the custom serializer (if one is set) and returns the\n  serialized payload.\n- `.getSerializationFunction(schema | httpStatus, [contentType])` - Returns the serialization\n  function for the specified schema or http status, if any of either are set.\n- `.compileSerializationSchema(schema, [httpStatus], [contentType])` - Compiles \n  the specified schema and returns a serialization function using the default \n  (or customized) `SerializerCompiler`. The optional `httpStatus` is forwarded \n  to the `SerializerCompiler` if provided, default to `undefined`.\n- `.serializeInput(data, schema, [,httpStatus], [contentType])` - Serializes \n  the specified data using the specified schema and returns the serialized payload.\n  If the optional `httpStatus`, and `contentType` are provided, the function \n  will use the serializer function given for that specific content type and \n  HTTP Status Code. Default to `undefined`.\n- `.serializer(function)` - Sets a custom serializer for the payload.\n- `.send(payload)` - Sends the payload to the user, could be a plain text, a\n  buffer, JSON, stream, or an Error object.\n- `.sent` - A boolean value that you can use if you need to know if `send` has\n  already been called.\n- `.hijack()` - interrupt the normal request lifecycle.\n- `.raw` - The\n  [`http.ServerResponse`](https://nodejs.org/dist/latest-v14.x/docs/api/http.html#http_class_http_serverresponse)\n  from Node core.\n- `.log` - The logger instance of the incoming request.\n- `.request` - The incoming request.\n- `.context` - Access the [Request's context](./Request.md) property.\n\n```js\nfastify.get('/', options, function (request, reply) {\n  // Your code\n  reply\n    .code(200)\n    .header('Content-Type', 'application/json; charset=utf-8')\n    .send({ hello: 'world' })\n})\n```\n\nAdditionally, `Reply` provides access to the context of the request:\n\n```js\nfastify.get('/', {config: {foo: 'bar'}}, function (request, reply) {\n  reply.send('handler config.foo = ' + reply.context.config.foo)\n})\n```\n\n### .code(statusCode)\n<a id=\"code\"></a>\n\nIf not set via `reply.code`, the resulting `statusCode` will be `200`.\n\n### .statusCode\n<a id=\"statusCode\"></a>\n\nThis property reads and sets the HTTP status code. It is an alias for\n`reply.code()` when used as a setter.\n```js\nif (reply.statusCode >= 299) {\n  reply.statusCode = 500\n}\n```\n\n### .server\n<a id=\"server\"></a>\n\nThe Fastify server instance, scoped to the current [encapsulation\ncontext](./Encapsulation.md).\n\n```js\nfastify.decorate('util', function util () {\n  return 'foo'\n})\n\nfastify.get('/', async function (req, rep) {\n  return rep.server.util() // foo\n})\n```\n\n### .header(key, value)\n<a id=\"header\"></a>\n\nSets a response header. If the value is omitted or undefined, it is coerced to\n`''`.\n\n> Note: the header's value must be properly encoded using\n> [`encodeURI`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURI)\n> or similar modules such as\n> [`encodeurl`](https://www.npmjs.com/package/encodeurl). Invalid characters\n> will result in a 500 `TypeError` response.\n\nFor more information, see\n[`http.ServerResponse#setHeader`](https://nodejs.org/dist/latest-v14.x/docs/api/http.html#http_response_setheader_name_value).\n\n- ### set-cookie\n  <a id=\"set-cookie\"></a>\n\n    - When sending different values as a cookie with `set-cookie` as the key,\n      every value will be sent as a cookie instead of replacing the previous\n      value.\n\n    ```js\n    reply.header('set-cookie', 'foo');\n    reply.header('set-cookie', 'bar');\n    ```\n  - The browser will only consider the latest reference of a key for the\n    `set-cookie` header. This is done to avoid parsing the `set-cookie` header\n    when added to a reply and speeds up the serialization of the reply.\n\n  - To reset the `set-cookie` header, you need to make an explicit call to\n    `reply.removeHeader('set-cookie')`, read more about `.removeHeader(key)`\n    [here](#removeheaderkey).\n\n\n\n### .headers(object)\n<a id=\"headers\"></a>\n\nSets all the keys of the object as response headers.\n[`.header`](#headerkey-value) will be called under the hood.\n```js\nreply.headers({\n  'x-foo': 'foo',\n  'x-bar': 'bar'\n})\n```\n\n### .getHeader(key)\n<a id=\"getHeader\"></a>\n\nRetrieves the value of a previously set header.\n```js\nreply.header('x-foo', 'foo') // setHeader: key, value\nreply.getHeader('x-foo') // 'foo'\n```\n\n### .getHeaders()\n<a id=\"getHeaders\"></a>\n\nGets a shallow copy of all current response headers, including those set via the\nraw `http.ServerResponse`. Note that headers set via Fastify take precedence\nover those set via `http.ServerResponse`.\n\n```js\nreply.header('x-foo', 'foo')\nreply.header('x-bar', 'bar')\nreply.raw.setHeader('x-foo', 'foo2')\nreply.getHeaders() // { 'x-foo': 'foo', 'x-bar': 'bar' }\n```\n\n### .removeHeader(key)\n<a id=\"getHeader\"></a>\n\nRemove the value of a previously set header.\n```js\nreply.header('x-foo', 'foo')\nreply.removeHeader('x-foo')\nreply.getHeader('x-foo') // undefined\n```\n\n### .hasHeader(key)\n<a id=\"hasHeader\"></a>\n\nReturns a boolean indicating if the specified header has been set.\n\n### .trailer(key, function)\n<a id=\"trailer\"></a>\n\nSets a response trailer. Trailer is usually used when you need a header that\nrequires heavy resources to be sent after the `data`, for example,\n`Server-Timing` and `Etag`. It can ensure the client receives the response data\nas soon as possible.\n\n*Note: The header `Transfer-Encoding: chunked` will be added once you use the\ntrailer. It is a hard requirement for using trailer in Node.js.*\n\n*Note: Any error passed to `done` callback will be ignored. If you interested\nin the error, you can turn on `debug` level logging.*\n\n```js\nreply.trailer('server-timing', function() {\n  return 'db;dur=53, app;dur=47.2'\n})\n\nconst { createHash } = require('crypto')\n// trailer function also recieve two argument\n// @param {object} reply fastify reply\n// @param {string|Buffer|null} payload payload that already sent, note that it will be null when stream is sent\n// @param {function} done callback to set trailer value\nreply.trailer('content-md5', function(reply, payload, done) {\n  const hash = createHash('md5')\n  hash.update(payload)\n  done(null, hash.disgest('hex'))\n})\n\n// when you prefer async-await\nreply.trailer('content-md5', async function(reply, payload) {\n  const hash = createHash('md5')\n  hash.update(payload)\n  return hash.disgest('hex')\n})\n```\n\n### .hasTrailer(key)\n<a id=\"hasTrailer\"></a>\n\nReturns a boolean indicating if the specified trailer has been set.\n\n### .removeTrailer(key)\n<a id=\"removeTrailer\"></a>\n\nRemove the value of a previously set trailer.\n```js\nreply.trailer('server-timing', function() {\n  return 'db;dur=53, app;dur=47.2'\n})\nreply.removeTrailer('server-timing')\nreply.getTrailer('server-timing') // undefined\n```\n\n\n### .redirect([code ,] dest)\n<a id=\"redirect\"></a>\n\nRedirects a request to the specified URL, the status code is optional, default\nto `302` (if status code is not already set by calling `code`).\n\n> Note: the input URL must be properly encoded using\n> [`encodeURI`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURI)\n> or similar modules such as\n> [`encodeurl`](https://www.npmjs.com/package/encodeurl). Invalid URLs will\n> result in a 500 `TypeError` response.\n\nExample (no `reply.code()` call) sets status code to `302` and redirects to\n`/home`\n```js\nreply.redirect('/home')\n```\n\nExample (no `reply.code()` call) sets status code to `303` and redirects to\n`/home`\n```js\nreply.redirect(303, '/home')\n```\n\nExample (`reply.code()` call) sets status code to `303` and redirects to `/home`\n```js\nreply.code(303).redirect('/home')\n```\n\nExample (`reply.code()` call) sets status code to `302` and redirects to `/home`\n```js\nreply.code(303).redirect(302, '/home')\n```\n\n### .callNotFound()\n<a id=\"call-not-found\"></a>\n\nInvokes the custom not found handler. Note that it will only call `preHandler`\nhook specified in [`setNotFoundHandler`](./Server.md#set-not-found-handler).\n\n```js\nreply.callNotFound()\n```\n\n### .getResponseTime()\n<a id=\"getResponseTime\"></a>\n\nInvokes the custom response time getter to calculate the amount of time passed\nsince the request was started.\n\nNote that unless this function is called in the [`onResponse`\nhook](./Hooks.md#onresponse) it will always return `0`.\n\n```js\nconst milliseconds = reply.getResponseTime()\n```\n\n### .type(contentType)\n<a id=\"type\"></a>\n\nSets the content type for the response. This is a shortcut for\n`reply.header('Content-Type', 'the/type')`.\n\n```js\nreply.type('text/html')\n```\nIf the `Content-Type` has a JSON subtype, and the charset parameter is not set,\n`utf-8` will be used as the charset by default.\n\n### .getSerializationFunction(schema | httpStatus, [contentType])\n<a id=\"getserializationfunction\"></a>\n\nBy calling this function using a provided `schema` or `httpStatus`, \nand the optional `contentType`, it will return a `serialzation` function \nthat can be used to serialize diverse inputs. It returns `undefined` if no\nserialization function was found using either of the provided inputs.\n\nThis heavily depends of the `schema#responses` attached to the route, or\nthe serialization functions compiled by using `compileSerializationSchema`.\n\n```js\nconst serialize = reply\n                  .getSerializationFunction({\n                    type: 'object', \n                    properties: { \n                      foo: { \n                        type: 'string' \n                      } \n                    } \n                  })\nserialize({ foo: 'bar' }) // '{\"foo\":\"bar\"}'\n\n// or\n\nconst serialize = reply\n                  .getSerializationFunction(200)\nserialize({ foo: 'bar' }) // '{\"foo\":\"bar\"}'\n\n// or\n\nconst serialize = reply\n                  .getSerializationFunction(200, 'application/json')\nserialize({ foo: 'bar' }) // '{\"foo\":\"bar\"}'\n```\n\nSee [.compileSerializationSchema(schema, [httpStatus], [contentType])](#compileserializationschema)\nfor more information on how to compile serialization schemas.\n\n### .compileSerializationSchema(schema, [httpStatus], [contentType])\n<a id=\"compileserializationschema\"></a>\n\nThis function will compile a serialization schema and\nreturn a function that can be used to serialize data.\nThe function returned (a.k.a. _serialization function_) returned is compiled\nby using the provided `SerializerCompiler`. Also this is cached by using\na `WeakMap` for reducing compilation calls.\n\nThe optional paramaters `httpStatus` and `contentType`, if provided, \nare forwarded directly to the `SerializerCompiler`, so it can be used \nto compile the serialization function if a custom `SerializerCompiler` is used.\n\nThis heavily depends of the `schema#responses` attached to the route, or\nthe serialization functions compiled by using `compileSerializationSchema`.\n\n```js\nconst serialize = reply\n                  .compileSerializationSchema({\n                    type: 'object', \n                    properties: { \n                      foo: { \n                        type: 'string' \n                      } \n                    } \n                  })\nserialize({ foo: 'bar' }) // '{\"foo\":\"bar\"}'\n\n// or\n\nconst serialize = reply\n                  .compileSerializationSchema({\n                    type: 'object', \n                    properties: { \n                      foo: { \n                        type: 'string' \n                      } \n                    } \n                  }, 200)\nserialize({ foo: 'bar' }) // '{\"foo\":\"bar\"}'\n\n// or\n\nconst serialize = reply\n                  .compileSerializationSchema({\n                        '3xx': {\n                          content: {\n                            'application/json': {\n                              schema: {\n                                name: { type: 'string' },\n                                phone: { type: 'number' }\n                              }\n                            }\n                          }\n                        }\n                  }, '3xx', 'application/json')\nserialize({ name: 'Jone', phone: 201090909090 }) // '{\"name\":\"Jone\", \"phone\":201090909090}'\n```\n\nNote that you should be careful when using this function, as it will cache\nthe compiled serialization functions based on the schema provided. If the\nschemas provided is mutated or changed, the serialization functions will not\ndetect that the schema has been altered and for instance it will reuse the\npreviously compiled serialization function based on the reference of the schema\npreviously provided.\n\nIf there's a need to change the properties of a schema, always opt to create\na totally new object, otherwise the implementation won't benefit from the cache\nmechanism.\n\n:Using the following schema as example:\n```js\nconst schema1 = {\n  type: 'object',\n  properties: {\n    foo: {\n      type: 'string'\n    }\n  }\n}\n```\n\n*Not*\n```js \nconst serialize = reply.compileSerializationSchema(schema1)\n\n// Later on...\nschema1.properties.foo.type. = 'integer'\nconst newSerialize = reply.compileSerializationSchema(schema1)\n\nconsole.log(newSerialize === serialize) // true\n```\n\n*Instead*\n```js\nconst serialize = reply.compileSerializationSchema(schema1)\n\n// Later on...\nconst newSchema = Object.assign({}, schema1)\nnewSchema.properties.foo.type = 'integer'\n\nconst newSerialize = reply.compileSerializationSchema(newSchema)\n\nconsole.log(newSerialize === serialize) // false\n```\n\n### .serializeInput(data, [schema | httpStatus], [httpStatus], [contentType])\n<a id=\"serializeinput\"></a>\n\nThis function will serialize the input data based on the provided schema\nor HTTP status code. If both are provided the `httpStatus` will take precedence.\n\nIf there is not a serialization function for a given `schema` a new serialization\nfunction will be compiled, forwarding the `httpStatus` and `contentType` if provided.\n\n```js\nreply\n  .serializeInput({ foo: 'bar'}, {  \n    type: 'object', \n    properties: { \n      foo: { \n        type: 'string' \n      } \n    } \n  }) // '{\"foo\":\"bar\"}'\n\n// or\n\nreply\n  .serializeInput({ foo: 'bar'}, {\n    type: 'object', \n    properties: { \n      foo: { \n        type: 'string' \n      } \n    } \n  }, 200) // '{\"foo\":\"bar\"}'\n\n// or\n\nreply\n  .serializeInput({ foo: 'bar'}, 200) // '{\"foo\":\"bar\"}'\n\n// or\n\nreply\n  .serializeInput({ name: 'Jone', age: 18 }, '200', 'application/vnd.v1+json') // '{\"name\": \"Jone\", \"age\": 18}'\n```\n\nSee [.compileSerializationSchema(schema, [httpStatus], [contentType])](#compileserializationschema)\nfor more information on how to compile serialization schemas.\n\n### .serializer(func)\n<a id=\"serializer\"></a>\n\nBy default, `.send()` will JSON-serialize any value that is not one of `Buffer`,\n`stream`, `string`, `undefined`, or `Error`. If you need to replace the default\nserializer with a custom serializer for a particular request, you can do so with\nthe `.serializer()` utility. Be aware that if you are using a custom serializer,\nyou must set a custom `'Content-Type'` header.\n\n```js\nreply\n  .header('Content-Type', 'application/x-protobuf')\n  .serializer(protoBuf.serialize)\n```\n\nNote that you don't need to use this utility inside a `handler` because Buffers,\nstreams, and strings (unless a serializer is set) are considered to already be\nserialized.\n\n```js\nreply\n  .header('Content-Type', 'application/x-protobuf')\n  .send(protoBuf.serialize(data))\n```\n\nSee [`.send()`](#send) for more information on sending different types of\nvalues.\n\n### .raw\n<a id=\"raw\"></a>\n\nThis is the\n[`http.ServerResponse`](https://nodejs.org/dist/latest-v14.x/docs/api/http.html#http_class_http_serverresponse)\nfrom Node core. Whilst you are using the Fastify `Reply` object, the use of\n`Reply.raw` functions is at your own risk as you are skipping all the Fastify\nlogic of handling the HTTP response. e.g.:\n\n```js\napp.get('/cookie-2', (req, reply) => {\n  reply.setCookie('session', 'value', { secure: false }) // this will not be used\n\n  // in this case we are using only the nodejs http server response object\n  reply.raw.writeHead(200, { 'Content-Type': 'text/plain' })\n  reply.raw.write('ok')\n  reply.raw.end()\n})\n```\nAnother example of the misuse of `Reply.raw` is explained in\n[Reply](#getheaders).\n\n### .sent\n<a id=\"sent\"></a>\n\nAs the name suggests, `.sent` is a property to indicate if a response has been\nsent via `reply.send()`. It will also be `true` in case `reply.hijack()` was\nused.\n\nIn case a route handler is defined as an async function or it returns a promise,\nit is possible to call `reply.hijack()` to indicate that the automatic\ninvocation of `reply.send()` once the handler promise resolve should be skipped.\nBy calling `reply.hijack()`, an application claims full responsibility for the\nlow-level request and response. Moreover, hooks will not be invoked.\n\n*Modifying the `.sent` property directly is deprecated. Please use the\naforementioned `.hijack()` method to achieve the same effect.*\n\n<a name=\"hijack\"></a>\n### .hijack()\nSometimes you might need to halt the execution of the normal request lifecycle\nand handle sending the response manually.\n\nTo achieve this, Fastify provides the `reply.hijack()` method that can be called\nduring the request lifecycle (At any point before `reply.send()` is called), and\nallows you to prevent Fastify from sending the response, and from running the\nremaining hooks (and user handler if the reply was hijacked before).\n\n```js\napp.get('/', (req, reply) => {\n  reply.hijack()\n  reply.raw.end('hello world')\n\n  return Promise.resolve('this will be skipped')\n})\n```\n\nIf `reply.raw` is used to send a response back to the user, the `onResponse`\nhooks will still be executed.\n\n### .send(data)\n<a id=\"send\"></a>\n\nAs the name suggests, `.send()` is the function that sends the payload to the\nend user.\n\n#### Objects\n<a id=\"send-object\"></a>\n\nAs noted above, if you are sending JSON objects, `send` will serialize the\nobject with\n[fast-json-stringify](https://www.npmjs.com/package/fast-json-stringify) if you\nset an output schema, otherwise, `JSON.stringify()` will be used.\n```js\nfastify.get('/json', options, function (request, reply) {\n  reply.send({ hello: 'world' })\n})\n```\n\n#### Strings\n<a id=\"send-string\"></a>\n\nIf you pass a string to `send` without a `Content-Type`, it will be sent as\n`text/plain; charset=utf-8`. If you set the `Content-Type` header and pass a\nstring to `send`, it will be serialized with the custom serializer if one is\nset, otherwise, it will be sent unmodified (unless the `Content-Type` header is\nset to `application/json; charset=utf-8`, in which case it will be\nJSON-serialized like an object — see the section above).\n```js\nfastify.get('/json', options, function (request, reply) {\n  reply.send('plain string')\n})\n```\n\n#### Streams\n<a id=\"send-streams\"></a>\n\n*send* can also handle streams by setting the `'Content-Type'` header to\n`'application/octet-stream'`.\n```js\nfastify.get('/streams', function (request, reply) {\n  const fs = require('fs')\n  const stream = fs.createReadStream('some-file', 'utf8')\n  reply.header('Content-Type', 'application/octet-stream')\n  reply.send(stream)\n})\n```\nWhen using async-await you will need to return or await the reply object:\n```js\nfastify.get('/streams', async function (request, reply) {\n  const fs = require('fs')\n  const stream = fs.createReadStream('some-file', 'utf8')\n  reply.header('Content-Type', 'application/octet-stream')\n  return reply.send(stream)\n})\n```\n\n#### Buffers\n<a id=\"send-buffers\"></a>\n\nIf you are sending a buffer and you have not set a `'Content-Type'` header,\n*send* will set it to `'application/octet-stream'`.\n```js\nconst fs = require('fs')\nfastify.get('/streams', function (request, reply) {\n  fs.readFile('some-file', (err, fileBuffer) => {\n    reply.send(err || fileBuffer)\n  })\n})\n```\n\nWhen using async-await you will need to return or await the reply object:\n```js\nconst fs = require('fs')\nfastify.get('/streams', async function (request, reply) {\n  fs.readFile('some-file', (err, fileBuffer) => {\n    reply.send(err || fileBuffer)\n  })\n  return reply\n})\n```\n#### Errors\n<a id=\"errors\"></a>\n\nIf you pass to *send* an object that is an instance of *Error*, Fastify will\nautomatically create an error structured as the following:\n\n```js\n{\n  error: String        // the HTTP error message\n  code: String         // the Fastify error code\n  message: String      // the user error message\n  statusCode: Number   // the HTTP status code\n}\n```\n\nYou can add custom properties to the Error object, such as `headers`, that will\nbe used to enhance the HTTP response.\n\n*Note: If you are passing an error to `send` and the statusCode is less than\n400, Fastify will automatically set it at 500.*\n\nTip: you can simplify errors by using the\n[`http-errors`](https://npm.im/http-errors) module or\n[`@fastify/sensible`](https://github.com/fastify/fastify-sensible) plugin to\ngenerate errors:\n\n```js\nfastify.get('/', function (request, reply) {\n  reply.send(httpErrors.Gone())\n})\n```\n\nTo customize the JSON error output you can do it by:\n\n- setting a response JSON schema for the status code you need\n- add the additional properties to the `Error` instance\n\nNotice that if the returned status code is not in the response schema list, the\ndefault behaviour will be applied.\n\n```js\nfastify.get('/', {\n  schema: {\n    response: {\n      501: {\n        type: 'object',\n        properties: {\n          statusCode: { type: 'number' },\n          code: { type: 'string' },\n          error: { type: 'string' },\n          message: { type: 'string' },\n          time: { type: 'string' }\n        }\n      }\n    }\n  }\n}, function (request, reply) {\n  const error = new Error('This endpoint has not been implemented')\n  error.time = 'it will be implemented in two weeks'\n  reply.code(501).send(error)\n})\n```\n\nIf you want to customize error handling, check out\n[`setErrorHandler`](./Server.md#seterrorhandler) API.\n\n*Note: you are responsible for logging when customizing the error handler*\n\nAPI:\n\n```js\nfastify.setErrorHandler(function (error, request, reply) {\n  request.log.warn(error)\n  var statusCode = error.statusCode >= 400 ? error.statusCode : 500\n  reply\n    .code(statusCode)\n    .type('text/plain')\n    .send(statusCode >= 500 ? 'Internal server error' : error.message)\n})\n```\n\nThe not found errors generated by the router will use the\n[`setNotFoundHandler`](./Server.md#setnotfoundhandler)\n\nAPI:\n\n```js\nfastify.setNotFoundHandler(function (request, reply) {\n  reply\n    .code(404)\n    .type('text/plain')\n    .send('a custom not found')\n})\n```\n\n#### Type of the final payload\n<a id=\"payload-type\"></a>\n\nThe type of the sent payload (after serialization and going through any\n[`onSend` hooks](./Hooks.md#onsend)) must be one of the following types,\notherwise, an error will be thrown:\n\n- `string`\n- `Buffer`\n- `stream`\n- `undefined`\n- `null`\n\n#### Async-Await and Promises\n<a id=\"async-await-promise\"></a>\n\nFastify natively handles promises and supports async-await.\n\n*Note that in the following examples we are not using reply.send.*\n```js\nconst { promisify } = require('util')\nconst delay = promisify(setTimeout)\n\nfastify.get('/promises', options, function (request, reply) {\n return delay(200).then(() => { return { hello: 'world' }})\n})\n\nfastify.get('/async-await', options, async function (request, reply) {\n  await delay(200)\n  return { hello: 'world' }\n})\n```\n\nRejected promises default to a `500` HTTP status code. Reject the promise, or\n`throw` in an `async function`, with an object that has `statusCode` (or\n`status`) and `message` properties to modify the reply.\n\n```js\nfastify.get('/teapot', async function (request, reply) {\n  const err = new Error()\n  err.statusCode = 418\n  err.message = 'short and stout'\n  throw err\n})\n\nfastify.get('/botnet', async function (request, reply) {\n  throw { statusCode: 418, message: 'short and stout' }\n  // will return to the client the same json\n})\n```\n\nIf you want to know more please review\n[Routes#async-await](./Routes.md#async-await).\n\n### .then(fulfilled, rejected)\n<a id=\"then\"></a>\n\nAs the name suggests, a `Reply` object can be awaited upon, i.e. `await reply`\nwill wait until the reply is sent. The `await` syntax calls the `reply.then()`.\n\n`reply.then(fulfilled, rejected)` accepts two parameters:\n\n- `fulfilled` will be called when a response has been fully sent,\n- `rejected` will be called if the underlying stream had an error, e.g. the\n  socket has been destroyed.\n\nFor more details, see:\n\n- https://github.com/fastify/fastify/issues/1864 for the discussion about this\n  feature\n- https://promisesaplus.com/ for the definition of thenables\n- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/then\n  for the signature\n/test/proto-poisoning.test.js\u000f'use strict'\n\nconst Fastify = require('..')\nconst sget = require('simple-get').concat\nconst t = require('tap')\nconst test = t.test\n\ntest('proto-poisoning error', t => {\n  t.plan(3)\n\n  const fastify = Fastify()\n  t.teardown(fastify.close.bind(fastify))\n\n  fastify.post('/', (request, reply) => {\n    t.fail('handler should not be called')\n  })\n\n  fastify.listen({ port: 0 }, function (err) {\n    t.error(err)\n\n    sget({\n      method: 'POST',\n      url: 'http://localhost:' + fastify.server.address().port,\n      headers: { 'Content-Type': 'application/json' },\n      body: '{ \"__proto__\": { \"a\": 42 } }'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 400)\n    })\n  })\n})\n\ntest('proto-poisoning remove', t => {\n  t.plan(4)\n\n  const fastify = Fastify({ onProtoPoisoning: 'remove' })\n  t.teardown(fastify.close.bind(fastify))\n\n  fastify.post('/', (request, reply) => {\n    t.equal(undefined, Object.assign({}, request.body).a)\n    reply.send({ ok: true })\n  })\n\n  fastify.listen({ port: 0 }, function (err) {\n    t.error(err)\n\n    sget({\n      method: 'POST',\n      url: 'http://localhost:' + fastify.server.address().port,\n      headers: { 'Content-Type': 'application/json' },\n      body: '{ \"__proto__\": { \"a\": 42 }, \"b\": 42 }'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n    })\n  })\n})\n\ntest('proto-poisoning ignore', t => {\n  t.plan(4)\n\n  const fastify = Fastify({ onProtoPoisoning: 'ignore' })\n  t.teardown(fastify.close.bind(fastify))\n\n  fastify.post('/', (request, reply) => {\n    t.equal(42, Object.assign({}, request.body).a)\n    reply.send({ ok: true })\n  })\n\n  fastify.listen({ port: 0 }, function (err) {\n    t.error(err)\n\n    sget({\n      method: 'POST',\n      url: 'http://localhost:' + fastify.server.address().port,\n      headers: { 'Content-Type': 'application/json' },\n      body: '{ \"__proto__\": { \"a\": 42 }, \"b\": 42 }'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n    })\n  })\n})\n\ntest('constructor-poisoning error (default in v3)', t => {\n  t.plan(3)\n\n  const fastify = Fastify()\n  t.teardown(fastify.close.bind(fastify))\n\n  fastify.post('/', (request, reply) => {\n    reply.send('ok')\n  })\n\n  fastify.listen({ port: 0 }, function (err) {\n    t.error(err)\n\n    sget({\n      method: 'POST',\n      url: 'http://localhost:' + fastify.server.address().port,\n      headers: { 'Content-Type': 'application/json' },\n      body: '{ \"constructor\": { \"prototype\": { \"foo\": \"bar\" } } }'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 400)\n    })\n  })\n})\n\ntest('constructor-poisoning error', t => {\n  t.plan(3)\n\n  const fastify = Fastify({ onConstructorPoisoning: 'error' })\n  t.teardown(fastify.close.bind(fastify))\n\n  fastify.post('/', (request, reply) => {\n    t.fail('handler should not be called')\n  })\n\n  fastify.listen({ port: 0 }, function (err) {\n    t.error(err)\n\n    sget({\n      method: 'POST',\n      url: 'http://localhost:' + fastify.server.address().port,\n      headers: { 'Content-Type': 'application/json' },\n      body: '{ \"constructor\": { \"prototype\": { \"foo\": \"bar\" } } }'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 400)\n    })\n  })\n})\n\ntest('constructor-poisoning remove', t => {\n  t.plan(4)\n\n  const fastify = Fastify({ onConstructorPoisoning: 'remove' })\n  t.teardown(fastify.close.bind(fastify))\n\n  fastify.post('/', (request, reply) => {\n    t.equal(undefined, Object.assign({}, request.body).foo)\n    reply.send({ ok: true })\n  })\n\n  fastify.listen({ port: 0 }, function (err) {\n    t.error(err)\n\n    sget({\n      method: 'POST',\n      url: 'http://localhost:' + fastify.server.address().port,\n      headers: { 'Content-Type': 'application/json' },\n      body: '{ \"constructor\": { \"prototype\": { \"foo\": \"bar\" } } }'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n    })\n  })\n})\n/test/fastify-instance.test.js\b?'use strict'\n\nconst t = require('tap')\nconst test = t.test\nconst Fastify = require('..')\nconst {\n  kOptions,\n  kErrorHandler\n} = require('../lib/symbols')\n\ntest('root fastify instance is an object', t => {\n  t.plan(1)\n  t.type(Fastify(), 'object')\n})\n\ntest('fastify instance should contains ajv options', t => {\n  t.plan(1)\n  const fastify = Fastify({\n    ajv: {\n      customOptions: {\n        nullable: false\n      }\n    }\n  })\n  t.same(fastify[kOptions].ajv, {\n    customOptions: {\n      nullable: false\n    },\n    plugins: []\n  })\n})\n\ntest('fastify instance should contains ajv options.plugins nested arrays', t => {\n  t.plan(1)\n  const fastify = Fastify({\n    ajv: {\n      customOptions: {\n        nullable: false\n      },\n      plugins: [[]]\n    }\n  })\n  t.same(fastify[kOptions].ajv, {\n    customOptions: {\n      nullable: false\n    },\n    plugins: [[]]\n  })\n})\n\ntest('fastify instance get invalid ajv options', t => {\n  t.plan(1)\n  t.throws(() => Fastify({\n    ajv: {\n      customOptions: 8\n    }\n  }))\n})\n\ntest('fastify instance get invalid ajv options.plugins', t => {\n  t.plan(1)\n  t.throws(() => Fastify({\n    ajv: {\n      customOptions: {},\n      plugins: 8\n    }\n  }))\n})\n\ntest('fastify instance should contain default errorHandler', t => {\n  t.plan(3)\n  const fastify = Fastify()\n  t.ok(fastify[kErrorHandler].func instanceof Function)\n  t.same(fastify.errorHandler, fastify[kErrorHandler].func)\n  t.same(Object.getOwnPropertyDescriptor(fastify, 'errorHandler').set, undefined)\n})\n\ntest('errorHandler in plugin should be separate from the external one', async t => {\n  t.plan(4)\n  const fastify = Fastify()\n\n  fastify.register((instance, opts, done) => {\n    const inPluginErrHandler = (_, __, reply) => {\n      reply.send({ plugin: 'error-object' })\n    }\n\n    instance.setErrorHandler(inPluginErrHandler)\n\n    t.notSame(instance.errorHandler, fastify.errorHandler)\n    t.equal(instance.errorHandler.name, 'bound inPluginErrHandler')\n\n    done()\n  })\n\n  await fastify.ready()\n\n  t.ok(fastify[kErrorHandler].func instanceof Function)\n  t.same(fastify.errorHandler, fastify[kErrorHandler].func)\n})\n/test/internals/server.test.js\tR'use strict'\n\nconst { test } = require('tap')\nconst proxyquire = require('proxyquire')\n\nconst Fastify = require('../../fastify')\nconst { createServer } = require('../../lib/server')\n\nconst handler = (req, res) => {\n  res.writeHead(200, { 'Content-Type': 'application/json' })\n  res.end(JSON.stringify({ data: 'Hello World!' }))\n}\n\ntest('start listening', async t => {\n  const { server, listen } = createServer({}, handler)\n  await listen.call(Fastify(), { port: 0, host: 'localhost' })\n  server.close()\n  t.pass('server started')\n})\n\ntest('DNS errors does not stop the main server on localhost - promise interface', async t => {\n  const { createServer } = proxyquire('../../lib/server', {\n    dns: {\n      lookup: (hostname, options, cb) => {\n        cb(new Error('DNS error'))\n      }\n    }\n  })\n  const { server, listen } = createServer({}, handler)\n  await listen.call(Fastify(), { port: 0, host: 'localhost' })\n  server.close()\n  t.pass('server started')\n})\n\ntest('DNS errors does not stop the main server on localhost - callback interface', t => {\n  t.plan(2)\n  const { createServer } = proxyquire('../../lib/server', {\n    dns: {\n      lookup: (hostname, options, cb) => {\n        cb(new Error('DNS error'))\n      }\n    }\n  })\n  const { server, listen } = createServer({}, handler)\n  listen.call(Fastify(), { port: 0, host: 'localhost' }, (err) => {\n    t.error(err)\n    server.close()\n    t.pass('server started')\n  })\n})\n\ntest('DNS returns empty binding', t => {\n  t.plan(2)\n  const { createServer } = proxyquire('../../lib/server', {\n    dns: {\n      lookup: (hostname, options, cb) => {\n        cb(null, [])\n      }\n    }\n  })\n  const { server, listen } = createServer({}, handler)\n  listen.call(Fastify(), { port: 0, host: 'localhost' }, (err) => {\n    t.error(err)\n    server.close()\n    t.pass('server started')\n  })\n})\n\ntest('DNS returns more than two binding', t => {\n  t.plan(2)\n  const { createServer } = proxyquire('../../lib/server', {\n    dns: {\n      lookup: (hostname, options, cb) => {\n        cb(null, [\n          { address: '::1', family: 6 },\n          { address: '127.0.0.1', family: 4 },\n          { address: '0.0.0.0', family: 4 }\n        ])\n      }\n    }\n  })\n  const { server, listen } = createServer({}, handler)\n  listen.call(Fastify(), { port: 0, host: 'localhost' }, (err) => {\n    t.error(err)\n    server.close()\n    t.pass('server started')\n  })\n})\n/docs/Guides/Serverless.md5H<h1 align=\"center\">Serverless</h1>\n\nRun serverless applications and REST APIs using your existing Fastify\napplication. By default, Fastify will not work on your serverless platform of\nchoice, you will need to make some small changes to fix this. This document\ncontains a small guide for the most popular serverless providers and how to use\nFastify with them.\n\n#### Should you use Fastify in a serverless platform?\n\nThat is up to you! Keep in mind that functions as a service should always use\nsmall and focused functions, but you can also run an entire web application with\nthem. It is important to remember that the bigger the application the slower the\ninitial boot will be. The best way to run Fastify applications in serverless\nenvironments is to use platforms like Google Cloud Run, AWS Fargate, and Azure\nContainer Instances, where the server can handle multiple requests at the same\ntime and make full use of Fastify's features.\n\nOne of the best features of using Fastify in serverless applications is the ease\nof development. In your local environment, you will always run the Fastify\napplication directly without the need for any additional tools, while the same\ncode will be executed in your serverless platform of choice with an additional\nsnippet of code.\n\n### Contents\n\n- [AWS](#aws)\n- [Google Cloud Functions](#google-cloud-functions)\n- [Google Cloud Run](#google-cloud-run)\n- [Netlify Lambda](#netlify-lambda)\n- [Vercel](#vercel)\n\n## AWS\n\nTo integrate with AWS, you have two choices of library:\n\n- Using [@fastify/aws-lambda](https://github.com/fastify/aws-lambda-fastify) \n  which only adds API Gateway support but has heavy optimizations for fastify.\n- Using [@h4ad/serverless-adapter](https://github.com/H4ad/serverless-adapter) \n  which is a little slower as it creates an HTTP request for each AWS event but \n  has support for more AWS services such as: AWS SQS, AWS SNS and others.\n\nSo you can decide which option is best for you, but you can test both libraries.\n\n### Using @fastify/aws-lambda\n\nThe sample provided allows you to easily build serverless web\napplications/services and RESTful APIs using Fastify on top of AWS Lambda and\nAmazon API Gateway.\n\n#### app.js\n\n```js\nconst fastify = require('fastify');\n\nfunction init() {\n  const app = fastify();\n  app.get('/', (request, reply) => reply.send({ hello: 'world' }));\n  return app;\n}\n\nif (require.main === module) {\n  // called directly i.e. \"node app\"\n  init().listen({ port: 3000 }, (err) => {\n    if (err) console.error(err);\n    console.log('server listening on 3000');\n  });\n} else {\n  // required as a module => executed on aws lambda\n  module.exports = init;\n}\n```\n\nWhen executed in your lambda function we do not need to listen to a specific\nport, so we just export the wrapper function `init` in this case. The\n[`lambda.js`](#lambdajs) file will use this export.\n\nWhen you execute your Fastify application like always, i.e. `node app.js` *(the\ndetection for this could be `require.main === module`)*, you can normally listen\nto your port, so you can still run your Fastify function locally.\n\n#### lambda.js\n\n```js\nconst awsLambdaFastify = require('@fastify/aws-lambda')\nconst init = require('./app');\n\nconst proxy = awsLambdaFastify(init())\n// or\n// const proxy = awsLambdaFastify(init(), { binaryMimeTypes: ['application/octet-stream'] })\n\nexports.handler = proxy;\n// or\n// exports.handler = (event, context, callback) => proxy(event, context, callback);\n// or\n// exports.handler = (event, context) => proxy(event, context);\n// or\n// exports.handler = async (event, context) => proxy(event, context);\n```\n\nWe just require\n[@fastify/aws-lambda](https://github.com/fastify/aws-lambda-fastify) (make sure\nyou install the dependency `npm i @fastify/aws-lambda`) and our\n[`app.js`](#appjs) file and call the exported `awsLambdaFastify` function with\nthe `app` as the only parameter. The resulting `proxy` function has the correct\nsignature to be used as a lambda `handler` function. This way all the incoming\nevents (API Gateway requests) are passed to the `proxy` function of\n[@fastify/aws-lambda](https://github.com/fastify/aws-lambda-fastify).\n\n#### Example\n\nAn example deployable with\n[claudia.js](https://claudiajs.com/tutorials/serverless-express.html) can be\nfound\n[here](https://github.com/claudiajs/example-projects/tree/master/fastify-app-lambda).\n\n### Considerations\n\n- API Gateway does not support streams yet, so you are not able to handle\n  [streams](../Reference/Reply.md#streams).\n- API Gateway has a timeout of 29 seconds, so it is important to provide a reply\n  during this time.\n\n#### Beyond API Gateway\n\nIf you need to integrate with more AWS services, take a look at\n[@h4ad/serverless-adapter](https://viniciusl.com.br/serverless-adapter/docs/main/frameworks/fastify)\non Fastify to find out how to integrate.\n\n## Google Cloud Functions\n\n### Creation of Fastify instance\n```js\nconst fastify = require(\"fastify\")({\n  logger: true // you can also define the level passing an object configuration to logger: {level: 'debug'}\n});\n```\n\n### Add Custom `contentTypeParser` to Fastify instance\n\nAs explained [in issue\n#946](https://github.com/fastify/fastify/issues/946#issuecomment-766319521),\nsince the Google Cloud Functions platform parses the body of the request before\nit arrives at the Fastify instance, troubling the body request in case of `POST`\nand `PATCH` methods, you need to add a custom [`Content-Type\nParser`](../Reference/ContentTypeParser.md) to mitigate this behavior.\n\n```js\nfastify.addContentTypeParser('application/json', {}, (req, body, done) => {\n  done(null, body.body);\n});\n```\n\n### Define your endpoint (examples)\n\nA simple `GET` endpoint:\n```js\nfastify.get('/', async (request, reply) => {\n  reply.send({message: 'Hello World!'})\n})\n```\n\nOr a more complete `POST` endpoint with schema validation:\n```js\nfastify.route({\n  method: 'POST',\n  url: '/hello',\n  schema: {\n    body: {\n      type: 'object',\n      properties: {\n        name: { type: 'string'}\n      },\n      required: ['name']\n    },\n    response: {\n      200: {\n        type: 'object',\n        properties: {\n          message: {type: 'string'}\n        }\n      }\n    },\n  },\n  handler: async (request, reply) => {\n    const { name } = request.body;\n    reply.code(200).send({\n      message: `Hello ${name}!`\n    })\n  }\n})\n```\n\n### Implement and export the function\n\nFinal step, implement the function to handle the request and pass it to Fastify\nby emitting `request` event to `fastify.server`:\n\n```js\nconst fastifyFunction = async (request, reply) => {\n  await fastify.ready();\n  fastify.server.emit('request', request, reply)\n}\n\nexport.fastifyFunction = fastifyFunction;\n```\n\n### Local test\n\nInstall [Google Functions Framework for\nNode.js](https://github.com/GoogleCloudPlatform/functions-framework-nodejs).\n\nYou can install it globally:\n```bash\nnpm i -g @google-cloud/functions-framework\n```\n\nOr as a development library:\n```bash\nnpm i -D @google-cloud/functions-framework\n```\n\nThen you can run your function locally with Functions Framework:\n```bash\nnpx @google-cloud/functions-framework --target=fastifyFunction\n```\n\nOr add this command to your `package.json` scripts:\n```json\n\"scripts\": {\n...\n\"dev\": \"npx @google-cloud/functions-framework --target=fastifyFunction\"\n...\n}\n```\nand run it with `npm run dev`.\n\n\n### Deploy\n```bash\ngcloud functions deploy fastifyFunction \\\n--runtime nodejs14 --trigger-http --region $GOOGLE_REGION --allow-unauthenticated\n```\n\n#### Read logs\n```bash\ngcloud functions logs read\n```\n\n#### Example request to `/hello` endpoint\n```bash\ncurl -X POST https://$GOOGLE_REGION-$GOOGLE_PROJECT.cloudfunctions.net/me \\\n  -H \"Content-Type: application/json\" \\\n  -d '{ \"name\": \"Fastify\" }'\n{\"message\":\"Hello Fastify!\"}\n```\n\n### References\n- [Google Cloud Functions - Node.js Quickstart\n  ](https://cloud.google.com/functions/docs/quickstart-nodejs)\n\n## Google Cloud Run\n\nUnlike AWS Lambda or Google Cloud Functions, Google Cloud Run is a serverless\n**container** environment. Its primary purpose is to provide an\ninfrastructure-abstracted environment to run arbitrary containers. As a result,\nFastify can be deployed to Google Cloud Run with little-to-no code changes from\nthe way you would write your Fastify app normally.\n\n*Follow the steps below to deploy to Google Cloud Run if you are already\nfamiliar with gcloud or just follow their\n[quickstart](https://cloud.google.com/run/docs/quickstarts/build-and-deploy)*.\n\n### Adjust Fastify server\n\nIn order for Fastify to properly listen for requests within the container, be\nsure to set the correct port and address:\n\n```js\nfunction build() {\n  const fastify = Fastify({ trustProxy: true })\n  return fastify\n}\n\nasync function start() {\n  // Google Cloud Run will set this environment variable for you, so\n  // you can also use it to detect if you are running in Cloud Run\n  const IS_GOOGLE_CLOUD_RUN = process.env.K_SERVICE !== undefined\n\n  // You must listen on the port Cloud Run provides\n  const port = process.env.PORT || 3000\n\n  // You must listen on all IPV4 addresses in Cloud Run\n  const host = IS_GOOGLE_CLOUD_RUN ? \"0.0.0.0\" : undefined\n\n  try {\n    const server = build()\n    const address = await server.listen({ port, host })\n    console.log(`Listening on ${address}`)\n  } catch (err) {\n    console.error(err)\n    process.exit(1)\n  }\n}\n\nmodule.exports = build\n\nif (require.main === module) {\n  start()\n}\n```\n\n### Add a Dockerfile\n\nYou can add any valid `Dockerfile` that packages and runs a Node app. A basic\n`Dockerfile` can be found in the official [gcloud\ndocs](https://github.com/knative/docs/blob/2d654d1fd6311750cc57187a86253c52f273d924/docs/serving/samples/hello-world/helloworld-nodejs/Dockerfile).\n\n```Dockerfile\n# Use the official Node.js 10 image.\n# https://hub.docker.com/_/node\nFROM node:10\n\n# Create and change to the app directory.\nWORKDIR /usr/src/app\n\n# Copy application dependency manifests to the container image.\n# A wildcard is used to ensure both package.json AND package-lock.json are copied.\n# Copying this separately prevents re-running npm install on every code change.\nCOPY package*.json ./\n\n# Install production dependencies.\nRUN npm i --production\n\n# Copy local code to the container image.\nCOPY . .\n\n# Run the web service on container startup.\nCMD [ \"npm\", \"start\" ]\n```\n\n### Add a .dockerignore\n\nTo keep build artifacts out of your container (which keeps it small and improves\nbuild times) add a `.dockerignore` file like the one below:\n\n```.dockerignore\nDockerfile\nREADME.md\nnode_modules\nnpm-debug.log\n```\n\n### Submit build\n\nNext, submit your app to be built into a Docker image by running the following\ncommand (replacing `PROJECT-ID` and `APP-NAME` with your GCP project id and an\napp name):\n\n```bash\ngcloud builds submit --tag gcr.io/PROJECT-ID/APP-NAME\n```\n\n### Deploy Image\n\nAfter your image has built, you can deploy it with the following command:\n\n```bash\ngcloud beta run deploy --image gcr.io/PROJECT-ID/APP-NAME --platform managed\n```\n\nYour app will be accessible from the URL GCP provides.\n\n\n## netlify-lambda\n\nFirst, please perform all preparation steps related to **AWS Lambda**.\n\nCreate a folder called `functions`,  then create `server.js` (and your endpoint\npath will be `server.js`) inside the `functions` folder.\n\n### functions/server.js\n\n```js\nexport { handler } from '../lambda.js'; // Change `lambda.js` path to your `lambda.js` path\n```\n\n### netlify.toml\n\n```toml\n[build]\n  # This will be run the site build\n  command = \"npm run build:functions\"\n  # This is the directory is publishing to netlify's CDN\n  # and this is directory of your front of your app\n  # publish = \"build\"\n  # functions build directory\n  functions = \"functions-build\" # always appends `-build` folder to your `functions` folder for builds\n```\n\n### webpack.config.netlify.js\n\n**Do not forget to add this Webpack config, or else problems may occur**\n\n```js\nconst nodeExternals = require('webpack-node-externals');\nconst dotenv = require('dotenv-safe');\nconst webpack = require('webpack');\n\nconst env = process.env.NODE_ENV || 'production';\nconst dev = env === 'development';\n\nif (dev) {\n  dotenv.config({ allowEmptyValues: true });\n}\n\nmodule.exports = {\n  mode: env,\n  devtool: dev ? 'eval-source-map' : 'none',\n  externals: [nodeExternals()],\n  devServer: {\n    proxy: {\n      '/.netlify': {\n        target: 'http://localhost:9000',\n        pathRewrite: { '^/.netlify/functions': '' }\n      }\n    }\n  },\n  module: {\n    rules: []\n  },\n  plugins: [\n    new webpack.DefinePlugin({\n      'process.env.APP_ROOT_PATH': JSON.stringify('/'),\n      'process.env.NETLIFY_ENV': true,\n      'process.env.CONTEXT': env\n    })\n  ]\n};\n```\n\n### Scripts\n\nAdd this command to your `package.json` *scripts*\n\n```json\n\"scripts\": {\n...\n\"build:functions\": \"netlify-lambda build functions --config ./webpack.config.netlify.js\"\n...\n}\n```\n\nThen it should work fine\n\n\n## Vercel\n\n[Vercel](https://vercel.com) provides zero-configuration deployment for Node.js\napplications. To use it now, it is as simple as configuring your `vercel.json`\nfile like the following:\n\n```json\n{\n    \"rewrites\": [\n        {\n            \"source\": \"/(.*)\",\n            \"destination\": \"/api/serverless.js\"\n        }\n    ]\n}\n```\n\nThen, write `api/serverless.js` like so:\n\n```js\n\"use strict\";\n\n// Read the .env file.\nimport * as dotenv from \"dotenv\";\ndotenv.config();\n\n// Require the framework\nimport Fastify from \"fastify\";\n\n// Instantiate Fastify with some config\nconst app = Fastify({\n  logger: true,\n});\n\n// Register your application as a normal plugin.\napp.register(import(\"../src/app\"));\n\nexport default async (req, res) => {\n    await app.ready();\n    app.server.emit('request', req, res);\n}\n```\n,/docs/resources/encapsulation_context.drawio\u0005\u0012<mxfile host=\"app.diagrams.net\" modified=\"2020-12-06T18:51:58.018Z\" agent=\"5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36\" etag=\"vyaguDTT1c9e-NqGeV_7\" version=\"13.10.9\" type=\"device\"><diagram id=\"hZ89Y7exsLGRT07QCK17\" name=\"Page-1\">7ZpPk5owGMY/jcd2SCKIx0q3todOO+thjzsRAmQ2Eopx1f30DRKUNLCrncXN6uKMA0/+EN5feJNndICCxWZa4Dz9ySPCBtCJNgP0dQDhaDiS36WwrQQfOJWQFDSqJHAQZvSJKLGutqIRWWoVBedM0FwXQ55lJBSahouCr/VqMWf6XXOcEEOYhZiZ6h2NRKqewnUO+ndCk7S+M3BUyQLXlZWwTHHE1w0J3QxQUHAuqrPFJiCsjF0dl6rdt47S/cAKkoljGjyhO8+Z3U9YQP3bP1PHvc9+fFK9PGK2Ug98Ww4IOgHPBNkINXSxreOxTqkgsxyH5fVaIh+gSSoWTF4BeYqXeUUhphsibzyJKWMBZ7zYNUexW36k/kgKQWWYvzCaZLJM8LKngq+yqGy362wpCv5AGq293VH2KkfX0KtD6mZM6geUtyObhqRiNCV8QUSxlVVU6VDh2uqX6wN8d6y0tAF+L2I14ZJ9zwcm8kRhOQER6kL0m60SmhmE5DzLy9O84CFZytFMXmA2x+FDsov8r5VgNCNK12H8CzKOYRi2QYq8ued6rwMDOq5Gwzdp+C0wUF8shtfMYmwXC/eKWSDfLhbATFJG/MtQ5sc/+35Jx/O6B+fZmABPz9wAmUFBXktU+guLZ0QlSKncgHQvr/rcemGCdk299rX1lAn5POSXp+nbhXzUGfI3TQsRJn7cmha80CfzuBcKdan+XrS8FmfNFf4HIZOQXYjGBiJp7rIo7DF57cN/ZPLqHwrUmdQrbjO1wRYoALp9LbKOnW8OAZFLRm2Qxt4I4X5WmNqtjT7rOyEA3norZFrqq6cEkH2Y4AcmI+MhaB0m03EbYM5tLFCL2zrzLheY5vddO4thByubnAXodnOXsnE9HoOd1gJcvvv7D0SWMTL93/s3FydTsc9cmJ7PilfnFfdDJ0Oyz1zAy7eApyc4+8wFvHwPeHrGO6e5kJeHH9Z3ZY1/J6Cbvw==</diagram></mxfile>/examples/route-prefix.js\u0002'use strict'\n\nconst fastify = require('../fastify')({ logger: true })\n\nconst opts = {\n  schema: {\n    response: {\n      '2xx': {\n        type: 'object',\n        properties: {\n          greet: { type: 'string' }\n        }\n      }\n    }\n  }\n}\n\nfastify.register(function (instance, options, done) {\n  // the route will be '/english/hello'\n  instance.get('/hello', opts, (req, reply) => {\n    reply.send({ greet: 'hello' })\n  })\n  done()\n}, { prefix: '/english' })\n\nfastify.register(function (instance, options, done) {\n  // the route will be '/italian/hello'\n  instance.get('/hello', opts, (req, reply) => {\n    reply.send({ greet: 'ciao' })\n  })\n  done()\n}, { prefix: '/italian' })\n\nfastify.listen({ port: 8000 }, function (err) {\n  if (err) {\n    throw err\n  }\n})\n/test/route-prefix.test.jsHy'use strict'\n\nconst t = require('tap')\nconst test = t.test\nconst Fastify = require('..')\n\ntest('Prefix options should add a prefix for all the routes inside a register / 1', t => {\n  t.plan(6)\n  const fastify = Fastify()\n\n  fastify.get('/first', (req, reply) => {\n    reply.send({ route: '/first' })\n  })\n\n  fastify.register(function (fastify, opts, done) {\n    fastify.get('/first', (req, reply) => {\n      reply.send({ route: '/v1/first' })\n    })\n\n    fastify.register(function (fastify, opts, done) {\n      fastify.get('/first', (req, reply) => {\n        reply.send({ route: '/v1/v2/first' })\n      })\n      done()\n    }, { prefix: '/v2' })\n\n    done()\n  }, { prefix: '/v1' })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/first'\n  }, (err, res) => {\n    t.error(err)\n    t.same(JSON.parse(res.payload), { route: '/first' })\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/v1/first'\n  }, (err, res) => {\n    t.error(err)\n    t.same(JSON.parse(res.payload), { route: '/v1/first' })\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/v1/v2/first'\n  }, (err, res) => {\n    t.error(err)\n    t.same(JSON.parse(res.payload), { route: '/v1/v2/first' })\n  })\n})\n\ntest('Prefix options should add a prefix for all the routes inside a register / 2', t => {\n  t.plan(4)\n  const fastify = Fastify()\n\n  fastify.register(function (fastify, opts, done) {\n    fastify.get('/first', (req, reply) => {\n      reply.send({ route: '/v1/first' })\n    })\n\n    fastify.get('/second', (req, reply) => {\n      reply.send({ route: '/v1/second' })\n    })\n    done()\n  }, { prefix: '/v1' })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/v1/first'\n  }, (err, res) => {\n    t.error(err)\n    t.same(JSON.parse(res.payload), { route: '/v1/first' })\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/v1/second'\n  }, (err, res) => {\n    t.error(err)\n    t.same(JSON.parse(res.payload), { route: '/v1/second' })\n  })\n})\n\ntest('Prefix options should add a prefix for all the chained routes inside a register / 3', t => {\n  t.plan(4)\n\n  const fastify = Fastify()\n\n  fastify.register(function (fastify, opts, done) {\n    fastify\n      .get('/first', (req, reply) => {\n        reply.send({ route: '/v1/first' })\n      })\n      .get('/second', (req, reply) => {\n        reply.send({ route: '/v1/second' })\n      })\n    done()\n  }, { prefix: '/v1' })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/v1/first'\n  }, (err, res) => {\n    t.error(err)\n    t.same(JSON.parse(res.payload), { route: '/v1/first' })\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/v1/second'\n  }, (err, res) => {\n    t.error(err)\n    t.same(JSON.parse(res.payload), { route: '/v1/second' })\n  })\n})\n\ntest('Prefix should support parameters as well', t => {\n  t.plan(2)\n  const fastify = Fastify()\n\n  fastify.register(function (fastify, opts, done) {\n    fastify.get('/hello', (req, reply) => {\n      reply.send({ id: req.params.id })\n    })\n    done()\n  }, { prefix: '/v1/:id' })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/v1/param/hello'\n  }, (err, res) => {\n    t.error(err)\n    t.same(JSON.parse(res.payload), { id: 'param' })\n  })\n})\n\ntest('Prefix should support /', t => {\n  t.plan(2)\n  const fastify = Fastify()\n\n  fastify.register(function (fastify, opts, done) {\n    fastify.get('/', (req, reply) => {\n      reply.send({ hello: 'world' })\n    })\n    done()\n  }, { prefix: '/v1' })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/v1'\n  }, (err, res) => {\n    t.error(err)\n    t.same(JSON.parse(res.payload), { hello: 'world' })\n  })\n})\n\ntest('Prefix without /', t => {\n  t.plan(2)\n  const fastify = Fastify()\n\n  fastify.register(function (fastify, opts, done) {\n    fastify.get('/', (req, reply) => {\n      reply.send({ hello: 'world' })\n    })\n    done()\n  }, { prefix: 'v1' })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/v1'\n  }, (err, res) => {\n    t.error(err)\n    t.same(JSON.parse(res.payload), { hello: 'world' })\n  })\n})\n\ntest('Prefix with trailing /', t => {\n  t.plan(6)\n  const fastify = Fastify()\n\n  fastify.register(function (fastify, opts, done) {\n    fastify.get('/route1', (req, reply) => {\n      reply.send({ hello: 'world1' })\n    })\n    fastify.get('route2', (req, reply) => {\n      reply.send({ hello: 'world2' })\n    })\n\n    fastify.register(function (fastify, opts, done) {\n      fastify.get('/route3', (req, reply) => {\n        reply.send({ hello: 'world3' })\n      })\n      done()\n    }, { prefix: '/inner/' })\n\n    done()\n  }, { prefix: '/v1/' })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/v1/route1'\n  }, (err, res) => {\n    t.error(err)\n    t.same(JSON.parse(res.payload), { hello: 'world1' })\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/v1/route2'\n  }, (err, res) => {\n    t.error(err)\n    t.same(JSON.parse(res.payload), { hello: 'world2' })\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/v1/inner/route3'\n  }, (err, res) => {\n    t.error(err)\n    t.same(JSON.parse(res.payload), { hello: 'world3' })\n  })\n})\n\ntest('Prefix works multiple levels deep', t => {\n  t.plan(2)\n  const fastify = Fastify()\n\n  fastify.register(function (fastify, opts, done) {\n    fastify.register(function (fastify, opts, done) {\n      fastify.register(function (fastify, opts, done) {\n        fastify.register(function (fastify, opts, done) {\n          fastify.get('/', (req, reply) => {\n            reply.send({ hello: 'world' })\n          })\n          done()\n        }, { prefix: '/v3' })\n        done()\n      }) // No prefix on this level\n      done()\n    }, { prefix: 'v2' })\n    done()\n  }, { prefix: '/v1' })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/v1/v2/v3'\n  }, (err, res) => {\n    t.error(err)\n    t.same(JSON.parse(res.payload), { hello: 'world' })\n  })\n})\n\ntest('Different register - encapsulation check', t => {\n  t.plan(4)\n  const fastify = Fastify()\n\n  fastify.get('/first', (req, reply) => {\n    reply.send({ route: '/first' })\n  })\n\n  fastify.register(function (instance, opts, done) {\n    instance.register(function (f, opts, done) {\n      f.get('/', (req, reply) => {\n        reply.send({ route: '/v1/v2' })\n      })\n      done()\n    }, { prefix: '/v2' })\n    done()\n  }, { prefix: '/v1' })\n\n  fastify.register(function (instance, opts, done) {\n    instance.register(function (f, opts, done) {\n      f.get('/', (req, reply) => {\n        reply.send({ route: '/v3/v4' })\n      })\n      done()\n    }, { prefix: '/v4' })\n    done()\n  }, { prefix: '/v3' })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/v1/v2'\n  }, (err, res) => {\n    t.error(err)\n    t.same(JSON.parse(res.payload), { route: '/v1/v2' })\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/v3/v4'\n  }, (err, res) => {\n    t.error(err)\n    t.same(JSON.parse(res.payload), { route: '/v3/v4' })\n  })\n})\n\ntest('Can retrieve prefix within encapsulated instances', t => {\n  t.plan(4)\n  const fastify = Fastify()\n\n  fastify.register(function (instance, opts, done) {\n    instance.get('/one', function (req, reply) {\n      reply.send(instance.prefix)\n    })\n\n    instance.register(function (instance, opts, done) {\n      instance.get('/two', function (req, reply) {\n        reply.send(instance.prefix)\n      })\n      done()\n    }, { prefix: '/v2' })\n\n    done()\n  }, { prefix: '/v1' })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/v1/one'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.payload, '/v1')\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/v1/v2/two'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.payload, '/v1/v2')\n  })\n})\n\ntest('matches both /prefix and /prefix/ with a / route', t => {\n  t.plan(4)\n  const fastify = Fastify()\n\n  fastify.register(function (fastify, opts, done) {\n    fastify.get('/', (req, reply) => {\n      reply.send({ hello: 'world' })\n    })\n\n    done()\n  }, { prefix: '/prefix' })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/prefix'\n  }, (err, res) => {\n    t.error(err)\n    t.same(JSON.parse(res.payload), { hello: 'world' })\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/prefix/'\n  }, (err, res) => {\n    t.error(err)\n    t.same(JSON.parse(res.payload), { hello: 'world' })\n  })\n})\n\ntest('prefix \"/prefix/\" does not match \"/prefix\" with a / route', t => {\n  t.plan(4)\n  const fastify = Fastify()\n\n  fastify.register(function (fastify, opts, done) {\n    fastify.get('/', (req, reply) => {\n      reply.send({ hello: 'world' })\n    })\n\n    done()\n  }, { prefix: '/prefix/' })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/prefix'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 404)\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/prefix/'\n  }, (err, res) => {\n    t.error(err)\n    t.same(JSON.parse(res.payload), { hello: 'world' })\n  })\n})\n\ntest('matches both /prefix and /prefix/ with a / route - ignoreTrailingSlash: true', t => {\n  t.plan(4)\n  const fastify = Fastify({\n    ignoreTrailingSlash: true\n  })\n\n  fastify.register(function (fastify, opts, done) {\n    fastify.get('/', (req, reply) => {\n      reply.send({ hello: 'world' })\n    })\n\n    done()\n  }, { prefix: '/prefix' })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/prefix'\n  }, (err, res) => {\n    t.error(err)\n    t.same(JSON.parse(res.payload), { hello: 'world' })\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/prefix/'\n  }, (err, res) => {\n    t.error(err)\n    t.same(JSON.parse(res.payload), { hello: 'world' })\n  })\n})\n\ntest('matches both /prefix and /prefix/ with a / route - ignoreDuplicateSlashes: true', t => {\n  t.plan(4)\n  const fastify = Fastify({\n    ignoreDuplicateSlashes: true\n  })\n\n  fastify.register(function (fastify, opts, done) {\n    fastify.get('/', (req, reply) => {\n      reply.send({ hello: 'world' })\n    })\n\n    done()\n  }, { prefix: '/prefix' })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/prefix'\n  }, (err, res) => {\n    t.error(err)\n    t.same(JSON.parse(res.payload), { hello: 'world' })\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/prefix/'\n  }, (err, res) => {\n    t.error(err)\n    t.same(JSON.parse(res.payload), { hello: 'world' })\n  })\n})\n\ntest('matches both /prefix and /prefix/  with a / route - prefixTrailingSlash: \"both\", ignoreTrailingSlash: false', t => {\n  t.plan(4)\n  const fastify = Fastify({\n    ignoreTrailingSlash: false\n  })\n\n  fastify.register(function (fastify, opts, done) {\n    fastify.route({\n      method: 'GET',\n      url: '/',\n      prefixTrailingSlash: 'both',\n      handler: (req, reply) => {\n        reply.send({ hello: 'world' })\n      }\n    })\n\n    done()\n  }, { prefix: '/prefix' })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/prefix'\n  }, (err, res) => {\n    t.error(err)\n    t.same(JSON.parse(res.payload), { hello: 'world' })\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/prefix/'\n  }, (err, res) => {\n    t.error(err)\n    t.same(JSON.parse(res.payload), { hello: 'world' })\n  })\n})\n\ntest('matches both /prefix and /prefix/  with a / route - prefixTrailingSlash: \"both\", ignoreDuplicateSlashes: false', t => {\n  t.plan(4)\n  const fastify = Fastify({\n    ignoreDuplicateSlashes: false\n  })\n\n  fastify.register(function (fastify, opts, done) {\n    fastify.route({\n      method: 'GET',\n      url: '/',\n      prefixTrailingSlash: 'both',\n      handler: (req, reply) => {\n        reply.send({ hello: 'world' })\n      }\n    })\n\n    done()\n  }, { prefix: '/prefix' })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/prefix'\n  }, (err, res) => {\n    t.error(err)\n    t.same(JSON.parse(res.payload), { hello: 'world' })\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/prefix/'\n  }, (err, res) => {\n    t.error(err)\n    t.same(JSON.parse(res.payload), { hello: 'world' })\n  })\n})\n\ntest('matches both /prefix and /prefix/ with a / route - ignoreTrailingSlash: true, ignoreDuplicateSlashes: true', t => {\n  t.plan(4)\n  const fastify = Fastify({\n    ignoreTrailingSlash: true,\n    ignoreDuplicateSlashes: true\n  })\n\n  fastify.register(function (fastify, opts, done) {\n    fastify.get('/', (req, reply) => {\n      reply.send({ hello: 'world' })\n    })\n\n    done()\n  }, { prefix: '/prefix' })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/prefix'\n  }, (err, res) => {\n    t.error(err)\n    t.same(JSON.parse(res.payload), { hello: 'world' })\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/prefix/'\n  }, (err, res) => {\n    t.error(err)\n    t.same(JSON.parse(res.payload), { hello: 'world' })\n  })\n})\n\ntest('matches both /prefix and /prefix/ with a / route - ignoreTrailingSlash: true, ignoreDuplicateSlashes: false', t => {\n  t.plan(4)\n  const fastify = Fastify({\n    ignoreTrailingSlash: true,\n    ignoreDuplicateSlashes: false\n  })\n\n  fastify.register(function (fastify, opts, done) {\n    fastify.get('/', (req, reply) => {\n      reply.send({ hello: 'world' })\n    })\n\n    done()\n  }, { prefix: '/prefix' })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/prefix'\n  }, (err, res) => {\n    t.error(err)\n    t.same(JSON.parse(res.payload), { hello: 'world' })\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/prefix/'\n  }, (err, res) => {\n    t.error(err)\n    t.same(JSON.parse(res.payload), { hello: 'world' })\n  })\n})\n\ntest('returns 404 status code with /prefix/ and / route - prefixTrailingSlash: \"both\" (default), ignoreTrailingSlash: true', t => {\n  t.plan(2)\n  const fastify = Fastify({\n    ignoreTrailingSlash: true\n  })\n\n  fastify.register(function (fastify, opts, done) {\n    fastify.route({\n      method: 'GET',\n      url: '/',\n      handler: (req, reply) => {\n        reply.send({ hello: 'world' })\n      }\n    })\n\n    done()\n  }, { prefix: '/prefix/' })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/prefix//'\n  }, (err, res) => {\n    t.error(err)\n    t.same(JSON.parse(res.payload), {\n      error: 'Not Found',\n      message: 'Route GET:/prefix// not found',\n      statusCode: 404\n    })\n  })\n})\n\ntest('matches both /prefix and /prefix/  with a / route - prefixTrailingSlash: \"both\", ignoreDuplicateSlashes: true', t => {\n  t.plan(2)\n  const fastify = Fastify({\n    ignoreDuplicateSlashes: true\n  })\n\n  fastify.register(function (fastify, opts, done) {\n    fastify.route({\n      method: 'GET',\n      url: '/',\n      handler: (req, reply) => {\n        reply.send({ hello: 'world' })\n      }\n    })\n\n    done()\n  }, { prefix: '/prefix/' })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/prefix//'\n  }, (err, res) => {\n    t.error(err)\n    t.same(JSON.parse(res.payload), { hello: 'world' })\n  })\n})\n\ntest('matches both /prefix and /prefix/  with a / route - prefixTrailingSlash: \"both\", ignoreTrailingSlash: true, ignoreDuplicateSlashes: true', t => {\n  t.plan(2)\n  const fastify = Fastify({\n    ignoreTrailingSlash: true,\n    ignoreDuplicateSlashes: true\n  })\n\n  fastify.register(function (fastify, opts, done) {\n    fastify.route({\n      method: 'GET',\n      url: '/',\n      handler: (req, reply) => {\n        reply.send({ hello: 'world' })\n      }\n    })\n\n    done()\n  }, { prefix: '/prefix/' })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/prefix//'\n  }, (err, res) => {\n    t.error(err)\n    t.same(JSON.parse(res.payload), { hello: 'world' })\n  })\n})\n\ntest('matches both /prefix and /prefix/  with a / route - prefixTrailingSlash: \"both\", ignoreDuplicateSlashes: true', t => {\n  t.plan(2)\n  const fastify = Fastify({\n    ignoreTrailingSlash: true,\n    ignoreDuplicateSlashes: true\n  })\n\n  fastify.register(function (fastify, opts, done) {\n    fastify.route({\n      method: 'GET',\n      url: '/',\n      handler: (req, reply) => {\n        reply.send({ hello: 'world' })\n      }\n    })\n\n    done()\n  }, { prefix: '/prefix/' })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/prefix//'\n  }, (err, res) => {\n    t.error(err)\n    t.same(JSON.parse(res.payload), { hello: 'world' })\n  })\n})\n\ntest('matches only /prefix  with a / route - prefixTrailingSlash: \"no-slash\", ignoreTrailingSlash: false', t => {\n  t.plan(4)\n  const fastify = Fastify({\n    ignoreTrailingSlash: false\n  })\n\n  fastify.register(function (fastify, opts, done) {\n    fastify.route({\n      method: 'GET',\n      url: '/',\n      prefixTrailingSlash: 'no-slash',\n      handler: (req, reply) => {\n        reply.send({ hello: 'world' })\n      }\n    })\n\n    done()\n  }, { prefix: '/prefix' })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/prefix'\n  }, (err, res) => {\n    t.error(err)\n    t.same(JSON.parse(res.payload), { hello: 'world' })\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/prefix/'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(JSON.parse(res.payload).statusCode, 404)\n  })\n})\n\ntest('matches only /prefix  with a / route - prefixTrailingSlash: \"no-slash\", ignoreDuplicateSlashes: false', t => {\n  t.plan(4)\n  const fastify = Fastify({\n    ignoreDuplicateSlashes: false\n  })\n\n  fastify.register(function (fastify, opts, done) {\n    fastify.route({\n      method: 'GET',\n      url: '/',\n      prefixTrailingSlash: 'no-slash',\n      handler: (req, reply) => {\n        reply.send({ hello: 'world' })\n      }\n    })\n\n    done()\n  }, { prefix: '/prefix' })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/prefix'\n  }, (err, res) => {\n    t.error(err)\n    t.same(JSON.parse(res.payload), { hello: 'world' })\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/prefix/'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(JSON.parse(res.payload).statusCode, 404)\n  })\n})\n\ntest('matches only /prefix/  with a / route - prefixTrailingSlash: \"slash\", ignoreTrailingSlash: false', t => {\n  t.plan(4)\n  const fastify = Fastify({\n    ignoreTrailingSlash: false\n  })\n\n  fastify.register(function (fastify, opts, done) {\n    fastify.route({\n      method: 'GET',\n      url: '/',\n      prefixTrailingSlash: 'slash',\n      handler: (req, reply) => {\n        reply.send({ hello: 'world' })\n      }\n    })\n\n    done()\n  }, { prefix: '/prefix' })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/prefix/'\n  }, (err, res) => {\n    t.error(err)\n    t.same(JSON.parse(res.payload), { hello: 'world' })\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/prefix'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(JSON.parse(res.payload).statusCode, 404)\n  })\n})\n\ntest('calls onRoute only once when prefixing', async t => {\n  t.plan(1)\n  const fastify = Fastify({\n    ignoreTrailingSlash: false,\n    exposeHeadRoutes: false\n  })\n\n  let onRouteCalled = 0\n  fastify.register(function (fastify, opts, next) {\n    fastify.addHook('onRoute', () => {\n      onRouteCalled++\n    })\n\n    fastify.route({\n      method: 'GET',\n      url: '/',\n      prefixTrailingSlash: 'both',\n      handler: (req, reply) => {\n        reply.send({ hello: 'world' })\n      }\n    })\n\n    next()\n  }, { prefix: '/prefix' })\n\n  await fastify.ready()\n\n  t.same(onRouteCalled, 1)\n})\n/test/bundler/README.md\u0005\u0001# Bundlers test stack\n\nIn some cases, developers bundle their apps for several targets such as serverless applications. \nEven if it's not recommended by Fastify team; we need to ensure we do not break the build process. \nPlease note this might result in features behaving differently, like the version handling check for plugins.\n\n## Test bundlers\n\nThe bundler test stack has been defined separately from the rest of the Unit testing stack because it's not a \npart of the fastify lib itself. Note that the tests run in CI only on NodeJs LTS version.\nDevelopers do not need to install every bundler to run unit tests.\n\nTo run the bundler tests you will need to install the repository dependencies followed by the bundler\nstack dependencies. See:\n\n```bash\n  # path: root of repository /fastify\n  npm i\n  cd test/bundler/webpack\n  npm i\n  npm run test # test command runs bundle before of starting the test\n```\n\n## Bundler test development\n\nTo not break the fastify unit testing stack please name test files like this `*-test.js` and not `*.test.js`, \notherwise it will be targeted by the regular expression used for unit tests for fastify.\nTests need to ensure the build process works and the fastify application can be run, \nno need to go in deep testing unless an issue is raised.\n/lib/schemas.js\u0018g'use strict'\n\nconst fastClone = require('rfdc')({ circles: false, proto: true })\nconst { kSchemaVisited, kSchemaResponse } = require('./symbols')\nconst kFluentSchema = Symbol.for('fluent-schema-object')\n\nconst {\n  FST_ERR_SCH_MISSING_ID,\n  FST_ERR_SCH_ALREADY_PRESENT,\n  FST_ERR_SCH_DUPLICATE,\n  FST_ERR_SCH_CONTENT_MISSING_SCHEMA\n} = require('./errors')\n\nconst SCHEMAS_SOURCE = ['params', 'body', 'querystring', 'query', 'headers']\n\nfunction Schemas (initStore) {\n  this.store = initStore || {}\n}\n\nSchemas.prototype.add = function (inputSchema) {\n  const schema = fastClone((inputSchema.isFluentSchema || inputSchema.isFluentJSONSchema || inputSchema[kFluentSchema])\n    ? inputSchema.valueOf()\n    : inputSchema\n  )\n\n  // devs can add schemas without $id, but with $def instead\n  const id = schema.$id\n  if (!id) {\n    throw new FST_ERR_SCH_MISSING_ID()\n  }\n\n  if (this.store[id]) {\n    throw new FST_ERR_SCH_ALREADY_PRESENT(id)\n  }\n\n  this.store[id] = schema\n}\n\nSchemas.prototype.getSchemas = function () {\n  return Object.assign({}, this.store)\n}\n\nSchemas.prototype.getSchema = function (schemaId) {\n  return this.store[schemaId]\n}\n\nfunction normalizeSchema (routeSchemas, serverOptions) {\n  if (routeSchemas[kSchemaVisited]) {\n    return routeSchemas\n  }\n\n  // alias query to querystring schema\n  if (routeSchemas.query) {\n    // check if our schema has both querystring and query\n    if (routeSchemas.querystring) {\n      throw new FST_ERR_SCH_DUPLICATE('querystring')\n    }\n    routeSchemas.querystring = routeSchemas.query\n  }\n\n  generateFluentSchema(routeSchemas)\n\n  // let's check if our schemas have a custom prototype\n  for (const key of ['headers', 'querystring', 'params', 'body']) {\n    if (typeof routeSchemas[key] === 'object' && Object.getPrototypeOf(routeSchemas[key]) !== Object.prototype) {\n      routeSchemas[kSchemaVisited] = true\n      return routeSchemas\n    }\n  }\n\n  if (routeSchemas.body) {\n    routeSchemas.body = getSchemaAnyway(routeSchemas.body, serverOptions.jsonShorthand)\n  }\n\n  if (routeSchemas.headers) {\n    routeSchemas.headers = getSchemaAnyway(routeSchemas.headers, serverOptions.jsonShorthand)\n  }\n\n  if (routeSchemas.querystring) {\n    routeSchemas.querystring = getSchemaAnyway(routeSchemas.querystring, serverOptions.jsonShorthand)\n  }\n\n  if (routeSchemas.params) {\n    routeSchemas.params = getSchemaAnyway(routeSchemas.params, serverOptions.jsonShorthand)\n  }\n\n  if (routeSchemas.response) {\n    const httpCodes = Object.keys(routeSchemas.response)\n    for (const code of httpCodes) {\n      const contentProperty = routeSchemas.response[code].content\n\n      let hasContentMultipleContentTypes = false\n      if (contentProperty) {\n        const keys = Object.keys(contentProperty)\n        for (let i = 0; i < keys.length; i++) {\n          const mediaName = keys[i]\n          if (!contentProperty[mediaName].schema) {\n            if (keys.length === 1) { break }\n            throw new FST_ERR_SCH_CONTENT_MISSING_SCHEMA(mediaName)\n          }\n          routeSchemas.response[code].content[mediaName].schema = getSchemaAnyway(contentProperty[mediaName].schema, serverOptions.jsonShorthand)\n          if (i === keys.length - 1) {\n            hasContentMultipleContentTypes = true\n          }\n        }\n      }\n\n      if (!hasContentMultipleContentTypes) {\n        routeSchemas.response[code] = getSchemaAnyway(routeSchemas.response[code], serverOptions.jsonShorthand)\n      }\n    }\n  }\n\n  routeSchemas[kSchemaVisited] = true\n  return routeSchemas\n}\n\nfunction generateFluentSchema (schema) {\n  for (const key of SCHEMAS_SOURCE) {\n    if (schema[key] && (schema[key].isFluentSchema || schema[key][kFluentSchema])) {\n      schema[key] = schema[key].valueOf()\n    }\n  }\n\n  if (schema.response) {\n    const httpCodes = Object.keys(schema.response)\n    for (const code of httpCodes) {\n      if (schema.response[code].isFluentSchema || schema.response[code][kFluentSchema]) {\n        schema.response[code] = schema.response[code].valueOf()\n      }\n    }\n  }\n}\n\nfunction getSchemaAnyway (schema, jsonShorthand) {\n  if (!jsonShorthand || schema.$ref || schema.oneOf || schema.allOf || schema.anyOf || schema.$merge || schema.$patch) return schema\n  if (!schema.type && !schema.properties) {\n    return {\n      type: 'object',\n      properties: schema\n    }\n  }\n  return schema\n}\n\n/**\n * Search for the right JSON schema compiled function in the request context\n * setup by the route configuration `schema.response`.\n * It will look for the exact match (eg 200) or generic (eg 2xx)\n *\n * @param {object} context the request context\n * @param {number} statusCode the http status code\n * @param {string} contentType the reply content type\n * @returns {function|boolean} the right JSON Schema function to serialize\n * the reply or false if it is not set\n */\nfunction getSchemaSerializer (context, statusCode, contentType) {\n  const responseSchemaDef = context[kSchemaResponse]\n  if (!responseSchemaDef) {\n    return false\n  }\n  if (responseSchemaDef[statusCode]) {\n    if (responseSchemaDef[statusCode].constructor === Object && contentType) {\n      const mediaName = contentType.split(';')[0]\n      if (responseSchemaDef[statusCode][mediaName]) {\n        return responseSchemaDef[statusCode][mediaName]\n      }\n\n      return false\n    }\n    return responseSchemaDef[statusCode]\n  }\n  const fallbackStatusCode = (statusCode + '')[0] + 'xx'\n  if (responseSchemaDef[fallbackStatusCode]) {\n    if (responseSchemaDef[fallbackStatusCode].constructor === Object && contentType) {\n      const mediaName = contentType.split(';')[0]\n      if (responseSchemaDef[fallbackStatusCode][mediaName]) {\n        return responseSchemaDef[fallbackStatusCode][mediaName]\n      }\n\n      return false\n    }\n\n    return responseSchemaDef[fallbackStatusCode]\n  }\n  if (responseSchemaDef.default) {\n    if (responseSchemaDef.default.constructor === Object && contentType) {\n      const mediaName = contentType.split(';')[0]\n      if (responseSchemaDef.default[mediaName]) {\n        return responseSchemaDef.default[mediaName]\n      }\n\n      return false\n    }\n\n    return responseSchemaDef.default\n  }\n  return false\n}\n\nmodule.exports = {\n  buildSchemas (initStore) { return new Schemas(initStore) },\n  getSchemaSerializer,\n  normalizeSchema\n}\n#/docs/Guides/Prototype-Poisoning.mdH> The following is an article written by Eran Hammer.\n> It is reproduced here for posterity [with permission](https://github.com/fastify/fastify/issues/1426#issuecomment-817957913).\n> It has been reformatted from the original HTML source to Markdown source,\n> but otherwise remains the same. The original HTML can be retrieved from the\n> above permission link.\n\n## A Tale of (prototype) Poisoning\n<a id=\"pp\"></a>\n\nThis story is a behind-the-scenes look at the process and drama created by a\nparticularity interesting web security issue. It is also a perfect illustration\nof the efforts required to maintain popular pieces of open source software and\nthe limitations of existing communication channels.\n\nBut first, if you use a JavaScript framework to process incoming JSON data, take\na moment to read up on [Prototype\nPoisoning](https://medium.com/intrinsic/javascript-prototype-poisoning-vulnerabilities-in-the-wild-7bc15347c96)\nin general, and the specific [technical\ndetails](https://github.com/hapijs/hapi/issues/3916) of this issue. I'll explain\nit all in a bit, but since this could be a critical issue, you might want to\nverify your own code first. While this story is focused on a specific framework,\nany solution that uses `JSON.parse()` to process external data is potentially at\nrisk.\n\n### BOOM\n<a id=\"pp-boom\"></a>\n\nOur story begins with a bang.\n\nThe engineering team at Lob (long time generous supporters of my work!) reported\na critical security vulnerability they identified in our data validation\nmodule — [joi](https://github.com/hapijs/joi). They provided some technical\ndetails and a proposed solution.\n\nThe main purpose of a data validation library is to ensure the output fully\ncomplies with the rules defined. If it doesn't, validation fails. If it passes,\nyour can blindly trust that the data you are working with is safe. In fact, most\ndevelopers treat validated input as completely safe from a system integrity\nperspective. This is crucial.\n\nIn our case, the Lob team provided an example where some data was able to sneak\nby the validation logic and pass through undetected. This is the worst possible\ndefect a validation library can have.\n\n### Prototype in a nutshell\n<a id=\"pp-nutshell\"></a>\n\nTo understand this story, you need to understand how JavaScript works a bit.\nEvery object in JavaScript can have a prototype. It is a set of methods and\nproperties it \"inherits\" from another object. I put inherits in quotes because\nJavaScript isn't really an object oriented language.\n\nA long time ago, for a bunch of irrelevant reasons, someone decided that it\nwould be a good idea to use the special property name `__proto__` to access (and\nset) an object's prototype. This has since been deprecated but nevertheless,\nfully supported.\n\nTo demonstrate:\n\n```\n> const a = { b: 5 };\n> a.b;\n5\n> a.__proto__ = { c: 6 };\n> a.c;\n6\n> a;\n{ b: 5 }\n```\n\nAs you can see, the object doesn't have a `c` property, but its prototype does.\nWhen validating the object, the validation library ignores the prototype and\nonly validates the object's own properties. This allows `c` to sneak in via the\nprototype.\n\nAnother important part of this story is the way `JSON.parse()` — a utility\nprovided by the language to convert JSON formatted text into objects  —  handles\nthis magic `__proto__` property name.\n\n```\n> const text = '{ \"b\": 5, \"__proto__\": { \"c\": 6 } }';\n> const a = JSON.parse(text);\n> a;\n{ b: 5, __proto__: { c: 6 } }\n```\n\nNotice how `a` has a `__proto__` property. This is not a prototype reference. It\nis a simple object property key, just like `b`. As we've seen from the first\nexample, we can't actually create this key through assignment as that invokes\nthe prototype magic and sets an actual prototype. `JSON.parse()` however, sets a\nsimple property with that poisonous name.\n\nBy itself, the object created by `JSON.parse()` is perfectly safe. It doesn't\nhave a prototype of its own. It has a seemingly harmless property that just\nhappens to overlap with a built-in JavaScript magic name.\n\nHowever, other methods are not as lucky:\n\n```\n> const x = Object.assign({}, a);\n> x;\n{ b: 5}\n> x.c;\n6;\n```\n\nIf we take the `a` object created earlier by `JSON.parse()` and pass it to the\nhelpful `Object.assign()` method (used to perform a shallow copy of all the top\nlevel properties of `a` into the provided empty `{}` object), the magic\n`__proto__` property \"leaks\" and becomes `x` 's actual prototype.\n\nSurprise!\n\nPut together, if you get some external text input, parse it with `JSON.parse()`\nthen perform some simple manipulation of that object (say, shallow clone and add\nan `id` ), and then pass it to our validation library, anything passed through\nvia `__proto__` would sneak in undetected.\n\n### Oh joi!\n<a id=\"pp-oh-joi\"></a>\n\nThe first question is, of course, why does the validation module **joi** ignore\nthe prototype and let potentially harmful data through? We asked ourselves the\nsame question and our instant thought was \"it was an oversight\". A bug. A really\nbig mistake. The joi module should not have allowed this to happen. But…\n\nWhile joi is used primarily for validating web input data, it also has a\nsignificant user base using it to validate internal objects, some of which have\nprototypes. The fact that joi ignores the prototype is a helpful \"feature\". It\nallows validating the object's own properties while ignoring what could be a\nvery complicated prototype structure (with many methods and literal properties).\n\nAny solution at the joi level would mean breaking some currently working code.\n\n### The right thing\n<a id=\"pp-right-thing\"></a>\n\nAt this point, we were looking at a devastatingly bad security vulnerability.\nRight up there in the upper echelons of epic security failures. All we knew is\nthat our extremely popular data validation library fails to block harmful data,\nand that this data is trivial to sneak through. All you need to do is add\n`__proto__` and some crap to a JSON input and send it on its way to an\napplication built using our tools.\n\n(Dramatic pause)\n\nWe knew we had to fix joi to prevent this but given the scale of this issue, we\nhad to do it in a way that will put a fix out without drawing too much attention\nto it — without making it too easy to exploit — at least for a few days until\nmost systems received the update.\n\nSneaking a fix isn't the hardest thing to accomplish. If you combine it with an\notherwise purposeless refactor of the code, and throw in a few unrelated bug\nfixes and maybe a cool new feature, you can publish a new version without\ndrawing attention to the real issue being fixed.\n\nThe problem was, the right fix was going to break valid use cases. You see, joi\nhas no way of knowing if you want it to ignore the prototype you set, or block\nthe prototype set by an attacker. A solution that fixes the exploit will break\ncode and breaking code tends to get a lot of attention.\n\nOn the other hand, if we released a proper ([semantically\nversioned](https://semver.org/)) fix, mark it as a breaking change, and add a\nnew API to explicitly tell joi what you want it to do with the prototype, we\nwill share with the world how to exploit this vulnerability while also making it\nmore time consuming for systems to upgrade (breaking changes never get applied\nautomatically by build tools).\n\nLose — Lose.\n\n### A detour\n<a id=\"pp-detour\"></a>\n\nWhile the issue at hand was about incoming request payloads, we had to pause and\ncheck if it could also impact data coming via the query string, cookies, and\nheaders. Basically, anything that gets serialized into objects from text.\n\nWe quickly confirmed node default query string parser was fine as well as its\nheader parser. I identified one potential issue with base64-encoded JSON cookies\nas well as the usage of custom query string parsers. We also wrote some tests to\nconfirm that the most popular third-party query string parser  —\n[qs](https://www.npmjs.com/package/qs) —  was not vulnerable (it is not!).\n\n### A development\n<a id=\"pp-a-development\"></a>\n\nThroughout this triage, we just assumed that the offending input with its\npoisoned prototype was coming into joi from hapi, the web framework connecting\nthe hapi.js ecosystem. Further investigation by the Lob team found that the\nproblem was a bit more nuanced.\n\nhapi used `JSON.parse()` to process incoming data. It first set the result\nobject as a `payload` property of the incoming request, and then passed that\nsame object for validation by joi before being passed to the application\nbusiness logic for processing. Since `JSON.parse()` doesn't actually leak the\n`__proto__` property, it would arrive to joi with an invalid key and fail\nvalidation.\n\nHowever, hapi provides two extension points where the payload data can be\ninspected (and processed) prior to validation. It is all properly documented and\nwell understood by most developers. The extension points are there to allow you\nto interact with the raw inputs prior to validation for legitimate (and often\nsecurity related) reasons.\n\nIf during one of these two extension points, a developer used `Object.assign()`\nor a similar method on the payload, the `__proto__` property would leak and\nbecome an actual prototype.\n\n### Sigh of relief\n<a id=\"pp-sigh-of-relief\"></a>\n\nWe were now dealing with a much different level of awfulness. Manipulating the\npayload object prior to validation is not common which meant this was no longer\na doomsday scenario. It was still potentially catastrophic but the exposure\ndropped from every joi user to some very specific implementations.\n\nWe were no longer looking at a secretive joi release. The issue in joi is still\nthere, but we can now address it properly with a new API and breaking release\nover the next few weeks.\n\nWe also knew that we can easily mitigate this vulnerability at the framework\nlevel since it knows which data is coming from the outside and which is\ninternally generated. The framework is really the only piece that can protect\ndevelopers against making such unexpected mistakes.\n\n### Good news, bad news, no news?\n<a id=\"pp-good-news-no-news\"></a>\n\nThe good news was that this wasn't our fault. It wasn't a bug in hapi or joi. It\nwas only possible through a complex combination of actions that was not unique\nto hapi or joi. This can happen with every other JavaScript framework. If hapi\nis broken, then the world is broken.\n\nGreat — we solved the blame game.\n\nThe bad news is that when there is nothing to blame (other than JavaScript\nitself), it is much harder getting it fixed.\n\nThe first question people ask once a security issue is found is if there is\ngoing to be a CVE published. A CVE — Common Vulnerabilities and Exposures — is a\n[database](https://cve.mitre.org/) of known security issues. It is a critical\ncomponent of web security. The benefit of publishing a CVE is that it\nimmediately triggers alarms and informs and often breaks automated builds until\nthe issue is resolved.\n\nBut what do we pin this to?\n\nProbably, nothing. We are still debating whether we should tag some versions of\nhapi with a warning. The \"we\" is the node security process. Since we now have a\nnew version of hapi that mitigate the problem by default, it can be considered a\nfix. But because the fix isn't to a problem in hapi itself, it is not exactly\nkosher to declare older versions harmful.\n\nPublishing an advisory on previous versions of hapi for the sole purpose of\nnudging people into awareness and upgrade is an abuse of the advisory process.\nI'm personally fine with abusing it for the purpose of improving security but\nthat's not my call. As of this writing, it is still being debated.\n\n### The solution business\n<a id=\"pp-solution-business\"></a>\n\nMitigating the issue wasn't hard. Making it scale and safe was a bit more\ninvolved. Since we knew where harmful data can enter the system, and we knew\nwhere we used the problematic `JSON.parse()` we could replace it with a safe\nimplementation.\n\nOne problem. Validating data can be costly and we are now planning on validating\nevery incoming JSON text. The built-in `JSON.parse()` implementation is fast.\nReally really fast. It is unlikely we can build a replacement that will be more\nsecure and anywhere as fast. Especially not overnight and without introducing\nnew bugs.\n\nIt was obvious we were going to wrap the existing `JSON.parse()` method with\nsome additional logic. We just had to make sure it was not adding too much\noverhead. This isn't just a performance consideration but also a security one.\nIf we make it easy to slow down a system by simply sending specific data, we\nmake it easy to execute a [DoS\nattack](https://en.wikipedia.org/wiki/Denial-of-service_attack) at very low\ncost.\n\nI came up with a stupidly simple solution: first parse the text using the\nexisting tools. If this didn't fail, scan the original raw text for the\noffending string \"__proto__\". Only if we find it, perform an actual scan of the\nobject. We can't block every reference to \"__proto__\" — sometimes it is\nperfectly valid value (like when writing about it here and sending this text\nover to Medium for publication).\n\nThis made the \"happy path\" practically as fast as before. It just added one\nfunction call, a quick text scan (again, very fast built-in implementation), and\na conditional return. The solution had negligible impact on the vast majority of\ndata expected to pass through it.\n\nNext problem. The prototype property doesn't have to be at the top level of the\nincoming object. It can be nested deep inside. This means we cannot just check\nfor the presence of it at the top level. We need to recursively iterate through\nthe object.\n\nWhile recursive functions are a favorite tool, they could be disastrous when\nwriting security-conscious code. You see, recursive function increase the size\nof the runtime call stack. The more times you loop, the longer the call stack\ngets. At some point — KABOOM— you reach the maximum length and the process dies.\n\nIf you cannot guarantee the shape of the incoming data, recursive iteration\nbecomes an open threat. An attacker only needs to craft a deep enough object to\ncrash your servers.\n\nI used a flat loop implementation that is both more memory efficient (less\nfunction calls, less passing of temporary arguments) and more secure. I am not\npointing this out to brag, but to highlight how basic engineering practices can\ncreate (or avoid) security pitfalls.\n\n### Putting it to the test\n<a id=\"pp-putting-to-test\"></a>\n\nI sent the code to two people. First to [Nathan\nLaFreniere](https://github.com/nlf) to double check the security properties of\nthe solution, and then to [Matteo Collina](https://github.com/mcollina) to\nreview the performance. They are among the very best at what they do and often\nmy go-to people.\n\nThe performance benchmarks confirmed that the \"happy path\" was practically\nunaffected. The interesting findings was that removing the offending values was\nfaster then throwing an exception. This raised the question of what should be\nthe default behavior of the new module — which I called\n[**bourne**](https://github.com/hapijs/bourne) —  error or sanitize.\n\nThe concern, again, was exposing the application to a DoS attack. If sending a\nrequest with `__proto__` makes things 500% slower, that could be an easy vector\nto exploit. But after a bit more testing we confirmed that sending **any**\ninvalid JSON text was creating a very similar cost.\n\nIn other words, if you parse JSON, invalid values are going to cost you more,\nregardless of what makes them invalid. It is also important to remember that\nwhile the benchmark showed the significant % cost of scanning suspected objects,\nthe actual cost in CPU time was still in the fraction of milliseconds. Important\nto note and measure but not actually harmful.\n\n### hapi ever-after\n<a id=\"pp-hapi-ever-after\"></a>\n\nThere are a bunch of things to be grateful for.\n\nThe initial disclosure by the Lob team was perfect. It was reported privately,\nto the right people, with the right information. They followed up with\nadditional findings, and gave us the time and space to resolve it the right way.\nLob also was a major sponsor of my work on hapi over the years and that\nfinancial support is critical to allow everything else to happen. More on that\nin a bit.\n\nTriage was stressful but staffed with the right people. Having folks like\n[Nicolas Morel](https://github.com/Marsup), Nathan, and Matteo, available and\neager to help is critical. This isn't easy to deal with without the pressure,\nbut with it, mistakes are likely without proper team collaboration.\n\nWe got lucky with the actual vulnerability. What started up looking like a\ncatastrophic problem, ended up being a delicate but straight-forward problem to\naddress.\n\nWe also got lucky by having full access to mitigate it at the source — didn't\nneed to send emails to some unknown framework maintainer and hope for a quick\nanswer. hapi's total control over all of its dependencies proved its usefulness\nand security again. Not using [hapi](https://hapi.dev)? [Maybe you\nshould](https://hueniverse.com/why-you-should-consider-hapi-6163689bd7c2).\n\n### The after in happy ever-after\n<a id=\"pp-after-ever-after\"></a>\n\nThis is where I have to take advantage of this incident to reiterate the cost\nand need for sustainable and secure open source.\n\nMy time alone on this one issue exceeded 20 hours. That's half a working week.\nIt came at the end of a month were I already spent over 30 hours publishing a\nnew major release of hapi (most of the work was done in December). This puts me\nat a personal financial loss of over $5000 this month (I had to cut back on paid\nclient work to make time for it).\n\nIf you rely on code I maintain, this is exactly the level of support, quality,\nand commitment you want (and lets be honest — expect). Most of you take it for\ngranted — not just my work but the work of hundreds of other dedicated open\nsource maintainers.\n\nBecause this work is important, I decided to try and make it not just\nfinancially sustainable but to grow and expand it. There is so much to improve.\nThis is exactly what motivates me to implement the new [commercial licensing\nplan](https://web.archive.org/web/20190201220503/https://hueniverse.com/on-hapi-licensing-a-preview-f982662ee898)\ncoming in March. You can read more about it\n[here](https://web.archive.org/web/20190201220503/https://hueniverse.com/on-hapi-licensing-a-preview-f982662ee898).\n\nOf all the time consuming things, security is at the very top. I hope this story\nsuccessfully conveyed not just the technical details, but also the human drama and\nwhat it takes to keep the web secure.\n/docs/Guides/Fluent-Schema.md\r<h1 align=\"center\">Fastify</h1>\n\n## Fluent Schema\n\nThe [Validation and\nSerialization](../Reference/Validation-and-Serialization.md) documentation\noutlines all parameters accepted by Fastify to set up JSON Schema Validation to\nvalidate the input, and JSON Schema Serialization to optimize the output.\n\n[`fluent-json-schema`](https://github.com/fastify/fluent-json-schema) can be\nused to simplify this task while allowing the reuse of constants.\n\n### Basic settings\n\n```js\nconst S = require('fluent-json-schema')\n\n// You can have an object like this, or query a DB to get the values\nconst MY_KEYS = {\n  KEY1: 'ONE',\n  KEY2: 'TWO'\n}\n\nconst bodyJsonSchema = S.object()\n  .prop('someKey', S.string())\n  .prop('someOtherKey', S.number())\n  .prop('requiredKey', S.array().maxItems(3).items(S.integer()).required())\n  .prop('nullableKey', S.mixed([S.TYPES.NUMBER, S.TYPES.NULL]))\n  .prop('multipleTypesKey', S.mixed([S.TYPES.BOOLEAN, S.TYPES.NUMBER]))\n  .prop('multipleRestrictedTypesKey', S.oneOf([S.string().maxLength(5), S.number().minimum(10)]))\n  .prop('enumKey', S.enum(Object.values(MY_KEYS)))\n  .prop('notTypeKey', S.not(S.array()))\n\nconst queryStringJsonSchema = S.object()\n  .prop('name', S.string())\n  .prop('excitement', S.integer())\n\nconst paramsJsonSchema = S.object()\n  .prop('par1', S.string())\n  .prop('par2', S.integer())\n\nconst headersJsonSchema = S.object()\n  .prop('x-foo', S.string().required())\n\n// Note that there is no need to call `.valueOf()`!\nconst schema = {\n  body: bodyJsonSchema,\n  querystring: queryStringJsonSchema, // (or) query: queryStringJsonSchema\n  params: paramsJsonSchema,\n  headers: headersJsonSchema\n}\n\nfastify.post('/the/url', { schema }, handler)\n```\n\n### Reuse\n\nWith `fluent-json-schema` you can manipulate your schemas more easily and\nprogrammatically and then reuse them thanks to the `addSchema()` method. You can\nrefer to the schema in two different manners that are detailed in the\n[Validation and\nSerialization](../Reference/Validation-and-Serialization.md#adding-a-shared-schema)\ndocumentation.\n\nHere are some usage examples:\n\n**`$ref-way`**: refer to an external schema.\n\n```js\nconst addressSchema = S.object()\n  .id('#address')\n  .prop('line1').required()\n  .prop('line2')\n  .prop('country').required()\n  .prop('city').required()\n  .prop('zipcode').required()\n\nconst commonSchemas = S.object()\n  .id('https://fastify/demo')\n  .definition('addressSchema', addressSchema)\n  .definition('otherSchema', otherSchema) // You can add any schemas you need\n\nfastify.addSchema(commonSchemas)\n\nconst bodyJsonSchema = S.object()\n  .prop('residence', S.ref('https://fastify/demo#address')).required()\n  .prop('office', S.ref('https://fastify/demo#/definitions/addressSchema')).required()\n\nconst schema = { body: bodyJsonSchema }\n\nfastify.post('/the/url', { schema }, handler)\n```\n\n\n**`replace-way`**: refer to a shared schema to replace before the validation\nprocess.\n\n```js\nconst sharedAddressSchema = {\n  $id: 'sharedAddress',\n  type: 'object',\n  required: ['line1', 'country', 'city', 'zipcode'],\n  properties: {\n    line1: { type: 'string' },\n    line2: { type: 'string' },\n    country: { type: 'string' },\n    city: { type: 'string' },\n    zipcode: { type: 'string' }\n  }\n}\nfastify.addSchema(sharedAddressSchema)\n\nconst bodyJsonSchema = {\n  type: 'object',\n  properties: {\n    vacation: 'sharedAddress#'\n  }\n}\n\nconst schema = { body: bodyJsonSchema }\n\nfastify.post('/the/url', { schema }, handler)\n```\n\nNB You can mix up the `$ref-way` and the `replace-way` when using\n`fastify.addSchema`.\n/lib/fourOhFour.js\u00176'use strict'\n\nconst FindMyWay = require('find-my-way')\n\nconst Reply = require('./reply')\nconst Request = require('./request')\nconst Context = require('./context')\nconst {\n  kRoutePrefix,\n  kCanSetNotFoundHandler,\n  kFourOhFourLevelInstance,\n  kFourOhFourContext,\n  kHooks,\n  kErrorHandler\n} = require('./symbols.js')\nconst { lifecycleHooks } = require('./hooks')\nconst { buildErrorHandler } = require('./error-handler.js')\nconst fourOhFourContext = {\n  config: {\n  },\n  onSend: [],\n  onError: [],\n  errorHandler: buildErrorHandler()\n}\nconst {\n  FST_ERR_NOT_FOUND\n} = require('./errors')\n\n/**\n * Each fastify instance have a:\n * kFourOhFourLevelInstance: point to a fastify instance that has the 404 handler setted\n * kCanSetNotFoundHandler: bool to track if the 404 handler has already been set\n * kFourOhFour: the singleton instance of this 404 module\n * kFourOhFourContext: the context in the reply object where the handler will be executed\n */\nfunction fourOhFour (options) {\n  const { logger, genReqId } = options\n\n  // 404 router, used for handling encapsulated 404 handlers\n  const router = FindMyWay({ onBadUrl: createOnBadUrl(), defaultRoute: fourOhFourFallBack })\n  let _onBadUrlHandler = null\n\n  return { router, setNotFoundHandler, setContext, arrange404 }\n\n  function arrange404 (instance) {\n    // Change the pointer of the fastify instance to itself, so register + prefix can add new 404 handler\n    instance[kFourOhFourLevelInstance] = instance\n    instance[kCanSetNotFoundHandler] = true\n    // we need to bind instance for the context\n    router.onBadUrl = router.onBadUrl.bind(instance)\n  }\n\n  function basic404 (request, reply) {\n    const { url, method } = request.raw\n    const message = `Route ${method}:${url} not found`\n    request.log.info(message)\n    reply.code(404).send({\n      message,\n      error: 'Not Found',\n      statusCode: 404\n    })\n  }\n\n  function createOnBadUrl () {\n    return function onBadUrl (path, req, res) {\n      const id = genReqId(req)\n      const childLogger = logger.child({ reqId: id })\n      const fourOhFourContext = this[kFourOhFourLevelInstance][kFourOhFourContext]\n      const request = new Request(id, null, req, null, childLogger, fourOhFourContext)\n      const reply = new Reply(res, request, childLogger)\n\n      _onBadUrlHandler(request, reply)\n    }\n  }\n\n  function setContext (instance, context) {\n    const _404Context = Object.assign({}, instance[kFourOhFourContext])\n    _404Context.onSend = context.onSend\n    context[kFourOhFourContext] = _404Context\n  }\n\n  function setNotFoundHandler (opts, handler, avvio, routeHandler) {\n    // First initialization of the fastify root instance\n    if (this[kCanSetNotFoundHandler] === undefined) {\n      this[kCanSetNotFoundHandler] = true\n    }\n    if (this[kFourOhFourContext] === undefined) {\n      this[kFourOhFourContext] = null\n    }\n\n    const _fastify = this\n    const prefix = this[kRoutePrefix] || '/'\n\n    if (this[kCanSetNotFoundHandler] === false) {\n      throw new Error(`Not found handler already set for Fastify instance with prefix: '${prefix}'`)\n    }\n\n    if (typeof opts === 'object') {\n      if (opts.preHandler) {\n        if (Array.isArray(opts.preHandler)) {\n          opts.preHandler = opts.preHandler.map(hook => hook.bind(_fastify))\n        } else {\n          opts.preHandler = opts.preHandler.bind(_fastify)\n        }\n      }\n\n      if (opts.preValidation) {\n        if (Array.isArray(opts.preValidation)) {\n          opts.preValidation = opts.preValidation.map(hook => hook.bind(_fastify))\n        } else {\n          opts.preValidation = opts.preValidation.bind(_fastify)\n        }\n      }\n    }\n\n    if (typeof opts === 'function') {\n      handler = opts\n      opts = undefined\n    }\n    opts = opts || {}\n\n    if (handler) {\n      this[kFourOhFourLevelInstance][kCanSetNotFoundHandler] = false\n      handler = handler.bind(this)\n      // update onBadUrl handler\n      _onBadUrlHandler = handler\n    } else {\n      handler = basic404\n      // update onBadUrl handler\n      _onBadUrlHandler = basic404\n    }\n\n    this.after((notHandledErr, done) => {\n      _setNotFoundHandler.call(this, prefix, opts, handler, avvio, routeHandler)\n      done(notHandledErr)\n    })\n  }\n\n  function _setNotFoundHandler (prefix, opts, handler, avvio, routeHandler) {\n    const context = new Context({\n      schema: opts.schema,\n      handler,\n      config: opts.config || {},\n      server: this\n    })\n\n    avvio.once('preReady', () => {\n      const context = this[kFourOhFourContext]\n      for (const hook of lifecycleHooks) {\n        const toSet = this[kHooks][hook]\n          .concat(opts[hook] || [])\n          .map(h => h.bind(this))\n        context[hook] = toSet.length ? toSet : null\n      }\n      context.errorHandler = opts.errorHandler ? buildErrorHandler(this[kErrorHandler], opts.errorHandler) : this[kErrorHandler]\n    })\n\n    if (this[kFourOhFourContext] !== null && prefix === '/') {\n      Object.assign(this[kFourOhFourContext], context) // Replace the default 404 handler\n      return\n    }\n\n    this[kFourOhFourLevelInstance][kFourOhFourContext] = context\n\n    router.all(prefix + (prefix.endsWith('/') ? '*' : '/*'), routeHandler, context)\n    router.all(prefix, routeHandler, context)\n  }\n\n  function fourOhFourFallBack (req, res) {\n    // if this happen, we have a very bad bug\n    // we might want to do some hard debugging\n    // here, let's print out as much info as\n    // we can\n    const id = genReqId(req)\n    const childLogger = logger.child({ reqId: id })\n\n    childLogger.info({ req }, 'incoming request')\n\n    const request = new Request(id, null, req, null, childLogger, fourOhFourContext)\n    const reply = new Reply(res, request, childLogger)\n\n    request.log.warn('the default handler for 404 did not catch this, this is likely a fastify bug, please report it')\n    request.log.warn(router.prettyPrint())\n    reply.code(404).send(new FST_ERR_NOT_FOUND())\n  }\n}\n\nmodule.exports = fourOhFour\n/test/logger.test.jsţ}'use strict'\n\nconst { test, teardown, before } = require('tap')\nconst helper = require('./helper')\nconst http = require('http')\nconst stream = require('stream')\nconst split = require('split2')\nconst Fastify = require('..')\nconst pino = require('pino')\nconst path = require('path')\nconst os = require('os')\nconst fs = require('fs')\nconst sget = require('simple-get').concat\nconst dns = require('dns')\n\nconst files = []\nlet count = 0\nlet localhost\nlet localhostForURL\n\nfunction file () {\n  const file = path.join(os.tmpdir(), `sonic-boom-${process.pid}-${process.hrtime().toString()}-${count++}`)\n  files.push(file)\n  return file\n}\n\nbefore(async function () {\n  [localhost, localhostForURL] = await helper.getLoopbackHost()\n})\n\nif (process.env.CI) {\n  teardown(() => {\n    files.forEach((file) => {\n      try {\n        fs.unlinkSync(file)\n      } catch (e) {\n        console.log(e)\n      }\n    })\n  })\n}\n\ntest('defaults to info level', t => {\n  let fastify = null\n  const stream = split(JSON.parse)\n  try {\n    fastify = Fastify({\n      logger: {\n        stream\n      }\n    })\n  } catch (e) {\n    t.fail()\n  }\n\n  fastify.get('/', function (req, reply) {\n    t.ok(req.log)\n    reply.send({ hello: 'world' })\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    dns.lookup('localhost', { all: true }, function (err, addresses) {\n      t.error(err)\n      let toSkip = addresses.length\n\n      function skip (data) {\n        if (--toSkip === 0) {\n          stream.removeListener('data', skip)\n          check()\n        }\n      }\n\n      stream.on('data', skip)\n\n      http.get(`http://${localhostForURL}:` + fastify.server.address().port)\n    })\n  })\n\n  function check () {\n    stream.once('data', line => {\n      const id = line.reqId\n      t.ok(line.reqId, 'reqId is defined')\n      t.ok(line.req, 'req is defined')\n      t.equal(line.msg, 'incoming request', 'message is set')\n      t.equal(line.req.method, 'GET', 'method is get')\n\n      stream.once('data', line => {\n        t.equal(line.reqId, id)\n        t.ok(line.reqId, 'reqId is defined')\n        t.ok(line.res, 'res is defined')\n        t.equal(line.msg, 'request completed', 'message is set')\n        t.equal(line.res.statusCode, 200, 'statusCode is 200')\n        t.ok(line.responseTime, 'responseTime is defined')\n        t.end()\n      })\n    })\n  }\n})\n\ntest('test log stream', t => {\n  t.plan(12)\n  let fastify = null\n  const stream = split(JSON.parse)\n  try {\n    fastify = Fastify({\n      logger: {\n        stream,\n        level: 'info'\n      }\n    })\n  } catch (e) {\n    t.fail()\n  }\n\n  fastify.get('/', function (req, reply) {\n    t.ok(req.log)\n    reply.send({ hello: 'world' })\n  })\n\n  fastify.listen({ port: 0, host: localhost }, err => {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    http.get(`http://${localhostForURL}:` + fastify.server.address().port)\n    stream.once('data', listenAtLogLine => {\n      t.ok(listenAtLogLine, 'listen at log message is ok')\n\n      stream.once('data', line => {\n        const id = line.reqId\n        t.ok(line.reqId, 'reqId is defined')\n        t.ok(line.req, 'req is defined')\n        t.equal(line.msg, 'incoming request', 'message is set')\n        t.equal(line.req.method, 'GET', 'method is get')\n\n        stream.once('data', line => {\n          t.equal(line.reqId, id)\n          t.ok(line.reqId, 'reqId is defined')\n          t.ok(line.res, 'res is defined')\n          t.equal(line.msg, 'request completed', 'message is set')\n          t.equal(line.res.statusCode, 200, 'statusCode is 200')\n        })\n      })\n    })\n  })\n})\n\ntest('test error log stream', t => {\n  t.plan(11)\n  let fastify = null\n  const stream = split(JSON.parse)\n  try {\n    fastify = Fastify({\n      logger: {\n        stream,\n        level: 'info'\n      }\n    })\n  } catch (e) {\n    t.fail()\n  }\n\n  fastify.get('/error', function (req, reply) {\n    t.ok(req.log)\n    reply.send(new Error('kaboom'))\n  })\n\n  fastify.listen({ port: 0, host: localhost }, err => {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    http.get(`http://${localhostForURL}:` + fastify.server.address().port + '/error')\n    stream.once('data', listenAtLogLine => {\n      t.ok(listenAtLogLine, 'listen at log message is ok')\n\n      stream.once('data', line => {\n        t.ok(line.reqId, 'reqId is defined')\n        t.ok(line.req, 'req is defined')\n        t.equal(line.msg, 'incoming request', 'message is set')\n        t.equal(line.req.method, 'GET', 'method is get')\n\n        stream.once('data', line => {\n          t.ok(line.reqId, 'reqId is defined')\n          t.ok(line.res, 'res is defined')\n          t.equal(line.msg, 'kaboom', 'message is set')\n          t.equal(line.res.statusCode, 500, 'statusCode is 500')\n        })\n      })\n    })\n  })\n})\n\ntest('can use external logger instance', t => {\n  const lines = [/^Server listening at /, /^incoming request$/, /^log success$/, /^request completed$/]\n  t.plan(lines.length + 2)\n\n  const splitStream = split(JSON.parse)\n  splitStream.on('data', (line) => {\n    const regex = lines.shift()\n    t.ok(regex.test(line.msg), '\"' + line.msg + '\" dont match \"' + regex + '\"')\n  })\n\n  const logger = require('pino')(splitStream)\n\n  const localFastify = Fastify({ logger })\n\n  localFastify.get('/foo', function (req, reply) {\n    t.ok(req.log)\n    req.log.info('log success')\n    reply.send({ hello: 'world' })\n  })\n\n  localFastify.listen({ port: 0, host: localhost }, err => {\n    t.error(err)\n    http.get(`http://${localhostForURL}:` + localFastify.server.address().port + '/foo', (res) => {\n      res.resume()\n      res.on('end', () => {\n        localFastify.server.close()\n      })\n    })\n  })\n})\n\ntest('can use external logger instance with custom serializer', t => {\n  const lines = [['level', 30], ['req', { url: '/foo' }], ['level', 30], ['res', { statusCode: 200 }]]\n  t.plan(lines.length + 2)\n\n  const splitStream = split(JSON.parse)\n  splitStream.on('data', (line) => {\n    const check = lines.shift()\n    const key = check[0]\n    const value = check[1]\n\n    t.same(line[key], value)\n  })\n\n  const logger = require('pino')({\n    level: 'info',\n    serializers: {\n      req: function (req) {\n        return {\n          url: req.url\n        }\n      }\n    }\n  }, splitStream)\n\n  const localFastify = Fastify({\n    logger\n  })\n\n  localFastify.get('/foo', function (req, reply) {\n    t.ok(req.log)\n    req.log.info('log success')\n    reply.send({ hello: 'world' })\n  })\n\n  localFastify.listen({ port: 0, host: localhost }, err => {\n    t.error(err)\n    http.get(`http://${localhostForURL}:` + localFastify.server.address().port + '/foo', (res) => {\n      res.resume()\n      res.on('end', () => {\n        localFastify.server.close()\n      })\n    })\n  })\n})\n\ntest('expose the logger', t => {\n  t.plan(2)\n  let fastify = null\n  const stream = split(JSON.parse)\n  try {\n    fastify = Fastify({\n      logger: {\n        stream,\n        level: 'info'\n      }\n    })\n  } catch (e) {\n    t.fail()\n  }\n\n  t.ok(fastify.log)\n  t.same(typeof fastify.log, 'object')\n})\n\ntest('The request id header key can be customized', t => {\n  t.plan(9)\n  const REQUEST_ID = '42'\n\n  const stream = split(JSON.parse)\n  const fastify = Fastify({\n    logger: { stream, level: 'info' },\n    requestIdHeader: 'my-custom-request-id'\n  })\n  t.teardown(() => fastify.close())\n\n  fastify.get('/', (req, reply) => {\n    t.equal(req.id, REQUEST_ID)\n    req.log.info('some log message')\n    reply.send({ id: req.id })\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/',\n    headers: {\n      'my-custom-request-id': REQUEST_ID\n    }\n  }, (err, res) => {\n    t.error(err)\n    const payload = JSON.parse(res.payload)\n    t.equal(payload.id, REQUEST_ID)\n\n    stream.once('data', line => {\n      t.equal(line.reqId, REQUEST_ID)\n      t.equal(line.msg, 'incoming request', 'message is set')\n\n      stream.once('data', line => {\n        t.equal(line.reqId, REQUEST_ID)\n        t.equal(line.msg, 'some log message', 'message is set')\n\n        stream.once('data', line => {\n          t.equal(line.reqId, REQUEST_ID)\n          t.equal(line.msg, 'request completed', 'message is set')\n        })\n      })\n    })\n  })\n})\n\ntest('The request id header key can be ignored', t => {\n  t.plan(9)\n  const REQUEST_ID = 'ignore-me'\n\n  const stream = split(JSON.parse)\n  const fastify = Fastify({\n    logger: { stream, level: 'info' },\n    requestIdHeader: false\n  })\n  t.teardown(() => fastify.close())\n\n  fastify.get('/', (req, reply) => {\n    t.equal(req.id, 'req-1')\n    req.log.info('some log message')\n    reply.send({ id: req.id })\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/',\n    headers: {\n      'request-id': REQUEST_ID\n    }\n  }, (err, res) => {\n    t.error(err)\n    const payload = JSON.parse(res.payload)\n    t.equal(payload.id, 'req-1')\n\n    stream.once('data', line => {\n      t.equal(line.reqId, 'req-1')\n      t.equal(line.msg, 'incoming request', 'message is set')\n\n      stream.once('data', line => {\n        t.equal(line.reqId, 'req-1')\n        t.equal(line.msg, 'some log message', 'message is set')\n\n        stream.once('data', line => {\n          t.equal(line.reqId, 'req-1')\n          t.equal(line.msg, 'request completed', 'message is set')\n        })\n      })\n    })\n  })\n})\n\ntest('The request id header key can be customized along with a custom id generator', t => {\n  t.plan(12)\n  const REQUEST_ID = '42'\n\n  const stream = split(JSON.parse)\n  const fastify = Fastify({\n    logger: { stream, level: 'info' },\n    requestIdHeader: 'my-custom-request-id',\n    genReqId (req) {\n      return 'foo'\n    }\n  })\n  t.teardown(() => fastify.close())\n\n  fastify.get('/one', (req, reply) => {\n    t.equal(req.id, REQUEST_ID)\n    req.log.info('some log message')\n    reply.send({ id: req.id })\n  })\n\n  fastify.get('/two', (req, reply) => {\n    t.equal(req.id, 'foo')\n    req.log.info('some log message 2')\n    reply.send({ id: req.id })\n  })\n\n  const matches = [\n    { reqId: REQUEST_ID, msg: /incoming request/ },\n    { reqId: REQUEST_ID, msg: /some log message/ },\n    { reqId: REQUEST_ID, msg: /request completed/ },\n    { reqId: 'foo', msg: /incoming request/ },\n    { reqId: 'foo', msg: /some log message 2/ },\n    { reqId: 'foo', msg: /request completed/ }\n  ]\n\n  let i = 0\n  stream.on('data', line => {\n    t.match(line, matches[i])\n    i += 1\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/one',\n    headers: {\n      'my-custom-request-id': REQUEST_ID\n    }\n  }, (err, res) => {\n    t.error(err)\n    const payload = JSON.parse(res.payload)\n    t.equal(payload.id, REQUEST_ID)\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/two'\n  }, (err, res) => {\n    t.error(err)\n    const payload = JSON.parse(res.payload)\n    t.equal(payload.id, 'foo')\n  })\n})\n\ntest('The request id header key can be ignored along with a custom id generator', t => {\n  t.plan(12)\n  const REQUEST_ID = 'ignore-me'\n\n  const stream = split(JSON.parse)\n  const fastify = Fastify({\n    logger: { stream, level: 'info' },\n    requestIdHeader: false,\n    genReqId (req) {\n      return 'foo'\n    }\n  })\n  t.teardown(() => fastify.close())\n\n  fastify.get('/one', (req, reply) => {\n    t.equal(req.id, 'foo')\n    req.log.info('some log message')\n    reply.send({ id: req.id })\n  })\n\n  fastify.get('/two', (req, reply) => {\n    t.equal(req.id, 'foo')\n    req.log.info('some log message 2')\n    reply.send({ id: req.id })\n  })\n\n  const matches = [\n    { reqId: 'foo', msg: /incoming request/ },\n    { reqId: 'foo', msg: /some log message/ },\n    { reqId: 'foo', msg: /request completed/ },\n    { reqId: 'foo', msg: /incoming request/ },\n    { reqId: 'foo', msg: /some log message 2/ },\n    { reqId: 'foo', msg: /request completed/ }\n  ]\n\n  let i = 0\n  stream.on('data', line => {\n    t.match(line, matches[i])\n    i += 1\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/one',\n    headers: {\n      'request-id': REQUEST_ID\n    }\n  }, (err, res) => {\n    t.error(err)\n    const payload = JSON.parse(res.payload)\n    t.equal(payload.id, 'foo')\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/two'\n  }, (err, res) => {\n    t.error(err)\n    const payload = JSON.parse(res.payload)\n    t.equal(payload.id, 'foo')\n  })\n})\n\ntest('The request id log label can be changed', t => {\n  t.plan(6)\n  const REQUEST_ID = '42'\n\n  const stream = split(JSON.parse)\n  const fastify = Fastify({\n    logger: { stream, level: 'info' },\n    requestIdHeader: 'my-custom-request-id',\n    requestIdLogLabel: 'traceId'\n  })\n  t.teardown(() => fastify.close())\n\n  fastify.get('/one', (req, reply) => {\n    t.equal(req.id, REQUEST_ID)\n    req.log.info('some log message')\n    reply.send({ id: req.id })\n  })\n\n  const matches = [\n    { traceId: REQUEST_ID, msg: /incoming request/ },\n    { traceId: REQUEST_ID, msg: /some log message/ },\n    { traceId: REQUEST_ID, msg: /request completed/ }\n  ]\n\n  let i = 0\n  stream.on('data', line => {\n    t.match(line, matches[i])\n    i += 1\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/one',\n    headers: {\n      'my-custom-request-id': REQUEST_ID\n    }\n  }, (err, res) => {\n    t.error(err)\n    const payload = JSON.parse(res.payload)\n    t.equal(payload.id, REQUEST_ID)\n  })\n})\n\ntest('The logger should accept custom serializer', t => {\n  t.plan(9)\n\n  const stream = split(JSON.parse)\n  const fastify = Fastify({\n    logger: {\n      stream,\n      level: 'info',\n      serializers: {\n        req: function (req) {\n          return {\n            url: req.url\n          }\n        }\n      }\n    }\n  })\n\n  fastify.get('/custom', function (req, reply) {\n    t.ok(req.log)\n    reply.send(new Error('kaboom'))\n  })\n\n  fastify.listen({ port: 0, host: localhost }, err => {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    http.get(`http://${localhostForURL}:` + fastify.server.address().port + '/custom')\n    stream.once('data', listenAtLogLine => {\n      t.ok(listenAtLogLine, 'listen at log message is ok')\n\n      stream.once('data', line => {\n        t.ok(line.req, 'req is defined')\n        t.equal(line.msg, 'incoming request', 'message is set')\n        t.same(line.req, { url: '/custom' }, 'custom req serializer is use')\n\n        stream.once('data', line => {\n          t.ok(line.res, 'res is defined')\n          t.equal(line.msg, 'kaboom', 'message is set')\n          t.same(line.res, { statusCode: 500 }, 'default res serializer is use')\n        })\n      })\n    })\n  })\n})\n\ntest('reply.send logs an error if called twice in a row', t => {\n  const lines = ['incoming request', 'request completed', 'Reply already sent', 'Reply already sent']\n  t.plan(lines.length + 2)\n\n  const splitStream = split(JSON.parse)\n  splitStream.on('data', (line) => {\n    t.same(line.msg, lines.shift())\n  })\n\n  const logger = pino(splitStream)\n\n  const fastify = Fastify({\n    logger\n  })\n\n  fastify.get('/', (req, reply) => {\n    reply.send({ hello: 'world' })\n    reply.send({ hello: 'world2' })\n    reply.send({ hello: 'world3' })\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/'\n  }, (err, res) => {\n    t.error(err)\n    const payload = JSON.parse(res.payload)\n    t.same(payload, { hello: 'world' })\n  })\n})\n\ntest('logger can be silented', t => {\n  t.plan(17)\n  const fastify = Fastify({\n    logger: false\n  })\n  t.ok(fastify.log)\n  t.same(typeof fastify.log, 'object')\n  t.same(typeof fastify.log.fatal, 'function')\n  t.same(typeof fastify.log.error, 'function')\n  t.same(typeof fastify.log.warn, 'function')\n  t.same(typeof fastify.log.info, 'function')\n  t.same(typeof fastify.log.debug, 'function')\n  t.same(typeof fastify.log.trace, 'function')\n  t.same(typeof fastify.log.child, 'function')\n\n  const childLog = fastify.log.child()\n\n  t.same(typeof childLog, 'object')\n  t.same(typeof childLog.fatal, 'function')\n  t.same(typeof childLog.error, 'function')\n  t.same(typeof childLog.warn, 'function')\n  t.same(typeof childLog.info, 'function')\n  t.same(typeof childLog.debug, 'function')\n  t.same(typeof childLog.trace, 'function')\n  t.same(typeof childLog.child, 'function')\n})\n\ntest('Should set a custom logLevel for a plugin', t => {\n  const lines = ['incoming request', 'Hello', 'request completed']\n  t.plan(7)\n\n  const splitStream = split(JSON.parse)\n  splitStream.on('data', (line) => {\n    t.same(line.msg, lines.shift())\n  })\n\n  const logger = pino({ level: 'error' }, splitStream)\n\n  const fastify = Fastify({\n    logger\n  })\n\n  fastify.get('/', (req, reply) => {\n    req.log.info('Hello') // we should not see this log\n    reply.send({ hello: 'world' })\n  })\n\n  fastify.register(function (instance, opts, done) {\n    instance.get('/plugin', (req, reply) => {\n      req.log.info('Hello') // we should see this log\n      reply.send({ hello: 'world' })\n    })\n    done()\n  }, { logLevel: 'info' })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/'\n  }, (err, res) => {\n    t.error(err)\n    const payload = JSON.parse(res.payload)\n    t.same(payload, { hello: 'world' })\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/plugin'\n  }, (err, res) => {\n    t.error(err)\n    const payload = JSON.parse(res.payload)\n    t.same(payload, { hello: 'world' })\n  })\n})\n\ntest('Should set a custom logSerializers for a plugin', t => {\n  t.plan(3)\n\n  const splitStream = split(JSON.parse)\n  splitStream.on('data', (line) => {\n    if (line.test) {\n      t.same(line.test, 'XHello')\n    }\n  })\n\n  const logger = pino({ level: 'error' }, splitStream)\n\n  const fastify = Fastify({\n    logger\n  })\n\n  fastify.register(function (instance, opts, done) {\n    instance.get('/plugin', (req, reply) => {\n      req.log.info({ test: 'Hello' }) // we should see this log\n      reply.send({ hello: 'world' })\n    })\n    done()\n  }, { logLevel: 'info', logSerializers: { test: value => 'X' + value } })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/plugin'\n  }, (err, res) => {\n    t.error(err)\n    const payload = JSON.parse(res.payload)\n    t.same(payload, { hello: 'world' })\n  })\n})\n\ntest('Should set a custom logLevel for every plugin', t => {\n  const lines = ['incoming request', 'request completed', 'info', 'debug']\n  t.plan(18)\n\n  const splitStream = split(JSON.parse)\n  splitStream.on('data', (line) => {\n    t.ok(line.level === 30 || line.level === 20)\n    t.ok(lines.indexOf(line.msg) > -1)\n  })\n\n  const logger = pino({ level: 'error' }, splitStream)\n\n  const fastify = Fastify({\n    logger\n  })\n\n  fastify.get('/', (req, reply) => {\n    req.log.warn('Hello') // we should not see this log\n    reply.send({ hello: 'world' })\n  })\n\n  fastify.register(function (instance, opts, done) {\n    instance.get('/info', (req, reply) => {\n      req.log.info('info') // we should see this log\n      req.log.debug('hidden log')\n      reply.send({ hello: 'world' })\n    })\n    done()\n  }, { logLevel: 'info' })\n\n  fastify.register(function (instance, opts, done) {\n    instance.get('/debug', (req, reply) => {\n      req.log.debug('debug') // we should see this log\n      req.log.trace('hidden log')\n      reply.send({ hello: 'world' })\n    })\n    done()\n  }, { logLevel: 'debug' })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/'\n  }, (err, res) => {\n    t.error(err)\n    const payload = JSON.parse(res.payload)\n    t.same(payload, { hello: 'world' })\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/info'\n  }, (err, res) => {\n    t.error(err)\n    const payload = JSON.parse(res.payload)\n    t.same(payload, { hello: 'world' })\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/debug'\n  }, (err, res) => {\n    t.error(err)\n    const payload = JSON.parse(res.payload)\n    t.same(payload, { hello: 'world' })\n  })\n})\n\ntest('Should set a custom logSerializers for every plugin', async t => {\n  const lines = ['Hello', 'XHello', 'ZHello']\n  t.plan(6)\n\n  const splitStream = split(JSON.parse)\n  splitStream.on('data', (line) => {\n    if (line.test) {\n      t.same(line.test, lines.shift())\n    }\n  })\n\n  const logger = pino({ level: 'info' }, splitStream)\n  const fastify = Fastify({\n    logger\n  })\n\n  fastify.get('/', (req, reply) => {\n    req.log.warn({ test: 'Hello' })\n    reply.send({ hello: 'world' })\n  })\n\n  fastify.register(function (instance, opts, done) {\n    instance.get('/test1', (req, reply) => {\n      req.log.info({ test: 'Hello' })\n      reply.send({ hello: 'world' })\n    })\n    done()\n  }, { logSerializers: { test: value => 'X' + value } })\n\n  fastify.register(function (instance, opts, done) {\n    instance.get('/test2', (req, reply) => {\n      req.log.info({ test: 'Hello' })\n      reply.send({ hello: 'world' })\n    })\n    done()\n  }, { logSerializers: { test: value => 'Z' + value } })\n\n  let res = await fastify.inject({\n    method: 'GET',\n    url: '/'\n  })\n  t.same(res.json(), { hello: 'world' })\n\n  res = await fastify.inject({\n    method: 'GET',\n    url: '/test1'\n  })\n  t.same(res.json(), { hello: 'world' })\n\n  res = await fastify.inject({\n    method: 'GET',\n    url: '/test2'\n  })\n  t.same(res.json(), { hello: 'world' })\n})\n\ntest('Should override serializers from route', t => {\n  t.plan(3)\n\n  const splitStream = split(JSON.parse)\n  splitStream.on('data', (line) => {\n    if (line.test) {\n      t.same(line.test, 'ZHello')\n    }\n  })\n\n  const logger = pino({ level: 'info' }, splitStream)\n  const fastify = Fastify({\n    logger\n  })\n\n  fastify.register(function (instance, opts, done) {\n    instance.get('/', {\n      logSerializers: {\n        test: value => 'Z' + value // should override\n      }\n    }, (req, reply) => {\n      req.log.info({ test: 'Hello' })\n      reply.send({ hello: 'world' })\n    })\n    done()\n  }, { logSerializers: { test: value => 'X' + value } })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/'\n  }, (err, res) => {\n    t.error(err)\n    const payload = JSON.parse(res.payload)\n    t.same(payload, { hello: 'world' })\n  })\n})\n\ntest('Should override serializers from plugin', t => {\n  t.plan(3)\n\n  const splitStream = split(JSON.parse)\n  splitStream.on('data', (line) => {\n    if (line.test) {\n      t.same(line.test, 'ZHello')\n    }\n  })\n\n  const logger = pino({ level: 'info' }, splitStream)\n  const fastify = Fastify({\n    logger\n  })\n\n  fastify.register(function (instance, opts, done) {\n    instance.register(context1, {\n      logSerializers: {\n        test: value => 'Z' + value // should override\n      }\n    })\n    done()\n  }, { logSerializers: { test: value => 'X' + value } })\n\n  function context1 (instance, opts, done) {\n    instance.get('/', (req, reply) => {\n      req.log.info({ test: 'Hello' })\n      reply.send({ hello: 'world' })\n    })\n    done()\n  }\n\n  fastify.inject({\n    method: 'GET',\n    url: '/'\n  }, (err, res) => {\n    t.error(err)\n    const payload = JSON.parse(res.payload)\n    t.same(payload, { hello: 'world' })\n  })\n})\n\ntest('Should use serializers from plugin and route', t => {\n  t.plan(4)\n\n  const splitStream = split(JSON.parse)\n  splitStream.on('data', (line) => {\n    if (line.test) {\n      t.same(line.test, 'XHello')\n    }\n    if (line.test2) {\n      t.same(line.test2, 'ZHello')\n    }\n  })\n\n  const logger = pino({ level: 'info' }, splitStream)\n  const fastify = Fastify({\n    logger\n  })\n\n  fastify.register(context1, {\n    logSerializers: { test: value => 'X' + value }\n  })\n\n  function context1 (instance, opts, done) {\n    instance.get('/', {\n      logSerializers: {\n        test2: value => 'Z' + value\n      }\n    }, (req, reply) => {\n      req.log.info({ test: 'Hello', test2: 'Hello' }) // { test: 'XHello', test2: 'ZHello' }\n      reply.send({ hello: 'world' })\n    })\n    done()\n  }\n\n  fastify.inject({\n    method: 'GET',\n    url: '/'\n  }, (err, res) => {\n    t.error(err)\n    const payload = JSON.parse(res.payload)\n    t.same(payload, { hello: 'world' })\n  })\n})\n\ntest('Should use serializers from instance fastify and route', t => {\n  t.plan(4)\n\n  const splitStream = split(JSON.parse)\n  splitStream.on('data', (line) => {\n    if (line.test) {\n      t.same(line.test, 'XHello')\n    }\n    if (line.test2) {\n      t.same(line.test2, 'ZHello')\n    }\n  })\n\n  const logger = pino({\n    level: 'info',\n    serializers: {\n      test: value => 'X' + value,\n      test2: value => 'This should be override - ' + value\n    }\n  }, splitStream)\n  const fastify = Fastify({\n    logger\n  })\n\n  fastify.get('/', {\n    logSerializers: {\n      test2: value => 'Z' + value\n    }\n  }, (req, reply) => {\n    req.log.info({ test: 'Hello', test2: 'Hello' }) // { test: 'XHello', test2: 'ZHello' }\n    reply.send({ hello: 'world' })\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/'\n  }, (err, res) => {\n    t.error(err)\n    const payload = JSON.parse(res.payload)\n    t.same(payload, { hello: 'world' })\n  })\n})\n\ntest('Should use serializers inherit from contexts', t => {\n  t.plan(5)\n\n  const splitStream = split(JSON.parse)\n  splitStream.on('data', (line) => {\n    if (line.test && line.test2 && line.test3) {\n      t.same(line.test, 'XHello')\n      t.same(line.test2, 'YHello')\n      t.same(line.test3, 'ZHello')\n    }\n  })\n\n  const logger = pino({\n    level: 'info',\n    serializers: {\n      test: value => 'X' + value\n    }\n  }, splitStream)\n\n  const fastify = Fastify({ logger })\n  fastify.register(context1, { logSerializers: { test2: value => 'Y' + value } })\n\n  function context1 (instance, opts, done) {\n    instance.get('/', {\n      logSerializers: {\n        test3: value => 'Z' + value\n      }\n    }, (req, reply) => {\n      req.log.info({ test: 'Hello', test2: 'Hello', test3: 'Hello' }) // { test: 'XHello', test2: 'YHello', test3: 'ZHello' }\n      reply.send({ hello: 'world' })\n    })\n    done()\n  }\n\n  fastify.inject({\n    method: 'GET',\n    url: '/'\n  }, (err, res) => {\n    t.error(err)\n    const payload = JSON.parse(res.payload)\n    t.same(payload, { hello: 'world' })\n  })\n})\n\ntest('Should increase the log level for a specific plugin', t => {\n  t.plan(4)\n\n  const splitStream = split(JSON.parse)\n  splitStream.on('data', (line) => {\n    t.same(line.msg, 'Hello')\n    t.ok(line.level === 50)\n  })\n\n  const logger = pino({ level: 'info' }, splitStream)\n\n  const fastify = Fastify({\n    logger\n  })\n\n  fastify.register(function (instance, opts, done) {\n    instance.get('/', (req, reply) => {\n      req.log.error('Hello') // we should see this log\n      reply.send({ hello: 'world' })\n    })\n    done()\n  }, { logLevel: 'error' })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/'\n  }, (err, res) => {\n    t.error(err)\n    const payload = JSON.parse(res.payload)\n    t.same(payload, { hello: 'world' })\n  })\n})\n\ntest('Should set the log level for the customized 404 handler', t => {\n  t.plan(4)\n\n  const splitStream = split(JSON.parse)\n  splitStream.on('data', (line) => {\n    t.same(line.msg, 'Hello')\n    t.ok(line.level === 50)\n  })\n\n  const logger = pino({ level: 'warn' }, splitStream)\n\n  const fastify = Fastify({\n    logger\n  })\n\n  fastify.register(function (instance, opts, done) {\n    instance.setNotFoundHandler(function (req, reply) {\n      req.log.error('Hello')\n      reply.code(404).send()\n    })\n    done()\n  }, { logLevel: 'error' })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 404)\n  })\n})\n\ntest('Should set the log level for the customized 500 handler', t => {\n  t.plan(4)\n\n  const splitStream = split(JSON.parse)\n  splitStream.on('data', (line) => {\n    t.same(line.msg, 'Hello')\n    t.ok(line.level === 60)\n  })\n\n  const logger = pino({ level: 'warn' }, splitStream)\n\n  const fastify = Fastify({\n    logger\n  })\n\n  fastify.register(function (instance, opts, done) {\n    instance.get('/', (req, reply) => {\n      req.log.error('kaboom')\n      reply.send(new Error('kaboom'))\n    })\n\n    instance.setErrorHandler(function (e, request, reply) {\n      reply.log.fatal('Hello')\n      reply.code(500).send()\n    })\n    done()\n  }, { logLevel: 'fatal' })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 500)\n  })\n})\n\ntest('Should set a custom log level for a specific route', t => {\n  const lines = ['incoming request', 'Hello', 'request completed']\n  t.plan(7)\n\n  const splitStream = split(JSON.parse)\n  splitStream.on('data', (line) => {\n    t.same(line.msg, lines.shift())\n  })\n\n  const logger = pino({ level: 'error' }, splitStream)\n\n  const fastify = Fastify({\n    logger\n  })\n\n  fastify.get('/log', { logLevel: 'info' }, (req, reply) => {\n    req.log.info('Hello')\n    reply.send({ hello: 'world' })\n  })\n\n  fastify.get('/no-log', (req, reply) => {\n    req.log.info('Hello')\n    reply.send({ hello: 'world' })\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/log'\n  }, (err, res) => {\n    t.error(err)\n    const payload = JSON.parse(res.payload)\n    t.same(payload, { hello: 'world' })\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/no-log'\n  }, (err, res) => {\n    t.error(err)\n    const payload = JSON.parse(res.payload)\n    t.same(payload, { hello: 'world' })\n  })\n})\n\ntest('The default 404 handler logs the incoming request', t => {\n  t.plan(5)\n\n  const expectedMessages = [\n    'incoming request',\n    'Route GET:/not-found not found',\n    'request completed'\n  ]\n\n  const splitStream = split(JSON.parse)\n  splitStream.on('data', (line) => {\n    t.same(line.msg, expectedMessages.shift())\n  })\n\n  const logger = pino({ level: 'trace' }, splitStream)\n\n  const fastify = Fastify({\n    logger\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/not-found'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 404)\n  })\n})\n\ntest('should serialize request and response', t => {\n  t.plan(3)\n  const lines = []\n  const dest = new stream.Writable({\n    write: function (chunk, enc, cb) {\n      lines.push(JSON.parse(chunk))\n      cb()\n    }\n  })\n  const fastify = Fastify({ logger: { level: 'info', stream: dest } })\n\n  fastify.get('/500', (req, reply) => {\n    reply.code(500).send(Error('500 error'))\n  })\n\n  fastify.inject({\n    url: '/500',\n    method: 'GET'\n  }, (e, res) => {\n    const l = lines.find((line) => line.res && line.res.statusCode === 500)\n    t.ok(l.req)\n    t.same(l.req.method, 'GET')\n    t.same(l.req.url, '/500')\n  })\n})\n\n{\n  const interfaces = os.networkInterfaces()\n  const ipv6 = Object.keys(interfaces)\n    .filter(name => name.substr(0, 2) === 'lo')\n    .map(name => interfaces[name])\n    .reduce((list, set) => list.concat(set), [])\n    .filter(info => info.family === 'IPv6')\n    .map(info => info.address)\n    .shift()\n\n  if (ipv6 !== undefined) {\n    test('Wrap IPv6 address in listening log message', t => {\n      t.plan(2)\n      const stream = split(JSON.parse)\n      const fastify = Fastify({\n        logger: {\n          stream,\n          level: 'info'\n        }\n      })\n      fastify.listen({ port: 0, host: ipv6 }, err => {\n        t.error(err)\n        stream.once('data', line => {\n          const expected = 'Server listening at http://[' + ipv6 + ']:' +\n            fastify.server.address().port\n          t.same(line.msg, expected)\n          fastify.close()\n        })\n      })\n    })\n  }\n}\n\ntest('Do not wrap IPv4 address', t => {\n  t.plan(2)\n  const stream = split(JSON.parse)\n  const fastify = Fastify({\n    logger: {\n      stream,\n      level: 'info'\n    }\n  })\n  fastify.listen({ port: 0, host: '127.0.0.1' }, err => {\n    t.error(err)\n    stream.once('data', line => {\n      const expected = 'Server listening at http://127.0.0.1:' +\n        fastify.server.address().port\n      t.same(line.msg, expected)\n      fastify.close()\n    })\n  })\n})\n\ntest('file option', t => {\n  t.plan(13)\n  let fastify = null\n  const dest = file()\n\n  fastify = Fastify({\n    logger: {\n      file: dest\n    }\n  })\n\n  fastify.get('/', function (req, reply) {\n    t.ok(req.log)\n    reply.send({ hello: 'world' })\n  })\n\n  fastify.listen({ port: 0, host: localhost }, err => {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    http.get(`http://${localhostForURL}:` + fastify.server.address().port, () => {\n      const stream = fs.createReadStream(dest).pipe(split(JSON.parse))\n\n      stream.once('data', listenAtLogLine => {\n        t.ok(listenAtLogLine, 'listen at log message is ok')\n\n        stream.once('data', line => {\n          const id = line.reqId\n          t.ok(line.reqId, 'reqId is defined')\n          t.ok(line.req, 'req is defined')\n          t.equal(line.msg, 'incoming request', 'message is set')\n          t.equal(line.req.method, 'GET', 'method is get')\n\n          stream.once('data', line => {\n            t.equal(line.reqId, id)\n            t.ok(line.reqId, 'reqId is defined')\n            t.ok(line.res, 'res is defined')\n            t.equal(line.msg, 'request completed', 'message is set')\n            t.equal(line.res.statusCode, 200, 'statusCode is 200')\n            t.ok(line.responseTime, 'responseTime is defined')\n            stream.resume()\n          })\n        })\n      })\n    })\n  })\n})\n\ntest('should log the error if no error handler is defined', t => {\n  t.plan(8)\n  const stream = split(JSON.parse)\n  const fastify = Fastify({\n    logger: {\n      stream,\n      level: 'info'\n    }\n  })\n  fastify.get('/error', function (req, reply) {\n    t.ok(req.log)\n    reply.send(new Error('a generic error'))\n  })\n  fastify.listen({ port: 0, host: localhost }, err => {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    http.get(`http://${localhostForURL}:` + fastify.server.address().port + '/error')\n    stream.once('data', listenAtLogLine => {\n      t.ok(listenAtLogLine, 'listen at log message is ok')\n      stream.once('data', line => {\n        t.equal(line.msg, 'incoming request', 'message is set')\n        stream.once('data', line => {\n          t.equal(line.level, 50, 'level is correct')\n          t.equal(line.msg, 'a generic error', 'message is set')\n          stream.once('data', line => {\n            t.equal(line.msg, 'request completed', 'message is set')\n            t.same(line.res, { statusCode: 500 }, 'status code is set')\n          })\n        })\n      })\n    })\n  })\n})\n\ntest('should log as info if error status code >= 400 and < 500 if no error handler is defined', t => {\n  t.plan(8)\n  const stream = split(JSON.parse)\n  const fastify = Fastify({\n    logger: {\n      stream,\n      level: 'info'\n    }\n  })\n  fastify.get('/400', function (req, reply) {\n    t.ok(req.log)\n    reply.send(Object.assign(new Error('a 400 error'), { statusCode: 400 }))\n  })\n  fastify.get('/503', function (req, reply) {\n    t.ok(req.log)\n    reply.send(Object.assign(new Error('a 503 error'), { statusCode: 503 }))\n  })\n  fastify.listen({ port: 0, host: localhost }, err => {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    http.get(`http://${localhostForURL}:` + fastify.server.address().port + '/400')\n    stream.once('data', listenAtLogLine => {\n      t.ok(listenAtLogLine, 'listen at log message is ok')\n      stream.once('data', line => {\n        t.equal(line.msg, 'incoming request', 'message is set')\n        stream.once('data', line => {\n          t.equal(line.level, 30, 'level is correct')\n          t.equal(line.msg, 'a 400 error', 'message is set')\n          stream.once('data', line => {\n            t.equal(line.msg, 'request completed', 'message is set')\n            t.same(line.res, { statusCode: 400 }, 'status code is set')\n          })\n        })\n      })\n    })\n  })\n})\n\ntest('should log as error if error status code >= 500 if no error handler is defined', t => {\n  t.plan(8)\n  const stream = split(JSON.parse)\n  const fastify = Fastify({\n    logger: {\n      stream,\n      level: 'info'\n    }\n  })\n  fastify.get('/503', function (req, reply) {\n    t.ok(req.log)\n    reply.send(Object.assign(new Error('a 503 error'), { statusCode: 503 }))\n  })\n  fastify.listen({ port: 0, host: localhost }, err => {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    http.get(`http://${localhostForURL}:` + fastify.server.address().port + '/503')\n    stream.once('data', listenAtLogLine => {\n      t.ok(listenAtLogLine, 'listen at log message is ok')\n      stream.once('data', line => {\n        t.equal(line.msg, 'incoming request', 'message is set')\n        stream.once('data', line => {\n          t.equal(line.level, 50, 'level is correct')\n          t.equal(line.msg, 'a 503 error', 'message is set')\n          stream.once('data', line => {\n            t.equal(line.msg, 'request completed', 'message is set')\n            t.same(line.res, { statusCode: 503 }, 'status code is set')\n          })\n        })\n      })\n    })\n  })\n})\n\ntest('should not log the error if error handler is defined and it does not error', t => {\n  t.plan(8)\n  const stream = split(JSON.parse)\n  const fastify = Fastify({\n    logger: {\n      stream,\n      level: 'info'\n    }\n  })\n  fastify.get('/error', function (req, reply) {\n    t.ok(req.log)\n    reply.send(new Error('something happened'))\n  })\n  fastify.setErrorHandler((err, req, reply) => {\n    t.ok(err)\n    reply.send('something bad happened')\n  })\n  fastify.listen({ port: 0, host: localhost }, err => {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    http.get(`http://${localhostForURL}:` + fastify.server.address().port + '/error')\n    stream.once('data', listenAtLogLine => {\n      t.ok(listenAtLogLine, 'listen at log message is ok')\n      stream.once('data', line => {\n        t.equal(line.msg, 'incoming request', 'message is set')\n        stream.once('data', line => {\n          t.equal(line.level, 30, 'level is correct')\n          t.equal(line.msg, 'request completed', 'message is set')\n          t.same(line.res, { statusCode: 200 }, 'status code is set')\n        })\n      })\n    })\n  })\n})\n\ntest('should not rely on raw request to log errors', t => {\n  t.plan(7)\n  const stream = split(JSON.parse)\n  const fastify = Fastify({\n    logger: {\n      stream,\n      level: 'info'\n    }\n  })\n  fastify.get('/error', function (req, reply) {\n    t.ok(req.log)\n    reply.status(415).send(new Error('something happened'))\n  })\n  fastify.listen({ port: 0, host: localhost }, err => {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    http.get(`http://${localhostForURL}:` + fastify.server.address().port + '/error')\n    stream.once('data', listenAtLogLine => {\n      t.ok(listenAtLogLine, 'listen at log message is ok')\n      stream.once('data', line => {\n        t.equal(line.msg, 'incoming request', 'message is set')\n        stream.once('data', line => {\n          t.equal(line.level, 30, 'level is correct')\n          t.equal(line.msg, 'something happened', 'message is set')\n          t.same(line.res, { statusCode: 415 }, 'status code is set')\n        })\n      })\n    })\n  })\n})\n\ntest('should redact the authorization header if so specified', t => {\n  t.plan(7)\n  const stream = split(JSON.parse)\n  const fastify = Fastify({\n    logger: {\n      stream,\n      redact: ['req.headers.authorization'],\n      level: 'info',\n      serializers: {\n        req (req) {\n          return {\n            method: req.method,\n            url: req.url,\n            headers: req.headers,\n            hostname: req.hostname,\n            remoteAddress: req.ip,\n            remotePort: req.socket.remotePort\n          }\n        }\n      }\n    }\n  })\n  fastify.get('/', function (req, reply) {\n    t.same(req.headers.authorization, 'Bearer abcde')\n    reply.send({ hello: 'world' })\n  })\n  stream.once('data', listenAtLogLine => {\n    t.ok(listenAtLogLine, 'listen at log message is ok')\n    stream.once('data', line => {\n      t.equal(line.req.headers.authorization, '[Redacted]', 'authorization is redacted')\n    })\n  })\n  fastify.listen({ port: 0, host: localhost }, err => {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    sget({\n      method: 'GET',\n      url: `http://${localhostForURL}:` + fastify.server.address().port,\n      headers: {\n        authorization: 'Bearer abcde'\n      }\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.same(body.toString(), JSON.stringify({ hello: 'world' }))\n    })\n  })\n})\n\ntest('should not log incoming request and outgoing response when disabled', t => {\n  t.plan(3)\n  const lines = []\n  const dest = new stream.Writable({\n    write: function (chunk, enc, cb) {\n      lines.push(JSON.parse(chunk))\n      cb()\n    }\n  })\n  const fastify = Fastify({ disableRequestLogging: true, logger: { level: 'info', stream: dest } })\n\n  fastify.get('/500', (req, reply) => {\n    reply.code(500).send(Error('500 error'))\n  })\n\n  fastify.inject({\n    url: '/500',\n    method: 'GET'\n  }, (e, res) => {\n    t.same(lines.length, 1)\n    t.ok(lines[0].msg)\n    t.same(lines[0].msg, '500 error')\n  })\n})\n\ntest('should not log incoming request and outgoing response for 404 onBadUrl when disabled', t => {\n  t.plan(1)\n  const lines = []\n  const dest = new stream.Writable({\n    write: function (chunk, enc, cb) {\n      lines.push(JSON.parse(chunk))\n      cb()\n    }\n  })\n  const fastify = Fastify({ disableRequestLogging: true, logger: { level: 'info', stream: dest } })\n\n  fastify.inject({\n    url: '/%c0',\n    method: 'GET'\n  }, (e, res) => {\n    // it will log 1 line only because of basic404\n    t.same(lines.length, 1)\n  })\n})\n\ntest('should pass when using unWritable props in the logger option', t => {\n  t.plan(1)\n  Fastify({\n    logger: Object.defineProperty({}, 'level', { value: 'info' })\n  })\n  t.pass()\n})\n\ntest('should be able to use a custom logger', t => {\n  t.plan(1)\n\n  const logger = {\n    fatal: () => {},\n    error: () => {},\n    warn: () => {},\n    info: () => {},\n    debug: () => {},\n    trace: () => {},\n    child: () => {}\n  }\n\n  Fastify({ logger })\n\n  t.pass()\n})\n\ntest('should create a default logger if provided one is invalid', t => {\n  t.plan(1)\n\n  const logger = new Date()\n\n  Fastify({ logger })\n\n  t.pass()\n})\n\ntest('should not throw error when serializing custom req', t => {\n  t.plan(1)\n\n  const lines = []\n  const dest = new stream.Writable({\n    write: function (chunk, enc, cb) {\n      lines.push(JSON.parse(chunk))\n      cb()\n    }\n  })\n  const fastify = Fastify({ logger: { level: 'info', stream: dest } })\n  fastify.log.info({ req: {} })\n\n  t.same(lines[0].req, {})\n})\n%/test/bundler/esbuild/bundler-test.js\u0002'use strict'\n\nconst t = require('tap')\nconst test = t.test\nconst fastifySuccess = require('./dist/success')\nconst fastifyFailPlugin = require('./dist/failPlugin')\n\ntest('Bundled package should work', (t) => {\n  t.plan(4)\n  fastifySuccess.ready((err) => {\n    t.error(err)\n    fastifySuccess.inject(\n      {\n        method: 'GET',\n        url: '/'\n      },\n      (error, res) => {\n        t.error(error)\n        t.equal(res.statusCode, 200)\n        t.same(res.json(), { hello: 'world' })\n      }\n    )\n  })\n})\n\ntest('Bundled package should not work with bad plugin version', (t) => {\n  t.plan(1)\n  fastifyFailPlugin.ready((err) => {\n    t.match(err.message, /expected '9.x' fastify version/i)\n  })\n})\n/build/build-validation.js\u0013'use strict'\n\nconst AjvStandaloneCompiler = require('@fastify/ajv-compiler/standalone')\nconst { _ } = require('ajv')\nconst fs = require('fs')\nconst path = require('path')\n\nconst factory = AjvStandaloneCompiler({\n  readMode: false,\n  storeFunction (routeOpts, schemaValidationCode) {\n    const moduleCode = `// This file is autogenerated by ${__filename.replace(__dirname, 'build')}, do not edit\n/* istanbul ignore file */\n${schemaValidationCode}\n\nmodule.exports.defaultInitOptions = ${JSON.stringify(defaultInitOptions)}\n`\n\n    const file = path.join(__dirname, '..', 'lib', 'configValidator.js')\n    fs.writeFileSync(file, moduleCode)\n    console.log(`Saved ${file} file successfully`)\n  }\n})\n\nconst defaultInitOptions = {\n  connectionTimeout: 0, // 0 sec\n  keepAliveTimeout: 72000, // 72 seconds\n  forceCloseConnections: undefined, // keep-alive connections\n  maxRequestsPerSocket: 0, // no limit\n  requestTimeout: 0, // no limit\n  bodyLimit: 1024 * 1024, // 1 MiB\n  caseSensitive: true,\n  allowUnsafeRegex: false,\n  disableRequestLogging: false,\n  jsonShorthand: true,\n  ignoreTrailingSlash: false,\n  ignoreDuplicateSlashes: false,\n  maxParamLength: 100,\n  onProtoPoisoning: 'error',\n  onConstructorPoisoning: 'error',\n  pluginTimeout: 10000,\n  requestIdHeader: 'request-id',\n  requestIdLogLabel: 'reqId',\n  http2SessionTimeout: 72000, // 72 seconds\n  exposeHeadRoutes: true\n}\n\nconst schema = {\n  type: 'object',\n  additionalProperties: false,\n  properties: {\n    connectionTimeout: { type: 'integer', default: defaultInitOptions.connectionTimeout },\n    keepAliveTimeout: { type: 'integer', default: defaultInitOptions.keepAliveTimeout },\n    forceCloseConnections: {\n      oneOf: [\n        {\n          type: 'string',\n          pattern: 'idle'\n        },\n        {\n          type: 'boolean'\n        }\n      ]\n    },\n    maxRequestsPerSocket: { type: 'integer', default: defaultInitOptions.maxRequestsPerSocket, nullable: true },\n    requestTimeout: { type: 'integer', default: defaultInitOptions.requestTimeout },\n    bodyLimit: { type: 'integer', default: defaultInitOptions.bodyLimit },\n    caseSensitive: { type: 'boolean', default: defaultInitOptions.caseSensitive },\n    allowUnsafeRegex: { type: 'boolean', default: defaultInitOptions.allowUnsafeRegex },\n    http2: { type: 'boolean' },\n    https: {\n      if: {\n        not: {\n          oneOf: [\n            { type: 'boolean' },\n            { type: 'null' },\n            {\n              type: 'object',\n              additionalProperties: false,\n              required: ['allowHTTP1'],\n              properties: {\n                allowHTTP1: { type: 'boolean' }\n              }\n            }\n          ]\n        }\n      },\n      then: { setDefaultValue: true }\n    },\n    ignoreTrailingSlash: { type: 'boolean', default: defaultInitOptions.ignoreTrailingSlash },\n    ignoreDuplicateSlashes: { type: 'boolean', default: defaultInitOptions.ignoreDuplicateSlashes },\n    disableRequestLogging: {\n      type: 'boolean',\n      default: false\n    },\n    jsonShorthand: { type: 'boolean', default: defaultInitOptions.jsonShorthand },\n    maxParamLength: { type: 'integer', default: defaultInitOptions.maxParamLength },\n    onProtoPoisoning: { type: 'string', default: defaultInitOptions.onProtoPoisoning },\n    onConstructorPoisoning: { type: 'string', default: defaultInitOptions.onConstructorPoisoning },\n    pluginTimeout: { type: 'integer', default: defaultInitOptions.pluginTimeout },\n    requestIdHeader: { anyOf: [{ enum: [false] }, { type: 'string' }], default: defaultInitOptions.requestIdHeader },\n    requestIdLogLabel: { type: 'string', default: defaultInitOptions.requestIdLogLabel },\n    http2SessionTimeout: { type: 'integer', default: defaultInitOptions.http2SessionTimeout },\n    exposeHeadRoutes: { type: 'boolean', default: defaultInitOptions.exposeHeadRoutes },\n    // deprecated style of passing the versioning constraint\n    versioning: {\n      type: 'object',\n      additionalProperties: true,\n      required: ['storage', 'deriveVersion'],\n      properties: {\n        storage: { },\n        deriveVersion: { }\n      }\n    },\n    constraints: {\n      type: 'object',\n      additionalProperties: {\n        type: 'object',\n        required: ['name', 'storage', 'validate', 'deriveConstraint'],\n        additionalProperties: true,\n        properties: {\n          name: { type: 'string' },\n          storage: { },\n          validate: { },\n          deriveConstraint: { }\n        }\n      }\n    }\n  }\n}\n\nconst compiler = factory({}, {\n  customOptions: {\n    code: {\n      source: true,\n      lines: true,\n      optimize: 3\n    },\n    removeAdditional: true,\n    useDefaults: true,\n    coerceTypes: true,\n    keywords: [\n      {\n        keyword: 'setDefaultValue',\n        $data: true,\n        // error: false,\n        modifying: true,\n        valid: true,\n        code (keywordCxt) {\n          const { gen, it, schemaValue } = keywordCxt\n          const logicCode = gen.assign(_`${it.parentData}[${it.parentDataProperty}]`, schemaValue)\n          return logicCode\n        }\n      }\n    ]\n  }\n})\n\ncompiler({ schema })\n/test/content-length.test.js\u0010'use strict'\n\nconst t = require('tap')\nconst test = t.test\nconst Fastify = require('..')\n\ntest('default 413 with bodyLimit option', t => {\n  t.plan(4)\n\n  const fastify = Fastify({\n    bodyLimit: 10\n  })\n\n  fastify.post('/', function (req, reply) {\n    reply.send({ hello: 'world' })\n  })\n\n  fastify.inject({\n    method: 'POST',\n    url: '/',\n    body: {\n      text: '12345678901234567890123456789012345678901234567890'\n    }\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 413)\n    t.equal(res.headers['content-type'], 'application/json; charset=utf-8')\n    t.same(JSON.parse(res.payload), {\n      error: 'Payload Too Large',\n      code: 'FST_ERR_CTP_BODY_TOO_LARGE',\n      message: 'Request body is too large',\n      statusCode: 413\n    })\n  })\n})\n\ntest('default 400 with wrong content-length', t => {\n  t.plan(4)\n\n  const fastify = Fastify()\n\n  fastify.post('/', function (req, reply) {\n    reply.send({ hello: 'world' })\n  })\n\n  fastify.inject({\n    method: 'POST',\n    url: '/',\n    headers: {\n      'content-length': 20\n    },\n    body: {\n      text: '12345678901234567890123456789012345678901234567890'\n    }\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 400)\n    t.equal(res.headers['content-type'], 'application/json; charset=utf-8')\n    t.same(JSON.parse(res.payload), {\n      error: 'Bad Request',\n      code: 'FST_ERR_CTP_INVALID_CONTENT_LENGTH',\n      message: 'Request body size did not match Content-Length',\n      statusCode: 400\n    })\n  })\n})\n\ntest('custom 413 with bodyLimit option', t => {\n  t.plan(4)\n\n  const fastify = Fastify({\n    bodyLimit: 10\n  })\n\n  fastify.post('/', function (req, reply) {\n    reply.send({ hello: 'world' })\n  })\n\n  fastify.setErrorHandler(function (err, request, reply) {\n    reply\n      .code(err.statusCode)\n      .type('application/json; charset=utf-8')\n      .send(err)\n  })\n\n  fastify.inject({\n    method: 'POST',\n    url: '/',\n    body: {\n      text: '12345678901234567890123456789012345678901234567890'\n    }\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 413)\n    t.equal(res.headers['content-type'], 'application/json; charset=utf-8')\n    t.same(JSON.parse(res.payload), {\n      error: 'Payload Too Large',\n      code: 'FST_ERR_CTP_BODY_TOO_LARGE',\n      message: 'Request body is too large',\n      statusCode: 413\n    })\n  })\n})\n\ntest('custom 400 with wrong content-length', t => {\n  t.plan(4)\n\n  const fastify = Fastify()\n\n  fastify.post('/', function (req, reply) {\n    reply.send({ hello: 'world' })\n  })\n\n  fastify.setErrorHandler(function (err, request, reply) {\n    reply\n      .code(err.statusCode)\n      .type('application/json; charset=utf-8')\n      .send(err)\n  })\n\n  fastify.inject({\n    method: 'POST',\n    url: '/',\n    headers: {\n      'content-length': 20\n    },\n    body: {\n      text: '12345678901234567890123456789012345678901234567890'\n    }\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 400)\n    t.equal(res.headers['content-type'], 'application/json; charset=utf-8')\n    t.same(JSON.parse(res.payload), {\n      error: 'Bad Request',\n      code: 'FST_ERR_CTP_INVALID_CONTENT_LENGTH',\n      message: 'Request body size did not match Content-Length',\n      statusCode: 400\n    })\n  })\n})\n\ntest('#2214 - wrong content-length', t => {\n  const fastify = Fastify()\n\n  fastify.get('/', async () => {\n    const error = new Error('MY_ERROR_MESSAGE')\n    error.headers = {\n      'content-length': 2\n    }\n    throw error\n  })\n\n  fastify.inject({\n    method: 'GET',\n    path: '/'\n  })\n    .then(response => {\n      t.equal(response.headers['content-length'], '' + response.rawPayload.length)\n      t.end()\n    })\n})\n\ntest('#2543 - wrong content-length with errorHandler', t => {\n  const fastify = Fastify()\n\n  fastify.setErrorHandler((_error, _request, reply) => {\n    reply.code(500).send({ message: 'longer than 2 bytes' })\n  })\n\n  fastify.get('/', async () => {\n    const error = new Error('MY_ERROR_MESSAGE')\n    error.headers = {\n      'content-length': 2\n    }\n    throw error\n  })\n\n  fastify.inject({\n    method: 'GET',\n    path: '/'\n  })\n    .then(res => {\n      t.equal(res.statusCode, 500)\n      t.equal(res.headers['content-length'], '' + res.rawPayload.length)\n      t.same(JSON.parse(res.payload), { message: 'longer than 2 bytes' })\n      t.end()\n    })\n})\n/lib/validation.js\u0013\u0014'use strict'\n\nconst {\n  kSchemaHeaders: headersSchema,\n  kSchemaParams: paramsSchema,\n  kSchemaQuerystring: querystringSchema,\n  kSchemaBody: bodySchema,\n  kSchemaResponse: responseSchema\n} = require('./symbols')\nconst scChecker = /^[1-5]{1}[0-9]{2}$|^[1-5]xx$|^default$/\n\nconst {\n  FST_ERR_SCH_RESPONSE_SCHEMA_NOT_NESTED_2XX\n} = require('./errors')\n\nfunction compileSchemasForSerialization (context, compile) {\n  if (!context.schema || !context.schema.response) {\n    return\n  }\n  const { method, url } = context.config || {}\n  context[responseSchema] = Object.keys(context.schema.response)\n    .reduce(function (acc, statusCode) {\n      const schema = context.schema.response[statusCode]\n      statusCode = statusCode.toLowerCase()\n      if (!scChecker.exec(statusCode)) {\n        throw new FST_ERR_SCH_RESPONSE_SCHEMA_NOT_NESTED_2XX()\n      }\n\n      if (schema.content) {\n        const contentTypesSchemas = {}\n        for (const mediaName of Object.keys(schema.content)) {\n          const contentSchema = schema.content[mediaName].schema\n          contentTypesSchemas[mediaName] = compile({\n            schema: contentSchema,\n            url,\n            method,\n            httpStatus: statusCode,\n            contentType: mediaName\n          })\n        }\n        acc[statusCode] = contentTypesSchemas\n      } else {\n        acc[statusCode] = compile({\n          schema,\n          url,\n          method,\n          httpStatus: statusCode\n        })\n      }\n\n      return acc\n    }, {})\n}\n\nfunction compileSchemasForValidation (context, compile, isCustom) {\n  const { schema } = context\n  if (!schema) {\n    return\n  }\n\n  const { method, url } = context.config || {}\n\n  const headers = schema.headers\n  // the or part is used for backward compatibility\n  if (headers && (isCustom || Object.getPrototypeOf(headers) !== Object.prototype)) {\n    // do not mess with schema when custom validator applied, e.g. Joi, Typebox\n    context[headersSchema] = compile({ schema: headers, method, url, httpPart: 'headers' })\n  } else if (headers) {\n    // The header keys are case insensitive\n    //  https://tools.ietf.org/html/rfc2616#section-4.2\n    const headersSchemaLowerCase = {}\n    Object.keys(headers).forEach(k => { headersSchemaLowerCase[k] = headers[k] })\n    if (headersSchemaLowerCase.required instanceof Array) {\n      headersSchemaLowerCase.required = headersSchemaLowerCase.required.map(h => h.toLowerCase())\n    }\n    if (headers.properties) {\n      headersSchemaLowerCase.properties = {}\n      Object.keys(headers.properties).forEach(k => {\n        headersSchemaLowerCase.properties[k.toLowerCase()] = headers.properties[k]\n      })\n    }\n    context[headersSchema] = compile({ schema: headersSchemaLowerCase, method, url, httpPart: 'headers' })\n  }\n\n  if (schema.body) {\n    context[bodySchema] = compile({ schema: schema.body, method, url, httpPart: 'body' })\n  }\n\n  if (schema.querystring) {\n    context[querystringSchema] = compile({ schema: schema.querystring, method, url, httpPart: 'querystring' })\n  }\n\n  if (schema.params) {\n    context[paramsSchema] = compile({ schema: schema.params, method, url, httpPart: 'params' })\n  }\n}\n\nfunction validateParam (validatorFunction, request, paramName) {\n  const isUndefined = request[paramName] === undefined\n  const ret = validatorFunction && validatorFunction(isUndefined ? null : request[paramName])\n  if (ret === false) return validatorFunction.errors\n  if (ret && ret.error) return ret.error\n  if (ret && ret.value) request[paramName] = ret.value\n  return false\n}\n\nfunction validate (context, request) {\n  const params = validateParam(context[paramsSchema], request, 'params')\n\n  if (params) {\n    return wrapValidationError(params, 'params', context.schemaErrorFormatter)\n  }\n  const body = validateParam(context[bodySchema], request, 'body')\n  if (body) {\n    return wrapValidationError(body, 'body', context.schemaErrorFormatter)\n  }\n  const query = validateParam(context[querystringSchema], request, 'query')\n  if (query) {\n    return wrapValidationError(query, 'querystring', context.schemaErrorFormatter)\n  }\n  const headers = validateParam(context[headersSchema], request, 'headers')\n  if (headers) {\n    return wrapValidationError(headers, 'headers', context.schemaErrorFormatter)\n  }\n  return null\n}\n\nfunction wrapValidationError (result, dataVar, schemaErrorFormatter) {\n  if (result instanceof Error) {\n    result.statusCode = result.statusCode || 400\n    result.validationContext = result.validationContext || dataVar\n    return result\n  }\n\n  const error = schemaErrorFormatter(result, dataVar)\n  error.statusCode = error.statusCode || 400\n  error.validation = result\n  error.validationContext = dataVar\n  return error\n}\n\nmodule.exports = {\n  symbols: { bodySchema, querystringSchema, responseSchema, paramsSchema, headersSchema },\n  compileSchemasForValidation,\n  compileSchemasForSerialization,\n  validate\n}\n/lib/logger.js\f'use strict'\n\n/**\n * Code imported from `pino-http`\n * Repo: https://github.com/pinojs/pino-http\n * License: MIT (https://raw.githubusercontent.com/pinojs/pino-http/master/LICENSE)\n */\n\nconst nullLogger = require('abstract-logging')\nconst pino = require('pino')\nconst { serializersSym } = pino.symbols\nconst { FST_ERR_LOG_INVALID_DESTINATION } = require('./errors')\n\nfunction createPinoLogger (opts, stream) {\n  stream = stream || opts.stream\n  delete opts.stream\n\n  if (stream && opts.file) {\n    throw new FST_ERR_LOG_INVALID_DESTINATION()\n  } else if (opts.file) {\n    // we do not have stream\n    stream = pino.destination(opts.file)\n    delete opts.file\n  }\n\n  const prevLogger = opts.logger\n  const prevGenReqId = opts.genReqId\n  let logger = null\n\n  if (prevLogger) {\n    opts.logger = undefined\n    opts.genReqId = undefined\n    // we need to tap into pino internals because in v5 it supports\n    // adding serializers in child loggers\n    if (prevLogger[serializersSym]) {\n      opts.serializers = Object.assign({}, opts.serializers, prevLogger[serializersSym])\n    }\n    logger = prevLogger.child({}, opts)\n    opts.logger = prevLogger\n    opts.genReqId = prevGenReqId\n  } else {\n    logger = pino(opts, stream)\n  }\n\n  return logger\n}\n\nconst serializers = {\n  req: function asReqValue (req) {\n    return {\n      method: req.method,\n      url: req.url,\n      version: req.headers && req.headers['accept-version'],\n      hostname: req.hostname,\n      remoteAddress: req.ip,\n      remotePort: req.socket ? req.socket.remotePort : undefined\n    }\n  },\n  err: pino.stdSerializers.err,\n  res: function asResValue (reply) {\n    return {\n      statusCode: reply.statusCode\n    }\n  }\n}\n\nfunction now () {\n  const ts = process.hrtime()\n  return (ts[0] * 1e3) + (ts[1] / 1e6)\n}\n\nfunction createLogger (options) {\n  if (isValidLogger(options.logger)) {\n    const logger = createPinoLogger({\n      logger: options.logger,\n      serializers: Object.assign({}, serializers, options.logger.serializers)\n    })\n    return { logger, hasLogger: true }\n  } else if (!options.logger) {\n    const logger = nullLogger\n    logger.child = () => logger\n    return { logger, hasLogger: false }\n  } else {\n    const localLoggerOptions = {}\n    if (Object.prototype.toString.call(options.logger) === '[object Object]') {\n      Reflect.ownKeys(options.logger).forEach(prop => {\n        Object.defineProperty(localLoggerOptions, prop, {\n          value: options.logger[prop],\n          writable: true,\n          enumerable: true,\n          configurable: true\n        })\n      })\n    }\n    localLoggerOptions.level = localLoggerOptions.level || 'info'\n    localLoggerOptions.serializers = Object.assign({}, serializers, localLoggerOptions.serializers)\n    options.logger = localLoggerOptions\n    const logger = createPinoLogger(options.logger)\n    return { logger, hasLogger: true }\n  }\n}\n\nfunction isValidLogger (logger) {\n  if (!logger) {\n    return false\n  }\n\n  let result = true\n  const methods = ['info', 'error', 'debug', 'fatal', 'warn', 'trace', 'child']\n  for (let i = 0; i < methods.length; i += 1) {\n    if (!logger[methods[i]] || typeof logger[methods[i]] !== 'function') {\n      result = false\n      break\n    }\n  }\n  return result\n}\n\nmodule.exports = {\n  createLogger,\n  serializers,\n  now\n}\n/GOVERNANCE.md\u000f# Fastify Project Governance\n\n<!-- TOC -->\n\n* [Lead Maintainers](#lead-maintainers)\n* [Collaborators](#collaborators)\n  * [Collaborator activities](#collaborator-activities)\n* [Great Contributors](#great-contributors)\n* [Collaborator nominations](#collaborator-maintainers-nominations)\n* [Lead Maintainers nominations](#lead-maintainers-nominations)\n* [Consensus seeking process](#consensus-seeking-process)\n\n<!-- /TOC -->\n\n## Lead Maintainers\n\nFastify Lead Maintainers are the founder of the project and the organization\nowners. They are the only members of the `@fastify/leads` team. The Lead\nMaintainers are the curator of the Fastify project and their key responsibility\nis to issue releases of Fastify and its dependencies.\n\n## Collaborators\n\nFastify Collaborators maintain the projects of the Fastify organization.\n\nThey are split into the following teams:\n\n|  Team | Responsibility  |  Repository |\n|---|---|---|\n| `@fastify/leads` | Fastify Lead Maintainers | GitHub organization owners |\n| `@fastify/core`   |  Fastify Core development  |  `fastify`, `fast-json-stringify`, `light-my-request`, `fastify-plugin`, `middie` |\n| `@fastify/plugins`   |  Build, maintain and release Fastify plugins  |  All plugins repositories |\n| `@fastify/benchmarks`   |  Build and maintain our benchmarks suite  |  `benchmarks` |\n| `@fastify/docs-chinese`   |  Translate the Fastify documentation in Chinese  |  `docs-chinese` |\n\nEvery member of the org is also part of `@fastify/fastify`.\n\nCollaborators have:\n\n* Commit access to the projects repository of the team they belong\n * Grant to release new versions of the project\n\nBoth Collaborators and non-Collaborators may propose changes to the source code\nof the projects of the organization. The mechanism to propose such a change is a\nGitHub pull request. Collaborators review and merge (_land_) pull requests\nfollowing the [CONTRIBUTING](CONTRIBUTING.md#rules) guidelines.\n\n### Collaborator activities\n\n* Helping users and novice contributors\n* Contributing code and documentation changes that improve the project\n* Reviewing and commenting on issues and pull requests\n* Participation in working groups\n* Merging pull requests\n* Release plugins\n\nThe Lead Maintainers can remove inactive Collaborators or provide them with\n_Past Collaborators_ status. Past Collaborators may request that the Lead\nMaintainers restore them to active status.\n\n\n## Great Contributors\n\nGreat contributors on a specific area in the Fastify ecosystem will be invited\nto join this group by Lead Maintainers. This group has the same permissions of a\ncontributor.\n\n## Collaborator nominations\n\nIndividuals making significant and valuable contributions to the project may be\na candidate to join the Fastify organization.\n\nA Collaborator needs to open a private team discussion on GitHub and list the\ncandidates they want to sponsor with a link to the user's contributions. For\nexample:\n\n* Activities in the Fastify organization\n  `[USERNAME](https://github.com/search?q=author:USERNAME+org:fastify)`\n\nOtherwise, a Contributor may self-apply if they believe they meet the above\ncriteria by reaching out to a Lead Maintainer privately with the links to their\nvaluable contributions. The Lead Maintainers will reply to the Contributor and\nwill decide if candidate it to be made a collaborator.\n\nThe consensus to grant a new candidate Collaborator status is reached when:\n\n- at least one of the Lead Maintainers approve\n- at least two of the Team Members approve\n\nAfter these conditions are satisfied, the [onboarding\nprocess](CONTRIBUTING.md#onboarding-collaborators) may start.\n\n\n## Lead Maintainers nominations\n\nA Team Member may be promoted to a Lead Maintainers only through nomination by a\nLead maintainer and with agreement from the rest of Lead Maintainers.\n\n\n## Consensus seeking process\n\nThe Fastify organization follows a [Consensus Seeking][] decision-making model.\n\n[Consensus Seeking]:\n    https://en.wikipedia.org/wiki/Consensus-seeking_decision-making\n/test/hooks.on-ready.test.js%D'use strict'\n\nconst t = require('tap')\nconst Fastify = require('../fastify')\nconst immediate = require('util').promisify(setImmediate)\n\nt.test('onReady should be called in order', t => {\n  t.plan(7)\n  const fastify = Fastify()\n\n  let order = 0\n\n  fastify.addHook('onReady', function (done) {\n    t.equal(order++, 0, 'called in root')\n    t.equal(this.pluginName, fastify.pluginName, 'the this binding is the right instance')\n    done()\n  })\n\n  fastify.register(async (childOne, o) => {\n    childOne.addHook('onReady', function (done) {\n      t.equal(order++, 1, 'called in childOne')\n      t.equal(this.pluginName, childOne.pluginName, 'the this binding is the right instance')\n      done()\n    })\n\n    childOne.register(async (childTwo, o) => {\n      childTwo.addHook('onReady', async function () {\n        await immediate()\n        t.equal(order++, 2, 'called in childTwo')\n        t.equal(this.pluginName, childTwo.pluginName, 'the this binding is the right instance')\n      })\n    })\n  })\n\n  fastify.ready(err => t.error(err))\n})\n\nt.test('async onReady should be called in order', async t => {\n  t.plan(7)\n  const fastify = Fastify()\n\n  let order = 0\n\n  fastify.addHook('onReady', async function () {\n    await immediate()\n    t.equal(order++, 0, 'called in root')\n    t.equal(this.pluginName, fastify.pluginName, 'the this binding is the right instance')\n  })\n\n  fastify.register(async (childOne, o) => {\n    childOne.addHook('onReady', async function () {\n      await immediate()\n      t.equal(order++, 1, 'called in childOne')\n      t.equal(this.pluginName, childOne.pluginName, 'the this binding is the right instance')\n    })\n\n    childOne.register(async (childTwo, o) => {\n      childTwo.addHook('onReady', async function () {\n        await immediate()\n        t.equal(order++, 2, 'called in childTwo')\n        t.equal(this.pluginName, childTwo.pluginName, 'the this binding is the right instance')\n      })\n    })\n  })\n\n  await fastify.ready()\n  t.pass('ready')\n})\n\nt.test('mix ready and onReady', async t => {\n  t.plan(2)\n  const fastify = Fastify()\n  let order = 0\n\n  fastify.addHook('onReady', async function () {\n    await immediate()\n    order++\n  })\n\n  await fastify.ready()\n  t.equal(order, 1)\n\n  await fastify.ready()\n  t.equal(order, 1, 'ready hooks execute once')\n})\n\nt.test('listen and onReady order', async t => {\n  t.plan(9)\n\n  const fastify = Fastify()\n  let order = 0\n\n  fastify.register((instance, opts, done) => {\n    instance.ready(checkOrder.bind(null, 0))\n    instance.addHook('onReady', checkOrder.bind(null, 4))\n\n    instance.register((subinstance, opts, done) => {\n      subinstance.ready(checkOrder.bind(null, 1))\n      subinstance.addHook('onReady', checkOrder.bind(null, 5))\n\n      subinstance.register((realSubInstance, opts, done) => {\n        realSubInstance.ready(checkOrder.bind(null, 2))\n        realSubInstance.addHook('onReady', checkOrder.bind(null, 6))\n        done()\n      })\n      done()\n    })\n    done()\n  })\n\n  fastify.addHook('onReady', checkOrder.bind(null, 3))\n\n  await fastify.ready()\n  t.pass('trigger the onReady')\n  await fastify.listen({ port: 0 })\n  t.pass('do not trigger the onReady')\n\n  await fastify.close()\n\n  function checkOrder (shouldbe) {\n    t.equal(order, shouldbe)\n    order++\n  }\n})\n\nt.test('multiple ready calls', async t => {\n  t.plan(11)\n\n  const fastify = Fastify()\n  let order = 0\n\n  fastify.register(async (instance, opts) => {\n    instance.ready(checkOrder.bind(null, 1))\n    instance.addHook('onReady', checkOrder.bind(null, 6))\n\n    await instance.register(async (subinstance, opts) => {\n      subinstance.ready(checkOrder.bind(null, 2))\n      subinstance.addHook('onReady', checkOrder.bind(null, 7))\n    })\n\n    t.equal(order, 0, 'ready and hooks not triggered yet')\n    order++\n  })\n\n  fastify.addHook('onReady', checkOrder.bind(null, 3))\n  fastify.addHook('onReady', checkOrder.bind(null, 4))\n  fastify.addHook('onReady', checkOrder.bind(null, 5))\n\n  await fastify.ready()\n  t.pass('trigger the onReady')\n\n  await fastify.ready()\n  t.pass('do not trigger the onReady')\n\n  await fastify.ready()\n  t.pass('do not trigger the onReady')\n\n  function checkOrder (shouldbe) {\n    t.equal(order, shouldbe)\n    order++\n  }\n})\n\nt.test('onReady should manage error in sync', t => {\n  t.plan(4)\n  const fastify = Fastify()\n\n  fastify.addHook('onReady', function (done) {\n    t.pass('called in root')\n    done()\n  })\n\n  fastify.register(async (childOne, o) => {\n    childOne.addHook('onReady', function (done) {\n      t.pass('called in childOne')\n      done(new Error('FAIL ON READY'))\n    })\n\n    childOne.register(async (childTwo, o) => {\n      childTwo.addHook('onReady', async function () {\n        t.fail('should not be called')\n      })\n    })\n  })\n\n  fastify.ready(err => {\n    t.ok(err)\n    t.equal(err.message, 'FAIL ON READY')\n  })\n})\n\nt.test('onReady should manage error in async', t => {\n  t.plan(4)\n  const fastify = Fastify()\n\n  fastify.addHook('onReady', function (done) {\n    t.pass('called in root')\n    done()\n  })\n\n  fastify.register(async (childOne, o) => {\n    childOne.addHook('onReady', async function () {\n      t.pass('called in childOne')\n      throw new Error('FAIL ON READY')\n    })\n\n    childOne.register(async (childTwo, o) => {\n      childTwo.addHook('onReady', async function () {\n        t.fail('should not be called')\n      })\n    })\n  })\n\n  fastify.ready(err => {\n    t.ok(err)\n    t.equal(err.message, 'FAIL ON READY')\n  })\n})\n\nt.test('onReady should manage sync error', t => {\n  t.plan(4)\n  const fastify = Fastify()\n\n  fastify.addHook('onReady', function (done) {\n    t.pass('called in root')\n    done()\n  })\n\n  fastify.register(async (childOne, o) => {\n    childOne.addHook('onReady', function (done) {\n      t.pass('called in childOne')\n      throw new Error('FAIL UNWANTED SYNC EXCEPTION')\n    })\n\n    childOne.register(async (childTwo, o) => {\n      childTwo.addHook('onReady', async function () {\n        t.fail('should not be called')\n      })\n    })\n  })\n\n  fastify.ready(err => {\n    t.ok(err)\n    t.equal(err.message, 'FAIL UNWANTED SYNC EXCEPTION')\n  })\n})\n\nt.test('onReady can not add decorators or application hooks', t => {\n  t.plan(3)\n  const fastify = Fastify()\n\n  fastify.addHook('onReady', function (done) {\n    t.pass('called in root')\n    fastify.decorate('test', () => {})\n\n    fastify.addHook('onReady', async function () {\n      t.fail('it will be not called')\n    })\n    done()\n  })\n\n  fastify.addHook('onReady', function (done) {\n    t.ok(this.hasDecorator('test'))\n    done()\n  })\n\n  fastify.ready(err => { t.error(err) })\n})\n\nt.test('onReady cannot add lifecycle hooks', t => {\n  t.plan(5)\n  const fastify = Fastify()\n\n  fastify.addHook('onReady', function (done) {\n    t.pass('called in root')\n    try {\n      fastify.addHook('onRequest', (request, reply, done) => {})\n    } catch (error) {\n      t.ok(error)\n      t.equal(error.message, 'Root plugin has already booted')\n      // TODO: look where the error pops up\n      t.equal(error.code, 'AVV_ERR_PLUGIN_NOT_VALID')\n      done(error)\n    }\n  })\n\n  fastify.addHook('onRequest', (request, reply, done) => {})\n  fastify.get('/', async () => 'hello')\n\n  fastify.ready((err) => { t.ok(err) })\n})\n\nt.test('onReady throw loading error', t => {\n  t.plan(2)\n  const fastify = Fastify()\n\n  try {\n    fastify.addHook('onReady', async function (done) {})\n  } catch (e) {\n    t.ok(e.code, 'FST_ERR_HOOK_INVALID_ASYNC_HANDLER')\n    t.ok(e.message === 'Async function has too many arguments. Async hooks should not use the \\'done\\' argument.')\n  }\n})\n\nt.test('onReady does not call done', t => {\n  t.plan(6)\n  const fastify = Fastify({ pluginTimeout: 500 })\n\n  fastify.addHook('onReady', function (done) {\n    t.pass('called in root')\n    // done() // don't call done to test timeout\n  })\n\n  fastify.ready(err => {\n    t.ok(err)\n    t.equal(err.message, \"A callback for 'onReady' hook timed out. You may have forgotten to call 'done' function or to resolve a Promise\")\n    t.equal(err.code, 'FST_ERR_HOOK_TIMEOUT')\n    t.ok(err.cause)\n    t.equal(err.cause.code, 'AVV_ERR_READY_TIMEOUT')\n  })\n})\n\nt.test('onReady execution order', t => {\n  t.plan(3)\n  const fastify = Fastify({ })\n\n  let i = 0\n  fastify.ready(() => { i++; t.equal(i, 1) })\n  fastify.ready(() => { i++; t.equal(i, 2) })\n  fastify.ready(() => { i++; t.equal(i, 3) })\n})\n\nt.test('ready return the server with callback', t => {\n  t.plan(2)\n  const fastify = Fastify()\n\n  fastify.ready((err, instance) => {\n    t.error(err)\n    t.same(instance, fastify)\n  })\n})\n\nt.test('ready return the server with Promise', t => {\n  t.plan(1)\n  const fastify = Fastify()\n\n  fastify.ready()\n    .then(instance => { t.same(instance, fastify) })\n    .catch(err => { t.fail(err) })\n})\n\nt.test('ready return registered', t => {\n  t.plan(4)\n  const fastify = Fastify()\n\n  fastify.register((one, opts, done) => {\n    one.ready().then(itself => { t.same(itself, one) })\n    done()\n  })\n\n  fastify.register((two, opts, done) => {\n    two.ready().then(itself => { t.same(itself, two) })\n\n    two.register((twoDotOne, opts, done) => {\n      twoDotOne.ready().then(itself => { t.same(itself, twoDotOne) })\n      done()\n    })\n    done()\n  })\n\n  fastify.ready()\n    .then(instance => { t.same(instance, fastify) })\n    .catch(err => { t.fail(err) })\n})\n\nt.test('do not crash with error in follow up onReady hook', async t => {\n  const fastify = Fastify()\n\n  fastify.addHook('onReady', async function () {\n  })\n\n  fastify.addHook('onReady', function () {\n    throw new Error('kaboom')\n  })\n\n  await t.rejects(fastify.ready())\n})\n)/docs/resources/encapsulation_context.svgQ<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" version=\"1.1\" width=\"591px\" height=\"591px\" viewBox=\"-0.5 -0.5 591 591\" content=\"&lt;mxfile host=&quot;app.diagrams.net&quot; modified=&quot;2020-12-06T18:52:11.078Z&quot; agent=&quot;5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36&quot; etag=&quot;_w1zgMmeoq0M6WH2W2QF&quot; version=&quot;13.10.9&quot; type=&quot;device&quot;&gt;&lt;diagram id=&quot;hZ89Y7exsLGRT07QCK17&quot; name=&quot;Page-1&quot;&gt;7ZpPk5owGMY/jcd2SCKIx0q3todOO+thjzsRAmQ2Eopx1f30DRKUNLCrncXN6uKMA0/+EN5feJNndICCxWZa4Dz9ySPCBtCJNgP0dQDhaDiS36WwrQQfOJWQFDSqJHAQZvSJKLGutqIRWWoVBedM0FwXQ55lJBSahouCr/VqMWf6XXOcEEOYhZiZ6h2NRKqewnUO+ndCk7S+M3BUyQLXlZWwTHHE1w0J3QxQUHAuqrPFJiCsjF0dl6rdt47S/cAKkoljGjyhO8+Z3U9YQP3bP1PHvc9+fFK9PGK2Ug98Ww4IOgHPBNkINXSxreOxTqkgsxyH5fVaIh+gSSoWTF4BeYqXeUUhphsibzyJKWMBZ7zYNUexW36k/kgKQWWYvzCaZLJM8LKngq+yqGy362wpCv5AGq293VH2KkfX0KtD6mZM6geUtyObhqRiNCV8QUSxlVVU6VDh2uqX6wN8d6y0tAF+L2I14ZJ9zwcm8kRhOQER6kL0m60SmhmE5DzLy9O84CFZytFMXmA2x+FDsov8r5VgNCNK12H8CzKOYRi2QYq8ued6rwMDOq5Gwzdp+C0wUF8shtfMYmwXC/eKWSDfLhbATFJG/MtQ5sc/+35Jx/O6B+fZmABPz9wAmUFBXktU+guLZ0QlSKncgHQvr/rcemGCdk299rX1lAn5POSXp+nbhXzUGfI3TQsRJn7cmha80CfzuBcKdan+XrS8FmfNFf4HIZOQXYjGBiJp7rIo7DF57cN/ZPLqHwrUmdQrbjO1wRYoALp9LbKOnW8OAZFLRm2Qxt4I4X5WmNqtjT7rOyEA3norZFrqq6cEkH2Y4AcmI+MhaB0m03EbYM5tLFCL2zrzLheY5vddO4thByubnAXodnOXsnE9HoOd1gJcvvv7D0SWMTL93/s3FydTsc9cmJ7PilfnFfdDJ0Oyz1zAy7eApyc4+8wFvHwPeHrGO6e5kJeHH9Z3ZY1/J6Cbvw==&lt;/diagram&gt;&lt;/mxfile&gt;\"><defs/><g><rect x=\"0\" y=\"0\" width=\"590\" height=\"590\" rx=\"88.5\" ry=\"88.5\" fill=\"#f5f5f5\" stroke=\"#666666\" pointer-events=\"all\"/><g transform=\"translate(-0.5 -0.5)\"><switch><foreignObject style=\"overflow: visible; text-align: left;\" pointer-events=\"none\" width=\"100%\" height=\"100%\" requiredFeatures=\"http://www.w3.org/TR/SVG11/feature#Extensibility\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 588px; height: 1px; padding-top: 7px; margin-left: 1px;\"><div style=\"box-sizing: border-box; font-size: 0; text-align: center; \"><div style=\"display: inline-block; font-size: 12px; font-family: Helvetica; color: #333333; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; \">Root Context</div></div></div></foreignObject><text x=\"295\" y=\"19\" fill=\"#333333\" font-family=\"Helvetica\" font-size=\"12px\" text-anchor=\"middle\">Root Context</text></switch></g><rect x=\"165\" y=\"40\" width=\"80\" height=\"30\" rx=\"4.5\" ry=\"4.5\" fill=\"#fff2cc\" stroke=\"#d6b656\" pointer-events=\"all\"/><path d=\"M 173 40 L 173 70 M 237 40 L 237 70\" fill=\"none\" stroke=\"#d6b656\" stroke-miterlimit=\"10\" pointer-events=\"all\"/><g transform=\"translate(-0.5 -0.5)\"><switch><foreignObject style=\"overflow: visible; text-align: left;\" pointer-events=\"none\" width=\"100%\" height=\"100%\" requiredFeatures=\"http://www.w3.org/TR/SVG11/feature#Extensibility\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: flex; align-items: unsafe center; justify-content: unsafe center; width: 62px; height: 1px; padding-top: 55px; margin-left: 174px;\"><div style=\"box-sizing: border-box; font-size: 0; text-align: center; \"><div style=\"display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; \">Root Plugin</div></div></div></foreignObject><text x=\"205\" y=\"59\" fill=\"#000000\" font-family=\"Helvetica\" font-size=\"12px\" text-anchor=\"middle\">Root Plugin</text></switch></g><rect x=\"255\" y=\"40\" width=\"80\" height=\"30\" rx=\"4.5\" ry=\"4.5\" fill=\"#fff2cc\" stroke=\"#d6b656\" pointer-events=\"all\"/><path d=\"M 263 40 L 263 70 M 327 40 L 327 70\" fill=\"none\" stroke=\"#d6b656\" stroke-miterlimit=\"10\" pointer-events=\"all\"/><g transform=\"translate(-0.5 -0.5)\"><switch><foreignObject style=\"overflow: visible; text-align: left;\" pointer-events=\"none\" width=\"100%\" height=\"100%\" requiredFeatures=\"http://www.w3.org/TR/SVG11/feature#Extensibility\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: flex; align-items: unsafe center; justify-content: unsafe center; width: 62px; height: 1px; padding-top: 55px; margin-left: 264px;\"><div style=\"box-sizing: border-box; font-size: 0; text-align: center; \"><div style=\"display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; \">Root Plugin</div></div></div></foreignObject><text x=\"295\" y=\"59\" fill=\"#000000\" font-family=\"Helvetica\" font-size=\"12px\" text-anchor=\"middle\">Root Plugin</text></switch></g><rect x=\"345\" y=\"40\" width=\"80\" height=\"30\" rx=\"4.5\" ry=\"4.5\" fill=\"#fff2cc\" stroke=\"#d6b656\" pointer-events=\"all\"/><path d=\"M 353 40 L 353 70 M 417 40 L 417 70\" fill=\"none\" stroke=\"#d6b656\" stroke-miterlimit=\"10\" pointer-events=\"all\"/><g transform=\"translate(-0.5 -0.5)\"><switch><foreignObject style=\"overflow: visible; text-align: left;\" pointer-events=\"none\" width=\"100%\" height=\"100%\" requiredFeatures=\"http://www.w3.org/TR/SVG11/feature#Extensibility\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: flex; align-items: unsafe center; justify-content: unsafe center; width: 62px; height: 1px; padding-top: 55px; margin-left: 354px;\"><div style=\"box-sizing: border-box; font-size: 0; text-align: center; \"><div style=\"display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; \">Root Plugin</div></div></div></foreignObject><text x=\"385\" y=\"59\" fill=\"#000000\" font-family=\"Helvetica\" font-size=\"12px\" text-anchor=\"middle\">Root Plugin</text></switch></g><rect x=\"120\" y=\"90\" width=\"360\" height=\"230\" rx=\"34.5\" ry=\"34.5\" fill=\"#fff2cc\" stroke=\"#d6b656\" pointer-events=\"all\"/><g transform=\"translate(-0.5 -0.5)\"><switch><foreignObject style=\"overflow: visible; text-align: left;\" pointer-events=\"none\" width=\"100%\" height=\"100%\" requiredFeatures=\"http://www.w3.org/TR/SVG11/feature#Extensibility\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 358px; height: 1px; padding-top: 97px; margin-left: 121px;\"><div style=\"box-sizing: border-box; font-size: 0; text-align: center; \"><div style=\"display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; \">Child Context</div></div></div></foreignObject><text x=\"300\" y=\"109\" fill=\"#000000\" font-family=\"Helvetica\" font-size=\"12px\" text-anchor=\"middle\">Child Context</text></switch></g><rect x=\"130\" y=\"120\" width=\"80\" height=\"30\" rx=\"4.5\" ry=\"4.5\" fill=\"#dae8fc\" stroke=\"#6c8ebf\" pointer-events=\"all\"/><path d=\"M 138 120 L 138 150 M 202 120 L 202 150\" fill=\"none\" stroke=\"#6c8ebf\" stroke-miterlimit=\"10\" pointer-events=\"all\"/><g transform=\"translate(-0.5 -0.5)\"><switch><foreignObject style=\"overflow: visible; text-align: left;\" pointer-events=\"none\" width=\"100%\" height=\"100%\" requiredFeatures=\"http://www.w3.org/TR/SVG11/feature#Extensibility\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: flex; align-items: unsafe center; justify-content: unsafe center; width: 62px; height: 1px; padding-top: 135px; margin-left: 139px;\"><div style=\"box-sizing: border-box; font-size: 0; text-align: center; \"><div style=\"display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; \">Child Plugin</div></div></div></foreignObject><text x=\"170\" y=\"139\" fill=\"#000000\" font-family=\"Helvetica\" font-size=\"12px\" text-anchor=\"middle\">Child Plug...</text></switch></g><rect x=\"220\" y=\"120\" width=\"80\" height=\"30\" rx=\"4.5\" ry=\"4.5\" fill=\"#dae8fc\" stroke=\"#6c8ebf\" pointer-events=\"all\"/><path d=\"M 228 120 L 228 150 M 292 120 L 292 150\" fill=\"none\" stroke=\"#6c8ebf\" stroke-miterlimit=\"10\" pointer-events=\"all\"/><g transform=\"translate(-0.5 -0.5)\"><switch><foreignObject style=\"overflow: visible; text-align: left;\" pointer-events=\"none\" width=\"100%\" height=\"100%\" requiredFeatures=\"http://www.w3.org/TR/SVG11/feature#Extensibility\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: flex; align-items: unsafe center; justify-content: unsafe center; width: 62px; height: 1px; padding-top: 135px; margin-left: 229px;\"><div style=\"box-sizing: border-box; font-size: 0; text-align: center; \"><div style=\"display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; \">Child Plugin</div></div></div></foreignObject><text x=\"260\" y=\"139\" fill=\"#000000\" font-family=\"Helvetica\" font-size=\"12px\" text-anchor=\"middle\">Child Plug...</text></switch></g><rect x=\"140\" y=\"175\" width=\"320\" height=\"125\" rx=\"18.75\" ry=\"18.75\" fill=\"#dae8fc\" stroke=\"#6c8ebf\" pointer-events=\"all\"/><g transform=\"translate(-0.5 -0.5)\"><switch><foreignObject style=\"overflow: visible; text-align: left;\" pointer-events=\"none\" width=\"100%\" height=\"100%\" requiredFeatures=\"http://www.w3.org/TR/SVG11/feature#Extensibility\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 318px; height: 1px; padding-top: 182px; margin-left: 141px;\"><div style=\"box-sizing: border-box; font-size: 0; text-align: center; \"><div style=\"display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; \">Grandchild Context</div></div></div></foreignObject><text x=\"300\" y=\"194\" fill=\"#000000\" font-family=\"Helvetica\" font-size=\"12px\" text-anchor=\"middle\">Grandchild Context</text></switch></g><rect x=\"167.5\" y=\"200\" width=\"80\" height=\"30\" rx=\"4.5\" ry=\"4.5\" fill=\"#e1d5e7\" stroke=\"#9673a6\" pointer-events=\"all\"/><path d=\"M 175.5 200 L 175.5 230 M 239.5 200 L 239.5 230\" fill=\"none\" stroke=\"#9673a6\" stroke-miterlimit=\"10\" pointer-events=\"all\"/><g transform=\"translate(-0.5 -0.5)\"><switch><foreignObject style=\"overflow: visible; text-align: left;\" pointer-events=\"none\" width=\"100%\" height=\"100%\" requiredFeatures=\"http://www.w3.org/TR/SVG11/feature#Extensibility\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: flex; align-items: unsafe center; justify-content: unsafe center; width: 62px; height: 1px; padding-top: 215px; margin-left: 177px;\"><div style=\"box-sizing: border-box; font-size: 0; text-align: center; \"><div style=\"display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; \">Child Plugin</div></div></div></foreignObject><text x=\"208\" y=\"219\" fill=\"#000000\" font-family=\"Helvetica\" font-size=\"12px\" text-anchor=\"middle\">Child Plug...</text></switch></g><rect x=\"257.5\" y=\"200\" width=\"80\" height=\"30\" rx=\"4.5\" ry=\"4.5\" fill=\"#e1d5e7\" stroke=\"#9673a6\" pointer-events=\"all\"/><path d=\"M 265.5 200 L 265.5 230 M 329.5 200 L 329.5 230\" fill=\"none\" stroke=\"#9673a6\" stroke-miterlimit=\"10\" pointer-events=\"all\"/><g transform=\"translate(-0.5 -0.5)\"><switch><foreignObject style=\"overflow: visible; text-align: left;\" pointer-events=\"none\" width=\"100%\" height=\"100%\" requiredFeatures=\"http://www.w3.org/TR/SVG11/feature#Extensibility\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: flex; align-items: unsafe center; justify-content: unsafe center; width: 62px; height: 1px; padding-top: 215px; margin-left: 267px;\"><div style=\"box-sizing: border-box; font-size: 0; text-align: center; \"><div style=\"display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; \">Child Plugin</div></div></div></foreignObject><text x=\"298\" y=\"219\" fill=\"#000000\" font-family=\"Helvetica\" font-size=\"12px\" text-anchor=\"middle\">Child Plug...</text></switch></g><rect x=\"352.5\" y=\"200\" width=\"80\" height=\"30\" rx=\"4.5\" ry=\"4.5\" fill=\"#e1d5e7\" stroke=\"#9673a6\" pointer-events=\"all\"/><path d=\"M 360.5 200 L 360.5 230 M 424.5 200 L 424.5 230\" fill=\"none\" stroke=\"#9673a6\" stroke-miterlimit=\"10\" pointer-events=\"all\"/><g transform=\"translate(-0.5 -0.5)\"><switch><foreignObject style=\"overflow: visible; text-align: left;\" pointer-events=\"none\" width=\"100%\" height=\"100%\" requiredFeatures=\"http://www.w3.org/TR/SVG11/feature#Extensibility\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: flex; align-items: unsafe center; justify-content: unsafe center; width: 62px; height: 1px; padding-top: 215px; margin-left: 362px;\"><div style=\"box-sizing: border-box; font-size: 0; text-align: center; \"><div style=\"display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; \">Child Plugin</div></div></div></foreignObject><text x=\"393\" y=\"219\" fill=\"#000000\" font-family=\"Helvetica\" font-size=\"12px\" text-anchor=\"middle\">Child Plug...</text></switch></g><rect x=\"120\" y=\"340\" width=\"360\" height=\"230\" rx=\"34.5\" ry=\"34.5\" fill=\"#fff2cc\" stroke=\"#d6b656\" pointer-events=\"all\"/><g transform=\"translate(-0.5 -0.5)\"><switch><foreignObject style=\"overflow: visible; text-align: left;\" pointer-events=\"none\" width=\"100%\" height=\"100%\" requiredFeatures=\"http://www.w3.org/TR/SVG11/feature#Extensibility\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 358px; height: 1px; padding-top: 347px; margin-left: 121px;\"><div style=\"box-sizing: border-box; font-size: 0; text-align: center; \"><div style=\"display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; \">Child Context</div></div></div></foreignObject><text x=\"300\" y=\"359\" fill=\"#000000\" font-family=\"Helvetica\" font-size=\"12px\" text-anchor=\"middle\">Child Context</text></switch></g><rect x=\"130\" y=\"370\" width=\"80\" height=\"30\" rx=\"4.5\" ry=\"4.5\" fill=\"#dae8fc\" stroke=\"#6c8ebf\" pointer-events=\"all\"/><path d=\"M 138 370 L 138 400 M 202 370 L 202 400\" fill=\"none\" stroke=\"#6c8ebf\" stroke-miterlimit=\"10\" pointer-events=\"all\"/><g transform=\"translate(-0.5 -0.5)\"><switch><foreignObject style=\"overflow: visible; text-align: left;\" pointer-events=\"none\" width=\"100%\" height=\"100%\" requiredFeatures=\"http://www.w3.org/TR/SVG11/feature#Extensibility\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: flex; align-items: unsafe center; justify-content: unsafe center; width: 62px; height: 1px; padding-top: 385px; margin-left: 139px;\"><div style=\"box-sizing: border-box; font-size: 0; text-align: center; \"><div style=\"display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; \">Child Plugin</div></div></div></foreignObject><text x=\"170\" y=\"389\" fill=\"#000000\" font-family=\"Helvetica\" font-size=\"12px\" text-anchor=\"middle\">Child Plug...</text></switch></g><rect x=\"220\" y=\"370\" width=\"80\" height=\"30\" rx=\"4.5\" ry=\"4.5\" fill=\"#dae8fc\" stroke=\"#6c8ebf\" pointer-events=\"all\"/><path d=\"M 228 370 L 228 400 M 292 370 L 292 400\" fill=\"none\" stroke=\"#6c8ebf\" stroke-miterlimit=\"10\" pointer-events=\"all\"/><g transform=\"translate(-0.5 -0.5)\"><switch><foreignObject style=\"overflow: visible; text-align: left;\" pointer-events=\"none\" width=\"100%\" height=\"100%\" requiredFeatures=\"http://www.w3.org/TR/SVG11/feature#Extensibility\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: flex; align-items: unsafe center; justify-content: unsafe center; width: 62px; height: 1px; padding-top: 385px; margin-left: 229px;\"><div style=\"box-sizing: border-box; font-size: 0; text-align: center; \"><div style=\"display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; \">Child Plugin</div></div></div></foreignObject><text x=\"260\" y=\"389\" fill=\"#000000\" font-family=\"Helvetica\" font-size=\"12px\" text-anchor=\"middle\">Child Plug...</text></switch></g><rect x=\"140\" y=\"425\" width=\"320\" height=\"125\" rx=\"18.75\" ry=\"18.75\" fill=\"#dae8fc\" stroke=\"#6c8ebf\" pointer-events=\"all\"/><g transform=\"translate(-0.5 -0.5)\"><switch><foreignObject style=\"overflow: visible; text-align: left;\" pointer-events=\"none\" width=\"100%\" height=\"100%\" requiredFeatures=\"http://www.w3.org/TR/SVG11/feature#Extensibility\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 318px; height: 1px; padding-top: 432px; margin-left: 141px;\"><div style=\"box-sizing: border-box; font-size: 0; text-align: center; \"><div style=\"display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; \">Grandchild Context</div></div></div></foreignObject><text x=\"300\" y=\"444\" fill=\"#000000\" font-family=\"Helvetica\" font-size=\"12px\" text-anchor=\"middle\">Grandchild Context</text></switch></g><rect x=\"167.5\" y=\"450\" width=\"80\" height=\"30\" rx=\"4.5\" ry=\"4.5\" fill=\"#e1d5e7\" stroke=\"#9673a6\" pointer-events=\"all\"/><path d=\"M 175.5 450 L 175.5 480 M 239.5 450 L 239.5 480\" fill=\"none\" stroke=\"#9673a6\" stroke-miterlimit=\"10\" pointer-events=\"all\"/><g transform=\"translate(-0.5 -0.5)\"><switch><foreignObject style=\"overflow: visible; text-align: left;\" pointer-events=\"none\" width=\"100%\" height=\"100%\" requiredFeatures=\"http://www.w3.org/TR/SVG11/feature#Extensibility\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: flex; align-items: unsafe center; justify-content: unsafe center; width: 62px; height: 1px; padding-top: 465px; margin-left: 177px;\"><div style=\"box-sizing: border-box; font-size: 0; text-align: center; \"><div style=\"display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; \">Child Plugin</div></div></div></foreignObject><text x=\"208\" y=\"469\" fill=\"#000000\" font-family=\"Helvetica\" font-size=\"12px\" text-anchor=\"middle\">Child Plug...</text></switch></g><rect x=\"257.5\" y=\"450\" width=\"80\" height=\"30\" rx=\"4.5\" ry=\"4.5\" fill=\"#e1d5e7\" stroke=\"#9673a6\" pointer-events=\"all\"/><path d=\"M 265.5 450 L 265.5 480 M 329.5 450 L 329.5 480\" fill=\"none\" stroke=\"#9673a6\" stroke-miterlimit=\"10\" pointer-events=\"all\"/><g transform=\"translate(-0.5 -0.5)\"><switch><foreignObject style=\"overflow: visible; text-align: left;\" pointer-events=\"none\" width=\"100%\" height=\"100%\" requiredFeatures=\"http://www.w3.org/TR/SVG11/feature#Extensibility\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: flex; align-items: unsafe center; justify-content: unsafe center; width: 62px; height: 1px; padding-top: 465px; margin-left: 267px;\"><div style=\"box-sizing: border-box; font-size: 0; text-align: center; \"><div style=\"display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; \">Child Plugin</div></div></div></foreignObject><text x=\"298\" y=\"469\" fill=\"#000000\" font-family=\"Helvetica\" font-size=\"12px\" text-anchor=\"middle\">Child Plug...</text></switch></g><rect x=\"352.5\" y=\"450\" width=\"80\" height=\"30\" rx=\"4.5\" ry=\"4.5\" fill=\"#e1d5e7\" stroke=\"#9673a6\" pointer-events=\"all\"/><path d=\"M 360.5 450 L 360.5 480 M 424.5 450 L 424.5 480\" fill=\"none\" stroke=\"#9673a6\" stroke-miterlimit=\"10\" pointer-events=\"all\"/><g transform=\"translate(-0.5 -0.5)\"><switch><foreignObject style=\"overflow: visible; text-align: left;\" pointer-events=\"none\" width=\"100%\" height=\"100%\" requiredFeatures=\"http://www.w3.org/TR/SVG11/feature#Extensibility\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: flex; align-items: unsafe center; justify-content: unsafe center; width: 62px; height: 1px; padding-top: 465px; margin-left: 362px;\"><div style=\"box-sizing: border-box; font-size: 0; text-align: center; \"><div style=\"display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; \">Child Plugin</div></div></div></foreignObject><text x=\"393\" y=\"469\" fill=\"#000000\" font-family=\"Helvetica\" font-size=\"12px\" text-anchor=\"middle\">Child Plug...</text></switch></g></g><switch><g requiredFeatures=\"http://www.w3.org/TR/SVG11/feature#Extensibility\"/><a transform=\"translate(0,-5)\" xlink:href=\"https://desk.draw.io/support/solutions/articles/16000042487\" target=\"_blank\"><text text-anchor=\"middle\" font-size=\"10px\" x=\"50%\" y=\"100%\">Viewer does not support full SVG 1.1</text></a></switch></svg>/lib/contentTypeParser.js1g'use strict'\n\nconst { AsyncResource } = require('async_hooks')\nconst lru = require('tiny-lru').lru\nconst { safeParse: safeParseContentType, defaultContentType } = require('fast-content-type-parse')\nconst secureJson = require('secure-json-parse')\nconst {\n  kDefaultJsonParse,\n  kContentTypeParser,\n  kBodyLimit,\n  kRequestPayloadStream,\n  kState,\n  kTestInternals,\n  kReplyIsError,\n  kRouteContext\n} = require('./symbols')\n\nconst {\n  FST_ERR_CTP_INVALID_TYPE,\n  FST_ERR_CTP_EMPTY_TYPE,\n  FST_ERR_CTP_ALREADY_PRESENT,\n  FST_ERR_CTP_INVALID_HANDLER,\n  FST_ERR_CTP_INVALID_PARSE_TYPE,\n  FST_ERR_CTP_BODY_TOO_LARGE,\n  FST_ERR_CTP_INVALID_MEDIA_TYPE,\n  FST_ERR_CTP_INVALID_CONTENT_LENGTH,\n  FST_ERR_CTP_EMPTY_JSON_BODY,\n  FST_ERR_CTP_INSTANCE_ALREADY_STARTED\n} = require('./errors')\n\nfunction ContentTypeParser (bodyLimit, onProtoPoisoning, onConstructorPoisoning) {\n  this[kDefaultJsonParse] = getDefaultJsonParser(onProtoPoisoning, onConstructorPoisoning)\n  // using a map instead of a plain object to avoid prototype hijack attacks\n  this.customParsers = new Map()\n  this.customParsers.set('application/json', new Parser(true, false, bodyLimit, this[kDefaultJsonParse]))\n  this.customParsers.set('text/plain', new Parser(true, false, bodyLimit, defaultPlainTextParser))\n  this.parserList = [new ParserListItem('application/json'), new ParserListItem('text/plain')]\n  this.parserRegExpList = []\n  this.cache = lru(100)\n}\n\nContentTypeParser.prototype.add = function (contentType, opts, parserFn) {\n  const contentTypeIsString = typeof contentType === 'string'\n\n  if (!contentTypeIsString && !(contentType instanceof RegExp)) throw new FST_ERR_CTP_INVALID_TYPE()\n  if (contentTypeIsString && contentType.length === 0) throw new FST_ERR_CTP_EMPTY_TYPE()\n  if (typeof parserFn !== 'function') throw new FST_ERR_CTP_INVALID_HANDLER()\n\n  if (this.existingParser(contentType)) {\n    throw new FST_ERR_CTP_ALREADY_PRESENT(contentType)\n  }\n\n  if (opts.parseAs !== undefined) {\n    if (opts.parseAs !== 'string' && opts.parseAs !== 'buffer') {\n      throw new FST_ERR_CTP_INVALID_PARSE_TYPE(opts.parseAs)\n    }\n  }\n\n  const parser = new Parser(\n    opts.parseAs === 'string',\n    opts.parseAs === 'buffer',\n    opts.bodyLimit,\n    parserFn\n  )\n\n  if (contentTypeIsString && contentType === '*') {\n    this.customParsers.set('', parser)\n  } else {\n    if (contentTypeIsString) {\n      this.parserList.unshift(new ParserListItem(contentType))\n    } else {\n      contentType.isEssence = contentType.source.indexOf(';') === -1\n      this.parserRegExpList.unshift(contentType)\n    }\n    this.customParsers.set(contentType.toString(), parser)\n  }\n}\n\nContentTypeParser.prototype.hasParser = function (contentType) {\n  return this.customParsers.has(typeof contentType === 'string' ? contentType : contentType.toString())\n}\n\nContentTypeParser.prototype.existingParser = function (contentType) {\n  if (contentType === 'application/json' && this.customParsers.has(contentType)) {\n    return this.customParsers.get(contentType).fn !== this[kDefaultJsonParse]\n  }\n  if (contentType === 'text/plain' && this.customParsers.has(contentType)) {\n    return this.customParsers.get(contentType).fn !== defaultPlainTextParser\n  }\n\n  return this.hasParser(contentType)\n}\n\nContentTypeParser.prototype.getParser = function (contentType) {\n  if (this.hasParser(contentType)) {\n    return this.customParsers.get(contentType)\n  }\n\n  const parser = this.cache.get(contentType)\n  if (parser !== undefined) return parser\n\n  const parsed = safeParseContentType(contentType)\n\n  // dummyContentType always the same object\n  // we can use === for the comparsion and return early\n  if (parsed === defaultContentType) {\n    return this.customParsers.get('')\n  }\n\n  // eslint-disable-next-line no-var\n  for (var i = 0; i !== this.parserList.length; ++i) {\n    const parserListItem = this.parserList[i]\n    if (compareContentType(parsed, parserListItem)) {\n      const parser = this.customParsers.get(parserListItem.name)\n      // we set request content-type in cache to reduce parsing of MIME type\n      this.cache.set(contentType, parser)\n      return parser\n    }\n  }\n\n  // eslint-disable-next-line no-var\n  for (var j = 0; j !== this.parserRegExpList.length; ++j) {\n    const parserRegExp = this.parserRegExpList[j]\n    if (compareRegExpContentType(contentType, parsed.type, parserRegExp)) {\n      const parser = this.customParsers.get(parserRegExp.toString())\n      // we set request content-type in cache to reduce parsing of MIME type\n      this.cache.set(contentType, parser)\n      return parser\n    }\n  }\n\n  return this.customParsers.get('')\n}\n\nContentTypeParser.prototype.removeAll = function () {\n  this.customParsers = new Map()\n  this.parserRegExpList = []\n  this.parserList = []\n  this.cache = lru(100)\n}\n\nContentTypeParser.prototype.remove = function (contentType) {\n  if (!(typeof contentType === 'string' || contentType instanceof RegExp)) throw new FST_ERR_CTP_INVALID_TYPE()\n\n  const removed = this.customParsers.delete(contentType.toString())\n\n  const parsers = typeof contentType === 'string' ? this.parserList : this.parserRegExpList\n\n  const idx = parsers.findIndex(ct => ct.toString() === contentType.toString())\n\n  if (idx > -1) {\n    parsers.splice(idx, 1)\n  }\n\n  return removed || idx > -1\n}\n\nContentTypeParser.prototype.run = function (contentType, handler, request, reply) {\n  const parser = this.getParser(contentType)\n  const resource = new AsyncResource('content-type-parser:run', request)\n\n  if (parser === undefined) {\n    if (request.is404) {\n      handler(request, reply)\n    } else {\n      reply.send(new FST_ERR_CTP_INVALID_MEDIA_TYPE(contentType || undefined))\n    }\n  } else if (parser.asString === true || parser.asBuffer === true) {\n    rawBody(\n      request,\n      reply,\n      reply[kRouteContext]._parserOptions,\n      parser,\n      done\n    )\n  } else {\n    const result = parser.fn(request, request[kRequestPayloadStream], done)\n\n    if (result && typeof result.then === 'function') {\n      result.then(body => done(null, body), done)\n    }\n  }\n\n  function done (error, body) {\n    // We cannot use resource.bind() because it is broken in node v12 and v14\n    resource.runInAsyncScope(() => {\n      if (error) {\n        reply[kReplyIsError] = true\n        reply.send(error)\n      } else {\n        request.body = body\n        handler(request, reply)\n      }\n    })\n  }\n}\n\nfunction rawBody (request, reply, options, parser, done) {\n  const asString = parser.asString\n  const limit = options.limit === null ? parser.bodyLimit : options.limit\n  const contentLength = request.headers['content-length'] === undefined\n    ? NaN\n    : Number(request.headers['content-length'])\n\n  if (contentLength > limit) {\n    // We must close the connection as the client is going\n    // to send this data anyway\n    reply.header('connection', 'close')\n    reply.send(new FST_ERR_CTP_BODY_TOO_LARGE())\n    return\n  }\n\n  let receivedLength = 0\n  let body = asString === true ? '' : []\n\n  const payload = request[kRequestPayloadStream] || request.raw\n\n  if (asString === true) {\n    payload.setEncoding('utf8')\n  }\n\n  payload.on('data', onData)\n  payload.on('end', onEnd)\n  payload.on('error', onEnd)\n  payload.resume()\n\n  function onData (chunk) {\n    receivedLength += chunk.length\n\n    if ((payload.receivedEncodedLength || receivedLength) > limit) {\n      payload.removeListener('data', onData)\n      payload.removeListener('end', onEnd)\n      payload.removeListener('error', onEnd)\n      reply.send(new FST_ERR_CTP_BODY_TOO_LARGE())\n      return\n    }\n\n    if (asString === true) {\n      body += chunk\n    } else {\n      body.push(chunk)\n    }\n  }\n\n  function onEnd (err) {\n    payload.removeListener('data', onData)\n    payload.removeListener('end', onEnd)\n    payload.removeListener('error', onEnd)\n\n    if (err !== undefined) {\n      err.statusCode = 400\n      reply[kReplyIsError] = true\n      reply.code(err.statusCode).send(err)\n      return\n    }\n\n    if (asString === true) {\n      receivedLength = Buffer.byteLength(body)\n    }\n\n    if (!Number.isNaN(contentLength) && (payload.receivedEncodedLength || receivedLength) !== contentLength) {\n      reply.header('connection', 'close')\n      reply.send(new FST_ERR_CTP_INVALID_CONTENT_LENGTH())\n      return\n    }\n\n    if (asString === false) {\n      body = Buffer.concat(body)\n    }\n\n    const result = parser.fn(request, body, done)\n    if (result && typeof result.then === 'function') {\n      result.then(body => done(null, body), done)\n    }\n  }\n}\n\nfunction getDefaultJsonParser (onProtoPoisoning, onConstructorPoisoning) {\n  return defaultJsonParser\n\n  function defaultJsonParser (req, body, done) {\n    if (body === '' || body == null) {\n      return done(new FST_ERR_CTP_EMPTY_JSON_BODY(), undefined)\n    }\n    let json\n    try {\n      json = secureJson.parse(body, { protoAction: onProtoPoisoning, constructorAction: onConstructorPoisoning })\n    } catch (err) {\n      err.statusCode = 400\n      return done(err, undefined)\n    }\n    done(null, json)\n  }\n}\n\nfunction defaultPlainTextParser (req, body, done) {\n  done(null, body)\n}\n\nfunction Parser (asString, asBuffer, bodyLimit, fn) {\n  this.asString = asString\n  this.asBuffer = asBuffer\n  this.bodyLimit = bodyLimit\n  this.fn = fn\n}\n\nfunction buildContentTypeParser (c) {\n  const contentTypeParser = new ContentTypeParser()\n  contentTypeParser[kDefaultJsonParse] = c[kDefaultJsonParse]\n  contentTypeParser.customParsers = new Map(c.customParsers.entries())\n  contentTypeParser.parserList = c.parserList.slice()\n  contentTypeParser.parserRegExpList = c.parserRegExpList.slice()\n  return contentTypeParser\n}\n\nfunction addContentTypeParser (contentType, opts, parser) {\n  if (this[kState].started) {\n    throw new FST_ERR_CTP_INSTANCE_ALREADY_STARTED('addContentTypeParser')\n  }\n\n  if (typeof opts === 'function') {\n    parser = opts\n    opts = {}\n  }\n\n  if (!opts) opts = {}\n  if (!opts.bodyLimit) opts.bodyLimit = this[kBodyLimit]\n\n  if (Array.isArray(contentType)) {\n    contentType.forEach((type) => this[kContentTypeParser].add(type, opts, parser))\n  } else {\n    this[kContentTypeParser].add(contentType, opts, parser)\n  }\n\n  return this\n}\n\nfunction hasContentTypeParser (contentType) {\n  return this[kContentTypeParser].hasParser(contentType)\n}\n\nfunction removeContentTypeParser (contentType) {\n  if (this[kState].started) {\n    throw new FST_ERR_CTP_INSTANCE_ALREADY_STARTED('removeContentTypeParser')\n  }\n\n  if (Array.isArray(contentType)) {\n    for (const type of contentType) {\n      this[kContentTypeParser].remove(type)\n    }\n  } else {\n    this[kContentTypeParser].remove(contentType)\n  }\n}\n\nfunction removeAllContentTypeParsers () {\n  if (this[kState].started) {\n    throw new FST_ERR_CTP_INSTANCE_ALREADY_STARTED('removeAllContentTypeParsers')\n  }\n\n  this[kContentTypeParser].removeAll()\n}\n\nfunction compareContentType (contentType, parserListItem) {\n  if (parserListItem.isEssence) {\n    // we do essence check\n    return contentType.type.indexOf(parserListItem) !== -1\n  } else {\n    // when the content-type includes parameters\n    // we do a full-text search\n    // reject essence content-type before checking parameters\n    if (contentType.type.indexOf(parserListItem.type) === -1) return false\n    for (const key of parserListItem.parameterKeys) {\n      // reject when missing parameters\n      if (!(key in contentType.parameters)) return false\n      // reject when parameters do not match\n      if (contentType.parameters[key] !== parserListItem.parameters[key]) return false\n    }\n    return true\n  }\n}\n\nfunction compareRegExpContentType (contentType, essenceMIMEType, regexp) {\n  if (regexp.isEssence) {\n    // we do essence check\n    return regexp.test(essenceMIMEType)\n  } else {\n    // when the content-type includes parameters\n    // we do a full-text match\n    return regexp.test(contentType)\n  }\n}\n\nfunction ParserListItem (contentType) {\n  this.name = contentType\n  // we pre-calculate all the needed information\n  // before content-type comparsion\n  const parsed = safeParseContentType(contentType)\n  this.type = parsed.type\n  this.parameters = parsed.parameters\n  this.parameterKeys = Object.keys(parsed.parameters)\n  this.isEssence = contentType.indexOf(';') === -1\n}\n\n// used in ContentTypeParser.remove\nParserListItem.prototype.toString = function () {\n  return this.name\n}\n\nmodule.exports = ContentTypeParser\nmodule.exports.helpers = {\n  buildContentTypeParser,\n  addContentTypeParser,\n  hasContentTypeParser,\n  removeContentTypeParser,\n  removeAllContentTypeParsers\n}\nmodule.exports.defaultParsers = {\n  getDefaultJsonParser,\n  defaultTextParser: defaultPlainTextParser\n}\nmodule.exports[kTestInternals] = { rawBody }\n/test/upgrade.test.js\u0006Z'use strict'\n\nconst { test, skip } = require('tap')\nconst { lookup } = require('dns').promises\nconst Fastify = require('..')\nconst { connect } = require('net')\nconst { once } = require('events')\n\nasync function setup () {\n  const results = await lookup('localhost', { all: true })\n  if (results.length === 1) {\n    skip('requires both IPv4 and IPv6')\n    return\n  }\n\n  test('upgrade to both servers', async t => {\n    t.plan(2)\n    const app = Fastify()\n    app.server.on('upgrade', (req, socket, head) => {\n      t.pass(`upgrade event ${JSON.stringify(socket.address())}`)\n      socket.end()\n    })\n    app.get('/', (req, res) => {\n    })\n    await app.listen()\n    t.teardown(app.close.bind(app))\n\n    {\n      const client = connect(app.server.address().port, '127.0.0.1')\n      client.write('GET / HTTP/1.1\\r\\n')\n      client.write('Upgrade: websocket\\r\\n')\n      client.write('Connection: Upgrade\\r\\n')\n      client.write('Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==\\r\\n')\n      client.write('Sec-WebSocket-Protocol: com.xxx.service.v1\\r\\n')\n      client.write('Sec-WebSocket-Version: 13\\r\\n\\r\\n')\n      client.write('\\r\\n\\r\\n')\n      await once(client, 'close')\n    }\n\n    {\n      const client = connect(app.server.address().port, '::1')\n      client.write('GET / HTTP/1.1\\r\\n')\n      client.write('Upgrade: websocket\\r\\n')\n      client.write('Connection: Upgrade\\r\\n')\n      client.write('Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==\\r\\n')\n      client.write('Sec-WebSocket-Protocol: com.xxx.service.v1\\r\\n')\n      client.write('Sec-WebSocket-Version: 13\\r\\n\\r\\n')\n      await once(client, 'close')\n    }\n  })\n}\n\nsetup()\n/lib/errors.js/'use strict'\n\nconst createError = require('@fastify/error')\n\nconst codes = {\n  /**\n   * Basic\n   */\n  FST_ERR_NOT_FOUND: createError(\n    'FST_ERR_NOT_FOUND',\n    'Not Found',\n    404\n  ),\n  FST_ERR_OPTIONS_NOT_OBJ: createError(\n    'FST_ERR_OPTIONS_NOT_OBJ',\n    'Options must be an object',\n    500,\n    TypeError\n  ),\n  FST_ERR_QSP_NOT_FN: createError(\n    'FST_ERR_QSP_NOT_FN',\n    \"querystringParser option should be a function, instead got '%s'\",\n    500\n  ),\n  FST_ERR_SCHEMA_CONTROLLER_BUCKET_OPT_NOT_FN: createError(\n    'FST_ERR_SCHEMA_CONTROLLER_BUCKET_OPT_NOT_FN',\n    \"schemaController.bucket option should be a function, instead got '%s'\",\n    500\n  ),\n  FST_ERR_SCHEMA_ERROR_FORMATTER_NOT_FN: createError(\n    'FST_ERR_SCHEMA_ERROR_FORMATTER_NOT_FN',\n    \"schemaErrorFormatter option should be a non async function. Instead got '%s'.\",\n    500\n  ),\n  FST_ERR_AJV_CUSTOM_OPTIONS_OPT_NOT_OBJ: createError(\n    'FST_ERR_AJV_CUSTOM_OPTIONS_OPT_NOT_OBJ',\n    \"sajv.customOptions option should be an object, instead got '%s'\",\n    500\n  ),\n  FST_ERR_AJV_CUSTOM_OPTIONS_OPT_NOT_ARR: createError(\n    'FST_ERR_AJV_CUSTOM_OPTIONS_OPT_NOT_ARR',\n    \"sajv.plugins option should be an array, instead got '%s'\",\n    500\n  ),\n  FST_ERR_VERSION_CONSTRAINT_NOT_STR: createError(\n    'FST_ERR_VERSION_CONSTRAINT_NOT_STR',\n    'Version constraint should be a string.',\n    500\n  ),\n\n  /**\n   * ContentTypeParser\n  */\n  FST_ERR_CTP_ALREADY_PRESENT: createError(\n    'FST_ERR_CTP_ALREADY_PRESENT',\n    \"Content type parser '%s' already present.\"\n  ),\n  FST_ERR_CTP_INVALID_TYPE: createError(\n    'FST_ERR_CTP_INVALID_TYPE',\n    'The content type should be a string or a RegExp',\n    500,\n    TypeError\n  ),\n  FST_ERR_CTP_EMPTY_TYPE: createError(\n    'FST_ERR_CTP_EMPTY_TYPE',\n    'The content type cannot be an empty string',\n    500,\n    TypeError\n  ),\n  FST_ERR_CTP_INVALID_HANDLER: createError(\n    'FST_ERR_CTP_INVALID_HANDLER',\n    'The content type handler should be a function',\n    500,\n    TypeError\n  ),\n  FST_ERR_CTP_INVALID_PARSE_TYPE: createError(\n    'FST_ERR_CTP_INVALID_PARSE_TYPE',\n    \"The body parser can only parse your data as 'string' or 'buffer', you asked '%s' which is not supported.\",\n    500,\n    TypeError\n  ),\n  FST_ERR_CTP_BODY_TOO_LARGE: createError(\n    'FST_ERR_CTP_BODY_TOO_LARGE',\n    'Request body is too large',\n    413,\n    RangeError\n  ),\n  FST_ERR_CTP_INVALID_MEDIA_TYPE: createError(\n    'FST_ERR_CTP_INVALID_MEDIA_TYPE',\n    'Unsupported Media Type: %s',\n    415\n  ),\n  FST_ERR_CTP_INVALID_CONTENT_LENGTH: createError(\n    'FST_ERR_CTP_INVALID_CONTENT_LENGTH',\n    'Request body size did not match Content-Length',\n    400,\n    RangeError\n  ),\n  FST_ERR_CTP_EMPTY_JSON_BODY: createError(\n    'FST_ERR_CTP_EMPTY_JSON_BODY',\n    \"Body cannot be empty when content-type is set to 'application/json'\",\n    400\n  ),\n  FST_ERR_CTP_INSTANCE_ALREADY_STARTED: createError(\n    'FST_ERR_CTP_INSTANCE_ALREADY_STARTED',\n    'Cannot call \"%s\" when fastify instance is already started!',\n    400\n  ),\n\n  /**\n   * decorate\n  */\n  FST_ERR_DEC_ALREADY_PRESENT: createError(\n    'FST_ERR_DEC_ALREADY_PRESENT',\n    \"The decorator '%s' has already been added!\"\n  ),\n  FST_ERR_DEC_DEPENDENCY_INVALID_TYPE: createError(\n    'FST_ERR_DEC_DEPENDENCY_INVALID_TYPE',\n    \"The dependencies of decorator '%s' must be of type Array.\"\n  ),\n  FST_ERR_DEC_MISSING_DEPENDENCY: createError(\n    'FST_ERR_DEC_MISSING_DEPENDENCY',\n    \"The decorator is missing dependency '%s'.\"\n  ),\n  FST_ERR_DEC_AFTER_START: createError(\n    'FST_ERR_DEC_AFTER_START',\n    \"The decorator '%s' has been added after start!\"\n  ),\n\n  /**\n   * hooks\n  */\n  FST_ERR_HOOK_INVALID_TYPE: createError(\n    'FST_ERR_HOOK_INVALID_TYPE',\n    'The hook name must be a string',\n    500,\n    TypeError\n  ),\n  FST_ERR_HOOK_INVALID_HANDLER: createError(\n    'FST_ERR_HOOK_INVALID_HANDLER',\n    '%s hook should be a function, instead got %s',\n    500,\n    TypeError\n  ),\n  FST_ERR_HOOK_INVALID_ASYNC_HANDLER: createError(\n    'FST_ERR_HOOK_INVALID_ASYNC_HANDLER',\n    'Async function has too many arguments. Async hooks should not use the \\'done\\' argument.',\n    500,\n    TypeError\n  ),\n  FST_ERR_HOOK_NOT_SUPPORTED: createError(\n    'FST_ERR_HOOK_NOT_SUPPORTED',\n    '%s hook not supported!',\n    500,\n    TypeError\n  ),\n\n  /**\n   * Middlewares\n   */\n  FST_ERR_MISSING_MIDDLEWARE: createError(\n    'FST_ERR_MISSING_MIDDLEWARE',\n    'You must register a plugin for handling middlewares, visit fastify.io/docs/latest/Reference/Middleware/ for more info.',\n    500\n  ),\n\n  FST_ERR_HOOK_TIMEOUT: createError(\n    'FST_ERR_HOOK_TIMEOUT',\n    \"A callback for '%s' hook timed out. You may have forgotten to call 'done' function or to resolve a Promise\"\n  ),\n\n  /**\n   * logger\n  */\n  FST_ERR_LOG_INVALID_DESTINATION: createError(\n    'FST_ERR_LOG_INVALID_DESTINATION',\n    'Cannot specify both logger.stream and logger.file options'\n  ),\n\n  /**\n   * reply\n  */\n  FST_ERR_REP_INVALID_PAYLOAD_TYPE: createError(\n    'FST_ERR_REP_INVALID_PAYLOAD_TYPE',\n    \"Attempted to send payload of invalid type '%s'. Expected a string or Buffer.\",\n    500,\n    TypeError\n  ),\n  FST_ERR_REP_ALREADY_SENT: createError(\n    'FST_ERR_REP_ALREADY_SENT',\n    'Reply was already sent.'\n  ),\n  FST_ERR_REP_SENT_VALUE: createError(\n    'FST_ERR_REP_SENT_VALUE',\n    'The only possible value for reply.sent is true.'\n  ),\n  FST_ERR_SEND_INSIDE_ONERR: createError(\n    'FST_ERR_SEND_INSIDE_ONERR',\n    'You cannot use `send` inside the `onError` hook'\n  ),\n  FST_ERR_SEND_UNDEFINED_ERR: createError(\n    'FST_ERR_SEND_UNDEFINED_ERR',\n    'Undefined error has occurred'\n  ),\n  FST_ERR_BAD_STATUS_CODE: createError(\n    'FST_ERR_BAD_STATUS_CODE',\n    'Called reply with an invalid status code: %s'\n  ),\n  FST_ERR_BAD_TRAILER_NAME: createError(\n    'FST_ERR_BAD_TRAILER_NAME',\n    'Called reply.trailer with an invalid header name: %s'\n  ),\n  FST_ERR_BAD_TRAILER_VALUE: createError(\n    'FST_ERR_BAD_TRAILER_VALUE',\n    \"Called reply.trailer('%s', fn) with an invalid type: %s. Expected a function.\"\n  ),\n  FST_ERR_FAILED_ERROR_SERIALIZATION: createError(\n    'FST_ERR_FAILED_ERROR_SERIALIZATION',\n    'Failed to serialize an error. Error: %s. Original error: %s'\n  ),\n  FST_ERR_MISSING_SERIALIZATION_FN: createError(\n    'FST_ERR_MISSING_SERIALIZATION_FN',\n    'Missing serialization function. Key \"%s\"'\n  ),\n  FST_ERR_MISSING_CONTENTTYPE_SERIALIZATION_FN: createError(\n    'FST_ERR_MISSING_CONTENTTYPE_SERIALIZATION_FN',\n    'Missing serialization function. Key \"%s:%s\"'\n  ),\n  FST_ERR_REQ_INVALID_VALIDATION_INVOCATION: createError(\n    'FST_ERR_REQ_INVALID_VALIDATION_INVOCATION',\n    'Invalid validation invocation. Missing validation function for HTTP part \"%s\" nor schema provided.'\n  ),\n\n  /**\n   * schemas\n  */\n  FST_ERR_SCH_MISSING_ID: createError(\n    'FST_ERR_SCH_MISSING_ID',\n    'Missing schema $id property'\n  ),\n  FST_ERR_SCH_ALREADY_PRESENT: createError(\n    'FST_ERR_SCH_ALREADY_PRESENT',\n    \"Schema with id '%s' already declared!\"\n  ),\n  FST_ERR_SCH_CONTENT_MISSING_SCHEMA: createError(\n    'FST_ERR_SCH_CONTENT_MISSING_SCHEMA',\n    \"Schema is missing for the content type '%s'\"\n  ),\n  FST_ERR_SCH_DUPLICATE: createError(\n    'FST_ERR_SCH_DUPLICATE',\n    \"Schema with '%s' already present!\"\n  ),\n  FST_ERR_SCH_VALIDATION_BUILD: createError(\n    'FST_ERR_SCH_VALIDATION_BUILD',\n    'Failed building the validation schema for %s: %s, due to error %s'\n  ),\n  FST_ERR_SCH_SERIALIZATION_BUILD: createError(\n    'FST_ERR_SCH_SERIALIZATION_BUILD',\n    'Failed building the serialization schema for %s: %s, due to error %s'\n  ),\n  FST_ERR_SCH_RESPONSE_SCHEMA_NOT_NESTED_2XX: createError(\n    'FST_ERR_SCH_RESPONSE_SCHEMA_NOT_NESTED_2XX',\n    'response schemas should be nested under a valid status code, e.g { 2xx: { type: \"object\" } }'\n  ),\n\n  /**\n   * http2\n   */\n  FST_ERR_HTTP2_INVALID_VERSION: createError(\n    'FST_ERR_HTTP2_INVALID_VERSION',\n    'HTTP2 is available only from node >= 8.8.1'\n  ),\n\n  /**\n   * initialConfig\n   */\n  FST_ERR_INIT_OPTS_INVALID: createError(\n    'FST_ERR_INIT_OPTS_INVALID',\n    \"Invalid initialization options: '%s'\"\n  ),\n  FST_ERR_FORCE_CLOSE_CONNECTIONS_IDLE_NOT_AVAILABLE: createError(\n    'FST_ERR_FORCE_CLOSE_CONNECTIONS_IDLE_NOT_AVAILABLE',\n    \"Cannot set forceCloseConnections to 'idle' as your HTTP server does not support closeIdleConnections method\"\n  ),\n\n  /**\n   * router\n   */\n  FST_ERR_DUPLICATED_ROUTE: createError(\n    'FST_ERR_DUPLICATED_ROUTE',\n    \"Method '%s' already declared for route '%s'\"\n  ),\n  FST_ERR_BAD_URL: createError(\n    'FST_ERR_BAD_URL',\n    \"'%s' is not a valid url component\",\n    400\n  ),\n  FST_ERR_ASYNC_CONSTRAINT: createError(\n    'FST_ERR_ASYNC_CONSTRAINT',\n    'Unexpected error from async constraint',\n    500\n  ),\n  FST_ERR_DEFAULT_ROUTE_INVALID_TYPE: createError(\n    'FST_ERR_DEFAULT_ROUTE_INVALID_TYPE',\n    'The defaultRoute type should be a function',\n    500,\n    TypeError\n  ),\n  FST_ERR_INVALID_URL: createError(\n    'FST_ERR_INVALID_URL',\n    \"URL must be a string. Received '%s'\",\n    400\n  ),\n  FST_ERR_ROUTE_OPTIONS_NOT_OBJ: createError(\n    'FST_ERR_ROUTE_OPTIONS_NOT_OBJ',\n    'Options for \"%s:%s\" route must be an object',\n    500\n  ),\n  FST_ERR_ROUTE_DUPLICATED_HANDLER: createError(\n    'FST_ERR_ROUTE_DUPLICATED_HANDLER',\n    'Duplicate handler for \"%s:%s\" route is not allowed!',\n    500\n  ),\n  FST_ERR_ROUTE_HANDLER_NOT_FN: createError(\n    'FST_ERR_ROUTE_HANDLER_NOT_FN',\n    'Error Handler for %s:%s route, if defined, must be a function',\n    500\n  ),\n  FST_ERR_ROUTE_MISSING_HANDLER: createError(\n    'FST_ERR_ROUTE_MISSING_HANDLER',\n    'Missing handler function for \"%s:%s\" route.',\n    500\n  ),\n  FST_ERR_ROUTE_METHOD_NOT_SUPPORTED: createError(\n    'FST_ERR_ROUTE_METHOD_NOT_SUPPORTED',\n    '%s method is not supported.',\n    500\n  ),\n  FST_ERR_ROUTE_BODY_VALIDATION_SCHEMA_NOT_SUPPORTED: createError(\n    'FST_ERR_ROUTE_BODY_VALIDATION_SCHEMA_NOT_SUPPORTED',\n    'Body validation schema for %s:%s route is not supported!',\n    500\n  ),\n  FST_ERR_ROUTE_BODY_LIMIT_OPTION_NOT_INT: createError(\n    'FST_ERR_ROUTE_BODY_LIMIT_OPTION_NOT_INT',\n    \"'bodyLimit' option must be an integer > 0. Got '%s'\",\n    500,\n    TypeError\n  ),\n  FST_ERR_ROUTE_REWRITE_NOT_STR: createError(\n    'FST_ERR_ROUTE_BODY_LIMIT_OPTION_NOT_INT',\n    'Rewrite url for \"%s\" needs to be of type \"string\" but received \"%s\"',\n    500\n  ),\n\n  /**\n   *  again listen when close server\n   */\n  FST_ERR_REOPENED_CLOSE_SERVER: createError(\n    'FST_ERR_REOPENED_CLOSE_SERVER',\n    'Fastify has already been closed and cannot be reopened'\n  ),\n  FST_ERR_REOPENED_SERVER: createError(\n    'FST_ERR_REOPENED_SERVER',\n    'Fastify is already listening'\n  ),\n  FST_ERR_INSTANCE_ALREADY_LISTENING: createError(\n    'FST_ERR_INSTANCE_ALREADY_LISTENING',\n    'Fastify instance is already listening. %s'\n  ),\n\n  /**\n   * plugin\n   */\n  FST_ERR_PLUGIN_VERSION_MISMATCH: createError(\n    'FST_ERR_PLUGIN_VERSION_MISMATCH',\n    \"fastify-plugin: %s - expected '%s' fastify version, '%s' is installed\"\n  ),\n  FST_ERR_PLUGIN_NOT_PRESENT_IN_INSTANCE: createError(\n    'FST_ERR_PLUGIN_NOT_PRESENT_IN_INSTANCE',\n    \"The decorator '%s'%s is not present in %s\"\n  ),\n\n  /**\n   *  Avvio Errors\n   */\n  FST_ERR_PLUGIN_CALLBACK_NOT_FN: createError(\n    'FST_ERR_PLUGIN_CALLBACK_NOT_FN',\n    'fastify-plugin: %s'\n  ),\n  FST_ERR_PLUGIN_NOT_VALID: createError(\n    'FST_ERR_PLUGIN_NOT_VALID',\n    'fastify-plugin: %s'\n  ),\n  FST_ERR_ROOT_PLG_BOOTED: createError(\n    'FST_ERR_ROOT_PLG_BOOTED',\n    'fastify-plugin: %s'\n  ),\n  FST_ERR_PARENT_PLUGIN_BOOTED: createError(\n    'FST_ERR_PARENT_PLUGIN_BOOTED',\n    'fastify-plugin: %s'\n  ),\n  FST_ERR_PLUGIN_TIMEOUT: createError(\n    'FST_ERR_PLUGIN_TIMEOUT',\n    'fastify-plugin: %s'\n  )\n}\n\nfunction appendStackTrace (oldErr, newErr) {\n  newErr.cause = oldErr\n\n  return newErr\n}\n\nmodule.exports = codes\nmodule.exports.appendStackTrace = appendStackTrace\nmodule.exports.AVVIO_ERRORS_MAP = {\n  AVV_ERR_CALLBACK_NOT_FN: codes.FST_ERR_PLUGIN_CALLBACK_NOT_FN,\n  AVV_ERR_PLUGIN_NOT_VALID: codes.FST_ERR_PLUGIN_NOT_VALID,\n  AVV_ERR_ROOT_PLG_BOOTED: codes.FST_ERR_ROOT_PLG_BOOTED,\n  AVV_ERR_PARENT_PLG_LOADED: codes.FST_ERR_PARENT_PLUGIN_BOOTED,\n  AVV_ERR_READY_TIMEOUT: codes.FST_ERR_PLUGIN_TIMEOUT\n}\n/.prettierignore\u0002*\n/lib/route.jsOI'use strict'\n\nconst FindMyWay = require('find-my-way')\nconst Context = require('./context')\nconst handleRequest = require('./handleRequest')\nconst { hookRunner, hookIterator, onRequestAbortHookRunner, lifecycleHooks } = require('./hooks')\nconst { supportedMethods } = require('./httpMethods')\nconst { normalizeSchema } = require('./schemas')\nconst { parseHeadOnSendHandlers } = require('./headRoute')\nconst warning = require('./warnings')\n\nconst {\n  compileSchemasForValidation,\n  compileSchemasForSerialization\n} = require('./validation')\n\nconst {\n  FST_ERR_SCH_VALIDATION_BUILD,\n  FST_ERR_SCH_SERIALIZATION_BUILD,\n  FST_ERR_DEFAULT_ROUTE_INVALID_TYPE,\n  FST_ERR_DUPLICATED_ROUTE,\n  FST_ERR_INVALID_URL,\n  FST_ERR_SEND_UNDEFINED_ERR,\n  FST_ERR_HOOK_INVALID_HANDLER,\n  FST_ERR_ROUTE_OPTIONS_NOT_OBJ,\n  FST_ERR_ROUTE_DUPLICATED_HANDLER,\n  FST_ERR_ROUTE_HANDLER_NOT_FN,\n  FST_ERR_ROUTE_MISSING_HANDLER,\n  FST_ERR_ROUTE_METHOD_NOT_SUPPORTED,\n  FST_ERR_ROUTE_BODY_VALIDATION_SCHEMA_NOT_SUPPORTED,\n  FST_ERR_ROUTE_BODY_LIMIT_OPTION_NOT_INT\n} = require('./errors')\n\nconst {\n  kRoutePrefix,\n  kLogLevel,\n  kLogSerializers,\n  kHooks,\n  kSchemaController,\n  kOptions,\n  kReplySerializerDefault,\n  kReplyIsError,\n  kRequestPayloadStream,\n  kDisableRequestLogging,\n  kSchemaErrorFormatter,\n  kErrorHandler,\n  kHasBeenDecorated,\n  kRequestAcceptVersion,\n  kRouteByFastify,\n  kRouteContext\n} = require('./symbols.js')\nconst { buildErrorHandler } = require('./error-handler')\n\nfunction buildRouting (options) {\n  const router = FindMyWay(options.config)\n\n  let avvio\n  let fourOhFour\n  let requestIdLogLabel\n  let logger\n  let hasLogger\n  let setupResponseListeners\n  let throwIfAlreadyStarted\n  let genReqId\n  let disableRequestLogging\n  let ignoreTrailingSlash\n  let ignoreDuplicateSlashes\n  let return503OnClosing\n  let globalExposeHeadRoutes\n  let validateHTTPVersion\n  let keepAliveConnections\n\n  let closing = false\n\n  return {\n    setup (options, fastifyArgs) {\n      avvio = fastifyArgs.avvio\n      fourOhFour = fastifyArgs.fourOhFour\n      logger = fastifyArgs.logger\n      hasLogger = fastifyArgs.hasLogger\n      setupResponseListeners = fastifyArgs.setupResponseListeners\n      throwIfAlreadyStarted = fastifyArgs.throwIfAlreadyStarted\n      validateHTTPVersion = fastifyArgs.validateHTTPVersion\n\n      globalExposeHeadRoutes = options.exposeHeadRoutes\n      requestIdLogLabel = options.requestIdLogLabel\n      genReqId = options.genReqId\n      disableRequestLogging = options.disableRequestLogging\n      ignoreTrailingSlash = options.ignoreTrailingSlash\n      ignoreDuplicateSlashes = options.ignoreDuplicateSlashes\n      return503OnClosing = Object.prototype.hasOwnProperty.call(options, 'return503OnClosing') ? options.return503OnClosing : true\n      keepAliveConnections = fastifyArgs.keepAliveConnections\n    },\n    routing: router.lookup.bind(router), // router func to find the right handler to call\n    route, // configure a route in the fastify instance\n    hasRoute,\n    prepareRoute,\n    getDefaultRoute: function () {\n      warning.emit('FSTDEP014')\n      return router.defaultRoute\n    },\n    setDefaultRoute: function (defaultRoute) {\n      warning.emit('FSTDEP014')\n      if (typeof defaultRoute !== 'function') {\n        throw new FST_ERR_DEFAULT_ROUTE_INVALID_TYPE()\n      }\n\n      router.defaultRoute = defaultRoute\n    },\n    routeHandler,\n    closeRoutes: () => { closing = true },\n    printRoutes: router.prettyPrint.bind(router),\n    addConstraintStrategy,\n    hasConstraintStrategy,\n    isAsyncConstraint\n  }\n\n  function addConstraintStrategy (strategy) {\n    throwIfAlreadyStarted('Cannot add constraint strategy!')\n    return router.addConstraintStrategy(strategy)\n  }\n\n  function hasConstraintStrategy (strategyName) {\n    return router.hasConstraintStrategy(strategyName)\n  }\n\n  function isAsyncConstraint () {\n    return router.constrainer.asyncStrategiesInUse.size > 0\n  }\n\n  // Convert shorthand to extended route declaration\n  function prepareRoute ({ method, url, options, handler, isFastify }) {\n    if (typeof url !== 'string') {\n      throw new FST_ERR_INVALID_URL(typeof url)\n    }\n\n    if (!handler && typeof options === 'function') {\n      handler = options // for support over direct function calls such as fastify.get() options are reused as the handler\n      options = {}\n    } else if (handler && typeof handler === 'function') {\n      if (Object.prototype.toString.call(options) !== '[object Object]') {\n        throw new FST_ERR_ROUTE_OPTIONS_NOT_OBJ(method, url)\n      } else if (options.handler) {\n        if (typeof options.handler === 'function') {\n          throw new FST_ERR_ROUTE_DUPLICATED_HANDLER(method, url)\n        } else {\n          throw new FST_ERR_ROUTE_HANDLER_NOT_FN(method, url)\n        }\n      }\n    }\n\n    options = Object.assign({}, options, {\n      method,\n      url,\n      path: url,\n      handler: handler || (options && options.handler)\n    })\n\n    return route.call(this, { options, isFastify })\n  }\n\n  function hasRoute ({ options }) {\n    return router.find(\n      options.method,\n      options.url || '',\n      options.constraints\n    ) !== null\n  }\n\n  // Route management\n  function route ({ options, isFastify }) {\n    // Since we are mutating/assigning only top level props, it is fine to have a shallow copy using the spread operator\n    const opts = { ...options }\n\n    const { exposeHeadRoute } = opts\n    const hasRouteExposeHeadRouteFlag = exposeHeadRoute != null\n    const shouldExposeHead = hasRouteExposeHeadRouteFlag ? exposeHeadRoute : globalExposeHeadRoutes\n    // we need to clone a set of initial options for HEAD route\n    const headOpts = shouldExposeHead && options.method === 'GET' ? { ...options } : null\n\n    throwIfAlreadyStarted('Cannot add route!')\n\n    const path = opts.url || opts.path || ''\n\n    if (Array.isArray(opts.method)) {\n      // eslint-disable-next-line no-var\n      for (var i = 0; i < opts.method.length; ++i) {\n        validateMethodAndSchemaBodyOption(opts.method[i], path, opts.schema)\n      }\n    } else {\n      validateMethodAndSchemaBodyOption(opts.method, path, opts.schema)\n    }\n\n    if (!opts.handler) {\n      throw new FST_ERR_ROUTE_MISSING_HANDLER(opts.method, path)\n    }\n\n    if (opts.errorHandler !== undefined && typeof opts.errorHandler !== 'function') {\n      throw new FST_ERR_ROUTE_HANDLER_NOT_FN(opts.method, path)\n    }\n\n    validateBodyLimitOption(opts.bodyLimit)\n\n    const prefix = this[kRoutePrefix]\n\n    if (path === '/' && prefix.length > 0 && opts.method !== 'HEAD') {\n      switch (opts.prefixTrailingSlash) {\n        case 'slash':\n          addNewRoute.call(this, { path, isFastify })\n          break\n        case 'no-slash':\n          addNewRoute.call(this, { path: '', isFastify })\n          break\n        case 'both':\n        default:\n          addNewRoute.call(this, { path: '', isFastify })\n          // If ignoreTrailingSlash is set to true we need to add only the '' route to prevent adding an incomplete one.\n          if (ignoreTrailingSlash !== true && (ignoreDuplicateSlashes !== true || !prefix.endsWith('/'))) {\n            addNewRoute.call(this, { path, prefixing: true, isFastify })\n          }\n      }\n    } else if (path[0] === '/' && prefix.endsWith('/')) {\n      // Ensure that '/prefix/' + '/route' gets registered as '/prefix/route'\n      addNewRoute.call(this, { path: path.slice(1), isFastify })\n    } else {\n      addNewRoute.call(this, { path, isFastify })\n    }\n\n    // chainable api\n    return this\n\n    function addNewRoute ({ path, prefixing = false, isFastify = false }) {\n      const url = prefix + path\n\n      opts.url = url\n      opts.path = url\n      opts.routePath = path\n      opts.prefix = prefix\n      opts.logLevel = opts.logLevel || this[kLogLevel]\n\n      if (this[kLogSerializers] || opts.logSerializers) {\n        opts.logSerializers = Object.assign(Object.create(this[kLogSerializers]), opts.logSerializers)\n      }\n\n      if (opts.attachValidation == null) {\n        opts.attachValidation = false\n      }\n\n      if (prefixing === false) {\n        // run 'onRoute' hooks\n        for (const hook of this[kHooks].onRoute) {\n          hook.call(this, opts)\n        }\n      }\n\n      for (const hook of lifecycleHooks) {\n        if (opts && hook in opts) {\n          if (Array.isArray(opts[hook])) {\n            for (const func of opts[hook]) {\n              if (typeof func !== 'function') {\n                throw new FST_ERR_HOOK_INVALID_HANDLER(hook, Object.prototype.toString.call(func))\n              }\n            }\n          } else if (opts[hook] !== undefined && typeof opts[hook] !== 'function') {\n            throw new FST_ERR_HOOK_INVALID_HANDLER(hook, Object.prototype.toString.call(opts[hook]))\n          }\n        }\n      }\n\n      const constraints = opts.constraints || {}\n      const config = {\n        ...opts.config,\n        url,\n        method: opts.method\n      }\n\n      const context = new Context({\n        schema: opts.schema,\n        handler: opts.handler.bind(this),\n        config,\n        errorHandler: opts.errorHandler,\n        bodyLimit: opts.bodyLimit,\n        logLevel: opts.logLevel,\n        logSerializers: opts.logSerializers,\n        attachValidation: opts.attachValidation,\n        schemaErrorFormatter: opts.schemaErrorFormatter,\n        replySerializer: this[kReplySerializerDefault],\n        validatorCompiler: opts.validatorCompiler,\n        serializerCompiler: opts.serializerCompiler,\n        exposeHeadRoute: shouldExposeHead,\n        prefixTrailingSlash: (opts.prefixTrailingSlash || 'both'),\n        server: this,\n        isFastify\n      })\n\n      if (opts.version) {\n        warning.emit('FSTDEP008')\n        constraints.version = opts.version\n      }\n\n      const headHandler = router.find('HEAD', opts.url, constraints)\n      const hasHEADHandler = headHandler != null\n\n      // remove the head route created by fastify\n      if (hasHEADHandler && !context[kRouteByFastify] && headHandler.store[kRouteByFastify]) {\n        router.off('HEAD', opts.url, { constraints })\n      }\n\n      try {\n        router.on(opts.method, opts.url, { constraints }, routeHandler, context)\n      } catch (error) {\n        // any route insertion error created by fastify can be safely ignore\n        // because it only duplicate route for head\n        if (!context[kRouteByFastify]) {\n          const isDuplicatedRoute = error.message.includes(`Method '${opts.method}' already declared for route '${opts.url}'`)\n          if (isDuplicatedRoute) {\n            throw new FST_ERR_DUPLICATED_ROUTE(opts.method, opts.url)\n          }\n\n          throw error\n        }\n      }\n\n      this.after((notHandledErr, done) => {\n        // Send context async\n        context.errorHandler = opts.errorHandler ? buildErrorHandler(this[kErrorHandler], opts.errorHandler) : this[kErrorHandler]\n        context._parserOptions.limit = opts.bodyLimit || null\n        context.logLevel = opts.logLevel\n        context.logSerializers = opts.logSerializers\n        context.attachValidation = opts.attachValidation\n        context[kReplySerializerDefault] = this[kReplySerializerDefault]\n        context.schemaErrorFormatter = opts.schemaErrorFormatter || this[kSchemaErrorFormatter] || context.schemaErrorFormatter\n\n        // Run hooks and more\n        avvio.once('preReady', () => {\n          for (const hook of lifecycleHooks) {\n            const toSet = this[kHooks][hook]\n              .concat(opts[hook] || [])\n              .map(h => h.bind(this))\n            context[hook] = toSet.length ? toSet : null\n          }\n\n          // Optimization: avoid encapsulation if no decoration has been done.\n          while (!context.Request[kHasBeenDecorated] && context.Request.parent) {\n            context.Request = context.Request.parent\n          }\n          while (!context.Reply[kHasBeenDecorated] && context.Reply.parent) {\n            context.Reply = context.Reply.parent\n          }\n\n          // Must store the 404 Context in 'preReady' because it is only guaranteed to\n          // be available after all of the plugins and routes have been loaded.\n          fourOhFour.setContext(this, context)\n\n          if (opts.schema) {\n            context.schema = normalizeSchema(context.schema, this.initialConfig)\n\n            const schemaController = this[kSchemaController]\n            if (!opts.validatorCompiler && (opts.schema.body || opts.schema.headers || opts.schema.querystring || opts.schema.params)) {\n              schemaController.setupValidator(this[kOptions])\n            }\n            try {\n              const isCustom = typeof opts?.validatorCompiler === 'function' || schemaController.isCustomValidatorCompiler\n              compileSchemasForValidation(context, opts.validatorCompiler || schemaController.validatorCompiler, isCustom)\n            } catch (error) {\n              throw new FST_ERR_SCH_VALIDATION_BUILD(opts.method, url, error.message)\n            }\n\n            if (opts.schema.response && !opts.serializerCompiler) {\n              schemaController.setupSerializer(this[kOptions])\n            }\n            try {\n              compileSchemasForSerialization(context, opts.serializerCompiler || schemaController.serializerCompiler)\n            } catch (error) {\n              throw new FST_ERR_SCH_SERIALIZATION_BUILD(opts.method, url, error.message)\n            }\n          }\n        })\n\n        done(notHandledErr)\n      })\n\n      // register head route in sync\n      // we must place it after the `this.after`\n\n      if (shouldExposeHead && options.method === 'GET' && !hasHEADHandler) {\n        const onSendHandlers = parseHeadOnSendHandlers(headOpts.onSend)\n        prepareRoute.call(this, { method: 'HEAD', url: path, options: { ...headOpts, onSend: onSendHandlers }, isFastify: true })\n      } else if (hasHEADHandler && exposeHeadRoute) {\n        warning.emit('FSTDEP007')\n      }\n    }\n  }\n\n  // HTTP request entry point, the routing has already been executed\n  function routeHandler (req, res, params, context, query) {\n    const id = genReqId(req)\n\n    const loggerBinding = {\n      [requestIdLogLabel]: id\n    }\n\n    const loggerOpts = {\n      level: context.logLevel\n    }\n\n    if (context.logSerializers) {\n      loggerOpts.serializers = context.logSerializers\n    }\n    const childLogger = logger.child(loggerBinding, loggerOpts)\n    childLogger[kDisableRequestLogging] = disableRequestLogging\n\n    // TODO: The check here should be removed once https://github.com/nodejs/node/issues/43115 resolve in core.\n    if (!validateHTTPVersion(req.httpVersion)) {\n      childLogger.info({ res: { statusCode: 505 } }, 'request aborted - invalid HTTP version')\n      const message = '{\"error\":\"HTTP Version Not Supported\",\"message\":\"HTTP Version Not Supported\",\"statusCode\":505}'\n      const headers = {\n        'Content-Type': 'application/json',\n        'Content-Length': message.length\n      }\n      res.writeHead(505, headers)\n      res.end(message)\n      return\n    }\n\n    if (closing === true) {\n      /* istanbul ignore next mac, windows */\n      if (req.httpVersionMajor !== 2) {\n        res.setHeader('Connection', 'close')\n      }\n\n      // TODO remove return503OnClosing after Node v18 goes EOL\n      /* istanbul ignore else */\n      if (return503OnClosing) {\n        // On Node v19 we cannot test this behavior as it won't be necessary\n        // anymore. It will close all the idle connections before they reach this\n        // stage.\n        const headers = {\n          'Content-Type': 'application/json',\n          'Content-Length': '80'\n        }\n        res.writeHead(503, headers)\n        res.end('{\"error\":\"Service Unavailable\",\"message\":\"Service Unavailable\",\"statusCode\":503}')\n        childLogger.info({ res: { statusCode: 503 } }, 'request aborted - refusing to accept new requests as server is closing')\n        return\n      }\n    }\n\n    // When server.forceCloseConnections is true, we will collect any requests\n    // that have indicated they want persistence so that they can be reaped\n    // on server close. Otherwise, the container is a noop container.\n    const connHeader = String.prototype.toLowerCase.call(req.headers.connection || '')\n    if (connHeader === 'keep-alive') {\n      if (keepAliveConnections.has(req.socket) === false) {\n        keepAliveConnections.add(req.socket)\n        req.socket.on('close', removeTrackedSocket.bind({ keepAliveConnections, socket: req.socket }))\n      }\n    }\n\n    // we revert the changes in defaultRoute\n    if (req.headers[kRequestAcceptVersion] !== undefined) {\n      req.headers['accept-version'] = req.headers[kRequestAcceptVersion]\n      req.headers[kRequestAcceptVersion] = undefined\n    }\n\n    const request = new context.Request(id, params, req, query, childLogger, context)\n    const reply = new context.Reply(res, request, childLogger)\n\n    if (disableRequestLogging === false) {\n      childLogger.info({ req: request }, 'incoming request')\n    }\n\n    if (hasLogger === true || context.onResponse !== null) {\n      setupResponseListeners(reply)\n    }\n\n    if (context.onRequest !== null) {\n      hookRunner(\n        context.onRequest,\n        hookIterator,\n        request,\n        reply,\n        runPreParsing\n      )\n    } else {\n      runPreParsing(null, request, reply)\n    }\n\n    if (context.onRequestAbort !== null) {\n      req.on('close', () => {\n        /* istanbul ignore else */\n        if (req.aborted) {\n          onRequestAbortHookRunner(\n            context.onRequestAbort,\n            hookIterator,\n            request,\n            handleOnRequestAbortHooksErrors.bind(null, reply)\n          )\n        }\n      })\n    }\n\n    if (context.onTimeout !== null) {\n      if (!request.raw.socket._meta) {\n        request.raw.socket.on('timeout', handleTimeout)\n      }\n      request.raw.socket._meta = { context, request, reply }\n    }\n  }\n}\n\nfunction handleOnRequestAbortHooksErrors (reply, err) {\n  if (err) {\n    reply.log.error({ err }, 'onRequestAborted hook failed')\n  }\n  reply[kReplyIsError] = true\n}\n\nfunction handleTimeout () {\n  const { context, request, reply } = this._meta\n  hookRunner(\n    context.onTimeout,\n    hookIterator,\n    request,\n    reply,\n    noop\n  )\n}\n\nfunction validateMethodAndSchemaBodyOption (method, path, schema) {\n  if (supportedMethods.indexOf(method) === -1) {\n    throw new FST_ERR_ROUTE_METHOD_NOT_SUPPORTED(method)\n  }\n\n  if ((method === 'GET' || method === 'HEAD') && schema && schema.body) {\n    throw new FST_ERR_ROUTE_BODY_VALIDATION_SCHEMA_NOT_SUPPORTED(method, path)\n  }\n}\n\nfunction validateBodyLimitOption (bodyLimit) {\n  if (bodyLimit === undefined) return\n  if (!Number.isInteger(bodyLimit) || bodyLimit <= 0) {\n    throw new FST_ERR_ROUTE_BODY_LIMIT_OPTION_NOT_INT(bodyLimit)\n  }\n}\n\nfunction runPreParsing (err, request, reply) {\n  if (reply.sent === true) return\n  if (err != null) {\n    reply[kReplyIsError] = true\n    reply.send(err)\n    return\n  }\n\n  request[kRequestPayloadStream] = request.raw\n\n  if (request[kRouteContext].preParsing !== null) {\n    preParsingHookRunner(request[kRouteContext].preParsing, request, reply, handleRequest)\n  } else {\n    handleRequest(null, request, reply)\n  }\n}\n\nfunction preParsingHookRunner (functions, request, reply, cb) {\n  let i = 0\n\n  function next (err, stream) {\n    if (reply.sent) {\n      return\n    }\n\n    if (typeof stream !== 'undefined') {\n      request[kRequestPayloadStream] = stream\n    }\n\n    if (err || i === functions.length) {\n      cb(err, request, reply)\n      return\n    }\n\n    const fn = functions[i++]\n    let result\n    try {\n      result = fn(request, reply, request[kRequestPayloadStream], next)\n    } catch (error) {\n      next(error)\n      return\n    }\n\n    if (result && typeof result.then === 'function') {\n      result.then(handleResolve, handleReject)\n    }\n  }\n\n  function handleResolve (stream) {\n    next(null, stream)\n  }\n\n  function handleReject (err) {\n    if (!err) {\n      err = new FST_ERR_SEND_UNDEFINED_ERR()\n    }\n\n    next(err)\n  }\n\n  next(null, request[kRequestPayloadStream])\n}\n\n/**\n * Used within the route handler as a `net.Socket.close` event handler.\n * The purpose is to remove a socket from the tracked sockets collection when\n * the socket has naturally timed out.\n */\nfunction removeTrackedSocket () {\n  this.keepAliveConnections.delete(this.socket)\n}\n\nfunction noop () { }\n\nmodule.exports = { buildRouting, validateBodyLimitOption }\n /docs/Reference/Encapsulation.md\u0017\u000f<h1 align=\"center\">Fastify</h1>\n\n## Encapsulation\n<a id=\"encapsulation\"></a>\n\nA fundamental feature of Fastify is the \"encapsulation context.\" The\nencapsulation context governs which [decorators](./Decorators.md), registered\n[hooks](./Hooks.md), and [plugins](./Plugins.md) are available to\n[routes](./Routes.md). A visual representation of the encapsulation context\nis shown in the following figure:\n\n![Figure 1](../resources/encapsulation_context.svg)\n\nIn the above figure, there are several entities:\n\n1. The _root context_\n2. Three _root plugins_\n3. Two _child contexts_ where each _child context_ has\n    * Two _child plugins_\n    * One _grandchild context_ where each _grandchild context_ has\n        - Three _child plugins_\n\nEvery _child context_ and _grandchild context_ has access to the _root plugins_.\nWithin each _child context_, the _grandchild contexts_ have access to the\n_child plugins_ registered within the containing _child context_, but the\ncontaining _child context_ **does not** have access to the _child plugins_\nregistered within its _grandchild context_.\n\nGiven that everything in Fastify is a [plugin](./Plugins.md), except for the\n_root context_, every \"context\" and \"plugin\" in this example is a plugin\nthat can consist of decorators, hooks, plugins, and routes. Thus, to put\nthis example into concrete terms, consider a basic scenario of a REST API\nserver that has three routes: the first route (`/one`) requires authentication,\nthe second route (`/two`) does not, and the third route (`/three`) has\naccess to the same context as the second route. Using\n[@fastify/bearer-auth][bearer] to provide the authentication, the code for this\nexample is as follows:\n\n```js\n'use strict'\n\nconst fastify = require('fastify')()\n\nfastify.decorateRequest('answer', 42)\n\nfastify.register(async function authenticatedContext (childServer) {\n  childServer.register(require('@fastify/bearer-auth'), { keys: ['abc123'] })\n\n  childServer.route({\n    path: '/one',\n    method: 'GET',\n    handler (request, response) {\n      response.send({\n        answer: request.answer,\n        // request.foo will be undefined as it's only defined in publicContext\n        foo: request.foo,\n        // request.bar will be undefined as it's only defined in grandchildContext\n        bar: request.bar\n      })\n    }\n  })\n})\n\nfastify.register(async function publicContext (childServer) {\n  childServer.decorateRequest('foo', 'foo')\n\n  childServer.route({\n    path: '/two',\n    method: 'GET',\n    handler (request, response) {\n      response.send({\n        answer: request.answer,\n        foo: request.foo,\n        // request.bar will be undefined as it's only defined in grandchildContext\n        bar: request.bar\n      })\n    }\n  })\n\n  childServer.register(async function grandchildContext (grandchildServer) {\n    grandchildServer.decorateRequest('bar', 'bar')\n\n    grandchildServer.route({\n      path: '/three',\n      method: 'GET',\n      handler (request, response) {\n        response.send({\n          answer: request.answer,\n          foo: request.foo,\n          bar: request.bar\n        })\n      }\n    })\n  })\n})\n\nfastify.listen({ port: 8000 })\n```\n\nThe above server example shows all of the encapsulation concepts outlined in the\noriginal diagram:\n\n1. Each _child context_ (`authenticatedContext`, `publicContext`, and\n`grandchildContext`) has access to the `answer` request decorator defined in\nthe _root context_.\n2. Only the `authenticatedContext` has access to the `@fastify/bearer-auth`\nplugin.\n3. Both the `publicContext` and `grandchildContext` have access to the `foo`\nrequest decorator.\n4. Only the `grandchildContext` has access to the `bar` request decorator.\n\nTo see this, start the server and issue requests:\n\n```sh\n# curl -H 'authorization: Bearer abc123' http://127.0.0.1:8000/one\n{\"answer\":42}\n# curl http://127.0.0.1:8000/two\n{\"answer\":42,\"foo\":\"foo\"}\n# curl http://127.0.0.1:8000/three\n{\"answer\":42,\"foo\":\"foo\",\"bar\":\"bar\"}\n```\n\n[bearer]: https://github.com/fastify/fastify-bearer-auth\n\n## Sharing Between Contexts\n<a id=\"shared-context\"></a>\n\nNotice that each context in the prior example inherits _only_ from the parent\ncontexts. Parent contexts cannot access any entities within their descendent\ncontexts. This default is occasionally not desired. In such cases, the\nencapsulation context can be broken through the usage of\n[fastify-plugin][fastify-plugin] such that anything registered in a descendent\ncontext is available to the containing parent context.\n\nAssuming the `publicContext` needs access to the `bar` decorator defined\nwithin the `grandchildContext` in the previous example, the code can be\nrewritten as:\n\n```js\n'use strict'\n\nconst fastify = require('fastify')()\nconst fastifyPlugin = require('fastify-plugin')\n\nfastify.decorateRequest('answer', 42)\n\n// `authenticatedContext` omitted for clarity\n\nfastify.register(async function publicContext (childServer) {\n  childServer.decorateRequest('foo', 'foo')\n\n  childServer.route({\n    path: '/two',\n    method: 'GET',\n    handler (request, response) {\n      response.send({\n        answer: request.answer,\n        foo: request.foo,\n        bar: request.bar\n      })\n    }\n  })\n\n  childServer.register(fastifyPlugin(grandchildContext))\n\n  async function grandchildContext (grandchildServer) {\n    grandchildServer.decorateRequest('bar', 'bar')\n\n    grandchildServer.route({\n      path: '/three',\n      method: 'GET',\n      handler (request, response) {\n        response.send({\n          answer: request.answer,\n          foo: request.foo,\n          bar: request.bar\n        })\n      }\n    })\n  }\n})\n\nfastify.listen({ port: 8000 })\n```\n\nRestarting the server and re-issuing the requests for `/two` and `/three`:\n\n```sh\n# curl http://127.0.0.1:8000/two\n{\"answer\":42,\"foo\":\"foo\",\"bar\":\"bar\"}\n# curl http://127.0.0.1:8000/three\n{\"answer\":42,\"foo\":\"foo\",\"bar\":\"bar\"}\n```\n\n[fastify-plugin]: https://github.com/fastify/fastify-plugin\n/test/decorator.test.jsu'use strict'\n\n/* eslint no-prototype-builtins: 0 */\n\nconst t = require('tap')\nconst test = t.test\nconst Fastify = require('..')\nconst fp = require('fastify-plugin')\nconst sget = require('simple-get').concat\nconst symbols = require('../lib/symbols.js')\nconst proxyquire = require('proxyquire')\n\ntest('server methods should exist', t => {\n  t.plan(2)\n  const fastify = Fastify()\n  t.ok(fastify.decorate)\n  t.ok(fastify.hasDecorator)\n})\n\ntest('should check if the given decoration already exist when null', t => {\n  t.plan(1)\n  const fastify = Fastify()\n  fastify.decorate('null', null)\n  fastify.ready(() => {\n    t.ok(fastify.hasDecorator('null'))\n  })\n})\n\ntest('server methods should be encapsulated via .register', t => {\n  t.plan(2)\n  const fastify = Fastify()\n\n  fastify.register((instance, opts, done) => {\n    instance.decorate('test', () => {})\n    t.ok(instance.test)\n    done()\n  })\n\n  fastify.ready(() => {\n    t.notOk(fastify.test)\n  })\n})\n\ntest('hasServerMethod should check if the given method already exist', t => {\n  t.plan(2)\n  const fastify = Fastify()\n\n  fastify.register((instance, opts, done) => {\n    instance.decorate('test', () => {})\n    t.ok(instance.hasDecorator('test'))\n    done()\n  })\n\n  fastify.ready(() => {\n    t.notOk(fastify.hasDecorator('test'))\n  })\n})\n\ntest('decorate should throw if a declared dependency is not present', t => {\n  t.plan(3)\n  const fastify = Fastify()\n\n  fastify.register((instance, opts, done) => {\n    try {\n      instance.decorate('test', () => {}, ['dependency'])\n      t.fail()\n    } catch (e) {\n      t.same(e.code, 'FST_ERR_DEC_MISSING_DEPENDENCY')\n      t.same(e.message, 'The decorator is missing dependency \\'dependency\\'.')\n    }\n    done()\n  })\n\n  fastify.ready(() => t.pass())\n})\n\ntest('decorate should throw if declared dependency is not array', t => {\n  t.plan(3)\n  const fastify = Fastify()\n\n  fastify.register((instance, opts, done) => {\n    try {\n      instance.decorate('test', () => {}, {})\n      t.fail()\n    } catch (e) {\n      t.same(e.code, 'FST_ERR_DEC_DEPENDENCY_INVALID_TYPE')\n      t.same(e.message, 'The dependencies of decorator \\'test\\' must be of type Array.')\n    }\n    done()\n  })\n\n  fastify.ready(() => t.pass())\n})\n\n// issue #777\ntest('should pass error for missing request decorator', t => {\n  t.plan(2)\n  const fastify = Fastify()\n\n  const plugin = fp(function (instance, opts, done) {\n    done()\n  }, {\n    decorators: {\n      request: ['foo']\n    }\n  })\n  fastify\n    .register(plugin)\n    .ready((err) => {\n      t.type(err, Error)\n      t.match(err, /The decorator 'foo'/)\n    })\n})\n\ntest('decorateReply inside register', t => {\n  t.plan(11)\n  const fastify = Fastify()\n\n  fastify.register((instance, opts, done) => {\n    instance.decorateReply('test', 'test')\n\n    instance.get('/yes', (req, reply) => {\n      t.ok(reply.test, 'test exists')\n      reply.send({ hello: 'world' })\n    })\n\n    done()\n  })\n\n  fastify.get('/no', (req, reply) => {\n    t.notOk(reply.test)\n    reply.send({ hello: 'world' })\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port + '/yes'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(response.headers['content-length'], '' + body.length)\n      t.same(JSON.parse(body), { hello: 'world' })\n    })\n\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port + '/no'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(response.headers['content-length'], '' + body.length)\n      t.same(JSON.parse(body), { hello: 'world' })\n    })\n  })\n})\n\ntest('decorateReply as plugin (inside .after)', t => {\n  t.plan(11)\n  const fastify = Fastify()\n\n  fastify.register((instance, opts, done) => {\n    instance.register(fp((i, o, n) => {\n      instance.decorateReply('test', 'test')\n      n()\n    })).after(() => {\n      instance.get('/yes', (req, reply) => {\n        t.ok(reply.test)\n        reply.send({ hello: 'world' })\n      })\n    })\n    done()\n  })\n\n  fastify.get('/no', (req, reply) => {\n    t.notOk(reply.test)\n    reply.send({ hello: 'world' })\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port + '/yes'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(response.headers['content-length'], '' + body.length)\n      t.same(JSON.parse(body), { hello: 'world' })\n    })\n\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port + '/no'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(response.headers['content-length'], '' + body.length)\n      t.same(JSON.parse(body), { hello: 'world' })\n    })\n  })\n})\n\ntest('decorateReply as plugin (outside .after)', t => {\n  t.plan(11)\n  const fastify = Fastify()\n\n  fastify.register((instance, opts, done) => {\n    instance.register(fp((i, o, n) => {\n      instance.decorateReply('test', 'test')\n      n()\n    }))\n\n    instance.get('/yes', (req, reply) => {\n      t.ok(reply.test)\n      reply.send({ hello: 'world' })\n    })\n    done()\n  })\n\n  fastify.get('/no', (req, reply) => {\n    t.notOk(reply.test)\n    reply.send({ hello: 'world' })\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port + '/yes'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(response.headers['content-length'], '' + body.length)\n      t.same(JSON.parse(body), { hello: 'world' })\n    })\n\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port + '/no'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(response.headers['content-length'], '' + body.length)\n      t.same(JSON.parse(body), { hello: 'world' })\n    })\n  })\n})\n\ntest('decorateRequest inside register', t => {\n  t.plan(11)\n  const fastify = Fastify()\n\n  fastify.register((instance, opts, done) => {\n    instance.decorateRequest('test', 'test')\n\n    instance.get('/yes', (req, reply) => {\n      t.ok(req.test, 'test exists')\n      reply.send({ hello: 'world' })\n    })\n\n    done()\n  })\n\n  fastify.get('/no', (req, reply) => {\n    t.notOk(req.test)\n    reply.send({ hello: 'world' })\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port + '/yes'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(response.headers['content-length'], '' + body.length)\n      t.same(JSON.parse(body), { hello: 'world' })\n    })\n\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port + '/no'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(response.headers['content-length'], '' + body.length)\n      t.same(JSON.parse(body), { hello: 'world' })\n    })\n  })\n})\n\ntest('decorateRequest as plugin (inside .after)', t => {\n  t.plan(11)\n  const fastify = Fastify()\n\n  fastify.register((instance, opts, done) => {\n    instance.register(fp((i, o, n) => {\n      instance.decorateRequest('test', 'test')\n      n()\n    })).after(() => {\n      instance.get('/yes', (req, reply) => {\n        t.ok(req.test)\n        reply.send({ hello: 'world' })\n      })\n    })\n    done()\n  })\n\n  fastify.get('/no', (req, reply) => {\n    t.notOk(req.test)\n    reply.send({ hello: 'world' })\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port + '/yes'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(response.headers['content-length'], '' + body.length)\n      t.same(JSON.parse(body), { hello: 'world' })\n    })\n\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port + '/no'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(response.headers['content-length'], '' + body.length)\n      t.same(JSON.parse(body), { hello: 'world' })\n    })\n  })\n})\n\ntest('decorateRequest as plugin (outside .after)', t => {\n  t.plan(11)\n  const fastify = Fastify()\n\n  fastify.register((instance, opts, done) => {\n    instance.register(fp((i, o, n) => {\n      instance.decorateRequest('test', 'test')\n      n()\n    }))\n\n    instance.get('/yes', (req, reply) => {\n      t.ok(req.test)\n      reply.send({ hello: 'world' })\n    })\n    done()\n  })\n\n  fastify.get('/no', (req, reply) => {\n    t.notOk(req.test)\n    reply.send({ hello: 'world' })\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port + '/yes'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(response.headers['content-length'], '' + body.length)\n      t.same(JSON.parse(body), { hello: 'world' })\n    })\n\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port + '/no'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(response.headers['content-length'], '' + body.length)\n      t.same(JSON.parse(body), { hello: 'world' })\n    })\n  })\n})\n\ntest('decorators should be instance separated', t => {\n  t.plan(1)\n\n  const fastify1 = Fastify()\n  const fastify2 = Fastify()\n\n  fastify1.decorate('test', 'foo')\n  fastify2.decorate('test', 'foo')\n\n  fastify1.decorateRequest('test', 'foo')\n  fastify2.decorateRequest('test', 'foo')\n\n  fastify1.decorateReply('test', 'foo')\n  fastify2.decorateReply('test', 'foo')\n\n  t.pass()\n})\n\ntest('hasRequestDecorator', t => {\n  const requestDecoratorName = 'my-decorator-name'\n\n  t.test('is a function', t => {\n    t.plan(1)\n    const fastify = Fastify()\n    t.ok(fastify.hasRequestDecorator)\n  })\n\n  t.test('should check if the given request decoration already exist', t => {\n    t.plan(2)\n    const fastify = Fastify()\n\n    t.notOk(fastify.hasRequestDecorator(requestDecoratorName))\n    fastify.decorateRequest(requestDecoratorName, 42)\n    t.ok(fastify.hasRequestDecorator(requestDecoratorName))\n  })\n\n  t.test('should check if the given request decoration already exist when null', t => {\n    t.plan(2)\n    const fastify = Fastify()\n\n    t.notOk(fastify.hasRequestDecorator(requestDecoratorName))\n    fastify.decorateRequest(requestDecoratorName, null)\n    t.ok(fastify.hasRequestDecorator(requestDecoratorName))\n  })\n\n  t.test('should be plugin encapsulable', t => {\n    t.plan(4)\n    const fastify = Fastify()\n\n    t.notOk(fastify.hasRequestDecorator(requestDecoratorName))\n\n    fastify.register(function (fastify2, opts, done) {\n      fastify2.decorateRequest(requestDecoratorName, 42)\n      t.ok(fastify2.hasRequestDecorator(requestDecoratorName))\n      done()\n    })\n\n    t.notOk(fastify.hasRequestDecorator(requestDecoratorName))\n\n    fastify.ready(function () {\n      t.notOk(fastify.hasRequestDecorator(requestDecoratorName))\n    })\n  })\n\n  t.test('should be inherited', t => {\n    t.plan(2)\n    const fastify = Fastify()\n\n    fastify.decorateRequest(requestDecoratorName, 42)\n\n    fastify.register(function (fastify2, opts, done) {\n      t.ok(fastify2.hasRequestDecorator(requestDecoratorName))\n      done()\n    })\n\n    fastify.ready(function () {\n      t.ok(fastify.hasRequestDecorator(requestDecoratorName))\n    })\n  })\n\n  t.end()\n})\n\ntest('hasReplyDecorator', t => {\n  const replyDecoratorName = 'my-decorator-name'\n\n  t.test('is a function', t => {\n    t.plan(1)\n    const fastify = Fastify()\n    t.ok(fastify.hasReplyDecorator)\n  })\n\n  t.test('should check if the given reply decoration already exist', t => {\n    t.plan(2)\n    const fastify = Fastify()\n\n    t.notOk(fastify.hasReplyDecorator(replyDecoratorName))\n    fastify.decorateReply(replyDecoratorName, 42)\n    t.ok(fastify.hasReplyDecorator(replyDecoratorName))\n  })\n\n  t.test('should check if the given reply decoration already exist when null', t => {\n    t.plan(2)\n    const fastify = Fastify()\n\n    t.notOk(fastify.hasReplyDecorator(replyDecoratorName))\n    fastify.decorateReply(replyDecoratorName, null)\n    t.ok(fastify.hasReplyDecorator(replyDecoratorName))\n  })\n\n  t.test('should be plugin encapsulable', t => {\n    t.plan(4)\n    const fastify = Fastify()\n\n    t.notOk(fastify.hasReplyDecorator(replyDecoratorName))\n\n    fastify.register(function (fastify2, opts, done) {\n      fastify2.decorateReply(replyDecoratorName, 42)\n      t.ok(fastify2.hasReplyDecorator(replyDecoratorName))\n      done()\n    })\n\n    t.notOk(fastify.hasReplyDecorator(replyDecoratorName))\n\n    fastify.ready(function () {\n      t.notOk(fastify.hasReplyDecorator(replyDecoratorName))\n    })\n  })\n\n  t.test('should be inherited', t => {\n    t.plan(2)\n    const fastify = Fastify()\n\n    fastify.decorateReply(replyDecoratorName, 42)\n\n    fastify.register(function (fastify2, opts, done) {\n      t.ok(fastify2.hasReplyDecorator(replyDecoratorName))\n      done()\n    })\n\n    fastify.ready(function () {\n      t.ok(fastify.hasReplyDecorator(replyDecoratorName))\n    })\n  })\n\n  t.end()\n})\n\ntest('should register properties via getter/setter objects', t => {\n  t.plan(3)\n  const fastify = Fastify()\n\n  fastify.register((instance, opts, done) => {\n    instance.decorate('test', {\n      getter () {\n        return 'a getter'\n      }\n    })\n    t.ok(instance.test)\n    t.ok(instance.test, 'a getter')\n    done()\n  })\n\n  fastify.ready(() => {\n    t.notOk(fastify.test)\n  })\n})\n\ntest('decorateRequest should work with getter/setter', t => {\n  t.plan(5)\n  const fastify = Fastify()\n\n  fastify.register((instance, opts, done) => {\n    instance.decorateRequest('test', {\n      getter () {\n        return 'a getter'\n      }\n    })\n\n    instance.get('/req-decorated-get-set', (req, res) => {\n      res.send({ test: req.test })\n    })\n\n    done()\n  })\n\n  fastify.get('/not-decorated', (req, res) => {\n    t.notOk(req.test)\n    res.send()\n  })\n\n  fastify.ready(() => {\n    fastify.inject({ url: '/req-decorated-get-set' }, (err, res) => {\n      t.error(err)\n      t.same(JSON.parse(res.payload), { test: 'a getter' })\n    })\n\n    fastify.inject({ url: '/not-decorated' }, (err, res) => {\n      t.error(err)\n      t.pass()\n    })\n  })\n})\n\ntest('decorateReply should work with getter/setter', t => {\n  t.plan(5)\n  const fastify = Fastify()\n\n  fastify.register((instance, opts, done) => {\n    instance.decorateReply('test', {\n      getter () {\n        return 'a getter'\n      }\n    })\n\n    instance.get('/res-decorated-get-set', (req, res) => {\n      res.send({ test: res.test })\n    })\n\n    done()\n  })\n\n  fastify.get('/not-decorated', (req, res) => {\n    t.notOk(res.test)\n    res.send()\n  })\n\n  fastify.ready(() => {\n    fastify.inject({ url: '/res-decorated-get-set' }, (err, res) => {\n      t.error(err)\n      t.same(JSON.parse(res.payload), { test: 'a getter' })\n    })\n\n    fastify.inject({ url: '/not-decorated' }, (err, res) => {\n      t.error(err)\n      t.pass()\n    })\n  })\n})\n\ntest('should register empty values', t => {\n  t.plan(2)\n  const fastify = Fastify()\n\n  fastify.register((instance, opts, done) => {\n    instance.decorate('test', null)\n    t.ok(Object.prototype.hasOwnProperty.call(instance, 'test'))\n    done()\n  })\n\n  fastify.ready(() => {\n    t.notOk(fastify.test)\n  })\n})\n\ntest('nested plugins can override things', t => {\n  t.plan(6)\n  const fastify = Fastify()\n\n  const rootFunc = () => {}\n  fastify.decorate('test', rootFunc)\n  fastify.decorateRequest('test', rootFunc)\n  fastify.decorateReply('test', rootFunc)\n\n  fastify.register((instance, opts, done) => {\n    const func = () => {}\n    instance.decorate('test', func)\n    instance.decorateRequest('test', func)\n    instance.decorateReply('test', func)\n\n    t.equal(instance.test, func)\n    t.equal(instance[symbols.kRequest].prototype.test, func)\n    t.equal(instance[symbols.kReply].prototype.test, func)\n    done()\n  })\n\n  fastify.ready(() => {\n    t.equal(fastify.test, rootFunc)\n    t.equal(fastify[symbols.kRequest].prototype.test, rootFunc)\n    t.equal(fastify[symbols.kReply].prototype.test, rootFunc)\n  })\n})\n\ntest('a decorator should addSchema to all the encapsulated tree', t => {\n  t.plan(1)\n  const fastify = Fastify()\n\n  const decorator = function (instance, opts, done) {\n    instance.decorate('decoratorAddSchema', function (whereAddTheSchema) {\n      instance.addSchema({\n        $id: 'schema',\n        type: 'string'\n      })\n    })\n    done()\n  }\n\n  fastify.register(fp(decorator))\n\n  fastify.register(function (instance, opts, done) {\n    instance.register((subInstance, opts, done) => {\n      subInstance.decoratorAddSchema()\n      done()\n    })\n    done()\n  })\n\n  fastify.ready(t.error)\n})\n\ntest('after can access to a decorated instance and previous plugin decoration', t => {\n  t.plan(11)\n  const TEST_VALUE = {}\n  const OTHER_TEST_VALUE = {}\n  const NEW_TEST_VALUE = {}\n\n  const fastify = Fastify()\n\n  fastify.register(fp(function (instance, options, done) {\n    instance.decorate('test', TEST_VALUE)\n\n    done()\n  })).after(function (err, instance, done) {\n    t.error(err)\n    t.equal(instance.test, TEST_VALUE)\n\n    instance.decorate('test2', OTHER_TEST_VALUE)\n    done()\n  })\n\n  fastify.register(fp(function (instance, options, done) {\n    t.equal(instance.test, TEST_VALUE)\n    t.equal(instance.test2, OTHER_TEST_VALUE)\n\n    instance.decorate('test3', NEW_TEST_VALUE)\n\n    done()\n  })).after(function (err, instance, done) {\n    t.error(err)\n    t.equal(instance.test, TEST_VALUE)\n    t.equal(instance.test2, OTHER_TEST_VALUE)\n    t.equal(instance.test3, NEW_TEST_VALUE)\n\n    done()\n  })\n\n  fastify.get('/', function (req, res) {\n    t.equal(this.test, TEST_VALUE)\n    t.equal(this.test2, OTHER_TEST_VALUE)\n    res.send({})\n  })\n\n  fastify.inject('/')\n    .then(response => {\n      t.equal(response.statusCode, 200)\n    })\n})\n\ntest('decorate* should throw if called after ready', async t => {\n  t.plan(6)\n  const fastify = Fastify()\n\n  fastify.get('/', (request, reply) => {\n    reply.send({\n      hello: 'world'\n    })\n  })\n\n  await fastify.listen({ port: 0 })\n  try {\n    fastify.decorate('test', true)\n    t.fail('should not decorate')\n  } catch (err) {\n    t.same(err.code, 'FST_ERR_DEC_AFTER_START')\n    t.same(err.message, \"The decorator 'test' has been added after start!\")\n  }\n  try {\n    fastify.decorateRequest('test', true)\n    t.fail('should not decorate')\n  } catch (e) {\n    t.same(e.code, 'FST_ERR_DEC_AFTER_START')\n    t.same(e.message, \"The decorator 'test' has been added after start!\")\n  }\n  try {\n    fastify.decorateReply('test', true)\n    t.fail('should not decorate')\n  } catch (e) {\n    t.same(e.code, 'FST_ERR_DEC_AFTER_START')\n    t.same(e.message, \"The decorator 'test' has been added after start!\")\n  }\n  await fastify.close()\n})\n\ntest('decorate* should emit warning if an array is passed', t => {\n  t.plan(2)\n  function onWarning (code, name) {\n    t.equal(name, 'test_array')\n    t.equal(code, 'FSTDEP006')\n  }\n  const warning = {\n    emit: onWarning\n  }\n\n  const decorate = proxyquire('../lib/decorate', { './warnings': warning })\n  const fastify = proxyquire('..', { './lib/decorate.js': decorate })()\n  fastify.decorateRequest('test_array', [])\n})\n\ntest('decorate* should emit warning if object type is passed', t => {\n  t.plan(2)\n  function onWarning (code, name) {\n    t.equal(name, 'test_object')\n    t.equal(code, 'FSTDEP006')\n  }\n  const warning = {\n    emit: onWarning\n  }\n\n  const decorate = proxyquire('../lib/decorate', { './warnings': warning })\n  const fastify = proxyquire('..', { './lib/decorate.js': decorate })()\n  fastify.decorateRequest('test_object', { foo: 'bar' })\n})\n\ntest('decorate* should not emit warning if object with getter/setter is passed', t => {\n  function onWarning (warning) {\n    t.fail('Should not call a warn')\n  }\n  const warning = {\n    emit: onWarning\n  }\n  const decorate = proxyquire('../lib/decorate', { './warnings': warning })\n  const fastify = proxyquire('..', { './lib/decorate.js': decorate })()\n\n  fastify.decorateRequest('test_getter_setter', {\n    setter (val) {\n      this._ = val\n    },\n    getter () {\n      return 'a getter'\n    }\n  })\n  t.end('Done')\n})\n\ntest('decorate* should not emit warning if string,bool,numbers are passed', t => {\n  function onWarning (warning) {\n    t.fail('Should not call a warn')\n  }\n  const warning = {\n    emit: onWarning\n  }\n\n  const decorate = proxyquire('../lib/decorate', { './warnings': warning })\n  const fastify = proxyquire('..', { './lib/decorate.js': decorate })()\n\n  fastify.decorateRequest('test_str', 'foo')\n  fastify.decorateRequest('test_bool', true)\n  fastify.decorateRequest('test_number', 42)\n  fastify.decorateRequest('test_null', null)\n  fastify.decorateRequest('test_undefined', undefined)\n  fastify.decorateReply('test_str', 'foo')\n  fastify.decorateReply('test_bool', true)\n  fastify.decorateReply('test_number', 42)\n  fastify.decorateReply('test_null', null)\n  fastify.decorateReply('test_undefined', undefined)\n  t.end('Done')\n})\n\ntest('Request/reply decorators should be able to access the server instance', async t => {\n  t.plan(6)\n\n  const server = require('..')({ logger: false })\n  server.decorateRequest('assert', rootAssert)\n  server.decorateReply('assert', rootAssert)\n\n  server.get('/root-assert', async (req, rep) => {\n    req.assert()\n    rep.assert()\n    return 'done'\n  })\n\n  server.register(async instance => {\n    instance.decorateRequest('assert', nestedAssert)\n    instance.decorateReply('assert', nestedAssert)\n    instance.decorate('foo', 'bar')\n\n    instance.get('/nested-assert', async (req, rep) => {\n      req.assert()\n      rep.assert()\n      return 'done'\n    })\n  })\n\n  await server.inject({ method: 'GET', url: '/root-assert' })\n  await server.inject({ method: 'GET', url: '/nested-assert' })\n\n  // ----\n  function rootAssert () {\n    t.equal(this.server, server)\n  }\n\n  function nestedAssert () {\n    t.not(this.server, server)\n    t.equal(this.server.foo, 'bar')\n  }\n})\n\ntest('plugin required decorators', async t => {\n  const plugin1 = fp(\n    async (instance) => {\n      instance.decorateRequest('someThing', null)\n\n      instance.addHook('onRequest', async (request, reply) => {\n        request.someThing = 'hello'\n      })\n    },\n    {\n      name: 'custom-plugin-one'\n    }\n  )\n\n  const plugin2 = fp(\n    async () => {\n      // nothing\n    },\n    {\n      name: 'custom-plugin-two',\n      dependencies: ['custom-plugin-one'],\n      decorators: {\n        request: ['someThing']\n      }\n    }\n  )\n\n  const app = Fastify()\n  app.register(plugin1)\n  app.register(plugin2)\n  await app.ready()\n})\n\ntest('decorateRequest/decorateReply empty string', t => {\n  t.plan(7)\n  const fastify = Fastify()\n\n  fastify.decorateRequest('test', '')\n  fastify.decorateReply('test2', '')\n  fastify.get('/yes', (req, reply) => {\n    t.equal(req.test, '')\n    t.equal(reply.test2, '')\n    reply.send({ hello: 'world' })\n  })\n  t.teardown(fastify.close.bind(fastify))\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port + '/yes'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(response.headers['content-length'], '' + body.length)\n      t.same(JSON.parse(body), { hello: 'world' })\n    })\n  })\n})\n\ntest('decorateRequest/decorateReply is undefined', t => {\n  t.plan(7)\n  const fastify = Fastify()\n\n  fastify.decorateRequest('test', undefined)\n  fastify.decorateReply('test2', undefined)\n  fastify.get('/yes', (req, reply) => {\n    t.equal(req.test, undefined)\n    t.equal(reply.test2, undefined)\n    reply.send({ hello: 'world' })\n  })\n  t.teardown(fastify.close.bind(fastify))\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port + '/yes'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(response.headers['content-length'], '' + body.length)\n      t.same(JSON.parse(body), { hello: 'world' })\n    })\n  })\n})\n\ntest('decorateRequest/decorateReply is not set to a value', t => {\n  t.plan(7)\n  const fastify = Fastify()\n\n  fastify.decorateRequest('test')\n  fastify.decorateReply('test2')\n  fastify.get('/yes', (req, reply) => {\n    t.equal(req.test, undefined)\n    t.equal(reply.test2, undefined)\n    reply.send({ hello: 'world' })\n  })\n  t.teardown(fastify.close.bind(fastify))\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port + '/yes'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(response.headers['content-length'], '' + body.length)\n      t.same(JSON.parse(body), { hello: 'world' })\n    })\n  })\n})\n\ntest('decorateRequest with dependencies', (t) => {\n  t.plan(2)\n  const app = Fastify()\n\n  const decorator1 = 'bar'\n  const decorator2 = 'foo'\n\n  app.decorate('decorator1', decorator1)\n  app.decorateRequest('decorator1', decorator1)\n\n  if (\n    app.hasDecorator('decorator1') &&\n    app.hasRequestDecorator('decorator1')\n  ) {\n    t.doesNotThrow(() => app.decorateRequest('decorator2', decorator2, ['decorator1']))\n    t.ok(app.hasRequestDecorator('decorator2'))\n  }\n})\n\ntest('decorateRequest with dependencies (functions)', (t) => {\n  t.plan(2)\n  const app = Fastify()\n\n  const decorator1 = () => 'bar'\n  const decorator2 = () => 'foo'\n\n  app.decorate('decorator1', decorator1)\n  app.decorateRequest('decorator1', decorator1)\n\n  if (\n    app.hasDecorator('decorator1') &&\n    app.hasRequestDecorator('decorator1')\n  ) {\n    t.doesNotThrow(() => app.decorateRequest('decorator2', decorator2, ['decorator1']))\n    t.ok(app.hasRequestDecorator('decorator2'))\n  }\n})\n\ntest('chain of decorators on Request', async (t) => {\n  const fastify = Fastify()\n  fastify.register(fp(async function (fastify) {\n    fastify.decorateRequest('foo', 'toto')\n    fastify.decorateRequest('bar', () => 'tata')\n  }, {\n    name: 'first'\n  }))\n\n  fastify.get('/foo', async function (request, reply) {\n    return request.foo\n  })\n  fastify.get('/bar', function (request, reply) {\n    return request.bar()\n  })\n  fastify.register(async function second (fastify) {\n    fastify.get('/foo', async function (request, reply) {\n      return request.foo\n    })\n    fastify.get('/bar', async function (request, reply) {\n      return request.bar()\n    })\n    fastify.register(async function fourth (fastify) {\n      fastify.get('/plugin3/foo', async function (request, reply) {\n        return request.foo\n      })\n      fastify.get('/plugin3/bar', function (request, reply) {\n        return request.bar()\n      })\n    })\n    fastify.register(fp(async function (fastify) {\n      fastify.decorateRequest('fooB', 'toto')\n      fastify.decorateRequest('barB', () => 'tata')\n    }, {\n      name: 'third'\n    }))\n  },\n  { prefix: '/plugin2', name: 'plugin2' }\n  )\n\n  await fastify.ready()\n\n  {\n    const response = await fastify.inject('/foo')\n    t.equal(response.body, 'toto')\n  }\n\n  {\n    const response = await fastify.inject('/bar')\n    t.equal(response.body, 'tata')\n  }\n\n  {\n    const response = await fastify.inject('/plugin2/foo')\n    t.equal(response.body, 'toto')\n  }\n\n  {\n    const response = await fastify.inject('/plugin2/bar')\n    t.equal(response.body, 'tata')\n  }\n\n  {\n    const response = await fastify.inject('/plugin2/plugin3/foo')\n    t.equal(response.body, 'toto')\n  }\n\n  {\n    const response = await fastify.inject('/plugin2/plugin3/bar')\n    t.equal(response.body, 'tata')\n  }\n})\n\ntest('chain of decorators on Reply', async (t) => {\n  const fastify = Fastify()\n  fastify.register(fp(async function (fastify) {\n    fastify.decorateReply('foo', 'toto')\n    fastify.decorateReply('bar', () => 'tata')\n  }, {\n    name: 'first'\n  }))\n\n  fastify.get('/foo', async function (request, reply) {\n    return reply.foo\n  })\n  fastify.get('/bar', function (request, reply) {\n    return reply.bar()\n  })\n  fastify.register(async function second (fastify) {\n    fastify.get('/foo', async function (request, reply) {\n      return reply.foo\n    })\n    fastify.get('/bar', async function (request, reply) {\n      return reply.bar()\n    })\n    fastify.register(async function fourth (fastify) {\n      fastify.get('/plugin3/foo', async function (request, reply) {\n        return reply.foo\n      })\n      fastify.get('/plugin3/bar', function (request, reply) {\n        return reply.bar()\n      })\n    })\n    fastify.register(fp(async function (fastify) {\n      fastify.decorateReply('fooB', 'toto')\n      fastify.decorateReply('barB', () => 'tata')\n    }, {\n      name: 'third'\n    }))\n  },\n  { prefix: '/plugin2', name: 'plugin2' }\n  )\n\n  await fastify.ready()\n\n  {\n    const response = await fastify.inject('/foo')\n    t.equal(response.body, 'toto')\n  }\n\n  {\n    const response = await fastify.inject('/bar')\n    t.equal(response.body, 'tata')\n  }\n\n  {\n    const response = await fastify.inject('/plugin2/foo')\n    t.equal(response.body, 'toto')\n  }\n\n  {\n    const response = await fastify.inject('/plugin2/bar')\n    t.equal(response.body, 'tata')\n  }\n\n  {\n    const response = await fastify.inject('/plugin2/plugin3/foo')\n    t.equal(response.body, 'toto')\n  }\n\n  {\n    const response = await fastify.inject('/plugin2/plugin3/bar')\n    t.equal(response.body, 'tata')\n  }\n})\n\"/test/schema-special-usage.test.js?B'use strict'\n\nconst { test } = require('tap')\nconst Joi = require('joi')\nconst yup = require('yup')\nconst AJV = require('ajv')\nconst S = require('fluent-json-schema')\nconst Fastify = require('..')\nconst ajvMergePatch = require('ajv-merge-patch')\nconst ajvErrors = require('ajv-errors')\n\ntest('Ajv plugins array parameter', t => {\n  t.plan(3)\n  const fastify = Fastify({\n    ajv: {\n      customOptions: {\n        allErrors: true\n      },\n      plugins: [\n        [ajvErrors, { singleError: '@@@@' }]\n      ]\n    }\n  })\n\n  fastify.post('/', {\n    schema: {\n      body: {\n        type: 'object',\n        properties: {\n          foo: {\n            type: 'number',\n            minimum: 2,\n            maximum: 10,\n            multipleOf: 2,\n            errorMessage: {\n              type: 'should be number',\n              minimum: 'should be >= 2',\n              maximum: 'should be <= 10',\n              multipleOf: 'should be multipleOf 2'\n            }\n          }\n        }\n      }\n    },\n    handler (req, reply) { reply.send({ ok: 1 }) }\n  })\n\n  fastify.inject({\n    method: 'POST',\n    url: '/',\n    payload: { foo: 99 }\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 400)\n    t.equal(res.json().message, 'body/foo should be <= 10@@@@should be multipleOf 2')\n  })\n})\n\ntest('Should handle root $merge keywords in header', t => {\n  t.plan(5)\n  const fastify = Fastify({\n    ajv: {\n      plugins: [\n        ajvMergePatch\n      ]\n    }\n  })\n\n  fastify.route({\n    method: 'GET',\n    url: '/',\n    schema: {\n      headers: {\n        $merge: {\n          source: {\n            type: 'object',\n            properties: {\n              q: { type: 'string' }\n            }\n          },\n          with: { required: ['q'] }\n        }\n      }\n    },\n    handler (req, reply) { reply.send({ ok: 1 }) }\n  })\n\n  fastify.ready(err => {\n    t.error(err)\n\n    fastify.inject({\n      method: 'GET',\n      url: '/'\n    }, (err, res) => {\n      t.error(err)\n      t.equal(res.statusCode, 400)\n    })\n\n    fastify.inject({\n      method: 'GET',\n      url: '/',\n      headers: { q: 'foo' }\n    }, (err, res) => {\n      t.error(err)\n      t.equal(res.statusCode, 200)\n    })\n  })\n})\n\ntest('Should handle root $patch keywords in header', t => {\n  t.plan(5)\n  const fastify = Fastify({\n    ajv: {\n      plugins: [\n        ajvMergePatch\n      ]\n    }\n  })\n\n  fastify.route({\n    method: 'GET',\n    url: '/',\n    schema: {\n      headers: {\n        $patch: {\n          source: {\n            type: 'object',\n            properties: {\n              q: { type: 'string' }\n            }\n          },\n          with: [\n            {\n              op: 'add',\n              path: '/properties/q',\n              value: { type: 'number' }\n            }\n          ]\n        }\n      }\n    },\n    handler (req, reply) { reply.send({ ok: 1 }) }\n  })\n\n  fastify.ready(err => {\n    t.error(err)\n\n    fastify.inject({\n      method: 'GET',\n      url: '/',\n      headers: {\n        q: 'foo'\n      }\n    }, (err, res) => {\n      t.error(err)\n      t.equal(res.statusCode, 400)\n    })\n\n    fastify.inject({\n      method: 'GET',\n      url: '/',\n      headers: { q: 10 }\n    }, (err, res) => {\n      t.error(err)\n      t.equal(res.statusCode, 200)\n    })\n  })\n})\n\ntest('Should handle $merge keywords in body', t => {\n  t.plan(5)\n  const fastify = Fastify({\n    ajv: {\n      plugins: [ajvMergePatch]\n    }\n  })\n\n  fastify.post('/', {\n    schema: {\n      body: {\n        $merge: {\n          source: {\n            type: 'object',\n            properties: {\n              q: {\n                type: 'string'\n              }\n            }\n          },\n          with: {\n            required: ['q']\n          }\n        }\n      }\n    },\n    handler (req, reply) { reply.send({ ok: 1 }) }\n  })\n\n  fastify.ready(err => {\n    t.error(err)\n\n    fastify.inject({\n      method: 'POST',\n      url: '/'\n    }, (err, res) => {\n      t.error(err)\n      t.equal(res.statusCode, 400)\n    })\n\n    fastify.inject({\n      method: 'POST',\n      url: '/',\n      payload: { q: 'foo' }\n    }, (err, res) => {\n      t.error(err)\n      t.equal(res.statusCode, 200)\n    })\n  })\n})\n\ntest('Should handle $patch keywords in body', t => {\n  t.plan(5)\n  const fastify = Fastify({\n    ajv: {\n      plugins: [ajvMergePatch]\n    }\n  })\n\n  fastify.post('/', {\n    schema: {\n      body: {\n        $patch: {\n          source: {\n            type: 'object',\n            properties: {\n              q: {\n                type: 'string'\n              }\n            }\n          },\n          with: [\n            {\n              op: 'add',\n              path: '/properties/q',\n              value: { type: 'number' }\n            }\n          ]\n        }\n      }\n    },\n    handler (req, reply) { reply.send({ ok: 1 }) }\n  })\n\n  fastify.ready(err => {\n    t.error(err)\n\n    fastify.inject({\n      method: 'POST',\n      url: '/',\n      payload: { q: 'foo' }\n    }, (err, res) => {\n      t.error(err)\n      t.equal(res.statusCode, 400)\n    })\n\n    fastify.inject({\n      method: 'POST',\n      url: '/',\n      payload: { q: 10 }\n    }, (err, res) => {\n      t.error(err)\n      t.equal(res.statusCode, 200)\n    })\n  })\n})\n\ntest(\"serializer read validator's schemas\", t => {\n  t.plan(4)\n  const ajvInstance = new AJV()\n\n  const baseSchema = {\n    $id: 'http://example.com/schemas/base',\n    definitions: {\n      hello: { type: 'string' }\n    },\n    type: 'object',\n    properties: {\n      hello: { $ref: '#/definitions/hello' }\n    }\n  }\n\n  const refSchema = {\n    $id: 'http://example.com/schemas/ref',\n    type: 'object',\n    properties: {\n      hello: { $ref: 'http://example.com/schemas/base#/definitions/hello' }\n    }\n  }\n\n  ajvInstance.addSchema(baseSchema)\n  ajvInstance.addSchema(refSchema)\n\n  const fastify = Fastify({\n    schemaController: {\n      bucket: function factory (storeInit) {\n        t.notOk(storeInit, 'is always empty because fastify.addSchema is not called')\n        return {\n          getSchemas () {\n            return {\n              [baseSchema.$id]: ajvInstance.getSchema(baseSchema.$id).schema,\n              [refSchema.$id]: ajvInstance.getSchema(refSchema.$id).schema\n            }\n          }\n        }\n      }\n    }\n  })\n\n  fastify.setValidatorCompiler(function ({ schema }) {\n    return ajvInstance.compile(schema)\n  })\n\n  fastify.get('/', {\n    schema: {\n      response: {\n        '2xx': ajvInstance.getSchema('http://example.com/schemas/ref').schema\n      }\n    },\n    handler (req, res) { res.send({ hello: 'world', evict: 'this' }) }\n  })\n\n  fastify.inject('/', (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 200)\n    t.same(res.json(), { hello: 'world' })\n  })\n})\n\ntest('setSchemaController in a plugin', t => {\n  t.plan(5)\n  const baseSchema = {\n    $id: 'urn:schema:base',\n    definitions: {\n      hello: { type: 'string' }\n    },\n    type: 'object',\n    properties: {\n      hello: { $ref: '#/definitions/hello' }\n    }\n  }\n\n  const refSchema = {\n    $id: 'urn:schema:ref',\n    type: 'object',\n    properties: {\n      hello: { $ref: 'urn:schema:base#/definitions/hello' }\n    }\n  }\n\n  const ajvInstance = new AJV()\n  ajvInstance.addSchema(baseSchema)\n  ajvInstance.addSchema(refSchema)\n\n  const fastify = Fastify({ exposeHeadRoutes: false })\n  fastify.register(schemaPlugin)\n  fastify.get('/', {\n    schema: {\n      query: ajvInstance.getSchema('urn:schema:ref').schema,\n      response: {\n        '2xx': ajvInstance.getSchema('urn:schema:ref').schema\n      }\n    },\n    handler (req, res) {\n      res.send({ hello: 'world', evict: 'this' })\n    }\n  })\n\n  fastify.inject('/', (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 200)\n    t.same(res.json(), { hello: 'world' })\n  })\n\n  async function schemaPlugin (server) {\n    server.setSchemaController({\n      bucket () {\n        t.pass('the bucket is created')\n        return {\n          addSchema (source) {\n            ajvInstance.addSchema(source)\n          },\n          getSchema (id) {\n            return ajvInstance.getSchema(id).schema\n          },\n          getSchemas () {\n            return {\n              'urn:schema:base': baseSchema,\n              'urn:schema:ref': refSchema\n            }\n          }\n        }\n      }\n    })\n    server.setValidatorCompiler(function ({ schema }) {\n      t.pass('the querystring schema is compiled')\n      return ajvInstance.compile(schema)\n    })\n  }\n  schemaPlugin[Symbol.for('skip-override')] = true\n})\n\ntest('side effect on schema let the server crash', async t => {\n  const firstSchema = {\n    $id: 'example1',\n    type: 'object',\n    properties: {\n      name: {\n        type: 'string'\n      }\n    }\n  }\n\n  const reusedSchema = {\n    $id: 'example2',\n    type: 'object',\n    properties: {\n      name: {\n        oneOf: [\n          {\n            $ref: 'example1'\n          }\n        ]\n      }\n    }\n  }\n\n  const fastify = Fastify()\n  fastify.addSchema(firstSchema)\n\n  fastify.post('/a', {\n    handler: async () => 'OK',\n    schema: {\n      body: reusedSchema,\n      response: { 200: reusedSchema }\n    }\n  })\n  fastify.post('/b', {\n    handler: async () => 'OK',\n    schema: {\n      body: reusedSchema,\n      response: { 200: reusedSchema }\n    }\n  })\n\n  await fastify.ready()\n})\n\ntest('only response schema trigger AJV pollution', async t => {\n  const ShowSchema = S.object().id('ShowSchema').prop('name', S.string())\n  const ListSchema = S.array().id('ListSchema').items(S.ref('ShowSchema#'))\n\n  const fastify = Fastify()\n  fastify.addSchema(ListSchema)\n  fastify.addSchema(ShowSchema)\n\n  const routeResponseSchemas = {\n    schema: { response: { 200: S.ref('ListSchema#') } }\n  }\n\n  fastify.register(\n    async (app) => { app.get('/resource/', routeResponseSchemas, () => ({})) },\n    { prefix: '/prefix1' }\n  )\n  fastify.register(\n    async (app) => { app.get('/resource/', routeResponseSchemas, () => ({})) },\n    { prefix: '/prefix2' }\n  )\n\n  await fastify.ready()\n})\n\ntest('only response schema trigger AJV pollution #2', async t => {\n  const ShowSchema = S.object().id('ShowSchema').prop('name', S.string())\n  const ListSchema = S.array().id('ListSchema').items(S.ref('ShowSchema#'))\n\n  const fastify = Fastify()\n  fastify.addSchema(ListSchema)\n  fastify.addSchema(ShowSchema)\n\n  const routeResponseSchemas = {\n    schema: {\n      params: S.ref('ListSchema#'),\n      response: { 200: S.ref('ListSchema#') }\n    }\n  }\n\n  fastify.register(\n    async (app) => { app.get('/resource/', routeResponseSchemas, () => ({})) },\n    { prefix: '/prefix1' }\n  )\n  fastify.register(\n    async (app) => { app.get('/resource/', routeResponseSchemas, () => ({})) },\n    { prefix: '/prefix2' }\n  )\n\n  await fastify.ready()\n})\n\ntest('setSchemaController in a plugin with head routes', t => {\n  t.plan(6)\n  const baseSchema = {\n    $id: 'urn:schema:base',\n    definitions: {\n      hello: { type: 'string' }\n    },\n    type: 'object',\n    properties: {\n      hello: { $ref: '#/definitions/hello' }\n    }\n  }\n\n  const refSchema = {\n    $id: 'urn:schema:ref',\n    type: 'object',\n    properties: {\n      hello: { $ref: 'urn:schema:base#/definitions/hello' }\n    }\n  }\n\n  const ajvInstance = new AJV()\n  ajvInstance.addSchema(baseSchema)\n  ajvInstance.addSchema(refSchema)\n\n  const fastify = Fastify({ exposeHeadRoutes: true })\n  fastify.register(schemaPlugin)\n  fastify.get('/', {\n    schema: {\n      query: ajvInstance.getSchema('urn:schema:ref').schema,\n      response: {\n        '2xx': ajvInstance.getSchema('urn:schema:ref').schema\n      }\n    },\n    handler (req, res) {\n      res.send({ hello: 'world', evict: 'this' })\n    }\n  })\n\n  fastify.inject('/', (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 200)\n    t.same(res.json(), { hello: 'world' })\n  })\n\n  async function schemaPlugin (server) {\n    server.setSchemaController({\n      bucket () {\n        t.pass('the bucket is created')\n        return {\n          addSchema (source) {\n            ajvInstance.addSchema(source)\n          },\n          getSchema (id) {\n            return ajvInstance.getSchema(id).schema\n          },\n          getSchemas () {\n            return {\n              'urn:schema:base': baseSchema,\n              'urn:schema:ref': refSchema\n            }\n          }\n        }\n      }\n    })\n    server.setValidatorCompiler(function ({ schema }) {\n      if (schema.$id) {\n        const stored = ajvInstance.getSchema(schema.$id)\n        if (stored) {\n          t.pass('the schema is reused')\n          return stored\n        }\n      }\n      t.pass('the schema is compiled')\n\n      return ajvInstance.compile(schema)\n    })\n  }\n  schemaPlugin[Symbol.for('skip-override')] = true\n})\n\ntest('multiple refs with the same ids', t => {\n  t.plan(3)\n  const baseSchema = {\n    $id: 'urn:schema:base',\n    definitions: {\n      hello: { type: 'string' }\n    },\n    type: 'object',\n    properties: {\n      hello: { $ref: '#/definitions/hello' }\n    }\n  }\n\n  const refSchema = {\n    $id: 'urn:schema:ref',\n    type: 'object',\n    properties: {\n      hello: { $ref: 'urn:schema:base#/definitions/hello' }\n    }\n  }\n\n  const fastify = Fastify()\n\n  fastify.addSchema(baseSchema)\n  fastify.addSchema(refSchema)\n\n  fastify.head('/', {\n    schema: {\n      query: refSchema,\n      response: {\n        '2xx': refSchema\n      }\n    },\n    handler (req, res) {\n      res.send({ hello: 'world', evict: 'this' })\n    }\n  })\n\n  fastify.get('/', {\n    schema: {\n      query: refSchema,\n      response: {\n        '2xx': refSchema\n      }\n    },\n    handler (req, res) {\n      res.send({ hello: 'world', evict: 'this' })\n    }\n  })\n\n  fastify.inject('/', (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 200)\n    t.same(res.json(), { hello: 'world' })\n  })\n})\n\ntest('JOI validation overwrite request headers', t => {\n  t.plan(3)\n  const schemaValidator = ({ schema }) => data => {\n    const validationResult = schema.validate(data)\n    return validationResult\n  }\n\n  const fastify = Fastify()\n  fastify.setValidatorCompiler(schemaValidator)\n\n  fastify.get('/', {\n    schema: {\n      headers: Joi.object({\n        'user-agent': Joi.string().required(),\n        host: Joi.string().required()\n      })\n    }\n  }, (request, reply) => {\n    reply.send(request.headers)\n  })\n\n  fastify.inject('/', (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 200)\n    t.same(res.json(), {\n      'user-agent': 'lightMyRequest',\n      host: 'localhost:80'\n    })\n  })\n})\n\ntest('Custom schema object should not trigger FST_ERR_SCH_DUPLICATE', async t => {\n  const fastify = Fastify()\n  const handler = () => { }\n\n  fastify.get('/the/url', {\n    schema: {\n      query: yup.object({\n        foo: yup.string()\n      })\n    },\n    validatorCompiler: ({ schema, method, url, httpPart }) => {\n      return function (data) {\n        // with option strict = false, yup `validateSync` function returns the coerced value if validation was successful, or throws if validation failed\n        try {\n          const result = schema.validateSync(data, {})\n          return { value: result }\n        } catch (e) {\n          return { error: e }\n        }\n      }\n    },\n    handler\n  })\n\n  await fastify.ready()\n  t.pass('fastify is ready')\n})\n\ntest('The default schema compilers should not be called when overwritte by the user', async t => {\n  const Fastify = t.mock('../', {\n    '@fastify/ajv-compiler': () => {\n      t.fail('The default validator compiler should not be called')\n    },\n    '@fastify/fast-json-stringify-compiler': () => {\n      t.fail('The default serializer compiler should not be called')\n    }\n  })\n\n  const fastify = Fastify({\n    schemaController: {\n      compilersFactory: {\n        buildValidator: function factory () {\n          t.pass('The custom validator compiler should be called')\n          return function validatorCompiler () {\n            return () => { return true }\n          }\n        },\n        buildSerializer: function factory () {\n          t.pass('The custom serializer compiler should be called')\n          return function serializerCompiler () {\n            return () => { return true }\n          }\n        }\n      }\n    }\n  })\n\n  fastify.get('/',\n    {\n      schema: {\n        query: { foo: { type: 'string' } },\n        response: {\n          200: { type: 'object' }\n        }\n      }\n    }, () => {})\n\n  await fastify.ready()\n})\n/lib/initialConfigValidation.js\u0003'use strict'\n\nconst validate = require('./configValidator')\nconst deepClone = require('rfdc')({ circles: true, proto: false })\nconst { FST_ERR_INIT_OPTS_INVALID } = require('./errors')\n\nfunction validateInitialConfig (options) {\n  const opts = deepClone(options)\n\n  if (!validate(opts)) {\n    const error = new FST_ERR_INIT_OPTS_INVALID(JSON.stringify(validate.errors.map(e => e.message)))\n    error.errors = validate.errors\n    throw error\n  }\n\n  return deepFreezeObject(opts)\n}\n\nfunction deepFreezeObject (object) {\n  const properties = Object.getOwnPropertyNames(object)\n\n  for (const name of properties) {\n    const value = object[name]\n\n    if (ArrayBuffer.isView(value) && !(value instanceof DataView)) {\n      continue\n    }\n\n    object[name] = value && typeof value === 'object' ? deepFreezeObject(value) : value\n  }\n\n  return Object.freeze(object)\n}\n\nmodule.exports = validateInitialConfig\nmodule.exports.defaultInitOptions = validate.defaultInitOptions\nmodule.exports.utils = { deepFreezeObject }\n/test/http2/constraint.test.js\b'use strict'\n\nconst t = require('tap')\nconst test = t.test\nconst Fastify = require('../..')\nconst h2url = require('h2url')\n\nconst alpha = { res: 'alpha' }\nconst beta = { res: 'beta' }\n\nconst { buildCertificate } = require('../build-certificate')\nt.before(buildCertificate)\n\ntest('A route supports host constraints under http2 protocol and secure connection', (t) => {\n  t.plan(5)\n\n  let fastify\n  try {\n    fastify = Fastify({\n      http2: true,\n      https: {\n        key: global.context.key,\n        cert: global.context.cert\n      }\n    })\n    t.pass('Key/cert successfully loaded')\n  } catch (e) {\n    t.fail('Key/cert loading failed', e)\n  }\n\n  const constrain = 'fastify.io'\n\n  fastify.route({\n    method: 'GET',\n    url: '/',\n    handler: function (_, reply) {\n      reply.code(200).send(alpha)\n    }\n  })\n  fastify.route({\n    method: 'GET',\n    url: '/beta',\n    constraints: { host: constrain },\n    handler: function (_, reply) {\n      reply.code(200).send(beta)\n    }\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    t.test('https get request - no constrain', async (t) => {\n      t.plan(3)\n\n      const url = `https://localhost:${fastify.server.address().port}`\n      const res = await h2url.concat({ url })\n\n      t.equal(res.headers[':status'], 200)\n      t.equal(res.headers['content-length'], '' + JSON.stringify(alpha).length)\n      t.same(JSON.parse(res.body), alpha)\n    })\n\n    t.test('https get request - constrain', async (t) => {\n      t.plan(3)\n\n      const url = `https://localhost:${fastify.server.address().port}/beta`\n      const res = await h2url.concat({\n        url,\n        headers: {\n          ':authority': constrain\n        }\n      })\n\n      t.equal(res.headers[':status'], 200)\n      t.equal(res.headers['content-length'], '' + JSON.stringify(beta).length)\n      t.same(JSON.parse(res.body), beta)\n    })\n\n    t.test('https get request - constrain - not found', async (t) => {\n      t.plan(1)\n\n      const url = `https://localhost:${fastify.server.address().port}/beta`\n      const res = await h2url.concat({\n        url\n      })\n\n      t.equal(res.headers[':status'], 404)\n    })\n  })\n})\n\"/test/bundler/esbuild/src/index.jsĨconst fastify = require('../../../../')()\n// Declare a route\nfastify.get('/', function (request, reply) {\n  reply.send({ hello: 'world' })\n})\n\nmodule.exports = fastify\n2/examples/benchmark/hooks-benchmark-async-await.js\u0003\u0015'use strict'\n\nconst fastify = require('../../fastify')({ logger: false })\n\nconst opts = {\n  schema: {\n    response: {\n      200: {\n        type: 'object',\n        properties: {\n          hello: {\n            type: 'string'\n          }\n        }\n      }\n    }\n  }\n}\n\nfunction promiseFunction (resolve) {\n  setImmediate(resolve)\n}\n\nasync function asyncHook () {\n  await new Promise(promiseFunction)\n}\n\nfastify\n  .addHook('onRequest', asyncHook)\n  .addHook('onRequest', asyncHook)\n  .addHook('preHandler', asyncHook)\n  .addHook('preHandler', asyncHook)\n  .addHook('preHandler', asyncHook)\n  .addHook('onSend', asyncHook)\n\nfastify.get('/', opts, function (request, reply) {\n  reply.send({ hello: 'world' })\n})\n\nfastify.listen({ port: 3000 }, function (err) {\n  if (err) {\n    throw err\n  }\n})\n/.markdownlint-cli2.yaml\u0001k# See https://github.com/DavidAnson/markdownlint-cli2\nconfig:\n  # Disable all rules by default.\n  default: false\n\n  # Enforce line length.\n  MD013:\n    line_length: 80\n    code_block_line_length: 120\n    headers: false\n    tables: false\n    strict: false\n    stern: false\n\nglobs:\n  - '**/*.md'\n\nignores:\n  - 'node_modules/**'\n  - 'test/**/*.md'\n\nnoProgress: true\n/lib/pluginUtils.js\u0010a'use strict'\n\nconst semver = require('semver')\nconst assert = require('assert')\nconst registeredPlugins = Symbol.for('registered-plugin')\nconst {\n  kTestInternals\n} = require('./symbols.js')\nconst { exist, existReply, existRequest } = require('./decorate')\nconst {\n  FST_ERR_PLUGIN_VERSION_MISMATCH,\n  FST_ERR_PLUGIN_NOT_PRESENT_IN_INSTANCE\n} = require('./errors')\n\nfunction getMeta (fn) {\n  return fn[Symbol.for('plugin-meta')]\n}\n\nfunction getPluginName (func) {\n  const display = getDisplayName(func)\n  if (display) {\n    return display\n  }\n\n  // let's see if this is a file, and in that case use that\n  // this is common for plugins\n  const cache = require.cache\n  const keys = Object.keys(cache)\n\n  for (let i = 0; i < keys.length; i++) {\n    const key = keys[i]\n    if (cache[key].exports === func) {\n      return key\n    }\n  }\n\n  // if not maybe it's a named function, so use that\n  if (func.name) {\n    return func.name\n  }\n\n  return null\n}\n\nfunction getFuncPreview (func) {\n  // takes the first two lines of the function if nothing else works\n  return func.toString().split('\\n').slice(0, 2).map(s => s.trim()).join(' -- ')\n}\n\nfunction getDisplayName (fn) {\n  return fn[Symbol.for('fastify.display-name')]\n}\n\nfunction shouldSkipOverride (fn) {\n  return !!fn[Symbol.for('skip-override')]\n}\n\nfunction checkDependencies (fn) {\n  const meta = getMeta(fn)\n  if (!meta) return\n\n  const dependencies = meta.dependencies\n  if (!dependencies) return\n  assert(Array.isArray(dependencies), 'The dependencies should be an array of strings')\n\n  dependencies.forEach(dependency => {\n    assert(\n      this[registeredPlugins].indexOf(dependency) > -1,\n      `The dependency '${dependency}' of plugin '${meta.name}' is not registered`\n    )\n  })\n}\n\nfunction checkDecorators (fn) {\n  const meta = getMeta(fn)\n  if (!meta) return\n\n  const { decorators, name } = meta\n  if (!decorators) return\n\n  if (decorators.fastify) _checkDecorators(this, 'Fastify', decorators.fastify, name)\n  if (decorators.reply) _checkDecorators(this, 'Reply', decorators.reply, name)\n  if (decorators.request) _checkDecorators(this, 'Request', decorators.request, name)\n}\n\nconst checks = {\n  Fastify: exist,\n  Request: existRequest,\n  Reply: existReply\n}\n\nfunction _checkDecorators (that, instance, decorators, name) {\n  assert(Array.isArray(decorators), 'The decorators should be an array of strings')\n\n  decorators.forEach(decorator => {\n    const withPluginName = typeof name === 'string' ? ` required by '${name}'` : ''\n    if (!checks[instance].call(that, decorator)) {\n      throw new FST_ERR_PLUGIN_NOT_PRESENT_IN_INSTANCE(decorator, withPluginName, instance)\n    }\n  })\n}\n\nfunction checkVersion (fn) {\n  const meta = getMeta(fn)\n  if (!meta) return\n\n  const requiredVersion = meta.fastify\n\n  const fastifyRc = /-rc.+$/.test(this.version)\n  if (fastifyRc === true && semver.gt(this.version, semver.coerce(requiredVersion)) === true) {\n    // A Fastify release candidate phase is taking place. In order to reduce\n    // the effort needed to test plugins with the RC, we allow plugins targeting\n    // the prior Fastify release to be loaded.\n    return\n  }\n  if (requiredVersion && semver.satisfies(this.version, requiredVersion, { includePrerelease: fastifyRc }) === false) {\n    // We are not in a release candidate phase. Thus, we must honor the semver\n    // ranges defined by the plugin's metadata. Which is to say, if the plugin\n    // expects an older version of Fastify than the _current_ version, we will\n    // throw an error.\n    throw new FST_ERR_PLUGIN_VERSION_MISMATCH(meta.name, requiredVersion, this.version)\n  }\n}\n\nfunction registerPluginName (fn) {\n  const meta = getMeta(fn)\n  if (!meta) return\n\n  const name = meta.name\n  if (!name) return\n  this[registeredPlugins].push(name)\n}\n\nfunction registerPlugin (fn) {\n  registerPluginName.call(this, fn)\n  checkVersion.call(this, fn)\n  checkDecorators.call(this, fn)\n  checkDependencies.call(this, fn)\n  return shouldSkipOverride(fn)\n}\n\nmodule.exports = {\n  getPluginName,\n  getFuncPreview,\n  registeredPlugins,\n  getDisplayName,\n  registerPlugin\n}\n\nmodule.exports[kTestInternals] = {\n  shouldSkipOverride,\n  getMeta,\n  checkDecorators,\n  checkDependencies\n}\n/types/context.d.ts\u0001import { ContextConfigDefault } from './utils'\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface FastifyContextConfig {\n}\n\n/**\n * Route context object. Properties defined here will be available in the route's handler\n */\nexport interface FastifyContext<ContextConfig = ContextConfigDefault> {\n  /**\n   * @deprecated Use Request#routeConfig or Request#routeSchema instead\n   */\n  config: FastifyContextConfig & ContextConfig;\n}\n\"/test/schema-serialization.test.js`'use strict'\n\nconst t = require('tap')\nconst Fastify = require('..')\nconst test = t.test\n\nconst echoBody = (req, reply) => { reply.send(req.body) }\n\ntest('basic test', t => {\n  t.plan(3)\n\n  const fastify = Fastify()\n  fastify.get('/', {\n    schema: {\n      response: {\n        '2xx': {\n          type: 'object',\n          properties: {\n            name: { type: 'string' },\n            work: { type: 'string' }\n          }\n        }\n      }\n    }\n  }, function (req, reply) {\n    reply.code(200).send({ name: 'Foo', work: 'Bar', nick: 'Boo' })\n  })\n\n  fastify.inject('/', (err, res) => {\n    t.error(err)\n    t.same(res.json(), { name: 'Foo', work: 'Bar' })\n    t.equal(res.statusCode, 200)\n  })\n})\n\ntest('custom serializer options', t => {\n  t.plan(3)\n\n  const fastify = Fastify({\n    serializerOpts: {\n      rounding: 'ceil'\n    }\n  })\n  fastify.get('/', {\n    schema: {\n      response: {\n        '2xx': {\n          type: 'integer'\n        }\n      }\n    }\n  }, function (req, reply) {\n    reply.send(4.2)\n  })\n\n  fastify.inject('/', (err, res) => {\n    t.error(err)\n    t.equal(res.payload, '5', 'it must use the ceil rouding')\n    t.equal(res.statusCode, 200)\n  })\n})\n\ntest('Different content types', t => {\n  t.plan(32)\n\n  const fastify = Fastify()\n  fastify.addSchema({\n    $id: 'test',\n    type: 'object',\n    properties: {\n      name: { type: 'string' },\n      age: { type: 'number' },\n      verified: { type: 'boolean' }\n    }\n  })\n\n  fastify.get('/', {\n    schema: {\n      response: {\n        200: {\n          content: {\n            'application/json': {\n              schema: {\n                name: { type: 'string' },\n                image: { type: 'string' },\n                address: { type: 'string' }\n              }\n            },\n            'application/vnd.v1+json': {\n              schema: {\n                type: 'array',\n                items: { $ref: 'test' }\n              }\n            }\n          }\n        },\n        201: {\n          content: { type: 'string' }\n        },\n        202: {\n          content: { const: 'Processing exclusive content' }\n        },\n        '3xx': {\n          content: {\n            'application/vnd.v2+json': {\n              schema: {\n                fullName: { type: 'string' },\n                phone: { type: 'string' }\n              }\n            }\n          }\n        },\n        default: {\n          content: {\n            'application/json': {\n              schema: {\n                details: { type: 'string' }\n              }\n            }\n          }\n        }\n      }\n    }\n  }, function (req, reply) {\n    switch (req.headers.accept) {\n      case 'application/json':\n        reply.header('Content-Type', 'application/json')\n        reply.send({ id: 1, name: 'Foo', image: 'profile picture', address: 'New Node' })\n        break\n      case 'application/vnd.v1+json':\n        reply.header('Content-Type', 'application/vnd.v1+json')\n        reply.send([{ id: 2, name: 'Boo', age: 18, verified: false }, { id: 3, name: 'Woo', age: 30, verified: true }])\n        break\n      case 'application/vnd.v2+json':\n        reply.header('Content-Type', 'application/vnd.v2+json')\n        reply.code(300)\n        reply.send({ fullName: 'Jhon Smith', phone: '01090000000', authMethod: 'google' })\n        break\n      case 'application/vnd.v3+json':\n        reply.header('Content-Type', 'application/vnd.v3+json')\n        reply.code(300)\n        reply.send({ firstName: 'New', lastName: 'Hoo', country: 'eg', city: 'node' })\n        break\n      case 'application/vnd.v4+json':\n        reply.header('Content-Type', 'application/vnd.v4+json')\n        reply.code(201)\n        reply.send({ boxId: 1, content: 'Games' })\n        break\n      case 'application/vnd.v5+json':\n        reply.header('Content-Type', 'application/vnd.v5+json')\n        reply.code(202)\n        reply.send({ content: 'interesting content' })\n        break\n      case 'application/vnd.v6+json':\n        reply.header('Content-Type', 'application/vnd.v6+json')\n        reply.code(400)\n        reply.send({ desc: 'age is missing', details: 'validation error' })\n        break\n      case 'application/vnd.v7+json':\n        reply.code(400)\n        reply.send({ details: 'validation error' })\n        break\n      default:\n        // to test if schema not found\n        reply.header('Content-Type', 'application/vnd.v3+json')\n        reply.code(200)\n        reply.send([{ type: 'student', grade: 6 }, { type: 'student', grade: 9 }])\n    }\n  })\n\n  fastify.get('/test', {\n    serializerCompiler: ({ contentType }) => {\n      t.equal(contentType, 'application/json')\n      return data => JSON.stringify(data)\n    },\n    schema: {\n      response: {\n        200: {\n          content: {\n            'application/json': {\n              schema: {\n                name: { type: 'string' },\n                image: { type: 'string' },\n                address: { type: 'string' }\n              }\n            }\n          }\n        }\n      }\n    }\n  }, function (req, reply) {\n    reply.header('Content-Type', 'application/json')\n    reply.send({ age: 18, city: 'AU' })\n  })\n\n  fastify.inject({ method: 'GET', url: '/', headers: { Accept: 'application/json' } }, (err, res) => {\n    t.error(err)\n    t.equal(res.payload, JSON.stringify({ name: 'Foo', image: 'profile picture', address: 'New Node' }))\n    t.equal(res.statusCode, 200)\n  })\n\n  fastify.inject({ method: 'GET', url: '/', headers: { Accept: 'application/vnd.v1+json' } }, (err, res) => {\n    t.error(err)\n    t.equal(res.payload, JSON.stringify([{ name: 'Boo', age: 18, verified: false }, { name: 'Woo', age: 30, verified: true }]))\n    t.equal(res.statusCode, 200)\n  })\n\n  fastify.inject({ method: 'GET', url: '/' }, (err, res) => {\n    t.error(err)\n    t.equal(res.payload, JSON.stringify([{ type: 'student', grade: 6 }, { type: 'student', grade: 9 }]))\n    t.equal(res.statusCode, 200)\n  })\n\n  fastify.inject({ method: 'GET', url: '/', headers: { Accept: 'application/vnd.v2+json' } }, (err, res) => {\n    t.error(err)\n    t.equal(res.payload, JSON.stringify({ fullName: 'Jhon Smith', phone: '01090000000' }))\n    t.equal(res.statusCode, 300)\n  })\n\n  fastify.inject({ method: 'GET', url: '/', headers: { Accept: 'application/vnd.v3+json' } }, (err, res) => {\n    t.error(err)\n    t.equal(res.payload, JSON.stringify({ firstName: 'New', lastName: 'Hoo', country: 'eg', city: 'node' }))\n    t.equal(res.statusCode, 300)\n  })\n\n  fastify.inject({ method: 'GET', url: '/', headers: { Accept: 'application/vnd.v4+json' } }, (err, res) => {\n    t.error(err)\n    t.equal(res.payload, JSON.stringify({ content: 'Games' }))\n    t.equal(res.statusCode, 201)\n  })\n\n  fastify.inject({ method: 'GET', url: '/', headers: { Accept: 'application/vnd.v5+json' } }, (err, res) => {\n    t.error(err)\n    t.equal(res.payload, JSON.stringify({ content: 'Processing exclusive content' }))\n    t.equal(res.statusCode, 202)\n  })\n\n  fastify.inject({ method: 'GET', url: '/', headers: { Accept: 'application/vnd.v6+json' } }, (err, res) => {\n    t.error(err)\n    t.equal(res.payload, JSON.stringify({ desc: 'age is missing', details: 'validation error' }))\n    t.equal(res.statusCode, 400)\n  })\n\n  fastify.inject({ method: 'GET', url: '/', headers: { Accept: 'application/vnd.v7+json' } }, (err, res) => {\n    t.error(err)\n    t.equal(res.payload, JSON.stringify({ details: 'validation error' }))\n    t.equal(res.statusCode, 400)\n  })\n\n  fastify.inject({ method: 'GET', url: '/test' }, (err, res) => {\n    t.error(err)\n    t.equal(res.payload, JSON.stringify({ age: 18, city: 'AU' }))\n    t.equal(res.statusCode, 200)\n  })\n})\n\ntest('Invalid multiple content schema, throw FST_ERR_SCH_CONTENT_MISSING_SCHEMA error', t => {\n  t.plan(3)\n  const fastify = Fastify()\n\n  fastify.get('/testInvalid', {\n    schema: {\n      response: {\n        200: {\n          content: {\n            'application/json': {\n              schema: {\n                fullName: { type: 'string' },\n                phone: { type: 'string' }\n              },\n              example: {\n                fullName: 'John Doe',\n                phone: '201090243795'\n              }\n            },\n            type: 'string'\n          }\n        }\n      }\n    }\n  }, function (req, reply) {\n    reply.header('Content-Type', 'application/json')\n    reply.send({ fullName: 'Any name', phone: '0109001010' })\n  })\n\n  fastify.ready((err) => {\n    t.equal(err.message, \"Schema is missing for the content type 'type'\")\n    t.equal(err.statusCode, 500)\n    t.equal(err.code, 'FST_ERR_SCH_CONTENT_MISSING_SCHEMA')\n  })\n})\n\ntest('Use the same schema id in different places', t => {\n  t.plan(2)\n  const fastify = Fastify()\n\n  fastify.addSchema({\n    $id: 'test',\n    type: 'object',\n    properties: {\n      id: { type: 'number' }\n    }\n  })\n\n  fastify.get('/:id', {\n    handler (req, reply) {\n      reply.send([{ id: 1 }, { id: 2 }, { what: 'is this' }])\n    },\n    schema: {\n      response: {\n        200: {\n          type: 'array',\n          items: { $ref: 'test' }\n        }\n      }\n    }\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/123'\n  }, (err, res) => {\n    t.error(err)\n    t.same(res.json(), [{ id: 1 }, { id: 2 }, { }])\n  })\n})\n\ntest('Use shared schema and $ref with $id in response ($ref to $id)', t => {\n  t.plan(5)\n  const fastify = Fastify()\n\n  fastify.addSchema({\n    $id: 'http://foo/test',\n    type: 'object',\n    properties: {\n      id: { type: 'number' }\n    }\n  })\n\n  const complexSchema = {\n    $schema: 'http://json-schema.org/draft-07/schema#',\n    $id: 'http://foo/user',\n    type: 'object',\n    definitions: {\n      address: {\n        $id: '#address',\n        type: 'object',\n        properties: {\n          city: { type: 'string' }\n        }\n      }\n    },\n    properties: {\n      test: { $ref: 'http://foo/test#' },\n      address: { $ref: '#address' }\n    },\n    required: ['address', 'test']\n  }\n\n  fastify.post('/', {\n    schema: {\n      body: complexSchema,\n      response: {\n        200: complexSchema\n      }\n    },\n    handler: (req, reply) => {\n      req.body.removeThis = 'it should not be serialized'\n      reply.send(req.body)\n    }\n  })\n\n  const payload = {\n    address: { city: 'New Node' },\n    test: { id: Date.now() }\n  }\n\n  fastify.inject({\n    method: 'POST',\n    url: '/',\n    payload\n  }, (err, res) => {\n    t.error(err)\n    t.same(res.json(), payload)\n  })\n\n  fastify.inject({\n    method: 'POST',\n    url: '/',\n    payload: { test: { id: Date.now() } }\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 400)\n    t.same(res.json(), {\n      error: 'Bad Request',\n      message: \"body must have required property 'address'\",\n      statusCode: 400\n    })\n  })\n})\n\ntest('Shared schema should be pass to serializer and validator ($ref to shared schema /definitions)', t => {\n  t.plan(5)\n  const fastify = Fastify()\n\n  fastify.addSchema({\n    $id: 'http://example.com/asset.json',\n    $schema: 'http://json-schema.org/draft-07/schema#',\n    title: 'Physical Asset',\n    description: 'A generic representation of a physical asset',\n    type: 'object',\n    required: [\n      'id',\n      'model',\n      'location'\n    ],\n    properties: {\n      id: {\n        type: 'string',\n        format: 'uuid'\n      },\n      model: {\n        type: 'string'\n      },\n      location: { $ref: 'http://example.com/point.json#' }\n    },\n    definitions: {\n      inner: {\n        $id: '#innerId',\n        type: 'string',\n        format: 'email'\n      }\n    }\n  })\n\n  fastify.addSchema({\n    $id: 'http://example.com/point.json',\n    $schema: 'http://json-schema.org/draft-07/schema#',\n    title: 'Longitude and Latitude Values',\n    description: 'A geographical coordinate.',\n    type: 'object',\n    required: [\n      'latitude',\n      'longitude'\n    ],\n    properties: {\n      email: { $ref: 'http://example.com/asset.json#/definitions/inner' },\n      latitude: {\n        type: 'number',\n        minimum: -90,\n        maximum: 90\n      },\n      longitude: {\n        type: 'number',\n        minimum: -180,\n        maximum: 180\n      },\n      altitude: {\n        type: 'number'\n      }\n    }\n  })\n\n  const schemaLocations = {\n    $id: 'http://example.com/locations.json',\n    $schema: 'http://json-schema.org/draft-07/schema#',\n    title: 'List of Asset locations',\n    type: 'array',\n    items: { $ref: 'http://example.com/asset.json#' }\n  }\n\n  fastify.post('/', {\n    schema: {\n      body: schemaLocations,\n      response: { 200: schemaLocations }\n    }\n  }, (req, reply) => {\n    reply.send(locations.map(_ => Object.assign({ serializer: 'remove me' }, _)))\n  })\n\n  const locations = [\n    { id: '550e8400-e29b-41d4-a716-446655440000', model: 'mod', location: { latitude: 10, longitude: 10, email: 'foo@bar.it' } },\n    { id: '550e8400-e29b-41d4-a716-446655440000', model: 'mod', location: { latitude: 10, longitude: 10, email: 'foo@bar.it' } }\n  ]\n  fastify.inject({\n    method: 'POST',\n    url: '/',\n    payload: locations\n  }, (err, res) => {\n    t.error(err)\n    t.same(res.json(), locations)\n\n    fastify.inject({\n      method: 'POST',\n      url: '/',\n      payload: locations.map(_ => {\n        _.location.email = 'not an email'\n        return _\n      })\n    }, (err, res) => {\n      t.error(err)\n      t.equal(res.statusCode, 400)\n      t.same(res.json(), {\n        error: 'Bad Request',\n        message: 'body/0/location/email must match format \"email\"',\n        statusCode: 400\n      })\n    })\n  })\n})\n\ntest('Custom setSerializerCompiler', t => {\n  t.plan(7)\n  const fastify = Fastify({ exposeHeadRoutes: false })\n\n  const outSchema = {\n    $id: 'test',\n    type: 'object',\n    whatever: 'need to be parsed by the custom serializer'\n  }\n\n  fastify.setSerializerCompiler(({ schema, method, url, httpStatus }) => {\n    t.equal(method, 'GET')\n    t.equal(url, '/foo/:id')\n    t.equal(httpStatus, '200')\n    t.same(schema, outSchema)\n    return data => JSON.stringify(data)\n  })\n\n  fastify.register((instance, opts, done) => {\n    instance.get('/:id', {\n      handler (req, reply) {\n        reply.send({ id: 1 })\n      },\n      schema: {\n        response: {\n          200: outSchema\n        }\n      }\n    })\n    t.ok(instance.serializerCompiler, 'the serializer is set by the parent')\n    done()\n  }, { prefix: '/foo' })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/foo/123'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.payload, JSON.stringify({ id: 1 }))\n  })\n})\n\ntest('Custom setSerializerCompiler returns bad serialized output', t => {\n  t.plan(4)\n  const fastify = Fastify()\n\n  const outSchema = {\n    $id: 'test',\n    type: 'object',\n    whatever: 'need to be parsed by the custom serializer'\n  }\n\n  fastify.setSerializerCompiler(({ schema, method, url, httpStatus }) => {\n    return data => {\n      t.pass('returning an invalid serialization')\n      return { not: 'a string' }\n    }\n  })\n\n  fastify.get('/:id', {\n    handler (req, reply) { throw new Error('ops') },\n    schema: {\n      response: {\n        500: outSchema\n      }\n    }\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/123'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 500)\n    t.strictSame(res.json(), {\n      code: 'FST_ERR_REP_INVALID_PAYLOAD_TYPE',\n      message: 'Attempted to send payload of invalid type \\'object\\'. Expected a string or Buffer.',\n      statusCode: 500\n    })\n  })\n})\n\ntest('Custom serializer per route', async t => {\n  const fastify = Fastify()\n\n  const outSchema = {\n    $id: 'test',\n    type: 'object',\n    properties: {\n      mean: { type: 'string' }\n    }\n  }\n\n  fastify.get('/default', {\n    handler (req, reply) { reply.send({ mean: 'default' }) },\n    schema: { response: { 200: outSchema } }\n  })\n\n  let hit = 0\n  fastify.register((instance, opts, done) => {\n    instance.setSerializerCompiler(({ schema, method, url, httpStatus }) => {\n      hit++\n      return data => JSON.stringify({ mean: 'custom' })\n    })\n    instance.get('/custom', {\n      handler (req, reply) { reply.send({}) },\n      schema: { response: { 200: outSchema } }\n    })\n    instance.get('/route', {\n      handler (req, reply) { reply.send({}) },\n      serializerCompiler: ({ schema, method, url, httpPart }) => {\n        hit++\n        return data => JSON.stringify({ mean: 'route' })\n      },\n      schema: { response: { 200: outSchema } }\n    })\n\n    done()\n  })\n\n  let res = await fastify.inject('/default')\n  t.equal(res.json().mean, 'default')\n\n  res = await fastify.inject('/custom')\n  t.equal(res.json().mean, 'custom')\n\n  res = await fastify.inject('/route')\n  t.equal(res.json().mean, 'route')\n\n  t.equal(hit, 4, 'the custom and route serializer has been called')\n})\n\ntest('Reply serializer win over serializer ', t => {\n  t.plan(6)\n\n  const fastify = Fastify()\n  fastify.setReplySerializer(function (payload, statusCode) {\n    t.same(payload, { name: 'Foo', work: 'Bar', nick: 'Boo' })\n    return 'instance serializator'\n  })\n\n  fastify.get('/', {\n    schema: {\n      response: {\n        '2xx': {\n          type: 'object',\n          properties: {\n            name: { type: 'string' },\n            work: { type: 'string' }\n          }\n        }\n      }\n    },\n    serializerCompiler: ({ schema, method, url, httpPart }) => {\n      t.ok(method, 'the custom compiler has been created')\n      return () => {\n        t.fail('the serializer must not be called when there is a reply serializer')\n        return 'fail'\n      }\n    }\n  }, function (req, reply) {\n    reply.code(200).send({ name: 'Foo', work: 'Bar', nick: 'Boo' })\n  })\n\n  fastify.inject('/', (err, res) => {\n    t.error(err)\n    t.same(res.payload, 'instance serializator')\n    t.equal(res.statusCode, 200)\n  })\n})\n\ntest('Reply serializer win over serializer ', t => {\n  t.plan(6)\n\n  const fastify = Fastify()\n  fastify.setReplySerializer(function (payload, statusCode) {\n    t.same(payload, { name: 'Foo', work: 'Bar', nick: 'Boo' })\n    return 'instance serializator'\n  })\n\n  fastify.get('/', {\n    schema: {\n      response: {\n        '2xx': {\n          type: 'object',\n          properties: {\n            name: { type: 'string' },\n            work: { type: 'string' }\n          }\n        }\n      }\n    },\n    serializerCompiler: ({ schema, method, url, httpPart }) => {\n      t.ok(method, 'the custom compiler has been created')\n      return () => {\n        t.fail('the serializer must not be called when there is a reply serializer')\n        return 'fail'\n      }\n    }\n  }, function (req, reply) {\n    reply.code(200).send({ name: 'Foo', work: 'Bar', nick: 'Boo' })\n  })\n\n  fastify.inject('/', (err, res) => {\n    t.error(err)\n    t.same(res.payload, 'instance serializator')\n    t.equal(res.statusCode, 200)\n  })\n})\n\ntest('The schema compiler recreate itself if needed', t => {\n  t.plan(1)\n  const fastify = Fastify()\n\n  fastify.options('/', {\n    schema: {\n      response: { '2xx': { hello: { type: 'string' } } }\n    }\n  }, echoBody)\n\n  fastify.register(function (fastify, options, done) {\n    fastify.addSchema({\n      $id: 'identifier',\n      type: 'string',\n      format: 'uuid'\n    })\n\n    fastify.get('/', {\n      schema: {\n        response: {\n          '2xx': {\n            foobarId: { $ref: 'identifier#' }\n          }\n        }\n      }\n    }, echoBody)\n\n    done()\n  })\n\n  fastify.ready(err => { t.error(err) })\n})\n\ntest('The schema changes the default error handler output', async t => {\n  t.plan(4)\n  const fastify = Fastify()\n\n  fastify.get('/:code', {\n    schema: {\n      response: {\n        '2xx': { hello: { type: 'string' } },\n        501: {\n          type: 'object',\n          properties: {\n            message: { type: 'string' }\n          }\n        },\n        '5xx': {\n          type: 'object',\n          properties: {\n            customId: { type: 'number' },\n            error: { type: 'string' },\n            message: { type: 'string' }\n          }\n        }\n      }\n    }\n  }, (request, reply) => {\n    if (request.params.code === '501') {\n      return reply.code(501).send(new Error('501 message'))\n    }\n    const error = new Error('500 message')\n    error.customId = 42\n    reply.send(error)\n  })\n\n  let res = await fastify.inject('/501')\n  t.equal(res.statusCode, 501)\n  t.same(res.json(), { message: '501 message' })\n\n  res = await fastify.inject('/500')\n  t.equal(res.statusCode, 500)\n  t.same(res.json(), { error: 'Internal Server Error', message: '500 message', customId: 42 })\n})\n\ntest('do not crash if status code serializer errors', async t => {\n  const fastify = Fastify()\n\n  const requiresFoo = {\n    type: 'object',\n    properties: { foo: { type: 'string' } },\n    required: ['foo']\n  }\n\n  const someUserErrorType2 = {\n    type: 'object',\n    properties: {\n      code: { type: 'number' }\n    },\n    required: ['code']\n  }\n\n  fastify.get(\n    '/',\n    {\n      schema: {\n        query: requiresFoo,\n        response: { 400: someUserErrorType2 }\n      }\n    },\n    (request, reply) => {\n      t.fail('handler, should not be called')\n    }\n  )\n\n  const res = await fastify.inject({\n    path: '/',\n    query: {\n      notfoo: true\n    }\n  })\n  t.equal(res.statusCode, 500)\n  t.same(res.json(), {\n    statusCode: 500,\n    code: 'FST_ERR_FAILED_ERROR_SERIALIZATION',\n    message: 'Failed to serialize an error. Error: \"code\" is required!. ' +\n      'Original error: querystring must have required property \\'foo\\''\n  })\n})\n\ntest('custom schema serializer error, empty message', async t => {\n  t.plan(2)\n  const fastify = Fastify()\n\n  fastify.get('/:code', {\n    schema: {\n      response: {\n        '2xx': { hello: { type: 'string' } },\n        501: {\n          type: 'object',\n          properties: {\n            message: { type: 'string' }\n          }\n        }\n      }\n    }\n  }, (request, reply) => {\n    if (request.params.code === '501') {\n      return reply.code(501).send(new Error(''))\n    }\n  })\n\n  const res = await fastify.inject('/501')\n  t.equal(res.statusCode, 501)\n  t.same(res.json(), { message: '' })\n})\n\ntest('error in custom schema serialize compiler, throw FST_ERR_SCH_SERIALIZATION_BUILD error', t => {\n  t.plan(3)\n\n  const fastify = Fastify()\n\n  fastify.get('/', {\n    schema: {\n      response: {\n        '2xx': {\n          type: 'object',\n          properties: {\n            some: { type: 'string' }\n          }\n        },\n        500: {\n          type: 'object',\n          properties: {\n            message: { type: 'string' }\n          }\n        }\n      }\n    },\n    serializerCompiler: () => {\n      throw new Error('CUSTOM_ERROR')\n    }\n  }, function (req, reply) {\n    reply.code(200).send({ some: 'thing' })\n  })\n\n  fastify.ready((err) => {\n    t.equal(err.message, 'Failed building the serialization schema for GET: /, due to error CUSTOM_ERROR')\n    t.equal(err.statusCode, 500)\n    t.equal(err.code, 'FST_ERR_SCH_SERIALIZATION_BUILD')\n  })\n})\n\ntest('Errors in searilizer sended to errorHandler', async t => {\n  let savedError\n\n  const fastify = Fastify()\n  fastify.get('/', {\n    schema: {\n      response: {\n        200: {\n          type: 'object',\n          properties: {\n            name: { type: 'string' },\n            power: { type: 'string' }\n          },\n          required: ['name']\n        }\n      }\n    }\n\n  }, function (req, reply) {\n    reply.code(200).send({ no: 'thing' })\n  })\n  fastify.setErrorHandler((error, request, reply) => {\n    savedError = error\n    reply.code(500).send(error)\n  })\n\n  const res = await fastify.inject('/')\n\n  t.equal(res.statusCode, 500)\n\n  // t.same(savedError, new Error('\"name\" is required!'));\n  t.same(res.json(), {\n    statusCode: 500,\n    error: 'Internal Server Error',\n    message: '\"name\" is required!'\n  })\n  t.ok(savedError, 'error presents')\n  t.ok(savedError.serialization, 'Serialization sign presents')\n  t.end()\n})\n\ntest('capital X', t => {\n  t.plan(3)\n\n  const fastify = Fastify()\n  fastify.get('/', {\n    schema: {\n      response: {\n        '2XX': {\n          type: 'object',\n          properties: {\n            name: { type: 'string' },\n            work: { type: 'string' }\n          }\n        }\n      }\n    }\n  }, function (req, reply) {\n    reply.code(200).send({ name: 'Foo', work: 'Bar', nick: 'Boo' })\n  })\n\n  fastify.inject('/', (err, res) => {\n    t.error(err)\n    t.same(res.json(), { name: 'Foo', work: 'Bar' })\n    t.equal(res.statusCode, 200)\n  })\n})\n\ntest('allow default as status code and used as last fallback', t => {\n  t.plan(3)\n  const fastify = Fastify()\n\n  fastify.route({\n    url: '/',\n    method: 'GET',\n    schema: {\n      response: {\n        default: {\n          type: 'object',\n          properties: {\n            name: { type: 'string' },\n            work: { type: 'string' }\n          }\n        }\n      }\n    },\n    handler: (req, reply) => {\n      reply.code(200).send({ name: 'Foo', work: 'Bar', nick: 'Boo' })\n    }\n  })\n\n  fastify.inject('/', (err, res) => {\n    t.error(err)\n    t.same(res.json(), { name: 'Foo', work: 'Bar' })\n    t.equal(res.statusCode, 200)\n  })\n})\n/test/lock.test.js\b>'use strict'\n\nconst t = require('tap')\nconst test = t.test\nconst sget = require('simple-get').concat\nconst fastify = require('..')()\n\ntest('can be created - lock', t => {\n  t.plan(1)\n  try {\n    fastify.route({\n      method: 'LOCK',\n      url: '*',\n      handler: function (req, reply) {\n        reply\n          .code(200)\n          .send(`<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n            <D:prop xmlns:D=\"DAV:\">\n              <D:lockdiscovery>\n                <D:activelock>\n                  <D:locktype>\n                    <D:write/>\n                  </D:locktype>\n                  <D:lockscope>\n                    <D:exclusive/>\n                  </D:lockscope>\n                  <D:depth>infinity</D:depth>\n                  <D:owner>\n                    <D:href>http://example.org/~ejw/contact.html</D:href>\n                  </D:owner>\n                  <D:timeout>Second-604800</D:timeout>\n                  <D:locktoken>\n                    <D:href>urn:uuid:e71d4fae-5dec-22d6-fea5-00a0c91e6be4</:href>\n                  </D:locktoken>\n                  <D:lockroot>\n                    <D:href>http://example.com/workspace/webdav/proposal.oc</D:href>\n                  </D:lockroot>\n                </D:activelock>\n              </D:lockdiscovery>\n            </D:prop>`\n          )\n      }\n    })\n    t.pass()\n  } catch (e) {\n    t.fail()\n  }\n})\n\nfastify.listen({ port: 0 }, err => {\n  t.error(err)\n  t.teardown(() => { fastify.close() })\n\n  test('request - lock', t => {\n    t.plan(3)\n    sget({\n      url: `http://localhost:${fastify.server.address().port}/test/a.txt`,\n      body: `<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n        <D:lockinfo xmlns:D='DAV:'>\n          <D:lockscope> <D:exclusive/> </D:lockscope>\n          <D:locktype> <D:write/> </D:locktype>\n          <D:owner>\n            <D:href>http://example.org/~ejw/contact.html</D:href>\n          </D:owner>\n        </D:lockinfo> `,\n      method: 'LOCK'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(response.headers['content-length'], '' + body.length)\n    })\n  })\n})\n/examples/simple.js\u0001'use strict'\n\nconst fastify = require('../fastify')({\n  logger: false\n})\n\nconst schema = {\n  schema: {\n    response: {\n      200: {\n        type: 'object',\n        properties: {\n          hello: {\n            type: 'string'\n          }\n        }\n      }\n    }\n  }\n}\n\nfastify\n  .get('/', schema, function (req, reply) {\n    reply\n      .send({ hello: 'world' })\n  })\n\nfastify.listen({ port: 3000 }, (err, address) => {\n  if (err) throw err\n})\n#/docs/Guides/Write-Type-Provider.md\u0004<h1 align=\"center\">Fastify</h1>\n\n## How to write your own type provider\n\nThings to keep in mind when implementing a custom [type provider](../Reference/Type-Providers.md):\n\n### Type Contravariance\n\nWhereas exhaustive type narrowing checks normally rely on `never` to represent\nan unreachable state, reduction in type provider interfaces should only be done\nup to `unknown`.\n\nThe reasoning is that certain methods of `FastifyInstance` are \ncontravariant on `TypeProvider`, which can lead to TypeScript surfacing \nassignability issues unless the custom type provider interface is \nsubstitutible with `FastifyTypeProviderDefault`.\n\nFor example, `FastifyTypeProviderDefault` will not be assignable to the following:\n```ts\nexport interface NotSubstitutibleTypeProvider extends FastifyTypeProvider {\n   // bad, nothing is assignable to `never` (except for itself)\n  output: this['input'] extends /** custom check here**/ ? /** narrowed type here **/ : never;\n}\n```\n\nUnless changed to:\n```ts\nexport interface SubstitutibleTypeProvider extends FastifyTypeProvider {\n  // good, anything can be assigned to `unknown`\n  output: this['input'] extends /** custom check here**/ ? /** narrowed type here **/ : unknown; \n}\n```\n/test/url-rewriting.test.js\b'use strict'\n\nconst t = require('tap')\nconst test = t.test\nconst Fastify = require('..')\nconst sget = require('simple-get').concat\n\ntest('Should rewrite url', t => {\n  t.plan(5)\n  const fastify = Fastify({\n    rewriteUrl (req) {\n      t.equal(req.url, '/this-would-404-without-url-rewrite')\n      return '/'\n    }\n  })\n\n  fastify.route({\n    method: 'GET',\n    url: '/',\n    handler: (req, reply) => {\n      reply.send({ hello: 'world' })\n    }\n  })\n\n  fastify.listen({ port: 0 }, function (err) {\n    t.error(err)\n\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port + '/this-would-404-without-url-rewrite'\n    }, (err, response, body) => {\n      t.error(err)\n      t.same(JSON.parse(body), { hello: 'world' })\n      t.equal(response.statusCode, 200)\n    })\n  })\n\n  t.teardown(() => fastify.close())\n})\n\ntest('Should not rewrite if the url is the same', t => {\n  t.plan(4)\n  const fastify = Fastify({\n    rewriteUrl (req) {\n      t.equal(req.url, '/this-would-404-without-url-rewrite')\n      return req.url\n    }\n  })\n\n  fastify.route({\n    method: 'GET',\n    url: '/',\n    handler: (req, reply) => {\n      reply.send({ hello: 'world' })\n    }\n  })\n\n  fastify.listen({ port: 0 }, function (err) {\n    t.error(err)\n\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port + '/this-would-404-without-url-rewrite'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 404)\n    })\n  })\n\n  t.teardown(() => fastify.close())\n})\ntest('Should throw an error', t => {\n  t.plan(5)\n  const fastify = Fastify({\n    rewriteUrl (req) {\n      t.equal(req.url, '/this-would-404-without-url-rewrite')\n      return undefined\n    }\n  })\n\n  fastify.route({\n    method: 'GET',\n    url: '/',\n    handler: (req, reply) => {\n      reply.send({ hello: 'world' })\n    }\n  })\n\n  fastify.listen({ port: 0 }, function (err) {\n    t.error(err)\n\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port + '/this-would-404-without-url-rewrite'\n    }, (err, response, body) => {\n      t.equal(err.code, 'ECONNRESET')\n      t.equal(response, undefined)\n      t.equal(body, undefined)\n    })\n  })\n\n  t.teardown(() => fastify.close())\n})\n/test/chainable.test.js\u0002'use strict'\n\nconst t = require('tap')\nconst test = t.test\nconst fastify = require('..')()\n\nconst noop = () => {}\nconst opts = {\n  schema: {\n    response: {\n      '2xx': {\n        type: 'object',\n        properties: {\n          hello: {\n            type: 'string'\n          }\n        }\n      }\n    }\n  }\n}\n\ntest('chainable - get', t => {\n  t.plan(1)\n  t.type(fastify.get('/', opts, noop), fastify)\n})\n\ntest('chainable - post', t => {\n  t.plan(1)\n  t.type(fastify.post('/', opts, noop), fastify)\n})\n\ntest('chainable - route', t => {\n  t.plan(1)\n  t.type(fastify.route({\n    method: 'GET',\n    url: '/other',\n    schema: opts.schema,\n    handler: noop\n  }), fastify)\n})\n/test/helper.js-'use strict'\n\nconst sget = require('simple-get').concat\nconst dns = require('dns').promises\nconst stream = require('stream')\nconst symbols = require('../lib/symbols')\n\n/**\n * @param method HTTP request method\n * @param t tap instance\n * @param isSetErrorHandler true: using setErrorHandler\n */\nmodule.exports.payloadMethod = function (method, t, isSetErrorHandler = false) {\n  const test = t.test\n  const fastify = require('..')()\n\n  if (isSetErrorHandler) {\n    fastify.setErrorHandler(function (err, request, reply) {\n      t.type(request, 'object')\n      t.type(request, fastify[symbols.kRequest].parent)\n      reply\n        .code(err.statusCode)\n        .type('application/json; charset=utf-8')\n        .send(err)\n    })\n  }\n\n  const upMethod = method.toUpperCase()\n  const loMethod = method.toLowerCase()\n\n  const schema = {\n    schema: {\n      response: {\n        '2xx': {\n          type: 'object',\n          properties: {\n            hello: {\n              type: 'string'\n            }\n          }\n        }\n      }\n    }\n  }\n\n  test(`${upMethod} can be created`, t => {\n    t.plan(1)\n    try {\n      fastify[loMethod]('/', schema, function (req, reply) {\n        reply.code(200).send(req.body)\n      })\n      t.pass()\n    } catch (e) {\n      t.fail()\n    }\n  })\n\n  test(`${upMethod} without schema can be created`, t => {\n    t.plan(1)\n    try {\n      fastify[loMethod]('/missing', function (req, reply) {\n        reply.code(200).send(req.body)\n      })\n      t.pass()\n    } catch (e) {\n      t.fail()\n    }\n  })\n\n  test(`${upMethod} with body and querystring`, t => {\n    t.plan(1)\n    try {\n      fastify[loMethod]('/with-query', function (req, reply) {\n        req.body.hello = req.body.hello + req.query.foo\n        reply.code(200).send(req.body)\n      })\n      t.pass()\n    } catch (e) {\n      t.fail()\n    }\n  })\n\n  test(`${upMethod} with bodyLimit option`, t => {\n    t.plan(1)\n    try {\n      fastify[loMethod]('/with-limit', { bodyLimit: 1 }, function (req, reply) {\n        reply.send(req.body)\n      })\n      t.pass()\n    } catch (e) {\n      t.fail()\n    }\n  })\n\n  fastify.listen({ port: 0 }, function (err) {\n    if (err) {\n      t.error(err)\n      return\n    }\n\n    t.teardown(() => { fastify.close() })\n\n    test(`${upMethod} - correctly replies`, t => {\n      t.plan(3)\n      sget({\n        method: upMethod,\n        url: 'http://localhost:' + fastify.server.address().port,\n        body: {\n          hello: 'world'\n        },\n        json: true\n      }, (err, response, body) => {\n        t.error(err)\n        t.equal(response.statusCode, 200)\n        t.same(body, { hello: 'world' })\n      })\n    })\n\n    test(`${upMethod} - correctly replies with very large body`, t => {\n      t.plan(3)\n\n      const largeString = 'world'.repeat(13200)\n      sget({\n        method: upMethod,\n        url: 'http://localhost:' + fastify.server.address().port,\n        body: { hello: largeString },\n        json: true\n      }, (err, response, body) => {\n        t.error(err)\n        t.equal(response.statusCode, 200)\n        t.same(body, { hello: largeString })\n      })\n    })\n\n    test(`${upMethod} - correctly replies if the content type has the charset`, t => {\n      t.plan(3)\n      sget({\n        method: upMethod,\n        url: 'http://localhost:' + fastify.server.address().port,\n        body: JSON.stringify({ hello: 'world' }),\n        headers: {\n          'content-type': 'application/json; charset=utf-8'\n        }\n      }, (err, response, body) => {\n        t.error(err)\n        t.equal(response.statusCode, 200)\n        t.same(body.toString(), JSON.stringify({ hello: 'world' }))\n      })\n    })\n\n    test(`${upMethod} without schema - correctly replies`, t => {\n      t.plan(3)\n      sget({\n        method: upMethod,\n        url: 'http://localhost:' + fastify.server.address().port + '/missing',\n        body: {\n          hello: 'world'\n        },\n        json: true\n      }, (err, response, body) => {\n        t.error(err)\n        t.equal(response.statusCode, 200)\n        t.same(body, { hello: 'world' })\n      })\n    })\n\n    test(`${upMethod} with body and querystring - correctly replies`, t => {\n      t.plan(3)\n      sget({\n        method: upMethod,\n        url: 'http://localhost:' + fastify.server.address().port + '/with-query?foo=hello',\n        body: {\n          hello: 'world'\n        },\n        json: true\n      }, (err, response, body) => {\n        t.error(err)\n        t.equal(response.statusCode, 200)\n        t.same(body, { hello: 'worldhello' })\n      })\n    })\n\n    test(`${upMethod} with no body - correctly replies`, t => {\n      t.plan(6)\n\n      sget({\n        method: upMethod,\n        url: 'http://localhost:' + fastify.server.address().port + '/missing',\n        headers: { 'Content-Length': '0' }\n      }, (err, response, body) => {\n        t.error(err)\n        t.equal(response.statusCode, 200)\n        t.equal(body.toString(), '')\n      })\n\n      // Must use inject to make a request without a Content-Length header\n      fastify.inject({\n        method: upMethod,\n        url: '/missing'\n      }, (err, res) => {\n        t.error(err)\n        t.equal(res.statusCode, 200)\n        t.equal(res.payload.toString(), '')\n      })\n    })\n\n    test(`${upMethod} returns 415 - incorrect media type if body is not json`, t => {\n      t.plan(2)\n      sget({\n        method: upMethod,\n        url: 'http://localhost:' + fastify.server.address().port + '/missing',\n        body: 'hello world'\n\n      }, (err, response, body) => {\n        t.error(err)\n        if (upMethod === 'OPTIONS') {\n          t.equal(response.statusCode, 200)\n        } else {\n          t.equal(response.statusCode, 415)\n        }\n      })\n    })\n\n    if (loMethod === 'options') {\n      test('OPTIONS returns 415 - should return 415 if Content-Type is not json or plain text', t => {\n        t.plan(2)\n        sget({\n          method: upMethod,\n          url: 'http://localhost:' + fastify.server.address().port + '/missing',\n          body: 'hello world',\n          headers: {\n            'Content-Type': 'text/xml'\n          }\n        }, (err, response, body) => {\n          t.error(err)\n          t.equal(response.statusCode, 415)\n        })\n      })\n    }\n\n    test(`${upMethod} returns 400 - Bad Request`, t => {\n      t.plan(4)\n\n      sget({\n        method: upMethod,\n        url: 'http://localhost:' + fastify.server.address().port,\n        body: 'hello world',\n        headers: {\n          'Content-Type': 'application/json'\n        }\n      }, (err, response, body) => {\n        t.error(err)\n        t.equal(response.statusCode, 400)\n      })\n\n      sget({\n        method: upMethod,\n        url: 'http://localhost:' + fastify.server.address().port,\n        headers: {\n          'Content-Type': 'application/json',\n          'Content-Length': '0'\n        }\n      }, (err, response, body) => {\n        t.error(err)\n        t.equal(response.statusCode, 400)\n      })\n    })\n\n    test(`${upMethod} returns 413 - Payload Too Large`, t => {\n      t.plan(upMethod === 'OPTIONS' ? 4 : 6)\n\n      sget({\n        method: upMethod,\n        url: 'http://localhost:' + fastify.server.address().port,\n        headers: {\n          'Content-Type': 'application/json',\n          'Content-Length': 1024 * 1024 + 1\n        }\n      }, (err, response, body) => {\n        t.error(err)\n        t.equal(response.statusCode, 413)\n      })\n\n      // Node errors for OPTIONS requests with a stream body and no Content-Length header\n      if (upMethod !== 'OPTIONS') {\n        let chunk = Buffer.alloc(1024 * 1024 + 1, 0)\n        const largeStream = new stream.Readable({\n          read () {\n            this.push(chunk)\n            chunk = null\n          }\n        })\n        sget({\n          method: upMethod,\n          url: 'http://localhost:' + fastify.server.address().port,\n          headers: { 'Content-Type': 'application/json' },\n          body: largeStream\n        }, (err, response, body) => {\n          t.error(err)\n          t.equal(response.statusCode, 413)\n        })\n      }\n\n      sget({\n        method: upMethod,\n        url: `http://localhost:${fastify.server.address().port}/with-limit`,\n        headers: { 'Content-Type': 'application/json' },\n        body: {},\n        json: true\n      }, (err, response, body) => {\n        t.error(err)\n        t.equal(response.statusCode, 413)\n      })\n    })\n\n    test(`${upMethod} should fail with empty body and application/json content-type`, t => {\n      if (upMethod === 'OPTIONS') return t.end()\n\n      t.plan(12)\n\n      fastify.inject({\n        method: `${upMethod}`,\n        url: '/',\n        headers: {\n          'Content-Type': 'application/json'\n        }\n      }, (err, res) => {\n        t.error(err)\n        t.same(JSON.parse(res.payload), {\n          error: 'Bad Request',\n          code: 'FST_ERR_CTP_EMPTY_JSON_BODY',\n          message: 'Body cannot be empty when content-type is set to \\'application/json\\'',\n          statusCode: 400\n        })\n      })\n\n      sget({\n        method: upMethod,\n        url: `http://localhost:${fastify.server.address().port}`,\n        headers: {\n          'Content-Type': 'application/json'\n        }\n      }, (err, res, body) => {\n        t.error(err)\n        t.same(JSON.parse(body.toString()), {\n          error: 'Bad Request',\n          code: 'FST_ERR_CTP_EMPTY_JSON_BODY',\n          message: 'Body cannot be empty when content-type is set to \\'application/json\\'',\n          statusCode: 400\n        })\n      })\n\n      fastify.inject({\n        method: `${upMethod}`,\n        url: '/',\n        headers: {\n          'Content-Type': 'application/json'\n        },\n        payload: null\n      }, (err, res) => {\n        t.error(err)\n        t.same(JSON.parse(res.payload), {\n          error: 'Bad Request',\n          code: 'FST_ERR_CTP_EMPTY_JSON_BODY',\n          message: 'Body cannot be empty when content-type is set to \\'application/json\\'',\n          statusCode: 400\n        })\n      })\n\n      sget({\n        method: upMethod,\n        url: `http://localhost:${fastify.server.address().port}`,\n        headers: {\n          'Content-Type': 'application/json'\n        },\n        payload: null\n      }, (err, res, body) => {\n        t.error(err)\n        t.same(JSON.parse(body.toString()), {\n          error: 'Bad Request',\n          code: 'FST_ERR_CTP_EMPTY_JSON_BODY',\n          message: 'Body cannot be empty when content-type is set to \\'application/json\\'',\n          statusCode: 400\n        })\n      })\n\n      fastify.inject({\n        method: `${upMethod}`,\n        url: '/',\n        headers: {\n          'Content-Type': 'application/json'\n        },\n        payload: undefined\n      }, (err, res) => {\n        t.error(err)\n        t.same(JSON.parse(res.payload), {\n          error: 'Bad Request',\n          code: 'FST_ERR_CTP_EMPTY_JSON_BODY',\n          message: 'Body cannot be empty when content-type is set to \\'application/json\\'',\n          statusCode: 400\n        })\n      })\n\n      sget({\n        method: upMethod,\n        url: `http://localhost:${fastify.server.address().port}`,\n        headers: {\n          'Content-Type': 'application/json'\n        },\n        payload: undefined\n      }, (err, res, body) => {\n        t.error(err)\n        t.same(JSON.parse(body.toString()), {\n          error: 'Bad Request',\n          code: 'FST_ERR_CTP_EMPTY_JSON_BODY',\n          message: 'Body cannot be empty when content-type is set to \\'application/json\\'',\n          statusCode: 400\n        })\n      })\n    })\n  })\n}\n\nmodule.exports.getLoopbackHost = async () => {\n  let localhostForURL\n\n  const lookup = await dns.lookup('localhost')\n  const localhost = lookup.address\n  if (lookup.family === 6) {\n    localhostForURL = `[${lookup.address}]`\n  } else {\n    localhostForURL = localhost\n  }\n\n  return [localhost, localhostForURL]\n}\n/docs/Reference/LTS.md\f<h1 align=\"center\">Fastify</h1>\n\n## Long Term Support\n<a id=\"lts\"></a>\n\nFastify's Long Term Support (LTS) is provided according to the schedule laid out\nin this document:\n\n1. Major releases, \"X\" release of [semantic versioning][semver] X.Y.Z release\n   versions, are supported for a minimum period of six months from their release\n   date. The release date of any specific version can be found at\n   [https://github.com/fastify/fastify/releases](https://github.com/fastify/fastify/releases).\n\n2. Major releases will receive security updates for an additional six months\n   from the release of the next major release. After this period we will still\n   review and release security fixes as long as they are provided by the\n   community and they do not violate other constraints, e.g. minimum supported\n   Node.js version.\n\n3. Major releases will be tested and verified against all Node.js release lines\n   that are supported by the [Node.js LTS\n   policy](https://github.com/nodejs/Release) within the LTS period of that\n   given Fastify release line. This implies that only the latest Node.js release\n   of a given line is supported.\n\nA \"month\" is defined as 30 consecutive days.\n\n> ## Security Releases and Semver\n>\n> As a consequence of providing long-term support for major releases, there are\n> occasions where we need to release breaking changes as a _minor_ version\n> release. Such changes will _always_ be noted in the [release\n> notes](https://github.com/fastify/fastify/releases).\n>\n> To avoid automatically receiving breaking security updates it is possible to\n> use the tilde (`~`) range qualifier. For example, to get patches for the 3.15\n> release, and avoid automatically updating to the 3.16 release, specify the\n> dependency as `\"fastify\": \"~3.15.x\"`. This will leave your application\n> vulnerable, so please use with caution.\n\n[semver]: https://semver.org/\n\n### Schedule\n<a id=\"lts-schedule\"></a>\n\n| Version | Release Date | End Of LTS Date | Node.js              |\n| :------ | :----------- | :-------------- | :------------------- |\n| 1.0.0   | 2018-03-06   | 2019-09-01      | 6, 8, 9, 10, 11      |\n| 2.0.0   | 2019-02-25   | 2021-01-31      | 6, 8, 10, 12, 14     |\n| 3.0.0   | 2020-07-07   | 2023-06-30      | 10, 12, 14, 16, 18   |\n| 4.0.0   | 2022-06-08   | TBD             | 14, 16, 18           |\n\n### CI tested operating systems\n<a id=\"supported-os\"></a>\n\nFastify uses GitHub Actions for CI testing, please refer to [GitHub's\ndocumentation regarding workflow\nrunners](https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners#supported-runners-and-hardware-resources)\nfor further details on what the latest virtual environment is in relation to the\nYAML workflow labels below:\n\n| OS      | YAML Workflow Label    | Package Manager           | Node.js      |\n|---------|------------------------|---------------------------|--------------|\n| Linux   | `ubuntu-latest`        | npm                       | 14,16,18     |\n| Linux   | `ubuntu-latest`        | yarn,pnpm                 | 14,16,18     |\n| Windows | `windows-latest`       | npm                       | 14,16,18     |\n| MacOS   | `macos-latest`         | npm                       | 14,16,18     |\n\nUsing [yarn](https://yarnpkg.com/) might require passing the `--ignore-engines`\nflag.\n /test/constrained-routes.test.jsEk'use strict'\n\nconst t = require('tap')\nconst test = t.test\nconst Fastify = require('../fastify')\n\ntest('Should register a host constrained route', t => {\n  t.plan(7)\n  const fastify = Fastify()\n\n  fastify.route({\n    method: 'GET',\n    url: '/',\n    constraints: { host: 'fastify.io' },\n    handler: (req, reply) => {\n      reply.send({ hello: 'world' })\n    }\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/',\n    headers: {\n      host: 'fastify.io'\n    }\n  }, (err, res) => {\n    t.error(err)\n    t.same(JSON.parse(res.payload), { hello: 'world' })\n    t.equal(res.statusCode, 200)\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/',\n    headers: {\n      host: 'example.com'\n    }\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 404)\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 404)\n  })\n})\n\ntest('Should register the same route with host constraints', t => {\n  t.plan(8)\n  const fastify = Fastify()\n\n  fastify.route({\n    method: 'GET',\n    url: '/',\n    constraints: { host: 'fastify.io' },\n    handler: (req, reply) => {\n      reply.send('fastify.io')\n    }\n  })\n\n  fastify.route({\n    method: 'GET',\n    url: '/',\n    constraints: { host: 'example.com' },\n    handler: (req, reply) => {\n      reply.send('example.com')\n    }\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/',\n    headers: {\n      host: 'fastify.io'\n    }\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 200)\n    t.equal(res.payload, 'fastify.io')\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/',\n    headers: {\n      host: 'example.com'\n    }\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 200)\n    t.equal(res.payload, 'example.com')\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/',\n    headers: {\n      host: 'fancy.ca'\n    }\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 404)\n  })\n})\n\ntest('Should allow registering custom constrained routes', t => {\n  t.plan(8)\n\n  const constraint = {\n    name: 'secret',\n    storage: function () {\n      const secrets = {}\n      return {\n        get: (secret) => { return secrets[secret] || null },\n        set: (secret, store) => { secrets[secret] = store }\n      }\n    },\n    deriveConstraint: (req, ctx) => {\n      return req.headers['x-secret']\n    },\n    validate () { return true }\n  }\n\n  const fastify = Fastify({ constraints: { secret: constraint } })\n\n  fastify.route({\n    method: 'GET',\n    url: '/',\n    constraints: { secret: 'alpha' },\n    handler: (req, reply) => {\n      reply.send({ hello: 'from alpha' })\n    }\n  })\n\n  fastify.route({\n    method: 'GET',\n    url: '/',\n    constraints: { secret: 'beta' },\n    handler: (req, reply) => {\n      reply.send({ hello: 'from beta' })\n    }\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/',\n    headers: {\n      'X-Secret': 'alpha'\n    }\n  }, (err, res) => {\n    t.error(err)\n    t.same(JSON.parse(res.payload), { hello: 'from alpha' })\n    t.equal(res.statusCode, 200)\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/',\n    headers: {\n      'X-Secret': 'beta'\n    }\n  }, (err, res) => {\n    t.error(err)\n    t.same(JSON.parse(res.payload), { hello: 'from beta' })\n    t.equal(res.statusCode, 200)\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/',\n    headers: {\n      'X-Secret': 'gamma'\n    }\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 404)\n  })\n})\n\ntest('Should allow registering custom constrained routes outside constructor', t => {\n  t.plan(8)\n\n  const constraint = {\n    name: 'secret',\n    storage: function () {\n      const secrets = {}\n      return {\n        get: (secret) => { return secrets[secret] || null },\n        set: (secret, store) => { secrets[secret] = store }\n      }\n    },\n    deriveConstraint: (req, ctx) => {\n      return req.headers['x-secret']\n    },\n    validate () { return true }\n  }\n\n  const fastify = Fastify()\n  fastify.addConstraintStrategy(constraint)\n\n  fastify.route({\n    method: 'GET',\n    url: '/',\n    constraints: { secret: 'alpha' },\n    handler: (req, reply) => {\n      reply.send({ hello: 'from alpha' })\n    }\n  })\n\n  fastify.route({\n    method: 'GET',\n    url: '/',\n    constraints: { secret: 'beta' },\n    handler: (req, reply) => {\n      reply.send({ hello: 'from beta' })\n    }\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/',\n    headers: {\n      'X-Secret': 'alpha'\n    }\n  }, (err, res) => {\n    t.error(err)\n    t.same(JSON.parse(res.payload), { hello: 'from alpha' })\n    t.equal(res.statusCode, 200)\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/',\n    headers: {\n      'X-Secret': 'beta'\n    }\n  }, (err, res) => {\n    t.error(err)\n    t.same(JSON.parse(res.payload), { hello: 'from beta' })\n    t.equal(res.statusCode, 200)\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/',\n    headers: {\n      'X-Secret': 'gamma'\n    }\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 404)\n  })\n})\n\ntest('Add a constraint strategy after fastify instance was started', t => {\n  t.plan(4)\n\n  const constraint = {\n    name: 'secret',\n    storage: function () {\n      const secrets = {}\n      return {\n        get: (secret) => { return secrets[secret] || null },\n        set: (secret, store) => { secrets[secret] = store }\n      }\n    },\n    deriveConstraint: (req, ctx) => {\n      return req.headers['x-secret']\n    },\n    validate () { return true }\n  }\n\n  const fastify = Fastify()\n\n  fastify.route({\n    method: 'GET',\n    url: '/',\n    handler: (req, reply) => { reply.send('ok') }\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/'\n  }, (err, res) => {\n    t.error(err)\n    t.same(res.payload, 'ok')\n    t.equal(res.statusCode, 200)\n\n    t.throws(\n      () => fastify.addConstraintStrategy(constraint),\n      'Cannot add constraint strategy when fastify instance is already started!'\n    )\n  })\n})\n\ntest('Add a constraint strategy should throw an error if there already exist custom strategy with the same name', t => {\n  t.plan(1)\n\n  const constraint = {\n    name: 'secret',\n    storage: function () {\n      const secrets = {}\n      return {\n        get: (secret) => { return secrets[secret] || null },\n        set: (secret, store) => { secrets[secret] = store }\n      }\n    },\n    deriveConstraint: (req, ctx) => {\n      return req.headers['x-secret']\n    },\n    validate () { return true }\n  }\n\n  const fastify = Fastify()\n\n  fastify.addConstraintStrategy(constraint)\n  t.throws(\n    () => fastify.addConstraintStrategy(constraint),\n    'There already exists a custom constraint with the name secret.'\n  )\n})\n\ntest('Add a constraint strategy shouldn\\'t throw an error if default constraint with the same name isn\\'t used', t => {\n  t.plan(1)\n\n  const constraint = {\n    name: 'version',\n    storage: function () {\n      const secrets = {}\n      return {\n        get: (secret) => { return secrets[secret] || null },\n        set: (secret, store) => { secrets[secret] = store }\n      }\n    },\n    deriveConstraint: (req, ctx) => {\n      return req.headers['x-secret']\n    },\n    validate () { return true }\n  }\n\n  const fastify = Fastify()\n  fastify.addConstraintStrategy(constraint)\n\n  t.pass()\n})\n\ntest('Add a constraint strategy should throw an error if default constraint with the same name is used', t => {\n  t.plan(1)\n\n  const constraint = {\n    name: 'version',\n    storage: function () {\n      const secrets = {}\n      return {\n        get: (secret) => { return secrets[secret] || null },\n        set: (secret, store) => { secrets[secret] = store }\n      }\n    },\n    deriveConstraint: (req, ctx) => {\n      return req.headers['x-secret']\n    },\n    validate () { return true }\n  }\n\n  const fastify = Fastify()\n\n  fastify.route({\n    method: 'GET',\n    url: '/',\n    constraints: { version: '1.0.0' },\n    handler: (req, reply) => {\n      reply.send('ok')\n    }\n  })\n\n  t.throws(\n    () => fastify.addConstraintStrategy(constraint),\n    'There already exists a route with version constraint.'\n  )\n})\n\ntest('The hasConstraintStrategy should return false for default constraints until they are used', t => {\n  t.plan(6)\n\n  const fastify = Fastify()\n\n  t.equal(fastify.hasConstraintStrategy('version'), false)\n  t.equal(fastify.hasConstraintStrategy('host'), false)\n\n  fastify.route({\n    method: 'GET',\n    url: '/',\n    constraints: { host: 'fastify.io' },\n    handler: (req, reply) => {\n      reply.send({ hello: 'from any other domain' })\n    }\n  })\n\n  t.equal(fastify.hasConstraintStrategy('version'), false)\n  t.equal(fastify.hasConstraintStrategy('host'), true)\n\n  fastify.route({\n    method: 'GET',\n    url: '/',\n    constraints: { version: '1.0.0' },\n    handler: (req, reply) => {\n      reply.send({ hello: 'from any other domain' })\n    }\n  })\n\n  t.equal(fastify.hasConstraintStrategy('version'), true)\n  t.equal(fastify.hasConstraintStrategy('host'), true)\n})\n\ntest('The hasConstraintStrategy should return true if there already exist a custom constraint with the same name', t => {\n  t.plan(2)\n\n  const constraint = {\n    name: 'secret',\n    storage: function () {\n      const secrets = {}\n      return {\n        get: (secret) => { return secrets[secret] || null },\n        set: (secret, store) => { secrets[secret] = store }\n      }\n    },\n    deriveConstraint: (req, ctx) => {\n      return req.headers['x-secret']\n    },\n    validate () { return true }\n  }\n\n  const fastify = Fastify()\n\n  t.equal(fastify.hasConstraintStrategy('secret'), false)\n  fastify.addConstraintStrategy(constraint)\n  t.equal(fastify.hasConstraintStrategy('secret'), true)\n})\n\ntest('Should allow registering an unconstrained route after a constrained route', t => {\n  t.plan(6)\n  const fastify = Fastify()\n\n  fastify.route({\n    method: 'GET',\n    url: '/',\n    constraints: { host: 'fastify.io' },\n    handler: (req, reply) => {\n      reply.send({ hello: 'from fastify.io' })\n    }\n  })\n\n  fastify.route({\n    method: 'GET',\n    url: '/',\n    handler: (req, reply) => {\n      reply.send({ hello: 'from any other domain' })\n    }\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/',\n    headers: {\n      host: 'fastify.io'\n    }\n  }, (err, res) => {\n    t.error(err)\n    t.same(JSON.parse(res.payload), { hello: 'from fastify.io' })\n    t.equal(res.statusCode, 200)\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/',\n    headers: {\n      host: 'example.com'\n    }\n  }, (err, res) => {\n    t.error(err)\n    t.same(JSON.parse(res.payload), { hello: 'from any other domain' })\n    t.equal(res.statusCode, 200)\n  })\n})\n\ntest('Should allow registering constrained routes in a prefixed plugin', t => {\n  t.plan(3)\n\n  const fastify = Fastify()\n\n  fastify.register(async (scope, opts) => {\n    scope.route({\n      method: 'GET',\n      constraints: { host: 'fastify.io' },\n      path: '/route',\n      handler: (req, reply) => {\n        reply.send({ ok: true })\n      }\n    })\n  }, { prefix: '/prefix' })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/prefix/route',\n    headers: {\n      host: 'fastify.io'\n    }\n  }, (err, res) => {\n    t.error(err)\n    t.same(JSON.parse(res.payload), { ok: true })\n    t.equal(res.statusCode, 200)\n  })\n})\n\ntest('Should allow registering a constrained GET route after a constrained HEAD route', t => {\n  t.plan(3)\n  const fastify = Fastify()\n\n  fastify.route({\n    method: 'HEAD',\n    url: '/',\n    constraints: { host: 'fastify.io' },\n    handler: (req, reply) => {\n      reply.header('content-type', 'text/plain')\n      reply.send('custom HEAD response')\n    }\n  })\n\n  fastify.route({\n    method: 'GET',\n    url: '/',\n    constraints: { host: 'fastify.io' },\n    handler: (req, reply) => {\n      reply.send({ hello: 'from any other domain' })\n    }\n  })\n\n  fastify.inject({\n    method: 'HEAD',\n    url: '/',\n    headers: {\n      host: 'fastify.io'\n    }\n  }, (err, res) => {\n    t.error(err)\n    t.same(res.payload, 'custom HEAD response')\n    t.equal(res.statusCode, 200)\n  })\n})\n\ntest('Should allow registering a constrained GET route after an unconstrained HEAD route', t => {\n  t.plan(3)\n  const fastify = Fastify()\n\n  fastify.route({\n    method: 'HEAD',\n    url: '/',\n    handler: (req, reply) => {\n      reply.header('content-type', 'text/plain')\n      reply.send('custom HEAD response')\n    }\n  })\n\n  fastify.route({\n    method: 'GET',\n    url: '/',\n    constraints: { host: 'fastify.io' },\n    handler: (req, reply) => {\n      reply.send({ hello: 'from any other domain' })\n    }\n  })\n\n  fastify.inject({\n    method: 'HEAD',\n    url: '/',\n    headers: {\n      host: 'fastify.io'\n    }\n  }, (err, res) => {\n    t.error(err)\n    t.same(res.payload, 'custom HEAD response')\n    t.equal(res.statusCode, 200)\n  })\n})\n\ntest('Will not try to re-createprefixed HEAD route if it already exists and exposeHeadRoutes is true for constrained routes', async (t) => {\n  t.plan(1)\n\n  const fastify = Fastify({ exposeHeadRoutes: true })\n\n  fastify.register((scope, opts, next) => {\n    scope.route({\n      method: 'HEAD',\n      path: '/route',\n      constraints: { host: 'fastify.io' },\n      handler: (req, reply) => {\n        reply.header('content-type', 'text/plain')\n        reply.send('custom HEAD response')\n      }\n    })\n    scope.route({\n      method: 'GET',\n      path: '/route',\n      constraints: { host: 'fastify.io' },\n      handler: (req, reply) => {\n        reply.send({ ok: true })\n      }\n    })\n\n    next()\n  }, { prefix: '/prefix' })\n\n  await fastify.ready()\n\n  t.ok(true)\n})\n\ntest('allows separate constrained and unconstrained HEAD routes', async (t) => {\n  t.plan(1)\n\n  const fastify = Fastify({ exposeHeadRoutes: true })\n\n  fastify.register((scope, opts, next) => {\n    scope.route({\n      method: 'HEAD',\n      path: '/route',\n      handler: (req, reply) => {\n        reply.header('content-type', 'text/plain')\n        reply.send('unconstrained HEAD response')\n      }\n    })\n\n    scope.route({\n      method: 'HEAD',\n      path: '/route',\n      constraints: { host: 'fastify.io' },\n      handler: (req, reply) => {\n        reply.header('content-type', 'text/plain')\n        reply.send('constrained HEAD response')\n      }\n    })\n\n    scope.route({\n      method: 'GET',\n      path: '/route',\n      constraints: { host: 'fastify.io' },\n      handler: (req, reply) => {\n        reply.send({ ok: true })\n      }\n    })\n\n    next()\n  }, { prefix: '/prefix' })\n\n  await fastify.ready()\n\n  t.ok(true)\n})\n\ntest('allow async constraints', async (t) => {\n  t.plan(5)\n\n  const constraint = {\n    name: 'secret',\n    storage: function () {\n      const secrets = {}\n      return {\n        get: (secret) => { return secrets[secret] || null },\n        set: (secret, store) => { secrets[secret] = store }\n      }\n    },\n    deriveConstraint: (req, ctx, done) => {\n      done(null, req.headers['x-secret'])\n    },\n    validate () { return true }\n  }\n\n  const fastify = Fastify({ constraints: { secret: constraint } })\n\n  fastify.route({\n    method: 'GET',\n    url: '/',\n    constraints: { secret: 'alpha' },\n    handler: (req, reply) => {\n      reply.send({ hello: 'from alpha' })\n    }\n  })\n\n  fastify.route({\n    method: 'GET',\n    url: '/',\n    constraints: { secret: 'beta' },\n    handler: (req, reply) => {\n      reply.send({ hello: 'from beta' })\n    }\n  })\n\n  {\n    const { statusCode, payload } = await fastify.inject({ method: 'GET', path: '/', headers: { 'X-Secret': 'alpha' } })\n    t.same(JSON.parse(payload), { hello: 'from alpha' })\n    t.equal(statusCode, 200)\n  }\n  {\n    const { statusCode, payload } = await fastify.inject({ method: 'GET', path: '/', headers: { 'X-Secret': 'beta' } })\n    t.same(JSON.parse(payload), { hello: 'from beta' })\n    t.equal(statusCode, 200)\n  }\n  {\n    const { statusCode } = await fastify.inject({ method: 'GET', path: '/', headers: { 'X-Secret': 'gamma' } })\n    t.equal(statusCode, 404)\n  }\n})\n\ntest('error in async constraints', async (t) => {\n  t.plan(8)\n\n  const constraint = {\n    name: 'secret',\n    storage: function () {\n      const secrets = {}\n      return {\n        get: (secret) => { return secrets[secret] || null },\n        set: (secret, store) => { secrets[secret] = store }\n      }\n    },\n    deriveConstraint: (req, ctx, done) => {\n      done(Error('kaboom'))\n    },\n    validate () { return true }\n  }\n\n  const fastify = Fastify({ constraints: { secret: constraint } })\n\n  fastify.route({\n    method: 'GET',\n    url: '/',\n    constraints: { secret: 'alpha' },\n    handler: (req, reply) => {\n      reply.send({ hello: 'from alpha' })\n    }\n  })\n\n  fastify.route({\n    method: 'GET',\n    url: '/',\n    constraints: { secret: 'beta' },\n    handler: (req, reply) => {\n      reply.send({ hello: 'from beta' })\n    }\n  })\n\n  {\n    const { statusCode, payload } = await fastify.inject({ method: 'GET', path: '/', headers: { 'X-Secret': 'alpha' } })\n    t.same(JSON.parse(payload), { error: 'Internal Server Error', message: 'Unexpected error from async constraint', statusCode: 500 })\n    t.equal(statusCode, 500)\n  }\n  {\n    const { statusCode, payload } = await fastify.inject({ method: 'GET', path: '/', headers: { 'X-Secret': 'beta' } })\n    t.same(JSON.parse(payload), { error: 'Internal Server Error', message: 'Unexpected error from async constraint', statusCode: 500 })\n    t.equal(statusCode, 500)\n  }\n  {\n    const { statusCode, payload } = await fastify.inject({ method: 'GET', path: '/', headers: { 'X-Secret': 'gamma' } })\n    t.same(JSON.parse(payload), { error: 'Internal Server Error', message: 'Unexpected error from async constraint', statusCode: 500 })\n    t.equal(statusCode, 500)\n  }\n  {\n    const { statusCode, payload } = await fastify.inject({ method: 'GET', path: '/' })\n    t.same(JSON.parse(payload), { error: 'Internal Server Error', message: 'Unexpected error from async constraint', statusCode: 500 })\n    t.equal(statusCode, 500)\n  }\n})\n/lib/pluginOverride.js\n'use strict'\n\nconst {\n  kAvvioBoot,\n  kChildren,\n  kRoutePrefix,\n  kLogLevel,\n  kLogSerializers,\n  kHooks,\n  kSchemaController,\n  kContentTypeParser,\n  kReply,\n  kRequest,\n  kFourOhFour,\n  kPluginNameChain\n} = require('./symbols.js')\n\nconst Reply = require('./reply')\nconst Request = require('./request')\nconst SchemaController = require('./schema-controller')\nconst ContentTypeParser = require('./contentTypeParser')\nconst { buildHooks } = require('./hooks')\nconst pluginUtils = require('./pluginUtils')\n\n// Function that runs the encapsulation magic.\n// Everything that need to be encapsulated must be handled in this function.\nmodule.exports = function override (old, fn, opts) {\n  const shouldSkipOverride = pluginUtils.registerPlugin.call(old, fn)\n\n  if (shouldSkipOverride) {\n    // after every plugin registration we will enter a new name\n    old[kPluginNameChain].push(pluginUtils.getDisplayName(fn))\n    return old\n  }\n\n  const instance = Object.create(old)\n  old[kChildren].push(instance)\n  instance.ready = old[kAvvioBoot].bind(instance)\n  instance[kChildren] = []\n\n  instance[kReply] = Reply.buildReply(instance[kReply])\n  instance[kRequest] = Request.buildRequest(instance[kRequest])\n\n  instance[kContentTypeParser] = ContentTypeParser.helpers.buildContentTypeParser(instance[kContentTypeParser])\n  instance[kHooks] = buildHooks(instance[kHooks])\n  instance[kRoutePrefix] = buildRoutePrefix(instance[kRoutePrefix], opts.prefix)\n  instance[kLogLevel] = opts.logLevel || instance[kLogLevel]\n  instance[kSchemaController] = SchemaController.buildSchemaController(old[kSchemaController])\n  instance.getSchema = instance[kSchemaController].getSchema.bind(instance[kSchemaController])\n  instance.getSchemas = instance[kSchemaController].getSchemas.bind(instance[kSchemaController])\n  instance[pluginUtils.registeredPlugins] = Object.create(instance[pluginUtils.registeredPlugins])\n  instance[kPluginNameChain] = [pluginUtils.getPluginName(fn) || pluginUtils.getFuncPreview(fn)]\n\n  if (instance[kLogSerializers] || opts.logSerializers) {\n    instance[kLogSerializers] = Object.assign(Object.create(instance[kLogSerializers]), opts.logSerializers)\n  }\n\n  if (opts.prefix) {\n    instance[kFourOhFour].arrange404(instance)\n  }\n\n  for (const hook of instance[kHooks].onRegister) hook.call(this, instance, opts)\n\n  return instance\n}\n\nfunction buildRoutePrefix (instancePrefix, pluginPrefix) {\n  if (!pluginPrefix) {\n    return instancePrefix\n  }\n\n  // Ensure that there is a '/' between the prefixes\n  if (instancePrefix.endsWith('/') && pluginPrefix[0] === '/') {\n    // Remove the extra '/' to avoid: '/first//second'\n    pluginPrefix = pluginPrefix.slice(1)\n  } else if (pluginPrefix[0] !== '/') {\n    pluginPrefix = '/' + pluginPrefix\n  }\n\n  return instancePrefix + pluginPrefix\n}\n/test/trust-proxy.test.js\u0013'use strict'\n\nconst t = require('tap')\nconst { test, before } = t\nconst sget = require('simple-get').concat\nconst fastify = require('..')\nconst dns = require('dns').promises\n\nconst sgetForwardedRequest = (app, forHeader, path, protoHeader) => {\n  const headers = {\n    'X-Forwarded-For': forHeader,\n    'X-Forwarded-Host': 'example.com'\n  }\n  if (protoHeader) {\n    headers['X-Forwarded-Proto'] = protoHeader\n  }\n  sget({\n    method: 'GET',\n    headers,\n    url: 'http://localhost:' + app.server.address().port + path\n  }, () => {})\n}\n\nconst testRequestValues = (t, req, options) => {\n  if (options.ip) {\n    t.ok(req.ip, 'ip is defined')\n    t.equal(req.ip, options.ip, 'gets ip from x-forwarded-for')\n  }\n  if (options.hostname) {\n    t.ok(req.hostname, 'hostname is defined')\n    t.equal(req.hostname, options.hostname, 'gets hostname from x-forwarded-host')\n  }\n  if (options.ips) {\n    t.same(req.ips, options.ips, 'gets ips from x-forwarded-for')\n  }\n  if (options.protocol) {\n    t.ok(req.protocol, 'protocol is defined')\n    t.equal(req.protocol, options.protocol, 'gets protocol from x-forwarded-proto')\n  }\n}\n\nlet localhost\n\nbefore(async function () {\n  const lookup = await dns.lookup('localhost')\n  localhost = lookup.address\n})\n\ntest('trust proxy, not add properties to node req', (t) => {\n  t.plan(8)\n  const app = fastify({\n    trustProxy: true\n  })\n  app.get('/trustproxy', function (req, reply) {\n    testRequestValues(t, req, { ip: '1.1.1.1', hostname: 'example.com' })\n    reply.code(200).send({ ip: req.ip, hostname: req.hostname })\n  })\n\n  app.get('/trustproxychain', function (req, reply) {\n    testRequestValues(t, req, { ip: '2.2.2.2', ips: [localhost, '1.1.1.1', '2.2.2.2'] })\n    reply.code(200).send({ ip: req.ip, hostname: req.hostname })\n  })\n\n  t.teardown(app.close.bind(app))\n\n  app.listen({ port: 0 }, (err) => {\n    app.server.unref()\n    t.error(err)\n    sgetForwardedRequest(app, '1.1.1.1', '/trustproxy')\n    sgetForwardedRequest(app, '2.2.2.2, 1.1.1.1', '/trustproxychain')\n  })\n})\n\ntest('trust proxy chain', (t) => {\n  t.plan(3)\n  const app = fastify({\n    trustProxy: [localhost, '192.168.1.1']\n  })\n\n  app.get('/trustproxychain', function (req, reply) {\n    testRequestValues(t, req, { ip: '1.1.1.1' })\n    reply.code(200).send({ ip: req.ip, hostname: req.hostname })\n  })\n\n  t.teardown(app.close.bind(app))\n\n  app.listen({ port: 0 }, (err) => {\n    app.server.unref()\n    t.error(err)\n    sgetForwardedRequest(app, '192.168.1.1, 1.1.1.1', '/trustproxychain')\n  })\n})\n\ntest('trust proxy function', (t) => {\n  t.plan(3)\n  const app = fastify({\n    trustProxy: (address) => address === localhost\n  })\n  app.get('/trustproxyfunc', function (req, reply) {\n    testRequestValues(t, req, { ip: '1.1.1.1' })\n    reply.code(200).send({ ip: req.ip, hostname: req.hostname })\n  })\n\n  t.teardown(app.close.bind(app))\n\n  app.listen({ port: 0 }, (err) => {\n    app.server.unref()\n    t.error(err)\n    sgetForwardedRequest(app, '1.1.1.1', '/trustproxyfunc')\n  })\n})\n\ntest('trust proxy number', (t) => {\n  t.plan(4)\n  const app = fastify({\n    trustProxy: 1\n  })\n  app.get('/trustproxynumber', function (req, reply) {\n    testRequestValues(t, req, { ip: '1.1.1.1', ips: [localhost, '1.1.1.1'] })\n    reply.code(200).send({ ip: req.ip, hostname: req.hostname })\n  })\n\n  t.teardown(app.close.bind(app))\n\n  app.listen({ port: 0 }, (err) => {\n    app.server.unref()\n    t.error(err)\n    sgetForwardedRequest(app, '2.2.2.2, 1.1.1.1', '/trustproxynumber')\n  })\n})\n\ntest('trust proxy IP addresses', (t) => {\n  t.plan(4)\n  const app = fastify({\n    trustProxy: `${localhost}, 2.2.2.2`\n  })\n  app.get('/trustproxyipaddrs', function (req, reply) {\n    testRequestValues(t, req, { ip: '1.1.1.1', ips: [localhost, '1.1.1.1'] })\n    reply.code(200).send({ ip: req.ip, hostname: req.hostname })\n  })\n\n  t.teardown(app.close.bind(app))\n\n  app.listen({ port: 0 }, (err) => {\n    app.server.unref()\n    t.error(err)\n    sgetForwardedRequest(app, '3.3.3.3, 2.2.2.2, 1.1.1.1', '/trustproxyipaddrs')\n  })\n})\n\ntest('trust proxy protocol', (t) => {\n  t.plan(13)\n  const app = fastify({\n    trustProxy: true\n  })\n  app.get('/trustproxyprotocol', function (req, reply) {\n    testRequestValues(t, req, { ip: '1.1.1.1', protocol: 'lorem' })\n    reply.code(200).send({ ip: req.ip, hostname: req.hostname })\n  })\n  app.get('/trustproxynoprotocol', function (req, reply) {\n    testRequestValues(t, req, { ip: '1.1.1.1', protocol: 'http' })\n    reply.code(200).send({ ip: req.ip, hostname: req.hostname })\n  })\n  app.get('/trustproxyprotocols', function (req, reply) {\n    testRequestValues(t, req, { ip: '1.1.1.1', protocol: 'dolor' })\n    reply.code(200).send({ ip: req.ip, hostname: req.hostname })\n  })\n\n  t.teardown(app.close.bind(app))\n\n  app.listen({ port: 0 }, (err) => {\n    app.server.unref()\n    t.error(err)\n    sgetForwardedRequest(app, '1.1.1.1', '/trustproxyprotocol', 'lorem')\n    sgetForwardedRequest(app, '1.1.1.1', '/trustproxynoprotocol')\n    sgetForwardedRequest(app, '1.1.1.1', '/trustproxyprotocols', 'ipsum, dolor')\n  })\n})\n /test/custom-http-server.test.js\u0007 'use strict'\n\nconst t = require('tap')\nconst test = t.test\nconst Fastify = require('..')\nconst http = require('http')\nconst { FST_ERR_FORCE_CLOSE_CONNECTIONS_IDLE_NOT_AVAILABLE } = require('../lib/errors')\nconst sget = require('simple-get').concat\nconst dns = require('dns').promises\n\ntest('Should support a custom http server', async t => {\n  const localAddresses = await dns.lookup('localhost', { all: true })\n\n  t.plan(localAddresses.length + 3)\n\n  const serverFactory = (handler, opts) => {\n    t.ok(opts.serverFactory, 'it is called twice for every HOST interface')\n\n    const server = http.createServer((req, res) => {\n      req.custom = true\n      handler(req, res)\n    })\n\n    return server\n  }\n\n  const fastify = Fastify({ serverFactory })\n\n  t.teardown(fastify.close.bind(fastify))\n\n  fastify.get('/', (req, reply) => {\n    t.ok(req.raw.custom)\n    reply.send({ hello: 'world' })\n  })\n\n  await fastify.listen({ port: 0 })\n\n  await new Promise((resolve, reject) => {\n    sget({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port,\n      rejectUnauthorized: false\n    }, (err, response, body) => {\n      if (err) {\n        return reject(err)\n      }\n      t.equal(response.statusCode, 200)\n      t.same(JSON.parse(body), { hello: 'world' })\n      resolve()\n    })\n  })\n})\n\ntest('Should not allow forceCloseConnection=idle if the server does not support closeIdleConnections', t => {\n  t.plan(1)\n\n  t.throws(\n    () => {\n      Fastify({\n        forceCloseConnections: 'idle',\n        serverFactory (handler, opts) {\n          return {\n            on () {\n\n            }\n          }\n        }\n      })\n    },\n    FST_ERR_FORCE_CLOSE_CONNECTIONS_IDLE_NOT_AVAILABLE,\n    \"Cannot set forceCloseConnections to 'idle' as your HTTP server does not support closeIdleConnections method\"\n  )\n})\n!/test/patch.error-handler.test.jsē'use strict'\n\nconst t = require('tap')\nrequire('./helper').payloadMethod('patch', t, true)\nrequire('./input-validation').payloadMethod('patch', t)\n/types/register.d.ts\b]import { FastifyPluginOptions, FastifyPluginCallback, FastifyPluginAsync } from './plugin'\nimport { LogLevel } from './logger'\nimport { FastifyInstance } from './instance'\nimport { RawServerBase } from './utils'\nimport { FastifyBaseLogger, FastifyTypeProvider, RawServerDefault } from '../fastify'\n\nexport interface RegisterOptions {\n  prefix?: string;\n  logLevel?: LogLevel;\n  logSerializers?: Record<string, (value: any) => string>;\n}\n\nexport type FastifyRegisterOptions<Options> = (RegisterOptions & Options) | ((instance: FastifyInstance) => RegisterOptions & Options)\n\n/**\n * FastifyRegister\n *\n * Function for adding a plugin to fastify. The options are inferred from the passed in FastifyPlugin parameter.\n */\nexport interface FastifyRegister<T = void, RawServer extends RawServerBase = RawServerDefault, TypeProviderDefault extends FastifyTypeProvider = FastifyTypeProvider, LoggerDefault extends FastifyBaseLogger = FastifyBaseLogger> {\n  <Options extends FastifyPluginOptions, Server extends RawServerBase = RawServer, TypeProvider extends FastifyTypeProvider = TypeProviderDefault, Logger extends FastifyBaseLogger = LoggerDefault>(\n    plugin: FastifyPluginCallback<Options, Server, TypeProvider, Logger>,\n    opts?: FastifyRegisterOptions<Options>\n  ): T;\n  <Options extends FastifyPluginOptions, Server extends RawServerBase = RawServer, TypeProvider extends FastifyTypeProvider = TypeProviderDefault, Logger extends FastifyBaseLogger = LoggerDefault>(\n    plugin: FastifyPluginAsync<Options, Server, TypeProvider, Logger>,\n    opts?: FastifyRegisterOptions<Options>\n  ): T;\n  <Options extends FastifyPluginOptions, Server extends RawServerBase = RawServer, TypeProvider extends FastifyTypeProvider = TypeProviderDefault, Logger extends FastifyBaseLogger = LoggerDefault>(\n    plugin: FastifyPluginCallback<Options, Server, TypeProvider, Logger> | FastifyPluginAsync<Options, Server, TypeProvider, Logger> | Promise<{ default: FastifyPluginCallback<Options, Server, TypeProvider, Logger> }> | Promise<{ default: FastifyPluginAsync<Options, Server, TypeProvider, Logger> }>,\n    opts?: FastifyRegisterOptions<Options>\n  ): T;\n}\n$/test/build/error-serializer.test.js\u0003'use strict'\n\nconst t = require('tap')\nconst test = t.test\nconst fs = require('fs')\nconst path = require('path')\n\nconst { code } = require('../../build/build-error-serializer')\n\nfunction unifyLineBreak (str) {\n  return str.toString().replace(/\\r\\n/g, '\\n')\n}\n\ntest('check generated code syntax', async (t) => {\n  t.plan(1)\n\n  // standard is a esm, we import it like this\n  const { default: standard } = await import('standard')\n  const result = await standard.lintText(code)\n\n  // if there are any invalid syntax\n  // fatal count will be greater than 0\n  t.equal(result[0].fatalErrorCount, 0)\n})\n\nconst isPrebublish = !!process.env.PREPUBLISH\n\ntest('ensure the current error serializer is latest', { skip: !isPrebublish }, async (t) => {\n  t.plan(1)\n\n  const current = await fs.promises.readFile(path.resolve('lib/error-serializer.js'))\n\n  // line break should not be a problem depends on system\n  t.equal(unifyLineBreak(current), unifyLineBreak(code))\n})\n/lib/context.js\nq'use strict'\n\nconst {\n  kFourOhFourContext,\n  kReplySerializerDefault,\n  kSchemaErrorFormatter,\n  kErrorHandler,\n  kReply,\n  kRequest,\n  kBodyLimit,\n  kLogLevel,\n  kContentTypeParser,\n  kRouteByFastify,\n  kRequestCacheValidateFns,\n  kReplyCacheSerializeFns,\n  kPublicRouteContext\n} = require('./symbols.js')\n\n// Object that holds the context of every request\n// Every route holds an instance of this object.\nfunction Context ({\n  schema,\n  handler,\n  config,\n  errorHandler,\n  bodyLimit,\n  logLevel,\n  logSerializers,\n  attachValidation,\n  validatorCompiler,\n  serializerCompiler,\n  replySerializer,\n  schemaErrorFormatter,\n  exposeHeadRoute,\n  prefixTrailingSlash,\n  server,\n  isFastify\n}) {\n  this.schema = schema\n  this.handler = handler\n  this.Reply = server[kReply]\n  this.Request = server[kRequest]\n  this.contentTypeParser = server[kContentTypeParser]\n  this.onRequest = null\n  this.onSend = null\n  this.onError = null\n  this.onTimeout = null\n  this.preHandler = null\n  this.onResponse = null\n  this.preSerialization = null\n  this.onRequestAbort = null\n  this.config = config\n  this.errorHandler = errorHandler || server[kErrorHandler]\n  this._middie = null\n  this._parserOptions = {\n    limit: bodyLimit || server[kBodyLimit]\n  }\n  this.exposeHeadRoute = exposeHeadRoute\n  this.prefixTrailingSlash = prefixTrailingSlash\n  this.logLevel = logLevel || server[kLogLevel]\n  this.logSerializers = logSerializers\n  this[kFourOhFourContext] = null\n  this.attachValidation = attachValidation\n  this[kReplySerializerDefault] = replySerializer\n  this.schemaErrorFormatter =\n    schemaErrorFormatter ||\n    server[kSchemaErrorFormatter] ||\n    defaultSchemaErrorFormatter\n  this[kRouteByFastify] = isFastify\n\n  this[kRequestCacheValidateFns] = null\n  this[kReplyCacheSerializeFns] = null\n  this.validatorCompiler = validatorCompiler || null\n  this.serializerCompiler = serializerCompiler || null\n\n  // Route + Userland configurations for the route\n  this[kPublicRouteContext] = getPublicRouteContext(this)\n\n  this.server = server\n}\n\nfunction getPublicRouteContext (context) {\n  return Object.create(null, {\n    schema: {\n      enumerable: true,\n      get () {\n        return context.schema\n      }\n    },\n    config: {\n      enumerable: true,\n      get () {\n        return context.config\n      }\n    }\n  })\n}\n\nfunction defaultSchemaErrorFormatter (errors, dataVar) {\n  let text = ''\n  const separator = ', '\n\n  // eslint-disable-next-line no-var\n  for (var i = 0; i !== errors.length; ++i) {\n    const e = errors[i]\n    text += dataVar + (e.instancePath || '') + ' ' + e.message + separator\n  }\n  return new Error(text.slice(0, -separator.length))\n}\n\nmodule.exports = Context\n//docs/Reference/Validation-and-Serialization.mdf\r<h1 align=\"center\">Fastify</h1>\n\n## Validation and Serialization\nFastify uses a schema-based approach, and even if it is not mandatory we\nrecommend using [JSON Schema](https://json-schema.org/) to validate your routes\nand serialize your outputs. Internally, Fastify compiles the schema into a\nhighly performant function.\n\nValidation will only be attempted if the content type is `application-json`, as\ndescribed in the documentation for the [content type\nparser](./ContentTypeParser.md).\n\nAll the examples in this section are using the [JSON Schema Draft\n7](https://json-schema.org/specification-links.html#draft-7) specification.\n\n> ## ⚠  Security Notice\n> Treat the schema definition as application code. Validation and serialization\n> features dynamically evaluate code with `new Function()`, which is not safe to\n> use with user-provided schemas. See [Ajv](https://npm.im/ajv) and\n> [fast-json-stringify](https://npm.im/fast-json-stringify) for more details.\n>\n> Moreover, the [`$async` Ajv\n> feature](https://ajv.js.org/guide/async-validation.html) should not be used as\n> part of the first validation strategy. This option is used to access Databases\n> and reading them during the validation process may lead to Denial of Service\n> Attacks to your application. If you need to run `async` tasks, use [Fastify's\n> hooks](./Hooks.md) instead after validation completes, such as `preHandler`.\n\n\n### Core concepts\nThe validation and the serialization tasks are processed by two different, and\ncustomizable, actors:\n- [Ajv v8](https://www.npmjs.com/package/ajv) for the validation of a request\n- [fast-json-stringify](https://www.npmjs.com/package/fast-json-stringify) for\n  the serialization of a response's body\n\nThese two separate entities share only the JSON schemas added to Fastify's\ninstance through `.addSchema(schema)`.\n\n#### Adding a shared schema\n<a id=\"shared-schema\"></a>\n\nThanks to the `addSchema` API, you can add multiple schemas to the Fastify\ninstance and then reuse them in multiple parts of your application. As usual,\nthis API is encapsulated.\n\nThe shared schemas can be reused through the JSON Schema\n[**`$ref`**](https://tools.ietf.org/html/draft-handrews-json-schema-01#section-8)\nkeyword. Here is an overview of _how_ references work:\n\n+ `myField: { $ref: '#foo'}` will search for field with `$id: '#foo'` inside the\n  current schema\n+ `myField: { $ref: '#/definitions/foo'}` will search for field\n  `definitions.foo` inside the current schema\n+ `myField: { $ref: 'http://url.com/sh.json#'}` will search for a shared schema\n  added with `$id: 'http://url.com/sh.json'`\n+ `myField: { $ref: 'http://url.com/sh.json#/definitions/foo'}` will search for\n  a shared schema added with `$id: 'http://url.com/sh.json'` and will use the\n  field `definitions.foo`\n+ `myField: { $ref: 'http://url.com/sh.json#foo'}` will search for a shared\n  schema added with `$id: 'http://url.com/sh.json'` and it will look inside of\n  it for object with `$id: '#foo'`\n\n\n**Simple usage:**\n\n```js\nfastify.addSchema({\n  $id: 'http://example.com/',\n  type: 'object',\n  properties: {\n    hello: { type: 'string' }\n  }\n})\n\nfastify.post('/', {\n  handler () {},\n  schema: {\n    body: {\n      type: 'array',\n      items: { $ref: 'http://example.com#/properties/hello' }\n    }\n  }\n})\n```\n\n**`$ref` as root reference:**\n\n```js\nfastify.addSchema({\n  $id: 'commonSchema',\n  type: 'object',\n  properties: {\n    hello: { type: 'string' }\n  }\n})\n\nfastify.post('/', {\n  handler () {},\n  schema: {\n    body: { $ref: 'commonSchema#' },\n    headers: { $ref: 'commonSchema#' }\n  }\n})\n```\n\n#### Retrieving the shared schemas\n<a id=\"get-shared-schema\"></a>\n\nIf the validator and the serializer are customized, the `.addSchema` method will\nnot be useful since the actors are no longer controlled by Fastify. To access\nthe schemas added to the Fastify instance, you can simply use `.getSchemas()`:\n\n```js\nfastify.addSchema({\n  $id: 'schemaId',\n  type: 'object',\n  properties: {\n    hello: { type: 'string' }\n  }\n})\n\nconst mySchemas = fastify.getSchemas()\nconst mySchema = fastify.getSchema('schemaId')\n```\n\nAs usual, the function `getSchemas` is encapsulated and returns the shared\nschemas available in the selected scope:\n\n```js\nfastify.addSchema({ $id: 'one', my: 'hello' })\n// will return only `one` schema\nfastify.get('/', (request, reply) => { reply.send(fastify.getSchemas()) })\n\nfastify.register((instance, opts, done) => {\n  instance.addSchema({ $id: 'two', my: 'ciao' })\n  // will return `one` and `two` schemas\n  instance.get('/sub', (request, reply) => { reply.send(instance.getSchemas()) })\n\n  instance.register((subinstance, opts, done) => {\n    subinstance.addSchema({ $id: 'three', my: 'hola' })\n    // will return `one`, `two` and `three`\n    subinstance.get('/deep', (request, reply) => { reply.send(subinstance.getSchemas()) })\n    done()\n  })\n  done()\n})\n```\n\n\n### Validation\nThe route validation internally relies upon [Ajv\nv8](https://www.npmjs.com/package/ajv) which is a high-performance JSON Schema\nvalidator. Validating the input is very easy: just add the fields that you need\ninside the route schema, and you are done!\n\nThe supported validations are:\n- `body`: validates the body of the request if it is a POST, PUT, or PATCH\n  method.\n- `querystring` or `query`: validates the query string.\n- `params`: validates the route params.\n- `headers`: validates the request headers.\n\nAll the validations can be a complete JSON Schema object (with a `type` property\nof `'object'` and a `'properties'` object containing parameters) or a simpler\nvariation in which the `type` and `properties` attributes are forgone and the\nparameters are listed at the top level (see the example below).\n\n> ℹ If you need to use the latest version of Ajv (v8) you should read how to do\n> it in the [`schemaController`](./Server.md#schema-controller) section.\n\nExample:\n```js\nconst bodyJsonSchema = {\n  type: 'object',\n  required: ['requiredKey'],\n  properties: {\n    someKey: { type: 'string' },\n    someOtherKey: { type: 'number' },\n    requiredKey: {\n      type: 'array',\n      maxItems: 3,\n      items: { type: 'integer' }\n    },\n    nullableKey: { type: ['number', 'null'] }, // or { type: 'number', nullable: true }\n    multipleTypesKey: { type: ['boolean', 'number'] },\n    multipleRestrictedTypesKey: {\n      oneOf: [\n        { type: 'string', maxLength: 5 },\n        { type: 'number', minimum: 10 }\n      ]\n    },\n    enumKey: {\n      type: 'string',\n      enum: ['John', 'Foo']\n    },\n    notTypeKey: {\n      not: { type: 'array' }\n    }\n  }\n}\n\nconst queryStringJsonSchema = {\n  type: 'object',\n  properties: {\n    name: { type: 'string' },\n    excitement: { type: 'integer' }\n  }\n}\n\nconst paramsJsonSchema = {\n  type: 'object',\n  properties: {\n    par1: { type: 'string' },\n    par2: { type: 'number' }\n  }\n}\n\nconst headersJsonSchema = {\n  type: 'object',\n  properties: {\n    'x-foo': { type: 'string' }\n  },\n  required: ['x-foo']\n}\n\nconst schema = {\n  body: bodyJsonSchema,\n  querystring: queryStringJsonSchema,\n  params: paramsJsonSchema,\n  headers: headersJsonSchema\n}\n\nfastify.post('/the/url', { schema }, handler)\n```\n\n*Note that Ajv will try to [coerce](https://ajv.js.org/coercion.html) the values\nto the types specified in your schema `type` keywords, both to pass the\nvalidation and to use the correctly typed data afterwards.*\n\nThe Ajv default configuration in Fastify supports coercing array parameters in\n`querystring`. Example:\n\n```js\nconst opts = {\n  schema: {\n    querystring: {\n      type: 'object',\n      properties: {\n        ids: {\n          type: 'array',\n          default: []\n        },\n      },\n    }\n  }\n}\n\nfastify.get('/', opts, (request, reply) => {\n  reply.send({ params: request.query }) // echo the querystring\n})\n\nfastify.listen({ port: 3000 }, (err) => {\n  if (err) throw err\n})\n```\n\n```sh\ncurl -X GET \"http://localhost:3000/?ids=1\n\n{\"params\":{\"ids\":[\"1\"]}}\n```\n\nYou can also specify a custom schema validator for each parameter type (body,\nquerystring, params, headers).\n\nFor example, the following code disable type coercion only for the `body`\nparameters, changing the ajv default options:\n\n```js\nconst schemaCompilers = {\n  body: new Ajv({\n    removeAdditional: false,\n    coerceTypes: false,\n    allErrors: true\n  }),\n  params: new Ajv({\n    removeAdditional: false,\n    coerceTypes: true,\n    allErrors: true\n  }),\n  querystring: new Ajv({\n    removeAdditional: false,\n    coerceTypes: true,\n    allErrors: true\n  }),\n  headers: new Ajv({\n    removeAdditional: false,\n    coerceTypes: true,\n    allErrors: true\n  })\n}\n\nserver.setValidatorCompiler(req => {\n    if (!req.httpPart) {\n      throw new Error('Missing httpPart')\n    }\n    const compiler = schemaCompilers[req.httpPart]\n    if (!compiler) {\n      throw new Error(`Missing compiler for ${req.httpPart}`)\n    }\n    return compiler.compile(req.schema)\n})\n```\n\nFor further information see [here](https://ajv.js.org/coercion.html)\n\n#### Ajv Plugins\n<a id=\"ajv-plugins\"></a>\n\nYou can provide a list of plugins you want to use with the default `ajv`\ninstance. Note that the plugin must be **compatible with the Ajv version shipped\nwithin Fastify**.\n\n> Refer to [`ajv options`](./Server.md#ajv) to check plugins format\n\n```js\nconst fastify = require('fastify')({\n  ajv: {\n    plugins: [\n      require('ajv-merge-patch')\n    ]\n  }\n})\n\nfastify.post('/', {\n  handler (req, reply) { reply.send({ ok: 1 }) },\n  schema: {\n    body: {\n      $patch: {\n        source: {\n          type: 'object',\n          properties: {\n            q: {\n              type: 'string'\n            }\n          }\n        },\n        with: [\n          {\n            op: 'add',\n            path: '/properties/q',\n            value: { type: 'number' }\n          }\n        ]\n      }\n    }\n  }\n})\n\nfastify.post('/foo', {\n  handler (req, reply) { reply.send({ ok: 1 }) },\n  schema: {\n    body: {\n      $merge: {\n        source: {\n          type: 'object',\n          properties: {\n            q: {\n              type: 'string'\n            }\n          }\n        },\n        with: {\n          required: ['q']\n        }\n      }\n    }\n  }\n})\n```\n\n#### Validator Compiler\n<a id=\"schema-validator\"></a>\n\nThe `validatorCompiler` is a function that returns a function that validates the\nbody, URL  parameters, headers, and query string. The default\n`validatorCompiler` returns a function that implements the\n[ajv](https://ajv.js.org/) validation interface. Fastify uses it internally to\nspeed the validation up.\n\nFastify's [baseline ajv\nconfiguration](https://github.com/fastify/ajv-compiler#ajv-configuration) is:\n\n```js\n{\n  coerceTypes: 'array', // change data type of data to match type keyword\n  useDefaults: true, // replace missing properties and items with the values from corresponding default keyword\n  removeAdditional: true, // remove additional properties\n  uriResolver: require('fast-uri'),\n  addUsedSchema: false,\n  // Explicitly set allErrors to `false`.\n  // When set to `true`, a DoS attack is possible.\n  allErrors: false\n}\n```\n\nThis baseline configuration can be modified by providing\n[`ajv.customOptions`](./Server.md#factory-ajv) to your Fastify factory.\n\nIf you want to change or set additional config options, you will need to create\nyour own instance and override the existing one like:\n\n```js\nconst fastify = require('fastify')()\nconst Ajv = require('ajv')\nconst ajv = new Ajv({\n  removeAdditional: 'all',\n  useDefaults: true,\n  coerceTypes: 'array',\n  // any other options\n  // ...\n})\nfastify.setValidatorCompiler(({ schema, method, url, httpPart }) => {\n  return ajv.compile(schema)\n})\n```\n_**Note:** If you use a custom instance of any validator (even Ajv), you have to\nadd schemas to the validator instead of Fastify, since Fastify's default\nvalidator is no longer used, and Fastify's `addSchema` method has no idea what\nvalidator you are using._\n\n##### Using other validation libraries\n<a id=\"using-other-validation-libraries\"></a>\n\nThe `setValidatorCompiler` function makes it easy to substitute `ajv` with\nalmost any Javascript validation library ([joi](https://github.com/hapijs/joi/),\n[yup](https://github.com/jquense/yup/), ...) or a custom one:\n\n```js\nconst Joi = require('joi')\n\nfastify.post('/the/url', {\n  schema: {\n    body: Joi.object().keys({\n      hello: Joi.string().required()\n    }).required()\n  },\n  validatorCompiler: ({ schema, method, url, httpPart }) => {\n    return data => schema.validate(data)\n  }\n}, handler)\n```\n\n```js\nconst yup = require('yup')\n// Validation options to match ajv's baseline options used in Fastify\nconst yupOptions = {\n  strict: false,\n  abortEarly: false, // return all errors\n  stripUnknown: true, // remove additional properties\n  recursive: true\n}\n\nfastify.post('/the/url', {\n  schema: {\n    body: yup.object({\n      age: yup.number().integer().required(),\n      sub: yup.object().shape({\n        name: yup.string().required()\n      }).required()\n    })\n  },\n  validatorCompiler: ({ schema, method, url, httpPart }) => {\n    return function (data) {\n      // with option strict = false, yup `validateSync` function returns the\n      // coerced value if validation was successful, or throws if validation failed\n      try {\n        const result = schema.validateSync(data, yupOptions)\n        return { value: result }\n      } catch (e) {\n        return { error: e }\n      }\n    }\n  }\n}, handler)\n```\n\n##### .statusCode property\n\nAll validation errors will be added a `.statusCode` property set to `400`. This guarantees\nthat the default error handler will set the status code of the response to `400`.\n\n```js\nfastify.setErrorHandler(function (error, request, reply) {\n  request.log.error(error, `This error has status code ${error.statusCode}`)\n  reply.status(error.statusCode).send(error)\n})\n```\n\n##### Validation messages with other validation libraries\n\nFastify's validation error messages are tightly coupled to the default\nvalidation engine: errors returned from `ajv` are eventually run through the\n`schemaErrorFormatter` function which is responsible for building human-friendly\nerror messages. However, the `schemaErrorFormatter` function is written with\n`ajv` in mind. As a result, you may run into odd or incomplete error messages\nwhen using other validation libraries.\n\nTo circumvent this issue, you have 2 main options :\n\n1. make sure your validation function (returned by your custom `schemaCompiler`)\n   returns errors in the same structure and format as `ajv` (although this could\n   prove to be difficult and tricky due to differences between validation\n   engines)\n2. or use a custom `errorHandler` to intercept and format your 'custom'\n   validation errors\n\nTo help you in writing a custom `errorHandler`, Fastify adds 2 properties to all\nvalidation errors:\n\n* `validation`: the content of the `error` property of the object returned by\n  the validation function (returned by your custom `schemaCompiler`)\n* `validationContext`: the 'context' (body, params, query, headers) where the\n  validation error occurred\n\nA very contrived example of such a custom `errorHandler` handling validation\nerrors is shown below:\n\n```js\nconst errorHandler = (error, request, reply) => {\n  const statusCode = error.statusCode\n  let response\n\n  const { validation, validationContext } = error\n\n  // check if we have a validation error\n  if (validation) {\n    response = {\n      // validationContext will be 'body' or 'params' or 'headers' or 'query'\n      message: `A validation error occurred when validating the ${validationContext}...`,\n      // this is the result of your validation library...\n      errors: validation\n    }\n  } else {\n    response = {\n      message: 'An error occurred...'\n    }\n  }\n\n  // any additional work here, eg. log error\n  // ...\n\n  reply.status(statusCode).send(response)\n}\n```\n\n### Serialization\n<a id=\"serialization\"></a>\n\nUsually, you will send your data to the clients as JSON, and Fastify has a\npowerful tool to help you,\n[fast-json-stringify](https://www.npmjs.com/package/fast-json-stringify), which\nis used if you have provided an output schema in the route options. We encourage\nyou to use an output schema, as it can drastically increase throughput and help\nprevent accidental disclosure of sensitive information.\n\nExample:\n```js\nconst schema = {\n  response: {\n    200: {\n      type: 'object',\n      properties: {\n        value: { type: 'string' },\n        otherValue: { type: 'boolean' }\n      }\n    }\n  }\n}\n\nfastify.post('/the/url', { schema }, handler)\n```\n\nAs you can see, the response schema is based on the status code. If you want to\nuse the same schema for multiple status codes, you can use `'2xx'` or `default`,\nfor example:\n```js\nconst schema = {\n  response: {\n    default: {\n      type: 'object',\n      properties: {\n        error: {\n          type: 'boolean',\n          default: true\n        }\n      }\n    },\n    '2xx': {\n      type: 'object',\n      properties: {\n        value: { type: 'string' },\n        otherValue: { type: 'boolean' }\n      }\n    },\n    201: {\n      // the contract syntax\n      value: { type: 'string' }\n    }\n  }\n}\n\nfastify.post('/the/url', { schema }, handler)\n```\nYou can even have a specific response schema for different content types.\nFor example:\n```js\nconst schema = {\n      response: {\n        200: {\n          description: 'Response schema that support different content types'\n          content: {\n            'application/json': {\n              schema: {\n                name: { type: 'string' },\n                image: { type: 'string' },\n                address: { type: 'string' }\n              }\n            },\n            'application/vnd.v1+json': {\n              schema: {\n                type: 'array',\n                items: { $ref: 'test' }\n              }\n            }\n          }\n        },\n        '3xx': {\n          content: {\n            'application/vnd.v2+json': {\n              schema: {\n                fullName: { type: 'string' },\n                phone: { type: 'string' }\n              }\n            }\n          }\n        }\n      }\n    }\n\nfastify.post('/url', { schema }, handler)\n```\n\n#### Serializer Compiler\n<a id=\"schema-serializer\"></a>\n\nThe `serializerCompiler` is a function that returns a function that must return\na string from an input object. When you define a response JSON Schema, you can\nchange the default serialization method by providing a function to serialize\nevery route where you do.\n\n```js\nfastify.setSerializerCompiler(({ schema, method, url, httpStatus, contentType }) => {\n  return data => JSON.stringify(data)\n})\n\nfastify.get('/user', {\n  handler (req, reply) {\n    reply.send({ id: 1, name: 'Foo', image: 'BIG IMAGE' })\n  },\n  schema: {\n    response: {\n      '2xx': {\n        id: { type: 'number' },\n        name: { type: 'string' }\n      }\n    }\n  }\n})\n```\n\n*If you need a custom serializer in a very specific part of your code, you can\nset one with [`reply.serializer(...)`](./Reply.md#serializerfunc).*\n\n### Error Handling\nWhen schema validation fails for a request, Fastify will automatically return a\nstatus 400 response including the result from the validator in the payload. As\nan example, if you have the following schema for your route\n\n```js\nconst schema = {\n  body: {\n    type: 'object',\n    properties: {\n      name: { type: 'string' }\n    },\n    required: ['name']\n  }\n}\n```\n\nand fail to satisfy it, the route will immediately return a response with the\nfollowing payload\n\n```js\n{\n  \"statusCode\": 400,\n  \"error\": \"Bad Request\",\n  \"message\": \"body should have required property 'name'\"\n}\n```\n\nIf you want to handle errors inside the route, you can specify the\n`attachValidation` option for your route. If there is a _validation error_, the\n`validationError` property of the request will contain the `Error` object with\nthe raw `validation` result as shown below\n\n```js\nconst fastify = Fastify()\n\nfastify.post('/', { schema, attachValidation: true }, function (req, reply) {\n  if (req.validationError) {\n    // `req.validationError.validation` contains the raw validation error\n    reply.code(400).send(req.validationError)\n  }\n})\n```\n\n#### `schemaErrorFormatter`\n\nIf you want to format errors yourself, you can provide a sync function that must\nreturn an error as the `schemaErrorFormatter` option to Fastify when\ninstantiating. The context function will be the Fastify server instance.\n\n`errors` is an array of Fastify schema errors `FastifySchemaValidationError`.\n`dataVar` is the currently validated part of the schema. (params | body |\nquerystring | headers).\n\n```js\nconst fastify = Fastify({\n  schemaErrorFormatter: (errors, dataVar) => {\n    // ... my formatting logic\n    return new Error(myErrorMessage)\n  }\n})\n\n// or\nfastify.setSchemaErrorFormatter(function (errors, dataVar) {\n  this.log.error({ err: errors }, 'Validation failed')\n  // ... my formatting logic\n  return new Error(myErrorMessage)\n})\n```\n\nYou can also use [setErrorHandler](./Server.md#seterrorhandler) to define a\ncustom response for validation errors such as\n\n```js\nfastify.setErrorHandler(function (error, request, reply) {\n  if (error.validation) {\n     reply.status(422).send(new Error('validation failed'))\n  }\n})\n```\n\nIf you want a custom error response in the schema without headaches, and\nquickly, take a look at\n[`ajv-errors`](https://github.com/epoberezkin/ajv-errors). Check out the\n[example](https://github.com/fastify/example/blob/HEAD/validation-messages/custom-errors-messages.js)\nusage.\n> Make sure to install version 1.0.1 of `ajv-errors`, because later versions of\n> it are not compatible with AJV v6 (the version shipped by Fastify v3).\n\nBelow is an example showing how to add **custom error messages for each\nproperty** of a schema by supplying custom AJV options. Inline comments in the\nschema below describe how to configure it to show a different error message for\neach case:\n\n```js\nconst fastify = Fastify({\n  ajv: {\n    customOptions: {\n      jsonPointers: true,\n      // Warning: Enabling this option may lead to this security issue https://www.cvedetails.com/cve/CVE-2020-8192/\n      allErrors: true\n    },\n    plugins: [\n      require('ajv-errors')\n    ]\n  }\n})\n\nconst schema = {\n  body: {\n    type: 'object',\n    properties: {\n      name: {\n        type: 'string',\n        errorMessage: {\n          type: 'Bad name'\n        }\n      },\n      age: {\n        type: 'number',\n        errorMessage: {\n          type: 'Bad age', // specify custom message for\n          min: 'Too young' // all constraints except required\n        }\n      }\n    },\n    required: ['name', 'age'],\n    errorMessage: {\n      required: {\n        name: 'Why no name!', // specify error message for when the\n        age: 'Why no age!' // property is missing from input\n      }\n    }\n  }\n}\n\nfastify.post('/', { schema, }, (request, reply) => {\n  reply.send({\n    hello: 'world'\n  })\n})\n```\n\nIf you want to return localized error messages, take a look at\n[ajv-i18n](https://github.com/epoberezkin/ajv-i18n)\n\n```js\nconst localize = require('ajv-i18n')\n\nconst fastify = Fastify()\n\nconst schema = {\n  body: {\n    type: 'object',\n    properties: {\n      name: {\n        type: 'string',\n      },\n      age: {\n        type: 'number',\n      }\n    },\n    required: ['name', 'age'],\n  }\n}\n\nfastify.setErrorHandler(function (error, request, reply) {\n  if (error.validation) {\n    localize.ru(error.validation)\n    reply.status(400).send(error.validation)\n    return\n  }\n  reply.send(error)\n})\n```\n\n### JSON Schema support\n\nJSON Schema provides utilities to optimize your schemas that, in conjunction\nwith Fastify's shared schema, let you reuse all your schemas easily.\n\n| Use Case                          | Validator | Serializer |\n|-----------------------------------|-----------|------------|\n| `$ref` to `$id`                   | ️️✔️ | ✔️ |\n| `$ref` to `/definitions`          | ✔️ | ✔️ |\n| `$ref` to shared schema `$id`          | ✔️ | ✔️ |\n| `$ref` to shared schema `/definitions` | ✔️ | ✔️ |\n\n#### Examples\n\n##### Usage of `$ref` to `$id` in same JSON Schema\n\n```js\nconst refToId = {\n  type: 'object',\n  definitions: {\n    foo: {\n      $id: '#address',\n      type: 'object',\n      properties: {\n        city: { type: 'string' }\n      }\n    }\n  },\n  properties: {\n    home: { $ref: '#address' },\n    work: { $ref: '#address' }\n  }\n}\n```\n\n\n##### Usage of `$ref` to `/definitions` in same JSON Schema\n```js\nconst refToDefinitions = {\n  type: 'object',\n  definitions: {\n    foo: {\n      $id: '#address',\n      type: 'object',\n      properties: {\n        city: { type: 'string' }\n      }\n    }\n  },\n  properties: {\n    home: { $ref: '#/definitions/foo' },\n    work: { $ref: '#/definitions/foo' }\n  }\n}\n```\n\n##### Usage `$ref` to a shared schema `$id` as external schema\n```js\nfastify.addSchema({\n  $id: 'http://foo/common.json',\n  type: 'object',\n  definitions: {\n    foo: {\n      $id: '#address',\n      type: 'object',\n      properties: {\n        city: { type: 'string' }\n      }\n    }\n  }\n})\n\nconst refToSharedSchemaId = {\n  type: 'object',\n  properties: {\n    home: { $ref: 'http://foo/common.json#address' },\n    work: { $ref: 'http://foo/common.json#address' }\n  }\n}\n```\n\n##### Usage `$ref` to a shared schema `/definitions` as external schema\n```js\nfastify.addSchema({\n  $id: 'http://foo/shared.json',\n  type: 'object',\n  definitions: {\n    foo: {\n      type: 'object',\n      properties: {\n        city: { type: 'string' }\n      }\n    }\n  }\n})\n\nconst refToSharedSchemaDefinitions = {\n  type: 'object',\n  properties: {\n    home: { $ref: 'http://foo/shared.json#/definitions/foo' },\n    work: { $ref: 'http://foo/shared.json#/definitions/foo' }\n  }\n}\n```\n\n### Resources\n<a id=\"resources\"></a>\n\n- [JSON Schema](https://json-schema.org/)\n- [Understanding JSON\n  Schema](https://spacetelescope.github.io/understanding-json-schema/)\n- [fast-json-stringify\n  documentation](https://github.com/fastify/fast-json-stringify)\n- [Ajv documentation](https://github.com/epoberezkin/ajv/blob/master/README.md)\n- [Ajv i18n](https://github.com/epoberezkin/ajv-i18n)\n- [Ajv custom errors](https://github.com/epoberezkin/ajv-errors)\n- Custom error handling with core methods with error file dumping\n  [example](https://github.com/fastify/example/tree/master/validation-messages)\n/test/reply-trailers.test.js-\u001f'use strict'\n\nconst t = require('tap')\nconst test = t.test\nconst Fastify = require('..')\nconst { Readable } = require('stream')\nconst { createHash } = require('crypto')\nconst { promisify } = require('util')\nconst sleep = promisify(setTimeout)\n\ntest('send trailers when payload is empty string', t => {\n  t.plan(5)\n\n  const fastify = Fastify()\n\n  fastify.get('/', function (request, reply) {\n    reply.trailer('ETag', function (reply, payload, done) {\n      done(null, 'custom-etag')\n    })\n    reply.send('')\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/'\n  }, (error, res) => {\n    t.error(error)\n    t.equal(res.statusCode, 200)\n    t.equal(res.headers.trailer, 'etag')\n    t.equal(res.trailers.etag, 'custom-etag')\n    t.notHas(res.headers, 'content-length')\n  })\n})\n\ntest('send trailers when payload is empty buffer', t => {\n  t.plan(5)\n\n  const fastify = Fastify()\n\n  fastify.get('/', function (request, reply) {\n    reply.trailer('ETag', function (reply, payload, done) {\n      done(null, 'custom-etag')\n    })\n    reply.send(Buffer.alloc(0))\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/'\n  }, (error, res) => {\n    t.error(error)\n    t.equal(res.statusCode, 200)\n    t.equal(res.headers.trailer, 'etag')\n    t.equal(res.trailers.etag, 'custom-etag')\n    t.notHas(res.headers, 'content-length')\n  })\n})\n\ntest('send trailers when payload is undefined', t => {\n  t.plan(5)\n\n  const fastify = Fastify()\n\n  fastify.get('/', function (request, reply) {\n    reply.trailer('ETag', function (reply, payload, done) {\n      done(null, 'custom-etag')\n    })\n    reply.send(undefined)\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/'\n  }, (error, res) => {\n    t.error(error)\n    t.equal(res.statusCode, 200)\n    t.equal(res.headers.trailer, 'etag')\n    t.equal(res.trailers.etag, 'custom-etag')\n    t.notHas(res.headers, 'content-length')\n  })\n})\n\ntest('send trailers when payload is json', t => {\n  t.plan(7)\n\n  const fastify = Fastify()\n  const data = JSON.stringify({ hello: 'world' })\n  const hash = createHash('md5')\n  hash.update(data)\n  const md5 = hash.digest('hex')\n\n  fastify.get('/', function (request, reply) {\n    reply.trailer('Content-MD5', function (reply, payload, done) {\n      t.equal(data, payload)\n      const hash = createHash('md5')\n      hash.update(payload)\n      done(null, hash.digest('hex'))\n    })\n    reply.send(data)\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/'\n  }, (error, res) => {\n    t.error(error)\n    t.equal(res.statusCode, 200)\n    t.equal(res.headers['transfer-encoding'], 'chunked')\n    t.equal(res.headers.trailer, 'content-md5')\n    t.equal(res.trailers['content-md5'], md5)\n    t.notHas(res.headers, 'content-length')\n  })\n})\n\ntest('send trailers when payload is stream', t => {\n  t.plan(7)\n\n  const fastify = Fastify()\n\n  fastify.get('/', function (request, reply) {\n    reply.trailer('ETag', function (reply, payload, done) {\n      t.same(payload, null)\n      done(null, 'custom-etag')\n    })\n    const stream = Readable.from([JSON.stringify({ hello: 'world' })])\n    reply.send(stream)\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/'\n  }, (error, res) => {\n    t.error(error)\n    t.equal(res.statusCode, 200)\n    t.equal(res.headers['transfer-encoding'], 'chunked')\n    t.equal(res.headers.trailer, 'etag')\n    t.equal(res.trailers.etag, 'custom-etag')\n    t.notHas(res.headers, 'content-length')\n  })\n})\n\ntest('send trailers when using async-await', t => {\n  t.plan(5)\n\n  const fastify = Fastify()\n\n  fastify.get('/', function (request, reply) {\n    reply.trailer('ETag', async function (reply, payload) {\n      return 'custom-etag'\n    })\n    reply.send('')\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/'\n  }, (error, res) => {\n    t.error(error)\n    t.equal(res.statusCode, 200)\n    t.equal(res.headers.trailer, 'etag')\n    t.equal(res.trailers.etag, 'custom-etag')\n    t.notHas(res.headers, 'content-length')\n  })\n})\n\ntest('error in trailers should be ignored', t => {\n  t.plan(5)\n\n  const fastify = Fastify()\n\n  fastify.get('/', function (request, reply) {\n    reply.trailer('ETag', function (reply, payload, done) {\n      done('error')\n    })\n    reply.send('')\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/'\n  }, (error, res) => {\n    t.error(error)\n    t.equal(res.statusCode, 200)\n    t.equal(res.headers.trailer, 'etag')\n    t.notHas(res.trailers, 'etag')\n    t.notHas(res.headers, 'content-length')\n  })\n})\n\ntest('should emit deprecation warning when using direct return', t => {\n  t.plan(7)\n\n  const fastify = Fastify()\n\n  fastify.get('/', function (request, reply) {\n    reply.trailer('ETag', function (reply, payload) {\n      return 'custom-etag'\n    })\n    reply.send('')\n  })\n\n  process.on('warning', onWarning)\n  function onWarning (warning) {\n    t.equal(warning.name, 'FastifyDeprecation')\n    t.equal(warning.code, 'FSTDEP013')\n  }\n  t.teardown(() => process.removeListener('warning', onWarning))\n\n  fastify.inject({\n    method: 'GET',\n    url: '/'\n  }, (error, res) => {\n    t.error(error)\n    t.equal(res.statusCode, 200)\n    t.equal(res.headers.trailer, 'etag')\n    t.equal(res.trailers.etag, 'custom-etag')\n    t.notHas(res.headers, 'content-length')\n  })\n})\n\ntest('trailer handler counter', t => {\n  t.plan(2)\n\n  const data = JSON.stringify({ hello: 'world' })\n  const hash = createHash('md5')\n  hash.update(data)\n  const md5 = hash.digest('hex')\n\n  t.test('callback with timeout', t => {\n    t.plan(9)\n    const fastify = Fastify()\n\n    fastify.get('/', function (request, reply) {\n      reply.trailer('Return-Early', function (reply, payload, done) {\n        t.equal(data, payload)\n        done(null, 'return')\n      })\n      reply.trailer('Content-MD5', function (reply, payload, done) {\n        t.equal(data, payload)\n        const hash = createHash('md5')\n        hash.update(payload)\n        setTimeout(() => {\n          done(null, hash.digest('hex'))\n        }, 500)\n      })\n      reply.send(data)\n    })\n\n    fastify.inject({\n      method: 'GET',\n      url: '/'\n    }, (error, res) => {\n      t.error(error)\n      t.equal(res.statusCode, 200)\n      t.equal(res.headers['transfer-encoding'], 'chunked')\n      t.equal(res.headers.trailer, 'return-early content-md5')\n      t.equal(res.trailers['return-early'], 'return')\n      t.equal(res.trailers['content-md5'], md5)\n      t.notHas(res.headers, 'content-length')\n    })\n  })\n\n  t.test('async-await', t => {\n    t.plan(9)\n    const fastify = Fastify()\n\n    fastify.get('/', function (request, reply) {\n      reply.trailer('Return-Early', async function (reply, payload) {\n        t.equal(data, payload)\n        return 'return'\n      })\n      reply.trailer('Content-MD5', async function (reply, payload) {\n        t.equal(data, payload)\n        const hash = createHash('md5')\n        hash.update(payload)\n        await sleep(500)\n        return hash.digest('hex')\n      })\n      reply.send(data)\n    })\n\n    fastify.inject({\n      method: 'GET',\n      url: '/'\n    }, (error, res) => {\n      t.error(error)\n      t.equal(res.statusCode, 200)\n      t.equal(res.headers['transfer-encoding'], 'chunked')\n      t.equal(res.headers.trailer, 'return-early content-md5')\n      t.equal(res.trailers['return-early'], 'return')\n      t.equal(res.trailers['content-md5'], md5)\n      t.notHas(res.headers, 'content-length')\n    })\n  })\n})\n\ntest('removeTrailer', t => {\n  t.plan(6)\n\n  const fastify = Fastify()\n\n  fastify.get('/', function (request, reply) {\n    reply.removeTrailer('ETag') // remove nothing\n    reply.trailer('ETag', function (reply, payload, done) {\n      done(null, 'custom-etag')\n    })\n    reply.trailer('Should-Not-Call', function (reply, payload, done) {\n      t.fail('it should not called as this trailer is removed')\n      done(null, 'should-not-call')\n    })\n    reply.removeTrailer('Should-Not-Call')\n    reply.send(undefined)\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/'\n  }, (error, res) => {\n    t.error(error)\n    t.equal(res.statusCode, 200)\n    t.equal(res.headers.trailer, 'etag')\n    t.equal(res.trailers.etag, 'custom-etag')\n    t.notOk(res.trailers['should-not-call'])\n    t.notHas(res.headers, 'content-length')\n  })\n})\n\ntest('remove all trailers', t => {\n  t.plan(6)\n\n  const fastify = Fastify()\n\n  fastify.get('/', function (request, reply) {\n    reply.trailer('ETag', function (reply, payload, done) {\n      t.fail('it should not called as this trailer is removed')\n      done(null, 'custom-etag')\n    })\n    reply.removeTrailer('ETag')\n    reply.trailer('Should-Not-Call', function (reply, payload, done) {\n      t.fail('it should not called as this trailer is removed')\n      done(null, 'should-not-call')\n    })\n    reply.removeTrailer('Should-Not-Call')\n    reply.send('')\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/'\n  }, (error, res) => {\n    t.error(error)\n    t.equal(res.statusCode, 200)\n    t.notOk(res.headers.trailer)\n    t.notOk(res.trailers.etag)\n    t.notOk(res.trailers['should-not-call'])\n    t.notHas(res.headers, 'content-length')\n  })\n})\n\ntest('hasTrailer', t => {\n  t.plan(10)\n\n  const fastify = Fastify()\n\n  fastify.get('/', function (request, reply) {\n    t.equal(reply.hasTrailer('ETag'), false)\n    reply.trailer('ETag', function (reply, payload, done) {\n      done(null, 'custom-etag')\n    })\n    t.equal(reply.hasTrailer('ETag'), true)\n    reply.trailer('Should-Not-Call', function (reply, payload, done) {\n      t.fail('it should not called as this trailer is removed')\n      done(null, 'should-not-call')\n    })\n    t.equal(reply.hasTrailer('Should-Not-Call'), true)\n    reply.removeTrailer('Should-Not-Call')\n    t.equal(reply.hasTrailer('Should-Not-Call'), false)\n    reply.send(undefined)\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/'\n  }, (error, res) => {\n    t.error(error)\n    t.equal(res.statusCode, 200)\n    t.equal(res.headers.trailer, 'etag')\n    t.equal(res.trailers.etag, 'custom-etag')\n    t.notOk(res.trailers['should-not-call'])\n    t.notHas(res.headers, 'content-length')\n  })\n})\n\ntest('throw error when trailer header name is not allowed', t => {\n  const INVALID_TRAILERS = [\n    'transfer-encoding',\n    'content-length',\n    'host',\n    'cache-control',\n    'max-forwards',\n    'te',\n    'authorization',\n    'set-cookie',\n    'content-encoding',\n    'content-type',\n    'content-range',\n    'trailer'\n  ]\n  t.plan(INVALID_TRAILERS.length + 2)\n\n  const fastify = Fastify()\n\n  fastify.get('/', function (request, reply) {\n    for (const key of INVALID_TRAILERS) {\n      try {\n        reply.trailer(key, () => {})\n      } catch (err) {\n        t.equal(err.message, `Called reply.trailer with an invalid header name: ${key}`)\n      }\n    }\n    reply.send('')\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/'\n  }, (error, res) => {\n    t.error(error)\n    t.equal(res.statusCode, 200)\n  })\n})\n\ntest('throw error when trailer header value is not function', t => {\n  const INVALID_TRAILERS_VALUE = [\n    undefined,\n    null,\n    true,\n    false,\n    'invalid',\n    [],\n    new Date(),\n    {}\n  ]\n  t.plan(INVALID_TRAILERS_VALUE.length + 2)\n\n  const fastify = Fastify()\n\n  fastify.get('/', function (request, reply) {\n    for (const value of INVALID_TRAILERS_VALUE) {\n      try {\n        reply.trailer('invalid', value)\n      } catch (err) {\n        t.equal(err.message, `Called reply.trailer('invalid', fn) with an invalid type: ${typeof value}. Expected a function.`)\n      }\n    }\n    reply.send('')\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/'\n  }, (error, res) => {\n    t.error(error)\n    t.equal(res.statusCode, 200)\n  })\n})\n\"/test/maxRequestsPerSocket.test.js\r'use strict'\n\nconst net = require('net')\nconst { test } = require('tap')\nconst semver = require('semver')\nconst Fastify = require('../fastify')\n\nconst skip = semver.lt(process.versions.node, '16.10.0')\n\ntest('maxRequestsPerSocket on node version >= 16.10.0', { skip }, t => {\n  t.plan(8)\n\n  const fastify = Fastify({ maxRequestsPerSocket: 2 })\n  fastify.get('/', (req, reply) => {\n    reply.send({ hello: 'world' })\n  })\n\n  t.teardown(fastify.close.bind(fastify))\n\n  fastify.listen({ port: 0 }, function (err) {\n    t.error(err)\n\n    const port = fastify.server.address().port\n    const client = net.createConnection({ port }, () => {\n      client.write('GET / HTTP/1.1\\r\\nHost: example.com\\r\\n\\r\\n')\n\n      client.once('data', data => {\n        t.match(data.toString(), /Connection:\\s*keep-alive/i)\n        t.match(data.toString(), /Keep-Alive:\\s*timeout=\\d+/i)\n        t.match(data.toString(), /200 OK/i)\n\n        client.write('GET / HTTP/1.1\\r\\nHost: example.com\\r\\n\\r\\n')\n\n        client.once('data', data => {\n          t.match(data.toString(), /Connection:\\s*close/i)\n          t.match(data.toString(), /200 OK/i)\n\n          client.write('GET / HTTP/1.1\\r\\nHost: example.com\\r\\n\\r\\n')\n\n          client.once('data', data => {\n            t.match(data.toString(), /Connection:\\s*close/i)\n            t.match(data.toString(), /503 Service Unavailable/i)\n            client.end()\n          })\n        })\n      })\n    })\n  })\n})\n\ntest('maxRequestsPerSocket zero should behave same as null', { skip }, t => {\n  t.plan(10)\n\n  const fastify = Fastify({ maxRequestsPerSocket: 0 })\n  fastify.get('/', (req, reply) => {\n    reply.send({ hello: 'world' })\n  })\n\n  t.teardown(fastify.close.bind(fastify))\n\n  fastify.listen({ port: 0 }, function (err) {\n    t.error(err)\n\n    const port = fastify.server.address().port\n    const client = net.createConnection({ port }, () => {\n      client.write('GET / HTTP/1.1\\r\\nHost: example.com\\r\\n\\r\\n')\n\n      client.once('data', data => {\n        t.match(data.toString(), /Connection:\\s*keep-alive/i)\n        t.match(data.toString(), /Keep-Alive:\\s*timeout=\\d+/i)\n        t.match(data.toString(), /200 OK/i)\n\n        client.write('GET / HTTP/1.1\\r\\nHost: example.com\\r\\n\\r\\n')\n\n        client.once('data', data => {\n          t.match(data.toString(), /Connection:\\s*keep-alive/i)\n          t.match(data.toString(), /Keep-Alive:\\s*timeout=\\d+/i)\n          t.match(data.toString(), /200 OK/i)\n\n          client.write('GET / HTTP/1.1\\r\\nHost: example.com\\r\\n\\r\\n')\n\n          client.once('data', data => {\n            t.match(data.toString(), /Connection:\\s*keep-alive/i)\n            t.match(data.toString(), /Keep-Alive:\\s*timeout=\\d+/i)\n            t.match(data.toString(), /200 OK/i)\n            client.end()\n          })\n        })\n      })\n    })\n  })\n})\n\ntest('maxRequestsPerSocket should be set', async (t) => {\n  t.plan(1)\n\n  const initialConfig = Fastify({ maxRequestsPerSocket: 5 }).initialConfig\n  t.same(initialConfig.maxRequestsPerSocket, 5)\n})\n\ntest('maxRequestsPerSocket should 0', async (t) => {\n  t.plan(1)\n\n  const initialConfig = Fastify().initialConfig\n  t.same(initialConfig.maxRequestsPerSocket, 0)\n})\n\ntest('requestTimeout passed to server', t => {\n  t.plan(2)\n\n  const httpServer = Fastify({ maxRequestsPerSocket: 5 }).server\n  t.equal(httpServer.maxRequestsPerSocket, 5)\n\n  const httpsServer = Fastify({ maxRequestsPerSocket: 5, https: true }).server\n  t.equal(httpsServer.maxRequestsPerSocket, 5)\n})\n/types/request.d.ts\u0010fimport { ErrorObject } from '@fastify/ajv-compiler'\nimport { FastifyBaseLogger } from './logger'\nimport { ContextConfigDefault, RawServerBase, RawServerDefault, RawRequestDefaultExpression, RequestBodyDefault, RequestQuerystringDefault, RequestParamsDefault, RequestHeadersDefault } from './utils'\nimport { RouteGenericInterface } from './route'\nimport { FastifyInstance } from './instance'\nimport { FastifyTypeProvider, FastifyTypeProviderDefault, FastifyRequestType, ResolveFastifyRequestType } from './type-provider'\nimport { FastifySchema } from './schema'\nimport { FastifyContext, FastifyContextConfig } from './context'\n\ntype HTTPRequestPart = 'body' | 'query' | 'querystring' | 'params' | 'headers'\nexport interface RequestGenericInterface {\n  Body?: RequestBodyDefault;\n  Querystring?: RequestQuerystringDefault;\n  Params?: RequestParamsDefault;\n  Headers?: RequestHeadersDefault;\n}\n\nexport interface ValidationFunction {\n  (input: any): boolean\n  errors?: null | ErrorObject[];\n}\n\nexport interface RequestRouteOptions {\n  method: string,\n  url: string,\n  bodyLimit:number,\n  attachValidation:boolean,\n  logLevel:string,\n  version: string | undefined,\n  exposeHeadRoute: boolean,\n  prefixTrailingSlash: string\n}\n\n/**\n * FastifyRequest is an instance of the standard http or http2 request objects.\n * It defaults to http.IncomingMessage, and it also extends the relative request object.\n */\nexport interface FastifyRequest<RouteGeneric extends RouteGenericInterface = RouteGenericInterface,\n  RawServer extends RawServerBase = RawServerDefault,\n  RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,\n  SchemaCompiler extends FastifySchema = FastifySchema,\n  TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,\n  ContextConfig = ContextConfigDefault,\n  Logger extends FastifyBaseLogger = FastifyBaseLogger,\n  RequestType extends FastifyRequestType = ResolveFastifyRequestType<TypeProvider, SchemaCompiler, RouteGeneric>\n  // ^ Temporary Note: RequestType has been re-ordered to be the last argument in\n  //   generic list. This generic argument is now considered optional as it can be\n  //   automatically inferred from the SchemaCompiler, RouteGeneric and TypeProvider\n  //   arguments. Implementations that already pass this argument can either omit\n  //   the RequestType (preferred) or swap Logger and RequestType arguments when\n  //   creating custom types of FastifyRequest. Related issue #4123\n> {\n  id: any;\n  params: RequestType['params']; // deferred inference\n  raw: RawRequest;\n  query: RequestType['query'];\n  headers: RawRequest['headers'] & RequestType['headers']; // this enables the developer to extend the existing http(s|2) headers list\n  log: Logger;\n  server: FastifyInstance;\n  body: RequestType['body'];\n  context: FastifyContext<ContextConfig>;\n  routeConfig: FastifyContextConfig & ContextConfig;\n  routeSchema: FastifySchema\n\n  /** in order for this to be used the user should ensure they have set the attachValidation option. */\n  validationError?: Error & { validation: any; validationContext: string };\n\n  /**\n   * @deprecated Use `raw` property\n   */\n  readonly req: RawRequest & RouteGeneric['Headers']; // this enables the developer to extend the existing http(s|2) headers list\n  readonly ip: string;\n  readonly ips?: string[];\n  readonly hostname: string;\n  readonly url: string;\n  readonly protocol: 'http' | 'https';\n  readonly method: string;\n  readonly routerPath: string;\n  readonly routerMethod: string;\n  readonly routeOptions: Readonly<RequestRouteOptions>\n  readonly is404: boolean;\n  readonly socket: RawRequest['socket'];\n\n  getValidationFunction(httpPart: HTTPRequestPart): ValidationFunction\n  getValidationFunction(schema: {[key: string]: any}): ValidationFunction\n  compileValidationSchema(schema: {[key: string]: any}, httpPart?: HTTPRequestPart): ValidationFunction\n  validateInput(input: any, schema: {[key: string]: any}, httpPart?: HTTPRequestPart): boolean\n  validateInput(input: any, httpPart?: HTTPRequestPart): boolean\n\n  // Prefer `socket` over deprecated `connection` property in node 13.0.0 or higher\n  // @deprecated\n  readonly connection: RawRequest['socket'];\n}\n!/test/diagnostics-channel.test.js\u0004'use strict'\n\nconst t = require('tap')\nconst test = t.test\nconst proxyquire = require('proxyquire')\n\ntest('diagnostics_channel when present and subscribers', t => {\n  t.plan(3)\n\n  let fastifyInHook\n\n  const dc = {\n    channel (name) {\n      t.equal(name, 'fastify.initialization')\n      return {\n        hasSubscribers: true,\n        publish (event) {\n          t.ok(event.fastify)\n          fastifyInHook = event.fastify\n        }\n      }\n    },\n    '@noCallThru': true\n  }\n\n  const fastify = proxyquire('../fastify', {\n    diagnostics_channel: dc\n  })()\n  t.equal(fastifyInHook, fastify)\n})\n\ntest('diagnostics_channel when present and no subscribers', t => {\n  t.plan(1)\n\n  const dc = {\n    channel (name) {\n      t.equal(name, 'fastify.initialization')\n      return {\n        hasSubscribers: false,\n        publish () {\n          t.fail('publish should not be called')\n        }\n      }\n    },\n    '@noCallThru': true\n  }\n\n  proxyquire('../fastify', {\n    diagnostics_channel: dc\n  })()\n})\n\ntest('diagnostics_channel when not present', t => {\n  t.plan(1)\n\n  t.doesNotThrow(() => {\n    proxyquire('../fastify', {\n      diagnostics_channel: null\n    })()\n  })\n})\n/examples/https.js\u0002'use strict'\n\nconst fs = require('fs')\nconst path = require('path')\nconst fastify = require('../fastify')({\n  https: {\n    key: fs.readFileSync(path.join(__dirname, '../test/https/fastify.key')),\n    cert: fs.readFileSync(path.join(__dirname, '../test/https/fastify.cert'))\n  },\n  logger: true\n})\n\nconst opts = {\n  schema: {\n    response: {\n      '2xx': {\n        type: 'object',\n        properties: {\n          hello: {\n            type: 'string'\n          }\n        }\n      }\n    }\n  }\n}\n\nfastify\n  .get('/', opts, function (req, reply) {\n    reply.header('Content-Type', 'application/json').code(200)\n    reply.send({ hello: 'world' })\n  })\n\nfastify.listen({ port: 3000 }, err => {\n  if (err) throw err\n})\n/docs/Reference/Server.md<h1 align=\"center\">Fastify</h1>\n\n## Factory\n<a id=\"factory\"></a>\n\nThe Fastify module exports a factory function that is used to create new\n<code><b>Fastify server</b></code> instances. This factory function accepts an\noptions object which is used to customize the resulting instance. This document\ndescribes the properties available in that options object.\n\n- [Factory](#factory)\n  - [`http`](#http)\n  - [`http2`](#http2)\n  - [`https`](#https)\n  - [`connectionTimeout`](#connectiontimeout)\n  - [`keepAliveTimeout`](#keepalivetimeout)\n  - [`forceCloseConnections`](#forcecloseconnections)\n  - [`maxRequestsPerSocket`](#maxrequestspersocket)\n  - [`requestTimeout`](#requesttimeout)\n  - [`ignoreTrailingSlash`](#ignoretrailingslash)\n  - [`ignoreDuplicateSlashes`](#ignoreduplicateslashes)\n  - [`maxParamLength`](#maxparamlength)\n  - [`bodyLimit`](#bodylimit)\n  - [`onProtoPoisoning`](#onprotopoisoning)\n  - [`onConstructorPoisoning`](#onconstructorpoisoning)\n  - [`logger`](#logger)\n  - [`disableRequestLogging`](#disablerequestlogging)\n  - [`serverFactory`](#serverfactory)\n  - [`jsonShorthand`](#jsonshorthand)\n  - [`caseSensitive`](#casesensitive)\n  - [`allowUnsafeRegex`](#allowunsaferegex)\n  - [`requestIdHeader`](#requestidheader)\n  - [`requestIdLogLabel`](#requestidloglabel)\n  - [`genReqId`](#genreqid)\n  - [`trustProxy`](#trustproxy)\n  - [`pluginTimeout`](#plugintimeout)\n  - [`querystringParser`](#querystringparser)\n  - [`exposeHeadRoutes`](#exposeheadroutes)\n  - [`constraints`](#constraints)\n  - [`return503OnClosing`](#return503onclosing)\n  - [`ajv`](#ajv)\n  - [`serializerOpts`](#serializeropts)\n  - [`http2SessionTimeout`](#http2sessiontimeout)\n  - [`frameworkErrors`](#frameworkerrors)\n  - [`clientErrorHandler`](#clienterrorhandler)\n  - [`rewriteUrl`](#rewriteurl)\n- [Instance](#instance)\n  - [Server Methods](#server-methods)\n    - [server](#server)\n    - [after](#after)\n    - [ready](#ready)\n    - [listen](#listen)\n    - [addresses](#addresses)\n    - [getDefaultRoute](#getdefaultroute)\n    - [setDefaultRoute](#setdefaultroute)\n    - [routing](#routing)\n    - [route](#route)\n    - [hasRoute](#hasRoute)\n    - [close](#close)\n    - [decorate*](#decorate)\n    - [register](#register)\n    - [addHook](#addhook)\n    - [prefix](#prefix)\n    - [pluginName](#pluginname)\n    - [hasPlugin](#hasplugin)\n    - [log](#log)\n    - [version](#version)\n    - [inject](#inject)\n    - [addSchema](#addschema)\n    - [getSchemas](#getschemas)\n    - [getSchema](#getschema)\n    - [setReplySerializer](#setreplyserializer)\n    - [setValidatorCompiler](#setvalidatorcompiler)\n    - [setSchemaErrorFormatter](#setschemaerrorformatter)\n    - [setSerializerCompiler](#setserializercompiler)\n    - [validatorCompiler](#validatorcompiler)\n    - [serializerCompiler](#serializercompiler)\n    - [schemaErrorFormatter](#schemaerrorformatter)\n    - [schemaController](#schemacontroller)\n    - [setNotFoundHandler](#setnotfoundhandler)\n    - [setErrorHandler](#seterrorhandler)\n    - [addConstraintStrategy](#addconstraintstrategy)\n    - [hasConstraintStrategy](#hasconstraintstrategy)\n    - [printRoutes](#printroutes)\n    - [printPlugins](#printplugins)\n    - [addContentTypeParser](#addcontenttypeparser)\n    - [hasContentTypeParser](#hascontenttypeparser)\n    - [removeContentTypeParser](#removecontenttypeparser)\n    - [removeAllContentTypeParsers](#removeallcontenttypeparsers)\n    - [getDefaultJsonParser](#getdefaultjsonparser)\n    - [defaultTextParser](#defaulttextparser)\n    - [errorHandler](#errorhandler)\n    - [initialConfig](#initialconfig)\n\n### `http`\n<a id=\"factory-http\"></a>\n\nAn object used to configure the server's listening socket. The options\nare the same as the Node.js core [`createServer`\nmethod](https://nodejs.org/dist/latest-v14.x/docs/api/http.html#http_http_createserver_options_requestlistener).\n\nThis option is ignored if options [`http2`](#factory-http2) or\n[`https`](#factory-https) are set.\n\n+ Default: `null`\n\n### `http2`\n<a id=\"factory-http2\"></a>\n\nIf `true` Node.js core's\n[HTTP/2](https://nodejs.org/dist/latest-v14.x/docs/api/http2.html) module is\nused for binding the socket.\n\n+ Default: `false`\n\n### `https`\n<a id=\"factory-https\"></a>\n\nAn object used to configure the server's listening socket for TLS. The options\nare the same as the Node.js core [`createServer`\nmethod](https://nodejs.org/dist/latest-v14.x/docs/api/https.html#https_https_createserver_options_requestlistener).\nWhen this property is `null`, the socket will not be configured for TLS.\n\nThis option also applies when the [`http2`](#factory-http2) option is set.\n\n+ Default: `null`\n\n### `connectionTimeout`\n<a id=\"factory-connection-timeout\"></a>\n\nDefines the server timeout in milliseconds. See documentation for\n[`server.timeout`\nproperty](https://nodejs.org/api/http.html#http_server_timeout) to understand\nthe effect of this option. When `serverFactory` option is specified, this option\nis ignored.\n\n+ Default: `0` (no timeout)\n\n### `keepAliveTimeout`\n<a id=\"factory-keep-alive-timeout\"></a>\n\nDefines the server keep-alive timeout in milliseconds. See documentation for\n[`server.keepAliveTimeout`\nproperty](https://nodejs.org/api/http.html#http_server_keepalivetimeout) to\nunderstand the effect of this option. This option only applies when HTTP/1 is in\nuse. Also, when `serverFactory` option is specified, this option is ignored.\n\n+ Default: `72000` (72 seconds)\n\n### `forceCloseConnections`\n<a id=\"forcecloseconnections\"></a>\n\nWhen set to `true`, upon [`close`](#close) the server will iterate the current\npersistent connections and [destroy their\nsockets](https://nodejs.org/dist/latest-v16.x/docs/api/net.html#socketdestroyerror).\n\n> Important: connections are not inspected to determine if requests have been\n> completed.\n\nFastify will prefer the HTTP server's\n[`closeAllConnections`](https://nodejs.org/dist/latest-v18.x/docs/api/http.html#servercloseallconnections)\nmethod if supported, otherwise it will use internal connection tracking.\n\nWhen set to `\"idle\"`, upon [`close`](#close) the server will iterate the current\npersistent connections which are not sending a request or waiting for a response\nand destroy their sockets. The value is supported only if the HTTP server\nsupports the\n[`closeIdleConnections`](https://nodejs.org/dist/latest-v18.x/docs/api/http.html#servercloseidleconnections)\nmethod, otherwise attempting to set it will throw an exception.\n\n+ Default: `\"idle\"` if the HTTP server allows it, `false` otherwise\n\n### `maxRequestsPerSocket`\n<a id=\"factory-max-requests-per-socket\"></a>\n\nDefines the maximum number of requests socket can handle before closing keep\nalive connection. See documentation for [`server.maxRequestsPerSocket`\nproperty](https://nodejs.org/dist/latest/docs/api/http.html#http_server_maxrequestspersocket)\nto understand the effect of this option. This option only applies when HTTP/1.1\nis in use. Also, when `serverFactory` option is specified, this option is\nignored.\n>  At the time of this writing, only node version greater or equal to 16.10.0\n>  support this option. Check the Node.js documentation for availability in the\n>  version you are running.\n\n+ Default: `0` (no limit)\n\n### `requestTimeout`\n<a id=\"factory-request-timeout\"></a>\n\nDefines the maximum number of milliseconds for receiving the entire request from\nthe client. [`server.requestTimeout`\nproperty](https://nodejs.org/dist/latest/docs/api/http.html#http_server_requesttimeout)\nto understand the effect of this option. Also, when `serverFactory` option is\nspecified, this option is ignored. It must be set to a non-zero value (e.g. 120\nseconds) to protect against potential Denial-of-Service attacks in case the\nserver is deployed without a reverse proxy in front.\n>  At the time of this writing, only node version greater or equal to 14.11.0\n>  support this option. Check the Node.js documentation for availability in the\n>  version you are running.\n\n+ Default: `0` (no limit)\n\n### `ignoreTrailingSlash`\n<a id=\"factory-ignore-slash\"></a>\n\nFastify uses [find-my-way](https://github.com/delvedor/find-my-way) to handle\nrouting. By default, Fastify is set to take into account the trailing slashes.\nPaths like `/foo` and `/foo/` will be treated as different paths. If you want to\nchange this, set this flag to `true`. That way, both `/foo` and `/foo/` will\npoint to the same route. This option applies to *all* route registrations for\nthe resulting server instance.\n\n+ Default: `false`\n\n```js\nconst fastify = require('fastify')({\n  ignoreTrailingSlash: true\n})\n\n// registers both \"/foo\" and \"/foo/\"\nfastify.get('/foo/', function (req, reply) {\n  reply.send('foo')\n})\n\n// registers both \"/bar\" and \"/bar/\"\nfastify.get('/bar', function (req, reply) {\n  reply.send('bar')\n})\n```\n\n### `ignoreDuplicateSlashes`\n<a id=\"factory-ignore-duplicate-slashes\"></a>\n\nFastify uses [find-my-way](https://github.com/delvedor/find-my-way) to handle\nrouting. You can use `ignoreDuplicateSlashes` option to remove duplicate slashes\nfrom the path. It removes duplicate slashes in the route path and in the request\nURL. This option applies to *all* route registrations for the resulting server\ninstance.\n\nNote that when `ignoreTrailingSlash` and `ignoreDuplicateSlashes` are both set\nto true, Fastify will remove duplicate slashes, and then trailing slashes,\nmeaning //a//b//c// will be converted to /a/b/c.\n\n+ Default: `false`\n\n```js\nconst fastify = require('fastify')({\n  ignoreDuplicateSlashes: true\n})\n\n// registers \"/foo/bar/\"\nfastify.get('///foo//bar//', function (req, reply) {\n  reply.send('foo')\n})\n```\n\n### `maxParamLength`\n<a id=\"factory-max-param-length\"></a>\n\nYou can set a custom length for parameters in parametric (standard, regex, and\nmulti) routes by using `maxParamLength` option; the default value is 100\ncharacters.\n\nThis can be useful especially if you have a regex-based route, protecting you\nagainst [DoS\nattacks](https://www.owasp.org/index.php/Regular_expression_Denial_of_Service_-_ReDoS).\n\n*If the maximum length limit is reached, the not found route will be invoked.*\n\n### `bodyLimit`\n<a id=\"factory-body-limit\"></a>\n\nDefines the maximum payload, in bytes, the server is allowed to accept.\n\n+ Default: `1048576` (1MiB)\n\n### `onProtoPoisoning`\n<a id=\"factory-on-proto-poisoning\"></a>\n\nDefines what action the framework must take when parsing a JSON object with\n`__proto__`. This functionality is provided by\n[secure-json-parse](https://github.com/fastify/secure-json-parse). See\n[Prototype Poisoning](../Guides/Prototype-Poisoning.md) for more details about\nprototype poisoning attacks.\n\nPossible values are `'error'`, `'remove'` and `'ignore'`.\n\n+ Default: `'error'`\n\n### `onConstructorPoisoning`\n<a id=\"factory-on-constructor-poisoning\"></a>\n\nDefines what action the framework must take when parsing a JSON object with\n`constructor`. This functionality is provided by\n[secure-json-parse](https://github.com/fastify/secure-json-parse). See\n[Prototype Poisoning](../Guides/Prototype-Poisoning.md) for more details about\nprototype poisoning attacks.\n\nPossible values are `'error'`, `'remove'` and `'ignore'`.\n\n+ Default: `'error'`\n\n### `logger`\n<a id=\"factory-logger\"></a>\n\nFastify includes built-in logging via the [Pino](https://getpino.io/) logger.\nThis property is used to configure the internal logger instance.\n\nThe possible values this property may have are:\n\n+ Default: `false`. The logger is disabled. All logging methods will point to a\n  null logger [abstract-logging](https://npm.im/abstract-logging) instance.\n\n+ `pinoInstance`: a previously instantiated instance of Pino. The internal\n  logger will point to this instance.\n\n+ `object`: a standard Pino [options\n  object](https://github.com/pinojs/pino/blob/c77d8ec5ce/docs/API.md#constructor).\n  This will be passed directly to the Pino constructor. If the following\n  properties are not present on the object, they will be added accordingly:\n    * `level`: the minimum logging level. If not set, it will be set to\n      `'info'`.\n    * `serializers`: a hash of serialization functions. By default, serializers\n      are added for `req` (incoming request objects), `res` (outgoing response\n      objects), and `err` (standard `Error` objects). When a log method receives\n      an object with any of these properties then the respective serializer will\n      be used for that property. For example:\n        ```js\n        fastify.get('/foo', function (req, res) {\n          req.log.info({req}) // log the serialized request object\n          res.send('foo')\n        })\n        ```\n      Any user-supplied serializer will override the default serializer of the\n      corresponding property.\n+ `loggerInstance`: a custom logger instance. The logger must conform to the\n  Pino interface by having the following methods: `info`, `error`, `debug`,\n  `fatal`, `warn`, `trace`, `child`. For example:\n  ```js\n  const pino = require('pino')();\n\n  const customLogger = {\n    info: function (o, ...n) {},\n    warn: function (o, ...n) {},\n    error: function (o, ...n) {},\n    fatal: function (o, ...n) {},\n    trace: function (o, ...n) {},\n    debug: function (o, ...n) {},\n    child: function() {\n      const child = Object.create(this);\n      child.pino = pino.child(...arguments);\n      return child;\n    },\n  };\n\n  const fastify = require('fastify')({logger: customLogger});\n  ```\n\n### `disableRequestLogging`\n<a id=\"factory-disable-request-logging\"></a>\n\nBy default, when logging is enabled, Fastify will issue an `info` level log\nmessage when a request is received and when the response for that request has\nbeen sent. By setting this option to `true`, these log messages will be\ndisabled. This allows for more flexible request start and end logging by\nattaching custom `onRequest` and `onResponse` hooks.\n\n+ Default: `false`\n\n```js\n// Examples of hooks to replicate the disabled functionality.\nfastify.addHook('onRequest', (req, reply, done) => {\n  req.log.info({ url: req.raw.url, id: req.id }, 'received request')\n  done()\n})\n\nfastify.addHook('onResponse', (req, reply, done) => {\n  req.log.info({ url: req.raw.originalUrl, statusCode: reply.raw.statusCode }, 'request completed')\n  done()\n})\n```\n\nPlease note that this setting will also disable an error log written by the\ndefault `onResponse` hook on reply callback errors. Other log messages \nemitted by Fastify will stay enabled, like deprecation warnings and messages\nemitted when requests are received while the server is closing.\n\n### `serverFactory`\n<a id=\"custom-http-server\"></a>\n\nYou can pass a custom HTTP server to Fastify by using the `serverFactory`\noption.\n\n`serverFactory` is a function that takes a `handler` parameter, which takes the\n`request` and `response` objects as parameters, and an options object, which is\nthe same you have passed to Fastify.\n\n```js\nconst serverFactory = (handler, opts) => {\n  const server = http.createServer((req, res) => {\n    handler(req, res)\n  })\n\n  return server\n}\n\nconst fastify = Fastify({ serverFactory })\n\nfastify.get('/', (req, reply) => {\n  reply.send({ hello: 'world' })\n})\n\nfastify.listen({ port: 3000 })\n```\n\nInternally Fastify uses the API of Node core HTTP server, so if you are using a\ncustom server you must be sure to have the same API exposed. If not, you can\nenhance the server instance inside the `serverFactory` function before the\n`return` statement.\n\n\n### `jsonShorthand`\n<a id=\"schema-json-shorthand\"></a>\n\n+ Default: `true`\n\nInternally, and by default, Fastify will automatically infer the root properties\nof JSON Schemas if it does not find valid root properties according to the JSON\nSchema spec. If you wish to implement your own schema validation compiler, for\nexample: to parse schemas as JTD instead of JSON Schema, then you can explicitly\nset this option to `false` to make sure the schemas you receive are unmodified\nand are not being treated internally as JSON Schema.\n\n```js\nconst AjvJTD = require('ajv/dist/jtd'/* only valid for AJV v7+ */)\nconst ajv = new AjvJTD({\n  // This would let you throw at start for invalid JTD schema objects\n  allErrors: process.env.NODE_ENV === 'development'\n})\nconst fastify = Fastify({ jsonShorthand: false })\nfastify.setValidatorCompiler(({ schema }) => {\n  return ajv.compile(schema)\n})\nfastify.post('/', {\n  schema: {\n    body: {\n      properties: {\n        foo: { type: 'uint8' }\n      }\n    }\n  },\n  handler (req, reply) { reply.send({ ok: 1 }) }\n})\n```\n\n**Note: Fastify does not currently throw on invalid schemas, so if you turn this\noff in an existing project, you need to be careful that none of your existing\nschemas become invalid as a result, since they will be treated as a catch-all.**\n\n### `caseSensitive`\n<a id=\"factory-case-sensitive\"></a>\n\nBy default, value equal to `true`, routes are registered as case sensitive. That\nis, `/foo` is not equivalent to `/Foo`. When set to `false`, routes are\nregistered in a fashion such that `/foo` is equivalent to `/Foo` which is\nequivalent to `/FOO`.\n\nBy setting `caseSensitive` to `false`, all paths will be matched as lowercase,\nbut the route parameters or wildcards will maintain their original letter\ncasing.\n\n```js\nfastify.get('/user/:username', (request, reply) => {\n  // Given the URL: /USER/NodeJS\n  console.log(request.params.username) // -> 'NodeJS'\n})\n```\n\nPlease note that setting this option to `false` goes against\n[RFC3986](https://tools.ietf.org/html/rfc3986#section-6.2.2.1).\n\nAlso note, this setting will not affect query strings. If you want to change the\nway query strings are handled take a look at\n[`querystringParser`](#querystringparser).\n\n\n### `allowUnsafeRegex`\n<a id=\"factory-allow-unsafe-regex\"></a>\n\nThe allowUnsafeRegex setting is false by default, so routes only allow safe\nregular expressions. To use unsafe expressions, set allowUnsafeRegex to true.\n\n```js\nfastify.get('/user/:id(^([0-9]+){4}$)', (request, reply) => {\n  // Throws an error without allowUnsafeRegex = true\n})\n```\n\nUnder the hood: [FindMyWay](https://github.com/delvedor/find-my-way) More info\nabout safe regexp: [Safe-regex2](https://www.npmjs.com/package/safe-regex2)\n\n\n### `requestIdHeader`\n<a id=\"factory-request-id-header\"></a>\n\nThe header name used to set the request-id. See [the\nrequest-id](./Logging.md#logging-request-id) section.\nSetting `requestIdHeader` to `false` will always use [genReqId](#genreqid)\n\n+ Default: `'request-id'`\n\n```js\nconst fastify = require('fastify')({\n  requestIdHeader: 'x-custom-id', // -> use 'X-Custom-Id' header if available\n  //requestIdHeader: false, // -> always use genReqId\n})\n```\n### `requestIdLogLabel`\n<a id=\"factory-request-id-log-label\"></a>\n\nDefines the label used for the request identifier when logging the request.\n\n+ Default: `'reqId'`\n\n### `genReqId`\n<a id=\"factory-gen-request-id\"></a>\n\nFunction for generating the request-id. It will receive the incoming request as\na parameter. This function is expected to be error-free.\n\n+ Default: `value of 'request-id' header if provided or monotonically increasing\n  integers`\n\nEspecially in distributed systems, you may want to override the default ID\ngeneration behavior as shown below. For generating `UUID`s you may want to check\nout [hyperid](https://github.com/mcollina/hyperid)\n\n```js\nlet i = 0\nconst fastify = require('fastify')({\n  genReqId: function (req) { return i++ }\n})\n```\n\n**Note: genReqId will _not_ be called if the header set in\n<code>[requestIdHeader](#requestidheader)</code> is available (defaults to\n'request-id').**\n\n### `trustProxy`\n<a id=\"factory-trust-proxy\"></a>\n\nBy enabling the `trustProxy` option, Fastify will know that it is sitting behind\na proxy and that the `X-Forwarded-*` header fields may be trusted, which\notherwise may be easily spoofed.\n\n```js\nconst fastify = Fastify({ trustProxy: true })\n```\n\n+ Default: `false`\n+ `true/false`: Trust all proxies (`true`) or do not trust any proxies\n  (`false`).\n+ `string`: Trust only given IP/CIDR (e.g. `'127.0.0.1'`). May be a list of\n  comma separated values (e.g. `'127.0.0.1,192.168.1.1/24'`).\n+ `Array<string>`: Trust only given IP/CIDR list (e.g. `['127.0.0.1']`).\n+ `number`: Trust the nth hop from the front-facing proxy server as the client.\n+ `Function`: Custom trust function that takes `address` as first arg\n    ```js\n    function myTrustFn(address, hop) {\n      return address === '1.2.3.4' || hop === 1\n    }\n    ```\n\nFor more examples, refer to the\n[`proxy-addr`](https://www.npmjs.com/package/proxy-addr) package.\n\nYou may access the `ip`, `ips`, `hostname` and `protocol` values on the\n[`request`](./Request.md) object.\n\n```js\nfastify.get('/', (request, reply) => {\n  console.log(request.ip)\n  console.log(request.ips)\n  console.log(request.hostname)\n  console.log(request.protocol)\n})\n```\n\n**Note: if a request contains multiple <code>x-forwarded-host</code> or\n<code>x-forwarded-proto</code> headers, it is only the last one that is used to\nderive <code>request.hostname</code> and <code>request.protocol</code>**\n\n### `pluginTimeout`\n<a id=\"plugin-timeout\"></a>\n\nThe maximum amount of time in *milliseconds* in which a plugin can load. If not,\n[`ready`](#ready) will complete with an `Error` with code\n`'ERR_AVVIO_PLUGIN_TIMEOUT'`. When set to `0`, disables this check. This\ncontrols [avvio](https://www.npmjs.com/package/avvio) 's `timeout` parameter.\n\n+ Default: `10000`\n\n### `querystringParser`\n<a id=\"factory-querystring-parser\"></a>\n\nThe default query string parser that Fastify uses is the Node.js's core\n`querystring` module.\n\nYou can change this default setting by passing the option `querystringParser`\nand use a custom one, such as [`qs`](https://www.npmjs.com/package/qs).\n\n```js\nconst qs = require('qs')\nconst fastify = require('fastify')({\n  querystringParser: str => qs.parse(str)\n})\n```\n\nYou can also use Fastify's default parser but change some handling behaviour,\nlike the example below for case insensitive keys and values:\n\n```js\nconst querystring = require('querystring')\nconst fastify = require('fastify')({\n  querystringParser: str => querystring.parse(str.toLowerCase())\n})\n```\n\nNote, if you only want the keys (and not the values) to be case insensitive we\nrecommend using a custom parser to convert only the keys to lowercase.\n\n### `exposeHeadRoutes`\n<a id=\"exposeHeadRoutes\"></a>\n\nAutomatically creates a sibling `HEAD` route for each `GET` route defined. If\nyou want a custom `HEAD` handler without disabling this option, make sure to\ndefine it before the `GET` route.\n\n+ Default: `true`\n\n### `constraints`\n<a id=\"constraints\"></a>\n\nFastify's built in route constraints are provided by `find-my-way`, which allow\nconstraining routes by `version` or `host`. You are able to add new constraint\nstrategies, or override the built in strategies by providing a `constraints`\nobject with strategies for `find-my-way`. You can find more information on\nconstraint strategies in the\n[find-my-way](https://github.com/delvedor/find-my-way) documentation.\n\n```js\nconst customVersionStrategy = {\n  storage: function () {\n    const versions = {}\n    return {\n      get: (version) => { return versions[version] || null },\n      set: (version, store) => { versions[version] = store }\n    }\n  },\n  deriveVersion: (req, ctx) => {\n    return req.headers['accept']\n  }\n}\n\nconst fastify = require('fastify')({\n  constraints: {\n    version: customVersionStrategy\n  }\n})\n```\n\n### `return503OnClosing`\n<a id=\"factory-return-503-on-closing\"></a>\n\nReturns 503 after calling `close` server method. If `false`, the server routes\nthe incoming request as usual.\n\n+ Default: `true`\n\n### `ajv`\n<a id=\"factory-ajv\"></a>\n\nConfigure the Ajv v8 instance used by Fastify without providing a custom one.\nThe default configuration is explained in the\n[#schema-validator](./Validation-and-Serialization.md#schema-validator) section.\n\n```js\nconst fastify = require('fastify')({\n  ajv: {\n    customOptions: {\n      removeAdditional: 'all' // Refer to [ajv options](https://ajv.js.org/options.html#removeadditional)\n    },\n    plugins: [\n      require('ajv-merge-patch'),\n      [require('ajv-keywords'), 'instanceof']\n      // Usage: [plugin, pluginOptions] - Plugin with options\n      // Usage: plugin - Plugin without options\n    ]\n  }\n})\n```\n\n### `serializerOpts`\n<a id=\"serializer-opts\"></a>\n\nCustomize the options of the default\n[`fast-json-stringify`](https://github.com/fastify/fast-json-stringify#options)\ninstance that serialize the response's payload:\n\n```js\nconst fastify = require('fastify')({\n  serializerOpts: {\n    rounding: 'ceil'\n  }\n})\n```\n\n### `http2SessionTimeout`\n<a id=\"http2-session-timeout\"></a>\n\nSet a default\n[timeout](https://nodejs.org/api/http2.html#http2_http2session_settimeout_msecs_callback)\nto every incoming HTTP/2 session. The session will be closed on the timeout.\nDefault: `72000` ms.\n\nNote that this is needed to offer the graceful \"close\" experience when using\nHTTP/2. The low default has been chosen to mitigate denial of service attacks.\nWhen the server is behind a load balancer or can scale automatically this value\ncan be increased to fit the use case. Node core defaults this to `0`. `\n\n### `frameworkErrors`\n<a id=\"framework-errors\"></a>\n\n+ Default: `null`\n\nFastify provides default error handlers for the most common use cases. It is\npossible to override one or more of those handlers with custom code using this\noption.\n\n*Note: Only `FST_ERR_BAD_URL` and `FST_ERR_ASYNC_CONSTRAINT` are implemented at \nthe moment.*\n\n```js\nconst fastify = require('fastify')({\n  frameworkErrors: function (error, req, res) {\n    if (error instanceof FST_ERR_BAD_URL) {\n      res.code(400)\n      return res.send(\"Provided url is not valid\")\n    } else if(error instanceof FST_ERR_ASYNC_CONSTRAINT) {\n      res.code(400)\n      return res.send(\"Provided header is not valid\")\n    } else {\n      res.send(err)\n    }\n  }\n})\n```\n\n### `clientErrorHandler`\n<a id=\"client-error-handler\"></a>\n\nSet a\n[clientErrorHandler](https://nodejs.org/api/http.html#http_event_clienterror)\nthat listens to `error` events emitted by client connections and responds with a\n`400`.\n\nIt is possible to override the default `clientErrorHandler` using this option.\n\n+ Default:\n```js\nfunction defaultClientErrorHandler (err, socket) {\n  if (err.code === 'ECONNRESET') {\n    return\n  }\n\n  const body = JSON.stringify({\n    error: http.STATUS_CODES['400'],\n    message: 'Client Error',\n    statusCode: 400\n  })\n  this.log.trace({ err }, 'client error')\n\n  if (socket.writable) {\n    socket.end([\n      'HTTP/1.1 400 Bad Request',\n      `Content-Length: ${body.length}`,\n      `Content-Type: application/json\\r\\n\\r\\n${body}`\n    ].join('\\r\\n'))\n  }\n}\n```\n\n*Note: `clientErrorHandler` operates with raw socket. The handler is expected to\nreturn a properly formed HTTP response that includes a status line, HTTP headers\nand a message body. Before attempting to write the socket, the handler should\ncheck if the socket is still writable as it may have already been destroyed.*\n\n```js\nconst fastify = require('fastify')({\n  clientErrorHandler: function (err, socket) {\n    const body = JSON.stringify({\n      error: {\n        message: 'Client error',\n        code: '400'\n      }\n    })\n\n    // `this` is bound to fastify instance\n    this.log.trace({ err }, 'client error')\n\n    // the handler is responsible for generating a valid HTTP response\n    socket.end([\n      'HTTP/1.1 400 Bad Request',\n      `Content-Length: ${body.length}`,\n      `Content-Type: application/json\\r\\n\\r\\n${body}`\n    ].join('\\r\\n'))\n  }\n})\n```\n\n### `rewriteUrl`\n<a id=\"rewrite-url\"></a>\n\nSet a sync callback function that must return a string that allows rewriting\nURLs.\n\n> Rewriting a URL will modify the `url` property of the `req` object\n\n```js\nfunction rewriteUrl (req) { // req is the Node.js HTTP request\n  return req.url === '/hi' ? '/hello' : req.url;\n}\n```\n\nNote that `rewriteUrl` is called _before_ routing, it is not encapsulated and it\nis an instance-wide configuration.\n\n## Instance\n\n### Server Methods\n\n#### server\n<a id=\"server\"></a>\n\n`fastify.server`: The Node core\n[server](https://nodejs.org/api/http.html#http_class_http_server) object as\nreturned by the [**`Fastify factory function`**](#factory).\n\n#### after\n<a id=\"after\"></a>\n\nInvoked when the current plugin and all the plugins that have been registered\nwithin it have finished loading. It is always executed before the method\n`fastify.ready`.\n\n```js\nfastify\n  .register((instance, opts, done) => {\n    console.log('Current plugin')\n    done()\n  })\n  .after(err => {\n    console.log('After current plugin')\n  })\n  .register((instance, opts, done) => {\n    console.log('Next plugin')\n    done()\n  })\n  .ready(err => {\n    console.log('Everything has been loaded')\n  })\n```\n\nIn case `after()` is called without a function, it returns a `Promise`:\n\n```js\nfastify.register(async (instance, opts) => {\n  console.log('Current plugin')\n})\n\nawait fastify.after()\nconsole.log('After current plugin')\n\nfastify.register(async (instance, opts) => {\n  console.log('Next plugin')\n})\n\nawait fastify.ready()\n\nconsole.log('Everything has been loaded')\n```\n\n#### ready\n<a id=\"ready\"></a>\n\nFunction called when all the plugins have been loaded. It takes an error\nparameter if something went wrong.\n```js\nfastify.ready(err => {\n  if (err) throw err\n})\n```\nIf it is called without any arguments, it will return a `Promise`:\n\n```js\nfastify.ready().then(() => {\n  console.log('successfully booted!')\n}, (err) => {\n  console.log('an error happened', err)\n})\n```\n\n#### listen\n<a id=\"listen\"></a>\n\nStarts the server and internally waits for the `.ready()` event. The signature\nis `.listen([options][, callback])`. Both the `options` object and the\n`callback` parameters follow the [Node.js\ncore](https://nodejs.org/api/net.html#serverlistenoptions-callback) parameter\ndefinitions.\n\nBy default, the server will listen on the address(es) resolved by `localhost`\nwhen no specific host is provided. If listening on any available interface is\ndesired, then specifying `0.0.0.0` for the address will listen on all IPv4\naddresses. The following table details the possible values for `host` when\ntargeting `localhost`, and what the result of those values for `host` will be.\n\n Host          | IPv4 | IPv6\n --------------|------|-------\n `::`            | ✅<sup>*</sup> | ✅\n `::` + [`ipv6Only`](https://nodejs.org/api/net.html#serverlistenoptions-callback) | 🚫 | ✅\n `0.0.0.0`       | ✅ | 🚫\n `localhost`     | ✅ | ✅\n `127.0.0.1`     | ✅ | 🚫\n `::1`           | 🚫 | ✅\n\n<sup>*</sup> Using `::` for the address will listen on all IPv6 addresses and,\ndepending on OS, may also listen on [all IPv4\naddresses](https://nodejs.org/api/net.html#serverlistenport-host-backlog-callback).\n\nBe careful when deciding to listen on all interfaces; it comes with inherent\n[security\nrisks](https://web.archive.org/web/20170831174611/https://snyk.io/blog/mongodb-hack-and-secure-defaults/).\n\nThe default is to listen on `port: 0` (which picks the first available open\nport) and `host: 'localhost'`:\n\n```js\nfastify.listen((err, address) => {\n  if (err) {\n    fastify.log.error(err)\n    process.exit(1)\n  }\n})\n```\n\nSpecifying an address is also supported:\n\n```js\nfastify.listen({ port: 3000, host: '127.0.0.1' }, (err, address) => {\n  if (err) {\n    fastify.log.error(err)\n    process.exit(1)\n  }\n})\n```\n\nIf no callback is provided a Promise is returned:\n\n```js\nfastify.listen({ port: 3000 })\n  .then((address) => console.log(`server listening on ${address}`))\n  .catch(err => {\n    console.log('Error starting server:', err)\n    process.exit(1)\n  })\n```\n\nWhen deploying to a Docker, and potentially other, containers, it is advisable\nto listen on `0.0.0.0` because they do not default to exposing mapped ports to\n`localhost`:\n\n```js\nfastify.listen({ port: 3000, host: '0.0.0.0' }, (err, address) => {\n  if (err) {\n    fastify.log.error(err)\n    process.exit(1)\n  }\n})\n```\n\nIf the `port` is omitted (or is set to zero), a random available port is\nautomatically chosen (available via `fastify.server.address().port`).\n\nThe default options of listen are:\n\n```js\nfastify.listen({\n  port: 0,\n  host: 'localhost',\n  exclusive: false,\n  readableAll: false,\n  writableAll: false,\n  ipv6Only: false\n}, (err) => {})\n```\n\n#### addresses\n<a id=\"addresses\"></a>\n\nThis method returns an array of addresses that the server is listening on. If\nyou call it before `listen()` is called or after the `close()` function, it will\nreturn an empty array.\n\n```js\nawait fastify.listen({ port: 8080 })\nconst addresses = fastify.addresses()\n// [\n//   { port: 8080, family: 'IPv6', address: '::1' },\n//   { port: 8080, family: 'IPv4', address: '127.0.0.1' }\n// ]\n```\n\nNote that the array contains the `fastify.server.address()` too.\n\n#### getDefaultRoute\n<a id=\"getDefaultRoute\"></a>\n\n**Notice**: this method is deprecated and should be removed in the next Fastify\nmajor version.\n\nThe `defaultRoute` handler handles requests that do not match any URL specified\nby your Fastify application. This defaults to the 404 handler, but can be\noverridden with [setDefaultRoute](#setdefaultroute). Method to get the\n`defaultRoute` for the server:\n\n```js\nconst defaultRoute = fastify.getDefaultRoute()\n```\n\n#### setDefaultRoute\n<a id=\"setDefaultRoute\"></a>\n\n**Notice**: this method is deprecated and should be removed in the next Fastify\nmajor version. Please, consider to use `setNotFoundHandler` or a wildcard\nmatching route.\n\nThe default 404 handler, or one set using `setNotFoundHandler`, will\nnever trigger if the default route is overridden. This sets the handler for the\nFastify application, not just the current instance context. Use\n[setNotFoundHandler](#setnotfoundhandler) if you want to customize 404 handling\ninstead.\n\nThis method sets the `defaultRoute` for the server. Note that, its purpose is\nto interact with the underlying raw requests. Unlike other Fastify handlers, the\narguments received are of type [RawRequest](./TypeScript.md#rawrequest) and\n[RawReply](./TypeScript.md#rawreply) respectively.\n\n```js\nconst defaultRoute = function (req, res) {\n  // req = RawRequest\n  // res = RawReply\n  res.end('hello world')\n}\n\nfastify.setDefaultRoute(defaultRoute)\n```\n\n#### routing\n<a id=\"routing\"></a>\n\nMethod to access the `lookup` method of the internal router and match the\nrequest to the appropriate handler:\n\n```js\nfastify.routing(req, res)\n```\n\n#### route\n<a id=\"route\"></a>\n\nMethod to add routes to the server, it also has shorthand functions, check\n[here](./Routes.md).\n\n#### hasRoute\n<a id=\"hasRoute\"></a>\n\nMethod to check if a route is already registered to the internal router. It\nexpects an object as payload. `url` and `method` are mandatory fields. It is\npossible to also specify `constraints`. The method returns true if the route is\nregistered, and false if it is not registered.\n\n```js\nconst routeExists = fastify.hasRoute({\n  url: '/',\n  method: 'GET',\n  constraints: { version: '1.0.0' } // optional\n})\n\nif (routeExists === false) {\n  // add route\n}\n```\n\n#### close\n<a id=\"close\"></a>\n\n`fastify.close(callback)`: call this function to close the server instance and\nrun the [`'onClose'`](./Hooks.md#on-close) hook.\n\nCalling `close` will also cause the server to respond to every new incoming\nrequest with a `503` error and destroy that request. See [`return503OnClosing`\nflags](#factory-return-503-on-closing) for changing this behavior.\n\nIf it is called without any arguments, it will return a Promise:\n\n```js\nfastify.close().then(() => {\n  console.log('successfully closed!')\n}, (err) => {\n  console.log('an error happened', err)\n})\n```\n\n#### decorate*\n<a id=\"decorate\"></a>\n\nFunction useful if you need to decorate the fastify instance, Reply or Request,\ncheck [here](./Decorators.md).\n\n#### register\n<a id=\"register\"></a>\n\nFastify allows the user to extend its functionality with plugins. A plugin can\nbe a set of routes, a server decorator, or whatever, check [here](./Plugins.md).\n\n#### addHook\n<a id=\"addHook\"></a>\n\nFunction to add a specific hook in the lifecycle of Fastify, check\n[here](./Hooks.md).\n\n#### prefix\n<a id=\"prefix\"></a>\n\nThe full path that will be prefixed to a route.\n\nExample:\n\n```js\nfastify.register(function (instance, opts, done) {\n  instance.get('/foo', function (request, reply) {\n    // Will log \"prefix: /v1\"\n    request.log.info('prefix: %s', instance.prefix)\n    reply.send({ prefix: instance.prefix })\n  })\n\n  instance.register(function (instance, opts, done) {\n    instance.get('/bar', function (request, reply) {\n      // Will log \"prefix: /v1/v2\"\n      request.log.info('prefix: %s', instance.prefix)\n      reply.send({ prefix: instance.prefix })\n    })\n\n    done()\n  }, { prefix: '/v2' })\n\n  done()\n}, { prefix: '/v1' })\n```\n\n#### pluginName\n<a id=\"pluginName\"></a>\n\nName of the current plugin. The root plugin is called `'fastify'`. There are\ndifferent ways to define a name (in order).\n\n1. If you use [fastify-plugin](https://github.com/fastify/fastify-plugin) the\n   metadata `name` is used.\n2. If the exported plugin has the `Symbol.for('fastify.display-name')` property,\n   then the value of that property is used.\n   Example: `pluginFn[Symbol.for('fastify.display-name')] = \"Custom Name\"`\n3. If you `module.exports` a plugin the filename is used.\n4. If you use a regular [function\n   declaration](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Functions#Defining_functions)\n   the function name is used.\n\n*Fallback*: The first two lines of your plugin will represent the plugin name.\nNewlines are replaced by ` -- `. This will help to identify the root cause when\nyou deal with many plugins.\n\nImportant: If you have to deal with nested plugins, the name differs with the\nusage of the [fastify-plugin](https://github.com/fastify/fastify-plugin) because\nno new scope is created and therefore we have no place to attach contextual\ndata. In that case, the plugin name will represent the boot order of all\ninvolved plugins in the format of `fastify -> plugin-A -> plugin-B`.\n\n#### hasPlugin\n<a id=\"hasPlugin\"></a>\n\nMethod to check if a specific plugin has been registered. Relies on the plugin\nmetadata name. Returns `true` if the plugin is registered. Otherwise, returns\n`false`.\n\n```js\nconst fastify = require('fastify')()\nfastify.register(require('@fastify/cookie'), {\n  secret: 'my-secret',\n  parseOptions: {}\n})\n\nfastify.ready(() => {\n  fastify.hasPlugin('@fastify/cookie') // true\n})\n```\n\n#### log\n<a id=\"log\"></a>\n\nThe logger instance, check [here](./Logging.md).\n\n#### version\n<a id=\"version\"></a>\n\nFastify version of the instance. Used for plugin support. See\n[Plugins](./Plugins.md#handle-the-scope) for information on how the version is\nused by plugins.\n\n#### inject\n<a id=\"inject\"></a>\n\nFake HTTP injection (for testing purposes)\n[here](../Guides/Testing.md#benefits-of-using-fastifyinject).\n\n#### addSchema\n<a id=\"add-schema\"></a>\n\n`fastify.addSchema(schemaObj)`, adds a JSON schema to the Fastify instance. This\nallows you to reuse it everywhere in your application just by using the standard\n`$ref` keyword.\n\nTo learn more, read the [Validation and\nSerialization](./Validation-and-Serialization.md) documentation.\n\n#### getSchemas\n<a id=\"get-schemas\"></a>\n\n`fastify.getSchemas()`, returns a hash of all schemas added via `.addSchema`.\nThe keys of the hash are the `$id`s of the JSON Schema provided.\n\n#### getSchema\n<a id=\"get-schema\"></a>\n\n`fastify.getSchema(id)`, return the JSON schema added with `.addSchema` and the\nmatching `id`. It returns `undefined` if it is not found.\n\n#### setReplySerializer\n<a id=\"set-reply-serializer\"></a>\n\nSet the reply serializer for all the routes. This will be used as default if a\n[Reply.serializer(func)](./Reply.md#serializerfunc) has not been set. The\nhandler is fully encapsulated, so different plugins can set different error\nhandlers. Note: the function parameter is called only for status `2xx`. Check\nout the [`setErrorHandler`](#seterrorhandler) for errors.\n\n```js\nfastify.setReplySerializer(function (payload, statusCode){\n  // serialize the payload with a sync function\n  return `my serialized ${statusCode} content: ${payload}`\n})\n```\n\n#### setValidatorCompiler\n<a id=\"set-validator-compiler\"></a>\n\nSet the schema validator compiler for all routes. See\n[#schema-validator](./Validation-and-Serialization.md#schema-validator).\n\n#### setSchemaErrorFormatter\n<a id=\"set-schema-error-formatter\"></a>\n\nSet the schema error formatter for all routes. See\n[#error-handling](./Validation-and-Serialization.md#schemaerrorformatter).\n\n#### setSerializerCompiler\n<a id=\"set-serializer-resolver\"></a>\n\nSet the schema serializer compiler for all routes. See\n[#schema-serializer](./Validation-and-Serialization.md#schema-serializer).\n**Note:** [`setReplySerializer`](#set-reply-serializer) has priority if set!\n\n#### validatorCompiler\n<a id=\"validator-compiler\"></a>\n\nThis property can be used to get the schema validator. If not set, it will be\n`null` until the server starts, then it will be a function with the signature\n`function ({ schema, method, url, httpPart })` that returns the input `schema`\ncompiled to a function for validating data. The input `schema` can access all\nthe shared schemas added with [`.addSchema`](#add-schema) function.\n\n#### serializerCompiler\n<a id=\"serializer-compiler\"></a>\n\nThis property can be used to get the schema serializer. If not set, it will be\n`null` until the server starts, then it will be a function with the signature\n`function ({ schema, method, url, httpPart })` that returns the input `schema`\ncompiled to a function for validating data. The input `schema` can access all\nthe shared schemas added with [`.addSchema`](#add-schema) function.\n\n#### schemaErrorFormatter\n<a id=\"schema-error-formatter\"></a>\n\nThis property can be used to set a function to format errors that happen while\nthe `validationCompiler` fails to validate the schema. See\n[#error-handling](./Validation-and-Serialization.md#schemaerrorformatter).\n\n#### schemaController\n<a id=\"schema-controller\"></a>\n\nThis property can be used to fully manage:\n- `bucket`: where the schemas of your application will be stored\n- `compilersFactory`: what module must compile the JSON schemas\n\nIt can be useful when your schemas are stored in another data structure that is\nunknown to Fastify. See [issue\n#2446](https://github.com/fastify/fastify/issues/2446) for an example of what\nthis property helps to resolve.\n\nAnother use case is to tweak all the schemas processing. Doing so it is possible\nto use Ajv v8 JTD or Standalone feature. To use such as JTD or the Standalone\nmode, refers to the [`@fastify/ajv-compiler`\ndocumentation](https://github.com/fastify/ajv-compiler#usage).\n\n```js\nconst fastify = Fastify({\n  schemaController: {\n    /**\n     * This factory is called whenever `fastify.register()` is called.\n     * It may receive as input the schemas of the parent context if some schemas have been added.\n     * @param {object} parentSchemas these schemas will be returned by the\n     * `getSchemas()` method function of the returned `bucket`.\n     */\n    bucket: function factory (parentSchemas) {\n      return {\n        add (inputSchema) {\n          // This function must store the schema added by the user.\n          // This function is invoked when `fastify.addSchema()` is called.\n        },\n        getSchema (schema$id) {\n          // This function must return the raw schema requested by the `schema$id`.\n          // This function is invoked when `fastify.getSchema(id)` is called.\n          return aSchema\n        },\n        getSchemas () {\n          // This function must return all the schemas referenced by the routes schemas' $ref\n          // It must return a JSON where the property is the schema `$id` and the value is the raw JSON Schema.\n          const allTheSchemaStored = {\n            'schema$id1': schema1,\n            'schema$id2': schema2\n          }\n          return allTheSchemaStored\n        }\n      }\n    },\n\n    /**\n     * The compilers factory let you fully control the validator and serializer\n     * in the Fastify's lifecycle, providing the encapsulation to your compilers.\n     */\n    compilersFactory: {\n      /**\n       * This factory is called whenever a new validator instance is needed.\n       * It may be called whenever `fastify.register()` is called only if new schemas have been added to the\n       * encapsulation context.\n       * It may receive as input the schemas of the parent context if some schemas have been added.\n       * @param {object} externalSchemas these schemas will be returned by the\n       * `bucket.getSchemas()`. Needed to resolve the external references $ref.\n       * @param {object} ajvServerOption the server `ajv` options to build your compilers accordingly\n       */\n      buildValidator: function factory (externalSchemas, ajvServerOption) {\n        // This factory function must return a schema validator compiler.\n        // See [#schema-validator](./Validation-and-Serialization.md#schema-validator) for details.\n        const yourAjvInstance = new Ajv(ajvServerOption.customOptions)\n        return function validatorCompiler ({ schema, method, url, httpPart }) {\n          return yourAjvInstance.compile(schema)\n        }\n      },\n\n      /**\n       * This factory is called whenever a new serializer instance is needed.\n       * It may be called whenever `fastify.register()` is called only if new schemas have been added to the\n       * encapsulation context.\n       * It may receive as input the schemas of the parent context if some schemas have been added.\n       * @param {object} externalSchemas these schemas will be returned by the\n       * `bucket.getSchemas()`. Needed to resolve the external references $ref.\n       * @param {object} serializerOptsServerOption the server `serializerOpts`\n       * options to build your compilers accordingly\n       */\n      buildSerializer: function factory (externalSchemas, serializerOptsServerOption) {\n        // This factory function must return a schema serializer compiler.\n        // See [#schema-serializer](./Validation-and-Serialization.md#schema-serializer) for details.\n        return function serializerCompiler ({ schema, method, url, httpStatus, contentType }) {\n          return data => JSON.stringify(data)\n        }\n      }\n    }\n  }\n});\n```\n\n#### setNotFoundHandler\n<a id=\"set-not-found-handler\"></a>\n\n`fastify.setNotFoundHandler(handler(request, reply))`: set the 404 handler. This\ncall is encapsulated by prefix, so different plugins can set different not found\nhandlers if a different [`prefix` option](./Plugins.md#route-prefixing-option)\nis passed to `fastify.register()`. The handler is treated as a regular route\nhandler so requests will go through the full [Fastify\nlifecycle](./Lifecycle.md#lifecycle). *async-await* is supported as well.\n\nYou can also register [`preValidation`](./Hooks.md#route-hooks) and\n[`preHandler`](./Hooks.md#route-hooks) hooks for the 404 handler.\n\n_Note: The `preValidation` hook registered using this method will run for a\nroute that Fastify does not recognize and **not** when a route handler manually\ncalls [`reply.callNotFound`](./Reply.md#call-not-found)_. In which case, only\npreHandler will be run.\n\n```js\nfastify.setNotFoundHandler({\n  preValidation: (req, reply, done) => {\n    // your code\n    done()\n  },\n  preHandler: (req, reply, done) => {\n    // your code\n    done()\n  }\n}, function (request, reply) {\n    // Default not found handler with preValidation and preHandler hooks\n})\n\nfastify.register(function (instance, options, done) {\n  instance.setNotFoundHandler(function (request, reply) {\n    // Handle not found request without preValidation and preHandler hooks\n    // to URLs that begin with '/v1'\n  })\n  done()\n}, { prefix: '/v1' })\n```\n\nFastify calls setNotFoundHandler to add a default 404 handler at startup before\nplugins are registered. If you would like to augment the behavior of the default\n404 handler, for example with plugins, you can call setNotFoundHandler with no\narguments `fastify.setNotFoundHandler()` within the context of these registered\nplugins.\n\n> Note: Some config properties from the request object will be\n> undefined inside the custom not found handler. E.g:\n> `request.routerPath`, `routerMethod` and `context.config`.\n> This method design goal is to allow calling the common not found route.\n> To return a per-route customized 404 response, you can do it in\n> the response itself.\n\n#### setErrorHandler\n<a id=\"set-error-handler\"></a>\n\n`fastify.setErrorHandler(handler(error, request, reply))`: Set a function that\nwill be called whenever an error happens. The handler is bound to the Fastify\ninstance and is fully encapsulated, so different plugins can set different error\nhandlers. *async-await* is supported as well.\n\n*Note: If the error `statusCode` is less than 400, Fastify will automatically\nset it at 500 before calling the error handler.*\n\n*Also note* that `setErrorHandler` will ***not*** catch any error inside\nan `onResponse` hook because the response has already been sent to the client.\n\n```js\nfastify.setErrorHandler(function (error, request, reply) {\n  // Log error\n  this.log.error(error)\n  // Send error response\n  reply.status(409).send({ ok: false })\n})\n```\n\nFastify is provided with a default function that is called if no error handler\nis set. It can be accessed using `fastify.errorHandler` and it logs the error\nwith respect to its `statusCode`.\n\n```js\nvar statusCode = error.statusCode\nif (statusCode >= 500) {\n  log.error(error)\n} else if (statusCode >= 400) {\n  log.info(error)\n} else {\n  log.error(error)\n}\n```\n\n#### addConstraintStrategy\n<a id=\"addConstraintStrategy\"></a>\n\nFunction to add a custom constraint strategy. To register a new type of\nconstraint, you must add a new constraint strategy that knows how to match\nvalues to handlers, and that knows how to get the constraint value from a\nrequest.\n\nAdd a custom constraint strategy using the `fastify.addConstraintStrategy`\nmethod:\n\n```js\nconst customResponseTypeStrategy = {\n  // strategy name for referencing in the route handler `constraints` options\n  name: 'accept',\n  // storage factory for storing routes in the find-my-way route tree\n  storage: function () {\n    let handlers = {}\n    return {\n      get: (type) => { return handlers[type] || null },\n      set: (type, store) => { handlers[type] = store }\n    }\n  },\n  // function to get the value of the constraint from each incoming request\n  deriveConstraint: (req, ctx) => {\n    return req.headers['accept']\n  },\n  // optional flag marking if handlers without constraints can match requests that have a value for this constraint\n  mustMatchWhenDerived: true\n}\n\nconst router = Fastify();\nrouter.addConstraintStrategy(customResponseTypeStrategy);\n```\n\n#### hasConstraintStrategy\n<a id=\"hasConstraintStrategy\"></a>\n\nThe `fastify.hasConstraintStrategy(strategyName)` checks if there already exists\na custom constraint strategy with the same name.\n\n#### printRoutes\n<a id=\"print-routes\"></a>\n\n`fastify.printRoutes()`: Prints the representation of the internal radix tree\nused by the router, useful for debugging. Alternatively, `fastify.printRoutes({\ncommonPrefix: false })` can be used to print the flattened routes tree.\n\n*Remember to call it inside or after a `ready` call.*\n\n```js\nfastify.get('/test', () => {})\nfastify.get('/test/hello', () => {})\nfastify.get('/hello/world', () => {})\nfastify.get('/helicopter', () => {})\n\nfastify.ready(() => {\n  console.log(fastify.printRoutes())\n  // └── /\n  //     ├── test (GET)\n  //     │   └── /hello (GET)\n  //     └── hel\n  //         ├── lo/world (GET)\n  //         └── licopter (GET)\n\n  console.log(fastify.printRoutes({ commonPrefix: false }))\n  // └── / (-)\n  //     ├── test (GET)\n  //     │   └── /hello (GET)\n  //     ├── hello/world (GET)\n  //     └── helicopter (GET)\n\n})\n```\n\n`fastify.printRoutes({ includeMeta: (true | []) })` will display properties from\nthe `route.store` object for each displayed route. This can be an `array` of\nkeys (e.g. `['onRequest', Symbol('key')]`), or `true` to display all properties.\nA shorthand option, `fastify.printRoutes({ includeHooks: true })` will include\nall [hooks](./Hooks.md).\n\n```js\n  console.log(fastify.printRoutes({ includeHooks: true, includeMeta: ['metaProperty'] }))\n  // └── /\n  //     ├── test (GET)\n  //     │   • (onRequest) [\"anonymous()\",\"namedFunction()\"]\n  //     │   • (metaProperty) \"value\"\n  //     │   └── /hello (GET)\n  //     └── hel\n  //         ├── lo/world (GET)\n  //         │   • (onTimeout) [\"anonymous()\"]\n  //         └── licopter (GET)\n\n  console.log(fastify.printRoutes({ includeHooks: true }))\n  // └── /\n  //     ├── test (GET)\n  //     │   • (onRequest) [\"anonymous()\",\"namedFunction()\"]\n  //     │   └── /hello (GET)\n  //     └── hel\n  //         ├── lo/world (GET)\n  //         │   • (onTimeout) [\"anonymous()\"]\n  //         └── licopter (GET)\n```\n\n#### printPlugins\n<a id=\"print-plugins\"></a>\n\n`fastify.printPlugins()`: Prints the representation of the internal plugin tree\nused by the avvio, useful for debugging require order issues.\n\n*Remember to call it inside or after a `ready` call.*\n\n```js\nfastify.register(async function foo (instance) {\n  instance.register(async function bar () {})\n})\nfastify.register(async function baz () {})\n\nfastify.ready(() => {\n  console.error(fastify.printPlugins())\n  // will output the following to stderr:\n  // └── root\n  //     ├── foo\n  //     │   └── bar\n  //     └── baz\n})\n```\n\n#### addContentTypeParser\n<a id=\"addContentTypeParser\"></a>\n\n`fastify.addContentTypeParser(content-type, options, parser)` is used to pass\ncustom parser for a given content type. Useful for adding parsers for custom\ncontent types, e.g. `text/json, application/vnd.oasis.opendocument.text`.\n`content-type` can be a string, string array or RegExp.\n\n```js\n// The two arguments passed to getDefaultJsonParser are for ProtoType poisoning\n// and Constructor Poisoning configuration respectively. The possible values are\n// 'ignore', 'remove', 'error'. ignore  skips all validations and it is similar\n// to calling JSON.parse() directly. See the\n// [`secure-json-parse` documentation](https://github.com/fastify/secure-json-parse#api) for more information.\n\nfastify.addContentTypeParser('text/json', { asString: true }, fastify.getDefaultJsonParser('ignore', 'ignore'))\n```\n\n#### hasContentTypeParser\n<a id=\"hasContentTypeParser\"></a>\n\n`fastify.hasContentTypeParser(contentType)` is used to check whether there is a\ncontent type parser in the current context for the specified content type.\n\n```js\nfastify.hasContentTypeParser('text/json')\n\nfastify.hasContentTypeParser(/^.+\\/json$/)\n```\n\n#### removeContentTypeParser\n<a id=\"removeContentTypeParser\"></a>\n\n`fastify.removeContentTypeParser(contentType)` is used to remove content type\nparsers in the current context. This method allows for example to remove the\nboth built-in parsers for `application/json` and `text/plain`.\n\n```js\nfastify.removeContentTypeParser('application/json')\n\nfastify.removeContentTypeParser(['application/json', 'text/plain'])\n```\n\n#### removeAllContentTypeParsers\n<a id=\"removeAllContentTypeParsers\"></a>\n\nThe `fastify.removeAllContentTypeParsers()` method allows all content type\nparsers in the current context to be removed. A use case of this method is the\nimplementation of catch-all content type parser. Before adding this parser with\n`fastify.addContentTypeParser()` one could call the\n`removeAllContentTypeParsers` method.\n\nFor more details about the usage of the different content type parser APIs see\n[here](./ContentTypeParser.md#usage).\n\n#### getDefaultJsonParser\n<a id=\"getDefaultJsonParser\"></a>\n\n`fastify.getDefaultJsonParser(onProtoPoisoning, onConstructorPoisoning)` takes\ntwo arguments. First argument is ProtoType poisoning configuration and second\nargument is constructor poisoning configuration. See the [`secure-json-parse`\ndocumentation](https://github.com/fastify/secure-json-parse#api) for more\ninformation.\n\n\n#### defaultTextParser\n<a id=\"defaultTextParser\"></a>\n\n`fastify.defaultTextParser()` can be used to parse content as plain text.\n\n```js\nfastify.addContentTypeParser('text/json', { asString: true }, fastify.defaultTextParser)\n```\n\n#### errorHandler\n<a id=\"errorHandler\"></a>\n\n`fastify.errorHandler` can be used to handle errors using fastify's default\nerror handler.\n\n```js\nfastify.get('/', {\n  errorHandler: (error, request, reply) => {\n    if (error.code === 'SOMETHING_SPECIFIC') {\n      reply.send({ custom: 'response' })\n      return\n    }\n\n    fastify.errorHandler(error, request, response)\n  }\n}, handler)\n```\n\n#### initialConfig\n<a id=\"initial-config\"></a>\n\n`fastify.initialConfig`: Exposes a frozen read-only object registering the\ninitial options passed down by the user to the Fastify instance.\n\nCurrently the properties that can be exposed are:\n- connectionTimeout\n- keepAliveTimeout\n- bodyLimit\n- caseSensitive\n- allowUnsafeRegex\n- http2\n- https (it will return `false`/`true` or `{ allowHTTP1: true/false }` if\n  explicitly passed)\n- ignoreTrailingSlash\n- disableRequestLogging\n- maxParamLength\n- onProtoPoisoning\n- onConstructorPoisoning\n- pluginTimeout\n- requestIdHeader\n- requestIdLogLabel\n- http2SessionTimeout\n\n```js\nconst { readFileSync } = require('fs')\nconst Fastify = require('fastify')\n\nconst fastify = Fastify({\n  https: {\n    allowHTTP1: true,\n    key: readFileSync('./fastify.key'),\n    cert: readFileSync('./fastify.cert')\n  },\n  logger: { level: 'trace'},\n  ignoreTrailingSlash: true,\n  maxParamLength: 200,\n  caseSensitive: true,\n  trustProxy: '127.0.0.1,192.168.1.1/24',\n})\n\nconsole.log(fastify.initialConfig)\n/*\nwill log :\n{\n  caseSensitive: true,\n  https: { allowHTTP1: true },\n  ignoreTrailingSlash: true,\n  maxParamLength: 200\n}\n*/\n\nfastify.register(async (instance, opts) => {\n  instance.get('/', async (request, reply) => {\n    return instance.initialConfig\n    /*\n    will return :\n    {\n      caseSensitive: true,\n      https: { allowHTTP1: true },\n      ignoreTrailingSlash: true,\n      maxParamLength: 200\n    }\n    */\n  })\n\n  instance.get('/error', async (request, reply) => {\n    // will throw an error because initialConfig is read-only\n    // and can not be modified\n    instance.initialConfig.https.allowHTTP1 = false\n\n    return instance.initialConfig\n  })\n})\n\n// Start listening.\nfastify.listen({ port: 3000 }, (err) => {\n  if (err) {\n    fastify.log.error(err)\n    process.exit(1)\n  }\n})\n```\n(/test/internals/request-validate.test.jsŉ'use strict'\n\nconst { test } = require('tap')\nconst Ajv = require('ajv')\nconst { kRequestCacheValidateFns, kRouteContext } = require('../../lib/symbols')\nconst Fastify = require('../../fastify')\n\nconst defaultSchema = {\n  type: 'object',\n  required: ['hello'],\n  properties: {\n    hello: { type: 'string' },\n    world: { type: 'string' }\n  }\n}\n\nconst requestSchema = {\n  params: {\n    id: {\n      type: 'integer',\n      minimum: 1\n    }\n  },\n  querystring: {\n    foo: {\n      type: 'string',\n      enum: ['bar']\n    }\n  },\n  body: defaultSchema,\n  headers: {\n    'x-foo': {\n      type: 'string'\n    }\n  }\n}\n\ntest('#compileValidationSchema', subtest => {\n  subtest.plan(7)\n\n  subtest.test('Should return a function - Route without schema', async t => {\n    const fastify = Fastify()\n\n    t.plan(3)\n\n    fastify.get('/', (req, reply) => {\n      const validate = req.compileValidationSchema(defaultSchema)\n\n      t.type(validate, Function)\n      t.ok(validate({ hello: 'world' }))\n      t.notOk(validate({ world: 'foo' }))\n\n      reply.send({ hello: 'world' })\n    })\n\n    await fastify.inject({\n      path: '/',\n      method: 'GET'\n    })\n  })\n\n  subtest.test('Validate function errors property should be null after validation when input is valid', async t => {\n    const fastify = Fastify()\n\n    t.plan(3)\n\n    fastify.get('/', (req, reply) => {\n      const validate = req.compileValidationSchema(defaultSchema)\n\n      t.ok(validate({ hello: 'world' }))\n      t.ok(Object.prototype.hasOwnProperty.call(validate, 'errors'))\n      t.equal(validate.errors, null)\n\n      reply.send({ hello: 'world' })\n    })\n\n    await fastify.inject({\n      path: '/',\n      method: 'GET'\n    })\n  })\n\n  subtest.test('Validate function errors property should be an array of errors after validation when input is valid', async t => {\n    const fastify = Fastify()\n\n    t.plan(4)\n\n    fastify.get('/', (req, reply) => {\n      const validate = req.compileValidationSchema(defaultSchema)\n\n      t.notOk(validate({ world: 'foo' }))\n      t.ok(Object.prototype.hasOwnProperty.call(validate, 'errors'))\n      t.ok(Array.isArray(validate.errors))\n      t.ok(validate.errors.length > 0)\n\n      reply.send({ hello: 'world' })\n    })\n\n    await fastify.inject({\n      path: '/',\n      method: 'GET'\n    })\n  })\n\n  subtest.test(\n    'Should reuse the validate fn across multiple invocations - Route without schema',\n    async t => {\n      const fastify = Fastify()\n      let validate = null\n      let counter = 0\n\n      t.plan(16)\n\n      fastify.get('/', (req, reply) => {\n        counter++\n        if (counter > 1) {\n          const newValidate = req.compileValidationSchema(defaultSchema)\n          t.equal(validate, newValidate, 'Are the same validate function')\n          validate = newValidate\n        } else {\n          validate = req.compileValidationSchema(defaultSchema)\n        }\n\n        t.type(validate, Function)\n        t.ok(validate({ hello: 'world' }))\n        t.notOk(validate({ world: 'foo' }))\n\n        reply.send({ hello: 'world' })\n      })\n\n      await Promise.all([\n        fastify.inject({\n          path: '/',\n          method: 'GET'\n        }),\n        fastify.inject({\n          path: '/',\n          method: 'GET'\n        }),\n        fastify.inject({\n          path: '/',\n          method: 'GET'\n        }),\n        fastify.inject({\n          path: '/',\n          method: 'GET'\n        })\n      ])\n\n      t.equal(counter, 4)\n    }\n  )\n\n  subtest.test('Should return a function - Route with schema', async t => {\n    const fastify = Fastify()\n\n    t.plan(3)\n\n    fastify.post(\n      '/',\n      {\n        schema: {\n          body: defaultSchema\n        }\n      },\n      (req, reply) => {\n        const validate = req.compileValidationSchema(defaultSchema)\n\n        t.type(validate, Function)\n        t.ok(validate({ hello: 'world' }))\n        t.notOk(validate({ world: 'foo' }))\n\n        reply.send({ hello: 'world' })\n      }\n    )\n\n    await fastify.inject({\n      path: '/',\n      method: 'POST',\n      payload: {\n        hello: 'world',\n        world: 'foo'\n      }\n    })\n  })\n\n  subtest.test(\n    'Should use the custom validator compiler for the route',\n    async t => {\n      const fastify = Fastify()\n      let called = 0\n      const custom = ({ schema, httpPart, url, method }) => {\n        t.equal(schema, defaultSchema)\n        t.equal(url, '/')\n        t.equal(method, 'GET')\n        t.equal(httpPart, 'querystring')\n\n        return input => {\n          called++\n          t.same(input, { hello: 'world' })\n          return true\n        }\n      }\n\n      t.plan(10)\n\n      fastify.get('/', { validatorCompiler: custom }, (req, reply) => {\n        const first = req.compileValidationSchema(defaultSchema, 'querystring')\n        const second = req.compileValidationSchema(defaultSchema, 'querystring')\n\n        t.equal(first, second)\n        t.ok(first({ hello: 'world' }))\n        t.ok(second({ hello: 'world' }))\n        t.equal(called, 2)\n\n        reply.send({ hello: 'world' })\n      })\n\n      await fastify.inject({\n        path: '/',\n        method: 'GET'\n      })\n    }\n  )\n\n  subtest.test(\n    'Should instantiate a WeakMap when executed for first time',\n    async t => {\n      const fastify = Fastify()\n\n      t.plan(5)\n\n      fastify.get('/', (req, reply) => {\n        t.equal(req[kRouteContext][kRequestCacheValidateFns], null)\n        t.type(req.compileValidationSchema(defaultSchema), Function)\n        t.type(req[kRouteContext][kRequestCacheValidateFns], WeakMap)\n        t.type(req.compileValidationSchema(Object.assign({}, defaultSchema)), Function)\n        t.type(req[kRouteContext][kRequestCacheValidateFns], WeakMap)\n\n        reply.send({ hello: 'world' })\n      })\n\n      await fastify.inject({\n        path: '/',\n        method: 'GET'\n      })\n    }\n  )\n})\n\ntest('#getValidationFunction', subtest => {\n  subtest.plan(6)\n\n  subtest.test('Should return a validation function', async t => {\n    const fastify = Fastify()\n\n    t.plan(1)\n\n    fastify.get('/', (req, reply) => {\n      const original = req.compileValidationSchema(defaultSchema)\n      const referenced = req.getValidationFunction(defaultSchema)\n\n      t.equal(original, referenced)\n\n      reply.send({ hello: 'world' })\n    })\n\n    await fastify.inject({\n      path: '/',\n      method: 'GET'\n    })\n  })\n\n  subtest.test('Validate function errors property should be null after validation when input is valid', async t => {\n    const fastify = Fastify()\n\n    t.plan(3)\n\n    fastify.get('/', (req, reply) => {\n      req.compileValidationSchema(defaultSchema)\n      const validate = req.getValidationFunction(defaultSchema)\n\n      t.ok(validate({ hello: 'world' }))\n      t.ok(Object.prototype.hasOwnProperty.call(validate, 'errors'))\n      t.equal(validate.errors, null)\n\n      reply.send({ hello: 'world' })\n    })\n\n    await fastify.inject({\n      path: '/',\n      method: 'GET'\n    })\n  })\n\n  subtest.test('Validate function errors property should be an array of errors after validation when input is valid', async t => {\n    const fastify = Fastify()\n\n    t.plan(4)\n\n    fastify.get('/', (req, reply) => {\n      req.compileValidationSchema(defaultSchema)\n      const validate = req.getValidationFunction(defaultSchema)\n\n      t.notOk(validate({ world: 'foo' }))\n      t.ok(Object.prototype.hasOwnProperty.call(validate, 'errors'))\n      t.ok(Array.isArray(validate.errors))\n      t.ok(validate.errors.length > 0)\n\n      reply.send({ hello: 'world' })\n    })\n\n    await fastify.inject({\n      path: '/',\n      method: 'GET'\n    })\n  })\n\n  subtest.test('Should return undefined if no schema compiled', async t => {\n    const fastify = Fastify()\n\n    t.plan(2)\n\n    fastify.get('/', (req, reply) => {\n      const validate = req.getValidationFunction(defaultSchema)\n      t.notOk(validate)\n\n      const validateFn = req.getValidationFunction(42)\n      t.notOk(validateFn)\n\n      reply.send({ hello: 'world' })\n    })\n\n    await fastify.inject('/')\n  })\n\n  subtest.test(\n    'Should return the validation function from each HTTP part',\n    async t => {\n      const fastify = Fastify()\n      let headerValidation = null\n      let customValidation = null\n\n      t.plan(15)\n\n      fastify.post(\n        '/:id',\n        {\n          schema: requestSchema\n        },\n        (req, reply) => {\n          const { params } = req\n\n          switch (params.id) {\n            case 1:\n              customValidation = req.compileValidationSchema(defaultSchema)\n              t.ok(req.getValidationFunction('body'))\n              t.ok(req.getValidationFunction('body')({ hello: 'world' }))\n              t.notOk(req.getValidationFunction('body')({ world: 'hello' }))\n              break\n            case 2:\n              headerValidation = req.getValidationFunction('headers')\n              t.ok(headerValidation)\n              t.ok(headerValidation({ 'x-foo': 'world' }))\n              t.notOk(headerValidation({ 'x-foo': [] }))\n              break\n            case 3:\n              t.ok(req.getValidationFunction('params'))\n              t.ok(req.getValidationFunction('params')({ id: 123 }))\n              t.notOk(req.getValidationFunction('params'({ id: 1.2 })))\n              break\n            case 4:\n              t.ok(req.getValidationFunction('querystring'))\n              t.ok(req.getValidationFunction('querystring')({ foo: 'bar' }))\n              t.notOk(\n                req.getValidationFunction('querystring')({ foo: 'not-bar' })\n              )\n              break\n            case 5:\n              t.equal(\n                customValidation,\n                req.getValidationFunction(defaultSchema)\n              )\n              t.ok(customValidation({ hello: 'world' }))\n              t.notOk(customValidation({}))\n              t.equal(headerValidation, req.getValidationFunction('headers'))\n              break\n            default:\n              t.fail('Invalid id')\n          }\n\n          reply.send({ hello: 'world' })\n        }\n      )\n\n      const promises = []\n\n      for (let i = 1; i < 6; i++) {\n        promises.push(\n          fastify.inject({\n            path: `/${i}`,\n            method: 'post',\n            query: { foo: 'bar' },\n            payload: {\n              hello: 'world'\n            },\n            headers: {\n              'x-foo': 'x-bar'\n            }\n          })\n        )\n      }\n\n      await Promise.all(promises)\n    }\n  )\n\n  subtest.test('Should not set a WeakMap if there is no schema', async t => {\n    const fastify = Fastify()\n\n    t.plan(1)\n\n    fastify.get('/', (req, reply) => {\n      req.getValidationFunction(defaultSchema)\n      req.getValidationFunction('body')\n\n      t.equal(req[kRouteContext][kRequestCacheValidateFns], null)\n      reply.send({ hello: 'world' })\n    })\n\n    await fastify.inject({\n      path: '/',\n      method: 'GET'\n    })\n  })\n})\n\ntest('#validate', subtest => {\n  subtest.plan(7)\n\n  subtest.test(\n    'Should return true/false if input valid - Route without schema',\n    async t => {\n      const fastify = Fastify()\n\n      t.plan(2)\n\n      fastify.get('/', (req, reply) => {\n        const isNotValid = req.validateInput({ world: 'string' }, defaultSchema)\n        const isValid = req.validateInput({ hello: 'string' }, defaultSchema)\n\n        t.notOk(isNotValid)\n        t.ok(isValid)\n\n        reply.send({ hello: 'world' })\n      })\n\n      await fastify.inject({\n        path: '/',\n        method: 'GET'\n      })\n    }\n  )\n\n  subtest.test(\n    'Should use the custom validator compiler for the route',\n    async t => {\n      const fastify = Fastify()\n      let called = 0\n      const custom = ({ schema, httpPart, url, method }) => {\n        t.equal(schema, defaultSchema)\n        t.equal(url, '/')\n        t.equal(method, 'GET')\n        t.equal(httpPart, 'querystring')\n\n        return input => {\n          called++\n          t.same(input, { hello: 'world' })\n          return true\n        }\n      }\n\n      t.plan(9)\n\n      fastify.get('/', { validatorCompiler: custom }, (req, reply) => {\n        const ok = req.validateInput(\n          { hello: 'world' },\n          defaultSchema,\n          'querystring'\n        )\n        const ok2 = req.validateInput({ hello: 'world' }, defaultSchema)\n\n        t.ok(ok)\n        t.ok(ok2)\n        t.equal(called, 2)\n\n        reply.send({ hello: 'world' })\n      })\n\n      await fastify.inject({\n        path: '/',\n        method: 'GET'\n      })\n    }\n  )\n\n  subtest.test(\n    'Should return true/false if input valid - With Schema for Route defined',\n    async t => {\n      const fastify = Fastify()\n\n      t.plan(8)\n\n      fastify.post(\n        '/:id',\n        {\n          schema: requestSchema\n        },\n        (req, reply) => {\n          const { params } = req\n\n          switch (params.id) {\n            case 1:\n              t.ok(req.validateInput({ hello: 'world' }, 'body'))\n              t.notOk(req.validateInput({ hello: [], world: 'foo' }, 'body'))\n              break\n            case 2:\n              t.notOk(req.validateInput({ foo: 'something' }, 'querystring'))\n              t.ok(req.validateInput({ foo: 'bar' }, 'querystring'))\n              break\n            case 3:\n              t.notOk(req.validateInput({ 'x-foo': [] }, 'headers'))\n              t.ok(req.validateInput({ 'x-foo': 'something' }, 'headers'))\n              break\n            case 4:\n              t.ok(req.validateInput({ id: params.id }, 'params'))\n              t.notOk(req.validateInput({ id: 0 }, 'params'))\n              break\n            default:\n              t.fail('Invalid id')\n          }\n\n          reply.send({ hello: 'world' })\n        }\n      )\n\n      const promises = []\n\n      for (let i = 1; i < 5; i++) {\n        promises.push(\n          fastify.inject({\n            path: `/${i}`,\n            method: 'post',\n            query: { foo: 'bar' },\n            payload: {\n              hello: 'world'\n            },\n            headers: {\n              'x-foo': 'x-bar'\n            }\n          })\n        )\n      }\n\n      await Promise.all(promises)\n    }\n  )\n\n  subtest.test(\n    'Should throw if missing validation fn for HTTP part and not schema provided',\n    async t => {\n      const fastify = Fastify()\n\n      t.plan(10)\n\n      fastify.get('/:id', (req, reply) => {\n        const { params } = req\n\n        switch (parseInt(params.id)) {\n          case 1:\n            req.validateInput({}, 'body')\n            break\n          case 2:\n            req.validateInput({}, 'querystring')\n            break\n          case 3:\n            req.validateInput({}, 'query')\n            break\n          case 4:\n            req.validateInput({ 'x-foo': [] }, 'headers')\n            break\n          case 5:\n            req.validateInput({ id: 0 }, 'params')\n            break\n          default:\n            t.fail('Invalid id')\n        }\n      })\n\n      const promises = []\n\n      for (let i = 1; i < 6; i++) {\n        promises.push(\n          (async j => {\n            const response = await fastify.inject(`/${j}`)\n\n            const result = response.json()\n            t.equal(result.statusCode, 500)\n            t.equal(result.code, 'FST_ERR_REQ_INVALID_VALIDATION_INVOCATION')\n          })(i)\n        )\n      }\n\n      await Promise.all(promises)\n    }\n  )\n\n  subtest.test(\n    'Should throw if missing validation fn for HTTP part and not valid schema provided',\n    async t => {\n      const fastify = Fastify()\n\n      t.plan(10)\n\n      fastify.get('/:id', (req, reply) => {\n        const { params } = req\n\n        switch (parseInt(params.id)) {\n          case 1:\n            req.validateInput({}, 1, 'body')\n            break\n          case 2:\n            req.validateInput({}, [], 'querystring')\n            break\n          case 3:\n            req.validateInput({}, '', 'query')\n            break\n          case 4:\n            req.validateInput({ 'x-foo': [] }, null, 'headers')\n            break\n          case 5:\n            req.validateInput({ id: 0 }, () => {}, 'params')\n            break\n          default:\n            t.fail('Invalid id')\n        }\n      })\n\n      const promises = []\n\n      for (let i = 1; i < 6; i++) {\n        promises.push(\n          (async j => {\n            const response = await fastify.inject({\n              path: `/${j}`,\n              method: 'GET'\n            })\n\n            const result = response.json()\n            t.equal(result.statusCode, 500)\n            t.equal(result.code, 'FST_ERR_REQ_INVALID_VALIDATION_INVOCATION')\n          })(i)\n        )\n      }\n\n      await Promise.all(promises)\n    }\n  )\n\n  subtest.test('Should throw if invalid schema passed', async t => {\n    const fastify = Fastify()\n\n    t.plan(10)\n\n    fastify.get('/:id', (req, reply) => {\n      const { params } = req\n\n      switch (parseInt(params.id)) {\n        case 1:\n          req.validateInput({}, 1)\n          break\n        case 2:\n          req.validateInput({}, '')\n          break\n        case 3:\n          req.validateInput({}, [])\n          break\n        case 4:\n          req.validateInput({ 'x-foo': [] }, null)\n          break\n        case 5:\n          req.validateInput({ id: 0 }, () => {})\n          break\n        default:\n          t.fail('Invalid id')\n      }\n    })\n\n    const promises = []\n\n    for (let i = 1; i < 6; i++) {\n      promises.push(\n        (async j => {\n          const response = await fastify.inject({\n            path: `/${j}`,\n            method: 'GET'\n          })\n\n          const result = response.json()\n          t.equal(result.statusCode, 500)\n          t.equal(result.code, 'FST_ERR_REQ_INVALID_VALIDATION_INVOCATION')\n        })(i)\n      )\n    }\n\n    await Promise.all(promises)\n  })\n\n  subtest.test(\n    'Should set a WeakMap if compiling the very first schema',\n    async t => {\n      const fastify = Fastify()\n\n      t.plan(3)\n\n      fastify.get('/', (req, reply) => {\n        t.equal(req[kRouteContext][kRequestCacheValidateFns], null)\n        t.equal(req.validateInput({ hello: 'world' }, defaultSchema), true)\n        t.type(req[kRouteContext][kRequestCacheValidateFns], WeakMap)\n\n        reply.send({ hello: 'world' })\n      })\n\n      await fastify.inject({\n        path: '/',\n        method: 'GET'\n      })\n    }\n  )\n})\n\ntest('Nested Context', subtest => {\n  subtest.plan(1)\n\n  subtest.test('Level_1', tst => {\n    tst.plan(3)\n    tst.test('#compileValidationSchema', ntst => {\n      ntst.plan(4)\n\n      ntst.test('Should return a function - Route without schema', async t => {\n        const fastify = Fastify()\n\n        fastify.register((instance, opts, next) => {\n          instance.get('/', (req, reply) => {\n            const validate = req.compileValidationSchema(defaultSchema)\n\n            t.type(validate, Function)\n            t.ok(validate({ hello: 'world' }))\n            t.notOk(validate({ world: 'foo' }))\n\n            reply.send({ hello: 'world' })\n          })\n\n          next()\n        })\n\n        t.plan(3)\n\n        await fastify.inject({\n          path: '/',\n          method: 'GET'\n        })\n      })\n\n      ntst.test(\n        'Should reuse the validate fn across multiple invocations - Route without schema',\n        async t => {\n          const fastify = Fastify()\n          let validate = null\n          let counter = 0\n\n          t.plan(16)\n\n          fastify.register((instance, opts, next) => {\n            instance.get('/', (req, reply) => {\n              counter++\n              if (counter > 1) {\n                const newValidate = req.compileValidationSchema(defaultSchema)\n                t.equal(validate, newValidate, 'Are the same validate function')\n                validate = newValidate\n              } else {\n                validate = req.compileValidationSchema(defaultSchema)\n              }\n\n              t.type(validate, Function)\n              t.ok(validate({ hello: 'world' }))\n              t.notOk(validate({ world: 'foo' }))\n\n              reply.send({ hello: 'world' })\n            })\n\n            next()\n          })\n\n          await Promise.all([\n            fastify.inject('/'),\n            fastify.inject('/'),\n            fastify.inject('/'),\n            fastify.inject('/')\n          ])\n\n          t.equal(counter, 4)\n        }\n      )\n\n      ntst.test('Should return a function - Route with schema', async t => {\n        const fastify = Fastify()\n\n        t.plan(3)\n\n        fastify.register((instance, opts, next) => {\n          instance.post(\n            '/',\n            {\n              schema: {\n                body: defaultSchema\n              }\n            },\n            (req, reply) => {\n              const validate = req.compileValidationSchema(defaultSchema)\n\n              t.type(validate, Function)\n              t.ok(validate({ hello: 'world' }))\n              t.notOk(validate({ world: 'foo' }))\n\n              reply.send({ hello: 'world' })\n            }\n          )\n\n          next()\n        })\n\n        await fastify.inject({\n          path: '/',\n          method: 'POST',\n          payload: {\n            hello: 'world',\n            world: 'foo'\n          }\n        })\n      })\n\n      ntst.test(\n        'Should use the custom validator compiler for the route',\n        async t => {\n          const fastify = Fastify()\n          let called = 0\n\n          t.plan(10)\n\n          fastify.register((instance, opts, next) => {\n            const custom = ({ schema, httpPart, url, method }) => {\n              t.equal(schema, defaultSchema)\n              t.equal(url, '/')\n              t.equal(method, 'GET')\n              t.equal(httpPart, 'querystring')\n\n              return input => {\n                called++\n                t.same(input, { hello: 'world' })\n                return true\n              }\n            }\n\n            fastify.get('/', { validatorCompiler: custom }, (req, reply) => {\n              const first = req.compileValidationSchema(\n                defaultSchema,\n                'querystring'\n              )\n              const second = req.compileValidationSchema(\n                defaultSchema,\n                'querystring'\n              )\n\n              t.equal(first, second)\n              t.ok(first({ hello: 'world' }))\n              t.ok(second({ hello: 'world' }))\n              t.equal(called, 2)\n\n              reply.send({ hello: 'world' })\n            })\n\n            next()\n          })\n\n          await fastify.inject('/')\n        }\n      )\n    })\n\n    tst.test('#getValidationFunction', ntst => {\n      ntst.plan(6)\n\n      ntst.test('Should return a validation function', async t => {\n        const fastify = Fastify()\n\n        t.plan(1)\n\n        fastify.register((instance, opts, next) => {\n          instance.get('/', (req, reply) => {\n            const original = req.compileValidationSchema(defaultSchema)\n            const referenced = req.getValidationFunction(defaultSchema)\n\n            t.equal(original, referenced)\n\n            reply.send({ hello: 'world' })\n          })\n\n          next()\n        })\n\n        await fastify.inject('/')\n      })\n\n      ntst.test('Should return undefined if no schema compiled', async t => {\n        const fastify = Fastify()\n\n        t.plan(1)\n\n        fastify.register((instance, opts, next) => {\n          instance.get('/', (req, reply) => {\n            const validate = req.getValidationFunction(defaultSchema)\n\n            t.notOk(validate)\n\n            reply.send({ hello: 'world' })\n          })\n\n          next()\n        })\n\n        await fastify.inject('/')\n      })\n\n      ntst.test(\n        'Should return the validation function from each HTTP part',\n        async t => {\n          const fastify = Fastify()\n          let headerValidation = null\n          let customValidation = null\n\n          t.plan(15)\n\n          fastify.register((instance, opts, next) => {\n            instance.post(\n              '/:id',\n              {\n                schema: requestSchema\n              },\n              (req, reply) => {\n                const { params } = req\n\n                switch (params.id) {\n                  case 1:\n                    customValidation = req.compileValidationSchema(\n                      defaultSchema\n                    )\n                    t.ok(req.getValidationFunction('body'))\n                    t.ok(req.getValidationFunction('body')({ hello: 'world' }))\n                    t.notOk(\n                      req.getValidationFunction('body')({ world: 'hello' })\n                    )\n                    break\n                  case 2:\n                    headerValidation = req.getValidationFunction('headers')\n                    t.ok(headerValidation)\n                    t.ok(headerValidation({ 'x-foo': 'world' }))\n                    t.notOk(headerValidation({ 'x-foo': [] }))\n                    break\n                  case 3:\n                    t.ok(req.getValidationFunction('params'))\n                    t.ok(req.getValidationFunction('params')({ id: 123 }))\n                    t.notOk(req.getValidationFunction('params'({ id: 1.2 })))\n                    break\n                  case 4:\n                    t.ok(req.getValidationFunction('querystring'))\n                    t.ok(\n                      req.getValidationFunction('querystring')({ foo: 'bar' })\n                    )\n                    t.notOk(\n                      req.getValidationFunction('querystring')({\n                        foo: 'not-bar'\n                      })\n                    )\n                    break\n                  case 5:\n                    t.equal(\n                      customValidation,\n                      req.getValidationFunction(defaultSchema)\n                    )\n                    t.ok(customValidation({ hello: 'world' }))\n                    t.notOk(customValidation({}))\n                    t.equal(\n                      headerValidation,\n                      req.getValidationFunction('headers')\n                    )\n                    break\n                  default:\n                    t.fail('Invalid id')\n                }\n\n                reply.send({ hello: 'world' })\n              }\n            )\n\n            next()\n          })\n          const promises = []\n\n          for (let i = 1; i < 6; i++) {\n            promises.push(\n              fastify.inject({\n                path: `/${i}`,\n                method: 'post',\n                query: { foo: 'bar' },\n                payload: {\n                  hello: 'world'\n                },\n                headers: {\n                  'x-foo': 'x-bar'\n                }\n              })\n            )\n          }\n\n          await Promise.all(promises)\n        }\n      )\n\n      ntst.test('Should return a validation function - nested', async t => {\n        const fastify = Fastify()\n        let called = false\n        const custom = ({ schema, httpPart, url, method }) => {\n          t.equal(schema, defaultSchema)\n          t.equal(url, '/')\n          t.equal(method, 'GET')\n          t.notOk(httpPart)\n\n          called = true\n          return () => true\n        }\n\n        t.plan(6)\n\n        fastify.setValidatorCompiler(custom)\n\n        fastify.register((instance, opts, next) => {\n          instance.get('/', (req, reply) => {\n            const original = req.compileValidationSchema(defaultSchema)\n            const referenced = req.getValidationFunction(defaultSchema)\n\n            t.equal(original, referenced)\n            t.equal(called, true)\n\n            reply.send({ hello: 'world' })\n          })\n\n          next()\n        })\n\n        await fastify.inject('/')\n      })\n\n      ntst.test(\n        'Should return undefined if no schema compiled - nested',\n        async t => {\n          const fastify = Fastify()\n          let called = 0\n          const custom = ({ schema, httpPart, url, method }) => {\n            called++\n            return () => true\n          }\n\n          t.plan(3)\n\n          fastify.setValidatorCompiler(custom)\n\n          fastify.get('/', (req, reply) => {\n            const validate = req.compileValidationSchema(defaultSchema)\n\n            t.equal(typeof validate, 'function')\n\n            reply.send({ hello: 'world' })\n          })\n\n          fastify.register(\n            (instance, opts, next) => {\n              instance.get('/', (req, reply) => {\n                const validate = req.getValidationFunction(defaultSchema)\n\n                t.notOk(validate)\n                t.equal(called, 1)\n\n                reply.send({ hello: 'world' })\n              })\n\n              next()\n            },\n            { prefix: '/nested' }\n          )\n\n          await fastify.inject('/')\n          await fastify.inject('/nested')\n        }\n      )\n\n      ntst.test('Should per-route defined validation compiler', async t => {\n        const fastify = Fastify()\n        let validateParent\n        let validateChild\n        let calledParent = 0\n        let calledChild = 0\n        const customParent = ({ schema, httpPart, url, method }) => {\n          calledParent++\n          return () => true\n        }\n\n        const customChild = ({ schema, httpPart, url, method }) => {\n          calledChild++\n          return () => true\n        }\n\n        t.plan(5)\n\n        fastify.setValidatorCompiler(customParent)\n\n        fastify.get('/', (req, reply) => {\n          validateParent = req.compileValidationSchema(defaultSchema)\n\n          t.equal(typeof validateParent, 'function')\n\n          reply.send({ hello: 'world' })\n        })\n\n        fastify.register(\n          (instance, opts, next) => {\n            instance.get(\n              '/',\n              {\n                validatorCompiler: customChild\n              },\n              (req, reply) => {\n                const validate1 = req.compileValidationSchema(defaultSchema)\n                validateChild = req.getValidationFunction(defaultSchema)\n\n                t.equal(validate1, validateChild)\n                t.not(validateParent, validateChild)\n                t.equal(calledParent, 1)\n                t.equal(calledChild, 1)\n\n                reply.send({ hello: 'world' })\n              }\n            )\n\n            next()\n          },\n          { prefix: '/nested' }\n        )\n\n        await fastify.inject('/')\n        await fastify.inject('/nested')\n      })\n    })\n\n    tst.test('#validate', ntst => {\n      ntst.plan(3)\n\n      ntst.test(\n        'Should return true/false if input valid - Route without schema',\n        async t => {\n          const fastify = Fastify()\n\n          t.plan(2)\n\n          fastify.register((instance, opts, next) => {\n            instance.get('/', (req, reply) => {\n              const isNotValid = req.validateInput(\n                { world: 'string' },\n                defaultSchema\n              )\n              const isValid = req.validateInput({ hello: 'string' }, defaultSchema)\n\n              t.notOk(isNotValid)\n              t.ok(isValid)\n\n              reply.send({ hello: 'world' })\n            })\n\n            next()\n          })\n\n          await fastify.inject('/')\n        }\n      )\n\n      ntst.test(\n        'Should use the custom validator compiler for the route',\n        async t => {\n          const fastify = Fastify()\n          let parentCalled = 0\n          let childCalled = 0\n          const customParent = () => {\n            parentCalled++\n\n            return () => true\n          }\n\n          const customChild = ({ schema, httpPart, url, method }) => {\n            t.equal(schema, defaultSchema)\n            t.equal(url, '/')\n            t.equal(method, 'GET')\n            t.equal(httpPart, 'querystring')\n\n            return input => {\n              childCalled++\n              t.same(input, { hello: 'world' })\n              return true\n            }\n          }\n\n          t.plan(10)\n\n          fastify.setValidatorCompiler(customParent)\n\n          fastify.register((instance, opts, next) => {\n            instance.get(\n              '/',\n              { validatorCompiler: customChild },\n              (req, reply) => {\n                const ok = req.validateInput(\n                  { hello: 'world' },\n                  defaultSchema,\n                  'querystring'\n                )\n                const ok2 = req.validateInput({ hello: 'world' }, defaultSchema)\n\n                t.ok(ok)\n                t.ok(ok2)\n                t.equal(childCalled, 2)\n                t.equal(parentCalled, 0)\n\n                reply.send({ hello: 'world' })\n              }\n            )\n\n            next()\n          })\n\n          await fastify.inject('/')\n        }\n      )\n\n      ntst.test(\n        'Should return true/false if input valid - With Schema for Route defined and scoped validator compiler',\n        async t => {\n          const validator = new Ajv()\n          const fastify = Fastify()\n          const childCounter = {\n            query: 0,\n            body: 0,\n            params: 0,\n            headers: 0\n          }\n          let parentCalled = 0\n\n          const parent = () => {\n            parentCalled++\n            return () => true\n          }\n          const child = ({ schema, httpPart, url, method }) => {\n            httpPart = httpPart === 'querystring' ? 'query' : httpPart\n            const validate = validator.compile(schema)\n\n            return input => {\n              childCounter[httpPart]++\n              return validate(input)\n            }\n          }\n\n          t.plan(13)\n\n          fastify.setValidatorCompiler(parent)\n          fastify.register((instance, opts, next) => {\n            instance.setValidatorCompiler(child)\n            instance.post(\n              '/:id',\n              {\n                schema: requestSchema\n              },\n              (req, reply) => {\n                const { params } = req\n\n                switch (parseInt(params.id)) {\n                  case 1:\n                    t.ok(req.validateInput({ hello: 'world' }, 'body'))\n                    t.notOk(req.validateInput({ hello: [], world: 'foo' }, 'body'))\n                    break\n                  case 2:\n                    t.notOk(req.validateInput({ foo: 'something' }, 'querystring'))\n                    t.ok(req.validateInput({ foo: 'bar' }, 'querystring'))\n                    break\n                  case 3:\n                    t.notOk(req.validateInput({ 'x-foo': [] }, 'headers'))\n                    t.ok(req.validateInput({ 'x-foo': 'something' }, 'headers'))\n                    break\n                  case 4:\n                    t.ok(req.validateInput({ id: 1 }, 'params'))\n                    t.notOk(req.validateInput({ id: params.id }, 'params'))\n                    break\n                  default:\n                    t.fail('Invalid id')\n                }\n\n                reply.send({ hello: 'world' })\n              }\n            )\n\n            next()\n          })\n\n          const promises = []\n\n          for (let i = 1; i < 5; i++) {\n            promises.push(\n              fastify.inject({\n                path: `/${i}`,\n                method: 'post',\n                query: {},\n                payload: {\n                  hello: 'world'\n                }\n              })\n            )\n          }\n\n          await Promise.all(promises)\n\n          t.equal(childCounter.query, 6) // 4 calls made + 2 custom validations\n          t.equal(childCounter.headers, 6) // 4 calls made + 2 custom validations\n          t.equal(childCounter.body, 6) // 4 calls made + 2 custom validations\n          t.equal(childCounter.params, 6) // 4 calls made + 2 custom validations\n          t.equal(parentCalled, 0)\n        }\n      )\n    })\n  })\n})\n/test/types/logger.test-d.ts\u0016\fimport { expectDeprecated, expectError, expectType } from 'tsd'\nimport fastify, {\n  FastifyLogFn,\n  LogLevel,\n  FastifyLoggerInstance,\n  FastifyRequest,\n  FastifyReply,\n  FastifyBaseLogger\n} from '../../fastify'\nimport { Server, IncomingMessage, ServerResponse } from 'http'\nimport * as fs from 'fs'\nimport P from 'pino'\n\nexpectType<FastifyLoggerInstance>(fastify().log)\n\nclass Foo {}\n\n['trace', 'debug', 'info', 'warn', 'error', 'fatal'].forEach(logLevel => {\n  expectType<FastifyLogFn>(fastify<Server, IncomingMessage, ServerResponse, FastifyLoggerInstance>().log[logLevel as LogLevel])\n  expectType<void>(fastify<Server, IncomingMessage, ServerResponse, FastifyLoggerInstance>().log[logLevel as LogLevel](''))\n  expectType<void>(fastify<Server, IncomingMessage, ServerResponse, FastifyLoggerInstance>().log[logLevel as LogLevel]({}))\n  expectType<void>(fastify<Server, IncomingMessage, ServerResponse, FastifyLoggerInstance>().log[logLevel as LogLevel]({ foo: 'bar' }))\n  expectType<void>(fastify<Server, IncomingMessage, ServerResponse, FastifyLoggerInstance>().log[logLevel as LogLevel](new Error()))\n  expectType<void>(fastify<Server, IncomingMessage, ServerResponse, FastifyLoggerInstance>().log[logLevel as LogLevel](new Foo()))\n})\n\ninterface CustomLogger extends FastifyBaseLogger {\n  customMethod(msg: string, ...args: unknown[]): void;\n}\n\nclass CustomLoggerImpl implements CustomLogger {\n  level = 'info'\n  customMethod (msg: string, ...args: unknown[]) { console.log(msg, args) }\n\n  // Implementation signature must be compatible with all overloads of FastifyLogFn\n  info (arg1: unknown, arg2?: unknown, ...args: unknown[]): void {\n    console.log(arg1, arg2, ...args)\n  }\n\n  warn (...args: unknown[]) { console.log(args) }\n  error (...args: unknown[]) { console.log(args) }\n  fatal (...args: unknown[]) { console.log(args) }\n  trace (...args: unknown[]) { console.log(args) }\n  debug (...args: unknown[]) { console.log(args) }\n  silent (...args: unknown[]) { }\n\n  child (bindings: P.Bindings, options?: P.ChildLoggerOptions): CustomLoggerImpl { return new CustomLoggerImpl() }\n}\n\nconst customLogger = new CustomLoggerImpl()\n\nconst serverWithCustomLogger = fastify<\nServer,\nIncomingMessage,\nServerResponse,\nCustomLoggerImpl\n>({ logger: customLogger })\n\nexpectType<CustomLoggerImpl>(serverWithCustomLogger.log)\n\nconst serverWithPino = fastify<\nServer,\nIncomingMessage,\nServerResponse,\nP.Logger\n>({\n  logger: P({\n    level: 'info',\n    redact: ['x-userinfo']\n  })\n})\n\nexpectType<P.Logger>(serverWithPino.log)\n\nconst serverWithLogOptions = fastify<\nServer,\nIncomingMessage,\nServerResponse\n>({\n  logger: {\n    level: 'info'\n  }\n})\n\nexpectType<FastifyLoggerInstance>(serverWithLogOptions.log)\n\nconst serverWithFileOption = fastify<\nServer,\nIncomingMessage,\nServerResponse\n>({\n  logger: {\n    level: 'info',\n    file: '/path/to/file'\n  }\n})\n\nexpectType<FastifyLoggerInstance>(serverWithFileOption.log)\n\nconst serverAutoInferringTypes = fastify({\n  logger: {\n    level: 'info'\n  }\n})\n\nexpectType<FastifyBaseLogger>(serverAutoInferringTypes.log)\n\nconst serverWithAutoInferredPino = fastify({\n  logger: P({\n    level: 'info',\n    redact: ['x-userinfo']\n  })\n})\n\nexpectType<P.Logger>(serverWithAutoInferredPino.log)\n\nconst serverAutoInferredFileOption = fastify({\n  logger: {\n    level: 'info',\n    file: '/path/to/file'\n  }\n})\n\nexpectType<FastifyBaseLogger>(serverAutoInferredFileOption.log)\n\nconst serverAutoInferredSerializerResponseObjectOption = fastify({\n  logger: {\n    serializers: {\n      res (ServerResponse) {\n        expectType<FastifyReply>(ServerResponse)\n        return {\n          status: '200'\n        }\n      }\n    }\n  }\n})\n\nexpectType<FastifyBaseLogger>(serverAutoInferredSerializerResponseObjectOption.log)\n\nconst serverAutoInferredSerializerObjectOption = fastify({\n  logger: {\n    serializers: {\n      req (IncomingMessage) {\n        expectType<FastifyRequest>(IncomingMessage)\n        return {\n          method: 'method',\n          url: 'url',\n          version: 'version',\n          hostname: 'hostname',\n          remoteAddress: 'remoteAddress',\n          remotePort: 80,\n          other: ''\n        }\n      },\n      res (ServerResponse) {\n        expectType<FastifyReply>(ServerResponse)\n        return {\n          statusCode: 'statusCode'\n        }\n      },\n      err (FastifyError) {\n        return {\n          other: '',\n          type: 'type',\n          message: 'msg',\n          stack: 'stack'\n        }\n      }\n    }\n  }\n})\n\nexpectType<FastifyBaseLogger>(serverAutoInferredSerializerObjectOption.log)\n\nconst passStreamAsOption = fastify({\n  logger: {\n    stream: fs.createWriteStream('/tmp/stream.out')\n  }\n})\n\nexpectType<FastifyBaseLogger>(passStreamAsOption.log)\n\nconst passPinoOption = fastify({\n  logger: {\n    redact: ['custom'],\n    messageKey: 'msg',\n    nestedKey: 'nested',\n    enabled: true\n  }\n})\n\nexpectType<FastifyBaseLogger>(passPinoOption.log)\n\n// FastifyLoggerInstance is deprecated\nexpectDeprecated({} as FastifyLoggerInstance)\n\nconst childParent = fastify().log\n// we test different option variant here\nexpectType<FastifyLoggerInstance>(childParent.child({}, { level: 'info' }))\nexpectType<FastifyLoggerInstance>(childParent.child({}, { level: 'silent' }))\nexpectType<FastifyLoggerInstance>(childParent.child({}, { redact: ['pass', 'pin'] }))\nexpectType<FastifyLoggerInstance>(childParent.child({}, { serializers: { key: () => {} } }))\nexpectType<FastifyLoggerInstance>(childParent.child({}, { level: 'info', redact: ['pass', 'pin'], serializers: { key: () => {} } }))\n\n// no option pass\nexpectError(childParent.child())\n// wrong option\nexpectError(childParent.child({}, { nonExist: true }))\n/test/throw.test.js\u001cT'use strict'\n\nconst { test } = require('tap')\nconst Fastify = require('..')\n\ntest('Fastify should throw on wrong options', t => {\n  t.plan(2)\n  try {\n    Fastify('lol')\n    t.fail()\n  } catch (e) {\n    t.equal(e.message, 'Options must be an object')\n    t.pass()\n  }\n})\n\ntest('Fastify should throw on multiple assignment to the same route', t => {\n  t.plan(1)\n  const fastify = Fastify()\n\n  fastify.get('/', () => {})\n\n  try {\n    fastify.get('/', () => {})\n    t.fail('Should throw on duplicated route declaration')\n  } catch (error) {\n    t.equal(error.message, \"Method 'GET' already declared for route '/'\")\n  }\n})\n\ntest('Fastify should throw for an invalid schema, printing the error route - headers', t => {\n  t.plan(2)\n\n  const badSchema = {\n    type: 'object',\n    properties: {\n      bad: {\n        type: 'bad-type'\n      }\n    }\n  }\n\n  const fastify = Fastify()\n  fastify.get('/', { schema: { headers: badSchema } }, () => {})\n  fastify.get('/not-loaded', { schema: { headers: badSchema } }, () => {})\n\n  fastify.ready(err => {\n    t.equal(err.code, 'FST_ERR_SCH_VALIDATION_BUILD')\n    t.match(err.message, /Failed building the validation schema for GET: \\//)\n  })\n})\n\ntest('Fastify should throw for an invalid schema, printing the error route - body', t => {\n  t.plan(2)\n\n  const badSchema = {\n    type: 'object',\n    properties: {\n      bad: {\n        type: 'bad-type'\n      }\n    }\n  }\n\n  const fastify = Fastify()\n  fastify.register((instance, opts, done) => {\n    instance.post('/form', { schema: { body: badSchema } }, () => {})\n    done()\n  }, { prefix: 'hello' })\n\n  fastify.ready(err => {\n    t.equal(err.code, 'FST_ERR_SCH_VALIDATION_BUILD')\n    t.match(err.message, /Failed building the validation schema for POST: \\/hello\\/form/)\n  })\n})\n\ntest('Fastify should throw for an invalid shorthand option type', t => {\n  t.plan(3)\n  try {\n    Fastify({ jsonShorthand: 'hello' })\n    t.fail()\n  } catch (e) {\n    t.equal(e.code, 'FST_ERR_INIT_OPTS_INVALID')\n    t.match(e.message, /must be boolean/)\n    t.pass()\n  }\n})\n\ntest('Should throw on unsupported method', t => {\n  t.plan(1)\n  const fastify = Fastify()\n  try {\n    fastify.route({\n      method: 'TROLL',\n      url: '/',\n      schema: {},\n      handler: function (req, reply) {}\n    })\n    t.fail()\n  } catch (e) {\n    t.pass()\n  }\n})\n\ntest('Should throw on missing handler', t => {\n  t.plan(1)\n  const fastify = Fastify()\n  try {\n    fastify.route({\n      method: 'GET',\n      url: '/'\n    })\n    t.fail()\n  } catch (e) {\n    t.pass()\n  }\n})\n\ntest('Should throw if one method is unsupported', t => {\n  const fastify = Fastify()\n  t.plan(1)\n  try {\n    fastify.route({\n      method: ['GET', 'TROLL'],\n      url: '/',\n      schema: {},\n      handler: function (req, reply) {}\n    })\n    t.fail()\n  } catch (e) {\n    t.pass()\n  }\n})\n\ntest('Should throw on duplicate content type parser', t => {\n  t.plan(1)\n\n  const fastify = Fastify()\n  function customParser (req, payload, done) { done(null, '') }\n\n  fastify.addContentTypeParser('application/qq', customParser)\n  try {\n    fastify.addContentTypeParser('application/qq', customParser)\n    t.fail()\n  } catch (e) {\n    t.pass()\n  }\n})\n\ntest('Should throw on duplicate decorator', t => {\n  t.plan(1)\n\n  const fastify = Fastify()\n  const fooObj = {}\n\n  fastify.decorate('foo', fooObj)\n  try {\n    fastify.decorate('foo', fooObj)\n    t.fail()\n  } catch (e) {\n    t.pass()\n  }\n})\n\ntest('Should not throw on duplicate decorator encapsulation', t => {\n  t.plan(1)\n\n  const fastify = Fastify()\n  const foo2Obj = {}\n\n  fastify.decorate('foo2', foo2Obj)\n\n  fastify.register(function (fastify, opts, done) {\n    t.doesNotThrow(() => {\n      fastify.decorate('foo2', foo2Obj)\n    })\n    done()\n  })\n\n  fastify.ready()\n})\n\ntest('Should throw on duplicate request decorator', t => {\n  t.plan(2)\n\n  const fastify = Fastify()\n\n  fastify.decorateRequest('foo', null)\n  try {\n    fastify.decorateRequest('foo', null)\n    t.fail()\n  } catch (e) {\n    t.equal(e.code, 'FST_ERR_DEC_ALREADY_PRESENT')\n    t.equal(e.message, 'The decorator \\'foo\\' has already been added!')\n  }\n})\n\ntest('Should throw if request decorator dependencies are not met', t => {\n  t.plan(2)\n\n  const fastify = Fastify()\n\n  try {\n    fastify.decorateRequest('bar', null, ['world'])\n    t.fail()\n  } catch (e) {\n    t.equal(e.code, 'FST_ERR_DEC_MISSING_DEPENDENCY')\n    t.equal(e.message, 'The decorator is missing dependency \\'world\\'.')\n  }\n})\n\ntest('Should throw on duplicate reply decorator', t => {\n  t.plan(1)\n\n  const fastify = Fastify()\n\n  fastify.decorateReply('foo', null)\n  try {\n    fastify.decorateReply('foo', null)\n    t.fail()\n  } catch (e) {\n    t.ok(/has already been added/.test(e.message))\n  }\n})\n\ntest('Should throw if reply decorator dependencies are not met', t => {\n  t.plan(1)\n\n  const fastify = Fastify()\n\n  try {\n    fastify.decorateReply('bar', null, ['world'])\n    t.fail()\n  } catch (e) {\n    t.ok(/missing dependency/.test(e.message))\n  }\n})\n\ntest('Should throw if handler as the third parameter to the shortcut method is missing and the second parameter is not a function and also not an object', t => {\n  t.plan(5)\n\n  const fastify = Fastify()\n\n  try {\n    fastify.get('/foo/1', '')\n    t.fail()\n  } catch (e) {\n    t.pass()\n  }\n\n  try {\n    fastify.get('/foo/2', 1)\n    t.fail()\n  } catch (e) {\n    t.pass()\n  }\n\n  try {\n    fastify.get('/foo/3', [])\n    t.fail()\n  } catch (e) {\n    t.pass()\n  }\n\n  try {\n    fastify.get('/foo/4', undefined)\n    t.fail()\n  } catch (e) {\n    t.pass()\n  }\n\n  try {\n    fastify.get('/foo/5', null)\n    t.fail()\n  } catch (e) {\n    t.pass()\n  }\n})\n\ntest('Should throw if handler as the third parameter to the shortcut method is missing and the second parameter is not a function and also not an object', t => {\n  t.plan(5)\n\n  const fastify = Fastify()\n\n  try {\n    fastify.get('/foo/1', '')\n    t.fail()\n  } catch (e) {\n    t.pass()\n  }\n\n  try {\n    fastify.get('/foo/2', 1)\n    t.fail()\n  } catch (e) {\n    t.pass()\n  }\n\n  try {\n    fastify.get('/foo/3', [])\n    t.fail()\n  } catch (e) {\n    t.pass()\n  }\n\n  try {\n    fastify.get('/foo/4', undefined)\n    t.fail()\n  } catch (e) {\n    t.pass()\n  }\n\n  try {\n    fastify.get('/foo/5', null)\n    t.fail()\n  } catch (e) {\n    t.pass()\n  }\n})\n\ntest('Should throw if there is handler function as the third parameter to the shortcut method and options as the second parameter is not an object', t => {\n  t.plan(5)\n\n  const fastify = Fastify()\n\n  try {\n    fastify.get('/foo/1', '', (req, res) => {})\n    t.fail()\n  } catch (e) {\n    t.pass()\n  }\n\n  try {\n    fastify.get('/foo/2', 1, (req, res) => {})\n    t.fail()\n  } catch (e) {\n    t.pass()\n  }\n\n  try {\n    fastify.get('/foo/3', [], (req, res) => {})\n    t.fail()\n  } catch (e) {\n    t.pass()\n  }\n\n  try {\n    fastify.get('/foo/4', undefined, (req, res) => {})\n    t.fail()\n  } catch (e) {\n    t.pass()\n  }\n\n  try {\n    fastify.get('/foo/5', null, (req, res) => {})\n    t.fail()\n  } catch (e) {\n    t.pass()\n  }\n})\n\ntest('Should throw if found duplicate handler as the third parameter to the shortcut method and in options', t => {\n  t.plan(1)\n\n  const fastify = Fastify()\n\n  try {\n    fastify.get('/foo/abc', {\n      handler: (req, res) => {}\n    }, (req, res) => {})\n    t.fail()\n  } catch (e) {\n    t.pass()\n  }\n})\n/lib/hooks.js\u0018'use strict'\n\nconst applicationHooks = [\n  'onRoute',\n  'onRegister',\n  'onReady',\n  'onClose'\n]\nconst lifecycleHooks = [\n  'onTimeout',\n  'onRequest',\n  'preParsing',\n  'preValidation',\n  'preSerialization',\n  'preHandler',\n  'onSend',\n  'onResponse',\n  'onError',\n  'onRequestAbort'\n]\nconst supportedHooks = lifecycleHooks.concat(applicationHooks)\nconst {\n  FST_ERR_HOOK_INVALID_TYPE,\n  FST_ERR_HOOK_INVALID_HANDLER,\n  FST_ERR_SEND_UNDEFINED_ERR,\n  FST_ERR_HOOK_TIMEOUT,\n  FST_ERR_HOOK_NOT_SUPPORTED,\n  AVVIO_ERRORS_MAP,\n  appendStackTrace\n} = require('./errors')\n\nconst {\n  kChildren,\n  kHooks\n} = require('./symbols')\n\nfunction Hooks () {\n  this.onRequest = []\n  this.preParsing = []\n  this.preValidation = []\n  this.preSerialization = []\n  this.preHandler = []\n  this.onResponse = []\n  this.onSend = []\n  this.onError = []\n  this.onRoute = []\n  this.onRegister = []\n  this.onReady = []\n  this.onTimeout = []\n  this.onRequestAbort = []\n}\n\nHooks.prototype.validate = function (hook, fn) {\n  if (typeof hook !== 'string') throw new FST_ERR_HOOK_INVALID_TYPE()\n  if (supportedHooks.indexOf(hook) === -1) {\n    throw new FST_ERR_HOOK_NOT_SUPPORTED(hook)\n  }\n  if (typeof fn !== 'function') throw new FST_ERR_HOOK_INVALID_HANDLER(hook, Object.prototype.toString.call(fn))\n}\n\nHooks.prototype.add = function (hook, fn) {\n  this.validate(hook, fn)\n  this[hook].push(fn)\n}\n\nfunction buildHooks (h) {\n  const hooks = new Hooks()\n  hooks.onRequest = h.onRequest.slice()\n  hooks.preParsing = h.preParsing.slice()\n  hooks.preValidation = h.preValidation.slice()\n  hooks.preSerialization = h.preSerialization.slice()\n  hooks.preHandler = h.preHandler.slice()\n  hooks.onSend = h.onSend.slice()\n  hooks.onResponse = h.onResponse.slice()\n  hooks.onError = h.onError.slice()\n  hooks.onRoute = h.onRoute.slice()\n  hooks.onRegister = h.onRegister.slice()\n  hooks.onTimeout = h.onTimeout.slice()\n  hooks.onRequestAbort = h.onRequestAbort.slice()\n  hooks.onReady = []\n  return hooks\n}\n\nfunction hookRunnerApplication (hookName, boot, server, cb) {\n  const hooks = server[kHooks][hookName]\n  let i = 0\n  let c = 0\n\n  next()\n\n  function exit (err) {\n    if (err) {\n      if (err.code === 'AVV_ERR_READY_TIMEOUT') {\n        err = appendStackTrace(err, new FST_ERR_HOOK_TIMEOUT(hookName))\n      } else {\n        err = AVVIO_ERRORS_MAP[err.code] != null\n          ? appendStackTrace(err, new AVVIO_ERRORS_MAP[err.code](err.message))\n          : err\n      }\n\n      cb(err)\n      return\n    }\n    cb()\n  }\n\n  function next (err) {\n    if (err) {\n      exit(err)\n      return\n    }\n\n    if (i === hooks.length && c === server[kChildren].length) {\n      if (i === 0 && c === 0) { // speed up start\n        exit()\n      } else {\n        // This is the last function executed for every fastify instance\n        boot(function manageTimeout (err, done) {\n          // this callback is needed by fastify to provide an hook interface without the error\n          // as first parameter and managing it on behalf the user\n          exit(err)\n\n          // this callback is needed by avvio to continue the loading of the next `register` plugins\n          done(err)\n        })\n      }\n      return\n    }\n\n    if (i === hooks.length && c < server[kChildren].length) {\n      const child = server[kChildren][c++]\n      hookRunnerApplication(hookName, boot, child, next)\n      return\n    }\n\n    boot(wrap(hooks[i++], server))\n    next()\n  }\n\n  function wrap (fn, server) {\n    return function (err, done) {\n      if (err) {\n        done(err)\n        return\n      }\n\n      if (fn.length === 1) {\n        try {\n          fn.call(server, done)\n        } catch (error) {\n          done(error)\n        }\n        return\n      }\n\n      try {\n        const ret = fn.call(server)\n        if (ret && typeof ret.then === 'function') {\n          ret.then(done, done)\n          return\n        }\n      } catch (error) {\n        err = error\n      }\n\n      done(err) // auto done\n    }\n  }\n}\n\nfunction hookRunner (functions, runner, request, reply, cb) {\n  let i = 0\n\n  function next (err) {\n    if (err || i === functions.length) {\n      cb(err, request, reply)\n      return\n    }\n\n    let result\n    try {\n      result = runner(functions[i++], request, reply, next)\n    } catch (error) {\n      next(error)\n      return\n    }\n    if (result && typeof result.then === 'function') {\n      result.then(handleResolve, handleReject)\n    }\n  }\n\n  function handleResolve () {\n    next()\n  }\n\n  function handleReject (err) {\n    if (!err) {\n      err = new FST_ERR_SEND_UNDEFINED_ERR()\n    }\n\n    cb(err, request, reply)\n  }\n\n  next()\n}\n\nfunction onSendHookRunner (functions, request, reply, payload, cb) {\n  let i = 0\n\n  function next (err, newPayload) {\n    if (err) {\n      cb(err, request, reply, payload)\n      return\n    }\n\n    if (newPayload !== undefined) {\n      payload = newPayload\n    }\n\n    if (i === functions.length) {\n      cb(null, request, reply, payload)\n      return\n    }\n\n    let result\n    try {\n      result = functions[i++](request, reply, payload, next)\n    } catch (error) {\n      next(error)\n      return\n    }\n    if (result && typeof result.then === 'function') {\n      result.then(handleResolve, handleReject)\n    }\n  }\n\n  function handleResolve (newPayload) {\n    next(null, newPayload)\n  }\n\n  function handleReject (err) {\n    if (!err) {\n      err = new FST_ERR_SEND_UNDEFINED_ERR()\n    }\n\n    cb(err, request, reply, payload)\n  }\n\n  next()\n}\n\nfunction onRequestAbortHookRunner (functions, runner, request, cb) {\n  let i = 0\n\n  function next (err) {\n    if (err || i === functions.length) {\n      cb(err, request)\n      return\n    }\n\n    let result\n    try {\n      result = runner(functions[i++], request, next)\n    } catch (error) {\n      next(error)\n      return\n    }\n    if (result && typeof result.then === 'function') {\n      result.then(handleResolve, handleReject)\n    }\n  }\n\n  function handleResolve () {\n    next()\n  }\n\n  function handleReject (err) {\n    if (!err) {\n      err = new FST_ERR_SEND_UNDEFINED_ERR()\n    }\n\n    cb(err, request)\n  }\n\n  next()\n}\n\nfunction hookIterator (fn, request, reply, next) {\n  if (reply.sent === true) return undefined\n  return fn(request, reply, next)\n}\n\nmodule.exports = {\n  Hooks,\n  buildHooks,\n  hookRunner,\n  onSendHookRunner,\n  onRequestAbortHookRunner,\n  hookIterator,\n  hookRunnerApplication,\n  lifecycleHooks,\n  supportedHooks\n}\n%/test/bundler/webpack/bundler-test.js\u0002'use strict'\n\nconst t = require('tap')\nconst test = t.test\nconst fastifySuccess = require('./dist/success')\nconst fastifyFailPlugin = require('./dist/failPlugin')\n\ntest('Bundled package should work', (t) => {\n  t.plan(4)\n  fastifySuccess.ready((err) => {\n    t.error(err)\n    fastifySuccess.inject(\n      {\n        method: 'GET',\n        url: '/'\n      },\n      (error, res) => {\n        t.error(error)\n        t.equal(res.statusCode, 200)\n        t.same(res.json(), { hello: 'world' })\n      }\n    )\n  })\n})\n\ntest('Bundled package should not work with bad plugin version', (t) => {\n  t.plan(1)\n  fastifyFailPlugin.ready((err) => {\n    t.match(err.message, /expected '9.x' fastify version/i)\n  })\n})\n/test/skip-reply-send.test.js\"'use strict'\n\nconst { test } = require('tap')\nconst split = require('split2')\nconst net = require('net')\nconst Fastify = require('../fastify')\n\nprocess.removeAllListeners('warning')\n\nconst lifecycleHooks = [\n  'onRequest',\n  'preParsing',\n  'preValidation',\n  'preHandler',\n  'preSerialization',\n  'onSend',\n  'onTimeout',\n  'onResponse',\n  'onError'\n]\n\ntest('skip automatic reply.send() with reply.sent = true and a body', (t) => {\n  const stream = split(JSON.parse)\n  const app = Fastify({\n    logger: {\n      stream\n    }\n  })\n\n  stream.on('data', (line) => {\n    t.not(line.level, 40) // there are no errors\n    t.not(line.level, 50) // there are no errors\n  })\n\n  app.get('/', (req, reply) => {\n    reply.sent = true\n    reply.raw.end('hello world')\n\n    return Promise.resolve('this will be skipped')\n  })\n\n  return app.inject({\n    method: 'GET',\n    url: '/'\n  }).then((res) => {\n    t.equal(res.statusCode, 200)\n    t.equal(res.body, 'hello world')\n  })\n})\n\ntest('skip automatic reply.send() with reply.sent = true and no body', (t) => {\n  const stream = split(JSON.parse)\n  const app = Fastify({\n    logger: {\n      stream\n    }\n  })\n\n  stream.on('data', (line) => {\n    t.not(line.level, 40) // there are no error\n    t.not(line.level, 50) // there are no error\n  })\n\n  app.get('/', (req, reply) => {\n    reply.sent = true\n    reply.raw.end('hello world')\n\n    return Promise.resolve()\n  })\n\n  return app.inject({\n    method: 'GET',\n    url: '/'\n  }).then((res) => {\n    t.equal(res.statusCode, 200)\n    t.equal(res.body, 'hello world')\n  })\n})\n\ntest('skip automatic reply.send() with reply.sent = true and an error', (t) => {\n  const stream = split(JSON.parse)\n  const app = Fastify({\n    logger: {\n      stream\n    }\n  })\n\n  let errorSeen = false\n\n  stream.on('data', (line) => {\n    if (line.level === 50) {\n      errorSeen = true\n      t.equal(line.err.message, 'kaboom')\n      t.equal(line.msg, 'Promise errored, but reply.sent = true was set')\n    }\n  })\n\n  app.get('/', (req, reply) => {\n    reply.sent = true\n    reply.raw.end('hello world')\n\n    return Promise.reject(new Error('kaboom'))\n  })\n\n  return app.inject({\n    method: 'GET',\n    url: '/'\n  }).then((res) => {\n    t.equal(errorSeen, true)\n    t.equal(res.statusCode, 200)\n    t.equal(res.body, 'hello world')\n  })\n})\n\nfunction testHandlerOrBeforeHandlerHook (test, hookOrHandler) {\n  const idx = hookOrHandler === 'handler' ? lifecycleHooks.indexOf('preHandler') : lifecycleHooks.indexOf(hookOrHandler)\n  const previousHooks = lifecycleHooks.slice(0, idx)\n  const nextHooks = lifecycleHooks.slice(idx + 1)\n\n  test(`Hijacking inside ${hookOrHandler} skips all the following hooks and handler execution`, t => {\n    t.plan(4)\n    const test = t.test\n\n    test('Sending a response using reply.raw => onResponse hook is called', t => {\n      const stream = split(JSON.parse)\n      const app = Fastify({\n        logger: {\n          stream\n        }\n      })\n\n      stream.on('data', (line) => {\n        t.not(line.level, 40) // there are no errors\n        t.not(line.level, 50) // there are no errors\n      })\n\n      previousHooks.forEach(h => app.addHook(h, async (req, reply) => t.pass(`${h} should be called`)))\n\n      if (hookOrHandler === 'handler') {\n        app.get('/', (req, reply) => {\n          reply.hijack()\n          reply.raw.end(`hello from ${hookOrHandler}`)\n        })\n      } else {\n        app.addHook(hookOrHandler, async (req, reply) => {\n          reply.hijack()\n          reply.raw.end(`hello from ${hookOrHandler}`)\n        })\n        app.get('/', (req, reply) => t.fail('Handler should not be called'))\n      }\n\n      nextHooks.forEach(h => {\n        if (h === 'onResponse') {\n          app.addHook(h, async (req, reply) => t.pass(`${h} should be called`))\n        } else {\n          app.addHook(h, async (req, reply) => t.fail(`${h} should not be called`))\n        }\n      })\n\n      return app.inject({\n        method: 'GET',\n        url: '/'\n      }).then((res) => {\n        t.equal(res.statusCode, 200)\n        t.equal(res.body, `hello from ${hookOrHandler}`)\n      })\n    })\n\n    test('Sending a response using req.socket => onResponse not called', t => {\n      const stream = split(JSON.parse)\n      const app = Fastify({\n        logger: {\n          stream\n        }\n      })\n      t.teardown(() => app.close())\n\n      stream.on('data', (line) => {\n        t.not(line.level, 40) // there are no errors\n        t.not(line.level, 50) // there are no errors\n      })\n\n      previousHooks.forEach(h => app.addHook(h, async (req, reply) => t.pass(`${h} should be called`)))\n\n      if (hookOrHandler === 'handler') {\n        app.get('/', (req, reply) => {\n          reply.hijack()\n          req.socket.write('HTTP/1.1 200 OK\\r\\n\\r\\n')\n          req.socket.write(`hello from ${hookOrHandler}`)\n          req.socket.end()\n        })\n      } else {\n        app.addHook(hookOrHandler, async (req, reply) => {\n          reply.hijack()\n          req.socket.write('HTTP/1.1 200 OK\\r\\n\\r\\n')\n          req.socket.write(`hello from ${hookOrHandler}`)\n          req.socket.end()\n        })\n        app.get('/', (req, reply) => t.fail('Handler should not be called'))\n      }\n\n      nextHooks.forEach(h => app.addHook(h, async (req, reply) => t.fail(`${h} should not be called`)))\n\n      app.listen({ port: 0 }, err => {\n        t.error(err)\n        const client = net.createConnection({ port: (app.server.address()).port }, () => {\n          client.write('GET / HTTP/1.1\\r\\nHost: example.com\\r\\n\\r\\n')\n\n          let chunks = ''\n          client.setEncoding('utf8')\n          client.on('data', data => {\n            chunks += data\n          })\n\n          client.on('end', function () {\n            t.match(chunks, new RegExp(`hello from ${hookOrHandler}`, 'i'))\n            t.end()\n          })\n        })\n      })\n    })\n\n    test('Throwing an error doesnt trigger any hooks', t => {\n      const stream = split(JSON.parse)\n      const app = Fastify({\n        logger: {\n          stream\n        }\n      })\n      t.teardown(() => app.close())\n\n      let errorSeen = false\n      stream.on('data', (line) => {\n        if (hookOrHandler === 'handler') {\n          if (line.level === 40) {\n            errorSeen = true\n            t.equal(line.err.code, 'FST_ERR_REP_ALREADY_SENT')\n          }\n        } else {\n          t.not(line.level, 40) // there are no errors\n          t.not(line.level, 50) // there are no errors\n        }\n      })\n\n      previousHooks.forEach(h => app.addHook(h, async (req, reply) => t.pass(`${h} should be called`)))\n\n      if (hookOrHandler === 'handler') {\n        app.get('/', (req, reply) => {\n          reply.hijack()\n          throw new Error('This wil be skipped')\n        })\n      } else {\n        app.addHook(hookOrHandler, async (req, reply) => {\n          reply.hijack()\n          throw new Error('This wil be skipped')\n        })\n        app.get('/', (req, reply) => t.fail('Handler should not be called'))\n      }\n\n      nextHooks.forEach(h => app.addHook(h, async (req, reply) => t.fail(`${h} should not be called`)))\n\n      return Promise.race([\n        app.inject({ method: 'GET', url: '/' }),\n        new Promise((resolve, reject) => setTimeout(resolve, 1000))\n      ]).then((err, res) => {\n        t.error(err)\n        if (hookOrHandler === 'handler') {\n          t.equal(errorSeen, true)\n        }\n      })\n    })\n\n    test('Calling reply.send() after hijacking logs a warning', t => {\n      const stream = split(JSON.parse)\n      const app = Fastify({\n        logger: {\n          stream\n        }\n      })\n\n      let errorSeen = false\n\n      stream.on('data', (line) => {\n        if (line.level === 40) {\n          errorSeen = true\n          t.equal(line.err.code, 'FST_ERR_REP_ALREADY_SENT')\n        }\n      })\n\n      previousHooks.forEach(h => app.addHook(h, async (req, reply) => t.pass(`${h} should be called`)))\n\n      if (hookOrHandler === 'handler') {\n        app.get('/', (req, reply) => {\n          reply.hijack()\n          reply.send('hello from reply.send()')\n        })\n      } else {\n        app.addHook(hookOrHandler, async (req, reply) => {\n          reply.hijack()\n          return reply.send('hello from reply.send()')\n        })\n        app.get('/', (req, reply) => t.fail('Handler should not be called'))\n      }\n\n      nextHooks.forEach(h => app.addHook(h, async (req, reply) => t.fail(`${h} should not be called`)))\n\n      return Promise.race([\n        app.inject({ method: 'GET', url: '/' }),\n        new Promise((resolve, reject) => setTimeout(resolve, 1000))\n      ]).then((err, res) => {\n        t.error(err)\n        t.equal(errorSeen, true)\n      })\n    })\n  })\n}\n\ntestHandlerOrBeforeHandlerHook(test, 'onRequest')\ntestHandlerOrBeforeHandlerHook(test, 'preParsing')\ntestHandlerOrBeforeHandlerHook(test, 'preValidation')\ntestHandlerOrBeforeHandlerHook(test, 'preHandler')\ntestHandlerOrBeforeHandlerHook(test, 'handler')\n'/test/https/custom-https-server.test.js\u0005'use strict'\n\nconst t = require('tap')\nconst test = t.test\nconst Fastify = require('../..')\nconst https = require('https')\nconst sget = require('simple-get').concat\nconst dns = require('dns').promises\n\nconst { buildCertificate } = require('../build-certificate')\nt.before(buildCertificate)\n\ntest('Should support a custom https server', async t => {\n  const localAddresses = await dns.lookup('localhost', { all: true })\n\n  t.plan(localAddresses.length + 3)\n\n  const serverFactory = (handler, opts) => {\n    t.ok(opts.serverFactory, 'it is called twice for every HOST interface')\n\n    const options = {\n      key: global.context.key,\n      cert: global.context.cert\n    }\n\n    const server = https.createServer(options, (req, res) => {\n      req.custom = true\n      handler(req, res)\n    })\n\n    return server\n  }\n\n  const fastify = Fastify({ serverFactory })\n\n  t.teardown(fastify.close.bind(fastify))\n\n  fastify.get('/', (req, reply) => {\n    t.ok(req.raw.custom)\n    reply.send({ hello: 'world' })\n  })\n\n  await fastify.listen({ port: 0 })\n\n  await new Promise((resolve, reject) => {\n    sget({\n      method: 'GET',\n      url: 'https://localhost:' + fastify.server.address().port,\n      rejectUnauthorized: false\n    }, (err, response, body) => {\n      if (err) {\n        return reject(err)\n      }\n      t.equal(response.statusCode, 200)\n      t.same(JSON.parse(body), { hello: 'world' })\n      resolve()\n    })\n  })\n})\n!/test/custom-parser-async.test.js\u0006@'use strict'\n\nconst t = require('tap')\nconst test = t.test\nconst sget = require('simple-get').concat\nconst Fastify = require('../fastify')\n\nprocess.removeAllListeners('warning')\n\ntest('contentTypeParser should add a custom async parser', t => {\n  t.plan(3)\n  const fastify = Fastify()\n\n  fastify.post('/', (req, reply) => {\n    reply.send(req.body)\n  })\n\n  fastify.options('/', (req, reply) => {\n    reply.send(req.body)\n  })\n\n  fastify.addContentTypeParser('application/jsoff', async function (req, payload) {\n    const res = await new Promise((resolve, reject) => resolve(payload))\n    return res\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n\n    t.teardown(() => fastify.close())\n\n    t.test('in POST', t => {\n      t.plan(3)\n\n      sget({\n        method: 'POST',\n        url: 'http://localhost:' + fastify.server.address().port,\n        body: '{\"hello\":\"world\"}',\n        headers: {\n          'Content-Type': 'application/jsoff'\n        }\n      }, (err, response, body) => {\n        t.error(err)\n        t.equal(response.statusCode, 200)\n        t.same(body.toString(), JSON.stringify({ hello: 'world' }))\n      })\n    })\n\n    t.test('in OPTIONS', t => {\n      t.plan(3)\n\n      sget({\n        method: 'OPTIONS',\n        url: 'http://localhost:' + fastify.server.address().port,\n        body: '{\"hello\":\"world\"}',\n        headers: {\n          'Content-Type': 'application/jsoff'\n        }\n      }, (err, response, body) => {\n        t.error(err)\n        t.equal(response.statusCode, 200)\n        t.same(body.toString(), JSON.stringify({ hello: 'world' }))\n      })\n    })\n  })\n})\n/types/route.d.ts+Qimport { FastifyInstance } from './instance'\nimport { FastifyRequest, RequestGenericInterface } from './request'\nimport { FastifyReply, ReplyGenericInterface } from './reply'\nimport { FastifySchema, FastifySchemaCompiler, FastifySerializerCompiler, SchemaErrorFormatter } from './schema'\nimport { HTTPMethods, RawServerBase, RawServerDefault, RawRequestDefaultExpression, RawReplyDefaultExpression, ContextConfigDefault } from './utils'\nimport { preValidationHookHandler, preHandlerHookHandler, preSerializationHookHandler, onRequestHookHandler, preParsingHookHandler, onResponseHookHandler, onSendHookHandler, onErrorHookHandler, onTimeoutHookHandler, onRequestAbortHookHandler } from './hooks'\nimport { FastifyError } from '@fastify/error'\nimport { FastifyContext } from './context'\nimport {\n  FastifyTypeProvider,\n  FastifyTypeProviderDefault,\n  ResolveFastifyReplyReturnType\n} from './type-provider'\nimport { FastifyBaseLogger, LogLevel } from './logger'\n\nexport interface RouteGenericInterface extends RequestGenericInterface, ReplyGenericInterface {}\n\n/**\n * Route shorthand options for the various shorthand methods\n */\nexport interface RouteShorthandOptions<\n  RawServer extends RawServerBase = RawServerDefault,\n  RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,\n  RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,\n  RouteGeneric extends RouteGenericInterface = RouteGenericInterface,\n  ContextConfig = ContextConfigDefault,\n  SchemaCompiler extends FastifySchema = FastifySchema,\n  TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,\n  Logger extends FastifyBaseLogger = FastifyBaseLogger\n> {\n  schema?: SchemaCompiler, // originally FastifySchema\n  attachValidation?: boolean;\n  exposeHeadRoute?: boolean;\n\n  validatorCompiler?: FastifySchemaCompiler<SchemaCompiler>;\n  serializerCompiler?: FastifySerializerCompiler<SchemaCompiler>;\n  bodyLimit?: number;\n  logLevel?: LogLevel;\n  config?: FastifyContext<ContextConfig>['config'];\n  version?: string;\n  constraints?: { [name: string]: any },\n  prefixTrailingSlash?: 'slash'|'no-slash'|'both';\n  errorHandler?: (this: FastifyInstance, error: FastifyError, request: FastifyRequest, reply: FastifyReply) => void;\n  schemaErrorFormatter?: SchemaErrorFormatter;\n\n  // hooks\n  onRequest?: onRequestHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger> | onRequestHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>[];\n  preParsing?: preParsingHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger> | preParsingHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>[];\n  preValidation?: preValidationHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger> | preValidationHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>[];\n  preHandler?: preHandlerHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger> | preHandlerHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>[];\n  preSerialization?: preSerializationHookHandler<unknown, RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger> | preSerializationHookHandler<unknown, RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>[];\n  onSend?: onSendHookHandler<unknown, RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger> | onSendHookHandler<unknown, RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>[];\n  onResponse?: onResponseHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger> | onResponseHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>[];\n  onTimeout?: onTimeoutHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger> | onTimeoutHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>[];\n  onError?: onErrorHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, FastifyError, SchemaCompiler, TypeProvider, Logger> | onErrorHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, FastifyError, SchemaCompiler, TypeProvider, Logger>[];\n  onRequestAbort?: onRequestAbortHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger> | onRequestAbortHookHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>[];\n}\n\n/**\n * Route handler method declaration.\n */\nexport type RouteHandlerMethod<\n  RawServer extends RawServerBase = RawServerDefault,\n  RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,\n  RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,\n  RouteGeneric extends RouteGenericInterface = RouteGenericInterface,\n  ContextConfig = ContextConfigDefault,\n  SchemaCompiler extends FastifySchema = FastifySchema,\n  TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,\n  Logger extends FastifyBaseLogger = FastifyBaseLogger\n> = (\n  this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,\n  request: FastifyRequest<RouteGeneric, RawServer, RawRequest, SchemaCompiler, TypeProvider, ContextConfig, Logger>,\n  reply: FastifyReply<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider>\n// This return type used to be a generic type argument. Due to TypeScript's inference of return types, this rendered returns unchecked.\n) => ResolveFastifyReplyReturnType<TypeProvider, SchemaCompiler, RouteGeneric>\n\n/**\n * Shorthand options including the handler function property\n */\nexport interface RouteShorthandOptionsWithHandler<\n  RawServer extends RawServerBase = RawServerDefault,\n  RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,\n  RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,\n  RouteGeneric extends RouteGenericInterface = RouteGenericInterface,\n  ContextConfig = ContextConfigDefault,\n  SchemaCompiler extends FastifySchema = FastifySchema,\n  TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,\n  Logger extends FastifyBaseLogger = FastifyBaseLogger\n> extends RouteShorthandOptions<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger> {\n  handler: RouteHandlerMethod<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>;\n}\n\n/**\n * Fastify Router Shorthand method type that is similar to the Express/Restify approach\n */\nexport interface RouteShorthandMethod<\n  RawServer extends RawServerBase = RawServerDefault,\n  RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,\n  RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,\n  TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,\n> {\n  <RouteGeneric extends RouteGenericInterface = RouteGenericInterface, ContextConfig = ContextConfigDefault, SchemaCompiler extends FastifySchema = FastifySchema, Logger extends FastifyBaseLogger = FastifyBaseLogger>(\n    path: string,\n    opts: RouteShorthandOptions<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>,\n    handler: RouteHandlerMethod<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>\n  ): FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>;\n  <RouteGeneric extends RouteGenericInterface = RouteGenericInterface, ContextConfig = ContextConfigDefault, SchemaCompiler extends FastifySchema = FastifySchema, Logger extends FastifyBaseLogger = FastifyBaseLogger>(\n    path: string,\n    handler: RouteHandlerMethod<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>\n  ): FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>;\n  <RouteGeneric extends RouteGenericInterface = RouteGenericInterface, ContextConfig = ContextConfigDefault, SchemaCompiler extends FastifySchema = FastifySchema, Logger extends FastifyBaseLogger = FastifyBaseLogger>(\n    path: string,\n    opts: RouteShorthandOptionsWithHandler<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>\n  ): FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>;\n}\n\n/**\n * Fastify route method options.\n */\nexport interface RouteOptions<\n  RawServer extends RawServerBase = RawServerDefault,\n  RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,\n  RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,\n  RouteGeneric extends RouteGenericInterface = RouteGenericInterface,\n  ContextConfig = ContextConfigDefault,\n  SchemaCompiler extends FastifySchema = FastifySchema,\n  TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,\n  Logger extends FastifyBaseLogger = FastifyBaseLogger\n> extends RouteShorthandOptions<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger> {\n  method: HTTPMethods | HTTPMethods[];\n  url: string;\n  handler: RouteHandlerMethod<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider, Logger>;\n}\n\nexport type RouteHandler<\n  RouteGeneric extends RouteGenericInterface = RouteGenericInterface,\n  RawServer extends RawServerBase = RawServerDefault,\n  RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,\n  RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,\n  ContextConfig = ContextConfigDefault,\n  SchemaCompiler extends FastifySchema = FastifySchema,\n  TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,\n  Logger extends FastifyBaseLogger = FastifyBaseLogger\n> = (\n  this: FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>,\n  request: FastifyRequest<RouteGeneric, RawServer, RawRequest, SchemaCompiler, TypeProvider, ContextConfig, Logger>,\n  reply: FastifyReply<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig, SchemaCompiler, TypeProvider>\n) => RouteGeneric['Reply'] | void | Promise<RouteGeneric['Reply'] | void>\n\nexport type DefaultRoute<Request, Reply> = (\n  req: Request,\n  res: Reply,\n) => void;\n/SECURITY.md\u0013# Security Policy\n\nThis document describes the management of vulnerabilities for the Fastify\nproject and its official plugins.\n\n## Reporting vulnerabilities\n\nIndividuals who find potential vulnerabilities in Fastify are invited to\ncomplete a vulnerability report via the dedicated HackerOne page:\n[https://hackerone.com/fastify](https://hackerone.com/fastify).\n\n### Strict measures when reporting vulnerabilities\n\nIt is of the utmost importance that you read carefully and follow these\nguidelines to ensure the ecosystem as a whole isn't disrupted due to improperly\nreported vulnerabilities:\n\n* Avoid creating new \"informative\" reports on HackerOne. Only create new\n  HackerOne reports on a vulnerability if you are absolutely sure this should be\n  tagged as an actual vulnerability. Third-party vendors and individuals are\n  tracking any new vulnerabilities reported in HackerOne and will flag them as\n  such for their customers (think about snyk, npm audit, ...).\n* HackerOne reports should never be created and triaged by the same person. If\n  you are creating a HackerOne report for a vulnerability that you found, or on\n  behalf of someone else, there should always be a 2nd Security Team member who\n  triages it. If in doubt, invite more Fastify Collaborators to help triage the\n  validity of the report. In any case, the report should follow the same process\n  as outlined below of inviting the maintainers to review and accept the\n  vulnerability.\n\n### Vulnerabilities found outside this process\n\n⚠ The Fastify project does not support any reporting outside the HackerOne\nprocess.\n\n## Handling vulnerability reports\n\nWhen a potential vulnerability is reported, the following actions are taken:\n\n### Triage\n\n**Delay:** 4 business days\n\nWithin 4 business days, a member of the security team provides a first answer to\nthe individual who submitted the potential vulnerability. The possible responses\ncan be:\n\n* Acceptance: what was reported is considered as a new vulnerability\n* Rejection: what was reported is not considered as a new vulnerability\n* Need more information: the security team needs more information in order to\n  evaluate what was reported.\n\nTriaging should include updating issue fields:\n* Asset - set/create the module affected by the report\n* Severity - TBD, currently left empty\n\nReference: [HackerOne: Submitting\nReports](https://docs.hackerone.com/hackers/submitting-reports.html)\n\n### Correction follow-up\n\n**Delay:** 90 days\n\nWhen a vulnerability is confirmed, a member of the security team volunteers to\nfollow up on this report.\n\nWith the help of the individual who reported the vulnerability, they contact the\nmaintainers of the vulnerable package to make them aware of the vulnerability.\nThe maintainers can be invited as participants to the reported issue.\n\nWith the package maintainer, they define a release date for the publication of\nthe vulnerability. Ideally, this release date should not happen before the\npackage has been patched.\n\nThe report's vulnerable versions upper limit should be set to:\n* `*` if there is no fixed version available by the time of publishing the\n  report.\n* the last vulnerable version. For example: `<=1.2.3` if a fix exists in `1.2.4`\n\n### Publication\n\n**Delay:** 90 days\n\nWithin 90 days after the triage date, the vulnerability must be made public.\n\n**Severity**: Vulnerability severity is assessed using [CVSS\nv.3](https://www.first.org/cvss/user-guide). More information can be found on\n[HackerOne documentation](https://docs.hackerone.com/hackers/severity.html)\n\nIf the package maintainer is actively developing a patch, an additional delay\ncan be added with the approval of the security team and the individual who\nreported the vulnerability.\n\nAt this point, a CVE should be requested through the HackerOne platform through\nthe UI, which should include the Report ID and a summary.\n\nWithin HackerOne, this is handled through a \"public disclosure request\".\n\nReference: [HackerOne:\nDisclosure](https://docs.hackerone.com/hackers/disclosure.html)\n\n## The Fastify Security team\n\nThe core team is responsible for the management of HackerOne program and this\npolicy and process.\n\nMembers of this team are expected to keep all information that they have\nprivileged access to by being on the team completely private to the team. This\nincludes agreeing to not notify anyone outside the team of issues that have not\nyet been disclosed publicly, including the existence of issues, expectations of\nupcoming releases, and patching of any issues other than in the process of their\nwork as a member of the Fastify Core team.\n\n### Members\n\n* [__Matteo Collina__](https://github.com/mcollina),\n  <https://twitter.com/matteocollina>, <https://www.npmjs.com/~matteo.collina>\n* [__Tomas Della Vedova__](https://github.com/delvedor),\n  <https://twitter.com/delvedor>, <https://www.npmjs.com/~delvedor>\n* [__Vincent Le Goff__](https://github.com/zekth)\n* [__KaKa Ng__](https://github.com/climba03003)\n* [__James Sumners__](https://github.com/jsumners),\n  <https://twitter.com/jsumners79>, <https://www.npmjs.com/~jsumners>\n/examples/hooks.js\u0007 'use strict'\n\nconst fastify = require('../fastify')({ logger: true })\n\nconst opts = {\n  schema: {\n    response: {\n      '2xx': {\n        type: 'object',\n        properties: {\n          hello: {\n            type: 'string'\n          }\n        }\n      }\n    }\n  }\n}\n\nconst optsPost = {\n  schema: {\n    body: {\n      type: 'object',\n      required: ['hello'],\n      properties: {\n        hello: {\n          type: 'string'\n        }\n      }\n    },\n    response: opts.response\n  }\n}\n\nfastify\n  .addHook('onRequest', function (request, reply, done) {\n    console.log('onRequest')\n    done()\n  })\n  .addHook('preParsing', function (request, reply, payload, done) {\n    console.log('preParsing')\n    done()\n  })\n  .addHook('preValidation', function (request, reply, done) {\n    console.log('preValidation')\n    done()\n  })\n  .addHook('preHandler', function (request, reply, done) {\n    console.log('preHandler')\n    done()\n  })\n  .addHook('preSerialization', function (request, reply, payload, done) {\n    console.log('preSerialization', payload)\n    done()\n  })\n  .addHook('onError', function (request, reply, error, done) {\n    console.log('onError', error.message)\n    done()\n  })\n  .addHook('onSend', function (request, reply, payload, done) {\n    console.log('onSend', payload)\n    done()\n  })\n  .addHook('onResponse', function (request, reply, done) {\n    console.log('onResponse')\n    done()\n  })\n  .addHook('onRoute', function (routeOptions) {\n    console.log('onRoute')\n  })\n  .addHook('onClose', function (instance, done) {\n    console.log('onClose')\n    done()\n  })\n\nfastify.get('/', opts, function (req, reply) {\n  reply.send({ hello: 'world' })\n})\n\nfastify.post('/', optsPost, function (req, reply) {\n  reply.send({ hello: 'world' })\n})\n\nfastify.listen({ port: 3000 }, function (err) {\n  if (err) {\n    throw err\n  }\n})\n'/test/custom-querystring-parser.test.js\u000b\n'use strict'\n\nconst t = require('tap')\nconst test = t.test\nconst querystring = require('querystring')\nconst sget = require('simple-get').concat\nconst Fastify = require('..')\n\ntest('Custom querystring parser', t => {\n  t.plan(9)\n\n  const fastify = Fastify({\n    querystringParser: function (str) {\n      t.equal(str, 'foo=bar&baz=faz')\n      return querystring.parse(str)\n    }\n  })\n\n  fastify.get('/', (req, reply) => {\n    t.same(req.query, {\n      foo: 'bar',\n      baz: 'faz'\n    })\n    reply.send({ hello: 'world' })\n  })\n\n  fastify.listen({ port: 0 }, (err, address) => {\n    t.error(err)\n    t.teardown(() => fastify.close())\n\n    sget({\n      method: 'GET',\n      url: `${address}?foo=bar&baz=faz`\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n    })\n\n    fastify.inject({\n      method: 'GET',\n      url: `${address}?foo=bar&baz=faz`\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n    })\n  })\n})\n\ntest('Custom querystring parser should be called also if there is nothing to parse', t => {\n  t.plan(9)\n\n  const fastify = Fastify({\n    querystringParser: function (str) {\n      t.equal(str, '')\n      return querystring.parse(str)\n    }\n  })\n\n  fastify.get('/', (req, reply) => {\n    t.same(req.query, {})\n    reply.send({ hello: 'world' })\n  })\n\n  fastify.listen({ port: 0 }, (err, address) => {\n    t.error(err)\n    t.teardown(() => fastify.close())\n\n    sget({\n      method: 'GET',\n      url: address\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n    })\n\n    fastify.inject({\n      method: 'GET',\n      url: address\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n    })\n  })\n})\n\ntest('Querystring without value', t => {\n  t.plan(9)\n\n  const fastify = Fastify({\n    querystringParser: function (str) {\n      t.equal(str, 'foo')\n      return querystring.parse(str)\n    }\n  })\n\n  fastify.get('/', (req, reply) => {\n    t.same(req.query, { foo: '' })\n    reply.send({ hello: 'world' })\n  })\n\n  fastify.listen({ port: 0 }, (err, address) => {\n    t.error(err)\n    t.teardown(() => fastify.close())\n\n    sget({\n      method: 'GET',\n      url: `${address}?foo`\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n    })\n\n    fastify.inject({\n      method: 'GET',\n      url: `${address}?foo`\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n    })\n  })\n})\n\ntest('Custom querystring parser should be a function', t => {\n  t.plan(1)\n\n  try {\n    Fastify({\n      querystringParser: 10\n    })\n    t.fail('Should throw')\n  } catch (err) {\n    t.equal(\n      err.message,\n      \"querystringParser option should be a function, instead got 'number'\"\n    )\n  }\n})\n,/docs/Guides/Detecting-When-Clients-Abort.md\u0014o<h1 align=\"center\">Fastify</h1>\n\n# Detecting When Clients Abort\n\n## Introduction\n\nFastify provides request events to trigger at certain points in a request's \nlifecycle. However, there isn't a built-in mechanism to \ndetect unintentional client disconnection scenarios such as when the client's \ninternet connection is interrupted. This guide covers methods to detect if\nand when a client intentionally aborts a request.\n\nKeep in mind, Fastify's `clientErrorHandler` is not designed to detect when a \nclient aborts a request. This works in the same way as the standard Node HTTP \nmodule, which triggers the `clientError` event when there is a bad request or \nexceedingly large header data. When a client aborts a request, there is no \nerror on the socket and the `clientErrorHandler` will not be triggered.\n\n## Solution\n\n### Overview\n\nThe proposed solution is a possible way of detecting when a client \nintentionally aborts a request, such as when a browser is closed or the HTTP \nrequest is aborted from your client application. If there is an error in your \napplication code that results in the server crashing, you may require \nadditional logic to avoid a false abort detection.\n\nThe goal here is to detect when a client intentionally aborts a connection \nso your application logic can proceed accordingly. This can be useful for \nlogging purposes or halting business logic.\n\n### Hands-on\n\nSay we have the following base server set up:\n\n```js\nimport Fastify from 'fastify';\n\nconst sleep = async (time) => {\n  return await new Promise(resolve => setTimeout(resolve, time || 1000));\n}\n\nconst app = Fastify({\n  logger: {\n    transport: {\n      target: 'pino-pretty',\n      options: {\n        translateTime: 'HH:MM:ss Z',\n        ignore: 'pid,hostname',\n      },\n    },\n  },\n})\n\napp.addHook('onRequest', async (request, reply) => {\n  request.raw.on('close', () => {\n    if (request.raw.aborted) {\n      app.log.info('request closed')\n    }\n  })\n})\n\napp.get('/', async (request, reply) => {\n  await sleep(3000)\n  reply.code(200).send({ ok: true })\n})\n\nconst start = async () => {\n  try {\n    await app.listen({ port: 3000 })\n  } catch (err) {\n    app.log.error(err)\n    process.exit(1)\n  }\n}\n\nstart()\n```\n\nOur code is setting up a Fastify server which includes the following \nfunctionality:\n\n- Accepting requests at http://localhost:3000, with a 3 second delayed response \nof `{ ok: true }`.\n- An onRequest hook that triggers when every request is received.\n- Logic that triggers in the hook when the request is closed.\n- Logging that occurs when the closed request property `aborted` is true.\n\nIn the request close event, you should examine the diff between a successful \nrequest and one aborted by the client to determine the best property for your \nuse case. You can find details about request properties in the \n[NodeJS documentation](https://nodejs.org/api/http.html).\n\nYou can also perform this logic outside of a hook, directly in a specific route.\n\n```js\napp.get('/', async (request, reply) => {\n  request.raw.on('close', () => {\n    if (request.raw.aborted) {\n      app.log.info('request closed')\n    }\n  })\n  await sleep(3000)\n  reply.code(200).send({ ok: true })\n})\n```\n\nAt any point in your business logic, you can check if the request has been \naborted and perform alternative actions.\n\n```js\napp.get('/', async (request, reply) => {\n  await sleep(3000)\n  if (request.raw.aborted) {\n    // do something here\n  }\n  await sleep(3000)\n  reply.code(200).send({ ok: true })\n})\n```\n\nA benefit to adding this in your application code is that you can log Fastify \ndetails such as the reqId, which may be unavailable in lower-level code that \nonly has access to the raw request information.\n\n### Testing\n\nTo test this functionality you can use an app like Postman and cancel your \nrequest within 3 seconds. Alternatively, you can use Node to send an HTTP \nrequest with logic to abort the request before 3 seconds. Example:\n\n```js\nconst controller = new AbortController();\nconst signal = controller.signal;\n\n(async () => {\n   try {\n      const response = await fetch('http://localhost:3000', { signal });\n      const body = await response.text();\n      console.log(body);\n   } catch (error) {\n      console.error(error);\n   }\n})();\n\nsetTimeout(() => {\n   controller.abort()\n}, 1000);\n```\n\nWith either approach, you should see the Fastify log appear at the moment the \nrequest is aborted.\n\n## Conclusion\n\nSpecifics of the implementation will vary from one problem to another, but the\nmain goal of this guide was to show a very specific use case of an issue that\ncould be solved within Fastify's ecosystem.\n\nYou can listen to the request close event and determine if the request was \naborted or if it was successfully delivered. You can implement this solution \nin an onRequest hook or directly in an individual route.\n\nThis approach will not trigger in the event of internet disruption, and such \ndetection would require additional business logic. If you have flawed backend \napplication logic that results in a server crash, then you could trigger a \nfalse detection. The `clientErrorHandler`, either by default or with custom \nlogic, is not intended to handle this scenario and will not trigger when the \nclient aborts a request.\n/test/types/fastify.test-d.ts'Nimport fastify, {\n  ConnectionError,\n  FastifyInstance,\n  FastifyPlugin,\n  FastifyPluginAsync,\n  FastifyPluginCallback,\n  LightMyRequestChain,\n  LightMyRequestResponse,\n  LightMyRequestCallback,\n  InjectOptions, FastifyBaseLogger,\n  RouteGenericInterface,\n  ValidationResult,\n  FastifyErrorCodes,\n  FastifyError\n} from '../../fastify'\nimport { ErrorObject as AjvErrorObject } from 'ajv'\nimport * as http from 'http'\nimport * as https from 'https'\nimport * as http2 from 'http2'\nimport { expectType, expectError, expectAssignable } from 'tsd'\nimport { FastifyLoggerInstance } from '../../types/logger'\nimport { Socket } from 'net'\n\n// FastifyInstance\n// http server\nexpectType<FastifyInstance<http.Server, http.IncomingMessage, http.ServerResponse> & PromiseLike<FastifyInstance<http.Server, http.IncomingMessage, http.ServerResponse>>>(fastify())\nexpectType<FastifyInstance<http.Server, http.IncomingMessage, http.ServerResponse> & PromiseLike<FastifyInstance<http.Server, http.IncomingMessage, http.ServerResponse>>>(fastify({}))\nexpectType<FastifyInstance<http.Server, http.IncomingMessage, http.ServerResponse> & PromiseLike<FastifyInstance<http.Server, http.IncomingMessage, http.ServerResponse>>>(fastify({ http: {} }))\n// https server\nexpectType<FastifyInstance<https.Server, http.IncomingMessage, http.ServerResponse> & PromiseLike<FastifyInstance<https.Server, http.IncomingMessage, http.ServerResponse>>>(fastify({ https: {} }))\nexpectType<FastifyInstance<https.Server, http.IncomingMessage, http.ServerResponse> & PromiseLike<FastifyInstance<https.Server, http.IncomingMessage, http.ServerResponse>>>(fastify({ https: null }))\n// http2 server\nexpectType<FastifyInstance<http2.Http2Server, http2.Http2ServerRequest, http2.Http2ServerResponse> & PromiseLike<FastifyInstance<http2.Http2Server, http2.Http2ServerRequest, http2.Http2ServerResponse>>>(fastify({ http2: true, http2SessionTimeout: 1000 }))\nexpectType<FastifyInstance<http2.Http2SecureServer, http2.Http2ServerRequest, http2.Http2ServerResponse> & PromiseLike<FastifyInstance<http2.Http2SecureServer, http2.Http2ServerRequest, http2.Http2ServerResponse>>>(fastify({ http2: true, https: {}, http2SessionTimeout: 1000 }))\nexpectType<LightMyRequestChain>(fastify({ http2: true, https: {} }).inject())\nexpectType<FastifyInstance<https.Server, http.IncomingMessage, http.ServerResponse> & PromiseLike<FastifyInstance<https.Server, http.IncomingMessage, http.ServerResponse>>>(fastify({ schemaController: {} }))\nexpectType<FastifyInstance<https.Server, http.IncomingMessage, http.ServerResponse> & PromiseLike<FastifyInstance<https.Server, http.IncomingMessage, http.ServerResponse>>>(\n  fastify({\n    schemaController: {\n      compilersFactory: {}\n    }\n  })\n)\n\nexpectError(fastify<http2.Http2Server>({ http2: false })) // http2 option must be true\nexpectError(fastify<http2.Http2SecureServer>({ http2: false })) // http2 option must be true\nexpectError(\n  fastify({\n    schemaController: {\n      bucket: () => ({}) // cannot be empty\n    }\n  })\n)\n\n// light-my-request\nexpectAssignable<InjectOptions>({ query: '' })\nfastify({ http2: true, https: {} }).inject().then((resp) => {\n  expectAssignable<LightMyRequestResponse>(resp)\n})\nconst lightMyRequestCallback: LightMyRequestCallback = (err: Error, response: LightMyRequestResponse) => {\n  if (err) throw err\n}\nfastify({ http2: true, https: {} }).inject({}, lightMyRequestCallback)\n\n// server options\nexpectAssignable<FastifyInstance<http2.Http2Server, http2.Http2ServerRequest, http2.Http2ServerResponse>>(fastify({ http2: true }))\nexpectAssignable<FastifyInstance>(fastify({ ignoreTrailingSlash: true }))\nexpectAssignable<FastifyInstance>(fastify({ ignoreDuplicateSlashes: true }))\nexpectAssignable<FastifyInstance>(fastify({ connectionTimeout: 1000 }))\nexpectAssignable<FastifyInstance>(fastify({ forceCloseConnections: true }))\nexpectAssignable<FastifyInstance>(fastify({ keepAliveTimeout: 1000 }))\nexpectAssignable<FastifyInstance>(fastify({ pluginTimeout: 1000 }))\nexpectAssignable<FastifyInstance>(fastify({ bodyLimit: 100 }))\nexpectAssignable<FastifyInstance>(fastify({ maxParamLength: 100 }))\nexpectAssignable<FastifyInstance>(fastify({ disableRequestLogging: true }))\nexpectAssignable<FastifyInstance>(fastify({ requestIdLogLabel: 'request-id' }))\nexpectAssignable<FastifyInstance>(fastify({ onProtoPoisoning: 'error' }))\nexpectAssignable<FastifyInstance>(fastify({ onConstructorPoisoning: 'error' }))\nexpectAssignable<FastifyInstance>(fastify({ serializerOpts: { rounding: 'ceil' } }))\nexpectAssignable<FastifyInstance>(fastify({ serializerOpts: { ajv: { missingRefs: 'ignore' } } }))\nexpectAssignable<FastifyInstance>(fastify({ serializerOpts: { schema: { } } }))\nexpectAssignable<FastifyInstance>(fastify({ serializerOpts: { otherProp: { } } }))\nexpectAssignable<FastifyInstance<http.Server, http.IncomingMessage, http.ServerResponse, FastifyBaseLogger>>(fastify({ logger: true }))\nexpectAssignable<FastifyInstance<http.Server, http.IncomingMessage, http.ServerResponse, FastifyBaseLogger>>(fastify({ logger: true }))\nexpectAssignable<FastifyInstance<http.Server, http.IncomingMessage, http.ServerResponse, FastifyBaseLogger>>(fastify({\n  logger: {\n    level: 'info',\n    genReqId: () => 'request-id',\n    serializers: {\n      req: () => {\n        return {\n          method: 'GET',\n          url: '/',\n          version: '1.0.0',\n          hostname: 'localhost',\n          remoteAddress: '127.0.0.1',\n          remotePort: 3000\n        }\n      },\n      res: () => {\n        return {\n          statusCode: 200\n        }\n      },\n      err: () => {\n        return {\n          type: 'Error',\n          message: 'foo',\n          stack: ''\n        }\n      }\n    }\n  }\n}))\nconst customLogger = {\n  level: 'info',\n  info: () => { },\n  warn: () => { },\n  error: () => { },\n  fatal: () => { },\n  trace: () => { },\n  debug: () => { },\n  child: () => customLogger\n}\nexpectAssignable<FastifyInstance<http.Server, http.IncomingMessage, http.ServerResponse, FastifyBaseLogger>>(fastify({ logger: customLogger }))\nexpectAssignable<FastifyInstance>(fastify({ serverFactory: () => http.createServer() }))\nexpectAssignable<FastifyInstance>(fastify({ caseSensitive: true }))\nexpectAssignable<FastifyInstance>(fastify({ requestIdHeader: 'request-id' }))\nexpectAssignable<FastifyInstance>(fastify({ requestIdHeader: false }))\nexpectAssignable<FastifyInstance>(fastify({ genReqId: () => 'request-id' }))\nexpectAssignable<FastifyInstance>(fastify({ trustProxy: true }))\nexpectAssignable<FastifyInstance>(fastify({ querystringParser: () => ({ foo: 'bar' }) }))\nexpectAssignable<FastifyInstance>(fastify({ querystringParser: () => ({ foo: { bar: 'fuzz' } }) }))\nexpectAssignable<FastifyInstance>(fastify({ querystringParser: () => ({ foo: ['bar', 'fuzz'] }) }))\nexpectAssignable<FastifyInstance>(fastify({\n  versioning: {\n    storage: () => ({\n      get: () => 'foo',\n      set: () => { },\n      del: () => { },\n      empty: () => { }\n    }),\n    deriveVersion: () => 'foo'\n  }\n}))\nexpectAssignable<FastifyInstance>(fastify({ constraints: {} }))\nexpectAssignable<FastifyInstance>(fastify({\n  constraints: {\n    version: {\n      name: 'version',\n      storage: () => ({\n        get: () => () => {},\n        set: () => { },\n        del: () => { },\n        empty: () => { }\n      }),\n      validate () {},\n      deriveConstraint: () => 'foo'\n    },\n    host: {\n      name: 'host',\n      storage: () => ({\n        get: () => () => {},\n        set: () => { },\n        del: () => { },\n        empty: () => { }\n      }),\n      validate () {},\n      deriveConstraint: () => 'foo'\n    },\n    withObjectValue: {\n      name: 'withObjectValue',\n      storage: () => ({\n        get: () => () => {},\n        set: () => { },\n        del: () => { },\n        empty: () => { }\n      }),\n      validate () {},\n      deriveConstraint: () => {}\n\n    }\n  }\n}))\nexpectAssignable<FastifyInstance>(fastify({ return503OnClosing: true }))\nexpectAssignable<FastifyInstance>(fastify({\n  ajv: {\n    customOptions: {\n      removeAdditional: 'all'\n    },\n    plugins: [() => { }]\n  }\n}))\nexpectAssignable<FastifyInstance>(fastify({\n  ajv: {\n    plugins: [[() => { }, ['keyword1', 'keyword2']]]\n  }\n}))\nexpectAssignable<FastifyInstance>(fastify({ frameworkErrors: () => { } }))\nexpectAssignable<FastifyInstance>(fastify({\n  rewriteUrl: (req) => req.url === '/hi' ? '/hello' : req.url!\n}))\nexpectAssignable<FastifyInstance>(fastify({\n  schemaErrorFormatter: (errors, dataVar) => {\n    console.log(\n      errors[0].keyword.toLowerCase(),\n      errors[0].message?.toLowerCase(),\n      errors[0].params,\n      errors[0].instancePath.toLowerCase(),\n      errors[0].schemaPath.toLowerCase()\n    )\n    return new Error()\n  }\n}))\nexpectAssignable<FastifyInstance>(fastify({\n  clientErrorHandler: (err, socket) => {\n    expectType<ConnectionError>(err)\n    expectType<Socket>(socket)\n  }\n}))\nexpectAssignable<FastifyInstance>(fastify({ jsonShorthand: true }))\n\n// Thenable\nexpectAssignable<PromiseLike<FastifyInstance>>(fastify({ return503OnClosing: true }))\nfastify().then(fastifyInstance => expectAssignable<FastifyInstance>(fastifyInstance))\n\nexpectAssignable<FastifyPluginAsync>(async () => {})\nexpectAssignable<FastifyPluginCallback>(() => {})\nexpectAssignable<FastifyPlugin>(() => {})\n\nconst ajvErrorObject: AjvErrorObject = {\n  keyword: '',\n  instancePath: '',\n  schemaPath: '',\n  params: {},\n  message: ''\n}\nexpectAssignable<ValidationResult>(ajvErrorObject)\n\nexpectAssignable<FastifyError['validation']>([ajvErrorObject])\nexpectAssignable<FastifyError['validationContext']>('body')\nexpectAssignable<FastifyError['validationContext']>('headers')\nexpectAssignable<FastifyError['validationContext']>('params')\nexpectAssignable<FastifyError['validationContext']>('querystring')\n\nconst routeGeneric: RouteGenericInterface = {}\nexpectType<unknown>(routeGeneric.Body)\nexpectType<unknown>(routeGeneric.Headers)\nexpectType<unknown>(routeGeneric.Params)\nexpectType<unknown>(routeGeneric.Querystring)\nexpectType<unknown>(routeGeneric.Reply)\n\n// ErrorCodes\nexpectType<FastifyErrorCodes>(fastify.errorCodes)\n/integration/test.sh\u0003#!/usr/bin/bash\n\nset -e\n\nNUMBER=$RANDOM\ncurl -i -X GET -H 'Content-Type: application/json' localhost:3000/ > GET\nif [[ ! $(cat GET | head -1| cut -f2 -d\" \") == \"200\" || ! $(cat GET | tail -1| cut -f4 -d\"\\\"\") == \"home page\" ]] ; then\nexit 1\nfi;\ncurl -i -X POST -H 'Content-Type: application/json' localhost:3000/post/$NUMBER --data {} > POST\nif [[ ! $(cat POST | head -1| cut -f2 -d\" \") == \"201\" || ! $(cat POST | tail -1| cut -f4 -d\"\\\"\") == $(echo $NUMBER) ]]; then\nexit 1\nfi;\ncurl -i -X PUT -H 'Content-Type: application/json' localhost:3000/put/$NUMBER --data {} > PUT\nif [[ ! $(cat PUT | head -1| cut -f2 -d\" \") == \"200\" || ! $(cat PUT | tail -1| cut -f4 -d\"\\\"\") == $(echo $NUMBER) ]]; then\nexit 1\nfi;\ncurl -i -X DELETE -H 'Content-Type: application/json' localhost:3000/delete/$NUMBER --data {} > DELETE\nif [[ ! $(cat DELETE | head -1| cut -f2 -d\" \") == \"204\" ]]; then\nexit 1\nfi;\n\nrm -f GET POST PUT DELETE\n/test/genReqId.test.js\u0002'use strict'\n\nconst { test } = require('tap')\nconst Fastify = require('..')\n\ntest('Should accept a custom genReqId function', t => {\n  t.plan(4)\n\n  const fastify = Fastify({\n    genReqId: function (req) {\n      return 'a'\n    }\n  })\n\n  fastify.get('/', (req, reply) => {\n    t.ok(req.id)\n    reply.send({ id: req.id })\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    fastify.inject({\n      method: 'GET',\n      url: 'http://localhost:' + fastify.server.address().port\n    }, (err, res) => {\n      t.error(err)\n      const payload = JSON.parse(res.payload)\n      t.equal(payload.id, 'a')\n      fastify.close()\n    })\n  })\n})\n%/test/internals/handleRequest.test.js\u0018'use strict'\n\nconst { test } = require('tap')\nconst handleRequest = require('../../lib/handleRequest')\nconst internals = require('../../lib/handleRequest')[Symbol.for('internals')]\nconst Request = require('../../lib/request')\nconst Reply = require('../../lib/reply')\nconst { kRouteContext } = require('../../lib/symbols')\nconst buildSchema = require('../../lib/validation').compileSchemasForValidation\nconst sget = require('simple-get').concat\n\nconst Ajv = require('ajv')\nconst ajv = new Ajv({ coerceTypes: true })\n\nfunction schemaValidator ({ schema, method, url, httpPart }) {\n  const validateFuncion = ajv.compile(schema)\n  const fn = function (body) {\n    const isOk = validateFuncion(body)\n    if (isOk) return\n    return false\n  }\n  fn.errors = []\n  return fn\n}\n\ntest('handleRequest function - sent reply', t => {\n  t.plan(1)\n  const request = {}\n  const reply = { sent: true }\n  const res = handleRequest(null, request, reply)\n  t.equal(res, undefined)\n})\n\ntest('handleRequest function - invoke with error', t => {\n  t.plan(1)\n  const request = {}\n  const reply = {}\n  reply.send = (err) => t.equal(err.message, 'Kaboom')\n  handleRequest(new Error('Kaboom'), request, reply)\n})\n\ntest('handler function - invalid schema', t => {\n  t.plan(1)\n  const res = {}\n  res.log = { error: () => {}, info: () => {} }\n  const context = {\n    config: {\n      method: 'GET',\n      url: '/an-url'\n    },\n    schema: {\n      body: {\n        type: 'object',\n        properties: {\n          hello: { type: 'number' }\n        }\n      }\n    },\n    errorHandler: { func: () => { t.pass('errorHandler called') } },\n    handler: () => {},\n    Reply,\n    Request,\n    preValidation: [],\n    preHandler: [],\n    onSend: [],\n    onError: [],\n    attachValidation: false,\n    schemaErrorFormatter: () => new Error()\n  }\n  buildSchema(context, schemaValidator)\n  const request = {\n    body: { hello: 'world' },\n    [kRouteContext]: context\n  }\n  internals.handler(request, new Reply(res, request))\n})\n\ntest('handler function - reply', t => {\n  t.plan(3)\n  const res = {}\n  res.end = () => {\n    t.equal(res.statusCode, 204)\n    t.pass()\n  }\n  res.writeHead = () => {}\n  const context = {\n    handler: (req, reply) => {\n      t.equal(typeof reply, 'object')\n      reply.code(204)\n      reply.send(undefined)\n    },\n    Reply,\n    Request,\n    preValidation: [],\n    preHandler: [],\n    onSend: [],\n    onError: []\n  }\n  buildSchema(context, schemaValidator)\n  internals.handler({ [kRouteContext]: context }, new Reply(res, { [kRouteContext]: context }))\n})\n\ntest('handler function - preValidationCallback with finished response', t => {\n  t.plan(0)\n  const res = {}\n  // Be sure to check only `writableEnded` where is available\n  res.writableEnded = true\n  res.end = () => {\n    t.fail()\n  }\n  res.writeHead = () => {}\n  const context = {\n    handler: (req, reply) => {\n      t.fail()\n      reply.send(undefined)\n    },\n    Reply,\n    Request,\n    preValidation: null,\n    preHandler: [],\n    onSend: [],\n    onError: []\n  }\n  buildSchema(context, schemaValidator)\n  internals.handler({ [kRouteContext]: context }, new Reply(res, { [kRouteContext]: context }))\n})\n\ntest('request should be defined in onSend Hook on post request with content type application/json', t => {\n  t.plan(8)\n  const fastify = require('../..')()\n\n  fastify.addHook('onSend', (request, reply, payload, done) => {\n    t.ok(request)\n    t.ok(request.raw)\n    t.ok(request.id)\n    t.ok(request.params)\n    t.ok(request.query)\n    done()\n  })\n  fastify.post('/', (request, reply) => {\n    reply.send(200)\n  })\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    sget({\n      method: 'POST',\n      url: 'http://localhost:' + fastify.server.address().port,\n      headers: {\n        'content-type': 'application/json'\n      }\n    }, (err, response, body) => {\n      t.error(err)\n      // a 400 error is expected because of no body\n      t.equal(response.statusCode, 400)\n    })\n  })\n})\n\ntest('request should be defined in onSend Hook on post request with content type application/x-www-form-urlencoded', t => {\n  t.plan(7)\n  const fastify = require('../..')()\n\n  fastify.addHook('onSend', (request, reply, payload, done) => {\n    t.ok(request)\n    t.ok(request.raw)\n    t.ok(request.params)\n    t.ok(request.query)\n    done()\n  })\n  fastify.post('/', (request, reply) => {\n    reply.send(200)\n  })\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    sget({\n      method: 'POST',\n      url: 'http://localhost:' + fastify.server.address().port,\n      headers: {\n        'content-type': 'application/x-www-form-urlencoded'\n      }\n    }, (err, response, body) => {\n      t.error(err)\n      // a 415 error is expected because of missing content type parser\n      t.equal(response.statusCode, 415)\n    })\n  })\n})\n\ntest('request should be defined in onSend Hook on options request with content type application/x-www-form-urlencoded', t => {\n  t.plan(7)\n  const fastify = require('../..')()\n\n  fastify.addHook('onSend', (request, reply, payload, done) => {\n    t.ok(request)\n    t.ok(request.raw)\n    t.ok(request.params)\n    t.ok(request.query)\n    done()\n  })\n  fastify.options('/', (request, reply) => {\n    reply.send(200)\n  })\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    sget({\n      method: 'OPTIONS',\n      url: 'http://localhost:' + fastify.server.address().port,\n      headers: {\n        'content-type': 'application/x-www-form-urlencoded'\n      }\n    }, (err, response, body) => {\n      t.error(err)\n      // Body parsing skipped, so no body sent\n      t.equal(response.statusCode, 200)\n    })\n  })\n})\n\ntest('request should respond with an error if an unserialized payload is sent inside an async handler', t => {\n  t.plan(3)\n\n  const fastify = require('../..')()\n\n  fastify.get('/', (request, reply) => {\n    reply.type('text/html')\n    return Promise.resolve(request.headers)\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.statusCode, 500)\n    t.strictSame(JSON.parse(res.payload), {\n      error: 'Internal Server Error',\n      code: 'FST_ERR_REP_INVALID_PAYLOAD_TYPE',\n      message: 'Attempted to send payload of invalid type \\'object\\'. Expected a string or Buffer.',\n      statusCode: 500\n    })\n  })\n})\n/LICENSE\u0004MIT License\n\nCopyright (c) 2016-2023 The Fastify Team\n\nThe Fastify team members are listed at https://github.com/fastify/fastify#team\nand in the README file.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n/test/listen.deprecated.test.js\u0018'use strict'\n\n// Tests for deprecated `.listen` signature. This file should be\n// removed when the deprecation is complete.\n\nconst { test, before } = require('tap')\nconst dns = require('dns').promises\nconst Fastify = require('..')\n\nlet localhost\nlet localhostForURL\n\nprocess.removeAllListeners('warning')\n\nbefore(async function (t) {\n  const lookup = await dns.lookup('localhost')\n  localhost = lookup.address\n  if (lookup.family === 6) {\n    localhostForURL = `[${lookup.address}]`\n  } else {\n    localhostForURL = localhost\n  }\n})\n\ntest('listen accepts a port and a callback', t => {\n  t.plan(2)\n  const fastify = Fastify()\n  t.teardown(fastify.close.bind(fastify))\n  fastify.listen(0, (err) => {\n    t.equal(fastify.server.address().address, localhost)\n    t.error(err)\n  })\n})\n\ntest('listen accepts a port and a callback with (err, address)', t => {\n  t.plan(2)\n  const fastify = Fastify()\n  t.teardown(fastify.close.bind(fastify))\n  fastify.listen(0, (err, address) => {\n    t.equal(address, `http://${localhostForURL}:${fastify.server.address().port}`)\n    t.error(err)\n  })\n})\n\ntest('listen accepts a port, address, and callback', t => {\n  t.plan(1)\n  const fastify = Fastify()\n  t.teardown(fastify.close.bind(fastify))\n  fastify.listen(0, localhost, (err) => {\n    t.error(err)\n  })\n})\n\ntest('listen accepts options, backlog and a callback', t => {\n  t.plan(1)\n  const fastify = Fastify()\n  t.teardown(fastify.close.bind(fastify))\n  fastify.listen({\n    port: 0,\n    host: 'localhost'\n  }, 511, (err) => {\n    t.error(err)\n  })\n})\n\ntest('listen accepts options (no port), backlog and a callback', t => {\n  t.plan(1)\n  const fastify = Fastify()\n  t.teardown(fastify.close.bind(fastify))\n  fastify.listen({\n    host: 'localhost'\n  }, 511, (err) => {\n    t.error(err)\n  })\n})\n\ntest('listen accepts options (no host), backlog and a callback', t => {\n  t.plan(1)\n  const fastify = Fastify()\n  t.teardown(fastify.close.bind(fastify))\n  fastify.listen({\n    port: 0\n  }, 511, (err) => {\n    t.error(err)\n  })\n})\n\ntest('listen accepts options (no port, no host), backlog and a callback', t => {\n  t.plan(1)\n  const fastify = Fastify()\n  t.teardown(fastify.close.bind(fastify))\n  fastify.listen({\n    ipv6Only: false\n  }, 511, (err) => {\n    t.error(err)\n  })\n})\n\ntest('listen accepts a port, address and a callback with (err, address)', t => {\n  t.plan(2)\n  const fastify = Fastify()\n  t.teardown(fastify.close.bind(fastify))\n  fastify.listen(0, localhost, (err, address) => {\n    t.equal(address, `http://${localhostForURL}:${fastify.server.address().port}`)\n    t.error(err)\n  })\n})\n\ntest('listen accepts a port, address, backlog and callback', t => {\n  t.plan(1)\n  const fastify = Fastify()\n  t.teardown(fastify.close.bind(fastify))\n  fastify.listen(0, localhost, 511, (err) => {\n    t.error(err)\n  })\n})\n\ntest('listen accepts a port, address, backlog and callback with (err, address)', t => {\n  t.plan(2)\n  const fastify = Fastify()\n  t.teardown(fastify.close.bind(fastify))\n  fastify.listen(0, localhost, 511, (err, address) => {\n    t.equal(address, `http://${localhostForURL}:${fastify.server.address().port}`)\n    t.error(err)\n  })\n})\n\ntest('listen without callback (port zero)', t => {\n  t.plan(1)\n  const fastify = Fastify()\n  t.teardown(fastify.close.bind(fastify))\n  fastify.listen(0)\n    .then(() => {\n      t.equal(fastify.server.address().address, localhost)\n    })\n})\n\ntest('listen without callback (port not given)', t => {\n  t.plan(1)\n  const fastify = Fastify()\n  t.teardown(fastify.close.bind(fastify))\n  fastify.listen()\n    .then(() => {\n      t.equal(fastify.server.address().address, localhost)\n    })\n})\n\ntest('listen null without callback with (address)', t => {\n  t.plan(1)\n  const fastify = Fastify()\n  t.teardown(fastify.close.bind(fastify))\n  fastify.listen(null)\n    .then(address => {\n      t.equal(address, `http://${localhostForURL}:${fastify.server.address().port}`)\n    })\n})\n\ntest('listen without port without callback with (address)', t => {\n  t.plan(1)\n  const fastify = Fastify()\n  t.teardown(fastify.close.bind(fastify))\n  fastify.listen()\n    .then(address => {\n      t.equal(address, `http://${localhostForURL}:${fastify.server.address().port}`)\n    })\n})\n\ntest('listen with undefined without callback with (address)', t => {\n  t.plan(1)\n  const fastify = Fastify()\n  t.teardown(fastify.close.bind(fastify))\n  fastify.listen(undefined)\n    .then(address => {\n      t.equal(address, `http://${localhostForURL}:${fastify.server.address().port}`)\n    })\n})\n\ntest('listen when firstArg is string(pipe) and without backlog', async t => {\n  t.plan(1)\n  const fastify = Fastify()\n  t.teardown(fastify.close.bind(fastify))\n  const address = await fastify.listen('\\\\\\\\.\\\\pipe\\\\testPipe')\n  t.equal(address, '\\\\\\\\.\\\\pipe\\\\testPipe')\n})\n\ntest('listen when firstArg is string(pipe) and with backlog', async t => {\n  t.plan(1)\n  const fastify = Fastify()\n  t.teardown(fastify.close.bind(fastify))\n  const address = await fastify.listen('\\\\\\\\.\\\\pipe\\\\testPipe2', 511)\n  t.equal(address, '\\\\\\\\.\\\\pipe\\\\testPipe2')\n})\n\ntest('listen when firstArg is { path: string(pipe) } and with backlog and callback', t => {\n  t.plan(2)\n  const fastify = Fastify()\n  t.teardown(fastify.close.bind(fastify))\n  fastify.listen({ path: '\\\\\\\\.\\\\pipe\\\\testPipe3' }, 511, (err, address) => {\n    t.error(err)\n    t.equal(address, '\\\\\\\\.\\\\pipe\\\\testPipe3')\n  })\n})\n\ntest('listen accepts a port as string, and callback', t => {\n  t.plan(2)\n  const fastify = Fastify()\n  t.teardown(fastify.close.bind(fastify))\n  const port = 3000\n  fastify.listen(port.toString(), localhost, (err) => {\n    t.equal(fastify.server.address().port, port)\n    t.error(err)\n  })\n})\n\ntest('listen accepts a port as string, address and callback', t => {\n  t.plan(3)\n  const fastify = Fastify()\n  t.teardown(fastify.close.bind(fastify))\n  const port = 3000\n  fastify.listen(port.toString(), localhost, (err) => {\n    t.equal(fastify.server.address().port, port)\n    t.equal(fastify.server.address().address, localhost)\n    t.error(err)\n  })\n})\n\ntest('listen with invalid port string without callback with (address)', t => {\n  t.plan(1)\n  const fastify = Fastify()\n  t.teardown(fastify.close.bind(fastify))\n  fastify.listen('-1')\n    .then(address => {\n      t.equal(address, `http://${localhostForURL}:${fastify.server.address().port}`)\n    })\n})\n/lib/wrapThenable.js\u0005r'use strict'\n\nconst {\n  kReplyIsError,\n  kReplyHijacked\n} = require('./symbols')\n\nfunction wrapThenable (thenable, reply) {\n  thenable.then(function (payload) {\n    if (reply[kReplyHijacked] === true) {\n      return\n    }\n\n    // this is for async functions that are using reply.send directly\n    //\n    // since wrap-thenable will be called when using reply.send directly\n    // without actual return. the response can be sent already or\n    // the request may be terminated during the reply. in this situation,\n    // it require an extra checking of request.aborted to see whether\n    // the request is killed by client.\n    if (payload !== undefined || (reply.sent === false && reply.raw.headersSent === false && reply.request.raw.aborted === false)) {\n      // we use a try-catch internally to avoid adding a catch to another\n      // promise, increase promise perf by 10%\n      try {\n        reply.send(payload)\n      } catch (err) {\n        reply[kReplyIsError] = true\n        reply.send(err)\n      }\n    }\n  }, function (err) {\n    if (reply.sent === true) {\n      reply.log.error({ err }, 'Promise errored, but reply.sent = true was set')\n      return\n    }\n\n    reply[kReplyIsError] = true\n\n    // try-catch allow to re-throw error in error handler for async handler\n    try {\n      reply.send(err)\n    } catch (err) {\n      reply.send(err)\n    }\n  })\n}\n\nmodule.exports = wrapThenable\n/test/imports.test.js\u0001W'use strict'\n\nconst t = require('tap')\nconst test = t.test\n\ntest('should import as default', t => {\n  t.plan(2)\n  const fastify = require('..')\n  t.ok(fastify)\n  t.equal(typeof fastify, 'function')\n})\n\ntest('should import as esm', t => {\n  t.plan(2)\n  const { fastify } = require('..')\n  t.ok(fastify)\n  t.equal(typeof fastify, 'function')\n})\n/docs/Reference/HTTP2.md\bJ<h1 align=\"center\">Fastify</h1>\n\n## HTTP2\n\n_Fastify_ supports HTTP2 over either HTTPS (h2) or plaintext (h2c).\n\nCurrently, none of the HTTP2-specific APIs are available through _Fastify_, but\nNode's `req` and `res` can be accessed through our `Request` and `Reply`\ninterface. PRs are welcome.\n\n### Secure (HTTPS)\n\nHTTP2 is supported in all modern browsers __only over a secure connection__:\n\n```js\n'use strict'\n\nconst fs = require('fs')\nconst path = require('path')\nconst fastify = require('fastify')({\n  http2: true,\n  https: {\n    key: fs.readFileSync(path.join(__dirname, '..', 'https', 'fastify.key')),\n    cert: fs.readFileSync(path.join(__dirname, '..', 'https', 'fastify.cert'))\n  }\n})\n\nfastify.get('/', function (request, reply) {\n  reply.code(200).send({ hello: 'world' })\n})\n\nfastify.listen({ port: 3000 })\n```\n\nALPN negotiation allows support for both HTTPS and HTTP/2 over the same socket.\nNode core `req` and `res` objects can be either\n[HTTP/1](https://nodejs.org/api/http.html) or\n[HTTP/2](https://nodejs.org/api/http2.html). _Fastify_ supports this out of the\nbox:\n\n```js\n'use strict'\n\nconst fs = require('fs')\nconst path = require('path')\nconst fastify = require('fastify')({\n  http2: true,\n  https: {\n    allowHTTP1: true, // fallback support for HTTP1\n    key: fs.readFileSync(path.join(__dirname, '..', 'https', 'fastify.key')),\n    cert: fs.readFileSync(path.join(__dirname, '..', 'https', 'fastify.cert'))\n  }\n})\n\n// this route can be accessed through both protocols\nfastify.get('/', function (request, reply) {\n  reply.code(200).send({ hello: 'world' })\n})\n\nfastify.listen({ port: 3000 })\n```\n\nYou can test your new server with:\n\n```\n$ npx h2url https://localhost:3000\n```\n\n### Plain or insecure\n\nIf you are building microservices, you can connect to HTTP2 in plain text,\nhowever, this is not supported by browsers.\n\n```js\n'use strict'\n\nconst fastify = require('fastify')({\n  http2: true\n})\n\nfastify.get('/', function (request, reply) {\n  reply.code(200).send({ hello: 'world' })\n})\n\nfastify.listen({ port: 3000 })\n```\n\nYou can test your new server with:\n\n```\n$ npx h2url http://localhost:3000\n```\n\n/test/stream.test.jsNa'use strict'\n\nconst t = require('tap')\nconst test = t.test\nconst proxyquire = require('proxyquire')\nconst sget = require('simple-get').concat\nconst fs = require('fs')\nconst resolve = require('path').resolve\nconst zlib = require('zlib')\nconst pump = require('pump')\nconst Fastify = require('..')\nconst errors = require('http-errors')\nconst JSONStream = require('JSONStream')\nconst send = require('send')\nconst Readable = require('stream').Readable\nconst split = require('split2')\nconst semver = require('semver')\nconst { kDisableRequestLogging } = require('../lib/symbols.js')\n\nfunction getUrl (app) {\n  const { address, port } = app.server.address()\n  if (address === '::1') {\n    return `http://[${address}]:${port}`\n  } else {\n    return `http://${address}:${port}`\n  }\n}\n\ntest('should respond with a stream', t => {\n  t.plan(6)\n  const fastify = Fastify()\n\n  fastify.get('/', function (req, reply) {\n    const stream = fs.createReadStream(__filename, 'utf8')\n    reply.code(200).send(stream)\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    sget(`http://localhost:${fastify.server.address().port}`, function (err, response, data) {\n      t.error(err)\n      t.equal(response.headers['content-type'], undefined)\n      t.equal(response.statusCode, 200)\n\n      fs.readFile(__filename, (err, expected) => {\n        t.error(err)\n        t.equal(expected.toString(), data.toString())\n      })\n    })\n  })\n})\n\ntest('should respond with a stream (error)', t => {\n  t.plan(3)\n  const fastify = Fastify()\n\n  fastify.get('/error', function (req, reply) {\n    const stream = fs.createReadStream('not-existing-file', 'utf8')\n    reply.code(200).send(stream)\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    sget(`http://localhost:${fastify.server.address().port}/error`, function (err, response) {\n      t.error(err)\n      t.equal(response.statusCode, 500)\n    })\n  })\n})\n\ntest('should trigger the onSend hook', t => {\n  t.plan(4)\n  const fastify = Fastify()\n\n  fastify.get('/', (req, reply) => {\n    reply.send(fs.createReadStream(__filename, 'utf8'))\n  })\n\n  fastify.addHook('onSend', (req, reply, payload, done) => {\n    t.ok(payload._readableState)\n    reply.header('Content-Type', 'application/javascript')\n    done()\n  })\n\n  fastify.inject({\n    url: '/'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.headers['content-type'], 'application/javascript')\n    t.equal(res.payload, fs.readFileSync(__filename, 'utf8'))\n    fastify.close()\n  })\n})\n\ntest('should trigger the onSend hook only twice if pumping the stream fails, first with the stream, second with the serialized error', t => {\n  t.plan(5)\n  const fastify = Fastify()\n\n  fastify.get('/', (req, reply) => {\n    reply.send(fs.createReadStream('not-existing-file', 'utf8'))\n  })\n\n  let counter = 0\n  fastify.addHook('onSend', (req, reply, payload, done) => {\n    if (counter === 0) {\n      t.ok(payload._readableState)\n    } else if (counter === 1) {\n      const error = JSON.parse(payload)\n      t.equal(error.statusCode, 500)\n    }\n    counter++\n    done()\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    sget(`http://localhost:${fastify.server.address().port}`, function (err, response) {\n      t.error(err)\n      t.equal(response.statusCode, 500)\n    })\n  })\n})\n\ntest('onSend hook stream', t => {\n  t.plan(4)\n  const fastify = Fastify()\n\n  fastify.get('/', function (req, reply) {\n    reply.send({ hello: 'world' })\n  })\n\n  fastify.addHook('onSend', (req, reply, payload, done) => {\n    const gzStream = zlib.createGzip()\n\n    reply.header('Content-Encoding', 'gzip')\n    pump(\n      fs.createReadStream(resolve(process.cwd() + '/test/stream.test.js'), 'utf8'),\n      gzStream,\n      t.error\n    )\n    done(null, gzStream)\n  })\n\n  fastify.inject({\n    url: '/',\n    method: 'GET'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.headers['content-encoding'], 'gzip')\n    const file = fs.readFileSync(resolve(process.cwd() + '/test/stream.test.js'), 'utf8')\n    const payload = zlib.gunzipSync(res.rawPayload)\n    t.equal(payload.toString('utf-8'), file)\n    fastify.close()\n  })\n})\n\ntest('onSend hook stream should work even if payload is not a proper stream', t => {\n  t.plan(1)\n\n  const reply = proxyquire('../lib/reply', {\n    stream: {\n      finished: (...args) => {\n        if (args.length === 2) { args[1](new Error('test-error')) }\n      }\n    }\n  })\n  const Fastify = proxyquire('..', {\n    './lib/reply.js': reply\n  })\n  const spyLogger = {\n    fatal: () => { },\n    error: () => { },\n    warn: (message) => {\n      t.equal(message, 'stream payload does not end properly')\n      fastify.close()\n    },\n    info: () => { },\n    debug: () => { },\n    trace: () => { },\n    child: () => { return spyLogger }\n  }\n\n  const fastify = Fastify({ logger: spyLogger })\n  fastify.get('/', function (req, reply) {\n    reply.send({ hello: 'world' })\n  })\n  fastify.addHook('onSend', (req, reply, payload, done) => {\n    const fakeStream = { pipe: () => { } }\n    done(null, fakeStream)\n  })\n\n  fastify.inject({\n    url: '/',\n    method: 'GET'\n  })\n})\n\ntest('onSend hook stream should work on payload with \"close\" ending function', t => {\n  t.plan(1)\n\n  const reply = proxyquire('../lib/reply', {\n    stream: {\n      finished: (...args) => {\n        if (args.length === 2) { args[1](new Error('test-error')) }\n      }\n    }\n  })\n  const Fastify = proxyquire('..', {\n    './lib/reply.js': reply\n  })\n\n  const fastify = Fastify({ logger: false })\n  fastify.get('/', function (req, reply) {\n    reply.send({ hello: 'world' })\n  })\n  fastify.addHook('onSend', (req, reply, payload, done) => {\n    const fakeStream = {\n      pipe: () => { },\n      close: (cb) => {\n        cb()\n        t.pass()\n      }\n    }\n    done(null, fakeStream)\n  })\n\n  fastify.inject({\n    url: '/',\n    method: 'GET'\n  })\n})\n\ntest('Destroying streams prematurely', t => {\n  t.plan(6)\n\n  let fastify = null\n  const logStream = split(JSON.parse)\n  try {\n    fastify = Fastify({\n      logger: {\n        stream: logStream,\n        level: 'info'\n      }\n    })\n  } catch (e) {\n    t.fail()\n  }\n  const stream = require('stream')\n  const http = require('http')\n\n  // Test that \"premature close\" errors are logged with level warn\n  logStream.on('data', line => {\n    if (line.res) {\n      t.equal(line.msg, 'stream closed prematurely')\n      t.equal(line.level, 30)\n    }\n  })\n\n  fastify.get('/', function (request, reply) {\n    t.pass('Received request')\n\n    let sent = false\n    const reallyLongStream = new stream.Readable({\n      read: function () {\n        if (!sent) {\n          this.push(Buffer.from('hello\\n'))\n        }\n        sent = true\n      }\n    })\n\n    reply.send(reallyLongStream)\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    const port = fastify.server.address().port\n\n    http.get(`http://localhost:${port}`, function (response) {\n      t.equal(response.statusCode, 200)\n      response.on('readable', function () {\n        response.destroy()\n      })\n\n      // Node bug? Node never emits 'close' here.\n      response.on('aborted', function () {\n        t.pass('Response closed')\n      })\n    })\n  })\n})\n\ntest('Destroying streams prematurely should call close method', t => {\n  t.plan(7)\n\n  let fastify = null\n  const logStream = split(JSON.parse)\n  try {\n    fastify = Fastify({\n      logger: {\n        stream: logStream,\n        level: 'info'\n      }\n    })\n  } catch (e) {\n    t.fail()\n  }\n  const stream = require('stream')\n  const http = require('http')\n\n  // Test that \"premature close\" errors are logged with level warn\n  logStream.on('data', line => {\n    if (line.res) {\n      t.equal(line.msg, 'stream closed prematurely')\n      t.equal(line.level, 30)\n    }\n  })\n\n  fastify.get('/', function (request, reply) {\n    t.pass('Received request')\n\n    let sent = false\n    const reallyLongStream = new stream.Readable({\n      read: function () {\n        if (!sent) {\n          this.push(Buffer.from('hello\\n'))\n        }\n        sent = true\n      }\n    })\n    reallyLongStream.destroy = undefined\n    reallyLongStream.close = () => t.ok('called')\n    reply.send(reallyLongStream)\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    const port = fastify.server.address().port\n\n    http.get(`http://localhost:${port}`, function (response) {\n      t.equal(response.statusCode, 200)\n      response.on('readable', function () {\n        response.destroy()\n      })\n      // Node bug? Node never emits 'close' here.\n      response.on('aborted', function () {\n        t.pass('Response closed')\n      })\n    })\n  })\n})\n\ntest('Destroying streams prematurely should call close method when destroy is not a function', t => {\n  t.plan(7)\n\n  let fastify = null\n  const logStream = split(JSON.parse)\n  try {\n    fastify = Fastify({\n      logger: {\n        stream: logStream,\n        level: 'info'\n      }\n    })\n  } catch (e) {\n    t.fail()\n  }\n  const stream = require('stream')\n  const http = require('http')\n\n  // Test that \"premature close\" errors are logged with level warn\n  logStream.on('data', line => {\n    if (line.res) {\n      t.equal(line.msg, 'stream closed prematurely')\n      t.equal(line.level, 30)\n    }\n  })\n\n  fastify.get('/', function (request, reply) {\n    t.pass('Received request')\n\n    let sent = false\n    const reallyLongStream = new stream.Readable({\n      read: function () {\n        if (!sent) {\n          this.push(Buffer.from('hello\\n'))\n        }\n        sent = true\n      }\n    })\n    reallyLongStream.destroy = true\n    reallyLongStream.close = () => t.ok('called')\n    reply.send(reallyLongStream)\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    const port = fastify.server.address().port\n\n    http.get(`http://localhost:${port}`, function (response) {\n      t.equal(response.statusCode, 200)\n      response.on('readable', function () {\n        response.destroy()\n      })\n      // Node bug? Node never emits 'close' here.\n      response.on('aborted', function () {\n        t.pass('Response closed')\n      })\n    })\n  })\n})\n\ntest('Destroying streams prematurely should call abort method', t => {\n  t.plan(7)\n\n  let fastify = null\n  const logStream = split(JSON.parse)\n  try {\n    fastify = Fastify({\n      logger: {\n        stream: logStream,\n        level: 'info'\n      }\n    })\n  } catch (e) {\n    t.fail()\n  }\n  const stream = require('stream')\n  const http = require('http')\n\n  // Test that \"premature close\" errors are logged with level warn\n  logStream.on('data', line => {\n    if (line.res) {\n      t.equal(line.msg, 'stream closed prematurely')\n      t.equal(line.level, 30)\n    }\n  })\n\n  fastify.get('/', function (request, reply) {\n    t.pass('Received request')\n\n    let sent = false\n    const reallyLongStream = new stream.Readable({\n      read: function () {\n        if (!sent) {\n          this.push(Buffer.from('hello\\n'))\n        }\n        sent = true\n      }\n    })\n    reallyLongStream.destroy = undefined\n    reallyLongStream.close = undefined\n    reallyLongStream.abort = () => t.ok('called')\n    reply.send(reallyLongStream)\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    const port = fastify.server.address().port\n\n    http.get(`http://localhost:${port}`, function (response) {\n      t.equal(response.statusCode, 200)\n      response.on('readable', function () {\n        response.destroy()\n      })\n      // Node bug? Node never emits 'close' here.\n      response.on('aborted', function () {\n        t.pass('Response closed')\n      })\n    })\n  })\n})\n\ntest('Destroying streams prematurely, log is disabled', t => {\n  t.plan(4)\n\n  let fastify = null\n  try {\n    fastify = Fastify({\n      logger: false\n    })\n  } catch (e) {\n    t.fail()\n  }\n  const stream = require('stream')\n  const http = require('http')\n\n  fastify.get('/', function (request, reply) {\n    reply.log[kDisableRequestLogging] = true\n\n    let sent = false\n    const reallyLongStream = new stream.Readable({\n      read: function () {\n        if (!sent) {\n          this.push(Buffer.from('hello\\n'))\n        }\n        sent = true\n      }\n    })\n    reallyLongStream.destroy = true\n    reallyLongStream.close = () => t.ok('called')\n    reply.send(reallyLongStream)\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    const port = fastify.server.address().port\n\n    http.get(`http://localhost:${port}`, function (response) {\n      t.equal(response.statusCode, 200)\n      response.on('readable', function () {\n        response.destroy()\n      })\n      // Node bug? Node never emits 'close' here.\n      response.on('aborted', function () {\n        t.pass('Response closed')\n      })\n    })\n  })\n})\n\ntest('should respond with a stream1', t => {\n  t.plan(5)\n  const fastify = Fastify()\n\n  fastify.get('/', function (req, reply) {\n    const stream = JSONStream.stringify()\n    reply.code(200).type('application/json').send(stream)\n    stream.write({ hello: 'world' })\n    stream.end({ a: 42 })\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    sget(`http://localhost:${fastify.server.address().port}`, function (err, response, body) {\n      t.error(err)\n      t.equal(response.headers['content-type'], 'application/json')\n      t.equal(response.statusCode, 200)\n      t.same(JSON.parse(body), [{ hello: 'world' }, { a: 42 }])\n    })\n  })\n})\n\ntest('return a 404 if the stream emits a 404 error', t => {\n  t.plan(5)\n\n  const fastify = Fastify()\n\n  fastify.get('/', function (request, reply) {\n    t.pass('Received request')\n\n    const reallyLongStream = new Readable({\n      read: function () {\n        setImmediate(() => {\n          this.emit('error', new errors.NotFound())\n        })\n      }\n    })\n\n    reply.send(reallyLongStream)\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    const port = fastify.server.address().port\n\n    sget(`http://localhost:${port}`, function (err, response) {\n      t.error(err)\n      t.equal(response.headers['content-type'], 'application/json; charset=utf-8')\n      t.equal(response.statusCode, 404)\n    })\n  })\n})\n\ntest('should support send module 200 and 404', { skip: semver.gte(process.versions.node, '17.0.0') }, t => {\n  t.plan(8)\n  const fastify = Fastify()\n\n  fastify.get('/', function (req, reply) {\n    const stream = send(req.raw, __filename)\n    reply.code(200).send(stream)\n  })\n\n  fastify.get('/error', function (req, reply) {\n    const stream = send(req.raw, 'non-existing-file')\n    reply.code(200).send(stream)\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    const url = getUrl(fastify)\n\n    sget(url, function (err, response, data) {\n      t.error(err)\n      t.equal(response.headers['content-type'], 'application/javascript; charset=UTF-8')\n      t.equal(response.statusCode, 200)\n\n      fs.readFile(__filename, (err, expected) => {\n        t.error(err)\n        t.equal(expected.toString(), data.toString())\n      })\n    })\n\n    sget(url + '/error', function (err, response) {\n      t.error(err)\n      t.equal(response.statusCode, 404)\n    })\n  })\n})\n\ntest('should destroy stream when response is ended', t => {\n  t.plan(4)\n  const stream = require('stream')\n  const fastify = Fastify()\n\n  fastify.get('/error', function (req, reply) {\n    const reallyLongStream = new stream.Readable({\n      read: function () {},\n      destroy: function (err, callback) {\n        t.ok('called')\n        callback(err)\n      }\n    })\n    reply.code(200).send(reallyLongStream)\n    reply.raw.end(Buffer.from('hello\\n'))\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    sget(`http://localhost:${fastify.server.address().port}/error`, function (err, response) {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n    })\n  })\n})\n\ntest('should mark reply as sent before pumping the payload stream into response for async route handler', t => {\n  t.plan(3)\n\n  const handleRequest = proxyquire('../lib/handleRequest', {\n    './wrapThenable': (thenable, reply) => {\n      thenable.then(function (payload) {\n        t.equal(reply.sent, true)\n      })\n    }\n  })\n\n  const route = proxyquire('../lib/route', {\n    './handleRequest': handleRequest\n  })\n\n  const Fastify = proxyquire('..', {\n    './lib/route': route\n  })\n\n  const fastify = Fastify()\n\n  fastify.get('/', async function (req, reply) {\n    const stream = fs.createReadStream(__filename, 'utf8')\n    return reply.code(200).send(stream)\n  })\n\n  fastify.inject({\n    url: '/',\n    method: 'GET'\n  }, (err, res) => {\n    t.error(err)\n    t.equal(res.payload, fs.readFileSync(__filename, 'utf8'))\n    fastify.close()\n  })\n})\n\ntest('reply.send handles aborted requests', t => {\n  t.plan(2)\n\n  const spyLogger = {\n    level: 'error',\n    fatal: () => { },\n    error: () => {\n      t.fail('should not log an error')\n    },\n    warn: () => { },\n    info: () => { },\n    debug: () => { },\n    trace: () => { },\n    child: () => { return spyLogger }\n  }\n  const fastify = Fastify({\n    logger: spyLogger\n  })\n\n  fastify.get('/', (req, reply) => {\n    setTimeout(() => {\n      const stream = new Readable({\n        read: function () {\n          this.push(null)\n        }\n      })\n      reply.send(stream)\n    }, 6)\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    const port = fastify.server.address().port\n    const http = require('http')\n    const req = http.get(`http://localhost:${port}`)\n      .on('error', (err) => {\n        t.equal(err.code, 'ECONNRESET')\n        fastify.close()\n      })\n\n    setTimeout(() => {\n      req.abort()\n    }, 1)\n  })\n})\n\ntest('request terminated should not crash fastify', t => {\n  t.plan(10)\n\n  const spyLogger = {\n    level: 'error',\n    fatal: () => { },\n    error: () => {\n      t.fail('should not log an error')\n    },\n    warn: () => { },\n    info: () => { },\n    debug: () => { },\n    trace: () => { },\n    child: () => { return spyLogger }\n  }\n  const fastify = Fastify({\n    logger: spyLogger\n  })\n\n  fastify.get('/', async (req, reply) => {\n    const stream = new Readable()\n    stream._read = () => {}\n    reply.header('content-type', 'text/html; charset=utf-8')\n    reply.header('transfer-encoding', 'chunked')\n    stream.push('<h1>HTML</h1>')\n\n    reply.send(stream)\n\n    await new Promise((resolve) => { setTimeout(resolve, 100).unref() })\n\n    stream.push('<h1>should disply on second stream</h1>')\n    stream.push(null)\n    return reply\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    const port = fastify.server.address().port\n    const http = require('http')\n    const req = http.get(`http://localhost:${port}`, function (res) {\n      const { statusCode, headers } = res\n      t.equal(statusCode, 200)\n      t.equal(headers['content-type'], 'text/html; charset=utf-8')\n      t.equal(headers['transfer-encoding'], 'chunked')\n      res.on('data', function (chunk) {\n        t.equal(chunk.toString(), '<h1>HTML</h1>')\n      })\n\n      setTimeout(() => {\n        req.destroy()\n\n        // the server is not crash, we can connect it\n        http.get(`http://localhost:${port}`, function (res) {\n          const { statusCode, headers } = res\n          t.equal(statusCode, 200)\n          t.equal(headers['content-type'], 'text/html; charset=utf-8')\n          t.equal(headers['transfer-encoding'], 'chunked')\n          let payload = ''\n          res.on('data', function (chunk) {\n            payload += chunk.toString()\n          })\n          res.on('end', function () {\n            t.equal(payload, '<h1>HTML</h1><h1>should disply on second stream</h1>')\n            t.pass('should end properly')\n          })\n        })\n      }, 1)\n    })\n  })\n})\n/test/patch.test.jsč'use strict'\n\nconst t = require('tap')\nrequire('./helper').payloadMethod('patch', t)\nrequire('./input-validation').payloadMethod('patch', t)\n%/test/unsupported-httpversion.test.js\u0003\u0002'use strict'\n\nconst net = require('net')\nconst t = require('tap')\nconst Fastify = require('../fastify')\n\nt.test('Will return 505 HTTP error if HTTP version (2.0 when server is 1.1) is not supported', t => {\n  const fastify = Fastify()\n\n  t.teardown(fastify.close.bind(fastify))\n\n  fastify.get('/', (req, reply) => {\n    reply.send({ hello: 'world' })\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n\n    const port = fastify.server.address().port\n    const client = net.createConnection({ port }, () => {\n      client.write('GET / HTTP/2.0\\r\\nHost: example.com\\r\\n\\r\\n')\n\n      client.once('data', data => {\n        t.match(data.toString(), /505 HTTP Version Not Supported/i)\n        client.end(() => {\n          t.end()\n        })\n      })\n    })\n  })\n})\n/test/http2/head.test.js\u0002'use strict'\n\nconst t = require('tap')\nconst test = t.test\nconst Fastify = require('../..')\nconst h2url = require('h2url')\nconst msg = { hello: 'world' }\n\nlet fastify\ntry {\n  fastify = Fastify({\n    http2: true\n  })\n  t.pass('http2 successfully loaded')\n} catch (e) {\n  t.fail('http2 loading failed', e)\n}\n\nfastify.all('/', function (req, reply) {\n  reply.code(200).send(msg)\n})\n\nfastify.listen({ port: 0 }, err => {\n  t.error(err)\n  t.teardown(() => { fastify.close() })\n\n  test('http HEAD request', async (t) => {\n    t.plan(1)\n\n    const url = `http://localhost:${fastify.server.address().port}`\n    const res = await h2url.concat({ url, method: 'HEAD' })\n\n    t.equal(res.headers[':status'], 200)\n  })\n})\n/test/listen.test.js*'use strict'\n\nconst os = require('os')\nconst path = require('path')\nconst fs = require('fs')\nconst { test, before } = require('tap')\nconst dns = require('dns').promises\nconst dnsCb = require('dns')\nconst sget = require('simple-get').concat\nconst Fastify = require('..')\n\nlet localhost\nlet localhostForURL\n\nbefore(async function () {\n  const lookup = await dns.lookup('localhost')\n  localhost = lookup.address\n  if (lookup.family === 6) {\n    localhostForURL = `[${lookup.address}]`\n  } else {\n    localhostForURL = localhost\n  }\n})\n\ntest('listen works without arguments', async t => {\n  process.on('warning', () => {\n    t.fail('should not be deprecated')\n  })\n\n  const fastify = Fastify()\n  t.teardown(fastify.close.bind(fastify))\n  await fastify.listen()\n  const address = fastify.server.address()\n  t.equal(address.address, localhost)\n  t.ok(address.port > 0)\n})\n\ntest('Async/await listen with arguments', async t => {\n  process.on('warning', () => {\n    t.fail('should not be deprecated')\n  })\n\n  t.plan(1)\n  const fastify = Fastify()\n  t.teardown(fastify.close.bind(fastify))\n  const addr = await fastify.listen({ port: 0, host: '0.0.0.0' })\n  const address = fastify.server.address()\n  t.equal(addr, `http://${address.address}:${address.port}`)\n})\n\ntest('Promise listen with arguments', t => {\n  process.on('warning', () => {\n    t.fail('should not be deprecated')\n  })\n\n  t.plan(1)\n  const fastify = Fastify()\n  t.teardown(fastify.close.bind(fastify))\n  fastify.listen({ port: 0, host: '0.0.0.0' }).then(addr => {\n    const address = fastify.server.address()\n    t.equal(addr, `http://${address.address}:${address.port}`)\n  })\n})\n\ntest('listen accepts a callback', t => {\n  process.on('warning', () => {\n    t.fail('should not be deprecated')\n  })\n\n  t.plan(2)\n  const fastify = Fastify()\n  t.teardown(fastify.close.bind(fastify))\n  fastify.listen({ port: 0 }, (err) => {\n    t.equal(fastify.server.address().address, localhost)\n    t.error(err)\n  })\n})\n\ntest('listen accepts options and a callback', t => {\n  process.on('warning', () => {\n    t.fail('should not be deprecated')\n  })\n\n  t.plan(1)\n  const fastify = Fastify()\n  t.teardown(fastify.close.bind(fastify))\n  fastify.listen({\n    port: 0,\n    host: 'localhost',\n    backlog: 511,\n    exclusive: false,\n    readableAll: false,\n    writableAll: false,\n    ipv6Only: false\n  }, (err) => {\n    t.error(err)\n  })\n})\n\ntest('listen after Promise.resolve()', t => {\n  t.plan(2)\n  const f = Fastify()\n  t.teardown(f.close.bind(f))\n  Promise.resolve()\n    .then(() => {\n      f.listen({ port: 0 }, (err, address) => {\n        f.server.unref()\n        t.equal(address, `http://${localhostForURL}:${f.server.address().port}`)\n        t.error(err)\n      })\n    })\n})\n\ntest('register after listen using Promise.resolve()', t => {\n  t.plan(1)\n  const f = Fastify()\n\n  const handler = (req, res) => res.send({})\n  Promise.resolve()\n    .then(() => {\n      f.get('/', handler)\n      f.register((f2, options, done) => {\n        f2.get('/plugin', handler)\n        done()\n      })\n      return f.ready()\n    })\n    .catch(t.error)\n    .then(() => t.pass('resolved'))\n})\n\ntest('double listen errors', t => {\n  t.plan(3)\n  const fastify = Fastify()\n  t.teardown(fastify.close.bind(fastify))\n  fastify.listen({ port: 0 }, (err) => {\n    t.error(err)\n    fastify.listen({ port: fastify.server.address().port }, (err, address) => {\n      t.equal(address, null)\n      t.ok(err)\n    })\n  })\n})\n\ntest('double listen errors callback with (err, address)', t => {\n  t.plan(4)\n  const fastify = Fastify()\n  t.teardown(fastify.close.bind(fastify))\n  fastify.listen({ port: 0 }, (err1, address1) => {\n    t.equal(address1, `http://${localhostForURL}:${fastify.server.address().port}`)\n    t.error(err1)\n    fastify.listen({ port: fastify.server.address().port }, (err2, address2) => {\n      t.equal(address2, null)\n      t.ok(err2)\n    })\n  })\n})\n\ntest('listen twice on the same port', t => {\n  t.plan(4)\n  const fastify = Fastify()\n  t.teardown(fastify.close.bind(fastify))\n  fastify.listen({ port: 0 }, (err1, address1) => {\n    t.equal(address1, `http://${localhostForURL}:${fastify.server.address().port}`)\n    t.error(err1)\n    const s2 = Fastify()\n    t.teardown(s2.close.bind(s2))\n    s2.listen({ port: fastify.server.address().port }, (err2, address2) => {\n      t.equal(address2, null)\n      t.ok(err2)\n    })\n  })\n})\n\ntest('listen twice on the same port callback with (err, address)', t => {\n  t.plan(4)\n  const fastify = Fastify()\n  t.teardown(fastify.close.bind(fastify))\n  fastify.listen({ port: 0 }, (err1, address1) => {\n    const _port = fastify.server.address().port\n    t.equal(address1, `http://${localhostForURL}:${_port}`)\n    t.error(err1)\n    const s2 = Fastify()\n    t.teardown(s2.close.bind(s2))\n    s2.listen({ port: _port }, (err2, address2) => {\n      t.equal(address2, null)\n      t.ok(err2)\n    })\n  })\n})\n\n// https://nodejs.org/api/net.html#net_ipc_support\nif (os.platform() !== 'win32') {\n  test('listen on socket', t => {\n    t.plan(3)\n    const fastify = Fastify()\n    t.teardown(fastify.close.bind(fastify))\n\n    const sockFile = path.join(os.tmpdir(), `${(Math.random().toString(16) + '0000000').slice(2, 10)}-server.sock`)\n    try {\n      fs.unlinkSync(sockFile)\n    } catch (e) { }\n\n    fastify.listen({ path: sockFile }, (err, address) => {\n      t.error(err)\n      t.strictSame(fastify.addresses(), [sockFile])\n      t.equal(address, sockFile)\n    })\n  })\n} else {\n  test('listen on socket', t => {\n    t.plan(3)\n    const fastify = Fastify()\n    t.teardown(fastify.close.bind(fastify))\n\n    const sockFile = `\\\\\\\\.\\\\pipe\\\\${(Math.random().toString(16) + '0000000').slice(2, 10)}-server-sock`\n\n    fastify.listen({ path: sockFile }, (err, address) => {\n      t.error(err)\n      t.strictSame(fastify.addresses(), [sockFile])\n      t.equal(address, sockFile)\n    })\n  })\n}\n\ntest('listen without callback with (address)', t => {\n  t.plan(1)\n  const fastify = Fastify()\n  t.teardown(fastify.close.bind(fastify))\n  fastify.listen({ port: 0 })\n    .then(address => {\n      t.equal(address, `http://${localhostForURL}:${fastify.server.address().port}`)\n    })\n})\n\ntest('double listen without callback rejects', t => {\n  t.plan(1)\n  const fastify = Fastify()\n  t.teardown(fastify.close.bind(fastify))\n  fastify.listen({ port: 0 })\n    .then(() => {\n      fastify.listen({ port: 0 })\n        .catch(err => {\n          t.ok(err)\n        })\n    })\n    .catch(err => t.error(err))\n})\n\ntest('double listen without callback with (address)', t => {\n  t.plan(2)\n  const fastify = Fastify()\n  t.teardown(fastify.close.bind(fastify))\n  fastify.listen({ port: 0 })\n    .then(address => {\n      t.equal(address, `http://${localhostForURL}:${fastify.server.address().port}`)\n      fastify.listen({ port: 0 })\n        .catch(err => {\n          t.ok(err)\n        })\n    })\n    .catch(err => t.error(err))\n})\n\ntest('listen twice on the same port without callback rejects', t => {\n  t.plan(1)\n  const fastify = Fastify()\n  t.teardown(fastify.close.bind(fastify))\n\n  fastify.listen({ port: 0 })\n    .then(() => {\n      const s2 = Fastify()\n      t.teardown(s2.close.bind(s2))\n      s2.listen({ port: fastify.server.address().port })\n        .catch(err => {\n          t.ok(err)\n        })\n    })\n    .catch(err => t.error(err))\n})\n\ntest('listen twice on the same port without callback rejects with (address)', t => {\n  t.plan(2)\n  const fastify = Fastify()\n  t.teardown(fastify.close.bind(fastify))\n  fastify.listen({ port: 0 })\n    .then(address => {\n      const s2 = Fastify()\n      t.teardown(s2.close.bind(s2))\n      t.equal(address, `http://${localhostForURL}:${fastify.server.address().port}`)\n      s2.listen({ port: fastify.server.address().port })\n        .catch(err => {\n          t.ok(err)\n        })\n    })\n    .catch(err => t.error(err))\n})\n\ntest('listen on invalid port without callback rejects', t => {\n  const fastify = Fastify()\n  t.teardown(fastify.close.bind(fastify))\n  return fastify.listen({ port: -1 })\n    .catch(err => {\n      t.ok(err)\n      return true\n    })\n})\n\ntest('listen logs the port as info', t => {\n  t.plan(1)\n  const fastify = Fastify()\n  t.teardown(fastify.close.bind(fastify))\n\n  const msgs = []\n  fastify.log.info = function (msg) {\n    msgs.push(msg)\n  }\n\n  fastify.listen({ port: 0 })\n    .then(() => {\n      t.ok(/http:\\/\\//.test(msgs[0]))\n    })\n})\n\ntest('listen on localhost binds IPv4 and IPv6 - promise interface', async t => {\n  const lookups = await dns.lookup('localhost', { all: true })\n  t.plan(2 * lookups.length)\n\n  const app = Fastify()\n  app.get('/', async () => 'hello localhost')\n  t.teardown(app.close.bind(app))\n  await app.listen({ port: 0, host: 'localhost' })\n\n  for (const lookup of lookups) {\n    await new Promise((resolve, reject) => {\n      sget({\n        method: 'GET',\n        url: getUrl(app, lookup)\n      }, (err, response, body) => {\n        if (err) { return reject(err) }\n        t.equal(response.statusCode, 200)\n        t.same(body.toString(), 'hello localhost')\n        resolve()\n      })\n    })\n  }\n})\n\ntest('listen on localhost binds to all interfaces (both IPv4 and IPv6 if present) - callback interface', t => {\n  dnsCb.lookup('localhost', { all: true }, (err, lookups) => {\n    t.plan(2 + (3 * lookups.length))\n    t.error(err)\n\n    const app = Fastify()\n    app.get('/', async () => 'hello localhost')\n    app.listen({ port: 0, host: 'localhost' }, (err) => {\n      t.error(err)\n      t.teardown(app.close.bind(app))\n\n      for (const lookup of lookups) {\n        sget({\n          method: 'GET',\n          url: getUrl(app, lookup)\n        }, (err, response, body) => {\n          t.error(err)\n          t.equal(response.statusCode, 200)\n          t.same(body.toString(), 'hello localhost')\n        })\n      }\n    })\n  })\n})\n\ntest('addresses getter', async t => {\n  t.plan(4)\n  const app = Fastify()\n  app.get('/', async () => 'hello localhost')\n\n  t.same(app.addresses(), [], 'before ready')\n  await app.ready()\n\n  t.same(app.addresses(), [], 'after ready')\n  await app.listen({ port: 0, host: 'localhost' })\n  const { port } = app.server.address()\n  const localAddresses = await dns.lookup('localhost', { all: true })\n  for (const address of localAddresses) {\n    address.port = port\n    if (typeof address.family === 'number') {\n      address.family = 'IPv' + address.family\n    }\n  }\n  const appAddresses = app.addresses()\n  for (const address of appAddresses) {\n    if (typeof address.family === 'number') {\n      address.family = 'IPv' + address.family\n    }\n  }\n  localAddresses.sort((a, b) => a.address.localeCompare(b.address))\n  appAddresses.sort((a, b) => a.address.localeCompare(b.address))\n  t.same(appAddresses, localAddresses, 'after listen')\n\n  await app.close()\n  t.same(app.addresses(), [], 'after close')\n})\n\nfunction getUrl (fastify, lookup) {\n  const { port } = fastify.server.address()\n  if (lookup.family === 6) {\n    return `http://[${lookup.address}]:${port}/`\n  } else {\n    return `http://${lookup.address}:${port}/`\n  }\n}\n/docs/Reference/Lifecycle.md\u000f<h1 align=\"center\">Fastify</h1>\n\n## Lifecycle\nFollowing the schema of the internal lifecycle of Fastify.\n\nOn the right branch of every section there is the next phase of the lifecycle,\non the left branch there is the corresponding error code that will be generated\nif the parent throws an error *(note that all the errors are automatically\nhandled by Fastify)*.\n\n```\nIncoming Request\n  │\n  └─▶ Routing\n        │\n        └─▶ Instance Logger\n             │\n   4**/5** ◀─┴─▶ onRequest Hook\n                  │\n        4**/5** ◀─┴─▶ preParsing Hook\n                        │\n              4**/5** ◀─┴─▶ Parsing\n                             │\n                   4**/5** ◀─┴─▶ preValidation Hook\n                                  │\n                            400 ◀─┴─▶ Validation\n                                        │\n                              4**/5** ◀─┴─▶ preHandler Hook\n                                              │\n                                    4**/5** ◀─┴─▶ User Handler\n                                                    │\n                                                    └─▶ Reply\n                                                          │\n                                                4**/5** ◀─┴─▶ preSerialization Hook\n                                                                │\n                                                                └─▶ onSend Hook\n                                                                      │\n                                                            4**/5** ◀─┴─▶ Outgoing Response\n                                                                            │\n                                                                            └─▶ onResponse Hook\n```\n\nAt any point before or during the `User Handler`, `reply.hijack()` can be called\nto prevent Fastify from:\n- Running all the following hooks and user handler\n- Sending the response automatically\n\nNB (*): If `reply.raw` is used to send a response back to the user, `onResponse`\nhooks will still be executed\n\n## Reply Lifecycle\n\nWhenever the user handles the request, the result may be:\n\n- in async handler: it returns a payload\n- in async handler: it throws an `Error`\n- in sync handler: it sends a payload\n- in sync handler: it sends an `Error` instance\n\nIf the reply was hijacked, we skip all the below steps. Otherwise, when it is\nbeing submitted, the data flow performed is the following:\n\n```\n                        ★ schema validation Error\n                                    │\n                                    └─▶ schemaErrorFormatter\n                                               │\n                          reply sent ◀── JSON ─┴─ Error instance\n                                                      │\n                                                      │         ★ throw an Error\n                     ★ send or return                 │                 │\n                            │                         │                 │\n                            │                         ▼                 │\n       reply sent ◀── JSON ─┴─ Error instance ──▶ setErrorHandler ◀─────┘\n                                                      │\n                                 reply sent ◀── JSON ─┴─ Error instance ──▶ onError Hook\n                                                                                │\n                                                                                └─▶ reply sent\n```\n\nNote: `reply sent` means that the JSON payload will be serialized by:\n\n- the [reply serialized](./Server.md#setreplyserializer) if set\n- or by the [serializer compiler](./Server.md#setserializercompiler) when a JSON\n  schema has been set for the returning HTTP status code\n- or by the default `JSON.stringify` function\n/build/sync-version.js\u0001'use strict'\n\nconst fs = require('fs')\nconst path = require('path')\n\n// package.json:version -> fastify.js:VERSION\nconst { version } = JSON.parse(fs.readFileSync(path.join(__dirname, '..', 'package.json')).toString('utf8'))\n\nconst fastifyJs = path.join(__dirname, '..', 'fastify.js')\n\nfs.writeFileSync(fastifyJs, fs.readFileSync(fastifyJs).toString('utf8').replace(/const\\s*VERSION\\s*=.*/, `const VERSION = '${version}'`))\n/examples/http2.js\u0002'use strict'\n\nconst fs = require('fs')\nconst path = require('path')\nconst fastify = require('../fastify')({\n  http2: true,\n  https: {\n    key: fs.readFileSync(path.join(__dirname, '../test/https/fastify.key')),\n    cert: fs.readFileSync(path.join(__dirname, '../test/https/fastify.cert'))\n  },\n  logger: true\n})\n\nconst opts = {\n  schema: {\n    response: {\n      '2xx': {\n        type: 'object',\n        properties: {\n          hello: {\n            type: 'string'\n          }\n        }\n      }\n    }\n  }\n}\n\nfastify\n  .get('/', opts, function (req, reply) {\n    reply.header('Content-Type', 'application/json').code(200)\n    reply.send({ hello: 'world' })\n  })\n\nfastify.listen({ port: 3000 }, err => {\n  if (err) throw err\n})\n/test/als.test.js\u0006h'use strict'\n\nconst { AsyncLocalStorage } = require('async_hooks')\nconst t = require('tap')\nconst Fastify = require('..')\nconst sget = require('simple-get').concat\n\nif (!AsyncLocalStorage) {\n  t.skip('AsyncLocalStorage not available, skipping test')\n  process.exit(0)\n}\n\nconst storage = new AsyncLocalStorage()\nconst app = Fastify({ logger: false })\n\nlet counter = 0\napp.addHook('onRequest', (req, reply, next) => {\n  const id = counter++\n  storage.run({ id }, next)\n})\n\napp.get('/', function (request, reply) {\n  t.ok(storage.getStore())\n  const id = storage.getStore().id\n  reply.send({ id })\n})\n\napp.post('/', function (request, reply) {\n  t.ok(storage.getStore())\n  const id = storage.getStore().id\n  reply.send({ id })\n})\n\napp.listen({ port: 0 }, function (err, address) {\n  t.error(err)\n\n  sget({\n    method: 'POST',\n    url: 'http://localhost:' + app.server.address().port,\n    body: {\n      hello: 'world'\n    },\n    json: true\n  }, (err, response, body) => {\n    t.error(err)\n    t.equal(response.statusCode, 200)\n    t.same(body, { id: 0 })\n\n    sget({\n      method: 'POST',\n      url: 'http://localhost:' + app.server.address().port,\n      body: {\n        hello: 'world'\n      },\n      json: true\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.same(body, { id: 1 })\n\n      sget({\n        method: 'GET',\n        url: 'http://localhost:' + app.server.address().port,\n        json: true\n      }, (err, response, body) => {\n        t.error(err)\n        t.equal(response.statusCode, 200)\n        t.same(body, { id: 2 })\n        app.close()\n        t.end()\n      })\n    })\n  })\n})\n!/test/nullable-validation.test.js\u000f6'use strict'\n\nconst t = require('tap')\nconst test = t.test\nconst sget = require('simple-get').concat\nconst Fastify = require('..')\n\ntest('nullable string', t => {\n  t.plan(3)\n  const fastify = Fastify()\n  fastify.route({\n    method: 'POST',\n    url: '/',\n    handler: (req, reply) => {\n      t.same(req.body.hello, null)\n      reply.code(200).send(req.body)\n    },\n    schema: {\n      body: {\n        type: 'object',\n        properties: {\n          hello: {\n            type: 'string',\n            format: 'email',\n            nullable: true\n          }\n        }\n      },\n      response: {\n        200: {\n          type: 'object',\n          properties: {\n            hello: {\n              type: 'string',\n              format: 'email',\n              nullable: true\n            }\n          }\n        }\n      }\n    }\n  })\n  fastify.inject({\n    method: 'POST',\n    url: '/',\n    body: {\n      hello: null\n    }\n  }, (err, res) => {\n    t.error(err)\n    t.same(res.payload.hello, null)\n  })\n})\n\ntest('object or null body', t => {\n  t.plan(5)\n\n  const fastify = Fastify()\n\n  fastify.route({\n    method: 'POST',\n    url: '/',\n    handler: (req, reply) => {\n      t.equal(req.body, undefined)\n      reply.code(200).send({ isUndefinedBody: req.body === undefined })\n    },\n    schema: {\n      body: {\n        type: ['object', 'null'],\n        properties: {\n          hello: {\n            type: 'string',\n            format: 'email'\n          }\n        }\n      },\n      response: {\n        200: {\n          type: 'object',\n          nullable: true,\n          properties: {\n            isUndefinedBody: {\n              type: 'boolean'\n            }\n          }\n        }\n      }\n    }\n  })\n\n  fastify.listen({ port: 0 }, (err) => {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    sget({\n      method: 'POST',\n      url: 'http://localhost:' + fastify.server.address().port\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.same(JSON.parse(body), { isUndefinedBody: true })\n    })\n  })\n})\n\ntest('nullable body', t => {\n  t.plan(5)\n\n  const fastify = Fastify()\n\n  fastify.route({\n    method: 'POST',\n    url: '/',\n    handler: (req, reply) => {\n      t.equal(req.body, undefined)\n      reply.code(200).send({ isUndefinedBody: req.body === undefined })\n    },\n    schema: {\n      body: {\n        type: 'object',\n        nullable: true,\n        properties: {\n          hello: {\n            type: 'string',\n            format: 'email'\n          }\n        }\n      },\n      response: {\n        200: {\n          type: 'object',\n          nullable: true,\n          properties: {\n            isUndefinedBody: {\n              type: 'boolean'\n            }\n          }\n        }\n      }\n    }\n  })\n\n  fastify.listen({ port: 0 }, (err) => {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    sget({\n      method: 'POST',\n      url: 'http://localhost:' + fastify.server.address().port\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.same(JSON.parse(body), { isUndefinedBody: true })\n    })\n  })\n})\n\ntest('Nullable body with 204', t => {\n  t.plan(5)\n\n  const fastify = Fastify()\n\n  fastify.route({\n    method: 'POST',\n    url: '/',\n    handler: (req, reply) => {\n      t.equal(req.body, undefined)\n      reply.code(204).send()\n    },\n    schema: {\n      body: {\n        type: 'object',\n        nullable: true,\n        properties: {\n          hello: {\n            type: 'string',\n            format: 'email'\n          }\n        }\n      }\n    }\n  })\n\n  fastify.listen({ port: 0 }, (err) => {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    sget({\n      method: 'POST',\n      url: 'http://localhost:' + fastify.server.address().port\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 204)\n      t.equal(body.length, 0)\n    })\n  })\n})\n/fastify.jsn\u0006'use strict'\n\nconst VERSION = '4.14.1'\n\nconst Avvio = require('avvio')\nconst http = require('http')\nlet lightMyRequest\n\nconst {\n  kAvvioBoot,\n  kChildren,\n  kServerBindings,\n  kBodyLimit,\n  kRoutePrefix,\n  kLogLevel,\n  kLogSerializers,\n  kHooks,\n  kSchemaController,\n  kRequestAcceptVersion,\n  kReplySerializerDefault,\n  kContentTypeParser,\n  kReply,\n  kRequest,\n  kFourOhFour,\n  kState,\n  kOptions,\n  kPluginNameChain,\n  kSchemaErrorFormatter,\n  kErrorHandler,\n  kKeepAliveConnections,\n  kFourOhFourContext\n} = require('./lib/symbols.js')\n\nconst { createServer, compileValidateHTTPVersion } = require('./lib/server')\nconst Reply = require('./lib/reply')\nconst Request = require('./lib/request')\nconst { supportedMethods } = require('./lib/httpMethods')\nconst decorator = require('./lib/decorate')\nconst ContentTypeParser = require('./lib/contentTypeParser')\nconst SchemaController = require('./lib/schema-controller')\nconst { Hooks, hookRunnerApplication, supportedHooks } = require('./lib/hooks')\nconst { createLogger } = require('./lib/logger')\nconst pluginUtils = require('./lib/pluginUtils')\nconst reqIdGenFactory = require('./lib/reqIdGenFactory')\nconst { buildRouting, validateBodyLimitOption } = require('./lib/route')\nconst build404 = require('./lib/fourOhFour')\nconst getSecuredInitialConfig = require('./lib/initialConfigValidation')\nconst override = require('./lib/pluginOverride')\nconst warning = require('./lib/warnings')\nconst noopSet = require('./lib/noop-set')\nconst {\n  appendStackTrace,\n  AVVIO_ERRORS_MAP,\n  ...errorCodes\n} = require('./lib/errors')\n\nconst { defaultInitOptions } = getSecuredInitialConfig\n\nconst {\n  FST_ERR_ASYNC_CONSTRAINT,\n  FST_ERR_BAD_URL,\n  FST_ERR_FORCE_CLOSE_CONNECTIONS_IDLE_NOT_AVAILABLE,\n  FST_ERR_OPTIONS_NOT_OBJ,\n  FST_ERR_QSP_NOT_FN,\n  FST_ERR_SCHEMA_CONTROLLER_BUCKET_OPT_NOT_FN,\n  FST_ERR_AJV_CUSTOM_OPTIONS_OPT_NOT_OBJ,\n  FST_ERR_AJV_CUSTOM_OPTIONS_OPT_NOT_ARR,\n  FST_ERR_VERSION_CONSTRAINT_NOT_STR,\n  FST_ERR_INSTANCE_ALREADY_LISTENING,\n  FST_ERR_REOPENED_CLOSE_SERVER,\n  FST_ERR_ROUTE_REWRITE_NOT_STR,\n  FST_ERR_SCHEMA_ERROR_FORMATTER_NOT_FN\n} = errorCodes\n\nconst { buildErrorHandler } = require('./lib/error-handler.js')\n\nconst onBadUrlContext = {\n  config: {\n  },\n  onSend: [],\n  onError: [],\n  [kFourOhFourContext]: null\n}\n\nfunction defaultBuildPrettyMeta (route) {\n  // return a shallow copy of route's sanitized context\n\n  const cleanKeys = {}\n  const allowedProps = ['errorHandler', 'logLevel', 'logSerializers']\n\n  allowedProps.concat(supportedHooks).forEach(k => {\n    cleanKeys[k] = route.store[k]\n  })\n\n  return Object.assign({}, cleanKeys)\n}\n\nfunction fastify (options) {\n  // Options validations\n  options = options || {}\n\n  if (typeof options !== 'object') {\n    throw new FST_ERR_OPTIONS_NOT_OBJ()\n  }\n\n  if (options.querystringParser && typeof options.querystringParser !== 'function') {\n    throw new FST_ERR_QSP_NOT_FN(typeof options.querystringParser)\n  }\n\n  if (options.schemaController && options.schemaController.bucket && typeof options.schemaController.bucket !== 'function') {\n    throw new FST_ERR_SCHEMA_CONTROLLER_BUCKET_OPT_NOT_FN(typeof options.schemaController.bucket)\n  }\n\n  validateBodyLimitOption(options.bodyLimit)\n\n  const requestIdHeader = (options.requestIdHeader === false) ? false : (options.requestIdHeader || defaultInitOptions.requestIdHeader)\n  const genReqId = reqIdGenFactory(requestIdHeader, options.genReqId)\n  const requestIdLogLabel = options.requestIdLogLabel || 'reqId'\n  const bodyLimit = options.bodyLimit || defaultInitOptions.bodyLimit\n  const disableRequestLogging = options.disableRequestLogging || false\n\n  const ajvOptions = Object.assign({\n    customOptions: {},\n    plugins: []\n  }, options.ajv)\n  const frameworkErrors = options.frameworkErrors\n\n  // Ajv options\n  if (!ajvOptions.customOptions || Object.prototype.toString.call(ajvOptions.customOptions) !== '[object Object]') {\n    throw new FST_ERR_AJV_CUSTOM_OPTIONS_OPT_NOT_OBJ(typeof ajvOptions.customOptions)\n  }\n  if (!ajvOptions.plugins || !Array.isArray(ajvOptions.plugins)) {\n    throw new FST_ERR_AJV_CUSTOM_OPTIONS_OPT_NOT_ARR(typeof ajvOptions.plugins)\n  }\n\n  // Instance Fastify components\n  const { logger, hasLogger } = createLogger(options)\n\n  // Update the options with the fixed values\n  options.connectionTimeout = options.connectionTimeout || defaultInitOptions.connectionTimeout\n  options.keepAliveTimeout = options.keepAliveTimeout || defaultInitOptions.keepAliveTimeout\n  options.maxRequestsPerSocket = options.maxRequestsPerSocket || defaultInitOptions.maxRequestsPerSocket\n  options.requestTimeout = options.requestTimeout || defaultInitOptions.requestTimeout\n  options.logger = logger\n  options.genReqId = genReqId\n  options.requestIdHeader = requestIdHeader\n  options.requestIdLogLabel = requestIdLogLabel\n  options.disableRequestLogging = disableRequestLogging\n  options.ajv = ajvOptions\n  options.clientErrorHandler = options.clientErrorHandler || defaultClientErrorHandler\n\n  const initialConfig = getSecuredInitialConfig(options)\n\n  // exposeHeadRoutes have its default set from the validator\n  options.exposeHeadRoutes = initialConfig.exposeHeadRoutes\n\n  let constraints = options.constraints\n  if (options.versioning) {\n    warning.emit('FSTDEP009')\n    constraints = {\n      ...constraints,\n      version: {\n        name: 'version',\n        mustMatchWhenDerived: true,\n        storage: options.versioning.storage,\n        deriveConstraint: options.versioning.deriveVersion,\n        validate (value) {\n          if (typeof value !== 'string') {\n            throw new FST_ERR_VERSION_CONSTRAINT_NOT_STR()\n          }\n        }\n      }\n    }\n  }\n\n  // Default router\n  const router = buildRouting({\n    config: {\n      defaultRoute,\n      onBadUrl,\n      constraints,\n      ignoreTrailingSlash: options.ignoreTrailingSlash || defaultInitOptions.ignoreTrailingSlash,\n      ignoreDuplicateSlashes: options.ignoreDuplicateSlashes || defaultInitOptions.ignoreDuplicateSlashes,\n      maxParamLength: options.maxParamLength || defaultInitOptions.maxParamLength,\n      caseSensitive: options.caseSensitive,\n      allowUnsafeRegex: options.allowUnsafeRegex || defaultInitOptions.allowUnsafeRegex,\n      buildPrettyMeta: defaultBuildPrettyMeta,\n      querystringParser: options.querystringParser\n    }\n  })\n\n  // 404 router, used for handling encapsulated 404 handlers\n  const fourOhFour = build404(options)\n\n  // HTTP server and its handler\n  const httpHandler = wrapRouting(router, options)\n\n  // we need to set this before calling createServer\n  options.http2SessionTimeout = initialConfig.http2SessionTimeout\n  const { server, listen } = createServer(options, httpHandler)\n\n  const serverHasCloseAllConnections = typeof server.closeAllConnections === 'function'\n  const serverHasCloseIdleConnections = typeof server.closeIdleConnections === 'function'\n\n  let forceCloseConnections = options.forceCloseConnections\n  if (forceCloseConnections === 'idle' && !serverHasCloseIdleConnections) {\n    throw new FST_ERR_FORCE_CLOSE_CONNECTIONS_IDLE_NOT_AVAILABLE()\n  } else if (typeof forceCloseConnections !== 'boolean') {\n    /* istanbul ignore next: only one branch can be valid in a given Node.js version */\n    forceCloseConnections = serverHasCloseIdleConnections ? 'idle' : false\n  }\n\n  const keepAliveConnections = !serverHasCloseAllConnections && forceCloseConnections === true ? new Set() : noopSet()\n\n  const setupResponseListeners = Reply.setupResponseListeners\n  const schemaController = SchemaController.buildSchemaController(null, options.schemaController)\n\n  // Public API\n  const fastify = {\n    // Fastify internals\n    [kState]: {\n      listening: false,\n      closing: false,\n      started: false\n    },\n    [kKeepAliveConnections]: keepAliveConnections,\n    [kOptions]: options,\n    [kChildren]: [],\n    [kServerBindings]: [],\n    [kBodyLimit]: bodyLimit,\n    [kRoutePrefix]: '',\n    [kLogLevel]: '',\n    [kLogSerializers]: null,\n    [kHooks]: new Hooks(),\n    [kSchemaController]: schemaController,\n    [kSchemaErrorFormatter]: null,\n    [kErrorHandler]: buildErrorHandler(),\n    [kReplySerializerDefault]: null,\n    [kContentTypeParser]: new ContentTypeParser(\n      bodyLimit,\n      (options.onProtoPoisoning || defaultInitOptions.onProtoPoisoning),\n      (options.onConstructorPoisoning || defaultInitOptions.onConstructorPoisoning)\n    ),\n    [kReply]: Reply.buildReply(Reply),\n    [kRequest]: Request.buildRequest(Request, options.trustProxy),\n    [kFourOhFour]: fourOhFour,\n    [pluginUtils.registeredPlugins]: [],\n    [kPluginNameChain]: ['fastify'],\n    [kAvvioBoot]: null,\n    // routing method\n    routing: httpHandler,\n    getDefaultRoute: router.getDefaultRoute.bind(router),\n    setDefaultRoute: router.setDefaultRoute.bind(router),\n    // routes shorthand methods\n    delete: function _delete (url, options, handler) {\n      return router.prepareRoute.call(this, { method: 'DELETE', url, options, handler })\n    },\n    get: function _get (url, options, handler) {\n      return router.prepareRoute.call(this, { method: 'GET', url, options, handler })\n    },\n    head: function _head (url, options, handler) {\n      return router.prepareRoute.call(this, { method: 'HEAD', url, options, handler })\n    },\n    patch: function _patch (url, options, handler) {\n      return router.prepareRoute.call(this, { method: 'PATCH', url, options, handler })\n    },\n    post: function _post (url, options, handler) {\n      return router.prepareRoute.call(this, { method: 'POST', url, options, handler })\n    },\n    put: function _put (url, options, handler) {\n      return router.prepareRoute.call(this, { method: 'PUT', url, options, handler })\n    },\n    options: function _options (url, options, handler) {\n      return router.prepareRoute.call(this, { method: 'OPTIONS', url, options, handler })\n    },\n    all: function _all (url, options, handler) {\n      return router.prepareRoute.call(this, { method: supportedMethods, url, options, handler })\n    },\n    // extended route\n    route: function _route (options) {\n      // we need the fastify object that we are producing so we apply a lazy loading of the function,\n      // otherwise we should bind it after the declaration\n      return router.route.call(this, { options })\n    },\n    hasRoute: function _route (options) {\n      return router.hasRoute.call(this, { options })\n    },\n    // expose logger instance\n    log: logger,\n    // type provider\n    withTypeProvider,\n    // hooks\n    addHook,\n    // schemas\n    addSchema,\n    getSchema: schemaController.getSchema.bind(schemaController),\n    getSchemas: schemaController.getSchemas.bind(schemaController),\n    setValidatorCompiler,\n    setSerializerCompiler,\n    setSchemaController,\n    setReplySerializer,\n    setSchemaErrorFormatter,\n    // custom parsers\n    addContentTypeParser: ContentTypeParser.helpers.addContentTypeParser,\n    hasContentTypeParser: ContentTypeParser.helpers.hasContentTypeParser,\n    getDefaultJsonParser: ContentTypeParser.defaultParsers.getDefaultJsonParser,\n    defaultTextParser: ContentTypeParser.defaultParsers.defaultTextParser,\n    removeContentTypeParser: ContentTypeParser.helpers.removeContentTypeParser,\n    removeAllContentTypeParsers: ContentTypeParser.helpers.removeAllContentTypeParsers,\n    // Fastify architecture methods (initialized by Avvio)\n    register: null,\n    after: null,\n    ready: null,\n    onClose: null,\n    close: null,\n    printPlugins: null,\n    hasPlugin: function (name) {\n      return this[kPluginNameChain].includes(name)\n    },\n    // http server\n    listen,\n    server,\n    addresses: function () {\n      /* istanbul ignore next */\n      const binded = this[kServerBindings].map(b => b.address())\n      binded.push(this.server.address())\n      return binded.filter(adr => adr)\n    },\n    // extend fastify objects\n    decorate: decorator.add,\n    hasDecorator: decorator.exist,\n    decorateReply: decorator.decorateReply,\n    decorateRequest: decorator.decorateRequest,\n    hasRequestDecorator: decorator.existRequest,\n    hasReplyDecorator: decorator.existReply,\n    // fake http injection\n    inject,\n    // pretty print of the registered routes\n    printRoutes,\n    // custom error handling\n    setNotFoundHandler,\n    setErrorHandler,\n    // Set fastify initial configuration options read-only object\n    initialConfig,\n    // constraint strategies\n    addConstraintStrategy: router.addConstraintStrategy.bind(router),\n    hasConstraintStrategy: router.hasConstraintStrategy.bind(router)\n  }\n\n  Object.defineProperties(fastify, {\n    pluginName: {\n      configurable: true,\n      get () {\n        if (this[kPluginNameChain].length > 1) {\n          return this[kPluginNameChain].join(' -> ')\n        }\n        return this[kPluginNameChain][0]\n      }\n    },\n    prefix: {\n      configurable: true,\n      get () { return this[kRoutePrefix] }\n    },\n    validatorCompiler: {\n      configurable: true,\n      get () { return this[kSchemaController].getValidatorCompiler() }\n    },\n    serializerCompiler: {\n      configurable: true,\n      get () { return this[kSchemaController].getSerializerCompiler() }\n    },\n    version: {\n      configurable: true,\n      get () { return VERSION }\n    },\n    errorHandler: {\n      configurable: true,\n      get () {\n        return this[kErrorHandler].func\n      }\n    }\n  })\n\n  if (options.schemaErrorFormatter) {\n    validateSchemaErrorFormatter(options.schemaErrorFormatter)\n    fastify[kSchemaErrorFormatter] = options.schemaErrorFormatter.bind(fastify)\n  }\n\n  // Install and configure Avvio\n  // Avvio will update the following Fastify methods:\n  // - register\n  // - after\n  // - ready\n  // - onClose\n  // - close\n\n  const avvioPluginTimeout = Number(options.pluginTimeout)\n  const avvio = Avvio(fastify, {\n    autostart: false,\n    timeout: isNaN(avvioPluginTimeout) === false ? avvioPluginTimeout : defaultInitOptions.pluginTimeout,\n    expose: {\n      use: 'register'\n    }\n  })\n  // Override to allow the plugin encapsulation\n  avvio.override = override\n  avvio.on('start', () => (fastify[kState].started = true))\n  fastify[kAvvioBoot] = fastify.ready // the avvio ready function\n  fastify.ready = ready // overwrite the avvio ready function\n  fastify.printPlugins = avvio.prettyPrint.bind(avvio)\n\n  // cache the closing value, since we are checking it in an hot path\n  avvio.once('preReady', () => {\n    fastify.onClose((instance, done) => {\n      fastify[kState].closing = true\n      router.closeRoutes()\n      if (fastify[kState].listening) {\n        // No new TCP connections are accepted\n        instance.server.close(done)\n\n        /* istanbul ignore next: Cannot test this without Node.js core support */\n        if (forceCloseConnections === 'idle') {\n          // Not needed in Node 19\n          instance.server.closeIdleConnections()\n        /* istanbul ignore next: Cannot test this without Node.js core support */\n        } else if (serverHasCloseAllConnections && forceCloseConnections) {\n          instance.server.closeAllConnections()\n        } else if (forceCloseConnections === true) {\n          for (const conn of fastify[kKeepAliveConnections]) {\n            // We must invoke the destroy method instead of merely unreffing\n            // the sockets. If we only unref, then the callback passed to\n            // `fastify.close` will never be invoked; nor will any of the\n            // registered `onClose` hooks.\n            conn.destroy()\n            fastify[kKeepAliveConnections].delete(conn)\n          }\n        }\n      } else {\n        done(null)\n      }\n    })\n  })\n\n  // Set the default 404 handler\n  fastify.setNotFoundHandler()\n  fourOhFour.arrange404(fastify)\n\n  router.setup(options, {\n    avvio,\n    fourOhFour,\n    logger,\n    hasLogger,\n    setupResponseListeners,\n    throwIfAlreadyStarted,\n    validateHTTPVersion: compileValidateHTTPVersion(options),\n    keepAliveConnections\n  })\n\n  // Delay configuring clientError handler so that it can access fastify state.\n  server.on('clientError', options.clientErrorHandler.bind(fastify))\n\n  try {\n    const dc = require('diagnostics_channel')\n    const initChannel = dc.channel('fastify.initialization')\n    if (initChannel.hasSubscribers) {\n      initChannel.publish({ fastify })\n    }\n  } catch (e) {\n    // This only happens if `diagnostics_channel` isn't available, i.e. earlier\n    // versions of Node.js. In that event, we don't care, so ignore the error.\n  }\n\n  return fastify\n\n  function throwIfAlreadyStarted (msg) {\n    if (fastify[kState].started) throw new FST_ERR_INSTANCE_ALREADY_LISTENING(msg)\n  }\n\n  // HTTP injection handling\n  // If the server is not ready yet, this\n  // utility will automatically force it.\n  function inject (opts, cb) {\n    // lightMyRequest is dynamically loaded as it seems very expensive\n    // because of Ajv\n    if (lightMyRequest === undefined) {\n      lightMyRequest = require('light-my-request')\n    }\n\n    if (fastify[kState].started) {\n      if (fastify[kState].closing) {\n        // Force to return an error\n        const error = new FST_ERR_REOPENED_CLOSE_SERVER()\n        if (cb) {\n          cb(error)\n          return\n        } else {\n          return Promise.reject(error)\n        }\n      }\n      return lightMyRequest(httpHandler, opts, cb)\n    }\n\n    if (cb) {\n      this.ready(err => {\n        if (err) cb(err, null)\n        else lightMyRequest(httpHandler, opts, cb)\n      })\n    } else {\n      return lightMyRequest((req, res) => {\n        this.ready(function (err) {\n          if (err) {\n            res.emit('error', err)\n            return\n          }\n          httpHandler(req, res)\n        })\n      }, opts)\n    }\n  }\n\n  function ready (cb) {\n    let resolveReady\n    let rejectReady\n\n    // run the hooks after returning the promise\n    process.nextTick(runHooks)\n\n    if (!cb) {\n      return new Promise(function (resolve, reject) {\n        resolveReady = resolve\n        rejectReady = reject\n      })\n    }\n\n    function runHooks () {\n      // start loading\n      fastify[kAvvioBoot]((err, done) => {\n        if (err || fastify[kState].started) {\n          manageErr(err)\n        } else {\n          hookRunnerApplication('onReady', fastify[kAvvioBoot], fastify, manageErr)\n        }\n        done()\n      })\n    }\n\n    function manageErr (err) {\n      // If the error comes out of Avvio's Error codes\n      // We create a make and preserve the previous error\n      // as cause\n      err = err != null && AVVIO_ERRORS_MAP[err.code] != null\n        ? appendStackTrace(err, new AVVIO_ERRORS_MAP[err.code](err.message))\n        : err\n\n      if (cb) {\n        if (err) {\n          cb(err)\n        } else {\n          cb(undefined, fastify)\n        }\n      } else {\n        if (err) {\n          return rejectReady(err)\n        }\n        resolveReady(fastify)\n      }\n    }\n  }\n\n  // Used exclusively in TypeScript contexts to enable auto type inference from JSON schema.\n  function withTypeProvider () {\n    return this\n  }\n\n  // wrapper that we expose to the user for hooks handling\n  function addHook (name, fn) {\n    throwIfAlreadyStarted('Cannot call \"addHook\"!')\n\n    if (fn == null) {\n      throw new errorCodes.FST_ERR_HOOK_INVALID_HANDLER(name, fn)\n    }\n\n    if (name === 'onSend' || name === 'preSerialization' || name === 'onError' || name === 'preParsing') {\n      if (fn.constructor.name === 'AsyncFunction' && fn.length === 4) {\n        throw new errorCodes.FST_ERR_HOOK_INVALID_ASYNC_HANDLER()\n      }\n    } else if (name === 'onReady') {\n      if (fn.constructor.name === 'AsyncFunction' && fn.length !== 0) {\n        throw new errorCodes.FST_ERR_HOOK_INVALID_ASYNC_HANDLER()\n      }\n    } else if (name === 'onRequestAbort') {\n      if (fn.constructor.name === 'AsyncFunction' && fn.length !== 1) {\n        throw new errorCodes.FST_ERR_HOOK_INVALID_ASYNC_HANDLER()\n      }\n    } else {\n      if (fn.constructor.name === 'AsyncFunction' && fn.length === 3) {\n        throw new errorCodes.FST_ERR_HOOK_INVALID_ASYNC_HANDLER()\n      }\n    }\n\n    if (name === 'onClose') {\n      this.onClose(fn)\n    } else if (name === 'onReady') {\n      this[kHooks].add(name, fn)\n    } else if (name === 'onRoute') {\n      this[kHooks].validate(name, fn)\n      this[kHooks].add(name, fn)\n    } else {\n      this.after((err, done) => {\n        _addHook.call(this, name, fn)\n        done(err)\n      })\n    }\n    return this\n\n    function _addHook (name, fn) {\n      this[kHooks].add(name, fn)\n      this[kChildren].forEach(child => _addHook.call(child, name, fn))\n    }\n  }\n\n  // wrapper that we expose to the user for schemas handling\n  function addSchema (schema) {\n    throwIfAlreadyStarted('Cannot call \"addSchema\"!')\n    this[kSchemaController].add(schema)\n    this[kChildren].forEach(child => child.addSchema(schema))\n    return this\n  }\n\n  function defaultClientErrorHandler (err, socket) {\n    // In case of a connection reset, the socket has been destroyed and there is nothing that needs to be done.\n    // https://nodejs.org/api/http.html#http_event_clienterror\n    if (err.code === 'ECONNRESET' || socket.destroyed) {\n      return\n    }\n\n    let body, errorCode, errorStatus, errorLabel\n\n    if (err.code === 'ERR_HTTP_REQUEST_TIMEOUT') {\n      errorCode = '408'\n      errorStatus = http.STATUS_CODES[errorCode]\n      body = `{\"error\":\"${errorStatus}\",\"message\":\"Client Timeout\",\"statusCode\":408}`\n      errorLabel = 'timeout'\n    } else {\n      errorCode = '400'\n      errorStatus = http.STATUS_CODES[errorCode]\n      body = `{\"error\":\"${errorStatus}\",\"message\":\"Client Error\",\"statusCode\":400}`\n      errorLabel = 'error'\n    }\n\n    // Most devs do not know what to do with this error.\n    // In the vast majority of cases, it's a network error and/or some\n    // config issue on the load balancer side.\n    this.log.trace({ err }, `client ${errorLabel}`)\n    // Copying standard node behaviour\n    // https://github.com/nodejs/node/blob/6ca23d7846cb47e84fd344543e394e50938540be/lib/_http_server.js#L666\n\n    // If the socket is not writable, there is no reason to try to send data.\n    if (socket.writable) {\n      socket.write(`HTTP/1.1 ${errorCode} ${errorStatus}\\r\\nContent-Length: ${body.length}\\r\\nContent-Type: application/json\\r\\n\\r\\n${body}`)\n    }\n    socket.destroy(err)\n  }\n\n  // If the router does not match any route, every request will land here\n  // req and res are Node.js core objects\n  function defaultRoute (req, res) {\n    if (req.headers['accept-version'] !== undefined) {\n      // we remove the accept-version header for performance result\n      // because we do not want to go through the constraint checking\n      // the usage of symbol here to prevent any collision on custom header name\n      req.headers[kRequestAcceptVersion] = req.headers['accept-version']\n      req.headers['accept-version'] = undefined\n    }\n    fourOhFour.router.lookup(req, res)\n  }\n\n  function onBadUrl (path, req, res) {\n    if (frameworkErrors) {\n      const id = genReqId(req)\n      const childLogger = logger.child({ reqId: id })\n\n      childLogger.info({ req }, 'incoming request')\n\n      const request = new Request(id, null, req, null, childLogger, onBadUrlContext)\n      const reply = new Reply(res, request, childLogger)\n      return frameworkErrors(new FST_ERR_BAD_URL(path), request, reply)\n    }\n    const body = `{\"error\":\"Bad Request\",\"message\":\"'${path}' is not a valid url component\",\"statusCode\":400}`\n    res.writeHead(400, {\n      'Content-Type': 'application/json',\n      'Content-Length': body.length\n    })\n    res.end(body)\n  }\n\n  function buildAsyncConstraintCallback (isAsync, req, res) {\n    if (isAsync === false) return undefined\n    return function onAsyncConstraintError (err) {\n      if (err) {\n        if (frameworkErrors) {\n          const id = genReqId(req)\n          const childLogger = logger.child({ reqId: id })\n\n          childLogger.info({ req }, 'incoming request')\n\n          const request = new Request(id, null, req, null, childLogger, onBadUrlContext)\n          const reply = new Reply(res, request, childLogger)\n          return frameworkErrors(new FST_ERR_ASYNC_CONSTRAINT(), request, reply)\n        }\n        const body = '{\"error\":\"Internal Server Error\",\"message\":\"Unexpected error from async constraint\",\"statusCode\":500}'\n        res.writeHead(500, {\n          'Content-Type': 'application/json',\n          'Content-Length': body.length\n        })\n        res.end(body)\n      }\n    }\n  }\n\n  function setNotFoundHandler (opts, handler) {\n    throwIfAlreadyStarted('Cannot call \"setNotFoundHandler\"!')\n\n    fourOhFour.setNotFoundHandler.call(this, opts, handler, avvio, router.routeHandler)\n    return this\n  }\n\n  function setValidatorCompiler (validatorCompiler) {\n    throwIfAlreadyStarted('Cannot call \"setValidatorCompiler\"!')\n    this[kSchemaController].setValidatorCompiler(validatorCompiler)\n    return this\n  }\n\n  function setSchemaErrorFormatter (errorFormatter) {\n    throwIfAlreadyStarted('Cannot call \"setSchemaErrorFormatter\"!')\n    validateSchemaErrorFormatter(errorFormatter)\n    this[kSchemaErrorFormatter] = errorFormatter.bind(this)\n    return this\n  }\n\n  function setSerializerCompiler (serializerCompiler) {\n    throwIfAlreadyStarted('Cannot call \"setSerializerCompiler\"!')\n    this[kSchemaController].setSerializerCompiler(serializerCompiler)\n    return this\n  }\n\n  function setSchemaController (schemaControllerOpts) {\n    throwIfAlreadyStarted('Cannot call \"setSchemaController\"!')\n    const old = this[kSchemaController]\n    const schemaController = SchemaController.buildSchemaController(old, Object.assign({}, old.opts, schemaControllerOpts))\n    this[kSchemaController] = schemaController\n    this.getSchema = schemaController.getSchema.bind(schemaController)\n    this.getSchemas = schemaController.getSchemas.bind(schemaController)\n    return this\n  }\n\n  function setReplySerializer (replySerializer) {\n    throwIfAlreadyStarted('Cannot call \"setReplySerializer\"!')\n\n    this[kReplySerializerDefault] = replySerializer\n    return this\n  }\n\n  // wrapper that we expose to the user for configure the custom error handler\n  function setErrorHandler (func) {\n    throwIfAlreadyStarted('Cannot call \"setErrorHandler\"!')\n\n    this[kErrorHandler] = buildErrorHandler(this[kErrorHandler], func.bind(this))\n    return this\n  }\n\n  function printRoutes (opts = {}) {\n    // includeHooks:true - shortcut to include all supported hooks exported by fastify.Hooks\n    opts.includeMeta = opts.includeHooks ? opts.includeMeta ? supportedHooks.concat(opts.includeMeta) : supportedHooks : opts.includeMeta\n    return router.printRoutes(opts)\n  }\n\n  function wrapRouting (router, { rewriteUrl, logger }) {\n    let isAsync\n    return function preRouting (req, res) {\n      // only call isAsyncConstraint once\n      if (isAsync === undefined) isAsync = router.isAsyncConstraint()\n      if (rewriteUrl) {\n        const originalUrl = req.url\n        const url = rewriteUrl(req)\n        if (originalUrl !== url) {\n          logger.debug({ originalUrl, url }, 'rewrite url')\n          if (typeof url === 'string') {\n            req.url = url\n          } else {\n            const err = new FST_ERR_ROUTE_REWRITE_NOT_STR(req.url, typeof url)\n            req.destroy(err)\n          }\n        }\n      }\n      router.routing(req, res, buildAsyncConstraintCallback(isAsync, req, res))\n    }\n  }\n}\n\nfastify.errorCodes = errorCodes\n\nfunction validateSchemaErrorFormatter (schemaErrorFormatter) {\n  if (typeof schemaErrorFormatter !== 'function') {\n    throw new FST_ERR_SCHEMA_ERROR_FORMATTER_NOT_FN(typeof schemaErrorFormatter)\n  } else if (schemaErrorFormatter.constructor.name === 'AsyncFunction') {\n    throw new FST_ERR_SCHEMA_ERROR_FORMATTER_NOT_FN('AsyncFunction')\n  }\n}\n\n/**\n * These export configurations enable JS and TS developers\n * to consumer fastify in whatever way best suits their needs.\n * Some examples of supported import syntax includes:\n * - `const fastify = require('fastify')`\n * - `const { fastify } = require('fastify')`\n * - `import * as Fastify from 'fastify'`\n * - `import { fastify, TSC_definition } from 'fastify'`\n * - `import fastify from 'fastify'`\n * - `import fastify, { TSC_definition } from 'fastify'`\n */\nmodule.exports = fastify\nmodule.exports.fastify = fastify\nmodule.exports.default = fastify\n(/test/http2/secure-with-fallback.test.js\n'use strict'\n\nconst t = require('tap')\nconst test = t.test\nconst Fastify = require('../..')\nconst h2url = require('h2url')\nconst sget = require('simple-get').concat\nconst msg = { hello: 'world' }\n\nconst { buildCertificate } = require('../build-certificate')\nt.before(buildCertificate)\n\ntest('secure with fallback', (t) => {\n  t.plan(7)\n\n  let fastify\n  try {\n    fastify = Fastify({\n      http2: true,\n      https: {\n        allowHTTP1: true,\n        key: global.context.key,\n        cert: global.context.cert\n      }\n    })\n    t.pass('Key/cert successfully loaded')\n  } catch (e) {\n    t.fail('Key/cert loading failed', e)\n  }\n\n  fastify.get('/', function (req, reply) {\n    reply.code(200).send(msg)\n  })\n\n  fastify.post('/', function (req, reply) {\n    reply.code(200).send(req.body)\n  })\n\n  fastify.get('/error', async function (req, reply) {\n    throw new Error('kaboom')\n  })\n\n  fastify.listen({ port: 0 }, err => {\n    t.error(err)\n    t.teardown(() => { fastify.close() })\n\n    t.test('https get error', async (t) => {\n      t.plan(1)\n\n      const url = `https://localhost:${fastify.server.address().port}/error`\n      const res = await h2url.concat({ url })\n\n      t.equal(res.headers[':status'], 500)\n    })\n\n    t.test('https post', async (t) => {\n      t.plan(2)\n\n      const url = `https://localhost:${fastify.server.address().port}`\n      const res = await h2url.concat({\n        url,\n        method: 'POST',\n        body: JSON.stringify({ hello: 'http2' }),\n        headers: {\n          'content-type': 'application/json'\n        }\n      })\n\n      t.equal(res.headers[':status'], 200)\n      t.same(JSON.parse(res.body), { hello: 'http2' })\n    })\n\n    t.test('https get request', async (t) => {\n      t.plan(3)\n\n      const url = `https://localhost:${fastify.server.address().port}`\n      const res = await h2url.concat({ url })\n\n      t.equal(res.headers[':status'], 200)\n      t.equal(res.headers['content-length'], '' + JSON.stringify(msg).length)\n      t.same(JSON.parse(res.body), msg)\n    })\n\n    t.test('http1 get request', t => {\n      t.plan(4)\n      sget({\n        method: 'GET',\n        url: 'https://localhost:' + fastify.server.address().port,\n        rejectUnauthorized: false\n      }, (err, response, body) => {\n        t.error(err)\n        t.equal(response.statusCode, 200)\n        t.equal(response.headers['content-length'], '' + body.length)\n        t.same(JSON.parse(body), { hello: 'world' })\n      })\n    })\n\n    t.test('http1 get error', (t) => {\n      t.plan(2)\n      sget({\n        method: 'GET',\n        url: 'https://localhost:' + fastify.server.address().port + '/error',\n        rejectUnauthorized: false\n      }, (err, response, body) => {\n        t.error(err)\n        t.equal(response.statusCode, 500)\n      })\n    })\n  })\n})\n'/test/http2/unknown-http-method.test.js\u0003\u0004'use strict'\n\nconst t = require('tap')\nconst test = t.test\nconst Fastify = require('../..')\nconst h2url = require('h2url')\nconst msg = { hello: 'world' }\n\nconst fastify = Fastify({\n  http2: true\n})\n\nfastify.get('/', function (req, reply) {\n  reply.code(200).send(msg)\n})\n\nfastify.listen({ port: 0 }, err => {\n  t.error(err)\n  t.teardown(() => { fastify.close() })\n\n  test('http UNKNOWN_METHOD request', async (t) => {\n    t.plan(2)\n\n    const url = `http://localhost:${fastify.server.address().port}`\n    const res = await h2url.concat({ url, method: 'UNKNOWN_METHOD' })\n\n    t.equal(res.headers[':status'], 404)\n    t.same(JSON.parse(res.body), {\n      statusCode: 404,\n      code: 'FST_ERR_NOT_FOUND',\n      error: 'Not Found',\n      message: 'Not Found'\n    })\n  })\n})\n/test/esm/named-exports.mjs\u0001\u0016import t from 'tap'\nimport { fastify } from '../../fastify.js'\n\nt.test('named exports support', async t => {\n  const app = fastify()\n\n  app.register(import('./plugin.mjs'), { foo: 'bar' })\n  app.register(import('./other.mjs'))\n\n  await app.ready()\n\n  t.equal(app.foo, 'bar')\n})\n#/test/types/serverFactory.test-d.ts\u0004>import fastify, { FastifyServerFactory } from '../../fastify'\nimport * as http from 'http'\nimport { expectType } from 'tsd'\n\n// Custom Server\ntype CustomType = void;\ninterface CustomIncomingMessage extends http.IncomingMessage {\n  fakeMethod?: () => CustomType;\n}\n\ninterface CustomServerResponse extends http.ServerResponse {\n  fakeMethod?: () => CustomType;\n}\n\nconst serverFactory: FastifyServerFactory<http.Server> = (handler, opts) => {\n  const server = http.createServer((req: CustomIncomingMessage, res: CustomServerResponse) => {\n    req.fakeMethod = () => {}\n    res.fakeMethod = () => {}\n\n    handler(req, res)\n  })\n\n  return server\n}\n\n// The request and reply objects should have the fakeMethods available (even though they may be undefined)\nconst customServer = fastify<http.Server, CustomIncomingMessage, CustomServerResponse>({ serverFactory })\n\ncustomServer.get('/', function (request, reply) {\n  if (request.raw.fakeMethod) {\n    expectType<CustomType>(request.raw.fakeMethod())\n  }\n\n  if (reply.raw.fakeMethod) {\n    expectType<CustomType>(reply.raw.fakeMethod())\n  }\n})\n(/test/http2/missing-http2-module.test.js\u0002 'use strict'\n\nconst t = require('tap')\nconst test = t.test\nconst proxyquire = require('proxyquire')\nconst server = proxyquire('../../lib/server', { http2: null })\nconst Fastify = proxyquire('../..', { './lib/server.js': server })\n\ntest('should throw when http2 module cannot be found', t => {\n  t.plan(2)\n  try {\n    Fastify({ http2: true })\n    t.fail('fastify did not throw expected error')\n  } catch (err) {\n    t.equal(err.code, 'FST_ERR_HTTP2_INVALID_VERSION')\n    t.equal(err.message, 'HTTP2 is available only from node >= 8.8.1')\n  }\n})\n/lib/warnings.js\b='use strict'\n\nconst warning = require('process-warning')()\n\n/**\n * Deprecation codes:\n *   - FSTDEP005\n */\n\nwarning.create('FastifyDeprecation', 'FSTDEP005', 'You are accessing the deprecated \"request.connection\" property. Use \"request.socket\" instead.')\n\nwarning.create('FastifyDeprecation', 'FSTDEP006', 'You are decorating Request/Reply with a reference type. This reference is shared amongst all requests. Use onRequest hook instead. Property: %s')\n\nwarning.create('FastifyDeprecation', 'FSTDEP007', 'You are trying to set a HEAD route using \"exposeHeadRoute\" route flag when a sibling route is already set. See documentation for more info.')\n\nwarning.create('FastifyDeprecation', 'FSTDEP008', 'You are using route constraints via the route { version: \"...\" } option, use { constraints: { version: \"...\" } } option instead.')\n\nwarning.create('FastifyDeprecation', 'FSTDEP009', 'You are using a custom route versioning strategy via the server { versioning: \"...\" } option, use { constraints: { version: \"...\" } } option instead.')\n\nwarning.create('FastifyDeprecation', 'FSTDEP010', 'Modifying the \"reply.sent\" property is deprecated. Use the \"reply.hijack()\" method instead.')\n\nwarning.create('FastifyDeprecation', 'FSTDEP011', 'Variadic listen method is deprecated. Please use \".listen(optionsObject)\" instead. The variadic signature will be removed in `fastify@5`.')\n\nwarning.create('FastifyDeprecation', 'FSTDEP012', 'Request#context property access is deprecated. Please use \"Request#routeConfig\" or \"Request#routeSchema\" instead for accessing Route settings. The \"Request#context\" will be removed in `fastify@5`.')\n\nwarning.create('FastifyDeprecation', 'FSTDEP013', 'Direct return of \"trailers\" function is deprecated. Please use \"callback\" or \"async-await\" for return value. The support of direct return will removed in `fastify@5`.')\n\nwarning.create('FastifyDeprecation', 'FSTDEP014', 'You are trying to set/access the default route. This property is deprecated. Please, use setNotFoundHandler if you want to custom a 404 handler or the wildcard (*) to match all routes.')\n\nmodule.exports = warning\n/test/inject.test.js%'use strict'\n\nconst t = require('tap')\nconst test = t.test\nconst Stream = require('stream')\nconst util = require('util')\nconst Fastify = require('..')\nconst FormData = require('form-data')\n\ntest('inject should exist', t => {\n  t.plan(2)\n  const fastify = Fastify()\n  t.ok(fastify.inject)\n  t.equal(typeof fastify.inject, 'function')\n})\n\ntest('should wait for the ready event', t => {\n  t.plan(4)\n  const fastify = Fastify()\n  const payload = { hello: 'world' }\n\n  fastify.register((instance, opts, done) => {\n    instance.get('/', (req, reply) => {\n      reply.send(payload)\n    })\n\n    setTimeout(done, 500)\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/'\n  }, (err, res) => {\n    t.error(err)\n    t.same(payload, JSON.parse(res.payload))\n    t.equal(res.statusCode, 200)\n    t.equal(res.headers['content-length'], '17')\n  })\n})\n\ntest('inject get request', t => {\n  t.plan(4)\n  const fastify = Fastify()\n  const payload = { hello: 'world' }\n\n  fastify.get('/', (req, reply) => {\n    reply.send(payload)\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/'\n  }, (err, res) => {\n    t.error(err)\n    t.same(payload, JSON.parse(res.payload))\n    t.equal(res.statusCode, 200)\n    t.equal(res.headers['content-length'], '17')\n  })\n})\n\ntest('inject get request - code check', t => {\n  t.plan(4)\n  const fastify = Fastify()\n  const payload = { hello: 'world' }\n\n  fastify.get('/', (req, reply) => {\n    reply.code(201).send(payload)\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/'\n  }, (err, res) => {\n    t.error(err)\n    t.same(payload, JSON.parse(res.payload))\n    t.equal(res.statusCode, 201)\n    t.equal(res.headers['content-length'], '17')\n  })\n})\n\ntest('inject get request - headers check', t => {\n  t.plan(4)\n  const fastify = Fastify()\n\n  fastify.get('/', (req, reply) => {\n    reply.header('content-type', 'text/plain').send('')\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/'\n  }, (err, res) => {\n    t.error(err)\n    t.equal('', res.payload)\n    t.equal(res.headers['content-type'], 'text/plain')\n    t.equal(res.headers['content-length'], '0')\n  })\n})\n\ntest('inject get request - querystring', t => {\n  t.plan(4)\n  const fastify = Fastify()\n\n  fastify.get('/', (req, reply) => {\n    reply.send(req.query)\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/?hello=world'\n  }, (err, res) => {\n    t.error(err)\n    t.same({ hello: 'world' }, JSON.parse(res.payload))\n    t.equal(res.statusCode, 200)\n    t.equal(res.headers['content-length'], '17')\n  })\n})\n\ntest('inject get request - params', t => {\n  t.plan(4)\n  const fastify = Fastify()\n\n  fastify.get('/:hello', (req, reply) => {\n    reply.send(req.params)\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/world'\n  }, (err, res) => {\n    t.error(err)\n    t.same({ hello: 'world' }, JSON.parse(res.payload))\n    t.equal(res.statusCode, 200)\n    t.equal(res.headers['content-length'], '17')\n  })\n})\n\ntest('inject get request - wildcard', t => {\n  t.plan(4)\n  const fastify = Fastify()\n\n  fastify.get('/test/*', (req, reply) => {\n    reply.send(req.params)\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/test/wildcard'\n  }, (err, res) => {\n    t.error(err)\n    t.same({ '*': 'wildcard' }, JSON.parse(res.payload))\n    t.equal(res.statusCode, 200)\n    t.equal(res.headers['content-length'], '16')\n  })\n})\n\ntest('inject get request - headers', t => {\n  t.plan(4)\n  const fastify = Fastify()\n\n  fastify.get('/', (req, reply) => {\n    reply.send(req.headers)\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/',\n    headers: { hello: 'world' }\n  }, (err, res) => {\n    t.error(err)\n    t.equal('world', JSON.parse(res.payload).hello)\n    t.equal(res.statusCode, 200)\n    t.equal(res.headers['content-length'], '69')\n  })\n})\n\ntest('inject post request', t => {\n  t.plan(4)\n  const fastify = Fastify()\n  const payload = { hello: 'world' }\n\n  fastify.post('/', (req, reply) => {\n    reply.send(req.body)\n  })\n\n  fastify.inject({\n    method: 'POST',\n    url: '/',\n    payload\n  }, (err, res) => {\n    t.error(err)\n    t.same(payload, JSON.parse(res.payload))\n    t.equal(res.statusCode, 200)\n    t.equal(res.headers['content-length'], '17')\n  })\n})\n\ntest('inject post request - send stream', t => {\n  t.plan(4)\n  const fastify = Fastify()\n\n  fastify.post('/', (req, reply) => {\n    reply.send(req.body)\n  })\n\n  fastify.inject({\n    method: 'POST',\n    url: '/',\n    headers: { 'content-type': 'application/json' },\n    payload: getStream()\n  }, (err, res) => {\n    t.error(err)\n    t.same('{\"hello\":\"world\"}', res.payload)\n    t.equal(res.statusCode, 200)\n    t.equal(res.headers['content-length'], '17')\n  })\n})\n\ntest('inject get request - reply stream', t => {\n  t.plan(3)\n  const fastify = Fastify()\n\n  fastify.get('/', (req, reply) => {\n    reply.send(getStream())\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/'\n  }, (err, res) => {\n    t.error(err)\n    t.same('{\"hello\":\"world\"}', res.payload)\n    t.equal(res.statusCode, 200)\n  })\n})\n\ntest('inject promisify - waiting for ready event', t => {\n  t.plan(1)\n  const fastify = Fastify()\n  const payload = { hello: 'world' }\n\n  fastify.get('/', (req, reply) => {\n    reply.send(payload)\n  })\n\n  const injectParams = {\n    method: 'GET',\n    url: '/'\n  }\n  fastify.inject(injectParams)\n    .then(res => {\n      t.equal(res.statusCode, 200)\n    })\n    .catch(t.fail)\n})\n\ntest('inject promisify - after the ready event', t => {\n  t.plan(2)\n  const fastify = Fastify()\n  const payload = { hello: 'world' }\n\n  fastify.get('/', (req, reply) => {\n    reply.send(payload)\n  })\n\n  fastify.ready(err => {\n    t.error(err)\n\n    const injectParams = {\n      method: 'GET',\n      url: '/'\n    }\n    fastify.inject(injectParams)\n      .then(res => {\n        t.equal(res.statusCode, 200)\n      })\n      .catch(t.fail)\n  })\n})\n\ntest('inject promisify - when the server is up', t => {\n  t.plan(2)\n  const fastify = Fastify()\n  const payload = { hello: 'world' }\n\n  fastify.get('/', (req, reply) => {\n    reply.send(payload)\n  })\n\n  fastify.ready(err => {\n    t.error(err)\n\n    // setTimeout because the ready event don't set \"started\" flag\n    // in this iteration of the 'event loop'\n    setTimeout(() => {\n      const injectParams = {\n        method: 'GET',\n        url: '/'\n      }\n      fastify.inject(injectParams)\n        .then(res => {\n          t.equal(res.statusCode, 200)\n        })\n        .catch(t.fail)\n    }, 10)\n  })\n})\n\ntest('should reject in error case', t => {\n  t.plan(1)\n  const fastify = Fastify()\n\n  const error = new Error('DOOM!')\n  fastify.register((instance, opts, done) => {\n    setTimeout(done, 500, error)\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/'\n  })\n    .catch(e => {\n      t.equal(e, error)\n    })\n})\n\ntest('inject a multipart request using form-body', t => {\n  t.plan(2)\n  const fastify = Fastify()\n\n  fastify.addContentTypeParser('*', function (req, payload, done) {\n    let body = ''\n    payload.on('data', d => {\n      body += d\n    })\n    payload.on('end', () => {\n      done(null, body)\n    })\n  })\n  fastify.post('/', (req, reply) => {\n    reply.send(req.body)\n  })\n\n  const form = new FormData()\n  form.append('my_field', 'my value')\n\n  fastify.inject({\n    method: 'POST',\n    url: '/',\n    payload: form\n  })\n    .then(response => {\n      t.equal(response.statusCode, 200)\n      t.ok(/Content-Disposition: form-data; name=\"my_field\"/.test(response.payload))\n    })\n})\n\n// https://github.com/hapijs/shot/blob/master/test/index.js#L836\nfunction getStream () {\n  const Read = function () {\n    Stream.Readable.call(this)\n  }\n  util.inherits(Read, Stream.Readable)\n  const word = '{\"hello\":\"world\"}'\n  let i = 0\n\n  Read.prototype._read = function (size) {\n    this.push(word[i] ? word[i++] : null)\n  }\n\n  return new Read()\n}\n\ntest('should error the promise if ready errors', t => {\n  t.plan(3)\n  const fastify = Fastify()\n\n  fastify.register((instance, opts) => {\n    return Promise.reject(new Error('kaboom'))\n  }).after(function () {\n    t.pass('after is called')\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/'\n  }).then(() => {\n    t.fail('this should not be called')\n  }).catch(err => {\n    t.ok(err)\n    t.equal(err.message, 'kaboom')\n  })\n})\n\ntest('should throw error if callback specified and if ready errors', t => {\n  t.plan(2)\n  const fastify = Fastify()\n  const error = new Error('kaboom')\n\n  fastify.register((instance, opts) => {\n    return Promise.reject(error)\n  })\n\n  fastify.inject({\n    method: 'GET',\n    url: '/'\n  }, err => {\n    t.ok(err)\n    t.equal(err, error)\n  })\n})\n\ntest('should support builder-style injection with ready app', async (t) => {\n  t.plan(3)\n  const fastify = Fastify()\n  const payload = { hello: 'world' }\n\n  fastify.get('/', (req, reply) => {\n    reply.send(payload)\n  })\n\n  await fastify.ready()\n  const res = await fastify.inject().get('/').end()\n  t.same(payload, JSON.parse(res.payload))\n  t.equal(res.statusCode, 200)\n  t.equal(res.headers['content-length'], '17')\n})\n\ntest('should support builder-style injection with non-ready app', async (t) => {\n  t.plan(3)\n  const fastify = Fastify()\n  const payload = { hello: 'world' }\n\n  fastify.get('/', (req, reply) => {\n    reply.send(payload)\n  })\n\n  const res = await fastify.inject().get('/').end()\n  t.same(payload, JSON.parse(res.payload))\n  t.equal(res.statusCode, 200)\n  t.equal(res.headers['content-length'], '17')\n})\n\ntest('should handle errors in builder-style injection correctly', async (t) => {\n  t.plan(2)\n  const fastify = Fastify()\n  fastify.register((instance, opts, done) => {\n    done(new Error('Kaboom'))\n  })\n\n  try {\n    await fastify.inject().get('/')\n  } catch (err) {\n    t.ok(err)\n    t.equal(err.message, 'Kaboom')\n  }\n})\n/test/delete.test.js\u001b{'use strict'\n\nconst t = require('tap')\nconst test = t.test\nconst sget = require('simple-get').concat\nconst fastify = require('..')()\n\nconst schema = {\n  schema: {\n    response: {\n      '2xx': {\n        type: 'object',\n        properties: {\n          hello: {\n            type: 'string'\n          }\n        }\n      }\n    }\n  }\n}\n\nconst querySchema = {\n  schema: {\n    querystring: {\n      type: 'object',\n      properties: {\n        hello: {\n          type: 'integer'\n        }\n      }\n    }\n  }\n}\n\nconst paramsSchema = {\n  schema: {\n    params: {\n      type: 'object',\n      properties: {\n        foo: {\n          type: 'string'\n        },\n        test: {\n          type: 'integer'\n        }\n      }\n    }\n  }\n}\n\nconst headersSchema = {\n  schema: {\n    headers: {\n      type: 'object',\n      properties: {\n        'x-test': {\n          type: 'number'\n        }\n      }\n    }\n  }\n}\n\nconst bodySchema = {\n  schema: {\n    body: {\n      type: 'object',\n      properties: {\n        hello: {\n          type: 'string'\n        }\n      }\n    },\n    response: {\n      '2xx': {\n        type: 'object',\n        properties: {\n          hello: {\n            type: 'string'\n          }\n        }\n      }\n    }\n  }\n}\n\ntest('shorthand - delete', t => {\n  t.plan(1)\n  try {\n    fastify.delete('/', schema, function (req, reply) {\n      reply.code(200).send({ hello: 'world' })\n    })\n    t.pass()\n  } catch (e) {\n    t.fail()\n  }\n})\n\ntest('shorthand - delete params', t => {\n  t.plan(1)\n  try {\n    fastify.delete('/params/:foo/:test', paramsSchema, function (req, reply) {\n      reply.code(200).send(req.params)\n    })\n    t.pass()\n  } catch (e) {\n    t.fail()\n  }\n})\n\ntest('shorthand - delete, querystring schema', t => {\n  t.plan(1)\n  try {\n    fastify.delete('/query', querySchema, function (req, reply) {\n      reply.send(req.query)\n    })\n    t.pass()\n  } catch (e) {\n    t.fail()\n  }\n})\n\ntest('shorthand - get, headers schema', t => {\n  t.plan(1)\n  try {\n    fastify.delete('/headers', headersSchema, function (req, reply) {\n      reply.code(200).send(req.headers)\n    })\n    t.pass()\n  } catch (e) {\n    t.fail()\n  }\n})\n\ntest('missing schema - delete', t => {\n  t.plan(1)\n  try {\n    fastify.delete('/missing', function (req, reply) {\n      reply.code(200).send({ hello: 'world' })\n    })\n    t.pass()\n  } catch (e) {\n    t.fail()\n  }\n})\n\ntest('body - delete', t => {\n  t.plan(1)\n  try {\n    fastify.delete('/body', bodySchema, function (req, reply) {\n      reply.send(req.body)\n    })\n    t.pass()\n  } catch (e) {\n    t.fail()\n  }\n})\n\nfastify.listen({ port: 0 }, err => {\n  t.error(err)\n  t.teardown(() => { fastify.close() })\n\n  test('shorthand - request delete', t => {\n    t.plan(4)\n    sget({\n      method: 'DELETE',\n      url: 'http://localhost:' + fastify.server.address().port\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(response.headers['content-length'], '' + body.length)\n      t.same(JSON.parse(body), { hello: 'world' })\n    })\n  })\n\n  test('shorthand - request delete params schema', t => {\n    t.plan(4)\n    sget({\n      method: 'DELETE',\n      url: 'http://localhost:' + fastify.server.address().port + '/params/world/123'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(response.headers['content-length'], '' + body.length)\n      t.same(JSON.parse(body), { foo: 'world', test: 123 })\n    })\n  })\n\n  test('shorthand - request delete params schema error', t => {\n    t.plan(3)\n    sget({\n      method: 'DELETE',\n      url: 'http://localhost:' + fastify.server.address().port + '/params/world/string'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 400)\n      t.same(JSON.parse(body), {\n        error: 'Bad Request',\n        message: 'params/test must be integer',\n        statusCode: 400\n      })\n    })\n  })\n\n  test('shorthand - request delete headers schema', t => {\n    t.plan(4)\n    sget({\n      method: 'DELETE',\n      headers: {\n        'x-test': 1\n      },\n      url: 'http://localhost:' + fastify.server.address().port + '/headers'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(response.headers['content-length'], '' + body.length)\n      t.equal(JSON.parse(body)['x-test'], 1)\n    })\n  })\n\n  test('shorthand - request delete headers schema error', t => {\n    t.plan(3)\n    sget({\n      method: 'DELETE',\n      headers: {\n        'x-test': 'abc'\n      },\n      url: 'http://localhost:' + fastify.server.address().port + '/headers'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 400)\n      t.same(JSON.parse(body), {\n        error: 'Bad Request',\n        message: 'headers/x-test must be number',\n        statusCode: 400\n      })\n    })\n  })\n\n  test('shorthand - request delete querystring schema', t => {\n    t.plan(4)\n    sget({\n      method: 'DELETE',\n      url: 'http://localhost:' + fastify.server.address().port + '/query?hello=123'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(response.headers['content-length'], '' + body.length)\n      t.same(JSON.parse(body), { hello: 123 })\n    })\n  })\n\n  test('shorthand - request delete querystring schema error', t => {\n    t.plan(3)\n    sget({\n      method: 'DELETE',\n      url: 'http://localhost:' + fastify.server.address().port + '/query?hello=world'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 400)\n      t.same(JSON.parse(body), {\n        error: 'Bad Request',\n        message: 'querystring/hello must be integer',\n        statusCode: 400\n      })\n    })\n  })\n\n  test('shorthand - request delete missing schema', t => {\n    t.plan(4)\n    sget({\n      method: 'DELETE',\n      url: 'http://localhost:' + fastify.server.address().port + '/missing'\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.equal(response.headers['content-length'], '' + body.length)\n      t.same(JSON.parse(body), { hello: 'world' })\n    })\n  })\n\n  test('shorthand - delete with body', t => {\n    t.plan(3)\n    sget({\n      method: 'DELETE',\n      url: 'http://localhost:' + fastify.server.address().port + '/body',\n      body: {\n        hello: 'world'\n      },\n      json: true\n    }, (err, response, body) => {\n      t.error(err)\n      t.equal(response.statusCode, 200)\n      t.same(body, { hello: 'world' })\n    })\n  })\n})\n\n// https://github.com/fastify/fastify/issues/936\ntest('shorthand - delete with application/json Content-Type header and without body', t => {\n  t.plan(4)\n  const fastify = require('..')()\n  fastify.delete('/', {}, (req, reply) => {\n    t.equal(req.body, undefined)\n    reply.send(req.body)\n  })\n  fastify.inject({\n    method: 'DELETE',\n    url: '/',\n    headers: { 'Content-Type': 'application/json' },\n    body: null\n  }, (err, response) => {\n    t.error(err)\n    t.equal(response.statusCode, 200)\n    t.same(response.payload.toString(), '')\n  })\n})\n/types/logger.d.ts\n%import { FastifyError } from '@fastify/error'\nimport { RouteGenericInterface } from './route'\nimport { FastifyRequest } from './request'\nimport { FastifyReply } from './reply'\nimport { RawServerBase, RawServerDefault, RawRequestDefaultExpression, RawReplyDefaultExpression, ContextConfigDefault } from './utils'\nimport { FastifyTypeProvider, FastifyTypeProviderDefault } from './type-provider'\nimport { FastifySchema } from './schema'\n\nimport pino from 'pino'\n\n/**\n * Standard Fastify logging function\n */\nexport type FastifyLogFn = pino.LogFn\n\nexport type LogLevel = pino.LevelWithSilent\n\nexport type Bindings = pino.Bindings\n\nexport type ChildLoggerOptions = pino.ChildLoggerOptions\n\nexport type FastifyBaseLogger = pino.BaseLogger & {\n  child(bindings: Bindings, options?: ChildLoggerOptions): FastifyBaseLogger\n}\n\n// TODO delete FastifyBaseLogger in the next major release. It seems that it is enough to have only FastifyBaseLogger.\n/**\n * @deprecated Use FastifyBaseLogger instead\n */\nexport type FastifyLoggerInstance = FastifyBaseLogger\n\nexport interface FastifyLoggerStreamDestination {\n  write(msg: string): void;\n}\n\nexport type PinoLoggerOptions = pino.LoggerOptions\n\n/**\n * Fastify Custom Logger options.\n */\nexport interface FastifyLoggerOptions<\n  RawServer extends RawServerBase = RawServerDefault,\n  RawRequest extends FastifyRequest<RouteGenericInterface, RawServer, RawRequestDefaultExpression<RawServer>, FastifySchema, FastifyTypeProvider> = FastifyRequest<RouteGenericInterface, RawServer, RawRequestDefaultExpression<RawServer>, FastifySchema, FastifyTypeProviderDefault>,\n  RawReply extends FastifyReply<RawServer, RawRequestDefaultExpression<RawServer>, RawReplyDefaultExpression<RawServer>, RouteGenericInterface, ContextConfigDefault, FastifySchema, FastifyTypeProvider> = FastifyReply<RawServer, RawRequestDefaultExpression<RawServer>, RawReplyDefaultExpression<RawServer>, RouteGenericInterface, ContextConfigDefault, FastifySchema, FastifyTypeProviderDefault>,\n> {\n  serializers?: {\n    req?: (req: RawRequest) => {\n      method?: string;\n      url?: string;\n      version?: string;\n      hostname?: string;\n      remoteAddress?: string;\n      remotePort?: number;\n      [key: string]: unknown;\n    };\n    err?: (err: FastifyError) => {\n      type: string;\n      message: string;\n      stack: string;\n      [key: string]: unknown;\n    };\n    res?: (res: RawReply) => {\n      statusCode?: string | number;\n      [key: string]: unknown;\n    };\n  };\n  level?: string;\n  file?: string;\n  genReqId?: (req: RawRequest) => string;\n  stream?: FastifyLoggerStreamDestination;\n}\n/types/serverFactory.d.ts\u0003import { RawServerBase, RawServerDefault, RawReplyDefaultExpression, RawRequestDefaultExpression } from './utils'\nimport * as http from 'http'\nimport * as https from 'https'\nimport * as http2 from 'http2'\n\nexport type FastifyServerFactoryHandler<\n  RawServer extends RawServerBase = RawServerDefault,\n  RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,\n  RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>\n> =\nRawServer extends http.Server | https.Server ?\n  (request: http.IncomingMessage & RawRequest, response: http.ServerResponse & RawReply) => void :\n  (request: http2.Http2ServerRequest & RawRequest, response: http2.Http2ServerResponse & RawReply) => void\n\nexport interface FastifyServerFactory<\n  RawServer extends RawServerBase = RawServerDefault\n> {\n  (handler: FastifyServerFactoryHandler<RawServer>, opts: Record<string, unknown>): RawServer;\n}\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/ZmFzdHFAMS45LjA=",
    "content": "/example.js'use strict'\n\nvar queue = require('./')(worker, 1)\n\nqueue.push(42, function (err, result) {\n  if (err) { throw err }\n  console.log('the result is', result)\n})\n\nfunction worker (arg, cb) {\n  cb(null, 42 * 2)\n}\n/README.md\u0016u# fastq\n\n![ci][ci-url]\n[![npm version][npm-badge]][npm-url]\n[![Dependency Status][david-badge]][david-url]\n\nFast, in memory work queue. `fastq` is API compatible with\n[`async.queue`](https://github.com/caolan/async#queueworker-concurrency)\n\nBenchmarks (1 million tasks):\n\n* setImmediate: 812ms\n* fastq: 854ms\n* async.queue: 1298ms\n* neoAsync.queue: 1249ms\n\nObtained on node 12.16.1, on a dedicated server.\n\nIf you need zero-overhead series function call, check out\n[fastseries](http://npm.im/fastseries). For zero-overhead parallel\nfunction call, check out [fastparallel](http://npm.im/fastparallel).\n\n[![js-standard-style](https://raw.githubusercontent.com/feross/standard/master/badge.png)](https://github.com/feross/standard)\n\n  * <a href=\"#install\">Installation</a>\n  * <a href=\"#usage\">Usage</a>\n  * <a href=\"#api\">API</a>\n  * <a href=\"#license\">Licence &amp; copyright</a>\n\n## Install\n\n`npm i fastq --save`\n\n## Usage\n\n```js\n'use strict'\n\nvar queue = require('fastq')(worker, 1)\n\nqueue.push(42, function (err, result) {\n  if (err) { throw err }\n  console.log('the result is', result)\n})\n\nfunction worker (arg, cb) {\n  cb(null, 42 * 2)\n}\n```\n\n### Setting this\n\n```js\n'use strict'\n\nvar that = { hello: 'world' }\nvar queue = require('fastq')(that, worker, 1)\n\nqueue.push(42, function (err, result) {\n  if (err) { throw err }\n  console.log(this)\n  console.log('the result is', result)\n})\n\nfunction worker (arg, cb) {\n  console.log(this)\n  cb(null, 42 * 2)\n}\n```\n\n## API\n\n* <a href=\"#fastqueue\"><code>fastqueue()</code></a>\n* <a href=\"#push\"><code>queue#<b>push()</b></code></a>\n* <a href=\"#unshift\"><code>queue#<b>unshift()</b></code></a>\n* <a href=\"#pause\"><code>queue#<b>pause()</b></code></a>\n* <a href=\"#resume\"><code>queue#<b>resume()</b></code></a>\n* <a href=\"#idle\"><code>queue#<b>idle()</b></code></a>\n* <a href=\"#length\"><code>queue#<b>length()</b></code></a>\n* <a href=\"#getQueue\"><code>queue#<b>getQueue()</b></code></a>\n* <a href=\"#kill\"><code>queue#<b>kill()</b></code></a>\n* <a href=\"#killAndDrain\"><code>queue#<b>killAndDrain()</b></code></a>\n* <a href=\"#error\"><code>queue#<b>error()</b></code></a>\n* <a href=\"#concurrency\"><code>queue#<b>concurrency</b></code></a>\n* <a href=\"#drain\"><code>queue#<b>drain</b></code></a>\n* <a href=\"#empty\"><code>queue#<b>empty</b></code></a>\n* <a href=\"#saturated\"><code>queue#<b>saturated</b></code></a>\n\n-------------------------------------------------------\n<a name=\"fastqueue\"></a>\n### fastqueue([that], worker, concurrency)\n\nCreates a new queue.\n\nArguments:\n\n* `that`, optional context of the `worker` function.\n* `worker`, worker function, it would be called with `that` as `this`,\n  if that is specified.\n* `concurrency`, number of concurrent tasks that could be executed in\n  parallel.\n\n-------------------------------------------------------\n<a name=\"push\"></a>\n### queue.push(task, done)\n\nAdd a task at the end of the queue. `done(err, result)` will be called\nwhen the task was processed.\n\n-------------------------------------------------------\n<a name=\"unshift\"></a>\n### queue.unshift(task, done)\n\nAdd a task at the beginning of the queue. `done(err, result)` will be called\nwhen the task was processed.\n\n-------------------------------------------------------\n<a name=\"pause\"></a>\n### queue.pause()\n\nPause the processing of tasks. Currently worked tasks are not\nstopped.\n\n-------------------------------------------------------\n<a name=\"resume\"></a>\n### queue.resume()\n\nResume the processing of tasks.\n\n-------------------------------------------------------\n<a name=\"idle\"></a>\n### queue.idle()\n\nReturns `false` if there are tasks being processed or waiting to be processed.\n`true` otherwise.\n\n-------------------------------------------------------\n<a name=\"length\"></a>\n### queue.length()\n\nReturns the number of tasks waiting to be processed (in the queue).\n\n-------------------------------------------------------\n<a name=\"getQueue\"></a>\n### queue.getQueue()\n\nReturns all the tasks be processed (in the queue). Returns empty array when there are no tasks\n\n-------------------------------------------------------\n<a name=\"kill\"></a>\n### queue.kill()\n\nRemoves all tasks waiting to be processed, and reset `drain` to an empty\nfunction.\n\n-------------------------------------------------------\n<a name=\"killAndDrain\"></a>\n### queue.killAndDrain()\n\nSame than `kill` but the `drain` function will be called before reset to empty.\n\n-------------------------------------------------------\n<a name=\"error\"></a>\n### queue.error(handler)\n\nSet a global error handler. `handler(err, task)` will be called\nwhen any of the tasks return an error.\n\n-------------------------------------------------------\n<a name=\"concurrency\"></a>\n### queue.concurrency\n\nProperty that returns the number of concurrent tasks that could be executed in\nparallel. It can be altered at runtime.\n\n-------------------------------------------------------\n<a name=\"drain\"></a>\n### queue.drain\n\nFunction that will be called when the last\nitem from the queue has been processed by a worker.\nIt can be altered at runtime.\n\n-------------------------------------------------------\n<a name=\"empty\"></a>\n### queue.empty\n\nFunction that will be called when the last\nitem from the queue has been assigned to a worker.\nIt can be altered at runtime.\n\n-------------------------------------------------------\n<a name=\"saturated\"></a>\n### queue.saturated\n\nFunction that will be called when the queue hits the concurrency\nlimit.\nIt can be altered at runtime.\n\n## License\n\nISC\n\n[ci-url]: https://github.com/mcollina/fastq/workflows/ci/badge.svg\n[npm-badge]: https://badge.fury.io/js/fastq.svg\n[npm-url]: https://badge.fury.io/js/fastq\n[david-badge]: https://david-dm.org/mcollina/fastq.svg\n[david-url]: https://david-dm.org/mcollina/fastq\n/bench.js\u0003'use strict'\n\nvar max = 1000000\nvar fastqueue = require('./')(worker, 1)\nvar async = require('async')\nvar neo = require('neo-async')\nvar asyncqueue = async.queue(worker, 1)\nvar neoqueue = neo.queue(worker, 1)\n\nfunction bench (func, done) {\n  var key = max + '*' + func.name\n  var count = -1\n\n  console.time(key)\n  end()\n\n  function end () {\n    if (++count < max) {\n      func(end)\n    } else {\n      console.timeEnd(key)\n      if (done) {\n        done()\n      }\n    }\n  }\n}\n\nfunction benchFastQ (done) {\n  fastqueue.push(42, done)\n}\n\nfunction benchAsyncQueue (done) {\n  asyncqueue.push(42, done)\n}\n\nfunction benchNeoQueue (done) {\n  neoqueue.push(42, done)\n}\n\nfunction worker (arg, cb) {\n  setImmediate(cb)\n}\n\nfunction benchSetImmediate (cb) {\n  worker(42, cb)\n}\n\nfunction runBench (done) {\n  async.eachSeries([\n    benchSetImmediate,\n    benchFastQ,\n    benchNeoQueue,\n    benchAsyncQueue\n  ], bench, done)\n}\n\nrunBench(runBench)\n/test/tsconfig.jsonĚ{\n  \"compilerOptions\": {\n    \"target\": \"es6\",\n    \"module\": \"commonjs\",\n    \"noEmit\": true,\n    \"strict\": true\n  },\n  \"files\": [\n    \"./example.ts\"\n  ]\n}\n/index.d.ts\u0003rdeclare function fastq<C, T = any, R = any>(context: C, worker: fastq.worker<C, T, R>, concurrency: number): fastq.queue<T, R>\ndeclare function fastq<C, T = any, R = any>(worker: fastq.worker<C, T, R>, concurrency: number): fastq.queue<T, R>\n\ndeclare namespace fastq {\n  type worker<C, T = any, R = any> = (this: C, task: T, cb: fastq.done<R>) => void\n  type done<R = any> = (err: Error | null, result?: R) => void\n  type errorHandler<T = any> = (err: Error, task: T) => void\n\n  interface queue<T = any, R = any> {\n    push(task: T, done: done<R>): void\n    unshift(task: T, done: done<R>): void\n    pause(): any\n    resume(): any\n    idle(): boolean\n    length(): number\n    getQueue(): T[]\n    kill(): any\n    killAndDrain(): any\n    error(handler: errorHandler): void\n    concurrency: number\n    drain(): any\n    empty: () => void\n    saturated: () => void\n  }\n}\n\nexport = fastq\n/.github/workflows/ci.yml\u0003name: ci\n\non: [push, pull_request]\n\njobs:\n  legacy:\n    runs-on: ubuntu-latest\n\n    strategy:\n      matrix:\n        node-version: ['0.10', '0.12', 4.x, 6.x, 8.x]\n\n    steps:\n      - uses: actions/checkout@v2\n\n      - name: Use Node.js\n        uses: actions/setup-node@v1\n        with:\n          node-version: ${{ matrix.node-version }}\n\n      - name: Install\n        run: |\n          npm install --production && npm install tape\n\n      - name: Run tests\n        run: |\n          npm run legacy\n\n  test:\n    runs-on: ubuntu-latest\n\n    strategy:\n      matrix:\n        node-version: [10.x, 12.x, 13.x, 14.x, 15.x]\n\n    steps:\n      - uses: actions/checkout@v2\n\n      - name: Use Node.js\n        uses: actions/setup-node@v1\n        with:\n          node-version: ${{ matrix.node-version }}\n\n      - name: Install\n        run: |\n          npm install\n\n      - name: Run tests\n        run: |\n          npm run test\n/LICENSE\u0002Copyright (c) 2015-2020, Matteo Collina <matteo.collina@gmail.com>\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted, provided that the above\ncopyright notice and this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\nWITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\nANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\nACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\nOR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n/queue.js\u000e'use strict'\n\nvar reusify = require('reusify')\n\nfunction fastqueue (context, worker, concurrency) {\n  if (typeof context === 'function') {\n    concurrency = worker\n    worker = context\n    context = null\n  }\n\n  var cache = reusify(Task)\n  var queueHead = null\n  var queueTail = null\n  var _running = 0\n  var errorHandler = null\n\n  var self = {\n    push: push,\n    drain: noop,\n    saturated: noop,\n    pause: pause,\n    paused: false,\n    concurrency: concurrency,\n    running: running,\n    resume: resume,\n    idle: idle,\n    length: length,\n    getQueue: getQueue,\n    unshift: unshift,\n    empty: noop,\n    kill: kill,\n    killAndDrain: killAndDrain,\n    error: error\n  }\n\n  return self\n\n  function running () {\n    return _running\n  }\n\n  function pause () {\n    self.paused = true\n  }\n\n  function length () {\n    var current = queueHead\n    var counter = 0\n\n    while (current) {\n      current = current.next\n      counter++\n    }\n\n    return counter\n  }\n\n  function getQueue () {\n    var current = queueHead\n    var tasks = []\n\n    while (current) {\n      tasks.push(current.value)\n      current = current.next\n    }\n\n    return tasks\n  }\n\n  function resume () {\n    if (!self.paused) return\n    self.paused = false\n    for (var i = 0; i < self.concurrency; i++) {\n      _running++\n      release()\n    }\n  }\n\n  function idle () {\n    return _running === 0 && self.length() === 0\n  }\n\n  function push (value, done) {\n    var current = cache.get()\n\n    current.context = context\n    current.release = release\n    current.value = value\n    current.callback = done || noop\n    current.errorHandler = errorHandler\n\n    if (_running === self.concurrency || self.paused) {\n      if (queueTail) {\n        queueTail.next = current\n        queueTail = current\n      } else {\n        queueHead = current\n        queueTail = current\n        self.saturated()\n      }\n    } else {\n      _running++\n      worker.call(context, current.value, current.worked)\n    }\n  }\n\n  function unshift (value, done) {\n    var current = cache.get()\n\n    current.context = context\n    current.release = release\n    current.value = value\n    current.callback = done || noop\n\n    if (_running === self.concurrency || self.paused) {\n      if (queueHead) {\n        current.next = queueHead\n        queueHead = current\n      } else {\n        queueHead = current\n        queueTail = current\n        self.saturated()\n      }\n    } else {\n      _running++\n      worker.call(context, current.value, current.worked)\n    }\n  }\n\n  function release (holder) {\n    if (holder) {\n      cache.release(holder)\n    }\n    var next = queueHead\n    if (next) {\n      if (!self.paused) {\n        if (queueTail === queueHead) {\n          queueTail = null\n        }\n        queueHead = next.next\n        next.next = null\n        worker.call(context, next.value, next.worked)\n        if (queueTail === null) {\n          self.empty()\n        }\n      } else {\n        _running--\n      }\n    } else if (--_running === 0) {\n      self.drain()\n    }\n  }\n\n  function kill () {\n    queueHead = null\n    queueTail = null\n    self.drain = noop\n  }\n\n  function killAndDrain () {\n    queueHead = null\n    queueTail = null\n    self.drain()\n    self.drain = noop\n  }\n\n  function error (handler) {\n    errorHandler = handler\n  }\n}\n\nfunction noop () {}\n\nfunction Task () {\n  this.value = null\n  this.callback = noop\n  this.next = null\n  this.release = noop\n  this.context = null\n  this.errorHandler = null\n\n  var self = this\n\n  this.worked = function worked (err, result) {\n    var callback = self.callback\n    var errorHandler = self.errorHandler\n    var val = self.value\n    self.value = null\n    self.callback = noop\n    if (self.errorHandler) {\n      errorHandler(err, val)\n    }\n    callback.call(self.context, err, result)\n    self.release(self)\n  }\n}\n\nmodule.exports = fastqueue\n/test/example.ts\u0004iimport * as fastq from '../'\n\n// Basic example\n\nconst queue = fastq(worker, 1)\n\nqueue.push('world', (err, result) => {\n  if (err) throw err\n  console.log('the result is', result)\n})\n\nqueue.concurrency\n\nqueue.drain()\n\nqueue.empty = () => undefined\n\nconsole.log('the queue tasks are', queue.getQueue())\n\nqueue.idle()\n\nqueue.kill()\n\nqueue.killAndDrain()\n\nqueue.length\n\nqueue.pause()\n\nqueue.resume()\n\nqueue.saturated = () => undefined\n\nqueue.unshift('world', (err, result) => {\n  if (err) throw err\n  console.log('the result is', result)\n})\n\nfunction worker(task: any, cb: fastq.done) {\n  cb(null, 'hello ' + task)\n}\n\n// Generics example\n\ninterface GenericsContext {\n  base: number;\n}\n\nconst genericsQueue = fastq<GenericsContext, number, string>({ base: 6 }, genericsWorker, 1)\n\ngenericsQueue.push(7, (err, done) => {\n  if (err) throw err\n  console.log('the result is', done)\n})\n\ngenericsQueue.unshift(7, (err, done) => {\n  if (err) throw err\n  console.log('the result is', done)\n})\n\nfunction genericsWorker(this: GenericsContext, task: number, cb: fastq.done<string>) {\n  cb(null, 'the meaning of life is ' + (this.base * task))\n}\n/package.json\u0005\u0002{\n  \"name\": \"fastq\",\n  \"version\": \"1.9.0\",\n  \"description\": \"Fast, in memory work queue\",\n  \"main\": \"queue.js\",\n  \"scripts\": {\n    \"lint\": \"standard --verbose | snazzy\",\n    \"unit\": \"nyc --lines 100 --branches 100 --functions 100 --check-coverage --reporter=text tape test/test.js\",\n    \"coverage\": \"nyc --reporter=html --reporter=cobertura --reporter=text tape test/test.js\",\n    \"test:report\": \"npm run lint && npm run unit:report\",\n    \"test\": \"npm run lint && npm run unit && npm run typescript\",\n    \"typescript\": \"tsc --project ./test/tsconfig.json\",\n    \"legacy\": \"tape test/test.js\"\n  },\n  \"pre-commit\": [\n    \"test\"\n  ],\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/mcollina/fastq.git\"\n  },\n  \"keywords\": [\n    \"fast\",\n    \"queue\",\n    \"async\",\n    \"worker\"\n  ],\n  \"author\": \"Matteo Collina <hello@matteocollina.com>\",\n  \"license\": \"ISC\",\n  \"bugs\": {\n    \"url\": \"https://github.com/mcollina/fastq/issues\"\n  },\n  \"homepage\": \"https://github.com/mcollina/fastq#readme\",\n  \"devDependencies\": {\n    \"async\": \"^3.1.0\",\n    \"neo-async\": \"^2.6.1\",\n    \"nyc\": \"^15.0.0\",\n    \"pre-commit\": \"^1.2.2\",\n    \"snazzy\": \"^8.0.0\",\n    \"standard\": \"^15.0.0\",\n    \"tape\": \"^5.0.0\",\n    \"typescript\": \"^4.0.2\"\n  },\n  \"dependencies\": {\n    \"reusify\": \"^1.0.4\"\n  }\n}\n/test/test.js,'use strict'\n\nvar test = require('tape')\nvar buildQueue = require('../')\n\ntest('worker execution', function (t) {\n  t.plan(3)\n\n  var queue = buildQueue(worker, 1)\n\n  queue.push(42, function (err, result) {\n    t.error(err, 'no error')\n    t.equal(result, true, 'result matches')\n  })\n\n  function worker (arg, cb) {\n    t.equal(arg, 42)\n    cb(null, true)\n  }\n})\n\ntest('limit', function (t) {\n  t.plan(4)\n\n  var expected = [10, 0]\n  var queue = buildQueue(worker, 1)\n\n  queue.push(10, result)\n  queue.push(0, result)\n\n  function result (err, arg) {\n    t.error(err, 'no error')\n    t.equal(arg, expected.shift(), 'the result matches')\n  }\n\n  function worker (arg, cb) {\n    setTimeout(cb, arg, null, arg)\n  }\n})\n\ntest('multiple executions', function (t) {\n  t.plan(15)\n\n  var queue = buildQueue(worker, 1)\n  var toExec = [1, 2, 3, 4, 5]\n  var count = 0\n\n  toExec.forEach(function (task) {\n    queue.push(task, done)\n  })\n\n  function done (err, result) {\n    t.error(err, 'no error')\n    t.equal(result, toExec[count - 1], 'the result matches')\n  }\n\n  function worker (arg, cb) {\n    t.equal(arg, toExec[count], 'arg matches')\n    count++\n    setImmediate(cb, null, arg)\n  }\n})\n\ntest('multiple executions, one after another', function (t) {\n  t.plan(15)\n\n  var queue = buildQueue(worker, 1)\n  var toExec = [1, 2, 3, 4, 5]\n  var count = 0\n\n  queue.push(toExec[0], done)\n\n  function done (err, result) {\n    t.error(err, 'no error')\n    t.equal(result, toExec[count - 1], 'the result matches')\n    if (count < toExec.length) {\n      queue.push(toExec[count], done)\n    }\n  }\n\n  function worker (arg, cb) {\n    t.equal(arg, toExec[count], 'arg matches')\n    count++\n    setImmediate(cb, null, arg)\n  }\n})\n\ntest('set this', function (t) {\n  t.plan(3)\n\n  var that = {}\n  var queue = buildQueue(that, worker, 1)\n\n  queue.push(42, function (err, result) {\n    t.error(err, 'no error')\n    t.equal(this, that, 'this matches')\n  })\n\n  function worker (arg, cb) {\n    t.equal(this, that, 'this matches')\n    cb(null, true)\n  }\n})\n\ntest('drain', function (t) {\n  t.plan(4)\n\n  var queue = buildQueue(worker, 1)\n  var worked = false\n\n  queue.push(42, function (err, result) {\n    t.error(err, 'no error')\n    t.equal(result, true, 'result matches')\n  })\n\n  queue.drain = function () {\n    t.equal(true, worked, 'drained')\n  }\n\n  function worker (arg, cb) {\n    t.equal(arg, 42)\n    worked = true\n    setImmediate(cb, null, true)\n  }\n})\n\ntest('pause && resume', function (t) {\n  t.plan(7)\n\n  var queue = buildQueue(worker, 1)\n  var worked = false\n\n  t.notOk(queue.paused, 'it should not be paused')\n\n  queue.pause()\n\n  queue.push(42, function (err, result) {\n    t.error(err, 'no error')\n    t.equal(result, true, 'result matches')\n  })\n\n  t.notOk(worked, 'it should be paused')\n  t.ok(queue.paused, 'it should be paused')\n\n  queue.resume()\n  queue.resume() // second resume is a no-op\n\n  t.notOk(queue.paused, 'it should not be paused')\n\n  function worker (arg, cb) {\n    t.equal(arg, 42)\n    worked = true\n    cb(null, true)\n  }\n})\n\ntest('pause in flight && resume', function (t) {\n  t.plan(9)\n\n  var queue = buildQueue(worker, 1)\n  var expected = [42, 24]\n\n  t.notOk(queue.paused, 'it should not be paused')\n\n  queue.push(42, function (err, result) {\n    t.error(err, 'no error')\n    t.equal(result, true, 'result matches')\n    t.ok(queue.paused, 'it should be paused')\n    process.nextTick(function () { queue.resume() })\n  })\n\n  queue.push(24, function (err, result) {\n    t.error(err, 'no error')\n    t.equal(result, true, 'result matches')\n    t.notOk(queue.paused, 'it should not be paused')\n  })\n\n  queue.pause()\n\n  function worker (arg, cb) {\n    t.equal(arg, expected.shift())\n    process.nextTick(function () { cb(null, true) })\n  }\n})\n\ntest('altering concurrency', function (t) {\n  t.plan(7)\n\n  var queue = buildQueue(worker, 1)\n  var count = 0\n\n  queue.pause()\n\n  queue.push(24, workDone)\n  queue.push(24, workDone)\n\n  queue.concurrency = 2\n\n  queue.resume()\n\n  t.equal(queue.running(), 2, '2 jobs running')\n\n  function workDone (err, result) {\n    t.error(err, 'no error')\n    t.equal(result, true, 'result matches')\n  }\n\n  function worker (arg, cb) {\n    t.equal(0, count, 'works in parallel')\n    setImmediate(function () {\n      count++\n      cb(null, true)\n    })\n  }\n})\n\ntest('idle()', function (t) {\n  t.plan(12)\n\n  var queue = buildQueue(worker, 1)\n\n  t.ok(queue.idle(), 'queue is idle')\n\n  queue.push(42, function (err, result) {\n    t.error(err, 'no error')\n    t.equal(result, true, 'result matches')\n    t.notOk(queue.idle(), 'queue is not idle')\n  })\n\n  queue.push(42, function (err, result) {\n    t.error(err, 'no error')\n    t.equal(result, true, 'result matches')\n    // it will go idle after executing this function\n    setImmediate(function () {\n      t.ok(queue.idle(), 'queue is now idle')\n    })\n  })\n\n  t.notOk(queue.idle(), 'queue is not idle')\n\n  function worker (arg, cb) {\n    t.notOk(queue.idle(), 'queue is not idle')\n    t.equal(arg, 42)\n    setImmediate(cb, null, true)\n  }\n})\n\ntest('saturated', function (t) {\n  t.plan(9)\n\n  var queue = buildQueue(worker, 1)\n  var preworked = 0\n  var worked = 0\n\n  queue.saturated = function () {\n    t.pass('saturated')\n    t.equal(preworked, 1, 'started 1 task')\n    t.equal(worked, 0, 'worked zero task')\n  }\n\n  queue.push(42, done)\n  queue.push(42, done)\n\n  function done (err, result) {\n    t.error(err, 'no error')\n    t.equal(result, true, 'result matches')\n  }\n\n  function worker (arg, cb) {\n    t.equal(arg, 42)\n    preworked++\n    setImmediate(function () {\n      worked++\n      cb(null, true)\n    })\n  }\n})\n\ntest('length', function (t) {\n  t.plan(7)\n\n  var queue = buildQueue(worker, 1)\n\n  t.equal(queue.length(), 0, 'nothing waiting')\n  queue.push(42, done)\n  t.equal(queue.length(), 0, 'nothing waiting')\n  queue.push(42, done)\n  t.equal(queue.length(), 1, 'one task waiting')\n  queue.push(42, done)\n  t.equal(queue.length(), 2, 'two tasks waiting')\n\n  function done (err, result) {\n    t.error(err, 'no error')\n  }\n\n  function worker (arg, cb) {\n    setImmediate(function () {\n      cb(null, true)\n    })\n  }\n})\n\ntest('getQueue', function (t) {\n  t.plan(10)\n\n  var queue = buildQueue(worker, 1)\n\n  t.equal(queue.getQueue().length, 0, 'nothing waiting')\n  queue.push(42, done)\n  t.equal(queue.getQueue().length, 0, 'nothing waiting')\n  queue.push(42, done)\n  t.equal(queue.getQueue().length, 1, 'one task waiting')\n  t.equal(queue.getQueue()[0], 42, 'should be equal')\n  queue.push(43, done)\n  t.equal(queue.getQueue().length, 2, 'two tasks waiting')\n  t.equal(queue.getQueue()[0], 42, 'should be equal')\n  t.equal(queue.getQueue()[1], 43, 'should be equal')\n\n  function done (err, result) {\n    t.error(err, 'no error')\n  }\n\n  function worker (arg, cb) {\n    setImmediate(function () {\n      cb(null, true)\n    })\n  }\n})\n\ntest('unshift', function (t) {\n  t.plan(8)\n\n  var queue = buildQueue(worker, 1)\n  var expected = [1, 2, 3, 4]\n\n  queue.push(1, done)\n  queue.push(4, done)\n  queue.unshift(3, done)\n  queue.unshift(2, done)\n\n  function done (err, result) {\n    t.error(err, 'no error')\n  }\n\n  function worker (arg, cb) {\n    t.equal(expected.shift(), arg, 'tasks come in order')\n    setImmediate(function () {\n      cb(null, true)\n    })\n  }\n})\n\ntest('unshift && empty', function (t) {\n  t.plan(2)\n\n  var queue = buildQueue(worker, 1)\n  var completed = false\n\n  queue.pause()\n\n  queue.empty = function () {\n    t.notOk(completed, 'the task has not completed yet')\n  }\n\n  queue.unshift(1, done)\n\n  queue.resume()\n\n  function done (err, result) {\n    completed = true\n    t.error(err, 'no error')\n  }\n\n  function worker (arg, cb) {\n    setImmediate(function () {\n      cb(null, true)\n    })\n  }\n})\n\ntest('push && empty', function (t) {\n  t.plan(2)\n\n  var queue = buildQueue(worker, 1)\n  var completed = false\n\n  queue.pause()\n\n  queue.empty = function () {\n    t.notOk(completed, 'the task has not completed yet')\n  }\n\n  queue.push(1, done)\n\n  queue.resume()\n\n  function done (err, result) {\n    completed = true\n    t.error(err, 'no error')\n  }\n\n  function worker (arg, cb) {\n    setImmediate(function () {\n      cb(null, true)\n    })\n  }\n})\n\ntest('kill', function (t) {\n  t.plan(5)\n\n  var queue = buildQueue(worker, 1)\n  var expected = [1]\n\n  var predrain = queue.drain\n\n  queue.drain = function drain () {\n    t.fail('drain should never be called')\n  }\n\n  queue.push(1, done)\n  queue.push(4, done)\n  queue.unshift(3, done)\n  queue.unshift(2, done)\n  queue.kill()\n\n  function done (err, result) {\n    t.error(err, 'no error')\n    setImmediate(function () {\n      t.equal(queue.length(), 0, 'no queued tasks')\n      t.equal(queue.running(), 0, 'no running tasks')\n      t.equal(queue.drain, predrain, 'drain is back to default')\n    })\n  }\n\n  function worker (arg, cb) {\n    t.equal(expected.shift(), arg, 'tasks come in order')\n    setImmediate(function () {\n      cb(null, true)\n    })\n  }\n})\n\ntest('killAndDrain', function (t) {\n  t.plan(6)\n\n  var queue = buildQueue(worker, 1)\n  var expected = [1]\n\n  var predrain = queue.drain\n\n  queue.drain = function drain () {\n    t.pass('drain has been called')\n  }\n\n  queue.push(1, done)\n  queue.push(4, done)\n  queue.unshift(3, done)\n  queue.unshift(2, done)\n  queue.killAndDrain()\n\n  function done (err, result) {\n    t.error(err, 'no error')\n    setImmediate(function () {\n      t.equal(queue.length(), 0, 'no queued tasks')\n      t.equal(queue.running(), 0, 'no running tasks')\n      t.equal(queue.drain, predrain, 'drain is back to default')\n    })\n  }\n\n  function worker (arg, cb) {\n    t.equal(expected.shift(), arg, 'tasks come in order')\n    setImmediate(function () {\n      cb(null, true)\n    })\n  }\n})\n\ntest('pause && idle', function (t) {\n  t.plan(11)\n\n  var queue = buildQueue(worker, 1)\n  var worked = false\n\n  t.notOk(queue.paused, 'it should not be paused')\n  t.ok(queue.idle(), 'should be idle')\n\n  queue.pause()\n\n  queue.push(42, function (err, result) {\n    t.error(err, 'no error')\n    t.equal(result, true, 'result matches')\n  })\n\n  t.notOk(worked, 'it should be paused')\n  t.ok(queue.paused, 'it should be paused')\n  t.notOk(queue.idle(), 'should not be idle')\n\n  queue.resume()\n\n  t.notOk(queue.paused, 'it should not be paused')\n  t.notOk(queue.idle(), 'it should not be idle')\n\n  function worker (arg, cb) {\n    t.equal(arg, 42)\n    worked = true\n    process.nextTick(cb.bind(null, null, true))\n    process.nextTick(function () {\n      t.ok(queue.idle(), 'is should be idle')\n    })\n  }\n})\n\ntest('push without cb', function (t) {\n  t.plan(1)\n\n  var queue = buildQueue(worker, 1)\n\n  queue.push(42)\n\n  function worker (arg, cb) {\n    t.equal(arg, 42)\n    cb()\n  }\n})\n\ntest('unshift without cb', function (t) {\n  t.plan(1)\n\n  var queue = buildQueue(worker, 1)\n\n  queue.unshift(42)\n\n  function worker (arg, cb) {\n    t.equal(arg, 42)\n    cb()\n  }\n})\n\ntest('push with worker throwing error', function (t) {\n  t.plan(5)\n  var q = buildQueue(function (task, cb) {\n    cb(new Error('test error'), null)\n  }, 1)\n  q.error(function (err, task) {\n    t.ok(err instanceof Error, 'global error handler should catch the error')\n    t.match(err.message, /test error/, 'error message should be \"test error\"')\n    t.equal(task, 42, 'The task executed should be passed')\n  })\n  q.push(42, function (err) {\n    t.ok(err instanceof Error, 'push callback should catch the error')\n    t.match(err.message, /test error/, 'error message should be \"test error\"')\n  })\n})\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/ZmV0Y2gtYmxvYkAzLjIuMA==",
    "content": "/LICENSE\u0004,MIT License\n\nCopyright (c) 2019 David Frank\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n/README.md\u0013# fetch-blob\n\n[![npm version][npm-image]][npm-url]\n[![build status][ci-image]][ci-url]\n[![coverage status][codecov-image]][codecov-url]\n[![install size][install-size-image]][install-size-url]\n\nA Blob implementation in Node.js, originally from [node-fetch](https://github.com/node-fetch/node-fetch).\n\n## Installation\n\n```sh\nnpm install fetch-blob\n```\n\n<details>\n  <summary>Upgrading from 2x to 3x</summary>\n\n  Updating from 2 to 3 should be a breeze since there is not many changes to the blob specification.\n  The major cause of a major release is coding standards.\n    - internal WeakMaps was replaced with private fields\n    - internal Buffer.from was replaced with TextEncoder/Decoder\n    - internal buffers was replaced with Uint8Arrays\n    - CommonJS was replaced with ESM\n    - The node stream returned by calling `blob.stream()` was replaced with whatwg streams\n    - (Read \"Differences from other blobs\" for more info.)\n\n</details>\n\n<details>\n  <summary>Differences from other Blobs</summary>\n\n  - Unlike NodeJS `buffer.Blob` (Added in: v15.7.0) and browser native Blob this polyfilled version can't be sent via PostMessage\n  - This blob version is more arbitrary, it can be constructed with blob parts that isn't a instance of itself\n  it has to look and behave as a blob to be accepted as a blob part.\n    - The benefit of this is that you can create other types of blobs that don't contain any internal data that has to be read in other ways, such as the `BlobDataItem` created in `from.js` that wraps a file path into a blob-like item and read lazily (nodejs plans to [implement this][fs-blobs] as well)\n  - The `blob.stream()` is the most noticeable differences. It returns a WHATWG stream now. to keep it as a node stream you would have to do:\n\n  ```js\n    import {Readable} from 'stream'\n    const stream = Readable.from(blob.stream())\n  ```\n</details>\n\n## Usage\n\n```js\n// Ways to import\n// (PS it's dependency free ESM package so regular http-import from CDN works too)\nimport Blob from 'fetch-blob'\nimport File from 'fetch-blob/file.js'\n\nimport {Blob} from 'fetch-blob'\nimport {File} from 'fetch-blob/file.js'\n\nconst {Blob} = await import('fetch-blob')\n\n\n// Ways to read the blob:\nconst blob = new Blob(['hello, world'])\n\nawait blob.text()\nawait blob.arrayBuffer()\nfor await (let chunk of  blob.stream()) { ... }\nblob.stream().getReader().read()\nblob.stream().getReader({mode: 'byob'}).read(view)\n```\n\n### Blob part backed up by filesystem\n\n`fetch-blob/from.js` comes packed with tools to convert any filepath into either a Blob or a File\nIt will not read the content into memory. It will only stat the file for last modified date and file size.\n\n```js\n// The default export is sync and use fs.stat to retrieve size & last modified as a blob\nimport blobFromSync from 'fetch-blob/from.js'\nimport {File, Blob, blobFrom, blobFromSync, fileFrom, fileFromSync} from 'fetch-blob/from.js'\n\nconst fsFile = fileFromSync('./2-GiB-file.bin', 'application/octet-stream')\nconst fsBlob = await blobFrom('./2-GiB-file.mp4')\n\n// Not a 4 GiB memory snapshot, just holds references\n// points to where data is located on the disk\nconst blob = new Blob([fsFile, fsBlob, 'memory', new Uint8Array(10)])\nconsole.log(blob.size) // ~4 GiB\n```\n\n`blobFrom|blobFromSync|fileFrom|fileFromSync(path, [mimetype])`\n\n### Creating Blobs backed up by other async sources\nOur Blob & File class are more generic then any other polyfills in the way that it can accept any blob look-a-like item\nAn example of this is that our blob implementation can be constructed with parts coming from [BlobDataItem](https://github.com/node-fetch/fetch-blob/blob/8ef89adad40d255a3bbd55cf38b88597c1cd5480/from.js#L32) (aka a filepath) or from [buffer.Blob](https://nodejs.org/api/buffer.html#buffer_new_buffer_blob_sources_options), It dose not have to implement all the methods - just enough that it can be read/understood by our Blob implementation. The minium requirements is that it has `Symbol.toStringTag`, `size`, `slice()` and either a `stream()` or a `arrayBuffer()` method. If you then wrap it in our Blob or File `new Blob([blobDataItem])` then you get all of the other methods that should be implemented in a blob or file\n\nAn example of this could be to create a file or blob like item coming from a remote HTTP request. Or from a DataBase\n\nSee the [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/API/Blob) and [tests](https://github.com/node-fetch/fetch-blob/blob/master/test.js) for more details of how to use the Blob.\n\n[npm-image]: https://flat.badgen.net/npm/v/fetch-blob\n[npm-url]: https://www.npmjs.com/package/fetch-blob\n[ci-image]: https://github.com/node-fetch/fetch-blob/workflows/CI/badge.svg\n[ci-url]: https://github.com/node-fetch/fetch-blob/actions\n[codecov-image]: https://flat.badgen.net/codecov/c/github/node-fetch/fetch-blob/master\n[codecov-url]: https://codecov.io/gh/node-fetch/fetch-blob\n[install-size-image]: https://flat.badgen.net/packagephobia/install/fetch-blob\n[install-size-url]: https://packagephobia.now.sh/result?p=fetch-blob\n[fs-blobs]: https://github.com/nodejs/node/issues/37340\n/file.d.tsf/** @type {typeof globalThis.File} */ export const File: typeof globalThis.File;\nexport default File;\n/index.d.tsf/** @type {typeof globalThis.Blob} */\nexport const Blob: typeof globalThis.Blob;\nexport default Blob;\n/from.js\nXimport { statSync, createReadStream, promises as fs } from 'node:fs'\nimport { basename } from 'node:path'\nimport DOMException from 'node-domexception'\n\nimport File from './file.js'\nimport Blob from './index.js'\n\nconst { stat } = fs\n\n/**\n * @param {string} path filepath on the disk\n * @param {string} [type] mimetype to use\n */\nconst blobFromSync = (path, type) => fromBlob(statSync(path), path, type)\n\n/**\n * @param {string} path filepath on the disk\n * @param {string} [type] mimetype to use\n * @returns {Promise<Blob>}\n */\nconst blobFrom = (path, type) => stat(path).then(stat => fromBlob(stat, path, type))\n\n/**\n * @param {string} path filepath on the disk\n * @param {string} [type] mimetype to use\n * @returns {Promise<File>}\n */\nconst fileFrom = (path, type) => stat(path).then(stat => fromFile(stat, path, type))\n\n/**\n * @param {string} path filepath on the disk\n * @param {string} [type] mimetype to use\n */\nconst fileFromSync = (path, type) => fromFile(statSync(path), path, type)\n\n// @ts-ignore\nconst fromBlob = (stat, path, type = '') => new Blob([new BlobDataItem({\n  path,\n  size: stat.size,\n  lastModified: stat.mtimeMs,\n  start: 0\n})], { type })\n\n// @ts-ignore\nconst fromFile = (stat, path, type = '') => new File([new BlobDataItem({\n  path,\n  size: stat.size,\n  lastModified: stat.mtimeMs,\n  start: 0\n})], basename(path), { type, lastModified: stat.mtimeMs })\n\n/**\n * This is a blob backed up by a file on the disk\n * with minium requirement. Its wrapped around a Blob as a blobPart\n * so you have no direct access to this.\n *\n * @private\n */\nclass BlobDataItem {\n  #path\n  #start\n\n  constructor (options) {\n    this.#path = options.path\n    this.#start = options.start\n    this.size = options.size\n    this.lastModified = options.lastModified\n  }\n\n  /**\n   * Slicing arguments is first validated and formatted\n   * to not be out of range by Blob.prototype.slice\n   */\n  slice (start, end) {\n    return new BlobDataItem({\n      path: this.#path,\n      lastModified: this.lastModified,\n      size: end - start,\n      start: this.#start + start\n    })\n  }\n\n  async * stream () {\n    const { mtimeMs } = await stat(this.#path)\n    if (mtimeMs > this.lastModified) {\n      throw new DOMException('The requested file could not be read, typically due to permission problems that have occurred after a reference to a file was acquired.', 'NotReadableError')\n    }\n    yield * createReadStream(this.#path, {\n      start: this.#start,\n      end: this.#start + this.size - 1\n    })\n  }\n\n  get [Symbol.toStringTag] () {\n    return 'Blob'\n  }\n}\n\nexport default blobFromSync\nexport { File, Blob, blobFrom, blobFromSync, fileFrom, fileFromSync }\n/index.js\u001d\b/*! fetch-blob. MIT License. Jimmy Wärting <https://jimmy.warting.se/opensource> */\n\n// TODO (jimmywarting): in the feature use conditional loading with top level await (requires 14.x)\n// Node has recently added whatwg stream into core\n\nimport './streams.cjs'\n\n// 64 KiB (same size chrome slice theirs blob into Uint8array's)\nconst POOL_SIZE = 65536\n\n/** @param {(Blob | Uint8Array)[]} parts */\nasync function * toIterator (parts, clone = true) {\n  for (const part of parts) {\n    if ('stream' in part) {\n      yield * (/** @type {AsyncIterableIterator<Uint8Array>} */ (part.stream()))\n    } else if (ArrayBuffer.isView(part)) {\n      if (clone) {\n        let position = part.byteOffset\n        const end = part.byteOffset + part.byteLength\n        while (position !== end) {\n          const size = Math.min(end - position, POOL_SIZE)\n          const chunk = part.buffer.slice(position, position + size)\n          position += chunk.byteLength\n          yield new Uint8Array(chunk)\n        }\n      } else {\n        yield part\n      }\n    /* c8 ignore next 10 */\n    } else {\n      // For blobs that have arrayBuffer but no stream method (nodes buffer.Blob)\n      let position = 0, b = (/** @type {Blob} */ (part))\n      while (position !== b.size) {\n        const chunk = b.slice(position, Math.min(b.size, position + POOL_SIZE))\n        const buffer = await chunk.arrayBuffer()\n        position += buffer.byteLength\n        yield new Uint8Array(buffer)\n      }\n    }\n  }\n}\n\nconst _Blob = class Blob {\n  /** @type {Array.<(Blob|Uint8Array)>} */\n  #parts = []\n  #type = ''\n  #size = 0\n  #endings = 'transparent'\n\n  /**\n   * The Blob() constructor returns a new Blob object. The content\n   * of the blob consists of the concatenation of the values given\n   * in the parameter array.\n   *\n   * @param {*} blobParts\n   * @param {{ type?: string, endings?: string }} [options]\n   */\n  constructor (blobParts = [], options = {}) {\n    if (typeof blobParts !== 'object' || blobParts === null) {\n      throw new TypeError('Failed to construct \\'Blob\\': The provided value cannot be converted to a sequence.')\n    }\n\n    if (typeof blobParts[Symbol.iterator] !== 'function') {\n      throw new TypeError('Failed to construct \\'Blob\\': The object must have a callable @@iterator property.')\n    }\n\n    if (typeof options !== 'object' && typeof options !== 'function') {\n      throw new TypeError('Failed to construct \\'Blob\\': parameter 2 cannot convert to dictionary.')\n    }\n\n    if (options === null) options = {}\n\n    const encoder = new TextEncoder()\n    for (const element of blobParts) {\n      let part\n      if (ArrayBuffer.isView(element)) {\n        part = new Uint8Array(element.buffer.slice(element.byteOffset, element.byteOffset + element.byteLength))\n      } else if (element instanceof ArrayBuffer) {\n        part = new Uint8Array(element.slice(0))\n      } else if (element instanceof Blob) {\n        part = element\n      } else {\n        part = encoder.encode(`${element}`)\n      }\n\n      this.#size += ArrayBuffer.isView(part) ? part.byteLength : part.size\n      this.#parts.push(part)\n    }\n\n    this.#endings = `${options.endings === undefined ? 'transparent' : options.endings}`\n    const type = options.type === undefined ? '' : String(options.type)\n    this.#type = /^[\\x20-\\x7E]*$/.test(type) ? type : ''\n  }\n\n  /**\n   * The Blob interface's size property returns the\n   * size of the Blob in bytes.\n   */\n  get size () {\n    return this.#size\n  }\n\n  /**\n   * The type property of a Blob object returns the MIME type of the file.\n   */\n  get type () {\n    return this.#type\n  }\n\n  /**\n   * The text() method in the Blob interface returns a Promise\n   * that resolves with a string containing the contents of\n   * the blob, interpreted as UTF-8.\n   *\n   * @return {Promise<string>}\n   */\n  async text () {\n    // More optimized than using this.arrayBuffer()\n    // that requires twice as much ram\n    const decoder = new TextDecoder()\n    let str = ''\n    for await (const part of toIterator(this.#parts, false)) {\n      str += decoder.decode(part, { stream: true })\n    }\n    // Remaining\n    str += decoder.decode()\n    return str\n  }\n\n  /**\n   * The arrayBuffer() method in the Blob interface returns a\n   * Promise that resolves with the contents of the blob as\n   * binary data contained in an ArrayBuffer.\n   *\n   * @return {Promise<ArrayBuffer>}\n   */\n  async arrayBuffer () {\n    // Easier way... Just a unnecessary overhead\n    // const view = new Uint8Array(this.size);\n    // await this.stream().getReader({mode: 'byob'}).read(view);\n    // return view.buffer;\n\n    const data = new Uint8Array(this.size)\n    let offset = 0\n    for await (const chunk of toIterator(this.#parts, false)) {\n      data.set(chunk, offset)\n      offset += chunk.length\n    }\n\n    return data.buffer\n  }\n\n  stream () {\n    const it = toIterator(this.#parts, true)\n\n    return new globalThis.ReadableStream({\n      // @ts-ignore\n      type: 'bytes',\n      async pull (ctrl) {\n        const chunk = await it.next()\n        chunk.done ? ctrl.close() : ctrl.enqueue(chunk.value)\n      },\n\n      async cancel () {\n        await it.return()\n      }\n    })\n  }\n\n  /**\n   * The Blob interface's slice() method creates and returns a\n   * new Blob object which contains data from a subset of the\n   * blob on which it's called.\n   *\n   * @param {number} [start]\n   * @param {number} [end]\n   * @param {string} [type]\n   */\n  slice (start = 0, end = this.size, type = '') {\n    const { size } = this\n\n    let relativeStart = start < 0 ? Math.max(size + start, 0) : Math.min(start, size)\n    let relativeEnd = end < 0 ? Math.max(size + end, 0) : Math.min(end, size)\n\n    const span = Math.max(relativeEnd - relativeStart, 0)\n    const parts = this.#parts\n    const blobParts = []\n    let added = 0\n\n    for (const part of parts) {\n      // don't add the overflow to new blobParts\n      if (added >= span) {\n        break\n      }\n\n      const size = ArrayBuffer.isView(part) ? part.byteLength : part.size\n      if (relativeStart && size <= relativeStart) {\n        // Skip the beginning and change the relative\n        // start & end position as we skip the unwanted parts\n        relativeStart -= size\n        relativeEnd -= size\n      } else {\n        let chunk\n        if (ArrayBuffer.isView(part)) {\n          chunk = part.subarray(relativeStart, Math.min(size, relativeEnd))\n          added += chunk.byteLength\n        } else {\n          chunk = part.slice(relativeStart, Math.min(size, relativeEnd))\n          added += chunk.size\n        }\n        relativeEnd -= size\n        blobParts.push(chunk)\n        relativeStart = 0 // All next sequential parts should start at 0\n      }\n    }\n\n    const blob = new Blob([], { type: String(type).toLowerCase() })\n    blob.#size = span\n    blob.#parts = blobParts\n\n    return blob\n  }\n\n  get [Symbol.toStringTag] () {\n    return 'Blob'\n  }\n\n  static [Symbol.hasInstance] (object) {\n    return (\n      object &&\n      typeof object === 'object' &&\n      typeof object.constructor === 'function' &&\n      (\n        typeof object.stream === 'function' ||\n        typeof object.arrayBuffer === 'function'\n      ) &&\n      /^(Blob|File)$/.test(object[Symbol.toStringTag])\n    )\n  }\n}\n\nObject.defineProperties(_Blob.prototype, {\n  size: { enumerable: true },\n  type: { enumerable: true },\n  slice: { enumerable: true }\n})\n\n/** @type {typeof globalThis.Blob} */\nexport const Blob = _Blob\nexport default Blob\n/streams.cjs\u0006D/* c8 ignore start */\n// 64 KiB (same size chrome slice theirs blob into Uint8array's)\nconst POOL_SIZE = 65536\n\nif (!globalThis.ReadableStream) {\n  // `node:stream/web` got introduced in v16.5.0 as experimental\n  // and it's preferred over the polyfilled version. So we also\n  // suppress the warning that gets emitted by NodeJS for using it.\n  try {\n    const process = require('node:process')\n    const { emitWarning } = process\n    try {\n      process.emitWarning = () => {}\n      Object.assign(globalThis, require('node:stream/web'))\n      process.emitWarning = emitWarning\n    } catch (error) {\n      process.emitWarning = emitWarning\n      throw error\n    }\n  } catch (error) {\n    // fallback to polyfill implementation\n    Object.assign(globalThis, require('web-streams-polyfill/dist/ponyfill.es2018.js'))\n  }\n}\n\ntry {\n  // Don't use node: prefix for this, require+node: is not supported until node v14.14\n  // Only `import()` can use prefix in 12.20 and later\n  const { Blob } = require('buffer')\n  if (Blob && !Blob.prototype.stream) {\n    Blob.prototype.stream = function name (params) {\n      let position = 0\n      const blob = this\n\n      return new ReadableStream({\n        type: 'bytes',\n        async pull (ctrl) {\n          const chunk = blob.slice(position, Math.min(blob.size, position + POOL_SIZE))\n          const buffer = await chunk.arrayBuffer()\n          position += buffer.byteLength\n          ctrl.enqueue(new Uint8Array(buffer))\n\n          if (position === blob.size) {\n            ctrl.close()\n          }\n        }\n      })\n    }\n  }\n} catch (error) {}\n/* c8 ignore end */\n/file.js\u0004import Blob from './index.js'\n\nconst _File = class File extends Blob {\n  #lastModified = 0\n  #name = ''\n\n  /**\n   * @param {*[]} fileBits\n   * @param {string} fileName\n   * @param {{lastModified?: number, type?: string}} options\n   */// @ts-ignore\n  constructor (fileBits, fileName, options = {}) {\n    if (arguments.length < 2) {\n      throw new TypeError(`Failed to construct 'File': 2 arguments required, but only ${arguments.length} present.`)\n    }\n    super(fileBits, options)\n\n    if (options === null) options = {}\n\n    // Simulate WebIDL type casting for NaN value in lastModified option.\n    const lastModified = options.lastModified === undefined ? Date.now() : Number(options.lastModified)\n    if (!Number.isNaN(lastModified)) {\n      this.#lastModified = lastModified\n    }\n\n    this.#name = String(fileName)\n  }\n\n  get name () {\n    return this.#name\n  }\n\n  get lastModified () {\n    return this.#lastModified\n  }\n\n  get [Symbol.toStringTag] () {\n    return 'File'\n  }\n\n  static [Symbol.hasInstance] (object) {\n    return !!object && object instanceof Blob &&\n      /^(File)$/.test(object[Symbol.toStringTag])\n  }\n}\n\n/** @type {typeof globalThis.File} */// @ts-ignore\nexport const File = _File\nexport default File\n/package.json\u0006n{\n    \"name\": \"fetch-blob\",\n    \"version\": \"3.2.0\",\n    \"description\": \"Blob & File implementation in Node.js, originally from node-fetch.\",\n    \"main\": \"index.js\",\n    \"type\": \"module\",\n    \"files\": [\n        \"from.js\",\n        \"file.js\",\n        \"file.d.ts\",\n        \"index.js\",\n        \"index.d.ts\",\n        \"from.d.ts\",\n        \"streams.cjs\"\n    ],\n    \"scripts\": {\n        \"test\": \"node --experimental-loader ./test/http-loader.js ./test/test-wpt-in-node.js\",\n        \"report\": \"c8 --reporter json --reporter text npm run test\",\n        \"coverage\": \"npm run report && codecov -f coverage/coverage-final.json\",\n        \"prepublishOnly\": \"tsc --declaration --emitDeclarationOnly --allowJs index.js from.js\"\n    },\n    \"repository\": \"https://github.com/node-fetch/fetch-blob.git\",\n    \"keywords\": [\n        \"blob\",\n        \"file\",\n        \"node-fetch\"\n    ],\n    \"engines\": {\n        \"node\": \"^12.20 || >= 14.13\"\n    },\n    \"author\": \"Jimmy Wärting <jimmy@warting.se> (https://jimmy.warting.se)\",\n    \"license\": \"MIT\",\n    \"bugs\": {\n        \"url\": \"https://github.com/node-fetch/fetch-blob/issues\"\n    },\n    \"homepage\": \"https://github.com/node-fetch/fetch-blob#readme\",\n    \"devDependencies\": {\n        \"@types/node\": \"^17.0.9\",\n        \"c8\": \"^7.11.0\",\n        \"typescript\": \"^4.5.4\"\n    },\n    \"funding\": [\n        {\n            \"type\": \"github\",\n            \"url\": \"https://github.com/sponsors/jimmywarting\"\n        },\n        {\n            \"type\": \"paypal\",\n            \"url\": \"https://paypal.me/jimmywarting\"\n        }\n    ],\n    \"dependencies\": {\n        \"node-domexception\": \"^1.0.0\",\n        \"web-streams-polyfill\": \"^3.0.3\"\n    }\n}\n/from.d.ts\u00033export default blobFromSync;\n/**\n * @param {string} path filepath on the disk\n * @param {string} [type] mimetype to use\n */\nexport function blobFromSync(path: string, type?: string): Blob;\nimport File from \"./file.js\";\nimport Blob from \"./index.js\";\n/**\n * @param {string} path filepath on the disk\n * @param {string} [type] mimetype to use\n * @returns {Promise<Blob>}\n */\nexport function blobFrom(path: string, type?: string): Promise<Blob>;\n/**\n * @param {string} path filepath on the disk\n * @param {string} [type] mimetype to use\n * @returns {Promise<File>}\n */\nexport function fileFrom(path: string, type?: string): Promise<File>;\n/**\n * @param {string} path filepath on the disk\n * @param {string} [type] mimetype to use\n */\nexport function fileFromSync(path: string, type?: string): File;\nexport { File, Blob };\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/ZmlsZS1lbnRyeS1jYWNoZUA2LjAuMQ==",
    "content": "/cache.js\u001evar path = require('path');\nvar crypto = require('crypto');\n\nmodule.exports = {\n  createFromFile: function (filePath, useChecksum) {\n    var fname = path.basename(filePath);\n    var dir = path.dirname(filePath);\n    return this.create(fname, dir, useChecksum);\n  },\n\n  create: function (cacheId, _path, useChecksum) {\n    var fs = require('fs');\n    var flatCache = require('flat-cache');\n    var cache = flatCache.load(cacheId, _path);\n    var normalizedEntries = {};\n\n    var removeNotFoundFiles = function removeNotFoundFiles() {\n      const cachedEntries = cache.keys();\n      // remove not found entries\n      cachedEntries.forEach(function remover(fPath) {\n        try {\n          fs.statSync(fPath);\n        } catch (err) {\n          if (err.code === 'ENOENT') {\n            cache.removeKey(fPath);\n          }\n        }\n      });\n    };\n\n    removeNotFoundFiles();\n\n    return {\n      /**\n       * the flat cache storage used to persist the metadata of the `files\n       * @type {Object}\n       */\n      cache: cache,\n\n      /**\n       * Given a buffer, calculate md5 hash of its content.\n       * @method getHash\n       * @param  {Buffer} buffer   buffer to calculate hash on\n       * @return {String}          content hash digest\n       */\n      getHash: function (buffer) {\n        return crypto.createHash('md5').update(buffer).digest('hex');\n      },\n\n      /**\n       * Return whether or not a file has changed since last time reconcile was called.\n       * @method hasFileChanged\n       * @param  {String}  file  the filepath to check\n       * @return {Boolean}       wheter or not the file has changed\n       */\n      hasFileChanged: function (file) {\n        return this.getFileDescriptor(file).changed;\n      },\n\n      /**\n       * given an array of file paths it return and object with three arrays:\n       *  - changedFiles: Files that changed since previous run\n       *  - notChangedFiles: Files that haven't change\n       *  - notFoundFiles: Files that were not found, probably deleted\n       *\n       * @param  {Array} files the files to analyze and compare to the previous seen files\n       * @return {[type]}       [description]\n       */\n      analyzeFiles: function (files) {\n        var me = this;\n        files = files || [];\n\n        var res = {\n          changedFiles: [],\n          notFoundFiles: [],\n          notChangedFiles: [],\n        };\n\n        me.normalizeEntries(files).forEach(function (entry) {\n          if (entry.changed) {\n            res.changedFiles.push(entry.key);\n            return;\n          }\n          if (entry.notFound) {\n            res.notFoundFiles.push(entry.key);\n            return;\n          }\n          res.notChangedFiles.push(entry.key);\n        });\n        return res;\n      },\n\n      getFileDescriptor: function (file) {\n        var fstat;\n\n        try {\n          fstat = fs.statSync(file);\n        } catch (ex) {\n          this.removeEntry(file);\n          return { key: file, notFound: true, err: ex };\n        }\n\n        if (useChecksum) {\n          return this._getFileDescriptorUsingChecksum(file);\n        }\n\n        return this._getFileDescriptorUsingMtimeAndSize(file, fstat);\n      },\n\n      _getFileDescriptorUsingMtimeAndSize: function (file, fstat) {\n        var meta = cache.getKey(file);\n        var cacheExists = !!meta;\n\n        var cSize = fstat.size;\n        var cTime = fstat.mtime.getTime();\n\n        var isDifferentDate;\n        var isDifferentSize;\n\n        if (!meta) {\n          meta = { size: cSize, mtime: cTime };\n        } else {\n          isDifferentDate = cTime !== meta.mtime;\n          isDifferentSize = cSize !== meta.size;\n        }\n\n        var nEntry = (normalizedEntries[file] = {\n          key: file,\n          changed: !cacheExists || isDifferentDate || isDifferentSize,\n          meta: meta,\n        });\n\n        return nEntry;\n      },\n\n      _getFileDescriptorUsingChecksum: function (file) {\n        var meta = cache.getKey(file);\n        var cacheExists = !!meta;\n\n        var contentBuffer;\n        try {\n          contentBuffer = fs.readFileSync(file);\n        } catch (ex) {\n          contentBuffer = '';\n        }\n\n        var isDifferent = true;\n        var hash = this.getHash(contentBuffer);\n\n        if (!meta) {\n          meta = { hash: hash };\n        } else {\n          isDifferent = hash !== meta.hash;\n        }\n\n        var nEntry = (normalizedEntries[file] = {\n          key: file,\n          changed: !cacheExists || isDifferent,\n          meta: meta,\n        });\n\n        return nEntry;\n      },\n\n      /**\n       * Return the list o the files that changed compared\n       * against the ones stored in the cache\n       *\n       * @method getUpdated\n       * @param files {Array} the array of files to compare against the ones in the cache\n       * @returns {Array}\n       */\n      getUpdatedFiles: function (files) {\n        var me = this;\n        files = files || [];\n\n        return me\n          .normalizeEntries(files)\n          .filter(function (entry) {\n            return entry.changed;\n          })\n          .map(function (entry) {\n            return entry.key;\n          });\n      },\n\n      /**\n       * return the list of files\n       * @method normalizeEntries\n       * @param files\n       * @returns {*}\n       */\n      normalizeEntries: function (files) {\n        files = files || [];\n\n        var me = this;\n        var nEntries = files.map(function (file) {\n          return me.getFileDescriptor(file);\n        });\n\n        //normalizeEntries = nEntries;\n        return nEntries;\n      },\n\n      /**\n       * Remove an entry from the file-entry-cache. Useful to force the file to still be considered\n       * modified the next time the process is run\n       *\n       * @method removeEntry\n       * @param entryName\n       */\n      removeEntry: function (entryName) {\n        delete normalizedEntries[entryName];\n        cache.removeKey(entryName);\n      },\n\n      /**\n       * Delete the cache file from the disk\n       * @method deleteCacheFile\n       */\n      deleteCacheFile: function () {\n        cache.removeCacheFile();\n      },\n\n      /**\n       * remove the cache from the file and clear the memory cache\n       */\n      destroy: function () {\n        normalizedEntries = {};\n        cache.destroy();\n      },\n\n      _getMetaForFileUsingCheckSum: function (cacheEntry) {\n        var contentBuffer = fs.readFileSync(cacheEntry.key);\n        var hash = this.getHash(contentBuffer);\n        var meta = Object.assign(cacheEntry.meta, { hash: hash });\n        delete meta.size;\n        delete meta.mtime;\n        return meta;\n      },\n\n      _getMetaForFileUsingMtimeAndSize: function (cacheEntry) {\n        var stat = fs.statSync(cacheEntry.key);\n        var meta = Object.assign(cacheEntry.meta, {\n          size: stat.size,\n          mtime: stat.mtime.getTime(),\n        });\n        delete meta.hash;\n        return meta;\n      },\n\n      /**\n       * Sync the files and persist them to the cache\n       * @method reconcile\n       */\n      reconcile: function (noPrune) {\n        removeNotFoundFiles();\n\n        noPrune = typeof noPrune === 'undefined' ? true : noPrune;\n\n        var entries = normalizedEntries;\n        var keys = Object.keys(entries);\n\n        if (keys.length === 0) {\n          return;\n        }\n\n        var me = this;\n\n        keys.forEach(function (entryName) {\n          var cacheEntry = entries[entryName];\n\n          try {\n            var meta = useChecksum\n              ? me._getMetaForFileUsingCheckSum(cacheEntry)\n              : me._getMetaForFileUsingMtimeAndSize(cacheEntry);\n            cache.setKey(entryName, meta);\n          } catch (err) {\n            // if the file does not exists we don't save it\n            // other errors are just thrown\n            if (err.code !== 'ENOENT') {\n              throw err;\n            }\n          }\n        });\n\n        cache.save(noPrune);\n      },\n    };\n  },\n};\n/README.md\u0014F# file-entry-cache\n> Super simple cache for file metadata, useful for process that work o a given series of files\n> and that only need to repeat the job on the changed ones since the previous run of the process — Edit\n\n[![NPM Version](http://img.shields.io/npm/v/file-entry-cache.svg?style=flat)](https://npmjs.org/package/file-entry-cache)\n[![Build Status](http://img.shields.io/travis/royriojas/file-entry-cache.svg?style=flat)](https://travis-ci.org/royriojas/file-entry-cache)\n\n## install\n\n```bash\nnpm i --save file-entry-cache\n```\n\n## Usage\n\nThe module exposes two functions `create` and `createFromFile`.\n\n## `create(cacheName, [directory, useCheckSum])`\n- **cacheName**: the name of the cache to be created\n- **directory**: Optional the directory to load the cache from\n- **usecheckSum**: Whether to use md5 checksum to verify if file changed. If false the default will be to use the mtime and size of the file.\n\n## `createFromFile(pathToCache, [useCheckSum])`\n- **pathToCache**: the path to the cache file (this combines the cache name and directory)\n- **useCheckSum**: Whether to use md5 checksum to verify if file changed. If false the default will be to use the mtime and size of the file.\n\n```js\n// loads the cache, if one does not exists for the given\n// Id a new one will be prepared to be created\nvar fileEntryCache = require('file-entry-cache');\n\nvar cache = fileEntryCache.create('testCache');\n\nvar files = expand('../fixtures/*.txt');\n\n// the first time this method is called, will return all the files\nvar oFiles = cache.getUpdatedFiles(files);\n\n// this will persist this to disk checking each file stats and\n// updating the meta attributes `size` and `mtime`.\n// custom fields could also be added to the meta object and will be persisted\n// in order to retrieve them later\ncache.reconcile();\n\n// use this if you want the non visited file entries to be kept in the cache\n// for more than one execution\n//\n// cache.reconcile( true /* noPrune */)\n\n// on a second run\nvar cache2 = fileEntryCache.create('testCache');\n\n// will return now only the files that were modified or none\n// if no files were modified previous to the execution of this function\nvar oFiles = cache.getUpdatedFiles(files);\n\n// if you want to prevent a file from being considered non modified\n// something useful if a file failed some sort of validation\n// you can then remove the entry from the cache doing\ncache.removeEntry('path/to/file'); // path to file should be the same path of the file received on `getUpdatedFiles`\n// that will effectively make the file to appear again as modified until the validation is passed. In that\n// case you should not remove it from the cache\n\n// if you need all the files, so you can determine what to do with the changed ones\n// you can call\nvar oFiles = cache.normalizeEntries(files);\n\n// oFiles will be an array of objects like the following\nentry = {\n  key: 'some/name/file', the path to the file\n  changed: true, // if the file was changed since previous run\n  meta: {\n    size: 3242, // the size of the file\n    mtime: 231231231, // the modification time of the file\n    data: {} // some extra field stored for this file (useful to save the result of a transformation on the file\n  }\n}\n\n```\n\n## Motivation for this module\n\nI needed a super simple and dumb **in-memory cache** with optional disk persistence (write-back cache) in order to make\na script that will beautify files with `esformatter` to execute only on the files that were changed since the last run.\n\nIn doing so the process of beautifying files was reduced from several seconds to a small fraction of a second.\n\nThis module uses [flat-cache](https://www.npmjs.com/package/flat-cache) a super simple `key/value` cache storage with\noptional file persistance.\n\nThe main idea is to read the files when the task begins, apply the transforms required, and if the process succeed,\nthen store the new state of the files. The next time this module request for `getChangedFiles` will return only\nthe files that were modified. Making the process to end faster.\n\nThis module could also be used by processes that modify the files applying a transform, in that case the result of the\ntransform could be stored in the `meta` field, of the entries. Anything added to the meta field will be persisted.\nThose processes won't need to call `getChangedFiles` they will instead call `normalizeEntries` that will return the\nentries with a `changed` field that can be used to determine if the file was changed or not. If it was not changed\nthe transformed stored data could be used instead of actually applying the transformation, saving time in case of only\na few files changed.\n\nIn the worst case scenario all the files will be processed. In the best case scenario only a few of them will be processed.\n\n## Important notes\n- The values set on the meta attribute of the entries should be `stringify-able` ones if possible, flat-cache uses `circular-json` to try to persist circular structures, but this should be considered experimental. The best results are always obtained with non circular values\n- All the changes to the cache state are done to memory first and only persisted after reconcile.\n\n## License\n\nMIT\n\n\n/package.json\n{\n  \"name\": \"file-entry-cache\",\n  \"version\": \"6.0.1\",\n  \"description\": \"Super simple cache for file metadata, useful for process that work o a given series of files and that only need to repeat the job on the changed ones since the previous run of the process\",\n  \"repository\": \"royriojas/file-entry-cache\",\n  \"license\": \"MIT\",\n  \"author\": {\n    \"name\": \"Roy Riojas\",\n    \"url\": \"http://royriojas.com\"\n  },\n  \"main\": \"cache.js\",\n  \"files\": [\n    \"cache.js\"\n  ],\n  \"engines\": {\n    \"node\": \"^10.12.0 || >=12.0.0\"\n  },\n  \"scripts\": {\n    \"eslint\": \"eslint --cache --cache-location=node_modules/.cache/ 'cache.js' 'test/**/*.js' 'perf.js'\",\n    \"autofix\": \"npm run eslint -- --fix\",\n    \"install-hooks\": \"prepush install && changelogx install-hook && precommit install\",\n    \"changelog\": \"changelogx -f markdown -o ./changelog.md\",\n    \"do-changelog\": \"npm run changelog && git add ./changelog.md && git commit -m 'DOC: Generate changelog' --no-verify\",\n    \"pre-v\": \"npm run test\",\n    \"post-v\": \"npm run do-changelog && git push --no-verify && git push --tags --no-verify\",\n    \"bump-major\": \"npm run pre-v && npm version major -m 'BLD: Release v%s' && npm run post-v\",\n    \"bump-minor\": \"npm run pre-v && npm version minor -m 'BLD: Release v%s' && npm run post-v\",\n    \"bump-patch\": \"npm run pre-v && npm version patch -m 'BLD: Release v%s' && npm run post-v\",\n    \"test\": \"npm run eslint --silent && mocha -R spec test/specs\",\n    \"perf\": \"node perf.js\",\n    \"cover\": \"istanbul cover test/runner.js html text-summary\",\n    \"watch\": \"watch-run -i -p 'test/specs/**/*.js' istanbul cover test/runner.js html text-summary\"\n  },\n  \"prepush\": [\n    \"npm run eslint --silent\"\n  ],\n  \"precommit\": [\n    \"npm run eslint --silent\"\n  ],\n  \"keywords\": [\n    \"file cache\",\n    \"task cache files\",\n    \"file cache\",\n    \"key par\",\n    \"key value\",\n    \"cache\"\n  ],\n  \"changelogx\": {\n    \"ignoreRegExp\": [\n      \"BLD: Release\",\n      \"DOC: Generate Changelog\",\n      \"Generated Changelog\"\n    ],\n    \"issueIDRegExp\": \"#(\\\\d+)\",\n    \"commitURL\": \"https://github.com/royriojas/file-entry-cache/commit/{0}\",\n    \"authorURL\": \"https://github.com/{0}\",\n    \"issueIDURL\": \"https://github.com/royriojas/file-entry-cache/issues/{0}\",\n    \"projectName\": \"file-entry-cache\"\n  },\n  \"devDependencies\": {\n    \"chai\": \"^4.2.0\",\n    \"changelogx\": \"^5.0.6\",\n    \"del\": \"^6.0.0\",\n    \"eslint\": \"^7.13.0\",\n    \"eslint-config-prettier\": \"^6.15.0\",\n    \"eslint-plugin-mocha\": \"^8.0.0\",\n    \"eslint-plugin-prettier\": \"^3.1.4\",\n    \"glob-expand\": \"^0.2.1\",\n    \"istanbul\": \"^0.4.5\",\n    \"mocha\": \"^8.2.1\",\n    \"precommit\": \"^1.2.2\",\n    \"prepush\": \"^3.1.11\",\n    \"prettier\": \"^2.1.2\",\n    \"watch-run\": \"^1.2.5\",\n    \"write\": \"^2.0.0\"\n  },\n  \"dependencies\": {\n    \"flat-cache\": \"^3.0.4\"\n  }\n}\n/LICENSE\u00046The MIT License (MIT)\n\nCopyright (c) 2015 Roy Riojas\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n/changelog.md!\n# file-entry-cache - Changelog\n## v6.0.1\n- **Other changes**\n  - Delete previous mtime when checksum is used and vice versa - [abcf0f9]( https://github.com/royriojas/file-entry-cache/commit/abcf0f9 ), [Milos Djermanovic](https://github.com/Milos Djermanovic), 19/02/2021 18:19:43\n\n    \n  - Adds travis jobs on ppc64le - [92e4d4a]( https://github.com/royriojas/file-entry-cache/commit/92e4d4a ), [dineshks1](https://github.com/dineshks1), 25/11/2020 04:52:11\n\n    \n## v6.0.0\n- **Refactoring**\n  - Align file-entry-cache with latest eslint - [4c6f1fb]( https://github.com/royriojas/file-entry-cache/commit/4c6f1fb ), [Roy Riojas](https://github.com/Roy Riojas), 08/11/2020 02:43:09\n\n    \n  - Upgrade deps - [8ab3257]( https://github.com/royriojas/file-entry-cache/commit/8ab3257 ), [Roy Riojas](https://github.com/Roy Riojas), 08/11/2020 02:41:53\n\n    \n  - updated packages - [3dd4231]( https://github.com/royriojas/file-entry-cache/commit/3dd4231 ), [Roy Riojas](https://github.com/Roy Riojas), 08/11/2020 02:29:37\n\n    \n  - Upgrade flat-cache to version 3 - [d7c60ef]( https://github.com/royriojas/file-entry-cache/commit/d7c60ef ), [Roy Riojas](https://github.com/Roy Riojas), 08/11/2020 01:18:04\n\n    \n## v5.0.1\n- **Bug Fixes**\n  - Fix missing checksum comparison from reconcile since now we use mtime and size by default. - [e858aa9]( https://github.com/royriojas/file-entry-cache/commit/e858aa9 ), [Roy Riojas](https://github.com/Roy Riojas), 04/02/2019 09:30:22\n\n    Old mode using checkSum can still be used by passing the `useCheckSum` parameter to the `create` or `createFromFile` methods.\n    \n## v5.0.0\n- **Refactoring**\n  - Make checksum comparison optional - [b0f9ae0]( https://github.com/royriojas/file-entry-cache/commit/b0f9ae0 ), [Roy Riojas](https://github.com/Roy Riojas), 03/02/2019 18:17:39\n\n    To determine if a file has changed we were using the checksum in the newer versions, but eslint was relying on the old behavior where we use the mtime and file size to determine if a file changed. That's why we decided to make the checksum check optional.\n    \n    To use it:\n    \n    ```js\n    // to make the cache use the checkSum check do the following:\n    var fCache = fileEntryCache.create(cacheName, dir, useCheckSum); // pass the third parameter as true\n    var otherCache = fileEntryCache.createFromFile(cacheName, useCheckSum); // pass the second parameter as true\n    ```\n    \n## v4.0.0\n- **Build Scripts Changes**\n  - use the same node versions eslint use - [563cfee]( https://github.com/royriojas/file-entry-cache/commit/563cfee ), [Roy Riojas](https://github.com/Roy Riojas), 08/01/2019 20:29:34\n\n    \n- **Other changes**\n  - Remove object-assign dependency. - [d0f598e]( https://github.com/royriojas/file-entry-cache/commit/d0f598e ), [Corey Farrell](https://github.com/Corey Farrell), 08/01/2019 20:09:51\n\n    node.js >=4 is required so object-assign is no longer needed, the native\n    Object.assign can be used instead.\n    \n## v3.0.0\n- **Build Scripts Changes**\n  - Upgrade flat-cache dep to latest - [078b0df]( https://github.com/royriojas/file-entry-cache/commit/078b0df ), [Roy Riojas](https://github.com/Roy Riojas), 08/01/2019 18:54:40\n\n    \n  - Commit new package-lock.json file - [245fe62]( https://github.com/royriojas/file-entry-cache/commit/245fe62 ), [Roy Riojas](https://github.com/Roy Riojas), 08/01/2019 17:56:21\n\n    \n- **Refactoring**\n  - add eslintrc file - [6dd32d8]( https://github.com/royriojas/file-entry-cache/commit/6dd32d8 ), [Roy Riojas](https://github.com/Roy Riojas), 22/08/2018 09:58:17\n\n    \n- **Other changes**\n  - Move variable definition out of else block - [ea05441]( https://github.com/royriojas/file-entry-cache/commit/ea05441 ), [Zakhar Shapurau](https://github.com/Zakhar Shapurau), 25/04/2017 11:19:00\n\n    \n  - Add script and cmd to test hash/checksum performance - [7f60e0a]( https://github.com/royriojas/file-entry-cache/commit/7f60e0a ), [Zakhar Shapurau](https://github.com/Zakhar Shapurau), 24/04/2017 14:43:12\n\n    \n  - Calculate md5 hexdigest instead of Adler-32 checksum - [f9e5c69]( https://github.com/royriojas/file-entry-cache/commit/f9e5c69 ), [Zakhar Shapurau](https://github.com/Zakhar Shapurau), 24/04/2017 14:43:12\n\n    \n  - How to reproduce - [4edc2dc]( https://github.com/royriojas/file-entry-cache/commit/4edc2dc ), [Zakhar Shapurau](https://github.com/Zakhar Shapurau), 24/04/2017 13:49:32\n\n    \n  - Test handling of removed files - [09d9ec5]( https://github.com/royriojas/file-entry-cache/commit/09d9ec5 ), [Zakhar Shapurau](https://github.com/Zakhar Shapurau), 19/04/2017 19:51:50\n\n    \n  - Use content checksum instead of mtime and fsize - [343b340]( https://github.com/royriojas/file-entry-cache/commit/343b340 ), [Zakhar Shapurau](https://github.com/Zakhar Shapurau), 19/04/2017 19:51:47\n\n    \n- **Revert**\n  - Revert \"How to reproduce\" - [4b4e54a]( https://github.com/royriojas/file-entry-cache/commit/4b4e54a ), [Zakhar Shapurau](https://github.com/Zakhar Shapurau), 25/04/2017 11:15:36\n\n    This reverts commit 4edc2dcec01574247bfc2e0a2fe26527332b7df3.\n    \n## v2.0.0\n- **Features**\n  - do not persist and prune removed files from cache. Relates to [#2](https://github.com/royriojas/file-entry-cache/issues/2) - [408374d]( https://github.com/royriojas/file-entry-cache/commit/408374d ), [Roy Riojas](https://github.com/Roy Riojas), 16/08/2016 13:47:58\n\n    \n## v1.3.1\n- **Build Scripts Changes**\n  - remove older node version - [0a26ac4]( https://github.com/royriojas/file-entry-cache/commit/0a26ac4 ), [Roy Riojas](https://github.com/Roy Riojas), 01/08/2016 04:09:17\n\n    \n## v1.3.0\n- **Features**\n  - Add an option to not prune non visited keys. Closes [#2](https://github.com/royriojas/file-entry-cache/issues/2) - [b1a64db]( https://github.com/royriojas/file-entry-cache/commit/b1a64db ), [Roy Riojas](https://github.com/Roy Riojas), 01/08/2016 03:52:12\n\n    \n## v1.2.4\n- **Enhancements**\n  - Expose the flat-cache instance - [f34c557]( https://github.com/royriojas/file-entry-cache/commit/f34c557 ), [royriojas](https://github.com/royriojas), 23/09/2015 18:26:33\n\n    \n## v1.2.3\n- **Build Scripts Changes**\n  - update flat-cache dep - [cc7b9ce]( https://github.com/royriojas/file-entry-cache/commit/cc7b9ce ), [royriojas](https://github.com/royriojas), 11/09/2015 16:04:44\n\n    \n## v1.2.2\n- **Build Scripts Changes**\n  - Add changelogx section to package.json - [a3916ff]( https://github.com/royriojas/file-entry-cache/commit/a3916ff ), [royriojas](https://github.com/royriojas), 11/09/2015 16:00:26\n\n    \n## v1.2.1\n- **Build Scripts Changes**\n  - update flat-cache dep - [e49b0d4]( https://github.com/royriojas/file-entry-cache/commit/e49b0d4 ), [royriojas](https://github.com/royriojas), 11/09/2015 15:55:25\n\n    \n- **Other changes**\n  - Update dependencies Replaced lodash.assign with smaller object-assign Fixed tests for windows - [0ad3000]( https://github.com/royriojas/file-entry-cache/commit/0ad3000 ), [Bogdan Chadkin](https://github.com/Bogdan Chadkin), 11/09/2015 15:44:18\n\n    \n## v1.2.0\n- **Features**\n  - analyzeFiles now returns also the files that were removed - [6ac2431]( https://github.com/royriojas/file-entry-cache/commit/6ac2431 ), [royriojas](https://github.com/royriojas), 04/09/2015 12:40:53\n\n    \n## v1.1.1\n- **Features**\n  - Add method to check if a file hasChanged - [3640e2b]( https://github.com/royriojas/file-entry-cache/commit/3640e2b ), [Roy Riojas](https://github.com/Roy Riojas), 30/08/2015 05:33:32\n\n    \n## v1.1.0\n- **Features**\n  - Create the cache directly from a file path - [a23de61]( https://github.com/royriojas/file-entry-cache/commit/a23de61 ), [Roy Riojas](https://github.com/Roy Riojas), 30/08/2015 04:41:33\n\n    \n  - Add a method to remove an entry from the filecache - [7af29fc]( https://github.com/royriojas/file-entry-cache/commit/7af29fc ), [Roy Riojas](https://github.com/Roy Riojas), 02/03/2015 23:25:32\n\n    \n  - cache module finished - [1f95544]( https://github.com/royriojas/file-entry-cache/commit/1f95544 ), [Roy Riojas](https://github.com/Roy Riojas), 02/03/2015 01:08:08\n\n    \n- **Build Scripts Changes**\n  - set the version for the first release - [7472eaa]( https://github.com/royriojas/file-entry-cache/commit/7472eaa ), [Roy Riojas](https://github.com/Roy Riojas), 02/03/2015 01:29:54\n\n    \n- **Documentation**\n  - Updated documentation - [557358f]( https://github.com/royriojas/file-entry-cache/commit/557358f ), [Roy Riojas](https://github.com/Roy Riojas), 02/03/2015 01:29:29\n\n    \n- **Other changes**\n  - Initial commit - [3d5f42b]( https://github.com/royriojas/file-entry-cache/commit/3d5f42b ), [Roy Riojas](https://github.com/Roy Riojas), 01/03/2015 21:58:29\n\n    \n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/ZmlsbC1yYW5nZUA3LjAuMQ==",
    "content": "/README.md\u001d># fill-range [![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=W8YFZ425KND68) [![NPM version](https://img.shields.io/npm/v/fill-range.svg?style=flat)](https://www.npmjs.com/package/fill-range) [![NPM monthly downloads](https://img.shields.io/npm/dm/fill-range.svg?style=flat)](https://npmjs.org/package/fill-range) [![NPM total downloads](https://img.shields.io/npm/dt/fill-range.svg?style=flat)](https://npmjs.org/package/fill-range) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/fill-range.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/fill-range)\n\n> Fill in a range of numbers or letters, optionally passing an increment or `step` to use, or create a regex-compatible range with `options.toRegex`\n\nPlease consider following this project's author, [Jon Schlinkert](https://github.com/jonschlinkert), and consider starring the project to show your :heart: and support.\n\n## Install\n\nInstall with [npm](https://www.npmjs.com/):\n\n```sh\n$ npm install --save fill-range\n```\n\n## Usage\n\nExpands numbers and letters, optionally using a `step` as the last argument. _(Numbers may be defined as JavaScript numbers or strings)_.\n\n```js\nconst fill = require('fill-range');\n// fill(from, to[, step, options]);\n\nconsole.log(fill('1', '10')); //=> ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10']\nconsole.log(fill('1', '10', { toRegex: true })); //=> [1-9]|10\n```\n\n**Params**\n\n* `from`: **{String|Number}** the number or letter to start with\n* `to`: **{String|Number}** the number or letter to end with\n* `step`: **{String|Number|Object|Function}** Optionally pass a [step](#optionsstep) to use.\n* `options`: **{Object|Function}**: See all available [options](#options)\n\n## Examples\n\nBy default, an array of values is returned.\n\n**Alphabetical ranges**\n\n```js\nconsole.log(fill('a', 'e')); //=> ['a', 'b', 'c', 'd', 'e']\nconsole.log(fill('A', 'E')); //=> [ 'A', 'B', 'C', 'D', 'E' ]\n```\n\n**Numerical ranges**\n\nNumbers can be defined as actual numbers or strings.\n\n```js\nconsole.log(fill(1, 5));     //=> [ 1, 2, 3, 4, 5 ]\nconsole.log(fill('1', '5')); //=> [ 1, 2, 3, 4, 5 ]\n```\n\n**Negative ranges**\n\nNumbers can be defined as actual numbers or strings.\n\n```js\nconsole.log(fill('-5', '-1')); //=> [ '-5', '-4', '-3', '-2', '-1' ]\nconsole.log(fill('-5', '5')); //=> [ '-5', '-4', '-3', '-2', '-1', '0', '1', '2', '3', '4', '5' ]\n```\n\n**Steps (increments)**\n\n```js\n// numerical ranges with increments\nconsole.log(fill('0', '25', 4)); //=> [ '0', '4', '8', '12', '16', '20', '24' ]\nconsole.log(fill('0', '25', 5)); //=> [ '0', '5', '10', '15', '20', '25' ]\nconsole.log(fill('0', '25', 6)); //=> [ '0', '6', '12', '18', '24' ]\n\n// alphabetical ranges with increments\nconsole.log(fill('a', 'z', 4)); //=> [ 'a', 'e', 'i', 'm', 'q', 'u', 'y' ]\nconsole.log(fill('a', 'z', 5)); //=> [ 'a', 'f', 'k', 'p', 'u', 'z' ]\nconsole.log(fill('a', 'z', 6)); //=> [ 'a', 'g', 'm', 's', 'y' ]\n```\n\n## Options\n\n### options.step\n\n**Type**: `number` (formatted as a string or number)\n\n**Default**: `undefined`\n\n**Description**: The increment to use for the range. Can be used with letters or numbers.\n\n**Example(s)**\n\n```js\n// numbers\nconsole.log(fill('1', '10', 2)); //=> [ '1', '3', '5', '7', '9' ]\nconsole.log(fill('1', '10', 3)); //=> [ '1', '4', '7', '10' ]\nconsole.log(fill('1', '10', 4)); //=> [ '1', '5', '9' ]\n\n// letters\nconsole.log(fill('a', 'z', 5)); //=> [ 'a', 'f', 'k', 'p', 'u', 'z' ]\nconsole.log(fill('a', 'z', 7)); //=> [ 'a', 'h', 'o', 'v' ]\nconsole.log(fill('a', 'z', 9)); //=> [ 'a', 'j', 's' ]\n```\n\n### options.strictRanges\n\n**Type**: `boolean`\n\n**Default**: `false`\n\n**Description**: By default, `null` is returned when an invalid range is passed. Enable this option to throw a `RangeError` on invalid ranges.\n\n**Example(s)**\n\nThe following are all invalid:\n\n```js\nfill('1.1', '2');   // decimals not supported in ranges\nfill('a', '2');     // incompatible range values\nfill(1, 10, 'foo'); // invalid \"step\" argument\n```\n\n### options.stringify\n\n**Type**: `boolean`\n\n**Default**: `undefined`\n\n**Description**: Cast all returned values to strings. By default, integers are returned as numbers.\n\n**Example(s)**\n\n```js\nconsole.log(fill(1, 5));                    //=> [ 1, 2, 3, 4, 5 ]\nconsole.log(fill(1, 5, { stringify: true })); //=> [ '1', '2', '3', '4', '5' ]\n```\n\n### options.toRegex\n\n**Type**: `boolean`\n\n**Default**: `undefined`\n\n**Description**: Create a regex-compatible source string, instead of expanding values to an array.\n\n**Example(s)**\n\n```js\n// alphabetical range\nconsole.log(fill('a', 'e', { toRegex: true })); //=> '[a-e]'\n// alphabetical with step\nconsole.log(fill('a', 'z', 3, { toRegex: true })); //=> 'a|d|g|j|m|p|s|v|y'\n// numerical range\nconsole.log(fill('1', '100', { toRegex: true })); //=> '[1-9]|[1-9][0-9]|100'\n// numerical range with zero padding\nconsole.log(fill('000001', '100000', { toRegex: true }));\n//=> '0{5}[1-9]|0{4}[1-9][0-9]|0{3}[1-9][0-9]{2}|0{2}[1-9][0-9]{3}|0[1-9][0-9]{4}|100000'\n```\n\n### options.transform\n\n**Type**: `function`\n\n**Default**: `undefined`\n\n**Description**: Customize each value in the returned array (or [string](#optionstoRegex)). _(you can also pass this function as the last argument to `fill()`)_.\n\n**Example(s)**\n\n```js\n// add zero padding\nconsole.log(fill(1, 5, value => String(value).padStart(4, '0')));\n//=> ['0001', '0002', '0003', '0004', '0005']\n```\n\n## About\n\n<details>\n<summary><strong>Contributing</strong></summary>\n\nPull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).\n\n</details>\n\n<details>\n<summary><strong>Running Tests</strong></summary>\n\nRunning and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:\n\n```sh\n$ npm install && npm test\n```\n\n</details>\n\n<details>\n<summary><strong>Building docs</strong></summary>\n\n_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_\n\nTo generate the readme, run the following command:\n\n```sh\n$ npm install -g verbose/verb#dev verb-generate-readme && verb\n```\n\n</details>\n\n### Contributors\n\n| **Commits** | **Contributor** |  \n| --- | --- |  \n| 116 | [jonschlinkert](https://github.com/jonschlinkert) |  \n| 4   | [paulmillr](https://github.com/paulmillr) |  \n| 2   | [realityking](https://github.com/realityking) |  \n| 2   | [bluelovers](https://github.com/bluelovers) |  \n| 1   | [edorivai](https://github.com/edorivai) |  \n| 1   | [wtgtybhertgeghgtwtg](https://github.com/wtgtybhertgeghgtwtg) |  \n\n### Author\n\n**Jon Schlinkert**\n\n* [GitHub Profile](https://github.com/jonschlinkert)\n* [Twitter Profile](https://twitter.com/jonschlinkert)\n* [LinkedIn Profile](https://linkedin.com/in/jonschlinkert)\n\nPlease consider supporting me on Patreon, or [start your own Patreon page](https://patreon.com/invite/bxpbvm)!\n\n<a href=\"https://www.patreon.com/jonschlinkert\">\n<img src=\"https://c5.patreon.com/external/logo/become_a_patron_button@2x.png\" height=\"50\">\n</a>\n\n### License\n\nCopyright © 2019, [Jon Schlinkert](https://github.com/jonschlinkert).\nReleased under the [MIT License](LICENSE).\n\n***\n\n_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.8.0, on April 08, 2019._/LICENSE\u0004CThe MIT License (MIT)\n\nCopyright (c) 2014-present, Jon Schlinkert.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n/package.json\u0005{\n  \"name\": \"fill-range\",\n  \"description\": \"Fill in a range of numbers or letters, optionally passing an increment or `step` to use, or create a regex-compatible range with `options.toRegex`\",\n  \"version\": \"7.0.1\",\n  \"homepage\": \"https://github.com/jonschlinkert/fill-range\",\n  \"author\": \"Jon Schlinkert (https://github.com/jonschlinkert)\",\n  \"contributors\": [\n    \"Edo Rivai (edo.rivai.nl)\",\n    \"Jon Schlinkert (http://twitter.com/jonschlinkert)\",\n    \"Paul Miller (paulmillr.com)\",\n    \"Rouven Weßling (www.rouvenwessling.de)\",\n    \"(https://github.com/wtgtybhertgeghgtwtg)\"\n  ],\n  \"repository\": \"jonschlinkert/fill-range\",\n  \"bugs\": {\n    \"url\": \"https://github.com/jonschlinkert/fill-range/issues\"\n  },\n  \"license\": \"MIT\",\n  \"files\": [\n    \"index.js\"\n  ],\n  \"main\": \"index.js\",\n  \"engines\": {\n    \"node\": \">=8\"\n  },\n  \"scripts\": {\n    \"test\": \"mocha\"\n  },\n  \"dependencies\": {\n    \"to-regex-range\": \"^5.0.1\"\n  },\n  \"devDependencies\": {\n    \"gulp-format-md\": \"^2.0.0\",\n    \"mocha\": \"^6.1.1\"\n  },\n  \"keywords\": [\n    \"alpha\",\n    \"alphabetical\",\n    \"array\",\n    \"bash\",\n    \"brace\",\n    \"expand\",\n    \"expansion\",\n    \"fill\",\n    \"glob\",\n    \"match\",\n    \"matches\",\n    \"matching\",\n    \"number\",\n    \"numerical\",\n    \"range\",\n    \"ranges\",\n    \"regex\",\n    \"sh\"\n  ],\n  \"verb\": {\n    \"toc\": false,\n    \"layout\": \"default\",\n    \"tasks\": [\n      \"readme\"\n    ],\n    \"plugins\": [\n      \"gulp-format-md\"\n    ],\n    \"lint\": {\n      \"reflinks\": true\n    }\n  }\n}\n/index.js\u0018/*!\n * fill-range <https://github.com/jonschlinkert/fill-range>\n *\n * Copyright (c) 2014-present, Jon Schlinkert.\n * Licensed under the MIT License.\n */\n\n'use strict';\n\nconst util = require('util');\nconst toRegexRange = require('to-regex-range');\n\nconst isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val);\n\nconst transform = toNumber => {\n  return value => toNumber === true ? Number(value) : String(value);\n};\n\nconst isValidValue = value => {\n  return typeof value === 'number' || (typeof value === 'string' && value !== '');\n};\n\nconst isNumber = num => Number.isInteger(+num);\n\nconst zeros = input => {\n  let value = `${input}`;\n  let index = -1;\n  if (value[0] === '-') value = value.slice(1);\n  if (value === '0') return false;\n  while (value[++index] === '0');\n  return index > 0;\n};\n\nconst stringify = (start, end, options) => {\n  if (typeof start === 'string' || typeof end === 'string') {\n    return true;\n  }\n  return options.stringify === true;\n};\n\nconst pad = (input, maxLength, toNumber) => {\n  if (maxLength > 0) {\n    let dash = input[0] === '-' ? '-' : '';\n    if (dash) input = input.slice(1);\n    input = (dash + input.padStart(dash ? maxLength - 1 : maxLength, '0'));\n  }\n  if (toNumber === false) {\n    return String(input);\n  }\n  return input;\n};\n\nconst toMaxLen = (input, maxLength) => {\n  let negative = input[0] === '-' ? '-' : '';\n  if (negative) {\n    input = input.slice(1);\n    maxLength--;\n  }\n  while (input.length < maxLength) input = '0' + input;\n  return negative ? ('-' + input) : input;\n};\n\nconst toSequence = (parts, options) => {\n  parts.negatives.sort((a, b) => a < b ? -1 : a > b ? 1 : 0);\n  parts.positives.sort((a, b) => a < b ? -1 : a > b ? 1 : 0);\n\n  let prefix = options.capture ? '' : '?:';\n  let positives = '';\n  let negatives = '';\n  let result;\n\n  if (parts.positives.length) {\n    positives = parts.positives.join('|');\n  }\n\n  if (parts.negatives.length) {\n    negatives = `-(${prefix}${parts.negatives.join('|')})`;\n  }\n\n  if (positives && negatives) {\n    result = `${positives}|${negatives}`;\n  } else {\n    result = positives || negatives;\n  }\n\n  if (options.wrap) {\n    return `(${prefix}${result})`;\n  }\n\n  return result;\n};\n\nconst toRange = (a, b, isNumbers, options) => {\n  if (isNumbers) {\n    return toRegexRange(a, b, { wrap: false, ...options });\n  }\n\n  let start = String.fromCharCode(a);\n  if (a === b) return start;\n\n  let stop = String.fromCharCode(b);\n  return `[${start}-${stop}]`;\n};\n\nconst toRegex = (start, end, options) => {\n  if (Array.isArray(start)) {\n    let wrap = options.wrap === true;\n    let prefix = options.capture ? '' : '?:';\n    return wrap ? `(${prefix}${start.join('|')})` : start.join('|');\n  }\n  return toRegexRange(start, end, options);\n};\n\nconst rangeError = (...args) => {\n  return new RangeError('Invalid range arguments: ' + util.inspect(...args));\n};\n\nconst invalidRange = (start, end, options) => {\n  if (options.strictRanges === true) throw rangeError([start, end]);\n  return [];\n};\n\nconst invalidStep = (step, options) => {\n  if (options.strictRanges === true) {\n    throw new TypeError(`Expected step \"${step}\" to be a number`);\n  }\n  return [];\n};\n\nconst fillNumbers = (start, end, step = 1, options = {}) => {\n  let a = Number(start);\n  let b = Number(end);\n\n  if (!Number.isInteger(a) || !Number.isInteger(b)) {\n    if (options.strictRanges === true) throw rangeError([start, end]);\n    return [];\n  }\n\n  // fix negative zero\n  if (a === 0) a = 0;\n  if (b === 0) b = 0;\n\n  let descending = a > b;\n  let startString = String(start);\n  let endString = String(end);\n  let stepString = String(step);\n  step = Math.max(Math.abs(step), 1);\n\n  let padded = zeros(startString) || zeros(endString) || zeros(stepString);\n  let maxLen = padded ? Math.max(startString.length, endString.length, stepString.length) : 0;\n  let toNumber = padded === false && stringify(start, end, options) === false;\n  let format = options.transform || transform(toNumber);\n\n  if (options.toRegex && step === 1) {\n    return toRange(toMaxLen(start, maxLen), toMaxLen(end, maxLen), true, options);\n  }\n\n  let parts = { negatives: [], positives: [] };\n  let push = num => parts[num < 0 ? 'negatives' : 'positives'].push(Math.abs(num));\n  let range = [];\n  let index = 0;\n\n  while (descending ? a >= b : a <= b) {\n    if (options.toRegex === true && step > 1) {\n      push(a);\n    } else {\n      range.push(pad(format(a, index), maxLen, toNumber));\n    }\n    a = descending ? a - step : a + step;\n    index++;\n  }\n\n  if (options.toRegex === true) {\n    return step > 1\n      ? toSequence(parts, options)\n      : toRegex(range, null, { wrap: false, ...options });\n  }\n\n  return range;\n};\n\nconst fillLetters = (start, end, step = 1, options = {}) => {\n  if ((!isNumber(start) && start.length > 1) || (!isNumber(end) && end.length > 1)) {\n    return invalidRange(start, end, options);\n  }\n\n\n  let format = options.transform || (val => String.fromCharCode(val));\n  let a = `${start}`.charCodeAt(0);\n  let b = `${end}`.charCodeAt(0);\n\n  let descending = a > b;\n  let min = Math.min(a, b);\n  let max = Math.max(a, b);\n\n  if (options.toRegex && step === 1) {\n    return toRange(min, max, false, options);\n  }\n\n  let range = [];\n  let index = 0;\n\n  while (descending ? a >= b : a <= b) {\n    range.push(format(a, index));\n    a = descending ? a - step : a + step;\n    index++;\n  }\n\n  if (options.toRegex === true) {\n    return toRegex(range, null, { wrap: false, options });\n  }\n\n  return range;\n};\n\nconst fill = (start, end, step, options = {}) => {\n  if (end == null && isValidValue(start)) {\n    return [start];\n  }\n\n  if (!isValidValue(start) || !isValidValue(end)) {\n    return invalidRange(start, end, options);\n  }\n\n  if (typeof step === 'function') {\n    return fill(start, end, 1, { transform: step });\n  }\n\n  if (isObject(step)) {\n    return fill(start, end, 0, step);\n  }\n\n  let opts = { ...options };\n  if (opts.capture === true) opts.wrap = true;\n  step = step || opts.step || 1;\n\n  if (!isNumber(step)) {\n    if (step != null && !isObject(step)) return invalidStep(step, opts);\n    return fill(start, end, 1, step);\n  }\n\n  if (isNumber(start) && isNumber(end)) {\n    return fillNumbers(start, end, step, opts);\n  }\n\n  return fillLetters(start, end, Math.max(Math.abs(step), 1), opts);\n};\n\nmodule.exports = fill;\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/ZmluYWxoYW5kbGVyQDEuMi4w",
    "content": "/README.md\u0010%# finalhandler\n\n[![NPM Version][npm-image]][npm-url]\n[![NPM Downloads][downloads-image]][downloads-url]\n[![Node.js Version][node-image]][node-url]\n[![Build Status][github-actions-ci-image]][github-actions-ci-url]\n[![Test Coverage][coveralls-image]][coveralls-url]\n\nNode.js function to invoke as the final step to respond to HTTP request.\n\n## Installation\n\nThis is a [Node.js](https://nodejs.org/en/) module available through the\n[npm registry](https://www.npmjs.com/). Installation is done using the\n[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally):\n\n```sh\n$ npm install finalhandler\n```\n\n## API\n\n```js\nvar finalhandler = require('finalhandler')\n```\n\n### finalhandler(req, res, [options])\n\nReturns function to be invoked as the final step for the given `req` and `res`.\nThis function is to be invoked as `fn(err)`. If `err` is falsy, the handler will\nwrite out a 404 response to the `res`. If it is truthy, an error response will\nbe written out to the `res` or `res` will be terminated if a response has already\nstarted.\n\nWhen an error is written, the following information is added to the response:\n\n  * The `res.statusCode` is set from `err.status` (or `err.statusCode`). If\n    this value is outside the 4xx or 5xx range, it will be set to 500.\n  * The `res.statusMessage` is set according to the status code.\n  * The body will be the HTML of the status code message if `env` is\n    `'production'`, otherwise will be `err.stack`.\n  * Any headers specified in an `err.headers` object.\n\nThe final handler will also unpipe anything from `req` when it is invoked.\n\n#### options.env\n\nBy default, the environment is determined by `NODE_ENV` variable, but it can be\noverridden by this option.\n\n#### options.onerror\n\nProvide a function to be called with the `err` when it exists. Can be used for\nwriting errors to a central location without excessive function generation. Called\nas `onerror(err, req, res)`.\n\n## Examples\n\n### always 404\n\n```js\nvar finalhandler = require('finalhandler')\nvar http = require('http')\n\nvar server = http.createServer(function (req, res) {\n  var done = finalhandler(req, res)\n  done()\n})\n\nserver.listen(3000)\n```\n\n### perform simple action\n\n```js\nvar finalhandler = require('finalhandler')\nvar fs = require('fs')\nvar http = require('http')\n\nvar server = http.createServer(function (req, res) {\n  var done = finalhandler(req, res)\n\n  fs.readFile('index.html', function (err, buf) {\n    if (err) return done(err)\n    res.setHeader('Content-Type', 'text/html')\n    res.end(buf)\n  })\n})\n\nserver.listen(3000)\n```\n\n### use with middleware-style functions\n\n```js\nvar finalhandler = require('finalhandler')\nvar http = require('http')\nvar serveStatic = require('serve-static')\n\nvar serve = serveStatic('public')\n\nvar server = http.createServer(function (req, res) {\n  var done = finalhandler(req, res)\n  serve(req, res, done)\n})\n\nserver.listen(3000)\n```\n\n### keep log of all errors\n\n```js\nvar finalhandler = require('finalhandler')\nvar fs = require('fs')\nvar http = require('http')\n\nvar server = http.createServer(function (req, res) {\n  var done = finalhandler(req, res, { onerror: logerror })\n\n  fs.readFile('index.html', function (err, buf) {\n    if (err) return done(err)\n    res.setHeader('Content-Type', 'text/html')\n    res.end(buf)\n  })\n})\n\nserver.listen(3000)\n\nfunction logerror (err) {\n  console.error(err.stack || err.toString())\n}\n```\n\n## License\n\n[MIT](LICENSE)\n\n[npm-image]: https://img.shields.io/npm/v/finalhandler.svg\n[npm-url]: https://npmjs.org/package/finalhandler\n[node-image]: https://img.shields.io/node/v/finalhandler.svg\n[node-url]: https://nodejs.org/en/download\n[coveralls-image]: https://img.shields.io/coveralls/pillarjs/finalhandler.svg\n[coveralls-url]: https://coveralls.io/r/pillarjs/finalhandler?branch=master\n[downloads-image]: https://img.shields.io/npm/dm/finalhandler.svg\n[downloads-url]: https://npmjs.org/package/finalhandler\n[github-actions-ci-image]: https://img.shields.io/github/workflow/status/pillarjs/finalhandler/ci/master?label=ci\n[github-actions-ci-url]: https://github.com/jshttp/pillarjs/finalhandler?query=workflow%3Aci\n/SECURITY.md\u0004# Security Policies and Procedures\n\n## Reporting a Bug\n\nThe `finalhandler` team and community take all security bugs seriously. Thank\nyou for improving the security of Express. We appreciate your efforts and\nresponsible disclosure and will make every effort to acknowledge your\ncontributions.\n\nReport security bugs by emailing the current owner(s) of `finalhandler`. This\ninformation can be found in the npm registry using the command\n`npm owner ls finalhandler`.\nIf unsure or unable to get the information from the above, open an issue\nin the [project issue tracker](https://github.com/pillarjs/finalhandler/issues)\nasking for the current contact information.\n\nTo ensure the timely response to your report, please ensure that the entirety\nof the report is contained within the email body and not solely behind a web\nlink or an attachment.\n\nAt least one owner will acknowledge your email within 48 hours, and will send a\nmore detailed response within 48 hours indicating the next steps in handling\nyour report. After the initial reply to your report, the owners will\nendeavor to keep you informed of the progress towards a fix and full\nannouncement, and may ask for additional information or guidance.\n/index.js\u001a!/*!\n * finalhandler\n * Copyright(c) 2014-2022 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar debug = require('debug')('finalhandler')\nvar encodeUrl = require('encodeurl')\nvar escapeHtml = require('escape-html')\nvar onFinished = require('on-finished')\nvar parseUrl = require('parseurl')\nvar statuses = require('statuses')\nvar unpipe = require('unpipe')\n\n/**\n * Module variables.\n * @private\n */\n\nvar DOUBLE_SPACE_REGEXP = /\\x20{2}/g\nvar NEWLINE_REGEXP = /\\n/g\n\n/* istanbul ignore next */\nvar defer = typeof setImmediate === 'function'\n  ? setImmediate\n  : function (fn) { process.nextTick(fn.bind.apply(fn, arguments)) }\nvar isFinished = onFinished.isFinished\n\n/**\n * Create a minimal HTML document.\n *\n * @param {string} message\n * @private\n */\n\nfunction createHtmlDocument (message) {\n  var body = escapeHtml(message)\n    .replace(NEWLINE_REGEXP, '<br>')\n    .replace(DOUBLE_SPACE_REGEXP, ' &nbsp;')\n\n  return '<!DOCTYPE html>\\n' +\n    '<html lang=\"en\">\\n' +\n    '<head>\\n' +\n    '<meta charset=\"utf-8\">\\n' +\n    '<title>Error</title>\\n' +\n    '</head>\\n' +\n    '<body>\\n' +\n    '<pre>' + body + '</pre>\\n' +\n    '</body>\\n' +\n    '</html>\\n'\n}\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = finalhandler\n\n/**\n * Create a function to handle the final response.\n *\n * @param {Request} req\n * @param {Response} res\n * @param {Object} [options]\n * @return {Function}\n * @public\n */\n\nfunction finalhandler (req, res, options) {\n  var opts = options || {}\n\n  // get environment\n  var env = opts.env || process.env.NODE_ENV || 'development'\n\n  // get error callback\n  var onerror = opts.onerror\n\n  return function (err) {\n    var headers\n    var msg\n    var status\n\n    // ignore 404 on in-flight response\n    if (!err && headersSent(res)) {\n      debug('cannot 404 after headers sent')\n      return\n    }\n\n    // unhandled error\n    if (err) {\n      // respect status code from error\n      status = getErrorStatusCode(err)\n\n      if (status === undefined) {\n        // fallback to status code on response\n        status = getResponseStatusCode(res)\n      } else {\n        // respect headers from error\n        headers = getErrorHeaders(err)\n      }\n\n      // get error message\n      msg = getErrorMessage(err, status, env)\n    } else {\n      // not found\n      status = 404\n      msg = 'Cannot ' + req.method + ' ' + encodeUrl(getResourceName(req))\n    }\n\n    debug('default %s', status)\n\n    // schedule onerror callback\n    if (err && onerror) {\n      defer(onerror, err, req, res)\n    }\n\n    // cannot actually respond\n    if (headersSent(res)) {\n      debug('cannot %d after headers sent', status)\n      req.socket.destroy()\n      return\n    }\n\n    // send response\n    send(req, res, status, headers, msg)\n  }\n}\n\n/**\n * Get headers from Error object.\n *\n * @param {Error} err\n * @return {object}\n * @private\n */\n\nfunction getErrorHeaders (err) {\n  if (!err.headers || typeof err.headers !== 'object') {\n    return undefined\n  }\n\n  var headers = Object.create(null)\n  var keys = Object.keys(err.headers)\n\n  for (var i = 0; i < keys.length; i++) {\n    var key = keys[i]\n    headers[key] = err.headers[key]\n  }\n\n  return headers\n}\n\n/**\n * Get message from Error object, fallback to status message.\n *\n * @param {Error} err\n * @param {number} status\n * @param {string} env\n * @return {string}\n * @private\n */\n\nfunction getErrorMessage (err, status, env) {\n  var msg\n\n  if (env !== 'production') {\n    // use err.stack, which typically includes err.message\n    msg = err.stack\n\n    // fallback to err.toString() when possible\n    if (!msg && typeof err.toString === 'function') {\n      msg = err.toString()\n    }\n  }\n\n  return msg || statuses.message[status]\n}\n\n/**\n * Get status code from Error object.\n *\n * @param {Error} err\n * @return {number}\n * @private\n */\n\nfunction getErrorStatusCode (err) {\n  // check err.status\n  if (typeof err.status === 'number' && err.status >= 400 && err.status < 600) {\n    return err.status\n  }\n\n  // check err.statusCode\n  if (typeof err.statusCode === 'number' && err.statusCode >= 400 && err.statusCode < 600) {\n    return err.statusCode\n  }\n\n  return undefined\n}\n\n/**\n * Get resource name for the request.\n *\n * This is typically just the original pathname of the request\n * but will fallback to \"resource\" is that cannot be determined.\n *\n * @param {IncomingMessage} req\n * @return {string}\n * @private\n */\n\nfunction getResourceName (req) {\n  try {\n    return parseUrl.original(req).pathname\n  } catch (e) {\n    return 'resource'\n  }\n}\n\n/**\n * Get status code from response.\n *\n * @param {OutgoingMessage} res\n * @return {number}\n * @private\n */\n\nfunction getResponseStatusCode (res) {\n  var status = res.statusCode\n\n  // default status code to 500 if outside valid range\n  if (typeof status !== 'number' || status < 400 || status > 599) {\n    status = 500\n  }\n\n  return status\n}\n\n/**\n * Determine if the response headers have been sent.\n *\n * @param {object} res\n * @returns {boolean}\n * @private\n */\n\nfunction headersSent (res) {\n  return typeof res.headersSent !== 'boolean'\n    ? Boolean(res._header)\n    : res.headersSent\n}\n\n/**\n * Send response.\n *\n * @param {IncomingMessage} req\n * @param {OutgoingMessage} res\n * @param {number} status\n * @param {object} headers\n * @param {string} message\n * @private\n */\n\nfunction send (req, res, status, headers, message) {\n  function write () {\n    // response body\n    var body = createHtmlDocument(message)\n\n    // response status\n    res.statusCode = status\n    res.statusMessage = statuses.message[status]\n\n    // remove any content headers\n    res.removeHeader('Content-Encoding')\n    res.removeHeader('Content-Language')\n    res.removeHeader('Content-Range')\n\n    // response headers\n    setHeaders(res, headers)\n\n    // security headers\n    res.setHeader('Content-Security-Policy', \"default-src 'none'\")\n    res.setHeader('X-Content-Type-Options', 'nosniff')\n\n    // standard headers\n    res.setHeader('Content-Type', 'text/html; charset=utf-8')\n    res.setHeader('Content-Length', Buffer.byteLength(body, 'utf8'))\n\n    if (req.method === 'HEAD') {\n      res.end()\n      return\n    }\n\n    res.end(body, 'utf8')\n  }\n\n  if (isFinished(req)) {\n    write()\n    return\n  }\n\n  // unpipe everything from the request\n  unpipe(req)\n\n  // flush the request\n  onFinished(req, write)\n  req.resume()\n}\n\n/**\n * Set response headers from an object.\n *\n * @param {OutgoingMessage} res\n * @param {object} headers\n * @private\n */\n\nfunction setHeaders (res, headers) {\n  if (!headers) {\n    return\n  }\n\n  var keys = Object.keys(headers)\n  for (var i = 0; i < keys.length; i++) {\n    var key = keys[i]\n    res.setHeader(key, headers[key])\n  }\n}\n/package.json\u0004{\n  \"name\": \"finalhandler\",\n  \"description\": \"Node.js final http responder\",\n  \"version\": \"1.2.0\",\n  \"author\": \"Douglas Christopher Wilson <doug@somethingdoug.com>\",\n  \"license\": \"MIT\",\n  \"repository\": \"pillarjs/finalhandler\",\n  \"dependencies\": {\n    \"debug\": \"2.6.9\",\n    \"encodeurl\": \"~1.0.2\",\n    \"escape-html\": \"~1.0.3\",\n    \"on-finished\": \"2.4.1\",\n    \"parseurl\": \"~1.3.3\",\n    \"statuses\": \"2.0.1\",\n    \"unpipe\": \"~1.0.0\"\n  },\n  \"devDependencies\": {\n    \"eslint\": \"7.32.0\",\n    \"eslint-config-standard\": \"14.1.1\",\n    \"eslint-plugin-import\": \"2.25.4\",\n    \"eslint-plugin-markdown\": \"2.2.1\",\n    \"eslint-plugin-node\": \"11.1.0\",\n    \"eslint-plugin-promise\": \"5.2.0\",\n    \"eslint-plugin-standard\": \"4.1.0\",\n    \"mocha\": \"9.2.2\",\n    \"nyc\": \"15.1.0\",\n    \"readable-stream\": \"2.3.6\",\n    \"safe-buffer\": \"5.2.1\",\n    \"supertest\": \"6.2.2\"\n  },\n  \"files\": [\n    \"LICENSE\",\n    \"HISTORY.md\",\n    \"SECURITY.md\",\n    \"index.js\"\n  ],\n  \"engines\": {\n    \"node\": \">= 0.8\"\n  },\n  \"scripts\": {\n    \"lint\": \"eslint .\",\n    \"test\": \"mocha --reporter spec --bail --check-leaks test/\",\n    \"test-ci\": \"nyc --reporter=lcovonly --reporter=text npm test\",\n    \"test-cov\": \"nyc --reporter=html --reporter=text npm test\"\n  }\n}\n/LICENSE\u0004_(The MIT License)\n\nCopyright (c) 2014-2022 Douglas Christopher Wilson <doug@somethingdoug.com>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n/HISTORY.md\u00101.2.0 / 2022-03-22\n==================\n\n  * Remove set content headers that break response\n  * deps: on-finished@2.4.1\n  * deps: statuses@2.0.1\n    - Rename `425 Unordered Collection` to standard `425 Too Early`\n\n1.1.2 / 2019-05-09\n==================\n\n  * Set stricter `Content-Security-Policy` header\n  * deps: parseurl@~1.3.3\n  * deps: statuses@~1.5.0\n\n1.1.1 / 2018-03-06\n==================\n\n  * Fix 404 output for bad / missing pathnames\n  * deps: encodeurl@~1.0.2\n    - Fix encoding `%` as last character\n  * deps: statuses@~1.4.0\n\n1.1.0 / 2017-09-24\n==================\n\n  * Use `res.headersSent` when available\n\n1.0.6 / 2017-09-22\n==================\n\n  * deps: debug@2.6.9\n\n1.0.5 / 2017-09-15\n==================\n\n  * deps: parseurl@~1.3.2\n    - perf: reduce overhead for full URLs\n    - perf: unroll the \"fast-path\" `RegExp`\n\n1.0.4 / 2017-08-03\n==================\n\n  * deps: debug@2.6.8\n\n1.0.3 / 2017-05-16\n==================\n\n  * deps: debug@2.6.7\n    - deps: ms@2.0.0\n\n1.0.2 / 2017-04-22\n==================\n\n  * deps: debug@2.6.4\n    - deps: ms@0.7.3\n\n1.0.1 / 2017-03-21\n==================\n\n  * Fix missing `</html>` in HTML document\n  * deps: debug@2.6.3\n    - Fix: `DEBUG_MAX_ARRAY_LENGTH`\n\n1.0.0 / 2017-02-15\n==================\n\n  * Fix exception when `err` cannot be converted to a string\n  * Fully URL-encode the pathname in the 404 message\n  * Only include the pathname in the 404 message\n  * Send complete HTML document\n  * Set `Content-Security-Policy: default-src 'self'` header\n  * deps: debug@2.6.1\n    - Allow colors in workers\n    - Deprecated `DEBUG_FD` environment variable set to `3` or higher\n    - Fix error when running under React Native\n    - Use same color for same namespace\n    - deps: ms@0.7.2\n\n0.5.1 / 2016-11-12\n==================\n\n  * Fix exception when `err.headers` is not an object\n  * deps: statuses@~1.3.1\n  * perf: hoist regular expressions\n  * perf: remove duplicate validation path\n\n0.5.0 / 2016-06-15\n==================\n\n  * Change invalid or non-numeric status code to 500\n  * Overwrite status message to match set status code\n  * Prefer `err.statusCode` if `err.status` is invalid\n  * Set response headers from `err.headers` object\n  * Use `statuses` instead of `http` module for status messages\n    - Includes all defined status messages\n\n0.4.1 / 2015-12-02\n==================\n\n  * deps: escape-html@~1.0.3\n    - perf: enable strict mode\n    - perf: optimize string replacement\n    - perf: use faster string coercion\n\n0.4.0 / 2015-06-14\n==================\n\n  * Fix a false-positive when unpiping in Node.js 0.8\n  * Support `statusCode` property on `Error` objects\n  * Use `unpipe` module for unpiping requests\n  * deps: escape-html@1.0.2\n  * deps: on-finished@~2.3.0\n    - Add defined behavior for HTTP `CONNECT` requests\n    - Add defined behavior for HTTP `Upgrade` requests\n    - deps: ee-first@1.1.1\n  * perf: enable strict mode\n  * perf: remove argument reassignment\n\n0.3.6 / 2015-05-11\n==================\n\n  * deps: debug@~2.2.0\n    - deps: ms@0.7.1\n\n0.3.5 / 2015-04-22\n==================\n\n  * deps: on-finished@~2.2.1\n    - Fix `isFinished(req)` when data buffered\n\n0.3.4 / 2015-03-15\n==================\n\n  * deps: debug@~2.1.3\n    - Fix high intensity foreground color for bold\n    - deps: ms@0.7.0\n\n0.3.3 / 2015-01-01\n==================\n\n  * deps: debug@~2.1.1\n  * deps: on-finished@~2.2.0\n\n0.3.2 / 2014-10-22\n==================\n\n  * deps: on-finished@~2.1.1\n    - Fix handling of pipelined requests\n\n0.3.1 / 2014-10-16\n==================\n\n  * deps: debug@~2.1.0\n    - Implement `DEBUG_FD` env variable support\n\n0.3.0 / 2014-09-17\n==================\n\n  * Terminate in progress response only on error\n  * Use `on-finished` to determine request status\n\n0.2.0 / 2014-09-03\n==================\n\n  * Set `X-Content-Type-Options: nosniff` header\n  * deps: debug@~2.0.0\n\n0.1.0 / 2014-07-16\n==================\n\n  * Respond after request fully read\n    - prevents hung responses and socket hang ups\n  * deps: debug@1.0.4\n\n0.0.3 / 2014-07-11\n==================\n\n  * deps: debug@1.0.3\n    - Add support for multiple wildcards in namespaces\n\n0.0.2 / 2014-06-19\n==================\n\n  * Handle invalid status codes\n\n0.0.1 / 2014-06-05\n==================\n\n  * deps: debug@1.0.2\n\n0.0.0 / 2014-06-05\n==================\n\n  * Extracted from connect/express\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/ZmxhdC1jYWNoZUAzLjAuNA==",
    "content": "/README.md\n# flat-cache\n> A stupidly simple key/value storage using files to persist the data\n\n[![NPM Version](http://img.shields.io/npm/v/flat-cache.svg?style=flat)](https://npmjs.org/package/flat-cache)\n[![Build Status](https://api.travis-ci.org/royriojas/flat-cache.svg?branch=master)](https://travis-ci.org/royriojas/flat-cache)\n\n## install\n\n```bash\nnpm i --save flat-cache\n```\n\n## Usage\n\n```js\nvar flatCache = require('flat-cache')\n// loads the cache, if one does not exists for the given\n// Id a new one will be prepared to be created\nvar cache = flatCache.load('cacheId');\n\n// sets a key on the cache\ncache.setKey('key', { foo: 'var' });\n\n// get a key from the cache\ncache.getKey('key') // { foo: 'var' }\n\n// fetch the entire persisted object\ncache.all() // { 'key': { foo: 'var' } }\n\n// remove a key\ncache.removeKey('key'); // removes a key from the cache\n\n// save it to disk\ncache.save(); // very important, if you don't save no changes will be persisted.\n// cache.save( true /* noPrune */) // can be used to prevent the removal of non visited keys\n\n// loads the cache from a given directory, if one does\n// not exists for the given Id a new one will be prepared to be created\nvar cache = flatCache.load('cacheId', path.resolve('./path/to/folder'));\n\n// The following methods are useful to clear the cache\n// delete a given cache\nflatCache.clearCacheById('cacheId') // removes the cacheId document if one exists.\n\n// delete all cache\nflatCache.clearAll(); // remove the cache directory\n```\n\n## Motivation for this module\n\nI needed a super simple and dumb **in-memory cache** with optional disk persistance in order to make\na script that will beutify files with `esformatter` only execute on the files that were changed since the last run.\nTo make that possible we need to store the `fileSize` and `modificationTime` of the files. So a simple `key/value`\nstorage was needed and Bam! this module was born.\n\n## Important notes\n- If no directory is especified when the `load` method is called, a folder named `.cache` will be created\n  inside the module directory when `cache.save` is called. If you're committing your `node_modules` to any vcs, you\n  might want to ignore the default `.cache` folder, or specify a custom directory.\n- The values set on the keys of the cache should be `stringify-able` ones, meaning no circular references\n- All the changes to the cache state are done to memory\n- I could have used a timer or `Object.observe` to deliver the changes to disk, but I wanted to keep this module\n  intentionally dumb and simple\n- Non visited keys are removed when `cache.save()` is called. If this is not desired, you can pass `true` to the save call\n  like: `cache.save( true /* noPrune */ )`.\n\n## License\n\nMIT\n\n## Changelog\n\n[changelog](./changelog.md)\n/package.json\n{\n  \"name\": \"flat-cache\",\n  \"version\": \"3.0.4\",\n  \"description\": \"A stupidly simple key/value storage using files to persist some data\",\n  \"repository\": \"royriojas/flat-cache\",\n  \"license\": \"MIT\",\n  \"author\": {\n    \"name\": \"Roy Riojas\",\n    \"url\": \"http://royriojas.com\"\n  },\n  \"main\": \"src/cache.js\",\n  \"files\": [\n    \"src/cache.js\",\n    \"src/del.js\",\n    \"src/utils.js\"\n  ],\n  \"engines\": {\n    \"node\": \"^10.12.0 || >=12.0.0\"\n  },\n  \"precommit\": [\n    \"npm run verify --silent\"\n  ],\n  \"prepush\": [\n    \"npm run verify --silent\"\n  ],\n  \"scripts\": {\n    \"eslint\": \"eslint --cache --cache-location=node_modules/.cache/ ./src/**/*.js ./test/**/*.js\",\n    \"eslint-fix\": \"npm run eslint -- --fix\",\n    \"autofix\": \"npm run eslint-fix\",\n    \"check\": \"npm run eslint\",\n    \"verify\": \"npm run eslint && npm run test:cache\",\n    \"install-hooks\": \"prepush install && changelogx install-hook && precommit install\",\n    \"changelog\": \"changelogx -f markdown -o ./changelog.md\",\n    \"do-changelog\": \"npm run changelog && git add ./changelog.md && git commit -m 'DOC: Generate changelog' --no-verify\",\n    \"pre-v\": \"npm run verify\",\n    \"post-v\": \"npm run do-changelog && git push --no-verify && git push --tags --no-verify\",\n    \"bump-major\": \"npm run pre-v && npm version major -m 'BLD: Release v%s' && npm run post-v\",\n    \"bump-minor\": \"npm run pre-v && npm version minor -m 'BLD: Release v%s' && npm run post-v\",\n    \"bump-patch\": \"npm run pre-v && npm version patch -m 'BLD: Release v%s' && npm run post-v\",\n    \"test:cache\": \"mocha -R spec test/specs\",\n    \"test\": \"npm run verify --silent\",\n    \"cover\": \"istanbul cover test/runner.js html text-summary\",\n    \"watch\": \"watch-run -i -p 'test/specs/**/*.js' istanbul cover test/runner.js html text-summary\"\n  },\n  \"keywords\": [\n    \"json cache\",\n    \"simple cache\",\n    \"file cache\",\n    \"key par\",\n    \"key value\",\n    \"cache\"\n  ],\n  \"changelogx\": {\n    \"ignoreRegExp\": [\n      \"BLD: Release\",\n      \"DOC: Generate Changelog\",\n      \"Generated Changelog\"\n    ],\n    \"issueIDRegExp\": \"#(\\\\d+)\",\n    \"commitURL\": \"https://github.com/royriojas/flat-cache/commit/{0}\",\n    \"authorURL\": \"https://github.com/{0}\",\n    \"issueIDURL\": \"https://github.com/royriojas/flat-cache/issues/{0}\",\n    \"projectName\": \"flat-cache\"\n  },\n  \"devDependencies\": {\n    \"chai\": \"^4.2.0\",\n    \"changelogx\": \"^5.0.6\",\n    \"eslint\": \"^7.13.0\",\n    \"eslint-config-prettier\": \"^6.15.0\",\n    \"eslint-plugin-mocha\": \"^8.0.0\",\n    \"eslint-plugin-prettier\": \"^3.1.4\",\n    \"glob-expand\": \"^0.2.1\",\n    \"istanbul\": \"^0.4.5\",\n    \"mocha\": \"^8.2.1\",\n    \"precommit\": \"^1.2.2\",\n    \"prepush\": \"^3.1.11\",\n    \"prettier\": \"^2.1.2\",\n    \"watch-run\": \"^1.2.5\"\n  },\n  \"dependencies\": {\n    \"flatted\": \"^3.1.0\",\n    \"rimraf\": \"^3.0.2\"\n  }\n}\n/src/cache.js\u0015var path = require('path');\nvar fs = require('fs');\nvar utils = require('./utils');\nvar del = require('./del');\nvar writeJSON = utils.writeJSON;\n\nvar cache = {\n  /**\n   * Load a cache identified by the given Id. If the element does not exists, then initialize an empty\n   * cache storage. If specified `cacheDir` will be used as the directory to persist the data to. If omitted\n   * then the cache module directory `./cache` will be used instead\n   *\n   * @method load\n   * @param docId {String} the id of the cache, would also be used as the name of the file cache\n   * @param [cacheDir] {String} directory for the cache entry\n   */\n  load: function (docId, cacheDir) {\n    var me = this;\n\n    me._visited = {};\n    me._persisted = {};\n    me._pathToFile = cacheDir ? path.resolve(cacheDir, docId) : path.resolve(__dirname, '../.cache/', docId);\n\n    if (fs.existsSync(me._pathToFile)) {\n      me._persisted = utils.tryParse(me._pathToFile, {});\n    }\n  },\n\n  /**\n   * Load the cache from the provided file\n   * @method loadFile\n   * @param  {String} pathToFile the path to the file containing the info for the cache\n   */\n  loadFile: function (pathToFile) {\n    var me = this;\n    var dir = path.dirname(pathToFile);\n    var fName = path.basename(pathToFile);\n\n    me.load(fName, dir);\n  },\n\n  /**\n   * Returns the entire persisted object\n   * @method all\n   * @returns {*}\n   */\n  all: function () {\n    return this._persisted;\n  },\n\n  keys: function () {\n    return Object.keys(this._persisted);\n  },\n  /**\n   * sets a key to a given value\n   * @method setKey\n   * @param key {string} the key to set\n   * @param value {object} the value of the key. Could be any object that can be serialized with JSON.stringify\n   */\n  setKey: function (key, value) {\n    this._visited[key] = true;\n    this._persisted[key] = value;\n  },\n  /**\n   * remove a given key from the cache\n   * @method removeKey\n   * @param key {String} the key to remove from the object\n   */\n  removeKey: function (key) {\n    delete this._visited[key]; // esfmt-ignore-line\n    delete this._persisted[key]; // esfmt-ignore-line\n  },\n  /**\n   * Return the value of the provided key\n   * @method getKey\n   * @param key {String} the name of the key to retrieve\n   * @returns {*} the value from the key\n   */\n  getKey: function (key) {\n    this._visited[key] = true;\n    return this._persisted[key];\n  },\n\n  /**\n   * Remove keys that were not accessed/set since the\n   * last time the `prune` method was called.\n   * @method _prune\n   * @private\n   */\n  _prune: function () {\n    var me = this;\n    var obj = {};\n\n    var keys = Object.keys(me._visited);\n\n    // no keys visited for either get or set value\n    if (keys.length === 0) {\n      return;\n    }\n\n    keys.forEach(function (key) {\n      obj[key] = me._persisted[key];\n    });\n\n    me._visited = {};\n    me._persisted = obj;\n  },\n\n  /**\n   * Save the state of the cache identified by the docId to disk\n   * as a JSON structure\n   * @param [noPrune=false] {Boolean} whether to remove from cache the non visited files\n   * @method save\n   */\n  save: function (noPrune) {\n    var me = this;\n\n    !noPrune && me._prune();\n    writeJSON(me._pathToFile, me._persisted);\n  },\n\n  /**\n   * remove the file where the cache is persisted\n   * @method removeCacheFile\n   * @return {Boolean} true or false if the file was successfully deleted\n   */\n  removeCacheFile: function () {\n    return del(this._pathToFile);\n  },\n  /**\n   * Destroy the file cache and cache content.\n   * @method destroy\n   */\n  destroy: function () {\n    var me = this;\n    me._visited = {};\n    me._persisted = {};\n\n    me.removeCacheFile();\n  },\n};\n\nmodule.exports = {\n  /**\n   * Alias for create. Should be considered depreacted. Will be removed in next releases\n   *\n   * @method load\n   * @param docId {String} the id of the cache, would also be used as the name of the file cache\n   * @param [cacheDir] {String} directory for the cache entry\n   * @returns {cache} cache instance\n   */\n  load: function (docId, cacheDir) {\n    return this.create(docId, cacheDir);\n  },\n\n  /**\n   * Load a cache identified by the given Id. If the element does not exists, then initialize an empty\n   * cache storage.\n   *\n   * @method create\n   * @param docId {String} the id of the cache, would also be used as the name of the file cache\n   * @param [cacheDir] {String} directory for the cache entry\n   * @returns {cache} cache instance\n   */\n  create: function (docId, cacheDir) {\n    var obj = Object.create(cache);\n    obj.load(docId, cacheDir);\n    return obj;\n  },\n\n  createFromFile: function (filePath) {\n    var obj = Object.create(cache);\n    obj.loadFile(filePath);\n    return obj;\n  },\n  /**\n   * Clear the cache identified by the given id. Caches stored in a different cache directory can be deleted directly\n   *\n   * @method clearCache\n   * @param docId {String} the id of the cache, would also be used as the name of the file cache\n   * @param cacheDir {String} the directory where the cache file was written\n   * @returns {Boolean} true if the cache folder was deleted. False otherwise\n   */\n  clearCacheById: function (docId, cacheDir) {\n    var filePath = cacheDir ? path.resolve(cacheDir, docId) : path.resolve(__dirname, '../.cache/', docId);\n    return del(filePath);\n  },\n  /**\n   * Remove all cache stored in the cache directory\n   * @method clearAll\n   * @returns {Boolean} true if the cache folder was deleted. False otherwise\n   */\n  clearAll: function (cacheDir) {\n    var filePath = cacheDir ? path.resolve(cacheDir) : path.resolve(__dirname, '../.cache/');\n    return del(filePath);\n  },\n};\n/src/utils.js\u0003var fs = require('fs');\nvar path = require('path');\nvar flatted = require('flatted');\n\nmodule.exports = {\n  tryParse: function (filePath, defaultValue) {\n    var result;\n    try {\n      result = this.readJSON(filePath);\n    } catch (ex) {\n      result = defaultValue;\n    }\n    return result;\n  },\n\n  /**\n   * Read json file synchronously using flatted\n   *\n   * @method readJSON\n   * @param  {String} filePath Json filepath\n   * @returns {*} parse result\n   */\n  readJSON: function (filePath) {\n    return flatted.parse(\n      fs.readFileSync(filePath, {\n        encoding: 'utf8',\n      })\n    );\n  },\n\n  /**\n   * Write json file synchronously using circular-json\n   *\n   * @method writeJSON\n   * @param  {String} filePath Json filepath\n   * @param  {*} data Object to serialize\n   */\n  writeJSON: function (filePath, data) {\n    fs.mkdirSync(path.dirname(filePath), {\n      recursive: true,\n    });\n    fs.writeFileSync(filePath, flatted.stringify(data));\n  },\n};\n/changelog.md@\n# flat-cache - Changelog\n## v3.0.4\n- **Refactoring**\n  - add files by name to the list of exported files - [89a2698]( https://github.com/royriojas/flat-cache/commit/89a2698 ), [Roy Riojas](https://github.com/Roy Riojas), 08/11/2020 02:35:39\n\n    \n## v3.0.3\n- **Bug Fixes**\n  - Fix wrong eslint command - [f268e42]( https://github.com/royriojas/flat-cache/commit/f268e42 ), [Roy Riojas](https://github.com/Roy Riojas), 08/11/2020 02:15:04\n\n    \n## v3.0.2\n- **Refactoring**\n  - Update the files paths - [6983a80]( https://github.com/royriojas/flat-cache/commit/6983a80 ), [Roy Riojas](https://github.com/Roy Riojas), 08/11/2020 01:58:39\n\n    \n  - Move code to src/ - [18ed6e8]( https://github.com/royriojas/flat-cache/commit/18ed6e8 ), [Roy Riojas](https://github.com/Roy Riojas), 08/11/2020 01:57:17\n\n    \n  - Change eslint-cache location - [beed74c]( https://github.com/royriojas/flat-cache/commit/beed74c ), [Roy Riojas](https://github.com/Roy Riojas), 08/11/2020 01:48:32\n\n    \n## v3.0.1\n- **Refactoring**\n  - Remove unused deps - [8c6d9dc]( https://github.com/royriojas/flat-cache/commit/8c6d9dc ), [Roy Riojas](https://github.com/Roy Riojas), 08/11/2020 01:43:29\n\n    \n## v3.0.0\n- **Refactoring**\n  - Fix engines - [52b824c]( https://github.com/royriojas/flat-cache/commit/52b824c ), [Roy Riojas](https://github.com/Roy Riojas), 08/11/2020 01:01:52\n\n    \n- **Other changes**\n  - Replace write with combination of mkdir and writeFile ([#49](https://github.com/royriojas/flat-cache/issues/49)) - [ef48276]( https://github.com/royriojas/flat-cache/commit/ef48276 ), [Bogdan Chadkin](https://github.com/Bogdan Chadkin), 08/11/2020 00:17:15\n\n    Node v10 introduced a great \"recursive\" option for mkdir which allows to\r\n    get rid from mkdirp package and easily rewrite \"write\" package usage\r\n    with two function calls.\r\n    \r\n    https://nodejs.org/api/fs.html#fs_fs_mkdir_path_options_callback\n  - Added a testcase for clearAll ([#48](https://github.com/royriojas/flat-cache/issues/48)) - [45b51ca]( https://github.com/royriojas/flat-cache/commit/45b51ca ), [Aaron Chen](https://github.com/Aaron Chen), 21/05/2020 08:40:03\n\n    \n  - requet node>=10 - [a5c482c]( https://github.com/royriojas/flat-cache/commit/a5c482c ), [yumetodo](https://github.com/yumetodo), 10/04/2020 23:14:53\n\n    thanks @SuperITMan\n    \n  - Update README.md - [29fe40b]( https://github.com/royriojas/flat-cache/commit/29fe40b ), [Roy Riojas](https://github.com/Roy Riojas), 10/04/2020 20:08:05\n\n    \n  - reduce vulnerability to 1 - [e9db1b2]( https://github.com/royriojas/flat-cache/commit/e9db1b2 ), [yumetodo](https://github.com/yumetodo), 30/03/2020 11:10:43\n\n    \n  - reduce vulnerabilities dependencies to 8 - [b58d196]( https://github.com/royriojas/flat-cache/commit/b58d196 ), [yumetodo](https://github.com/yumetodo), 30/03/2020 10:54:56\n\n    \n  - use prettier instead of esbeautifier - [03b1db7]( https://github.com/royriojas/flat-cache/commit/03b1db7 ), [yumetodo](https://github.com/yumetodo), 30/03/2020 10:27:14\n\n    \n  - update proxyquire - [c2f048d]( https://github.com/royriojas/flat-cache/commit/c2f048d ), [yumetodo](https://github.com/yumetodo), 30/03/2020 10:16:16\n\n    \n  - update flatted and mocha - [a0e56da]( https://github.com/royriojas/flat-cache/commit/a0e56da ), [yumetodo](https://github.com/yumetodo), 30/03/2020 09:46:45\n\n    mocha > mkdirp is updated\n    istanble >>> optimist > minimist is not updated\n    \n  - drop support node.js < 10 in develop - [beba691]( https://github.com/royriojas/flat-cache/commit/beba691 ), [yumetodo](https://github.com/yumetodo), 18/03/2020 01:31:09\n\n    see mkdirp\n    \n  - npm aufit fix(still remains) - [ce166cb]( https://github.com/royriojas/flat-cache/commit/ce166cb ), [yumetodo](https://github.com/yumetodo), 18/03/2020 01:18:08\n\n    37 vulnerabilities required manual review and could not be updated\n    \n  - updtate sinon - [9f2d1b6]( https://github.com/royriojas/flat-cache/commit/9f2d1b6 ), [yumetodo](https://github.com/yumetodo), 18/03/2020 01:17:51\n\n    \n  - apply eslint-plugin-mocha - [07343b5]( https://github.com/royriojas/flat-cache/commit/07343b5 ), [yumetodo](https://github.com/yumetodo), 13/03/2020 22:17:21\n\n    \n  - Less strint version check ([#44](https://github.com/royriojas/flat-cache/issues/44)) - [92aca1c]( https://github.com/royriojas/flat-cache/commit/92aca1c ), [Wojciech Maj](https://github.com/Wojciech Maj), 13/11/2019 16:18:25\n\n    * Use ^ version matching for production dependencies\r\n    \r\n    * Run npm audit fix\r\n    \n- **Bug Fixes**\n  - update dependencies and use eslint directly - [73fbed2]( https://github.com/royriojas/flat-cache/commit/73fbed2 ), [yumetodo](https://github.com/yumetodo), 18/03/2020 01:17:27\n\n    \n## v2.0.1\n- **Refactoring**\n  - upgrade node modules to latest versions - [6402ed3]( https://github.com/royriojas/flat-cache/commit/6402ed3 ), [Roy Riojas](https://github.com/Roy Riojas), 08/01/2019 18:47:05\n\n    \n## v2.0.0\n- **Bug Fixes**\n  - upgrade package.json lock file - [8d21c7b]( https://github.com/royriojas/flat-cache/commit/8d21c7b ), [Roy Riojas](https://github.com/Roy Riojas), 08/01/2019 17:03:13\n\n    \n  - Use the same versions of node_js that eslint use - [8d23379]( https://github.com/royriojas/flat-cache/commit/8d23379 ), [Roy Riojas](https://github.com/Roy Riojas), 08/01/2019 16:25:11\n\n    \n- **Other changes**\n  - Replace circular-json with flatted ([#36](https://github.com/royriojas/flat-cache/issues/36)) - [b93aced]( https://github.com/royriojas/flat-cache/commit/b93aced ), [C. K. Tang](https://github.com/C. K. Tang), 08/01/2019 17:03:01\n\n    \n  - Change JSON parser from circular-json to flatted & 1 more changes ([#37](https://github.com/royriojas/flat-cache/issues/37)) - [745e65a]( https://github.com/royriojas/flat-cache/commit/745e65a ), [Andy Chen](https://github.com/Andy Chen), 08/01/2019 16:17:20\n\n    * Change JSON parser from circular-json to flatted & 1 more changes\r\n    \r\n    * Change JSON parser from circular-json\r\n    * Audited 2 vulnerabilities\r\n    \r\n    * Update package.json\r\n    \r\n    * Update Engine require\r\n    \r\n    * There's a bunch of dependencies in this pkg requires node >=4, so I changed it to 4\r\n    \r\n    * Remove and add node versions\r\n    \r\n    * I have seen this pkg is not available with node 0.12 so I removed it\r\n    * I have added a popular used LTS version of node - 10\r\n    \n## v1.3.4\n- **Refactoring**\n  - Add del.js and utils.js to the list of files to be beautified - [9d0ca9b]( https://github.com/royriojas/flat-cache/commit/9d0ca9b ), [Roy Riojas](https://github.com/Roy Riojas), 14/11/2018 12:19:02\n\n    \n## v1.3.3\n- **Refactoring**\n  - Make sure package-lock.json is up to date - [a7d2598]( https://github.com/royriojas/flat-cache/commit/a7d2598 ), [Roy Riojas](https://github.com/Roy Riojas), 14/11/2018 11:36:08\n\n    \n- **Other changes**\n  - Removed the need for del ([#33](https://github.com/royriojas/flat-cache/issues/33)) - [c429012]( https://github.com/royriojas/flat-cache/commit/c429012 ), [S. Gilroy](https://github.com/S. Gilroy), 13/11/2018 13:56:37\n\n    * Removed the need for del\r\n    \r\n    Removed the need for del as newer versions have broken backwards\r\n    compatibility. del mainly uses rimraf for deleting folders\r\n    and files, replaceing it with rimraf only is a minimal change.\r\n    \r\n    * Disable glob on rimraf calls\r\n    \r\n    * Added glob disable to wrong call\r\n    \r\n    * Wrapped rimraf to simplify solution\r\n    \n## v1.3.2\n- **Refactoring**\n  - remove yarn.lock file - [704c6c4]( https://github.com/royriojas/flat-cache/commit/704c6c4 ), [Roy Riojas](https://github.com/Roy Riojas), 07/11/2018 15:41:08\n\n    \n- **Other changes**\n  - replace circular-json with flatted ([#23](https://github.com/royriojas/flat-cache/issues/23))\" - [db12d74]( https://github.com/royriojas/flat-cache/commit/db12d74 ), [Roy Riojas](https://github.com/Roy Riojas), 07/11/2018 15:40:39\n\n    This reverts commit 00f689277a75e85fef28e6a048fad227afc525e6.\n    \n## v1.3.1\n- **Refactoring**\n  - upgrade deps to remove some security warnings - [f405719]( https://github.com/royriojas/flat-cache/commit/f405719 ), [Roy Riojas](https://github.com/Roy Riojas), 06/11/2018 12:07:31\n\n    \n- **Bug Fixes**\n  - replace circular-json with flatted ([#23](https://github.com/royriojas/flat-cache/issues/23)) - [00f6892]( https://github.com/royriojas/flat-cache/commit/00f6892 ), [Terry](https://github.com/Terry), 05/11/2018 18:44:16\n\n    \n- **Other changes**\n  - update del to v3.0.0 ([#26](https://github.com/royriojas/flat-cache/issues/26)) - [d42883f]( https://github.com/royriojas/flat-cache/commit/d42883f ), [Patrick Silva](https://github.com/Patrick Silva), 03/11/2018 01:00:44\n\n    Closes <a target=\"_blank\" class=\"info-link\" href=\"https://github.com/royriojas/flat-cache/issues/25\"><span>#25</span></a>\n## v1.3.0\n- **Other changes**\n  - Added #all method ([#16](https://github.com/royriojas/flat-cache/issues/16)) - [12293be]( https://github.com/royriojas/flat-cache/commit/12293be ), [Ozair Patel](https://github.com/Ozair Patel), 25/09/2017 14:46:38\n\n    * Added #all method\r\n    \r\n    * Added #all method test\r\n    \r\n    * Updated readme\r\n    \r\n    * Added yarn.lock\r\n    \r\n    * Added more keys for #all test\r\n    \r\n    * Beautified file\r\n    \n  - fix changelog title style ([#14](https://github.com/royriojas/flat-cache/issues/14)) - [af8338a]( https://github.com/royriojas/flat-cache/commit/af8338a ), [前端小武](https://github.com/前端小武), 19/12/2016 20:34:48\n\n    \n## v1.2.2\n- **Bug Fixes**\n  - Do not crash if cache file is invalid JSON. ([#13](https://github.com/royriojas/flat-cache/issues/13)) - [87beaa6]( https://github.com/royriojas/flat-cache/commit/87beaa6 ), [Roy Riojas](https://github.com/Roy Riojas), 19/12/2016 18:03:35\n\n    Fixes <a target=\"_blank\" class=\"info-link\" href=\"https://github.com/royriojas/flat-cache/issues/12\"><span>#12</span></a>\r\n    \r\n    Not sure under which situations a cache file might exist that does\r\n    not contain a valid JSON structure, but just in case to cover\r\n    the possibility of this happening a try catch block has been added\r\n    \r\n    If the cache is somehow not valid the cache will be discarded an a\r\n    a new cache will be stored instead\n- **Other changes**\n  - Added travis ci support for modern node versions ([#11](https://github.com/royriojas/flat-cache/issues/11)) - [1c2b1f7]( https://github.com/royriojas/flat-cache/commit/1c2b1f7 ), [Amila Welihinda](https://github.com/Amila Welihinda), 10/11/2016 23:47:52\n\n    \n  - Bumping `circular-son` version ([#10](https://github.com/royriojas/flat-cache/issues/10)) - [4d5e861]( https://github.com/royriojas/flat-cache/commit/4d5e861 ), [Andrea Giammarchi](https://github.com/Andrea Giammarchi), 02/08/2016 07:13:52\n\n    As mentioned in https://github.com/WebReflection/circular-json/issues/25 `circular-json` wan't rightly implementing the license field.\r\n    \r\n    Latest version bump changed only that bit so that ESLint should now be happy.\n## v1.2.1\n- **Bug Fixes**\n  - Add missing utils.js file to the package. closes [#8](https://github.com/royriojas/flat-cache/issues/8) - [ec10cf2]( https://github.com/royriojas/flat-cache/commit/ec10cf2 ), [Roy Riojas](https://github.com/Roy Riojas), 01/08/2016 02:18:57\n\n    \n## v1.2.0\n- **Documentation**\n  - Add documentation about noPrune option - [23e11f9]( https://github.com/royriojas/flat-cache/commit/23e11f9 ), [Roy Riojas](https://github.com/Roy Riojas), 01/08/2016 02:06:49\n\n    \n## v1.0.11\n- **Features**\n  - Add noPrune option to cache.save() method. closes [#7](https://github.com/royriojas/flat-cache/issues/7) - [2c8016a]( https://github.com/royriojas/flat-cache/commit/2c8016a ), [Roy Riojas](https://github.com/Roy Riojas), 01/08/2016 02:00:29\n\n    \n  - Add json read and write utility based on circular-json - [c31081e]( https://github.com/royriojas/flat-cache/commit/c31081e ), [Jean Ponchon](https://github.com/Jean Ponchon), 28/07/2016 08:58:17\n\n    \n- **Bug Fixes**\n  - Remove UTF16 BOM stripping - [4a41e22]( https://github.com/royriojas/flat-cache/commit/4a41e22 ), [Jean Ponchon](https://github.com/Jean Ponchon), 29/07/2016 02:18:06\n\n    Since we control both writing and reading of JSON stream, there no needs \n    to handle unicode BOM.\n  - Use circular-json to handle circular references (fix [#5](https://github.com/royriojas/flat-cache/issues/5)) - [cd7aeed]( https://github.com/royriojas/flat-cache/commit/cd7aeed ), [Jean Ponchon](https://github.com/Jean Ponchon), 25/07/2016 11:11:59\n\n    \n- **Tests Related fixes**\n  - Add missing file from eslint test - [d6fa3c3]( https://github.com/royriojas/flat-cache/commit/d6fa3c3 ), [Jean Ponchon](https://github.com/Jean Ponchon), 29/07/2016 02:15:51\n\n    \n  - Add test for circular json serialization / deserialization - [07d2ddd]( https://github.com/royriojas/flat-cache/commit/07d2ddd ), [Jean Ponchon](https://github.com/Jean Ponchon), 28/07/2016 08:59:36\n\n    \n- **Refactoring**\n  - Remove unused read-json-sync - [2be1c24]( https://github.com/royriojas/flat-cache/commit/2be1c24 ), [Jean Ponchon](https://github.com/Jean Ponchon), 28/07/2016 08:59:18\n\n    \n- **Build Scripts Changes**\n  - travis tests on 0.12 and 4x - [3a613fd]( https://github.com/royriojas/flat-cache/commit/3a613fd ), [royriojas](https://github.com/royriojas), 15/11/2015 14:34:40\n\n    \n## v1.0.10\n- **Build Scripts Changes**\n  - add eslint-fix task - [fd29e52]( https://github.com/royriojas/flat-cache/commit/fd29e52 ), [royriojas](https://github.com/royriojas), 01/11/2015 15:04:08\n\n    \n  - make sure the test script also verify beautification and linting of files before running tests - [e94e176]( https://github.com/royriojas/flat-cache/commit/e94e176 ), [royriojas](https://github.com/royriojas), 01/11/2015 11:54:48\n\n    \n- **Other changes**\n  - add clearAll for cacheDir - [97383d9]( https://github.com/royriojas/flat-cache/commit/97383d9 ), [xieyaowu](https://github.com/xieyaowu), 31/10/2015 21:02:18\n\n    \n## v1.0.9\n- **Bug Fixes**\n  - wrong default values for changelogx user repo name - [7bb52d1]( https://github.com/royriojas/flat-cache/commit/7bb52d1 ), [royriojas](https://github.com/royriojas), 11/09/2015 15:59:30\n\n    \n## v1.0.8\n- **Build Scripts Changes**\n  - test against node 4 - [c395b66]( https://github.com/royriojas/flat-cache/commit/c395b66 ), [royriojas](https://github.com/royriojas), 11/09/2015 15:51:39\n\n    \n## v1.0.7\n- **Other changes**\n  - Move dependencies into devDep - [7e47099]( https://github.com/royriojas/flat-cache/commit/7e47099 ), [Bogdan Chadkin](https://github.com/Bogdan Chadkin), 11/09/2015 15:10:57\n\n    \n- **Documentation**\n  - Add missing changelog link - [f51197a]( https://github.com/royriojas/flat-cache/commit/f51197a ), [royriojas](https://github.com/royriojas), 11/09/2015 14:48:05\n\n    \n## v1.0.6\n- **Build Scripts Changes**\n  - Add helpers/code check scripts - [bdb82f3]( https://github.com/royriojas/flat-cache/commit/bdb82f3 ), [royriojas](https://github.com/royriojas), 11/09/2015 14:44:31\n\n    \n## v1.0.5\n- **Documentation**\n  - better description for the module - [436817f]( https://github.com/royriojas/flat-cache/commit/436817f ), [royriojas](https://github.com/royriojas), 11/09/2015 14:35:33\n\n    \n- **Other changes**\n  - Update dependencies - [be88aa3]( https://github.com/royriojas/flat-cache/commit/be88aa3 ), [Bogdan Chadkin](https://github.com/Bogdan Chadkin), 11/09/2015 13:47:41\n\n    \n## v1.0.4\n- **Refactoring**\n  - load a cache file using the full filepath - [b8f68c2]( https://github.com/royriojas/flat-cache/commit/b8f68c2 ), [Roy Riojas](https://github.com/Roy Riojas), 30/08/2015 04:19:14\n\n    \n- **Documentation**\n  - Add documentation about `clearAll` and `clearCacheById` - [13947c1]( https://github.com/royriojas/flat-cache/commit/13947c1 ), [Roy Riojas](https://github.com/Roy Riojas), 01/03/2015 23:44:05\n\n    \n- **Features**\n  - Add methods to remove the cache documents created - [af40443]( https://github.com/royriojas/flat-cache/commit/af40443 ), [Roy Riojas](https://github.com/Roy Riojas), 01/03/2015 23:39:27\n\n    \n## v1.0.1\n- **Other changes**\n  - Update README.md - [c2b6805]( https://github.com/royriojas/flat-cache/commit/c2b6805 ), [Roy Riojas](https://github.com/Roy Riojas), 26/02/2015 04:28:07\n\n    \n## v1.0.0\n- **Refactoring**\n  - flat-cache v.1.0.0 - [c984274]( https://github.com/royriojas/flat-cache/commit/c984274 ), [Roy Riojas](https://github.com/Roy Riojas), 26/02/2015 04:11:50\n\n    \n- **Other changes**\n  - Initial commit - [d43cccf]( https://github.com/royriojas/flat-cache/commit/d43cccf ), [Roy Riojas](https://github.com/Roy Riojas), 26/02/2015 01:12:16\n\n    \n/LICENSE\u00046The MIT License (MIT)\n\nCopyright (c) 2015 Roy Riojas\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n/src/del.js\u0001$var rimraf = require('rimraf').sync;\nvar fs = require('fs');\n\nmodule.exports = function del(file) {\n  if (fs.existsSync(file)) {\n    //if rimraf doesn't throw then the file has been deleted or didn't exist\n    rimraf(file, {\n      glob: false,\n    });\n    return true;\n  }\n  return false;\n};\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/ZmxhdHRlZEAzLjIuNw==",
    "content": "/esm.js\u0004}/*! (c) 2020 Andrea Giammarchi */\nconst{parse:t,stringify:e}=JSON,{keys:n}=Object,o=String,c={},r=(t,e)=>e,s=t=>t instanceof o?o(t):t,l=(t,e)=>\"string\"==typeof e?new o(e):e,a=(t,e,r,s)=>{const l=[];for(let a=n(r),{length:f}=a,i=0;i<f;i++){const n=a[i],f=r[n];if(f instanceof o){const o=t[f];\"object\"!=typeof o||e.has(o)?r[n]=s.call(r,n,o):(e.add(o),r[n]=c,l.push({k:n,a:[t,e,o,s]}))}else r[n]!==c&&(r[n]=s.call(r,n,f))}for(let{length:t}=l,e=0;e<t;e++){const{k:t,a:n}=l[e];r[t]=s.call(r,t,a.apply(null,n))}return r},f=(t,e,n)=>{const c=o(e.push(n)-1);return t.set(n,c),c},i=(e,n)=>{const o=t(e,l).map(s),c=o[0],f=n||r,i=\"object\"==typeof c&&c?a(o,new Set,c,f):c;return f.call({\"\":i},\"\",i)},p=(t,n,o)=>{const c=n&&\"object\"==typeof n?(t,e)=>\"\"===t||-1<n.indexOf(t)?e:void 0:n||r,s=new Map,l=[],a=[];let i=+f(s,l,c.call({\"\":t},\"\",t)),p=!i;for(;i<l.length;)p=!0,a[i]=e(l[i++],u,o);return\"[\"+a.join(\",\")+\"]\";function u(t,e){if(p)return p=!p,e;const n=c.call(this,t,e);switch(typeof n){case\"object\":if(null===n)return n;case\"string\":return s.get(n)||f(s,l,n)}return n}},u=e=>t(p(e)),g=t=>i(e(t));export{g as fromJSON,i as parse,p as stringify,u as toJSON};\n/esm/index.js\nV/*! (c) 2020 Andrea Giammarchi */\n\nconst {parse: $parse, stringify: $stringify} = JSON;\nconst {keys} = Object;\n\nconst Primitive = String;   // it could be Number\nconst primitive = 'string'; // it could be 'number'\n\nconst ignore = {};\nconst object = 'object';\n\nconst noop = (_, value) => value;\n\nconst primitives = value => (\n  value instanceof Primitive ? Primitive(value) : value\n);\n\nconst Primitives = (_, value) => (\n  typeof value === primitive ? new Primitive(value) : value\n);\n\nconst revive = (input, parsed, output, $) => {\n  const lazy = [];\n  for (let ke = keys(output), {length} = ke, y = 0; y < length; y++) {\n    const k = ke[y];\n    const value = output[k];\n    if (value instanceof Primitive) {\n      const tmp = input[value];\n      if (typeof tmp === object && !parsed.has(tmp)) {\n        parsed.add(tmp);\n        output[k] = ignore;\n        lazy.push({k, a: [input, parsed, tmp, $]});\n      }\n      else\n        output[k] = $.call(output, k, tmp);\n    }\n    else if (output[k] !== ignore)\n      output[k] = $.call(output, k, value);\n  }\n  for (let {length} = lazy, i = 0; i < length; i++) {\n    const {k, a} = lazy[i];\n    output[k] = $.call(output, k, revive.apply(null, a));\n  }\n  return output;\n};\n\nconst set = (known, input, value) => {\n  const index = Primitive(input.push(value) - 1);\n  known.set(value, index);\n  return index;\n};\n\nexport const parse = (text, reviver) => {\n  const input = $parse(text, Primitives).map(primitives);\n  const value = input[0];\n  const $ = reviver || noop;\n  const tmp = typeof value === object && value ?\n              revive(input, new Set, value, $) :\n              value;\n  return $.call({'': tmp}, '', tmp);\n};\n\nexport const stringify = (value, replacer, space) => {\n  const $ = replacer && typeof replacer === object ?\n            (k, v) => (k === '' || -1 < replacer.indexOf(k) ? v : void 0) :\n            (replacer || noop);\n  const known = new Map;\n  const input = [];\n  const output = [];\n  let i = +set(known, input, $.call({'': value}, '', value));\n  let firstRun = !i;\n  while (i < input.length) {\n    firstRun = true;\n    output[i] = $stringify(input[i++], replace, space);\n  }\n  return '[' + output.join(',') + ']';\n  function replace(key, value) {\n    if (firstRun) {\n      firstRun = !firstRun;\n      return value;\n    }\n    const after = $.call(this, key, value);\n    switch (typeof after) {\n      case object:\n        if (after === null) return after;\n      case primitive:\n        return known.get(after) || set(known, input, after);\n    }\n    return after;\n  }\n};\n\nexport const toJSON = any => $parse(stringify(any));\nexport const fromJSON = any => parse($stringify(any));\n/min.js\u0005self.Flatted=function(n){\"use strict\";function t(n){return t=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(n){return typeof n}:function(n){return n&&\"function\"==typeof Symbol&&n.constructor===Symbol&&n!==Symbol.prototype?\"symbol\":typeof n},t(n)\n/*! (c) 2020 Andrea Giammarchi */}var r=JSON.parse,e=JSON.stringify,o=Object.keys,u=String,f=\"string\",i={},c=\"object\",a=function(n,t){return t},l=function(n){return n instanceof u?u(n):n},s=function(n,r){return t(r)===f?new u(r):r},y=function n(r,e,f,a){for(var l=[],s=o(f),y=s.length,p=0;p<y;p++){var v=s[p],S=f[v];if(S instanceof u){var b=r[S];t(b)!==c||e.has(b)?f[v]=a.call(f,v,b):(e.add(b),f[v]=i,l.push({k:v,a:[r,e,b,a]}))}else f[v]!==i&&(f[v]=a.call(f,v,S))}for(var m=l.length,g=0;g<m;g++){var h=l[g],O=h.k,d=h.a;f[O]=a.call(f,O,n.apply(null,d))}return f},p=function(n,t,r){var e=u(t.push(r)-1);return n.set(r,e),e},v=function(n,e){var o=r(n,s).map(l),u=o[0],f=e||a,i=t(u)===c&&u?y(o,new Set,u,f):u;return f.call({\"\":i},\"\",i)},S=function(n,r,o){for(var u=r&&t(r)===c?function(n,t){return\"\"===n||-1<r.indexOf(n)?t:void 0}:r||a,i=new Map,l=[],s=[],y=+p(i,l,u.call({\"\":n},\"\",n)),v=!y;y<l.length;)v=!0,s[y]=e(l[y++],S,o);return\"[\"+s.join(\",\")+\"]\";function S(n,r){if(v)return v=!v,r;var e=u.call(this,n,r);switch(t(e)){case c:if(null===e)return e;case f:return i.get(e)||p(i,l,e)}return e}};return n.fromJSON=function(n){return v(e(n))},n.parse=v,n.stringify=S,n.toJSON=function(n){return r(S(n))},n}({});/cjs/package.json\u0013{\"type\":\"commonjs\"}/LICENSE\u0003\u0002ISC License\n\nCopyright (c) 2018-2020, Andrea Giammarchi, @WebReflection\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted, provided that the above\ncopyright notice and this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE\nOR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n/README.md\u0011# flatted\n\n[![Downloads](https://img.shields.io/npm/dm/flatted.svg)](https://www.npmjs.com/package/flatted) [![Coverage Status](https://coveralls.io/repos/github/WebReflection/flatted/badge.svg?branch=main)](https://coveralls.io/github/WebReflection/flatted?branch=main) [![Build Status](https://travis-ci.com/WebReflection/flatted.svg?branch=main)](https://travis-ci.com/WebReflection/flatted) [![License: ISC](https://img.shields.io/badge/License-ISC-yellow.svg)](https://opensource.org/licenses/ISC) ![WebReflection status](https://offline.report/status/webreflection.svg)\n\n![snow flake](./flatted.jpg)\n\n<sup>**Social Media Photo by [Matt Seymour](https://unsplash.com/@mattseymour) on [Unsplash](https://unsplash.com/)**</sup>\n\n## Announcement 📣\n\nThere is a standard approach to recursion and more data-types than what JSON allows, and it's part of the [Structured Clone polyfill](https://github.com/ungap/structured-clone/#readme).\n\nBeside acting as a polyfill, its `@ungap/structured-clone/json` export provides both `stringify` and `parse`, and it's been tested for being faster than *flatted*, but its produced output is also smaller than *flatted* in general.\n\nThe *@ungap/structured-clone* module is, in short, a drop in replacement for *flatted*, but it's not compatible with *flatted* specialized syntax.\n\nHowever, if recursion, as well as more data-types, are what you are after, or interesting for your projects/use cases, consider switching to this new module whenever you can 👍\n\n- - -\n\nA super light (0.5K) and fast circular JSON parser, directly from the creator of [CircularJSON](https://github.com/WebReflection/circular-json/#circularjson).\n\nNow available also for **[PHP](./php/flatted.php)**.\n\n```js\nnpm i flatted\n```\n\nUsable via [CDN](https://unpkg.com/flatted) or as regular module.\n\n```js\n// ESM\nimport {parse, stringify, toJSON, fromJSON} from 'flatted';\n\n// CJS\nconst {parse, stringify, toJSON, fromJSON} = require('flatted');\n\nconst a = [{}];\na[0].a = a;\na.push(a);\n\nstringify(a); // [[\"1\",\"0\"],{\"a\":\"0\"}]\n```\n\n## toJSON and fromJSON\n\nIf you'd like to implicitly survive JSON serialization, these two helpers helps:\n\n```js\nimport {toJSON, fromJSON} from 'flatted';\n\nclass RecursiveMap extends Map {\n  static fromJSON(any) {\n    return new this(fromJSON(any));\n  }\n  toJSON() {\n    return toJSON([...this.entries()]);\n  }\n}\n\nconst recursive = new RecursiveMap;\nconst same = {};\nsame.same = same;\nrecursive.set('same', same);\n\nconst asString = JSON.stringify(recursive);\nconst asMap = RecursiveMap.fromJSON(JSON.parse(asString));\nasMap.get('same') === asMap.get('same').same;\n// true\n```\n\n\n## Flatted VS JSON\n\nAs it is for every other specialized format capable of serializing and deserializing circular data, you should never `JSON.parse(Flatted.stringify(data))`, and you should never `Flatted.parse(JSON.stringify(data))`.\n\nThe only way this could work is to `Flatted.parse(Flatted.stringify(data))`, as it is also for _CircularJSON_ or any other, otherwise there's no granted data integrity.\n\nAlso please note this project serializes and deserializes only data compatible with JSON, so that sockets, or anything else with internal classes different from those allowed by JSON standard, won't be serialized and unserialized as expected.\n\n\n### New in V1: Exact same JSON API\n\n  * Added a [reviver](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#Syntax) parameter to `.parse(string, reviver)` and revive your own objects.\n  * Added a [replacer](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#Syntax) and a `space` parameter to `.stringify(object, replacer, space)` for feature parity with JSON signature.\n\n\n### Compatibility\nAll ECMAScript engines compatible with `Map`, `Set`, `Object.keys`, and `Array.prototype.reduce` will work, even if polyfilled.\n\n\n### How does it work ?\nWhile stringifying, all Objects, including Arrays, and strings, are flattened out and replaced as unique index. `*`\n\nOnce parsed, all indexes will be replaced through the flattened collection.\n\n<sup><sub>`*` represented as string to avoid conflicts with numbers</sub></sup>\n\n```js\n// logic example\nvar a = [{one: 1}, {two: '2'}];\na[0].a = a;\n// a is the main object, will be at index '0'\n// {one: 1} is the second object, index '1'\n// {two: '2'} the third, in '2', and it has a string\n// which will be found at index '3'\n\nFlatted.stringify(a);\n// [[\"1\",\"2\"],{\"one\":1,\"a\":\"0\"},{\"two\":\"3\"},\"2\"]\n// a[one,two]    {one: 1, a}    {two: '2'}  '2'\n```\n/types.d.ts\tPinterface Flatted {\n  /**\n   * Converts a JavaScript Object Notation (using Flatted encoding) string into an object.\n   * @param text A valid Flatted string.\n   * @param reviver A function that transforms the results. This function is called for each member of the object.\n   * If a member contains nested objects, the nested objects are transformed before the parent object is.\n   */\n  parse(\n    text: string,\n    reviver?: (this: any, key: string, value: any) => any\n  ): any;\n  /**\n   * Converts a JavaScript value to a JavaScript Object Notation (using Flatted encoding) string.\n   * @param value A JavaScript value, usually an object or array, to be converted.\n   * @param replacer A function that transforms the results.\n   * @param space Adds indentation, white space, and line break characters to the return-value JSON text to make it easier to read.\n   */\n  stringify(\n    value: any,\n    replacer?: (this: any, key: string, value: any) => any,\n    space?: string | number\n  ): string;\n  /**\n   * Converts a JavaScript value to a JavaScript Object Notation (using Flatted encoding) string.\n   * @param value A JavaScript value, usually an object or array, to be converted.\n   * @param replacer An array of strings and numbers that acts as an approved list for selecting the object properties that will be stringified.\n   * @param space Adds indentation, white space, and line break characters to the return-value JSON text to make it easier to read.\n   */\n  stringify(\n    value: any,\n    replacer?: (number | string)[] | null,\n    space?: string | number\n  ): string;\n  /**\n   * Helper to allow explicit conversions with classes.\n   * @param value The JSON to convert to JavaScript value\n   */\n  fromJSON(value: any): any;\n  /**\n   * Helper to allow explicit conversions with classes.\n   * @param value A JavaScript value, usually an object or array, to be converted.\n   */\n  toJSON(value: any): any;\n}\n\n/**\n * Fast and minimal circular JSON parser.\n * logic example\n```js\nvar a = [{one: 1}, {two: '2'}];\na[0].a = a;\n// a is the main object, will be at index '0'\n// {one: 1} is the second object, index '1'\n// {two: '2'} the third, in '2', and it has a string\n// which will be found at index '3'\nFlatted.stringify(a);\n// [[\"1\",\"2\"],{\"one\":1,\"a\":\"0\"},{\"two\":\"3\"},\"2\"]\n// a[one,two]    {one: 1, a}    {two: '2'}  '2'\n```\n */\ndeclare const Flatted: Flatted;\nexport = Flatted;\n/cjs/index.js\n'use strict';\n/*! (c) 2020 Andrea Giammarchi */\n\nconst {parse: $parse, stringify: $stringify} = JSON;\nconst {keys} = Object;\n\nconst Primitive = String;   // it could be Number\nconst primitive = 'string'; // it could be 'number'\n\nconst ignore = {};\nconst object = 'object';\n\nconst noop = (_, value) => value;\n\nconst primitives = value => (\n  value instanceof Primitive ? Primitive(value) : value\n);\n\nconst Primitives = (_, value) => (\n  typeof value === primitive ? new Primitive(value) : value\n);\n\nconst revive = (input, parsed, output, $) => {\n  const lazy = [];\n  for (let ke = keys(output), {length} = ke, y = 0; y < length; y++) {\n    const k = ke[y];\n    const value = output[k];\n    if (value instanceof Primitive) {\n      const tmp = input[value];\n      if (typeof tmp === object && !parsed.has(tmp)) {\n        parsed.add(tmp);\n        output[k] = ignore;\n        lazy.push({k, a: [input, parsed, tmp, $]});\n      }\n      else\n        output[k] = $.call(output, k, tmp);\n    }\n    else if (output[k] !== ignore)\n      output[k] = $.call(output, k, value);\n  }\n  for (let {length} = lazy, i = 0; i < length; i++) {\n    const {k, a} = lazy[i];\n    output[k] = $.call(output, k, revive.apply(null, a));\n  }\n  return output;\n};\n\nconst set = (known, input, value) => {\n  const index = Primitive(input.push(value) - 1);\n  known.set(value, index);\n  return index;\n};\n\nconst parse = (text, reviver) => {\n  const input = $parse(text, Primitives).map(primitives);\n  const value = input[0];\n  const $ = reviver || noop;\n  const tmp = typeof value === object && value ?\n              revive(input, new Set, value, $) :\n              value;\n  return $.call({'': tmp}, '', tmp);\n};\nexports.parse = parse;\n\nconst stringify = (value, replacer, space) => {\n  const $ = replacer && typeof replacer === object ?\n            (k, v) => (k === '' || -1 < replacer.indexOf(k) ? v : void 0) :\n            (replacer || noop);\n  const known = new Map;\n  const input = [];\n  const output = [];\n  let i = +set(known, input, $.call({'': value}, '', value));\n  let firstRun = !i;\n  while (i < input.length) {\n    firstRun = true;\n    output[i] = $stringify(input[i++], replace, space);\n  }\n  return '[' + output.join(',') + ']';\n  function replace(key, value) {\n    if (firstRun) {\n      firstRun = !firstRun;\n      return value;\n    }\n    const after = $.call(this, key, value);\n    switch (typeof after) {\n      case object:\n        if (after === null) return after;\n      case primitive:\n        return known.get(after) || set(known, input, after);\n    }\n    return after;\n  }\n};\nexports.stringify = stringify;\n\nconst toJSON = any => $parse(stringify(any));\nexports.toJSON = toJSON;\nconst fromJSON = any => parse($stringify(any));\nexports.fromJSON = fromJSON;\n/es.js\u0004self.Flatted=function(t){\"use strict\";\n/*! (c) 2020 Andrea Giammarchi */const{parse:e,stringify:n}=JSON,{keys:r}=Object,s=String,o=\"string\",c={},l=\"object\",a=(t,e)=>e,f=t=>t instanceof s?s(t):t,i=(t,e)=>typeof e===o?new s(e):e,u=(t,e,n,o)=>{const a=[];for(let f=r(n),{length:i}=f,u=0;u<i;u++){const r=f[u],i=n[r];if(i instanceof s){const s=t[i];typeof s!==l||e.has(s)?n[r]=o.call(n,r,s):(e.add(s),n[r]=c,a.push({k:r,a:[t,e,s,o]}))}else n[r]!==c&&(n[r]=o.call(n,r,i))}for(let{length:t}=a,e=0;e<t;e++){const{k:t,a:r}=a[e];n[t]=o.call(n,t,u.apply(null,r))}return n},p=(t,e,n)=>{const r=s(e.push(n)-1);return t.set(n,r),r},y=(t,n)=>{const r=e(t,i).map(f),s=r[0],o=n||a,c=typeof s===l&&s?u(r,new Set,s,o):s;return o.call({\"\":c},\"\",c)},g=(t,e,r)=>{const s=e&&typeof e===l?(t,n)=>\"\"===t||-1<e.indexOf(t)?n:void 0:e||a,c=new Map,f=[],i=[];let u=+p(c,f,s.call({\"\":t},\"\",t)),y=!u;for(;u<f.length;)y=!0,i[u]=n(f[u++],g,r);return\"[\"+i.join(\",\")+\"]\";function g(t,e){if(y)return y=!y,e;const n=s.call(this,t,e);switch(typeof n){case l:if(null===n)return n;case o:return c.get(n)||p(c,f,n)}return n}};return t.fromJSON=t=>y(n(t)),t.parse=y,t.stringify=g,t.toJSON=t=>e(g(t)),t}({});\n/package.json\bM{\n  \"name\": \"flatted\",\n  \"version\": \"3.2.7\",\n  \"description\": \"A super light and fast circular JSON parser.\",\n  \"unpkg\": \"min.js\",\n  \"types\": \"types.d.ts\",\n  \"main\": \"./cjs/index.js\",\n  \"scripts\": {\n    \"build\": \"npm run cjs && npm run rollup:esm && npm run rollup:es && npm run rollup:babel && npm run min && npm run test && npm run size\",\n    \"cjs\": \"ascjs esm cjs\",\n    \"rollup:es\": \"rollup --config rollup/es.config.js && sed -i.bck 's/^var /self./' es.js && rm -rf es.js.bck\",\n    \"rollup:esm\": \"rollup --config rollup/esm.config.js\",\n    \"rollup:babel\": \"rollup --config rollup/babel.config.js && sed -i.bck 's/^var /self./' index.js && rm -rf index.js.bck\",\n    \"min\": \"terser index.js -c -m -o min.js\",\n    \"size\": \"cat index.js | wc -c;cat min.js | wc -c;gzip -c9 min.js | wc -c;cat min.js | brotli | wc -c; cat es.js | brotli | wc -c; cat esm.js | brotli | wc -c\",\n    \"test\": \"c8 node test/index.js\",\n    \"test:php\": \"php php/test.php\",\n    \"coverage\": \"mkdir -p ./coverage; c8 report --reporter=text-lcov > ./coverage/lcov.info\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/WebReflection/flatted.git\"\n  },\n  \"keywords\": [\n    \"circular\",\n    \"JSON\",\n    \"fast\",\n    \"parser\",\n    \"minimal\"\n  ],\n  \"author\": \"Andrea Giammarchi\",\n  \"license\": \"ISC\",\n  \"bugs\": {\n    \"url\": \"https://github.com/WebReflection/flatted/issues\"\n  },\n  \"homepage\": \"https://github.com/WebReflection/flatted#readme\",\n  \"devDependencies\": {\n    \"@babel/core\": \"^7.18.10\",\n    \"@babel/preset-env\": \"^7.18.10\",\n    \"@ungap/structured-clone\": \"^1.0.1\",\n    \"ascjs\": \"^5.0.1\",\n    \"c8\": \"^7.12.0\",\n    \"circular-json\": \"^0.5.9\",\n    \"circular-json-es6\": \"^2.0.2\",\n    \"jsan\": \"^3.1.14\",\n    \"rollup\": \"^2.78.1\",\n    \"rollup-plugin-babel\": \"^4.4.0\",\n    \"rollup-plugin-node-resolve\": \"^5.2.0\",\n    \"rollup-plugin-terser\": \"^7.0.2\",\n    \"terser\": \"^5.14.2\"\n  },\n  \"module\": \"./esm/index.js\",\n  \"type\": \"module\",\n  \"exports\": {\n    \".\": {\n      \"types\": \"./types.d.ts\",\n      \"import\": \"./esm/index.js\",\n      \"default\": \"./cjs/index.js\"\n    },\n    \"./esm\": \"./esm.js\",\n    \"./package.json\": \"./package.json\"\n  }\n}\n/php/flatted.php\u0012\u0004<?php\n\n/*!\n * ISC License\n * \n * Copyright (c) 2018-2021, Andrea Giammarchi, @WebReflection\n *\n * Permission to use, copy, modify, and/or distribute this software for any\n * purpose with or without fee is hereby granted, provided that the above\n * copyright notice and this permission notice appear in all copies.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\n * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\n * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE\n * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\n * PERFORMANCE OF THIS SOFTWARE.\n */\n\nclass FlattedString {\n  public function __construct($value) {\n    $this->value = $value;\n  }\n}\n\nclass Flatted {\n\n  // public utilities\n  public static function parse($json, $assoc = false, $depth = 512, $options = 0) {\n    $input = array_map(\n      'Flatted::asString',\n      array_map(\n        'Flatted::wrap',\n        json_decode($json, $assoc, $depth, $options)\n      )\n    );\n    $value = &$input[0];\n    $set = array();\n    $set[] = &$value;\n    if (is_array($value))\n      return Flatted::loop(false, array_keys($value), $input, $set, $value);\n    if (is_object($value))\n      return Flatted::loop(true, Flatted::keys($value), $input, $set, $value);\n    return $value;\n  }\n\n  public static function stringify($value, $options = 0, $depth = 512) {\n    $known = new stdClass;\n    $known->key = array();\n    $known->value = array();\n    $input = array();\n    $output = array();\n    $i = intval(Flatted::index($known, $input, $value));\n    while ($i < count($input)) {\n      $output[$i] = Flatted::transform($known, $input, $input[$i]);\n      $i++;\n    }\n    return json_encode($output, $options, $depth);\n  }\n\n  // private helpers\n  private static function asString($value) {\n    return $value instanceof FlattedString ? $value->value : $value;\n  }\n\n  private static function index(&$known, &$input, &$value) {\n    $input[] = &$value;\n    $index = strval(count($input) - 1);\n    $known->key[] = &$value;\n    $known->value[] = &$index;\n    return $index;\n  }\n\n  private static function keys(&$value) {\n    $obj = new ReflectionObject($value);\n    $props = $obj->getProperties();\n    $keys = array();\n    foreach ($props as $prop)\n      $keys[] = $prop->getName();\n    return $keys;\n  }\n\n  private static function loop($obj, $keys, &$input, &$set, &$output) {\n    foreach ($keys as $key) {\n      $value = $obj ? $output->$key : $output[$key];\n      if ($value instanceof FlattedString)\n        Flatted::ref($obj, $key, $input[$value->value], $input, $set, $output);\n    }\n    return $output;\n  }\n\n  private static function relate(&$known, &$input, &$value) {\n    if (is_string($value) || is_array($value) || is_object($value)) {\n      $key = array_search($value, $known->key, true);\n      if ($key !== false)\n        return $known->value[$key];\n      return Flatted::index($known, $input, $value);\n    }\n    return $value;\n  }\n\n  private static function ref($obj, &$key, &$value, &$input, &$set, &$output) {\n    if (is_array($value) && !in_array($value, $set, true)) {\n      $set[] = $value;\n      $value = Flatted::loop(false, array_keys($value), $input, $set, $value);\n    }\n    elseif (is_object($value) && !in_array($value, $set, true)) {\n      $set[] = $value;\n      $value = Flatted::loop(true, Flatted::keys($value), $input, $set, $value);\n    }\n    if ($obj) {\n      $output->$key = &$value;\n    }\n    else {\n      $output[$key] = &$value;\n    }\n  }\n\n  private static function transform(&$known, &$input, &$value) {\n    if (is_array($value)) {\n      return array_map(\n        function ($value) use(&$known, &$input) {\n          return Flatted::relate($known, $input, $value);\n        },\n        $value\n      );\n    }\n    if (is_object($value)) {\n      $object = new stdClass;\n      $keys = Flatted::keys($value);\n      foreach ($keys as $key)\n        $object->$key = Flatted::relate($known, $input, $value->$key);\n      return $object;\n    }\n    return $value;\n  }\n\n  private static function wrap($value) {\n    if (is_string($value)) {\n      return new FlattedString($value);\n    }\n    if (is_array($value)) {\n      return array_map('Flatted::wrap', $value);\n    }\n    if (is_object($value)) {\n      $keys = Flatted::keys($value);\n      foreach ($keys as $key) {\n        $value->$key = self::wrap($value->$key);\n      }\n      return $value;\n    }\n    return $value;\n  }\n}\n?>/index.js\rself.Flatted = (function (exports) {\n  'use strict';\n\n  function _typeof(obj) {\n    \"@babel/helpers - typeof\";\n\n    return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n      return typeof obj;\n    } : function (obj) {\n      return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n    }, _typeof(obj);\n  }\n\n  /*! (c) 2020 Andrea Giammarchi */\n  var $parse = JSON.parse,\n      $stringify = JSON.stringify;\n  var keys = Object.keys;\n  var Primitive = String; // it could be Number\n\n  var primitive = 'string'; // it could be 'number'\n\n  var ignore = {};\n  var object = 'object';\n\n  var noop = function noop(_, value) {\n    return value;\n  };\n\n  var primitives = function primitives(value) {\n    return value instanceof Primitive ? Primitive(value) : value;\n  };\n\n  var Primitives = function Primitives(_, value) {\n    return _typeof(value) === primitive ? new Primitive(value) : value;\n  };\n\n  var revive = function revive(input, parsed, output, $) {\n    var lazy = [];\n\n    for (var ke = keys(output), length = ke.length, y = 0; y < length; y++) {\n      var k = ke[y];\n      var value = output[k];\n\n      if (value instanceof Primitive) {\n        var tmp = input[value];\n\n        if (_typeof(tmp) === object && !parsed.has(tmp)) {\n          parsed.add(tmp);\n          output[k] = ignore;\n          lazy.push({\n            k: k,\n            a: [input, parsed, tmp, $]\n          });\n        } else output[k] = $.call(output, k, tmp);\n      } else if (output[k] !== ignore) output[k] = $.call(output, k, value);\n    }\n\n    for (var _length = lazy.length, i = 0; i < _length; i++) {\n      var _lazy$i = lazy[i],\n          _k = _lazy$i.k,\n          a = _lazy$i.a;\n      output[_k] = $.call(output, _k, revive.apply(null, a));\n    }\n\n    return output;\n  };\n\n  var set = function set(known, input, value) {\n    var index = Primitive(input.push(value) - 1);\n    known.set(value, index);\n    return index;\n  };\n\n  var parse = function parse(text, reviver) {\n    var input = $parse(text, Primitives).map(primitives);\n    var value = input[0];\n    var $ = reviver || noop;\n    var tmp = _typeof(value) === object && value ? revive(input, new Set(), value, $) : value;\n    return $.call({\n      '': tmp\n    }, '', tmp);\n  };\n  var stringify = function stringify(value, replacer, space) {\n    var $ = replacer && _typeof(replacer) === object ? function (k, v) {\n      return k === '' || -1 < replacer.indexOf(k) ? v : void 0;\n    } : replacer || noop;\n    var known = new Map();\n    var input = [];\n    var output = [];\n    var i = +set(known, input, $.call({\n      '': value\n    }, '', value));\n    var firstRun = !i;\n\n    while (i < input.length) {\n      firstRun = true;\n      output[i] = $stringify(input[i++], replace, space);\n    }\n\n    return '[' + output.join(',') + ']';\n\n    function replace(key, value) {\n      if (firstRun) {\n        firstRun = !firstRun;\n        return value;\n      }\n\n      var after = $.call(this, key, value);\n\n      switch (_typeof(after)) {\n        case object:\n          if (after === null) return after;\n\n        case primitive:\n          return known.get(after) || set(known, input, after);\n      }\n\n      return after;\n    }\n  };\n  var toJSON = function toJSON(any) {\n    return $parse(stringify(any));\n  };\n  var fromJSON = function fromJSON(any) {\n    return parse($stringify(any));\n  };\n\n  exports.fromJSON = fromJSON;\n  exports.parse = parse;\n  exports.stringify = stringify;\n  exports.toJSON = toJSON;\n\n  return exports;\n\n})({});\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/ZnJhY3Rpb24uanNANC4yLjA=",
    "content": "/fraction.d.ts\u0007\"declare module 'Fraction';\r\n\r\nexport interface NumeratorDenominator {\r\n  n: number;\r\n  d: number;\r\n}\r\n\r\ntype FractionConstructor = {\r\n  (fraction: Fraction): Fraction;\r\n  (num: number | string): Fraction;\r\n  (numerator: number, denominator: number): Fraction;\r\n  (numbers: [number | string, number | string]): Fraction;\r\n  (fraction: NumeratorDenominator): Fraction;\r\n  (firstValue: Fraction | number | string | [number | string, number | string] | NumeratorDenominator, secondValue?: number): Fraction;\r\n};\r\n\r\nexport default class Fraction {\r\n  constructor (fraction: Fraction);\r\n  constructor (num: number | string);\r\n  constructor (numerator: number, denominator: number);\r\n  constructor (numbers: [number | string, number | string]);\r\n  constructor (fraction: NumeratorDenominator);\r\n  constructor (firstValue: Fraction | number | string | [number | string, number | string] | NumeratorDenominator, secondValue?: number);\r\n\r\n  s: number;\r\n  n: number;\r\n  d: number;\r\n\r\n  abs(): Fraction;\r\n  neg(): Fraction;\r\n\r\n  add: FractionConstructor;\r\n  sub: FractionConstructor;\r\n  mul: FractionConstructor;\r\n  div: FractionConstructor;\r\n  pow: FractionConstructor;\r\n  gcd: FractionConstructor;\r\n  lcm: FractionConstructor;\r\n  \r\n  mod(n?: number | string | Fraction): Fraction;\r\n\r\n  ceil(places?: number): Fraction;\r\n  floor(places?: number): Fraction;\r\n  round(places?: number): Fraction;\r\n\r\n  inverse(): Fraction;\r\n  \r\n  simplify(eps?: number): Fraction;\r\n  \r\n  equals(n: number | string | Fraction): boolean;\r\n  compare(n: number | string | Fraction): number;\r\n  divisible(n: number | string | Fraction): boolean;\r\n  \r\n  valueOf(): number;\r\n  toString(decimalPlaces?: number): string;\r\n  toLatex(excludeWhole?: boolean): string;\r\n  toFraction(excludeWhole?: boolean): string;\r\n  toContinued(): number[];\r\n  clone(): Fraction;\r\n}\r\n/fraction.jsP/**\n * @license Fraction.js v4.2.0 05/03/2022\n * https://www.xarg.org/2014/03/rational-numbers-in-javascript/\n *\n * Copyright (c) 2021, Robert Eisele (robert@xarg.org)\n * Dual licensed under the MIT or GPL Version 2 licenses.\n **/\n\n\n/**\n *\n * This class offers the possibility to calculate fractions.\n * You can pass a fraction in different formats. Either as array, as double, as string or as an integer.\n *\n * Array/Object form\n * [ 0 => <nominator>, 1 => <denominator> ]\n * [ n => <nominator>, d => <denominator> ]\n *\n * Integer form\n * - Single integer value\n *\n * Double form\n * - Single double value\n *\n * String form\n * 123.456 - a simple double\n * 123/456 - a string fraction\n * 123.'456' - a double with repeating decimal places\n * 123.(456) - synonym\n * 123.45'6' - a double with repeating last place\n * 123.45(6) - synonym\n *\n * Example:\n *\n * var f = new Fraction(\"9.4'31'\");\n * f.mul([-4, 3]).div(4.9);\n *\n */\n\n(function(root) {\n\n  \"use strict\";\n\n  // Maximum search depth for cyclic rational numbers. 2000 should be more than enough.\n  // Example: 1/7 = 0.(142857) has 6 repeating decimal places.\n  // If MAX_CYCLE_LEN gets reduced, long cycles will not be detected and toString() only gets the first 10 digits\n  var MAX_CYCLE_LEN = 2000;\n\n  // Parsed data to avoid calling \"new\" all the time\n  var P = {\n    \"s\": 1,\n    \"n\": 0,\n    \"d\": 1\n  };\n\n  function assign(n, s) {\n\n    if (isNaN(n = parseInt(n, 10))) {\n      throw Fraction['InvalidParameter'];\n    }\n    return n * s;\n  }\n\n  // Creates a new Fraction internally without the need of the bulky constructor\n  function newFraction(n, d) {\n\n    if (d === 0) {\n      throw Fraction['DivisionByZero'];\n    }\n\n    var f = Object.create(Fraction.prototype);\n    f[\"s\"] = n < 0 ? -1 : 1;\n\n    n = n < 0 ? -n : n;\n\n    var a = gcd(n, d);\n\n    f[\"n\"] = n / a;\n    f[\"d\"] = d / a;\n    return f;\n  }\n\n  function factorize(num) {\n\n    var factors = {};\n\n    var n = num;\n    var i = 2;\n    var s = 4;\n\n    while (s <= n) {\n\n      while (n % i === 0) {\n        n/= i;\n        factors[i] = (factors[i] || 0) + 1;\n      }\n      s+= 1 + 2 * i++;\n    }\n\n    if (n !== num) {\n      if (n > 1)\n        factors[n] = (factors[n] || 0) + 1;\n    } else {\n      factors[num] = (factors[num] || 0) + 1;\n    }\n    return factors;\n  }\n\n  var parse = function(p1, p2) {\n\n    var n = 0, d = 1, s = 1;\n    var v = 0, w = 0, x = 0, y = 1, z = 1;\n\n    var A = 0, B = 1;\n    var C = 1, D = 1;\n\n    var N = 10000000;\n    var M;\n\n    if (p1 === undefined || p1 === null) {\n      /* void */\n    } else if (p2 !== undefined) {\n      n = p1;\n      d = p2;\n      s = n * d;\n\n      if (n % 1 !== 0 || d % 1 !== 0) {\n        throw Fraction['NonIntegerParameter'];\n      }\n\n    } else\n      switch (typeof p1) {\n\n        case \"object\":\n          {\n            if (\"d\" in p1 && \"n\" in p1) {\n              n = p1[\"n\"];\n              d = p1[\"d\"];\n              if (\"s\" in p1)\n                n*= p1[\"s\"];\n            } else if (0 in p1) {\n              n = p1[0];\n              if (1 in p1)\n                d = p1[1];\n            } else {\n              throw Fraction['InvalidParameter'];\n            }\n            s = n * d;\n            break;\n          }\n        case \"number\":\n          {\n            if (p1 < 0) {\n              s = p1;\n              p1 = -p1;\n            }\n\n            if (p1 % 1 === 0) {\n              n = p1;\n            } else if (p1 > 0) { // check for != 0, scale would become NaN (log(0)), which converges really slow\n\n              if (p1 >= 1) {\n                z = Math.pow(10, Math.floor(1 + Math.log(p1) / Math.LN10));\n                p1/= z;\n              }\n\n              // Using Farey Sequences\n              // http://www.johndcook.com/blog/2010/10/20/best-rational-approximation/\n\n              while (B <= N && D <= N) {\n                M = (A + C) / (B + D);\n\n                if (p1 === M) {\n                  if (B + D <= N) {\n                    n = A + C;\n                    d = B + D;\n                  } else if (D > B) {\n                    n = C;\n                    d = D;\n                  } else {\n                    n = A;\n                    d = B;\n                  }\n                  break;\n\n                } else {\n\n                  if (p1 > M) {\n                    A+= C;\n                    B+= D;\n                  } else {\n                    C+= A;\n                    D+= B;\n                  }\n\n                  if (B > N) {\n                    n = C;\n                    d = D;\n                  } else {\n                    n = A;\n                    d = B;\n                  }\n                }\n              }\n              n*= z;\n            } else if (isNaN(p1) || isNaN(p2)) {\n              d = n = NaN;\n            }\n            break;\n          }\n        case \"string\":\n          {\n            B = p1.match(/\\d+|./g);\n\n            if (B === null)\n              throw Fraction['InvalidParameter'];\n\n            if (B[A] === '-') {// Check for minus sign at the beginning\n              s = -1;\n              A++;\n            } else if (B[A] === '+') {// Check for plus sign at the beginning\n              A++;\n            }\n\n            if (B.length === A + 1) { // Check if it's just a simple number \"1234\"\n              w = assign(B[A++], s);\n            } else if (B[A + 1] === '.' || B[A] === '.') { // Check if it's a decimal number\n\n              if (B[A] !== '.') { // Handle 0.5 and .5\n                v = assign(B[A++], s);\n              }\n              A++;\n\n              // Check for decimal places\n              if (A + 1 === B.length || B[A + 1] === '(' && B[A + 3] === ')' || B[A + 1] === \"'\" && B[A + 3] === \"'\") {\n                w = assign(B[A], s);\n                y = Math.pow(10, B[A].length);\n                A++;\n              }\n\n              // Check for repeating places\n              if (B[A] === '(' && B[A + 2] === ')' || B[A] === \"'\" && B[A + 2] === \"'\") {\n                x = assign(B[A + 1], s);\n                z = Math.pow(10, B[A + 1].length) - 1;\n                A+= 3;\n              }\n\n            } else if (B[A + 1] === '/' || B[A + 1] === ':') { // Check for a simple fraction \"123/456\" or \"123:456\"\n              w = assign(B[A], s);\n              y = assign(B[A + 2], 1);\n              A+= 3;\n            } else if (B[A + 3] === '/' && B[A + 1] === ' ') { // Check for a complex fraction \"123 1/2\"\n              v = assign(B[A], s);\n              w = assign(B[A + 2], s);\n              y = assign(B[A + 4], 1);\n              A+= 5;\n            }\n\n            if (B.length <= A) { // Check for more tokens on the stack\n              d = y * z;\n              s = /* void */\n              n = x + d * v + z * w;\n              break;\n            }\n\n            /* Fall through on error */\n          }\n        default:\n          throw Fraction['InvalidParameter'];\n      }\n\n    if (d === 0) {\n      throw Fraction['DivisionByZero'];\n    }\n\n    P[\"s\"] = s < 0 ? -1 : 1;\n    P[\"n\"] = Math.abs(n);\n    P[\"d\"] = Math.abs(d);\n  };\n\n  function modpow(b, e, m) {\n\n    var r = 1;\n    for (; e > 0; b = (b * b) % m, e >>= 1) {\n\n      if (e & 1) {\n        r = (r * b) % m;\n      }\n    }\n    return r;\n  }\n\n\n  function cycleLen(n, d) {\n\n    for (; d % 2 === 0;\n      d/= 2) {\n    }\n\n    for (; d % 5 === 0;\n      d/= 5) {\n    }\n\n    if (d === 1) // Catch non-cyclic numbers\n      return 0;\n\n    // If we would like to compute really large numbers quicker, we could make use of Fermat's little theorem:\n    // 10^(d-1) % d == 1\n    // However, we don't need such large numbers and MAX_CYCLE_LEN should be the capstone,\n    // as we want to translate the numbers to strings.\n\n    var rem = 10 % d;\n    var t = 1;\n\n    for (; rem !== 1; t++) {\n      rem = rem * 10 % d;\n\n      if (t > MAX_CYCLE_LEN)\n        return 0; // Returning 0 here means that we don't print it as a cyclic number. It's likely that the answer is `d-1`\n    }\n    return t;\n  }\n\n\n  function cycleStart(n, d, len) {\n\n    var rem1 = 1;\n    var rem2 = modpow(10, len, d);\n\n    for (var t = 0; t < 300; t++) { // s < ~log10(Number.MAX_VALUE)\n      // Solve 10^s == 10^(s+t) (mod d)\n\n      if (rem1 === rem2)\n        return t;\n\n      rem1 = rem1 * 10 % d;\n      rem2 = rem2 * 10 % d;\n    }\n    return 0;\n  }\n\n  function gcd(a, b) {\n\n    if (!a)\n      return b;\n    if (!b)\n      return a;\n\n    while (1) {\n      a%= b;\n      if (!a)\n        return b;\n      b%= a;\n      if (!b)\n        return a;\n    }\n  };\n\n  /**\n   * Module constructor\n   *\n   * @constructor\n   * @param {number|Fraction=} a\n   * @param {number=} b\n   */\n  function Fraction(a, b) {\n\n    parse(a, b);\n\n    if (this instanceof Fraction) {\n      a = gcd(P[\"d\"], P[\"n\"]); // Abuse variable a\n      this[\"s\"] = P[\"s\"];\n      this[\"n\"] = P[\"n\"] / a;\n      this[\"d\"] = P[\"d\"] / a;\n    } else {\n      return newFraction(P['s'] * P['n'], P['d']);\n    }\n  }\n\n  Fraction['DivisionByZero'] = new Error(\"Division by Zero\");\n  Fraction['InvalidParameter'] = new Error(\"Invalid argument\");\n  Fraction['NonIntegerParameter'] = new Error(\"Parameters must be integer\");\n\n  Fraction.prototype = {\n\n    \"s\": 1,\n    \"n\": 0,\n    \"d\": 1,\n\n    /**\n     * Calculates the absolute value\n     *\n     * Ex: new Fraction(-4).abs() => 4\n     **/\n    \"abs\": function() {\n\n      return newFraction(this[\"n\"], this[\"d\"]);\n    },\n\n    /**\n     * Inverts the sign of the current fraction\n     *\n     * Ex: new Fraction(-4).neg() => 4\n     **/\n    \"neg\": function() {\n\n      return newFraction(-this[\"s\"] * this[\"n\"], this[\"d\"]);\n    },\n\n    /**\n     * Adds two rational numbers\n     *\n     * Ex: new Fraction({n: 2, d: 3}).add(\"14.9\") => 467 / 30\n     **/\n    \"add\": function(a, b) {\n\n      parse(a, b);\n      return newFraction(\n        this[\"s\"] * this[\"n\"] * P[\"d\"] + P[\"s\"] * this[\"d\"] * P[\"n\"],\n        this[\"d\"] * P[\"d\"]\n      );\n    },\n\n    /**\n     * Subtracts two rational numbers\n     *\n     * Ex: new Fraction({n: 2, d: 3}).add(\"14.9\") => -427 / 30\n     **/\n    \"sub\": function(a, b) {\n\n      parse(a, b);\n      return newFraction(\n        this[\"s\"] * this[\"n\"] * P[\"d\"] - P[\"s\"] * this[\"d\"] * P[\"n\"],\n        this[\"d\"] * P[\"d\"]\n      );\n    },\n\n    /**\n     * Multiplies two rational numbers\n     *\n     * Ex: new Fraction(\"-17.(345)\").mul(3) => 5776 / 111\n     **/\n    \"mul\": function(a, b) {\n\n      parse(a, b);\n      return newFraction(\n        this[\"s\"] * P[\"s\"] * this[\"n\"] * P[\"n\"],\n        this[\"d\"] * P[\"d\"]\n      );\n    },\n\n    /**\n     * Divides two rational numbers\n     *\n     * Ex: new Fraction(\"-17.(345)\").inverse().div(3)\n     **/\n    \"div\": function(a, b) {\n\n      parse(a, b);\n      return newFraction(\n        this[\"s\"] * P[\"s\"] * this[\"n\"] * P[\"d\"],\n        this[\"d\"] * P[\"n\"]\n      );\n    },\n\n    /**\n     * Clones the actual object\n     *\n     * Ex: new Fraction(\"-17.(345)\").clone()\n     **/\n    \"clone\": function() {\n      return newFraction(this['s'] * this['n'], this['d']);\n    },\n\n    /**\n     * Calculates the modulo of two rational numbers - a more precise fmod\n     *\n     * Ex: new Fraction('4.(3)').mod([7, 8]) => (13/3) % (7/8) = (5/6)\n     **/\n    \"mod\": function(a, b) {\n\n      if (isNaN(this['n']) || isNaN(this['d'])) {\n        return new Fraction(NaN);\n      }\n\n      if (a === undefined) {\n        return newFraction(this[\"s\"] * this[\"n\"] % this[\"d\"], 1);\n      }\n\n      parse(a, b);\n      if (0 === P[\"n\"] && 0 === this[\"d\"]) {\n        throw Fraction['DivisionByZero'];\n      }\n\n      /*\n       * First silly attempt, kinda slow\n       *\n       return that[\"sub\"]({\n       \"n\": num[\"n\"] * Math.floor((this.n / this.d) / (num.n / num.d)),\n       \"d\": num[\"d\"],\n       \"s\": this[\"s\"]\n       });*/\n\n      /*\n       * New attempt: a1 / b1 = a2 / b2 * q + r\n       * => b2 * a1 = a2 * b1 * q + b1 * b2 * r\n       * => (b2 * a1 % a2 * b1) / (b1 * b2)\n       */\n      return newFraction(\n        this[\"s\"] * (P[\"d\"] * this[\"n\"]) % (P[\"n\"] * this[\"d\"]),\n        P[\"d\"] * this[\"d\"]\n      );\n    },\n\n    /**\n     * Calculates the fractional gcd of two rational numbers\n     *\n     * Ex: new Fraction(5,8).gcd(3,7) => 1/56\n     */\n    \"gcd\": function(a, b) {\n\n      parse(a, b);\n\n      // gcd(a / b, c / d) = gcd(a, c) / lcm(b, d)\n\n      return newFraction(gcd(P[\"n\"], this[\"n\"]) * gcd(P[\"d\"], this[\"d\"]), P[\"d\"] * this[\"d\"]);\n    },\n\n    /**\n     * Calculates the fractional lcm of two rational numbers\n     *\n     * Ex: new Fraction(5,8).lcm(3,7) => 15\n     */\n    \"lcm\": function(a, b) {\n\n      parse(a, b);\n\n      // lcm(a / b, c / d) = lcm(a, c) / gcd(b, d)\n\n      if (P[\"n\"] === 0 && this[\"n\"] === 0) {\n        return newFraction(0, 1);\n      }\n      return newFraction(P[\"n\"] * this[\"n\"], gcd(P[\"n\"], this[\"n\"]) * gcd(P[\"d\"], this[\"d\"]));\n    },\n\n    /**\n     * Calculates the ceil of a rational number\n     *\n     * Ex: new Fraction('4.(3)').ceil() => (5 / 1)\n     **/\n    \"ceil\": function(places) {\n\n      places = Math.pow(10, places || 0);\n\n      if (isNaN(this[\"n\"]) || isNaN(this[\"d\"])) {\n        return new Fraction(NaN);\n      }\n      return newFraction(Math.ceil(places * this[\"s\"] * this[\"n\"] / this[\"d\"]), places);\n    },\n\n    /**\n     * Calculates the floor of a rational number\n     *\n     * Ex: new Fraction('4.(3)').floor() => (4 / 1)\n     **/\n    \"floor\": function(places) {\n\n      places = Math.pow(10, places || 0);\n\n      if (isNaN(this[\"n\"]) || isNaN(this[\"d\"])) {\n        return new Fraction(NaN);\n      }\n      return newFraction(Math.floor(places * this[\"s\"] * this[\"n\"] / this[\"d\"]), places);\n    },\n\n    /**\n     * Rounds a rational numbers\n     *\n     * Ex: new Fraction('4.(3)').round() => (4 / 1)\n     **/\n    \"round\": function(places) {\n\n      places = Math.pow(10, places || 0);\n\n      if (isNaN(this[\"n\"]) || isNaN(this[\"d\"])) {\n        return new Fraction(NaN);\n      }\n      return newFraction(Math.round(places * this[\"s\"] * this[\"n\"] / this[\"d\"]), places);\n    },\n\n    /**\n     * Gets the inverse of the fraction, means numerator and denominator are exchanged\n     *\n     * Ex: new Fraction([-3, 4]).inverse() => -4 / 3\n     **/\n    \"inverse\": function() {\n\n      return newFraction(this[\"s\"] * this[\"d\"], this[\"n\"]);\n    },\n\n    /**\n     * Calculates the fraction to some rational exponent, if possible\n     *\n     * Ex: new Fraction(-1,2).pow(-3) => -8\n     */\n    \"pow\": function(a, b) {\n\n      parse(a, b);\n\n      // Trivial case when exp is an integer\n\n      if (P['d'] === 1) {\n\n        if (P['s'] < 0) {\n          return newFraction(Math.pow(this['s'] * this[\"d\"], P['n']), Math.pow(this[\"n\"], P['n']));\n        } else {\n          return newFraction(Math.pow(this['s'] * this[\"n\"], P['n']), Math.pow(this[\"d\"], P['n']));\n        }\n      }\n\n      // Negative roots become complex\n      //     (-a/b)^(c/d) = x\n      // <=> (-1)^(c/d) * (a/b)^(c/d) = x\n      // <=> (cos(pi) + i*sin(pi))^(c/d) * (a/b)^(c/d) = x         # rotate 1 by 180°\n      // <=> (cos(c*pi/d) + i*sin(c*pi/d)) * (a/b)^(c/d) = x       # DeMoivre's formula in Q ( https://proofwiki.org/wiki/De_Moivre%27s_Formula/Rational_Index )\n      // From which follows that only for c=0 the root is non-complex. c/d is a reduced fraction, so that sin(c/dpi)=0 occurs for d=1, which is handled by our trivial case.\n      if (this['s'] < 0) return null;\n\n      // Now prime factor n and d\n      var N = factorize(this['n']);\n      var D = factorize(this['d']);\n\n      // Exponentiate and take root for n and d individually\n      var n = 1;\n      var d = 1;\n      for (var k in N) {\n        if (k === '1') continue;\n        if (k === '0') {\n          n = 0;\n          break;\n        }\n        N[k]*= P['n'];\n\n        if (N[k] % P['d'] === 0) {\n          N[k]/= P['d'];\n        } else return null;\n        n*= Math.pow(k, N[k]);\n      }\n\n      for (var k in D) {\n        if (k === '1') continue;\n        D[k]*= P['n'];\n\n        if (D[k] % P['d'] === 0) {\n          D[k]/= P['d'];\n        } else return null;\n        d*= Math.pow(k, D[k]);\n      }\n\n      if (P['s'] < 0) {\n        return newFraction(d, n);\n      }\n      return newFraction(n, d);\n    },\n\n    /**\n     * Check if two rational numbers are the same\n     *\n     * Ex: new Fraction(19.6).equals([98, 5]);\n     **/\n    \"equals\": function(a, b) {\n\n      parse(a, b);\n      return this[\"s\"] * this[\"n\"] * P[\"d\"] === P[\"s\"] * P[\"n\"] * this[\"d\"]; // Same as compare() === 0\n    },\n\n    /**\n     * Check if two rational numbers are the same\n     *\n     * Ex: new Fraction(19.6).equals([98, 5]);\n     **/\n    \"compare\": function(a, b) {\n\n      parse(a, b);\n      var t = (this[\"s\"] * this[\"n\"] * P[\"d\"] - P[\"s\"] * P[\"n\"] * this[\"d\"]);\n      return (0 < t) - (t < 0);\n    },\n\n    \"simplify\": function(eps) {\n\n      if (isNaN(this['n']) || isNaN(this['d'])) {\n        return this;\n      }\n\n      eps = eps || 0.001;\n\n      var thisABS = this['abs']();\n      var cont = thisABS['toContinued']();\n\n      for (var i = 1; i < cont.length; i++) {\n\n        var s = newFraction(cont[i - 1], 1);\n        for (var k = i - 2; k >= 0; k--) {\n          s = s['inverse']()['add'](cont[k]);\n        }\n\n        if (s['sub'](thisABS)['abs']().valueOf() < eps) {\n          return s['mul'](this['s']);\n        }\n      }\n      return this;\n    },\n\n    /**\n     * Check if two rational numbers are divisible\n     *\n     * Ex: new Fraction(19.6).divisible(1.5);\n     */\n    \"divisible\": function(a, b) {\n\n      parse(a, b);\n      return !(!(P[\"n\"] * this[\"d\"]) || ((this[\"n\"] * P[\"d\"]) % (P[\"n\"] * this[\"d\"])));\n    },\n\n    /**\n     * Returns a decimal representation of the fraction\n     *\n     * Ex: new Fraction(\"100.'91823'\").valueOf() => 100.91823918239183\n     **/\n    'valueOf': function() {\n\n      return this[\"s\"] * this[\"n\"] / this[\"d\"];\n    },\n\n    /**\n     * Returns a string-fraction representation of a Fraction object\n     *\n     * Ex: new Fraction(\"1.'3'\").toFraction(true) => \"4 1/3\"\n     **/\n    'toFraction': function(excludeWhole) {\n\n      var whole, str = \"\";\n      var n = this[\"n\"];\n      var d = this[\"d\"];\n      if (this[\"s\"] < 0) {\n        str+= '-';\n      }\n\n      if (d === 1) {\n        str+= n;\n      } else {\n\n        if (excludeWhole && (whole = Math.floor(n / d)) > 0) {\n          str+= whole;\n          str+= \" \";\n          n%= d;\n        }\n\n        str+= n;\n        str+= '/';\n        str+= d;\n      }\n      return str;\n    },\n\n    /**\n     * Returns a latex representation of a Fraction object\n     *\n     * Ex: new Fraction(\"1.'3'\").toLatex() => \"\\frac{4}{3}\"\n     **/\n    'toLatex': function(excludeWhole) {\n\n      var whole, str = \"\";\n      var n = this[\"n\"];\n      var d = this[\"d\"];\n      if (this[\"s\"] < 0) {\n        str+= '-';\n      }\n\n      if (d === 1) {\n        str+= n;\n      } else {\n\n        if (excludeWhole && (whole = Math.floor(n / d)) > 0) {\n          str+= whole;\n          n%= d;\n        }\n\n        str+= \"\\\\frac{\";\n        str+= n;\n        str+= '}{';\n        str+= d;\n        str+= '}';\n      }\n      return str;\n    },\n\n    /**\n     * Returns an array of continued fraction elements\n     *\n     * Ex: new Fraction(\"7/8\").toContinued() => [0,1,7]\n     */\n    'toContinued': function() {\n\n      var t;\n      var a = this['n'];\n      var b = this['d'];\n      var res = [];\n\n      if (isNaN(a) || isNaN(b)) {\n        return res;\n      }\n\n      do {\n        res.push(Math.floor(a / b));\n        t = a % b;\n        a = b;\n        b = t;\n      } while (a !== 1);\n\n      return res;\n    },\n\n    /**\n     * Creates a string representation of a fraction with all digits\n     *\n     * Ex: new Fraction(\"100.'91823'\").toString() => \"100.(91823)\"\n     **/\n    'toString': function(dec) {\n\n      var N = this[\"n\"];\n      var D = this[\"d\"];\n\n      if (isNaN(N) || isNaN(D)) {\n        return \"NaN\";\n      }\n\n      dec = dec || 15; // 15 = decimal places when no repetation\n\n      var cycLen = cycleLen(N, D); // Cycle length\n      var cycOff = cycleStart(N, D, cycLen); // Cycle start\n\n      var str = this['s'] < 0 ? \"-\" : \"\";\n\n      str+= N / D | 0;\n\n      N%= D;\n      N*= 10;\n\n      if (N)\n        str+= \".\";\n\n      if (cycLen) {\n\n        for (var i = cycOff; i--;) {\n          str+= N / D | 0;\n          N%= D;\n          N*= 10;\n        }\n        str+= \"(\";\n        for (var i = cycLen; i--;) {\n          str+= N / D | 0;\n          N%= D;\n          N*= 10;\n        }\n        str+= \")\";\n      } else {\n        for (var i = dec; N && i--;) {\n          str+= N / D | 0;\n          N%= D;\n          N*= 10;\n        }\n      }\n      return str;\n    }\n  };\n\n  if (typeof define === \"function\" && define[\"amd\"]) {\n    define([], function() {\n      return Fraction;\n    });\n  } else if (typeof exports === \"object\") {\n    Object.defineProperty(Fraction, \"__esModule\", { 'value': true });\n    Fraction['default'] = Fraction;\n    Fraction['Fraction'] = Fraction;\n    module['exports'] = Fraction;\n  } else {\n    root['Fraction'] = Fraction;\n  }\n\n})(this);\n/bigfraction.jsRT/**\n * @license Fraction.js v4.2.0 23/05/2021\n * https://www.xarg.org/2014/03/rational-numbers-in-javascript/\n *\n * Copyright (c) 2021, Robert Eisele (robert@xarg.org)\n * Dual licensed under the MIT or GPL Version 2 licenses.\n **/\n\n\n/**\n *\n * This class offers the possibility to calculate fractions.\n * You can pass a fraction in different formats. Either as array, as double, as string or as an integer.\n *\n * Array/Object form\n * [ 0 => <nominator>, 1 => <denominator> ]\n * [ n => <nominator>, d => <denominator> ]\n *\n * Integer form\n * - Single integer value\n *\n * Double form\n * - Single double value\n *\n * String form\n * 123.456 - a simple double\n * 123/456 - a string fraction\n * 123.'456' - a double with repeating decimal places\n * 123.(456) - synonym\n * 123.45'6' - a double with repeating last place\n * 123.45(6) - synonym\n *\n * Example:\n *\n * let f = new Fraction(\"9.4'31'\");\n * f.mul([-4, 3]).div(4.9);\n *\n */\n\n(function(root) {\n\n  \"use strict\";\n\n  // Set Identity function to downgrade BigInt to Number if needed\n  if (!BigInt) BigInt = function(n) { if (isNaN(n)) throw new Error(\"\"); return n; };\n\n  const C_ONE = BigInt(1);\n  const C_ZERO = BigInt(0);\n  const C_TEN = BigInt(10);\n  const C_TWO = BigInt(2);\n  const C_FIVE = BigInt(5);\n\n  // Maximum search depth for cyclic rational numbers. 2000 should be more than enough.\n  // Example: 1/7 = 0.(142857) has 6 repeating decimal places.\n  // If MAX_CYCLE_LEN gets reduced, long cycles will not be detected and toString() only gets the first 10 digits\n  const MAX_CYCLE_LEN = 2000;\n\n  // Parsed data to avoid calling \"new\" all the time\n  const P = {\n    \"s\": C_ONE,\n    \"n\": C_ZERO,\n    \"d\": C_ONE\n  };\n\n  function assign(n, s) {\n\n    try {\n      n = BigInt(n);\n    } catch (e) {\n      throw Fraction['InvalidParameter'];\n    }\n    return n * s;\n  }\n\n  // Creates a new Fraction internally without the need of the bulky constructor\n  function newFraction(n, d) {\n\n    if (d === C_ZERO) {\n      throw Fraction['DivisionByZero'];\n    }\n\n    const f = Object.create(Fraction.prototype);\n    f[\"s\"] = n < C_ZERO ? -C_ONE : C_ONE;\n\n    n = n < C_ZERO ? -n : n;\n\n    const a = gcd(n, d);\n\n    f[\"n\"] = n / a;\n    f[\"d\"] = d / a;\n    return f;\n  }\n\n  function factorize(num) {\n\n    const factors = {};\n\n    let n = num;\n    let i = C_TWO;\n    let s = C_FIVE - C_ONE;\n\n    while (s <= n) {\n\n      while (n % i === C_ZERO) {\n        n/= i;\n        factors[i] = (factors[i] || C_ZERO) + C_ONE;\n      }\n      s+= C_ONE + C_TWO * i++;\n    }\n\n    if (n !== num) {\n      if (n > 1)\n        factors[n] = (factors[n] || C_ZERO) + C_ONE;\n    } else {\n      factors[num] = (factors[num] || C_ZERO) + C_ONE;\n    }\n    return factors;\n  }\n\n  const parse = function(p1, p2) {\n\n    let n = C_ZERO, d = C_ONE, s = C_ONE;\n\n    if (p1 === undefined || p1 === null) {\n      /* void */\n    } else if (p2 !== undefined) {\n      n = BigInt(p1);\n      d = BigInt(p2);\n      s = n * d;\n\n      if (n % C_ONE !== C_ZERO || d % C_ONE !== C_ZERO) {\n        throw Fraction['NonIntegerParameter'];\n      }\n\n    } else if (typeof p1 === \"object\") {\n      if (\"d\" in p1 && \"n\" in p1) {\n        n = BigInt(p1[\"n\"]);\n        d = BigInt(p1[\"d\"]);\n        if (\"s\" in p1)\n          n*= BigInt(p1[\"s\"]);\n      } else if (0 in p1) {\n        n = BigInt(p1[0]);\n        if (1 in p1)\n          d = BigInt(p1[1]);\n      } else if (p1 instanceof BigInt) {\n        n = BigInt(p1);\n      } else {\n        throw Fraction['InvalidParameter'];\n      }\n      s = n * d;\n    } else if (typeof p1 === \"bigint\") {\n      n = p1;\n      s = p1;\n      d = BigInt(1);\n    } else if (typeof p1 === \"number\") {\n\n      if (isNaN(p1)) {\n        throw Fraction['InvalidParameter'];\n      }\n\n      if (p1 < 0) {\n        s = -C_ONE;\n        p1 = -p1;\n      }\n\n      if (p1 % 1 === 0) {\n        n = BigInt(p1);\n      } else if (p1 > 0) { // check for != 0, scale would become NaN (log(0)), which converges really slow\n\n        let z = 1;\n\n        let A = 0, B = 1;\n        let C = 1, D = 1;\n\n        let N = 10000000;\n\n        if (p1 >= 1) {\n          z = 10 ** Math.floor(1 + Math.log10(p1));\n          p1/= z;\n        }\n\n        // Using Farey Sequences\n\n        while (B <= N && D <= N) {\n          let M = (A + C) / (B + D);\n\n          if (p1 === M) {\n            if (B + D <= N) {\n              n = A + C;\n              d = B + D;\n            } else if (D > B) {\n              n = C;\n              d = D;\n            } else {\n              n = A;\n              d = B;\n            }\n            break;\n\n          } else {\n\n            if (p1 > M) {\n              A+= C;\n              B+= D;\n            } else {\n              C+= A;\n              D+= B;\n            }\n\n            if (B > N) {\n              n = C;\n              d = D;\n            } else {\n              n = A;\n              d = B;\n            }\n          }\n        }\n        n = BigInt(n) * BigInt(z);\n        d = BigInt(d);\n\n      }\n\n    } else if (typeof p1 === \"string\") {\n\n      let ndx = 0;\n\n      let v = C_ZERO, w = C_ZERO, x = C_ZERO, y = C_ONE, z = C_ONE;\n\n      let match = p1.match(/\\d+|./g);\n\n      if (match === null)\n        throw Fraction['InvalidParameter'];\n\n      if (match[ndx] === '-') {// Check for minus sign at the beginning\n        s = -C_ONE;\n        ndx++;\n      } else if (match[ndx] === '+') {// Check for plus sign at the beginning\n        ndx++;\n      }\n\n      if (match.length === ndx + 1) { // Check if it's just a simple number \"1234\"\n        w = assign(match[ndx++], s);\n      } else if (match[ndx + 1] === '.' || match[ndx] === '.') { // Check if it's a decimal number\n\n        if (match[ndx] !== '.') { // Handle 0.5 and .5\n          v = assign(match[ndx++], s);\n        }\n        ndx++;\n\n        // Check for decimal places\n        if (ndx + 1 === match.length || match[ndx + 1] === '(' && match[ndx + 3] === ')' || match[ndx + 1] === \"'\" && match[ndx + 3] === \"'\") {\n          w = assign(match[ndx], s);\n          y = C_TEN ** BigInt(match[ndx].length);\n          ndx++;\n        }\n\n        // Check for repeating places\n        if (match[ndx] === '(' && match[ndx + 2] === ')' || match[ndx] === \"'\" && match[ndx + 2] === \"'\") {\n          x = assign(match[ndx + 1], s);\n          z = C_TEN ** BigInt(match[ndx + 1].length) - C_ONE;\n          ndx+= 3;\n        }\n\n      } else if (match[ndx + 1] === '/' || match[ndx + 1] === ':') { // Check for a simple fraction \"123/456\" or \"123:456\"\n        w = assign(match[ndx], s);\n        y = assign(match[ndx + 2], C_ONE);\n        ndx+= 3;\n      } else if (match[ndx + 3] === '/' && match[ndx + 1] === ' ') { // Check for a complex fraction \"123 1/2\"\n        v = assign(match[ndx], s);\n        w = assign(match[ndx + 2], s);\n        y = assign(match[ndx + 4], C_ONE);\n        ndx+= 5;\n      }\n\n      if (match.length <= ndx) { // Check for more tokens on the stack\n        d = y * z;\n        s = /* void */\n        n = x + d * v + z * w;\n      } else {\n        throw Fraction['InvalidParameter'];\n      }\n\n    } else {\n      throw Fraction['InvalidParameter'];\n    }\n\n    if (d === C_ZERO) {\n      throw Fraction['DivisionByZero'];\n    }\n\n    P[\"s\"] = s < C_ZERO ? -C_ONE : C_ONE;\n    P[\"n\"] = n < C_ZERO ? -n : n;\n    P[\"d\"] = d < C_ZERO ? -d : d;\n  };\n\n  function modpow(b, e, m) {\n\n    let r = C_ONE;\n    for (; e > C_ZERO; b = (b * b) % m, e >>= C_ONE) {\n\n      if (e & C_ONE) {\n        r = (r * b) % m;\n      }\n    }\n    return r;\n  }\n\n  function cycleLen(n, d) {\n\n    for (; d % C_TWO === C_ZERO;\n      d/= C_TWO) {\n    }\n\n    for (; d % C_FIVE === C_ZERO;\n      d/= C_FIVE) {\n    }\n\n    if (d === C_ONE) // Catch non-cyclic numbers\n      return C_ZERO;\n\n    // If we would like to compute really large numbers quicker, we could make use of Fermat's little theorem:\n    // 10^(d-1) % d == 1\n    // However, we don't need such large numbers and MAX_CYCLE_LEN should be the capstone,\n    // as we want to translate the numbers to strings.\n\n    let rem = C_TEN % d;\n    let t = 1;\n\n    for (; rem !== C_ONE; t++) {\n      rem = rem * C_TEN % d;\n\n      if (t > MAX_CYCLE_LEN)\n        return C_ZERO; // Returning 0 here means that we don't print it as a cyclic number. It's likely that the answer is `d-1`\n    }\n    return BigInt(t);\n  }\n\n  function cycleStart(n, d, len) {\n\n    let rem1 = C_ONE;\n    let rem2 = modpow(C_TEN, len, d);\n\n    for (let t = 0; t < 300; t++) { // s < ~log10(Number.MAX_VALUE)\n      // Solve 10^s == 10^(s+t) (mod d)\n\n      if (rem1 === rem2)\n        return BigInt(t);\n\n      rem1 = rem1 * C_TEN % d;\n      rem2 = rem2 * C_TEN % d;\n    }\n    return 0;\n  }\n\n  function gcd(a, b) {\n\n    if (!a)\n      return b;\n    if (!b)\n      return a;\n\n    while (1) {\n      a%= b;\n      if (!a)\n        return b;\n      b%= a;\n      if (!b)\n        return a;\n    }\n  }\n\n  /**\n   * Module constructor\n   *\n   * @constructor\n   * @param {number|Fraction=} a\n   * @param {number=} b\n   */\n  function Fraction(a, b) {\n\n    parse(a, b);\n\n    if (this instanceof Fraction) {\n      a = gcd(P[\"d\"], P[\"n\"]); // Abuse a\n      this[\"s\"] = P[\"s\"];\n      this[\"n\"] = P[\"n\"] / a;\n      this[\"d\"] = P[\"d\"] / a;\n    } else {\n      return newFraction(P['s'] * P['n'], P['d']);\n    }\n  }\n\n  Fraction['DivisionByZero'] = new Error(\"Division by Zero\");\n  Fraction['InvalidParameter'] = new Error(\"Invalid argument\");\n  Fraction['NonIntegerParameter'] = new Error(\"Parameters must be integer\");\n\n  Fraction.prototype = {\n\n    \"s\": C_ONE,\n    \"n\": C_ZERO,\n    \"d\": C_ONE,\n\n    /**\n     * Calculates the absolute value\n     *\n     * Ex: new Fraction(-4).abs() => 4\n     **/\n    \"abs\": function() {\n\n      return newFraction(this[\"n\"], this[\"d\"]);\n    },\n\n    /**\n     * Inverts the sign of the current fraction\n     *\n     * Ex: new Fraction(-4).neg() => 4\n     **/\n    \"neg\": function() {\n\n      return newFraction(-this[\"s\"] * this[\"n\"], this[\"d\"]);\n    },\n\n    /**\n     * Adds two rational numbers\n     *\n     * Ex: new Fraction({n: 2, d: 3}).add(\"14.9\") => 467 / 30\n     **/\n    \"add\": function(a, b) {\n\n      parse(a, b);\n      return newFraction(\n        this[\"s\"] * this[\"n\"] * P[\"d\"] + P[\"s\"] * this[\"d\"] * P[\"n\"],\n        this[\"d\"] * P[\"d\"]\n      );\n    },\n\n    /**\n     * Subtracts two rational numbers\n     *\n     * Ex: new Fraction({n: 2, d: 3}).add(\"14.9\") => -427 / 30\n     **/\n    \"sub\": function(a, b) {\n\n      parse(a, b);\n      return newFraction(\n        this[\"s\"] * this[\"n\"] * P[\"d\"] - P[\"s\"] * this[\"d\"] * P[\"n\"],\n        this[\"d\"] * P[\"d\"]\n      );\n    },\n\n    /**\n     * Multiplies two rational numbers\n     *\n     * Ex: new Fraction(\"-17.(345)\").mul(3) => 5776 / 111\n     **/\n    \"mul\": function(a, b) {\n\n      parse(a, b);\n      return newFraction(\n        this[\"s\"] * P[\"s\"] * this[\"n\"] * P[\"n\"],\n        this[\"d\"] * P[\"d\"]\n      );\n    },\n\n    /**\n     * Divides two rational numbers\n     *\n     * Ex: new Fraction(\"-17.(345)\").inverse().div(3)\n     **/\n    \"div\": function(a, b) {\n\n      parse(a, b);\n      return newFraction(\n        this[\"s\"] * P[\"s\"] * this[\"n\"] * P[\"d\"],\n        this[\"d\"] * P[\"n\"]\n      );\n    },\n\n    /**\n     * Clones the actual object\n     *\n     * Ex: new Fraction(\"-17.(345)\").clone()\n     **/\n    \"clone\": function() {\n      return newFraction(this['s'] * this['n'], this['d']);\n    },\n\n    /**\n     * Calculates the modulo of two rational numbers - a more precise fmod\n     *\n     * Ex: new Fraction('4.(3)').mod([7, 8]) => (13/3) % (7/8) = (5/6)\n     **/\n    \"mod\": function(a, b) {\n\n      if (a === undefined) {\n        return newFraction(this[\"s\"] * this[\"n\"] % this[\"d\"], C_ONE);\n      }\n\n      parse(a, b);\n      if (0 === P[\"n\"] && 0 === this[\"d\"]) {\n        throw Fraction['DivisionByZero'];\n      }\n\n      /*\n       * First silly attempt, kinda slow\n       *\n       return that[\"sub\"]({\n       \"n\": num[\"n\"] * Math.floor((this.n / this.d) / (num.n / num.d)),\n       \"d\": num[\"d\"],\n       \"s\": this[\"s\"]\n       });*/\n\n      /*\n       * New attempt: a1 / b1 = a2 / b2 * q + r\n       * => b2 * a1 = a2 * b1 * q + b1 * b2 * r\n       * => (b2 * a1 % a2 * b1) / (b1 * b2)\n       */\n      return newFraction(\n        this[\"s\"] * (P[\"d\"] * this[\"n\"]) % (P[\"n\"] * this[\"d\"]),\n        P[\"d\"] * this[\"d\"]\n      );\n    },\n\n    /**\n     * Calculates the fractional gcd of two rational numbers\n     *\n     * Ex: new Fraction(5,8).gcd(3,7) => 1/56\n     */\n    \"gcd\": function(a, b) {\n\n      parse(a, b);\n\n      // gcd(a / b, c / d) = gcd(a, c) / lcm(b, d)\n\n      return newFraction(gcd(P[\"n\"], this[\"n\"]) * gcd(P[\"d\"], this[\"d\"]), P[\"d\"] * this[\"d\"]);\n    },\n\n    /**\n     * Calculates the fractional lcm of two rational numbers\n     *\n     * Ex: new Fraction(5,8).lcm(3,7) => 15\n     */\n    \"lcm\": function(a, b) {\n\n      parse(a, b);\n\n      // lcm(a / b, c / d) = lcm(a, c) / gcd(b, d)\n\n      if (P[\"n\"] === C_ZERO && this[\"n\"] === C_ZERO) {\n        return newFraction(C_ZERO, C_ONE);\n      }\n      return newFraction(P[\"n\"] * this[\"n\"], gcd(P[\"n\"], this[\"n\"]) * gcd(P[\"d\"], this[\"d\"]));\n    },\n\n    /**\n     * Gets the inverse of the fraction, means numerator and denominator are exchanged\n     *\n     * Ex: new Fraction([-3, 4]).inverse() => -4 / 3\n     **/\n    \"inverse\": function() {\n      return newFraction(this[\"s\"] * this[\"d\"], this[\"n\"]);\n    },\n\n    /**\n     * Calculates the fraction to some integer exponent\n     *\n     * Ex: new Fraction(-1,2).pow(-3) => -8\n     */\n    \"pow\": function(a, b) {\n\n      parse(a, b);\n\n      // Trivial case when exp is an integer\n\n      if (P['d'] === C_ONE) {\n\n        if (P['s'] < C_ZERO) {\n          return newFraction((this['s'] * this[\"d\"]) ** P['n'], this[\"n\"] ** P['n']);\n        } else {\n          return newFraction((this['s'] * this[\"n\"]) ** P['n'], this[\"d\"] ** P['n']);\n        }\n      }\n\n      // Negative roots become complex\n      //     (-a/b)^(c/d) = x\n      // <=> (-1)^(c/d) * (a/b)^(c/d) = x\n      // <=> (cos(pi) + i*sin(pi))^(c/d) * (a/b)^(c/d) = x\n      // <=> (cos(c*pi/d) + i*sin(c*pi/d)) * (a/b)^(c/d) = x       # DeMoivre's formula\n      // From which follows that only for c=0 the root is non-complex\n      if (this['s'] < C_ZERO) return null;\n\n      // Now prime factor n and d\n      let N = factorize(this['n']);\n      let D = factorize(this['d']);\n\n      // Exponentiate and take root for n and d individually\n      let n = C_ONE;\n      let d = C_ONE;\n      for (let k in N) {\n        if (k === '1') continue;\n        if (k === '0') {\n          n = C_ZERO;\n          break;\n        }\n        N[k]*= P['n'];\n\n        if (N[k] % P['d'] === C_ZERO) {\n          N[k]/= P['d'];\n        } else return null;\n        n*= BigInt(k) ** N[k];\n      }\n\n      for (let k in D) {\n        if (k === '1') continue;\n        D[k]*= P['n'];\n\n        if (D[k] % P['d'] === C_ZERO) {\n          D[k]/= P['d'];\n        } else return null;\n        d*= BigInt(k) ** D[k];\n      }\n\n      if (P['s'] < C_ZERO) {\n        return newFraction(d, n);\n      }\n      return newFraction(n, d);\n    },\n\n    /**\n     * Check if two rational numbers are the same\n     *\n     * Ex: new Fraction(19.6).equals([98, 5]);\n     **/\n    \"equals\": function(a, b) {\n\n      parse(a, b);\n      return this[\"s\"] * this[\"n\"] * P[\"d\"] === P[\"s\"] * P[\"n\"] * this[\"d\"]; // Same as compare() === 0\n    },\n\n    /**\n     * Check if two rational numbers are the same\n     *\n     * Ex: new Fraction(19.6).equals([98, 5]);\n     **/\n    \"compare\": function(a, b) {\n\n      parse(a, b);\n      let t = (this[\"s\"] * this[\"n\"] * P[\"d\"] - P[\"s\"] * P[\"n\"] * this[\"d\"]);\n\n      return (C_ZERO < t) - (t < C_ZERO);\n    },\n\n    /**\n     * Calculates the ceil of a rational number\n     *\n     * Ex: new Fraction('4.(3)').ceil() => (5 / 1)\n     **/\n    \"ceil\": function(places) {\n\n      places = C_TEN ** BigInt(places || 0);\n\n      return newFraction(this[\"s\"] * places * this[\"n\"] / this[\"d\"] +\n        (places * this[\"n\"] % this[\"d\"] > C_ZERO && this[\"s\"] >= C_ZERO ? C_ONE : C_ZERO),\n        places);\n    },\n\n    /**\n     * Calculates the floor of a rational number\n     *\n     * Ex: new Fraction('4.(3)').floor() => (4 / 1)\n     **/\n    \"floor\": function(places) {\n\n      places = C_TEN ** BigInt(places || 0);\n\n      return newFraction(this[\"s\"] * places * this[\"n\"] / this[\"d\"] -\n        (places * this[\"n\"] % this[\"d\"] > C_ZERO && this[\"s\"] < C_ZERO ? C_ONE : C_ZERO),\n        places);\n    },\n\n    /**\n     * Rounds a rational numbers\n     *\n     * Ex: new Fraction('4.(3)').round() => (4 / 1)\n     **/\n    \"round\": function(places) {\n\n      places = C_TEN ** BigInt(places || 0);\n\n      /* Derivation:\n\n      s >= 0:\n        round(n / d) = trunc(n / d) + (n % d) / d >= 0.5 ? 1 : 0\n                     = trunc(n / d) + 2(n % d) >= d ? 1 : 0\n      s < 0:\n        round(n / d) =-trunc(n / d) - (n % d) / d > 0.5 ? 1 : 0\n                     =-trunc(n / d) - 2(n % d) > d ? 1 : 0\n\n      =>:\n\n      round(s * n / d) = s * trunc(n / d) + s * (C + 2(n % d) > d ? 1 : 0)\n          where C = s >= 0 ? 1 : 0, to fix the >= for the positve case.\n      */\n\n      return newFraction(this[\"s\"] * places * this[\"n\"] / this[\"d\"] +\n        this[\"s\"] * ((this[\"s\"] >= C_ZERO ? C_ONE : C_ZERO) + C_TWO * (places * this[\"n\"] % this[\"d\"]) > this[\"d\"] ? C_ONE : C_ZERO),\n        places);\n    },\n\n    /**\n     * Check if two rational numbers are divisible\n     *\n     * Ex: new Fraction(19.6).divisible(1.5);\n     */\n    \"divisible\": function(a, b) {\n\n      parse(a, b);\n      return !(!(P[\"n\"] * this[\"d\"]) || ((this[\"n\"] * P[\"d\"]) % (P[\"n\"] * this[\"d\"])));\n    },\n\n    /**\n     * Returns a decimal representation of the fraction\n     *\n     * Ex: new Fraction(\"100.'91823'\").valueOf() => 100.91823918239183\n     **/\n    'valueOf': function() {\n      // Best we can do so far\n      return Number(this[\"s\"] * this[\"n\"]) / Number(this[\"d\"]);\n    },\n\n    /**\n     * Creates a string representation of a fraction with all digits\n     *\n     * Ex: new Fraction(\"100.'91823'\").toString() => \"100.(91823)\"\n     **/\n    'toString': function(dec) {\n\n      let N = this[\"n\"];\n      let D = this[\"d\"];\n\n      dec = dec || 15; // 15 = decimal places when no repitation\n\n      let cycLen = cycleLen(N, D); // Cycle length\n      let cycOff = cycleStart(N, D, cycLen); // Cycle start\n\n      let str = this['s'] < C_ZERO ? \"-\" : \"\";\n\n      // Append integer part\n      str+= N / D;\n\n      N%= D;\n      N*= C_TEN;\n\n      if (N)\n        str+= \".\";\n\n      if (cycLen) {\n\n        for (let i = cycOff; i--;) {\n          str+= N / D;\n          N%= D;\n          N*= C_TEN;\n        }\n        str+= \"(\";\n        for (let i = cycLen; i--;) {\n          str+= N / D;\n          N%= D;\n          N*= C_TEN;\n        }\n        str+= \")\";\n      } else {\n        for (let i = dec; N && i--;) {\n          str+= N / D;\n          N%= D;\n          N*= C_TEN;\n        }\n      }\n      return str;\n    },\n\n    /**\n     * Returns a string-fraction representation of a Fraction object\n     *\n     * Ex: new Fraction(\"1.'3'\").toFraction() => \"4 1/3\"\n     **/\n    'toFraction': function(excludeWhole) {\n\n      let n = this[\"n\"];\n      let d = this[\"d\"];\n      let str = this['s'] < C_ZERO ? \"-\" : \"\";\n\n      if (d === C_ONE) {\n        str+= n;\n      } else {\n        let whole = n / d;\n        if (excludeWhole && whole > C_ZERO) {\n          str+= whole;\n          str+= \" \";\n          n%= d;\n        }\n\n        str+= n;\n        str+= '/';\n        str+= d;\n      }\n      return str;\n    },\n\n    /**\n     * Returns a latex representation of a Fraction object\n     *\n     * Ex: new Fraction(\"1.'3'\").toLatex() => \"\\frac{4}{3}\"\n     **/\n    'toLatex': function(excludeWhole) {\n\n      let n = this[\"n\"];\n      let d = this[\"d\"];\n      let str = this['s'] < C_ZERO ? \"-\" : \"\";\n\n      if (d === C_ONE) {\n        str+= n;\n      } else {\n        let whole = n / d;\n        if (excludeWhole && whole > C_ZERO) {\n          str+= whole;\n          n%= d;\n        }\n\n        str+= \"\\\\frac{\";\n        str+= n;\n        str+= '}{';\n        str+= d;\n        str+= '}';\n      }\n      return str;\n    },\n\n    /**\n     * Returns an array of continued fraction elements\n     *\n     * Ex: new Fraction(\"7/8\").toContinued() => [0,1,7]\n     */\n    'toContinued': function() {\n\n      let a = this['n'];\n      let b = this['d'];\n      let res = [];\n\n      do {\n        res.push(a / b);\n        let t = a % b;\n        a = b;\n        b = t;\n      } while (a !== C_ONE);\n\n      return res;\n    },\n\n    \"simplify\": function(eps) {\n\n      eps = eps || 0.001;\n\n      const thisABS = this['abs']();\n      const cont = thisABS['toContinued']();\n\n      for (let i = 1; i < cont.length; i++) {\n\n        let s = newFraction(cont[i - 1], C_ONE);\n        for (let k = i - 2; k >= 0; k--) {\n          s = s['inverse']()['add'](cont[k]);\n        }\n\n        if (s['sub'](thisABS)['abs']().valueOf() < eps) {\n          return s['mul'](this['s']);\n        }\n      }\n      return this;\n    }\n  };\n\n  if (typeof define === \"function\" && define[\"amd\"]) {\n    define([], function() {\n      return Fraction;\n    });\n  } else if (typeof exports === \"object\") {\n    Object.defineProperty(exports, \"__esModule\", { 'value': true });\n    Fraction['default'] = Fraction;\n    Fraction['Fraction'] = Fraction;\n    module['exports'] = Fraction;\n  } else {\n    root['Fraction'] = Fraction;\n  }\n\n})(this);\n/fraction.min.js\u0016/*\nFraction.js v4.2.0 05/03/2022\nhttps://www.xarg.org/2014/03/rational-numbers-in-javascript/\n\nCopyright (c) 2021, Robert Eisele (robert@xarg.org)\nDual licensed under the MIT or GPL Version 2 licenses.\n*/\n(function(z){function p(a,c){var b=0,d=1,f=1,l=0,k=0,t=0,x=1,u=1,g=0,h=1,v=1,q=1;if(void 0!==a&&null!==a)if(void 0!==c){if(b=a,d=c,f=b*d,0!==b%1||0!==d%1)throw m.NonIntegerParameter;}else switch(typeof a){case \"object\":if(\"d\"in a&&\"n\"in a)b=a.n,d=a.d,\"s\"in a&&(b*=a.s);else if(0 in a)b=a[0],1 in a&&(d=a[1]);else throw m.InvalidParameter;f=b*d;break;case \"number\":0>a&&(f=a,a=-a);if(0===a%1)b=a;else if(0<a){1<=a&&(u=Math.pow(10,Math.floor(1+Math.log(a)/Math.LN10)),a/=u);for(;1E7>=h&&1E7>=q;)if(b=(g+\nv)/(h+q),a===b){1E7>=h+q?(b=g+v,d=h+q):q>h?(b=v,d=q):(b=g,d=h);break}else a>b?(g+=v,h+=q):(v+=g,q+=h),1E7<h?(b=v,d=q):(b=g,d=h);b*=u}else if(isNaN(a)||isNaN(c))d=b=NaN;break;case \"string\":h=a.match(/\\d+|./g);if(null===h)throw m.InvalidParameter;\"-\"===h[g]?(f=-1,g++):\"+\"===h[g]&&g++;if(h.length===g+1)k=r(h[g++],f);else if(\".\"===h[g+1]||\".\"===h[g]){\".\"!==h[g]&&(l=r(h[g++],f));g++;if(g+1===h.length||\"(\"===h[g+1]&&\")\"===h[g+3]||\"'\"===h[g+1]&&\"'\"===h[g+3])k=r(h[g],f),x=Math.pow(10,h[g].length),g++;if(\"(\"===\nh[g]&&\")\"===h[g+2]||\"'\"===h[g]&&\"'\"===h[g+2])t=r(h[g+1],f),u=Math.pow(10,h[g+1].length)-1,g+=3}else\"/\"===h[g+1]||\":\"===h[g+1]?(k=r(h[g],f),x=r(h[g+2],1),g+=3):\"/\"===h[g+3]&&\" \"===h[g+1]&&(l=r(h[g],f),k=r(h[g+2],f),x=r(h[g+4],1),g+=5);if(h.length<=g){d=x*u;f=b=t+d*l+u*k;break}default:throw m.InvalidParameter;}if(0===d)throw m.DivisionByZero;e.s=0>f?-1:1;e.n=Math.abs(b);e.d=Math.abs(d)}function r(a,c){if(isNaN(a=parseInt(a,10)))throw m.InvalidParameter;return a*c}function n(a,c){if(0===c)throw m.DivisionByZero;\nvar b=Object.create(m.prototype);b.s=0>a?-1:1;a=0>a?-a:a;var d=w(a,c);b.n=a/d;b.d=c/d;return b}function y(a){for(var c={},b=a,d=2,f=4;f<=b;){for(;0===b%d;)b/=d,c[d]=(c[d]||0)+1;f+=1+2*d++}b!==a?1<b&&(c[b]=(c[b]||0)+1):c[a]=(c[a]||0)+1;return c}function w(a,c){if(!a)return c;if(!c)return a;for(;;){a%=c;if(!a)return c;c%=a;if(!c)return a}}function m(a,c){p(a,c);if(this instanceof m)a=w(e.d,e.n),this.s=e.s,this.n=e.n/a,this.d=e.d/a;else return n(e.s*e.n,e.d)}var e={s:1,n:0,d:1};m.DivisionByZero=Error(\"Division by Zero\");\nm.InvalidParameter=Error(\"Invalid argument\");m.NonIntegerParameter=Error(\"Parameters must be integer\");m.prototype={s:1,n:0,d:1,abs:function(){return n(this.n,this.d)},neg:function(){return n(-this.s*this.n,this.d)},add:function(a,c){p(a,c);return n(this.s*this.n*e.d+e.s*this.d*e.n,this.d*e.d)},sub:function(a,c){p(a,c);return n(this.s*this.n*e.d-e.s*this.d*e.n,this.d*e.d)},mul:function(a,c){p(a,c);return n(this.s*e.s*this.n*e.n,this.d*e.d)},div:function(a,c){p(a,c);return n(this.s*e.s*this.n*e.d,\nthis.d*e.n)},clone:function(){return n(this.s*this.n,this.d)},mod:function(a,c){if(isNaN(this.n)||isNaN(this.d))return new m(NaN);if(void 0===a)return n(this.s*this.n%this.d,1);p(a,c);if(0===e.n&&0===this.d)throw m.DivisionByZero;return n(this.s*e.d*this.n%(e.n*this.d),e.d*this.d)},gcd:function(a,c){p(a,c);return n(w(e.n,this.n)*w(e.d,this.d),e.d*this.d)},lcm:function(a,c){p(a,c);return 0===e.n&&0===this.n?n(0,1):n(e.n*this.n,w(e.n,this.n)*w(e.d,this.d))},ceil:function(a){a=Math.pow(10,a||0);return isNaN(this.n)||\nisNaN(this.d)?new m(NaN):n(Math.ceil(a*this.s*this.n/this.d),a)},floor:function(a){a=Math.pow(10,a||0);return isNaN(this.n)||isNaN(this.d)?new m(NaN):n(Math.floor(a*this.s*this.n/this.d),a)},round:function(a){a=Math.pow(10,a||0);return isNaN(this.n)||isNaN(this.d)?new m(NaN):n(Math.round(a*this.s*this.n/this.d),a)},inverse:function(){return n(this.s*this.d,this.n)},pow:function(a,c){p(a,c);if(1===e.d)return 0>e.s?n(Math.pow(this.s*this.d,e.n),Math.pow(this.n,e.n)):n(Math.pow(this.s*this.n,e.n),Math.pow(this.d,\ne.n));if(0>this.s)return null;var b=y(this.n),d=y(this.d),f=1,l=1,k;for(k in b)if(\"1\"!==k){if(\"0\"===k){f=0;break}b[k]*=e.n;if(0===b[k]%e.d)b[k]/=e.d;else return null;f*=Math.pow(k,b[k])}for(k in d)if(\"1\"!==k){d[k]*=e.n;if(0===d[k]%e.d)d[k]/=e.d;else return null;l*=Math.pow(k,d[k])}return 0>e.s?n(l,f):n(f,l)},equals:function(a,c){p(a,c);return this.s*this.n*e.d===e.s*e.n*this.d},compare:function(a,c){p(a,c);var b=this.s*this.n*e.d-e.s*e.n*this.d;return(0<b)-(0>b)},simplify:function(a){if(isNaN(this.n)||\nisNaN(this.d))return this;a=a||.001;for(var c=this.abs(),b=c.toContinued(),d=1;d<b.length;d++){for(var f=n(b[d-1],1),l=d-2;0<=l;l--)f=f.inverse().add(b[l]);if(f.sub(c).abs().valueOf()<a)return f.mul(this.s)}return this},divisible:function(a,c){p(a,c);return!(!(e.n*this.d)||this.n*e.d%(e.n*this.d))},valueOf:function(){return this.s*this.n/this.d},toFraction:function(a){var c,b=\"\",d=this.n,f=this.d;0>this.s&&(b+=\"-\");1===f?b+=d:(a&&0<(c=Math.floor(d/f))&&(b=b+c+\" \",d%=f),b=b+d+\"/\",b+=f);return b},toLatex:function(a){var c,\nb=\"\",d=this.n,f=this.d;0>this.s&&(b+=\"-\");1===f?b+=d:(a&&0<(c=Math.floor(d/f))&&(b+=c,d%=f),b=b+\"\\\\frac{\"+d+\"}{\"+f,b+=\"}\");return b},toContinued:function(){var a=this.n,c=this.d,b=[];if(isNaN(a)||isNaN(c))return b;do{b.push(Math.floor(a/c));var d=a%c;a=c;c=d}while(1!==a);return b},toString:function(a){var c=this.n,b=this.d;if(isNaN(c)||isNaN(b))return\"NaN\";var d;a:{for(d=b;0===d%2;d/=2);for(;0===d%5;d/=5);if(1===d)d=0;else{for(var f=10%d,l=1;1!==f;l++)if(f=10*f%d,2E3<l){d=0;break a}d=l}}a:{f=1;l=\n10;for(var k=d,t=1;0<k;l=l*l%b,k>>=1)k&1&&(t=t*l%b);l=t;for(k=0;300>k;k++){if(f===l){l=k;break a}f=10*f%b;l=10*l%b}l=0}f=0>this.s?\"-\":\"\";f+=c/b|0;(c=c%b*10)&&(f+=\".\");if(d){for(a=l;a--;)f+=c/b|0,c%=b,c*=10;f+=\"(\";for(a=d;a--;)f+=c/b|0,c%=b,c*=10;f+=\")\"}else for(a=a||15;c&&a--;)f+=c/b|0,c%=b,c*=10;return f}};\"function\"===typeof define&&define.amd?define([],function(){return m}):\"object\"===typeof exports?(Object.defineProperty(m,\"__esModule\",{value:!0}),m[\"default\"]=m,m.Fraction=m,module.exports=m):\nz.Fraction=m})(this);/README.md=# Fraction.js - ℚ in JavaScript\n\n[![NPM Package](https://nodei.co/npm-dl/fraction.js.png?months=6&height=1)](https://npmjs.org/package/fraction.js)\n\n[![Build Status](https://travis-ci.org/infusion/Fraction.js.svg?branch=master)](https://travis-ci.org/infusion/Fraction.js)\n[![MIT license](http://img.shields.io/badge/license-MIT-brightgreen.svg)](http://opensource.org/licenses/MIT)\n\n\nTired of inprecise numbers represented by doubles, which have to store rational and irrational numbers like PI or sqrt(2) the same way? Obviously the following problem is preventable:\n\n```javascript\n1 / 98 * 98 // = 0.9999999999999999\n```\n\nIf you need more precision or just want a fraction as a result, have a look at *Fraction.js*:\n\n```javascript\nvar Fraction = require('fraction.js');\n\nFraction(1).div(98).mul(98) // = 1\n```\n\nInternally, numbers are represented as *numerator / denominator*, which adds just a little overhead. However, the library is written with performance in mind and outperforms any other implementation, as you can see [here](http://jsperf.com/convert-a-rational-number-to-a-babylonian-fractions/28). This basic data-type makes it the perfect basis for [Polynomial.js](https://github.com/infusion/Polynomial.js) and [Math.js](https://github.com/josdejong/mathjs).\n\nConvert decimal to fraction\n===\nThe simplest job for fraction.js is to get a fraction out of a decimal:\n```javascript\nvar x = new Fraction(1.88);\nvar res = x.toFraction(true); // String \"1 22/25\"\n```\n\nExamples / Motivation\n===\nA simple example might be\n\n```javascript\nvar f = new Fraction(\"9.4'31'\"); // 9.4313131313131...\nf.mul([-4, 3]).mod(\"4.'8'\"); // 4.88888888888888...\n```\nThe result is\n\n```javascript\nconsole.log(f.toFraction()); // -4154 / 1485\n```\nYou could of course also access the sign (s), numerator (n) and denominator (d) on your own:\n```javascript\nf.s * f.n / f.d = -1 * 4154 / 1485 = -2.797306...\n```\n\nIf you would try to calculate it yourself, you would come up with something like:\n\n```javascript\n(9.4313131 * (-4 / 3)) % 4.888888 = -2.797308133...\n```\n\nQuite okay, but yea - not as accurate as it could be.\n\n\nLaplace Probability\n===\nSimple example. What's the probability of throwing a 3, and 1 or 4, and 2 or 4 or 6 with a fair dice?\n\nP({3}):\n```javascript\nvar p = new Fraction([3].length, 6).toString(); // 0.1(6)\n```\n\nP({1, 4}):\n```javascript\nvar p = new Fraction([1, 4].length, 6).toString(); // 0.(3)\n```\n\nP({2, 4, 6}):\n```javascript\nvar p = new Fraction([2, 4, 6].length, 6).toString(); // 0.5\n```\n\nConvert degrees/minutes/seconds to precise rational representation:\n===\n\n57+45/60+17/3600\n```javascript\nvar deg = 57; // 57°\nvar min = 45; // 45 Minutes\nvar sec = 17; // 17 Seconds\n\nnew Fraction(deg).add(min, 60).add(sec, 3600).toString() // -> 57.7547(2)\n```\n\nRounding a fraction to the closest tape measure value\n=== \n\nA tape measure is usually divided in parts of `1/16`. Rounding a given fraction to the closest value on a tape measure can be determined by\n\n```javascript\nfunction closestTapeMeasure(frac) {\n\n    /*\n    k/16 ≤ a/b < (k+1)/16\n    ⇔ k ≤ 16*a/b < (k+1)\n    ⇔ k = floor(16*a/b)\n    */\n    return new Fraction(Math.round(16 * Fraction(frac).valueOf()), 16);\n}\n// closestTapeMeasure(\"1/3\") // 5/16\n```\n\nRational approximation of irrational numbers\n===\n\nNow it's getting messy ;d To approximate a number like *sqrt(5) - 2* with a numerator and denominator, you can reformat the equation as follows: *pow(n / d + 2, 2) = 5*.\n\nThen the following algorithm will generate the rational number besides the binary representation.\n\n```javascript\nvar x = \"/\", s = \"\";\n\nvar a = new Fraction(0),\n    b = new Fraction(1);\nfor (var n = 0; n <= 10; n++) {\n\n  var c = a.add(b).div(2);\n\n  console.log(n + \"\\t\" + a + \"\\t\" + b + \"\\t\" + c + \"\\t\" + x);\n\n  if (c.add(2).pow(2) < 5) {\n    a = c;\n    x = \"1\";\n  } else {\n    b = c;\n    x = \"0\";\n  }\n  s+= x;\n}\nconsole.log(s)\n```\n\nThe result is\n\n```\nn   a[n]        b[n]        c[n]            x[n]\n0   0/1         1/1         1/2             /\n1   0/1         1/2         1/4             0\n2   0/1         1/4         1/8             0\n3   1/8         1/4         3/16            1\n4   3/16        1/4         7/32            1\n5   7/32        1/4         15/64           1\n6   15/64       1/4         31/128          1\n7   15/64       31/128      61/256          0\n8   15/64       61/256      121/512         0\n9   15/64       121/512     241/1024        0\n10  241/1024    121/512     483/2048        1\n```\nThus the approximation after 11 iterations of the bisection method is *483 / 2048* and the binary representation is 0.00111100011 (see [WolframAlpha](http://www.wolframalpha.com/input/?i=sqrt%285%29-2+binary))\n\n\nI published another example on how to approximate PI with fraction.js on my [blog](http://www.xarg.org/2014/03/precise-calculations-in-javascript/) (Still not the best idea to approximate irrational numbers, but it illustrates the capabilities of Fraction.js perfectly).\n\n\nGet the exact fractional part of a number\n---\n```javascript\nvar f = new Fraction(\"-6.(3416)\");\nconsole.log(\"\" + f.mod(1).abs()); // Will print 0.(3416)\n```\n\nMathematical correct modulo\n---\nThe behaviour on negative congruences is different to most modulo implementations in computer science. Even the *mod()* function of Fraction.js behaves in the typical way. To solve the problem of having the mathematical correct modulo with Fraction.js you could come up with this:\n\n```javascript\nvar a = -1;\nvar b = 10.99;\n\nconsole.log(new Fraction(a)\n  .mod(b)); // Not correct, usual Modulo\n\nconsole.log(new Fraction(a)\n  .mod(b).add(b).mod(b)); // Correct! Mathematical Modulo\n```\n\nfmod() impreciseness circumvented\n---\nIt turns out that Fraction.js outperforms almost any fmod() implementation, including JavaScript itself, [php.js](http://phpjs.org/functions/fmod/), C++, Python, Java and even Wolframalpha due to the fact that numbers like 0.05, 0.1, ... are infinite decimal in base 2.\n\nThe equation *fmod(4.55, 0.05)* gives *0.04999999999999957*, wolframalpha says *1/20*. The correct answer should be **zero**, as 0.05 divides 4.55 without any remainder.\n\n\nParser\n===\n\nAny function (see below) as well as the constructor of the *Fraction* class parses its input and reduce it to the smallest term.\n\nYou can pass either Arrays, Objects, Integers, Doubles or Strings.\n\nArrays / Objects\n---\n```javascript\nnew Fraction(numerator, denominator);\nnew Fraction([numerator, denominator]);\nnew Fraction({n: numerator, d: denominator});\n```\n\nIntegers\n---\n```javascript\nnew Fraction(123);\n```\n\nDoubles\n---\n```javascript\nnew Fraction(55.4);\n```\n\n**Note:** If you pass a double as it is, Fraction.js will perform a number analysis based on Farey Sequences. If you concern performance, cache Fraction.js objects and pass arrays/objects.\n\nThe method is really precise, but too large exact numbers, like 1234567.9991829 will result in a wrong approximation. If you want to keep the number as it is, convert it to a string, as the string parser will not perform any further observations. If you have problems with the approximation, in the file `examples/approx.js` is a different approximation algorithm, which might work better in some more specific use-cases.\n\n\nStrings\n---\n```javascript\nnew Fraction(\"123.45\");\nnew Fraction(\"123/45\"); // A rational number represented as two decimals, separated by a slash\nnew Fraction(\"123:45\"); // A rational number represented as two decimals, separated by a colon\nnew Fraction(\"4 123/45\"); // A rational number represented as a whole number and a fraction\nnew Fraction(\"123.'456'\"); // Note the quotes, see below!\nnew Fraction(\"123.(456)\"); // Note the brackets, see below!\nnew Fraction(\"123.45'6'\"); // Note the quotes, see below!\nnew Fraction(\"123.45(6)\"); // Note the brackets, see below!\n```\n\nTwo arguments\n---\n```javascript\nnew Fraction(3, 2); // 3/2 = 1.5\n```\n\nRepeating decimal places\n---\n*Fraction.js* can easily handle repeating decimal places. For example *1/3* is *0.3333...*. There is only one repeating digit. As you can see in the examples above, you can pass a number like *1/3* as \"0.'3'\" or \"0.(3)\", which are synonym. There are no tests to parse something like 0.166666666 to 1/6! If you really want to handle this number, wrap around brackets on your own with the function below for example: 0.1(66666666)\n\nAssume you want to divide 123.32 / 33.6(567). [WolframAlpha](http://www.wolframalpha.com/input/?i=123.32+%2F+%2812453%2F370%29) states that you'll get a period of 1776 digits. *Fraction.js* comes to the same result. Give it a try:\n\n```javascript\nvar f = new Fraction(\"123.32\");\nconsole.log(\"Bam: \" + f.div(\"33.6(567)\"));\n```\n\nTo automatically make a number like \"0.123123123\" to something more Fraction.js friendly like \"0.(123)\", I hacked this little brute force algorithm in a 10 minutes. Improvements are welcome...\n\n```javascript\nfunction formatDecimal(str) {\n\n  var comma, pre, offset, pad, times, repeat;\n\n  if (-1 === (comma = str.indexOf(\".\")))\n    return str;\n\n  pre = str.substr(0, comma + 1);\n  str = str.substr(comma + 1);\n\n  for (var i = 0; i < str.length; i++) {\n\n    offset = str.substr(0, i);\n\n    for (var j = 0; j < 5; j++) {\n\n      pad = str.substr(i, j + 1);\n\n      times = Math.ceil((str.length - offset.length) / pad.length);\n\n      repeat = new Array(times + 1).join(pad); // Silly String.repeat hack\n\n      if (0 === (offset + repeat).indexOf(str)) {\n        return pre + offset + \"(\" + pad + \")\";\n      }\n    }\n  }\n  return null;\n}\n\nvar f, x = formatDecimal(\"13.0123123123\"); // = 13.0(123)\nif (x !== null) {\n  f = new Fraction(x);\n}\n```\n\nAttributes\n===\n\nThe Fraction object allows direct access to the numerator, denominator and sign attributes. It is ensured that only the sign-attribute holds sign information so that a sign comparison is only necessary against this attribute.\n\n```javascript\nvar f = new Fraction('-1/2');\nconsole.log(f.n); // Numerator: 1\nconsole.log(f.d); // Denominator: 2\nconsole.log(f.s); // Sign: -1\n```\n\n\nFunctions\n===\n\nFraction abs()\n---\nReturns the actual number without any sign information\n\nFraction neg()\n---\nReturns the actual number with flipped sign in order to get the additive inverse\n\nFraction add(n)\n---\nReturns the sum of the actual number and the parameter n\n\nFraction sub(n)\n---\nReturns the difference of the actual number and the parameter n\n\nFraction mul(n)\n---\nReturns the product of the actual number and the parameter n\n\nFraction div(n)\n---\nReturns the quotient of the actual number and the parameter n\n\nFraction pow(exp)\n---\nReturns the power of the actual number, raised to an possible rational exponent. If the result becomes non-rational the function returns `null`.\n\nFraction mod(n)\n---\nReturns the modulus (rest of the division) of the actual object and n (this % n). It's a much more precise [fmod()](#fmod-impreciseness-circumvented) if you will. Please note that *mod()* is just like the modulo operator of most programming languages. If you want a mathematical correct modulo, see [here](#mathematical-correct-modulo).\n\nFraction mod()\n---\nReturns the modulus (rest of the division) of the actual object (numerator mod denominator)\n\nFraction gcd(n)\n---\nReturns the fractional greatest common divisor\n\nFraction lcm(n)\n---\nReturns the fractional least common multiple\n\nFraction ceil([places=0-16])\n---\nReturns the ceiling of a rational number with Math.ceil\n\nFraction floor([places=0-16])\n---\nReturns the floor of a rational number with Math.floor\n\nFraction round([places=0-16])\n---\nReturns the rational number rounded with Math.round\n\nFraction inverse()\n---\nReturns the multiplicative inverse of the actual number (n / d becomes d / n) in order to get the reciprocal\n\nFraction simplify([eps=0.001])\n---\nSimplifies the rational number under a certain error threshold. Ex. `0.333` will be `1/3` with `eps=0.001`\n\nboolean equals(n)\n---\nCheck if two numbers are equal\n\nint compare(n)\n---\nCompare two numbers.\n```\nresult < 0: n is greater than actual number\nresult > 0: n is smaller than actual number\nresult = 0: n is equal to the actual number\n```\n\nboolean divisible(n)\n---\nCheck if two numbers are divisible (n divides this)\n\ndouble valueOf()\n---\nReturns a decimal representation of the fraction\n\nString toString([decimalPlaces=15])\n---\nGenerates an exact string representation of the actual object. For repeated decimal places all digits are collected within brackets, like `1/3 = \"0.(3)\"`. For all other numbers, up to `decimalPlaces` significant digits are collected - which includes trailing zeros if the number is getting truncated. However, `1/2 = \"0.5\"` without trailing zeros of course.\n\n**Note:** As `valueOf()` and `toString()` are provided, `toString()` is only called implicitly in a real string context. Using the plus-operator like `\"123\" + new Fraction` will call valueOf(), because JavaScript tries to combine two primitives first and concatenates them later, as string will be the more dominant type. `alert(new Fraction)` or `String(new Fraction)` on the other hand will do what you expect. If you really want to have control, you should call `toString()` or `valueOf()` explicitly!\n\nString toLatex(excludeWhole=false)\n---\nGenerates an exact LaTeX representation of the actual object. You can see a [live demo](http://www.xarg.org/2014/03/precise-calculations-in-javascript/) on my blog.\n\nThe optional boolean parameter indicates if you want to exclude the whole part. \"1 1/3\" instead of \"4/3\"\n\nString toFraction(excludeWhole=false)\n---\nGets a string representation of the fraction\n\nThe optional boolean parameter indicates if you want to exclude the whole part. \"1 1/3\" instead of \"4/3\"\n\nArray toContinued()\n---\nGets an array of the fraction represented as a continued fraction. The first element always contains the whole part.\n\n```javascript\nvar f = new Fraction('88/33');\nvar c = f.toContinued(); // [2, 1, 2]\n```\n\nFraction clone()\n---\nCreates a copy of the actual Fraction object\n\n\nExceptions\n===\nIf a really hard error occurs (parsing error, division by zero), *fraction.js* throws exceptions! Please make sure you handle them correctly.\n\n\n\nInstallation\n===\nInstalling fraction.js is as easy as cloning this repo or use one of the following commands:\n\n```\nbower install fraction.js\n```\nor\n\n```\nnpm install fraction.js\n```\n\nUsing Fraction.js with the browser\n===\n```html\n<script src=\"fraction.js\"></script>\n<script>\n    console.log(Fraction(\"123/456\"));\n</script>\n```\n\nUsing Fraction.js with require.js\n===\n```html\n<script src=\"require.js\"></script>\n<script>\nrequirejs(['fraction.js'],\nfunction(Fraction) {\n    console.log(Fraction(\"123/456\"));\n});\n</script>\n```\n\nUsing Fraction.js with TypeScript\n===\n```js\nimport Fraction from \"fraction.js\";\nconsole.log(Fraction(\"123/456\"));\n```\n\nCoding Style\n===\nAs every library I publish, fraction.js is also built to be as small as possible after compressing it with Google Closure Compiler in advanced mode. Thus the coding style orientates a little on maxing-out the compression rate. Please make sure you keep this style if you plan to extend the library.\n\n\nPrecision\n===\nFraction.js tries to circumvent floating point errors, by having an internal representation of numerator and denominator. As it relies on JavaScript, there is also a limit. The biggest number representable is `Number.MAX_SAFE_INTEGER / 1` and the smallest is `-1 / Number.MAX_SAFE_INTEGER`, with `Number.MAX_SAFE_INTEGER=9007199254740991`. If this is not enough, there is `bigfraction.js` shipped experimentally, which relies on `BigInt` and should become the new Fraction.js eventually. \n\nTesting\n===\nIf you plan to enhance the library, make sure you add test cases and all the previous tests are passing. You can test the library with\n\n```\nnpm test\n```\n\n\nCopyright and licensing\n===\nCopyright (c) 2014-2019, [Robert Eisele](https://www.xarg.org/)\nDual licensed under the MIT or GPL Version 2 licenses.\n/LICENSE\u0004.MIT License\n\nCopyright (c) 2017 Robert Eisele\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n/package.json\u0004,{\n    \"name\": \"fraction.js\",\n    \"title\": \"fraction.js\",\n    \"version\": \"4.2.0\",\n    \"homepage\": \"https://www.xarg.org/2014/03/rational-numbers-in-javascript/\",\n    \"bugs\": \"https://github.com/infusion/Fraction.js/issues\",\n    \"description\": \"A rational number library\",\n    \"keywords\": [\n        \"math\",\n        \"fraction\",\n        \"rational\",\n        \"rationals\",\n        \"number\",\n        \"parser\",\n        \"rational numbers\"\n    ],\n    \"author\": \"Robert Eisele <robert@xarg.org> (http://www.xarg.org/)\",\n    \"main\": \"fraction\",\n    \"types\": \"./fraction.d.ts\",\n    \"private\": false,\n    \"readmeFilename\": \"README.md\",\n    \"directories\": {\n        \"example\": \"examples\"\n    },\n    \"license\": \"MIT\",\n    \"repository\": {\n        \"type\": \"git\",\n        \"url\": \"git://github.com/infusion/Fraction.js.git\"\n    },\n    \"funding\": {\n        \"type\": \"patreon\",\n        \"url\": \"https://www.patreon.com/infusion\"\n    },\n    \"engines\": {\n        \"node\": \"*\"\n    },\n    \"scripts\": {\n        \"test\": \"mocha tests/*.js\"\n    },\n    \"devDependencies\": {\n        \"mocha\": \"*\"\n    }\n}\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/ZnJlc2hAMC41LjI=",
    "content": "/package.json\u0005M{\n  \"name\": \"fresh\",\n  \"description\": \"HTTP response freshness testing\",\n  \"version\": \"0.5.2\",\n  \"author\": \"TJ Holowaychuk <tj@vision-media.ca> (http://tjholowaychuk.com)\",\n  \"contributors\": [\n    \"Douglas Christopher Wilson <doug@somethingdoug.com>\",\n    \"Jonathan Ong <me@jongleberry.com> (http://jongleberry.com)\"\n  ],\n  \"license\": \"MIT\",\n  \"keywords\": [\n    \"fresh\",\n    \"http\",\n    \"conditional\",\n    \"cache\"\n  ],\n  \"repository\": \"jshttp/fresh\",\n  \"devDependencies\": {\n    \"beautify-benchmark\": \"0.2.4\",\n    \"benchmark\": \"2.1.4\",\n    \"eslint\": \"3.19.0\",\n    \"eslint-config-standard\": \"10.2.1\",\n    \"eslint-plugin-import\": \"2.7.0\",\n    \"eslint-plugin-markdown\": \"1.0.0-beta.6\",\n    \"eslint-plugin-node\": \"5.1.1\",\n    \"eslint-plugin-promise\": \"3.5.0\",\n    \"eslint-plugin-standard\": \"3.0.1\",\n    \"istanbul\": \"0.4.5\",\n    \"mocha\": \"1.21.5\"\n  },\n  \"files\": [\n    \"HISTORY.md\",\n    \"LICENSE\",\n    \"index.js\"\n  ],\n  \"engines\": {\n    \"node\": \">= 0.6\"\n  },\n  \"scripts\": {\n    \"bench\": \"node benchmark/index.js\",\n    \"lint\": \"eslint --plugin markdown --ext js,md .\",\n    \"test\": \"mocha --reporter spec --bail --check-leaks test/\",\n    \"test-cov\": \"istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/\",\n    \"test-travis\": \"istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/\"\n  }\n}\n/README.md\r.# fresh\n\n[![NPM Version][npm-image]][npm-url]\n[![NPM Downloads][downloads-image]][downloads-url]\n[![Node.js Version][node-version-image]][node-version-url]\n[![Build Status][travis-image]][travis-url]\n[![Test Coverage][coveralls-image]][coveralls-url]\n\nHTTP response freshness testing\n\n## Installation\n\nThis is a [Node.js](https://nodejs.org/en/) module available through the\n[npm registry](https://www.npmjs.com/). Installation is done using the\n[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally):\n\n```\n$ npm install fresh\n```\n\n## API\n\n<!-- eslint-disable no-unused-vars -->\n\n```js\nvar fresh = require('fresh')\n```\n\n### fresh(reqHeaders, resHeaders)\n\nCheck freshness of the response using request and response headers.\n\nWhen the response is still \"fresh\" in the client's cache `true` is\nreturned, otherwise `false` is returned to indicate that the client\ncache is now stale and the full response should be sent.\n\nWhen a client sends the `Cache-Control: no-cache` request header to\nindicate an end-to-end reload request, this module will return `false`\nto make handling these requests transparent.\n\n## Known Issues\n\nThis module is designed to only follow the HTTP specifications, not\nto work-around all kinda of client bugs (especially since this module\ntypically does not recieve enough information to understand what the\nclient actually is).\n\nThere is a known issue that in certain versions of Safari, Safari\nwill incorrectly make a request that allows this module to validate\nfreshness of the resource even when Safari does not have a\nrepresentation of the resource in the cache. The module\n[jumanji](https://www.npmjs.com/package/jumanji) can be used in\nan Express application to work-around this issue and also provides\nlinks to further reading on this Safari bug.\n\n## Example\n\n### API usage\n\n<!-- eslint-disable no-redeclare, no-undef -->\n\n```js\nvar reqHeaders = { 'if-none-match': '\"foo\"' }\nvar resHeaders = { 'etag': '\"bar\"' }\nfresh(reqHeaders, resHeaders)\n// => false\n\nvar reqHeaders = { 'if-none-match': '\"foo\"' }\nvar resHeaders = { 'etag': '\"foo\"' }\nfresh(reqHeaders, resHeaders)\n// => true\n```\n\n### Using with Node.js http server\n\n```js\nvar fresh = require('fresh')\nvar http = require('http')\n\nvar server = http.createServer(function (req, res) {\n  // perform server logic\n  // ... including adding ETag / Last-Modified response headers\n\n  if (isFresh(req, res)) {\n    // client has a fresh copy of resource\n    res.statusCode = 304\n    res.end()\n    return\n  }\n\n  // send the resource\n  res.statusCode = 200\n  res.end('hello, world!')\n})\n\nfunction isFresh (req, res) {\n  return fresh(req.headers, {\n    'etag': res.getHeader('ETag'),\n    'last-modified': res.getHeader('Last-Modified')\n  })\n}\n\nserver.listen(3000)\n```\n\n## License\n\n[MIT](LICENSE)\n\n[npm-image]: https://img.shields.io/npm/v/fresh.svg\n[npm-url]: https://npmjs.org/package/fresh\n[node-version-image]: https://img.shields.io/node/v/fresh.svg\n[node-version-url]: https://nodejs.org/en/\n[travis-image]: https://img.shields.io/travis/jshttp/fresh/master.svg\n[travis-url]: https://travis-ci.org/jshttp/fresh\n[coveralls-image]: https://img.shields.io/coveralls/jshttp/fresh/master.svg\n[coveralls-url]: https://coveralls.io/r/jshttp/fresh?branch=master\n[downloads-image]: https://img.shields.io/npm/dm/fresh.svg\n[downloads-url]: https://npmjs.org/package/fresh\n/index.js\n/*!\n * fresh\n * Copyright(c) 2012 TJ Holowaychuk\n * Copyright(c) 2016-2017 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * RegExp to check for no-cache token in Cache-Control.\n * @private\n */\n\nvar CACHE_CONTROL_NO_CACHE_REGEXP = /(?:^|,)\\s*?no-cache\\s*?(?:,|$)/\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = fresh\n\n/**\n * Check freshness of the response using request and response headers.\n *\n * @param {Object} reqHeaders\n * @param {Object} resHeaders\n * @return {Boolean}\n * @public\n */\n\nfunction fresh (reqHeaders, resHeaders) {\n  // fields\n  var modifiedSince = reqHeaders['if-modified-since']\n  var noneMatch = reqHeaders['if-none-match']\n\n  // unconditional request\n  if (!modifiedSince && !noneMatch) {\n    return false\n  }\n\n  // Always return stale when Cache-Control: no-cache\n  // to support end-to-end reload requests\n  // https://tools.ietf.org/html/rfc2616#section-14.9.4\n  var cacheControl = reqHeaders['cache-control']\n  if (cacheControl && CACHE_CONTROL_NO_CACHE_REGEXP.test(cacheControl)) {\n    return false\n  }\n\n  // if-none-match\n  if (noneMatch && noneMatch !== '*') {\n    var etag = resHeaders['etag']\n\n    if (!etag) {\n      return false\n    }\n\n    var etagStale = true\n    var matches = parseTokenList(noneMatch)\n    for (var i = 0; i < matches.length; i++) {\n      var match = matches[i]\n      if (match === etag || match === 'W/' + etag || 'W/' + match === etag) {\n        etagStale = false\n        break\n      }\n    }\n\n    if (etagStale) {\n      return false\n    }\n  }\n\n  // if-modified-since\n  if (modifiedSince) {\n    var lastModified = resHeaders['last-modified']\n    var modifiedStale = !lastModified || !(parseHttpDate(lastModified) <= parseHttpDate(modifiedSince))\n\n    if (modifiedStale) {\n      return false\n    }\n  }\n\n  return true\n}\n\n/**\n * Parse an HTTP Date into a number.\n *\n * @param {string} date\n * @private\n */\n\nfunction parseHttpDate (date) {\n  var timestamp = date && Date.parse(date)\n\n  // istanbul ignore next: guard against date.js Date.parse patching\n  return typeof timestamp === 'number'\n    ? timestamp\n    : NaN\n}\n\n/**\n * Parse a HTTP token list.\n *\n * @param {string} str\n * @private\n */\n\nfunction parseTokenList (str) {\n  var end = 0\n  var list = []\n  var start = 0\n\n  // gather tokens\n  for (var i = 0, len = str.length; i < len; i++) {\n    switch (str.charCodeAt(i)) {\n      case 0x20: /*   */\n        if (start === end) {\n          start = end = i + 1\n        }\n        break\n      case 0x2c: /* , */\n        list.push(str.substring(start, end))\n        start = end = i + 1\n        break\n      default:\n        end = i + 1\n        break\n    }\n  }\n\n  // final token\n  list.push(str.substring(start, end))\n\n  return list\n}\n/LICENSE\u0004(The MIT License)\n\nCopyright (c) 2012 TJ Holowaychuk <tj@vision-media.ca>\nCopyright (c) 2016-2017 Douglas Christopher Wilson <doug@somethingdoug.com>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n/HISTORY.md\u00050.5.2 / 2017-09-13\n==================\n\n  * Fix regression matching multiple ETags in `If-None-Match`\n  * perf: improve `If-None-Match` token parsing\n\n0.5.1 / 2017-09-11\n==================\n\n  * Fix handling of modified headers with invalid dates\n  * perf: improve ETag match loop\n\n0.5.0 / 2017-02-21\n==================\n\n  * Fix incorrect result when `If-None-Match` has both `*` and ETags\n  * Fix weak `ETag` matching to match spec\n  * perf: delay reading header values until needed\n  * perf: skip checking modified time if ETag check failed\n  * perf: skip parsing `If-None-Match` when no `ETag` header\n  * perf: use `Date.parse` instead of `new Date`\n\n0.4.0 / 2017-02-05\n==================\n\n  * Fix false detection of `no-cache` request directive\n  * perf: enable strict mode\n  * perf: hoist regular expressions\n  * perf: remove duplicate conditional\n  * perf: remove unnecessary boolean coercions\n\n0.3.0 / 2015-05-12\n==================\n\n  * Add weak `ETag` matching support\n\n0.2.4 / 2014-09-07\n==================\n\n  * Support Node.js 0.6\n\n0.2.3 / 2014-09-07\n==================\n\n  * Move repository to jshttp\n\n0.2.2 / 2014-02-19\n==================\n\n  * Revert \"Fix for blank page on Safari reload\"\n\n0.2.1 / 2014-01-29\n==================\n\n  * Fix for blank page on Safari reload\n\n0.2.0 / 2013-08-11\n==================\n\n  * Return stale for `Cache-Control: no-cache`\n\n0.1.0 / 2012-06-15\n==================\n\n  * Add `If-None-Match: *` support\n\n0.0.1 / 2012-06-10\n==================\n\n  * Initial release\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/ZnMucmVhbHBhdGhAMS4wLjA=",
    "content": "/package.json\u0002A{\n  \"name\": \"fs.realpath\",\n  \"version\": \"1.0.0\",\n  \"description\": \"Use node's fs.realpath, but fall back to the JS implementation if the native one fails\",\n  \"main\": \"index.js\",\n  \"dependencies\": {},\n  \"devDependencies\": {},\n  \"scripts\": {\n    \"test\": \"tap test/*.js --cov\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/isaacs/fs.realpath.git\"\n  },\n  \"keywords\": [\n    \"realpath\",\n    \"fs\",\n    \"polyfill\"\n  ],\n  \"author\": \"Isaac Z. Schlueter <i@izs.me> (http://blog.izs.me/)\",\n  \"license\": \"ISC\",\n  \"files\": [\n    \"old.js\",\n    \"index.js\"\n  ]\n}\n/LICENSE\bMThe ISC License\n\nCopyright (c) Isaac Z. Schlueter and Contributors\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted, provided that the above\ncopyright notice and this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\nWITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\nANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\nACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR\nIN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n\n----\n\nThis library bundles a version of the `fs.realpath` and `fs.realpathSync`\nmethods from Node.js v0.10 under the terms of the Node.js MIT license.\n\nNode's license follows, also included at the header of `old.js` which contains\nthe licensed code:\n\n  Copyright Joyent, Inc. and other Node contributors.\n\n  Permission is hereby granted, free of charge, to any person obtaining a\n  copy of this software and associated documentation files (the \"Software\"),\n  to deal in the Software without restriction, including without limitation\n  the rights to use, copy, modify, merge, publish, distribute, sublicense,\n  and/or sell copies of the Software, and to permit persons to whom the\n  Software is furnished to do so, subject to the following conditions:\n\n  The above copyright notice and this permission notice shall be included in\n  all copies or substantial portions of the Software.\n\n  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n  DEALINGS IN THE SOFTWARE.\n/README.md\u0003q# fs.realpath\n\nA backwards-compatible fs.realpath for Node v6 and above\n\nIn Node v6, the JavaScript implementation of fs.realpath was replaced\nwith a faster (but less resilient) native implementation.  That raises\nnew and platform-specific errors and cannot handle long or excessively\nsymlink-looping paths.\n\nThis module handles those cases by detecting the new errors and\nfalling back to the JavaScript implementation.  On versions of Node\nprior to v6, it has no effect.\n\n## USAGE\n\n```js\nvar rp = require('fs.realpath')\n\n// async version\nrp.realpath(someLongAndLoopingPath, function (er, real) {\n  // the ELOOP was handled, but it was a bit slower\n})\n\n// sync version\nvar real = rp.realpathSync(someLongAndLoopingPath)\n\n// monkeypatch at your own risk!\n// This replaces the fs.realpath/fs.realpathSync builtins\nrp.monkeypatch()\n\n// un-do the monkeypatching\nrp.unmonkeypatch()\n```\n/index.js\u0005\u001cmodule.exports = realpath\nrealpath.realpath = realpath\nrealpath.sync = realpathSync\nrealpath.realpathSync = realpathSync\nrealpath.monkeypatch = monkeypatch\nrealpath.unmonkeypatch = unmonkeypatch\n\nvar fs = require('fs')\nvar origRealpath = fs.realpath\nvar origRealpathSync = fs.realpathSync\n\nvar version = process.version\nvar ok = /^v[0-5]\\./.test(version)\nvar old = require('./old.js')\n\nfunction newError (er) {\n  return er && er.syscall === 'realpath' && (\n    er.code === 'ELOOP' ||\n    er.code === 'ENOMEM' ||\n    er.code === 'ENAMETOOLONG'\n  )\n}\n\nfunction realpath (p, cache, cb) {\n  if (ok) {\n    return origRealpath(p, cache, cb)\n  }\n\n  if (typeof cache === 'function') {\n    cb = cache\n    cache = null\n  }\n  origRealpath(p, cache, function (er, result) {\n    if (newError(er)) {\n      old.realpath(p, cache, cb)\n    } else {\n      cb(er, result)\n    }\n  })\n}\n\nfunction realpathSync (p, cache) {\n  if (ok) {\n    return origRealpathSync(p, cache)\n  }\n\n  try {\n    return origRealpathSync(p, cache)\n  } catch (er) {\n    if (newError(er)) {\n      return old.realpathSync(p, cache)\n    } else {\n      throw er\n    }\n  }\n}\n\nfunction monkeypatch () {\n  fs.realpath = realpath\n  fs.realpathSync = realpathSync\n}\n\nfunction unmonkeypatch () {\n  fs.realpath = origRealpath\n  fs.realpathSync = origRealpathSync\n}\n/old.js!^// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar pathModule = require('path');\nvar isWindows = process.platform === 'win32';\nvar fs = require('fs');\n\n// JavaScript implementation of realpath, ported from node pre-v6\n\nvar DEBUG = process.env.NODE_DEBUG && /fs/.test(process.env.NODE_DEBUG);\n\nfunction rethrow() {\n  // Only enable in debug mode. A backtrace uses ~1000 bytes of heap space and\n  // is fairly slow to generate.\n  var callback;\n  if (DEBUG) {\n    var backtrace = new Error;\n    callback = debugCallback;\n  } else\n    callback = missingCallback;\n\n  return callback;\n\n  function debugCallback(err) {\n    if (err) {\n      backtrace.message = err.message;\n      err = backtrace;\n      missingCallback(err);\n    }\n  }\n\n  function missingCallback(err) {\n    if (err) {\n      if (process.throwDeprecation)\n        throw err;  // Forgot a callback but don't know where? Use NODE_DEBUG=fs\n      else if (!process.noDeprecation) {\n        var msg = 'fs: missing callback ' + (err.stack || err.message);\n        if (process.traceDeprecation)\n          console.trace(msg);\n        else\n          console.error(msg);\n      }\n    }\n  }\n}\n\nfunction maybeCallback(cb) {\n  return typeof cb === 'function' ? cb : rethrow();\n}\n\nvar normalize = pathModule.normalize;\n\n// Regexp that finds the next partion of a (partial) path\n// result is [base_with_slash, base], e.g. ['somedir/', 'somedir']\nif (isWindows) {\n  var nextPartRe = /(.*?)(?:[\\/\\\\]+|$)/g;\n} else {\n  var nextPartRe = /(.*?)(?:[\\/]+|$)/g;\n}\n\n// Regex to find the device root, including trailing slash. E.g. 'c:\\\\'.\nif (isWindows) {\n  var splitRootRe = /^(?:[a-zA-Z]:|[\\\\\\/]{2}[^\\\\\\/]+[\\\\\\/][^\\\\\\/]+)?[\\\\\\/]*/;\n} else {\n  var splitRootRe = /^[\\/]*/;\n}\n\nexports.realpathSync = function realpathSync(p, cache) {\n  // make p is absolute\n  p = pathModule.resolve(p);\n\n  if (cache && Object.prototype.hasOwnProperty.call(cache, p)) {\n    return cache[p];\n  }\n\n  var original = p,\n      seenLinks = {},\n      knownHard = {};\n\n  // current character position in p\n  var pos;\n  // the partial path so far, including a trailing slash if any\n  var current;\n  // the partial path without a trailing slash (except when pointing at a root)\n  var base;\n  // the partial path scanned in the previous round, with slash\n  var previous;\n\n  start();\n\n  function start() {\n    // Skip over roots\n    var m = splitRootRe.exec(p);\n    pos = m[0].length;\n    current = m[0];\n    base = m[0];\n    previous = '';\n\n    // On windows, check that the root exists. On unix there is no need.\n    if (isWindows && !knownHard[base]) {\n      fs.lstatSync(base);\n      knownHard[base] = true;\n    }\n  }\n\n  // walk down the path, swapping out linked pathparts for their real\n  // values\n  // NB: p.length changes.\n  while (pos < p.length) {\n    // find the next part\n    nextPartRe.lastIndex = pos;\n    var result = nextPartRe.exec(p);\n    previous = current;\n    current += result[0];\n    base = previous + result[1];\n    pos = nextPartRe.lastIndex;\n\n    // continue if not a symlink\n    if (knownHard[base] || (cache && cache[base] === base)) {\n      continue;\n    }\n\n    var resolvedLink;\n    if (cache && Object.prototype.hasOwnProperty.call(cache, base)) {\n      // some known symbolic link.  no need to stat again.\n      resolvedLink = cache[base];\n    } else {\n      var stat = fs.lstatSync(base);\n      if (!stat.isSymbolicLink()) {\n        knownHard[base] = true;\n        if (cache) cache[base] = base;\n        continue;\n      }\n\n      // read the link if it wasn't read before\n      // dev/ino always return 0 on windows, so skip the check.\n      var linkTarget = null;\n      if (!isWindows) {\n        var id = stat.dev.toString(32) + ':' + stat.ino.toString(32);\n        if (seenLinks.hasOwnProperty(id)) {\n          linkTarget = seenLinks[id];\n        }\n      }\n      if (linkTarget === null) {\n        fs.statSync(base);\n        linkTarget = fs.readlinkSync(base);\n      }\n      resolvedLink = pathModule.resolve(previous, linkTarget);\n      // track this, if given a cache.\n      if (cache) cache[base] = resolvedLink;\n      if (!isWindows) seenLinks[id] = linkTarget;\n    }\n\n    // resolve the link, then start over\n    p = pathModule.resolve(resolvedLink, p.slice(pos));\n    start();\n  }\n\n  if (cache) cache[original] = p;\n\n  return p;\n};\n\n\nexports.realpath = function realpath(p, cache, cb) {\n  if (typeof cb !== 'function') {\n    cb = maybeCallback(cache);\n    cache = null;\n  }\n\n  // make p is absolute\n  p = pathModule.resolve(p);\n\n  if (cache && Object.prototype.hasOwnProperty.call(cache, p)) {\n    return process.nextTick(cb.bind(null, null, cache[p]));\n  }\n\n  var original = p,\n      seenLinks = {},\n      knownHard = {};\n\n  // current character position in p\n  var pos;\n  // the partial path so far, including a trailing slash if any\n  var current;\n  // the partial path without a trailing slash (except when pointing at a root)\n  var base;\n  // the partial path scanned in the previous round, with slash\n  var previous;\n\n  start();\n\n  function start() {\n    // Skip over roots\n    var m = splitRootRe.exec(p);\n    pos = m[0].length;\n    current = m[0];\n    base = m[0];\n    previous = '';\n\n    // On windows, check that the root exists. On unix there is no need.\n    if (isWindows && !knownHard[base]) {\n      fs.lstat(base, function(err) {\n        if (err) return cb(err);\n        knownHard[base] = true;\n        LOOP();\n      });\n    } else {\n      process.nextTick(LOOP);\n    }\n  }\n\n  // walk down the path, swapping out linked pathparts for their real\n  // values\n  function LOOP() {\n    // stop if scanned past end of path\n    if (pos >= p.length) {\n      if (cache) cache[original] = p;\n      return cb(null, p);\n    }\n\n    // find the next part\n    nextPartRe.lastIndex = pos;\n    var result = nextPartRe.exec(p);\n    previous = current;\n    current += result[0];\n    base = previous + result[1];\n    pos = nextPartRe.lastIndex;\n\n    // continue if not a symlink\n    if (knownHard[base] || (cache && cache[base] === base)) {\n      return process.nextTick(LOOP);\n    }\n\n    if (cache && Object.prototype.hasOwnProperty.call(cache, base)) {\n      // known symbolic link.  no need to stat again.\n      return gotResolvedLink(cache[base]);\n    }\n\n    return fs.lstat(base, gotStat);\n  }\n\n  function gotStat(err, stat) {\n    if (err) return cb(err);\n\n    // if not a symlink, skip to the next path part\n    if (!stat.isSymbolicLink()) {\n      knownHard[base] = true;\n      if (cache) cache[base] = base;\n      return process.nextTick(LOOP);\n    }\n\n    // stat & read the link if not read before\n    // call gotTarget as soon as the link target is known\n    // dev/ino always return 0 on windows, so skip the check.\n    if (!isWindows) {\n      var id = stat.dev.toString(32) + ':' + stat.ino.toString(32);\n      if (seenLinks.hasOwnProperty(id)) {\n        return gotTarget(null, seenLinks[id], base);\n      }\n    }\n    fs.stat(base, function(err) {\n      if (err) return cb(err);\n\n      fs.readlink(base, function(err, target) {\n        if (!isWindows) seenLinks[id] = target;\n        gotTarget(err, target);\n      });\n    });\n  }\n\n  function gotTarget(err, target, base) {\n    if (err) return cb(err);\n\n    var resolvedLink = pathModule.resolve(previous, target);\n    if (cache) cache[base] = resolvedLink;\n    gotResolvedLink(resolvedLink);\n  }\n\n  function gotResolvedLink(resolvedLink) {\n    // resolve the link, then start over\n    p = pathModule.resolve(resolvedLink, p.slice(pos));\n    start();\n  }\n};\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/ZnVuY3Rpb24tYmluZEAxLjEuMQ==",
    "content": "/.npmignore# gitignore\n.DS_Store\n.monitor\n.*.swp\n.nodemonignore\nreleases\n*.log\n*.err\nfleet.json\npublic/browserify\nbin/*.json\n.bin\nbuild\ncompile\n.lock-wscript\ncoverage\nnode_modules\n\n# Only apps should have lockfiles\nnpm-shrinkwrap.json\npackage-lock.json\nyarn.lock\n/test/.eslintrcİ{\n\t\"rules\": {\n\t\t\"array-bracket-newline\": 0,\n\t\t\"array-element-newline\": 0,\n\t\t\"max-statements-per-line\": [2, { \"max\": 2 }],\n\t\t\"no-invalid-this\": 0,\n\t\t\"no-magic-numbers\": 0,\n\t}\n}\n/.editorconfig\u0001\u001eroot = true\n\n[*]\nindent_style = tab\nindent_size = 4\nend_of_line = lf\ncharset = utf-8\ntrim_trailing_whitespace = true\ninsert_final_newline = true\nmax_line_length = 120\n\n[CHANGELOG.md]\nindent_style = space\nindent_size = 2\n\n[*.json]\nmax_line_length = off\n\n[Makefile]\nmax_line_length = off\n/LICENSE\u0004\u001cCopyright (c) 2013 Raynos.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n\n/package.json\u0005{\n  \"name\": \"function-bind\",\n  \"version\": \"1.1.1\",\n  \"description\": \"Implementation of Function.prototype.bind\",\n  \"keywords\": [\n    \"function\",\n    \"bind\",\n    \"shim\",\n    \"es5\"\n  ],\n  \"author\": \"Raynos <raynos2@gmail.com>\",\n  \"repository\": \"git://github.com/Raynos/function-bind.git\",\n  \"main\": \"index\",\n  \"homepage\": \"https://github.com/Raynos/function-bind\",\n  \"contributors\": [\n    {\n      \"name\": \"Raynos\"\n    },\n    {\n      \"name\": \"Jordan Harband\",\n      \"url\": \"https://github.com/ljharb\"\n    }\n  ],\n  \"bugs\": {\n    \"url\": \"https://github.com/Raynos/function-bind/issues\",\n    \"email\": \"raynos2@gmail.com\"\n  },\n  \"dependencies\": {},\n  \"devDependencies\": {\n    \"@ljharb/eslint-config\": \"^12.2.1\",\n    \"covert\": \"^1.1.0\",\n    \"eslint\": \"^4.5.0\",\n    \"jscs\": \"^3.0.7\",\n    \"tape\": \"^4.8.0\"\n  },\n  \"license\": \"MIT\",\n  \"scripts\": {\n    \"pretest\": \"npm run lint\",\n    \"test\": \"npm run tests-only\",\n    \"posttest\": \"npm run coverage -- --quiet\",\n    \"tests-only\": \"node test\",\n    \"coverage\": \"covert test/*.js\",\n    \"lint\": \"npm run jscs && npm run eslint\",\n    \"jscs\": \"jscs *.js */*.js\",\n    \"eslint\": \"eslint *.js */*.js\"\n  },\n  \"testling\": {\n    \"files\": \"test/index.js\",\n    \"browsers\": [\n      \"ie/8..latest\",\n      \"firefox/16..latest\",\n      \"firefox/nightly\",\n      \"chrome/22..latest\",\n      \"chrome/canary\",\n      \"opera/12..latest\",\n      \"opera/next\",\n      \"safari/5.1..latest\",\n      \"ipad/6.0..latest\",\n      \"iphone/6.0..latest\",\n      \"android-browser/4.2..latest\"\n    ]\n  }\n}\n/.jscs.json\u0010,{\n\t\"es3\": true,\n\n\t\"additionalRules\": [],\n\n\t\"requireSemicolons\": true,\n\n\t\"disallowMultipleSpaces\": true,\n\n\t\"disallowIdentifierNames\": [],\n\n\t\"requireCurlyBraces\": {\n\t\t\"allExcept\": [],\n\t\t\"keywords\": [\"if\", \"else\", \"for\", \"while\", \"do\", \"try\", \"catch\"]\n\t},\n\n\t\"requireSpaceAfterKeywords\": [\"if\", \"else\", \"for\", \"while\", \"do\", \"switch\", \"return\", \"try\", \"catch\", \"function\"],\n\n\t\"disallowSpaceAfterKeywords\": [],\n\n\t\"disallowSpaceBeforeComma\": true,\n\t\"disallowSpaceAfterComma\": false,\n\t\"disallowSpaceBeforeSemicolon\": true,\n\n\t\"disallowNodeTypes\": [\n\t\t\"DebuggerStatement\",\n\t\t\"ForInStatement\",\n\t\t\"LabeledStatement\",\n\t\t\"SwitchCase\",\n\t\t\"SwitchStatement\",\n\t\t\"WithStatement\"\n\t],\n\n\t\"requireObjectKeysOnNewLine\": { \"allExcept\": [\"sameLine\"] },\n\n\t\"requireSpacesInAnonymousFunctionExpression\": { \"beforeOpeningRoundBrace\": true, \"beforeOpeningCurlyBrace\": true },\n\t\"requireSpacesInNamedFunctionExpression\": { \"beforeOpeningCurlyBrace\": true },\n\t\"disallowSpacesInNamedFunctionExpression\": { \"beforeOpeningRoundBrace\": true },\n\t\"requireSpacesInFunctionDeclaration\": { \"beforeOpeningCurlyBrace\": true },\n\t\"disallowSpacesInFunctionDeclaration\": { \"beforeOpeningRoundBrace\": true },\n\n\t\"requireSpaceBetweenArguments\": true,\n\n\t\"disallowSpacesInsideParentheses\": true,\n\n\t\"disallowSpacesInsideArrayBrackets\": true,\n\n\t\"disallowQuotedKeysInObjects\": { \"allExcept\": [\"reserved\"] },\n\n\t\"disallowSpaceAfterObjectKeys\": true,\n\n\t\"requireCommaBeforeLineBreak\": true,\n\n\t\"disallowSpaceAfterPrefixUnaryOperators\": [\"++\", \"--\", \"+\", \"-\", \"~\", \"!\"],\n\t\"requireSpaceAfterPrefixUnaryOperators\": [],\n\n\t\"disallowSpaceBeforePostfixUnaryOperators\": [\"++\", \"--\"],\n\t\"requireSpaceBeforePostfixUnaryOperators\": [],\n\n\t\"disallowSpaceBeforeBinaryOperators\": [],\n\t\"requireSpaceBeforeBinaryOperators\": [\"+\", \"-\", \"/\", \"*\", \"=\", \"==\", \"===\", \"!=\", \"!==\"],\n\n\t\"requireSpaceAfterBinaryOperators\": [\"+\", \"-\", \"/\", \"*\", \"=\", \"==\", \"===\", \"!=\", \"!==\"],\n\t\"disallowSpaceAfterBinaryOperators\": [],\n\n\t\"disallowImplicitTypeConversion\": [\"binary\", \"string\"],\n\n\t\"disallowKeywords\": [\"with\", \"eval\"],\n\n\t\"requireKeywordsOnNewLine\": [],\n\t\"disallowKeywordsOnNewLine\": [\"else\"],\n\n\t\"requireLineFeedAtFileEnd\": true,\n\n\t\"disallowTrailingWhitespace\": true,\n\n\t\"disallowTrailingComma\": true,\n\n\t\"excludeFiles\": [\"node_modules/**\", \"vendor/**\"],\n\n\t\"disallowMultipleLineStrings\": true,\n\n\t\"requireDotNotation\": { \"allExcept\": [\"keywords\"] },\n\n\t\"requireParenthesesAroundIIFE\": true,\n\n\t\"validateLineBreaks\": \"LF\",\n\n\t\"validateQuoteMarks\": {\n\t\t\"escape\": true,\n\t\t\"mark\": \"'\"\n\t},\n\n\t\"disallowOperatorBeforeLineBreak\": [],\n\n\t\"requireSpaceBeforeKeywords\": [\n\t\t\"do\",\n\t\t\"for\",\n\t\t\"if\",\n\t\t\"else\",\n\t\t\"switch\",\n\t\t\"case\",\n\t\t\"try\",\n\t\t\"catch\",\n\t\t\"finally\",\n\t\t\"while\",\n\t\t\"with\",\n\t\t\"return\"\n\t],\n\n\t\"validateAlignedFunctionParameters\": {\n\t\t\"lineBreakAfterOpeningBraces\": true,\n\t\t\"lineBreakBeforeClosingBraces\": true\n\t},\n\n\t\"requirePaddingNewLinesBeforeExport\": true,\n\n\t\"validateNewlineAfterArrayElements\": {\n\t\t\"maximum\": 8\n\t},\n\n\t\"requirePaddingNewLinesAfterUseStrict\": true,\n\n\t\"disallowArrowFunctions\": true,\n\n\t\"disallowMultiLineTernary\": true,\n\n\t\"validateOrderInObjectKeys\": \"asc-insensitive\",\n\n\t\"disallowIdenticalDestructuringNames\": true,\n\n\t\"disallowNestedTernaries\": { \"maxLevel\": 1 },\n\n\t\"requireSpaceAfterComma\": { \"allExcept\": [\"trailing\"] },\n\t\"requireAlignedMultilineParams\": false,\n\n\t\"requireSpacesInGenerator\": {\n\t\t\"afterStar\": true\n\t},\n\n\t\"disallowSpacesInGenerator\": {\n\t\t\"beforeStar\": true\n\t},\n\n\t\"disallowVar\": false,\n\n\t\"requireArrayDestructuring\": false,\n\n\t\"requireEnhancedObjectLiterals\": false,\n\n\t\"requireObjectDestructuring\": false,\n\n\t\"requireEarlyReturn\": false,\n\n\t\"requireCapitalizedConstructorsNew\": {\n\t\t\"allExcept\": [\"Function\", \"String\", \"Object\", \"Symbol\", \"Number\", \"Date\", \"RegExp\", \"Error\", \"Boolean\", \"Array\"]\n\t},\n\n\t\"requireImportAlphabetized\": false,\n\n    \"requireSpaceBeforeObjectValues\": true,\n    \"requireSpaceBeforeDestructuredValues\": true,\n\n\t\"disallowSpacesInsideTemplateStringPlaceholders\": true,\n\n    \"disallowArrayDestructuringReturn\": false,\n\n    \"requireNewlineBeforeSingleStatementsInIf\": false,\n\n\t\"disallowUnusedVariables\": true,\n\n\t\"requireSpacesInsideImportedObjectBraces\": true,\n\n\t\"requireUseStrict\": true\n}\n\n/.travis.yml\u0015Klanguage: node_js\nos:\n - linux\nnode_js:\n  - \"8.4\"\n  - \"7.10\"\n  - \"6.11\"\n  - \"5.12\"\n  - \"4.8\"\n  - \"iojs-v3.3\"\n  - \"iojs-v2.5\"\n  - \"iojs-v1.8\"\n  - \"0.12\"\n  - \"0.10\"\n  - \"0.8\"\nbefore_install:\n  - 'if [ \"${TRAVIS_NODE_VERSION}\" = \"0.6\" ]; then npm install -g npm@1.3 ; elif [ \"${TRAVIS_NODE_VERSION}\" != \"0.9\" ]; then case \"$(npm --version)\" in 1.*) npm install -g npm@1.4.28 ;; 2.*) npm install -g npm@2 ;; esac ; fi'\n  - 'if [ \"${TRAVIS_NODE_VERSION}\" != \"0.6\" ] && [ \"${TRAVIS_NODE_VERSION}\" != \"0.9\" ]; then if [ \"${TRAVIS_NODE_VERSION%${TRAVIS_NODE_VERSION#[0-9]}}\" = \"0\" ] || [ \"${TRAVIS_NODE_VERSION:0:4}\" = \"iojs\" ]; then npm install -g npm@4.5 ; else npm install -g npm; fi; fi'\ninstall:\n  - 'if [ \"${TRAVIS_NODE_VERSION}\" = \"0.6\" ]; then nvm install 0.8 && npm install -g npm@1.3 && npm install -g npm@1.4.28 && npm install -g npm@2 && npm install && nvm use \"${TRAVIS_NODE_VERSION}\"; else npm install; fi;'\nscript:\n  - 'if [ -n \"${PRETEST-}\" ]; then npm run pretest ; fi'\n  - 'if [ -n \"${POSTTEST-}\" ]; then npm run posttest ; fi'\n  - 'if [ -n \"${COVERAGE-}\" ]; then npm run coverage ; fi'\n  - 'if [ -n \"${TEST-}\" ]; then npm run tests-only ; fi'\nsudo: false\nenv:\n  - TEST=true\nmatrix:\n  fast_finish: true\n  include:\n    - node_js: \"node\"\n      env: PRETEST=true\n    - node_js: \"4\"\n      env: COVERAGE=true\n    - node_js: \"8.3\"\n      env: TEST=true ALLOW_FAILURE=true\n    - node_js: \"8.2\"\n      env: TEST=true ALLOW_FAILURE=true\n    - node_js: \"8.1\"\n      env: TEST=true ALLOW_FAILURE=true\n    - node_js: \"8.0\"\n      env: TEST=true ALLOW_FAILURE=true\n    - node_js: \"7.9\"\n      env: TEST=true ALLOW_FAILURE=true\n    - node_js: \"7.8\"\n      env: TEST=true ALLOW_FAILURE=true\n    - node_js: \"7.7\"\n      env: TEST=true ALLOW_FAILURE=true\n    - node_js: \"7.6\"\n      env: TEST=true ALLOW_FAILURE=true\n    - node_js: \"7.5\"\n      env: TEST=true ALLOW_FAILURE=true\n    - node_js: \"7.4\"\n      env: TEST=true ALLOW_FAILURE=true\n    - node_js: \"7.3\"\n      env: TEST=true ALLOW_FAILURE=true\n    - node_js: \"7.2\"\n      env: TEST=true ALLOW_FAILURE=true\n    - node_js: \"7.1\"\n      env: TEST=true ALLOW_FAILURE=true\n    - node_js: \"7.0\"\n      env: TEST=true ALLOW_FAILURE=true\n    - node_js: \"6.10\"\n      env: TEST=true ALLOW_FAILURE=true\n    - node_js: \"6.9\"\n      env: TEST=true ALLOW_FAILURE=true\n    - node_js: \"6.8\"\n      env: TEST=true ALLOW_FAILURE=true\n    - node_js: \"6.7\"\n      env: TEST=true ALLOW_FAILURE=true\n    - node_js: \"6.6\"\n      env: TEST=true ALLOW_FAILURE=true\n    - node_js: \"6.5\"\n      env: TEST=true ALLOW_FAILURE=true\n    - node_js: \"6.4\"\n      env: TEST=true ALLOW_FAILURE=true\n    - node_js: \"6.3\"\n      env: TEST=true ALLOW_FAILURE=true\n    - node_js: \"6.2\"\n      env: TEST=true ALLOW_FAILURE=true\n    - node_js: \"6.1\"\n      env: TEST=true ALLOW_FAILURE=true\n    - node_js: \"6.0\"\n      env: TEST=true ALLOW_FAILURE=true\n    - node_js: \"5.11\"\n      env: TEST=true ALLOW_FAILURE=true\n    - node_js: \"5.10\"\n      env: TEST=true ALLOW_FAILURE=true\n    - node_js: \"5.9\"\n      env: TEST=true ALLOW_FAILURE=true\n    - node_js: \"5.8\"\n      env: TEST=true ALLOW_FAILURE=true\n    - node_js: \"5.7\"\n      env: TEST=true ALLOW_FAILURE=true\n    - node_js: \"5.6\"\n      env: TEST=true ALLOW_FAILURE=true\n    - node_js: \"5.5\"\n      env: TEST=true ALLOW_FAILURE=true\n    - node_js: \"5.4\"\n      env: TEST=true ALLOW_FAILURE=true\n    - node_js: \"5.3\"\n      env: TEST=true ALLOW_FAILURE=true\n    - node_js: \"5.2\"\n      env: TEST=true ALLOW_FAILURE=true\n    - node_js: \"5.1\"\n      env: TEST=true ALLOW_FAILURE=true\n    - node_js: \"5.0\"\n      env: TEST=true ALLOW_FAILURE=true\n    - node_js: \"4.7\"\n      env: TEST=true ALLOW_FAILURE=true\n    - node_js: \"4.6\"\n      env: TEST=true ALLOW_FAILURE=true\n    - node_js: \"4.5\"\n      env: TEST=true ALLOW_FAILURE=true\n    - node_js: \"4.4\"\n      env: TEST=true ALLOW_FAILURE=true\n    - node_js: \"4.3\"\n      env: TEST=true ALLOW_FAILURE=true\n    - node_js: \"4.2\"\n      env: TEST=true ALLOW_FAILURE=true\n    - node_js: \"4.1\"\n      env: TEST=true ALLOW_FAILURE=true\n    - node_js: \"4.0\"\n      env: TEST=true ALLOW_FAILURE=true\n    - node_js: \"iojs-v3.2\"\n      env: TEST=true ALLOW_FAILURE=true\n    - node_js: \"iojs-v3.1\"\n      env: TEST=true ALLOW_FAILURE=true\n    - node_js: \"iojs-v3.0\"\n      env: TEST=true ALLOW_FAILURE=true\n    - node_js: \"iojs-v2.4\"\n      env: TEST=true ALLOW_FAILURE=true\n    - node_js: \"iojs-v2.3\"\n      env: TEST=true ALLOW_FAILURE=true\n    - node_js: \"iojs-v2.2\"\n      env: TEST=true ALLOW_FAILURE=true\n    - node_js: \"iojs-v2.1\"\n      env: TEST=true ALLOW_FAILURE=true\n    - node_js: \"iojs-v2.0\"\n      env: TEST=true ALLOW_FAILURE=true\n    - node_js: \"iojs-v1.7\"\n      env: TEST=true ALLOW_FAILURE=true\n    - node_js: \"iojs-v1.6\"\n      env: TEST=true ALLOW_FAILURE=true\n    - node_js: \"iojs-v1.5\"\n      env: TEST=true ALLOW_FAILURE=true\n    - node_js: \"iojs-v1.4\"\n      env: TEST=true ALLOW_FAILURE=true\n    - node_js: \"iojs-v1.3\"\n      env: TEST=true ALLOW_FAILURE=true\n    - node_js: \"iojs-v1.2\"\n      env: TEST=true ALLOW_FAILURE=true\n    - node_js: \"iojs-v1.1\"\n      env: TEST=true ALLOW_FAILURE=true\n    - node_js: \"iojs-v1.0\"\n      env: TEST=true ALLOW_FAILURE=true\n    - node_js: \"0.11\"\n      env: TEST=true ALLOW_FAILURE=true\n    - node_js: \"0.9\"\n      env: TEST=true ALLOW_FAILURE=true\n    - node_js: \"0.6\"\n      env: TEST=true ALLOW_FAILURE=true\n    - node_js: \"0.4\"\n      env: TEST=true ALLOW_FAILURE=true\n  allow_failures:\n    - os: osx\n    - env: TEST=true ALLOW_FAILURE=true\n/.eslintrc{\n\t\"root\": true,\n\n\t\"extends\": \"@ljharb\",\n\n\t\"rules\": {\n\t\t\"func-name-matching\": 0,\n\t\t\"indent\": [2, 4],\n\t\t\"max-nested-callbacks\": [2, 3],\n\t\t\"max-params\": [2, 3],\n\t\t\"max-statements\": [2, 20],\n\t\t\"no-new-func\": [1],\n\t\t\"strict\": [0]\n\t}\n}\n/implementation.js\u0005'use strict';\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar slice = Array.prototype.slice;\nvar toStr = Object.prototype.toString;\nvar funcType = '[object Function]';\n\nmodule.exports = function bind(that) {\n    var target = this;\n    if (typeof target !== 'function' || toStr.call(target) !== funcType) {\n        throw new TypeError(ERROR_MESSAGE + target);\n    }\n    var args = slice.call(arguments, 1);\n\n    var bound;\n    var binder = function () {\n        if (this instanceof bound) {\n            var result = target.apply(\n                this,\n                args.concat(slice.call(arguments))\n            );\n            if (Object(result) === result) {\n                return result;\n            }\n            return this;\n        } else {\n            return target.apply(\n                that,\n                args.concat(slice.call(arguments))\n            );\n        }\n    };\n\n    var boundLength = Math.max(0, target.length - args.length);\n    var boundArgs = [];\n    for (var i = 0; i < boundLength; i++) {\n        boundArgs.push('$' + i);\n    }\n\n    bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder);\n\n    if (target.prototype) {\n        var Empty = function Empty() {};\n        Empty.prototype = target.prototype;\n        bound.prototype = new Empty();\n        Empty.prototype = null;\n    }\n\n    return bound;\n};\n/index.js~'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = Function.prototype.bind || implementation;\n/test/index.js#\u001f// jscs:disable requireUseStrict\n\nvar test = require('tape');\n\nvar functionBind = require('../implementation');\nvar getCurrentContext = function () { return this; };\n\ntest('functionBind is a function', function (t) {\n    t.equal(typeof functionBind, 'function');\n    t.end();\n});\n\ntest('non-functions', function (t) {\n    var nonFunctions = [true, false, [], {}, 42, 'foo', NaN, /a/g];\n    t.plan(nonFunctions.length);\n    for (var i = 0; i < nonFunctions.length; ++i) {\n        try { functionBind.call(nonFunctions[i]); } catch (ex) {\n            t.ok(ex instanceof TypeError, 'throws when given ' + String(nonFunctions[i]));\n        }\n    }\n    t.end();\n});\n\ntest('without a context', function (t) {\n    t.test('binds properly', function (st) {\n        var args, context;\n        var namespace = {\n            func: functionBind.call(function () {\n                args = Array.prototype.slice.call(arguments);\n                context = this;\n            })\n        };\n        namespace.func(1, 2, 3);\n        st.deepEqual(args, [1, 2, 3]);\n        st.equal(context, getCurrentContext.call());\n        st.end();\n    });\n\n    t.test('binds properly, and still supplies bound arguments', function (st) {\n        var args, context;\n        var namespace = {\n            func: functionBind.call(function () {\n                args = Array.prototype.slice.call(arguments);\n                context = this;\n            }, undefined, 1, 2, 3)\n        };\n        namespace.func(4, 5, 6);\n        st.deepEqual(args, [1, 2, 3, 4, 5, 6]);\n        st.equal(context, getCurrentContext.call());\n        st.end();\n    });\n\n    t.test('returns properly', function (st) {\n        var args;\n        var namespace = {\n            func: functionBind.call(function () {\n                args = Array.prototype.slice.call(arguments);\n                return this;\n            }, null)\n        };\n        var context = namespace.func(1, 2, 3);\n        st.equal(context, getCurrentContext.call(), 'returned context is namespaced context');\n        st.deepEqual(args, [1, 2, 3], 'passed arguments are correct');\n        st.end();\n    });\n\n    t.test('returns properly with bound arguments', function (st) {\n        var args;\n        var namespace = {\n            func: functionBind.call(function () {\n                args = Array.prototype.slice.call(arguments);\n                return this;\n            }, null, 1, 2, 3)\n        };\n        var context = namespace.func(4, 5, 6);\n        st.equal(context, getCurrentContext.call(), 'returned context is namespaced context');\n        st.deepEqual(args, [1, 2, 3, 4, 5, 6], 'passed arguments are correct');\n        st.end();\n    });\n\n    t.test('called as a constructor', function (st) {\n        var thunkify = function (value) {\n            return function () { return value; };\n        };\n        st.test('returns object value', function (sst) {\n            var expectedReturnValue = [1, 2, 3];\n            var Constructor = functionBind.call(thunkify(expectedReturnValue), null);\n            var result = new Constructor();\n            sst.equal(result, expectedReturnValue);\n            sst.end();\n        });\n\n        st.test('does not return primitive value', function (sst) {\n            var Constructor = functionBind.call(thunkify(42), null);\n            var result = new Constructor();\n            sst.notEqual(result, 42);\n            sst.end();\n        });\n\n        st.test('object from bound constructor is instance of original and bound constructor', function (sst) {\n            var A = function (x) {\n                this.name = x || 'A';\n            };\n            var B = functionBind.call(A, null, 'B');\n\n            var result = new B();\n            sst.ok(result instanceof B, 'result is instance of bound constructor');\n            sst.ok(result instanceof A, 'result is instance of original constructor');\n            sst.end();\n        });\n\n        st.end();\n    });\n\n    t.end();\n});\n\ntest('with a context', function (t) {\n    t.test('with no bound arguments', function (st) {\n        var args, context;\n        var boundContext = {};\n        var namespace = {\n            func: functionBind.call(function () {\n                args = Array.prototype.slice.call(arguments);\n                context = this;\n            }, boundContext)\n        };\n        namespace.func(1, 2, 3);\n        st.equal(context, boundContext, 'binds a context properly');\n        st.deepEqual(args, [1, 2, 3], 'supplies passed arguments');\n        st.end();\n    });\n\n    t.test('with bound arguments', function (st) {\n        var args, context;\n        var boundContext = {};\n        var namespace = {\n            func: functionBind.call(function () {\n                args = Array.prototype.slice.call(arguments);\n                context = this;\n            }, boundContext, 1, 2, 3)\n        };\n        namespace.func(4, 5, 6);\n        st.equal(context, boundContext, 'binds a context properly');\n        st.deepEqual(args, [1, 2, 3, 4, 5, 6], 'supplies bound and passed arguments');\n        st.end();\n    });\n\n    t.test('returns properly', function (st) {\n        var boundContext = {};\n        var args;\n        var namespace = {\n            func: functionBind.call(function () {\n                args = Array.prototype.slice.call(arguments);\n                return this;\n            }, boundContext)\n        };\n        var context = namespace.func(1, 2, 3);\n        st.equal(context, boundContext, 'returned context is bound context');\n        st.notEqual(context, getCurrentContext.call(), 'returned context is not lexical context');\n        st.deepEqual(args, [1, 2, 3], 'passed arguments are correct');\n        st.end();\n    });\n\n    t.test('returns properly with bound arguments', function (st) {\n        var boundContext = {};\n        var args;\n        var namespace = {\n            func: functionBind.call(function () {\n                args = Array.prototype.slice.call(arguments);\n                return this;\n            }, boundContext, 1, 2, 3)\n        };\n        var context = namespace.func(4, 5, 6);\n        st.equal(context, boundContext, 'returned context is bound context');\n        st.notEqual(context, getCurrentContext.call(), 'returned context is not lexical context');\n        st.deepEqual(args, [1, 2, 3, 4, 5, 6], 'passed arguments are correct');\n        st.end();\n    });\n\n    t.test('passes the correct arguments when called as a constructor', function (st) {\n        var expected = { name: 'Correct' };\n        var namespace = {\n            Func: functionBind.call(function (arg) {\n                return arg;\n            }, { name: 'Incorrect' })\n        };\n        var returned = new namespace.Func(expected);\n        st.equal(returned, expected, 'returns the right arg when called as a constructor');\n        st.end();\n    });\n\n    t.test('has the new instance\\'s context when called as a constructor', function (st) {\n        var actualContext;\n        var expectedContext = { foo: 'bar' };\n        var namespace = {\n            Func: functionBind.call(function () {\n                actualContext = this;\n            }, expectedContext)\n        };\n        var result = new namespace.Func();\n        st.equal(result instanceof namespace.Func, true);\n        st.notEqual(actualContext, expectedContext);\n        st.end();\n    });\n\n    t.end();\n});\n\ntest('bound function length', function (t) {\n    t.test('sets a correct length without thisArg', function (st) {\n        var subject = functionBind.call(function (a, b, c) { return a + b + c; });\n        st.equal(subject.length, 3);\n        st.equal(subject(1, 2, 3), 6);\n        st.end();\n    });\n\n    t.test('sets a correct length with thisArg', function (st) {\n        var subject = functionBind.call(function (a, b, c) { return a + b + c; }, {});\n        st.equal(subject.length, 3);\n        st.equal(subject(1, 2, 3), 6);\n        st.end();\n    });\n\n    t.test('sets a correct length without thisArg and first argument', function (st) {\n        var subject = functionBind.call(function (a, b, c) { return a + b + c; }, undefined, 1);\n        st.equal(subject.length, 2);\n        st.equal(subject(2, 3), 6);\n        st.end();\n    });\n\n    t.test('sets a correct length with thisArg and first argument', function (st) {\n        var subject = functionBind.call(function (a, b, c) { return a + b + c; }, {}, 1);\n        st.equal(subject.length, 2);\n        st.equal(subject(2, 3), 6);\n        st.end();\n    });\n\n    t.test('sets a correct length without thisArg and too many arguments', function (st) {\n        var subject = functionBind.call(function (a, b, c) { return a + b + c; }, undefined, 1, 2, 3, 4);\n        st.equal(subject.length, 0);\n        st.equal(subject(), 6);\n        st.end();\n    });\n\n    t.test('sets a correct length with thisArg and too many arguments', function (st) {\n        var subject = functionBind.call(function (a, b, c) { return a + b + c; }, {}, 1, 2, 3, 4);\n        st.equal(subject.length, 0);\n        st.equal(subject(), 6);\n        st.end();\n    });\n});\n/README.md\u0005# function-bind\n\n<!--\n    [![build status][travis-svg]][travis-url]\n    [![NPM version][npm-badge-svg]][npm-url]\n    [![Coverage Status][5]][6]\n    [![gemnasium Dependency Status][7]][8]\n    [![Dependency status][deps-svg]][deps-url]\n    [![Dev Dependency status][dev-deps-svg]][dev-deps-url]\n-->\n\n<!-- [![browser support][11]][12] -->\n\nImplementation of function.prototype.bind\n\n## Example\n\nI mainly do this for unit tests I run on phantomjs.\nPhantomJS does not have Function.prototype.bind :(\n\n```js\nFunction.prototype.bind = require(\"function-bind\")\n```\n\n## Installation\n\n`npm install function-bind`\n\n## Contributors\n\n - Raynos\n\n## MIT Licenced\n\n  [travis-svg]: https://travis-ci.org/Raynos/function-bind.svg\n  [travis-url]: https://travis-ci.org/Raynos/function-bind\n  [npm-badge-svg]: https://badge.fury.io/js/function-bind.svg\n  [npm-url]: https://npmjs.org/package/function-bind\n  [5]: https://coveralls.io/repos/Raynos/function-bind/badge.png\n  [6]: https://coveralls.io/r/Raynos/function-bind\n  [7]: https://gemnasium.com/Raynos/function-bind.png\n  [8]: https://gemnasium.com/Raynos/function-bind\n  [deps-svg]: https://david-dm.org/Raynos/function-bind.svg\n  [deps-url]: https://david-dm.org/Raynos/function-bind\n  [dev-deps-svg]: https://david-dm.org/Raynos/function-bind/dev-status.svg\n  [dev-deps-url]: https://david-dm.org/Raynos/function-bind#info=devDependencies\n  [11]: https://ci.testling.com/Raynos/function-bind.png\n  [12]: https://ci.testling.com/Raynos/function-bind\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/ZnVuY3Rpb25hbC1yZWQtYmxhY2stdHJlZUAxLjAuMQ==",
    "content": "/.npmignoremlib-cov\n*.seed\n*.log\n*.csv\n*.dat\n*.out\n*.pid\n*.gz\n\npids\nlogs\nresults\n\nnpm-debug.log\nnode_modules/*\n*.DS_Store/bench/test.js\"use strict\"\n\nvar createTree = require(\"../rbtree.js\")\n\nvar t = createTree()\n\nvar s = Date.now()\nfor(var i=0; i<100000; ++i) {\n  t = t.insert(Math.random(), Math.random())\n}\nconsole.log(Date.now() - s)/rbtree.jsW4\"use strict\"\n\nmodule.exports = createRBTree\n\nvar RED   = 0\nvar BLACK = 1\n\nfunction RBNode(color, key, value, left, right, count) {\n  this._color = color\n  this.key = key\n  this.value = value\n  this.left = left\n  this.right = right\n  this._count = count\n}\n\nfunction cloneNode(node) {\n  return new RBNode(node._color, node.key, node.value, node.left, node.right, node._count)\n}\n\nfunction repaint(color, node) {\n  return new RBNode(color, node.key, node.value, node.left, node.right, node._count)\n}\n\nfunction recount(node) {\n  node._count = 1 + (node.left ? node.left._count : 0) + (node.right ? node.right._count : 0)\n}\n\nfunction RedBlackTree(compare, root) {\n  this._compare = compare\n  this.root = root\n}\n\nvar proto = RedBlackTree.prototype\n\nObject.defineProperty(proto, \"keys\", {\n  get: function() {\n    var result = []\n    this.forEach(function(k,v) {\n      result.push(k)\n    })\n    return result\n  }\n})\n\nObject.defineProperty(proto, \"values\", {\n  get: function() {\n    var result = []\n    this.forEach(function(k,v) {\n      result.push(v)\n    })\n    return result\n  }\n})\n\n//Returns the number of nodes in the tree\nObject.defineProperty(proto, \"length\", {\n  get: function() {\n    if(this.root) {\n      return this.root._count\n    }\n    return 0\n  }\n})\n\n//Insert a new item into the tree\nproto.insert = function(key, value) {\n  var cmp = this._compare\n  //Find point to insert new node at\n  var n = this.root\n  var n_stack = []\n  var d_stack = []\n  while(n) {\n    var d = cmp(key, n.key)\n    n_stack.push(n)\n    d_stack.push(d)\n    if(d <= 0) {\n      n = n.left\n    } else {\n      n = n.right\n    }\n  }\n  //Rebuild path to leaf node\n  n_stack.push(new RBNode(RED, key, value, null, null, 1))\n  for(var s=n_stack.length-2; s>=0; --s) {\n    var n = n_stack[s]\n    if(d_stack[s] <= 0) {\n      n_stack[s] = new RBNode(n._color, n.key, n.value, n_stack[s+1], n.right, n._count+1)\n    } else {\n      n_stack[s] = new RBNode(n._color, n.key, n.value, n.left, n_stack[s+1], n._count+1)\n    }\n  }\n  //Rebalance tree using rotations\n  //console.log(\"start insert\", key, d_stack)\n  for(var s=n_stack.length-1; s>1; --s) {\n    var p = n_stack[s-1]\n    var n = n_stack[s]\n    if(p._color === BLACK || n._color === BLACK) {\n      break\n    }\n    var pp = n_stack[s-2]\n    if(pp.left === p) {\n      if(p.left === n) {\n        var y = pp.right\n        if(y && y._color === RED) {\n          //console.log(\"LLr\")\n          p._color = BLACK\n          pp.right = repaint(BLACK, y)\n          pp._color = RED\n          s -= 1\n        } else {\n          //console.log(\"LLb\")\n          pp._color = RED\n          pp.left = p.right\n          p._color = BLACK\n          p.right = pp\n          n_stack[s-2] = p\n          n_stack[s-1] = n\n          recount(pp)\n          recount(p)\n          if(s >= 3) {\n            var ppp = n_stack[s-3]\n            if(ppp.left === pp) {\n              ppp.left = p\n            } else {\n              ppp.right = p\n            }\n          }\n          break\n        }\n      } else {\n        var y = pp.right\n        if(y && y._color === RED) {\n          //console.log(\"LRr\")\n          p._color = BLACK\n          pp.right = repaint(BLACK, y)\n          pp._color = RED\n          s -= 1\n        } else {\n          //console.log(\"LRb\")\n          p.right = n.left\n          pp._color = RED\n          pp.left = n.right\n          n._color = BLACK\n          n.left = p\n          n.right = pp\n          n_stack[s-2] = n\n          n_stack[s-1] = p\n          recount(pp)\n          recount(p)\n          recount(n)\n          if(s >= 3) {\n            var ppp = n_stack[s-3]\n            if(ppp.left === pp) {\n              ppp.left = n\n            } else {\n              ppp.right = n\n            }\n          }\n          break\n        }\n      }\n    } else {\n      if(p.right === n) {\n        var y = pp.left\n        if(y && y._color === RED) {\n          //console.log(\"RRr\", y.key)\n          p._color = BLACK\n          pp.left = repaint(BLACK, y)\n          pp._color = RED\n          s -= 1\n        } else {\n          //console.log(\"RRb\")\n          pp._color = RED\n          pp.right = p.left\n          p._color = BLACK\n          p.left = pp\n          n_stack[s-2] = p\n          n_stack[s-1] = n\n          recount(pp)\n          recount(p)\n          if(s >= 3) {\n            var ppp = n_stack[s-3]\n            if(ppp.right === pp) {\n              ppp.right = p\n            } else {\n              ppp.left = p\n            }\n          }\n          break\n        }\n      } else {\n        var y = pp.left\n        if(y && y._color === RED) {\n          //console.log(\"RLr\")\n          p._color = BLACK\n          pp.left = repaint(BLACK, y)\n          pp._color = RED\n          s -= 1\n        } else {\n          //console.log(\"RLb\")\n          p.left = n.right\n          pp._color = RED\n          pp.right = n.left\n          n._color = BLACK\n          n.right = p\n          n.left = pp\n          n_stack[s-2] = n\n          n_stack[s-1] = p\n          recount(pp)\n          recount(p)\n          recount(n)\n          if(s >= 3) {\n            var ppp = n_stack[s-3]\n            if(ppp.right === pp) {\n              ppp.right = n\n            } else {\n              ppp.left = n\n            }\n          }\n          break\n        }\n      }\n    }\n  }\n  //Return new tree\n  n_stack[0]._color = BLACK\n  return new RedBlackTree(cmp, n_stack[0])\n}\n\n\n//Visit all nodes inorder\nfunction doVisitFull(visit, node) {\n  if(node.left) {\n    var v = doVisitFull(visit, node.left)\n    if(v) { return v }\n  }\n  var v = visit(node.key, node.value)\n  if(v) { return v }\n  if(node.right) {\n    return doVisitFull(visit, node.right)\n  }\n}\n\n//Visit half nodes in order\nfunction doVisitHalf(lo, compare, visit, node) {\n  var l = compare(lo, node.key)\n  if(l <= 0) {\n    if(node.left) {\n      var v = doVisitHalf(lo, compare, visit, node.left)\n      if(v) { return v }\n    }\n    var v = visit(node.key, node.value)\n    if(v) { return v }\n  }\n  if(node.right) {\n    return doVisitHalf(lo, compare, visit, node.right)\n  }\n}\n\n//Visit all nodes within a range\nfunction doVisit(lo, hi, compare, visit, node) {\n  var l = compare(lo, node.key)\n  var h = compare(hi, node.key)\n  var v\n  if(l <= 0) {\n    if(node.left) {\n      v = doVisit(lo, hi, compare, visit, node.left)\n      if(v) { return v }\n    }\n    if(h > 0) {\n      v = visit(node.key, node.value)\n      if(v) { return v }\n    }\n  }\n  if(h > 0 && node.right) {\n    return doVisit(lo, hi, compare, visit, node.right)\n  }\n}\n\n\nproto.forEach = function rbTreeForEach(visit, lo, hi) {\n  if(!this.root) {\n    return\n  }\n  switch(arguments.length) {\n    case 1:\n      return doVisitFull(visit, this.root)\n    break\n\n    case 2:\n      return doVisitHalf(lo, this._compare, visit, this.root)\n    break\n\n    case 3:\n      if(this._compare(lo, hi) >= 0) {\n        return\n      }\n      return doVisit(lo, hi, this._compare, visit, this.root)\n    break\n  }\n}\n\n//First item in list\nObject.defineProperty(proto, \"begin\", {\n  get: function() {\n    var stack = []\n    var n = this.root\n    while(n) {\n      stack.push(n)\n      n = n.left\n    }\n    return new RedBlackTreeIterator(this, stack)\n  }\n})\n\n//Last item in list\nObject.defineProperty(proto, \"end\", {\n  get: function() {\n    var stack = []\n    var n = this.root\n    while(n) {\n      stack.push(n)\n      n = n.right\n    }\n    return new RedBlackTreeIterator(this, stack)\n  }\n})\n\n//Find the ith item in the tree\nproto.at = function(idx) {\n  if(idx < 0) {\n    return new RedBlackTreeIterator(this, [])\n  }\n  var n = this.root\n  var stack = []\n  while(true) {\n    stack.push(n)\n    if(n.left) {\n      if(idx < n.left._count) {\n        n = n.left\n        continue\n      }\n      idx -= n.left._count\n    }\n    if(!idx) {\n      return new RedBlackTreeIterator(this, stack)\n    }\n    idx -= 1\n    if(n.right) {\n      if(idx >= n.right._count) {\n        break\n      }\n      n = n.right\n    } else {\n      break\n    }\n  }\n  return new RedBlackTreeIterator(this, [])\n}\n\nproto.ge = function(key) {\n  var cmp = this._compare\n  var n = this.root\n  var stack = []\n  var last_ptr = 0\n  while(n) {\n    var d = cmp(key, n.key)\n    stack.push(n)\n    if(d <= 0) {\n      last_ptr = stack.length\n    }\n    if(d <= 0) {\n      n = n.left\n    } else {\n      n = n.right\n    }\n  }\n  stack.length = last_ptr\n  return new RedBlackTreeIterator(this, stack)\n}\n\nproto.gt = function(key) {\n  var cmp = this._compare\n  var n = this.root\n  var stack = []\n  var last_ptr = 0\n  while(n) {\n    var d = cmp(key, n.key)\n    stack.push(n)\n    if(d < 0) {\n      last_ptr = stack.length\n    }\n    if(d < 0) {\n      n = n.left\n    } else {\n      n = n.right\n    }\n  }\n  stack.length = last_ptr\n  return new RedBlackTreeIterator(this, stack)\n}\n\nproto.lt = function(key) {\n  var cmp = this._compare\n  var n = this.root\n  var stack = []\n  var last_ptr = 0\n  while(n) {\n    var d = cmp(key, n.key)\n    stack.push(n)\n    if(d > 0) {\n      last_ptr = stack.length\n    }\n    if(d <= 0) {\n      n = n.left\n    } else {\n      n = n.right\n    }\n  }\n  stack.length = last_ptr\n  return new RedBlackTreeIterator(this, stack)\n}\n\nproto.le = function(key) {\n  var cmp = this._compare\n  var n = this.root\n  var stack = []\n  var last_ptr = 0\n  while(n) {\n    var d = cmp(key, n.key)\n    stack.push(n)\n    if(d >= 0) {\n      last_ptr = stack.length\n    }\n    if(d < 0) {\n      n = n.left\n    } else {\n      n = n.right\n    }\n  }\n  stack.length = last_ptr\n  return new RedBlackTreeIterator(this, stack)\n}\n\n//Finds the item with key if it exists\nproto.find = function(key) {\n  var cmp = this._compare\n  var n = this.root\n  var stack = []\n  while(n) {\n    var d = cmp(key, n.key)\n    stack.push(n)\n    if(d === 0) {\n      return new RedBlackTreeIterator(this, stack)\n    }\n    if(d <= 0) {\n      n = n.left\n    } else {\n      n = n.right\n    }\n  }\n  return new RedBlackTreeIterator(this, [])\n}\n\n//Removes item with key from tree\nproto.remove = function(key) {\n  var iter = this.find(key)\n  if(iter) {\n    return iter.remove()\n  }\n  return this\n}\n\n//Returns the item at `key`\nproto.get = function(key) {\n  var cmp = this._compare\n  var n = this.root\n  while(n) {\n    var d = cmp(key, n.key)\n    if(d === 0) {\n      return n.value\n    }\n    if(d <= 0) {\n      n = n.left\n    } else {\n      n = n.right\n    }\n  }\n  return\n}\n\n//Iterator for red black tree\nfunction RedBlackTreeIterator(tree, stack) {\n  this.tree = tree\n  this._stack = stack\n}\n\nvar iproto = RedBlackTreeIterator.prototype\n\n//Test if iterator is valid\nObject.defineProperty(iproto, \"valid\", {\n  get: function() {\n    return this._stack.length > 0\n  }\n})\n\n//Node of the iterator\nObject.defineProperty(iproto, \"node\", {\n  get: function() {\n    if(this._stack.length > 0) {\n      return this._stack[this._stack.length-1]\n    }\n    return null\n  },\n  enumerable: true\n})\n\n//Makes a copy of an iterator\niproto.clone = function() {\n  return new RedBlackTreeIterator(this.tree, this._stack.slice())\n}\n\n//Swaps two nodes\nfunction swapNode(n, v) {\n  n.key = v.key\n  n.value = v.value\n  n.left = v.left\n  n.right = v.right\n  n._color = v._color\n  n._count = v._count\n}\n\n//Fix up a double black node in a tree\nfunction fixDoubleBlack(stack) {\n  var n, p, s, z\n  for(var i=stack.length-1; i>=0; --i) {\n    n = stack[i]\n    if(i === 0) {\n      n._color = BLACK\n      return\n    }\n    //console.log(\"visit node:\", n.key, i, stack[i].key, stack[i-1].key)\n    p = stack[i-1]\n    if(p.left === n) {\n      //console.log(\"left child\")\n      s = p.right\n      if(s.right && s.right._color === RED) {\n        //console.log(\"case 1: right sibling child red\")\n        s = p.right = cloneNode(s)\n        z = s.right = cloneNode(s.right)\n        p.right = s.left\n        s.left = p\n        s.right = z\n        s._color = p._color\n        n._color = BLACK\n        p._color = BLACK\n        z._color = BLACK\n        recount(p)\n        recount(s)\n        if(i > 1) {\n          var pp = stack[i-2]\n          if(pp.left === p) {\n            pp.left = s\n          } else {\n            pp.right = s\n          }\n        }\n        stack[i-1] = s\n        return\n      } else if(s.left && s.left._color === RED) {\n        //console.log(\"case 1: left sibling child red\")\n        s = p.right = cloneNode(s)\n        z = s.left = cloneNode(s.left)\n        p.right = z.left\n        s.left = z.right\n        z.left = p\n        z.right = s\n        z._color = p._color\n        p._color = BLACK\n        s._color = BLACK\n        n._color = BLACK\n        recount(p)\n        recount(s)\n        recount(z)\n        if(i > 1) {\n          var pp = stack[i-2]\n          if(pp.left === p) {\n            pp.left = z\n          } else {\n            pp.right = z\n          }\n        }\n        stack[i-1] = z\n        return\n      }\n      if(s._color === BLACK) {\n        if(p._color === RED) {\n          //console.log(\"case 2: black sibling, red parent\", p.right.value)\n          p._color = BLACK\n          p.right = repaint(RED, s)\n          return\n        } else {\n          //console.log(\"case 2: black sibling, black parent\", p.right.value)\n          p.right = repaint(RED, s)\n          continue  \n        }\n      } else {\n        //console.log(\"case 3: red sibling\")\n        s = cloneNode(s)\n        p.right = s.left\n        s.left = p\n        s._color = p._color\n        p._color = RED\n        recount(p)\n        recount(s)\n        if(i > 1) {\n          var pp = stack[i-2]\n          if(pp.left === p) {\n            pp.left = s\n          } else {\n            pp.right = s\n          }\n        }\n        stack[i-1] = s\n        stack[i] = p\n        if(i+1 < stack.length) {\n          stack[i+1] = n\n        } else {\n          stack.push(n)\n        }\n        i = i+2\n      }\n    } else {\n      //console.log(\"right child\")\n      s = p.left\n      if(s.left && s.left._color === RED) {\n        //console.log(\"case 1: left sibling child red\", p.value, p._color)\n        s = p.left = cloneNode(s)\n        z = s.left = cloneNode(s.left)\n        p.left = s.right\n        s.right = p\n        s.left = z\n        s._color = p._color\n        n._color = BLACK\n        p._color = BLACK\n        z._color = BLACK\n        recount(p)\n        recount(s)\n        if(i > 1) {\n          var pp = stack[i-2]\n          if(pp.right === p) {\n            pp.right = s\n          } else {\n            pp.left = s\n          }\n        }\n        stack[i-1] = s\n        return\n      } else if(s.right && s.right._color === RED) {\n        //console.log(\"case 1: right sibling child red\")\n        s = p.left = cloneNode(s)\n        z = s.right = cloneNode(s.right)\n        p.left = z.right\n        s.right = z.left\n        z.right = p\n        z.left = s\n        z._color = p._color\n        p._color = BLACK\n        s._color = BLACK\n        n._color = BLACK\n        recount(p)\n        recount(s)\n        recount(z)\n        if(i > 1) {\n          var pp = stack[i-2]\n          if(pp.right === p) {\n            pp.right = z\n          } else {\n            pp.left = z\n          }\n        }\n        stack[i-1] = z\n        return\n      }\n      if(s._color === BLACK) {\n        if(p._color === RED) {\n          //console.log(\"case 2: black sibling, red parent\")\n          p._color = BLACK\n          p.left = repaint(RED, s)\n          return\n        } else {\n          //console.log(\"case 2: black sibling, black parent\")\n          p.left = repaint(RED, s)\n          continue  \n        }\n      } else {\n        //console.log(\"case 3: red sibling\")\n        s = cloneNode(s)\n        p.left = s.right\n        s.right = p\n        s._color = p._color\n        p._color = RED\n        recount(p)\n        recount(s)\n        if(i > 1) {\n          var pp = stack[i-2]\n          if(pp.right === p) {\n            pp.right = s\n          } else {\n            pp.left = s\n          }\n        }\n        stack[i-1] = s\n        stack[i] = p\n        if(i+1 < stack.length) {\n          stack[i+1] = n\n        } else {\n          stack.push(n)\n        }\n        i = i+2\n      }\n    }\n  }\n}\n\n//Removes item at iterator from tree\niproto.remove = function() {\n  var stack = this._stack\n  if(stack.length === 0) {\n    return this.tree\n  }\n  //First copy path to node\n  var cstack = new Array(stack.length)\n  var n = stack[stack.length-1]\n  cstack[cstack.length-1] = new RBNode(n._color, n.key, n.value, n.left, n.right, n._count)\n  for(var i=stack.length-2; i>=0; --i) {\n    var n = stack[i]\n    if(n.left === stack[i+1]) {\n      cstack[i] = new RBNode(n._color, n.key, n.value, cstack[i+1], n.right, n._count)\n    } else {\n      cstack[i] = new RBNode(n._color, n.key, n.value, n.left, cstack[i+1], n._count)\n    }\n  }\n\n  //Get node\n  n = cstack[cstack.length-1]\n  //console.log(\"start remove: \", n.value)\n\n  //If not leaf, then swap with previous node\n  if(n.left && n.right) {\n    //console.log(\"moving to leaf\")\n\n    //First walk to previous leaf\n    var split = cstack.length\n    n = n.left\n    while(n.right) {\n      cstack.push(n)\n      n = n.right\n    }\n    //Copy path to leaf\n    var v = cstack[split-1]\n    cstack.push(new RBNode(n._color, v.key, v.value, n.left, n.right, n._count))\n    cstack[split-1].key = n.key\n    cstack[split-1].value = n.value\n\n    //Fix up stack\n    for(var i=cstack.length-2; i>=split; --i) {\n      n = cstack[i]\n      cstack[i] = new RBNode(n._color, n.key, n.value, n.left, cstack[i+1], n._count)\n    }\n    cstack[split-1].left = cstack[split]\n  }\n  //console.log(\"stack=\", cstack.map(function(v) { return v.value }))\n\n  //Remove leaf node\n  n = cstack[cstack.length-1]\n  if(n._color === RED) {\n    //Easy case: removing red leaf\n    //console.log(\"RED leaf\")\n    var p = cstack[cstack.length-2]\n    if(p.left === n) {\n      p.left = null\n    } else if(p.right === n) {\n      p.right = null\n    }\n    cstack.pop()\n    for(var i=0; i<cstack.length; ++i) {\n      cstack[i]._count--\n    }\n    return new RedBlackTree(this.tree._compare, cstack[0])\n  } else {\n    if(n.left || n.right) {\n      //Second easy case:  Single child black parent\n      //console.log(\"BLACK single child\")\n      if(n.left) {\n        swapNode(n, n.left)\n      } else if(n.right) {\n        swapNode(n, n.right)\n      }\n      //Child must be red, so repaint it black to balance color\n      n._color = BLACK\n      for(var i=0; i<cstack.length-1; ++i) {\n        cstack[i]._count--\n      }\n      return new RedBlackTree(this.tree._compare, cstack[0])\n    } else if(cstack.length === 1) {\n      //Third easy case: root\n      //console.log(\"ROOT\")\n      return new RedBlackTree(this.tree._compare, null)\n    } else {\n      //Hard case: Repaint n, and then do some nasty stuff\n      //console.log(\"BLACK leaf no children\")\n      for(var i=0; i<cstack.length; ++i) {\n        cstack[i]._count--\n      }\n      var parent = cstack[cstack.length-2]\n      fixDoubleBlack(cstack)\n      //Fix up links\n      if(parent.left === n) {\n        parent.left = null\n      } else {\n        parent.right = null\n      }\n    }\n  }\n  return new RedBlackTree(this.tree._compare, cstack[0])\n}\n\n//Returns key\nObject.defineProperty(iproto, \"key\", {\n  get: function() {\n    if(this._stack.length > 0) {\n      return this._stack[this._stack.length-1].key\n    }\n    return\n  },\n  enumerable: true\n})\n\n//Returns value\nObject.defineProperty(iproto, \"value\", {\n  get: function() {\n    if(this._stack.length > 0) {\n      return this._stack[this._stack.length-1].value\n    }\n    return\n  },\n  enumerable: true\n})\n\n\n//Returns the position of this iterator in the sorted list\nObject.defineProperty(iproto, \"index\", {\n  get: function() {\n    var idx = 0\n    var stack = this._stack\n    if(stack.length === 0) {\n      var r = this.tree.root\n      if(r) {\n        return r._count\n      }\n      return 0\n    } else if(stack[stack.length-1].left) {\n      idx = stack[stack.length-1].left._count\n    }\n    for(var s=stack.length-2; s>=0; --s) {\n      if(stack[s+1] === stack[s].right) {\n        ++idx\n        if(stack[s].left) {\n          idx += stack[s].left._count\n        }\n      }\n    }\n    return idx\n  },\n  enumerable: true\n})\n\n//Advances iterator to next element in list\niproto.next = function() {\n  var stack = this._stack\n  if(stack.length === 0) {\n    return\n  }\n  var n = stack[stack.length-1]\n  if(n.right) {\n    n = n.right\n    while(n) {\n      stack.push(n)\n      n = n.left\n    }\n  } else {\n    stack.pop()\n    while(stack.length > 0 && stack[stack.length-1].right === n) {\n      n = stack[stack.length-1]\n      stack.pop()\n    }\n  }\n}\n\n//Checks if iterator is at end of tree\nObject.defineProperty(iproto, \"hasNext\", {\n  get: function() {\n    var stack = this._stack\n    if(stack.length === 0) {\n      return false\n    }\n    if(stack[stack.length-1].right) {\n      return true\n    }\n    for(var s=stack.length-1; s>0; --s) {\n      if(stack[s-1].left === stack[s]) {\n        return true\n      }\n    }\n    return false\n  }\n})\n\n//Update value\niproto.update = function(value) {\n  var stack = this._stack\n  if(stack.length === 0) {\n    throw new Error(\"Can't update empty node!\")\n  }\n  var cstack = new Array(stack.length)\n  var n = stack[stack.length-1]\n  cstack[cstack.length-1] = new RBNode(n._color, n.key, value, n.left, n.right, n._count)\n  for(var i=stack.length-2; i>=0; --i) {\n    n = stack[i]\n    if(n.left === stack[i+1]) {\n      cstack[i] = new RBNode(n._color, n.key, n.value, cstack[i+1], n.right, n._count)\n    } else {\n      cstack[i] = new RBNode(n._color, n.key, n.value, n.left, cstack[i+1], n._count)\n    }\n  }\n  return new RedBlackTree(this.tree._compare, cstack[0])\n}\n\n//Moves iterator backward one element\niproto.prev = function() {\n  var stack = this._stack\n  if(stack.length === 0) {\n    return\n  }\n  var n = stack[stack.length-1]\n  if(n.left) {\n    n = n.left\n    while(n) {\n      stack.push(n)\n      n = n.right\n    }\n  } else {\n    stack.pop()\n    while(stack.length > 0 && stack[stack.length-1].left === n) {\n      n = stack[stack.length-1]\n      stack.pop()\n    }\n  }\n}\n\n//Checks if iterator is at start of tree\nObject.defineProperty(iproto, \"hasPrev\", {\n  get: function() {\n    var stack = this._stack\n    if(stack.length === 0) {\n      return false\n    }\n    if(stack[stack.length-1].left) {\n      return true\n    }\n    for(var s=stack.length-1; s>0; --s) {\n      if(stack[s-1].right === stack[s]) {\n        return true\n      }\n    }\n    return false\n  }\n})\n\n//Default comparison function\nfunction defaultCompare(a, b) {\n  if(a < b) {\n    return -1\n  }\n  if(a > b) {\n    return 1\n  }\n  return 0\n}\n\n//Build a tree\nfunction createRBTree(compare) {\n  return new RedBlackTree(compare || defaultCompare, null)\n}/test/test.js.\u0006\"use strict\"\n\nvar makeTree = require(\"../rbtree.js\")\nvar tape = require(\"tape\")\nvar util = require(\"util\")\nvar iota = require(\"iota-array\")\n\nvar COLORS = [ \"r\", \"b\", \"bb\" ]\n\nfunction printTree(tree) {\n  if(!tree) {\n    return []\n  }\n  return [ COLORS[tree._color], tree.key, printTree(tree.left), printTree(tree.right) ]\n}\n\nfunction print(t) {\n  console.log(util.inspect(printTree(t.root), {depth:12}))\n}\n\n//Ensures the red black axioms are satisfied by tree\nfunction checkTree(tree, t) {\n  if(!tree.root) {\n    return\n  }\n  t.equals(tree.root._color, 1, \"root is black\")\n  function checkNode(node) {\n    if(!node) {\n      return [1, 0]\n    }\n    if(node._color === 0) {\n      t.assert(!node.left || node.left._color === 1, \"children of red node must be black\")\n      t.assert(!node.right || node.right._color === 1, \"children of red node must be black\")\n    } else {\n      t.equals(node._color, 1, \"node color must be red or black\")\n    }\n    if(node.left) {\n      t.assert(tree._compare(node.left.key, node.key) <= 0, \"left tree order invariant\")\n    }\n    if(node.right) {\n      t.assert(tree._compare(node.right.key, node.key) >= 0, \"right tree order invariant\")\n    }\n    var cl = checkNode(node.left)\n    var cr = checkNode(node.right)\n    t.equals(cl[0], cr[0], \"number of black nodes along all paths to root must be constant\")\n    t.equals(cl[1] + cr[1] + 1, node._count, \"item count consistency\")\n    return [cl[0] + node._color,  cl[1] + cr[1] + 1]\n  }\n  var r = checkNode(tree.root)\n  t.equals(r[1], tree.length, \"tree length\")\n}\n\ntape(\"insert()\", function(t) {\n  var t1 = makeTree()\n  \n  var u = t1\n  var arr = []\n  for(var i=20; i>=0; --i) {\n    var x = i\n    var next = u.insert(x, true)\n    checkTree(u, t)\n    checkTree(next, t)\n    t.equals(u.length, arr.length)\n    arr.push(x)\n    u = next\n  }\n  for(var i=-20; i<0; ++i) {\n    var x = i\n    var next = u.insert(x, true)\n    checkTree(u, t)\n    checkTree(next, t)\n    arr.sort(function(a,b) { return a-b })\n    var ptr = 0\n    u.forEach(function(k,v) {\n      t.equals(k, arr[ptr++])\n    })\n    t.equals(ptr, arr.length)\n    arr.push(x)\n    u = next\n  }\n\n  var start = u.begin\n  for(var i=-20, j=0; j<=40; ++i, ++j) {\n    t.equals(u.at(j).key, i, \"checking at()\")\n    t.equals(start.key, i, \"checking iter\")\n    t.equals(start.index, j, \"checking index\")\n    t.assert(start.valid, \"checking valid\")\n    if(j < 40) {\n      t.assert(start.hasNext, \"hasNext()\")\n    } else {\n      t.assert(!start.hasNext, \"eof hasNext()\")\n    }\n    start.next()\n  }\n  t.assert(!start.valid, \"invalid eof iterator\")\n  t.assert(!start.hasNext, \"hasNext() at eof fail\")\n  t.equals(start.index, 41, \"eof index\")\n\n  t.end()\n})\n\ntape(\"foreach\", function(t) {\n  var u = iota(31).reduce(function(u, k, v) {\n    return u.insert(k, v)\n  }, makeTree())\n\n  //Check basic foreach\n  var visit_keys = []\n  var visit_vals = []\n  u.forEach(function(k,v) {\n    visit_keys.push(k)\n    visit_vals.push(v)\n  })\n  t.same(visit_keys, u.keys)\n  t.same(visit_vals, u.values)\n\n  //Check foreach with termination\n  visit_keys = []\n  visit_vals = []\n  t.equals(u.forEach(function(k,v) {\n    if(k === 5) {\n      return 1000\n    }\n    visit_keys.push(k)\n    visit_vals.push(v)\n  }), 1000)\n  t.same(visit_keys, u.keys.slice(0, 5))\n  t.same(visit_vals, u.values.slice(0, 5))\n\n  //Check half interval foreach\n  visit_keys = []\n  visit_vals = []\n  u.forEach(function(k,v) {\n    visit_keys.push(k)\n    visit_vals.push(v)\n  }, 3)\n  t.same(visit_keys, u.keys.slice(3))\n  t.same(visit_vals, u.values.slice(3))\n\n  //Check half interval foreach with termination\n  visit_keys = []\n  visit_vals = []\n  t.equals(u.forEach(function(k,v) {\n    if(k === 12) {\n      return 1000\n    }\n    visit_keys.push(k)\n    visit_vals.push(v)\n  }, 3), 1000)\n  t.same(visit_keys, u.keys.slice(3, 12))\n  t.same(visit_vals, u.values.slice(3, 12))\n\n\n  //Check interval foreach\n  visit_keys = []\n  visit_vals = []\n  u.forEach(function(k,v) {\n    visit_keys.push(k)\n    visit_vals.push(v)\n  }, 3, 15)\n  t.same(visit_keys, u.keys.slice(3, 15))\n  t.same(visit_vals, u.values.slice(3, 15))\n\n  //Check interval foreach with termination\n  visit_keys = []\n  visit_vals = []\n  t.equals(u.forEach(function(k,v) {\n    if(k === 12) {\n      return 1000\n    }\n    visit_keys.push(k)\n    visit_vals.push(v)\n  }, 3, 15), 1000)\n  t.same(visit_keys, u.keys.slice(3, 12))\n  t.same(visit_vals, u.values.slice(3, 12))\n\n  t.end()\n})\n\nfunction compareIterators(a, b, t) {\n  t.equals(a.tree, b.tree, \"iter trees\")\n  t.equals(a.valid, b.valid, \"iter validity\")\n  if(!b.valid) {\n    return\n  }\n  t.equals(a.node, b.node, \"iter node\")\n  t.equals(a.key, b.key, \"iter key\")\n  t.equals(a.value, b.value, \"iter value\")\n  t.equals(a.index, b.index, \"iter index\")\n}\n\ntape(\"iterators\", function(t) {\n  var u = iota(20).reduce(function(u, k, v) {\n    return u.insert(k, v)\n  }, makeTree())\n\n  //Try walking forward\n  var iter = u.begin\n  var c = iter.clone()\n  t.ok(iter.hasNext, \"must have next at beginneing\")\n  t.ok(!iter.hasPrev, \"must not have predecessor\")\n  for(var i=0; i<20; ++i) {\n    var v = u.at(i)\n    compareIterators(iter, v, t)\n    t.equals(iter.index, i)\n    iter.next()\n  }\n  t.ok(!iter.valid, \"must be eof iterator\")\n\n  //Check if the clone worked\n  compareIterators(c, u.begin, t)\n\n  //Try walking backward\n  var iter = u.end\n  t.ok(!iter.hasNext, \"must not have next\")\n  t.ok(iter.hasPrev, \"must have predecessor\")\n  for(var i=19; i>=0; --i) {\n    var v = u.at(i)\n    compareIterators(iter, v, t)\n    t.equals(iter.index, i)\n    iter.prev()\n  }\n  t.ok(!iter.valid, \"must be eof iterator\")\n\n  t.end()\n})\n\n\ntape(\"remove()\", function(t) {\n\n  var sz = [1, 2,  10, 20, 23, 31, 32, 33]\n  for(var n=0; n<sz.length; ++n) {\n    var c = sz[n]\n    var u = iota(c).reduce(function(u, k, v) {\n      return u.insert(k, v)\n    }, makeTree())\n    for(var i=0; i<c; ++i) {\n      checkTree(u.remove(i), t)\n    }\n  }\n\n  t.end()\n})\n\ntape(\"update()\", function(t) {\n  var arr = [0, 1, 2, 3, 4, 5, 6 ]\n  var u = arr.reduce(function(u, k, v) {\n    return u.insert(k, v)\n  }, makeTree())\n  for(var iter=u.begin; iter.hasNext; iter.next()) {\n    var p = iter.value\n    var updated = iter.update(1000)\n    t.equals(iter.value, iter.key, \"ensure no mutation\")\n    t.equals(updated.find(iter.key).value, 1000, \"ensure update applied\")\n    checkTree(updated, t)\n    checkTree(u, t)\n  }\n  t.end()\n})\n\n\ntape(\"keys and values\", function(t) {\n\n  var original_keys = [ \"potato\", \"sock\", \"foot\", \"apple\", \"newspaper\", \"gameboy\" ]\n  var original_values = [ 42, 10, false, \"!!!\", {}, null ]\n\n  var u = makeTree()\n  for(var i=0; i<original_keys.length; ++i) {\n    u = u.insert(original_keys[i], original_values[i])\n  }\n\n  var zipped = iota(6).map(function(i) {\n    return [ original_keys[i], original_values[i] ]\n  })\n\n  zipped.sort(function(a,b) {\n    if(a[0] < b[0]) { return -1 }\n    if(a[0] > b[0]) { return 1 }\n    return 0\n  })\n\n  var keys = zipped.map(function(v) { return v[0] })\n  var values = zipped.map(function(v) { return v[1] })\n\n  t.same(u.keys, keys)\n  t.same(u.values, values)\n\n  t.end()\n})\n\ntape(\"searching\", function(t) {\n\n  var arr = [0, 1, 1, 1, 1, 2, 3, 4, 5, 6, 6 ]\n  var u = arr.reduce(function(u, k, v) {\n    return u.insert(k, v)\n  }, makeTree())\n\n\n  for(var i=0; i<arr.length; ++i) {\n    if(arr[i] !== arr[i-1] && arr[i] !== arr[i+1]) {\n      t.equals(u.get(arr[i]), i, \"get \" + arr[i])\n    }\n  }\n  t.equals(u.get(-1), undefined, \"get missing\")\n\n  t.equals(u.ge(3).index, 6, \"ge simple\")\n  t.equals(u.ge(0.9).index, 1, \"ge run start\")\n  t.equals(u.ge(1).index, 1, \"ge run mid\")\n  t.equals(u.ge(1.1).index, 5, \"ge run end\")\n  t.equals(u.ge(0).index, 0, \"ge first\")\n  t.equals(u.ge(6).index, 9, \"ge last\")\n  t.equals(u.ge(100).valid, false, \"ge big\")\n  t.equals(u.ge(-1).index, 0, \"ge small\")\n\n  t.equals(u.gt(3).index, 7, \"gt simple\")\n  t.equals(u.gt(0.9).index, 1, \"gt run start\")\n  t.equals(u.gt(1).index, 5, \"gt run mid\")\n  t.equals(u.gt(1.1).index, 5, \"gt run end\")\n  t.equals(u.gt(0).index, 1, \"gt first\")\n  t.equals(u.gt(6).valid, false, \"gt last\")\n  t.equals(u.gt(100).valid, false, \"gt big\")\n  t.equals(u.gt(-1).index, 0, \"ge small\")\n\n  t.equals(u.le(3).index, 6, \"le simple\")\n  t.equals(u.le(0.9).index, 0, \"le run start\")\n  t.equals(u.le(1).index, 4, \"le run mid\")\n  t.equals(u.le(1.1).index, 4, \"le run end\")\n  t.equals(u.le(0).index, 0, \"le first\")\n  t.equals(u.le(6).index, 10, \"le last\")\n  t.equals(u.le(100).index, 10, \"le big\")\n  t.equals(u.le(-1).valid, false, \"le small\")\n  \n  t.equals(u.lt(3).index, 5, \"lt simple\")\n  t.equals(u.lt(0.9).index, 0, \"lt run start\")\n  t.equals(u.lt(1).index, 0, \"lt run mid\")\n  t.equals(u.lt(1.1).index, 4, \"lt run end\")\n  t.equals(u.lt(0).valid, false, \"lt first\")\n  t.equals(u.lt(6).index, 8, \"lt last\")\n  t.equals(u.lt(100).index, 10, \"lt big\")\n  t.equals(u.lt(-1).valid, false, \"lt small\")\n\n  t.equals(u.find(-1).valid, false, \"find missing small\")\n  t.equals(u.find(10000).valid, false, \"find missing big\")\n  t.equals(u.find(3).index, 6, \"find simple\")\n  t.ok(u.find(1).index > 0, \"find repeat\")\n  t.ok(u.find(1).index < 5, \"find repeat\")\n  \n  for(var i=0; i<arr.length; ++i) {\n    t.equals(u.find(arr[i]).key, arr[i], \"find \" + i)\n  }\n\n  for(var i=0; i<arr.length; ++i) {\n    t.equals(u.at(i).key, arr[i], \"at \" + i)\n  }\n  t.equals(u.at(-1).valid, false, \"at missing small\")\n  t.equals(u.at(1000).valid, false, \"at missing big\")\n\n\n  t.end()\n})\n\ntape(\"slab-sequence\", function(t) {\n\n  var tree = makeTree()\n\n  tree=tree.insert(0, 0)\n  checkTree(tree, t)\n  t.same(tree.values, [0])\n\n  tree=tree.insert(1, 1)\n  checkTree(tree, t)\n  t.same(tree.values, [0,1])\n\n  tree=tree.insert(0.5, 2)\n  checkTree(tree, t)\n  t.same(tree.values, [0,2,1])\n\n  tree=tree.insert(0.25, 3)\n  checkTree(tree, t)\n  t.same(tree.values, [0,3,2,1])\n\n  tree=tree.remove(0)\n  checkTree(tree, t)\n  t.same(tree.values, [3,2,1])\n\n  tree=tree.insert(0.375, 4)\n  checkTree(tree, t)\n  t.same(tree.values, [3, 4, 2, 1])\n\n  tree=tree.remove(1)\n  checkTree(tree, t)\n  t.same(tree.values, [3,4,2])\n  \n  tree=tree.remove(0.5)\n  checkTree(tree, t)\n  t.same(tree.values, [3,4])\n\n  tree=tree.remove(0.375)\n  checkTree(tree, t)\n  t.same(tree.values, [3])\n\n  tree=tree.remove(0.25)\n  checkTree(tree, t)\n  t.same(tree.values, [])\n  \n  t.end()\n})\n\ntape(\"slab-sequence-2\", function(t) {\n\n  var u = makeTree()\n\n  u=u.insert( 12 , 22 )\n  u=u.insert( 11 , 3 )\n  u=u.insert( 10 , 28 )\n  u=u.insert( 13 , 16 )\n  u=u.insert( 9 , 9 )\n  u=u.insert( 14 , 10 )\n  u=u.insert( 8 , 15 )\n  u=u.insert( 15 , 29 )\n  u=u.insert( 16 , 4 )\n  u=u.insert( 7 , 21 )\n  u=u.insert( 17 , 23 )\n  u=u.insert( 6 , 2 )\n  u=u.insert( 5 , 27 )\n  u=u.insert( 18 , 17 )\n  u=u.insert( 4 , 8 )\n  u=u.insert( 31 , 11 )\n  u=u.insert( 30 , 30 )\n  u=u.insert( 29 , 5 )\n  u=u.insert( 28 , 24 )\n  u=u.insert( 27 , 18 )\n  u=u.insert( 26 , 12 )\n  u=u.insert( 25 , 31 )\n  u=u.insert( 24 , 6 )\n  u=u.insert( 23 , 25 )\n  u=u.insert( 19 , 7 )\n  u=u.insert( 20 , 13 )\n  u=u.insert( 1 , 20 )\n  u=u.insert( 0 , 14 )\n  u=u.insert( 22 , 0 )\n  u=u.insert( 2 , 1 )\n  u=u.insert( 3 , 26 )\n  u=u.insert( 21 , 19 )\n  u=u.remove( 18 , 17 )\n  u=u.remove( 17 , 23 )\n  u=u.remove( 16 , 4 )\n  u=u.remove( 15 , 29 )\n  u=u.remove( 14 , 10 )\n  u=u.remove( 13 , 16 )\n  u=u.remove( 12 , 22 )\n  u=u.remove( 6 , 2 )\n  u=u.remove( 7 , 21 )\n  u=u.remove( 8 , 15 )\n  u=u.remove( 11 , 3 )\n  u=u.remove( 4 , 8 )\n  u=u.remove( 9 , 9 )\n  u=u.remove( 10 , 28 )\n  u=u.remove( 5 , 27 )\n  u=u.remove( 31 , 11 )\n  u=u.remove( 0 , 14 )\n  u=u.remove( 30 , 30 )\n  u=u.remove( 29 , 5 )\n  u=u.remove( 1 , 20 )\n  u=u.remove( 28 , 24 )\n  u=u.remove( 2 , 1 )\n  u=u.remove( 3 , 26 )\n  u=u.remove( 27 , 18 )\n  u=u.remove( 19 , 7 )\n  u=u.remove( 26 , 12 )\n  u=u.remove( 20 , 13 )\n  u=u.remove( 25 , 31 )\n  u=u.remove( 24 , 6 )\n  u=u.remove( 21 , 19 )\n  u=u.remove( 23 , 25 )\n  u=u.remove( 22 , 0 )\n\n  t.end()\n})\n/package.json\u0003 {\n  \"name\": \"functional-red-black-tree\",\n  \"version\": \"1.0.1\",\n  \"description\": \"A fully persistent balanced binary search tree\",\n  \"main\": \"rbtree.js\",\n  \"directories\": {\n    \"test\": \"test\"\n  },\n  \"dependencies\": {},\n  \"devDependencies\": {\n    \"iota-array\": \"^0.0.1\",\n    \"tape\": \"^2.12.0\"\n  },\n  \"scripts\": {\n    \"test\": \"tape test/*.js\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git://github.com/mikolalysenko/functional-red-black-tree.git\"\n  },\n  \"keywords\": [\n    \"functional\",\n    \"red\",\n    \"black\",\n    \"tree\",\n    \"binary\",\n    \"search\",\n    \"balance\",\n    \"persistent\",\n    \"fully\",\n    \"dynamic\",\n    \"data\",\n    \"structure\"\n  ],\n  \"author\": \"Mikola Lysenko\",\n  \"license\": \"MIT\",\n  \"bugs\": {\n    \"url\": \"https://github.com/mikolalysenko/functional-red-black-tree/issues\"\n  }\n}\n/README.md\u001bfunctional-red-black-tree\n=========================\nA [fully persistent](http://en.wikipedia.org/wiki/Persistent_data_structure) [red-black tree](http://en.wikipedia.org/wiki/Red%E2%80%93black_tree) written 100% in JavaScript.  Works both in node.js and in the browser via [browserify](http://browserify.org/).\n\nFunctional (or fully presistent) data structures allow for non-destructive updates.  So if you insert an element into the tree, it returns a new tree with the inserted element rather than destructively updating the existing tree in place.  Doing this requires using extra memory, and if one were naive it could cost as much as reallocating the entire tree.  Instead, this data structure saves some memory by recycling references to previously allocated subtrees.  This requires using only O(log(n)) additional memory per update instead of a full O(n) copy.\n\nSome advantages of this is that it is possible to apply insertions and removals to the tree while still iterating over previous versions of the tree.  Functional and persistent data structures can also be useful in many geometric algorithms like point location within triangulations or ray queries, and can be used to analyze the history of executing various algorithms.  This added power though comes at a cost, since it is generally a bit slower to use a functional data structure than an imperative version.  However, if your application needs this behavior then you may consider using this module.\n\n# Install\n\n    npm install functional-red-black-tree\n\n# Example\n\nHere is an example of some basic usage:\n\n```javascript\n//Load the library\nvar createTree = require(\"functional-red-black-tree\")\n\n//Create a tree\nvar t1 = createTree()\n\n//Insert some items into the tree\nvar t2 = t1.insert(1, \"foo\")\nvar t3 = t2.insert(2, \"bar\")\n\n//Remove something\nvar t4 = t3.remove(1)\n```\n\n\n# API\n\n```javascript\nvar createTree = require(\"functional-red-black-tree\")\n```\n\n## Overview\n\n- [Tree methods](#tree-methods)\n  - [`var tree = createTree([compare])`](#var-tree-=-createtreecompare)\n  - [`tree.keys`](#treekeys)\n  - [`tree.values`](#treevalues)\n  - [`tree.length`](#treelength)\n  - [`tree.get(key)`](#treegetkey)\n  - [`tree.insert(key, value)`](#treeinsertkey-value)\n  - [`tree.remove(key)`](#treeremovekey)\n  - [`tree.find(key)`](#treefindkey)\n  - [`tree.ge(key)`](#treegekey)\n  - [`tree.gt(key)`](#treegtkey)\n  - [`tree.lt(key)`](#treeltkey)\n  - [`tree.le(key)`](#treelekey)\n  - [`tree.at(position)`](#treeatposition)\n  - [`tree.begin`](#treebegin)\n  - [`tree.end`](#treeend)\n  - [`tree.forEach(visitor(key,value)[, lo[, hi]])`](#treeforEachvisitorkeyvalue-lo-hi)\n  - [`tree.root`](#treeroot)\n- [Node properties](#node-properties)\n  - [`node.key`](#nodekey)\n  - [`node.value`](#nodevalue)\n  - [`node.left`](#nodeleft)\n  - [`node.right`](#noderight)\n- [Iterator methods](#iterator-methods)\n  - [`iter.key`](#iterkey)\n  - [`iter.value`](#itervalue)\n  - [`iter.node`](#iternode)\n  - [`iter.tree`](#itertree)\n  - [`iter.index`](#iterindex)\n  - [`iter.valid`](#itervalid)\n  - [`iter.clone()`](#iterclone)\n  - [`iter.remove()`](#iterremove)\n  - [`iter.update(value)`](#iterupdatevalue)\n  - [`iter.next()`](#iternext)\n  - [`iter.prev()`](#iterprev)\n  - [`iter.hasNext`](#iterhasnext)\n  - [`iter.hasPrev`](#iterhasprev)\n\n## Tree methods\n\n### `var tree = createTree([compare])`\nCreates an empty functional tree\n\n* `compare` is an optional comparison function, same semantics as array.sort()\n\n**Returns** An empty tree ordered by `compare`\n\n### `tree.keys`\nA sorted array of all the keys in the tree\n\n### `tree.values`\nAn array array of all the values in the tree\n\n### `tree.length`\nThe number of items in the tree\n\n### `tree.get(key)`\nRetrieves the value associated to the given key\n\n* `key` is the key of the item to look up\n\n**Returns** The value of the first node associated to `key`\n\n### `tree.insert(key, value)`\nCreates a new tree with the new pair inserted.\n\n* `key` is the key of the item to insert\n* `value` is the value of the item to insert\n\n**Returns** A new tree with `key` and `value` inserted\n\n### `tree.remove(key)`\nRemoves the first item with `key` in the tree\n\n* `key` is the key of the item to remove\n\n**Returns** A new tree with the given item removed if it exists\n\n### `tree.find(key)`\nReturns an iterator pointing to the first item in the tree with `key`, otherwise `null`.\n\n### `tree.ge(key)`\nFind the first item in the tree whose key is `>= key`\n\n* `key` is the key to search for\n\n**Returns** An iterator at the given element.\n\n### `tree.gt(key)`\nFinds the first item in the tree whose key is `> key`\n\n* `key` is the key to search for\n\n**Returns** An iterator at the given element\n\n### `tree.lt(key)`\nFinds the last item in the tree whose key is `< key`\n\n* `key` is the key to search for\n\n**Returns** An iterator at the given element\n\n### `tree.le(key)`\nFinds the last item in the tree whose key is `<= key`\n\n* `key` is the key to search for\n\n**Returns** An iterator at the given element\n\n### `tree.at(position)`\nFinds an iterator starting at the given element\n\n* `position` is the index at which the iterator gets created\n\n**Returns** An iterator starting at position\n\n### `tree.begin`\nAn iterator pointing to the first element in the tree\n\n### `tree.end`\nAn iterator pointing to the last element in the tree\n\n### `tree.forEach(visitor(key,value)[, lo[, hi]])`\nWalks a visitor function over the nodes of the tree in order.\n\n* `visitor(key,value)` is a callback that gets executed on each node.  If a truthy value is returned from the visitor, then iteration is stopped.\n* `lo` is an optional start of the range to visit (inclusive)\n* `hi` is an optional end of the range to visit (non-inclusive)\n\n**Returns** The last value returned by the callback\n\n### `tree.root`\nReturns the root node of the tree\n\n\n## Node properties\nEach node of the tree has the following properties:\n\n### `node.key`\nThe key associated to the node\n\n### `node.value`\nThe value associated to the node\n\n### `node.left`\nThe left subtree of the node\n\n### `node.right`\nThe right subtree of the node\n\n## Iterator methods\n\n### `iter.key`\nThe key of the item referenced by the iterator\n\n### `iter.value`\nThe value of the item referenced by the iterator\n\n### `iter.node`\nThe value of the node at the iterator's current position.  `null` is iterator is node valid.\n\n### `iter.tree`\nThe tree associated to the iterator\n\n### `iter.index`\nReturns the position of this iterator in the sequence.\n\n### `iter.valid`\nChecks if the iterator is valid\n\n### `iter.clone()`\nMakes a copy of the iterator\n\n### `iter.remove()`\nRemoves the item at the position of the iterator\n\n**Returns** A new binary search tree with `iter`'s item removed\n\n### `iter.update(value)`\nUpdates the value of the node in the tree at this iterator\n\n**Returns** A new binary search tree with the corresponding node updated\n\n### `iter.next()`\nAdvances the iterator to the next position\n\n### `iter.prev()`\nMoves the iterator backward one element\n\n### `iter.hasNext`\nIf true, then the iterator is not at the end of the sequence\n\n### `iter.hasPrev`\nIf true, then the iterator is not at the beginning of the sequence\n\n# Credits\n(c) 2013 Mikola Lysenko. MIT License/LICENSE\u0004:\nThe MIT License (MIT)\n\nCopyright (c) 2013 Mikola Lysenko\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/a2luZC1vZkA2LjAuMw==",
    "content": "/CHANGELOG.md\u0011# Release history\n\nAll notable changes to this project will be documented in this file.\n\nThe format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)\nand this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).\n\n<details>\n  <summary><strong>Guiding Principles</strong></summary>\n\n- Changelogs are for humans, not machines.\n- There should be an entry for every single version.\n- The same types of changes should be grouped.\n- Versions and sections should be linkable.\n- The latest version comes first.\n- The release date of each versions is displayed.\n- Mention whether you follow Semantic Versioning.\n\n</details>\n\n<details>\n  <summary><strong>Types of changes</strong></summary>\n\nChangelog entries are classified using the following labels _(from [keep-a-changelog](http://keepachangelog.com/)_):\n\n- `Added` for new features.\n- `Changed` for changes in existing functionality.\n- `Deprecated` for soon-to-be removed features.\n- `Removed` for now removed features.\n- `Fixed` for any bug fixes.\n- `Security` in case of vulnerabilities.\n\n</details>\n\n## [6.0.3] - 2020-01-16\n\n- Merge pull request #31 for issue #30\n\n## [6.0.0] - 2017-10-13\n\n- refactor code to be more performant\n- refactor benchmarks\n\n## [5.1.0] - 2017-10-13\n\n**Added**\n\n- Merge pull request #15 from aretecode/patch-1\n- adds support and tests for string & array iterators\n\n**Changed**\n\n- updates benchmarks\n\n## [5.0.2] - 2017-08-02\n\n- Merge pull request #14 from struct78/master\n- Added `undefined` check\n\n## [5.0.0] - 2017-06-21\n\n- Merge pull request #12 from aretecode/iterator\n- Set Iterator + Map Iterator\n- streamline `isbuffer`, minor edits\n\n## [4.0.0] - 2017-05-19\n\n- Merge pull request #8 from tunnckoCore/master\n- update deps\n\n## [3.2.2] - 2017-05-16\n\n- fix version\n\n## [3.2.1] - 2017-05-16\n\n- add browserify\n\n## [3.2.0] - 2017-04-25\n\n- Merge pull request #10 from ksheedlo/unrequire-buffer\n- add `promise` support and tests\n- Remove unnecessary `Buffer` check\n\n## [3.1.0] - 2016-12-07\n\n- Merge pull request #7 from laggingreflex/err\n- add support for `error` and tests\n- run update\n\n## [3.0.4] - 2016-07-29\n\n- move tests\n- run update\n\n## [3.0.3] - 2016-05-03\n\n- fix prepublish script\n- remove unused dep\n\n## [3.0.0] - 2015-11-17\n\n- add typed array support\n- Merge pull request #5 from miguelmota/typed-arrays\n- adds new tests\n\n## [2.0.1] - 2015-08-21\n\n- use `is-buffer` module\n\n## [2.0.0] - 2015-05-31\n\n- Create fallback for `Array.isArray` if used as a browser package\n- Merge pull request #2 from dtothefp/patch-1\n- Merge pull request #3 from pdehaan/patch-1\n- Merge branch 'master' of https://github.com/chorks/kind-of into chorks-master\n- optimizations, mostly date and regex\n\n## [1.1.0] - 2015-02-09\n\n- adds `buffer` support\n- adds tests for `buffer`\n\n## [1.0.0] - 2015-01-19\n\n- update benchmarks\n- optimizations based on benchmarks\n\n## [0.1.2] - 2014-10-26\n\n- return `typeof` value if it's not an object. very slight speed improvement\n- use `.slice`\n- adds benchmarks\n\n## [0.1.0] - 2014-9-26\n\n- first commit\n\n[6.0.0]: https://github.com/jonschlinkert/kind-of/compare/5.1.0...6.0.0\n[5.1.0]: https://github.com/jonschlinkert/kind-of/compare/5.0.2...5.1.0\n[5.0.2]: https://github.com/jonschlinkert/kind-of/compare/5.0.1...5.0.2\n[5.0.1]: https://github.com/jonschlinkert/kind-of/compare/5.0.0...5.0.1\n[5.0.0]: https://github.com/jonschlinkert/kind-of/compare/4.0.0...5.0.0\n[4.0.0]: https://github.com/jonschlinkert/kind-of/compare/3.2.2...4.0.0\n[3.2.2]: https://github.com/jonschlinkert/kind-of/compare/3.2.1...3.2.2\n[3.2.1]: https://github.com/jonschlinkert/kind-of/compare/3.2.0...3.2.1\n[3.2.0]: https://github.com/jonschlinkert/kind-of/compare/3.1.0...3.2.0\n[3.1.0]: https://github.com/jonschlinkert/kind-of/compare/3.0.4...3.1.0\n[3.0.4]: https://github.com/jonschlinkert/kind-of/compare/3.0.3...3.0.4\n[3.0.3]: https://github.com/jonschlinkert/kind-of/compare/3.0.0...3.0.3\n[3.0.0]: https://github.com/jonschlinkert/kind-of/compare/2.0.1...3.0.0\n[2.0.1]: https://github.com/jonschlinkert/kind-of/compare/2.0.0...2.0.1\n[2.0.0]: https://github.com/jonschlinkert/kind-of/compare/1.1.0...2.0.0\n[1.1.0]: https://github.com/jonschlinkert/kind-of/compare/1.0.0...1.1.0\n[1.0.0]: https://github.com/jonschlinkert/kind-of/compare/0.1.2...1.0.0\n[0.1.2]: https://github.com/jonschlinkert/kind-of/compare/0.1.0...0.1.2\n[0.1.0]: https://github.com/jonschlinkert/kind-of/commit/2fae09b0b19b1aadb558e9be39f0c3ef6034eb87\n\n[Unreleased]: https://github.com/jonschlinkert/kind-of/compare/0.1.2...HEAD\n[keep-a-changelog]: https://github.com/olivierlacan/keep-a-changelog/index.js\rvar toString = Object.prototype.toString;\n\nmodule.exports = function kindOf(val) {\n  if (val === void 0) return 'undefined';\n  if (val === null) return 'null';\n\n  var type = typeof val;\n  if (type === 'boolean') return 'boolean';\n  if (type === 'string') return 'string';\n  if (type === 'number') return 'number';\n  if (type === 'symbol') return 'symbol';\n  if (type === 'function') {\n    return isGeneratorFn(val) ? 'generatorfunction' : 'function';\n  }\n\n  if (isArray(val)) return 'array';\n  if (isBuffer(val)) return 'buffer';\n  if (isArguments(val)) return 'arguments';\n  if (isDate(val)) return 'date';\n  if (isError(val)) return 'error';\n  if (isRegexp(val)) return 'regexp';\n\n  switch (ctorName(val)) {\n    case 'Symbol': return 'symbol';\n    case 'Promise': return 'promise';\n\n    // Set, Map, WeakSet, WeakMap\n    case 'WeakMap': return 'weakmap';\n    case 'WeakSet': return 'weakset';\n    case 'Map': return 'map';\n    case 'Set': return 'set';\n\n    // 8-bit typed arrays\n    case 'Int8Array': return 'int8array';\n    case 'Uint8Array': return 'uint8array';\n    case 'Uint8ClampedArray': return 'uint8clampedarray';\n\n    // 16-bit typed arrays\n    case 'Int16Array': return 'int16array';\n    case 'Uint16Array': return 'uint16array';\n\n    // 32-bit typed arrays\n    case 'Int32Array': return 'int32array';\n    case 'Uint32Array': return 'uint32array';\n    case 'Float32Array': return 'float32array';\n    case 'Float64Array': return 'float64array';\n  }\n\n  if (isGeneratorObj(val)) {\n    return 'generator';\n  }\n\n  // Non-plain objects\n  type = toString.call(val);\n  switch (type) {\n    case '[object Object]': return 'object';\n    // iterators\n    case '[object Map Iterator]': return 'mapiterator';\n    case '[object Set Iterator]': return 'setiterator';\n    case '[object String Iterator]': return 'stringiterator';\n    case '[object Array Iterator]': return 'arrayiterator';\n  }\n\n  // other\n  return type.slice(8, -1).toLowerCase().replace(/\\s/g, '');\n};\n\nfunction ctorName(val) {\n  return typeof val.constructor === 'function' ? val.constructor.name : null;\n}\n\nfunction isArray(val) {\n  if (Array.isArray) return Array.isArray(val);\n  return val instanceof Array;\n}\n\nfunction isError(val) {\n  return val instanceof Error || (typeof val.message === 'string' && val.constructor && typeof val.constructor.stackTraceLimit === 'number');\n}\n\nfunction isDate(val) {\n  if (val instanceof Date) return true;\n  return typeof val.toDateString === 'function'\n    && typeof val.getDate === 'function'\n    && typeof val.setDate === 'function';\n}\n\nfunction isRegexp(val) {\n  if (val instanceof RegExp) return true;\n  return typeof val.flags === 'string'\n    && typeof val.ignoreCase === 'boolean'\n    && typeof val.multiline === 'boolean'\n    && typeof val.global === 'boolean';\n}\n\nfunction isGeneratorFn(name, val) {\n  return ctorName(name) === 'GeneratorFunction';\n}\n\nfunction isGeneratorObj(val) {\n  return typeof val.throw === 'function'\n    && typeof val.return === 'function'\n    && typeof val.next === 'function';\n}\n\nfunction isArguments(val) {\n  try {\n    if (typeof val.length === 'number' && typeof val.callee === 'function') {\n      return true;\n    }\n  } catch (err) {\n    if (err.message.indexOf('callee') !== -1) {\n      return true;\n    }\n  }\n  return false;\n}\n\n/**\n * If you need to support Safari 5-7 (8-10 yr-old browser),\n * take a look at https://github.com/feross/is-buffer\n */\n\nfunction isBuffer(val) {\n  if (val.constructor && typeof val.constructor.isBuffer === 'function') {\n    return val.constructor.isBuffer(val);\n  }\n  return false;\n}\n/README.md-# kind-of [![NPM version](https://img.shields.io/npm/v/kind-of.svg?style=flat)](https://www.npmjs.com/package/kind-of) [![NPM monthly downloads](https://img.shields.io/npm/dm/kind-of.svg?style=flat)](https://npmjs.org/package/kind-of) [![NPM total downloads](https://img.shields.io/npm/dt/kind-of.svg?style=flat)](https://npmjs.org/package/kind-of) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/kind-of.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/kind-of)\n\n> Get the native type of a value.\n\nPlease consider following this project's author, [Jon Schlinkert](https://github.com/jonschlinkert), and consider starring the project to show your :heart: and support.\n\n## Install\n\nInstall with [npm](https://www.npmjs.com/):\n\n```sh\n$ npm install --save kind-of\n```\n\nInstall with [bower](https://bower.io/)\n\n```sh\n$ bower install kind-of --save\n```\n\n## Why use this?\n\n1. [it's fast](#benchmarks) | [optimizations](#optimizations)\n2. [better type checking](#better-type-checking)\n\n## Usage\n\n> es5, es6, and browser ready\n\n```js\nvar kindOf = require('kind-of');\n\nkindOf(undefined);\n//=> 'undefined'\n\nkindOf(null);\n//=> 'null'\n\nkindOf(true);\n//=> 'boolean'\n\nkindOf(false);\n//=> 'boolean'\n\nkindOf(new Buffer(''));\n//=> 'buffer'\n\nkindOf(42);\n//=> 'number'\n\nkindOf('str');\n//=> 'string'\n\nkindOf(arguments);\n//=> 'arguments'\n\nkindOf({});\n//=> 'object'\n\nkindOf(Object.create(null));\n//=> 'object'\n\nkindOf(new Test());\n//=> 'object'\n\nkindOf(new Date());\n//=> 'date'\n\nkindOf([1, 2, 3]);\n//=> 'array'\n\nkindOf(/foo/);\n//=> 'regexp'\n\nkindOf(new RegExp('foo'));\n//=> 'regexp'\n\nkindOf(new Error('error'));\n//=> 'error'\n\nkindOf(function () {});\n//=> 'function'\n\nkindOf(function * () {});\n//=> 'generatorfunction'\n\nkindOf(Symbol('str'));\n//=> 'symbol'\n\nkindOf(new Map());\n//=> 'map'\n\nkindOf(new WeakMap());\n//=> 'weakmap'\n\nkindOf(new Set());\n//=> 'set'\n\nkindOf(new WeakSet());\n//=> 'weakset'\n\nkindOf(new Int8Array());\n//=> 'int8array'\n\nkindOf(new Uint8Array());\n//=> 'uint8array'\n\nkindOf(new Uint8ClampedArray());\n//=> 'uint8clampedarray'\n\nkindOf(new Int16Array());\n//=> 'int16array'\n\nkindOf(new Uint16Array());\n//=> 'uint16array'\n\nkindOf(new Int32Array());\n//=> 'int32array'\n\nkindOf(new Uint32Array());\n//=> 'uint32array'\n\nkindOf(new Float32Array());\n//=> 'float32array'\n\nkindOf(new Float64Array());\n//=> 'float64array'\n```\n\n## Benchmarks\n\nBenchmarked against [typeof](http://github.com/CodingFu/typeof) and [type-of](https://github.com/ForbesLindesay/type-of).\n\n```bash\n# arguments (32 bytes)\n  kind-of x 17,024,098 ops/sec ±1.90% (86 runs sampled)\n  lib-type-of x 11,926,235 ops/sec ±1.34% (83 runs sampled)\n  lib-typeof x 9,245,257 ops/sec ±1.22% (87 runs sampled)\n\n  fastest is kind-of (by 161% avg)\n\n# array (22 bytes)\n  kind-of x 17,196,492 ops/sec ±1.07% (88 runs sampled)\n  lib-type-of x 8,838,283 ops/sec ±1.02% (87 runs sampled)\n  lib-typeof x 8,677,848 ops/sec ±0.87% (87 runs sampled)\n\n  fastest is kind-of (by 196% avg)\n\n# boolean (24 bytes)\n  kind-of x 16,841,600 ops/sec ±1.10% (86 runs sampled)\n  lib-type-of x 8,096,787 ops/sec ±0.95% (87 runs sampled)\n  lib-typeof x 8,423,345 ops/sec ±1.15% (86 runs sampled)\n\n  fastest is kind-of (by 204% avg)\n\n# buffer (38 bytes)\n  kind-of x 14,848,060 ops/sec ±1.05% (86 runs sampled)\n  lib-type-of x 3,671,577 ops/sec ±1.49% (87 runs sampled)\n  lib-typeof x 8,360,236 ops/sec ±1.24% (86 runs sampled)\n\n  fastest is kind-of (by 247% avg)\n\n# date (30 bytes)\n  kind-of x 16,067,761 ops/sec ±1.58% (86 runs sampled)\n  lib-type-of x 8,954,436 ops/sec ±1.40% (87 runs sampled)\n  lib-typeof x 8,488,307 ops/sec ±1.51% (84 runs sampled)\n\n  fastest is kind-of (by 184% avg)\n\n# error (36 bytes)\n  kind-of x 9,634,090 ops/sec ±1.12% (89 runs sampled)\n  lib-type-of x 7,735,624 ops/sec ±1.32% (86 runs sampled)\n  lib-typeof x 7,442,160 ops/sec ±1.11% (90 runs sampled)\n\n  fastest is kind-of (by 127% avg)\n\n# function (34 bytes)\n  kind-of x 10,031,494 ops/sec ±1.27% (86 runs sampled)\n  lib-type-of x 9,502,757 ops/sec ±1.17% (89 runs sampled)\n  lib-typeof x 8,278,985 ops/sec ±1.08% (88 runs sampled)\n\n  fastest is kind-of (by 113% avg)\n\n# null (24 bytes)\n  kind-of x 18,159,808 ops/sec ±1.92% (86 runs sampled)\n  lib-type-of x 12,927,635 ops/sec ±1.01% (88 runs sampled)\n  lib-typeof x 7,958,234 ops/sec ±1.21% (89 runs sampled)\n\n  fastest is kind-of (by 174% avg)\n\n# number (22 bytes)\n  kind-of x 17,846,779 ops/sec ±0.91% (85 runs sampled)\n  lib-type-of x 3,316,636 ops/sec ±1.19% (86 runs sampled)\n  lib-typeof x 2,329,477 ops/sec ±2.21% (85 runs sampled)\n\n  fastest is kind-of (by 632% avg)\n\n# object-plain (47 bytes)\n  kind-of x 7,085,155 ops/sec ±1.05% (88 runs sampled)\n  lib-type-of x 8,870,930 ops/sec ±1.06% (83 runs sampled)\n  lib-typeof x 8,716,024 ops/sec ±1.05% (87 runs sampled)\n\n  fastest is lib-type-of (by 112% avg)\n\n# regex (25 bytes)\n  kind-of x 14,196,052 ops/sec ±1.65% (84 runs sampled)\n  lib-type-of x 9,554,164 ops/sec ±1.25% (88 runs sampled)\n  lib-typeof x 8,359,691 ops/sec ±1.07% (87 runs sampled)\n\n  fastest is kind-of (by 158% avg)\n\n# string (33 bytes)\n  kind-of x 16,131,428 ops/sec ±1.41% (85 runs sampled)\n  lib-type-of x 7,273,172 ops/sec ±1.05% (87 runs sampled)\n  lib-typeof x 7,382,635 ops/sec ±1.17% (85 runs sampled)\n\n  fastest is kind-of (by 220% avg)\n\n# symbol (34 bytes)\n  kind-of x 17,011,537 ops/sec ±1.24% (86 runs sampled)\n  lib-type-of x 3,492,454 ops/sec ±1.23% (89 runs sampled)\n  lib-typeof x 7,471,235 ops/sec ±2.48% (87 runs sampled)\n\n  fastest is kind-of (by 310% avg)\n\n# template-strings (36 bytes)\n  kind-of x 15,434,250 ops/sec ±1.46% (83 runs sampled)\n  lib-type-of x 7,157,907 ops/sec ±0.97% (87 runs sampled)\n  lib-typeof x 7,517,986 ops/sec ±0.92% (86 runs sampled)\n\n  fastest is kind-of (by 210% avg)\n\n# undefined (29 bytes)\n  kind-of x 19,167,115 ops/sec ±1.71% (87 runs sampled)\n  lib-type-of x 15,477,740 ops/sec ±1.63% (85 runs sampled)\n  lib-typeof x 19,075,495 ops/sec ±1.17% (83 runs sampled)\n\n  fastest is lib-typeof,kind-of\n\n```\n\n## Optimizations\n\nIn 7 out of 8 cases, this library is 2x-10x faster than other top libraries included in the benchmarks. There are a few things that lead to this performance advantage, none of them hard and fast rules, but all of them simple and repeatable in almost any code library:\n\n1. Optimize around the fastest and most common use cases first. Of course, this will change from project-to-project, but I took some time to understand how and why `typeof` checks were being used in my own libraries and other libraries I use a lot.\n2. Optimize around bottlenecks - In other words, the order in which conditionals are implemented is significant, because each check is only as fast as the failing checks that came before it. Here, the biggest bottleneck by far is checking for plain objects (an object that was created by the `Object` constructor). I opted to make this check happen by process of elimination rather than brute force up front (e.g. by using something like `val.constructor.name`), so that every other type check would not be penalized it.\n3. Don't do uneccessary processing - why do `.slice(8, -1).toLowerCase();` just to get the word `regex`? It's much faster to do `if (type === '[object RegExp]') return 'regex'`\n4. There is no reason to make the code in a microlib as terse as possible, just to win points for making it shorter. It's always better to favor performant code over terse code. You will always only be using a single `require()` statement to use the library anyway, regardless of how the code is written.\n\n## Better type checking\n\nkind-of seems to be more consistently \"correct\" than other type checking libs I've looked at. For example, here are some differing results from other popular libs:\n\n### [typeof](https://github.com/CodingFu/typeof) lib\n\nIncorrectly identifies instances of custom constructors (pretty common):\n\n```js\nvar typeOf = require('typeof');\nfunction Test() {}\nconsole.log(typeOf(new Test()));\n//=> 'test'\n```\n\nReturns `object` instead of `arguments`:\n\n```js\nfunction foo() {\n  console.log(typeOf(arguments)) //=> 'object'\n}\nfoo();\n```\n\n### [type-of](https://github.com/ForbesLindesay/type-of) lib\n\nIncorrectly returns `object` for generator functions, buffers, `Map`, `Set`, `WeakMap` and `WeakSet`:\n\n```js\nfunction * foo() {}\nconsole.log(typeOf(foo));\n//=> 'object'\nconsole.log(typeOf(new Buffer('')));\n//=> 'object'\nconsole.log(typeOf(new Map()));\n//=> 'object'\nconsole.log(typeOf(new Set()));\n//=> 'object'\nconsole.log(typeOf(new WeakMap()));\n//=> 'object'\nconsole.log(typeOf(new WeakSet()));\n//=> 'object'\n```\n\n## About\n\n<details>\n<summary><strong>Contributing</strong></summary>\n\nPull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).\n\n</details>\n\n<details>\n<summary><strong>Running Tests</strong></summary>\n\nRunning and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:\n\n```sh\n$ npm install && npm test\n```\n\n</details>\n\n<details>\n<summary><strong>Building docs</strong></summary>\n\n_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_\n\nTo generate the readme, run the following command:\n\n```sh\n$ npm install -g verbose/verb#dev verb-generate-readme && verb\n```\n\n</details>\n\n### Related projects\n\nYou might also be interested in these projects:\n\n* [is-glob](https://www.npmjs.com/package/is-glob): Returns `true` if the given string looks like a glob pattern or an extglob pattern… [more](https://github.com/micromatch/is-glob) | [homepage](https://github.com/micromatch/is-glob \"Returns `true` if the given string looks like a glob pattern or an extglob pattern. This makes it easy to create code that only uses external modules like node-glob when necessary, resulting in much faster code execution and initialization time, and a bet\")\n* [is-number](https://www.npmjs.com/package/is-number): Returns true if a number or string value is a finite number. Useful for regex… [more](https://github.com/jonschlinkert/is-number) | [homepage](https://github.com/jonschlinkert/is-number \"Returns true if a number or string value is a finite number. Useful for regex matches, parsing, user input, etc.\")\n* [is-primitive](https://www.npmjs.com/package/is-primitive): Returns `true` if the value is a primitive.  | [homepage](https://github.com/jonschlinkert/is-primitive \"Returns `true` if the value is a primitive. \")\n\n### Contributors\n\n| **Commits** | **Contributor** |  \n| --- | --- |  \n| 102 | [jonschlinkert](https://github.com/jonschlinkert) |  \n| 3   | [aretecode](https://github.com/aretecode) |  \n| 2   | [miguelmota](https://github.com/miguelmota) |  \n| 1   | [doowb](https://github.com/doowb) |  \n| 1   | [dtothefp](https://github.com/dtothefp) |  \n| 1   | [ianstormtaylor](https://github.com/ianstormtaylor) |  \n| 1   | [ksheedlo](https://github.com/ksheedlo) |  \n| 1   | [pdehaan](https://github.com/pdehaan) |  \n| 1   | [laggingreflex](https://github.com/laggingreflex) |  \n| 1   | [tunnckoCore](https://github.com/tunnckoCore) |  \n| 1   | [xiaofen9](https://github.com/xiaofen9) |  \n\n### Author\n\n**Jon Schlinkert**\n\n* [GitHub Profile](https://github.com/jonschlinkert)\n* [Twitter Profile](https://twitter.com/jonschlinkert)\n* [LinkedIn Profile](https://linkedin.com/in/jonschlinkert)\n\n### License\n\nCopyright © 2020, [Jon Schlinkert](https://github.com/jonschlinkert).\nReleased under the [MIT License](LICENSE).\n\n***\n\n_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.8.0, on January 16, 2020._/package.json\u0007&{\n  \"name\": \"kind-of\",\n  \"description\": \"Get the native type of a value.\",\n  \"version\": \"6.0.3\",\n  \"homepage\": \"https://github.com/jonschlinkert/kind-of\",\n  \"author\": \"Jon Schlinkert (https://github.com/jonschlinkert)\",\n  \"contributors\": [\n    \"David Fox-Powell (https://dtothefp.github.io/me)\",\n    \"James (https://twitter.com/aretecode)\",\n    \"Jon Schlinkert (http://twitter.com/jonschlinkert)\",\n    \"Ken Sheedlo (kensheedlo.com)\",\n    \"laggingreflex (https://github.com/laggingreflex)\",\n    \"Miguel Mota (https://miguelmota.com)\",\n    \"Peter deHaan (http://about.me/peterdehaan)\",\n    \"tunnckoCore (https://i.am.charlike.online)\"\n  ],\n  \"repository\": \"jonschlinkert/kind-of\",\n  \"bugs\": {\n    \"url\": \"https://github.com/jonschlinkert/kind-of/issues\"\n  },\n  \"license\": \"MIT\",\n  \"files\": [\n    \"index.js\"\n  ],\n  \"main\": \"index.js\",\n  \"engines\": {\n    \"node\": \">=0.10.0\"\n  },\n  \"scripts\": {\n    \"test\": \"mocha\",\n    \"prepublish\": \"browserify -o browser.js -e index.js -s index --bare\"\n  },\n  \"devDependencies\": {\n    \"benchmarked\": \"^2.0.0\",\n    \"browserify\": \"^14.4.0\",\n    \"gulp-format-md\": \"^1.0.0\",\n    \"mocha\": \"^4.0.1\",\n    \"write\": \"^1.0.3\"\n  },\n  \"keywords\": [\n    \"arguments\",\n    \"array\",\n    \"boolean\",\n    \"check\",\n    \"date\",\n    \"function\",\n    \"is\",\n    \"is-type\",\n    \"is-type-of\",\n    \"kind\",\n    \"kind-of\",\n    \"number\",\n    \"object\",\n    \"of\",\n    \"regexp\",\n    \"string\",\n    \"test\",\n    \"type\",\n    \"type-of\",\n    \"typeof\",\n    \"types\"\n  ],\n  \"verb\": {\n    \"toc\": false,\n    \"layout\": \"default\",\n    \"tasks\": [\n      \"readme\"\n    ],\n    \"plugins\": [\n      \"gulp-format-md\"\n    ],\n    \"lint\": {\n      \"reflinks\": true\n    },\n    \"related\": {\n      \"list\": [\n        \"is-glob\",\n        \"is-number\",\n        \"is-primitive\"\n      ]\n    },\n    \"reflinks\": [\n      \"type-of\",\n      \"typeof\",\n      \"verb\"\n    ]\n  }\n}\n/LICENSE\u0004@The MIT License (MIT)\n\nCopyright (c) 2014-2017, Jon Schlinkert.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/a2xldXJANC4xLjU=",
    "content": "/license\u0004ZThe MIT License (MIT)\n\nCopyright (c) Luke Edwards <luke.edwards05@gmail.com> (lukeed.com)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n/index.d.ts\u0003-// Originally by: Rogier Schouten <https://github.com/rogierschouten>\n// Adapted by: Madhav Varshney <https://github.com/madhavarshney>\ndeclare namespace kleur {\n\tinterface Color {\n\t\t(x: string | number): string;\n\t\t(): Kleur;\n\t}\n\n\tinterface Kleur {\n\t\t// Colors\n\t\tblack: Color;\n\t\tred: Color;\n\t\tgreen: Color;\n\t\tyellow: Color;\n\t\tblue: Color;\n\t\tmagenta: Color;\n\t\tcyan: Color;\n\t\twhite: Color;\n\t\tgray: Color;\n\t\tgrey: Color;\n\n\t\t// Backgrounds\n\t\tbgBlack: Color;\n\t\tbgRed: Color;\n\t\tbgGreen: Color;\n\t\tbgYellow: Color;\n\t\tbgBlue: Color;\n\t\tbgMagenta: Color;\n\t\tbgCyan: Color;\n\t\tbgWhite: Color;\n\n\t\t// Modifiers\n\t\treset: Color;\n\t\tbold: Color;\n\t\tdim: Color;\n\t\titalic: Color;\n\t\tunderline: Color;\n\t\tinverse: Color;\n\t\thidden: Color;\n\t\tstrikethrough: Color;\n\t}\n}\n\ndeclare let kleur: kleur.Kleur & { enabled: boolean };\nexport = kleur;\n/index.js\n'use strict';\n\nlet FORCE_COLOR, NODE_DISABLE_COLORS, NO_COLOR, TERM, isTTY=true;\nif (typeof process !== 'undefined') {\n\t({ FORCE_COLOR, NODE_DISABLE_COLORS, NO_COLOR, TERM } = process.env || {});\n\tisTTY = process.stdout && process.stdout.isTTY;\n}\n\nconst $ = {\n\tenabled: !NODE_DISABLE_COLORS && NO_COLOR == null && TERM !== 'dumb' && (\n\t\tFORCE_COLOR != null && FORCE_COLOR !== '0' || isTTY\n\t),\n\n\t// modifiers\n\treset: init(0, 0),\n\tbold: init(1, 22),\n\tdim: init(2, 22),\n\titalic: init(3, 23),\n\tunderline: init(4, 24),\n\tinverse: init(7, 27),\n\thidden: init(8, 28),\n\tstrikethrough: init(9, 29),\n\n\t// colors\n\tblack: init(30, 39),\n\tred: init(31, 39),\n\tgreen: init(32, 39),\n\tyellow: init(33, 39),\n\tblue: init(34, 39),\n\tmagenta: init(35, 39),\n\tcyan: init(36, 39),\n\twhite: init(37, 39),\n\tgray: init(90, 39),\n\tgrey: init(90, 39),\n\n\t// background colors\n\tbgBlack: init(40, 49),\n\tbgRed: init(41, 49),\n\tbgGreen: init(42, 49),\n\tbgYellow: init(43, 49),\n\tbgBlue: init(44, 49),\n\tbgMagenta: init(45, 49),\n\tbgCyan: init(46, 49),\n\tbgWhite: init(47, 49)\n};\n\nfunction run(arr, str) {\n\tlet i=0, tmp, beg='', end='';\n\tfor (; i < arr.length; i++) {\n\t\ttmp = arr[i];\n\t\tbeg += tmp.open;\n\t\tend += tmp.close;\n\t\tif (!!~str.indexOf(tmp.close)) {\n\t\t\tstr = str.replace(tmp.rgx, tmp.close + tmp.open);\n\t\t}\n\t}\n\treturn beg + str + end;\n}\n\nfunction chain(has, keys) {\n\tlet ctx = { has, keys };\n\n\tctx.reset = $.reset.bind(ctx);\n\tctx.bold = $.bold.bind(ctx);\n\tctx.dim = $.dim.bind(ctx);\n\tctx.italic = $.italic.bind(ctx);\n\tctx.underline = $.underline.bind(ctx);\n\tctx.inverse = $.inverse.bind(ctx);\n\tctx.hidden = $.hidden.bind(ctx);\n\tctx.strikethrough = $.strikethrough.bind(ctx);\n\n\tctx.black = $.black.bind(ctx);\n\tctx.red = $.red.bind(ctx);\n\tctx.green = $.green.bind(ctx);\n\tctx.yellow = $.yellow.bind(ctx);\n\tctx.blue = $.blue.bind(ctx);\n\tctx.magenta = $.magenta.bind(ctx);\n\tctx.cyan = $.cyan.bind(ctx);\n\tctx.white = $.white.bind(ctx);\n\tctx.gray = $.gray.bind(ctx);\n\tctx.grey = $.grey.bind(ctx);\n\n\tctx.bgBlack = $.bgBlack.bind(ctx);\n\tctx.bgRed = $.bgRed.bind(ctx);\n\tctx.bgGreen = $.bgGreen.bind(ctx);\n\tctx.bgYellow = $.bgYellow.bind(ctx);\n\tctx.bgBlue = $.bgBlue.bind(ctx);\n\tctx.bgMagenta = $.bgMagenta.bind(ctx);\n\tctx.bgCyan = $.bgCyan.bind(ctx);\n\tctx.bgWhite = $.bgWhite.bind(ctx);\n\n\treturn ctx;\n}\n\nfunction init(open, close) {\n\tlet blk = {\n\t\topen: `\\x1b[${open}m`,\n\t\tclose: `\\x1b[${close}m`,\n\t\trgx: new RegExp(`\\\\x1b\\\\[${close}m`, 'g')\n\t};\n\treturn function (txt) {\n\t\tif (this !== void 0 && this.has !== void 0) {\n\t\t\t!!~this.has.indexOf(open) || (this.has.push(open),this.keys.push(blk));\n\t\t\treturn txt === void 0 ? this : $.enabled ? run(this.keys, txt+'') : txt+'';\n\t\t}\n\t\treturn txt === void 0 ? chain([open], [blk]) : $.enabled ? run([blk], txt+'') : txt+'';\n\t};\n}\n\nmodule.exports = $;\n/colors.mjs\u0006mlet FORCE_COLOR, NODE_DISABLE_COLORS, NO_COLOR, TERM, isTTY=true;\nif (typeof process !== 'undefined') {\n\t({ FORCE_COLOR, NODE_DISABLE_COLORS, NO_COLOR, TERM } = process.env || {});\n\tisTTY = process.stdout && process.stdout.isTTY;\n}\n\nexport const $ = {\n\tenabled: !NODE_DISABLE_COLORS && NO_COLOR == null && TERM !== 'dumb' && (\n\t\tFORCE_COLOR != null && FORCE_COLOR !== '0' || isTTY\n\t)\n}\n\nfunction init(x, y) {\n\tlet rgx = new RegExp(`\\\\x1b\\\\[${y}m`, 'g');\n\tlet open = `\\x1b[${x}m`, close = `\\x1b[${y}m`;\n\n\treturn function (txt) {\n\t\tif (!$.enabled || txt == null) return txt;\n\t\treturn open + (!!~(''+txt).indexOf(close) ? txt.replace(rgx, close + open) : txt) + close;\n\t};\n}\n\n// modifiers\nexport const reset = init(0, 0);\nexport const bold = init(1, 22);\nexport const dim = init(2, 22);\nexport const italic = init(3, 23);\nexport const underline = init(4, 24);\nexport const inverse = init(7, 27);\nexport const hidden = init(8, 28);\nexport const strikethrough = init(9, 29);\n\n// colors\nexport const black = init(30, 39);\nexport const red = init(31, 39);\nexport const green = init(32, 39);\nexport const yellow = init(33, 39);\nexport const blue = init(34, 39);\nexport const magenta = init(35, 39);\nexport const cyan = init(36, 39);\nexport const white = init(37, 39);\nexport const gray = init(90, 39);\nexport const grey = init(90, 39);\n\n// background colors\nexport const bgBlack = init(40, 49);\nexport const bgRed = init(41, 49);\nexport const bgGreen = init(42, 49);\nexport const bgYellow = init(43, 49);\nexport const bgBlue = init(44, 49);\nexport const bgMagenta = init(45, 49);\nexport const bgCyan = init(46, 49);\nexport const bgWhite = init(47, 49);\n/package.json\u0003{\n  \"name\": \"kleur\",\n  \"version\": \"4.1.5\",\n  \"repository\": \"lukeed/kleur\",\n  \"description\": \"The fastest Node.js library for formatting terminal text with ANSI colors~!\",\n  \"module\": \"index.mjs\",\n  \"types\": \"index.d.ts\",\n  \"main\": \"index.js\",\n  \"license\": \"MIT\",\n  \"exports\": {\n    \".\": {\n      \"types\": \"./index.d.ts\",\n      \"import\": \"./index.mjs\",\n      \"require\": \"./index.js\"\n    },\n    \"./colors\": {\n      \"types\": \"./colors.d.ts\",\n      \"import\": \"./colors.mjs\",\n      \"require\": \"./colors.js\"\n    }\n  },\n  \"files\": [\n    \"*.d.ts\",\n    \"colors.*\",\n    \"index.*\"\n  ],\n  \"author\": {\n    \"name\": \"Luke Edwards\",\n    \"email\": \"luke.edwards05@gmail.com\",\n    \"url\": \"https://lukeed.com\"\n  },\n  \"scripts\": {\n    \"build\": \"node build\",\n    \"test\": \"uvu -r esm -i utils -i xyz\"\n  },\n  \"engines\": {\n    \"node\": \">=6\"\n  },\n  \"keywords\": [\n    \"ansi\",\n    \"cli\",\n    \"color\",\n    \"colors\",\n    \"console\",\n    \"terminal\"\n  ],\n  \"devDependencies\": {\n    \"esm\": \"3.2.25\",\n    \"uvu\": \"0.3.3\"\n  }\n}\n/index.mjs\n'use strict';\n\nlet FORCE_COLOR, NODE_DISABLE_COLORS, NO_COLOR, TERM, isTTY=true;\nif (typeof process !== 'undefined') {\n\t({ FORCE_COLOR, NODE_DISABLE_COLORS, NO_COLOR, TERM } = process.env || {});\n\tisTTY = process.stdout && process.stdout.isTTY;\n}\n\nconst $ = {\n\tenabled: !NODE_DISABLE_COLORS && NO_COLOR == null && TERM !== 'dumb' && (\n\t\tFORCE_COLOR != null && FORCE_COLOR !== '0' || isTTY\n\t),\n\n\t// modifiers\n\treset: init(0, 0),\n\tbold: init(1, 22),\n\tdim: init(2, 22),\n\titalic: init(3, 23),\n\tunderline: init(4, 24),\n\tinverse: init(7, 27),\n\thidden: init(8, 28),\n\tstrikethrough: init(9, 29),\n\n\t// colors\n\tblack: init(30, 39),\n\tred: init(31, 39),\n\tgreen: init(32, 39),\n\tyellow: init(33, 39),\n\tblue: init(34, 39),\n\tmagenta: init(35, 39),\n\tcyan: init(36, 39),\n\twhite: init(37, 39),\n\tgray: init(90, 39),\n\tgrey: init(90, 39),\n\n\t// background colors\n\tbgBlack: init(40, 49),\n\tbgRed: init(41, 49),\n\tbgGreen: init(42, 49),\n\tbgYellow: init(43, 49),\n\tbgBlue: init(44, 49),\n\tbgMagenta: init(45, 49),\n\tbgCyan: init(46, 49),\n\tbgWhite: init(47, 49)\n};\n\nfunction run(arr, str) {\n\tlet i=0, tmp, beg='', end='';\n\tfor (; i < arr.length; i++) {\n\t\ttmp = arr[i];\n\t\tbeg += tmp.open;\n\t\tend += tmp.close;\n\t\tif (!!~str.indexOf(tmp.close)) {\n\t\t\tstr = str.replace(tmp.rgx, tmp.close + tmp.open);\n\t\t}\n\t}\n\treturn beg + str + end;\n}\n\nfunction chain(has, keys) {\n\tlet ctx = { has, keys };\n\n\tctx.reset = $.reset.bind(ctx);\n\tctx.bold = $.bold.bind(ctx);\n\tctx.dim = $.dim.bind(ctx);\n\tctx.italic = $.italic.bind(ctx);\n\tctx.underline = $.underline.bind(ctx);\n\tctx.inverse = $.inverse.bind(ctx);\n\tctx.hidden = $.hidden.bind(ctx);\n\tctx.strikethrough = $.strikethrough.bind(ctx);\n\n\tctx.black = $.black.bind(ctx);\n\tctx.red = $.red.bind(ctx);\n\tctx.green = $.green.bind(ctx);\n\tctx.yellow = $.yellow.bind(ctx);\n\tctx.blue = $.blue.bind(ctx);\n\tctx.magenta = $.magenta.bind(ctx);\n\tctx.cyan = $.cyan.bind(ctx);\n\tctx.white = $.white.bind(ctx);\n\tctx.gray = $.gray.bind(ctx);\n\tctx.grey = $.grey.bind(ctx);\n\n\tctx.bgBlack = $.bgBlack.bind(ctx);\n\tctx.bgRed = $.bgRed.bind(ctx);\n\tctx.bgGreen = $.bgGreen.bind(ctx);\n\tctx.bgYellow = $.bgYellow.bind(ctx);\n\tctx.bgBlue = $.bgBlue.bind(ctx);\n\tctx.bgMagenta = $.bgMagenta.bind(ctx);\n\tctx.bgCyan = $.bgCyan.bind(ctx);\n\tctx.bgWhite = $.bgWhite.bind(ctx);\n\n\treturn ctx;\n}\n\nfunction init(open, close) {\n\tlet blk = {\n\t\topen: `\\x1b[${open}m`,\n\t\tclose: `\\x1b[${close}m`,\n\t\trgx: new RegExp(`\\\\x1b\\\\[${close}m`, 'g')\n\t};\n\treturn function (txt) {\n\t\tif (this !== void 0 && this.has !== void 0) {\n\t\t\t!!~this.has.indexOf(open) || (this.has.push(open),this.keys.push(blk));\n\t\t\treturn txt === void 0 ? this : $.enabled ? run(this.keys, txt+'') : txt+'';\n\t\t}\n\t\treturn txt === void 0 ? chain([open], [blk]) : $.enabled ? run([blk], txt+'') : txt+'';\n\t};\n}\n\nexport default $;\n/readme.md\u001c<div align=\"center\">\n  <img src=\"shots/logo.png\" alt=\"kleur\" height=\"120\" />\n</div>\n\n<div align=\"center\">\n  <a href=\"https://npmjs.org/package/kleur\">\n    <img src=\"https://badgen.now.sh/npm/v/kleur\" alt=\"version\" />\n  </a>\n  <a href=\"https://github.com/lukeed/kleur/actions?query=workflow%3ACI\">\n    <img src=\"https://github.com/lukeed/kleur/workflows/CI/badge.svg?event=push\" alt=\"CI\" />\n  </a>\n  <a href=\"https://npmjs.org/package/kleur\">\n    <img src=\"https://badgen.now.sh/npm/dm/kleur\" alt=\"downloads\" />\n  </a>\n  <a href=\"https://packagephobia.now.sh/result?p=kleur\">\n    <img src=\"https://packagephobia.now.sh/badge?p=kleur\" alt=\"install size\" />\n  </a>\n</div>\n\n<div align=\"center\">The fastest Node.js library for formatting terminal text with ANSI colors~!</div>\n\n## Features\n\n* No dependencies\n* Super [lightweight](#load-time) & [performant](#performance)\n* Supports [nested](#nested-methods) & [chained](#chained-methods) colors\n* No `String.prototype` modifications\n* Conditional [color support](#conditional-support)\n* [Fully treeshakable](#individual-colors)\n* Familiar [API](#api)\n\n---\n\nAs of `v3.0` the Chalk-style syntax (magical getter) is no longer used.<br>Please visit [History](#history) for migration paths supporting that syntax.\n\n---\n\n\n## Install\n\n```\n$ npm install --save kleur\n```\n\n\n## Usage\n\n```js\nimport kleur from 'kleur';\n\n// basic usage\nkleur.red('red text');\n\n// chained methods\nkleur.blue().bold().underline('howdy partner');\n\n// nested methods\nkleur.bold(`${ white().bgRed('[ERROR]') } ${ kleur.red().italic('Something happened')}`);\n```\n\n### Chained Methods\n\n```js\nconst { bold, green } = require('kleur');\n\nconsole.log(bold().red('this is a bold red message'));\nconsole.log(bold().italic('this is a bold italicized message'));\nconsole.log(bold().yellow().bgRed().italic('this is a bold yellow italicized message'));\nconsole.log(green().bold().underline('this is a bold green underlined message'));\n```\n\n<img src=\"shots/1.png\" width=\"300\" />\n\n### Nested Methods\n\n```js\nconst { yellow, red, cyan } = require('kleur');\n\nconsole.log(yellow(`foo ${red().bold('red')} bar ${cyan('cyan')} baz`));\nconsole.log(yellow('foo ' + red().bold('red') + ' bar ' + cyan('cyan') + ' baz'));\n```\n\n<img src=\"shots/2.png\" width=\"300\" />\n\n\n### Conditional Support\n\nToggle color support as needed; `kleur` includes simple auto-detection which may not cover all cases.\n\n> **Note:** Both `kleur` and `kleur/colors` share the same detection logic.\n\n```js\nimport kleur from 'kleur';\n\n// manually disable\nkleur.enabled = false;\n\n// or use another library to detect support\nkleur.enabled = require('color-support').level > 0;\n\nconsole.log(kleur.red('I will only be colored red if the terminal supports colors'));\n```\n\n> **Important:** <br>Colors will be disabled automatically in non [TTY contexts](https://nodejs.org/api/process.html#process_a_note_on_process_i_o). For example, spawning another process or piping output into another process will disable colorization automatically. To force colors in your piped output, you may do so with the `FORCE_COLOR=1` environment variable:\n\n```sh\n$ node app.js #=> COLORS\n$ node app.js > log.txt  #=> NO COLORS\n$ FORCE_COLOR=1 node app.js > log.txt #=> COLORS\n$ FORCE_COLOR=0 node app.js > log.txt #=> NO COLORS\n```\n\n## API\n\nAny `kleur` method returns a `String` when invoked with input; otherwise chaining is expected.\n\n> It's up to the developer to pass the output to destinations like `console.log`, `process.stdout.write`, etc.\n\nThe methods below are grouped by type for legibility purposes only. They each can be [chained](#chained-methods) or [nested](#nested-methods) with one another.\n\n***Colors:***\n> black &mdash; red &mdash; green &mdash; yellow &mdash; blue &mdash; magenta &mdash; cyan &mdash; white &mdash; gray &mdash; grey\n\n***Backgrounds:***\n> bgBlack &mdash; bgRed &mdash; bgGreen &mdash; bgYellow &mdash; bgBlue &mdash; bgMagenta &mdash; bgCyan &mdash; bgWhite\n\n***Modifiers:***\n> reset &mdash; bold &mdash; dim &mdash; italic* &mdash; underline &mdash; inverse &mdash; hidden &mdash; strikethrough*\n\n<sup>* <em>Not widely supported</em></sup>\n\n\n## Individual Colors\n\nWhen you only need a few colors, it doesn't make sense to import _all_ of `kleur` because, as small as it is, `kleur` is not treeshakeable, and so most of its code will be doing nothing. In order to fix this, you can import from the `kleur/colors` submodule which _fully_ supports tree-shaking.\n\nThe caveat with this approach is that color functions **are not** chainable~!<br>Each function receives and colorizes its input. You may combine colors, backgrounds, and modifiers by nesting function calls within other functions.\n\n```js\n// or: import * as kleur from 'kleur/colors';\nimport { red, underline, bgWhite } from 'kleur/colors';\n\nred('red text');\n//~> kleur.red('red text');\n\nunderline(red('red underlined text'));\n//~> kleur.underline().red('red underlined text');\n\nbgWhite(underline(red('red underlined text w/ white background')));\n//~> kleur.bgWhite().underline().red('red underlined text w/ white background');\n```\n\n> **Note:** All the same [colors, backgrounds, and modifiers](#api) are available.\n\n***Conditional Support***\n\nThe `kleur/colors` submodule also allows you to toggle color support, as needed.<br>\nIt includes the same initial assumptions as `kleur`, in an attempt to have colors enabled by default.\n\nUnlike `kleur`, this setting exists as `kleur.$.enabled` instead of `kleur.enabled`:\n\n```js\nimport * as kleur from 'kleur/colors';\n// or: import { $, red } from 'kleur/colors';\n\n// manually disabled\nkleur.$.enabled = false;\n\n// or use another library to detect support\nkleur.$.enabled = require('color-support').level > 0;\n\nconsole.log(red('I will only be colored red if the terminal supports colors'));\n```\n\n\n## Benchmarks\n\n> Using Node v10.13.0\n\n### Load time\n\n```\nchalk        :: 5.303ms\nkleur        :: 0.488ms\nkleur/colors :: 0.369ms\nansi-colors  :: 1.504ms\n```\n\n### Performance\n\n```\n# All Colors\n  ansi-colors      x 177,625 ops/sec ±1.47% (92 runs sampled)\n  chalk            x 611,907 ops/sec ±0.20% (92 runs sampled)\n  kleur            x 742,509 ops/sec ±1.47% (93 runs sampled)\n  kleur/colors     x 881,742 ops/sec ±0.19% (98 runs sampled)\n\n# Stacked colors\n  ansi-colors      x  23,331 ops/sec ±1.81% (94 runs sampled)\n  chalk            x 337,178 ops/sec ±0.20% (98 runs sampled)\n  kleur            x  78,299 ops/sec ±1.01% (97 runs sampled)\n  kleur/colors     x 104,431 ops/sec ±0.22% (97 runs sampled)\n\n# Nested colors\n  ansi-colors      x  67,181 ops/sec ±1.15% (92 runs sampled)\n  chalk            x 116,361 ops/sec ±0.63% (94 runs sampled)\n  kleur            x 139,514 ops/sec ±0.76% (95 runs sampled)\n  kleur/colors     x 145,716 ops/sec ±0.97% (97 runs sampled)\n```\n\n\n## History\n\nThis project originally forked [`ansi-colors`](https://github.com/doowb/ansi-colors).\n\nBeginning with `kleur@3.0`, the Chalk-style syntax (magical getter) has been replaced with function calls per key:\n\n```js\n// Old:\nc.red.bold.underline('old');\n\n// New:\nc.red().bold().underline('new');\n```\n> <sup><em>As I work more with Rust, the newer syntax feels so much better & more natural!</em></sup>\n\nIf you prefer the old syntax, you may migrate to `ansi-colors` or newer `chalk` releases.<br>Versions below `kleur@3.0` have been officially deprecated.\n\n\n## License\n\nMIT © [Luke Edwards](https://lukeed.com)\n/colors.js\u0005let FORCE_COLOR, NODE_DISABLE_COLORS, NO_COLOR, TERM, isTTY=true;\nif (typeof process !== 'undefined') {\n\t({ FORCE_COLOR, NODE_DISABLE_COLORS, NO_COLOR, TERM } = process.env || {});\n\tisTTY = process.stdout && process.stdout.isTTY;\n}\n\nconst $ = exports.$ = {\n\tenabled: !NODE_DISABLE_COLORS && NO_COLOR == null && TERM !== 'dumb' && (\n\t\tFORCE_COLOR != null && FORCE_COLOR !== '0' || isTTY\n\t)\n}\n\nfunction init(x, y) {\n\tlet rgx = new RegExp(`\\\\x1b\\\\[${y}m`, 'g');\n\tlet open = `\\x1b[${x}m`, close = `\\x1b[${y}m`;\n\n\treturn function (txt) {\n\t\tif (!$.enabled || txt == null) return txt;\n\t\treturn open + (!!~(''+txt).indexOf(close) ? txt.replace(rgx, close + open) : txt) + close;\n\t};\n}\n\n// modifiers\nexports.reset = init(0, 0);\nexports.bold = init(1, 22);\nexports.dim = init(2, 22);\nexports.italic = init(3, 23);\nexports.underline = init(4, 24);\nexports.inverse = init(7, 27);\nexports.hidden = init(8, 28);\nexports.strikethrough = init(9, 29);\n\n// colors\nexports.black = init(30, 39);\nexports.red = init(31, 39);\nexports.green = init(32, 39);\nexports.yellow = init(33, 39);\nexports.blue = init(34, 39);\nexports.magenta = init(35, 39);\nexports.cyan = init(36, 39);\nexports.white = init(37, 39);\nexports.gray = init(90, 39);\nexports.grey = init(90, 39);\n\n// background colors\nexports.bgBlack = init(40, 49);\nexports.bgRed = init(41, 49);\nexports.bgGreen = init(42, 49);\nexports.bgYellow = init(43, 49);\nexports.bgBlue = init(44, 49);\nexports.bgMagenta = init(45, 49);\nexports.bgCyan = init(46, 49);\nexports.bgWhite = init(47, 49);\n/colors.d.ts\u0005\u0014declare function print(input: string | boolean | number): string;\ndeclare function print(input: undefined | void): undefined;\ndeclare function print(input: null): null;\ntype Colorize = typeof print;\n\nexport declare const $: { enabled: boolean };\n\n// Colors\nexport declare const black: Colorize;\nexport declare const red: Colorize;\nexport declare const green: Colorize;\nexport declare const yellow: Colorize;\nexport declare const blue: Colorize;\nexport declare const magenta: Colorize;\nexport declare const cyan: Colorize;\nexport declare const white: Colorize;\nexport declare const gray: Colorize;\nexport declare const grey: Colorize;\n\n// Backgrounds\nexport declare const bgBlack: Colorize;\nexport declare const bgRed: Colorize;\nexport declare const bgGreen: Colorize;\nexport declare const bgYellow: Colorize;\nexport declare const bgBlue: Colorize;\nexport declare const bgMagenta: Colorize;\nexport declare const bgCyan: Colorize;\nexport declare const bgWhite: Colorize;\n\n// Modifiers\nexport declare const reset: Colorize;\nexport declare const bold: Colorize;\nexport declare const dim: Colorize;\nexport declare const italic: Colorize;\nexport declare const underline: Colorize;\nexport declare const inverse: Colorize;\nexport declare const hidden: Colorize;\nexport declare const strikethrough: Colorize;\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/aGFzLWZsYWdAMy4wLjA=",
    "content": "/license\u0004UMIT License\n\nCopyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)\n\nPermission 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:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE 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.\n/readme.md\u0003# has-flag [![Build Status](https://travis-ci.org/sindresorhus/has-flag.svg?branch=master)](https://travis-ci.org/sindresorhus/has-flag)\n\n> Check if [`argv`](https://nodejs.org/docs/latest/api/process.html#process_process_argv) has a specific flag\n\nCorrectly stops looking after an `--` argument terminator.\n\n\n## Install\n\n```\n$ npm install has-flag\n```\n\n\n## Usage\n\n```js\n// foo.js\nconst hasFlag = require('has-flag');\n\nhasFlag('unicorn');\n//=> true\n\nhasFlag('--unicorn');\n//=> true\n\nhasFlag('f');\n//=> true\n\nhasFlag('-f');\n//=> true\n\nhasFlag('foo=bar');\n//=> true\n\nhasFlag('foo');\n//=> false\n\nhasFlag('rainbow');\n//=> false\n```\n\n```\n$ node foo.js -f --unicorn --foo=bar -- --rainbow\n```\n\n\n## API\n\n### hasFlag(flag, [argv])\n\nReturns a boolean for whether the flag exists.\n\n#### flag\n\nType: `string`\n\nCLI flag to look for. The `--` prefix is optional.\n\n#### argv\n\nType: `string[]`<br>\nDefault: `process.argv`\n\nCLI arguments.\n\n\n## License\n\nMIT © [Sindre Sorhus](https://sindresorhus.com)\n/package.json\u0002{\n  \"name\": \"has-flag\",\n  \"version\": \"3.0.0\",\n  \"description\": \"Check if argv has a specific flag\",\n  \"license\": \"MIT\",\n  \"repository\": \"sindresorhus/has-flag\",\n  \"author\": {\n    \"name\": \"Sindre Sorhus\",\n    \"email\": \"sindresorhus@gmail.com\",\n    \"url\": \"sindresorhus.com\"\n  },\n  \"engines\": {\n    \"node\": \">=4\"\n  },\n  \"scripts\": {\n    \"test\": \"xo && ava\"\n  },\n  \"files\": [\n    \"index.js\"\n  ],\n  \"keywords\": [\n    \"has\",\n    \"check\",\n    \"detect\",\n    \"contains\",\n    \"find\",\n    \"flag\",\n    \"cli\",\n    \"command-line\",\n    \"argv\",\n    \"process\",\n    \"arg\",\n    \"args\",\n    \"argument\",\n    \"arguments\",\n    \"getopt\",\n    \"minimist\",\n    \"optimist\"\n  ],\n  \"devDependencies\": {\n    \"ava\": \"*\",\n    \"xo\": \"*\"\n  }\n}\n/index.js\u0001@'use strict';\nmodule.exports = (flag, argv) => {\n\targv = argv || process.argv;\n\tconst prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--');\n\tconst pos = argv.indexOf(prefix + flag);\n\tconst terminatorPos = argv.indexOf('--');\n\treturn pos !== -1 && (terminatorPos === -1 ? true : pos < terminatorPos);\n};\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/aGFzLWZsYWdANC4wLjA=",
    "content": "/index.js\u0001J'use strict';\n\nmodule.exports = (flag, argv = process.argv) => {\n\tconst prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--');\n\tconst position = argv.indexOf(prefix + flag);\n\tconst terminatorPosition = argv.indexOf('--');\n\treturn position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);\n};\n/index.d.ts\u0002/**\nCheck if [`argv`](https://nodejs.org/docs/latest/api/process.html#process_process_argv) has a specific flag.\n\n@param flag - CLI flag to look for. The `--` prefix is optional.\n@param argv - CLI arguments. Default: `process.argv`.\n@returns Whether the flag exists.\n\n@example\n```\n// $ ts-node foo.ts -f --unicorn --foo=bar -- --rainbow\n\n// foo.ts\nimport hasFlag = require('has-flag');\n\nhasFlag('unicorn');\n//=> true\n\nhasFlag('--unicorn');\n//=> true\n\nhasFlag('f');\n//=> true\n\nhasFlag('-f');\n//=> true\n\nhasFlag('foo=bar');\n//=> true\n\nhasFlag('foo');\n//=> false\n\nhasFlag('rainbow');\n//=> false\n```\n*/\ndeclare function hasFlag(flag: string, argv?: string[]): boolean;\n\nexport = hasFlag;\n/package.json\u0002{\n\t\"name\": \"has-flag\",\n\t\"version\": \"4.0.0\",\n\t\"description\": \"Check if argv has a specific flag\",\n\t\"license\": \"MIT\",\n\t\"repository\": \"sindresorhus/has-flag\",\n\t\"author\": {\n\t\t\"name\": \"Sindre Sorhus\",\n\t\t\"email\": \"sindresorhus@gmail.com\",\n\t\t\"url\": \"sindresorhus.com\"\n\t},\n\t\"engines\": {\n\t\t\"node\": \">=8\"\n\t},\n\t\"scripts\": {\n\t\t\"test\": \"xo && ava && tsd\"\n\t},\n\t\"files\": [\n\t\t\"index.js\",\n\t\t\"index.d.ts\"\n\t],\n\t\"keywords\": [\n\t\t\"has\",\n\t\t\"check\",\n\t\t\"detect\",\n\t\t\"contains\",\n\t\t\"find\",\n\t\t\"flag\",\n\t\t\"cli\",\n\t\t\"command-line\",\n\t\t\"argv\",\n\t\t\"process\",\n\t\t\"arg\",\n\t\t\"args\",\n\t\t\"argument\",\n\t\t\"arguments\",\n\t\t\"getopt\",\n\t\t\"minimist\",\n\t\t\"optimist\"\n\t],\n\t\"devDependencies\": {\n\t\t\"ava\": \"^1.4.1\",\n\t\t\"tsd\": \"^0.7.2\",\n\t\t\"xo\": \"^0.24.0\"\n\t}\n}\n/readme.md\u0006@# has-flag [![Build Status](https://travis-ci.org/sindresorhus/has-flag.svg?branch=master)](https://travis-ci.org/sindresorhus/has-flag)\n\n> Check if [`argv`](https://nodejs.org/docs/latest/api/process.html#process_process_argv) has a specific flag\n\nCorrectly stops looking after an `--` argument terminator.\n\n---\n\n<div align=\"center\">\n\t<b>\n\t\t<a href=\"https://tidelift.com/subscription/pkg/npm-has-flag?utm_source=npm-has-flag&utm_medium=referral&utm_campaign=readme\">Get professional support for this package with a Tidelift subscription</a>\n\t</b>\n\t<br>\n\t<sub>\n\t\tTidelift helps make open source sustainable for maintainers while giving companies<br>assurances about security, maintenance, and licensing for their dependencies.\n\t</sub>\n</div>\n\n---\n\n\n## Install\n\n```\n$ npm install has-flag\n```\n\n\n## Usage\n\n```js\n// foo.js\nconst hasFlag = require('has-flag');\n\nhasFlag('unicorn');\n//=> true\n\nhasFlag('--unicorn');\n//=> true\n\nhasFlag('f');\n//=> true\n\nhasFlag('-f');\n//=> true\n\nhasFlag('foo=bar');\n//=> true\n\nhasFlag('foo');\n//=> false\n\nhasFlag('rainbow');\n//=> false\n```\n\n```\n$ node foo.js -f --unicorn --foo=bar -- --rainbow\n```\n\n\n## API\n\n### hasFlag(flag, [argv])\n\nReturns a boolean for whether the flag exists.\n\n#### flag\n\nType: `string`\n\nCLI flag to look for. The `--` prefix is optional.\n\n#### argv\n\nType: `string[]`<br>\nDefault: `process.argv`\n\nCLI arguments.\n\n\n## Security\n\nTo report a security vulnerability, please use the [Tidelift security contact](https://tidelift.com/security). Tidelift will coordinate the fix and disclosure.\n\n\n## License\n\nMIT © [Sindre Sorhus](https://sindresorhus.com)\n/license\u0004UMIT License\n\nCopyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)\n\nPermission 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:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE 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.\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/aGFzLXN5bWJvbHNAMS4wLjM=",
    "content": "/LICENSE\u0004/MIT License\n\nCopyright (c) 2016 Jordan Harband\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n/test/shams/core-js.js\u0002'use strict';\n\nvar test = require('tape');\n\nif (typeof Symbol === 'function' && typeof Symbol() === 'symbol') {\n\ttest('has native Symbol support', function (t) {\n\t\tt.equal(typeof Symbol, 'function');\n\t\tt.equal(typeof Symbol(), 'symbol');\n\t\tt.end();\n\t});\n\treturn;\n}\n\nvar hasSymbols = require('../../shams');\n\ntest('polyfilled Symbols', function (t) {\n\t/* eslint-disable global-require */\n\tt.equal(hasSymbols(), false, 'hasSymbols is false before polyfilling');\n\trequire('core-js/fn/symbol');\n\trequire('core-js/fn/symbol/to-string-tag');\n\n\trequire('../tests')(t);\n\n\tvar hasSymbolsAfter = hasSymbols();\n\tt.equal(hasSymbolsAfter, true, 'hasSymbols is true after polyfilling');\n\t/* eslint-enable global-require */\n\tt.end();\n});\n'/test/shams/get-own-property-symbols.js\u0002'use strict';\n\nvar test = require('tape');\n\nif (typeof Symbol === 'function' && typeof Symbol() === 'symbol') {\n\ttest('has native Symbol support', function (t) {\n\t\tt.equal(typeof Symbol, 'function');\n\t\tt.equal(typeof Symbol(), 'symbol');\n\t\tt.end();\n\t});\n\treturn;\n}\n\nvar hasSymbols = require('../../shams');\n\ntest('polyfilled Symbols', function (t) {\n\t/* eslint-disable global-require */\n\tt.equal(hasSymbols(), false, 'hasSymbols is false before polyfilling');\n\n\trequire('get-own-property-symbols');\n\n\trequire('../tests')(t);\n\n\tvar hasSymbolsAfter = hasSymbols();\n\tt.equal(hasSymbolsAfter, true, 'hasSymbols is true after polyfilling');\n\t/* eslint-enable global-require */\n\tt.end();\n});\n/.nycrcċ{\n\t\"all\": true,\n\t\"check-coverage\": false,\n\t\"reporter\": [\"text-summary\", \"text\", \"html\", \"json\"],\n\t\"exclude\": [\n\t\t\"coverage\",\n\t\t\"test\"\n\t]\n}\n/test/index.js\u0002'use strict';\n\nvar test = require('tape');\nvar hasSymbols = require('../');\nvar runSymbolTests = require('./tests');\n\ntest('interface', function (t) {\n\tt.equal(typeof hasSymbols, 'function', 'is a function');\n\tt.equal(typeof hasSymbols(), 'boolean', 'returns a boolean');\n\tt.end();\n});\n\ntest('Symbols are supported', { skip: !hasSymbols() }, function (t) {\n\trunSymbolTests(t);\n\tt.end();\n});\n\ntest('Symbols are not supported', { skip: hasSymbols() }, function (t) {\n\tt.equal(typeof Symbol, 'undefined', 'global Symbol is undefined');\n\tt.equal(typeof Object.getOwnPropertySymbols, 'undefined', 'Object.getOwnPropertySymbols does not exist');\n\tt.end();\n});\n/.github/FUNDING.yml\u0002F# These are supported funding model platforms\n\ngithub: [ljharb]\npatreon: # Replace with a single Patreon username\nopen_collective: # Replace with a single Open Collective username\nko_fi: # Replace with a single Ko-fi username\ntidelift: npm/has-symbols\ncommunity_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry\nliberapay: # Replace with a single Liberapay username\nissuehunt: # Replace with a single IssueHunt username\notechie: # Replace with a single Otechie username\ncustom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']\n/CHANGELOG.md\u001e\n# Changelog\n\nAll notable changes to this project will be documented in this file.\n\nThe format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)\nand this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).\n\n## [v1.0.3](https://github.com/inspect-js/has-symbols/compare/v1.0.2...v1.0.3) - 2022-03-01\n\n### Commits\n\n- [actions] use `node/install` instead of `node/run`; use `codecov` action [`518b28f`](https://github.com/inspect-js/has-symbols/commit/518b28f6c5a516cbccae30794e40aa9f738b1693)\n- [meta] add `bugs` and `homepage` fields; reorder package.json [`c480b13`](https://github.com/inspect-js/has-symbols/commit/c480b13fd6802b557e1cef9749872cb5fdeef744)\n- [actions] reuse common workflows [`01d0ee0`](https://github.com/inspect-js/has-symbols/commit/01d0ee0a8d97c0947f5edb73eb722027a77b2b07)\n- [actions] update codecov uploader [`6424ebe`](https://github.com/inspect-js/has-symbols/commit/6424ebe86b2c9c7c3d2e9bd4413a4e4f168cb275)\n- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `auto-changelog`, `tape` [`dfa7e7f`](https://github.com/inspect-js/has-symbols/commit/dfa7e7ff38b594645d8c8222aab895157fa7e282)\n- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `safe-publish-latest`, `tape` [`0c8d436`](https://github.com/inspect-js/has-symbols/commit/0c8d43685c45189cea9018191d4fd7eca91c9d02)\n- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `tape` [`9026554`](https://github.com/inspect-js/has-symbols/commit/902655442a1bf88e72b42345494ef0c60f5d36ab)\n- [readme] add actions and codecov badges [`eaa9682`](https://github.com/inspect-js/has-symbols/commit/eaa9682f990f481d3acf7a1c7600bec36f7b3adc)\n- [Dev Deps] update `eslint`, `tape` [`bc7a3ba`](https://github.com/inspect-js/has-symbols/commit/bc7a3ba46f27b7743f8a2579732d59d1b9ac791e)\n- [Dev Deps] update `eslint`, `auto-changelog` [`0ace00a`](https://github.com/inspect-js/has-symbols/commit/0ace00af08a88cdd1e6ce0d60357d941c60c2d9f)\n- [meta] use `prepublishOnly` script for npm 7+ [`093f72b`](https://github.com/inspect-js/has-symbols/commit/093f72bc2b0ed00c781f444922a5034257bf561d)\n- [Tests] test on all 16 minors [`9b80d3d`](https://github.com/inspect-js/has-symbols/commit/9b80d3d9102529f04c20ec5b1fcc6e38426c6b03)\n\n## [v1.0.2](https://github.com/inspect-js/has-symbols/compare/v1.0.1...v1.0.2) - 2021-02-27\n\n### Fixed\n\n- [Fix] use a universal way to get the original Symbol [`#11`](https://github.com/inspect-js/has-symbols/issues/11)\n\n### Commits\n\n- [Tests] migrate tests to Github Actions [`90ae798`](https://github.com/inspect-js/has-symbols/commit/90ae79820bdfe7bc703d67f5f3c5e205f98556d3)\n- [meta] do not publish github action workflow files [`29e60a1`](https://github.com/inspect-js/has-symbols/commit/29e60a1b7c25c7f1acf7acff4a9320d0d10c49b4)\n- [Tests] run `nyc` on all tests [`8476b91`](https://github.com/inspect-js/has-symbols/commit/8476b915650d360915abe2522505abf4b0e8f0ae)\n- [readme] fix repo URLs, remove defunct badges [`126288e`](https://github.com/inspect-js/has-symbols/commit/126288ecc1797c0a40247a6b78bcb2e0bc5d7036)\n- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `auto-changelog`, `core-js`, `get-own-property-symbols` [`d84bdfa`](https://github.com/inspect-js/has-symbols/commit/d84bdfa48ac5188abbb4904b42614cd6c030940a)\n- [Tests] fix linting errors [`0df3070`](https://github.com/inspect-js/has-symbols/commit/0df3070b981b6c9f2ee530c09189a7f5c6def839)\n- [actions] add \"Allow Edits\" workflow [`1e6bc29`](https://github.com/inspect-js/has-symbols/commit/1e6bc29b188f32b9648657b07eda08504be5aa9c)\n- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `tape` [`36cea2a`](https://github.com/inspect-js/has-symbols/commit/36cea2addd4e6ec435f35a2656b4e9ef82498e9b)\n- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `tape` [`1278338`](https://github.com/inspect-js/has-symbols/commit/127833801865fbc2cc8979beb9ca869c7bfe8222)\n- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `tape` [`1493254`](https://github.com/inspect-js/has-symbols/commit/1493254eda13db5fb8fc5e4a3e8324b3d196029d)\n- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `core-js` [`b090bf2`](https://github.com/inspect-js/has-symbols/commit/b090bf214d3679a30edc1e2d729d466ab5183e1d)\n- [actions] switch Automatic Rebase workflow to `pull_request_target` event [`4addb7a`](https://github.com/inspect-js/has-symbols/commit/4addb7ab4dc73f927ae99928d68817554fc21dc0)\n- [Dev Deps] update `auto-changelog`, `tape` [`81d0baf`](https://github.com/inspect-js/has-symbols/commit/81d0baf3816096a89a8558e8043895f7a7d10d8b)\n- [Dev Deps] update `auto-changelog`; add `aud` [`1a4e561`](https://github.com/inspect-js/has-symbols/commit/1a4e5612c25d91c3a03d509721d02630bc4fe3da)\n- [readme] remove unused testling URLs [`3000941`](https://github.com/inspect-js/has-symbols/commit/3000941f958046e923ed8152edb1ef4a599e6fcc)\n- [Tests] only audit prod deps [`692e974`](https://github.com/inspect-js/has-symbols/commit/692e9743c912410e9440207631a643a34b4741a1)\n- [Dev Deps] update `@ljharb/eslint-config` [`51c946c`](https://github.com/inspect-js/has-symbols/commit/51c946c7f6baa793ec5390bb5a45cdce16b4ba76)\n\n## [v1.0.1](https://github.com/inspect-js/has-symbols/compare/v1.0.0...v1.0.1) - 2019-11-16\n\n### Commits\n\n- [Tests] use shared travis-ci configs [`ce396c9`](https://github.com/inspect-js/has-symbols/commit/ce396c9419ff11c43d0da5d05cdbb79f7fb42229)\n- [Tests] up to `node` `v12.4`, `v11.15`, `v10.15`, `v9.11`, `v8.15`, `v7.10`, `v6.17`, `v4.9`; use `nvm install-latest-npm` [`0690732`](https://github.com/inspect-js/has-symbols/commit/0690732801f47ab429f39ba1962f522d5c462d6b)\n- [meta] add `auto-changelog` [`2163d0b`](https://github.com/inspect-js/has-symbols/commit/2163d0b7f36343076b8f947cd1667dd1750f26fc)\n- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `core-js`, `safe-publish-latest`, `tape` [`8e0951f`](https://github.com/inspect-js/has-symbols/commit/8e0951f1a7a2e52068222b7bb73511761e6e4d9c)\n- [actions] add automatic rebasing / merge commit blocking [`b09cdb7`](https://github.com/inspect-js/has-symbols/commit/b09cdb7cd7ee39e7a769878f56e2d6066f5ccd1d)\n- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `safe-publish-latest`, `core-js`, `get-own-property-symbols`, `tape` [`1dd42cd`](https://github.com/inspect-js/has-symbols/commit/1dd42cd86183ed0c50f99b1062345c458babca91)\n- [meta] create FUNDING.yml [`aa57a17`](https://github.com/inspect-js/has-symbols/commit/aa57a17b19708906d1927f821ea8e73394d84ca4)\n- Only apps should have lockfiles [`a2d8bea`](https://github.com/inspect-js/has-symbols/commit/a2d8bea23a97d15c09eaf60f5b107fcf9a4d57aa)\n- [Tests] use `npx aud` instead of `nsp` or `npm audit` with hoops [`9e96cb7`](https://github.com/inspect-js/has-symbols/commit/9e96cb783746cbed0c10ef78e599a8eaa7ebe193)\n- [meta] add `funding` field [`a0b32cf`](https://github.com/inspect-js/has-symbols/commit/a0b32cf68e803f963c1639b6d47b0a9d6440bab0)\n- [Dev Deps] update `safe-publish-latest` [`cb9f0a5`](https://github.com/inspect-js/has-symbols/commit/cb9f0a521a3a1790f1064d437edd33bb6c3d6af0)\n\n## v1.0.0 - 2016-09-19\n\n### Commits\n\n- Tests. [`ecb6eb9`](https://github.com/inspect-js/has-symbols/commit/ecb6eb934e4883137f3f93b965ba5e0a98df430d)\n- package.json [`88a337c`](https://github.com/inspect-js/has-symbols/commit/88a337cee0864a0da35f5d19e69ff0ef0150e46a)\n- Initial commit [`42e1e55`](https://github.com/inspect-js/has-symbols/commit/42e1e5502536a2b8ac529c9443984acd14836b1c)\n- Initial implementation. [`33f5cc6`](https://github.com/inspect-js/has-symbols/commit/33f5cc6cdff86e2194b081ee842bfdc63caf43fb)\n- read me [`01f1170`](https://github.com/inspect-js/has-symbols/commit/01f1170188ff7cb1558aa297f6ba5b516c6d7b0c)\n/test/tests.js\u0007'use strict';\n\n// eslint-disable-next-line consistent-return\nmodule.exports = function runSymbolTests(t) {\n\tt.equal(typeof Symbol, 'function', 'global Symbol is a function');\n\n\tif (typeof Symbol !== 'function') { return false; }\n\n\tt.notEqual(Symbol(), Symbol(), 'two symbols are not equal');\n\n\t/*\n\tt.equal(\n\t\tSymbol.prototype.toString.call(Symbol('foo')),\n\t\tSymbol.prototype.toString.call(Symbol('foo')),\n\t\t'two symbols with the same description stringify the same'\n\t);\n\t*/\n\n\t/*\n\tvar foo = Symbol('foo');\n\n\tt.notEqual(\n\t\tString(foo),\n\t\tString(Symbol('bar')),\n\t\t'two symbols with different descriptions do not stringify the same'\n\t);\n\t*/\n\n\tt.equal(typeof Symbol.prototype.toString, 'function', 'Symbol#toString is a function');\n\t// t.equal(String(foo), Symbol.prototype.toString.call(foo), 'Symbol#toString equals String of the same symbol');\n\n\tt.equal(typeof Object.getOwnPropertySymbols, 'function', 'Object.getOwnPropertySymbols is a function');\n\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tvar symObj = Object(sym);\n\tt.notEqual(typeof sym, 'string', 'Symbol is not a string');\n\tt.equal(Object.prototype.toString.call(sym), '[object Symbol]', 'symbol primitive Object#toStrings properly');\n\tt.equal(Object.prototype.toString.call(symObj), '[object Symbol]', 'symbol primitive Object#toStrings properly');\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\t// eslint-disable-next-line no-restricted-syntax\n\tfor (sym in obj) { t.fail('symbol property key was found in for..in of object'); }\n\n\tt.deepEqual(Object.keys(obj), [], 'no enumerable own keys on symbol-valued object');\n\tt.deepEqual(Object.getOwnPropertyNames(obj), [], 'no own names on symbol-valued object');\n\tt.deepEqual(Object.getOwnPropertySymbols(obj), [sym], 'one own symbol on symbol-valued object');\n\tt.equal(Object.prototype.propertyIsEnumerable.call(obj, sym), true, 'symbol is enumerable');\n\tt.deepEqual(Object.getOwnPropertyDescriptor(obj, sym), {\n\t\tconfigurable: true,\n\t\tenumerable: true,\n\t\tvalue: 42,\n\t\twritable: true\n\t}, 'property descriptor is correct');\n};\n/shams.js\u0006'use strict';\n\n/* eslint complexity: [2, 18], max-statements: [2, 33] */\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tvar symObj = Object(sym);\n\tif (typeof sym === 'string') { return false; }\n\n\tif (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }\n\tif (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(symObj instanceof Symbol)) { return false; }\n\n\t// if (typeof Symbol.prototype.toString !== 'function') { return false; }\n\t// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\tvar descriptor = Object.getOwnPropertyDescriptor(obj, sym);\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n/package.json\nX{\n\t\"name\": \"has-symbols\",\n\t\"version\": \"1.0.3\",\n\t\"description\": \"Determine if the JS environment has Symbol support. Supports spec, or shams.\",\n\t\"main\": \"index.js\",\n\t\"scripts\": {\n\t\t\"prepublishOnly\": \"safe-publish-latest\",\n\t\t\"prepublish\": \"not-in-publish || npm run prepublishOnly\",\n\t\t\"pretest\": \"npm run --silent lint\",\n\t\t\"test\": \"npm run tests-only\",\n\t\t\"posttest\": \"aud --production\",\n\t\t\"tests-only\": \"npm run test:stock && npm run test:staging && npm run test:shams\",\n\t\t\"test:stock\": \"nyc node test\",\n\t\t\"test:staging\": \"nyc node --harmony --es-staging test\",\n\t\t\"test:shams\": \"npm run --silent test:shams:getownpropertysymbols && npm run --silent test:shams:corejs\",\n\t\t\"test:shams:corejs\": \"nyc node test/shams/core-js.js\",\n\t\t\"test:shams:getownpropertysymbols\": \"nyc node test/shams/get-own-property-symbols.js\",\n\t\t\"lint\": \"eslint --ext=js,mjs .\",\n\t\t\"version\": \"auto-changelog && git add CHANGELOG.md\",\n\t\t\"postversion\": \"auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \\\"v$(node -e \\\"console.log(require('./package.json').version)\\\")\\\"\"\n\t},\n\t\"repository\": {\n\t\t\"type\": \"git\",\n\t\t\"url\": \"git://github.com/inspect-js/has-symbols.git\"\n\t},\n\t\"keywords\": [\n\t\t\"Symbol\",\n\t\t\"symbols\",\n\t\t\"typeof\",\n\t\t\"sham\",\n\t\t\"polyfill\",\n\t\t\"native\",\n\t\t\"core-js\",\n\t\t\"ES6\"\n\t],\n\t\"author\": {\n\t\t\"name\": \"Jordan Harband\",\n\t\t\"email\": \"ljharb@gmail.com\",\n\t\t\"url\": \"http://ljharb.codes\"\n\t},\n\t\"contributors\": [\n\t\t{\n\t\t\t\"name\": \"Jordan Harband\",\n\t\t\t\"email\": \"ljharb@gmail.com\",\n\t\t\t\"url\": \"http://ljharb.codes\"\n\t\t}\n\t],\n\t\"funding\": {\n\t\t\"url\": \"https://github.com/sponsors/ljharb\"\n\t},\n\t\"license\": \"MIT\",\n\t\"bugs\": {\n\t\t\"url\": \"https://github.com/ljharb/has-symbols/issues\"\n\t},\n\t\"homepage\": \"https://github.com/ljharb/has-symbols#readme\",\n\t\"devDependencies\": {\n\t\t\"@ljharb/eslint-config\": \"^20.2.3\",\n\t\t\"aud\": \"^2.0.0\",\n\t\t\"auto-changelog\": \"^2.4.0\",\n\t\t\"core-js\": \"^2.6.12\",\n\t\t\"eslint\": \"=8.8.0\",\n\t\t\"get-own-property-symbols\": \"^0.9.5\",\n\t\t\"nyc\": \"^10.3.2\",\n\t\t\"safe-publish-latest\": \"^2.0.0\",\n\t\t\"tape\": \"^5.5.2\"\n\t},\n\t\"testling\": {\n\t\t\"files\": \"test/index.js\",\n\t\t\"browsers\": [\n\t\t\t\"iexplore/6.0..latest\",\n\t\t\t\"firefox/3.0..6.0\",\n\t\t\t\"firefox/15.0..latest\",\n\t\t\t\"firefox/nightly\",\n\t\t\t\"chrome/4.0..10.0\",\n\t\t\t\"chrome/20.0..latest\",\n\t\t\t\"chrome/canary\",\n\t\t\t\"opera/10.0..latest\",\n\t\t\t\"opera/next\",\n\t\t\t\"safari/4.0..latest\",\n\t\t\t\"ipad/6.0..latest\",\n\t\t\t\"iphone/6.0..latest\",\n\t\t\t\"android-browser/4.2\"\n\t\t]\n\t},\n\t\"engines\": {\n\t\t\"node\": \">= 0.4\"\n\t},\n\t\"auto-changelog\": {\n\t\t\"output\": \"CHANGELOG.md\",\n\t\t\"template\": \"keepachangelog\",\n\t\t\"unreleased\": false,\n\t\t\"commitLimit\": false,\n\t\t\"backfillLimit\": false,\n\t\t\"hideCredit\": true\n\t},\n\t\"greenkeeper\": {\n\t\t\"ignore\": [\n\t\t\t\"core-js\"\n\t\t]\n\t}\n}\n/README.md\u0007# has-symbols <sup>[![Version Badge][2]][1]</sup>\n\n[![github actions][actions-image]][actions-url]\n[![coverage][codecov-image]][codecov-url]\n[![dependency status][5]][6]\n[![dev dependency status][7]][8]\n[![License][license-image]][license-url]\n[![Downloads][downloads-image]][downloads-url]\n\n[![npm badge][11]][1]\n\nDetermine if the JS environment has Symbol support. Supports spec, or shams.\n\n## Example\n\n```js\nvar hasSymbols = require('has-symbols');\n\nhasSymbols() === true; // if the environment has native Symbol support. Not polyfillable, not forgeable.\n\nvar hasSymbolsKinda = require('has-symbols/shams');\nhasSymbolsKinda() === true; // if the environment has a Symbol sham that mostly follows the spec.\n```\n\n## Supported Symbol shams\n - get-own-property-symbols [npm](https://www.npmjs.com/package/get-own-property-symbols) | [github](https://github.com/WebReflection/get-own-property-symbols)\n - core-js [npm](https://www.npmjs.com/package/core-js) | [github](https://github.com/zloirock/core-js)\n\n## Tests\nSimply clone the repo, `npm install`, and run `npm test`\n\n[1]: https://npmjs.org/package/has-symbols\n[2]: https://versionbadg.es/inspect-js/has-symbols.svg\n[5]: https://david-dm.org/inspect-js/has-symbols.svg\n[6]: https://david-dm.org/inspect-js/has-symbols\n[7]: https://david-dm.org/inspect-js/has-symbols/dev-status.svg\n[8]: https://david-dm.org/inspect-js/has-symbols#info=devDependencies\n[11]: https://nodei.co/npm/has-symbols.png?downloads=true&stars=true\n[license-image]: https://img.shields.io/npm/l/has-symbols.svg\n[license-url]: LICENSE\n[downloads-image]: https://img.shields.io/npm/dm/has-symbols.svg\n[downloads-url]: https://npm-stat.com/charts.html?package=has-symbols\n[codecov-image]: https://codecov.io/gh/inspect-js/has-symbols/branch/main/graphs/badge.svg\n[codecov-url]: https://app.codecov.io/gh/inspect-js/has-symbols/\n[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/inspect-js/has-symbols\n[actions-url]: https://github.com/inspect-js/has-symbols/actions\n/.eslintrcĤ{\n\t\"root\": true,\n\n\t\"extends\": \"@ljharb\",\n\n\t\"rules\": {\n\t\t\"max-statements-per-line\": [2, { \"max\": 2 }],\n\t\t\"no-magic-numbers\": 0,\n\t\t\"multiline-comment-style\": 0,\n\t}\n}\n/index.js\u0001'use strict';\n\nvar origSymbol = typeof Symbol !== 'undefined' && Symbol;\nvar hasSymbolSham = require('./shams');\n\nmodule.exports = function hasNativeSymbols() {\n\tif (typeof origSymbol !== 'function') { return false; }\n\tif (typeof Symbol !== 'function') { return false; }\n\tif (typeof origSymbol('foo') !== 'symbol') { return false; }\n\tif (typeof Symbol('bar') !== 'symbol') { return false; }\n\n\treturn hasSymbolSham();\n};\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/aGFzQDEuMC4z",
    "content": "/src/index.jsā'use strict';\n\nvar bind = require('function-bind');\n\nmodule.exports = bind.call(Function.call, Object.prototype.hasOwnProperty);\n/test/index.js\u0001K'use strict';\n\nvar test = require('tape');\nvar has = require('../');\n\ntest('has', function (t) {\n  t.equal(has({}, 'hasOwnProperty'), false, 'object literal does not have own property \"hasOwnProperty\"');\n  t.equal(has(Object.prototype, 'hasOwnProperty'), true, 'Object.prototype has own property \"hasOwnProperty\"');\n  t.end();\n});\n/package.json\u0003{\n  \"name\": \"has\",\n  \"description\": \"Object.prototype.hasOwnProperty.call shortcut\",\n  \"version\": \"1.0.3\",\n  \"homepage\": \"https://github.com/tarruda/has\",\n  \"author\": {\n    \"name\": \"Thiago de Arruda\",\n    \"email\": \"tpadilha84@gmail.com\"\n  },\n \"contributors\": [\n    {\n      \"name\": \"Jordan Harband\",\n      \"email\": \"ljharb@gmail.com\",\n      \"url\": \"http://ljharb.codes\"\n    }\n  ],\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git://github.com/tarruda/has.git\"\n  },\n  \"bugs\": {\n    \"url\": \"https://github.com/tarruda/has/issues\"\n  },\n  \"license\": \"MIT\",\n  \"licenses\": [\n    {\n      \"type\": \"MIT\",\n      \"url\": \"https://github.com/tarruda/has/blob/master/LICENSE-MIT\"\n    }\n  ],\n  \"main\": \"./src\",\n  \"dependencies\": {\n    \"function-bind\": \"^1.1.1\"\n  },\n  \"devDependencies\": {\n    \"@ljharb/eslint-config\": \"^12.2.1\",\n    \"eslint\": \"^4.19.1\",\n    \"tape\": \"^4.9.0\"\n  },\n  \"engines\": {\n    \"node\": \">= 0.4.0\"\n  },\n  \"scripts\": {\n    \"lint\": \"eslint .\",\n    \"pretest\": \"npm run lint\",\n    \"test\": \"tape test\"\n  }\n}\n/README.md# has\n\n> Object.prototype.hasOwnProperty.call shortcut\n\n## Installation\n\n```sh\nnpm install --save has\n```\n\n## Usage\n\n```js\nvar has = require('has');\n\nhas({}, 'hasOwnProperty'); // false\nhas(Object.prototype, 'hasOwnProperty'); // true\n```\n/LICENSE-MIT\u0004$Copyright (c) 2013 Thiago de Arruda\n\nPermission is hereby granted, free of charge, to any person\nobtaining a copy of this software and associated documentation\nfiles (the \"Software\"), to deal in the Software without\nrestriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the\nSoftware is furnished to do so, subject to the following\nconditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\nOF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\nHOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\nWHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\nFROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\nOTHER DEALINGS IN THE SOFTWARE.\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/aGFzaC1zdW1AMi4wLjA=",
    "content": "/.jshintrc\u0001Y{\n  \"curly\": true,\n  \"eqeqeq\": true,\n  \"newcap\": true,\n  \"noarg\": true,\n  \"noempty\": true,\n  \"nonew\": true,\n  \"sub\": true,\n  \"validthis\": true,\n  \"undef\": true,\n  \"trailing\": true,\n  \"boss\": true,\n  \"eqnull\": true,\n  \"strict\": true,\n  \"immed\": true,\n  \"expr\": true,\n  \"latedef\": \"nofunc\",\n  \"quotmark\": \"single\",\n  \"indent\": 2,\n  \"node\": true\n}\n/package.json\u0002{\n  \"name\": \"hash-sum\",\n  \"description\": \"Blazing fast unique hash generator\",\n  \"version\": \"2.0.0\",\n  \"homepage\": \"https://github.com/bevacqua/hash-sum\",\n  \"authors\": [\n    \"Nicolas Bevacqua <nicolasbevacqua@gmail.com>\"\n  ],\n  \"license\": \"MIT\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git://github.com/bevacqua/hash-sum.git\"\n  },\n  \"bugs\": {\n    \"url\": \"https://github.com/bevacqua/hash-sum/issues\"\n  },\n  \"main\": \"hash-sum.js\",\n  \"scripts\": {\n    \"test\": \"jshint . && tape test.js\"\n  },\n  \"dependencies\": {},\n  \"devDependencies\": {\n    \"jshint\": \"2.5.0\",\n    \"jshint-stylish\": \"0.2.0\",\n    \"lodash\": \"4.17.11\",\n    \"tape\": \"3.0.3\"\n  }\n}\n/license\u0004:The MIT License (MIT)\n\nCopyright © 2014 Nicolas Bevacqua\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n/test.js\b'use strict';\n\nvar _ = require('lodash');\nvar test = require('tape');\nvar sum = require('./');\n\ntest('creates unique hashes', function (t) {\n  var cases = [];\n\n  test_case([0,1,2,3]);\n  test_case({0:0,1:1,2:2,3:3});\n  test_case({0:0,1:1,2:2,3:3,length:4});\n  test_case({url:12});\n  test_case({headers:12});\n  test_case({headers:122});\n  test_case({headers:'122'});\n  test_case({headers:{accept:'text/plain'}});\n  test_case({payload:[0,1,2,3],headers:[{a:'b'}]});\n  test_case({a:function () {}});\n  test_case({b:function () {}});\n  test_case({b:function (a) {}});\n  test_case(function () {});\n  test_case(function (a) {});\n  test_case(function (b) {});\n  test_case(function (a) { return a;});\n  test_case(function (a) {return a;});\n  test_case('', '\\'\\'');\n  test_case('null', '\\'null\\'');\n  test_case('false', '\\'false\\'');\n  test_case('true', '\\'true\\'');\n  test_case('0', '\\'0\\'');\n  test_case('1', '\\'1\\'');\n  test_case('void 0', '\\'void 0\\'');\n  test_case('undefined', '\\'undefined\\'');\n  test_case(null);\n  test_case(false);\n  test_case(true);\n  test_case(Infinity);\n  test_case(-Infinity);\n  test_case(NaN);\n  test_case(0);\n  test_case(1);\n  test_case(void 0);\n  test_case({});\n  test_case({a:{},b:{}});\n  test_case({valueOf(){return 1}});\n  test_case({valueOf(){return 2}});\n  test_case([]);\n  test_case(new Date());\n  test_case(new Date(2019, 5, 28));\n  test_case(new Date(1988, 5, 9));\n  test_case(global, 'global');\n\n  const uniqCases = _.uniqBy(cases, 'hash')\n  _.uniqBy(cases, 'hash').forEach(function (expected) {\n    var matches = _.filter(cases, { hash: expected.hash })\n    t.equal(matches.length, 1, expected.hash + ': ' + _.map(matches, 'value').join(' '))\n  })\n\n  t.end();\n\n  function test_case(value, name) {\n    var hash = sum(value);\n    cases.push({ value, hash });\n    console.log('%s from:', hash, name || value);\n  }\n});\n\ntest('hashes clash if same properties', function (t) {\n  equals(function () {}, function () {});\n  equals(function (a) {}, function (a) {});\n  equals({a:'1'},{a:'1'});\n  equals({a:'1',b:1},{b:1,a:'1'});\n  equals({valueOf(){return 1}},{valueOf(){return 1}});\n  t.end();\n\n  function equals (a, b) {\n    t.equal(sum(a), sum(b));\n  }\n});\n/.jshintignore\rnode_modules\n/readme.md\u0007*# hash-sum\n\n> blazing fast unique hash generator\n\n# install\n\n```shell\nnpm i hash-sum -S\n```\n\n# features\n\n- no dependencies\n- minimal footprint\n- works in all of node.js, io.js, and the browser\n- hashes functions based on their source code\n- produces different hashes for different object types\n- support for circular references in objects\n- ignores property assignment order\n\n# `sum(value)`\n\nyields a four-byte hexadecimal hash based off of `value`.\n\n```\n# creates unique hashes\n00a34759 from: [ 0, 1, 2, 3 ]\na8996f0c from: { '0': 0, '1': 1, '2': 2, '3': 3 }\n5b4c2116 from: { '0': 0, '1': 1, '2': 2, '3': 3, length: 4 }\n2c937c45 from: { url: 12 }\n31d55010 from: { headers: 12 }\n2d2e11bc from: { headers: 122 }\nec99d958 from: { headers: '122' }\n18c00eee from: { headers: { accept: 'text/plain' } }\n6cb332c8 from: { payload: [ 0, 1, 2, 3 ], headers: [ { a: 'b' } ] }\n12ff55db from: { a: [Function: a] }\n46f806d2 from: { b: [Function: b] }\n0660d9c4 from: { b: [Function: b] }\n6c95fc65 from: function () {}\n2941766e from: function (a) {}\n294f8def from: function (b) {}\n2d9c0cb8 from: function (a) { return a;}\ned5c63fc from: function (a) {return a;}\nbba68bf6 from: ''\n2d27667d from: 'null'\n774b96ed from: 'false'\n2d2a1684 from: 'true'\n8daa1a0c from: '0'\n8daa1a0a from: '1'\ne38f07cc from: 'void 0'\n6037ea1a from: 'undefined'\n9b7df12e from: null\n3c206f76 from: false\n01e34ba8 from: true\n8a8f9624 from: Infinity\n0315bf8f from: -Infinity\n64a48b16 from: NaN\n1a96284a from: 0\n1a96284b from: 1\n29172c1a from: undefined\n59322f29 from: {}\n095b3a22 from: { a: {}, b: {} }\n63be56dd from: { valueOf: [Function: valueOf] }\n63be4f5c from: { valueOf: [Function: valueOf] }\n5d844489 from: []\nba0bfa14 from: 2019-06-28T21:24:31.215Z\n49324d16 from: 2019-06-28T03:00:00.000Z\n434c9188 from: 1988-06-09T03:00:00.000Z\nce1b5e44 from: global\n```\n\n# license\n\nMIT\n/.editorconfig# editorconfig.org\nroot = true\n\n[*]\nindent_style = space\nindent_size = 2\nend_of_line = lf\ncharset = utf-8\ntrim_trailing_whitespace = true\ninsert_final_newline = true\n\n[*.md]\ntrim_trailing_whitespace = false\n/hash-sum.js\u0006\u0006'use strict';\n\nfunction pad (hash, len) {\n  while (hash.length < len) {\n    hash = '0' + hash;\n  }\n  return hash;\n}\n\nfunction fold (hash, text) {\n  var i;\n  var chr;\n  var len;\n  if (text.length === 0) {\n    return hash;\n  }\n  for (i = 0, len = text.length; i < len; i++) {\n    chr = text.charCodeAt(i);\n    hash = ((hash << 5) - hash) + chr;\n    hash |= 0;\n  }\n  return hash < 0 ? hash * -2 : hash;\n}\n\nfunction foldObject (hash, o, seen) {\n  return Object.keys(o).sort().reduce(foldKey, hash);\n  function foldKey (hash, key) {\n    return foldValue(hash, o[key], key, seen);\n  }\n}\n\nfunction foldValue (input, value, key, seen) {\n  var hash = fold(fold(fold(input, key), toString(value)), typeof value);\n  if (value === null) {\n    return fold(hash, 'null');\n  }\n  if (value === undefined) {\n    return fold(hash, 'undefined');\n  }\n  if (typeof value === 'object' || typeof value === 'function') {\n    if (seen.indexOf(value) !== -1) {\n      return fold(hash, '[Circular]' + key);\n    }\n    seen.push(value);\n\n    var objHash = foldObject(hash, value, seen)\n\n    if (!('valueOf' in value) || typeof value.valueOf !== 'function') {\n      return objHash;\n    }\n\n    try {\n      return fold(objHash, String(value.valueOf()))\n    } catch (err) {\n      return fold(objHash, '[valueOf exception]' + (err.stack || err.message))\n    }\n  }\n  return fold(hash, value.toString());\n}\n\nfunction toString (o) {\n  return Object.prototype.toString.call(o);\n}\n\nfunction sum (o) {\n  return pad(foldValue(0, o, '', []).toString(16), 8);\n}\n\nmodule.exports = sum;\n/changelog.markdown\u0001\u0013# 2.0.0\n\n- Now takes into account result of calling `valueOf` functions when they exist\n\n# 1.0.2 Quick Sort\n\n- Sorts object keys so that property order doesn't affect outcome\n\n# 1.0.1 Perfect Circle\n\n- Guard against circular references\n\n# 1.0.0 IPO\n\n- Initial Public Release\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/aHR0cC1lcnJvcnNAMi4wLjA=",
    "content": "/HISTORY.md\u000f2.0.0 / 2021-12-17\n==================\n\n  * Drop support for Node.js 0.6\n  * Remove `I'mateapot` export; use `ImATeapot` instead\n  * Remove support for status being non-first argument\n  * Rename `UnorderedCollection` constructor to `TooEarly`\n  * deps: depd@2.0.0\n    - Replace internal `eval` usage with `Function` constructor\n    - Use instance methods on `process` to check for listeners\n  * deps: statuses@2.0.1\n    - Fix messaging casing of `418 I'm a Teapot`\n    - Remove code 306\n    - Rename `425 Unordered Collection` to standard `425 Too Early`\n\n2021-11-14 / 1.8.1\n==================\n\n  * deps: toidentifier@1.0.1\n\n2020-06-29 / 1.8.0\n==================\n\n  * Add `isHttpError` export to determine if value is an HTTP error\n  * deps: setprototypeof@1.2.0\n\n2019-06-24 / 1.7.3\n==================\n\n  * deps: inherits@2.0.4\n\n2019-02-18 / 1.7.2\n==================\n\n  * deps: setprototypeof@1.1.1\n\n2018-09-08 / 1.7.1\n==================\n\n  * Fix error creating objects in some environments\n\n2018-07-30 / 1.7.0\n==================\n\n  * Set constructor name when possible\n  * Use `toidentifier` module to make class names\n  * deps: statuses@'>= 1.5.0 < 2'\n\n2018-03-29 / 1.6.3\n==================\n\n  * deps: depd@~1.1.2\n    - perf: remove argument reassignment\n  * deps: setprototypeof@1.1.0\n  * deps: statuses@'>= 1.4.0 < 2'\n\n2017-08-04 / 1.6.2\n==================\n\n  * deps: depd@1.1.1\n    - Remove unnecessary `Buffer` loading\n\n2017-02-20 / 1.6.1\n==================\n\n  * deps: setprototypeof@1.0.3\n    - Fix shim for old browsers\n\n2017-02-14 / 1.6.0\n==================\n\n  * Accept custom 4xx and 5xx status codes in factory\n  * Add deprecation message to `\"I'mateapot\"` export\n  * Deprecate passing status code as anything except first argument in factory\n  * Deprecate using non-error status codes\n  * Make `message` property enumerable for `HttpError`s\n\n2016-11-16 / 1.5.1\n==================\n\n  * deps: inherits@2.0.3\n    - Fix issue loading in browser\n  * deps: setprototypeof@1.0.2\n  * deps: statuses@'>= 1.3.1 < 2'\n\n2016-05-18 / 1.5.0\n==================\n\n  * Support new code `421 Misdirected Request`\n  * Use `setprototypeof` module to replace `__proto__` setting\n  * deps: statuses@'>= 1.3.0 < 2'\n    - Add `421 Misdirected Request`\n    - perf: enable strict mode\n  * perf: enable strict mode\n\n2016-01-28 / 1.4.0\n==================\n\n  * Add `HttpError` export, for `err instanceof createError.HttpError`\n  * deps: inherits@2.0.1\n  * deps: statuses@'>= 1.2.1 < 2'\n    - Fix message for status 451\n    - Remove incorrect nginx status code\n\n2015-02-02 / 1.3.1\n==================\n\n  * Fix regression where status can be overwritten in `createError` `props`\n\n2015-02-01 / 1.3.0\n==================\n\n  * Construct errors using defined constructors from `createError`\n  * Fix error names that are not identifiers\n    - `createError[\"I'mateapot\"]` is now `createError.ImATeapot`\n  * Set a meaningful `name` property on constructed errors\n\n2014-12-09 / 1.2.8\n==================\n\n  * Fix stack trace from exported function\n  * Remove `arguments.callee` usage\n\n2014-10-14 / 1.2.7\n==================\n\n  * Remove duplicate line\n\n2014-10-02 / 1.2.6\n==================\n\n  * Fix `expose` to be `true` for `ClientError` constructor\n\n2014-09-28 / 1.2.5\n==================\n\n  * deps: statuses@1\n\n2014-09-21 / 1.2.4\n==================\n\n  * Fix dependency version to work with old `npm`s\n\n2014-09-21 / 1.2.3\n==================\n\n  * deps: statuses@~1.1.0\n\n2014-09-21 / 1.2.2\n==================\n\n  * Fix publish error\n\n2014-09-21 / 1.2.1\n==================\n\n  * Support Node.js 0.6\n  * Use `inherits` instead of `util`\n\n2014-09-09 / 1.2.0\n==================\n\n  * Fix the way inheriting functions\n  * Support `expose` being provided in properties argument\n\n2014-09-08 / 1.1.0\n==================\n\n  * Default status to 500\n  * Support provided `error` to extend\n\n2014-09-08 / 1.0.1\n==================\n\n  * Fix accepting string message\n\n2014-09-08 / 1.0.0\n==================\n\n  * Initial release\n/LICENSE\u0004\nThe MIT License (MIT)\n\nCopyright (c) 2014 Jonathan Ong me@jongleberry.com\nCopyright (c) 2016 Douglas Christopher Wilson doug@somethingdoug.com\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n/README.md\u0017J# http-errors\n\n[![NPM Version][npm-version-image]][npm-url]\n[![NPM Downloads][npm-downloads-image]][node-url]\n[![Node.js Version][node-image]][node-url]\n[![Build Status][ci-image]][ci-url]\n[![Test Coverage][coveralls-image]][coveralls-url]\n\nCreate HTTP errors for Express, Koa, Connect, etc. with ease.\n\n## Install\n\nThis is a [Node.js](https://nodejs.org/en/) module available through the\n[npm registry](https://www.npmjs.com/). Installation is done using the\n[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally):\n\n```console\n$ npm install http-errors\n```\n\n## Example\n\n```js\nvar createError = require('http-errors')\nvar express = require('express')\nvar app = express()\n\napp.use(function (req, res, next) {\n  if (!req.user) return next(createError(401, 'Please login to view this page.'))\n  next()\n})\n```\n\n## API\n\nThis is the current API, currently extracted from Koa and subject to change.\n\n### Error Properties\n\n- `expose` - can be used to signal if `message` should be sent to the client,\n  defaulting to `false` when `status` >= 500\n- `headers` - can be an object of header names to values to be sent to the\n  client, defaulting to `undefined`. When defined, the key names should all\n  be lower-cased\n- `message` - the traditional error message, which should be kept short and all\n  single line\n- `status` - the status code of the error, mirroring `statusCode` for general\n  compatibility\n- `statusCode` - the status code of the error, defaulting to `500`\n\n### createError([status], [message], [properties])\n\nCreate a new error object with the given message `msg`.\nThe error object inherits from `createError.HttpError`.\n\n```js\nvar err = createError(404, 'This video does not exist!')\n```\n\n- `status: 500` - the status code as a number\n- `message` - the message of the error, defaulting to node's text for that status code.\n- `properties` - custom properties to attach to the object\n\n### createError([status], [error], [properties])\n\nExtend the given `error` object with `createError.HttpError`\nproperties. This will not alter the inheritance of the given\n`error` object, and the modified `error` object is the\nreturn value.\n\n<!-- eslint-disable no-redeclare -->\n\n```js\nfs.readFile('foo.txt', function (err, buf) {\n  if (err) {\n    if (err.code === 'ENOENT') {\n      var httpError = createError(404, err, { expose: false })\n    } else {\n      var httpError = createError(500, err)\n    }\n  }\n})\n```\n\n- `status` - the status code as a number\n- `error` - the error object to extend\n- `properties` - custom properties to attach to the object\n\n### createError.isHttpError(val)\n\nDetermine if the provided `val` is an `HttpError`. This will return `true`\nif the error inherits from the `HttpError` constructor of this module or\nmatches the \"duck type\" for an error this module creates. All outputs from\nthe `createError` factory will return `true` for this function, including\nif an non-`HttpError` was passed into the factory.\n\n### new createError\\[code || name\\](\\[msg]\\))\n\nCreate a new error object with the given message `msg`.\nThe error object inherits from `createError.HttpError`.\n\n```js\nvar err = new createError.NotFound()\n```\n\n- `code` - the status code as a number\n- `name` - the name of the error as a \"bumpy case\", i.e. `NotFound` or `InternalServerError`.\n\n#### List of all constructors\n\n|Status Code|Constructor Name             |\n|-----------|-----------------------------|\n|400        |BadRequest                   |\n|401        |Unauthorized                 |\n|402        |PaymentRequired              |\n|403        |Forbidden                    |\n|404        |NotFound                     |\n|405        |MethodNotAllowed             |\n|406        |NotAcceptable                |\n|407        |ProxyAuthenticationRequired  |\n|408        |RequestTimeout               |\n|409        |Conflict                     |\n|410        |Gone                         |\n|411        |LengthRequired               |\n|412        |PreconditionFailed           |\n|413        |PayloadTooLarge              |\n|414        |URITooLong                   |\n|415        |UnsupportedMediaType         |\n|416        |RangeNotSatisfiable          |\n|417        |ExpectationFailed            |\n|418        |ImATeapot                    |\n|421        |MisdirectedRequest           |\n|422        |UnprocessableEntity          |\n|423        |Locked                       |\n|424        |FailedDependency             |\n|425        |TooEarly                     |\n|426        |UpgradeRequired              |\n|428        |PreconditionRequired         |\n|429        |TooManyRequests              |\n|431        |RequestHeaderFieldsTooLarge  |\n|451        |UnavailableForLegalReasons   |\n|500        |InternalServerError          |\n|501        |NotImplemented               |\n|502        |BadGateway                   |\n|503        |ServiceUnavailable           |\n|504        |GatewayTimeout               |\n|505        |HTTPVersionNotSupported      |\n|506        |VariantAlsoNegotiates        |\n|507        |InsufficientStorage          |\n|508        |LoopDetected                 |\n|509        |BandwidthLimitExceeded       |\n|510        |NotExtended                  |\n|511        |NetworkAuthenticationRequired|\n\n## License\n\n[MIT](LICENSE)\n\n[ci-image]: https://badgen.net/github/checks/jshttp/http-errors/master?label=ci\n[ci-url]: https://github.com/jshttp/http-errors/actions?query=workflow%3Aci\n[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/http-errors/master\n[coveralls-url]: https://coveralls.io/r/jshttp/http-errors?branch=master\n[node-image]: https://badgen.net/npm/node/http-errors\n[node-url]: https://nodejs.org/en/download\n[npm-downloads-image]: https://badgen.net/npm/dm/http-errors\n[npm-url]: https://npmjs.org/package/http-errors\n[npm-version-image]: https://badgen.net/npm/v/http-errors\n[travis-image]: https://badgen.net/travis/jshttp/http-errors/master\n[travis-url]: https://travis-ci.org/jshttp/http-errors\n/index.js\u0018/*!\n * http-errors\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar deprecate = require('depd')('http-errors')\nvar setPrototypeOf = require('setprototypeof')\nvar statuses = require('statuses')\nvar inherits = require('inherits')\nvar toIdentifier = require('toidentifier')\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = createError\nmodule.exports.HttpError = createHttpErrorConstructor()\nmodule.exports.isHttpError = createIsHttpErrorFunction(module.exports.HttpError)\n\n// Populate exports for all constructors\npopulateConstructorExports(module.exports, statuses.codes, module.exports.HttpError)\n\n/**\n * Get the code class of a status code.\n * @private\n */\n\nfunction codeClass (status) {\n  return Number(String(status).charAt(0) + '00')\n}\n\n/**\n * Create a new HTTP Error.\n *\n * @returns {Error}\n * @public\n */\n\nfunction createError () {\n  // so much arity going on ~_~\n  var err\n  var msg\n  var status = 500\n  var props = {}\n  for (var i = 0; i < arguments.length; i++) {\n    var arg = arguments[i]\n    var type = typeof arg\n    if (type === 'object' && arg instanceof Error) {\n      err = arg\n      status = err.status || err.statusCode || status\n    } else if (type === 'number' && i === 0) {\n      status = arg\n    } else if (type === 'string') {\n      msg = arg\n    } else if (type === 'object') {\n      props = arg\n    } else {\n      throw new TypeError('argument #' + (i + 1) + ' unsupported type ' + type)\n    }\n  }\n\n  if (typeof status === 'number' && (status < 400 || status >= 600)) {\n    deprecate('non-error status code; use only 4xx or 5xx status codes')\n  }\n\n  if (typeof status !== 'number' ||\n    (!statuses.message[status] && (status < 400 || status >= 600))) {\n    status = 500\n  }\n\n  // constructor\n  var HttpError = createError[status] || createError[codeClass(status)]\n\n  if (!err) {\n    // create error\n    err = HttpError\n      ? new HttpError(msg)\n      : new Error(msg || statuses.message[status])\n    Error.captureStackTrace(err, createError)\n  }\n\n  if (!HttpError || !(err instanceof HttpError) || err.status !== status) {\n    // add properties to generic error\n    err.expose = status < 500\n    err.status = err.statusCode = status\n  }\n\n  for (var key in props) {\n    if (key !== 'status' && key !== 'statusCode') {\n      err[key] = props[key]\n    }\n  }\n\n  return err\n}\n\n/**\n * Create HTTP error abstract base class.\n * @private\n */\n\nfunction createHttpErrorConstructor () {\n  function HttpError () {\n    throw new TypeError('cannot construct abstract class')\n  }\n\n  inherits(HttpError, Error)\n\n  return HttpError\n}\n\n/**\n * Create a constructor for a client error.\n * @private\n */\n\nfunction createClientErrorConstructor (HttpError, name, code) {\n  var className = toClassName(name)\n\n  function ClientError (message) {\n    // create the error object\n    var msg = message != null ? message : statuses.message[code]\n    var err = new Error(msg)\n\n    // capture a stack trace to the construction point\n    Error.captureStackTrace(err, ClientError)\n\n    // adjust the [[Prototype]]\n    setPrototypeOf(err, ClientError.prototype)\n\n    // redefine the error message\n    Object.defineProperty(err, 'message', {\n      enumerable: true,\n      configurable: true,\n      value: msg,\n      writable: true\n    })\n\n    // redefine the error name\n    Object.defineProperty(err, 'name', {\n      enumerable: false,\n      configurable: true,\n      value: className,\n      writable: true\n    })\n\n    return err\n  }\n\n  inherits(ClientError, HttpError)\n  nameFunc(ClientError, className)\n\n  ClientError.prototype.status = code\n  ClientError.prototype.statusCode = code\n  ClientError.prototype.expose = true\n\n  return ClientError\n}\n\n/**\n * Create function to test is a value is a HttpError.\n * @private\n */\n\nfunction createIsHttpErrorFunction (HttpError) {\n  return function isHttpError (val) {\n    if (!val || typeof val !== 'object') {\n      return false\n    }\n\n    if (val instanceof HttpError) {\n      return true\n    }\n\n    return val instanceof Error &&\n      typeof val.expose === 'boolean' &&\n      typeof val.statusCode === 'number' && val.status === val.statusCode\n  }\n}\n\n/**\n * Create a constructor for a server error.\n * @private\n */\n\nfunction createServerErrorConstructor (HttpError, name, code) {\n  var className = toClassName(name)\n\n  function ServerError (message) {\n    // create the error object\n    var msg = message != null ? message : statuses.message[code]\n    var err = new Error(msg)\n\n    // capture a stack trace to the construction point\n    Error.captureStackTrace(err, ServerError)\n\n    // adjust the [[Prototype]]\n    setPrototypeOf(err, ServerError.prototype)\n\n    // redefine the error message\n    Object.defineProperty(err, 'message', {\n      enumerable: true,\n      configurable: true,\n      value: msg,\n      writable: true\n    })\n\n    // redefine the error name\n    Object.defineProperty(err, 'name', {\n      enumerable: false,\n      configurable: true,\n      value: className,\n      writable: true\n    })\n\n    return err\n  }\n\n  inherits(ServerError, HttpError)\n  nameFunc(ServerError, className)\n\n  ServerError.prototype.status = code\n  ServerError.prototype.statusCode = code\n  ServerError.prototype.expose = false\n\n  return ServerError\n}\n\n/**\n * Set the name of a function, if possible.\n * @private\n */\n\nfunction nameFunc (func, name) {\n  var desc = Object.getOwnPropertyDescriptor(func, 'name')\n\n  if (desc && desc.configurable) {\n    desc.value = name\n    Object.defineProperty(func, 'name', desc)\n  }\n}\n\n/**\n * Populate the exports object with constructors for every error class.\n * @private\n */\n\nfunction populateConstructorExports (exports, codes, HttpError) {\n  codes.forEach(function forEachCode (code) {\n    var CodeError\n    var name = toIdentifier(statuses.message[code])\n\n    switch (codeClass(code)) {\n      case 400:\n        CodeError = createClientErrorConstructor(HttpError, name, code)\n        break\n      case 500:\n        CodeError = createServerErrorConstructor(HttpError, name, code)\n        break\n    }\n\n    if (CodeError) {\n      // export the constructor\n      exports[code] = CodeError\n      exports[name] = CodeError\n    }\n  })\n}\n\n/**\n * Get a class name from a name identifier.\n * @private\n */\n\nfunction toClassName (name) {\n  return name.substr(-5) !== 'Error'\n    ? name + 'Error'\n    : name\n}\n/package.json\u0005\"{\n  \"name\": \"http-errors\",\n  \"description\": \"Create HTTP error objects\",\n  \"version\": \"2.0.0\",\n  \"author\": \"Jonathan Ong <me@jongleberry.com> (http://jongleberry.com)\",\n  \"contributors\": [\n    \"Alan Plum <me@pluma.io>\",\n    \"Douglas Christopher Wilson <doug@somethingdoug.com>\"\n  ],\n  \"license\": \"MIT\",\n  \"repository\": \"jshttp/http-errors\",\n  \"dependencies\": {\n    \"depd\": \"2.0.0\",\n    \"inherits\": \"2.0.4\",\n    \"setprototypeof\": \"1.2.0\",\n    \"statuses\": \"2.0.1\",\n    \"toidentifier\": \"1.0.1\"\n  },\n  \"devDependencies\": {\n    \"eslint\": \"7.32.0\",\n    \"eslint-config-standard\": \"14.1.1\",\n    \"eslint-plugin-import\": \"2.25.3\",\n    \"eslint-plugin-markdown\": \"2.2.1\",\n    \"eslint-plugin-node\": \"11.1.0\",\n    \"eslint-plugin-promise\": \"5.2.0\",\n    \"eslint-plugin-standard\": \"4.1.0\",\n    \"mocha\": \"9.1.3\",\n    \"nyc\": \"15.1.0\"\n  },\n  \"engines\": {\n    \"node\": \">= 0.8\"\n  },\n  \"scripts\": {\n    \"lint\": \"eslint . && node ./scripts/lint-readme-list.js\",\n    \"test\": \"mocha --reporter spec --bail\",\n    \"test-ci\": \"nyc --reporter=lcov --reporter=text npm test\",\n    \"test-cov\": \"nyc --reporter=html --reporter=text npm test\",\n    \"version\": \"node scripts/version-history.js && git add HISTORY.md\"\n  },\n  \"keywords\": [\n    \"http\",\n    \"error\"\n  ],\n  \"files\": [\n    \"index.js\",\n    \"HISTORY.md\",\n    \"LICENSE\",\n    \"README.md\"\n  ]\n}\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/aHVtYW4tc2lnbmFsc0AzLjAuMQ==",
    "content": "/build/src/realtime.js.map\u0004{\"version\":3,\"sources\":[\"../../src/realtime.js\"],\"names\":[\"getRealtimeSignals\",\"length\",\"SIGRTMAX\",\"SIGRTMIN\",\"Array\",\"from\",\"getRealtimeSignal\",\"value\",\"index\",\"name\",\"number\",\"action\",\"description\",\"standard\"],\"mappings\":\";AACA,MAAO,MAAMA,CAAAA,kBAAkB,CAAG,UAAY;AAC5C,KAAMC,CAAAA,MAAM,CAAGC,QAAQ,CAAGC,QAAX,CAAsB,CAArC;AACA,MAAOC,CAAAA,KAAK,CAACC,IAAN,CAAW,CAAEJ,MAAF,CAAX,CAAuBK,iBAAvB,CAAP;AACD,CAHM;;AAKP,KAAMA,CAAAA,iBAAiB,CAAG,SAAUC,KAAV,CAAiBC,KAAjB,CAAwB;AAChD,MAAO;AACLC,IAAI,CAAG,QAAOD,KAAK,CAAG,CAAE,EADnB;AAELE,MAAM,CAAEP,QAAQ,CAAGK,KAFd;AAGLG,MAAM,CAAE,WAHH;AAILC,WAAW,CAAE,wCAJR;AAKLC,QAAQ,CAAE,OALL,CAAP;;AAOD,CARD;;AAUA,KAAMV,CAAAA,QAAQ,CAAG,EAAjB;AACA,MAAO,MAAMD,CAAAA,QAAQ,CAAG,EAAjB\",\"sourcesContent\":[\"// List of realtime signals with information about them\\nexport const getRealtimeSignals = function () {\\n  const length = SIGRTMAX - SIGRTMIN + 1\\n  return Array.from({ length }, getRealtimeSignal)\\n}\\n\\nconst getRealtimeSignal = function (value, index) {\\n  return {\\n    name: `SIGRT${index + 1}`,\\n    number: SIGRTMIN + index,\\n    action: 'terminate',\\n    description: 'Application-specific signal (realtime)',\\n    standard: 'posix',\\n  }\\n}\\n\\nconst SIGRTMIN = 34\\nexport const SIGRTMAX = 64\\n\"],\"file\":\"src/realtime.js\"}/README.md\u0013[![Codecov](https://img.shields.io/codecov/c/github/ehmicky/human-signals.svg?label=tested&logo=codecov)](https://codecov.io/gh/ehmicky/human-signals)\n[![Build](https://github.com/ehmicky/human-signals/workflows/Build/badge.svg)](https://github.com/ehmicky/human-signals/actions)\n[![Node](https://img.shields.io/node/v/human-signals.svg?logo=node.js)](https://www.npmjs.com/package/human-signals)\n[![Twitter](https://img.shields.io/badge/%E2%80%8B-twitter-4cc61e.svg?logo=twitter)](https://twitter.com/intent/follow?screen_name=ehmicky)\n[![Medium](https://img.shields.io/badge/%E2%80%8B-medium-4cc61e.svg?logo=medium)](https://medium.com/@ehmicky)\n\nHuman-friendly process signals.\n\nThis is a map of known process signals with some information about each signal.\n\nUnlike\n[`os.constants.signals`](https://nodejs.org/api/os.html#os_signal_constants)\nthis includes:\n\n- human-friendly [descriptions](#description)\n- [default actions](#action), including whether they [can be prevented](#forced)\n- whether the signal is [supported](#supported) by the current OS\n\n# Example\n\n```js\nimport { signalsByName, signalsByNumber } from 'human-signals'\n\nconsole.log(signalsByName.SIGINT)\n// {\n//   name: 'SIGINT',\n//   number: 2,\n//   description: 'User interruption with CTRL-C',\n//   supported: true,\n//   action: 'terminate',\n//   forced: false,\n//   standard: 'ansi'\n// }\n\nconsole.log(signalsByNumber[8])\n// {\n//   name: 'SIGFPE',\n//   number: 8,\n//   description: 'Floating point arithmetic error',\n//   supported: true,\n//   action: 'core',\n//   forced: false,\n//   standard: 'ansi'\n// }\n```\n\n# Install\n\n```bash\nnpm install human-signals\n```\n\nThis package is an ES module and must be loaded using\n[an `import` or `import()` statement](https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c),\nnot `require()`.\n\n# Usage\n\n## signalsByName\n\n_Type_: `object`\n\nObject whose keys are signal [names](#name) and values are\n[signal objects](#signal).\n\n## signalsByNumber\n\n_Type_: `object`\n\nObject whose keys are signal [numbers](#number) and values are\n[signal objects](#signal).\n\n## signal\n\n_Type_: `object`\n\nSignal object with the following properties.\n\n### name\n\n_Type_: `string`\n\nStandard name of the signal, for example `'SIGINT'`.\n\n### number\n\n_Type_: `number`\n\nCode number of the signal, for example `2`. While most `number` are\ncross-platform, some are different between different OS.\n\n### description\n\n_Type_: `string`\n\nHuman-friendly description for the signal, for example\n`'User interruption with CTRL-C'`.\n\n### supported\n\n_Type_: `boolean`\n\nWhether the current OS can handle this signal in Node.js using\n[`process.on(name, handler)`](https://nodejs.org/api/process.html#process_signal_events).\n\nThe list of supported signals\n[is OS-specific](https://github.com/ehmicky/cross-platform-node-guide/blob/main/docs/6_networking_ipc/signals.md#cross-platform-signals).\n\n### action\n\n_Type_: `string`\\\n_Enum_: `'terminate'`, `'core'`, `'ignore'`, `'pause'`, `'unpause'`\n\nWhat is the default action for this signal when it is not handled.\n\n### forced\n\n_Type_: `boolean`\n\nWhether the signal's default action cannot be prevented. This is `true` for\n`SIGTERM`, `SIGKILL` and `SIGSTOP`.\n\n### standard\n\n_Type_: `string`\\\n_Enum_: `'ansi'`, `'posix'`, `'bsd'`, `'systemv'`, `'other'`\n\nWhich standard defined that signal.\n\n# Support\n\nFor any question, _don't hesitate_ to [submit an issue on GitHub](../../issues).\n\nEveryone is welcome regardless of personal background. We enforce a\n[Code of conduct](CODE_OF_CONDUCT.md) in order to promote a positive and\ninclusive environment.\n\n# Contributing\n\nThis project was made with ❤️. The simplest way to give back is by starring and\nsharing it online.\n\nIf the documentation is unclear or has a typo, please click on the page's `Edit`\nbutton (pencil icon) and suggest a correction.\n\nIf you would like to help us fix a bug or add a new feature, please check our\n[guidelines](CONTRIBUTING.md). Pull requests are welcome!\n\nThanks go to our wonderful contributors:\n\n<!-- ALL-CONTRIBUTORS-LIST:START -->\n<!-- prettier-ignore-start -->\n<!-- markdownlint-disable -->\n<table>\n  <tr>\n    <td align=\"center\"><a href=\"https://twitter.com/ehmicky\"><img src=\"https://avatars2.githubusercontent.com/u/8136211?v=4\" width=\"100px;\" alt=\"\"/><br /><sub><b>ehmicky</b></sub></a><br /><a href=\"https://github.com/ehmicky/human-signals/commits?author=ehmicky\" title=\"Code\">💻</a> <a href=\"#design-ehmicky\" title=\"Design\">🎨</a> <a href=\"#ideas-ehmicky\" title=\"Ideas, Planning, & Feedback\">🤔</a> <a href=\"https://github.com/ehmicky/human-signals/commits?author=ehmicky\" title=\"Documentation\">📖</a></td>\n    <td align=\"center\"><a href=\"http://www.electrovir.com\"><img src=\"https://avatars0.githubusercontent.com/u/1205860?v=4\" width=\"100px;\" alt=\"\"/><br /><sub><b>electrovir</b></sub></a><br /><a href=\"https://github.com/ehmicky/human-signals/commits?author=electrovir\" title=\"Code\">💻</a></td>\n  </tr>\n</table>\n\n<!-- markdownlint-enable -->\n<!-- prettier-ignore-end -->\n\n<!-- ALL-CONTRIBUTORS-LIST:END -->\n/build/src/main.d.ts\u0005s/**\n * Object whose keys are signal names and values are signal objects.\n */\nexport declare const signalsByName: { [signalName: string]: Signal }\n/**\n * Object whose keys are signal numbers and values are signal objects.\n */\nexport declare const signalsByNumber: { [signalNumber: string]: Signal }\n\nexport declare type SignalAction =\n  | 'terminate'\n  | 'core'\n  | 'ignore'\n  | 'pause'\n  | 'unpause'\nexport declare type SignalStandard =\n  | 'ansi'\n  | 'posix'\n  | 'bsd'\n  | 'systemv'\n  | 'other'\n\nexport declare type Signal = {\n  /**\n   * Standard name of the signal, for example 'SIGINT'.\n   */\n  name: string\n  /**\n   * Code number of the signal, for example 2. While most number are cross-platform, some are different between different OS.\n   */\n  number: number\n  /**\n   * Human-friendly description for the signal, for example 'User interruption with CTRL-C'.\n   */\n  description: string\n  /**\n   * Whether the current OS can handle this signal in Node.js using process.on(name, handler). The list of supported signals is OS-specific.\n   */\n  supported: boolean\n  /**\n   * What is the default action for this signal when it is not handled.\n   */\n  action: SignalAction\n  /**\n   * Whether the signal's default action cannot be prevented. This is true for SIGTERM, SIGKILL and SIGSTOP.\n   */\n  forced: boolean\n  /**\n   * Which standard defined that signal.\n   */\n  standard: SignalStandard\n}\n/build/src/core.js.map):{\"version\":3,\"sources\":[\"../../src/core.js\"],\"names\":[\"SIGNALS\",\"name\",\"number\",\"action\",\"description\",\"standard\",\"forced\"],\"mappings\":\"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\",\"sourcesContent\":[\"/* eslint-disable max-lines */\\n// List of known process signals with information about them\\nexport const SIGNALS = [\\n  {\\n    name: 'SIGHUP',\\n    number: 1,\\n    action: 'terminate',\\n    description: 'Terminal closed',\\n    standard: 'posix',\\n  },\\n  {\\n    name: 'SIGINT',\\n    number: 2,\\n    action: 'terminate',\\n    description: 'User interruption with CTRL-C',\\n    standard: 'ansi',\\n  },\\n  {\\n    name: 'SIGQUIT',\\n    number: 3,\\n    action: 'core',\\n    description: 'User interruption with CTRL-\\\\\\\\',\\n    standard: 'posix',\\n  },\\n  {\\n    name: 'SIGILL',\\n    number: 4,\\n    action: 'core',\\n    description: 'Invalid machine instruction',\\n    standard: 'ansi',\\n  },\\n  {\\n    name: 'SIGTRAP',\\n    number: 5,\\n    action: 'core',\\n    description: 'Debugger breakpoint',\\n    standard: 'posix',\\n  },\\n  {\\n    name: 'SIGABRT',\\n    number: 6,\\n    action: 'core',\\n    description: 'Aborted',\\n    standard: 'ansi',\\n  },\\n  {\\n    name: 'SIGIOT',\\n    number: 6,\\n    action: 'core',\\n    description: 'Aborted',\\n    standard: 'bsd',\\n  },\\n  {\\n    name: 'SIGBUS',\\n    number: 7,\\n    action: 'core',\\n    description:\\n      'Bus error due to misaligned, non-existing address or paging error',\\n    standard: 'bsd',\\n  },\\n  {\\n    name: 'SIGEMT',\\n    number: 7,\\n    action: 'terminate',\\n    description: 'Command should be emulated but is not implemented',\\n    standard: 'other',\\n  },\\n  {\\n    name: 'SIGFPE',\\n    number: 8,\\n    action: 'core',\\n    description: 'Floating point arithmetic error',\\n    standard: 'ansi',\\n  },\\n  {\\n    name: 'SIGKILL',\\n    number: 9,\\n    action: 'terminate',\\n    description: 'Forced termination',\\n    standard: 'posix',\\n    forced: true,\\n  },\\n  {\\n    name: 'SIGUSR1',\\n    number: 10,\\n    action: 'terminate',\\n    description: 'Application-specific signal',\\n    standard: 'posix',\\n  },\\n  {\\n    name: 'SIGSEGV',\\n    number: 11,\\n    action: 'core',\\n    description: 'Segmentation fault',\\n    standard: 'ansi',\\n  },\\n  {\\n    name: 'SIGUSR2',\\n    number: 12,\\n    action: 'terminate',\\n    description: 'Application-specific signal',\\n    standard: 'posix',\\n  },\\n  {\\n    name: 'SIGPIPE',\\n    number: 13,\\n    action: 'terminate',\\n    description: 'Broken pipe or socket',\\n    standard: 'posix',\\n  },\\n  {\\n    name: 'SIGALRM',\\n    number: 14,\\n    action: 'terminate',\\n    description: 'Timeout or timer',\\n    standard: 'posix',\\n  },\\n  {\\n    name: 'SIGTERM',\\n    number: 15,\\n    action: 'terminate',\\n    description: 'Termination',\\n    standard: 'ansi',\\n  },\\n  {\\n    name: 'SIGSTKFLT',\\n    number: 16,\\n    action: 'terminate',\\n    description: 'Stack is empty or overflowed',\\n    standard: 'other',\\n  },\\n  {\\n    name: 'SIGCHLD',\\n    number: 17,\\n    action: 'ignore',\\n    description: 'Child process terminated, paused or unpaused',\\n    standard: 'posix',\\n  },\\n  {\\n    name: 'SIGCLD',\\n    number: 17,\\n    action: 'ignore',\\n    description: 'Child process terminated, paused or unpaused',\\n    standard: 'other',\\n  },\\n  {\\n    name: 'SIGCONT',\\n    number: 18,\\n    action: 'unpause',\\n    description: 'Unpaused',\\n    standard: 'posix',\\n    forced: true,\\n  },\\n  {\\n    name: 'SIGSTOP',\\n    number: 19,\\n    action: 'pause',\\n    description: 'Paused',\\n    standard: 'posix',\\n    forced: true,\\n  },\\n  {\\n    name: 'SIGTSTP',\\n    number: 20,\\n    action: 'pause',\\n    description: 'Paused using CTRL-Z or \\\"suspend\\\"',\\n    standard: 'posix',\\n  },\\n  {\\n    name: 'SIGTTIN',\\n    number: 21,\\n    action: 'pause',\\n    description: 'Background process cannot read terminal input',\\n    standard: 'posix',\\n  },\\n  {\\n    name: 'SIGBREAK',\\n    number: 21,\\n    action: 'terminate',\\n    description: 'User interruption with CTRL-BREAK',\\n    standard: 'other',\\n  },\\n  {\\n    name: 'SIGTTOU',\\n    number: 22,\\n    action: 'pause',\\n    description: 'Background process cannot write to terminal output',\\n    standard: 'posix',\\n  },\\n  {\\n    name: 'SIGURG',\\n    number: 23,\\n    action: 'ignore',\\n    description: 'Socket received out-of-band data',\\n    standard: 'bsd',\\n  },\\n  {\\n    name: 'SIGXCPU',\\n    number: 24,\\n    action: 'core',\\n    description: 'Process timed out',\\n    standard: 'bsd',\\n  },\\n  {\\n    name: 'SIGXFSZ',\\n    number: 25,\\n    action: 'core',\\n    description: 'File too big',\\n    standard: 'bsd',\\n  },\\n  {\\n    name: 'SIGVTALRM',\\n    number: 26,\\n    action: 'terminate',\\n    description: 'Timeout or timer',\\n    standard: 'bsd',\\n  },\\n  {\\n    name: 'SIGPROF',\\n    number: 27,\\n    action: 'terminate',\\n    description: 'Timeout or timer',\\n    standard: 'bsd',\\n  },\\n  {\\n    name: 'SIGWINCH',\\n    number: 28,\\n    action: 'ignore',\\n    description: 'Terminal window size changed',\\n    standard: 'bsd',\\n  },\\n  {\\n    name: 'SIGIO',\\n    number: 29,\\n    action: 'terminate',\\n    description: 'I/O is available',\\n    standard: 'other',\\n  },\\n  {\\n    name: 'SIGPOLL',\\n    number: 29,\\n    action: 'terminate',\\n    description: 'Watched event',\\n    standard: 'other',\\n  },\\n  {\\n    name: 'SIGINFO',\\n    number: 29,\\n    action: 'ignore',\\n    description: 'Request for process information',\\n    standard: 'other',\\n  },\\n  {\\n    name: 'SIGPWR',\\n    number: 30,\\n    action: 'terminate',\\n    description: 'Device running out of power',\\n    standard: 'systemv',\\n  },\\n  {\\n    name: 'SIGSYS',\\n    number: 31,\\n    action: 'core',\\n    description: 'Invalid system call',\\n    standard: 'other',\\n  },\\n  {\\n    name: 'SIGUNUSED',\\n    number: 31,\\n    action: 'terminate',\\n    description: 'Invalid system call',\\n    standard: 'other',\\n  },\\n]\\n/* eslint-enable max-lines */\\n\"],\"file\":\"src/core.js\"}/build/src/core.js\u0010>\n\nexport const SIGNALS=[\n{\nname:\"SIGHUP\",\nnumber:1,\naction:\"terminate\",\ndescription:\"Terminal closed\",\nstandard:\"posix\"},\n\n{\nname:\"SIGINT\",\nnumber:2,\naction:\"terminate\",\ndescription:\"User interruption with CTRL-C\",\nstandard:\"ansi\"},\n\n{\nname:\"SIGQUIT\",\nnumber:3,\naction:\"core\",\ndescription:\"User interruption with CTRL-\\\\\",\nstandard:\"posix\"},\n\n{\nname:\"SIGILL\",\nnumber:4,\naction:\"core\",\ndescription:\"Invalid machine instruction\",\nstandard:\"ansi\"},\n\n{\nname:\"SIGTRAP\",\nnumber:5,\naction:\"core\",\ndescription:\"Debugger breakpoint\",\nstandard:\"posix\"},\n\n{\nname:\"SIGABRT\",\nnumber:6,\naction:\"core\",\ndescription:\"Aborted\",\nstandard:\"ansi\"},\n\n{\nname:\"SIGIOT\",\nnumber:6,\naction:\"core\",\ndescription:\"Aborted\",\nstandard:\"bsd\"},\n\n{\nname:\"SIGBUS\",\nnumber:7,\naction:\"core\",\ndescription:\n\"Bus error due to misaligned, non-existing address or paging error\",\nstandard:\"bsd\"},\n\n{\nname:\"SIGEMT\",\nnumber:7,\naction:\"terminate\",\ndescription:\"Command should be emulated but is not implemented\",\nstandard:\"other\"},\n\n{\nname:\"SIGFPE\",\nnumber:8,\naction:\"core\",\ndescription:\"Floating point arithmetic error\",\nstandard:\"ansi\"},\n\n{\nname:\"SIGKILL\",\nnumber:9,\naction:\"terminate\",\ndescription:\"Forced termination\",\nstandard:\"posix\",\nforced:true},\n\n{\nname:\"SIGUSR1\",\nnumber:10,\naction:\"terminate\",\ndescription:\"Application-specific signal\",\nstandard:\"posix\"},\n\n{\nname:\"SIGSEGV\",\nnumber:11,\naction:\"core\",\ndescription:\"Segmentation fault\",\nstandard:\"ansi\"},\n\n{\nname:\"SIGUSR2\",\nnumber:12,\naction:\"terminate\",\ndescription:\"Application-specific signal\",\nstandard:\"posix\"},\n\n{\nname:\"SIGPIPE\",\nnumber:13,\naction:\"terminate\",\ndescription:\"Broken pipe or socket\",\nstandard:\"posix\"},\n\n{\nname:\"SIGALRM\",\nnumber:14,\naction:\"terminate\",\ndescription:\"Timeout or timer\",\nstandard:\"posix\"},\n\n{\nname:\"SIGTERM\",\nnumber:15,\naction:\"terminate\",\ndescription:\"Termination\",\nstandard:\"ansi\"},\n\n{\nname:\"SIGSTKFLT\",\nnumber:16,\naction:\"terminate\",\ndescription:\"Stack is empty or overflowed\",\nstandard:\"other\"},\n\n{\nname:\"SIGCHLD\",\nnumber:17,\naction:\"ignore\",\ndescription:\"Child process terminated, paused or unpaused\",\nstandard:\"posix\"},\n\n{\nname:\"SIGCLD\",\nnumber:17,\naction:\"ignore\",\ndescription:\"Child process terminated, paused or unpaused\",\nstandard:\"other\"},\n\n{\nname:\"SIGCONT\",\nnumber:18,\naction:\"unpause\",\ndescription:\"Unpaused\",\nstandard:\"posix\",\nforced:true},\n\n{\nname:\"SIGSTOP\",\nnumber:19,\naction:\"pause\",\ndescription:\"Paused\",\nstandard:\"posix\",\nforced:true},\n\n{\nname:\"SIGTSTP\",\nnumber:20,\naction:\"pause\",\ndescription:\"Paused using CTRL-Z or \\\"suspend\\\"\",\nstandard:\"posix\"},\n\n{\nname:\"SIGTTIN\",\nnumber:21,\naction:\"pause\",\ndescription:\"Background process cannot read terminal input\",\nstandard:\"posix\"},\n\n{\nname:\"SIGBREAK\",\nnumber:21,\naction:\"terminate\",\ndescription:\"User interruption with CTRL-BREAK\",\nstandard:\"other\"},\n\n{\nname:\"SIGTTOU\",\nnumber:22,\naction:\"pause\",\ndescription:\"Background process cannot write to terminal output\",\nstandard:\"posix\"},\n\n{\nname:\"SIGURG\",\nnumber:23,\naction:\"ignore\",\ndescription:\"Socket received out-of-band data\",\nstandard:\"bsd\"},\n\n{\nname:\"SIGXCPU\",\nnumber:24,\naction:\"core\",\ndescription:\"Process timed out\",\nstandard:\"bsd\"},\n\n{\nname:\"SIGXFSZ\",\nnumber:25,\naction:\"core\",\ndescription:\"File too big\",\nstandard:\"bsd\"},\n\n{\nname:\"SIGVTALRM\",\nnumber:26,\naction:\"terminate\",\ndescription:\"Timeout or timer\",\nstandard:\"bsd\"},\n\n{\nname:\"SIGPROF\",\nnumber:27,\naction:\"terminate\",\ndescription:\"Timeout or timer\",\nstandard:\"bsd\"},\n\n{\nname:\"SIGWINCH\",\nnumber:28,\naction:\"ignore\",\ndescription:\"Terminal window size changed\",\nstandard:\"bsd\"},\n\n{\nname:\"SIGIO\",\nnumber:29,\naction:\"terminate\",\ndescription:\"I/O is available\",\nstandard:\"other\"},\n\n{\nname:\"SIGPOLL\",\nnumber:29,\naction:\"terminate\",\ndescription:\"Watched event\",\nstandard:\"other\"},\n\n{\nname:\"SIGINFO\",\nnumber:29,\naction:\"ignore\",\ndescription:\"Request for process information\",\nstandard:\"other\"},\n\n{\nname:\"SIGPWR\",\nnumber:30,\naction:\"terminate\",\ndescription:\"Device running out of power\",\nstandard:\"systemv\"},\n\n{\nname:\"SIGSYS\",\nnumber:31,\naction:\"core\",\ndescription:\"Invalid system call\",\nstandard:\"other\"},\n\n{\nname:\"SIGUNUSED\",\nnumber:31,\naction:\"terminate\",\ndescription:\"Invalid system call\",\nstandard:\"other\"}];\n//# sourceMappingURL=core.js.map/build/src/realtime.js\u0001\nexport const getRealtimeSignals=function(){\nconst length=SIGRTMAX-SIGRTMIN+1;\nreturn Array.from({length},getRealtimeSignal);\n};\n\nconst getRealtimeSignal=function(value,index){\nreturn{\nname:`SIGRT${index+1}`,\nnumber:SIGRTMIN+index,\naction:\"terminate\",\ndescription:\"Application-specific signal (realtime)\",\nstandard:\"posix\"};\n\n};\n\nconst SIGRTMIN=34;\nexport const SIGRTMAX=64;\n//# sourceMappingURL=realtime.js.map/LICENSE,]                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright 2021 ehmicky <ehmicky@gmail.com>\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n/package.json\u0004{\n  \"name\": \"human-signals\",\n  \"version\": \"3.0.1\",\n  \"type\": \"module\",\n  \"exports\": \"./build/src/main.js\",\n  \"main\": \"./build/src/main.js\",\n  \"files\": [\n    \"build/src/**/*.{js,ts,map,json,sh,md}\",\n    \"examples/**/*.{js,ts,map,json,sh,md}\"\n  ],\n  \"scripts\": {\n    \"test\": \"gulp test\"\n  },\n  \"description\": \"Human-friendly process signals\",\n  \"keywords\": [\n    \"signal\",\n    \"signals\",\n    \"handlers\",\n    \"error-handling\",\n    \"errors\",\n    \"interrupts\",\n    \"sigterm\",\n    \"sigint\",\n    \"irq\",\n    \"process\",\n    \"exit\",\n    \"exit-code\",\n    \"status\",\n    \"operating-system\",\n    \"es6\",\n    \"javascript\",\n    \"linux\",\n    \"macos\",\n    \"windows\",\n    \"nodejs\"\n  ],\n  \"license\": \"Apache-2.0\",\n  \"homepage\": \"https://git.io/JeluP\",\n  \"repository\": \"ehmicky/human-signals\",\n  \"bugs\": {\n    \"url\": \"https://github.com/ehmicky/human-signals/issues\"\n  },\n  \"author\": \"ehmicky <ehmicky@gmail.com> (https://github.com/ehmicky)\",\n  \"directories\": {\n    \"lib\": \"src\",\n    \"test\": \"test\"\n  },\n  \"types\": \"build/src/main.d.ts\",\n  \"devDependencies\": {\n    \"@ehmicky/dev-tasks\": \"^1.0.34\",\n    \"ajv\": \"^6.12.6\",\n    \"test-each\": \"^3.0.1\"\n  },\n  \"engines\": {\n    \"node\": \">=12.20.0\"\n  }\n}\n/build/src/main.js.map\u0010D{\"version\":3,\"sources\":[\"../../src/main.js\"],\"names\":[\"constants\",\"SIGRTMAX\",\"getSignals\",\"getSignalsByName\",\"signals\",\"reduce\",\"getSignalByName\",\"signalByNameMemo\",\"name\",\"number\",\"description\",\"supported\",\"action\",\"forced\",\"standard\",\"signalsByName\",\"getSignalsByNumber\",\"length\",\"signalsA\",\"Array\",\"from\",\"value\",\"getSignalByNumber\",\"Object\",\"assign\",\"signal\",\"findSignalByNumber\",\"undefined\",\"find\",\"signalA\",\"signalsByNumber\"],\"mappings\":\"AAAA,OAASA,SAAT,KAA0B,IAA1B;;AAEA,OAASC,QAAT,KAAyB,eAAzB;AACA,OAASC,UAAT,KAA2B,cAA3B;;;;AAIA,KAAMC,CAAAA,gBAAgB,CAAG,UAAY;AACnC,KAAMC,CAAAA,OAAO,CAAGF,UAAU,EAA1B;AACA,MAAOE,CAAAA,OAAO,CAACC,MAAR,CAAeC,eAAf,CAAgC,EAAhC,CAAP;AACD,CAHD;;AAKA,KAAMA,CAAAA,eAAe,CAAG;AACtBC,gBADsB;AAEtB,CAAEC,IAAF,CAAQC,MAAR,CAAgBC,WAAhB,CAA6BC,SAA7B,CAAwCC,MAAxC,CAAgDC,MAAhD,CAAwDC,QAAxD,CAFsB;AAGtB;AACA,MAAO;AACL,GAAGP,gBADE;AAEL,CAACC,IAAD,EAAQ,CAAEA,IAAF,CAAQC,MAAR,CAAgBC,WAAhB,CAA6BC,SAA7B,CAAwCC,MAAxC,CAAgDC,MAAhD,CAAwDC,QAAxD,CAFH,CAAP;;AAID,CARD;;AAUA,MAAO,MAAMC,CAAAA,aAAa,CAAGZ,gBAAgB,EAAtC;;;;;AAKP,KAAMa,CAAAA,kBAAkB,CAAG,UAAY;AACrC,KAAMZ,CAAAA,OAAO,CAAGF,UAAU,EAA1B;AACA,KAAMe,CAAAA,MAAM,CAAGhB,QAAQ,CAAG,CAA1B;AACA,KAAMiB,CAAAA,QAAQ,CAAGC,KAAK,CAACC,IAAN,CAAW,CAAEH,MAAF,CAAX,CAAuB,CAACI,KAAD,CAAQZ,MAAR;AACtCa,iBAAiB,CAACb,MAAD,CAASL,OAAT,CADF,CAAjB;;AAGA,MAAOmB,CAAAA,MAAM,CAACC,MAAP,CAAc,EAAd,CAAkB,GAAGN,QAArB,CAAP;AACD,CAPD;;AASA,KAAMI,CAAAA,iBAAiB,CAAG,SAAUb,MAAV,CAAkBL,OAAlB,CAA2B;AACnD,KAAMqB,CAAAA,MAAM,CAAGC,kBAAkB,CAACjB,MAAD,CAASL,OAAT,CAAjC;;AAEA,GAAIqB,MAAM,GAAKE,SAAf,CAA0B;AACxB,MAAO,EAAP;AACD;;AAED,KAAM,CAAEnB,IAAF,CAAQE,WAAR,CAAqBC,SAArB,CAAgCC,MAAhC,CAAwCC,MAAxC,CAAgDC,QAAhD,EAA6DW,MAAnE;AACA,MAAO;AACL,CAAChB,MAAD,EAAU;AACRD,IADQ;AAERC,MAFQ;AAGRC,WAHQ;AAIRC,SAJQ;AAKRC,MALQ;AAMRC,MANQ;AAORC,QAPQ,CADL,CAAP;;;AAWD,CAnBD;;;;AAuBA,KAAMY,CAAAA,kBAAkB,CAAG,SAAUjB,MAAV,CAAkBL,OAAlB,CAA2B;AACpD,KAAMqB,CAAAA,MAAM,CAAGrB,OAAO,CAACwB,IAAR,CAAa,CAAC,CAAEpB,IAAF,CAAD,GAAcR,SAAS,CAACI,OAAV,CAAkBI,IAAlB,IAA4BC,MAAvD,CAAf;;AAEA,GAAIgB,MAAM,GAAKE,SAAf,CAA0B;AACxB,MAAOF,CAAAA,MAAP;AACD;;AAED,MAAOrB,CAAAA,OAAO,CAACwB,IAAR,CAAa,CAACC,OAAD,GAAaA,OAAO,CAACpB,MAAR,GAAmBA,MAA7C,CAAP;AACD,CARD;;AAUA,MAAO,MAAMqB,CAAAA,eAAe,CAAGd,kBAAkB,EAA1C\",\"sourcesContent\":[\"import { constants } from 'os'\\n\\nimport { SIGRTMAX } from './realtime.js'\\nimport { getSignals } from './signals.js'\\n\\n// Retrieve `signalsByName`, an object mapping signal name to signal properties.\\n// We make sure the object is sorted by `number`.\\nconst getSignalsByName = function () {\\n  const signals = getSignals()\\n  return signals.reduce(getSignalByName, {})\\n}\\n\\nconst getSignalByName = function (\\n  signalByNameMemo,\\n  { name, number, description, supported, action, forced, standard },\\n) {\\n  return {\\n    ...signalByNameMemo,\\n    [name]: { name, number, description, supported, action, forced, standard },\\n  }\\n}\\n\\nexport const signalsByName = getSignalsByName()\\n\\n// Retrieve `signalsByNumber`, an object mapping signal number to signal\\n// properties.\\n// We make sure the object is sorted by `number`.\\nconst getSignalsByNumber = function () {\\n  const signals = getSignals()\\n  const length = SIGRTMAX + 1\\n  const signalsA = Array.from({ length }, (value, number) =>\\n    getSignalByNumber(number, signals),\\n  )\\n  return Object.assign({}, ...signalsA)\\n}\\n\\nconst getSignalByNumber = function (number, signals) {\\n  const signal = findSignalByNumber(number, signals)\\n\\n  if (signal === undefined) {\\n    return {}\\n  }\\n\\n  const { name, description, supported, action, forced, standard } = signal\\n  return {\\n    [number]: {\\n      name,\\n      number,\\n      description,\\n      supported,\\n      action,\\n      forced,\\n      standard,\\n    },\\n  }\\n}\\n\\n// Several signals might end up sharing the same number because of OS-specific\\n// numbers, in which case those prevail.\\nconst findSignalByNumber = function (number, signals) {\\n  const signal = signals.find(({ name }) => constants.signals[name] === number)\\n\\n  if (signal !== undefined) {\\n    return signal\\n  }\\n\\n  return signals.find((signalA) => signalA.number === number)\\n}\\n\\nexport const signalsByNumber = getSignalsByNumber()\\n\"],\"file\":\"src/main.js\"}/build/src/signals.js.map\bm{\"version\":3,\"sources\":[\"../../src/signals.js\"],\"names\":[\"constants\",\"SIGNALS\",\"getRealtimeSignals\",\"getSignals\",\"realtimeSignals\",\"signals\",\"map\",\"normalizeSignal\",\"name\",\"number\",\"defaultNumber\",\"description\",\"action\",\"forced\",\"standard\",\"constantSignal\",\"supported\",\"undefined\"],\"mappings\":\"AAAA,OAASA,SAAT,KAA0B,IAA1B;;AAEA,OAASC,OAAT,KAAwB,WAAxB;AACA,OAASC,kBAAT,KAAmC,eAAnC;;;;AAIA,MAAO,MAAMC,CAAAA,UAAU,CAAG,UAAY;AACpC,KAAMC,CAAAA,eAAe,CAAGF,kBAAkB,EAA1C;AACA,KAAMG,CAAAA,OAAO,CAAG,CAAC,GAAGJ,OAAJ,CAAa,GAAGG,eAAhB,EAAiCE,GAAjC,CAAqCC,eAArC,CAAhB;AACA,MAAOF,CAAAA,OAAP;AACD,CAJM;;;;;;;;AAYP,KAAME,CAAAA,eAAe,CAAG,SAAU;AAChCC,IADgC;AAEhCC,MAAM,CAAEC,aAFwB;AAGhCC,WAHgC;AAIhCC,MAJgC;AAKhCC,MAAM,CAAG,KALuB;AAMhCC,QANgC,CAAV;AAOrB;AACD,KAAM;AACJT,OAAO,CAAE,CAAE,CAACG,IAAD,EAAQO,cAAV,CADL;AAEFf,SAFJ;AAGA,KAAMgB,CAAAA,SAAS,CAAGD,cAAc,GAAKE,SAArC;AACA,KAAMR,CAAAA,MAAM,CAAGO,SAAS,CAAGD,cAAH,CAAoBL,aAA5C;AACA,MAAO,CAAEF,IAAF,CAAQC,MAAR,CAAgBE,WAAhB,CAA6BK,SAA7B,CAAwCJ,MAAxC,CAAgDC,MAAhD,CAAwDC,QAAxD,CAAP;AACD,CAdD\",\"sourcesContent\":[\"import { constants } from 'os'\\n\\nimport { SIGNALS } from './core.js'\\nimport { getRealtimeSignals } from './realtime.js'\\n\\n// Retrieve list of know signals (including realtime) with information about\\n// them\\nexport const getSignals = function () {\\n  const realtimeSignals = getRealtimeSignals()\\n  const signals = [...SIGNALS, ...realtimeSignals].map(normalizeSignal)\\n  return signals\\n}\\n\\n// Normalize signal:\\n//  - `number`: signal numbers are OS-specific. This is taken into account by\\n//    `os.constants.signals`. However we provide a default `number` since some\\n//     signals are not defined for some OS.\\n//  - `forced`: set default to `false`\\n//  - `supported`: set value\\nconst normalizeSignal = function ({\\n  name,\\n  number: defaultNumber,\\n  description,\\n  action,\\n  forced = false,\\n  standard,\\n}) {\\n  const {\\n    signals: { [name]: constantSignal },\\n  } = constants\\n  const supported = constantSignal !== undefined\\n  const number = supported ? constantSignal : defaultNumber\\n  return { name, number, description, supported, action, forced, standard }\\n}\\n\"],\"file\":\"src/signals.js\"}/build/src/signals.js\u0002import{constants}from\"os\";\n\nimport{SIGNALS}from\"./core.js\";\nimport{getRealtimeSignals}from\"./realtime.js\";\n\n\n\nexport const getSignals=function(){\nconst realtimeSignals=getRealtimeSignals();\nconst signals=[...SIGNALS,...realtimeSignals].map(normalizeSignal);\nreturn signals;\n};\n\n\n\n\n\n\n\nconst normalizeSignal=function({\nname,\nnumber:defaultNumber,\ndescription,\naction,\nforced=false,\nstandard})\n{\nconst{\nsignals:{[name]:constantSignal}}=\nconstants;\nconst supported=constantSignal!==undefined;\nconst number=supported?constantSignal:defaultNumber;\nreturn{name,number,description,supported,action,forced,standard};\n};\n//# sourceMappingURL=signals.js.map/build/src/main.js\u0005\u001aimport{constants}from\"os\";\n\nimport{SIGRTMAX}from\"./realtime.js\";\nimport{getSignals}from\"./signals.js\";\n\n\n\nconst getSignalsByName=function(){\nconst signals=getSignals();\nreturn signals.reduce(getSignalByName,{});\n};\n\nconst getSignalByName=function(\nsignalByNameMemo,\n{name,number,description,supported,action,forced,standard})\n{\nreturn{\n...signalByNameMemo,\n[name]:{name,number,description,supported,action,forced,standard}};\n\n};\n\nexport const signalsByName=getSignalsByName();\n\n\n\n\nconst getSignalsByNumber=function(){\nconst signals=getSignals();\nconst length=SIGRTMAX+1;\nconst signalsA=Array.from({length},(value,number)=>\ngetSignalByNumber(number,signals));\n\nreturn Object.assign({},...signalsA);\n};\n\nconst getSignalByNumber=function(number,signals){\nconst signal=findSignalByNumber(number,signals);\n\nif(signal===undefined){\nreturn{};\n}\n\nconst{name,description,supported,action,forced,standard}=signal;\nreturn{\n[number]:{\nname,\nnumber,\ndescription,\nsupported,\naction,\nforced,\nstandard}};\n\n\n};\n\n\n\nconst findSignalByNumber=function(number,signals){\nconst signal=signals.find(({name})=>constants.signals[name]===number);\n\nif(signal!==undefined){\nreturn signal;\n}\n\nreturn signals.find((signalA)=>signalA.number===number);\n};\n\nexport const signalsByNumber=getSignalsByNumber();\n//# sourceMappingURL=main.js.map"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/aW11cm11cmhhc2hAMC4xLjQ=",
    "content": "/package.json\u00032{\n  \"name\": \"imurmurhash\",\n  \"version\": \"0.1.4\",\n  \"description\": \"An incremental implementation of MurmurHash3\",\n  \"homepage\": \"https://github.com/jensyt/imurmurhash-js\",\n  \"main\": \"imurmurhash.js\",\n  \"files\": [\n    \"imurmurhash.js\",\n    \"imurmurhash.min.js\",\n    \"package.json\",\n    \"README.md\"\n  ],\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/jensyt/imurmurhash-js\"\n  },\n  \"bugs\": {\n    \"url\": \"https://github.com/jensyt/imurmurhash-js/issues\"\n  },\n  \"keywords\": [\n    \"murmur\",\n    \"murmurhash\",\n    \"murmurhash3\",\n    \"hash\",\n    \"incremental\"\n  ],\n  \"author\": {\n    \"name\": \"Jens Taylor\",\n    \"email\": \"jensyt@gmail.com\",\n    \"url\": \"https://github.com/homebrewing\"\n  },\n  \"license\": \"MIT\",\n  \"dependencies\": {\n  },\n  \"devDependencies\": {\n  },\n  \"engines\": {\n    \"node\": \">=0.8.19\"\n  }\n}\n/imurmurhash.js\u0011</**\n * @preserve\n * JS Implementation of incremental MurmurHash3 (r150) (as of May 10, 2013)\n *\n * @author <a href=\"mailto:jensyt@gmail.com\">Jens Taylor</a>\n * @see http://github.com/homebrewing/brauhaus-diff\n * @author <a href=\"mailto:gary.court@gmail.com\">Gary Court</a>\n * @see http://github.com/garycourt/murmurhash-js\n * @author <a href=\"mailto:aappleby@gmail.com\">Austin Appleby</a>\n * @see http://sites.google.com/site/murmurhash/\n */\n(function(){\n    var cache;\n\n    // Call this function without `new` to use the cached object (good for\n    // single-threaded environments), or with `new` to create a new object.\n    //\n    // @param {string} key A UTF-16 or ASCII string\n    // @param {number} seed An optional positive integer\n    // @return {object} A MurmurHash3 object for incremental hashing\n    function MurmurHash3(key, seed) {\n        var m = this instanceof MurmurHash3 ? this : cache;\n        m.reset(seed)\n        if (typeof key === 'string' && key.length > 0) {\n            m.hash(key);\n        }\n\n        if (m !== this) {\n            return m;\n        }\n    };\n\n    // Incrementally add a string to this hash\n    //\n    // @param {string} key A UTF-16 or ASCII string\n    // @return {object} this\n    MurmurHash3.prototype.hash = function(key) {\n        var h1, k1, i, top, len;\n\n        len = key.length;\n        this.len += len;\n\n        k1 = this.k1;\n        i = 0;\n        switch (this.rem) {\n            case 0: k1 ^= len > i ? (key.charCodeAt(i++) & 0xffff) : 0;\n            case 1: k1 ^= len > i ? (key.charCodeAt(i++) & 0xffff) << 8 : 0;\n            case 2: k1 ^= len > i ? (key.charCodeAt(i++) & 0xffff) << 16 : 0;\n            case 3:\n                k1 ^= len > i ? (key.charCodeAt(i) & 0xff) << 24 : 0;\n                k1 ^= len > i ? (key.charCodeAt(i++) & 0xff00) >> 8 : 0;\n        }\n\n        this.rem = (len + this.rem) & 3; // & 3 is same as % 4\n        len -= this.rem;\n        if (len > 0) {\n            h1 = this.h1;\n            while (1) {\n                k1 = (k1 * 0x2d51 + (k1 & 0xffff) * 0xcc9e0000) & 0xffffffff;\n                k1 = (k1 << 15) | (k1 >>> 17);\n                k1 = (k1 * 0x3593 + (k1 & 0xffff) * 0x1b870000) & 0xffffffff;\n\n                h1 ^= k1;\n                h1 = (h1 << 13) | (h1 >>> 19);\n                h1 = (h1 * 5 + 0xe6546b64) & 0xffffffff;\n\n                if (i >= len) {\n                    break;\n                }\n\n                k1 = ((key.charCodeAt(i++) & 0xffff)) ^\n                     ((key.charCodeAt(i++) & 0xffff) << 8) ^\n                     ((key.charCodeAt(i++) & 0xffff) << 16);\n                top = key.charCodeAt(i++);\n                k1 ^= ((top & 0xff) << 24) ^\n                      ((top & 0xff00) >> 8);\n            }\n\n            k1 = 0;\n            switch (this.rem) {\n                case 3: k1 ^= (key.charCodeAt(i + 2) & 0xffff) << 16;\n                case 2: k1 ^= (key.charCodeAt(i + 1) & 0xffff) << 8;\n                case 1: k1 ^= (key.charCodeAt(i) & 0xffff);\n            }\n\n            this.h1 = h1;\n        }\n\n        this.k1 = k1;\n        return this;\n    };\n\n    // Get the result of this hash\n    //\n    // @return {number} The 32-bit hash\n    MurmurHash3.prototype.result = function() {\n        var k1, h1;\n        \n        k1 = this.k1;\n        h1 = this.h1;\n\n        if (k1 > 0) {\n            k1 = (k1 * 0x2d51 + (k1 & 0xffff) * 0xcc9e0000) & 0xffffffff;\n            k1 = (k1 << 15) | (k1 >>> 17);\n            k1 = (k1 * 0x3593 + (k1 & 0xffff) * 0x1b870000) & 0xffffffff;\n            h1 ^= k1;\n        }\n\n        h1 ^= this.len;\n\n        h1 ^= h1 >>> 16;\n        h1 = (h1 * 0xca6b + (h1 & 0xffff) * 0x85eb0000) & 0xffffffff;\n        h1 ^= h1 >>> 13;\n        h1 = (h1 * 0xae35 + (h1 & 0xffff) * 0xc2b20000) & 0xffffffff;\n        h1 ^= h1 >>> 16;\n\n        return h1 >>> 0;\n    };\n\n    // Reset the hash object for reuse\n    //\n    // @param {number} seed An optional positive integer\n    MurmurHash3.prototype.reset = function(seed) {\n        this.h1 = typeof seed === 'number' ? seed : 0;\n        this.rem = this.k1 = this.len = 0;\n        return this;\n    };\n\n    // A cached object to use. This can be safely used if you're in a single-\n    // threaded environment, otherwise you need to create new hashes to use.\n    cache = new MurmurHash3();\n\n    if (typeof(module) != 'undefined') {\n        module.exports = MurmurHash3;\n    } else {\n        this.MurmurHash3 = MurmurHash3;\n    }\n}());\n/README.md\u0012iMurmurHash.js\n==============\n\nAn incremental implementation of the MurmurHash3 (32-bit) hashing algorithm for JavaScript based on [Gary Court's implementation](https://github.com/garycourt/murmurhash-js) with [kazuyukitanimura's modifications](https://github.com/kazuyukitanimura/murmurhash-js).\n\nThis version works significantly faster than the non-incremental version if you need to hash many small strings into a single hash, since string concatenation (to build the single string to pass the non-incremental version) is fairly costly. In one case tested, using the incremental version was about 50% faster than concatenating 5-10 strings and then hashing.\n\nInstallation\n------------\n\nTo use iMurmurHash in the browser, [download the latest version](https://raw.github.com/jensyt/imurmurhash-js/master/imurmurhash.min.js) and include it as a script on your site.\n\n```html\n<script type=\"text/javascript\" src=\"/scripts/imurmurhash.min.js\"></script>\n<script>\n// Your code here, access iMurmurHash using the global object MurmurHash3\n</script>\n```\n\n---\n\nTo use iMurmurHash in Node.js, install the module using NPM:\n\n```bash\nnpm install imurmurhash\n```\n\nThen simply include it in your scripts:\n\n```javascript\nMurmurHash3 = require('imurmurhash');\n```\n\nQuick Example\n-------------\n\n```javascript\n// Create the initial hash\nvar hashState = MurmurHash3('string');\n\n// Incrementally add text\nhashState.hash('more strings');\nhashState.hash('even more strings');\n\n// All calls can be chained if desired\nhashState.hash('and').hash('some').hash('more');\n\n// Get a result\nhashState.result();\n// returns 0xe4ccfe6b\n```\n\nFunctions\n---------\n\n### MurmurHash3 ([string], [seed])\nGet a hash state object, optionally initialized with the given _string_ and _seed_. _Seed_ must be a positive integer if provided. Calling this function without the `new` keyword will return a cached state object that has been reset. This is safe to use as long as the object is only used from a single thread and no other hashes are created while operating on this one. If this constraint cannot be met, you can use `new` to create a new state object. For example:\n\n```javascript\n// Use the cached object, calling the function again will return the same\n// object (but reset, so the current state would be lost)\nhashState = MurmurHash3();\n...\n\n// Create a new object that can be safely used however you wish. Calling the\n// function again will simply return a new state object, and no state loss\n// will occur, at the cost of creating more objects.\nhashState = new MurmurHash3();\n```\n\nBoth methods can be mixed however you like if you have different use cases.\n\n---\n\n### MurmurHash3.prototype.hash (string)\nIncrementally add _string_ to the hash. This can be called as many times as you want for the hash state object, including after a call to `result()`. Returns `this` so calls can be chained.\n\n---\n\n### MurmurHash3.prototype.result ()\nGet the result of the hash as a 32-bit positive integer. This performs the tail and finalizer portions of the algorithm, but does not store the result in the state object. This means that it is perfectly safe to get results and then continue adding strings via `hash`.\n\n```javascript\n// Do the whole string at once\nMurmurHash3('this is a test string').result();\n// 0x70529328\n\n// Do part of the string, get a result, then the other part\nvar m = MurmurHash3('this is a');\nm.result();\n// 0xbfc4f834\nm.hash(' test string').result();\n// 0x70529328 (same as above)\n```\n\n---\n\n### MurmurHash3.prototype.reset ([seed])\nReset the state object for reuse, optionally using the given _seed_ (defaults to 0 like the constructor). Returns `this` so calls can be chained.\n\n---\n\nLicense (MIT)\n-------------\nCopyright (c) 2013 Gary Court, Jens Taylor\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n/imurmurhash.min.js\u0007f/**\n * @preserve\n * JS Implementation of incremental MurmurHash3 (r150) (as of May 10, 2013)\n *\n * @author <a href=\"mailto:jensyt@gmail.com\">Jens Taylor</a>\n * @see http://github.com/homebrewing/brauhaus-diff\n * @author <a href=\"mailto:gary.court@gmail.com\">Gary Court</a>\n * @see http://github.com/garycourt/murmurhash-js\n * @author <a href=\"mailto:aappleby@gmail.com\">Austin Appleby</a>\n * @see http://sites.google.com/site/murmurhash/\n */\n!function(){function t(h,r){var s=this instanceof t?this:e;return s.reset(r),\"string\"==typeof h&&h.length>0&&s.hash(h),s!==this?s:void 0}var e;t.prototype.hash=function(t){var e,h,r,s,i;switch(i=t.length,this.len+=i,h=this.k1,r=0,this.rem){case 0:h^=i>r?65535&t.charCodeAt(r++):0;case 1:h^=i>r?(65535&t.charCodeAt(r++))<<8:0;case 2:h^=i>r?(65535&t.charCodeAt(r++))<<16:0;case 3:h^=i>r?(255&t.charCodeAt(r))<<24:0,h^=i>r?(65280&t.charCodeAt(r++))>>8:0}if(this.rem=3&i+this.rem,i-=this.rem,i>0){for(e=this.h1;;){if(h=4294967295&11601*h+3432906752*(65535&h),h=h<<15|h>>>17,h=4294967295&13715*h+461832192*(65535&h),e^=h,e=e<<13|e>>>19,e=4294967295&5*e+3864292196,r>=i)break;h=65535&t.charCodeAt(r++)^(65535&t.charCodeAt(r++))<<8^(65535&t.charCodeAt(r++))<<16,s=t.charCodeAt(r++),h^=(255&s)<<24^(65280&s)>>8}switch(h=0,this.rem){case 3:h^=(65535&t.charCodeAt(r+2))<<16;case 2:h^=(65535&t.charCodeAt(r+1))<<8;case 1:h^=65535&t.charCodeAt(r)}this.h1=e}return this.k1=h,this},t.prototype.result=function(){var t,e;return t=this.k1,e=this.h1,t>0&&(t=4294967295&11601*t+3432906752*(65535&t),t=t<<15|t>>>17,t=4294967295&13715*t+461832192*(65535&t),e^=t),e^=this.len,e^=e>>>16,e=4294967295&51819*e+2246770688*(65535&e),e^=e>>>13,e=4294967295&44597*e+3266445312*(65535&e),e^=e>>>16,e>>>0},t.prototype.reset=function(t){return this.h1=\"number\"==typeof t?t:0,this.rem=this.k1=this.len=0,this},e=new t,\"undefined\"!=typeof module?module.exports=t:this.MurmurHash3=t}();"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/aW1wb3J0LWZyZXNoQDMuMy4w",
    "content": "/index.js\u00044'use strict';\nconst path = require('path');\nconst resolveFrom = require('resolve-from');\nconst parentModule = require('parent-module');\n\nmodule.exports = moduleId => {\n\tif (typeof moduleId !== 'string') {\n\t\tthrow new TypeError('Expected a string');\n\t}\n\n\tconst parentPath = parentModule(__filename);\n\n\tconst cwd = parentPath ? path.dirname(parentPath) : __dirname;\n\tconst filePath = resolveFrom(cwd, moduleId);\n\n\tconst oldModule = require.cache[filePath];\n\t// Delete itself from module parent\n\tif (oldModule && oldModule.parent) {\n\t\tlet i = oldModule.parent.children.length;\n\n\t\twhile (i--) {\n\t\t\tif (oldModule.parent.children[i].id === filePath) {\n\t\t\t\toldModule.parent.children.splice(i, 1);\n\t\t\t}\n\t\t}\n\t}\n\n\tdelete require.cache[filePath]; // Delete module from cache\n\n\tconst parent = require.cache[parentPath]; // If `filePath` and `parentPath` are the same, cache will already be deleted so we won't get a memory leak in next step\n\n\treturn parent === undefined ? require(filePath) : parent.require(filePath); // In case cache doesn't have parent, fall back to normal require\n};\n/index.d.ts\u0001/**\nImport a module while bypassing the cache.\n\n@example\n```\n// foo.js\nlet i = 0;\nmodule.exports = () => ++i;\n\n// index.js\nimport importFresh = require('import-fresh');\n\nrequire('./foo')();\n//=> 1\n\nrequire('./foo')();\n//=> 2\n\nimportFresh('./foo')();\n//=> 1\n\nimportFresh('./foo')();\n//=> 1\n\nconst foo = importFresh<typeof import('./foo')>('./foo');\n```\n*/\ndeclare function importFresh<T>(moduleId: string): T;\n\nexport = importFresh;\n/package.json\u0003\u001c{\n\t\"name\": \"import-fresh\",\n\t\"version\": \"3.3.0\",\n\t\"description\": \"Import a module while bypassing the cache\",\n\t\"license\": \"MIT\",\n\t\"repository\": \"sindresorhus/import-fresh\",\n\t\"funding\": \"https://github.com/sponsors/sindresorhus\",\n\t\"author\": {\n\t\t\"name\": \"Sindre Sorhus\",\n\t\t\"email\": \"sindresorhus@gmail.com\",\n\t\t\"url\": \"https://sindresorhus.com\"\n\t},\n\t\"engines\": {\n\t\t\"node\": \">=6\"\n\t},\n\t\"scripts\": {\n\t\t\"test\": \"xo && ava && tsd\",\n\t\t\"heapdump\": \"node heapdump.js\"\n\t},\n\t\"files\": [\n\t\t\"index.js\",\n\t\t\"index.d.ts\"\n\t],\n\t\"keywords\": [\n\t\t\"require\",\n\t\t\"cache\",\n\t\t\"uncache\",\n\t\t\"uncached\",\n\t\t\"module\",\n\t\t\"fresh\",\n\t\t\"bypass\"\n\t],\n\t\"dependencies\": {\n\t\t\"parent-module\": \"^1.0.0\",\n\t\t\"resolve-from\": \"^4.0.0\"\n\t},\n\t\"devDependencies\": {\n\t\t\"ava\": \"^1.0.1\",\n\t\t\"heapdump\": \"^0.3.12\",\n\t\t\"tsd\": \"^0.7.3\",\n\t\t\"xo\": \"^0.23.0\"\n\t}\n}\n/readme.md\u0005# import-fresh\n\n> Import a module while bypassing the [cache](https://nodejs.org/api/modules.html#modules_caching)\n\nUseful for testing purposes when you need to freshly import a module.\n\n## Install\n\n```\n$ npm install import-fresh\n```\n\n## Usage\n\n```js\n// foo.js\nlet i = 0;\nmodule.exports = () => ++i;\n```\n\n```js\nconst importFresh = require('import-fresh');\n\nrequire('./foo')();\n//=> 1\n\nrequire('./foo')();\n//=> 2\n\nimportFresh('./foo')();\n//=> 1\n\nimportFresh('./foo')();\n//=> 1\n```\n\n## import-fresh for enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of import-fresh and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-import-fresh?utm_source=npm-import-fresh&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## Related\n\n- [clear-module](https://github.com/sindresorhus/clear-module) - Clear a module from the import cache\n- [import-from](https://github.com/sindresorhus/import-from) - Import a module from a given path\n- [import-cwd](https://github.com/sindresorhus/import-cwd) - Import a module from the current working directory\n- [import-lazy](https://github.com/sindresorhus/import-lazy) - Import modules lazily\n/license\u0004]MIT License\n\nCopyright (c) Sindre Sorhus <sindresorhus@gmail.com> (https://sindresorhus.com)\n\nPermission 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:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE 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.\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/aW5mbGlnaHRAMS4wLjY=",
    "content": "/inflight.js\u0005Uvar wrappy = require('wrappy')\nvar reqs = Object.create(null)\nvar once = require('once')\n\nmodule.exports = wrappy(inflight)\n\nfunction inflight (key, cb) {\n  if (reqs[key]) {\n    reqs[key].push(cb)\n    return null\n  } else {\n    reqs[key] = [cb]\n    return makeres(key)\n  }\n}\n\nfunction makeres (key) {\n  return once(function RES () {\n    var cbs = reqs[key]\n    var len = cbs.length\n    var args = slice(arguments)\n\n    // XXX It's somewhat ambiguous whether a new callback added in this\n    // pass should be queued for later execution if something in the\n    // list of callbacks throws, or if it should just be discarded.\n    // However, it's such an edge case that it hardly matters, and either\n    // choice is likely as surprising as the other.\n    // As it happens, we do go ahead and schedule it for later execution.\n    try {\n      for (var i = 0; i < len; i++) {\n        cbs[i].apply(null, args)\n      }\n    } finally {\n      if (cbs.length > len) {\n        // added more in the interim.\n        // de-zalgo, just in case, but don't call again.\n        cbs.splice(0, len)\n        process.nextTick(function () {\n          RES.apply(null, args)\n        })\n      } else {\n        delete reqs[key]\n      }\n    }\n  })\n}\n\nfunction slice (args) {\n  var length = args.length\n  var array = []\n\n  for (var i = 0; i < length; i++) array[i] = args[i]\n  return array\n}\n/README.md\u0003# inflight\n\nAdd callbacks to requests in flight to avoid async duplication\n\n## USAGE\n\n```javascript\nvar inflight = require('inflight')\n\n// some request that does some stuff\nfunction req(key, callback) {\n  // key is any random string.  like a url or filename or whatever.\n  //\n  // will return either a falsey value, indicating that the\n  // request for this key is already in flight, or a new callback\n  // which when called will call all callbacks passed to inflightk\n  // with the same key\n  callback = inflight(key, callback)\n\n  // If we got a falsey value back, then there's already a req going\n  if (!callback) return\n\n  // this is where you'd fetch the url or whatever\n  // callback is also once()-ified, so it can safely be assigned\n  // to multiple events etc.  First call wins.\n  setTimeout(function() {\n    callback(null, key)\n  }, 100)\n}\n\n// only assigns a single setTimeout\n// when it dings, all cbs get called\nreq('foo', cb1)\nreq('foo', cb2)\nreq('foo', cb3)\nreq('foo', cb4)\n```\n/package.json\u0002{\n  \"name\": \"inflight\",\n  \"version\": \"1.0.6\",\n  \"description\": \"Add callbacks to requests in flight to avoid async duplication\",\n  \"main\": \"inflight.js\",\n  \"files\": [\n    \"inflight.js\"\n  ],\n  \"dependencies\": {\n    \"once\": \"^1.3.0\",\n    \"wrappy\": \"1\"\n  },\n  \"devDependencies\": {\n    \"tap\": \"^7.1.2\"\n  },\n  \"scripts\": {\n    \"test\": \"tap test.js --100\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/npm/inflight.git\"\n  },\n  \"author\": \"Isaac Z. Schlueter <i@izs.me> (http://blog.izs.me/)\",\n  \"bugs\": {\n    \"url\": \"https://github.com/isaacs/inflight/issues\"\n  },\n  \"homepage\": \"https://github.com/isaacs/inflight\",\n  \"license\": \"ISC\"\n}\n/LICENSE\u0002The ISC License\n\nCopyright (c) Isaac Z. Schlueter\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted, provided that the above\ncopyright notice and this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\nWITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\nANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\nACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR\nIN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/aW5oZXJpdHNAMi4wLjQ=",
    "content": "/LICENSE\u0002The ISC License\n\nCopyright (c) Isaac Z. Schlueter\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted, provided that the above\ncopyright notice and this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n\n/inherits.jstry {\n  var util = require('util');\n  /* istanbul ignore next */\n  if (typeof util.inherits !== 'function') throw '';\n  module.exports = util.inherits;\n} catch (e) {\n  /* istanbul ignore next */\n  module.exports = require('./inherits_browser.js');\n}\n/package.json\u0002E{\n  \"name\": \"inherits\",\n  \"description\": \"Browser-friendly inheritance fully compatible with standard node.js inherits()\",\n  \"version\": \"2.0.4\",\n  \"keywords\": [\n    \"inheritance\",\n    \"class\",\n    \"klass\",\n    \"oop\",\n    \"object-oriented\",\n    \"inherits\",\n    \"browser\",\n    \"browserify\"\n  ],\n  \"main\": \"./inherits.js\",\n  \"browser\": \"./inherits_browser.js\",\n  \"repository\": \"git://github.com/isaacs/inherits\",\n  \"license\": \"ISC\",\n  \"scripts\": {\n    \"test\": \"tap\"\n  },\n  \"devDependencies\": {\n    \"tap\": \"^14.2.4\"\n  },\n  \"files\": [\n    \"inherits.js\",\n    \"inherits_browser.js\"\n  ]\n}\n/README.md\u0006YBrowser-friendly inheritance fully compatible with standard node.js\n[inherits](http://nodejs.org/api/util.html#util_util_inherits_constructor_superconstructor).\n\nThis package exports standard `inherits` from node.js `util` module in\nnode environment, but also provides alternative browser-friendly\nimplementation through [browser\nfield](https://gist.github.com/shtylman/4339901). Alternative\nimplementation is a literal copy of standard one located in standalone\nmodule to avoid requiring of `util`. It also has a shim for old\nbrowsers with no `Object.create` support.\n\nWhile keeping you sure you are using standard `inherits`\nimplementation in node.js environment, it allows bundlers such as\n[browserify](https://github.com/substack/node-browserify) to not\ninclude full `util` package to your client code if all you need is\njust `inherits` function. It worth, because browser shim for `util`\npackage is large and `inherits` is often the single function you need\nfrom it.\n\nIt's recommended to use this package instead of\n`require('util').inherits` for any code that has chances to be used\nnot only in node.js but in browser too.\n\n## usage\n\n```js\nvar inherits = require('inherits');\n// then use exactly as the standard one\n```\n\n## note on version ~1.0\n\nVersion ~1.0 had completely different motivation and is not compatible\nneither with 2.0 nor with standard node.js `inherits`.\n\nIf you are using version ~1.0 and planning to switch to ~2.0, be\ncareful:\n\n* new version uses `super_` instead of `super` for referencing\n  superclass\n* new version overwrites current prototype while old one preserves any\n  existing fields on it\n/inherits_browser.js\u0002if (typeof Object.create === 'function') {\n  // implementation from standard node.js 'util' module\n  module.exports = function inherits(ctor, superCtor) {\n    if (superCtor) {\n      ctor.super_ = superCtor\n      ctor.prototype = Object.create(superCtor.prototype, {\n        constructor: {\n          value: ctor,\n          enumerable: false,\n          writable: true,\n          configurable: true\n        }\n      })\n    }\n  };\n} else {\n  // old school shim for old browsers\n  module.exports = function inherits(ctor, superCtor) {\n    if (superCtor) {\n      ctor.super_ = superCtor\n      var TempCtor = function () {}\n      TempCtor.prototype = superCtor.prototype\n      ctor.prototype = new TempCtor()\n      ctor.prototype.constructor = ctor\n    }\n  }\n}\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/aWVlZTc1NEAxLjIuMQ==",
    "content": "/package.json\u0004{\n  \"name\": \"ieee754\",\n  \"description\": \"Read/write IEEE754 floating point numbers from/to a Buffer or array-like object\",\n  \"version\": \"1.2.1\",\n  \"author\": {\n    \"name\": \"Feross Aboukhadijeh\",\n    \"email\": \"feross@feross.org\",\n    \"url\": \"https://feross.org\"\n  },\n  \"contributors\": [\n    \"Romain Beauxis <toots@rastageeks.org>\"\n  ],\n  \"devDependencies\": {\n    \"airtap\": \"^3.0.0\",\n    \"standard\": \"*\",\n    \"tape\": \"^5.0.1\"\n  },\n  \"keywords\": [\n    \"IEEE 754\",\n    \"buffer\",\n    \"convert\",\n    \"floating point\",\n    \"ieee754\"\n  ],\n  \"license\": \"BSD-3-Clause\",\n  \"main\": \"index.js\",\n  \"types\": \"index.d.ts\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git://github.com/feross/ieee754.git\"\n  },\n  \"scripts\": {\n    \"test\": \"standard && npm run test-node && npm run test-browser\",\n    \"test-browser\": \"airtap -- test/*.js\",\n    \"test-browser-local\": \"airtap --local -- test/*.js\",\n    \"test-node\": \"tape test/*.js\"\n  },\n  \"funding\": [\n    {\n      \"type\": \"github\",\n      \"url\": \"https://github.com/sponsors/feross\"\n    },\n    {\n      \"type\": \"patreon\",\n      \"url\": \"https://www.patreon.com/feross\"\n    },\n    {\n      \"type\": \"consulting\",\n      \"url\": \"https://feross.org/support\"\n    }\n  ]\n}\n/index.js\bj/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n  var e, m\n  var eLen = (nBytes * 8) - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var nBits = -7\n  var i = isLE ? (nBytes - 1) : 0\n  var d = isLE ? -1 : 1\n  var s = buffer[offset + i]\n\n  i += d\n\n  e = s & ((1 << (-nBits)) - 1)\n  s >>= (-nBits)\n  nBits += eLen\n  for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n  m = e & ((1 << (-nBits)) - 1)\n  e >>= (-nBits)\n  nBits += mLen\n  for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n  if (e === 0) {\n    e = 1 - eBias\n  } else if (e === eMax) {\n    return m ? NaN : ((s ? -1 : 1) * Infinity)\n  } else {\n    m = m + Math.pow(2, mLen)\n    e = e - eBias\n  }\n  return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n  var e, m, c\n  var eLen = (nBytes * 8) - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n  var i = isLE ? 0 : (nBytes - 1)\n  var d = isLE ? 1 : -1\n  var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n  value = Math.abs(value)\n\n  if (isNaN(value) || value === Infinity) {\n    m = isNaN(value) ? 1 : 0\n    e = eMax\n  } else {\n    e = Math.floor(Math.log(value) / Math.LN2)\n    if (value * (c = Math.pow(2, -e)) < 1) {\n      e--\n      c *= 2\n    }\n    if (e + eBias >= 1) {\n      value += rt / c\n    } else {\n      value += rt * Math.pow(2, 1 - eBias)\n    }\n    if (value * c >= 2) {\n      e++\n      c /= 2\n    }\n\n    if (e + eBias >= eMax) {\n      m = 0\n      e = eMax\n    } else if (e + eBias >= 1) {\n      m = ((value * c) - 1) * Math.pow(2, mLen)\n      e = e + eBias\n    } else {\n      m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n      e = 0\n    }\n  }\n\n  for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n  e = (e << mLen) | m\n  eLen += mLen\n  for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n  buffer[offset + i - d] |= s * 128\n}\n/LICENSE\u0005Copyright 2008 Fair Oaks Labs, Inc.\n\nRedistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\n\n1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\n\n3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n/README.md\u0006s# ieee754 [![travis][travis-image]][travis-url] [![npm][npm-image]][npm-url] [![downloads][downloads-image]][downloads-url] [![javascript style guide][standard-image]][standard-url]\n\n[travis-image]: https://img.shields.io/travis/feross/ieee754/master.svg\n[travis-url]: https://travis-ci.org/feross/ieee754\n[npm-image]: https://img.shields.io/npm/v/ieee754.svg\n[npm-url]: https://npmjs.org/package/ieee754\n[downloads-image]: https://img.shields.io/npm/dm/ieee754.svg\n[downloads-url]: https://npmjs.org/package/ieee754\n[standard-image]: https://img.shields.io/badge/code_style-standard-brightgreen.svg\n[standard-url]: https://standardjs.com\n\n[![saucelabs][saucelabs-image]][saucelabs-url]\n\n[saucelabs-image]: https://saucelabs.com/browser-matrix/ieee754.svg\n[saucelabs-url]: https://saucelabs.com/u/ieee754\n\n### Read/write IEEE754 floating point numbers from/to a Buffer or array-like object.\n\n## install\n\n```\nnpm install ieee754\n```\n\n## methods\n\n`var ieee754 = require('ieee754')`\n\nThe `ieee754` object has the following functions:\n\n```\nieee754.read = function (buffer, offset, isLE, mLen, nBytes)\nieee754.write = function (buffer, value, offset, isLE, mLen, nBytes)\n```\n\nThe arguments mean the following:\n\n- buffer = the buffer\n- offset = offset into the buffer\n- value = value to set (only for `write`)\n- isLe = is little endian?\n- mLen = mantissa length\n- nBytes = number of bytes\n\n## what is ieee754?\n\nThe IEEE Standard for Floating-Point Arithmetic (IEEE 754) is a technical standard for floating-point computation. [Read more](http://en.wikipedia.org/wiki/IEEE_floating_point).\n\n## license\n\nBSD 3 Clause. Copyright (c) 2008, Fair Oaks Labs, Inc.\n/index.d.ts\u0001Ldeclare namespace ieee754 {\n    export function read(\n        buffer: Uint8Array, offset: number, isLE: boolean, mLen: number,\n        nBytes: number): number;\n    export function write(\n        buffer: Uint8Array, value: number, offset: number, isLE: boolean,\n        mLen: number, nBytes: number): void;\n  }\n  \n  export = ieee754;"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/aWdub3JlQDUuMi40",
    "content": "/LICENSE-MIT\u0004GCopyright (c) 2013 Kael Zhang <i@kael.me>, contributors\nhttp://kael.me/\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE./package.json\u0007{\n  \"name\": \"ignore\",\n  \"version\": \"5.2.4\",\n  \"description\": \"Ignore is a manager and filter for .gitignore rules, the one used by eslint, gitbook and many others.\",\n  \"files\": [\n    \"legacy.js\",\n    \"index.js\",\n    \"index.d.ts\",\n    \"LICENSE-MIT\"\n  ],\n  \"scripts\": {\n    \"prepublishOnly\": \"npm run build\",\n    \"build\": \"babel -o legacy.js index.js\",\n    \"test:lint\": \"eslint .\",\n    \"test:tsc\": \"tsc ./test/ts/simple.ts --lib ES6\",\n    \"test:ts\": \"node ./test/ts/simple.js\",\n    \"tap\": \"tap --reporter classic\",\n    \"test:git\": \"npm run tap test/git-check-ignore.js\",\n    \"test:ignore\": \"npm run tap test/ignore.js\",\n    \"test:others\": \"npm run tap test/others.js\",\n    \"test:cases\": \"npm run tap test/*.js -- --coverage\",\n    \"test:no-coverage\": \"npm run tap test/*.js -- --no-check-coverage\",\n    \"test:only\": \"npm run test:lint && npm run test:tsc && npm run test:ts && npm run test:cases\",\n    \"test\": \"npm run test:only\",\n    \"test:win32\": \"IGNORE_TEST_WIN32=1 npm run test\",\n    \"report\": \"tap --coverage-report=html\",\n    \"posttest\": \"npm run report && codecov\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git@github.com:kaelzhang/node-ignore.git\"\n  },\n  \"keywords\": [\n    \"ignore\",\n    \".gitignore\",\n    \"gitignore\",\n    \"npmignore\",\n    \"rules\",\n    \"manager\",\n    \"filter\",\n    \"regexp\",\n    \"regex\",\n    \"fnmatch\",\n    \"glob\",\n    \"asterisks\",\n    \"regular-expression\"\n  ],\n  \"author\": \"kael\",\n  \"license\": \"MIT\",\n  \"bugs\": {\n    \"url\": \"https://github.com/kaelzhang/node-ignore/issues\"\n  },\n  \"devDependencies\": {\n    \"@babel/cli\": \"^7.19.3\",\n    \"@babel/core\": \"^7.20.5\",\n    \"@babel/preset-env\": \"^7.20.2\",\n    \"codecov\": \"^3.8.2\",\n    \"debug\": \"^4.3.4\",\n    \"eslint\": \"^8.30.0\",\n    \"eslint-config-ostai\": \"^3.0.0\",\n    \"eslint-plugin-import\": \"^2.26.0\",\n    \"mkdirp\": \"^1.0.4\",\n    \"pre-suf\": \"^1.1.1\",\n    \"rimraf\": \"^3.0.2\",\n    \"spawn-sync\": \"^2.0.0\",\n    \"tap\": \"^16.3.2\",\n    \"tmp\": \"0.2.1\",\n    \"typescript\": \"^4.9.4\"\n  },\n  \"engines\": {\n    \"node\": \">= 4\"\n  }\n}\n/legacy.jsIQ\"use strict\";\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _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, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n// A simple implementation of make-array\nfunction makeArray(subject) {\n  return Array.isArray(subject) ? subject : [subject];\n}\nvar EMPTY = '';\nvar SPACE = ' ';\nvar ESCAPE = '\\\\';\nvar REGEX_TEST_BLANK_LINE = /^\\s+$/;\nvar REGEX_INVALID_TRAILING_BACKSLASH = /(?:[^\\\\]|^)\\\\$/;\nvar REGEX_REPLACE_LEADING_EXCAPED_EXCLAMATION = /^\\\\!/;\nvar REGEX_REPLACE_LEADING_EXCAPED_HASH = /^\\\\#/;\nvar REGEX_SPLITALL_CRLF = /\\r?\\n/g;\n// /foo,\n// ./foo,\n// ../foo,\n// .\n// ..\nvar REGEX_TEST_INVALID_PATH = /^\\.*\\/|^\\.+$/;\nvar SLASH = '/';\n\n// Do not use ternary expression here, since \"istanbul ignore next\" is buggy\nvar TMP_KEY_IGNORE = 'node-ignore';\n/* istanbul ignore else */\nif (typeof Symbol !== 'undefined') {\n  TMP_KEY_IGNORE = Symbol[\"for\"]('node-ignore');\n}\nvar KEY_IGNORE = TMP_KEY_IGNORE;\nvar define = function define(object, key, value) {\n  return Object.defineProperty(object, key, {\n    value: value\n  });\n};\nvar REGEX_REGEXP_RANGE = /([0-z])-([0-z])/g;\nvar RETURN_FALSE = function RETURN_FALSE() {\n  return false;\n};\n\n// Sanitize the range of a regular expression\n// The cases are complicated, see test cases for details\nvar sanitizeRange = function sanitizeRange(range) {\n  return range.replace(REGEX_REGEXP_RANGE, function (match, from, to) {\n    return from.charCodeAt(0) <= to.charCodeAt(0) ? match\n    // Invalid range (out of order) which is ok for gitignore rules but\n    //   fatal for JavaScript regular expression, so eliminate it.\n    : EMPTY;\n  });\n};\n\n// See fixtures #59\nvar cleanRangeBackSlash = function cleanRangeBackSlash(slashes) {\n  var length = slashes.length;\n  return slashes.slice(0, length - length % 2);\n};\n\n// > If the pattern ends with a slash,\n// > it is removed for the purpose of the following description,\n// > but it would only find a match with a directory.\n// > In other words, foo/ will match a directory foo and paths underneath it,\n// > but will not match a regular file or a symbolic link foo\n// >  (this is consistent with the way how pathspec works in general in Git).\n// '`foo/`' will not match regular file '`foo`' or symbolic link '`foo`'\n// -> ignore-rules will not deal with it, because it costs extra `fs.stat` call\n//      you could use option `mark: true` with `glob`\n\n// '`foo/`' should not continue with the '`..`'\nvar REPLACERS = [\n// > Trailing spaces are ignored unless they are quoted with backslash (\"\\\")\n[\n// (a\\ ) -> (a )\n// (a  ) -> (a)\n// (a \\ ) -> (a  )\n/\\\\?\\s+$/, function (match) {\n  return match.indexOf('\\\\') === 0 ? SPACE : EMPTY;\n}],\n// replace (\\ ) with ' '\n[/\\\\\\s/g, function () {\n  return SPACE;\n}],\n// Escape metacharacters\n// which is written down by users but means special for regular expressions.\n\n// > There are 12 characters with special meanings:\n// > - the backslash \\,\n// > - the caret ^,\n// > - the dollar sign $,\n// > - the period or dot .,\n// > - the vertical bar or pipe symbol |,\n// > - the question mark ?,\n// > - the asterisk or star *,\n// > - the plus sign +,\n// > - the opening parenthesis (,\n// > - the closing parenthesis ),\n// > - and the opening square bracket [,\n// > - the opening curly brace {,\n// > These special characters are often called \"metacharacters\".\n[/[\\\\$.|*+(){^]/g, function (match) {\n  return \"\\\\\".concat(match);\n}], [\n// > a question mark (?) matches a single character\n/(?!\\\\)\\?/g, function () {\n  return '[^/]';\n}],\n// leading slash\n[\n// > A leading slash matches the beginning of the pathname.\n// > For example, \"/*.c\" matches \"cat-file.c\" but not \"mozilla-sha1/sha1.c\".\n// A leading slash matches the beginning of the pathname\n/^\\//, function () {\n  return '^';\n}],\n// replace special metacharacter slash after the leading slash\n[/\\//g, function () {\n  return '\\\\/';\n}], [\n// > A leading \"**\" followed by a slash means match in all directories.\n// > For example, \"**/foo\" matches file or directory \"foo\" anywhere,\n// > the same as pattern \"foo\".\n// > \"**/foo/bar\" matches file or directory \"bar\" anywhere that is directly\n// >   under directory \"foo\".\n// Notice that the '*'s have been replaced as '\\\\*'\n/^\\^*\\\\\\*\\\\\\*\\\\\\//,\n// '**/foo' <-> 'foo'\nfunction () {\n  return '^(?:.*\\\\/)?';\n}],\n// starting\n[\n// there will be no leading '/'\n//   (which has been replaced by section \"leading slash\")\n// If starts with '**', adding a '^' to the regular expression also works\n/^(?=[^^])/, function startingReplacer() {\n  // If has a slash `/` at the beginning or middle\n  return !/\\/(?!$)/.test(this)\n  // > Prior to 2.22.1\n  // > If the pattern does not contain a slash /,\n  // >   Git treats it as a shell glob pattern\n  // Actually, if there is only a trailing slash,\n  //   git also treats it as a shell glob pattern\n\n  // After 2.22.1 (compatible but clearer)\n  // > If there is a separator at the beginning or middle (or both)\n  // > of the pattern, then the pattern is relative to the directory\n  // > level of the particular .gitignore file itself.\n  // > Otherwise the pattern may also match at any level below\n  // > the .gitignore level.\n  ? '(?:^|\\\\/)'\n\n  // > Otherwise, Git treats the pattern as a shell glob suitable for\n  // >   consumption by fnmatch(3)\n  : '^';\n}],\n// two globstars\n[\n// Use lookahead assertions so that we could match more than one `'/**'`\n/\\\\\\/\\\\\\*\\\\\\*(?=\\\\\\/|$)/g,\n// Zero, one or several directories\n// should not use '*', or it will be replaced by the next replacer\n\n// Check if it is not the last `'/**'`\nfunction (_, index, str) {\n  return index + 6 < str.length\n\n  // case: /**/\n  // > A slash followed by two consecutive asterisks then a slash matches\n  // >   zero or more directories.\n  // > For example, \"a/**/b\" matches \"a/b\", \"a/x/b\", \"a/x/y/b\" and so on.\n  // '/**/'\n  ? '(?:\\\\/[^\\\\/]+)*'\n\n  // case: /**\n  // > A trailing `\"/**\"` matches everything inside.\n\n  // #21: everything inside but it should not include the current folder\n  : '\\\\/.+';\n}],\n// normal intermediate wildcards\n[\n// Never replace escaped '*'\n// ignore rule '\\*' will match the path '*'\n\n// 'abc.*/' -> go\n// 'abc.*'  -> skip this rule,\n//    coz trailing single wildcard will be handed by [trailing wildcard]\n/(^|[^\\\\]+)(\\\\\\*)+(?=.+)/g,\n// '*.js' matches '.js'\n// '*.js' doesn't match 'abc'\nfunction (_, p1, p2) {\n  // 1.\n  // > An asterisk \"*\" matches anything except a slash.\n  // 2.\n  // > Other consecutive asterisks are considered regular asterisks\n  // > and will match according to the previous rules.\n  var unescaped = p2.replace(/\\\\\\*/g, '[^\\\\/]*');\n  return p1 + unescaped;\n}], [\n// unescape, revert step 3 except for back slash\n// For example, if a user escape a '\\\\*',\n// after step 3, the result will be '\\\\\\\\\\\\*'\n/\\\\\\\\\\\\(?=[$.|*+(){^])/g, function () {\n  return ESCAPE;\n}], [\n// '\\\\\\\\' -> '\\\\'\n/\\\\\\\\/g, function () {\n  return ESCAPE;\n}], [\n// > The range notation, e.g. [a-zA-Z],\n// > can be used to match one of the characters in a range.\n\n// `\\` is escaped by step 3\n/(\\\\)?\\[([^\\]/]*?)(\\\\*)($|\\])/g, function (match, leadEscape, range, endEscape, close) {\n  return leadEscape === ESCAPE\n  // '\\\\[bar]' -> '\\\\\\\\[bar\\\\]'\n  ? \"\\\\[\".concat(range).concat(cleanRangeBackSlash(endEscape)).concat(close) : close === ']' ? endEscape.length % 2 === 0\n  // A normal case, and it is a range notation\n  // '[bar]'\n  // '[bar\\\\\\\\]'\n  ? \"[\".concat(sanitizeRange(range)).concat(endEscape, \"]\") // Invalid range notaton\n  // '[bar\\\\]' -> '[bar\\\\\\\\]'\n  : '[]' : '[]';\n}],\n// ending\n[\n// 'js' will not match 'js.'\n// 'ab' will not match 'abc'\n/(?:[^*])$/,\n// WTF!\n// https://git-scm.com/docs/gitignore\n// changes in [2.22.1](https://git-scm.com/docs/gitignore/2.22.1)\n// which re-fixes #24, #38\n\n// > If there is a separator at the end of the pattern then the pattern\n// > will only match directories, otherwise the pattern can match both\n// > files and directories.\n\n// 'js*' will not match 'a.js'\n// 'js/' will not match 'a.js'\n// 'js' will match 'a.js' and 'a.js/'\nfunction (match) {\n  return /\\/$/.test(match)\n  // foo/ will not match 'foo'\n  ? \"\".concat(match, \"$\") // foo matches 'foo' and 'foo/'\n  : \"\".concat(match, \"(?=$|\\\\/$)\");\n}],\n// trailing wildcard\n[/(\\^|\\\\\\/)?\\\\\\*$/, function (_, p1) {\n  var prefix = p1\n  // '\\^':\n  // '/*' does not match EMPTY\n  // '/*' does not match everything\n\n  // '\\\\\\/':\n  // 'abc/*' does not match 'abc/'\n  ? \"\".concat(p1, \"[^/]+\") // 'a*' matches 'a'\n  // 'a*' matches 'aa'\n  : '[^/]*';\n  return \"\".concat(prefix, \"(?=$|\\\\/$)\");\n}]];\n\n// A simple cache, because an ignore rule only has only one certain meaning\nvar regexCache = Object.create(null);\n\n// @param {pattern}\nvar makeRegex = function makeRegex(pattern, ignoreCase) {\n  var source = regexCache[pattern];\n  if (!source) {\n    source = REPLACERS.reduce(function (prev, current) {\n      return prev.replace(current[0], current[1].bind(pattern));\n    }, pattern);\n    regexCache[pattern] = source;\n  }\n  return ignoreCase ? new RegExp(source, 'i') : new RegExp(source);\n};\nvar isString = function isString(subject) {\n  return typeof subject === 'string';\n};\n\n// > A blank line matches no files, so it can serve as a separator for readability.\nvar checkPattern = function checkPattern(pattern) {\n  return pattern && isString(pattern) && !REGEX_TEST_BLANK_LINE.test(pattern) && !REGEX_INVALID_TRAILING_BACKSLASH.test(pattern)\n\n  // > A line starting with # serves as a comment.\n  && pattern.indexOf('#') !== 0;\n};\nvar splitPattern = function splitPattern(pattern) {\n  return pattern.split(REGEX_SPLITALL_CRLF);\n};\nvar IgnoreRule = /*#__PURE__*/_createClass(function IgnoreRule(origin, pattern, negative, regex) {\n  _classCallCheck(this, IgnoreRule);\n  this.origin = origin;\n  this.pattern = pattern;\n  this.negative = negative;\n  this.regex = regex;\n});\nvar createRule = function createRule(pattern, ignoreCase) {\n  var origin = pattern;\n  var negative = false;\n\n  // > An optional prefix \"!\" which negates the pattern;\n  if (pattern.indexOf('!') === 0) {\n    negative = true;\n    pattern = pattern.substr(1);\n  }\n  pattern = pattern\n  // > Put a backslash (\"\\\") in front of the first \"!\" for patterns that\n  // >   begin with a literal \"!\", for example, `\"\\!important!.txt\"`.\n  .replace(REGEX_REPLACE_LEADING_EXCAPED_EXCLAMATION, '!')\n  // > Put a backslash (\"\\\") in front of the first hash for patterns that\n  // >   begin with a hash.\n  .replace(REGEX_REPLACE_LEADING_EXCAPED_HASH, '#');\n  var regex = makeRegex(pattern, ignoreCase);\n  return new IgnoreRule(origin, pattern, negative, regex);\n};\nvar throwError = function throwError(message, Ctor) {\n  throw new Ctor(message);\n};\nvar checkPath = function checkPath(path, originalPath, doThrow) {\n  if (!isString(path)) {\n    return doThrow(\"path must be a string, but got `\".concat(originalPath, \"`\"), TypeError);\n  }\n\n  // We don't know if we should ignore EMPTY, so throw\n  if (!path) {\n    return doThrow(\"path must not be empty\", TypeError);\n  }\n\n  // Check if it is a relative path\n  if (checkPath.isNotRelative(path)) {\n    var r = '`path.relative()`d';\n    return doThrow(\"path should be a \".concat(r, \" string, but got \\\"\").concat(originalPath, \"\\\"\"), RangeError);\n  }\n  return true;\n};\nvar isNotRelative = function isNotRelative(path) {\n  return REGEX_TEST_INVALID_PATH.test(path);\n};\ncheckPath.isNotRelative = isNotRelative;\ncheckPath.convert = function (p) {\n  return p;\n};\nvar Ignore = /*#__PURE__*/function () {\n  function Ignore() {\n    var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n      _ref$ignorecase = _ref.ignorecase,\n      ignorecase = _ref$ignorecase === void 0 ? true : _ref$ignorecase,\n      _ref$ignoreCase = _ref.ignoreCase,\n      ignoreCase = _ref$ignoreCase === void 0 ? ignorecase : _ref$ignoreCase,\n      _ref$allowRelativePat = _ref.allowRelativePaths,\n      allowRelativePaths = _ref$allowRelativePat === void 0 ? false : _ref$allowRelativePat;\n    _classCallCheck(this, Ignore);\n    define(this, KEY_IGNORE, true);\n    this._rules = [];\n    this._ignoreCase = ignoreCase;\n    this._allowRelativePaths = allowRelativePaths;\n    this._initCache();\n  }\n  _createClass(Ignore, [{\n    key: \"_initCache\",\n    value: function _initCache() {\n      this._ignoreCache = Object.create(null);\n      this._testCache = Object.create(null);\n    }\n  }, {\n    key: \"_addPattern\",\n    value: function _addPattern(pattern) {\n      // #32\n      if (pattern && pattern[KEY_IGNORE]) {\n        this._rules = this._rules.concat(pattern._rules);\n        this._added = true;\n        return;\n      }\n      if (checkPattern(pattern)) {\n        var rule = createRule(pattern, this._ignoreCase);\n        this._added = true;\n        this._rules.push(rule);\n      }\n    }\n\n    // @param {Array<string> | string | Ignore} pattern\n  }, {\n    key: \"add\",\n    value: function add(pattern) {\n      this._added = false;\n      makeArray(isString(pattern) ? splitPattern(pattern) : pattern).forEach(this._addPattern, this);\n\n      // Some rules have just added to the ignore,\n      // making the behavior changed.\n      if (this._added) {\n        this._initCache();\n      }\n      return this;\n    }\n\n    // legacy\n  }, {\n    key: \"addPattern\",\n    value: function addPattern(pattern) {\n      return this.add(pattern);\n    }\n\n    //          |           ignored : unignored\n    // negative |   0:0   |   0:1   |   1:0   |   1:1\n    // -------- | ------- | ------- | ------- | --------\n    //     0    |  TEST   |  TEST   |  SKIP   |    X\n    //     1    |  TESTIF |  SKIP   |  TEST   |    X\n\n    // - SKIP: always skip\n    // - TEST: always test\n    // - TESTIF: only test if checkUnignored\n    // - X: that never happen\n\n    // @param {boolean} whether should check if the path is unignored,\n    //   setting `checkUnignored` to `false` could reduce additional\n    //   path matching.\n\n    // @returns {TestResult} true if a file is ignored\n  }, {\n    key: \"_testOne\",\n    value: function _testOne(path, checkUnignored) {\n      var ignored = false;\n      var unignored = false;\n      this._rules.forEach(function (rule) {\n        var negative = rule.negative;\n        if (unignored === negative && ignored !== unignored || negative && !ignored && !unignored && !checkUnignored) {\n          return;\n        }\n        var matched = rule.regex.test(path);\n        if (matched) {\n          ignored = !negative;\n          unignored = negative;\n        }\n      });\n      return {\n        ignored: ignored,\n        unignored: unignored\n      };\n    }\n\n    // @returns {TestResult}\n  }, {\n    key: \"_test\",\n    value: function _test(originalPath, cache, checkUnignored, slices) {\n      var path = originalPath\n      // Supports nullable path\n      && checkPath.convert(originalPath);\n      checkPath(path, originalPath, this._allowRelativePaths ? RETURN_FALSE : throwError);\n      return this._t(path, cache, checkUnignored, slices);\n    }\n  }, {\n    key: \"_t\",\n    value: function _t(path, cache, checkUnignored, slices) {\n      if (path in cache) {\n        return cache[path];\n      }\n      if (!slices) {\n        // path/to/a.js\n        // ['path', 'to', 'a.js']\n        slices = path.split(SLASH);\n      }\n      slices.pop();\n\n      // If the path has no parent directory, just test it\n      if (!slices.length) {\n        return cache[path] = this._testOne(path, checkUnignored);\n      }\n      var parent = this._t(slices.join(SLASH) + SLASH, cache, checkUnignored, slices);\n\n      // If the path contains a parent directory, check the parent first\n      return cache[path] = parent.ignored\n      // > It is not possible to re-include a file if a parent directory of\n      // >   that file is excluded.\n      ? parent : this._testOne(path, checkUnignored);\n    }\n  }, {\n    key: \"ignores\",\n    value: function ignores(path) {\n      return this._test(path, this._ignoreCache, false).ignored;\n    }\n  }, {\n    key: \"createFilter\",\n    value: function createFilter() {\n      var _this = this;\n      return function (path) {\n        return !_this.ignores(path);\n      };\n    }\n  }, {\n    key: \"filter\",\n    value: function filter(paths) {\n      return makeArray(paths).filter(this.createFilter());\n    }\n\n    // @returns {TestResult}\n  }, {\n    key: \"test\",\n    value: function test(path) {\n      return this._test(path, this._testCache, true);\n    }\n  }]);\n  return Ignore;\n}();\nvar factory = function factory(options) {\n  return new Ignore(options);\n};\nvar isPathValid = function isPathValid(path) {\n  return checkPath(path && checkPath.convert(path), path, RETURN_FALSE);\n};\nfactory.isPathValid = isPathValid;\n\n// Fixes typescript\nfactory[\"default\"] = factory;\nmodule.exports = factory;\n\n// Windows\n// --------------------------------------------------------------\n/* istanbul ignore if */\nif (\n// Detect `process` so that it can run in browsers.\ntypeof process !== 'undefined' && (process.env && process.env.IGNORE_TEST_WIN32 || process.platform === 'win32')) {\n  /* eslint no-control-regex: \"off\" */\n  var makePosix = function makePosix(str) {\n    return /^\\\\\\\\\\?\\\\/.test(str) || /[\\0-\\x1F\"<>\\|]+/.test(str) ? str : str.replace(/\\\\/g, '/');\n  };\n  checkPath.convert = makePosix;\n\n  // 'C:\\\\foo'     <- 'C:\\\\foo' has been converted to 'C:/'\n  // 'd:\\\\foo'\n  var REGIX_IS_WINDOWS_PATH_ABSOLUTE = /^[a-z]:\\//i;\n  checkPath.isNotRelative = function (path) {\n    return REGIX_IS_WINDOWS_PATH_ABSOLUTE.test(path) || isNotRelative(path);\n  };\n}\n/index.js>// A simple implementation of make-array\nfunction makeArray (subject) {\n  return Array.isArray(subject)\n    ? subject\n    : [subject]\n}\n\nconst EMPTY = ''\nconst SPACE = ' '\nconst ESCAPE = '\\\\'\nconst REGEX_TEST_BLANK_LINE = /^\\s+$/\nconst REGEX_INVALID_TRAILING_BACKSLASH = /(?:[^\\\\]|^)\\\\$/\nconst REGEX_REPLACE_LEADING_EXCAPED_EXCLAMATION = /^\\\\!/\nconst REGEX_REPLACE_LEADING_EXCAPED_HASH = /^\\\\#/\nconst REGEX_SPLITALL_CRLF = /\\r?\\n/g\n// /foo,\n// ./foo,\n// ../foo,\n// .\n// ..\nconst REGEX_TEST_INVALID_PATH = /^\\.*\\/|^\\.+$/\n\nconst SLASH = '/'\n\n// Do not use ternary expression here, since \"istanbul ignore next\" is buggy\nlet TMP_KEY_IGNORE = 'node-ignore'\n/* istanbul ignore else */\nif (typeof Symbol !== 'undefined') {\n  TMP_KEY_IGNORE = Symbol.for('node-ignore')\n}\nconst KEY_IGNORE = TMP_KEY_IGNORE\n\nconst define = (object, key, value) =>\n  Object.defineProperty(object, key, {value})\n\nconst REGEX_REGEXP_RANGE = /([0-z])-([0-z])/g\n\nconst RETURN_FALSE = () => false\n\n// Sanitize the range of a regular expression\n// The cases are complicated, see test cases for details\nconst sanitizeRange = range => range.replace(\n  REGEX_REGEXP_RANGE,\n  (match, from, to) => from.charCodeAt(0) <= to.charCodeAt(0)\n    ? match\n    // Invalid range (out of order) which is ok for gitignore rules but\n    //   fatal for JavaScript regular expression, so eliminate it.\n    : EMPTY\n)\n\n// See fixtures #59\nconst cleanRangeBackSlash = slashes => {\n  const {length} = slashes\n  return slashes.slice(0, length - length % 2)\n}\n\n// > If the pattern ends with a slash,\n// > it is removed for the purpose of the following description,\n// > but it would only find a match with a directory.\n// > In other words, foo/ will match a directory foo and paths underneath it,\n// > but will not match a regular file or a symbolic link foo\n// >  (this is consistent with the way how pathspec works in general in Git).\n// '`foo/`' will not match regular file '`foo`' or symbolic link '`foo`'\n// -> ignore-rules will not deal with it, because it costs extra `fs.stat` call\n//      you could use option `mark: true` with `glob`\n\n// '`foo/`' should not continue with the '`..`'\nconst REPLACERS = [\n\n  // > Trailing spaces are ignored unless they are quoted with backslash (\"\\\")\n  [\n    // (a\\ ) -> (a )\n    // (a  ) -> (a)\n    // (a \\ ) -> (a  )\n    /\\\\?\\s+$/,\n    match => match.indexOf('\\\\') === 0\n      ? SPACE\n      : EMPTY\n  ],\n\n  // replace (\\ ) with ' '\n  [\n    /\\\\\\s/g,\n    () => SPACE\n  ],\n\n  // Escape metacharacters\n  // which is written down by users but means special for regular expressions.\n\n  // > There are 12 characters with special meanings:\n  // > - the backslash \\,\n  // > - the caret ^,\n  // > - the dollar sign $,\n  // > - the period or dot .,\n  // > - the vertical bar or pipe symbol |,\n  // > - the question mark ?,\n  // > - the asterisk or star *,\n  // > - the plus sign +,\n  // > - the opening parenthesis (,\n  // > - the closing parenthesis ),\n  // > - and the opening square bracket [,\n  // > - the opening curly brace {,\n  // > These special characters are often called \"metacharacters\".\n  [\n    /[\\\\$.|*+(){^]/g,\n    match => `\\\\${match}`\n  ],\n\n  [\n    // > a question mark (?) matches a single character\n    /(?!\\\\)\\?/g,\n    () => '[^/]'\n  ],\n\n  // leading slash\n  [\n\n    // > A leading slash matches the beginning of the pathname.\n    // > For example, \"/*.c\" matches \"cat-file.c\" but not \"mozilla-sha1/sha1.c\".\n    // A leading slash matches the beginning of the pathname\n    /^\\//,\n    () => '^'\n  ],\n\n  // replace special metacharacter slash after the leading slash\n  [\n    /\\//g,\n    () => '\\\\/'\n  ],\n\n  [\n    // > A leading \"**\" followed by a slash means match in all directories.\n    // > For example, \"**/foo\" matches file or directory \"foo\" anywhere,\n    // > the same as pattern \"foo\".\n    // > \"**/foo/bar\" matches file or directory \"bar\" anywhere that is directly\n    // >   under directory \"foo\".\n    // Notice that the '*'s have been replaced as '\\\\*'\n    /^\\^*\\\\\\*\\\\\\*\\\\\\//,\n\n    // '**/foo' <-> 'foo'\n    () => '^(?:.*\\\\/)?'\n  ],\n\n  // starting\n  [\n    // there will be no leading '/'\n    //   (which has been replaced by section \"leading slash\")\n    // If starts with '**', adding a '^' to the regular expression also works\n    /^(?=[^^])/,\n    function startingReplacer () {\n      // If has a slash `/` at the beginning or middle\n      return !/\\/(?!$)/.test(this)\n        // > Prior to 2.22.1\n        // > If the pattern does not contain a slash /,\n        // >   Git treats it as a shell glob pattern\n        // Actually, if there is only a trailing slash,\n        //   git also treats it as a shell glob pattern\n\n        // After 2.22.1 (compatible but clearer)\n        // > If there is a separator at the beginning or middle (or both)\n        // > of the pattern, then the pattern is relative to the directory\n        // > level of the particular .gitignore file itself.\n        // > Otherwise the pattern may also match at any level below\n        // > the .gitignore level.\n        ? '(?:^|\\\\/)'\n\n        // > Otherwise, Git treats the pattern as a shell glob suitable for\n        // >   consumption by fnmatch(3)\n        : '^'\n    }\n  ],\n\n  // two globstars\n  [\n    // Use lookahead assertions so that we could match more than one `'/**'`\n    /\\\\\\/\\\\\\*\\\\\\*(?=\\\\\\/|$)/g,\n\n    // Zero, one or several directories\n    // should not use '*', or it will be replaced by the next replacer\n\n    // Check if it is not the last `'/**'`\n    (_, index, str) => index + 6 < str.length\n\n      // case: /**/\n      // > A slash followed by two consecutive asterisks then a slash matches\n      // >   zero or more directories.\n      // > For example, \"a/**/b\" matches \"a/b\", \"a/x/b\", \"a/x/y/b\" and so on.\n      // '/**/'\n      ? '(?:\\\\/[^\\\\/]+)*'\n\n      // case: /**\n      // > A trailing `\"/**\"` matches everything inside.\n\n      // #21: everything inside but it should not include the current folder\n      : '\\\\/.+'\n  ],\n\n  // normal intermediate wildcards\n  [\n    // Never replace escaped '*'\n    // ignore rule '\\*' will match the path '*'\n\n    // 'abc.*/' -> go\n    // 'abc.*'  -> skip this rule,\n    //    coz trailing single wildcard will be handed by [trailing wildcard]\n    /(^|[^\\\\]+)(\\\\\\*)+(?=.+)/g,\n\n    // '*.js' matches '.js'\n    // '*.js' doesn't match 'abc'\n    (_, p1, p2) => {\n      // 1.\n      // > An asterisk \"*\" matches anything except a slash.\n      // 2.\n      // > Other consecutive asterisks are considered regular asterisks\n      // > and will match according to the previous rules.\n      const unescaped = p2.replace(/\\\\\\*/g, '[^\\\\/]*')\n      return p1 + unescaped\n    }\n  ],\n\n  [\n    // unescape, revert step 3 except for back slash\n    // For example, if a user escape a '\\\\*',\n    // after step 3, the result will be '\\\\\\\\\\\\*'\n    /\\\\\\\\\\\\(?=[$.|*+(){^])/g,\n    () => ESCAPE\n  ],\n\n  [\n    // '\\\\\\\\' -> '\\\\'\n    /\\\\\\\\/g,\n    () => ESCAPE\n  ],\n\n  [\n    // > The range notation, e.g. [a-zA-Z],\n    // > can be used to match one of the characters in a range.\n\n    // `\\` is escaped by step 3\n    /(\\\\)?\\[([^\\]/]*?)(\\\\*)($|\\])/g,\n    (match, leadEscape, range, endEscape, close) => leadEscape === ESCAPE\n      // '\\\\[bar]' -> '\\\\\\\\[bar\\\\]'\n      ? `\\\\[${range}${cleanRangeBackSlash(endEscape)}${close}`\n      : close === ']'\n        ? endEscape.length % 2 === 0\n          // A normal case, and it is a range notation\n          // '[bar]'\n          // '[bar\\\\\\\\]'\n          ? `[${sanitizeRange(range)}${endEscape}]`\n          // Invalid range notaton\n          // '[bar\\\\]' -> '[bar\\\\\\\\]'\n          : '[]'\n        : '[]'\n  ],\n\n  // ending\n  [\n    // 'js' will not match 'js.'\n    // 'ab' will not match 'abc'\n    /(?:[^*])$/,\n\n    // WTF!\n    // https://git-scm.com/docs/gitignore\n    // changes in [2.22.1](https://git-scm.com/docs/gitignore/2.22.1)\n    // which re-fixes #24, #38\n\n    // > If there is a separator at the end of the pattern then the pattern\n    // > will only match directories, otherwise the pattern can match both\n    // > files and directories.\n\n    // 'js*' will not match 'a.js'\n    // 'js/' will not match 'a.js'\n    // 'js' will match 'a.js' and 'a.js/'\n    match => /\\/$/.test(match)\n      // foo/ will not match 'foo'\n      ? `${match}$`\n      // foo matches 'foo' and 'foo/'\n      : `${match}(?=$|\\\\/$)`\n  ],\n\n  // trailing wildcard\n  [\n    /(\\^|\\\\\\/)?\\\\\\*$/,\n    (_, p1) => {\n      const prefix = p1\n        // '\\^':\n        // '/*' does not match EMPTY\n        // '/*' does not match everything\n\n        // '\\\\\\/':\n        // 'abc/*' does not match 'abc/'\n        ? `${p1}[^/]+`\n\n        // 'a*' matches 'a'\n        // 'a*' matches 'aa'\n        : '[^/]*'\n\n      return `${prefix}(?=$|\\\\/$)`\n    }\n  ],\n]\n\n// A simple cache, because an ignore rule only has only one certain meaning\nconst regexCache = Object.create(null)\n\n// @param {pattern}\nconst makeRegex = (pattern, ignoreCase) => {\n  let source = regexCache[pattern]\n\n  if (!source) {\n    source = REPLACERS.reduce(\n      (prev, current) => prev.replace(current[0], current[1].bind(pattern)),\n      pattern\n    )\n    regexCache[pattern] = source\n  }\n\n  return ignoreCase\n    ? new RegExp(source, 'i')\n    : new RegExp(source)\n}\n\nconst isString = subject => typeof subject === 'string'\n\n// > A blank line matches no files, so it can serve as a separator for readability.\nconst checkPattern = pattern => pattern\n  && isString(pattern)\n  && !REGEX_TEST_BLANK_LINE.test(pattern)\n  && !REGEX_INVALID_TRAILING_BACKSLASH.test(pattern)\n\n  // > A line starting with # serves as a comment.\n  && pattern.indexOf('#') !== 0\n\nconst splitPattern = pattern => pattern.split(REGEX_SPLITALL_CRLF)\n\nclass IgnoreRule {\n  constructor (\n    origin,\n    pattern,\n    negative,\n    regex\n  ) {\n    this.origin = origin\n    this.pattern = pattern\n    this.negative = negative\n    this.regex = regex\n  }\n}\n\nconst createRule = (pattern, ignoreCase) => {\n  const origin = pattern\n  let negative = false\n\n  // > An optional prefix \"!\" which negates the pattern;\n  if (pattern.indexOf('!') === 0) {\n    negative = true\n    pattern = pattern.substr(1)\n  }\n\n  pattern = pattern\n  // > Put a backslash (\"\\\") in front of the first \"!\" for patterns that\n  // >   begin with a literal \"!\", for example, `\"\\!important!.txt\"`.\n  .replace(REGEX_REPLACE_LEADING_EXCAPED_EXCLAMATION, '!')\n  // > Put a backslash (\"\\\") in front of the first hash for patterns that\n  // >   begin with a hash.\n  .replace(REGEX_REPLACE_LEADING_EXCAPED_HASH, '#')\n\n  const regex = makeRegex(pattern, ignoreCase)\n\n  return new IgnoreRule(\n    origin,\n    pattern,\n    negative,\n    regex\n  )\n}\n\nconst throwError = (message, Ctor) => {\n  throw new Ctor(message)\n}\n\nconst checkPath = (path, originalPath, doThrow) => {\n  if (!isString(path)) {\n    return doThrow(\n      `path must be a string, but got \\`${originalPath}\\``,\n      TypeError\n    )\n  }\n\n  // We don't know if we should ignore EMPTY, so throw\n  if (!path) {\n    return doThrow(`path must not be empty`, TypeError)\n  }\n\n  // Check if it is a relative path\n  if (checkPath.isNotRelative(path)) {\n    const r = '`path.relative()`d'\n    return doThrow(\n      `path should be a ${r} string, but got \"${originalPath}\"`,\n      RangeError\n    )\n  }\n\n  return true\n}\n\nconst isNotRelative = path => REGEX_TEST_INVALID_PATH.test(path)\n\ncheckPath.isNotRelative = isNotRelative\ncheckPath.convert = p => p\n\nclass Ignore {\n  constructor ({\n    ignorecase = true,\n    ignoreCase = ignorecase,\n    allowRelativePaths = false\n  } = {}) {\n    define(this, KEY_IGNORE, true)\n\n    this._rules = []\n    this._ignoreCase = ignoreCase\n    this._allowRelativePaths = allowRelativePaths\n    this._initCache()\n  }\n\n  _initCache () {\n    this._ignoreCache = Object.create(null)\n    this._testCache = Object.create(null)\n  }\n\n  _addPattern (pattern) {\n    // #32\n    if (pattern && pattern[KEY_IGNORE]) {\n      this._rules = this._rules.concat(pattern._rules)\n      this._added = true\n      return\n    }\n\n    if (checkPattern(pattern)) {\n      const rule = createRule(pattern, this._ignoreCase)\n      this._added = true\n      this._rules.push(rule)\n    }\n  }\n\n  // @param {Array<string> | string | Ignore} pattern\n  add (pattern) {\n    this._added = false\n\n    makeArray(\n      isString(pattern)\n        ? splitPattern(pattern)\n        : pattern\n    ).forEach(this._addPattern, this)\n\n    // Some rules have just added to the ignore,\n    // making the behavior changed.\n    if (this._added) {\n      this._initCache()\n    }\n\n    return this\n  }\n\n  // legacy\n  addPattern (pattern) {\n    return this.add(pattern)\n  }\n\n  //          |           ignored : unignored\n  // negative |   0:0   |   0:1   |   1:0   |   1:1\n  // -------- | ------- | ------- | ------- | --------\n  //     0    |  TEST   |  TEST   |  SKIP   |    X\n  //     1    |  TESTIF |  SKIP   |  TEST   |    X\n\n  // - SKIP: always skip\n  // - TEST: always test\n  // - TESTIF: only test if checkUnignored\n  // - X: that never happen\n\n  // @param {boolean} whether should check if the path is unignored,\n  //   setting `checkUnignored` to `false` could reduce additional\n  //   path matching.\n\n  // @returns {TestResult} true if a file is ignored\n  _testOne (path, checkUnignored) {\n    let ignored = false\n    let unignored = false\n\n    this._rules.forEach(rule => {\n      const {negative} = rule\n      if (\n        unignored === negative && ignored !== unignored\n        || negative && !ignored && !unignored && !checkUnignored\n      ) {\n        return\n      }\n\n      const matched = rule.regex.test(path)\n\n      if (matched) {\n        ignored = !negative\n        unignored = negative\n      }\n    })\n\n    return {\n      ignored,\n      unignored\n    }\n  }\n\n  // @returns {TestResult}\n  _test (originalPath, cache, checkUnignored, slices) {\n    const path = originalPath\n      // Supports nullable path\n      && checkPath.convert(originalPath)\n\n    checkPath(\n      path,\n      originalPath,\n      this._allowRelativePaths\n        ? RETURN_FALSE\n        : throwError\n    )\n\n    return this._t(path, cache, checkUnignored, slices)\n  }\n\n  _t (path, cache, checkUnignored, slices) {\n    if (path in cache) {\n      return cache[path]\n    }\n\n    if (!slices) {\n      // path/to/a.js\n      // ['path', 'to', 'a.js']\n      slices = path.split(SLASH)\n    }\n\n    slices.pop()\n\n    // If the path has no parent directory, just test it\n    if (!slices.length) {\n      return cache[path] = this._testOne(path, checkUnignored)\n    }\n\n    const parent = this._t(\n      slices.join(SLASH) + SLASH,\n      cache,\n      checkUnignored,\n      slices\n    )\n\n    // If the path contains a parent directory, check the parent first\n    return cache[path] = parent.ignored\n      // > It is not possible to re-include a file if a parent directory of\n      // >   that file is excluded.\n      ? parent\n      : this._testOne(path, checkUnignored)\n  }\n\n  ignores (path) {\n    return this._test(path, this._ignoreCache, false).ignored\n  }\n\n  createFilter () {\n    return path => !this.ignores(path)\n  }\n\n  filter (paths) {\n    return makeArray(paths).filter(this.createFilter())\n  }\n\n  // @returns {TestResult}\n  test (path) {\n    return this._test(path, this._testCache, true)\n  }\n}\n\nconst factory = options => new Ignore(options)\n\nconst isPathValid = path =>\n  checkPath(path && checkPath.convert(path), path, RETURN_FALSE)\n\nfactory.isPathValid = isPathValid\n\n// Fixes typescript\nfactory.default = factory\n\nmodule.exports = factory\n\n// Windows\n// --------------------------------------------------------------\n/* istanbul ignore if */\nif (\n  // Detect `process` so that it can run in browsers.\n  typeof process !== 'undefined'\n  && (\n    process.env && process.env.IGNORE_TEST_WIN32\n    || process.platform === 'win32'\n  )\n) {\n  /* eslint no-control-regex: \"off\" */\n  const makePosix = str => /^\\\\\\\\\\?\\\\/.test(str)\n  || /[\"<>|\\u0000-\\u001F]+/u.test(str)\n    ? str\n    : str.replace(/\\\\/g, '/')\n\n  checkPath.convert = makePosix\n\n  // 'C:\\\\foo'     <- 'C:\\\\foo' has been converted to 'C:/'\n  // 'd:\\\\foo'\n  const REGIX_IS_WINDOWS_PATH_ABSOLUTE = /^[a-z]:\\//i\n  checkPath.isNotRelative = path =>\n    REGIX_IS_WINDOWS_PATH_ABSOLUTE.test(path)\n    || isNotRelative(path)\n}\n/index.d.ts\u0005type Pathname = string\n\ninterface TestResult {\n  ignored: boolean\n  unignored: boolean\n}\n\nexport interface Ignore {\n  /**\n   * Adds one or several rules to the current manager.\n   * @param  {string[]} patterns\n   * @returns IgnoreBase\n   */\n  add(patterns: string | Ignore | readonly (string | Ignore)[]): this\n\n  /**\n   * Filters the given array of pathnames, and returns the filtered array.\n   * NOTICE that each path here should be a relative path to the root of your repository.\n   * @param paths the array of paths to be filtered.\n   * @returns The filtered array of paths\n   */\n  filter(pathnames: readonly Pathname[]): Pathname[]\n\n  /**\n   * Creates a filter function which could filter\n   * an array of paths with Array.prototype.filter.\n   */\n  createFilter(): (pathname: Pathname) => boolean\n\n  /**\n   * Returns Boolean whether pathname should be ignored.\n   * @param  {string} pathname a path to check\n   * @returns boolean\n   */\n  ignores(pathname: Pathname): boolean\n\n  /**\n   * Returns whether pathname should be ignored or unignored\n   * @param  {string} pathname a path to check\n   * @returns TestResult\n   */\n  test(pathname: Pathname): TestResult\n}\n\ninterface Options {\n  ignorecase?: boolean\n  // For compatibility\n  ignoreCase?: boolean\n  allowRelativePaths?: boolean\n}\n\n/**\n * Creates new ignore manager.\n */\ndeclare function ignore(options?: Options): Ignore\n\ndeclare namespace ignore {\n  export function isPathValid (pathname: string): boolean\n}\n\nexport default ignore\n/README.md.\u0016<table><thead>\n  <tr>\n    <th>Linux</th>\n    <th>OS X</th>\n    <th>Windows</th>\n    <th>Coverage</th>\n    <th>Downloads</th>\n  </tr>\n</thead><tbody><tr>\n  <td colspan=\"2\" align=\"center\">\n    <a href=\"https://github.com/kaelzhang/node-ignore/actions/workflows/nodejs.yml\">\n    <img\n      src=\"https://github.com/kaelzhang/node-ignore/actions/workflows/nodejs.yml/badge.svg\"\n      alt=\"Build Status\" /></a>\n  </td>\n  <td align=\"center\">\n    <a href=\"https://ci.appveyor.com/project/kaelzhang/node-ignore\">\n    <img\n      src=\"https://ci.appveyor.com/api/projects/status/github/kaelzhang/node-ignore?branch=master&svg=true\"\n      alt=\"Windows Build Status\" /></a>\n  </td>\n  <td align=\"center\">\n    <a href=\"https://codecov.io/gh/kaelzhang/node-ignore\">\n    <img\n      src=\"https://codecov.io/gh/kaelzhang/node-ignore/branch/master/graph/badge.svg\"\n      alt=\"Coverage Status\" /></a>\n  </td>\n  <td align=\"center\">\n    <a href=\"https://www.npmjs.org/package/ignore\">\n    <img\n      src=\"http://img.shields.io/npm/dm/ignore.svg\"\n      alt=\"npm module downloads per month\" /></a>\n  </td>\n</tr></tbody></table>\n\n# ignore\n\n`ignore` is a manager, filter and parser which implemented in pure JavaScript according to the [.gitignore spec 2.22.1](http://git-scm.com/docs/gitignore).\n\n`ignore` is used by eslint, gitbook and [many others](https://www.npmjs.com/browse/depended/ignore).\n\nPay **ATTENTION** that [`minimatch`](https://www.npmjs.org/package/minimatch) (which used by `fstream-ignore`) does not follow the gitignore spec.\n\nTo filter filenames according to a .gitignore file, I recommend this npm package, `ignore`.\n\nTo parse an `.npmignore` file, you should use `minimatch`, because an `.npmignore` file is parsed by npm using `minimatch` and it does not work in the .gitignore way.\n\n### Tested on\n\n`ignore` is fully tested, and has more than **five hundreds** of unit tests.\n\n- Linux + Node: `0.8` - `7.x`\n- Windows + Node: `0.10` - `7.x`, node < `0.10` is not tested due to the lack of support of appveyor.\n\nActually, `ignore` does not rely on any versions of node specially.\n\nSince `4.0.0`, ignore will no longer support `node < 6` by default, to use in node < 6, `require('ignore/legacy')`. For details, see [CHANGELOG](https://github.com/kaelzhang/node-ignore/blob/master/CHANGELOG.md).\n\n## Table Of Main Contents\n\n- [Usage](#usage)\n- [`Pathname` Conventions](#pathname-conventions)\n- See Also:\n  - [`glob-gitignore`](https://www.npmjs.com/package/glob-gitignore) matches files using patterns and filters them according to gitignore rules.\n- [Upgrade Guide](#upgrade-guide)\n\n## Install\n\n```sh\nnpm i ignore\n```\n\n## Usage\n\n```js\nimport ignore from 'ignore'\nconst ig = ignore().add(['.abc/*', '!.abc/d/'])\n```\n\n### Filter the given paths\n\n```js\nconst paths = [\n  '.abc/a.js',    // filtered out\n  '.abc/d/e.js'   // included\n]\n\nig.filter(paths)        // ['.abc/d/e.js']\nig.ignores('.abc/a.js') // true\n```\n\n### As the filter function\n\n```js\npaths.filter(ig.createFilter()); // ['.abc/d/e.js']\n```\n\n### Win32 paths will be handled\n\n```js\nig.filter(['.abc\\\\a.js', '.abc\\\\d\\\\e.js'])\n// if the code above runs on windows, the result will be\n// ['.abc\\\\d\\\\e.js']\n```\n\n## Why another ignore?\n\n- `ignore` is a standalone module, and is much simpler so that it could easy work with other programs, unlike [isaacs](https://npmjs.org/~isaacs)'s [fstream-ignore](https://npmjs.org/package/fstream-ignore) which must work with the modules of the fstream family.\n\n- `ignore` only contains utility methods to filter paths according to the specified ignore rules, so\n  - `ignore` never try to find out ignore rules by traversing directories or fetching from git configurations.\n  - `ignore` don't cares about sub-modules of git projects.\n\n- Exactly according to [gitignore man page](http://git-scm.com/docs/gitignore), fixes some known matching issues of fstream-ignore, such as:\n  - '`/*.js`' should only match '`a.js`', but not '`abc/a.js`'.\n  - '`**/foo`' should match '`foo`' anywhere.\n  - Prevent re-including a file if a parent directory of that file is excluded.\n  - Handle trailing whitespaces:\n    - `'a '`(one space) should not match `'a  '`(two spaces).\n    - `'a \\ '` matches `'a  '`\n  - All test cases are verified with the result of `git check-ignore`.\n\n# Methods\n\n## .add(pattern: string | Ignore): this\n## .add(patterns: Array<string | Ignore>): this\n\n- **pattern** `String | Ignore` An ignore pattern string, or the `Ignore` instance\n- **patterns** `Array<String | Ignore>` Array of ignore patterns.\n\nAdds a rule or several rules to the current manager.\n\nReturns `this`\n\nNotice that a line starting with `'#'`(hash) is treated as a comment. Put a backslash (`'\\'`) in front of the first hash for patterns that begin with a hash, if you want to ignore a file with a hash at the beginning of the filename.\n\n```js\nignore().add('#abc').ignores('#abc')    // false\nignore().add('\\\\#abc').ignores('#abc')   // true\n```\n\n`pattern` could either be a line of ignore pattern or a string of multiple ignore patterns, which means we could just `ignore().add()` the content of a ignore file:\n\n```js\nignore()\n.add(fs.readFileSync(filenameOfGitignore).toString())\n.filter(filenames)\n```\n\n`pattern` could also be an `ignore` instance, so that we could easily inherit the rules of another `Ignore` instance.\n\n## <strike>.addIgnoreFile(path)</strike>\n\nREMOVED in `3.x` for now.\n\nTo upgrade `ignore@2.x` up to `3.x`, use\n\n```js\nimport fs from 'fs'\n\nif (fs.existsSync(filename)) {\n  ignore().add(fs.readFileSync(filename).toString())\n}\n```\n\ninstead.\n\n## .filter(paths: Array&lt;Pathname&gt;): Array&lt;Pathname&gt;\n\n```ts\ntype Pathname = string\n```\n\nFilters the given array of pathnames, and returns the filtered array.\n\n- **paths** `Array.<Pathname>` The array of `pathname`s to be filtered.\n\n### `Pathname` Conventions:\n\n#### 1. `Pathname` should be a `path.relative()`d pathname\n\n`Pathname` should be a string that have been `path.join()`ed, or the return value of `path.relative()` to the current directory,\n\n```js\n// WRONG, an error will be thrown\nig.ignores('./abc')\n\n// WRONG, for it will never happen, and an error will be thrown\n// If the gitignore rule locates at the root directory,\n// `'/abc'` should be changed to `'abc'`.\n// ```\n// path.relative('/', '/abc')  -> 'abc'\n// ```\nig.ignores('/abc')\n\n// WRONG, that it is an absolute path on Windows, an error will be thrown\nig.ignores('C:\\\\abc')\n\n// Right\nig.ignores('abc')\n\n// Right\nig.ignores(path.join('./abc'))  // path.join('./abc') -> 'abc'\n```\n\nIn other words, each `Pathname` here should be a relative path to the directory of the gitignore rules.\n\nSuppose the dir structure is:\n\n```\n/path/to/your/repo\n    |-- a\n    |   |-- a.js\n    |\n    |-- .b\n    |\n    |-- .c\n         |-- .DS_store\n```\n\nThen the `paths` might be like this:\n\n```js\n[\n  'a/a.js'\n  '.b',\n  '.c/.DS_store'\n]\n```\n\n#### 2. filenames and dirnames\n\n`node-ignore` does NO `fs.stat` during path matching, so for the example below:\n\n```js\n// First, we add a ignore pattern to ignore a directory\nig.add('config/')\n\n// `ig` does NOT know if 'config', in the real world,\n//   is a normal file, directory or something.\n\nig.ignores('config')\n// `ig` treats `config` as a file, so it returns `false`\n\nig.ignores('config/')\n// returns `true`\n```\n\nSpecially for people who develop some library based on `node-ignore`, it is important to understand that.\n\nUsually, you could use [`glob`](http://npmjs.org/package/glob) with `option.mark = true` to fetch the structure of the current directory:\n\n```js\nimport glob from 'glob'\n\nglob('**', {\n  // Adds a / character to directory matches.\n  mark: true\n}, (err, files) => {\n  if (err) {\n    return console.error(err)\n  }\n\n  let filtered = ignore().add(patterns).filter(files)\n  console.log(filtered)\n})\n```\n\n## .ignores(pathname: Pathname): boolean\n\n> new in 3.2.0\n\nReturns `Boolean` whether `pathname` should be ignored.\n\n```js\nig.ignores('.abc/a.js')    // true\n```\n\n## .createFilter()\n\nCreates a filter function which could filter an array of paths with `Array.prototype.filter`.\n\nReturns `function(path)` the filter function.\n\n## .test(pathname: Pathname) since 5.0.0\n\nReturns `TestResult`\n\n```ts\ninterface TestResult {\n  ignored: boolean\n  // true if the `pathname` is finally unignored by some negative pattern\n  unignored: boolean\n}\n```\n\n- `{ignored: true, unignored: false}`: the `pathname` is ignored\n- `{ignored: false, unignored: true}`: the `pathname` is unignored\n- `{ignored: false, unignored: false}`: the `pathname` is never matched by any ignore rules.\n\n## static `ignore.isPathValid(pathname): boolean` since 5.0.0\n\nCheck whether the `pathname` is an valid `path.relative()`d path according to the [convention](#1-pathname-should-be-a-pathrelatived-pathname).\n\nThis method is **NOT** used to check if an ignore pattern is valid.\n\n```js\nignore.isPathValid('./foo')  // false\n```\n\n## ignore(options)\n\n### `options.ignorecase` since 4.0.0\n\nSimilar as the `core.ignorecase` option of [git-config](https://git-scm.com/docs/git-config), `node-ignore` will be case insensitive if `options.ignorecase` is set to `true` (the default value), otherwise case sensitive.\n\n```js\nconst ig = ignore({\n  ignorecase: false\n})\n\nig.add('*.png')\n\nig.ignores('*.PNG')  // false\n```\n\n### `options.ignoreCase?: boolean` since 5.2.0\n\nWhich is alternative to `options.ignoreCase`\n\n### `options.allowRelativePaths?: boolean` since 5.2.0\n\nThis option brings backward compatibility with projects which based on `ignore@4.x`. If `options.allowRelativePaths` is `true`, `ignore` will not check whether the given path to be tested is [`path.relative()`d](#pathname-conventions).\n\nHowever, passing a relative path, such as `'./foo'` or `'../foo'`, to test if it is ignored or not is not a good practise, which might lead to unexpected behavior\n\n```js\nignore({\n  allowRelativePaths: true\n}).ignores('../foo/bar.js') // And it will not throw\n```\n\n****\n\n# Upgrade Guide\n\n## Upgrade 4.x -> 5.x\n\nSince `5.0.0`, if an invalid `Pathname` passed into `ig.ignores()`, an error will be thrown, unless `options.allowRelative = true` is passed to the `Ignore` factory.\n\nWhile `ignore < 5.0.0` did not make sure what the return value was, as well as\n\n```ts\n.ignores(pathname: Pathname): boolean\n\n.filter(pathnames: Array<Pathname>): Array<Pathname>\n\n.createFilter(): (pathname: Pathname) => boolean\n\n.test(pathname: Pathname): {ignored: boolean, unignored: boolean}\n```\n\nSee the convention [here](#1-pathname-should-be-a-pathrelatived-pathname) for details.\n\nIf there are invalid pathnames, the conversion and filtration should be done by users.\n\n```js\nimport {isPathValid} from 'ignore' // introduced in 5.0.0\n\nconst paths = [\n  // invalid\n  //////////////////\n  '',\n  false,\n  '../foo',\n  '.',\n  //////////////////\n\n  // valid\n  'foo'\n]\n.filter(isValidPath)\n\nig.filter(paths)\n```\n\n## Upgrade 3.x -> 4.x\n\nSince `4.0.0`, `ignore` will no longer support node < 6, to use `ignore` in node < 6:\n\n```js\nvar ignore = require('ignore/legacy')\n```\n\n## Upgrade 2.x -> 3.x\n\n- All `options` of 2.x are unnecessary and removed, so just remove them.\n- `ignore()` instance is no longer an [`EventEmitter`](nodejs.org/api/events.html), and all events are unnecessary and removed.\n- `.addIgnoreFile()` is removed, see the [.addIgnoreFile](#addignorefilepath) section for details.\n\n****\n\n# Collaborators\n\n- [@whitecolor](https://github.com/whitecolor) *Alex*\n- [@SamyPesse](https://github.com/SamyPesse) *Samy Pessé*\n- [@azproduction](https://github.com/azproduction) *Mikhail Davydov*\n- [@TrySound](https://github.com/TrySound) *Bogdan Chadkin*\n- [@JanMattner](https://github.com/JanMattner) *Jan Mattner*\n- [@ntwb](https://github.com/ntwb) *Stephen Edgar*\n- [@kasperisager](https://github.com/kasperisager) *Kasper Isager*\n- [@sandersn](https://github.com/sandersn) *Nathan Shively-Sanders*\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/aXBhZGRyLmpzQDEuOS4x",
    "content": "/README.md u# ipaddr.js — an IPv6 and IPv4 address manipulation library [![Build Status](https://travis-ci.org/whitequark/ipaddr.js.svg)](https://travis-ci.org/whitequark/ipaddr.js)\n\nipaddr.js is a small (1.9K minified and gzipped) library for manipulating\nIP addresses in JavaScript environments. It runs on both CommonJS runtimes\n(e.g. [nodejs]) and in a web browser.\n\nipaddr.js allows you to verify and parse string representation of an IP\naddress, match it against a CIDR range or range list, determine if it falls\ninto some reserved ranges (examples include loopback and private ranges),\nand convert between IPv4 and IPv4-mapped IPv6 addresses.\n\n[nodejs]: http://nodejs.org\n\n## Installation\n\n`npm install ipaddr.js`\n\nor\n\n`bower install ipaddr.js`\n\n## API\n\nipaddr.js defines one object in the global scope: `ipaddr`. In CommonJS,\nit is exported from the module:\n\n```js\nvar ipaddr = require('ipaddr.js');\n```\n\nThe API consists of several global methods and two classes: ipaddr.IPv6 and ipaddr.IPv4.\n\n### Global methods\n\nThere are three global methods defined: `ipaddr.isValid`, `ipaddr.parse` and\n`ipaddr.process`. All of them receive a string as a single parameter.\n\nThe `ipaddr.isValid` method returns `true` if the address is a valid IPv4 or\nIPv6 address, and `false` otherwise. It does not throw any exceptions.\n\nThe `ipaddr.parse` method returns an object representing the IP address,\nor throws an `Error` if the passed string is not a valid representation of an\nIP address.\n\nThe `ipaddr.process` method works just like the `ipaddr.parse` one, but it\nautomatically converts IPv4-mapped IPv6 addresses to their IPv4 counterparts\nbefore returning. It is useful when you have a Node.js instance listening\non an IPv6 socket, and the `net.ivp6.bindv6only` sysctl parameter (or its\nequivalent on non-Linux OS) is set to 0. In this case, you can accept IPv4\nconnections on your IPv6-only socket, but the remote address will be mangled.\nUse `ipaddr.process` method to automatically demangle it.\n\n### Object representation\n\nParsing methods return an object which descends from `ipaddr.IPv6` or\n`ipaddr.IPv4`. These objects share some properties, but most of them differ.\n\n#### Shared properties\n\nOne can determine the type of address by calling `addr.kind()`. It will return\neither `\"ipv6\"` or `\"ipv4\"`.\n\nAn address can be converted back to its string representation with `addr.toString()`.\nNote that this method:\n * does not return the original string used to create the object (in fact, there is\n   no way of getting that string)\n * returns a compact representation (when it is applicable)\n\nA `match(range, bits)` method can be used to check if the address falls into a\ncertain CIDR range.\nNote that an address can be (obviously) matched only against an address of the same type.\n\nFor example:\n\n```js\nvar addr = ipaddr.parse(\"2001:db8:1234::1\");\nvar range = ipaddr.parse(\"2001:db8::\");\n\naddr.match(range, 32); // => true\n```\n\nAlternatively, `match` can also be called as `match([range, bits])`. In this way,\nit can be used together with the `parseCIDR(string)` method, which parses an IP\naddress together with a CIDR range.\n\nFor example:\n\n```js\nvar addr = ipaddr.parse(\"2001:db8:1234::1\");\n\naddr.match(ipaddr.parseCIDR(\"2001:db8::/32\")); // => true\n```\n\nA `range()` method returns one of predefined names for several special ranges defined\nby IP protocols. The exact names (and their respective CIDR ranges) can be looked up\nin the source: [IPv6 ranges] and [IPv4 ranges]. Some common ones include `\"unicast\"`\n(the default one) and `\"reserved\"`.\n\nYou can match against your own range list by using\n`ipaddr.subnetMatch(address, rangeList, defaultName)` method. It can work with a mix of IPv6 or IPv4 addresses, and accepts a name-to-subnet map as the range list. For example:\n\n```js\nvar rangeList = {\n  documentationOnly: [ ipaddr.parse('2001:db8::'), 32 ],\n  tunnelProviders: [\n    [ ipaddr.parse('2001:470::'), 32 ], // he.net\n    [ ipaddr.parse('2001:5c0::'), 32 ]  // freenet6\n  ]\n};\nipaddr.subnetMatch(ipaddr.parse('2001:470:8:66::1'), rangeList, 'unknown'); // => \"tunnelProviders\"\n```\n\nThe addresses can be converted to their byte representation with `toByteArray()`.\n(Actually, JavaScript mostly does not know about byte buffers. They are emulated with\narrays of numbers, each in range of 0..255.)\n\n```js\nvar bytes = ipaddr.parse('2a00:1450:8007::68').toByteArray(); // ipv6.google.com\nbytes // => [42, 0x00, 0x14, 0x50, 0x80, 0x07, 0x00, <zeroes...>, 0x00, 0x68 ]\n```\n\nThe `ipaddr.IPv4` and `ipaddr.IPv6` objects have some methods defined, too. All of them\nhave the same interface for both protocols, and are similar to global methods.\n\n`ipaddr.IPvX.isValid(string)` can be used to check if the string is a valid address\nfor particular protocol, and `ipaddr.IPvX.parse(string)` is the error-throwing parser.\n\n`ipaddr.IPvX.isValid(string)` uses the same format for parsing as the POSIX `inet_ntoa` function, which accepts unusual formats like `0xc0.168.1.1` or `0x10000000`. The function `ipaddr.IPv4.isValidFourPartDecimal(string)` validates the IPv4 address and also ensures that it is written in four-part decimal format.\n\n[IPv6 ranges]: https://github.com/whitequark/ipaddr.js/blob/master/src/ipaddr.coffee#L186\n[IPv4 ranges]: https://github.com/whitequark/ipaddr.js/blob/master/src/ipaddr.coffee#L71\n\n#### IPv6 properties\n\nSometimes you will want to convert IPv6 not to a compact string representation (with\nthe `::` substitution); the `toNormalizedString()` method will return an address where\nall zeroes are explicit.\n\nFor example:\n\n```js\nvar addr = ipaddr.parse(\"2001:0db8::0001\");\naddr.toString(); // => \"2001:db8::1\"\naddr.toNormalizedString(); // => \"2001:db8:0:0:0:0:0:1\"\n```\n\nThe `isIPv4MappedAddress()` method will return `true` if this address is an IPv4-mapped\none, and `toIPv4Address()` will return an IPv4 object address.\n\nTo access the underlying binary representation of the address, use `addr.parts`.\n\n```js\nvar addr = ipaddr.parse(\"2001:db8:10::1234:DEAD\");\naddr.parts // => [0x2001, 0xdb8, 0x10, 0, 0, 0, 0x1234, 0xdead]\n```\n\nA IPv6 zone index can be accessed via `addr.zoneId`:\n\n```js\nvar addr = ipaddr.parse(\"2001:db8::%eth0\");\naddr.zoneId // => 'eth0'\n```\n\n#### IPv4 properties\n\n`toIPv4MappedAddress()` will return a corresponding IPv4-mapped IPv6 address.\n\nTo access the underlying representation of the address, use `addr.octets`.\n\n```js\nvar addr = ipaddr.parse(\"192.168.1.1\");\naddr.octets // => [192, 168, 1, 1]\n```\n\n`prefixLengthFromSubnetMask()` will return a CIDR prefix length for a valid IPv4 netmask or\nnull if the netmask is not valid.\n\n```js\nipaddr.IPv4.parse('255.255.255.240').prefixLengthFromSubnetMask() == 28\nipaddr.IPv4.parse('255.192.164.0').prefixLengthFromSubnetMask()  == null\n```\n\n`subnetMaskFromPrefixLength()` will return an IPv4 netmask for a valid CIDR prefix length.\n\n```js\nipaddr.IPv4.subnetMaskFromPrefixLength(24) == \"255.255.255.0\"\nipaddr.IPv4.subnetMaskFromPrefixLength(29) == \"255.255.255.248\"\n```\n\n`broadcastAddressFromCIDR()` will return the broadcast address for a given IPv4 interface and netmask in CIDR notation.\n```js\nipaddr.IPv4.broadcastAddressFromCIDR(\"172.0.0.1/24\") == \"172.0.0.255\"\n```\n`networkAddressFromCIDR()` will return the network address for a given IPv4 interface and netmask in CIDR notation.\n```js\nipaddr.IPv4.networkAddressFromCIDR(\"172.0.0.1/24\") == \"172.0.0.0\"\n```\n\n#### Conversion\n\nIPv4 and IPv6 can be converted bidirectionally to and from network byte order (MSB) byte arrays.\n\nThe `fromByteArray()` method will take an array and create an appropriate IPv4 or IPv6 object\nif the input satisfies the requirements. For IPv4 it has to be an array of four 8-bit values,\nwhile for IPv6 it has to be an array of sixteen 8-bit values.\n\nFor example:\n```js\nvar addr = ipaddr.fromByteArray([0x7f, 0, 0, 1]);\naddr.toString(); // => \"127.0.0.1\"\n```\n\nor\n\n```js\nvar addr = ipaddr.fromByteArray([0x20, 1, 0xd, 0xb8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1])\naddr.toString(); // => \"2001:db8::1\"\n```\n\nBoth objects also offer a `toByteArray()` method, which returns an array in network byte order (MSB).\n\nFor example:\n```js\nvar addr = ipaddr.parse(\"127.0.0.1\");\naddr.toByteArray(); // => [0x7f, 0, 0, 1]\n```\n\nor\n\n```js\nvar addr = ipaddr.parse(\"2001:db8::1\");\naddr.toByteArray(); // => [0x20, 1, 0xd, 0xb8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]\n```\n/lib/ipaddr.js.d.ts\u000bdeclare module \"ipaddr.js\" {\n    type IPv4Range = 'unicast' | 'unspecified' | 'broadcast' | 'multicast' | 'linkLocal' | 'loopback' | 'carrierGradeNat' | 'private' | 'reserved';\n    type IPv6Range = 'unicast' | 'unspecified' | 'linkLocal' | 'multicast' | 'loopback' | 'uniqueLocal' | 'ipv4Mapped' | 'rfc6145' | 'rfc6052' | '6to4' | 'teredo' | 'reserved';\n\n    interface RangeList<T> {\n        [name: string]: [T, number] | [T, number][];\n    }\n\n    // Common methods/properties for IPv4 and IPv6 classes.\n    class IP {\n        prefixLengthFromSubnetMask(): number | null;\n        toByteArray(): number[];\n        toNormalizedString(): string;\n        toString(): string;\n    }\n\n    namespace Address {\n        export function isValid(addr: string): boolean;\n        export function fromByteArray(bytes: number[]): IPv4 | IPv6;\n        export function parse(addr: string): IPv4 | IPv6;\n        export function parseCIDR(mask: string): [IPv4 | IPv6, number];\n        export function process(addr: string): IPv4 | IPv6;\n        export function subnetMatch(addr: IPv4, rangeList: RangeList<IPv4>, defaultName?: string): string;\n        export function subnetMatch(addr: IPv6, rangeList: RangeList<IPv6>, defaultName?: string): string;\n\n        export class IPv4 extends IP {\n            static broadcastAddressFromCIDR(addr: string): IPv4;\n            static isIPv4(addr: string): boolean;\n            static isValidFourPartDecimal(addr: string): boolean;\n            static isValid(addr: string): boolean;\n            static networkAddressFromCIDR(addr: string): IPv4;\n            static parse(addr: string): IPv4;\n            static parseCIDR(addr: string): [IPv4, number];\n            static subnetMaskFromPrefixLength(prefix: number): IPv4;\n            constructor(octets: number[]);\n            octets: number[]\n\n            kind(): 'ipv4';\n            match(addr: IPv4, bits: number): boolean;\n            match(mask: [IPv4, number]): boolean;\n            range(): IPv4Range;\n            subnetMatch(rangeList: RangeList<IPv4>, defaultName?: string): string;\n            toIPv4MappedAddress(): IPv6;\n        }\n\n        export class IPv6 extends IP {\n            static broadcastAddressFromCIDR(addr: string): IPv6;\n            static isIPv6(addr: string): boolean;\n            static isValid(addr: string): boolean;\n            static parse(addr: string): IPv6;\n            static parseCIDR(addr: string): [IPv6, number];\n            static subnetMaskFromPrefixLength(prefix: number): IPv6;\n            constructor(parts: number[]);\n            parts: number[]\n            zoneId?: string\n\n            isIPv4MappedAddress(): boolean;\n            kind(): 'ipv6';\n            match(addr: IPv6, bits: number): boolean;\n            match(mask: [IPv6, number]): boolean;\n            range(): IPv6Range;\n            subnetMatch(rangeList: RangeList<IPv6>, defaultName?: string): string;\n            toIPv4Address(): IPv4;\n        }\n    }\n\n    export = Address;\n}\n/package.json\u0002{\n  \"name\": \"ipaddr.js\",\n  \"description\": \"A library for manipulating IPv4 and IPv6 addresses in JavaScript.\",\n  \"version\": \"1.9.1\",\n  \"author\": \"whitequark <whitequark@whitequark.org>\",\n  \"directories\": {\n    \"lib\": \"./lib\"\n  },\n  \"dependencies\": {},\n  \"devDependencies\": {\n    \"coffee-script\": \"~1.12.6\",\n    \"nodeunit\": \"^0.11.3\",\n    \"uglify-js\": \"~3.0.19\"\n  },\n  \"scripts\": {\n    \"test\": \"cake build test\"\n  },\n  \"files\": [\n    \"lib/\",\n    \"LICENSE\",\n    \"ipaddr.min.js\"\n  ],\n  \"keywords\": [\n    \"ip\",\n    \"ipv4\",\n    \"ipv6\"\n  ],\n  \"repository\": \"git://github.com/whitequark/ipaddr.js\",\n  \"main\": \"./lib/ipaddr.js\",\n  \"engines\": {\n    \"node\": \">= 0.10\"\n  },\n  \"license\": \"MIT\",\n  \"types\": \"./lib/ipaddr.js.d.ts\"\n}\n/ipaddr.min.js&\n(function(){var r,t,n,e,i,o,a,s;t={},s=this,\"undefined\"!=typeof module&&null!==module&&module.exports?module.exports=t:s.ipaddr=t,a=function(r,t,n,e){var i,o;if(r.length!==t.length)throw new Error(\"ipaddr: cannot match CIDR for objects with different lengths\");for(i=0;e>0;){if((o=n-e)<0&&(o=0),r[i]>>o!=t[i]>>o)return!1;e-=n,i+=1}return!0},t.subnetMatch=function(r,t,n){var e,i,o,a,s;null==n&&(n=\"unicast\");for(o in t)for(!(a=t[o])[0]||a[0]instanceof Array||(a=[a]),e=0,i=a.length;e<i;e++)if(s=a[e],r.kind()===s[0].kind()&&r.match.apply(r,s))return o;return n},t.IPv4=function(){function r(r){var t,n,e;if(4!==r.length)throw new Error(\"ipaddr: ipv4 octet count should be 4\");for(t=0,n=r.length;t<n;t++)if(!(0<=(e=r[t])&&e<=255))throw new Error(\"ipaddr: ipv4 octet should fit in 8 bits\");this.octets=r}return r.prototype.kind=function(){return\"ipv4\"},r.prototype.toString=function(){return this.octets.join(\".\")},r.prototype.toNormalizedString=function(){return this.toString()},r.prototype.toByteArray=function(){return this.octets.slice(0)},r.prototype.match=function(r,t){var n;if(void 0===t&&(r=(n=r)[0],t=n[1]),\"ipv4\"!==r.kind())throw new Error(\"ipaddr: cannot match ipv4 address with non-ipv4 one\");return a(this.octets,r.octets,8,t)},r.prototype.SpecialRanges={unspecified:[[new r([0,0,0,0]),8]],broadcast:[[new r([255,255,255,255]),32]],multicast:[[new r([224,0,0,0]),4]],linkLocal:[[new r([169,254,0,0]),16]],loopback:[[new r([127,0,0,0]),8]],carrierGradeNat:[[new r([100,64,0,0]),10]],private:[[new r([10,0,0,0]),8],[new r([172,16,0,0]),12],[new r([192,168,0,0]),16]],reserved:[[new r([192,0,0,0]),24],[new r([192,0,2,0]),24],[new r([192,88,99,0]),24],[new r([198,51,100,0]),24],[new r([203,0,113,0]),24],[new r([240,0,0,0]),4]]},r.prototype.range=function(){return t.subnetMatch(this,this.SpecialRanges)},r.prototype.toIPv4MappedAddress=function(){return t.IPv6.parse(\"::ffff:\"+this.toString())},r.prototype.prefixLengthFromSubnetMask=function(){var r,t,n,e,i,o,a;for(a={0:8,128:7,192:6,224:5,240:4,248:3,252:2,254:1,255:0},r=0,i=!1,t=n=3;n>=0;t=n+=-1){if(!((e=this.octets[t])in a))return null;if(o=a[e],i&&0!==o)return null;8!==o&&(i=!0),r+=o}return 32-r},r}(),n=\"(0?\\\\d+|0x[a-f0-9]+)\",e={fourOctet:new RegExp(\"^\"+n+\"\\\\.\"+n+\"\\\\.\"+n+\"\\\\.\"+n+\"$\",\"i\"),longValue:new RegExp(\"^\"+n+\"$\",\"i\")},t.IPv4.parser=function(r){var t,n,i,o,a;if(n=function(r){return\"0\"===r[0]&&\"x\"!==r[1]?parseInt(r,8):parseInt(r)},t=r.match(e.fourOctet))return function(){var r,e,o,a;for(a=[],r=0,e=(o=t.slice(1,6)).length;r<e;r++)i=o[r],a.push(n(i));return a}();if(t=r.match(e.longValue)){if((a=n(t[1]))>4294967295||a<0)throw new Error(\"ipaddr: address outside defined range\");return function(){var r,t;for(t=[],o=r=0;r<=24;o=r+=8)t.push(a>>o&255);return t}().reverse()}return null},t.IPv6=function(){function r(r,t){var n,e,i,o,a,s;if(16===r.length)for(this.parts=[],n=e=0;e<=14;n=e+=2)this.parts.push(r[n]<<8|r[n+1]);else{if(8!==r.length)throw new Error(\"ipaddr: ipv6 part count should be 8 or 16\");this.parts=r}for(i=0,o=(s=this.parts).length;i<o;i++)if(!(0<=(a=s[i])&&a<=65535))throw new Error(\"ipaddr: ipv6 part should fit in 16 bits\");t&&(this.zoneId=t)}return r.prototype.kind=function(){return\"ipv6\"},r.prototype.toString=function(){return this.toNormalizedString().replace(/((^|:)(0(:|$))+)/,\"::\")},r.prototype.toRFC5952String=function(){var r,t,n,e,i;for(e=/((^|:)(0(:|$)){2,})/g,i=this.toNormalizedString(),r=0,t=-1;n=e.exec(i);)n[0].length>t&&(r=n.index,t=n[0].length);return t<0?i:i.substring(0,r)+\"::\"+i.substring(r+t)},r.prototype.toByteArray=function(){var r,t,n,e,i;for(r=[],t=0,n=(i=this.parts).length;t<n;t++)e=i[t],r.push(e>>8),r.push(255&e);return r},r.prototype.toNormalizedString=function(){var r,t,n;return r=function(){var r,n,e,i;for(i=[],r=0,n=(e=this.parts).length;r<n;r++)t=e[r],i.push(t.toString(16));return i}.call(this).join(\":\"),n=\"\",this.zoneId&&(n=\"%\"+this.zoneId),r+n},r.prototype.toFixedLengthString=function(){var r,t,n;return r=function(){var r,n,e,i;for(i=[],r=0,n=(e=this.parts).length;r<n;r++)t=e[r],i.push(t.toString(16).padStart(4,\"0\"));return i}.call(this).join(\":\"),n=\"\",this.zoneId&&(n=\"%\"+this.zoneId),r+n},r.prototype.match=function(r,t){var n;if(void 0===t&&(r=(n=r)[0],t=n[1]),\"ipv6\"!==r.kind())throw new Error(\"ipaddr: cannot match ipv6 address with non-ipv6 one\");return a(this.parts,r.parts,16,t)},r.prototype.SpecialRanges={unspecified:[new r([0,0,0,0,0,0,0,0]),128],linkLocal:[new r([65152,0,0,0,0,0,0,0]),10],multicast:[new r([65280,0,0,0,0,0,0,0]),8],loopback:[new r([0,0,0,0,0,0,0,1]),128],uniqueLocal:[new r([64512,0,0,0,0,0,0,0]),7],ipv4Mapped:[new r([0,0,0,0,0,65535,0,0]),96],rfc6145:[new r([0,0,0,0,65535,0,0,0]),96],rfc6052:[new r([100,65435,0,0,0,0,0,0]),96],\"6to4\":[new r([8194,0,0,0,0,0,0,0]),16],teredo:[new r([8193,0,0,0,0,0,0,0]),32],reserved:[[new r([8193,3512,0,0,0,0,0,0]),32]]},r.prototype.range=function(){return t.subnetMatch(this,this.SpecialRanges)},r.prototype.isIPv4MappedAddress=function(){return\"ipv4Mapped\"===this.range()},r.prototype.toIPv4Address=function(){var r,n,e;if(!this.isIPv4MappedAddress())throw new Error(\"ipaddr: trying to convert a generic ipv6 address to ipv4\");return e=this.parts.slice(-2),r=e[0],n=e[1],new t.IPv4([r>>8,255&r,n>>8,255&n])},r.prototype.prefixLengthFromSubnetMask=function(){var r,t,n,e,i,o,a;for(a={0:16,32768:15,49152:14,57344:13,61440:12,63488:11,64512:10,65024:9,65280:8,65408:7,65472:6,65504:5,65520:4,65528:3,65532:2,65534:1,65535:0},r=0,i=!1,t=n=7;n>=0;t=n+=-1){if(!((e=this.parts[t])in a))return null;if(o=a[e],i&&0!==o)return null;16!==o&&(i=!0),r+=o}return 128-r},r}(),i=\"(?:[0-9a-f]+::?)+\",o={zoneIndex:new RegExp(\"%[0-9a-z]{1,}\",\"i\"),native:new RegExp(\"^(::)?(\"+i+\")?([0-9a-f]+)?(::)?(%[0-9a-z]{1,})?$\",\"i\"),transitional:new RegExp(\"^((?:\"+i+\")|(?:::)(?:\"+i+\")?)\"+n+\"\\\\.\"+n+\"\\\\.\"+n+\"\\\\.\"+n+\"(%[0-9a-z]{1,})?$\",\"i\")},r=function(r,t){var n,e,i,a,s,p;if(r.indexOf(\"::\")!==r.lastIndexOf(\"::\"))return null;for((p=(r.match(o.zoneIndex)||[])[0])&&(p=p.substring(1),r=r.replace(/%.+$/,\"\")),n=0,e=-1;(e=r.indexOf(\":\",e+1))>=0;)n++;if(\"::\"===r.substr(0,2)&&n--,\"::\"===r.substr(-2,2)&&n--,n>t)return null;for(s=t-n,a=\":\";s--;)a+=\"0:\";return\":\"===(r=r.replace(\"::\",a))[0]&&(r=r.slice(1)),\":\"===r[r.length-1]&&(r=r.slice(0,-1)),t=function(){var t,n,e,o;for(o=[],t=0,n=(e=r.split(\":\")).length;t<n;t++)i=e[t],o.push(parseInt(i,16));return o}(),{parts:t,zoneId:p}},t.IPv6.parser=function(t){var n,e,i,a,s,p,u;if(o.native.test(t))return r(t,8);if((a=t.match(o.transitional))&&(u=a[6]||\"\",(n=r(a[1].slice(0,-1)+u,6)).parts)){for(e=0,i=(p=[parseInt(a[2]),parseInt(a[3]),parseInt(a[4]),parseInt(a[5])]).length;e<i;e++)if(!(0<=(s=p[e])&&s<=255))return null;return n.parts.push(p[0]<<8|p[1]),n.parts.push(p[2]<<8|p[3]),{parts:n.parts,zoneId:n.zoneId}}return null},t.IPv4.isIPv4=t.IPv6.isIPv6=function(r){return null!==this.parser(r)},t.IPv4.isValid=function(r){try{return new this(this.parser(r)),!0}catch(r){return r,!1}},t.IPv4.isValidFourPartDecimal=function(r){return!(!t.IPv4.isValid(r)||!r.match(/^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){3}$/))},t.IPv6.isValid=function(r){var t;if(\"string\"==typeof r&&-1===r.indexOf(\":\"))return!1;try{return t=this.parser(r),new this(t.parts,t.zoneId),!0}catch(r){return r,!1}},t.IPv4.parse=function(r){var t;if(null===(t=this.parser(r)))throw new Error(\"ipaddr: string is not formatted like ip address\");return new this(t)},t.IPv6.parse=function(r){var t;if(null===(t=this.parser(r)).parts)throw new Error(\"ipaddr: string is not formatted like ip address\");return new this(t.parts,t.zoneId)},t.IPv4.parseCIDR=function(r){var t,n,e;if((n=r.match(/^(.+)\\/(\\d+)$/))&&(t=parseInt(n[2]))>=0&&t<=32)return e=[this.parse(n[1]),t],Object.defineProperty(e,\"toString\",{value:function(){return this.join(\"/\")}}),e;throw new Error(\"ipaddr: string is not formatted like an IPv4 CIDR range\")},t.IPv4.subnetMaskFromPrefixLength=function(r){var t,n,e;if((r=parseInt(r))<0||r>32)throw new Error(\"ipaddr: invalid IPv4 prefix length\");for(e=[0,0,0,0],n=0,t=Math.floor(r/8);n<t;)e[n]=255,n++;return t<4&&(e[t]=Math.pow(2,r%8)-1<<8-r%8),new this(e)},t.IPv4.broadcastAddressFromCIDR=function(r){var t,n,e,i,o;try{for(e=(t=this.parseCIDR(r))[0].toByteArray(),o=this.subnetMaskFromPrefixLength(t[1]).toByteArray(),i=[],n=0;n<4;)i.push(parseInt(e[n],10)|255^parseInt(o[n],10)),n++;return new this(i)}catch(r){throw r,new Error(\"ipaddr: the address does not have IPv4 CIDR format\")}},t.IPv4.networkAddressFromCIDR=function(r){var t,n,e,i,o;try{for(e=(t=this.parseCIDR(r))[0].toByteArray(),o=this.subnetMaskFromPrefixLength(t[1]).toByteArray(),i=[],n=0;n<4;)i.push(parseInt(e[n],10)&parseInt(o[n],10)),n++;return new this(i)}catch(r){throw r,new Error(\"ipaddr: the address does not have IPv4 CIDR format\")}},t.IPv6.parseCIDR=function(r){var t,n,e;if((n=r.match(/^(.+)\\/(\\d+)$/))&&(t=parseInt(n[2]))>=0&&t<=128)return e=[this.parse(n[1]),t],Object.defineProperty(e,\"toString\",{value:function(){return this.join(\"/\")}}),e;throw new Error(\"ipaddr: string is not formatted like an IPv6 CIDR range\")},t.isValid=function(r){return t.IPv6.isValid(r)||t.IPv4.isValid(r)},t.parse=function(r){if(t.IPv6.isValid(r))return t.IPv6.parse(r);if(t.IPv4.isValid(r))return t.IPv4.parse(r);throw new Error(\"ipaddr: the address has neither IPv6 nor IPv4 format\")},t.parseCIDR=function(r){try{return t.IPv6.parseCIDR(r)}catch(n){n;try{return t.IPv4.parseCIDR(r)}catch(r){throw r,new Error(\"ipaddr: the address has neither IPv6 nor IPv4 CIDR format\")}}},t.fromByteArray=function(r){var n;if(4===(n=r.length))return new t.IPv4(r);if(16===n)return new t.IPv6(r);throw new Error(\"ipaddr: the binary input is neither an IPv6 nor IPv4 address\")},t.process=function(r){var t;return t=this.parse(r),\"ipv6\"===t.kind()&&t.isIPv4MappedAddress()?t.toIPv4Address():t}}).call(this);/LICENSE\u0004?Copyright (C) 2011-2017 whitequark <whitequark@whitequark.org>\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n/lib/ipaddr.jsK(function() {\n  var expandIPv6, ipaddr, ipv4Part, ipv4Regexes, ipv6Part, ipv6Regexes, matchCIDR, root, zoneIndex;\n\n  ipaddr = {};\n\n  root = this;\n\n  if ((typeof module !== \"undefined\" && module !== null) && module.exports) {\n    module.exports = ipaddr;\n  } else {\n    root['ipaddr'] = ipaddr;\n  }\n\n  matchCIDR = function(first, second, partSize, cidrBits) {\n    var part, shift;\n    if (first.length !== second.length) {\n      throw new Error(\"ipaddr: cannot match CIDR for objects with different lengths\");\n    }\n    part = 0;\n    while (cidrBits > 0) {\n      shift = partSize - cidrBits;\n      if (shift < 0) {\n        shift = 0;\n      }\n      if (first[part] >> shift !== second[part] >> shift) {\n        return false;\n      }\n      cidrBits -= partSize;\n      part += 1;\n    }\n    return true;\n  };\n\n  ipaddr.subnetMatch = function(address, rangeList, defaultName) {\n    var k, len, rangeName, rangeSubnets, subnet;\n    if (defaultName == null) {\n      defaultName = 'unicast';\n    }\n    for (rangeName in rangeList) {\n      rangeSubnets = rangeList[rangeName];\n      if (rangeSubnets[0] && !(rangeSubnets[0] instanceof Array)) {\n        rangeSubnets = [rangeSubnets];\n      }\n      for (k = 0, len = rangeSubnets.length; k < len; k++) {\n        subnet = rangeSubnets[k];\n        if (address.kind() === subnet[0].kind()) {\n          if (address.match.apply(address, subnet)) {\n            return rangeName;\n          }\n        }\n      }\n    }\n    return defaultName;\n  };\n\n  ipaddr.IPv4 = (function() {\n    function IPv4(octets) {\n      var k, len, octet;\n      if (octets.length !== 4) {\n        throw new Error(\"ipaddr: ipv4 octet count should be 4\");\n      }\n      for (k = 0, len = octets.length; k < len; k++) {\n        octet = octets[k];\n        if (!((0 <= octet && octet <= 255))) {\n          throw new Error(\"ipaddr: ipv4 octet should fit in 8 bits\");\n        }\n      }\n      this.octets = octets;\n    }\n\n    IPv4.prototype.kind = function() {\n      return 'ipv4';\n    };\n\n    IPv4.prototype.toString = function() {\n      return this.octets.join(\".\");\n    };\n\n    IPv4.prototype.toNormalizedString = function() {\n      return this.toString();\n    };\n\n    IPv4.prototype.toByteArray = function() {\n      return this.octets.slice(0);\n    };\n\n    IPv4.prototype.match = function(other, cidrRange) {\n      var ref;\n      if (cidrRange === void 0) {\n        ref = other, other = ref[0], cidrRange = ref[1];\n      }\n      if (other.kind() !== 'ipv4') {\n        throw new Error(\"ipaddr: cannot match ipv4 address with non-ipv4 one\");\n      }\n      return matchCIDR(this.octets, other.octets, 8, cidrRange);\n    };\n\n    IPv4.prototype.SpecialRanges = {\n      unspecified: [[new IPv4([0, 0, 0, 0]), 8]],\n      broadcast: [[new IPv4([255, 255, 255, 255]), 32]],\n      multicast: [[new IPv4([224, 0, 0, 0]), 4]],\n      linkLocal: [[new IPv4([169, 254, 0, 0]), 16]],\n      loopback: [[new IPv4([127, 0, 0, 0]), 8]],\n      carrierGradeNat: [[new IPv4([100, 64, 0, 0]), 10]],\n      \"private\": [[new IPv4([10, 0, 0, 0]), 8], [new IPv4([172, 16, 0, 0]), 12], [new IPv4([192, 168, 0, 0]), 16]],\n      reserved: [[new IPv4([192, 0, 0, 0]), 24], [new IPv4([192, 0, 2, 0]), 24], [new IPv4([192, 88, 99, 0]), 24], [new IPv4([198, 51, 100, 0]), 24], [new IPv4([203, 0, 113, 0]), 24], [new IPv4([240, 0, 0, 0]), 4]]\n    };\n\n    IPv4.prototype.range = function() {\n      return ipaddr.subnetMatch(this, this.SpecialRanges);\n    };\n\n    IPv4.prototype.toIPv4MappedAddress = function() {\n      return ipaddr.IPv6.parse(\"::ffff:\" + (this.toString()));\n    };\n\n    IPv4.prototype.prefixLengthFromSubnetMask = function() {\n      var cidr, i, k, octet, stop, zeros, zerotable;\n      zerotable = {\n        0: 8,\n        128: 7,\n        192: 6,\n        224: 5,\n        240: 4,\n        248: 3,\n        252: 2,\n        254: 1,\n        255: 0\n      };\n      cidr = 0;\n      stop = false;\n      for (i = k = 3; k >= 0; i = k += -1) {\n        octet = this.octets[i];\n        if (octet in zerotable) {\n          zeros = zerotable[octet];\n          if (stop && zeros !== 0) {\n            return null;\n          }\n          if (zeros !== 8) {\n            stop = true;\n          }\n          cidr += zeros;\n        } else {\n          return null;\n        }\n      }\n      return 32 - cidr;\n    };\n\n    return IPv4;\n\n  })();\n\n  ipv4Part = \"(0?\\\\d+|0x[a-f0-9]+)\";\n\n  ipv4Regexes = {\n    fourOctet: new RegExp(\"^\" + ipv4Part + \"\\\\.\" + ipv4Part + \"\\\\.\" + ipv4Part + \"\\\\.\" + ipv4Part + \"$\", 'i'),\n    longValue: new RegExp(\"^\" + ipv4Part + \"$\", 'i')\n  };\n\n  ipaddr.IPv4.parser = function(string) {\n    var match, parseIntAuto, part, shift, value;\n    parseIntAuto = function(string) {\n      if (string[0] === \"0\" && string[1] !== \"x\") {\n        return parseInt(string, 8);\n      } else {\n        return parseInt(string);\n      }\n    };\n    if (match = string.match(ipv4Regexes.fourOctet)) {\n      return (function() {\n        var k, len, ref, results;\n        ref = match.slice(1, 6);\n        results = [];\n        for (k = 0, len = ref.length; k < len; k++) {\n          part = ref[k];\n          results.push(parseIntAuto(part));\n        }\n        return results;\n      })();\n    } else if (match = string.match(ipv4Regexes.longValue)) {\n      value = parseIntAuto(match[1]);\n      if (value > 0xffffffff || value < 0) {\n        throw new Error(\"ipaddr: address outside defined range\");\n      }\n      return ((function() {\n        var k, results;\n        results = [];\n        for (shift = k = 0; k <= 24; shift = k += 8) {\n          results.push((value >> shift) & 0xff);\n        }\n        return results;\n      })()).reverse();\n    } else {\n      return null;\n    }\n  };\n\n  ipaddr.IPv6 = (function() {\n    function IPv6(parts, zoneId) {\n      var i, k, l, len, part, ref;\n      if (parts.length === 16) {\n        this.parts = [];\n        for (i = k = 0; k <= 14; i = k += 2) {\n          this.parts.push((parts[i] << 8) | parts[i + 1]);\n        }\n      } else if (parts.length === 8) {\n        this.parts = parts;\n      } else {\n        throw new Error(\"ipaddr: ipv6 part count should be 8 or 16\");\n      }\n      ref = this.parts;\n      for (l = 0, len = ref.length; l < len; l++) {\n        part = ref[l];\n        if (!((0 <= part && part <= 0xffff))) {\n          throw new Error(\"ipaddr: ipv6 part should fit in 16 bits\");\n        }\n      }\n      if (zoneId) {\n        this.zoneId = zoneId;\n      }\n    }\n\n    IPv6.prototype.kind = function() {\n      return 'ipv6';\n    };\n\n    IPv6.prototype.toString = function() {\n      return this.toNormalizedString().replace(/((^|:)(0(:|$))+)/, '::');\n    };\n\n    IPv6.prototype.toRFC5952String = function() {\n      var bestMatchIndex, bestMatchLength, match, regex, string;\n      regex = /((^|:)(0(:|$)){2,})/g;\n      string = this.toNormalizedString();\n      bestMatchIndex = 0;\n      bestMatchLength = -1;\n      while ((match = regex.exec(string))) {\n        if (match[0].length > bestMatchLength) {\n          bestMatchIndex = match.index;\n          bestMatchLength = match[0].length;\n        }\n      }\n      if (bestMatchLength < 0) {\n        return string;\n      }\n      return string.substring(0, bestMatchIndex) + '::' + string.substring(bestMatchIndex + bestMatchLength);\n    };\n\n    IPv6.prototype.toByteArray = function() {\n      var bytes, k, len, part, ref;\n      bytes = [];\n      ref = this.parts;\n      for (k = 0, len = ref.length; k < len; k++) {\n        part = ref[k];\n        bytes.push(part >> 8);\n        bytes.push(part & 0xff);\n      }\n      return bytes;\n    };\n\n    IPv6.prototype.toNormalizedString = function() {\n      var addr, part, suffix;\n      addr = ((function() {\n        var k, len, ref, results;\n        ref = this.parts;\n        results = [];\n        for (k = 0, len = ref.length; k < len; k++) {\n          part = ref[k];\n          results.push(part.toString(16));\n        }\n        return results;\n      }).call(this)).join(\":\");\n      suffix = '';\n      if (this.zoneId) {\n        suffix = '%' + this.zoneId;\n      }\n      return addr + suffix;\n    };\n\n    IPv6.prototype.toFixedLengthString = function() {\n      var addr, part, suffix;\n      addr = ((function() {\n        var k, len, ref, results;\n        ref = this.parts;\n        results = [];\n        for (k = 0, len = ref.length; k < len; k++) {\n          part = ref[k];\n          results.push(part.toString(16).padStart(4, '0'));\n        }\n        return results;\n      }).call(this)).join(\":\");\n      suffix = '';\n      if (this.zoneId) {\n        suffix = '%' + this.zoneId;\n      }\n      return addr + suffix;\n    };\n\n    IPv6.prototype.match = function(other, cidrRange) {\n      var ref;\n      if (cidrRange === void 0) {\n        ref = other, other = ref[0], cidrRange = ref[1];\n      }\n      if (other.kind() !== 'ipv6') {\n        throw new Error(\"ipaddr: cannot match ipv6 address with non-ipv6 one\");\n      }\n      return matchCIDR(this.parts, other.parts, 16, cidrRange);\n    };\n\n    IPv6.prototype.SpecialRanges = {\n      unspecified: [new IPv6([0, 0, 0, 0, 0, 0, 0, 0]), 128],\n      linkLocal: [new IPv6([0xfe80, 0, 0, 0, 0, 0, 0, 0]), 10],\n      multicast: [new IPv6([0xff00, 0, 0, 0, 0, 0, 0, 0]), 8],\n      loopback: [new IPv6([0, 0, 0, 0, 0, 0, 0, 1]), 128],\n      uniqueLocal: [new IPv6([0xfc00, 0, 0, 0, 0, 0, 0, 0]), 7],\n      ipv4Mapped: [new IPv6([0, 0, 0, 0, 0, 0xffff, 0, 0]), 96],\n      rfc6145: [new IPv6([0, 0, 0, 0, 0xffff, 0, 0, 0]), 96],\n      rfc6052: [new IPv6([0x64, 0xff9b, 0, 0, 0, 0, 0, 0]), 96],\n      '6to4': [new IPv6([0x2002, 0, 0, 0, 0, 0, 0, 0]), 16],\n      teredo: [new IPv6([0x2001, 0, 0, 0, 0, 0, 0, 0]), 32],\n      reserved: [[new IPv6([0x2001, 0xdb8, 0, 0, 0, 0, 0, 0]), 32]]\n    };\n\n    IPv6.prototype.range = function() {\n      return ipaddr.subnetMatch(this, this.SpecialRanges);\n    };\n\n    IPv6.prototype.isIPv4MappedAddress = function() {\n      return this.range() === 'ipv4Mapped';\n    };\n\n    IPv6.prototype.toIPv4Address = function() {\n      var high, low, ref;\n      if (!this.isIPv4MappedAddress()) {\n        throw new Error(\"ipaddr: trying to convert a generic ipv6 address to ipv4\");\n      }\n      ref = this.parts.slice(-2), high = ref[0], low = ref[1];\n      return new ipaddr.IPv4([high >> 8, high & 0xff, low >> 8, low & 0xff]);\n    };\n\n    IPv6.prototype.prefixLengthFromSubnetMask = function() {\n      var cidr, i, k, part, stop, zeros, zerotable;\n      zerotable = {\n        0: 16,\n        32768: 15,\n        49152: 14,\n        57344: 13,\n        61440: 12,\n        63488: 11,\n        64512: 10,\n        65024: 9,\n        65280: 8,\n        65408: 7,\n        65472: 6,\n        65504: 5,\n        65520: 4,\n        65528: 3,\n        65532: 2,\n        65534: 1,\n        65535: 0\n      };\n      cidr = 0;\n      stop = false;\n      for (i = k = 7; k >= 0; i = k += -1) {\n        part = this.parts[i];\n        if (part in zerotable) {\n          zeros = zerotable[part];\n          if (stop && zeros !== 0) {\n            return null;\n          }\n          if (zeros !== 16) {\n            stop = true;\n          }\n          cidr += zeros;\n        } else {\n          return null;\n        }\n      }\n      return 128 - cidr;\n    };\n\n    return IPv6;\n\n  })();\n\n  ipv6Part = \"(?:[0-9a-f]+::?)+\";\n\n  zoneIndex = \"%[0-9a-z]{1,}\";\n\n  ipv6Regexes = {\n    zoneIndex: new RegExp(zoneIndex, 'i'),\n    \"native\": new RegExp(\"^(::)?(\" + ipv6Part + \")?([0-9a-f]+)?(::)?(\" + zoneIndex + \")?$\", 'i'),\n    transitional: new RegExp((\"^((?:\" + ipv6Part + \")|(?:::)(?:\" + ipv6Part + \")?)\") + (ipv4Part + \"\\\\.\" + ipv4Part + \"\\\\.\" + ipv4Part + \"\\\\.\" + ipv4Part) + (\"(\" + zoneIndex + \")?$\"), 'i')\n  };\n\n  expandIPv6 = function(string, parts) {\n    var colonCount, lastColon, part, replacement, replacementCount, zoneId;\n    if (string.indexOf('::') !== string.lastIndexOf('::')) {\n      return null;\n    }\n    zoneId = (string.match(ipv6Regexes['zoneIndex']) || [])[0];\n    if (zoneId) {\n      zoneId = zoneId.substring(1);\n      string = string.replace(/%.+$/, '');\n    }\n    colonCount = 0;\n    lastColon = -1;\n    while ((lastColon = string.indexOf(':', lastColon + 1)) >= 0) {\n      colonCount++;\n    }\n    if (string.substr(0, 2) === '::') {\n      colonCount--;\n    }\n    if (string.substr(-2, 2) === '::') {\n      colonCount--;\n    }\n    if (colonCount > parts) {\n      return null;\n    }\n    replacementCount = parts - colonCount;\n    replacement = ':';\n    while (replacementCount--) {\n      replacement += '0:';\n    }\n    string = string.replace('::', replacement);\n    if (string[0] === ':') {\n      string = string.slice(1);\n    }\n    if (string[string.length - 1] === ':') {\n      string = string.slice(0, -1);\n    }\n    parts = (function() {\n      var k, len, ref, results;\n      ref = string.split(\":\");\n      results = [];\n      for (k = 0, len = ref.length; k < len; k++) {\n        part = ref[k];\n        results.push(parseInt(part, 16));\n      }\n      return results;\n    })();\n    return {\n      parts: parts,\n      zoneId: zoneId\n    };\n  };\n\n  ipaddr.IPv6.parser = function(string) {\n    var addr, k, len, match, octet, octets, zoneId;\n    if (ipv6Regexes['native'].test(string)) {\n      return expandIPv6(string, 8);\n    } else if (match = string.match(ipv6Regexes['transitional'])) {\n      zoneId = match[6] || '';\n      addr = expandIPv6(match[1].slice(0, -1) + zoneId, 6);\n      if (addr.parts) {\n        octets = [parseInt(match[2]), parseInt(match[3]), parseInt(match[4]), parseInt(match[5])];\n        for (k = 0, len = octets.length; k < len; k++) {\n          octet = octets[k];\n          if (!((0 <= octet && octet <= 255))) {\n            return null;\n          }\n        }\n        addr.parts.push(octets[0] << 8 | octets[1]);\n        addr.parts.push(octets[2] << 8 | octets[3]);\n        return {\n          parts: addr.parts,\n          zoneId: addr.zoneId\n        };\n      }\n    }\n    return null;\n  };\n\n  ipaddr.IPv4.isIPv4 = ipaddr.IPv6.isIPv6 = function(string) {\n    return this.parser(string) !== null;\n  };\n\n  ipaddr.IPv4.isValid = function(string) {\n    var e;\n    try {\n      new this(this.parser(string));\n      return true;\n    } catch (error1) {\n      e = error1;\n      return false;\n    }\n  };\n\n  ipaddr.IPv4.isValidFourPartDecimal = function(string) {\n    if (ipaddr.IPv4.isValid(string) && string.match(/^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){3}$/)) {\n      return true;\n    } else {\n      return false;\n    }\n  };\n\n  ipaddr.IPv6.isValid = function(string) {\n    var addr, e;\n    if (typeof string === \"string\" && string.indexOf(\":\") === -1) {\n      return false;\n    }\n    try {\n      addr = this.parser(string);\n      new this(addr.parts, addr.zoneId);\n      return true;\n    } catch (error1) {\n      e = error1;\n      return false;\n    }\n  };\n\n  ipaddr.IPv4.parse = function(string) {\n    var parts;\n    parts = this.parser(string);\n    if (parts === null) {\n      throw new Error(\"ipaddr: string is not formatted like ip address\");\n    }\n    return new this(parts);\n  };\n\n  ipaddr.IPv6.parse = function(string) {\n    var addr;\n    addr = this.parser(string);\n    if (addr.parts === null) {\n      throw new Error(\"ipaddr: string is not formatted like ip address\");\n    }\n    return new this(addr.parts, addr.zoneId);\n  };\n\n  ipaddr.IPv4.parseCIDR = function(string) {\n    var maskLength, match, parsed;\n    if (match = string.match(/^(.+)\\/(\\d+)$/)) {\n      maskLength = parseInt(match[2]);\n      if (maskLength >= 0 && maskLength <= 32) {\n        parsed = [this.parse(match[1]), maskLength];\n        Object.defineProperty(parsed, 'toString', {\n          value: function() {\n            return this.join('/');\n          }\n        });\n        return parsed;\n      }\n    }\n    throw new Error(\"ipaddr: string is not formatted like an IPv4 CIDR range\");\n  };\n\n  ipaddr.IPv4.subnetMaskFromPrefixLength = function(prefix) {\n    var filledOctetCount, j, octets;\n    prefix = parseInt(prefix);\n    if (prefix < 0 || prefix > 32) {\n      throw new Error('ipaddr: invalid IPv4 prefix length');\n    }\n    octets = [0, 0, 0, 0];\n    j = 0;\n    filledOctetCount = Math.floor(prefix / 8);\n    while (j < filledOctetCount) {\n      octets[j] = 255;\n      j++;\n    }\n    if (filledOctetCount < 4) {\n      octets[filledOctetCount] = Math.pow(2, prefix % 8) - 1 << 8 - (prefix % 8);\n    }\n    return new this(octets);\n  };\n\n  ipaddr.IPv4.broadcastAddressFromCIDR = function(string) {\n    var cidr, error, i, ipInterfaceOctets, octets, subnetMaskOctets;\n    try {\n      cidr = this.parseCIDR(string);\n      ipInterfaceOctets = cidr[0].toByteArray();\n      subnetMaskOctets = this.subnetMaskFromPrefixLength(cidr[1]).toByteArray();\n      octets = [];\n      i = 0;\n      while (i < 4) {\n        octets.push(parseInt(ipInterfaceOctets[i], 10) | parseInt(subnetMaskOctets[i], 10) ^ 255);\n        i++;\n      }\n      return new this(octets);\n    } catch (error1) {\n      error = error1;\n      throw new Error('ipaddr: the address does not have IPv4 CIDR format');\n    }\n  };\n\n  ipaddr.IPv4.networkAddressFromCIDR = function(string) {\n    var cidr, error, i, ipInterfaceOctets, octets, subnetMaskOctets;\n    try {\n      cidr = this.parseCIDR(string);\n      ipInterfaceOctets = cidr[0].toByteArray();\n      subnetMaskOctets = this.subnetMaskFromPrefixLength(cidr[1]).toByteArray();\n      octets = [];\n      i = 0;\n      while (i < 4) {\n        octets.push(parseInt(ipInterfaceOctets[i], 10) & parseInt(subnetMaskOctets[i], 10));\n        i++;\n      }\n      return new this(octets);\n    } catch (error1) {\n      error = error1;\n      throw new Error('ipaddr: the address does not have IPv4 CIDR format');\n    }\n  };\n\n  ipaddr.IPv6.parseCIDR = function(string) {\n    var maskLength, match, parsed;\n    if (match = string.match(/^(.+)\\/(\\d+)$/)) {\n      maskLength = parseInt(match[2]);\n      if (maskLength >= 0 && maskLength <= 128) {\n        parsed = [this.parse(match[1]), maskLength];\n        Object.defineProperty(parsed, 'toString', {\n          value: function() {\n            return this.join('/');\n          }\n        });\n        return parsed;\n      }\n    }\n    throw new Error(\"ipaddr: string is not formatted like an IPv6 CIDR range\");\n  };\n\n  ipaddr.isValid = function(string) {\n    return ipaddr.IPv6.isValid(string) || ipaddr.IPv4.isValid(string);\n  };\n\n  ipaddr.parse = function(string) {\n    if (ipaddr.IPv6.isValid(string)) {\n      return ipaddr.IPv6.parse(string);\n    } else if (ipaddr.IPv4.isValid(string)) {\n      return ipaddr.IPv4.parse(string);\n    } else {\n      throw new Error(\"ipaddr: the address has neither IPv6 nor IPv4 format\");\n    }\n  };\n\n  ipaddr.parseCIDR = function(string) {\n    var e;\n    try {\n      return ipaddr.IPv6.parseCIDR(string);\n    } catch (error1) {\n      e = error1;\n      try {\n        return ipaddr.IPv4.parseCIDR(string);\n      } catch (error1) {\n        e = error1;\n        throw new Error(\"ipaddr: the address has neither IPv6 nor IPv4 CIDR format\");\n      }\n    }\n  };\n\n  ipaddr.fromByteArray = function(bytes) {\n    var length;\n    length = bytes.length;\n    if (length === 4) {\n      return new ipaddr.IPv4(bytes);\n    } else if (length === 16) {\n      return new ipaddr.IPv6(bytes);\n    } else {\n      throw new Error(\"ipaddr: the binary input is neither an IPv6 nor IPv4 address\");\n    }\n  };\n\n  ipaddr.process = function(string) {\n    var addr;\n    addr = this.parse(string);\n    if (addr.kind() === 'ipv6' && addr.isIPv4MappedAddress()) {\n      return addr.toIPv4Address();\n    } else {\n      return addr;\n    }\n  };\n\n}).call(this);\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/aXMtY29yZS1tb2R1bGVAMi45LjA=",
    "content": "/core.json\u0015t{\n\t\"assert\": true,\n\t\"node:assert\": [\">= 14.18 && < 15\", \">= 16\"],\n\t\"assert/strict\": \">= 15\",\n\t\"node:assert/strict\": \">= 16\",\n\t\"async_hooks\": \">= 8\",\n\t\"node:async_hooks\": [\">= 14.18 && < 15\", \">= 16\"],\n\t\"buffer_ieee754\": \">= 0.5 && < 0.9.7\",\n\t\"buffer\": true,\n\t\"node:buffer\": [\">= 14.18 && < 15\", \">= 16\"],\n\t\"child_process\": true,\n\t\"node:child_process\": [\">= 14.18 && < 15\", \">= 16\"],\n\t\"cluster\": \">= 0.5\",\n\t\"node:cluster\": [\">= 14.18 && < 15\", \">= 16\"],\n\t\"console\": true,\n\t\"node:console\": [\">= 14.18 && < 15\", \">= 16\"],\n\t\"constants\": true,\n\t\"node:constants\": [\">= 14.18 && < 15\", \">= 16\"],\n\t\"crypto\": true,\n\t\"node:crypto\": [\">= 14.18 && < 15\", \">= 16\"],\n\t\"_debug_agent\": \">= 1 && < 8\",\n\t\"_debugger\": \"< 8\",\n\t\"dgram\": true,\n\t\"node:dgram\": [\">= 14.18 && < 15\", \">= 16\"],\n\t\"diagnostics_channel\": [\">= 14.17 && < 15\", \">= 15.1\"],\n\t\"node:diagnostics_channel\": [\">= 14.18 && < 15\", \">= 16\"],\n\t\"dns\": true,\n\t\"node:dns\": [\">= 14.18 && < 15\", \">= 16\"],\n\t\"dns/promises\": \">= 15\",\n\t\"node:dns/promises\": \">= 16\",\n\t\"domain\": \">= 0.7.12\",\n\t\"node:domain\": [\">= 14.18 && < 15\", \">= 16\"],\n\t\"events\": true,\n\t\"node:events\": [\">= 14.18 && < 15\", \">= 16\"],\n\t\"freelist\": \"< 6\",\n\t\"fs\": true,\n\t\"node:fs\": [\">= 14.18 && < 15\", \">= 16\"],\n\t\"fs/promises\": [\">= 10 && < 10.1\", \">= 14\"],\n\t\"node:fs/promises\": [\">= 14.18 && < 15\", \">= 16\"],\n\t\"_http_agent\": \">= 0.11.1\",\n\t\"node:_http_agent\": [\">= 14.18 && < 15\", \">= 16\"],\n\t\"_http_client\": \">= 0.11.1\",\n\t\"node:_http_client\": [\">= 14.18 && < 15\", \">= 16\"],\n\t\"_http_common\": \">= 0.11.1\",\n\t\"node:_http_common\": [\">= 14.18 && < 15\", \">= 16\"],\n\t\"_http_incoming\": \">= 0.11.1\",\n\t\"node:_http_incoming\": [\">= 14.18 && < 15\", \">= 16\"],\n\t\"_http_outgoing\": \">= 0.11.1\",\n\t\"node:_http_outgoing\": [\">= 14.18 && < 15\", \">= 16\"],\n\t\"_http_server\": \">= 0.11.1\",\n\t\"node:_http_server\": [\">= 14.18 && < 15\", \">= 16\"],\n\t\"http\": true,\n\t\"node:http\": [\">= 14.18 && < 15\", \">= 16\"],\n\t\"http2\": \">= 8.8\",\n\t\"node:http2\": [\">= 14.18 && < 15\", \">= 16\"],\n\t\"https\": true,\n\t\"node:https\": [\">= 14.18 && < 15\", \">= 16\"],\n\t\"inspector\": \">= 8\",\n\t\"node:inspector\": [\">= 14.18 && < 15\", \">= 16\"],\n\t\"_linklist\": \"< 8\",\n\t\"module\": true,\n\t\"node:module\": [\">= 14.18 && < 15\", \">= 16\"],\n\t\"net\": true,\n\t\"node:net\": [\">= 14.18 && < 15\", \">= 16\"],\n\t\"node-inspect/lib/_inspect\": \">= 7.6 && < 12\",\n\t\"node-inspect/lib/internal/inspect_client\": \">= 7.6 && < 12\",\n\t\"node-inspect/lib/internal/inspect_repl\": \">= 7.6 && < 12\",\n\t\"os\": true,\n\t\"node:os\": [\">= 14.18 && < 15\", \">= 16\"],\n\t\"path\": true,\n\t\"node:path\": [\">= 14.18 && < 15\", \">= 16\"],\n\t\"path/posix\": \">= 15.3\",\n\t\"node:path/posix\": \">= 16\",\n\t\"path/win32\": \">= 15.3\",\n\t\"node:path/win32\": \">= 16\",\n\t\"perf_hooks\": \">= 8.5\",\n\t\"node:perf_hooks\": [\">= 14.18 && < 15\", \">= 16\"],\n\t\"process\": \">= 1\",\n\t\"node:process\": [\">= 14.18 && < 15\", \">= 16\"],\n\t\"punycode\": \">= 0.5\",\n\t\"node:punycode\": [\">= 14.18 && < 15\", \">= 16\"],\n\t\"querystring\": true,\n\t\"node:querystring\": [\">= 14.18 && < 15\", \">= 16\"],\n\t\"readline\": true,\n\t\"node:readline\": [\">= 14.18 && < 15\", \">= 16\"],\n\t\"readline/promises\": \">= 17\",\n\t\"node:readline/promises\": \">= 17\",\n\t\"repl\": true,\n\t\"node:repl\": [\">= 14.18 && < 15\", \">= 16\"],\n\t\"smalloc\": \">= 0.11.5 && < 3\",\n\t\"_stream_duplex\": \">= 0.9.4\",\n\t\"node:_stream_duplex\": [\">= 14.18 && < 15\", \">= 16\"],\n\t\"_stream_transform\": \">= 0.9.4\",\n\t\"node:_stream_transform\": [\">= 14.18 && < 15\", \">= 16\"],\n\t\"_stream_wrap\": \">= 1.4.1\",\n\t\"node:_stream_wrap\": [\">= 14.18 && < 15\", \">= 16\"],\n\t\"_stream_passthrough\": \">= 0.9.4\",\n\t\"node:_stream_passthrough\": [\">= 14.18 && < 15\", \">= 16\"],\n\t\"_stream_readable\": \">= 0.9.4\",\n\t\"node:_stream_readable\": [\">= 14.18 && < 15\", \">= 16\"],\n\t\"_stream_writable\": \">= 0.9.4\",\n\t\"node:_stream_writable\": [\">= 14.18 && < 15\", \">= 16\"],\n\t\"stream\": true,\n\t\"node:stream\": [\">= 14.18 && < 15\", \">= 16\"],\n\t\"stream/consumers\": \">= 16.7\",\n\t\"node:stream/consumers\": \">= 16.7\",\n\t\"stream/promises\": \">= 15\",\n\t\"node:stream/promises\": \">= 16\",\n\t\"stream/web\": \">= 16.5\",\n\t\"node:stream/web\": \">= 16.5\",\n\t\"string_decoder\": true,\n\t\"node:string_decoder\": [\">= 14.18 && < 15\", \">= 16\"],\n\t\"sys\": [\">= 0.4 && < 0.7\", \">= 0.8\"],\n\t\"node:sys\": [\">= 14.18 && < 15\", \">= 16\"],\n\t\"node:test\": \">= 18\",\n\t\"timers\": true,\n\t\"node:timers\": [\">= 14.18 && < 15\", \">= 16\"],\n\t\"timers/promises\": \">= 15\",\n\t\"node:timers/promises\": \">= 16\",\n\t\"_tls_common\": \">= 0.11.13\",\n\t\"node:_tls_common\": [\">= 14.18 && < 15\", \">= 16\"],\n\t\"_tls_legacy\": \">= 0.11.3 && < 10\",\n\t\"_tls_wrap\": \">= 0.11.3\",\n\t\"node:_tls_wrap\": [\">= 14.18 && < 15\", \">= 16\"],\n\t\"tls\": true,\n\t\"node:tls\": [\">= 14.18 && < 15\", \">= 16\"],\n\t\"trace_events\": \">= 10\",\n\t\"node:trace_events\": [\">= 14.18 && < 15\", \">= 16\"],\n\t\"tty\": true,\n\t\"node:tty\": [\">= 14.18 && < 15\", \">= 16\"],\n\t\"url\": true,\n\t\"node:url\": [\">= 14.18 && < 15\", \">= 16\"],\n\t\"util\": true,\n\t\"node:util\": [\">= 14.18 && < 15\", \">= 16\"],\n\t\"util/types\": \">= 15.3\",\n\t\"node:util/types\": \">= 16\",\n\t\"v8/tools/arguments\": \">= 10 && < 12\",\n\t\"v8/tools/codemap\": [\">= 4.4 && < 5\", \">= 5.2 && < 12\"],\n\t\"v8/tools/consarray\": [\">= 4.4 && < 5\", \">= 5.2 && < 12\"],\n\t\"v8/tools/csvparser\": [\">= 4.4 && < 5\", \">= 5.2 && < 12\"],\n\t\"v8/tools/logreader\": [\">= 4.4 && < 5\", \">= 5.2 && < 12\"],\n\t\"v8/tools/profile_view\": [\">= 4.4 && < 5\", \">= 5.2 && < 12\"],\n\t\"v8/tools/splaytree\": [\">= 4.4 && < 5\", \">= 5.2 && < 12\"],\n\t\"v8\": \">= 1\",\n\t\"node:v8\": [\">= 14.18 && < 15\", \">= 16\"],\n\t\"vm\": true,\n\t\"node:vm\": [\">= 14.18 && < 15\", \">= 16\"],\n\t\"wasi\": \">= 13.4 && < 13.5\",\n\t\"worker_threads\": \">= 11.7\",\n\t\"node:worker_threads\": [\">= 14.18 && < 15\", \">= 16\"],\n\t\"zlib\": \">= 0.5\",\n\t\"node:zlib\": [\">= 14.18 && < 15\", \">= 16\"]\n}\n/test/index.js\u000f'use strict';\n\nvar test = require('tape');\nvar keys = require('object-keys');\nvar semver = require('semver');\nvar mockProperty = require('mock-property');\n\nvar isCore = require('../');\nvar data = require('../core.json');\n\nvar supportsNodePrefix = semver.satisfies(process.versions.node, '^14.18 || >= 16', { includePrerelease: true });\n\ntest('core modules', function (t) {\n\tt.test('isCore()', function (st) {\n\t\tst.ok(isCore('fs'));\n\t\tst.ok(isCore('net'));\n\t\tst.ok(isCore('http'));\n\n\t\tst.ok(!isCore('seq'));\n\t\tst.ok(!isCore('../'));\n\n\t\tst.ok(!isCore('toString'));\n\n\t\tst.end();\n\t});\n\n\tt.test('core list', function (st) {\n\t\tvar cores = keys(data);\n\t\tst.plan(cores.length);\n\n\t\tfor (var i = 0; i < cores.length; ++i) {\n\t\t\tvar mod = cores[i];\n\t\t\tvar requireFunc = function () { require(mod); }; // eslint-disable-line no-loop-func\n\t\t\tif (isCore(mod)) {\n\t\t\t\tst.doesNotThrow(requireFunc, mod + ' supported; requiring does not throw');\n\t\t\t} else {\n\t\t\t\tst['throws'](requireFunc, mod + ' not supported; requiring throws');\n\t\t\t}\n\t\t}\n\n\t\tst.end();\n\t});\n\n\tt.test('core via repl module', { skip: !data.repl }, function (st) {\n\t\tvar libs = require('repl')._builtinLibs; // eslint-disable-line no-underscore-dangle\n\t\tif (!libs) {\n\t\t\tst.skip('module.builtinModules does not exist');\n\t\t} else {\n\t\t\tfor (var i = 0; i < libs.length; ++i) {\n\t\t\t\tvar mod = libs[i];\n\t\t\t\tst.ok(data[mod], mod + ' is a core module');\n\t\t\t\tst.doesNotThrow(\n\t\t\t\t\tfunction () { require(mod); }, // eslint-disable-line no-loop-func\n\t\t\t\t\t'requiring ' + mod + ' does not throw'\n\t\t\t\t);\n\t\t\t\tif (mod.slice(0, 5) !== 'node:') {\n\t\t\t\t\tif (supportsNodePrefix) {\n\t\t\t\t\t\tst.doesNotThrow(\n\t\t\t\t\t\t\tfunction () { require('node:' + mod); }, // eslint-disable-line no-loop-func\n\t\t\t\t\t\t\t'requiring node:' + mod + ' does not throw'\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tst['throws'](\n\t\t\t\t\t\t\tfunction () { require('node:' + mod); }, // eslint-disable-line no-loop-func\n\t\t\t\t\t\t\t'requiring node:' + mod + ' throws'\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tst.end();\n\t});\n\n\tt.test('core via builtinModules list', { skip: !data.module }, function (st) {\n\t\tvar libs = require('module').builtinModules;\n\t\tif (!libs) {\n\t\t\tst.skip('module.builtinModules does not exist');\n\t\t} else {\n\t\t\tvar excludeList = [\n\t\t\t\t'_debug_agent',\n\t\t\t\t'v8/tools/tickprocessor-driver',\n\t\t\t\t'v8/tools/SourceMap',\n\t\t\t\t'v8/tools/tickprocessor',\n\t\t\t\t'v8/tools/profile'\n\t\t\t];\n\t\t\t// see https://github.com/nodejs/node/issues/42785\n\t\t\tif (semver.satisfies(process.version, '>= 18')) {\n\t\t\t\tlibs = libs.concat('node:test');\n\t\t\t}\n\t\t\tfor (var i = 0; i < libs.length; ++i) {\n\t\t\t\tvar mod = libs[i];\n\t\t\t\tif (excludeList.indexOf(mod) === -1) {\n\t\t\t\t\tst.ok(data[mod], mod + ' is a core module');\n\t\t\t\t\tst.doesNotThrow(\n\t\t\t\t\t\tfunction () { require(mod); }, // eslint-disable-line no-loop-func\n\t\t\t\t\t\t'requiring ' + mod + ' does not throw'\n\t\t\t\t\t);\n\t\t\t\t\tif (mod.slice(0, 5) !== 'node:') {\n\t\t\t\t\t\tif (supportsNodePrefix) {\n\t\t\t\t\t\t\tst.doesNotThrow(\n\t\t\t\t\t\t\t\tfunction () { require('node:' + mod); }, // eslint-disable-line no-loop-func\n\t\t\t\t\t\t\t\t'requiring node:' + mod + ' does not throw'\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tst['throws'](\n\t\t\t\t\t\t\t\tfunction () { require('node:' + mod); }, // eslint-disable-line no-loop-func\n\t\t\t\t\t\t\t\t'requiring node:' + mod + ' throws'\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tst.end();\n\t});\n\n\tt.test('Object.prototype pollution', function (st) {\n\t\tvar nonKey = 'not a core module';\n\t\tst.teardown(mockProperty(Object.prototype, 'fs', { value: false }));\n\t\tst.teardown(mockProperty(Object.prototype, 'path', { value: '>= 999999999' }));\n\t\tst.teardown(mockProperty(Object.prototype, 'http', { value: data.http }));\n\t\tst.teardown(mockProperty(Object.prototype, nonKey, { value: true }));\n\n\t\tst.equal(isCore('fs'), true, 'fs is a core module even if Object.prototype lies');\n\t\tst.equal(isCore('path'), true, 'path is a core module even if Object.prototype lies');\n\t\tst.equal(isCore('http'), true, 'path is a core module even if Object.prototype matches data');\n\t\tst.equal(isCore(nonKey), false, '\"' + nonKey + '\" is not a core module even if Object.prototype lies');\n\n\t\tst.end();\n\t});\n\n\tt.end();\n});\n/CHANGELOG.md)# Changelog\n\nAll notable changes to this project will be documented in this file.\n\nThe format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)\nand this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).\n\n## [v2.9.0](https://github.com/inspect-js/is-core-module/compare/v2.8.1...v2.9.0) - 2022-04-19\n\n### Commits\n\n- [New] add `node:test`, in node 18+ [`f853eca`](https://github.com/inspect-js/is-core-module/commit/f853eca801d0a7d4e1dbb670f1b6d9837d9533c5)\n- [Tests] use `mock-property` [`03b3644`](https://github.com/inspect-js/is-core-module/commit/03b3644dff4417f4ba5a7d0aa0138f5f6b3e5c46)\n- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `auto-changelog`, `tape` [`7c0e2d0`](https://github.com/inspect-js/is-core-module/commit/7c0e2d06ed2a89acf53abe2ab34d703ed5b03455)\n- [meta] simplify \"exports\" [`d6ed201`](https://github.com/inspect-js/is-core-module/commit/d6ed201eba7fbba0e59814a9050fc49a6e9878c8)\n\n## [v2.8.1](https://github.com/inspect-js/is-core-module/compare/v2.8.0...v2.8.1) - 2022-01-05\n\n### Commits\n\n- [actions] reuse common workflows [`cd2cf9b`](https://github.com/inspect-js/is-core-module/commit/cd2cf9b3b66c8d328f65610efe41e9325db7716d)\n- [Fix] update node 0.4 results [`062195d`](https://github.com/inspect-js/is-core-module/commit/062195d89f0876a88b95d378b43f7fcc1205bc5b)\n- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `safe-publish-latest`, `tape` [`0790b62`](https://github.com/inspect-js/is-core-module/commit/0790b6222848c6167132f9f73acc3520fa8d1298)\n- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `tape` [`7d139a6`](https://github.com/inspect-js/is-core-module/commit/7d139a6d767709eabf0a0251e074ec1fb230c06e)\n- [Tests] run `nyc` in `tests-only`, not `test` [`780e8a0`](https://github.com/inspect-js/is-core-module/commit/780e8a049951c71cf78b1707f0871c48a28bde14)\n\n## [v2.8.0](https://github.com/inspect-js/is-core-module/compare/v2.7.0...v2.8.0) - 2021-10-14\n\n### Commits\n\n- [actions] update codecov uploader [`0cfe94e`](https://github.com/inspect-js/is-core-module/commit/0cfe94e106a7d005ea03e008c0a21dec13a77904)\n- [New] add `readline/promises` to node v17+ [`4f78c30`](https://github.com/inspect-js/is-core-module/commit/4f78c3008b1b58b4db6dc91d99610b1bc859da7e)\n- [Tests] node ^14.18 supports `node:` prefixes for CJS [`43e2f17`](https://github.com/inspect-js/is-core-module/commit/43e2f177452cea2f0eaf34f61b5407217bbdb6f4)\n\n## [v2.7.0](https://github.com/inspect-js/is-core-module/compare/v2.6.0...v2.7.0) - 2021-09-27\n\n### Commits\n\n- [New] node `v14.18` added `node:`-prefixed core modules to `require` [`6d943ab`](https://github.com/inspect-js/is-core-module/commit/6d943abe81382b9bbe344384d80fbfebe1cc0526)\n- [Tests] add coverage for Object.prototype pollution [`c6baf5f`](https://github.com/inspect-js/is-core-module/commit/c6baf5f942311a1945c1af41167bb80b84df2af7)\n- [Dev Deps] update `@ljharb/eslint-config` [`6717f00`](https://github.com/inspect-js/is-core-module/commit/6717f000d063ea57beb772bded36c2f056ac404c)\n- [eslint] fix linter warning [`594c10b`](https://github.com/inspect-js/is-core-module/commit/594c10bb7d39d7eb00925c90924199ff596184b2)\n- [meta] add `sideEffects` flag [`c32cfa5`](https://github.com/inspect-js/is-core-module/commit/c32cfa5195632944c4dd4284a142b8476e75be13)\n\n## [v2.6.0](https://github.com/inspect-js/is-core-module/compare/v2.5.0...v2.6.0) - 2021-08-17\n\n### Commits\n\n- [Dev Deps] update `eslint`, `tape` [`6cc928f`](https://github.com/inspect-js/is-core-module/commit/6cc928f8a4bba66aeeccc4f6beeac736d4bd3081)\n- [New] add `stream/consumers` to node `&gt;= 16.7` [`a1a423e`](https://github.com/inspect-js/is-core-module/commit/a1a423e467e4cc27df180234fad5bab45943e67d)\n- [Refactor] Remove duplicated `&&` operand [`86faea7`](https://github.com/inspect-js/is-core-module/commit/86faea738213a2433c62d1098488dc9314dca832)\n- [Tests] include prereleases [`a4da7a6`](https://github.com/inspect-js/is-core-module/commit/a4da7a6abf7568e2aa4fd98e69452179f1850963)\n\n## [v2.5.0](https://github.com/inspect-js/is-core-module/compare/v2.4.0...v2.5.0) - 2021-07-12\n\n### Commits\n\n- [Dev Deps] update `auto-changelog`, `eslint` [`6334cc9`](https://github.com/inspect-js/is-core-module/commit/6334cc94f3af7469685bd8f236740991baaf2705)\n- [New] add `stream/web` to node v16.5+ [`17ac59b`](https://github.com/inspect-js/is-core-module/commit/17ac59b662d63e220a2e5728625f005c24f177b2)\n\n## [v2.4.0](https://github.com/inspect-js/is-core-module/compare/v2.3.0...v2.4.0) - 2021-05-09\n\n### Commits\n\n- [readme] add actions and codecov badges [`82b7faa`](https://github.com/inspect-js/is-core-module/commit/82b7faa12b56dbe47fbea67e1a5b9e447027ba40)\n- [Dev Deps] update `@ljharb/eslint-config`, `aud` [`8096868`](https://github.com/inspect-js/is-core-module/commit/8096868c024a161ccd4d44110b136763e92eace8)\n- [Dev Deps] update `eslint` [`6726824`](https://github.com/inspect-js/is-core-module/commit/67268249b88230018c510f6532a8046d7326346f)\n- [New] add `diagnostics_channel` to node `^14.17` [`86c6563`](https://github.com/inspect-js/is-core-module/commit/86c65634201b8ff9b3e48a9a782594579c7f5c3c)\n- [meta] fix prepublish script [`697a01e`](https://github.com/inspect-js/is-core-module/commit/697a01e3c9c0be074066520954f30fb28532ec57)\n\n## [v2.3.0](https://github.com/inspect-js/is-core-module/compare/v2.2.0...v2.3.0) - 2021-04-24\n\n### Commits\n\n- [meta] do not publish github action workflow files [`060d4bb`](https://github.com/inspect-js/is-core-module/commit/060d4bb971a29451c19ff336eb56bee27f9fa95a)\n- [New] add support for `node:` prefix, in node 16+ [`7341223`](https://github.com/inspect-js/is-core-module/commit/73412230a769f6e81c05eea50b6520cebf54ed2f)\n- [actions] use `node/install` instead of `node/run`; use `codecov` action [`016269a`](https://github.com/inspect-js/is-core-module/commit/016269abae9f6657a5254adfbb813f09a05067f9)\n- [patch] remove unneeded `.0` in version ranges [`cb466a6`](https://github.com/inspect-js/is-core-module/commit/cb466a6d89e52b8389e5c12715efcd550c41cea3)\n- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `tape` [`c9f9c39`](https://github.com/inspect-js/is-core-module/commit/c9f9c396ace60ef81906f98059c064e6452473ed)\n- [actions] update workflows [`3ee4a89`](https://github.com/inspect-js/is-core-module/commit/3ee4a89fd5a02fccd43882d905448ea6a98e9a3c)\n- [Dev Deps] update `eslint`, `@ljharb/eslint-config` [`dee4fed`](https://github.com/inspect-js/is-core-module/commit/dee4fed79690c1d43a22f7fa9426abebdc6d727f)\n- [Dev Deps] update `eslint`, `@ljharb/eslint-config` [`7d046ba`](https://github.com/inspect-js/is-core-module/commit/7d046ba07ae8c9292e43652694ca808d7b309de8)\n- [meta] use `prepublishOnly` script for npm 7+ [`149e677`](https://github.com/inspect-js/is-core-module/commit/149e6771a5ede6d097e71785b467a9c4b4977cc7)\n- [readme] remove travis badge [`903b51d`](https://github.com/inspect-js/is-core-module/commit/903b51d6b69b98abeabfbc3695c345b02646f19c)\n\n## [v2.2.0](https://github.com/inspect-js/is-core-module/compare/v2.1.0...v2.2.0) - 2020-11-26\n\n### Commits\n\n- [Tests] migrate tests to Github Actions [`c919f57`](https://github.com/inspect-js/is-core-module/commit/c919f573c0a92d10a0acad0b650b5aecb033d426)\n- [patch] `core.json`: %s/    /\\t/g [`db3f685`](https://github.com/inspect-js/is-core-module/commit/db3f68581f53e73cc09cd675955eb1bdd6a5a39b)\n- [Tests] run `nyc` on all tests [`b2f925f`](https://github.com/inspect-js/is-core-module/commit/b2f925f8866f210ef441f39fcc8cc42692ab89b1)\n- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`; add `safe-publish-latest` [`89f02a2`](https://github.com/inspect-js/is-core-module/commit/89f02a2b4162246dea303a6ee31bb9a550b05c72)\n- [New] add `path/posix`, `path/win32`, `util/types` [`77f94f1`](https://github.com/inspect-js/is-core-module/commit/77f94f1e90ffd7c0be2a3f1aa8574ebf7fd981b3)\n\n## [v2.1.0](https://github.com/inspect-js/is-core-module/compare/v2.0.0...v2.1.0) - 2020-11-04\n\n### Commits\n\n- [Dev Deps] update `eslint` [`5e0034e`](https://github.com/inspect-js/is-core-module/commit/5e0034eae57c09c8f1bd769f502486a00f56c6e4)\n- [New] Add `diagnostics_channel` [`c2d83d0`](https://github.com/inspect-js/is-core-module/commit/c2d83d0a0225a1a658945d9bab7036ea347d29ec)\n\n## [v2.0.0](https://github.com/inspect-js/is-core-module/compare/v1.0.2...v2.0.0) - 2020-09-29\n\n### Commits\n\n- v2 implementation [`865aeb5`](https://github.com/inspect-js/is-core-module/commit/865aeb5ca0e90248a3dfff5d7622e4751fdeb9cd)\n- Only apps should have lockfiles [`5a5e660`](https://github.com/inspect-js/is-core-module/commit/5a5e660d568e37eb44e17fb1ebb12a105205fc2b)\n- Initial commit for v2 [`5a51524`](https://github.com/inspect-js/is-core-module/commit/5a51524e06f92adece5fbb138c69b7b9748a2348)\n- Tests [`116eae4`](https://github.com/inspect-js/is-core-module/commit/116eae4fccd01bc72c1fd3cc4b7561c387afc496)\n- [meta] add `auto-changelog` [`c24388b`](https://github.com/inspect-js/is-core-module/commit/c24388bee828d223040519d1f5b226ca35beee63)\n- [actions] add \"Automatic Rebase\" and \"require allow edits\" actions [`34292db`](https://github.com/inspect-js/is-core-module/commit/34292dbcbadae0868aff03c22dbd8b7b8a11558a)\n- [Tests] add `npm run lint` [`4f9eeee`](https://github.com/inspect-js/is-core-module/commit/4f9eeee7ddff10698bbf528620f4dc8d4fa3e697)\n- [readme] fix travis badges, https all URLs [`e516a73`](https://github.com/inspect-js/is-core-module/commit/e516a73b0dccce20938c432b1ba512eae8eff9e9)\n- [meta] create FUNDING.yml [`1aabebc`](https://github.com/inspect-js/is-core-module/commit/1aabebca98d01f8a04e46bc2e2520fa93cf21ac6)\n- [Fix] `domain`: domain landed sometime &gt; v0.7.7 and &lt;= v0.7.12 [`2df7d37`](https://github.com/inspect-js/is-core-module/commit/2df7d37595d41b15eeada732b706b926c2771655)\n- [Fix] `sys`: worked in 0.6, not 0.7, and 0.8+ [`a75c134`](https://github.com/inspect-js/is-core-module/commit/a75c134229e1e9441801f6b73f6a52489346eb65)\n\n## [v1.0.2](https://github.com/inspect-js/is-core-module/compare/v1.0.1...v1.0.2) - 2014-09-28\n\n### Commits\n\n- simpler [`66fe90f`](https://github.com/inspect-js/is-core-module/commit/66fe90f9771581b9adc0c3900baa52c21b5baea2)\n\n## [v1.0.1](https://github.com/inspect-js/is-core-module/compare/v1.0.0...v1.0.1) - 2014-09-28\n\n### Commits\n\n- remove stupid [`f21f906`](https://github.com/inspect-js/is-core-module/commit/f21f906f882c2bd656a5fc5ed6fbe48ddaffb2ac)\n- update readme [`1eff0ec`](https://github.com/inspect-js/is-core-module/commit/1eff0ec69798d1ec65771552d1562911e90a8027)\n\n## v1.0.0 - 2014-09-28\n\n### Commits\n\n- init [`48e5e76`](https://github.com/inspect-js/is-core-module/commit/48e5e76cac378fddb8c1f7d4055b8dfc943d6b96)\n/index.js\u0006'use strict';\n\nvar has = require('has');\n\nfunction specifierIncluded(current, specifier) {\n\tvar nodeParts = current.split('.');\n\tvar parts = specifier.split(' ');\n\tvar op = parts.length > 1 ? parts[0] : '=';\n\tvar versionParts = (parts.length > 1 ? parts[1] : parts[0]).split('.');\n\n\tfor (var i = 0; i < 3; ++i) {\n\t\tvar cur = parseInt(nodeParts[i] || 0, 10);\n\t\tvar ver = parseInt(versionParts[i] || 0, 10);\n\t\tif (cur === ver) {\n\t\t\tcontinue; // eslint-disable-line no-restricted-syntax, no-continue\n\t\t}\n\t\tif (op === '<') {\n\t\t\treturn cur < ver;\n\t\t}\n\t\tif (op === '>=') {\n\t\t\treturn cur >= ver;\n\t\t}\n\t\treturn false;\n\t}\n\treturn op === '>=';\n}\n\nfunction matchesRange(current, range) {\n\tvar specifiers = range.split(/ ?&& ?/);\n\tif (specifiers.length === 0) {\n\t\treturn false;\n\t}\n\tfor (var i = 0; i < specifiers.length; ++i) {\n\t\tif (!specifierIncluded(current, specifiers[i])) {\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn true;\n}\n\nfunction versionIncluded(nodeVersion, specifierValue) {\n\tif (typeof specifierValue === 'boolean') {\n\t\treturn specifierValue;\n\t}\n\n\tvar current = typeof nodeVersion === 'undefined'\n\t\t? process.versions && process.versions.node\n\t\t: nodeVersion;\n\n\tif (typeof current !== 'string') {\n\t\tthrow new TypeError(typeof nodeVersion === 'undefined' ? 'Unable to determine current node version' : 'If provided, a valid node version is required');\n\t}\n\n\tif (specifierValue && typeof specifierValue === 'object') {\n\t\tfor (var i = 0; i < specifierValue.length; ++i) {\n\t\t\tif (matchesRange(current, specifierValue[i])) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\treturn matchesRange(current, specifierValue);\n}\n\nvar data = require('./core.json');\n\nmodule.exports = function isCore(x, nodeVersion) {\n\treturn has(data, x) && versionIncluded(nodeVersion, data[x]);\n};\n/package.json\u0006{\n\t\"name\": \"is-core-module\",\n\t\"version\": \"2.9.0\",\n\t\"description\": \"Is this specifier a node.js core module?\",\n\t\"main\": \"index.js\",\n\t\"sideEffects\": false,\n\t\"exports\": {\n\t\t\".\": \"./index.js\",\n\t\t\"./package.json\": \"./package.json\"\n\t},\n\t\"scripts\": {\n\t\t\"prepublish\": \"not-in-publish || npm run prepublishOnly\",\n\t\t\"prepublishOnly\": \"safe-publish-latest\",\n\t\t\"lint\": \"eslint .\",\n\t\t\"pretest\": \"npm run lint\",\n\t\t\"tests-only\": \"nyc tape 'test/**/*.js'\",\n\t\t\"test\": \"npm run tests-only\",\n\t\t\"posttest\": \"aud --production\",\n\t\t\"version\": \"auto-changelog && git add CHANGELOG.md\",\n\t\t\"postversion\": \"auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \\\"v$(node -e \\\"console.log(require('./package.json').version)\\\")\\\"\"\n\t},\n\t\"repository\": {\n\t\t\"type\": \"git\",\n\t\t\"url\": \"git+https://github.com/inspect-js/is-core-module.git\"\n\t},\n\t\"keywords\": [\n\t\t\"core\",\n\t\t\"modules\",\n\t\t\"module\",\n\t\t\"npm\",\n\t\t\"node\",\n\t\t\"dependencies\"\n\t],\n\t\"author\": \"Jordan Harband <ljharb@gmail.com>\",\n\t\"funding\": {\n\t\t\"url\": \"https://github.com/sponsors/ljharb\"\n\t},\n\t\"license\": \"MIT\",\n\t\"bugs\": {\n\t\t\"url\": \"https://github.com/inspect-js/is-core-module/issues\"\n\t},\n\t\"homepage\": \"https://github.com/inspect-js/is-core-module\",\n\t\"dependencies\": {\n\t\t\"has\": \"^1.0.3\"\n\t},\n\t\"devDependencies\": {\n\t\t\"@ljharb/eslint-config\": \"^21.0.0\",\n\t\t\"aud\": \"^2.0.0\",\n\t\t\"auto-changelog\": \"^2.4.0\",\n\t\t\"eslint\": \"=8.8.0\",\n\t\t\"mock-property\": \"^1.0.0\",\n\t\t\"nyc\": \"^10.3.2\",\n\t\t\"safe-publish-latest\": \"^2.0.0\",\n\t\t\"semver\": \"^6.3.0\",\n\t\t\"tape\": \"^5.5.3\"\n\t},\n\t\"auto-changelog\": {\n\t\t\"output\": \"CHANGELOG.md\",\n\t\t\"template\": \"keepachangelog\",\n\t\t\"unreleased\": false,\n\t\t\"commitLimit\": false,\n\t\t\"backfillLimit\": false,\n\t\t\"hideCredit\": true\n\t}\n}\n/.eslintrc\u0001S{\n    \"extends\": \"@ljharb\",\n    \"root\": true,\n    \"rules\": {\n\t\t\"func-style\": 1,\n    },\n    \"overrides\": [\n        {\n            \"files\": \"test/**\",\n            \"rules\": {\n                \"global-require\": 0,\n\t\t\t\t\"max-depth\": 0,\n                \"max-lines-per-function\": 0,\n\t\t\t\t\"no-negated-condition\": 0,\n            },\n        },\n    ],\n}\n/.nycrcċ{\n\t\"all\": true,\n\t\"check-coverage\": false,\n\t\"reporter\": [\"text-summary\", \"text\", \"html\", \"json\"],\n\t\"exclude\": [\n\t\t\"coverage\",\n\t\t\"test\"\n\t]\n}\n/README.md\u0006{# is-core-module <sup>[![Version Badge][2]][1]</sup>\n\n[![github actions][actions-image]][actions-url]\n[![coverage][codecov-image]][codecov-url]\n[![dependency status][5]][6]\n[![dev dependency status][7]][8]\n[![License][license-image]][license-url]\n[![Downloads][downloads-image]][downloads-url]\n\n[![npm badge][11]][1]\n\nIs this specifier a node.js core module? Optionally provide a node version to check; defaults to the current node version.\n\n## Example\n\n```js\nvar isCore = require('is-core-module');\nvar assert = require('assert');\nassert(isCore('fs'));\nassert(!isCore('butts'));\n```\n\n## Tests\nClone the repo, `npm install`, and run `npm test`\n\n[1]: https://npmjs.org/package/is-core-module\n[2]: https://versionbadg.es/inspect-js/is-core-module.svg\n[5]: https://david-dm.org/inspect-js/is-core-module.svg\n[6]: https://david-dm.org/inspect-js/is-core-module\n[7]: https://david-dm.org/inspect-js/is-core-module/dev-status.svg\n[8]: https://david-dm.org/inspect-js/is-core-module#info=devDependencies\n[11]: https://nodei.co/npm/is-core-module.png?downloads=true&stars=true\n[license-image]: https://img.shields.io/npm/l/is-core-module.svg\n[license-url]: LICENSE\n[downloads-image]: https://img.shields.io/npm/dm/is-core-module.svg\n[downloads-url]: https://npm-stat.com/charts.html?package=is-core-module\n[codecov-image]: https://codecov.io/gh/inspect-js/is-core-module/branch/main/graphs/badge.svg\n[codecov-url]: https://app.codecov.io/gh/inspect-js/is-core-module/\n[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/inspect-js/is-core-module\n[actions-url]: https://github.com/inspect-js/is-core-module/actions\n/LICENSE\u00046The MIT License (MIT)\n\nCopyright (c) 2014 Dave Justice\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE."
  },
  {
    "path": "tests/cdn-proxy/v2/mod/aXMtYmluYXJ5LXBhdGhAMi4xLjA=",
    "content": "/package.json\u0002{\n\t\"name\": \"is-binary-path\",\n\t\"version\": \"2.1.0\",\n\t\"description\": \"Check if a file path is a binary file\",\n\t\"license\": \"MIT\",\n\t\"repository\": \"sindresorhus/is-binary-path\",\n\t\"author\": {\n\t\t\"name\": \"Sindre Sorhus\",\n\t\t\"email\": \"sindresorhus@gmail.com\",\n\t\t\"url\": \"sindresorhus.com\"\n\t},\n\t\"engines\": {\n\t\t\"node\": \">=8\"\n\t},\n\t\"scripts\": {\n\t\t\"test\": \"xo && ava && tsd\"\n\t},\n\t\"files\": [\n\t\t\"index.js\",\n\t\t\"index.d.ts\"\n\t],\n\t\"keywords\": [\n\t\t\"binary\",\n\t\t\"extensions\",\n\t\t\"extension\",\n\t\t\"file\",\n\t\t\"path\",\n\t\t\"check\",\n\t\t\"detect\",\n\t\t\"is\"\n\t],\n\t\"dependencies\": {\n\t\t\"binary-extensions\": \"^2.0.0\"\n\t},\n\t\"devDependencies\": {\n\t\t\"ava\": \"^1.4.1\",\n\t\t\"tsd\": \"^0.7.2\",\n\t\t\"xo\": \"^0.24.0\"\n\t}\n}\n/index.d.ts\u0001\"/**\nCheck if a file path is a binary file.\n\n@example\n```\nimport isBinaryPath = require('is-binary-path');\n\nisBinaryPath('source/unicorn.png');\n//=> true\n\nisBinaryPath('source/unicorn.txt');\n//=> false\n```\n*/\ndeclare function isBinaryPath(filePath: string): boolean;\n\nexport = isBinaryPath;\n/readme.md\u0002# is-binary-path [![Build Status](https://travis-ci.org/sindresorhus/is-binary-path.svg?branch=master)](https://travis-ci.org/sindresorhus/is-binary-path)\n\n> Check if a file path is a binary file\n\n\n## Install\n\n```\n$ npm install is-binary-path\n```\n\n\n## Usage\n\n```js\nconst isBinaryPath = require('is-binary-path');\n\nisBinaryPath('source/unicorn.png');\n//=> true\n\nisBinaryPath('source/unicorn.txt');\n//=> false\n```\n\n\n## Related\n\n- [binary-extensions](https://github.com/sindresorhus/binary-extensions) - List of binary file extensions\n- [is-text-path](https://github.com/sindresorhus/is-text-path) - Check if a filepath is a text file\n\n\n## License\n\nMIT © [Sindre Sorhus](https://sindresorhus.com), [Paul Miller](https://paulmillr.com)\n/index.js'use strict';\nconst path = require('path');\nconst binaryExtensions = require('binary-extensions');\n\nconst extensions = new Set(binaryExtensions);\n\nmodule.exports = filePath => extensions.has(path.extname(filePath).slice(1).toLowerCase());\n/license\u0004MIT License\n\nCopyright (c) 2019 Sindre Sorhus <sindresorhus@gmail.com> (https://sindresorhus.com), Paul Miller (https://paulmillr.com)\n\nPermission 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:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE 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.\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/aXMtZ2xvYkA0LjAuMw==",
    "content": "/README.md\u001b# is-glob [![NPM version](https://img.shields.io/npm/v/is-glob.svg?style=flat)](https://www.npmjs.com/package/is-glob) [![NPM monthly downloads](https://img.shields.io/npm/dm/is-glob.svg?style=flat)](https://npmjs.org/package/is-glob) [![NPM total downloads](https://img.shields.io/npm/dt/is-glob.svg?style=flat)](https://npmjs.org/package/is-glob) [![Build Status](https://img.shields.io/github/workflow/status/micromatch/is-glob/dev)](https://github.com/micromatch/is-glob/actions)\n\n> Returns `true` if the given string looks like a glob pattern or an extglob pattern. This makes it easy to create code that only uses external modules like node-glob when necessary, resulting in much faster code execution and initialization time, and a better user experience.\n\nPlease consider following this project's author, [Jon Schlinkert](https://github.com/jonschlinkert), and consider starring the project to show your :heart: and support.\n\n## Install\n\nInstall with [npm](https://www.npmjs.com/):\n\n```sh\n$ npm install --save is-glob\n```\n\nYou might also be interested in [is-valid-glob](https://github.com/jonschlinkert/is-valid-glob) and [has-glob](https://github.com/jonschlinkert/has-glob).\n\n## Usage\n\n```js\nvar isGlob = require('is-glob');\n```\n\n### Default behavior\n\n**True**\n\nPatterns that have glob characters or regex patterns will return `true`:\n\n```js\nisGlob('!foo.js');\nisGlob('*.js');\nisGlob('**/abc.js');\nisGlob('abc/*.js');\nisGlob('abc/(aaa|bbb).js');\nisGlob('abc/[a-z].js');\nisGlob('abc/{a,b}.js');\n//=> true\n```\n\nExtglobs\n\n```js\nisGlob('abc/@(a).js');\nisGlob('abc/!(a).js');\nisGlob('abc/+(a).js');\nisGlob('abc/*(a).js');\nisGlob('abc/?(a).js');\n//=> true\n```\n\n**False**\n\nEscaped globs or extglobs return `false`:\n\n```js\nisGlob('abc/\\\\@(a).js');\nisGlob('abc/\\\\!(a).js');\nisGlob('abc/\\\\+(a).js');\nisGlob('abc/\\\\*(a).js');\nisGlob('abc/\\\\?(a).js');\nisGlob('\\\\!foo.js');\nisGlob('\\\\*.js');\nisGlob('\\\\*\\\\*/abc.js');\nisGlob('abc/\\\\*.js');\nisGlob('abc/\\\\(aaa|bbb).js');\nisGlob('abc/\\\\[a-z].js');\nisGlob('abc/\\\\{a,b}.js');\n//=> false\n```\n\nPatterns that do not have glob patterns return `false`:\n\n```js\nisGlob('abc.js');\nisGlob('abc/def/ghi.js');\nisGlob('foo.js');\nisGlob('abc/@.js');\nisGlob('abc/+.js');\nisGlob('abc/?.js');\nisGlob();\nisGlob(null);\n//=> false\n```\n\nArrays are also `false` (If you want to check if an array has a glob pattern, use [has-glob](https://github.com/jonschlinkert/has-glob)):\n\n```js\nisGlob(['**/*.js']);\nisGlob(['foo.js']);\n//=> false\n```\n\n### Option strict\n\nWhen `options.strict === false` the behavior is less strict in determining if a pattern is a glob. Meaning that\nsome patterns that would return `false` may return `true`. This is done so that matching libraries like [micromatch](https://github.com/micromatch/micromatch) have a chance at determining if the pattern is a glob or not.\n\n**True**\n\nPatterns that have glob characters or regex patterns will return `true`:\n\n```js\nisGlob('!foo.js', {strict: false});\nisGlob('*.js', {strict: false});\nisGlob('**/abc.js', {strict: false});\nisGlob('abc/*.js', {strict: false});\nisGlob('abc/(aaa|bbb).js', {strict: false});\nisGlob('abc/[a-z].js', {strict: false});\nisGlob('abc/{a,b}.js', {strict: false});\n//=> true\n```\n\nExtglobs\n\n```js\nisGlob('abc/@(a).js', {strict: false});\nisGlob('abc/!(a).js', {strict: false});\nisGlob('abc/+(a).js', {strict: false});\nisGlob('abc/*(a).js', {strict: false});\nisGlob('abc/?(a).js', {strict: false});\n//=> true\n```\n\n**False**\n\nEscaped globs or extglobs return `false`:\n\n```js\nisGlob('\\\\!foo.js', {strict: false});\nisGlob('\\\\*.js', {strict: false});\nisGlob('\\\\*\\\\*/abc.js', {strict: false});\nisGlob('abc/\\\\*.js', {strict: false});\nisGlob('abc/\\\\(aaa|bbb).js', {strict: false});\nisGlob('abc/\\\\[a-z].js', {strict: false});\nisGlob('abc/\\\\{a,b}.js', {strict: false});\n//=> false\n```\n\n## About\n\n<details>\n<summary><strong>Contributing</strong></summary>\n\nPull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).\n\n</details>\n\n<details>\n<summary><strong>Running Tests</strong></summary>\n\nRunning and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:\n\n```sh\n$ npm install && npm test\n```\n\n</details>\n\n<details>\n<summary><strong>Building docs</strong></summary>\n\n_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_\n\nTo generate the readme, run the following command:\n\n```sh\n$ npm install -g verbose/verb#dev verb-generate-readme && verb\n```\n\n</details>\n\n### Related projects\n\nYou might also be interested in these projects:\n\n* [assemble](https://www.npmjs.com/package/assemble): Get the rocks out of your socks! Assemble makes you fast at creating web projects… [more](https://github.com/assemble/assemble) | [homepage](https://github.com/assemble/assemble \"Get the rocks out of your socks! Assemble makes you fast at creating web projects. Assemble is used by thousands of projects for rapid prototyping, creating themes, scaffolds, boilerplates, e-books, UI components, API documentation, blogs, building websit\")\n* [base](https://www.npmjs.com/package/base): Framework for rapidly creating high quality, server-side node.js applications, using plugins like building blocks | [homepage](https://github.com/node-base/base \"Framework for rapidly creating high quality, server-side node.js applications, using plugins like building blocks\")\n* [update](https://www.npmjs.com/package/update): Be scalable! Update is a new, open source developer framework and CLI for automating updates… [more](https://github.com/update/update) | [homepage](https://github.com/update/update \"Be scalable! Update is a new, open source developer framework and CLI for automating updates of any kind in code projects.\")\n* [verb](https://www.npmjs.com/package/verb): Documentation generator for GitHub projects. Verb is extremely powerful, easy to use, and is used… [more](https://github.com/verbose/verb) | [homepage](https://github.com/verbose/verb \"Documentation generator for GitHub projects. Verb is extremely powerful, easy to use, and is used on hundreds of projects of all sizes to generate everything from API docs to readmes.\")\n\n### Contributors\n\n| **Commits** | **Contributor** |  \n| --- | --- |  \n| 47 | [jonschlinkert](https://github.com/jonschlinkert) |  \n| 5  | [doowb](https://github.com/doowb) |  \n| 1  | [phated](https://github.com/phated) |  \n| 1  | [danhper](https://github.com/danhper) |  \n| 1  | [paulmillr](https://github.com/paulmillr) |  \n\n### Author\n\n**Jon Schlinkert**\n\n* [GitHub Profile](https://github.com/jonschlinkert)\n* [Twitter Profile](https://twitter.com/jonschlinkert)\n* [LinkedIn Profile](https://linkedin.com/in/jonschlinkert)\n\n### License\n\nCopyright © 2019, [Jon Schlinkert](https://github.com/jonschlinkert).\nReleased under the [MIT License](LICENSE).\n\n***\n\n_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.8.0, on March 27, 2019._/index.js\u000e,/*!\n * is-glob <https://github.com/jonschlinkert/is-glob>\n *\n * Copyright (c) 2014-2017, Jon Schlinkert.\n * Released under the MIT License.\n */\n\nvar isExtglob = require('is-extglob');\nvar chars = { '{': '}', '(': ')', '[': ']'};\nvar strictCheck = function(str) {\n  if (str[0] === '!') {\n    return true;\n  }\n  var index = 0;\n  var pipeIndex = -2;\n  var closeSquareIndex = -2;\n  var closeCurlyIndex = -2;\n  var closeParenIndex = -2;\n  var backSlashIndex = -2;\n  while (index < str.length) {\n    if (str[index] === '*') {\n      return true;\n    }\n\n    if (str[index + 1] === '?' && /[\\].+)]/.test(str[index])) {\n      return true;\n    }\n\n    if (closeSquareIndex !== -1 && str[index] === '[' && str[index + 1] !== ']') {\n      if (closeSquareIndex < index) {\n        closeSquareIndex = str.indexOf(']', index);\n      }\n      if (closeSquareIndex > index) {\n        if (backSlashIndex === -1 || backSlashIndex > closeSquareIndex) {\n          return true;\n        }\n        backSlashIndex = str.indexOf('\\\\', index);\n        if (backSlashIndex === -1 || backSlashIndex > closeSquareIndex) {\n          return true;\n        }\n      }\n    }\n\n    if (closeCurlyIndex !== -1 && str[index] === '{' && str[index + 1] !== '}') {\n      closeCurlyIndex = str.indexOf('}', index);\n      if (closeCurlyIndex > index) {\n        backSlashIndex = str.indexOf('\\\\', index);\n        if (backSlashIndex === -1 || backSlashIndex > closeCurlyIndex) {\n          return true;\n        }\n      }\n    }\n\n    if (closeParenIndex !== -1 && str[index] === '(' && str[index + 1] === '?' && /[:!=]/.test(str[index + 2]) && str[index + 3] !== ')') {\n      closeParenIndex = str.indexOf(')', index);\n      if (closeParenIndex > index) {\n        backSlashIndex = str.indexOf('\\\\', index);\n        if (backSlashIndex === -1 || backSlashIndex > closeParenIndex) {\n          return true;\n        }\n      }\n    }\n\n    if (pipeIndex !== -1 && str[index] === '(' && str[index + 1] !== '|') {\n      if (pipeIndex < index) {\n        pipeIndex = str.indexOf('|', index);\n      }\n      if (pipeIndex !== -1 && str[pipeIndex + 1] !== ')') {\n        closeParenIndex = str.indexOf(')', pipeIndex);\n        if (closeParenIndex > pipeIndex) {\n          backSlashIndex = str.indexOf('\\\\', pipeIndex);\n          if (backSlashIndex === -1 || backSlashIndex > closeParenIndex) {\n            return true;\n          }\n        }\n      }\n    }\n\n    if (str[index] === '\\\\') {\n      var open = str[index + 1];\n      index += 2;\n      var close = chars[open];\n\n      if (close) {\n        var n = str.indexOf(close, index);\n        if (n !== -1) {\n          index = n + 1;\n        }\n      }\n\n      if (str[index] === '!') {\n        return true;\n      }\n    } else {\n      index++;\n    }\n  }\n  return false;\n};\n\nvar relaxedCheck = function(str) {\n  if (str[0] === '!') {\n    return true;\n  }\n  var index = 0;\n  while (index < str.length) {\n    if (/[*?{}()[\\]]/.test(str[index])) {\n      return true;\n    }\n\n    if (str[index] === '\\\\') {\n      var open = str[index + 1];\n      index += 2;\n      var close = chars[open];\n\n      if (close) {\n        var n = str.indexOf(close, index);\n        if (n !== -1) {\n          index = n + 1;\n        }\n      }\n\n      if (str[index] === '!') {\n        return true;\n      }\n    } else {\n      index++;\n    }\n  }\n  return false;\n};\n\nmodule.exports = function isGlob(str, options) {\n  if (typeof str !== 'string' || str === '') {\n    return false;\n  }\n\n  if (isExtglob(str)) {\n    return true;\n  }\n\n  var check = strictCheck;\n\n  // optionally relax check\n  if (options && options.strict === false) {\n    check = relaxedCheck;\n  }\n\n  return check(str);\n};\n/LICENSE\u0004@The MIT License (MIT)\n\nCopyright (c) 2014-2017, Jon Schlinkert.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n/package.json\u0006{\n  \"name\": \"is-glob\",\n  \"description\": \"Returns `true` if the given string looks like a glob pattern or an extglob pattern. This makes it easy to create code that only uses external modules like node-glob when necessary, resulting in much faster code execution and initialization time, and a better user experience.\",\n  \"version\": \"4.0.3\",\n  \"homepage\": \"https://github.com/micromatch/is-glob\",\n  \"author\": \"Jon Schlinkert (https://github.com/jonschlinkert)\",\n  \"contributors\": [\n    \"Brian Woodward (https://twitter.com/doowb)\",\n    \"Daniel Perez (https://tuvistavie.com)\",\n    \"Jon Schlinkert (http://twitter.com/jonschlinkert)\"\n  ],\n  \"repository\": \"micromatch/is-glob\",\n  \"bugs\": {\n    \"url\": \"https://github.com/micromatch/is-glob/issues\"\n  },\n  \"license\": \"MIT\",\n  \"files\": [\n    \"index.js\"\n  ],\n  \"main\": \"index.js\",\n  \"engines\": {\n    \"node\": \">=0.10.0\"\n  },\n  \"scripts\": {\n    \"test\": \"mocha && node benchmark.js\"\n  },\n  \"dependencies\": {\n    \"is-extglob\": \"^2.1.1\"\n  },\n  \"devDependencies\": {\n    \"gulp-format-md\": \"^0.1.10\",\n    \"mocha\": \"^3.0.2\"\n  },\n  \"keywords\": [\n    \"bash\",\n    \"braces\",\n    \"check\",\n    \"exec\",\n    \"expression\",\n    \"extglob\",\n    \"glob\",\n    \"globbing\",\n    \"globstar\",\n    \"is\",\n    \"match\",\n    \"matches\",\n    \"pattern\",\n    \"regex\",\n    \"regular\",\n    \"string\",\n    \"test\"\n  ],\n  \"verb\": {\n    \"layout\": \"default\",\n    \"plugins\": [\n      \"gulp-format-md\"\n    ],\n    \"related\": {\n      \"list\": [\n        \"assemble\",\n        \"base\",\n        \"update\",\n        \"verb\"\n      ]\n    },\n    \"reflinks\": [\n      \"assemble\",\n      \"bach\",\n      \"base\",\n      \"composer\",\n      \"gulp\",\n      \"has-glob\",\n      \"is-valid-glob\",\n      \"micromatch\",\n      \"npm\",\n      \"scaffold\",\n      \"verb\",\n      \"vinyl\"\n    ]\n  }\n}\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/aXMtZXh0Z2xvYkAyLjEuMQ==",
    "content": "/package.json\u0004{\n  \"name\": \"is-extglob\",\n  \"description\": \"Returns true if a string has an extglob.\",\n  \"version\": \"2.1.1\",\n  \"homepage\": \"https://github.com/jonschlinkert/is-extglob\",\n  \"author\": \"Jon Schlinkert (https://github.com/jonschlinkert)\",\n  \"repository\": \"jonschlinkert/is-extglob\",\n  \"bugs\": {\n    \"url\": \"https://github.com/jonschlinkert/is-extglob/issues\"\n  },\n  \"license\": \"MIT\",\n  \"files\": [\n    \"index.js\"\n  ],\n  \"main\": \"index.js\",\n  \"engines\": {\n    \"node\": \">=0.10.0\"\n  },\n  \"scripts\": {\n    \"test\": \"mocha\"\n  },\n  \"devDependencies\": {\n    \"gulp-format-md\": \"^0.1.10\",\n    \"mocha\": \"^3.0.2\"\n  },\n  \"keywords\": [\n    \"bash\",\n    \"braces\",\n    \"check\",\n    \"exec\",\n    \"expression\",\n    \"extglob\",\n    \"glob\",\n    \"globbing\",\n    \"globstar\",\n    \"is\",\n    \"match\",\n    \"matches\",\n    \"pattern\",\n    \"regex\",\n    \"regular\",\n    \"string\",\n    \"test\"\n  ],\n  \"verb\": {\n    \"toc\": false,\n    \"layout\": \"default\",\n    \"tasks\": [\n      \"readme\"\n    ],\n    \"plugins\": [\n      \"gulp-format-md\"\n    ],\n    \"related\": {\n      \"list\": [\n        \"has-glob\",\n        \"is-glob\",\n        \"micromatch\"\n      ]\n    },\n    \"reflinks\": [\n      \"verb\",\n      \"verb-generate-readme\"\n    ],\n    \"lint\": {\n      \"reflinks\": true\n    }\n  }\n}\n/LICENSE\u0004?The MIT License (MIT)\n\nCopyright (c) 2014-2016, Jon Schlinkert\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n/index.js\u0001/*!\n * is-extglob <https://github.com/jonschlinkert/is-extglob>\n *\n * Copyright (c) 2014-2016, Jon Schlinkert.\n * Licensed under the MIT License.\n */\n\nmodule.exports = function isExtglob(str) {\n  if (typeof str !== 'string' || str === '') {\n    return false;\n  }\n\n  var match;\n  while ((match = /(\\\\).|([@?!+*]\\(.*\\))/g.exec(str))) {\n    if (match[2]) return true;\n    str = str.slice(match.index + match[0].length);\n  }\n\n  return false;\n};\n/README.md\r# is-extglob [![NPM version](https://img.shields.io/npm/v/is-extglob.svg?style=flat)](https://www.npmjs.com/package/is-extglob) [![NPM downloads](https://img.shields.io/npm/dm/is-extglob.svg?style=flat)](https://npmjs.org/package/is-extglob) [![Build Status](https://img.shields.io/travis/jonschlinkert/is-extglob.svg?style=flat)](https://travis-ci.org/jonschlinkert/is-extglob)\n\n> Returns true if a string has an extglob.\n\n## Install\n\nInstall with [npm](https://www.npmjs.com/):\n\n```sh\n$ npm install --save is-extglob\n```\n\n## Usage\n\n```js\nvar isExtglob = require('is-extglob');\n```\n\n**True**\n\n```js\nisExtglob('?(abc)');\nisExtglob('@(abc)');\nisExtglob('!(abc)');\nisExtglob('*(abc)');\nisExtglob('+(abc)');\n```\n\n**False**\n\nEscaped extglobs:\n\n```js\nisExtglob('\\\\?(abc)');\nisExtglob('\\\\@(abc)');\nisExtglob('\\\\!(abc)');\nisExtglob('\\\\*(abc)');\nisExtglob('\\\\+(abc)');\n```\n\nEverything else...\n\n```js\nisExtglob('foo.js');\nisExtglob('!foo.js');\nisExtglob('*.js');\nisExtglob('**/abc.js');\nisExtglob('abc/*.js');\nisExtglob('abc/(aaa|bbb).js');\nisExtglob('abc/[a-z].js');\nisExtglob('abc/{a,b}.js');\nisExtglob('abc/?.js');\nisExtglob('abc.js');\nisExtglob('abc/def/ghi.js');\n```\n\n## History\n\n**v2.0**\n\nAdds support for escaping. Escaped exglobs no longer return true.\n\n## About\n\n### Related projects\n\n* [has-glob](https://www.npmjs.com/package/has-glob): Returns `true` if an array has a glob pattern. | [homepage](https://github.com/jonschlinkert/has-glob \"Returns `true` if an array has a glob pattern.\")\n* [is-glob](https://www.npmjs.com/package/is-glob): Returns `true` if the given string looks like a glob pattern or an extglob pattern… [more](https://github.com/jonschlinkert/is-glob) | [homepage](https://github.com/jonschlinkert/is-glob \"Returns `true` if the given string looks like a glob pattern or an extglob pattern. This makes it easy to create code that only uses external modules like node-glob when necessary, resulting in much faster code execution and initialization time, and a bet\")\n* [micromatch](https://www.npmjs.com/package/micromatch): Glob matching for javascript/node.js. A drop-in replacement and faster alternative to minimatch and multimatch. | [homepage](https://github.com/jonschlinkert/micromatch \"Glob matching for javascript/node.js. A drop-in replacement and faster alternative to minimatch and multimatch.\")\n\n### Contributing\n\nPull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).\n\n### Building docs\n\n_(This document was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme) (a [verb](https://github.com/verbose/verb) generator), please don't edit the readme directly. Any changes to the readme must be made in [.verb.md](.verb.md).)_\n\nTo generate the readme and API documentation with [verb](https://github.com/verbose/verb):\n\n```sh\n$ npm install -g verb verb-generate-readme && verb\n```\n\n### Running tests\n\nInstall dev dependencies:\n\n```sh\n$ npm install -d && npm test\n```\n\n### Author\n\n**Jon Schlinkert**\n\n* [github/jonschlinkert](https://github.com/jonschlinkert)\n* [twitter/jonschlinkert](http://twitter.com/jonschlinkert)\n\n### License\n\nCopyright © 2016, [Jon Schlinkert](https://github.com/jonschlinkert).\nReleased under the [MIT license](https://github.com/jonschlinkert/is-extglob/blob/master/LICENSE).\n\n***\n\n_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.1.31, on October 12, 2016._"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/aXMtZXh0ZW5kYWJsZUAwLjEuMQ==",
    "content": "/LICENSE\u0004;The MIT License (MIT)\n\nCopyright (c) 2015, Jon Schlinkert.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n/package.json\u0004k{\n  \"name\": \"is-extendable\",\n  \"description\": \"Returns true if a value is any of the object types: array, regexp, plain object, function or date. This is useful for determining if a value can be extended, e.g. \\\"can the value have keys?\\\"\",\n  \"version\": \"0.1.1\",\n  \"homepage\": \"https://github.com/jonschlinkert/is-extendable\",\n  \"author\": \"Jon Schlinkert (https://github.com/jonschlinkert)\",\n  \"repository\": \"jonschlinkert/is-extendable\",\n  \"bugs\": {\n    \"url\": \"https://github.com/jonschlinkert/is-extendable/issues\"\n  },\n  \"license\": \"MIT\",\n  \"files\": [\n    \"index.js\"\n  ],\n  \"main\": \"index.js\",\n  \"engines\": {\n    \"node\": \">=0.10.0\"\n  },\n  \"scripts\": {\n    \"test\": \"mocha\"\n  },\n  \"devDependencies\": {\n    \"mocha\": \"*\"\n  },\n  \"keywords\": [\n    \"array\",\n    \"assign\",\n    \"check\",\n    \"date\",\n    \"extend\",\n    \"extensible\",\n    \"function\",\n    \"is\",\n    \"object\",\n    \"regex\",\n    \"test\"\n  ],\n  \"verbiage\": {\n    \"related\": {\n      \"list\": [\n        \"isobject\",\n        \"is-plain-object\",\n        \"kind-of\",\n        \"is-extendable\",\n        \"is-equal-shallow\",\n        \"extend-shallow\",\n        \"assign-deep\"\n      ]\n    }\n  }\n}\n/index.js\u0001K/*!\n * is-extendable <https://github.com/jonschlinkert/is-extendable>\n *\n * Copyright (c) 2015, Jon Schlinkert.\n * Licensed under the MIT License.\n */\n\n'use strict';\n\nmodule.exports = function isExtendable(val) {\n  return typeof val !== 'undefined' && val !== null\n    && (typeof val === 'object' || typeof val === 'function');\n};\n/README.md\t# is-extendable [![NPM version](https://badge.fury.io/js/is-extendable.svg)](http://badge.fury.io/js/is-extendable)\n\n> Returns true if a value is any of the object types: array, regexp, plain object, function or date. This is useful for determining if a value can be extended, e.g. \"can the value have keys?\"\n\n## Install\n\nInstall with [npm](https://www.npmjs.com/)\n\n```sh\n$ npm i is-extendable --save\n```\n\n## Usage\n\n```js\nvar isExtendable = require('is-extendable');\n```\n\nReturns true if the value is any of the following:\n\n* `array`\n* `regexp`\n* `plain object`\n* `function`\n* `date`\n* `error`\n\n## Notes\n\nAll objects in JavaScript can have keys, but it's a pain to check for this, since we ether need to verify that the value is not `null` or `undefined` and:\n\n* the value is not a primitive, or\n* that the object is an `object`, `function`\n\nAlso note that an `extendable` object is not the same as an [extensible object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/isExtensible), which is one that (in es6) is not sealed, frozen, or marked as non-extensible using `preventExtensions`.\n\n## Related projects\n\n* [assign-deep](https://github.com/jonschlinkert/assign-deep): Deeply assign the enumerable properties of source objects to a destination object.\n* [extend-shallow](https://github.com/jonschlinkert/extend-shallow): Extend an object with the properties of additional objects. node.js/javascript util.\n* [isobject](https://github.com/jonschlinkert/isobject): Returns true if the value is an object and not an array or null.\n* [is-plain-object](https://github.com/jonschlinkert/is-plain-object): Returns true if an object was created by the `Object` constructor.\n* [is-equal-shallow](https://github.com/jonschlinkert/is-equal-shallow): Does a shallow comparison of two objects, returning false if the keys or values differ.\n* [kind-of](https://github.com/jonschlinkert/kind-of): Get the native type of a value.\n\n## Running tests\n\nInstall dev dependencies:\n\n```sh\n$ npm i -d && npm test\n```\n\n## Contributing\n\nPull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/is-extendable/issues/new)\n\n## Author\n\n**Jon Schlinkert**\n\n+ [github/jonschlinkert](https://github.com/jonschlinkert)\n+ [twitter/jonschlinkert](http://twitter.com/jonschlinkert)\n\n## License\n\nCopyright © 2015 Jon Schlinkert\nReleased under the MIT license.\n\n***\n\n_This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on July 04, 2015._"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/aXMtaW50ZXJhY3RpdmVAMi4wLjA=",
    "content": "/package.json\u0002{\n\t\"name\": \"is-interactive\",\n\t\"version\": \"2.0.0\",\n\t\"description\": \"Check if stdout or stderr is interactive\",\n\t\"license\": \"MIT\",\n\t\"repository\": \"sindresorhus/is-interactive\",\n\t\"funding\": \"https://github.com/sponsors/sindresorhus\",\n\t\"author\": {\n\t\t\"name\": \"Sindre Sorhus\",\n\t\t\"email\": \"sindresorhus@gmail.com\",\n\t\t\"url\": \"https://sindresorhus.com\"\n\t},\n\t\"type\": \"module\",\n\t\"exports\": \"./index.js\",\n\t\"engines\": {\n\t\t\"node\": \">=12\"\n\t},\n\t\"scripts\": {\n\t\t\"test\": \"xo && ava && tsd\"\n\t},\n\t\"files\": [\n\t\t\"index.js\",\n\t\t\"index.d.ts\"\n\t],\n\t\"keywords\": [\n\t\t\"interactive\",\n\t\t\"stdout\",\n\t\t\"stderr\",\n\t\t\"detect\",\n\t\t\"is\",\n\t\t\"terminal\",\n\t\t\"shell\",\n\t\t\"tty\"\n\t],\n\t\"devDependencies\": {\n\t\t\"@types/node\": \"^15.0.1\",\n\t\t\"ava\": \"^3.15.0\",\n\t\t\"tsd\": \"^0.14.0\",\n\t\t\"xo\": \"^0.39.1\"\n\t}\n}\n/index.jsĵexport default function isInteractive({stream = process.stdout} = {}) {\n\treturn Boolean(\n\t\tstream && stream.isTTY &&\n\t\tprocess.env.TERM !== 'dumb' &&\n\t\t!('CI' in process.env)\n\t);\n}\n/readme.md\b\u0016# is-interactive\n\n> Check if stdout or stderr is [interactive](https://unix.stackexchange.com/a/43389/7678)\n\nIt checks that the stream is [TTY](https://jameshfisher.com/2017/12/09/what-is-a-tty/), not a dumb terminal, and not running in a CI.\n\nThis can be useful to decide whether to present interactive UI or animations in the terminal.\n\n## Install\n\n```\n$ npm install is-interactive\n```\n\n## Usage\n\n```js\nimport isInteractive from 'is-interactive';\n\nisInteractive();\n//=> true\n```\n\n## API\n\n### isInteractive(options?)\n\n#### options\n\nType: `object`\n\n##### stream\n\nType: [`stream.Writable`](https://nodejs.org/api/stream.html#stream_class_stream_writable)\\\nDefault: [`process.stdout`](https://nodejs.org/api/process.html#process_process_stdout)\n\nThe stream to check.\n\n## FAQ\n\n#### Why are you not using [`ci-info`](https://github.com/watson/ci-info) for the CI check?\n\nIt's silly to have to detect individual CIs. They should identify themselves with the `CI` environment variable, and most do just that. A manually maintained list of detections will easily get out of date. And if a package using `ci-info` doesn't update to the latest version all the time, they will not support certain CIs. It also creates unpredictability as you might assume a CI is not supported and then suddenly it gets supported and you didn't account for that. In addition, some of the manual detections are loose and might cause false-positives which could create hard-to-debug bugs.\n\n#### Why does this even exist? It's just a few lines.\n\nIt's not about the number of lines, but rather discoverability and documentation. A lot of people wouldn't even know they need this. Feel free to copy-paste the code if you don't want the dependency. You might also want to read [this blog post](https://blog.sindresorhus.com/small-focused-modules-9238d977a92a).\n\n## Related\n\n- [is-unicode-supported](https://github.com/sindresorhus/is-unicode-supported) - Detect whether the terminal supports Unicode\n- [supports-color](https://github.com/chalk/supports-color) - Detect whether a terminal supports color\n/index.d.ts\u0002dexport interface Options {\n\t/**\n\tThe stream to check.\n\n\t@default process.stdout\n\t*/\n\treadonly stream?: NodeJS.WritableStream;\n}\n\n/**\nCheck if stdout or stderr is [interactive](https://unix.stackexchange.com/a/43389/7678).\n\nIt checks that the stream is [TTY](https://jameshfisher.com/2017/12/09/what-is-a-tty/), not a dumb terminal, and not running in a CI.\n\nThis can be useful to decide whether to present interactive UI or animations in the terminal.\n\n@example\n```\nimport isInteractive from 'is-interactive';\n\nisInteractive();\n//=> true\n```\n*/\nexport default function isInteractive(options?: Options): boolean;\n/license\u0004]MIT License\n\nCopyright (c) Sindre Sorhus <sindresorhus@gmail.com> (https://sindresorhus.com)\n\nPermission 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:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE 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.\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/aXMtbnVtYmVyQDcuMC4w",
    "content": "/package.json\u0006?{\n  \"name\": \"is-number\",\n  \"description\": \"Returns true if a number or string value is a finite number. Useful for regex matches, parsing, user input, etc.\",\n  \"version\": \"7.0.0\",\n  \"homepage\": \"https://github.com/jonschlinkert/is-number\",\n  \"author\": \"Jon Schlinkert (https://github.com/jonschlinkert)\",\n  \"contributors\": [\n    \"Jon Schlinkert (http://twitter.com/jonschlinkert)\",\n    \"Olsten Larck (https://i.am.charlike.online)\",\n    \"Rouven Weßling (www.rouvenwessling.de)\"\n  ],\n  \"repository\": \"jonschlinkert/is-number\",\n  \"bugs\": {\n    \"url\": \"https://github.com/jonschlinkert/is-number/issues\"\n  },\n  \"license\": \"MIT\",\n  \"files\": [\n    \"index.js\"\n  ],\n  \"main\": \"index.js\",\n  \"engines\": {\n    \"node\": \">=0.12.0\"\n  },\n  \"scripts\": {\n    \"test\": \"mocha\"\n  },\n  \"devDependencies\": {\n    \"ansi\": \"^0.3.1\",\n    \"benchmark\": \"^2.1.4\",\n    \"gulp-format-md\": \"^1.0.0\",\n    \"mocha\": \"^3.5.3\"\n  },\n  \"keywords\": [\n    \"cast\",\n    \"check\",\n    \"coerce\",\n    \"coercion\",\n    \"finite\",\n    \"integer\",\n    \"is\",\n    \"isnan\",\n    \"is-nan\",\n    \"is-num\",\n    \"is-number\",\n    \"isnumber\",\n    \"isfinite\",\n    \"istype\",\n    \"kind\",\n    \"math\",\n    \"nan\",\n    \"num\",\n    \"number\",\n    \"numeric\",\n    \"parseFloat\",\n    \"parseInt\",\n    \"test\",\n    \"type\",\n    \"typeof\",\n    \"value\"\n  ],\n  \"verb\": {\n    \"toc\": false,\n    \"layout\": \"default\",\n    \"tasks\": [\n      \"readme\"\n    ],\n    \"related\": {\n      \"list\": [\n        \"is-plain-object\",\n        \"is-primitive\",\n        \"isobject\",\n        \"kind-of\"\n      ]\n    },\n    \"plugins\": [\n      \"gulp-format-md\"\n    ],\n    \"lint\": {\n      \"reflinks\": true\n    }\n  }\n}\n/index.js\u0001/*!\n * is-number <https://github.com/jonschlinkert/is-number>\n *\n * Copyright (c) 2014-present, Jon Schlinkert.\n * Released under the MIT License.\n */\n\n'use strict';\n\nmodule.exports = function(num) {\n  if (typeof num === 'number') {\n    return num - num === 0;\n  }\n  if (typeof num === 'string' && num.trim() !== '') {\n    return Number.isFinite ? Number.isFinite(+num) : isFinite(+num);\n  }\n  return false;\n};\n/LICENSE\u0004CThe MIT License (MIT)\n\nCopyright (c) 2014-present, Jon Schlinkert.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n/README.md\u0019r# is-number [![NPM version](https://img.shields.io/npm/v/is-number.svg?style=flat)](https://www.npmjs.com/package/is-number) [![NPM monthly downloads](https://img.shields.io/npm/dm/is-number.svg?style=flat)](https://npmjs.org/package/is-number) [![NPM total downloads](https://img.shields.io/npm/dt/is-number.svg?style=flat)](https://npmjs.org/package/is-number) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/is-number.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/is-number)\n\n> Returns true if the value is a finite number.\n\nPlease consider following this project's author, [Jon Schlinkert](https://github.com/jonschlinkert), and consider starring the project to show your :heart: and support.\n\n## Install\n\nInstall with [npm](https://www.npmjs.com/):\n\n```sh\n$ npm install --save is-number\n```\n\n## Why is this needed?\n\nIn JavaScript, it's not always as straightforward as it should be to reliably check if a value is a number. It's common for devs to use `+`, `-`, or `Number()` to cast a string value to a number (for example, when values are returned from user input, regex matches, parsers, etc). But there are many non-intuitive edge cases that yield unexpected results:\n\n```js\nconsole.log(+[]); //=> 0\nconsole.log(+''); //=> 0\nconsole.log(+'   '); //=> 0\nconsole.log(typeof NaN); //=> 'number'\n```\n\nThis library offers a performant way to smooth out edge cases like these.\n\n## Usage\n\n```js\nconst isNumber = require('is-number');\n```\n\nSee the [tests](./test.js) for more examples.\n\n### true\n\n```js\nisNumber(5e3);               // true\nisNumber(0xff);              // true\nisNumber(-1.1);              // true\nisNumber(0);                 // true\nisNumber(1);                 // true\nisNumber(1.1);               // true\nisNumber(10);                // true\nisNumber(10.10);             // true\nisNumber(100);               // true\nisNumber('-1.1');            // true\nisNumber('0');               // true\nisNumber('012');             // true\nisNumber('0xff');            // true\nisNumber('1');               // true\nisNumber('1.1');             // true\nisNumber('10');              // true\nisNumber('10.10');           // true\nisNumber('100');             // true\nisNumber('5e3');             // true\nisNumber(parseInt('012'));   // true\nisNumber(parseFloat('012')); // true\n```\n\n### False\n\nEverything else is false, as you would expect:\n\n```js\nisNumber(Infinity);          // false\nisNumber(NaN);               // false\nisNumber(null);              // false\nisNumber(undefined);         // false\nisNumber('');                // false\nisNumber('   ');             // false\nisNumber('foo');             // false\nisNumber([1]);               // false\nisNumber([]);                // false\nisNumber(function () {});    // false\nisNumber({});                // false\n```\n\n## Release history\n\n### 7.0.0\n\n* Refactor. Now uses `.isFinite` if it exists.\n* Performance is about the same as v6.0 when the value is a string or number. But it's now 3x-4x faster when the value is not a string or number.\n\n### 6.0.0\n\n* Optimizations, thanks to @benaadams.\n\n### 5.0.0\n\n**Breaking changes**\n\n* removed support for `instanceof Number` and `instanceof String`\n\n## Benchmarks\n\nAs with all benchmarks, take these with a grain of salt. See the [benchmarks](./benchmark/index.js) for more detail.\n\n```\n# all\nv7.0 x 413,222 ops/sec ±2.02% (86 runs sampled)\nv6.0 x 111,061 ops/sec ±1.29% (85 runs sampled)\nparseFloat x 317,596 ops/sec ±1.36% (86 runs sampled)\nfastest is 'v7.0'\n\n# string\nv7.0 x 3,054,496 ops/sec ±1.05% (89 runs sampled)\nv6.0 x 2,957,781 ops/sec ±0.98% (88 runs sampled)\nparseFloat x 3,071,060 ops/sec ±1.13% (88 runs sampled)\nfastest is 'parseFloat,v7.0'\n\n# number\nv7.0 x 3,146,895 ops/sec ±0.89% (89 runs sampled)\nv6.0 x 3,214,038 ops/sec ±1.07% (89 runs sampled)\nparseFloat x 3,077,588 ops/sec ±1.07% (87 runs sampled)\nfastest is 'v6.0'\n```\n\n## About\n\n<details>\n<summary><strong>Contributing</strong></summary>\n\nPull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).\n\n</details>\n\n<details>\n<summary><strong>Running Tests</strong></summary>\n\nRunning and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:\n\n```sh\n$ npm install && npm test\n```\n\n</details>\n\n<details>\n<summary><strong>Building docs</strong></summary>\n\n_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_\n\nTo generate the readme, run the following command:\n\n```sh\n$ npm install -g verbose/verb#dev verb-generate-readme && verb\n```\n\n</details>\n\n### Related projects\n\nYou might also be interested in these projects:\n\n* [is-plain-object](https://www.npmjs.com/package/is-plain-object): Returns true if an object was created by the `Object` constructor. | [homepage](https://github.com/jonschlinkert/is-plain-object \"Returns true if an object was created by the `Object` constructor.\")\n* [is-primitive](https://www.npmjs.com/package/is-primitive): Returns `true` if the value is a primitive.  | [homepage](https://github.com/jonschlinkert/is-primitive \"Returns `true` if the value is a primitive. \")\n* [isobject](https://www.npmjs.com/package/isobject): Returns true if the value is an object and not an array or null. | [homepage](https://github.com/jonschlinkert/isobject \"Returns true if the value is an object and not an array or null.\")\n* [kind-of](https://www.npmjs.com/package/kind-of): Get the native type of a value. | [homepage](https://github.com/jonschlinkert/kind-of \"Get the native type of a value.\")\n\n### Contributors\n\n| **Commits** | **Contributor** | \n| --- | --- |\n| 49 | [jonschlinkert](https://github.com/jonschlinkert) |\n| 5 | [charlike-old](https://github.com/charlike-old) |\n| 1 | [benaadams](https://github.com/benaadams) |\n| 1 | [realityking](https://github.com/realityking) |\n\n### Author\n\n**Jon Schlinkert**\n\n* [LinkedIn Profile](https://linkedin.com/in/jonschlinkert)\n* [GitHub Profile](https://github.com/jonschlinkert)\n* [Twitter Profile](https://twitter.com/jonschlinkert)\n\n### License\n\nCopyright © 2018, [Jon Schlinkert](https://github.com/jonschlinkert).\nReleased under the [MIT License](LICENSE).\n\n***\n\n_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.6.0, on June 15, 2018._"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/aXMtc3RyZWFtQDMuMC4w",
    "content": "/package.json\u0003*{\n\t\"name\": \"is-stream\",\n\t\"version\": \"3.0.0\",\n\t\"description\": \"Check if something is a Node.js stream\",\n\t\"license\": \"MIT\",\n\t\"repository\": \"sindresorhus/is-stream\",\n\t\"funding\": \"https://github.com/sponsors/sindresorhus\",\n\t\"author\": {\n\t\t\"name\": \"Sindre Sorhus\",\n\t\t\"email\": \"sindresorhus@gmail.com\",\n\t\t\"url\": \"https://sindresorhus.com\"\n\t},\n\t\"type\": \"module\",\n\t\"exports\": \"./index.js\",\n\t\"engines\": {\n\t\t\"node\": \"^12.20.0 || ^14.13.1 || >=16.0.0\"\n\t},\n\t\"scripts\": {\n\t\t\"test\": \"xo && ava && tsd\"\n\t},\n\t\"files\": [\n\t\t\"index.js\",\n\t\t\"index.d.ts\"\n\t],\n\t\"keywords\": [\n\t\t\"stream\",\n\t\t\"type\",\n\t\t\"streams\",\n\t\t\"writable\",\n\t\t\"readable\",\n\t\t\"duplex\",\n\t\t\"transform\",\n\t\t\"check\",\n\t\t\"detect\",\n\t\t\"is\"\n\t],\n\t\"devDependencies\": {\n\t\t\"@types/node\": \"^16.4.13\",\n\t\t\"ava\": \"^3.15.0\",\n\t\t\"tempy\": \"^1.0.1\",\n\t\t\"tsd\": \"^0.17.0\",\n\t\t\"xo\": \"^0.44.0\"\n\t}\n}\n/license\u0004]MIT License\n\nCopyright (c) Sindre Sorhus <sindresorhus@gmail.com> (https://sindresorhus.com)\n\nPermission 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:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE 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.\n/index.d.ts\u0007import {\n\tStream,\n\tWritable as WritableStream,\n\tReadable as ReadableStream,\n\tDuplex as DuplexStream,\n\tTransform as TransformStream,\n} from 'node:stream';\n\n/**\n@returns Whether `stream` is a [`Stream`](https://nodejs.org/api/stream.html#stream_stream).\n\n@example\n```\nimport fs from 'node:fs';\nimport {isStream} from 'is-stream';\n\nisStream(fs.createReadStream('unicorn.png'));\n//=> true\n\nisStream({});\n//=> false\n```\n*/\nexport function isStream(stream: unknown): stream is Stream;\n\n/**\n@returns Whether `stream` is a [`stream.Writable`](https://nodejs.org/api/stream.html#stream_class_stream_writable).\n\n@example\n```\nimport fs from 'node:fs';\nimport {isWritableStream} from 'is-stream';\n\nisWritableStream(fs.createWriteStrem('unicorn.txt'));\n//=> true\n```\n*/\nexport function isWritableStream(stream: unknown): stream is WritableStream;\n\n/**\n@returns Whether `stream` is a [`stream.Readable`](https://nodejs.org/api/stream.html#stream_class_stream_readable).\n\n@example\n```\nimport fs from 'node:fs';\nimport {isReadableStream} from 'is-stream';\n\nisReadableStream(fs.createReadStream('unicorn.png'));\n//=> true\n```\n*/\nexport function isReadableStream(stream: unknown): stream is ReadableStream;\n\n/**\n@returns Whether `stream` is a [`stream.Duplex`](https://nodejs.org/api/stream.html#stream_class_stream_duplex).\n\n@example\n```\nimport {Duplex as DuplexStream} from 'node:stream';\nimport {isDuplexStream} from 'is-stream';\n\nisDuplexStream(new DuplexStream());\n//=> true\n```\n*/\nexport function isDuplexStream(stream: unknown): stream is DuplexStream;\n\n/**\n@returns Whether `stream` is a [`stream.Transform`](https://nodejs.org/api/stream.html#stream_class_stream_transform).\n\n@example\n```\nimport fs from 'node:fs';\nimport StringifyStream from 'streaming-json-stringify';\nimport {isTransformStream} from 'is-stream';\n\nisTransformStream(StringifyStream());\n//=> true\n```\n*/\nexport function isTransformStream(stream: unknown): stream is TransformStream;\n/readme.md\u0006N# is-stream\n\n> Check if something is a [Node.js stream](https://nodejs.org/api/stream.html)\n\n## Install\n\n```\n$ npm install is-stream\n```\n\n## Usage\n\n```js\nimport fs from 'node:fs';\nimport {isStream} from 'is-stream';\n\nisStream(fs.createReadStream('unicorn.png'));\n//=> true\n\nisStream({});\n//=> false\n```\n\n## API\n\n### isStream(stream)\n\nReturns a `boolean` for whether it's a [`Stream`](https://nodejs.org/api/stream.html#stream_stream).\n\n#### isWritableStream(stream)\n\nReturns a `boolean` for whether it's a [`stream.Writable`](https://nodejs.org/api/stream.html#stream_class_stream_writable).\n\n#### isReadableStream(stream)\n\nReturns a `boolean` for whether it's a [`stream.Readable`](https://nodejs.org/api/stream.html#stream_class_stream_readable).\n\n#### isDuplexStream(stream)\n\nReturns a `boolean` for whether it's a [`stream.Duplex`](https://nodejs.org/api/stream.html#stream_class_stream_duplex).\n\n#### isTransformStream(stream)\n\nReturns a `boolean` for whether it's a [`stream.Transform`](https://nodejs.org/api/stream.html#stream_class_stream_transform).\n\n## Related\n\n- [is-file-stream](https://github.com/jamestalmage/is-file-stream) - Detect if a stream is a file stream\n\n---\n\n<div align=\"center\">\n\t<b>\n\t\t<a href=\"https://tidelift.com/subscription/pkg/npm-is-stream?utm_source=npm-is-stream&utm_medium=referral&utm_campaign=readme\">Get professional support for this package with a Tidelift subscription</a>\n\t</b>\n\t<br>\n\t<sub>\n\t\tTidelift helps make open source sustainable for maintainers while giving companies<br>assurances about security, maintenance, and licensing for their dependencies.\n\t</sub>\n</div>\n/index.js\u0002export function isStream(stream) {\n\treturn stream !== null\n\t\t&& typeof stream === 'object'\n\t\t&& typeof stream.pipe === 'function';\n}\n\nexport function isWritableStream(stream) {\n\treturn isStream(stream)\n\t\t&& stream.writable !== false\n\t\t&& typeof stream._write === 'function'\n\t\t&& typeof stream._writableState === 'object';\n}\n\nexport function isReadableStream(stream) {\n\treturn isStream(stream)\n\t\t&& stream.readable !== false\n\t\t&& typeof stream._read === 'function'\n\t\t&& typeof stream._readableState === 'object';\n}\n\nexport function isDuplexStream(stream) {\n\treturn isWritableStream(stream)\n\t\t&& isReadableStream(stream);\n}\n\nexport function isTransformStream(stream) {\n\treturn isDuplexStream(stream)\n\t\t&& typeof stream._transform === 'function';\n}\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/aXMtdW5pY29kZS1zdXBwb3J0ZWRAMS4zLjA=",
    "content": "/license\u0004]MIT License\n\nCopyright (c) Sindre Sorhus <sindresorhus@gmail.com> (https://sindresorhus.com)\n\nPermission 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:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE 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.\n/readme.md\u0004c# is-unicode-supported\n\n> Detect whether the terminal supports Unicode\n\nThis can be useful to decide whether to use Unicode characters or fallback ASCII characters in command-line output.\n\nNote that the check is quite naive. It just assumes all non-Windows terminals support Unicode and hard-codes which Windows terminals that do support Unicode. However, I have been using this logic in some popular packages for years without problems.\n\n## Install\n\n```sh\nnpm install is-unicode-supported\n```\n\n## Usage\n\n```js\nimport isUnicodeSupported from 'is-unicode-supported';\n\nisUnicodeSupported();\n//=> true\n```\n\n## API\n\n### isUnicodeSupported()\n\nReturns a `boolean` for whether the terminal supports Unicode.\n\n## Related\n\n- [is-interactive](https://github.com/sindresorhus/is-interactive) - Check if stdout or stderr is interactive\n- [supports-color](https://github.com/chalk/supports-color) - Detect whether a terminal supports color\n- [figures](https://github.com/sindresorhus/figures) - Unicode symbols with Windows fallbacks\n- [log-symbols](https://github.com/sindresorhus/log-symbols) - Colored symbols for various log levels\n/index.js\u0002import process from 'node:process';\n\nexport default function isUnicodeSupported() {\n\tif (process.platform !== 'win32') {\n\t\treturn process.env.TERM !== 'linux'; // Linux console (kernel)\n\t}\n\n\treturn Boolean(process.env.CI)\n\t\t|| Boolean(process.env.WT_SESSION) // Windows Terminal\n\t\t|| Boolean(process.env.TERMINUS_SUBLIME) // Terminus (<0.2.27)\n\t\t|| process.env.ConEmuTask === '{cmd::Cmder}' // ConEmu and cmder\n\t\t|| process.env.TERM_PROGRAM === 'Terminus-Sublime'\n\t\t|| process.env.TERM_PROGRAM === 'vscode'\n\t\t|| process.env.TERM === 'xterm-256color'\n\t\t|| process.env.TERM === 'alacritty'\n\t\t|| process.env.TERMINAL_EMULATOR === 'JetBrains-JediTerm';\n}\n/package.json\u0003\u000b{\n\t\"name\": \"is-unicode-supported\",\n\t\"version\": \"1.3.0\",\n\t\"description\": \"Detect whether the terminal supports Unicode\",\n\t\"license\": \"MIT\",\n\t\"repository\": \"sindresorhus/is-unicode-supported\",\n\t\"funding\": \"https://github.com/sponsors/sindresorhus\",\n\t\"author\": {\n\t\t\"name\": \"Sindre Sorhus\",\n\t\t\"email\": \"sindresorhus@gmail.com\",\n\t\t\"url\": \"https://sindresorhus.com\"\n\t},\n\t\"type\": \"module\",\n\t\"exports\": \"./index.js\",\n\t\"engines\": {\n\t\t\"node\": \">=12\"\n\t},\n\t\"scripts\": {\n\t\t\"test\": \"xo && ava && tsd\"\n\t},\n\t\"files\": [\n\t\t\"index.js\",\n\t\t\"index.d.ts\"\n\t],\n\t\"keywords\": [\n\t\t\"terminal\",\n\t\t\"unicode\",\n\t\t\"detect\",\n\t\t\"utf8\",\n\t\t\"console\",\n\t\t\"shell\",\n\t\t\"support\",\n\t\t\"supports\",\n\t\t\"supported\",\n\t\t\"check\",\n\t\t\"detection\"\n\t],\n\t\"devDependencies\": {\n\t\t\"ava\": \"^4.0.1\",\n\t\t\"tsd\": \"^0.19.1\",\n\t\t\"xo\": \"^0.47.0\"\n\t}\n}\n/index.d.ts/**\nDetect whether the terminal supports Unicode.\n\n@example\n```\nimport isUnicodeSupported from 'is-unicode-supported';\n\nisUnicodeSupported();\n//=> true\n```\n*/\nexport default function isUnicodeSupported(): boolean;\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/aXNleGVAMi4wLjA=",
    "content": "/test/basic.js\u0013var t = require('tap')\nvar fs = require('fs')\nvar path = require('path')\nvar fixture = path.resolve(__dirname, 'fixtures')\nvar meow = fixture + '/meow.cat'\nvar mine = fixture + '/mine.cat'\nvar ours = fixture + '/ours.cat'\nvar fail = fixture + '/fail.false'\nvar noent = fixture + '/enoent.exe'\nvar mkdirp = require('mkdirp')\nvar rimraf = require('rimraf')\n\nvar isWindows = process.platform === 'win32'\nvar hasAccess = typeof fs.access === 'function'\nvar winSkip = isWindows && 'windows'\nvar accessSkip = !hasAccess && 'no fs.access function'\nvar hasPromise = typeof Promise === 'function'\nvar promiseSkip = !hasPromise && 'no global Promise'\n\nfunction reset () {\n  delete require.cache[require.resolve('../')]\n  return require('../')\n}\n\nt.test('setup fixtures', function (t) {\n  rimraf.sync(fixture)\n  mkdirp.sync(fixture)\n  fs.writeFileSync(meow, '#!/usr/bin/env cat\\nmeow\\n')\n  fs.chmodSync(meow, parseInt('0755', 8))\n  fs.writeFileSync(fail, '#!/usr/bin/env false\\n')\n  fs.chmodSync(fail, parseInt('0644', 8))\n  fs.writeFileSync(mine, '#!/usr/bin/env cat\\nmine\\n')\n  fs.chmodSync(mine, parseInt('0744', 8))\n  fs.writeFileSync(ours, '#!/usr/bin/env cat\\nours\\n')\n  fs.chmodSync(ours, parseInt('0754', 8))\n  t.end()\n})\n\nt.test('promise', { skip: promiseSkip }, function (t) {\n  var isexe = reset()\n  t.test('meow async', function (t) {\n    isexe(meow).then(function (is) {\n      t.ok(is)\n      t.end()\n    })\n  })\n  t.test('fail async', function (t) {\n    isexe(fail).then(function (is) {\n      t.notOk(is)\n      t.end()\n    })\n  })\n  t.test('noent async', function (t) {\n    isexe(noent).catch(function (er) {\n      t.ok(er)\n      t.end()\n    })\n  })\n  t.test('noent ignore async', function (t) {\n    isexe(noent, { ignoreErrors: true }).then(function (is) {\n      t.notOk(is)\n      t.end()\n    })\n  })\n  t.end()\n})\n\nt.test('no promise', function (t) {\n  global.Promise = null\n  var isexe = reset()\n  t.throws('try to meow a promise', function () {\n    isexe(meow)\n  })\n  t.end()\n})\n\nt.test('access', { skip: accessSkip || winSkip }, function (t) {\n  runTest(t)\n})\n\nt.test('mode', { skip: winSkip }, function (t) {\n  delete fs.access\n  delete fs.accessSync\n  var isexe = reset()\n  t.ok(isexe.sync(ours, { uid: 0, gid: 0 }))\n  t.ok(isexe.sync(mine, { uid: 0, gid: 0 }))\n  runTest(t)\n})\n\nt.test('windows', function (t) {\n  global.TESTING_WINDOWS = true\n  var pathExt = '.EXE;.CAT;.CMD;.COM'\n  t.test('pathExt option', function (t) {\n    runTest(t, { pathExt: '.EXE;.CAT;.CMD;.COM' })\n  })\n  t.test('pathExt env', function (t) {\n    process.env.PATHEXT = pathExt\n    runTest(t)\n  })\n  t.test('no pathExt', function (t) {\n    // with a pathExt of '', any filename is fine.\n    // so the \"fail\" one would still pass.\n    runTest(t, { pathExt: '', skipFail: true })\n  })\n  t.test('pathext with empty entry', function (t) {\n    // with a pathExt of '', any filename is fine.\n    // so the \"fail\" one would still pass.\n    runTest(t, { pathExt: ';' + pathExt, skipFail: true })\n  })\n  t.end()\n})\n\nt.test('cleanup', function (t) {\n  rimraf.sync(fixture)\n  t.end()\n})\n\nfunction runTest (t, options) {\n  var isexe = reset()\n\n  var optionsIgnore = Object.create(options || {})\n  optionsIgnore.ignoreErrors = true\n\n  if (!options || !options.skipFail) {\n    t.notOk(isexe.sync(fail, options))\n  }\n  t.notOk(isexe.sync(noent, optionsIgnore))\n  if (!options) {\n    t.ok(isexe.sync(meow))\n  } else {\n    t.ok(isexe.sync(meow, options))\n  }\n\n  t.ok(isexe.sync(mine, options))\n  t.ok(isexe.sync(ours, options))\n  t.throws(function () {\n    isexe.sync(noent, options)\n  })\n\n  t.test('meow async', function (t) {\n    if (!options) {\n      isexe(meow, function (er, is) {\n        if (er) {\n          throw er\n        }\n        t.ok(is)\n        t.end()\n      })\n    } else {\n      isexe(meow, options, function (er, is) {\n        if (er) {\n          throw er\n        }\n        t.ok(is)\n        t.end()\n      })\n    }\n  })\n\n  t.test('mine async', function (t) {\n    isexe(mine, options, function (er, is) {\n      if (er) {\n        throw er\n      }\n      t.ok(is)\n      t.end()\n    })\n  })\n\n  t.test('ours async', function (t) {\n    isexe(ours, options, function (er, is) {\n      if (er) {\n        throw er\n      }\n      t.ok(is)\n      t.end()\n    })\n  })\n\n  if (!options || !options.skipFail) {\n    t.test('fail async', function (t) {\n      isexe(fail, options, function (er, is) {\n        if (er) {\n          throw er\n        }\n        t.notOk(is)\n        t.end()\n      })\n    })\n  }\n\n  t.test('noent async', function (t) {\n    isexe(noent, options, function (er, is) {\n      t.ok(er)\n      t.notOk(is)\n      t.end()\n    })\n  })\n\n  t.test('noent ignore async', function (t) {\n    isexe(noent, optionsIgnore, function (er, is) {\n      if (er) {\n        throw er\n      }\n      t.notOk(is)\n      t.end()\n    })\n  })\n\n  t.test('directory is not executable', function (t) {\n    isexe(__dirname, options, function (er, is) {\n      if (er) {\n        throw er\n      }\n      t.notOk(is)\n      t.end()\n    })\n  })\n\n  t.end()\n}\n/mode.js\u0003module.exports = isexe\nisexe.sync = sync\n\nvar fs = require('fs')\n\nfunction isexe (path, options, cb) {\n  fs.stat(path, function (er, stat) {\n    cb(er, er ? false : checkStat(stat, options))\n  })\n}\n\nfunction sync (path, options) {\n  return checkStat(fs.statSync(path), options)\n}\n\nfunction checkStat (stat, options) {\n  return stat.isFile() && checkMode(stat, options)\n}\n\nfunction checkMode (stat, options) {\n  var mod = stat.mode\n  var uid = stat.uid\n  var gid = stat.gid\n\n  var myUid = options.uid !== undefined ?\n    options.uid : process.getuid && process.getuid()\n  var myGid = options.gid !== undefined ?\n    options.gid : process.getgid && process.getgid()\n\n  var u = parseInt('100', 8)\n  var g = parseInt('010', 8)\n  var o = parseInt('001', 8)\n  var ug = u | g\n\n  var ret = (mod & o) ||\n    (mod & g) && gid === myGid ||\n    (mod & u) && uid === myUid ||\n    (mod & ug) && myUid === 0\n\n  return ret\n}\n/index.js\u0004var fs = require('fs')\nvar core\nif (process.platform === 'win32' || global.TESTING_WINDOWS) {\n  core = require('./windows.js')\n} else {\n  core = require('./mode.js')\n}\n\nmodule.exports = isexe\nisexe.sync = sync\n\nfunction isexe (path, options, cb) {\n  if (typeof options === 'function') {\n    cb = options\n    options = {}\n  }\n\n  if (!cb) {\n    if (typeof Promise !== 'function') {\n      throw new TypeError('callback not provided')\n    }\n\n    return new Promise(function (resolve, reject) {\n      isexe(path, options || {}, function (er, is) {\n        if (er) {\n          reject(er)\n        } else {\n          resolve(is)\n        }\n      })\n    })\n  }\n\n  core(path, options || {}, function (er, is) {\n    // ignore EACCES because that just means we aren't allowed to run it\n    if (er) {\n      if (er.code === 'EACCES' || options && options.ignoreErrors) {\n        er = null\n        is = false\n      }\n    }\n    cb(er, is)\n  })\n}\n\nfunction sync (path, options) {\n  // my kingdom for a filtered catch\n  try {\n    return core.sync(path, options || {})\n  } catch (er) {\n    if (options && options.ignoreErrors || er.code === 'EACCES') {\n      return false\n    } else {\n      throw er\n    }\n  }\n}\n/windows.js\u0003zmodule.exports = isexe\nisexe.sync = sync\n\nvar fs = require('fs')\n\nfunction checkPathExt (path, options) {\n  var pathext = options.pathExt !== undefined ?\n    options.pathExt : process.env.PATHEXT\n\n  if (!pathext) {\n    return true\n  }\n\n  pathext = pathext.split(';')\n  if (pathext.indexOf('') !== -1) {\n    return true\n  }\n  for (var i = 0; i < pathext.length; i++) {\n    var p = pathext[i].toLowerCase()\n    if (p && path.substr(-p.length).toLowerCase() === p) {\n      return true\n    }\n  }\n  return false\n}\n\nfunction checkStat (stat, path, options) {\n  if (!stat.isSymbolicLink() && !stat.isFile()) {\n    return false\n  }\n  return checkPathExt(path, options)\n}\n\nfunction isexe (path, options, cb) {\n  fs.stat(path, function (er, stat) {\n    cb(er, er ? false : checkStat(stat, path, options))\n  })\n}\n\nfunction sync (path, options) {\n  return checkStat(fs.statSync(path), path, options)\n}\n/README.md\u0005s# isexe\n\nMinimal module to check if a file is executable, and a normal file.\n\nUses `fs.stat` and tests against the `PATHEXT` environment variable on\nWindows.\n\n## USAGE\n\n```javascript\nvar isexe = require('isexe')\nisexe('some-file-name', function (err, isExe) {\n  if (err) {\n    console.error('probably file does not exist or something', err)\n  } else if (isExe) {\n    console.error('this thing can be run')\n  } else {\n    console.error('cannot be run')\n  }\n})\n\n// same thing but synchronous, throws errors\nvar isExe = isexe.sync('some-file-name')\n\n// treat errors as just \"not executable\"\nisexe('maybe-missing-file', { ignoreErrors: true }, callback)\nvar isExe = isexe.sync('maybe-missing-file', { ignoreErrors: true })\n```\n\n## API\n\n### `isexe(path, [options], [callback])`\n\nCheck if the path is executable.  If no callback provided, and a\nglobal `Promise` object is available, then a Promise will be returned.\n\nWill raise whatever errors may be raised by `fs.stat`, unless\n`options.ignoreErrors` is set to true.\n\n### `isexe.sync(path, [options])`\n\nSame as `isexe` but returns the value and throws any errors raised.\n\n### Options\n\n* `ignoreErrors` Treat all errors as \"no, this is not executable\", but\n  don't raise them.\n* `uid` Number to use as the user id\n* `gid` Number to use as the group id\n* `pathExt` List of path extensions to use instead of `PATHEXT`\n  environment variable on Windows.\n/LICENSE\u0002The ISC License\n\nCopyright (c) Isaac Z. Schlueter and Contributors\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted, provided that the above\ncopyright notice and this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\nWITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\nANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\nACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR\nIN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n/package.json\u0003\u0012{\n  \"name\": \"isexe\",\n  \"version\": \"2.0.0\",\n  \"description\": \"Minimal module to check if a file is executable.\",\n  \"main\": \"index.js\",\n  \"directories\": {\n    \"test\": \"test\"\n  },\n  \"devDependencies\": {\n    \"mkdirp\": \"^0.5.1\",\n    \"rimraf\": \"^2.5.0\",\n    \"tap\": \"^10.3.0\"\n  },\n  \"scripts\": {\n    \"test\": \"tap test/*.js --100\",\n    \"preversion\": \"npm test\",\n    \"postversion\": \"npm publish\",\n    \"postpublish\": \"git push origin --all; git push origin --tags\"\n  },\n  \"author\": \"Isaac Z. Schlueter <i@izs.me> (http://blog.izs.me/)\",\n  \"license\": \"ISC\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/isaacs/isexe.git\"\n  },\n  \"keywords\": [],\n  \"bugs\": {\n    \"url\": \"https://github.com/isaacs/isexe/issues\"\n  },\n  \"homepage\": \"https://github.com/isaacs/isexe#readme\"\n}\n/.npmignore\u0017.nyc_output/\ncoverage/\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/anMtdG9rZW5zQDQuMC4w",
    "content": "/LICENSE\u0004OThe MIT License (MIT)\n\nCopyright (c) 2014, 2015, 2016, 2017, 2018 Simon Lydell\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n/CHANGELOG.md\u0011### Version 4.0.0 (2018-01-28) ###\n\n- Added: Support for ES2018. The only change needed was recognizing the `s`\n  regex flag.\n- Changed: _All_ tokens returned by the `matchToToken` function now have a\n  `closed` property. It is set to `undefined` for the tokens where “closed”\n  doesn’t make sense. This means that all tokens objects have the same shape,\n  which might improve performance.\n\nThese are the breaking changes:\n\n- `'/a/s'.match(jsTokens)` no longer returns `['/', 'a', '/', 's']`, but\n  `['/a/s']`. (There are of course other variations of this.)\n- Code that rely on some token objects not having the `closed` property could\n  now behave differently.\n\n\n### Version 3.0.2 (2017-06-28) ###\n\n- No code changes. Just updates to the readme.\n\n\n### Version 3.0.1 (2017-01-30) ###\n\n- Fixed: ES2015 unicode escapes with more than 6 hex digits are now matched\n  correctly.\n\n\n### Version 3.0.0 (2017-01-11) ###\n\nThis release contains one breaking change, that should [improve performance in\nV8][v8-perf]:\n\n> So how can you, as a JavaScript developer, ensure that your RegExps are fast?\n> If you are not interested in hooking into RegExp internals, make sure that\n> neither the RegExp instance, nor its prototype is modified in order to get the\n> best performance:\n>\n> ```js\n> var re = /./g;\n> re.exec('');  // Fast path.\n> re.new_property = 'slow';\n> ```\n\nThis module used to export a single regex, with `.matchToToken` bolted\non, just like in the above example. This release changes the exports of\nthe module to avoid this issue.\n\nBefore:\n\n```js\nimport jsTokens from \"js-tokens\"\n// or:\nvar jsTokens = require(\"js-tokens\")\nvar matchToToken = jsTokens.matchToToken\n```\n\nAfter:\n\n```js\nimport jsTokens, {matchToToken} from \"js-tokens\"\n// or:\nvar jsTokens = require(\"js-tokens\").default\nvar matchToToken = require(\"js-tokens\").matchToToken\n```\n\n[v8-perf]: http://v8project.blogspot.se/2017/01/speeding-up-v8-regular-expressions.html\n\n\n### Version 2.0.0 (2016-06-19) ###\n\n- Added: Support for ES2016. In other words, support for the `**` exponentiation\n  operator.\n\nThese are the breaking changes:\n\n- `'**'.match(jsTokens)` no longer returns `['*', '*']`, but `['**']`.\n- `'**='.match(jsTokens)` no longer returns `['*', '*=']`, but `['**=']`.\n\n\n### Version 1.0.3 (2016-03-27) ###\n\n- Improved: Made the regex ever so slightly smaller.\n- Updated: The readme.\n\n\n### Version 1.0.2 (2015-10-18) ###\n\n- Improved: Limited npm package contents for a smaller download. Thanks to\n  @zertosh!\n\n\n### Version 1.0.1 (2015-06-20) ###\n\n- Fixed: Declared an undeclared variable.\n\n\n### Version 1.0.0 (2015-02-26) ###\n\n- Changed: Merged the 'operator' and 'punctuation' types into 'punctuator'. That\n  type is now equivalent to the Punctuator token in the ECMAScript\n  specification. (Backwards-incompatible change.)\n- Fixed: A `-` followed by a number is now correctly matched as a punctuator\n  followed by a number. It used to be matched as just a number, but there is no\n  such thing as negative number literals. (Possibly backwards-incompatible\n  change.)\n\n\n### Version 0.4.1 (2015-02-21) ###\n\n- Added: Support for the regex `u` flag.\n\n\n### Version 0.4.0 (2015-02-21) ###\n\n- Improved: `jsTokens.matchToToken` performance.\n- Added: Support for octal and binary number literals.\n- Added: Support for template strings.\n\n\n### Version 0.3.1 (2015-01-06) ###\n\n- Fixed: Support for unicode spaces. They used to be allowed in names (which is\n  very confusing), and some unicode newlines were wrongly allowed in strings and\n  regexes.\n\n\n### Version 0.3.0 (2014-12-19) ###\n\n- Changed: The `jsTokens.names` array has been replaced with the\n  `jsTokens.matchToToken` function. The capturing groups of `jsTokens` are no\n  longer part of the public API; instead use said function. See this [gist] for\n  an example. (Backwards-incompatible change.)\n- Changed: The empty string is now considered an “invalid” token, instead an\n  “empty” token (its own group). (Backwards-incompatible change.)\n- Removed: component support. (Backwards-incompatible change.)\n\n[gist]: https://gist.github.com/lydell/be49dbf80c382c473004\n\n\n### Version 0.2.0 (2014-06-19) ###\n\n- Changed: Match ES6 function arrows (`=>`) as an operator, instead of its own\n  category (“functionArrow”), for simplicity. (Backwards-incompatible change.)\n- Added: ES6 splats (`...`) are now matched as an operator (instead of three\n  punctuations). (Backwards-incompatible change.)\n\n\n### Version 0.1.0 (2014-03-08) ###\n\n- Initial release.\n/package.json\u0002{\n  \"name\": \"js-tokens\",\n  \"version\": \"4.0.0\",\n  \"author\": \"Simon Lydell\",\n  \"license\": \"MIT\",\n  \"description\": \"A regex that tokenizes JavaScript.\",\n  \"keywords\": [\n    \"JavaScript\",\n    \"js\",\n    \"token\",\n    \"tokenize\",\n    \"regex\"\n  ],\n  \"files\": [\n    \"index.js\"\n  ],\n  \"repository\": \"lydell/js-tokens\",\n  \"scripts\": {\n    \"test\": \"mocha --ui tdd\",\n    \"esprima-compare\": \"node esprima-compare ./index.js everything.js/es5.js\",\n    \"build\": \"node generate-index.js\",\n    \"dev\": \"npm run build && npm test\"\n  },\n  \"devDependencies\": {\n    \"coffeescript\": \"2.1.1\",\n    \"esprima\": \"4.0.0\",\n    \"everything.js\": \"1.0.3\",\n    \"mocha\": \"5.0.0\"\n  }\n}\n/README.md\u001cOverview [![Build Status](https://travis-ci.org/lydell/js-tokens.svg?branch=master)](https://travis-ci.org/lydell/js-tokens)\n========\n\nA regex that tokenizes JavaScript.\n\n```js\nvar jsTokens = require(\"js-tokens\").default\n\nvar jsString = \"var foo=opts.foo;\\n...\"\n\njsString.match(jsTokens)\n// [\"var\", \" \", \"foo\", \"=\", \"opts\", \".\", \"foo\", \";\", \"\\n\", ...]\n```\n\n\nInstallation\n============\n\n`npm install js-tokens`\n\n```js\nimport jsTokens from \"js-tokens\"\n// or:\nvar jsTokens = require(\"js-tokens\").default\n```\n\n\nUsage\n=====\n\n### `jsTokens` ###\n\nA regex with the `g` flag that matches JavaScript tokens.\n\nThe regex _always_ matches, even invalid JavaScript and the empty string.\n\nThe next match is always directly after the previous.\n\n### `var token = matchToToken(match)` ###\n\n```js\nimport {matchToToken} from \"js-tokens\"\n// or:\nvar matchToToken = require(\"js-tokens\").matchToToken\n```\n\nTakes a `match` returned by `jsTokens.exec(string)`, and returns a `{type:\nString, value: String}` object. The following types are available:\n\n- string\n- comment\n- regex\n- number\n- name\n- punctuator\n- whitespace\n- invalid\n\nMulti-line comments and strings also have a `closed` property indicating if the\ntoken was closed or not (see below).\n\nComments and strings both come in several flavors. To distinguish them, check if\nthe token starts with `//`, `/*`, `'`, `\"` or `` ` ``.\n\nNames are ECMAScript IdentifierNames, that is, including both identifiers and\nkeywords. You may use [is-keyword-js] to tell them apart.\n\nWhitespace includes both line terminators and other whitespace.\n\n[is-keyword-js]: https://github.com/crissdev/is-keyword-js\n\n\nECMAScript support\n==================\n\nThe intention is to always support the latest ECMAScript version whose feature\nset has been finalized.\n\nIf adding support for a newer version requires changes, a new version with a\nmajor verion bump will be released.\n\nCurrently, ECMAScript 2018 is supported.\n\n\nInvalid code handling\n=====================\n\nUnterminated strings are still matched as strings. JavaScript strings cannot\ncontain (unescaped) newlines, so unterminated strings simply end at the end of\nthe line. Unterminated template strings can contain unescaped newlines, though,\nso they go on to the end of input.\n\nUnterminated multi-line comments are also still matched as comments. They\nsimply go on to the end of the input.\n\nUnterminated regex literals are likely matched as division and whatever is\ninside the regex.\n\nInvalid ASCII characters have their own capturing group.\n\nInvalid non-ASCII characters are treated as names, to simplify the matching of\nnames (except unicode spaces which are treated as whitespace). Note: See also\nthe [ES2018](#es2018) section.\n\nRegex literals may contain invalid regex syntax. They are still matched as\nregex literals. They may also contain repeated regex flags, to keep the regex\nsimple.\n\nStrings may contain invalid escape sequences.\n\n\nLimitations\n===========\n\nTokenizing JavaScript using regexes—in fact, _one single regex_—won’t be\nperfect. But that’s not the point either.\n\nYou may compare jsTokens with [esprima] by using `esprima-compare.js`.\nSee `npm run esprima-compare`!\n\n[esprima]: http://esprima.org/\n\n### Template string interpolation ###\n\nTemplate strings are matched as single tokens, from the starting `` ` `` to the\nending `` ` ``, including interpolations (whose tokens are not matched\nindividually).\n\nMatching template string interpolations requires recursive balancing of `{` and\n`}`—something that JavaScript regexes cannot do. Only one level of nesting is\nsupported.\n\n### Division and regex literals collision ###\n\nConsider this example:\n\n```js\nvar g = 9.82\nvar number = bar / 2/g\n\nvar regex = / 2/g\n```\n\nA human can easily understand that in the `number` line we’re dealing with\ndivision, and in the `regex` line we’re dealing with a regex literal. How come?\nBecause humans can look at the whole code to put the `/` characters in context.\nA JavaScript regex cannot. It only sees forwards. (Well, ES2018 regexes can also\nlook backwards. See the [ES2018](#es2018) section).\n\nWhen the `jsTokens` regex scans throught the above, it will see the following\nat the end of both the `number` and `regex` rows:\n\n```js\n/ 2/g\n```\n\nIt is then impossible to know if that is a regex literal, or part of an\nexpression dealing with division.\n\nHere is a similar case:\n\n```js\nfoo /= 2/g\nfoo(/= 2/g)\n```\n\nThe first line divides the `foo` variable with `2/g`. The second line calls the\n`foo` function with the regex literal `/= 2/g`. Again, since `jsTokens` only\nsees forwards, it cannot tell the two cases apart.\n\nThere are some cases where we _can_ tell division and regex literals apart,\nthough.\n\nFirst off, we have the simple cases where there’s only one slash in the line:\n\n```js\nvar foo = 2/g\nfoo /= 2\n```\n\nRegex literals cannot contain newlines, so the above cases are correctly\nidentified as division. Things are only problematic when there are more than\none non-comment slash in a single line.\n\nSecondly, not every character is a valid regex flag.\n\n```js\nvar number = bar / 2/e\n```\n\nThe above example is also correctly identified as division, because `e` is not a\nvalid regex flag. I initially wanted to future-proof by allowing `[a-zA-Z]*`\n(any letter) as flags, but it is not worth it since it increases the amount of\nambigous cases. So only the standard `g`, `m`, `i`, `y` and `u` flags are\nallowed. This means that the above example will be identified as division as\nlong as you don’t rename the `e` variable to some permutation of `gmiyus` 1 to 6\ncharacters long.\n\nLastly, we can look _forward_ for information.\n\n- If the token following what looks like a regex literal is not valid after a\n  regex literal, but is valid in a division expression, then the regex literal\n  is treated as division instead. For example, a flagless regex cannot be\n  followed by a string, number or name, but all of those three can be the\n  denominator of a division.\n- Generally, if what looks like a regex literal is followed by an operator, the\n  regex literal is treated as division instead. This is because regexes are\n  seldomly used with operators (such as `+`, `*`, `&&` and `==`), but division\n  could likely be part of such an expression.\n\nPlease consult the regex source and the test cases for precise information on\nwhen regex or division is matched (should you need to know). In short, you\ncould sum it up as:\n\nIf the end of a statement looks like a regex literal (even if it isn’t), it\nwill be treated as one. Otherwise it should work as expected (if you write sane\ncode).\n\n### ES2018 ###\n\nES2018 added some nice regex improvements to the language.\n\n- [Unicode property escapes] should allow telling names and invalid non-ASCII\n  characters apart without blowing up the regex size.\n- [Lookbehind assertions] should allow matching telling division and regex\n  literals apart in more cases.\n- [Named capture groups] might simplify some things.\n\nThese things would be nice to do, but are not critical. They probably have to\nwait until the oldest maintained Node.js LTS release supports those features.\n\n[Unicode property escapes]: http://2ality.com/2017/07/regexp-unicode-property-escapes.html\n[Lookbehind assertions]: http://2ality.com/2017/05/regexp-lookbehind-assertions.html\n[Named capture groups]: http://2ality.com/2017/05/regexp-named-capture-groups.html\n\n\nLicense\n=======\n\n[MIT](LICENSE).\n/index.js\u0005// Copyright 2014, 2015, 2016, 2017, 2018 Simon Lydell\n// License: MIT. (See LICENSE.)\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n})\n\n// This regex comes from regex.coffee, and is inserted here by generate-index.js\n// (run `npm run build`).\nexports.default = /((['\"])(?:(?!\\2|\\\\).|\\\\(?:\\r\\n|[\\s\\S]))*(\\2)?|`(?:[^`\\\\$]|\\\\[\\s\\S]|\\$(?!\\{)|\\$\\{(?:[^{}]|\\{[^}]*\\}?)*\\}?)*(`)?)|(\\/\\/.*)|(\\/\\*(?:[^*]|\\*(?!\\/))*(\\*\\/)?)|(\\/(?!\\*)(?:\\[(?:(?![\\]\\\\]).|\\\\.)*\\]|(?![\\/\\]\\\\]).|\\\\.)+\\/(?:(?!\\s*(?:\\b|[\\u0080-\\uFFFF$\\\\'\"~({]|[+\\-!](?!=)|\\.?\\d))|[gmiyus]{1,6}\\b(?![\\u0080-\\uFFFF$\\\\]|\\s*(?:[+\\-*%&|^<>!=?({]|\\/(?![\\/*])))))|(0[xX][\\da-fA-F]+|0[oO][0-7]+|0[bB][01]+|(?:\\d*\\.\\d+|\\d+\\.?)(?:[eE][+-]?\\d+)?)|((?!\\d)(?:(?!\\s)[$\\w\\u0080-\\uFFFF]|\\\\u[\\da-fA-F]{4}|\\\\u\\{[\\da-fA-F]+\\})+)|(--|\\+\\+|&&|\\|\\||=>|\\.{3}|(?:[+\\-\\/%&|^]|\\*{1,2}|<{1,2}|>{1,3}|!=?|={1,2})=?|[?~.,:;[\\](){}])|(\\s+)|(^$|[\\s\\S])/g\n\nexports.matchToToken = function(match) {\n  var token = {type: \"invalid\", value: match[0], closed: undefined}\n       if (match[ 1]) token.type = \"string\" , token.closed = !!(match[3] || match[4])\n  else if (match[ 5]) token.type = \"comment\"\n  else if (match[ 6]) token.type = \"comment\", token.closed = !!match[7]\n  else if (match[ 8]) token.type = \"regex\"\n  else if (match[ 9]) token.type = \"number\"\n  else if (match[10]) token.type = \"name\"\n  else if (match[11]) token.type = \"punctuator\"\n  else if (match[12]) token.type = \"whitespace\"\n  return token\n}\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/anNlc2NAMi41LjI=",
    "content": "/package.json\u0005\u0010{\n  \"name\": \"jsesc\",\n  \"version\": \"2.5.2\",\n  \"description\": \"Given some data, jsesc returns the shortest possible stringified & ASCII-safe representation of that data.\",\n  \"homepage\": \"https://mths.be/jsesc\",\n  \"engines\": {\n    \"node\": \">=4\"\n  },\n  \"main\": \"jsesc.js\",\n  \"bin\": \"bin/jsesc\",\n  \"man\": \"man/jsesc.1\",\n  \"keywords\": [\n    \"buffer\",\n    \"escape\",\n    \"javascript\",\n    \"json\",\n    \"map\",\n    \"set\",\n    \"string\",\n    \"stringify\",\n    \"tool\"\n  ],\n  \"license\": \"MIT\",\n  \"author\": {\n    \"name\": \"Mathias Bynens\",\n    \"url\": \"https://mathiasbynens.be/\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/mathiasbynens/jsesc.git\"\n  },\n  \"bugs\": \"https://github.com/mathiasbynens/jsesc/issues\",\n  \"files\": [\n    \"LICENSE-MIT.txt\",\n    \"jsesc.js\",\n    \"bin/\",\n    \"man/\"\n  ],\n  \"scripts\": {\n    \"build\": \"grunt template\",\n    \"coveralls\": \"istanbul cover --verbose --dir 'coverage' 'tests/tests.js' && coveralls < coverage/lcov.info'\",\n    \"cover\": \"istanbul cover --report 'html' --verbose --dir 'coverage' 'tests/tests.js'\",\n    \"test\": \"mocha tests\"\n  },\n  \"devDependencies\": {\n    \"coveralls\": \"^2.11.6\",\n    \"grunt\": \"^0.4.5\",\n    \"grunt-template\": \"^0.2.3\",\n    \"istanbul\": \"^0.4.2\",\n    \"mocha\": \"*\",\n    \"regenerate\": \"^1.3.0\",\n    \"requirejs\": \"^2.1.22\"\n  }\n}\n/README.md8# jsesc [![Build status](https://travis-ci.org/mathiasbynens/jsesc.svg?branch=master)](https://travis-ci.org/mathiasbynens/jsesc) [![Code coverage status](https://coveralls.io/repos/mathiasbynens/jsesc/badge.svg)](https://coveralls.io/r/mathiasbynens/jsesc) [![Dependency status](https://gemnasium.com/mathiasbynens/jsesc.svg)](https://gemnasium.com/mathiasbynens/jsesc)\n\nGiven some data, _jsesc_ returns a stringified representation of that data. jsesc is similar to `JSON.stringify()` except:\n\n1. it outputs JavaScript instead of JSON [by default](#json), enabling support for data structures like ES6 maps and sets;\n2. it offers [many options](#api) to customize the output;\n3. its output is ASCII-safe [by default](#minimal), thanks to its use of [escape sequences](https://mathiasbynens.be/notes/javascript-escapes) where needed.\n\nFor any input, jsesc generates the shortest possible valid printable-ASCII-only output. [Here’s an online demo.](https://mothereff.in/js-escapes)\n\njsesc’s output can be used instead of `JSON.stringify`’s to avoid [mojibake](https://en.wikipedia.org/wiki/Mojibake) and other encoding issues, or even to [avoid errors](https://twitter.com/annevk/status/380000829643571200) when passing JSON-formatted data (which may contain U+2028 LINE SEPARATOR, U+2029 PARAGRAPH SEPARATOR, or [lone surrogates](https://esdiscuss.org/topic/code-points-vs-unicode-scalar-values#content-14)) to a JavaScript parser or an UTF-8 encoder.\n\n## Installation\n\nVia [npm](https://www.npmjs.com/):\n\n```bash\nnpm install jsesc\n```\n\nIn [Node.js](https://nodejs.org/):\n\n```js\nconst jsesc = require('jsesc');\n```\n\n## API\n\n### `jsesc(value, options)`\n\nThis function takes a value and returns an escaped version of the value where any characters that are not printable ASCII symbols are escaped using the shortest possible (but valid) [escape sequences for use in JavaScript strings](https://mathiasbynens.be/notes/javascript-escapes). The first supported value type is strings:\n\n```js\njsesc('Ich ♥ Bücher');\n// → 'Ich \\\\u2665 B\\\\xFCcher'\n\njsesc('foo 𝌆 bar');\n// → 'foo \\\\uD834\\\\uDF06 bar'\n```\n\nInstead of a string, the `value` can also be an array, an object, a map, a set, or a buffer. In such cases, `jsesc` returns a stringified version of the value where any characters that are not printable ASCII symbols are escaped in the same way.\n\n```js\n// Escaping an array\njsesc([\n  'Ich ♥ Bücher', 'foo 𝌆 bar'\n]);\n// → '[\\'Ich \\\\u2665 B\\\\xFCcher\\',\\'foo \\\\uD834\\\\uDF06 bar\\']'\n\n// Escaping an object\njsesc({\n  'Ich ♥ Bücher': 'foo 𝌆 bar'\n});\n// → '{\\'Ich \\\\u2665 B\\\\xFCcher\\':\\'foo \\\\uD834\\\\uDF06 bar\\'}'\n```\n\nThe optional `options` argument accepts an object with the following options:\n\n#### `quotes`\n\nThe default value for the `quotes` option is `'single'`. This means that any occurrences of `'` in the input string are escaped as `\\'`, so that the output can be used in a string literal wrapped in single quotes.\n\n```js\njsesc('`Lorem` ipsum \"dolor\" sit \\'amet\\' etc.');\n// → 'Lorem ipsum \"dolor\" sit \\\\\\'amet\\\\\\' etc.'\n\njsesc('`Lorem` ipsum \"dolor\" sit \\'amet\\' etc.', {\n  'quotes': 'single'\n});\n// → '`Lorem` ipsum \"dolor\" sit \\\\\\'amet\\\\\\' etc.'\n// → \"`Lorem` ipsum \\\"dolor\\\" sit \\\\'amet\\\\' etc.\"\n```\n\nIf you want to use the output as part of a string literal wrapped in double quotes, set the `quotes` option to `'double'`.\n\n```js\njsesc('`Lorem` ipsum \"dolor\" sit \\'amet\\' etc.', {\n  'quotes': 'double'\n});\n// → '`Lorem` ipsum \\\\\"dolor\\\\\" sit \\'amet\\' etc.'\n// → \"`Lorem` ipsum \\\\\\\"dolor\\\\\\\" sit 'amet' etc.\"\n```\n\nIf you want to use the output as part of a template literal (i.e. wrapped in backticks), set the `quotes` option to `'backtick'`.\n\n```js\njsesc('`Lorem` ipsum \"dolor\" sit \\'amet\\' etc.', {\n  'quotes': 'backtick'\n});\n// → '\\\\`Lorem\\\\` ipsum \"dolor\" sit \\'amet\\' etc.'\n// → \"\\\\`Lorem\\\\` ipsum \\\"dolor\\\" sit 'amet' etc.\"\n// → `\\\\\\`Lorem\\\\\\` ipsum \"dolor\" sit 'amet' etc.`\n```\n\nThis setting also affects the output for arrays and objects:\n\n```js\njsesc({ 'Ich ♥ Bücher': 'foo 𝌆 bar' }, {\n  'quotes': 'double'\n});\n// → '{\"Ich \\\\u2665 B\\\\xFCcher\":\"foo \\\\uD834\\\\uDF06 bar\"}'\n\njsesc([ 'Ich ♥ Bücher', 'foo 𝌆 bar' ], {\n  'quotes': 'double'\n});\n// → '[\"Ich \\\\u2665 B\\\\xFCcher\",\"foo \\\\uD834\\\\uDF06 bar\"]'\n```\n\n#### `numbers`\n\nThe default value for the `numbers` option is `'decimal'`. This means that any numeric values are represented using decimal integer literals. Other valid options are `binary`, `octal`, and `hexadecimal`, which result in binary integer literals, octal integer literals, and hexadecimal integer literals, respectively.\n\n```js\njsesc(42, {\n  'numbers': 'binary'\n});\n// → '0b101010'\n\njsesc(42, {\n  'numbers': 'octal'\n});\n// → '0o52'\n\njsesc(42, {\n  'numbers': 'decimal'\n});\n// → '42'\n\njsesc(42, {\n  'numbers': 'hexadecimal'\n});\n// → '0x2A'\n```\n\n#### `wrap`\n\nThe `wrap` option takes a boolean value (`true` or `false`), and defaults to `false` (disabled). When enabled, the output is a valid JavaScript string literal wrapped in quotes. The type of quotes can be specified through the `quotes` setting.\n\n```js\njsesc('Lorem ipsum \"dolor\" sit \\'amet\\' etc.', {\n  'quotes': 'single',\n  'wrap': true\n});\n// → '\\'Lorem ipsum \"dolor\" sit \\\\\\'amet\\\\\\' etc.\\''\n// → \"\\'Lorem ipsum \\\"dolor\\\" sit \\\\\\'amet\\\\\\' etc.\\'\"\n\njsesc('Lorem ipsum \"dolor\" sit \\'amet\\' etc.', {\n  'quotes': 'double',\n  'wrap': true\n});\n// → '\"Lorem ipsum \\\\\"dolor\\\\\" sit \\'amet\\' etc.\"'\n// → \"\\\"Lorem ipsum \\\\\\\"dolor\\\\\\\" sit \\'amet\\' etc.\\\"\"\n```\n\n#### `es6`\n\nThe `es6` option takes a boolean value (`true` or `false`), and defaults to `false` (disabled). When enabled, any astral Unicode symbols in the input are escaped using [ECMAScript 6 Unicode code point escape sequences](https://mathiasbynens.be/notes/javascript-escapes#unicode-code-point) instead of using separate escape sequences for each surrogate half. If backwards compatibility with ES5 environments is a concern, don’t enable this setting. If the `json` setting is enabled, the value for the `es6` setting is ignored (as if it was `false`).\n\n```js\n// By default, the `es6` option is disabled:\njsesc('foo 𝌆 bar 💩 baz');\n// → 'foo \\\\uD834\\\\uDF06 bar \\\\uD83D\\\\uDCA9 baz'\n\n// To explicitly disable it:\njsesc('foo 𝌆 bar 💩 baz', {\n  'es6': false\n});\n// → 'foo \\\\uD834\\\\uDF06 bar \\\\uD83D\\\\uDCA9 baz'\n\n// To enable it:\njsesc('foo 𝌆 bar 💩 baz', {\n  'es6': true\n});\n// → 'foo \\\\u{1D306} bar \\\\u{1F4A9} baz'\n```\n\n#### `escapeEverything`\n\nThe `escapeEverything` option takes a boolean value (`true` or `false`), and defaults to `false` (disabled). When enabled, all the symbols in the output are escaped — even printable ASCII symbols.\n\n```js\njsesc('lolwat\"foo\\'bar', {\n  'escapeEverything': true\n});\n// → '\\\\x6C\\\\x6F\\\\x6C\\\\x77\\\\x61\\\\x74\\\\\"\\\\x66\\\\x6F\\\\x6F\\\\\\'\\\\x62\\\\x61\\\\x72'\n// → \"\\\\x6C\\\\x6F\\\\x6C\\\\x77\\\\x61\\\\x74\\\\\\\"\\\\x66\\\\x6F\\\\x6F\\\\'\\\\x62\\\\x61\\\\x72\"\n```\n\nThis setting also affects the output for string literals within arrays and objects.\n\n#### `minimal`\n\nThe `minimal` option takes a boolean value (`true` or `false`), and defaults to `false` (disabled). When enabled, only a limited set of symbols in the output are escaped:\n\n* U+0000 `\\0`\n* U+0008 `\\b`\n* U+0009 `\\t`\n* U+000A `\\n`\n* U+000C `\\f`\n* U+000D `\\r`\n* U+005C `\\\\`\n* U+2028 `\\u2028`\n* U+2029 `\\u2029`\n* whatever symbol is being used for wrapping string literals (based on [the `quotes` option](#quotes))\n\nNote: with this option enabled, jsesc output is no longer guaranteed to be ASCII-safe.\n\n```js\njsesc('foo\\u2029bar\\nbaz©qux𝌆flops', {\n  'minimal': false\n});\n// → 'foo\\\\u2029bar\\\\nbaz©qux𝌆flops'\n```\n\n#### `isScriptContext`\n\nThe `isScriptContext` option takes a boolean value (`true` or `false`), and defaults to `false` (disabled). When enabled, occurrences of [`</script` and `</style`](https://mathiasbynens.be/notes/etago) in the output are escaped as `<\\/script` and `<\\/style`, and [`<!--`](https://mathiasbynens.be/notes/etago#comment-8) is escaped as `\\x3C!--` (or `\\u003C!--` when the `json` option is enabled). This setting is useful when jsesc’s output ends up as part of a `<script>` or `<style>` element in an HTML document.\n\n```js\njsesc('foo</script>bar', {\n  'isScriptContext': true\n});\n// → 'foo<\\\\/script>bar'\n```\n\n#### `compact`\n\nThe `compact` option takes a boolean value (`true` or `false`), and defaults to `true` (enabled). When enabled, the output for arrays and objects is as compact as possible; it’s not formatted nicely.\n\n```js\njsesc({ 'Ich ♥ Bücher': 'foo 𝌆 bar' }, {\n  'compact': true // this is the default\n});\n// → '{\\'Ich \\u2665 B\\xFCcher\\':\\'foo \\uD834\\uDF06 bar\\'}'\n\njsesc({ 'Ich ♥ Bücher': 'foo 𝌆 bar' }, {\n  'compact': false\n});\n// → '{\\n\\t\\'Ich \\u2665 B\\xFCcher\\': \\'foo \\uD834\\uDF06 bar\\'\\n}'\n\njsesc([ 'Ich ♥ Bücher', 'foo 𝌆 bar' ], {\n  'compact': false\n});\n// → '[\\n\\t\\'Ich \\u2665 B\\xFCcher\\',\\n\\t\\'foo \\uD834\\uDF06 bar\\'\\n]'\n```\n\nThis setting has no effect on the output for strings.\n\n#### `indent`\n\nThe `indent` option takes a string value, and defaults to `'\\t'`. When the `compact` setting is enabled (`true`), the value of the `indent` option is used to format the output for arrays and objects.\n\n```js\njsesc({ 'Ich ♥ Bücher': 'foo 𝌆 bar' }, {\n  'compact': false,\n  'indent': '\\t' // this is the default\n});\n// → '{\\n\\t\\'Ich \\u2665 B\\xFCcher\\': \\'foo \\uD834\\uDF06 bar\\'\\n}'\n\njsesc({ 'Ich ♥ Bücher': 'foo 𝌆 bar' }, {\n  'compact': false,\n  'indent': '  '\n});\n// → '{\\n  \\'Ich \\u2665 B\\xFCcher\\': \\'foo \\uD834\\uDF06 bar\\'\\n}'\n\njsesc([ 'Ich ♥ Bücher', 'foo 𝌆 bar' ], {\n  'compact': false,\n  'indent': '  '\n});\n// → '[\\n  \\'Ich \\u2665 B\\xFCcher\\',\\n\\  t\\'foo \\uD834\\uDF06 bar\\'\\n]'\n```\n\nThis setting has no effect on the output for strings.\n\n#### `indentLevel`\n\nThe `indentLevel` option takes a numeric value, and defaults to `0`. It represents the current indentation level, i.e. the number of times the value of [the `indent` option](#indent) is repeated.\n\n```js\njsesc(['a', 'b', 'c'], {\n  'compact': false,\n  'indentLevel': 1\n});\n// → '[\\n\\t\\t\\'a\\',\\n\\t\\t\\'b\\',\\n\\t\\t\\'c\\'\\n\\t]'\n\njsesc(['a', 'b', 'c'], {\n  'compact': false,\n  'indentLevel': 2\n});\n// → '[\\n\\t\\t\\t\\'a\\',\\n\\t\\t\\t\\'b\\',\\n\\t\\t\\t\\'c\\'\\n\\t\\t]'\n```\n\n#### `json`\n\nThe `json` option takes a boolean value (`true` or `false`), and defaults to `false` (disabled). When enabled, the output is valid JSON. [Hexadecimal character escape sequences](https://mathiasbynens.be/notes/javascript-escapes#hexadecimal) and [the `\\v` or `\\0` escape sequences](https://mathiasbynens.be/notes/javascript-escapes#single) are not used. Setting `json: true` implies `quotes: 'double', wrap: true, es6: false`, although these values can still be overridden if needed — but in such cases, the output won’t be valid JSON anymore.\n\n```js\njsesc('foo\\x00bar\\xFF\\uFFFDbaz', {\n  'json': true\n});\n// → '\"foo\\\\u0000bar\\\\u00FF\\\\uFFFDbaz\"'\n\njsesc({ 'foo\\x00bar\\xFF\\uFFFDbaz': 'foo\\x00bar\\xFF\\uFFFDbaz' }, {\n  'json': true\n});\n// → '{\"foo\\\\u0000bar\\\\u00FF\\\\uFFFDbaz\":\"foo\\\\u0000bar\\\\u00FF\\\\uFFFDbaz\"}'\n\njsesc([ 'foo\\x00bar\\xFF\\uFFFDbaz', 'foo\\x00bar\\xFF\\uFFFDbaz' ], {\n  'json': true\n});\n// → '[\"foo\\\\u0000bar\\\\u00FF\\\\uFFFDbaz\",\"foo\\\\u0000bar\\\\u00FF\\\\uFFFDbaz\"]'\n\n// Values that are acceptable in JSON but aren’t strings, arrays, or object\n// literals can’t be escaped, so they’ll just be preserved:\njsesc([ 'foo\\x00bar', [1, '©', { 'foo': true, 'qux': null }], 42 ], {\n  'json': true\n});\n// → '[\"foo\\\\u0000bar\",[1,\"\\\\u00A9\",{\"foo\":true,\"qux\":null}],42]'\n// Values that aren’t allowed in JSON are run through `JSON.stringify()`:\njsesc([ undefined, -Infinity ], {\n  'json': true\n});\n// → '[null,null]'\n```\n\n**Note:** Using this option on objects or arrays that contain non-string values relies on `JSON.stringify()`. For legacy environments like IE ≤ 7, use [a `JSON` polyfill](http://bestiejs.github.io/json3/).\n\n#### `lowercaseHex`\n\nThe `lowercaseHex` option takes a boolean value (`true` or `false`), and defaults to `false` (disabled). When enabled, any alphabetical hexadecimal digits in escape sequences as well as any hexadecimal integer literals (see [the `numbers` option](#numbers)) in the output are in lowercase.\n\n```js\njsesc('Ich ♥ Bücher', {\n  'lowercaseHex': true\n});\n// → 'Ich \\\\u2665 B\\\\xfccher'\n//                    ^^\n\njsesc(42, {\n  'numbers': 'hexadecimal',\n  'lowercaseHex': true\n});\n// → '0x2a'\n//      ^^\n```\n\n### `jsesc.version`\n\nA string representing the semantic version number.\n\n### Using the `jsesc` binary\n\nTo use the `jsesc` binary in your shell, simply install jsesc globally using npm:\n\n```bash\nnpm install -g jsesc\n```\n\nAfter that you’re able to escape strings from the command line:\n\n```bash\n$ jsesc 'föo ♥ bår 𝌆 baz'\nf\\xF6o \\u2665 b\\xE5r \\uD834\\uDF06 baz\n```\n\nTo escape arrays or objects containing string values, use the `-o`/`--object` option:\n\n```bash\n$ jsesc --object '{ \"föo\": \"♥\", \"bår\": \"𝌆 baz\" }'\n{'f\\xF6o':'\\u2665','b\\xE5r':'\\uD834\\uDF06 baz'}\n```\n\nTo prettify the output in such cases, use the `-p`/`--pretty` option:\n\n```bash\n$ jsesc --pretty '{ \"föo\": \"♥\", \"bår\": \"𝌆 baz\" }'\n{\n  'f\\xF6o': '\\u2665',\n  'b\\xE5r': '\\uD834\\uDF06 baz'\n}\n```\n\nFor valid JSON output, use the `-j`/`--json` option:\n\n```bash\n$ jsesc --json --pretty '{ \"föo\": \"♥\", \"bår\": \"𝌆 baz\" }'\n{\n  \"f\\u00F6o\": \"\\u2665\",\n  \"b\\u00E5r\": \"\\uD834\\uDF06 baz\"\n}\n```\n\nRead a local JSON file, escape any non-ASCII symbols, and save the result to a new file:\n\n```bash\n$ jsesc --json --object < data-raw.json > data-escaped.json\n```\n\nOr do the same with an online JSON file:\n\n```bash\n$ curl -sL \"http://git.io/aorKgQ\" | jsesc --json --object > data-escaped.json\n```\n\nSee `jsesc --help` for the full list of options.\n\n## Support\n\nAs of v2.0.0, jsesc supports Node.js v4+ only.\n\nOlder versions (up to jsesc v1.3.0) support Chrome 27, Firefox 3, Safari 4, Opera 10, IE 6, Node.js v6.0.0, Narwhal 0.3.2, RingoJS 0.8-0.11, PhantomJS 1.9.0, and Rhino 1.7RC4. **Note:** Using the `json` option on objects or arrays that contain non-string values relies on `JSON.parse()`. For legacy environments like IE ≤ 7, use [a `JSON` polyfill](https://bestiejs.github.io/json3/).\n\n## Author\n\n| [![twitter/mathias](https://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](https://twitter.com/mathias \"Follow @mathias on Twitter\") |\n|---|\n| [Mathias Bynens](https://mathiasbynens.be/) |\n\n## License\n\nThis library is available under the [MIT](https://mths.be/mit) license.\n/LICENSE-MIT.txt\u00045Copyright Mathias Bynens <https://mathiasbynens.be/>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n/jsesc.js 'use strict';\n\nconst object = {};\nconst hasOwnProperty = object.hasOwnProperty;\nconst forOwn = (object, callback) => {\n\tfor (const key in object) {\n\t\tif (hasOwnProperty.call(object, key)) {\n\t\t\tcallback(key, object[key]);\n\t\t}\n\t}\n};\n\nconst extend = (destination, source) => {\n\tif (!source) {\n\t\treturn destination;\n\t}\n\tforOwn(source, (key, value) => {\n\t\tdestination[key] = value;\n\t});\n\treturn destination;\n};\n\nconst forEach = (array, callback) => {\n\tconst length = array.length;\n\tlet index = -1;\n\twhile (++index < length) {\n\t\tcallback(array[index]);\n\t}\n};\n\nconst toString = object.toString;\nconst isArray = Array.isArray;\nconst isBuffer = Buffer.isBuffer;\nconst isObject = (value) => {\n\t// This is a very simple check, but it’s good enough for what we need.\n\treturn toString.call(value) == '[object Object]';\n};\nconst isString = (value) => {\n\treturn typeof value == 'string' ||\n\t\ttoString.call(value) == '[object String]';\n};\nconst isNumber = (value) => {\n\treturn typeof value == 'number' ||\n\t\ttoString.call(value) == '[object Number]';\n};\nconst isFunction = (value) => {\n\treturn typeof value == 'function';\n};\nconst isMap = (value) => {\n\treturn toString.call(value) == '[object Map]';\n};\nconst isSet = (value) => {\n\treturn toString.call(value) == '[object Set]';\n};\n\n/*--------------------------------------------------------------------------*/\n\n// https://mathiasbynens.be/notes/javascript-escapes#single\nconst singleEscapes = {\n\t'\"': '\\\\\"',\n\t'\\'': '\\\\\\'',\n\t'\\\\': '\\\\\\\\',\n\t'\\b': '\\\\b',\n\t'\\f': '\\\\f',\n\t'\\n': '\\\\n',\n\t'\\r': '\\\\r',\n\t'\\t': '\\\\t'\n\t// `\\v` is omitted intentionally, because in IE < 9, '\\v' == 'v'.\n\t// '\\v': '\\\\x0B'\n};\nconst regexSingleEscape = /[\"'\\\\\\b\\f\\n\\r\\t]/;\n\nconst regexDigit = /[0-9]/;\nconst regexWhitelist = /[ !#-&\\(-\\[\\]-_a-~]/;\n\nconst jsesc = (argument, options) => {\n\tconst increaseIndentation = () => {\n\t\toldIndent = indent;\n\t\t++options.indentLevel;\n\t\tindent = options.indent.repeat(options.indentLevel)\n\t};\n\t// Handle options\n\tconst defaults = {\n\t\t'escapeEverything': false,\n\t\t'minimal': false,\n\t\t'isScriptContext': false,\n\t\t'quotes': 'single',\n\t\t'wrap': false,\n\t\t'es6': false,\n\t\t'json': false,\n\t\t'compact': true,\n\t\t'lowercaseHex': false,\n\t\t'numbers': 'decimal',\n\t\t'indent': '\\t',\n\t\t'indentLevel': 0,\n\t\t'__inline1__': false,\n\t\t'__inline2__': false\n\t};\n\tconst json = options && options.json;\n\tif (json) {\n\t\tdefaults.quotes = 'double';\n\t\tdefaults.wrap = true;\n\t}\n\toptions = extend(defaults, options);\n\tif (\n\t\toptions.quotes != 'single' &&\n\t\toptions.quotes != 'double' &&\n\t\toptions.quotes != 'backtick'\n\t) {\n\t\toptions.quotes = 'single';\n\t}\n\tconst quote = options.quotes == 'double' ?\n\t\t'\"' :\n\t\t(options.quotes == 'backtick' ?\n\t\t\t'`' :\n\t\t\t'\\''\n\t\t);\n\tconst compact = options.compact;\n\tconst lowercaseHex = options.lowercaseHex;\n\tlet indent = options.indent.repeat(options.indentLevel);\n\tlet oldIndent = '';\n\tconst inline1 = options.__inline1__;\n\tconst inline2 = options.__inline2__;\n\tconst newLine = compact ? '' : '\\n';\n\tlet result;\n\tlet isEmpty = true;\n\tconst useBinNumbers = options.numbers == 'binary';\n\tconst useOctNumbers = options.numbers == 'octal';\n\tconst useDecNumbers = options.numbers == 'decimal';\n\tconst useHexNumbers = options.numbers == 'hexadecimal';\n\n\tif (json && argument && isFunction(argument.toJSON)) {\n\t\targument = argument.toJSON();\n\t}\n\n\tif (!isString(argument)) {\n\t\tif (isMap(argument)) {\n\t\t\tif (argument.size == 0) {\n\t\t\t\treturn 'new Map()';\n\t\t\t}\n\t\t\tif (!compact) {\n\t\t\t\toptions.__inline1__ = true;\n\t\t\t\toptions.__inline2__ = false;\n\t\t\t}\n\t\t\treturn 'new Map(' + jsesc(Array.from(argument), options) + ')';\n\t\t}\n\t\tif (isSet(argument)) {\n\t\t\tif (argument.size == 0) {\n\t\t\t\treturn 'new Set()';\n\t\t\t}\n\t\t\treturn 'new Set(' + jsesc(Array.from(argument), options) + ')';\n\t\t}\n\t\tif (isBuffer(argument)) {\n\t\t\tif (argument.length == 0) {\n\t\t\t\treturn 'Buffer.from([])';\n\t\t\t}\n\t\t\treturn 'Buffer.from(' + jsesc(Array.from(argument), options) + ')';\n\t\t}\n\t\tif (isArray(argument)) {\n\t\t\tresult = [];\n\t\t\toptions.wrap = true;\n\t\t\tif (inline1) {\n\t\t\t\toptions.__inline1__ = false;\n\t\t\t\toptions.__inline2__ = true;\n\t\t\t}\n\t\t\tif (!inline2) {\n\t\t\t\tincreaseIndentation();\n\t\t\t}\n\t\t\tforEach(argument, (value) => {\n\t\t\t\tisEmpty = false;\n\t\t\t\tif (inline2) {\n\t\t\t\t\toptions.__inline2__ = false;\n\t\t\t\t}\n\t\t\t\tresult.push(\n\t\t\t\t\t(compact || inline2 ? '' : indent) +\n\t\t\t\t\tjsesc(value, options)\n\t\t\t\t);\n\t\t\t});\n\t\t\tif (isEmpty) {\n\t\t\t\treturn '[]';\n\t\t\t}\n\t\t\tif (inline2) {\n\t\t\t\treturn '[' + result.join(', ') + ']';\n\t\t\t}\n\t\t\treturn '[' + newLine + result.join(',' + newLine) + newLine +\n\t\t\t\t(compact ? '' : oldIndent) + ']';\n\t\t} else if (isNumber(argument)) {\n\t\t\tif (json) {\n\t\t\t\t// Some number values (e.g. `Infinity`) cannot be represented in JSON.\n\t\t\t\treturn JSON.stringify(argument);\n\t\t\t}\n\t\t\tif (useDecNumbers) {\n\t\t\t\treturn String(argument);\n\t\t\t}\n\t\t\tif (useHexNumbers) {\n\t\t\t\tlet hexadecimal = argument.toString(16);\n\t\t\t\tif (!lowercaseHex) {\n\t\t\t\t\thexadecimal = hexadecimal.toUpperCase();\n\t\t\t\t}\n\t\t\t\treturn '0x' + hexadecimal;\n\t\t\t}\n\t\t\tif (useBinNumbers) {\n\t\t\t\treturn '0b' + argument.toString(2);\n\t\t\t}\n\t\t\tif (useOctNumbers) {\n\t\t\t\treturn '0o' + argument.toString(8);\n\t\t\t}\n\t\t} else if (!isObject(argument)) {\n\t\t\tif (json) {\n\t\t\t\t// For some values (e.g. `undefined`, `function` objects),\n\t\t\t\t// `JSON.stringify(value)` returns `undefined` (which isn’t valid\n\t\t\t\t// JSON) instead of `'null'`.\n\t\t\t\treturn JSON.stringify(argument) || 'null';\n\t\t\t}\n\t\t\treturn String(argument);\n\t\t} else { // it’s an object\n\t\t\tresult = [];\n\t\t\toptions.wrap = true;\n\t\t\tincreaseIndentation();\n\t\t\tforOwn(argument, (key, value) => {\n\t\t\t\tisEmpty = false;\n\t\t\t\tresult.push(\n\t\t\t\t\t(compact ? '' : indent) +\n\t\t\t\t\tjsesc(key, options) + ':' +\n\t\t\t\t\t(compact ? '' : ' ') +\n\t\t\t\t\tjsesc(value, options)\n\t\t\t\t);\n\t\t\t});\n\t\t\tif (isEmpty) {\n\t\t\t\treturn '{}';\n\t\t\t}\n\t\t\treturn '{' + newLine + result.join(',' + newLine) + newLine +\n\t\t\t\t(compact ? '' : oldIndent) + '}';\n\t\t}\n\t}\n\n\tconst string = argument;\n\t// Loop over each code unit in the string and escape it\n\tlet index = -1;\n\tconst length = string.length;\n\tresult = '';\n\twhile (++index < length) {\n\t\tconst character = string.charAt(index);\n\t\tif (options.es6) {\n\t\t\tconst first = string.charCodeAt(index);\n\t\t\tif ( // check if it’s the start of a surrogate pair\n\t\t\t\tfirst >= 0xD800 && first <= 0xDBFF && // high surrogate\n\t\t\t\tlength > index + 1 // there is a next code unit\n\t\t\t) {\n\t\t\t\tconst second = string.charCodeAt(index + 1);\n\t\t\t\tif (second >= 0xDC00 && second <= 0xDFFF) { // low surrogate\n\t\t\t\t\t// https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n\t\t\t\t\tconst codePoint = (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n\t\t\t\t\tlet hexadecimal = codePoint.toString(16);\n\t\t\t\t\tif (!lowercaseHex) {\n\t\t\t\t\t\thexadecimal = hexadecimal.toUpperCase();\n\t\t\t\t\t}\n\t\t\t\t\tresult += '\\\\u{' + hexadecimal + '}';\n\t\t\t\t\t++index;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (!options.escapeEverything) {\n\t\t\tif (regexWhitelist.test(character)) {\n\t\t\t\t// It’s a printable ASCII character that is not `\"`, `'` or `\\`,\n\t\t\t\t// so don’t escape it.\n\t\t\t\tresult += character;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (character == '\"') {\n\t\t\t\tresult += quote == character ? '\\\\\"' : character;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (character == '`') {\n\t\t\t\tresult += quote == character ? '\\\\`' : character;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (character == '\\'') {\n\t\t\t\tresult += quote == character ? '\\\\\\'' : character;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\t\tif (\n\t\t\tcharacter == '\\0' &&\n\t\t\t!json &&\n\t\t\t!regexDigit.test(string.charAt(index + 1))\n\t\t) {\n\t\t\tresult += '\\\\0';\n\t\t\tcontinue;\n\t\t}\n\t\tif (regexSingleEscape.test(character)) {\n\t\t\t// no need for a `hasOwnProperty` check here\n\t\t\tresult += singleEscapes[character];\n\t\t\tcontinue;\n\t\t}\n\t\tconst charCode = character.charCodeAt(0);\n\t\tif (options.minimal && charCode != 0x2028 && charCode != 0x2029) {\n\t\t\tresult += character;\n\t\t\tcontinue;\n\t\t}\n\t\tlet hexadecimal = charCode.toString(16);\n\t\tif (!lowercaseHex) {\n\t\t\thexadecimal = hexadecimal.toUpperCase();\n\t\t}\n\t\tconst longhand = hexadecimal.length > 2 || json;\n\t\tconst escaped = '\\\\' + (longhand ? 'u' : 'x') +\n\t\t\t('0000' + hexadecimal).slice(longhand ? -4 : -2);\n\t\tresult += escaped;\n\t\tcontinue;\n\t}\n\tif (options.wrap) {\n\t\tresult = quote + result + quote;\n\t}\n\tif (quote == '`') {\n\t\tresult = result.replace(/\\$\\{/g, '\\\\\\$\\{');\n\t}\n\tif (options.isScriptContext) {\n\t\t// https://mathiasbynens.be/notes/etago\n\t\treturn result\n\t\t\t.replace(/<\\/(script|style)/gi, '<\\\\/$1')\n\t\t\t.replace(/<!--/g, json ? '\\\\u003C!--' : '\\\\x3C!--');\n\t}\n\treturn result;\n};\n\njsesc.version = '2.5.2';\n\nmodule.exports = jsesc;\n/bin/jsesc\u000e#!/usr/bin/env node\n(function() {\n\n\tvar fs = require('fs');\n\tvar stringEscape = require('../jsesc.js');\n\tvar strings = process.argv.splice(2);\n\tvar stdin = process.stdin;\n\tvar data;\n\tvar timeout;\n\tvar isObject = false;\n\tvar options = {};\n\tvar log = console.log;\n\n\tvar main = function() {\n\t\tvar option = strings[0];\n\n\t\tif (/^(?:-h|--help|undefined)$/.test(option)) {\n\t\t\tlog(\n\t\t\t\t'jsesc v%s - https://mths.be/jsesc',\n\t\t\t\tstringEscape.version\n\t\t\t);\n\t\t\tlog([\n\t\t\t\t'\\nUsage:\\n',\n\t\t\t\t'\\tjsesc [string]',\n\t\t\t\t'\\tjsesc [-s | --single-quotes] [string]',\n\t\t\t\t'\\tjsesc [-d | --double-quotes] [string]',\n\t\t\t\t'\\tjsesc [-w | --wrap] [string]',\n\t\t\t\t'\\tjsesc [-e | --escape-everything] [string]',\n\t\t\t\t'\\tjsesc [-t | --escape-etago] [string]',\n\t\t\t\t'\\tjsesc [-6 | --es6] [string]',\n\t\t\t\t'\\tjsesc [-l | --lowercase-hex] [string]',\n\t\t\t\t'\\tjsesc [-j | --json] [string]',\n\t\t\t\t'\\tjsesc [-o | --object] [stringified_object]', // `JSON.parse()` the argument\n\t\t\t\t'\\tjsesc [-p | --pretty] [string]', // `compact: false`\n\t\t\t\t'\\tjsesc [-v | --version]',\n\t\t\t\t'\\tjsesc [-h | --help]',\n\t\t\t\t'\\nExamples:\\n',\n\t\t\t\t'\\tjsesc \\'f\\xF6o \\u2665 b\\xE5r \\uD834\\uDF06 baz\\'',\n\t\t\t\t'\\tjsesc --json \\'f\\xF6o \\u2665 b\\xE5r \\uD834\\uDF06 baz\\'',\n\t\t\t\t'\\tjsesc --json --escape-everything \\'f\\xF6o \\u2665 b\\xE5r \\uD834\\uDF06 baz\\'',\n\t\t\t\t'\\tjsesc --double-quotes --wrap \\'f\\xF6o \\u2665 b\\xE5r \\uD834\\uDF06 baz\\'',\n\t\t\t\t'\\techo \\'f\\xF6o \\u2665 b\\xE5r \\uD834\\uDF06 baz\\' | jsesc'\n\t\t\t].join('\\n'));\n\t\t\treturn process.exit(1);\n\t\t}\n\n\t\tif (/^(?:-v|--version)$/.test(option)) {\n\t\t\tlog('v%s', stringEscape.version);\n\t\t\treturn process.exit(1);\n\t\t}\n\n\t\tstrings.forEach(function(string) {\n\t\t\t// Process options\n\t\t\tif (/^(?:-s|--single-quotes)$/.test(string)) {\n\t\t\t\toptions.quotes = 'single';\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (/^(?:-d|--double-quotes)$/.test(string)) {\n\t\t\t\toptions.quotes = 'double';\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (/^(?:-w|--wrap)$/.test(string)) {\n\t\t\t\toptions.wrap = true;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (/^(?:-e|--escape-everything)$/.test(string)) {\n\t\t\t\toptions.escapeEverything = true;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (/^(?:-t|--escape-etago)$/.test(string)) {\n\t\t\t\toptions.escapeEtago = true;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (/^(?:-6|--es6)$/.test(string)) {\n\t\t\t\toptions.es6 = true;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (/^(?:-l|--lowercase-hex)$/.test(string)) {\n\t\t\t\toptions.lowercaseHex = true;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (/^(?:-j|--json)$/.test(string)) {\n\t\t\t\toptions.json = true;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (/^(?:-o|--object)$/.test(string)) {\n\t\t\t\tisObject = true;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (/^(?:-p|--pretty)$/.test(string)) {\n\t\t\t\tisObject = true;\n\t\t\t\toptions.compact = false;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Process string(s)\n\t\t\tvar result;\n\t\t\ttry {\n\t\t\t\tif (isObject) {\n\t\t\t\t\tstring = JSON.parse(string);\n\t\t\t\t}\n\t\t\t\tresult = stringEscape(string, options);\n\t\t\t\tlog(result);\n\t\t\t} catch(error) {\n\t\t\t\tlog(error.message + '\\n');\n\t\t\t\tlog('Error: failed to escape.');\n\t\t\t\tlog('If you think this is a bug in jsesc, please report it:');\n\t\t\t\tlog('https://github.com/mathiasbynens/jsesc/issues/new');\n\t\t\t\tlog(\n\t\t\t\t\t'\\nStack trace using jsesc@%s:\\n',\n\t\t\t\t\tstringEscape.version\n\t\t\t\t);\n\t\t\t\tlog(error.stack);\n\t\t\t\treturn process.exit(1);\n\t\t\t}\n\t\t});\n\t\t// Return with exit status 0 outside of the `forEach` loop, in case\n\t\t// multiple strings were passed in.\n\t\treturn process.exit(0);\n\n\t};\n\n\tif (stdin.isTTY) {\n\t\t// handle shell arguments\n\t\tmain();\n\t} else {\n\t\t// Either the script is called from within a non-TTY context,\n\t\t// or `stdin` content is being piped in.\n\t\tif (!process.stdout.isTTY) { // called from a non-TTY context\n\t\t\ttimeout = setTimeout(function() {\n\t\t\t\t// if no piped data arrived after a while, handle shell arguments\n\t\t\t\tmain();\n\t\t\t}, 250);\n\t\t}\n\n\t\tdata = '';\n\t\tstdin.on('data', function(chunk) {\n\t\t\tclearTimeout(timeout);\n\t\t\tdata += chunk;\n\t\t});\n\t\tstdin.on('end', function() {\n\t\t\tstrings.push(data.trim());\n\t\t\tmain();\n\t\t});\n\t\tstdin.resume();\n\t}\n\n}());\n/man/jsesc.1\u000bH.Dd May 13, 2016\n.Dt jsesc 1\n.Sh NAME\n.Nm jsesc\n.Nd escape strings for use in JavaScript string literals\n.Sh SYNOPSIS\n.Nm\n.Op Fl s | -single-quotes Ar string\n.br\n.Op Fl d | -double-quotes Ar string\n.br\n.Op Fl w | -wrap Ar string\n.br\n.Op Fl e | -escape-everything Ar string\n.br\n.Op Fl 6 | -es6 Ar string\n.br\n.Op Fl l | -lowercase-hex Ar string\n.br\n.Op Fl j | -json Ar string\n.br\n.Op Fl p | -object Ar string\n.br\n.Op Fl p | -pretty Ar string\n.br\n.Op Fl v | -version\n.br\n.Op Fl h | -help\n.Sh DESCRIPTION\n.Nm\nescapes strings for use in JavaScript string literals while generating the shortest possible valid ASCII-only output.\n.Sh OPTIONS\n.Bl -ohang -offset\n.It Sy \"-s, --single-quotes\"\nEscape any occurrences of ' in the input string as \\\\', so that the output can be used in a JavaScript string literal wrapped in single quotes.\n.It Sy \"-d, --double-quotes\"\nEscape any occurrences of \" in the input string as \\\\\", so that the output can be used in a JavaScript string literal wrapped in double quotes.\n.It Sy \"-w, --wrap\"\nMake sure the output is a valid JavaScript string literal wrapped in quotes. The type of quotes can be specified using the\n.Ar -s | --single-quotes\nor\n.Ar -d | --double-quotes\nsettings.\n.It Sy \"-6, --es6\"\nEscape any astral Unicode symbols using ECMAScript 6 Unicode code point escape sequences.\n.It Sy \"-e, --escape-everything\"\nEscape all the symbols in the output, even printable ASCII symbols.\n.It Sy \"-j, --json\"\nMake sure the output is valid JSON. Hexadecimal character escape sequences and the \\\\v or \\\\0 escape sequences will not be used. Setting this flag enables the\n.Ar -d | --double-quotes\nand\n.Ar -w | --wrap\nsettings.\n.It Sy \"-o, --object\"\nTreat the input as a JavaScript object rather than a string. Accepted values are flat arrays containing only string values, and flat objects containing only string values.\n.It Sy \"-p, --pretty\"\nPretty-print the output for objects, using whitespace to make it more readable. Setting this flag enables the\n.It Sy \"-l, --lowercase-hex\"\nUse lowercase for alphabetical hexadecimal digits in escape sequences.\n.Ar -o | --object\nsetting.\n.It Sy \"-v, --version\"\nPrint jsesc's version.\n.It Sy \"-h, --help\"\nShow the help screen.\n.El\n.Sh EXIT STATUS\nThe\n.Nm jsesc\nutility exits with one of the following values:\n.Pp\n.Bl -tag -width flag -compact\n.It Li 0\n.Nm\nsuccessfully escaped the given string and printed the result.\n.It Li 1\n.Nm\nwasn't instructed to escape anything (for example, the\n.Ar --help\nflag was set); or, an error occurred.\n.El\n.Sh EXAMPLES\n.Bl -ohang -offset\n.It Sy \"jsesc 'foo bar baz'\"\nPrint an escaped version of the given string.\n.It Sy echo\\ 'foo bar baz'\\ |\\ jsesc\nPrint an escaped version of the string that gets piped in.\n.El\n.Sh BUGS\njsesc's bug tracker is located at <https://github.com/mathiasbynens/jsesc/issues>.\n.Sh AUTHOR\nMathias Bynens <https://mathiasbynens.be/>\n.Sh WWW\n<https://mths.be/jsesc>\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/anNvbi1zY2hlbWEtdHJhdmVyc2VAMC40LjE=",
    "content": "/index.js\tE'use strict';\n\nvar traverse = module.exports = function (schema, opts, cb) {\n  // Legacy support for v0.3.1 and earlier.\n  if (typeof opts == 'function') {\n    cb = opts;\n    opts = {};\n  }\n\n  cb = opts.cb || cb;\n  var pre = (typeof cb == 'function') ? cb : cb.pre || function() {};\n  var post = cb.post || function() {};\n\n  _traverse(opts, pre, post, schema, '', schema);\n};\n\n\ntraverse.keywords = {\n  additionalItems: true,\n  items: true,\n  contains: true,\n  additionalProperties: true,\n  propertyNames: true,\n  not: true\n};\n\ntraverse.arrayKeywords = {\n  items: true,\n  allOf: true,\n  anyOf: true,\n  oneOf: true\n};\n\ntraverse.propsKeywords = {\n  definitions: true,\n  properties: true,\n  patternProperties: true,\n  dependencies: true\n};\n\ntraverse.skipKeywords = {\n  default: true,\n  enum: true,\n  const: true,\n  required: true,\n  maximum: true,\n  minimum: true,\n  exclusiveMaximum: true,\n  exclusiveMinimum: true,\n  multipleOf: true,\n  maxLength: true,\n  minLength: true,\n  pattern: true,\n  format: true,\n  maxItems: true,\n  minItems: true,\n  uniqueItems: true,\n  maxProperties: true,\n  minProperties: true\n};\n\n\nfunction _traverse(opts, pre, post, schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex) {\n  if (schema && typeof schema == 'object' && !Array.isArray(schema)) {\n    pre(schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex);\n    for (var key in schema) {\n      var sch = schema[key];\n      if (Array.isArray(sch)) {\n        if (key in traverse.arrayKeywords) {\n          for (var i=0; i<sch.length; i++)\n            _traverse(opts, pre, post, sch[i], jsonPtr + '/' + key + '/' + i, rootSchema, jsonPtr, key, schema, i);\n        }\n      } else if (key in traverse.propsKeywords) {\n        if (sch && typeof sch == 'object') {\n          for (var prop in sch)\n            _traverse(opts, pre, post, sch[prop], jsonPtr + '/' + key + '/' + escapeJsonPtr(prop), rootSchema, jsonPtr, key, schema, prop);\n        }\n      } else if (key in traverse.keywords || (opts.allKeys && !(key in traverse.skipKeywords))) {\n        _traverse(opts, pre, post, sch, jsonPtr + '/' + key, rootSchema, jsonPtr, key, schema);\n      }\n    }\n    post(schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex);\n  }\n}\n\n\nfunction escapeJsonPtr(str) {\n  return str.replace(/~/g, '~0').replace(/\\//g, '~1');\n}\n/LICENSE\u00042MIT License\n\nCopyright (c) 2017 Evgeny Poberezkin\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n/package.json\u0003{\n  \"name\": \"json-schema-traverse\",\n  \"version\": \"0.4.1\",\n  \"description\": \"Traverse JSON Schema passing each schema object to callback\",\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"eslint\": \"eslint index.js spec\",\n    \"test-spec\": \"mocha spec -R spec\",\n    \"test\": \"npm run eslint && nyc npm run test-spec\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/epoberezkin/json-schema-traverse.git\"\n  },\n  \"keywords\": [\n    \"JSON-Schema\",\n    \"traverse\",\n    \"iterate\"\n  ],\n  \"author\": \"Evgeny Poberezkin\",\n  \"license\": \"MIT\",\n  \"bugs\": {\n    \"url\": \"https://github.com/epoberezkin/json-schema-traverse/issues\"\n  },\n  \"homepage\": \"https://github.com/epoberezkin/json-schema-traverse#readme\",\n  \"devDependencies\": {\n    \"coveralls\": \"^2.13.1\",\n    \"eslint\": \"^3.19.0\",\n    \"mocha\": \"^3.4.2\",\n    \"nyc\": \"^11.0.2\",\n    \"pre-commit\": \"^1.2.2\"\n  },\n  \"nyc\": {\n    \"exclude\": [\n      \"**/spec/**\",\n      \"node_modules\"\n    ],\n    \"reporter\": [\n      \"lcov\",\n      \"text-summary\"\n    ]\n  }\n}\n/spec/index.spec.js\u0017'use strict';\n\nvar traverse = require('../index');\nvar assert = require('assert');\n\ndescribe('json-schema-traverse', function() {\n  var calls;\n\n  beforeEach(function() {\n    calls = [];\n  });\n\n  it('should traverse all keywords containing schemas recursively', function() {\n    var schema = require('./fixtures/schema').schema;\n    var expectedCalls = require('./fixtures/schema').expectedCalls;\n\n    traverse(schema, {cb: callback});\n    assert.deepStrictEqual(calls, expectedCalls);\n  });\n\n  describe('Legacy v0.3.1 API', function() {\n    it('should traverse all keywords containing schemas recursively', function() {\n      var schema = require('./fixtures/schema').schema;\n      var expectedCalls = require('./fixtures/schema').expectedCalls;\n\n      traverse(schema, callback);\n      assert.deepStrictEqual(calls, expectedCalls);\n    });\n\n    it('should work when an options object is provided', function() {\n      // schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex\n      var schema = require('./fixtures/schema').schema;\n      var expectedCalls = require('./fixtures/schema').expectedCalls;\n\n      traverse(schema, {}, callback);\n      assert.deepStrictEqual(calls, expectedCalls);\n    });\n  });\n\n\n  describe('allKeys option', function() {\n    var schema = {\n      someObject: {\n        minimum: 1,\n        maximum: 2\n      }\n    };\n\n    it('should traverse objects with allKeys: true option', function() {\n      // schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex\n      var expectedCalls = [\n        [schema, '', schema, undefined, undefined, undefined, undefined],\n        [schema.someObject, '/someObject', schema, '', 'someObject', schema, undefined]\n      ];\n\n      traverse(schema, {allKeys: true, cb: callback});\n      assert.deepStrictEqual(calls, expectedCalls);\n    });\n\n\n    it('should NOT traverse objects with allKeys: false option', function() {\n      // schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex\n      var expectedCalls = [\n        [schema, '', schema, undefined, undefined, undefined, undefined]\n      ];\n\n      traverse(schema, {allKeys: false, cb: callback});\n      assert.deepStrictEqual(calls, expectedCalls);\n    });\n\n\n    it('should NOT traverse objects without allKeys option', function() {\n      // schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex\n      var expectedCalls = [\n        [schema, '', schema, undefined, undefined, undefined, undefined]\n      ];\n\n      traverse(schema, {cb: callback});\n      assert.deepStrictEqual(calls, expectedCalls);\n    });\n\n\n    it('should NOT travers objects in standard keywords which value is not a schema', function() {\n      var schema2 = {\n        const: {foo: 'bar'},\n        enum: ['a', 'b'],\n        required: ['foo'],\n        another: {\n\n        },\n        patternProperties: {}, // will not traverse - no properties\n        dependencies: true, // will not traverse - invalid\n        properties: {\n          smaller: {\n            type: 'number'\n          },\n          larger: {\n            type: 'number',\n            minimum: {$data: '1/smaller'}\n          }\n        }\n      };\n\n      // schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex\n      var expectedCalls = [\n        [schema2, '', schema2, undefined, undefined, undefined, undefined],\n        [schema2.another, '/another', schema2, '', 'another', schema2, undefined],\n        [schema2.properties.smaller, '/properties/smaller', schema2, '', 'properties', schema2, 'smaller'],\n        [schema2.properties.larger, '/properties/larger', schema2, '', 'properties', schema2, 'larger'],\n      ];\n\n      traverse(schema2, {allKeys: true, cb: callback});\n      assert.deepStrictEqual(calls, expectedCalls);\n    });\n  });\n\n  describe('pre and post', function() {\n    var schema = {\n      type: 'object',\n      properties: {\n        name: {type: 'string'},\n        age: {type: 'number'}\n      }\n    };\n\n    it('should traverse schema in pre-order', function() {\n      traverse(schema, {cb: {pre}});\n      var expectedCalls = [\n        ['pre', schema, '', schema, undefined, undefined, undefined, undefined],\n        ['pre', schema.properties.name, '/properties/name', schema, '', 'properties', schema, 'name'],\n        ['pre', schema.properties.age, '/properties/age', schema, '', 'properties', schema, 'age'],\n      ];\n      assert.deepStrictEqual(calls, expectedCalls);\n    });\n\n    it('should traverse schema in post-order', function() {\n      traverse(schema, {cb: {post}});\n      var expectedCalls = [\n        ['post', schema.properties.name, '/properties/name', schema, '', 'properties', schema, 'name'],\n        ['post', schema.properties.age, '/properties/age', schema, '', 'properties', schema, 'age'],\n        ['post', schema, '', schema, undefined, undefined, undefined, undefined],\n      ];\n      assert.deepStrictEqual(calls, expectedCalls);\n    });\n\n    it('should traverse schema in pre- and post-order at the same time', function() {\n      traverse(schema, {cb: {pre, post}});\n      var expectedCalls = [\n        ['pre', schema, '', schema, undefined, undefined, undefined, undefined],\n        ['pre', schema.properties.name, '/properties/name', schema, '', 'properties', schema, 'name'],\n        ['post', schema.properties.name, '/properties/name', schema, '', 'properties', schema, 'name'],\n        ['pre', schema.properties.age, '/properties/age', schema, '', 'properties', schema, 'age'],\n        ['post', schema.properties.age, '/properties/age', schema, '', 'properties', schema, 'age'],\n        ['post', schema, '', schema, undefined, undefined, undefined, undefined],\n      ];\n      assert.deepStrictEqual(calls, expectedCalls);\n    });\n  });\n\n  function callback() {\n    calls.push(Array.prototype.slice.call(arguments));\n  }\n\n  function pre() {\n    calls.push(['pre'].concat(Array.prototype.slice.call(arguments)));\n  }\n\n  function post() {\n    calls.push(['post'].concat(Array.prototype.slice.call(arguments)));\n  }\n});\n/spec/fixtures/schema.js\u0015'use strict';\n\nvar schema = {\n  additionalItems: subschema('additionalItems'),\n  items: subschema('items'),\n  contains: subschema('contains'),\n  additionalProperties: subschema('additionalProperties'),\n  propertyNames: subschema('propertyNames'),\n  not: subschema('not'),\n  allOf: [\n    subschema('allOf_0'),\n    subschema('allOf_1'),\n    {\n      items: [\n        subschema('items_0'),\n        subschema('items_1'),\n      ]\n    }\n  ],\n  anyOf: [\n    subschema('anyOf_0'),\n    subschema('anyOf_1'),\n  ],\n  oneOf: [\n    subschema('oneOf_0'),\n    subschema('oneOf_1'),\n  ],\n  definitions: {\n    foo: subschema('definitions_foo'),\n    bar: subschema('definitions_bar'),\n  },\n  properties: {\n    foo: subschema('properties_foo'),\n    bar: subschema('properties_bar'),\n  },\n  patternProperties: {\n    foo: subschema('patternProperties_foo'),\n    bar: subschema('patternProperties_bar'),\n  },\n  dependencies: {\n    foo: subschema('dependencies_foo'),\n    bar: subschema('dependencies_bar'),\n  },\n  required: ['foo', 'bar']\n};\n\n\nfunction subschema(keyword) {\n  var sch = {\n    properties: {},\n    additionalProperties: false,\n    additionalItems: false,\n    anyOf: [\n      {format: 'email'},\n      {format: 'hostname'}\n    ]\n  };\n  sch.properties['foo_' + keyword] = {title: 'foo'};\n  sch.properties['bar_' + keyword] = {title: 'bar'};\n  return sch;\n}\n\n\nmodule.exports = {\n  schema: schema,\n\n  // schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex\n  expectedCalls: [[schema, '', schema, undefined, undefined, undefined, undefined]]\n    .concat(expectedCalls('additionalItems'))\n    .concat(expectedCalls('items'))\n    .concat(expectedCalls('contains'))\n    .concat(expectedCalls('additionalProperties'))\n    .concat(expectedCalls('propertyNames'))\n    .concat(expectedCalls('not'))\n    .concat(expectedCallsChild('allOf', 0))\n    .concat(expectedCallsChild('allOf', 1))\n    .concat([\n      [schema.allOf[2], '/allOf/2', schema, '', 'allOf', schema, 2],\n      [schema.allOf[2].items[0], '/allOf/2/items/0', schema, '/allOf/2', 'items', schema.allOf[2], 0],\n      [schema.allOf[2].items[0].properties.foo_items_0, '/allOf/2/items/0/properties/foo_items_0', schema, '/allOf/2/items/0', 'properties', schema.allOf[2].items[0], 'foo_items_0'],\n      [schema.allOf[2].items[0].properties.bar_items_0, '/allOf/2/items/0/properties/bar_items_0', schema, '/allOf/2/items/0', 'properties', schema.allOf[2].items[0], 'bar_items_0'],\n      [schema.allOf[2].items[0].anyOf[0], '/allOf/2/items/0/anyOf/0', schema, '/allOf/2/items/0', 'anyOf', schema.allOf[2].items[0], 0],\n      [schema.allOf[2].items[0].anyOf[1], '/allOf/2/items/0/anyOf/1', schema, '/allOf/2/items/0', 'anyOf', schema.allOf[2].items[0], 1],\n\n      [schema.allOf[2].items[1], '/allOf/2/items/1', schema, '/allOf/2', 'items', schema.allOf[2], 1],\n      [schema.allOf[2].items[1].properties.foo_items_1, '/allOf/2/items/1/properties/foo_items_1', schema, '/allOf/2/items/1', 'properties', schema.allOf[2].items[1], 'foo_items_1'],\n      [schema.allOf[2].items[1].properties.bar_items_1, '/allOf/2/items/1/properties/bar_items_1', schema, '/allOf/2/items/1', 'properties', schema.allOf[2].items[1], 'bar_items_1'],\n      [schema.allOf[2].items[1].anyOf[0], '/allOf/2/items/1/anyOf/0', schema, '/allOf/2/items/1', 'anyOf', schema.allOf[2].items[1], 0],\n      [schema.allOf[2].items[1].anyOf[1], '/allOf/2/items/1/anyOf/1', schema, '/allOf/2/items/1', 'anyOf', schema.allOf[2].items[1], 1]\n    ])\n    .concat(expectedCallsChild('anyOf', 0))\n    .concat(expectedCallsChild('anyOf', 1))\n    .concat(expectedCallsChild('oneOf', 0))\n    .concat(expectedCallsChild('oneOf', 1))\n    .concat(expectedCallsChild('definitions', 'foo'))\n    .concat(expectedCallsChild('definitions', 'bar'))\n    .concat(expectedCallsChild('properties', 'foo'))\n    .concat(expectedCallsChild('properties', 'bar'))\n    .concat(expectedCallsChild('patternProperties', 'foo'))\n    .concat(expectedCallsChild('patternProperties', 'bar'))\n    .concat(expectedCallsChild('dependencies', 'foo'))\n    .concat(expectedCallsChild('dependencies', 'bar'))\n};\n\n\nfunction expectedCalls(keyword) {\n  return [\n    [schema[keyword], `/${keyword}`, schema, '', keyword, schema, undefined],\n    [schema[keyword].properties[`foo_${keyword}`], `/${keyword}/properties/foo_${keyword}`, schema, `/${keyword}`, 'properties', schema[keyword], `foo_${keyword}`],\n    [schema[keyword].properties[`bar_${keyword}`], `/${keyword}/properties/bar_${keyword}`, schema, `/${keyword}`, 'properties', schema[keyword], `bar_${keyword}`],\n    [schema[keyword].anyOf[0], `/${keyword}/anyOf/0`, schema, `/${keyword}`, 'anyOf', schema[keyword], 0],\n    [schema[keyword].anyOf[1], `/${keyword}/anyOf/1`, schema, `/${keyword}`, 'anyOf', schema[keyword], 1]\n  ];\n}\n\n\nfunction expectedCallsChild(keyword, i) {\n  return [\n    [schema[keyword][i], `/${keyword}/${i}`, schema, '', keyword, schema, i],\n    [schema[keyword][i].properties[`foo_${keyword}_${i}`], `/${keyword}/${i}/properties/foo_${keyword}_${i}`, schema, `/${keyword}/${i}`, 'properties', schema[keyword][i], `foo_${keyword}_${i}`],\n    [schema[keyword][i].properties[`bar_${keyword}_${i}`], `/${keyword}/${i}/properties/bar_${keyword}_${i}`, schema, `/${keyword}/${i}`, 'properties', schema[keyword][i], `bar_${keyword}_${i}`],\n    [schema[keyword][i].anyOf[0], `/${keyword}/${i}/anyOf/0`, schema, `/${keyword}/${i}`, 'anyOf', schema[keyword][i], 0],\n    [schema[keyword][i].anyOf[1], `/${keyword}/${i}/anyOf/1`, schema, `/${keyword}/${i}`, 'anyOf', schema[keyword][i], 1]\n  ];\n}\n/README.md\n# json-schema-traverse\nTraverse JSON Schema passing each schema object to callback\n\n[![Build Status](https://travis-ci.org/epoberezkin/json-schema-traverse.svg?branch=master)](https://travis-ci.org/epoberezkin/json-schema-traverse)\n[![npm version](https://badge.fury.io/js/json-schema-traverse.svg)](https://www.npmjs.com/package/json-schema-traverse)\n[![Coverage Status](https://coveralls.io/repos/github/epoberezkin/json-schema-traverse/badge.svg?branch=master)](https://coveralls.io/github/epoberezkin/json-schema-traverse?branch=master)\n\n\n## Install\n\n```\nnpm install json-schema-traverse\n```\n\n\n## Usage\n\n```javascript\nconst traverse = require('json-schema-traverse');\nconst schema = {\n  properties: {\n    foo: {type: 'string'},\n    bar: {type: 'integer'}\n  }\n};\n\ntraverse(schema, {cb});\n// cb is called 3 times with:\n// 1. root schema\n// 2. {type: 'string'}\n// 3. {type: 'integer'}\n\n// Or:\n\ntraverse(schema, {cb: {pre, post}});\n// pre is called 3 times with:\n// 1. root schema\n// 2. {type: 'string'}\n// 3. {type: 'integer'}\n//\n// post is called 3 times with:\n// 1. {type: 'string'}\n// 2. {type: 'integer'}\n// 3. root schema\n\n```\n\nCallback function `cb` is called for each schema object (not including draft-06 boolean schemas), including the root schema, in pre-order traversal. Schema references ($ref) are not resolved, they are passed as is.  Alternatively, you can pass a `{pre, post}` object as `cb`, and then `pre` will be called before traversing child elements, and `post` will be called after all child elements have been traversed.\n\nCallback is passed these parameters:\n\n- _schema_: the current schema object\n- _JSON pointer_: from the root schema to the current schema object\n- _root schema_: the schema passed to `traverse` object\n- _parent JSON pointer_: from the root schema to the parent schema object (see below)\n- _parent keyword_: the keyword inside which this schema appears (e.g. `properties`, `anyOf`, etc.)\n- _parent schema_: not necessarily parent object/array; in the example above the parent schema for `{type: 'string'}` is the root schema\n- _index/property_: index or property name in the array/object containing multiple schemas; in the example above for `{type: 'string'}` the property name is `'foo'`\n\n\n## Traverse objects in all unknown keywords\n\n```javascript\nconst traverse = require('json-schema-traverse');\nconst schema = {\n  mySchema: {\n    minimum: 1,\n    maximum: 2\n  }\n};\n\ntraverse(schema, {allKeys: true, cb});\n// cb is called 2 times with:\n// 1. root schema\n// 2. mySchema\n```\n\nWithout option `allKeys: true` callback will be called only with root schema.\n\n\n## License\n\n[MIT](https://github.com/epoberezkin/json-schema-traverse/blob/master/LICENSE)\n/.eslintrc.yml\u0002vextends: eslint:recommended\nenv:\n  node: true\n  browser: true\nrules:\n  block-scoped-var: 2\n  complexity: [2, 13]\n  curly: [2, multi-or-nest, consistent]\n  dot-location: [2, property]\n  dot-notation: 2\n  indent: [2, 2, SwitchCase: 1]\n  linebreak-style: [2, unix]\n  new-cap: 2\n  no-console: [2, allow: [warn, error]]\n  no-else-return: 2\n  no-eq-null: 2\n  no-fallthrough: 2\n  no-invalid-this: 2\n  no-return-assign: 2\n  no-shadow: 1\n  no-trailing-spaces: 2\n  no-use-before-define: [2, nofunc]\n  quotes: [2, single, avoid-escape]\n  semi: [2, always]\n  strict: [2, global]\n  valid-jsdoc: [2, requireReturn: false]\n  no-control-regex: 0\n/spec/.eslintrc.yml[parserOptions:\n  ecmaVersion: 6\nglobals:\n  beforeEach: false\n  describe: false\n  it: false\n/.travis.ymlllanguage: node_js\nnode_js:\n  - \"4\"\n  - \"6\"\n  - \"7\"\n  - \"8\"\nafter_script:\n  - coveralls < coverage/lcov.info\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/anNvbi1zY2hlbWEtdHJhdmVyc2VAMS4wLjA=",
    "content": "/.eslintrc.yml\u0002vextends: eslint:recommended\nenv:\n  node: true\n  browser: true\nrules:\n  block-scoped-var: 2\n  complexity: [2, 15]\n  curly: [2, multi-or-nest, consistent]\n  dot-location: [2, property]\n  dot-notation: 2\n  indent: [2, 2, SwitchCase: 1]\n  linebreak-style: [2, unix]\n  new-cap: 2\n  no-console: [2, allow: [warn, error]]\n  no-else-return: 2\n  no-eq-null: 2\n  no-fallthrough: 2\n  no-invalid-this: 2\n  no-return-assign: 2\n  no-shadow: 1\n  no-trailing-spaces: 2\n  no-use-before-define: [2, nofunc]\n  quotes: [2, single, avoid-escape]\n  semi: [2, always]\n  strict: [2, global]\n  valid-jsdoc: [2, requireReturn: false]\n  no-control-regex: 0\n/spec/fixtures/schema.js\u0015'use strict';\n\nvar schema = {\n  additionalItems: subschema('additionalItems'),\n  items: subschema('items'),\n  contains: subschema('contains'),\n  additionalProperties: subschema('additionalProperties'),\n  propertyNames: subschema('propertyNames'),\n  not: subschema('not'),\n  allOf: [\n    subschema('allOf_0'),\n    subschema('allOf_1'),\n    {\n      items: [\n        subschema('items_0'),\n        subschema('items_1'),\n      ]\n    }\n  ],\n  anyOf: [\n    subschema('anyOf_0'),\n    subschema('anyOf_1'),\n  ],\n  oneOf: [\n    subschema('oneOf_0'),\n    subschema('oneOf_1'),\n  ],\n  definitions: {\n    foo: subschema('definitions_foo'),\n    bar: subschema('definitions_bar'),\n  },\n  properties: {\n    foo: subschema('properties_foo'),\n    bar: subschema('properties_bar'),\n  },\n  patternProperties: {\n    foo: subschema('patternProperties_foo'),\n    bar: subschema('patternProperties_bar'),\n  },\n  dependencies: {\n    foo: subschema('dependencies_foo'),\n    bar: subschema('dependencies_bar'),\n  },\n  required: ['foo', 'bar']\n};\n\n\nfunction subschema(keyword) {\n  var sch = {\n    properties: {},\n    additionalProperties: false,\n    additionalItems: false,\n    anyOf: [\n      {format: 'email'},\n      {format: 'hostname'}\n    ]\n  };\n  sch.properties['foo_' + keyword] = {title: 'foo'};\n  sch.properties['bar_' + keyword] = {title: 'bar'};\n  return sch;\n}\n\n\nmodule.exports = {\n  schema: schema,\n\n  // schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex\n  expectedCalls: [[schema, '', schema, undefined, undefined, undefined, undefined]]\n    .concat(expectedCalls('additionalItems'))\n    .concat(expectedCalls('items'))\n    .concat(expectedCalls('contains'))\n    .concat(expectedCalls('additionalProperties'))\n    .concat(expectedCalls('propertyNames'))\n    .concat(expectedCalls('not'))\n    .concat(expectedCallsChild('allOf', 0))\n    .concat(expectedCallsChild('allOf', 1))\n    .concat([\n      [schema.allOf[2], '/allOf/2', schema, '', 'allOf', schema, 2],\n      [schema.allOf[2].items[0], '/allOf/2/items/0', schema, '/allOf/2', 'items', schema.allOf[2], 0],\n      [schema.allOf[2].items[0].properties.foo_items_0, '/allOf/2/items/0/properties/foo_items_0', schema, '/allOf/2/items/0', 'properties', schema.allOf[2].items[0], 'foo_items_0'],\n      [schema.allOf[2].items[0].properties.bar_items_0, '/allOf/2/items/0/properties/bar_items_0', schema, '/allOf/2/items/0', 'properties', schema.allOf[2].items[0], 'bar_items_0'],\n      [schema.allOf[2].items[0].anyOf[0], '/allOf/2/items/0/anyOf/0', schema, '/allOf/2/items/0', 'anyOf', schema.allOf[2].items[0], 0],\n      [schema.allOf[2].items[0].anyOf[1], '/allOf/2/items/0/anyOf/1', schema, '/allOf/2/items/0', 'anyOf', schema.allOf[2].items[0], 1],\n\n      [schema.allOf[2].items[1], '/allOf/2/items/1', schema, '/allOf/2', 'items', schema.allOf[2], 1],\n      [schema.allOf[2].items[1].properties.foo_items_1, '/allOf/2/items/1/properties/foo_items_1', schema, '/allOf/2/items/1', 'properties', schema.allOf[2].items[1], 'foo_items_1'],\n      [schema.allOf[2].items[1].properties.bar_items_1, '/allOf/2/items/1/properties/bar_items_1', schema, '/allOf/2/items/1', 'properties', schema.allOf[2].items[1], 'bar_items_1'],\n      [schema.allOf[2].items[1].anyOf[0], '/allOf/2/items/1/anyOf/0', schema, '/allOf/2/items/1', 'anyOf', schema.allOf[2].items[1], 0],\n      [schema.allOf[2].items[1].anyOf[1], '/allOf/2/items/1/anyOf/1', schema, '/allOf/2/items/1', 'anyOf', schema.allOf[2].items[1], 1]\n    ])\n    .concat(expectedCallsChild('anyOf', 0))\n    .concat(expectedCallsChild('anyOf', 1))\n    .concat(expectedCallsChild('oneOf', 0))\n    .concat(expectedCallsChild('oneOf', 1))\n    .concat(expectedCallsChild('definitions', 'foo'))\n    .concat(expectedCallsChild('definitions', 'bar'))\n    .concat(expectedCallsChild('properties', 'foo'))\n    .concat(expectedCallsChild('properties', 'bar'))\n    .concat(expectedCallsChild('patternProperties', 'foo'))\n    .concat(expectedCallsChild('patternProperties', 'bar'))\n    .concat(expectedCallsChild('dependencies', 'foo'))\n    .concat(expectedCallsChild('dependencies', 'bar'))\n};\n\n\nfunction expectedCalls(keyword) {\n  return [\n    [schema[keyword], `/${keyword}`, schema, '', keyword, schema, undefined],\n    [schema[keyword].properties[`foo_${keyword}`], `/${keyword}/properties/foo_${keyword}`, schema, `/${keyword}`, 'properties', schema[keyword], `foo_${keyword}`],\n    [schema[keyword].properties[`bar_${keyword}`], `/${keyword}/properties/bar_${keyword}`, schema, `/${keyword}`, 'properties', schema[keyword], `bar_${keyword}`],\n    [schema[keyword].anyOf[0], `/${keyword}/anyOf/0`, schema, `/${keyword}`, 'anyOf', schema[keyword], 0],\n    [schema[keyword].anyOf[1], `/${keyword}/anyOf/1`, schema, `/${keyword}`, 'anyOf', schema[keyword], 1]\n  ];\n}\n\n\nfunction expectedCallsChild(keyword, i) {\n  return [\n    [schema[keyword][i], `/${keyword}/${i}`, schema, '', keyword, schema, i],\n    [schema[keyword][i].properties[`foo_${keyword}_${i}`], `/${keyword}/${i}/properties/foo_${keyword}_${i}`, schema, `/${keyword}/${i}`, 'properties', schema[keyword][i], `foo_${keyword}_${i}`],\n    [schema[keyword][i].properties[`bar_${keyword}_${i}`], `/${keyword}/${i}/properties/bar_${keyword}_${i}`, schema, `/${keyword}/${i}`, 'properties', schema[keyword][i], `bar_${keyword}_${i}`],\n    [schema[keyword][i].anyOf[0], `/${keyword}/${i}/anyOf/0`, schema, `/${keyword}/${i}`, 'anyOf', schema[keyword][i], 0],\n    [schema[keyword][i].anyOf[1], `/${keyword}/${i}/anyOf/1`, schema, `/${keyword}/${i}`, 'anyOf', schema[keyword][i], 1]\n  ];\n}\n/package.json\u0003{\n  \"name\": \"json-schema-traverse\",\n  \"version\": \"1.0.0\",\n  \"description\": \"Traverse JSON Schema passing each schema object to callback\",\n  \"main\": \"index.js\",\n  \"types\": \"index.d.ts\",\n  \"scripts\": {\n    \"eslint\": \"eslint index.js spec\",\n    \"test-spec\": \"mocha spec -R spec\",\n    \"test\": \"npm run eslint && nyc npm run test-spec\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/epoberezkin/json-schema-traverse.git\"\n  },\n  \"keywords\": [\n    \"JSON-Schema\",\n    \"traverse\",\n    \"iterate\"\n  ],\n  \"author\": \"Evgeny Poberezkin\",\n  \"license\": \"MIT\",\n  \"bugs\": {\n    \"url\": \"https://github.com/epoberezkin/json-schema-traverse/issues\"\n  },\n  \"homepage\": \"https://github.com/epoberezkin/json-schema-traverse#readme\",\n  \"devDependencies\": {\n    \"eslint\": \"^7.3.1\",\n    \"mocha\": \"^8.0.1\",\n    \"nyc\": \"^15.0.0\",\n    \"pre-commit\": \"^1.2.2\"\n  },\n  \"nyc\": {\n    \"exclude\": [\n      \"**/spec/**\",\n      \"node_modules\"\n    ],\n    \"reporter\": [\n      \"lcov\",\n      \"text-summary\"\n    ]\n  }\n}\n/LICENSE\u00042MIT License\n\nCopyright (c) 2017 Evgeny Poberezkin\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n/spec/index.spec.js\u0017'use strict';\n\nvar traverse = require('../index');\nvar assert = require('assert');\n\ndescribe('json-schema-traverse', function() {\n  var calls;\n\n  beforeEach(function() {\n    calls = [];\n  });\n\n  it('should traverse all keywords containing schemas recursively', function() {\n    var schema = require('./fixtures/schema').schema;\n    var expectedCalls = require('./fixtures/schema').expectedCalls;\n\n    traverse(schema, {cb: callback});\n    assert.deepStrictEqual(calls, expectedCalls);\n  });\n\n  describe('Legacy v0.3.1 API', function() {\n    it('should traverse all keywords containing schemas recursively', function() {\n      var schema = require('./fixtures/schema').schema;\n      var expectedCalls = require('./fixtures/schema').expectedCalls;\n\n      traverse(schema, callback);\n      assert.deepStrictEqual(calls, expectedCalls);\n    });\n\n    it('should work when an options object is provided', function() {\n      // schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex\n      var schema = require('./fixtures/schema').schema;\n      var expectedCalls = require('./fixtures/schema').expectedCalls;\n\n      traverse(schema, {}, callback);\n      assert.deepStrictEqual(calls, expectedCalls);\n    });\n  });\n\n\n  describe('allKeys option', function() {\n    var schema = {\n      someObject: {\n        minimum: 1,\n        maximum: 2\n      }\n    };\n\n    it('should traverse objects with allKeys: true option', function() {\n      // schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex\n      var expectedCalls = [\n        [schema, '', schema, undefined, undefined, undefined, undefined],\n        [schema.someObject, '/someObject', schema, '', 'someObject', schema, undefined]\n      ];\n\n      traverse(schema, {allKeys: true, cb: callback});\n      assert.deepStrictEqual(calls, expectedCalls);\n    });\n\n\n    it('should NOT traverse objects with allKeys: false option', function() {\n      // schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex\n      var expectedCalls = [\n        [schema, '', schema, undefined, undefined, undefined, undefined]\n      ];\n\n      traverse(schema, {allKeys: false, cb: callback});\n      assert.deepStrictEqual(calls, expectedCalls);\n    });\n\n\n    it('should NOT traverse objects without allKeys option', function() {\n      // schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex\n      var expectedCalls = [\n        [schema, '', schema, undefined, undefined, undefined, undefined]\n      ];\n\n      traverse(schema, {cb: callback});\n      assert.deepStrictEqual(calls, expectedCalls);\n    });\n\n\n    it('should NOT travers objects in standard keywords which value is not a schema', function() {\n      var schema2 = {\n        const: {foo: 'bar'},\n        enum: ['a', 'b'],\n        required: ['foo'],\n        another: {\n\n        },\n        patternProperties: {}, // will not traverse - no properties\n        dependencies: true, // will not traverse - invalid\n        properties: {\n          smaller: {\n            type: 'number'\n          },\n          larger: {\n            type: 'number',\n            minimum: {$data: '1/smaller'}\n          }\n        }\n      };\n\n      // schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex\n      var expectedCalls = [\n        [schema2, '', schema2, undefined, undefined, undefined, undefined],\n        [schema2.another, '/another', schema2, '', 'another', schema2, undefined],\n        [schema2.properties.smaller, '/properties/smaller', schema2, '', 'properties', schema2, 'smaller'],\n        [schema2.properties.larger, '/properties/larger', schema2, '', 'properties', schema2, 'larger'],\n      ];\n\n      traverse(schema2, {allKeys: true, cb: callback});\n      assert.deepStrictEqual(calls, expectedCalls);\n    });\n  });\n\n  describe('pre and post', function() {\n    var schema = {\n      type: 'object',\n      properties: {\n        name: {type: 'string'},\n        age: {type: 'number'}\n      }\n    };\n\n    it('should traverse schema in pre-order', function() {\n      traverse(schema, {cb: {pre}});\n      var expectedCalls = [\n        ['pre', schema, '', schema, undefined, undefined, undefined, undefined],\n        ['pre', schema.properties.name, '/properties/name', schema, '', 'properties', schema, 'name'],\n        ['pre', schema.properties.age, '/properties/age', schema, '', 'properties', schema, 'age'],\n      ];\n      assert.deepStrictEqual(calls, expectedCalls);\n    });\n\n    it('should traverse schema in post-order', function() {\n      traverse(schema, {cb: {post}});\n      var expectedCalls = [\n        ['post', schema.properties.name, '/properties/name', schema, '', 'properties', schema, 'name'],\n        ['post', schema.properties.age, '/properties/age', schema, '', 'properties', schema, 'age'],\n        ['post', schema, '', schema, undefined, undefined, undefined, undefined],\n      ];\n      assert.deepStrictEqual(calls, expectedCalls);\n    });\n\n    it('should traverse schema in pre- and post-order at the same time', function() {\n      traverse(schema, {cb: {pre, post}});\n      var expectedCalls = [\n        ['pre', schema, '', schema, undefined, undefined, undefined, undefined],\n        ['pre', schema.properties.name, '/properties/name', schema, '', 'properties', schema, 'name'],\n        ['post', schema.properties.name, '/properties/name', schema, '', 'properties', schema, 'name'],\n        ['pre', schema.properties.age, '/properties/age', schema, '', 'properties', schema, 'age'],\n        ['post', schema.properties.age, '/properties/age', schema, '', 'properties', schema, 'age'],\n        ['post', schema, '', schema, undefined, undefined, undefined, undefined],\n      ];\n      assert.deepStrictEqual(calls, expectedCalls);\n    });\n  });\n\n  function callback() {\n    calls.push(Array.prototype.slice.call(arguments));\n  }\n\n  function pre() {\n    calls.push(['pre'].concat(Array.prototype.slice.call(arguments)));\n  }\n\n  function post() {\n    calls.push(['post'].concat(Array.prototype.slice.call(arguments)));\n  }\n});\n/spec/.eslintrc.yml[parserOptions:\n  ecmaVersion: 6\nglobals:\n  beforeEach: false\n  describe: false\n  it: false\n/.github/workflows/build.yml\u0002Fname: build\n\non:\n  push:\n    branches: [master]\n  pull_request:\n    branches: [\"*\"]\n\njobs:\n  build:\n    runs-on: ubuntu-latest\n\n    strategy:\n      matrix:\n        node-version: [10.x, 12.x, 14.x]\n\n    steps:\n      - uses: actions/checkout@v2\n      - name: Use Node.js ${{ matrix.node-version }}\n        uses: actions/setup-node@v1\n        with:\n          node-version: ${{ matrix.node-version }}\n      - run: npm install\n      - run: npm test\n      - name: Coveralls\n        uses: coverallsapp/github-action@master\n        with:\n          github-token: ${{ secrets.GITHUB_TOKEN }}\n/.github/FUNDING.yml9github: epoberezkin\ntidelift: \"npm/json-schema-traverse\"\n/index.js\t|'use strict';\n\nvar traverse = module.exports = function (schema, opts, cb) {\n  // Legacy support for v0.3.1 and earlier.\n  if (typeof opts == 'function') {\n    cb = opts;\n    opts = {};\n  }\n\n  cb = opts.cb || cb;\n  var pre = (typeof cb == 'function') ? cb : cb.pre || function() {};\n  var post = cb.post || function() {};\n\n  _traverse(opts, pre, post, schema, '', schema);\n};\n\n\ntraverse.keywords = {\n  additionalItems: true,\n  items: true,\n  contains: true,\n  additionalProperties: true,\n  propertyNames: true,\n  not: true,\n  if: true,\n  then: true,\n  else: true\n};\n\ntraverse.arrayKeywords = {\n  items: true,\n  allOf: true,\n  anyOf: true,\n  oneOf: true\n};\n\ntraverse.propsKeywords = {\n  $defs: true,\n  definitions: true,\n  properties: true,\n  patternProperties: true,\n  dependencies: true\n};\n\ntraverse.skipKeywords = {\n  default: true,\n  enum: true,\n  const: true,\n  required: true,\n  maximum: true,\n  minimum: true,\n  exclusiveMaximum: true,\n  exclusiveMinimum: true,\n  multipleOf: true,\n  maxLength: true,\n  minLength: true,\n  pattern: true,\n  format: true,\n  maxItems: true,\n  minItems: true,\n  uniqueItems: true,\n  maxProperties: true,\n  minProperties: true\n};\n\n\nfunction _traverse(opts, pre, post, schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex) {\n  if (schema && typeof schema == 'object' && !Array.isArray(schema)) {\n    pre(schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex);\n    for (var key in schema) {\n      var sch = schema[key];\n      if (Array.isArray(sch)) {\n        if (key in traverse.arrayKeywords) {\n          for (var i=0; i<sch.length; i++)\n            _traverse(opts, pre, post, sch[i], jsonPtr + '/' + key + '/' + i, rootSchema, jsonPtr, key, schema, i);\n        }\n      } else if (key in traverse.propsKeywords) {\n        if (sch && typeof sch == 'object') {\n          for (var prop in sch)\n            _traverse(opts, pre, post, sch[prop], jsonPtr + '/' + key + '/' + escapeJsonPtr(prop), rootSchema, jsonPtr, key, schema, prop);\n        }\n      } else if (key in traverse.keywords || (opts.allKeys && !(key in traverse.skipKeywords))) {\n        _traverse(opts, pre, post, sch, jsonPtr + '/' + key, rootSchema, jsonPtr, key, schema);\n      }\n    }\n    post(schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex);\n  }\n}\n\n\nfunction escapeJsonPtr(str) {\n  return str.replace(/~/g, '~0').replace(/\\//g, '~1');\n}\n/.github/workflows/publish.yml\u0002name: publish\n\non:\n  release:\n    types: [published]\n\njobs:\n  publish-npm:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v2\n      - uses: actions/setup-node@v1\n        with:\n          node-version: 14\n          registry-url: https://registry.npmjs.org/\n      - run: npm install\n      - run: npm test\n      - name: Publish beta version to npm\n        if: \"github.event.release.prerelease\"\n        run: npm publish --tag beta\n        env:\n          NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}\n      - name: Publish to npm\n        if: \"!github.event.release.prerelease\"\n        run: npm publish\n        env:\n          NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}\n/index.d.ts\u0002declare function traverse(\n  schema: traverse.SchemaObject,\n  opts: traverse.Options,\n  cb?: traverse.Callback\n): void;\n\ndeclare function traverse(\n  schema: traverse.SchemaObject,\n  cb: traverse.Callback\n): void;\n\ndeclare namespace traverse {\n  interface SchemaObject {\n    $id?: string;\n    $schema?: string;\n    [x: string]: any;\n  }\n\n  type Callback = (\n    schema: SchemaObject,\n    jsonPtr: string,\n    rootSchema: SchemaObject,\n    parentJsonPtr?: string,\n    parentKeyword?: string,\n    parentSchema?: SchemaObject,\n    keyIndex?: string | number\n  ) => void;\n\n  interface Options {\n    allKeys?: boolean;\n    cb?:\n      | Callback\n      | {\n          pre?: Callback;\n          post?: Callback;\n        };\n  }\n}\n\nexport = traverse;\n/README.md\r\u0016# json-schema-traverse\nTraverse JSON Schema passing each schema object to callback\n\n[![build](https://github.com/epoberezkin/json-schema-traverse/workflows/build/badge.svg)](https://github.com/epoberezkin/json-schema-traverse/actions?query=workflow%3Abuild)\n[![npm](https://img.shields.io/npm/v/json-schema-traverse)](https://www.npmjs.com/package/json-schema-traverse)\n[![coverage](https://coveralls.io/repos/github/epoberezkin/json-schema-traverse/badge.svg?branch=master)](https://coveralls.io/github/epoberezkin/json-schema-traverse?branch=master)\n\n\n## Install\n\n```\nnpm install json-schema-traverse\n```\n\n\n## Usage\n\n```javascript\nconst traverse = require('json-schema-traverse');\nconst schema = {\n  properties: {\n    foo: {type: 'string'},\n    bar: {type: 'integer'}\n  }\n};\n\ntraverse(schema, {cb});\n// cb is called 3 times with:\n// 1. root schema\n// 2. {type: 'string'}\n// 3. {type: 'integer'}\n\n// Or:\n\ntraverse(schema, {cb: {pre, post}});\n// pre is called 3 times with:\n// 1. root schema\n// 2. {type: 'string'}\n// 3. {type: 'integer'}\n//\n// post is called 3 times with:\n// 1. {type: 'string'}\n// 2. {type: 'integer'}\n// 3. root schema\n\n```\n\nCallback function `cb` is called for each schema object (not including draft-06 boolean schemas), including the root schema, in pre-order traversal. Schema references ($ref) are not resolved, they are passed as is.  Alternatively, you can pass a `{pre, post}` object as `cb`, and then `pre` will be called before traversing child elements, and `post` will be called after all child elements have been traversed.\n\nCallback is passed these parameters:\n\n- _schema_: the current schema object\n- _JSON pointer_: from the root schema to the current schema object\n- _root schema_: the schema passed to `traverse` object\n- _parent JSON pointer_: from the root schema to the parent schema object (see below)\n- _parent keyword_: the keyword inside which this schema appears (e.g. `properties`, `anyOf`, etc.)\n- _parent schema_: not necessarily parent object/array; in the example above the parent schema for `{type: 'string'}` is the root schema\n- _index/property_: index or property name in the array/object containing multiple schemas; in the example above for `{type: 'string'}` the property name is `'foo'`\n\n\n## Traverse objects in all unknown keywords\n\n```javascript\nconst traverse = require('json-schema-traverse');\nconst schema = {\n  mySchema: {\n    minimum: 1,\n    maximum: 2\n  }\n};\n\ntraverse(schema, {allKeys: true, cb});\n// cb is called 2 times with:\n// 1. root schema\n// 2. mySchema\n```\n\nWithout option `allKeys: true` callback will be called only with root schema.\n\n\n## Enterprise support\n\njson-schema-traverse package is a part of [Tidelift enterprise subscription](https://tidelift.com/subscription/pkg/npm-json-schema-traverse?utm_source=npm-json-schema-traverse&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) - it provides a centralised commercial support to open-source software users, in addition to the support provided by software maintainers.\n\n\n## Security contact\n\nTo report a security vulnerability, please use the\n[Tidelift security contact](https://tidelift.com/security).\nTidelift will coordinate the fix and disclosure. Please do NOT report security vulnerability via GitHub issues.\n\n\n## License\n\n[MIT](https://github.com/epoberezkin/json-schema-traverse/blob/master/LICENSE)\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/anNvbmZpbGVANi4xLjA=",
    "content": "/CHANGELOG.md#6.1.0 / 2020-10-31\n------------------\n\n- Add `finalEOL` option to disable writing final EOL ([#115](https://github.com/jprichardson/node-jsonfile/issues/115), [#137](https://github.com/jprichardson/node-jsonfile/pull/137))\n- Update dependency ([#138](https://github.com/jprichardson/node-jsonfile/pull/138))\n\n6.0.1 / 2020-03-07\n------------------\n\n- Update dependency ([#130](https://github.com/jprichardson/node-jsonfile/pull/130))\n- Fix code style ([#129](https://github.com/jprichardson/node-jsonfile/pull/129))\n\n6.0.0 / 2020-02-24\n------------------\n\n- **BREAKING:** Drop support for Node 6 & 8 ([#128](https://github.com/jprichardson/node-jsonfile/pull/128))\n- **BREAKING:** Do not allow passing `null` as options to `readFile()` or `writeFile()` ([#128](https://github.com/jprichardson/node-jsonfile/pull/128))\n- Refactor internals ([#128](https://github.com/jprichardson/node-jsonfile/pull/128))\n\n5.0.0 / 2018-09-08\n------------------\n\n- **BREAKING:** Drop Node 4 support\n- **BREAKING:** If no callback is passed to an asynchronous method, a promise is now returned ([#109](https://github.com/jprichardson/node-jsonfile/pull/109))\n- Cleanup docs\n\n4.0.0 / 2017-07-12\n------------------\n\n- **BREAKING:** Remove global `spaces` option.\n- **BREAKING:** Drop support for Node 0.10, 0.12, and io.js.\n- Remove undocumented `passParsingErrors` option.\n- Added `EOL` override option to `writeFile` when using `spaces`. [#89]\n\n3.0.1 / 2017-07-05\n------------------\n\n- Fixed bug in `writeFile` when there was a serialization error & no callback was passed. In previous versions, an empty file would be written; now no file is written.\n\n3.0.0 / 2017-04-25\n------------------\n\n- Changed behavior of `throws` option for `readFileSync`; now does not throw filesystem errors when `throws` is `false`\n\n2.4.0 / 2016-09-15\n------------------\n### Changed\n- added optional support for `graceful-fs` [#62]\n\n2.3.1 / 2016-05-13\n------------------\n- fix to support BOM. [#45][#45]\n\n2.3.0 / 2016-04-16\n------------------\n- add `throws` to `readFile()`. See [#39][#39]\n- add support for any arbitrary `fs` module. Useful with [mock-fs](https://www.npmjs.com/package/mock-fs)\n\n2.2.3 / 2015-10-14\n------------------\n- include file name in parse error. See: https://github.com/jprichardson/node-jsonfile/pull/34\n\n2.2.2 / 2015-09-16\n------------------\n- split out tests into separate files\n- fixed `throws` when set to `true` in `readFileSync()`. See: https://github.com/jprichardson/node-jsonfile/pull/33\n\n2.2.1 / 2015-06-25\n------------------\n- fixed regression when passing in string as encoding for options in `writeFile()` and `writeFileSync()`. See: https://github.com/jprichardson/node-jsonfile/issues/28\n\n2.2.0 / 2015-06-25\n------------------\n- added `options.spaces` to `writeFile()` and `writeFileSync()`\n\n2.1.2 / 2015-06-22\n------------------\n- fixed if passed `readFileSync(file, 'utf8')`. See: https://github.com/jprichardson/node-jsonfile/issues/25\n\n2.1.1 / 2015-06-19\n------------------\n- fixed regressions if `null` is passed for options. See: https://github.com/jprichardson/node-jsonfile/issues/24\n\n2.1.0 / 2015-06-19\n------------------\n- cleanup: JavaScript Standard Style, rename files, dropped terst for assert\n- methods now support JSON revivers/replacers\n\n2.0.1 / 2015-05-24\n------------------\n- update license attribute https://github.com/jprichardson/node-jsonfile/pull/21\n\n2.0.0 / 2014-07-28\n------------------\n* added `\\n` to end of file on write. [#14](https://github.com/jprichardson/node-jsonfile/pull/14)\n* added `options.throws` to `readFileSync()`\n* dropped support for Node v0.8\n\n1.2.0 / 2014-06-29\n------------------\n* removed semicolons\n* bugfix: passed `options` to `fs.readFile` and `fs.readFileSync`. This technically changes behavior, but\nchanges it according to docs. [#12][#12]\n\n1.1.1 / 2013-11-11\n------------------\n* fixed catching of callback bug (ffissore / #5)\n\n1.1.0 / 2013-10-11\n------------------\n* added `options` param to methods, (seanodell / #4)\n\n1.0.1 / 2013-09-05\n------------------\n* removed `homepage` field from package.json to remove NPM warning\n\n1.0.0 / 2013-06-28\n------------------\n* added `.npmignore`, #1\n* changed spacing default from `4` to `2` to follow Node conventions\n\n0.0.1 / 2012-09-10\n------------------\n* Initial release.\n\n[#89]: https://github.com/jprichardson/node-jsonfile/pull/89\n[#45]: https://github.com/jprichardson/node-jsonfile/issues/45    \"Reading of UTF8-encoded (w/ BOM) files fails\"\n[#44]: https://github.com/jprichardson/node-jsonfile/issues/44    \"Extra characters in written file\"\n[#43]: https://github.com/jprichardson/node-jsonfile/issues/43    \"Prettyfy json when written to file\"\n[#42]: https://github.com/jprichardson/node-jsonfile/pull/42      \"Moved fs.readFileSync within the try/catch\"\n[#41]: https://github.com/jprichardson/node-jsonfile/issues/41    \"Linux: Hidden file not working\"\n[#40]: https://github.com/jprichardson/node-jsonfile/issues/40    \"autocreate folder doesn't work from Path-value\"\n[#39]: https://github.com/jprichardson/node-jsonfile/pull/39      \"Add `throws` option for readFile (async)\"\n[#38]: https://github.com/jprichardson/node-jsonfile/pull/38      \"Update README.md writeFile[Sync] signature\"\n[#37]: https://github.com/jprichardson/node-jsonfile/pull/37      \"support append file\"\n[#36]: https://github.com/jprichardson/node-jsonfile/pull/36      \"Add typescript definition file.\"\n[#35]: https://github.com/jprichardson/node-jsonfile/pull/35      \"Add typescript definition file.\"\n[#34]: https://github.com/jprichardson/node-jsonfile/pull/34      \"readFile JSON parse error includes filename\"\n[#33]: https://github.com/jprichardson/node-jsonfile/pull/33      \"fix throw->throws typo in readFileSync()\"\n[#32]: https://github.com/jprichardson/node-jsonfile/issues/32    \"readFile & readFileSync can possible have strip-comments as an option?\"\n[#31]: https://github.com/jprichardson/node-jsonfile/pull/31      \"[Modify] Support string include is unicode escape string\"\n[#30]: https://github.com/jprichardson/node-jsonfile/issues/30    \"How to use Jsonfile package in Meteor.js App?\"\n[#29]: https://github.com/jprichardson/node-jsonfile/issues/29    \"writefile callback if no error?\"\n[#28]: https://github.com/jprichardson/node-jsonfile/issues/28    \"writeFile options argument broken \"\n[#27]: https://github.com/jprichardson/node-jsonfile/pull/27      \"Use svg instead of png to get better image quality\"\n[#26]: https://github.com/jprichardson/node-jsonfile/issues/26    \"Breaking change to fs-extra\"\n[#25]: https://github.com/jprichardson/node-jsonfile/issues/25    \"support string encoding param for read methods\"\n[#24]: https://github.com/jprichardson/node-jsonfile/issues/24    \"readFile: Passing in null options with a callback throws an error\"\n[#23]: https://github.com/jprichardson/node-jsonfile/pull/23      \"Add appendFile and appendFileSync\"\n[#22]: https://github.com/jprichardson/node-jsonfile/issues/22    \"Default value for spaces in readme.md is outdated\"\n[#21]: https://github.com/jprichardson/node-jsonfile/pull/21      \"Update license attribute\"\n[#20]: https://github.com/jprichardson/node-jsonfile/issues/20    \"Add simple caching functionallity\"\n[#19]: https://github.com/jprichardson/node-jsonfile/pull/19      \"Add appendFileSync method\"\n[#18]: https://github.com/jprichardson/node-jsonfile/issues/18    \"Add updateFile and updateFileSync methods\"\n[#17]: https://github.com/jprichardson/node-jsonfile/issues/17    \"seem read & write sync has sequentially problem\"\n[#16]: https://github.com/jprichardson/node-jsonfile/pull/16      \"export spaces defaulted to null\"\n[#15]: https://github.com/jprichardson/node-jsonfile/issues/15    \"`jsonfile.spaces` should default to `null`\"\n[#14]: https://github.com/jprichardson/node-jsonfile/pull/14      \"Add EOL at EOF\"\n[#13]: https://github.com/jprichardson/node-jsonfile/issues/13    \"Add a final newline\"\n[#12]: https://github.com/jprichardson/node-jsonfile/issues/12    \"readFile doesn't accept options\"\n[#11]: https://github.com/jprichardson/node-jsonfile/pull/11      \"Added try,catch to readFileSync\"\n[#10]: https://github.com/jprichardson/node-jsonfile/issues/10    \"No output or error from writeFile\"\n[#9]: https://github.com/jprichardson/node-jsonfile/pull/9        \"Change 'js' to 'jf' in example.\"\n[#8]: https://github.com/jprichardson/node-jsonfile/pull/8        \"Updated forgotten module.exports to me.\"\n[#7]: https://github.com/jprichardson/node-jsonfile/pull/7        \"Add file name in error message\"\n[#6]: https://github.com/jprichardson/node-jsonfile/pull/6        \"Use graceful-fs when possible\"\n[#5]: https://github.com/jprichardson/node-jsonfile/pull/5        \"Jsonfile doesn't behave nicely when used inside a test suite.\"\n[#4]: https://github.com/jprichardson/node-jsonfile/pull/4        \"Added options parameter to writeFile and writeFileSync\"\n[#3]: https://github.com/jprichardson/node-jsonfile/issues/3      \"test2\"\n[#2]: https://github.com/jprichardson/node-jsonfile/issues/2      \"homepage field must be a string url. Deleted.\"\n[#1]: https://github.com/jprichardson/node-jsonfile/pull/1        \"adding an `.npmignore` file\"\n/utils.js\u0001function stringify (obj, { EOL = '\\n', finalEOL = true, replacer = null, spaces } = {}) {\n  const EOF = finalEOL ? EOL : ''\n  const str = JSON.stringify(obj, replacer, spaces)\n\n  return str.replace(/\\n/g, EOL) + EOF\n}\n\nfunction stripBom (content) {\n  // we do this because JSON.parse would convert it to a utf8 string if encoding wasn't specified\n  if (Buffer.isBuffer(content)) content = content.toString('utf8')\n  return content.replace(/^\\uFEFF/, '')\n}\n\nmodule.exports = { stringify, stripBom }\n/README.md\u0018Node.js - jsonfile\n================\n\nEasily read/write JSON files in Node.js. _Note: this module cannot be used in the browser._\n\n[![npm Package](https://img.shields.io/npm/v/jsonfile.svg?style=flat-square)](https://www.npmjs.org/package/jsonfile)\n[![build status](https://secure.travis-ci.org/jprichardson/node-jsonfile.svg)](http://travis-ci.org/jprichardson/node-jsonfile)\n[![windows Build status](https://img.shields.io/appveyor/ci/jprichardson/node-jsonfile/master.svg?label=windows%20build)](https://ci.appveyor.com/project/jprichardson/node-jsonfile/branch/master)\n\n<a href=\"https://github.com/feross/standard\"><img src=\"https://cdn.rawgit.com/feross/standard/master/sticker.svg\" alt=\"Standard JavaScript\" width=\"100\"></a>\n\nWhy?\n----\n\nWriting `JSON.stringify()` and then `fs.writeFile()` and `JSON.parse()` with `fs.readFile()` enclosed in `try/catch` blocks became annoying.\n\n\n\nInstallation\n------------\n\n    npm install --save jsonfile\n\n\n\nAPI\n---\n\n* [`readFile(filename, [options], callback)`](#readfilefilename-options-callback)\n* [`readFileSync(filename, [options])`](#readfilesyncfilename-options)\n* [`writeFile(filename, obj, [options], callback)`](#writefilefilename-obj-options-callback)\n* [`writeFileSync(filename, obj, [options])`](#writefilesyncfilename-obj-options)\n\n----\n\n### readFile(filename, [options], callback)\n\n`options` (`object`, default `undefined`): Pass in any [`fs.readFile`](https://nodejs.org/api/fs.html#fs_fs_readfile_path_options_callback) options or set `reviver` for a [JSON reviver](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse).\n  - `throws` (`boolean`, default: `true`). If `JSON.parse` throws an error, pass this error to the callback.\n  If `false`, returns `null` for the object.\n\n\n```js\nconst jsonfile = require('jsonfile')\nconst file = '/tmp/data.json'\njsonfile.readFile(file, function (err, obj) {\n  if (err) console.error(err)\n  console.dir(obj)\n})\n```\n\nYou can also use this method with promises. The `readFile` method will return a promise if you do not pass a callback function.\n\n```js\nconst jsonfile = require('jsonfile')\nconst file = '/tmp/data.json'\njsonfile.readFile(file)\n  .then(obj => console.dir(obj))\n  .catch(error => console.error(error))\n```\n\n----\n\n### readFileSync(filename, [options])\n\n`options` (`object`, default `undefined`): Pass in any [`fs.readFileSync`](https://nodejs.org/api/fs.html#fs_fs_readfilesync_path_options) options or set `reviver` for a [JSON reviver](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse).\n- `throws` (`boolean`, default: `true`). If an error is encountered reading or parsing the file, throw the error. If `false`, returns `null` for the object.\n\n```js\nconst jsonfile = require('jsonfile')\nconst file = '/tmp/data.json'\n\nconsole.dir(jsonfile.readFileSync(file))\n```\n\n----\n\n### writeFile(filename, obj, [options], callback)\n\n`options`: Pass in any [`fs.writeFile`](https://nodejs.org/api/fs.html#fs_fs_writefile_file_data_options_callback) options or set `replacer` for a [JSON replacer](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify). Can also pass in `spaces`, or override `EOL` string or set `finalEOL` flag as `false` to not save the file with `EOL` at the end.\n\n\n```js\nconst jsonfile = require('jsonfile')\n\nconst file = '/tmp/data.json'\nconst obj = { name: 'JP' }\n\njsonfile.writeFile(file, obj, function (err) {\n  if (err) console.error(err)\n})\n```\nOr use with promises as follows:\n\n```js\nconst jsonfile = require('jsonfile')\n\nconst file = '/tmp/data.json'\nconst obj = { name: 'JP' }\n\njsonfile.writeFile(file, obj)\n  .then(res => {\n    console.log('Write complete')\n  })\n  .catch(error => console.error(error))\n```\n\n\n**formatting with spaces:**\n\n```js\nconst jsonfile = require('jsonfile')\n\nconst file = '/tmp/data.json'\nconst obj = { name: 'JP' }\n\njsonfile.writeFile(file, obj, { spaces: 2 }, function (err) {\n  if (err) console.error(err)\n})\n```\n\n**overriding EOL:**\n\n```js\nconst jsonfile = require('jsonfile')\n\nconst file = '/tmp/data.json'\nconst obj = { name: 'JP' }\n\njsonfile.writeFile(file, obj, { spaces: 2, EOL: '\\r\\n' }, function (err) {\n  if (err) console.error(err)\n})\n```\n\n\n**disabling the EOL at the end of file:**\n\n```js\nconst jsonfile = require('jsonfile')\n\nconst file = '/tmp/data.json'\nconst obj = { name: 'JP' }\n\njsonfile.writeFile(file, obj, { spaces: 2, finalEOL: false }, function (err) {\n  if (err) console.log(err)\n})\n```\n\n**appending to an existing JSON file:**\n\nYou can use `fs.writeFile` option `{ flag: 'a' }` to achieve this.\n\n```js\nconst jsonfile = require('jsonfile')\n\nconst file = '/tmp/mayAlreadyExistedData.json'\nconst obj = { name: 'JP' }\n\njsonfile.writeFile(file, obj, { flag: 'a' }, function (err) {\n  if (err) console.error(err)\n})\n```\n\n----\n\n### writeFileSync(filename, obj, [options])\n\n`options`: Pass in any [`fs.writeFileSync`](https://nodejs.org/api/fs.html#fs_fs_writefilesync_file_data_options) options or set `replacer` for a [JSON replacer](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify). Can also pass in `spaces`, or override `EOL` string or set `finalEOL` flag as `false` to not save the file with `EOL` at the end.\n\n```js\nconst jsonfile = require('jsonfile')\n\nconst file = '/tmp/data.json'\nconst obj = { name: 'JP' }\n\njsonfile.writeFileSync(file, obj)\n```\n\n**formatting with spaces:**\n\n```js\nconst jsonfile = require('jsonfile')\n\nconst file = '/tmp/data.json'\nconst obj = { name: 'JP' }\n\njsonfile.writeFileSync(file, obj, { spaces: 2 })\n```\n\n**overriding EOL:**\n\n```js\nconst jsonfile = require('jsonfile')\n\nconst file = '/tmp/data.json'\nconst obj = { name: 'JP' }\n\njsonfile.writeFileSync(file, obj, { spaces: 2, EOL: '\\r\\n' })\n```\n\n**disabling the EOL at the end of file:**\n\n```js\nconst jsonfile = require('jsonfile')\n\nconst file = '/tmp/data.json'\nconst obj = { name: 'JP' }\n\njsonfile.writeFileSync(file, obj, { spaces: 2, finalEOL: false })\n```\n\n**appending to an existing JSON file:**\n\nYou can use `fs.writeFileSync` option `{ flag: 'a' }` to achieve this.\n\n```js\nconst jsonfile = require('jsonfile')\n\nconst file = '/tmp/mayAlreadyExistedData.json'\nconst obj = { name: 'JP' }\n\njsonfile.writeFileSync(file, obj, { flag: 'a' })\n```\n\nLicense\n-------\n\n(MIT License)\n\nCopyright 2012-2016, JP Richardson  <jprichardson@gmail.com>\n/index.js\u0007llet _fs\ntry {\n  _fs = require('graceful-fs')\n} catch (_) {\n  _fs = require('fs')\n}\nconst universalify = require('universalify')\nconst { stringify, stripBom } = require('./utils')\n\nasync function _readFile (file, options = {}) {\n  if (typeof options === 'string') {\n    options = { encoding: options }\n  }\n\n  const fs = options.fs || _fs\n\n  const shouldThrow = 'throws' in options ? options.throws : true\n\n  let data = await universalify.fromCallback(fs.readFile)(file, options)\n\n  data = stripBom(data)\n\n  let obj\n  try {\n    obj = JSON.parse(data, options ? options.reviver : null)\n  } catch (err) {\n    if (shouldThrow) {\n      err.message = `${file}: ${err.message}`\n      throw err\n    } else {\n      return null\n    }\n  }\n\n  return obj\n}\n\nconst readFile = universalify.fromPromise(_readFile)\n\nfunction readFileSync (file, options = {}) {\n  if (typeof options === 'string') {\n    options = { encoding: options }\n  }\n\n  const fs = options.fs || _fs\n\n  const shouldThrow = 'throws' in options ? options.throws : true\n\n  try {\n    let content = fs.readFileSync(file, options)\n    content = stripBom(content)\n    return JSON.parse(content, options.reviver)\n  } catch (err) {\n    if (shouldThrow) {\n      err.message = `${file}: ${err.message}`\n      throw err\n    } else {\n      return null\n    }\n  }\n}\n\nasync function _writeFile (file, obj, options = {}) {\n  const fs = options.fs || _fs\n\n  const str = stringify(obj, options)\n\n  await universalify.fromCallback(fs.writeFile)(file, str, options)\n}\n\nconst writeFile = universalify.fromPromise(_writeFile)\n\nfunction writeFileSync (file, obj, options = {}) {\n  const fs = options.fs || _fs\n\n  const str = stringify(obj, options)\n  // not sure if fs.writeFileSync returns anything, but just in case\n  return fs.writeFileSync(file, str, options)\n}\n\nconst jsonfile = {\n  readFile,\n  readFileSync,\n  writeFile,\n  writeFileSync\n}\n\nmodule.exports = jsonfile\n/LICENSE\u0004V(The MIT License)\n\nCopyright (c) 2012-2015, JP Richardson <jprichardson@gmail.com>\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files\n(the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify,\n merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS\nOR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,\n ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n/package.json\u0002{\n  \"name\": \"jsonfile\",\n  \"version\": \"6.1.0\",\n  \"description\": \"Easily read/write JSON files.\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git@github.com:jprichardson/node-jsonfile.git\"\n  },\n  \"keywords\": [\n    \"read\",\n    \"write\",\n    \"file\",\n    \"json\",\n    \"fs\",\n    \"fs-extra\"\n  ],\n  \"author\": \"JP Richardson <jprichardson@gmail.com>\",\n  \"license\": \"MIT\",\n  \"dependencies\": {\n    \"universalify\": \"^2.0.0\"\n  },\n  \"optionalDependencies\": {\n    \"graceful-fs\": \"^4.1.6\"\n  },\n  \"devDependencies\": {\n    \"mocha\": \"^8.2.0\",\n    \"rimraf\": \"^2.4.0\",\n    \"standard\": \"^16.0.1\"\n  },\n  \"main\": \"index.js\",\n  \"files\": [\n    \"index.js\",\n    \"utils.js\"\n  ],\n  \"scripts\": {\n    \"lint\": \"standard\",\n    \"test\": \"npm run lint && npm run unit\",\n    \"unit\": \"mocha\"\n  }\n}\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/b24tZXhpdC1sZWFrLWZyZWVAMi4xLjA=",
    "content": "/test/fixtures/unregister.js\u0001'use strict'\n\nconst { register, unregister } = require('../..')\nconst assert = require('assert')\n\nfunction setup () {\n  const obj = { foo: 'bar' }\n  register(obj, shutdown)\n  setImmediate(function () {\n    unregister(obj)\n    unregister(obj) // twice, this should not throw\n  })\n}\n\nlet shutdownCalled = false\nfunction shutdown (obj) {\n  shutdownCalled = true\n}\n\nsetup()\n\nprocess.on('exit', function () {\n  assert.strictEqual(shutdownCalled, false)\n})\n/test/fixtures/gc-not-close.js\u0001'use strict'\n\nconst { register } = require('../..')\nconst assert = require('assert')\n\nfunction setup () {\n  let obj = { foo: 'bar' }\n  register(obj, shutdown)\n  setImmediate(function () {\n    obj = undefined\n    gc() // eslint-disable-line\n  })\n}\n\nlet shutdownCalled = false\nfunction shutdown (obj) {\n  shutdownCalled = true\n}\n\nsetup()\n\nprocess.on('exit', function () {\n  assert.strictEqual(shutdownCalled, false)\n})\n/.github/workflows/ci.yml\u00034name: CI\non:\n  push:\n    paths-ignore:\n        - 'docs/**'\n        - '*.md'\n  pull_request:\n    paths-ignore:\n        - 'docs/**'\n        - '*.md'\njobs:\n  test:\n    runs-on: ${{ matrix.os }}\n\n    strategy:\n      matrix:\n        node-version: [14, 16, 18]\n        os: [macos-latest, ubuntu-latest, windows-latest]\n\n    steps:\n\n      - uses: actions/checkout@v3\n\n      - name: Use Node.js\n        uses: actions/setup-node@v3\n        with:\n          node-version: ${{ matrix.node-version }}\n\n      - name: Install\n        run: |\n          npm install --ignore-scripts\n\n      - name: Run tests\n        run: |\n          npm run test\n\n  automerge:\n    needs: test\n    runs-on: ubuntu-latest\n    steps:\n      - uses: fastify/github-action-merge-dependabot@v3.2\n        with:\n          github-token: ${{ secrets.GITHUB_TOKEN }}\n/index.js\u0006'use strict'\n\nconst refs = {\n  exit: [],\n  beforeExit: []\n}\nconst functions = {\n  exit: onExit,\n  beforeExit: onBeforeExit\n}\nconst registry = new FinalizationRegistry(clear)\n\nfunction install (event) {\n  if (refs[event].length > 0) {\n    return\n  }\n\n  process.on(event, functions[event])\n}\n\nfunction uninstall (event) {\n  if (refs[event].length > 0) {\n    return\n  }\n  process.removeListener(event, functions[event])\n}\n\nfunction onExit () {\n  callRefs('exit')\n}\n\nfunction onBeforeExit () {\n  callRefs('beforeExit')\n}\n\nfunction callRefs (event) {\n  for (const ref of refs[event]) {\n    const obj = ref.deref()\n    const fn = ref.fn\n\n    // This should always happen, however GC is\n    // undeterministic so it might not happen.\n    /* istanbul ignore else */\n    if (obj !== undefined) {\n      fn(obj, event)\n    }\n  }\n}\n\nfunction clear (ref) {\n  for (const event of ['exit', 'beforeExit']) {\n    const index = refs[event].indexOf(ref)\n    refs[event].splice(index, index + 1)\n    uninstall(event)\n  }\n}\n\nfunction _register (event, obj, fn) {\n  if (obj === undefined) {\n    throw new Error('the object can\\'t be undefined')\n  }\n  install(event)\n  const ref = new WeakRef(obj)\n  ref.fn = fn\n\n  registry.register(obj, ref)\n  refs[event].push(ref)\n}\n\nfunction register (obj, fn) {\n  _register('exit', obj, fn)\n}\n\nfunction registerBeforeExit (obj, fn) {\n  _register('beforeExit', obj, fn)\n}\n\nfunction unregister (obj) {\n  registry.unregister(obj)\n  for (const event of ['exit', 'beforeExit']) {\n    refs[event] = refs[event].filter((ref) => {\n      const _obj = ref.deref()\n      return _obj && _obj !== obj\n    })\n    uninstall(event)\n  }\n}\n\nmodule.exports = {\n  register,\n  registerBeforeExit,\n  unregister\n}\n/LICENSE\u0004/MIT License\n\nCopyright (c) 2021 Matteo Collina\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n/README.md\u0005\u0004# on-exit-leak-free\n\nThis module helps dispose of an object gracefully when the Node.js process exits.\nIt executes a function with a given parameter\non [`'exit'`](https://nodejs.org/api/process.html#event-exit) without leaking memory,\ncleaning things up appropriately if the object is garbage collected.\n\nRequires `WeakRef` and `FinalizationRegistry`, i.e. use Node v14+.\n\n## Install\n\n```bash\nnpm i on-exit-leak-free\n```\n\n## Example\n\n```js\n'use strict'\n\nconst { register, unregister } = require('on-exit-leak-free')\nconst assert = require('assert')\n\nfunction setup () {\n  // This object can be safely garbage collected,\n  // and the resulting shutdown function will not be called.\n  // There are no leaks.\n  const obj = { foo: 'bar' }\n  register(obj, shutdown)\n  // use registerBeforeExit(obj, shutdown) to execute the function only\n  // on beforeExit\n  // call unregister(obj) to remove\n}\n\nlet shutdownCalled = false\n\n// Please make sure that the function passed to register()\n// does not create a closure around unnecessary objects.\nfunction shutdown (obj, eventName) {\n  console.log(eventName) // beforeExit\n  shutdownCalled = true\n  assert.strictEqual(obj.foo, 'bar')\n}\n\nsetup()\n\nprocess.on('exit', function () {\n  assert.strictEqual(shutdownCalled, true)\n})\n```\n\n## License\n\nMIT\n/test/fixtures/close.js\u0001q'use strict'\n\nconst { register } = require('../..')\nconst assert = require('assert')\n\nfunction setup () {\n  const obj = { foo: 'bar' }\n  register(obj, shutdown)\n}\n\nlet shutdownCalled = false\nfunction shutdown (obj) {\n  shutdownCalled = true\n  assert.strictEqual(obj.foo, 'bar')\n}\n\nsetup()\n\nprocess.on('exit', function () {\n  assert.strictEqual(shutdownCalled, true)\n})\n/test/base.test.js\u0002['use strict'\n\nconst { test } = require('tap')\nconst { fork } = require('child_process')\nconst { join } = require('path')\nconst { once } = require('events')\nconst { register } = require('..')\n\nconst files = [\n  'close.js',\n  'beforeExit',\n  'gc-not-close.js',\n  'unregister.js'\n]\n\nfor (const file of files) {\n  test(file, async ({ equal }) => {\n    const child = fork(join(__dirname, 'fixtures', file), [], {\n      execArgv: ['--expose-gc']\n    })\n\n    const [code] = await once(child, 'close')\n\n    equal(code, 0)\n  })\n}\n\ntest('undefined', async ({ throws }) => {\n  throws(() => register(undefined))\n})\n/test/fixtures/beforeExit.js\u0002'use strict'\n\nconst { unregister, registerBeforeExit } = require('../..')\nconst assert = require('assert')\n\nfunction setup () {\n  const obj = { foo: 'bar' }\n  registerBeforeExit(obj, shutdown)\n}\n\nlet shutdownCalled = false\nlet timeoutFinished = false\nfunction shutdown (obj, event) {\n  console.log(event)\n  shutdownCalled = true\n  if (event === 'beforeExit') {\n    setTimeout(function () {\n      timeoutFinished = true\n      assert.strictEqual(obj.foo, 'bar')\n      unregister(obj)\n    }, 100)\n    process.on('beforeExit', function () {\n      assert.strictEqual(timeoutFinished, true)\n    })\n  } else {\n    throw new Error('different event')\n  }\n}\n\nsetup()\n\nprocess.on('exit', function () {\n  assert.strictEqual(shutdownCalled, true)\n})\n/package.json\u0003A{\n  \"name\": \"on-exit-leak-free\",\n  \"version\": \"2.1.0\",\n  \"description\": \"Execute a function on exit without leaking memory, allowing all objects to be garbage collected\",\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"test\": \"standard | snazzy && tap test/*.js\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/mcollina/on-exit-or-gc.git\"\n  },\n  \"keywords\": [\n    \"weak\",\n    \"reference\",\n    \"finalization\",\n    \"registry\",\n    \"process\",\n    \"exit\",\n    \"garbage\",\n    \"collector\"\n  ],\n  \"author\": \"Matteo Collina <hello@matteocollina.com>\",\n  \"license\": \"MIT\",\n  \"bugs\": {\n    \"url\": \"https://github.com/mcollina/on-exit-or-gc/issues\"\n  },\n  \"homepage\": \"https://github.com/mcollina/on-exit-or-gc#readme\",\n  \"devDependencies\": {\n    \"snazzy\": \"^9.0.0\",\n    \"standard\": \"^17.0.0\",\n    \"tap\": \"^16.0.0\"\n  }\n}\n /test/event-emitter-leak.test.js\u0001b'use strict'\n\nconst t = require('tap')\nconst { register, unregister } = require('..')\n\nprocess.on('warning', () => {\n  t.fail('warning emitted')\n})\n\nconst objs = []\nfor (let i = 0; i < 20; i++) {\n  const obj = { i }\n  objs.push(obj)\n  register(obj, shutdown)\n}\n\nfor (const obj of objs) {\n  unregister(obj)\n}\n\nt.pass('completed')\n\nfunction shutdown () {}\n/.github/dependabot.ymlversion: 2\nupdates:\n- package-ecosystem: github-actions\n  directory: '/'\n  schedule:\n    interval: daily\n  open-pull-requests-limit: 10\n- package-ecosystem: npm\n  directory: '/'\n  schedule:\n    interval: daily\n  open-pull-requests-limit: 10"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/b24tZmluaXNoZWRAMi40LjE=",
    "content": "/package.json\u0004!{\n  \"name\": \"on-finished\",\n  \"description\": \"Execute a callback when a request closes, finishes, or errors\",\n  \"version\": \"2.4.1\",\n  \"contributors\": [\n    \"Douglas Christopher Wilson <doug@somethingdoug.com>\",\n    \"Jonathan Ong <me@jongleberry.com> (http://jongleberry.com)\"\n  ],\n  \"license\": \"MIT\",\n  \"repository\": \"jshttp/on-finished\",\n  \"dependencies\": {\n    \"ee-first\": \"1.1.1\"\n  },\n  \"devDependencies\": {\n    \"eslint\": \"7.32.0\",\n    \"eslint-config-standard\": \"14.1.1\",\n    \"eslint-plugin-import\": \"2.25.4\",\n    \"eslint-plugin-markdown\": \"2.2.1\",\n    \"eslint-plugin-node\": \"11.1.0\",\n    \"eslint-plugin-promise\": \"5.2.0\",\n    \"eslint-plugin-standard\": \"4.1.0\",\n    \"mocha\": \"9.2.1\",\n    \"nyc\": \"15.1.0\"\n  },\n  \"engines\": {\n    \"node\": \">= 0.8\"\n  },\n  \"files\": [\n    \"HISTORY.md\",\n    \"LICENSE\",\n    \"index.js\"\n  ],\n  \"scripts\": {\n    \"lint\": \"eslint .\",\n    \"test\": \"mocha --reporter spec --bail --check-leaks test/\",\n    \"test-ci\": \"nyc --reporter=lcovonly --reporter=text npm test\",\n    \"test-cov\": \"nyc --reporter=html --reporter=text npm test\"\n  }\n}\n/index.js\u0011N/*!\n * on-finished\n * Copyright(c) 2013 Jonathan Ong\n * Copyright(c) 2014 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = onFinished\nmodule.exports.isFinished = isFinished\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar asyncHooks = tryRequireAsyncHooks()\nvar first = require('ee-first')\n\n/**\n * Variables.\n * @private\n */\n\n/* istanbul ignore next */\nvar defer = typeof setImmediate === 'function'\n  ? setImmediate\n  : function (fn) { process.nextTick(fn.bind.apply(fn, arguments)) }\n\n/**\n * Invoke callback when the response has finished, useful for\n * cleaning up resources afterwards.\n *\n * @param {object} msg\n * @param {function} listener\n * @return {object}\n * @public\n */\n\nfunction onFinished (msg, listener) {\n  if (isFinished(msg) !== false) {\n    defer(listener, null, msg)\n    return msg\n  }\n\n  // attach the listener to the message\n  attachListener(msg, wrap(listener))\n\n  return msg\n}\n\n/**\n * Determine if message is already finished.\n *\n * @param {object} msg\n * @return {boolean}\n * @public\n */\n\nfunction isFinished (msg) {\n  var socket = msg.socket\n\n  if (typeof msg.finished === 'boolean') {\n    // OutgoingMessage\n    return Boolean(msg.finished || (socket && !socket.writable))\n  }\n\n  if (typeof msg.complete === 'boolean') {\n    // IncomingMessage\n    return Boolean(msg.upgrade || !socket || !socket.readable || (msg.complete && !msg.readable))\n  }\n\n  // don't know\n  return undefined\n}\n\n/**\n * Attach a finished listener to the message.\n *\n * @param {object} msg\n * @param {function} callback\n * @private\n */\n\nfunction attachFinishedListener (msg, callback) {\n  var eeMsg\n  var eeSocket\n  var finished = false\n\n  function onFinish (error) {\n    eeMsg.cancel()\n    eeSocket.cancel()\n\n    finished = true\n    callback(error)\n  }\n\n  // finished on first message event\n  eeMsg = eeSocket = first([[msg, 'end', 'finish']], onFinish)\n\n  function onSocket (socket) {\n    // remove listener\n    msg.removeListener('socket', onSocket)\n\n    if (finished) return\n    if (eeMsg !== eeSocket) return\n\n    // finished on first socket event\n    eeSocket = first([[socket, 'error', 'close']], onFinish)\n  }\n\n  if (msg.socket) {\n    // socket already assigned\n    onSocket(msg.socket)\n    return\n  }\n\n  // wait for socket to be assigned\n  msg.on('socket', onSocket)\n\n  if (msg.socket === undefined) {\n    // istanbul ignore next: node.js 0.8 patch\n    patchAssignSocket(msg, onSocket)\n  }\n}\n\n/**\n * Attach the listener to the message.\n *\n * @param {object} msg\n * @return {function}\n * @private\n */\n\nfunction attachListener (msg, listener) {\n  var attached = msg.__onFinished\n\n  // create a private single listener with queue\n  if (!attached || !attached.queue) {\n    attached = msg.__onFinished = createListener(msg)\n    attachFinishedListener(msg, attached)\n  }\n\n  attached.queue.push(listener)\n}\n\n/**\n * Create listener on message.\n *\n * @param {object} msg\n * @return {function}\n * @private\n */\n\nfunction createListener (msg) {\n  function listener (err) {\n    if (msg.__onFinished === listener) msg.__onFinished = null\n    if (!listener.queue) return\n\n    var queue = listener.queue\n    listener.queue = null\n\n    for (var i = 0; i < queue.length; i++) {\n      queue[i](err, msg)\n    }\n  }\n\n  listener.queue = []\n\n  return listener\n}\n\n/**\n * Patch ServerResponse.prototype.assignSocket for node.js 0.8.\n *\n * @param {ServerResponse} res\n * @param {function} callback\n * @private\n */\n\n// istanbul ignore next: node.js 0.8 patch\nfunction patchAssignSocket (res, callback) {\n  var assignSocket = res.assignSocket\n\n  if (typeof assignSocket !== 'function') return\n\n  // res.on('socket', callback) is broken in 0.8\n  res.assignSocket = function _assignSocket (socket) {\n    assignSocket.call(this, socket)\n    callback(socket)\n  }\n}\n\n/**\n * Try to require async_hooks\n * @private\n */\n\nfunction tryRequireAsyncHooks () {\n  try {\n    return require('async_hooks')\n  } catch (e) {\n    return {}\n  }\n}\n\n/**\n * Wrap function with async resource, if possible.\n * AsyncResource.bind static method backported.\n * @private\n */\n\nfunction wrap (fn) {\n  var res\n\n  // create anonymous resource\n  if (asyncHooks.AsyncResource) {\n    res = new asyncHooks.AsyncResource(fn.name || 'bound-anonymous-fn')\n  }\n\n  // incompatible node.js\n  if (!res || !res.runInAsyncScope) {\n    return fn\n  }\n\n  // return bound function\n  return res.runInAsyncScope.bind(res, fn, null)\n}\n/LICENSE\u0004(The MIT License)\n\nCopyright (c) 2013 Jonathan Ong <me@jongleberry.com>\nCopyright (c) 2014 Douglas Christopher Wilson <doug@somethingdoug.com>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n/HISTORY.md\u0007I2.4.1 / 2022-02-22\n==================\n\n  * Fix error on early async hooks implementations\n\n2.4.0 / 2022-02-21\n==================\n\n  * Prevent loss of async hooks context\n\n2.3.0 / 2015-05-26\n==================\n\n  * Add defined behavior for HTTP `CONNECT` requests\n  * Add defined behavior for HTTP `Upgrade` requests\n  * deps: ee-first@1.1.1\n\n2.2.1 / 2015-04-22\n==================\n\n  * Fix `isFinished(req)` when data buffered\n\n2.2.0 / 2014-12-22\n==================\n\n  * Add message object to callback arguments\n\n2.1.1 / 2014-10-22\n==================\n\n  * Fix handling of pipelined requests\n\n2.1.0 / 2014-08-16\n==================\n\n  * Check if `socket` is detached\n  * Return `undefined` for `isFinished` if state unknown\n\n2.0.0 / 2014-08-16\n==================\n\n  * Add `isFinished` function\n  * Move to `jshttp` organization\n  * Remove support for plain socket argument\n  * Rename to `on-finished`\n  * Support both `req` and `res` as arguments\n  * deps: ee-first@1.0.5\n\n1.2.2 / 2014-06-10\n==================\n\n  * Reduce listeners added to emitters\n    - avoids \"event emitter leak\" warnings when used multiple times on same request\n\n1.2.1 / 2014-06-08\n==================\n\n  * Fix returned value when already finished\n\n1.2.0 / 2014-06-05\n==================\n\n  * Call callback when called on already-finished socket\n\n1.1.4 / 2014-05-27\n==================\n\n  * Support node.js 0.8\n\n1.1.3 / 2014-04-30\n==================\n\n  * Make sure errors passed as instanceof `Error`\n\n1.1.2 / 2014-04-18\n==================\n\n  * Default the `socket` to passed-in object\n\n1.1.1 / 2014-01-16\n==================\n\n  * Rename module to `finished`\n\n1.1.0 / 2013-12-25\n==================\n\n  * Call callback when called on already-errored socket\n\n1.0.1 / 2013-12-20\n==================\n\n  * Actually pass the error to the callback\n\n1.0.0 / 2013-12-20\n==================\n\n  * Initial release\n/README.md\u0014(# on-finished\n\n[![NPM Version][npm-version-image]][npm-url]\n[![NPM Downloads][npm-downloads-image]][npm-url]\n[![Node.js Version][node-image]][node-url]\n[![Build Status][ci-image]][ci-url]\n[![Coverage Status][coveralls-image]][coveralls-url]\n\nExecute a callback when a HTTP request closes, finishes, or errors.\n\n## Install\n\nThis is a [Node.js](https://nodejs.org/en/) module available through the\n[npm registry](https://www.npmjs.com/). Installation is done using the\n[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally):\n\n```sh\n$ npm install on-finished\n```\n\n## API\n\n```js\nvar onFinished = require('on-finished')\n```\n\n### onFinished(res, listener)\n\nAttach a listener to listen for the response to finish. The listener will\nbe invoked only once when the response finished. If the response finished\nto an error, the first argument will contain the error. If the response\nhas already finished, the listener will be invoked.\n\nListening to the end of a response would be used to close things associated\nwith the response, like open files.\n\nListener is invoked as `listener(err, res)`.\n\n<!-- eslint-disable handle-callback-err -->\n\n```js\nonFinished(res, function (err, res) {\n  // clean up open fds, etc.\n  // err contains the error if request error'd\n})\n```\n\n### onFinished(req, listener)\n\nAttach a listener to listen for the request to finish. The listener will\nbe invoked only once when the request finished. If the request finished\nto an error, the first argument will contain the error. If the request\nhas already finished, the listener will be invoked.\n\nListening to the end of a request would be used to know when to continue\nafter reading the data.\n\nListener is invoked as `listener(err, req)`.\n\n<!-- eslint-disable handle-callback-err -->\n\n```js\nvar data = ''\n\nreq.setEncoding('utf8')\nreq.on('data', function (str) {\n  data += str\n})\n\nonFinished(req, function (err, req) {\n  // data is read unless there is err\n})\n```\n\n### onFinished.isFinished(res)\n\nDetermine if `res` is already finished. This would be useful to check and\nnot even start certain operations if the response has already finished.\n\n### onFinished.isFinished(req)\n\nDetermine if `req` is already finished. This would be useful to check and\nnot even start certain operations if the request has already finished.\n\n## Special Node.js requests\n\n### HTTP CONNECT method\n\nThe meaning of the `CONNECT` method from RFC 7231, section 4.3.6:\n\n> The CONNECT method requests that the recipient establish a tunnel to\n> the destination origin server identified by the request-target and,\n> if successful, thereafter restrict its behavior to blind forwarding\n> of packets, in both directions, until the tunnel is closed.  Tunnels\n> are commonly used to create an end-to-end virtual connection, through\n> one or more proxies, which can then be secured using TLS (Transport\n> Layer Security, [RFC5246]).\n\nIn Node.js, these request objects come from the `'connect'` event on\nthe HTTP server.\n\nWhen this module is used on a HTTP `CONNECT` request, the request is\nconsidered \"finished\" immediately, **due to limitations in the Node.js\ninterface**. This means if the `CONNECT` request contains a request entity,\nthe request will be considered \"finished\" even before it has been read.\n\nThere is no such thing as a response object to a `CONNECT` request in\nNode.js, so there is no support for one.\n\n### HTTP Upgrade request\n\nThe meaning of the `Upgrade` header from RFC 7230, section 6.1:\n\n> The \"Upgrade\" header field is intended to provide a simple mechanism\n> for transitioning from HTTP/1.1 to some other protocol on the same\n> connection.\n\nIn Node.js, these request objects come from the `'upgrade'` event on\nthe HTTP server.\n\nWhen this module is used on a HTTP request with an `Upgrade` header, the\nrequest is considered \"finished\" immediately, **due to limitations in the\nNode.js interface**. This means if the `Upgrade` request contains a request\nentity, the request will be considered \"finished\" even before it has been\nread.\n\nThere is no such thing as a response object to a `Upgrade` request in\nNode.js, so there is no support for one.\n\n## Example\n\nThe following code ensures that file descriptors are always closed\nonce the response finishes.\n\n```js\nvar destroy = require('destroy')\nvar fs = require('fs')\nvar http = require('http')\nvar onFinished = require('on-finished')\n\nhttp.createServer(function onRequest (req, res) {\n  var stream = fs.createReadStream('package.json')\n  stream.pipe(res)\n  onFinished(res, function () {\n    destroy(stream)\n  })\n})\n```\n\n## License\n\n[MIT](LICENSE)\n\n[ci-image]: https://badgen.net/github/checks/jshttp/on-finished/master?label=ci\n[ci-url]: https://github.com/jshttp/on-finished/actions/workflows/ci.yml\n[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/on-finished/master\n[coveralls-url]: https://coveralls.io/r/jshttp/on-finished?branch=master\n[node-image]: https://badgen.net/npm/node/on-finished\n[node-url]: https://nodejs.org/en/download\n[npm-downloads-image]: https://badgen.net/npm/dm/on-finished\n[npm-url]: https://npmjs.org/package/on-finished\n[npm-version-image]: https://badgen.net/npm/v/on-finished\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/b25jZUAxLjQuMA==",
    "content": "/LICENSE\u0002The ISC License\n\nCopyright (c) Isaac Z. Schlueter and Contributors\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted, provided that the above\ncopyright notice and this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\nWITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\nANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\nACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR\nIN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n/package.json\u0002>{\n  \"name\": \"once\",\n  \"version\": \"1.4.0\",\n  \"description\": \"Run a function exactly one time\",\n  \"main\": \"once.js\",\n  \"directories\": {\n    \"test\": \"test\"\n  },\n  \"dependencies\": {\n    \"wrappy\": \"1\"\n  },\n  \"devDependencies\": {\n    \"tap\": \"^7.0.1\"\n  },\n  \"scripts\": {\n    \"test\": \"tap test/*.js\"\n  },\n  \"files\": [\n    \"once.js\"\n  ],\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git://github.com/isaacs/once\"\n  },\n  \"keywords\": [\n    \"once\",\n    \"function\",\n    \"one\",\n    \"single\"\n  ],\n  \"author\": \"Isaac Z. Schlueter <i@izs.me> (http://blog.izs.me/)\",\n  \"license\": \"ISC\"\n}\n/once.js\u0003var wrappy = require('wrappy')\nmodule.exports = wrappy(once)\nmodule.exports.strict = wrappy(onceStrict)\n\nonce.proto = once(function () {\n  Object.defineProperty(Function.prototype, 'once', {\n    value: function () {\n      return once(this)\n    },\n    configurable: true\n  })\n\n  Object.defineProperty(Function.prototype, 'onceStrict', {\n    value: function () {\n      return onceStrict(this)\n    },\n    configurable: true\n  })\n})\n\nfunction once (fn) {\n  var f = function () {\n    if (f.called) return f.value\n    f.called = true\n    return f.value = fn.apply(this, arguments)\n  }\n  f.called = false\n  return f\n}\n\nfunction onceStrict (fn) {\n  var f = function () {\n    if (f.called)\n      throw new Error(f.onceError)\n    f.called = true\n    return f.value = fn.apply(this, arguments)\n  }\n  var name = fn.name || 'Function wrapped with `once`'\n  f.onceError = name + \" shouldn't be called more than once\"\n  f.called = false\n  return f\n}\n/README.md\u0006# once\n\nOnly call a function once.\n\n## usage\n\n```javascript\nvar once = require('once')\n\nfunction load (file, cb) {\n  cb = once(cb)\n  loader.load('file')\n  loader.once('load', cb)\n  loader.once('error', cb)\n}\n```\n\nOr add to the Function.prototype in a responsible way:\n\n```javascript\n// only has to be done once\nrequire('once').proto()\n\nfunction load (file, cb) {\n  cb = cb.once()\n  loader.load('file')\n  loader.once('load', cb)\n  loader.once('error', cb)\n}\n```\n\nIronically, the prototype feature makes this module twice as\ncomplicated as necessary.\n\nTo check whether you function has been called, use `fn.called`. Once the\nfunction is called for the first time the return value of the original\nfunction is saved in `fn.value` and subsequent calls will continue to\nreturn this value.\n\n```javascript\nvar once = require('once')\n\nfunction load (cb) {\n  cb = once(cb)\n  var stream = createStream()\n  stream.once('data', cb)\n  stream.once('end', function () {\n    if (!cb.called) cb(new Error('not found'))\n  })\n}\n```\n\n## `once.strict(func)`\n\nThrow an error if the function is called twice.\n\nSome functions are expected to be called only once. Using `once` for them would\npotentially hide logical errors.\n\nIn the example below, the `greet` function has to call the callback only once:\n\n```javascript\nfunction greet (name, cb) {\n  // return is missing from the if statement\n  // when no name is passed, the callback is called twice\n  if (!name) cb('Hello anonymous')\n  cb('Hello ' + name)\n}\n\nfunction log (msg) {\n  console.log(msg)\n}\n\n// this will print 'Hello anonymous' but the logical error will be missed\ngreet(null, once(msg))\n\n// once.strict will print 'Hello anonymous' and throw an error when the callback will be called the second time\ngreet(null, once.strict(msg))\n```\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/b25ldGltZUA1LjEuMg==",
    "content": "/package.json\u0002{\n\t\"name\": \"onetime\",\n\t\"version\": \"5.1.2\",\n\t\"description\": \"Ensure a function is only called once\",\n\t\"license\": \"MIT\",\n\t\"repository\": \"sindresorhus/onetime\",\n\t\"funding\": \"https://github.com/sponsors/sindresorhus\",\n\t\"author\": {\n\t\t\"name\": \"Sindre Sorhus\",\n\t\t\"email\": \"sindresorhus@gmail.com\",\n\t\t\"url\": \"https://sindresorhus.com\"\n\t},\n\t\"engines\": {\n\t\t\"node\": \">=6\"\n\t},\n\t\"scripts\": {\n\t\t\"test\": \"xo && ava && tsd\"\n\t},\n\t\"files\": [\n\t\t\"index.js\",\n\t\t\"index.d.ts\"\n\t],\n\t\"keywords\": [\n\t\t\"once\",\n\t\t\"function\",\n\t\t\"one\",\n\t\t\"onetime\",\n\t\t\"func\",\n\t\t\"fn\",\n\t\t\"single\",\n\t\t\"call\",\n\t\t\"called\",\n\t\t\"prevent\"\n\t],\n\t\"dependencies\": {\n\t\t\"mimic-fn\": \"^2.1.0\"\n\t},\n\t\"devDependencies\": {\n\t\t\"ava\": \"^1.4.1\",\n\t\t\"tsd\": \"^0.7.1\",\n\t\t\"xo\": \"^0.24.0\"\n\t}\n}\n/license\u0004]MIT License\n\nCopyright (c) Sindre Sorhus <sindresorhus@gmail.com> (https://sindresorhus.com)\n\nPermission 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:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE 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.\n/readme.md\u0007# onetime [![Build Status](https://travis-ci.com/sindresorhus/onetime.svg?branch=master)](https://travis-ci.com/github/sindresorhus/onetime)\n\n> Ensure a function is only called once\n\nWhen called multiple times it will return the return value from the first call.\n\n*Unlike the module [once](https://github.com/isaacs/once), this one isn't naughty and extending `Function.prototype`.*\n\n## Install\n\n```\n$ npm install onetime\n```\n\n## Usage\n\n```js\nconst onetime = require('onetime');\n\nlet i = 0;\n\nconst foo = onetime(() => ++i);\n\nfoo(); //=> 1\nfoo(); //=> 1\nfoo(); //=> 1\n\nonetime.callCount(foo); //=> 3\n```\n\n```js\nconst onetime = require('onetime');\n\nconst foo = onetime(() => {}, {throw: true});\n\nfoo();\n\nfoo();\n//=> Error: Function `foo` can only be called once\n```\n\n## API\n\n### onetime(fn, options?)\n\nReturns a function that only calls `fn` once.\n\n#### fn\n\nType: `Function`\n\nFunction that should only be called once.\n\n#### options\n\nType: `object`\n\n##### throw\n\nType: `boolean`\\\nDefault: `false`\n\nThrow an error when called more than once.\n\n### onetime.callCount(fn)\n\nReturns a number representing how many times `fn` has been called.\n\nNote: It throws an error if you pass in a function that is not wrapped by `onetime`.\n\n```js\nconst onetime = require('onetime');\n\nconst foo = onetime(() => {});\n\nfoo();\nfoo();\nfoo();\n\nconsole.log(onetime.callCount(foo));\n//=> 3\n```\n\n#### fn\n\nType: `Function`\n\nFunction to get call count from.\n\n## onetime for enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of onetime and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-onetime?utm_source=npm-onetime&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n/index.d.ts\u0004declare namespace onetime {\n\tinterface Options {\n\t\t/**\n\t\tThrow an error when called more than once.\n\n\t\t@default false\n\t\t*/\n\t\tthrow?: boolean;\n\t}\n}\n\ndeclare const onetime: {\n\t/**\n\tEnsure a function is only called once. When called multiple times it will return the return value from the first call.\n\n\t@param fn - Function that should only be called once.\n\t@returns A function that only calls `fn` once.\n\n\t@example\n\t```\n\timport onetime = require('onetime');\n\n\tlet i = 0;\n\n\tconst foo = onetime(() => ++i);\n\n\tfoo(); //=> 1\n\tfoo(); //=> 1\n\tfoo(); //=> 1\n\n\tonetime.callCount(foo); //=> 3\n\t```\n\t*/\n\t<ArgumentsType extends unknown[], ReturnType>(\n\t\tfn: (...arguments: ArgumentsType) => ReturnType,\n\t\toptions?: onetime.Options\n\t): (...arguments: ArgumentsType) => ReturnType;\n\n\t/**\n\tGet the number of times `fn` has been called.\n\n\t@param fn - Function to get call count from.\n\t@returns A number representing how many times `fn` has been called.\n\n\t@example\n\t```\n\timport onetime = require('onetime');\n\n\tconst foo = onetime(() => {});\n\tfoo();\n\tfoo();\n\tfoo();\n\n\tconsole.log(onetime.callCount(foo));\n\t//=> 3\n\t```\n\t*/\n\tcallCount(fn: (...arguments: any[]) => unknown): number;\n\n\t// TODO: Remove this for the next major release\n\tdefault: typeof onetime;\n};\n\nexport = onetime;\n/index.js\u0004`'use strict';\nconst mimicFn = require('mimic-fn');\n\nconst calledFunctions = new WeakMap();\n\nconst onetime = (function_, options = {}) => {\n\tif (typeof function_ !== 'function') {\n\t\tthrow new TypeError('Expected a function');\n\t}\n\n\tlet returnValue;\n\tlet callCount = 0;\n\tconst functionName = function_.displayName || function_.name || '<anonymous>';\n\n\tconst onetime = function (...arguments_) {\n\t\tcalledFunctions.set(onetime, ++callCount);\n\n\t\tif (callCount === 1) {\n\t\t\treturnValue = function_.apply(this, arguments_);\n\t\t\tfunction_ = null;\n\t\t} else if (options.throw === true) {\n\t\t\tthrow new Error(`Function \\`${functionName}\\` can only be called once`);\n\t\t}\n\n\t\treturn returnValue;\n\t};\n\n\tmimicFn(onetime, function_);\n\tcalledFunctions.set(onetime, callCount);\n\n\treturn onetime;\n};\n\nmodule.exports = onetime;\n// TODO: Remove this for the next major release\nmodule.exports.default = onetime;\n\nmodule.exports.callCount = function_ => {\n\tif (!calledFunctions.has(function_)) {\n\t\tthrow new Error(`The given function \\`${function_.name}\\` is not wrapped by the \\`onetime\\` package`);\n\t}\n\n\treturn calledFunctions.get(function_);\n};\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/b25ldGltZUA2LjAuMA==",
    "content": "/index.d.ts\u0004export interface Options {\n\t/**\n\tThrow an error when called more than once.\n\n\t@default false\n\t*/\n\treadonly throw?: boolean;\n}\n\ndeclare const onetime: {\n\t/**\n\tEnsure a function is only called once. When called multiple times it will return the return value from the first call.\n\n\t@param fn - Function that should only be called once.\n\t@returns A function that only calls `fn` once.\n\n\t@example\n\t```\n\timport onetime from 'onetime';\n\n\tlet index = 0;\n\n\tconst foo = onetime(() => ++index);\n\n\tfoo(); //=> 1\n\tfoo(); //=> 1\n\tfoo(); //=> 1\n\n\tonetime.callCount(foo); //=> 3\n\t```\n\t*/\n\t<ArgumentsType extends unknown[], ReturnType>(\n\t\tfn: (...arguments: ArgumentsType) => ReturnType,\n\t\toptions?: Options\n\t): (...arguments: ArgumentsType) => ReturnType;\n\n\t/**\n\tGet the number of times `fn` has been called.\n\n\t@param fn - Function to get call count from.\n\t@returns A number representing how many times `fn` has been called.\n\n\t@example\n\t```\n\timport onetime from 'onetime';\n\n\tconst foo = onetime(() => {});\n\tfoo();\n\tfoo();\n\tfoo();\n\n\tconsole.log(onetime.callCount(foo));\n\t//=> 3\n\t```\n\t*/\n\tcallCount(fn: (...arguments: any[]) => unknown): number;\n};\n\nexport default onetime;\n/package.json\u0002{\n\t\"name\": \"onetime\",\n\t\"version\": \"6.0.0\",\n\t\"description\": \"Ensure a function is only called once\",\n\t\"license\": \"MIT\",\n\t\"repository\": \"sindresorhus/onetime\",\n\t\"funding\": \"https://github.com/sponsors/sindresorhus\",\n\t\"author\": {\n\t\t\"name\": \"Sindre Sorhus\",\n\t\t\"email\": \"sindresorhus@gmail.com\",\n\t\t\"url\": \"https://sindresorhus.com\"\n\t},\n\t\"type\": \"module\",\n\t\"exports\": \"./index.js\",\n\t\"engines\": {\n\t\t\"node\": \">=12\"\n\t},\n\t\"scripts\": {\n\t\t\"test\": \"xo && ava && tsd\"\n\t},\n\t\"files\": [\n\t\t\"index.js\",\n\t\t\"index.d.ts\"\n\t],\n\t\"keywords\": [\n\t\t\"once\",\n\t\t\"function\",\n\t\t\"one\",\n\t\t\"onetime\",\n\t\t\"func\",\n\t\t\"fn\",\n\t\t\"single\",\n\t\t\"call\",\n\t\t\"called\",\n\t\t\"prevent\"\n\t],\n\t\"dependencies\": {\n\t\t\"mimic-fn\": \"^4.0.0\"\n\t},\n\t\"devDependencies\": {\n\t\t\"ava\": \"^3.15.0\",\n\t\t\"tsd\": \"^0.14.0\",\n\t\t\"xo\": \"^0.38.2\"\n\t}\n}\n/index.js\u0003import mimicFunction from 'mimic-fn';\n\nconst calledFunctions = new WeakMap();\n\nconst onetime = (function_, options = {}) => {\n\tif (typeof function_ !== 'function') {\n\t\tthrow new TypeError('Expected a function');\n\t}\n\n\tlet returnValue;\n\tlet callCount = 0;\n\tconst functionName = function_.displayName || function_.name || '<anonymous>';\n\n\tconst onetime = function (...arguments_) {\n\t\tcalledFunctions.set(onetime, ++callCount);\n\n\t\tif (callCount === 1) {\n\t\t\treturnValue = function_.apply(this, arguments_);\n\t\t\tfunction_ = null;\n\t\t} else if (options.throw === true) {\n\t\t\tthrow new Error(`Function \\`${functionName}\\` can only be called once`);\n\t\t}\n\n\t\treturn returnValue;\n\t};\n\n\tmimicFunction(onetime, function_);\n\tcalledFunctions.set(onetime, callCount);\n\n\treturn onetime;\n};\n\nonetime.callCount = function_ => {\n\tif (!calledFunctions.has(function_)) {\n\t\tthrow new Error(`The given function \\`${function_.name}\\` is not wrapped by the \\`onetime\\` package`);\n\t}\n\n\treturn calledFunctions.get(function_);\n};\n\nexport default onetime;\n/license\u0004]MIT License\n\nCopyright (c) Sindre Sorhus <sindresorhus@gmail.com> (https://sindresorhus.com)\n\nPermission 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:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE 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.\n/readme.md\u0007 # onetime\n\n> Ensure a function is only called once\n\nWhen called multiple times it will return the return value from the first call.\n\n*Unlike the module [once](https://github.com/isaacs/once), this one isn't naughty and extending `Function.prototype`.*\n\n## Install\n\n```\n$ npm install onetime\n```\n\n## Usage\n\n```js\nimport onetime from 'onetime';\n\nlet index = 0;\n\nconst foo = onetime(() => ++index);\n\nfoo(); //=> 1\nfoo(); //=> 1\nfoo(); //=> 1\n\nonetime.callCount(foo); //=> 3\n```\n\n```js\nimport onetime from 'onetime';\n\nconst foo = onetime(() => {}, {throw: true});\n\nfoo();\n\nfoo();\n//=> Error: Function `foo` can only be called once\n```\n\n## API\n\n### onetime(fn, options?)\n\nReturns a function that only calls `fn` once.\n\n#### fn\n\nType: `Function`\n\nFunction that should only be called once.\n\n#### options\n\nType: `object`\n\n##### throw\n\nType: `boolean`\\\nDefault: `false`\n\nThrow an error when called more than once.\n\n### onetime.callCount(fn)\n\nReturns a number representing how many times `fn` has been called.\n\nNote: It throws an error if you pass in a function that is not wrapped by `onetime`.\n\n```js\nimport onetime from 'onetime';\n\nconst foo = onetime(() => {});\n\nfoo();\nfoo();\nfoo();\n\nconsole.log(onetime.callCount(foo));\n//=> 3\n```\n\n#### fn\n\nType: `Function`\n\nFunction to get call count from.\n\n## onetime for enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of onetime and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-onetime?utm_source=npm-onetime&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/b2JqZWN0LWFzc2lnbkA0LjEuMQ==",
    "content": "/readme.md\u0005# object-assign [![Build Status](https://travis-ci.org/sindresorhus/object-assign.svg?branch=master)](https://travis-ci.org/sindresorhus/object-assign)\n\n> ES2015 [`Object.assign()`](http://www.2ality.com/2014/01/object-assign.html) [ponyfill](https://ponyfill.com)\n\n\n## Use the built-in\n\nNode.js 4 and up, as well as every evergreen browser (Chrome, Edge, Firefox, Opera, Safari),\nsupport `Object.assign()` :tada:. If you target only those environments, then by all\nmeans, use `Object.assign()` instead of this package.\n\n\n## Install\n\n```\n$ npm install --save object-assign\n```\n\n\n## Usage\n\n```js\nconst objectAssign = require('object-assign');\n\nobjectAssign({foo: 0}, {bar: 1});\n//=> {foo: 0, bar: 1}\n\n// multiple sources\nobjectAssign({foo: 0}, {bar: 1}, {baz: 2});\n//=> {foo: 0, bar: 1, baz: 2}\n\n// overwrites equal keys\nobjectAssign({foo: 0}, {foo: 1}, {foo: 2});\n//=> {foo: 2}\n\n// ignores null and undefined sources\nobjectAssign({foo: 0}, null, {bar: 1}, undefined);\n//=> {foo: 0, bar: 1}\n```\n\n\n## API\n\n### objectAssign(target, [source, ...])\n\nAssigns enumerable own properties of `source` objects to the `target` object and returns the `target` object. Additional `source` objects will overwrite previous ones.\n\n\n## Resources\n\n- [ES2015 spec - Object.assign](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-object.assign)\n\n\n## Related\n\n- [deep-assign](https://github.com/sindresorhus/deep-assign) - Recursive `Object.assign()`\n\n\n## License\n\nMIT © [Sindre Sorhus](https://sindresorhus.com)\n/license\u0004_The MIT License (MIT)\n\nCopyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n/package.json\u0002{\n  \"name\": \"object-assign\",\n  \"version\": \"4.1.1\",\n  \"description\": \"ES2015 `Object.assign()` ponyfill\",\n  \"license\": \"MIT\",\n  \"repository\": \"sindresorhus/object-assign\",\n  \"author\": {\n    \"name\": \"Sindre Sorhus\",\n    \"email\": \"sindresorhus@gmail.com\",\n    \"url\": \"sindresorhus.com\"\n  },\n  \"engines\": {\n    \"node\": \">=0.10.0\"\n  },\n  \"scripts\": {\n    \"test\": \"xo && ava\",\n    \"bench\": \"matcha bench.js\"\n  },\n  \"files\": [\n    \"index.js\"\n  ],\n  \"keywords\": [\n    \"object\",\n    \"assign\",\n    \"extend\",\n    \"properties\",\n    \"es2015\",\n    \"ecmascript\",\n    \"harmony\",\n    \"ponyfill\",\n    \"prollyfill\",\n    \"polyfill\",\n    \"shim\",\n    \"browser\"\n  ],\n  \"devDependencies\": {\n    \"ava\": \"^0.16.0\",\n    \"lodash\": \"^4.16.4\",\n    \"matcha\": \"^0.7.0\",\n    \"xo\": \"^0.16.0\"\n  }\n}\n/index.js\b</*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc');  // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/b3B0aW9uYXRvckAwLjkuMQ==",
    "content": "/lib/index.jsHb// Generated by LiveScript 1.6.0\n(function(){\n  var VERSION, ref$, id, map, compact, any, groupBy, partition, chars, isItNaN, keys, Obj, camelize, deepIs, closestString, nameToRaw, dasherize, naturalJoin, generateHelp, generateHelpForOption, parsedTypeCheck, parseType, parseLevn, camelizeKeys, parseString, main, toString$ = {}.toString, slice$ = [].slice, arrayFrom$ = Array.from || function(x){return slice$.call(x);};\n  VERSION = '0.9.1';\n  ref$ = require('prelude-ls'), id = ref$.id, map = ref$.map, compact = ref$.compact, any = ref$.any, groupBy = ref$.groupBy, partition = ref$.partition, chars = ref$.chars, isItNaN = ref$.isItNaN, keys = ref$.keys, Obj = ref$.Obj, camelize = ref$.camelize;\n  deepIs = require('deep-is');\n  ref$ = require('./util'), closestString = ref$.closestString, nameToRaw = ref$.nameToRaw, dasherize = ref$.dasherize, naturalJoin = ref$.naturalJoin;\n  ref$ = require('./help'), generateHelp = ref$.generateHelp, generateHelpForOption = ref$.generateHelpForOption;\n  ref$ = require('type-check'), parsedTypeCheck = ref$.parsedTypeCheck, parseType = ref$.parseType;\n  parseLevn = require('levn').parsedTypeParse;\n  camelizeKeys = function(obj){\n    var key, value, resultObj$ = {};\n    for (key in obj) {\n      value = obj[key];\n      resultObj$[camelize(key)] = value;\n    }\n    return resultObj$;\n  };\n  parseString = function(string){\n    var assignOpt, regex, replaceRegex, result;\n    assignOpt = '--?[a-zA-Z][-a-z-A-Z0-9]*=';\n    regex = RegExp('(?:' + assignOpt + ')?(?:\\'(?:\\\\\\\\\\'|[^\\'])+\\'|\"(?:\\\\\\\\\"|[^\"])+\")|[^\\'\"\\\\s]+', 'g');\n    replaceRegex = RegExp('^(' + assignOpt + ')?[\\'\"]([\\\\s\\\\S]*)[\\'\"]$');\n    result = map(function(it){\n      return it.replace(replaceRegex, '$1$2');\n    }, string.match(regex) || []);\n    return result;\n  };\n  main = function(libOptions){\n    var opts, defaults, required, traverse, getOption, parse;\n    opts = {};\n    defaults = {};\n    required = [];\n    if (toString$.call(libOptions.stdout).slice(8, -1) === 'Undefined') {\n      libOptions.stdout = process.stdout;\n    }\n    libOptions.positionalAnywhere == null && (libOptions.positionalAnywhere = true);\n    libOptions.typeAliases == null && (libOptions.typeAliases = {});\n    libOptions.defaults == null && (libOptions.defaults = {});\n    if (libOptions.concatRepeatedArrays != null) {\n      libOptions.defaults.concatRepeatedArrays = libOptions.concatRepeatedArrays;\n    }\n    if (libOptions.mergeRepeatedObjects != null) {\n      libOptions.defaults.mergeRepeatedObjects = libOptions.mergeRepeatedObjects;\n    }\n    traverse = function(options){\n      var i$, len$, option, name, k, ref$, v, type, that, e, parsedPossibilities, parsedType, j$, len1$, possibility, rawDependsType, dependsOpts, dependsType, cra, alias, shortNames, longNames;\n      if (toString$.call(options).slice(8, -1) !== 'Array') {\n        throw new Error('No options defined.');\n      }\n      for (i$ = 0, len$ = options.length; i$ < len$; ++i$) {\n        option = options[i$];\n        if (option.heading == null) {\n          name = option.option;\n          if (opts[name] != null) {\n            throw new Error(\"Option '\" + name + \"' already defined.\");\n          }\n          for (k in ref$ = libOptions.defaults) {\n            v = ref$[k];\n            option[k] == null && (option[k] = v);\n          }\n          if (option.type === 'Boolean') {\n            option.boolean == null && (option.boolean = true);\n          }\n          if (option.parsedType == null) {\n            if (!option.type) {\n              throw new Error(\"No type defined for option '\" + name + \"'.\");\n            }\n            try {\n              type = (that = libOptions.typeAliases[option.type]) != null\n                ? that\n                : option.type;\n              option.parsedType = parseType(type);\n            } catch (e$) {\n              e = e$;\n              throw new Error(\"Option '\" + name + \"': Error parsing type '\" + option.type + \"': \" + e.message);\n            }\n          }\n          if (option['default']) {\n            try {\n              defaults[name] = parseLevn(option.parsedType, option['default']);\n            } catch (e$) {\n              e = e$;\n              throw new Error(\"Option '\" + name + \"': Error parsing default value '\" + option['default'] + \"' for type '\" + option.type + \"': \" + e.message);\n            }\n          }\n          if (option['enum'] && !option.parsedPossiblities) {\n            parsedPossibilities = [];\n            parsedType = option.parsedType;\n            for (j$ = 0, len1$ = (ref$ = option['enum']).length; j$ < len1$; ++j$) {\n              possibility = ref$[j$];\n              try {\n                parsedPossibilities.push(parseLevn(parsedType, possibility));\n              } catch (e$) {\n                e = e$;\n                throw new Error(\"Option '\" + name + \"': Error parsing enum value '\" + possibility + \"' for type '\" + option.type + \"': \" + e.message);\n              }\n            }\n            option.parsedPossibilities = parsedPossibilities;\n          }\n          if (that = option.dependsOn) {\n            if (that.length) {\n              ref$ = [].concat(option.dependsOn), rawDependsType = ref$[0], dependsOpts = slice$.call(ref$, 1);\n              dependsType = rawDependsType.toLowerCase();\n              if (dependsOpts.length) {\n                if (dependsType === 'and' || dependsType === 'or') {\n                  option.dependsOn = [dependsType].concat(arrayFrom$(dependsOpts));\n                } else {\n                  throw new Error(\"Option '\" + name + \"': If you have more than one dependency, you must specify either 'and' or 'or'\");\n                }\n              } else {\n                if ((ref$ = dependsType.toLowerCase()) === 'and' || ref$ === 'or') {\n                  option.dependsOn = null;\n                } else {\n                  option.dependsOn = ['and', rawDependsType];\n                }\n              }\n            } else {\n              option.dependsOn = null;\n            }\n          }\n          if (option.required) {\n            required.push(name);\n          }\n          opts[name] = option;\n          if (option.concatRepeatedArrays != null) {\n            cra = option.concatRepeatedArrays;\n            if ('Boolean' === toString$.call(cra).slice(8, -1)) {\n              option.concatRepeatedArrays = [cra, {}];\n            } else if (cra.length === 1) {\n              option.concatRepeatedArrays = [cra[0], {}];\n            } else if (cra.length !== 2) {\n              throw new Error(\"Invalid setting for concatRepeatedArrays\");\n            }\n          }\n          if (option.alias || option.aliases) {\n            if (name === 'NUM') {\n              throw new Error(\"-NUM option can't have aliases.\");\n            }\n            if (option.alias) {\n              option.aliases == null && (option.aliases = [].concat(option.alias));\n            }\n            for (j$ = 0, len1$ = (ref$ = option.aliases).length; j$ < len1$; ++j$) {\n              alias = ref$[j$];\n              if (opts[alias] != null) {\n                throw new Error(\"Option '\" + alias + \"' already defined.\");\n              }\n              opts[alias] = option;\n            }\n            ref$ = partition(fn$, option.aliases), shortNames = ref$[0], longNames = ref$[1];\n            option.shortNames == null && (option.shortNames = shortNames);\n            option.longNames == null && (option.longNames = longNames);\n          }\n          if ((!option.aliases || option.shortNames.length === 0) && option.type === 'Boolean' && option['default'] === 'true') {\n            option.negateName = true;\n          }\n        }\n      }\n      function fn$(it){\n        return it.length === 1;\n      }\n    };\n    traverse(libOptions.options);\n    getOption = function(name){\n      var opt, possiblyMeant;\n      opt = opts[name];\n      if (opt == null) {\n        possiblyMeant = closestString(keys(opts), name);\n        throw new Error(\"Invalid option '\" + nameToRaw(name) + \"'\" + (possiblyMeant ? \" - perhaps you meant '\" + nameToRaw(possiblyMeant) + \"'?\" : '.'));\n      }\n      return opt;\n    };\n    parse = function(input, arg$){\n      var slice, obj, positional, restPositional, overrideRequired, prop, setValue, setDefaults, checkRequired, mutuallyExclusiveError, checkMutuallyExclusive, checkDependency, checkDependencies, checkProp, args, key, value, option, ref$, i$, len$, arg, that, result, short, argName, usingAssign, val, flags, len, j$, len1$, i, flag, opt, name, valPrime, negated, noedName;\n      slice = (arg$ != null\n        ? arg$\n        : {}).slice;\n      obj = {};\n      positional = [];\n      restPositional = false;\n      overrideRequired = false;\n      prop = null;\n      setValue = function(name, value){\n        var opt, val, cra, e, currentType;\n        opt = getOption(name);\n        if (opt.boolean) {\n          val = value;\n        } else {\n          try {\n            cra = opt.concatRepeatedArrays;\n            if (cra != null && cra[0] && cra[1].oneValuePerFlag && opt.parsedType.length === 1 && opt.parsedType[0].structure === 'array') {\n              val = [parseLevn(opt.parsedType[0].of, value)];\n            } else {\n              val = parseLevn(opt.parsedType, value);\n            }\n          } catch (e$) {\n            e = e$;\n            throw new Error(\"Invalid value for option '\" + name + \"' - expected type \" + opt.type + \", received value: \" + value + \".\");\n          }\n          if (opt['enum'] && !any(function(it){\n            return deepIs(it, val);\n          }, opt.parsedPossibilities)) {\n            throw new Error(\"Option \" + name + \": '\" + val + \"' not one of \" + naturalJoin(opt['enum']) + \".\");\n          }\n        }\n        currentType = toString$.call(obj[name]).slice(8, -1);\n        if (obj[name] != null) {\n          if (opt.concatRepeatedArrays != null && opt.concatRepeatedArrays[0] && currentType === 'Array') {\n            obj[name] = obj[name].concat(val);\n          } else if (opt.mergeRepeatedObjects && currentType === 'Object') {\n            import$(obj[name], val);\n          } else {\n            obj[name] = val;\n          }\n        } else {\n          obj[name] = val;\n        }\n        if (opt.restPositional) {\n          restPositional = true;\n        }\n        if (opt.overrideRequired) {\n          overrideRequired = true;\n        }\n      };\n      setDefaults = function(){\n        var name, ref$, value;\n        for (name in ref$ = defaults) {\n          value = ref$[name];\n          if (obj[name] == null) {\n            obj[name] = value;\n          }\n        }\n      };\n      checkRequired = function(){\n        var i$, ref$, len$, name;\n        if (overrideRequired) {\n          return;\n        }\n        for (i$ = 0, len$ = (ref$ = required).length; i$ < len$; ++i$) {\n          name = ref$[i$];\n          if (!obj[name]) {\n            throw new Error(\"Option \" + nameToRaw(name) + \" is required.\");\n          }\n        }\n      };\n      mutuallyExclusiveError = function(first, second){\n        throw new Error(\"The options \" + nameToRaw(first) + \" and \" + nameToRaw(second) + \" are mutually exclusive - you cannot use them at the same time.\");\n      };\n      checkMutuallyExclusive = function(){\n        var rules, i$, len$, rule, present, j$, len1$, element, k$, len2$, opt;\n        rules = libOptions.mutuallyExclusive;\n        if (!rules) {\n          return;\n        }\n        for (i$ = 0, len$ = rules.length; i$ < len$; ++i$) {\n          rule = rules[i$];\n          present = null;\n          for (j$ = 0, len1$ = rule.length; j$ < len1$; ++j$) {\n            element = rule[j$];\n            if (toString$.call(element).slice(8, -1) === 'Array') {\n              for (k$ = 0, len2$ = element.length; k$ < len2$; ++k$) {\n                opt = element[k$];\n                if (opt in obj) {\n                  if (present != null) {\n                    mutuallyExclusiveError(present, opt);\n                  } else {\n                    present = opt;\n                    break;\n                  }\n                }\n              }\n            } else {\n              if (element in obj) {\n                if (present != null) {\n                  mutuallyExclusiveError(present, element);\n                } else {\n                  present = element;\n                }\n              }\n            }\n          }\n        }\n      };\n      checkDependency = function(option){\n        var dependsOn, type, targetOptionNames, i$, len$, targetOptionName, targetOption;\n        dependsOn = option.dependsOn;\n        if (!dependsOn || option.dependenciesMet) {\n          return true;\n        }\n        type = dependsOn[0], targetOptionNames = slice$.call(dependsOn, 1);\n        for (i$ = 0, len$ = targetOptionNames.length; i$ < len$; ++i$) {\n          targetOptionName = targetOptionNames[i$];\n          targetOption = obj[targetOptionName];\n          if (targetOption && checkDependency(targetOption)) {\n            if (type === 'or') {\n              return true;\n            }\n          } else if (type === 'and') {\n            throw new Error(\"The option '\" + option.option + \"' did not have its dependencies met.\");\n          }\n        }\n        if (type === 'and') {\n          return true;\n        } else {\n          throw new Error(\"The option '\" + option.option + \"' did not meet any of its dependencies.\");\n        }\n      };\n      checkDependencies = function(){\n        var name;\n        for (name in obj) {\n          checkDependency(opts[name]);\n        }\n      };\n      checkProp = function(){\n        if (prop) {\n          throw new Error(\"Value for '\" + prop + \"' of type '\" + getOption(prop).type + \"' required.\");\n        }\n      };\n      switch (toString$.call(input).slice(8, -1)) {\n      case 'String':\n        args = parseString(input.slice(slice != null ? slice : 0));\n        break;\n      case 'Array':\n        args = input.slice(slice != null ? slice : 2);\n        break;\n      case 'Object':\n        obj = {};\n        for (key in input) {\n          value = input[key];\n          if (key !== '_') {\n            option = getOption(dasherize(key));\n            if (parsedTypeCheck(option.parsedType, value)) {\n              obj[option.option] = value;\n            } else {\n              throw new Error(\"Option '\" + option.option + \"': Invalid type for '\" + value + \"' - expected type '\" + option.type + \"'.\");\n            }\n          }\n        }\n        checkMutuallyExclusive();\n        checkDependencies();\n        setDefaults();\n        checkRequired();\n        return ref$ = camelizeKeys(obj), ref$._ = input._ || [], ref$;\n      default:\n        throw new Error(\"Invalid argument to 'parse': \" + input + \".\");\n      }\n      for (i$ = 0, len$ = args.length; i$ < len$; ++i$) {\n        arg = args[i$];\n        if (arg === '--') {\n          restPositional = true;\n        } else if (restPositional) {\n          positional.push(arg);\n        } else {\n          if (that = arg.match(/^(--?)([a-zA-Z][-a-zA-Z0-9]*)(=)?(.*)?$/)) {\n            result = that;\n            checkProp();\n            short = result[1].length === 1;\n            argName = result[2];\n            usingAssign = result[3] != null;\n            val = result[4];\n            if (usingAssign && val == null) {\n              throw new Error(\"No value for '\" + argName + \"' specified.\");\n            }\n            if (short) {\n              flags = chars(argName);\n              len = flags.length;\n              for (j$ = 0, len1$ = flags.length; j$ < len1$; ++j$) {\n                i = j$;\n                flag = flags[j$];\n                opt = getOption(flag);\n                name = opt.option;\n                if (restPositional) {\n                  positional.push(flag);\n                } else if (i === len - 1) {\n                  if (usingAssign) {\n                    valPrime = opt.boolean ? parseLevn([{\n                      type: 'Boolean'\n                    }], val) : val;\n                    setValue(name, valPrime);\n                  } else if (opt.boolean) {\n                    setValue(name, true);\n                  } else {\n                    prop = name;\n                  }\n                } else if (opt.boolean) {\n                  setValue(name, true);\n                } else {\n                  throw new Error(\"Can't set argument '\" + flag + \"' when not last flag in a group of short flags.\");\n                }\n              }\n            } else {\n              negated = false;\n              if (that = argName.match(/^no-(.+)$/)) {\n                negated = true;\n                noedName = that[1];\n                opt = getOption(noedName);\n              } else {\n                opt = getOption(argName);\n              }\n              name = opt.option;\n              if (opt.boolean) {\n                valPrime = usingAssign ? parseLevn([{\n                  type: 'Boolean'\n                }], val) : true;\n                if (negated) {\n                  setValue(name, !valPrime);\n                } else {\n                  setValue(name, valPrime);\n                }\n              } else {\n                if (negated) {\n                  throw new Error(\"Only use 'no-' prefix for Boolean options, not with '\" + noedName + \"'.\");\n                }\n                if (usingAssign) {\n                  setValue(name, val);\n                } else {\n                  prop = name;\n                }\n              }\n            }\n          } else if (that = arg.match(/^-([0-9]+(?:\\.[0-9]+)?)$/)) {\n            opt = opts.NUM;\n            if (!opt) {\n              throw new Error('No -NUM option defined.');\n            }\n            setValue(opt.option, that[1]);\n          } else {\n            if (prop) {\n              setValue(prop, arg);\n              prop = null;\n            } else {\n              positional.push(arg);\n              if (!libOptions.positionalAnywhere) {\n                restPositional = true;\n              }\n            }\n          }\n        }\n      }\n      checkProp();\n      checkMutuallyExclusive();\n      checkDependencies();\n      setDefaults();\n      checkRequired();\n      return ref$ = camelizeKeys(obj), ref$._ = positional, ref$;\n    };\n    return {\n      parse: parse,\n      parseArgv: function(it){\n        return parse(it, {\n          slice: 2\n        });\n      },\n      generateHelp: generateHelp(libOptions),\n      generateHelpForOption: generateHelpForOption(getOption, libOptions)\n    };\n  };\n  main.VERSION = VERSION;\n  module.exports = main;\n  function import$(obj, src){\n    var own = {}.hasOwnProperty;\n    for (var key in src) if (own.call(src, key)) obj[key] = src[key];\n    return obj;\n  }\n}).call(this);\n/LICENSE\u0004\u001eCopyright (c) George Zahariev\n\nPermission is hereby granted, free of charge, to any person\nobtaining a copy of this software and associated documentation\nfiles (the \"Software\"), to deal in the Software without\nrestriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the\nSoftware is furnished to do so, subject to the following\nconditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\nOF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\nHOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\nWHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\nFROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\nOTHER DEALINGS IN THE SOFTWARE.\n/lib/util.js\u0005// Generated by LiveScript 1.6.0\n(function(){\n  var prelude, map, sortBy, fl, closestString, nameToRaw, dasherize, naturalJoin;\n  prelude = require('prelude-ls'), map = prelude.map, sortBy = prelude.sortBy;\n  fl = require('fast-levenshtein');\n  closestString = function(possibilities, input){\n    var distances, ref$, string, distance;\n    if (!possibilities.length) {\n      return;\n    }\n    distances = map(function(it){\n      var ref$, longer, shorter;\n      ref$ = input.length > it.length\n        ? [input, it]\n        : [it, input], longer = ref$[0], shorter = ref$[1];\n      return {\n        string: it,\n        distance: fl.get(longer, shorter)\n      };\n    })(\n    possibilities);\n    ref$ = sortBy(function(it){\n      return it.distance;\n    }, distances)[0], string = ref$.string, distance = ref$.distance;\n    return string;\n  };\n  nameToRaw = function(name){\n    if (name.length === 1 || name === 'NUM') {\n      return \"-\" + name;\n    } else {\n      return \"--\" + name;\n    }\n  };\n  dasherize = function(string){\n    if (/^[A-Z]/.test(string)) {\n      return string;\n    } else {\n      return prelude.dasherize(string);\n    }\n  };\n  naturalJoin = function(array){\n    if (array.length < 3) {\n      return array.join(' or ');\n    } else {\n      return array.slice(0, -1).join(', ') + \", or \" + array[array.length - 1];\n    }\n  };\n  module.exports = {\n    closestString: closestString,\n    nameToRaw: nameToRaw,\n    dasherize: dasherize,\n    naturalJoin: naturalJoin\n  };\n}).call(this);\n/lib/help.js+// Generated by LiveScript 1.6.0\n(function(){\n  var ref$, id, find, sort, min, max, map, unlines, nameToRaw, dasherize, naturalJoin, wordWrap, wordwrap, getPreText, setHelpStyleDefaults, generateHelpForOption, generateHelp;\n  ref$ = require('prelude-ls'), id = ref$.id, find = ref$.find, sort = ref$.sort, min = ref$.min, max = ref$.max, map = ref$.map, unlines = ref$.unlines;\n  ref$ = require('./util'), nameToRaw = ref$.nameToRaw, dasherize = ref$.dasherize, naturalJoin = ref$.naturalJoin;\n  wordWrap = require('word-wrap');\n  wordwrap = function(a, b){\n    var ref$, indent, width;\n    ref$ = b === undefined\n      ? ['', a - 1]\n      : [repeatString$(' ', a), b - a - 1], indent = ref$[0], width = ref$[1];\n    return function(text){\n      return wordWrap(text, {\n        indent: indent,\n        width: width,\n        trim: true\n      });\n    };\n  };\n  getPreText = function(option, arg$, maxWidth){\n    var mainName, shortNames, ref$, longNames, type, description, aliasSeparator, typeSeparator, initialIndent, names, namesString, namesStringLen, typeSeparatorString, typeSeparatorStringLen, wrap;\n    mainName = option.option, shortNames = (ref$ = option.shortNames) != null\n      ? ref$\n      : [], longNames = (ref$ = option.longNames) != null\n      ? ref$\n      : [], type = option.type, description = option.description;\n    aliasSeparator = arg$.aliasSeparator, typeSeparator = arg$.typeSeparator, initialIndent = arg$.initialIndent;\n    if (option.negateName) {\n      mainName = \"no-\" + mainName;\n      if (longNames) {\n        longNames = map(function(it){\n          return \"no-\" + it;\n        }, longNames);\n      }\n    }\n    names = mainName.length === 1\n      ? [mainName].concat(shortNames, longNames)\n      : shortNames.concat([mainName], longNames);\n    namesString = map(nameToRaw, names).join(aliasSeparator);\n    namesStringLen = namesString.length;\n    typeSeparatorString = mainName === 'NUM' ? '::' : typeSeparator;\n    typeSeparatorStringLen = typeSeparatorString.length;\n    if (maxWidth != null && !option.boolean && initialIndent + namesStringLen + typeSeparatorStringLen + type.length > maxWidth) {\n      wrap = wordwrap(initialIndent + namesStringLen + typeSeparatorStringLen, maxWidth);\n      return namesString + \"\" + typeSeparatorString + wrap(type).replace(/^\\s+/, '');\n    } else {\n      return namesString + \"\" + (option.boolean\n        ? ''\n        : typeSeparatorString + \"\" + type);\n    }\n  };\n  setHelpStyleDefaults = function(helpStyle){\n    helpStyle.aliasSeparator == null && (helpStyle.aliasSeparator = ', ');\n    helpStyle.typeSeparator == null && (helpStyle.typeSeparator = ' ');\n    helpStyle.descriptionSeparator == null && (helpStyle.descriptionSeparator = '  ');\n    helpStyle.initialIndent == null && (helpStyle.initialIndent = 2);\n    helpStyle.secondaryIndent == null && (helpStyle.secondaryIndent = 4);\n    helpStyle.maxPadFactor == null && (helpStyle.maxPadFactor = 1.5);\n  };\n  generateHelpForOption = function(getOption, arg$){\n    var stdout, helpStyle, ref$;\n    stdout = arg$.stdout, helpStyle = (ref$ = arg$.helpStyle) != null\n      ? ref$\n      : {};\n    setHelpStyleDefaults(helpStyle);\n    return function(optionName){\n      var maxWidth, wrap, option, e, pre, defaultString, restPositionalString, description, fullDescription, that, preDescription, descriptionString, exampleString, examples, seperator;\n      maxWidth = stdout != null && stdout.isTTY ? stdout.columns - 1 : null;\n      wrap = maxWidth ? wordwrap(maxWidth) : id;\n      try {\n        option = getOption(dasherize(optionName));\n      } catch (e$) {\n        e = e$;\n        return e.message;\n      }\n      pre = getPreText(option, helpStyle);\n      defaultString = option['default'] && !option.negateName ? \"\\ndefault: \" + option['default'] : '';\n      restPositionalString = option.restPositional ? 'Everything after this option is considered a positional argument, even if it looks like an option.' : '';\n      description = option.longDescription || option.description && sentencize(option.description);\n      fullDescription = description && restPositionalString\n        ? description + \" \" + restPositionalString\n        : (that = description || restPositionalString) ? that : '';\n      preDescription = 'description:';\n      descriptionString = !fullDescription\n        ? ''\n        : maxWidth && fullDescription.length - 1 - preDescription.length > maxWidth\n          ? \"\\n\" + preDescription + \"\\n\" + wrap(fullDescription)\n          : \"\\n\" + preDescription + \" \" + fullDescription;\n      exampleString = (that = option.example) ? (examples = [].concat(that), examples.length > 1\n        ? \"\\nexamples:\\n\" + unlines(examples)\n        : \"\\nexample: \" + examples[0]) : '';\n      seperator = defaultString || descriptionString || exampleString ? \"\\n\" + repeatString$('=', pre.length) : '';\n      return pre + \"\" + seperator + defaultString + descriptionString + exampleString;\n    };\n  };\n  generateHelp = function(arg$){\n    var options, prepend, append, helpStyle, ref$, stdout, aliasSeparator, typeSeparator, descriptionSeparator, maxPadFactor, initialIndent, secondaryIndent;\n    options = arg$.options, prepend = arg$.prepend, append = arg$.append, helpStyle = (ref$ = arg$.helpStyle) != null\n      ? ref$\n      : {}, stdout = arg$.stdout;\n    setHelpStyleDefaults(helpStyle);\n    aliasSeparator = helpStyle.aliasSeparator, typeSeparator = helpStyle.typeSeparator, descriptionSeparator = helpStyle.descriptionSeparator, maxPadFactor = helpStyle.maxPadFactor, initialIndent = helpStyle.initialIndent, secondaryIndent = helpStyle.secondaryIndent;\n    return function(arg$){\n      var ref$, showHidden, interpolate, maxWidth, output, out, data, optionCount, totalPreLen, preLens, i$, len$, item, that, pre, descParts, desc, preLen, sortedPreLens, maxPreLen, preLenMean, x, padAmount, descSepLen, fullWrapCount, partialWrapCount, descLen, totalLen, initialSpace, wrapAllFull, i, wrap;\n      ref$ = arg$ != null\n        ? arg$\n        : {}, showHidden = ref$.showHidden, interpolate = ref$.interpolate;\n      maxWidth = stdout != null && stdout.isTTY ? stdout.columns - 1 : null;\n      output = [];\n      out = function(it){\n        return output.push(it != null ? it : '');\n      };\n      if (prepend) {\n        out(interpolate ? interp(prepend, interpolate) : prepend);\n        out();\n      }\n      data = [];\n      optionCount = 0;\n      totalPreLen = 0;\n      preLens = [];\n      for (i$ = 0, len$ = (ref$ = options).length; i$ < len$; ++i$) {\n        item = ref$[i$];\n        if (showHidden || !item.hidden) {\n          if (that = item.heading) {\n            data.push({\n              type: 'heading',\n              value: that\n            });\n          } else {\n            pre = getPreText(item, helpStyle, maxWidth);\n            descParts = [];\n            if ((that = item.description) != null) {\n              descParts.push(that);\n            }\n            if (that = item['enum']) {\n              descParts.push(\"either: \" + naturalJoin(that));\n            }\n            if (item['default'] && !item.negateName) {\n              descParts.push(\"default: \" + item['default']);\n            }\n            desc = descParts.join(' - ');\n            data.push({\n              type: 'option',\n              pre: pre,\n              desc: desc,\n              descLen: desc.length\n            });\n            preLen = pre.length;\n            optionCount++;\n            totalPreLen += preLen;\n            preLens.push(preLen);\n          }\n        }\n      }\n      sortedPreLens = sort(preLens);\n      maxPreLen = sortedPreLens[sortedPreLens.length - 1];\n      preLenMean = initialIndent + totalPreLen / optionCount;\n      x = optionCount > 2 ? min(preLenMean * maxPadFactor, maxPreLen) : maxPreLen;\n      for (i$ = sortedPreLens.length - 1; i$ >= 0; --i$) {\n        preLen = sortedPreLens[i$];\n        if (preLen <= x) {\n          padAmount = preLen;\n          break;\n        }\n      }\n      descSepLen = descriptionSeparator.length;\n      if (maxWidth != null) {\n        fullWrapCount = 0;\n        partialWrapCount = 0;\n        for (i$ = 0, len$ = data.length; i$ < len$; ++i$) {\n          item = data[i$];\n          if (item.type === 'option') {\n            pre = item.pre, desc = item.desc, descLen = item.descLen;\n            if (descLen === 0) {\n              item.wrap = 'none';\n            } else {\n              preLen = max(padAmount, pre.length) + initialIndent + descSepLen;\n              totalLen = preLen + descLen;\n              if (totalLen > maxWidth) {\n                if (descLen / 2.5 > maxWidth - preLen) {\n                  fullWrapCount++;\n                  item.wrap = 'full';\n                } else {\n                  partialWrapCount++;\n                  item.wrap = 'partial';\n                }\n              } else {\n                item.wrap = 'none';\n              }\n            }\n          }\n        }\n      }\n      initialSpace = repeatString$(' ', initialIndent);\n      wrapAllFull = optionCount > 1 && fullWrapCount + partialWrapCount * 0.5 > optionCount * 0.5;\n      for (i$ = 0, len$ = data.length; i$ < len$; ++i$) {\n        i = i$;\n        item = data[i$];\n        if (item.type === 'heading') {\n          if (i !== 0) {\n            out();\n          }\n          out(item.value + \":\");\n        } else {\n          pre = item.pre, desc = item.desc, descLen = item.descLen, wrap = item.wrap;\n          if (maxWidth != null) {\n            if (wrapAllFull || wrap === 'full') {\n              wrap = wordwrap(initialIndent + secondaryIndent, maxWidth);\n              out(initialSpace + \"\" + pre + \"\\n\" + wrap(desc));\n              continue;\n            } else if (wrap === 'partial') {\n              wrap = wordwrap(initialIndent + descSepLen + max(padAmount, pre.length), maxWidth);\n              out(initialSpace + \"\" + pad(pre, padAmount) + descriptionSeparator + wrap(desc).replace(/^\\s+/, ''));\n              continue;\n            }\n          }\n          if (descLen === 0) {\n            out(initialSpace + \"\" + pre);\n          } else {\n            out(initialSpace + \"\" + pad(pre, padAmount) + descriptionSeparator + desc);\n          }\n        }\n      }\n      if (append) {\n        out();\n        out(interpolate ? interp(append, interpolate) : append);\n      }\n      return unlines(output);\n    };\n  };\n  function pad(str, num){\n    var len, padAmount;\n    len = str.length;\n    padAmount = num - len;\n    return str + \"\" + repeatString$(' ', padAmount > 0 ? padAmount : 0);\n  }\n  function sentencize(str){\n    var first, rest, period;\n    first = str.charAt(0).toUpperCase();\n    rest = str.slice(1);\n    period = /[\\.!\\?]$/.test(str) ? '' : '.';\n    return first + \"\" + rest + period;\n  }\n  function interp(string, object){\n    return string.replace(/{{([a-zA-Z$_][a-zA-Z$_0-9]*)}}/g, function(arg$, key){\n      var ref$;\n      return (ref$ = object[key]) != null\n        ? ref$\n        : \"{{\" + key + \"}}\";\n    });\n  }\n  module.exports = {\n    generateHelp: generateHelp,\n    generateHelpForOption: generateHelpForOption\n  };\n  function repeatString$(str, n){\n    for (var r = ''; n > 0; (n >>= 1) && (str += str)) if (n & 1) r += str;\n    return r;\n  }\n}).call(this);\n/package.json\u0003x{\n  \"name\": \"optionator\",\n  \"version\": \"0.9.1\",\n  \"author\": \"George Zahariev <z@georgezahariev.com>\",\n  \"description\": \"option parsing and help generation\",\n  \"homepage\": \"https://github.com/gkz/optionator\",\n  \"keywords\": [\n    \"options\",\n    \"flags\",\n    \"option parsing\",\n    \"cli\"\n  ],\n  \"files\": [\n    \"lib\",\n    \"README.md\",\n    \"LICENSE\"\n  ],\n  \"main\": \"./lib/\",\n  \"bugs\": \"https://github.com/gkz/optionator/issues\",\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"node\": \">= 0.8.0\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git://github.com/gkz/optionator.git\"\n  },\n  \"scripts\": {\n    \"test\": \"make test\"\n  },\n  \"dependencies\": {\n    \"prelude-ls\": \"^1.2.1\",\n    \"deep-is\": \"^0.1.3\",\n    \"word-wrap\": \"^1.2.3\",\n    \"type-check\": \"^0.4.0\",\n    \"levn\": \"^0.4.1\",\n    \"fast-levenshtein\": \"^2.0.6\"\n  },\n  \"devDependencies\": {\n    \"livescript\": \"^1.6.0\",\n    \"mocha\": \"^7.1.1\"\n  }\n}\n/CHANGELOG.md\u0007# 0.9.0\n- update dependencies, in particular `levn` and `type-check` - this could affect behaviour of argument parsing\n\n# 0.8.3\n- changes dependency from `wordwrap` to `word-wrap` due to license issue\n- update dependencies\n\n# 0.8.2\n- fix bug #18 - detect missing value when flag is last item\n- update dependencies\n\n# 0.8.1\n- update `fast-levenshtein` dependency\n\n# 0.8.0\n- update `levn` dependency - supplying a float value to an option with type `Int` now throws an error, instead of silently converting to an `Int`\n\n# 0.7.1\n- fix bug with use of `defaults` and `concatRepeatedArrays` or `mergeRepeatedObjects`\n\n# 0.7.0\n- added `concatrepeatedarrays` option: `oneValuePerFlag`, only allows one array value per flag\n- added `typeAliases` option\n- added `parseArgv` which takes an array and parses with the first two items sliced off\n- changed enum help style\n- bug fixes (#12)\n- use of `concatRepeatedArrays` and `mergeRepeatedObjects` at the top level is deprecated, use it as either a per-option option, or set them in the `defaults` object to set them for all objects\n\n# 0.6.0\n- added `defaults` lib-option flag, allowing one to set default properties for all options\n- added `concatRepeatedArrays` and `mergeRepeatedObjects` as option level properties, allowing you to turn this feature on for specific options only\n\n# 0.5.0\n- `Boolean` flags with `default: 'true'`, and no short aliases, will by default show the `--no` version in help\n\n# 0.4.0\n- add `mergeRepeatedObjects` setting\n\n# 0.3.0\n- add `concatRepeatedArrays` setting\n- add `overrideRequired` option setting\n- use just Levenshtein string compare algo rather than Levenshtein Damerau to due dependency license issue\n\n# 0.2.2\n- bug fixes\n\n# 0.2.1\n- improved interpolation\n- added changelog\n\n# 0.2.0\n- add dependency checks to options - added `dependsOn` as an option property\n- add interpolation for `prepend` and `append` text with new `generateHelp` option, `interpolate`\n\n# 0.1.1\n- update dependencies\n\n# 0.1.0\n- initial release\n/README.md:# Optionator\n<a name=\"optionator\" />\n\nOptionator is a JavaScript/Node.js option parsing and help generation library used by [eslint](http://eslint.org), [Grasp](http://graspjs.com), [LiveScript](http://livescript.net), [esmangle](https://github.com/estools/esmangle), [escodegen](https://github.com/estools/escodegen), and [many more](https://www.npmjs.com/browse/depended/optionator).\n\nFor an online demo, check out the [Grasp online demo](http://www.graspjs.com/#demo).\n\n[About](#about) &middot; [Usage](#usage) &middot; [Settings Format](#settings-format) &middot; [Argument Format](#argument-format)\n\n## Why?\nThe  problem with other option parsers, such as `yargs` or `minimist`, is they just accept all input, valid or not.\nWith Optionator, if you mistype an option, it will give you an error (with a suggestion for what you meant).\nIf you give the wrong type of argument for an option, it will give you an error rather than supplying the wrong input to your application.\n\n    $ cmd --halp\n    Invalid option '--halp' - perhaps you meant '--help'?\n\n    $ cmd --count str\n    Invalid value for option 'count' - expected type Int, received value: str.\n\nOther helpful features include reformatting the help text based on the size of the console, so that it fits even if the console is narrow, and accepting not just an array (eg. process.argv), but a string or object as well, making things like testing much easier.\n\n## About\nOptionator uses [type-check](https://github.com/gkz/type-check) and [levn](https://github.com/gkz/levn) behind the scenes to cast and verify input according the specified types.\n\nMIT license. Version 0.9.1\n\n    npm install optionator\n\nFor updates on Optionator, [follow me on twitter](https://twitter.com/gkzahariev).\n\nOptionator is a Node.js module, but can be used in the browser as well if packed with webpack/browserify.\n\n## Usage\n`require('optionator');` returns a function. It has one property, `VERSION`, the current version of the library as a string. This function is called with an object specifying your options and other information, see the [settings format section](#settings-format). This in turn returns an object with three properties, `parse`, `parseArgv`, `generateHelp`, and `generateHelpForOption`, which are all functions.\n\n```js\nvar optionator = require('optionator')({\n    prepend: 'Usage: cmd [options]',\n    append: 'Version 1.0.0',\n    options: [{\n        option: 'help',\n        alias: 'h',\n        type: 'Boolean',\n        description: 'displays help'\n    }, {\n        option: 'count',\n        alias: 'c',\n        type: 'Int',\n        description: 'number of things',\n        example: 'cmd --count 2'\n    }]\n});\n\nvar options = optionator.parseArgv(process.argv);\nif (options.help) {\n    console.log(optionator.generateHelp());\n}\n...\n```\n\n### parse(input, parseOptions)\n`parse` processes the `input` according to your settings, and returns an object with the results.\n\n##### arguments\n* input - `[String] | Object | String` - the input you wish to parse\n* parseOptions - `{slice: Int}` - all options optional\n    - `slice` specifies how much to slice away from the beginning if the input is an array or string - by default `0` for string, `2` for array (works with `process.argv`)\n\n##### returns\n`Object` - the parsed options, each key is a camelCase version of the option name (specified in dash-case), and each value is the processed value for that option. Positional values are in an array under the `_` key.\n\n##### example\n```js\nparse(['node', 't.js', '--count', '2', 'positional']); // {count: 2, _: ['positional']}\nparse('--count 2 positional');                         // {count: 2, _: ['positional']}\nparse({count: 2, _:['positional']});                   // {count: 2, _: ['positional']}\n```\n\n### parseArgv(input)\n`parseArgv` works exactly like `parse`, but only for array input and it slices off the first two elements.\n\n##### arguments\n* input - `[String]` - the input you wish to parse\n\n##### returns\nSee \"returns\" section in \"parse\"\n\n##### example\n```js\nparseArgv(process.argv);\n```\n\n### generateHelp(helpOptions)\n`generateHelp` produces help text based on your settings.\n\n##### arguments\n* helpOptions - `{showHidden: Boolean, interpolate: Object}` - all options optional\n    - `showHidden` specifies whether to show options with `hidden: true` specified, by default it is `false`\n    - `interpolate` specify data to be interpolated in `prepend` and `append` text, `{{key}}` is the format - eg. `generateHelp({interpolate:{version: '0.4.2'}})`, will change this `append` text: `Version {{version}}` to `Version 0.4.2`\n\n##### returns\n`String` - the generated help text\n\n##### example\n```js\ngenerateHelp(); /*\n\"Usage: cmd [options] positional\n\n  -h, --help       displays help\n  -c, --count Int  number of things\n\nVersion  1.0.0\n\"*/\n```\n\n### generateHelpForOption(optionName)\n`generateHelpForOption` produces expanded help text for the specified with `optionName` option. If an `example` was specified for the option, it will be displayed,  and if a `longDescription` was specified, it will display that instead of the `description`.\n\n##### arguments\n* optionName - `String` - the name of the option to display\n\n##### returns\n`String` - the generated help text for the option\n\n##### example\n```js\ngenerateHelpForOption('count'); /*\n\"-c, --count Int\ndescription: number of things\nexample: cmd --count 2\n\"*/\n```\n\n## Settings Format\nWhen your `require('optionator')`, you get a function that takes in a settings object. This object has the type:\n\n    {\n      prepend: String,\n      append: String,\n      options: [{heading: String} | {\n        option: String,\n        alias: [String] | String,\n        type: String,\n        enum: [String],\n        default: String,\n        restPositional: Boolean,\n        required: Boolean,\n        overrideRequired: Boolean,\n        dependsOn: [String] | String,\n        concatRepeatedArrays: Boolean | (Boolean, Object),\n        mergeRepeatedObjects: Boolean,\n        description: String,\n        longDescription: String,\n        example: [String] | String\n      }],\n      helpStyle: {\n        aliasSeparator: String,\n        typeSeparator: String,\n        descriptionSeparator: String,\n        initialIndent: Int,\n        secondaryIndent: Int,\n        maxPadFactor: Number\n      },\n      mutuallyExclusive: [[String | [String]]],\n      concatRepeatedArrays: Boolean | (Boolean, Object), // deprecated, set in defaults object\n      mergeRepeatedObjects: Boolean, // deprecated, set in defaults object\n      positionalAnywhere: Boolean,\n      typeAliases: Object,\n      defaults: Object\n    }\n\nAll of the properties are optional (the `Maybe` has been excluded for brevities sake), except for having either `heading: String` or `option: String` in each object in the `options` array.\n\n### Top Level Properties\n* `prepend` is an optional string to be placed before the options in the help text\n* `append` is an optional string to be placed after the options in the help text\n* `options` is a required array specifying your options and headings, the options and headings will be displayed in the order specified\n* `helpStyle` is an optional object which enables you to change the default appearance of some aspects of the help text\n* `mutuallyExclusive` is an optional array of arrays of either strings or arrays of strings. The top level array is a list of rules, each rule is a list of elements - each element can be either a string (the name of an option), or a list of strings (a group of option names) - there will be an error if more than one element is present\n* `concatRepeatedArrays` see description under the \"Option Properties\" heading - use at the top level is deprecated, if you want to set this for all options, use the `defaults` property\n* `mergeRepeatedObjects` see description under the \"Option Properties\" heading - use at the top level is deprecated, if you want to set this for all options, use the `defaults` property\n* `positionalAnywhere` is an optional boolean (defaults to `true`) - when `true` it allows positional arguments anywhere, when `false`, all arguments after the first positional one are taken to be positional as well, even if they look like a flag. For example, with `positionalAnywhere: false`, the arguments `--flag --boom 12 --crack` would have two positional arguments: `12` and `--crack`\n* `typeAliases` is an optional object, it allows you to set aliases for types, eg. `{Path: 'String'}` would allow you to use the type `Path` as an alias for the type `String`\n* `defaults` is an optional object following the option properties format, which specifies default values for all options. A default will be overridden if manually set. For example, you can do `default: { type: \"String\" }` to set the default type of all options to `String`, and then override that default in an individual option by setting the `type` property\n\n#### Heading Properties\n* `heading` a required string, the name of the heading\n\n#### Option Properties\n* `option` the required name of the option - use dash-case, without the leading dashes\n* `alias` is an optional string or array of strings which specify any aliases for the option\n* `type` is a required string in the [type check](https://github.com/gkz/type-check) [format](https://github.com/gkz/type-check#type-format), this will be used to cast the inputted value and validate it\n* `enum` is an optional array of strings, each string will be parsed by [levn](https://github.com/gkz/levn) - the argument value must be one of the resulting values - each potential value must validate against the specified `type`\n* `default` is a optional string, which will be parsed by [levn](https://github.com/gkz/levn) and used as the default value if none is set - the value must validate against the specified `type`\n* `restPositional` is an optional boolean - if set to `true`, everything after the option will be taken to be a positional argument, even if it looks like a named argument\n* `required` is an optional boolean - if set to `true`, the option parsing will fail if the option is not defined\n* `overrideRequired` is a optional boolean - if set to `true` and the option is used, and there is another option which is required but not set, it will override the need for the required option and there will be no error - this is useful if you have required options and want to use `--help` or `--version` flags\n* `concatRepeatedArrays` is an optional boolean or tuple with boolean and options object (defaults to `false`) - when set to `true` and an option contains an array value and is repeated, the subsequent values for the flag will be appended rather than overwriting the original value - eg. option `g` of type `[String]`: `-g a -g b -g c,d` will result in `['a','b','c','d']`\n\n You can supply an options object by giving the following value: `[true, options]`. The one currently supported option is `oneValuePerFlag`, this only allows one array value per flag. This is useful if your potential values contain a comma.\n* `mergeRepeatedObjects` is an optional boolean (defaults to `false`) - when set to `true` and an option contains an object value and is repeated, the subsequent values for the flag will be merged rather than overwriting the original value - eg. option `g` of type `Object`: `-g a:1 -g b:2 -g c:3,d:4` will result in `{a: 1, b: 2, c: 3, d: 4}`\n* `dependsOn` is an optional string or array of strings - if simply a string (the name of another option), it will make sure that that other option is set, if an array of strings, depending on whether `'and'` or `'or'` is first, it will either check whether all (`['and', 'option-a', 'option-b']`), or at least one (`['or', 'option-a', 'option-b']`) other options are set\n* `description` is an optional string, which will be displayed next to the option in the help text\n* `longDescription` is an optional string, it will be displayed instead of the `description` when `generateHelpForOption` is used\n* `example` is an optional string or array of strings with example(s) for the option - these will be displayed when `generateHelpForOption` is used\n\n#### Help Style Properties\n* `aliasSeparator` is an optional string, separates multiple names from each other - default: ' ,'\n* `typeSeparator` is an optional string, separates the type from the names - default: ' '\n* `descriptionSeparator` is an optional string , separates the description from the padded name and type - default: '  '\n* `initialIndent` is an optional int - the amount of indent for options - default: 2\n* `secondaryIndent` is an optional int - the amount of indent if wrapped fully (in addition to the initial indent) - default: 4\n* `maxPadFactor` is an optional number - affects the default level of padding for the names/type, it is multiplied by the average of the length of the names/type - default: 1.5\n\n## Argument Format\nAt the highest level there are two types of arguments: named, and positional.\n\nName arguments of any length are prefixed with `--` (eg. `--go`), and those of one character may be prefixed with either `--` or `-` (eg. `-g`).\n\nThere are two types of named arguments: boolean flags (eg. `--problemo`, `-p`) which take no value and result in a `true` if they are present, the falsey `undefined` if they are not present, or `false` if present and explicitly prefixed with `no` (eg. `--no-problemo`). Named arguments with values (eg. `--tseries 800`, `-t 800`) are the other type. If the option has a type `Boolean` it will automatically be made into a boolean flag. Any other type results in a named argument that takes a value.\n\nFor more information about how to properly set types to get the value you want, take a look at the [type check](https://github.com/gkz/type-check) and [levn](https://github.com/gkz/levn) pages.\n\nYou can group single character arguments that use a single `-`, however all except the last must be boolean flags (which take no value). The last may be a boolean flag, or an argument which takes a value - eg. `-ba 2` is equivalent to `-b -a 2`.\n\nPositional arguments are all those values which do not fall under the above - they can be anywhere, not just at the end. For example, in `cmd -b one -a 2 two` where `b` is a boolean flag, and `a` has the type `Number`, there are two positional arguments, `one` and `two`.\n\nEverything after an `--` is positional, even if it looks like a named argument.\n\nYou may optionally use `=` to separate option names from values, for example: `--count=2`.\n\nIf you specify the option `NUM`, then any argument using a single `-` followed by a number will be valid and will set the value of `NUM`. Eg. `-2` will be parsed into `NUM: 2`.\n\nIf duplicate named arguments are present, the last one will be taken.\n\n## Technical About\n`optionator` is written in [LiveScript](http://livescript.net/) - a language that compiles to JavaScript. It uses [levn](https://github.com/gkz/levn) to cast arguments to their specified type, and uses [type-check](https://github.com/gkz/type-check) to validate values. It also uses the [prelude.ls](http://preludels.com/) library.\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/b3JhQDYuMi4w",
    "content": "/index.d.ts\u001a?import {SpinnerName} from 'cli-spinners';\n\nexport interface Spinner {\n\treadonly interval?: number;\n\treadonly frames: string[];\n}\n\nexport type Color =\n\t| 'black'\n\t| 'red'\n\t| 'green'\n\t| 'yellow'\n\t| 'blue'\n\t| 'magenta'\n\t| 'cyan'\n\t| 'white'\n\t| 'gray';\n\nexport type PrefixTextGenerator = () => string;\n\nexport interface Options {\n\t/**\n\tText to display after the spinner.\n\t*/\n\treadonly text?: string;\n\n\t/**\n\tText or a function that returns text to display before the spinner. No prefix text will be displayed if set to an empty string.\n\t*/\n\treadonly prefixText?: string | PrefixTextGenerator;\n\n\t/**\n\tName of one of the provided spinners. See [`example.js`](https://github.com/BendingBender/ora/blob/main/example.js) in this repo if you want to test out different spinners. On Windows, it will always use the line spinner as the Windows command-line doesn't have proper Unicode support.\n\n\t@default 'dots'\n\n\tOr an object like:\n\n\t@example\n\t```\n\t{\n\t\tinterval: 80, // Optional\n\t\tframes: ['-', '+', '-']\n\t}\n\t```\n\t*/\n\treadonly spinner?: SpinnerName | Spinner;\n\n\t/**\n\tThe color of the spinner.\n\n\t@default 'cyan'\n\t*/\n\treadonly color?: Color;\n\n\t/**\n\tSet to `false` to stop Ora from hiding the cursor.\n\n\t@default true\n\t*/\n\treadonly hideCursor?: boolean;\n\n\t/**\n\tIndent the spinner with the given number of spaces.\n\n\t@default 0\n\t*/\n\treadonly indent?: number;\n\n\t/**\n\tInterval between each frame.\n\n\tSpinners provide their own recommended interval, so you don't really need to specify this.\n\n\tDefault: Provided by the spinner or `100`.\n\t*/\n\treadonly interval?: number;\n\n\t/**\n\tStream to write the output.\n\n\tYou could for example set this to `process.stdout` instead.\n\n\t@default process.stderr\n\t*/\n\treadonly stream?: NodeJS.WritableStream;\n\n\t/**\n\tForce enable/disable the spinner. If not specified, the spinner will be enabled if the `stream` is being run inside a TTY context (not spawned or piped) and/or not in a CI environment.\n\n\tNote that `{isEnabled: false}` doesn't mean it won't output anything. It just means it won't output the spinner, colors, and other ansi escape codes. It will still log text.\n\t*/\n\treadonly isEnabled?: boolean;\n\n\t/**\n\tDisable the spinner and all log text. All output is suppressed and `isEnabled` will be considered `false`.\n\n\t@default false\n\t*/\n\treadonly isSilent?: boolean;\n\n\t/**\n\tDiscard stdin input (except Ctrl+C) while running if it's TTY. This prevents the spinner from twitching on input, outputting broken lines on `Enter` key presses, and prevents buffering of input while the spinner is running.\n\n\tThis has no effect on Windows as there's no good way to implement discarding stdin properly there.\n\n\t@default true\n\t*/\n\treadonly discardStdin?: boolean;\n}\n\nexport interface PersistOptions {\n\t/**\n\tSymbol to replace the spinner with.\n\n\t@default ' '\n\t*/\n\treadonly symbol?: string;\n\n\t/**\n\tText to be persisted after the symbol.\n\n\tDefault: Current `text`.\n\t*/\n\treadonly text?: string;\n\n\t/**\n\tText or a function that returns text to be persisted before the symbol. No prefix text will be displayed if set to an empty string.\n\n\tDefault: Current `prefixText`.\n\t*/\n\treadonly prefixText?: string | PrefixTextGenerator;\n}\n\nexport interface PromiseOptions<T> extends Options {\n\t/**\n\tThe new text of the spinner when the promise is resolved.\n\n\tKeeps the existing text if `undefined`.\n\t*/\n\tsuccessText?: string | ((result: T) => string) | undefined;\n\n\t/**\n\tThe new text of the spinner when the promise is rejected.\n\n\tKeeps the existing text if `undefined`.\n\t*/\n\tfailText?: string | ((error: Error) => string) | undefined;\n}\n\nexport interface Ora {\n\t/**\n\tChange the text after the spinner.\n\t*/\n\ttext: string;\n\n\t/**\n\tChange the text or function that returns text before the spinner.\n\n\tNo prefix text will be displayed if set to an empty string.\n\t*/\n\tprefixText: string;\n\n\t/**\n\tChange the spinner color.\n\t*/\n\tcolor: Color;\n\n\t/**\n\tChange the spinner indent.\n\t*/\n\tindent: number;\n\n\t/**\n\tGet the spinner.\n\t*/\n\tget spinner(): Spinner;\n\n\t/**\n\tSet the spinner.\n\t*/\n\tset spinner(spinner: SpinnerName | Spinner);\n\n\t/**\n\tA boolean of whether the instance is currently spinning.\n\t*/\n\tget isSpinning(): boolean;\n\n\t/**\n\tThe interval between each frame.\n\n\tThe interval is decided by the chosen spinner.\n\t*/\n\tget interval(): number;\n\n\t/**\n\tStart the spinner.\n\n\t@param text - Set the current text.\n\t@returns The spinner instance.\n\t*/\n\tstart(text?: string): this;\n\n\t/**\n\tStop and clear the spinner.\n\n\t@returns The spinner instance.\n\t*/\n\tstop(): this;\n\n\t/**\n\tStop the spinner, change it to a green `✔` and persist the current text, or `text` if provided.\n\n\t@param text - Will persist text if provided.\n\t@returns The spinner instance.\n\t*/\n\tsucceed(text?: string): this;\n\n\t/**\n\tStop the spinner, change it to a red `✖` and persist the current text, or `text` if provided.\n\n\t@param text - Will persist text if provided.\n\t@returns The spinner instance.\n\t*/\n\tfail(text?: string): this;\n\n\t/**\n\tStop the spinner, change it to a yellow `⚠` and persist the current text, or `text` if provided.\n\n\t@param text - Will persist text if provided.\n\t@returns The spinner instance.\n\t*/\n\twarn(text?: string): this;\n\n\t/**\n\tStop the spinner, change it to a blue `ℹ` and persist the current text, or `text` if provided.\n\n\t@param text - Will persist text if provided.\n\t@returns The spinner instance.\n\t*/\n\tinfo(text?: string): this;\n\n\t/**\n\tStop the spinner and change the symbol or text.\n\n\t@returns The spinner instance.\n\t*/\n\tstopAndPersist(options?: PersistOptions): this;\n\n\t/**\n\tClear the spinner.\n\n\t@returns The spinner instance.\n\t*/\n\tclear(): this;\n\n\t/**\n\tManually render a new frame.\n\n\t@returns The spinner instance.\n\t*/\n\trender(): this;\n\n\t/**\n\tGet a new frame.\n\n\t@returns The spinner instance text.\n\t*/\n\tframe(): string;\n}\n\n/**\nElegant terminal spinner.\n\n@param options - If a string is provided, it is treated as a shortcut for `options.text`.\n\n@example\n```\nimport ora from 'ora';\n\nconst spinner = ora('Loading unicorns').start();\n\nsetTimeout(() => {\n\tspinner.color = 'yellow';\n\tspinner.text = 'Loading rainbows';\n}, 1000);\n```\n*/\nexport default function ora(options?: string | Options): Ora;\n\n/**\nStarts a spinner for a promise or promise-returning function. The spinner is stopped with `.succeed()` if the promise fulfills or with `.fail()` if it rejects.\n\n@param action - The promise to start the spinner for or a promise-returning function.\n@param options - If a string is provided, it is treated as a shortcut for `options.text`.\n@returns The given promise.\n\n@example\n```\nimport {oraPromise} from 'ora';\n\nawait oraPromise(somePromise);\n```\n*/\nexport function oraPromise<T>(\n\taction: PromiseLike<T> | ((spinner: Ora) => PromiseLike<T>),\n\toptions?: string | PromiseOptions<T>\n): Promise<T>;\n\nexport {default as spinners} from 'cli-spinners';\n/index.js import process from 'node:process';\nimport chalk from 'chalk';\nimport cliCursor from 'cli-cursor';\nimport cliSpinners from 'cli-spinners';\nimport logSymbols from 'log-symbols';\nimport stripAnsi from 'strip-ansi';\nimport wcwidth from 'wcwidth';\nimport isInteractive from 'is-interactive';\nimport isUnicodeSupported from 'is-unicode-supported';\nimport stdinDiscarder from 'stdin-discarder';\n\nclass Ora {\n\t#linesToClear = 0;\n\t#isDiscardingStdin = false;\n\t#lineCount = 0;\n\t#frameIndex = 0;\n\t#options;\n\t#spinner;\n\t#stream;\n\t#id;\n\t#initialInterval;\n\t#isEnabled;\n\t#isSilent;\n\t#indent;\n\t#text;\n\t#prefixText;\n\n\tcolor;\n\n\tconstructor(options) {\n\t\tif (typeof options === 'string') {\n\t\t\toptions = {\n\t\t\t\ttext: options,\n\t\t\t};\n\t\t}\n\n\t\tthis.#options = {\n\t\t\tcolor: 'cyan',\n\t\t\tstream: process.stderr,\n\t\t\tdiscardStdin: true,\n\t\t\thideCursor: true,\n\t\t\t...options,\n\t\t};\n\n\t\t// Public\n\t\tthis.color = this.#options.color;\n\n\t\t// It's important that these use the public setters.\n\t\tthis.spinner = this.#options.spinner;\n\n\t\tthis.#initialInterval = this.#options.interval;\n\t\tthis.#stream = this.#options.stream;\n\t\tthis.#isEnabled = typeof this.#options.isEnabled === 'boolean' ? this.#options.isEnabled : isInteractive({stream: this.#stream});\n\t\tthis.#isSilent = typeof this.#options.isSilent === 'boolean' ? this.#options.isSilent : false;\n\n\t\t// Set *after* `this.#stream`.\n\t\t// It's important that these use the public setters.\n\t\tthis.text = this.#options.text;\n\t\tthis.prefixText = this.#options.prefixText;\n\t\tthis.indent = this.#options.indent;\n\n\t\tif (process.env.NODE_ENV === 'test') {\n\t\t\tthis._stream = this.#stream;\n\t\t\tthis._isEnabled = this.#isEnabled;\n\n\t\t\tObject.defineProperty(this, '_linesToClear', {\n\t\t\t\tget() {\n\t\t\t\t\treturn this.#linesToClear;\n\t\t\t\t},\n\t\t\t\tset(newValue) {\n\t\t\t\t\tthis.#linesToClear = newValue;\n\t\t\t\t},\n\t\t\t});\n\n\t\t\tObject.defineProperty(this, '_frameIndex', {\n\t\t\t\tget() {\n\t\t\t\t\treturn this.#frameIndex;\n\t\t\t\t},\n\t\t\t});\n\n\t\t\tObject.defineProperty(this, '_lineCount', {\n\t\t\t\tget() {\n\t\t\t\t\treturn this.#lineCount;\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\t}\n\n\tget indent() {\n\t\treturn this.#indent;\n\t}\n\n\tset indent(indent = 0) {\n\t\tif (!(indent >= 0 && Number.isInteger(indent))) {\n\t\t\tthrow new Error('The `indent` option must be an integer from 0 and up');\n\t\t}\n\n\t\tthis.#indent = indent;\n\t\tthis.updateLineCount();\n\t}\n\n\tget interval() {\n\t\treturn this.#initialInterval || this.#spinner.interval || 100;\n\t}\n\n\tget spinner() {\n\t\treturn this.#spinner;\n\t}\n\n\tset spinner(spinner) {\n\t\tthis.#frameIndex = 0;\n\t\tthis.#initialInterval = undefined;\n\n\t\tif (typeof spinner === 'object') {\n\t\t\tif (spinner.frames === undefined) {\n\t\t\t\tthrow new Error('The given spinner must have a `frames` property');\n\t\t\t}\n\n\t\t\tthis.#spinner = spinner;\n\t\t} else if (!isUnicodeSupported()) {\n\t\t\tthis.#spinner = cliSpinners.line;\n\t\t} else if (spinner === undefined) {\n\t\t\t// Set default spinner\n\t\t\tthis.#spinner = cliSpinners.dots;\n\t\t} else if (spinner !== 'default' && cliSpinners[spinner]) {\n\t\t\tthis.#spinner = cliSpinners[spinner];\n\t\t} else {\n\t\t\tthrow new Error(`There is no built-in spinner named '${spinner}'. See https://github.com/sindresorhus/cli-spinners/blob/main/spinners.json for a full list.`);\n\t\t}\n\t}\n\n\tget text() {\n\t\treturn this.#text;\n\t}\n\n\tset text(value) {\n\t\tthis.#text = value || '';\n\t\tthis.updateLineCount();\n\t}\n\n\tget prefixText() {\n\t\treturn this.#prefixText;\n\t}\n\n\tset prefixText(value) {\n\t\tthis.#prefixText = value || '';\n\t\tthis.updateLineCount();\n\t}\n\n\tget isSpinning() {\n\t\treturn this.#id !== undefined;\n\t}\n\n\t// TODO: Use private methods when targeting Node.js 14.\n\tgetFullPrefixText(prefixText = this.#prefixText, postfix = ' ') {\n\t\tif (typeof prefixText === 'string' && prefixText !== '') {\n\t\t\treturn prefixText + postfix;\n\t\t}\n\n\t\tif (typeof prefixText === 'function') {\n\t\t\treturn prefixText() + postfix;\n\t\t}\n\n\t\treturn '';\n\t}\n\n\tupdateLineCount() {\n\t\tconst columns = this.#stream.columns || 80;\n\t\tconst fullPrefixText = this.getFullPrefixText(this.#prefixText, '-');\n\n\t\tthis.#lineCount = 0;\n\t\tfor (const line of stripAnsi(' '.repeat(this.#indent) + fullPrefixText + '--' + this.#text).split('\\n')) {\n\t\t\tthis.#lineCount += Math.max(1, Math.ceil(wcwidth(line) / columns));\n\t\t}\n\t}\n\n\tget isEnabled() {\n\t\treturn this.#isEnabled && !this.#isSilent;\n\t}\n\n\tset isEnabled(value) {\n\t\tif (typeof value !== 'boolean') {\n\t\t\tthrow new TypeError('The `isEnabled` option must be a boolean');\n\t\t}\n\n\t\tthis.#isEnabled = value;\n\t}\n\n\tget isSilent() {\n\t\treturn this.#isSilent;\n\t}\n\n\tset isSilent(value) {\n\t\tif (typeof value !== 'boolean') {\n\t\t\tthrow new TypeError('The `isSilent` option must be a boolean');\n\t\t}\n\n\t\tthis.#isSilent = value;\n\t}\n\n\tframe() {\n\t\tconst {frames} = this.#spinner;\n\t\tlet frame = frames[this.#frameIndex];\n\n\t\tif (this.color) {\n\t\t\tframe = chalk[this.color](frame);\n\t\t}\n\n\t\tthis.#frameIndex = ++this.#frameIndex % frames.length;\n\t\tconst fullPrefixText = (typeof this.#prefixText === 'string' && this.#prefixText !== '') ? this.#prefixText + ' ' : '';\n\t\tconst fullText = typeof this.text === 'string' ? ' ' + this.text : '';\n\n\t\treturn fullPrefixText + frame + fullText;\n\t}\n\n\tclear() {\n\t\tif (!this.#isEnabled || !this.#stream.isTTY) {\n\t\t\treturn this;\n\t\t}\n\n\t\tthis.#stream.cursorTo(0);\n\n\t\tfor (let index = 0; index < this.#linesToClear; index++) {\n\t\t\tif (index > 0) {\n\t\t\t\tthis.#stream.moveCursor(0, -1);\n\t\t\t}\n\n\t\t\tthis.#stream.clearLine(1);\n\t\t}\n\n\t\tif (this.#indent || this.lastIndent !== this.#indent) {\n\t\t\tthis.#stream.cursorTo(this.#indent);\n\t\t}\n\n\t\tthis.lastIndent = this.#indent;\n\t\tthis.#linesToClear = 0;\n\n\t\treturn this;\n\t}\n\n\trender() {\n\t\tif (this.#isSilent) {\n\t\t\treturn this;\n\t\t}\n\n\t\tthis.clear();\n\t\tthis.#stream.write(this.frame());\n\t\tthis.#linesToClear = this.#lineCount;\n\n\t\treturn this;\n\t}\n\n\tstart(text) {\n\t\tif (text) {\n\t\t\tthis.text = text;\n\t\t}\n\n\t\tif (this.#isSilent) {\n\t\t\treturn this;\n\t\t}\n\n\t\tif (!this.#isEnabled) {\n\t\t\tif (this.text) {\n\t\t\t\tthis.#stream.write(`- ${this.text}\\n`);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t}\n\n\t\tif (this.isSpinning) {\n\t\t\treturn this;\n\t\t}\n\n\t\tif (this.#options.hideCursor) {\n\t\t\tcliCursor.hide(this.#stream);\n\t\t}\n\n\t\tif (this.#options.discardStdin && process.stdin.isTTY) {\n\t\t\tthis.#isDiscardingStdin = true;\n\t\t\tstdinDiscarder.start();\n\t\t}\n\n\t\tthis.render();\n\t\tthis.#id = setInterval(this.render.bind(this), this.interval);\n\n\t\treturn this;\n\t}\n\n\tstop() {\n\t\tif (!this.#isEnabled) {\n\t\t\treturn this;\n\t\t}\n\n\t\tclearInterval(this.#id);\n\t\tthis.#id = undefined;\n\t\tthis.#frameIndex = 0;\n\t\tthis.clear();\n\t\tif (this.#options.hideCursor) {\n\t\t\tcliCursor.show(this.#stream);\n\t\t}\n\n\t\tif (this.#options.discardStdin && process.stdin.isTTY && this.#isDiscardingStdin) {\n\t\t\tstdinDiscarder.stop();\n\t\t\tthis.#isDiscardingStdin = false;\n\t\t}\n\n\t\treturn this;\n\t}\n\n\tsucceed(text) {\n\t\treturn this.stopAndPersist({symbol: logSymbols.success, text});\n\t}\n\n\tfail(text) {\n\t\treturn this.stopAndPersist({symbol: logSymbols.error, text});\n\t}\n\n\twarn(text) {\n\t\treturn this.stopAndPersist({symbol: logSymbols.warning, text});\n\t}\n\n\tinfo(text) {\n\t\treturn this.stopAndPersist({symbol: logSymbols.info, text});\n\t}\n\n\tstopAndPersist(options = {}) {\n\t\tif (this.#isSilent) {\n\t\t\treturn this;\n\t\t}\n\n\t\tconst prefixText = options.prefixText || this.#prefixText;\n\t\tconst text = options.text || this.text;\n\t\tconst fullText = (typeof text === 'string') ? ' ' + text : '';\n\n\t\tthis.stop();\n\t\tthis.#stream.write(`${this.getFullPrefixText(prefixText, ' ')}${options.symbol || ' '}${fullText}\\n`);\n\n\t\treturn this;\n\t}\n}\n\nexport default function ora(options) {\n\treturn new Ora(options);\n}\n\nexport async function oraPromise(action, options) {\n\tconst actionIsFunction = typeof action === 'function';\n\tconst actionIsPromise = typeof action.then === 'function';\n\n\tif (!actionIsFunction && !actionIsPromise) {\n\t\tthrow new TypeError('Parameter `action` must be a Function or a Promise');\n\t}\n\n\tconst {successText, failText} = typeof options === 'object'\n\t\t? options\n\t\t: {successText: undefined, failText: undefined};\n\n\tconst spinner = ora(options).start();\n\n\ttry {\n\t\tconst promise = actionIsFunction ? action(spinner) : action;\n\t\tconst result = await promise;\n\n\t\tspinner.succeed(\n\t\t\tsuccessText === undefined\n\t\t\t\t? undefined\n\t\t\t\t: (typeof successText === 'string' ? successText : successText(result)),\n\t\t);\n\n\t\treturn result;\n\t} catch (error) {\n\t\tspinner.fail(\n\t\t\tfailText === undefined\n\t\t\t\t? undefined\n\t\t\t\t: (typeof failText === 'string' ? failText : failText(error)),\n\t\t);\n\n\t\tthrow error;\n\t}\n}\n\nexport {default as spinners} from 'cli-spinners';\n/package.json\u0004p{\n\t\"name\": \"ora\",\n\t\"version\": \"6.2.0\",\n\t\"description\": \"Elegant terminal spinner\",\n\t\"license\": \"MIT\",\n\t\"repository\": \"sindresorhus/ora\",\n\t\"funding\": \"https://github.com/sponsors/sindresorhus\",\n\t\"author\": {\n\t\t\"name\": \"Sindre Sorhus\",\n\t\t\"email\": \"sindresorhus@gmail.com\",\n\t\t\"url\": \"https://sindresorhus.com\"\n\t},\n\t\"type\": \"module\",\n\t\"exports\": \"./index.js\",\n\t\"engines\": {\n\t\t\"node\": \"^12.20.0 || ^14.13.1 || >=16.0.0\"\n\t},\n\t\"scripts\": {\n\t\t\"test\": \"xo && ava && tsd\"\n\t},\n\t\"files\": [\n\t\t\"index.js\",\n\t\t\"index.d.ts\"\n\t],\n\t\"keywords\": [\n\t\t\"cli\",\n\t\t\"spinner\",\n\t\t\"spinners\",\n\t\t\"terminal\",\n\t\t\"term\",\n\t\t\"console\",\n\t\t\"ascii\",\n\t\t\"unicode\",\n\t\t\"loading\",\n\t\t\"indicator\",\n\t\t\"progress\",\n\t\t\"busy\",\n\t\t\"wait\",\n\t\t\"idle\"\n\t],\n\t\"dependencies\": {\n\t\t\"chalk\": \"^5.0.0\",\n\t\t\"cli-cursor\": \"^4.0.0\",\n\t\t\"cli-spinners\": \"^2.6.1\",\n\t\t\"is-interactive\": \"^2.0.0\",\n\t\t\"is-unicode-supported\": \"^1.1.0\",\n\t\t\"log-symbols\": \"^5.1.0\",\n\t\t\"stdin-discarder\": \"^0.1.0\",\n\t\t\"strip-ansi\": \"^7.0.1\",\n\t\t\"wcwidth\": \"^1.0.1\"\n\t},\n\t\"devDependencies\": {\n\t\t\"@types/node\": \"^17.0.18\",\n\t\t\"ava\": \"^4.0.1\",\n\t\t\"get-stream\": \"^6.0.1\",\n\t\t\"transform-tty\": \"^1.0.11\",\n\t\t\"tsd\": \"^0.19.1\",\n\t\t\"xo\": \"^0.48.0\"\n\t}\n}\n/license\u0004]MIT License\n\nCopyright (c) Sindre Sorhus <sindresorhus@gmail.com> (https://sindresorhus.com)\n\nPermission 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:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE 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.\n/readme.md\u001ci# ora\n\n> Elegant terminal spinner\n\n<p align=\"center\">\n\t<br>\n\t<img src=\"screenshot.svg\" width=\"500\">\n\t<br>\n</p>\n\n## Install\n\n```sh\nnpm install ora\n```\n\n## Usage\n\n```js\nimport ora from 'ora';\n\nconst spinner = ora('Loading unicorns').start();\n\nsetTimeout(() => {\n\tspinner.color = 'yellow';\n\tspinner.text = 'Loading rainbows';\n}, 1000);\n```\n\n## API\n\n### ora(text)\n### ora(options)\n\nIf a string is provided, it is treated as a shortcut for [`options.text`](#text).\n\n#### options\n\nType: `object`\n\n##### text\n\nType: `string`\n\nText to display after the spinner.\n\n##### prefixText\n\nType: `string | () => string`\n\nText or a function that returns text to display before the spinner. No prefix text will be displayed if set to an empty string.\n\n##### spinner\n\nType: `string | object`\\\nDefault: `'dots'` <img src=\"screenshot-spinner.gif\" width=\"14\">\n\nName of one of the [provided spinners](#spinners). See `example.js` in this repo if you want to test out different spinners. On Windows, it will always use the `line` spinner as the Windows command-line doesn't have proper Unicode support.\n\nOr an object like:\n\n```js\n{\n\tinterval: 80, // Optional\n\tframes: ['-', '+', '-']\n}\n```\n\n##### color\n\nType: `string`\\\nDefault: `'cyan'`\\\nValues: `'black' | 'red' | 'green' | 'yellow' | 'blue' | 'magenta' | 'cyan' | 'white' | 'gray'`\n\nThe color of the spinner.\n\n##### hideCursor\n\nType: `boolean`\\\nDefault: `true`\n\nSet to `false` to stop Ora from hiding the cursor.\n\n##### indent\n\nType: `number`\\\nDefault: `0`\n\nIndent the spinner with the given number of spaces.\n\n##### interval\n\nType: `number`\\\nDefault: Provided by the spinner or `100`\n\nInterval between each frame.\n\nSpinners provide their own recommended interval, so you don't really need to specify this.\n\n##### stream\n\nType: `stream.Writable`\\\nDefault: `process.stderr`\n\nStream to write the output.\n\nYou could for example set this to `process.stdout` instead.\n\n##### isEnabled\n\nType: `boolean`\n\nForce enable/disable the spinner. If not specified, the spinner will be enabled if the `stream` is being run inside a TTY context (not spawned or piped) and/or not in a CI environment.\n\nNote that `{isEnabled: false}` doesn't mean it won't output anything. It just means it won't output the spinner, colors, and other ansi escape codes. It will still log text.\n\n##### isSilent\n\nType: `boolean`\\\nDefault: `false`\n\nDisable the spinner and all log text. All output is suppressed and `isEnabled` will be considered `false`.\n\n##### discardStdin\n\nType: `boolean`\\\nDefault: `true`\n\nDiscard stdin input (except Ctrl+C) while running if it's TTY. This prevents the spinner from twitching on input, outputting broken lines on <kbd>Enter</kbd> key presses, and prevents buffering of input while the spinner is running.\n\nThis has no effect on Windows as there is no good way to implement discarding stdin properly there.\n\n### Instance\n\n#### .text <sup>get/set</sup>\n\nChange the text after the spinner.\n\n#### .prefixText <sup>get/set</sup>\n\nChange the text before the spinner.\n\nNo prefix text will be displayed if set to an empty string.\n\n#### .color <sup>get/set</sup>\n\nChange the spinner color.\n\n#### .spinner <sup>get/set</sup>\n\nChange the spinner.\n\n#### .indent <sup>get/set</sup>\n\nChange the spinner indent.\n\n#### .isSpinning <sup>get</sup>\n\nA boolean of whether the instance is currently spinning.\n\n#### .interval <sup>get</sup>\n\nThe interval between each frame.\n\nThe interval is decided by the chosen spinner.\n\n#### .start(text?)\n\nStart the spinner. Returns the instance. Set the current text if `text` is provided.\n\n#### .stop()\n\nStop and clear the spinner. Returns the instance.\n\n#### .succeed(text?)\n\nStop the spinner, change it to a green `✔` and persist the current text, or `text` if provided. Returns the instance. See the GIF below.\n\n#### .fail(text?)\n\nStop the spinner, change it to a red `✖` and persist the current text, or `text` if provided. Returns the instance. See the GIF below.\n\n#### .warn(text?)\n\nStop the spinner, change it to a yellow `⚠` and persist the current text, or `text` if provided. Returns the instance.\n\n#### .info(text?)\n\nStop the spinner, change it to a blue `ℹ` and persist the current text, or `text` if provided. Returns the instance.\n\n#### .stopAndPersist(options?)\n\nStop the spinner and change the symbol or text. Returns the instance. See the GIF below.\n\n##### options\n\nType: `object`\n\n###### symbol\n\nType: `string`\\\nDefault: `' '`\n\nSymbol to replace the spinner with.\n\n###### text\n\nType: `string`\\\nDefault: Current `'text'`\n\nText to be persisted after the symbol\n\n###### prefixText\n\nType: `string`\\\nDefault: Current `prefixText`\n\nText to be persisted before the symbol. No prefix text will be displayed if set to an empty string.\n\n<img src=\"screenshot-2.gif\" width=\"480\">\n\n#### .clear()\n\nClear the spinner. Returns the instance.\n\n#### .render()\n\nManually render a new frame. Returns the instance.\n\n#### .frame()\n\nGet a new frame.\n\n### oraPromise(action, text)\n### oraPromise(action, options)\n\nStarts a spinner for a promise or promise-returning function. The spinner is stopped with `.succeed()` if the promise fulfills or with `.fail()` if it rejects. Returns the promise.\n\n```js\nimport {oraPromise} from 'ora';\n\nawait oraPromise(somePromise);\n```\n\n#### action\n\nType: `Promise | ((spinner: ora.Ora) => Promise)`\n\n#### options\n\nType: `object`\n\nAll of the [options](#options) plus the following:\n\n##### successText\n\nType: `string | ((result: T) => string) | undefined`\n\nThe new text of the spinner when the promise is resolved.\n\nKeeps the existing text if `undefined`.\n\n##### failText\n\nType: `string | ((error: Error) => string) | undefined`\n\nThe new text of the spinner when the promise is rejected.\n\nKeeps the existing text if `undefined`.\n\n### spinners\n\nType: `Record<string, Spinner>`\n\nAll [provided spinners](https://github.com/sindresorhus/cli-spinners/blob/main/spinners.json).\n\n## FAQ\n\n### How do I change the color of the text?\n\nUse [Chalk](https://github.com/chalk/chalk):\n\n```js\nimport ora from 'ora';\nimport chalk from 'chalk';\n\nconst spinner = ora(`Loading ${chalk.red('unicorns')}`).start();\n```\n\n### Why does the spinner freeze?\n\nJavaScript is single-threaded, so synchronous operations blocks the thread, including the spinner animation. Prefer asynchronous operations whenever possible.\n\n## Related\n\n- [cli-spinners](https://github.com/sindresorhus/cli-spinners) - Spinners for use in the terminal\n- [listr](https://github.com/SamVerschueren/listr) - Terminal task list\n- [CLISpinner](https://github.com/kiliankoe/CLISpinner) - Terminal spinner library for Swift\n- [halo](https://github.com/ManrajGrover/halo) - Python port\n- [spinners](https://github.com/FGRibreau/spinners) - Terminal spinners for Rust\n- [marquee-ora](https://github.com/joeycozza/marquee-ora) - Scrolling marquee spinner for Ora\n- [briandowns/spinner](https://github.com/briandowns/spinner) - Terminal spinner/progress indicator for Go\n- [tj/go-spin](https://github.com/tj/go-spin) - Terminal spinner package for Go\n- [observablehq.com/@victordidenko/ora](https://observablehq.com/@victordidenko/ora) - Ora port to Observable notebooks\n- [spinnies](https://github.com/jcarpanelli/spinnies) - Terminal multi-spinner library for Node.js\n- [kia](https://github.com/HarryPeach/kia) - Simple terminal spinners for Deno 🦕\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/bG9kYXNoLm1lcmdlQDQuNi4y",
    "content": "/README.md\u0001# lodash.merge v4.6.2\n\nThe [Lodash](https://lodash.com/) method `_.merge` exported as a [Node.js](https://nodejs.org/) module.\n\n## Installation\n\nUsing npm:\n```bash\n$ {sudo -H} npm i -g npm\n$ npm i --save lodash.merge\n```\n\nIn Node.js:\n```js\nvar merge = require('lodash.merge');\n```\n\nSee the [documentation](https://lodash.com/docs#merge) or [package source](https://github.com/lodash/lodash/blob/4.6.2-npm-packages/lodash.merge) for more details.\n/LICENSE\u0007Copyright OpenJS Foundation and other contributors <https://openjsf.org/>\n\nBased on Underscore.js, copyright Jeremy Ashkenas,\nDocumentCloud and Investigative Reporters & Editors <http://underscorejs.org/>\n\nThis software consists of voluntary contributions made by many\nindividuals. For exact contribution history, see the revision history\navailable at https://github.com/lodash/lodash\n\nThe following license applies to all parts of this software except as\ndocumented below:\n\n====\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n====\n\nCopyright and related rights for sample code are waived via CC0. Sample\ncode is defined as all source code displayed within the prose of the\ndocumentation.\n\nCC0: http://creativecommons.org/publicdomain/zero/1.0/\n\n====\n\nFiles located in the node_modules and vendor directories are externally\nmaintained libraries used by this software which have their own\nlicenses; we recommend you read them, as their terms may differ from the\nterms above.\n/index.js/**\n * Lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright OpenJS Foundation and other contributors <https://openjsf.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n    HOT_SPAN = 16;\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    asyncTag = '[object AsyncFunction]',\n    boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    funcTag = '[object Function]',\n    genTag = '[object GeneratorFunction]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    nullTag = '[object Null]',\n    objectTag = '[object Object]',\n    proxyTag = '[object Proxy]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    undefinedTag = '[object Undefined]',\n    weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n  try {\n    // Use `util.types` for Node.js 10+.\n    var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n    if (types) {\n      return types;\n    }\n\n    // Legacy `process.binding('util')` for Node.js < 10.\n    return freeProcess && freeProcess.binding && freeProcess.binding('util');\n  } catch (e) {}\n}());\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n  switch (args.length) {\n    case 0: return func.call(thisArg);\n    case 1: return func.call(thisArg, args[0]);\n    case 2: return func.call(thisArg, args[0], args[1]);\n    case 3: return func.call(thisArg, args[0], args[1], args[2]);\n  }\n  return func.apply(thisArg, args);\n}\n\n/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n  var index = -1,\n      result = Array(n);\n\n  while (++index < n) {\n    result[index] = iteratee(index);\n  }\n  return result;\n}\n\n/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n  return function(value) {\n    return func(value);\n  };\n}\n\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n  return object == null ? undefined : object[key];\n}\n\n/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n  return function(arg) {\n    return func(transform(arg));\n  };\n}\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n    funcProto = Function.prototype,\n    objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n  var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n  return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n  funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n  .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n    Symbol = root.Symbol,\n    Uint8Array = root.Uint8Array,\n    allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,\n    getPrototype = overArg(Object.getPrototypeOf, Object),\n    objectCreate = Object.create,\n    propertyIsEnumerable = objectProto.propertyIsEnumerable,\n    splice = arrayProto.splice,\n    symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\nvar defineProperty = (function() {\n  try {\n    var func = getNative(Object, 'defineProperty');\n    func({}, '', {});\n    return func;\n  } catch (e) {}\n}());\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n    nativeMax = Math.max,\n    nativeNow = Date.now;\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map'),\n    nativeCreate = getNative(Object, 'create');\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nvar baseCreate = (function() {\n  function object() {}\n  return function(proto) {\n    if (!isObject(proto)) {\n      return {};\n    }\n    if (objectCreate) {\n      return objectCreate(proto);\n    }\n    object.prototype = proto;\n    var result = new object;\n    object.prototype = undefined;\n    return result;\n  };\n}());\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n  this.__data__ = nativeCreate ? nativeCreate(null) : {};\n  this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n  var result = this.has(key) && delete this.__data__[key];\n  this.size -= result ? 1 : 0;\n  return result;\n}\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n  var data = this.__data__;\n  if (nativeCreate) {\n    var result = data[key];\n    return result === HASH_UNDEFINED ? undefined : result;\n  }\n  return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n  var data = this.__data__;\n  return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n  var data = this.__data__;\n  this.size += this.has(key) ? 0 : 1;\n  data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n  return this;\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n  this.__data__ = [];\n  this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  if (index < 0) {\n    return false;\n  }\n  var lastIndex = data.length - 1;\n  if (index == lastIndex) {\n    data.pop();\n  } else {\n    splice.call(data, index, 1);\n  }\n  --this.size;\n  return true;\n}\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  return index < 0 ? undefined : data[index][1];\n}\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n  return assocIndexOf(this.__data__, key) > -1;\n}\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  if (index < 0) {\n    ++this.size;\n    data.push([key, value]);\n  } else {\n    data[index][1] = value;\n  }\n  return this;\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n  this.size = 0;\n  this.__data__ = {\n    'hash': new Hash,\n    'map': new (Map || ListCache),\n    'string': new Hash\n  };\n}\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n  var result = getMapData(this, key)['delete'](key);\n  this.size -= result ? 1 : 0;\n  return result;\n}\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n  return getMapData(this, key).get(key);\n}\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n  return getMapData(this, key).has(key);\n}\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n  var data = getMapData(this, key),\n      size = data.size;\n\n  data.set(key, value);\n  this.size += data.size == size ? 0 : 1;\n  return this;\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n  var data = this.__data__ = new ListCache(entries);\n  this.size = data.size;\n}\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n  this.__data__ = new ListCache;\n  this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n  var data = this.__data__,\n      result = data['delete'](key);\n\n  this.size = data.size;\n  return result;\n}\n\n/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n  return this.__data__.get(key);\n}\n\n/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n  return this.__data__.has(key);\n}\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n  var data = this.__data__;\n  if (data instanceof ListCache) {\n    var pairs = data.__data__;\n    if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n      pairs.push([key, value]);\n      this.size = ++data.size;\n      return this;\n    }\n    data = this.__data__ = new MapCache(pairs);\n  }\n  data.set(key, value);\n  this.size = data.size;\n  return this;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n  var isArr = isArray(value),\n      isArg = !isArr && isArguments(value),\n      isBuff = !isArr && !isArg && isBuffer(value),\n      isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n      skipIndexes = isArr || isArg || isBuff || isType,\n      result = skipIndexes ? baseTimes(value.length, String) : [],\n      length = result.length;\n\n  for (var key in value) {\n    if ((inherited || hasOwnProperty.call(value, key)) &&\n        !(skipIndexes && (\n           // Safari 9 has enumerable `arguments.length` in strict mode.\n           key == 'length' ||\n           // Node.js 0.10 has enumerable non-index properties on buffers.\n           (isBuff && (key == 'offset' || key == 'parent')) ||\n           // PhantomJS 2 has enumerable non-index properties on typed arrays.\n           (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n           // Skip index properties.\n           isIndex(key, length)\n        ))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\n/**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignMergeValue(object, key, value) {\n  if ((value !== undefined && !eq(object[key], value)) ||\n      (value === undefined && !(key in object))) {\n    baseAssignValue(object, key, value);\n  }\n}\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n  var objValue = object[key];\n  if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n      (value === undefined && !(key in object))) {\n    baseAssignValue(object, key, value);\n  }\n}\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n  var length = array.length;\n  while (length--) {\n    if (eq(array[length][0], key)) {\n      return length;\n    }\n  }\n  return -1;\n}\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n  if (key == '__proto__' && defineProperty) {\n    defineProperty(object, key, {\n      'configurable': true,\n      'enumerable': true,\n      'value': value,\n      'writable': true\n    });\n  } else {\n    object[key] = value;\n  }\n}\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n  if (value == null) {\n    return value === undefined ? undefinedTag : nullTag;\n  }\n  return (symToStringTag && symToStringTag in Object(value))\n    ? getRawTag(value)\n    : objectToString(value);\n}\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n  return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n *  else `false`.\n */\nfunction baseIsNative(value) {\n  if (!isObject(value) || isMasked(value)) {\n    return false;\n  }\n  var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n  return pattern.test(toSource(value));\n}\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n  return isObjectLike(value) &&\n    isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n  if (!isObject(object)) {\n    return nativeKeysIn(object);\n  }\n  var isProto = isPrototype(object),\n      result = [];\n\n  for (var key in object) {\n    if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\n/**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n *  counterparts.\n */\nfunction baseMerge(object, source, srcIndex, customizer, stack) {\n  if (object === source) {\n    return;\n  }\n  baseFor(source, function(srcValue, key) {\n    stack || (stack = new Stack);\n    if (isObject(srcValue)) {\n      baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n    }\n    else {\n      var newValue = customizer\n        ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n        : undefined;\n\n      if (newValue === undefined) {\n        newValue = srcValue;\n      }\n      assignMergeValue(object, key, newValue);\n    }\n  }, keysIn);\n}\n\n/**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n *  counterparts.\n */\nfunction baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n  var objValue = safeGet(object, key),\n      srcValue = safeGet(source, key),\n      stacked = stack.get(srcValue);\n\n  if (stacked) {\n    assignMergeValue(object, key, stacked);\n    return;\n  }\n  var newValue = customizer\n    ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n    : undefined;\n\n  var isCommon = newValue === undefined;\n\n  if (isCommon) {\n    var isArr = isArray(srcValue),\n        isBuff = !isArr && isBuffer(srcValue),\n        isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n    newValue = srcValue;\n    if (isArr || isBuff || isTyped) {\n      if (isArray(objValue)) {\n        newValue = objValue;\n      }\n      else if (isArrayLikeObject(objValue)) {\n        newValue = copyArray(objValue);\n      }\n      else if (isBuff) {\n        isCommon = false;\n        newValue = cloneBuffer(srcValue, true);\n      }\n      else if (isTyped) {\n        isCommon = false;\n        newValue = cloneTypedArray(srcValue, true);\n      }\n      else {\n        newValue = [];\n      }\n    }\n    else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n      newValue = objValue;\n      if (isArguments(objValue)) {\n        newValue = toPlainObject(objValue);\n      }\n      else if (!isObject(objValue) || isFunction(objValue)) {\n        newValue = initCloneObject(srcValue);\n      }\n    }\n    else {\n      isCommon = false;\n    }\n  }\n  if (isCommon) {\n    // Recursively merge objects and arrays (susceptible to call stack limits).\n    stack.set(srcValue, newValue);\n    mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n    stack['delete'](srcValue);\n  }\n  assignMergeValue(object, key, newValue);\n}\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n  return setToString(overRest(func, start, identity), func + '');\n}\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n  return defineProperty(func, 'toString', {\n    'configurable': true,\n    'enumerable': false,\n    'value': constant(string),\n    'writable': true\n  });\n};\n\n/**\n * Creates a clone of  `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n  if (isDeep) {\n    return buffer.slice();\n  }\n  var length = buffer.length,\n      result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n  buffer.copy(result);\n  return result;\n}\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n  var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n  new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n  return result;\n}\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n  var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n  return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\n/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n  var index = -1,\n      length = source.length;\n\n  array || (array = Array(length));\n  while (++index < length) {\n    array[index] = source[index];\n  }\n  return array;\n}\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n  var isNew = !object;\n  object || (object = {});\n\n  var index = -1,\n      length = props.length;\n\n  while (++index < length) {\n    var key = props[index];\n\n    var newValue = customizer\n      ? customizer(object[key], source[key], key, object, source)\n      : undefined;\n\n    if (newValue === undefined) {\n      newValue = source[key];\n    }\n    if (isNew) {\n      baseAssignValue(object, key, newValue);\n    } else {\n      assignValue(object, key, newValue);\n    }\n  }\n  return object;\n}\n\n/**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\nfunction createAssigner(assigner) {\n  return baseRest(function(object, sources) {\n    var index = -1,\n        length = sources.length,\n        customizer = length > 1 ? sources[length - 1] : undefined,\n        guard = length > 2 ? sources[2] : undefined;\n\n    customizer = (assigner.length > 3 && typeof customizer == 'function')\n      ? (length--, customizer)\n      : undefined;\n\n    if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n      customizer = length < 3 ? undefined : customizer;\n      length = 1;\n    }\n    object = Object(object);\n    while (++index < length) {\n      var source = sources[index];\n      if (source) {\n        assigner(object, source, index, customizer);\n      }\n    }\n    return object;\n  });\n}\n\n/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n  return function(object, iteratee, keysFunc) {\n    var index = -1,\n        iterable = Object(object),\n        props = keysFunc(object),\n        length = props.length;\n\n    while (length--) {\n      var key = props[fromRight ? length : ++index];\n      if (iteratee(iterable[key], key, iterable) === false) {\n        break;\n      }\n    }\n    return object;\n  };\n}\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n  var data = map.__data__;\n  return isKeyable(key)\n    ? data[typeof key == 'string' ? 'string' : 'hash']\n    : data.map;\n}\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n  var value = getValue(object, key);\n  return baseIsNative(value) ? value : undefined;\n}\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n  var isOwn = hasOwnProperty.call(value, symToStringTag),\n      tag = value[symToStringTag];\n\n  try {\n    value[symToStringTag] = undefined;\n    var unmasked = true;\n  } catch (e) {}\n\n  var result = nativeObjectToString.call(value);\n  if (unmasked) {\n    if (isOwn) {\n      value[symToStringTag] = tag;\n    } else {\n      delete value[symToStringTag];\n    }\n  }\n  return result;\n}\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n  return (typeof object.constructor == 'function' && !isPrototype(object))\n    ? baseCreate(getPrototype(object))\n    : {};\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n  var type = typeof value;\n  length = length == null ? MAX_SAFE_INTEGER : length;\n\n  return !!length &&\n    (type == 'number' ||\n      (type != 'symbol' && reIsUint.test(value))) &&\n        (value > -1 && value % 1 == 0 && value < length);\n}\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n *  else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n  if (!isObject(object)) {\n    return false;\n  }\n  var type = typeof index;\n  if (type == 'number'\n        ? (isArrayLike(object) && isIndex(index, object.length))\n        : (type == 'string' && index in object)\n      ) {\n    return eq(object[index], value);\n  }\n  return false;\n}\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n  var type = typeof value;\n  return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n    ? (value !== '__proto__')\n    : (value === null);\n}\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n  return !!maskSrcKey && (maskSrcKey in func);\n}\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n  var Ctor = value && value.constructor,\n      proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n  return value === proto;\n}\n\n/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n  var result = [];\n  if (object != null) {\n    for (var key in Object(object)) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n  return nativeObjectToString.call(value);\n}\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n  start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n  return function() {\n    var args = arguments,\n        index = -1,\n        length = nativeMax(args.length - start, 0),\n        array = Array(length);\n\n    while (++index < length) {\n      array[index] = args[start + index];\n    }\n    index = -1;\n    var otherArgs = Array(start + 1);\n    while (++index < start) {\n      otherArgs[index] = args[index];\n    }\n    otherArgs[start] = transform(array);\n    return apply(func, this, otherArgs);\n  };\n}\n\n/**\n * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction safeGet(object, key) {\n  if (key === 'constructor' && typeof object[key] === 'function') {\n    return;\n  }\n\n  if (key == '__proto__') {\n    return;\n  }\n\n  return object[key];\n}\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = shortOut(baseSetToString);\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n  var count = 0,\n      lastCalled = 0;\n\n  return function() {\n    var stamp = nativeNow(),\n        remaining = HOT_SPAN - (stamp - lastCalled);\n\n    lastCalled = stamp;\n    if (remaining > 0) {\n      if (++count >= HOT_COUNT) {\n        return arguments[0];\n      }\n    } else {\n      count = 0;\n    }\n    return func.apply(undefined, arguments);\n  };\n}\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n  if (func != null) {\n    try {\n      return funcToString.call(func);\n    } catch (e) {}\n    try {\n      return (func + '');\n    } catch (e) {}\n  }\n  return '';\n}\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n  return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n *  else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n  return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n    !propertyIsEnumerable.call(value, 'callee');\n};\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n  return value != null && isLength(value.length) && !isFunction(value);\n}\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n *  else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n  return isObjectLike(value) && isArrayLike(value);\n}\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n  if (!isObject(value)) {\n    return false;\n  }\n  // The use of `Object#toString` avoids issues with the `typeof` operator\n  // in Safari 9 which returns 'object' for typed arrays and other constructors.\n  var tag = baseGetTag(value);\n  return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n  return typeof value == 'number' &&\n    value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n  var type = typeof value;\n  return value != null && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return value != null && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n  if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n    return false;\n  }\n  var proto = getPrototype(value);\n  if (proto === null) {\n    return true;\n  }\n  var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n  return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n    funcToString.call(Ctor) == objectCtorString;\n}\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n/**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\nfunction toPlainObject(value) {\n  return copyObject(value, keysIn(value));\n}\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n  return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\n/**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n *   'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n *   'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\nvar merge = createAssigner(function(object, source, srcIndex) {\n  baseMerge(object, source, srcIndex);\n});\n\n/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n  return function() {\n    return value;\n  };\n}\n\n/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n  return value;\n}\n\n/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n  return false;\n}\n\nmodule.exports = merge;\n/package.json\u0002C{\n  \"name\": \"lodash.merge\",\n  \"version\": \"4.6.2\",\n  \"description\": \"The Lodash method `_.merge` exported as a module.\",\n  \"homepage\": \"https://lodash.com/\",\n  \"icon\": \"https://lodash.com/icon.svg\",\n  \"license\": \"MIT\",\n  \"keywords\": \"lodash-modularized, merge\",\n  \"author\": \"John-David Dalton <john.david.dalton@gmail.com>\",\n  \"contributors\": [\n    \"John-David Dalton <john.david.dalton@gmail.com>\",\n    \"Mathias Bynens <mathias@qiwi.be>\"\n  ],\n  \"repository\": \"lodash/lodash\",\n  \"scripts\": { \"test\": \"echo \\\"See https://travis-ci.org/lodash/lodash-cli for testing details.\\\"\" }\n}\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/bG9nLXN5bWJvbHNANS4xLjA=",
    "content": "/index.js\u0001import chalk from 'chalk';\nimport isUnicodeSupported from 'is-unicode-supported';\n\nconst main = {\n\tinfo: chalk.blue('ℹ'),\n\tsuccess: chalk.green('✔'),\n\twarning: chalk.yellow('⚠'),\n\terror: chalk.red('✖'),\n};\n\nconst fallback = {\n\tinfo: chalk.blue('i'),\n\tsuccess: chalk.green('√'),\n\twarning: chalk.yellow('‼'),\n\terror: chalk.red('×'),\n};\n\nconst logSymbols = isUnicodeSupported() ? main : fallback;\n\nexport default logSymbols;\n/readme.md\u0005z# log-symbols\n\n<img src=\"screenshot.png\" width=\"226\" height=\"192\" align=\"right\">\n\n> Colored symbols for various log levels\n\nIncludes fallbacks for Windows CMD which only supports a [limited character set](https://en.wikipedia.org/wiki/Code_page_437).\n\n## Install\n\n```sh\nnpm install log-symbols\n```\n\n## Usage\n\n```js\nimport logSymbols from 'log-symbols';\n\nconsole.log(logSymbols.success, 'Finished successfully!');\n// Terminals with Unicode support:     ✔ Finished successfully!\n// Terminals without Unicode support:  √ Finished successfully!\n```\n\n## API\n\n### logSymbols\n\n#### info\n#### success\n#### warning\n#### error\n\n## Related\n\n- [figures](https://github.com/sindresorhus/figures) - Unicode symbols with Windows CMD fallbacks\n- [py-log-symbols](https://github.com/ManrajGrover/py-log-symbols) - Python port\n- [log-symbols](https://github.com/palash25/log-symbols) - Ruby port\n- [guumaster/logsymbols](https://github.com/guumaster/logsymbols) - Golang port\n\n---\n\n<div align=\"center\">\n\t<b>\n\t\t<a href=\"https://tidelift.com/subscription/pkg/npm-log-symbols?utm_source=npm-log-symbols&utm_medium=referral&utm_campaign=readme\">Get professional support for this package with a Tidelift subscription</a>\n\t</b>\n\t<br>\n\t<sub>\n\t\tTidelift helps make open source sustainable for maintainers while giving companies<br>assurances about security, maintenance, and licensing for their dependencies.\n\t</sub>\n</div>\n/package.json\u0003{\n\t\"name\": \"log-symbols\",\n\t\"version\": \"5.1.0\",\n\t\"description\": \"Colored symbols for various log levels. Example: `✔︎ Success`\",\n\t\"license\": \"MIT\",\n\t\"repository\": \"sindresorhus/log-symbols\",\n\t\"funding\": \"https://github.com/sponsors/sindresorhus\",\n\t\"author\": {\n\t\t\"name\": \"Sindre Sorhus\",\n\t\t\"email\": \"sindresorhus@gmail.com\",\n\t\t\"url\": \"https://sindresorhus.com\"\n\t},\n\t\"type\": \"module\",\n\t\"exports\": {\n\t\t\"node\": \"./index.js\",\n\t\t\"default\": \"./browser.js\"\n\t},\n\t\"engines\": {\n\t\t\"node\": \">=12\"\n\t},\n\t\"scripts\": {\n\t\t\"test\": \"xo && ava && tsd\"\n\t},\n\t\"files\": [\n\t\t\"index.js\",\n\t\t\"index.d.ts\",\n\t\t\"browser.js\"\n\t],\n\t\"keywords\": [\n\t\t\"unicode\",\n\t\t\"cli\",\n\t\t\"cmd\",\n\t\t\"command-line\",\n\t\t\"characters\",\n\t\t\"symbol\",\n\t\t\"symbols\",\n\t\t\"figure\",\n\t\t\"figures\",\n\t\t\"fallback\",\n\t\t\"windows\",\n\t\t\"log\",\n\t\t\"logging\",\n\t\t\"terminal\",\n\t\t\"stdout\"\n\t],\n\t\"dependencies\": {\n\t\t\"chalk\": \"^5.0.0\",\n\t\t\"is-unicode-supported\": \"^1.1.0\"\n\t},\n\t\"devDependencies\": {\n\t\t\"ava\": \"^3.15.0\",\n\t\t\"strip-ansi\": \"^7.0.1\",\n\t\t\"tsd\": \"^0.19.0\",\n\t\t\"xo\": \"^0.47.0\"\n\t}\n}\n/index.d.ts\u0002I/**\nColored symbols for various log levels.\n\nIncludes fallbacks for Windows CMD which only supports a [limited character set](https://en.wikipedia.org/wiki/Code_page_437).\n\n@example\n```\nimport logSymbols from 'log-symbols';\n\nconsole.log(logSymbols.success, 'Finished successfully!');\n// Terminals with Unicode support:     ✔ Finished successfully!\n// Terminals without Unicode support:  √ Finished successfully!\n```\n*/\ndeclare const logSymbols: {\n\treadonly info: string;\n\treadonly success: string;\n\treadonly warning: string;\n\treadonly error: string;\n};\n\nexport default logSymbols;\n/license\u0004]MIT License\n\nCopyright (c) Sindre Sorhus <sindresorhus@gmail.com> (https://sindresorhus.com)\n\nPermission 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:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE 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.\n/browser.js|const logSymbols = {\n\tinfo: 'ℹ️',\n\tsuccess: '✅',\n\twarning: '⚠️',\n\terror: '❌️',\n};\n\nexport default logSymbols;\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/bG9uZ0A0LjAuMA==",
    "content": "/dist/long.js&W!function(t,i){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=i():\"function\"==typeof define&&define.amd?define([],i):\"object\"==typeof exports?exports.Long=i():t.Long=i()}(\"undefined\"!=typeof self?self:this,function(){return function(t){function i(e){if(n[e])return n[e].exports;var r=n[e]={i:e,l:!1,exports:{}};return t[e].call(r.exports,r,r.exports,i),r.l=!0,r.exports}var n={};return i.m=t,i.c=n,i.d=function(t,n,e){i.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:e})},i.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return i.d(n,\"a\",n),n},i.o=function(t,i){return Object.prototype.hasOwnProperty.call(t,i)},i.p=\"\",i(i.s=0)}([function(t,i){function n(t,i,n){this.low=0|t,this.high=0|i,this.unsigned=!!n}function e(t){return!0===(t&&t.__isLong__)}function r(t,i){var n,e,r;return i?(t>>>=0,(r=0<=t&&t<256)&&(e=l[t])?e:(n=h(t,(0|t)<0?-1:0,!0),r&&(l[t]=n),n)):(t|=0,(r=-128<=t&&t<128)&&(e=f[t])?e:(n=h(t,t<0?-1:0,!1),r&&(f[t]=n),n))}function s(t,i){if(isNaN(t))return i?p:m;if(i){if(t<0)return p;if(t>=c)return q}else{if(t<=-v)return _;if(t+1>=v)return E}return t<0?s(-t,i).neg():h(t%d|0,t/d|0,i)}function h(t,i,e){return new n(t,i,e)}function u(t,i,n){if(0===t.length)throw Error(\"empty string\");if(\"NaN\"===t||\"Infinity\"===t||\"+Infinity\"===t||\"-Infinity\"===t)return m;if(\"number\"==typeof i?(n=i,i=!1):i=!!i,(n=n||10)<2||36<n)throw RangeError(\"radix\");var e;if((e=t.indexOf(\"-\"))>0)throw Error(\"interior hyphen\");if(0===e)return u(t.substring(1),i,n).neg();for(var r=s(a(n,8)),h=m,o=0;o<t.length;o+=8){var g=Math.min(8,t.length-o),f=parseInt(t.substring(o,o+g),n);if(g<8){var l=s(a(n,g));h=h.mul(l).add(s(f))}else h=h.mul(r),h=h.add(s(f))}return h.unsigned=i,h}function o(t,i){return\"number\"==typeof t?s(t,i):\"string\"==typeof t?u(t,i):h(t.low,t.high,\"boolean\"==typeof i?i:t.unsigned)}t.exports=n;var g=null;try{g=new WebAssembly.Instance(new WebAssembly.Module(new Uint8Array([0,97,115,109,1,0,0,0,1,13,2,96,0,1,127,96,4,127,127,127,127,1,127,3,7,6,0,1,1,1,1,1,6,6,1,127,1,65,0,11,7,50,6,3,109,117,108,0,1,5,100,105,118,95,115,0,2,5,100,105,118,95,117,0,3,5,114,101,109,95,115,0,4,5,114,101,109,95,117,0,5,8,103,101,116,95,104,105,103,104,0,0,10,191,1,6,4,0,35,0,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,126,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,127,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,128,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,129,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,130,34,4,66,32,135,167,36,0,32,4,167,11])),{}).exports}catch(t){}n.prototype.__isLong__,Object.defineProperty(n.prototype,\"__isLong__\",{value:!0}),n.isLong=e;var f={},l={};n.fromInt=r,n.fromNumber=s,n.fromBits=h;var a=Math.pow;n.fromString=u,n.fromValue=o;var d=4294967296,c=d*d,v=c/2,w=r(1<<24),m=r(0);n.ZERO=m;var p=r(0,!0);n.UZERO=p;var y=r(1);n.ONE=y;var b=r(1,!0);n.UONE=b;var N=r(-1);n.NEG_ONE=N;var E=h(-1,2147483647,!1);n.MAX_VALUE=E;var q=h(-1,-1,!0);n.MAX_UNSIGNED_VALUE=q;var _=h(0,-2147483648,!1);n.MIN_VALUE=_;var B=n.prototype;B.toInt=function(){return this.unsigned?this.low>>>0:this.low},B.toNumber=function(){return this.unsigned?(this.high>>>0)*d+(this.low>>>0):this.high*d+(this.low>>>0)},B.toString=function(t){if((t=t||10)<2||36<t)throw RangeError(\"radix\");if(this.isZero())return\"0\";if(this.isNegative()){if(this.eq(_)){var i=s(t),n=this.div(i),e=n.mul(i).sub(this);return n.toString(t)+e.toInt().toString(t)}return\"-\"+this.neg().toString(t)}for(var r=s(a(t,6),this.unsigned),h=this,u=\"\";;){var o=h.div(r),g=h.sub(o.mul(r)).toInt()>>>0,f=g.toString(t);if(h=o,h.isZero())return f+u;for(;f.length<6;)f=\"0\"+f;u=\"\"+f+u}},B.getHighBits=function(){return this.high},B.getHighBitsUnsigned=function(){return this.high>>>0},B.getLowBits=function(){return this.low},B.getLowBitsUnsigned=function(){return this.low>>>0},B.getNumBitsAbs=function(){if(this.isNegative())return this.eq(_)?64:this.neg().getNumBitsAbs();for(var t=0!=this.high?this.high:this.low,i=31;i>0&&0==(t&1<<i);i--);return 0!=this.high?i+33:i+1},B.isZero=function(){return 0===this.high&&0===this.low},B.eqz=B.isZero,B.isNegative=function(){return!this.unsigned&&this.high<0},B.isPositive=function(){return this.unsigned||this.high>=0},B.isOdd=function(){return 1==(1&this.low)},B.isEven=function(){return 0==(1&this.low)},B.equals=function(t){return e(t)||(t=o(t)),(this.unsigned===t.unsigned||this.high>>>31!=1||t.high>>>31!=1)&&(this.high===t.high&&this.low===t.low)},B.eq=B.equals,B.notEquals=function(t){return!this.eq(t)},B.neq=B.notEquals,B.ne=B.notEquals,B.lessThan=function(t){return this.comp(t)<0},B.lt=B.lessThan,B.lessThanOrEqual=function(t){return this.comp(t)<=0},B.lte=B.lessThanOrEqual,B.le=B.lessThanOrEqual,B.greaterThan=function(t){return this.comp(t)>0},B.gt=B.greaterThan,B.greaterThanOrEqual=function(t){return this.comp(t)>=0},B.gte=B.greaterThanOrEqual,B.ge=B.greaterThanOrEqual,B.compare=function(t){if(e(t)||(t=o(t)),this.eq(t))return 0;var i=this.isNegative(),n=t.isNegative();return i&&!n?-1:!i&&n?1:this.unsigned?t.high>>>0>this.high>>>0||t.high===this.high&&t.low>>>0>this.low>>>0?-1:1:this.sub(t).isNegative()?-1:1},B.comp=B.compare,B.negate=function(){return!this.unsigned&&this.eq(_)?_:this.not().add(y)},B.neg=B.negate,B.add=function(t){e(t)||(t=o(t));var i=this.high>>>16,n=65535&this.high,r=this.low>>>16,s=65535&this.low,u=t.high>>>16,g=65535&t.high,f=t.low>>>16,l=65535&t.low,a=0,d=0,c=0,v=0;return v+=s+l,c+=v>>>16,v&=65535,c+=r+f,d+=c>>>16,c&=65535,d+=n+g,a+=d>>>16,d&=65535,a+=i+u,a&=65535,h(c<<16|v,a<<16|d,this.unsigned)},B.subtract=function(t){return e(t)||(t=o(t)),this.add(t.neg())},B.sub=B.subtract,B.multiply=function(t){if(this.isZero())return m;if(e(t)||(t=o(t)),g){return h(g.mul(this.low,this.high,t.low,t.high),g.get_high(),this.unsigned)}if(t.isZero())return m;if(this.eq(_))return t.isOdd()?_:m;if(t.eq(_))return this.isOdd()?_:m;if(this.isNegative())return t.isNegative()?this.neg().mul(t.neg()):this.neg().mul(t).neg();if(t.isNegative())return this.mul(t.neg()).neg();if(this.lt(w)&&t.lt(w))return s(this.toNumber()*t.toNumber(),this.unsigned);var i=this.high>>>16,n=65535&this.high,r=this.low>>>16,u=65535&this.low,f=t.high>>>16,l=65535&t.high,a=t.low>>>16,d=65535&t.low,c=0,v=0,p=0,y=0;return y+=u*d,p+=y>>>16,y&=65535,p+=r*d,v+=p>>>16,p&=65535,p+=u*a,v+=p>>>16,p&=65535,v+=n*d,c+=v>>>16,v&=65535,v+=r*a,c+=v>>>16,v&=65535,v+=u*l,c+=v>>>16,v&=65535,c+=i*d+n*a+r*l+u*f,c&=65535,h(p<<16|y,c<<16|v,this.unsigned)},B.mul=B.multiply,B.divide=function(t){if(e(t)||(t=o(t)),t.isZero())throw Error(\"division by zero\");if(g){if(!this.unsigned&&-2147483648===this.high&&-1===t.low&&-1===t.high)return this;return h((this.unsigned?g.div_u:g.div_s)(this.low,this.high,t.low,t.high),g.get_high(),this.unsigned)}if(this.isZero())return this.unsigned?p:m;var i,n,r;if(this.unsigned){if(t.unsigned||(t=t.toUnsigned()),t.gt(this))return p;if(t.gt(this.shru(1)))return b;r=p}else{if(this.eq(_)){if(t.eq(y)||t.eq(N))return _;if(t.eq(_))return y;return i=this.shr(1).div(t).shl(1),i.eq(m)?t.isNegative()?y:N:(n=this.sub(t.mul(i)),r=i.add(n.div(t)))}if(t.eq(_))return this.unsigned?p:m;if(this.isNegative())return t.isNegative()?this.neg().div(t.neg()):this.neg().div(t).neg();if(t.isNegative())return this.div(t.neg()).neg();r=m}for(n=this;n.gte(t);){i=Math.max(1,Math.floor(n.toNumber()/t.toNumber()));for(var u=Math.ceil(Math.log(i)/Math.LN2),f=u<=48?1:a(2,u-48),l=s(i),d=l.mul(t);d.isNegative()||d.gt(n);)i-=f,l=s(i,this.unsigned),d=l.mul(t);l.isZero()&&(l=y),r=r.add(l),n=n.sub(d)}return r},B.div=B.divide,B.modulo=function(t){if(e(t)||(t=o(t)),g){return h((this.unsigned?g.rem_u:g.rem_s)(this.low,this.high,t.low,t.high),g.get_high(),this.unsigned)}return this.sub(this.div(t).mul(t))},B.mod=B.modulo,B.rem=B.modulo,B.not=function(){return h(~this.low,~this.high,this.unsigned)},B.and=function(t){return e(t)||(t=o(t)),h(this.low&t.low,this.high&t.high,this.unsigned)},B.or=function(t){return e(t)||(t=o(t)),h(this.low|t.low,this.high|t.high,this.unsigned)},B.xor=function(t){return e(t)||(t=o(t)),h(this.low^t.low,this.high^t.high,this.unsigned)},B.shiftLeft=function(t){return e(t)&&(t=t.toInt()),0==(t&=63)?this:t<32?h(this.low<<t,this.high<<t|this.low>>>32-t,this.unsigned):h(0,this.low<<t-32,this.unsigned)},B.shl=B.shiftLeft,B.shiftRight=function(t){return e(t)&&(t=t.toInt()),0==(t&=63)?this:t<32?h(this.low>>>t|this.high<<32-t,this.high>>t,this.unsigned):h(this.high>>t-32,this.high>=0?0:-1,this.unsigned)},B.shr=B.shiftRight,B.shiftRightUnsigned=function(t){if(e(t)&&(t=t.toInt()),0===(t&=63))return this;var i=this.high;if(t<32){return h(this.low>>>t|i<<32-t,i>>>t,this.unsigned)}return 32===t?h(i,0,this.unsigned):h(i>>>t-32,0,this.unsigned)},B.shru=B.shiftRightUnsigned,B.shr_u=B.shiftRightUnsigned,B.toSigned=function(){return this.unsigned?h(this.low,this.high,!1):this},B.toUnsigned=function(){return this.unsigned?this:h(this.low,this.high,!0)},B.toBytes=function(t){return t?this.toBytesLE():this.toBytesBE()},B.toBytesLE=function(){var t=this.high,i=this.low;return[255&i,i>>>8&255,i>>>16&255,i>>>24,255&t,t>>>8&255,t>>>16&255,t>>>24]},B.toBytesBE=function(){var t=this.high,i=this.low;return[t>>>24,t>>>16&255,t>>>8&255,255&t,i>>>24,i>>>16&255,i>>>8&255,255&i]},n.fromBytes=function(t,i,e){return e?n.fromBytesLE(t,i):n.fromBytesBE(t,i)},n.fromBytesLE=function(t,i){return new n(t[0]|t[1]<<8|t[2]<<16|t[3]<<24,t[4]|t[5]<<8|t[6]<<16|t[7]<<24,i)},n.fromBytesBE=function(t,i){return new n(t[4]<<24|t[5]<<16|t[6]<<8|t[7],t[0]<<24|t[1]<<16|t[2]<<8|t[3],i)}}])});\n//# sourceMappingURL=long.js.map/README.md#Ylong.js\r\n=======\r\n\r\nA Long class for representing a 64 bit two's-complement integer value derived from the [Closure Library](https://github.com/google/closure-library)\r\nfor stand-alone use and extended with unsigned support.\r\n\r\n[![Build Status](https://travis-ci.org/dcodeIO/long.js.svg)](https://travis-ci.org/dcodeIO/long.js)\r\n\r\nBackground\r\n----------\r\n\r\nAs of [ECMA-262 5th Edition](http://ecma262-5.com/ELS5_HTML.htm#Section_8.5), \"all the positive and negative integers\r\nwhose magnitude is no greater than 2<sup>53</sup> are representable in the Number type\", which is \"representing the\r\ndoubleprecision 64-bit format IEEE 754 values as specified in the IEEE Standard for Binary Floating-Point Arithmetic\".\r\nThe [maximum safe integer](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER)\r\nin JavaScript is 2<sup>53</sup>-1.\r\n\r\nExample: 2<sup>64</sup>-1 is 1844674407370955**1615** but in JavaScript it evaluates to 1844674407370955**2000**.\r\n\r\nFurthermore, bitwise operators in JavaScript \"deal only with integers in the range −2<sup>31</sup> through\r\n2<sup>31</sup>−1, inclusive, or in the range 0 through 2<sup>32</sup>−1, inclusive. These operators accept any value of\r\nthe Number type but first convert each such value to one of 2<sup>32</sup> integer values.\"\r\n\r\nIn some use cases, however, it is required to be able to reliably work with and perform bitwise operations on the full\r\n64 bits. This is where long.js comes into play.\r\n\r\nUsage\r\n-----\r\n\r\nThe class is compatible with CommonJS and AMD loaders and is exposed globally as `Long` if neither is available.\r\n\r\n```javascript\r\nvar Long = require(\"long\");\r\n\r\nvar longVal = new Long(0xFFFFFFFF, 0x7FFFFFFF);\r\n\r\nconsole.log(longVal.toString());\r\n...\r\n```\r\n\r\nAPI\r\n---\r\n\r\n### Constructor\r\n\r\n* new **Long**(low: `number`, high: `number`, unsigned?: `boolean`)<br />\r\n  Constructs a 64 bit two's-complement integer, given its low and high 32 bit values as *signed* integers. See the from* functions below for more convenient ways of constructing Longs.\r\n\r\n### Fields\r\n\r\n* Long#**low**: `number`<br />\r\n  The low 32 bits as a signed value.\r\n\r\n* Long#**high**: `number`<br />\r\n  The high 32 bits as a signed value.\r\n\r\n* Long#**unsigned**: `boolean`<br />\r\n  Whether unsigned or not.\r\n\r\n### Constants\r\n\r\n* Long.**ZERO**: `Long`<br />\r\n  Signed zero.\r\n\r\n* Long.**ONE**: `Long`<br />\r\n  Signed one.\r\n\r\n* Long.**NEG_ONE**: `Long`<br />\r\n  Signed negative one.\r\n\r\n* Long.**UZERO**: `Long`<br />\r\n  Unsigned zero.\r\n\r\n* Long.**UONE**: `Long`<br />\r\n  Unsigned one.\r\n\r\n* Long.**MAX_VALUE**: `Long`<br />\r\n  Maximum signed value.\r\n\r\n* Long.**MIN_VALUE**: `Long`<br />\r\n  Minimum signed value.\r\n\r\n* Long.**MAX_UNSIGNED_VALUE**: `Long`<br />\r\n  Maximum unsigned value.\r\n\r\n### Utility\r\n\r\n* Long.**isLong**(obj: `*`): `boolean`<br />\r\n  Tests if the specified object is a Long.\r\n\r\n* Long.**fromBits**(lowBits: `number`, highBits: `number`, unsigned?: `boolean`): `Long`<br />\r\n  Returns a Long representing the 64 bit integer that comes by concatenating the given low and high bits. Each is assumed to use 32 bits.\r\n\r\n* Long.**fromBytes**(bytes: `number[]`, unsigned?: `boolean`, le?: `boolean`): `Long`<br />\r\n  Creates a Long from its byte representation.\r\n\r\n* Long.**fromBytesLE**(bytes: `number[]`, unsigned?: `boolean`): `Long`<br />\r\n  Creates a Long from its little endian byte representation.\r\n\r\n* Long.**fromBytesBE**(bytes: `number[]`, unsigned?: `boolean`): `Long`<br />\r\n  Creates a Long from its big endian byte representation.\r\n\r\n* Long.**fromInt**(value: `number`, unsigned?: `boolean`): `Long`<br />\r\n  Returns a Long representing the given 32 bit integer value.\r\n\r\n* Long.**fromNumber**(value: `number`, unsigned?: `boolean`): `Long`<br />\r\n  Returns a Long representing the given value, provided that it is a finite number. Otherwise, zero is returned.\r\n\r\n* Long.**fromString**(str: `string`, unsigned?: `boolean`, radix?: `number`)<br />\r\n  Long.**fromString**(str: `string`, radix: `number`)<br />\r\n  Returns a Long representation of the given string, written using the specified radix.\r\n\r\n* Long.**fromValue**(val: `*`, unsigned?: `boolean`): `Long`<br />\r\n  Converts the specified value to a Long using the appropriate from* function for its type.\r\n\r\n### Methods\r\n\r\n* Long#**add**(addend: `Long | number | string`): `Long`<br />\r\n  Returns the sum of this and the specified Long.\r\n\r\n* Long#**and**(other: `Long | number | string`): `Long`<br />\r\n  Returns the bitwise AND of this Long and the specified.\r\n\r\n* Long#**compare**/**comp**(other: `Long | number | string`): `number`<br />\r\n  Compares this Long's value with the specified's. Returns `0` if they are the same, `1` if the this is greater and `-1` if the given one is greater.\r\n\r\n* Long#**divide**/**div**(divisor: `Long | number | string`): `Long`<br />\r\n  Returns this Long divided by the specified.\r\n\r\n* Long#**equals**/**eq**(other: `Long | number | string`): `boolean`<br />\r\n  Tests if this Long's value equals the specified's.\r\n\r\n* Long#**getHighBits**(): `number`<br />\r\n  Gets the high 32 bits as a signed integer.\r\n\r\n* Long#**getHighBitsUnsigned**(): `number`<br />\r\n  Gets the high 32 bits as an unsigned integer.\r\n\r\n* Long#**getLowBits**(): `number`<br />\r\n  Gets the low 32 bits as a signed integer.\r\n\r\n* Long#**getLowBitsUnsigned**(): `number`<br />\r\n  Gets the low 32 bits as an unsigned integer.\r\n\r\n* Long#**getNumBitsAbs**(): `number`<br />\r\n  Gets the number of bits needed to represent the absolute value of this Long.\r\n\r\n* Long#**greaterThan**/**gt**(other: `Long | number | string`): `boolean`<br />\r\n  Tests if this Long's value is greater than the specified's.\r\n\r\n* Long#**greaterThanOrEqual**/**gte**/**ge**(other: `Long | number | string`): `boolean`<br />\r\n  Tests if this Long's value is greater than or equal the specified's.\r\n\r\n* Long#**isEven**(): `boolean`<br />\r\n  Tests if this Long's value is even.\r\n\r\n* Long#**isNegative**(): `boolean`<br />\r\n  Tests if this Long's value is negative.\r\n\r\n* Long#**isOdd**(): `boolean`<br />\r\n  Tests if this Long's value is odd.\r\n\r\n* Long#**isPositive**(): `boolean`<br />\r\n  Tests if this Long's value is positive.\r\n\r\n* Long#**isZero**/**eqz**(): `boolean`<br />\r\n  Tests if this Long's value equals zero.\r\n\r\n* Long#**lessThan**/**lt**(other: `Long | number | string`): `boolean`<br />\r\n  Tests if this Long's value is less than the specified's.\r\n\r\n* Long#**lessThanOrEqual**/**lte**/**le**(other: `Long | number | string`): `boolean`<br />\r\n  Tests if this Long's value is less than or equal the specified's.\r\n\r\n* Long#**modulo**/**mod**/**rem**(divisor: `Long | number | string`): `Long`<br />\r\n  Returns this Long modulo the specified.\r\n\r\n* Long#**multiply**/**mul**(multiplier: `Long | number | string`): `Long`<br />\r\n  Returns the product of this and the specified Long.\r\n\r\n* Long#**negate**/**neg**(): `Long`<br />\r\n  Negates this Long's value.\r\n\r\n* Long#**not**(): `Long`<br />\r\n  Returns the bitwise NOT of this Long.\r\n\r\n* Long#**notEquals**/**neq**/**ne**(other: `Long | number | string`): `boolean`<br />\r\n  Tests if this Long's value differs from the specified's.\r\n\r\n* Long#**or**(other: `Long | number | string`): `Long`<br />\r\n  Returns the bitwise OR of this Long and the specified.\r\n\r\n* Long#**shiftLeft**/**shl**(numBits: `Long | number | string`): `Long`<br />\r\n  Returns this Long with bits shifted to the left by the given amount.\r\n\r\n* Long#**shiftRight**/**shr**(numBits: `Long | number | string`): `Long`<br />\r\n  Returns this Long with bits arithmetically shifted to the right by the given amount.\r\n\r\n* Long#**shiftRightUnsigned**/**shru**/**shr_u**(numBits: `Long | number | string`): `Long`<br />\r\n  Returns this Long with bits logically shifted to the right by the given amount.\r\n\r\n* Long#**subtract**/**sub**(subtrahend: `Long | number | string`): `Long`<br />\r\n  Returns the difference of this and the specified Long.\r\n\r\n* Long#**toBytes**(le?: `boolean`): `number[]`<br />\r\n  Converts this Long to its byte representation.\r\n\r\n* Long#**toBytesLE**(): `number[]`<br />\r\n  Converts this Long to its little endian byte representation.\r\n\r\n* Long#**toBytesBE**(): `number[]`<br />\r\n  Converts this Long to its big endian byte representation.\r\n\r\n* Long#**toInt**(): `number`<br />\r\n  Converts the Long to a 32 bit integer, assuming it is a 32 bit integer.\r\n\r\n* Long#**toNumber**(): `number`<br />\r\n  Converts the Long to a the nearest floating-point representation of this value (double, 53 bit mantissa).\r\n\r\n* Long#**toSigned**(): `Long`<br />\r\n  Converts this Long to signed.\r\n\r\n* Long#**toString**(radix?: `number`): `string`<br />\r\n  Converts the Long to a string written in the specified radix.\r\n\r\n* Long#**toUnsigned**(): `Long`<br />\r\n  Converts this Long to unsigned.\r\n\r\n* Long#**xor**(other: `Long | number | string`): `Long`<br />\r\n  Returns the bitwise XOR of this Long and the given one.\r\n\r\nBuilding\r\n--------\r\n\r\nTo build an UMD bundle to `dist/long.js`, run:\r\n\r\n```\r\n$> npm install\r\n$> npm run build\r\n```\r\n\r\nRunning the [tests](./tests):\r\n\r\n```\r\n$> npm test\r\n```\r\n/LICENSE-(\r\n                                 Apache License\r\n                           Version 2.0, January 2004\r\n                        http://www.apache.org/licenses/\r\n\r\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\r\n\r\n   1. Definitions.\r\n\r\n      \"License\" shall mean the terms and conditions for use, reproduction,\r\n      and distribution as defined by Sections 1 through 9 of this document.\r\n\r\n      \"Licensor\" shall mean the copyright owner or entity authorized by\r\n      the copyright owner that is granting the License.\r\n\r\n      \"Legal Entity\" shall mean the union of the acting entity and all\r\n      other entities that control, are controlled by, or are under common\r\n      control with that entity. For the purposes of this definition,\r\n      \"control\" means (i) the power, direct or indirect, to cause the\r\n      direction or management of such entity, whether by contract or\r\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\r\n      outstanding shares, or (iii) beneficial ownership of such entity.\r\n\r\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\r\n      exercising permissions granted by this License.\r\n\r\n      \"Source\" form shall mean the preferred form for making modifications,\r\n      including but not limited to software source code, documentation\r\n      source, and configuration files.\r\n\r\n      \"Object\" form shall mean any form resulting from mechanical\r\n      transformation or translation of a Source form, including but\r\n      not limited to compiled object code, generated documentation,\r\n      and conversions to other media types.\r\n\r\n      \"Work\" shall mean the work of authorship, whether in Source or\r\n      Object form, made available under the License, as indicated by a\r\n      copyright notice that is included in or attached to the work\r\n      (an example is provided in the Appendix below).\r\n\r\n      \"Derivative Works\" shall mean any work, whether in Source or Object\r\n      form, that is based on (or derived from) the Work and for which the\r\n      editorial revisions, annotations, elaborations, or other modifications\r\n      represent, as a whole, an original work of authorship. For the purposes\r\n      of this License, Derivative Works shall not include works that remain\r\n      separable from, or merely link (or bind by name) to the interfaces of,\r\n      the Work and Derivative Works thereof.\r\n\r\n      \"Contribution\" shall mean any work of authorship, including\r\n      the original version of the Work and any modifications or additions\r\n      to that Work or Derivative Works thereof, that is intentionally\r\n      submitted to Licensor for inclusion in the Work by the copyright owner\r\n      or by an individual or Legal Entity authorized to submit on behalf of\r\n      the copyright owner. For the purposes of this definition, \"submitted\"\r\n      means any form of electronic, verbal, or written communication sent\r\n      to the Licensor or its representatives, including but not limited to\r\n      communication on electronic mailing lists, source code control systems,\r\n      and issue tracking systems that are managed by, or on behalf of, the\r\n      Licensor for the purpose of discussing and improving the Work, but\r\n      excluding communication that is conspicuously marked or otherwise\r\n      designated in writing by the copyright owner as \"Not a Contribution.\"\r\n\r\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\r\n      on behalf of whom a Contribution has been received by Licensor and\r\n      subsequently incorporated within the Work.\r\n\r\n   2. Grant of Copyright License. Subject to the terms and conditions of\r\n      this License, each Contributor hereby grants to You a perpetual,\r\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\r\n      copyright license to reproduce, prepare Derivative Works of,\r\n      publicly display, publicly perform, sublicense, and distribute the\r\n      Work and such Derivative Works in Source or Object form.\r\n\r\n   3. Grant of Patent License. Subject to the terms and conditions of\r\n      this License, each Contributor hereby grants to You a perpetual,\r\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\r\n      (except as stated in this section) patent license to make, have made,\r\n      use, offer to sell, sell, import, and otherwise transfer the Work,\r\n      where such license applies only to those patent claims licensable\r\n      by such Contributor that are necessarily infringed by their\r\n      Contribution(s) alone or by combination of their Contribution(s)\r\n      with the Work to which such Contribution(s) was submitted. If You\r\n      institute patent litigation against any entity (including a\r\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\r\n      or a Contribution incorporated within the Work constitutes direct\r\n      or contributory patent infringement, then any patent licenses\r\n      granted to You under this License for that Work shall terminate\r\n      as of the date such litigation is filed.\r\n\r\n   4. Redistribution. You may reproduce and distribute copies of the\r\n      Work or Derivative Works thereof in any medium, with or without\r\n      modifications, and in Source or Object form, provided that You\r\n      meet the following conditions:\r\n\r\n      (a) You must give any other recipients of the Work or\r\n          Derivative Works a copy of this License; and\r\n\r\n      (b) You must cause any modified files to carry prominent notices\r\n          stating that You changed the files; and\r\n\r\n      (c) You must retain, in the Source form of any Derivative Works\r\n          that You distribute, all copyright, patent, trademark, and\r\n          attribution notices from the Source form of the Work,\r\n          excluding those notices that do not pertain to any part of\r\n          the Derivative Works; and\r\n\r\n      (d) If the Work includes a \"NOTICE\" text file as part of its\r\n          distribution, then any Derivative Works that You distribute must\r\n          include a readable copy of the attribution notices contained\r\n          within such NOTICE file, excluding those notices that do not\r\n          pertain to any part of the Derivative Works, in at least one\r\n          of the following places: within a NOTICE text file distributed\r\n          as part of the Derivative Works; within the Source form or\r\n          documentation, if provided along with the Derivative Works; or,\r\n          within a display generated by the Derivative Works, if and\r\n          wherever such third-party notices normally appear. The contents\r\n          of the NOTICE file are for informational purposes only and\r\n          do not modify the License. You may add Your own attribution\r\n          notices within Derivative Works that You distribute, alongside\r\n          or as an addendum to the NOTICE text from the Work, provided\r\n          that such additional attribution notices cannot be construed\r\n          as modifying the License.\r\n\r\n      You may add Your own copyright statement to Your modifications and\r\n      may provide additional or different license terms and conditions\r\n      for use, reproduction, or distribution of Your modifications, or\r\n      for any such Derivative Works as a whole, provided Your use,\r\n      reproduction, and distribution of the Work otherwise complies with\r\n      the conditions stated in this License.\r\n\r\n   5. Submission of Contributions. Unless You explicitly state otherwise,\r\n      any Contribution intentionally submitted for inclusion in the Work\r\n      by You to the Licensor shall be under the terms and conditions of\r\n      this License, without any additional terms or conditions.\r\n      Notwithstanding the above, nothing herein shall supersede or modify\r\n      the terms of any separate license agreement you may have executed\r\n      with Licensor regarding such Contributions.\r\n\r\n   6. Trademarks. This License does not grant permission to use the trade\r\n      names, trademarks, service marks, or product names of the Licensor,\r\n      except as required for reasonable and customary use in describing the\r\n      origin of the Work and reproducing the content of the NOTICE file.\r\n\r\n   7. Disclaimer of Warranty. Unless required by applicable law or\r\n      agreed to in writing, Licensor provides the Work (and each\r\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\r\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\r\n      implied, including, without limitation, any warranties or conditions\r\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\r\n      PARTICULAR PURPOSE. You are solely responsible for determining the\r\n      appropriateness of using or redistributing the Work and assume any\r\n      risks associated with Your exercise of permissions under this License.\r\n\r\n   8. Limitation of Liability. In no event and under no legal theory,\r\n      whether in tort (including negligence), contract, or otherwise,\r\n      unless required by applicable law (such as deliberate and grossly\r\n      negligent acts) or agreed to in writing, shall any Contributor be\r\n      liable to You for damages, including any direct, indirect, special,\r\n      incidental, or consequential damages of any character arising as a\r\n      result of this License or out of the use or inability to use the\r\n      Work (including but not limited to damages for loss of goodwill,\r\n      work stoppage, computer failure or malfunction, or any and all\r\n      other commercial damages or losses), even if such Contributor\r\n      has been advised of the possibility of such damages.\r\n\r\n   9. Accepting Warranty or Additional Liability. While redistributing\r\n      the Work or Derivative Works thereof, You may choose to offer,\r\n      and charge a fee for, acceptance of support, warranty, indemnity,\r\n      or other liability obligations and/or rights consistent with this\r\n      License. However, in accepting such obligations, You may act only\r\n      on Your own behalf and on Your sole responsibility, not on behalf\r\n      of any other Contributor, and only if You agree to indemnify,\r\n      defend, and hold each Contributor harmless for any liability\r\n      incurred by, or claims asserted against, such Contributor by reason\r\n      of your accepting any such warranty or additional liability.\r\n\r\n   END OF TERMS AND CONDITIONS\r\n\r\n   APPENDIX: How to apply the Apache License to your work.\r\n\r\n      To apply the Apache License to your work, attach the following\r\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\r\n      replaced with your own identifying information. (Don't include\r\n      the brackets!)  The text should be enclosed in the appropriate\r\n      comment syntax for the file format. We also recommend that a\r\n      file or class name and description of purpose be included on the\r\n      same \"printed page\" as the copyright notice for easier\r\n      identification within third-party archives.\r\n\r\n   Copyright [yyyy] [name of copyright owner]\r\n\r\n   Licensed under the Apache License, Version 2.0 (the \"License\");\r\n   you may not use this file except in compliance with the License.\r\n   You may obtain a copy of the License at\r\n\r\n       http://www.apache.org/licenses/LICENSE-2.0\r\n\r\n   Unless required by applicable law or agreed to in writing, software\r\n   distributed under the License is distributed on an \"AS IS\" BASIS,\r\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n   See the License for the specific language governing permissions and\r\n   limitations under the License.\r\n/package.json\u0003\u0017{\n    \"name\": \"long\",\n    \"version\": \"4.0.0\",\n    \"author\": \"Daniel Wirtz <dcode@dcode.io>\",\n    \"description\": \"A Long class for representing a 64-bit two's-complement integer value.\",\n    \"main\": \"src/long.js\",\n    \"repository\": {\n        \"type\": \"git\",\n        \"url\": \"https://github.com/dcodeIO/long.js.git\"\n    },\n    \"bugs\": {\n        \"url\": \"https://github.com/dcodeIO/long.js/issues\"\n    },\n    \"keywords\": [\n        \"math\"\n    ],\n    \"dependencies\": {},\n    \"devDependencies\": {\n        \"webpack\": \"^3.10.0\"\n    },\n    \"license\": \"Apache-2.0\",\n    \"scripts\": {\n        \"build\": \"webpack\",\n        \"test\": \"node tests\"\n    },\n    \"files\": [\n        \"index.js\",\n        \"LICENSE\",\n        \"README.md\",\n        \"src/long.js\",\n        \"dist/long.js\",\n        \"dist/long.js.map\"\n    ]\n}\n/dist/long.js.map\u0000\u0001R{\"version\":3,\"sources\":[\"webpack:///webpack/universalModuleDefinition\",\"webpack:///long.js\",\"webpack:///webpack/bootstrap d8921b8c3ad0790b3cc1\",\"webpack:///./src/long.js\"],\"names\":[\"root\",\"factory\",\"exports\",\"module\",\"define\",\"amd\",\"self\",\"this\",\"modules\",\"__webpack_require__\",\"moduleId\",\"installedModules\",\"i\",\"l\",\"call\",\"m\",\"c\",\"d\",\"name\",\"getter\",\"o\",\"Object\",\"defineProperty\",\"configurable\",\"enumerable\",\"get\",\"n\",\"__esModule\",\"object\",\"property\",\"prototype\",\"hasOwnProperty\",\"p\",\"s\",\"Long\",\"low\",\"high\",\"unsigned\",\"isLong\",\"obj\",\"fromInt\",\"value\",\"cachedObj\",\"cache\",\"UINT_CACHE\",\"fromBits\",\"INT_CACHE\",\"fromNumber\",\"isNaN\",\"UZERO\",\"ZERO\",\"TWO_PWR_64_DBL\",\"MAX_UNSIGNED_VALUE\",\"TWO_PWR_63_DBL\",\"MIN_VALUE\",\"MAX_VALUE\",\"neg\",\"TWO_PWR_32_DBL\",\"lowBits\",\"highBits\",\"fromString\",\"str\",\"radix\",\"length\",\"Error\",\"RangeError\",\"indexOf\",\"substring\",\"radixToPower\",\"pow_dbl\",\"result\",\"size\",\"Math\",\"min\",\"parseInt\",\"power\",\"mul\",\"add\",\"fromValue\",\"val\",\"wasm\",\"WebAssembly\",\"Instance\",\"Module\",\"Uint8Array\",\"e\",\"__isLong__\",\"pow\",\"TWO_PWR_16_DBL\",\"TWO_PWR_24\",\"ONE\",\"UONE\",\"NEG_ONE\",\"LongPrototype\",\"toInt\",\"toNumber\",\"toString\",\"isZero\",\"isNegative\",\"eq\",\"radixLong\",\"div\",\"rem1\",\"sub\",\"rem\",\"remDiv\",\"intval\",\"digits\",\"getHighBits\",\"getHighBitsUnsigned\",\"getLowBits\",\"getLowBitsUnsigned\",\"getNumBitsAbs\",\"bit\",\"eqz\",\"isPositive\",\"isOdd\",\"isEven\",\"equals\",\"other\",\"notEquals\",\"neq\",\"ne\",\"lessThan\",\"comp\",\"lt\",\"lessThanOrEqual\",\"lte\",\"le\",\"greaterThan\",\"gt\",\"greaterThanOrEqual\",\"gte\",\"ge\",\"compare\",\"thisNeg\",\"otherNeg\",\"negate\",\"not\",\"addend\",\"a48\",\"a32\",\"a16\",\"a00\",\"b48\",\"b32\",\"b16\",\"b00\",\"c48\",\"c32\",\"c16\",\"c00\",\"subtract\",\"subtrahend\",\"multiply\",\"multiplier\",\"get_high\",\"divide\",\"divisor\",\"div_u\",\"div_s\",\"approx\",\"res\",\"toUnsigned\",\"shru\",\"shr\",\"shl\",\"max\",\"floor\",\"log2\",\"ceil\",\"log\",\"LN2\",\"delta\",\"approxRes\",\"approxRem\",\"modulo\",\"rem_u\",\"rem_s\",\"mod\",\"and\",\"or\",\"xor\",\"shiftLeft\",\"numBits\",\"shiftRight\",\"shiftRightUnsigned\",\"shr_u\",\"toSigned\",\"toBytes\",\"toBytesLE\",\"toBytesBE\",\"hi\",\"lo\",\"fromBytes\",\"bytes\",\"fromBytesLE\",\"fromBytesBE\"],\"mappings\":\"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\",\"file\":\"long.js\",\"sourcesContent\":[\"(function webpackUniversalModuleDefinition(root, factory) {\\n\\tif(typeof exports === 'object' && typeof module === 'object')\\n\\t\\tmodule.exports = factory();\\n\\telse if(typeof define === 'function' && define.amd)\\n\\t\\tdefine([], factory);\\n\\telse if(typeof exports === 'object')\\n\\t\\texports[\\\"Long\\\"] = factory();\\n\\telse\\n\\t\\troot[\\\"Long\\\"] = factory();\\n})(typeof self !== 'undefined' ? self : this, function() {\\nreturn \\n\\n\\n// WEBPACK FOOTER //\\n// webpack/universalModuleDefinition\",\"(function webpackUniversalModuleDefinition(root, factory) {\\n\\tif(typeof exports === 'object' && typeof module === 'object')\\n\\t\\tmodule.exports = factory();\\n\\telse if(typeof define === 'function' && define.amd)\\n\\t\\tdefine([], factory);\\n\\telse if(typeof exports === 'object')\\n\\t\\texports[\\\"Long\\\"] = factory();\\n\\telse\\n\\t\\troot[\\\"Long\\\"] = factory();\\n})(typeof self !== 'undefined' ? self : this, function() {\\nreturn /******/ (function(modules) { // webpackBootstrap\\n/******/ \\t// The module cache\\n/******/ \\tvar installedModules = {};\\n/******/\\n/******/ \\t// The require function\\n/******/ \\tfunction __webpack_require__(moduleId) {\\n/******/\\n/******/ \\t\\t// Check if module is in cache\\n/******/ \\t\\tif(installedModules[moduleId]) {\\n/******/ \\t\\t\\treturn installedModules[moduleId].exports;\\n/******/ \\t\\t}\\n/******/ \\t\\t// Create a new module (and put it into the cache)\\n/******/ \\t\\tvar module = installedModules[moduleId] = {\\n/******/ \\t\\t\\ti: moduleId,\\n/******/ \\t\\t\\tl: false,\\n/******/ \\t\\t\\texports: {}\\n/******/ \\t\\t};\\n/******/\\n/******/ \\t\\t// Execute the module function\\n/******/ \\t\\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\\n/******/\\n/******/ \\t\\t// Flag the module as loaded\\n/******/ \\t\\tmodule.l = true;\\n/******/\\n/******/ \\t\\t// Return the exports of the module\\n/******/ \\t\\treturn module.exports;\\n/******/ \\t}\\n/******/\\n/******/\\n/******/ \\t// expose the modules object (__webpack_modules__)\\n/******/ \\t__webpack_require__.m = modules;\\n/******/\\n/******/ \\t// expose the module cache\\n/******/ \\t__webpack_require__.c = installedModules;\\n/******/\\n/******/ \\t// define getter function for harmony exports\\n/******/ \\t__webpack_require__.d = function(exports, name, getter) {\\n/******/ \\t\\tif(!__webpack_require__.o(exports, name)) {\\n/******/ \\t\\t\\tObject.defineProperty(exports, name, {\\n/******/ \\t\\t\\t\\tconfigurable: false,\\n/******/ \\t\\t\\t\\tenumerable: true,\\n/******/ \\t\\t\\t\\tget: getter\\n/******/ \\t\\t\\t});\\n/******/ \\t\\t}\\n/******/ \\t};\\n/******/\\n/******/ \\t// getDefaultExport function for compatibility with non-harmony modules\\n/******/ \\t__webpack_require__.n = function(module) {\\n/******/ \\t\\tvar getter = module && module.__esModule ?\\n/******/ \\t\\t\\tfunction getDefault() { return module['default']; } :\\n/******/ \\t\\t\\tfunction getModuleExports() { return module; };\\n/******/ \\t\\t__webpack_require__.d(getter, 'a', getter);\\n/******/ \\t\\treturn getter;\\n/******/ \\t};\\n/******/\\n/******/ \\t// Object.prototype.hasOwnProperty.call\\n/******/ \\t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\\n/******/\\n/******/ \\t// __webpack_public_path__\\n/******/ \\t__webpack_require__.p = \\\"\\\";\\n/******/\\n/******/ \\t// Load entry module and return exports\\n/******/ \\treturn __webpack_require__(__webpack_require__.s = 0);\\n/******/ })\\n/************************************************************************/\\n/******/ ([\\n/* 0 */\\n/***/ (function(module, exports) {\\n\\nmodule.exports = Long;\\r\\n\\r\\n/**\\r\\n * wasm optimizations, to do native i64 multiplication and divide\\r\\n */\\r\\nvar wasm = null;\\r\\n\\r\\ntry {\\r\\n  wasm = new WebAssembly.Instance(new WebAssembly.Module(new Uint8Array([\\r\\n    0, 97, 115, 109, 1, 0, 0, 0, 1, 13, 2, 96, 0, 1, 127, 96, 4, 127, 127, 127, 127, 1, 127, 3, 7, 6, 0, 1, 1, 1, 1, 1, 6, 6, 1, 127, 1, 65, 0, 11, 7, 50, 6, 3, 109, 117, 108, 0, 1, 5, 100, 105, 118, 95, 115, 0, 2, 5, 100, 105, 118, 95, 117, 0, 3, 5, 114, 101, 109, 95, 115, 0, 4, 5, 114, 101, 109, 95, 117, 0, 5, 8, 103, 101, 116, 95, 104, 105, 103, 104, 0, 0, 10, 191, 1, 6, 4, 0, 35, 0, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 126, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 127, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 128, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 129, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 130, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11\\r\\n  ])), {}).exports;\\r\\n} catch (e) {\\r\\n  // no wasm support :(\\r\\n}\\r\\n\\r\\n/**\\r\\n * Constructs a 64 bit two's-complement integer, given its low and high 32 bit values as *signed* integers.\\r\\n *  See the from* functions below for more convenient ways of constructing Longs.\\r\\n * @exports Long\\r\\n * @class A Long class for representing a 64 bit two's-complement integer value.\\r\\n * @param {number} low The low (signed) 32 bits of the long\\r\\n * @param {number} high The high (signed) 32 bits of the long\\r\\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\\r\\n * @constructor\\r\\n */\\r\\nfunction Long(low, high, unsigned) {\\r\\n\\r\\n    /**\\r\\n     * The low 32 bits as a signed value.\\r\\n     * @type {number}\\r\\n     */\\r\\n    this.low = low | 0;\\r\\n\\r\\n    /**\\r\\n     * The high 32 bits as a signed value.\\r\\n     * @type {number}\\r\\n     */\\r\\n    this.high = high | 0;\\r\\n\\r\\n    /**\\r\\n     * Whether unsigned or not.\\r\\n     * @type {boolean}\\r\\n     */\\r\\n    this.unsigned = !!unsigned;\\r\\n}\\r\\n\\r\\n// The internal representation of a long is the two given signed, 32-bit values.\\r\\n// We use 32-bit pieces because these are the size of integers on which\\r\\n// Javascript performs bit-operations.  For operations like addition and\\r\\n// multiplication, we split each number into 16 bit pieces, which can easily be\\r\\n// multiplied within Javascript's floating-point representation without overflow\\r\\n// or change in sign.\\r\\n//\\r\\n// In the algorithms below, we frequently reduce the negative case to the\\r\\n// positive case by negating the input(s) and then post-processing the result.\\r\\n// Note that we must ALWAYS check specially whether those values are MIN_VALUE\\r\\n// (-2^63) because -MIN_VALUE == MIN_VALUE (since 2^63 cannot be represented as\\r\\n// a positive number, it overflows back into a negative).  Not handling this\\r\\n// case would often result in infinite recursion.\\r\\n//\\r\\n// Common constant values ZERO, ONE, NEG_ONE, etc. are defined below the from*\\r\\n// methods on which they depend.\\r\\n\\r\\n/**\\r\\n * An indicator used to reliably determine if an object is a Long or not.\\r\\n * @type {boolean}\\r\\n * @const\\r\\n * @private\\r\\n */\\r\\nLong.prototype.__isLong__;\\r\\n\\r\\nObject.defineProperty(Long.prototype, \\\"__isLong__\\\", { value: true });\\r\\n\\r\\n/**\\r\\n * @function\\r\\n * @param {*} obj Object\\r\\n * @returns {boolean}\\r\\n * @inner\\r\\n */\\r\\nfunction isLong(obj) {\\r\\n    return (obj && obj[\\\"__isLong__\\\"]) === true;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Tests if the specified object is a Long.\\r\\n * @function\\r\\n * @param {*} obj Object\\r\\n * @returns {boolean}\\r\\n */\\r\\nLong.isLong = isLong;\\r\\n\\r\\n/**\\r\\n * A cache of the Long representations of small integer values.\\r\\n * @type {!Object}\\r\\n * @inner\\r\\n */\\r\\nvar INT_CACHE = {};\\r\\n\\r\\n/**\\r\\n * A cache of the Long representations of small unsigned integer values.\\r\\n * @type {!Object}\\r\\n * @inner\\r\\n */\\r\\nvar UINT_CACHE = {};\\r\\n\\r\\n/**\\r\\n * @param {number} value\\r\\n * @param {boolean=} unsigned\\r\\n * @returns {!Long}\\r\\n * @inner\\r\\n */\\r\\nfunction fromInt(value, unsigned) {\\r\\n    var obj, cachedObj, cache;\\r\\n    if (unsigned) {\\r\\n        value >>>= 0;\\r\\n        if (cache = (0 <= value && value < 256)) {\\r\\n            cachedObj = UINT_CACHE[value];\\r\\n            if (cachedObj)\\r\\n                return cachedObj;\\r\\n        }\\r\\n        obj = fromBits(value, (value | 0) < 0 ? -1 : 0, true);\\r\\n        if (cache)\\r\\n            UINT_CACHE[value] = obj;\\r\\n        return obj;\\r\\n    } else {\\r\\n        value |= 0;\\r\\n        if (cache = (-128 <= value && value < 128)) {\\r\\n            cachedObj = INT_CACHE[value];\\r\\n            if (cachedObj)\\r\\n                return cachedObj;\\r\\n        }\\r\\n        obj = fromBits(value, value < 0 ? -1 : 0, false);\\r\\n        if (cache)\\r\\n            INT_CACHE[value] = obj;\\r\\n        return obj;\\r\\n    }\\r\\n}\\r\\n\\r\\n/**\\r\\n * Returns a Long representing the given 32 bit integer value.\\r\\n * @function\\r\\n * @param {number} value The 32 bit integer in question\\r\\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\\r\\n * @returns {!Long} The corresponding Long value\\r\\n */\\r\\nLong.fromInt = fromInt;\\r\\n\\r\\n/**\\r\\n * @param {number} value\\r\\n * @param {boolean=} unsigned\\r\\n * @returns {!Long}\\r\\n * @inner\\r\\n */\\r\\nfunction fromNumber(value, unsigned) {\\r\\n    if (isNaN(value))\\r\\n        return unsigned ? UZERO : ZERO;\\r\\n    if (unsigned) {\\r\\n        if (value < 0)\\r\\n            return UZERO;\\r\\n        if (value >= TWO_PWR_64_DBL)\\r\\n            return MAX_UNSIGNED_VALUE;\\r\\n    } else {\\r\\n        if (value <= -TWO_PWR_63_DBL)\\r\\n            return MIN_VALUE;\\r\\n        if (value + 1 >= TWO_PWR_63_DBL)\\r\\n            return MAX_VALUE;\\r\\n    }\\r\\n    if (value < 0)\\r\\n        return fromNumber(-value, unsigned).neg();\\r\\n    return fromBits((value % TWO_PWR_32_DBL) | 0, (value / TWO_PWR_32_DBL) | 0, unsigned);\\r\\n}\\r\\n\\r\\n/**\\r\\n * Returns a Long representing the given value, provided that it is a finite number. Otherwise, zero is returned.\\r\\n * @function\\r\\n * @param {number} value The number in question\\r\\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\\r\\n * @returns {!Long} The corresponding Long value\\r\\n */\\r\\nLong.fromNumber = fromNumber;\\r\\n\\r\\n/**\\r\\n * @param {number} lowBits\\r\\n * @param {number} highBits\\r\\n * @param {boolean=} unsigned\\r\\n * @returns {!Long}\\r\\n * @inner\\r\\n */\\r\\nfunction fromBits(lowBits, highBits, unsigned) {\\r\\n    return new Long(lowBits, highBits, unsigned);\\r\\n}\\r\\n\\r\\n/**\\r\\n * Returns a Long representing the 64 bit integer that comes by concatenating the given low and high bits. Each is\\r\\n *  assumed to use 32 bits.\\r\\n * @function\\r\\n * @param {number} lowBits The low 32 bits\\r\\n * @param {number} highBits The high 32 bits\\r\\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\\r\\n * @returns {!Long} The corresponding Long value\\r\\n */\\r\\nLong.fromBits = fromBits;\\r\\n\\r\\n/**\\r\\n * @function\\r\\n * @param {number} base\\r\\n * @param {number} exponent\\r\\n * @returns {number}\\r\\n * @inner\\r\\n */\\r\\nvar pow_dbl = Math.pow; // Used 4 times (4*8 to 15+4)\\r\\n\\r\\n/**\\r\\n * @param {string} str\\r\\n * @param {(boolean|number)=} unsigned\\r\\n * @param {number=} radix\\r\\n * @returns {!Long}\\r\\n * @inner\\r\\n */\\r\\nfunction fromString(str, unsigned, radix) {\\r\\n    if (str.length === 0)\\r\\n        throw Error('empty string');\\r\\n    if (str === \\\"NaN\\\" || str === \\\"Infinity\\\" || str === \\\"+Infinity\\\" || str === \\\"-Infinity\\\")\\r\\n        return ZERO;\\r\\n    if (typeof unsigned === 'number') {\\r\\n        // For goog.math.long compatibility\\r\\n        radix = unsigned,\\r\\n        unsigned = false;\\r\\n    } else {\\r\\n        unsigned = !! unsigned;\\r\\n    }\\r\\n    radix = radix || 10;\\r\\n    if (radix < 2 || 36 < radix)\\r\\n        throw RangeError('radix');\\r\\n\\r\\n    var p;\\r\\n    if ((p = str.indexOf('-')) > 0)\\r\\n        throw Error('interior hyphen');\\r\\n    else if (p === 0) {\\r\\n        return fromString(str.substring(1), unsigned, radix).neg();\\r\\n    }\\r\\n\\r\\n    // Do several (8) digits each time through the loop, so as to\\r\\n    // minimize the calls to the very expensive emulated div.\\r\\n    var radixToPower = fromNumber(pow_dbl(radix, 8));\\r\\n\\r\\n    var result = ZERO;\\r\\n    for (var i = 0; i < str.length; i += 8) {\\r\\n        var size = Math.min(8, str.length - i),\\r\\n            value = parseInt(str.substring(i, i + size), radix);\\r\\n        if (size < 8) {\\r\\n            var power = fromNumber(pow_dbl(radix, size));\\r\\n            result = result.mul(power).add(fromNumber(value));\\r\\n        } else {\\r\\n            result = result.mul(radixToPower);\\r\\n            result = result.add(fromNumber(value));\\r\\n        }\\r\\n    }\\r\\n    result.unsigned = unsigned;\\r\\n    return result;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Returns a Long representation of the given string, written using the specified radix.\\r\\n * @function\\r\\n * @param {string} str The textual representation of the Long\\r\\n * @param {(boolean|number)=} unsigned Whether unsigned or not, defaults to signed\\r\\n * @param {number=} radix The radix in which the text is written (2-36), defaults to 10\\r\\n * @returns {!Long} The corresponding Long value\\r\\n */\\r\\nLong.fromString = fromString;\\r\\n\\r\\n/**\\r\\n * @function\\r\\n * @param {!Long|number|string|!{low: number, high: number, unsigned: boolean}} val\\r\\n * @param {boolean=} unsigned\\r\\n * @returns {!Long}\\r\\n * @inner\\r\\n */\\r\\nfunction fromValue(val, unsigned) {\\r\\n    if (typeof val === 'number')\\r\\n        return fromNumber(val, unsigned);\\r\\n    if (typeof val === 'string')\\r\\n        return fromString(val, unsigned);\\r\\n    // Throws for non-objects, converts non-instanceof Long:\\r\\n    return fromBits(val.low, val.high, typeof unsigned === 'boolean' ? unsigned : val.unsigned);\\r\\n}\\r\\n\\r\\n/**\\r\\n * Converts the specified value to a Long using the appropriate from* function for its type.\\r\\n * @function\\r\\n * @param {!Long|number|string|!{low: number, high: number, unsigned: boolean}} val Value\\r\\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\\r\\n * @returns {!Long}\\r\\n */\\r\\nLong.fromValue = fromValue;\\r\\n\\r\\n// NOTE: the compiler should inline these constant values below and then remove these variables, so there should be\\r\\n// no runtime penalty for these.\\r\\n\\r\\n/**\\r\\n * @type {number}\\r\\n * @const\\r\\n * @inner\\r\\n */\\r\\nvar TWO_PWR_16_DBL = 1 << 16;\\r\\n\\r\\n/**\\r\\n * @type {number}\\r\\n * @const\\r\\n * @inner\\r\\n */\\r\\nvar TWO_PWR_24_DBL = 1 << 24;\\r\\n\\r\\n/**\\r\\n * @type {number}\\r\\n * @const\\r\\n * @inner\\r\\n */\\r\\nvar TWO_PWR_32_DBL = TWO_PWR_16_DBL * TWO_PWR_16_DBL;\\r\\n\\r\\n/**\\r\\n * @type {number}\\r\\n * @const\\r\\n * @inner\\r\\n */\\r\\nvar TWO_PWR_64_DBL = TWO_PWR_32_DBL * TWO_PWR_32_DBL;\\r\\n\\r\\n/**\\r\\n * @type {number}\\r\\n * @const\\r\\n * @inner\\r\\n */\\r\\nvar TWO_PWR_63_DBL = TWO_PWR_64_DBL / 2;\\r\\n\\r\\n/**\\r\\n * @type {!Long}\\r\\n * @const\\r\\n * @inner\\r\\n */\\r\\nvar TWO_PWR_24 = fromInt(TWO_PWR_24_DBL);\\r\\n\\r\\n/**\\r\\n * @type {!Long}\\r\\n * @inner\\r\\n */\\r\\nvar ZERO = fromInt(0);\\r\\n\\r\\n/**\\r\\n * Signed zero.\\r\\n * @type {!Long}\\r\\n */\\r\\nLong.ZERO = ZERO;\\r\\n\\r\\n/**\\r\\n * @type {!Long}\\r\\n * @inner\\r\\n */\\r\\nvar UZERO = fromInt(0, true);\\r\\n\\r\\n/**\\r\\n * Unsigned zero.\\r\\n * @type {!Long}\\r\\n */\\r\\nLong.UZERO = UZERO;\\r\\n\\r\\n/**\\r\\n * @type {!Long}\\r\\n * @inner\\r\\n */\\r\\nvar ONE = fromInt(1);\\r\\n\\r\\n/**\\r\\n * Signed one.\\r\\n * @type {!Long}\\r\\n */\\r\\nLong.ONE = ONE;\\r\\n\\r\\n/**\\r\\n * @type {!Long}\\r\\n * @inner\\r\\n */\\r\\nvar UONE = fromInt(1, true);\\r\\n\\r\\n/**\\r\\n * Unsigned one.\\r\\n * @type {!Long}\\r\\n */\\r\\nLong.UONE = UONE;\\r\\n\\r\\n/**\\r\\n * @type {!Long}\\r\\n * @inner\\r\\n */\\r\\nvar NEG_ONE = fromInt(-1);\\r\\n\\r\\n/**\\r\\n * Signed negative one.\\r\\n * @type {!Long}\\r\\n */\\r\\nLong.NEG_ONE = NEG_ONE;\\r\\n\\r\\n/**\\r\\n * @type {!Long}\\r\\n * @inner\\r\\n */\\r\\nvar MAX_VALUE = fromBits(0xFFFFFFFF|0, 0x7FFFFFFF|0, false);\\r\\n\\r\\n/**\\r\\n * Maximum signed value.\\r\\n * @type {!Long}\\r\\n */\\r\\nLong.MAX_VALUE = MAX_VALUE;\\r\\n\\r\\n/**\\r\\n * @type {!Long}\\r\\n * @inner\\r\\n */\\r\\nvar MAX_UNSIGNED_VALUE = fromBits(0xFFFFFFFF|0, 0xFFFFFFFF|0, true);\\r\\n\\r\\n/**\\r\\n * Maximum unsigned value.\\r\\n * @type {!Long}\\r\\n */\\r\\nLong.MAX_UNSIGNED_VALUE = MAX_UNSIGNED_VALUE;\\r\\n\\r\\n/**\\r\\n * @type {!Long}\\r\\n * @inner\\r\\n */\\r\\nvar MIN_VALUE = fromBits(0, 0x80000000|0, false);\\r\\n\\r\\n/**\\r\\n * Minimum signed value.\\r\\n * @type {!Long}\\r\\n */\\r\\nLong.MIN_VALUE = MIN_VALUE;\\r\\n\\r\\n/**\\r\\n * @alias Long.prototype\\r\\n * @inner\\r\\n */\\r\\nvar LongPrototype = Long.prototype;\\r\\n\\r\\n/**\\r\\n * Converts the Long to a 32 bit integer, assuming it is a 32 bit integer.\\r\\n * @returns {number}\\r\\n */\\r\\nLongPrototype.toInt = function toInt() {\\r\\n    return this.unsigned ? this.low >>> 0 : this.low;\\r\\n};\\r\\n\\r\\n/**\\r\\n * Converts the Long to a the nearest floating-point representation of this value (double, 53 bit mantissa).\\r\\n * @returns {number}\\r\\n */\\r\\nLongPrototype.toNumber = function toNumber() {\\r\\n    if (this.unsigned)\\r\\n        return ((this.high >>> 0) * TWO_PWR_32_DBL) + (this.low >>> 0);\\r\\n    return this.high * TWO_PWR_32_DBL + (this.low >>> 0);\\r\\n};\\r\\n\\r\\n/**\\r\\n * Converts the Long to a string written in the specified radix.\\r\\n * @param {number=} radix Radix (2-36), defaults to 10\\r\\n * @returns {string}\\r\\n * @override\\r\\n * @throws {RangeError} If `radix` is out of range\\r\\n */\\r\\nLongPrototype.toString = function toString(radix) {\\r\\n    radix = radix || 10;\\r\\n    if (radix < 2 || 36 < radix)\\r\\n        throw RangeError('radix');\\r\\n    if (this.isZero())\\r\\n        return '0';\\r\\n    if (this.isNegative()) { // Unsigned Longs are never negative\\r\\n        if (this.eq(MIN_VALUE)) {\\r\\n            // We need to change the Long value before it can be negated, so we remove\\r\\n            // the bottom-most digit in this base and then recurse to do the rest.\\r\\n            var radixLong = fromNumber(radix),\\r\\n                div = this.div(radixLong),\\r\\n                rem1 = div.mul(radixLong).sub(this);\\r\\n            return div.toString(radix) + rem1.toInt().toString(radix);\\r\\n        } else\\r\\n            return '-' + this.neg().toString(radix);\\r\\n    }\\r\\n\\r\\n    // Do several (6) digits each time through the loop, so as to\\r\\n    // minimize the calls to the very expensive emulated div.\\r\\n    var radixToPower = fromNumber(pow_dbl(radix, 6), this.unsigned),\\r\\n        rem = this;\\r\\n    var result = '';\\r\\n    while (true) {\\r\\n        var remDiv = rem.div(radixToPower),\\r\\n            intval = rem.sub(remDiv.mul(radixToPower)).toInt() >>> 0,\\r\\n            digits = intval.toString(radix);\\r\\n        rem = remDiv;\\r\\n        if (rem.isZero())\\r\\n            return digits + result;\\r\\n        else {\\r\\n            while (digits.length < 6)\\r\\n                digits = '0' + digits;\\r\\n            result = '' + digits + result;\\r\\n        }\\r\\n    }\\r\\n};\\r\\n\\r\\n/**\\r\\n * Gets the high 32 bits as a signed integer.\\r\\n * @returns {number} Signed high bits\\r\\n */\\r\\nLongPrototype.getHighBits = function getHighBits() {\\r\\n    return this.high;\\r\\n};\\r\\n\\r\\n/**\\r\\n * Gets the high 32 bits as an unsigned integer.\\r\\n * @returns {number} Unsigned high bits\\r\\n */\\r\\nLongPrototype.getHighBitsUnsigned = function getHighBitsUnsigned() {\\r\\n    return this.high >>> 0;\\r\\n};\\r\\n\\r\\n/**\\r\\n * Gets the low 32 bits as a signed integer.\\r\\n * @returns {number} Signed low bits\\r\\n */\\r\\nLongPrototype.getLowBits = function getLowBits() {\\r\\n    return this.low;\\r\\n};\\r\\n\\r\\n/**\\r\\n * Gets the low 32 bits as an unsigned integer.\\r\\n * @returns {number} Unsigned low bits\\r\\n */\\r\\nLongPrototype.getLowBitsUnsigned = function getLowBitsUnsigned() {\\r\\n    return this.low >>> 0;\\r\\n};\\r\\n\\r\\n/**\\r\\n * Gets the number of bits needed to represent the absolute value of this Long.\\r\\n * @returns {number}\\r\\n */\\r\\nLongPrototype.getNumBitsAbs = function getNumBitsAbs() {\\r\\n    if (this.isNegative()) // Unsigned Longs are never negative\\r\\n        return this.eq(MIN_VALUE) ? 64 : this.neg().getNumBitsAbs();\\r\\n    var val = this.high != 0 ? this.high : this.low;\\r\\n    for (var bit = 31; bit > 0; bit--)\\r\\n        if ((val & (1 << bit)) != 0)\\r\\n            break;\\r\\n    return this.high != 0 ? bit + 33 : bit + 1;\\r\\n};\\r\\n\\r\\n/**\\r\\n * Tests if this Long's value equals zero.\\r\\n * @returns {boolean}\\r\\n */\\r\\nLongPrototype.isZero = function isZero() {\\r\\n    return this.high === 0 && this.low === 0;\\r\\n};\\r\\n\\r\\n/**\\r\\n * Tests if this Long's value equals zero. This is an alias of {@link Long#isZero}.\\r\\n * @returns {boolean}\\r\\n */\\r\\nLongPrototype.eqz = LongPrototype.isZero;\\r\\n\\r\\n/**\\r\\n * Tests if this Long's value is negative.\\r\\n * @returns {boolean}\\r\\n */\\r\\nLongPrototype.isNegative = function isNegative() {\\r\\n    return !this.unsigned && this.high < 0;\\r\\n};\\r\\n\\r\\n/**\\r\\n * Tests if this Long's value is positive.\\r\\n * @returns {boolean}\\r\\n */\\r\\nLongPrototype.isPositive = function isPositive() {\\r\\n    return this.unsigned || this.high >= 0;\\r\\n};\\r\\n\\r\\n/**\\r\\n * Tests if this Long's value is odd.\\r\\n * @returns {boolean}\\r\\n */\\r\\nLongPrototype.isOdd = function isOdd() {\\r\\n    return (this.low & 1) === 1;\\r\\n};\\r\\n\\r\\n/**\\r\\n * Tests if this Long's value is even.\\r\\n * @returns {boolean}\\r\\n */\\r\\nLongPrototype.isEven = function isEven() {\\r\\n    return (this.low & 1) === 0;\\r\\n};\\r\\n\\r\\n/**\\r\\n * Tests if this Long's value equals the specified's.\\r\\n * @param {!Long|number|string} other Other value\\r\\n * @returns {boolean}\\r\\n */\\r\\nLongPrototype.equals = function equals(other) {\\r\\n    if (!isLong(other))\\r\\n        other = fromValue(other);\\r\\n    if (this.unsigned !== other.unsigned && (this.high >>> 31) === 1 && (other.high >>> 31) === 1)\\r\\n        return false;\\r\\n    return this.high === other.high && this.low === other.low;\\r\\n};\\r\\n\\r\\n/**\\r\\n * Tests if this Long's value equals the specified's. This is an alias of {@link Long#equals}.\\r\\n * @function\\r\\n * @param {!Long|number|string} other Other value\\r\\n * @returns {boolean}\\r\\n */\\r\\nLongPrototype.eq = LongPrototype.equals;\\r\\n\\r\\n/**\\r\\n * Tests if this Long's value differs from the specified's.\\r\\n * @param {!Long|number|string} other Other value\\r\\n * @returns {boolean}\\r\\n */\\r\\nLongPrototype.notEquals = function notEquals(other) {\\r\\n    return !this.eq(/* validates */ other);\\r\\n};\\r\\n\\r\\n/**\\r\\n * Tests if this Long's value differs from the specified's. This is an alias of {@link Long#notEquals}.\\r\\n * @function\\r\\n * @param {!Long|number|string} other Other value\\r\\n * @returns {boolean}\\r\\n */\\r\\nLongPrototype.neq = LongPrototype.notEquals;\\r\\n\\r\\n/**\\r\\n * Tests if this Long's value differs from the specified's. This is an alias of {@link Long#notEquals}.\\r\\n * @function\\r\\n * @param {!Long|number|string} other Other value\\r\\n * @returns {boolean}\\r\\n */\\r\\nLongPrototype.ne = LongPrototype.notEquals;\\r\\n\\r\\n/**\\r\\n * Tests if this Long's value is less than the specified's.\\r\\n * @param {!Long|number|string} other Other value\\r\\n * @returns {boolean}\\r\\n */\\r\\nLongPrototype.lessThan = function lessThan(other) {\\r\\n    return this.comp(/* validates */ other) < 0;\\r\\n};\\r\\n\\r\\n/**\\r\\n * Tests if this Long's value is less than the specified's. This is an alias of {@link Long#lessThan}.\\r\\n * @function\\r\\n * @param {!Long|number|string} other Other value\\r\\n * @returns {boolean}\\r\\n */\\r\\nLongPrototype.lt = LongPrototype.lessThan;\\r\\n\\r\\n/**\\r\\n * Tests if this Long's value is less than or equal the specified's.\\r\\n * @param {!Long|number|string} other Other value\\r\\n * @returns {boolean}\\r\\n */\\r\\nLongPrototype.lessThanOrEqual = function lessThanOrEqual(other) {\\r\\n    return this.comp(/* validates */ other) <= 0;\\r\\n};\\r\\n\\r\\n/**\\r\\n * Tests if this Long's value is less than or equal the specified's. This is an alias of {@link Long#lessThanOrEqual}.\\r\\n * @function\\r\\n * @param {!Long|number|string} other Other value\\r\\n * @returns {boolean}\\r\\n */\\r\\nLongPrototype.lte = LongPrototype.lessThanOrEqual;\\r\\n\\r\\n/**\\r\\n * Tests if this Long's value is less than or equal the specified's. This is an alias of {@link Long#lessThanOrEqual}.\\r\\n * @function\\r\\n * @param {!Long|number|string} other Other value\\r\\n * @returns {boolean}\\r\\n */\\r\\nLongPrototype.le = LongPrototype.lessThanOrEqual;\\r\\n\\r\\n/**\\r\\n * Tests if this Long's value is greater than the specified's.\\r\\n * @param {!Long|number|string} other Other value\\r\\n * @returns {boolean}\\r\\n */\\r\\nLongPrototype.greaterThan = function greaterThan(other) {\\r\\n    return this.comp(/* validates */ other) > 0;\\r\\n};\\r\\n\\r\\n/**\\r\\n * Tests if this Long's value is greater than the specified's. This is an alias of {@link Long#greaterThan}.\\r\\n * @function\\r\\n * @param {!Long|number|string} other Other value\\r\\n * @returns {boolean}\\r\\n */\\r\\nLongPrototype.gt = LongPrototype.greaterThan;\\r\\n\\r\\n/**\\r\\n * Tests if this Long's value is greater than or equal the specified's.\\r\\n * @param {!Long|number|string} other Other value\\r\\n * @returns {boolean}\\r\\n */\\r\\nLongPrototype.greaterThanOrEqual = function greaterThanOrEqual(other) {\\r\\n    return this.comp(/* validates */ other) >= 0;\\r\\n};\\r\\n\\r\\n/**\\r\\n * Tests if this Long's value is greater than or equal the specified's. This is an alias of {@link Long#greaterThanOrEqual}.\\r\\n * @function\\r\\n * @param {!Long|number|string} other Other value\\r\\n * @returns {boolean}\\r\\n */\\r\\nLongPrototype.gte = LongPrototype.greaterThanOrEqual;\\r\\n\\r\\n/**\\r\\n * Tests if this Long's value is greater than or equal the specified's. This is an alias of {@link Long#greaterThanOrEqual}.\\r\\n * @function\\r\\n * @param {!Long|number|string} other Other value\\r\\n * @returns {boolean}\\r\\n */\\r\\nLongPrototype.ge = LongPrototype.greaterThanOrEqual;\\r\\n\\r\\n/**\\r\\n * Compares this Long's value with the specified's.\\r\\n * @param {!Long|number|string} other Other value\\r\\n * @returns {number} 0 if they are the same, 1 if the this is greater and -1\\r\\n *  if the given one is greater\\r\\n */\\r\\nLongPrototype.compare = function compare(other) {\\r\\n    if (!isLong(other))\\r\\n        other = fromValue(other);\\r\\n    if (this.eq(other))\\r\\n        return 0;\\r\\n    var thisNeg = this.isNegative(),\\r\\n        otherNeg = other.isNegative();\\r\\n    if (thisNeg && !otherNeg)\\r\\n        return -1;\\r\\n    if (!thisNeg && otherNeg)\\r\\n        return 1;\\r\\n    // At this point the sign bits are the same\\r\\n    if (!this.unsigned)\\r\\n        return this.sub(other).isNegative() ? -1 : 1;\\r\\n    // Both are positive if at least one is unsigned\\r\\n    return (other.high >>> 0) > (this.high >>> 0) || (other.high === this.high && (other.low >>> 0) > (this.low >>> 0)) ? -1 : 1;\\r\\n};\\r\\n\\r\\n/**\\r\\n * Compares this Long's value with the specified's. This is an alias of {@link Long#compare}.\\r\\n * @function\\r\\n * @param {!Long|number|string} other Other value\\r\\n * @returns {number} 0 if they are the same, 1 if the this is greater and -1\\r\\n *  if the given one is greater\\r\\n */\\r\\nLongPrototype.comp = LongPrototype.compare;\\r\\n\\r\\n/**\\r\\n * Negates this Long's value.\\r\\n * @returns {!Long} Negated Long\\r\\n */\\r\\nLongPrototype.negate = function negate() {\\r\\n    if (!this.unsigned && this.eq(MIN_VALUE))\\r\\n        return MIN_VALUE;\\r\\n    return this.not().add(ONE);\\r\\n};\\r\\n\\r\\n/**\\r\\n * Negates this Long's value. This is an alias of {@link Long#negate}.\\r\\n * @function\\r\\n * @returns {!Long} Negated Long\\r\\n */\\r\\nLongPrototype.neg = LongPrototype.negate;\\r\\n\\r\\n/**\\r\\n * Returns the sum of this and the specified Long.\\r\\n * @param {!Long|number|string} addend Addend\\r\\n * @returns {!Long} Sum\\r\\n */\\r\\nLongPrototype.add = function add(addend) {\\r\\n    if (!isLong(addend))\\r\\n        addend = fromValue(addend);\\r\\n\\r\\n    // Divide each number into 4 chunks of 16 bits, and then sum the chunks.\\r\\n\\r\\n    var a48 = this.high >>> 16;\\r\\n    var a32 = this.high & 0xFFFF;\\r\\n    var a16 = this.low >>> 16;\\r\\n    var a00 = this.low & 0xFFFF;\\r\\n\\r\\n    var b48 = addend.high >>> 16;\\r\\n    var b32 = addend.high & 0xFFFF;\\r\\n    var b16 = addend.low >>> 16;\\r\\n    var b00 = addend.low & 0xFFFF;\\r\\n\\r\\n    var c48 = 0, c32 = 0, c16 = 0, c00 = 0;\\r\\n    c00 += a00 + b00;\\r\\n    c16 += c00 >>> 16;\\r\\n    c00 &= 0xFFFF;\\r\\n    c16 += a16 + b16;\\r\\n    c32 += c16 >>> 16;\\r\\n    c16 &= 0xFFFF;\\r\\n    c32 += a32 + b32;\\r\\n    c48 += c32 >>> 16;\\r\\n    c32 &= 0xFFFF;\\r\\n    c48 += a48 + b48;\\r\\n    c48 &= 0xFFFF;\\r\\n    return fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned);\\r\\n};\\r\\n\\r\\n/**\\r\\n * Returns the difference of this and the specified Long.\\r\\n * @param {!Long|number|string} subtrahend Subtrahend\\r\\n * @returns {!Long} Difference\\r\\n */\\r\\nLongPrototype.subtract = function subtract(subtrahend) {\\r\\n    if (!isLong(subtrahend))\\r\\n        subtrahend = fromValue(subtrahend);\\r\\n    return this.add(subtrahend.neg());\\r\\n};\\r\\n\\r\\n/**\\r\\n * Returns the difference of this and the specified Long. This is an alias of {@link Long#subtract}.\\r\\n * @function\\r\\n * @param {!Long|number|string} subtrahend Subtrahend\\r\\n * @returns {!Long} Difference\\r\\n */\\r\\nLongPrototype.sub = LongPrototype.subtract;\\r\\n\\r\\n/**\\r\\n * Returns the product of this and the specified Long.\\r\\n * @param {!Long|number|string} multiplier Multiplier\\r\\n * @returns {!Long} Product\\r\\n */\\r\\nLongPrototype.multiply = function multiply(multiplier) {\\r\\n    if (this.isZero())\\r\\n        return ZERO;\\r\\n    if (!isLong(multiplier))\\r\\n        multiplier = fromValue(multiplier);\\r\\n\\r\\n    // use wasm support if present\\r\\n    if (wasm) {\\r\\n        var low = wasm.mul(this.low,\\r\\n                           this.high,\\r\\n                           multiplier.low,\\r\\n                           multiplier.high);\\r\\n        return fromBits(low, wasm.get_high(), this.unsigned);\\r\\n    }\\r\\n\\r\\n    if (multiplier.isZero())\\r\\n        return ZERO;\\r\\n    if (this.eq(MIN_VALUE))\\r\\n        return multiplier.isOdd() ? MIN_VALUE : ZERO;\\r\\n    if (multiplier.eq(MIN_VALUE))\\r\\n        return this.isOdd() ? MIN_VALUE : ZERO;\\r\\n\\r\\n    if (this.isNegative()) {\\r\\n        if (multiplier.isNegative())\\r\\n            return this.neg().mul(multiplier.neg());\\r\\n        else\\r\\n            return this.neg().mul(multiplier).neg();\\r\\n    } else if (multiplier.isNegative())\\r\\n        return this.mul(multiplier.neg()).neg();\\r\\n\\r\\n    // If both longs are small, use float multiplication\\r\\n    if (this.lt(TWO_PWR_24) && multiplier.lt(TWO_PWR_24))\\r\\n        return fromNumber(this.toNumber() * multiplier.toNumber(), this.unsigned);\\r\\n\\r\\n    // Divide each long into 4 chunks of 16 bits, and then add up 4x4 products.\\r\\n    // We can skip products that would overflow.\\r\\n\\r\\n    var a48 = this.high >>> 16;\\r\\n    var a32 = this.high & 0xFFFF;\\r\\n    var a16 = this.low >>> 16;\\r\\n    var a00 = this.low & 0xFFFF;\\r\\n\\r\\n    var b48 = multiplier.high >>> 16;\\r\\n    var b32 = multiplier.high & 0xFFFF;\\r\\n    var b16 = multiplier.low >>> 16;\\r\\n    var b00 = multiplier.low & 0xFFFF;\\r\\n\\r\\n    var c48 = 0, c32 = 0, c16 = 0, c00 = 0;\\r\\n    c00 += a00 * b00;\\r\\n    c16 += c00 >>> 16;\\r\\n    c00 &= 0xFFFF;\\r\\n    c16 += a16 * b00;\\r\\n    c32 += c16 >>> 16;\\r\\n    c16 &= 0xFFFF;\\r\\n    c16 += a00 * b16;\\r\\n    c32 += c16 >>> 16;\\r\\n    c16 &= 0xFFFF;\\r\\n    c32 += a32 * b00;\\r\\n    c48 += c32 >>> 16;\\r\\n    c32 &= 0xFFFF;\\r\\n    c32 += a16 * b16;\\r\\n    c48 += c32 >>> 16;\\r\\n    c32 &= 0xFFFF;\\r\\n    c32 += a00 * b32;\\r\\n    c48 += c32 >>> 16;\\r\\n    c32 &= 0xFFFF;\\r\\n    c48 += a48 * b00 + a32 * b16 + a16 * b32 + a00 * b48;\\r\\n    c48 &= 0xFFFF;\\r\\n    return fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned);\\r\\n};\\r\\n\\r\\n/**\\r\\n * Returns the product of this and the specified Long. This is an alias of {@link Long#multiply}.\\r\\n * @function\\r\\n * @param {!Long|number|string} multiplier Multiplier\\r\\n * @returns {!Long} Product\\r\\n */\\r\\nLongPrototype.mul = LongPrototype.multiply;\\r\\n\\r\\n/**\\r\\n * Returns this Long divided by the specified. The result is signed if this Long is signed or\\r\\n *  unsigned if this Long is unsigned.\\r\\n * @param {!Long|number|string} divisor Divisor\\r\\n * @returns {!Long} Quotient\\r\\n */\\r\\nLongPrototype.divide = function divide(divisor) {\\r\\n    if (!isLong(divisor))\\r\\n        divisor = fromValue(divisor);\\r\\n    if (divisor.isZero())\\r\\n        throw Error('division by zero');\\r\\n\\r\\n    // use wasm support if present\\r\\n    if (wasm) {\\r\\n        // guard against signed division overflow: the largest\\r\\n        // negative number / -1 would be 1 larger than the largest\\r\\n        // positive number, due to two's complement.\\r\\n        if (!this.unsigned &&\\r\\n            this.high === -0x80000000 &&\\r\\n            divisor.low === -1 && divisor.high === -1) {\\r\\n            // be consistent with non-wasm code path\\r\\n            return this;\\r\\n        }\\r\\n        var low = (this.unsigned ? wasm.div_u : wasm.div_s)(\\r\\n            this.low,\\r\\n            this.high,\\r\\n            divisor.low,\\r\\n            divisor.high\\r\\n        );\\r\\n        return fromBits(low, wasm.get_high(), this.unsigned);\\r\\n    }\\r\\n\\r\\n    if (this.isZero())\\r\\n        return this.unsigned ? UZERO : ZERO;\\r\\n    var approx, rem, res;\\r\\n    if (!this.unsigned) {\\r\\n        // This section is only relevant for signed longs and is derived from the\\r\\n        // closure library as a whole.\\r\\n        if (this.eq(MIN_VALUE)) {\\r\\n            if (divisor.eq(ONE) || divisor.eq(NEG_ONE))\\r\\n                return MIN_VALUE;  // recall that -MIN_VALUE == MIN_VALUE\\r\\n            else if (divisor.eq(MIN_VALUE))\\r\\n                return ONE;\\r\\n            else {\\r\\n                // At this point, we have |other| >= 2, so |this/other| < |MIN_VALUE|.\\r\\n                var halfThis = this.shr(1);\\r\\n                approx = halfThis.div(divisor).shl(1);\\r\\n                if (approx.eq(ZERO)) {\\r\\n                    return divisor.isNegative() ? ONE : NEG_ONE;\\r\\n                } else {\\r\\n                    rem = this.sub(divisor.mul(approx));\\r\\n                    res = approx.add(rem.div(divisor));\\r\\n                    return res;\\r\\n                }\\r\\n            }\\r\\n        } else if (divisor.eq(MIN_VALUE))\\r\\n            return this.unsigned ? UZERO : ZERO;\\r\\n        if (this.isNegative()) {\\r\\n            if (divisor.isNegative())\\r\\n                return this.neg().div(divisor.neg());\\r\\n            return this.neg().div(divisor).neg();\\r\\n        } else if (divisor.isNegative())\\r\\n            return this.div(divisor.neg()).neg();\\r\\n        res = ZERO;\\r\\n    } else {\\r\\n        // The algorithm below has not been made for unsigned longs. It's therefore\\r\\n        // required to take special care of the MSB prior to running it.\\r\\n        if (!divisor.unsigned)\\r\\n            divisor = divisor.toUnsigned();\\r\\n        if (divisor.gt(this))\\r\\n            return UZERO;\\r\\n        if (divisor.gt(this.shru(1))) // 15 >>> 1 = 7 ; with divisor = 8 ; true\\r\\n            return UONE;\\r\\n        res = UZERO;\\r\\n    }\\r\\n\\r\\n    // Repeat the following until the remainder is less than other:  find a\\r\\n    // floating-point that approximates remainder / other *from below*, add this\\r\\n    // into the result, and subtract it from the remainder.  It is critical that\\r\\n    // the approximate value is less than or equal to the real value so that the\\r\\n    // remainder never becomes negative.\\r\\n    rem = this;\\r\\n    while (rem.gte(divisor)) {\\r\\n        // Approximate the result of division. This may be a little greater or\\r\\n        // smaller than the actual value.\\r\\n        approx = Math.max(1, Math.floor(rem.toNumber() / divisor.toNumber()));\\r\\n\\r\\n        // We will tweak the approximate result by changing it in the 48-th digit or\\r\\n        // the smallest non-fractional digit, whichever is larger.\\r\\n        var log2 = Math.ceil(Math.log(approx) / Math.LN2),\\r\\n            delta = (log2 <= 48) ? 1 : pow_dbl(2, log2 - 48),\\r\\n\\r\\n        // Decrease the approximation until it is smaller than the remainder.  Note\\r\\n        // that if it is too large, the product overflows and is negative.\\r\\n            approxRes = fromNumber(approx),\\r\\n            approxRem = approxRes.mul(divisor);\\r\\n        while (approxRem.isNegative() || approxRem.gt(rem)) {\\r\\n            approx -= delta;\\r\\n            approxRes = fromNumber(approx, this.unsigned);\\r\\n            approxRem = approxRes.mul(divisor);\\r\\n        }\\r\\n\\r\\n        // We know the answer can't be zero... and actually, zero would cause\\r\\n        // infinite recursion since we would make no progress.\\r\\n        if (approxRes.isZero())\\r\\n            approxRes = ONE;\\r\\n\\r\\n        res = res.add(approxRes);\\r\\n        rem = rem.sub(approxRem);\\r\\n    }\\r\\n    return res;\\r\\n};\\r\\n\\r\\n/**\\r\\n * Returns this Long divided by the specified. This is an alias of {@link Long#divide}.\\r\\n * @function\\r\\n * @param {!Long|number|string} divisor Divisor\\r\\n * @returns {!Long} Quotient\\r\\n */\\r\\nLongPrototype.div = LongPrototype.divide;\\r\\n\\r\\n/**\\r\\n * Returns this Long modulo the specified.\\r\\n * @param {!Long|number|string} divisor Divisor\\r\\n * @returns {!Long} Remainder\\r\\n */\\r\\nLongPrototype.modulo = function modulo(divisor) {\\r\\n    if (!isLong(divisor))\\r\\n        divisor = fromValue(divisor);\\r\\n\\r\\n    // use wasm support if present\\r\\n    if (wasm) {\\r\\n        var low = (this.unsigned ? wasm.rem_u : wasm.rem_s)(\\r\\n            this.low,\\r\\n            this.high,\\r\\n            divisor.low,\\r\\n            divisor.high\\r\\n        );\\r\\n        return fromBits(low, wasm.get_high(), this.unsigned);\\r\\n    }\\r\\n\\r\\n    return this.sub(this.div(divisor).mul(divisor));\\r\\n};\\r\\n\\r\\n/**\\r\\n * Returns this Long modulo the specified. This is an alias of {@link Long#modulo}.\\r\\n * @function\\r\\n * @param {!Long|number|string} divisor Divisor\\r\\n * @returns {!Long} Remainder\\r\\n */\\r\\nLongPrototype.mod = LongPrototype.modulo;\\r\\n\\r\\n/**\\r\\n * Returns this Long modulo the specified. This is an alias of {@link Long#modulo}.\\r\\n * @function\\r\\n * @param {!Long|number|string} divisor Divisor\\r\\n * @returns {!Long} Remainder\\r\\n */\\r\\nLongPrototype.rem = LongPrototype.modulo;\\r\\n\\r\\n/**\\r\\n * Returns the bitwise NOT of this Long.\\r\\n * @returns {!Long}\\r\\n */\\r\\nLongPrototype.not = function not() {\\r\\n    return fromBits(~this.low, ~this.high, this.unsigned);\\r\\n};\\r\\n\\r\\n/**\\r\\n * Returns the bitwise AND of this Long and the specified.\\r\\n * @param {!Long|number|string} other Other Long\\r\\n * @returns {!Long}\\r\\n */\\r\\nLongPrototype.and = function and(other) {\\r\\n    if (!isLong(other))\\r\\n        other = fromValue(other);\\r\\n    return fromBits(this.low & other.low, this.high & other.high, this.unsigned);\\r\\n};\\r\\n\\r\\n/**\\r\\n * Returns the bitwise OR of this Long and the specified.\\r\\n * @param {!Long|number|string} other Other Long\\r\\n * @returns {!Long}\\r\\n */\\r\\nLongPrototype.or = function or(other) {\\r\\n    if (!isLong(other))\\r\\n        other = fromValue(other);\\r\\n    return fromBits(this.low | other.low, this.high | other.high, this.unsigned);\\r\\n};\\r\\n\\r\\n/**\\r\\n * Returns the bitwise XOR of this Long and the given one.\\r\\n * @param {!Long|number|string} other Other Long\\r\\n * @returns {!Long}\\r\\n */\\r\\nLongPrototype.xor = function xor(other) {\\r\\n    if (!isLong(other))\\r\\n        other = fromValue(other);\\r\\n    return fromBits(this.low ^ other.low, this.high ^ other.high, this.unsigned);\\r\\n};\\r\\n\\r\\n/**\\r\\n * Returns this Long with bits shifted to the left by the given amount.\\r\\n * @param {number|!Long} numBits Number of bits\\r\\n * @returns {!Long} Shifted Long\\r\\n */\\r\\nLongPrototype.shiftLeft = function shiftLeft(numBits) {\\r\\n    if (isLong(numBits))\\r\\n        numBits = numBits.toInt();\\r\\n    if ((numBits &= 63) === 0)\\r\\n        return this;\\r\\n    else if (numBits < 32)\\r\\n        return fromBits(this.low << numBits, (this.high << numBits) | (this.low >>> (32 - numBits)), this.unsigned);\\r\\n    else\\r\\n        return fromBits(0, this.low << (numBits - 32), this.unsigned);\\r\\n};\\r\\n\\r\\n/**\\r\\n * Returns this Long with bits shifted to the left by the given amount. This is an alias of {@link Long#shiftLeft}.\\r\\n * @function\\r\\n * @param {number|!Long} numBits Number of bits\\r\\n * @returns {!Long} Shifted Long\\r\\n */\\r\\nLongPrototype.shl = LongPrototype.shiftLeft;\\r\\n\\r\\n/**\\r\\n * Returns this Long with bits arithmetically shifted to the right by the given amount.\\r\\n * @param {number|!Long} numBits Number of bits\\r\\n * @returns {!Long} Shifted Long\\r\\n */\\r\\nLongPrototype.shiftRight = function shiftRight(numBits) {\\r\\n    if (isLong(numBits))\\r\\n        numBits = numBits.toInt();\\r\\n    if ((numBits &= 63) === 0)\\r\\n        return this;\\r\\n    else if (numBits < 32)\\r\\n        return fromBits((this.low >>> numBits) | (this.high << (32 - numBits)), this.high >> numBits, this.unsigned);\\r\\n    else\\r\\n        return fromBits(this.high >> (numBits - 32), this.high >= 0 ? 0 : -1, this.unsigned);\\r\\n};\\r\\n\\r\\n/**\\r\\n * Returns this Long with bits arithmetically shifted to the right by the given amount. This is an alias of {@link Long#shiftRight}.\\r\\n * @function\\r\\n * @param {number|!Long} numBits Number of bits\\r\\n * @returns {!Long} Shifted Long\\r\\n */\\r\\nLongPrototype.shr = LongPrototype.shiftRight;\\r\\n\\r\\n/**\\r\\n * Returns this Long with bits logically shifted to the right by the given amount.\\r\\n * @param {number|!Long} numBits Number of bits\\r\\n * @returns {!Long} Shifted Long\\r\\n */\\r\\nLongPrototype.shiftRightUnsigned = function shiftRightUnsigned(numBits) {\\r\\n    if (isLong(numBits))\\r\\n        numBits = numBits.toInt();\\r\\n    numBits &= 63;\\r\\n    if (numBits === 0)\\r\\n        return this;\\r\\n    else {\\r\\n        var high = this.high;\\r\\n        if (numBits < 32) {\\r\\n            var low = this.low;\\r\\n            return fromBits((low >>> numBits) | (high << (32 - numBits)), high >>> numBits, this.unsigned);\\r\\n        } else if (numBits === 32)\\r\\n            return fromBits(high, 0, this.unsigned);\\r\\n        else\\r\\n            return fromBits(high >>> (numBits - 32), 0, this.unsigned);\\r\\n    }\\r\\n};\\r\\n\\r\\n/**\\r\\n * Returns this Long with bits logically shifted to the right by the given amount. This is an alias of {@link Long#shiftRightUnsigned}.\\r\\n * @function\\r\\n * @param {number|!Long} numBits Number of bits\\r\\n * @returns {!Long} Shifted Long\\r\\n */\\r\\nLongPrototype.shru = LongPrototype.shiftRightUnsigned;\\r\\n\\r\\n/**\\r\\n * Returns this Long with bits logically shifted to the right by the given amount. This is an alias of {@link Long#shiftRightUnsigned}.\\r\\n * @function\\r\\n * @param {number|!Long} numBits Number of bits\\r\\n * @returns {!Long} Shifted Long\\r\\n */\\r\\nLongPrototype.shr_u = LongPrototype.shiftRightUnsigned;\\r\\n\\r\\n/**\\r\\n * Converts this Long to signed.\\r\\n * @returns {!Long} Signed long\\r\\n */\\r\\nLongPrototype.toSigned = function toSigned() {\\r\\n    if (!this.unsigned)\\r\\n        return this;\\r\\n    return fromBits(this.low, this.high, false);\\r\\n};\\r\\n\\r\\n/**\\r\\n * Converts this Long to unsigned.\\r\\n * @returns {!Long} Unsigned long\\r\\n */\\r\\nLongPrototype.toUnsigned = function toUnsigned() {\\r\\n    if (this.unsigned)\\r\\n        return this;\\r\\n    return fromBits(this.low, this.high, true);\\r\\n};\\r\\n\\r\\n/**\\r\\n * Converts this Long to its byte representation.\\r\\n * @param {boolean=} le Whether little or big endian, defaults to big endian\\r\\n * @returns {!Array.<number>} Byte representation\\r\\n */\\r\\nLongPrototype.toBytes = function toBytes(le) {\\r\\n    return le ? this.toBytesLE() : this.toBytesBE();\\r\\n};\\r\\n\\r\\n/**\\r\\n * Converts this Long to its little endian byte representation.\\r\\n * @returns {!Array.<number>} Little endian byte representation\\r\\n */\\r\\nLongPrototype.toBytesLE = function toBytesLE() {\\r\\n    var hi = this.high,\\r\\n        lo = this.low;\\r\\n    return [\\r\\n        lo        & 0xff,\\r\\n        lo >>>  8 & 0xff,\\r\\n        lo >>> 16 & 0xff,\\r\\n        lo >>> 24       ,\\r\\n        hi        & 0xff,\\r\\n        hi >>>  8 & 0xff,\\r\\n        hi >>> 16 & 0xff,\\r\\n        hi >>> 24\\r\\n    ];\\r\\n};\\r\\n\\r\\n/**\\r\\n * Converts this Long to its big endian byte representation.\\r\\n * @returns {!Array.<number>} Big endian byte representation\\r\\n */\\r\\nLongPrototype.toBytesBE = function toBytesBE() {\\r\\n    var hi = this.high,\\r\\n        lo = this.low;\\r\\n    return [\\r\\n        hi >>> 24       ,\\r\\n        hi >>> 16 & 0xff,\\r\\n        hi >>>  8 & 0xff,\\r\\n        hi        & 0xff,\\r\\n        lo >>> 24       ,\\r\\n        lo >>> 16 & 0xff,\\r\\n        lo >>>  8 & 0xff,\\r\\n        lo        & 0xff\\r\\n    ];\\r\\n};\\r\\n\\r\\n/**\\r\\n * Creates a Long from its byte representation.\\r\\n * @param {!Array.<number>} bytes Byte representation\\r\\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\\r\\n * @param {boolean=} le Whether little or big endian, defaults to big endian\\r\\n * @returns {Long} The corresponding Long value\\r\\n */\\r\\nLong.fromBytes = function fromBytes(bytes, unsigned, le) {\\r\\n    return le ? Long.fromBytesLE(bytes, unsigned) : Long.fromBytesBE(bytes, unsigned);\\r\\n};\\r\\n\\r\\n/**\\r\\n * Creates a Long from its little endian byte representation.\\r\\n * @param {!Array.<number>} bytes Little endian byte representation\\r\\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\\r\\n * @returns {Long} The corresponding Long value\\r\\n */\\r\\nLong.fromBytesLE = function fromBytesLE(bytes, unsigned) {\\r\\n    return new Long(\\r\\n        bytes[0]       |\\r\\n        bytes[1] <<  8 |\\r\\n        bytes[2] << 16 |\\r\\n        bytes[3] << 24,\\r\\n        bytes[4]       |\\r\\n        bytes[5] <<  8 |\\r\\n        bytes[6] << 16 |\\r\\n        bytes[7] << 24,\\r\\n        unsigned\\r\\n    );\\r\\n};\\r\\n\\r\\n/**\\r\\n * Creates a Long from its big endian byte representation.\\r\\n * @param {!Array.<number>} bytes Big endian byte representation\\r\\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\\r\\n * @returns {Long} The corresponding Long value\\r\\n */\\r\\nLong.fromBytesBE = function fromBytesBE(bytes, unsigned) {\\r\\n    return new Long(\\r\\n        bytes[4] << 24 |\\r\\n        bytes[5] << 16 |\\r\\n        bytes[6] <<  8 |\\r\\n        bytes[7],\\r\\n        bytes[0] << 24 |\\r\\n        bytes[1] << 16 |\\r\\n        bytes[2] <<  8 |\\r\\n        bytes[3],\\r\\n        unsigned\\r\\n    );\\r\\n};\\r\\n\\n\\n/***/ })\\n/******/ ]);\\n});\\n\\n\\n// WEBPACK FOOTER //\\n// long.js\",\" \\t// The module cache\\n \\tvar installedModules = {};\\n\\n \\t// The require function\\n \\tfunction __webpack_require__(moduleId) {\\n\\n \\t\\t// Check if module is in cache\\n \\t\\tif(installedModules[moduleId]) {\\n \\t\\t\\treturn installedModules[moduleId].exports;\\n \\t\\t}\\n \\t\\t// Create a new module (and put it into the cache)\\n \\t\\tvar module = installedModules[moduleId] = {\\n \\t\\t\\ti: moduleId,\\n \\t\\t\\tl: false,\\n \\t\\t\\texports: {}\\n \\t\\t};\\n\\n \\t\\t// Execute the module function\\n \\t\\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\\n\\n \\t\\t// Flag the module as loaded\\n \\t\\tmodule.l = true;\\n\\n \\t\\t// Return the exports of the module\\n \\t\\treturn module.exports;\\n \\t}\\n\\n\\n \\t// expose the modules object (__webpack_modules__)\\n \\t__webpack_require__.m = modules;\\n\\n \\t// expose the module cache\\n \\t__webpack_require__.c = installedModules;\\n\\n \\t// define getter function for harmony exports\\n \\t__webpack_require__.d = function(exports, name, getter) {\\n \\t\\tif(!__webpack_require__.o(exports, name)) {\\n \\t\\t\\tObject.defineProperty(exports, name, {\\n \\t\\t\\t\\tconfigurable: false,\\n \\t\\t\\t\\tenumerable: true,\\n \\t\\t\\t\\tget: getter\\n \\t\\t\\t});\\n \\t\\t}\\n \\t};\\n\\n \\t// getDefaultExport function for compatibility with non-harmony modules\\n \\t__webpack_require__.n = function(module) {\\n \\t\\tvar getter = module && module.__esModule ?\\n \\t\\t\\tfunction getDefault() { return module['default']; } :\\n \\t\\t\\tfunction getModuleExports() { return module; };\\n \\t\\t__webpack_require__.d(getter, 'a', getter);\\n \\t\\treturn getter;\\n \\t};\\n\\n \\t// Object.prototype.hasOwnProperty.call\\n \\t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\\n\\n \\t// __webpack_public_path__\\n \\t__webpack_require__.p = \\\"\\\";\\n\\n \\t// Load entry module and return exports\\n \\treturn __webpack_require__(__webpack_require__.s = 0);\\n\\n\\n\\n// WEBPACK FOOTER //\\n// webpack/bootstrap d8921b8c3ad0790b3cc1\",\"module.exports = Long;\\r\\n\\r\\n/**\\r\\n * wasm optimizations, to do native i64 multiplication and divide\\r\\n */\\r\\nvar wasm = null;\\r\\n\\r\\ntry {\\r\\n  wasm = new WebAssembly.Instance(new WebAssembly.Module(new Uint8Array([\\r\\n    0, 97, 115, 109, 1, 0, 0, 0, 1, 13, 2, 96, 0, 1, 127, 96, 4, 127, 127, 127, 127, 1, 127, 3, 7, 6, 0, 1, 1, 1, 1, 1, 6, 6, 1, 127, 1, 65, 0, 11, 7, 50, 6, 3, 109, 117, 108, 0, 1, 5, 100, 105, 118, 95, 115, 0, 2, 5, 100, 105, 118, 95, 117, 0, 3, 5, 114, 101, 109, 95, 115, 0, 4, 5, 114, 101, 109, 95, 117, 0, 5, 8, 103, 101, 116, 95, 104, 105, 103, 104, 0, 0, 10, 191, 1, 6, 4, 0, 35, 0, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 126, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 127, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 128, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 129, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 130, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11\\r\\n  ])), {}).exports;\\r\\n} catch (e) {\\r\\n  // no wasm support :(\\r\\n}\\r\\n\\r\\n/**\\r\\n * Constructs a 64 bit two's-complement integer, given its low and high 32 bit values as *signed* integers.\\r\\n *  See the from* functions below for more convenient ways of constructing Longs.\\r\\n * @exports Long\\r\\n * @class A Long class for representing a 64 bit two's-complement integer value.\\r\\n * @param {number} low The low (signed) 32 bits of the long\\r\\n * @param {number} high The high (signed) 32 bits of the long\\r\\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\\r\\n * @constructor\\r\\n */\\r\\nfunction Long(low, high, unsigned) {\\r\\n\\r\\n    /**\\r\\n     * The low 32 bits as a signed value.\\r\\n     * @type {number}\\r\\n     */\\r\\n    this.low = low | 0;\\r\\n\\r\\n    /**\\r\\n     * The high 32 bits as a signed value.\\r\\n     * @type {number}\\r\\n     */\\r\\n    this.high = high | 0;\\r\\n\\r\\n    /**\\r\\n     * Whether unsigned or not.\\r\\n     * @type {boolean}\\r\\n     */\\r\\n    this.unsigned = !!unsigned;\\r\\n}\\r\\n\\r\\n// The internal representation of a long is the two given signed, 32-bit values.\\r\\n// We use 32-bit pieces because these are the size of integers on which\\r\\n// Javascript performs bit-operations.  For operations like addition and\\r\\n// multiplication, we split each number into 16 bit pieces, which can easily be\\r\\n// multiplied within Javascript's floating-point representation without overflow\\r\\n// or change in sign.\\r\\n//\\r\\n// In the algorithms below, we frequently reduce the negative case to the\\r\\n// positive case by negating the input(s) and then post-processing the result.\\r\\n// Note that we must ALWAYS check specially whether those values are MIN_VALUE\\r\\n// (-2^63) because -MIN_VALUE == MIN_VALUE (since 2^63 cannot be represented as\\r\\n// a positive number, it overflows back into a negative).  Not handling this\\r\\n// case would often result in infinite recursion.\\r\\n//\\r\\n// Common constant values ZERO, ONE, NEG_ONE, etc. are defined below the from*\\r\\n// methods on which they depend.\\r\\n\\r\\n/**\\r\\n * An indicator used to reliably determine if an object is a Long or not.\\r\\n * @type {boolean}\\r\\n * @const\\r\\n * @private\\r\\n */\\r\\nLong.prototype.__isLong__;\\r\\n\\r\\nObject.defineProperty(Long.prototype, \\\"__isLong__\\\", { value: true });\\r\\n\\r\\n/**\\r\\n * @function\\r\\n * @param {*} obj Object\\r\\n * @returns {boolean}\\r\\n * @inner\\r\\n */\\r\\nfunction isLong(obj) {\\r\\n    return (obj && obj[\\\"__isLong__\\\"]) === true;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Tests if the specified object is a Long.\\r\\n * @function\\r\\n * @param {*} obj Object\\r\\n * @returns {boolean}\\r\\n */\\r\\nLong.isLong = isLong;\\r\\n\\r\\n/**\\r\\n * A cache of the Long representations of small integer values.\\r\\n * @type {!Object}\\r\\n * @inner\\r\\n */\\r\\nvar INT_CACHE = {};\\r\\n\\r\\n/**\\r\\n * A cache of the Long representations of small unsigned integer values.\\r\\n * @type {!Object}\\r\\n * @inner\\r\\n */\\r\\nvar UINT_CACHE = {};\\r\\n\\r\\n/**\\r\\n * @param {number} value\\r\\n * @param {boolean=} unsigned\\r\\n * @returns {!Long}\\r\\n * @inner\\r\\n */\\r\\nfunction fromInt(value, unsigned) {\\r\\n    var obj, cachedObj, cache;\\r\\n    if (unsigned) {\\r\\n        value >>>= 0;\\r\\n        if (cache = (0 <= value && value < 256)) {\\r\\n            cachedObj = UINT_CACHE[value];\\r\\n            if (cachedObj)\\r\\n                return cachedObj;\\r\\n        }\\r\\n        obj = fromBits(value, (value | 0) < 0 ? -1 : 0, true);\\r\\n        if (cache)\\r\\n            UINT_CACHE[value] = obj;\\r\\n        return obj;\\r\\n    } else {\\r\\n        value |= 0;\\r\\n        if (cache = (-128 <= value && value < 128)) {\\r\\n            cachedObj = INT_CACHE[value];\\r\\n            if (cachedObj)\\r\\n                return cachedObj;\\r\\n        }\\r\\n        obj = fromBits(value, value < 0 ? -1 : 0, false);\\r\\n        if (cache)\\r\\n            INT_CACHE[value] = obj;\\r\\n        return obj;\\r\\n    }\\r\\n}\\r\\n\\r\\n/**\\r\\n * Returns a Long representing the given 32 bit integer value.\\r\\n * @function\\r\\n * @param {number} value The 32 bit integer in question\\r\\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\\r\\n * @returns {!Long} The corresponding Long value\\r\\n */\\r\\nLong.fromInt = fromInt;\\r\\n\\r\\n/**\\r\\n * @param {number} value\\r\\n * @param {boolean=} unsigned\\r\\n * @returns {!Long}\\r\\n * @inner\\r\\n */\\r\\nfunction fromNumber(value, unsigned) {\\r\\n    if (isNaN(value))\\r\\n        return unsigned ? UZERO : ZERO;\\r\\n    if (unsigned) {\\r\\n        if (value < 0)\\r\\n            return UZERO;\\r\\n        if (value >= TWO_PWR_64_DBL)\\r\\n            return MAX_UNSIGNED_VALUE;\\r\\n    } else {\\r\\n        if (value <= -TWO_PWR_63_DBL)\\r\\n            return MIN_VALUE;\\r\\n        if (value + 1 >= TWO_PWR_63_DBL)\\r\\n            return MAX_VALUE;\\r\\n    }\\r\\n    if (value < 0)\\r\\n        return fromNumber(-value, unsigned).neg();\\r\\n    return fromBits((value % TWO_PWR_32_DBL) | 0, (value / TWO_PWR_32_DBL) | 0, unsigned);\\r\\n}\\r\\n\\r\\n/**\\r\\n * Returns a Long representing the given value, provided that it is a finite number. Otherwise, zero is returned.\\r\\n * @function\\r\\n * @param {number} value The number in question\\r\\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\\r\\n * @returns {!Long} The corresponding Long value\\r\\n */\\r\\nLong.fromNumber = fromNumber;\\r\\n\\r\\n/**\\r\\n * @param {number} lowBits\\r\\n * @param {number} highBits\\r\\n * @param {boolean=} unsigned\\r\\n * @returns {!Long}\\r\\n * @inner\\r\\n */\\r\\nfunction fromBits(lowBits, highBits, unsigned) {\\r\\n    return new Long(lowBits, highBits, unsigned);\\r\\n}\\r\\n\\r\\n/**\\r\\n * Returns a Long representing the 64 bit integer that comes by concatenating the given low and high bits. Each is\\r\\n *  assumed to use 32 bits.\\r\\n * @function\\r\\n * @param {number} lowBits The low 32 bits\\r\\n * @param {number} highBits The high 32 bits\\r\\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\\r\\n * @returns {!Long} The corresponding Long value\\r\\n */\\r\\nLong.fromBits = fromBits;\\r\\n\\r\\n/**\\r\\n * @function\\r\\n * @param {number} base\\r\\n * @param {number} exponent\\r\\n * @returns {number}\\r\\n * @inner\\r\\n */\\r\\nvar pow_dbl = Math.pow; // Used 4 times (4*8 to 15+4)\\r\\n\\r\\n/**\\r\\n * @param {string} str\\r\\n * @param {(boolean|number)=} unsigned\\r\\n * @param {number=} radix\\r\\n * @returns {!Long}\\r\\n * @inner\\r\\n */\\r\\nfunction fromString(str, unsigned, radix) {\\r\\n    if (str.length === 0)\\r\\n        throw Error('empty string');\\r\\n    if (str === \\\"NaN\\\" || str === \\\"Infinity\\\" || str === \\\"+Infinity\\\" || str === \\\"-Infinity\\\")\\r\\n        return ZERO;\\r\\n    if (typeof unsigned === 'number') {\\r\\n        // For goog.math.long compatibility\\r\\n        radix = unsigned,\\r\\n        unsigned = false;\\r\\n    } else {\\r\\n        unsigned = !! unsigned;\\r\\n    }\\r\\n    radix = radix || 10;\\r\\n    if (radix < 2 || 36 < radix)\\r\\n        throw RangeError('radix');\\r\\n\\r\\n    var p;\\r\\n    if ((p = str.indexOf('-')) > 0)\\r\\n        throw Error('interior hyphen');\\r\\n    else if (p === 0) {\\r\\n        return fromString(str.substring(1), unsigned, radix).neg();\\r\\n    }\\r\\n\\r\\n    // Do several (8) digits each time through the loop, so as to\\r\\n    // minimize the calls to the very expensive emulated div.\\r\\n    var radixToPower = fromNumber(pow_dbl(radix, 8));\\r\\n\\r\\n    var result = ZERO;\\r\\n    for (var i = 0; i < str.length; i += 8) {\\r\\n        var size = Math.min(8, str.length - i),\\r\\n            value = parseInt(str.substring(i, i + size), radix);\\r\\n        if (size < 8) {\\r\\n            var power = fromNumber(pow_dbl(radix, size));\\r\\n            result = result.mul(power).add(fromNumber(value));\\r\\n        } else {\\r\\n            result = result.mul(radixToPower);\\r\\n            result = result.add(fromNumber(value));\\r\\n        }\\r\\n    }\\r\\n    result.unsigned = unsigned;\\r\\n    return result;\\r\\n}\\r\\n\\r\\n/**\\r\\n * Returns a Long representation of the given string, written using the specified radix.\\r\\n * @function\\r\\n * @param {string} str The textual representation of the Long\\r\\n * @param {(boolean|number)=} unsigned Whether unsigned or not, defaults to signed\\r\\n * @param {number=} radix The radix in which the text is written (2-36), defaults to 10\\r\\n * @returns {!Long} The corresponding Long value\\r\\n */\\r\\nLong.fromString = fromString;\\r\\n\\r\\n/**\\r\\n * @function\\r\\n * @param {!Long|number|string|!{low: number, high: number, unsigned: boolean}} val\\r\\n * @param {boolean=} unsigned\\r\\n * @returns {!Long}\\r\\n * @inner\\r\\n */\\r\\nfunction fromValue(val, unsigned) {\\r\\n    if (typeof val === 'number')\\r\\n        return fromNumber(val, unsigned);\\r\\n    if (typeof val === 'string')\\r\\n        return fromString(val, unsigned);\\r\\n    // Throws for non-objects, converts non-instanceof Long:\\r\\n    return fromBits(val.low, val.high, typeof unsigned === 'boolean' ? unsigned : val.unsigned);\\r\\n}\\r\\n\\r\\n/**\\r\\n * Converts the specified value to a Long using the appropriate from* function for its type.\\r\\n * @function\\r\\n * @param {!Long|number|string|!{low: number, high: number, unsigned: boolean}} val Value\\r\\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\\r\\n * @returns {!Long}\\r\\n */\\r\\nLong.fromValue = fromValue;\\r\\n\\r\\n// NOTE: the compiler should inline these constant values below and then remove these variables, so there should be\\r\\n// no runtime penalty for these.\\r\\n\\r\\n/**\\r\\n * @type {number}\\r\\n * @const\\r\\n * @inner\\r\\n */\\r\\nvar TWO_PWR_16_DBL = 1 << 16;\\r\\n\\r\\n/**\\r\\n * @type {number}\\r\\n * @const\\r\\n * @inner\\r\\n */\\r\\nvar TWO_PWR_24_DBL = 1 << 24;\\r\\n\\r\\n/**\\r\\n * @type {number}\\r\\n * @const\\r\\n * @inner\\r\\n */\\r\\nvar TWO_PWR_32_DBL = TWO_PWR_16_DBL * TWO_PWR_16_DBL;\\r\\n\\r\\n/**\\r\\n * @type {number}\\r\\n * @const\\r\\n * @inner\\r\\n */\\r\\nvar TWO_PWR_64_DBL = TWO_PWR_32_DBL * TWO_PWR_32_DBL;\\r\\n\\r\\n/**\\r\\n * @type {number}\\r\\n * @const\\r\\n * @inner\\r\\n */\\r\\nvar TWO_PWR_63_DBL = TWO_PWR_64_DBL / 2;\\r\\n\\r\\n/**\\r\\n * @type {!Long}\\r\\n * @const\\r\\n * @inner\\r\\n */\\r\\nvar TWO_PWR_24 = fromInt(TWO_PWR_24_DBL);\\r\\n\\r\\n/**\\r\\n * @type {!Long}\\r\\n * @inner\\r\\n */\\r\\nvar ZERO = fromInt(0);\\r\\n\\r\\n/**\\r\\n * Signed zero.\\r\\n * @type {!Long}\\r\\n */\\r\\nLong.ZERO = ZERO;\\r\\n\\r\\n/**\\r\\n * @type {!Long}\\r\\n * @inner\\r\\n */\\r\\nvar UZERO = fromInt(0, true);\\r\\n\\r\\n/**\\r\\n * Unsigned zero.\\r\\n * @type {!Long}\\r\\n */\\r\\nLong.UZERO = UZERO;\\r\\n\\r\\n/**\\r\\n * @type {!Long}\\r\\n * @inner\\r\\n */\\r\\nvar ONE = fromInt(1);\\r\\n\\r\\n/**\\r\\n * Signed one.\\r\\n * @type {!Long}\\r\\n */\\r\\nLong.ONE = ONE;\\r\\n\\r\\n/**\\r\\n * @type {!Long}\\r\\n * @inner\\r\\n */\\r\\nvar UONE = fromInt(1, true);\\r\\n\\r\\n/**\\r\\n * Unsigned one.\\r\\n * @type {!Long}\\r\\n */\\r\\nLong.UONE = UONE;\\r\\n\\r\\n/**\\r\\n * @type {!Long}\\r\\n * @inner\\r\\n */\\r\\nvar NEG_ONE = fromInt(-1);\\r\\n\\r\\n/**\\r\\n * Signed negative one.\\r\\n * @type {!Long}\\r\\n */\\r\\nLong.NEG_ONE = NEG_ONE;\\r\\n\\r\\n/**\\r\\n * @type {!Long}\\r\\n * @inner\\r\\n */\\r\\nvar MAX_VALUE = fromBits(0xFFFFFFFF|0, 0x7FFFFFFF|0, false);\\r\\n\\r\\n/**\\r\\n * Maximum signed value.\\r\\n * @type {!Long}\\r\\n */\\r\\nLong.MAX_VALUE = MAX_VALUE;\\r\\n\\r\\n/**\\r\\n * @type {!Long}\\r\\n * @inner\\r\\n */\\r\\nvar MAX_UNSIGNED_VALUE = fromBits(0xFFFFFFFF|0, 0xFFFFFFFF|0, true);\\r\\n\\r\\n/**\\r\\n * Maximum unsigned value.\\r\\n * @type {!Long}\\r\\n */\\r\\nLong.MAX_UNSIGNED_VALUE = MAX_UNSIGNED_VALUE;\\r\\n\\r\\n/**\\r\\n * @type {!Long}\\r\\n * @inner\\r\\n */\\r\\nvar MIN_VALUE = fromBits(0, 0x80000000|0, false);\\r\\n\\r\\n/**\\r\\n * Minimum signed value.\\r\\n * @type {!Long}\\r\\n */\\r\\nLong.MIN_VALUE = MIN_VALUE;\\r\\n\\r\\n/**\\r\\n * @alias Long.prototype\\r\\n * @inner\\r\\n */\\r\\nvar LongPrototype = Long.prototype;\\r\\n\\r\\n/**\\r\\n * Converts the Long to a 32 bit integer, assuming it is a 32 bit integer.\\r\\n * @returns {number}\\r\\n */\\r\\nLongPrototype.toInt = function toInt() {\\r\\n    return this.unsigned ? this.low >>> 0 : this.low;\\r\\n};\\r\\n\\r\\n/**\\r\\n * Converts the Long to a the nearest floating-point representation of this value (double, 53 bit mantissa).\\r\\n * @returns {number}\\r\\n */\\r\\nLongPrototype.toNumber = function toNumber() {\\r\\n    if (this.unsigned)\\r\\n        return ((this.high >>> 0) * TWO_PWR_32_DBL) + (this.low >>> 0);\\r\\n    return this.high * TWO_PWR_32_DBL + (this.low >>> 0);\\r\\n};\\r\\n\\r\\n/**\\r\\n * Converts the Long to a string written in the specified radix.\\r\\n * @param {number=} radix Radix (2-36), defaults to 10\\r\\n * @returns {string}\\r\\n * @override\\r\\n * @throws {RangeError} If `radix` is out of range\\r\\n */\\r\\nLongPrototype.toString = function toString(radix) {\\r\\n    radix = radix || 10;\\r\\n    if (radix < 2 || 36 < radix)\\r\\n        throw RangeError('radix');\\r\\n    if (this.isZero())\\r\\n        return '0';\\r\\n    if (this.isNegative()) { // Unsigned Longs are never negative\\r\\n        if (this.eq(MIN_VALUE)) {\\r\\n            // We need to change the Long value before it can be negated, so we remove\\r\\n            // the bottom-most digit in this base and then recurse to do the rest.\\r\\n            var radixLong = fromNumber(radix),\\r\\n                div = this.div(radixLong),\\r\\n                rem1 = div.mul(radixLong).sub(this);\\r\\n            return div.toString(radix) + rem1.toInt().toString(radix);\\r\\n        } else\\r\\n            return '-' + this.neg().toString(radix);\\r\\n    }\\r\\n\\r\\n    // Do several (6) digits each time through the loop, so as to\\r\\n    // minimize the calls to the very expensive emulated div.\\r\\n    var radixToPower = fromNumber(pow_dbl(radix, 6), this.unsigned),\\r\\n        rem = this;\\r\\n    var result = '';\\r\\n    while (true) {\\r\\n        var remDiv = rem.div(radixToPower),\\r\\n            intval = rem.sub(remDiv.mul(radixToPower)).toInt() >>> 0,\\r\\n            digits = intval.toString(radix);\\r\\n        rem = remDiv;\\r\\n        if (rem.isZero())\\r\\n            return digits + result;\\r\\n        else {\\r\\n            while (digits.length < 6)\\r\\n                digits = '0' + digits;\\r\\n            result = '' + digits + result;\\r\\n        }\\r\\n    }\\r\\n};\\r\\n\\r\\n/**\\r\\n * Gets the high 32 bits as a signed integer.\\r\\n * @returns {number} Signed high bits\\r\\n */\\r\\nLongPrototype.getHighBits = function getHighBits() {\\r\\n    return this.high;\\r\\n};\\r\\n\\r\\n/**\\r\\n * Gets the high 32 bits as an unsigned integer.\\r\\n * @returns {number} Unsigned high bits\\r\\n */\\r\\nLongPrototype.getHighBitsUnsigned = function getHighBitsUnsigned() {\\r\\n    return this.high >>> 0;\\r\\n};\\r\\n\\r\\n/**\\r\\n * Gets the low 32 bits as a signed integer.\\r\\n * @returns {number} Signed low bits\\r\\n */\\r\\nLongPrototype.getLowBits = function getLowBits() {\\r\\n    return this.low;\\r\\n};\\r\\n\\r\\n/**\\r\\n * Gets the low 32 bits as an unsigned integer.\\r\\n * @returns {number} Unsigned low bits\\r\\n */\\r\\nLongPrototype.getLowBitsUnsigned = function getLowBitsUnsigned() {\\r\\n    return this.low >>> 0;\\r\\n};\\r\\n\\r\\n/**\\r\\n * Gets the number of bits needed to represent the absolute value of this Long.\\r\\n * @returns {number}\\r\\n */\\r\\nLongPrototype.getNumBitsAbs = function getNumBitsAbs() {\\r\\n    if (this.isNegative()) // Unsigned Longs are never negative\\r\\n        return this.eq(MIN_VALUE) ? 64 : this.neg().getNumBitsAbs();\\r\\n    var val = this.high != 0 ? this.high : this.low;\\r\\n    for (var bit = 31; bit > 0; bit--)\\r\\n        if ((val & (1 << bit)) != 0)\\r\\n            break;\\r\\n    return this.high != 0 ? bit + 33 : bit + 1;\\r\\n};\\r\\n\\r\\n/**\\r\\n * Tests if this Long's value equals zero.\\r\\n * @returns {boolean}\\r\\n */\\r\\nLongPrototype.isZero = function isZero() {\\r\\n    return this.high === 0 && this.low === 0;\\r\\n};\\r\\n\\r\\n/**\\r\\n * Tests if this Long's value equals zero. This is an alias of {@link Long#isZero}.\\r\\n * @returns {boolean}\\r\\n */\\r\\nLongPrototype.eqz = LongPrototype.isZero;\\r\\n\\r\\n/**\\r\\n * Tests if this Long's value is negative.\\r\\n * @returns {boolean}\\r\\n */\\r\\nLongPrototype.isNegative = function isNegative() {\\r\\n    return !this.unsigned && this.high < 0;\\r\\n};\\r\\n\\r\\n/**\\r\\n * Tests if this Long's value is positive.\\r\\n * @returns {boolean}\\r\\n */\\r\\nLongPrototype.isPositive = function isPositive() {\\r\\n    return this.unsigned || this.high >= 0;\\r\\n};\\r\\n\\r\\n/**\\r\\n * Tests if this Long's value is odd.\\r\\n * @returns {boolean}\\r\\n */\\r\\nLongPrototype.isOdd = function isOdd() {\\r\\n    return (this.low & 1) === 1;\\r\\n};\\r\\n\\r\\n/**\\r\\n * Tests if this Long's value is even.\\r\\n * @returns {boolean}\\r\\n */\\r\\nLongPrototype.isEven = function isEven() {\\r\\n    return (this.low & 1) === 0;\\r\\n};\\r\\n\\r\\n/**\\r\\n * Tests if this Long's value equals the specified's.\\r\\n * @param {!Long|number|string} other Other value\\r\\n * @returns {boolean}\\r\\n */\\r\\nLongPrototype.equals = function equals(other) {\\r\\n    if (!isLong(other))\\r\\n        other = fromValue(other);\\r\\n    if (this.unsigned !== other.unsigned && (this.high >>> 31) === 1 && (other.high >>> 31) === 1)\\r\\n        return false;\\r\\n    return this.high === other.high && this.low === other.low;\\r\\n};\\r\\n\\r\\n/**\\r\\n * Tests if this Long's value equals the specified's. This is an alias of {@link Long#equals}.\\r\\n * @function\\r\\n * @param {!Long|number|string} other Other value\\r\\n * @returns {boolean}\\r\\n */\\r\\nLongPrototype.eq = LongPrototype.equals;\\r\\n\\r\\n/**\\r\\n * Tests if this Long's value differs from the specified's.\\r\\n * @param {!Long|number|string} other Other value\\r\\n * @returns {boolean}\\r\\n */\\r\\nLongPrototype.notEquals = function notEquals(other) {\\r\\n    return !this.eq(/* validates */ other);\\r\\n};\\r\\n\\r\\n/**\\r\\n * Tests if this Long's value differs from the specified's. This is an alias of {@link Long#notEquals}.\\r\\n * @function\\r\\n * @param {!Long|number|string} other Other value\\r\\n * @returns {boolean}\\r\\n */\\r\\nLongPrototype.neq = LongPrototype.notEquals;\\r\\n\\r\\n/**\\r\\n * Tests if this Long's value differs from the specified's. This is an alias of {@link Long#notEquals}.\\r\\n * @function\\r\\n * @param {!Long|number|string} other Other value\\r\\n * @returns {boolean}\\r\\n */\\r\\nLongPrototype.ne = LongPrototype.notEquals;\\r\\n\\r\\n/**\\r\\n * Tests if this Long's value is less than the specified's.\\r\\n * @param {!Long|number|string} other Other value\\r\\n * @returns {boolean}\\r\\n */\\r\\nLongPrototype.lessThan = function lessThan(other) {\\r\\n    return this.comp(/* validates */ other) < 0;\\r\\n};\\r\\n\\r\\n/**\\r\\n * Tests if this Long's value is less than the specified's. This is an alias of {@link Long#lessThan}.\\r\\n * @function\\r\\n * @param {!Long|number|string} other Other value\\r\\n * @returns {boolean}\\r\\n */\\r\\nLongPrototype.lt = LongPrototype.lessThan;\\r\\n\\r\\n/**\\r\\n * Tests if this Long's value is less than or equal the specified's.\\r\\n * @param {!Long|number|string} other Other value\\r\\n * @returns {boolean}\\r\\n */\\r\\nLongPrototype.lessThanOrEqual = function lessThanOrEqual(other) {\\r\\n    return this.comp(/* validates */ other) <= 0;\\r\\n};\\r\\n\\r\\n/**\\r\\n * Tests if this Long's value is less than or equal the specified's. This is an alias of {@link Long#lessThanOrEqual}.\\r\\n * @function\\r\\n * @param {!Long|number|string} other Other value\\r\\n * @returns {boolean}\\r\\n */\\r\\nLongPrototype.lte = LongPrototype.lessThanOrEqual;\\r\\n\\r\\n/**\\r\\n * Tests if this Long's value is less than or equal the specified's. This is an alias of {@link Long#lessThanOrEqual}.\\r\\n * @function\\r\\n * @param {!Long|number|string} other Other value\\r\\n * @returns {boolean}\\r\\n */\\r\\nLongPrototype.le = LongPrototype.lessThanOrEqual;\\r\\n\\r\\n/**\\r\\n * Tests if this Long's value is greater than the specified's.\\r\\n * @param {!Long|number|string} other Other value\\r\\n * @returns {boolean}\\r\\n */\\r\\nLongPrototype.greaterThan = function greaterThan(other) {\\r\\n    return this.comp(/* validates */ other) > 0;\\r\\n};\\r\\n\\r\\n/**\\r\\n * Tests if this Long's value is greater than the specified's. This is an alias of {@link Long#greaterThan}.\\r\\n * @function\\r\\n * @param {!Long|number|string} other Other value\\r\\n * @returns {boolean}\\r\\n */\\r\\nLongPrototype.gt = LongPrototype.greaterThan;\\r\\n\\r\\n/**\\r\\n * Tests if this Long's value is greater than or equal the specified's.\\r\\n * @param {!Long|number|string} other Other value\\r\\n * @returns {boolean}\\r\\n */\\r\\nLongPrototype.greaterThanOrEqual = function greaterThanOrEqual(other) {\\r\\n    return this.comp(/* validates */ other) >= 0;\\r\\n};\\r\\n\\r\\n/**\\r\\n * Tests if this Long's value is greater than or equal the specified's. This is an alias of {@link Long#greaterThanOrEqual}.\\r\\n * @function\\r\\n * @param {!Long|number|string} other Other value\\r\\n * @returns {boolean}\\r\\n */\\r\\nLongPrototype.gte = LongPrototype.greaterThanOrEqual;\\r\\n\\r\\n/**\\r\\n * Tests if this Long's value is greater than or equal the specified's. This is an alias of {@link Long#greaterThanOrEqual}.\\r\\n * @function\\r\\n * @param {!Long|number|string} other Other value\\r\\n * @returns {boolean}\\r\\n */\\r\\nLongPrototype.ge = LongPrototype.greaterThanOrEqual;\\r\\n\\r\\n/**\\r\\n * Compares this Long's value with the specified's.\\r\\n * @param {!Long|number|string} other Other value\\r\\n * @returns {number} 0 if they are the same, 1 if the this is greater and -1\\r\\n *  if the given one is greater\\r\\n */\\r\\nLongPrototype.compare = function compare(other) {\\r\\n    if (!isLong(other))\\r\\n        other = fromValue(other);\\r\\n    if (this.eq(other))\\r\\n        return 0;\\r\\n    var thisNeg = this.isNegative(),\\r\\n        otherNeg = other.isNegative();\\r\\n    if (thisNeg && !otherNeg)\\r\\n        return -1;\\r\\n    if (!thisNeg && otherNeg)\\r\\n        return 1;\\r\\n    // At this point the sign bits are the same\\r\\n    if (!this.unsigned)\\r\\n        return this.sub(other).isNegative() ? -1 : 1;\\r\\n    // Both are positive if at least one is unsigned\\r\\n    return (other.high >>> 0) > (this.high >>> 0) || (other.high === this.high && (other.low >>> 0) > (this.low >>> 0)) ? -1 : 1;\\r\\n};\\r\\n\\r\\n/**\\r\\n * Compares this Long's value with the specified's. This is an alias of {@link Long#compare}.\\r\\n * @function\\r\\n * @param {!Long|number|string} other Other value\\r\\n * @returns {number} 0 if they are the same, 1 if the this is greater and -1\\r\\n *  if the given one is greater\\r\\n */\\r\\nLongPrototype.comp = LongPrototype.compare;\\r\\n\\r\\n/**\\r\\n * Negates this Long's value.\\r\\n * @returns {!Long} Negated Long\\r\\n */\\r\\nLongPrototype.negate = function negate() {\\r\\n    if (!this.unsigned && this.eq(MIN_VALUE))\\r\\n        return MIN_VALUE;\\r\\n    return this.not().add(ONE);\\r\\n};\\r\\n\\r\\n/**\\r\\n * Negates this Long's value. This is an alias of {@link Long#negate}.\\r\\n * @function\\r\\n * @returns {!Long} Negated Long\\r\\n */\\r\\nLongPrototype.neg = LongPrototype.negate;\\r\\n\\r\\n/**\\r\\n * Returns the sum of this and the specified Long.\\r\\n * @param {!Long|number|string} addend Addend\\r\\n * @returns {!Long} Sum\\r\\n */\\r\\nLongPrototype.add = function add(addend) {\\r\\n    if (!isLong(addend))\\r\\n        addend = fromValue(addend);\\r\\n\\r\\n    // Divide each number into 4 chunks of 16 bits, and then sum the chunks.\\r\\n\\r\\n    var a48 = this.high >>> 16;\\r\\n    var a32 = this.high & 0xFFFF;\\r\\n    var a16 = this.low >>> 16;\\r\\n    var a00 = this.low & 0xFFFF;\\r\\n\\r\\n    var b48 = addend.high >>> 16;\\r\\n    var b32 = addend.high & 0xFFFF;\\r\\n    var b16 = addend.low >>> 16;\\r\\n    var b00 = addend.low & 0xFFFF;\\r\\n\\r\\n    var c48 = 0, c32 = 0, c16 = 0, c00 = 0;\\r\\n    c00 += a00 + b00;\\r\\n    c16 += c00 >>> 16;\\r\\n    c00 &= 0xFFFF;\\r\\n    c16 += a16 + b16;\\r\\n    c32 += c16 >>> 16;\\r\\n    c16 &= 0xFFFF;\\r\\n    c32 += a32 + b32;\\r\\n    c48 += c32 >>> 16;\\r\\n    c32 &= 0xFFFF;\\r\\n    c48 += a48 + b48;\\r\\n    c48 &= 0xFFFF;\\r\\n    return fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned);\\r\\n};\\r\\n\\r\\n/**\\r\\n * Returns the difference of this and the specified Long.\\r\\n * @param {!Long|number|string} subtrahend Subtrahend\\r\\n * @returns {!Long} Difference\\r\\n */\\r\\nLongPrototype.subtract = function subtract(subtrahend) {\\r\\n    if (!isLong(subtrahend))\\r\\n        subtrahend = fromValue(subtrahend);\\r\\n    return this.add(subtrahend.neg());\\r\\n};\\r\\n\\r\\n/**\\r\\n * Returns the difference of this and the specified Long. This is an alias of {@link Long#subtract}.\\r\\n * @function\\r\\n * @param {!Long|number|string} subtrahend Subtrahend\\r\\n * @returns {!Long} Difference\\r\\n */\\r\\nLongPrototype.sub = LongPrototype.subtract;\\r\\n\\r\\n/**\\r\\n * Returns the product of this and the specified Long.\\r\\n * @param {!Long|number|string} multiplier Multiplier\\r\\n * @returns {!Long} Product\\r\\n */\\r\\nLongPrototype.multiply = function multiply(multiplier) {\\r\\n    if (this.isZero())\\r\\n        return ZERO;\\r\\n    if (!isLong(multiplier))\\r\\n        multiplier = fromValue(multiplier);\\r\\n\\r\\n    // use wasm support if present\\r\\n    if (wasm) {\\r\\n        var low = wasm.mul(this.low,\\r\\n                           this.high,\\r\\n                           multiplier.low,\\r\\n                           multiplier.high);\\r\\n        return fromBits(low, wasm.get_high(), this.unsigned);\\r\\n    }\\r\\n\\r\\n    if (multiplier.isZero())\\r\\n        return ZERO;\\r\\n    if (this.eq(MIN_VALUE))\\r\\n        return multiplier.isOdd() ? MIN_VALUE : ZERO;\\r\\n    if (multiplier.eq(MIN_VALUE))\\r\\n        return this.isOdd() ? MIN_VALUE : ZERO;\\r\\n\\r\\n    if (this.isNegative()) {\\r\\n        if (multiplier.isNegative())\\r\\n            return this.neg().mul(multiplier.neg());\\r\\n        else\\r\\n            return this.neg().mul(multiplier).neg();\\r\\n    } else if (multiplier.isNegative())\\r\\n        return this.mul(multiplier.neg()).neg();\\r\\n\\r\\n    // If both longs are small, use float multiplication\\r\\n    if (this.lt(TWO_PWR_24) && multiplier.lt(TWO_PWR_24))\\r\\n        return fromNumber(this.toNumber() * multiplier.toNumber(), this.unsigned);\\r\\n\\r\\n    // Divide each long into 4 chunks of 16 bits, and then add up 4x4 products.\\r\\n    // We can skip products that would overflow.\\r\\n\\r\\n    var a48 = this.high >>> 16;\\r\\n    var a32 = this.high & 0xFFFF;\\r\\n    var a16 = this.low >>> 16;\\r\\n    var a00 = this.low & 0xFFFF;\\r\\n\\r\\n    var b48 = multiplier.high >>> 16;\\r\\n    var b32 = multiplier.high & 0xFFFF;\\r\\n    var b16 = multiplier.low >>> 16;\\r\\n    var b00 = multiplier.low & 0xFFFF;\\r\\n\\r\\n    var c48 = 0, c32 = 0, c16 = 0, c00 = 0;\\r\\n    c00 += a00 * b00;\\r\\n    c16 += c00 >>> 16;\\r\\n    c00 &= 0xFFFF;\\r\\n    c16 += a16 * b00;\\r\\n    c32 += c16 >>> 16;\\r\\n    c16 &= 0xFFFF;\\r\\n    c16 += a00 * b16;\\r\\n    c32 += c16 >>> 16;\\r\\n    c16 &= 0xFFFF;\\r\\n    c32 += a32 * b00;\\r\\n    c48 += c32 >>> 16;\\r\\n    c32 &= 0xFFFF;\\r\\n    c32 += a16 * b16;\\r\\n    c48 += c32 >>> 16;\\r\\n    c32 &= 0xFFFF;\\r\\n    c32 += a00 * b32;\\r\\n    c48 += c32 >>> 16;\\r\\n    c32 &= 0xFFFF;\\r\\n    c48 += a48 * b00 + a32 * b16 + a16 * b32 + a00 * b48;\\r\\n    c48 &= 0xFFFF;\\r\\n    return fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned);\\r\\n};\\r\\n\\r\\n/**\\r\\n * Returns the product of this and the specified Long. This is an alias of {@link Long#multiply}.\\r\\n * @function\\r\\n * @param {!Long|number|string} multiplier Multiplier\\r\\n * @returns {!Long} Product\\r\\n */\\r\\nLongPrototype.mul = LongPrototype.multiply;\\r\\n\\r\\n/**\\r\\n * Returns this Long divided by the specified. The result is signed if this Long is signed or\\r\\n *  unsigned if this Long is unsigned.\\r\\n * @param {!Long|number|string} divisor Divisor\\r\\n * @returns {!Long} Quotient\\r\\n */\\r\\nLongPrototype.divide = function divide(divisor) {\\r\\n    if (!isLong(divisor))\\r\\n        divisor = fromValue(divisor);\\r\\n    if (divisor.isZero())\\r\\n        throw Error('division by zero');\\r\\n\\r\\n    // use wasm support if present\\r\\n    if (wasm) {\\r\\n        // guard against signed division overflow: the largest\\r\\n        // negative number / -1 would be 1 larger than the largest\\r\\n        // positive number, due to two's complement.\\r\\n        if (!this.unsigned &&\\r\\n            this.high === -0x80000000 &&\\r\\n            divisor.low === -1 && divisor.high === -1) {\\r\\n            // be consistent with non-wasm code path\\r\\n            return this;\\r\\n        }\\r\\n        var low = (this.unsigned ? wasm.div_u : wasm.div_s)(\\r\\n            this.low,\\r\\n            this.high,\\r\\n            divisor.low,\\r\\n            divisor.high\\r\\n        );\\r\\n        return fromBits(low, wasm.get_high(), this.unsigned);\\r\\n    }\\r\\n\\r\\n    if (this.isZero())\\r\\n        return this.unsigned ? UZERO : ZERO;\\r\\n    var approx, rem, res;\\r\\n    if (!this.unsigned) {\\r\\n        // This section is only relevant for signed longs and is derived from the\\r\\n        // closure library as a whole.\\r\\n        if (this.eq(MIN_VALUE)) {\\r\\n            if (divisor.eq(ONE) || divisor.eq(NEG_ONE))\\r\\n                return MIN_VALUE;  // recall that -MIN_VALUE == MIN_VALUE\\r\\n            else if (divisor.eq(MIN_VALUE))\\r\\n                return ONE;\\r\\n            else {\\r\\n                // At this point, we have |other| >= 2, so |this/other| < |MIN_VALUE|.\\r\\n                var halfThis = this.shr(1);\\r\\n                approx = halfThis.div(divisor).shl(1);\\r\\n                if (approx.eq(ZERO)) {\\r\\n                    return divisor.isNegative() ? ONE : NEG_ONE;\\r\\n                } else {\\r\\n                    rem = this.sub(divisor.mul(approx));\\r\\n                    res = approx.add(rem.div(divisor));\\r\\n                    return res;\\r\\n                }\\r\\n            }\\r\\n        } else if (divisor.eq(MIN_VALUE))\\r\\n            return this.unsigned ? UZERO : ZERO;\\r\\n        if (this.isNegative()) {\\r\\n            if (divisor.isNegative())\\r\\n                return this.neg().div(divisor.neg());\\r\\n            return this.neg().div(divisor).neg();\\r\\n        } else if (divisor.isNegative())\\r\\n            return this.div(divisor.neg()).neg();\\r\\n        res = ZERO;\\r\\n    } else {\\r\\n        // The algorithm below has not been made for unsigned longs. It's therefore\\r\\n        // required to take special care of the MSB prior to running it.\\r\\n        if (!divisor.unsigned)\\r\\n            divisor = divisor.toUnsigned();\\r\\n        if (divisor.gt(this))\\r\\n            return UZERO;\\r\\n        if (divisor.gt(this.shru(1))) // 15 >>> 1 = 7 ; with divisor = 8 ; true\\r\\n            return UONE;\\r\\n        res = UZERO;\\r\\n    }\\r\\n\\r\\n    // Repeat the following until the remainder is less than other:  find a\\r\\n    // floating-point that approximates remainder / other *from below*, add this\\r\\n    // into the result, and subtract it from the remainder.  It is critical that\\r\\n    // the approximate value is less than or equal to the real value so that the\\r\\n    // remainder never becomes negative.\\r\\n    rem = this;\\r\\n    while (rem.gte(divisor)) {\\r\\n        // Approximate the result of division. This may be a little greater or\\r\\n        // smaller than the actual value.\\r\\n        approx = Math.max(1, Math.floor(rem.toNumber() / divisor.toNumber()));\\r\\n\\r\\n        // We will tweak the approximate result by changing it in the 48-th digit or\\r\\n        // the smallest non-fractional digit, whichever is larger.\\r\\n        var log2 = Math.ceil(Math.log(approx) / Math.LN2),\\r\\n            delta = (log2 <= 48) ? 1 : pow_dbl(2, log2 - 48),\\r\\n\\r\\n        // Decrease the approximation until it is smaller than the remainder.  Note\\r\\n        // that if it is too large, the product overflows and is negative.\\r\\n            approxRes = fromNumber(approx),\\r\\n            approxRem = approxRes.mul(divisor);\\r\\n        while (approxRem.isNegative() || approxRem.gt(rem)) {\\r\\n            approx -= delta;\\r\\n            approxRes = fromNumber(approx, this.unsigned);\\r\\n            approxRem = approxRes.mul(divisor);\\r\\n        }\\r\\n\\r\\n        // We know the answer can't be zero... and actually, zero would cause\\r\\n        // infinite recursion since we would make no progress.\\r\\n        if (approxRes.isZero())\\r\\n            approxRes = ONE;\\r\\n\\r\\n        res = res.add(approxRes);\\r\\n        rem = rem.sub(approxRem);\\r\\n    }\\r\\n    return res;\\r\\n};\\r\\n\\r\\n/**\\r\\n * Returns this Long divided by the specified. This is an alias of {@link Long#divide}.\\r\\n * @function\\r\\n * @param {!Long|number|string} divisor Divisor\\r\\n * @returns {!Long} Quotient\\r\\n */\\r\\nLongPrototype.div = LongPrototype.divide;\\r\\n\\r\\n/**\\r\\n * Returns this Long modulo the specified.\\r\\n * @param {!Long|number|string} divisor Divisor\\r\\n * @returns {!Long} Remainder\\r\\n */\\r\\nLongPrototype.modulo = function modulo(divisor) {\\r\\n    if (!isLong(divisor))\\r\\n        divisor = fromValue(divisor);\\r\\n\\r\\n    // use wasm support if present\\r\\n    if (wasm) {\\r\\n        var low = (this.unsigned ? wasm.rem_u : wasm.rem_s)(\\r\\n            this.low,\\r\\n            this.high,\\r\\n            divisor.low,\\r\\n            divisor.high\\r\\n        );\\r\\n        return fromBits(low, wasm.get_high(), this.unsigned);\\r\\n    }\\r\\n\\r\\n    return this.sub(this.div(divisor).mul(divisor));\\r\\n};\\r\\n\\r\\n/**\\r\\n * Returns this Long modulo the specified. This is an alias of {@link Long#modulo}.\\r\\n * @function\\r\\n * @param {!Long|number|string} divisor Divisor\\r\\n * @returns {!Long} Remainder\\r\\n */\\r\\nLongPrototype.mod = LongPrototype.modulo;\\r\\n\\r\\n/**\\r\\n * Returns this Long modulo the specified. This is an alias of {@link Long#modulo}.\\r\\n * @function\\r\\n * @param {!Long|number|string} divisor Divisor\\r\\n * @returns {!Long} Remainder\\r\\n */\\r\\nLongPrototype.rem = LongPrototype.modulo;\\r\\n\\r\\n/**\\r\\n * Returns the bitwise NOT of this Long.\\r\\n * @returns {!Long}\\r\\n */\\r\\nLongPrototype.not = function not() {\\r\\n    return fromBits(~this.low, ~this.high, this.unsigned);\\r\\n};\\r\\n\\r\\n/**\\r\\n * Returns the bitwise AND of this Long and the specified.\\r\\n * @param {!Long|number|string} other Other Long\\r\\n * @returns {!Long}\\r\\n */\\r\\nLongPrototype.and = function and(other) {\\r\\n    if (!isLong(other))\\r\\n        other = fromValue(other);\\r\\n    return fromBits(this.low & other.low, this.high & other.high, this.unsigned);\\r\\n};\\r\\n\\r\\n/**\\r\\n * Returns the bitwise OR of this Long and the specified.\\r\\n * @param {!Long|number|string} other Other Long\\r\\n * @returns {!Long}\\r\\n */\\r\\nLongPrototype.or = function or(other) {\\r\\n    if (!isLong(other))\\r\\n        other = fromValue(other);\\r\\n    return fromBits(this.low | other.low, this.high | other.high, this.unsigned);\\r\\n};\\r\\n\\r\\n/**\\r\\n * Returns the bitwise XOR of this Long and the given one.\\r\\n * @param {!Long|number|string} other Other Long\\r\\n * @returns {!Long}\\r\\n */\\r\\nLongPrototype.xor = function xor(other) {\\r\\n    if (!isLong(other))\\r\\n        other = fromValue(other);\\r\\n    return fromBits(this.low ^ other.low, this.high ^ other.high, this.unsigned);\\r\\n};\\r\\n\\r\\n/**\\r\\n * Returns this Long with bits shifted to the left by the given amount.\\r\\n * @param {number|!Long} numBits Number of bits\\r\\n * @returns {!Long} Shifted Long\\r\\n */\\r\\nLongPrototype.shiftLeft = function shiftLeft(numBits) {\\r\\n    if (isLong(numBits))\\r\\n        numBits = numBits.toInt();\\r\\n    if ((numBits &= 63) === 0)\\r\\n        return this;\\r\\n    else if (numBits < 32)\\r\\n        return fromBits(this.low << numBits, (this.high << numBits) | (this.low >>> (32 - numBits)), this.unsigned);\\r\\n    else\\r\\n        return fromBits(0, this.low << (numBits - 32), this.unsigned);\\r\\n};\\r\\n\\r\\n/**\\r\\n * Returns this Long with bits shifted to the left by the given amount. This is an alias of {@link Long#shiftLeft}.\\r\\n * @function\\r\\n * @param {number|!Long} numBits Number of bits\\r\\n * @returns {!Long} Shifted Long\\r\\n */\\r\\nLongPrototype.shl = LongPrototype.shiftLeft;\\r\\n\\r\\n/**\\r\\n * Returns this Long with bits arithmetically shifted to the right by the given amount.\\r\\n * @param {number|!Long} numBits Number of bits\\r\\n * @returns {!Long} Shifted Long\\r\\n */\\r\\nLongPrototype.shiftRight = function shiftRight(numBits) {\\r\\n    if (isLong(numBits))\\r\\n        numBits = numBits.toInt();\\r\\n    if ((numBits &= 63) === 0)\\r\\n        return this;\\r\\n    else if (numBits < 32)\\r\\n        return fromBits((this.low >>> numBits) | (this.high << (32 - numBits)), this.high >> numBits, this.unsigned);\\r\\n    else\\r\\n        return fromBits(this.high >> (numBits - 32), this.high >= 0 ? 0 : -1, this.unsigned);\\r\\n};\\r\\n\\r\\n/**\\r\\n * Returns this Long with bits arithmetically shifted to the right by the given amount. This is an alias of {@link Long#shiftRight}.\\r\\n * @function\\r\\n * @param {number|!Long} numBits Number of bits\\r\\n * @returns {!Long} Shifted Long\\r\\n */\\r\\nLongPrototype.shr = LongPrototype.shiftRight;\\r\\n\\r\\n/**\\r\\n * Returns this Long with bits logically shifted to the right by the given amount.\\r\\n * @param {number|!Long} numBits Number of bits\\r\\n * @returns {!Long} Shifted Long\\r\\n */\\r\\nLongPrototype.shiftRightUnsigned = function shiftRightUnsigned(numBits) {\\r\\n    if (isLong(numBits))\\r\\n        numBits = numBits.toInt();\\r\\n    numBits &= 63;\\r\\n    if (numBits === 0)\\r\\n        return this;\\r\\n    else {\\r\\n        var high = this.high;\\r\\n        if (numBits < 32) {\\r\\n            var low = this.low;\\r\\n            return fromBits((low >>> numBits) | (high << (32 - numBits)), high >>> numBits, this.unsigned);\\r\\n        } else if (numBits === 32)\\r\\n            return fromBits(high, 0, this.unsigned);\\r\\n        else\\r\\n            return fromBits(high >>> (numBits - 32), 0, this.unsigned);\\r\\n    }\\r\\n};\\r\\n\\r\\n/**\\r\\n * Returns this Long with bits logically shifted to the right by the given amount. This is an alias of {@link Long#shiftRightUnsigned}.\\r\\n * @function\\r\\n * @param {number|!Long} numBits Number of bits\\r\\n * @returns {!Long} Shifted Long\\r\\n */\\r\\nLongPrototype.shru = LongPrototype.shiftRightUnsigned;\\r\\n\\r\\n/**\\r\\n * Returns this Long with bits logically shifted to the right by the given amount. This is an alias of {@link Long#shiftRightUnsigned}.\\r\\n * @function\\r\\n * @param {number|!Long} numBits Number of bits\\r\\n * @returns {!Long} Shifted Long\\r\\n */\\r\\nLongPrototype.shr_u = LongPrototype.shiftRightUnsigned;\\r\\n\\r\\n/**\\r\\n * Converts this Long to signed.\\r\\n * @returns {!Long} Signed long\\r\\n */\\r\\nLongPrototype.toSigned = function toSigned() {\\r\\n    if (!this.unsigned)\\r\\n        return this;\\r\\n    return fromBits(this.low, this.high, false);\\r\\n};\\r\\n\\r\\n/**\\r\\n * Converts this Long to unsigned.\\r\\n * @returns {!Long} Unsigned long\\r\\n */\\r\\nLongPrototype.toUnsigned = function toUnsigned() {\\r\\n    if (this.unsigned)\\r\\n        return this;\\r\\n    return fromBits(this.low, this.high, true);\\r\\n};\\r\\n\\r\\n/**\\r\\n * Converts this Long to its byte representation.\\r\\n * @param {boolean=} le Whether little or big endian, defaults to big endian\\r\\n * @returns {!Array.<number>} Byte representation\\r\\n */\\r\\nLongPrototype.toBytes = function toBytes(le) {\\r\\n    return le ? this.toBytesLE() : this.toBytesBE();\\r\\n};\\r\\n\\r\\n/**\\r\\n * Converts this Long to its little endian byte representation.\\r\\n * @returns {!Array.<number>} Little endian byte representation\\r\\n */\\r\\nLongPrototype.toBytesLE = function toBytesLE() {\\r\\n    var hi = this.high,\\r\\n        lo = this.low;\\r\\n    return [\\r\\n        lo        & 0xff,\\r\\n        lo >>>  8 & 0xff,\\r\\n        lo >>> 16 & 0xff,\\r\\n        lo >>> 24       ,\\r\\n        hi        & 0xff,\\r\\n        hi >>>  8 & 0xff,\\r\\n        hi >>> 16 & 0xff,\\r\\n        hi >>> 24\\r\\n    ];\\r\\n};\\r\\n\\r\\n/**\\r\\n * Converts this Long to its big endian byte representation.\\r\\n * @returns {!Array.<number>} Big endian byte representation\\r\\n */\\r\\nLongPrototype.toBytesBE = function toBytesBE() {\\r\\n    var hi = this.high,\\r\\n        lo = this.low;\\r\\n    return [\\r\\n        hi >>> 24       ,\\r\\n        hi >>> 16 & 0xff,\\r\\n        hi >>>  8 & 0xff,\\r\\n        hi        & 0xff,\\r\\n        lo >>> 24       ,\\r\\n        lo >>> 16 & 0xff,\\r\\n        lo >>>  8 & 0xff,\\r\\n        lo        & 0xff\\r\\n    ];\\r\\n};\\r\\n\\r\\n/**\\r\\n * Creates a Long from its byte representation.\\r\\n * @param {!Array.<number>} bytes Byte representation\\r\\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\\r\\n * @param {boolean=} le Whether little or big endian, defaults to big endian\\r\\n * @returns {Long} The corresponding Long value\\r\\n */\\r\\nLong.fromBytes = function fromBytes(bytes, unsigned, le) {\\r\\n    return le ? Long.fromBytesLE(bytes, unsigned) : Long.fromBytesBE(bytes, unsigned);\\r\\n};\\r\\n\\r\\n/**\\r\\n * Creates a Long from its little endian byte representation.\\r\\n * @param {!Array.<number>} bytes Little endian byte representation\\r\\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\\r\\n * @returns {Long} The corresponding Long value\\r\\n */\\r\\nLong.fromBytesLE = function fromBytesLE(bytes, unsigned) {\\r\\n    return new Long(\\r\\n        bytes[0]       |\\r\\n        bytes[1] <<  8 |\\r\\n        bytes[2] << 16 |\\r\\n        bytes[3] << 24,\\r\\n        bytes[4]       |\\r\\n        bytes[5] <<  8 |\\r\\n        bytes[6] << 16 |\\r\\n        bytes[7] << 24,\\r\\n        unsigned\\r\\n    );\\r\\n};\\r\\n\\r\\n/**\\r\\n * Creates a Long from its big endian byte representation.\\r\\n * @param {!Array.<number>} bytes Big endian byte representation\\r\\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\\r\\n * @returns {Long} The corresponding Long value\\r\\n */\\r\\nLong.fromBytesBE = function fromBytesBE(bytes, unsigned) {\\r\\n    return new Long(\\r\\n        bytes[4] << 24 |\\r\\n        bytes[5] << 16 |\\r\\n        bytes[6] <<  8 |\\r\\n        bytes[7],\\r\\n        bytes[0] << 24 |\\r\\n        bytes[1] << 16 |\\r\\n        bytes[2] <<  8 |\\r\\n        bytes[3],\\r\\n        unsigned\\r\\n    );\\r\\n};\\r\\n\\n\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./src/long.js\\n// module id = 0\\n// module chunks = 0\"],\"sourceRoot\":\"\"}/src/long.jsŜmodule.exports = Long;\r\n\r\n/**\r\n * wasm optimizations, to do native i64 multiplication and divide\r\n */\r\nvar wasm = null;\r\n\r\ntry {\r\n  wasm = new WebAssembly.Instance(new WebAssembly.Module(new Uint8Array([\r\n    0, 97, 115, 109, 1, 0, 0, 0, 1, 13, 2, 96, 0, 1, 127, 96, 4, 127, 127, 127, 127, 1, 127, 3, 7, 6, 0, 1, 1, 1, 1, 1, 6, 6, 1, 127, 1, 65, 0, 11, 7, 50, 6, 3, 109, 117, 108, 0, 1, 5, 100, 105, 118, 95, 115, 0, 2, 5, 100, 105, 118, 95, 117, 0, 3, 5, 114, 101, 109, 95, 115, 0, 4, 5, 114, 101, 109, 95, 117, 0, 5, 8, 103, 101, 116, 95, 104, 105, 103, 104, 0, 0, 10, 191, 1, 6, 4, 0, 35, 0, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 126, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 127, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 128, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 129, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 130, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11\r\n  ])), {}).exports;\r\n} catch (e) {\r\n  // no wasm support :(\r\n}\r\n\r\n/**\r\n * Constructs a 64 bit two's-complement integer, given its low and high 32 bit values as *signed* integers.\r\n *  See the from* functions below for more convenient ways of constructing Longs.\r\n * @exports Long\r\n * @class A Long class for representing a 64 bit two's-complement integer value.\r\n * @param {number} low The low (signed) 32 bits of the long\r\n * @param {number} high The high (signed) 32 bits of the long\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @constructor\r\n */\r\nfunction Long(low, high, unsigned) {\r\n\r\n    /**\r\n     * The low 32 bits as a signed value.\r\n     * @type {number}\r\n     */\r\n    this.low = low | 0;\r\n\r\n    /**\r\n     * The high 32 bits as a signed value.\r\n     * @type {number}\r\n     */\r\n    this.high = high | 0;\r\n\r\n    /**\r\n     * Whether unsigned or not.\r\n     * @type {boolean}\r\n     */\r\n    this.unsigned = !!unsigned;\r\n}\r\n\r\n// The internal representation of a long is the two given signed, 32-bit values.\r\n// We use 32-bit pieces because these are the size of integers on which\r\n// Javascript performs bit-operations.  For operations like addition and\r\n// multiplication, we split each number into 16 bit pieces, which can easily be\r\n// multiplied within Javascript's floating-point representation without overflow\r\n// or change in sign.\r\n//\r\n// In the algorithms below, we frequently reduce the negative case to the\r\n// positive case by negating the input(s) and then post-processing the result.\r\n// Note that we must ALWAYS check specially whether those values are MIN_VALUE\r\n// (-2^63) because -MIN_VALUE == MIN_VALUE (since 2^63 cannot be represented as\r\n// a positive number, it overflows back into a negative).  Not handling this\r\n// case would often result in infinite recursion.\r\n//\r\n// Common constant values ZERO, ONE, NEG_ONE, etc. are defined below the from*\r\n// methods on which they depend.\r\n\r\n/**\r\n * An indicator used to reliably determine if an object is a Long or not.\r\n * @type {boolean}\r\n * @const\r\n * @private\r\n */\r\nLong.prototype.__isLong__;\r\n\r\nObject.defineProperty(Long.prototype, \"__isLong__\", { value: true });\r\n\r\n/**\r\n * @function\r\n * @param {*} obj Object\r\n * @returns {boolean}\r\n * @inner\r\n */\r\nfunction isLong(obj) {\r\n    return (obj && obj[\"__isLong__\"]) === true;\r\n}\r\n\r\n/**\r\n * Tests if the specified object is a Long.\r\n * @function\r\n * @param {*} obj Object\r\n * @returns {boolean}\r\n */\r\nLong.isLong = isLong;\r\n\r\n/**\r\n * A cache of the Long representations of small integer values.\r\n * @type {!Object}\r\n * @inner\r\n */\r\nvar INT_CACHE = {};\r\n\r\n/**\r\n * A cache of the Long representations of small unsigned integer values.\r\n * @type {!Object}\r\n * @inner\r\n */\r\nvar UINT_CACHE = {};\r\n\r\n/**\r\n * @param {number} value\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromInt(value, unsigned) {\r\n    var obj, cachedObj, cache;\r\n    if (unsigned) {\r\n        value >>>= 0;\r\n        if (cache = (0 <= value && value < 256)) {\r\n            cachedObj = UINT_CACHE[value];\r\n            if (cachedObj)\r\n                return cachedObj;\r\n        }\r\n        obj = fromBits(value, (value | 0) < 0 ? -1 : 0, true);\r\n        if (cache)\r\n            UINT_CACHE[value] = obj;\r\n        return obj;\r\n    } else {\r\n        value |= 0;\r\n        if (cache = (-128 <= value && value < 128)) {\r\n            cachedObj = INT_CACHE[value];\r\n            if (cachedObj)\r\n                return cachedObj;\r\n        }\r\n        obj = fromBits(value, value < 0 ? -1 : 0, false);\r\n        if (cache)\r\n            INT_CACHE[value] = obj;\r\n        return obj;\r\n    }\r\n}\r\n\r\n/**\r\n * Returns a Long representing the given 32 bit integer value.\r\n * @function\r\n * @param {number} value The 32 bit integer in question\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {!Long} The corresponding Long value\r\n */\r\nLong.fromInt = fromInt;\r\n\r\n/**\r\n * @param {number} value\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromNumber(value, unsigned) {\r\n    if (isNaN(value))\r\n        return unsigned ? UZERO : ZERO;\r\n    if (unsigned) {\r\n        if (value < 0)\r\n            return UZERO;\r\n        if (value >= TWO_PWR_64_DBL)\r\n            return MAX_UNSIGNED_VALUE;\r\n    } else {\r\n        if (value <= -TWO_PWR_63_DBL)\r\n            return MIN_VALUE;\r\n        if (value + 1 >= TWO_PWR_63_DBL)\r\n            return MAX_VALUE;\r\n    }\r\n    if (value < 0)\r\n        return fromNumber(-value, unsigned).neg();\r\n    return fromBits((value % TWO_PWR_32_DBL) | 0, (value / TWO_PWR_32_DBL) | 0, unsigned);\r\n}\r\n\r\n/**\r\n * Returns a Long representing the given value, provided that it is a finite number. Otherwise, zero is returned.\r\n * @function\r\n * @param {number} value The number in question\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {!Long} The corresponding Long value\r\n */\r\nLong.fromNumber = fromNumber;\r\n\r\n/**\r\n * @param {number} lowBits\r\n * @param {number} highBits\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromBits(lowBits, highBits, unsigned) {\r\n    return new Long(lowBits, highBits, unsigned);\r\n}\r\n\r\n/**\r\n * Returns a Long representing the 64 bit integer that comes by concatenating the given low and high bits. Each is\r\n *  assumed to use 32 bits.\r\n * @function\r\n * @param {number} lowBits The low 32 bits\r\n * @param {number} highBits The high 32 bits\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {!Long} The corresponding Long value\r\n */\r\nLong.fromBits = fromBits;\r\n\r\n/**\r\n * @function\r\n * @param {number} base\r\n * @param {number} exponent\r\n * @returns {number}\r\n * @inner\r\n */\r\nvar pow_dbl = Math.pow; // Used 4 times (4*8 to 15+4)\r\n\r\n/**\r\n * @param {string} str\r\n * @param {(boolean|number)=} unsigned\r\n * @param {number=} radix\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromString(str, unsigned, radix) {\r\n    if (str.length === 0)\r\n        throw Error('empty string');\r\n    if (str === \"NaN\" || str === \"Infinity\" || str === \"+Infinity\" || str === \"-Infinity\")\r\n        return ZERO;\r\n    if (typeof unsigned === 'number') {\r\n        // For goog.math.long compatibility\r\n        radix = unsigned,\r\n        unsigned = false;\r\n    } else {\r\n        unsigned = !! unsigned;\r\n    }\r\n    radix = radix || 10;\r\n    if (radix < 2 || 36 < radix)\r\n        throw RangeError('radix');\r\n\r\n    var p;\r\n    if ((p = str.indexOf('-')) > 0)\r\n        throw Error('interior hyphen');\r\n    else if (p === 0) {\r\n        return fromString(str.substring(1), unsigned, radix).neg();\r\n    }\r\n\r\n    // Do several (8) digits each time through the loop, so as to\r\n    // minimize the calls to the very expensive emulated div.\r\n    var radixToPower = fromNumber(pow_dbl(radix, 8));\r\n\r\n    var result = ZERO;\r\n    for (var i = 0; i < str.length; i += 8) {\r\n        var size = Math.min(8, str.length - i),\r\n            value = parseInt(str.substring(i, i + size), radix);\r\n        if (size < 8) {\r\n            var power = fromNumber(pow_dbl(radix, size));\r\n            result = result.mul(power).add(fromNumber(value));\r\n        } else {\r\n            result = result.mul(radixToPower);\r\n            result = result.add(fromNumber(value));\r\n        }\r\n    }\r\n    result.unsigned = unsigned;\r\n    return result;\r\n}\r\n\r\n/**\r\n * Returns a Long representation of the given string, written using the specified radix.\r\n * @function\r\n * @param {string} str The textual representation of the Long\r\n * @param {(boolean|number)=} unsigned Whether unsigned or not, defaults to signed\r\n * @param {number=} radix The radix in which the text is written (2-36), defaults to 10\r\n * @returns {!Long} The corresponding Long value\r\n */\r\nLong.fromString = fromString;\r\n\r\n/**\r\n * @function\r\n * @param {!Long|number|string|!{low: number, high: number, unsigned: boolean}} val\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromValue(val, unsigned) {\r\n    if (typeof val === 'number')\r\n        return fromNumber(val, unsigned);\r\n    if (typeof val === 'string')\r\n        return fromString(val, unsigned);\r\n    // Throws for non-objects, converts non-instanceof Long:\r\n    return fromBits(val.low, val.high, typeof unsigned === 'boolean' ? unsigned : val.unsigned);\r\n}\r\n\r\n/**\r\n * Converts the specified value to a Long using the appropriate from* function for its type.\r\n * @function\r\n * @param {!Long|number|string|!{low: number, high: number, unsigned: boolean}} val Value\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {!Long}\r\n */\r\nLong.fromValue = fromValue;\r\n\r\n// NOTE: the compiler should inline these constant values below and then remove these variables, so there should be\r\n// no runtime penalty for these.\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_16_DBL = 1 << 16;\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_24_DBL = 1 << 24;\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_32_DBL = TWO_PWR_16_DBL * TWO_PWR_16_DBL;\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_64_DBL = TWO_PWR_32_DBL * TWO_PWR_32_DBL;\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_63_DBL = TWO_PWR_64_DBL / 2;\r\n\r\n/**\r\n * @type {!Long}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_24 = fromInt(TWO_PWR_24_DBL);\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar ZERO = fromInt(0);\r\n\r\n/**\r\n * Signed zero.\r\n * @type {!Long}\r\n */\r\nLong.ZERO = ZERO;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar UZERO = fromInt(0, true);\r\n\r\n/**\r\n * Unsigned zero.\r\n * @type {!Long}\r\n */\r\nLong.UZERO = UZERO;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar ONE = fromInt(1);\r\n\r\n/**\r\n * Signed one.\r\n * @type {!Long}\r\n */\r\nLong.ONE = ONE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar UONE = fromInt(1, true);\r\n\r\n/**\r\n * Unsigned one.\r\n * @type {!Long}\r\n */\r\nLong.UONE = UONE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar NEG_ONE = fromInt(-1);\r\n\r\n/**\r\n * Signed negative one.\r\n * @type {!Long}\r\n */\r\nLong.NEG_ONE = NEG_ONE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar MAX_VALUE = fromBits(0xFFFFFFFF|0, 0x7FFFFFFF|0, false);\r\n\r\n/**\r\n * Maximum signed value.\r\n * @type {!Long}\r\n */\r\nLong.MAX_VALUE = MAX_VALUE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar MAX_UNSIGNED_VALUE = fromBits(0xFFFFFFFF|0, 0xFFFFFFFF|0, true);\r\n\r\n/**\r\n * Maximum unsigned value.\r\n * @type {!Long}\r\n */\r\nLong.MAX_UNSIGNED_VALUE = MAX_UNSIGNED_VALUE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar MIN_VALUE = fromBits(0, 0x80000000|0, false);\r\n\r\n/**\r\n * Minimum signed value.\r\n * @type {!Long}\r\n */\r\nLong.MIN_VALUE = MIN_VALUE;\r\n\r\n/**\r\n * @alias Long.prototype\r\n * @inner\r\n */\r\nvar LongPrototype = Long.prototype;\r\n\r\n/**\r\n * Converts the Long to a 32 bit integer, assuming it is a 32 bit integer.\r\n * @returns {number}\r\n */\r\nLongPrototype.toInt = function toInt() {\r\n    return this.unsigned ? this.low >>> 0 : this.low;\r\n};\r\n\r\n/**\r\n * Converts the Long to a the nearest floating-point representation of this value (double, 53 bit mantissa).\r\n * @returns {number}\r\n */\r\nLongPrototype.toNumber = function toNumber() {\r\n    if (this.unsigned)\r\n        return ((this.high >>> 0) * TWO_PWR_32_DBL) + (this.low >>> 0);\r\n    return this.high * TWO_PWR_32_DBL + (this.low >>> 0);\r\n};\r\n\r\n/**\r\n * Converts the Long to a string written in the specified radix.\r\n * @param {number=} radix Radix (2-36), defaults to 10\r\n * @returns {string}\r\n * @override\r\n * @throws {RangeError} If `radix` is out of range\r\n */\r\nLongPrototype.toString = function toString(radix) {\r\n    radix = radix || 10;\r\n    if (radix < 2 || 36 < radix)\r\n        throw RangeError('radix');\r\n    if (this.isZero())\r\n        return '0';\r\n    if (this.isNegative()) { // Unsigned Longs are never negative\r\n        if (this.eq(MIN_VALUE)) {\r\n            // We need to change the Long value before it can be negated, so we remove\r\n            // the bottom-most digit in this base and then recurse to do the rest.\r\n            var radixLong = fromNumber(radix),\r\n                div = this.div(radixLong),\r\n                rem1 = div.mul(radixLong).sub(this);\r\n            return div.toString(radix) + rem1.toInt().toString(radix);\r\n        } else\r\n            return '-' + this.neg().toString(radix);\r\n    }\r\n\r\n    // Do several (6) digits each time through the loop, so as to\r\n    // minimize the calls to the very expensive emulated div.\r\n    var radixToPower = fromNumber(pow_dbl(radix, 6), this.unsigned),\r\n        rem = this;\r\n    var result = '';\r\n    while (true) {\r\n        var remDiv = rem.div(radixToPower),\r\n            intval = rem.sub(remDiv.mul(radixToPower)).toInt() >>> 0,\r\n            digits = intval.toString(radix);\r\n        rem = remDiv;\r\n        if (rem.isZero())\r\n            return digits + result;\r\n        else {\r\n            while (digits.length < 6)\r\n                digits = '0' + digits;\r\n            result = '' + digits + result;\r\n        }\r\n    }\r\n};\r\n\r\n/**\r\n * Gets the high 32 bits as a signed integer.\r\n * @returns {number} Signed high bits\r\n */\r\nLongPrototype.getHighBits = function getHighBits() {\r\n    return this.high;\r\n};\r\n\r\n/**\r\n * Gets the high 32 bits as an unsigned integer.\r\n * @returns {number} Unsigned high bits\r\n */\r\nLongPrototype.getHighBitsUnsigned = function getHighBitsUnsigned() {\r\n    return this.high >>> 0;\r\n};\r\n\r\n/**\r\n * Gets the low 32 bits as a signed integer.\r\n * @returns {number} Signed low bits\r\n */\r\nLongPrototype.getLowBits = function getLowBits() {\r\n    return this.low;\r\n};\r\n\r\n/**\r\n * Gets the low 32 bits as an unsigned integer.\r\n * @returns {number} Unsigned low bits\r\n */\r\nLongPrototype.getLowBitsUnsigned = function getLowBitsUnsigned() {\r\n    return this.low >>> 0;\r\n};\r\n\r\n/**\r\n * Gets the number of bits needed to represent the absolute value of this Long.\r\n * @returns {number}\r\n */\r\nLongPrototype.getNumBitsAbs = function getNumBitsAbs() {\r\n    if (this.isNegative()) // Unsigned Longs are never negative\r\n        return this.eq(MIN_VALUE) ? 64 : this.neg().getNumBitsAbs();\r\n    var val = this.high != 0 ? this.high : this.low;\r\n    for (var bit = 31; bit > 0; bit--)\r\n        if ((val & (1 << bit)) != 0)\r\n            break;\r\n    return this.high != 0 ? bit + 33 : bit + 1;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value equals zero.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isZero = function isZero() {\r\n    return this.high === 0 && this.low === 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value equals zero. This is an alias of {@link Long#isZero}.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.eqz = LongPrototype.isZero;\r\n\r\n/**\r\n * Tests if this Long's value is negative.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isNegative = function isNegative() {\r\n    return !this.unsigned && this.high < 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is positive.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isPositive = function isPositive() {\r\n    return this.unsigned || this.high >= 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is odd.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isOdd = function isOdd() {\r\n    return (this.low & 1) === 1;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is even.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isEven = function isEven() {\r\n    return (this.low & 1) === 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value equals the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.equals = function equals(other) {\r\n    if (!isLong(other))\r\n        other = fromValue(other);\r\n    if (this.unsigned !== other.unsigned && (this.high >>> 31) === 1 && (other.high >>> 31) === 1)\r\n        return false;\r\n    return this.high === other.high && this.low === other.low;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value equals the specified's. This is an alias of {@link Long#equals}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.eq = LongPrototype.equals;\r\n\r\n/**\r\n * Tests if this Long's value differs from the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.notEquals = function notEquals(other) {\r\n    return !this.eq(/* validates */ other);\r\n};\r\n\r\n/**\r\n * Tests if this Long's value differs from the specified's. This is an alias of {@link Long#notEquals}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.neq = LongPrototype.notEquals;\r\n\r\n/**\r\n * Tests if this Long's value differs from the specified's. This is an alias of {@link Long#notEquals}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.ne = LongPrototype.notEquals;\r\n\r\n/**\r\n * Tests if this Long's value is less than the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.lessThan = function lessThan(other) {\r\n    return this.comp(/* validates */ other) < 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is less than the specified's. This is an alias of {@link Long#lessThan}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.lt = LongPrototype.lessThan;\r\n\r\n/**\r\n * Tests if this Long's value is less than or equal the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.lessThanOrEqual = function lessThanOrEqual(other) {\r\n    return this.comp(/* validates */ other) <= 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is less than or equal the specified's. This is an alias of {@link Long#lessThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.lte = LongPrototype.lessThanOrEqual;\r\n\r\n/**\r\n * Tests if this Long's value is less than or equal the specified's. This is an alias of {@link Long#lessThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.le = LongPrototype.lessThanOrEqual;\r\n\r\n/**\r\n * Tests if this Long's value is greater than the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.greaterThan = function greaterThan(other) {\r\n    return this.comp(/* validates */ other) > 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is greater than the specified's. This is an alias of {@link Long#greaterThan}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.gt = LongPrototype.greaterThan;\r\n\r\n/**\r\n * Tests if this Long's value is greater than or equal the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.greaterThanOrEqual = function greaterThanOrEqual(other) {\r\n    return this.comp(/* validates */ other) >= 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is greater than or equal the specified's. This is an alias of {@link Long#greaterThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.gte = LongPrototype.greaterThanOrEqual;\r\n\r\n/**\r\n * Tests if this Long's value is greater than or equal the specified's. This is an alias of {@link Long#greaterThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.ge = LongPrototype.greaterThanOrEqual;\r\n\r\n/**\r\n * Compares this Long's value with the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {number} 0 if they are the same, 1 if the this is greater and -1\r\n *  if the given one is greater\r\n */\r\nLongPrototype.compare = function compare(other) {\r\n    if (!isLong(other))\r\n        other = fromValue(other);\r\n    if (this.eq(other))\r\n        return 0;\r\n    var thisNeg = this.isNegative(),\r\n        otherNeg = other.isNegative();\r\n    if (thisNeg && !otherNeg)\r\n        return -1;\r\n    if (!thisNeg && otherNeg)\r\n        return 1;\r\n    // At this point the sign bits are the same\r\n    if (!this.unsigned)\r\n        return this.sub(other).isNegative() ? -1 : 1;\r\n    // Both are positive if at least one is unsigned\r\n    return (other.high >>> 0) > (this.high >>> 0) || (other.high === this.high && (other.low >>> 0) > (this.low >>> 0)) ? -1 : 1;\r\n};\r\n\r\n/**\r\n * Compares this Long's value with the specified's. This is an alias of {@link Long#compare}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {number} 0 if they are the same, 1 if the this is greater and -1\r\n *  if the given one is greater\r\n */\r\nLongPrototype.comp = LongPrototype.compare;\r\n\r\n/**\r\n * Negates this Long's value.\r\n * @returns {!Long} Negated Long\r\n */\r\nLongPrototype.negate = function negate() {\r\n    if (!this.unsigned && this.eq(MIN_VALUE))\r\n        return MIN_VALUE;\r\n    return this.not().add(ONE);\r\n};\r\n\r\n/**\r\n * Negates this Long's value. This is an alias of {@link Long#negate}.\r\n * @function\r\n * @returns {!Long} Negated Long\r\n */\r\nLongPrototype.neg = LongPrototype.negate;\r\n\r\n/**\r\n * Returns the sum of this and the specified Long.\r\n * @param {!Long|number|string} addend Addend\r\n * @returns {!Long} Sum\r\n */\r\nLongPrototype.add = function add(addend) {\r\n    if (!isLong(addend))\r\n        addend = fromValue(addend);\r\n\r\n    // Divide each number into 4 chunks of 16 bits, and then sum the chunks.\r\n\r\n    var a48 = this.high >>> 16;\r\n    var a32 = this.high & 0xFFFF;\r\n    var a16 = this.low >>> 16;\r\n    var a00 = this.low & 0xFFFF;\r\n\r\n    var b48 = addend.high >>> 16;\r\n    var b32 = addend.high & 0xFFFF;\r\n    var b16 = addend.low >>> 16;\r\n    var b00 = addend.low & 0xFFFF;\r\n\r\n    var c48 = 0, c32 = 0, c16 = 0, c00 = 0;\r\n    c00 += a00 + b00;\r\n    c16 += c00 >>> 16;\r\n    c00 &= 0xFFFF;\r\n    c16 += a16 + b16;\r\n    c32 += c16 >>> 16;\r\n    c16 &= 0xFFFF;\r\n    c32 += a32 + b32;\r\n    c48 += c32 >>> 16;\r\n    c32 &= 0xFFFF;\r\n    c48 += a48 + b48;\r\n    c48 &= 0xFFFF;\r\n    return fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the difference of this and the specified Long.\r\n * @param {!Long|number|string} subtrahend Subtrahend\r\n * @returns {!Long} Difference\r\n */\r\nLongPrototype.subtract = function subtract(subtrahend) {\r\n    if (!isLong(subtrahend))\r\n        subtrahend = fromValue(subtrahend);\r\n    return this.add(subtrahend.neg());\r\n};\r\n\r\n/**\r\n * Returns the difference of this and the specified Long. This is an alias of {@link Long#subtract}.\r\n * @function\r\n * @param {!Long|number|string} subtrahend Subtrahend\r\n * @returns {!Long} Difference\r\n */\r\nLongPrototype.sub = LongPrototype.subtract;\r\n\r\n/**\r\n * Returns the product of this and the specified Long.\r\n * @param {!Long|number|string} multiplier Multiplier\r\n * @returns {!Long} Product\r\n */\r\nLongPrototype.multiply = function multiply(multiplier) {\r\n    if (this.isZero())\r\n        return ZERO;\r\n    if (!isLong(multiplier))\r\n        multiplier = fromValue(multiplier);\r\n\r\n    // use wasm support if present\r\n    if (wasm) {\r\n        var low = wasm.mul(this.low,\r\n                           this.high,\r\n                           multiplier.low,\r\n                           multiplier.high);\r\n        return fromBits(low, wasm.get_high(), this.unsigned);\r\n    }\r\n\r\n    if (multiplier.isZero())\r\n        return ZERO;\r\n    if (this.eq(MIN_VALUE))\r\n        return multiplier.isOdd() ? MIN_VALUE : ZERO;\r\n    if (multiplier.eq(MIN_VALUE))\r\n        return this.isOdd() ? MIN_VALUE : ZERO;\r\n\r\n    if (this.isNegative()) {\r\n        if (multiplier.isNegative())\r\n            return this.neg().mul(multiplier.neg());\r\n        else\r\n            return this.neg().mul(multiplier).neg();\r\n    } else if (multiplier.isNegative())\r\n        return this.mul(multiplier.neg()).neg();\r\n\r\n    // If both longs are small, use float multiplication\r\n    if (this.lt(TWO_PWR_24) && multiplier.lt(TWO_PWR_24))\r\n        return fromNumber(this.toNumber() * multiplier.toNumber(), this.unsigned);\r\n\r\n    // Divide each long into 4 chunks of 16 bits, and then add up 4x4 products.\r\n    // We can skip products that would overflow.\r\n\r\n    var a48 = this.high >>> 16;\r\n    var a32 = this.high & 0xFFFF;\r\n    var a16 = this.low >>> 16;\r\n    var a00 = this.low & 0xFFFF;\r\n\r\n    var b48 = multiplier.high >>> 16;\r\n    var b32 = multiplier.high & 0xFFFF;\r\n    var b16 = multiplier.low >>> 16;\r\n    var b00 = multiplier.low & 0xFFFF;\r\n\r\n    var c48 = 0, c32 = 0, c16 = 0, c00 = 0;\r\n    c00 += a00 * b00;\r\n    c16 += c00 >>> 16;\r\n    c00 &= 0xFFFF;\r\n    c16 += a16 * b00;\r\n    c32 += c16 >>> 16;\r\n    c16 &= 0xFFFF;\r\n    c16 += a00 * b16;\r\n    c32 += c16 >>> 16;\r\n    c16 &= 0xFFFF;\r\n    c32 += a32 * b00;\r\n    c48 += c32 >>> 16;\r\n    c32 &= 0xFFFF;\r\n    c32 += a16 * b16;\r\n    c48 += c32 >>> 16;\r\n    c32 &= 0xFFFF;\r\n    c32 += a00 * b32;\r\n    c48 += c32 >>> 16;\r\n    c32 &= 0xFFFF;\r\n    c48 += a48 * b00 + a32 * b16 + a16 * b32 + a00 * b48;\r\n    c48 &= 0xFFFF;\r\n    return fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the product of this and the specified Long. This is an alias of {@link Long#multiply}.\r\n * @function\r\n * @param {!Long|number|string} multiplier Multiplier\r\n * @returns {!Long} Product\r\n */\r\nLongPrototype.mul = LongPrototype.multiply;\r\n\r\n/**\r\n * Returns this Long divided by the specified. The result is signed if this Long is signed or\r\n *  unsigned if this Long is unsigned.\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Quotient\r\n */\r\nLongPrototype.divide = function divide(divisor) {\r\n    if (!isLong(divisor))\r\n        divisor = fromValue(divisor);\r\n    if (divisor.isZero())\r\n        throw Error('division by zero');\r\n\r\n    // use wasm support if present\r\n    if (wasm) {\r\n        // guard against signed division overflow: the largest\r\n        // negative number / -1 would be 1 larger than the largest\r\n        // positive number, due to two's complement.\r\n        if (!this.unsigned &&\r\n            this.high === -0x80000000 &&\r\n            divisor.low === -1 && divisor.high === -1) {\r\n            // be consistent with non-wasm code path\r\n            return this;\r\n        }\r\n        var low = (this.unsigned ? wasm.div_u : wasm.div_s)(\r\n            this.low,\r\n            this.high,\r\n            divisor.low,\r\n            divisor.high\r\n        );\r\n        return fromBits(low, wasm.get_high(), this.unsigned);\r\n    }\r\n\r\n    if (this.isZero())\r\n        return this.unsigned ? UZERO : ZERO;\r\n    var approx, rem, res;\r\n    if (!this.unsigned) {\r\n        // This section is only relevant for signed longs and is derived from the\r\n        // closure library as a whole.\r\n        if (this.eq(MIN_VALUE)) {\r\n            if (divisor.eq(ONE) || divisor.eq(NEG_ONE))\r\n                return MIN_VALUE;  // recall that -MIN_VALUE == MIN_VALUE\r\n            else if (divisor.eq(MIN_VALUE))\r\n                return ONE;\r\n            else {\r\n                // At this point, we have |other| >= 2, so |this/other| < |MIN_VALUE|.\r\n                var halfThis = this.shr(1);\r\n                approx = halfThis.div(divisor).shl(1);\r\n                if (approx.eq(ZERO)) {\r\n                    return divisor.isNegative() ? ONE : NEG_ONE;\r\n                } else {\r\n                    rem = this.sub(divisor.mul(approx));\r\n                    res = approx.add(rem.div(divisor));\r\n                    return res;\r\n                }\r\n            }\r\n        } else if (divisor.eq(MIN_VALUE))\r\n            return this.unsigned ? UZERO : ZERO;\r\n        if (this.isNegative()) {\r\n            if (divisor.isNegative())\r\n                return this.neg().div(divisor.neg());\r\n            return this.neg().div(divisor).neg();\r\n        } else if (divisor.isNegative())\r\n            return this.div(divisor.neg()).neg();\r\n        res = ZERO;\r\n    } else {\r\n        // The algorithm below has not been made for unsigned longs. It's therefore\r\n        // required to take special care of the MSB prior to running it.\r\n        if (!divisor.unsigned)\r\n            divisor = divisor.toUnsigned();\r\n        if (divisor.gt(this))\r\n            return UZERO;\r\n        if (divisor.gt(this.shru(1))) // 15 >>> 1 = 7 ; with divisor = 8 ; true\r\n            return UONE;\r\n        res = UZERO;\r\n    }\r\n\r\n    // Repeat the following until the remainder is less than other:  find a\r\n    // floating-point that approximates remainder / other *from below*, add this\r\n    // into the result, and subtract it from the remainder.  It is critical that\r\n    // the approximate value is less than or equal to the real value so that the\r\n    // remainder never becomes negative.\r\n    rem = this;\r\n    while (rem.gte(divisor)) {\r\n        // Approximate the result of division. This may be a little greater or\r\n        // smaller than the actual value.\r\n        approx = Math.max(1, Math.floor(rem.toNumber() / divisor.toNumber()));\r\n\r\n        // We will tweak the approximate result by changing it in the 48-th digit or\r\n        // the smallest non-fractional digit, whichever is larger.\r\n        var log2 = Math.ceil(Math.log(approx) / Math.LN2),\r\n            delta = (log2 <= 48) ? 1 : pow_dbl(2, log2 - 48),\r\n\r\n        // Decrease the approximation until it is smaller than the remainder.  Note\r\n        // that if it is too large, the product overflows and is negative.\r\n            approxRes = fromNumber(approx),\r\n            approxRem = approxRes.mul(divisor);\r\n        while (approxRem.isNegative() || approxRem.gt(rem)) {\r\n            approx -= delta;\r\n            approxRes = fromNumber(approx, this.unsigned);\r\n            approxRem = approxRes.mul(divisor);\r\n        }\r\n\r\n        // We know the answer can't be zero... and actually, zero would cause\r\n        // infinite recursion since we would make no progress.\r\n        if (approxRes.isZero())\r\n            approxRes = ONE;\r\n\r\n        res = res.add(approxRes);\r\n        rem = rem.sub(approxRem);\r\n    }\r\n    return res;\r\n};\r\n\r\n/**\r\n * Returns this Long divided by the specified. This is an alias of {@link Long#divide}.\r\n * @function\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Quotient\r\n */\r\nLongPrototype.div = LongPrototype.divide;\r\n\r\n/**\r\n * Returns this Long modulo the specified.\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Remainder\r\n */\r\nLongPrototype.modulo = function modulo(divisor) {\r\n    if (!isLong(divisor))\r\n        divisor = fromValue(divisor);\r\n\r\n    // use wasm support if present\r\n    if (wasm) {\r\n        var low = (this.unsigned ? wasm.rem_u : wasm.rem_s)(\r\n            this.low,\r\n            this.high,\r\n            divisor.low,\r\n            divisor.high\r\n        );\r\n        return fromBits(low, wasm.get_high(), this.unsigned);\r\n    }\r\n\r\n    return this.sub(this.div(divisor).mul(divisor));\r\n};\r\n\r\n/**\r\n * Returns this Long modulo the specified. This is an alias of {@link Long#modulo}.\r\n * @function\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Remainder\r\n */\r\nLongPrototype.mod = LongPrototype.modulo;\r\n\r\n/**\r\n * Returns this Long modulo the specified. This is an alias of {@link Long#modulo}.\r\n * @function\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Remainder\r\n */\r\nLongPrototype.rem = LongPrototype.modulo;\r\n\r\n/**\r\n * Returns the bitwise NOT of this Long.\r\n * @returns {!Long}\r\n */\r\nLongPrototype.not = function not() {\r\n    return fromBits(~this.low, ~this.high, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the bitwise AND of this Long and the specified.\r\n * @param {!Long|number|string} other Other Long\r\n * @returns {!Long}\r\n */\r\nLongPrototype.and = function and(other) {\r\n    if (!isLong(other))\r\n        other = fromValue(other);\r\n    return fromBits(this.low & other.low, this.high & other.high, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the bitwise OR of this Long and the specified.\r\n * @param {!Long|number|string} other Other Long\r\n * @returns {!Long}\r\n */\r\nLongPrototype.or = function or(other) {\r\n    if (!isLong(other))\r\n        other = fromValue(other);\r\n    return fromBits(this.low | other.low, this.high | other.high, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the bitwise XOR of this Long and the given one.\r\n * @param {!Long|number|string} other Other Long\r\n * @returns {!Long}\r\n */\r\nLongPrototype.xor = function xor(other) {\r\n    if (!isLong(other))\r\n        other = fromValue(other);\r\n    return fromBits(this.low ^ other.low, this.high ^ other.high, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns this Long with bits shifted to the left by the given amount.\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shiftLeft = function shiftLeft(numBits) {\r\n    if (isLong(numBits))\r\n        numBits = numBits.toInt();\r\n    if ((numBits &= 63) === 0)\r\n        return this;\r\n    else if (numBits < 32)\r\n        return fromBits(this.low << numBits, (this.high << numBits) | (this.low >>> (32 - numBits)), this.unsigned);\r\n    else\r\n        return fromBits(0, this.low << (numBits - 32), this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns this Long with bits shifted to the left by the given amount. This is an alias of {@link Long#shiftLeft}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shl = LongPrototype.shiftLeft;\r\n\r\n/**\r\n * Returns this Long with bits arithmetically shifted to the right by the given amount.\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shiftRight = function shiftRight(numBits) {\r\n    if (isLong(numBits))\r\n        numBits = numBits.toInt();\r\n    if ((numBits &= 63) === 0)\r\n        return this;\r\n    else if (numBits < 32)\r\n        return fromBits((this.low >>> numBits) | (this.high << (32 - numBits)), this.high >> numBits, this.unsigned);\r\n    else\r\n        return fromBits(this.high >> (numBits - 32), this.high >= 0 ? 0 : -1, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns this Long with bits arithmetically shifted to the right by the given amount. This is an alias of {@link Long#shiftRight}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shr = LongPrototype.shiftRight;\r\n\r\n/**\r\n * Returns this Long with bits logically shifted to the right by the given amount.\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shiftRightUnsigned = function shiftRightUnsigned(numBits) {\r\n    if (isLong(numBits))\r\n        numBits = numBits.toInt();\r\n    numBits &= 63;\r\n    if (numBits === 0)\r\n        return this;\r\n    else {\r\n        var high = this.high;\r\n        if (numBits < 32) {\r\n            var low = this.low;\r\n            return fromBits((low >>> numBits) | (high << (32 - numBits)), high >>> numBits, this.unsigned);\r\n        } else if (numBits === 32)\r\n            return fromBits(high, 0, this.unsigned);\r\n        else\r\n            return fromBits(high >>> (numBits - 32), 0, this.unsigned);\r\n    }\r\n};\r\n\r\n/**\r\n * Returns this Long with bits logically shifted to the right by the given amount. This is an alias of {@link Long#shiftRightUnsigned}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shru = LongPrototype.shiftRightUnsigned;\r\n\r\n/**\r\n * Returns this Long with bits logically shifted to the right by the given amount. This is an alias of {@link Long#shiftRightUnsigned}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shr_u = LongPrototype.shiftRightUnsigned;\r\n\r\n/**\r\n * Converts this Long to signed.\r\n * @returns {!Long} Signed long\r\n */\r\nLongPrototype.toSigned = function toSigned() {\r\n    if (!this.unsigned)\r\n        return this;\r\n    return fromBits(this.low, this.high, false);\r\n};\r\n\r\n/**\r\n * Converts this Long to unsigned.\r\n * @returns {!Long} Unsigned long\r\n */\r\nLongPrototype.toUnsigned = function toUnsigned() {\r\n    if (this.unsigned)\r\n        return this;\r\n    return fromBits(this.low, this.high, true);\r\n};\r\n\r\n/**\r\n * Converts this Long to its byte representation.\r\n * @param {boolean=} le Whether little or big endian, defaults to big endian\r\n * @returns {!Array.<number>} Byte representation\r\n */\r\nLongPrototype.toBytes = function toBytes(le) {\r\n    return le ? this.toBytesLE() : this.toBytesBE();\r\n};\r\n\r\n/**\r\n * Converts this Long to its little endian byte representation.\r\n * @returns {!Array.<number>} Little endian byte representation\r\n */\r\nLongPrototype.toBytesLE = function toBytesLE() {\r\n    var hi = this.high,\r\n        lo = this.low;\r\n    return [\r\n        lo        & 0xff,\r\n        lo >>>  8 & 0xff,\r\n        lo >>> 16 & 0xff,\r\n        lo >>> 24       ,\r\n        hi        & 0xff,\r\n        hi >>>  8 & 0xff,\r\n        hi >>> 16 & 0xff,\r\n        hi >>> 24\r\n    ];\r\n};\r\n\r\n/**\r\n * Converts this Long to its big endian byte representation.\r\n * @returns {!Array.<number>} Big endian byte representation\r\n */\r\nLongPrototype.toBytesBE = function toBytesBE() {\r\n    var hi = this.high,\r\n        lo = this.low;\r\n    return [\r\n        hi >>> 24       ,\r\n        hi >>> 16 & 0xff,\r\n        hi >>>  8 & 0xff,\r\n        hi        & 0xff,\r\n        lo >>> 24       ,\r\n        lo >>> 16 & 0xff,\r\n        lo >>>  8 & 0xff,\r\n        lo        & 0xff\r\n    ];\r\n};\r\n\r\n/**\r\n * Creates a Long from its byte representation.\r\n * @param {!Array.<number>} bytes Byte representation\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @param {boolean=} le Whether little or big endian, defaults to big endian\r\n * @returns {Long} The corresponding Long value\r\n */\r\nLong.fromBytes = function fromBytes(bytes, unsigned, le) {\r\n    return le ? Long.fromBytesLE(bytes, unsigned) : Long.fromBytesBE(bytes, unsigned);\r\n};\r\n\r\n/**\r\n * Creates a Long from its little endian byte representation.\r\n * @param {!Array.<number>} bytes Little endian byte representation\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {Long} The corresponding Long value\r\n */\r\nLong.fromBytesLE = function fromBytesLE(bytes, unsigned) {\r\n    return new Long(\r\n        bytes[0]       |\r\n        bytes[1] <<  8 |\r\n        bytes[2] << 16 |\r\n        bytes[3] << 24,\r\n        bytes[4]       |\r\n        bytes[5] <<  8 |\r\n        bytes[6] << 16 |\r\n        bytes[7] << 24,\r\n        unsigned\r\n    );\r\n};\r\n\r\n/**\r\n * Creates a Long from its big endian byte representation.\r\n * @param {!Array.<number>} bytes Big endian byte representation\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {Long} The corresponding Long value\r\n */\r\nLong.fromBytesBE = function fromBytesBE(bytes, unsigned) {\r\n    return new Long(\r\n        bytes[4] << 24 |\r\n        bytes[5] << 16 |\r\n        bytes[6] <<  8 |\r\n        bytes[7],\r\n        bytes[0] << 24 |\r\n        bytes[1] << 16 |\r\n        bytes[2] <<  8 |\r\n        bytes[3],\r\n        unsigned\r\n    );\r\n};\r\n/index.js)module.exports = require(\"./src/long\");\r\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/bG9vc2UtZW52aWZ5QDEuNC4w",
    "content": "/README.md\u0004/# loose-envify\n\n[![Build Status](https://travis-ci.org/zertosh/loose-envify.svg?branch=master)](https://travis-ci.org/zertosh/loose-envify)\n\nFast (and loose) selective `process.env` replacer using [js-tokens](https://github.com/lydell/js-tokens) instead of an AST. Works just like [envify](https://github.com/hughsk/envify) but much faster.\n\n## Gotchas\n\n* Doesn't handle broken syntax.\n* Doesn't look inside embedded expressions in template strings.\n  - **this won't work:**\n  ```js\n  console.log(`the current env is ${process.env.NODE_ENV}`);\n  ```\n* Doesn't replace oddly-spaced or oddly-commented expressions.\n  - **this won't work:**\n  ```js\n  console.log(process./*won't*/env./*work*/NODE_ENV);\n  ```\n\n## Usage/Options\n\nloose-envify has the exact same interface as [envify](https://github.com/hughsk/envify), including the CLI.\n\n## Benchmark\n\n```\nenvify:\n\n  $ for i in {1..5}; do node bench/bench.js 'envify'; done\n  708ms\n  727ms\n  791ms\n  719ms\n  720ms\n\nloose-envify:\n\n  $ for i in {1..5}; do node bench/bench.js '../'; done\n  51ms\n  52ms\n  52ms\n  52ms\n  52ms\n```\n/index.jsH'use strict';\n\nmodule.exports = require('./loose-envify')(process.env);\n/replace.js\u0005'use strict';\n\nvar jsTokens = require('js-tokens').default;\n\nvar processEnvRe = /\\bprocess\\.env\\.[_$a-zA-Z][$\\w]+\\b/;\nvar spaceOrCommentRe = /^(?:\\s|\\/[/*])/;\n\nfunction replace(src, envs) {\n  if (!processEnvRe.test(src)) {\n    return src;\n  }\n\n  var out = [];\n  var purge = envs.some(function(env) {\n    return env._ && env._.indexOf('purge') !== -1;\n  });\n\n  jsTokens.lastIndex = 0\n  var parts = src.match(jsTokens);\n\n  for (var i = 0; i < parts.length; i++) {\n    if (parts[i    ] === 'process' &&\n        parts[i + 1] === '.' &&\n        parts[i + 2] === 'env' &&\n        parts[i + 3] === '.') {\n      var prevCodeToken = getAdjacentCodeToken(-1, parts, i);\n      var nextCodeToken = getAdjacentCodeToken(1, parts, i + 4);\n      var replacement = getReplacementString(envs, parts[i + 4], purge);\n      if (prevCodeToken !== '.' &&\n          nextCodeToken !== '.' &&\n          nextCodeToken !== '=' &&\n          typeof replacement === 'string') {\n        out.push(replacement);\n        i += 4;\n        continue;\n      }\n    }\n    out.push(parts[i]);\n  }\n\n  return out.join('');\n}\n\nfunction getAdjacentCodeToken(dir, parts, i) {\n  while (true) {\n    var part = parts[i += dir];\n    if (!spaceOrCommentRe.test(part)) {\n      return part;\n    }\n  }\n}\n\nfunction getReplacementString(envs, name, purge) {\n  for (var j = 0; j < envs.length; j++) {\n    var env = envs[j];\n    if (typeof env[name] !== 'undefined') {\n      return JSON.stringify(env[name]);\n    }\n  }\n  if (purge) {\n    return 'undefined';\n  }\n}\n\nmodule.exports = replace;\n/cli.js\u0001d#!/usr/bin/env node\n'use strict';\n\nvar looseEnvify = require('./');\nvar fs = require('fs');\n\nif (process.argv[2]) {\n  fs.createReadStream(process.argv[2], {encoding: 'utf8'})\n    .pipe(looseEnvify(process.argv[2]))\n    .pipe(process.stdout);\n} else {\n  process.stdin.resume()\n  process.stdin\n    .pipe(looseEnvify(__filename))\n    .pipe(process.stdout);\n}\n/LICENSE\u0004LThe MIT License (MIT)\n\nCopyright (c) 2015 Andres Suarez <zertosh@gmail.com>\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n/custom.jsS// envify compatibility\n'use strict';\n\nmodule.exports = require('./loose-envify');\n/package.json\u0003){\n  \"name\": \"loose-envify\",\n  \"version\": \"1.4.0\",\n  \"description\": \"Fast (and loose) selective `process.env` replacer using js-tokens instead of an AST\",\n  \"keywords\": [\n    \"environment\",\n    \"variables\",\n    \"browserify\",\n    \"browserify-transform\",\n    \"transform\",\n    \"source\",\n    \"configuration\"\n  ],\n  \"homepage\": \"https://github.com/zertosh/loose-envify\",\n  \"license\": \"MIT\",\n  \"author\": \"Andres Suarez <zertosh@gmail.com>\",\n  \"main\": \"index.js\",\n  \"bin\": {\n    \"loose-envify\": \"cli.js\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git://github.com/zertosh/loose-envify.git\"\n  },\n  \"scripts\": {\n    \"test\": \"tap test/*.js\"\n  },\n  \"dependencies\": {\n    \"js-tokens\": \"^3.0.0 || ^4.0.0\"\n  },\n  \"devDependencies\": {\n    \"browserify\": \"^13.1.1\",\n    \"envify\": \"^3.4.0\",\n    \"tap\": \"^8.0.0\"\n  }\n}\n/loose-envify.js\u0003\u0017'use strict';\n\nvar stream = require('stream');\nvar util = require('util');\nvar replace = require('./replace');\n\nvar jsonExtRe = /\\.json$/;\n\nmodule.exports = function(rootEnv) {\n  rootEnv = rootEnv || process.env;\n  return function (file, trOpts) {\n    if (jsonExtRe.test(file)) {\n      return stream.PassThrough();\n    }\n    var envs = trOpts ? [rootEnv, trOpts] : [rootEnv];\n    return new LooseEnvify(envs);\n  };\n};\n\nfunction LooseEnvify(envs) {\n  stream.Transform.call(this);\n  this._data = '';\n  this._envs = envs;\n}\nutil.inherits(LooseEnvify, stream.Transform);\n\nLooseEnvify.prototype._transform = function(buf, enc, cb) {\n  this._data += buf;\n  cb();\n};\n\nLooseEnvify.prototype._flush = function(cb) {\n  var replaced = replace(this._data, this._envs);\n  this.push(replaced);\n  cb();\n};\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/bGV2bkAwLjQuMQ==",
    "content": "/package.json\u0003{\n  \"name\": \"levn\",\n  \"version\": \"0.4.1\",\n  \"author\": \"George Zahariev <z@georgezahariev.com>\",\n  \"description\": \"Light ECMAScript (JavaScript) Value Notation - human written, concise, typed, flexible\",\n  \"homepage\": \"https://github.com/gkz/levn\",\n  \"keywords\": [\n    \"levn\",\n    \"light\",\n    \"ecmascript\",\n    \"value\",\n    \"notation\",\n    \"json\",\n    \"typed\",\n    \"human\",\n    \"concise\",\n    \"typed\",\n    \"flexible\"\n  ],\n  \"files\": [\n    \"lib\",\n    \"README.md\",\n    \"LICENSE\"\n  ],\n  \"main\": \"./lib/\",\n  \"bugs\": \"https://github.com/gkz/levn/issues\",\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"node\": \">= 0.8.0\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git://github.com/gkz/levn.git\"\n  },\n  \"scripts\": {\n    \"test\": \"make test\"\n  },\n  \"dependencies\": {\n    \"prelude-ls\": \"^1.2.1\",\n    \"type-check\": \"~0.4.0\"\n  },\n  \"devDependencies\": {\n    \"livescript\": \"^1.6.0\",\n    \"mocha\": \"^7.1.1\"\n  }\n}\n/lib/cast.js\u001e// Generated by LiveScript 1.6.0\n(function(){\n  var parsedTypeCheck, types, toString$ = {}.toString;\n  parsedTypeCheck = require('type-check').parsedTypeCheck;\n  types = {\n    '*': function(value, options){\n      switch (toString$.call(value).slice(8, -1)) {\n      case 'Array':\n        return typeCast(value, {\n          type: 'Array'\n        }, options);\n      case 'Object':\n        return typeCast(value, {\n          type: 'Object'\n        }, options);\n      default:\n        return {\n          type: 'Just',\n          value: typesCast(value, [\n            {\n              type: 'Undefined'\n            }, {\n              type: 'Null'\n            }, {\n              type: 'NaN'\n            }, {\n              type: 'Boolean'\n            }, {\n              type: 'Number'\n            }, {\n              type: 'Date'\n            }, {\n              type: 'RegExp'\n            }, {\n              type: 'Array'\n            }, {\n              type: 'Object'\n            }, {\n              type: 'String'\n            }\n          ], (options.explicit = true, options))\n        };\n      }\n    },\n    Undefined: function(it){\n      if (it === 'undefined' || it === void 8) {\n        return {\n          type: 'Just',\n          value: void 8\n        };\n      } else {\n        return {\n          type: 'Nothing'\n        };\n      }\n    },\n    Null: function(it){\n      if (it === 'null') {\n        return {\n          type: 'Just',\n          value: null\n        };\n      } else {\n        return {\n          type: 'Nothing'\n        };\n      }\n    },\n    NaN: function(it){\n      if (it === 'NaN') {\n        return {\n          type: 'Just',\n          value: NaN\n        };\n      } else {\n        return {\n          type: 'Nothing'\n        };\n      }\n    },\n    Boolean: function(it){\n      if (it === 'true') {\n        return {\n          type: 'Just',\n          value: true\n        };\n      } else if (it === 'false') {\n        return {\n          type: 'Just',\n          value: false\n        };\n      } else {\n        return {\n          type: 'Nothing'\n        };\n      }\n    },\n    Number: function(it){\n      return {\n        type: 'Just',\n        value: +it\n      };\n    },\n    Int: function(it){\n      return {\n        type: 'Just',\n        value: +it\n      };\n    },\n    Float: function(it){\n      return {\n        type: 'Just',\n        value: +it\n      };\n    },\n    Date: function(value, options){\n      var that;\n      if (that = /^\\#([\\s\\S]*)\\#$/.exec(value)) {\n        return {\n          type: 'Just',\n          value: new Date(+that[1] || that[1])\n        };\n      } else if (options.explicit) {\n        return {\n          type: 'Nothing'\n        };\n      } else {\n        return {\n          type: 'Just',\n          value: new Date(+value || value)\n        };\n      }\n    },\n    RegExp: function(value, options){\n      var that;\n      if (that = /^\\/([\\s\\S]*)\\/([gimy]*)$/.exec(value)) {\n        return {\n          type: 'Just',\n          value: new RegExp(that[1], that[2])\n        };\n      } else if (options.explicit) {\n        return {\n          type: 'Nothing'\n        };\n      } else {\n        return {\n          type: 'Just',\n          value: new RegExp(value)\n        };\n      }\n    },\n    Array: function(value, options){\n      return castArray(value, {\n        of: [{\n          type: '*'\n        }]\n      }, options);\n    },\n    Object: function(value, options){\n      return castFields(value, {\n        of: {}\n      }, options);\n    },\n    String: function(it){\n      var replace, that;\n      if (toString$.call(it).slice(8, -1) !== 'String') {\n        return {\n          type: 'Nothing'\n        };\n      }\n      replace = function(value, quote){\n        return value.replace(/\\\\([^u]|u[0-9a-fA-F]{4})/g, function(all, escaped){\n          switch (escaped[0]) {\n          case quote:\n            return quote;\n          case '\\\\':\n            return '\\\\';\n          case 'b':\n            return '\\b';\n          case 'f':\n            return '\\f';\n          case 'n':\n            return '\\n';\n          case 'r':\n            return '\\r';\n          case 't':\n            return '\\t';\n          case 'u':\n            return JSON.parse(\"\\\"\" + all + \"\\\"\");\n          default:\n            return escaped;\n          }\n        });\n      };\n      if (that = it.match(/^'([\\s\\S]*)'$/)) {\n        return {\n          type: 'Just',\n          value: replace(that[1], \"'\")\n        };\n      } else if (that = it.match(/^\"([\\s\\S]*)\"$/)) {\n        return {\n          type: 'Just',\n          value: replace(that[1], '\"')\n        };\n      } else {\n        return {\n          type: 'Just',\n          value: it\n        };\n      }\n    }\n  };\n  function castArray(node, type, options){\n    var typeOf, element;\n    if (toString$.call(node).slice(8, -1) !== 'Array') {\n      return {\n        type: 'Nothing'\n      };\n    }\n    typeOf = type.of;\n    return {\n      type: 'Just',\n      value: (function(){\n        var i$, ref$, len$, results$ = [];\n        for (i$ = 0, len$ = (ref$ = node).length; i$ < len$; ++i$) {\n          element = ref$[i$];\n          results$.push(typesCast(element, typeOf, options));\n        }\n        return results$;\n      }())\n    };\n  }\n  function castTuple(node, type, options){\n    var result, i, i$, ref$, len$, types, cast;\n    if (toString$.call(node).slice(8, -1) !== 'Array') {\n      return {\n        type: 'Nothing'\n      };\n    }\n    result = [];\n    i = 0;\n    for (i$ = 0, len$ = (ref$ = type.of).length; i$ < len$; ++i$) {\n      types = ref$[i$];\n      cast = typesCast(node[i], types, options);\n      if (toString$.call(cast).slice(8, -1) !== 'Undefined') {\n        result.push(cast);\n      }\n      i++;\n    }\n    if (node.length <= i) {\n      return {\n        type: 'Just',\n        value: result\n      };\n    } else {\n      return {\n        type: 'Nothing'\n      };\n    }\n  }\n  function castFields(node, type, options){\n    var typeOf, key, value;\n    if (toString$.call(node).slice(8, -1) !== 'Object') {\n      return {\n        type: 'Nothing'\n      };\n    }\n    typeOf = type.of;\n    return {\n      type: 'Just',\n      value: (function(){\n        var ref$, resultObj$ = {};\n        for (key in ref$ = node) {\n          value = ref$[key];\n          resultObj$[typesCast(key, [{\n            type: 'String'\n          }], options)] = typesCast(value, typeOf[key] || [{\n            type: '*'\n          }], options);\n        }\n        return resultObj$;\n      }())\n    };\n  }\n  function typeCast(node, typeObj, options){\n    var type, structure, castFunc, ref$;\n    type = typeObj.type, structure = typeObj.structure;\n    if (type) {\n      castFunc = ((ref$ = options.customTypes[type]) != null ? ref$.cast : void 8) || types[type];\n      if (!castFunc) {\n        throw new Error(\"Type not defined: \" + type + \".\");\n      }\n      return castFunc(node, options, typesCast);\n    } else {\n      switch (structure) {\n      case 'array':\n        return castArray(node, typeObj, options);\n      case 'tuple':\n        return castTuple(node, typeObj, options);\n      case 'fields':\n        return castFields(node, typeObj, options);\n      }\n    }\n  }\n  function typesCast(node, types, options){\n    var i$, len$, type, ref$, valueType, value;\n    for (i$ = 0, len$ = types.length; i$ < len$; ++i$) {\n      type = types[i$];\n      ref$ = typeCast(node, type, options), valueType = ref$.type, value = ref$.value;\n      if (valueType === 'Nothing') {\n        continue;\n      }\n      if (parsedTypeCheck([type], value, {\n        customTypes: options.customTypes\n      })) {\n        return value;\n      }\n    }\n    throw new Error(\"Value \" + JSON.stringify(node) + \" does not type check against \" + JSON.stringify(types) + \".\");\n  }\n  module.exports = function(node, types, options){\n    if (!options.explicit && types.length === 1 && types[0].type === 'String') {\n      return node;\n    }\n    return typesCast(node, types, options);\n  };\n}).call(this);\n/lib/parse-string.js\u000f#// Generated by LiveScript 1.6.0\n(function(){\n  var reject, special, tokenRegex;\n  reject = require('prelude-ls').reject;\n  function consumeOp(tokens, op){\n    if (tokens[0] === op) {\n      return tokens.shift();\n    } else {\n      throw new Error(\"Expected '\" + op + \"', but got '\" + tokens[0] + \"' instead in \" + JSON.stringify(tokens) + \".\");\n    }\n  }\n  function maybeConsumeOp(tokens, op){\n    if (tokens[0] === op) {\n      return tokens.shift();\n    }\n  }\n  function consumeList(tokens, arg$, hasDelimiters){\n    var open, close, result, untilTest;\n    open = arg$[0], close = arg$[1];\n    if (hasDelimiters) {\n      consumeOp(tokens, open);\n    }\n    result = [];\n    untilTest = \",\" + (hasDelimiters ? close : '');\n    while (tokens.length && (hasDelimiters && tokens[0] !== close)) {\n      result.push(consumeElement(tokens, untilTest));\n      maybeConsumeOp(tokens, ',');\n    }\n    if (hasDelimiters) {\n      consumeOp(tokens, close);\n    }\n    return result;\n  }\n  function consumeArray(tokens, hasDelimiters){\n    return consumeList(tokens, ['[', ']'], hasDelimiters);\n  }\n  function consumeTuple(tokens, hasDelimiters){\n    return consumeList(tokens, ['(', ')'], hasDelimiters);\n  }\n  function consumeFields(tokens, hasDelimiters){\n    var result, untilTest, key;\n    if (hasDelimiters) {\n      consumeOp(tokens, '{');\n    }\n    result = {};\n    untilTest = \",\" + (hasDelimiters ? '}' : '');\n    while (tokens.length && (!hasDelimiters || tokens[0] !== '}')) {\n      key = consumeValue(tokens, ':');\n      consumeOp(tokens, ':');\n      result[key] = consumeElement(tokens, untilTest);\n      maybeConsumeOp(tokens, ',');\n    }\n    if (hasDelimiters) {\n      consumeOp(tokens, '}');\n    }\n    return result;\n  }\n  function consumeValue(tokens, untilTest){\n    var out;\n    untilTest == null && (untilTest = '');\n    out = '';\n    while (tokens.length && -1 === untilTest.indexOf(tokens[0])) {\n      out += tokens.shift();\n    }\n    return out;\n  }\n  function consumeElement(tokens, untilTest){\n    switch (tokens[0]) {\n    case '[':\n      return consumeArray(tokens, true);\n    case '(':\n      return consumeTuple(tokens, true);\n    case '{':\n      return consumeFields(tokens, true);\n    default:\n      return consumeValue(tokens, untilTest);\n    }\n  }\n  function consumeTopLevel(tokens, types, options){\n    var ref$, type, structure, origTokens, result, finalResult, x$, y$;\n    ref$ = types[0], type = ref$.type, structure = ref$.structure;\n    origTokens = tokens.concat();\n    if (!options.explicit && types.length === 1 && ((!type && structure) || (type === 'Array' || type === 'Object'))) {\n      result = structure === 'array' || type === 'Array'\n        ? consumeArray(tokens, tokens[0] === '[')\n        : structure === 'tuple'\n          ? consumeTuple(tokens, tokens[0] === '(')\n          : consumeFields(tokens, tokens[0] === '{');\n      finalResult = tokens.length ? consumeElement(structure === 'array' || type === 'Array'\n        ? (x$ = origTokens, x$.unshift('['), x$.push(']'), x$)\n        : (y$ = origTokens, y$.unshift('('), y$.push(')'), y$)) : result;\n    } else {\n      finalResult = consumeElement(tokens);\n    }\n    return finalResult;\n  }\n  special = /\\[\\]\\(\\)}{:,/.source;\n  tokenRegex = RegExp('(\"(?:\\\\\\\\\"|[^\"])*\")|(\\'(?:\\\\\\\\\\'|[^\\'])*\\')|(/(?:\\\\\\\\/|[^/])*/[a-zA-Z]*)|(#.*#)|([' + special + '])|([^\\\\s' + special + '](?:\\\\s*[^\\\\s' + special + ']+)*)|\\\\s*');\n  module.exports = function(types, string, options){\n    var tokens, node;\n    options == null && (options = {});\n    if (!options.explicit && types.length === 1 && types[0].type === 'String') {\n      return string;\n    }\n    tokens = reject(not$, string.split(tokenRegex));\n    node = consumeTopLevel(tokens, types, options);\n    if (!node) {\n      throw new Error(\"Error parsing '\" + string + \"'.\");\n    }\n    return node;\n  };\n  function not$(x){ return !x; }\n}).call(this);\n/LICENSE\u0004\u001eCopyright (c) George Zahariev\n\nPermission is hereby granted, free of charge, to any person\nobtaining a copy of this software and associated documentation\nfiles (the \"Software\"), to deal in the Software without\nrestriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the\nSoftware is furnished to do so, subject to the following\nconditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\nOF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\nHOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\nWHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\nFROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\nOTHER DEALINGS IN THE SOFTWARE.\n/lib/index.js\u0003\u0014// Generated by LiveScript 1.6.0\n(function(){\n  var parseString, cast, parseType, VERSION, parsedTypeParse, parse;\n  parseString = require('./parse-string');\n  cast = require('./cast');\n  parseType = require('type-check').parseType;\n  VERSION = '0.4.1';\n  parsedTypeParse = function(parsedType, string, options){\n    options == null && (options = {});\n    options.explicit == null && (options.explicit = false);\n    options.customTypes == null && (options.customTypes = {});\n    return cast(parseString(parsedType, string, options), parsedType, options);\n  };\n  parse = function(type, string, options){\n    return parsedTypeParse(parseType(type), string, options);\n  };\n  module.exports = {\n    VERSION: VERSION,\n    parse: parse,\n    parsedTypeParse: parsedTypeParse\n  };\n}).call(this);\n/README.md(# levn [![Build Status](https://travis-ci.org/gkz/levn.png)](https://travis-ci.org/gkz/levn) <a name=\"levn\" />\n__Light ECMAScript (JavaScript) Value Notation__\nLevn is a library which allows you to parse a string into a JavaScript value based on an expected type. It is meant for short amounts of human entered data (eg. config files, command line arguments).\n\nLevn aims to concisely describe JavaScript values in text, and allow for the extraction and validation of those values. Levn uses [type-check](https://github.com/gkz/type-check) for its type format, and to validate the results. MIT license. Version 0.4.1.\n\n__How is this different than JSON?__ levn is meant to be written by humans only, is (due to the previous point) much more concise, can be validated against supplied types, has regex and date literals, and can easily be extended with custom types. On the other hand, it is probably slower and thus less efficient at transporting large amounts of data, which is fine since this is not its purpose.\n\n    npm install levn\n\nFor updates on levn, [follow me on twitter](https://twitter.com/gkzahariev).\n\n\n## Quick Examples\n\n```js\nvar parse = require('levn').parse;\nparse('Number', '2');      // 2\nparse('String', '2');      // '2'\nparse('String', 'levn');   // 'levn'\nparse('String', 'a b');    // 'a b'\nparse('Boolean', 'true');  // true\n\nparse('Date', '#2011-11-11#'); // (Date object)\nparse('Date', '2011-11-11');   // (Date object)\nparse('RegExp', '/[a-z]/gi');  // /[a-z]/gi\nparse('RegExp', 're');         // /re/\nparse('Int', '2');             // 2\n\nparse('Number | String', 'str'); // 'str'\nparse('Number | String', '2');   // 2\n\nparse('[Number]', '[1,2,3]');                      // [1,2,3]\nparse('(String, Boolean)', '(hi, false)');         // ['hi', false]\nparse('{a: String, b: Number}', '{a: str, b: 2}'); // {a: 'str', b: 2}\n\n// at the top level, you can ommit surrounding delimiters\nparse('[Number]', '1,2,3');                      // [1,2,3]\nparse('(String, Boolean)', 'hi, false');         // ['hi', false]\nparse('{a: String, b: Number}', 'a: str, b: 2'); // {a: 'str', b: 2}\n\n// wildcard - auto choose type\nparse('*', '[hi,(null,[42]),{k: true}]'); // ['hi', [null, [42]], {k: true}]\n```\n## Usage\n\n`require('levn');` returns an object that exposes three properties. `VERSION` is the current version of the library as a string. `parse` and `parsedTypeParse` are functions.\n\n```js\n// parse(type, input, options);\nparse('[Number]', '1,2,3'); // [1, 2, 3]\n\n// parsedTypeParse(parsedType, input, options);\nvar parsedType = require('type-check').parseType('[Number]');\nparsedTypeParse(parsedType, '1,2,3'); // [1, 2, 3]\n```\n\n### parse(type, input, options)\n\n`parse` casts the string `input` into a JavaScript value according to the specified `type` in the [type format](https://github.com/gkz/type-check#type-format) (and taking account the optional `options`) and returns the resulting JavaScript value.\n\n##### arguments\n* type - `String` - the type written in the [type format](https://github.com/gkz/type-check#type-format) which to check against\n* input - `String` - the value written in the [levn format](#levn-format)\n* options - `Maybe Object` - an optional parameter specifying additional [options](#options)\n\n##### returns\n`*` - the resulting JavaScript value\n\n##### example\n```js\nparse('[Number]', '1,2,3'); // [1, 2, 3]\n```\n\n### parsedTypeParse(parsedType, input, options)\n\n`parsedTypeParse` casts the string `input` into a JavaScript value according to the specified `type` which has already been parsed (and taking account the optional `options`) and returns the resulting JavaScript value. You can parse a type using the [type-check](https://github.com/gkz/type-check) library's `parseType` function.\n\n##### arguments\n* type - `Object` - the type in the parsed type format which to check against\n* input - `String` - the value written in the [levn format](#levn-format)\n* options - `Maybe Object` - an optional parameter specifying additional [options](#options)\n\n##### returns\n`*` - the resulting JavaScript value\n\n##### example\n```js\nvar parsedType = require('type-check').parseType('[Number]');\nparsedTypeParse(parsedType, '1,2,3'); // [1, 2, 3]\n```\n\n## Levn Format\n\nLevn can use the type information you provide to choose the appropriate value to produce from the input. For the same input, it will choose a different output value depending on the type provided. For example, `parse('Number', '2')` will produce the number `2`, but `parse('String', '2')` will produce the string `\"2\"`.\n\nIf you do not provide type information, and simply use `*`, levn will parse the input according the unambiguous \"explicit\" mode, which we will now detail - you can also set the `explicit` option to true manually in the [options](#options).\n\n* `\"string\"`, `'string'` are parsed as a String, eg. `\"a msg\"` is `\"a msg\"`\n* `#date#` is parsed as a Date, eg. `#2011-11-11#` is `new Date('2011-11-11')`\n* `/regexp/flags` is parsed as a RegExp, eg. `/re/gi` is `/re/gi`\n* `undefined`, `null`, `NaN`, `true`, and `false` are all their JavaScript equivalents\n* `[element1, element2, etc]` is an Array, and the casting procedure is recursively applied to each element. Eg. `[1,2,3]` is `[1,2,3]`.\n* `(element1, element2, etc)` is an tuple, and the casting procedure is recursively applied to each element. Eg. `(1, a)` is `(1, a)` (is `[1, 'a']`).\n* `{key1: val1, key2: val2, ...}` is an Object, and the casting procedure is recursively applied to each property. Eg. `{a: 1, b: 2}` is `{a: 1, b: 2}`.\n* Any test which does not fall under the above, and which does not contain special characters (`[``]``(``)``{``}``:``,`) is a string, eg. `$12- blah` is `\"$12- blah\"`.\n\nIf you do provide type information, you can make your input more concise as the program already has some information about what it expects. Please see the [type format](https://github.com/gkz/type-check#type-format) section of [type-check](https://github.com/gkz/type-check) for more information about how to specify types. There are some rules about what levn can do with the information:\n\n* If a String is expected, and only a String, all characters of the input (including any special ones) will become part of the output. Eg. `[({})]` is `\"[({})]\"`, and `\"hi\"` is `'\"hi\"'`.\n* If a Date is expected, the surrounding `#` can be omitted from date literals. Eg. `2011-11-11` is `new Date('2011-11-11')`.\n* If a RegExp is expected, no flags need to be specified, and the regex is not using any of the special characters,the opening and closing `/` can be omitted - this will have the affect of setting the source of the regex to the input. Eg. `regex` is `/regex/`.\n* If an Array is expected, and it is the root node (at the top level), the opening `[` and closing `]` can be omitted. Eg. `1,2,3` is `[1,2,3]`.\n* If a tuple is expected, and it is the root node (at the top level), the opening `(` and closing `)` can be omitted. Eg. `1, a` is `(1, a)` (is `[1, 'a']`).\n* If an Object is expected, and it is the root node (at the top level), the opening `{` and closing `}` can be omitted. Eg `a: 1, b: 2` is `{a: 1, b: 2}`.\n\nIf you list multiple types (eg. `Number | String`), it will first attempt to cast to the first type and then validate - if the validation fails it will move on to the next type and so forth, left to right. You must be careful as some types will succeed with any input, such as String. Thus put String at the end of your list. In non-explicit mode, Date and RegExp will succeed with a large variety of input - also be careful with these and list them near the end if not last in your list.\n\nWhitespace between special characters and elements is inconsequential.\n\n## Options\n\nOptions is an object. It is an optional parameter to the `parse` and `parsedTypeParse` functions.\n\n### Explicit\n\nA `Boolean`. By default it is `false`.\n\n__Example:__\n\n```js\nparse('RegExp', 're', {explicit: false});          // /re/\nparse('RegExp', 're', {explicit: true});           // Error: ... does not type check...\nparse('RegExp | String', 're', {explicit: true});  // 're'\n```\n\n`explicit` sets whether to be in explicit mode or not. Using `*` automatically activates explicit mode. For more information, read the [levn format](#levn-format) section.\n\n### customTypes\n\nAn `Object`. Empty `{}` by default.\n\n__Example:__\n\n```js\nvar options = {\n  customTypes: {\n    Even: {\n      typeOf: 'Number',\n      validate: function (x) {\n        return x % 2 === 0;\n      },\n      cast: function (x) {\n        return {type: 'Just', value: parseInt(x)};\n      }\n    }\n  }\n}\nparse('Even', '2', options); // 2\nparse('Even', '3', options); // Error: Value: \"3\" does not type check...\n```\n\n__Another Example:__\n```js\nfunction Person(name, age){\n  this.name = name;\n  this.age = age;\n}\nvar options = {\n  customTypes: {\n    Person: {\n      typeOf: 'Object',\n      validate: function (x) {\n        x instanceof Person;\n      },\n      cast: function (value, options, typesCast) {\n        var name, age;\n        if ({}.toString.call(value).slice(8, -1) !== 'Object') {\n          return {type: 'Nothing'};\n        }\n        name = typesCast(value.name, [{type: 'String'}], options);\n        age = typesCast(value.age, [{type: 'Numger'}], options);\n        return {type: 'Just', value: new Person(name, age)};\n    }\n  }\n}\nparse('Person', '{name: Laura, age: 25}', options); // Person {name: 'Laura', age: 25}\n```\n\n`customTypes` is an object whose keys are the name of the types, and whose values are an object with three properties, `typeOf`, `validate`, and `cast`. For more information about `typeOf` and `validate`, please see the [custom types](https://github.com/gkz/type-check#custom-types) section of type-check.\n\n`cast` is a function which receives three arguments, the value under question, options, and the typesCast function. In `cast`, attempt to cast the value into the specified type. If you are successful, return an object in the format `{type: 'Just', value: CAST-VALUE}`, if you know it won't work, return `{type: 'Nothing'}`.  You can use the `typesCast` function to cast any child values. Remember to pass `options` to it. In your function you can also check for `options.explicit` and act accordingly.\n\n## Technical About\n\n`levn` is written in [LiveScript](http://livescript.net/) - a language that compiles to JavaScript. It uses [type-check](https://github.com/gkz/type-check) to both parse types and validate values. It also uses the [prelude.ls](http://preludels.com/) library.\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/bGlsY29uZmlnQDIuMS4w",
    "content": "/readme.md\u000b# Lilconfig ⚙️\n[![npm version](https://badge.fury.io/js/lilconfig.svg)](https://badge.fury.io/js/lilconfig)\n[![install size](https://packagephobia.now.sh/badge?p=lilconfig)](https://packagephobia.now.sh/result?p=lilconfig)\n[![Coverage Status](https://coveralls.io/repos/github/antonk52/lilconfig/badge.svg)](https://coveralls.io/github/antonk52/lilconfig)\n\nA zero-dependency alternative to [cosmiconfig](https://www.npmjs.com/package/cosmiconfig) with the same API.\n\n## Installation\n\n```sh\nnpm install lilconfig\n```\n\n## Usage\n\n```js\nimport {lilconfig, lilconfigSync} from 'lilconfig';\n\n// all keys are optional\nconst options = {\n    stopDir: '/Users/you/some/dir',\n    searchPlaces: ['package.json', 'myapp.conf.js'],\n    ignoreEmptySearchPlaces: false\n}\n\nlilconfig(\n    'myapp',\n    options // optional\n).search() // Promise<LilconfigResult>\n\nlilconfigSync(\n    'myapp',\n    options // optional\n).load(pathToConfig) // LilconfigResult\n\n/**\n * LilconfigResult\n * {\n *   config: any; // your config\n *   filepath: string;\n * }\n */\n```\n\n## Difference to `cosmiconfig`\nLilconfig does not intend to be 100% compatible with `cosmiconfig` but tries to mimic it where possible. The key differences are:\n- **no** support for yaml files out of the box(`lilconfig` attempts to parse files with no extension as JSON instead of YAML). You can still add the support for YAML files by providing a loader, see an [example](#yaml-loader) below.\n- **no** cache\n\n### Options difference between the two.\n\n|cosmiconfig option      | lilconfig |\n|------------------------|-----------|\n|cache                   | ❌        |\n|loaders                 | ✅        |\n|ignoreEmptySearchPlaces | ✅        |\n|packageProp             | ✅        |\n|searchPlaces            | ✅        |\n|stopDir                 | ✅        |\n|transform               | ✅        |\n\n## Loaders examples\n\n### Yaml loader\n\nIf you need the YAML support you can provide your own loader\n\n```js\nimport {lilconfig} from 'lilconfig';\nimport yaml from 'yaml';\n\nfunction loadYaml(filepath, content) {\n    return yaml.parse(content);\n}\n\nconst options = {\n    loaders: {\n        '.yaml': loadYaml,\n        '.yml': loadYaml,\n        // loader for files with no extension\n        noExt: loadYaml\n    }\n};\n\nlilconfig('myapp', options)\n    .search()\n    .then(result => {\n        result // {config, filepath}\n    });\n```\n\n### ESM loader\n\nLilconfig v2 does not support ESM modules out of the box. However, you can support it with a custom a loader. Note that this will only work with the async `lilconfig` function and won't work with the sync `lilconfigSync`.\n\n```js\nimport {lilconfig} from 'lilconfig';\n\nconst loadEsm = filepath => import(filepath);\n\nlilconfig('myapp', {\n    loaders: {\n        '.js': loadEsm,\n        '.mjs': loadEsm,\n    }\n})\n    .search()\n    .then(result => {\n        result // {config, filepath}\n\n        result.config.default // if config uses `export default`\n    });\n```\n\n## Version correlation\n\n- lilconig v1 → cosmiconfig v6\n- lilconig v2 → cosmiconfig v7\n/dist/index.d.ts\u0005export declare type LilconfigResult = null | {\n    filepath: string;\n    config: any;\n    isEmpty?: boolean;\n};\ninterface OptionsBase {\n    stopDir?: string;\n    searchPlaces?: string[];\n    ignoreEmptySearchPlaces?: boolean;\n    packageProp?: string | string[];\n}\nexport declare type Transform = TransformSync | ((result: LilconfigResult) => Promise<LilconfigResult>);\nexport declare type TransformSync = (result: LilconfigResult) => LilconfigResult;\ndeclare type LoaderResult = any;\nexport declare type LoaderSync = (filepath: string, content: string) => LoaderResult;\nexport declare type Loader = LoaderSync | ((filepath: string, content: string) => Promise<LoaderResult>);\nexport declare type Loaders = Record<string, Loader>;\nexport declare type LoadersSync = Record<string, LoaderSync>;\nexport interface Options extends OptionsBase {\n    loaders?: Loaders;\n    transform?: Transform;\n}\nexport interface OptionsSync extends OptionsBase {\n    loaders?: LoadersSync;\n    transform?: TransformSync;\n}\nexport declare const defaultLoaders: LoadersSync;\ndeclare type AsyncSearcher = {\n    search(searchFrom?: string): Promise<LilconfigResult>;\n    load(filepath: string): Promise<LilconfigResult>;\n};\nexport declare function lilconfig(name: string, options?: Partial<Options>): AsyncSearcher;\ndeclare type SyncSearcher = {\n    search(searchFrom?: string): LilconfigResult;\n    load(filepath: string): LilconfigResult;\n};\nexport declare function lilconfigSync(name: string, options?: OptionsSync): SyncSearcher;\nexport {};\n/LICENSE\u00042MIT License\n\nCopyright (c) 2022 Anton Kastritskiy\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n/package.json\u0005\u0015{\n    \"name\": \"lilconfig\",\n    \"version\": \"2.1.0\",\n    \"description\": \"A zero-dependency alternative to cosmiconfig\",\n    \"main\": \"dist/index.js\",\n    \"types\": \"dist/index.d.ts\",\n    \"scripts\": {\n        \"prebuild\": \"npm run clean\",\n        \"build\": \"tsc --declaration\",\n        \"postbuild\": \"du -h ./dist/*\",\n        \"clean\": \"rm -rf ./dist\",\n        \"test\": \"jest --coverage\",\n        \"lint\": \"eslint ./src/*.ts\"\n    },\n    \"keywords\": [\n        \"cosmiconfig\",\n        \"config\",\n        \"configuration\",\n        \"search\"\n    ],\n    \"files\": [\n        \"dist/*\"\n    ],\n    \"repository\": {\n        \"type\": \"git\",\n        \"url\": \"https://github.com/antonk52/lilconfig\"\n    },\n    \"bugs\": \"https://github.com/antonk52/lilconfig/issues\",\n    \"author\": \"antonk52\",\n    \"license\": \"MIT\",\n    \"devDependencies\": {\n        \"@types/jest\": \"^27.0.2\",\n        \"@types/node\": \"^14.18.36\",\n        \"@typescript-eslint/eslint-plugin\": \"^5.54.0\",\n        \"@typescript-eslint/parser\": \"^5.54.0\",\n        \"cosmiconfig\": \"^7.1.0\",\n        \"eslint\": \"^8.35.0\",\n        \"eslint-config-prettier\": \"^8.6.0\",\n        \"eslint-plugin-prettier\": \"^4.2.1\",\n        \"jest\": \"^27.3.1\",\n        \"prettier\": \"^2.8.4\",\n        \"ts-jest\": \"27.0.7\",\n        \"typescript\": \"4.4.4\"\n    },\n    \"engines\": {\n        \"node\": \">=10\"\n    }\n}\n/dist/index.js%\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.lilconfigSync = exports.lilconfig = exports.defaultLoaders = void 0;\nconst path = require(\"path\");\nconst fs = require(\"fs\");\nconst os = require(\"os\");\nconst fsReadFileAsync = fs.promises.readFile;\nfunction getDefaultSearchPlaces(name) {\n    return [\n        'package.json',\n        `.${name}rc.json`,\n        `.${name}rc.js`,\n        `.${name}rc.cjs`,\n        `.config/${name}rc`,\n        `.config/${name}rc.json`,\n        `.config/${name}rc.js`,\n        `.config/${name}rc.cjs`,\n        `${name}.config.js`,\n        `${name}.config.cjs`,\n    ];\n}\nfunction getSearchPaths(startDir, stopDir) {\n    return startDir\n        .split(path.sep)\n        .reduceRight((acc, _, ind, arr) => {\n        const currentPath = arr.slice(0, ind + 1).join(path.sep);\n        if (!acc.passedStopDir)\n            acc.searchPlaces.push(currentPath || path.sep);\n        if (currentPath === stopDir)\n            acc.passedStopDir = true;\n        return acc;\n    }, { searchPlaces: [], passedStopDir: false }).searchPlaces;\n}\nexports.defaultLoaders = Object.freeze({\n    '.js': require,\n    '.json': require,\n    '.cjs': require,\n    noExt(_, content) {\n        return JSON.parse(content);\n    },\n});\nfunction getExtDesc(ext) {\n    return ext === 'noExt' ? 'files without extensions' : `extension \"${ext}\"`;\n}\nfunction getOptions(name, options = {}) {\n    const conf = {\n        stopDir: os.homedir(),\n        searchPlaces: getDefaultSearchPlaces(name),\n        ignoreEmptySearchPlaces: true,\n        transform: (x) => x,\n        packageProp: [name],\n        ...options,\n        loaders: { ...exports.defaultLoaders, ...options.loaders },\n    };\n    conf.searchPlaces.forEach(place => {\n        const key = path.extname(place) || 'noExt';\n        const loader = conf.loaders[key];\n        if (!loader) {\n            throw new Error(`No loader specified for ${getExtDesc(key)}, so searchPlaces item \"${place}\" is invalid`);\n        }\n        if (typeof loader !== 'function') {\n            throw new Error(`loader for ${getExtDesc(key)} is not a function (type provided: \"${typeof loader}\"), so searchPlaces item \"${place}\" is invalid`);\n        }\n    });\n    return conf;\n}\nfunction getPackageProp(props, obj) {\n    if (typeof props === 'string' && props in obj)\n        return obj[props];\n    return ((Array.isArray(props) ? props : props.split('.')).reduce((acc, prop) => (acc === undefined ? acc : acc[prop]), obj) || null);\n}\nfunction getSearchItems(searchPlaces, searchPaths) {\n    return searchPaths.reduce((acc, searchPath) => {\n        searchPlaces.forEach(sp => acc.push({\n            searchPlace: sp,\n            filepath: path.join(searchPath, sp),\n            loaderKey: path.extname(sp) || 'noExt',\n        }));\n        return acc;\n    }, []);\n}\nfunction validateFilePath(filepath) {\n    if (!filepath)\n        throw new Error('load must pass a non-empty string');\n}\nfunction validateLoader(loader, ext) {\n    if (!loader)\n        throw new Error(`No loader specified for extension \"${ext}\"`);\n    if (typeof loader !== 'function')\n        throw new Error('loader is not a function');\n}\nfunction lilconfig(name, options) {\n    const { ignoreEmptySearchPlaces, loaders, packageProp, searchPlaces, stopDir, transform, } = getOptions(name, options);\n    return {\n        async search(searchFrom = process.cwd()) {\n            const searchPaths = getSearchPaths(searchFrom, stopDir);\n            const result = {\n                config: null,\n                filepath: '',\n            };\n            const searchItems = getSearchItems(searchPlaces, searchPaths);\n            for (const { searchPlace, filepath, loaderKey } of searchItems) {\n                try {\n                    await fs.promises.access(filepath);\n                }\n                catch (_a) {\n                    continue;\n                }\n                const content = String(await fsReadFileAsync(filepath));\n                const loader = loaders[loaderKey];\n                if (searchPlace === 'package.json') {\n                    const pkg = await loader(filepath, content);\n                    const maybeConfig = getPackageProp(packageProp, pkg);\n                    if (maybeConfig != null) {\n                        result.config = maybeConfig;\n                        result.filepath = filepath;\n                        break;\n                    }\n                    continue;\n                }\n                const isEmpty = content.trim() === '';\n                if (isEmpty && ignoreEmptySearchPlaces)\n                    continue;\n                if (isEmpty) {\n                    result.isEmpty = true;\n                    result.config = undefined;\n                }\n                else {\n                    validateLoader(loader, loaderKey);\n                    result.config = await loader(filepath, content);\n                }\n                result.filepath = filepath;\n                break;\n            }\n            if (result.filepath === '' && result.config === null)\n                return transform(null);\n            return transform(result);\n        },\n        async load(filepath) {\n            validateFilePath(filepath);\n            const absPath = path.resolve(process.cwd(), filepath);\n            const { base, ext } = path.parse(absPath);\n            const loaderKey = ext || 'noExt';\n            const loader = loaders[loaderKey];\n            validateLoader(loader, loaderKey);\n            const content = String(await fsReadFileAsync(absPath));\n            if (base === 'package.json') {\n                const pkg = await loader(absPath, content);\n                return transform({\n                    config: getPackageProp(packageProp, pkg),\n                    filepath: absPath,\n                });\n            }\n            const result = {\n                config: null,\n                filepath: absPath,\n            };\n            const isEmpty = content.trim() === '';\n            if (isEmpty && ignoreEmptySearchPlaces)\n                return transform({\n                    config: undefined,\n                    filepath: absPath,\n                    isEmpty: true,\n                });\n            result.config = isEmpty\n                ? undefined\n                : await loader(absPath, content);\n            return transform(isEmpty ? { ...result, isEmpty, config: undefined } : result);\n        },\n    };\n}\nexports.lilconfig = lilconfig;\nfunction lilconfigSync(name, options) {\n    const { ignoreEmptySearchPlaces, loaders, packageProp, searchPlaces, stopDir, transform, } = getOptions(name, options);\n    return {\n        search(searchFrom = process.cwd()) {\n            const searchPaths = getSearchPaths(searchFrom, stopDir);\n            const result = {\n                config: null,\n                filepath: '',\n            };\n            const searchItems = getSearchItems(searchPlaces, searchPaths);\n            for (const { searchPlace, filepath, loaderKey } of searchItems) {\n                try {\n                    fs.accessSync(filepath);\n                }\n                catch (_a) {\n                    continue;\n                }\n                const loader = loaders[loaderKey];\n                const content = String(fs.readFileSync(filepath));\n                if (searchPlace === 'package.json') {\n                    const pkg = loader(filepath, content);\n                    const maybeConfig = getPackageProp(packageProp, pkg);\n                    if (maybeConfig != null) {\n                        result.config = maybeConfig;\n                        result.filepath = filepath;\n                        break;\n                    }\n                    continue;\n                }\n                const isEmpty = content.trim() === '';\n                if (isEmpty && ignoreEmptySearchPlaces)\n                    continue;\n                if (isEmpty) {\n                    result.isEmpty = true;\n                    result.config = undefined;\n                }\n                else {\n                    validateLoader(loader, loaderKey);\n                    result.config = loader(filepath, content);\n                }\n                result.filepath = filepath;\n                break;\n            }\n            if (result.filepath === '' && result.config === null)\n                return transform(null);\n            return transform(result);\n        },\n        load(filepath) {\n            validateFilePath(filepath);\n            const absPath = path.resolve(process.cwd(), filepath);\n            const { base, ext } = path.parse(absPath);\n            const loaderKey = ext || 'noExt';\n            const loader = loaders[loaderKey];\n            validateLoader(loader, loaderKey);\n            const content = String(fs.readFileSync(absPath));\n            if (base === 'package.json') {\n                const pkg = loader(absPath, content);\n                return transform({\n                    config: getPackageProp(packageProp, pkg),\n                    filepath: absPath,\n                });\n            }\n            const result = {\n                config: null,\n                filepath: absPath,\n            };\n            const isEmpty = content.trim() === '';\n            if (isEmpty && ignoreEmptySearchPlaces)\n                return transform({\n                    filepath: absPath,\n                    config: undefined,\n                    isEmpty: true,\n                });\n            result.config = isEmpty ? undefined : loader(absPath, content);\n            return transform(isEmpty ? { ...result, isEmpty, config: undefined } : result);\n        },\n    };\n}\nexports.lilconfigSync = lilconfigSync;\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/bGlua2lmeS1pdEA0LjAuMQ==",
    "content": "/README.md\u0018linkify-it\n==========\n\n[![CI](https://github.com/markdown-it/linkify-it/actions/workflows/ci.yml/badge.svg)](https://github.com/markdown-it/linkify-it/actions/workflows/ci.yml)\n[![NPM version](https://img.shields.io/npm/v/linkify-it.svg?style=flat)](https://www.npmjs.org/package/linkify-it)\n[![Coverage Status](https://img.shields.io/coveralls/markdown-it/linkify-it/master.svg?style=flat)](https://coveralls.io/r/markdown-it/linkify-it?branch=master)\n[![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/markdown-it/linkify-it)\n\n> Links recognition library with FULL unicode support.\n> Focused on high quality link patterns detection in plain text.\n\n__[Demo](http://markdown-it.github.io/linkify-it/)__\n\nWhy it's awesome:\n\n- Full unicode support, _with astral characters_!\n- International domains support.\n- Allows rules extension & custom normalizers.\n\n\nInstall\n-------\n\n```bash\nnpm install linkify-it --save\n```\n\nBrowserification is also supported.\n\n\nUsage examples\n--------------\n\n##### Example 1\n\n```js\nvar linkify = require('linkify-it')();\n\n// Reload full tlds list & add unofficial `.onion` domain.\nlinkify\n  .tlds(require('tlds'))          // Reload with full tlds list\n  .tlds('onion', true)            // Add unofficial `.onion` domain\n  .add('git:', 'http:')           // Add `git:` protocol as \"alias\"\n  .add('ftp:', null)              // Disable `ftp:` protocol\n  .set({ fuzzyIP: true });        // Enable IPs in fuzzy links (without schema)\n\nconsole.log(linkify.test('Site github.com!'));  // true\n\nconsole.log(linkify.match('Site github.com!')); // [ {\n                                                //   schema: \"\",\n                                                //   index: 5,\n                                                //   lastIndex: 15,\n                                                //   raw: \"github.com\",\n                                                //   text: \"github.com\",\n                                                //   url: \"http://github.com\",\n                                                // } ]\n```\n\n##### Example 2. Add twitter mentions handler\n\n```js\nlinkify.add('@', {\n  validate: function (text, pos, self) {\n    var tail = text.slice(pos);\n\n    if (!self.re.twitter) {\n      self.re.twitter =  new RegExp(\n        '^([a-zA-Z0-9_]){1,15}(?!_)(?=$|' + self.re.src_ZPCc + ')'\n      );\n    }\n    if (self.re.twitter.test(tail)) {\n      // Linkifier allows punctuation chars before prefix,\n      // but we additionally disable `@` (\"@@mention\" is invalid)\n      if (pos >= 2 && tail[pos - 2] === '@') {\n        return false;\n      }\n      return tail.match(self.re.twitter)[0].length;\n    }\n    return 0;\n  },\n  normalize: function (match) {\n    match.url = 'https://twitter.com/' + match.url.replace(/^@/, '');\n  }\n});\n```\n\n\nAPI\n---\n\n__[API documentation](http://markdown-it.github.io/linkify-it/doc)__\n\n### new LinkifyIt(schemas, options)\n\nCreates new linkifier instance with optional additional schemas.\nCan be called without `new` keyword for convenience.\n\nBy default understands:\n\n- `http(s)://...` , `ftp://...`, `mailto:...` & `//...` links\n- \"fuzzy\" links and emails (google.com, foo@bar.com).\n\n`schemas` is an object, where each key/value describes protocol/rule:\n\n- __key__ - link prefix (usually, protocol name with `:` at the end, `skype:`\n  for example). `linkify-it` makes sure that prefix is not preceded with\n  alphanumeric char.\n- __value__ - rule to check tail after link prefix\n  - _String_ - just alias to existing rule\n  - _Object_\n    - _validate_ - either a `RegExp` (start with `^`, and don't include the\n      link prefix itself), or a validator function which, given arguments\n      _text_, _pos_, and _self_, returns the length of a match in _text_\n      starting at index _pos_.  _pos_ is the index right after the link prefix.\n      _self_ can be used to access the linkify object to cache data.\n    - _normalize_ - optional function to normalize text & url of matched result\n      (for example, for twitter mentions).\n\n`options`:\n\n- __fuzzyLink__ - recognize URL-s without `http(s)://` head. Default `true`.\n- __fuzzyIP__ - allow IPs in fuzzy links above. Can conflict with some texts\n  like version numbers. Default `false`.\n- __fuzzyEmail__ - recognize emails without `mailto:` prefix. Default `true`.\n- __---__ - set `true` to terminate link with `---` (if it's considered as long dash).\n\n\n### .test(text)\n\nSearches linkifiable pattern and returns `true` on success or `false` on fail.\n\n\n### .pretest(text)\n\nQuick check if link MAY BE can exist. Can be used to optimize more expensive\n`.test()` calls. Return `false` if link can not be found, `true` - if `.test()`\ncall needed to know exactly.\n\n\n### .testSchemaAt(text, name, offset)\n\nSimilar to `.test()` but checks only specific protocol tail exactly at given\nposition. Returns length of found pattern (0 on fail).\n\n\n### .match(text)\n\nReturns `Array` of found link matches or null if nothing found.\n\nEach match has:\n\n- __schema__ - link schema, can be empty for fuzzy links, or `//` for\n  protocol-neutral  links.\n- __index__ - offset of matched text\n- __lastIndex__ - index of next char after mathch end\n- __raw__ - matched text\n- __text__ - normalized text\n- __url__ - link, generated from matched text\n\n\n### .matchAtStart(text)\n\nChecks if a match exists at the start of the string. Returns `Match`\n(see docs for `match(text)`) or null if no URL is at the start.\nDoesn't work with fuzzy links.\n\n\n### .tlds(list[, keepOld])\n\nLoad (or merge) new tlds list. Those are needed for fuzzy links (without schema)\nto avoid false positives. By default:\n\n- 2-letter root zones are ok.\n- biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|рф are ok.\n- encoded (`xn--...`) root zones are ok.\n\nIf that's not enough, you can reload defaults with more detailed zones list.\n\n### .add(key, value)\n\nAdd a new schema to the schemas object.  As described in the constructor\ndefinition, `key` is a link prefix (`skype:`, for example), and `value`\nis a String to alias to another schema, or an Object with `validate` and\noptionally `normalize` definitions.  To disable an existing rule, use\n`.add(key, null)`.\n\n\n### .set(options)\n\nOverride default options. Missed properties will not be changed.\n\n\n## License\n\n[MIT](https://github.com/markdown-it/linkify-it/blob/master/LICENSE)\n/LICENSE\u0004\"Copyright (c) 2015 Vitaly Puzrin.\n\nPermission is hereby granted, free of charge, to any person\nobtaining a copy of this software and associated documentation\nfiles (the \"Software\"), to deal in the Software without\nrestriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the\nSoftware is furnished to do so, subject to the following\nconditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\nOF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\nHOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\nWHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\nFROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\nOTHER DEALINGS IN THE SOFTWARE.\n/package.json\u0004{\n  \"name\": \"linkify-it\",\n  \"version\": \"4.0.1\",\n  \"description\": \"Links recognition library with FULL unicode support\",\n  \"keywords\": [\n    \"linkify\",\n    \"linkifier\",\n    \"autolink\",\n    \"autolinker\"\n  ],\n  \"repository\": \"markdown-it/linkify-it\",\n  \"files\": [\n    \"index.js\",\n    \"lib/\"\n  ],\n  \"license\": \"MIT\",\n  \"scripts\": {\n    \"lint\": \"eslint .\",\n    \"test\": \"npm run lint && nyc mocha\",\n    \"coverage\": \"npm run test && nyc report --reporter html\",\n    \"report-coveralls\": \"nyc --reporter=lcov mocha\",\n    \"demo\": \"npm run lint && node support/build_demo.js\",\n    \"doc\": \"node support/build_doc.js\",\n    \"gh-pages\": \"npm run demo && npm run doc && shx cp -R doc/ demo/ && gh-pages -d demo -f\",\n    \"prepublishOnly\": \"npm run gh-pages\"\n  },\n  \"dependencies\": {\n    \"uc.micro\": \"^1.0.1\"\n  },\n  \"devDependencies\": {\n    \"ansi\": \"^0.3.0\",\n    \"autoprefixer-stylus\": \"^1.0.0\",\n    \"benchmark\": \"^2.1.0\",\n    \"browserify\": \"^17.0.0\",\n    \"eslint\": \"^7.0.0\",\n    \"gh-pages\": \"^3.2.3\",\n    \"mdurl\": \"^1.0.0\",\n    \"mocha\": \"^9.1.2\",\n    \"ndoc\": \"^6.0.0\",\n    \"nyc\": \"^15.0.1\",\n    \"pug-cli\": \"^1.0.0-alpha6\",\n    \"shelljs\": \"^0.8.4\",\n    \"shx\": \"^0.3.2\",\n    \"stylus\": \"~0.55.0\",\n    \"tlds\": \"^1.166.0\"\n  }\n}\n/lib/re.js\u0017'use strict';\n\n\nmodule.exports = function (opts) {\n  var re = {};\n  opts = opts || {};\n\n  // Use direct extract instead of `regenerate` to reduse browserified size\n  re.src_Any = require('uc.micro/properties/Any/regex').source;\n  re.src_Cc  = require('uc.micro/categories/Cc/regex').source;\n  re.src_Z   = require('uc.micro/categories/Z/regex').source;\n  re.src_P   = require('uc.micro/categories/P/regex').source;\n\n  // \\p{\\Z\\P\\Cc\\CF} (white spaces + control + format + punctuation)\n  re.src_ZPCc = [ re.src_Z, re.src_P, re.src_Cc ].join('|');\n\n  // \\p{\\Z\\Cc} (white spaces + control)\n  re.src_ZCc = [ re.src_Z, re.src_Cc ].join('|');\n\n  // Experimental. List of chars, completely prohibited in links\n  // because can separate it from other part of text\n  var text_separators = '[><\\uff5c]';\n\n  // All possible word characters (everything without punctuation, spaces & controls)\n  // Defined via punctuation & spaces to save space\n  // Should be something like \\p{\\L\\N\\S\\M} (\\w but without `_`)\n  re.src_pseudo_letter       = '(?:(?!' + text_separators + '|' + re.src_ZPCc + ')' + re.src_Any + ')';\n  // The same as abothe but without [0-9]\n  // var src_pseudo_letter_non_d = '(?:(?![0-9]|' + src_ZPCc + ')' + src_Any + ')';\n\n  ////////////////////////////////////////////////////////////////////////////////\n\n  re.src_ip4 =\n\n    '(?:(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)';\n\n  // Prohibit any of \"@/[]()\" in user/pass to avoid wrong domain fetch.\n  re.src_auth    = '(?:(?:(?!' + re.src_ZCc + '|[@/\\\\[\\\\]()]).)+@)?';\n\n  re.src_port =\n\n    '(?::(?:6(?:[0-4]\\\\d{3}|5(?:[0-4]\\\\d{2}|5(?:[0-2]\\\\d|3[0-5])))|[1-5]?\\\\d{1,4}))?';\n\n  re.src_host_terminator =\n\n    '(?=$|' + text_separators + '|' + re.src_ZPCc + ')' +\n    '(?!' + (opts['---'] ? '-(?!--)|' : '-|') + '_|:\\\\d|\\\\.-|\\\\.(?!$|' + re.src_ZPCc + '))';\n\n  re.src_path =\n\n    '(?:' +\n      '[/?#]' +\n        '(?:' +\n          '(?!' + re.src_ZCc + '|' + text_separators + '|[()[\\\\]{}.,\"\\'?!\\\\-;]).|' +\n          '\\\\[(?:(?!' + re.src_ZCc + '|\\\\]).)*\\\\]|' +\n          '\\\\((?:(?!' + re.src_ZCc + '|[)]).)*\\\\)|' +\n          '\\\\{(?:(?!' + re.src_ZCc + '|[}]).)*\\\\}|' +\n          '\\\\\"(?:(?!' + re.src_ZCc + '|[\"]).)+\\\\\"|' +\n          \"\\\\'(?:(?!\" + re.src_ZCc + \"|[']).)+\\\\'|\" +\n          \"\\\\'(?=\" + re.src_pseudo_letter + '|[-])|' +  // allow `I'm_king` if no pair found\n          '\\\\.{2,}[a-zA-Z0-9%/&]|' + // google has many dots in \"google search\" links (#66, #81).\n                                     // github has ... in commit range links,\n                                     // Restrict to\n                                     // - english\n                                     // - percent-encoded\n                                     // - parts of file path\n                                     // - params separator\n                                     // until more examples found.\n          '\\\\.(?!' + re.src_ZCc + '|[.]|$)|' +\n          (opts['---'] ?\n            '\\\\-(?!--(?:[^-]|$))(?:-*)|' // `---` => long dash, terminate\n            :\n            '\\\\-+|'\n          ) +\n          ',(?!' + re.src_ZCc + '|$)|' +       // allow `,,,` in paths\n          ';(?!' + re.src_ZCc + '|$)|' +       // allow `;` if not followed by space-like char\n          '\\\\!+(?!' + re.src_ZCc + '|[!]|$)|' +  // allow `!!!` in paths, but not at the end\n          '\\\\?(?!' + re.src_ZCc + '|[?]|$)' +\n        ')+' +\n      '|\\\\/' +\n    ')?';\n\n  // Allow anything in markdown spec, forbid quote (\") at the first position\n  // because emails enclosed in quotes are far more common\n  re.src_email_name =\n\n    '[\\\\-;:&=\\\\+\\\\$,\\\\.a-zA-Z0-9_][\\\\-;:&=\\\\+\\\\$,\\\\\"\\\\.a-zA-Z0-9_]*';\n\n  re.src_xn =\n\n    'xn--[a-z0-9\\\\-]{1,59}';\n\n  // More to read about domain names\n  // http://serverfault.com/questions/638260/\n\n  re.src_domain_root =\n\n    // Allow letters & digits (http://test1)\n    '(?:' +\n      re.src_xn +\n      '|' +\n      re.src_pseudo_letter + '{1,63}' +\n    ')';\n\n  re.src_domain =\n\n    '(?:' +\n      re.src_xn +\n      '|' +\n      '(?:' + re.src_pseudo_letter + ')' +\n      '|' +\n      '(?:' + re.src_pseudo_letter + '(?:-|' + re.src_pseudo_letter + '){0,61}' + re.src_pseudo_letter + ')' +\n    ')';\n\n  re.src_host =\n\n    '(?:' +\n    // Don't need IP check, because digits are already allowed in normal domain names\n    //   src_ip4 +\n    // '|' +\n      '(?:(?:(?:' + re.src_domain + ')\\\\.)*' + re.src_domain/*_root*/ + ')' +\n    ')';\n\n  re.tpl_host_fuzzy =\n\n    '(?:' +\n      re.src_ip4 +\n    '|' +\n      '(?:(?:(?:' + re.src_domain + ')\\\\.)+(?:%TLDS%))' +\n    ')';\n\n  re.tpl_host_no_ip_fuzzy =\n\n    '(?:(?:(?:' + re.src_domain + ')\\\\.)+(?:%TLDS%))';\n\n  re.src_host_strict =\n\n    re.src_host + re.src_host_terminator;\n\n  re.tpl_host_fuzzy_strict =\n\n    re.tpl_host_fuzzy + re.src_host_terminator;\n\n  re.src_host_port_strict =\n\n    re.src_host + re.src_port + re.src_host_terminator;\n\n  re.tpl_host_port_fuzzy_strict =\n\n    re.tpl_host_fuzzy + re.src_port + re.src_host_terminator;\n\n  re.tpl_host_port_no_ip_fuzzy_strict =\n\n    re.tpl_host_no_ip_fuzzy + re.src_port + re.src_host_terminator;\n\n\n  ////////////////////////////////////////////////////////////////////////////////\n  // Main rules\n\n  // Rude test fuzzy links by host, for quick deny\n  re.tpl_host_fuzzy_test =\n\n    'localhost|www\\\\.|\\\\.\\\\d{1,3}\\\\.|(?:\\\\.(?:%TLDS%)(?:' + re.src_ZPCc + '|>|$))';\n\n  re.tpl_email_fuzzy =\n\n      '(^|' + text_separators + '|\"|\\\\(|' + re.src_ZCc + ')' +\n      '(' + re.src_email_name + '@' + re.tpl_host_fuzzy_strict + ')';\n\n  re.tpl_link_fuzzy =\n      // Fuzzy link can't be prepended with .:/\\- and non punctuation.\n      // but can start with > (markdown blockquote)\n      '(^|(?![.:/\\\\-_@])(?:[$+<=>^`|\\uff5c]|' + re.src_ZPCc + '))' +\n      '((?![$+<=>^`|\\uff5c])' + re.tpl_host_port_fuzzy_strict + re.src_path + ')';\n\n  re.tpl_link_no_ip_fuzzy =\n      // Fuzzy link can't be prepended with .:/\\- and non punctuation.\n      // but can start with > (markdown blockquote)\n      '(^|(?![.:/\\\\-_@])(?:[$+<=>^`|\\uff5c]|' + re.src_ZPCc + '))' +\n      '((?![$+<=>^`|\\uff5c])' + re.tpl_host_port_no_ip_fuzzy_strict + re.src_path + ')';\n\n  return re;\n};\n/index.jsG'use strict';\n\n\n////////////////////////////////////////////////////////////////////////////////\n// Helpers\n\n// Merge objects\n//\nfunction assign(obj /*from1, from2, from3, ...*/) {\n  var sources = Array.prototype.slice.call(arguments, 1);\n\n  sources.forEach(function (source) {\n    if (!source) { return; }\n\n    Object.keys(source).forEach(function (key) {\n      obj[key] = source[key];\n    });\n  });\n\n  return obj;\n}\n\nfunction _class(obj) { return Object.prototype.toString.call(obj); }\nfunction isString(obj) { return _class(obj) === '[object String]'; }\nfunction isObject(obj) { return _class(obj) === '[object Object]'; }\nfunction isRegExp(obj) { return _class(obj) === '[object RegExp]'; }\nfunction isFunction(obj) { return _class(obj) === '[object Function]'; }\n\n\nfunction escapeRE(str) { return str.replace(/[.?*+^$[\\]\\\\(){}|-]/g, '\\\\$&'); }\n\n////////////////////////////////////////////////////////////////////////////////\n\n\nvar defaultOptions = {\n  fuzzyLink: true,\n  fuzzyEmail: true,\n  fuzzyIP: false\n};\n\n\nfunction isOptionsObj(obj) {\n  return Object.keys(obj || {}).reduce(function (acc, k) {\n    return acc || defaultOptions.hasOwnProperty(k);\n  }, false);\n}\n\n\nvar defaultSchemas = {\n  'http:': {\n    validate: function (text, pos, self) {\n      var tail = text.slice(pos);\n\n      if (!self.re.http) {\n        // compile lazily, because \"host\"-containing variables can change on tlds update.\n        self.re.http =  new RegExp(\n          '^\\\\/\\\\/' + self.re.src_auth + self.re.src_host_port_strict + self.re.src_path, 'i'\n        );\n      }\n      if (self.re.http.test(tail)) {\n        return tail.match(self.re.http)[0].length;\n      }\n      return 0;\n    }\n  },\n  'https:':  'http:',\n  'ftp:':    'http:',\n  '//':      {\n    validate: function (text, pos, self) {\n      var tail = text.slice(pos);\n\n      if (!self.re.no_http) {\n      // compile lazily, because \"host\"-containing variables can change on tlds update.\n        self.re.no_http =  new RegExp(\n          '^' +\n          self.re.src_auth +\n          // Don't allow single-level domains, because of false positives like '//test'\n          // with code comments\n          '(?:localhost|(?:(?:' + self.re.src_domain + ')\\\\.)+' + self.re.src_domain_root + ')' +\n          self.re.src_port +\n          self.re.src_host_terminator +\n          self.re.src_path,\n\n          'i'\n        );\n      }\n\n      if (self.re.no_http.test(tail)) {\n        // should not be `://` & `///`, that protects from errors in protocol name\n        if (pos >= 3 && text[pos - 3] === ':') { return 0; }\n        if (pos >= 3 && text[pos - 3] === '/') { return 0; }\n        return tail.match(self.re.no_http)[0].length;\n      }\n      return 0;\n    }\n  },\n  'mailto:': {\n    validate: function (text, pos, self) {\n      var tail = text.slice(pos);\n\n      if (!self.re.mailto) {\n        self.re.mailto =  new RegExp(\n          '^' + self.re.src_email_name + '@' + self.re.src_host_strict, 'i'\n        );\n      }\n      if (self.re.mailto.test(tail)) {\n        return tail.match(self.re.mailto)[0].length;\n      }\n      return 0;\n    }\n  }\n};\n\n/*eslint-disable max-len*/\n\n// RE pattern for 2-character tlds (autogenerated by ./support/tlds_2char_gen.js)\nvar tlds_2ch_src_re = 'a[cdefgilmnoqrstuwxz]|b[abdefghijmnorstvwyz]|c[acdfghiklmnoruvwxyz]|d[ejkmoz]|e[cegrstu]|f[ijkmor]|g[abdefghilmnpqrstuwy]|h[kmnrtu]|i[delmnoqrst]|j[emop]|k[eghimnprwyz]|l[abcikrstuvy]|m[acdeghklmnopqrstuvwxyz]|n[acefgilopruz]|om|p[aefghklmnrstwy]|qa|r[eosuw]|s[abcdeghijklmnortuvxyz]|t[cdfghjklmnortvwz]|u[agksyz]|v[aceginu]|w[fs]|y[et]|z[amw]';\n\n// DON'T try to make PRs with changes. Extend TLDs with LinkifyIt.tlds() instead\nvar tlds_default = 'biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|рф'.split('|');\n\n/*eslint-enable max-len*/\n\n////////////////////////////////////////////////////////////////////////////////\n\nfunction resetScanCache(self) {\n  self.__index__ = -1;\n  self.__text_cache__   = '';\n}\n\nfunction createValidator(re) {\n  return function (text, pos) {\n    var tail = text.slice(pos);\n\n    if (re.test(tail)) {\n      return tail.match(re)[0].length;\n    }\n    return 0;\n  };\n}\n\nfunction createNormalizer() {\n  return function (match, self) {\n    self.normalize(match);\n  };\n}\n\n// Schemas compiler. Build regexps.\n//\nfunction compile(self) {\n\n  // Load & clone RE patterns.\n  var re = self.re = require('./lib/re')(self.__opts__);\n\n  // Define dynamic patterns\n  var tlds = self.__tlds__.slice();\n\n  self.onCompile();\n\n  if (!self.__tlds_replaced__) {\n    tlds.push(tlds_2ch_src_re);\n  }\n  tlds.push(re.src_xn);\n\n  re.src_tlds = tlds.join('|');\n\n  function untpl(tpl) { return tpl.replace('%TLDS%', re.src_tlds); }\n\n  re.email_fuzzy      = RegExp(untpl(re.tpl_email_fuzzy), 'i');\n  re.link_fuzzy       = RegExp(untpl(re.tpl_link_fuzzy), 'i');\n  re.link_no_ip_fuzzy = RegExp(untpl(re.tpl_link_no_ip_fuzzy), 'i');\n  re.host_fuzzy_test  = RegExp(untpl(re.tpl_host_fuzzy_test), 'i');\n\n  //\n  // Compile each schema\n  //\n\n  var aliases = [];\n\n  self.__compiled__ = {}; // Reset compiled data\n\n  function schemaError(name, val) {\n    throw new Error('(LinkifyIt) Invalid schema \"' + name + '\": ' + val);\n  }\n\n  Object.keys(self.__schemas__).forEach(function (name) {\n    var val = self.__schemas__[name];\n\n    // skip disabled methods\n    if (val === null) { return; }\n\n    var compiled = { validate: null, link: null };\n\n    self.__compiled__[name] = compiled;\n\n    if (isObject(val)) {\n      if (isRegExp(val.validate)) {\n        compiled.validate = createValidator(val.validate);\n      } else if (isFunction(val.validate)) {\n        compiled.validate = val.validate;\n      } else {\n        schemaError(name, val);\n      }\n\n      if (isFunction(val.normalize)) {\n        compiled.normalize = val.normalize;\n      } else if (!val.normalize) {\n        compiled.normalize = createNormalizer();\n      } else {\n        schemaError(name, val);\n      }\n\n      return;\n    }\n\n    if (isString(val)) {\n      aliases.push(name);\n      return;\n    }\n\n    schemaError(name, val);\n  });\n\n  //\n  // Compile postponed aliases\n  //\n\n  aliases.forEach(function (alias) {\n    if (!self.__compiled__[self.__schemas__[alias]]) {\n      // Silently fail on missed schemas to avoid errons on disable.\n      // schemaError(alias, self.__schemas__[alias]);\n      return;\n    }\n\n    self.__compiled__[alias].validate =\n      self.__compiled__[self.__schemas__[alias]].validate;\n    self.__compiled__[alias].normalize =\n      self.__compiled__[self.__schemas__[alias]].normalize;\n  });\n\n  //\n  // Fake record for guessed links\n  //\n  self.__compiled__[''] = { validate: null, normalize: createNormalizer() };\n\n  //\n  // Build schema condition\n  //\n  var slist = Object.keys(self.__compiled__)\n                      .filter(function (name) {\n                        // Filter disabled & fake schemas\n                        return name.length > 0 && self.__compiled__[name];\n                      })\n                      .map(escapeRE)\n                      .join('|');\n  // (?!_) cause 1.5x slowdown\n  self.re.schema_test     = RegExp('(^|(?!_)(?:[><\\uff5c]|' + re.src_ZPCc + '))(' + slist + ')', 'i');\n  self.re.schema_search   = RegExp('(^|(?!_)(?:[><\\uff5c]|' + re.src_ZPCc + '))(' + slist + ')', 'ig');\n  self.re.schema_at_start = RegExp('^' + self.re.schema_search.source, 'i');\n\n  self.re.pretest = RegExp(\n    '(' + self.re.schema_test.source + ')|(' + self.re.host_fuzzy_test.source + ')|@',\n    'i'\n  );\n\n  //\n  // Cleanup\n  //\n\n  resetScanCache(self);\n}\n\n/**\n * class Match\n *\n * Match result. Single element of array, returned by [[LinkifyIt#match]]\n **/\nfunction Match(self, shift) {\n  var start = self.__index__,\n      end   = self.__last_index__,\n      text  = self.__text_cache__.slice(start, end);\n\n  /**\n   * Match#schema -> String\n   *\n   * Prefix (protocol) for matched string.\n   **/\n  this.schema    = self.__schema__.toLowerCase();\n  /**\n   * Match#index -> Number\n   *\n   * First position of matched string.\n   **/\n  this.index     = start + shift;\n  /**\n   * Match#lastIndex -> Number\n   *\n   * Next position after matched string.\n   **/\n  this.lastIndex = end + shift;\n  /**\n   * Match#raw -> String\n   *\n   * Matched string.\n   **/\n  this.raw       = text;\n  /**\n   * Match#text -> String\n   *\n   * Notmalized text of matched string.\n   **/\n  this.text      = text;\n  /**\n   * Match#url -> String\n   *\n   * Normalized url of matched string.\n   **/\n  this.url       = text;\n}\n\nfunction createMatch(self, shift) {\n  var match = new Match(self, shift);\n\n  self.__compiled__[match.schema].normalize(match, self);\n\n  return match;\n}\n\n\n/**\n * class LinkifyIt\n **/\n\n/**\n * new LinkifyIt(schemas, options)\n * - schemas (Object): Optional. Additional schemas to validate (prefix/validator)\n * - options (Object): { fuzzyLink|fuzzyEmail|fuzzyIP: true|false }\n *\n * Creates new linkifier instance with optional additional schemas.\n * Can be called without `new` keyword for convenience.\n *\n * By default understands:\n *\n * - `http(s)://...` , `ftp://...`, `mailto:...` & `//...` links\n * - \"fuzzy\" links and emails (example.com, foo@bar.com).\n *\n * `schemas` is an object, where each key/value describes protocol/rule:\n *\n * - __key__ - link prefix (usually, protocol name with `:` at the end, `skype:`\n *   for example). `linkify-it` makes shure that prefix is not preceeded with\n *   alphanumeric char and symbols. Only whitespaces and punctuation allowed.\n * - __value__ - rule to check tail after link prefix\n *   - _String_ - just alias to existing rule\n *   - _Object_\n *     - _validate_ - validator function (should return matched length on success),\n *       or `RegExp`.\n *     - _normalize_ - optional function to normalize text & url of matched result\n *       (for example, for @twitter mentions).\n *\n * `options`:\n *\n * - __fuzzyLink__ - recognige URL-s without `http(s):` prefix. Default `true`.\n * - __fuzzyIP__ - allow IPs in fuzzy links above. Can conflict with some texts\n *   like version numbers. Default `false`.\n * - __fuzzyEmail__ - recognize emails without `mailto:` prefix.\n *\n **/\nfunction LinkifyIt(schemas, options) {\n  if (!(this instanceof LinkifyIt)) {\n    return new LinkifyIt(schemas, options);\n  }\n\n  if (!options) {\n    if (isOptionsObj(schemas)) {\n      options = schemas;\n      schemas = {};\n    }\n  }\n\n  this.__opts__           = assign({}, defaultOptions, options);\n\n  // Cache last tested result. Used to skip repeating steps on next `match` call.\n  this.__index__          = -1;\n  this.__last_index__     = -1; // Next scan position\n  this.__schema__         = '';\n  this.__text_cache__     = '';\n\n  this.__schemas__        = assign({}, defaultSchemas, schemas);\n  this.__compiled__       = {};\n\n  this.__tlds__           = tlds_default;\n  this.__tlds_replaced__  = false;\n\n  this.re = {};\n\n  compile(this);\n}\n\n\n/** chainable\n * LinkifyIt#add(schema, definition)\n * - schema (String): rule name (fixed pattern prefix)\n * - definition (String|RegExp|Object): schema definition\n *\n * Add new rule definition. See constructor description for details.\n **/\nLinkifyIt.prototype.add = function add(schema, definition) {\n  this.__schemas__[schema] = definition;\n  compile(this);\n  return this;\n};\n\n\n/** chainable\n * LinkifyIt#set(options)\n * - options (Object): { fuzzyLink|fuzzyEmail|fuzzyIP: true|false }\n *\n * Set recognition options for links without schema.\n **/\nLinkifyIt.prototype.set = function set(options) {\n  this.__opts__ = assign(this.__opts__, options);\n  return this;\n};\n\n\n/**\n * LinkifyIt#test(text) -> Boolean\n *\n * Searches linkifiable pattern and returns `true` on success or `false` on fail.\n **/\nLinkifyIt.prototype.test = function test(text) {\n  // Reset scan cache\n  this.__text_cache__ = text;\n  this.__index__      = -1;\n\n  if (!text.length) { return false; }\n\n  var m, ml, me, len, shift, next, re, tld_pos, at_pos;\n\n  // try to scan for link with schema - that's the most simple rule\n  if (this.re.schema_test.test(text)) {\n    re = this.re.schema_search;\n    re.lastIndex = 0;\n    while ((m = re.exec(text)) !== null) {\n      len = this.testSchemaAt(text, m[2], re.lastIndex);\n      if (len) {\n        this.__schema__     = m[2];\n        this.__index__      = m.index + m[1].length;\n        this.__last_index__ = m.index + m[0].length + len;\n        break;\n      }\n    }\n  }\n\n  if (this.__opts__.fuzzyLink && this.__compiled__['http:']) {\n    // guess schemaless links\n    tld_pos = text.search(this.re.host_fuzzy_test);\n    if (tld_pos >= 0) {\n      // if tld is located after found link - no need to check fuzzy pattern\n      if (this.__index__ < 0 || tld_pos < this.__index__) {\n        if ((ml = text.match(this.__opts__.fuzzyIP ? this.re.link_fuzzy : this.re.link_no_ip_fuzzy)) !== null) {\n\n          shift = ml.index + ml[1].length;\n\n          if (this.__index__ < 0 || shift < this.__index__) {\n            this.__schema__     = '';\n            this.__index__      = shift;\n            this.__last_index__ = ml.index + ml[0].length;\n          }\n        }\n      }\n    }\n  }\n\n  if (this.__opts__.fuzzyEmail && this.__compiled__['mailto:']) {\n    // guess schemaless emails\n    at_pos = text.indexOf('@');\n    if (at_pos >= 0) {\n      // We can't skip this check, because this cases are possible:\n      // 192.168.1.1@gmail.com, my.in@example.com\n      if ((me = text.match(this.re.email_fuzzy)) !== null) {\n\n        shift = me.index + me[1].length;\n        next  = me.index + me[0].length;\n\n        if (this.__index__ < 0 || shift < this.__index__ ||\n            (shift === this.__index__ && next > this.__last_index__)) {\n          this.__schema__     = 'mailto:';\n          this.__index__      = shift;\n          this.__last_index__ = next;\n        }\n      }\n    }\n  }\n\n  return this.__index__ >= 0;\n};\n\n\n/**\n * LinkifyIt#pretest(text) -> Boolean\n *\n * Very quick check, that can give false positives. Returns true if link MAY BE\n * can exists. Can be used for speed optimization, when you need to check that\n * link NOT exists.\n **/\nLinkifyIt.prototype.pretest = function pretest(text) {\n  return this.re.pretest.test(text);\n};\n\n\n/**\n * LinkifyIt#testSchemaAt(text, name, position) -> Number\n * - text (String): text to scan\n * - name (String): rule (schema) name\n * - position (Number): text offset to check from\n *\n * Similar to [[LinkifyIt#test]] but checks only specific protocol tail exactly\n * at given position. Returns length of found pattern (0 on fail).\n **/\nLinkifyIt.prototype.testSchemaAt = function testSchemaAt(text, schema, pos) {\n  // If not supported schema check requested - terminate\n  if (!this.__compiled__[schema.toLowerCase()]) {\n    return 0;\n  }\n  return this.__compiled__[schema.toLowerCase()].validate(text, pos, this);\n};\n\n\n/**\n * LinkifyIt#match(text) -> Array|null\n *\n * Returns array of found link descriptions or `null` on fail. We strongly\n * recommend to use [[LinkifyIt#test]] first, for best speed.\n *\n * ##### Result match description\n *\n * - __schema__ - link schema, can be empty for fuzzy links, or `//` for\n *   protocol-neutral  links.\n * - __index__ - offset of matched text\n * - __lastIndex__ - index of next char after mathch end\n * - __raw__ - matched text\n * - __text__ - normalized text\n * - __url__ - link, generated from matched text\n **/\nLinkifyIt.prototype.match = function match(text) {\n  var shift = 0, result = [];\n\n  // Try to take previous element from cache, if .test() called before\n  if (this.__index__ >= 0 && this.__text_cache__ === text) {\n    result.push(createMatch(this, shift));\n    shift = this.__last_index__;\n  }\n\n  // Cut head if cache was used\n  var tail = shift ? text.slice(shift) : text;\n\n  // Scan string until end reached\n  while (this.test(tail)) {\n    result.push(createMatch(this, shift));\n\n    tail = tail.slice(this.__last_index__);\n    shift += this.__last_index__;\n  }\n\n  if (result.length) {\n    return result;\n  }\n\n  return null;\n};\n\n\n/**\n * LinkifyIt#matchAtStart(text) -> Match|null\n *\n * Returns fully-formed (not fuzzy) link if it starts at the beginning\n * of the string, and null otherwise.\n **/\nLinkifyIt.prototype.matchAtStart = function matchAtStart(text) {\n  // Reset scan cache\n  this.__text_cache__ = text;\n  this.__index__      = -1;\n\n  if (!text.length) return null;\n\n  var m = this.re.schema_at_start.exec(text);\n  if (!m) return null;\n\n  var len = this.testSchemaAt(text, m[2], m[0].length);\n  if (!len) return null;\n\n  this.__schema__     = m[2];\n  this.__index__      = m.index + m[1].length;\n  this.__last_index__ = m.index + m[0].length + len;\n\n  return createMatch(this, 0);\n};\n\n\n/** chainable\n * LinkifyIt#tlds(list [, keepOld]) -> this\n * - list (Array): list of tlds\n * - keepOld (Boolean): merge with current list if `true` (`false` by default)\n *\n * Load (or merge) new tlds list. Those are user for fuzzy links (without prefix)\n * to avoid false positives. By default this algorythm used:\n *\n * - hostname with any 2-letter root zones are ok.\n * - biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|рф\n *   are ok.\n * - encoded (`xn--...`) root zones are ok.\n *\n * If list is replaced, then exact match for 2-chars root zones will be checked.\n **/\nLinkifyIt.prototype.tlds = function tlds(list, keepOld) {\n  list = Array.isArray(list) ? list : [ list ];\n\n  if (!keepOld) {\n    this.__tlds__ = list.slice();\n    this.__tlds_replaced__ = true;\n    compile(this);\n    return this;\n  }\n\n  this.__tlds__ = this.__tlds__.concat(list)\n                                  .sort()\n                                  .filter(function (el, idx, arr) {\n                                    return el !== arr[idx - 1];\n                                  })\n                                  .reverse();\n\n  compile(this);\n  return this;\n};\n\n/**\n * LinkifyIt#normalize(match)\n *\n * Default normalizer (if schema does not define it's own).\n **/\nLinkifyIt.prototype.normalize = function normalize(match) {\n\n  // Do minimal possible changes by default. Need to collect feedback prior\n  // to move forward https://github.com/markdown-it/linkify-it/issues/1\n\n  if (!match.schema) { match.url = 'http://' + match.url; }\n\n  if (match.schema === 'mailto:' && !/^mailto:/i.test(match.url)) {\n    match.url = 'mailto:' + match.url;\n  }\n};\n\n\n/**\n * LinkifyIt#onCompile()\n *\n * Override to modify basic RegExp-s.\n **/\nLinkifyIt.prototype.onCompile = function onCompile() {\n};\n\n\nmodule.exports = LinkifyIt;\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/bHJ1LWNhY2hlQDUuMS4x",
    "content": "/index.js\u001f'use strict'\n\n// A linked list to keep track of recently-used-ness\nconst Yallist = require('yallist')\n\nconst MAX = Symbol('max')\nconst LENGTH = Symbol('length')\nconst LENGTH_CALCULATOR = Symbol('lengthCalculator')\nconst ALLOW_STALE = Symbol('allowStale')\nconst MAX_AGE = Symbol('maxAge')\nconst DISPOSE = Symbol('dispose')\nconst NO_DISPOSE_ON_SET = Symbol('noDisposeOnSet')\nconst LRU_LIST = Symbol('lruList')\nconst CACHE = Symbol('cache')\nconst UPDATE_AGE_ON_GET = Symbol('updateAgeOnGet')\n\nconst naiveLength = () => 1\n\n// lruList is a yallist where the head is the youngest\n// item, and the tail is the oldest.  the list contains the Hit\n// objects as the entries.\n// Each Hit object has a reference to its Yallist.Node.  This\n// never changes.\n//\n// cache is a Map (or PseudoMap) that matches the keys to\n// the Yallist.Node object.\nclass LRUCache {\n  constructor (options) {\n    if (typeof options === 'number')\n      options = { max: options }\n\n    if (!options)\n      options = {}\n\n    if (options.max && (typeof options.max !== 'number' || options.max < 0))\n      throw new TypeError('max must be a non-negative number')\n    // Kind of weird to have a default max of Infinity, but oh well.\n    const max = this[MAX] = options.max || Infinity\n\n    const lc = options.length || naiveLength\n    this[LENGTH_CALCULATOR] = (typeof lc !== 'function') ? naiveLength : lc\n    this[ALLOW_STALE] = options.stale || false\n    if (options.maxAge && typeof options.maxAge !== 'number')\n      throw new TypeError('maxAge must be a number')\n    this[MAX_AGE] = options.maxAge || 0\n    this[DISPOSE] = options.dispose\n    this[NO_DISPOSE_ON_SET] = options.noDisposeOnSet || false\n    this[UPDATE_AGE_ON_GET] = options.updateAgeOnGet || false\n    this.reset()\n  }\n\n  // resize the cache when the max changes.\n  set max (mL) {\n    if (typeof mL !== 'number' || mL < 0)\n      throw new TypeError('max must be a non-negative number')\n\n    this[MAX] = mL || Infinity\n    trim(this)\n  }\n  get max () {\n    return this[MAX]\n  }\n\n  set allowStale (allowStale) {\n    this[ALLOW_STALE] = !!allowStale\n  }\n  get allowStale () {\n    return this[ALLOW_STALE]\n  }\n\n  set maxAge (mA) {\n    if (typeof mA !== 'number')\n      throw new TypeError('maxAge must be a non-negative number')\n\n    this[MAX_AGE] = mA\n    trim(this)\n  }\n  get maxAge () {\n    return this[MAX_AGE]\n  }\n\n  // resize the cache when the lengthCalculator changes.\n  set lengthCalculator (lC) {\n    if (typeof lC !== 'function')\n      lC = naiveLength\n\n    if (lC !== this[LENGTH_CALCULATOR]) {\n      this[LENGTH_CALCULATOR] = lC\n      this[LENGTH] = 0\n      this[LRU_LIST].forEach(hit => {\n        hit.length = this[LENGTH_CALCULATOR](hit.value, hit.key)\n        this[LENGTH] += hit.length\n      })\n    }\n    trim(this)\n  }\n  get lengthCalculator () { return this[LENGTH_CALCULATOR] }\n\n  get length () { return this[LENGTH] }\n  get itemCount () { return this[LRU_LIST].length }\n\n  rforEach (fn, thisp) {\n    thisp = thisp || this\n    for (let walker = this[LRU_LIST].tail; walker !== null;) {\n      const prev = walker.prev\n      forEachStep(this, fn, walker, thisp)\n      walker = prev\n    }\n  }\n\n  forEach (fn, thisp) {\n    thisp = thisp || this\n    for (let walker = this[LRU_LIST].head; walker !== null;) {\n      const next = walker.next\n      forEachStep(this, fn, walker, thisp)\n      walker = next\n    }\n  }\n\n  keys () {\n    return this[LRU_LIST].toArray().map(k => k.key)\n  }\n\n  values () {\n    return this[LRU_LIST].toArray().map(k => k.value)\n  }\n\n  reset () {\n    if (this[DISPOSE] &&\n        this[LRU_LIST] &&\n        this[LRU_LIST].length) {\n      this[LRU_LIST].forEach(hit => this[DISPOSE](hit.key, hit.value))\n    }\n\n    this[CACHE] = new Map() // hash of items by key\n    this[LRU_LIST] = new Yallist() // list of items in order of use recency\n    this[LENGTH] = 0 // length of items in the list\n  }\n\n  dump () {\n    return this[LRU_LIST].map(hit =>\n      isStale(this, hit) ? false : {\n        k: hit.key,\n        v: hit.value,\n        e: hit.now + (hit.maxAge || 0)\n      }).toArray().filter(h => h)\n  }\n\n  dumpLru () {\n    return this[LRU_LIST]\n  }\n\n  set (key, value, maxAge) {\n    maxAge = maxAge || this[MAX_AGE]\n\n    if (maxAge && typeof maxAge !== 'number')\n      throw new TypeError('maxAge must be a number')\n\n    const now = maxAge ? Date.now() : 0\n    const len = this[LENGTH_CALCULATOR](value, key)\n\n    if (this[CACHE].has(key)) {\n      if (len > this[MAX]) {\n        del(this, this[CACHE].get(key))\n        return false\n      }\n\n      const node = this[CACHE].get(key)\n      const item = node.value\n\n      // dispose of the old one before overwriting\n      // split out into 2 ifs for better coverage tracking\n      if (this[DISPOSE]) {\n        if (!this[NO_DISPOSE_ON_SET])\n          this[DISPOSE](key, item.value)\n      }\n\n      item.now = now\n      item.maxAge = maxAge\n      item.value = value\n      this[LENGTH] += len - item.length\n      item.length = len\n      this.get(key)\n      trim(this)\n      return true\n    }\n\n    const hit = new Entry(key, value, len, now, maxAge)\n\n    // oversized objects fall out of cache automatically.\n    if (hit.length > this[MAX]) {\n      if (this[DISPOSE])\n        this[DISPOSE](key, value)\n\n      return false\n    }\n\n    this[LENGTH] += hit.length\n    this[LRU_LIST].unshift(hit)\n    this[CACHE].set(key, this[LRU_LIST].head)\n    trim(this)\n    return true\n  }\n\n  has (key) {\n    if (!this[CACHE].has(key)) return false\n    const hit = this[CACHE].get(key).value\n    return !isStale(this, hit)\n  }\n\n  get (key) {\n    return get(this, key, true)\n  }\n\n  peek (key) {\n    return get(this, key, false)\n  }\n\n  pop () {\n    const node = this[LRU_LIST].tail\n    if (!node)\n      return null\n\n    del(this, node)\n    return node.value\n  }\n\n  del (key) {\n    del(this, this[CACHE].get(key))\n  }\n\n  load (arr) {\n    // reset the cache\n    this.reset()\n\n    const now = Date.now()\n    // A previous serialized cache has the most recent items first\n    for (let l = arr.length - 1; l >= 0; l--) {\n      const hit = arr[l]\n      const expiresAt = hit.e || 0\n      if (expiresAt === 0)\n        // the item was created without expiration in a non aged cache\n        this.set(hit.k, hit.v)\n      else {\n        const maxAge = expiresAt - now\n        // dont add already expired items\n        if (maxAge > 0) {\n          this.set(hit.k, hit.v, maxAge)\n        }\n      }\n    }\n  }\n\n  prune () {\n    this[CACHE].forEach((value, key) => get(this, key, false))\n  }\n}\n\nconst get = (self, key, doUse) => {\n  const node = self[CACHE].get(key)\n  if (node) {\n    const hit = node.value\n    if (isStale(self, hit)) {\n      del(self, node)\n      if (!self[ALLOW_STALE])\n        return undefined\n    } else {\n      if (doUse) {\n        if (self[UPDATE_AGE_ON_GET])\n          node.value.now = Date.now()\n        self[LRU_LIST].unshiftNode(node)\n      }\n    }\n    return hit.value\n  }\n}\n\nconst isStale = (self, hit) => {\n  if (!hit || (!hit.maxAge && !self[MAX_AGE]))\n    return false\n\n  const diff = Date.now() - hit.now\n  return hit.maxAge ? diff > hit.maxAge\n    : self[MAX_AGE] && (diff > self[MAX_AGE])\n}\n\nconst trim = self => {\n  if (self[LENGTH] > self[MAX]) {\n    for (let walker = self[LRU_LIST].tail;\n      self[LENGTH] > self[MAX] && walker !== null;) {\n      // We know that we're about to delete this one, and also\n      // what the next least recently used key will be, so just\n      // go ahead and set it now.\n      const prev = walker.prev\n      del(self, walker)\n      walker = prev\n    }\n  }\n}\n\nconst del = (self, node) => {\n  if (node) {\n    const hit = node.value\n    if (self[DISPOSE])\n      self[DISPOSE](hit.key, hit.value)\n\n    self[LENGTH] -= hit.length\n    self[CACHE].delete(hit.key)\n    self[LRU_LIST].removeNode(node)\n  }\n}\n\nclass Entry {\n  constructor (key, value, length, now, maxAge) {\n    this.key = key\n    this.value = value\n    this.length = length\n    this.now = now\n    this.maxAge = maxAge || 0\n  }\n}\n\nconst forEachStep = (self, fn, node, thisp) => {\n  let hit = node.value\n  if (isStale(self, hit)) {\n    del(self, node)\n    if (!self[ALLOW_STALE])\n      hit = undefined\n  }\n  if (hit)\n    fn.call(thisp, hit.value, hit.key, self)\n}\n\nmodule.exports = LRUCache\n/LICENSE\u0002The ISC License\n\nCopyright (c) Isaac Z. Schlueter and Contributors\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted, provided that the above\ncopyright notice and this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\nWITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\nANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\nACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR\nIN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n/README.md\u0017c# lru cache\n\nA cache object that deletes the least-recently-used items.\n\n[![Build Status](https://travis-ci.org/isaacs/node-lru-cache.svg?branch=master)](https://travis-ci.org/isaacs/node-lru-cache) [![Coverage Status](https://coveralls.io/repos/isaacs/node-lru-cache/badge.svg?service=github)](https://coveralls.io/github/isaacs/node-lru-cache)\n\n## Installation:\n\n```javascript\nnpm install lru-cache --save\n```\n\n## Usage:\n\n```javascript\nvar LRU = require(\"lru-cache\")\n  , options = { max: 500\n              , length: function (n, key) { return n * 2 + key.length }\n              , dispose: function (key, n) { n.close() }\n              , maxAge: 1000 * 60 * 60 }\n  , cache = new LRU(options)\n  , otherCache = new LRU(50) // sets just the max size\n\ncache.set(\"key\", \"value\")\ncache.get(\"key\") // \"value\"\n\n// non-string keys ARE fully supported\n// but note that it must be THE SAME object, not\n// just a JSON-equivalent object.\nvar someObject = { a: 1 }\ncache.set(someObject, 'a value')\n// Object keys are not toString()-ed\ncache.set('[object Object]', 'a different value')\nassert.equal(cache.get(someObject), 'a value')\n// A similar object with same keys/values won't work,\n// because it's a different object identity\nassert.equal(cache.get({ a: 1 }), undefined)\n\ncache.reset()    // empty the cache\n```\n\nIf you put more stuff in it, then items will fall out.\n\nIf you try to put an oversized thing in it, then it'll fall out right\naway.\n\n## Options\n\n* `max` The maximum size of the cache, checked by applying the length\n  function to all values in the cache.  Not setting this is kind of\n  silly, since that's the whole purpose of this lib, but it defaults\n  to `Infinity`.  Setting it to a non-number or negative number will\n  throw a `TypeError`.  Setting it to 0 makes it be `Infinity`.\n* `maxAge` Maximum age in ms.  Items are not pro-actively pruned out\n  as they age, but if you try to get an item that is too old, it'll\n  drop it and return undefined instead of giving it to you.\n  Setting this to a negative value will make everything seem old!\n  Setting it to a non-number will throw a `TypeError`.\n* `length` Function that is used to calculate the length of stored\n  items.  If you're storing strings or buffers, then you probably want\n  to do something like `function(n, key){return n.length}`.  The default is\n  `function(){return 1}`, which is fine if you want to store `max`\n  like-sized things.  The item is passed as the first argument, and\n  the key is passed as the second argumnet.\n* `dispose` Function that is called on items when they are dropped\n  from the cache.  This can be handy if you want to close file\n  descriptors or do other cleanup tasks when items are no longer\n  accessible.  Called with `key, value`.  It's called *before*\n  actually removing the item from the internal cache, so if you want\n  to immediately put it back in, you'll have to do that in a\n  `nextTick` or `setTimeout` callback or it won't do anything.\n* `stale` By default, if you set a `maxAge`, it'll only actually pull\n  stale items out of the cache when you `get(key)`.  (That is, it's\n  not pre-emptively doing a `setTimeout` or anything.)  If you set\n  `stale:true`, it'll return the stale value before deleting it.  If\n  you don't set this, then it'll return `undefined` when you try to\n  get a stale entry, as if it had already been deleted.\n* `noDisposeOnSet` By default, if you set a `dispose()` method, then\n  it'll be called whenever a `set()` operation overwrites an existing\n  key.  If you set this option, `dispose()` will only be called when a\n  key falls out of the cache, not when it is overwritten.\n* `updateAgeOnGet` When using time-expiring entries with `maxAge`,\n  setting this to `true` will make each item's effective time update\n  to the current time whenever it is retrieved from cache, causing it\n  to not expire.  (It can still fall out of cache based on recency of\n  use, of course.)\n\n## API\n\n* `set(key, value, maxAge)`\n* `get(key) => value`\n\n    Both of these will update the \"recently used\"-ness of the key.\n    They do what you think. `maxAge` is optional and overrides the\n    cache `maxAge` option if provided.\n\n    If the key is not found, `get()` will return `undefined`.\n\n    The key and val can be any value.\n\n* `peek(key)`\n\n    Returns the key value (or `undefined` if not found) without\n    updating the \"recently used\"-ness of the key.\n\n    (If you find yourself using this a lot, you *might* be using the\n    wrong sort of data structure, but there are some use cases where\n    it's handy.)\n\n* `del(key)`\n\n    Deletes a key out of the cache.\n\n* `reset()`\n\n    Clear the cache entirely, throwing away all values.\n\n* `has(key)`\n\n    Check if a key is in the cache, without updating the recent-ness\n    or deleting it for being stale.\n\n* `forEach(function(value,key,cache), [thisp])`\n\n    Just like `Array.prototype.forEach`.  Iterates over all the keys\n    in the cache, in order of recent-ness.  (Ie, more recently used\n    items are iterated over first.)\n\n* `rforEach(function(value,key,cache), [thisp])`\n\n    The same as `cache.forEach(...)` but items are iterated over in\n    reverse order.  (ie, less recently used items are iterated over\n    first.)\n\n* `keys()`\n\n    Return an array of the keys in the cache.\n\n* `values()`\n\n    Return an array of the values in the cache.\n\n* `length`\n\n    Return total length of objects in cache taking into account\n    `length` options function.\n\n* `itemCount`\n\n    Return total quantity of objects currently in cache. Note, that\n    `stale` (see options) items are returned as part of this item\n    count.\n\n* `dump()`\n\n    Return an array of the cache entries ready for serialization and usage\n    with 'destinationCache.load(arr)`.\n\n* `load(cacheEntriesArray)`\n\n    Loads another cache entries array, obtained with `sourceCache.dump()`,\n    into the cache. The destination cache is reset before loading new entries\n\n* `prune()`\n\n    Manually iterates over the entire cache proactively pruning old entries\n/package.json\u0003\b{\n  \"name\": \"lru-cache\",\n  \"description\": \"A cache object that deletes the least-recently-used items.\",\n  \"version\": \"5.1.1\",\n  \"author\": \"Isaac Z. Schlueter <i@izs.me>\",\n  \"keywords\": [\n    \"mru\",\n    \"lru\",\n    \"cache\"\n  ],\n  \"scripts\": {\n    \"test\": \"tap test/*.js --100 -J\",\n    \"snap\": \"TAP_SNAPSHOT=1 tap test/*.js -J\",\n    \"coveragerport\": \"tap --coverage-report=html\",\n    \"preversion\": \"npm test\",\n    \"postversion\": \"npm publish\",\n    \"postpublish\": \"git push origin --all; git push origin --tags\"\n  },\n  \"main\": \"index.js\",\n  \"repository\": \"git://github.com/isaacs/node-lru-cache.git\",\n  \"devDependencies\": {\n    \"benchmark\": \"^2.1.4\",\n    \"tap\": \"^12.1.0\"\n  },\n  \"license\": \"ISC\",\n  \"dependencies\": {\n    \"yallist\": \"^3.0.2\"\n  },\n  \"files\": [\n    \"index.js\"\n  ]\n}\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/bHJ1LWNhY2hlQDYuMC4w",
    "content": "/LICENSE\u0002The ISC License\n\nCopyright (c) Isaac Z. Schlueter and Contributors\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted, provided that the above\ncopyright notice and this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\nWITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\nANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\nACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR\nIN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n/README.md\u0017c# lru cache\n\nA cache object that deletes the least-recently-used items.\n\n[![Build Status](https://travis-ci.org/isaacs/node-lru-cache.svg?branch=master)](https://travis-ci.org/isaacs/node-lru-cache) [![Coverage Status](https://coveralls.io/repos/isaacs/node-lru-cache/badge.svg?service=github)](https://coveralls.io/github/isaacs/node-lru-cache)\n\n## Installation:\n\n```javascript\nnpm install lru-cache --save\n```\n\n## Usage:\n\n```javascript\nvar LRU = require(\"lru-cache\")\n  , options = { max: 500\n              , length: function (n, key) { return n * 2 + key.length }\n              , dispose: function (key, n) { n.close() }\n              , maxAge: 1000 * 60 * 60 }\n  , cache = new LRU(options)\n  , otherCache = new LRU(50) // sets just the max size\n\ncache.set(\"key\", \"value\")\ncache.get(\"key\") // \"value\"\n\n// non-string keys ARE fully supported\n// but note that it must be THE SAME object, not\n// just a JSON-equivalent object.\nvar someObject = { a: 1 }\ncache.set(someObject, 'a value')\n// Object keys are not toString()-ed\ncache.set('[object Object]', 'a different value')\nassert.equal(cache.get(someObject), 'a value')\n// A similar object with same keys/values won't work,\n// because it's a different object identity\nassert.equal(cache.get({ a: 1 }), undefined)\n\ncache.reset()    // empty the cache\n```\n\nIf you put more stuff in it, then items will fall out.\n\nIf you try to put an oversized thing in it, then it'll fall out right\naway.\n\n## Options\n\n* `max` The maximum size of the cache, checked by applying the length\n  function to all values in the cache.  Not setting this is kind of\n  silly, since that's the whole purpose of this lib, but it defaults\n  to `Infinity`.  Setting it to a non-number or negative number will\n  throw a `TypeError`.  Setting it to 0 makes it be `Infinity`.\n* `maxAge` Maximum age in ms.  Items are not pro-actively pruned out\n  as they age, but if you try to get an item that is too old, it'll\n  drop it and return undefined instead of giving it to you.\n  Setting this to a negative value will make everything seem old!\n  Setting it to a non-number will throw a `TypeError`.\n* `length` Function that is used to calculate the length of stored\n  items.  If you're storing strings or buffers, then you probably want\n  to do something like `function(n, key){return n.length}`.  The default is\n  `function(){return 1}`, which is fine if you want to store `max`\n  like-sized things.  The item is passed as the first argument, and\n  the key is passed as the second argumnet.\n* `dispose` Function that is called on items when they are dropped\n  from the cache.  This can be handy if you want to close file\n  descriptors or do other cleanup tasks when items are no longer\n  accessible.  Called with `key, value`.  It's called *before*\n  actually removing the item from the internal cache, so if you want\n  to immediately put it back in, you'll have to do that in a\n  `nextTick` or `setTimeout` callback or it won't do anything.\n* `stale` By default, if you set a `maxAge`, it'll only actually pull\n  stale items out of the cache when you `get(key)`.  (That is, it's\n  not pre-emptively doing a `setTimeout` or anything.)  If you set\n  `stale:true`, it'll return the stale value before deleting it.  If\n  you don't set this, then it'll return `undefined` when you try to\n  get a stale entry, as if it had already been deleted.\n* `noDisposeOnSet` By default, if you set a `dispose()` method, then\n  it'll be called whenever a `set()` operation overwrites an existing\n  key.  If you set this option, `dispose()` will only be called when a\n  key falls out of the cache, not when it is overwritten.\n* `updateAgeOnGet` When using time-expiring entries with `maxAge`,\n  setting this to `true` will make each item's effective time update\n  to the current time whenever it is retrieved from cache, causing it\n  to not expire.  (It can still fall out of cache based on recency of\n  use, of course.)\n\n## API\n\n* `set(key, value, maxAge)`\n* `get(key) => value`\n\n    Both of these will update the \"recently used\"-ness of the key.\n    They do what you think. `maxAge` is optional and overrides the\n    cache `maxAge` option if provided.\n\n    If the key is not found, `get()` will return `undefined`.\n\n    The key and val can be any value.\n\n* `peek(key)`\n\n    Returns the key value (or `undefined` if not found) without\n    updating the \"recently used\"-ness of the key.\n\n    (If you find yourself using this a lot, you *might* be using the\n    wrong sort of data structure, but there are some use cases where\n    it's handy.)\n\n* `del(key)`\n\n    Deletes a key out of the cache.\n\n* `reset()`\n\n    Clear the cache entirely, throwing away all values.\n\n* `has(key)`\n\n    Check if a key is in the cache, without updating the recent-ness\n    or deleting it for being stale.\n\n* `forEach(function(value,key,cache), [thisp])`\n\n    Just like `Array.prototype.forEach`.  Iterates over all the keys\n    in the cache, in order of recent-ness.  (Ie, more recently used\n    items are iterated over first.)\n\n* `rforEach(function(value,key,cache), [thisp])`\n\n    The same as `cache.forEach(...)` but items are iterated over in\n    reverse order.  (ie, less recently used items are iterated over\n    first.)\n\n* `keys()`\n\n    Return an array of the keys in the cache.\n\n* `values()`\n\n    Return an array of the values in the cache.\n\n* `length`\n\n    Return total length of objects in cache taking into account\n    `length` options function.\n\n* `itemCount`\n\n    Return total quantity of objects currently in cache. Note, that\n    `stale` (see options) items are returned as part of this item\n    count.\n\n* `dump()`\n\n    Return an array of the cache entries ready for serialization and usage\n    with 'destinationCache.load(arr)`.\n\n* `load(cacheEntriesArray)`\n\n    Loads another cache entries array, obtained with `sourceCache.dump()`,\n    into the cache. The destination cache is reset before loading new entries\n\n* `prune()`\n\n    Manually iterates over the entire cache proactively pruning old entries\n/index.js\u001f'use strict'\n\n// A linked list to keep track of recently-used-ness\nconst Yallist = require('yallist')\n\nconst MAX = Symbol('max')\nconst LENGTH = Symbol('length')\nconst LENGTH_CALCULATOR = Symbol('lengthCalculator')\nconst ALLOW_STALE = Symbol('allowStale')\nconst MAX_AGE = Symbol('maxAge')\nconst DISPOSE = Symbol('dispose')\nconst NO_DISPOSE_ON_SET = Symbol('noDisposeOnSet')\nconst LRU_LIST = Symbol('lruList')\nconst CACHE = Symbol('cache')\nconst UPDATE_AGE_ON_GET = Symbol('updateAgeOnGet')\n\nconst naiveLength = () => 1\n\n// lruList is a yallist where the head is the youngest\n// item, and the tail is the oldest.  the list contains the Hit\n// objects as the entries.\n// Each Hit object has a reference to its Yallist.Node.  This\n// never changes.\n//\n// cache is a Map (or PseudoMap) that matches the keys to\n// the Yallist.Node object.\nclass LRUCache {\n  constructor (options) {\n    if (typeof options === 'number')\n      options = { max: options }\n\n    if (!options)\n      options = {}\n\n    if (options.max && (typeof options.max !== 'number' || options.max < 0))\n      throw new TypeError('max must be a non-negative number')\n    // Kind of weird to have a default max of Infinity, but oh well.\n    const max = this[MAX] = options.max || Infinity\n\n    const lc = options.length || naiveLength\n    this[LENGTH_CALCULATOR] = (typeof lc !== 'function') ? naiveLength : lc\n    this[ALLOW_STALE] = options.stale || false\n    if (options.maxAge && typeof options.maxAge !== 'number')\n      throw new TypeError('maxAge must be a number')\n    this[MAX_AGE] = options.maxAge || 0\n    this[DISPOSE] = options.dispose\n    this[NO_DISPOSE_ON_SET] = options.noDisposeOnSet || false\n    this[UPDATE_AGE_ON_GET] = options.updateAgeOnGet || false\n    this.reset()\n  }\n\n  // resize the cache when the max changes.\n  set max (mL) {\n    if (typeof mL !== 'number' || mL < 0)\n      throw new TypeError('max must be a non-negative number')\n\n    this[MAX] = mL || Infinity\n    trim(this)\n  }\n  get max () {\n    return this[MAX]\n  }\n\n  set allowStale (allowStale) {\n    this[ALLOW_STALE] = !!allowStale\n  }\n  get allowStale () {\n    return this[ALLOW_STALE]\n  }\n\n  set maxAge (mA) {\n    if (typeof mA !== 'number')\n      throw new TypeError('maxAge must be a non-negative number')\n\n    this[MAX_AGE] = mA\n    trim(this)\n  }\n  get maxAge () {\n    return this[MAX_AGE]\n  }\n\n  // resize the cache when the lengthCalculator changes.\n  set lengthCalculator (lC) {\n    if (typeof lC !== 'function')\n      lC = naiveLength\n\n    if (lC !== this[LENGTH_CALCULATOR]) {\n      this[LENGTH_CALCULATOR] = lC\n      this[LENGTH] = 0\n      this[LRU_LIST].forEach(hit => {\n        hit.length = this[LENGTH_CALCULATOR](hit.value, hit.key)\n        this[LENGTH] += hit.length\n      })\n    }\n    trim(this)\n  }\n  get lengthCalculator () { return this[LENGTH_CALCULATOR] }\n\n  get length () { return this[LENGTH] }\n  get itemCount () { return this[LRU_LIST].length }\n\n  rforEach (fn, thisp) {\n    thisp = thisp || this\n    for (let walker = this[LRU_LIST].tail; walker !== null;) {\n      const prev = walker.prev\n      forEachStep(this, fn, walker, thisp)\n      walker = prev\n    }\n  }\n\n  forEach (fn, thisp) {\n    thisp = thisp || this\n    for (let walker = this[LRU_LIST].head; walker !== null;) {\n      const next = walker.next\n      forEachStep(this, fn, walker, thisp)\n      walker = next\n    }\n  }\n\n  keys () {\n    return this[LRU_LIST].toArray().map(k => k.key)\n  }\n\n  values () {\n    return this[LRU_LIST].toArray().map(k => k.value)\n  }\n\n  reset () {\n    if (this[DISPOSE] &&\n        this[LRU_LIST] &&\n        this[LRU_LIST].length) {\n      this[LRU_LIST].forEach(hit => this[DISPOSE](hit.key, hit.value))\n    }\n\n    this[CACHE] = new Map() // hash of items by key\n    this[LRU_LIST] = new Yallist() // list of items in order of use recency\n    this[LENGTH] = 0 // length of items in the list\n  }\n\n  dump () {\n    return this[LRU_LIST].map(hit =>\n      isStale(this, hit) ? false : {\n        k: hit.key,\n        v: hit.value,\n        e: hit.now + (hit.maxAge || 0)\n      }).toArray().filter(h => h)\n  }\n\n  dumpLru () {\n    return this[LRU_LIST]\n  }\n\n  set (key, value, maxAge) {\n    maxAge = maxAge || this[MAX_AGE]\n\n    if (maxAge && typeof maxAge !== 'number')\n      throw new TypeError('maxAge must be a number')\n\n    const now = maxAge ? Date.now() : 0\n    const len = this[LENGTH_CALCULATOR](value, key)\n\n    if (this[CACHE].has(key)) {\n      if (len > this[MAX]) {\n        del(this, this[CACHE].get(key))\n        return false\n      }\n\n      const node = this[CACHE].get(key)\n      const item = node.value\n\n      // dispose of the old one before overwriting\n      // split out into 2 ifs for better coverage tracking\n      if (this[DISPOSE]) {\n        if (!this[NO_DISPOSE_ON_SET])\n          this[DISPOSE](key, item.value)\n      }\n\n      item.now = now\n      item.maxAge = maxAge\n      item.value = value\n      this[LENGTH] += len - item.length\n      item.length = len\n      this.get(key)\n      trim(this)\n      return true\n    }\n\n    const hit = new Entry(key, value, len, now, maxAge)\n\n    // oversized objects fall out of cache automatically.\n    if (hit.length > this[MAX]) {\n      if (this[DISPOSE])\n        this[DISPOSE](key, value)\n\n      return false\n    }\n\n    this[LENGTH] += hit.length\n    this[LRU_LIST].unshift(hit)\n    this[CACHE].set(key, this[LRU_LIST].head)\n    trim(this)\n    return true\n  }\n\n  has (key) {\n    if (!this[CACHE].has(key)) return false\n    const hit = this[CACHE].get(key).value\n    return !isStale(this, hit)\n  }\n\n  get (key) {\n    return get(this, key, true)\n  }\n\n  peek (key) {\n    return get(this, key, false)\n  }\n\n  pop () {\n    const node = this[LRU_LIST].tail\n    if (!node)\n      return null\n\n    del(this, node)\n    return node.value\n  }\n\n  del (key) {\n    del(this, this[CACHE].get(key))\n  }\n\n  load (arr) {\n    // reset the cache\n    this.reset()\n\n    const now = Date.now()\n    // A previous serialized cache has the most recent items first\n    for (let l = arr.length - 1; l >= 0; l--) {\n      const hit = arr[l]\n      const expiresAt = hit.e || 0\n      if (expiresAt === 0)\n        // the item was created without expiration in a non aged cache\n        this.set(hit.k, hit.v)\n      else {\n        const maxAge = expiresAt - now\n        // dont add already expired items\n        if (maxAge > 0) {\n          this.set(hit.k, hit.v, maxAge)\n        }\n      }\n    }\n  }\n\n  prune () {\n    this[CACHE].forEach((value, key) => get(this, key, false))\n  }\n}\n\nconst get = (self, key, doUse) => {\n  const node = self[CACHE].get(key)\n  if (node) {\n    const hit = node.value\n    if (isStale(self, hit)) {\n      del(self, node)\n      if (!self[ALLOW_STALE])\n        return undefined\n    } else {\n      if (doUse) {\n        if (self[UPDATE_AGE_ON_GET])\n          node.value.now = Date.now()\n        self[LRU_LIST].unshiftNode(node)\n      }\n    }\n    return hit.value\n  }\n}\n\nconst isStale = (self, hit) => {\n  if (!hit || (!hit.maxAge && !self[MAX_AGE]))\n    return false\n\n  const diff = Date.now() - hit.now\n  return hit.maxAge ? diff > hit.maxAge\n    : self[MAX_AGE] && (diff > self[MAX_AGE])\n}\n\nconst trim = self => {\n  if (self[LENGTH] > self[MAX]) {\n    for (let walker = self[LRU_LIST].tail;\n      self[LENGTH] > self[MAX] && walker !== null;) {\n      // We know that we're about to delete this one, and also\n      // what the next least recently used key will be, so just\n      // go ahead and set it now.\n      const prev = walker.prev\n      del(self, walker)\n      walker = prev\n    }\n  }\n}\n\nconst del = (self, node) => {\n  if (node) {\n    const hit = node.value\n    if (self[DISPOSE])\n      self[DISPOSE](hit.key, hit.value)\n\n    self[LENGTH] -= hit.length\n    self[CACHE].delete(hit.key)\n    self[LRU_LIST].removeNode(node)\n  }\n}\n\nclass Entry {\n  constructor (key, value, length, now, maxAge) {\n    this.key = key\n    this.value = value\n    this.length = length\n    this.now = now\n    this.maxAge = maxAge || 0\n  }\n}\n\nconst forEachStep = (self, fn, node, thisp) => {\n  let hit = node.value\n  if (isStale(self, hit)) {\n    del(self, node)\n    if (!self[ALLOW_STALE])\n      hit = undefined\n  }\n  if (hit)\n    fn.call(thisp, hit.value, hit.key, self)\n}\n\nmodule.exports = LRUCache\n/package.json\u0002{\n  \"name\": \"lru-cache\",\n  \"description\": \"A cache object that deletes the least-recently-used items.\",\n  \"version\": \"6.0.0\",\n  \"author\": \"Isaac Z. Schlueter <i@izs.me>\",\n  \"keywords\": [\n    \"mru\",\n    \"lru\",\n    \"cache\"\n  ],\n  \"scripts\": {\n    \"test\": \"tap\",\n    \"snap\": \"tap\",\n    \"preversion\": \"npm test\",\n    \"postversion\": \"npm publish\",\n    \"prepublishOnly\": \"git push origin --follow-tags\"\n  },\n  \"main\": \"index.js\",\n  \"repository\": \"git://github.com/isaacs/node-lru-cache.git\",\n  \"devDependencies\": {\n    \"benchmark\": \"^2.1.4\",\n    \"tap\": \"^14.10.7\"\n  },\n  \"license\": \"ISC\",\n  \"dependencies\": {\n    \"yallist\": \"^4.0.0\"\n  },\n  \"files\": [\n    \"index.js\"\n  ],\n  \"engines\": {\n    \"node\": \">=10\"\n  }\n}\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/bHJ1LWNhY2hlQDcuMTguMw==",
    "content": "/index.d.tsgu// Project: https://github.com/isaacs/node-lru-cache\n// Based initially on @types/lru-cache\n// https://github.com/DefinitelyTyped/DefinitelyTyped\n// used under the terms of the MIT License, shown below.\n//\n// DefinitelyTyped license:\n// ------\n// MIT License\n//\n// Copyright (c) Microsoft Corporation.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the \"Software\"),\n// to deal in the Software without restriction, including without limitation\n// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n// and/or sell copies of the Software, and to permit persons to whom the\n// Software is furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\n// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\n// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\n// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE\n// ------\n//\n// Changes by Isaac Z. Schlueter released under the terms found in the\n// LICENSE file within this project.\n\n/**\n * Integer greater than 0, representing some number of milliseconds, or the\n * time at which a TTL started counting from.\n */\ndeclare type LRUMilliseconds = number\n\n/**\n * An integer greater than 0, reflecting the calculated size of items\n */\ndeclare type LRUSize = number\n\n/**\n * An integer greater than 0, reflecting a number of items\n */\ndeclare type LRUCount = number\n\ndeclare class LRUCache<K, V> implements Iterable<[K, V]> {\n  constructor(options: LRUCache.Options<K, V>)\n\n  /**\n   * Number of items in the cache.\n   * Alias for {@link size}\n   *\n   * @deprecated since 7.0 use {@link size} instead\n   */\n  public readonly length: LRUCount\n\n  public readonly max: LRUCount\n  public readonly maxSize: LRUSize\n  public readonly maxEntrySize: LRUSize\n  public readonly sizeCalculation:\n    | LRUCache.SizeCalculator<K, V>\n    | undefined\n  public readonly dispose: LRUCache.Disposer<K, V>\n  /**\n   * @since 7.4.0\n   */\n  public readonly disposeAfter: LRUCache.Disposer<K, V> | null\n  public readonly noDisposeOnSet: boolean\n  public readonly ttl: LRUMilliseconds\n  public readonly ttlResolution: LRUMilliseconds\n  public readonly ttlAutopurge: boolean\n  public readonly allowStale: boolean\n  public readonly updateAgeOnGet: boolean\n  /**\n   * @since 7.11.0\n   */\n  public readonly noDeleteOnStaleGet: boolean\n  /**\n   * @since 7.6.0\n   */\n  public readonly fetchMethod: LRUCache.Fetcher<K, V> | null\n\n  /**\n   * The total number of items held in the cache at the current moment.\n   */\n  public readonly size: LRUCount\n\n  /**\n   * The total size of items in cache when using size tracking.\n   */\n  public readonly calculatedSize: LRUSize\n\n  /**\n   * Add a value to the cache.\n   */\n  public set(\n    key: K,\n    value: V,\n    options?: LRUCache.SetOptions<K, V>\n  ): this\n\n  /**\n   * Return a value from the cache. Will update the recency of the cache entry\n   * found.\n   *\n   * If the key is not found, {@link get} will return `undefined`. This can be\n   * confusing when setting values specifically to `undefined`, as in\n   * `cache.set(key, undefined)`. Use {@link has} to determine whether a key is\n   * present in the cache at all.\n   */\n  public get(key: K, options?: LRUCache.GetOptions<V>): V | undefined\n\n  /**\n   * Like {@link get} but doesn't update recency or delete stale items.\n   * Returns `undefined` if the item is stale, unless {@link allowStale} is set\n   * either on the cache or in the options object.\n   */\n  public peek(key: K, options?: LRUCache.PeekOptions): V | undefined\n\n  /**\n   * Check if a key is in the cache, without updating the recency of use.\n   * Will return false if the item is stale, even though it is technically\n   * in the cache.\n   *\n   * Will not update item age unless {@link updateAgeOnHas} is set in the\n   * options or constructor.\n   */\n  public has(key: K, options?: LRUCache.HasOptions<V>): boolean\n\n  /**\n   * Deletes a key out of the cache.\n   * Returns true if the key was deleted, false otherwise.\n   */\n  public delete(key: K): boolean\n\n  /**\n   * Clear the cache entirely, throwing away all values.\n   */\n  public clear(): void\n\n  /**\n   * Delete any stale entries. Returns true if anything was removed, false\n   * otherwise.\n   */\n  public purgeStale(): boolean\n\n  /**\n   * Find a value for which the supplied fn method returns a truthy value,\n   * similar to Array.find().  fn is called as fn(value, key, cache).\n   */\n  public find(\n    callbackFn: (\n      value: V,\n      key: K,\n      cache: this\n    ) => boolean | undefined | void,\n    options?: LRUCache.GetOptions<V>\n  ): V | undefined\n\n  /**\n   * Call the supplied function on each item in the cache, in order from\n   * most recently used to least recently used.  fn is called as\n   * fn(value, key, cache).  Does not update age or recenty of use.\n   */\n  public forEach<T = this>(\n    callbackFn: (this: T, value: V, key: K, cache: this) => void,\n    thisArg?: T\n  ): void\n\n  /**\n   * The same as {@link forEach} but items are iterated over in reverse\n   * order.  (ie, less recently used items are iterated over first.)\n   */\n  public rforEach<T = this>(\n    callbackFn: (this: T, value: V, key: K, cache: this) => void,\n    thisArg?: T\n  ): void\n\n  /**\n   * Return a generator yielding the keys in the cache,\n   * in order from most recently used to least recently used.\n   */\n  public keys(): Generator<K, void, void>\n\n  /**\n   * Inverse order version of {@link keys}\n   *\n   * Return a generator yielding the keys in the cache,\n   * in order from least recently used to most recently used.\n   */\n  public rkeys(): Generator<K, void, void>\n\n  /**\n   * Return a generator yielding the values in the cache,\n   * in order from most recently used to least recently used.\n   */\n  public values(): Generator<V, void, void>\n\n  /**\n   * Inverse order version of {@link values}\n   *\n   * Return a generator yielding the values in the cache,\n   * in order from least recently used to most recently used.\n   */\n  public rvalues(): Generator<V, void, void>\n\n  /**\n   * Return a generator yielding `[key, value]` pairs,\n   * in order from most recently used to least recently used.\n   */\n  public entries(): Generator<[K, V], void, void>\n\n  /**\n   * Inverse order version of {@link entries}\n   *\n   * Return a generator yielding `[key, value]` pairs,\n   * in order from least recently used to most recently used.\n   */\n  public rentries(): Generator<[K, V], void, void>\n\n  /**\n   * Iterating over the cache itself yields the same results as\n   * {@link entries}\n   */\n  public [Symbol.iterator](): Generator<[K, V], void, void>\n\n  /**\n   * Return an array of [key, entry] objects which can be passed to\n   * cache.load()\n   */\n  public dump(): Array<[K, LRUCache.Entry<V>]>\n\n  /**\n   * Reset the cache and load in the items in entries in the order listed.\n   * Note that the shape of the resulting cache may be different if the\n   * same options are not used in both caches.\n   */\n  public load(\n    cacheEntries: ReadonlyArray<[K, LRUCache.Entry<V>]>\n  ): void\n\n  /**\n   * Evict the least recently used item, returning its value or `undefined`\n   * if cache is empty.\n   */\n  public pop(): V | undefined\n\n  /**\n   * Deletes a key out of the cache.\n   *\n   * @deprecated since 7.0 use delete() instead\n   */\n  public del(key: K): boolean\n\n  /**\n   * Clear the cache entirely, throwing away all values.\n   *\n   * @deprecated since 7.0 use clear() instead\n   */\n  public reset(): void\n\n  /**\n   * Manually iterates over the entire cache proactively pruning old entries.\n   *\n   * @deprecated since 7.0 use purgeStale() instead\n   */\n  public prune(): boolean\n\n  /**\n   * Make an asynchronous cached fetch using the {@link fetchMethod} function.\n   *\n   * If multiple fetches for the same key are issued, then they will all be\n   * coalesced into a single call to fetchMethod.\n   *\n   * Note that this means that handling options such as\n   * {@link allowStaleOnFetchAbort}, {@link signal}, and\n   * {@link allowStaleOnFetchRejection} will be determined by the FIRST fetch()\n   * call for a given key.\n   *\n   * This is a known (fixable) shortcoming which will be addresed on when\n   * someone complains about it, as the fix would involve added complexity and\n   * may not be worth the costs for this edge case.\n   *\n   * since: 7.6.0\n   */\n  public fetch(\n    key: K,\n    options?: LRUCache.FetchOptions<K, V>\n  ): Promise<V>\n\n  /**\n   * since: 7.6.0\n   */\n  public getRemainingTTL(key: K): LRUMilliseconds\n}\n\ndeclare namespace LRUCache {\n  type DisposeReason = 'evict' | 'set' | 'delete'\n\n  type SizeCalculator<K, V> = (value: V, key: K) => LRUSize\n  type Disposer<K, V> = (\n    value: V,\n    key: K,\n    reason: DisposeReason\n  ) => void\n  type Fetcher<K, V> = (\n    key: K,\n    staleValue: V | undefined,\n    options: FetcherOptions<K, V>\n  ) => Promise<V | void | undefined> | V | void | undefined\n\n  interface DeprecatedOptions<K, V> {\n    /**\n     * alias for ttl\n     *\n     * @deprecated since 7.0 use options.ttl instead\n     */\n    maxAge?: LRUMilliseconds\n\n    /**\n     * alias for {@link sizeCalculation}\n     *\n     * @deprecated since 7.0 use {@link sizeCalculation} instead\n     */\n    length?: SizeCalculator<K, V>\n\n    /**\n     * alias for allowStale\n     *\n     * @deprecated since 7.0 use options.allowStale instead\n     */\n    stale?: boolean\n  }\n\n  interface LimitedByCount {\n    /**\n     * The number of most recently used items to keep.\n     * Note that we may store fewer items than this if maxSize is hit.\n     */\n    max: LRUCount\n  }\n\n  type MaybeMaxEntrySizeLimit<K, V> =\n    | {\n        /**\n         * The maximum allowed size for any single item in the cache.\n         *\n         * If a larger item is passed to {@link set} or returned by a\n         * {@link fetchMethod}, then it will not be stored in the cache.\n         */\n        maxEntrySize: LRUSize\n        sizeCalculation?: SizeCalculator<K, V>\n      }\n    | {}\n\n  interface LimitedBySize<K, V> {\n    /**\n     * If you wish to track item size, you must provide a maxSize\n     * note that we still will only keep up to max *actual items*,\n     * if max is set, so size tracking may cause fewer than max items\n     * to be stored.  At the extreme, a single item of maxSize size\n     * will cause everything else in the cache to be dropped when it\n     * is added.  Use with caution!\n     *\n     * Note also that size tracking can negatively impact performance,\n     * though for most cases, only minimally.\n     */\n    maxSize: LRUSize\n\n    /**\n     * Function to calculate size of items.  Useful if storing strings or\n     * buffers or other items where memory size depends on the object itself.\n     *\n     * Items larger than {@link maxEntrySize} will not be stored in the cache.\n     *\n     * Note that when {@link maxSize} or {@link maxEntrySize} are set, every\n     * item added MUST have a size specified, either via a `sizeCalculation` in\n     * the constructor, or `sizeCalculation` or {@link size} options to\n     * {@link set}.\n     */\n    sizeCalculation?: SizeCalculator<K, V>\n  }\n\n  interface LimitedByTTL {\n    /**\n     * Max time in milliseconds for items to live in cache before they are\n     * considered stale.  Note that stale items are NOT preemptively removed\n     * by default, and MAY live in the cache, contributing to its LRU max,\n     * long after they have expired.\n     *\n     * Also, as this cache is optimized for LRU/MRU operations, some of\n     * the staleness/TTL checks will reduce performance, as they will incur\n     * overhead by deleting items.\n     *\n     * Must be an integer number of ms, defaults to 0, which means \"no TTL\"\n     */\n    ttl: LRUMilliseconds\n\n    /**\n     * Boolean flag to tell the cache to not update the TTL when\n     * setting a new value for an existing key (ie, when updating a value\n     * rather than inserting a new value).  Note that the TTL value is\n     * _always_ set (if provided) when adding a new entry into the cache.\n     *\n     * @default false\n     * @since 7.4.0\n     */\n    noUpdateTTL?: boolean\n\n    /**\n     * Minimum amount of time in ms in which to check for staleness.\n     * Defaults to 1, which means that the current time is checked\n     * at most once per millisecond.\n     *\n     * Set to 0 to check the current time every time staleness is tested.\n     * (This reduces performance, and is theoretically unnecessary.)\n     *\n     * Setting this to a higher value will improve performance somewhat\n     * while using ttl tracking, albeit at the expense of keeping stale\n     * items around a bit longer than their TTLs would indicate.\n     *\n     * @default 1\n     * @since 7.1.0\n     */\n    ttlResolution?: LRUMilliseconds\n\n    /**\n     * Preemptively remove stale items from the cache.\n     * Note that this may significantly degrade performance,\n     * especially if the cache is storing a large number of items.\n     * It is almost always best to just leave the stale items in\n     * the cache, and let them fall out as new items are added.\n     *\n     * Note that this means that {@link allowStale} is a bit pointless,\n     * as stale items will be deleted almost as soon as they expire.\n     *\n     * Use with caution!\n     *\n     * @default false\n     * @since 7.1.0\n     */\n    ttlAutopurge?: boolean\n\n    /**\n     * Return stale items from {@link get} before disposing of them.\n     * Return stale values from {@link fetch} while performing a call\n     * to the {@link fetchMethod} in the background.\n     *\n     * @default false\n     */\n    allowStale?: boolean\n\n    /**\n     * Update the age of items on {@link get}, renewing their TTL\n     *\n     * @default false\n     */\n    updateAgeOnGet?: boolean\n\n    /**\n     * Do not delete stale items when they are retrieved with {@link get}.\n     * Note that the {@link get} return value will still be `undefined` unless\n     * allowStale is true.\n     *\n     * @default false\n     * @since 7.11.0\n     */\n    noDeleteOnStaleGet?: boolean\n\n    /**\n     * Update the age of items on {@link has}, renewing their TTL\n     *\n     * @default false\n     */\n    updateAgeOnHas?: boolean\n  }\n\n  type SafetyBounds<K, V> =\n    | LimitedByCount\n    | LimitedBySize<K, V>\n    | LimitedByTTL\n\n  // options shared by all three of the limiting scenarios\n  interface SharedOptions<K, V> {\n    /**\n     * Function that is called on items when they are dropped from the cache.\n     * This can be handy if you want to close file descriptors or do other\n     * cleanup tasks when items are no longer accessible. Called with `key,\n     * value`.  It's called before actually removing the item from the\n     * internal cache, so it is *NOT* safe to re-add them.\n     * Use {@link disposeAfter} if you wish to dispose items after they have\n     * been full removed, when it is safe to add them back to the cache.\n     */\n    dispose?: Disposer<K, V>\n\n    /**\n     * The same as dispose, but called *after* the entry is completely\n     * removed and the cache is once again in a clean state.  It is safe to\n     * add an item right back into the cache at this point.\n     * However, note that it is *very* easy to inadvertently create infinite\n     * recursion this way.\n     *\n     * @since 7.3.0\n     */\n    disposeAfter?: Disposer<K, V>\n\n    /**\n     * Set to true to suppress calling the dispose() function if the entry\n     * key is still accessible within the cache.\n     * This may be overridden by passing an options object to {@link set}.\n     *\n     * @default false\n     */\n    noDisposeOnSet?: boolean\n\n    /**\n     * Function that is used to make background asynchronous fetches.  Called\n     * with `fetchMethod(key, staleValue, { signal, options, context })`.\n     *\n     * If `fetchMethod` is not provided, then {@link fetch} is\n     * equivalent to `Promise.resolve(cache.get(key))`.\n     *\n     * The `fetchMethod` should ONLY return `undefined` in cases where the\n     * abort controller has sent an abort signal.\n     *\n     * @since 7.6.0\n     */\n    fetchMethod?: LRUCache.Fetcher<K, V>\n\n    /**\n     * Set to true to suppress the deletion of stale data when a\n     * {@link fetchMethod} throws an error or returns a rejected promise\n     *\n     * This may be overridden in the {@link fetchMethod}.\n     *\n     * @default false\n     * @since 7.10.0\n     */\n    noDeleteOnFetchRejection?: boolean\n\n    /**\n     * Set to true to allow returning stale data when a {@link fetchMethod}\n     * throws an error or returns a rejected promise. Note that this\n     * differs from using {@link allowStale} in that stale data will\n     * ONLY be returned in the case that the fetch fails, not any other\n     * times.\n     *\n     * This may be overridden in the {@link fetchMethod}.\n     *\n     * @default false\n     * @since 7.16.0\n     */\n    allowStaleOnFetchRejection?: boolean\n\n    /**\n     *\n     * Set to true to ignore the `abort` event emitted by the `AbortSignal`\n     * object passed to {@link fetchMethod}, and still cache the\n     * resulting resolution value, as long as it is not `undefined`.\n     *\n     * When used on its own, this means aborted {@link fetch} calls are not\n     * immediately resolved or rejected when they are aborted, and instead take\n     * the full time to await.\n     *\n     * When used with {@link allowStaleOnFetchAbort}, aborted {@link fetch}\n     * calls will resolve immediately to their stale cached value or\n     * `undefined`, and will continue to process and eventually update the\n     * cache when they resolve, as long as the resulting value is not\n     * `undefined`, thus supporting a \"return stale on timeout while\n     * refreshing\" mechanism by passing `AbortSignal.timeout(n)` as the signal.\n     *\n     * **Note**: regardless of this setting, an `abort` event _is still emitted\n     * on the `AbortSignal` object_, so may result in invalid results when\n     * passed to other underlying APIs that use AbortSignals.\n     *\n     * This may be overridden in the {@link fetchMethod} or the call to\n     * {@link fetch}.\n     *\n     * @default false\n     * @since 7.17.0\n     */\n    ignoreFetchAbort?: boolean\n\n    /**\n     * Set to true to return a stale value from the cache when the\n     * `AbortSignal` passed to the {@link fetchMethod} dispatches an `'abort'`\n     * event, whether user-triggered, or due to internal cache behavior.\n     *\n     * Unless {@link ignoreFetchAbort} is also set, the underlying\n     * {@link fetchMethod} will still be considered canceled, and its return\n     * value will be ignored and not cached.\n     *\n     * This may be overridden in the {@link fetchMethod} or the call to\n     * {@link fetch}.\n     *\n     * @default false\n     * @since 7.17.0\n     */\n    allowStaleOnFetchAbort?: boolean\n\n    /**\n     * Set to any value in the constructor or {@link fetch} options to\n     * pass arbitrary data to the {@link fetchMethod} in the {@link context}\n     * options field.\n     *\n     * @since 7.12.0\n     */\n    fetchContext?: any\n  }\n\n  type Options<K, V> = SharedOptions<K, V> &\n    DeprecatedOptions<K, V> &\n    SafetyBounds<K, V> &\n    MaybeMaxEntrySizeLimit<K, V>\n\n  /**\n   * options which override the options set in the LRUCache constructor\n   * when making calling {@link set}.\n   */\n  interface SetOptions<K, V> {\n    /**\n     * A value for the size of the entry, prevents calls to\n     * {@link sizeCalculation}.\n     *\n     * Items larger than {@link maxEntrySize} will not be stored in the cache.\n     *\n     * Note that when {@link maxSize} or {@link maxEntrySize} are set, every\n     * item added MUST have a size specified, either via a `sizeCalculation` in\n     * the constructor, or {@link sizeCalculation} or `size` options to\n     * {@link set}.\n     */\n    size?: LRUSize\n    /**\n     * Overrides the {@link sizeCalculation} method set in the constructor.\n     *\n     * Items larger than {@link maxEntrySize} will not be stored in the cache.\n     *\n     * Note that when {@link maxSize} or {@link maxEntrySize} are set, every\n     * item added MUST have a size specified, either via a `sizeCalculation` in\n     * the constructor, or `sizeCalculation` or {@link size} options to\n     * {@link set}.\n     */\n    sizeCalculation?: SizeCalculator<K, V>\n    ttl?: LRUMilliseconds\n    start?: LRUMilliseconds\n    noDisposeOnSet?: boolean\n    noUpdateTTL?: boolean\n    status?: Status<V>\n  }\n\n  /**\n   * options which override the options set in the LRUCAche constructor\n   * when calling {@link has}.\n   */\n  interface HasOptions<V> {\n    updateAgeOnHas?: boolean\n    status: Status<V>\n  }\n\n  /**\n   * options which override the options set in the LRUCache constructor\n   * when calling {@link get}.\n   */\n  interface GetOptions<V> {\n    allowStale?: boolean\n    updateAgeOnGet?: boolean\n    noDeleteOnStaleGet?: boolean\n    status?: Status<V>\n  }\n\n  /**\n   * options which override the options set in the LRUCache constructor\n   * when calling {@link peek}.\n   */\n  interface PeekOptions {\n    allowStale?: boolean\n  }\n\n  /**\n   * Options object passed to the {@link fetchMethod}\n   *\n   * May be mutated by the {@link fetchMethod} to affect the behavior of the\n   * resulting {@link set} operation on resolution, or in the case of\n   * {@link noDeleteOnFetchRejection}, {@link ignoreFetchAbort}, and\n   * {@link allowStaleOnFetchRejection}, the handling of failure.\n   */\n  interface FetcherFetchOptions<K, V> {\n    allowStale?: boolean\n    updateAgeOnGet?: boolean\n    noDeleteOnStaleGet?: boolean\n    size?: LRUSize\n    sizeCalculation?: SizeCalculator<K, V>\n    ttl?: LRUMilliseconds\n    noDisposeOnSet?: boolean\n    noUpdateTTL?: boolean\n    noDeleteOnFetchRejection?: boolean\n    allowStaleOnFetchRejection?: boolean\n    ignoreFetchAbort?: boolean\n    allowStaleOnFetchAbort?: boolean\n    status?: Status<V>\n  }\n\n  /**\n   * Status object that may be passed to {@link fetch}, {@link get},\n   * {@link set}, and {@link has}.\n   */\n  interface Status<V> {\n    /**\n     * The status of a set() operation.\n     *\n     * - add: the item was not found in the cache, and was added\n     * - update: the item was in the cache, with the same value provided\n     * - replace: the item was in the cache, and replaced\n     * - miss: the item was not added to the cache for some reason\n     */\n    set?: 'add' | 'update' | 'replace' | 'miss'\n\n    /**\n     * the ttl stored for the item, or undefined if ttls are not used.\n     */\n    ttl?: LRUMilliseconds\n\n    /**\n     * the start time for the item, or undefined if ttls are not used.\n     */\n    start?: LRUMilliseconds\n\n    /**\n     * The timestamp used for TTL calculation\n     */\n    now?: LRUMilliseconds\n\n    /**\n     * the remaining ttl for the item, or undefined if ttls are not used.\n     */\n    remainingTTL?: LRUMilliseconds\n\n    /**\n     * The calculated size for the item, if sizes are used.\n     */\n    size?: LRUSize\n\n    /**\n     * A flag indicating that the item was not stored, due to exceeding the\n     * {@link maxEntrySize}\n     */\n    maxEntrySizeExceeded?: true\n\n    /**\n     * The old value, specified in the case of `set:'update'` or\n     * `set:'replace'`\n     */\n    oldValue?: V\n\n    /**\n     * The results of a {@link has} operation\n     *\n     * - hit: the item was found in the cache\n     * - stale: the item was found in the cache, but is stale\n     * - miss: the item was not found in the cache\n     */\n    has?: 'hit' | 'stale' | 'miss'\n\n    /**\n     * The status of a {@link fetch} operation.\n     * Note that this can change as the underlying fetch() moves through\n     * various states.\n     *\n     * - inflight: there is another fetch() for this key which is in process\n     * - get: there is no fetchMethod, so {@link get} was called.\n     * - miss: the item is not in cache, and will be fetched.\n     * - hit: the item is in the cache, and was resolved immediately.\n     * - stale: the item is in the cache, but stale.\n     * - refresh: the item is in the cache, and not stale, but\n     *   {@link forceRefresh} was specified.\n     */\n    fetch?: 'get' | 'inflight' | 'miss' | 'hit' | 'stale' | 'refresh'\n\n    /**\n     * The {@link fetchMethod} was called\n     */\n    fetchDispatched?: true\n\n    /**\n     * The cached value was updated after a successful call to fetchMethod\n     */\n    fetchUpdated?: true\n\n    /**\n     * The reason for a fetch() rejection.  Either the error raised by the\n     * {@link fetchMethod}, or the reason for an AbortSignal.\n     */\n    fetchError?: Error\n\n    /**\n     * The fetch received an abort signal\n     */\n    fetchAborted?: true\n\n    /**\n     * The abort signal received was ignored, and the fetch was allowed to\n     * continue.\n     */\n    fetchAbortIgnored?: true\n\n    /**\n     * The fetchMethod promise resolved successfully\n     */\n    fetchResolved?: true\n\n    /**\n     * The fetchMethod promise was rejected\n     */\n    fetchRejected?: true\n\n    /**\n     * The status of a {@link get} operation.\n     *\n     * - fetching: The item is currently being fetched.  If a previous value is\n     *   present and allowed, that will be returned.\n     * - stale: The item is in the cache, and is stale.\n     * - hit: the item is in the cache\n     * - miss: the item is not in the cache\n     */\n    get?: 'stale' | 'hit' | 'miss'\n\n    /**\n     * A fetch or get operation returned a stale value.\n     */\n    returnedStale?: true\n  }\n\n  /**\n   * options which override the options set in the LRUCache constructor\n   * when calling {@link fetch}.\n   *\n   * This is the union of GetOptions and SetOptions, plus\n   * {@link noDeleteOnFetchRejection}, {@link allowStaleOnFetchRejection},\n   * {@link forceRefresh}, and {@link fetchContext}\n   */\n  interface FetchOptions<K, V> extends FetcherFetchOptions<K, V> {\n    forceRefresh?: boolean\n    fetchContext?: any\n    signal?: AbortSignal\n    status?: Status<V>\n  }\n\n  interface FetcherOptions<K, V> {\n    signal: AbortSignal\n    options: FetcherFetchOptions<K, V>\n    /**\n     * Object provided in the {@link fetchContext} option\n     */\n    context: any\n  }\n\n  interface Entry<V> {\n    value: V\n    ttl?: LRUMilliseconds\n    size?: LRUSize\n    start?: LRUMilliseconds\n  }\n}\n\nexport = LRUCache\n/index.jsńconst perf =\n  typeof performance === 'object' &&\n  performance &&\n  typeof performance.now === 'function'\n    ? performance\n    : Date\n\nconst hasAbortController = typeof AbortController === 'function'\n\n// minimal backwards-compatibility polyfill\n// this doesn't have nearly all the checks and whatnot that\n// actual AbortController/Signal has, but it's enough for\n// our purposes, and if used properly, behaves the same.\nconst AC = hasAbortController\n  ? AbortController\n  : class AbortController {\n      constructor() {\n        this.signal = new AS()\n      }\n      abort(reason = new Error('This operation was aborted')) {\n        this.signal.reason = this.signal.reason || reason\n        this.signal.aborted = true\n        this.signal.dispatchEvent({\n          type: 'abort',\n          target: this.signal,\n        })\n      }\n    }\n\nconst hasAbortSignal = typeof AbortSignal === 'function'\n// Some polyfills put this on the AC class, not global\nconst hasACAbortSignal = typeof AC.AbortSignal === 'function'\nconst AS = hasAbortSignal\n  ? AbortSignal\n  : hasACAbortSignal\n  ? AC.AbortController\n  : class AbortSignal {\n      constructor() {\n        this.reason = undefined\n        this.aborted = false\n        this._listeners = []\n      }\n      dispatchEvent(e) {\n        if (e.type === 'abort') {\n          this.aborted = true\n          this.onabort(e)\n          this._listeners.forEach(f => f(e), this)\n        }\n      }\n      onabort() {}\n      addEventListener(ev, fn) {\n        if (ev === 'abort') {\n          this._listeners.push(fn)\n        }\n      }\n      removeEventListener(ev, fn) {\n        if (ev === 'abort') {\n          this._listeners = this._listeners.filter(f => f !== fn)\n        }\n      }\n    }\n\nconst warned = new Set()\nconst deprecatedOption = (opt, instead) => {\n  const code = `LRU_CACHE_OPTION_${opt}`\n  if (shouldWarn(code)) {\n    warn(code, `${opt} option`, `options.${instead}`, LRUCache)\n  }\n}\nconst deprecatedMethod = (method, instead) => {\n  const code = `LRU_CACHE_METHOD_${method}`\n  if (shouldWarn(code)) {\n    const { prototype } = LRUCache\n    const { get } = Object.getOwnPropertyDescriptor(prototype, method)\n    warn(code, `${method} method`, `cache.${instead}()`, get)\n  }\n}\nconst deprecatedProperty = (field, instead) => {\n  const code = `LRU_CACHE_PROPERTY_${field}`\n  if (shouldWarn(code)) {\n    const { prototype } = LRUCache\n    const { get } = Object.getOwnPropertyDescriptor(prototype, field)\n    warn(code, `${field} property`, `cache.${instead}`, get)\n  }\n}\n\nconst emitWarning = (...a) => {\n  typeof process === 'object' &&\n  process &&\n  typeof process.emitWarning === 'function'\n    ? process.emitWarning(...a)\n    : console.error(...a)\n}\n\nconst shouldWarn = code => !warned.has(code)\n\nconst warn = (code, what, instead, fn) => {\n  warned.add(code)\n  const msg = `The ${what} is deprecated. Please use ${instead} instead.`\n  emitWarning(msg, 'DeprecationWarning', code, fn)\n}\n\nconst isPosInt = n => n && n === Math.floor(n) && n > 0 && isFinite(n)\n\n/* istanbul ignore next - This is a little bit ridiculous, tbh.\n * The maximum array length is 2^32-1 or thereabouts on most JS impls.\n * And well before that point, you're caching the entire world, I mean,\n * that's ~32GB of just integers for the next/prev links, plus whatever\n * else to hold that many keys and values.  Just filling the memory with\n * zeroes at init time is brutal when you get that big.\n * But why not be complete?\n * Maybe in the future, these limits will have expanded. */\nconst getUintArray = max =>\n  !isPosInt(max)\n    ? null\n    : max <= Math.pow(2, 8)\n    ? Uint8Array\n    : max <= Math.pow(2, 16)\n    ? Uint16Array\n    : max <= Math.pow(2, 32)\n    ? Uint32Array\n    : max <= Number.MAX_SAFE_INTEGER\n    ? ZeroArray\n    : null\n\nclass ZeroArray extends Array {\n  constructor(size) {\n    super(size)\n    this.fill(0)\n  }\n}\n\nclass Stack {\n  constructor(max) {\n    if (max === 0) {\n      return []\n    }\n    const UintArray = getUintArray(max)\n    this.heap = new UintArray(max)\n    this.length = 0\n  }\n  push(n) {\n    this.heap[this.length++] = n\n  }\n  pop() {\n    return this.heap[--this.length]\n  }\n}\n\nclass LRUCache {\n  constructor(options = {}) {\n    const {\n      max = 0,\n      ttl,\n      ttlResolution = 1,\n      ttlAutopurge,\n      updateAgeOnGet,\n      updateAgeOnHas,\n      allowStale,\n      dispose,\n      disposeAfter,\n      noDisposeOnSet,\n      noUpdateTTL,\n      maxSize = 0,\n      maxEntrySize = 0,\n      sizeCalculation,\n      fetchMethod,\n      fetchContext,\n      noDeleteOnFetchRejection,\n      noDeleteOnStaleGet,\n      allowStaleOnFetchRejection,\n      allowStaleOnFetchAbort,\n      ignoreFetchAbort,\n    } = options\n\n    // deprecated options, don't trigger a warning for getting them if\n    // the thing being passed in is another LRUCache we're copying.\n    const { length, maxAge, stale } =\n      options instanceof LRUCache ? {} : options\n\n    if (max !== 0 && !isPosInt(max)) {\n      throw new TypeError('max option must be a nonnegative integer')\n    }\n\n    const UintArray = max ? getUintArray(max) : Array\n    if (!UintArray) {\n      throw new Error('invalid max value: ' + max)\n    }\n\n    this.max = max\n    this.maxSize = maxSize\n    this.maxEntrySize = maxEntrySize || this.maxSize\n    this.sizeCalculation = sizeCalculation || length\n    if (this.sizeCalculation) {\n      if (!this.maxSize && !this.maxEntrySize) {\n        throw new TypeError(\n          'cannot set sizeCalculation without setting maxSize or maxEntrySize'\n        )\n      }\n      if (typeof this.sizeCalculation !== 'function') {\n        throw new TypeError('sizeCalculation set to non-function')\n      }\n    }\n\n    this.fetchMethod = fetchMethod || null\n    if (this.fetchMethod && typeof this.fetchMethod !== 'function') {\n      throw new TypeError(\n        'fetchMethod must be a function if specified'\n      )\n    }\n\n    this.fetchContext = fetchContext\n    if (!this.fetchMethod && fetchContext !== undefined) {\n      throw new TypeError(\n        'cannot set fetchContext without fetchMethod'\n      )\n    }\n\n    this.keyMap = new Map()\n    this.keyList = new Array(max).fill(null)\n    this.valList = new Array(max).fill(null)\n    this.next = new UintArray(max)\n    this.prev = new UintArray(max)\n    this.head = 0\n    this.tail = 0\n    this.free = new Stack(max)\n    this.initialFill = 1\n    this.size = 0\n\n    if (typeof dispose === 'function') {\n      this.dispose = dispose\n    }\n    if (typeof disposeAfter === 'function') {\n      this.disposeAfter = disposeAfter\n      this.disposed = []\n    } else {\n      this.disposeAfter = null\n      this.disposed = null\n    }\n    this.noDisposeOnSet = !!noDisposeOnSet\n    this.noUpdateTTL = !!noUpdateTTL\n    this.noDeleteOnFetchRejection = !!noDeleteOnFetchRejection\n    this.allowStaleOnFetchRejection = !!allowStaleOnFetchRejection\n    this.allowStaleOnFetchAbort = !!allowStaleOnFetchAbort\n    this.ignoreFetchAbort = !!ignoreFetchAbort\n\n    // NB: maxEntrySize is set to maxSize if it's set\n    if (this.maxEntrySize !== 0) {\n      if (this.maxSize !== 0) {\n        if (!isPosInt(this.maxSize)) {\n          throw new TypeError(\n            'maxSize must be a positive integer if specified'\n          )\n        }\n      }\n      if (!isPosInt(this.maxEntrySize)) {\n        throw new TypeError(\n          'maxEntrySize must be a positive integer if specified'\n        )\n      }\n      this.initializeSizeTracking()\n    }\n\n    this.allowStale = !!allowStale || !!stale\n    this.noDeleteOnStaleGet = !!noDeleteOnStaleGet\n    this.updateAgeOnGet = !!updateAgeOnGet\n    this.updateAgeOnHas = !!updateAgeOnHas\n    this.ttlResolution =\n      isPosInt(ttlResolution) || ttlResolution === 0\n        ? ttlResolution\n        : 1\n    this.ttlAutopurge = !!ttlAutopurge\n    this.ttl = ttl || maxAge || 0\n    if (this.ttl) {\n      if (!isPosInt(this.ttl)) {\n        throw new TypeError(\n          'ttl must be a positive integer if specified'\n        )\n      }\n      this.initializeTTLTracking()\n    }\n\n    // do not allow completely unbounded caches\n    if (this.max === 0 && this.ttl === 0 && this.maxSize === 0) {\n      throw new TypeError(\n        'At least one of max, maxSize, or ttl is required'\n      )\n    }\n    if (!this.ttlAutopurge && !this.max && !this.maxSize) {\n      const code = 'LRU_CACHE_UNBOUNDED'\n      if (shouldWarn(code)) {\n        warned.add(code)\n        const msg =\n          'TTL caching without ttlAutopurge, max, or maxSize can ' +\n          'result in unbounded memory consumption.'\n        emitWarning(msg, 'UnboundedCacheWarning', code, LRUCache)\n      }\n    }\n\n    if (stale) {\n      deprecatedOption('stale', 'allowStale')\n    }\n    if (maxAge) {\n      deprecatedOption('maxAge', 'ttl')\n    }\n    if (length) {\n      deprecatedOption('length', 'sizeCalculation')\n    }\n  }\n\n  getRemainingTTL(key) {\n    return this.has(key, { updateAgeOnHas: false }) ? Infinity : 0\n  }\n\n  initializeTTLTracking() {\n    this.ttls = new ZeroArray(this.max)\n    this.starts = new ZeroArray(this.max)\n\n    this.setItemTTL = (index, ttl, start = perf.now()) => {\n      this.starts[index] = ttl !== 0 ? start : 0\n      this.ttls[index] = ttl\n      if (ttl !== 0 && this.ttlAutopurge) {\n        const t = setTimeout(() => {\n          if (this.isStale(index)) {\n            this.delete(this.keyList[index])\n          }\n        }, ttl + 1)\n        /* istanbul ignore else - unref() not supported on all platforms */\n        if (t.unref) {\n          t.unref()\n        }\n      }\n    }\n\n    this.updateItemAge = index => {\n      this.starts[index] = this.ttls[index] !== 0 ? perf.now() : 0\n    }\n\n    this.statusTTL = (status, index) => {\n      if (status) {\n        status.ttl = this.ttls[index]\n        status.start = this.starts[index]\n        status.now = cachedNow || getNow()\n        status.remainingTTL = status.now + status.ttl - status.start\n      }\n    }\n\n    // debounce calls to perf.now() to 1s so we're not hitting\n    // that costly call repeatedly.\n    let cachedNow = 0\n    const getNow = () => {\n      const n = perf.now()\n      if (this.ttlResolution > 0) {\n        cachedNow = n\n        const t = setTimeout(\n          () => (cachedNow = 0),\n          this.ttlResolution\n        )\n        /* istanbul ignore else - not available on all platforms */\n        if (t.unref) {\n          t.unref()\n        }\n      }\n      return n\n    }\n\n    this.getRemainingTTL = key => {\n      const index = this.keyMap.get(key)\n      if (index === undefined) {\n        return 0\n      }\n      return this.ttls[index] === 0 || this.starts[index] === 0\n        ? Infinity\n        : this.starts[index] +\n            this.ttls[index] -\n            (cachedNow || getNow())\n    }\n\n    this.isStale = index => {\n      return (\n        this.ttls[index] !== 0 &&\n        this.starts[index] !== 0 &&\n        (cachedNow || getNow()) - this.starts[index] >\n          this.ttls[index]\n      )\n    }\n  }\n  updateItemAge(_index) {}\n  statusTTL(_status, _index) {}\n  setItemTTL(_index, _ttl, _start) {}\n  isStale(_index) {\n    return false\n  }\n\n  initializeSizeTracking() {\n    this.calculatedSize = 0\n    this.sizes = new ZeroArray(this.max)\n    this.removeItemSize = index => {\n      this.calculatedSize -= this.sizes[index]\n      this.sizes[index] = 0\n    }\n    this.requireSize = (k, v, size, sizeCalculation) => {\n      // provisionally accept background fetches.\n      // actual value size will be checked when they return.\n      if (this.isBackgroundFetch(v)) {\n        return 0\n      }\n      if (!isPosInt(size)) {\n        if (sizeCalculation) {\n          if (typeof sizeCalculation !== 'function') {\n            throw new TypeError('sizeCalculation must be a function')\n          }\n          size = sizeCalculation(v, k)\n          if (!isPosInt(size)) {\n            throw new TypeError(\n              'sizeCalculation return invalid (expect positive integer)'\n            )\n          }\n        } else {\n          throw new TypeError(\n            'invalid size value (must be positive integer). ' +\n              'When maxSize or maxEntrySize is used, sizeCalculation or size ' +\n              'must be set.'\n          )\n        }\n      }\n      return size\n    }\n    this.addItemSize = (index, size, status) => {\n      this.sizes[index] = size\n      if (this.maxSize) {\n        const maxSize = this.maxSize - this.sizes[index]\n        while (this.calculatedSize > maxSize) {\n          this.evict(true)\n        }\n      }\n      this.calculatedSize += this.sizes[index]\n      if (status) {\n        status.entrySize = size\n        status.totalCalculatedSize = this.calculatedSize\n      }\n    }\n  }\n  removeItemSize(_index) {}\n  addItemSize(_index, _size) {}\n  requireSize(_k, _v, size, sizeCalculation) {\n    if (size || sizeCalculation) {\n      throw new TypeError(\n        'cannot set size without setting maxSize or maxEntrySize on cache'\n      )\n    }\n  }\n\n  *indexes({ allowStale = this.allowStale } = {}) {\n    if (this.size) {\n      for (let i = this.tail; true; ) {\n        if (!this.isValidIndex(i)) {\n          break\n        }\n        if (allowStale || !this.isStale(i)) {\n          yield i\n        }\n        if (i === this.head) {\n          break\n        } else {\n          i = this.prev[i]\n        }\n      }\n    }\n  }\n\n  *rindexes({ allowStale = this.allowStale } = {}) {\n    if (this.size) {\n      for (let i = this.head; true; ) {\n        if (!this.isValidIndex(i)) {\n          break\n        }\n        if (allowStale || !this.isStale(i)) {\n          yield i\n        }\n        if (i === this.tail) {\n          break\n        } else {\n          i = this.next[i]\n        }\n      }\n    }\n  }\n\n  isValidIndex(index) {\n    return (\n      index !== undefined &&\n      this.keyMap.get(this.keyList[index]) === index\n    )\n  }\n\n  *entries() {\n    for (const i of this.indexes()) {\n      if (\n        this.valList[i] !== undefined &&\n        this.keyList[i] !== undefined &&\n        !this.isBackgroundFetch(this.valList[i])\n      ) {\n        yield [this.keyList[i], this.valList[i]]\n      }\n    }\n  }\n  *rentries() {\n    for (const i of this.rindexes()) {\n      if (\n        this.valList[i] !== undefined &&\n        this.keyList[i] !== undefined &&\n        !this.isBackgroundFetch(this.valList[i])\n      ) {\n        yield [this.keyList[i], this.valList[i]]\n      }\n    }\n  }\n\n  *keys() {\n    for (const i of this.indexes()) {\n      if (\n        this.keyList[i] !== undefined &&\n        !this.isBackgroundFetch(this.valList[i])\n      ) {\n        yield this.keyList[i]\n      }\n    }\n  }\n  *rkeys() {\n    for (const i of this.rindexes()) {\n      if (\n        this.keyList[i] !== undefined &&\n        !this.isBackgroundFetch(this.valList[i])\n      ) {\n        yield this.keyList[i]\n      }\n    }\n  }\n\n  *values() {\n    for (const i of this.indexes()) {\n      if (\n        this.valList[i] !== undefined &&\n        !this.isBackgroundFetch(this.valList[i])\n      ) {\n        yield this.valList[i]\n      }\n    }\n  }\n  *rvalues() {\n    for (const i of this.rindexes()) {\n      if (\n        this.valList[i] !== undefined &&\n        !this.isBackgroundFetch(this.valList[i])\n      ) {\n        yield this.valList[i]\n      }\n    }\n  }\n\n  [Symbol.iterator]() {\n    return this.entries()\n  }\n\n  find(fn, getOptions) {\n    for (const i of this.indexes()) {\n      const v = this.valList[i]\n      const value = this.isBackgroundFetch(v)\n        ? v.__staleWhileFetching\n        : v\n      if (value === undefined) continue\n      if (fn(value, this.keyList[i], this)) {\n        return this.get(this.keyList[i], getOptions)\n      }\n    }\n  }\n\n  forEach(fn, thisp = this) {\n    for (const i of this.indexes()) {\n      const v = this.valList[i]\n      const value = this.isBackgroundFetch(v)\n        ? v.__staleWhileFetching\n        : v\n      if (value === undefined) continue\n      fn.call(thisp, value, this.keyList[i], this)\n    }\n  }\n\n  rforEach(fn, thisp = this) {\n    for (const i of this.rindexes()) {\n      const v = this.valList[i]\n      const value = this.isBackgroundFetch(v)\n        ? v.__staleWhileFetching\n        : v\n      if (value === undefined) continue\n      fn.call(thisp, value, this.keyList[i], this)\n    }\n  }\n\n  get prune() {\n    deprecatedMethod('prune', 'purgeStale')\n    return this.purgeStale\n  }\n\n  purgeStale() {\n    let deleted = false\n    for (const i of this.rindexes({ allowStale: true })) {\n      if (this.isStale(i)) {\n        this.delete(this.keyList[i])\n        deleted = true\n      }\n    }\n    return deleted\n  }\n\n  dump() {\n    const arr = []\n    for (const i of this.indexes({ allowStale: true })) {\n      const key = this.keyList[i]\n      const v = this.valList[i]\n      const value = this.isBackgroundFetch(v)\n        ? v.__staleWhileFetching\n        : v\n      if (value === undefined) continue\n      const entry = { value }\n      if (this.ttls) {\n        entry.ttl = this.ttls[i]\n        // always dump the start relative to a portable timestamp\n        // it's ok for this to be a bit slow, it's a rare operation.\n        const age = perf.now() - this.starts[i]\n        entry.start = Math.floor(Date.now() - age)\n      }\n      if (this.sizes) {\n        entry.size = this.sizes[i]\n      }\n      arr.unshift([key, entry])\n    }\n    return arr\n  }\n\n  load(arr) {\n    this.clear()\n    for (const [key, entry] of arr) {\n      if (entry.start) {\n        // entry.start is a portable timestamp, but we may be using\n        // node's performance.now(), so calculate the offset.\n        // it's ok for this to be a bit slow, it's a rare operation.\n        const age = Date.now() - entry.start\n        entry.start = perf.now() - age\n      }\n      this.set(key, entry.value, entry)\n    }\n  }\n\n  dispose(_v, _k, _reason) {}\n\n  set(\n    k,\n    v,\n    {\n      ttl = this.ttl,\n      start,\n      noDisposeOnSet = this.noDisposeOnSet,\n      size = 0,\n      sizeCalculation = this.sizeCalculation,\n      noUpdateTTL = this.noUpdateTTL,\n      status,\n    } = {}\n  ) {\n    size = this.requireSize(k, v, size, sizeCalculation)\n    // if the item doesn't fit, don't do anything\n    // NB: maxEntrySize set to maxSize by default\n    if (this.maxEntrySize && size > this.maxEntrySize) {\n      if (status) {\n        status.set = 'miss'\n        status.maxEntrySizeExceeded = true\n      }\n      // have to delete, in case a background fetch is there already.\n      // in non-async cases, this is a no-op\n      this.delete(k)\n      return this\n    }\n    let index = this.size === 0 ? undefined : this.keyMap.get(k)\n    if (index === undefined) {\n      // addition\n      index = this.newIndex()\n      this.keyList[index] = k\n      this.valList[index] = v\n      this.keyMap.set(k, index)\n      this.next[this.tail] = index\n      this.prev[index] = this.tail\n      this.tail = index\n      this.size++\n      this.addItemSize(index, size, status)\n      if (status) {\n        status.set = 'add'\n      }\n      noUpdateTTL = false\n    } else {\n      // update\n      this.moveToTail(index)\n      const oldVal = this.valList[index]\n      if (v !== oldVal) {\n        if (this.isBackgroundFetch(oldVal)) {\n          oldVal.__abortController.abort(new Error('replaced'))\n        } else {\n          if (!noDisposeOnSet) {\n            this.dispose(oldVal, k, 'set')\n            if (this.disposeAfter) {\n              this.disposed.push([oldVal, k, 'set'])\n            }\n          }\n        }\n        this.removeItemSize(index)\n        this.valList[index] = v\n        this.addItemSize(index, size, status)\n        if (status) {\n          status.set = 'replace'\n          const oldValue =\n            oldVal && this.isBackgroundFetch(oldVal)\n              ? oldVal.__staleWhileFetching\n              : oldVal\n          if (oldValue !== undefined) status.oldValue = oldValue\n        }\n      } else if (status) {\n        status.set = 'update'\n      }\n    }\n    if (ttl !== 0 && this.ttl === 0 && !this.ttls) {\n      this.initializeTTLTracking()\n    }\n    if (!noUpdateTTL) {\n      this.setItemTTL(index, ttl, start)\n    }\n    this.statusTTL(status, index)\n    if (this.disposeAfter) {\n      while (this.disposed.length) {\n        this.disposeAfter(...this.disposed.shift())\n      }\n    }\n    return this\n  }\n\n  newIndex() {\n    if (this.size === 0) {\n      return this.tail\n    }\n    if (this.size === this.max && this.max !== 0) {\n      return this.evict(false)\n    }\n    if (this.free.length !== 0) {\n      return this.free.pop()\n    }\n    // initial fill, just keep writing down the list\n    return this.initialFill++\n  }\n\n  pop() {\n    if (this.size) {\n      const val = this.valList[this.head]\n      this.evict(true)\n      return val\n    }\n  }\n\n  evict(free) {\n    const head = this.head\n    const k = this.keyList[head]\n    const v = this.valList[head]\n    if (this.isBackgroundFetch(v)) {\n      v.__abortController.abort(new Error('evicted'))\n    } else {\n      this.dispose(v, k, 'evict')\n      if (this.disposeAfter) {\n        this.disposed.push([v, k, 'evict'])\n      }\n    }\n    this.removeItemSize(head)\n    // if we aren't about to use the index, then null these out\n    if (free) {\n      this.keyList[head] = null\n      this.valList[head] = null\n      this.free.push(head)\n    }\n    this.head = this.next[head]\n    this.keyMap.delete(k)\n    this.size--\n    return head\n  }\n\n  has(k, { updateAgeOnHas = this.updateAgeOnHas, status } = {}) {\n    const index = this.keyMap.get(k)\n    if (index !== undefined) {\n      if (!this.isStale(index)) {\n        if (updateAgeOnHas) {\n          this.updateItemAge(index)\n        }\n        if (status) status.has = 'hit'\n        this.statusTTL(status, index)\n        return true\n      } else if (status) {\n        status.has = 'stale'\n        this.statusTTL(status, index)\n      }\n    } else if (status) {\n      status.has = 'miss'\n    }\n    return false\n  }\n\n  // like get(), but without any LRU updating or TTL expiration\n  peek(k, { allowStale = this.allowStale } = {}) {\n    const index = this.keyMap.get(k)\n    if (index !== undefined && (allowStale || !this.isStale(index))) {\n      const v = this.valList[index]\n      // either stale and allowed, or forcing a refresh of non-stale value\n      return this.isBackgroundFetch(v) ? v.__staleWhileFetching : v\n    }\n  }\n\n  backgroundFetch(k, index, options, context) {\n    const v = index === undefined ? undefined : this.valList[index]\n    if (this.isBackgroundFetch(v)) {\n      return v\n    }\n    const ac = new AC()\n    if (options.signal) {\n      options.signal.addEventListener('abort', () =>\n        ac.abort(options.signal.reason)\n      )\n    }\n    const fetchOpts = {\n      signal: ac.signal,\n      options,\n      context,\n    }\n    const cb = (v, updateCache = false) => {\n      const { aborted } = ac.signal\n      const ignoreAbort = options.ignoreFetchAbort && v !== undefined\n      if (options.status) {\n        if (aborted && !updateCache) {\n          options.status.fetchAborted = true\n          options.status.fetchError = ac.signal.reason\n          if (ignoreAbort) options.status.fetchAbortIgnored = true\n        } else {\n          options.status.fetchResolved = true\n        }\n      }\n      if (aborted && !ignoreAbort && !updateCache) {\n        return fetchFail(ac.signal.reason)\n      }\n      // either we didn't abort, and are still here, or we did, and ignored\n      if (this.valList[index] === p) {\n        if (v === undefined) {\n          if (p.__staleWhileFetching) {\n            this.valList[index] = p.__staleWhileFetching\n          } else {\n            this.delete(k)\n          }\n        } else {\n          if (options.status) options.status.fetchUpdated = true\n          this.set(k, v, fetchOpts.options)\n        }\n      }\n      return v\n    }\n    const eb = er => {\n      if (options.status) {\n        options.status.fetchRejected = true\n        options.status.fetchError = er\n      }\n      return fetchFail(er)\n    }\n    const fetchFail = er => {\n      const { aborted } = ac.signal\n      const allowStaleAborted =\n        aborted && options.allowStaleOnFetchAbort\n      const allowStale =\n        allowStaleAborted || options.allowStaleOnFetchRejection\n      const noDelete = allowStale || options.noDeleteOnFetchRejection\n      if (this.valList[index] === p) {\n        // if we allow stale on fetch rejections, then we need to ensure that\n        // the stale value is not removed from the cache when the fetch fails.\n        const del = !noDelete || p.__staleWhileFetching === undefined\n        if (del) {\n          this.delete(k)\n        } else if (!allowStaleAborted) {\n          // still replace the *promise* with the stale value,\n          // since we are done with the promise at this point.\n          // leave it untouched if we're still waiting for an\n          // aborted background fetch that hasn't yet returned.\n          this.valList[index] = p.__staleWhileFetching\n        }\n      }\n      if (allowStale) {\n        if (options.status && p.__staleWhileFetching !== undefined) {\n          options.status.returnedStale = true\n        }\n        return p.__staleWhileFetching\n      } else if (p.__returned === p) {\n        throw er\n      }\n    }\n    const pcall = (res, rej) => {\n      this.fetchMethod(k, v, fetchOpts).then(v => res(v), rej)\n      // ignored, we go until we finish, regardless.\n      // defer check until we are actually aborting,\n      // so fetchMethod can override.\n      ac.signal.addEventListener('abort', () => {\n        if (\n          !options.ignoreFetchAbort ||\n          options.allowStaleOnFetchAbort\n        ) {\n          res()\n          // when it eventually resolves, update the cache.\n          if (options.allowStaleOnFetchAbort) {\n            res = v => cb(v, true)\n          }\n        }\n      })\n    }\n    if (options.status) options.status.fetchDispatched = true\n    const p = new Promise(pcall).then(cb, eb)\n    p.__abortController = ac\n    p.__staleWhileFetching = v\n    p.__returned = null\n    if (index === undefined) {\n      // internal, don't expose status.\n      this.set(k, p, { ...fetchOpts.options, status: undefined })\n      index = this.keyMap.get(k)\n    } else {\n      this.valList[index] = p\n    }\n    return p\n  }\n\n  isBackgroundFetch(p) {\n    return (\n      p &&\n      typeof p === 'object' &&\n      typeof p.then === 'function' &&\n      Object.prototype.hasOwnProperty.call(\n        p,\n        '__staleWhileFetching'\n      ) &&\n      Object.prototype.hasOwnProperty.call(p, '__returned') &&\n      (p.__returned === p || p.__returned === null)\n    )\n  }\n\n  // this takes the union of get() and set() opts, because it does both\n  async fetch(\n    k,\n    {\n      // get options\n      allowStale = this.allowStale,\n      updateAgeOnGet = this.updateAgeOnGet,\n      noDeleteOnStaleGet = this.noDeleteOnStaleGet,\n      // set options\n      ttl = this.ttl,\n      noDisposeOnSet = this.noDisposeOnSet,\n      size = 0,\n      sizeCalculation = this.sizeCalculation,\n      noUpdateTTL = this.noUpdateTTL,\n      // fetch exclusive options\n      noDeleteOnFetchRejection = this.noDeleteOnFetchRejection,\n      allowStaleOnFetchRejection = this.allowStaleOnFetchRejection,\n      ignoreFetchAbort = this.ignoreFetchAbort,\n      allowStaleOnFetchAbort = this.allowStaleOnFetchAbort,\n      fetchContext = this.fetchContext,\n      forceRefresh = false,\n      status,\n      signal,\n    } = {}\n  ) {\n    if (!this.fetchMethod) {\n      if (status) status.fetch = 'get'\n      return this.get(k, {\n        allowStale,\n        updateAgeOnGet,\n        noDeleteOnStaleGet,\n        status,\n      })\n    }\n\n    const options = {\n      allowStale,\n      updateAgeOnGet,\n      noDeleteOnStaleGet,\n      ttl,\n      noDisposeOnSet,\n      size,\n      sizeCalculation,\n      noUpdateTTL,\n      noDeleteOnFetchRejection,\n      allowStaleOnFetchRejection,\n      allowStaleOnFetchAbort,\n      ignoreFetchAbort,\n      status,\n      signal,\n    }\n\n    let index = this.keyMap.get(k)\n    if (index === undefined) {\n      if (status) status.fetch = 'miss'\n      const p = this.backgroundFetch(k, index, options, fetchContext)\n      return (p.__returned = p)\n    } else {\n      // in cache, maybe already fetching\n      const v = this.valList[index]\n      if (this.isBackgroundFetch(v)) {\n        const stale =\n          allowStale && v.__staleWhileFetching !== undefined\n        if (status) {\n          status.fetch = 'inflight'\n          if (stale) status.returnedStale = true\n        }\n        return stale ? v.__staleWhileFetching : (v.__returned = v)\n      }\n\n      // if we force a refresh, that means do NOT serve the cached value,\n      // unless we are already in the process of refreshing the cache.\n      const isStale = this.isStale(index)\n      if (!forceRefresh && !isStale) {\n        if (status) status.fetch = 'hit'\n        this.moveToTail(index)\n        if (updateAgeOnGet) {\n          this.updateItemAge(index)\n        }\n        this.statusTTL(status, index)\n        return v\n      }\n\n      // ok, it is stale or a forced refresh, and not already fetching.\n      // refresh the cache.\n      const p = this.backgroundFetch(k, index, options, fetchContext)\n      const hasStale = p.__staleWhileFetching !== undefined\n      const staleVal = hasStale && allowStale\n      if (status) {\n        status.fetch = hasStale && isStale ? 'stale' : 'refresh'\n        if (staleVal && isStale) status.returnedStale = true\n      }\n      return staleVal ? p.__staleWhileFetching : (p.__returned = p)\n    }\n  }\n\n  get(\n    k,\n    {\n      allowStale = this.allowStale,\n      updateAgeOnGet = this.updateAgeOnGet,\n      noDeleteOnStaleGet = this.noDeleteOnStaleGet,\n      status,\n    } = {}\n  ) {\n    const index = this.keyMap.get(k)\n    if (index !== undefined) {\n      const value = this.valList[index]\n      const fetching = this.isBackgroundFetch(value)\n      this.statusTTL(status, index)\n      if (this.isStale(index)) {\n        if (status) status.get = 'stale'\n        // delete only if not an in-flight background fetch\n        if (!fetching) {\n          if (!noDeleteOnStaleGet) {\n            this.delete(k)\n          }\n          if (status) status.returnedStale = allowStale\n          return allowStale ? value : undefined\n        } else {\n          if (status) {\n            status.returnedStale =\n              allowStale && value.__staleWhileFetching !== undefined\n          }\n          return allowStale ? value.__staleWhileFetching : undefined\n        }\n      } else {\n        if (status) status.get = 'hit'\n        // if we're currently fetching it, we don't actually have it yet\n        // it's not stale, which means this isn't a staleWhileRefetching.\n        // If it's not stale, and fetching, AND has a __staleWhileFetching\n        // value, then that means the user fetched with {forceRefresh:true},\n        // so it's safe to return that value.\n        if (fetching) {\n          return value.__staleWhileFetching\n        }\n        this.moveToTail(index)\n        if (updateAgeOnGet) {\n          this.updateItemAge(index)\n        }\n        return value\n      }\n    } else if (status) {\n      status.get = 'miss'\n    }\n  }\n\n  connect(p, n) {\n    this.prev[n] = p\n    this.next[p] = n\n  }\n\n  moveToTail(index) {\n    // if tail already, nothing to do\n    // if head, move head to next[index]\n    // else\n    //   move next[prev[index]] to next[index] (head has no prev)\n    //   move prev[next[index]] to prev[index]\n    // prev[index] = tail\n    // next[tail] = index\n    // tail = index\n    if (index !== this.tail) {\n      if (index === this.head) {\n        this.head = this.next[index]\n      } else {\n        this.connect(this.prev[index], this.next[index])\n      }\n      this.connect(this.tail, index)\n      this.tail = index\n    }\n  }\n\n  get del() {\n    deprecatedMethod('del', 'delete')\n    return this.delete\n  }\n\n  delete(k) {\n    let deleted = false\n    if (this.size !== 0) {\n      const index = this.keyMap.get(k)\n      if (index !== undefined) {\n        deleted = true\n        if (this.size === 1) {\n          this.clear()\n        } else {\n          this.removeItemSize(index)\n          const v = this.valList[index]\n          if (this.isBackgroundFetch(v)) {\n            v.__abortController.abort(new Error('deleted'))\n          } else {\n            this.dispose(v, k, 'delete')\n            if (this.disposeAfter) {\n              this.disposed.push([v, k, 'delete'])\n            }\n          }\n          this.keyMap.delete(k)\n          this.keyList[index] = null\n          this.valList[index] = null\n          if (index === this.tail) {\n            this.tail = this.prev[index]\n          } else if (index === this.head) {\n            this.head = this.next[index]\n          } else {\n            this.next[this.prev[index]] = this.next[index]\n            this.prev[this.next[index]] = this.prev[index]\n          }\n          this.size--\n          this.free.push(index)\n        }\n      }\n    }\n    if (this.disposed) {\n      while (this.disposed.length) {\n        this.disposeAfter(...this.disposed.shift())\n      }\n    }\n    return deleted\n  }\n\n  clear() {\n    for (const index of this.rindexes({ allowStale: true })) {\n      const v = this.valList[index]\n      if (this.isBackgroundFetch(v)) {\n        v.__abortController.abort(new Error('deleted'))\n      } else {\n        const k = this.keyList[index]\n        this.dispose(v, k, 'delete')\n        if (this.disposeAfter) {\n          this.disposed.push([v, k, 'delete'])\n        }\n      }\n    }\n\n    this.keyMap.clear()\n    this.valList.fill(null)\n    this.keyList.fill(null)\n    if (this.ttls) {\n      this.ttls.fill(0)\n      this.starts.fill(0)\n    }\n    if (this.sizes) {\n      this.sizes.fill(0)\n    }\n    this.head = 0\n    this.tail = 0\n    this.initialFill = 1\n    this.free.length = 0\n    this.calculatedSize = 0\n    this.size = 0\n    if (this.disposed) {\n      while (this.disposed.length) {\n        this.disposeAfter(...this.disposed.shift())\n      }\n    }\n  }\n\n  get reset() {\n    deprecatedMethod('reset', 'clear')\n    return this.clear\n  }\n\n  get length() {\n    deprecatedProperty('length', 'size')\n    return this.size\n  }\n\n  static get AbortController() {\n    return AC\n  }\n  static get AbortSignal() {\n    return AS\n  }\n}\n\nmodule.exports = LRUCache\n/index.mjsńconst perf =\n  typeof performance === 'object' &&\n  performance &&\n  typeof performance.now === 'function'\n    ? performance\n    : Date\n\nconst hasAbortController = typeof AbortController === 'function'\n\n// minimal backwards-compatibility polyfill\n// this doesn't have nearly all the checks and whatnot that\n// actual AbortController/Signal has, but it's enough for\n// our purposes, and if used properly, behaves the same.\nconst AC = hasAbortController\n  ? AbortController\n  : class AbortController {\n      constructor() {\n        this.signal = new AS()\n      }\n      abort(reason = new Error('This operation was aborted')) {\n        this.signal.reason = this.signal.reason || reason\n        this.signal.aborted = true\n        this.signal.dispatchEvent({\n          type: 'abort',\n          target: this.signal,\n        })\n      }\n    }\n\nconst hasAbortSignal = typeof AbortSignal === 'function'\n// Some polyfills put this on the AC class, not global\nconst hasACAbortSignal = typeof AC.AbortSignal === 'function'\nconst AS = hasAbortSignal\n  ? AbortSignal\n  : hasACAbortSignal\n  ? AC.AbortController\n  : class AbortSignal {\n      constructor() {\n        this.reason = undefined\n        this.aborted = false\n        this._listeners = []\n      }\n      dispatchEvent(e) {\n        if (e.type === 'abort') {\n          this.aborted = true\n          this.onabort(e)\n          this._listeners.forEach(f => f(e), this)\n        }\n      }\n      onabort() {}\n      addEventListener(ev, fn) {\n        if (ev === 'abort') {\n          this._listeners.push(fn)\n        }\n      }\n      removeEventListener(ev, fn) {\n        if (ev === 'abort') {\n          this._listeners = this._listeners.filter(f => f !== fn)\n        }\n      }\n    }\n\nconst warned = new Set()\nconst deprecatedOption = (opt, instead) => {\n  const code = `LRU_CACHE_OPTION_${opt}`\n  if (shouldWarn(code)) {\n    warn(code, `${opt} option`, `options.${instead}`, LRUCache)\n  }\n}\nconst deprecatedMethod = (method, instead) => {\n  const code = `LRU_CACHE_METHOD_${method}`\n  if (shouldWarn(code)) {\n    const { prototype } = LRUCache\n    const { get } = Object.getOwnPropertyDescriptor(prototype, method)\n    warn(code, `${method} method`, `cache.${instead}()`, get)\n  }\n}\nconst deprecatedProperty = (field, instead) => {\n  const code = `LRU_CACHE_PROPERTY_${field}`\n  if (shouldWarn(code)) {\n    const { prototype } = LRUCache\n    const { get } = Object.getOwnPropertyDescriptor(prototype, field)\n    warn(code, `${field} property`, `cache.${instead}`, get)\n  }\n}\n\nconst emitWarning = (...a) => {\n  typeof process === 'object' &&\n  process &&\n  typeof process.emitWarning === 'function'\n    ? process.emitWarning(...a)\n    : console.error(...a)\n}\n\nconst shouldWarn = code => !warned.has(code)\n\nconst warn = (code, what, instead, fn) => {\n  warned.add(code)\n  const msg = `The ${what} is deprecated. Please use ${instead} instead.`\n  emitWarning(msg, 'DeprecationWarning', code, fn)\n}\n\nconst isPosInt = n => n && n === Math.floor(n) && n > 0 && isFinite(n)\n\n/* istanbul ignore next - This is a little bit ridiculous, tbh.\n * The maximum array length is 2^32-1 or thereabouts on most JS impls.\n * And well before that point, you're caching the entire world, I mean,\n * that's ~32GB of just integers for the next/prev links, plus whatever\n * else to hold that many keys and values.  Just filling the memory with\n * zeroes at init time is brutal when you get that big.\n * But why not be complete?\n * Maybe in the future, these limits will have expanded. */\nconst getUintArray = max =>\n  !isPosInt(max)\n    ? null\n    : max <= Math.pow(2, 8)\n    ? Uint8Array\n    : max <= Math.pow(2, 16)\n    ? Uint16Array\n    : max <= Math.pow(2, 32)\n    ? Uint32Array\n    : max <= Number.MAX_SAFE_INTEGER\n    ? ZeroArray\n    : null\n\nclass ZeroArray extends Array {\n  constructor(size) {\n    super(size)\n    this.fill(0)\n  }\n}\n\nclass Stack {\n  constructor(max) {\n    if (max === 0) {\n      return []\n    }\n    const UintArray = getUintArray(max)\n    this.heap = new UintArray(max)\n    this.length = 0\n  }\n  push(n) {\n    this.heap[this.length++] = n\n  }\n  pop() {\n    return this.heap[--this.length]\n  }\n}\n\nclass LRUCache {\n  constructor(options = {}) {\n    const {\n      max = 0,\n      ttl,\n      ttlResolution = 1,\n      ttlAutopurge,\n      updateAgeOnGet,\n      updateAgeOnHas,\n      allowStale,\n      dispose,\n      disposeAfter,\n      noDisposeOnSet,\n      noUpdateTTL,\n      maxSize = 0,\n      maxEntrySize = 0,\n      sizeCalculation,\n      fetchMethod,\n      fetchContext,\n      noDeleteOnFetchRejection,\n      noDeleteOnStaleGet,\n      allowStaleOnFetchRejection,\n      allowStaleOnFetchAbort,\n      ignoreFetchAbort,\n    } = options\n\n    // deprecated options, don't trigger a warning for getting them if\n    // the thing being passed in is another LRUCache we're copying.\n    const { length, maxAge, stale } =\n      options instanceof LRUCache ? {} : options\n\n    if (max !== 0 && !isPosInt(max)) {\n      throw new TypeError('max option must be a nonnegative integer')\n    }\n\n    const UintArray = max ? getUintArray(max) : Array\n    if (!UintArray) {\n      throw new Error('invalid max value: ' + max)\n    }\n\n    this.max = max\n    this.maxSize = maxSize\n    this.maxEntrySize = maxEntrySize || this.maxSize\n    this.sizeCalculation = sizeCalculation || length\n    if (this.sizeCalculation) {\n      if (!this.maxSize && !this.maxEntrySize) {\n        throw new TypeError(\n          'cannot set sizeCalculation without setting maxSize or maxEntrySize'\n        )\n      }\n      if (typeof this.sizeCalculation !== 'function') {\n        throw new TypeError('sizeCalculation set to non-function')\n      }\n    }\n\n    this.fetchMethod = fetchMethod || null\n    if (this.fetchMethod && typeof this.fetchMethod !== 'function') {\n      throw new TypeError(\n        'fetchMethod must be a function if specified'\n      )\n    }\n\n    this.fetchContext = fetchContext\n    if (!this.fetchMethod && fetchContext !== undefined) {\n      throw new TypeError(\n        'cannot set fetchContext without fetchMethod'\n      )\n    }\n\n    this.keyMap = new Map()\n    this.keyList = new Array(max).fill(null)\n    this.valList = new Array(max).fill(null)\n    this.next = new UintArray(max)\n    this.prev = new UintArray(max)\n    this.head = 0\n    this.tail = 0\n    this.free = new Stack(max)\n    this.initialFill = 1\n    this.size = 0\n\n    if (typeof dispose === 'function') {\n      this.dispose = dispose\n    }\n    if (typeof disposeAfter === 'function') {\n      this.disposeAfter = disposeAfter\n      this.disposed = []\n    } else {\n      this.disposeAfter = null\n      this.disposed = null\n    }\n    this.noDisposeOnSet = !!noDisposeOnSet\n    this.noUpdateTTL = !!noUpdateTTL\n    this.noDeleteOnFetchRejection = !!noDeleteOnFetchRejection\n    this.allowStaleOnFetchRejection = !!allowStaleOnFetchRejection\n    this.allowStaleOnFetchAbort = !!allowStaleOnFetchAbort\n    this.ignoreFetchAbort = !!ignoreFetchAbort\n\n    // NB: maxEntrySize is set to maxSize if it's set\n    if (this.maxEntrySize !== 0) {\n      if (this.maxSize !== 0) {\n        if (!isPosInt(this.maxSize)) {\n          throw new TypeError(\n            'maxSize must be a positive integer if specified'\n          )\n        }\n      }\n      if (!isPosInt(this.maxEntrySize)) {\n        throw new TypeError(\n          'maxEntrySize must be a positive integer if specified'\n        )\n      }\n      this.initializeSizeTracking()\n    }\n\n    this.allowStale = !!allowStale || !!stale\n    this.noDeleteOnStaleGet = !!noDeleteOnStaleGet\n    this.updateAgeOnGet = !!updateAgeOnGet\n    this.updateAgeOnHas = !!updateAgeOnHas\n    this.ttlResolution =\n      isPosInt(ttlResolution) || ttlResolution === 0\n        ? ttlResolution\n        : 1\n    this.ttlAutopurge = !!ttlAutopurge\n    this.ttl = ttl || maxAge || 0\n    if (this.ttl) {\n      if (!isPosInt(this.ttl)) {\n        throw new TypeError(\n          'ttl must be a positive integer if specified'\n        )\n      }\n      this.initializeTTLTracking()\n    }\n\n    // do not allow completely unbounded caches\n    if (this.max === 0 && this.ttl === 0 && this.maxSize === 0) {\n      throw new TypeError(\n        'At least one of max, maxSize, or ttl is required'\n      )\n    }\n    if (!this.ttlAutopurge && !this.max && !this.maxSize) {\n      const code = 'LRU_CACHE_UNBOUNDED'\n      if (shouldWarn(code)) {\n        warned.add(code)\n        const msg =\n          'TTL caching without ttlAutopurge, max, or maxSize can ' +\n          'result in unbounded memory consumption.'\n        emitWarning(msg, 'UnboundedCacheWarning', code, LRUCache)\n      }\n    }\n\n    if (stale) {\n      deprecatedOption('stale', 'allowStale')\n    }\n    if (maxAge) {\n      deprecatedOption('maxAge', 'ttl')\n    }\n    if (length) {\n      deprecatedOption('length', 'sizeCalculation')\n    }\n  }\n\n  getRemainingTTL(key) {\n    return this.has(key, { updateAgeOnHas: false }) ? Infinity : 0\n  }\n\n  initializeTTLTracking() {\n    this.ttls = new ZeroArray(this.max)\n    this.starts = new ZeroArray(this.max)\n\n    this.setItemTTL = (index, ttl, start = perf.now()) => {\n      this.starts[index] = ttl !== 0 ? start : 0\n      this.ttls[index] = ttl\n      if (ttl !== 0 && this.ttlAutopurge) {\n        const t = setTimeout(() => {\n          if (this.isStale(index)) {\n            this.delete(this.keyList[index])\n          }\n        }, ttl + 1)\n        /* istanbul ignore else - unref() not supported on all platforms */\n        if (t.unref) {\n          t.unref()\n        }\n      }\n    }\n\n    this.updateItemAge = index => {\n      this.starts[index] = this.ttls[index] !== 0 ? perf.now() : 0\n    }\n\n    this.statusTTL = (status, index) => {\n      if (status) {\n        status.ttl = this.ttls[index]\n        status.start = this.starts[index]\n        status.now = cachedNow || getNow()\n        status.remainingTTL = status.now + status.ttl - status.start\n      }\n    }\n\n    // debounce calls to perf.now() to 1s so we're not hitting\n    // that costly call repeatedly.\n    let cachedNow = 0\n    const getNow = () => {\n      const n = perf.now()\n      if (this.ttlResolution > 0) {\n        cachedNow = n\n        const t = setTimeout(\n          () => (cachedNow = 0),\n          this.ttlResolution\n        )\n        /* istanbul ignore else - not available on all platforms */\n        if (t.unref) {\n          t.unref()\n        }\n      }\n      return n\n    }\n\n    this.getRemainingTTL = key => {\n      const index = this.keyMap.get(key)\n      if (index === undefined) {\n        return 0\n      }\n      return this.ttls[index] === 0 || this.starts[index] === 0\n        ? Infinity\n        : this.starts[index] +\n            this.ttls[index] -\n            (cachedNow || getNow())\n    }\n\n    this.isStale = index => {\n      return (\n        this.ttls[index] !== 0 &&\n        this.starts[index] !== 0 &&\n        (cachedNow || getNow()) - this.starts[index] >\n          this.ttls[index]\n      )\n    }\n  }\n  updateItemAge(_index) {}\n  statusTTL(_status, _index) {}\n  setItemTTL(_index, _ttl, _start) {}\n  isStale(_index) {\n    return false\n  }\n\n  initializeSizeTracking() {\n    this.calculatedSize = 0\n    this.sizes = new ZeroArray(this.max)\n    this.removeItemSize = index => {\n      this.calculatedSize -= this.sizes[index]\n      this.sizes[index] = 0\n    }\n    this.requireSize = (k, v, size, sizeCalculation) => {\n      // provisionally accept background fetches.\n      // actual value size will be checked when they return.\n      if (this.isBackgroundFetch(v)) {\n        return 0\n      }\n      if (!isPosInt(size)) {\n        if (sizeCalculation) {\n          if (typeof sizeCalculation !== 'function') {\n            throw new TypeError('sizeCalculation must be a function')\n          }\n          size = sizeCalculation(v, k)\n          if (!isPosInt(size)) {\n            throw new TypeError(\n              'sizeCalculation return invalid (expect positive integer)'\n            )\n          }\n        } else {\n          throw new TypeError(\n            'invalid size value (must be positive integer). ' +\n              'When maxSize or maxEntrySize is used, sizeCalculation or size ' +\n              'must be set.'\n          )\n        }\n      }\n      return size\n    }\n    this.addItemSize = (index, size, status) => {\n      this.sizes[index] = size\n      if (this.maxSize) {\n        const maxSize = this.maxSize - this.sizes[index]\n        while (this.calculatedSize > maxSize) {\n          this.evict(true)\n        }\n      }\n      this.calculatedSize += this.sizes[index]\n      if (status) {\n        status.entrySize = size\n        status.totalCalculatedSize = this.calculatedSize\n      }\n    }\n  }\n  removeItemSize(_index) {}\n  addItemSize(_index, _size) {}\n  requireSize(_k, _v, size, sizeCalculation) {\n    if (size || sizeCalculation) {\n      throw new TypeError(\n        'cannot set size without setting maxSize or maxEntrySize on cache'\n      )\n    }\n  }\n\n  *indexes({ allowStale = this.allowStale } = {}) {\n    if (this.size) {\n      for (let i = this.tail; true; ) {\n        if (!this.isValidIndex(i)) {\n          break\n        }\n        if (allowStale || !this.isStale(i)) {\n          yield i\n        }\n        if (i === this.head) {\n          break\n        } else {\n          i = this.prev[i]\n        }\n      }\n    }\n  }\n\n  *rindexes({ allowStale = this.allowStale } = {}) {\n    if (this.size) {\n      for (let i = this.head; true; ) {\n        if (!this.isValidIndex(i)) {\n          break\n        }\n        if (allowStale || !this.isStale(i)) {\n          yield i\n        }\n        if (i === this.tail) {\n          break\n        } else {\n          i = this.next[i]\n        }\n      }\n    }\n  }\n\n  isValidIndex(index) {\n    return (\n      index !== undefined &&\n      this.keyMap.get(this.keyList[index]) === index\n    )\n  }\n\n  *entries() {\n    for (const i of this.indexes()) {\n      if (\n        this.valList[i] !== undefined &&\n        this.keyList[i] !== undefined &&\n        !this.isBackgroundFetch(this.valList[i])\n      ) {\n        yield [this.keyList[i], this.valList[i]]\n      }\n    }\n  }\n  *rentries() {\n    for (const i of this.rindexes()) {\n      if (\n        this.valList[i] !== undefined &&\n        this.keyList[i] !== undefined &&\n        !this.isBackgroundFetch(this.valList[i])\n      ) {\n        yield [this.keyList[i], this.valList[i]]\n      }\n    }\n  }\n\n  *keys() {\n    for (const i of this.indexes()) {\n      if (\n        this.keyList[i] !== undefined &&\n        !this.isBackgroundFetch(this.valList[i])\n      ) {\n        yield this.keyList[i]\n      }\n    }\n  }\n  *rkeys() {\n    for (const i of this.rindexes()) {\n      if (\n        this.keyList[i] !== undefined &&\n        !this.isBackgroundFetch(this.valList[i])\n      ) {\n        yield this.keyList[i]\n      }\n    }\n  }\n\n  *values() {\n    for (const i of this.indexes()) {\n      if (\n        this.valList[i] !== undefined &&\n        !this.isBackgroundFetch(this.valList[i])\n      ) {\n        yield this.valList[i]\n      }\n    }\n  }\n  *rvalues() {\n    for (const i of this.rindexes()) {\n      if (\n        this.valList[i] !== undefined &&\n        !this.isBackgroundFetch(this.valList[i])\n      ) {\n        yield this.valList[i]\n      }\n    }\n  }\n\n  [Symbol.iterator]() {\n    return this.entries()\n  }\n\n  find(fn, getOptions) {\n    for (const i of this.indexes()) {\n      const v = this.valList[i]\n      const value = this.isBackgroundFetch(v)\n        ? v.__staleWhileFetching\n        : v\n      if (value === undefined) continue\n      if (fn(value, this.keyList[i], this)) {\n        return this.get(this.keyList[i], getOptions)\n      }\n    }\n  }\n\n  forEach(fn, thisp = this) {\n    for (const i of this.indexes()) {\n      const v = this.valList[i]\n      const value = this.isBackgroundFetch(v)\n        ? v.__staleWhileFetching\n        : v\n      if (value === undefined) continue\n      fn.call(thisp, value, this.keyList[i], this)\n    }\n  }\n\n  rforEach(fn, thisp = this) {\n    for (const i of this.rindexes()) {\n      const v = this.valList[i]\n      const value = this.isBackgroundFetch(v)\n        ? v.__staleWhileFetching\n        : v\n      if (value === undefined) continue\n      fn.call(thisp, value, this.keyList[i], this)\n    }\n  }\n\n  get prune() {\n    deprecatedMethod('prune', 'purgeStale')\n    return this.purgeStale\n  }\n\n  purgeStale() {\n    let deleted = false\n    for (const i of this.rindexes({ allowStale: true })) {\n      if (this.isStale(i)) {\n        this.delete(this.keyList[i])\n        deleted = true\n      }\n    }\n    return deleted\n  }\n\n  dump() {\n    const arr = []\n    for (const i of this.indexes({ allowStale: true })) {\n      const key = this.keyList[i]\n      const v = this.valList[i]\n      const value = this.isBackgroundFetch(v)\n        ? v.__staleWhileFetching\n        : v\n      if (value === undefined) continue\n      const entry = { value }\n      if (this.ttls) {\n        entry.ttl = this.ttls[i]\n        // always dump the start relative to a portable timestamp\n        // it's ok for this to be a bit slow, it's a rare operation.\n        const age = perf.now() - this.starts[i]\n        entry.start = Math.floor(Date.now() - age)\n      }\n      if (this.sizes) {\n        entry.size = this.sizes[i]\n      }\n      arr.unshift([key, entry])\n    }\n    return arr\n  }\n\n  load(arr) {\n    this.clear()\n    for (const [key, entry] of arr) {\n      if (entry.start) {\n        // entry.start is a portable timestamp, but we may be using\n        // node's performance.now(), so calculate the offset.\n        // it's ok for this to be a bit slow, it's a rare operation.\n        const age = Date.now() - entry.start\n        entry.start = perf.now() - age\n      }\n      this.set(key, entry.value, entry)\n    }\n  }\n\n  dispose(_v, _k, _reason) {}\n\n  set(\n    k,\n    v,\n    {\n      ttl = this.ttl,\n      start,\n      noDisposeOnSet = this.noDisposeOnSet,\n      size = 0,\n      sizeCalculation = this.sizeCalculation,\n      noUpdateTTL = this.noUpdateTTL,\n      status,\n    } = {}\n  ) {\n    size = this.requireSize(k, v, size, sizeCalculation)\n    // if the item doesn't fit, don't do anything\n    // NB: maxEntrySize set to maxSize by default\n    if (this.maxEntrySize && size > this.maxEntrySize) {\n      if (status) {\n        status.set = 'miss'\n        status.maxEntrySizeExceeded = true\n      }\n      // have to delete, in case a background fetch is there already.\n      // in non-async cases, this is a no-op\n      this.delete(k)\n      return this\n    }\n    let index = this.size === 0 ? undefined : this.keyMap.get(k)\n    if (index === undefined) {\n      // addition\n      index = this.newIndex()\n      this.keyList[index] = k\n      this.valList[index] = v\n      this.keyMap.set(k, index)\n      this.next[this.tail] = index\n      this.prev[index] = this.tail\n      this.tail = index\n      this.size++\n      this.addItemSize(index, size, status)\n      if (status) {\n        status.set = 'add'\n      }\n      noUpdateTTL = false\n    } else {\n      // update\n      this.moveToTail(index)\n      const oldVal = this.valList[index]\n      if (v !== oldVal) {\n        if (this.isBackgroundFetch(oldVal)) {\n          oldVal.__abortController.abort(new Error('replaced'))\n        } else {\n          if (!noDisposeOnSet) {\n            this.dispose(oldVal, k, 'set')\n            if (this.disposeAfter) {\n              this.disposed.push([oldVal, k, 'set'])\n            }\n          }\n        }\n        this.removeItemSize(index)\n        this.valList[index] = v\n        this.addItemSize(index, size, status)\n        if (status) {\n          status.set = 'replace'\n          const oldValue =\n            oldVal && this.isBackgroundFetch(oldVal)\n              ? oldVal.__staleWhileFetching\n              : oldVal\n          if (oldValue !== undefined) status.oldValue = oldValue\n        }\n      } else if (status) {\n        status.set = 'update'\n      }\n    }\n    if (ttl !== 0 && this.ttl === 0 && !this.ttls) {\n      this.initializeTTLTracking()\n    }\n    if (!noUpdateTTL) {\n      this.setItemTTL(index, ttl, start)\n    }\n    this.statusTTL(status, index)\n    if (this.disposeAfter) {\n      while (this.disposed.length) {\n        this.disposeAfter(...this.disposed.shift())\n      }\n    }\n    return this\n  }\n\n  newIndex() {\n    if (this.size === 0) {\n      return this.tail\n    }\n    if (this.size === this.max && this.max !== 0) {\n      return this.evict(false)\n    }\n    if (this.free.length !== 0) {\n      return this.free.pop()\n    }\n    // initial fill, just keep writing down the list\n    return this.initialFill++\n  }\n\n  pop() {\n    if (this.size) {\n      const val = this.valList[this.head]\n      this.evict(true)\n      return val\n    }\n  }\n\n  evict(free) {\n    const head = this.head\n    const k = this.keyList[head]\n    const v = this.valList[head]\n    if (this.isBackgroundFetch(v)) {\n      v.__abortController.abort(new Error('evicted'))\n    } else {\n      this.dispose(v, k, 'evict')\n      if (this.disposeAfter) {\n        this.disposed.push([v, k, 'evict'])\n      }\n    }\n    this.removeItemSize(head)\n    // if we aren't about to use the index, then null these out\n    if (free) {\n      this.keyList[head] = null\n      this.valList[head] = null\n      this.free.push(head)\n    }\n    this.head = this.next[head]\n    this.keyMap.delete(k)\n    this.size--\n    return head\n  }\n\n  has(k, { updateAgeOnHas = this.updateAgeOnHas, status } = {}) {\n    const index = this.keyMap.get(k)\n    if (index !== undefined) {\n      if (!this.isStale(index)) {\n        if (updateAgeOnHas) {\n          this.updateItemAge(index)\n        }\n        if (status) status.has = 'hit'\n        this.statusTTL(status, index)\n        return true\n      } else if (status) {\n        status.has = 'stale'\n        this.statusTTL(status, index)\n      }\n    } else if (status) {\n      status.has = 'miss'\n    }\n    return false\n  }\n\n  // like get(), but without any LRU updating or TTL expiration\n  peek(k, { allowStale = this.allowStale } = {}) {\n    const index = this.keyMap.get(k)\n    if (index !== undefined && (allowStale || !this.isStale(index))) {\n      const v = this.valList[index]\n      // either stale and allowed, or forcing a refresh of non-stale value\n      return this.isBackgroundFetch(v) ? v.__staleWhileFetching : v\n    }\n  }\n\n  backgroundFetch(k, index, options, context) {\n    const v = index === undefined ? undefined : this.valList[index]\n    if (this.isBackgroundFetch(v)) {\n      return v\n    }\n    const ac = new AC()\n    if (options.signal) {\n      options.signal.addEventListener('abort', () =>\n        ac.abort(options.signal.reason)\n      )\n    }\n    const fetchOpts = {\n      signal: ac.signal,\n      options,\n      context,\n    }\n    const cb = (v, updateCache = false) => {\n      const { aborted } = ac.signal\n      const ignoreAbort = options.ignoreFetchAbort && v !== undefined\n      if (options.status) {\n        if (aborted && !updateCache) {\n          options.status.fetchAborted = true\n          options.status.fetchError = ac.signal.reason\n          if (ignoreAbort) options.status.fetchAbortIgnored = true\n        } else {\n          options.status.fetchResolved = true\n        }\n      }\n      if (aborted && !ignoreAbort && !updateCache) {\n        return fetchFail(ac.signal.reason)\n      }\n      // either we didn't abort, and are still here, or we did, and ignored\n      if (this.valList[index] === p) {\n        if (v === undefined) {\n          if (p.__staleWhileFetching) {\n            this.valList[index] = p.__staleWhileFetching\n          } else {\n            this.delete(k)\n          }\n        } else {\n          if (options.status) options.status.fetchUpdated = true\n          this.set(k, v, fetchOpts.options)\n        }\n      }\n      return v\n    }\n    const eb = er => {\n      if (options.status) {\n        options.status.fetchRejected = true\n        options.status.fetchError = er\n      }\n      return fetchFail(er)\n    }\n    const fetchFail = er => {\n      const { aborted } = ac.signal\n      const allowStaleAborted =\n        aborted && options.allowStaleOnFetchAbort\n      const allowStale =\n        allowStaleAborted || options.allowStaleOnFetchRejection\n      const noDelete = allowStale || options.noDeleteOnFetchRejection\n      if (this.valList[index] === p) {\n        // if we allow stale on fetch rejections, then we need to ensure that\n        // the stale value is not removed from the cache when the fetch fails.\n        const del = !noDelete || p.__staleWhileFetching === undefined\n        if (del) {\n          this.delete(k)\n        } else if (!allowStaleAborted) {\n          // still replace the *promise* with the stale value,\n          // since we are done with the promise at this point.\n          // leave it untouched if we're still waiting for an\n          // aborted background fetch that hasn't yet returned.\n          this.valList[index] = p.__staleWhileFetching\n        }\n      }\n      if (allowStale) {\n        if (options.status && p.__staleWhileFetching !== undefined) {\n          options.status.returnedStale = true\n        }\n        return p.__staleWhileFetching\n      } else if (p.__returned === p) {\n        throw er\n      }\n    }\n    const pcall = (res, rej) => {\n      this.fetchMethod(k, v, fetchOpts).then(v => res(v), rej)\n      // ignored, we go until we finish, regardless.\n      // defer check until we are actually aborting,\n      // so fetchMethod can override.\n      ac.signal.addEventListener('abort', () => {\n        if (\n          !options.ignoreFetchAbort ||\n          options.allowStaleOnFetchAbort\n        ) {\n          res()\n          // when it eventually resolves, update the cache.\n          if (options.allowStaleOnFetchAbort) {\n            res = v => cb(v, true)\n          }\n        }\n      })\n    }\n    if (options.status) options.status.fetchDispatched = true\n    const p = new Promise(pcall).then(cb, eb)\n    p.__abortController = ac\n    p.__staleWhileFetching = v\n    p.__returned = null\n    if (index === undefined) {\n      // internal, don't expose status.\n      this.set(k, p, { ...fetchOpts.options, status: undefined })\n      index = this.keyMap.get(k)\n    } else {\n      this.valList[index] = p\n    }\n    return p\n  }\n\n  isBackgroundFetch(p) {\n    return (\n      p &&\n      typeof p === 'object' &&\n      typeof p.then === 'function' &&\n      Object.prototype.hasOwnProperty.call(\n        p,\n        '__staleWhileFetching'\n      ) &&\n      Object.prototype.hasOwnProperty.call(p, '__returned') &&\n      (p.__returned === p || p.__returned === null)\n    )\n  }\n\n  // this takes the union of get() and set() opts, because it does both\n  async fetch(\n    k,\n    {\n      // get options\n      allowStale = this.allowStale,\n      updateAgeOnGet = this.updateAgeOnGet,\n      noDeleteOnStaleGet = this.noDeleteOnStaleGet,\n      // set options\n      ttl = this.ttl,\n      noDisposeOnSet = this.noDisposeOnSet,\n      size = 0,\n      sizeCalculation = this.sizeCalculation,\n      noUpdateTTL = this.noUpdateTTL,\n      // fetch exclusive options\n      noDeleteOnFetchRejection = this.noDeleteOnFetchRejection,\n      allowStaleOnFetchRejection = this.allowStaleOnFetchRejection,\n      ignoreFetchAbort = this.ignoreFetchAbort,\n      allowStaleOnFetchAbort = this.allowStaleOnFetchAbort,\n      fetchContext = this.fetchContext,\n      forceRefresh = false,\n      status,\n      signal,\n    } = {}\n  ) {\n    if (!this.fetchMethod) {\n      if (status) status.fetch = 'get'\n      return this.get(k, {\n        allowStale,\n        updateAgeOnGet,\n        noDeleteOnStaleGet,\n        status,\n      })\n    }\n\n    const options = {\n      allowStale,\n      updateAgeOnGet,\n      noDeleteOnStaleGet,\n      ttl,\n      noDisposeOnSet,\n      size,\n      sizeCalculation,\n      noUpdateTTL,\n      noDeleteOnFetchRejection,\n      allowStaleOnFetchRejection,\n      allowStaleOnFetchAbort,\n      ignoreFetchAbort,\n      status,\n      signal,\n    }\n\n    let index = this.keyMap.get(k)\n    if (index === undefined) {\n      if (status) status.fetch = 'miss'\n      const p = this.backgroundFetch(k, index, options, fetchContext)\n      return (p.__returned = p)\n    } else {\n      // in cache, maybe already fetching\n      const v = this.valList[index]\n      if (this.isBackgroundFetch(v)) {\n        const stale =\n          allowStale && v.__staleWhileFetching !== undefined\n        if (status) {\n          status.fetch = 'inflight'\n          if (stale) status.returnedStale = true\n        }\n        return stale ? v.__staleWhileFetching : (v.__returned = v)\n      }\n\n      // if we force a refresh, that means do NOT serve the cached value,\n      // unless we are already in the process of refreshing the cache.\n      const isStale = this.isStale(index)\n      if (!forceRefresh && !isStale) {\n        if (status) status.fetch = 'hit'\n        this.moveToTail(index)\n        if (updateAgeOnGet) {\n          this.updateItemAge(index)\n        }\n        this.statusTTL(status, index)\n        return v\n      }\n\n      // ok, it is stale or a forced refresh, and not already fetching.\n      // refresh the cache.\n      const p = this.backgroundFetch(k, index, options, fetchContext)\n      const hasStale = p.__staleWhileFetching !== undefined\n      const staleVal = hasStale && allowStale\n      if (status) {\n        status.fetch = hasStale && isStale ? 'stale' : 'refresh'\n        if (staleVal && isStale) status.returnedStale = true\n      }\n      return staleVal ? p.__staleWhileFetching : (p.__returned = p)\n    }\n  }\n\n  get(\n    k,\n    {\n      allowStale = this.allowStale,\n      updateAgeOnGet = this.updateAgeOnGet,\n      noDeleteOnStaleGet = this.noDeleteOnStaleGet,\n      status,\n    } = {}\n  ) {\n    const index = this.keyMap.get(k)\n    if (index !== undefined) {\n      const value = this.valList[index]\n      const fetching = this.isBackgroundFetch(value)\n      this.statusTTL(status, index)\n      if (this.isStale(index)) {\n        if (status) status.get = 'stale'\n        // delete only if not an in-flight background fetch\n        if (!fetching) {\n          if (!noDeleteOnStaleGet) {\n            this.delete(k)\n          }\n          if (status) status.returnedStale = allowStale\n          return allowStale ? value : undefined\n        } else {\n          if (status) {\n            status.returnedStale =\n              allowStale && value.__staleWhileFetching !== undefined\n          }\n          return allowStale ? value.__staleWhileFetching : undefined\n        }\n      } else {\n        if (status) status.get = 'hit'\n        // if we're currently fetching it, we don't actually have it yet\n        // it's not stale, which means this isn't a staleWhileRefetching.\n        // If it's not stale, and fetching, AND has a __staleWhileFetching\n        // value, then that means the user fetched with {forceRefresh:true},\n        // so it's safe to return that value.\n        if (fetching) {\n          return value.__staleWhileFetching\n        }\n        this.moveToTail(index)\n        if (updateAgeOnGet) {\n          this.updateItemAge(index)\n        }\n        return value\n      }\n    } else if (status) {\n      status.get = 'miss'\n    }\n  }\n\n  connect(p, n) {\n    this.prev[n] = p\n    this.next[p] = n\n  }\n\n  moveToTail(index) {\n    // if tail already, nothing to do\n    // if head, move head to next[index]\n    // else\n    //   move next[prev[index]] to next[index] (head has no prev)\n    //   move prev[next[index]] to prev[index]\n    // prev[index] = tail\n    // next[tail] = index\n    // tail = index\n    if (index !== this.tail) {\n      if (index === this.head) {\n        this.head = this.next[index]\n      } else {\n        this.connect(this.prev[index], this.next[index])\n      }\n      this.connect(this.tail, index)\n      this.tail = index\n    }\n  }\n\n  get del() {\n    deprecatedMethod('del', 'delete')\n    return this.delete\n  }\n\n  delete(k) {\n    let deleted = false\n    if (this.size !== 0) {\n      const index = this.keyMap.get(k)\n      if (index !== undefined) {\n        deleted = true\n        if (this.size === 1) {\n          this.clear()\n        } else {\n          this.removeItemSize(index)\n          const v = this.valList[index]\n          if (this.isBackgroundFetch(v)) {\n            v.__abortController.abort(new Error('deleted'))\n          } else {\n            this.dispose(v, k, 'delete')\n            if (this.disposeAfter) {\n              this.disposed.push([v, k, 'delete'])\n            }\n          }\n          this.keyMap.delete(k)\n          this.keyList[index] = null\n          this.valList[index] = null\n          if (index === this.tail) {\n            this.tail = this.prev[index]\n          } else if (index === this.head) {\n            this.head = this.next[index]\n          } else {\n            this.next[this.prev[index]] = this.next[index]\n            this.prev[this.next[index]] = this.prev[index]\n          }\n          this.size--\n          this.free.push(index)\n        }\n      }\n    }\n    if (this.disposed) {\n      while (this.disposed.length) {\n        this.disposeAfter(...this.disposed.shift())\n      }\n    }\n    return deleted\n  }\n\n  clear() {\n    for (const index of this.rindexes({ allowStale: true })) {\n      const v = this.valList[index]\n      if (this.isBackgroundFetch(v)) {\n        v.__abortController.abort(new Error('deleted'))\n      } else {\n        const k = this.keyList[index]\n        this.dispose(v, k, 'delete')\n        if (this.disposeAfter) {\n          this.disposed.push([v, k, 'delete'])\n        }\n      }\n    }\n\n    this.keyMap.clear()\n    this.valList.fill(null)\n    this.keyList.fill(null)\n    if (this.ttls) {\n      this.ttls.fill(0)\n      this.starts.fill(0)\n    }\n    if (this.sizes) {\n      this.sizes.fill(0)\n    }\n    this.head = 0\n    this.tail = 0\n    this.initialFill = 1\n    this.free.length = 0\n    this.calculatedSize = 0\n    this.size = 0\n    if (this.disposed) {\n      while (this.disposed.length) {\n        this.disposeAfter(...this.disposed.shift())\n      }\n    }\n  }\n\n  get reset() {\n    deprecatedMethod('reset', 'clear')\n    return this.clear\n  }\n\n  get length() {\n    deprecatedProperty('length', 'size')\n    return this.size\n  }\n\n  static get AbortController() {\n    return AC\n  }\n  static get AbortSignal() {\n    return AS\n  }\n}\n\nexport default LRUCache\n/package.json\bU{\n  \"name\": \"lru-cache\",\n  \"description\": \"A cache object that deletes the least-recently-used items.\",\n  \"version\": \"7.18.3\",\n  \"author\": \"Isaac Z. Schlueter <i@izs.me>\",\n  \"keywords\": [\n    \"mru\",\n    \"lru\",\n    \"cache\"\n  ],\n  \"sideEffects\": false,\n  \"scripts\": {\n    \"build\": \"npm run prepare\",\n    \"pretest\": \"npm run prepare\",\n    \"presnap\": \"npm run prepare\",\n    \"prepare\": \"node ./scripts/transpile-to-esm.js\",\n    \"size\": \"size-limit\",\n    \"test\": \"tap\",\n    \"snap\": \"tap\",\n    \"preversion\": \"npm test\",\n    \"postversion\": \"npm publish\",\n    \"prepublishOnly\": \"git push origin --follow-tags\",\n    \"format\": \"prettier --write .\",\n    \"typedoc\": \"typedoc ./index.d.ts\"\n  },\n  \"type\": \"commonjs\",\n  \"main\": \"./index.js\",\n  \"module\": \"./index.mjs\",\n  \"types\": \"./index.d.ts\",\n  \"exports\": {\n    \".\": {\n      \"import\": {\n        \"types\": \"./index.d.ts\",\n        \"default\": \"./index.mjs\"\n      },\n      \"require\": {\n        \"types\": \"./index.d.ts\",\n        \"default\": \"./index.js\"\n      }\n    },\n    \"./package.json\": \"./package.json\"\n  },\n  \"repository\": \"git://github.com/isaacs/node-lru-cache.git\",\n  \"devDependencies\": {\n    \"@size-limit/preset-small-lib\": \"^7.0.8\",\n    \"@types/node\": \"^17.0.31\",\n    \"@types/tap\": \"^15.0.6\",\n    \"benchmark\": \"^2.1.4\",\n    \"c8\": \"^7.11.2\",\n    \"clock-mock\": \"^1.0.6\",\n    \"eslint-config-prettier\": \"^8.5.0\",\n    \"prettier\": \"^2.6.2\",\n    \"size-limit\": \"^7.0.8\",\n    \"tap\": \"^16.3.4\",\n    \"ts-node\": \"^10.7.0\",\n    \"tslib\": \"^2.4.0\",\n    \"typedoc\": \"^0.23.24\",\n    \"typescript\": \"^4.6.4\"\n  },\n  \"license\": \"ISC\",\n  \"files\": [\n    \"index.js\",\n    \"index.mjs\",\n    \"index.d.ts\"\n  ],\n  \"engines\": {\n    \"node\": \">=12\"\n  },\n  \"prettier\": {\n    \"semi\": false,\n    \"printWidth\": 70,\n    \"tabWidth\": 2,\n    \"useTabs\": false,\n    \"singleQuote\": true,\n    \"jsxSingleQuote\": false,\n    \"bracketSameLine\": true,\n    \"arrowParens\": \"avoid\",\n    \"endOfLine\": \"lf\"\n  },\n  \"tap\": {\n    \"nyc-arg\": [\n      \"--include=index.js\"\n    ],\n    \"node-arg\": [\n      \"--expose-gc\",\n      \"--require\",\n      \"ts-node/register\"\n    ],\n    \"ts\": false\n  },\n  \"size-limit\": [\n    {\n      \"path\": \"./index.js\"\n    }\n  ]\n}\n/README.mdŏ;# lru-cache\n\nA cache object that deletes the least-recently-used items.\n\nSpecify a max number of the most recently used items that you\nwant to keep, and this cache will keep that many of the most\nrecently accessed items.\n\nThis is not primarily a TTL cache, and does not make strong TTL\nguarantees. There is no preemptive pruning of expired items by\ndefault, but you _may_ set a TTL on the cache or on a single\n`set`. If you do so, it will treat expired items as missing, and\ndelete them when fetched. If you are more interested in TTL\ncaching than LRU caching, check out\n[@isaacs/ttlcache](http://npm.im/@isaacs/ttlcache).\n\nAs of version 7, this is one of the most performant LRU\nimplementations available in JavaScript, and supports a wide\ndiversity of use cases. However, note that using some of the\nfeatures will necessarily impact performance, by causing the\ncache to have to do more work. See the \"Performance\" section\nbelow.\n\n## Installation\n\n```bash\nnpm install lru-cache --save\n```\n\n## Usage\n\n```js\n// hybrid module, either works\nimport LRUCache from 'lru-cache'\n// or:\nconst LRUCache = require('lru-cache')\n\n// At least one of 'max', 'ttl', or 'maxSize' is required, to prevent\n// unsafe unbounded storage.\n//\n// In most cases, it's best to specify a max for performance, so all\n// the required memory allocation is done up-front.\n//\n// All the other options are optional, see the sections below for\n// documentation on what each one does.  Most of them can be\n// overridden for specific items in get()/set()\nconst options = {\n  max: 500,\n\n  // for use with tracking overall storage size\n  maxSize: 5000,\n  sizeCalculation: (value, key) => {\n    return 1\n  },\n\n  // for use when you need to clean up something when objects\n  // are evicted from the cache\n  dispose: (value, key) => {\n    freeFromMemoryOrWhatever(value)\n  },\n\n  // how long to live in ms\n  ttl: 1000 * 60 * 5,\n\n  // return stale items before removing from cache?\n  allowStale: false,\n\n  updateAgeOnGet: false,\n  updateAgeOnHas: false,\n\n  // async method to use for cache.fetch(), for\n  // stale-while-revalidate type of behavior\n  fetchMethod: async (key, staleValue, { options, signal }) => {},\n}\n\nconst cache = new LRUCache(options)\n\ncache.set('key', 'value')\ncache.get('key') // \"value\"\n\n// non-string keys ARE fully supported\n// but note that it must be THE SAME object, not\n// just a JSON-equivalent object.\nvar someObject = { a: 1 }\ncache.set(someObject, 'a value')\n// Object keys are not toString()-ed\ncache.set('[object Object]', 'a different value')\nassert.equal(cache.get(someObject), 'a value')\n// A similar object with same keys/values won't work,\n// because it's a different object identity\nassert.equal(cache.get({ a: 1 }), undefined)\n\ncache.clear() // empty the cache\n```\n\nIf you put more stuff in it, then items will fall out.\n\n## Options\n\n### `max`\n\nThe maximum number of items that remain in the cache (assuming no\nTTL pruning or explicit deletions). Note that fewer items may be\nstored if size calculation is used, and `maxSize` is exceeded.\nThis must be a positive finite intger.\n\nAt least one of `max`, `maxSize`, or `TTL` is required. This\nmust be a positive integer if set.\n\n**It is strongly recommended to set a `max` to prevent unbounded\ngrowth of the cache.** See \"Storage Bounds Safety\" below.\n\n### `maxSize`\n\nSet to a positive integer to track the sizes of items added to\nthe cache, and automatically evict items in order to stay below\nthis size. Note that this may result in fewer than `max` items\nbeing stored.\n\nAttempting to add an item to the cache whose calculated size is\ngreater that this amount will be a no-op. The item will not be\ncached, and no other items will be evicted.\n\nOptional, must be a positive integer if provided.\n\nSets `maxEntrySize` to the same value, unless a different value\nis provided for `maxEntrySize`.\n\nAt least one of `max`, `maxSize`, or `TTL` is required. This\nmust be a positive integer if set.\n\nEven if size tracking is enabled, **it is strongly recommended to\nset a `max` to prevent unbounded growth of the cache.** See\n\"Storage Bounds Safety\" below.\n\n### `maxEntrySize`\n\nSet to a positive integer to track the sizes of items added to\nthe cache, and prevent caching any item over a given size.\nAttempting to add an item whose calculated size is greater than\nthis amount will be a no-op. The item will not be cached, and no\nother items will be evicted.\n\nOptional, must be a positive integer if provided. Defaults to\nthe value of `maxSize` if provided.\n\n### `sizeCalculation`\n\nFunction used to calculate the size of stored items. If you're\nstoring strings or buffers, then you probably want to do\nsomething like `n => n.length`. The item is passed as the first\nargument, and the key is passed as the second argument.\n\nThis may be overridden by passing an options object to\n`cache.set()`.\n\nRequires `maxSize` to be set.\n\nIf the `size` (or return value of `sizeCalculation`) for a given\nentry is greater than `maxEntrySize`, then the item will not be\nadded to the cache.\n\nDeprecated alias: `length`\n\n### `fetchMethod`\n\nFunction that is used to make background asynchronous fetches.\nCalled with `fetchMethod(key, staleValue, { signal, options,\ncontext })`. May return a Promise.\n\nIf `fetchMethod` is not provided, then `cache.fetch(key)` is\nequivalent to `Promise.resolve(cache.get(key))`.\n\nThe `signal` object is an `AbortSignal` if that's available in\nthe global object, otherwise it's a pretty close polyfill.\n\nIf at any time, `signal.aborted` is set to `true`, or if the\n`signal.onabort` method is called, or if it emits an `'abort'`\nevent which you can listen to with `addEventListener`, then that\nmeans that the fetch should be abandoned. This may be passed\nalong to async functions aware of AbortController/AbortSignal\nbehavior.\n\nThe `fetchMethod` should **only** return `undefined` or a Promise\nresolving to `undefined` if the AbortController signaled an\n`abort` event. In all other cases, it should return or resolve\nto a value suitable for adding to the cache.\n\nThe `options` object is a union of the options that may be\nprovided to `set()` and `get()`. If they are modified, then that\nwill result in modifying the settings to `cache.set()` when the\nvalue is resolved, and in the case of `noDeleteOnFetchRejection`\nand `allowStaleOnFetchRejection`, the handling of `fetchMethod`\nfailures.\n\nFor example, a DNS cache may update the TTL based on the value\nreturned from a remote DNS server by changing `options.ttl` in\nthe `fetchMethod`.\n\n### `fetchContext`\n\nArbitrary data that can be passed to the `fetchMethod` as the\n`context` option.\n\nNote that this will only be relevant when the `cache.fetch()`\ncall needs to call `fetchMethod()`. Thus, any data which will\nmeaningfully vary the fetch response needs to be present in the\nkey. This is primarily intended for including `x-request-id`\nheaders and the like for debugging purposes, which do not affect\nthe `fetchMethod()` response.\n\n### `noDeleteOnFetchRejection`\n\nIf a `fetchMethod` throws an error or returns a rejected promise,\nthen by default, any existing stale value will be removed from\nthe cache.\n\nIf `noDeleteOnFetchRejection` is set to `true`, then this\nbehavior is suppressed, and the stale value remains in the cache\nin the case of a rejected `fetchMethod`.\n\nThis is important in cases where a `fetchMethod` is _only_ called\nas a background update while the stale value is returned, when\n`allowStale` is used.\n\nThis is implicitly in effect when `allowStaleOnFetchRejection` is\nset.\n\nThis may be set in calls to `fetch()`, or defaulted on the\nconstructor, or overridden by modifying the options object in the\n`fetchMethod`.\n\n### `allowStaleOnFetchRejection`\n\nSet to true to return a stale value from the cache when a\n`fetchMethod` throws an error or returns a rejected Promise.\n\nIf a `fetchMethod` fails, and there is no stale value available,\nthe `fetch()` will resolve to `undefined`. Ie, all `fetchMethod`\nerrors are suppressed.\n\nImplies `noDeleteOnFetchRejection`.\n\nThis may be set in calls to `fetch()`, or defaulted on the\nconstructor, or overridden by modifying the options object in the\n`fetchMethod`.\n\n### `allowStaleOnFetchAbort`\n\nSet to true to return a stale value from the cache when the\n`AbortSignal` passed to the `fetchMethod` dispatches an `'abort'`\nevent, whether user-triggered, or due to internal cache behavior.\n\nUnless `ignoreFetchAbort` is also set, the underlying\n`fetchMethod` will still be considered canceled, and its return\nvalue will be ignored and not cached.\n\n### `ignoreFetchAbort`\n\nSet to true to ignore the `abort` event emitted by the\n`AbortSignal` object passed to `fetchMethod`, and still cache the\nresulting resolution value, as long as it is not `undefined`.\n\nWhen used on its own, this means aborted `fetch()` calls are not\nimmediately resolved or rejected when they are aborted, and\ninstead take the full time to await.\n\nWhen used with `allowStaleOnFetchAbort`, aborted `fetch()` calls\nwill resolve immediately to their stale cached value or\n`undefined`, and will continue to process and eventually update\nthe cache when they resolve, as long as the resulting value is\nnot `undefined`, thus supporting a \"return stale on timeout while\nrefreshing\" mechanism by passing `AbortSignal.timeout(n)` as the\nsignal.\n\nFor example:\n\n```js\nconst c = new LRUCache({\n  ttl: 100,\n  ignoreFetchAbort: true,\n  allowStaleOnFetchAbort: true,\n  fetchMethod: async (key, oldValue, { signal }) => {\n    // note: do NOT pass the signal to fetch()!\n    // let's say this fetch can take a long time.\n    const res = await fetch(`https://slow-backend-server/${key}`)\n    return await res.json()\n  },\n})\n\n// this will return the stale value after 100ms, while still\n// updating in the background for next time.\nconst val = await c.fetch('key', { signal: AbortSignal.timeout(100) })\n```\n\n**Note**: regardless of this setting, an `abort` event _is still\nemitted on the `AbortSignal` object_, so may result in invalid\nresults when passed to other underlying APIs that use\nAbortSignals.\n\nThis may be overridden on the `fetch()` call or in the\n`fetchMethod` itself.\n\n### `dispose`\n\nFunction that is called on items when they are dropped from the\ncache, as `this.dispose(value, key, reason)`.\n\nThis can be handy if you want to close file descriptors or do\nother cleanup tasks when items are no longer stored in the cache.\n\n**NOTE**: It is called _before_ the item has been fully removed\nfrom the cache, so if you want to put it right back in, you need\nto wait until the next tick. If you try to add it back in during\nthe `dispose()` function call, it will break things in subtle and\nweird ways.\n\nUnlike several other options, this may _not_ be overridden by\npassing an option to `set()`, for performance reasons. If\ndisposal functions may vary between cache entries, then the\nentire list must be scanned on every cache swap, even if no\ndisposal function is in use.\n\nThe `reason` will be one of the following strings, corresponding\nto the reason for the item's deletion:\n\n- `evict` Item was evicted to make space for a new addition\n- `set` Item was overwritten by a new value\n- `delete` Item was removed by explicit `cache.delete(key)` or by\n  calling `cache.clear()`, which deletes everything.\n\nThe `dispose()` method is _not_ called for canceled calls to\n`fetchMethod()`. If you wish to handle evictions, overwrites,\nand deletes of in-flight asynchronous fetches, you must use the\n`AbortSignal` provided.\n\nOptional, must be a function.\n\n### `disposeAfter`\n\nThe same as `dispose`, but called _after_ the entry is completely\nremoved and the cache is once again in a clean state.\n\nIt is safe to add an item right back into the cache at this\npoint. However, note that it is _very_ easy to inadvertently\ncreate infinite recursion in this way.\n\nThe `disposeAfter()` method is _not_ called for canceled calls to\n`fetchMethod()`. If you wish to handle evictions, overwrites,\nand deletes of in-flight asynchronous fetches, you must use the\n`AbortSignal` provided.\n\n### `noDisposeOnSet`\n\nSet to `true` to suppress calling the `dispose()` function if the\nentry key is still accessible within the cache.\n\nThis may be overridden by passing an options object to\n`cache.set()`.\n\nBoolean, default `false`. Only relevant if `dispose` or\n`disposeAfter` options are set.\n\n### `ttl`\n\nMax time to live for items before they are considered stale.\nNote that stale items are NOT preemptively removed by default,\nand MAY live in the cache, contributing to its LRU max, long\nafter they have expired.\n\nAlso, as this cache is optimized for LRU/MRU operations, some of\nthe staleness/TTL checks will reduce performance.\n\nThis is not primarily a TTL cache, and does not make strong TTL\nguarantees. There is no pre-emptive pruning of expired items,\nbut you _may_ set a TTL on the cache, and it will treat expired\nitems as missing when they are fetched, and delete them.\n\nOptional, but must be a positive integer in ms if specified.\n\nThis may be overridden by passing an options object to\n`cache.set()`.\n\nAt least one of `max`, `maxSize`, or `TTL` is required. This\nmust be a positive integer if set.\n\nEven if ttl tracking is enabled, **it is strongly recommended to\nset a `max` to prevent unbounded growth of the cache.** See\n\"Storage Bounds Safety\" below.\n\nIf ttl tracking is enabled, and `max` and `maxSize` are not set,\nand `ttlAutopurge` is not set, then a warning will be emitted\ncautioning about the potential for unbounded memory consumption.\n\nDeprecated alias: `maxAge`\n\n### `noUpdateTTL`\n\nBoolean flag to tell the cache to not update the TTL when setting\na new value for an existing key (ie, when updating a value rather\nthan inserting a new value). Note that the TTL value is _always_\nset (if provided) when adding a new entry into the cache.\n\nThis may be passed as an option to `cache.set()`.\n\nBoolean, default false.\n\n### `ttlResolution`\n\nMinimum amount of time in ms in which to check for staleness.\nDefaults to `1`, which means that the current time is checked at\nmost once per millisecond.\n\nSet to `0` to check the current time every time staleness is\ntested.\n\nNote that setting this to a higher value _will_ improve\nperformance somewhat while using ttl tracking, albeit at the\nexpense of keeping stale items around a bit longer than intended.\n\n### `ttlAutopurge`\n\nPreemptively remove stale items from the cache.\n\nNote that this may _significantly_ degrade performance,\nespecially if the cache is storing a large number of items. It\nis almost always best to just leave the stale items in the cache,\nand let them fall out as new items are added.\n\nNote that this means that `allowStale` is a bit pointless, as\nstale items will be deleted almost as soon as they expire.\n\nUse with caution!\n\nBoolean, default `false`\n\n### `allowStale`\n\nBy default, if you set `ttl`, it'll only delete stale items from\nthe cache when you `get(key)`. That is, it's not preemptively\npruning items.\n\nIf you set `allowStale:true`, it'll return the stale value as\nwell as deleting it. If you don't set this, then it'll return\n`undefined` when you try to get a stale entry.\n\nNote that when a stale entry is fetched, _even if it is returned\ndue to `allowStale` being set_, it is removed from the cache\nimmediately. You can immediately put it back in the cache if you\nwish, thus resetting the TTL.\n\nThis may be overridden by passing an options object to\n`cache.get()`. The `cache.has()` method will always return\n`false` for stale items.\n\nBoolean, default false, only relevant if `ttl` is set.\n\nDeprecated alias: `stale`\n\n### `noDeleteOnStaleGet`\n\nWhen using time-expiring entries with `ttl`, by default stale\nitems will be removed from the cache when the key is accessed\nwith `cache.get()`.\n\nSetting `noDeleteOnStaleGet` to `true` will cause stale items to\nremain in the cache, until they are explicitly deleted with\n`cache.delete(key)`, or retrieved with `noDeleteOnStaleGet` set\nto `false`.\n\nThis may be overridden by passing an options object to\n`cache.get()`.\n\nBoolean, default false, only relevant if `ttl` is set.\n\n### `updateAgeOnGet`\n\nWhen using time-expiring entries with `ttl`, setting this to\n`true` will make each item's age reset to 0 whenever it is\nretrieved from cache with `get()`, causing it to not expire. (It\ncan still fall out of cache based on recency of use, of course.)\n\nThis may be overridden by passing an options object to\n`cache.get()`.\n\nBoolean, default false, only relevant if `ttl` is set.\n\n### `updateAgeOnHas`\n\nWhen using time-expiring entries with `ttl`, setting this to\n`true` will make each item's age reset to 0 whenever its presence\nin the cache is checked with `has()`, causing it to not expire.\n(It can still fall out of cache based on recency of use, of\ncourse.)\n\nThis may be overridden by passing an options object to\n`cache.has()`.\n\nBoolean, default false, only relevant if `ttl` is set.\n\n## API\n\n### `new LRUCache(options)`\n\nCreate a new LRUCache. All options are documented above, and are\non the cache as public members.\n\n### `cache.max`, `cache.maxSize`, `cache.allowStale`,\n\n`cache.noDisposeOnSet`, `cache.sizeCalculation`, `cache.dispose`,\n`cache.maxSize`, `cache.ttl`, `cache.updateAgeOnGet`,\n`cache.updateAgeOnHas`\n\nAll option names are exposed as public members on the cache\nobject.\n\nThese are intended for read access only. Changing them during\nprogram operation can cause undefined behavior.\n\n### `cache.size`\n\nThe total number of items held in the cache at the current\nmoment.\n\n### `cache.calculatedSize`\n\nThe total size of items in cache when using size tracking.\n\n### `set(key, value, [{ size, sizeCalculation, ttl, noDisposeOnSet, start, status }])`\n\nAdd a value to the cache.\n\nOptional options object may contain `ttl` and `sizeCalculation`\nas described above, which default to the settings on the cache\nobject.\n\nIf `start` is provided, then that will set the effective start\ntime for the TTL calculation. Note that this must be a previous\nvalue of `performance.now()` if supported, or a previous value of\n`Date.now()` if not.\n\nOptions object may also include `size`, which will prevent\ncalling the `sizeCalculation` function and just use the specified\nnumber if it is a positive integer, and `noDisposeOnSet` which\nwill prevent calling a `dispose` function in the case of\noverwrites.\n\nIf the `size` (or return value of `sizeCalculation`) for a given\nentry is greater than `maxEntrySize`, then the item will not be\nadded to the cache.\n\nWill update the recency of the entry.\n\nReturns the cache object.\n\nFor the usage of the `status` option, see **Status Tracking**\nbelow.\n\n### `get(key, { updateAgeOnGet, allowStale, status } = {}) => value`\n\nReturn a value from the cache.\n\nWill update the recency of the cache entry found.\n\nIf the key is not found, `get()` will return `undefined`. This\ncan be confusing when setting values specifically to `undefined`,\nas in `cache.set(key, undefined)`. Use `cache.has()` to\ndetermine whether a key is present in the cache at all.\n\nFor the usage of the `status` option, see **Status Tracking**\nbelow.\n\n### `async fetch(key, options = {}) => Promise`\n\nThe following options are supported:\n\n- `updateAgeOnGet`\n- `allowStale`\n- `size`\n- `sizeCalculation`\n- `ttl`\n- `noDisposeOnSet`\n- `forceRefresh`\n- `status` - See **Status Tracking** below.\n- `signal` - AbortSignal can be used to cancel the `fetch()`.\n  Note that the `signal` option provided to the `fetchMethod` is\n  a different object, because it must also respond to internal\n  cache state changes, but aborting this signal will abort the\n  one passed to `fetchMethod` as well.\n- `fetchContext` - sets the `context` option passed to the\n  underlying `fetchMethod`.\n\nIf the value is in the cache and not stale, then the returned\nPromise resolves to the value.\n\nIf not in the cache, or beyond its TTL staleness, then\n`fetchMethod(key, staleValue, { options, signal, context })` is\ncalled, and the value returned will be added to the cache once\nresolved.\n\nIf called with `allowStale`, and an asynchronous fetch is\ncurrently in progress to reload a stale value, then the former\nstale value will be returned.\n\nIf called with `forceRefresh`, then the cached item will be\nre-fetched, even if it is not stale. However, if `allowStale` is\nset, then the old value will still be returned. This is useful\nin cases where you want to force a reload of a cached value. If\na background fetch is already in progress, then `forceRefresh`\nhas no effect.\n\nMultiple fetches for the same `key` will only call `fetchMethod`\na single time, and all will be resolved when the value is\nresolved, even if different options are used.\n\nIf `fetchMethod` is not specified, then this is effectively an\nalias for `Promise.resolve(cache.get(key))`.\n\nWhen the fetch method resolves to a value, if the fetch has not\nbeen aborted due to deletion, eviction, or being overwritten,\nthen it is added to the cache using the options provided.\n\nIf the key is evicted or deleted before the `fetchMethod`\nresolves, then the AbortSignal passed to the `fetchMethod` will\nreceive an `abort` event, and the promise returned by `fetch()`\nwill reject with the reason for the abort.\n\nIf a `signal` is passed to the `fetch()` call, then aborting the\nsignal will abort the fetch and cause the `fetch()` promise to\nreject with the reason provided.\n\n### `peek(key, { allowStale } = {}) => value`\n\nLike `get()` but doesn't update recency or delete stale items.\n\nReturns `undefined` if the item is stale, unless `allowStale` is\nset either on the cache or in the options object.\n\n### `has(key, { updateAgeOnHas, status } = {}) => Boolean`\n\nCheck if a key is in the cache, without updating the recency of\nuse. Age is updated if `updateAgeOnHas` is set to `true` in\neither the options or the constructor.\n\nWill return `false` if the item is stale, even though it is\ntechnically in the cache.  The difference can be determined (if\nit matters) by using a `status` argument, and inspecting the\n`has` field.\n\nFor the usage of the `status` option, see **Status Tracking**\nbelow.\n\n### `delete(key)`\n\nDeletes a key out of the cache.\n\nReturns `true` if the key was deleted, `false` otherwise.\n\n### `clear()`\n\nClear the cache entirely, throwing away all values.\n\nDeprecated alias: `reset()`\n\n### `keys()`\n\nReturn a generator yielding the keys in the cache, in order from\nmost recently used to least recently used.\n\n### `rkeys()`\n\nReturn a generator yielding the keys in the cache, in order from\nleast recently used to most recently used.\n\n### `values()`\n\nReturn a generator yielding the values in the cache, in order\nfrom most recently used to least recently used.\n\n### `rvalues()`\n\nReturn a generator yielding the values in the cache, in order\nfrom least recently used to most recently used.\n\n### `entries()`\n\nReturn a generator yielding `[key, value]` pairs, in order from\nmost recently used to least recently used.\n\n### `rentries()`\n\nReturn a generator yielding `[key, value]` pairs, in order from\nleast recently used to most recently used.\n\n### `find(fn, [getOptions])`\n\nFind a value for which the supplied `fn` method returns a truthy\nvalue, similar to `Array.find()`.\n\n`fn` is called as `fn(value, key, cache)`.\n\nThe optional `getOptions` are applied to the resulting `get()` of\nthe item found.\n\n### `dump()`\n\nReturn an array of `[key, entry]` objects which can be passed to\n`cache.load()`\n\nThe `start` fields are calculated relative to a portable\n`Date.now()` timestamp, even if `performance.now()` is available.\n\nStale entries are always included in the `dump`, even if\n`allowStale` is false.\n\nNote: this returns an actual array, not a generator, so it can be\nmore easily passed around.\n\n### `load(entries)`\n\nReset the cache and load in the items in `entries` in the order\nlisted. Note that the shape of the resulting cache may be\ndifferent if the same options are not used in both caches.\n\nThe `start` fields are assumed to be calculated relative to a\nportable `Date.now()` timestamp, even if `performance.now()` is\navailable.\n\n### `purgeStale()`\n\nDelete any stale entries. Returns `true` if anything was\nremoved, `false` otherwise.\n\nDeprecated alias: `prune`\n\n### `getRemainingTTL(key)`\n\nReturn the number of ms left in the item's TTL. If item is not\nin cache, returns `0`. Returns `Infinity` if item is in cache\nwithout a defined TTL.\n\n### `forEach(fn, [thisp])`\n\nCall the `fn` function with each set of `fn(value, key, cache)`\nin the LRU cache, from most recent to least recently used.\n\nDoes not affect recency of use.\n\nIf `thisp` is provided, function will be called in the\n`this`-context of the provided object.\n\n### `rforEach(fn, [thisp])`\n\nSame as `cache.forEach(fn, thisp)`, but in order from least\nrecently used to most recently used.\n\n### `pop()`\n\nEvict the least recently used item, returning its value.\n\nReturns `undefined` if cache is empty.\n\n### Internal Methods and Properties\n\nIn order to optimize performance as much as possible, \"private\"\nmembers and methods are exposed on the object as normal\nproperties, rather than being accessed via Symbols, private\nmembers, or closure variables.\n\n**Do not use or rely on these.** They will change or be removed\nwithout notice. They will cause undefined behavior if used\ninappropriately. There is no need or reason to ever call them\ndirectly.\n\nThis documentation is here so that it is especially clear that\nthis not \"undocumented\" because someone forgot; it _is_\ndocumented, and the documentation is telling you not to do it.\n\n**Do not report bugs that stem from using these properties.**\nThey will be ignored.\n\n- `initializeTTLTracking()` Set up the cache for tracking TTLs\n- `updateItemAge(index)` Called when an item age is updated, by\n  internal ID\n- `setItemTTL(index)` Called when an item ttl is updated, by\n  internal ID\n- `isStale(index)` Called to check an item's staleness, by\n  internal ID\n- `initializeSizeTracking()` Set up the cache for tracking item\n  size. Called automatically when a size is specified.\n- `removeItemSize(index)` Updates the internal size calculation\n  when an item is removed or modified, by internal ID\n- `addItemSize(index)` Updates the internal size calculation when\n  an item is added or modified, by internal ID\n- `indexes()` An iterator over the non-stale internal IDs, from\n  most recently to least recently used.\n- `rindexes()` An iterator over the non-stale internal IDs, from\n  least recently to most recently used.\n- `newIndex()` Create a new internal ID, either reusing a deleted\n  ID, evicting the least recently used ID, or walking to the end\n  of the allotted space.\n- `evict()` Evict the least recently used internal ID, returning\n  its ID. Does not do any bounds checking.\n- `connect(p, n)` Connect the `p` and `n` internal IDs in the\n  linked list.\n- `moveToTail(index)` Move the specified internal ID to the most\n  recently used position.\n- `keyMap` Map of keys to internal IDs\n- `keyList` List of keys by internal ID\n- `valList` List of values by internal ID\n- `sizes` List of calculated sizes by internal ID\n- `ttls` List of TTL values by internal ID\n- `starts` List of start time values by internal ID\n- `next` Array of \"next\" pointers by internal ID\n- `prev` Array of \"previous\" pointers by internal ID\n- `head` Internal ID of least recently used item\n- `tail` Internal ID of most recently used item\n- `free` Stack of deleted internal IDs\n\n## Status Tracking\n\nOccasionally, it may be useful to track the internal behavior of\nthe cache, particularly for logging, debugging, or for behavior\nwithin the `fetchMethod`.  To do this, you can pass a `status`\nobject to the `get()`, `set()`, `has()`, and `fetch()` methods.\n\nThe `status` option should be a plain JavaScript object.\n\nThe following fields will be set appropriately:\n\n```ts\ninterface Status<V> {\n  /**\n   * The status of a set() operation.\n   *\n   * - add: the item was not found in the cache, and was added\n   * - update: the item was in the cache, with the same value provided\n   * - replace: the item was in the cache, and replaced\n   * - miss: the item was not added to the cache for some reason\n   */\n  set?: 'add' | 'update' | 'replace' | 'miss'\n\n  /**\n   * the ttl stored for the item, or undefined if ttls are not used.\n   */\n  ttl?: LRUMilliseconds\n\n  /**\n   * the start time for the item, or undefined if ttls are not used.\n   */\n  start?: LRUMilliseconds\n\n  /**\n   * The timestamp used for TTL calculation\n   */\n  now?: LRUMilliseconds\n\n  /**\n   * the remaining ttl for the item, or undefined if ttls are not used.\n   */\n  remainingTTL?: LRUMilliseconds\n\n  /**\n   * The calculated size for the item, if sizes are used.\n   */\n  size?: LRUSize\n\n  /**\n   * A flag indicating that the item was not stored, due to exceeding the\n   * {@link maxEntrySize}\n   */\n  maxEntrySizeExceeded?: true\n\n  /**\n   * The old value, specified in the case of `set:'update'` or\n   * `set:'replace'`\n   */\n  oldValue?: V\n\n  /**\n   * The results of a {@link has} operation\n   *\n   * - hit: the item was found in the cache\n   * - stale: the item was found in the cache, but is stale\n   * - miss: the item was not found in the cache\n   */\n  has?: 'hit' | 'stale' | 'miss'\n\n  /**\n   * The status of a {@link fetch} operation.\n   * Note that this can change as the underlying fetch() moves through\n   * various states.\n   *\n   * - inflight: there is another fetch() for this key which is in process\n   * - get: there is no fetchMethod, so {@link get} was called.\n   * - miss: the item is not in cache, and will be fetched.\n   * - hit: the item is in the cache, and was resolved immediately.\n   * - stale: the item is in the cache, but stale.\n   * - refresh: the item is in the cache, and not stale, but\n   *   {@link forceRefresh} was specified.\n   */\n  fetch?: 'get' | 'inflight' | 'miss' | 'hit' | 'stale' | 'refresh'\n\n  /**\n   * The {@link fetchMethod} was called\n   */\n  fetchDispatched?: true\n\n  /**\n   * The cached value was updated after a successful call to fetchMethod\n   */\n  fetchUpdated?: true\n\n  /**\n   * The reason for a fetch() rejection.  Either the error raised by the\n   * {@link fetchMethod}, or the reason for an AbortSignal.\n   */\n  fetchError?: Error\n\n  /**\n   * The fetch received an abort signal\n   */\n  fetchAborted?: true\n\n  /**\n   * The abort signal received was ignored, and the fetch was allowed to\n   * continue.\n   */\n  fetchAbortIgnored?: true\n\n  /**\n   * The fetchMethod promise resolved successfully\n   */\n  fetchResolved?: true\n\n  /**\n   * The results of the fetchMethod promise were stored in the cache\n   */\n  fetchUpdated?: true\n\n  /**\n   * The fetchMethod promise was rejected\n   */\n  fetchRejected?: true\n\n  /**\n   * The status of a {@link get} operation.\n   *\n   * - fetching: The item is currently being fetched.  If a previous value is\n   *   present and allowed, that will be returned.\n   * - stale: The item is in the cache, and is stale.\n   * - hit: the item is in the cache\n   * - miss: the item is not in the cache\n   */\n  get?: 'stale' | 'hit' | 'miss'\n\n  /**\n   * A fetch or get operation returned a stale value.\n   */\n  returnedStale?: true\n}\n```\n\n## Storage Bounds Safety\n\nThis implementation aims to be as flexible as possible, within\nthe limits of safe memory consumption and optimal performance.\n\nAt initial object creation, storage is allocated for `max` items.\nIf `max` is set to zero, then some performance is lost, and item\ncount is unbounded. Either `maxSize` or `ttl` _must_ be set if\n`max` is not specified.\n\nIf `maxSize` is set, then this creates a safe limit on the\nmaximum storage consumed, but without the performance benefits of\npre-allocation. When `maxSize` is set, every item _must_ provide\na size, either via the `sizeCalculation` method provided to the\nconstructor, or via a `size` or `sizeCalculation` option provided\nto `cache.set()`. The size of every item _must_ be a positive\ninteger.\n\nIf neither `max` nor `maxSize` are set, then `ttl` tracking must\nbe enabled. Note that, even when tracking item `ttl`, items are\n_not_ preemptively deleted when they become stale, unless\n`ttlAutopurge` is enabled. Instead, they are only purged the\nnext time the key is requested. Thus, if `ttlAutopurge`, `max`,\nand `maxSize` are all not set, then the cache will potentially\ngrow unbounded.\n\nIn this case, a warning is printed to standard error. Future\nversions may require the use of `ttlAutopurge` if `max` and\n`maxSize` are not specified.\n\nIf you truly wish to use a cache that is bound _only_ by TTL\nexpiration, consider using a `Map` object, and calling\n`setTimeout` to delete entries when they expire. It will perform\nmuch better than an LRU cache.\n\nHere is an implementation you may use, under the same\n[license](./LICENSE) as this package:\n\n```js\n// a storage-unbounded ttl cache that is not an lru-cache\nconst cache = {\n  data: new Map(),\n  timers: new Map(),\n  set: (k, v, ttl) => {\n    if (cache.timers.has(k)) {\n      clearTimeout(cache.timers.get(k))\n    }\n    cache.timers.set(\n      k,\n      setTimeout(() => cache.delete(k), ttl)\n    )\n    cache.data.set(k, v)\n  },\n  get: k => cache.data.get(k),\n  has: k => cache.data.has(k),\n  delete: k => {\n    if (cache.timers.has(k)) {\n      clearTimeout(cache.timers.get(k))\n    }\n    cache.timers.delete(k)\n    return cache.data.delete(k)\n  },\n  clear: () => {\n    cache.data.clear()\n    for (const v of cache.timers.values()) {\n      clearTimeout(v)\n    }\n    cache.timers.clear()\n  },\n}\n```\n\nIf that isn't to your liking, check out\n[@isaacs/ttlcache](http://npm.im/@isaacs/ttlcache).\n\n## Performance\n\nAs of January 2022, version 7 of this library is one of the most\nperformant LRU cache implementations in JavaScript.\n\nBenchmarks can be extremely difficult to get right. In\nparticular, the performance of set/get/delete operations on\nobjects will vary _wildly_ depending on the type of key used. V8\nis highly optimized for objects with keys that are short strings,\nespecially integer numeric strings. Thus any benchmark which\ntests _solely_ using numbers as keys will tend to find that an\nobject-based approach performs the best.\n\nNote that coercing _anything_ to strings to use as object keys is\nunsafe, unless you can be 100% certain that no other type of\nvalue will be used. For example:\n\n```js\nconst myCache = {}\nconst set = (k, v) => (myCache[k] = v)\nconst get = k => myCache[k]\n\nset({}, 'please hang onto this for me')\nset('[object Object]', 'oopsie')\n```\n\nAlso beware of \"Just So\" stories regarding performance. Garbage\ncollection of large (especially: deep) object graphs can be\nincredibly costly, with several \"tipping points\" where it\nincreases exponentially. As a result, putting that off until\nlater can make it much worse, and less predictable. If a library\nperforms well, but only in a scenario where the object graph is\nkept shallow, then that won't help you if you are using large\nobjects as keys.\n\nIn general, when attempting to use a library to improve\nperformance (such as a cache like this one), it's best to choose\nan option that will perform well in the sorts of scenarios where\nyou'll actually use it.\n\nThis library is optimized for repeated gets and minimizing\neviction time, since that is the expected need of a LRU. Set\noperations are somewhat slower on average than a few other\noptions, in part because of that optimization. It is assumed\nthat you'll be caching some costly operation, ideally as rarely\nas possible, so optimizing set over get would be unwise.\n\nIf performance matters to you:\n\n1. If it's at all possible to use small integer values as keys,\n   and you can guarantee that no other types of values will be\n   used as keys, then do that, and use a cache such as\n   [lru-fast](https://npmjs.com/package/lru-fast), or\n   [mnemonist's\n   LRUCache](https://yomguithereal.github.io/mnemonist/lru-cache)\n   which uses an Object as its data store.\n2. Failing that, if at all possible, use short non-numeric\n   strings (ie, less than 256 characters) as your keys, and use\n   [mnemonist's\n   LRUCache](https://yomguithereal.github.io/mnemonist/lru-cache).\n3. If the types of your keys will be long strings, strings that\n   look like floats, `null`, objects, or some mix of types, or if\n   you aren't sure, then this library will work well for you.\n4. Do not use a `dispose` function, size tracking, or especially\n   ttl behavior, unless absolutely needed. These features are\n   convenient, and necessary in some use cases, and every attempt\n   has been made to make the performance impact minimal, but it\n   isn't nothing.\n\n## Breaking Changes in Version 7\n\nThis library changed to a different algorithm and internal data\nstructure in version 7, yielding significantly better\nperformance, albeit with some subtle changes as a result.\n\nIf you were relying on the internals of LRUCache in version 6 or\nbefore, it probably will not work in version 7 and above.\n\nFor more info, see the [change log](CHANGELOG.md).\n/LICENSE\u0003\u0007The ISC License\n\nCopyright (c) 2010-2023 Isaac Z. Schlueter and Contributors\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted, provided that the above\ncopyright notice and this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\nWITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\nANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\nACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR\nIN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/bWFnaWMtc3RyaW5nQDAuMjcuMA==",
    "content": "/README.md,\u000f# magic-string\n\n<a href=\"https://travis-ci.org/Rich-Harris/magic-string\">\n  <img src=\"http://img.shields.io/travis/Rich-Harris/magic-string.svg\"\n       alt=\"build status\">\n</a>\n<a href=\"https://npmjs.org/package/magic-string\">\n  <img src=\"https://img.shields.io/npm/v/magic-string.svg\"\n       alt=\"npm version\">\n</a>\n<a href=\"https://github.com/Rich-Harris/magic-string/blob/master/LICENSE.md\">\n  <img src=\"https://img.shields.io/npm/l/magic-string.svg\"\n       alt=\"license\">\n</a>\n\nSuppose you have some source code. You want to make some light modifications to it - replacing a few characters here and there, wrapping it with a header and footer, etc - and ideally you'd like to generate a [source map](https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/) at the end of it. You've thought about using something like [recast](https://github.com/benjamn/recast) (which allows you to generate an AST from some JavaScript, manipulate it, and reprint it with a sourcemap without losing your comments and formatting), but it seems like overkill for your needs (or maybe the source code isn't JavaScript).\n\nYour requirements are, frankly, rather niche. But they're requirements that I also have, and for which I made magic-string. It's a small, fast utility for manipulating strings and generating sourcemaps.\n\n## Installation\n\nmagic-string works in both node.js and browser environments. For node, install with npm:\n\n```bash\nnpm i magic-string\n```\n\nTo use in browser, grab the [magic-string.umd.js](https://unpkg.com/magic-string/dist/magic-string.umd.js) file and add it to your page:\n\n```html\n<script src='magic-string.umd.js'></script>\n```\n\n(It also works with various module systems, if you prefer that sort of thing - it has a dependency on [vlq](https://github.com/Rich-Harris/vlq).)\n\n## Usage\n\nThese examples assume you're in node.js, or something similar:\n\n```js\nimport MagicString from 'magic-string';\nimport fs from 'fs'\n\nconst s = new MagicString('problems = 99');\n\ns.update(0, 8, 'answer');\ns.toString(); // 'answer = 99'\n\ns.update(11, 13, '42'); // character indices always refer to the original string\ns.toString(); // 'answer = 42'\n\ns.prepend('var ').append(';'); // most methods are chainable\ns.toString(); // 'var answer = 42;'\n\nconst map = s.generateMap({\n  source: 'source.js',\n  file: 'converted.js.map',\n  includeContent: true\n}); // generates a v3 sourcemap\n\nfs.writeFileSync('converted.js', s.toString());\nfs.writeFileSync('converted.js.map', map.toString());\n```\n\nYou can pass an options argument:\n\n```js\nconst s = new MagicString(someCode, {\n  // both these options will be used if you later\n  // call `bundle.addSource( s )` - see below\n  filename: 'foo.js',\n  indentExclusionRanges: [/*...*/]\n});\n```\n\n## Methods\n\n### s.addSourcemapLocation( index )\n\nAdds the specified character index (with respect to the original string) to sourcemap mappings, if `hires` is `false` (see below).\n\n### s.append( content )\n\nAppends the specified content to the end of the string. Returns `this`.\n\n### s.appendLeft( index, content )\n\nAppends the specified `content` at the `index` in the original string. If a range *ending* with `index` is subsequently moved, the insert will be moved with it. Returns `this`. See also `s.prependLeft(...)`.\n\n### s.appendRight( index, content )\n\nAppends the specified `content` at the `index` in the original string. If a range *starting* with `index` is subsequently moved, the insert will be moved with it. Returns `this`. See also `s.prependRight(...)`.\n\n### s.clone()\n\nDoes what you'd expect.\n\n### s.generateDecodedMap( options )\n\nGenerates a sourcemap object with raw mappings in array form, rather than encoded as a string. See `generateMap` documentation below for options details. Useful if you need to manipulate the sourcemap further, but most of the time you will use `generateMap` instead.\n\n### s.generateMap( options )\n\nGenerates a [version 3 sourcemap](https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit). All options are, well, optional:\n\n* `file` - the filename where you plan to write the sourcemap\n* `source` - the filename of the file containing the original source\n* `includeContent` - whether to include the original content in the map's `sourcesContent` array\n* `hires` - whether the mapping should be high-resolution. Hi-res mappings map every single character, meaning (for example) your devtools will always be able to pinpoint the exact location of function calls and so on. With lo-res mappings, devtools may only be able to identify the correct line - but they're quicker to generate and less bulky. If sourcemap locations have been specified with `s.addSourceMapLocation()`, they will be used here.\n\nThe returned sourcemap has two (non-enumerable) methods attached for convenience:\n\n* `toString` - returns the equivalent of `JSON.stringify(map)`\n* `toUrl` - returns a DataURI containing the sourcemap. Useful for doing this sort of thing:\n\n```js\ncode += '\\n//# sourceMappingURL=' + map.toUrl();\n```\n\n### s.hasChanged()\n\nIndicates if the string has been changed.\n\n### s.indent( prefix[, options] )\n\nPrefixes each line of the string with `prefix`. If `prefix` is not supplied, the indentation will be guessed from the original content, falling back to a single tab character. Returns `this`.\n\nThe `options` argument can have an `exclude` property, which is an array of `[start, end]` character ranges. These ranges will be excluded from the indentation - useful for (e.g.) multiline strings.\n\n### s.insertLeft( index, content )\n\n**DEPRECATED** since 0.17 – use `s.appendLeft(...)` instead\n\n### s.insertRight( index, content )\n\n**DEPRECATED** since 0.17 – use `s.prependRight(...)` instead\n\n### s.isEmpty()\n\nReturns true if the resulting source is empty (disregarding white space).\n\n### s.locate( index )\n\n**DEPRECATED** since 0.10 – see [#30](https://github.com/Rich-Harris/magic-string/pull/30)\n\n### s.locateOrigin( index )\n\n**DEPRECATED** since 0.10 – see [#30](https://github.com/Rich-Harris/magic-string/pull/30)\n\n### s.move( start, end, index )\n\nMoves the characters from `start` and `end` to `index`. Returns `this`.\n\n### s.overwrite( start, end, content[, options] )\n\nReplaces the characters from `start` to `end` with `content`, along with the appended/prepended content in that range. The same restrictions as `s.remove()` apply. Returns `this`.\n\nThe fourth argument is optional. It can have a `storeName` property — if `true`, the original name will be stored for later inclusion in a sourcemap's `names` array — and a `contentOnly` property which determines whether only the content is overwritten, or anything that was appended/prepended to the range as well.\n\nIt may be preferred to use `s.update(...)` instead if you wish to avoid overwriting the appended/prepended content.\n\n### s.prepend( content )\n\nPrepends the string with the specified content. Returns `this`.\n\n### s.prependLeft ( index, content )\n\nSame as `s.appendLeft(...)`, except that the inserted content will go *before* any previous appends or prepends at `index`\n\n### s.prependRight ( index, content )\n\nSame as `s.appendRight(...)`, except that the inserted content will go *before* any previous appends or prepends at `index`\n\n### s.replace( regexpOrString, substitution )\n\nString replacement with RegExp or string. When using a RegExp, replacer function is also supported. Returns `this`.\n\n```ts\nimport MagicString from 'magic-string'\n\nconst s = new MagicString(source)\n\ns.replace('foo', 'bar')\ns.replace(/foo/g, 'bar')\ns.replace(/(\\w)(\\d+)/g, (_, $1, $2) => $1.toUpperCase() + $2)\n```\n\nThe differences from [`String.replace`]((https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace)):\n- It will always match against the **original string**\n- It mutates the magic string state (use `.clone()` to be immutable)\n\n### s.replaceAll( regexpOrString, substitution )\n\nSame as `s.replace`, but replace all matched strings instead of just one.\nIf `substitution` is a regex, then it must have the global (`g`) flag set, or a `TypeError` is thrown. Matches the behavior of the bultin [`String.property.replaceAll`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replaceAll).\n\n### s.remove( start, end )\n\nRemoves the characters from `start` to `end` (of the original string, **not** the generated string). Removing the same content twice, or making removals that partially overlap, will cause an error. Returns `this`.\n\n### s.slice( start, end )\n\nReturns the content of the generated string that corresponds to the slice between `start` and `end` of the original string. Throws error if the indices are for characters that were already removed.\n\n### s.snip( start, end )\n\nReturns a clone of `s`, with all content before the `start` and `end` characters of the original string removed.\n\n### s.toString()\n\nReturns the generated string.\n\n### s.trim([ charType ])\n\nTrims content matching `charType` (defaults to `\\s`, i.e. whitespace) from the start and end. Returns `this`.\n\n### s.trimStart([ charType ])\n\nTrims content matching `charType` (defaults to `\\s`, i.e. whitespace) from the start. Returns `this`.\n\n### s.trimEnd([ charType ])\n\nTrims content matching `charType` (defaults to `\\s`, i.e. whitespace) from the end. Returns `this`.\n\n### s.trimLines()\n\nRemoves empty lines from the start and end. Returns `this`.\n\n### s.update( start, end, content[, options] )\n\nReplaces the characters from `start` to `end` with `content`. The same restrictions as `s.remove()` apply. Returns `this`.\n\nThe fourth argument is optional. It can have a `storeName` property — if `true`, the original name will be stored for later inclusion in a sourcemap's `names` array — and an `overwrite` property which defaults to `false` and determines whether anything that was appended/prepended to the range will be overwritten along with the original content.\n\n`s.update(start, end, content)` is equivalent to `s.overwrite(start, end, content, { contentOnly: true })`.\n\n## Bundling\n\nTo concatenate several sources, use `MagicString.Bundle`:\n\n```js\nconst bundle = new MagicString.Bundle();\n\nbundle.addSource({\n  filename: 'foo.js',\n  content: new MagicString('var answer = 42;')\n});\n\nbundle.addSource({\n  filename: 'bar.js',\n  content: new MagicString('console.log( answer )')\n});\n\n// Advanced: a source can include an `indentExclusionRanges` property\n// alongside `filename` and `content`. This will be passed to `s.indent()`\n// - see documentation above\n\nbundle.indent() // optionally, pass an indent string, otherwise it will be guessed\n  .prepend('(function () {\\n')\n  .append('}());');\n\nbundle.toString();\n// (function () {\n//   var answer = 42;\n//   console.log( answer );\n// }());\n\n// options are as per `s.generateMap()` above\nconst map = bundle.generateMap({\n  file: 'bundle.js',\n  includeContent: true,\n  hires: true\n});\n```\n\nAs an alternative syntax, if you a) don't have `filename` or `indentExclusionRanges` options, or b) passed those in when you used `new MagicString(...)`, you can simply pass the `MagicString` instance itself:\n\n```js\nconst bundle = new MagicString.Bundle();\nconst source = new MagicString(someCode, {\n  filename: 'foo.js'\n});\n\nbundle.addSource(source);\n```\n\n## License\n\nMIT\n/index.d.ts#\u0018export interface BundleOptions {\n  intro?: string;\n  separator?: string;\n}\n\nexport interface SourceMapOptions {\n  /**\n   * Whether the mapping should be high-resolution.\n   * Hi-res mappings map every single character, meaning (for example) your devtools will always\n   * be able to pinpoint the exact location of function calls and so on.\n   * With lo-res mappings, devtools may only be able to identify the correct\n   * line - but they're quicker to generate and less bulky.\n   * If sourcemap locations have been specified with s.addSourceMapLocation(), they will be used here.\n   */\n  hires?: boolean;\n  /**\n   * The filename where you plan to write the sourcemap.\n   */\n  file?: string;\n  /**\n   * The filename of the file containing the original source.\n   */\n  source?: string;\n  /**\n   * Whether to include the original content in the map's sourcesContent array.\n   */\n  includeContent?: boolean;\n}\n\nexport type SourceMapSegment =\n  | [number]\n  | [number, number, number, number]\n  | [number, number, number, number, number];\n\nexport interface DecodedSourceMap {\n  file: string;\n  sources: string[];\n  sourcesContent: string[];\n  names: string[];\n  mappings: SourceMapSegment[][];\n}\n\nexport class SourceMap {\n  constructor(properties: DecodedSourceMap);\n\n  version: number;\n  file: string;\n  sources: string[];\n  sourcesContent: string[];\n  names: string[];\n  mappings: string;\n\n  /**\n   * Returns the equivalent of `JSON.stringify(map)`\n   */\n  toString(): string;\n  /**\n   * Returns a DataURI containing the sourcemap. Useful for doing this sort of thing:\n   * `generateMap(options?: SourceMapOptions): SourceMap;`\n   */\n  toUrl(): string;\n}\n\nexport class Bundle {\n  constructor(options?: BundleOptions);\n  addSource(source: MagicString | { filename?: string, content: MagicString }): Bundle;\n  append(str: string, options?: BundleOptions): Bundle;\n  clone(): Bundle;\n  generateMap(options?: SourceMapOptions): SourceMap;\n  generateDecodedMap(options?: SourceMapOptions): DecodedSourceMap;\n  getIndentString(): string;\n  indent(indentStr?: string): Bundle;\n  indentExclusionRanges: ExclusionRange | Array<ExclusionRange>;\n  prepend(str: string): Bundle;\n  toString(): string;\n  trimLines(): Bundle;\n  trim(charType?: string): Bundle;\n  trimStart(charType?: string): Bundle;\n  trimEnd(charType?: string): Bundle;\n  isEmpty(): boolean;\n  length(): number;\n}\n\nexport type ExclusionRange = [ number, number ];\n\nexport interface MagicStringOptions {\n  filename?: string,\n  indentExclusionRanges?: ExclusionRange | Array<ExclusionRange>;\n}\n\nexport interface IndentOptions {\n  exclude?: ExclusionRange | Array<ExclusionRange>;\n  indentStart?: boolean;\n}\n\nexport interface OverwriteOptions {\n  storeName?: boolean;\n  contentOnly?: boolean;\n}\n\nexport interface UpdateOptions {\n  storeName?: boolean;\n  overwrite?: boolean;\n}\n\nexport default class MagicString {\n  constructor(str: string, options?: MagicStringOptions);\n  /**\n   * Adds the specified character index (with respect to the original string) to sourcemap mappings, if `hires` is false.\n   */\n  addSourcemapLocation(char: number): void;\n  /**\n   * Appends the specified content to the end of the string.\n   */\n  append(content: string): MagicString;\n  /**\n   * Appends the specified content at the index in the original string.\n   * If a range *ending* with index is subsequently moved, the insert will be moved with it. \n   * See also `s.prependLeft(...)`.\n   */\n  appendLeft(index: number, content: string): MagicString;\n  /**\n   * Appends the specified content at the index in the original string.\n   * If a range *starting* with index is subsequently moved, the insert will be moved with it.\n   * See also `s.prependRight(...)`.\n   */\n  appendRight(index: number, content: string): MagicString;\n  /**\n   * Does what you'd expect.\n   */\n  clone(): MagicString;\n  /**\n   * Generates a version 3 sourcemap.\n   */\n  generateMap(options?: SourceMapOptions): SourceMap;\n  /**\n   * Generates a sourcemap object with raw mappings in array form, rather than encoded as a string.\n   * Useful if you need to manipulate the sourcemap further, but most of the time you will use `generateMap` instead.\n   */\n  generateDecodedMap(options?: SourceMapOptions): DecodedSourceMap;\n  getIndentString(): string;\n\n  /**\n   * Prefixes each line of the string with prefix.\n   * If prefix is not supplied, the indentation will be guessed from the original content, falling back to a single tab character.\n   */\n  indent(options?: IndentOptions): MagicString;\n  /**\n   * Prefixes each line of the string with prefix.\n   * If prefix is not supplied, the indentation will be guessed from the original content, falling back to a single tab character.\n   *\n   * The options argument can have an exclude property, which is an array of [start, end] character ranges.\n   * These ranges will be excluded from the indentation - useful for (e.g.) multiline strings.\n   */\n  indent(indentStr?: string, options?: IndentOptions): MagicString;\n  indentExclusionRanges: ExclusionRange | Array<ExclusionRange>;\n\n  /**\n   * Moves the characters from `start and `end` to `index`.\n   */\n  move(start: number, end: number, index: number): MagicString;\n  /**\n   * Replaces the characters from `start` to `end` with `content`, along with the appended/prepended content in \n   * that range. The same restrictions as `s.remove()` apply.\n   *\n   * The fourth argument is optional. It can have a storeName property — if true, the original name will be stored\n   * for later inclusion in a sourcemap's names array — and a contentOnly property which determines whether only\n   * the content is overwritten, or anything that was appended/prepended to the range as well.\n   * \n   * It may be preferred to use `s.update(...)` instead if you wish to avoid overwriting the appended/prepended content.\n   */\n  overwrite(start: number, end: number, content: string, options?: boolean | OverwriteOptions): MagicString;\n  /**\n   * Replaces the characters from `start` to `end` with `content`. The same restrictions as `s.remove()` apply.\n   *\n   * The fourth argument is optional. It can have a storeName property — if true, the original name will be stored\n   * for later inclusion in a sourcemap's names array — and an overwrite property which determines whether only\n   * the content is overwritten, or anything that was appended/prepended to the range as well.\n   */\n  update(start: number, end: number, content: string, options?: boolean | UpdateOptions): MagicString;\n  /**\n   * Prepends the string with the specified content. \n   */\n  prepend(content: string): MagicString;\n  /**\n   * Same as `s.appendLeft(...)`, except that the inserted content will go *before* any previous appends or prepends at index\n   */\n  prependLeft(index: number, content: string): MagicString;\n  /**\n   * Same as `s.appendRight(...)`, except that the inserted content will go *before* any previous appends or prepends at `index`\n   */\n  prependRight(index: number, content: string): MagicString;\n  /**\n   * Removes the characters from `start` to `end` (of the original string, **not** the generated string).\n   * Removing the same content twice, or making removals that partially overlap, will cause an error.\n   */\n  remove(start: number, end: number): MagicString;\n  /**\n   * Returns the content of the generated string that corresponds to the slice between `start` and `end` of the original string.\n   * Throws error if the indices are for characters that were already removed.\n   */\n  slice(start: number, end: number): string;\n  /**\n   * Returns a clone of `s`, with all content before the `start` and `end` characters of the original string removed.\n   */\n  snip(start: number, end: number): MagicString;\n  /**\n   * Trims content matching `charType` (defaults to `\\s`, i.e. whitespace) from the start and end.\n   */\n  trim(charType?: string): MagicString;\n  /**\n   * Trims content matching `charType` (defaults to `\\s`, i.e. whitespace) from the start.\n   */\n  trimStart(charType?: string): MagicString;\n  /**\n   * Trims content matching `charType` (defaults to `\\s`, i.e. whitespace) from the end.\n   */\n  trimEnd(charType?: string): MagicString;\n  /**\n   * Removes empty lines from the start and end.\n   */\n  trimLines(): MagicString;\n  /**\n   * String replacement with RegExp or string.\n   */\n  replace(regex: RegExp | string, replacement: string | ((substring: string, ...args: any[]) => string)): MagicString;\n  /**\n   * Same as `s.replace`, but replace all matched strings instead of just one.\n   */\n  replaceAll(regex: RegExp | string, replacement: string | ((substring: string, ...args: any[]) => string)): MagicString;\n\n  lastChar(): string;\n  lastLine(): string;\n  /**\n   * Returns true if the resulting source is empty (disregarding white space).\n   */\n  isEmpty(): boolean;\n  length(): number;\n\n  /**\n   * Indicates if the string has been changed.\n   */\n  hasChanged(): boolean;\n\n  original: string;\n  /**\n   * Returns the generated string.\n   */\n  toString(): string;\n}\n/dist/magic-string.cjs.jsŅ\u0018'use strict';\n\nvar sourcemapCodec = require('@jridgewell/sourcemap-codec');\n\nclass BitSet {\n\tconstructor(arg) {\n\t\tthis.bits = arg instanceof BitSet ? arg.bits.slice() : [];\n\t}\n\n\tadd(n) {\n\t\tthis.bits[n >> 5] |= 1 << (n & 31);\n\t}\n\n\thas(n) {\n\t\treturn !!(this.bits[n >> 5] & (1 << (n & 31)));\n\t}\n}\n\nclass Chunk {\n\tconstructor(start, end, content) {\n\t\tthis.start = start;\n\t\tthis.end = end;\n\t\tthis.original = content;\n\n\t\tthis.intro = '';\n\t\tthis.outro = '';\n\n\t\tthis.content = content;\n\t\tthis.storeName = false;\n\t\tthis.edited = false;\n\n\t\t{\n\t\t\tthis.previous = null;\n\t\t\tthis.next = null;\n\t\t}\n\t}\n\n\tappendLeft(content) {\n\t\tthis.outro += content;\n\t}\n\n\tappendRight(content) {\n\t\tthis.intro = this.intro + content;\n\t}\n\n\tclone() {\n\t\tconst chunk = new Chunk(this.start, this.end, this.original);\n\n\t\tchunk.intro = this.intro;\n\t\tchunk.outro = this.outro;\n\t\tchunk.content = this.content;\n\t\tchunk.storeName = this.storeName;\n\t\tchunk.edited = this.edited;\n\n\t\treturn chunk;\n\t}\n\n\tcontains(index) {\n\t\treturn this.start < index && index < this.end;\n\t}\n\n\teachNext(fn) {\n\t\tlet chunk = this;\n\t\twhile (chunk) {\n\t\t\tfn(chunk);\n\t\t\tchunk = chunk.next;\n\t\t}\n\t}\n\n\teachPrevious(fn) {\n\t\tlet chunk = this;\n\t\twhile (chunk) {\n\t\t\tfn(chunk);\n\t\t\tchunk = chunk.previous;\n\t\t}\n\t}\n\n\tedit(content, storeName, contentOnly) {\n\t\tthis.content = content;\n\t\tif (!contentOnly) {\n\t\t\tthis.intro = '';\n\t\t\tthis.outro = '';\n\t\t}\n\t\tthis.storeName = storeName;\n\n\t\tthis.edited = true;\n\n\t\treturn this;\n\t}\n\n\tprependLeft(content) {\n\t\tthis.outro = content + this.outro;\n\t}\n\n\tprependRight(content) {\n\t\tthis.intro = content + this.intro;\n\t}\n\n\tsplit(index) {\n\t\tconst sliceIndex = index - this.start;\n\n\t\tconst originalBefore = this.original.slice(0, sliceIndex);\n\t\tconst originalAfter = this.original.slice(sliceIndex);\n\n\t\tthis.original = originalBefore;\n\n\t\tconst newChunk = new Chunk(index, this.end, originalAfter);\n\t\tnewChunk.outro = this.outro;\n\t\tthis.outro = '';\n\n\t\tthis.end = index;\n\n\t\tif (this.edited) {\n\t\t\t// TODO is this block necessary?...\n\t\t\tnewChunk.edit('', false);\n\t\t\tthis.content = '';\n\t\t} else {\n\t\t\tthis.content = originalBefore;\n\t\t}\n\n\t\tnewChunk.next = this.next;\n\t\tif (newChunk.next) newChunk.next.previous = newChunk;\n\t\tnewChunk.previous = this;\n\t\tthis.next = newChunk;\n\n\t\treturn newChunk;\n\t}\n\n\ttoString() {\n\t\treturn this.intro + this.content + this.outro;\n\t}\n\n\ttrimEnd(rx) {\n\t\tthis.outro = this.outro.replace(rx, '');\n\t\tif (this.outro.length) return true;\n\n\t\tconst trimmed = this.content.replace(rx, '');\n\n\t\tif (trimmed.length) {\n\t\t\tif (trimmed !== this.content) {\n\t\t\t\tthis.split(this.start + trimmed.length).edit('', undefined, true);\n\t\t\t}\n\t\t\treturn true;\n\t\t} else {\n\t\t\tthis.edit('', undefined, true);\n\n\t\t\tthis.intro = this.intro.replace(rx, '');\n\t\t\tif (this.intro.length) return true;\n\t\t}\n\t}\n\n\ttrimStart(rx) {\n\t\tthis.intro = this.intro.replace(rx, '');\n\t\tif (this.intro.length) return true;\n\n\t\tconst trimmed = this.content.replace(rx, '');\n\n\t\tif (trimmed.length) {\n\t\t\tif (trimmed !== this.content) {\n\t\t\t\tthis.split(this.end - trimmed.length);\n\t\t\t\tthis.edit('', undefined, true);\n\t\t\t}\n\t\t\treturn true;\n\t\t} else {\n\t\t\tthis.edit('', undefined, true);\n\n\t\t\tthis.outro = this.outro.replace(rx, '');\n\t\t\tif (this.outro.length) return true;\n\t\t}\n\t}\n}\n\nfunction getBtoa () {\n\tif (typeof window !== 'undefined' && typeof window.btoa === 'function') {\n\t\treturn (str) => window.btoa(unescape(encodeURIComponent(str)));\n\t} else if (typeof Buffer === 'function') {\n\t\treturn (str) => Buffer.from(str, 'utf-8').toString('base64');\n\t} else {\n\t\treturn () => {\n\t\t\tthrow new Error('Unsupported environment: `window.btoa` or `Buffer` should be supported.');\n\t\t};\n\t}\n}\n\nconst btoa = /*#__PURE__*/ getBtoa();\n\nclass SourceMap {\n\tconstructor(properties) {\n\t\tthis.version = 3;\n\t\tthis.file = properties.file;\n\t\tthis.sources = properties.sources;\n\t\tthis.sourcesContent = properties.sourcesContent;\n\t\tthis.names = properties.names;\n\t\tthis.mappings = sourcemapCodec.encode(properties.mappings);\n\t}\n\n\ttoString() {\n\t\treturn JSON.stringify(this);\n\t}\n\n\ttoUrl() {\n\t\treturn 'data:application/json;charset=utf-8;base64,' + btoa(this.toString());\n\t}\n}\n\nfunction guessIndent(code) {\n\tconst lines = code.split('\\n');\n\n\tconst tabbed = lines.filter((line) => /^\\t+/.test(line));\n\tconst spaced = lines.filter((line) => /^ {2,}/.test(line));\n\n\tif (tabbed.length === 0 && spaced.length === 0) {\n\t\treturn null;\n\t}\n\n\t// More lines tabbed than spaced? Assume tabs, and\n\t// default to tabs in the case of a tie (or nothing\n\t// to go on)\n\tif (tabbed.length >= spaced.length) {\n\t\treturn '\\t';\n\t}\n\n\t// Otherwise, we need to guess the multiple\n\tconst min = spaced.reduce((previous, current) => {\n\t\tconst numSpaces = /^ +/.exec(current)[0].length;\n\t\treturn Math.min(numSpaces, previous);\n\t}, Infinity);\n\n\treturn new Array(min + 1).join(' ');\n}\n\nfunction getRelativePath(from, to) {\n\tconst fromParts = from.split(/[/\\\\]/);\n\tconst toParts = to.split(/[/\\\\]/);\n\n\tfromParts.pop(); // get dirname\n\n\twhile (fromParts[0] === toParts[0]) {\n\t\tfromParts.shift();\n\t\ttoParts.shift();\n\t}\n\n\tif (fromParts.length) {\n\t\tlet i = fromParts.length;\n\t\twhile (i--) fromParts[i] = '..';\n\t}\n\n\treturn fromParts.concat(toParts).join('/');\n}\n\nconst toString = Object.prototype.toString;\n\nfunction isObject(thing) {\n\treturn toString.call(thing) === '[object Object]';\n}\n\nfunction getLocator(source) {\n\tconst originalLines = source.split('\\n');\n\tconst lineOffsets = [];\n\n\tfor (let i = 0, pos = 0; i < originalLines.length; i++) {\n\t\tlineOffsets.push(pos);\n\t\tpos += originalLines[i].length + 1;\n\t}\n\n\treturn function locate(index) {\n\t\tlet i = 0;\n\t\tlet j = lineOffsets.length;\n\t\twhile (i < j) {\n\t\t\tconst m = (i + j) >> 1;\n\t\t\tif (index < lineOffsets[m]) {\n\t\t\t\tj = m;\n\t\t\t} else {\n\t\t\t\ti = m + 1;\n\t\t\t}\n\t\t}\n\t\tconst line = i - 1;\n\t\tconst column = index - lineOffsets[line];\n\t\treturn { line, column };\n\t};\n}\n\nclass Mappings {\n\tconstructor(hires) {\n\t\tthis.hires = hires;\n\t\tthis.generatedCodeLine = 0;\n\t\tthis.generatedCodeColumn = 0;\n\t\tthis.raw = [];\n\t\tthis.rawSegments = this.raw[this.generatedCodeLine] = [];\n\t\tthis.pending = null;\n\t}\n\n\taddEdit(sourceIndex, content, loc, nameIndex) {\n\t\tif (content.length) {\n\t\t\tconst segment = [this.generatedCodeColumn, sourceIndex, loc.line, loc.column];\n\t\t\tif (nameIndex >= 0) {\n\t\t\t\tsegment.push(nameIndex);\n\t\t\t}\n\t\t\tthis.rawSegments.push(segment);\n\t\t} else if (this.pending) {\n\t\t\tthis.rawSegments.push(this.pending);\n\t\t}\n\n\t\tthis.advance(content);\n\t\tthis.pending = null;\n\t}\n\n\taddUneditedChunk(sourceIndex, chunk, original, loc, sourcemapLocations) {\n\t\tlet originalCharIndex = chunk.start;\n\t\tlet first = true;\n\n\t\twhile (originalCharIndex < chunk.end) {\n\t\t\tif (this.hires || first || sourcemapLocations.has(originalCharIndex)) {\n\t\t\t\tthis.rawSegments.push([this.generatedCodeColumn, sourceIndex, loc.line, loc.column]);\n\t\t\t}\n\n\t\t\tif (original[originalCharIndex] === '\\n') {\n\t\t\t\tloc.line += 1;\n\t\t\t\tloc.column = 0;\n\t\t\t\tthis.generatedCodeLine += 1;\n\t\t\t\tthis.raw[this.generatedCodeLine] = this.rawSegments = [];\n\t\t\t\tthis.generatedCodeColumn = 0;\n\t\t\t\tfirst = true;\n\t\t\t} else {\n\t\t\t\tloc.column += 1;\n\t\t\t\tthis.generatedCodeColumn += 1;\n\t\t\t\tfirst = false;\n\t\t\t}\n\n\t\t\toriginalCharIndex += 1;\n\t\t}\n\n\t\tthis.pending = null;\n\t}\n\n\tadvance(str) {\n\t\tif (!str) return;\n\n\t\tconst lines = str.split('\\n');\n\n\t\tif (lines.length > 1) {\n\t\t\tfor (let i = 0; i < lines.length - 1; i++) {\n\t\t\t\tthis.generatedCodeLine++;\n\t\t\t\tthis.raw[this.generatedCodeLine] = this.rawSegments = [];\n\t\t\t}\n\t\t\tthis.generatedCodeColumn = 0;\n\t\t}\n\n\t\tthis.generatedCodeColumn += lines[lines.length - 1].length;\n\t}\n}\n\nconst n = '\\n';\n\nconst warned = {\n\tinsertLeft: false,\n\tinsertRight: false,\n\tstoreName: false,\n};\n\nclass MagicString {\n\tconstructor(string, options = {}) {\n\t\tconst chunk = new Chunk(0, string.length, string);\n\n\t\tObject.defineProperties(this, {\n\t\t\toriginal: { writable: true, value: string },\n\t\t\toutro: { writable: true, value: '' },\n\t\t\tintro: { writable: true, value: '' },\n\t\t\tfirstChunk: { writable: true, value: chunk },\n\t\t\tlastChunk: { writable: true, value: chunk },\n\t\t\tlastSearchedChunk: { writable: true, value: chunk },\n\t\t\tbyStart: { writable: true, value: {} },\n\t\t\tbyEnd: { writable: true, value: {} },\n\t\t\tfilename: { writable: true, value: options.filename },\n\t\t\tindentExclusionRanges: { writable: true, value: options.indentExclusionRanges },\n\t\t\tsourcemapLocations: { writable: true, value: new BitSet() },\n\t\t\tstoredNames: { writable: true, value: {} },\n\t\t\tindentStr: { writable: true, value: undefined },\n\t\t});\n\n\t\tthis.byStart[0] = chunk;\n\t\tthis.byEnd[string.length] = chunk;\n\t}\n\n\taddSourcemapLocation(char) {\n\t\tthis.sourcemapLocations.add(char);\n\t}\n\n\tappend(content) {\n\t\tif (typeof content !== 'string') throw new TypeError('outro content must be a string');\n\n\t\tthis.outro += content;\n\t\treturn this;\n\t}\n\n\tappendLeft(index, content) {\n\t\tif (typeof content !== 'string') throw new TypeError('inserted content must be a string');\n\n\t\tthis._split(index);\n\n\t\tconst chunk = this.byEnd[index];\n\n\t\tif (chunk) {\n\t\t\tchunk.appendLeft(content);\n\t\t} else {\n\t\t\tthis.intro += content;\n\t\t}\n\t\treturn this;\n\t}\n\n\tappendRight(index, content) {\n\t\tif (typeof content !== 'string') throw new TypeError('inserted content must be a string');\n\n\t\tthis._split(index);\n\n\t\tconst chunk = this.byStart[index];\n\n\t\tif (chunk) {\n\t\t\tchunk.appendRight(content);\n\t\t} else {\n\t\t\tthis.outro += content;\n\t\t}\n\t\treturn this;\n\t}\n\n\tclone() {\n\t\tconst cloned = new MagicString(this.original, { filename: this.filename });\n\n\t\tlet originalChunk = this.firstChunk;\n\t\tlet clonedChunk = (cloned.firstChunk = cloned.lastSearchedChunk = originalChunk.clone());\n\n\t\twhile (originalChunk) {\n\t\t\tcloned.byStart[clonedChunk.start] = clonedChunk;\n\t\t\tcloned.byEnd[clonedChunk.end] = clonedChunk;\n\n\t\t\tconst nextOriginalChunk = originalChunk.next;\n\t\t\tconst nextClonedChunk = nextOriginalChunk && nextOriginalChunk.clone();\n\n\t\t\tif (nextClonedChunk) {\n\t\t\t\tclonedChunk.next = nextClonedChunk;\n\t\t\t\tnextClonedChunk.previous = clonedChunk;\n\n\t\t\t\tclonedChunk = nextClonedChunk;\n\t\t\t}\n\n\t\t\toriginalChunk = nextOriginalChunk;\n\t\t}\n\n\t\tcloned.lastChunk = clonedChunk;\n\n\t\tif (this.indentExclusionRanges) {\n\t\t\tcloned.indentExclusionRanges = this.indentExclusionRanges.slice();\n\t\t}\n\n\t\tcloned.sourcemapLocations = new BitSet(this.sourcemapLocations);\n\n\t\tcloned.intro = this.intro;\n\t\tcloned.outro = this.outro;\n\n\t\treturn cloned;\n\t}\n\n\tgenerateDecodedMap(options) {\n\t\toptions = options || {};\n\n\t\tconst sourceIndex = 0;\n\t\tconst names = Object.keys(this.storedNames);\n\t\tconst mappings = new Mappings(options.hires);\n\n\t\tconst locate = getLocator(this.original);\n\n\t\tif (this.intro) {\n\t\t\tmappings.advance(this.intro);\n\t\t}\n\n\t\tthis.firstChunk.eachNext((chunk) => {\n\t\t\tconst loc = locate(chunk.start);\n\n\t\t\tif (chunk.intro.length) mappings.advance(chunk.intro);\n\n\t\t\tif (chunk.edited) {\n\t\t\t\tmappings.addEdit(\n\t\t\t\t\tsourceIndex,\n\t\t\t\t\tchunk.content,\n\t\t\t\t\tloc,\n\t\t\t\t\tchunk.storeName ? names.indexOf(chunk.original) : -1\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tmappings.addUneditedChunk(sourceIndex, chunk, this.original, loc, this.sourcemapLocations);\n\t\t\t}\n\n\t\t\tif (chunk.outro.length) mappings.advance(chunk.outro);\n\t\t});\n\n\t\treturn {\n\t\t\tfile: options.file ? options.file.split(/[/\\\\]/).pop() : null,\n\t\t\tsources: [options.source ? getRelativePath(options.file || '', options.source) : null],\n\t\t\tsourcesContent: options.includeContent ? [this.original] : [null],\n\t\t\tnames,\n\t\t\tmappings: mappings.raw,\n\t\t};\n\t}\n\n\tgenerateMap(options) {\n\t\treturn new SourceMap(this.generateDecodedMap(options));\n\t}\n\n\t_ensureindentStr() {\n\t\tif (this.indentStr === undefined) {\n\t\t\tthis.indentStr = guessIndent(this.original);\n\t\t}\n\t}\n\n\t_getRawIndentString() {\n\t\tthis._ensureindentStr();\n\t\treturn this.indentStr;\n\t}\n\n\tgetIndentString() {\n\t\tthis._ensureindentStr();\n\t\treturn this.indentStr === null ? '\\t' : this.indentStr;\n\t}\n\n\tindent(indentStr, options) {\n\t\tconst pattern = /^[^\\r\\n]/gm;\n\n\t\tif (isObject(indentStr)) {\n\t\t\toptions = indentStr;\n\t\t\tindentStr = undefined;\n\t\t}\n\n\t\tif (indentStr === undefined) {\n\t\t\tthis._ensureindentStr();\n\t\t\tindentStr = this.indentStr || '\\t';\n\t\t}\n\n\t\tif (indentStr === '') return this; // noop\n\n\t\toptions = options || {};\n\n\t\t// Process exclusion ranges\n\t\tconst isExcluded = {};\n\n\t\tif (options.exclude) {\n\t\t\tconst exclusions =\n\t\t\t\ttypeof options.exclude[0] === 'number' ? [options.exclude] : options.exclude;\n\t\t\texclusions.forEach((exclusion) => {\n\t\t\t\tfor (let i = exclusion[0]; i < exclusion[1]; i += 1) {\n\t\t\t\t\tisExcluded[i] = true;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tlet shouldIndentNextCharacter = options.indentStart !== false;\n\t\tconst replacer = (match) => {\n\t\t\tif (shouldIndentNextCharacter) return `${indentStr}${match}`;\n\t\t\tshouldIndentNextCharacter = true;\n\t\t\treturn match;\n\t\t};\n\n\t\tthis.intro = this.intro.replace(pattern, replacer);\n\n\t\tlet charIndex = 0;\n\t\tlet chunk = this.firstChunk;\n\n\t\twhile (chunk) {\n\t\t\tconst end = chunk.end;\n\n\t\t\tif (chunk.edited) {\n\t\t\t\tif (!isExcluded[charIndex]) {\n\t\t\t\t\tchunk.content = chunk.content.replace(pattern, replacer);\n\n\t\t\t\t\tif (chunk.content.length) {\n\t\t\t\t\t\tshouldIndentNextCharacter = chunk.content[chunk.content.length - 1] === '\\n';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcharIndex = chunk.start;\n\n\t\t\t\twhile (charIndex < end) {\n\t\t\t\t\tif (!isExcluded[charIndex]) {\n\t\t\t\t\t\tconst char = this.original[charIndex];\n\n\t\t\t\t\t\tif (char === '\\n') {\n\t\t\t\t\t\t\tshouldIndentNextCharacter = true;\n\t\t\t\t\t\t} else if (char !== '\\r' && shouldIndentNextCharacter) {\n\t\t\t\t\t\t\tshouldIndentNextCharacter = false;\n\n\t\t\t\t\t\t\tif (charIndex === chunk.start) {\n\t\t\t\t\t\t\t\tchunk.prependRight(indentStr);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis._splitChunk(chunk, charIndex);\n\t\t\t\t\t\t\t\tchunk = chunk.next;\n\t\t\t\t\t\t\t\tchunk.prependRight(indentStr);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tcharIndex += 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcharIndex = chunk.end;\n\t\t\tchunk = chunk.next;\n\t\t}\n\n\t\tthis.outro = this.outro.replace(pattern, replacer);\n\n\t\treturn this;\n\t}\n\n\tinsert() {\n\t\tthrow new Error(\n\t\t\t'magicString.insert(...) is deprecated. Use prependRight(...) or appendLeft(...)'\n\t\t);\n\t}\n\n\tinsertLeft(index, content) {\n\t\tif (!warned.insertLeft) {\n\t\t\tconsole.warn(\n\t\t\t\t'magicString.insertLeft(...) is deprecated. Use magicString.appendLeft(...) instead'\n\t\t\t); // eslint-disable-line no-console\n\t\t\twarned.insertLeft = true;\n\t\t}\n\n\t\treturn this.appendLeft(index, content);\n\t}\n\n\tinsertRight(index, content) {\n\t\tif (!warned.insertRight) {\n\t\t\tconsole.warn(\n\t\t\t\t'magicString.insertRight(...) is deprecated. Use magicString.prependRight(...) instead'\n\t\t\t); // eslint-disable-line no-console\n\t\t\twarned.insertRight = true;\n\t\t}\n\n\t\treturn this.prependRight(index, content);\n\t}\n\n\tmove(start, end, index) {\n\t\tif (index >= start && index <= end) throw new Error('Cannot move a selection inside itself');\n\n\t\tthis._split(start);\n\t\tthis._split(end);\n\t\tthis._split(index);\n\n\t\tconst first = this.byStart[start];\n\t\tconst last = this.byEnd[end];\n\n\t\tconst oldLeft = first.previous;\n\t\tconst oldRight = last.next;\n\n\t\tconst newRight = this.byStart[index];\n\t\tif (!newRight && last === this.lastChunk) return this;\n\t\tconst newLeft = newRight ? newRight.previous : this.lastChunk;\n\n\t\tif (oldLeft) oldLeft.next = oldRight;\n\t\tif (oldRight) oldRight.previous = oldLeft;\n\n\t\tif (newLeft) newLeft.next = first;\n\t\tif (newRight) newRight.previous = last;\n\n\t\tif (!first.previous) this.firstChunk = last.next;\n\t\tif (!last.next) {\n\t\t\tthis.lastChunk = first.previous;\n\t\t\tthis.lastChunk.next = null;\n\t\t}\n\n\t\tfirst.previous = newLeft;\n\t\tlast.next = newRight || null;\n\n\t\tif (!newLeft) this.firstChunk = first;\n\t\tif (!newRight) this.lastChunk = last;\n\t\treturn this;\n\t}\n\n\toverwrite(start, end, content, options) {\n\t\toptions = options || {};\n\t\treturn this.update(start, end, content, { ...options, overwrite: !options.contentOnly });\n\t}\n\n\tupdate(start, end, content, options) {\n\t\tif (typeof content !== 'string') throw new TypeError('replacement content must be a string');\n\n\t\twhile (start < 0) start += this.original.length;\n\t\twhile (end < 0) end += this.original.length;\n\n\t\tif (end > this.original.length) throw new Error('end is out of bounds');\n\t\tif (start === end)\n\t\t\tthrow new Error(\n\t\t\t\t'Cannot overwrite a zero-length range – use appendLeft or prependRight instead'\n\t\t\t);\n\n\t\tthis._split(start);\n\t\tthis._split(end);\n\n\t\tif (options === true) {\n\t\t\tif (!warned.storeName) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t'The final argument to magicString.overwrite(...) should be an options object. See https://github.com/rich-harris/magic-string'\n\t\t\t\t); // eslint-disable-line no-console\n\t\t\t\twarned.storeName = true;\n\t\t\t}\n\n\t\t\toptions = { storeName: true };\n\t\t}\n\t\tconst storeName = options !== undefined ? options.storeName : false;\n\t\tconst overwrite = options !== undefined ? options.overwrite : false;\n\n\t\tif (storeName) {\n\t\t\tconst original = this.original.slice(start, end);\n\t\t\tObject.defineProperty(this.storedNames, original, {\n\t\t\t\twritable: true,\n\t\t\t\tvalue: true,\n\t\t\t\tenumerable: true,\n\t\t\t});\n\t\t}\n\n\t\tconst first = this.byStart[start];\n\t\tconst last = this.byEnd[end];\n\n\t\tif (first) {\n\t\t\tlet chunk = first;\n\t\t\twhile (chunk !== last) {\n\t\t\t\tif (chunk.next !== this.byStart[chunk.end]) {\n\t\t\t\t\tthrow new Error('Cannot overwrite across a split point');\n\t\t\t\t}\n\t\t\t\tchunk = chunk.next;\n\t\t\t\tchunk.edit('', false);\n\t\t\t}\n\n\t\t\tfirst.edit(content, storeName, !overwrite);\n\t\t} else {\n\t\t\t// must be inserting at the end\n\t\t\tconst newChunk = new Chunk(start, end, '').edit(content, storeName);\n\n\t\t\t// TODO last chunk in the array may not be the last chunk, if it's moved...\n\t\t\tlast.next = newChunk;\n\t\t\tnewChunk.previous = last;\n\t\t}\n\t\treturn this;\n\t}\n\n\tprepend(content) {\n\t\tif (typeof content !== 'string') throw new TypeError('outro content must be a string');\n\n\t\tthis.intro = content + this.intro;\n\t\treturn this;\n\t}\n\n\tprependLeft(index, content) {\n\t\tif (typeof content !== 'string') throw new TypeError('inserted content must be a string');\n\n\t\tthis._split(index);\n\n\t\tconst chunk = this.byEnd[index];\n\n\t\tif (chunk) {\n\t\t\tchunk.prependLeft(content);\n\t\t} else {\n\t\t\tthis.intro = content + this.intro;\n\t\t}\n\t\treturn this;\n\t}\n\n\tprependRight(index, content) {\n\t\tif (typeof content !== 'string') throw new TypeError('inserted content must be a string');\n\n\t\tthis._split(index);\n\n\t\tconst chunk = this.byStart[index];\n\n\t\tif (chunk) {\n\t\t\tchunk.prependRight(content);\n\t\t} else {\n\t\t\tthis.outro = content + this.outro;\n\t\t}\n\t\treturn this;\n\t}\n\n\tremove(start, end) {\n\t\twhile (start < 0) start += this.original.length;\n\t\twhile (end < 0) end += this.original.length;\n\n\t\tif (start === end) return this;\n\n\t\tif (start < 0 || end > this.original.length) throw new Error('Character is out of bounds');\n\t\tif (start > end) throw new Error('end must be greater than start');\n\n\t\tthis._split(start);\n\t\tthis._split(end);\n\n\t\tlet chunk = this.byStart[start];\n\n\t\twhile (chunk) {\n\t\t\tchunk.intro = '';\n\t\t\tchunk.outro = '';\n\t\t\tchunk.edit('');\n\n\t\t\tchunk = end > chunk.end ? this.byStart[chunk.end] : null;\n\t\t}\n\t\treturn this;\n\t}\n\n\tlastChar() {\n\t\tif (this.outro.length) return this.outro[this.outro.length - 1];\n\t\tlet chunk = this.lastChunk;\n\t\tdo {\n\t\t\tif (chunk.outro.length) return chunk.outro[chunk.outro.length - 1];\n\t\t\tif (chunk.content.length) return chunk.content[chunk.content.length - 1];\n\t\t\tif (chunk.intro.length) return chunk.intro[chunk.intro.length - 1];\n\t\t} while ((chunk = chunk.previous));\n\t\tif (this.intro.length) return this.intro[this.intro.length - 1];\n\t\treturn '';\n\t}\n\n\tlastLine() {\n\t\tlet lineIndex = this.outro.lastIndexOf(n);\n\t\tif (lineIndex !== -1) return this.outro.substr(lineIndex + 1);\n\t\tlet lineStr = this.outro;\n\t\tlet chunk = this.lastChunk;\n\t\tdo {\n\t\t\tif (chunk.outro.length > 0) {\n\t\t\t\tlineIndex = chunk.outro.lastIndexOf(n);\n\t\t\t\tif (lineIndex !== -1) return chunk.outro.substr(lineIndex + 1) + lineStr;\n\t\t\t\tlineStr = chunk.outro + lineStr;\n\t\t\t}\n\n\t\t\tif (chunk.content.length > 0) {\n\t\t\t\tlineIndex = chunk.content.lastIndexOf(n);\n\t\t\t\tif (lineIndex !== -1) return chunk.content.substr(lineIndex + 1) + lineStr;\n\t\t\t\tlineStr = chunk.content + lineStr;\n\t\t\t}\n\n\t\t\tif (chunk.intro.length > 0) {\n\t\t\t\tlineIndex = chunk.intro.lastIndexOf(n);\n\t\t\t\tif (lineIndex !== -1) return chunk.intro.substr(lineIndex + 1) + lineStr;\n\t\t\t\tlineStr = chunk.intro + lineStr;\n\t\t\t}\n\t\t} while ((chunk = chunk.previous));\n\t\tlineIndex = this.intro.lastIndexOf(n);\n\t\tif (lineIndex !== -1) return this.intro.substr(lineIndex + 1) + lineStr;\n\t\treturn this.intro + lineStr;\n\t}\n\n\tslice(start = 0, end = this.original.length) {\n\t\twhile (start < 0) start += this.original.length;\n\t\twhile (end < 0) end += this.original.length;\n\n\t\tlet result = '';\n\n\t\t// find start chunk\n\t\tlet chunk = this.firstChunk;\n\t\twhile (chunk && (chunk.start > start || chunk.end <= start)) {\n\t\t\t// found end chunk before start\n\t\t\tif (chunk.start < end && chunk.end >= end) {\n\t\t\t\treturn result;\n\t\t\t}\n\n\t\t\tchunk = chunk.next;\n\t\t}\n\n\t\tif (chunk && chunk.edited && chunk.start !== start)\n\t\t\tthrow new Error(`Cannot use replaced character ${start} as slice start anchor.`);\n\n\t\tconst startChunk = chunk;\n\t\twhile (chunk) {\n\t\t\tif (chunk.intro && (startChunk !== chunk || chunk.start === start)) {\n\t\t\t\tresult += chunk.intro;\n\t\t\t}\n\n\t\t\tconst containsEnd = chunk.start < end && chunk.end >= end;\n\t\t\tif (containsEnd && chunk.edited && chunk.end !== end)\n\t\t\t\tthrow new Error(`Cannot use replaced character ${end} as slice end anchor.`);\n\n\t\t\tconst sliceStart = startChunk === chunk ? start - chunk.start : 0;\n\t\t\tconst sliceEnd = containsEnd ? chunk.content.length + end - chunk.end : chunk.content.length;\n\n\t\t\tresult += chunk.content.slice(sliceStart, sliceEnd);\n\n\t\t\tif (chunk.outro && (!containsEnd || chunk.end === end)) {\n\t\t\t\tresult += chunk.outro;\n\t\t\t}\n\n\t\t\tif (containsEnd) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tchunk = chunk.next;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t// TODO deprecate this? not really very useful\n\tsnip(start, end) {\n\t\tconst clone = this.clone();\n\t\tclone.remove(0, start);\n\t\tclone.remove(end, clone.original.length);\n\n\t\treturn clone;\n\t}\n\n\t_split(index) {\n\t\tif (this.byStart[index] || this.byEnd[index]) return;\n\n\t\tlet chunk = this.lastSearchedChunk;\n\t\tconst searchForward = index > chunk.end;\n\n\t\twhile (chunk) {\n\t\t\tif (chunk.contains(index)) return this._splitChunk(chunk, index);\n\n\t\t\tchunk = searchForward ? this.byStart[chunk.end] : this.byEnd[chunk.start];\n\t\t}\n\t}\n\n\t_splitChunk(chunk, index) {\n\t\tif (chunk.edited && chunk.content.length) {\n\t\t\t// zero-length edited chunks are a special case (overlapping replacements)\n\t\t\tconst loc = getLocator(this.original)(index);\n\t\t\tthrow new Error(\n\t\t\t\t`Cannot split a chunk that has already been edited (${loc.line}:${loc.column} – \"${chunk.original}\")`\n\t\t\t);\n\t\t}\n\n\t\tconst newChunk = chunk.split(index);\n\n\t\tthis.byEnd[index] = chunk;\n\t\tthis.byStart[index] = newChunk;\n\t\tthis.byEnd[newChunk.end] = newChunk;\n\n\t\tif (chunk === this.lastChunk) this.lastChunk = newChunk;\n\n\t\tthis.lastSearchedChunk = chunk;\n\t\treturn true;\n\t}\n\n\ttoString() {\n\t\tlet str = this.intro;\n\n\t\tlet chunk = this.firstChunk;\n\t\twhile (chunk) {\n\t\t\tstr += chunk.toString();\n\t\t\tchunk = chunk.next;\n\t\t}\n\n\t\treturn str + this.outro;\n\t}\n\n\tisEmpty() {\n\t\tlet chunk = this.firstChunk;\n\t\tdo {\n\t\t\tif (\n\t\t\t\t(chunk.intro.length && chunk.intro.trim()) ||\n\t\t\t\t(chunk.content.length && chunk.content.trim()) ||\n\t\t\t\t(chunk.outro.length && chunk.outro.trim())\n\t\t\t)\n\t\t\t\treturn false;\n\t\t} while ((chunk = chunk.next));\n\t\treturn true;\n\t}\n\n\tlength() {\n\t\tlet chunk = this.firstChunk;\n\t\tlet length = 0;\n\t\tdo {\n\t\t\tlength += chunk.intro.length + chunk.content.length + chunk.outro.length;\n\t\t} while ((chunk = chunk.next));\n\t\treturn length;\n\t}\n\n\ttrimLines() {\n\t\treturn this.trim('[\\\\r\\\\n]');\n\t}\n\n\ttrim(charType) {\n\t\treturn this.trimStart(charType).trimEnd(charType);\n\t}\n\n\ttrimEndAborted(charType) {\n\t\tconst rx = new RegExp((charType || '\\\\s') + '+$');\n\n\t\tthis.outro = this.outro.replace(rx, '');\n\t\tif (this.outro.length) return true;\n\n\t\tlet chunk = this.lastChunk;\n\n\t\tdo {\n\t\t\tconst end = chunk.end;\n\t\t\tconst aborted = chunk.trimEnd(rx);\n\n\t\t\t// if chunk was trimmed, we have a new lastChunk\n\t\t\tif (chunk.end !== end) {\n\t\t\t\tif (this.lastChunk === chunk) {\n\t\t\t\t\tthis.lastChunk = chunk.next;\n\t\t\t\t}\n\n\t\t\t\tthis.byEnd[chunk.end] = chunk;\n\t\t\t\tthis.byStart[chunk.next.start] = chunk.next;\n\t\t\t\tthis.byEnd[chunk.next.end] = chunk.next;\n\t\t\t}\n\n\t\t\tif (aborted) return true;\n\t\t\tchunk = chunk.previous;\n\t\t} while (chunk);\n\n\t\treturn false;\n\t}\n\n\ttrimEnd(charType) {\n\t\tthis.trimEndAborted(charType);\n\t\treturn this;\n\t}\n\ttrimStartAborted(charType) {\n\t\tconst rx = new RegExp('^' + (charType || '\\\\s') + '+');\n\n\t\tthis.intro = this.intro.replace(rx, '');\n\t\tif (this.intro.length) return true;\n\n\t\tlet chunk = this.firstChunk;\n\n\t\tdo {\n\t\t\tconst end = chunk.end;\n\t\t\tconst aborted = chunk.trimStart(rx);\n\n\t\t\tif (chunk.end !== end) {\n\t\t\t\t// special case...\n\t\t\t\tif (chunk === this.lastChunk) this.lastChunk = chunk.next;\n\n\t\t\t\tthis.byEnd[chunk.end] = chunk;\n\t\t\t\tthis.byStart[chunk.next.start] = chunk.next;\n\t\t\t\tthis.byEnd[chunk.next.end] = chunk.next;\n\t\t\t}\n\n\t\t\tif (aborted) return true;\n\t\t\tchunk = chunk.next;\n\t\t} while (chunk);\n\n\t\treturn false;\n\t}\n\n\ttrimStart(charType) {\n\t\tthis.trimStartAborted(charType);\n\t\treturn this;\n\t}\n\n\thasChanged() {\n\t\treturn this.original !== this.toString();\n\t}\n\n\t_replaceRegexp(searchValue, replacement) {\n\t\tfunction getReplacement(match, str) {\n\t\t\tif (typeof replacement === 'string') {\n\t\t\t\treturn replacement.replace(/\\$(\\$|&|\\d+)/g, (_, i) => {\n\t\t\t\t\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace#specifying_a_string_as_a_parameter\n\t\t\t\t\tif (i === '$') return '$';\n\t\t\t\t\tif (i === '&') return match[0];\n\t\t\t\t\tconst num = +i;\n\t\t\t\t\tif (num < match.length) return match[+i];\n\t\t\t\t\treturn `$${i}`;\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\treturn replacement(...match, match.index, str, match.groups);\n\t\t\t}\n\t\t}\n\t\tfunction matchAll(re, str) {\n\t\t\tlet match;\n\t\t\tconst matches = [];\n\t\t\twhile ((match = re.exec(str))) {\n\t\t\t\tmatches.push(match);\n\t\t\t}\n\t\t\treturn matches;\n\t\t}\n\t\tif (searchValue.global) {\n\t\t\tconst matches = matchAll(searchValue, this.original);\n\t\t\tmatches.forEach((match) => {\n\t\t\t\tif (match.index != null)\n\t\t\t\t\tthis.overwrite(\n\t\t\t\t\t\tmatch.index,\n\t\t\t\t\t\tmatch.index + match[0].length,\n\t\t\t\t\t\tgetReplacement(match, this.original)\n\t\t\t\t\t);\n\t\t\t});\n\t\t} else {\n\t\t\tconst match = this.original.match(searchValue);\n\t\t\tif (match && match.index != null)\n\t\t\t\tthis.overwrite(\n\t\t\t\t\tmatch.index,\n\t\t\t\t\tmatch.index + match[0].length,\n\t\t\t\t\tgetReplacement(match, this.original)\n\t\t\t\t);\n\t\t}\n\t\treturn this;\n\t}\n\n\t_replaceString(string, replacement) {\n\t\tconst { original } = this;\n\t\tconst index = original.indexOf(string);\n\n\t\tif (index !== -1) {\n\t\t\tthis.overwrite(index, index + string.length, replacement);\n\t\t}\n\n\t\treturn this;\n\t}\n\n\treplace(searchValue, replacement) {\n\t\tif (typeof searchValue === 'string') {\n\t\t\treturn this._replaceString(searchValue, replacement);\n\t\t}\n\n\t\treturn this._replaceRegexp(searchValue, replacement);\n\t}\n\n\t_replaceAllString(string, replacement) {\n\t\tconst { original } = this;\n\t\tconst stringLength = string.length;\n\t\tfor (\n\t\t\tlet index = original.indexOf(string);\n\t\t\tindex !== -1;\n\t\t\tindex = original.indexOf(string, index + stringLength)\n\t\t) {\n\t\t\tthis.overwrite(index, index + stringLength, replacement);\n\t\t}\n\n\t\treturn this;\n\t}\n\n\treplaceAll(searchValue, replacement) {\n\t\tif (typeof searchValue === 'string') {\n\t\t\treturn this._replaceAllString(searchValue, replacement);\n\t\t}\n\n\t\tif (!searchValue.global) {\n\t\t\tthrow new TypeError(\n\t\t\t\t'MagicString.prototype.replaceAll called with a non-global RegExp argument'\n\t\t\t);\n\t\t}\n\n\t\treturn this._replaceRegexp(searchValue, replacement);\n\t}\n}\n\nconst hasOwnProp = Object.prototype.hasOwnProperty;\n\nclass Bundle {\n\tconstructor(options = {}) {\n\t\tthis.intro = options.intro || '';\n\t\tthis.separator = options.separator !== undefined ? options.separator : '\\n';\n\t\tthis.sources = [];\n\t\tthis.uniqueSources = [];\n\t\tthis.uniqueSourceIndexByFilename = {};\n\t}\n\n\taddSource(source) {\n\t\tif (source instanceof MagicString) {\n\t\t\treturn this.addSource({\n\t\t\t\tcontent: source,\n\t\t\t\tfilename: source.filename,\n\t\t\t\tseparator: this.separator,\n\t\t\t});\n\t\t}\n\n\t\tif (!isObject(source) || !source.content) {\n\t\t\tthrow new Error(\n\t\t\t\t'bundle.addSource() takes an object with a `content` property, which should be an instance of MagicString, and an optional `filename`'\n\t\t\t);\n\t\t}\n\n\t\t['filename', 'indentExclusionRanges', 'separator'].forEach((option) => {\n\t\t\tif (!hasOwnProp.call(source, option)) source[option] = source.content[option];\n\t\t});\n\n\t\tif (source.separator === undefined) {\n\t\t\t// TODO there's a bunch of this sort of thing, needs cleaning up\n\t\t\tsource.separator = this.separator;\n\t\t}\n\n\t\tif (source.filename) {\n\t\t\tif (!hasOwnProp.call(this.uniqueSourceIndexByFilename, source.filename)) {\n\t\t\t\tthis.uniqueSourceIndexByFilename[source.filename] = this.uniqueSources.length;\n\t\t\t\tthis.uniqueSources.push({ filename: source.filename, content: source.content.original });\n\t\t\t} else {\n\t\t\t\tconst uniqueSource = this.uniqueSources[this.uniqueSourceIndexByFilename[source.filename]];\n\t\t\t\tif (source.content.original !== uniqueSource.content) {\n\t\t\t\t\tthrow new Error(`Illegal source: same filename (${source.filename}), different contents`);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.sources.push(source);\n\t\treturn this;\n\t}\n\n\tappend(str, options) {\n\t\tthis.addSource({\n\t\t\tcontent: new MagicString(str),\n\t\t\tseparator: (options && options.separator) || '',\n\t\t});\n\n\t\treturn this;\n\t}\n\n\tclone() {\n\t\tconst bundle = new Bundle({\n\t\t\tintro: this.intro,\n\t\t\tseparator: this.separator,\n\t\t});\n\n\t\tthis.sources.forEach((source) => {\n\t\t\tbundle.addSource({\n\t\t\t\tfilename: source.filename,\n\t\t\t\tcontent: source.content.clone(),\n\t\t\t\tseparator: source.separator,\n\t\t\t});\n\t\t});\n\n\t\treturn bundle;\n\t}\n\n\tgenerateDecodedMap(options = {}) {\n\t\tconst names = [];\n\t\tthis.sources.forEach((source) => {\n\t\t\tObject.keys(source.content.storedNames).forEach((name) => {\n\t\t\t\tif (!~names.indexOf(name)) names.push(name);\n\t\t\t});\n\t\t});\n\n\t\tconst mappings = new Mappings(options.hires);\n\n\t\tif (this.intro) {\n\t\t\tmappings.advance(this.intro);\n\t\t}\n\n\t\tthis.sources.forEach((source, i) => {\n\t\t\tif (i > 0) {\n\t\t\t\tmappings.advance(this.separator);\n\t\t\t}\n\n\t\t\tconst sourceIndex = source.filename ? this.uniqueSourceIndexByFilename[source.filename] : -1;\n\t\t\tconst magicString = source.content;\n\t\t\tconst locate = getLocator(magicString.original);\n\n\t\t\tif (magicString.intro) {\n\t\t\t\tmappings.advance(magicString.intro);\n\t\t\t}\n\n\t\t\tmagicString.firstChunk.eachNext((chunk) => {\n\t\t\t\tconst loc = locate(chunk.start);\n\n\t\t\t\tif (chunk.intro.length) mappings.advance(chunk.intro);\n\n\t\t\t\tif (source.filename) {\n\t\t\t\t\tif (chunk.edited) {\n\t\t\t\t\t\tmappings.addEdit(\n\t\t\t\t\t\t\tsourceIndex,\n\t\t\t\t\t\t\tchunk.content,\n\t\t\t\t\t\t\tloc,\n\t\t\t\t\t\t\tchunk.storeName ? names.indexOf(chunk.original) : -1\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmappings.addUneditedChunk(\n\t\t\t\t\t\t\tsourceIndex,\n\t\t\t\t\t\t\tchunk,\n\t\t\t\t\t\t\tmagicString.original,\n\t\t\t\t\t\t\tloc,\n\t\t\t\t\t\t\tmagicString.sourcemapLocations\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tmappings.advance(chunk.content);\n\t\t\t\t}\n\n\t\t\t\tif (chunk.outro.length) mappings.advance(chunk.outro);\n\t\t\t});\n\n\t\t\tif (magicString.outro) {\n\t\t\t\tmappings.advance(magicString.outro);\n\t\t\t}\n\t\t});\n\n\t\treturn {\n\t\t\tfile: options.file ? options.file.split(/[/\\\\]/).pop() : null,\n\t\t\tsources: this.uniqueSources.map((source) => {\n\t\t\t\treturn options.file ? getRelativePath(options.file, source.filename) : source.filename;\n\t\t\t}),\n\t\t\tsourcesContent: this.uniqueSources.map((source) => {\n\t\t\t\treturn options.includeContent ? source.content : null;\n\t\t\t}),\n\t\t\tnames,\n\t\t\tmappings: mappings.raw,\n\t\t};\n\t}\n\n\tgenerateMap(options) {\n\t\treturn new SourceMap(this.generateDecodedMap(options));\n\t}\n\n\tgetIndentString() {\n\t\tconst indentStringCounts = {};\n\n\t\tthis.sources.forEach((source) => {\n\t\t\tconst indentStr = source.content._getRawIndentString();\n\n\t\t\tif (indentStr === null) return;\n\n\t\t\tif (!indentStringCounts[indentStr]) indentStringCounts[indentStr] = 0;\n\t\t\tindentStringCounts[indentStr] += 1;\n\t\t});\n\n\t\treturn (\n\t\t\tObject.keys(indentStringCounts).sort((a, b) => {\n\t\t\t\treturn indentStringCounts[a] - indentStringCounts[b];\n\t\t\t})[0] || '\\t'\n\t\t);\n\t}\n\n\tindent(indentStr) {\n\t\tif (!arguments.length) {\n\t\t\tindentStr = this.getIndentString();\n\t\t}\n\n\t\tif (indentStr === '') return this; // noop\n\n\t\tlet trailingNewline = !this.intro || this.intro.slice(-1) === '\\n';\n\n\t\tthis.sources.forEach((source, i) => {\n\t\t\tconst separator = source.separator !== undefined ? source.separator : this.separator;\n\t\t\tconst indentStart = trailingNewline || (i > 0 && /\\r?\\n$/.test(separator));\n\n\t\t\tsource.content.indent(indentStr, {\n\t\t\t\texclude: source.indentExclusionRanges,\n\t\t\t\tindentStart, //: trailingNewline || /\\r?\\n$/.test( separator )  //true///\\r?\\n/.test( separator )\n\t\t\t});\n\n\t\t\ttrailingNewline = source.content.lastChar() === '\\n';\n\t\t});\n\n\t\tif (this.intro) {\n\t\t\tthis.intro =\n\t\t\t\tindentStr +\n\t\t\t\tthis.intro.replace(/^[^\\n]/gm, (match, index) => {\n\t\t\t\t\treturn index > 0 ? indentStr + match : match;\n\t\t\t\t});\n\t\t}\n\n\t\treturn this;\n\t}\n\n\tprepend(str) {\n\t\tthis.intro = str + this.intro;\n\t\treturn this;\n\t}\n\n\ttoString() {\n\t\tconst body = this.sources\n\t\t\t.map((source, i) => {\n\t\t\t\tconst separator = source.separator !== undefined ? source.separator : this.separator;\n\t\t\t\tconst str = (i > 0 ? separator : '') + source.content.toString();\n\n\t\t\t\treturn str;\n\t\t\t})\n\t\t\t.join('');\n\n\t\treturn this.intro + body;\n\t}\n\n\tisEmpty() {\n\t\tif (this.intro.length && this.intro.trim()) return false;\n\t\tif (this.sources.some((source) => !source.content.isEmpty())) return false;\n\t\treturn true;\n\t}\n\n\tlength() {\n\t\treturn this.sources.reduce(\n\t\t\t(length, source) => length + source.content.length(),\n\t\t\tthis.intro.length\n\t\t);\n\t}\n\n\ttrimLines() {\n\t\treturn this.trim('[\\\\r\\\\n]');\n\t}\n\n\ttrim(charType) {\n\t\treturn this.trimStart(charType).trimEnd(charType);\n\t}\n\n\ttrimStart(charType) {\n\t\tconst rx = new RegExp('^' + (charType || '\\\\s') + '+');\n\t\tthis.intro = this.intro.replace(rx, '');\n\n\t\tif (!this.intro) {\n\t\t\tlet source;\n\t\t\tlet i = 0;\n\n\t\t\tdo {\n\t\t\t\tsource = this.sources[i++];\n\t\t\t\tif (!source) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} while (!source.content.trimStartAborted(charType));\n\t\t}\n\n\t\treturn this;\n\t}\n\n\ttrimEnd(charType) {\n\t\tconst rx = new RegExp((charType || '\\\\s') + '+$');\n\n\t\tlet source;\n\t\tlet i = this.sources.length - 1;\n\n\t\tdo {\n\t\t\tsource = this.sources[i--];\n\t\t\tif (!source) {\n\t\t\t\tthis.intro = this.intro.replace(rx, '');\n\t\t\t\tbreak;\n\t\t\t}\n\t\t} while (!source.content.trimEndAborted(charType));\n\n\t\treturn this;\n\t}\n}\n\nMagicString.Bundle = Bundle;\nMagicString.SourceMap = SourceMap;\nMagicString.default = MagicString; // work around TypeScript bug https://github.com/Rich-Harris/magic-string/pull/121\n\nmodule.exports = MagicString;\n//# sourceMappingURL=magic-string.cjs.js.map\n/package.json\u0007\u0018{\n  \"name\": \"magic-string\",\n  \"version\": \"0.27.0\",\n  \"description\": \"Modify strings, generate sourcemaps\",\n  \"keywords\": [\n    \"string\",\n    \"string manipulation\",\n    \"sourcemap\",\n    \"templating\",\n    \"transpilation\"\n  ],\n  \"repository\": \"https://github.com/rich-harris/magic-string\",\n  \"license\": \"MIT\",\n  \"author\": \"Rich Harris\",\n  \"main\": \"./dist/magic-string.cjs.js\",\n  \"module\": \"./dist/magic-string.es.mjs\",\n  \"jsnext:main\": \"./dist/magic-string.es.mjs\",\n  \"types\": \"./index.d.ts\",\n  \"exports\": {\n    \"./package.json\": \"./package.json\",\n    \".\": {\n      \"import\": \"./dist/magic-string.es.mjs\",\n      \"require\": \"./dist/magic-string.cjs.js\",\n      \"types\": \"./index.d.ts\"\n    }\n  },\n  \"files\": [\n    \"dist/*\",\n    \"index.d.ts\",\n    \"README.md\"\n  ],\n  \"scripts\": {\n    \"build\": \"rollup -c\",\n    \"changelog\": \"conventional-changelog -p angular -i CHANGELOG.md -s\",\n    \"format\": \"prettier --single-quote --print-width 100 --use-tabs --write src/*.js src/**/*.js\",\n    \"lint\": \"eslint src test\",\n    \"prepare\": \"npm run build\",\n    \"prepublishOnly\": \"rm -rf dist && npm test\",\n    \"release\": \"bumpp -x \\\"npm run changelog\\\" --all --commit --tag --push && npm publish\",\n    \"pretest\": \"npm run lint && npm run build\",\n    \"test\": \"mocha\",\n    \"bench\": \"npm run build && node benchmark/index.mjs\",\n    \"watch\": \"rollup -cw\"\n  },\n  \"devDependencies\": {\n    \"@rollup/plugin-node-resolve\": \"^14.1.0\",\n    \"@rollup/plugin-replace\": \"^4.0.0\",\n    \"benchmark\": \"^2.1.4\",\n    \"bumpp\": \"^8.2.1\",\n    \"conventional-changelog-cli\": \"^2.2.2\",\n    \"eslint\": \"^8.23.1\",\n    \"mocha\": \"^10.0.0\",\n    \"prettier\": \"^2.7.1\",\n    \"rollup\": \"^2.79.1\",\n    \"source-map-js\": \"^1.0.2\",\n    \"source-map-support\": \"^0.5.21\"\n  },\n  \"engines\": {\n    \"node\": \">=12\"\n  },\n  \"dependencies\": {\n    \"@jridgewell/sourcemap-codec\": \"^1.4.13\"\n  }\n}\n/dist/magic-string.es.mjs.map\u0000\u0001Y\u0014{\"version\":3,\"file\":\"magic-string.es.mjs\",\"sources\":[\"../src/BitSet.js\",\"../src/Chunk.js\",\"../src/SourceMap.js\",\"../src/utils/guessIndent.js\",\"../src/utils/getRelativePath.js\",\"../src/utils/isObject.js\",\"../src/utils/getLocator.js\",\"../src/utils/Mappings.js\",\"../src/MagicString.js\",\"../src/Bundle.js\"],\"sourcesContent\":[\"export default class BitSet {\\n\\tconstructor(arg) {\\n\\t\\tthis.bits = arg instanceof BitSet ? arg.bits.slice() : [];\\n\\t}\\n\\n\\tadd(n) {\\n\\t\\tthis.bits[n >> 5] |= 1 << (n & 31);\\n\\t}\\n\\n\\thas(n) {\\n\\t\\treturn !!(this.bits[n >> 5] & (1 << (n & 31)));\\n\\t}\\n}\\n\",\"export default class Chunk {\\n\\tconstructor(start, end, content) {\\n\\t\\tthis.start = start;\\n\\t\\tthis.end = end;\\n\\t\\tthis.original = content;\\n\\n\\t\\tthis.intro = '';\\n\\t\\tthis.outro = '';\\n\\n\\t\\tthis.content = content;\\n\\t\\tthis.storeName = false;\\n\\t\\tthis.edited = false;\\n\\n\\t\\tif (DEBUG) {\\n\\t\\t\\t// we make these non-enumerable, for sanity while debugging\\n\\t\\t\\tObject.defineProperties(this, {\\n\\t\\t\\t\\tprevious: { writable: true, value: null },\\n\\t\\t\\t\\tnext: { writable: true, value: null },\\n\\t\\t\\t});\\n\\t\\t} else {\\n\\t\\t\\tthis.previous = null;\\n\\t\\t\\tthis.next = null;\\n\\t\\t}\\n\\t}\\n\\n\\tappendLeft(content) {\\n\\t\\tthis.outro += content;\\n\\t}\\n\\n\\tappendRight(content) {\\n\\t\\tthis.intro = this.intro + content;\\n\\t}\\n\\n\\tclone() {\\n\\t\\tconst chunk = new Chunk(this.start, this.end, this.original);\\n\\n\\t\\tchunk.intro = this.intro;\\n\\t\\tchunk.outro = this.outro;\\n\\t\\tchunk.content = this.content;\\n\\t\\tchunk.storeName = this.storeName;\\n\\t\\tchunk.edited = this.edited;\\n\\n\\t\\treturn chunk;\\n\\t}\\n\\n\\tcontains(index) {\\n\\t\\treturn this.start < index && index < this.end;\\n\\t}\\n\\n\\teachNext(fn) {\\n\\t\\tlet chunk = this;\\n\\t\\twhile (chunk) {\\n\\t\\t\\tfn(chunk);\\n\\t\\t\\tchunk = chunk.next;\\n\\t\\t}\\n\\t}\\n\\n\\teachPrevious(fn) {\\n\\t\\tlet chunk = this;\\n\\t\\twhile (chunk) {\\n\\t\\t\\tfn(chunk);\\n\\t\\t\\tchunk = chunk.previous;\\n\\t\\t}\\n\\t}\\n\\n\\tedit(content, storeName, contentOnly) {\\n\\t\\tthis.content = content;\\n\\t\\tif (!contentOnly) {\\n\\t\\t\\tthis.intro = '';\\n\\t\\t\\tthis.outro = '';\\n\\t\\t}\\n\\t\\tthis.storeName = storeName;\\n\\n\\t\\tthis.edited = true;\\n\\n\\t\\treturn this;\\n\\t}\\n\\n\\tprependLeft(content) {\\n\\t\\tthis.outro = content + this.outro;\\n\\t}\\n\\n\\tprependRight(content) {\\n\\t\\tthis.intro = content + this.intro;\\n\\t}\\n\\n\\tsplit(index) {\\n\\t\\tconst sliceIndex = index - this.start;\\n\\n\\t\\tconst originalBefore = this.original.slice(0, sliceIndex);\\n\\t\\tconst originalAfter = this.original.slice(sliceIndex);\\n\\n\\t\\tthis.original = originalBefore;\\n\\n\\t\\tconst newChunk = new Chunk(index, this.end, originalAfter);\\n\\t\\tnewChunk.outro = this.outro;\\n\\t\\tthis.outro = '';\\n\\n\\t\\tthis.end = index;\\n\\n\\t\\tif (this.edited) {\\n\\t\\t\\t// TODO is this block necessary?...\\n\\t\\t\\tnewChunk.edit('', false);\\n\\t\\t\\tthis.content = '';\\n\\t\\t} else {\\n\\t\\t\\tthis.content = originalBefore;\\n\\t\\t}\\n\\n\\t\\tnewChunk.next = this.next;\\n\\t\\tif (newChunk.next) newChunk.next.previous = newChunk;\\n\\t\\tnewChunk.previous = this;\\n\\t\\tthis.next = newChunk;\\n\\n\\t\\treturn newChunk;\\n\\t}\\n\\n\\ttoString() {\\n\\t\\treturn this.intro + this.content + this.outro;\\n\\t}\\n\\n\\ttrimEnd(rx) {\\n\\t\\tthis.outro = this.outro.replace(rx, '');\\n\\t\\tif (this.outro.length) return true;\\n\\n\\t\\tconst trimmed = this.content.replace(rx, '');\\n\\n\\t\\tif (trimmed.length) {\\n\\t\\t\\tif (trimmed !== this.content) {\\n\\t\\t\\t\\tthis.split(this.start + trimmed.length).edit('', undefined, true);\\n\\t\\t\\t}\\n\\t\\t\\treturn true;\\n\\t\\t} else {\\n\\t\\t\\tthis.edit('', undefined, true);\\n\\n\\t\\t\\tthis.intro = this.intro.replace(rx, '');\\n\\t\\t\\tif (this.intro.length) return true;\\n\\t\\t}\\n\\t}\\n\\n\\ttrimStart(rx) {\\n\\t\\tthis.intro = this.intro.replace(rx, '');\\n\\t\\tif (this.intro.length) return true;\\n\\n\\t\\tconst trimmed = this.content.replace(rx, '');\\n\\n\\t\\tif (trimmed.length) {\\n\\t\\t\\tif (trimmed !== this.content) {\\n\\t\\t\\t\\tthis.split(this.end - trimmed.length);\\n\\t\\t\\t\\tthis.edit('', undefined, true);\\n\\t\\t\\t}\\n\\t\\t\\treturn true;\\n\\t\\t} else {\\n\\t\\t\\tthis.edit('', undefined, true);\\n\\n\\t\\t\\tthis.outro = this.outro.replace(rx, '');\\n\\t\\t\\tif (this.outro.length) return true;\\n\\t\\t}\\n\\t}\\n}\\n\",\"import { encode } from '@jridgewell/sourcemap-codec';\\n\\nfunction getBtoa () {\\n\\tif (typeof window !== 'undefined' && typeof window.btoa === 'function') {\\n\\t\\treturn (str) => window.btoa(unescape(encodeURIComponent(str)));\\n\\t} else if (typeof Buffer === 'function') {\\n\\t\\treturn (str) => Buffer.from(str, 'utf-8').toString('base64');\\n\\t} else {\\n\\t\\treturn () => {\\n\\t\\t\\tthrow new Error('Unsupported environment: `window.btoa` or `Buffer` should be supported.');\\n\\t\\t};\\n\\t}\\n}\\n\\nconst btoa = /*#__PURE__*/ getBtoa();\\n\\nexport default class SourceMap {\\n\\tconstructor(properties) {\\n\\t\\tthis.version = 3;\\n\\t\\tthis.file = properties.file;\\n\\t\\tthis.sources = properties.sources;\\n\\t\\tthis.sourcesContent = properties.sourcesContent;\\n\\t\\tthis.names = properties.names;\\n\\t\\tthis.mappings = encode(properties.mappings);\\n\\t}\\n\\n\\ttoString() {\\n\\t\\treturn JSON.stringify(this);\\n\\t}\\n\\n\\ttoUrl() {\\n\\t\\treturn 'data:application/json;charset=utf-8;base64,' + btoa(this.toString());\\n\\t}\\n}\\n\",\"export default function guessIndent(code) {\\n\\tconst lines = code.split('\\\\n');\\n\\n\\tconst tabbed = lines.filter((line) => /^\\\\t+/.test(line));\\n\\tconst spaced = lines.filter((line) => /^ {2,}/.test(line));\\n\\n\\tif (tabbed.length === 0 && spaced.length === 0) {\\n\\t\\treturn null;\\n\\t}\\n\\n\\t// More lines tabbed than spaced? Assume tabs, and\\n\\t// default to tabs in the case of a tie (or nothing\\n\\t// to go on)\\n\\tif (tabbed.length >= spaced.length) {\\n\\t\\treturn '\\\\t';\\n\\t}\\n\\n\\t// Otherwise, we need to guess the multiple\\n\\tconst min = spaced.reduce((previous, current) => {\\n\\t\\tconst numSpaces = /^ +/.exec(current)[0].length;\\n\\t\\treturn Math.min(numSpaces, previous);\\n\\t}, Infinity);\\n\\n\\treturn new Array(min + 1).join(' ');\\n}\\n\",\"export default function getRelativePath(from, to) {\\n\\tconst fromParts = from.split(/[/\\\\\\\\]/);\\n\\tconst toParts = to.split(/[/\\\\\\\\]/);\\n\\n\\tfromParts.pop(); // get dirname\\n\\n\\twhile (fromParts[0] === toParts[0]) {\\n\\t\\tfromParts.shift();\\n\\t\\ttoParts.shift();\\n\\t}\\n\\n\\tif (fromParts.length) {\\n\\t\\tlet i = fromParts.length;\\n\\t\\twhile (i--) fromParts[i] = '..';\\n\\t}\\n\\n\\treturn fromParts.concat(toParts).join('/');\\n}\\n\",\"const toString = Object.prototype.toString;\\n\\nexport default function isObject(thing) {\\n\\treturn toString.call(thing) === '[object Object]';\\n}\\n\",\"export default function getLocator(source) {\\n\\tconst originalLines = source.split('\\\\n');\\n\\tconst lineOffsets = [];\\n\\n\\tfor (let i = 0, pos = 0; i < originalLines.length; i++) {\\n\\t\\tlineOffsets.push(pos);\\n\\t\\tpos += originalLines[i].length + 1;\\n\\t}\\n\\n\\treturn function locate(index) {\\n\\t\\tlet i = 0;\\n\\t\\tlet j = lineOffsets.length;\\n\\t\\twhile (i < j) {\\n\\t\\t\\tconst m = (i + j) >> 1;\\n\\t\\t\\tif (index < lineOffsets[m]) {\\n\\t\\t\\t\\tj = m;\\n\\t\\t\\t} else {\\n\\t\\t\\t\\ti = m + 1;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tconst line = i - 1;\\n\\t\\tconst column = index - lineOffsets[line];\\n\\t\\treturn { line, column };\\n\\t};\\n}\\n\",\"export default class Mappings {\\n\\tconstructor(hires) {\\n\\t\\tthis.hires = hires;\\n\\t\\tthis.generatedCodeLine = 0;\\n\\t\\tthis.generatedCodeColumn = 0;\\n\\t\\tthis.raw = [];\\n\\t\\tthis.rawSegments = this.raw[this.generatedCodeLine] = [];\\n\\t\\tthis.pending = null;\\n\\t}\\n\\n\\taddEdit(sourceIndex, content, loc, nameIndex) {\\n\\t\\tif (content.length) {\\n\\t\\t\\tconst segment = [this.generatedCodeColumn, sourceIndex, loc.line, loc.column];\\n\\t\\t\\tif (nameIndex >= 0) {\\n\\t\\t\\t\\tsegment.push(nameIndex);\\n\\t\\t\\t}\\n\\t\\t\\tthis.rawSegments.push(segment);\\n\\t\\t} else if (this.pending) {\\n\\t\\t\\tthis.rawSegments.push(this.pending);\\n\\t\\t}\\n\\n\\t\\tthis.advance(content);\\n\\t\\tthis.pending = null;\\n\\t}\\n\\n\\taddUneditedChunk(sourceIndex, chunk, original, loc, sourcemapLocations) {\\n\\t\\tlet originalCharIndex = chunk.start;\\n\\t\\tlet first = true;\\n\\n\\t\\twhile (originalCharIndex < chunk.end) {\\n\\t\\t\\tif (this.hires || first || sourcemapLocations.has(originalCharIndex)) {\\n\\t\\t\\t\\tthis.rawSegments.push([this.generatedCodeColumn, sourceIndex, loc.line, loc.column]);\\n\\t\\t\\t}\\n\\n\\t\\t\\tif (original[originalCharIndex] === '\\\\n') {\\n\\t\\t\\t\\tloc.line += 1;\\n\\t\\t\\t\\tloc.column = 0;\\n\\t\\t\\t\\tthis.generatedCodeLine += 1;\\n\\t\\t\\t\\tthis.raw[this.generatedCodeLine] = this.rawSegments = [];\\n\\t\\t\\t\\tthis.generatedCodeColumn = 0;\\n\\t\\t\\t\\tfirst = true;\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tloc.column += 1;\\n\\t\\t\\t\\tthis.generatedCodeColumn += 1;\\n\\t\\t\\t\\tfirst = false;\\n\\t\\t\\t}\\n\\n\\t\\t\\toriginalCharIndex += 1;\\n\\t\\t}\\n\\n\\t\\tthis.pending = null;\\n\\t}\\n\\n\\tadvance(str) {\\n\\t\\tif (!str) return;\\n\\n\\t\\tconst lines = str.split('\\\\n');\\n\\n\\t\\tif (lines.length > 1) {\\n\\t\\t\\tfor (let i = 0; i < lines.length - 1; i++) {\\n\\t\\t\\t\\tthis.generatedCodeLine++;\\n\\t\\t\\t\\tthis.raw[this.generatedCodeLine] = this.rawSegments = [];\\n\\t\\t\\t}\\n\\t\\t\\tthis.generatedCodeColumn = 0;\\n\\t\\t}\\n\\n\\t\\tthis.generatedCodeColumn += lines[lines.length - 1].length;\\n\\t}\\n}\\n\",\"import BitSet from './BitSet.js';\\nimport Chunk from './Chunk.js';\\nimport SourceMap from './SourceMap.js';\\nimport guessIndent from './utils/guessIndent.js';\\nimport getRelativePath from './utils/getRelativePath.js';\\nimport isObject from './utils/isObject.js';\\nimport getLocator from './utils/getLocator.js';\\nimport Mappings from './utils/Mappings.js';\\nimport Stats from './utils/Stats.js';\\n\\nconst n = '\\\\n';\\n\\nconst warned = {\\n\\tinsertLeft: false,\\n\\tinsertRight: false,\\n\\tstoreName: false,\\n};\\n\\nexport default class MagicString {\\n\\tconstructor(string, options = {}) {\\n\\t\\tconst chunk = new Chunk(0, string.length, string);\\n\\n\\t\\tObject.defineProperties(this, {\\n\\t\\t\\toriginal: { writable: true, value: string },\\n\\t\\t\\toutro: { writable: true, value: '' },\\n\\t\\t\\tintro: { writable: true, value: '' },\\n\\t\\t\\tfirstChunk: { writable: true, value: chunk },\\n\\t\\t\\tlastChunk: { writable: true, value: chunk },\\n\\t\\t\\tlastSearchedChunk: { writable: true, value: chunk },\\n\\t\\t\\tbyStart: { writable: true, value: {} },\\n\\t\\t\\tbyEnd: { writable: true, value: {} },\\n\\t\\t\\tfilename: { writable: true, value: options.filename },\\n\\t\\t\\tindentExclusionRanges: { writable: true, value: options.indentExclusionRanges },\\n\\t\\t\\tsourcemapLocations: { writable: true, value: new BitSet() },\\n\\t\\t\\tstoredNames: { writable: true, value: {} },\\n\\t\\t\\tindentStr: { writable: true, value: undefined },\\n\\t\\t});\\n\\n\\t\\tif (DEBUG) {\\n\\t\\t\\tObject.defineProperty(this, 'stats', { value: new Stats() });\\n\\t\\t}\\n\\n\\t\\tthis.byStart[0] = chunk;\\n\\t\\tthis.byEnd[string.length] = chunk;\\n\\t}\\n\\n\\taddSourcemapLocation(char) {\\n\\t\\tthis.sourcemapLocations.add(char);\\n\\t}\\n\\n\\tappend(content) {\\n\\t\\tif (typeof content !== 'string') throw new TypeError('outro content must be a string');\\n\\n\\t\\tthis.outro += content;\\n\\t\\treturn this;\\n\\t}\\n\\n\\tappendLeft(index, content) {\\n\\t\\tif (typeof content !== 'string') throw new TypeError('inserted content must be a string');\\n\\n\\t\\tif (DEBUG) this.stats.time('appendLeft');\\n\\n\\t\\tthis._split(index);\\n\\n\\t\\tconst chunk = this.byEnd[index];\\n\\n\\t\\tif (chunk) {\\n\\t\\t\\tchunk.appendLeft(content);\\n\\t\\t} else {\\n\\t\\t\\tthis.intro += content;\\n\\t\\t}\\n\\n\\t\\tif (DEBUG) this.stats.timeEnd('appendLeft');\\n\\t\\treturn this;\\n\\t}\\n\\n\\tappendRight(index, content) {\\n\\t\\tif (typeof content !== 'string') throw new TypeError('inserted content must be a string');\\n\\n\\t\\tif (DEBUG) this.stats.time('appendRight');\\n\\n\\t\\tthis._split(index);\\n\\n\\t\\tconst chunk = this.byStart[index];\\n\\n\\t\\tif (chunk) {\\n\\t\\t\\tchunk.appendRight(content);\\n\\t\\t} else {\\n\\t\\t\\tthis.outro += content;\\n\\t\\t}\\n\\n\\t\\tif (DEBUG) this.stats.timeEnd('appendRight');\\n\\t\\treturn this;\\n\\t}\\n\\n\\tclone() {\\n\\t\\tconst cloned = new MagicString(this.original, { filename: this.filename });\\n\\n\\t\\tlet originalChunk = this.firstChunk;\\n\\t\\tlet clonedChunk = (cloned.firstChunk = cloned.lastSearchedChunk = originalChunk.clone());\\n\\n\\t\\twhile (originalChunk) {\\n\\t\\t\\tcloned.byStart[clonedChunk.start] = clonedChunk;\\n\\t\\t\\tcloned.byEnd[clonedChunk.end] = clonedChunk;\\n\\n\\t\\t\\tconst nextOriginalChunk = originalChunk.next;\\n\\t\\t\\tconst nextClonedChunk = nextOriginalChunk && nextOriginalChunk.clone();\\n\\n\\t\\t\\tif (nextClonedChunk) {\\n\\t\\t\\t\\tclonedChunk.next = nextClonedChunk;\\n\\t\\t\\t\\tnextClonedChunk.previous = clonedChunk;\\n\\n\\t\\t\\t\\tclonedChunk = nextClonedChunk;\\n\\t\\t\\t}\\n\\n\\t\\t\\toriginalChunk = nextOriginalChunk;\\n\\t\\t}\\n\\n\\t\\tcloned.lastChunk = clonedChunk;\\n\\n\\t\\tif (this.indentExclusionRanges) {\\n\\t\\t\\tcloned.indentExclusionRanges = this.indentExclusionRanges.slice();\\n\\t\\t}\\n\\n\\t\\tcloned.sourcemapLocations = new BitSet(this.sourcemapLocations);\\n\\n\\t\\tcloned.intro = this.intro;\\n\\t\\tcloned.outro = this.outro;\\n\\n\\t\\treturn cloned;\\n\\t}\\n\\n\\tgenerateDecodedMap(options) {\\n\\t\\toptions = options || {};\\n\\n\\t\\tconst sourceIndex = 0;\\n\\t\\tconst names = Object.keys(this.storedNames);\\n\\t\\tconst mappings = new Mappings(options.hires);\\n\\n\\t\\tconst locate = getLocator(this.original);\\n\\n\\t\\tif (this.intro) {\\n\\t\\t\\tmappings.advance(this.intro);\\n\\t\\t}\\n\\n\\t\\tthis.firstChunk.eachNext((chunk) => {\\n\\t\\t\\tconst loc = locate(chunk.start);\\n\\n\\t\\t\\tif (chunk.intro.length) mappings.advance(chunk.intro);\\n\\n\\t\\t\\tif (chunk.edited) {\\n\\t\\t\\t\\tmappings.addEdit(\\n\\t\\t\\t\\t\\tsourceIndex,\\n\\t\\t\\t\\t\\tchunk.content,\\n\\t\\t\\t\\t\\tloc,\\n\\t\\t\\t\\t\\tchunk.storeName ? names.indexOf(chunk.original) : -1\\n\\t\\t\\t\\t);\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tmappings.addUneditedChunk(sourceIndex, chunk, this.original, loc, this.sourcemapLocations);\\n\\t\\t\\t}\\n\\n\\t\\t\\tif (chunk.outro.length) mappings.advance(chunk.outro);\\n\\t\\t});\\n\\n\\t\\treturn {\\n\\t\\t\\tfile: options.file ? options.file.split(/[/\\\\\\\\]/).pop() : null,\\n\\t\\t\\tsources: [options.source ? getRelativePath(options.file || '', options.source) : null],\\n\\t\\t\\tsourcesContent: options.includeContent ? [this.original] : [null],\\n\\t\\t\\tnames,\\n\\t\\t\\tmappings: mappings.raw,\\n\\t\\t};\\n\\t}\\n\\n\\tgenerateMap(options) {\\n\\t\\treturn new SourceMap(this.generateDecodedMap(options));\\n\\t}\\n\\n\\t_ensureindentStr() {\\n\\t\\tif (this.indentStr === undefined) {\\n\\t\\t\\tthis.indentStr = guessIndent(this.original);\\n\\t\\t}\\n\\t}\\n\\n\\t_getRawIndentString() {\\n\\t\\tthis._ensureindentStr();\\n\\t\\treturn this.indentStr;\\n\\t}\\n\\n\\tgetIndentString() {\\n\\t\\tthis._ensureindentStr();\\n\\t\\treturn this.indentStr === null ? '\\\\t' : this.indentStr;\\n\\t}\\n\\n\\tindent(indentStr, options) {\\n\\t\\tconst pattern = /^[^\\\\r\\\\n]/gm;\\n\\n\\t\\tif (isObject(indentStr)) {\\n\\t\\t\\toptions = indentStr;\\n\\t\\t\\tindentStr = undefined;\\n\\t\\t}\\n\\n\\t\\tif (indentStr === undefined) {\\n\\t\\t\\tthis._ensureindentStr();\\n\\t\\t\\tindentStr = this.indentStr || '\\\\t';\\n\\t\\t}\\n\\n\\t\\tif (indentStr === '') return this; // noop\\n\\n\\t\\toptions = options || {};\\n\\n\\t\\t// Process exclusion ranges\\n\\t\\tconst isExcluded = {};\\n\\n\\t\\tif (options.exclude) {\\n\\t\\t\\tconst exclusions =\\n\\t\\t\\t\\ttypeof options.exclude[0] === 'number' ? [options.exclude] : options.exclude;\\n\\t\\t\\texclusions.forEach((exclusion) => {\\n\\t\\t\\t\\tfor (let i = exclusion[0]; i < exclusion[1]; i += 1) {\\n\\t\\t\\t\\t\\tisExcluded[i] = true;\\n\\t\\t\\t\\t}\\n\\t\\t\\t});\\n\\t\\t}\\n\\n\\t\\tlet shouldIndentNextCharacter = options.indentStart !== false;\\n\\t\\tconst replacer = (match) => {\\n\\t\\t\\tif (shouldIndentNextCharacter) return `${indentStr}${match}`;\\n\\t\\t\\tshouldIndentNextCharacter = true;\\n\\t\\t\\treturn match;\\n\\t\\t};\\n\\n\\t\\tthis.intro = this.intro.replace(pattern, replacer);\\n\\n\\t\\tlet charIndex = 0;\\n\\t\\tlet chunk = this.firstChunk;\\n\\n\\t\\twhile (chunk) {\\n\\t\\t\\tconst end = chunk.end;\\n\\n\\t\\t\\tif (chunk.edited) {\\n\\t\\t\\t\\tif (!isExcluded[charIndex]) {\\n\\t\\t\\t\\t\\tchunk.content = chunk.content.replace(pattern, replacer);\\n\\n\\t\\t\\t\\t\\tif (chunk.content.length) {\\n\\t\\t\\t\\t\\t\\tshouldIndentNextCharacter = chunk.content[chunk.content.length - 1] === '\\\\n';\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tcharIndex = chunk.start;\\n\\n\\t\\t\\t\\twhile (charIndex < end) {\\n\\t\\t\\t\\t\\tif (!isExcluded[charIndex]) {\\n\\t\\t\\t\\t\\t\\tconst char = this.original[charIndex];\\n\\n\\t\\t\\t\\t\\t\\tif (char === '\\\\n') {\\n\\t\\t\\t\\t\\t\\t\\tshouldIndentNextCharacter = true;\\n\\t\\t\\t\\t\\t\\t} else if (char !== '\\\\r' && shouldIndentNextCharacter) {\\n\\t\\t\\t\\t\\t\\t\\tshouldIndentNextCharacter = false;\\n\\n\\t\\t\\t\\t\\t\\t\\tif (charIndex === chunk.start) {\\n\\t\\t\\t\\t\\t\\t\\t\\tchunk.prependRight(indentStr);\\n\\t\\t\\t\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\t\\t\\tthis._splitChunk(chunk, charIndex);\\n\\t\\t\\t\\t\\t\\t\\t\\tchunk = chunk.next;\\n\\t\\t\\t\\t\\t\\t\\t\\tchunk.prependRight(indentStr);\\n\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t\\tcharIndex += 1;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\n\\t\\t\\tcharIndex = chunk.end;\\n\\t\\t\\tchunk = chunk.next;\\n\\t\\t}\\n\\n\\t\\tthis.outro = this.outro.replace(pattern, replacer);\\n\\n\\t\\treturn this;\\n\\t}\\n\\n\\tinsert() {\\n\\t\\tthrow new Error(\\n\\t\\t\\t'magicString.insert(...) is deprecated. Use prependRight(...) or appendLeft(...)'\\n\\t\\t);\\n\\t}\\n\\n\\tinsertLeft(index, content) {\\n\\t\\tif (!warned.insertLeft) {\\n\\t\\t\\tconsole.warn(\\n\\t\\t\\t\\t'magicString.insertLeft(...) is deprecated. Use magicString.appendLeft(...) instead'\\n\\t\\t\\t); // eslint-disable-line no-console\\n\\t\\t\\twarned.insertLeft = true;\\n\\t\\t}\\n\\n\\t\\treturn this.appendLeft(index, content);\\n\\t}\\n\\n\\tinsertRight(index, content) {\\n\\t\\tif (!warned.insertRight) {\\n\\t\\t\\tconsole.warn(\\n\\t\\t\\t\\t'magicString.insertRight(...) is deprecated. Use magicString.prependRight(...) instead'\\n\\t\\t\\t); // eslint-disable-line no-console\\n\\t\\t\\twarned.insertRight = true;\\n\\t\\t}\\n\\n\\t\\treturn this.prependRight(index, content);\\n\\t}\\n\\n\\tmove(start, end, index) {\\n\\t\\tif (index >= start && index <= end) throw new Error('Cannot move a selection inside itself');\\n\\n\\t\\tif (DEBUG) this.stats.time('move');\\n\\n\\t\\tthis._split(start);\\n\\t\\tthis._split(end);\\n\\t\\tthis._split(index);\\n\\n\\t\\tconst first = this.byStart[start];\\n\\t\\tconst last = this.byEnd[end];\\n\\n\\t\\tconst oldLeft = first.previous;\\n\\t\\tconst oldRight = last.next;\\n\\n\\t\\tconst newRight = this.byStart[index];\\n\\t\\tif (!newRight && last === this.lastChunk) return this;\\n\\t\\tconst newLeft = newRight ? newRight.previous : this.lastChunk;\\n\\n\\t\\tif (oldLeft) oldLeft.next = oldRight;\\n\\t\\tif (oldRight) oldRight.previous = oldLeft;\\n\\n\\t\\tif (newLeft) newLeft.next = first;\\n\\t\\tif (newRight) newRight.previous = last;\\n\\n\\t\\tif (!first.previous) this.firstChunk = last.next;\\n\\t\\tif (!last.next) {\\n\\t\\t\\tthis.lastChunk = first.previous;\\n\\t\\t\\tthis.lastChunk.next = null;\\n\\t\\t}\\n\\n\\t\\tfirst.previous = newLeft;\\n\\t\\tlast.next = newRight || null;\\n\\n\\t\\tif (!newLeft) this.firstChunk = first;\\n\\t\\tif (!newRight) this.lastChunk = last;\\n\\n\\t\\tif (DEBUG) this.stats.timeEnd('move');\\n\\t\\treturn this;\\n\\t}\\n\\n\\toverwrite(start, end, content, options) {\\n\\t\\toptions = options || {};\\n\\t\\treturn this.update(start, end, content, { ...options, overwrite: !options.contentOnly });\\n\\t}\\n\\n\\tupdate(start, end, content, options) {\\n\\t\\tif (typeof content !== 'string') throw new TypeError('replacement content must be a string');\\n\\n\\t\\twhile (start < 0) start += this.original.length;\\n\\t\\twhile (end < 0) end += this.original.length;\\n\\n\\t\\tif (end > this.original.length) throw new Error('end is out of bounds');\\n\\t\\tif (start === end)\\n\\t\\t\\tthrow new Error(\\n\\t\\t\\t\\t'Cannot overwrite a zero-length range – use appendLeft or prependRight instead'\\n\\t\\t\\t);\\n\\n\\t\\tif (DEBUG) this.stats.time('overwrite');\\n\\n\\t\\tthis._split(start);\\n\\t\\tthis._split(end);\\n\\n\\t\\tif (options === true) {\\n\\t\\t\\tif (!warned.storeName) {\\n\\t\\t\\t\\tconsole.warn(\\n\\t\\t\\t\\t\\t'The final argument to magicString.overwrite(...) should be an options object. See https://github.com/rich-harris/magic-string'\\n\\t\\t\\t\\t); // eslint-disable-line no-console\\n\\t\\t\\t\\twarned.storeName = true;\\n\\t\\t\\t}\\n\\n\\t\\t\\toptions = { storeName: true };\\n\\t\\t}\\n\\t\\tconst storeName = options !== undefined ? options.storeName : false;\\n\\t\\tconst overwrite = options !== undefined ? options.overwrite : false;\\n\\n\\t\\tif (storeName) {\\n\\t\\t\\tconst original = this.original.slice(start, end);\\n\\t\\t\\tObject.defineProperty(this.storedNames, original, {\\n\\t\\t\\t\\twritable: true,\\n\\t\\t\\t\\tvalue: true,\\n\\t\\t\\t\\tenumerable: true,\\n\\t\\t\\t});\\n\\t\\t}\\n\\n\\t\\tconst first = this.byStart[start];\\n\\t\\tconst last = this.byEnd[end];\\n\\n\\t\\tif (first) {\\n\\t\\t\\tlet chunk = first;\\n\\t\\t\\twhile (chunk !== last) {\\n\\t\\t\\t\\tif (chunk.next !== this.byStart[chunk.end]) {\\n\\t\\t\\t\\t\\tthrow new Error('Cannot overwrite across a split point');\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tchunk = chunk.next;\\n\\t\\t\\t\\tchunk.edit('', false);\\n\\t\\t\\t}\\n\\n\\t\\t\\tfirst.edit(content, storeName, !overwrite);\\n\\t\\t} else {\\n\\t\\t\\t// must be inserting at the end\\n\\t\\t\\tconst newChunk = new Chunk(start, end, '').edit(content, storeName);\\n\\n\\t\\t\\t// TODO last chunk in the array may not be the last chunk, if it's moved...\\n\\t\\t\\tlast.next = newChunk;\\n\\t\\t\\tnewChunk.previous = last;\\n\\t\\t}\\n\\n\\t\\tif (DEBUG) this.stats.timeEnd('overwrite');\\n\\t\\treturn this;\\n\\t}\\n\\n\\tprepend(content) {\\n\\t\\tif (typeof content !== 'string') throw new TypeError('outro content must be a string');\\n\\n\\t\\tthis.intro = content + this.intro;\\n\\t\\treturn this;\\n\\t}\\n\\n\\tprependLeft(index, content) {\\n\\t\\tif (typeof content !== 'string') throw new TypeError('inserted content must be a string');\\n\\n\\t\\tif (DEBUG) this.stats.time('insertRight');\\n\\n\\t\\tthis._split(index);\\n\\n\\t\\tconst chunk = this.byEnd[index];\\n\\n\\t\\tif (chunk) {\\n\\t\\t\\tchunk.prependLeft(content);\\n\\t\\t} else {\\n\\t\\t\\tthis.intro = content + this.intro;\\n\\t\\t}\\n\\n\\t\\tif (DEBUG) this.stats.timeEnd('insertRight');\\n\\t\\treturn this;\\n\\t}\\n\\n\\tprependRight(index, content) {\\n\\t\\tif (typeof content !== 'string') throw new TypeError('inserted content must be a string');\\n\\n\\t\\tif (DEBUG) this.stats.time('insertRight');\\n\\n\\t\\tthis._split(index);\\n\\n\\t\\tconst chunk = this.byStart[index];\\n\\n\\t\\tif (chunk) {\\n\\t\\t\\tchunk.prependRight(content);\\n\\t\\t} else {\\n\\t\\t\\tthis.outro = content + this.outro;\\n\\t\\t}\\n\\n\\t\\tif (DEBUG) this.stats.timeEnd('insertRight');\\n\\t\\treturn this;\\n\\t}\\n\\n\\tremove(start, end) {\\n\\t\\twhile (start < 0) start += this.original.length;\\n\\t\\twhile (end < 0) end += this.original.length;\\n\\n\\t\\tif (start === end) return this;\\n\\n\\t\\tif (start < 0 || end > this.original.length) throw new Error('Character is out of bounds');\\n\\t\\tif (start > end) throw new Error('end must be greater than start');\\n\\n\\t\\tif (DEBUG) this.stats.time('remove');\\n\\n\\t\\tthis._split(start);\\n\\t\\tthis._split(end);\\n\\n\\t\\tlet chunk = this.byStart[start];\\n\\n\\t\\twhile (chunk) {\\n\\t\\t\\tchunk.intro = '';\\n\\t\\t\\tchunk.outro = '';\\n\\t\\t\\tchunk.edit('');\\n\\n\\t\\t\\tchunk = end > chunk.end ? this.byStart[chunk.end] : null;\\n\\t\\t}\\n\\n\\t\\tif (DEBUG) this.stats.timeEnd('remove');\\n\\t\\treturn this;\\n\\t}\\n\\n\\tlastChar() {\\n\\t\\tif (this.outro.length) return this.outro[this.outro.length - 1];\\n\\t\\tlet chunk = this.lastChunk;\\n\\t\\tdo {\\n\\t\\t\\tif (chunk.outro.length) return chunk.outro[chunk.outro.length - 1];\\n\\t\\t\\tif (chunk.content.length) return chunk.content[chunk.content.length - 1];\\n\\t\\t\\tif (chunk.intro.length) return chunk.intro[chunk.intro.length - 1];\\n\\t\\t} while ((chunk = chunk.previous));\\n\\t\\tif (this.intro.length) return this.intro[this.intro.length - 1];\\n\\t\\treturn '';\\n\\t}\\n\\n\\tlastLine() {\\n\\t\\tlet lineIndex = this.outro.lastIndexOf(n);\\n\\t\\tif (lineIndex !== -1) return this.outro.substr(lineIndex + 1);\\n\\t\\tlet lineStr = this.outro;\\n\\t\\tlet chunk = this.lastChunk;\\n\\t\\tdo {\\n\\t\\t\\tif (chunk.outro.length > 0) {\\n\\t\\t\\t\\tlineIndex = chunk.outro.lastIndexOf(n);\\n\\t\\t\\t\\tif (lineIndex !== -1) return chunk.outro.substr(lineIndex + 1) + lineStr;\\n\\t\\t\\t\\tlineStr = chunk.outro + lineStr;\\n\\t\\t\\t}\\n\\n\\t\\t\\tif (chunk.content.length > 0) {\\n\\t\\t\\t\\tlineIndex = chunk.content.lastIndexOf(n);\\n\\t\\t\\t\\tif (lineIndex !== -1) return chunk.content.substr(lineIndex + 1) + lineStr;\\n\\t\\t\\t\\tlineStr = chunk.content + lineStr;\\n\\t\\t\\t}\\n\\n\\t\\t\\tif (chunk.intro.length > 0) {\\n\\t\\t\\t\\tlineIndex = chunk.intro.lastIndexOf(n);\\n\\t\\t\\t\\tif (lineIndex !== -1) return chunk.intro.substr(lineIndex + 1) + lineStr;\\n\\t\\t\\t\\tlineStr = chunk.intro + lineStr;\\n\\t\\t\\t}\\n\\t\\t} while ((chunk = chunk.previous));\\n\\t\\tlineIndex = this.intro.lastIndexOf(n);\\n\\t\\tif (lineIndex !== -1) return this.intro.substr(lineIndex + 1) + lineStr;\\n\\t\\treturn this.intro + lineStr;\\n\\t}\\n\\n\\tslice(start = 0, end = this.original.length) {\\n\\t\\twhile (start < 0) start += this.original.length;\\n\\t\\twhile (end < 0) end += this.original.length;\\n\\n\\t\\tlet result = '';\\n\\n\\t\\t// find start chunk\\n\\t\\tlet chunk = this.firstChunk;\\n\\t\\twhile (chunk && (chunk.start > start || chunk.end <= start)) {\\n\\t\\t\\t// found end chunk before start\\n\\t\\t\\tif (chunk.start < end && chunk.end >= end) {\\n\\t\\t\\t\\treturn result;\\n\\t\\t\\t}\\n\\n\\t\\t\\tchunk = chunk.next;\\n\\t\\t}\\n\\n\\t\\tif (chunk && chunk.edited && chunk.start !== start)\\n\\t\\t\\tthrow new Error(`Cannot use replaced character ${start} as slice start anchor.`);\\n\\n\\t\\tconst startChunk = chunk;\\n\\t\\twhile (chunk) {\\n\\t\\t\\tif (chunk.intro && (startChunk !== chunk || chunk.start === start)) {\\n\\t\\t\\t\\tresult += chunk.intro;\\n\\t\\t\\t}\\n\\n\\t\\t\\tconst containsEnd = chunk.start < end && chunk.end >= end;\\n\\t\\t\\tif (containsEnd && chunk.edited && chunk.end !== end)\\n\\t\\t\\t\\tthrow new Error(`Cannot use replaced character ${end} as slice end anchor.`);\\n\\n\\t\\t\\tconst sliceStart = startChunk === chunk ? start - chunk.start : 0;\\n\\t\\t\\tconst sliceEnd = containsEnd ? chunk.content.length + end - chunk.end : chunk.content.length;\\n\\n\\t\\t\\tresult += chunk.content.slice(sliceStart, sliceEnd);\\n\\n\\t\\t\\tif (chunk.outro && (!containsEnd || chunk.end === end)) {\\n\\t\\t\\t\\tresult += chunk.outro;\\n\\t\\t\\t}\\n\\n\\t\\t\\tif (containsEnd) {\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\t}\\n\\n\\t\\t\\tchunk = chunk.next;\\n\\t\\t}\\n\\n\\t\\treturn result;\\n\\t}\\n\\n\\t// TODO deprecate this? not really very useful\\n\\tsnip(start, end) {\\n\\t\\tconst clone = this.clone();\\n\\t\\tclone.remove(0, start);\\n\\t\\tclone.remove(end, clone.original.length);\\n\\n\\t\\treturn clone;\\n\\t}\\n\\n\\t_split(index) {\\n\\t\\tif (this.byStart[index] || this.byEnd[index]) return;\\n\\n\\t\\tif (DEBUG) this.stats.time('_split');\\n\\n\\t\\tlet chunk = this.lastSearchedChunk;\\n\\t\\tconst searchForward = index > chunk.end;\\n\\n\\t\\twhile (chunk) {\\n\\t\\t\\tif (chunk.contains(index)) return this._splitChunk(chunk, index);\\n\\n\\t\\t\\tchunk = searchForward ? this.byStart[chunk.end] : this.byEnd[chunk.start];\\n\\t\\t}\\n\\t}\\n\\n\\t_splitChunk(chunk, index) {\\n\\t\\tif (chunk.edited && chunk.content.length) {\\n\\t\\t\\t// zero-length edited chunks are a special case (overlapping replacements)\\n\\t\\t\\tconst loc = getLocator(this.original)(index);\\n\\t\\t\\tthrow new Error(\\n\\t\\t\\t\\t`Cannot split a chunk that has already been edited (${loc.line}:${loc.column} – \\\"${chunk.original}\\\")`\\n\\t\\t\\t);\\n\\t\\t}\\n\\n\\t\\tconst newChunk = chunk.split(index);\\n\\n\\t\\tthis.byEnd[index] = chunk;\\n\\t\\tthis.byStart[index] = newChunk;\\n\\t\\tthis.byEnd[newChunk.end] = newChunk;\\n\\n\\t\\tif (chunk === this.lastChunk) this.lastChunk = newChunk;\\n\\n\\t\\tthis.lastSearchedChunk = chunk;\\n\\t\\tif (DEBUG) this.stats.timeEnd('_split');\\n\\t\\treturn true;\\n\\t}\\n\\n\\ttoString() {\\n\\t\\tlet str = this.intro;\\n\\n\\t\\tlet chunk = this.firstChunk;\\n\\t\\twhile (chunk) {\\n\\t\\t\\tstr += chunk.toString();\\n\\t\\t\\tchunk = chunk.next;\\n\\t\\t}\\n\\n\\t\\treturn str + this.outro;\\n\\t}\\n\\n\\tisEmpty() {\\n\\t\\tlet chunk = this.firstChunk;\\n\\t\\tdo {\\n\\t\\t\\tif (\\n\\t\\t\\t\\t(chunk.intro.length && chunk.intro.trim()) ||\\n\\t\\t\\t\\t(chunk.content.length && chunk.content.trim()) ||\\n\\t\\t\\t\\t(chunk.outro.length && chunk.outro.trim())\\n\\t\\t\\t)\\n\\t\\t\\t\\treturn false;\\n\\t\\t} while ((chunk = chunk.next));\\n\\t\\treturn true;\\n\\t}\\n\\n\\tlength() {\\n\\t\\tlet chunk = this.firstChunk;\\n\\t\\tlet length = 0;\\n\\t\\tdo {\\n\\t\\t\\tlength += chunk.intro.length + chunk.content.length + chunk.outro.length;\\n\\t\\t} while ((chunk = chunk.next));\\n\\t\\treturn length;\\n\\t}\\n\\n\\ttrimLines() {\\n\\t\\treturn this.trim('[\\\\\\\\r\\\\\\\\n]');\\n\\t}\\n\\n\\ttrim(charType) {\\n\\t\\treturn this.trimStart(charType).trimEnd(charType);\\n\\t}\\n\\n\\ttrimEndAborted(charType) {\\n\\t\\tconst rx = new RegExp((charType || '\\\\\\\\s') + '+$');\\n\\n\\t\\tthis.outro = this.outro.replace(rx, '');\\n\\t\\tif (this.outro.length) return true;\\n\\n\\t\\tlet chunk = this.lastChunk;\\n\\n\\t\\tdo {\\n\\t\\t\\tconst end = chunk.end;\\n\\t\\t\\tconst aborted = chunk.trimEnd(rx);\\n\\n\\t\\t\\t// if chunk was trimmed, we have a new lastChunk\\n\\t\\t\\tif (chunk.end !== end) {\\n\\t\\t\\t\\tif (this.lastChunk === chunk) {\\n\\t\\t\\t\\t\\tthis.lastChunk = chunk.next;\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\tthis.byEnd[chunk.end] = chunk;\\n\\t\\t\\t\\tthis.byStart[chunk.next.start] = chunk.next;\\n\\t\\t\\t\\tthis.byEnd[chunk.next.end] = chunk.next;\\n\\t\\t\\t}\\n\\n\\t\\t\\tif (aborted) return true;\\n\\t\\t\\tchunk = chunk.previous;\\n\\t\\t} while (chunk);\\n\\n\\t\\treturn false;\\n\\t}\\n\\n\\ttrimEnd(charType) {\\n\\t\\tthis.trimEndAborted(charType);\\n\\t\\treturn this;\\n\\t}\\n\\ttrimStartAborted(charType) {\\n\\t\\tconst rx = new RegExp('^' + (charType || '\\\\\\\\s') + '+');\\n\\n\\t\\tthis.intro = this.intro.replace(rx, '');\\n\\t\\tif (this.intro.length) return true;\\n\\n\\t\\tlet chunk = this.firstChunk;\\n\\n\\t\\tdo {\\n\\t\\t\\tconst end = chunk.end;\\n\\t\\t\\tconst aborted = chunk.trimStart(rx);\\n\\n\\t\\t\\tif (chunk.end !== end) {\\n\\t\\t\\t\\t// special case...\\n\\t\\t\\t\\tif (chunk === this.lastChunk) this.lastChunk = chunk.next;\\n\\n\\t\\t\\t\\tthis.byEnd[chunk.end] = chunk;\\n\\t\\t\\t\\tthis.byStart[chunk.next.start] = chunk.next;\\n\\t\\t\\t\\tthis.byEnd[chunk.next.end] = chunk.next;\\n\\t\\t\\t}\\n\\n\\t\\t\\tif (aborted) return true;\\n\\t\\t\\tchunk = chunk.next;\\n\\t\\t} while (chunk);\\n\\n\\t\\treturn false;\\n\\t}\\n\\n\\ttrimStart(charType) {\\n\\t\\tthis.trimStartAborted(charType);\\n\\t\\treturn this;\\n\\t}\\n\\n\\thasChanged() {\\n\\t\\treturn this.original !== this.toString();\\n\\t}\\n\\n\\t_replaceRegexp(searchValue, replacement) {\\n\\t\\tfunction getReplacement(match, str) {\\n\\t\\t\\tif (typeof replacement === 'string') {\\n\\t\\t\\t\\treturn replacement.replace(/\\\\$(\\\\$|&|\\\\d+)/g, (_, i) => {\\n\\t\\t\\t\\t\\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace#specifying_a_string_as_a_parameter\\n\\t\\t\\t\\t\\tif (i === '$') return '$';\\n\\t\\t\\t\\t\\tif (i === '&') return match[0];\\n\\t\\t\\t\\t\\tconst num = +i;\\n\\t\\t\\t\\t\\tif (num < match.length) return match[+i];\\n\\t\\t\\t\\t\\treturn `$${i}`;\\n\\t\\t\\t\\t});\\n\\t\\t\\t} else {\\n\\t\\t\\t\\treturn replacement(...match, match.index, str, match.groups);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tfunction matchAll(re, str) {\\n\\t\\t\\tlet match;\\n\\t\\t\\tconst matches = [];\\n\\t\\t\\twhile ((match = re.exec(str))) {\\n\\t\\t\\t\\tmatches.push(match);\\n\\t\\t\\t}\\n\\t\\t\\treturn matches;\\n\\t\\t}\\n\\t\\tif (searchValue.global) {\\n\\t\\t\\tconst matches = matchAll(searchValue, this.original);\\n\\t\\t\\tmatches.forEach((match) => {\\n\\t\\t\\t\\tif (match.index != null)\\n\\t\\t\\t\\t\\tthis.overwrite(\\n\\t\\t\\t\\t\\t\\tmatch.index,\\n\\t\\t\\t\\t\\t\\tmatch.index + match[0].length,\\n\\t\\t\\t\\t\\t\\tgetReplacement(match, this.original)\\n\\t\\t\\t\\t\\t);\\n\\t\\t\\t});\\n\\t\\t} else {\\n\\t\\t\\tconst match = this.original.match(searchValue);\\n\\t\\t\\tif (match && match.index != null)\\n\\t\\t\\t\\tthis.overwrite(\\n\\t\\t\\t\\t\\tmatch.index,\\n\\t\\t\\t\\t\\tmatch.index + match[0].length,\\n\\t\\t\\t\\t\\tgetReplacement(match, this.original)\\n\\t\\t\\t\\t);\\n\\t\\t}\\n\\t\\treturn this;\\n\\t}\\n\\n\\t_replaceString(string, replacement) {\\n\\t\\tconst { original } = this;\\n\\t\\tconst index = original.indexOf(string);\\n\\n\\t\\tif (index !== -1) {\\n\\t\\t\\tthis.overwrite(index, index + string.length, replacement);\\n\\t\\t}\\n\\n\\t\\treturn this;\\n\\t}\\n\\n\\treplace(searchValue, replacement) {\\n\\t\\tif (typeof searchValue === 'string') {\\n\\t\\t\\treturn this._replaceString(searchValue, replacement);\\n\\t\\t}\\n\\n\\t\\treturn this._replaceRegexp(searchValue, replacement);\\n\\t}\\n\\n\\t_replaceAllString(string, replacement) {\\n\\t\\tconst { original } = this;\\n\\t\\tconst stringLength = string.length;\\n\\t\\tfor (\\n\\t\\t\\tlet index = original.indexOf(string);\\n\\t\\t\\tindex !== -1;\\n\\t\\t\\tindex = original.indexOf(string, index + stringLength)\\n\\t\\t) {\\n\\t\\t\\tthis.overwrite(index, index + stringLength, replacement);\\n\\t\\t}\\n\\n\\t\\treturn this;\\n\\t}\\n\\n\\treplaceAll(searchValue, replacement) {\\n\\t\\tif (typeof searchValue === 'string') {\\n\\t\\t\\treturn this._replaceAllString(searchValue, replacement);\\n\\t\\t}\\n\\n\\t\\tif (!searchValue.global) {\\n\\t\\t\\tthrow new TypeError(\\n\\t\\t\\t\\t'MagicString.prototype.replaceAll called with a non-global RegExp argument'\\n\\t\\t\\t);\\n\\t\\t}\\n\\n\\t\\treturn this._replaceRegexp(searchValue, replacement);\\n\\t}\\n}\\n\",\"import MagicString from './MagicString.js';\\nimport SourceMap from './SourceMap.js';\\nimport getRelativePath from './utils/getRelativePath.js';\\nimport isObject from './utils/isObject.js';\\nimport getLocator from './utils/getLocator.js';\\nimport Mappings from './utils/Mappings.js';\\n\\nconst hasOwnProp = Object.prototype.hasOwnProperty;\\n\\nexport default class Bundle {\\n\\tconstructor(options = {}) {\\n\\t\\tthis.intro = options.intro || '';\\n\\t\\tthis.separator = options.separator !== undefined ? options.separator : '\\\\n';\\n\\t\\tthis.sources = [];\\n\\t\\tthis.uniqueSources = [];\\n\\t\\tthis.uniqueSourceIndexByFilename = {};\\n\\t}\\n\\n\\taddSource(source) {\\n\\t\\tif (source instanceof MagicString) {\\n\\t\\t\\treturn this.addSource({\\n\\t\\t\\t\\tcontent: source,\\n\\t\\t\\t\\tfilename: source.filename,\\n\\t\\t\\t\\tseparator: this.separator,\\n\\t\\t\\t});\\n\\t\\t}\\n\\n\\t\\tif (!isObject(source) || !source.content) {\\n\\t\\t\\tthrow new Error(\\n\\t\\t\\t\\t'bundle.addSource() takes an object with a `content` property, which should be an instance of MagicString, and an optional `filename`'\\n\\t\\t\\t);\\n\\t\\t}\\n\\n\\t\\t['filename', 'indentExclusionRanges', 'separator'].forEach((option) => {\\n\\t\\t\\tif (!hasOwnProp.call(source, option)) source[option] = source.content[option];\\n\\t\\t});\\n\\n\\t\\tif (source.separator === undefined) {\\n\\t\\t\\t// TODO there's a bunch of this sort of thing, needs cleaning up\\n\\t\\t\\tsource.separator = this.separator;\\n\\t\\t}\\n\\n\\t\\tif (source.filename) {\\n\\t\\t\\tif (!hasOwnProp.call(this.uniqueSourceIndexByFilename, source.filename)) {\\n\\t\\t\\t\\tthis.uniqueSourceIndexByFilename[source.filename] = this.uniqueSources.length;\\n\\t\\t\\t\\tthis.uniqueSources.push({ filename: source.filename, content: source.content.original });\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tconst uniqueSource = this.uniqueSources[this.uniqueSourceIndexByFilename[source.filename]];\\n\\t\\t\\t\\tif (source.content.original !== uniqueSource.content) {\\n\\t\\t\\t\\t\\tthrow new Error(`Illegal source: same filename (${source.filename}), different contents`);\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\tthis.sources.push(source);\\n\\t\\treturn this;\\n\\t}\\n\\n\\tappend(str, options) {\\n\\t\\tthis.addSource({\\n\\t\\t\\tcontent: new MagicString(str),\\n\\t\\t\\tseparator: (options && options.separator) || '',\\n\\t\\t});\\n\\n\\t\\treturn this;\\n\\t}\\n\\n\\tclone() {\\n\\t\\tconst bundle = new Bundle({\\n\\t\\t\\tintro: this.intro,\\n\\t\\t\\tseparator: this.separator,\\n\\t\\t});\\n\\n\\t\\tthis.sources.forEach((source) => {\\n\\t\\t\\tbundle.addSource({\\n\\t\\t\\t\\tfilename: source.filename,\\n\\t\\t\\t\\tcontent: source.content.clone(),\\n\\t\\t\\t\\tseparator: source.separator,\\n\\t\\t\\t});\\n\\t\\t});\\n\\n\\t\\treturn bundle;\\n\\t}\\n\\n\\tgenerateDecodedMap(options = {}) {\\n\\t\\tconst names = [];\\n\\t\\tthis.sources.forEach((source) => {\\n\\t\\t\\tObject.keys(source.content.storedNames).forEach((name) => {\\n\\t\\t\\t\\tif (!~names.indexOf(name)) names.push(name);\\n\\t\\t\\t});\\n\\t\\t});\\n\\n\\t\\tconst mappings = new Mappings(options.hires);\\n\\n\\t\\tif (this.intro) {\\n\\t\\t\\tmappings.advance(this.intro);\\n\\t\\t}\\n\\n\\t\\tthis.sources.forEach((source, i) => {\\n\\t\\t\\tif (i > 0) {\\n\\t\\t\\t\\tmappings.advance(this.separator);\\n\\t\\t\\t}\\n\\n\\t\\t\\tconst sourceIndex = source.filename ? this.uniqueSourceIndexByFilename[source.filename] : -1;\\n\\t\\t\\tconst magicString = source.content;\\n\\t\\t\\tconst locate = getLocator(magicString.original);\\n\\n\\t\\t\\tif (magicString.intro) {\\n\\t\\t\\t\\tmappings.advance(magicString.intro);\\n\\t\\t\\t}\\n\\n\\t\\t\\tmagicString.firstChunk.eachNext((chunk) => {\\n\\t\\t\\t\\tconst loc = locate(chunk.start);\\n\\n\\t\\t\\t\\tif (chunk.intro.length) mappings.advance(chunk.intro);\\n\\n\\t\\t\\t\\tif (source.filename) {\\n\\t\\t\\t\\t\\tif (chunk.edited) {\\n\\t\\t\\t\\t\\t\\tmappings.addEdit(\\n\\t\\t\\t\\t\\t\\t\\tsourceIndex,\\n\\t\\t\\t\\t\\t\\t\\tchunk.content,\\n\\t\\t\\t\\t\\t\\t\\tloc,\\n\\t\\t\\t\\t\\t\\t\\tchunk.storeName ? names.indexOf(chunk.original) : -1\\n\\t\\t\\t\\t\\t\\t);\\n\\t\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\tmappings.addUneditedChunk(\\n\\t\\t\\t\\t\\t\\t\\tsourceIndex,\\n\\t\\t\\t\\t\\t\\t\\tchunk,\\n\\t\\t\\t\\t\\t\\t\\tmagicString.original,\\n\\t\\t\\t\\t\\t\\t\\tloc,\\n\\t\\t\\t\\t\\t\\t\\tmagicString.sourcemapLocations\\n\\t\\t\\t\\t\\t\\t);\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\tmappings.advance(chunk.content);\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\tif (chunk.outro.length) mappings.advance(chunk.outro);\\n\\t\\t\\t});\\n\\n\\t\\t\\tif (magicString.outro) {\\n\\t\\t\\t\\tmappings.advance(magicString.outro);\\n\\t\\t\\t}\\n\\t\\t});\\n\\n\\t\\treturn {\\n\\t\\t\\tfile: options.file ? options.file.split(/[/\\\\\\\\]/).pop() : null,\\n\\t\\t\\tsources: this.uniqueSources.map((source) => {\\n\\t\\t\\t\\treturn options.file ? getRelativePath(options.file, source.filename) : source.filename;\\n\\t\\t\\t}),\\n\\t\\t\\tsourcesContent: this.uniqueSources.map((source) => {\\n\\t\\t\\t\\treturn options.includeContent ? source.content : null;\\n\\t\\t\\t}),\\n\\t\\t\\tnames,\\n\\t\\t\\tmappings: mappings.raw,\\n\\t\\t};\\n\\t}\\n\\n\\tgenerateMap(options) {\\n\\t\\treturn new SourceMap(this.generateDecodedMap(options));\\n\\t}\\n\\n\\tgetIndentString() {\\n\\t\\tconst indentStringCounts = {};\\n\\n\\t\\tthis.sources.forEach((source) => {\\n\\t\\t\\tconst indentStr = source.content._getRawIndentString();\\n\\n\\t\\t\\tif (indentStr === null) return;\\n\\n\\t\\t\\tif (!indentStringCounts[indentStr]) indentStringCounts[indentStr] = 0;\\n\\t\\t\\tindentStringCounts[indentStr] += 1;\\n\\t\\t});\\n\\n\\t\\treturn (\\n\\t\\t\\tObject.keys(indentStringCounts).sort((a, b) => {\\n\\t\\t\\t\\treturn indentStringCounts[a] - indentStringCounts[b];\\n\\t\\t\\t})[0] || '\\\\t'\\n\\t\\t);\\n\\t}\\n\\n\\tindent(indentStr) {\\n\\t\\tif (!arguments.length) {\\n\\t\\t\\tindentStr = this.getIndentString();\\n\\t\\t}\\n\\n\\t\\tif (indentStr === '') return this; // noop\\n\\n\\t\\tlet trailingNewline = !this.intro || this.intro.slice(-1) === '\\\\n';\\n\\n\\t\\tthis.sources.forEach((source, i) => {\\n\\t\\t\\tconst separator = source.separator !== undefined ? source.separator : this.separator;\\n\\t\\t\\tconst indentStart = trailingNewline || (i > 0 && /\\\\r?\\\\n$/.test(separator));\\n\\n\\t\\t\\tsource.content.indent(indentStr, {\\n\\t\\t\\t\\texclude: source.indentExclusionRanges,\\n\\t\\t\\t\\tindentStart, //: trailingNewline || /\\\\r?\\\\n$/.test( separator )  //true///\\\\r?\\\\n/.test( separator )\\n\\t\\t\\t});\\n\\n\\t\\t\\ttrailingNewline = source.content.lastChar() === '\\\\n';\\n\\t\\t});\\n\\n\\t\\tif (this.intro) {\\n\\t\\t\\tthis.intro =\\n\\t\\t\\t\\tindentStr +\\n\\t\\t\\t\\tthis.intro.replace(/^[^\\\\n]/gm, (match, index) => {\\n\\t\\t\\t\\t\\treturn index > 0 ? indentStr + match : match;\\n\\t\\t\\t\\t});\\n\\t\\t}\\n\\n\\t\\treturn this;\\n\\t}\\n\\n\\tprepend(str) {\\n\\t\\tthis.intro = str + this.intro;\\n\\t\\treturn this;\\n\\t}\\n\\n\\ttoString() {\\n\\t\\tconst body = this.sources\\n\\t\\t\\t.map((source, i) => {\\n\\t\\t\\t\\tconst separator = source.separator !== undefined ? source.separator : this.separator;\\n\\t\\t\\t\\tconst str = (i > 0 ? separator : '') + source.content.toString();\\n\\n\\t\\t\\t\\treturn str;\\n\\t\\t\\t})\\n\\t\\t\\t.join('');\\n\\n\\t\\treturn this.intro + body;\\n\\t}\\n\\n\\tisEmpty() {\\n\\t\\tif (this.intro.length && this.intro.trim()) return false;\\n\\t\\tif (this.sources.some((source) => !source.content.isEmpty())) return false;\\n\\t\\treturn true;\\n\\t}\\n\\n\\tlength() {\\n\\t\\treturn this.sources.reduce(\\n\\t\\t\\t(length, source) => length + source.content.length(),\\n\\t\\t\\tthis.intro.length\\n\\t\\t);\\n\\t}\\n\\n\\ttrimLines() {\\n\\t\\treturn this.trim('[\\\\\\\\r\\\\\\\\n]');\\n\\t}\\n\\n\\ttrim(charType) {\\n\\t\\treturn this.trimStart(charType).trimEnd(charType);\\n\\t}\\n\\n\\ttrimStart(charType) {\\n\\t\\tconst rx = new RegExp('^' + (charType || '\\\\\\\\s') + '+');\\n\\t\\tthis.intro = this.intro.replace(rx, '');\\n\\n\\t\\tif (!this.intro) {\\n\\t\\t\\tlet source;\\n\\t\\t\\tlet i = 0;\\n\\n\\t\\t\\tdo {\\n\\t\\t\\t\\tsource = this.sources[i++];\\n\\t\\t\\t\\tif (!source) {\\n\\t\\t\\t\\t\\tbreak;\\n\\t\\t\\t\\t}\\n\\t\\t\\t} while (!source.content.trimStartAborted(charType));\\n\\t\\t}\\n\\n\\t\\treturn this;\\n\\t}\\n\\n\\ttrimEnd(charType) {\\n\\t\\tconst rx = new RegExp((charType || '\\\\\\\\s') + '+$');\\n\\n\\t\\tlet source;\\n\\t\\tlet i = this.sources.length - 1;\\n\\n\\t\\tdo {\\n\\t\\t\\tsource = this.sources[i--];\\n\\t\\t\\tif (!source) {\\n\\t\\t\\t\\tthis.intro = this.intro.replace(rx, '');\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\t}\\n\\t\\t} while (!source.content.trimEndAborted(charType));\\n\\n\\t\\treturn this;\\n\\t}\\n}\\n\"],\"names\":[],\"mappings\":\";;AAAe,MAAM,MAAM,CAAC;AAC5B,CAAC,WAAW,CAAC,GAAG,EAAE;AAClB,EAAE,IAAI,CAAC,IAAI,GAAG,GAAG,YAAY,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC;AAC5D,EAAE;AACF;AACA,CAAC,GAAG,CAAC,CAAC,EAAE;AACR,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;AACrC,EAAE;AACF;AACA,CAAC,GAAG,CAAC,CAAC,EAAE;AACR,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;AACjD,EAAE;AACF;;ACZe,MAAM,KAAK,CAAC;AAC3B,CAAC,WAAW,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE;AAClC,EAAE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACrB,EAAE,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;AACjB,EAAE,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;AAC1B;AACA,EAAE,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;AAClB,EAAE,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;AAClB;AACA,EAAE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;AACzB,EAAE,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AACzB,EAAE,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;AACtB;AACA,EAMS;AACT,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AACxB,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACpB,GAAG;AACH,EAAE;AACF;AACA,CAAC,UAAU,CAAC,OAAO,EAAE;AACrB,EAAE,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC;AACxB,EAAE;AACF;AACA,CAAC,WAAW,CAAC,OAAO,EAAE;AACtB,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC;AACpC,EAAE;AACF;AACA,CAAC,KAAK,GAAG;AACT,EAAE,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC/D;AACA,EAAE,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AAC3B,EAAE,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AAC3B,EAAE,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;AAC/B,EAAE,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;AACnC,EAAE,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;AAC7B;AACA,EAAE,OAAO,KAAK,CAAC;AACf,EAAE;AACF;AACA,CAAC,QAAQ,CAAC,KAAK,EAAE;AACjB,EAAE,OAAO,IAAI,CAAC,KAAK,GAAG,KAAK,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC;AAChD,EAAE;AACF;AACA,CAAC,QAAQ,CAAC,EAAE,EAAE;AACd,EAAE,IAAI,KAAK,GAAG,IAAI,CAAC;AACnB,EAAE,OAAO,KAAK,EAAE;AAChB,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;AACb,GAAG,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC;AACtB,GAAG;AACH,EAAE;AACF;AACA,CAAC,YAAY,CAAC,EAAE,EAAE;AAClB,EAAE,IAAI,KAAK,GAAG,IAAI,CAAC;AACnB,EAAE,OAAO,KAAK,EAAE;AAChB,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;AACb,GAAG,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC;AAC1B,GAAG;AACH,EAAE;AACF;AACA,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE;AACvC,EAAE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;AACzB,EAAE,IAAI,CAAC,WAAW,EAAE;AACpB,GAAG,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;AACnB,GAAG,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;AACnB,GAAG;AACH,EAAE,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;AAC7B;AACA,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;AACrB;AACA,EAAE,OAAO,IAAI,CAAC;AACd,EAAE;AACF;AACA,CAAC,WAAW,CAAC,OAAO,EAAE;AACtB,EAAE,IAAI,CAAC,KAAK,GAAG,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC;AACpC,EAAE;AACF;AACA,CAAC,YAAY,CAAC,OAAO,EAAE;AACvB,EAAE,IAAI,CAAC,KAAK,GAAG,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC;AACpC,EAAE;AACF;AACA,CAAC,KAAK,CAAC,KAAK,EAAE;AACd,EAAE,MAAM,UAAU,GAAG,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AACxC;AACA,EAAE,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;AAC5D,EAAE,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;AACxD;AACA,EAAE,IAAI,CAAC,QAAQ,GAAG,cAAc,CAAC;AACjC;AACA,EAAE,MAAM,QAAQ,GAAG,IAAI,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;AAC7D,EAAE,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AAC9B,EAAE,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;AAClB;AACA,EAAE,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC;AACnB;AACA,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE;AACnB;AACA,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;AAC5B,GAAG,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;AACrB,GAAG,MAAM;AACT,GAAG,IAAI,CAAC,OAAO,GAAG,cAAc,CAAC;AACjC,GAAG;AACH;AACA,EAAE,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;AAC5B,EAAE,IAAI,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;AACvD,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC;AAC3B,EAAE,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC;AACvB;AACA,EAAE,OAAO,QAAQ,CAAC;AAClB,EAAE;AACF;AACA,CAAC,QAAQ,GAAG;AACZ,EAAE,OAAO,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC;AAChD,EAAE;AACF;AACA,CAAC,OAAO,CAAC,EAAE,EAAE;AACb,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAC1C,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,IAAI,CAAC;AACrC;AACA,EAAE,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAC/C;AACA,EAAE,IAAI,OAAO,CAAC,MAAM,EAAE;AACtB,GAAG,IAAI,OAAO,KAAK,IAAI,CAAC,OAAO,EAAE;AACjC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;AACtE,IAAI;AACJ,GAAG,OAAO,IAAI,CAAC;AACf,GAAG,MAAM;AACT,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;AAClC;AACA,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAC3C,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,IAAI,CAAC;AACtC,GAAG;AACH,EAAE;AACF;AACA,CAAC,SAAS,CAAC,EAAE,EAAE;AACf,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAC1C,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,IAAI,CAAC;AACrC;AACA,EAAE,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAC/C;AACA,EAAE,IAAI,OAAO,CAAC,MAAM,EAAE;AACtB,GAAG,IAAI,OAAO,KAAK,IAAI,CAAC,OAAO,EAAE;AACjC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;AAC1C,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;AACnC,IAAI;AACJ,GAAG,OAAO,IAAI,CAAC;AACf,GAAG,MAAM;AACT,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;AAClC;AACA,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAC3C,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,IAAI,CAAC;AACtC,GAAG;AACH,EAAE;AACF;;AC5JA,SAAS,OAAO,IAAI;AACpB,CAAC,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE;AACzE,EAAE,OAAO,CAAC,GAAG,KAAK,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACjE,EAAE,MAAM,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE;AAC1C,EAAE,OAAO,CAAC,GAAG,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAC/D,EAAE,MAAM;AACR,EAAE,OAAO,MAAM;AACf,GAAG,MAAM,IAAI,KAAK,CAAC,yEAAyE,CAAC,CAAC;AAC9F,GAAG,CAAC;AACJ,EAAE;AACF,CAAC;AACD;AACA,MAAM,IAAI,iBAAiB,OAAO,EAAE,CAAC;AACrC;AACe,MAAM,SAAS,CAAC;AAC/B,CAAC,WAAW,CAAC,UAAU,EAAE;AACzB,EAAE,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;AACnB,EAAE,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC;AAC9B,EAAE,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC;AACpC,EAAE,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,cAAc,CAAC;AAClD,EAAE,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC;AAChC,EAAE,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AAC9C,EAAE;AACF;AACA,CAAC,QAAQ,GAAG;AACZ,EAAE,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAC9B,EAAE;AACF;AACA,CAAC,KAAK,GAAG;AACT,EAAE,OAAO,6CAA6C,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC/E,EAAE;AACF;;ACjCe,SAAS,WAAW,CAAC,IAAI,EAAE;AAC1C,CAAC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAChC;AACA,CAAC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC1D,CAAC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5D;AACA,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;AACjD,EAAE,OAAO,IAAI,CAAC;AACd,EAAE;AACF;AACA;AACA;AACA;AACA,CAAC,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE;AACrC,EAAE,OAAO,IAAI,CAAC;AACd,EAAE;AACF;AACA;AACA,CAAC,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,OAAO,KAAK;AAClD,EAAE,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AAClD,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AACvC,EAAE,EAAE,QAAQ,CAAC,CAAC;AACd;AACA,CAAC,OAAO,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACrC;;ACxBe,SAAS,eAAe,CAAC,IAAI,EAAE,EAAE,EAAE;AAClD,CAAC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AACvC,CAAC,MAAM,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AACnC;AACA,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC;AACjB;AACA,CAAC,OAAO,SAAS,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE;AACrC,EAAE,SAAS,CAAC,KAAK,EAAE,CAAC;AACpB,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC;AAClB,EAAE;AACF;AACA,CAAC,IAAI,SAAS,CAAC,MAAM,EAAE;AACvB,EAAE,IAAI,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC;AAC3B,EAAE,OAAO,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;AAClC,EAAE;AACF;AACA,CAAC,OAAO,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC5C;;ACjBA,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC;AAC3C;AACe,SAAS,QAAQ,CAAC,KAAK,EAAE;AACxC,CAAC,OAAO,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,iBAAiB,CAAC;AACnD;;ACJe,SAAS,UAAU,CAAC,MAAM,EAAE;AAC3C,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC1C,CAAC,MAAM,WAAW,GAAG,EAAE,CAAC;AACxB;AACA,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACzD,EAAE,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACxB,EAAE,GAAG,IAAI,aAAa,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;AACrC,EAAE;AACF;AACA,CAAC,OAAO,SAAS,MAAM,CAAC,KAAK,EAAE;AAC/B,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;AACZ,EAAE,IAAI,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC;AAC7B,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE;AAChB,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC1B,GAAG,IAAI,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE;AAC/B,IAAI,CAAC,GAAG,CAAC,CAAC;AACV,IAAI,MAAM;AACV,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACd,IAAI;AACJ,GAAG;AACH,EAAE,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;AACrB,EAAE,MAAM,MAAM,GAAG,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;AAC3C,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AAC1B,EAAE,CAAC;AACH;;ACxBe,MAAM,QAAQ,CAAC;AAC9B,CAAC,WAAW,CAAC,KAAK,EAAE;AACpB,EAAE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACrB,EAAE,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC;AAC7B,EAAE,IAAI,CAAC,mBAAmB,GAAG,CAAC,CAAC;AAC/B,EAAE,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;AAChB,EAAE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,CAAC;AAC3D,EAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;AACtB,EAAE;AACF;AACA,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE;AAC/C,EAAE,IAAI,OAAO,CAAC,MAAM,EAAE;AACtB,GAAG,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,mBAAmB,EAAE,WAAW,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;AACjF,GAAG,IAAI,SAAS,IAAI,CAAC,EAAE;AACvB,IAAI,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAC5B,IAAI;AACJ,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAClC,GAAG,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE;AAC3B,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACvC,GAAG;AACH;AACA,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AACxB,EAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;AACtB,EAAE;AACF;AACA,CAAC,gBAAgB,CAAC,WAAW,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,kBAAkB,EAAE;AACzE,EAAE,IAAI,iBAAiB,GAAG,KAAK,CAAC,KAAK,CAAC;AACtC,EAAE,IAAI,KAAK,GAAG,IAAI,CAAC;AACnB;AACA,EAAE,OAAO,iBAAiB,GAAG,KAAK,CAAC,GAAG,EAAE;AACxC,GAAG,IAAI,IAAI,CAAC,KAAK,IAAI,KAAK,IAAI,kBAAkB,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE;AACzE,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,mBAAmB,EAAE,WAAW,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;AACzF,IAAI;AACJ;AACA,GAAG,IAAI,QAAQ,CAAC,iBAAiB,CAAC,KAAK,IAAI,EAAE;AAC7C,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC;AAClB,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;AACnB,IAAI,IAAI,CAAC,iBAAiB,IAAI,CAAC,CAAC;AAChC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;AAC7D,IAAI,IAAI,CAAC,mBAAmB,GAAG,CAAC,CAAC;AACjC,IAAI,KAAK,GAAG,IAAI,CAAC;AACjB,IAAI,MAAM;AACV,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC;AACpB,IAAI,IAAI,CAAC,mBAAmB,IAAI,CAAC,CAAC;AAClC,IAAI,KAAK,GAAG,KAAK,CAAC;AAClB,IAAI;AACJ;AACA,GAAG,iBAAiB,IAAI,CAAC,CAAC;AAC1B,GAAG;AACH;AACA,EAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;AACtB,EAAE;AACF;AACA,CAAC,OAAO,CAAC,GAAG,EAAE;AACd,EAAE,IAAI,CAAC,GAAG,EAAE,OAAO;AACnB;AACA,EAAE,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAChC;AACA,EAAE,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AACxB,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAC9C,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;AAC7B,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;AAC7D,IAAI;AACJ,GAAG,IAAI,CAAC,mBAAmB,GAAG,CAAC,CAAC;AAChC,GAAG;AACH;AACA,EAAE,IAAI,CAAC,mBAAmB,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;AAC7D,EAAE;AACF;;AC1DA,MAAM,CAAC,GAAG,IAAI,CAAC;AACf;AACA,MAAM,MAAM,GAAG;AACf,CAAC,UAAU,EAAE,KAAK;AAClB,CAAC,WAAW,EAAE,KAAK;AACnB,CAAC,SAAS,EAAE,KAAK;AACjB,CAAC,CAAC;AACF;AACe,MAAM,WAAW,CAAC;AACjC,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,GAAG,EAAE,EAAE;AACnC,EAAE,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACpD;AACA,EAAE,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE;AAChC,GAAG,QAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE;AAC9C,GAAG,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;AACvC,GAAG,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;AACvC,GAAG,UAAU,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE;AAC/C,GAAG,SAAS,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE;AAC9C,GAAG,iBAAiB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE;AACtD,GAAG,OAAO,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;AACzC,GAAG,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;AACvC,GAAG,QAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,QAAQ,EAAE;AACxD,GAAG,qBAAqB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,qBAAqB,EAAE;AAClF,GAAG,kBAAkB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,MAAM,EAAE,EAAE;AAC9D,GAAG,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;AAC7C,GAAG,SAAS,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE;AAClD,GAAG,CAAC,CAAC;AAKL;AACA,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;AAC1B,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC;AACpC,EAAE;AACF;AACA,CAAC,oBAAoB,CAAC,IAAI,EAAE;AAC5B,EAAE,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACpC,EAAE;AACF;AACA,CAAC,MAAM,CAAC,OAAO,EAAE;AACjB,EAAE,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,MAAM,IAAI,SAAS,CAAC,gCAAgC,CAAC,CAAC;AACzF;AACA,EAAE,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC;AACxB,EAAE,OAAO,IAAI,CAAC;AACd,EAAE;AACF;AACA,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE;AAC5B,EAAE,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,MAAM,IAAI,SAAS,CAAC,mCAAmC,CAAC,CAAC;AAG5F;AACA,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACrB;AACA,EAAE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAClC;AACA,EAAE,IAAI,KAAK,EAAE;AACb,GAAG,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AAC7B,GAAG,MAAM;AACT,GAAG,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC;AACzB,GAAG;AAGH,EAAE,OAAO,IAAI,CAAC;AACd,EAAE;AACF;AACA,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE;AAC7B,EAAE,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,MAAM,IAAI,SAAS,CAAC,mCAAmC,CAAC,CAAC;AAG5F;AACA,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACrB;AACA,EAAE,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACpC;AACA,EAAE,IAAI,KAAK,EAAE;AACb,GAAG,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AAC9B,GAAG,MAAM;AACT,GAAG,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC;AACzB,GAAG;AAGH,EAAE,OAAO,IAAI,CAAC;AACd,EAAE;AACF;AACA,CAAC,KAAK,GAAG;AACT,EAAE,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC7E;AACA,EAAE,IAAI,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC;AACtC,EAAE,IAAI,WAAW,IAAI,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,iBAAiB,GAAG,aAAa,CAAC,KAAK,EAAE,CAAC,CAAC;AAC3F;AACA,EAAE,OAAO,aAAa,EAAE;AACxB,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC;AACnD,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC;AAC/C;AACA,GAAG,MAAM,iBAAiB,GAAG,aAAa,CAAC,IAAI,CAAC;AAChD,GAAG,MAAM,eAAe,GAAG,iBAAiB,IAAI,iBAAiB,CAAC,KAAK,EAAE,CAAC;AAC1E;AACA,GAAG,IAAI,eAAe,EAAE;AACxB,IAAI,WAAW,CAAC,IAAI,GAAG,eAAe,CAAC;AACvC,IAAI,eAAe,CAAC,QAAQ,GAAG,WAAW,CAAC;AAC3C;AACA,IAAI,WAAW,GAAG,eAAe,CAAC;AAClC,IAAI;AACJ;AACA,GAAG,aAAa,GAAG,iBAAiB,CAAC;AACrC,GAAG;AACH;AACA,EAAE,MAAM,CAAC,SAAS,GAAG,WAAW,CAAC;AACjC;AACA,EAAE,IAAI,IAAI,CAAC,qBAAqB,EAAE;AAClC,GAAG,MAAM,CAAC,qBAAqB,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,CAAC;AACrE,GAAG;AACH;AACA,EAAE,MAAM,CAAC,kBAAkB,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;AAClE;AACA,EAAE,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AAC5B,EAAE,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AAC5B;AACA,EAAE,OAAO,MAAM,CAAC;AAChB,EAAE;AACF;AACA,CAAC,kBAAkB,CAAC,OAAO,EAAE;AAC7B,EAAE,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;AAC1B;AACA,EAAE,MAAM,WAAW,GAAG,CAAC,CAAC;AACxB,EAAE,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAC9C,EAAE,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC/C;AACA,EAAE,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC3C;AACA,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE;AAClB,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAChC,GAAG;AACH;AACA,EAAE,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,KAAK,KAAK;AACtC,GAAG,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACnC;AACA,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACzD;AACA,GAAG,IAAI,KAAK,CAAC,MAAM,EAAE;AACrB,IAAI,QAAQ,CAAC,OAAO;AACpB,KAAK,WAAW;AAChB,KAAK,KAAK,CAAC,OAAO;AAClB,KAAK,GAAG;AACR,KAAK,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AACzD,KAAK,CAAC;AACN,IAAI,MAAM;AACV,IAAI,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;AAC/F,IAAI;AACJ;AACA,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACzD,GAAG,CAAC,CAAC;AACL;AACA,EAAE,OAAO;AACT,GAAG,IAAI,EAAE,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,IAAI;AAChE,GAAG,OAAO,EAAE,CAAC,OAAO,CAAC,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;AACzF,GAAG,cAAc,EAAE,OAAO,CAAC,cAAc,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;AACpE,GAAG,KAAK;AACR,GAAG,QAAQ,EAAE,QAAQ,CAAC,GAAG;AACzB,GAAG,CAAC;AACJ,EAAE;AACF;AACA,CAAC,WAAW,CAAC,OAAO,EAAE;AACtB,EAAE,OAAO,IAAI,SAAS,CAAC,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC;AACzD,EAAE;AACF;AACA,CAAC,gBAAgB,GAAG;AACpB,EAAE,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE;AACpC,GAAG,IAAI,CAAC,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC/C,GAAG;AACH,EAAE;AACF;AACA,CAAC,mBAAmB,GAAG;AACvB,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAC1B,EAAE,OAAO,IAAI,CAAC,SAAS,CAAC;AACxB,EAAE;AACF;AACA,CAAC,eAAe,GAAG;AACnB,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAC1B,EAAE,OAAO,IAAI,CAAC,SAAS,KAAK,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;AACzD,EAAE;AACF;AACA,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,EAAE;AAC5B,EAAE,MAAM,OAAO,GAAG,YAAY,CAAC;AAC/B;AACA,EAAE,IAAI,QAAQ,CAAC,SAAS,CAAC,EAAE;AAC3B,GAAG,OAAO,GAAG,SAAS,CAAC;AACvB,GAAG,SAAS,GAAG,SAAS,CAAC;AACzB,GAAG;AACH;AACA,EAAE,IAAI,SAAS,KAAK,SAAS,EAAE;AAC/B,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAC3B,GAAG,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC;AACtC,GAAG;AACH;AACA,EAAE,IAAI,SAAS,KAAK,EAAE,EAAE,OAAO,IAAI,CAAC;AACpC;AACA,EAAE,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;AAC1B;AACA;AACA,EAAE,MAAM,UAAU,GAAG,EAAE,CAAC;AACxB;AACA,EAAE,IAAI,OAAO,CAAC,OAAO,EAAE;AACvB,GAAG,MAAM,UAAU;AACnB,IAAI,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,QAAQ,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;AACjF,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,KAAK;AACrC,IAAI,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;AACzD,KAAK,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;AAC1B,KAAK;AACL,IAAI,CAAC,CAAC;AACN,GAAG;AACH;AACA,EAAE,IAAI,yBAAyB,GAAG,OAAO,CAAC,WAAW,KAAK,KAAK,CAAC;AAChE,EAAE,MAAM,QAAQ,GAAG,CAAC,KAAK,KAAK;AAC9B,GAAG,IAAI,yBAAyB,EAAE,OAAO,CAAC,EAAE,SAAS,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;AAChE,GAAG,yBAAyB,GAAG,IAAI,CAAC;AACpC,GAAG,OAAO,KAAK,CAAC;AAChB,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AACrD;AACA,EAAE,IAAI,SAAS,GAAG,CAAC,CAAC;AACpB,EAAE,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC;AAC9B;AACA,EAAE,OAAO,KAAK,EAAE;AAChB,GAAG,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;AACzB;AACA,GAAG,IAAI,KAAK,CAAC,MAAM,EAAE;AACrB,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE;AAChC,KAAK,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AAC9D;AACA,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE;AAC/B,MAAM,yBAAyB,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC;AACnF,MAAM;AACN,KAAK;AACL,IAAI,MAAM;AACV,IAAI,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC;AAC5B;AACA,IAAI,OAAO,SAAS,GAAG,GAAG,EAAE;AAC5B,KAAK,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE;AACjC,MAAM,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AAC5C;AACA,MAAM,IAAI,IAAI,KAAK,IAAI,EAAE;AACzB,OAAO,yBAAyB,GAAG,IAAI,CAAC;AACxC,OAAO,MAAM,IAAI,IAAI,KAAK,IAAI,IAAI,yBAAyB,EAAE;AAC7D,OAAO,yBAAyB,GAAG,KAAK,CAAC;AACzC;AACA,OAAO,IAAI,SAAS,KAAK,KAAK,CAAC,KAAK,EAAE;AACtC,QAAQ,KAAK,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;AACtC,QAAQ,MAAM;AACd,QAAQ,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AAC3C,QAAQ,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC;AAC3B,QAAQ,KAAK,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;AACtC,QAAQ;AACR,OAAO;AACP,MAAM;AACN;AACA,KAAK,SAAS,IAAI,CAAC,CAAC;AACpB,KAAK;AACL,IAAI;AACJ;AACA,GAAG,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC;AACzB,GAAG,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC;AACtB,GAAG;AACH;AACA,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AACrD;AACA,EAAE,OAAO,IAAI,CAAC;AACd,EAAE;AACF;AACA,CAAC,MAAM,GAAG;AACV,EAAE,MAAM,IAAI,KAAK;AACjB,GAAG,iFAAiF;AACpF,GAAG,CAAC;AACJ,EAAE;AACF;AACA,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE;AAC5B,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;AAC1B,GAAG,OAAO,CAAC,IAAI;AACf,IAAI,oFAAoF;AACxF,IAAI,CAAC;AACL,GAAG,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC;AAC5B,GAAG;AACH;AACA,EAAE,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AACzC,EAAE;AACF;AACA,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE;AAC7B,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;AAC3B,GAAG,OAAO,CAAC,IAAI;AACf,IAAI,uFAAuF;AAC3F,IAAI,CAAC;AACL,GAAG,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC;AAC7B,GAAG;AACH;AACA,EAAE,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AAC3C,EAAE;AACF;AACA,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE;AACzB,EAAE,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,GAAG,EAAE,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;AAG/F;AACA,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACrB,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AACnB,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACrB;AACA,EAAE,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACpC,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC/B;AACA,EAAE,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC;AACjC,EAAE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;AAC7B;AACA,EAAE,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACvC,EAAE,IAAI,CAAC,QAAQ,IAAI,IAAI,KAAK,IAAI,CAAC,SAAS,EAAE,OAAO,IAAI,CAAC;AACxD,EAAE,MAAM,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC;AAChE;AACA,EAAE,IAAI,OAAO,EAAE,OAAO,CAAC,IAAI,GAAG,QAAQ,CAAC;AACvC,EAAE,IAAI,QAAQ,EAAE,QAAQ,CAAC,QAAQ,GAAG,OAAO,CAAC;AAC5C;AACA,EAAE,IAAI,OAAO,EAAE,OAAO,CAAC,IAAI,GAAG,KAAK,CAAC;AACpC,EAAE,IAAI,QAAQ,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC;AACzC;AACA,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC;AACnD,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;AAClB,GAAG,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAC;AACnC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC;AAC9B,GAAG;AACH;AACA,EAAE,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC;AAC3B,EAAE,IAAI,CAAC,IAAI,GAAG,QAAQ,IAAI,IAAI,CAAC;AAC/B;AACA,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;AACxC,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;AAGvC,EAAE,OAAO,IAAI,CAAC;AACd,EAAE;AACF;AACA,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE;AACzC,EAAE,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;AAC1B,EAAE,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,SAAS,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;AAC3F,EAAE;AACF;AACA,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE;AACtC,EAAE,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,MAAM,IAAI,SAAS,CAAC,sCAAsC,CAAC,CAAC;AAC/F;AACA,EAAE,OAAO,KAAK,GAAG,CAAC,EAAE,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;AAClD,EAAE,OAAO,GAAG,GAAG,CAAC,EAAE,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC9C;AACA,EAAE,IAAI,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;AAC1E,EAAE,IAAI,KAAK,KAAK,GAAG;AACnB,GAAG,MAAM,IAAI,KAAK;AAClB,IAAI,+EAA+E;AACnF,IAAI,CAAC;AAGL;AACA,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACrB,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AACnB;AACA,EAAE,IAAI,OAAO,KAAK,IAAI,EAAE;AACxB,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;AAC1B,IAAI,OAAO,CAAC,IAAI;AAChB,KAAK,+HAA+H;AACpI,KAAK,CAAC;AACN,IAAI,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC;AAC5B,IAAI;AACJ;AACA,GAAG,OAAO,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AACjC,GAAG;AACH,EAAE,MAAM,SAAS,GAAG,OAAO,KAAK,SAAS,GAAG,OAAO,CAAC,SAAS,GAAG,KAAK,CAAC;AACtE,EAAE,MAAM,SAAS,GAAG,OAAO,KAAK,SAAS,GAAG,OAAO,CAAC,SAAS,GAAG,KAAK,CAAC;AACtE;AACA,EAAE,IAAI,SAAS,EAAE;AACjB,GAAG,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACpD,GAAG,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE;AACrD,IAAI,QAAQ,EAAE,IAAI;AAClB,IAAI,KAAK,EAAE,IAAI;AACf,IAAI,UAAU,EAAE,IAAI;AACpB,IAAI,CAAC,CAAC;AACN,GAAG;AACH;AACA,EAAE,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACpC,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC/B;AACA,EAAE,IAAI,KAAK,EAAE;AACb,GAAG,IAAI,KAAK,GAAG,KAAK,CAAC;AACrB,GAAG,OAAO,KAAK,KAAK,IAAI,EAAE;AAC1B,IAAI,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;AAChD,KAAK,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;AAC9D,KAAK;AACL,IAAI,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC;AACvB,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;AAC1B,IAAI;AACJ;AACA,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC,SAAS,CAAC,CAAC;AAC9C,GAAG,MAAM;AACT;AACA,GAAG,MAAM,QAAQ,GAAG,IAAI,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;AACvE;AACA;AACA,GAAG,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC;AACxB,GAAG,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC;AAC5B,GAAG;AAGH,EAAE,OAAO,IAAI,CAAC;AACd,EAAE;AACF;AACA,CAAC,OAAO,CAAC,OAAO,EAAE;AAClB,EAAE,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,MAAM,IAAI,SAAS,CAAC,gCAAgC,CAAC,CAAC;AACzF;AACA,EAAE,IAAI,CAAC,KAAK,GAAG,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC;AACpC,EAAE,OAAO,IAAI,CAAC;AACd,EAAE;AACF;AACA,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE;AAC7B,EAAE,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,MAAM,IAAI,SAAS,CAAC,mCAAmC,CAAC,CAAC;AAG5F;AACA,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACrB;AACA,EAAE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAClC;AACA,EAAE,IAAI,KAAK,EAAE;AACb,GAAG,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AAC9B,GAAG,MAAM;AACT,GAAG,IAAI,CAAC,KAAK,GAAG,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC;AACrC,GAAG;AAGH,EAAE,OAAO,IAAI,CAAC;AACd,EAAE;AACF;AACA,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE;AAC9B,EAAE,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,MAAM,IAAI,SAAS,CAAC,mCAAmC,CAAC,CAAC;AAG5F;AACA,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACrB;AACA,EAAE,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACpC;AACA,EAAE,IAAI,KAAK,EAAE;AACb,GAAG,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;AAC/B,GAAG,MAAM;AACT,GAAG,IAAI,CAAC,KAAK,GAAG,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC;AACrC,GAAG;AAGH,EAAE,OAAO,IAAI,CAAC;AACd,EAAE;AACF;AACA,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE;AACpB,EAAE,OAAO,KAAK,GAAG,CAAC,EAAE,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;AAClD,EAAE,OAAO,GAAG,GAAG,CAAC,EAAE,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC9C;AACA,EAAE,IAAI,KAAK,KAAK,GAAG,EAAE,OAAO,IAAI,CAAC;AACjC;AACA,EAAE,IAAI,KAAK,GAAG,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;AAC7F,EAAE,IAAI,KAAK,GAAG,GAAG,EAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;AAGrE;AACA,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACrB,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AACnB;AACA,EAAE,IAAI,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAClC;AACA,EAAE,OAAO,KAAK,EAAE;AAChB,GAAG,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC;AACpB,GAAG,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC;AACpB,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAClB;AACA,GAAG,KAAK,GAAG,GAAG,GAAG,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;AAC5D,GAAG;AAGH,EAAE,OAAO,IAAI,CAAC;AACd,EAAE;AACF;AACA,CAAC,QAAQ,GAAG;AACZ,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAClE,EAAE,IAAI,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;AAC7B,EAAE,GAAG;AACL,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACtE,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC5E,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACtE,GAAG,SAAS,KAAK,GAAG,KAAK,CAAC,QAAQ,GAAG;AACrC,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAClE,EAAE,OAAO,EAAE,CAAC;AACZ,EAAE;AACF;AACA,CAAC,QAAQ,GAAG;AACZ,EAAE,IAAI,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AAC5C,EAAE,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;AAChE,EAAE,IAAI,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC;AAC3B,EAAE,IAAI,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;AAC7B,EAAE,GAAG;AACL,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AAC/B,IAAI,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AAC3C,IAAI,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC;AAC7E,IAAI,OAAO,GAAG,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC;AACpC,IAAI;AACJ;AACA,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;AACjC,IAAI,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AAC7C,IAAI,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC;AAC/E,IAAI,OAAO,GAAG,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;AACtC,IAAI;AACJ;AACA,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AAC/B,IAAI,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AAC3C,IAAI,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC;AAC7E,IAAI,OAAO,GAAG,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC;AACpC,IAAI;AACJ,GAAG,SAAS,KAAK,GAAG,KAAK,CAAC,QAAQ,GAAG;AACrC,EAAE,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AACxC,EAAE,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC;AAC1E,EAAE,OAAO,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC;AAC9B,EAAE;AACF;AACA,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;AAC9C,EAAE,OAAO,KAAK,GAAG,CAAC,EAAE,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;AAClD,EAAE,OAAO,GAAG,GAAG,CAAC,EAAE,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC9C;AACA,EAAE,IAAI,MAAM,GAAG,EAAE,CAAC;AAClB;AACA;AACA,EAAE,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC;AAC9B,EAAE,OAAO,KAAK,KAAK,KAAK,CAAC,KAAK,GAAG,KAAK,IAAI,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,EAAE;AAC/D;AACA,GAAG,IAAI,KAAK,CAAC,KAAK,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,IAAI,GAAG,EAAE;AAC9C,IAAI,OAAO,MAAM,CAAC;AAClB,IAAI;AACJ;AACA,GAAG,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC;AACtB,GAAG;AACH;AACA,EAAE,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,KAAK,KAAK,KAAK;AACpD,GAAG,MAAM,IAAI,KAAK,CAAC,CAAC,8BAA8B,EAAE,KAAK,CAAC,uBAAuB,CAAC,CAAC,CAAC;AACpF;AACA,EAAE,MAAM,UAAU,GAAG,KAAK,CAAC;AAC3B,EAAE,OAAO,KAAK,EAAE;AAChB,GAAG,IAAI,KAAK,CAAC,KAAK,KAAK,UAAU,KAAK,KAAK,IAAI,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,EAAE;AACvE,IAAI,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC;AAC1B,IAAI;AACJ;AACA,GAAG,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,IAAI,GAAG,CAAC;AAC7D,GAAG,IAAI,WAAW,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG;AACvD,IAAI,MAAM,IAAI,KAAK,CAAC,CAAC,8BAA8B,EAAE,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC;AACjF;AACA,GAAG,MAAM,UAAU,GAAG,UAAU,KAAK,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;AACrE,GAAG,MAAM,QAAQ,GAAG,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;AAChG;AACA,GAAG,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;AACvD;AACA,GAAG,IAAI,KAAK,CAAC,KAAK,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE;AAC3D,IAAI,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC;AAC1B,IAAI;AACJ;AACA,GAAG,IAAI,WAAW,EAAE;AACpB,IAAI,MAAM;AACV,IAAI;AACJ;AACA,GAAG,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC;AACtB,GAAG;AACH;AACA,EAAE,OAAO,MAAM,CAAC;AAChB,EAAE;AACF;AACA;AACA,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE;AAClB,EAAE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;AAC7B,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AACzB,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC3C;AACA,EAAE,OAAO,KAAK,CAAC;AACf,EAAE;AACF;AACA,CAAC,MAAM,CAAC,KAAK,EAAE;AACf,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,OAAO;AAGvD;AACA,EAAE,IAAI,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC;AACrC,EAAE,MAAM,aAAa,GAAG,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC;AAC1C;AACA,EAAE,OAAO,KAAK,EAAE;AAChB,GAAG,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AACpE;AACA,GAAG,KAAK,GAAG,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC7E,GAAG;AACH,EAAE;AACF;AACA,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE;AAC3B,EAAE,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE;AAC5C;AACA,GAAG,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC;AAChD,GAAG,MAAM,IAAI,KAAK;AAClB,IAAI,CAAC,mDAAmD,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;AACzG,IAAI,CAAC;AACL,GAAG;AACH;AACA,EAAE,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACtC;AACA,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;AAC5B,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC;AACjC,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC;AACtC;AACA,EAAE,IAAI,KAAK,KAAK,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;AAC1D;AACA,EAAE,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;AAEjC,EAAE,OAAO,IAAI,CAAC;AACd,EAAE;AACF;AACA,CAAC,QAAQ,GAAG;AACZ,EAAE,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC;AACvB;AACA,EAAE,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC;AAC9B,EAAE,OAAO,KAAK,EAAE;AAChB,GAAG,GAAG,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;AAC3B,GAAG,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC;AACtB,GAAG;AACH;AACA,EAAE,OAAO,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC;AAC1B,EAAE;AACF;AACA,CAAC,OAAO,GAAG;AACX,EAAE,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC;AAC9B,EAAE,GAAG;AACL,GAAG;AACH,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE;AAC7C,KAAK,KAAK,CAAC,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;AAClD,KAAK,KAAK,CAAC,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;AAC9C;AACA,IAAI,OAAO,KAAK,CAAC;AACjB,GAAG,SAAS,KAAK,GAAG,KAAK,CAAC,IAAI,GAAG;AACjC,EAAE,OAAO,IAAI,CAAC;AACd,EAAE;AACF;AACA,CAAC,MAAM,GAAG;AACV,EAAE,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC;AAC9B,EAAE,IAAI,MAAM,GAAG,CAAC,CAAC;AACjB,EAAE,GAAG;AACL,GAAG,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;AAC5E,GAAG,SAAS,KAAK,GAAG,KAAK,CAAC,IAAI,GAAG;AACjC,EAAE,OAAO,MAAM,CAAC;AAChB,EAAE;AACF;AACA,CAAC,SAAS,GAAG;AACb,EAAE,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAC/B,EAAE;AACF;AACA,CAAC,IAAI,CAAC,QAAQ,EAAE;AAChB,EAAE,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AACpD,EAAE;AACF;AACA,CAAC,cAAc,CAAC,QAAQ,EAAE;AAC1B,EAAE,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,CAAC,QAAQ,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC;AACpD;AACA,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAC1C,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,IAAI,CAAC;AACrC;AACA,EAAE,IAAI,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;AAC7B;AACA,EAAE,GAAG;AACL,GAAG,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;AACzB,GAAG,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AACrC;AACA;AACA,GAAG,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE;AAC1B,IAAI,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,EAAE;AAClC,KAAK,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;AACjC,KAAK;AACL;AACA,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAClC,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC;AAChD,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC;AAC5C,IAAI;AACJ;AACA,GAAG,IAAI,OAAO,EAAE,OAAO,IAAI,CAAC;AAC5B,GAAG,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC;AAC1B,GAAG,QAAQ,KAAK,EAAE;AAClB;AACA,EAAE,OAAO,KAAK,CAAC;AACf,EAAE;AACF;AACA,CAAC,OAAO,CAAC,QAAQ,EAAE;AACnB,EAAE,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;AAChC,EAAE,OAAO,IAAI,CAAC;AACd,EAAE;AACF,CAAC,gBAAgB,CAAC,QAAQ,EAAE;AAC5B,EAAE,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,GAAG,IAAI,QAAQ,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC;AACzD;AACA,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAC1C,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,IAAI,CAAC;AACrC;AACA,EAAE,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC;AAC9B;AACA,EAAE,GAAG;AACL,GAAG,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;AACzB,GAAG,MAAM,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;AACvC;AACA,GAAG,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE;AAC1B;AACA,IAAI,IAAI,KAAK,KAAK,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;AAC9D;AACA,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAClC,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC;AAChD,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC;AAC5C,IAAI;AACJ;AACA,GAAG,IAAI,OAAO,EAAE,OAAO,IAAI,CAAC;AAC5B,GAAG,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC;AACtB,GAAG,QAAQ,KAAK,EAAE;AAClB;AACA,EAAE,OAAO,KAAK,CAAC;AACf,EAAE;AACF;AACA,CAAC,SAAS,CAAC,QAAQ,EAAE;AACrB,EAAE,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;AAClC,EAAE,OAAO,IAAI,CAAC;AACd,EAAE;AACF;AACA,CAAC,UAAU,GAAG;AACd,EAAE,OAAO,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC;AAC3C,EAAE;AACF;AACA,CAAC,cAAc,CAAC,WAAW,EAAE,WAAW,EAAE;AAC1C,EAAE,SAAS,cAAc,CAAC,KAAK,EAAE,GAAG,EAAE;AACtC,GAAG,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE;AACxC,IAAI,OAAO,WAAW,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK;AAC1D;AACA,KAAK,IAAI,CAAC,KAAK,GAAG,EAAE,OAAO,GAAG,CAAC;AAC/B,KAAK,IAAI,CAAC,KAAK,GAAG,EAAE,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;AACpC,KAAK,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC;AACpB,KAAK,IAAI,GAAG,GAAG,KAAK,CAAC,MAAM,EAAE,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9C,KAAK,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACpB,KAAK,CAAC,CAAC;AACP,IAAI,MAAM;AACV,IAAI,OAAO,WAAW,CAAC,GAAG,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;AACjE,IAAI;AACJ,GAAG;AACH,EAAE,SAAS,QAAQ,CAAC,EAAE,EAAE,GAAG,EAAE;AAC7B,GAAG,IAAI,KAAK,CAAC;AACb,GAAG,MAAM,OAAO,GAAG,EAAE,CAAC;AACtB,GAAG,QAAQ,KAAK,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG;AAClC,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACxB,IAAI;AACJ,GAAG,OAAO,OAAO,CAAC;AAClB,GAAG;AACH,EAAE,IAAI,WAAW,CAAC,MAAM,EAAE;AAC1B,GAAG,MAAM,OAAO,GAAG,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;AACxD,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,KAAK;AAC9B,IAAI,IAAI,KAAK,CAAC,KAAK,IAAI,IAAI;AAC3B,KAAK,IAAI,CAAC,SAAS;AACnB,MAAM,KAAK,CAAC,KAAK;AACjB,MAAM,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM;AACnC,MAAM,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC;AAC1C,MAAM,CAAC;AACP,IAAI,CAAC,CAAC;AACN,GAAG,MAAM;AACT,GAAG,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;AAClD,GAAG,IAAI,KAAK,IAAI,KAAK,CAAC,KAAK,IAAI,IAAI;AACnC,IAAI,IAAI,CAAC,SAAS;AAClB,KAAK,KAAK,CAAC,KAAK;AAChB,KAAK,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM;AAClC,KAAK,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC;AACzC,KAAK,CAAC;AACN,GAAG;AACH,EAAE,OAAO,IAAI,CAAC;AACd,EAAE;AACF;AACA,CAAC,cAAc,CAAC,MAAM,EAAE,WAAW,EAAE;AACrC,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;AAC5B,EAAE,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AACzC;AACA,EAAE,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;AACpB,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AAC7D,GAAG;AACH;AACA,EAAE,OAAO,IAAI,CAAC;AACd,EAAE;AACF;AACA,CAAC,OAAO,CAAC,WAAW,EAAE,WAAW,EAAE;AACnC,EAAE,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE;AACvC,GAAG,OAAO,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;AACxD,GAAG;AACH;AACA,EAAE,OAAO,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;AACvD,EAAE;AACF;AACA,CAAC,iBAAiB,CAAC,MAAM,EAAE,WAAW,EAAE;AACxC,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;AAC5B,EAAE,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC;AACrC,EAAE;AACF,GAAG,IAAI,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC;AACvC,GAAG,KAAK,KAAK,CAAC,CAAC;AACf,GAAG,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,GAAG,YAAY,CAAC;AACzD,IAAI;AACJ,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,GAAG,YAAY,EAAE,WAAW,CAAC,CAAC;AAC5D,GAAG;AACH;AACA,EAAE,OAAO,IAAI,CAAC;AACd,EAAE;AACF;AACA,CAAC,UAAU,CAAC,WAAW,EAAE,WAAW,EAAE;AACtC,EAAE,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE;AACvC,GAAG,OAAO,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;AAC3D,GAAG;AACH;AACA,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;AAC3B,GAAG,MAAM,IAAI,SAAS;AACtB,IAAI,2EAA2E;AAC/E,IAAI,CAAC;AACL,GAAG;AACH;AACA,EAAE,OAAO,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;AACvD,EAAE;AACF;;AC3zBA,MAAM,UAAU,GAAG,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC;AACnD;AACe,MAAM,MAAM,CAAC;AAC5B,CAAC,WAAW,CAAC,OAAO,GAAG,EAAE,EAAE;AAC3B,EAAE,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;AACnC,EAAE,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,KAAK,SAAS,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;AAC9E,EAAE,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;AACpB,EAAE,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;AAC1B,EAAE,IAAI,CAAC,2BAA2B,GAAG,EAAE,CAAC;AACxC,EAAE;AACF;AACA,CAAC,SAAS,CAAC,MAAM,EAAE;AACnB,EAAE,IAAI,MAAM,YAAY,WAAW,EAAE;AACrC,GAAG,OAAO,IAAI,CAAC,SAAS,CAAC;AACzB,IAAI,OAAO,EAAE,MAAM;AACnB,IAAI,QAAQ,EAAE,MAAM,CAAC,QAAQ;AAC7B,IAAI,SAAS,EAAE,IAAI,CAAC,SAAS;AAC7B,IAAI,CAAC,CAAC;AACN,GAAG;AACH;AACA,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;AAC5C,GAAG,MAAM,IAAI,KAAK;AAClB,IAAI,sIAAsI;AAC1I,IAAI,CAAC;AACL,GAAG;AACH;AACA,EAAE,CAAC,UAAU,EAAE,uBAAuB,EAAE,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK;AACzE,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AACjF,GAAG,CAAC,CAAC;AACL;AACA,EAAE,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,EAAE;AACtC;AACA,GAAG,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;AACrC,GAAG;AACH;AACA,EAAE,IAAI,MAAM,CAAC,QAAQ,EAAE;AACvB,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,2BAA2B,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE;AAC5E,IAAI,IAAI,CAAC,2BAA2B,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;AAClF,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC7F,IAAI,MAAM;AACV,IAAI,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,2BAA2B,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC/F,IAAI,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,KAAK,YAAY,CAAC,OAAO,EAAE;AAC1D,KAAK,MAAM,IAAI,KAAK,CAAC,CAAC,+BAA+B,EAAE,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC,CAAC;AAC/F,KAAK;AACL,IAAI;AACJ,GAAG;AACH;AACA,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC5B,EAAE,OAAO,IAAI,CAAC;AACd,EAAE;AACF;AACA,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE;AACtB,EAAE,IAAI,CAAC,SAAS,CAAC;AACjB,GAAG,OAAO,EAAE,IAAI,WAAW,CAAC,GAAG,CAAC;AAChC,GAAG,SAAS,EAAE,CAAC,OAAO,IAAI,OAAO,CAAC,SAAS,KAAK,EAAE;AAClD,GAAG,CAAC,CAAC;AACL;AACA,EAAE,OAAO,IAAI,CAAC;AACd,EAAE;AACF;AACA,CAAC,KAAK,GAAG;AACT,EAAE,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC;AAC5B,GAAG,KAAK,EAAE,IAAI,CAAC,KAAK;AACpB,GAAG,SAAS,EAAE,IAAI,CAAC,SAAS;AAC5B,GAAG,CAAC,CAAC;AACL;AACA,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK;AACnC,GAAG,MAAM,CAAC,SAAS,CAAC;AACpB,IAAI,QAAQ,EAAE,MAAM,CAAC,QAAQ;AAC7B,IAAI,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE;AACnC,IAAI,SAAS,EAAE,MAAM,CAAC,SAAS;AAC/B,IAAI,CAAC,CAAC;AACN,GAAG,CAAC,CAAC;AACL;AACA,EAAE,OAAO,MAAM,CAAC;AAChB,EAAE;AACF;AACA,CAAC,kBAAkB,CAAC,OAAO,GAAG,EAAE,EAAE;AAClC,EAAE,MAAM,KAAK,GAAG,EAAE,CAAC;AACnB,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK;AACnC,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK;AAC7D,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAChD,IAAI,CAAC,CAAC;AACN,GAAG,CAAC,CAAC;AACL;AACA,EAAE,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC/C;AACA,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE;AAClB,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAChC,GAAG;AACH;AACA,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK;AACtC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE;AACd,IAAI,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AACrC,IAAI;AACJ;AACA,GAAG,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,2BAA2B,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;AAChG,GAAG,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC;AACtC,GAAG,MAAM,MAAM,GAAG,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;AACnD;AACA,GAAG,IAAI,WAAW,CAAC,KAAK,EAAE;AAC1B,IAAI,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AACxC,IAAI;AACJ;AACA,GAAG,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,KAAK,KAAK;AAC9C,IAAI,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACpC;AACA,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC1D;AACA,IAAI,IAAI,MAAM,CAAC,QAAQ,EAAE;AACzB,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE;AACvB,MAAM,QAAQ,CAAC,OAAO;AACtB,OAAO,WAAW;AAClB,OAAO,KAAK,CAAC,OAAO;AACpB,OAAO,GAAG;AACV,OAAO,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AAC3D,OAAO,CAAC;AACR,MAAM,MAAM;AACZ,MAAM,QAAQ,CAAC,gBAAgB;AAC/B,OAAO,WAAW;AAClB,OAAO,KAAK;AACZ,OAAO,WAAW,CAAC,QAAQ;AAC3B,OAAO,GAAG;AACV,OAAO,WAAW,CAAC,kBAAkB;AACrC,OAAO,CAAC;AACR,MAAM;AACN,KAAK,MAAM;AACX,KAAK,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AACrC,KAAK;AACL;AACA,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC1D,IAAI,CAAC,CAAC;AACN;AACA,GAAG,IAAI,WAAW,CAAC,KAAK,EAAE;AAC1B,IAAI,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AACxC,IAAI;AACJ,GAAG,CAAC,CAAC;AACL;AACA,EAAE,OAAO;AACT,GAAG,IAAI,EAAE,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,IAAI;AAChE,GAAG,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK;AAC/C,IAAI,OAAO,OAAO,CAAC,IAAI,GAAG,eAAe,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC3F,IAAI,CAAC;AACL,GAAG,cAAc,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK;AACtD,IAAI,OAAO,OAAO,CAAC,cAAc,GAAG,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;AAC1D,IAAI,CAAC;AACL,GAAG,KAAK;AACR,GAAG,QAAQ,EAAE,QAAQ,CAAC,GAAG;AACzB,GAAG,CAAC;AACJ,EAAE;AACF;AACA,CAAC,WAAW,CAAC,OAAO,EAAE;AACtB,EAAE,OAAO,IAAI,SAAS,CAAC,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC;AACzD,EAAE;AACF;AACA,CAAC,eAAe,GAAG;AACnB,EAAE,MAAM,kBAAkB,GAAG,EAAE,CAAC;AAChC;AACA,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK;AACnC,GAAG,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC;AAC1D;AACA,GAAG,IAAI,SAAS,KAAK,IAAI,EAAE,OAAO;AAClC;AACA,GAAG,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,EAAE,kBAAkB,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AACzE,GAAG,kBAAkB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AACtC,GAAG,CAAC,CAAC;AACL;AACA,EAAE;AACF,GAAG,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK;AAClD,IAAI,OAAO,kBAAkB,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC;AACzD,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI;AAChB,IAAI;AACJ,EAAE;AACF;AACA,CAAC,MAAM,CAAC,SAAS,EAAE;AACnB,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;AACzB,GAAG,SAAS,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;AACtC,GAAG;AACH;AACA,EAAE,IAAI,SAAS,KAAK,EAAE,EAAE,OAAO,IAAI,CAAC;AACpC;AACA,EAAE,IAAI,eAAe,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;AACrE;AACA,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK;AACtC,GAAG,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,KAAK,SAAS,GAAG,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;AACxF,GAAG,MAAM,WAAW,GAAG,eAAe,KAAK,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;AAC9E;AACA,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE;AACpC,IAAI,OAAO,EAAE,MAAM,CAAC,qBAAqB;AACzC,IAAI,WAAW;AACf,IAAI,CAAC,CAAC;AACN;AACA,GAAG,eAAe,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC;AACxD,GAAG,CAAC,CAAC;AACL;AACA,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE;AAClB,GAAG,IAAI,CAAC,KAAK;AACb,IAAI,SAAS;AACb,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK;AACrD,KAAK,OAAO,KAAK,GAAG,CAAC,GAAG,SAAS,GAAG,KAAK,GAAG,KAAK,CAAC;AAClD,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA,EAAE,OAAO,IAAI,CAAC;AACd,EAAE;AACF;AACA,CAAC,OAAO,CAAC,GAAG,EAAE;AACd,EAAE,IAAI,CAAC,KAAK,GAAG,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC;AAChC,EAAE,OAAO,IAAI,CAAC;AACd,EAAE;AACF;AACA,CAAC,QAAQ,GAAG;AACZ,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO;AAC3B,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK;AACvB,IAAI,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,KAAK,SAAS,GAAG,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;AACzF,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,SAAS,GAAG,EAAE,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;AACrE;AACA,IAAI,OAAO,GAAG,CAAC;AACf,IAAI,CAAC;AACL,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC;AACb;AACA,EAAE,OAAO,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AAC3B,EAAE;AACF;AACA,CAAC,OAAO,GAAG;AACX,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,OAAO,KAAK,CAAC;AAC3D,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,EAAE,OAAO,KAAK,CAAC;AAC7E,EAAE,OAAO,IAAI,CAAC;AACd,EAAE;AACF;AACA,CAAC,MAAM,GAAG;AACV,EAAE,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM;AAC5B,GAAG,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE;AACvD,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM;AACpB,GAAG,CAAC;AACJ,EAAE;AACF;AACA,CAAC,SAAS,GAAG;AACb,EAAE,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAC/B,EAAE;AACF;AACA,CAAC,IAAI,CAAC,QAAQ,EAAE;AAChB,EAAE,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AACpD,EAAE;AACF;AACA,CAAC,SAAS,CAAC,QAAQ,EAAE;AACrB,EAAE,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,GAAG,IAAI,QAAQ,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC;AACzD,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAC1C;AACA,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AACnB,GAAG,IAAI,MAAM,CAAC;AACd,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;AACb;AACA,GAAG,GAAG;AACN,IAAI,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;AAC/B,IAAI,IAAI,CAAC,MAAM,EAAE;AACjB,KAAK,MAAM;AACX,KAAK;AACL,IAAI,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE;AACxD,GAAG;AACH;AACA,EAAE,OAAO,IAAI,CAAC;AACd,EAAE;AACF;AACA,CAAC,OAAO,CAAC,QAAQ,EAAE;AACnB,EAAE,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,CAAC,QAAQ,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC;AACpD;AACA,EAAE,IAAI,MAAM,CAAC;AACb,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;AAClC;AACA,EAAE,GAAG;AACL,GAAG,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;AAC9B,GAAG,IAAI,CAAC,MAAM,EAAE;AAChB,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAC5C,IAAI,MAAM;AACV,IAAI;AACJ,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE;AACrD;AACA,EAAE,OAAO,IAAI,CAAC;AACd,EAAE;AACF;;;;\"}/dist/magic-string.cjs.js.map\u0000\u0001Z{\"version\":3,\"file\":\"magic-string.cjs.js\",\"sources\":[\"../src/BitSet.js\",\"../src/Chunk.js\",\"../src/SourceMap.js\",\"../src/utils/guessIndent.js\",\"../src/utils/getRelativePath.js\",\"../src/utils/isObject.js\",\"../src/utils/getLocator.js\",\"../src/utils/Mappings.js\",\"../src/MagicString.js\",\"../src/Bundle.js\",\"../src/index-legacy.js\"],\"sourcesContent\":[\"export default class BitSet {\\n\\tconstructor(arg) {\\n\\t\\tthis.bits = arg instanceof BitSet ? arg.bits.slice() : [];\\n\\t}\\n\\n\\tadd(n) {\\n\\t\\tthis.bits[n >> 5] |= 1 << (n & 31);\\n\\t}\\n\\n\\thas(n) {\\n\\t\\treturn !!(this.bits[n >> 5] & (1 << (n & 31)));\\n\\t}\\n}\\n\",\"export default class Chunk {\\n\\tconstructor(start, end, content) {\\n\\t\\tthis.start = start;\\n\\t\\tthis.end = end;\\n\\t\\tthis.original = content;\\n\\n\\t\\tthis.intro = '';\\n\\t\\tthis.outro = '';\\n\\n\\t\\tthis.content = content;\\n\\t\\tthis.storeName = false;\\n\\t\\tthis.edited = false;\\n\\n\\t\\tif (DEBUG) {\\n\\t\\t\\t// we make these non-enumerable, for sanity while debugging\\n\\t\\t\\tObject.defineProperties(this, {\\n\\t\\t\\t\\tprevious: { writable: true, value: null },\\n\\t\\t\\t\\tnext: { writable: true, value: null },\\n\\t\\t\\t});\\n\\t\\t} else {\\n\\t\\t\\tthis.previous = null;\\n\\t\\t\\tthis.next = null;\\n\\t\\t}\\n\\t}\\n\\n\\tappendLeft(content) {\\n\\t\\tthis.outro += content;\\n\\t}\\n\\n\\tappendRight(content) {\\n\\t\\tthis.intro = this.intro + content;\\n\\t}\\n\\n\\tclone() {\\n\\t\\tconst chunk = new Chunk(this.start, this.end, this.original);\\n\\n\\t\\tchunk.intro = this.intro;\\n\\t\\tchunk.outro = this.outro;\\n\\t\\tchunk.content = this.content;\\n\\t\\tchunk.storeName = this.storeName;\\n\\t\\tchunk.edited = this.edited;\\n\\n\\t\\treturn chunk;\\n\\t}\\n\\n\\tcontains(index) {\\n\\t\\treturn this.start < index && index < this.end;\\n\\t}\\n\\n\\teachNext(fn) {\\n\\t\\tlet chunk = this;\\n\\t\\twhile (chunk) {\\n\\t\\t\\tfn(chunk);\\n\\t\\t\\tchunk = chunk.next;\\n\\t\\t}\\n\\t}\\n\\n\\teachPrevious(fn) {\\n\\t\\tlet chunk = this;\\n\\t\\twhile (chunk) {\\n\\t\\t\\tfn(chunk);\\n\\t\\t\\tchunk = chunk.previous;\\n\\t\\t}\\n\\t}\\n\\n\\tedit(content, storeName, contentOnly) {\\n\\t\\tthis.content = content;\\n\\t\\tif (!contentOnly) {\\n\\t\\t\\tthis.intro = '';\\n\\t\\t\\tthis.outro = '';\\n\\t\\t}\\n\\t\\tthis.storeName = storeName;\\n\\n\\t\\tthis.edited = true;\\n\\n\\t\\treturn this;\\n\\t}\\n\\n\\tprependLeft(content) {\\n\\t\\tthis.outro = content + this.outro;\\n\\t}\\n\\n\\tprependRight(content) {\\n\\t\\tthis.intro = content + this.intro;\\n\\t}\\n\\n\\tsplit(index) {\\n\\t\\tconst sliceIndex = index - this.start;\\n\\n\\t\\tconst originalBefore = this.original.slice(0, sliceIndex);\\n\\t\\tconst originalAfter = this.original.slice(sliceIndex);\\n\\n\\t\\tthis.original = originalBefore;\\n\\n\\t\\tconst newChunk = new Chunk(index, this.end, originalAfter);\\n\\t\\tnewChunk.outro = this.outro;\\n\\t\\tthis.outro = '';\\n\\n\\t\\tthis.end = index;\\n\\n\\t\\tif (this.edited) {\\n\\t\\t\\t// TODO is this block necessary?...\\n\\t\\t\\tnewChunk.edit('', false);\\n\\t\\t\\tthis.content = '';\\n\\t\\t} else {\\n\\t\\t\\tthis.content = originalBefore;\\n\\t\\t}\\n\\n\\t\\tnewChunk.next = this.next;\\n\\t\\tif (newChunk.next) newChunk.next.previous = newChunk;\\n\\t\\tnewChunk.previous = this;\\n\\t\\tthis.next = newChunk;\\n\\n\\t\\treturn newChunk;\\n\\t}\\n\\n\\ttoString() {\\n\\t\\treturn this.intro + this.content + this.outro;\\n\\t}\\n\\n\\ttrimEnd(rx) {\\n\\t\\tthis.outro = this.outro.replace(rx, '');\\n\\t\\tif (this.outro.length) return true;\\n\\n\\t\\tconst trimmed = this.content.replace(rx, '');\\n\\n\\t\\tif (trimmed.length) {\\n\\t\\t\\tif (trimmed !== this.content) {\\n\\t\\t\\t\\tthis.split(this.start + trimmed.length).edit('', undefined, true);\\n\\t\\t\\t}\\n\\t\\t\\treturn true;\\n\\t\\t} else {\\n\\t\\t\\tthis.edit('', undefined, true);\\n\\n\\t\\t\\tthis.intro = this.intro.replace(rx, '');\\n\\t\\t\\tif (this.intro.length) return true;\\n\\t\\t}\\n\\t}\\n\\n\\ttrimStart(rx) {\\n\\t\\tthis.intro = this.intro.replace(rx, '');\\n\\t\\tif (this.intro.length) return true;\\n\\n\\t\\tconst trimmed = this.content.replace(rx, '');\\n\\n\\t\\tif (trimmed.length) {\\n\\t\\t\\tif (trimmed !== this.content) {\\n\\t\\t\\t\\tthis.split(this.end - trimmed.length);\\n\\t\\t\\t\\tthis.edit('', undefined, true);\\n\\t\\t\\t}\\n\\t\\t\\treturn true;\\n\\t\\t} else {\\n\\t\\t\\tthis.edit('', undefined, true);\\n\\n\\t\\t\\tthis.outro = this.outro.replace(rx, '');\\n\\t\\t\\tif (this.outro.length) return true;\\n\\t\\t}\\n\\t}\\n}\\n\",\"import { encode } from '@jridgewell/sourcemap-codec';\\n\\nfunction getBtoa () {\\n\\tif (typeof window !== 'undefined' && typeof window.btoa === 'function') {\\n\\t\\treturn (str) => window.btoa(unescape(encodeURIComponent(str)));\\n\\t} else if (typeof Buffer === 'function') {\\n\\t\\treturn (str) => Buffer.from(str, 'utf-8').toString('base64');\\n\\t} else {\\n\\t\\treturn () => {\\n\\t\\t\\tthrow new Error('Unsupported environment: `window.btoa` or `Buffer` should be supported.');\\n\\t\\t};\\n\\t}\\n}\\n\\nconst btoa = /*#__PURE__*/ getBtoa();\\n\\nexport default class SourceMap {\\n\\tconstructor(properties) {\\n\\t\\tthis.version = 3;\\n\\t\\tthis.file = properties.file;\\n\\t\\tthis.sources = properties.sources;\\n\\t\\tthis.sourcesContent = properties.sourcesContent;\\n\\t\\tthis.names = properties.names;\\n\\t\\tthis.mappings = encode(properties.mappings);\\n\\t}\\n\\n\\ttoString() {\\n\\t\\treturn JSON.stringify(this);\\n\\t}\\n\\n\\ttoUrl() {\\n\\t\\treturn 'data:application/json;charset=utf-8;base64,' + btoa(this.toString());\\n\\t}\\n}\\n\",\"export default function guessIndent(code) {\\n\\tconst lines = code.split('\\\\n');\\n\\n\\tconst tabbed = lines.filter((line) => /^\\\\t+/.test(line));\\n\\tconst spaced = lines.filter((line) => /^ {2,}/.test(line));\\n\\n\\tif (tabbed.length === 0 && spaced.length === 0) {\\n\\t\\treturn null;\\n\\t}\\n\\n\\t// More lines tabbed than spaced? Assume tabs, and\\n\\t// default to tabs in the case of a tie (or nothing\\n\\t// to go on)\\n\\tif (tabbed.length >= spaced.length) {\\n\\t\\treturn '\\\\t';\\n\\t}\\n\\n\\t// Otherwise, we need to guess the multiple\\n\\tconst min = spaced.reduce((previous, current) => {\\n\\t\\tconst numSpaces = /^ +/.exec(current)[0].length;\\n\\t\\treturn Math.min(numSpaces, previous);\\n\\t}, Infinity);\\n\\n\\treturn new Array(min + 1).join(' ');\\n}\\n\",\"export default function getRelativePath(from, to) {\\n\\tconst fromParts = from.split(/[/\\\\\\\\]/);\\n\\tconst toParts = to.split(/[/\\\\\\\\]/);\\n\\n\\tfromParts.pop(); // get dirname\\n\\n\\twhile (fromParts[0] === toParts[0]) {\\n\\t\\tfromParts.shift();\\n\\t\\ttoParts.shift();\\n\\t}\\n\\n\\tif (fromParts.length) {\\n\\t\\tlet i = fromParts.length;\\n\\t\\twhile (i--) fromParts[i] = '..';\\n\\t}\\n\\n\\treturn fromParts.concat(toParts).join('/');\\n}\\n\",\"const toString = Object.prototype.toString;\\n\\nexport default function isObject(thing) {\\n\\treturn toString.call(thing) === '[object Object]';\\n}\\n\",\"export default function getLocator(source) {\\n\\tconst originalLines = source.split('\\\\n');\\n\\tconst lineOffsets = [];\\n\\n\\tfor (let i = 0, pos = 0; i < originalLines.length; i++) {\\n\\t\\tlineOffsets.push(pos);\\n\\t\\tpos += originalLines[i].length + 1;\\n\\t}\\n\\n\\treturn function locate(index) {\\n\\t\\tlet i = 0;\\n\\t\\tlet j = lineOffsets.length;\\n\\t\\twhile (i < j) {\\n\\t\\t\\tconst m = (i + j) >> 1;\\n\\t\\t\\tif (index < lineOffsets[m]) {\\n\\t\\t\\t\\tj = m;\\n\\t\\t\\t} else {\\n\\t\\t\\t\\ti = m + 1;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tconst line = i - 1;\\n\\t\\tconst column = index - lineOffsets[line];\\n\\t\\treturn { line, column };\\n\\t};\\n}\\n\",\"export default class Mappings {\\n\\tconstructor(hires) {\\n\\t\\tthis.hires = hires;\\n\\t\\tthis.generatedCodeLine = 0;\\n\\t\\tthis.generatedCodeColumn = 0;\\n\\t\\tthis.raw = [];\\n\\t\\tthis.rawSegments = this.raw[this.generatedCodeLine] = [];\\n\\t\\tthis.pending = null;\\n\\t}\\n\\n\\taddEdit(sourceIndex, content, loc, nameIndex) {\\n\\t\\tif (content.length) {\\n\\t\\t\\tconst segment = [this.generatedCodeColumn, sourceIndex, loc.line, loc.column];\\n\\t\\t\\tif (nameIndex >= 0) {\\n\\t\\t\\t\\tsegment.push(nameIndex);\\n\\t\\t\\t}\\n\\t\\t\\tthis.rawSegments.push(segment);\\n\\t\\t} else if (this.pending) {\\n\\t\\t\\tthis.rawSegments.push(this.pending);\\n\\t\\t}\\n\\n\\t\\tthis.advance(content);\\n\\t\\tthis.pending = null;\\n\\t}\\n\\n\\taddUneditedChunk(sourceIndex, chunk, original, loc, sourcemapLocations) {\\n\\t\\tlet originalCharIndex = chunk.start;\\n\\t\\tlet first = true;\\n\\n\\t\\twhile (originalCharIndex < chunk.end) {\\n\\t\\t\\tif (this.hires || first || sourcemapLocations.has(originalCharIndex)) {\\n\\t\\t\\t\\tthis.rawSegments.push([this.generatedCodeColumn, sourceIndex, loc.line, loc.column]);\\n\\t\\t\\t}\\n\\n\\t\\t\\tif (original[originalCharIndex] === '\\\\n') {\\n\\t\\t\\t\\tloc.line += 1;\\n\\t\\t\\t\\tloc.column = 0;\\n\\t\\t\\t\\tthis.generatedCodeLine += 1;\\n\\t\\t\\t\\tthis.raw[this.generatedCodeLine] = this.rawSegments = [];\\n\\t\\t\\t\\tthis.generatedCodeColumn = 0;\\n\\t\\t\\t\\tfirst = true;\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tloc.column += 1;\\n\\t\\t\\t\\tthis.generatedCodeColumn += 1;\\n\\t\\t\\t\\tfirst = false;\\n\\t\\t\\t}\\n\\n\\t\\t\\toriginalCharIndex += 1;\\n\\t\\t}\\n\\n\\t\\tthis.pending = null;\\n\\t}\\n\\n\\tadvance(str) {\\n\\t\\tif (!str) return;\\n\\n\\t\\tconst lines = str.split('\\\\n');\\n\\n\\t\\tif (lines.length > 1) {\\n\\t\\t\\tfor (let i = 0; i < lines.length - 1; i++) {\\n\\t\\t\\t\\tthis.generatedCodeLine++;\\n\\t\\t\\t\\tthis.raw[this.generatedCodeLine] = this.rawSegments = [];\\n\\t\\t\\t}\\n\\t\\t\\tthis.generatedCodeColumn = 0;\\n\\t\\t}\\n\\n\\t\\tthis.generatedCodeColumn += lines[lines.length - 1].length;\\n\\t}\\n}\\n\",\"import BitSet from './BitSet.js';\\nimport Chunk from './Chunk.js';\\nimport SourceMap from './SourceMap.js';\\nimport guessIndent from './utils/guessIndent.js';\\nimport getRelativePath from './utils/getRelativePath.js';\\nimport isObject from './utils/isObject.js';\\nimport getLocator from './utils/getLocator.js';\\nimport Mappings from './utils/Mappings.js';\\nimport Stats from './utils/Stats.js';\\n\\nconst n = '\\\\n';\\n\\nconst warned = {\\n\\tinsertLeft: false,\\n\\tinsertRight: false,\\n\\tstoreName: false,\\n};\\n\\nexport default class MagicString {\\n\\tconstructor(string, options = {}) {\\n\\t\\tconst chunk = new Chunk(0, string.length, string);\\n\\n\\t\\tObject.defineProperties(this, {\\n\\t\\t\\toriginal: { writable: true, value: string },\\n\\t\\t\\toutro: { writable: true, value: '' },\\n\\t\\t\\tintro: { writable: true, value: '' },\\n\\t\\t\\tfirstChunk: { writable: true, value: chunk },\\n\\t\\t\\tlastChunk: { writable: true, value: chunk },\\n\\t\\t\\tlastSearchedChunk: { writable: true, value: chunk },\\n\\t\\t\\tbyStart: { writable: true, value: {} },\\n\\t\\t\\tbyEnd: { writable: true, value: {} },\\n\\t\\t\\tfilename: { writable: true, value: options.filename },\\n\\t\\t\\tindentExclusionRanges: { writable: true, value: options.indentExclusionRanges },\\n\\t\\t\\tsourcemapLocations: { writable: true, value: new BitSet() },\\n\\t\\t\\tstoredNames: { writable: true, value: {} },\\n\\t\\t\\tindentStr: { writable: true, value: undefined },\\n\\t\\t});\\n\\n\\t\\tif (DEBUG) {\\n\\t\\t\\tObject.defineProperty(this, 'stats', { value: new Stats() });\\n\\t\\t}\\n\\n\\t\\tthis.byStart[0] = chunk;\\n\\t\\tthis.byEnd[string.length] = chunk;\\n\\t}\\n\\n\\taddSourcemapLocation(char) {\\n\\t\\tthis.sourcemapLocations.add(char);\\n\\t}\\n\\n\\tappend(content) {\\n\\t\\tif (typeof content !== 'string') throw new TypeError('outro content must be a string');\\n\\n\\t\\tthis.outro += content;\\n\\t\\treturn this;\\n\\t}\\n\\n\\tappendLeft(index, content) {\\n\\t\\tif (typeof content !== 'string') throw new TypeError('inserted content must be a string');\\n\\n\\t\\tif (DEBUG) this.stats.time('appendLeft');\\n\\n\\t\\tthis._split(index);\\n\\n\\t\\tconst chunk = this.byEnd[index];\\n\\n\\t\\tif (chunk) {\\n\\t\\t\\tchunk.appendLeft(content);\\n\\t\\t} else {\\n\\t\\t\\tthis.intro += content;\\n\\t\\t}\\n\\n\\t\\tif (DEBUG) this.stats.timeEnd('appendLeft');\\n\\t\\treturn this;\\n\\t}\\n\\n\\tappendRight(index, content) {\\n\\t\\tif (typeof content !== 'string') throw new TypeError('inserted content must be a string');\\n\\n\\t\\tif (DEBUG) this.stats.time('appendRight');\\n\\n\\t\\tthis._split(index);\\n\\n\\t\\tconst chunk = this.byStart[index];\\n\\n\\t\\tif (chunk) {\\n\\t\\t\\tchunk.appendRight(content);\\n\\t\\t} else {\\n\\t\\t\\tthis.outro += content;\\n\\t\\t}\\n\\n\\t\\tif (DEBUG) this.stats.timeEnd('appendRight');\\n\\t\\treturn this;\\n\\t}\\n\\n\\tclone() {\\n\\t\\tconst cloned = new MagicString(this.original, { filename: this.filename });\\n\\n\\t\\tlet originalChunk = this.firstChunk;\\n\\t\\tlet clonedChunk = (cloned.firstChunk = cloned.lastSearchedChunk = originalChunk.clone());\\n\\n\\t\\twhile (originalChunk) {\\n\\t\\t\\tcloned.byStart[clonedChunk.start] = clonedChunk;\\n\\t\\t\\tcloned.byEnd[clonedChunk.end] = clonedChunk;\\n\\n\\t\\t\\tconst nextOriginalChunk = originalChunk.next;\\n\\t\\t\\tconst nextClonedChunk = nextOriginalChunk && nextOriginalChunk.clone();\\n\\n\\t\\t\\tif (nextClonedChunk) {\\n\\t\\t\\t\\tclonedChunk.next = nextClonedChunk;\\n\\t\\t\\t\\tnextClonedChunk.previous = clonedChunk;\\n\\n\\t\\t\\t\\tclonedChunk = nextClonedChunk;\\n\\t\\t\\t}\\n\\n\\t\\t\\toriginalChunk = nextOriginalChunk;\\n\\t\\t}\\n\\n\\t\\tcloned.lastChunk = clonedChunk;\\n\\n\\t\\tif (this.indentExclusionRanges) {\\n\\t\\t\\tcloned.indentExclusionRanges = this.indentExclusionRanges.slice();\\n\\t\\t}\\n\\n\\t\\tcloned.sourcemapLocations = new BitSet(this.sourcemapLocations);\\n\\n\\t\\tcloned.intro = this.intro;\\n\\t\\tcloned.outro = this.outro;\\n\\n\\t\\treturn cloned;\\n\\t}\\n\\n\\tgenerateDecodedMap(options) {\\n\\t\\toptions = options || {};\\n\\n\\t\\tconst sourceIndex = 0;\\n\\t\\tconst names = Object.keys(this.storedNames);\\n\\t\\tconst mappings = new Mappings(options.hires);\\n\\n\\t\\tconst locate = getLocator(this.original);\\n\\n\\t\\tif (this.intro) {\\n\\t\\t\\tmappings.advance(this.intro);\\n\\t\\t}\\n\\n\\t\\tthis.firstChunk.eachNext((chunk) => {\\n\\t\\t\\tconst loc = locate(chunk.start);\\n\\n\\t\\t\\tif (chunk.intro.length) mappings.advance(chunk.intro);\\n\\n\\t\\t\\tif (chunk.edited) {\\n\\t\\t\\t\\tmappings.addEdit(\\n\\t\\t\\t\\t\\tsourceIndex,\\n\\t\\t\\t\\t\\tchunk.content,\\n\\t\\t\\t\\t\\tloc,\\n\\t\\t\\t\\t\\tchunk.storeName ? names.indexOf(chunk.original) : -1\\n\\t\\t\\t\\t);\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tmappings.addUneditedChunk(sourceIndex, chunk, this.original, loc, this.sourcemapLocations);\\n\\t\\t\\t}\\n\\n\\t\\t\\tif (chunk.outro.length) mappings.advance(chunk.outro);\\n\\t\\t});\\n\\n\\t\\treturn {\\n\\t\\t\\tfile: options.file ? options.file.split(/[/\\\\\\\\]/).pop() : null,\\n\\t\\t\\tsources: [options.source ? getRelativePath(options.file || '', options.source) : null],\\n\\t\\t\\tsourcesContent: options.includeContent ? [this.original] : [null],\\n\\t\\t\\tnames,\\n\\t\\t\\tmappings: mappings.raw,\\n\\t\\t};\\n\\t}\\n\\n\\tgenerateMap(options) {\\n\\t\\treturn new SourceMap(this.generateDecodedMap(options));\\n\\t}\\n\\n\\t_ensureindentStr() {\\n\\t\\tif (this.indentStr === undefined) {\\n\\t\\t\\tthis.indentStr = guessIndent(this.original);\\n\\t\\t}\\n\\t}\\n\\n\\t_getRawIndentString() {\\n\\t\\tthis._ensureindentStr();\\n\\t\\treturn this.indentStr;\\n\\t}\\n\\n\\tgetIndentString() {\\n\\t\\tthis._ensureindentStr();\\n\\t\\treturn this.indentStr === null ? '\\\\t' : this.indentStr;\\n\\t}\\n\\n\\tindent(indentStr, options) {\\n\\t\\tconst pattern = /^[^\\\\r\\\\n]/gm;\\n\\n\\t\\tif (isObject(indentStr)) {\\n\\t\\t\\toptions = indentStr;\\n\\t\\t\\tindentStr = undefined;\\n\\t\\t}\\n\\n\\t\\tif (indentStr === undefined) {\\n\\t\\t\\tthis._ensureindentStr();\\n\\t\\t\\tindentStr = this.indentStr || '\\\\t';\\n\\t\\t}\\n\\n\\t\\tif (indentStr === '') return this; // noop\\n\\n\\t\\toptions = options || {};\\n\\n\\t\\t// Process exclusion ranges\\n\\t\\tconst isExcluded = {};\\n\\n\\t\\tif (options.exclude) {\\n\\t\\t\\tconst exclusions =\\n\\t\\t\\t\\ttypeof options.exclude[0] === 'number' ? [options.exclude] : options.exclude;\\n\\t\\t\\texclusions.forEach((exclusion) => {\\n\\t\\t\\t\\tfor (let i = exclusion[0]; i < exclusion[1]; i += 1) {\\n\\t\\t\\t\\t\\tisExcluded[i] = true;\\n\\t\\t\\t\\t}\\n\\t\\t\\t});\\n\\t\\t}\\n\\n\\t\\tlet shouldIndentNextCharacter = options.indentStart !== false;\\n\\t\\tconst replacer = (match) => {\\n\\t\\t\\tif (shouldIndentNextCharacter) return `${indentStr}${match}`;\\n\\t\\t\\tshouldIndentNextCharacter = true;\\n\\t\\t\\treturn match;\\n\\t\\t};\\n\\n\\t\\tthis.intro = this.intro.replace(pattern, replacer);\\n\\n\\t\\tlet charIndex = 0;\\n\\t\\tlet chunk = this.firstChunk;\\n\\n\\t\\twhile (chunk) {\\n\\t\\t\\tconst end = chunk.end;\\n\\n\\t\\t\\tif (chunk.edited) {\\n\\t\\t\\t\\tif (!isExcluded[charIndex]) {\\n\\t\\t\\t\\t\\tchunk.content = chunk.content.replace(pattern, replacer);\\n\\n\\t\\t\\t\\t\\tif (chunk.content.length) {\\n\\t\\t\\t\\t\\t\\tshouldIndentNextCharacter = chunk.content[chunk.content.length - 1] === '\\\\n';\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tcharIndex = chunk.start;\\n\\n\\t\\t\\t\\twhile (charIndex < end) {\\n\\t\\t\\t\\t\\tif (!isExcluded[charIndex]) {\\n\\t\\t\\t\\t\\t\\tconst char = this.original[charIndex];\\n\\n\\t\\t\\t\\t\\t\\tif (char === '\\\\n') {\\n\\t\\t\\t\\t\\t\\t\\tshouldIndentNextCharacter = true;\\n\\t\\t\\t\\t\\t\\t} else if (char !== '\\\\r' && shouldIndentNextCharacter) {\\n\\t\\t\\t\\t\\t\\t\\tshouldIndentNextCharacter = false;\\n\\n\\t\\t\\t\\t\\t\\t\\tif (charIndex === chunk.start) {\\n\\t\\t\\t\\t\\t\\t\\t\\tchunk.prependRight(indentStr);\\n\\t\\t\\t\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\t\\t\\tthis._splitChunk(chunk, charIndex);\\n\\t\\t\\t\\t\\t\\t\\t\\tchunk = chunk.next;\\n\\t\\t\\t\\t\\t\\t\\t\\tchunk.prependRight(indentStr);\\n\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t\\tcharIndex += 1;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\n\\t\\t\\tcharIndex = chunk.end;\\n\\t\\t\\tchunk = chunk.next;\\n\\t\\t}\\n\\n\\t\\tthis.outro = this.outro.replace(pattern, replacer);\\n\\n\\t\\treturn this;\\n\\t}\\n\\n\\tinsert() {\\n\\t\\tthrow new Error(\\n\\t\\t\\t'magicString.insert(...) is deprecated. Use prependRight(...) or appendLeft(...)'\\n\\t\\t);\\n\\t}\\n\\n\\tinsertLeft(index, content) {\\n\\t\\tif (!warned.insertLeft) {\\n\\t\\t\\tconsole.warn(\\n\\t\\t\\t\\t'magicString.insertLeft(...) is deprecated. Use magicString.appendLeft(...) instead'\\n\\t\\t\\t); // eslint-disable-line no-console\\n\\t\\t\\twarned.insertLeft = true;\\n\\t\\t}\\n\\n\\t\\treturn this.appendLeft(index, content);\\n\\t}\\n\\n\\tinsertRight(index, content) {\\n\\t\\tif (!warned.insertRight) {\\n\\t\\t\\tconsole.warn(\\n\\t\\t\\t\\t'magicString.insertRight(...) is deprecated. Use magicString.prependRight(...) instead'\\n\\t\\t\\t); // eslint-disable-line no-console\\n\\t\\t\\twarned.insertRight = true;\\n\\t\\t}\\n\\n\\t\\treturn this.prependRight(index, content);\\n\\t}\\n\\n\\tmove(start, end, index) {\\n\\t\\tif (index >= start && index <= end) throw new Error('Cannot move a selection inside itself');\\n\\n\\t\\tif (DEBUG) this.stats.time('move');\\n\\n\\t\\tthis._split(start);\\n\\t\\tthis._split(end);\\n\\t\\tthis._split(index);\\n\\n\\t\\tconst first = this.byStart[start];\\n\\t\\tconst last = this.byEnd[end];\\n\\n\\t\\tconst oldLeft = first.previous;\\n\\t\\tconst oldRight = last.next;\\n\\n\\t\\tconst newRight = this.byStart[index];\\n\\t\\tif (!newRight && last === this.lastChunk) return this;\\n\\t\\tconst newLeft = newRight ? newRight.previous : this.lastChunk;\\n\\n\\t\\tif (oldLeft) oldLeft.next = oldRight;\\n\\t\\tif (oldRight) oldRight.previous = oldLeft;\\n\\n\\t\\tif (newLeft) newLeft.next = first;\\n\\t\\tif (newRight) newRight.previous = last;\\n\\n\\t\\tif (!first.previous) this.firstChunk = last.next;\\n\\t\\tif (!last.next) {\\n\\t\\t\\tthis.lastChunk = first.previous;\\n\\t\\t\\tthis.lastChunk.next = null;\\n\\t\\t}\\n\\n\\t\\tfirst.previous = newLeft;\\n\\t\\tlast.next = newRight || null;\\n\\n\\t\\tif (!newLeft) this.firstChunk = first;\\n\\t\\tif (!newRight) this.lastChunk = last;\\n\\n\\t\\tif (DEBUG) this.stats.timeEnd('move');\\n\\t\\treturn this;\\n\\t}\\n\\n\\toverwrite(start, end, content, options) {\\n\\t\\toptions = options || {};\\n\\t\\treturn this.update(start, end, content, { ...options, overwrite: !options.contentOnly });\\n\\t}\\n\\n\\tupdate(start, end, content, options) {\\n\\t\\tif (typeof content !== 'string') throw new TypeError('replacement content must be a string');\\n\\n\\t\\twhile (start < 0) start += this.original.length;\\n\\t\\twhile (end < 0) end += this.original.length;\\n\\n\\t\\tif (end > this.original.length) throw new Error('end is out of bounds');\\n\\t\\tif (start === end)\\n\\t\\t\\tthrow new Error(\\n\\t\\t\\t\\t'Cannot overwrite a zero-length range – use appendLeft or prependRight instead'\\n\\t\\t\\t);\\n\\n\\t\\tif (DEBUG) this.stats.time('overwrite');\\n\\n\\t\\tthis._split(start);\\n\\t\\tthis._split(end);\\n\\n\\t\\tif (options === true) {\\n\\t\\t\\tif (!warned.storeName) {\\n\\t\\t\\t\\tconsole.warn(\\n\\t\\t\\t\\t\\t'The final argument to magicString.overwrite(...) should be an options object. See https://github.com/rich-harris/magic-string'\\n\\t\\t\\t\\t); // eslint-disable-line no-console\\n\\t\\t\\t\\twarned.storeName = true;\\n\\t\\t\\t}\\n\\n\\t\\t\\toptions = { storeName: true };\\n\\t\\t}\\n\\t\\tconst storeName = options !== undefined ? options.storeName : false;\\n\\t\\tconst overwrite = options !== undefined ? options.overwrite : false;\\n\\n\\t\\tif (storeName) {\\n\\t\\t\\tconst original = this.original.slice(start, end);\\n\\t\\t\\tObject.defineProperty(this.storedNames, original, {\\n\\t\\t\\t\\twritable: true,\\n\\t\\t\\t\\tvalue: true,\\n\\t\\t\\t\\tenumerable: true,\\n\\t\\t\\t});\\n\\t\\t}\\n\\n\\t\\tconst first = this.byStart[start];\\n\\t\\tconst last = this.byEnd[end];\\n\\n\\t\\tif (first) {\\n\\t\\t\\tlet chunk = first;\\n\\t\\t\\twhile (chunk !== last) {\\n\\t\\t\\t\\tif (chunk.next !== this.byStart[chunk.end]) {\\n\\t\\t\\t\\t\\tthrow new Error('Cannot overwrite across a split point');\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tchunk = chunk.next;\\n\\t\\t\\t\\tchunk.edit('', false);\\n\\t\\t\\t}\\n\\n\\t\\t\\tfirst.edit(content, storeName, !overwrite);\\n\\t\\t} else {\\n\\t\\t\\t// must be inserting at the end\\n\\t\\t\\tconst newChunk = new Chunk(start, end, '').edit(content, storeName);\\n\\n\\t\\t\\t// TODO last chunk in the array may not be the last chunk, if it's moved...\\n\\t\\t\\tlast.next = newChunk;\\n\\t\\t\\tnewChunk.previous = last;\\n\\t\\t}\\n\\n\\t\\tif (DEBUG) this.stats.timeEnd('overwrite');\\n\\t\\treturn this;\\n\\t}\\n\\n\\tprepend(content) {\\n\\t\\tif (typeof content !== 'string') throw new TypeError('outro content must be a string');\\n\\n\\t\\tthis.intro = content + this.intro;\\n\\t\\treturn this;\\n\\t}\\n\\n\\tprependLeft(index, content) {\\n\\t\\tif (typeof content !== 'string') throw new TypeError('inserted content must be a string');\\n\\n\\t\\tif (DEBUG) this.stats.time('insertRight');\\n\\n\\t\\tthis._split(index);\\n\\n\\t\\tconst chunk = this.byEnd[index];\\n\\n\\t\\tif (chunk) {\\n\\t\\t\\tchunk.prependLeft(content);\\n\\t\\t} else {\\n\\t\\t\\tthis.intro = content + this.intro;\\n\\t\\t}\\n\\n\\t\\tif (DEBUG) this.stats.timeEnd('insertRight');\\n\\t\\treturn this;\\n\\t}\\n\\n\\tprependRight(index, content) {\\n\\t\\tif (typeof content !== 'string') throw new TypeError('inserted content must be a string');\\n\\n\\t\\tif (DEBUG) this.stats.time('insertRight');\\n\\n\\t\\tthis._split(index);\\n\\n\\t\\tconst chunk = this.byStart[index];\\n\\n\\t\\tif (chunk) {\\n\\t\\t\\tchunk.prependRight(content);\\n\\t\\t} else {\\n\\t\\t\\tthis.outro = content + this.outro;\\n\\t\\t}\\n\\n\\t\\tif (DEBUG) this.stats.timeEnd('insertRight');\\n\\t\\treturn this;\\n\\t}\\n\\n\\tremove(start, end) {\\n\\t\\twhile (start < 0) start += this.original.length;\\n\\t\\twhile (end < 0) end += this.original.length;\\n\\n\\t\\tif (start === end) return this;\\n\\n\\t\\tif (start < 0 || end > this.original.length) throw new Error('Character is out of bounds');\\n\\t\\tif (start > end) throw new Error('end must be greater than start');\\n\\n\\t\\tif (DEBUG) this.stats.time('remove');\\n\\n\\t\\tthis._split(start);\\n\\t\\tthis._split(end);\\n\\n\\t\\tlet chunk = this.byStart[start];\\n\\n\\t\\twhile (chunk) {\\n\\t\\t\\tchunk.intro = '';\\n\\t\\t\\tchunk.outro = '';\\n\\t\\t\\tchunk.edit('');\\n\\n\\t\\t\\tchunk = end > chunk.end ? this.byStart[chunk.end] : null;\\n\\t\\t}\\n\\n\\t\\tif (DEBUG) this.stats.timeEnd('remove');\\n\\t\\treturn this;\\n\\t}\\n\\n\\tlastChar() {\\n\\t\\tif (this.outro.length) return this.outro[this.outro.length - 1];\\n\\t\\tlet chunk = this.lastChunk;\\n\\t\\tdo {\\n\\t\\t\\tif (chunk.outro.length) return chunk.outro[chunk.outro.length - 1];\\n\\t\\t\\tif (chunk.content.length) return chunk.content[chunk.content.length - 1];\\n\\t\\t\\tif (chunk.intro.length) return chunk.intro[chunk.intro.length - 1];\\n\\t\\t} while ((chunk = chunk.previous));\\n\\t\\tif (this.intro.length) return this.intro[this.intro.length - 1];\\n\\t\\treturn '';\\n\\t}\\n\\n\\tlastLine() {\\n\\t\\tlet lineIndex = this.outro.lastIndexOf(n);\\n\\t\\tif (lineIndex !== -1) return this.outro.substr(lineIndex + 1);\\n\\t\\tlet lineStr = this.outro;\\n\\t\\tlet chunk = this.lastChunk;\\n\\t\\tdo {\\n\\t\\t\\tif (chunk.outro.length > 0) {\\n\\t\\t\\t\\tlineIndex = chunk.outro.lastIndexOf(n);\\n\\t\\t\\t\\tif (lineIndex !== -1) return chunk.outro.substr(lineIndex + 1) + lineStr;\\n\\t\\t\\t\\tlineStr = chunk.outro + lineStr;\\n\\t\\t\\t}\\n\\n\\t\\t\\tif (chunk.content.length > 0) {\\n\\t\\t\\t\\tlineIndex = chunk.content.lastIndexOf(n);\\n\\t\\t\\t\\tif (lineIndex !== -1) return chunk.content.substr(lineIndex + 1) + lineStr;\\n\\t\\t\\t\\tlineStr = chunk.content + lineStr;\\n\\t\\t\\t}\\n\\n\\t\\t\\tif (chunk.intro.length > 0) {\\n\\t\\t\\t\\tlineIndex = chunk.intro.lastIndexOf(n);\\n\\t\\t\\t\\tif (lineIndex !== -1) return chunk.intro.substr(lineIndex + 1) + lineStr;\\n\\t\\t\\t\\tlineStr = chunk.intro + lineStr;\\n\\t\\t\\t}\\n\\t\\t} while ((chunk = chunk.previous));\\n\\t\\tlineIndex = this.intro.lastIndexOf(n);\\n\\t\\tif (lineIndex !== -1) return this.intro.substr(lineIndex + 1) + lineStr;\\n\\t\\treturn this.intro + lineStr;\\n\\t}\\n\\n\\tslice(start = 0, end = this.original.length) {\\n\\t\\twhile (start < 0) start += this.original.length;\\n\\t\\twhile (end < 0) end += this.original.length;\\n\\n\\t\\tlet result = '';\\n\\n\\t\\t// find start chunk\\n\\t\\tlet chunk = this.firstChunk;\\n\\t\\twhile (chunk && (chunk.start > start || chunk.end <= start)) {\\n\\t\\t\\t// found end chunk before start\\n\\t\\t\\tif (chunk.start < end && chunk.end >= end) {\\n\\t\\t\\t\\treturn result;\\n\\t\\t\\t}\\n\\n\\t\\t\\tchunk = chunk.next;\\n\\t\\t}\\n\\n\\t\\tif (chunk && chunk.edited && chunk.start !== start)\\n\\t\\t\\tthrow new Error(`Cannot use replaced character ${start} as slice start anchor.`);\\n\\n\\t\\tconst startChunk = chunk;\\n\\t\\twhile (chunk) {\\n\\t\\t\\tif (chunk.intro && (startChunk !== chunk || chunk.start === start)) {\\n\\t\\t\\t\\tresult += chunk.intro;\\n\\t\\t\\t}\\n\\n\\t\\t\\tconst containsEnd = chunk.start < end && chunk.end >= end;\\n\\t\\t\\tif (containsEnd && chunk.edited && chunk.end !== end)\\n\\t\\t\\t\\tthrow new Error(`Cannot use replaced character ${end} as slice end anchor.`);\\n\\n\\t\\t\\tconst sliceStart = startChunk === chunk ? start - chunk.start : 0;\\n\\t\\t\\tconst sliceEnd = containsEnd ? chunk.content.length + end - chunk.end : chunk.content.length;\\n\\n\\t\\t\\tresult += chunk.content.slice(sliceStart, sliceEnd);\\n\\n\\t\\t\\tif (chunk.outro && (!containsEnd || chunk.end === end)) {\\n\\t\\t\\t\\tresult += chunk.outro;\\n\\t\\t\\t}\\n\\n\\t\\t\\tif (containsEnd) {\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\t}\\n\\n\\t\\t\\tchunk = chunk.next;\\n\\t\\t}\\n\\n\\t\\treturn result;\\n\\t}\\n\\n\\t// TODO deprecate this? not really very useful\\n\\tsnip(start, end) {\\n\\t\\tconst clone = this.clone();\\n\\t\\tclone.remove(0, start);\\n\\t\\tclone.remove(end, clone.original.length);\\n\\n\\t\\treturn clone;\\n\\t}\\n\\n\\t_split(index) {\\n\\t\\tif (this.byStart[index] || this.byEnd[index]) return;\\n\\n\\t\\tif (DEBUG) this.stats.time('_split');\\n\\n\\t\\tlet chunk = this.lastSearchedChunk;\\n\\t\\tconst searchForward = index > chunk.end;\\n\\n\\t\\twhile (chunk) {\\n\\t\\t\\tif (chunk.contains(index)) return this._splitChunk(chunk, index);\\n\\n\\t\\t\\tchunk = searchForward ? this.byStart[chunk.end] : this.byEnd[chunk.start];\\n\\t\\t}\\n\\t}\\n\\n\\t_splitChunk(chunk, index) {\\n\\t\\tif (chunk.edited && chunk.content.length) {\\n\\t\\t\\t// zero-length edited chunks are a special case (overlapping replacements)\\n\\t\\t\\tconst loc = getLocator(this.original)(index);\\n\\t\\t\\tthrow new Error(\\n\\t\\t\\t\\t`Cannot split a chunk that has already been edited (${loc.line}:${loc.column} – \\\"${chunk.original}\\\")`\\n\\t\\t\\t);\\n\\t\\t}\\n\\n\\t\\tconst newChunk = chunk.split(index);\\n\\n\\t\\tthis.byEnd[index] = chunk;\\n\\t\\tthis.byStart[index] = newChunk;\\n\\t\\tthis.byEnd[newChunk.end] = newChunk;\\n\\n\\t\\tif (chunk === this.lastChunk) this.lastChunk = newChunk;\\n\\n\\t\\tthis.lastSearchedChunk = chunk;\\n\\t\\tif (DEBUG) this.stats.timeEnd('_split');\\n\\t\\treturn true;\\n\\t}\\n\\n\\ttoString() {\\n\\t\\tlet str = this.intro;\\n\\n\\t\\tlet chunk = this.firstChunk;\\n\\t\\twhile (chunk) {\\n\\t\\t\\tstr += chunk.toString();\\n\\t\\t\\tchunk = chunk.next;\\n\\t\\t}\\n\\n\\t\\treturn str + this.outro;\\n\\t}\\n\\n\\tisEmpty() {\\n\\t\\tlet chunk = this.firstChunk;\\n\\t\\tdo {\\n\\t\\t\\tif (\\n\\t\\t\\t\\t(chunk.intro.length && chunk.intro.trim()) ||\\n\\t\\t\\t\\t(chunk.content.length && chunk.content.trim()) ||\\n\\t\\t\\t\\t(chunk.outro.length && chunk.outro.trim())\\n\\t\\t\\t)\\n\\t\\t\\t\\treturn false;\\n\\t\\t} while ((chunk = chunk.next));\\n\\t\\treturn true;\\n\\t}\\n\\n\\tlength() {\\n\\t\\tlet chunk = this.firstChunk;\\n\\t\\tlet length = 0;\\n\\t\\tdo {\\n\\t\\t\\tlength += chunk.intro.length + chunk.content.length + chunk.outro.length;\\n\\t\\t} while ((chunk = chunk.next));\\n\\t\\treturn length;\\n\\t}\\n\\n\\ttrimLines() {\\n\\t\\treturn this.trim('[\\\\\\\\r\\\\\\\\n]');\\n\\t}\\n\\n\\ttrim(charType) {\\n\\t\\treturn this.trimStart(charType).trimEnd(charType);\\n\\t}\\n\\n\\ttrimEndAborted(charType) {\\n\\t\\tconst rx = new RegExp((charType || '\\\\\\\\s') + '+$');\\n\\n\\t\\tthis.outro = this.outro.replace(rx, '');\\n\\t\\tif (this.outro.length) return true;\\n\\n\\t\\tlet chunk = this.lastChunk;\\n\\n\\t\\tdo {\\n\\t\\t\\tconst end = chunk.end;\\n\\t\\t\\tconst aborted = chunk.trimEnd(rx);\\n\\n\\t\\t\\t// if chunk was trimmed, we have a new lastChunk\\n\\t\\t\\tif (chunk.end !== end) {\\n\\t\\t\\t\\tif (this.lastChunk === chunk) {\\n\\t\\t\\t\\t\\tthis.lastChunk = chunk.next;\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\tthis.byEnd[chunk.end] = chunk;\\n\\t\\t\\t\\tthis.byStart[chunk.next.start] = chunk.next;\\n\\t\\t\\t\\tthis.byEnd[chunk.next.end] = chunk.next;\\n\\t\\t\\t}\\n\\n\\t\\t\\tif (aborted) return true;\\n\\t\\t\\tchunk = chunk.previous;\\n\\t\\t} while (chunk);\\n\\n\\t\\treturn false;\\n\\t}\\n\\n\\ttrimEnd(charType) {\\n\\t\\tthis.trimEndAborted(charType);\\n\\t\\treturn this;\\n\\t}\\n\\ttrimStartAborted(charType) {\\n\\t\\tconst rx = new RegExp('^' + (charType || '\\\\\\\\s') + '+');\\n\\n\\t\\tthis.intro = this.intro.replace(rx, '');\\n\\t\\tif (this.intro.length) return true;\\n\\n\\t\\tlet chunk = this.firstChunk;\\n\\n\\t\\tdo {\\n\\t\\t\\tconst end = chunk.end;\\n\\t\\t\\tconst aborted = chunk.trimStart(rx);\\n\\n\\t\\t\\tif (chunk.end !== end) {\\n\\t\\t\\t\\t// special case...\\n\\t\\t\\t\\tif (chunk === this.lastChunk) this.lastChunk = chunk.next;\\n\\n\\t\\t\\t\\tthis.byEnd[chunk.end] = chunk;\\n\\t\\t\\t\\tthis.byStart[chunk.next.start] = chunk.next;\\n\\t\\t\\t\\tthis.byEnd[chunk.next.end] = chunk.next;\\n\\t\\t\\t}\\n\\n\\t\\t\\tif (aborted) return true;\\n\\t\\t\\tchunk = chunk.next;\\n\\t\\t} while (chunk);\\n\\n\\t\\treturn false;\\n\\t}\\n\\n\\ttrimStart(charType) {\\n\\t\\tthis.trimStartAborted(charType);\\n\\t\\treturn this;\\n\\t}\\n\\n\\thasChanged() {\\n\\t\\treturn this.original !== this.toString();\\n\\t}\\n\\n\\t_replaceRegexp(searchValue, replacement) {\\n\\t\\tfunction getReplacement(match, str) {\\n\\t\\t\\tif (typeof replacement === 'string') {\\n\\t\\t\\t\\treturn replacement.replace(/\\\\$(\\\\$|&|\\\\d+)/g, (_, i) => {\\n\\t\\t\\t\\t\\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace#specifying_a_string_as_a_parameter\\n\\t\\t\\t\\t\\tif (i === '$') return '$';\\n\\t\\t\\t\\t\\tif (i === '&') return match[0];\\n\\t\\t\\t\\t\\tconst num = +i;\\n\\t\\t\\t\\t\\tif (num < match.length) return match[+i];\\n\\t\\t\\t\\t\\treturn `$${i}`;\\n\\t\\t\\t\\t});\\n\\t\\t\\t} else {\\n\\t\\t\\t\\treturn replacement(...match, match.index, str, match.groups);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tfunction matchAll(re, str) {\\n\\t\\t\\tlet match;\\n\\t\\t\\tconst matches = [];\\n\\t\\t\\twhile ((match = re.exec(str))) {\\n\\t\\t\\t\\tmatches.push(match);\\n\\t\\t\\t}\\n\\t\\t\\treturn matches;\\n\\t\\t}\\n\\t\\tif (searchValue.global) {\\n\\t\\t\\tconst matches = matchAll(searchValue, this.original);\\n\\t\\t\\tmatches.forEach((match) => {\\n\\t\\t\\t\\tif (match.index != null)\\n\\t\\t\\t\\t\\tthis.overwrite(\\n\\t\\t\\t\\t\\t\\tmatch.index,\\n\\t\\t\\t\\t\\t\\tmatch.index + match[0].length,\\n\\t\\t\\t\\t\\t\\tgetReplacement(match, this.original)\\n\\t\\t\\t\\t\\t);\\n\\t\\t\\t});\\n\\t\\t} else {\\n\\t\\t\\tconst match = this.original.match(searchValue);\\n\\t\\t\\tif (match && match.index != null)\\n\\t\\t\\t\\tthis.overwrite(\\n\\t\\t\\t\\t\\tmatch.index,\\n\\t\\t\\t\\t\\tmatch.index + match[0].length,\\n\\t\\t\\t\\t\\tgetReplacement(match, this.original)\\n\\t\\t\\t\\t);\\n\\t\\t}\\n\\t\\treturn this;\\n\\t}\\n\\n\\t_replaceString(string, replacement) {\\n\\t\\tconst { original } = this;\\n\\t\\tconst index = original.indexOf(string);\\n\\n\\t\\tif (index !== -1) {\\n\\t\\t\\tthis.overwrite(index, index + string.length, replacement);\\n\\t\\t}\\n\\n\\t\\treturn this;\\n\\t}\\n\\n\\treplace(searchValue, replacement) {\\n\\t\\tif (typeof searchValue === 'string') {\\n\\t\\t\\treturn this._replaceString(searchValue, replacement);\\n\\t\\t}\\n\\n\\t\\treturn this._replaceRegexp(searchValue, replacement);\\n\\t}\\n\\n\\t_replaceAllString(string, replacement) {\\n\\t\\tconst { original } = this;\\n\\t\\tconst stringLength = string.length;\\n\\t\\tfor (\\n\\t\\t\\tlet index = original.indexOf(string);\\n\\t\\t\\tindex !== -1;\\n\\t\\t\\tindex = original.indexOf(string, index + stringLength)\\n\\t\\t) {\\n\\t\\t\\tthis.overwrite(index, index + stringLength, replacement);\\n\\t\\t}\\n\\n\\t\\treturn this;\\n\\t}\\n\\n\\treplaceAll(searchValue, replacement) {\\n\\t\\tif (typeof searchValue === 'string') {\\n\\t\\t\\treturn this._replaceAllString(searchValue, replacement);\\n\\t\\t}\\n\\n\\t\\tif (!searchValue.global) {\\n\\t\\t\\tthrow new TypeError(\\n\\t\\t\\t\\t'MagicString.prototype.replaceAll called with a non-global RegExp argument'\\n\\t\\t\\t);\\n\\t\\t}\\n\\n\\t\\treturn this._replaceRegexp(searchValue, replacement);\\n\\t}\\n}\\n\",\"import MagicString from './MagicString.js';\\nimport SourceMap from './SourceMap.js';\\nimport getRelativePath from './utils/getRelativePath.js';\\nimport isObject from './utils/isObject.js';\\nimport getLocator from './utils/getLocator.js';\\nimport Mappings from './utils/Mappings.js';\\n\\nconst hasOwnProp = Object.prototype.hasOwnProperty;\\n\\nexport default class Bundle {\\n\\tconstructor(options = {}) {\\n\\t\\tthis.intro = options.intro || '';\\n\\t\\tthis.separator = options.separator !== undefined ? options.separator : '\\\\n';\\n\\t\\tthis.sources = [];\\n\\t\\tthis.uniqueSources = [];\\n\\t\\tthis.uniqueSourceIndexByFilename = {};\\n\\t}\\n\\n\\taddSource(source) {\\n\\t\\tif (source instanceof MagicString) {\\n\\t\\t\\treturn this.addSource({\\n\\t\\t\\t\\tcontent: source,\\n\\t\\t\\t\\tfilename: source.filename,\\n\\t\\t\\t\\tseparator: this.separator,\\n\\t\\t\\t});\\n\\t\\t}\\n\\n\\t\\tif (!isObject(source) || !source.content) {\\n\\t\\t\\tthrow new Error(\\n\\t\\t\\t\\t'bundle.addSource() takes an object with a `content` property, which should be an instance of MagicString, and an optional `filename`'\\n\\t\\t\\t);\\n\\t\\t}\\n\\n\\t\\t['filename', 'indentExclusionRanges', 'separator'].forEach((option) => {\\n\\t\\t\\tif (!hasOwnProp.call(source, option)) source[option] = source.content[option];\\n\\t\\t});\\n\\n\\t\\tif (source.separator === undefined) {\\n\\t\\t\\t// TODO there's a bunch of this sort of thing, needs cleaning up\\n\\t\\t\\tsource.separator = this.separator;\\n\\t\\t}\\n\\n\\t\\tif (source.filename) {\\n\\t\\t\\tif (!hasOwnProp.call(this.uniqueSourceIndexByFilename, source.filename)) {\\n\\t\\t\\t\\tthis.uniqueSourceIndexByFilename[source.filename] = this.uniqueSources.length;\\n\\t\\t\\t\\tthis.uniqueSources.push({ filename: source.filename, content: source.content.original });\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tconst uniqueSource = this.uniqueSources[this.uniqueSourceIndexByFilename[source.filename]];\\n\\t\\t\\t\\tif (source.content.original !== uniqueSource.content) {\\n\\t\\t\\t\\t\\tthrow new Error(`Illegal source: same filename (${source.filename}), different contents`);\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\tthis.sources.push(source);\\n\\t\\treturn this;\\n\\t}\\n\\n\\tappend(str, options) {\\n\\t\\tthis.addSource({\\n\\t\\t\\tcontent: new MagicString(str),\\n\\t\\t\\tseparator: (options && options.separator) || '',\\n\\t\\t});\\n\\n\\t\\treturn this;\\n\\t}\\n\\n\\tclone() {\\n\\t\\tconst bundle = new Bundle({\\n\\t\\t\\tintro: this.intro,\\n\\t\\t\\tseparator: this.separator,\\n\\t\\t});\\n\\n\\t\\tthis.sources.forEach((source) => {\\n\\t\\t\\tbundle.addSource({\\n\\t\\t\\t\\tfilename: source.filename,\\n\\t\\t\\t\\tcontent: source.content.clone(),\\n\\t\\t\\t\\tseparator: source.separator,\\n\\t\\t\\t});\\n\\t\\t});\\n\\n\\t\\treturn bundle;\\n\\t}\\n\\n\\tgenerateDecodedMap(options = {}) {\\n\\t\\tconst names = [];\\n\\t\\tthis.sources.forEach((source) => {\\n\\t\\t\\tObject.keys(source.content.storedNames).forEach((name) => {\\n\\t\\t\\t\\tif (!~names.indexOf(name)) names.push(name);\\n\\t\\t\\t});\\n\\t\\t});\\n\\n\\t\\tconst mappings = new Mappings(options.hires);\\n\\n\\t\\tif (this.intro) {\\n\\t\\t\\tmappings.advance(this.intro);\\n\\t\\t}\\n\\n\\t\\tthis.sources.forEach((source, i) => {\\n\\t\\t\\tif (i > 0) {\\n\\t\\t\\t\\tmappings.advance(this.separator);\\n\\t\\t\\t}\\n\\n\\t\\t\\tconst sourceIndex = source.filename ? this.uniqueSourceIndexByFilename[source.filename] : -1;\\n\\t\\t\\tconst magicString = source.content;\\n\\t\\t\\tconst locate = getLocator(magicString.original);\\n\\n\\t\\t\\tif (magicString.intro) {\\n\\t\\t\\t\\tmappings.advance(magicString.intro);\\n\\t\\t\\t}\\n\\n\\t\\t\\tmagicString.firstChunk.eachNext((chunk) => {\\n\\t\\t\\t\\tconst loc = locate(chunk.start);\\n\\n\\t\\t\\t\\tif (chunk.intro.length) mappings.advance(chunk.intro);\\n\\n\\t\\t\\t\\tif (source.filename) {\\n\\t\\t\\t\\t\\tif (chunk.edited) {\\n\\t\\t\\t\\t\\t\\tmappings.addEdit(\\n\\t\\t\\t\\t\\t\\t\\tsourceIndex,\\n\\t\\t\\t\\t\\t\\t\\tchunk.content,\\n\\t\\t\\t\\t\\t\\t\\tloc,\\n\\t\\t\\t\\t\\t\\t\\tchunk.storeName ? names.indexOf(chunk.original) : -1\\n\\t\\t\\t\\t\\t\\t);\\n\\t\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\tmappings.addUneditedChunk(\\n\\t\\t\\t\\t\\t\\t\\tsourceIndex,\\n\\t\\t\\t\\t\\t\\t\\tchunk,\\n\\t\\t\\t\\t\\t\\t\\tmagicString.original,\\n\\t\\t\\t\\t\\t\\t\\tloc,\\n\\t\\t\\t\\t\\t\\t\\tmagicString.sourcemapLocations\\n\\t\\t\\t\\t\\t\\t);\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\tmappings.advance(chunk.content);\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\tif (chunk.outro.length) mappings.advance(chunk.outro);\\n\\t\\t\\t});\\n\\n\\t\\t\\tif (magicString.outro) {\\n\\t\\t\\t\\tmappings.advance(magicString.outro);\\n\\t\\t\\t}\\n\\t\\t});\\n\\n\\t\\treturn {\\n\\t\\t\\tfile: options.file ? options.file.split(/[/\\\\\\\\]/).pop() : null,\\n\\t\\t\\tsources: this.uniqueSources.map((source) => {\\n\\t\\t\\t\\treturn options.file ? getRelativePath(options.file, source.filename) : source.filename;\\n\\t\\t\\t}),\\n\\t\\t\\tsourcesContent: this.uniqueSources.map((source) => {\\n\\t\\t\\t\\treturn options.includeContent ? source.content : null;\\n\\t\\t\\t}),\\n\\t\\t\\tnames,\\n\\t\\t\\tmappings: mappings.raw,\\n\\t\\t};\\n\\t}\\n\\n\\tgenerateMap(options) {\\n\\t\\treturn new SourceMap(this.generateDecodedMap(options));\\n\\t}\\n\\n\\tgetIndentString() {\\n\\t\\tconst indentStringCounts = {};\\n\\n\\t\\tthis.sources.forEach((source) => {\\n\\t\\t\\tconst indentStr = source.content._getRawIndentString();\\n\\n\\t\\t\\tif (indentStr === null) return;\\n\\n\\t\\t\\tif (!indentStringCounts[indentStr]) indentStringCounts[indentStr] = 0;\\n\\t\\t\\tindentStringCounts[indentStr] += 1;\\n\\t\\t});\\n\\n\\t\\treturn (\\n\\t\\t\\tObject.keys(indentStringCounts).sort((a, b) => {\\n\\t\\t\\t\\treturn indentStringCounts[a] - indentStringCounts[b];\\n\\t\\t\\t})[0] || '\\\\t'\\n\\t\\t);\\n\\t}\\n\\n\\tindent(indentStr) {\\n\\t\\tif (!arguments.length) {\\n\\t\\t\\tindentStr = this.getIndentString();\\n\\t\\t}\\n\\n\\t\\tif (indentStr === '') return this; // noop\\n\\n\\t\\tlet trailingNewline = !this.intro || this.intro.slice(-1) === '\\\\n';\\n\\n\\t\\tthis.sources.forEach((source, i) => {\\n\\t\\t\\tconst separator = source.separator !== undefined ? source.separator : this.separator;\\n\\t\\t\\tconst indentStart = trailingNewline || (i > 0 && /\\\\r?\\\\n$/.test(separator));\\n\\n\\t\\t\\tsource.content.indent(indentStr, {\\n\\t\\t\\t\\texclude: source.indentExclusionRanges,\\n\\t\\t\\t\\tindentStart, //: trailingNewline || /\\\\r?\\\\n$/.test( separator )  //true///\\\\r?\\\\n/.test( separator )\\n\\t\\t\\t});\\n\\n\\t\\t\\ttrailingNewline = source.content.lastChar() === '\\\\n';\\n\\t\\t});\\n\\n\\t\\tif (this.intro) {\\n\\t\\t\\tthis.intro =\\n\\t\\t\\t\\tindentStr +\\n\\t\\t\\t\\tthis.intro.replace(/^[^\\\\n]/gm, (match, index) => {\\n\\t\\t\\t\\t\\treturn index > 0 ? indentStr + match : match;\\n\\t\\t\\t\\t});\\n\\t\\t}\\n\\n\\t\\treturn this;\\n\\t}\\n\\n\\tprepend(str) {\\n\\t\\tthis.intro = str + this.intro;\\n\\t\\treturn this;\\n\\t}\\n\\n\\ttoString() {\\n\\t\\tconst body = this.sources\\n\\t\\t\\t.map((source, i) => {\\n\\t\\t\\t\\tconst separator = source.separator !== undefined ? source.separator : this.separator;\\n\\t\\t\\t\\tconst str = (i > 0 ? separator : '') + source.content.toString();\\n\\n\\t\\t\\t\\treturn str;\\n\\t\\t\\t})\\n\\t\\t\\t.join('');\\n\\n\\t\\treturn this.intro + body;\\n\\t}\\n\\n\\tisEmpty() {\\n\\t\\tif (this.intro.length && this.intro.trim()) return false;\\n\\t\\tif (this.sources.some((source) => !source.content.isEmpty())) return false;\\n\\t\\treturn true;\\n\\t}\\n\\n\\tlength() {\\n\\t\\treturn this.sources.reduce(\\n\\t\\t\\t(length, source) => length + source.content.length(),\\n\\t\\t\\tthis.intro.length\\n\\t\\t);\\n\\t}\\n\\n\\ttrimLines() {\\n\\t\\treturn this.trim('[\\\\\\\\r\\\\\\\\n]');\\n\\t}\\n\\n\\ttrim(charType) {\\n\\t\\treturn this.trimStart(charType).trimEnd(charType);\\n\\t}\\n\\n\\ttrimStart(charType) {\\n\\t\\tconst rx = new RegExp('^' + (charType || '\\\\\\\\s') + '+');\\n\\t\\tthis.intro = this.intro.replace(rx, '');\\n\\n\\t\\tif (!this.intro) {\\n\\t\\t\\tlet source;\\n\\t\\t\\tlet i = 0;\\n\\n\\t\\t\\tdo {\\n\\t\\t\\t\\tsource = this.sources[i++];\\n\\t\\t\\t\\tif (!source) {\\n\\t\\t\\t\\t\\tbreak;\\n\\t\\t\\t\\t}\\n\\t\\t\\t} while (!source.content.trimStartAborted(charType));\\n\\t\\t}\\n\\n\\t\\treturn this;\\n\\t}\\n\\n\\ttrimEnd(charType) {\\n\\t\\tconst rx = new RegExp((charType || '\\\\\\\\s') + '+$');\\n\\n\\t\\tlet source;\\n\\t\\tlet i = this.sources.length - 1;\\n\\n\\t\\tdo {\\n\\t\\t\\tsource = this.sources[i--];\\n\\t\\t\\tif (!source) {\\n\\t\\t\\t\\tthis.intro = this.intro.replace(rx, '');\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\t}\\n\\t\\t} while (!source.content.trimEndAborted(charType));\\n\\n\\t\\treturn this;\\n\\t}\\n}\\n\",\"import MagicString from './MagicString.js';\\nimport Bundle from './Bundle.js';\\nimport SourceMap from './SourceMap.js';\\n\\nMagicString.Bundle = Bundle;\\nMagicString.SourceMap = SourceMap;\\nMagicString.default = MagicString; // work around TypeScript bug https://github.com/Rich-Harris/magic-string/pull/121\\n\\nexport default MagicString;\\n\"],\"names\":[\"encode\"],\"mappings\":\";;;;AAAe,MAAM,MAAM,CAAC;AAC5B,CAAC,WAAW,CAAC,GAAG,EAAE;AAClB,EAAE,IAAI,CAAC,IAAI,GAAG,GAAG,YAAY,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC;AAC5D,EAAE;AACF;AACA,CAAC,GAAG,CAAC,CAAC,EAAE;AACR,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;AACrC,EAAE;AACF;AACA,CAAC,GAAG,CAAC,CAAC,EAAE;AACR,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;AACjD,EAAE;AACF;;ACZe,MAAM,KAAK,CAAC;AAC3B,CAAC,WAAW,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE;AAClC,EAAE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACrB,EAAE,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;AACjB,EAAE,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;AAC1B;AACA,EAAE,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;AAClB,EAAE,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;AAClB;AACA,EAAE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;AACzB,EAAE,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AACzB,EAAE,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;AACtB;AACA,EAMS;AACT,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AACxB,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACpB,GAAG;AACH,EAAE;AACF;AACA,CAAC,UAAU,CAAC,OAAO,EAAE;AACrB,EAAE,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC;AACxB,EAAE;AACF;AACA,CAAC,WAAW,CAAC,OAAO,EAAE;AACtB,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC;AACpC,EAAE;AACF;AACA,CAAC,KAAK,GAAG;AACT,EAAE,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC/D;AACA,EAAE,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AAC3B,EAAE,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AAC3B,EAAE,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;AAC/B,EAAE,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;AACnC,EAAE,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;AAC7B;AACA,EAAE,OAAO,KAAK,CAAC;AACf,EAAE;AACF;AACA,CAAC,QAAQ,CAAC,KAAK,EAAE;AACjB,EAAE,OAAO,IAAI,CAAC,KAAK,GAAG,KAAK,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC;AAChD,EAAE;AACF;AACA,CAAC,QAAQ,CAAC,EAAE,EAAE;AACd,EAAE,IAAI,KAAK,GAAG,IAAI,CAAC;AACnB,EAAE,OAAO,KAAK,EAAE;AAChB,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;AACb,GAAG,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC;AACtB,GAAG;AACH,EAAE;AACF;AACA,CAAC,YAAY,CAAC,EAAE,EAAE;AAClB,EAAE,IAAI,KAAK,GAAG,IAAI,CAAC;AACnB,EAAE,OAAO,KAAK,EAAE;AAChB,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;AACb,GAAG,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC;AAC1B,GAAG;AACH,EAAE;AACF;AACA,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE;AACvC,EAAE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;AACzB,EAAE,IAAI,CAAC,WAAW,EAAE;AACpB,GAAG,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;AACnB,GAAG,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;AACnB,GAAG;AACH,EAAE,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;AAC7B;AACA,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;AACrB;AACA,EAAE,OAAO,IAAI,CAAC;AACd,EAAE;AACF;AACA,CAAC,WAAW,CAAC,OAAO,EAAE;AACtB,EAAE,IAAI,CAAC,KAAK,GAAG,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC;AACpC,EAAE;AACF;AACA,CAAC,YAAY,CAAC,OAAO,EAAE;AACvB,EAAE,IAAI,CAAC,KAAK,GAAG,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC;AACpC,EAAE;AACF;AACA,CAAC,KAAK,CAAC,KAAK,EAAE;AACd,EAAE,MAAM,UAAU,GAAG,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AACxC;AACA,EAAE,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;AAC5D,EAAE,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;AACxD;AACA,EAAE,IAAI,CAAC,QAAQ,GAAG,cAAc,CAAC;AACjC;AACA,EAAE,MAAM,QAAQ,GAAG,IAAI,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;AAC7D,EAAE,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AAC9B,EAAE,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;AAClB;AACA,EAAE,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC;AACnB;AACA,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE;AACnB;AACA,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;AAC5B,GAAG,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;AACrB,GAAG,MAAM;AACT,GAAG,IAAI,CAAC,OAAO,GAAG,cAAc,CAAC;AACjC,GAAG;AACH;AACA,EAAE,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;AAC5B,EAAE,IAAI,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;AACvD,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC;AAC3B,EAAE,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC;AACvB;AACA,EAAE,OAAO,QAAQ,CAAC;AAClB,EAAE;AACF;AACA,CAAC,QAAQ,GAAG;AACZ,EAAE,OAAO,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC;AAChD,EAAE;AACF;AACA,CAAC,OAAO,CAAC,EAAE,EAAE;AACb,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAC1C,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,IAAI,CAAC;AACrC;AACA,EAAE,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAC/C;AACA,EAAE,IAAI,OAAO,CAAC,MAAM,EAAE;AACtB,GAAG,IAAI,OAAO,KAAK,IAAI,CAAC,OAAO,EAAE;AACjC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;AACtE,IAAI;AACJ,GAAG,OAAO,IAAI,CAAC;AACf,GAAG,MAAM;AACT,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;AAClC;AACA,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAC3C,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,IAAI,CAAC;AACtC,GAAG;AACH,EAAE;AACF;AACA,CAAC,SAAS,CAAC,EAAE,EAAE;AACf,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAC1C,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,IAAI,CAAC;AACrC;AACA,EAAE,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAC/C;AACA,EAAE,IAAI,OAAO,CAAC,MAAM,EAAE;AACtB,GAAG,IAAI,OAAO,KAAK,IAAI,CAAC,OAAO,EAAE;AACjC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;AAC1C,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;AACnC,IAAI;AACJ,GAAG,OAAO,IAAI,CAAC;AACf,GAAG,MAAM;AACT,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;AAClC;AACA,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAC3C,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,IAAI,CAAC;AACtC,GAAG;AACH,EAAE;AACF;;AC5JA,SAAS,OAAO,IAAI;AACpB,CAAC,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE;AACzE,EAAE,OAAO,CAAC,GAAG,KAAK,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACjE,EAAE,MAAM,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE;AAC1C,EAAE,OAAO,CAAC,GAAG,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAC/D,EAAE,MAAM;AACR,EAAE,OAAO,MAAM;AACf,GAAG,MAAM,IAAI,KAAK,CAAC,yEAAyE,CAAC,CAAC;AAC9F,GAAG,CAAC;AACJ,EAAE;AACF,CAAC;AACD;AACA,MAAM,IAAI,iBAAiB,OAAO,EAAE,CAAC;AACrC;AACe,MAAM,SAAS,CAAC;AAC/B,CAAC,WAAW,CAAC,UAAU,EAAE;AACzB,EAAE,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;AACnB,EAAE,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC;AAC9B,EAAE,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC;AACpC,EAAE,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,cAAc,CAAC;AAClD,EAAE,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC;AAChC,EAAE,IAAI,CAAC,QAAQ,GAAGA,qBAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AAC9C,EAAE;AACF;AACA,CAAC,QAAQ,GAAG;AACZ,EAAE,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAC9B,EAAE;AACF;AACA,CAAC,KAAK,GAAG;AACT,EAAE,OAAO,6CAA6C,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC/E,EAAE;AACF;;ACjCe,SAAS,WAAW,CAAC,IAAI,EAAE;AAC1C,CAAC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAChC;AACA,CAAC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC1D,CAAC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5D;AACA,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;AACjD,EAAE,OAAO,IAAI,CAAC;AACd,EAAE;AACF;AACA;AACA;AACA;AACA,CAAC,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE;AACrC,EAAE,OAAO,IAAI,CAAC;AACd,EAAE;AACF;AACA;AACA,CAAC,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,OAAO,KAAK;AAClD,EAAE,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AAClD,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AACvC,EAAE,EAAE,QAAQ,CAAC,CAAC;AACd;AACA,CAAC,OAAO,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACrC;;ACxBe,SAAS,eAAe,CAAC,IAAI,EAAE,EAAE,EAAE;AAClD,CAAC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AACvC,CAAC,MAAM,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AACnC;AACA,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC;AACjB;AACA,CAAC,OAAO,SAAS,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE;AACrC,EAAE,SAAS,CAAC,KAAK,EAAE,CAAC;AACpB,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC;AAClB,EAAE;AACF;AACA,CAAC,IAAI,SAAS,CAAC,MAAM,EAAE;AACvB,EAAE,IAAI,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC;AAC3B,EAAE,OAAO,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;AAClC,EAAE;AACF;AACA,CAAC,OAAO,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC5C;;ACjBA,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC;AAC3C;AACe,SAAS,QAAQ,CAAC,KAAK,EAAE;AACxC,CAAC,OAAO,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,iBAAiB,CAAC;AACnD;;ACJe,SAAS,UAAU,CAAC,MAAM,EAAE;AAC3C,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC1C,CAAC,MAAM,WAAW,GAAG,EAAE,CAAC;AACxB;AACA,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACzD,EAAE,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACxB,EAAE,GAAG,IAAI,aAAa,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;AACrC,EAAE;AACF;AACA,CAAC,OAAO,SAAS,MAAM,CAAC,KAAK,EAAE;AAC/B,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;AACZ,EAAE,IAAI,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC;AAC7B,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE;AAChB,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC1B,GAAG,IAAI,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE;AAC/B,IAAI,CAAC,GAAG,CAAC,CAAC;AACV,IAAI,MAAM;AACV,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACd,IAAI;AACJ,GAAG;AACH,EAAE,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;AACrB,EAAE,MAAM,MAAM,GAAG,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;AAC3C,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AAC1B,EAAE,CAAC;AACH;;ACxBe,MAAM,QAAQ,CAAC;AAC9B,CAAC,WAAW,CAAC,KAAK,EAAE;AACpB,EAAE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACrB,EAAE,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC;AAC7B,EAAE,IAAI,CAAC,mBAAmB,GAAG,CAAC,CAAC;AAC/B,EAAE,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;AAChB,EAAE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,CAAC;AAC3D,EAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;AACtB,EAAE;AACF;AACA,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE;AAC/C,EAAE,IAAI,OAAO,CAAC,MAAM,EAAE;AACtB,GAAG,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,mBAAmB,EAAE,WAAW,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;AACjF,GAAG,IAAI,SAAS,IAAI,CAAC,EAAE;AACvB,IAAI,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAC5B,IAAI;AACJ,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAClC,GAAG,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE;AAC3B,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACvC,GAAG;AACH;AACA,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AACxB,EAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;AACtB,EAAE;AACF;AACA,CAAC,gBAAgB,CAAC,WAAW,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,kBAAkB,EAAE;AACzE,EAAE,IAAI,iBAAiB,GAAG,KAAK,CAAC,KAAK,CAAC;AACtC,EAAE,IAAI,KAAK,GAAG,IAAI,CAAC;AACnB;AACA,EAAE,OAAO,iBAAiB,GAAG,KAAK,CAAC,GAAG,EAAE;AACxC,GAAG,IAAI,IAAI,CAAC,KAAK,IAAI,KAAK,IAAI,kBAAkB,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE;AACzE,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,mBAAmB,EAAE,WAAW,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;AACzF,IAAI;AACJ;AACA,GAAG,IAAI,QAAQ,CAAC,iBAAiB,CAAC,KAAK,IAAI,EAAE;AAC7C,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC;AAClB,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;AACnB,IAAI,IAAI,CAAC,iBAAiB,IAAI,CAAC,CAAC;AAChC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;AAC7D,IAAI,IAAI,CAAC,mBAAmB,GAAG,CAAC,CAAC;AACjC,IAAI,KAAK,GAAG,IAAI,CAAC;AACjB,IAAI,MAAM;AACV,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC;AACpB,IAAI,IAAI,CAAC,mBAAmB,IAAI,CAAC,CAAC;AAClC,IAAI,KAAK,GAAG,KAAK,CAAC;AAClB,IAAI;AACJ;AACA,GAAG,iBAAiB,IAAI,CAAC,CAAC;AAC1B,GAAG;AACH;AACA,EAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;AACtB,EAAE;AACF;AACA,CAAC,OAAO,CAAC,GAAG,EAAE;AACd,EAAE,IAAI,CAAC,GAAG,EAAE,OAAO;AACnB;AACA,EAAE,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAChC;AACA,EAAE,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AACxB,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAC9C,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;AAC7B,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;AAC7D,IAAI;AACJ,GAAG,IAAI,CAAC,mBAAmB,GAAG,CAAC,CAAC;AAChC,GAAG;AACH;AACA,EAAE,IAAI,CAAC,mBAAmB,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;AAC7D,EAAE;AACF;;AC1DA,MAAM,CAAC,GAAG,IAAI,CAAC;AACf;AACA,MAAM,MAAM,GAAG;AACf,CAAC,UAAU,EAAE,KAAK;AAClB,CAAC,WAAW,EAAE,KAAK;AACnB,CAAC,SAAS,EAAE,KAAK;AACjB,CAAC,CAAC;AACF;AACe,MAAM,WAAW,CAAC;AACjC,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,GAAG,EAAE,EAAE;AACnC,EAAE,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACpD;AACA,EAAE,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE;AAChC,GAAG,QAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE;AAC9C,GAAG,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;AACvC,GAAG,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;AACvC,GAAG,UAAU,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE;AAC/C,GAAG,SAAS,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE;AAC9C,GAAG,iBAAiB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE;AACtD,GAAG,OAAO,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;AACzC,GAAG,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;AACvC,GAAG,QAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,QAAQ,EAAE;AACxD,GAAG,qBAAqB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,qBAAqB,EAAE;AAClF,GAAG,kBAAkB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,MAAM,EAAE,EAAE;AAC9D,GAAG,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;AAC7C,GAAG,SAAS,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE;AAClD,GAAG,CAAC,CAAC;AAKL;AACA,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;AAC1B,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC;AACpC,EAAE;AACF;AACA,CAAC,oBAAoB,CAAC,IAAI,EAAE;AAC5B,EAAE,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACpC,EAAE;AACF;AACA,CAAC,MAAM,CAAC,OAAO,EAAE;AACjB,EAAE,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,MAAM,IAAI,SAAS,CAAC,gCAAgC,CAAC,CAAC;AACzF;AACA,EAAE,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC;AACxB,EAAE,OAAO,IAAI,CAAC;AACd,EAAE;AACF;AACA,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE;AAC5B,EAAE,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,MAAM,IAAI,SAAS,CAAC,mCAAmC,CAAC,CAAC;AAG5F;AACA,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACrB;AACA,EAAE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAClC;AACA,EAAE,IAAI,KAAK,EAAE;AACb,GAAG,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AAC7B,GAAG,MAAM;AACT,GAAG,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC;AACzB,GAAG;AAGH,EAAE,OAAO,IAAI,CAAC;AACd,EAAE;AACF;AACA,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE;AAC7B,EAAE,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,MAAM,IAAI,SAAS,CAAC,mCAAmC,CAAC,CAAC;AAG5F;AACA,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACrB;AACA,EAAE,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACpC;AACA,EAAE,IAAI,KAAK,EAAE;AACb,GAAG,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AAC9B,GAAG,MAAM;AACT,GAAG,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC;AACzB,GAAG;AAGH,EAAE,OAAO,IAAI,CAAC;AACd,EAAE;AACF;AACA,CAAC,KAAK,GAAG;AACT,EAAE,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC7E;AACA,EAAE,IAAI,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC;AACtC,EAAE,IAAI,WAAW,IAAI,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,iBAAiB,GAAG,aAAa,CAAC,KAAK,EAAE,CAAC,CAAC;AAC3F;AACA,EAAE,OAAO,aAAa,EAAE;AACxB,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC;AACnD,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC;AAC/C;AACA,GAAG,MAAM,iBAAiB,GAAG,aAAa,CAAC,IAAI,CAAC;AAChD,GAAG,MAAM,eAAe,GAAG,iBAAiB,IAAI,iBAAiB,CAAC,KAAK,EAAE,CAAC;AAC1E;AACA,GAAG,IAAI,eAAe,EAAE;AACxB,IAAI,WAAW,CAAC,IAAI,GAAG,eAAe,CAAC;AACvC,IAAI,eAAe,CAAC,QAAQ,GAAG,WAAW,CAAC;AAC3C;AACA,IAAI,WAAW,GAAG,eAAe,CAAC;AAClC,IAAI;AACJ;AACA,GAAG,aAAa,GAAG,iBAAiB,CAAC;AACrC,GAAG;AACH;AACA,EAAE,MAAM,CAAC,SAAS,GAAG,WAAW,CAAC;AACjC;AACA,EAAE,IAAI,IAAI,CAAC,qBAAqB,EAAE;AAClC,GAAG,MAAM,CAAC,qBAAqB,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,CAAC;AACrE,GAAG;AACH;AACA,EAAE,MAAM,CAAC,kBAAkB,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;AAClE;AACA,EAAE,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AAC5B,EAAE,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AAC5B;AACA,EAAE,OAAO,MAAM,CAAC;AAChB,EAAE;AACF;AACA,CAAC,kBAAkB,CAAC,OAAO,EAAE;AAC7B,EAAE,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;AAC1B;AACA,EAAE,MAAM,WAAW,GAAG,CAAC,CAAC;AACxB,EAAE,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAC9C,EAAE,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC/C;AACA,EAAE,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC3C;AACA,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE;AAClB,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAChC,GAAG;AACH;AACA,EAAE,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,KAAK,KAAK;AACtC,GAAG,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACnC;AACA,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACzD;AACA,GAAG,IAAI,KAAK,CAAC,MAAM,EAAE;AACrB,IAAI,QAAQ,CAAC,OAAO;AACpB,KAAK,WAAW;AAChB,KAAK,KAAK,CAAC,OAAO;AAClB,KAAK,GAAG;AACR,KAAK,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AACzD,KAAK,CAAC;AACN,IAAI,MAAM;AACV,IAAI,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;AAC/F,IAAI;AACJ;AACA,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACzD,GAAG,CAAC,CAAC;AACL;AACA,EAAE,OAAO;AACT,GAAG,IAAI,EAAE,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,IAAI;AAChE,GAAG,OAAO,EAAE,CAAC,OAAO,CAAC,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;AACzF,GAAG,cAAc,EAAE,OAAO,CAAC,cAAc,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;AACpE,GAAG,KAAK;AACR,GAAG,QAAQ,EAAE,QAAQ,CAAC,GAAG;AACzB,GAAG,CAAC;AACJ,EAAE;AACF;AACA,CAAC,WAAW,CAAC,OAAO,EAAE;AACtB,EAAE,OAAO,IAAI,SAAS,CAAC,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC;AACzD,EAAE;AACF;AACA,CAAC,gBAAgB,GAAG;AACpB,EAAE,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE;AACpC,GAAG,IAAI,CAAC,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC/C,GAAG;AACH,EAAE;AACF;AACA,CAAC,mBAAmB,GAAG;AACvB,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAC1B,EAAE,OAAO,IAAI,CAAC,SAAS,CAAC;AACxB,EAAE;AACF;AACA,CAAC,eAAe,GAAG;AACnB,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAC1B,EAAE,OAAO,IAAI,CAAC,SAAS,KAAK,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;AACzD,EAAE;AACF;AACA,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,EAAE;AAC5B,EAAE,MAAM,OAAO,GAAG,YAAY,CAAC;AAC/B;AACA,EAAE,IAAI,QAAQ,CAAC,SAAS,CAAC,EAAE;AAC3B,GAAG,OAAO,GAAG,SAAS,CAAC;AACvB,GAAG,SAAS,GAAG,SAAS,CAAC;AACzB,GAAG;AACH;AACA,EAAE,IAAI,SAAS,KAAK,SAAS,EAAE;AAC/B,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAC3B,GAAG,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC;AACtC,GAAG;AACH;AACA,EAAE,IAAI,SAAS,KAAK,EAAE,EAAE,OAAO,IAAI,CAAC;AACpC;AACA,EAAE,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;AAC1B;AACA;AACA,EAAE,MAAM,UAAU,GAAG,EAAE,CAAC;AACxB;AACA,EAAE,IAAI,OAAO,CAAC,OAAO,EAAE;AACvB,GAAG,MAAM,UAAU;AACnB,IAAI,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,QAAQ,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;AACjF,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,KAAK;AACrC,IAAI,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;AACzD,KAAK,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;AAC1B,KAAK;AACL,IAAI,CAAC,CAAC;AACN,GAAG;AACH;AACA,EAAE,IAAI,yBAAyB,GAAG,OAAO,CAAC,WAAW,KAAK,KAAK,CAAC;AAChE,EAAE,MAAM,QAAQ,GAAG,CAAC,KAAK,KAAK;AAC9B,GAAG,IAAI,yBAAyB,EAAE,OAAO,CAAC,EAAE,SAAS,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;AAChE,GAAG,yBAAyB,GAAG,IAAI,CAAC;AACpC,GAAG,OAAO,KAAK,CAAC;AAChB,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AACrD;AACA,EAAE,IAAI,SAAS,GAAG,CAAC,CAAC;AACpB,EAAE,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC;AAC9B;AACA,EAAE,OAAO,KAAK,EAAE;AAChB,GAAG,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;AACzB;AACA,GAAG,IAAI,KAAK,CAAC,MAAM,EAAE;AACrB,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE;AAChC,KAAK,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AAC9D;AACA,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE;AAC/B,MAAM,yBAAyB,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC;AACnF,MAAM;AACN,KAAK;AACL,IAAI,MAAM;AACV,IAAI,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC;AAC5B;AACA,IAAI,OAAO,SAAS,GAAG,GAAG,EAAE;AAC5B,KAAK,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE;AACjC,MAAM,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AAC5C;AACA,MAAM,IAAI,IAAI,KAAK,IAAI,EAAE;AACzB,OAAO,yBAAyB,GAAG,IAAI,CAAC;AACxC,OAAO,MAAM,IAAI,IAAI,KAAK,IAAI,IAAI,yBAAyB,EAAE;AAC7D,OAAO,yBAAyB,GAAG,KAAK,CAAC;AACzC;AACA,OAAO,IAAI,SAAS,KAAK,KAAK,CAAC,KAAK,EAAE;AACtC,QAAQ,KAAK,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;AACtC,QAAQ,MAAM;AACd,QAAQ,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AAC3C,QAAQ,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC;AAC3B,QAAQ,KAAK,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;AACtC,QAAQ;AACR,OAAO;AACP,MAAM;AACN;AACA,KAAK,SAAS,IAAI,CAAC,CAAC;AACpB,KAAK;AACL,IAAI;AACJ;AACA,GAAG,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC;AACzB,GAAG,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC;AACtB,GAAG;AACH;AACA,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AACrD;AACA,EAAE,OAAO,IAAI,CAAC;AACd,EAAE;AACF;AACA,CAAC,MAAM,GAAG;AACV,EAAE,MAAM,IAAI,KAAK;AACjB,GAAG,iFAAiF;AACpF,GAAG,CAAC;AACJ,EAAE;AACF;AACA,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE;AAC5B,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;AAC1B,GAAG,OAAO,CAAC,IAAI;AACf,IAAI,oFAAoF;AACxF,IAAI,CAAC;AACL,GAAG,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC;AAC5B,GAAG;AACH;AACA,EAAE,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AACzC,EAAE;AACF;AACA,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE;AAC7B,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;AAC3B,GAAG,OAAO,CAAC,IAAI;AACf,IAAI,uFAAuF;AAC3F,IAAI,CAAC;AACL,GAAG,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC;AAC7B,GAAG;AACH;AACA,EAAE,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AAC3C,EAAE;AACF;AACA,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE;AACzB,EAAE,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,GAAG,EAAE,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;AAG/F;AACA,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACrB,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AACnB,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACrB;AACA,EAAE,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACpC,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC/B;AACA,EAAE,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC;AACjC,EAAE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;AAC7B;AACA,EAAE,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACvC,EAAE,IAAI,CAAC,QAAQ,IAAI,IAAI,KAAK,IAAI,CAAC,SAAS,EAAE,OAAO,IAAI,CAAC;AACxD,EAAE,MAAM,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC;AAChE;AACA,EAAE,IAAI,OAAO,EAAE,OAAO,CAAC,IAAI,GAAG,QAAQ,CAAC;AACvC,EAAE,IAAI,QAAQ,EAAE,QAAQ,CAAC,QAAQ,GAAG,OAAO,CAAC;AAC5C;AACA,EAAE,IAAI,OAAO,EAAE,OAAO,CAAC,IAAI,GAAG,KAAK,CAAC;AACpC,EAAE,IAAI,QAAQ,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC;AACzC;AACA,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC;AACnD,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;AAClB,GAAG,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAC;AACnC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC;AAC9B,GAAG;AACH;AACA,EAAE,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC;AAC3B,EAAE,IAAI,CAAC,IAAI,GAAG,QAAQ,IAAI,IAAI,CAAC;AAC/B;AACA,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;AACxC,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;AAGvC,EAAE,OAAO,IAAI,CAAC;AACd,EAAE;AACF;AACA,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE;AACzC,EAAE,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;AAC1B,EAAE,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,SAAS,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;AAC3F,EAAE;AACF;AACA,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE;AACtC,EAAE,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,MAAM,IAAI,SAAS,CAAC,sCAAsC,CAAC,CAAC;AAC/F;AACA,EAAE,OAAO,KAAK,GAAG,CAAC,EAAE,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;AAClD,EAAE,OAAO,GAAG,GAAG,CAAC,EAAE,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC9C;AACA,EAAE,IAAI,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;AAC1E,EAAE,IAAI,KAAK,KAAK,GAAG;AACnB,GAAG,MAAM,IAAI,KAAK;AAClB,IAAI,+EAA+E;AACnF,IAAI,CAAC;AAGL;AACA,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACrB,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AACnB;AACA,EAAE,IAAI,OAAO,KAAK,IAAI,EAAE;AACxB,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;AAC1B,IAAI,OAAO,CAAC,IAAI;AAChB,KAAK,+HAA+H;AACpI,KAAK,CAAC;AACN,IAAI,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC;AAC5B,IAAI;AACJ;AACA,GAAG,OAAO,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AACjC,GAAG;AACH,EAAE,MAAM,SAAS,GAAG,OAAO,KAAK,SAAS,GAAG,OAAO,CAAC,SAAS,GAAG,KAAK,CAAC;AACtE,EAAE,MAAM,SAAS,GAAG,OAAO,KAAK,SAAS,GAAG,OAAO,CAAC,SAAS,GAAG,KAAK,CAAC;AACtE;AACA,EAAE,IAAI,SAAS,EAAE;AACjB,GAAG,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACpD,GAAG,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE;AACrD,IAAI,QAAQ,EAAE,IAAI;AAClB,IAAI,KAAK,EAAE,IAAI;AACf,IAAI,UAAU,EAAE,IAAI;AACpB,IAAI,CAAC,CAAC;AACN,GAAG;AACH;AACA,EAAE,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACpC,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC/B;AACA,EAAE,IAAI,KAAK,EAAE;AACb,GAAG,IAAI,KAAK,GAAG,KAAK,CAAC;AACrB,GAAG,OAAO,KAAK,KAAK,IAAI,EAAE;AAC1B,IAAI,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;AAChD,KAAK,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;AAC9D,KAAK;AACL,IAAI,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC;AACvB,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;AAC1B,IAAI;AACJ;AACA,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC,SAAS,CAAC,CAAC;AAC9C,GAAG,MAAM;AACT;AACA,GAAG,MAAM,QAAQ,GAAG,IAAI,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;AACvE;AACA;AACA,GAAG,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC;AACxB,GAAG,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC;AAC5B,GAAG;AAGH,EAAE,OAAO,IAAI,CAAC;AACd,EAAE;AACF;AACA,CAAC,OAAO,CAAC,OAAO,EAAE;AAClB,EAAE,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,MAAM,IAAI,SAAS,CAAC,gCAAgC,CAAC,CAAC;AACzF;AACA,EAAE,IAAI,CAAC,KAAK,GAAG,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC;AACpC,EAAE,OAAO,IAAI,CAAC;AACd,EAAE;AACF;AACA,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE;AAC7B,EAAE,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,MAAM,IAAI,SAAS,CAAC,mCAAmC,CAAC,CAAC;AAG5F;AACA,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACrB;AACA,EAAE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAClC;AACA,EAAE,IAAI,KAAK,EAAE;AACb,GAAG,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AAC9B,GAAG,MAAM;AACT,GAAG,IAAI,CAAC,KAAK,GAAG,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC;AACrC,GAAG;AAGH,EAAE,OAAO,IAAI,CAAC;AACd,EAAE;AACF;AACA,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE;AAC9B,EAAE,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,MAAM,IAAI,SAAS,CAAC,mCAAmC,CAAC,CAAC;AAG5F;AACA,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACrB;AACA,EAAE,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACpC;AACA,EAAE,IAAI,KAAK,EAAE;AACb,GAAG,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;AAC/B,GAAG,MAAM;AACT,GAAG,IAAI,CAAC,KAAK,GAAG,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC;AACrC,GAAG;AAGH,EAAE,OAAO,IAAI,CAAC;AACd,EAAE;AACF;AACA,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE;AACpB,EAAE,OAAO,KAAK,GAAG,CAAC,EAAE,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;AAClD,EAAE,OAAO,GAAG,GAAG,CAAC,EAAE,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC9C;AACA,EAAE,IAAI,KAAK,KAAK,GAAG,EAAE,OAAO,IAAI,CAAC;AACjC;AACA,EAAE,IAAI,KAAK,GAAG,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;AAC7F,EAAE,IAAI,KAAK,GAAG,GAAG,EAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;AAGrE;AACA,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACrB,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AACnB;AACA,EAAE,IAAI,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAClC;AACA,EAAE,OAAO,KAAK,EAAE;AAChB,GAAG,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC;AACpB,GAAG,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC;AACpB,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAClB;AACA,GAAG,KAAK,GAAG,GAAG,GAAG,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;AAC5D,GAAG;AAGH,EAAE,OAAO,IAAI,CAAC;AACd,EAAE;AACF;AACA,CAAC,QAAQ,GAAG;AACZ,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAClE,EAAE,IAAI,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;AAC7B,EAAE,GAAG;AACL,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACtE,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC5E,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACtE,GAAG,SAAS,KAAK,GAAG,KAAK,CAAC,QAAQ,GAAG;AACrC,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAClE,EAAE,OAAO,EAAE,CAAC;AACZ,EAAE;AACF;AACA,CAAC,QAAQ,GAAG;AACZ,EAAE,IAAI,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AAC5C,EAAE,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;AAChE,EAAE,IAAI,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC;AAC3B,EAAE,IAAI,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;AAC7B,EAAE,GAAG;AACL,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AAC/B,IAAI,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AAC3C,IAAI,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC;AAC7E,IAAI,OAAO,GAAG,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC;AACpC,IAAI;AACJ;AACA,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;AACjC,IAAI,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AAC7C,IAAI,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC;AAC/E,IAAI,OAAO,GAAG,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;AACtC,IAAI;AACJ;AACA,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AAC/B,IAAI,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AAC3C,IAAI,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC;AAC7E,IAAI,OAAO,GAAG,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC;AACpC,IAAI;AACJ,GAAG,SAAS,KAAK,GAAG,KAAK,CAAC,QAAQ,GAAG;AACrC,EAAE,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AACxC,EAAE,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC;AAC1E,EAAE,OAAO,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC;AAC9B,EAAE;AACF;AACA,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;AAC9C,EAAE,OAAO,KAAK,GAAG,CAAC,EAAE,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;AAClD,EAAE,OAAO,GAAG,GAAG,CAAC,EAAE,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC9C;AACA,EAAE,IAAI,MAAM,GAAG,EAAE,CAAC;AAClB;AACA;AACA,EAAE,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC;AAC9B,EAAE,OAAO,KAAK,KAAK,KAAK,CAAC,KAAK,GAAG,KAAK,IAAI,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,EAAE;AAC/D;AACA,GAAG,IAAI,KAAK,CAAC,KAAK,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,IAAI,GAAG,EAAE;AAC9C,IAAI,OAAO,MAAM,CAAC;AAClB,IAAI;AACJ;AACA,GAAG,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC;AACtB,GAAG;AACH;AACA,EAAE,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,KAAK,KAAK,KAAK;AACpD,GAAG,MAAM,IAAI,KAAK,CAAC,CAAC,8BAA8B,EAAE,KAAK,CAAC,uBAAuB,CAAC,CAAC,CAAC;AACpF;AACA,EAAE,MAAM,UAAU,GAAG,KAAK,CAAC;AAC3B,EAAE,OAAO,KAAK,EAAE;AAChB,GAAG,IAAI,KAAK,CAAC,KAAK,KAAK,UAAU,KAAK,KAAK,IAAI,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,EAAE;AACvE,IAAI,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC;AAC1B,IAAI;AACJ;AACA,GAAG,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,IAAI,GAAG,CAAC;AAC7D,GAAG,IAAI,WAAW,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG;AACvD,IAAI,MAAM,IAAI,KAAK,CAAC,CAAC,8BAA8B,EAAE,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC;AACjF;AACA,GAAG,MAAM,UAAU,GAAG,UAAU,KAAK,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;AACrE,GAAG,MAAM,QAAQ,GAAG,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;AAChG;AACA,GAAG,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;AACvD;AACA,GAAG,IAAI,KAAK,CAAC,KAAK,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE;AAC3D,IAAI,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC;AAC1B,IAAI;AACJ;AACA,GAAG,IAAI,WAAW,EAAE;AACpB,IAAI,MAAM;AACV,IAAI;AACJ;AACA,GAAG,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC;AACtB,GAAG;AACH;AACA,EAAE,OAAO,MAAM,CAAC;AAChB,EAAE;AACF;AACA;AACA,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE;AAClB,EAAE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;AAC7B,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AACzB,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC3C;AACA,EAAE,OAAO,KAAK,CAAC;AACf,EAAE;AACF;AACA,CAAC,MAAM,CAAC,KAAK,EAAE;AACf,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,OAAO;AAGvD;AACA,EAAE,IAAI,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC;AACrC,EAAE,MAAM,aAAa,GAAG,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC;AAC1C;AACA,EAAE,OAAO,KAAK,EAAE;AAChB,GAAG,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AACpE;AACA,GAAG,KAAK,GAAG,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC7E,GAAG;AACH,EAAE;AACF;AACA,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE;AAC3B,EAAE,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE;AAC5C;AACA,GAAG,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC;AAChD,GAAG,MAAM,IAAI,KAAK;AAClB,IAAI,CAAC,mDAAmD,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;AACzG,IAAI,CAAC;AACL,GAAG;AACH;AACA,EAAE,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACtC;AACA,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;AAC5B,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC;AACjC,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC;AACtC;AACA,EAAE,IAAI,KAAK,KAAK,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;AAC1D;AACA,EAAE,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;AAEjC,EAAE,OAAO,IAAI,CAAC;AACd,EAAE;AACF;AACA,CAAC,QAAQ,GAAG;AACZ,EAAE,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC;AACvB;AACA,EAAE,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC;AAC9B,EAAE,OAAO,KAAK,EAAE;AAChB,GAAG,GAAG,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;AAC3B,GAAG,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC;AACtB,GAAG;AACH;AACA,EAAE,OAAO,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC;AAC1B,EAAE;AACF;AACA,CAAC,OAAO,GAAG;AACX,EAAE,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC;AAC9B,EAAE,GAAG;AACL,GAAG;AACH,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE;AAC7C,KAAK,KAAK,CAAC,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;AAClD,KAAK,KAAK,CAAC,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;AAC9C;AACA,IAAI,OAAO,KAAK,CAAC;AACjB,GAAG,SAAS,KAAK,GAAG,KAAK,CAAC,IAAI,GAAG;AACjC,EAAE,OAAO,IAAI,CAAC;AACd,EAAE;AACF;AACA,CAAC,MAAM,GAAG;AACV,EAAE,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC;AAC9B,EAAE,IAAI,MAAM,GAAG,CAAC,CAAC;AACjB,EAAE,GAAG;AACL,GAAG,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;AAC5E,GAAG,SAAS,KAAK,GAAG,KAAK,CAAC,IAAI,GAAG;AACjC,EAAE,OAAO,MAAM,CAAC;AAChB,EAAE;AACF;AACA,CAAC,SAAS,GAAG;AACb,EAAE,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAC/B,EAAE;AACF;AACA,CAAC,IAAI,CAAC,QAAQ,EAAE;AAChB,EAAE,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AACpD,EAAE;AACF;AACA,CAAC,cAAc,CAAC,QAAQ,EAAE;AAC1B,EAAE,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,CAAC,QAAQ,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC;AACpD;AACA,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAC1C,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,IAAI,CAAC;AACrC;AACA,EAAE,IAAI,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;AAC7B;AACA,EAAE,GAAG;AACL,GAAG,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;AACzB,GAAG,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AACrC;AACA;AACA,GAAG,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE;AAC1B,IAAI,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,EAAE;AAClC,KAAK,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;AACjC,KAAK;AACL;AACA,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAClC,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC;AAChD,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC;AAC5C,IAAI;AACJ;AACA,GAAG,IAAI,OAAO,EAAE,OAAO,IAAI,CAAC;AAC5B,GAAG,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC;AAC1B,GAAG,QAAQ,KAAK,EAAE;AAClB;AACA,EAAE,OAAO,KAAK,CAAC;AACf,EAAE;AACF;AACA,CAAC,OAAO,CAAC,QAAQ,EAAE;AACnB,EAAE,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;AAChC,EAAE,OAAO,IAAI,CAAC;AACd,EAAE;AACF,CAAC,gBAAgB,CAAC,QAAQ,EAAE;AAC5B,EAAE,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,GAAG,IAAI,QAAQ,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC;AACzD;AACA,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAC1C,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,IAAI,CAAC;AACrC;AACA,EAAE,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC;AAC9B;AACA,EAAE,GAAG;AACL,GAAG,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;AACzB,GAAG,MAAM,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;AACvC;AACA,GAAG,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE;AAC1B;AACA,IAAI,IAAI,KAAK,KAAK,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;AAC9D;AACA,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAClC,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC;AAChD,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC;AAC5C,IAAI;AACJ;AACA,GAAG,IAAI,OAAO,EAAE,OAAO,IAAI,CAAC;AAC5B,GAAG,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC;AACtB,GAAG,QAAQ,KAAK,EAAE;AAClB;AACA,EAAE,OAAO,KAAK,CAAC;AACf,EAAE;AACF;AACA,CAAC,SAAS,CAAC,QAAQ,EAAE;AACrB,EAAE,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;AAClC,EAAE,OAAO,IAAI,CAAC;AACd,EAAE;AACF;AACA,CAAC,UAAU,GAAG;AACd,EAAE,OAAO,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC;AAC3C,EAAE;AACF;AACA,CAAC,cAAc,CAAC,WAAW,EAAE,WAAW,EAAE;AAC1C,EAAE,SAAS,cAAc,CAAC,KAAK,EAAE,GAAG,EAAE;AACtC,GAAG,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE;AACxC,IAAI,OAAO,WAAW,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK;AAC1D;AACA,KAAK,IAAI,CAAC,KAAK,GAAG,EAAE,OAAO,GAAG,CAAC;AAC/B,KAAK,IAAI,CAAC,KAAK,GAAG,EAAE,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;AACpC,KAAK,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC;AACpB,KAAK,IAAI,GAAG,GAAG,KAAK,CAAC,MAAM,EAAE,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9C,KAAK,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACpB,KAAK,CAAC,CAAC;AACP,IAAI,MAAM;AACV,IAAI,OAAO,WAAW,CAAC,GAAG,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;AACjE,IAAI;AACJ,GAAG;AACH,EAAE,SAAS,QAAQ,CAAC,EAAE,EAAE,GAAG,EAAE;AAC7B,GAAG,IAAI,KAAK,CAAC;AACb,GAAG,MAAM,OAAO,GAAG,EAAE,CAAC;AACtB,GAAG,QAAQ,KAAK,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG;AAClC,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACxB,IAAI;AACJ,GAAG,OAAO,OAAO,CAAC;AAClB,GAAG;AACH,EAAE,IAAI,WAAW,CAAC,MAAM,EAAE;AAC1B,GAAG,MAAM,OAAO,GAAG,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;AACxD,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,KAAK;AAC9B,IAAI,IAAI,KAAK,CAAC,KAAK,IAAI,IAAI;AAC3B,KAAK,IAAI,CAAC,SAAS;AACnB,MAAM,KAAK,CAAC,KAAK;AACjB,MAAM,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM;AACnC,MAAM,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC;AAC1C,MAAM,CAAC;AACP,IAAI,CAAC,CAAC;AACN,GAAG,MAAM;AACT,GAAG,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;AAClD,GAAG,IAAI,KAAK,IAAI,KAAK,CAAC,KAAK,IAAI,IAAI;AACnC,IAAI,IAAI,CAAC,SAAS;AAClB,KAAK,KAAK,CAAC,KAAK;AAChB,KAAK,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM;AAClC,KAAK,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC;AACzC,KAAK,CAAC;AACN,GAAG;AACH,EAAE,OAAO,IAAI,CAAC;AACd,EAAE;AACF;AACA,CAAC,cAAc,CAAC,MAAM,EAAE,WAAW,EAAE;AACrC,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;AAC5B,EAAE,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AACzC;AACA,EAAE,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;AACpB,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AAC7D,GAAG;AACH;AACA,EAAE,OAAO,IAAI,CAAC;AACd,EAAE;AACF;AACA,CAAC,OAAO,CAAC,WAAW,EAAE,WAAW,EAAE;AACnC,EAAE,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE;AACvC,GAAG,OAAO,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;AACxD,GAAG;AACH;AACA,EAAE,OAAO,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;AACvD,EAAE;AACF;AACA,CAAC,iBAAiB,CAAC,MAAM,EAAE,WAAW,EAAE;AACxC,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;AAC5B,EAAE,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC;AACrC,EAAE;AACF,GAAG,IAAI,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC;AACvC,GAAG,KAAK,KAAK,CAAC,CAAC;AACf,GAAG,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,GAAG,YAAY,CAAC;AACzD,IAAI;AACJ,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,GAAG,YAAY,EAAE,WAAW,CAAC,CAAC;AAC5D,GAAG;AACH;AACA,EAAE,OAAO,IAAI,CAAC;AACd,EAAE;AACF;AACA,CAAC,UAAU,CAAC,WAAW,EAAE,WAAW,EAAE;AACtC,EAAE,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE;AACvC,GAAG,OAAO,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;AAC3D,GAAG;AACH;AACA,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;AAC3B,GAAG,MAAM,IAAI,SAAS;AACtB,IAAI,2EAA2E;AAC/E,IAAI,CAAC;AACL,GAAG;AACH;AACA,EAAE,OAAO,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;AACvD,EAAE;AACF;;AC3zBA,MAAM,UAAU,GAAG,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC;AACnD;AACe,MAAM,MAAM,CAAC;AAC5B,CAAC,WAAW,CAAC,OAAO,GAAG,EAAE,EAAE;AAC3B,EAAE,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;AACnC,EAAE,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,KAAK,SAAS,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;AAC9E,EAAE,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;AACpB,EAAE,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;AAC1B,EAAE,IAAI,CAAC,2BAA2B,GAAG,EAAE,CAAC;AACxC,EAAE;AACF;AACA,CAAC,SAAS,CAAC,MAAM,EAAE;AACnB,EAAE,IAAI,MAAM,YAAY,WAAW,EAAE;AACrC,GAAG,OAAO,IAAI,CAAC,SAAS,CAAC;AACzB,IAAI,OAAO,EAAE,MAAM;AACnB,IAAI,QAAQ,EAAE,MAAM,CAAC,QAAQ;AAC7B,IAAI,SAAS,EAAE,IAAI,CAAC,SAAS;AAC7B,IAAI,CAAC,CAAC;AACN,GAAG;AACH;AACA,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;AAC5C,GAAG,MAAM,IAAI,KAAK;AAClB,IAAI,sIAAsI;AAC1I,IAAI,CAAC;AACL,GAAG;AACH;AACA,EAAE,CAAC,UAAU,EAAE,uBAAuB,EAAE,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK;AACzE,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AACjF,GAAG,CAAC,CAAC;AACL;AACA,EAAE,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,EAAE;AACtC;AACA,GAAG,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;AACrC,GAAG;AACH;AACA,EAAE,IAAI,MAAM,CAAC,QAAQ,EAAE;AACvB,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,2BAA2B,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE;AAC5E,IAAI,IAAI,CAAC,2BAA2B,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;AAClF,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC7F,IAAI,MAAM;AACV,IAAI,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,2BAA2B,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC/F,IAAI,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,KAAK,YAAY,CAAC,OAAO,EAAE;AAC1D,KAAK,MAAM,IAAI,KAAK,CAAC,CAAC,+BAA+B,EAAE,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC,CAAC;AAC/F,KAAK;AACL,IAAI;AACJ,GAAG;AACH;AACA,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC5B,EAAE,OAAO,IAAI,CAAC;AACd,EAAE;AACF;AACA,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE;AACtB,EAAE,IAAI,CAAC,SAAS,CAAC;AACjB,GAAG,OAAO,EAAE,IAAI,WAAW,CAAC,GAAG,CAAC;AAChC,GAAG,SAAS,EAAE,CAAC,OAAO,IAAI,OAAO,CAAC,SAAS,KAAK,EAAE;AAClD,GAAG,CAAC,CAAC;AACL;AACA,EAAE,OAAO,IAAI,CAAC;AACd,EAAE;AACF;AACA,CAAC,KAAK,GAAG;AACT,EAAE,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC;AAC5B,GAAG,KAAK,EAAE,IAAI,CAAC,KAAK;AACpB,GAAG,SAAS,EAAE,IAAI,CAAC,SAAS;AAC5B,GAAG,CAAC,CAAC;AACL;AACA,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK;AACnC,GAAG,MAAM,CAAC,SAAS,CAAC;AACpB,IAAI,QAAQ,EAAE,MAAM,CAAC,QAAQ;AAC7B,IAAI,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE;AACnC,IAAI,SAAS,EAAE,MAAM,CAAC,SAAS;AAC/B,IAAI,CAAC,CAAC;AACN,GAAG,CAAC,CAAC;AACL;AACA,EAAE,OAAO,MAAM,CAAC;AAChB,EAAE;AACF;AACA,CAAC,kBAAkB,CAAC,OAAO,GAAG,EAAE,EAAE;AAClC,EAAE,MAAM,KAAK,GAAG,EAAE,CAAC;AACnB,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK;AACnC,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK;AAC7D,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAChD,IAAI,CAAC,CAAC;AACN,GAAG,CAAC,CAAC;AACL;AACA,EAAE,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC/C;AACA,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE;AAClB,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAChC,GAAG;AACH;AACA,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK;AACtC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE;AACd,IAAI,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AACrC,IAAI;AACJ;AACA,GAAG,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,2BAA2B,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;AAChG,GAAG,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC;AACtC,GAAG,MAAM,MAAM,GAAG,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;AACnD;AACA,GAAG,IAAI,WAAW,CAAC,KAAK,EAAE;AAC1B,IAAI,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AACxC,IAAI;AACJ;AACA,GAAG,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,KAAK,KAAK;AAC9C,IAAI,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACpC;AACA,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC1D;AACA,IAAI,IAAI,MAAM,CAAC,QAAQ,EAAE;AACzB,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE;AACvB,MAAM,QAAQ,CAAC,OAAO;AACtB,OAAO,WAAW;AAClB,OAAO,KAAK,CAAC,OAAO;AACpB,OAAO,GAAG;AACV,OAAO,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AAC3D,OAAO,CAAC;AACR,MAAM,MAAM;AACZ,MAAM,QAAQ,CAAC,gBAAgB;AAC/B,OAAO,WAAW;AAClB,OAAO,KAAK;AACZ,OAAO,WAAW,CAAC,QAAQ;AAC3B,OAAO,GAAG;AACV,OAAO,WAAW,CAAC,kBAAkB;AACrC,OAAO,CAAC;AACR,MAAM;AACN,KAAK,MAAM;AACX,KAAK,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AACrC,KAAK;AACL;AACA,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC1D,IAAI,CAAC,CAAC;AACN;AACA,GAAG,IAAI,WAAW,CAAC,KAAK,EAAE;AAC1B,IAAI,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AACxC,IAAI;AACJ,GAAG,CAAC,CAAC;AACL;AACA,EAAE,OAAO;AACT,GAAG,IAAI,EAAE,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,IAAI;AAChE,GAAG,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK;AAC/C,IAAI,OAAO,OAAO,CAAC,IAAI,GAAG,eAAe,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC3F,IAAI,CAAC;AACL,GAAG,cAAc,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK;AACtD,IAAI,OAAO,OAAO,CAAC,cAAc,GAAG,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;AAC1D,IAAI,CAAC;AACL,GAAG,KAAK;AACR,GAAG,QAAQ,EAAE,QAAQ,CAAC,GAAG;AACzB,GAAG,CAAC;AACJ,EAAE;AACF;AACA,CAAC,WAAW,CAAC,OAAO,EAAE;AACtB,EAAE,OAAO,IAAI,SAAS,CAAC,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC;AACzD,EAAE;AACF;AACA,CAAC,eAAe,GAAG;AACnB,EAAE,MAAM,kBAAkB,GAAG,EAAE,CAAC;AAChC;AACA,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK;AACnC,GAAG,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC;AAC1D;AACA,GAAG,IAAI,SAAS,KAAK,IAAI,EAAE,OAAO;AAClC;AACA,GAAG,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,EAAE,kBAAkB,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AACzE,GAAG,kBAAkB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AACtC,GAAG,CAAC,CAAC;AACL;AACA,EAAE;AACF,GAAG,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK;AAClD,IAAI,OAAO,kBAAkB,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC;AACzD,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI;AAChB,IAAI;AACJ,EAAE;AACF;AACA,CAAC,MAAM,CAAC,SAAS,EAAE;AACnB,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;AACzB,GAAG,SAAS,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;AACtC,GAAG;AACH;AACA,EAAE,IAAI,SAAS,KAAK,EAAE,EAAE,OAAO,IAAI,CAAC;AACpC;AACA,EAAE,IAAI,eAAe,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;AACrE;AACA,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK;AACtC,GAAG,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,KAAK,SAAS,GAAG,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;AACxF,GAAG,MAAM,WAAW,GAAG,eAAe,KAAK,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;AAC9E;AACA,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE;AACpC,IAAI,OAAO,EAAE,MAAM,CAAC,qBAAqB;AACzC,IAAI,WAAW;AACf,IAAI,CAAC,CAAC;AACN;AACA,GAAG,eAAe,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC;AACxD,GAAG,CAAC,CAAC;AACL;AACA,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE;AAClB,GAAG,IAAI,CAAC,KAAK;AACb,IAAI,SAAS;AACb,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK;AACrD,KAAK,OAAO,KAAK,GAAG,CAAC,GAAG,SAAS,GAAG,KAAK,GAAG,KAAK,CAAC;AAClD,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA,EAAE,OAAO,IAAI,CAAC;AACd,EAAE;AACF;AACA,CAAC,OAAO,CAAC,GAAG,EAAE;AACd,EAAE,IAAI,CAAC,KAAK,GAAG,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC;AAChC,EAAE,OAAO,IAAI,CAAC;AACd,EAAE;AACF;AACA,CAAC,QAAQ,GAAG;AACZ,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO;AAC3B,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK;AACvB,IAAI,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,KAAK,SAAS,GAAG,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;AACzF,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,SAAS,GAAG,EAAE,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;AACrE;AACA,IAAI,OAAO,GAAG,CAAC;AACf,IAAI,CAAC;AACL,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC;AACb;AACA,EAAE,OAAO,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AAC3B,EAAE;AACF;AACA,CAAC,OAAO,GAAG;AACX,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,OAAO,KAAK,CAAC;AAC3D,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,EAAE,OAAO,KAAK,CAAC;AAC7E,EAAE,OAAO,IAAI,CAAC;AACd,EAAE;AACF;AACA,CAAC,MAAM,GAAG;AACV,EAAE,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM;AAC5B,GAAG,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE;AACvD,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM;AACpB,GAAG,CAAC;AACJ,EAAE;AACF;AACA,CAAC,SAAS,GAAG;AACb,EAAE,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAC/B,EAAE;AACF;AACA,CAAC,IAAI,CAAC,QAAQ,EAAE;AAChB,EAAE,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AACpD,EAAE;AACF;AACA,CAAC,SAAS,CAAC,QAAQ,EAAE;AACrB,EAAE,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,GAAG,IAAI,QAAQ,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC;AACzD,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAC1C;AACA,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AACnB,GAAG,IAAI,MAAM,CAAC;AACd,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;AACb;AACA,GAAG,GAAG;AACN,IAAI,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;AAC/B,IAAI,IAAI,CAAC,MAAM,EAAE;AACjB,KAAK,MAAM;AACX,KAAK;AACL,IAAI,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE;AACxD,GAAG;AACH;AACA,EAAE,OAAO,IAAI,CAAC;AACd,EAAE;AACF;AACA,CAAC,OAAO,CAAC,QAAQ,EAAE;AACnB,EAAE,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,CAAC,QAAQ,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC;AACpD;AACA,EAAE,IAAI,MAAM,CAAC;AACb,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;AAClC;AACA,EAAE,GAAG;AACL,GAAG,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;AAC9B,GAAG,IAAI,CAAC,MAAM,EAAE;AAChB,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAC5C,IAAI,MAAM;AACV,IAAI;AACJ,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE;AACrD;AACA,EAAE,OAAO,IAAI,CAAC;AACd,EAAE;AACF;;AC3RA,WAAW,CAAC,MAAM,GAAG,MAAM,CAAC;AAC5B,WAAW,CAAC,SAAS,GAAG,SAAS,CAAC;AAClC,WAAW,CAAC,OAAO,GAAG,WAAW,CAAC;;;;\"}/dist/magic-string.umd.js.map\u0000\u0001~{\"version\":3,\"file\":\"magic-string.umd.js\",\"sources\":[\"../src/BitSet.js\",\"../src/Chunk.js\",\"../node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.mjs\",\"../src/SourceMap.js\",\"../src/utils/guessIndent.js\",\"../src/utils/getRelativePath.js\",\"../src/utils/isObject.js\",\"../src/utils/getLocator.js\",\"../src/utils/Mappings.js\",\"../src/MagicString.js\",\"../src/Bundle.js\",\"../src/index-legacy.js\"],\"sourcesContent\":[\"export default class BitSet {\\n\\tconstructor(arg) {\\n\\t\\tthis.bits = arg instanceof BitSet ? arg.bits.slice() : [];\\n\\t}\\n\\n\\tadd(n) {\\n\\t\\tthis.bits[n >> 5] |= 1 << (n & 31);\\n\\t}\\n\\n\\thas(n) {\\n\\t\\treturn !!(this.bits[n >> 5] & (1 << (n & 31)));\\n\\t}\\n}\\n\",\"export default class Chunk {\\n\\tconstructor(start, end, content) {\\n\\t\\tthis.start = start;\\n\\t\\tthis.end = end;\\n\\t\\tthis.original = content;\\n\\n\\t\\tthis.intro = '';\\n\\t\\tthis.outro = '';\\n\\n\\t\\tthis.content = content;\\n\\t\\tthis.storeName = false;\\n\\t\\tthis.edited = false;\\n\\n\\t\\tif (DEBUG) {\\n\\t\\t\\t// we make these non-enumerable, for sanity while debugging\\n\\t\\t\\tObject.defineProperties(this, {\\n\\t\\t\\t\\tprevious: { writable: true, value: null },\\n\\t\\t\\t\\tnext: { writable: true, value: null },\\n\\t\\t\\t});\\n\\t\\t} else {\\n\\t\\t\\tthis.previous = null;\\n\\t\\t\\tthis.next = null;\\n\\t\\t}\\n\\t}\\n\\n\\tappendLeft(content) {\\n\\t\\tthis.outro += content;\\n\\t}\\n\\n\\tappendRight(content) {\\n\\t\\tthis.intro = this.intro + content;\\n\\t}\\n\\n\\tclone() {\\n\\t\\tconst chunk = new Chunk(this.start, this.end, this.original);\\n\\n\\t\\tchunk.intro = this.intro;\\n\\t\\tchunk.outro = this.outro;\\n\\t\\tchunk.content = this.content;\\n\\t\\tchunk.storeName = this.storeName;\\n\\t\\tchunk.edited = this.edited;\\n\\n\\t\\treturn chunk;\\n\\t}\\n\\n\\tcontains(index) {\\n\\t\\treturn this.start < index && index < this.end;\\n\\t}\\n\\n\\teachNext(fn) {\\n\\t\\tlet chunk = this;\\n\\t\\twhile (chunk) {\\n\\t\\t\\tfn(chunk);\\n\\t\\t\\tchunk = chunk.next;\\n\\t\\t}\\n\\t}\\n\\n\\teachPrevious(fn) {\\n\\t\\tlet chunk = this;\\n\\t\\twhile (chunk) {\\n\\t\\t\\tfn(chunk);\\n\\t\\t\\tchunk = chunk.previous;\\n\\t\\t}\\n\\t}\\n\\n\\tedit(content, storeName, contentOnly) {\\n\\t\\tthis.content = content;\\n\\t\\tif (!contentOnly) {\\n\\t\\t\\tthis.intro = '';\\n\\t\\t\\tthis.outro = '';\\n\\t\\t}\\n\\t\\tthis.storeName = storeName;\\n\\n\\t\\tthis.edited = true;\\n\\n\\t\\treturn this;\\n\\t}\\n\\n\\tprependLeft(content) {\\n\\t\\tthis.outro = content + this.outro;\\n\\t}\\n\\n\\tprependRight(content) {\\n\\t\\tthis.intro = content + this.intro;\\n\\t}\\n\\n\\tsplit(index) {\\n\\t\\tconst sliceIndex = index - this.start;\\n\\n\\t\\tconst originalBefore = this.original.slice(0, sliceIndex);\\n\\t\\tconst originalAfter = this.original.slice(sliceIndex);\\n\\n\\t\\tthis.original = originalBefore;\\n\\n\\t\\tconst newChunk = new Chunk(index, this.end, originalAfter);\\n\\t\\tnewChunk.outro = this.outro;\\n\\t\\tthis.outro = '';\\n\\n\\t\\tthis.end = index;\\n\\n\\t\\tif (this.edited) {\\n\\t\\t\\t// TODO is this block necessary?...\\n\\t\\t\\tnewChunk.edit('', false);\\n\\t\\t\\tthis.content = '';\\n\\t\\t} else {\\n\\t\\t\\tthis.content = originalBefore;\\n\\t\\t}\\n\\n\\t\\tnewChunk.next = this.next;\\n\\t\\tif (newChunk.next) newChunk.next.previous = newChunk;\\n\\t\\tnewChunk.previous = this;\\n\\t\\tthis.next = newChunk;\\n\\n\\t\\treturn newChunk;\\n\\t}\\n\\n\\ttoString() {\\n\\t\\treturn this.intro + this.content + this.outro;\\n\\t}\\n\\n\\ttrimEnd(rx) {\\n\\t\\tthis.outro = this.outro.replace(rx, '');\\n\\t\\tif (this.outro.length) return true;\\n\\n\\t\\tconst trimmed = this.content.replace(rx, '');\\n\\n\\t\\tif (trimmed.length) {\\n\\t\\t\\tif (trimmed !== this.content) {\\n\\t\\t\\t\\tthis.split(this.start + trimmed.length).edit('', undefined, true);\\n\\t\\t\\t}\\n\\t\\t\\treturn true;\\n\\t\\t} else {\\n\\t\\t\\tthis.edit('', undefined, true);\\n\\n\\t\\t\\tthis.intro = this.intro.replace(rx, '');\\n\\t\\t\\tif (this.intro.length) return true;\\n\\t\\t}\\n\\t}\\n\\n\\ttrimStart(rx) {\\n\\t\\tthis.intro = this.intro.replace(rx, '');\\n\\t\\tif (this.intro.length) return true;\\n\\n\\t\\tconst trimmed = this.content.replace(rx, '');\\n\\n\\t\\tif (trimmed.length) {\\n\\t\\t\\tif (trimmed !== this.content) {\\n\\t\\t\\t\\tthis.split(this.end - trimmed.length);\\n\\t\\t\\t\\tthis.edit('', undefined, true);\\n\\t\\t\\t}\\n\\t\\t\\treturn true;\\n\\t\\t} else {\\n\\t\\t\\tthis.edit('', undefined, true);\\n\\n\\t\\t\\tthis.outro = this.outro.replace(rx, '');\\n\\t\\t\\tif (this.outro.length) return true;\\n\\t\\t}\\n\\t}\\n}\\n\",\"const comma = ','.charCodeAt(0);\\nconst semicolon = ';'.charCodeAt(0);\\nconst chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\\nconst intToChar = new Uint8Array(64); // 64 possible chars.\\nconst charToInt = new Uint8Array(128); // z is 122 in ASCII\\nfor (let i = 0; i < chars.length; i++) {\\n    const c = chars.charCodeAt(i);\\n    intToChar[i] = c;\\n    charToInt[c] = i;\\n}\\n// Provide a fallback for older environments.\\nconst td = typeof TextDecoder !== 'undefined'\\n    ? /* #__PURE__ */ new TextDecoder()\\n    : typeof Buffer !== 'undefined'\\n        ? {\\n            decode(buf) {\\n                const out = Buffer.from(buf.buffer, buf.byteOffset, buf.byteLength);\\n                return out.toString();\\n            },\\n        }\\n        : {\\n            decode(buf) {\\n                let out = '';\\n                for (let i = 0; i < buf.length; i++) {\\n                    out += String.fromCharCode(buf[i]);\\n                }\\n                return out;\\n            },\\n        };\\nfunction decode(mappings) {\\n    const state = new Int32Array(5);\\n    const decoded = [];\\n    let index = 0;\\n    do {\\n        const semi = indexOf(mappings, index);\\n        const line = [];\\n        let sorted = true;\\n        let lastCol = 0;\\n        state[0] = 0;\\n        for (let i = index; i < semi; i++) {\\n            let seg;\\n            i = decodeInteger(mappings, i, state, 0); // genColumn\\n            const col = state[0];\\n            if (col < lastCol)\\n                sorted = false;\\n            lastCol = col;\\n            if (hasMoreVlq(mappings, i, semi)) {\\n                i = decodeInteger(mappings, i, state, 1); // sourcesIndex\\n                i = decodeInteger(mappings, i, state, 2); // sourceLine\\n                i = decodeInteger(mappings, i, state, 3); // sourceColumn\\n                if (hasMoreVlq(mappings, i, semi)) {\\n                    i = decodeInteger(mappings, i, state, 4); // namesIndex\\n                    seg = [col, state[1], state[2], state[3], state[4]];\\n                }\\n                else {\\n                    seg = [col, state[1], state[2], state[3]];\\n                }\\n            }\\n            else {\\n                seg = [col];\\n            }\\n            line.push(seg);\\n        }\\n        if (!sorted)\\n            sort(line);\\n        decoded.push(line);\\n        index = semi + 1;\\n    } while (index <= mappings.length);\\n    return decoded;\\n}\\nfunction indexOf(mappings, index) {\\n    const idx = mappings.indexOf(';', index);\\n    return idx === -1 ? mappings.length : idx;\\n}\\nfunction decodeInteger(mappings, pos, state, j) {\\n    let value = 0;\\n    let shift = 0;\\n    let integer = 0;\\n    do {\\n        const c = mappings.charCodeAt(pos++);\\n        integer = charToInt[c];\\n        value |= (integer & 31) << shift;\\n        shift += 5;\\n    } while (integer & 32);\\n    const shouldNegate = value & 1;\\n    value >>>= 1;\\n    if (shouldNegate) {\\n        value = -0x80000000 | -value;\\n    }\\n    state[j] += value;\\n    return pos;\\n}\\nfunction hasMoreVlq(mappings, i, length) {\\n    if (i >= length)\\n        return false;\\n    return mappings.charCodeAt(i) !== comma;\\n}\\nfunction sort(line) {\\n    line.sort(sortComparator);\\n}\\nfunction sortComparator(a, b) {\\n    return a[0] - b[0];\\n}\\nfunction encode(decoded) {\\n    const state = new Int32Array(5);\\n    const bufLength = 1024 * 16;\\n    const subLength = bufLength - 36;\\n    const buf = new Uint8Array(bufLength);\\n    const sub = buf.subarray(0, subLength);\\n    let pos = 0;\\n    let out = '';\\n    for (let i = 0; i < decoded.length; i++) {\\n        const line = decoded[i];\\n        if (i > 0) {\\n            if (pos === bufLength) {\\n                out += td.decode(buf);\\n                pos = 0;\\n            }\\n            buf[pos++] = semicolon;\\n        }\\n        if (line.length === 0)\\n            continue;\\n        state[0] = 0;\\n        for (let j = 0; j < line.length; j++) {\\n            const segment = line[j];\\n            // We can push up to 5 ints, each int can take at most 7 chars, and we\\n            // may push a comma.\\n            if (pos > subLength) {\\n                out += td.decode(sub);\\n                buf.copyWithin(0, subLength, pos);\\n                pos -= subLength;\\n            }\\n            if (j > 0)\\n                buf[pos++] = comma;\\n            pos = encodeInteger(buf, pos, state, segment, 0); // genColumn\\n            if (segment.length === 1)\\n                continue;\\n            pos = encodeInteger(buf, pos, state, segment, 1); // sourcesIndex\\n            pos = encodeInteger(buf, pos, state, segment, 2); // sourceLine\\n            pos = encodeInteger(buf, pos, state, segment, 3); // sourceColumn\\n            if (segment.length === 4)\\n                continue;\\n            pos = encodeInteger(buf, pos, state, segment, 4); // namesIndex\\n        }\\n    }\\n    return out + td.decode(buf.subarray(0, pos));\\n}\\nfunction encodeInteger(buf, pos, state, segment, j) {\\n    const next = segment[j];\\n    let num = next - state[j];\\n    state[j] = next;\\n    num = num < 0 ? (-num << 1) | 1 : num << 1;\\n    do {\\n        let clamped = num & 0b011111;\\n        num >>>= 5;\\n        if (num > 0)\\n            clamped |= 0b100000;\\n        buf[pos++] = intToChar[clamped];\\n    } while (num > 0);\\n    return pos;\\n}\\n\\nexport { decode, encode };\\n//# sourceMappingURL=sourcemap-codec.mjs.map\\n\",\"import { encode } from '@jridgewell/sourcemap-codec';\\n\\nfunction getBtoa () {\\n\\tif (typeof window !== 'undefined' && typeof window.btoa === 'function') {\\n\\t\\treturn (str) => window.btoa(unescape(encodeURIComponent(str)));\\n\\t} else if (typeof Buffer === 'function') {\\n\\t\\treturn (str) => Buffer.from(str, 'utf-8').toString('base64');\\n\\t} else {\\n\\t\\treturn () => {\\n\\t\\t\\tthrow new Error('Unsupported environment: `window.btoa` or `Buffer` should be supported.');\\n\\t\\t};\\n\\t}\\n}\\n\\nconst btoa = /*#__PURE__*/ getBtoa();\\n\\nexport default class SourceMap {\\n\\tconstructor(properties) {\\n\\t\\tthis.version = 3;\\n\\t\\tthis.file = properties.file;\\n\\t\\tthis.sources = properties.sources;\\n\\t\\tthis.sourcesContent = properties.sourcesContent;\\n\\t\\tthis.names = properties.names;\\n\\t\\tthis.mappings = encode(properties.mappings);\\n\\t}\\n\\n\\ttoString() {\\n\\t\\treturn JSON.stringify(this);\\n\\t}\\n\\n\\ttoUrl() {\\n\\t\\treturn 'data:application/json;charset=utf-8;base64,' + btoa(this.toString());\\n\\t}\\n}\\n\",\"export default function guessIndent(code) {\\n\\tconst lines = code.split('\\\\n');\\n\\n\\tconst tabbed = lines.filter((line) => /^\\\\t+/.test(line));\\n\\tconst spaced = lines.filter((line) => /^ {2,}/.test(line));\\n\\n\\tif (tabbed.length === 0 && spaced.length === 0) {\\n\\t\\treturn null;\\n\\t}\\n\\n\\t// More lines tabbed than spaced? Assume tabs, and\\n\\t// default to tabs in the case of a tie (or nothing\\n\\t// to go on)\\n\\tif (tabbed.length >= spaced.length) {\\n\\t\\treturn '\\\\t';\\n\\t}\\n\\n\\t// Otherwise, we need to guess the multiple\\n\\tconst min = spaced.reduce((previous, current) => {\\n\\t\\tconst numSpaces = /^ +/.exec(current)[0].length;\\n\\t\\treturn Math.min(numSpaces, previous);\\n\\t}, Infinity);\\n\\n\\treturn new Array(min + 1).join(' ');\\n}\\n\",\"export default function getRelativePath(from, to) {\\n\\tconst fromParts = from.split(/[/\\\\\\\\]/);\\n\\tconst toParts = to.split(/[/\\\\\\\\]/);\\n\\n\\tfromParts.pop(); // get dirname\\n\\n\\twhile (fromParts[0] === toParts[0]) {\\n\\t\\tfromParts.shift();\\n\\t\\ttoParts.shift();\\n\\t}\\n\\n\\tif (fromParts.length) {\\n\\t\\tlet i = fromParts.length;\\n\\t\\twhile (i--) fromParts[i] = '..';\\n\\t}\\n\\n\\treturn fromParts.concat(toParts).join('/');\\n}\\n\",\"const toString = Object.prototype.toString;\\n\\nexport default function isObject(thing) {\\n\\treturn toString.call(thing) === '[object Object]';\\n}\\n\",\"export default function getLocator(source) {\\n\\tconst originalLines = source.split('\\\\n');\\n\\tconst lineOffsets = [];\\n\\n\\tfor (let i = 0, pos = 0; i < originalLines.length; i++) {\\n\\t\\tlineOffsets.push(pos);\\n\\t\\tpos += originalLines[i].length + 1;\\n\\t}\\n\\n\\treturn function locate(index) {\\n\\t\\tlet i = 0;\\n\\t\\tlet j = lineOffsets.length;\\n\\t\\twhile (i < j) {\\n\\t\\t\\tconst m = (i + j) >> 1;\\n\\t\\t\\tif (index < lineOffsets[m]) {\\n\\t\\t\\t\\tj = m;\\n\\t\\t\\t} else {\\n\\t\\t\\t\\ti = m + 1;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tconst line = i - 1;\\n\\t\\tconst column = index - lineOffsets[line];\\n\\t\\treturn { line, column };\\n\\t};\\n}\\n\",\"export default class Mappings {\\n\\tconstructor(hires) {\\n\\t\\tthis.hires = hires;\\n\\t\\tthis.generatedCodeLine = 0;\\n\\t\\tthis.generatedCodeColumn = 0;\\n\\t\\tthis.raw = [];\\n\\t\\tthis.rawSegments = this.raw[this.generatedCodeLine] = [];\\n\\t\\tthis.pending = null;\\n\\t}\\n\\n\\taddEdit(sourceIndex, content, loc, nameIndex) {\\n\\t\\tif (content.length) {\\n\\t\\t\\tconst segment = [this.generatedCodeColumn, sourceIndex, loc.line, loc.column];\\n\\t\\t\\tif (nameIndex >= 0) {\\n\\t\\t\\t\\tsegment.push(nameIndex);\\n\\t\\t\\t}\\n\\t\\t\\tthis.rawSegments.push(segment);\\n\\t\\t} else if (this.pending) {\\n\\t\\t\\tthis.rawSegments.push(this.pending);\\n\\t\\t}\\n\\n\\t\\tthis.advance(content);\\n\\t\\tthis.pending = null;\\n\\t}\\n\\n\\taddUneditedChunk(sourceIndex, chunk, original, loc, sourcemapLocations) {\\n\\t\\tlet originalCharIndex = chunk.start;\\n\\t\\tlet first = true;\\n\\n\\t\\twhile (originalCharIndex < chunk.end) {\\n\\t\\t\\tif (this.hires || first || sourcemapLocations.has(originalCharIndex)) {\\n\\t\\t\\t\\tthis.rawSegments.push([this.generatedCodeColumn, sourceIndex, loc.line, loc.column]);\\n\\t\\t\\t}\\n\\n\\t\\t\\tif (original[originalCharIndex] === '\\\\n') {\\n\\t\\t\\t\\tloc.line += 1;\\n\\t\\t\\t\\tloc.column = 0;\\n\\t\\t\\t\\tthis.generatedCodeLine += 1;\\n\\t\\t\\t\\tthis.raw[this.generatedCodeLine] = this.rawSegments = [];\\n\\t\\t\\t\\tthis.generatedCodeColumn = 0;\\n\\t\\t\\t\\tfirst = true;\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tloc.column += 1;\\n\\t\\t\\t\\tthis.generatedCodeColumn += 1;\\n\\t\\t\\t\\tfirst = false;\\n\\t\\t\\t}\\n\\n\\t\\t\\toriginalCharIndex += 1;\\n\\t\\t}\\n\\n\\t\\tthis.pending = null;\\n\\t}\\n\\n\\tadvance(str) {\\n\\t\\tif (!str) return;\\n\\n\\t\\tconst lines = str.split('\\\\n');\\n\\n\\t\\tif (lines.length > 1) {\\n\\t\\t\\tfor (let i = 0; i < lines.length - 1; i++) {\\n\\t\\t\\t\\tthis.generatedCodeLine++;\\n\\t\\t\\t\\tthis.raw[this.generatedCodeLine] = this.rawSegments = [];\\n\\t\\t\\t}\\n\\t\\t\\tthis.generatedCodeColumn = 0;\\n\\t\\t}\\n\\n\\t\\tthis.generatedCodeColumn += lines[lines.length - 1].length;\\n\\t}\\n}\\n\",\"import BitSet from './BitSet.js';\\nimport Chunk from './Chunk.js';\\nimport SourceMap from './SourceMap.js';\\nimport guessIndent from './utils/guessIndent.js';\\nimport getRelativePath from './utils/getRelativePath.js';\\nimport isObject from './utils/isObject.js';\\nimport getLocator from './utils/getLocator.js';\\nimport Mappings from './utils/Mappings.js';\\nimport Stats from './utils/Stats.js';\\n\\nconst n = '\\\\n';\\n\\nconst warned = {\\n\\tinsertLeft: false,\\n\\tinsertRight: false,\\n\\tstoreName: false,\\n};\\n\\nexport default class MagicString {\\n\\tconstructor(string, options = {}) {\\n\\t\\tconst chunk = new Chunk(0, string.length, string);\\n\\n\\t\\tObject.defineProperties(this, {\\n\\t\\t\\toriginal: { writable: true, value: string },\\n\\t\\t\\toutro: { writable: true, value: '' },\\n\\t\\t\\tintro: { writable: true, value: '' },\\n\\t\\t\\tfirstChunk: { writable: true, value: chunk },\\n\\t\\t\\tlastChunk: { writable: true, value: chunk },\\n\\t\\t\\tlastSearchedChunk: { writable: true, value: chunk },\\n\\t\\t\\tbyStart: { writable: true, value: {} },\\n\\t\\t\\tbyEnd: { writable: true, value: {} },\\n\\t\\t\\tfilename: { writable: true, value: options.filename },\\n\\t\\t\\tindentExclusionRanges: { writable: true, value: options.indentExclusionRanges },\\n\\t\\t\\tsourcemapLocations: { writable: true, value: new BitSet() },\\n\\t\\t\\tstoredNames: { writable: true, value: {} },\\n\\t\\t\\tindentStr: { writable: true, value: undefined },\\n\\t\\t});\\n\\n\\t\\tif (DEBUG) {\\n\\t\\t\\tObject.defineProperty(this, 'stats', { value: new Stats() });\\n\\t\\t}\\n\\n\\t\\tthis.byStart[0] = chunk;\\n\\t\\tthis.byEnd[string.length] = chunk;\\n\\t}\\n\\n\\taddSourcemapLocation(char) {\\n\\t\\tthis.sourcemapLocations.add(char);\\n\\t}\\n\\n\\tappend(content) {\\n\\t\\tif (typeof content !== 'string') throw new TypeError('outro content must be a string');\\n\\n\\t\\tthis.outro += content;\\n\\t\\treturn this;\\n\\t}\\n\\n\\tappendLeft(index, content) {\\n\\t\\tif (typeof content !== 'string') throw new TypeError('inserted content must be a string');\\n\\n\\t\\tif (DEBUG) this.stats.time('appendLeft');\\n\\n\\t\\tthis._split(index);\\n\\n\\t\\tconst chunk = this.byEnd[index];\\n\\n\\t\\tif (chunk) {\\n\\t\\t\\tchunk.appendLeft(content);\\n\\t\\t} else {\\n\\t\\t\\tthis.intro += content;\\n\\t\\t}\\n\\n\\t\\tif (DEBUG) this.stats.timeEnd('appendLeft');\\n\\t\\treturn this;\\n\\t}\\n\\n\\tappendRight(index, content) {\\n\\t\\tif (typeof content !== 'string') throw new TypeError('inserted content must be a string');\\n\\n\\t\\tif (DEBUG) this.stats.time('appendRight');\\n\\n\\t\\tthis._split(index);\\n\\n\\t\\tconst chunk = this.byStart[index];\\n\\n\\t\\tif (chunk) {\\n\\t\\t\\tchunk.appendRight(content);\\n\\t\\t} else {\\n\\t\\t\\tthis.outro += content;\\n\\t\\t}\\n\\n\\t\\tif (DEBUG) this.stats.timeEnd('appendRight');\\n\\t\\treturn this;\\n\\t}\\n\\n\\tclone() {\\n\\t\\tconst cloned = new MagicString(this.original, { filename: this.filename });\\n\\n\\t\\tlet originalChunk = this.firstChunk;\\n\\t\\tlet clonedChunk = (cloned.firstChunk = cloned.lastSearchedChunk = originalChunk.clone());\\n\\n\\t\\twhile (originalChunk) {\\n\\t\\t\\tcloned.byStart[clonedChunk.start] = clonedChunk;\\n\\t\\t\\tcloned.byEnd[clonedChunk.end] = clonedChunk;\\n\\n\\t\\t\\tconst nextOriginalChunk = originalChunk.next;\\n\\t\\t\\tconst nextClonedChunk = nextOriginalChunk && nextOriginalChunk.clone();\\n\\n\\t\\t\\tif (nextClonedChunk) {\\n\\t\\t\\t\\tclonedChunk.next = nextClonedChunk;\\n\\t\\t\\t\\tnextClonedChunk.previous = clonedChunk;\\n\\n\\t\\t\\t\\tclonedChunk = nextClonedChunk;\\n\\t\\t\\t}\\n\\n\\t\\t\\toriginalChunk = nextOriginalChunk;\\n\\t\\t}\\n\\n\\t\\tcloned.lastChunk = clonedChunk;\\n\\n\\t\\tif (this.indentExclusionRanges) {\\n\\t\\t\\tcloned.indentExclusionRanges = this.indentExclusionRanges.slice();\\n\\t\\t}\\n\\n\\t\\tcloned.sourcemapLocations = new BitSet(this.sourcemapLocations);\\n\\n\\t\\tcloned.intro = this.intro;\\n\\t\\tcloned.outro = this.outro;\\n\\n\\t\\treturn cloned;\\n\\t}\\n\\n\\tgenerateDecodedMap(options) {\\n\\t\\toptions = options || {};\\n\\n\\t\\tconst sourceIndex = 0;\\n\\t\\tconst names = Object.keys(this.storedNames);\\n\\t\\tconst mappings = new Mappings(options.hires);\\n\\n\\t\\tconst locate = getLocator(this.original);\\n\\n\\t\\tif (this.intro) {\\n\\t\\t\\tmappings.advance(this.intro);\\n\\t\\t}\\n\\n\\t\\tthis.firstChunk.eachNext((chunk) => {\\n\\t\\t\\tconst loc = locate(chunk.start);\\n\\n\\t\\t\\tif (chunk.intro.length) mappings.advance(chunk.intro);\\n\\n\\t\\t\\tif (chunk.edited) {\\n\\t\\t\\t\\tmappings.addEdit(\\n\\t\\t\\t\\t\\tsourceIndex,\\n\\t\\t\\t\\t\\tchunk.content,\\n\\t\\t\\t\\t\\tloc,\\n\\t\\t\\t\\t\\tchunk.storeName ? names.indexOf(chunk.original) : -1\\n\\t\\t\\t\\t);\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tmappings.addUneditedChunk(sourceIndex, chunk, this.original, loc, this.sourcemapLocations);\\n\\t\\t\\t}\\n\\n\\t\\t\\tif (chunk.outro.length) mappings.advance(chunk.outro);\\n\\t\\t});\\n\\n\\t\\treturn {\\n\\t\\t\\tfile: options.file ? options.file.split(/[/\\\\\\\\]/).pop() : null,\\n\\t\\t\\tsources: [options.source ? getRelativePath(options.file || '', options.source) : null],\\n\\t\\t\\tsourcesContent: options.includeContent ? [this.original] : [null],\\n\\t\\t\\tnames,\\n\\t\\t\\tmappings: mappings.raw,\\n\\t\\t};\\n\\t}\\n\\n\\tgenerateMap(options) {\\n\\t\\treturn new SourceMap(this.generateDecodedMap(options));\\n\\t}\\n\\n\\t_ensureindentStr() {\\n\\t\\tif (this.indentStr === undefined) {\\n\\t\\t\\tthis.indentStr = guessIndent(this.original);\\n\\t\\t}\\n\\t}\\n\\n\\t_getRawIndentString() {\\n\\t\\tthis._ensureindentStr();\\n\\t\\treturn this.indentStr;\\n\\t}\\n\\n\\tgetIndentString() {\\n\\t\\tthis._ensureindentStr();\\n\\t\\treturn this.indentStr === null ? '\\\\t' : this.indentStr;\\n\\t}\\n\\n\\tindent(indentStr, options) {\\n\\t\\tconst pattern = /^[^\\\\r\\\\n]/gm;\\n\\n\\t\\tif (isObject(indentStr)) {\\n\\t\\t\\toptions = indentStr;\\n\\t\\t\\tindentStr = undefined;\\n\\t\\t}\\n\\n\\t\\tif (indentStr === undefined) {\\n\\t\\t\\tthis._ensureindentStr();\\n\\t\\t\\tindentStr = this.indentStr || '\\\\t';\\n\\t\\t}\\n\\n\\t\\tif (indentStr === '') return this; // noop\\n\\n\\t\\toptions = options || {};\\n\\n\\t\\t// Process exclusion ranges\\n\\t\\tconst isExcluded = {};\\n\\n\\t\\tif (options.exclude) {\\n\\t\\t\\tconst exclusions =\\n\\t\\t\\t\\ttypeof options.exclude[0] === 'number' ? [options.exclude] : options.exclude;\\n\\t\\t\\texclusions.forEach((exclusion) => {\\n\\t\\t\\t\\tfor (let i = exclusion[0]; i < exclusion[1]; i += 1) {\\n\\t\\t\\t\\t\\tisExcluded[i] = true;\\n\\t\\t\\t\\t}\\n\\t\\t\\t});\\n\\t\\t}\\n\\n\\t\\tlet shouldIndentNextCharacter = options.indentStart !== false;\\n\\t\\tconst replacer = (match) => {\\n\\t\\t\\tif (shouldIndentNextCharacter) return `${indentStr}${match}`;\\n\\t\\t\\tshouldIndentNextCharacter = true;\\n\\t\\t\\treturn match;\\n\\t\\t};\\n\\n\\t\\tthis.intro = this.intro.replace(pattern, replacer);\\n\\n\\t\\tlet charIndex = 0;\\n\\t\\tlet chunk = this.firstChunk;\\n\\n\\t\\twhile (chunk) {\\n\\t\\t\\tconst end = chunk.end;\\n\\n\\t\\t\\tif (chunk.edited) {\\n\\t\\t\\t\\tif (!isExcluded[charIndex]) {\\n\\t\\t\\t\\t\\tchunk.content = chunk.content.replace(pattern, replacer);\\n\\n\\t\\t\\t\\t\\tif (chunk.content.length) {\\n\\t\\t\\t\\t\\t\\tshouldIndentNextCharacter = chunk.content[chunk.content.length - 1] === '\\\\n';\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tcharIndex = chunk.start;\\n\\n\\t\\t\\t\\twhile (charIndex < end) {\\n\\t\\t\\t\\t\\tif (!isExcluded[charIndex]) {\\n\\t\\t\\t\\t\\t\\tconst char = this.original[charIndex];\\n\\n\\t\\t\\t\\t\\t\\tif (char === '\\\\n') {\\n\\t\\t\\t\\t\\t\\t\\tshouldIndentNextCharacter = true;\\n\\t\\t\\t\\t\\t\\t} else if (char !== '\\\\r' && shouldIndentNextCharacter) {\\n\\t\\t\\t\\t\\t\\t\\tshouldIndentNextCharacter = false;\\n\\n\\t\\t\\t\\t\\t\\t\\tif (charIndex === chunk.start) {\\n\\t\\t\\t\\t\\t\\t\\t\\tchunk.prependRight(indentStr);\\n\\t\\t\\t\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\t\\t\\tthis._splitChunk(chunk, charIndex);\\n\\t\\t\\t\\t\\t\\t\\t\\tchunk = chunk.next;\\n\\t\\t\\t\\t\\t\\t\\t\\tchunk.prependRight(indentStr);\\n\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t\\tcharIndex += 1;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\n\\t\\t\\tcharIndex = chunk.end;\\n\\t\\t\\tchunk = chunk.next;\\n\\t\\t}\\n\\n\\t\\tthis.outro = this.outro.replace(pattern, replacer);\\n\\n\\t\\treturn this;\\n\\t}\\n\\n\\tinsert() {\\n\\t\\tthrow new Error(\\n\\t\\t\\t'magicString.insert(...) is deprecated. Use prependRight(...) or appendLeft(...)'\\n\\t\\t);\\n\\t}\\n\\n\\tinsertLeft(index, content) {\\n\\t\\tif (!warned.insertLeft) {\\n\\t\\t\\tconsole.warn(\\n\\t\\t\\t\\t'magicString.insertLeft(...) is deprecated. Use magicString.appendLeft(...) instead'\\n\\t\\t\\t); // eslint-disable-line no-console\\n\\t\\t\\twarned.insertLeft = true;\\n\\t\\t}\\n\\n\\t\\treturn this.appendLeft(index, content);\\n\\t}\\n\\n\\tinsertRight(index, content) {\\n\\t\\tif (!warned.insertRight) {\\n\\t\\t\\tconsole.warn(\\n\\t\\t\\t\\t'magicString.insertRight(...) is deprecated. Use magicString.prependRight(...) instead'\\n\\t\\t\\t); // eslint-disable-line no-console\\n\\t\\t\\twarned.insertRight = true;\\n\\t\\t}\\n\\n\\t\\treturn this.prependRight(index, content);\\n\\t}\\n\\n\\tmove(start, end, index) {\\n\\t\\tif (index >= start && index <= end) throw new Error('Cannot move a selection inside itself');\\n\\n\\t\\tif (DEBUG) this.stats.time('move');\\n\\n\\t\\tthis._split(start);\\n\\t\\tthis._split(end);\\n\\t\\tthis._split(index);\\n\\n\\t\\tconst first = this.byStart[start];\\n\\t\\tconst last = this.byEnd[end];\\n\\n\\t\\tconst oldLeft = first.previous;\\n\\t\\tconst oldRight = last.next;\\n\\n\\t\\tconst newRight = this.byStart[index];\\n\\t\\tif (!newRight && last === this.lastChunk) return this;\\n\\t\\tconst newLeft = newRight ? newRight.previous : this.lastChunk;\\n\\n\\t\\tif (oldLeft) oldLeft.next = oldRight;\\n\\t\\tif (oldRight) oldRight.previous = oldLeft;\\n\\n\\t\\tif (newLeft) newLeft.next = first;\\n\\t\\tif (newRight) newRight.previous = last;\\n\\n\\t\\tif (!first.previous) this.firstChunk = last.next;\\n\\t\\tif (!last.next) {\\n\\t\\t\\tthis.lastChunk = first.previous;\\n\\t\\t\\tthis.lastChunk.next = null;\\n\\t\\t}\\n\\n\\t\\tfirst.previous = newLeft;\\n\\t\\tlast.next = newRight || null;\\n\\n\\t\\tif (!newLeft) this.firstChunk = first;\\n\\t\\tif (!newRight) this.lastChunk = last;\\n\\n\\t\\tif (DEBUG) this.stats.timeEnd('move');\\n\\t\\treturn this;\\n\\t}\\n\\n\\toverwrite(start, end, content, options) {\\n\\t\\toptions = options || {};\\n\\t\\treturn this.update(start, end, content, { ...options, overwrite: !options.contentOnly });\\n\\t}\\n\\n\\tupdate(start, end, content, options) {\\n\\t\\tif (typeof content !== 'string') throw new TypeError('replacement content must be a string');\\n\\n\\t\\twhile (start < 0) start += this.original.length;\\n\\t\\twhile (end < 0) end += this.original.length;\\n\\n\\t\\tif (end > this.original.length) throw new Error('end is out of bounds');\\n\\t\\tif (start === end)\\n\\t\\t\\tthrow new Error(\\n\\t\\t\\t\\t'Cannot overwrite a zero-length range – use appendLeft or prependRight instead'\\n\\t\\t\\t);\\n\\n\\t\\tif (DEBUG) this.stats.time('overwrite');\\n\\n\\t\\tthis._split(start);\\n\\t\\tthis._split(end);\\n\\n\\t\\tif (options === true) {\\n\\t\\t\\tif (!warned.storeName) {\\n\\t\\t\\t\\tconsole.warn(\\n\\t\\t\\t\\t\\t'The final argument to magicString.overwrite(...) should be an options object. See https://github.com/rich-harris/magic-string'\\n\\t\\t\\t\\t); // eslint-disable-line no-console\\n\\t\\t\\t\\twarned.storeName = true;\\n\\t\\t\\t}\\n\\n\\t\\t\\toptions = { storeName: true };\\n\\t\\t}\\n\\t\\tconst storeName = options !== undefined ? options.storeName : false;\\n\\t\\tconst overwrite = options !== undefined ? options.overwrite : false;\\n\\n\\t\\tif (storeName) {\\n\\t\\t\\tconst original = this.original.slice(start, end);\\n\\t\\t\\tObject.defineProperty(this.storedNames, original, {\\n\\t\\t\\t\\twritable: true,\\n\\t\\t\\t\\tvalue: true,\\n\\t\\t\\t\\tenumerable: true,\\n\\t\\t\\t});\\n\\t\\t}\\n\\n\\t\\tconst first = this.byStart[start];\\n\\t\\tconst last = this.byEnd[end];\\n\\n\\t\\tif (first) {\\n\\t\\t\\tlet chunk = first;\\n\\t\\t\\twhile (chunk !== last) {\\n\\t\\t\\t\\tif (chunk.next !== this.byStart[chunk.end]) {\\n\\t\\t\\t\\t\\tthrow new Error('Cannot overwrite across a split point');\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tchunk = chunk.next;\\n\\t\\t\\t\\tchunk.edit('', false);\\n\\t\\t\\t}\\n\\n\\t\\t\\tfirst.edit(content, storeName, !overwrite);\\n\\t\\t} else {\\n\\t\\t\\t// must be inserting at the end\\n\\t\\t\\tconst newChunk = new Chunk(start, end, '').edit(content, storeName);\\n\\n\\t\\t\\t// TODO last chunk in the array may not be the last chunk, if it's moved...\\n\\t\\t\\tlast.next = newChunk;\\n\\t\\t\\tnewChunk.previous = last;\\n\\t\\t}\\n\\n\\t\\tif (DEBUG) this.stats.timeEnd('overwrite');\\n\\t\\treturn this;\\n\\t}\\n\\n\\tprepend(content) {\\n\\t\\tif (typeof content !== 'string') throw new TypeError('outro content must be a string');\\n\\n\\t\\tthis.intro = content + this.intro;\\n\\t\\treturn this;\\n\\t}\\n\\n\\tprependLeft(index, content) {\\n\\t\\tif (typeof content !== 'string') throw new TypeError('inserted content must be a string');\\n\\n\\t\\tif (DEBUG) this.stats.time('insertRight');\\n\\n\\t\\tthis._split(index);\\n\\n\\t\\tconst chunk = this.byEnd[index];\\n\\n\\t\\tif (chunk) {\\n\\t\\t\\tchunk.prependLeft(content);\\n\\t\\t} else {\\n\\t\\t\\tthis.intro = content + this.intro;\\n\\t\\t}\\n\\n\\t\\tif (DEBUG) this.stats.timeEnd('insertRight');\\n\\t\\treturn this;\\n\\t}\\n\\n\\tprependRight(index, content) {\\n\\t\\tif (typeof content !== 'string') throw new TypeError('inserted content must be a string');\\n\\n\\t\\tif (DEBUG) this.stats.time('insertRight');\\n\\n\\t\\tthis._split(index);\\n\\n\\t\\tconst chunk = this.byStart[index];\\n\\n\\t\\tif (chunk) {\\n\\t\\t\\tchunk.prependRight(content);\\n\\t\\t} else {\\n\\t\\t\\tthis.outro = content + this.outro;\\n\\t\\t}\\n\\n\\t\\tif (DEBUG) this.stats.timeEnd('insertRight');\\n\\t\\treturn this;\\n\\t}\\n\\n\\tremove(start, end) {\\n\\t\\twhile (start < 0) start += this.original.length;\\n\\t\\twhile (end < 0) end += this.original.length;\\n\\n\\t\\tif (start === end) return this;\\n\\n\\t\\tif (start < 0 || end > this.original.length) throw new Error('Character is out of bounds');\\n\\t\\tif (start > end) throw new Error('end must be greater than start');\\n\\n\\t\\tif (DEBUG) this.stats.time('remove');\\n\\n\\t\\tthis._split(start);\\n\\t\\tthis._split(end);\\n\\n\\t\\tlet chunk = this.byStart[start];\\n\\n\\t\\twhile (chunk) {\\n\\t\\t\\tchunk.intro = '';\\n\\t\\t\\tchunk.outro = '';\\n\\t\\t\\tchunk.edit('');\\n\\n\\t\\t\\tchunk = end > chunk.end ? this.byStart[chunk.end] : null;\\n\\t\\t}\\n\\n\\t\\tif (DEBUG) this.stats.timeEnd('remove');\\n\\t\\treturn this;\\n\\t}\\n\\n\\tlastChar() {\\n\\t\\tif (this.outro.length) return this.outro[this.outro.length - 1];\\n\\t\\tlet chunk = this.lastChunk;\\n\\t\\tdo {\\n\\t\\t\\tif (chunk.outro.length) return chunk.outro[chunk.outro.length - 1];\\n\\t\\t\\tif (chunk.content.length) return chunk.content[chunk.content.length - 1];\\n\\t\\t\\tif (chunk.intro.length) return chunk.intro[chunk.intro.length - 1];\\n\\t\\t} while ((chunk = chunk.previous));\\n\\t\\tif (this.intro.length) return this.intro[this.intro.length - 1];\\n\\t\\treturn '';\\n\\t}\\n\\n\\tlastLine() {\\n\\t\\tlet lineIndex = this.outro.lastIndexOf(n);\\n\\t\\tif (lineIndex !== -1) return this.outro.substr(lineIndex + 1);\\n\\t\\tlet lineStr = this.outro;\\n\\t\\tlet chunk = this.lastChunk;\\n\\t\\tdo {\\n\\t\\t\\tif (chunk.outro.length > 0) {\\n\\t\\t\\t\\tlineIndex = chunk.outro.lastIndexOf(n);\\n\\t\\t\\t\\tif (lineIndex !== -1) return chunk.outro.substr(lineIndex + 1) + lineStr;\\n\\t\\t\\t\\tlineStr = chunk.outro + lineStr;\\n\\t\\t\\t}\\n\\n\\t\\t\\tif (chunk.content.length > 0) {\\n\\t\\t\\t\\tlineIndex = chunk.content.lastIndexOf(n);\\n\\t\\t\\t\\tif (lineIndex !== -1) return chunk.content.substr(lineIndex + 1) + lineStr;\\n\\t\\t\\t\\tlineStr = chunk.content + lineStr;\\n\\t\\t\\t}\\n\\n\\t\\t\\tif (chunk.intro.length > 0) {\\n\\t\\t\\t\\tlineIndex = chunk.intro.lastIndexOf(n);\\n\\t\\t\\t\\tif (lineIndex !== -1) return chunk.intro.substr(lineIndex + 1) + lineStr;\\n\\t\\t\\t\\tlineStr = chunk.intro + lineStr;\\n\\t\\t\\t}\\n\\t\\t} while ((chunk = chunk.previous));\\n\\t\\tlineIndex = this.intro.lastIndexOf(n);\\n\\t\\tif (lineIndex !== -1) return this.intro.substr(lineIndex + 1) + lineStr;\\n\\t\\treturn this.intro + lineStr;\\n\\t}\\n\\n\\tslice(start = 0, end = this.original.length) {\\n\\t\\twhile (start < 0) start += this.original.length;\\n\\t\\twhile (end < 0) end += this.original.length;\\n\\n\\t\\tlet result = '';\\n\\n\\t\\t// find start chunk\\n\\t\\tlet chunk = this.firstChunk;\\n\\t\\twhile (chunk && (chunk.start > start || chunk.end <= start)) {\\n\\t\\t\\t// found end chunk before start\\n\\t\\t\\tif (chunk.start < end && chunk.end >= end) {\\n\\t\\t\\t\\treturn result;\\n\\t\\t\\t}\\n\\n\\t\\t\\tchunk = chunk.next;\\n\\t\\t}\\n\\n\\t\\tif (chunk && chunk.edited && chunk.start !== start)\\n\\t\\t\\tthrow new Error(`Cannot use replaced character ${start} as slice start anchor.`);\\n\\n\\t\\tconst startChunk = chunk;\\n\\t\\twhile (chunk) {\\n\\t\\t\\tif (chunk.intro && (startChunk !== chunk || chunk.start === start)) {\\n\\t\\t\\t\\tresult += chunk.intro;\\n\\t\\t\\t}\\n\\n\\t\\t\\tconst containsEnd = chunk.start < end && chunk.end >= end;\\n\\t\\t\\tif (containsEnd && chunk.edited && chunk.end !== end)\\n\\t\\t\\t\\tthrow new Error(`Cannot use replaced character ${end} as slice end anchor.`);\\n\\n\\t\\t\\tconst sliceStart = startChunk === chunk ? start - chunk.start : 0;\\n\\t\\t\\tconst sliceEnd = containsEnd ? chunk.content.length + end - chunk.end : chunk.content.length;\\n\\n\\t\\t\\tresult += chunk.content.slice(sliceStart, sliceEnd);\\n\\n\\t\\t\\tif (chunk.outro && (!containsEnd || chunk.end === end)) {\\n\\t\\t\\t\\tresult += chunk.outro;\\n\\t\\t\\t}\\n\\n\\t\\t\\tif (containsEnd) {\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\t}\\n\\n\\t\\t\\tchunk = chunk.next;\\n\\t\\t}\\n\\n\\t\\treturn result;\\n\\t}\\n\\n\\t// TODO deprecate this? not really very useful\\n\\tsnip(start, end) {\\n\\t\\tconst clone = this.clone();\\n\\t\\tclone.remove(0, start);\\n\\t\\tclone.remove(end, clone.original.length);\\n\\n\\t\\treturn clone;\\n\\t}\\n\\n\\t_split(index) {\\n\\t\\tif (this.byStart[index] || this.byEnd[index]) return;\\n\\n\\t\\tif (DEBUG) this.stats.time('_split');\\n\\n\\t\\tlet chunk = this.lastSearchedChunk;\\n\\t\\tconst searchForward = index > chunk.end;\\n\\n\\t\\twhile (chunk) {\\n\\t\\t\\tif (chunk.contains(index)) return this._splitChunk(chunk, index);\\n\\n\\t\\t\\tchunk = searchForward ? this.byStart[chunk.end] : this.byEnd[chunk.start];\\n\\t\\t}\\n\\t}\\n\\n\\t_splitChunk(chunk, index) {\\n\\t\\tif (chunk.edited && chunk.content.length) {\\n\\t\\t\\t// zero-length edited chunks are a special case (overlapping replacements)\\n\\t\\t\\tconst loc = getLocator(this.original)(index);\\n\\t\\t\\tthrow new Error(\\n\\t\\t\\t\\t`Cannot split a chunk that has already been edited (${loc.line}:${loc.column} – \\\"${chunk.original}\\\")`\\n\\t\\t\\t);\\n\\t\\t}\\n\\n\\t\\tconst newChunk = chunk.split(index);\\n\\n\\t\\tthis.byEnd[index] = chunk;\\n\\t\\tthis.byStart[index] = newChunk;\\n\\t\\tthis.byEnd[newChunk.end] = newChunk;\\n\\n\\t\\tif (chunk === this.lastChunk) this.lastChunk = newChunk;\\n\\n\\t\\tthis.lastSearchedChunk = chunk;\\n\\t\\tif (DEBUG) this.stats.timeEnd('_split');\\n\\t\\treturn true;\\n\\t}\\n\\n\\ttoString() {\\n\\t\\tlet str = this.intro;\\n\\n\\t\\tlet chunk = this.firstChunk;\\n\\t\\twhile (chunk) {\\n\\t\\t\\tstr += chunk.toString();\\n\\t\\t\\tchunk = chunk.next;\\n\\t\\t}\\n\\n\\t\\treturn str + this.outro;\\n\\t}\\n\\n\\tisEmpty() {\\n\\t\\tlet chunk = this.firstChunk;\\n\\t\\tdo {\\n\\t\\t\\tif (\\n\\t\\t\\t\\t(chunk.intro.length && chunk.intro.trim()) ||\\n\\t\\t\\t\\t(chunk.content.length && chunk.content.trim()) ||\\n\\t\\t\\t\\t(chunk.outro.length && chunk.outro.trim())\\n\\t\\t\\t)\\n\\t\\t\\t\\treturn false;\\n\\t\\t} while ((chunk = chunk.next));\\n\\t\\treturn true;\\n\\t}\\n\\n\\tlength() {\\n\\t\\tlet chunk = this.firstChunk;\\n\\t\\tlet length = 0;\\n\\t\\tdo {\\n\\t\\t\\tlength += chunk.intro.length + chunk.content.length + chunk.outro.length;\\n\\t\\t} while ((chunk = chunk.next));\\n\\t\\treturn length;\\n\\t}\\n\\n\\ttrimLines() {\\n\\t\\treturn this.trim('[\\\\\\\\r\\\\\\\\n]');\\n\\t}\\n\\n\\ttrim(charType) {\\n\\t\\treturn this.trimStart(charType).trimEnd(charType);\\n\\t}\\n\\n\\ttrimEndAborted(charType) {\\n\\t\\tconst rx = new RegExp((charType || '\\\\\\\\s') + '+$');\\n\\n\\t\\tthis.outro = this.outro.replace(rx, '');\\n\\t\\tif (this.outro.length) return true;\\n\\n\\t\\tlet chunk = this.lastChunk;\\n\\n\\t\\tdo {\\n\\t\\t\\tconst end = chunk.end;\\n\\t\\t\\tconst aborted = chunk.trimEnd(rx);\\n\\n\\t\\t\\t// if chunk was trimmed, we have a new lastChunk\\n\\t\\t\\tif (chunk.end !== end) {\\n\\t\\t\\t\\tif (this.lastChunk === chunk) {\\n\\t\\t\\t\\t\\tthis.lastChunk = chunk.next;\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\tthis.byEnd[chunk.end] = chunk;\\n\\t\\t\\t\\tthis.byStart[chunk.next.start] = chunk.next;\\n\\t\\t\\t\\tthis.byEnd[chunk.next.end] = chunk.next;\\n\\t\\t\\t}\\n\\n\\t\\t\\tif (aborted) return true;\\n\\t\\t\\tchunk = chunk.previous;\\n\\t\\t} while (chunk);\\n\\n\\t\\treturn false;\\n\\t}\\n\\n\\ttrimEnd(charType) {\\n\\t\\tthis.trimEndAborted(charType);\\n\\t\\treturn this;\\n\\t}\\n\\ttrimStartAborted(charType) {\\n\\t\\tconst rx = new RegExp('^' + (charType || '\\\\\\\\s') + '+');\\n\\n\\t\\tthis.intro = this.intro.replace(rx, '');\\n\\t\\tif (this.intro.length) return true;\\n\\n\\t\\tlet chunk = this.firstChunk;\\n\\n\\t\\tdo {\\n\\t\\t\\tconst end = chunk.end;\\n\\t\\t\\tconst aborted = chunk.trimStart(rx);\\n\\n\\t\\t\\tif (chunk.end !== end) {\\n\\t\\t\\t\\t// special case...\\n\\t\\t\\t\\tif (chunk === this.lastChunk) this.lastChunk = chunk.next;\\n\\n\\t\\t\\t\\tthis.byEnd[chunk.end] = chunk;\\n\\t\\t\\t\\tthis.byStart[chunk.next.start] = chunk.next;\\n\\t\\t\\t\\tthis.byEnd[chunk.next.end] = chunk.next;\\n\\t\\t\\t}\\n\\n\\t\\t\\tif (aborted) return true;\\n\\t\\t\\tchunk = chunk.next;\\n\\t\\t} while (chunk);\\n\\n\\t\\treturn false;\\n\\t}\\n\\n\\ttrimStart(charType) {\\n\\t\\tthis.trimStartAborted(charType);\\n\\t\\treturn this;\\n\\t}\\n\\n\\thasChanged() {\\n\\t\\treturn this.original !== this.toString();\\n\\t}\\n\\n\\t_replaceRegexp(searchValue, replacement) {\\n\\t\\tfunction getReplacement(match, str) {\\n\\t\\t\\tif (typeof replacement === 'string') {\\n\\t\\t\\t\\treturn replacement.replace(/\\\\$(\\\\$|&|\\\\d+)/g, (_, i) => {\\n\\t\\t\\t\\t\\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace#specifying_a_string_as_a_parameter\\n\\t\\t\\t\\t\\tif (i === '$') return '$';\\n\\t\\t\\t\\t\\tif (i === '&') return match[0];\\n\\t\\t\\t\\t\\tconst num = +i;\\n\\t\\t\\t\\t\\tif (num < match.length) return match[+i];\\n\\t\\t\\t\\t\\treturn `$${i}`;\\n\\t\\t\\t\\t});\\n\\t\\t\\t} else {\\n\\t\\t\\t\\treturn replacement(...match, match.index, str, match.groups);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tfunction matchAll(re, str) {\\n\\t\\t\\tlet match;\\n\\t\\t\\tconst matches = [];\\n\\t\\t\\twhile ((match = re.exec(str))) {\\n\\t\\t\\t\\tmatches.push(match);\\n\\t\\t\\t}\\n\\t\\t\\treturn matches;\\n\\t\\t}\\n\\t\\tif (searchValue.global) {\\n\\t\\t\\tconst matches = matchAll(searchValue, this.original);\\n\\t\\t\\tmatches.forEach((match) => {\\n\\t\\t\\t\\tif (match.index != null)\\n\\t\\t\\t\\t\\tthis.overwrite(\\n\\t\\t\\t\\t\\t\\tmatch.index,\\n\\t\\t\\t\\t\\t\\tmatch.index + match[0].length,\\n\\t\\t\\t\\t\\t\\tgetReplacement(match, this.original)\\n\\t\\t\\t\\t\\t);\\n\\t\\t\\t});\\n\\t\\t} else {\\n\\t\\t\\tconst match = this.original.match(searchValue);\\n\\t\\t\\tif (match && match.index != null)\\n\\t\\t\\t\\tthis.overwrite(\\n\\t\\t\\t\\t\\tmatch.index,\\n\\t\\t\\t\\t\\tmatch.index + match[0].length,\\n\\t\\t\\t\\t\\tgetReplacement(match, this.original)\\n\\t\\t\\t\\t);\\n\\t\\t}\\n\\t\\treturn this;\\n\\t}\\n\\n\\t_replaceString(string, replacement) {\\n\\t\\tconst { original } = this;\\n\\t\\tconst index = original.indexOf(string);\\n\\n\\t\\tif (index !== -1) {\\n\\t\\t\\tthis.overwrite(index, index + string.length, replacement);\\n\\t\\t}\\n\\n\\t\\treturn this;\\n\\t}\\n\\n\\treplace(searchValue, replacement) {\\n\\t\\tif (typeof searchValue === 'string') {\\n\\t\\t\\treturn this._replaceString(searchValue, replacement);\\n\\t\\t}\\n\\n\\t\\treturn this._replaceRegexp(searchValue, replacement);\\n\\t}\\n\\n\\t_replaceAllString(string, replacement) {\\n\\t\\tconst { original } = this;\\n\\t\\tconst stringLength = string.length;\\n\\t\\tfor (\\n\\t\\t\\tlet index = original.indexOf(string);\\n\\t\\t\\tindex !== -1;\\n\\t\\t\\tindex = original.indexOf(string, index + stringLength)\\n\\t\\t) {\\n\\t\\t\\tthis.overwrite(index, index + stringLength, replacement);\\n\\t\\t}\\n\\n\\t\\treturn this;\\n\\t}\\n\\n\\treplaceAll(searchValue, replacement) {\\n\\t\\tif (typeof searchValue === 'string') {\\n\\t\\t\\treturn this._replaceAllString(searchValue, replacement);\\n\\t\\t}\\n\\n\\t\\tif (!searchValue.global) {\\n\\t\\t\\tthrow new TypeError(\\n\\t\\t\\t\\t'MagicString.prototype.replaceAll called with a non-global RegExp argument'\\n\\t\\t\\t);\\n\\t\\t}\\n\\n\\t\\treturn this._replaceRegexp(searchValue, replacement);\\n\\t}\\n}\\n\",\"import MagicString from './MagicString.js';\\nimport SourceMap from './SourceMap.js';\\nimport getRelativePath from './utils/getRelativePath.js';\\nimport isObject from './utils/isObject.js';\\nimport getLocator from './utils/getLocator.js';\\nimport Mappings from './utils/Mappings.js';\\n\\nconst hasOwnProp = Object.prototype.hasOwnProperty;\\n\\nexport default class Bundle {\\n\\tconstructor(options = {}) {\\n\\t\\tthis.intro = options.intro || '';\\n\\t\\tthis.separator = options.separator !== undefined ? options.separator : '\\\\n';\\n\\t\\tthis.sources = [];\\n\\t\\tthis.uniqueSources = [];\\n\\t\\tthis.uniqueSourceIndexByFilename = {};\\n\\t}\\n\\n\\taddSource(source) {\\n\\t\\tif (source instanceof MagicString) {\\n\\t\\t\\treturn this.addSource({\\n\\t\\t\\t\\tcontent: source,\\n\\t\\t\\t\\tfilename: source.filename,\\n\\t\\t\\t\\tseparator: this.separator,\\n\\t\\t\\t});\\n\\t\\t}\\n\\n\\t\\tif (!isObject(source) || !source.content) {\\n\\t\\t\\tthrow new Error(\\n\\t\\t\\t\\t'bundle.addSource() takes an object with a `content` property, which should be an instance of MagicString, and an optional `filename`'\\n\\t\\t\\t);\\n\\t\\t}\\n\\n\\t\\t['filename', 'indentExclusionRanges', 'separator'].forEach((option) => {\\n\\t\\t\\tif (!hasOwnProp.call(source, option)) source[option] = source.content[option];\\n\\t\\t});\\n\\n\\t\\tif (source.separator === undefined) {\\n\\t\\t\\t// TODO there's a bunch of this sort of thing, needs cleaning up\\n\\t\\t\\tsource.separator = this.separator;\\n\\t\\t}\\n\\n\\t\\tif (source.filename) {\\n\\t\\t\\tif (!hasOwnProp.call(this.uniqueSourceIndexByFilename, source.filename)) {\\n\\t\\t\\t\\tthis.uniqueSourceIndexByFilename[source.filename] = this.uniqueSources.length;\\n\\t\\t\\t\\tthis.uniqueSources.push({ filename: source.filename, content: source.content.original });\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tconst uniqueSource = this.uniqueSources[this.uniqueSourceIndexByFilename[source.filename]];\\n\\t\\t\\t\\tif (source.content.original !== uniqueSource.content) {\\n\\t\\t\\t\\t\\tthrow new Error(`Illegal source: same filename (${source.filename}), different contents`);\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\tthis.sources.push(source);\\n\\t\\treturn this;\\n\\t}\\n\\n\\tappend(str, options) {\\n\\t\\tthis.addSource({\\n\\t\\t\\tcontent: new MagicString(str),\\n\\t\\t\\tseparator: (options && options.separator) || '',\\n\\t\\t});\\n\\n\\t\\treturn this;\\n\\t}\\n\\n\\tclone() {\\n\\t\\tconst bundle = new Bundle({\\n\\t\\t\\tintro: this.intro,\\n\\t\\t\\tseparator: this.separator,\\n\\t\\t});\\n\\n\\t\\tthis.sources.forEach((source) => {\\n\\t\\t\\tbundle.addSource({\\n\\t\\t\\t\\tfilename: source.filename,\\n\\t\\t\\t\\tcontent: source.content.clone(),\\n\\t\\t\\t\\tseparator: source.separator,\\n\\t\\t\\t});\\n\\t\\t});\\n\\n\\t\\treturn bundle;\\n\\t}\\n\\n\\tgenerateDecodedMap(options = {}) {\\n\\t\\tconst names = [];\\n\\t\\tthis.sources.forEach((source) => {\\n\\t\\t\\tObject.keys(source.content.storedNames).forEach((name) => {\\n\\t\\t\\t\\tif (!~names.indexOf(name)) names.push(name);\\n\\t\\t\\t});\\n\\t\\t});\\n\\n\\t\\tconst mappings = new Mappings(options.hires);\\n\\n\\t\\tif (this.intro) {\\n\\t\\t\\tmappings.advance(this.intro);\\n\\t\\t}\\n\\n\\t\\tthis.sources.forEach((source, i) => {\\n\\t\\t\\tif (i > 0) {\\n\\t\\t\\t\\tmappings.advance(this.separator);\\n\\t\\t\\t}\\n\\n\\t\\t\\tconst sourceIndex = source.filename ? this.uniqueSourceIndexByFilename[source.filename] : -1;\\n\\t\\t\\tconst magicString = source.content;\\n\\t\\t\\tconst locate = getLocator(magicString.original);\\n\\n\\t\\t\\tif (magicString.intro) {\\n\\t\\t\\t\\tmappings.advance(magicString.intro);\\n\\t\\t\\t}\\n\\n\\t\\t\\tmagicString.firstChunk.eachNext((chunk) => {\\n\\t\\t\\t\\tconst loc = locate(chunk.start);\\n\\n\\t\\t\\t\\tif (chunk.intro.length) mappings.advance(chunk.intro);\\n\\n\\t\\t\\t\\tif (source.filename) {\\n\\t\\t\\t\\t\\tif (chunk.edited) {\\n\\t\\t\\t\\t\\t\\tmappings.addEdit(\\n\\t\\t\\t\\t\\t\\t\\tsourceIndex,\\n\\t\\t\\t\\t\\t\\t\\tchunk.content,\\n\\t\\t\\t\\t\\t\\t\\tloc,\\n\\t\\t\\t\\t\\t\\t\\tchunk.storeName ? names.indexOf(chunk.original) : -1\\n\\t\\t\\t\\t\\t\\t);\\n\\t\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\tmappings.addUneditedChunk(\\n\\t\\t\\t\\t\\t\\t\\tsourceIndex,\\n\\t\\t\\t\\t\\t\\t\\tchunk,\\n\\t\\t\\t\\t\\t\\t\\tmagicString.original,\\n\\t\\t\\t\\t\\t\\t\\tloc,\\n\\t\\t\\t\\t\\t\\t\\tmagicString.sourcemapLocations\\n\\t\\t\\t\\t\\t\\t);\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\tmappings.advance(chunk.content);\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\tif (chunk.outro.length) mappings.advance(chunk.outro);\\n\\t\\t\\t});\\n\\n\\t\\t\\tif (magicString.outro) {\\n\\t\\t\\t\\tmappings.advance(magicString.outro);\\n\\t\\t\\t}\\n\\t\\t});\\n\\n\\t\\treturn {\\n\\t\\t\\tfile: options.file ? options.file.split(/[/\\\\\\\\]/).pop() : null,\\n\\t\\t\\tsources: this.uniqueSources.map((source) => {\\n\\t\\t\\t\\treturn options.file ? getRelativePath(options.file, source.filename) : source.filename;\\n\\t\\t\\t}),\\n\\t\\t\\tsourcesContent: this.uniqueSources.map((source) => {\\n\\t\\t\\t\\treturn options.includeContent ? source.content : null;\\n\\t\\t\\t}),\\n\\t\\t\\tnames,\\n\\t\\t\\tmappings: mappings.raw,\\n\\t\\t};\\n\\t}\\n\\n\\tgenerateMap(options) {\\n\\t\\treturn new SourceMap(this.generateDecodedMap(options));\\n\\t}\\n\\n\\tgetIndentString() {\\n\\t\\tconst indentStringCounts = {};\\n\\n\\t\\tthis.sources.forEach((source) => {\\n\\t\\t\\tconst indentStr = source.content._getRawIndentString();\\n\\n\\t\\t\\tif (indentStr === null) return;\\n\\n\\t\\t\\tif (!indentStringCounts[indentStr]) indentStringCounts[indentStr] = 0;\\n\\t\\t\\tindentStringCounts[indentStr] += 1;\\n\\t\\t});\\n\\n\\t\\treturn (\\n\\t\\t\\tObject.keys(indentStringCounts).sort((a, b) => {\\n\\t\\t\\t\\treturn indentStringCounts[a] - indentStringCounts[b];\\n\\t\\t\\t})[0] || '\\\\t'\\n\\t\\t);\\n\\t}\\n\\n\\tindent(indentStr) {\\n\\t\\tif (!arguments.length) {\\n\\t\\t\\tindentStr = this.getIndentString();\\n\\t\\t}\\n\\n\\t\\tif (indentStr === '') return this; // noop\\n\\n\\t\\tlet trailingNewline = !this.intro || this.intro.slice(-1) === '\\\\n';\\n\\n\\t\\tthis.sources.forEach((source, i) => {\\n\\t\\t\\tconst separator = source.separator !== undefined ? source.separator : this.separator;\\n\\t\\t\\tconst indentStart = trailingNewline || (i > 0 && /\\\\r?\\\\n$/.test(separator));\\n\\n\\t\\t\\tsource.content.indent(indentStr, {\\n\\t\\t\\t\\texclude: source.indentExclusionRanges,\\n\\t\\t\\t\\tindentStart, //: trailingNewline || /\\\\r?\\\\n$/.test( separator )  //true///\\\\r?\\\\n/.test( separator )\\n\\t\\t\\t});\\n\\n\\t\\t\\ttrailingNewline = source.content.lastChar() === '\\\\n';\\n\\t\\t});\\n\\n\\t\\tif (this.intro) {\\n\\t\\t\\tthis.intro =\\n\\t\\t\\t\\tindentStr +\\n\\t\\t\\t\\tthis.intro.replace(/^[^\\\\n]/gm, (match, index) => {\\n\\t\\t\\t\\t\\treturn index > 0 ? indentStr + match : match;\\n\\t\\t\\t\\t});\\n\\t\\t}\\n\\n\\t\\treturn this;\\n\\t}\\n\\n\\tprepend(str) {\\n\\t\\tthis.intro = str + this.intro;\\n\\t\\treturn this;\\n\\t}\\n\\n\\ttoString() {\\n\\t\\tconst body = this.sources\\n\\t\\t\\t.map((source, i) => {\\n\\t\\t\\t\\tconst separator = source.separator !== undefined ? source.separator : this.separator;\\n\\t\\t\\t\\tconst str = (i > 0 ? separator : '') + source.content.toString();\\n\\n\\t\\t\\t\\treturn str;\\n\\t\\t\\t})\\n\\t\\t\\t.join('');\\n\\n\\t\\treturn this.intro + body;\\n\\t}\\n\\n\\tisEmpty() {\\n\\t\\tif (this.intro.length && this.intro.trim()) return false;\\n\\t\\tif (this.sources.some((source) => !source.content.isEmpty())) return false;\\n\\t\\treturn true;\\n\\t}\\n\\n\\tlength() {\\n\\t\\treturn this.sources.reduce(\\n\\t\\t\\t(length, source) => length + source.content.length(),\\n\\t\\t\\tthis.intro.length\\n\\t\\t);\\n\\t}\\n\\n\\ttrimLines() {\\n\\t\\treturn this.trim('[\\\\\\\\r\\\\\\\\n]');\\n\\t}\\n\\n\\ttrim(charType) {\\n\\t\\treturn this.trimStart(charType).trimEnd(charType);\\n\\t}\\n\\n\\ttrimStart(charType) {\\n\\t\\tconst rx = new RegExp('^' + (charType || '\\\\\\\\s') + '+');\\n\\t\\tthis.intro = this.intro.replace(rx, '');\\n\\n\\t\\tif (!this.intro) {\\n\\t\\t\\tlet source;\\n\\t\\t\\tlet i = 0;\\n\\n\\t\\t\\tdo {\\n\\t\\t\\t\\tsource = this.sources[i++];\\n\\t\\t\\t\\tif (!source) {\\n\\t\\t\\t\\t\\tbreak;\\n\\t\\t\\t\\t}\\n\\t\\t\\t} while (!source.content.trimStartAborted(charType));\\n\\t\\t}\\n\\n\\t\\treturn this;\\n\\t}\\n\\n\\ttrimEnd(charType) {\\n\\t\\tconst rx = new RegExp((charType || '\\\\\\\\s') + '+$');\\n\\n\\t\\tlet source;\\n\\t\\tlet i = this.sources.length - 1;\\n\\n\\t\\tdo {\\n\\t\\t\\tsource = this.sources[i--];\\n\\t\\t\\tif (!source) {\\n\\t\\t\\t\\tthis.intro = this.intro.replace(rx, '');\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\t}\\n\\t\\t} while (!source.content.trimEndAborted(charType));\\n\\n\\t\\treturn this;\\n\\t}\\n}\\n\",\"import MagicString from './MagicString.js';\\nimport Bundle from './Bundle.js';\\nimport SourceMap from './SourceMap.js';\\n\\nMagicString.Bundle = Bundle;\\nMagicString.SourceMap = SourceMap;\\nMagicString.default = MagicString; // work around TypeScript bug https://github.com/Rich-Harris/magic-string/pull/121\\n\\nexport default MagicString;\\n\"],\"names\":[],\"mappings\":\"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\"}/dist/magic-string.es.mjsńTimport { encode } from '@jridgewell/sourcemap-codec';\n\nclass BitSet {\n\tconstructor(arg) {\n\t\tthis.bits = arg instanceof BitSet ? arg.bits.slice() : [];\n\t}\n\n\tadd(n) {\n\t\tthis.bits[n >> 5] |= 1 << (n & 31);\n\t}\n\n\thas(n) {\n\t\treturn !!(this.bits[n >> 5] & (1 << (n & 31)));\n\t}\n}\n\nclass Chunk {\n\tconstructor(start, end, content) {\n\t\tthis.start = start;\n\t\tthis.end = end;\n\t\tthis.original = content;\n\n\t\tthis.intro = '';\n\t\tthis.outro = '';\n\n\t\tthis.content = content;\n\t\tthis.storeName = false;\n\t\tthis.edited = false;\n\n\t\t{\n\t\t\tthis.previous = null;\n\t\t\tthis.next = null;\n\t\t}\n\t}\n\n\tappendLeft(content) {\n\t\tthis.outro += content;\n\t}\n\n\tappendRight(content) {\n\t\tthis.intro = this.intro + content;\n\t}\n\n\tclone() {\n\t\tconst chunk = new Chunk(this.start, this.end, this.original);\n\n\t\tchunk.intro = this.intro;\n\t\tchunk.outro = this.outro;\n\t\tchunk.content = this.content;\n\t\tchunk.storeName = this.storeName;\n\t\tchunk.edited = this.edited;\n\n\t\treturn chunk;\n\t}\n\n\tcontains(index) {\n\t\treturn this.start < index && index < this.end;\n\t}\n\n\teachNext(fn) {\n\t\tlet chunk = this;\n\t\twhile (chunk) {\n\t\t\tfn(chunk);\n\t\t\tchunk = chunk.next;\n\t\t}\n\t}\n\n\teachPrevious(fn) {\n\t\tlet chunk = this;\n\t\twhile (chunk) {\n\t\t\tfn(chunk);\n\t\t\tchunk = chunk.previous;\n\t\t}\n\t}\n\n\tedit(content, storeName, contentOnly) {\n\t\tthis.content = content;\n\t\tif (!contentOnly) {\n\t\t\tthis.intro = '';\n\t\t\tthis.outro = '';\n\t\t}\n\t\tthis.storeName = storeName;\n\n\t\tthis.edited = true;\n\n\t\treturn this;\n\t}\n\n\tprependLeft(content) {\n\t\tthis.outro = content + this.outro;\n\t}\n\n\tprependRight(content) {\n\t\tthis.intro = content + this.intro;\n\t}\n\n\tsplit(index) {\n\t\tconst sliceIndex = index - this.start;\n\n\t\tconst originalBefore = this.original.slice(0, sliceIndex);\n\t\tconst originalAfter = this.original.slice(sliceIndex);\n\n\t\tthis.original = originalBefore;\n\n\t\tconst newChunk = new Chunk(index, this.end, originalAfter);\n\t\tnewChunk.outro = this.outro;\n\t\tthis.outro = '';\n\n\t\tthis.end = index;\n\n\t\tif (this.edited) {\n\t\t\t// TODO is this block necessary?...\n\t\t\tnewChunk.edit('', false);\n\t\t\tthis.content = '';\n\t\t} else {\n\t\t\tthis.content = originalBefore;\n\t\t}\n\n\t\tnewChunk.next = this.next;\n\t\tif (newChunk.next) newChunk.next.previous = newChunk;\n\t\tnewChunk.previous = this;\n\t\tthis.next = newChunk;\n\n\t\treturn newChunk;\n\t}\n\n\ttoString() {\n\t\treturn this.intro + this.content + this.outro;\n\t}\n\n\ttrimEnd(rx) {\n\t\tthis.outro = this.outro.replace(rx, '');\n\t\tif (this.outro.length) return true;\n\n\t\tconst trimmed = this.content.replace(rx, '');\n\n\t\tif (trimmed.length) {\n\t\t\tif (trimmed !== this.content) {\n\t\t\t\tthis.split(this.start + trimmed.length).edit('', undefined, true);\n\t\t\t}\n\t\t\treturn true;\n\t\t} else {\n\t\t\tthis.edit('', undefined, true);\n\n\t\t\tthis.intro = this.intro.replace(rx, '');\n\t\t\tif (this.intro.length) return true;\n\t\t}\n\t}\n\n\ttrimStart(rx) {\n\t\tthis.intro = this.intro.replace(rx, '');\n\t\tif (this.intro.length) return true;\n\n\t\tconst trimmed = this.content.replace(rx, '');\n\n\t\tif (trimmed.length) {\n\t\t\tif (trimmed !== this.content) {\n\t\t\t\tthis.split(this.end - trimmed.length);\n\t\t\t\tthis.edit('', undefined, true);\n\t\t\t}\n\t\t\treturn true;\n\t\t} else {\n\t\t\tthis.edit('', undefined, true);\n\n\t\t\tthis.outro = this.outro.replace(rx, '');\n\t\t\tif (this.outro.length) return true;\n\t\t}\n\t}\n}\n\nfunction getBtoa () {\n\tif (typeof window !== 'undefined' && typeof window.btoa === 'function') {\n\t\treturn (str) => window.btoa(unescape(encodeURIComponent(str)));\n\t} else if (typeof Buffer === 'function') {\n\t\treturn (str) => Buffer.from(str, 'utf-8').toString('base64');\n\t} else {\n\t\treturn () => {\n\t\t\tthrow new Error('Unsupported environment: `window.btoa` or `Buffer` should be supported.');\n\t\t};\n\t}\n}\n\nconst btoa = /*#__PURE__*/ getBtoa();\n\nclass SourceMap {\n\tconstructor(properties) {\n\t\tthis.version = 3;\n\t\tthis.file = properties.file;\n\t\tthis.sources = properties.sources;\n\t\tthis.sourcesContent = properties.sourcesContent;\n\t\tthis.names = properties.names;\n\t\tthis.mappings = encode(properties.mappings);\n\t}\n\n\ttoString() {\n\t\treturn JSON.stringify(this);\n\t}\n\n\ttoUrl() {\n\t\treturn 'data:application/json;charset=utf-8;base64,' + btoa(this.toString());\n\t}\n}\n\nfunction guessIndent(code) {\n\tconst lines = code.split('\\n');\n\n\tconst tabbed = lines.filter((line) => /^\\t+/.test(line));\n\tconst spaced = lines.filter((line) => /^ {2,}/.test(line));\n\n\tif (tabbed.length === 0 && spaced.length === 0) {\n\t\treturn null;\n\t}\n\n\t// More lines tabbed than spaced? Assume tabs, and\n\t// default to tabs in the case of a tie (or nothing\n\t// to go on)\n\tif (tabbed.length >= spaced.length) {\n\t\treturn '\\t';\n\t}\n\n\t// Otherwise, we need to guess the multiple\n\tconst min = spaced.reduce((previous, current) => {\n\t\tconst numSpaces = /^ +/.exec(current)[0].length;\n\t\treturn Math.min(numSpaces, previous);\n\t}, Infinity);\n\n\treturn new Array(min + 1).join(' ');\n}\n\nfunction getRelativePath(from, to) {\n\tconst fromParts = from.split(/[/\\\\]/);\n\tconst toParts = to.split(/[/\\\\]/);\n\n\tfromParts.pop(); // get dirname\n\n\twhile (fromParts[0] === toParts[0]) {\n\t\tfromParts.shift();\n\t\ttoParts.shift();\n\t}\n\n\tif (fromParts.length) {\n\t\tlet i = fromParts.length;\n\t\twhile (i--) fromParts[i] = '..';\n\t}\n\n\treturn fromParts.concat(toParts).join('/');\n}\n\nconst toString = Object.prototype.toString;\n\nfunction isObject(thing) {\n\treturn toString.call(thing) === '[object Object]';\n}\n\nfunction getLocator(source) {\n\tconst originalLines = source.split('\\n');\n\tconst lineOffsets = [];\n\n\tfor (let i = 0, pos = 0; i < originalLines.length; i++) {\n\t\tlineOffsets.push(pos);\n\t\tpos += originalLines[i].length + 1;\n\t}\n\n\treturn function locate(index) {\n\t\tlet i = 0;\n\t\tlet j = lineOffsets.length;\n\t\twhile (i < j) {\n\t\t\tconst m = (i + j) >> 1;\n\t\t\tif (index < lineOffsets[m]) {\n\t\t\t\tj = m;\n\t\t\t} else {\n\t\t\t\ti = m + 1;\n\t\t\t}\n\t\t}\n\t\tconst line = i - 1;\n\t\tconst column = index - lineOffsets[line];\n\t\treturn { line, column };\n\t};\n}\n\nclass Mappings {\n\tconstructor(hires) {\n\t\tthis.hires = hires;\n\t\tthis.generatedCodeLine = 0;\n\t\tthis.generatedCodeColumn = 0;\n\t\tthis.raw = [];\n\t\tthis.rawSegments = this.raw[this.generatedCodeLine] = [];\n\t\tthis.pending = null;\n\t}\n\n\taddEdit(sourceIndex, content, loc, nameIndex) {\n\t\tif (content.length) {\n\t\t\tconst segment = [this.generatedCodeColumn, sourceIndex, loc.line, loc.column];\n\t\t\tif (nameIndex >= 0) {\n\t\t\t\tsegment.push(nameIndex);\n\t\t\t}\n\t\t\tthis.rawSegments.push(segment);\n\t\t} else if (this.pending) {\n\t\t\tthis.rawSegments.push(this.pending);\n\t\t}\n\n\t\tthis.advance(content);\n\t\tthis.pending = null;\n\t}\n\n\taddUneditedChunk(sourceIndex, chunk, original, loc, sourcemapLocations) {\n\t\tlet originalCharIndex = chunk.start;\n\t\tlet first = true;\n\n\t\twhile (originalCharIndex < chunk.end) {\n\t\t\tif (this.hires || first || sourcemapLocations.has(originalCharIndex)) {\n\t\t\t\tthis.rawSegments.push([this.generatedCodeColumn, sourceIndex, loc.line, loc.column]);\n\t\t\t}\n\n\t\t\tif (original[originalCharIndex] === '\\n') {\n\t\t\t\tloc.line += 1;\n\t\t\t\tloc.column = 0;\n\t\t\t\tthis.generatedCodeLine += 1;\n\t\t\t\tthis.raw[this.generatedCodeLine] = this.rawSegments = [];\n\t\t\t\tthis.generatedCodeColumn = 0;\n\t\t\t\tfirst = true;\n\t\t\t} else {\n\t\t\t\tloc.column += 1;\n\t\t\t\tthis.generatedCodeColumn += 1;\n\t\t\t\tfirst = false;\n\t\t\t}\n\n\t\t\toriginalCharIndex += 1;\n\t\t}\n\n\t\tthis.pending = null;\n\t}\n\n\tadvance(str) {\n\t\tif (!str) return;\n\n\t\tconst lines = str.split('\\n');\n\n\t\tif (lines.length > 1) {\n\t\t\tfor (let i = 0; i < lines.length - 1; i++) {\n\t\t\t\tthis.generatedCodeLine++;\n\t\t\t\tthis.raw[this.generatedCodeLine] = this.rawSegments = [];\n\t\t\t}\n\t\t\tthis.generatedCodeColumn = 0;\n\t\t}\n\n\t\tthis.generatedCodeColumn += lines[lines.length - 1].length;\n\t}\n}\n\nconst n = '\\n';\n\nconst warned = {\n\tinsertLeft: false,\n\tinsertRight: false,\n\tstoreName: false,\n};\n\nclass MagicString {\n\tconstructor(string, options = {}) {\n\t\tconst chunk = new Chunk(0, string.length, string);\n\n\t\tObject.defineProperties(this, {\n\t\t\toriginal: { writable: true, value: string },\n\t\t\toutro: { writable: true, value: '' },\n\t\t\tintro: { writable: true, value: '' },\n\t\t\tfirstChunk: { writable: true, value: chunk },\n\t\t\tlastChunk: { writable: true, value: chunk },\n\t\t\tlastSearchedChunk: { writable: true, value: chunk },\n\t\t\tbyStart: { writable: true, value: {} },\n\t\t\tbyEnd: { writable: true, value: {} },\n\t\t\tfilename: { writable: true, value: options.filename },\n\t\t\tindentExclusionRanges: { writable: true, value: options.indentExclusionRanges },\n\t\t\tsourcemapLocations: { writable: true, value: new BitSet() },\n\t\t\tstoredNames: { writable: true, value: {} },\n\t\t\tindentStr: { writable: true, value: undefined },\n\t\t});\n\n\t\tthis.byStart[0] = chunk;\n\t\tthis.byEnd[string.length] = chunk;\n\t}\n\n\taddSourcemapLocation(char) {\n\t\tthis.sourcemapLocations.add(char);\n\t}\n\n\tappend(content) {\n\t\tif (typeof content !== 'string') throw new TypeError('outro content must be a string');\n\n\t\tthis.outro += content;\n\t\treturn this;\n\t}\n\n\tappendLeft(index, content) {\n\t\tif (typeof content !== 'string') throw new TypeError('inserted content must be a string');\n\n\t\tthis._split(index);\n\n\t\tconst chunk = this.byEnd[index];\n\n\t\tif (chunk) {\n\t\t\tchunk.appendLeft(content);\n\t\t} else {\n\t\t\tthis.intro += content;\n\t\t}\n\t\treturn this;\n\t}\n\n\tappendRight(index, content) {\n\t\tif (typeof content !== 'string') throw new TypeError('inserted content must be a string');\n\n\t\tthis._split(index);\n\n\t\tconst chunk = this.byStart[index];\n\n\t\tif (chunk) {\n\t\t\tchunk.appendRight(content);\n\t\t} else {\n\t\t\tthis.outro += content;\n\t\t}\n\t\treturn this;\n\t}\n\n\tclone() {\n\t\tconst cloned = new MagicString(this.original, { filename: this.filename });\n\n\t\tlet originalChunk = this.firstChunk;\n\t\tlet clonedChunk = (cloned.firstChunk = cloned.lastSearchedChunk = originalChunk.clone());\n\n\t\twhile (originalChunk) {\n\t\t\tcloned.byStart[clonedChunk.start] = clonedChunk;\n\t\t\tcloned.byEnd[clonedChunk.end] = clonedChunk;\n\n\t\t\tconst nextOriginalChunk = originalChunk.next;\n\t\t\tconst nextClonedChunk = nextOriginalChunk && nextOriginalChunk.clone();\n\n\t\t\tif (nextClonedChunk) {\n\t\t\t\tclonedChunk.next = nextClonedChunk;\n\t\t\t\tnextClonedChunk.previous = clonedChunk;\n\n\t\t\t\tclonedChunk = nextClonedChunk;\n\t\t\t}\n\n\t\t\toriginalChunk = nextOriginalChunk;\n\t\t}\n\n\t\tcloned.lastChunk = clonedChunk;\n\n\t\tif (this.indentExclusionRanges) {\n\t\t\tcloned.indentExclusionRanges = this.indentExclusionRanges.slice();\n\t\t}\n\n\t\tcloned.sourcemapLocations = new BitSet(this.sourcemapLocations);\n\n\t\tcloned.intro = this.intro;\n\t\tcloned.outro = this.outro;\n\n\t\treturn cloned;\n\t}\n\n\tgenerateDecodedMap(options) {\n\t\toptions = options || {};\n\n\t\tconst sourceIndex = 0;\n\t\tconst names = Object.keys(this.storedNames);\n\t\tconst mappings = new Mappings(options.hires);\n\n\t\tconst locate = getLocator(this.original);\n\n\t\tif (this.intro) {\n\t\t\tmappings.advance(this.intro);\n\t\t}\n\n\t\tthis.firstChunk.eachNext((chunk) => {\n\t\t\tconst loc = locate(chunk.start);\n\n\t\t\tif (chunk.intro.length) mappings.advance(chunk.intro);\n\n\t\t\tif (chunk.edited) {\n\t\t\t\tmappings.addEdit(\n\t\t\t\t\tsourceIndex,\n\t\t\t\t\tchunk.content,\n\t\t\t\t\tloc,\n\t\t\t\t\tchunk.storeName ? names.indexOf(chunk.original) : -1\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tmappings.addUneditedChunk(sourceIndex, chunk, this.original, loc, this.sourcemapLocations);\n\t\t\t}\n\n\t\t\tif (chunk.outro.length) mappings.advance(chunk.outro);\n\t\t});\n\n\t\treturn {\n\t\t\tfile: options.file ? options.file.split(/[/\\\\]/).pop() : null,\n\t\t\tsources: [options.source ? getRelativePath(options.file || '', options.source) : null],\n\t\t\tsourcesContent: options.includeContent ? [this.original] : [null],\n\t\t\tnames,\n\t\t\tmappings: mappings.raw,\n\t\t};\n\t}\n\n\tgenerateMap(options) {\n\t\treturn new SourceMap(this.generateDecodedMap(options));\n\t}\n\n\t_ensureindentStr() {\n\t\tif (this.indentStr === undefined) {\n\t\t\tthis.indentStr = guessIndent(this.original);\n\t\t}\n\t}\n\n\t_getRawIndentString() {\n\t\tthis._ensureindentStr();\n\t\treturn this.indentStr;\n\t}\n\n\tgetIndentString() {\n\t\tthis._ensureindentStr();\n\t\treturn this.indentStr === null ? '\\t' : this.indentStr;\n\t}\n\n\tindent(indentStr, options) {\n\t\tconst pattern = /^[^\\r\\n]/gm;\n\n\t\tif (isObject(indentStr)) {\n\t\t\toptions = indentStr;\n\t\t\tindentStr = undefined;\n\t\t}\n\n\t\tif (indentStr === undefined) {\n\t\t\tthis._ensureindentStr();\n\t\t\tindentStr = this.indentStr || '\\t';\n\t\t}\n\n\t\tif (indentStr === '') return this; // noop\n\n\t\toptions = options || {};\n\n\t\t// Process exclusion ranges\n\t\tconst isExcluded = {};\n\n\t\tif (options.exclude) {\n\t\t\tconst exclusions =\n\t\t\t\ttypeof options.exclude[0] === 'number' ? [options.exclude] : options.exclude;\n\t\t\texclusions.forEach((exclusion) => {\n\t\t\t\tfor (let i = exclusion[0]; i < exclusion[1]; i += 1) {\n\t\t\t\t\tisExcluded[i] = true;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tlet shouldIndentNextCharacter = options.indentStart !== false;\n\t\tconst replacer = (match) => {\n\t\t\tif (shouldIndentNextCharacter) return `${indentStr}${match}`;\n\t\t\tshouldIndentNextCharacter = true;\n\t\t\treturn match;\n\t\t};\n\n\t\tthis.intro = this.intro.replace(pattern, replacer);\n\n\t\tlet charIndex = 0;\n\t\tlet chunk = this.firstChunk;\n\n\t\twhile (chunk) {\n\t\t\tconst end = chunk.end;\n\n\t\t\tif (chunk.edited) {\n\t\t\t\tif (!isExcluded[charIndex]) {\n\t\t\t\t\tchunk.content = chunk.content.replace(pattern, replacer);\n\n\t\t\t\t\tif (chunk.content.length) {\n\t\t\t\t\t\tshouldIndentNextCharacter = chunk.content[chunk.content.length - 1] === '\\n';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcharIndex = chunk.start;\n\n\t\t\t\twhile (charIndex < end) {\n\t\t\t\t\tif (!isExcluded[charIndex]) {\n\t\t\t\t\t\tconst char = this.original[charIndex];\n\n\t\t\t\t\t\tif (char === '\\n') {\n\t\t\t\t\t\t\tshouldIndentNextCharacter = true;\n\t\t\t\t\t\t} else if (char !== '\\r' && shouldIndentNextCharacter) {\n\t\t\t\t\t\t\tshouldIndentNextCharacter = false;\n\n\t\t\t\t\t\t\tif (charIndex === chunk.start) {\n\t\t\t\t\t\t\t\tchunk.prependRight(indentStr);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis._splitChunk(chunk, charIndex);\n\t\t\t\t\t\t\t\tchunk = chunk.next;\n\t\t\t\t\t\t\t\tchunk.prependRight(indentStr);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tcharIndex += 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcharIndex = chunk.end;\n\t\t\tchunk = chunk.next;\n\t\t}\n\n\t\tthis.outro = this.outro.replace(pattern, replacer);\n\n\t\treturn this;\n\t}\n\n\tinsert() {\n\t\tthrow new Error(\n\t\t\t'magicString.insert(...) is deprecated. Use prependRight(...) or appendLeft(...)'\n\t\t);\n\t}\n\n\tinsertLeft(index, content) {\n\t\tif (!warned.insertLeft) {\n\t\t\tconsole.warn(\n\t\t\t\t'magicString.insertLeft(...) is deprecated. Use magicString.appendLeft(...) instead'\n\t\t\t); // eslint-disable-line no-console\n\t\t\twarned.insertLeft = true;\n\t\t}\n\n\t\treturn this.appendLeft(index, content);\n\t}\n\n\tinsertRight(index, content) {\n\t\tif (!warned.insertRight) {\n\t\t\tconsole.warn(\n\t\t\t\t'magicString.insertRight(...) is deprecated. Use magicString.prependRight(...) instead'\n\t\t\t); // eslint-disable-line no-console\n\t\t\twarned.insertRight = true;\n\t\t}\n\n\t\treturn this.prependRight(index, content);\n\t}\n\n\tmove(start, end, index) {\n\t\tif (index >= start && index <= end) throw new Error('Cannot move a selection inside itself');\n\n\t\tthis._split(start);\n\t\tthis._split(end);\n\t\tthis._split(index);\n\n\t\tconst first = this.byStart[start];\n\t\tconst last = this.byEnd[end];\n\n\t\tconst oldLeft = first.previous;\n\t\tconst oldRight = last.next;\n\n\t\tconst newRight = this.byStart[index];\n\t\tif (!newRight && last === this.lastChunk) return this;\n\t\tconst newLeft = newRight ? newRight.previous : this.lastChunk;\n\n\t\tif (oldLeft) oldLeft.next = oldRight;\n\t\tif (oldRight) oldRight.previous = oldLeft;\n\n\t\tif (newLeft) newLeft.next = first;\n\t\tif (newRight) newRight.previous = last;\n\n\t\tif (!first.previous) this.firstChunk = last.next;\n\t\tif (!last.next) {\n\t\t\tthis.lastChunk = first.previous;\n\t\t\tthis.lastChunk.next = null;\n\t\t}\n\n\t\tfirst.previous = newLeft;\n\t\tlast.next = newRight || null;\n\n\t\tif (!newLeft) this.firstChunk = first;\n\t\tif (!newRight) this.lastChunk = last;\n\t\treturn this;\n\t}\n\n\toverwrite(start, end, content, options) {\n\t\toptions = options || {};\n\t\treturn this.update(start, end, content, { ...options, overwrite: !options.contentOnly });\n\t}\n\n\tupdate(start, end, content, options) {\n\t\tif (typeof content !== 'string') throw new TypeError('replacement content must be a string');\n\n\t\twhile (start < 0) start += this.original.length;\n\t\twhile (end < 0) end += this.original.length;\n\n\t\tif (end > this.original.length) throw new Error('end is out of bounds');\n\t\tif (start === end)\n\t\t\tthrow new Error(\n\t\t\t\t'Cannot overwrite a zero-length range – use appendLeft or prependRight instead'\n\t\t\t);\n\n\t\tthis._split(start);\n\t\tthis._split(end);\n\n\t\tif (options === true) {\n\t\t\tif (!warned.storeName) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t'The final argument to magicString.overwrite(...) should be an options object. See https://github.com/rich-harris/magic-string'\n\t\t\t\t); // eslint-disable-line no-console\n\t\t\t\twarned.storeName = true;\n\t\t\t}\n\n\t\t\toptions = { storeName: true };\n\t\t}\n\t\tconst storeName = options !== undefined ? options.storeName : false;\n\t\tconst overwrite = options !== undefined ? options.overwrite : false;\n\n\t\tif (storeName) {\n\t\t\tconst original = this.original.slice(start, end);\n\t\t\tObject.defineProperty(this.storedNames, original, {\n\t\t\t\twritable: true,\n\t\t\t\tvalue: true,\n\t\t\t\tenumerable: true,\n\t\t\t});\n\t\t}\n\n\t\tconst first = this.byStart[start];\n\t\tconst last = this.byEnd[end];\n\n\t\tif (first) {\n\t\t\tlet chunk = first;\n\t\t\twhile (chunk !== last) {\n\t\t\t\tif (chunk.next !== this.byStart[chunk.end]) {\n\t\t\t\t\tthrow new Error('Cannot overwrite across a split point');\n\t\t\t\t}\n\t\t\t\tchunk = chunk.next;\n\t\t\t\tchunk.edit('', false);\n\t\t\t}\n\n\t\t\tfirst.edit(content, storeName, !overwrite);\n\t\t} else {\n\t\t\t// must be inserting at the end\n\t\t\tconst newChunk = new Chunk(start, end, '').edit(content, storeName);\n\n\t\t\t// TODO last chunk in the array may not be the last chunk, if it's moved...\n\t\t\tlast.next = newChunk;\n\t\t\tnewChunk.previous = last;\n\t\t}\n\t\treturn this;\n\t}\n\n\tprepend(content) {\n\t\tif (typeof content !== 'string') throw new TypeError('outro content must be a string');\n\n\t\tthis.intro = content + this.intro;\n\t\treturn this;\n\t}\n\n\tprependLeft(index, content) {\n\t\tif (typeof content !== 'string') throw new TypeError('inserted content must be a string');\n\n\t\tthis._split(index);\n\n\t\tconst chunk = this.byEnd[index];\n\n\t\tif (chunk) {\n\t\t\tchunk.prependLeft(content);\n\t\t} else {\n\t\t\tthis.intro = content + this.intro;\n\t\t}\n\t\treturn this;\n\t}\n\n\tprependRight(index, content) {\n\t\tif (typeof content !== 'string') throw new TypeError('inserted content must be a string');\n\n\t\tthis._split(index);\n\n\t\tconst chunk = this.byStart[index];\n\n\t\tif (chunk) {\n\t\t\tchunk.prependRight(content);\n\t\t} else {\n\t\t\tthis.outro = content + this.outro;\n\t\t}\n\t\treturn this;\n\t}\n\n\tremove(start, end) {\n\t\twhile (start < 0) start += this.original.length;\n\t\twhile (end < 0) end += this.original.length;\n\n\t\tif (start === end) return this;\n\n\t\tif (start < 0 || end > this.original.length) throw new Error('Character is out of bounds');\n\t\tif (start > end) throw new Error('end must be greater than start');\n\n\t\tthis._split(start);\n\t\tthis._split(end);\n\n\t\tlet chunk = this.byStart[start];\n\n\t\twhile (chunk) {\n\t\t\tchunk.intro = '';\n\t\t\tchunk.outro = '';\n\t\t\tchunk.edit('');\n\n\t\t\tchunk = end > chunk.end ? this.byStart[chunk.end] : null;\n\t\t}\n\t\treturn this;\n\t}\n\n\tlastChar() {\n\t\tif (this.outro.length) return this.outro[this.outro.length - 1];\n\t\tlet chunk = this.lastChunk;\n\t\tdo {\n\t\t\tif (chunk.outro.length) return chunk.outro[chunk.outro.length - 1];\n\t\t\tif (chunk.content.length) return chunk.content[chunk.content.length - 1];\n\t\t\tif (chunk.intro.length) return chunk.intro[chunk.intro.length - 1];\n\t\t} while ((chunk = chunk.previous));\n\t\tif (this.intro.length) return this.intro[this.intro.length - 1];\n\t\treturn '';\n\t}\n\n\tlastLine() {\n\t\tlet lineIndex = this.outro.lastIndexOf(n);\n\t\tif (lineIndex !== -1) return this.outro.substr(lineIndex + 1);\n\t\tlet lineStr = this.outro;\n\t\tlet chunk = this.lastChunk;\n\t\tdo {\n\t\t\tif (chunk.outro.length > 0) {\n\t\t\t\tlineIndex = chunk.outro.lastIndexOf(n);\n\t\t\t\tif (lineIndex !== -1) return chunk.outro.substr(lineIndex + 1) + lineStr;\n\t\t\t\tlineStr = chunk.outro + lineStr;\n\t\t\t}\n\n\t\t\tif (chunk.content.length > 0) {\n\t\t\t\tlineIndex = chunk.content.lastIndexOf(n);\n\t\t\t\tif (lineIndex !== -1) return chunk.content.substr(lineIndex + 1) + lineStr;\n\t\t\t\tlineStr = chunk.content + lineStr;\n\t\t\t}\n\n\t\t\tif (chunk.intro.length > 0) {\n\t\t\t\tlineIndex = chunk.intro.lastIndexOf(n);\n\t\t\t\tif (lineIndex !== -1) return chunk.intro.substr(lineIndex + 1) + lineStr;\n\t\t\t\tlineStr = chunk.intro + lineStr;\n\t\t\t}\n\t\t} while ((chunk = chunk.previous));\n\t\tlineIndex = this.intro.lastIndexOf(n);\n\t\tif (lineIndex !== -1) return this.intro.substr(lineIndex + 1) + lineStr;\n\t\treturn this.intro + lineStr;\n\t}\n\n\tslice(start = 0, end = this.original.length) {\n\t\twhile (start < 0) start += this.original.length;\n\t\twhile (end < 0) end += this.original.length;\n\n\t\tlet result = '';\n\n\t\t// find start chunk\n\t\tlet chunk = this.firstChunk;\n\t\twhile (chunk && (chunk.start > start || chunk.end <= start)) {\n\t\t\t// found end chunk before start\n\t\t\tif (chunk.start < end && chunk.end >= end) {\n\t\t\t\treturn result;\n\t\t\t}\n\n\t\t\tchunk = chunk.next;\n\t\t}\n\n\t\tif (chunk && chunk.edited && chunk.start !== start)\n\t\t\tthrow new Error(`Cannot use replaced character ${start} as slice start anchor.`);\n\n\t\tconst startChunk = chunk;\n\t\twhile (chunk) {\n\t\t\tif (chunk.intro && (startChunk !== chunk || chunk.start === start)) {\n\t\t\t\tresult += chunk.intro;\n\t\t\t}\n\n\t\t\tconst containsEnd = chunk.start < end && chunk.end >= end;\n\t\t\tif (containsEnd && chunk.edited && chunk.end !== end)\n\t\t\t\tthrow new Error(`Cannot use replaced character ${end} as slice end anchor.`);\n\n\t\t\tconst sliceStart = startChunk === chunk ? start - chunk.start : 0;\n\t\t\tconst sliceEnd = containsEnd ? chunk.content.length + end - chunk.end : chunk.content.length;\n\n\t\t\tresult += chunk.content.slice(sliceStart, sliceEnd);\n\n\t\t\tif (chunk.outro && (!containsEnd || chunk.end === end)) {\n\t\t\t\tresult += chunk.outro;\n\t\t\t}\n\n\t\t\tif (containsEnd) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tchunk = chunk.next;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t// TODO deprecate this? not really very useful\n\tsnip(start, end) {\n\t\tconst clone = this.clone();\n\t\tclone.remove(0, start);\n\t\tclone.remove(end, clone.original.length);\n\n\t\treturn clone;\n\t}\n\n\t_split(index) {\n\t\tif (this.byStart[index] || this.byEnd[index]) return;\n\n\t\tlet chunk = this.lastSearchedChunk;\n\t\tconst searchForward = index > chunk.end;\n\n\t\twhile (chunk) {\n\t\t\tif (chunk.contains(index)) return this._splitChunk(chunk, index);\n\n\t\t\tchunk = searchForward ? this.byStart[chunk.end] : this.byEnd[chunk.start];\n\t\t}\n\t}\n\n\t_splitChunk(chunk, index) {\n\t\tif (chunk.edited && chunk.content.length) {\n\t\t\t// zero-length edited chunks are a special case (overlapping replacements)\n\t\t\tconst loc = getLocator(this.original)(index);\n\t\t\tthrow new Error(\n\t\t\t\t`Cannot split a chunk that has already been edited (${loc.line}:${loc.column} – \"${chunk.original}\")`\n\t\t\t);\n\t\t}\n\n\t\tconst newChunk = chunk.split(index);\n\n\t\tthis.byEnd[index] = chunk;\n\t\tthis.byStart[index] = newChunk;\n\t\tthis.byEnd[newChunk.end] = newChunk;\n\n\t\tif (chunk === this.lastChunk) this.lastChunk = newChunk;\n\n\t\tthis.lastSearchedChunk = chunk;\n\t\treturn true;\n\t}\n\n\ttoString() {\n\t\tlet str = this.intro;\n\n\t\tlet chunk = this.firstChunk;\n\t\twhile (chunk) {\n\t\t\tstr += chunk.toString();\n\t\t\tchunk = chunk.next;\n\t\t}\n\n\t\treturn str + this.outro;\n\t}\n\n\tisEmpty() {\n\t\tlet chunk = this.firstChunk;\n\t\tdo {\n\t\t\tif (\n\t\t\t\t(chunk.intro.length && chunk.intro.trim()) ||\n\t\t\t\t(chunk.content.length && chunk.content.trim()) ||\n\t\t\t\t(chunk.outro.length && chunk.outro.trim())\n\t\t\t)\n\t\t\t\treturn false;\n\t\t} while ((chunk = chunk.next));\n\t\treturn true;\n\t}\n\n\tlength() {\n\t\tlet chunk = this.firstChunk;\n\t\tlet length = 0;\n\t\tdo {\n\t\t\tlength += chunk.intro.length + chunk.content.length + chunk.outro.length;\n\t\t} while ((chunk = chunk.next));\n\t\treturn length;\n\t}\n\n\ttrimLines() {\n\t\treturn this.trim('[\\\\r\\\\n]');\n\t}\n\n\ttrim(charType) {\n\t\treturn this.trimStart(charType).trimEnd(charType);\n\t}\n\n\ttrimEndAborted(charType) {\n\t\tconst rx = new RegExp((charType || '\\\\s') + '+$');\n\n\t\tthis.outro = this.outro.replace(rx, '');\n\t\tif (this.outro.length) return true;\n\n\t\tlet chunk = this.lastChunk;\n\n\t\tdo {\n\t\t\tconst end = chunk.end;\n\t\t\tconst aborted = chunk.trimEnd(rx);\n\n\t\t\t// if chunk was trimmed, we have a new lastChunk\n\t\t\tif (chunk.end !== end) {\n\t\t\t\tif (this.lastChunk === chunk) {\n\t\t\t\t\tthis.lastChunk = chunk.next;\n\t\t\t\t}\n\n\t\t\t\tthis.byEnd[chunk.end] = chunk;\n\t\t\t\tthis.byStart[chunk.next.start] = chunk.next;\n\t\t\t\tthis.byEnd[chunk.next.end] = chunk.next;\n\t\t\t}\n\n\t\t\tif (aborted) return true;\n\t\t\tchunk = chunk.previous;\n\t\t} while (chunk);\n\n\t\treturn false;\n\t}\n\n\ttrimEnd(charType) {\n\t\tthis.trimEndAborted(charType);\n\t\treturn this;\n\t}\n\ttrimStartAborted(charType) {\n\t\tconst rx = new RegExp('^' + (charType || '\\\\s') + '+');\n\n\t\tthis.intro = this.intro.replace(rx, '');\n\t\tif (this.intro.length) return true;\n\n\t\tlet chunk = this.firstChunk;\n\n\t\tdo {\n\t\t\tconst end = chunk.end;\n\t\t\tconst aborted = chunk.trimStart(rx);\n\n\t\t\tif (chunk.end !== end) {\n\t\t\t\t// special case...\n\t\t\t\tif (chunk === this.lastChunk) this.lastChunk = chunk.next;\n\n\t\t\t\tthis.byEnd[chunk.end] = chunk;\n\t\t\t\tthis.byStart[chunk.next.start] = chunk.next;\n\t\t\t\tthis.byEnd[chunk.next.end] = chunk.next;\n\t\t\t}\n\n\t\t\tif (aborted) return true;\n\t\t\tchunk = chunk.next;\n\t\t} while (chunk);\n\n\t\treturn false;\n\t}\n\n\ttrimStart(charType) {\n\t\tthis.trimStartAborted(charType);\n\t\treturn this;\n\t}\n\n\thasChanged() {\n\t\treturn this.original !== this.toString();\n\t}\n\n\t_replaceRegexp(searchValue, replacement) {\n\t\tfunction getReplacement(match, str) {\n\t\t\tif (typeof replacement === 'string') {\n\t\t\t\treturn replacement.replace(/\\$(\\$|&|\\d+)/g, (_, i) => {\n\t\t\t\t\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace#specifying_a_string_as_a_parameter\n\t\t\t\t\tif (i === '$') return '$';\n\t\t\t\t\tif (i === '&') return match[0];\n\t\t\t\t\tconst num = +i;\n\t\t\t\t\tif (num < match.length) return match[+i];\n\t\t\t\t\treturn `$${i}`;\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\treturn replacement(...match, match.index, str, match.groups);\n\t\t\t}\n\t\t}\n\t\tfunction matchAll(re, str) {\n\t\t\tlet match;\n\t\t\tconst matches = [];\n\t\t\twhile ((match = re.exec(str))) {\n\t\t\t\tmatches.push(match);\n\t\t\t}\n\t\t\treturn matches;\n\t\t}\n\t\tif (searchValue.global) {\n\t\t\tconst matches = matchAll(searchValue, this.original);\n\t\t\tmatches.forEach((match) => {\n\t\t\t\tif (match.index != null)\n\t\t\t\t\tthis.overwrite(\n\t\t\t\t\t\tmatch.index,\n\t\t\t\t\t\tmatch.index + match[0].length,\n\t\t\t\t\t\tgetReplacement(match, this.original)\n\t\t\t\t\t);\n\t\t\t});\n\t\t} else {\n\t\t\tconst match = this.original.match(searchValue);\n\t\t\tif (match && match.index != null)\n\t\t\t\tthis.overwrite(\n\t\t\t\t\tmatch.index,\n\t\t\t\t\tmatch.index + match[0].length,\n\t\t\t\t\tgetReplacement(match, this.original)\n\t\t\t\t);\n\t\t}\n\t\treturn this;\n\t}\n\n\t_replaceString(string, replacement) {\n\t\tconst { original } = this;\n\t\tconst index = original.indexOf(string);\n\n\t\tif (index !== -1) {\n\t\t\tthis.overwrite(index, index + string.length, replacement);\n\t\t}\n\n\t\treturn this;\n\t}\n\n\treplace(searchValue, replacement) {\n\t\tif (typeof searchValue === 'string') {\n\t\t\treturn this._replaceString(searchValue, replacement);\n\t\t}\n\n\t\treturn this._replaceRegexp(searchValue, replacement);\n\t}\n\n\t_replaceAllString(string, replacement) {\n\t\tconst { original } = this;\n\t\tconst stringLength = string.length;\n\t\tfor (\n\t\t\tlet index = original.indexOf(string);\n\t\t\tindex !== -1;\n\t\t\tindex = original.indexOf(string, index + stringLength)\n\t\t) {\n\t\t\tthis.overwrite(index, index + stringLength, replacement);\n\t\t}\n\n\t\treturn this;\n\t}\n\n\treplaceAll(searchValue, replacement) {\n\t\tif (typeof searchValue === 'string') {\n\t\t\treturn this._replaceAllString(searchValue, replacement);\n\t\t}\n\n\t\tif (!searchValue.global) {\n\t\t\tthrow new TypeError(\n\t\t\t\t'MagicString.prototype.replaceAll called with a non-global RegExp argument'\n\t\t\t);\n\t\t}\n\n\t\treturn this._replaceRegexp(searchValue, replacement);\n\t}\n}\n\nconst hasOwnProp = Object.prototype.hasOwnProperty;\n\nclass Bundle {\n\tconstructor(options = {}) {\n\t\tthis.intro = options.intro || '';\n\t\tthis.separator = options.separator !== undefined ? options.separator : '\\n';\n\t\tthis.sources = [];\n\t\tthis.uniqueSources = [];\n\t\tthis.uniqueSourceIndexByFilename = {};\n\t}\n\n\taddSource(source) {\n\t\tif (source instanceof MagicString) {\n\t\t\treturn this.addSource({\n\t\t\t\tcontent: source,\n\t\t\t\tfilename: source.filename,\n\t\t\t\tseparator: this.separator,\n\t\t\t});\n\t\t}\n\n\t\tif (!isObject(source) || !source.content) {\n\t\t\tthrow new Error(\n\t\t\t\t'bundle.addSource() takes an object with a `content` property, which should be an instance of MagicString, and an optional `filename`'\n\t\t\t);\n\t\t}\n\n\t\t['filename', 'indentExclusionRanges', 'separator'].forEach((option) => {\n\t\t\tif (!hasOwnProp.call(source, option)) source[option] = source.content[option];\n\t\t});\n\n\t\tif (source.separator === undefined) {\n\t\t\t// TODO there's a bunch of this sort of thing, needs cleaning up\n\t\t\tsource.separator = this.separator;\n\t\t}\n\n\t\tif (source.filename) {\n\t\t\tif (!hasOwnProp.call(this.uniqueSourceIndexByFilename, source.filename)) {\n\t\t\t\tthis.uniqueSourceIndexByFilename[source.filename] = this.uniqueSources.length;\n\t\t\t\tthis.uniqueSources.push({ filename: source.filename, content: source.content.original });\n\t\t\t} else {\n\t\t\t\tconst uniqueSource = this.uniqueSources[this.uniqueSourceIndexByFilename[source.filename]];\n\t\t\t\tif (source.content.original !== uniqueSource.content) {\n\t\t\t\t\tthrow new Error(`Illegal source: same filename (${source.filename}), different contents`);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.sources.push(source);\n\t\treturn this;\n\t}\n\n\tappend(str, options) {\n\t\tthis.addSource({\n\t\t\tcontent: new MagicString(str),\n\t\t\tseparator: (options && options.separator) || '',\n\t\t});\n\n\t\treturn this;\n\t}\n\n\tclone() {\n\t\tconst bundle = new Bundle({\n\t\t\tintro: this.intro,\n\t\t\tseparator: this.separator,\n\t\t});\n\n\t\tthis.sources.forEach((source) => {\n\t\t\tbundle.addSource({\n\t\t\t\tfilename: source.filename,\n\t\t\t\tcontent: source.content.clone(),\n\t\t\t\tseparator: source.separator,\n\t\t\t});\n\t\t});\n\n\t\treturn bundle;\n\t}\n\n\tgenerateDecodedMap(options = {}) {\n\t\tconst names = [];\n\t\tthis.sources.forEach((source) => {\n\t\t\tObject.keys(source.content.storedNames).forEach((name) => {\n\t\t\t\tif (!~names.indexOf(name)) names.push(name);\n\t\t\t});\n\t\t});\n\n\t\tconst mappings = new Mappings(options.hires);\n\n\t\tif (this.intro) {\n\t\t\tmappings.advance(this.intro);\n\t\t}\n\n\t\tthis.sources.forEach((source, i) => {\n\t\t\tif (i > 0) {\n\t\t\t\tmappings.advance(this.separator);\n\t\t\t}\n\n\t\t\tconst sourceIndex = source.filename ? this.uniqueSourceIndexByFilename[source.filename] : -1;\n\t\t\tconst magicString = source.content;\n\t\t\tconst locate = getLocator(magicString.original);\n\n\t\t\tif (magicString.intro) {\n\t\t\t\tmappings.advance(magicString.intro);\n\t\t\t}\n\n\t\t\tmagicString.firstChunk.eachNext((chunk) => {\n\t\t\t\tconst loc = locate(chunk.start);\n\n\t\t\t\tif (chunk.intro.length) mappings.advance(chunk.intro);\n\n\t\t\t\tif (source.filename) {\n\t\t\t\t\tif (chunk.edited) {\n\t\t\t\t\t\tmappings.addEdit(\n\t\t\t\t\t\t\tsourceIndex,\n\t\t\t\t\t\t\tchunk.content,\n\t\t\t\t\t\t\tloc,\n\t\t\t\t\t\t\tchunk.storeName ? names.indexOf(chunk.original) : -1\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmappings.addUneditedChunk(\n\t\t\t\t\t\t\tsourceIndex,\n\t\t\t\t\t\t\tchunk,\n\t\t\t\t\t\t\tmagicString.original,\n\t\t\t\t\t\t\tloc,\n\t\t\t\t\t\t\tmagicString.sourcemapLocations\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tmappings.advance(chunk.content);\n\t\t\t\t}\n\n\t\t\t\tif (chunk.outro.length) mappings.advance(chunk.outro);\n\t\t\t});\n\n\t\t\tif (magicString.outro) {\n\t\t\t\tmappings.advance(magicString.outro);\n\t\t\t}\n\t\t});\n\n\t\treturn {\n\t\t\tfile: options.file ? options.file.split(/[/\\\\]/).pop() : null,\n\t\t\tsources: this.uniqueSources.map((source) => {\n\t\t\t\treturn options.file ? getRelativePath(options.file, source.filename) : source.filename;\n\t\t\t}),\n\t\t\tsourcesContent: this.uniqueSources.map((source) => {\n\t\t\t\treturn options.includeContent ? source.content : null;\n\t\t\t}),\n\t\t\tnames,\n\t\t\tmappings: mappings.raw,\n\t\t};\n\t}\n\n\tgenerateMap(options) {\n\t\treturn new SourceMap(this.generateDecodedMap(options));\n\t}\n\n\tgetIndentString() {\n\t\tconst indentStringCounts = {};\n\n\t\tthis.sources.forEach((source) => {\n\t\t\tconst indentStr = source.content._getRawIndentString();\n\n\t\t\tif (indentStr === null) return;\n\n\t\t\tif (!indentStringCounts[indentStr]) indentStringCounts[indentStr] = 0;\n\t\t\tindentStringCounts[indentStr] += 1;\n\t\t});\n\n\t\treturn (\n\t\t\tObject.keys(indentStringCounts).sort((a, b) => {\n\t\t\t\treturn indentStringCounts[a] - indentStringCounts[b];\n\t\t\t})[0] || '\\t'\n\t\t);\n\t}\n\n\tindent(indentStr) {\n\t\tif (!arguments.length) {\n\t\t\tindentStr = this.getIndentString();\n\t\t}\n\n\t\tif (indentStr === '') return this; // noop\n\n\t\tlet trailingNewline = !this.intro || this.intro.slice(-1) === '\\n';\n\n\t\tthis.sources.forEach((source, i) => {\n\t\t\tconst separator = source.separator !== undefined ? source.separator : this.separator;\n\t\t\tconst indentStart = trailingNewline || (i > 0 && /\\r?\\n$/.test(separator));\n\n\t\t\tsource.content.indent(indentStr, {\n\t\t\t\texclude: source.indentExclusionRanges,\n\t\t\t\tindentStart, //: trailingNewline || /\\r?\\n$/.test( separator )  //true///\\r?\\n/.test( separator )\n\t\t\t});\n\n\t\t\ttrailingNewline = source.content.lastChar() === '\\n';\n\t\t});\n\n\t\tif (this.intro) {\n\t\t\tthis.intro =\n\t\t\t\tindentStr +\n\t\t\t\tthis.intro.replace(/^[^\\n]/gm, (match, index) => {\n\t\t\t\t\treturn index > 0 ? indentStr + match : match;\n\t\t\t\t});\n\t\t}\n\n\t\treturn this;\n\t}\n\n\tprepend(str) {\n\t\tthis.intro = str + this.intro;\n\t\treturn this;\n\t}\n\n\ttoString() {\n\t\tconst body = this.sources\n\t\t\t.map((source, i) => {\n\t\t\t\tconst separator = source.separator !== undefined ? source.separator : this.separator;\n\t\t\t\tconst str = (i > 0 ? separator : '') + source.content.toString();\n\n\t\t\t\treturn str;\n\t\t\t})\n\t\t\t.join('');\n\n\t\treturn this.intro + body;\n\t}\n\n\tisEmpty() {\n\t\tif (this.intro.length && this.intro.trim()) return false;\n\t\tif (this.sources.some((source) => !source.content.isEmpty())) return false;\n\t\treturn true;\n\t}\n\n\tlength() {\n\t\treturn this.sources.reduce(\n\t\t\t(length, source) => length + source.content.length(),\n\t\t\tthis.intro.length\n\t\t);\n\t}\n\n\ttrimLines() {\n\t\treturn this.trim('[\\\\r\\\\n]');\n\t}\n\n\ttrim(charType) {\n\t\treturn this.trimStart(charType).trimEnd(charType);\n\t}\n\n\ttrimStart(charType) {\n\t\tconst rx = new RegExp('^' + (charType || '\\\\s') + '+');\n\t\tthis.intro = this.intro.replace(rx, '');\n\n\t\tif (!this.intro) {\n\t\t\tlet source;\n\t\t\tlet i = 0;\n\n\t\t\tdo {\n\t\t\t\tsource = this.sources[i++];\n\t\t\t\tif (!source) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} while (!source.content.trimStartAborted(charType));\n\t\t}\n\n\t\treturn this;\n\t}\n\n\ttrimEnd(charType) {\n\t\tconst rx = new RegExp((charType || '\\\\s') + '+$');\n\n\t\tlet source;\n\t\tlet i = this.sources.length - 1;\n\n\t\tdo {\n\t\t\tsource = this.sources[i--];\n\t\t\tif (!source) {\n\t\t\t\tthis.intro = this.intro.replace(rx, '');\n\t\t\t\tbreak;\n\t\t\t}\n\t\t} while (!source.content.trimEndAborted(charType));\n\n\t\treturn this;\n\t}\n}\n\nexport { Bundle, SourceMap, MagicString as default };\n//# sourceMappingURL=magic-string.es.mjs.map\n/dist/magic-string.umd.jsŖz(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.MagicString = factory());\n})(this, (function () { 'use strict';\n\n\tclass BitSet {\n\t\tconstructor(arg) {\n\t\t\tthis.bits = arg instanceof BitSet ? arg.bits.slice() : [];\n\t\t}\n\n\t\tadd(n) {\n\t\t\tthis.bits[n >> 5] |= 1 << (n & 31);\n\t\t}\n\n\t\thas(n) {\n\t\t\treturn !!(this.bits[n >> 5] & (1 << (n & 31)));\n\t\t}\n\t}\n\n\tclass Chunk {\n\t\tconstructor(start, end, content) {\n\t\t\tthis.start = start;\n\t\t\tthis.end = end;\n\t\t\tthis.original = content;\n\n\t\t\tthis.intro = '';\n\t\t\tthis.outro = '';\n\n\t\t\tthis.content = content;\n\t\t\tthis.storeName = false;\n\t\t\tthis.edited = false;\n\n\t\t\t{\n\t\t\t\tthis.previous = null;\n\t\t\t\tthis.next = null;\n\t\t\t}\n\t\t}\n\n\t\tappendLeft(content) {\n\t\t\tthis.outro += content;\n\t\t}\n\n\t\tappendRight(content) {\n\t\t\tthis.intro = this.intro + content;\n\t\t}\n\n\t\tclone() {\n\t\t\tconst chunk = new Chunk(this.start, this.end, this.original);\n\n\t\t\tchunk.intro = this.intro;\n\t\t\tchunk.outro = this.outro;\n\t\t\tchunk.content = this.content;\n\t\t\tchunk.storeName = this.storeName;\n\t\t\tchunk.edited = this.edited;\n\n\t\t\treturn chunk;\n\t\t}\n\n\t\tcontains(index) {\n\t\t\treturn this.start < index && index < this.end;\n\t\t}\n\n\t\teachNext(fn) {\n\t\t\tlet chunk = this;\n\t\t\twhile (chunk) {\n\t\t\t\tfn(chunk);\n\t\t\t\tchunk = chunk.next;\n\t\t\t}\n\t\t}\n\n\t\teachPrevious(fn) {\n\t\t\tlet chunk = this;\n\t\t\twhile (chunk) {\n\t\t\t\tfn(chunk);\n\t\t\t\tchunk = chunk.previous;\n\t\t\t}\n\t\t}\n\n\t\tedit(content, storeName, contentOnly) {\n\t\t\tthis.content = content;\n\t\t\tif (!contentOnly) {\n\t\t\t\tthis.intro = '';\n\t\t\t\tthis.outro = '';\n\t\t\t}\n\t\t\tthis.storeName = storeName;\n\n\t\t\tthis.edited = true;\n\n\t\t\treturn this;\n\t\t}\n\n\t\tprependLeft(content) {\n\t\t\tthis.outro = content + this.outro;\n\t\t}\n\n\t\tprependRight(content) {\n\t\t\tthis.intro = content + this.intro;\n\t\t}\n\n\t\tsplit(index) {\n\t\t\tconst sliceIndex = index - this.start;\n\n\t\t\tconst originalBefore = this.original.slice(0, sliceIndex);\n\t\t\tconst originalAfter = this.original.slice(sliceIndex);\n\n\t\t\tthis.original = originalBefore;\n\n\t\t\tconst newChunk = new Chunk(index, this.end, originalAfter);\n\t\t\tnewChunk.outro = this.outro;\n\t\t\tthis.outro = '';\n\n\t\t\tthis.end = index;\n\n\t\t\tif (this.edited) {\n\t\t\t\t// TODO is this block necessary?...\n\t\t\t\tnewChunk.edit('', false);\n\t\t\t\tthis.content = '';\n\t\t\t} else {\n\t\t\t\tthis.content = originalBefore;\n\t\t\t}\n\n\t\t\tnewChunk.next = this.next;\n\t\t\tif (newChunk.next) newChunk.next.previous = newChunk;\n\t\t\tnewChunk.previous = this;\n\t\t\tthis.next = newChunk;\n\n\t\t\treturn newChunk;\n\t\t}\n\n\t\ttoString() {\n\t\t\treturn this.intro + this.content + this.outro;\n\t\t}\n\n\t\ttrimEnd(rx) {\n\t\t\tthis.outro = this.outro.replace(rx, '');\n\t\t\tif (this.outro.length) return true;\n\n\t\t\tconst trimmed = this.content.replace(rx, '');\n\n\t\t\tif (trimmed.length) {\n\t\t\t\tif (trimmed !== this.content) {\n\t\t\t\t\tthis.split(this.start + trimmed.length).edit('', undefined, true);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t} else {\n\t\t\t\tthis.edit('', undefined, true);\n\n\t\t\t\tthis.intro = this.intro.replace(rx, '');\n\t\t\t\tif (this.intro.length) return true;\n\t\t\t}\n\t\t}\n\n\t\ttrimStart(rx) {\n\t\t\tthis.intro = this.intro.replace(rx, '');\n\t\t\tif (this.intro.length) return true;\n\n\t\t\tconst trimmed = this.content.replace(rx, '');\n\n\t\t\tif (trimmed.length) {\n\t\t\t\tif (trimmed !== this.content) {\n\t\t\t\t\tthis.split(this.end - trimmed.length);\n\t\t\t\t\tthis.edit('', undefined, true);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t} else {\n\t\t\t\tthis.edit('', undefined, true);\n\n\t\t\t\tthis.outro = this.outro.replace(rx, '');\n\t\t\t\tif (this.outro.length) return true;\n\t\t\t}\n\t\t}\n\t}\n\n\tconst comma = ','.charCodeAt(0);\n\tconst semicolon = ';'.charCodeAt(0);\n\tconst chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\tconst intToChar = new Uint8Array(64); // 64 possible chars.\n\tconst charToInt = new Uint8Array(128); // z is 122 in ASCII\n\tfor (let i = 0; i < chars.length; i++) {\n\t    const c = chars.charCodeAt(i);\n\t    intToChar[i] = c;\n\t    charToInt[c] = i;\n\t}\n\t// Provide a fallback for older environments.\n\tconst td = typeof TextDecoder !== 'undefined'\n\t    ? /* #__PURE__ */ new TextDecoder()\n\t    : typeof Buffer !== 'undefined'\n\t        ? {\n\t            decode(buf) {\n\t                const out = Buffer.from(buf.buffer, buf.byteOffset, buf.byteLength);\n\t                return out.toString();\n\t            },\n\t        }\n\t        : {\n\t            decode(buf) {\n\t                let out = '';\n\t                for (let i = 0; i < buf.length; i++) {\n\t                    out += String.fromCharCode(buf[i]);\n\t                }\n\t                return out;\n\t            },\n\t        };\n\tfunction encode(decoded) {\n\t    const state = new Int32Array(5);\n\t    const bufLength = 1024 * 16;\n\t    const subLength = bufLength - 36;\n\t    const buf = new Uint8Array(bufLength);\n\t    const sub = buf.subarray(0, subLength);\n\t    let pos = 0;\n\t    let out = '';\n\t    for (let i = 0; i < decoded.length; i++) {\n\t        const line = decoded[i];\n\t        if (i > 0) {\n\t            if (pos === bufLength) {\n\t                out += td.decode(buf);\n\t                pos = 0;\n\t            }\n\t            buf[pos++] = semicolon;\n\t        }\n\t        if (line.length === 0)\n\t            continue;\n\t        state[0] = 0;\n\t        for (let j = 0; j < line.length; j++) {\n\t            const segment = line[j];\n\t            // We can push up to 5 ints, each int can take at most 7 chars, and we\n\t            // may push a comma.\n\t            if (pos > subLength) {\n\t                out += td.decode(sub);\n\t                buf.copyWithin(0, subLength, pos);\n\t                pos -= subLength;\n\t            }\n\t            if (j > 0)\n\t                buf[pos++] = comma;\n\t            pos = encodeInteger(buf, pos, state, segment, 0); // genColumn\n\t            if (segment.length === 1)\n\t                continue;\n\t            pos = encodeInteger(buf, pos, state, segment, 1); // sourcesIndex\n\t            pos = encodeInteger(buf, pos, state, segment, 2); // sourceLine\n\t            pos = encodeInteger(buf, pos, state, segment, 3); // sourceColumn\n\t            if (segment.length === 4)\n\t                continue;\n\t            pos = encodeInteger(buf, pos, state, segment, 4); // namesIndex\n\t        }\n\t    }\n\t    return out + td.decode(buf.subarray(0, pos));\n\t}\n\tfunction encodeInteger(buf, pos, state, segment, j) {\n\t    const next = segment[j];\n\t    let num = next - state[j];\n\t    state[j] = next;\n\t    num = num < 0 ? (-num << 1) | 1 : num << 1;\n\t    do {\n\t        let clamped = num & 0b011111;\n\t        num >>>= 5;\n\t        if (num > 0)\n\t            clamped |= 0b100000;\n\t        buf[pos++] = intToChar[clamped];\n\t    } while (num > 0);\n\t    return pos;\n\t}\n\n\tfunction getBtoa () {\n\t\tif (typeof window !== 'undefined' && typeof window.btoa === 'function') {\n\t\t\treturn (str) => window.btoa(unescape(encodeURIComponent(str)));\n\t\t} else if (typeof Buffer === 'function') {\n\t\t\treturn (str) => Buffer.from(str, 'utf-8').toString('base64');\n\t\t} else {\n\t\t\treturn () => {\n\t\t\t\tthrow new Error('Unsupported environment: `window.btoa` or `Buffer` should be supported.');\n\t\t\t};\n\t\t}\n\t}\n\n\tconst btoa = /*#__PURE__*/ getBtoa();\n\n\tclass SourceMap {\n\t\tconstructor(properties) {\n\t\t\tthis.version = 3;\n\t\t\tthis.file = properties.file;\n\t\t\tthis.sources = properties.sources;\n\t\t\tthis.sourcesContent = properties.sourcesContent;\n\t\t\tthis.names = properties.names;\n\t\t\tthis.mappings = encode(properties.mappings);\n\t\t}\n\n\t\ttoString() {\n\t\t\treturn JSON.stringify(this);\n\t\t}\n\n\t\ttoUrl() {\n\t\t\treturn 'data:application/json;charset=utf-8;base64,' + btoa(this.toString());\n\t\t}\n\t}\n\n\tfunction guessIndent(code) {\n\t\tconst lines = code.split('\\n');\n\n\t\tconst tabbed = lines.filter((line) => /^\\t+/.test(line));\n\t\tconst spaced = lines.filter((line) => /^ {2,}/.test(line));\n\n\t\tif (tabbed.length === 0 && spaced.length === 0) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// More lines tabbed than spaced? Assume tabs, and\n\t\t// default to tabs in the case of a tie (or nothing\n\t\t// to go on)\n\t\tif (tabbed.length >= spaced.length) {\n\t\t\treturn '\\t';\n\t\t}\n\n\t\t// Otherwise, we need to guess the multiple\n\t\tconst min = spaced.reduce((previous, current) => {\n\t\t\tconst numSpaces = /^ +/.exec(current)[0].length;\n\t\t\treturn Math.min(numSpaces, previous);\n\t\t}, Infinity);\n\n\t\treturn new Array(min + 1).join(' ');\n\t}\n\n\tfunction getRelativePath(from, to) {\n\t\tconst fromParts = from.split(/[/\\\\]/);\n\t\tconst toParts = to.split(/[/\\\\]/);\n\n\t\tfromParts.pop(); // get dirname\n\n\t\twhile (fromParts[0] === toParts[0]) {\n\t\t\tfromParts.shift();\n\t\t\ttoParts.shift();\n\t\t}\n\n\t\tif (fromParts.length) {\n\t\t\tlet i = fromParts.length;\n\t\t\twhile (i--) fromParts[i] = '..';\n\t\t}\n\n\t\treturn fromParts.concat(toParts).join('/');\n\t}\n\n\tconst toString = Object.prototype.toString;\n\n\tfunction isObject(thing) {\n\t\treturn toString.call(thing) === '[object Object]';\n\t}\n\n\tfunction getLocator(source) {\n\t\tconst originalLines = source.split('\\n');\n\t\tconst lineOffsets = [];\n\n\t\tfor (let i = 0, pos = 0; i < originalLines.length; i++) {\n\t\t\tlineOffsets.push(pos);\n\t\t\tpos += originalLines[i].length + 1;\n\t\t}\n\n\t\treturn function locate(index) {\n\t\t\tlet i = 0;\n\t\t\tlet j = lineOffsets.length;\n\t\t\twhile (i < j) {\n\t\t\t\tconst m = (i + j) >> 1;\n\t\t\t\tif (index < lineOffsets[m]) {\n\t\t\t\t\tj = m;\n\t\t\t\t} else {\n\t\t\t\t\ti = m + 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst line = i - 1;\n\t\t\tconst column = index - lineOffsets[line];\n\t\t\treturn { line, column };\n\t\t};\n\t}\n\n\tclass Mappings {\n\t\tconstructor(hires) {\n\t\t\tthis.hires = hires;\n\t\t\tthis.generatedCodeLine = 0;\n\t\t\tthis.generatedCodeColumn = 0;\n\t\t\tthis.raw = [];\n\t\t\tthis.rawSegments = this.raw[this.generatedCodeLine] = [];\n\t\t\tthis.pending = null;\n\t\t}\n\n\t\taddEdit(sourceIndex, content, loc, nameIndex) {\n\t\t\tif (content.length) {\n\t\t\t\tconst segment = [this.generatedCodeColumn, sourceIndex, loc.line, loc.column];\n\t\t\t\tif (nameIndex >= 0) {\n\t\t\t\t\tsegment.push(nameIndex);\n\t\t\t\t}\n\t\t\t\tthis.rawSegments.push(segment);\n\t\t\t} else if (this.pending) {\n\t\t\t\tthis.rawSegments.push(this.pending);\n\t\t\t}\n\n\t\t\tthis.advance(content);\n\t\t\tthis.pending = null;\n\t\t}\n\n\t\taddUneditedChunk(sourceIndex, chunk, original, loc, sourcemapLocations) {\n\t\t\tlet originalCharIndex = chunk.start;\n\t\t\tlet first = true;\n\n\t\t\twhile (originalCharIndex < chunk.end) {\n\t\t\t\tif (this.hires || first || sourcemapLocations.has(originalCharIndex)) {\n\t\t\t\t\tthis.rawSegments.push([this.generatedCodeColumn, sourceIndex, loc.line, loc.column]);\n\t\t\t\t}\n\n\t\t\t\tif (original[originalCharIndex] === '\\n') {\n\t\t\t\t\tloc.line += 1;\n\t\t\t\t\tloc.column = 0;\n\t\t\t\t\tthis.generatedCodeLine += 1;\n\t\t\t\t\tthis.raw[this.generatedCodeLine] = this.rawSegments = [];\n\t\t\t\t\tthis.generatedCodeColumn = 0;\n\t\t\t\t\tfirst = true;\n\t\t\t\t} else {\n\t\t\t\t\tloc.column += 1;\n\t\t\t\t\tthis.generatedCodeColumn += 1;\n\t\t\t\t\tfirst = false;\n\t\t\t\t}\n\n\t\t\t\toriginalCharIndex += 1;\n\t\t\t}\n\n\t\t\tthis.pending = null;\n\t\t}\n\n\t\tadvance(str) {\n\t\t\tif (!str) return;\n\n\t\t\tconst lines = str.split('\\n');\n\n\t\t\tif (lines.length > 1) {\n\t\t\t\tfor (let i = 0; i < lines.length - 1; i++) {\n\t\t\t\t\tthis.generatedCodeLine++;\n\t\t\t\t\tthis.raw[this.generatedCodeLine] = this.rawSegments = [];\n\t\t\t\t}\n\t\t\t\tthis.generatedCodeColumn = 0;\n\t\t\t}\n\n\t\t\tthis.generatedCodeColumn += lines[lines.length - 1].length;\n\t\t}\n\t}\n\n\tconst n = '\\n';\n\n\tconst warned = {\n\t\tinsertLeft: false,\n\t\tinsertRight: false,\n\t\tstoreName: false,\n\t};\n\n\tclass MagicString {\n\t\tconstructor(string, options = {}) {\n\t\t\tconst chunk = new Chunk(0, string.length, string);\n\n\t\t\tObject.defineProperties(this, {\n\t\t\t\toriginal: { writable: true, value: string },\n\t\t\t\toutro: { writable: true, value: '' },\n\t\t\t\tintro: { writable: true, value: '' },\n\t\t\t\tfirstChunk: { writable: true, value: chunk },\n\t\t\t\tlastChunk: { writable: true, value: chunk },\n\t\t\t\tlastSearchedChunk: { writable: true, value: chunk },\n\t\t\t\tbyStart: { writable: true, value: {} },\n\t\t\t\tbyEnd: { writable: true, value: {} },\n\t\t\t\tfilename: { writable: true, value: options.filename },\n\t\t\t\tindentExclusionRanges: { writable: true, value: options.indentExclusionRanges },\n\t\t\t\tsourcemapLocations: { writable: true, value: new BitSet() },\n\t\t\t\tstoredNames: { writable: true, value: {} },\n\t\t\t\tindentStr: { writable: true, value: undefined },\n\t\t\t});\n\n\t\t\tthis.byStart[0] = chunk;\n\t\t\tthis.byEnd[string.length] = chunk;\n\t\t}\n\n\t\taddSourcemapLocation(char) {\n\t\t\tthis.sourcemapLocations.add(char);\n\t\t}\n\n\t\tappend(content) {\n\t\t\tif (typeof content !== 'string') throw new TypeError('outro content must be a string');\n\n\t\t\tthis.outro += content;\n\t\t\treturn this;\n\t\t}\n\n\t\tappendLeft(index, content) {\n\t\t\tif (typeof content !== 'string') throw new TypeError('inserted content must be a string');\n\n\t\t\tthis._split(index);\n\n\t\t\tconst chunk = this.byEnd[index];\n\n\t\t\tif (chunk) {\n\t\t\t\tchunk.appendLeft(content);\n\t\t\t} else {\n\t\t\t\tthis.intro += content;\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\n\t\tappendRight(index, content) {\n\t\t\tif (typeof content !== 'string') throw new TypeError('inserted content must be a string');\n\n\t\t\tthis._split(index);\n\n\t\t\tconst chunk = this.byStart[index];\n\n\t\t\tif (chunk) {\n\t\t\t\tchunk.appendRight(content);\n\t\t\t} else {\n\t\t\t\tthis.outro += content;\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\n\t\tclone() {\n\t\t\tconst cloned = new MagicString(this.original, { filename: this.filename });\n\n\t\t\tlet originalChunk = this.firstChunk;\n\t\t\tlet clonedChunk = (cloned.firstChunk = cloned.lastSearchedChunk = originalChunk.clone());\n\n\t\t\twhile (originalChunk) {\n\t\t\t\tcloned.byStart[clonedChunk.start] = clonedChunk;\n\t\t\t\tcloned.byEnd[clonedChunk.end] = clonedChunk;\n\n\t\t\t\tconst nextOriginalChunk = originalChunk.next;\n\t\t\t\tconst nextClonedChunk = nextOriginalChunk && nextOriginalChunk.clone();\n\n\t\t\t\tif (nextClonedChunk) {\n\t\t\t\t\tclonedChunk.next = nextClonedChunk;\n\t\t\t\t\tnextClonedChunk.previous = clonedChunk;\n\n\t\t\t\t\tclonedChunk = nextClonedChunk;\n\t\t\t\t}\n\n\t\t\t\toriginalChunk = nextOriginalChunk;\n\t\t\t}\n\n\t\t\tcloned.lastChunk = clonedChunk;\n\n\t\t\tif (this.indentExclusionRanges) {\n\t\t\t\tcloned.indentExclusionRanges = this.indentExclusionRanges.slice();\n\t\t\t}\n\n\t\t\tcloned.sourcemapLocations = new BitSet(this.sourcemapLocations);\n\n\t\t\tcloned.intro = this.intro;\n\t\t\tcloned.outro = this.outro;\n\n\t\t\treturn cloned;\n\t\t}\n\n\t\tgenerateDecodedMap(options) {\n\t\t\toptions = options || {};\n\n\t\t\tconst sourceIndex = 0;\n\t\t\tconst names = Object.keys(this.storedNames);\n\t\t\tconst mappings = new Mappings(options.hires);\n\n\t\t\tconst locate = getLocator(this.original);\n\n\t\t\tif (this.intro) {\n\t\t\t\tmappings.advance(this.intro);\n\t\t\t}\n\n\t\t\tthis.firstChunk.eachNext((chunk) => {\n\t\t\t\tconst loc = locate(chunk.start);\n\n\t\t\t\tif (chunk.intro.length) mappings.advance(chunk.intro);\n\n\t\t\t\tif (chunk.edited) {\n\t\t\t\t\tmappings.addEdit(\n\t\t\t\t\t\tsourceIndex,\n\t\t\t\t\t\tchunk.content,\n\t\t\t\t\t\tloc,\n\t\t\t\t\t\tchunk.storeName ? names.indexOf(chunk.original) : -1\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tmappings.addUneditedChunk(sourceIndex, chunk, this.original, loc, this.sourcemapLocations);\n\t\t\t\t}\n\n\t\t\t\tif (chunk.outro.length) mappings.advance(chunk.outro);\n\t\t\t});\n\n\t\t\treturn {\n\t\t\t\tfile: options.file ? options.file.split(/[/\\\\]/).pop() : null,\n\t\t\t\tsources: [options.source ? getRelativePath(options.file || '', options.source) : null],\n\t\t\t\tsourcesContent: options.includeContent ? [this.original] : [null],\n\t\t\t\tnames,\n\t\t\t\tmappings: mappings.raw,\n\t\t\t};\n\t\t}\n\n\t\tgenerateMap(options) {\n\t\t\treturn new SourceMap(this.generateDecodedMap(options));\n\t\t}\n\n\t\t_ensureindentStr() {\n\t\t\tif (this.indentStr === undefined) {\n\t\t\t\tthis.indentStr = guessIndent(this.original);\n\t\t\t}\n\t\t}\n\n\t\t_getRawIndentString() {\n\t\t\tthis._ensureindentStr();\n\t\t\treturn this.indentStr;\n\t\t}\n\n\t\tgetIndentString() {\n\t\t\tthis._ensureindentStr();\n\t\t\treturn this.indentStr === null ? '\\t' : this.indentStr;\n\t\t}\n\n\t\tindent(indentStr, options) {\n\t\t\tconst pattern = /^[^\\r\\n]/gm;\n\n\t\t\tif (isObject(indentStr)) {\n\t\t\t\toptions = indentStr;\n\t\t\t\tindentStr = undefined;\n\t\t\t}\n\n\t\t\tif (indentStr === undefined) {\n\t\t\t\tthis._ensureindentStr();\n\t\t\t\tindentStr = this.indentStr || '\\t';\n\t\t\t}\n\n\t\t\tif (indentStr === '') return this; // noop\n\n\t\t\toptions = options || {};\n\n\t\t\t// Process exclusion ranges\n\t\t\tconst isExcluded = {};\n\n\t\t\tif (options.exclude) {\n\t\t\t\tconst exclusions =\n\t\t\t\t\ttypeof options.exclude[0] === 'number' ? [options.exclude] : options.exclude;\n\t\t\t\texclusions.forEach((exclusion) => {\n\t\t\t\t\tfor (let i = exclusion[0]; i < exclusion[1]; i += 1) {\n\t\t\t\t\t\tisExcluded[i] = true;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tlet shouldIndentNextCharacter = options.indentStart !== false;\n\t\t\tconst replacer = (match) => {\n\t\t\t\tif (shouldIndentNextCharacter) return `${indentStr}${match}`;\n\t\t\t\tshouldIndentNextCharacter = true;\n\t\t\t\treturn match;\n\t\t\t};\n\n\t\t\tthis.intro = this.intro.replace(pattern, replacer);\n\n\t\t\tlet charIndex = 0;\n\t\t\tlet chunk = this.firstChunk;\n\n\t\t\twhile (chunk) {\n\t\t\t\tconst end = chunk.end;\n\n\t\t\t\tif (chunk.edited) {\n\t\t\t\t\tif (!isExcluded[charIndex]) {\n\t\t\t\t\t\tchunk.content = chunk.content.replace(pattern, replacer);\n\n\t\t\t\t\t\tif (chunk.content.length) {\n\t\t\t\t\t\t\tshouldIndentNextCharacter = chunk.content[chunk.content.length - 1] === '\\n';\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tcharIndex = chunk.start;\n\n\t\t\t\t\twhile (charIndex < end) {\n\t\t\t\t\t\tif (!isExcluded[charIndex]) {\n\t\t\t\t\t\t\tconst char = this.original[charIndex];\n\n\t\t\t\t\t\t\tif (char === '\\n') {\n\t\t\t\t\t\t\t\tshouldIndentNextCharacter = true;\n\t\t\t\t\t\t\t} else if (char !== '\\r' && shouldIndentNextCharacter) {\n\t\t\t\t\t\t\t\tshouldIndentNextCharacter = false;\n\n\t\t\t\t\t\t\t\tif (charIndex === chunk.start) {\n\t\t\t\t\t\t\t\t\tchunk.prependRight(indentStr);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tthis._splitChunk(chunk, charIndex);\n\t\t\t\t\t\t\t\t\tchunk = chunk.next;\n\t\t\t\t\t\t\t\t\tchunk.prependRight(indentStr);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcharIndex += 1;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcharIndex = chunk.end;\n\t\t\t\tchunk = chunk.next;\n\t\t\t}\n\n\t\t\tthis.outro = this.outro.replace(pattern, replacer);\n\n\t\t\treturn this;\n\t\t}\n\n\t\tinsert() {\n\t\t\tthrow new Error(\n\t\t\t\t'magicString.insert(...) is deprecated. Use prependRight(...) or appendLeft(...)'\n\t\t\t);\n\t\t}\n\n\t\tinsertLeft(index, content) {\n\t\t\tif (!warned.insertLeft) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t'magicString.insertLeft(...) is deprecated. Use magicString.appendLeft(...) instead'\n\t\t\t\t); // eslint-disable-line no-console\n\t\t\t\twarned.insertLeft = true;\n\t\t\t}\n\n\t\t\treturn this.appendLeft(index, content);\n\t\t}\n\n\t\tinsertRight(index, content) {\n\t\t\tif (!warned.insertRight) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t'magicString.insertRight(...) is deprecated. Use magicString.prependRight(...) instead'\n\t\t\t\t); // eslint-disable-line no-console\n\t\t\t\twarned.insertRight = true;\n\t\t\t}\n\n\t\t\treturn this.prependRight(index, content);\n\t\t}\n\n\t\tmove(start, end, index) {\n\t\t\tif (index >= start && index <= end) throw new Error('Cannot move a selection inside itself');\n\n\t\t\tthis._split(start);\n\t\t\tthis._split(end);\n\t\t\tthis._split(index);\n\n\t\t\tconst first = this.byStart[start];\n\t\t\tconst last = this.byEnd[end];\n\n\t\t\tconst oldLeft = first.previous;\n\t\t\tconst oldRight = last.next;\n\n\t\t\tconst newRight = this.byStart[index];\n\t\t\tif (!newRight && last === this.lastChunk) return this;\n\t\t\tconst newLeft = newRight ? newRight.previous : this.lastChunk;\n\n\t\t\tif (oldLeft) oldLeft.next = oldRight;\n\t\t\tif (oldRight) oldRight.previous = oldLeft;\n\n\t\t\tif (newLeft) newLeft.next = first;\n\t\t\tif (newRight) newRight.previous = last;\n\n\t\t\tif (!first.previous) this.firstChunk = last.next;\n\t\t\tif (!last.next) {\n\t\t\t\tthis.lastChunk = first.previous;\n\t\t\t\tthis.lastChunk.next = null;\n\t\t\t}\n\n\t\t\tfirst.previous = newLeft;\n\t\t\tlast.next = newRight || null;\n\n\t\t\tif (!newLeft) this.firstChunk = first;\n\t\t\tif (!newRight) this.lastChunk = last;\n\t\t\treturn this;\n\t\t}\n\n\t\toverwrite(start, end, content, options) {\n\t\t\toptions = options || {};\n\t\t\treturn this.update(start, end, content, { ...options, overwrite: !options.contentOnly });\n\t\t}\n\n\t\tupdate(start, end, content, options) {\n\t\t\tif (typeof content !== 'string') throw new TypeError('replacement content must be a string');\n\n\t\t\twhile (start < 0) start += this.original.length;\n\t\t\twhile (end < 0) end += this.original.length;\n\n\t\t\tif (end > this.original.length) throw new Error('end is out of bounds');\n\t\t\tif (start === end)\n\t\t\t\tthrow new Error(\n\t\t\t\t\t'Cannot overwrite a zero-length range – use appendLeft or prependRight instead'\n\t\t\t\t);\n\n\t\t\tthis._split(start);\n\t\t\tthis._split(end);\n\n\t\t\tif (options === true) {\n\t\t\t\tif (!warned.storeName) {\n\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t'The final argument to magicString.overwrite(...) should be an options object. See https://github.com/rich-harris/magic-string'\n\t\t\t\t\t); // eslint-disable-line no-console\n\t\t\t\t\twarned.storeName = true;\n\t\t\t\t}\n\n\t\t\t\toptions = { storeName: true };\n\t\t\t}\n\t\t\tconst storeName = options !== undefined ? options.storeName : false;\n\t\t\tconst overwrite = options !== undefined ? options.overwrite : false;\n\n\t\t\tif (storeName) {\n\t\t\t\tconst original = this.original.slice(start, end);\n\t\t\t\tObject.defineProperty(this.storedNames, original, {\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: true,\n\t\t\t\t\tenumerable: true,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst first = this.byStart[start];\n\t\t\tconst last = this.byEnd[end];\n\n\t\t\tif (first) {\n\t\t\t\tlet chunk = first;\n\t\t\t\twhile (chunk !== last) {\n\t\t\t\t\tif (chunk.next !== this.byStart[chunk.end]) {\n\t\t\t\t\t\tthrow new Error('Cannot overwrite across a split point');\n\t\t\t\t\t}\n\t\t\t\t\tchunk = chunk.next;\n\t\t\t\t\tchunk.edit('', false);\n\t\t\t\t}\n\n\t\t\t\tfirst.edit(content, storeName, !overwrite);\n\t\t\t} else {\n\t\t\t\t// must be inserting at the end\n\t\t\t\tconst newChunk = new Chunk(start, end, '').edit(content, storeName);\n\n\t\t\t\t// TODO last chunk in the array may not be the last chunk, if it's moved...\n\t\t\t\tlast.next = newChunk;\n\t\t\t\tnewChunk.previous = last;\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\n\t\tprepend(content) {\n\t\t\tif (typeof content !== 'string') throw new TypeError('outro content must be a string');\n\n\t\t\tthis.intro = content + this.intro;\n\t\t\treturn this;\n\t\t}\n\n\t\tprependLeft(index, content) {\n\t\t\tif (typeof content !== 'string') throw new TypeError('inserted content must be a string');\n\n\t\t\tthis._split(index);\n\n\t\t\tconst chunk = this.byEnd[index];\n\n\t\t\tif (chunk) {\n\t\t\t\tchunk.prependLeft(content);\n\t\t\t} else {\n\t\t\t\tthis.intro = content + this.intro;\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\n\t\tprependRight(index, content) {\n\t\t\tif (typeof content !== 'string') throw new TypeError('inserted content must be a string');\n\n\t\t\tthis._split(index);\n\n\t\t\tconst chunk = this.byStart[index];\n\n\t\t\tif (chunk) {\n\t\t\t\tchunk.prependRight(content);\n\t\t\t} else {\n\t\t\t\tthis.outro = content + this.outro;\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\n\t\tremove(start, end) {\n\t\t\twhile (start < 0) start += this.original.length;\n\t\t\twhile (end < 0) end += this.original.length;\n\n\t\t\tif (start === end) return this;\n\n\t\t\tif (start < 0 || end > this.original.length) throw new Error('Character is out of bounds');\n\t\t\tif (start > end) throw new Error('end must be greater than start');\n\n\t\t\tthis._split(start);\n\t\t\tthis._split(end);\n\n\t\t\tlet chunk = this.byStart[start];\n\n\t\t\twhile (chunk) {\n\t\t\t\tchunk.intro = '';\n\t\t\t\tchunk.outro = '';\n\t\t\t\tchunk.edit('');\n\n\t\t\t\tchunk = end > chunk.end ? this.byStart[chunk.end] : null;\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\n\t\tlastChar() {\n\t\t\tif (this.outro.length) return this.outro[this.outro.length - 1];\n\t\t\tlet chunk = this.lastChunk;\n\t\t\tdo {\n\t\t\t\tif (chunk.outro.length) return chunk.outro[chunk.outro.length - 1];\n\t\t\t\tif (chunk.content.length) return chunk.content[chunk.content.length - 1];\n\t\t\t\tif (chunk.intro.length) return chunk.intro[chunk.intro.length - 1];\n\t\t\t} while ((chunk = chunk.previous));\n\t\t\tif (this.intro.length) return this.intro[this.intro.length - 1];\n\t\t\treturn '';\n\t\t}\n\n\t\tlastLine() {\n\t\t\tlet lineIndex = this.outro.lastIndexOf(n);\n\t\t\tif (lineIndex !== -1) return this.outro.substr(lineIndex + 1);\n\t\t\tlet lineStr = this.outro;\n\t\t\tlet chunk = this.lastChunk;\n\t\t\tdo {\n\t\t\t\tif (chunk.outro.length > 0) {\n\t\t\t\t\tlineIndex = chunk.outro.lastIndexOf(n);\n\t\t\t\t\tif (lineIndex !== -1) return chunk.outro.substr(lineIndex + 1) + lineStr;\n\t\t\t\t\tlineStr = chunk.outro + lineStr;\n\t\t\t\t}\n\n\t\t\t\tif (chunk.content.length > 0) {\n\t\t\t\t\tlineIndex = chunk.content.lastIndexOf(n);\n\t\t\t\t\tif (lineIndex !== -1) return chunk.content.substr(lineIndex + 1) + lineStr;\n\t\t\t\t\tlineStr = chunk.content + lineStr;\n\t\t\t\t}\n\n\t\t\t\tif (chunk.intro.length > 0) {\n\t\t\t\t\tlineIndex = chunk.intro.lastIndexOf(n);\n\t\t\t\t\tif (lineIndex !== -1) return chunk.intro.substr(lineIndex + 1) + lineStr;\n\t\t\t\t\tlineStr = chunk.intro + lineStr;\n\t\t\t\t}\n\t\t\t} while ((chunk = chunk.previous));\n\t\t\tlineIndex = this.intro.lastIndexOf(n);\n\t\t\tif (lineIndex !== -1) return this.intro.substr(lineIndex + 1) + lineStr;\n\t\t\treturn this.intro + lineStr;\n\t\t}\n\n\t\tslice(start = 0, end = this.original.length) {\n\t\t\twhile (start < 0) start += this.original.length;\n\t\t\twhile (end < 0) end += this.original.length;\n\n\t\t\tlet result = '';\n\n\t\t\t// find start chunk\n\t\t\tlet chunk = this.firstChunk;\n\t\t\twhile (chunk && (chunk.start > start || chunk.end <= start)) {\n\t\t\t\t// found end chunk before start\n\t\t\t\tif (chunk.start < end && chunk.end >= end) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tchunk = chunk.next;\n\t\t\t}\n\n\t\t\tif (chunk && chunk.edited && chunk.start !== start)\n\t\t\t\tthrow new Error(`Cannot use replaced character ${start} as slice start anchor.`);\n\n\t\t\tconst startChunk = chunk;\n\t\t\twhile (chunk) {\n\t\t\t\tif (chunk.intro && (startChunk !== chunk || chunk.start === start)) {\n\t\t\t\t\tresult += chunk.intro;\n\t\t\t\t}\n\n\t\t\t\tconst containsEnd = chunk.start < end && chunk.end >= end;\n\t\t\t\tif (containsEnd && chunk.edited && chunk.end !== end)\n\t\t\t\t\tthrow new Error(`Cannot use replaced character ${end} as slice end anchor.`);\n\n\t\t\t\tconst sliceStart = startChunk === chunk ? start - chunk.start : 0;\n\t\t\t\tconst sliceEnd = containsEnd ? chunk.content.length + end - chunk.end : chunk.content.length;\n\n\t\t\t\tresult += chunk.content.slice(sliceStart, sliceEnd);\n\n\t\t\t\tif (chunk.outro && (!containsEnd || chunk.end === end)) {\n\t\t\t\t\tresult += chunk.outro;\n\t\t\t\t}\n\n\t\t\t\tif (containsEnd) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tchunk = chunk.next;\n\t\t\t}\n\n\t\t\treturn result;\n\t\t}\n\n\t\t// TODO deprecate this? not really very useful\n\t\tsnip(start, end) {\n\t\t\tconst clone = this.clone();\n\t\t\tclone.remove(0, start);\n\t\t\tclone.remove(end, clone.original.length);\n\n\t\t\treturn clone;\n\t\t}\n\n\t\t_split(index) {\n\t\t\tif (this.byStart[index] || this.byEnd[index]) return;\n\n\t\t\tlet chunk = this.lastSearchedChunk;\n\t\t\tconst searchForward = index > chunk.end;\n\n\t\t\twhile (chunk) {\n\t\t\t\tif (chunk.contains(index)) return this._splitChunk(chunk, index);\n\n\t\t\t\tchunk = searchForward ? this.byStart[chunk.end] : this.byEnd[chunk.start];\n\t\t\t}\n\t\t}\n\n\t\t_splitChunk(chunk, index) {\n\t\t\tif (chunk.edited && chunk.content.length) {\n\t\t\t\t// zero-length edited chunks are a special case (overlapping replacements)\n\t\t\t\tconst loc = getLocator(this.original)(index);\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Cannot split a chunk that has already been edited (${loc.line}:${loc.column} – \"${chunk.original}\")`\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst newChunk = chunk.split(index);\n\n\t\t\tthis.byEnd[index] = chunk;\n\t\t\tthis.byStart[index] = newChunk;\n\t\t\tthis.byEnd[newChunk.end] = newChunk;\n\n\t\t\tif (chunk === this.lastChunk) this.lastChunk = newChunk;\n\n\t\t\tthis.lastSearchedChunk = chunk;\n\t\t\treturn true;\n\t\t}\n\n\t\ttoString() {\n\t\t\tlet str = this.intro;\n\n\t\t\tlet chunk = this.firstChunk;\n\t\t\twhile (chunk) {\n\t\t\t\tstr += chunk.toString();\n\t\t\t\tchunk = chunk.next;\n\t\t\t}\n\n\t\t\treturn str + this.outro;\n\t\t}\n\n\t\tisEmpty() {\n\t\t\tlet chunk = this.firstChunk;\n\t\t\tdo {\n\t\t\t\tif (\n\t\t\t\t\t(chunk.intro.length && chunk.intro.trim()) ||\n\t\t\t\t\t(chunk.content.length && chunk.content.trim()) ||\n\t\t\t\t\t(chunk.outro.length && chunk.outro.trim())\n\t\t\t\t)\n\t\t\t\t\treturn false;\n\t\t\t} while ((chunk = chunk.next));\n\t\t\treturn true;\n\t\t}\n\n\t\tlength() {\n\t\t\tlet chunk = this.firstChunk;\n\t\t\tlet length = 0;\n\t\t\tdo {\n\t\t\t\tlength += chunk.intro.length + chunk.content.length + chunk.outro.length;\n\t\t\t} while ((chunk = chunk.next));\n\t\t\treturn length;\n\t\t}\n\n\t\ttrimLines() {\n\t\t\treturn this.trim('[\\\\r\\\\n]');\n\t\t}\n\n\t\ttrim(charType) {\n\t\t\treturn this.trimStart(charType).trimEnd(charType);\n\t\t}\n\n\t\ttrimEndAborted(charType) {\n\t\t\tconst rx = new RegExp((charType || '\\\\s') + '+$');\n\n\t\t\tthis.outro = this.outro.replace(rx, '');\n\t\t\tif (this.outro.length) return true;\n\n\t\t\tlet chunk = this.lastChunk;\n\n\t\t\tdo {\n\t\t\t\tconst end = chunk.end;\n\t\t\t\tconst aborted = chunk.trimEnd(rx);\n\n\t\t\t\t// if chunk was trimmed, we have a new lastChunk\n\t\t\t\tif (chunk.end !== end) {\n\t\t\t\t\tif (this.lastChunk === chunk) {\n\t\t\t\t\t\tthis.lastChunk = chunk.next;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.byEnd[chunk.end] = chunk;\n\t\t\t\t\tthis.byStart[chunk.next.start] = chunk.next;\n\t\t\t\t\tthis.byEnd[chunk.next.end] = chunk.next;\n\t\t\t\t}\n\n\t\t\t\tif (aborted) return true;\n\t\t\t\tchunk = chunk.previous;\n\t\t\t} while (chunk);\n\n\t\t\treturn false;\n\t\t}\n\n\t\ttrimEnd(charType) {\n\t\t\tthis.trimEndAborted(charType);\n\t\t\treturn this;\n\t\t}\n\t\ttrimStartAborted(charType) {\n\t\t\tconst rx = new RegExp('^' + (charType || '\\\\s') + '+');\n\n\t\t\tthis.intro = this.intro.replace(rx, '');\n\t\t\tif (this.intro.length) return true;\n\n\t\t\tlet chunk = this.firstChunk;\n\n\t\t\tdo {\n\t\t\t\tconst end = chunk.end;\n\t\t\t\tconst aborted = chunk.trimStart(rx);\n\n\t\t\t\tif (chunk.end !== end) {\n\t\t\t\t\t// special case...\n\t\t\t\t\tif (chunk === this.lastChunk) this.lastChunk = chunk.next;\n\n\t\t\t\t\tthis.byEnd[chunk.end] = chunk;\n\t\t\t\t\tthis.byStart[chunk.next.start] = chunk.next;\n\t\t\t\t\tthis.byEnd[chunk.next.end] = chunk.next;\n\t\t\t\t}\n\n\t\t\t\tif (aborted) return true;\n\t\t\t\tchunk = chunk.next;\n\t\t\t} while (chunk);\n\n\t\t\treturn false;\n\t\t}\n\n\t\ttrimStart(charType) {\n\t\t\tthis.trimStartAborted(charType);\n\t\t\treturn this;\n\t\t}\n\n\t\thasChanged() {\n\t\t\treturn this.original !== this.toString();\n\t\t}\n\n\t\t_replaceRegexp(searchValue, replacement) {\n\t\t\tfunction getReplacement(match, str) {\n\t\t\t\tif (typeof replacement === 'string') {\n\t\t\t\t\treturn replacement.replace(/\\$(\\$|&|\\d+)/g, (_, i) => {\n\t\t\t\t\t\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace#specifying_a_string_as_a_parameter\n\t\t\t\t\t\tif (i === '$') return '$';\n\t\t\t\t\t\tif (i === '&') return match[0];\n\t\t\t\t\t\tconst num = +i;\n\t\t\t\t\t\tif (num < match.length) return match[+i];\n\t\t\t\t\t\treturn `$${i}`;\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\treturn replacement(...match, match.index, str, match.groups);\n\t\t\t\t}\n\t\t\t}\n\t\t\tfunction matchAll(re, str) {\n\t\t\t\tlet match;\n\t\t\t\tconst matches = [];\n\t\t\t\twhile ((match = re.exec(str))) {\n\t\t\t\t\tmatches.push(match);\n\t\t\t\t}\n\t\t\t\treturn matches;\n\t\t\t}\n\t\t\tif (searchValue.global) {\n\t\t\t\tconst matches = matchAll(searchValue, this.original);\n\t\t\t\tmatches.forEach((match) => {\n\t\t\t\t\tif (match.index != null)\n\t\t\t\t\t\tthis.overwrite(\n\t\t\t\t\t\t\tmatch.index,\n\t\t\t\t\t\t\tmatch.index + match[0].length,\n\t\t\t\t\t\t\tgetReplacement(match, this.original)\n\t\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tconst match = this.original.match(searchValue);\n\t\t\t\tif (match && match.index != null)\n\t\t\t\t\tthis.overwrite(\n\t\t\t\t\t\tmatch.index,\n\t\t\t\t\t\tmatch.index + match[0].length,\n\t\t\t\t\t\tgetReplacement(match, this.original)\n\t\t\t\t\t);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\n\t\t_replaceString(string, replacement) {\n\t\t\tconst { original } = this;\n\t\t\tconst index = original.indexOf(string);\n\n\t\t\tif (index !== -1) {\n\t\t\t\tthis.overwrite(index, index + string.length, replacement);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t}\n\n\t\treplace(searchValue, replacement) {\n\t\t\tif (typeof searchValue === 'string') {\n\t\t\t\treturn this._replaceString(searchValue, replacement);\n\t\t\t}\n\n\t\t\treturn this._replaceRegexp(searchValue, replacement);\n\t\t}\n\n\t\t_replaceAllString(string, replacement) {\n\t\t\tconst { original } = this;\n\t\t\tconst stringLength = string.length;\n\t\t\tfor (\n\t\t\t\tlet index = original.indexOf(string);\n\t\t\t\tindex !== -1;\n\t\t\t\tindex = original.indexOf(string, index + stringLength)\n\t\t\t) {\n\t\t\t\tthis.overwrite(index, index + stringLength, replacement);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t}\n\n\t\treplaceAll(searchValue, replacement) {\n\t\t\tif (typeof searchValue === 'string') {\n\t\t\t\treturn this._replaceAllString(searchValue, replacement);\n\t\t\t}\n\n\t\t\tif (!searchValue.global) {\n\t\t\t\tthrow new TypeError(\n\t\t\t\t\t'MagicString.prototype.replaceAll called with a non-global RegExp argument'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn this._replaceRegexp(searchValue, replacement);\n\t\t}\n\t}\n\n\tconst hasOwnProp = Object.prototype.hasOwnProperty;\n\n\tclass Bundle {\n\t\tconstructor(options = {}) {\n\t\t\tthis.intro = options.intro || '';\n\t\t\tthis.separator = options.separator !== undefined ? options.separator : '\\n';\n\t\t\tthis.sources = [];\n\t\t\tthis.uniqueSources = [];\n\t\t\tthis.uniqueSourceIndexByFilename = {};\n\t\t}\n\n\t\taddSource(source) {\n\t\t\tif (source instanceof MagicString) {\n\t\t\t\treturn this.addSource({\n\t\t\t\t\tcontent: source,\n\t\t\t\t\tfilename: source.filename,\n\t\t\t\t\tseparator: this.separator,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (!isObject(source) || !source.content) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t'bundle.addSource() takes an object with a `content` property, which should be an instance of MagicString, and an optional `filename`'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t['filename', 'indentExclusionRanges', 'separator'].forEach((option) => {\n\t\t\t\tif (!hasOwnProp.call(source, option)) source[option] = source.content[option];\n\t\t\t});\n\n\t\t\tif (source.separator === undefined) {\n\t\t\t\t// TODO there's a bunch of this sort of thing, needs cleaning up\n\t\t\t\tsource.separator = this.separator;\n\t\t\t}\n\n\t\t\tif (source.filename) {\n\t\t\t\tif (!hasOwnProp.call(this.uniqueSourceIndexByFilename, source.filename)) {\n\t\t\t\t\tthis.uniqueSourceIndexByFilename[source.filename] = this.uniqueSources.length;\n\t\t\t\t\tthis.uniqueSources.push({ filename: source.filename, content: source.content.original });\n\t\t\t\t} else {\n\t\t\t\t\tconst uniqueSource = this.uniqueSources[this.uniqueSourceIndexByFilename[source.filename]];\n\t\t\t\t\tif (source.content.original !== uniqueSource.content) {\n\t\t\t\t\t\tthrow new Error(`Illegal source: same filename (${source.filename}), different contents`);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.sources.push(source);\n\t\t\treturn this;\n\t\t}\n\n\t\tappend(str, options) {\n\t\t\tthis.addSource({\n\t\t\t\tcontent: new MagicString(str),\n\t\t\t\tseparator: (options && options.separator) || '',\n\t\t\t});\n\n\t\t\treturn this;\n\t\t}\n\n\t\tclone() {\n\t\t\tconst bundle = new Bundle({\n\t\t\t\tintro: this.intro,\n\t\t\t\tseparator: this.separator,\n\t\t\t});\n\n\t\t\tthis.sources.forEach((source) => {\n\t\t\t\tbundle.addSource({\n\t\t\t\t\tfilename: source.filename,\n\t\t\t\t\tcontent: source.content.clone(),\n\t\t\t\t\tseparator: source.separator,\n\t\t\t\t});\n\t\t\t});\n\n\t\t\treturn bundle;\n\t\t}\n\n\t\tgenerateDecodedMap(options = {}) {\n\t\t\tconst names = [];\n\t\t\tthis.sources.forEach((source) => {\n\t\t\t\tObject.keys(source.content.storedNames).forEach((name) => {\n\t\t\t\t\tif (!~names.indexOf(name)) names.push(name);\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tconst mappings = new Mappings(options.hires);\n\n\t\t\tif (this.intro) {\n\t\t\t\tmappings.advance(this.intro);\n\t\t\t}\n\n\t\t\tthis.sources.forEach((source, i) => {\n\t\t\t\tif (i > 0) {\n\t\t\t\t\tmappings.advance(this.separator);\n\t\t\t\t}\n\n\t\t\t\tconst sourceIndex = source.filename ? this.uniqueSourceIndexByFilename[source.filename] : -1;\n\t\t\t\tconst magicString = source.content;\n\t\t\t\tconst locate = getLocator(magicString.original);\n\n\t\t\t\tif (magicString.intro) {\n\t\t\t\t\tmappings.advance(magicString.intro);\n\t\t\t\t}\n\n\t\t\t\tmagicString.firstChunk.eachNext((chunk) => {\n\t\t\t\t\tconst loc = locate(chunk.start);\n\n\t\t\t\t\tif (chunk.intro.length) mappings.advance(chunk.intro);\n\n\t\t\t\t\tif (source.filename) {\n\t\t\t\t\t\tif (chunk.edited) {\n\t\t\t\t\t\t\tmappings.addEdit(\n\t\t\t\t\t\t\t\tsourceIndex,\n\t\t\t\t\t\t\t\tchunk.content,\n\t\t\t\t\t\t\t\tloc,\n\t\t\t\t\t\t\t\tchunk.storeName ? names.indexOf(chunk.original) : -1\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tmappings.addUneditedChunk(\n\t\t\t\t\t\t\t\tsourceIndex,\n\t\t\t\t\t\t\t\tchunk,\n\t\t\t\t\t\t\t\tmagicString.original,\n\t\t\t\t\t\t\t\tloc,\n\t\t\t\t\t\t\t\tmagicString.sourcemapLocations\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmappings.advance(chunk.content);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (chunk.outro.length) mappings.advance(chunk.outro);\n\t\t\t\t});\n\n\t\t\t\tif (magicString.outro) {\n\t\t\t\t\tmappings.advance(magicString.outro);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn {\n\t\t\t\tfile: options.file ? options.file.split(/[/\\\\]/).pop() : null,\n\t\t\t\tsources: this.uniqueSources.map((source) => {\n\t\t\t\t\treturn options.file ? getRelativePath(options.file, source.filename) : source.filename;\n\t\t\t\t}),\n\t\t\t\tsourcesContent: this.uniqueSources.map((source) => {\n\t\t\t\t\treturn options.includeContent ? source.content : null;\n\t\t\t\t}),\n\t\t\t\tnames,\n\t\t\t\tmappings: mappings.raw,\n\t\t\t};\n\t\t}\n\n\t\tgenerateMap(options) {\n\t\t\treturn new SourceMap(this.generateDecodedMap(options));\n\t\t}\n\n\t\tgetIndentString() {\n\t\t\tconst indentStringCounts = {};\n\n\t\t\tthis.sources.forEach((source) => {\n\t\t\t\tconst indentStr = source.content._getRawIndentString();\n\n\t\t\t\tif (indentStr === null) return;\n\n\t\t\t\tif (!indentStringCounts[indentStr]) indentStringCounts[indentStr] = 0;\n\t\t\t\tindentStringCounts[indentStr] += 1;\n\t\t\t});\n\n\t\t\treturn (\n\t\t\t\tObject.keys(indentStringCounts).sort((a, b) => {\n\t\t\t\t\treturn indentStringCounts[a] - indentStringCounts[b];\n\t\t\t\t})[0] || '\\t'\n\t\t\t);\n\t\t}\n\n\t\tindent(indentStr) {\n\t\t\tif (!arguments.length) {\n\t\t\t\tindentStr = this.getIndentString();\n\t\t\t}\n\n\t\t\tif (indentStr === '') return this; // noop\n\n\t\t\tlet trailingNewline = !this.intro || this.intro.slice(-1) === '\\n';\n\n\t\t\tthis.sources.forEach((source, i) => {\n\t\t\t\tconst separator = source.separator !== undefined ? source.separator : this.separator;\n\t\t\t\tconst indentStart = trailingNewline || (i > 0 && /\\r?\\n$/.test(separator));\n\n\t\t\t\tsource.content.indent(indentStr, {\n\t\t\t\t\texclude: source.indentExclusionRanges,\n\t\t\t\t\tindentStart, //: trailingNewline || /\\r?\\n$/.test( separator )  //true///\\r?\\n/.test( separator )\n\t\t\t\t});\n\n\t\t\t\ttrailingNewline = source.content.lastChar() === '\\n';\n\t\t\t});\n\n\t\t\tif (this.intro) {\n\t\t\t\tthis.intro =\n\t\t\t\t\tindentStr +\n\t\t\t\t\tthis.intro.replace(/^[^\\n]/gm, (match, index) => {\n\t\t\t\t\t\treturn index > 0 ? indentStr + match : match;\n\t\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn this;\n\t\t}\n\n\t\tprepend(str) {\n\t\t\tthis.intro = str + this.intro;\n\t\t\treturn this;\n\t\t}\n\n\t\ttoString() {\n\t\t\tconst body = this.sources\n\t\t\t\t.map((source, i) => {\n\t\t\t\t\tconst separator = source.separator !== undefined ? source.separator : this.separator;\n\t\t\t\t\tconst str = (i > 0 ? separator : '') + source.content.toString();\n\n\t\t\t\t\treturn str;\n\t\t\t\t})\n\t\t\t\t.join('');\n\n\t\t\treturn this.intro + body;\n\t\t}\n\n\t\tisEmpty() {\n\t\t\tif (this.intro.length && this.intro.trim()) return false;\n\t\t\tif (this.sources.some((source) => !source.content.isEmpty())) return false;\n\t\t\treturn true;\n\t\t}\n\n\t\tlength() {\n\t\t\treturn this.sources.reduce(\n\t\t\t\t(length, source) => length + source.content.length(),\n\t\t\t\tthis.intro.length\n\t\t\t);\n\t\t}\n\n\t\ttrimLines() {\n\t\t\treturn this.trim('[\\\\r\\\\n]');\n\t\t}\n\n\t\ttrim(charType) {\n\t\t\treturn this.trimStart(charType).trimEnd(charType);\n\t\t}\n\n\t\ttrimStart(charType) {\n\t\t\tconst rx = new RegExp('^' + (charType || '\\\\s') + '+');\n\t\t\tthis.intro = this.intro.replace(rx, '');\n\n\t\t\tif (!this.intro) {\n\t\t\t\tlet source;\n\t\t\t\tlet i = 0;\n\n\t\t\t\tdo {\n\t\t\t\t\tsource = this.sources[i++];\n\t\t\t\t\tif (!source) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t} while (!source.content.trimStartAborted(charType));\n\t\t\t}\n\n\t\t\treturn this;\n\t\t}\n\n\t\ttrimEnd(charType) {\n\t\t\tconst rx = new RegExp((charType || '\\\\s') + '+$');\n\n\t\t\tlet source;\n\t\t\tlet i = this.sources.length - 1;\n\n\t\t\tdo {\n\t\t\t\tsource = this.sources[i--];\n\t\t\t\tif (!source) {\n\t\t\t\t\tthis.intro = this.intro.replace(rx, '');\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} while (!source.content.trimEndAborted(charType));\n\n\t\t\treturn this;\n\t\t}\n\t}\n\n\tMagicString.Bundle = Bundle;\n\tMagicString.SourceMap = SourceMap;\n\tMagicString.default = MagicString; // work around TypeScript bug https://github.com/Rich-Harris/magic-string/pull/121\n\n\treturn MagicString;\n\n}));\n//# sourceMappingURL=magic-string.umd.js.map\n/LICENSE\u0004\u001bCopyright 2018 Rich Harris\n\nPermission 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:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE 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.\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/bWFnaWMtc3RyaW5nQDAuMjkuMA==",
    "content": "/dist/magic-string.es.mjsńimport { encode } from '@jridgewell/sourcemap-codec';\n\nclass BitSet {\n\tconstructor(arg) {\n\t\tthis.bits = arg instanceof BitSet ? arg.bits.slice() : [];\n\t}\n\n\tadd(n) {\n\t\tthis.bits[n >> 5] |= 1 << (n & 31);\n\t}\n\n\thas(n) {\n\t\treturn !!(this.bits[n >> 5] & (1 << (n & 31)));\n\t}\n}\n\nclass Chunk {\n\tconstructor(start, end, content) {\n\t\tthis.start = start;\n\t\tthis.end = end;\n\t\tthis.original = content;\n\n\t\tthis.intro = '';\n\t\tthis.outro = '';\n\n\t\tthis.content = content;\n\t\tthis.storeName = false;\n\t\tthis.edited = false;\n\n\t\t{\n\t\t\tthis.previous = null;\n\t\t\tthis.next = null;\n\t\t}\n\t}\n\n\tappendLeft(content) {\n\t\tthis.outro += content;\n\t}\n\n\tappendRight(content) {\n\t\tthis.intro = this.intro + content;\n\t}\n\n\tclone() {\n\t\tconst chunk = new Chunk(this.start, this.end, this.original);\n\n\t\tchunk.intro = this.intro;\n\t\tchunk.outro = this.outro;\n\t\tchunk.content = this.content;\n\t\tchunk.storeName = this.storeName;\n\t\tchunk.edited = this.edited;\n\n\t\treturn chunk;\n\t}\n\n\tcontains(index) {\n\t\treturn this.start < index && index < this.end;\n\t}\n\n\teachNext(fn) {\n\t\tlet chunk = this;\n\t\twhile (chunk) {\n\t\t\tfn(chunk);\n\t\t\tchunk = chunk.next;\n\t\t}\n\t}\n\n\teachPrevious(fn) {\n\t\tlet chunk = this;\n\t\twhile (chunk) {\n\t\t\tfn(chunk);\n\t\t\tchunk = chunk.previous;\n\t\t}\n\t}\n\n\tedit(content, storeName, contentOnly) {\n\t\tthis.content = content;\n\t\tif (!contentOnly) {\n\t\t\tthis.intro = '';\n\t\t\tthis.outro = '';\n\t\t}\n\t\tthis.storeName = storeName;\n\n\t\tthis.edited = true;\n\n\t\treturn this;\n\t}\n\n\tprependLeft(content) {\n\t\tthis.outro = content + this.outro;\n\t}\n\n\tprependRight(content) {\n\t\tthis.intro = content + this.intro;\n\t}\n\n\tsplit(index) {\n\t\tconst sliceIndex = index - this.start;\n\n\t\tconst originalBefore = this.original.slice(0, sliceIndex);\n\t\tconst originalAfter = this.original.slice(sliceIndex);\n\n\t\tthis.original = originalBefore;\n\n\t\tconst newChunk = new Chunk(index, this.end, originalAfter);\n\t\tnewChunk.outro = this.outro;\n\t\tthis.outro = '';\n\n\t\tthis.end = index;\n\n\t\tif (this.edited) {\n\t\t\t// TODO is this block necessary?...\n\t\t\tnewChunk.edit('', false);\n\t\t\tthis.content = '';\n\t\t} else {\n\t\t\tthis.content = originalBefore;\n\t\t}\n\n\t\tnewChunk.next = this.next;\n\t\tif (newChunk.next) newChunk.next.previous = newChunk;\n\t\tnewChunk.previous = this;\n\t\tthis.next = newChunk;\n\n\t\treturn newChunk;\n\t}\n\n\ttoString() {\n\t\treturn this.intro + this.content + this.outro;\n\t}\n\n\ttrimEnd(rx) {\n\t\tthis.outro = this.outro.replace(rx, '');\n\t\tif (this.outro.length) return true;\n\n\t\tconst trimmed = this.content.replace(rx, '');\n\n\t\tif (trimmed.length) {\n\t\t\tif (trimmed !== this.content) {\n\t\t\t\tthis.split(this.start + trimmed.length).edit('', undefined, true);\n\t\t\t}\n\t\t\treturn true;\n\t\t} else {\n\t\t\tthis.edit('', undefined, true);\n\n\t\t\tthis.intro = this.intro.replace(rx, '');\n\t\t\tif (this.intro.length) return true;\n\t\t}\n\t}\n\n\ttrimStart(rx) {\n\t\tthis.intro = this.intro.replace(rx, '');\n\t\tif (this.intro.length) return true;\n\n\t\tconst trimmed = this.content.replace(rx, '');\n\n\t\tif (trimmed.length) {\n\t\t\tif (trimmed !== this.content) {\n\t\t\t\tthis.split(this.end - trimmed.length);\n\t\t\t\tthis.edit('', undefined, true);\n\t\t\t}\n\t\t\treturn true;\n\t\t} else {\n\t\t\tthis.edit('', undefined, true);\n\n\t\t\tthis.outro = this.outro.replace(rx, '');\n\t\t\tif (this.outro.length) return true;\n\t\t}\n\t}\n}\n\nfunction getBtoa () {\n\tif (typeof window !== 'undefined' && typeof window.btoa === 'function') {\n\t\treturn (str) => window.btoa(unescape(encodeURIComponent(str)));\n\t} else if (typeof Buffer === 'function') {\n\t\treturn (str) => Buffer.from(str, 'utf-8').toString('base64');\n\t} else {\n\t\treturn () => {\n\t\t\tthrow new Error('Unsupported environment: `window.btoa` or `Buffer` should be supported.');\n\t\t};\n\t}\n}\n\nconst btoa = /*#__PURE__*/ getBtoa();\n\nclass SourceMap {\n\tconstructor(properties) {\n\t\tthis.version = 3;\n\t\tthis.file = properties.file;\n\t\tthis.sources = properties.sources;\n\t\tthis.sourcesContent = properties.sourcesContent;\n\t\tthis.names = properties.names;\n\t\tthis.mappings = encode(properties.mappings);\n\t\tif (typeof properties.x_google_ignoreList !== 'undefined') {\n\t\t\tthis.x_google_ignoreList = properties.x_google_ignoreList;\n\t\t}\n\t}\n\n\ttoString() {\n\t\treturn JSON.stringify(this);\n\t}\n\n\ttoUrl() {\n\t\treturn 'data:application/json;charset=utf-8;base64,' + btoa(this.toString());\n\t}\n}\n\nfunction guessIndent(code) {\n\tconst lines = code.split('\\n');\n\n\tconst tabbed = lines.filter((line) => /^\\t+/.test(line));\n\tconst spaced = lines.filter((line) => /^ {2,}/.test(line));\n\n\tif (tabbed.length === 0 && spaced.length === 0) {\n\t\treturn null;\n\t}\n\n\t// More lines tabbed than spaced? Assume tabs, and\n\t// default to tabs in the case of a tie (or nothing\n\t// to go on)\n\tif (tabbed.length >= spaced.length) {\n\t\treturn '\\t';\n\t}\n\n\t// Otherwise, we need to guess the multiple\n\tconst min = spaced.reduce((previous, current) => {\n\t\tconst numSpaces = /^ +/.exec(current)[0].length;\n\t\treturn Math.min(numSpaces, previous);\n\t}, Infinity);\n\n\treturn new Array(min + 1).join(' ');\n}\n\nfunction getRelativePath(from, to) {\n\tconst fromParts = from.split(/[/\\\\]/);\n\tconst toParts = to.split(/[/\\\\]/);\n\n\tfromParts.pop(); // get dirname\n\n\twhile (fromParts[0] === toParts[0]) {\n\t\tfromParts.shift();\n\t\ttoParts.shift();\n\t}\n\n\tif (fromParts.length) {\n\t\tlet i = fromParts.length;\n\t\twhile (i--) fromParts[i] = '..';\n\t}\n\n\treturn fromParts.concat(toParts).join('/');\n}\n\nconst toString = Object.prototype.toString;\n\nfunction isObject(thing) {\n\treturn toString.call(thing) === '[object Object]';\n}\n\nfunction getLocator(source) {\n\tconst originalLines = source.split('\\n');\n\tconst lineOffsets = [];\n\n\tfor (let i = 0, pos = 0; i < originalLines.length; i++) {\n\t\tlineOffsets.push(pos);\n\t\tpos += originalLines[i].length + 1;\n\t}\n\n\treturn function locate(index) {\n\t\tlet i = 0;\n\t\tlet j = lineOffsets.length;\n\t\twhile (i < j) {\n\t\t\tconst m = (i + j) >> 1;\n\t\t\tif (index < lineOffsets[m]) {\n\t\t\t\tj = m;\n\t\t\t} else {\n\t\t\t\ti = m + 1;\n\t\t\t}\n\t\t}\n\t\tconst line = i - 1;\n\t\tconst column = index - lineOffsets[line];\n\t\treturn { line, column };\n\t};\n}\n\nclass Mappings {\n\tconstructor(hires) {\n\t\tthis.hires = hires;\n\t\tthis.generatedCodeLine = 0;\n\t\tthis.generatedCodeColumn = 0;\n\t\tthis.raw = [];\n\t\tthis.rawSegments = this.raw[this.generatedCodeLine] = [];\n\t\tthis.pending = null;\n\t}\n\n\taddEdit(sourceIndex, content, loc, nameIndex) {\n\t\tif (content.length) {\n\t\t\tconst segment = [this.generatedCodeColumn, sourceIndex, loc.line, loc.column];\n\t\t\tif (nameIndex >= 0) {\n\t\t\t\tsegment.push(nameIndex);\n\t\t\t}\n\t\t\tthis.rawSegments.push(segment);\n\t\t} else if (this.pending) {\n\t\t\tthis.rawSegments.push(this.pending);\n\t\t}\n\n\t\tthis.advance(content);\n\t\tthis.pending = null;\n\t}\n\n\taddUneditedChunk(sourceIndex, chunk, original, loc, sourcemapLocations) {\n\t\tlet originalCharIndex = chunk.start;\n\t\tlet first = true;\n\n\t\twhile (originalCharIndex < chunk.end) {\n\t\t\tif (this.hires || first || sourcemapLocations.has(originalCharIndex)) {\n\t\t\t\tthis.rawSegments.push([this.generatedCodeColumn, sourceIndex, loc.line, loc.column]);\n\t\t\t}\n\n\t\t\tif (original[originalCharIndex] === '\\n') {\n\t\t\t\tloc.line += 1;\n\t\t\t\tloc.column = 0;\n\t\t\t\tthis.generatedCodeLine += 1;\n\t\t\t\tthis.raw[this.generatedCodeLine] = this.rawSegments = [];\n\t\t\t\tthis.generatedCodeColumn = 0;\n\t\t\t\tfirst = true;\n\t\t\t} else {\n\t\t\t\tloc.column += 1;\n\t\t\t\tthis.generatedCodeColumn += 1;\n\t\t\t\tfirst = false;\n\t\t\t}\n\n\t\t\toriginalCharIndex += 1;\n\t\t}\n\n\t\tthis.pending = null;\n\t}\n\n\tadvance(str) {\n\t\tif (!str) return;\n\n\t\tconst lines = str.split('\\n');\n\n\t\tif (lines.length > 1) {\n\t\t\tfor (let i = 0; i < lines.length - 1; i++) {\n\t\t\t\tthis.generatedCodeLine++;\n\t\t\t\tthis.raw[this.generatedCodeLine] = this.rawSegments = [];\n\t\t\t}\n\t\t\tthis.generatedCodeColumn = 0;\n\t\t}\n\n\t\tthis.generatedCodeColumn += lines[lines.length - 1].length;\n\t}\n}\n\nconst n = '\\n';\n\nconst warned = {\n\tinsertLeft: false,\n\tinsertRight: false,\n\tstoreName: false,\n};\n\nclass MagicString {\n\tconstructor(string, options = {}) {\n\t\tconst chunk = new Chunk(0, string.length, string);\n\n\t\tObject.defineProperties(this, {\n\t\t\toriginal: { writable: true, value: string },\n\t\t\toutro: { writable: true, value: '' },\n\t\t\tintro: { writable: true, value: '' },\n\t\t\tfirstChunk: { writable: true, value: chunk },\n\t\t\tlastChunk: { writable: true, value: chunk },\n\t\t\tlastSearchedChunk: { writable: true, value: chunk },\n\t\t\tbyStart: { writable: true, value: {} },\n\t\t\tbyEnd: { writable: true, value: {} },\n\t\t\tfilename: { writable: true, value: options.filename },\n\t\t\tindentExclusionRanges: { writable: true, value: options.indentExclusionRanges },\n\t\t\tsourcemapLocations: { writable: true, value: new BitSet() },\n\t\t\tstoredNames: { writable: true, value: {} },\n\t\t\tindentStr: { writable: true, value: undefined },\n\t\t});\n\n\t\tthis.byStart[0] = chunk;\n\t\tthis.byEnd[string.length] = chunk;\n\t}\n\n\taddSourcemapLocation(char) {\n\t\tthis.sourcemapLocations.add(char);\n\t}\n\n\tappend(content) {\n\t\tif (typeof content !== 'string') throw new TypeError('outro content must be a string');\n\n\t\tthis.outro += content;\n\t\treturn this;\n\t}\n\n\tappendLeft(index, content) {\n\t\tif (typeof content !== 'string') throw new TypeError('inserted content must be a string');\n\n\t\tthis._split(index);\n\n\t\tconst chunk = this.byEnd[index];\n\n\t\tif (chunk) {\n\t\t\tchunk.appendLeft(content);\n\t\t} else {\n\t\t\tthis.intro += content;\n\t\t}\n\t\treturn this;\n\t}\n\n\tappendRight(index, content) {\n\t\tif (typeof content !== 'string') throw new TypeError('inserted content must be a string');\n\n\t\tthis._split(index);\n\n\t\tconst chunk = this.byStart[index];\n\n\t\tif (chunk) {\n\t\t\tchunk.appendRight(content);\n\t\t} else {\n\t\t\tthis.outro += content;\n\t\t}\n\t\treturn this;\n\t}\n\n\tclone() {\n\t\tconst cloned = new MagicString(this.original, { filename: this.filename });\n\n\t\tlet originalChunk = this.firstChunk;\n\t\tlet clonedChunk = (cloned.firstChunk = cloned.lastSearchedChunk = originalChunk.clone());\n\n\t\twhile (originalChunk) {\n\t\t\tcloned.byStart[clonedChunk.start] = clonedChunk;\n\t\t\tcloned.byEnd[clonedChunk.end] = clonedChunk;\n\n\t\t\tconst nextOriginalChunk = originalChunk.next;\n\t\t\tconst nextClonedChunk = nextOriginalChunk && nextOriginalChunk.clone();\n\n\t\t\tif (nextClonedChunk) {\n\t\t\t\tclonedChunk.next = nextClonedChunk;\n\t\t\t\tnextClonedChunk.previous = clonedChunk;\n\n\t\t\t\tclonedChunk = nextClonedChunk;\n\t\t\t}\n\n\t\t\toriginalChunk = nextOriginalChunk;\n\t\t}\n\n\t\tcloned.lastChunk = clonedChunk;\n\n\t\tif (this.indentExclusionRanges) {\n\t\t\tcloned.indentExclusionRanges = this.indentExclusionRanges.slice();\n\t\t}\n\n\t\tcloned.sourcemapLocations = new BitSet(this.sourcemapLocations);\n\n\t\tcloned.intro = this.intro;\n\t\tcloned.outro = this.outro;\n\n\t\treturn cloned;\n\t}\n\n\tgenerateDecodedMap(options) {\n\t\toptions = options || {};\n\n\t\tconst sourceIndex = 0;\n\t\tconst names = Object.keys(this.storedNames);\n\t\tconst mappings = new Mappings(options.hires);\n\n\t\tconst locate = getLocator(this.original);\n\n\t\tif (this.intro) {\n\t\t\tmappings.advance(this.intro);\n\t\t}\n\n\t\tthis.firstChunk.eachNext((chunk) => {\n\t\t\tconst loc = locate(chunk.start);\n\n\t\t\tif (chunk.intro.length) mappings.advance(chunk.intro);\n\n\t\t\tif (chunk.edited) {\n\t\t\t\tmappings.addEdit(\n\t\t\t\t\tsourceIndex,\n\t\t\t\t\tchunk.content,\n\t\t\t\t\tloc,\n\t\t\t\t\tchunk.storeName ? names.indexOf(chunk.original) : -1\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tmappings.addUneditedChunk(sourceIndex, chunk, this.original, loc, this.sourcemapLocations);\n\t\t\t}\n\n\t\t\tif (chunk.outro.length) mappings.advance(chunk.outro);\n\t\t});\n\n\t\treturn {\n\t\t\tfile: options.file ? options.file.split(/[/\\\\]/).pop() : null,\n\t\t\tsources: [options.source ? getRelativePath(options.file || '', options.source) : null],\n\t\t\tsourcesContent: options.includeContent ? [this.original] : [null],\n\t\t\tnames,\n\t\t\tmappings: mappings.raw,\n\t\t};\n\t}\n\n\tgenerateMap(options) {\n\t\treturn new SourceMap(this.generateDecodedMap(options));\n\t}\n\n\t_ensureindentStr() {\n\t\tif (this.indentStr === undefined) {\n\t\t\tthis.indentStr = guessIndent(this.original);\n\t\t}\n\t}\n\n\t_getRawIndentString() {\n\t\tthis._ensureindentStr();\n\t\treturn this.indentStr;\n\t}\n\n\tgetIndentString() {\n\t\tthis._ensureindentStr();\n\t\treturn this.indentStr === null ? '\\t' : this.indentStr;\n\t}\n\n\tindent(indentStr, options) {\n\t\tconst pattern = /^[^\\r\\n]/gm;\n\n\t\tif (isObject(indentStr)) {\n\t\t\toptions = indentStr;\n\t\t\tindentStr = undefined;\n\t\t}\n\n\t\tif (indentStr === undefined) {\n\t\t\tthis._ensureindentStr();\n\t\t\tindentStr = this.indentStr || '\\t';\n\t\t}\n\n\t\tif (indentStr === '') return this; // noop\n\n\t\toptions = options || {};\n\n\t\t// Process exclusion ranges\n\t\tconst isExcluded = {};\n\n\t\tif (options.exclude) {\n\t\t\tconst exclusions =\n\t\t\t\ttypeof options.exclude[0] === 'number' ? [options.exclude] : options.exclude;\n\t\t\texclusions.forEach((exclusion) => {\n\t\t\t\tfor (let i = exclusion[0]; i < exclusion[1]; i += 1) {\n\t\t\t\t\tisExcluded[i] = true;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tlet shouldIndentNextCharacter = options.indentStart !== false;\n\t\tconst replacer = (match) => {\n\t\t\tif (shouldIndentNextCharacter) return `${indentStr}${match}`;\n\t\t\tshouldIndentNextCharacter = true;\n\t\t\treturn match;\n\t\t};\n\n\t\tthis.intro = this.intro.replace(pattern, replacer);\n\n\t\tlet charIndex = 0;\n\t\tlet chunk = this.firstChunk;\n\n\t\twhile (chunk) {\n\t\t\tconst end = chunk.end;\n\n\t\t\tif (chunk.edited) {\n\t\t\t\tif (!isExcluded[charIndex]) {\n\t\t\t\t\tchunk.content = chunk.content.replace(pattern, replacer);\n\n\t\t\t\t\tif (chunk.content.length) {\n\t\t\t\t\t\tshouldIndentNextCharacter = chunk.content[chunk.content.length - 1] === '\\n';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcharIndex = chunk.start;\n\n\t\t\t\twhile (charIndex < end) {\n\t\t\t\t\tif (!isExcluded[charIndex]) {\n\t\t\t\t\t\tconst char = this.original[charIndex];\n\n\t\t\t\t\t\tif (char === '\\n') {\n\t\t\t\t\t\t\tshouldIndentNextCharacter = true;\n\t\t\t\t\t\t} else if (char !== '\\r' && shouldIndentNextCharacter) {\n\t\t\t\t\t\t\tshouldIndentNextCharacter = false;\n\n\t\t\t\t\t\t\tif (charIndex === chunk.start) {\n\t\t\t\t\t\t\t\tchunk.prependRight(indentStr);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis._splitChunk(chunk, charIndex);\n\t\t\t\t\t\t\t\tchunk = chunk.next;\n\t\t\t\t\t\t\t\tchunk.prependRight(indentStr);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tcharIndex += 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcharIndex = chunk.end;\n\t\t\tchunk = chunk.next;\n\t\t}\n\n\t\tthis.outro = this.outro.replace(pattern, replacer);\n\n\t\treturn this;\n\t}\n\n\tinsert() {\n\t\tthrow new Error(\n\t\t\t'magicString.insert(...) is deprecated. Use prependRight(...) or appendLeft(...)'\n\t\t);\n\t}\n\n\tinsertLeft(index, content) {\n\t\tif (!warned.insertLeft) {\n\t\t\tconsole.warn(\n\t\t\t\t'magicString.insertLeft(...) is deprecated. Use magicString.appendLeft(...) instead'\n\t\t\t); // eslint-disable-line no-console\n\t\t\twarned.insertLeft = true;\n\t\t}\n\n\t\treturn this.appendLeft(index, content);\n\t}\n\n\tinsertRight(index, content) {\n\t\tif (!warned.insertRight) {\n\t\t\tconsole.warn(\n\t\t\t\t'magicString.insertRight(...) is deprecated. Use magicString.prependRight(...) instead'\n\t\t\t); // eslint-disable-line no-console\n\t\t\twarned.insertRight = true;\n\t\t}\n\n\t\treturn this.prependRight(index, content);\n\t}\n\n\tmove(start, end, index) {\n\t\tif (index >= start && index <= end) throw new Error('Cannot move a selection inside itself');\n\n\t\tthis._split(start);\n\t\tthis._split(end);\n\t\tthis._split(index);\n\n\t\tconst first = this.byStart[start];\n\t\tconst last = this.byEnd[end];\n\n\t\tconst oldLeft = first.previous;\n\t\tconst oldRight = last.next;\n\n\t\tconst newRight = this.byStart[index];\n\t\tif (!newRight && last === this.lastChunk) return this;\n\t\tconst newLeft = newRight ? newRight.previous : this.lastChunk;\n\n\t\tif (oldLeft) oldLeft.next = oldRight;\n\t\tif (oldRight) oldRight.previous = oldLeft;\n\n\t\tif (newLeft) newLeft.next = first;\n\t\tif (newRight) newRight.previous = last;\n\n\t\tif (!first.previous) this.firstChunk = last.next;\n\t\tif (!last.next) {\n\t\t\tthis.lastChunk = first.previous;\n\t\t\tthis.lastChunk.next = null;\n\t\t}\n\n\t\tfirst.previous = newLeft;\n\t\tlast.next = newRight || null;\n\n\t\tif (!newLeft) this.firstChunk = first;\n\t\tif (!newRight) this.lastChunk = last;\n\t\treturn this;\n\t}\n\n\toverwrite(start, end, content, options) {\n\t\toptions = options || {};\n\t\treturn this.update(start, end, content, { ...options, overwrite: !options.contentOnly });\n\t}\n\n\tupdate(start, end, content, options) {\n\t\tif (typeof content !== 'string') throw new TypeError('replacement content must be a string');\n\n\t\twhile (start < 0) start += this.original.length;\n\t\twhile (end < 0) end += this.original.length;\n\n\t\tif (end > this.original.length) throw new Error('end is out of bounds');\n\t\tif (start === end)\n\t\t\tthrow new Error(\n\t\t\t\t'Cannot overwrite a zero-length range – use appendLeft or prependRight instead'\n\t\t\t);\n\n\t\tthis._split(start);\n\t\tthis._split(end);\n\n\t\tif (options === true) {\n\t\t\tif (!warned.storeName) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t'The final argument to magicString.overwrite(...) should be an options object. See https://github.com/rich-harris/magic-string'\n\t\t\t\t); // eslint-disable-line no-console\n\t\t\t\twarned.storeName = true;\n\t\t\t}\n\n\t\t\toptions = { storeName: true };\n\t\t}\n\t\tconst storeName = options !== undefined ? options.storeName : false;\n\t\tconst overwrite = options !== undefined ? options.overwrite : false;\n\n\t\tif (storeName) {\n\t\t\tconst original = this.original.slice(start, end);\n\t\t\tObject.defineProperty(this.storedNames, original, {\n\t\t\t\twritable: true,\n\t\t\t\tvalue: true,\n\t\t\t\tenumerable: true,\n\t\t\t});\n\t\t}\n\n\t\tconst first = this.byStart[start];\n\t\tconst last = this.byEnd[end];\n\n\t\tif (first) {\n\t\t\tlet chunk = first;\n\t\t\twhile (chunk !== last) {\n\t\t\t\tif (chunk.next !== this.byStart[chunk.end]) {\n\t\t\t\t\tthrow new Error('Cannot overwrite across a split point');\n\t\t\t\t}\n\t\t\t\tchunk = chunk.next;\n\t\t\t\tchunk.edit('', false);\n\t\t\t}\n\n\t\t\tfirst.edit(content, storeName, !overwrite);\n\t\t} else {\n\t\t\t// must be inserting at the end\n\t\t\tconst newChunk = new Chunk(start, end, '').edit(content, storeName);\n\n\t\t\t// TODO last chunk in the array may not be the last chunk, if it's moved...\n\t\t\tlast.next = newChunk;\n\t\t\tnewChunk.previous = last;\n\t\t}\n\t\treturn this;\n\t}\n\n\tprepend(content) {\n\t\tif (typeof content !== 'string') throw new TypeError('outro content must be a string');\n\n\t\tthis.intro = content + this.intro;\n\t\treturn this;\n\t}\n\n\tprependLeft(index, content) {\n\t\tif (typeof content !== 'string') throw new TypeError('inserted content must be a string');\n\n\t\tthis._split(index);\n\n\t\tconst chunk = this.byEnd[index];\n\n\t\tif (chunk) {\n\t\t\tchunk.prependLeft(content);\n\t\t} else {\n\t\t\tthis.intro = content + this.intro;\n\t\t}\n\t\treturn this;\n\t}\n\n\tprependRight(index, content) {\n\t\tif (typeof content !== 'string') throw new TypeError('inserted content must be a string');\n\n\t\tthis._split(index);\n\n\t\tconst chunk = this.byStart[index];\n\n\t\tif (chunk) {\n\t\t\tchunk.prependRight(content);\n\t\t} else {\n\t\t\tthis.outro = content + this.outro;\n\t\t}\n\t\treturn this;\n\t}\n\n\tremove(start, end) {\n\t\twhile (start < 0) start += this.original.length;\n\t\twhile (end < 0) end += this.original.length;\n\n\t\tif (start === end) return this;\n\n\t\tif (start < 0 || end > this.original.length) throw new Error('Character is out of bounds');\n\t\tif (start > end) throw new Error('end must be greater than start');\n\n\t\tthis._split(start);\n\t\tthis._split(end);\n\n\t\tlet chunk = this.byStart[start];\n\n\t\twhile (chunk) {\n\t\t\tchunk.intro = '';\n\t\t\tchunk.outro = '';\n\t\t\tchunk.edit('');\n\n\t\t\tchunk = end > chunk.end ? this.byStart[chunk.end] : null;\n\t\t}\n\t\treturn this;\n\t}\n\n\tlastChar() {\n\t\tif (this.outro.length) return this.outro[this.outro.length - 1];\n\t\tlet chunk = this.lastChunk;\n\t\tdo {\n\t\t\tif (chunk.outro.length) return chunk.outro[chunk.outro.length - 1];\n\t\t\tif (chunk.content.length) return chunk.content[chunk.content.length - 1];\n\t\t\tif (chunk.intro.length) return chunk.intro[chunk.intro.length - 1];\n\t\t} while ((chunk = chunk.previous));\n\t\tif (this.intro.length) return this.intro[this.intro.length - 1];\n\t\treturn '';\n\t}\n\n\tlastLine() {\n\t\tlet lineIndex = this.outro.lastIndexOf(n);\n\t\tif (lineIndex !== -1) return this.outro.substr(lineIndex + 1);\n\t\tlet lineStr = this.outro;\n\t\tlet chunk = this.lastChunk;\n\t\tdo {\n\t\t\tif (chunk.outro.length > 0) {\n\t\t\t\tlineIndex = chunk.outro.lastIndexOf(n);\n\t\t\t\tif (lineIndex !== -1) return chunk.outro.substr(lineIndex + 1) + lineStr;\n\t\t\t\tlineStr = chunk.outro + lineStr;\n\t\t\t}\n\n\t\t\tif (chunk.content.length > 0) {\n\t\t\t\tlineIndex = chunk.content.lastIndexOf(n);\n\t\t\t\tif (lineIndex !== -1) return chunk.content.substr(lineIndex + 1) + lineStr;\n\t\t\t\tlineStr = chunk.content + lineStr;\n\t\t\t}\n\n\t\t\tif (chunk.intro.length > 0) {\n\t\t\t\tlineIndex = chunk.intro.lastIndexOf(n);\n\t\t\t\tif (lineIndex !== -1) return chunk.intro.substr(lineIndex + 1) + lineStr;\n\t\t\t\tlineStr = chunk.intro + lineStr;\n\t\t\t}\n\t\t} while ((chunk = chunk.previous));\n\t\tlineIndex = this.intro.lastIndexOf(n);\n\t\tif (lineIndex !== -1) return this.intro.substr(lineIndex + 1) + lineStr;\n\t\treturn this.intro + lineStr;\n\t}\n\n\tslice(start = 0, end = this.original.length) {\n\t\twhile (start < 0) start += this.original.length;\n\t\twhile (end < 0) end += this.original.length;\n\n\t\tlet result = '';\n\n\t\t// find start chunk\n\t\tlet chunk = this.firstChunk;\n\t\twhile (chunk && (chunk.start > start || chunk.end <= start)) {\n\t\t\t// found end chunk before start\n\t\t\tif (chunk.start < end && chunk.end >= end) {\n\t\t\t\treturn result;\n\t\t\t}\n\n\t\t\tchunk = chunk.next;\n\t\t}\n\n\t\tif (chunk && chunk.edited && chunk.start !== start)\n\t\t\tthrow new Error(`Cannot use replaced character ${start} as slice start anchor.`);\n\n\t\tconst startChunk = chunk;\n\t\twhile (chunk) {\n\t\t\tif (chunk.intro && (startChunk !== chunk || chunk.start === start)) {\n\t\t\t\tresult += chunk.intro;\n\t\t\t}\n\n\t\t\tconst containsEnd = chunk.start < end && chunk.end >= end;\n\t\t\tif (containsEnd && chunk.edited && chunk.end !== end)\n\t\t\t\tthrow new Error(`Cannot use replaced character ${end} as slice end anchor.`);\n\n\t\t\tconst sliceStart = startChunk === chunk ? start - chunk.start : 0;\n\t\t\tconst sliceEnd = containsEnd ? chunk.content.length + end - chunk.end : chunk.content.length;\n\n\t\t\tresult += chunk.content.slice(sliceStart, sliceEnd);\n\n\t\t\tif (chunk.outro && (!containsEnd || chunk.end === end)) {\n\t\t\t\tresult += chunk.outro;\n\t\t\t}\n\n\t\t\tif (containsEnd) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tchunk = chunk.next;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t// TODO deprecate this? not really very useful\n\tsnip(start, end) {\n\t\tconst clone = this.clone();\n\t\tclone.remove(0, start);\n\t\tclone.remove(end, clone.original.length);\n\n\t\treturn clone;\n\t}\n\n\t_split(index) {\n\t\tif (this.byStart[index] || this.byEnd[index]) return;\n\n\t\tlet chunk = this.lastSearchedChunk;\n\t\tconst searchForward = index > chunk.end;\n\n\t\twhile (chunk) {\n\t\t\tif (chunk.contains(index)) return this._splitChunk(chunk, index);\n\n\t\t\tchunk = searchForward ? this.byStart[chunk.end] : this.byEnd[chunk.start];\n\t\t}\n\t}\n\n\t_splitChunk(chunk, index) {\n\t\tif (chunk.edited && chunk.content.length) {\n\t\t\t// zero-length edited chunks are a special case (overlapping replacements)\n\t\t\tconst loc = getLocator(this.original)(index);\n\t\t\tthrow new Error(\n\t\t\t\t`Cannot split a chunk that has already been edited (${loc.line}:${loc.column} – \"${chunk.original}\")`\n\t\t\t);\n\t\t}\n\n\t\tconst newChunk = chunk.split(index);\n\n\t\tthis.byEnd[index] = chunk;\n\t\tthis.byStart[index] = newChunk;\n\t\tthis.byEnd[newChunk.end] = newChunk;\n\n\t\tif (chunk === this.lastChunk) this.lastChunk = newChunk;\n\n\t\tthis.lastSearchedChunk = chunk;\n\t\treturn true;\n\t}\n\n\ttoString() {\n\t\tlet str = this.intro;\n\n\t\tlet chunk = this.firstChunk;\n\t\twhile (chunk) {\n\t\t\tstr += chunk.toString();\n\t\t\tchunk = chunk.next;\n\t\t}\n\n\t\treturn str + this.outro;\n\t}\n\n\tisEmpty() {\n\t\tlet chunk = this.firstChunk;\n\t\tdo {\n\t\t\tif (\n\t\t\t\t(chunk.intro.length && chunk.intro.trim()) ||\n\t\t\t\t(chunk.content.length && chunk.content.trim()) ||\n\t\t\t\t(chunk.outro.length && chunk.outro.trim())\n\t\t\t)\n\t\t\t\treturn false;\n\t\t} while ((chunk = chunk.next));\n\t\treturn true;\n\t}\n\n\tlength() {\n\t\tlet chunk = this.firstChunk;\n\t\tlet length = 0;\n\t\tdo {\n\t\t\tlength += chunk.intro.length + chunk.content.length + chunk.outro.length;\n\t\t} while ((chunk = chunk.next));\n\t\treturn length;\n\t}\n\n\ttrimLines() {\n\t\treturn this.trim('[\\\\r\\\\n]');\n\t}\n\n\ttrim(charType) {\n\t\treturn this.trimStart(charType).trimEnd(charType);\n\t}\n\n\ttrimEndAborted(charType) {\n\t\tconst rx = new RegExp((charType || '\\\\s') + '+$');\n\n\t\tthis.outro = this.outro.replace(rx, '');\n\t\tif (this.outro.length) return true;\n\n\t\tlet chunk = this.lastChunk;\n\n\t\tdo {\n\t\t\tconst end = chunk.end;\n\t\t\tconst aborted = chunk.trimEnd(rx);\n\n\t\t\t// if chunk was trimmed, we have a new lastChunk\n\t\t\tif (chunk.end !== end) {\n\t\t\t\tif (this.lastChunk === chunk) {\n\t\t\t\t\tthis.lastChunk = chunk.next;\n\t\t\t\t}\n\n\t\t\t\tthis.byEnd[chunk.end] = chunk;\n\t\t\t\tthis.byStart[chunk.next.start] = chunk.next;\n\t\t\t\tthis.byEnd[chunk.next.end] = chunk.next;\n\t\t\t}\n\n\t\t\tif (aborted) return true;\n\t\t\tchunk = chunk.previous;\n\t\t} while (chunk);\n\n\t\treturn false;\n\t}\n\n\ttrimEnd(charType) {\n\t\tthis.trimEndAborted(charType);\n\t\treturn this;\n\t}\n\ttrimStartAborted(charType) {\n\t\tconst rx = new RegExp('^' + (charType || '\\\\s') + '+');\n\n\t\tthis.intro = this.intro.replace(rx, '');\n\t\tif (this.intro.length) return true;\n\n\t\tlet chunk = this.firstChunk;\n\n\t\tdo {\n\t\t\tconst end = chunk.end;\n\t\t\tconst aborted = chunk.trimStart(rx);\n\n\t\t\tif (chunk.end !== end) {\n\t\t\t\t// special case...\n\t\t\t\tif (chunk === this.lastChunk) this.lastChunk = chunk.next;\n\n\t\t\t\tthis.byEnd[chunk.end] = chunk;\n\t\t\t\tthis.byStart[chunk.next.start] = chunk.next;\n\t\t\t\tthis.byEnd[chunk.next.end] = chunk.next;\n\t\t\t}\n\n\t\t\tif (aborted) return true;\n\t\t\tchunk = chunk.next;\n\t\t} while (chunk);\n\n\t\treturn false;\n\t}\n\n\ttrimStart(charType) {\n\t\tthis.trimStartAborted(charType);\n\t\treturn this;\n\t}\n\n\thasChanged() {\n\t\treturn this.original !== this.toString();\n\t}\n\n\t_replaceRegexp(searchValue, replacement) {\n\t\tfunction getReplacement(match, str) {\n\t\t\tif (typeof replacement === 'string') {\n\t\t\t\treturn replacement.replace(/\\$(\\$|&|\\d+)/g, (_, i) => {\n\t\t\t\t\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace#specifying_a_string_as_a_parameter\n\t\t\t\t\tif (i === '$') return '$';\n\t\t\t\t\tif (i === '&') return match[0];\n\t\t\t\t\tconst num = +i;\n\t\t\t\t\tif (num < match.length) return match[+i];\n\t\t\t\t\treturn `$${i}`;\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\treturn replacement(...match, match.index, str, match.groups);\n\t\t\t}\n\t\t}\n\t\tfunction matchAll(re, str) {\n\t\t\tlet match;\n\t\t\tconst matches = [];\n\t\t\twhile ((match = re.exec(str))) {\n\t\t\t\tmatches.push(match);\n\t\t\t}\n\t\t\treturn matches;\n\t\t}\n\t\tif (searchValue.global) {\n\t\t\tconst matches = matchAll(searchValue, this.original);\n\t\t\tmatches.forEach((match) => {\n\t\t\t\tif (match.index != null)\n\t\t\t\t\tthis.overwrite(\n\t\t\t\t\t\tmatch.index,\n\t\t\t\t\t\tmatch.index + match[0].length,\n\t\t\t\t\t\tgetReplacement(match, this.original)\n\t\t\t\t\t);\n\t\t\t});\n\t\t} else {\n\t\t\tconst match = this.original.match(searchValue);\n\t\t\tif (match && match.index != null)\n\t\t\t\tthis.overwrite(\n\t\t\t\t\tmatch.index,\n\t\t\t\t\tmatch.index + match[0].length,\n\t\t\t\t\tgetReplacement(match, this.original)\n\t\t\t\t);\n\t\t}\n\t\treturn this;\n\t}\n\n\t_replaceString(string, replacement) {\n\t\tconst { original } = this;\n\t\tconst index = original.indexOf(string);\n\n\t\tif (index !== -1) {\n\t\t\tthis.overwrite(index, index + string.length, replacement);\n\t\t}\n\n\t\treturn this;\n\t}\n\n\treplace(searchValue, replacement) {\n\t\tif (typeof searchValue === 'string') {\n\t\t\treturn this._replaceString(searchValue, replacement);\n\t\t}\n\n\t\treturn this._replaceRegexp(searchValue, replacement);\n\t}\n\n\t_replaceAllString(string, replacement) {\n\t\tconst { original } = this;\n\t\tconst stringLength = string.length;\n\t\tfor (\n\t\t\tlet index = original.indexOf(string);\n\t\t\tindex !== -1;\n\t\t\tindex = original.indexOf(string, index + stringLength)\n\t\t) {\n\t\t\tthis.overwrite(index, index + stringLength, replacement);\n\t\t}\n\n\t\treturn this;\n\t}\n\n\treplaceAll(searchValue, replacement) {\n\t\tif (typeof searchValue === 'string') {\n\t\t\treturn this._replaceAllString(searchValue, replacement);\n\t\t}\n\n\t\tif (!searchValue.global) {\n\t\t\tthrow new TypeError(\n\t\t\t\t'MagicString.prototype.replaceAll called with a non-global RegExp argument'\n\t\t\t);\n\t\t}\n\n\t\treturn this._replaceRegexp(searchValue, replacement);\n\t}\n}\n\nconst hasOwnProp = Object.prototype.hasOwnProperty;\n\nclass Bundle {\n\tconstructor(options = {}) {\n\t\tthis.intro = options.intro || '';\n\t\tthis.separator = options.separator !== undefined ? options.separator : '\\n';\n\t\tthis.sources = [];\n\t\tthis.uniqueSources = [];\n\t\tthis.uniqueSourceIndexByFilename = {};\n\t}\n\n\taddSource(source) {\n\t\tif (source instanceof MagicString) {\n\t\t\treturn this.addSource({\n\t\t\t\tcontent: source,\n\t\t\t\tfilename: source.filename,\n\t\t\t\tseparator: this.separator,\n\t\t\t});\n\t\t}\n\n\t\tif (!isObject(source) || !source.content) {\n\t\t\tthrow new Error(\n\t\t\t\t'bundle.addSource() takes an object with a `content` property, which should be an instance of MagicString, and an optional `filename`'\n\t\t\t);\n\t\t}\n\n\t\t['filename', 'indentExclusionRanges', 'separator'].forEach((option) => {\n\t\t\tif (!hasOwnProp.call(source, option)) source[option] = source.content[option];\n\t\t});\n\n\t\tif (source.separator === undefined) {\n\t\t\t// TODO there's a bunch of this sort of thing, needs cleaning up\n\t\t\tsource.separator = this.separator;\n\t\t}\n\n\t\tif (source.filename) {\n\t\t\tif (!hasOwnProp.call(this.uniqueSourceIndexByFilename, source.filename)) {\n\t\t\t\tthis.uniqueSourceIndexByFilename[source.filename] = this.uniqueSources.length;\n\t\t\t\tthis.uniqueSources.push({ filename: source.filename, content: source.content.original });\n\t\t\t} else {\n\t\t\t\tconst uniqueSource = this.uniqueSources[this.uniqueSourceIndexByFilename[source.filename]];\n\t\t\t\tif (source.content.original !== uniqueSource.content) {\n\t\t\t\t\tthrow new Error(`Illegal source: same filename (${source.filename}), different contents`);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.sources.push(source);\n\t\treturn this;\n\t}\n\n\tappend(str, options) {\n\t\tthis.addSource({\n\t\t\tcontent: new MagicString(str),\n\t\t\tseparator: (options && options.separator) || '',\n\t\t});\n\n\t\treturn this;\n\t}\n\n\tclone() {\n\t\tconst bundle = new Bundle({\n\t\t\tintro: this.intro,\n\t\t\tseparator: this.separator,\n\t\t});\n\n\t\tthis.sources.forEach((source) => {\n\t\t\tbundle.addSource({\n\t\t\t\tfilename: source.filename,\n\t\t\t\tcontent: source.content.clone(),\n\t\t\t\tseparator: source.separator,\n\t\t\t});\n\t\t});\n\n\t\treturn bundle;\n\t}\n\n\tgenerateDecodedMap(options = {}) {\n\t\tconst names = [];\n\t\tthis.sources.forEach((source) => {\n\t\t\tObject.keys(source.content.storedNames).forEach((name) => {\n\t\t\t\tif (!~names.indexOf(name)) names.push(name);\n\t\t\t});\n\t\t});\n\n\t\tconst mappings = new Mappings(options.hires);\n\n\t\tif (this.intro) {\n\t\t\tmappings.advance(this.intro);\n\t\t}\n\n\t\tthis.sources.forEach((source, i) => {\n\t\t\tif (i > 0) {\n\t\t\t\tmappings.advance(this.separator);\n\t\t\t}\n\n\t\t\tconst sourceIndex = source.filename ? this.uniqueSourceIndexByFilename[source.filename] : -1;\n\t\t\tconst magicString = source.content;\n\t\t\tconst locate = getLocator(magicString.original);\n\n\t\t\tif (magicString.intro) {\n\t\t\t\tmappings.advance(magicString.intro);\n\t\t\t}\n\n\t\t\tmagicString.firstChunk.eachNext((chunk) => {\n\t\t\t\tconst loc = locate(chunk.start);\n\n\t\t\t\tif (chunk.intro.length) mappings.advance(chunk.intro);\n\n\t\t\t\tif (source.filename) {\n\t\t\t\t\tif (chunk.edited) {\n\t\t\t\t\t\tmappings.addEdit(\n\t\t\t\t\t\t\tsourceIndex,\n\t\t\t\t\t\t\tchunk.content,\n\t\t\t\t\t\t\tloc,\n\t\t\t\t\t\t\tchunk.storeName ? names.indexOf(chunk.original) : -1\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmappings.addUneditedChunk(\n\t\t\t\t\t\t\tsourceIndex,\n\t\t\t\t\t\t\tchunk,\n\t\t\t\t\t\t\tmagicString.original,\n\t\t\t\t\t\t\tloc,\n\t\t\t\t\t\t\tmagicString.sourcemapLocations\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tmappings.advance(chunk.content);\n\t\t\t\t}\n\n\t\t\t\tif (chunk.outro.length) mappings.advance(chunk.outro);\n\t\t\t});\n\n\t\t\tif (magicString.outro) {\n\t\t\t\tmappings.advance(magicString.outro);\n\t\t\t}\n\t\t});\n\n\t\treturn {\n\t\t\tfile: options.file ? options.file.split(/[/\\\\]/).pop() : null,\n\t\t\tsources: this.uniqueSources.map((source) => {\n\t\t\t\treturn options.file ? getRelativePath(options.file, source.filename) : source.filename;\n\t\t\t}),\n\t\t\tsourcesContent: this.uniqueSources.map((source) => {\n\t\t\t\treturn options.includeContent ? source.content : null;\n\t\t\t}),\n\t\t\tnames,\n\t\t\tmappings: mappings.raw,\n\t\t};\n\t}\n\n\tgenerateMap(options) {\n\t\treturn new SourceMap(this.generateDecodedMap(options));\n\t}\n\n\tgetIndentString() {\n\t\tconst indentStringCounts = {};\n\n\t\tthis.sources.forEach((source) => {\n\t\t\tconst indentStr = source.content._getRawIndentString();\n\n\t\t\tif (indentStr === null) return;\n\n\t\t\tif (!indentStringCounts[indentStr]) indentStringCounts[indentStr] = 0;\n\t\t\tindentStringCounts[indentStr] += 1;\n\t\t});\n\n\t\treturn (\n\t\t\tObject.keys(indentStringCounts).sort((a, b) => {\n\t\t\t\treturn indentStringCounts[a] - indentStringCounts[b];\n\t\t\t})[0] || '\\t'\n\t\t);\n\t}\n\n\tindent(indentStr) {\n\t\tif (!arguments.length) {\n\t\t\tindentStr = this.getIndentString();\n\t\t}\n\n\t\tif (indentStr === '') return this; // noop\n\n\t\tlet trailingNewline = !this.intro || this.intro.slice(-1) === '\\n';\n\n\t\tthis.sources.forEach((source, i) => {\n\t\t\tconst separator = source.separator !== undefined ? source.separator : this.separator;\n\t\t\tconst indentStart = trailingNewline || (i > 0 && /\\r?\\n$/.test(separator));\n\n\t\t\tsource.content.indent(indentStr, {\n\t\t\t\texclude: source.indentExclusionRanges,\n\t\t\t\tindentStart, //: trailingNewline || /\\r?\\n$/.test( separator )  //true///\\r?\\n/.test( separator )\n\t\t\t});\n\n\t\t\ttrailingNewline = source.content.lastChar() === '\\n';\n\t\t});\n\n\t\tif (this.intro) {\n\t\t\tthis.intro =\n\t\t\t\tindentStr +\n\t\t\t\tthis.intro.replace(/^[^\\n]/gm, (match, index) => {\n\t\t\t\t\treturn index > 0 ? indentStr + match : match;\n\t\t\t\t});\n\t\t}\n\n\t\treturn this;\n\t}\n\n\tprepend(str) {\n\t\tthis.intro = str + this.intro;\n\t\treturn this;\n\t}\n\n\ttoString() {\n\t\tconst body = this.sources\n\t\t\t.map((source, i) => {\n\t\t\t\tconst separator = source.separator !== undefined ? source.separator : this.separator;\n\t\t\t\tconst str = (i > 0 ? separator : '') + source.content.toString();\n\n\t\t\t\treturn str;\n\t\t\t})\n\t\t\t.join('');\n\n\t\treturn this.intro + body;\n\t}\n\n\tisEmpty() {\n\t\tif (this.intro.length && this.intro.trim()) return false;\n\t\tif (this.sources.some((source) => !source.content.isEmpty())) return false;\n\t\treturn true;\n\t}\n\n\tlength() {\n\t\treturn this.sources.reduce(\n\t\t\t(length, source) => length + source.content.length(),\n\t\t\tthis.intro.length\n\t\t);\n\t}\n\n\ttrimLines() {\n\t\treturn this.trim('[\\\\r\\\\n]');\n\t}\n\n\ttrim(charType) {\n\t\treturn this.trimStart(charType).trimEnd(charType);\n\t}\n\n\ttrimStart(charType) {\n\t\tconst rx = new RegExp('^' + (charType || '\\\\s') + '+');\n\t\tthis.intro = this.intro.replace(rx, '');\n\n\t\tif (!this.intro) {\n\t\t\tlet source;\n\t\t\tlet i = 0;\n\n\t\t\tdo {\n\t\t\t\tsource = this.sources[i++];\n\t\t\t\tif (!source) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} while (!source.content.trimStartAborted(charType));\n\t\t}\n\n\t\treturn this;\n\t}\n\n\ttrimEnd(charType) {\n\t\tconst rx = new RegExp((charType || '\\\\s') + '+$');\n\n\t\tlet source;\n\t\tlet i = this.sources.length - 1;\n\n\t\tdo {\n\t\t\tsource = this.sources[i--];\n\t\t\tif (!source) {\n\t\t\t\tthis.intro = this.intro.replace(rx, '');\n\t\t\t\tbreak;\n\t\t\t}\n\t\t} while (!source.content.trimEndAborted(charType));\n\n\t\treturn this;\n\t}\n}\n\nexport { Bundle, SourceMap, MagicString as default };\n//# sourceMappingURL=magic-string.es.mjs.map\n/dist/magic-string.umd.js.map\u0000\u0001{\"version\":3,\"file\":\"magic-string.umd.js\",\"sources\":[\"../src/BitSet.js\",\"../src/Chunk.js\",\"../node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.mjs\",\"../src/SourceMap.js\",\"../src/utils/guessIndent.js\",\"../src/utils/getRelativePath.js\",\"../src/utils/isObject.js\",\"../src/utils/getLocator.js\",\"../src/utils/Mappings.js\",\"../src/MagicString.js\",\"../src/Bundle.js\",\"../src/index-legacy.js\"],\"sourcesContent\":[\"export default class BitSet {\\n\\tconstructor(arg) {\\n\\t\\tthis.bits = arg instanceof BitSet ? arg.bits.slice() : [];\\n\\t}\\n\\n\\tadd(n) {\\n\\t\\tthis.bits[n >> 5] |= 1 << (n & 31);\\n\\t}\\n\\n\\thas(n) {\\n\\t\\treturn !!(this.bits[n >> 5] & (1 << (n & 31)));\\n\\t}\\n}\\n\",\"export default class Chunk {\\n\\tconstructor(start, end, content) {\\n\\t\\tthis.start = start;\\n\\t\\tthis.end = end;\\n\\t\\tthis.original = content;\\n\\n\\t\\tthis.intro = '';\\n\\t\\tthis.outro = '';\\n\\n\\t\\tthis.content = content;\\n\\t\\tthis.storeName = false;\\n\\t\\tthis.edited = false;\\n\\n\\t\\tif (DEBUG) {\\n\\t\\t\\t// we make these non-enumerable, for sanity while debugging\\n\\t\\t\\tObject.defineProperties(this, {\\n\\t\\t\\t\\tprevious: { writable: true, value: null },\\n\\t\\t\\t\\tnext: { writable: true, value: null },\\n\\t\\t\\t});\\n\\t\\t} else {\\n\\t\\t\\tthis.previous = null;\\n\\t\\t\\tthis.next = null;\\n\\t\\t}\\n\\t}\\n\\n\\tappendLeft(content) {\\n\\t\\tthis.outro += content;\\n\\t}\\n\\n\\tappendRight(content) {\\n\\t\\tthis.intro = this.intro + content;\\n\\t}\\n\\n\\tclone() {\\n\\t\\tconst chunk = new Chunk(this.start, this.end, this.original);\\n\\n\\t\\tchunk.intro = this.intro;\\n\\t\\tchunk.outro = this.outro;\\n\\t\\tchunk.content = this.content;\\n\\t\\tchunk.storeName = this.storeName;\\n\\t\\tchunk.edited = this.edited;\\n\\n\\t\\treturn chunk;\\n\\t}\\n\\n\\tcontains(index) {\\n\\t\\treturn this.start < index && index < this.end;\\n\\t}\\n\\n\\teachNext(fn) {\\n\\t\\tlet chunk = this;\\n\\t\\twhile (chunk) {\\n\\t\\t\\tfn(chunk);\\n\\t\\t\\tchunk = chunk.next;\\n\\t\\t}\\n\\t}\\n\\n\\teachPrevious(fn) {\\n\\t\\tlet chunk = this;\\n\\t\\twhile (chunk) {\\n\\t\\t\\tfn(chunk);\\n\\t\\t\\tchunk = chunk.previous;\\n\\t\\t}\\n\\t}\\n\\n\\tedit(content, storeName, contentOnly) {\\n\\t\\tthis.content = content;\\n\\t\\tif (!contentOnly) {\\n\\t\\t\\tthis.intro = '';\\n\\t\\t\\tthis.outro = '';\\n\\t\\t}\\n\\t\\tthis.storeName = storeName;\\n\\n\\t\\tthis.edited = true;\\n\\n\\t\\treturn this;\\n\\t}\\n\\n\\tprependLeft(content) {\\n\\t\\tthis.outro = content + this.outro;\\n\\t}\\n\\n\\tprependRight(content) {\\n\\t\\tthis.intro = content + this.intro;\\n\\t}\\n\\n\\tsplit(index) {\\n\\t\\tconst sliceIndex = index - this.start;\\n\\n\\t\\tconst originalBefore = this.original.slice(0, sliceIndex);\\n\\t\\tconst originalAfter = this.original.slice(sliceIndex);\\n\\n\\t\\tthis.original = originalBefore;\\n\\n\\t\\tconst newChunk = new Chunk(index, this.end, originalAfter);\\n\\t\\tnewChunk.outro = this.outro;\\n\\t\\tthis.outro = '';\\n\\n\\t\\tthis.end = index;\\n\\n\\t\\tif (this.edited) {\\n\\t\\t\\t// TODO is this block necessary?...\\n\\t\\t\\tnewChunk.edit('', false);\\n\\t\\t\\tthis.content = '';\\n\\t\\t} else {\\n\\t\\t\\tthis.content = originalBefore;\\n\\t\\t}\\n\\n\\t\\tnewChunk.next = this.next;\\n\\t\\tif (newChunk.next) newChunk.next.previous = newChunk;\\n\\t\\tnewChunk.previous = this;\\n\\t\\tthis.next = newChunk;\\n\\n\\t\\treturn newChunk;\\n\\t}\\n\\n\\ttoString() {\\n\\t\\treturn this.intro + this.content + this.outro;\\n\\t}\\n\\n\\ttrimEnd(rx) {\\n\\t\\tthis.outro = this.outro.replace(rx, '');\\n\\t\\tif (this.outro.length) return true;\\n\\n\\t\\tconst trimmed = this.content.replace(rx, '');\\n\\n\\t\\tif (trimmed.length) {\\n\\t\\t\\tif (trimmed !== this.content) {\\n\\t\\t\\t\\tthis.split(this.start + trimmed.length).edit('', undefined, true);\\n\\t\\t\\t}\\n\\t\\t\\treturn true;\\n\\t\\t} else {\\n\\t\\t\\tthis.edit('', undefined, true);\\n\\n\\t\\t\\tthis.intro = this.intro.replace(rx, '');\\n\\t\\t\\tif (this.intro.length) return true;\\n\\t\\t}\\n\\t}\\n\\n\\ttrimStart(rx) {\\n\\t\\tthis.intro = this.intro.replace(rx, '');\\n\\t\\tif (this.intro.length) return true;\\n\\n\\t\\tconst trimmed = this.content.replace(rx, '');\\n\\n\\t\\tif (trimmed.length) {\\n\\t\\t\\tif (trimmed !== this.content) {\\n\\t\\t\\t\\tthis.split(this.end - trimmed.length);\\n\\t\\t\\t\\tthis.edit('', undefined, true);\\n\\t\\t\\t}\\n\\t\\t\\treturn true;\\n\\t\\t} else {\\n\\t\\t\\tthis.edit('', undefined, true);\\n\\n\\t\\t\\tthis.outro = this.outro.replace(rx, '');\\n\\t\\t\\tif (this.outro.length) return true;\\n\\t\\t}\\n\\t}\\n}\\n\",\"const comma = ','.charCodeAt(0);\\nconst semicolon = ';'.charCodeAt(0);\\nconst chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\\nconst intToChar = new Uint8Array(64); // 64 possible chars.\\nconst charToInt = new Uint8Array(128); // z is 122 in ASCII\\nfor (let i = 0; i < chars.length; i++) {\\n    const c = chars.charCodeAt(i);\\n    intToChar[i] = c;\\n    charToInt[c] = i;\\n}\\n// Provide a fallback for older environments.\\nconst td = typeof TextDecoder !== 'undefined'\\n    ? /* #__PURE__ */ new TextDecoder()\\n    : typeof Buffer !== 'undefined'\\n        ? {\\n            decode(buf) {\\n                const out = Buffer.from(buf.buffer, buf.byteOffset, buf.byteLength);\\n                return out.toString();\\n            },\\n        }\\n        : {\\n            decode(buf) {\\n                let out = '';\\n                for (let i = 0; i < buf.length; i++) {\\n                    out += String.fromCharCode(buf[i]);\\n                }\\n                return out;\\n            },\\n        };\\nfunction decode(mappings) {\\n    const state = new Int32Array(5);\\n    const decoded = [];\\n    let index = 0;\\n    do {\\n        const semi = indexOf(mappings, index);\\n        const line = [];\\n        let sorted = true;\\n        let lastCol = 0;\\n        state[0] = 0;\\n        for (let i = index; i < semi; i++) {\\n            let seg;\\n            i = decodeInteger(mappings, i, state, 0); // genColumn\\n            const col = state[0];\\n            if (col < lastCol)\\n                sorted = false;\\n            lastCol = col;\\n            if (hasMoreVlq(mappings, i, semi)) {\\n                i = decodeInteger(mappings, i, state, 1); // sourcesIndex\\n                i = decodeInteger(mappings, i, state, 2); // sourceLine\\n                i = decodeInteger(mappings, i, state, 3); // sourceColumn\\n                if (hasMoreVlq(mappings, i, semi)) {\\n                    i = decodeInteger(mappings, i, state, 4); // namesIndex\\n                    seg = [col, state[1], state[2], state[3], state[4]];\\n                }\\n                else {\\n                    seg = [col, state[1], state[2], state[3]];\\n                }\\n            }\\n            else {\\n                seg = [col];\\n            }\\n            line.push(seg);\\n        }\\n        if (!sorted)\\n            sort(line);\\n        decoded.push(line);\\n        index = semi + 1;\\n    } while (index <= mappings.length);\\n    return decoded;\\n}\\nfunction indexOf(mappings, index) {\\n    const idx = mappings.indexOf(';', index);\\n    return idx === -1 ? mappings.length : idx;\\n}\\nfunction decodeInteger(mappings, pos, state, j) {\\n    let value = 0;\\n    let shift = 0;\\n    let integer = 0;\\n    do {\\n        const c = mappings.charCodeAt(pos++);\\n        integer = charToInt[c];\\n        value |= (integer & 31) << shift;\\n        shift += 5;\\n    } while (integer & 32);\\n    const shouldNegate = value & 1;\\n    value >>>= 1;\\n    if (shouldNegate) {\\n        value = -0x80000000 | -value;\\n    }\\n    state[j] += value;\\n    return pos;\\n}\\nfunction hasMoreVlq(mappings, i, length) {\\n    if (i >= length)\\n        return false;\\n    return mappings.charCodeAt(i) !== comma;\\n}\\nfunction sort(line) {\\n    line.sort(sortComparator);\\n}\\nfunction sortComparator(a, b) {\\n    return a[0] - b[0];\\n}\\nfunction encode(decoded) {\\n    const state = new Int32Array(5);\\n    const bufLength = 1024 * 16;\\n    const subLength = bufLength - 36;\\n    const buf = new Uint8Array(bufLength);\\n    const sub = buf.subarray(0, subLength);\\n    let pos = 0;\\n    let out = '';\\n    for (let i = 0; i < decoded.length; i++) {\\n        const line = decoded[i];\\n        if (i > 0) {\\n            if (pos === bufLength) {\\n                out += td.decode(buf);\\n                pos = 0;\\n            }\\n            buf[pos++] = semicolon;\\n        }\\n        if (line.length === 0)\\n            continue;\\n        state[0] = 0;\\n        for (let j = 0; j < line.length; j++) {\\n            const segment = line[j];\\n            // We can push up to 5 ints, each int can take at most 7 chars, and we\\n            // may push a comma.\\n            if (pos > subLength) {\\n                out += td.decode(sub);\\n                buf.copyWithin(0, subLength, pos);\\n                pos -= subLength;\\n            }\\n            if (j > 0)\\n                buf[pos++] = comma;\\n            pos = encodeInteger(buf, pos, state, segment, 0); // genColumn\\n            if (segment.length === 1)\\n                continue;\\n            pos = encodeInteger(buf, pos, state, segment, 1); // sourcesIndex\\n            pos = encodeInteger(buf, pos, state, segment, 2); // sourceLine\\n            pos = encodeInteger(buf, pos, state, segment, 3); // sourceColumn\\n            if (segment.length === 4)\\n                continue;\\n            pos = encodeInteger(buf, pos, state, segment, 4); // namesIndex\\n        }\\n    }\\n    return out + td.decode(buf.subarray(0, pos));\\n}\\nfunction encodeInteger(buf, pos, state, segment, j) {\\n    const next = segment[j];\\n    let num = next - state[j];\\n    state[j] = next;\\n    num = num < 0 ? (-num << 1) | 1 : num << 1;\\n    do {\\n        let clamped = num & 0b011111;\\n        num >>>= 5;\\n        if (num > 0)\\n            clamped |= 0b100000;\\n        buf[pos++] = intToChar[clamped];\\n    } while (num > 0);\\n    return pos;\\n}\\n\\nexport { decode, encode };\\n//# sourceMappingURL=sourcemap-codec.mjs.map\\n\",\"import { encode } from '@jridgewell/sourcemap-codec';\\n\\nfunction getBtoa () {\\n\\tif (typeof window !== 'undefined' && typeof window.btoa === 'function') {\\n\\t\\treturn (str) => window.btoa(unescape(encodeURIComponent(str)));\\n\\t} else if (typeof Buffer === 'function') {\\n\\t\\treturn (str) => Buffer.from(str, 'utf-8').toString('base64');\\n\\t} else {\\n\\t\\treturn () => {\\n\\t\\t\\tthrow new Error('Unsupported environment: `window.btoa` or `Buffer` should be supported.');\\n\\t\\t};\\n\\t}\\n}\\n\\nconst btoa = /*#__PURE__*/ getBtoa();\\n\\nexport default class SourceMap {\\n\\tconstructor(properties) {\\n\\t\\tthis.version = 3;\\n\\t\\tthis.file = properties.file;\\n\\t\\tthis.sources = properties.sources;\\n\\t\\tthis.sourcesContent = properties.sourcesContent;\\n\\t\\tthis.names = properties.names;\\n\\t\\tthis.mappings = encode(properties.mappings);\\n\\t\\tif (typeof properties.x_google_ignoreList !== 'undefined') {\\n\\t\\t\\tthis.x_google_ignoreList = properties.x_google_ignoreList;\\n\\t\\t}\\n\\t}\\n\\n\\ttoString() {\\n\\t\\treturn JSON.stringify(this);\\n\\t}\\n\\n\\ttoUrl() {\\n\\t\\treturn 'data:application/json;charset=utf-8;base64,' + btoa(this.toString());\\n\\t}\\n}\\n\",\"export default function guessIndent(code) {\\n\\tconst lines = code.split('\\\\n');\\n\\n\\tconst tabbed = lines.filter((line) => /^\\\\t+/.test(line));\\n\\tconst spaced = lines.filter((line) => /^ {2,}/.test(line));\\n\\n\\tif (tabbed.length === 0 && spaced.length === 0) {\\n\\t\\treturn null;\\n\\t}\\n\\n\\t// More lines tabbed than spaced? Assume tabs, and\\n\\t// default to tabs in the case of a tie (or nothing\\n\\t// to go on)\\n\\tif (tabbed.length >= spaced.length) {\\n\\t\\treturn '\\\\t';\\n\\t}\\n\\n\\t// Otherwise, we need to guess the multiple\\n\\tconst min = spaced.reduce((previous, current) => {\\n\\t\\tconst numSpaces = /^ +/.exec(current)[0].length;\\n\\t\\treturn Math.min(numSpaces, previous);\\n\\t}, Infinity);\\n\\n\\treturn new Array(min + 1).join(' ');\\n}\\n\",\"export default function getRelativePath(from, to) {\\n\\tconst fromParts = from.split(/[/\\\\\\\\]/);\\n\\tconst toParts = to.split(/[/\\\\\\\\]/);\\n\\n\\tfromParts.pop(); // get dirname\\n\\n\\twhile (fromParts[0] === toParts[0]) {\\n\\t\\tfromParts.shift();\\n\\t\\ttoParts.shift();\\n\\t}\\n\\n\\tif (fromParts.length) {\\n\\t\\tlet i = fromParts.length;\\n\\t\\twhile (i--) fromParts[i] = '..';\\n\\t}\\n\\n\\treturn fromParts.concat(toParts).join('/');\\n}\\n\",\"const toString = Object.prototype.toString;\\n\\nexport default function isObject(thing) {\\n\\treturn toString.call(thing) === '[object Object]';\\n}\\n\",\"export default function getLocator(source) {\\n\\tconst originalLines = source.split('\\\\n');\\n\\tconst lineOffsets = [];\\n\\n\\tfor (let i = 0, pos = 0; i < originalLines.length; i++) {\\n\\t\\tlineOffsets.push(pos);\\n\\t\\tpos += originalLines[i].length + 1;\\n\\t}\\n\\n\\treturn function locate(index) {\\n\\t\\tlet i = 0;\\n\\t\\tlet j = lineOffsets.length;\\n\\t\\twhile (i < j) {\\n\\t\\t\\tconst m = (i + j) >> 1;\\n\\t\\t\\tif (index < lineOffsets[m]) {\\n\\t\\t\\t\\tj = m;\\n\\t\\t\\t} else {\\n\\t\\t\\t\\ti = m + 1;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tconst line = i - 1;\\n\\t\\tconst column = index - lineOffsets[line];\\n\\t\\treturn { line, column };\\n\\t};\\n}\\n\",\"export default class Mappings {\\n\\tconstructor(hires) {\\n\\t\\tthis.hires = hires;\\n\\t\\tthis.generatedCodeLine = 0;\\n\\t\\tthis.generatedCodeColumn = 0;\\n\\t\\tthis.raw = [];\\n\\t\\tthis.rawSegments = this.raw[this.generatedCodeLine] = [];\\n\\t\\tthis.pending = null;\\n\\t}\\n\\n\\taddEdit(sourceIndex, content, loc, nameIndex) {\\n\\t\\tif (content.length) {\\n\\t\\t\\tconst segment = [this.generatedCodeColumn, sourceIndex, loc.line, loc.column];\\n\\t\\t\\tif (nameIndex >= 0) {\\n\\t\\t\\t\\tsegment.push(nameIndex);\\n\\t\\t\\t}\\n\\t\\t\\tthis.rawSegments.push(segment);\\n\\t\\t} else if (this.pending) {\\n\\t\\t\\tthis.rawSegments.push(this.pending);\\n\\t\\t}\\n\\n\\t\\tthis.advance(content);\\n\\t\\tthis.pending = null;\\n\\t}\\n\\n\\taddUneditedChunk(sourceIndex, chunk, original, loc, sourcemapLocations) {\\n\\t\\tlet originalCharIndex = chunk.start;\\n\\t\\tlet first = true;\\n\\n\\t\\twhile (originalCharIndex < chunk.end) {\\n\\t\\t\\tif (this.hires || first || sourcemapLocations.has(originalCharIndex)) {\\n\\t\\t\\t\\tthis.rawSegments.push([this.generatedCodeColumn, sourceIndex, loc.line, loc.column]);\\n\\t\\t\\t}\\n\\n\\t\\t\\tif (original[originalCharIndex] === '\\\\n') {\\n\\t\\t\\t\\tloc.line += 1;\\n\\t\\t\\t\\tloc.column = 0;\\n\\t\\t\\t\\tthis.generatedCodeLine += 1;\\n\\t\\t\\t\\tthis.raw[this.generatedCodeLine] = this.rawSegments = [];\\n\\t\\t\\t\\tthis.generatedCodeColumn = 0;\\n\\t\\t\\t\\tfirst = true;\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tloc.column += 1;\\n\\t\\t\\t\\tthis.generatedCodeColumn += 1;\\n\\t\\t\\t\\tfirst = false;\\n\\t\\t\\t}\\n\\n\\t\\t\\toriginalCharIndex += 1;\\n\\t\\t}\\n\\n\\t\\tthis.pending = null;\\n\\t}\\n\\n\\tadvance(str) {\\n\\t\\tif (!str) return;\\n\\n\\t\\tconst lines = str.split('\\\\n');\\n\\n\\t\\tif (lines.length > 1) {\\n\\t\\t\\tfor (let i = 0; i < lines.length - 1; i++) {\\n\\t\\t\\t\\tthis.generatedCodeLine++;\\n\\t\\t\\t\\tthis.raw[this.generatedCodeLine] = this.rawSegments = [];\\n\\t\\t\\t}\\n\\t\\t\\tthis.generatedCodeColumn = 0;\\n\\t\\t}\\n\\n\\t\\tthis.generatedCodeColumn += lines[lines.length - 1].length;\\n\\t}\\n}\\n\",\"import BitSet from './BitSet.js';\\nimport Chunk from './Chunk.js';\\nimport SourceMap from './SourceMap.js';\\nimport guessIndent from './utils/guessIndent.js';\\nimport getRelativePath from './utils/getRelativePath.js';\\nimport isObject from './utils/isObject.js';\\nimport getLocator from './utils/getLocator.js';\\nimport Mappings from './utils/Mappings.js';\\nimport Stats from './utils/Stats.js';\\n\\nconst n = '\\\\n';\\n\\nconst warned = {\\n\\tinsertLeft: false,\\n\\tinsertRight: false,\\n\\tstoreName: false,\\n};\\n\\nexport default class MagicString {\\n\\tconstructor(string, options = {}) {\\n\\t\\tconst chunk = new Chunk(0, string.length, string);\\n\\n\\t\\tObject.defineProperties(this, {\\n\\t\\t\\toriginal: { writable: true, value: string },\\n\\t\\t\\toutro: { writable: true, value: '' },\\n\\t\\t\\tintro: { writable: true, value: '' },\\n\\t\\t\\tfirstChunk: { writable: true, value: chunk },\\n\\t\\t\\tlastChunk: { writable: true, value: chunk },\\n\\t\\t\\tlastSearchedChunk: { writable: true, value: chunk },\\n\\t\\t\\tbyStart: { writable: true, value: {} },\\n\\t\\t\\tbyEnd: { writable: true, value: {} },\\n\\t\\t\\tfilename: { writable: true, value: options.filename },\\n\\t\\t\\tindentExclusionRanges: { writable: true, value: options.indentExclusionRanges },\\n\\t\\t\\tsourcemapLocations: { writable: true, value: new BitSet() },\\n\\t\\t\\tstoredNames: { writable: true, value: {} },\\n\\t\\t\\tindentStr: { writable: true, value: undefined },\\n\\t\\t});\\n\\n\\t\\tif (DEBUG) {\\n\\t\\t\\tObject.defineProperty(this, 'stats', { value: new Stats() });\\n\\t\\t}\\n\\n\\t\\tthis.byStart[0] = chunk;\\n\\t\\tthis.byEnd[string.length] = chunk;\\n\\t}\\n\\n\\taddSourcemapLocation(char) {\\n\\t\\tthis.sourcemapLocations.add(char);\\n\\t}\\n\\n\\tappend(content) {\\n\\t\\tif (typeof content !== 'string') throw new TypeError('outro content must be a string');\\n\\n\\t\\tthis.outro += content;\\n\\t\\treturn this;\\n\\t}\\n\\n\\tappendLeft(index, content) {\\n\\t\\tif (typeof content !== 'string') throw new TypeError('inserted content must be a string');\\n\\n\\t\\tif (DEBUG) this.stats.time('appendLeft');\\n\\n\\t\\tthis._split(index);\\n\\n\\t\\tconst chunk = this.byEnd[index];\\n\\n\\t\\tif (chunk) {\\n\\t\\t\\tchunk.appendLeft(content);\\n\\t\\t} else {\\n\\t\\t\\tthis.intro += content;\\n\\t\\t}\\n\\n\\t\\tif (DEBUG) this.stats.timeEnd('appendLeft');\\n\\t\\treturn this;\\n\\t}\\n\\n\\tappendRight(index, content) {\\n\\t\\tif (typeof content !== 'string') throw new TypeError('inserted content must be a string');\\n\\n\\t\\tif (DEBUG) this.stats.time('appendRight');\\n\\n\\t\\tthis._split(index);\\n\\n\\t\\tconst chunk = this.byStart[index];\\n\\n\\t\\tif (chunk) {\\n\\t\\t\\tchunk.appendRight(content);\\n\\t\\t} else {\\n\\t\\t\\tthis.outro += content;\\n\\t\\t}\\n\\n\\t\\tif (DEBUG) this.stats.timeEnd('appendRight');\\n\\t\\treturn this;\\n\\t}\\n\\n\\tclone() {\\n\\t\\tconst cloned = new MagicString(this.original, { filename: this.filename });\\n\\n\\t\\tlet originalChunk = this.firstChunk;\\n\\t\\tlet clonedChunk = (cloned.firstChunk = cloned.lastSearchedChunk = originalChunk.clone());\\n\\n\\t\\twhile (originalChunk) {\\n\\t\\t\\tcloned.byStart[clonedChunk.start] = clonedChunk;\\n\\t\\t\\tcloned.byEnd[clonedChunk.end] = clonedChunk;\\n\\n\\t\\t\\tconst nextOriginalChunk = originalChunk.next;\\n\\t\\t\\tconst nextClonedChunk = nextOriginalChunk && nextOriginalChunk.clone();\\n\\n\\t\\t\\tif (nextClonedChunk) {\\n\\t\\t\\t\\tclonedChunk.next = nextClonedChunk;\\n\\t\\t\\t\\tnextClonedChunk.previous = clonedChunk;\\n\\n\\t\\t\\t\\tclonedChunk = nextClonedChunk;\\n\\t\\t\\t}\\n\\n\\t\\t\\toriginalChunk = nextOriginalChunk;\\n\\t\\t}\\n\\n\\t\\tcloned.lastChunk = clonedChunk;\\n\\n\\t\\tif (this.indentExclusionRanges) {\\n\\t\\t\\tcloned.indentExclusionRanges = this.indentExclusionRanges.slice();\\n\\t\\t}\\n\\n\\t\\tcloned.sourcemapLocations = new BitSet(this.sourcemapLocations);\\n\\n\\t\\tcloned.intro = this.intro;\\n\\t\\tcloned.outro = this.outro;\\n\\n\\t\\treturn cloned;\\n\\t}\\n\\n\\tgenerateDecodedMap(options) {\\n\\t\\toptions = options || {};\\n\\n\\t\\tconst sourceIndex = 0;\\n\\t\\tconst names = Object.keys(this.storedNames);\\n\\t\\tconst mappings = new Mappings(options.hires);\\n\\n\\t\\tconst locate = getLocator(this.original);\\n\\n\\t\\tif (this.intro) {\\n\\t\\t\\tmappings.advance(this.intro);\\n\\t\\t}\\n\\n\\t\\tthis.firstChunk.eachNext((chunk) => {\\n\\t\\t\\tconst loc = locate(chunk.start);\\n\\n\\t\\t\\tif (chunk.intro.length) mappings.advance(chunk.intro);\\n\\n\\t\\t\\tif (chunk.edited) {\\n\\t\\t\\t\\tmappings.addEdit(\\n\\t\\t\\t\\t\\tsourceIndex,\\n\\t\\t\\t\\t\\tchunk.content,\\n\\t\\t\\t\\t\\tloc,\\n\\t\\t\\t\\t\\tchunk.storeName ? names.indexOf(chunk.original) : -1\\n\\t\\t\\t\\t);\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tmappings.addUneditedChunk(sourceIndex, chunk, this.original, loc, this.sourcemapLocations);\\n\\t\\t\\t}\\n\\n\\t\\t\\tif (chunk.outro.length) mappings.advance(chunk.outro);\\n\\t\\t});\\n\\n\\t\\treturn {\\n\\t\\t\\tfile: options.file ? options.file.split(/[/\\\\\\\\]/).pop() : null,\\n\\t\\t\\tsources: [options.source ? getRelativePath(options.file || '', options.source) : null],\\n\\t\\t\\tsourcesContent: options.includeContent ? [this.original] : [null],\\n\\t\\t\\tnames,\\n\\t\\t\\tmappings: mappings.raw,\\n\\t\\t};\\n\\t}\\n\\n\\tgenerateMap(options) {\\n\\t\\treturn new SourceMap(this.generateDecodedMap(options));\\n\\t}\\n\\n\\t_ensureindentStr() {\\n\\t\\tif (this.indentStr === undefined) {\\n\\t\\t\\tthis.indentStr = guessIndent(this.original);\\n\\t\\t}\\n\\t}\\n\\n\\t_getRawIndentString() {\\n\\t\\tthis._ensureindentStr();\\n\\t\\treturn this.indentStr;\\n\\t}\\n\\n\\tgetIndentString() {\\n\\t\\tthis._ensureindentStr();\\n\\t\\treturn this.indentStr === null ? '\\\\t' : this.indentStr;\\n\\t}\\n\\n\\tindent(indentStr, options) {\\n\\t\\tconst pattern = /^[^\\\\r\\\\n]/gm;\\n\\n\\t\\tif (isObject(indentStr)) {\\n\\t\\t\\toptions = indentStr;\\n\\t\\t\\tindentStr = undefined;\\n\\t\\t}\\n\\n\\t\\tif (indentStr === undefined) {\\n\\t\\t\\tthis._ensureindentStr();\\n\\t\\t\\tindentStr = this.indentStr || '\\\\t';\\n\\t\\t}\\n\\n\\t\\tif (indentStr === '') return this; // noop\\n\\n\\t\\toptions = options || {};\\n\\n\\t\\t// Process exclusion ranges\\n\\t\\tconst isExcluded = {};\\n\\n\\t\\tif (options.exclude) {\\n\\t\\t\\tconst exclusions =\\n\\t\\t\\t\\ttypeof options.exclude[0] === 'number' ? [options.exclude] : options.exclude;\\n\\t\\t\\texclusions.forEach((exclusion) => {\\n\\t\\t\\t\\tfor (let i = exclusion[0]; i < exclusion[1]; i += 1) {\\n\\t\\t\\t\\t\\tisExcluded[i] = true;\\n\\t\\t\\t\\t}\\n\\t\\t\\t});\\n\\t\\t}\\n\\n\\t\\tlet shouldIndentNextCharacter = options.indentStart !== false;\\n\\t\\tconst replacer = (match) => {\\n\\t\\t\\tif (shouldIndentNextCharacter) return `${indentStr}${match}`;\\n\\t\\t\\tshouldIndentNextCharacter = true;\\n\\t\\t\\treturn match;\\n\\t\\t};\\n\\n\\t\\tthis.intro = this.intro.replace(pattern, replacer);\\n\\n\\t\\tlet charIndex = 0;\\n\\t\\tlet chunk = this.firstChunk;\\n\\n\\t\\twhile (chunk) {\\n\\t\\t\\tconst end = chunk.end;\\n\\n\\t\\t\\tif (chunk.edited) {\\n\\t\\t\\t\\tif (!isExcluded[charIndex]) {\\n\\t\\t\\t\\t\\tchunk.content = chunk.content.replace(pattern, replacer);\\n\\n\\t\\t\\t\\t\\tif (chunk.content.length) {\\n\\t\\t\\t\\t\\t\\tshouldIndentNextCharacter = chunk.content[chunk.content.length - 1] === '\\\\n';\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tcharIndex = chunk.start;\\n\\n\\t\\t\\t\\twhile (charIndex < end) {\\n\\t\\t\\t\\t\\tif (!isExcluded[charIndex]) {\\n\\t\\t\\t\\t\\t\\tconst char = this.original[charIndex];\\n\\n\\t\\t\\t\\t\\t\\tif (char === '\\\\n') {\\n\\t\\t\\t\\t\\t\\t\\tshouldIndentNextCharacter = true;\\n\\t\\t\\t\\t\\t\\t} else if (char !== '\\\\r' && shouldIndentNextCharacter) {\\n\\t\\t\\t\\t\\t\\t\\tshouldIndentNextCharacter = false;\\n\\n\\t\\t\\t\\t\\t\\t\\tif (charIndex === chunk.start) {\\n\\t\\t\\t\\t\\t\\t\\t\\tchunk.prependRight(indentStr);\\n\\t\\t\\t\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\t\\t\\tthis._splitChunk(chunk, charIndex);\\n\\t\\t\\t\\t\\t\\t\\t\\tchunk = chunk.next;\\n\\t\\t\\t\\t\\t\\t\\t\\tchunk.prependRight(indentStr);\\n\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t\\tcharIndex += 1;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\n\\t\\t\\tcharIndex = chunk.end;\\n\\t\\t\\tchunk = chunk.next;\\n\\t\\t}\\n\\n\\t\\tthis.outro = this.outro.replace(pattern, replacer);\\n\\n\\t\\treturn this;\\n\\t}\\n\\n\\tinsert() {\\n\\t\\tthrow new Error(\\n\\t\\t\\t'magicString.insert(...) is deprecated. Use prependRight(...) or appendLeft(...)'\\n\\t\\t);\\n\\t}\\n\\n\\tinsertLeft(index, content) {\\n\\t\\tif (!warned.insertLeft) {\\n\\t\\t\\tconsole.warn(\\n\\t\\t\\t\\t'magicString.insertLeft(...) is deprecated. Use magicString.appendLeft(...) instead'\\n\\t\\t\\t); // eslint-disable-line no-console\\n\\t\\t\\twarned.insertLeft = true;\\n\\t\\t}\\n\\n\\t\\treturn this.appendLeft(index, content);\\n\\t}\\n\\n\\tinsertRight(index, content) {\\n\\t\\tif (!warned.insertRight) {\\n\\t\\t\\tconsole.warn(\\n\\t\\t\\t\\t'magicString.insertRight(...) is deprecated. Use magicString.prependRight(...) instead'\\n\\t\\t\\t); // eslint-disable-line no-console\\n\\t\\t\\twarned.insertRight = true;\\n\\t\\t}\\n\\n\\t\\treturn this.prependRight(index, content);\\n\\t}\\n\\n\\tmove(start, end, index) {\\n\\t\\tif (index >= start && index <= end) throw new Error('Cannot move a selection inside itself');\\n\\n\\t\\tif (DEBUG) this.stats.time('move');\\n\\n\\t\\tthis._split(start);\\n\\t\\tthis._split(end);\\n\\t\\tthis._split(index);\\n\\n\\t\\tconst first = this.byStart[start];\\n\\t\\tconst last = this.byEnd[end];\\n\\n\\t\\tconst oldLeft = first.previous;\\n\\t\\tconst oldRight = last.next;\\n\\n\\t\\tconst newRight = this.byStart[index];\\n\\t\\tif (!newRight && last === this.lastChunk) return this;\\n\\t\\tconst newLeft = newRight ? newRight.previous : this.lastChunk;\\n\\n\\t\\tif (oldLeft) oldLeft.next = oldRight;\\n\\t\\tif (oldRight) oldRight.previous = oldLeft;\\n\\n\\t\\tif (newLeft) newLeft.next = first;\\n\\t\\tif (newRight) newRight.previous = last;\\n\\n\\t\\tif (!first.previous) this.firstChunk = last.next;\\n\\t\\tif (!last.next) {\\n\\t\\t\\tthis.lastChunk = first.previous;\\n\\t\\t\\tthis.lastChunk.next = null;\\n\\t\\t}\\n\\n\\t\\tfirst.previous = newLeft;\\n\\t\\tlast.next = newRight || null;\\n\\n\\t\\tif (!newLeft) this.firstChunk = first;\\n\\t\\tif (!newRight) this.lastChunk = last;\\n\\n\\t\\tif (DEBUG) this.stats.timeEnd('move');\\n\\t\\treturn this;\\n\\t}\\n\\n\\toverwrite(start, end, content, options) {\\n\\t\\toptions = options || {};\\n\\t\\treturn this.update(start, end, content, { ...options, overwrite: !options.contentOnly });\\n\\t}\\n\\n\\tupdate(start, end, content, options) {\\n\\t\\tif (typeof content !== 'string') throw new TypeError('replacement content must be a string');\\n\\n\\t\\twhile (start < 0) start += this.original.length;\\n\\t\\twhile (end < 0) end += this.original.length;\\n\\n\\t\\tif (end > this.original.length) throw new Error('end is out of bounds');\\n\\t\\tif (start === end)\\n\\t\\t\\tthrow new Error(\\n\\t\\t\\t\\t'Cannot overwrite a zero-length range – use appendLeft or prependRight instead'\\n\\t\\t\\t);\\n\\n\\t\\tif (DEBUG) this.stats.time('overwrite');\\n\\n\\t\\tthis._split(start);\\n\\t\\tthis._split(end);\\n\\n\\t\\tif (options === true) {\\n\\t\\t\\tif (!warned.storeName) {\\n\\t\\t\\t\\tconsole.warn(\\n\\t\\t\\t\\t\\t'The final argument to magicString.overwrite(...) should be an options object. See https://github.com/rich-harris/magic-string'\\n\\t\\t\\t\\t); // eslint-disable-line no-console\\n\\t\\t\\t\\twarned.storeName = true;\\n\\t\\t\\t}\\n\\n\\t\\t\\toptions = { storeName: true };\\n\\t\\t}\\n\\t\\tconst storeName = options !== undefined ? options.storeName : false;\\n\\t\\tconst overwrite = options !== undefined ? options.overwrite : false;\\n\\n\\t\\tif (storeName) {\\n\\t\\t\\tconst original = this.original.slice(start, end);\\n\\t\\t\\tObject.defineProperty(this.storedNames, original, {\\n\\t\\t\\t\\twritable: true,\\n\\t\\t\\t\\tvalue: true,\\n\\t\\t\\t\\tenumerable: true,\\n\\t\\t\\t});\\n\\t\\t}\\n\\n\\t\\tconst first = this.byStart[start];\\n\\t\\tconst last = this.byEnd[end];\\n\\n\\t\\tif (first) {\\n\\t\\t\\tlet chunk = first;\\n\\t\\t\\twhile (chunk !== last) {\\n\\t\\t\\t\\tif (chunk.next !== this.byStart[chunk.end]) {\\n\\t\\t\\t\\t\\tthrow new Error('Cannot overwrite across a split point');\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tchunk = chunk.next;\\n\\t\\t\\t\\tchunk.edit('', false);\\n\\t\\t\\t}\\n\\n\\t\\t\\tfirst.edit(content, storeName, !overwrite);\\n\\t\\t} else {\\n\\t\\t\\t// must be inserting at the end\\n\\t\\t\\tconst newChunk = new Chunk(start, end, '').edit(content, storeName);\\n\\n\\t\\t\\t// TODO last chunk in the array may not be the last chunk, if it's moved...\\n\\t\\t\\tlast.next = newChunk;\\n\\t\\t\\tnewChunk.previous = last;\\n\\t\\t}\\n\\n\\t\\tif (DEBUG) this.stats.timeEnd('overwrite');\\n\\t\\treturn this;\\n\\t}\\n\\n\\tprepend(content) {\\n\\t\\tif (typeof content !== 'string') throw new TypeError('outro content must be a string');\\n\\n\\t\\tthis.intro = content + this.intro;\\n\\t\\treturn this;\\n\\t}\\n\\n\\tprependLeft(index, content) {\\n\\t\\tif (typeof content !== 'string') throw new TypeError('inserted content must be a string');\\n\\n\\t\\tif (DEBUG) this.stats.time('insertRight');\\n\\n\\t\\tthis._split(index);\\n\\n\\t\\tconst chunk = this.byEnd[index];\\n\\n\\t\\tif (chunk) {\\n\\t\\t\\tchunk.prependLeft(content);\\n\\t\\t} else {\\n\\t\\t\\tthis.intro = content + this.intro;\\n\\t\\t}\\n\\n\\t\\tif (DEBUG) this.stats.timeEnd('insertRight');\\n\\t\\treturn this;\\n\\t}\\n\\n\\tprependRight(index, content) {\\n\\t\\tif (typeof content !== 'string') throw new TypeError('inserted content must be a string');\\n\\n\\t\\tif (DEBUG) this.stats.time('insertRight');\\n\\n\\t\\tthis._split(index);\\n\\n\\t\\tconst chunk = this.byStart[index];\\n\\n\\t\\tif (chunk) {\\n\\t\\t\\tchunk.prependRight(content);\\n\\t\\t} else {\\n\\t\\t\\tthis.outro = content + this.outro;\\n\\t\\t}\\n\\n\\t\\tif (DEBUG) this.stats.timeEnd('insertRight');\\n\\t\\treturn this;\\n\\t}\\n\\n\\tremove(start, end) {\\n\\t\\twhile (start < 0) start += this.original.length;\\n\\t\\twhile (end < 0) end += this.original.length;\\n\\n\\t\\tif (start === end) return this;\\n\\n\\t\\tif (start < 0 || end > this.original.length) throw new Error('Character is out of bounds');\\n\\t\\tif (start > end) throw new Error('end must be greater than start');\\n\\n\\t\\tif (DEBUG) this.stats.time('remove');\\n\\n\\t\\tthis._split(start);\\n\\t\\tthis._split(end);\\n\\n\\t\\tlet chunk = this.byStart[start];\\n\\n\\t\\twhile (chunk) {\\n\\t\\t\\tchunk.intro = '';\\n\\t\\t\\tchunk.outro = '';\\n\\t\\t\\tchunk.edit('');\\n\\n\\t\\t\\tchunk = end > chunk.end ? this.byStart[chunk.end] : null;\\n\\t\\t}\\n\\n\\t\\tif (DEBUG) this.stats.timeEnd('remove');\\n\\t\\treturn this;\\n\\t}\\n\\n\\tlastChar() {\\n\\t\\tif (this.outro.length) return this.outro[this.outro.length - 1];\\n\\t\\tlet chunk = this.lastChunk;\\n\\t\\tdo {\\n\\t\\t\\tif (chunk.outro.length) return chunk.outro[chunk.outro.length - 1];\\n\\t\\t\\tif (chunk.content.length) return chunk.content[chunk.content.length - 1];\\n\\t\\t\\tif (chunk.intro.length) return chunk.intro[chunk.intro.length - 1];\\n\\t\\t} while ((chunk = chunk.previous));\\n\\t\\tif (this.intro.length) return this.intro[this.intro.length - 1];\\n\\t\\treturn '';\\n\\t}\\n\\n\\tlastLine() {\\n\\t\\tlet lineIndex = this.outro.lastIndexOf(n);\\n\\t\\tif (lineIndex !== -1) return this.outro.substr(lineIndex + 1);\\n\\t\\tlet lineStr = this.outro;\\n\\t\\tlet chunk = this.lastChunk;\\n\\t\\tdo {\\n\\t\\t\\tif (chunk.outro.length > 0) {\\n\\t\\t\\t\\tlineIndex = chunk.outro.lastIndexOf(n);\\n\\t\\t\\t\\tif (lineIndex !== -1) return chunk.outro.substr(lineIndex + 1) + lineStr;\\n\\t\\t\\t\\tlineStr = chunk.outro + lineStr;\\n\\t\\t\\t}\\n\\n\\t\\t\\tif (chunk.content.length > 0) {\\n\\t\\t\\t\\tlineIndex = chunk.content.lastIndexOf(n);\\n\\t\\t\\t\\tif (lineIndex !== -1) return chunk.content.substr(lineIndex + 1) + lineStr;\\n\\t\\t\\t\\tlineStr = chunk.content + lineStr;\\n\\t\\t\\t}\\n\\n\\t\\t\\tif (chunk.intro.length > 0) {\\n\\t\\t\\t\\tlineIndex = chunk.intro.lastIndexOf(n);\\n\\t\\t\\t\\tif (lineIndex !== -1) return chunk.intro.substr(lineIndex + 1) + lineStr;\\n\\t\\t\\t\\tlineStr = chunk.intro + lineStr;\\n\\t\\t\\t}\\n\\t\\t} while ((chunk = chunk.previous));\\n\\t\\tlineIndex = this.intro.lastIndexOf(n);\\n\\t\\tif (lineIndex !== -1) return this.intro.substr(lineIndex + 1) + lineStr;\\n\\t\\treturn this.intro + lineStr;\\n\\t}\\n\\n\\tslice(start = 0, end = this.original.length) {\\n\\t\\twhile (start < 0) start += this.original.length;\\n\\t\\twhile (end < 0) end += this.original.length;\\n\\n\\t\\tlet result = '';\\n\\n\\t\\t// find start chunk\\n\\t\\tlet chunk = this.firstChunk;\\n\\t\\twhile (chunk && (chunk.start > start || chunk.end <= start)) {\\n\\t\\t\\t// found end chunk before start\\n\\t\\t\\tif (chunk.start < end && chunk.end >= end) {\\n\\t\\t\\t\\treturn result;\\n\\t\\t\\t}\\n\\n\\t\\t\\tchunk = chunk.next;\\n\\t\\t}\\n\\n\\t\\tif (chunk && chunk.edited && chunk.start !== start)\\n\\t\\t\\tthrow new Error(`Cannot use replaced character ${start} as slice start anchor.`);\\n\\n\\t\\tconst startChunk = chunk;\\n\\t\\twhile (chunk) {\\n\\t\\t\\tif (chunk.intro && (startChunk !== chunk || chunk.start === start)) {\\n\\t\\t\\t\\tresult += chunk.intro;\\n\\t\\t\\t}\\n\\n\\t\\t\\tconst containsEnd = chunk.start < end && chunk.end >= end;\\n\\t\\t\\tif (containsEnd && chunk.edited && chunk.end !== end)\\n\\t\\t\\t\\tthrow new Error(`Cannot use replaced character ${end} as slice end anchor.`);\\n\\n\\t\\t\\tconst sliceStart = startChunk === chunk ? start - chunk.start : 0;\\n\\t\\t\\tconst sliceEnd = containsEnd ? chunk.content.length + end - chunk.end : chunk.content.length;\\n\\n\\t\\t\\tresult += chunk.content.slice(sliceStart, sliceEnd);\\n\\n\\t\\t\\tif (chunk.outro && (!containsEnd || chunk.end === end)) {\\n\\t\\t\\t\\tresult += chunk.outro;\\n\\t\\t\\t}\\n\\n\\t\\t\\tif (containsEnd) {\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\t}\\n\\n\\t\\t\\tchunk = chunk.next;\\n\\t\\t}\\n\\n\\t\\treturn result;\\n\\t}\\n\\n\\t// TODO deprecate this? not really very useful\\n\\tsnip(start, end) {\\n\\t\\tconst clone = this.clone();\\n\\t\\tclone.remove(0, start);\\n\\t\\tclone.remove(end, clone.original.length);\\n\\n\\t\\treturn clone;\\n\\t}\\n\\n\\t_split(index) {\\n\\t\\tif (this.byStart[index] || this.byEnd[index]) return;\\n\\n\\t\\tif (DEBUG) this.stats.time('_split');\\n\\n\\t\\tlet chunk = this.lastSearchedChunk;\\n\\t\\tconst searchForward = index > chunk.end;\\n\\n\\t\\twhile (chunk) {\\n\\t\\t\\tif (chunk.contains(index)) return this._splitChunk(chunk, index);\\n\\n\\t\\t\\tchunk = searchForward ? this.byStart[chunk.end] : this.byEnd[chunk.start];\\n\\t\\t}\\n\\t}\\n\\n\\t_splitChunk(chunk, index) {\\n\\t\\tif (chunk.edited && chunk.content.length) {\\n\\t\\t\\t// zero-length edited chunks are a special case (overlapping replacements)\\n\\t\\t\\tconst loc = getLocator(this.original)(index);\\n\\t\\t\\tthrow new Error(\\n\\t\\t\\t\\t`Cannot split a chunk that has already been edited (${loc.line}:${loc.column} – \\\"${chunk.original}\\\")`\\n\\t\\t\\t);\\n\\t\\t}\\n\\n\\t\\tconst newChunk = chunk.split(index);\\n\\n\\t\\tthis.byEnd[index] = chunk;\\n\\t\\tthis.byStart[index] = newChunk;\\n\\t\\tthis.byEnd[newChunk.end] = newChunk;\\n\\n\\t\\tif (chunk === this.lastChunk) this.lastChunk = newChunk;\\n\\n\\t\\tthis.lastSearchedChunk = chunk;\\n\\t\\tif (DEBUG) this.stats.timeEnd('_split');\\n\\t\\treturn true;\\n\\t}\\n\\n\\ttoString() {\\n\\t\\tlet str = this.intro;\\n\\n\\t\\tlet chunk = this.firstChunk;\\n\\t\\twhile (chunk) {\\n\\t\\t\\tstr += chunk.toString();\\n\\t\\t\\tchunk = chunk.next;\\n\\t\\t}\\n\\n\\t\\treturn str + this.outro;\\n\\t}\\n\\n\\tisEmpty() {\\n\\t\\tlet chunk = this.firstChunk;\\n\\t\\tdo {\\n\\t\\t\\tif (\\n\\t\\t\\t\\t(chunk.intro.length && chunk.intro.trim()) ||\\n\\t\\t\\t\\t(chunk.content.length && chunk.content.trim()) ||\\n\\t\\t\\t\\t(chunk.outro.length && chunk.outro.trim())\\n\\t\\t\\t)\\n\\t\\t\\t\\treturn false;\\n\\t\\t} while ((chunk = chunk.next));\\n\\t\\treturn true;\\n\\t}\\n\\n\\tlength() {\\n\\t\\tlet chunk = this.firstChunk;\\n\\t\\tlet length = 0;\\n\\t\\tdo {\\n\\t\\t\\tlength += chunk.intro.length + chunk.content.length + chunk.outro.length;\\n\\t\\t} while ((chunk = chunk.next));\\n\\t\\treturn length;\\n\\t}\\n\\n\\ttrimLines() {\\n\\t\\treturn this.trim('[\\\\\\\\r\\\\\\\\n]');\\n\\t}\\n\\n\\ttrim(charType) {\\n\\t\\treturn this.trimStart(charType).trimEnd(charType);\\n\\t}\\n\\n\\ttrimEndAborted(charType) {\\n\\t\\tconst rx = new RegExp((charType || '\\\\\\\\s') + '+$');\\n\\n\\t\\tthis.outro = this.outro.replace(rx, '');\\n\\t\\tif (this.outro.length) return true;\\n\\n\\t\\tlet chunk = this.lastChunk;\\n\\n\\t\\tdo {\\n\\t\\t\\tconst end = chunk.end;\\n\\t\\t\\tconst aborted = chunk.trimEnd(rx);\\n\\n\\t\\t\\t// if chunk was trimmed, we have a new lastChunk\\n\\t\\t\\tif (chunk.end !== end) {\\n\\t\\t\\t\\tif (this.lastChunk === chunk) {\\n\\t\\t\\t\\t\\tthis.lastChunk = chunk.next;\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\tthis.byEnd[chunk.end] = chunk;\\n\\t\\t\\t\\tthis.byStart[chunk.next.start] = chunk.next;\\n\\t\\t\\t\\tthis.byEnd[chunk.next.end] = chunk.next;\\n\\t\\t\\t}\\n\\n\\t\\t\\tif (aborted) return true;\\n\\t\\t\\tchunk = chunk.previous;\\n\\t\\t} while (chunk);\\n\\n\\t\\treturn false;\\n\\t}\\n\\n\\ttrimEnd(charType) {\\n\\t\\tthis.trimEndAborted(charType);\\n\\t\\treturn this;\\n\\t}\\n\\ttrimStartAborted(charType) {\\n\\t\\tconst rx = new RegExp('^' + (charType || '\\\\\\\\s') + '+');\\n\\n\\t\\tthis.intro = this.intro.replace(rx, '');\\n\\t\\tif (this.intro.length) return true;\\n\\n\\t\\tlet chunk = this.firstChunk;\\n\\n\\t\\tdo {\\n\\t\\t\\tconst end = chunk.end;\\n\\t\\t\\tconst aborted = chunk.trimStart(rx);\\n\\n\\t\\t\\tif (chunk.end !== end) {\\n\\t\\t\\t\\t// special case...\\n\\t\\t\\t\\tif (chunk === this.lastChunk) this.lastChunk = chunk.next;\\n\\n\\t\\t\\t\\tthis.byEnd[chunk.end] = chunk;\\n\\t\\t\\t\\tthis.byStart[chunk.next.start] = chunk.next;\\n\\t\\t\\t\\tthis.byEnd[chunk.next.end] = chunk.next;\\n\\t\\t\\t}\\n\\n\\t\\t\\tif (aborted) return true;\\n\\t\\t\\tchunk = chunk.next;\\n\\t\\t} while (chunk);\\n\\n\\t\\treturn false;\\n\\t}\\n\\n\\ttrimStart(charType) {\\n\\t\\tthis.trimStartAborted(charType);\\n\\t\\treturn this;\\n\\t}\\n\\n\\thasChanged() {\\n\\t\\treturn this.original !== this.toString();\\n\\t}\\n\\n\\t_replaceRegexp(searchValue, replacement) {\\n\\t\\tfunction getReplacement(match, str) {\\n\\t\\t\\tif (typeof replacement === 'string') {\\n\\t\\t\\t\\treturn replacement.replace(/\\\\$(\\\\$|&|\\\\d+)/g, (_, i) => {\\n\\t\\t\\t\\t\\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace#specifying_a_string_as_a_parameter\\n\\t\\t\\t\\t\\tif (i === '$') return '$';\\n\\t\\t\\t\\t\\tif (i === '&') return match[0];\\n\\t\\t\\t\\t\\tconst num = +i;\\n\\t\\t\\t\\t\\tif (num < match.length) return match[+i];\\n\\t\\t\\t\\t\\treturn `$${i}`;\\n\\t\\t\\t\\t});\\n\\t\\t\\t} else {\\n\\t\\t\\t\\treturn replacement(...match, match.index, str, match.groups);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tfunction matchAll(re, str) {\\n\\t\\t\\tlet match;\\n\\t\\t\\tconst matches = [];\\n\\t\\t\\twhile ((match = re.exec(str))) {\\n\\t\\t\\t\\tmatches.push(match);\\n\\t\\t\\t}\\n\\t\\t\\treturn matches;\\n\\t\\t}\\n\\t\\tif (searchValue.global) {\\n\\t\\t\\tconst matches = matchAll(searchValue, this.original);\\n\\t\\t\\tmatches.forEach((match) => {\\n\\t\\t\\t\\tif (match.index != null)\\n\\t\\t\\t\\t\\tthis.overwrite(\\n\\t\\t\\t\\t\\t\\tmatch.index,\\n\\t\\t\\t\\t\\t\\tmatch.index + match[0].length,\\n\\t\\t\\t\\t\\t\\tgetReplacement(match, this.original)\\n\\t\\t\\t\\t\\t);\\n\\t\\t\\t});\\n\\t\\t} else {\\n\\t\\t\\tconst match = this.original.match(searchValue);\\n\\t\\t\\tif (match && match.index != null)\\n\\t\\t\\t\\tthis.overwrite(\\n\\t\\t\\t\\t\\tmatch.index,\\n\\t\\t\\t\\t\\tmatch.index + match[0].length,\\n\\t\\t\\t\\t\\tgetReplacement(match, this.original)\\n\\t\\t\\t\\t);\\n\\t\\t}\\n\\t\\treturn this;\\n\\t}\\n\\n\\t_replaceString(string, replacement) {\\n\\t\\tconst { original } = this;\\n\\t\\tconst index = original.indexOf(string);\\n\\n\\t\\tif (index !== -1) {\\n\\t\\t\\tthis.overwrite(index, index + string.length, replacement);\\n\\t\\t}\\n\\n\\t\\treturn this;\\n\\t}\\n\\n\\treplace(searchValue, replacement) {\\n\\t\\tif (typeof searchValue === 'string') {\\n\\t\\t\\treturn this._replaceString(searchValue, replacement);\\n\\t\\t}\\n\\n\\t\\treturn this._replaceRegexp(searchValue, replacement);\\n\\t}\\n\\n\\t_replaceAllString(string, replacement) {\\n\\t\\tconst { original } = this;\\n\\t\\tconst stringLength = string.length;\\n\\t\\tfor (\\n\\t\\t\\tlet index = original.indexOf(string);\\n\\t\\t\\tindex !== -1;\\n\\t\\t\\tindex = original.indexOf(string, index + stringLength)\\n\\t\\t) {\\n\\t\\t\\tthis.overwrite(index, index + stringLength, replacement);\\n\\t\\t}\\n\\n\\t\\treturn this;\\n\\t}\\n\\n\\treplaceAll(searchValue, replacement) {\\n\\t\\tif (typeof searchValue === 'string') {\\n\\t\\t\\treturn this._replaceAllString(searchValue, replacement);\\n\\t\\t}\\n\\n\\t\\tif (!searchValue.global) {\\n\\t\\t\\tthrow new TypeError(\\n\\t\\t\\t\\t'MagicString.prototype.replaceAll called with a non-global RegExp argument'\\n\\t\\t\\t);\\n\\t\\t}\\n\\n\\t\\treturn this._replaceRegexp(searchValue, replacement);\\n\\t}\\n}\\n\",\"import MagicString from './MagicString.js';\\nimport SourceMap from './SourceMap.js';\\nimport getRelativePath from './utils/getRelativePath.js';\\nimport isObject from './utils/isObject.js';\\nimport getLocator from './utils/getLocator.js';\\nimport Mappings from './utils/Mappings.js';\\n\\nconst hasOwnProp = Object.prototype.hasOwnProperty;\\n\\nexport default class Bundle {\\n\\tconstructor(options = {}) {\\n\\t\\tthis.intro = options.intro || '';\\n\\t\\tthis.separator = options.separator !== undefined ? options.separator : '\\\\n';\\n\\t\\tthis.sources = [];\\n\\t\\tthis.uniqueSources = [];\\n\\t\\tthis.uniqueSourceIndexByFilename = {};\\n\\t}\\n\\n\\taddSource(source) {\\n\\t\\tif (source instanceof MagicString) {\\n\\t\\t\\treturn this.addSource({\\n\\t\\t\\t\\tcontent: source,\\n\\t\\t\\t\\tfilename: source.filename,\\n\\t\\t\\t\\tseparator: this.separator,\\n\\t\\t\\t});\\n\\t\\t}\\n\\n\\t\\tif (!isObject(source) || !source.content) {\\n\\t\\t\\tthrow new Error(\\n\\t\\t\\t\\t'bundle.addSource() takes an object with a `content` property, which should be an instance of MagicString, and an optional `filename`'\\n\\t\\t\\t);\\n\\t\\t}\\n\\n\\t\\t['filename', 'indentExclusionRanges', 'separator'].forEach((option) => {\\n\\t\\t\\tif (!hasOwnProp.call(source, option)) source[option] = source.content[option];\\n\\t\\t});\\n\\n\\t\\tif (source.separator === undefined) {\\n\\t\\t\\t// TODO there's a bunch of this sort of thing, needs cleaning up\\n\\t\\t\\tsource.separator = this.separator;\\n\\t\\t}\\n\\n\\t\\tif (source.filename) {\\n\\t\\t\\tif (!hasOwnProp.call(this.uniqueSourceIndexByFilename, source.filename)) {\\n\\t\\t\\t\\tthis.uniqueSourceIndexByFilename[source.filename] = this.uniqueSources.length;\\n\\t\\t\\t\\tthis.uniqueSources.push({ filename: source.filename, content: source.content.original });\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tconst uniqueSource = this.uniqueSources[this.uniqueSourceIndexByFilename[source.filename]];\\n\\t\\t\\t\\tif (source.content.original !== uniqueSource.content) {\\n\\t\\t\\t\\t\\tthrow new Error(`Illegal source: same filename (${source.filename}), different contents`);\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\tthis.sources.push(source);\\n\\t\\treturn this;\\n\\t}\\n\\n\\tappend(str, options) {\\n\\t\\tthis.addSource({\\n\\t\\t\\tcontent: new MagicString(str),\\n\\t\\t\\tseparator: (options && options.separator) || '',\\n\\t\\t});\\n\\n\\t\\treturn this;\\n\\t}\\n\\n\\tclone() {\\n\\t\\tconst bundle = new Bundle({\\n\\t\\t\\tintro: this.intro,\\n\\t\\t\\tseparator: this.separator,\\n\\t\\t});\\n\\n\\t\\tthis.sources.forEach((source) => {\\n\\t\\t\\tbundle.addSource({\\n\\t\\t\\t\\tfilename: source.filename,\\n\\t\\t\\t\\tcontent: source.content.clone(),\\n\\t\\t\\t\\tseparator: source.separator,\\n\\t\\t\\t});\\n\\t\\t});\\n\\n\\t\\treturn bundle;\\n\\t}\\n\\n\\tgenerateDecodedMap(options = {}) {\\n\\t\\tconst names = [];\\n\\t\\tthis.sources.forEach((source) => {\\n\\t\\t\\tObject.keys(source.content.storedNames).forEach((name) => {\\n\\t\\t\\t\\tif (!~names.indexOf(name)) names.push(name);\\n\\t\\t\\t});\\n\\t\\t});\\n\\n\\t\\tconst mappings = new Mappings(options.hires);\\n\\n\\t\\tif (this.intro) {\\n\\t\\t\\tmappings.advance(this.intro);\\n\\t\\t}\\n\\n\\t\\tthis.sources.forEach((source, i) => {\\n\\t\\t\\tif (i > 0) {\\n\\t\\t\\t\\tmappings.advance(this.separator);\\n\\t\\t\\t}\\n\\n\\t\\t\\tconst sourceIndex = source.filename ? this.uniqueSourceIndexByFilename[source.filename] : -1;\\n\\t\\t\\tconst magicString = source.content;\\n\\t\\t\\tconst locate = getLocator(magicString.original);\\n\\n\\t\\t\\tif (magicString.intro) {\\n\\t\\t\\t\\tmappings.advance(magicString.intro);\\n\\t\\t\\t}\\n\\n\\t\\t\\tmagicString.firstChunk.eachNext((chunk) => {\\n\\t\\t\\t\\tconst loc = locate(chunk.start);\\n\\n\\t\\t\\t\\tif (chunk.intro.length) mappings.advance(chunk.intro);\\n\\n\\t\\t\\t\\tif (source.filename) {\\n\\t\\t\\t\\t\\tif (chunk.edited) {\\n\\t\\t\\t\\t\\t\\tmappings.addEdit(\\n\\t\\t\\t\\t\\t\\t\\tsourceIndex,\\n\\t\\t\\t\\t\\t\\t\\tchunk.content,\\n\\t\\t\\t\\t\\t\\t\\tloc,\\n\\t\\t\\t\\t\\t\\t\\tchunk.storeName ? names.indexOf(chunk.original) : -1\\n\\t\\t\\t\\t\\t\\t);\\n\\t\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\tmappings.addUneditedChunk(\\n\\t\\t\\t\\t\\t\\t\\tsourceIndex,\\n\\t\\t\\t\\t\\t\\t\\tchunk,\\n\\t\\t\\t\\t\\t\\t\\tmagicString.original,\\n\\t\\t\\t\\t\\t\\t\\tloc,\\n\\t\\t\\t\\t\\t\\t\\tmagicString.sourcemapLocations\\n\\t\\t\\t\\t\\t\\t);\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\tmappings.advance(chunk.content);\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\tif (chunk.outro.length) mappings.advance(chunk.outro);\\n\\t\\t\\t});\\n\\n\\t\\t\\tif (magicString.outro) {\\n\\t\\t\\t\\tmappings.advance(magicString.outro);\\n\\t\\t\\t}\\n\\t\\t});\\n\\n\\t\\treturn {\\n\\t\\t\\tfile: options.file ? options.file.split(/[/\\\\\\\\]/).pop() : null,\\n\\t\\t\\tsources: this.uniqueSources.map((source) => {\\n\\t\\t\\t\\treturn options.file ? getRelativePath(options.file, source.filename) : source.filename;\\n\\t\\t\\t}),\\n\\t\\t\\tsourcesContent: this.uniqueSources.map((source) => {\\n\\t\\t\\t\\treturn options.includeContent ? source.content : null;\\n\\t\\t\\t}),\\n\\t\\t\\tnames,\\n\\t\\t\\tmappings: mappings.raw,\\n\\t\\t};\\n\\t}\\n\\n\\tgenerateMap(options) {\\n\\t\\treturn new SourceMap(this.generateDecodedMap(options));\\n\\t}\\n\\n\\tgetIndentString() {\\n\\t\\tconst indentStringCounts = {};\\n\\n\\t\\tthis.sources.forEach((source) => {\\n\\t\\t\\tconst indentStr = source.content._getRawIndentString();\\n\\n\\t\\t\\tif (indentStr === null) return;\\n\\n\\t\\t\\tif (!indentStringCounts[indentStr]) indentStringCounts[indentStr] = 0;\\n\\t\\t\\tindentStringCounts[indentStr] += 1;\\n\\t\\t});\\n\\n\\t\\treturn (\\n\\t\\t\\tObject.keys(indentStringCounts).sort((a, b) => {\\n\\t\\t\\t\\treturn indentStringCounts[a] - indentStringCounts[b];\\n\\t\\t\\t})[0] || '\\\\t'\\n\\t\\t);\\n\\t}\\n\\n\\tindent(indentStr) {\\n\\t\\tif (!arguments.length) {\\n\\t\\t\\tindentStr = this.getIndentString();\\n\\t\\t}\\n\\n\\t\\tif (indentStr === '') return this; // noop\\n\\n\\t\\tlet trailingNewline = !this.intro || this.intro.slice(-1) === '\\\\n';\\n\\n\\t\\tthis.sources.forEach((source, i) => {\\n\\t\\t\\tconst separator = source.separator !== undefined ? source.separator : this.separator;\\n\\t\\t\\tconst indentStart = trailingNewline || (i > 0 && /\\\\r?\\\\n$/.test(separator));\\n\\n\\t\\t\\tsource.content.indent(indentStr, {\\n\\t\\t\\t\\texclude: source.indentExclusionRanges,\\n\\t\\t\\t\\tindentStart, //: trailingNewline || /\\\\r?\\\\n$/.test( separator )  //true///\\\\r?\\\\n/.test( separator )\\n\\t\\t\\t});\\n\\n\\t\\t\\ttrailingNewline = source.content.lastChar() === '\\\\n';\\n\\t\\t});\\n\\n\\t\\tif (this.intro) {\\n\\t\\t\\tthis.intro =\\n\\t\\t\\t\\tindentStr +\\n\\t\\t\\t\\tthis.intro.replace(/^[^\\\\n]/gm, (match, index) => {\\n\\t\\t\\t\\t\\treturn index > 0 ? indentStr + match : match;\\n\\t\\t\\t\\t});\\n\\t\\t}\\n\\n\\t\\treturn this;\\n\\t}\\n\\n\\tprepend(str) {\\n\\t\\tthis.intro = str + this.intro;\\n\\t\\treturn this;\\n\\t}\\n\\n\\ttoString() {\\n\\t\\tconst body = this.sources\\n\\t\\t\\t.map((source, i) => {\\n\\t\\t\\t\\tconst separator = source.separator !== undefined ? source.separator : this.separator;\\n\\t\\t\\t\\tconst str = (i > 0 ? separator : '') + source.content.toString();\\n\\n\\t\\t\\t\\treturn str;\\n\\t\\t\\t})\\n\\t\\t\\t.join('');\\n\\n\\t\\treturn this.intro + body;\\n\\t}\\n\\n\\tisEmpty() {\\n\\t\\tif (this.intro.length && this.intro.trim()) return false;\\n\\t\\tif (this.sources.some((source) => !source.content.isEmpty())) return false;\\n\\t\\treturn true;\\n\\t}\\n\\n\\tlength() {\\n\\t\\treturn this.sources.reduce(\\n\\t\\t\\t(length, source) => length + source.content.length(),\\n\\t\\t\\tthis.intro.length\\n\\t\\t);\\n\\t}\\n\\n\\ttrimLines() {\\n\\t\\treturn this.trim('[\\\\\\\\r\\\\\\\\n]');\\n\\t}\\n\\n\\ttrim(charType) {\\n\\t\\treturn this.trimStart(charType).trimEnd(charType);\\n\\t}\\n\\n\\ttrimStart(charType) {\\n\\t\\tconst rx = new RegExp('^' + (charType || '\\\\\\\\s') + '+');\\n\\t\\tthis.intro = this.intro.replace(rx, '');\\n\\n\\t\\tif (!this.intro) {\\n\\t\\t\\tlet source;\\n\\t\\t\\tlet i = 0;\\n\\n\\t\\t\\tdo {\\n\\t\\t\\t\\tsource = this.sources[i++];\\n\\t\\t\\t\\tif (!source) {\\n\\t\\t\\t\\t\\tbreak;\\n\\t\\t\\t\\t}\\n\\t\\t\\t} while (!source.content.trimStartAborted(charType));\\n\\t\\t}\\n\\n\\t\\treturn this;\\n\\t}\\n\\n\\ttrimEnd(charType) {\\n\\t\\tconst rx = new RegExp((charType || '\\\\\\\\s') + '+$');\\n\\n\\t\\tlet source;\\n\\t\\tlet i = this.sources.length - 1;\\n\\n\\t\\tdo {\\n\\t\\t\\tsource = this.sources[i--];\\n\\t\\t\\tif (!source) {\\n\\t\\t\\t\\tthis.intro = this.intro.replace(rx, '');\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\t}\\n\\t\\t} while (!source.content.trimEndAborted(charType));\\n\\n\\t\\treturn this;\\n\\t}\\n}\\n\",\"import MagicString from './MagicString.js';\\nimport Bundle from './Bundle.js';\\nimport SourceMap from './SourceMap.js';\\n\\nMagicString.Bundle = Bundle;\\nMagicString.SourceMap = SourceMap;\\nMagicString.default = MagicString; // work around TypeScript bug https://github.com/Rich-Harris/magic-string/pull/121\\n\\nexport default MagicString;\\n\"],\"names\":[],\"mappings\":\"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\"}/README.md,\u000f# magic-string\n\n<a href=\"https://travis-ci.org/Rich-Harris/magic-string\">\n  <img src=\"http://img.shields.io/travis/Rich-Harris/magic-string.svg\"\n       alt=\"build status\">\n</a>\n<a href=\"https://npmjs.org/package/magic-string\">\n  <img src=\"https://img.shields.io/npm/v/magic-string.svg\"\n       alt=\"npm version\">\n</a>\n<a href=\"https://github.com/Rich-Harris/magic-string/blob/master/LICENSE.md\">\n  <img src=\"https://img.shields.io/npm/l/magic-string.svg\"\n       alt=\"license\">\n</a>\n\nSuppose you have some source code. You want to make some light modifications to it - replacing a few characters here and there, wrapping it with a header and footer, etc - and ideally you'd like to generate a [source map](https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/) at the end of it. You've thought about using something like [recast](https://github.com/benjamn/recast) (which allows you to generate an AST from some JavaScript, manipulate it, and reprint it with a sourcemap without losing your comments and formatting), but it seems like overkill for your needs (or maybe the source code isn't JavaScript).\n\nYour requirements are, frankly, rather niche. But they're requirements that I also have, and for which I made magic-string. It's a small, fast utility for manipulating strings and generating sourcemaps.\n\n## Installation\n\nmagic-string works in both node.js and browser environments. For node, install with npm:\n\n```bash\nnpm i magic-string\n```\n\nTo use in browser, grab the [magic-string.umd.js](https://unpkg.com/magic-string/dist/magic-string.umd.js) file and add it to your page:\n\n```html\n<script src='magic-string.umd.js'></script>\n```\n\n(It also works with various module systems, if you prefer that sort of thing - it has a dependency on [vlq](https://github.com/Rich-Harris/vlq).)\n\n## Usage\n\nThese examples assume you're in node.js, or something similar:\n\n```js\nimport MagicString from 'magic-string';\nimport fs from 'fs'\n\nconst s = new MagicString('problems = 99');\n\ns.update(0, 8, 'answer');\ns.toString(); // 'answer = 99'\n\ns.update(11, 13, '42'); // character indices always refer to the original string\ns.toString(); // 'answer = 42'\n\ns.prepend('var ').append(';'); // most methods are chainable\ns.toString(); // 'var answer = 42;'\n\nconst map = s.generateMap({\n  source: 'source.js',\n  file: 'converted.js.map',\n  includeContent: true\n}); // generates a v3 sourcemap\n\nfs.writeFileSync('converted.js', s.toString());\nfs.writeFileSync('converted.js.map', map.toString());\n```\n\nYou can pass an options argument:\n\n```js\nconst s = new MagicString(someCode, {\n  // both these options will be used if you later\n  // call `bundle.addSource( s )` - see below\n  filename: 'foo.js',\n  indentExclusionRanges: [/*...*/]\n});\n```\n\n## Methods\n\n### s.addSourcemapLocation( index )\n\nAdds the specified character index (with respect to the original string) to sourcemap mappings, if `hires` is `false` (see below).\n\n### s.append( content )\n\nAppends the specified content to the end of the string. Returns `this`.\n\n### s.appendLeft( index, content )\n\nAppends the specified `content` at the `index` in the original string. If a range *ending* with `index` is subsequently moved, the insert will be moved with it. Returns `this`. See also `s.prependLeft(...)`.\n\n### s.appendRight( index, content )\n\nAppends the specified `content` at the `index` in the original string. If a range *starting* with `index` is subsequently moved, the insert will be moved with it. Returns `this`. See also `s.prependRight(...)`.\n\n### s.clone()\n\nDoes what you'd expect.\n\n### s.generateDecodedMap( options )\n\nGenerates a sourcemap object with raw mappings in array form, rather than encoded as a string. See `generateMap` documentation below for options details. Useful if you need to manipulate the sourcemap further, but most of the time you will use `generateMap` instead.\n\n### s.generateMap( options )\n\nGenerates a [version 3 sourcemap](https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit). All options are, well, optional:\n\n* `file` - the filename where you plan to write the sourcemap\n* `source` - the filename of the file containing the original source\n* `includeContent` - whether to include the original content in the map's `sourcesContent` array\n* `hires` - whether the mapping should be high-resolution. Hi-res mappings map every single character, meaning (for example) your devtools will always be able to pinpoint the exact location of function calls and so on. With lo-res mappings, devtools may only be able to identify the correct line - but they're quicker to generate and less bulky. If sourcemap locations have been specified with `s.addSourceMapLocation()`, they will be used here.\n\nThe returned sourcemap has two (non-enumerable) methods attached for convenience:\n\n* `toString` - returns the equivalent of `JSON.stringify(map)`\n* `toUrl` - returns a DataURI containing the sourcemap. Useful for doing this sort of thing:\n\n```js\ncode += '\\n//# sourceMappingURL=' + map.toUrl();\n```\n\n### s.hasChanged()\n\nIndicates if the string has been changed.\n\n### s.indent( prefix[, options] )\n\nPrefixes each line of the string with `prefix`. If `prefix` is not supplied, the indentation will be guessed from the original content, falling back to a single tab character. Returns `this`.\n\nThe `options` argument can have an `exclude` property, which is an array of `[start, end]` character ranges. These ranges will be excluded from the indentation - useful for (e.g.) multiline strings.\n\n### s.insertLeft( index, content )\n\n**DEPRECATED** since 0.17 – use `s.appendLeft(...)` instead\n\n### s.insertRight( index, content )\n\n**DEPRECATED** since 0.17 – use `s.prependRight(...)` instead\n\n### s.isEmpty()\n\nReturns true if the resulting source is empty (disregarding white space).\n\n### s.locate( index )\n\n**DEPRECATED** since 0.10 – see [#30](https://github.com/Rich-Harris/magic-string/pull/30)\n\n### s.locateOrigin( index )\n\n**DEPRECATED** since 0.10 – see [#30](https://github.com/Rich-Harris/magic-string/pull/30)\n\n### s.move( start, end, index )\n\nMoves the characters from `start` and `end` to `index`. Returns `this`.\n\n### s.overwrite( start, end, content[, options] )\n\nReplaces the characters from `start` to `end` with `content`, along with the appended/prepended content in that range. The same restrictions as `s.remove()` apply. Returns `this`.\n\nThe fourth argument is optional. It can have a `storeName` property — if `true`, the original name will be stored for later inclusion in a sourcemap's `names` array — and a `contentOnly` property which determines whether only the content is overwritten, or anything that was appended/prepended to the range as well.\n\nIt may be preferred to use `s.update(...)` instead if you wish to avoid overwriting the appended/prepended content.\n\n### s.prepend( content )\n\nPrepends the string with the specified content. Returns `this`.\n\n### s.prependLeft ( index, content )\n\nSame as `s.appendLeft(...)`, except that the inserted content will go *before* any previous appends or prepends at `index`\n\n### s.prependRight ( index, content )\n\nSame as `s.appendRight(...)`, except that the inserted content will go *before* any previous appends or prepends at `index`\n\n### s.replace( regexpOrString, substitution )\n\nString replacement with RegExp or string. When using a RegExp, replacer function is also supported. Returns `this`.\n\n```ts\nimport MagicString from 'magic-string'\n\nconst s = new MagicString(source)\n\ns.replace('foo', 'bar')\ns.replace(/foo/g, 'bar')\ns.replace(/(\\w)(\\d+)/g, (_, $1, $2) => $1.toUpperCase() + $2)\n```\n\nThe differences from [`String.replace`]((https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace)):\n- It will always match against the **original string**\n- It mutates the magic string state (use `.clone()` to be immutable)\n\n### s.replaceAll( regexpOrString, substitution )\n\nSame as `s.replace`, but replace all matched strings instead of just one.\nIf `substitution` is a regex, then it must have the global (`g`) flag set, or a `TypeError` is thrown. Matches the behavior of the bultin [`String.property.replaceAll`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replaceAll).\n\n### s.remove( start, end )\n\nRemoves the characters from `start` to `end` (of the original string, **not** the generated string). Removing the same content twice, or making removals that partially overlap, will cause an error. Returns `this`.\n\n### s.slice( start, end )\n\nReturns the content of the generated string that corresponds to the slice between `start` and `end` of the original string. Throws error if the indices are for characters that were already removed.\n\n### s.snip( start, end )\n\nReturns a clone of `s`, with all content before the `start` and `end` characters of the original string removed.\n\n### s.toString()\n\nReturns the generated string.\n\n### s.trim([ charType ])\n\nTrims content matching `charType` (defaults to `\\s`, i.e. whitespace) from the start and end. Returns `this`.\n\n### s.trimStart([ charType ])\n\nTrims content matching `charType` (defaults to `\\s`, i.e. whitespace) from the start. Returns `this`.\n\n### s.trimEnd([ charType ])\n\nTrims content matching `charType` (defaults to `\\s`, i.e. whitespace) from the end. Returns `this`.\n\n### s.trimLines()\n\nRemoves empty lines from the start and end. Returns `this`.\n\n### s.update( start, end, content[, options] )\n\nReplaces the characters from `start` to `end` with `content`. The same restrictions as `s.remove()` apply. Returns `this`.\n\nThe fourth argument is optional. It can have a `storeName` property — if `true`, the original name will be stored for later inclusion in a sourcemap's `names` array — and an `overwrite` property which defaults to `false` and determines whether anything that was appended/prepended to the range will be overwritten along with the original content.\n\n`s.update(start, end, content)` is equivalent to `s.overwrite(start, end, content, { contentOnly: true })`.\n\n## Bundling\n\nTo concatenate several sources, use `MagicString.Bundle`:\n\n```js\nconst bundle = new MagicString.Bundle();\n\nbundle.addSource({\n  filename: 'foo.js',\n  content: new MagicString('var answer = 42;')\n});\n\nbundle.addSource({\n  filename: 'bar.js',\n  content: new MagicString('console.log( answer )')\n});\n\n// Advanced: a source can include an `indentExclusionRanges` property\n// alongside `filename` and `content`. This will be passed to `s.indent()`\n// - see documentation above\n\nbundle.indent() // optionally, pass an indent string, otherwise it will be guessed\n  .prepend('(function () {\\n')\n  .append('}());');\n\nbundle.toString();\n// (function () {\n//   var answer = 42;\n//   console.log( answer );\n// }());\n\n// options are as per `s.generateMap()` above\nconst map = bundle.generateMap({\n  file: 'bundle.js',\n  includeContent: true,\n  hires: true\n});\n```\n\nAs an alternative syntax, if you a) don't have `filename` or `indentExclusionRanges` options, or b) passed those in when you used `new MagicString(...)`, you can simply pass the `MagicString` instance itself:\n\n```js\nconst bundle = new MagicString.Bundle();\nconst source = new MagicString(someCode, {\n  filename: 'foo.js'\n});\n\nbundle.addSource(source);\n```\n\n## License\n\nMIT\n/LICENSE\u0004\u001bCopyright 2018 Rich Harris\n\nPermission 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:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE 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.\n/dist/magic-string.umd.jsŖ(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.MagicString = factory());\n})(this, (function () { 'use strict';\n\n\tclass BitSet {\n\t\tconstructor(arg) {\n\t\t\tthis.bits = arg instanceof BitSet ? arg.bits.slice() : [];\n\t\t}\n\n\t\tadd(n) {\n\t\t\tthis.bits[n >> 5] |= 1 << (n & 31);\n\t\t}\n\n\t\thas(n) {\n\t\t\treturn !!(this.bits[n >> 5] & (1 << (n & 31)));\n\t\t}\n\t}\n\n\tclass Chunk {\n\t\tconstructor(start, end, content) {\n\t\t\tthis.start = start;\n\t\t\tthis.end = end;\n\t\t\tthis.original = content;\n\n\t\t\tthis.intro = '';\n\t\t\tthis.outro = '';\n\n\t\t\tthis.content = content;\n\t\t\tthis.storeName = false;\n\t\t\tthis.edited = false;\n\n\t\t\t{\n\t\t\t\tthis.previous = null;\n\t\t\t\tthis.next = null;\n\t\t\t}\n\t\t}\n\n\t\tappendLeft(content) {\n\t\t\tthis.outro += content;\n\t\t}\n\n\t\tappendRight(content) {\n\t\t\tthis.intro = this.intro + content;\n\t\t}\n\n\t\tclone() {\n\t\t\tconst chunk = new Chunk(this.start, this.end, this.original);\n\n\t\t\tchunk.intro = this.intro;\n\t\t\tchunk.outro = this.outro;\n\t\t\tchunk.content = this.content;\n\t\t\tchunk.storeName = this.storeName;\n\t\t\tchunk.edited = this.edited;\n\n\t\t\treturn chunk;\n\t\t}\n\n\t\tcontains(index) {\n\t\t\treturn this.start < index && index < this.end;\n\t\t}\n\n\t\teachNext(fn) {\n\t\t\tlet chunk = this;\n\t\t\twhile (chunk) {\n\t\t\t\tfn(chunk);\n\t\t\t\tchunk = chunk.next;\n\t\t\t}\n\t\t}\n\n\t\teachPrevious(fn) {\n\t\t\tlet chunk = this;\n\t\t\twhile (chunk) {\n\t\t\t\tfn(chunk);\n\t\t\t\tchunk = chunk.previous;\n\t\t\t}\n\t\t}\n\n\t\tedit(content, storeName, contentOnly) {\n\t\t\tthis.content = content;\n\t\t\tif (!contentOnly) {\n\t\t\t\tthis.intro = '';\n\t\t\t\tthis.outro = '';\n\t\t\t}\n\t\t\tthis.storeName = storeName;\n\n\t\t\tthis.edited = true;\n\n\t\t\treturn this;\n\t\t}\n\n\t\tprependLeft(content) {\n\t\t\tthis.outro = content + this.outro;\n\t\t}\n\n\t\tprependRight(content) {\n\t\t\tthis.intro = content + this.intro;\n\t\t}\n\n\t\tsplit(index) {\n\t\t\tconst sliceIndex = index - this.start;\n\n\t\t\tconst originalBefore = this.original.slice(0, sliceIndex);\n\t\t\tconst originalAfter = this.original.slice(sliceIndex);\n\n\t\t\tthis.original = originalBefore;\n\n\t\t\tconst newChunk = new Chunk(index, this.end, originalAfter);\n\t\t\tnewChunk.outro = this.outro;\n\t\t\tthis.outro = '';\n\n\t\t\tthis.end = index;\n\n\t\t\tif (this.edited) {\n\t\t\t\t// TODO is this block necessary?...\n\t\t\t\tnewChunk.edit('', false);\n\t\t\t\tthis.content = '';\n\t\t\t} else {\n\t\t\t\tthis.content = originalBefore;\n\t\t\t}\n\n\t\t\tnewChunk.next = this.next;\n\t\t\tif (newChunk.next) newChunk.next.previous = newChunk;\n\t\t\tnewChunk.previous = this;\n\t\t\tthis.next = newChunk;\n\n\t\t\treturn newChunk;\n\t\t}\n\n\t\ttoString() {\n\t\t\treturn this.intro + this.content + this.outro;\n\t\t}\n\n\t\ttrimEnd(rx) {\n\t\t\tthis.outro = this.outro.replace(rx, '');\n\t\t\tif (this.outro.length) return true;\n\n\t\t\tconst trimmed = this.content.replace(rx, '');\n\n\t\t\tif (trimmed.length) {\n\t\t\t\tif (trimmed !== this.content) {\n\t\t\t\t\tthis.split(this.start + trimmed.length).edit('', undefined, true);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t} else {\n\t\t\t\tthis.edit('', undefined, true);\n\n\t\t\t\tthis.intro = this.intro.replace(rx, '');\n\t\t\t\tif (this.intro.length) return true;\n\t\t\t}\n\t\t}\n\n\t\ttrimStart(rx) {\n\t\t\tthis.intro = this.intro.replace(rx, '');\n\t\t\tif (this.intro.length) return true;\n\n\t\t\tconst trimmed = this.content.replace(rx, '');\n\n\t\t\tif (trimmed.length) {\n\t\t\t\tif (trimmed !== this.content) {\n\t\t\t\t\tthis.split(this.end - trimmed.length);\n\t\t\t\t\tthis.edit('', undefined, true);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t} else {\n\t\t\t\tthis.edit('', undefined, true);\n\n\t\t\t\tthis.outro = this.outro.replace(rx, '');\n\t\t\t\tif (this.outro.length) return true;\n\t\t\t}\n\t\t}\n\t}\n\n\tconst comma = ','.charCodeAt(0);\n\tconst semicolon = ';'.charCodeAt(0);\n\tconst chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\tconst intToChar = new Uint8Array(64); // 64 possible chars.\n\tconst charToInt = new Uint8Array(128); // z is 122 in ASCII\n\tfor (let i = 0; i < chars.length; i++) {\n\t    const c = chars.charCodeAt(i);\n\t    intToChar[i] = c;\n\t    charToInt[c] = i;\n\t}\n\t// Provide a fallback for older environments.\n\tconst td = typeof TextDecoder !== 'undefined'\n\t    ? /* #__PURE__ */ new TextDecoder()\n\t    : typeof Buffer !== 'undefined'\n\t        ? {\n\t            decode(buf) {\n\t                const out = Buffer.from(buf.buffer, buf.byteOffset, buf.byteLength);\n\t                return out.toString();\n\t            },\n\t        }\n\t        : {\n\t            decode(buf) {\n\t                let out = '';\n\t                for (let i = 0; i < buf.length; i++) {\n\t                    out += String.fromCharCode(buf[i]);\n\t                }\n\t                return out;\n\t            },\n\t        };\n\tfunction encode(decoded) {\n\t    const state = new Int32Array(5);\n\t    const bufLength = 1024 * 16;\n\t    const subLength = bufLength - 36;\n\t    const buf = new Uint8Array(bufLength);\n\t    const sub = buf.subarray(0, subLength);\n\t    let pos = 0;\n\t    let out = '';\n\t    for (let i = 0; i < decoded.length; i++) {\n\t        const line = decoded[i];\n\t        if (i > 0) {\n\t            if (pos === bufLength) {\n\t                out += td.decode(buf);\n\t                pos = 0;\n\t            }\n\t            buf[pos++] = semicolon;\n\t        }\n\t        if (line.length === 0)\n\t            continue;\n\t        state[0] = 0;\n\t        for (let j = 0; j < line.length; j++) {\n\t            const segment = line[j];\n\t            // We can push up to 5 ints, each int can take at most 7 chars, and we\n\t            // may push a comma.\n\t            if (pos > subLength) {\n\t                out += td.decode(sub);\n\t                buf.copyWithin(0, subLength, pos);\n\t                pos -= subLength;\n\t            }\n\t            if (j > 0)\n\t                buf[pos++] = comma;\n\t            pos = encodeInteger(buf, pos, state, segment, 0); // genColumn\n\t            if (segment.length === 1)\n\t                continue;\n\t            pos = encodeInteger(buf, pos, state, segment, 1); // sourcesIndex\n\t            pos = encodeInteger(buf, pos, state, segment, 2); // sourceLine\n\t            pos = encodeInteger(buf, pos, state, segment, 3); // sourceColumn\n\t            if (segment.length === 4)\n\t                continue;\n\t            pos = encodeInteger(buf, pos, state, segment, 4); // namesIndex\n\t        }\n\t    }\n\t    return out + td.decode(buf.subarray(0, pos));\n\t}\n\tfunction encodeInteger(buf, pos, state, segment, j) {\n\t    const next = segment[j];\n\t    let num = next - state[j];\n\t    state[j] = next;\n\t    num = num < 0 ? (-num << 1) | 1 : num << 1;\n\t    do {\n\t        let clamped = num & 0b011111;\n\t        num >>>= 5;\n\t        if (num > 0)\n\t            clamped |= 0b100000;\n\t        buf[pos++] = intToChar[clamped];\n\t    } while (num > 0);\n\t    return pos;\n\t}\n\n\tfunction getBtoa () {\n\t\tif (typeof window !== 'undefined' && typeof window.btoa === 'function') {\n\t\t\treturn (str) => window.btoa(unescape(encodeURIComponent(str)));\n\t\t} else if (typeof Buffer === 'function') {\n\t\t\treturn (str) => Buffer.from(str, 'utf-8').toString('base64');\n\t\t} else {\n\t\t\treturn () => {\n\t\t\t\tthrow new Error('Unsupported environment: `window.btoa` or `Buffer` should be supported.');\n\t\t\t};\n\t\t}\n\t}\n\n\tconst btoa = /*#__PURE__*/ getBtoa();\n\n\tclass SourceMap {\n\t\tconstructor(properties) {\n\t\t\tthis.version = 3;\n\t\t\tthis.file = properties.file;\n\t\t\tthis.sources = properties.sources;\n\t\t\tthis.sourcesContent = properties.sourcesContent;\n\t\t\tthis.names = properties.names;\n\t\t\tthis.mappings = encode(properties.mappings);\n\t\t\tif (typeof properties.x_google_ignoreList !== 'undefined') {\n\t\t\t\tthis.x_google_ignoreList = properties.x_google_ignoreList;\n\t\t\t}\n\t\t}\n\n\t\ttoString() {\n\t\t\treturn JSON.stringify(this);\n\t\t}\n\n\t\ttoUrl() {\n\t\t\treturn 'data:application/json;charset=utf-8;base64,' + btoa(this.toString());\n\t\t}\n\t}\n\n\tfunction guessIndent(code) {\n\t\tconst lines = code.split('\\n');\n\n\t\tconst tabbed = lines.filter((line) => /^\\t+/.test(line));\n\t\tconst spaced = lines.filter((line) => /^ {2,}/.test(line));\n\n\t\tif (tabbed.length === 0 && spaced.length === 0) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// More lines tabbed than spaced? Assume tabs, and\n\t\t// default to tabs in the case of a tie (or nothing\n\t\t// to go on)\n\t\tif (tabbed.length >= spaced.length) {\n\t\t\treturn '\\t';\n\t\t}\n\n\t\t// Otherwise, we need to guess the multiple\n\t\tconst min = spaced.reduce((previous, current) => {\n\t\t\tconst numSpaces = /^ +/.exec(current)[0].length;\n\t\t\treturn Math.min(numSpaces, previous);\n\t\t}, Infinity);\n\n\t\treturn new Array(min + 1).join(' ');\n\t}\n\n\tfunction getRelativePath(from, to) {\n\t\tconst fromParts = from.split(/[/\\\\]/);\n\t\tconst toParts = to.split(/[/\\\\]/);\n\n\t\tfromParts.pop(); // get dirname\n\n\t\twhile (fromParts[0] === toParts[0]) {\n\t\t\tfromParts.shift();\n\t\t\ttoParts.shift();\n\t\t}\n\n\t\tif (fromParts.length) {\n\t\t\tlet i = fromParts.length;\n\t\t\twhile (i--) fromParts[i] = '..';\n\t\t}\n\n\t\treturn fromParts.concat(toParts).join('/');\n\t}\n\n\tconst toString = Object.prototype.toString;\n\n\tfunction isObject(thing) {\n\t\treturn toString.call(thing) === '[object Object]';\n\t}\n\n\tfunction getLocator(source) {\n\t\tconst originalLines = source.split('\\n');\n\t\tconst lineOffsets = [];\n\n\t\tfor (let i = 0, pos = 0; i < originalLines.length; i++) {\n\t\t\tlineOffsets.push(pos);\n\t\t\tpos += originalLines[i].length + 1;\n\t\t}\n\n\t\treturn function locate(index) {\n\t\t\tlet i = 0;\n\t\t\tlet j = lineOffsets.length;\n\t\t\twhile (i < j) {\n\t\t\t\tconst m = (i + j) >> 1;\n\t\t\t\tif (index < lineOffsets[m]) {\n\t\t\t\t\tj = m;\n\t\t\t\t} else {\n\t\t\t\t\ti = m + 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst line = i - 1;\n\t\t\tconst column = index - lineOffsets[line];\n\t\t\treturn { line, column };\n\t\t};\n\t}\n\n\tclass Mappings {\n\t\tconstructor(hires) {\n\t\t\tthis.hires = hires;\n\t\t\tthis.generatedCodeLine = 0;\n\t\t\tthis.generatedCodeColumn = 0;\n\t\t\tthis.raw = [];\n\t\t\tthis.rawSegments = this.raw[this.generatedCodeLine] = [];\n\t\t\tthis.pending = null;\n\t\t}\n\n\t\taddEdit(sourceIndex, content, loc, nameIndex) {\n\t\t\tif (content.length) {\n\t\t\t\tconst segment = [this.generatedCodeColumn, sourceIndex, loc.line, loc.column];\n\t\t\t\tif (nameIndex >= 0) {\n\t\t\t\t\tsegment.push(nameIndex);\n\t\t\t\t}\n\t\t\t\tthis.rawSegments.push(segment);\n\t\t\t} else if (this.pending) {\n\t\t\t\tthis.rawSegments.push(this.pending);\n\t\t\t}\n\n\t\t\tthis.advance(content);\n\t\t\tthis.pending = null;\n\t\t}\n\n\t\taddUneditedChunk(sourceIndex, chunk, original, loc, sourcemapLocations) {\n\t\t\tlet originalCharIndex = chunk.start;\n\t\t\tlet first = true;\n\n\t\t\twhile (originalCharIndex < chunk.end) {\n\t\t\t\tif (this.hires || first || sourcemapLocations.has(originalCharIndex)) {\n\t\t\t\t\tthis.rawSegments.push([this.generatedCodeColumn, sourceIndex, loc.line, loc.column]);\n\t\t\t\t}\n\n\t\t\t\tif (original[originalCharIndex] === '\\n') {\n\t\t\t\t\tloc.line += 1;\n\t\t\t\t\tloc.column = 0;\n\t\t\t\t\tthis.generatedCodeLine += 1;\n\t\t\t\t\tthis.raw[this.generatedCodeLine] = this.rawSegments = [];\n\t\t\t\t\tthis.generatedCodeColumn = 0;\n\t\t\t\t\tfirst = true;\n\t\t\t\t} else {\n\t\t\t\t\tloc.column += 1;\n\t\t\t\t\tthis.generatedCodeColumn += 1;\n\t\t\t\t\tfirst = false;\n\t\t\t\t}\n\n\t\t\t\toriginalCharIndex += 1;\n\t\t\t}\n\n\t\t\tthis.pending = null;\n\t\t}\n\n\t\tadvance(str) {\n\t\t\tif (!str) return;\n\n\t\t\tconst lines = str.split('\\n');\n\n\t\t\tif (lines.length > 1) {\n\t\t\t\tfor (let i = 0; i < lines.length - 1; i++) {\n\t\t\t\t\tthis.generatedCodeLine++;\n\t\t\t\t\tthis.raw[this.generatedCodeLine] = this.rawSegments = [];\n\t\t\t\t}\n\t\t\t\tthis.generatedCodeColumn = 0;\n\t\t\t}\n\n\t\t\tthis.generatedCodeColumn += lines[lines.length - 1].length;\n\t\t}\n\t}\n\n\tconst n = '\\n';\n\n\tconst warned = {\n\t\tinsertLeft: false,\n\t\tinsertRight: false,\n\t\tstoreName: false,\n\t};\n\n\tclass MagicString {\n\t\tconstructor(string, options = {}) {\n\t\t\tconst chunk = new Chunk(0, string.length, string);\n\n\t\t\tObject.defineProperties(this, {\n\t\t\t\toriginal: { writable: true, value: string },\n\t\t\t\toutro: { writable: true, value: '' },\n\t\t\t\tintro: { writable: true, value: '' },\n\t\t\t\tfirstChunk: { writable: true, value: chunk },\n\t\t\t\tlastChunk: { writable: true, value: chunk },\n\t\t\t\tlastSearchedChunk: { writable: true, value: chunk },\n\t\t\t\tbyStart: { writable: true, value: {} },\n\t\t\t\tbyEnd: { writable: true, value: {} },\n\t\t\t\tfilename: { writable: true, value: options.filename },\n\t\t\t\tindentExclusionRanges: { writable: true, value: options.indentExclusionRanges },\n\t\t\t\tsourcemapLocations: { writable: true, value: new BitSet() },\n\t\t\t\tstoredNames: { writable: true, value: {} },\n\t\t\t\tindentStr: { writable: true, value: undefined },\n\t\t\t});\n\n\t\t\tthis.byStart[0] = chunk;\n\t\t\tthis.byEnd[string.length] = chunk;\n\t\t}\n\n\t\taddSourcemapLocation(char) {\n\t\t\tthis.sourcemapLocations.add(char);\n\t\t}\n\n\t\tappend(content) {\n\t\t\tif (typeof content !== 'string') throw new TypeError('outro content must be a string');\n\n\t\t\tthis.outro += content;\n\t\t\treturn this;\n\t\t}\n\n\t\tappendLeft(index, content) {\n\t\t\tif (typeof content !== 'string') throw new TypeError('inserted content must be a string');\n\n\t\t\tthis._split(index);\n\n\t\t\tconst chunk = this.byEnd[index];\n\n\t\t\tif (chunk) {\n\t\t\t\tchunk.appendLeft(content);\n\t\t\t} else {\n\t\t\t\tthis.intro += content;\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\n\t\tappendRight(index, content) {\n\t\t\tif (typeof content !== 'string') throw new TypeError('inserted content must be a string');\n\n\t\t\tthis._split(index);\n\n\t\t\tconst chunk = this.byStart[index];\n\n\t\t\tif (chunk) {\n\t\t\t\tchunk.appendRight(content);\n\t\t\t} else {\n\t\t\t\tthis.outro += content;\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\n\t\tclone() {\n\t\t\tconst cloned = new MagicString(this.original, { filename: this.filename });\n\n\t\t\tlet originalChunk = this.firstChunk;\n\t\t\tlet clonedChunk = (cloned.firstChunk = cloned.lastSearchedChunk = originalChunk.clone());\n\n\t\t\twhile (originalChunk) {\n\t\t\t\tcloned.byStart[clonedChunk.start] = clonedChunk;\n\t\t\t\tcloned.byEnd[clonedChunk.end] = clonedChunk;\n\n\t\t\t\tconst nextOriginalChunk = originalChunk.next;\n\t\t\t\tconst nextClonedChunk = nextOriginalChunk && nextOriginalChunk.clone();\n\n\t\t\t\tif (nextClonedChunk) {\n\t\t\t\t\tclonedChunk.next = nextClonedChunk;\n\t\t\t\t\tnextClonedChunk.previous = clonedChunk;\n\n\t\t\t\t\tclonedChunk = nextClonedChunk;\n\t\t\t\t}\n\n\t\t\t\toriginalChunk = nextOriginalChunk;\n\t\t\t}\n\n\t\t\tcloned.lastChunk = clonedChunk;\n\n\t\t\tif (this.indentExclusionRanges) {\n\t\t\t\tcloned.indentExclusionRanges = this.indentExclusionRanges.slice();\n\t\t\t}\n\n\t\t\tcloned.sourcemapLocations = new BitSet(this.sourcemapLocations);\n\n\t\t\tcloned.intro = this.intro;\n\t\t\tcloned.outro = this.outro;\n\n\t\t\treturn cloned;\n\t\t}\n\n\t\tgenerateDecodedMap(options) {\n\t\t\toptions = options || {};\n\n\t\t\tconst sourceIndex = 0;\n\t\t\tconst names = Object.keys(this.storedNames);\n\t\t\tconst mappings = new Mappings(options.hires);\n\n\t\t\tconst locate = getLocator(this.original);\n\n\t\t\tif (this.intro) {\n\t\t\t\tmappings.advance(this.intro);\n\t\t\t}\n\n\t\t\tthis.firstChunk.eachNext((chunk) => {\n\t\t\t\tconst loc = locate(chunk.start);\n\n\t\t\t\tif (chunk.intro.length) mappings.advance(chunk.intro);\n\n\t\t\t\tif (chunk.edited) {\n\t\t\t\t\tmappings.addEdit(\n\t\t\t\t\t\tsourceIndex,\n\t\t\t\t\t\tchunk.content,\n\t\t\t\t\t\tloc,\n\t\t\t\t\t\tchunk.storeName ? names.indexOf(chunk.original) : -1\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tmappings.addUneditedChunk(sourceIndex, chunk, this.original, loc, this.sourcemapLocations);\n\t\t\t\t}\n\n\t\t\t\tif (chunk.outro.length) mappings.advance(chunk.outro);\n\t\t\t});\n\n\t\t\treturn {\n\t\t\t\tfile: options.file ? options.file.split(/[/\\\\]/).pop() : null,\n\t\t\t\tsources: [options.source ? getRelativePath(options.file || '', options.source) : null],\n\t\t\t\tsourcesContent: options.includeContent ? [this.original] : [null],\n\t\t\t\tnames,\n\t\t\t\tmappings: mappings.raw,\n\t\t\t};\n\t\t}\n\n\t\tgenerateMap(options) {\n\t\t\treturn new SourceMap(this.generateDecodedMap(options));\n\t\t}\n\n\t\t_ensureindentStr() {\n\t\t\tif (this.indentStr === undefined) {\n\t\t\t\tthis.indentStr = guessIndent(this.original);\n\t\t\t}\n\t\t}\n\n\t\t_getRawIndentString() {\n\t\t\tthis._ensureindentStr();\n\t\t\treturn this.indentStr;\n\t\t}\n\n\t\tgetIndentString() {\n\t\t\tthis._ensureindentStr();\n\t\t\treturn this.indentStr === null ? '\\t' : this.indentStr;\n\t\t}\n\n\t\tindent(indentStr, options) {\n\t\t\tconst pattern = /^[^\\r\\n]/gm;\n\n\t\t\tif (isObject(indentStr)) {\n\t\t\t\toptions = indentStr;\n\t\t\t\tindentStr = undefined;\n\t\t\t}\n\n\t\t\tif (indentStr === undefined) {\n\t\t\t\tthis._ensureindentStr();\n\t\t\t\tindentStr = this.indentStr || '\\t';\n\t\t\t}\n\n\t\t\tif (indentStr === '') return this; // noop\n\n\t\t\toptions = options || {};\n\n\t\t\t// Process exclusion ranges\n\t\t\tconst isExcluded = {};\n\n\t\t\tif (options.exclude) {\n\t\t\t\tconst exclusions =\n\t\t\t\t\ttypeof options.exclude[0] === 'number' ? [options.exclude] : options.exclude;\n\t\t\t\texclusions.forEach((exclusion) => {\n\t\t\t\t\tfor (let i = exclusion[0]; i < exclusion[1]; i += 1) {\n\t\t\t\t\t\tisExcluded[i] = true;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tlet shouldIndentNextCharacter = options.indentStart !== false;\n\t\t\tconst replacer = (match) => {\n\t\t\t\tif (shouldIndentNextCharacter) return `${indentStr}${match}`;\n\t\t\t\tshouldIndentNextCharacter = true;\n\t\t\t\treturn match;\n\t\t\t};\n\n\t\t\tthis.intro = this.intro.replace(pattern, replacer);\n\n\t\t\tlet charIndex = 0;\n\t\t\tlet chunk = this.firstChunk;\n\n\t\t\twhile (chunk) {\n\t\t\t\tconst end = chunk.end;\n\n\t\t\t\tif (chunk.edited) {\n\t\t\t\t\tif (!isExcluded[charIndex]) {\n\t\t\t\t\t\tchunk.content = chunk.content.replace(pattern, replacer);\n\n\t\t\t\t\t\tif (chunk.content.length) {\n\t\t\t\t\t\t\tshouldIndentNextCharacter = chunk.content[chunk.content.length - 1] === '\\n';\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tcharIndex = chunk.start;\n\n\t\t\t\t\twhile (charIndex < end) {\n\t\t\t\t\t\tif (!isExcluded[charIndex]) {\n\t\t\t\t\t\t\tconst char = this.original[charIndex];\n\n\t\t\t\t\t\t\tif (char === '\\n') {\n\t\t\t\t\t\t\t\tshouldIndentNextCharacter = true;\n\t\t\t\t\t\t\t} else if (char !== '\\r' && shouldIndentNextCharacter) {\n\t\t\t\t\t\t\t\tshouldIndentNextCharacter = false;\n\n\t\t\t\t\t\t\t\tif (charIndex === chunk.start) {\n\t\t\t\t\t\t\t\t\tchunk.prependRight(indentStr);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tthis._splitChunk(chunk, charIndex);\n\t\t\t\t\t\t\t\t\tchunk = chunk.next;\n\t\t\t\t\t\t\t\t\tchunk.prependRight(indentStr);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcharIndex += 1;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcharIndex = chunk.end;\n\t\t\t\tchunk = chunk.next;\n\t\t\t}\n\n\t\t\tthis.outro = this.outro.replace(pattern, replacer);\n\n\t\t\treturn this;\n\t\t}\n\n\t\tinsert() {\n\t\t\tthrow new Error(\n\t\t\t\t'magicString.insert(...) is deprecated. Use prependRight(...) or appendLeft(...)'\n\t\t\t);\n\t\t}\n\n\t\tinsertLeft(index, content) {\n\t\t\tif (!warned.insertLeft) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t'magicString.insertLeft(...) is deprecated. Use magicString.appendLeft(...) instead'\n\t\t\t\t); // eslint-disable-line no-console\n\t\t\t\twarned.insertLeft = true;\n\t\t\t}\n\n\t\t\treturn this.appendLeft(index, content);\n\t\t}\n\n\t\tinsertRight(index, content) {\n\t\t\tif (!warned.insertRight) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t'magicString.insertRight(...) is deprecated. Use magicString.prependRight(...) instead'\n\t\t\t\t); // eslint-disable-line no-console\n\t\t\t\twarned.insertRight = true;\n\t\t\t}\n\n\t\t\treturn this.prependRight(index, content);\n\t\t}\n\n\t\tmove(start, end, index) {\n\t\t\tif (index >= start && index <= end) throw new Error('Cannot move a selection inside itself');\n\n\t\t\tthis._split(start);\n\t\t\tthis._split(end);\n\t\t\tthis._split(index);\n\n\t\t\tconst first = this.byStart[start];\n\t\t\tconst last = this.byEnd[end];\n\n\t\t\tconst oldLeft = first.previous;\n\t\t\tconst oldRight = last.next;\n\n\t\t\tconst newRight = this.byStart[index];\n\t\t\tif (!newRight && last === this.lastChunk) return this;\n\t\t\tconst newLeft = newRight ? newRight.previous : this.lastChunk;\n\n\t\t\tif (oldLeft) oldLeft.next = oldRight;\n\t\t\tif (oldRight) oldRight.previous = oldLeft;\n\n\t\t\tif (newLeft) newLeft.next = first;\n\t\t\tif (newRight) newRight.previous = last;\n\n\t\t\tif (!first.previous) this.firstChunk = last.next;\n\t\t\tif (!last.next) {\n\t\t\t\tthis.lastChunk = first.previous;\n\t\t\t\tthis.lastChunk.next = null;\n\t\t\t}\n\n\t\t\tfirst.previous = newLeft;\n\t\t\tlast.next = newRight || null;\n\n\t\t\tif (!newLeft) this.firstChunk = first;\n\t\t\tif (!newRight) this.lastChunk = last;\n\t\t\treturn this;\n\t\t}\n\n\t\toverwrite(start, end, content, options) {\n\t\t\toptions = options || {};\n\t\t\treturn this.update(start, end, content, { ...options, overwrite: !options.contentOnly });\n\t\t}\n\n\t\tupdate(start, end, content, options) {\n\t\t\tif (typeof content !== 'string') throw new TypeError('replacement content must be a string');\n\n\t\t\twhile (start < 0) start += this.original.length;\n\t\t\twhile (end < 0) end += this.original.length;\n\n\t\t\tif (end > this.original.length) throw new Error('end is out of bounds');\n\t\t\tif (start === end)\n\t\t\t\tthrow new Error(\n\t\t\t\t\t'Cannot overwrite a zero-length range – use appendLeft or prependRight instead'\n\t\t\t\t);\n\n\t\t\tthis._split(start);\n\t\t\tthis._split(end);\n\n\t\t\tif (options === true) {\n\t\t\t\tif (!warned.storeName) {\n\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t'The final argument to magicString.overwrite(...) should be an options object. See https://github.com/rich-harris/magic-string'\n\t\t\t\t\t); // eslint-disable-line no-console\n\t\t\t\t\twarned.storeName = true;\n\t\t\t\t}\n\n\t\t\t\toptions = { storeName: true };\n\t\t\t}\n\t\t\tconst storeName = options !== undefined ? options.storeName : false;\n\t\t\tconst overwrite = options !== undefined ? options.overwrite : false;\n\n\t\t\tif (storeName) {\n\t\t\t\tconst original = this.original.slice(start, end);\n\t\t\t\tObject.defineProperty(this.storedNames, original, {\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: true,\n\t\t\t\t\tenumerable: true,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst first = this.byStart[start];\n\t\t\tconst last = this.byEnd[end];\n\n\t\t\tif (first) {\n\t\t\t\tlet chunk = first;\n\t\t\t\twhile (chunk !== last) {\n\t\t\t\t\tif (chunk.next !== this.byStart[chunk.end]) {\n\t\t\t\t\t\tthrow new Error('Cannot overwrite across a split point');\n\t\t\t\t\t}\n\t\t\t\t\tchunk = chunk.next;\n\t\t\t\t\tchunk.edit('', false);\n\t\t\t\t}\n\n\t\t\t\tfirst.edit(content, storeName, !overwrite);\n\t\t\t} else {\n\t\t\t\t// must be inserting at the end\n\t\t\t\tconst newChunk = new Chunk(start, end, '').edit(content, storeName);\n\n\t\t\t\t// TODO last chunk in the array may not be the last chunk, if it's moved...\n\t\t\t\tlast.next = newChunk;\n\t\t\t\tnewChunk.previous = last;\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\n\t\tprepend(content) {\n\t\t\tif (typeof content !== 'string') throw new TypeError('outro content must be a string');\n\n\t\t\tthis.intro = content + this.intro;\n\t\t\treturn this;\n\t\t}\n\n\t\tprependLeft(index, content) {\n\t\t\tif (typeof content !== 'string') throw new TypeError('inserted content must be a string');\n\n\t\t\tthis._split(index);\n\n\t\t\tconst chunk = this.byEnd[index];\n\n\t\t\tif (chunk) {\n\t\t\t\tchunk.prependLeft(content);\n\t\t\t} else {\n\t\t\t\tthis.intro = content + this.intro;\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\n\t\tprependRight(index, content) {\n\t\t\tif (typeof content !== 'string') throw new TypeError('inserted content must be a string');\n\n\t\t\tthis._split(index);\n\n\t\t\tconst chunk = this.byStart[index];\n\n\t\t\tif (chunk) {\n\t\t\t\tchunk.prependRight(content);\n\t\t\t} else {\n\t\t\t\tthis.outro = content + this.outro;\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\n\t\tremove(start, end) {\n\t\t\twhile (start < 0) start += this.original.length;\n\t\t\twhile (end < 0) end += this.original.length;\n\n\t\t\tif (start === end) return this;\n\n\t\t\tif (start < 0 || end > this.original.length) throw new Error('Character is out of bounds');\n\t\t\tif (start > end) throw new Error('end must be greater than start');\n\n\t\t\tthis._split(start);\n\t\t\tthis._split(end);\n\n\t\t\tlet chunk = this.byStart[start];\n\n\t\t\twhile (chunk) {\n\t\t\t\tchunk.intro = '';\n\t\t\t\tchunk.outro = '';\n\t\t\t\tchunk.edit('');\n\n\t\t\t\tchunk = end > chunk.end ? this.byStart[chunk.end] : null;\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\n\t\tlastChar() {\n\t\t\tif (this.outro.length) return this.outro[this.outro.length - 1];\n\t\t\tlet chunk = this.lastChunk;\n\t\t\tdo {\n\t\t\t\tif (chunk.outro.length) return chunk.outro[chunk.outro.length - 1];\n\t\t\t\tif (chunk.content.length) return chunk.content[chunk.content.length - 1];\n\t\t\t\tif (chunk.intro.length) return chunk.intro[chunk.intro.length - 1];\n\t\t\t} while ((chunk = chunk.previous));\n\t\t\tif (this.intro.length) return this.intro[this.intro.length - 1];\n\t\t\treturn '';\n\t\t}\n\n\t\tlastLine() {\n\t\t\tlet lineIndex = this.outro.lastIndexOf(n);\n\t\t\tif (lineIndex !== -1) return this.outro.substr(lineIndex + 1);\n\t\t\tlet lineStr = this.outro;\n\t\t\tlet chunk = this.lastChunk;\n\t\t\tdo {\n\t\t\t\tif (chunk.outro.length > 0) {\n\t\t\t\t\tlineIndex = chunk.outro.lastIndexOf(n);\n\t\t\t\t\tif (lineIndex !== -1) return chunk.outro.substr(lineIndex + 1) + lineStr;\n\t\t\t\t\tlineStr = chunk.outro + lineStr;\n\t\t\t\t}\n\n\t\t\t\tif (chunk.content.length > 0) {\n\t\t\t\t\tlineIndex = chunk.content.lastIndexOf(n);\n\t\t\t\t\tif (lineIndex !== -1) return chunk.content.substr(lineIndex + 1) + lineStr;\n\t\t\t\t\tlineStr = chunk.content + lineStr;\n\t\t\t\t}\n\n\t\t\t\tif (chunk.intro.length > 0) {\n\t\t\t\t\tlineIndex = chunk.intro.lastIndexOf(n);\n\t\t\t\t\tif (lineIndex !== -1) return chunk.intro.substr(lineIndex + 1) + lineStr;\n\t\t\t\t\tlineStr = chunk.intro + lineStr;\n\t\t\t\t}\n\t\t\t} while ((chunk = chunk.previous));\n\t\t\tlineIndex = this.intro.lastIndexOf(n);\n\t\t\tif (lineIndex !== -1) return this.intro.substr(lineIndex + 1) + lineStr;\n\t\t\treturn this.intro + lineStr;\n\t\t}\n\n\t\tslice(start = 0, end = this.original.length) {\n\t\t\twhile (start < 0) start += this.original.length;\n\t\t\twhile (end < 0) end += this.original.length;\n\n\t\t\tlet result = '';\n\n\t\t\t// find start chunk\n\t\t\tlet chunk = this.firstChunk;\n\t\t\twhile (chunk && (chunk.start > start || chunk.end <= start)) {\n\t\t\t\t// found end chunk before start\n\t\t\t\tif (chunk.start < end && chunk.end >= end) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tchunk = chunk.next;\n\t\t\t}\n\n\t\t\tif (chunk && chunk.edited && chunk.start !== start)\n\t\t\t\tthrow new Error(`Cannot use replaced character ${start} as slice start anchor.`);\n\n\t\t\tconst startChunk = chunk;\n\t\t\twhile (chunk) {\n\t\t\t\tif (chunk.intro && (startChunk !== chunk || chunk.start === start)) {\n\t\t\t\t\tresult += chunk.intro;\n\t\t\t\t}\n\n\t\t\t\tconst containsEnd = chunk.start < end && chunk.end >= end;\n\t\t\t\tif (containsEnd && chunk.edited && chunk.end !== end)\n\t\t\t\t\tthrow new Error(`Cannot use replaced character ${end} as slice end anchor.`);\n\n\t\t\t\tconst sliceStart = startChunk === chunk ? start - chunk.start : 0;\n\t\t\t\tconst sliceEnd = containsEnd ? chunk.content.length + end - chunk.end : chunk.content.length;\n\n\t\t\t\tresult += chunk.content.slice(sliceStart, sliceEnd);\n\n\t\t\t\tif (chunk.outro && (!containsEnd || chunk.end === end)) {\n\t\t\t\t\tresult += chunk.outro;\n\t\t\t\t}\n\n\t\t\t\tif (containsEnd) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tchunk = chunk.next;\n\t\t\t}\n\n\t\t\treturn result;\n\t\t}\n\n\t\t// TODO deprecate this? not really very useful\n\t\tsnip(start, end) {\n\t\t\tconst clone = this.clone();\n\t\t\tclone.remove(0, start);\n\t\t\tclone.remove(end, clone.original.length);\n\n\t\t\treturn clone;\n\t\t}\n\n\t\t_split(index) {\n\t\t\tif (this.byStart[index] || this.byEnd[index]) return;\n\n\t\t\tlet chunk = this.lastSearchedChunk;\n\t\t\tconst searchForward = index > chunk.end;\n\n\t\t\twhile (chunk) {\n\t\t\t\tif (chunk.contains(index)) return this._splitChunk(chunk, index);\n\n\t\t\t\tchunk = searchForward ? this.byStart[chunk.end] : this.byEnd[chunk.start];\n\t\t\t}\n\t\t}\n\n\t\t_splitChunk(chunk, index) {\n\t\t\tif (chunk.edited && chunk.content.length) {\n\t\t\t\t// zero-length edited chunks are a special case (overlapping replacements)\n\t\t\t\tconst loc = getLocator(this.original)(index);\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Cannot split a chunk that has already been edited (${loc.line}:${loc.column} – \"${chunk.original}\")`\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst newChunk = chunk.split(index);\n\n\t\t\tthis.byEnd[index] = chunk;\n\t\t\tthis.byStart[index] = newChunk;\n\t\t\tthis.byEnd[newChunk.end] = newChunk;\n\n\t\t\tif (chunk === this.lastChunk) this.lastChunk = newChunk;\n\n\t\t\tthis.lastSearchedChunk = chunk;\n\t\t\treturn true;\n\t\t}\n\n\t\ttoString() {\n\t\t\tlet str = this.intro;\n\n\t\t\tlet chunk = this.firstChunk;\n\t\t\twhile (chunk) {\n\t\t\t\tstr += chunk.toString();\n\t\t\t\tchunk = chunk.next;\n\t\t\t}\n\n\t\t\treturn str + this.outro;\n\t\t}\n\n\t\tisEmpty() {\n\t\t\tlet chunk = this.firstChunk;\n\t\t\tdo {\n\t\t\t\tif (\n\t\t\t\t\t(chunk.intro.length && chunk.intro.trim()) ||\n\t\t\t\t\t(chunk.content.length && chunk.content.trim()) ||\n\t\t\t\t\t(chunk.outro.length && chunk.outro.trim())\n\t\t\t\t)\n\t\t\t\t\treturn false;\n\t\t\t} while ((chunk = chunk.next));\n\t\t\treturn true;\n\t\t}\n\n\t\tlength() {\n\t\t\tlet chunk = this.firstChunk;\n\t\t\tlet length = 0;\n\t\t\tdo {\n\t\t\t\tlength += chunk.intro.length + chunk.content.length + chunk.outro.length;\n\t\t\t} while ((chunk = chunk.next));\n\t\t\treturn length;\n\t\t}\n\n\t\ttrimLines() {\n\t\t\treturn this.trim('[\\\\r\\\\n]');\n\t\t}\n\n\t\ttrim(charType) {\n\t\t\treturn this.trimStart(charType).trimEnd(charType);\n\t\t}\n\n\t\ttrimEndAborted(charType) {\n\t\t\tconst rx = new RegExp((charType || '\\\\s') + '+$');\n\n\t\t\tthis.outro = this.outro.replace(rx, '');\n\t\t\tif (this.outro.length) return true;\n\n\t\t\tlet chunk = this.lastChunk;\n\n\t\t\tdo {\n\t\t\t\tconst end = chunk.end;\n\t\t\t\tconst aborted = chunk.trimEnd(rx);\n\n\t\t\t\t// if chunk was trimmed, we have a new lastChunk\n\t\t\t\tif (chunk.end !== end) {\n\t\t\t\t\tif (this.lastChunk === chunk) {\n\t\t\t\t\t\tthis.lastChunk = chunk.next;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.byEnd[chunk.end] = chunk;\n\t\t\t\t\tthis.byStart[chunk.next.start] = chunk.next;\n\t\t\t\t\tthis.byEnd[chunk.next.end] = chunk.next;\n\t\t\t\t}\n\n\t\t\t\tif (aborted) return true;\n\t\t\t\tchunk = chunk.previous;\n\t\t\t} while (chunk);\n\n\t\t\treturn false;\n\t\t}\n\n\t\ttrimEnd(charType) {\n\t\t\tthis.trimEndAborted(charType);\n\t\t\treturn this;\n\t\t}\n\t\ttrimStartAborted(charType) {\n\t\t\tconst rx = new RegExp('^' + (charType || '\\\\s') + '+');\n\n\t\t\tthis.intro = this.intro.replace(rx, '');\n\t\t\tif (this.intro.length) return true;\n\n\t\t\tlet chunk = this.firstChunk;\n\n\t\t\tdo {\n\t\t\t\tconst end = chunk.end;\n\t\t\t\tconst aborted = chunk.trimStart(rx);\n\n\t\t\t\tif (chunk.end !== end) {\n\t\t\t\t\t// special case...\n\t\t\t\t\tif (chunk === this.lastChunk) this.lastChunk = chunk.next;\n\n\t\t\t\t\tthis.byEnd[chunk.end] = chunk;\n\t\t\t\t\tthis.byStart[chunk.next.start] = chunk.next;\n\t\t\t\t\tthis.byEnd[chunk.next.end] = chunk.next;\n\t\t\t\t}\n\n\t\t\t\tif (aborted) return true;\n\t\t\t\tchunk = chunk.next;\n\t\t\t} while (chunk);\n\n\t\t\treturn false;\n\t\t}\n\n\t\ttrimStart(charType) {\n\t\t\tthis.trimStartAborted(charType);\n\t\t\treturn this;\n\t\t}\n\n\t\thasChanged() {\n\t\t\treturn this.original !== this.toString();\n\t\t}\n\n\t\t_replaceRegexp(searchValue, replacement) {\n\t\t\tfunction getReplacement(match, str) {\n\t\t\t\tif (typeof replacement === 'string') {\n\t\t\t\t\treturn replacement.replace(/\\$(\\$|&|\\d+)/g, (_, i) => {\n\t\t\t\t\t\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace#specifying_a_string_as_a_parameter\n\t\t\t\t\t\tif (i === '$') return '$';\n\t\t\t\t\t\tif (i === '&') return match[0];\n\t\t\t\t\t\tconst num = +i;\n\t\t\t\t\t\tif (num < match.length) return match[+i];\n\t\t\t\t\t\treturn `$${i}`;\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\treturn replacement(...match, match.index, str, match.groups);\n\t\t\t\t}\n\t\t\t}\n\t\t\tfunction matchAll(re, str) {\n\t\t\t\tlet match;\n\t\t\t\tconst matches = [];\n\t\t\t\twhile ((match = re.exec(str))) {\n\t\t\t\t\tmatches.push(match);\n\t\t\t\t}\n\t\t\t\treturn matches;\n\t\t\t}\n\t\t\tif (searchValue.global) {\n\t\t\t\tconst matches = matchAll(searchValue, this.original);\n\t\t\t\tmatches.forEach((match) => {\n\t\t\t\t\tif (match.index != null)\n\t\t\t\t\t\tthis.overwrite(\n\t\t\t\t\t\t\tmatch.index,\n\t\t\t\t\t\t\tmatch.index + match[0].length,\n\t\t\t\t\t\t\tgetReplacement(match, this.original)\n\t\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tconst match = this.original.match(searchValue);\n\t\t\t\tif (match && match.index != null)\n\t\t\t\t\tthis.overwrite(\n\t\t\t\t\t\tmatch.index,\n\t\t\t\t\t\tmatch.index + match[0].length,\n\t\t\t\t\t\tgetReplacement(match, this.original)\n\t\t\t\t\t);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\n\t\t_replaceString(string, replacement) {\n\t\t\tconst { original } = this;\n\t\t\tconst index = original.indexOf(string);\n\n\t\t\tif (index !== -1) {\n\t\t\t\tthis.overwrite(index, index + string.length, replacement);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t}\n\n\t\treplace(searchValue, replacement) {\n\t\t\tif (typeof searchValue === 'string') {\n\t\t\t\treturn this._replaceString(searchValue, replacement);\n\t\t\t}\n\n\t\t\treturn this._replaceRegexp(searchValue, replacement);\n\t\t}\n\n\t\t_replaceAllString(string, replacement) {\n\t\t\tconst { original } = this;\n\t\t\tconst stringLength = string.length;\n\t\t\tfor (\n\t\t\t\tlet index = original.indexOf(string);\n\t\t\t\tindex !== -1;\n\t\t\t\tindex = original.indexOf(string, index + stringLength)\n\t\t\t) {\n\t\t\t\tthis.overwrite(index, index + stringLength, replacement);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t}\n\n\t\treplaceAll(searchValue, replacement) {\n\t\t\tif (typeof searchValue === 'string') {\n\t\t\t\treturn this._replaceAllString(searchValue, replacement);\n\t\t\t}\n\n\t\t\tif (!searchValue.global) {\n\t\t\t\tthrow new TypeError(\n\t\t\t\t\t'MagicString.prototype.replaceAll called with a non-global RegExp argument'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn this._replaceRegexp(searchValue, replacement);\n\t\t}\n\t}\n\n\tconst hasOwnProp = Object.prototype.hasOwnProperty;\n\n\tclass Bundle {\n\t\tconstructor(options = {}) {\n\t\t\tthis.intro = options.intro || '';\n\t\t\tthis.separator = options.separator !== undefined ? options.separator : '\\n';\n\t\t\tthis.sources = [];\n\t\t\tthis.uniqueSources = [];\n\t\t\tthis.uniqueSourceIndexByFilename = {};\n\t\t}\n\n\t\taddSource(source) {\n\t\t\tif (source instanceof MagicString) {\n\t\t\t\treturn this.addSource({\n\t\t\t\t\tcontent: source,\n\t\t\t\t\tfilename: source.filename,\n\t\t\t\t\tseparator: this.separator,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (!isObject(source) || !source.content) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t'bundle.addSource() takes an object with a `content` property, which should be an instance of MagicString, and an optional `filename`'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t['filename', 'indentExclusionRanges', 'separator'].forEach((option) => {\n\t\t\t\tif (!hasOwnProp.call(source, option)) source[option] = source.content[option];\n\t\t\t});\n\n\t\t\tif (source.separator === undefined) {\n\t\t\t\t// TODO there's a bunch of this sort of thing, needs cleaning up\n\t\t\t\tsource.separator = this.separator;\n\t\t\t}\n\n\t\t\tif (source.filename) {\n\t\t\t\tif (!hasOwnProp.call(this.uniqueSourceIndexByFilename, source.filename)) {\n\t\t\t\t\tthis.uniqueSourceIndexByFilename[source.filename] = this.uniqueSources.length;\n\t\t\t\t\tthis.uniqueSources.push({ filename: source.filename, content: source.content.original });\n\t\t\t\t} else {\n\t\t\t\t\tconst uniqueSource = this.uniqueSources[this.uniqueSourceIndexByFilename[source.filename]];\n\t\t\t\t\tif (source.content.original !== uniqueSource.content) {\n\t\t\t\t\t\tthrow new Error(`Illegal source: same filename (${source.filename}), different contents`);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.sources.push(source);\n\t\t\treturn this;\n\t\t}\n\n\t\tappend(str, options) {\n\t\t\tthis.addSource({\n\t\t\t\tcontent: new MagicString(str),\n\t\t\t\tseparator: (options && options.separator) || '',\n\t\t\t});\n\n\t\t\treturn this;\n\t\t}\n\n\t\tclone() {\n\t\t\tconst bundle = new Bundle({\n\t\t\t\tintro: this.intro,\n\t\t\t\tseparator: this.separator,\n\t\t\t});\n\n\t\t\tthis.sources.forEach((source) => {\n\t\t\t\tbundle.addSource({\n\t\t\t\t\tfilename: source.filename,\n\t\t\t\t\tcontent: source.content.clone(),\n\t\t\t\t\tseparator: source.separator,\n\t\t\t\t});\n\t\t\t});\n\n\t\t\treturn bundle;\n\t\t}\n\n\t\tgenerateDecodedMap(options = {}) {\n\t\t\tconst names = [];\n\t\t\tthis.sources.forEach((source) => {\n\t\t\t\tObject.keys(source.content.storedNames).forEach((name) => {\n\t\t\t\t\tif (!~names.indexOf(name)) names.push(name);\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tconst mappings = new Mappings(options.hires);\n\n\t\t\tif (this.intro) {\n\t\t\t\tmappings.advance(this.intro);\n\t\t\t}\n\n\t\t\tthis.sources.forEach((source, i) => {\n\t\t\t\tif (i > 0) {\n\t\t\t\t\tmappings.advance(this.separator);\n\t\t\t\t}\n\n\t\t\t\tconst sourceIndex = source.filename ? this.uniqueSourceIndexByFilename[source.filename] : -1;\n\t\t\t\tconst magicString = source.content;\n\t\t\t\tconst locate = getLocator(magicString.original);\n\n\t\t\t\tif (magicString.intro) {\n\t\t\t\t\tmappings.advance(magicString.intro);\n\t\t\t\t}\n\n\t\t\t\tmagicString.firstChunk.eachNext((chunk) => {\n\t\t\t\t\tconst loc = locate(chunk.start);\n\n\t\t\t\t\tif (chunk.intro.length) mappings.advance(chunk.intro);\n\n\t\t\t\t\tif (source.filename) {\n\t\t\t\t\t\tif (chunk.edited) {\n\t\t\t\t\t\t\tmappings.addEdit(\n\t\t\t\t\t\t\t\tsourceIndex,\n\t\t\t\t\t\t\t\tchunk.content,\n\t\t\t\t\t\t\t\tloc,\n\t\t\t\t\t\t\t\tchunk.storeName ? names.indexOf(chunk.original) : -1\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tmappings.addUneditedChunk(\n\t\t\t\t\t\t\t\tsourceIndex,\n\t\t\t\t\t\t\t\tchunk,\n\t\t\t\t\t\t\t\tmagicString.original,\n\t\t\t\t\t\t\t\tloc,\n\t\t\t\t\t\t\t\tmagicString.sourcemapLocations\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmappings.advance(chunk.content);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (chunk.outro.length) mappings.advance(chunk.outro);\n\t\t\t\t});\n\n\t\t\t\tif (magicString.outro) {\n\t\t\t\t\tmappings.advance(magicString.outro);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn {\n\t\t\t\tfile: options.file ? options.file.split(/[/\\\\]/).pop() : null,\n\t\t\t\tsources: this.uniqueSources.map((source) => {\n\t\t\t\t\treturn options.file ? getRelativePath(options.file, source.filename) : source.filename;\n\t\t\t\t}),\n\t\t\t\tsourcesContent: this.uniqueSources.map((source) => {\n\t\t\t\t\treturn options.includeContent ? source.content : null;\n\t\t\t\t}),\n\t\t\t\tnames,\n\t\t\t\tmappings: mappings.raw,\n\t\t\t};\n\t\t}\n\n\t\tgenerateMap(options) {\n\t\t\treturn new SourceMap(this.generateDecodedMap(options));\n\t\t}\n\n\t\tgetIndentString() {\n\t\t\tconst indentStringCounts = {};\n\n\t\t\tthis.sources.forEach((source) => {\n\t\t\t\tconst indentStr = source.content._getRawIndentString();\n\n\t\t\t\tif (indentStr === null) return;\n\n\t\t\t\tif (!indentStringCounts[indentStr]) indentStringCounts[indentStr] = 0;\n\t\t\t\tindentStringCounts[indentStr] += 1;\n\t\t\t});\n\n\t\t\treturn (\n\t\t\t\tObject.keys(indentStringCounts).sort((a, b) => {\n\t\t\t\t\treturn indentStringCounts[a] - indentStringCounts[b];\n\t\t\t\t})[0] || '\\t'\n\t\t\t);\n\t\t}\n\n\t\tindent(indentStr) {\n\t\t\tif (!arguments.length) {\n\t\t\t\tindentStr = this.getIndentString();\n\t\t\t}\n\n\t\t\tif (indentStr === '') return this; // noop\n\n\t\t\tlet trailingNewline = !this.intro || this.intro.slice(-1) === '\\n';\n\n\t\t\tthis.sources.forEach((source, i) => {\n\t\t\t\tconst separator = source.separator !== undefined ? source.separator : this.separator;\n\t\t\t\tconst indentStart = trailingNewline || (i > 0 && /\\r?\\n$/.test(separator));\n\n\t\t\t\tsource.content.indent(indentStr, {\n\t\t\t\t\texclude: source.indentExclusionRanges,\n\t\t\t\t\tindentStart, //: trailingNewline || /\\r?\\n$/.test( separator )  //true///\\r?\\n/.test( separator )\n\t\t\t\t});\n\n\t\t\t\ttrailingNewline = source.content.lastChar() === '\\n';\n\t\t\t});\n\n\t\t\tif (this.intro) {\n\t\t\t\tthis.intro =\n\t\t\t\t\tindentStr +\n\t\t\t\t\tthis.intro.replace(/^[^\\n]/gm, (match, index) => {\n\t\t\t\t\t\treturn index > 0 ? indentStr + match : match;\n\t\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn this;\n\t\t}\n\n\t\tprepend(str) {\n\t\t\tthis.intro = str + this.intro;\n\t\t\treturn this;\n\t\t}\n\n\t\ttoString() {\n\t\t\tconst body = this.sources\n\t\t\t\t.map((source, i) => {\n\t\t\t\t\tconst separator = source.separator !== undefined ? source.separator : this.separator;\n\t\t\t\t\tconst str = (i > 0 ? separator : '') + source.content.toString();\n\n\t\t\t\t\treturn str;\n\t\t\t\t})\n\t\t\t\t.join('');\n\n\t\t\treturn this.intro + body;\n\t\t}\n\n\t\tisEmpty() {\n\t\t\tif (this.intro.length && this.intro.trim()) return false;\n\t\t\tif (this.sources.some((source) => !source.content.isEmpty())) return false;\n\t\t\treturn true;\n\t\t}\n\n\t\tlength() {\n\t\t\treturn this.sources.reduce(\n\t\t\t\t(length, source) => length + source.content.length(),\n\t\t\t\tthis.intro.length\n\t\t\t);\n\t\t}\n\n\t\ttrimLines() {\n\t\t\treturn this.trim('[\\\\r\\\\n]');\n\t\t}\n\n\t\ttrim(charType) {\n\t\t\treturn this.trimStart(charType).trimEnd(charType);\n\t\t}\n\n\t\ttrimStart(charType) {\n\t\t\tconst rx = new RegExp('^' + (charType || '\\\\s') + '+');\n\t\t\tthis.intro = this.intro.replace(rx, '');\n\n\t\t\tif (!this.intro) {\n\t\t\t\tlet source;\n\t\t\t\tlet i = 0;\n\n\t\t\t\tdo {\n\t\t\t\t\tsource = this.sources[i++];\n\t\t\t\t\tif (!source) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t} while (!source.content.trimStartAborted(charType));\n\t\t\t}\n\n\t\t\treturn this;\n\t\t}\n\n\t\ttrimEnd(charType) {\n\t\t\tconst rx = new RegExp((charType || '\\\\s') + '+$');\n\n\t\t\tlet source;\n\t\t\tlet i = this.sources.length - 1;\n\n\t\t\tdo {\n\t\t\t\tsource = this.sources[i--];\n\t\t\t\tif (!source) {\n\t\t\t\t\tthis.intro = this.intro.replace(rx, '');\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} while (!source.content.trimEndAborted(charType));\n\n\t\t\treturn this;\n\t\t}\n\t}\n\n\tMagicString.Bundle = Bundle;\n\tMagicString.SourceMap = SourceMap;\n\tMagicString.default = MagicString; // work around TypeScript bug https://github.com/Rich-Harris/magic-string/pull/121\n\n\treturn MagicString;\n\n}));\n//# sourceMappingURL=magic-string.umd.js.map\n/dist/magic-string.es.mjs.map\u0000\u0001Z\u0015{\"version\":3,\"file\":\"magic-string.es.mjs\",\"sources\":[\"../src/BitSet.js\",\"../src/Chunk.js\",\"../src/SourceMap.js\",\"../src/utils/guessIndent.js\",\"../src/utils/getRelativePath.js\",\"../src/utils/isObject.js\",\"../src/utils/getLocator.js\",\"../src/utils/Mappings.js\",\"../src/MagicString.js\",\"../src/Bundle.js\"],\"sourcesContent\":[\"export default class BitSet {\\n\\tconstructor(arg) {\\n\\t\\tthis.bits = arg instanceof BitSet ? arg.bits.slice() : [];\\n\\t}\\n\\n\\tadd(n) {\\n\\t\\tthis.bits[n >> 5] |= 1 << (n & 31);\\n\\t}\\n\\n\\thas(n) {\\n\\t\\treturn !!(this.bits[n >> 5] & (1 << (n & 31)));\\n\\t}\\n}\\n\",\"export default class Chunk {\\n\\tconstructor(start, end, content) {\\n\\t\\tthis.start = start;\\n\\t\\tthis.end = end;\\n\\t\\tthis.original = content;\\n\\n\\t\\tthis.intro = '';\\n\\t\\tthis.outro = '';\\n\\n\\t\\tthis.content = content;\\n\\t\\tthis.storeName = false;\\n\\t\\tthis.edited = false;\\n\\n\\t\\tif (DEBUG) {\\n\\t\\t\\t// we make these non-enumerable, for sanity while debugging\\n\\t\\t\\tObject.defineProperties(this, {\\n\\t\\t\\t\\tprevious: { writable: true, value: null },\\n\\t\\t\\t\\tnext: { writable: true, value: null },\\n\\t\\t\\t});\\n\\t\\t} else {\\n\\t\\t\\tthis.previous = null;\\n\\t\\t\\tthis.next = null;\\n\\t\\t}\\n\\t}\\n\\n\\tappendLeft(content) {\\n\\t\\tthis.outro += content;\\n\\t}\\n\\n\\tappendRight(content) {\\n\\t\\tthis.intro = this.intro + content;\\n\\t}\\n\\n\\tclone() {\\n\\t\\tconst chunk = new Chunk(this.start, this.end, this.original);\\n\\n\\t\\tchunk.intro = this.intro;\\n\\t\\tchunk.outro = this.outro;\\n\\t\\tchunk.content = this.content;\\n\\t\\tchunk.storeName = this.storeName;\\n\\t\\tchunk.edited = this.edited;\\n\\n\\t\\treturn chunk;\\n\\t}\\n\\n\\tcontains(index) {\\n\\t\\treturn this.start < index && index < this.end;\\n\\t}\\n\\n\\teachNext(fn) {\\n\\t\\tlet chunk = this;\\n\\t\\twhile (chunk) {\\n\\t\\t\\tfn(chunk);\\n\\t\\t\\tchunk = chunk.next;\\n\\t\\t}\\n\\t}\\n\\n\\teachPrevious(fn) {\\n\\t\\tlet chunk = this;\\n\\t\\twhile (chunk) {\\n\\t\\t\\tfn(chunk);\\n\\t\\t\\tchunk = chunk.previous;\\n\\t\\t}\\n\\t}\\n\\n\\tedit(content, storeName, contentOnly) {\\n\\t\\tthis.content = content;\\n\\t\\tif (!contentOnly) {\\n\\t\\t\\tthis.intro = '';\\n\\t\\t\\tthis.outro = '';\\n\\t\\t}\\n\\t\\tthis.storeName = storeName;\\n\\n\\t\\tthis.edited = true;\\n\\n\\t\\treturn this;\\n\\t}\\n\\n\\tprependLeft(content) {\\n\\t\\tthis.outro = content + this.outro;\\n\\t}\\n\\n\\tprependRight(content) {\\n\\t\\tthis.intro = content + this.intro;\\n\\t}\\n\\n\\tsplit(index) {\\n\\t\\tconst sliceIndex = index - this.start;\\n\\n\\t\\tconst originalBefore = this.original.slice(0, sliceIndex);\\n\\t\\tconst originalAfter = this.original.slice(sliceIndex);\\n\\n\\t\\tthis.original = originalBefore;\\n\\n\\t\\tconst newChunk = new Chunk(index, this.end, originalAfter);\\n\\t\\tnewChunk.outro = this.outro;\\n\\t\\tthis.outro = '';\\n\\n\\t\\tthis.end = index;\\n\\n\\t\\tif (this.edited) {\\n\\t\\t\\t// TODO is this block necessary?...\\n\\t\\t\\tnewChunk.edit('', false);\\n\\t\\t\\tthis.content = '';\\n\\t\\t} else {\\n\\t\\t\\tthis.content = originalBefore;\\n\\t\\t}\\n\\n\\t\\tnewChunk.next = this.next;\\n\\t\\tif (newChunk.next) newChunk.next.previous = newChunk;\\n\\t\\tnewChunk.previous = this;\\n\\t\\tthis.next = newChunk;\\n\\n\\t\\treturn newChunk;\\n\\t}\\n\\n\\ttoString() {\\n\\t\\treturn this.intro + this.content + this.outro;\\n\\t}\\n\\n\\ttrimEnd(rx) {\\n\\t\\tthis.outro = this.outro.replace(rx, '');\\n\\t\\tif (this.outro.length) return true;\\n\\n\\t\\tconst trimmed = this.content.replace(rx, '');\\n\\n\\t\\tif (trimmed.length) {\\n\\t\\t\\tif (trimmed !== this.content) {\\n\\t\\t\\t\\tthis.split(this.start + trimmed.length).edit('', undefined, true);\\n\\t\\t\\t}\\n\\t\\t\\treturn true;\\n\\t\\t} else {\\n\\t\\t\\tthis.edit('', undefined, true);\\n\\n\\t\\t\\tthis.intro = this.intro.replace(rx, '');\\n\\t\\t\\tif (this.intro.length) return true;\\n\\t\\t}\\n\\t}\\n\\n\\ttrimStart(rx) {\\n\\t\\tthis.intro = this.intro.replace(rx, '');\\n\\t\\tif (this.intro.length) return true;\\n\\n\\t\\tconst trimmed = this.content.replace(rx, '');\\n\\n\\t\\tif (trimmed.length) {\\n\\t\\t\\tif (trimmed !== this.content) {\\n\\t\\t\\t\\tthis.split(this.end - trimmed.length);\\n\\t\\t\\t\\tthis.edit('', undefined, true);\\n\\t\\t\\t}\\n\\t\\t\\treturn true;\\n\\t\\t} else {\\n\\t\\t\\tthis.edit('', undefined, true);\\n\\n\\t\\t\\tthis.outro = this.outro.replace(rx, '');\\n\\t\\t\\tif (this.outro.length) return true;\\n\\t\\t}\\n\\t}\\n}\\n\",\"import { encode } from '@jridgewell/sourcemap-codec';\\n\\nfunction getBtoa () {\\n\\tif (typeof window !== 'undefined' && typeof window.btoa === 'function') {\\n\\t\\treturn (str) => window.btoa(unescape(encodeURIComponent(str)));\\n\\t} else if (typeof Buffer === 'function') {\\n\\t\\treturn (str) => Buffer.from(str, 'utf-8').toString('base64');\\n\\t} else {\\n\\t\\treturn () => {\\n\\t\\t\\tthrow new Error('Unsupported environment: `window.btoa` or `Buffer` should be supported.');\\n\\t\\t};\\n\\t}\\n}\\n\\nconst btoa = /*#__PURE__*/ getBtoa();\\n\\nexport default class SourceMap {\\n\\tconstructor(properties) {\\n\\t\\tthis.version = 3;\\n\\t\\tthis.file = properties.file;\\n\\t\\tthis.sources = properties.sources;\\n\\t\\tthis.sourcesContent = properties.sourcesContent;\\n\\t\\tthis.names = properties.names;\\n\\t\\tthis.mappings = encode(properties.mappings);\\n\\t\\tif (typeof properties.x_google_ignoreList !== 'undefined') {\\n\\t\\t\\tthis.x_google_ignoreList = properties.x_google_ignoreList;\\n\\t\\t}\\n\\t}\\n\\n\\ttoString() {\\n\\t\\treturn JSON.stringify(this);\\n\\t}\\n\\n\\ttoUrl() {\\n\\t\\treturn 'data:application/json;charset=utf-8;base64,' + btoa(this.toString());\\n\\t}\\n}\\n\",\"export default function guessIndent(code) {\\n\\tconst lines = code.split('\\\\n');\\n\\n\\tconst tabbed = lines.filter((line) => /^\\\\t+/.test(line));\\n\\tconst spaced = lines.filter((line) => /^ {2,}/.test(line));\\n\\n\\tif (tabbed.length === 0 && spaced.length === 0) {\\n\\t\\treturn null;\\n\\t}\\n\\n\\t// More lines tabbed than spaced? Assume tabs, and\\n\\t// default to tabs in the case of a tie (or nothing\\n\\t// to go on)\\n\\tif (tabbed.length >= spaced.length) {\\n\\t\\treturn '\\\\t';\\n\\t}\\n\\n\\t// Otherwise, we need to guess the multiple\\n\\tconst min = spaced.reduce((previous, current) => {\\n\\t\\tconst numSpaces = /^ +/.exec(current)[0].length;\\n\\t\\treturn Math.min(numSpaces, previous);\\n\\t}, Infinity);\\n\\n\\treturn new Array(min + 1).join(' ');\\n}\\n\",\"export default function getRelativePath(from, to) {\\n\\tconst fromParts = from.split(/[/\\\\\\\\]/);\\n\\tconst toParts = to.split(/[/\\\\\\\\]/);\\n\\n\\tfromParts.pop(); // get dirname\\n\\n\\twhile (fromParts[0] === toParts[0]) {\\n\\t\\tfromParts.shift();\\n\\t\\ttoParts.shift();\\n\\t}\\n\\n\\tif (fromParts.length) {\\n\\t\\tlet i = fromParts.length;\\n\\t\\twhile (i--) fromParts[i] = '..';\\n\\t}\\n\\n\\treturn fromParts.concat(toParts).join('/');\\n}\\n\",\"const toString = Object.prototype.toString;\\n\\nexport default function isObject(thing) {\\n\\treturn toString.call(thing) === '[object Object]';\\n}\\n\",\"export default function getLocator(source) {\\n\\tconst originalLines = source.split('\\\\n');\\n\\tconst lineOffsets = [];\\n\\n\\tfor (let i = 0, pos = 0; i < originalLines.length; i++) {\\n\\t\\tlineOffsets.push(pos);\\n\\t\\tpos += originalLines[i].length + 1;\\n\\t}\\n\\n\\treturn function locate(index) {\\n\\t\\tlet i = 0;\\n\\t\\tlet j = lineOffsets.length;\\n\\t\\twhile (i < j) {\\n\\t\\t\\tconst m = (i + j) >> 1;\\n\\t\\t\\tif (index < lineOffsets[m]) {\\n\\t\\t\\t\\tj = m;\\n\\t\\t\\t} else {\\n\\t\\t\\t\\ti = m + 1;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tconst line = i - 1;\\n\\t\\tconst column = index - lineOffsets[line];\\n\\t\\treturn { line, column };\\n\\t};\\n}\\n\",\"export default class Mappings {\\n\\tconstructor(hires) {\\n\\t\\tthis.hires = hires;\\n\\t\\tthis.generatedCodeLine = 0;\\n\\t\\tthis.generatedCodeColumn = 0;\\n\\t\\tthis.raw = [];\\n\\t\\tthis.rawSegments = this.raw[this.generatedCodeLine] = [];\\n\\t\\tthis.pending = null;\\n\\t}\\n\\n\\taddEdit(sourceIndex, content, loc, nameIndex) {\\n\\t\\tif (content.length) {\\n\\t\\t\\tconst segment = [this.generatedCodeColumn, sourceIndex, loc.line, loc.column];\\n\\t\\t\\tif (nameIndex >= 0) {\\n\\t\\t\\t\\tsegment.push(nameIndex);\\n\\t\\t\\t}\\n\\t\\t\\tthis.rawSegments.push(segment);\\n\\t\\t} else if (this.pending) {\\n\\t\\t\\tthis.rawSegments.push(this.pending);\\n\\t\\t}\\n\\n\\t\\tthis.advance(content);\\n\\t\\tthis.pending = null;\\n\\t}\\n\\n\\taddUneditedChunk(sourceIndex, chunk, original, loc, sourcemapLocations) {\\n\\t\\tlet originalCharIndex = chunk.start;\\n\\t\\tlet first = true;\\n\\n\\t\\twhile (originalCharIndex < chunk.end) {\\n\\t\\t\\tif (this.hires || first || sourcemapLocations.has(originalCharIndex)) {\\n\\t\\t\\t\\tthis.rawSegments.push([this.generatedCodeColumn, sourceIndex, loc.line, loc.column]);\\n\\t\\t\\t}\\n\\n\\t\\t\\tif (original[originalCharIndex] === '\\\\n') {\\n\\t\\t\\t\\tloc.line += 1;\\n\\t\\t\\t\\tloc.column = 0;\\n\\t\\t\\t\\tthis.generatedCodeLine += 1;\\n\\t\\t\\t\\tthis.raw[this.generatedCodeLine] = this.rawSegments = [];\\n\\t\\t\\t\\tthis.generatedCodeColumn = 0;\\n\\t\\t\\t\\tfirst = true;\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tloc.column += 1;\\n\\t\\t\\t\\tthis.generatedCodeColumn += 1;\\n\\t\\t\\t\\tfirst = false;\\n\\t\\t\\t}\\n\\n\\t\\t\\toriginalCharIndex += 1;\\n\\t\\t}\\n\\n\\t\\tthis.pending = null;\\n\\t}\\n\\n\\tadvance(str) {\\n\\t\\tif (!str) return;\\n\\n\\t\\tconst lines = str.split('\\\\n');\\n\\n\\t\\tif (lines.length > 1) {\\n\\t\\t\\tfor (let i = 0; i < lines.length - 1; i++) {\\n\\t\\t\\t\\tthis.generatedCodeLine++;\\n\\t\\t\\t\\tthis.raw[this.generatedCodeLine] = this.rawSegments = [];\\n\\t\\t\\t}\\n\\t\\t\\tthis.generatedCodeColumn = 0;\\n\\t\\t}\\n\\n\\t\\tthis.generatedCodeColumn += lines[lines.length - 1].length;\\n\\t}\\n}\\n\",\"import BitSet from './BitSet.js';\\nimport Chunk from './Chunk.js';\\nimport SourceMap from './SourceMap.js';\\nimport guessIndent from './utils/guessIndent.js';\\nimport getRelativePath from './utils/getRelativePath.js';\\nimport isObject from './utils/isObject.js';\\nimport getLocator from './utils/getLocator.js';\\nimport Mappings from './utils/Mappings.js';\\nimport Stats from './utils/Stats.js';\\n\\nconst n = '\\\\n';\\n\\nconst warned = {\\n\\tinsertLeft: false,\\n\\tinsertRight: false,\\n\\tstoreName: false,\\n};\\n\\nexport default class MagicString {\\n\\tconstructor(string, options = {}) {\\n\\t\\tconst chunk = new Chunk(0, string.length, string);\\n\\n\\t\\tObject.defineProperties(this, {\\n\\t\\t\\toriginal: { writable: true, value: string },\\n\\t\\t\\toutro: { writable: true, value: '' },\\n\\t\\t\\tintro: { writable: true, value: '' },\\n\\t\\t\\tfirstChunk: { writable: true, value: chunk },\\n\\t\\t\\tlastChunk: { writable: true, value: chunk },\\n\\t\\t\\tlastSearchedChunk: { writable: true, value: chunk },\\n\\t\\t\\tbyStart: { writable: true, value: {} },\\n\\t\\t\\tbyEnd: { writable: true, value: {} },\\n\\t\\t\\tfilename: { writable: true, value: options.filename },\\n\\t\\t\\tindentExclusionRanges: { writable: true, value: options.indentExclusionRanges },\\n\\t\\t\\tsourcemapLocations: { writable: true, value: new BitSet() },\\n\\t\\t\\tstoredNames: { writable: true, value: {} },\\n\\t\\t\\tindentStr: { writable: true, value: undefined },\\n\\t\\t});\\n\\n\\t\\tif (DEBUG) {\\n\\t\\t\\tObject.defineProperty(this, 'stats', { value: new Stats() });\\n\\t\\t}\\n\\n\\t\\tthis.byStart[0] = chunk;\\n\\t\\tthis.byEnd[string.length] = chunk;\\n\\t}\\n\\n\\taddSourcemapLocation(char) {\\n\\t\\tthis.sourcemapLocations.add(char);\\n\\t}\\n\\n\\tappend(content) {\\n\\t\\tif (typeof content !== 'string') throw new TypeError('outro content must be a string');\\n\\n\\t\\tthis.outro += content;\\n\\t\\treturn this;\\n\\t}\\n\\n\\tappendLeft(index, content) {\\n\\t\\tif (typeof content !== 'string') throw new TypeError('inserted content must be a string');\\n\\n\\t\\tif (DEBUG) this.stats.time('appendLeft');\\n\\n\\t\\tthis._split(index);\\n\\n\\t\\tconst chunk = this.byEnd[index];\\n\\n\\t\\tif (chunk) {\\n\\t\\t\\tchunk.appendLeft(content);\\n\\t\\t} else {\\n\\t\\t\\tthis.intro += content;\\n\\t\\t}\\n\\n\\t\\tif (DEBUG) this.stats.timeEnd('appendLeft');\\n\\t\\treturn this;\\n\\t}\\n\\n\\tappendRight(index, content) {\\n\\t\\tif (typeof content !== 'string') throw new TypeError('inserted content must be a string');\\n\\n\\t\\tif (DEBUG) this.stats.time('appendRight');\\n\\n\\t\\tthis._split(index);\\n\\n\\t\\tconst chunk = this.byStart[index];\\n\\n\\t\\tif (chunk) {\\n\\t\\t\\tchunk.appendRight(content);\\n\\t\\t} else {\\n\\t\\t\\tthis.outro += content;\\n\\t\\t}\\n\\n\\t\\tif (DEBUG) this.stats.timeEnd('appendRight');\\n\\t\\treturn this;\\n\\t}\\n\\n\\tclone() {\\n\\t\\tconst cloned = new MagicString(this.original, { filename: this.filename });\\n\\n\\t\\tlet originalChunk = this.firstChunk;\\n\\t\\tlet clonedChunk = (cloned.firstChunk = cloned.lastSearchedChunk = originalChunk.clone());\\n\\n\\t\\twhile (originalChunk) {\\n\\t\\t\\tcloned.byStart[clonedChunk.start] = clonedChunk;\\n\\t\\t\\tcloned.byEnd[clonedChunk.end] = clonedChunk;\\n\\n\\t\\t\\tconst nextOriginalChunk = originalChunk.next;\\n\\t\\t\\tconst nextClonedChunk = nextOriginalChunk && nextOriginalChunk.clone();\\n\\n\\t\\t\\tif (nextClonedChunk) {\\n\\t\\t\\t\\tclonedChunk.next = nextClonedChunk;\\n\\t\\t\\t\\tnextClonedChunk.previous = clonedChunk;\\n\\n\\t\\t\\t\\tclonedChunk = nextClonedChunk;\\n\\t\\t\\t}\\n\\n\\t\\t\\toriginalChunk = nextOriginalChunk;\\n\\t\\t}\\n\\n\\t\\tcloned.lastChunk = clonedChunk;\\n\\n\\t\\tif (this.indentExclusionRanges) {\\n\\t\\t\\tcloned.indentExclusionRanges = this.indentExclusionRanges.slice();\\n\\t\\t}\\n\\n\\t\\tcloned.sourcemapLocations = new BitSet(this.sourcemapLocations);\\n\\n\\t\\tcloned.intro = this.intro;\\n\\t\\tcloned.outro = this.outro;\\n\\n\\t\\treturn cloned;\\n\\t}\\n\\n\\tgenerateDecodedMap(options) {\\n\\t\\toptions = options || {};\\n\\n\\t\\tconst sourceIndex = 0;\\n\\t\\tconst names = Object.keys(this.storedNames);\\n\\t\\tconst mappings = new Mappings(options.hires);\\n\\n\\t\\tconst locate = getLocator(this.original);\\n\\n\\t\\tif (this.intro) {\\n\\t\\t\\tmappings.advance(this.intro);\\n\\t\\t}\\n\\n\\t\\tthis.firstChunk.eachNext((chunk) => {\\n\\t\\t\\tconst loc = locate(chunk.start);\\n\\n\\t\\t\\tif (chunk.intro.length) mappings.advance(chunk.intro);\\n\\n\\t\\t\\tif (chunk.edited) {\\n\\t\\t\\t\\tmappings.addEdit(\\n\\t\\t\\t\\t\\tsourceIndex,\\n\\t\\t\\t\\t\\tchunk.content,\\n\\t\\t\\t\\t\\tloc,\\n\\t\\t\\t\\t\\tchunk.storeName ? names.indexOf(chunk.original) : -1\\n\\t\\t\\t\\t);\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tmappings.addUneditedChunk(sourceIndex, chunk, this.original, loc, this.sourcemapLocations);\\n\\t\\t\\t}\\n\\n\\t\\t\\tif (chunk.outro.length) mappings.advance(chunk.outro);\\n\\t\\t});\\n\\n\\t\\treturn {\\n\\t\\t\\tfile: options.file ? options.file.split(/[/\\\\\\\\]/).pop() : null,\\n\\t\\t\\tsources: [options.source ? getRelativePath(options.file || '', options.source) : null],\\n\\t\\t\\tsourcesContent: options.includeContent ? [this.original] : [null],\\n\\t\\t\\tnames,\\n\\t\\t\\tmappings: mappings.raw,\\n\\t\\t};\\n\\t}\\n\\n\\tgenerateMap(options) {\\n\\t\\treturn new SourceMap(this.generateDecodedMap(options));\\n\\t}\\n\\n\\t_ensureindentStr() {\\n\\t\\tif (this.indentStr === undefined) {\\n\\t\\t\\tthis.indentStr = guessIndent(this.original);\\n\\t\\t}\\n\\t}\\n\\n\\t_getRawIndentString() {\\n\\t\\tthis._ensureindentStr();\\n\\t\\treturn this.indentStr;\\n\\t}\\n\\n\\tgetIndentString() {\\n\\t\\tthis._ensureindentStr();\\n\\t\\treturn this.indentStr === null ? '\\\\t' : this.indentStr;\\n\\t}\\n\\n\\tindent(indentStr, options) {\\n\\t\\tconst pattern = /^[^\\\\r\\\\n]/gm;\\n\\n\\t\\tif (isObject(indentStr)) {\\n\\t\\t\\toptions = indentStr;\\n\\t\\t\\tindentStr = undefined;\\n\\t\\t}\\n\\n\\t\\tif (indentStr === undefined) {\\n\\t\\t\\tthis._ensureindentStr();\\n\\t\\t\\tindentStr = this.indentStr || '\\\\t';\\n\\t\\t}\\n\\n\\t\\tif (indentStr === '') return this; // noop\\n\\n\\t\\toptions = options || {};\\n\\n\\t\\t// Process exclusion ranges\\n\\t\\tconst isExcluded = {};\\n\\n\\t\\tif (options.exclude) {\\n\\t\\t\\tconst exclusions =\\n\\t\\t\\t\\ttypeof options.exclude[0] === 'number' ? [options.exclude] : options.exclude;\\n\\t\\t\\texclusions.forEach((exclusion) => {\\n\\t\\t\\t\\tfor (let i = exclusion[0]; i < exclusion[1]; i += 1) {\\n\\t\\t\\t\\t\\tisExcluded[i] = true;\\n\\t\\t\\t\\t}\\n\\t\\t\\t});\\n\\t\\t}\\n\\n\\t\\tlet shouldIndentNextCharacter = options.indentStart !== false;\\n\\t\\tconst replacer = (match) => {\\n\\t\\t\\tif (shouldIndentNextCharacter) return `${indentStr}${match}`;\\n\\t\\t\\tshouldIndentNextCharacter = true;\\n\\t\\t\\treturn match;\\n\\t\\t};\\n\\n\\t\\tthis.intro = this.intro.replace(pattern, replacer);\\n\\n\\t\\tlet charIndex = 0;\\n\\t\\tlet chunk = this.firstChunk;\\n\\n\\t\\twhile (chunk) {\\n\\t\\t\\tconst end = chunk.end;\\n\\n\\t\\t\\tif (chunk.edited) {\\n\\t\\t\\t\\tif (!isExcluded[charIndex]) {\\n\\t\\t\\t\\t\\tchunk.content = chunk.content.replace(pattern, replacer);\\n\\n\\t\\t\\t\\t\\tif (chunk.content.length) {\\n\\t\\t\\t\\t\\t\\tshouldIndentNextCharacter = chunk.content[chunk.content.length - 1] === '\\\\n';\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tcharIndex = chunk.start;\\n\\n\\t\\t\\t\\twhile (charIndex < end) {\\n\\t\\t\\t\\t\\tif (!isExcluded[charIndex]) {\\n\\t\\t\\t\\t\\t\\tconst char = this.original[charIndex];\\n\\n\\t\\t\\t\\t\\t\\tif (char === '\\\\n') {\\n\\t\\t\\t\\t\\t\\t\\tshouldIndentNextCharacter = true;\\n\\t\\t\\t\\t\\t\\t} else if (char !== '\\\\r' && shouldIndentNextCharacter) {\\n\\t\\t\\t\\t\\t\\t\\tshouldIndentNextCharacter = false;\\n\\n\\t\\t\\t\\t\\t\\t\\tif (charIndex === chunk.start) {\\n\\t\\t\\t\\t\\t\\t\\t\\tchunk.prependRight(indentStr);\\n\\t\\t\\t\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\t\\t\\tthis._splitChunk(chunk, charIndex);\\n\\t\\t\\t\\t\\t\\t\\t\\tchunk = chunk.next;\\n\\t\\t\\t\\t\\t\\t\\t\\tchunk.prependRight(indentStr);\\n\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t\\tcharIndex += 1;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\n\\t\\t\\tcharIndex = chunk.end;\\n\\t\\t\\tchunk = chunk.next;\\n\\t\\t}\\n\\n\\t\\tthis.outro = this.outro.replace(pattern, replacer);\\n\\n\\t\\treturn this;\\n\\t}\\n\\n\\tinsert() {\\n\\t\\tthrow new Error(\\n\\t\\t\\t'magicString.insert(...) is deprecated. Use prependRight(...) or appendLeft(...)'\\n\\t\\t);\\n\\t}\\n\\n\\tinsertLeft(index, content) {\\n\\t\\tif (!warned.insertLeft) {\\n\\t\\t\\tconsole.warn(\\n\\t\\t\\t\\t'magicString.insertLeft(...) is deprecated. Use magicString.appendLeft(...) instead'\\n\\t\\t\\t); // eslint-disable-line no-console\\n\\t\\t\\twarned.insertLeft = true;\\n\\t\\t}\\n\\n\\t\\treturn this.appendLeft(index, content);\\n\\t}\\n\\n\\tinsertRight(index, content) {\\n\\t\\tif (!warned.insertRight) {\\n\\t\\t\\tconsole.warn(\\n\\t\\t\\t\\t'magicString.insertRight(...) is deprecated. Use magicString.prependRight(...) instead'\\n\\t\\t\\t); // eslint-disable-line no-console\\n\\t\\t\\twarned.insertRight = true;\\n\\t\\t}\\n\\n\\t\\treturn this.prependRight(index, content);\\n\\t}\\n\\n\\tmove(start, end, index) {\\n\\t\\tif (index >= start && index <= end) throw new Error('Cannot move a selection inside itself');\\n\\n\\t\\tif (DEBUG) this.stats.time('move');\\n\\n\\t\\tthis._split(start);\\n\\t\\tthis._split(end);\\n\\t\\tthis._split(index);\\n\\n\\t\\tconst first = this.byStart[start];\\n\\t\\tconst last = this.byEnd[end];\\n\\n\\t\\tconst oldLeft = first.previous;\\n\\t\\tconst oldRight = last.next;\\n\\n\\t\\tconst newRight = this.byStart[index];\\n\\t\\tif (!newRight && last === this.lastChunk) return this;\\n\\t\\tconst newLeft = newRight ? newRight.previous : this.lastChunk;\\n\\n\\t\\tif (oldLeft) oldLeft.next = oldRight;\\n\\t\\tif (oldRight) oldRight.previous = oldLeft;\\n\\n\\t\\tif (newLeft) newLeft.next = first;\\n\\t\\tif (newRight) newRight.previous = last;\\n\\n\\t\\tif (!first.previous) this.firstChunk = last.next;\\n\\t\\tif (!last.next) {\\n\\t\\t\\tthis.lastChunk = first.previous;\\n\\t\\t\\tthis.lastChunk.next = null;\\n\\t\\t}\\n\\n\\t\\tfirst.previous = newLeft;\\n\\t\\tlast.next = newRight || null;\\n\\n\\t\\tif (!newLeft) this.firstChunk = first;\\n\\t\\tif (!newRight) this.lastChunk = last;\\n\\n\\t\\tif (DEBUG) this.stats.timeEnd('move');\\n\\t\\treturn this;\\n\\t}\\n\\n\\toverwrite(start, end, content, options) {\\n\\t\\toptions = options || {};\\n\\t\\treturn this.update(start, end, content, { ...options, overwrite: !options.contentOnly });\\n\\t}\\n\\n\\tupdate(start, end, content, options) {\\n\\t\\tif (typeof content !== 'string') throw new TypeError('replacement content must be a string');\\n\\n\\t\\twhile (start < 0) start += this.original.length;\\n\\t\\twhile (end < 0) end += this.original.length;\\n\\n\\t\\tif (end > this.original.length) throw new Error('end is out of bounds');\\n\\t\\tif (start === end)\\n\\t\\t\\tthrow new Error(\\n\\t\\t\\t\\t'Cannot overwrite a zero-length range – use appendLeft or prependRight instead'\\n\\t\\t\\t);\\n\\n\\t\\tif (DEBUG) this.stats.time('overwrite');\\n\\n\\t\\tthis._split(start);\\n\\t\\tthis._split(end);\\n\\n\\t\\tif (options === true) {\\n\\t\\t\\tif (!warned.storeName) {\\n\\t\\t\\t\\tconsole.warn(\\n\\t\\t\\t\\t\\t'The final argument to magicString.overwrite(...) should be an options object. See https://github.com/rich-harris/magic-string'\\n\\t\\t\\t\\t); // eslint-disable-line no-console\\n\\t\\t\\t\\twarned.storeName = true;\\n\\t\\t\\t}\\n\\n\\t\\t\\toptions = { storeName: true };\\n\\t\\t}\\n\\t\\tconst storeName = options !== undefined ? options.storeName : false;\\n\\t\\tconst overwrite = options !== undefined ? options.overwrite : false;\\n\\n\\t\\tif (storeName) {\\n\\t\\t\\tconst original = this.original.slice(start, end);\\n\\t\\t\\tObject.defineProperty(this.storedNames, original, {\\n\\t\\t\\t\\twritable: true,\\n\\t\\t\\t\\tvalue: true,\\n\\t\\t\\t\\tenumerable: true,\\n\\t\\t\\t});\\n\\t\\t}\\n\\n\\t\\tconst first = this.byStart[start];\\n\\t\\tconst last = this.byEnd[end];\\n\\n\\t\\tif (first) {\\n\\t\\t\\tlet chunk = first;\\n\\t\\t\\twhile (chunk !== last) {\\n\\t\\t\\t\\tif (chunk.next !== this.byStart[chunk.end]) {\\n\\t\\t\\t\\t\\tthrow new Error('Cannot overwrite across a split point');\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tchunk = chunk.next;\\n\\t\\t\\t\\tchunk.edit('', false);\\n\\t\\t\\t}\\n\\n\\t\\t\\tfirst.edit(content, storeName, !overwrite);\\n\\t\\t} else {\\n\\t\\t\\t// must be inserting at the end\\n\\t\\t\\tconst newChunk = new Chunk(start, end, '').edit(content, storeName);\\n\\n\\t\\t\\t// TODO last chunk in the array may not be the last chunk, if it's moved...\\n\\t\\t\\tlast.next = newChunk;\\n\\t\\t\\tnewChunk.previous = last;\\n\\t\\t}\\n\\n\\t\\tif (DEBUG) this.stats.timeEnd('overwrite');\\n\\t\\treturn this;\\n\\t}\\n\\n\\tprepend(content) {\\n\\t\\tif (typeof content !== 'string') throw new TypeError('outro content must be a string');\\n\\n\\t\\tthis.intro = content + this.intro;\\n\\t\\treturn this;\\n\\t}\\n\\n\\tprependLeft(index, content) {\\n\\t\\tif (typeof content !== 'string') throw new TypeError('inserted content must be a string');\\n\\n\\t\\tif (DEBUG) this.stats.time('insertRight');\\n\\n\\t\\tthis._split(index);\\n\\n\\t\\tconst chunk = this.byEnd[index];\\n\\n\\t\\tif (chunk) {\\n\\t\\t\\tchunk.prependLeft(content);\\n\\t\\t} else {\\n\\t\\t\\tthis.intro = content + this.intro;\\n\\t\\t}\\n\\n\\t\\tif (DEBUG) this.stats.timeEnd('insertRight');\\n\\t\\treturn this;\\n\\t}\\n\\n\\tprependRight(index, content) {\\n\\t\\tif (typeof content !== 'string') throw new TypeError('inserted content must be a string');\\n\\n\\t\\tif (DEBUG) this.stats.time('insertRight');\\n\\n\\t\\tthis._split(index);\\n\\n\\t\\tconst chunk = this.byStart[index];\\n\\n\\t\\tif (chunk) {\\n\\t\\t\\tchunk.prependRight(content);\\n\\t\\t} else {\\n\\t\\t\\tthis.outro = content + this.outro;\\n\\t\\t}\\n\\n\\t\\tif (DEBUG) this.stats.timeEnd('insertRight');\\n\\t\\treturn this;\\n\\t}\\n\\n\\tremove(start, end) {\\n\\t\\twhile (start < 0) start += this.original.length;\\n\\t\\twhile (end < 0) end += this.original.length;\\n\\n\\t\\tif (start === end) return this;\\n\\n\\t\\tif (start < 0 || end > this.original.length) throw new Error('Character is out of bounds');\\n\\t\\tif (start > end) throw new Error('end must be greater than start');\\n\\n\\t\\tif (DEBUG) this.stats.time('remove');\\n\\n\\t\\tthis._split(start);\\n\\t\\tthis._split(end);\\n\\n\\t\\tlet chunk = this.byStart[start];\\n\\n\\t\\twhile (chunk) {\\n\\t\\t\\tchunk.intro = '';\\n\\t\\t\\tchunk.outro = '';\\n\\t\\t\\tchunk.edit('');\\n\\n\\t\\t\\tchunk = end > chunk.end ? this.byStart[chunk.end] : null;\\n\\t\\t}\\n\\n\\t\\tif (DEBUG) this.stats.timeEnd('remove');\\n\\t\\treturn this;\\n\\t}\\n\\n\\tlastChar() {\\n\\t\\tif (this.outro.length) return this.outro[this.outro.length - 1];\\n\\t\\tlet chunk = this.lastChunk;\\n\\t\\tdo {\\n\\t\\t\\tif (chunk.outro.length) return chunk.outro[chunk.outro.length - 1];\\n\\t\\t\\tif (chunk.content.length) return chunk.content[chunk.content.length - 1];\\n\\t\\t\\tif (chunk.intro.length) return chunk.intro[chunk.intro.length - 1];\\n\\t\\t} while ((chunk = chunk.previous));\\n\\t\\tif (this.intro.length) return this.intro[this.intro.length - 1];\\n\\t\\treturn '';\\n\\t}\\n\\n\\tlastLine() {\\n\\t\\tlet lineIndex = this.outro.lastIndexOf(n);\\n\\t\\tif (lineIndex !== -1) return this.outro.substr(lineIndex + 1);\\n\\t\\tlet lineStr = this.outro;\\n\\t\\tlet chunk = this.lastChunk;\\n\\t\\tdo {\\n\\t\\t\\tif (chunk.outro.length > 0) {\\n\\t\\t\\t\\tlineIndex = chunk.outro.lastIndexOf(n);\\n\\t\\t\\t\\tif (lineIndex !== -1) return chunk.outro.substr(lineIndex + 1) + lineStr;\\n\\t\\t\\t\\tlineStr = chunk.outro + lineStr;\\n\\t\\t\\t}\\n\\n\\t\\t\\tif (chunk.content.length > 0) {\\n\\t\\t\\t\\tlineIndex = chunk.content.lastIndexOf(n);\\n\\t\\t\\t\\tif (lineIndex !== -1) return chunk.content.substr(lineIndex + 1) + lineStr;\\n\\t\\t\\t\\tlineStr = chunk.content + lineStr;\\n\\t\\t\\t}\\n\\n\\t\\t\\tif (chunk.intro.length > 0) {\\n\\t\\t\\t\\tlineIndex = chunk.intro.lastIndexOf(n);\\n\\t\\t\\t\\tif (lineIndex !== -1) return chunk.intro.substr(lineIndex + 1) + lineStr;\\n\\t\\t\\t\\tlineStr = chunk.intro + lineStr;\\n\\t\\t\\t}\\n\\t\\t} while ((chunk = chunk.previous));\\n\\t\\tlineIndex = this.intro.lastIndexOf(n);\\n\\t\\tif (lineIndex !== -1) return this.intro.substr(lineIndex + 1) + lineStr;\\n\\t\\treturn this.intro + lineStr;\\n\\t}\\n\\n\\tslice(start = 0, end = this.original.length) {\\n\\t\\twhile (start < 0) start += this.original.length;\\n\\t\\twhile (end < 0) end += this.original.length;\\n\\n\\t\\tlet result = '';\\n\\n\\t\\t// find start chunk\\n\\t\\tlet chunk = this.firstChunk;\\n\\t\\twhile (chunk && (chunk.start > start || chunk.end <= start)) {\\n\\t\\t\\t// found end chunk before start\\n\\t\\t\\tif (chunk.start < end && chunk.end >= end) {\\n\\t\\t\\t\\treturn result;\\n\\t\\t\\t}\\n\\n\\t\\t\\tchunk = chunk.next;\\n\\t\\t}\\n\\n\\t\\tif (chunk && chunk.edited && chunk.start !== start)\\n\\t\\t\\tthrow new Error(`Cannot use replaced character ${start} as slice start anchor.`);\\n\\n\\t\\tconst startChunk = chunk;\\n\\t\\twhile (chunk) {\\n\\t\\t\\tif (chunk.intro && (startChunk !== chunk || chunk.start === start)) {\\n\\t\\t\\t\\tresult += chunk.intro;\\n\\t\\t\\t}\\n\\n\\t\\t\\tconst containsEnd = chunk.start < end && chunk.end >= end;\\n\\t\\t\\tif (containsEnd && chunk.edited && chunk.end !== end)\\n\\t\\t\\t\\tthrow new Error(`Cannot use replaced character ${end} as slice end anchor.`);\\n\\n\\t\\t\\tconst sliceStart = startChunk === chunk ? start - chunk.start : 0;\\n\\t\\t\\tconst sliceEnd = containsEnd ? chunk.content.length + end - chunk.end : chunk.content.length;\\n\\n\\t\\t\\tresult += chunk.content.slice(sliceStart, sliceEnd);\\n\\n\\t\\t\\tif (chunk.outro && (!containsEnd || chunk.end === end)) {\\n\\t\\t\\t\\tresult += chunk.outro;\\n\\t\\t\\t}\\n\\n\\t\\t\\tif (containsEnd) {\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\t}\\n\\n\\t\\t\\tchunk = chunk.next;\\n\\t\\t}\\n\\n\\t\\treturn result;\\n\\t}\\n\\n\\t// TODO deprecate this? not really very useful\\n\\tsnip(start, end) {\\n\\t\\tconst clone = this.clone();\\n\\t\\tclone.remove(0, start);\\n\\t\\tclone.remove(end, clone.original.length);\\n\\n\\t\\treturn clone;\\n\\t}\\n\\n\\t_split(index) {\\n\\t\\tif (this.byStart[index] || this.byEnd[index]) return;\\n\\n\\t\\tif (DEBUG) this.stats.time('_split');\\n\\n\\t\\tlet chunk = this.lastSearchedChunk;\\n\\t\\tconst searchForward = index > chunk.end;\\n\\n\\t\\twhile (chunk) {\\n\\t\\t\\tif (chunk.contains(index)) return this._splitChunk(chunk, index);\\n\\n\\t\\t\\tchunk = searchForward ? this.byStart[chunk.end] : this.byEnd[chunk.start];\\n\\t\\t}\\n\\t}\\n\\n\\t_splitChunk(chunk, index) {\\n\\t\\tif (chunk.edited && chunk.content.length) {\\n\\t\\t\\t// zero-length edited chunks are a special case (overlapping replacements)\\n\\t\\t\\tconst loc = getLocator(this.original)(index);\\n\\t\\t\\tthrow new Error(\\n\\t\\t\\t\\t`Cannot split a chunk that has already been edited (${loc.line}:${loc.column} – \\\"${chunk.original}\\\")`\\n\\t\\t\\t);\\n\\t\\t}\\n\\n\\t\\tconst newChunk = chunk.split(index);\\n\\n\\t\\tthis.byEnd[index] = chunk;\\n\\t\\tthis.byStart[index] = newChunk;\\n\\t\\tthis.byEnd[newChunk.end] = newChunk;\\n\\n\\t\\tif (chunk === this.lastChunk) this.lastChunk = newChunk;\\n\\n\\t\\tthis.lastSearchedChunk = chunk;\\n\\t\\tif (DEBUG) this.stats.timeEnd('_split');\\n\\t\\treturn true;\\n\\t}\\n\\n\\ttoString() {\\n\\t\\tlet str = this.intro;\\n\\n\\t\\tlet chunk = this.firstChunk;\\n\\t\\twhile (chunk) {\\n\\t\\t\\tstr += chunk.toString();\\n\\t\\t\\tchunk = chunk.next;\\n\\t\\t}\\n\\n\\t\\treturn str + this.outro;\\n\\t}\\n\\n\\tisEmpty() {\\n\\t\\tlet chunk = this.firstChunk;\\n\\t\\tdo {\\n\\t\\t\\tif (\\n\\t\\t\\t\\t(chunk.intro.length && chunk.intro.trim()) ||\\n\\t\\t\\t\\t(chunk.content.length && chunk.content.trim()) ||\\n\\t\\t\\t\\t(chunk.outro.length && chunk.outro.trim())\\n\\t\\t\\t)\\n\\t\\t\\t\\treturn false;\\n\\t\\t} while ((chunk = chunk.next));\\n\\t\\treturn true;\\n\\t}\\n\\n\\tlength() {\\n\\t\\tlet chunk = this.firstChunk;\\n\\t\\tlet length = 0;\\n\\t\\tdo {\\n\\t\\t\\tlength += chunk.intro.length + chunk.content.length + chunk.outro.length;\\n\\t\\t} while ((chunk = chunk.next));\\n\\t\\treturn length;\\n\\t}\\n\\n\\ttrimLines() {\\n\\t\\treturn this.trim('[\\\\\\\\r\\\\\\\\n]');\\n\\t}\\n\\n\\ttrim(charType) {\\n\\t\\treturn this.trimStart(charType).trimEnd(charType);\\n\\t}\\n\\n\\ttrimEndAborted(charType) {\\n\\t\\tconst rx = new RegExp((charType || '\\\\\\\\s') + '+$');\\n\\n\\t\\tthis.outro = this.outro.replace(rx, '');\\n\\t\\tif (this.outro.length) return true;\\n\\n\\t\\tlet chunk = this.lastChunk;\\n\\n\\t\\tdo {\\n\\t\\t\\tconst end = chunk.end;\\n\\t\\t\\tconst aborted = chunk.trimEnd(rx);\\n\\n\\t\\t\\t// if chunk was trimmed, we have a new lastChunk\\n\\t\\t\\tif (chunk.end !== end) {\\n\\t\\t\\t\\tif (this.lastChunk === chunk) {\\n\\t\\t\\t\\t\\tthis.lastChunk = chunk.next;\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\tthis.byEnd[chunk.end] = chunk;\\n\\t\\t\\t\\tthis.byStart[chunk.next.start] = chunk.next;\\n\\t\\t\\t\\tthis.byEnd[chunk.next.end] = chunk.next;\\n\\t\\t\\t}\\n\\n\\t\\t\\tif (aborted) return true;\\n\\t\\t\\tchunk = chunk.previous;\\n\\t\\t} while (chunk);\\n\\n\\t\\treturn false;\\n\\t}\\n\\n\\ttrimEnd(charType) {\\n\\t\\tthis.trimEndAborted(charType);\\n\\t\\treturn this;\\n\\t}\\n\\ttrimStartAborted(charType) {\\n\\t\\tconst rx = new RegExp('^' + (charType || '\\\\\\\\s') + '+');\\n\\n\\t\\tthis.intro = this.intro.replace(rx, '');\\n\\t\\tif (this.intro.length) return true;\\n\\n\\t\\tlet chunk = this.firstChunk;\\n\\n\\t\\tdo {\\n\\t\\t\\tconst end = chunk.end;\\n\\t\\t\\tconst aborted = chunk.trimStart(rx);\\n\\n\\t\\t\\tif (chunk.end !== end) {\\n\\t\\t\\t\\t// special case...\\n\\t\\t\\t\\tif (chunk === this.lastChunk) this.lastChunk = chunk.next;\\n\\n\\t\\t\\t\\tthis.byEnd[chunk.end] = chunk;\\n\\t\\t\\t\\tthis.byStart[chunk.next.start] = chunk.next;\\n\\t\\t\\t\\tthis.byEnd[chunk.next.end] = chunk.next;\\n\\t\\t\\t}\\n\\n\\t\\t\\tif (aborted) return true;\\n\\t\\t\\tchunk = chunk.next;\\n\\t\\t} while (chunk);\\n\\n\\t\\treturn false;\\n\\t}\\n\\n\\ttrimStart(charType) {\\n\\t\\tthis.trimStartAborted(charType);\\n\\t\\treturn this;\\n\\t}\\n\\n\\thasChanged() {\\n\\t\\treturn this.original !== this.toString();\\n\\t}\\n\\n\\t_replaceRegexp(searchValue, replacement) {\\n\\t\\tfunction getReplacement(match, str) {\\n\\t\\t\\tif (typeof replacement === 'string') {\\n\\t\\t\\t\\treturn replacement.replace(/\\\\$(\\\\$|&|\\\\d+)/g, (_, i) => {\\n\\t\\t\\t\\t\\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace#specifying_a_string_as_a_parameter\\n\\t\\t\\t\\t\\tif (i === '$') return '$';\\n\\t\\t\\t\\t\\tif (i === '&') return match[0];\\n\\t\\t\\t\\t\\tconst num = +i;\\n\\t\\t\\t\\t\\tif (num < match.length) return match[+i];\\n\\t\\t\\t\\t\\treturn `$${i}`;\\n\\t\\t\\t\\t});\\n\\t\\t\\t} else {\\n\\t\\t\\t\\treturn replacement(...match, match.index, str, match.groups);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tfunction matchAll(re, str) {\\n\\t\\t\\tlet match;\\n\\t\\t\\tconst matches = [];\\n\\t\\t\\twhile ((match = re.exec(str))) {\\n\\t\\t\\t\\tmatches.push(match);\\n\\t\\t\\t}\\n\\t\\t\\treturn matches;\\n\\t\\t}\\n\\t\\tif (searchValue.global) {\\n\\t\\t\\tconst matches = matchAll(searchValue, this.original);\\n\\t\\t\\tmatches.forEach((match) => {\\n\\t\\t\\t\\tif (match.index != null)\\n\\t\\t\\t\\t\\tthis.overwrite(\\n\\t\\t\\t\\t\\t\\tmatch.index,\\n\\t\\t\\t\\t\\t\\tmatch.index + match[0].length,\\n\\t\\t\\t\\t\\t\\tgetReplacement(match, this.original)\\n\\t\\t\\t\\t\\t);\\n\\t\\t\\t});\\n\\t\\t} else {\\n\\t\\t\\tconst match = this.original.match(searchValue);\\n\\t\\t\\tif (match && match.index != null)\\n\\t\\t\\t\\tthis.overwrite(\\n\\t\\t\\t\\t\\tmatch.index,\\n\\t\\t\\t\\t\\tmatch.index + match[0].length,\\n\\t\\t\\t\\t\\tgetReplacement(match, this.original)\\n\\t\\t\\t\\t);\\n\\t\\t}\\n\\t\\treturn this;\\n\\t}\\n\\n\\t_replaceString(string, replacement) {\\n\\t\\tconst { original } = this;\\n\\t\\tconst index = original.indexOf(string);\\n\\n\\t\\tif (index !== -1) {\\n\\t\\t\\tthis.overwrite(index, index + string.length, replacement);\\n\\t\\t}\\n\\n\\t\\treturn this;\\n\\t}\\n\\n\\treplace(searchValue, replacement) {\\n\\t\\tif (typeof searchValue === 'string') {\\n\\t\\t\\treturn this._replaceString(searchValue, replacement);\\n\\t\\t}\\n\\n\\t\\treturn this._replaceRegexp(searchValue, replacement);\\n\\t}\\n\\n\\t_replaceAllString(string, replacement) {\\n\\t\\tconst { original } = this;\\n\\t\\tconst stringLength = string.length;\\n\\t\\tfor (\\n\\t\\t\\tlet index = original.indexOf(string);\\n\\t\\t\\tindex !== -1;\\n\\t\\t\\tindex = original.indexOf(string, index + stringLength)\\n\\t\\t) {\\n\\t\\t\\tthis.overwrite(index, index + stringLength, replacement);\\n\\t\\t}\\n\\n\\t\\treturn this;\\n\\t}\\n\\n\\treplaceAll(searchValue, replacement) {\\n\\t\\tif (typeof searchValue === 'string') {\\n\\t\\t\\treturn this._replaceAllString(searchValue, replacement);\\n\\t\\t}\\n\\n\\t\\tif (!searchValue.global) {\\n\\t\\t\\tthrow new TypeError(\\n\\t\\t\\t\\t'MagicString.prototype.replaceAll called with a non-global RegExp argument'\\n\\t\\t\\t);\\n\\t\\t}\\n\\n\\t\\treturn this._replaceRegexp(searchValue, replacement);\\n\\t}\\n}\\n\",\"import MagicString from './MagicString.js';\\nimport SourceMap from './SourceMap.js';\\nimport getRelativePath from './utils/getRelativePath.js';\\nimport isObject from './utils/isObject.js';\\nimport getLocator from './utils/getLocator.js';\\nimport Mappings from './utils/Mappings.js';\\n\\nconst hasOwnProp = Object.prototype.hasOwnProperty;\\n\\nexport default class Bundle {\\n\\tconstructor(options = {}) {\\n\\t\\tthis.intro = options.intro || '';\\n\\t\\tthis.separator = options.separator !== undefined ? options.separator : '\\\\n';\\n\\t\\tthis.sources = [];\\n\\t\\tthis.uniqueSources = [];\\n\\t\\tthis.uniqueSourceIndexByFilename = {};\\n\\t}\\n\\n\\taddSource(source) {\\n\\t\\tif (source instanceof MagicString) {\\n\\t\\t\\treturn this.addSource({\\n\\t\\t\\t\\tcontent: source,\\n\\t\\t\\t\\tfilename: source.filename,\\n\\t\\t\\t\\tseparator: this.separator,\\n\\t\\t\\t});\\n\\t\\t}\\n\\n\\t\\tif (!isObject(source) || !source.content) {\\n\\t\\t\\tthrow new Error(\\n\\t\\t\\t\\t'bundle.addSource() takes an object with a `content` property, which should be an instance of MagicString, and an optional `filename`'\\n\\t\\t\\t);\\n\\t\\t}\\n\\n\\t\\t['filename', 'indentExclusionRanges', 'separator'].forEach((option) => {\\n\\t\\t\\tif (!hasOwnProp.call(source, option)) source[option] = source.content[option];\\n\\t\\t});\\n\\n\\t\\tif (source.separator === undefined) {\\n\\t\\t\\t// TODO there's a bunch of this sort of thing, needs cleaning up\\n\\t\\t\\tsource.separator = this.separator;\\n\\t\\t}\\n\\n\\t\\tif (source.filename) {\\n\\t\\t\\tif (!hasOwnProp.call(this.uniqueSourceIndexByFilename, source.filename)) {\\n\\t\\t\\t\\tthis.uniqueSourceIndexByFilename[source.filename] = this.uniqueSources.length;\\n\\t\\t\\t\\tthis.uniqueSources.push({ filename: source.filename, content: source.content.original });\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tconst uniqueSource = this.uniqueSources[this.uniqueSourceIndexByFilename[source.filename]];\\n\\t\\t\\t\\tif (source.content.original !== uniqueSource.content) {\\n\\t\\t\\t\\t\\tthrow new Error(`Illegal source: same filename (${source.filename}), different contents`);\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\tthis.sources.push(source);\\n\\t\\treturn this;\\n\\t}\\n\\n\\tappend(str, options) {\\n\\t\\tthis.addSource({\\n\\t\\t\\tcontent: new MagicString(str),\\n\\t\\t\\tseparator: (options && options.separator) || '',\\n\\t\\t});\\n\\n\\t\\treturn this;\\n\\t}\\n\\n\\tclone() {\\n\\t\\tconst bundle = new Bundle({\\n\\t\\t\\tintro: this.intro,\\n\\t\\t\\tseparator: this.separator,\\n\\t\\t});\\n\\n\\t\\tthis.sources.forEach((source) => {\\n\\t\\t\\tbundle.addSource({\\n\\t\\t\\t\\tfilename: source.filename,\\n\\t\\t\\t\\tcontent: source.content.clone(),\\n\\t\\t\\t\\tseparator: source.separator,\\n\\t\\t\\t});\\n\\t\\t});\\n\\n\\t\\treturn bundle;\\n\\t}\\n\\n\\tgenerateDecodedMap(options = {}) {\\n\\t\\tconst names = [];\\n\\t\\tthis.sources.forEach((source) => {\\n\\t\\t\\tObject.keys(source.content.storedNames).forEach((name) => {\\n\\t\\t\\t\\tif (!~names.indexOf(name)) names.push(name);\\n\\t\\t\\t});\\n\\t\\t});\\n\\n\\t\\tconst mappings = new Mappings(options.hires);\\n\\n\\t\\tif (this.intro) {\\n\\t\\t\\tmappings.advance(this.intro);\\n\\t\\t}\\n\\n\\t\\tthis.sources.forEach((source, i) => {\\n\\t\\t\\tif (i > 0) {\\n\\t\\t\\t\\tmappings.advance(this.separator);\\n\\t\\t\\t}\\n\\n\\t\\t\\tconst sourceIndex = source.filename ? this.uniqueSourceIndexByFilename[source.filename] : -1;\\n\\t\\t\\tconst magicString = source.content;\\n\\t\\t\\tconst locate = getLocator(magicString.original);\\n\\n\\t\\t\\tif (magicString.intro) {\\n\\t\\t\\t\\tmappings.advance(magicString.intro);\\n\\t\\t\\t}\\n\\n\\t\\t\\tmagicString.firstChunk.eachNext((chunk) => {\\n\\t\\t\\t\\tconst loc = locate(chunk.start);\\n\\n\\t\\t\\t\\tif (chunk.intro.length) mappings.advance(chunk.intro);\\n\\n\\t\\t\\t\\tif (source.filename) {\\n\\t\\t\\t\\t\\tif (chunk.edited) {\\n\\t\\t\\t\\t\\t\\tmappings.addEdit(\\n\\t\\t\\t\\t\\t\\t\\tsourceIndex,\\n\\t\\t\\t\\t\\t\\t\\tchunk.content,\\n\\t\\t\\t\\t\\t\\t\\tloc,\\n\\t\\t\\t\\t\\t\\t\\tchunk.storeName ? names.indexOf(chunk.original) : -1\\n\\t\\t\\t\\t\\t\\t);\\n\\t\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\tmappings.addUneditedChunk(\\n\\t\\t\\t\\t\\t\\t\\tsourceIndex,\\n\\t\\t\\t\\t\\t\\t\\tchunk,\\n\\t\\t\\t\\t\\t\\t\\tmagicString.original,\\n\\t\\t\\t\\t\\t\\t\\tloc,\\n\\t\\t\\t\\t\\t\\t\\tmagicString.sourcemapLocations\\n\\t\\t\\t\\t\\t\\t);\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\tmappings.advance(chunk.content);\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\tif (chunk.outro.length) mappings.advance(chunk.outro);\\n\\t\\t\\t});\\n\\n\\t\\t\\tif (magicString.outro) {\\n\\t\\t\\t\\tmappings.advance(magicString.outro);\\n\\t\\t\\t}\\n\\t\\t});\\n\\n\\t\\treturn {\\n\\t\\t\\tfile: options.file ? options.file.split(/[/\\\\\\\\]/).pop() : null,\\n\\t\\t\\tsources: this.uniqueSources.map((source) => {\\n\\t\\t\\t\\treturn options.file ? getRelativePath(options.file, source.filename) : source.filename;\\n\\t\\t\\t}),\\n\\t\\t\\tsourcesContent: this.uniqueSources.map((source) => {\\n\\t\\t\\t\\treturn options.includeContent ? source.content : null;\\n\\t\\t\\t}),\\n\\t\\t\\tnames,\\n\\t\\t\\tmappings: mappings.raw,\\n\\t\\t};\\n\\t}\\n\\n\\tgenerateMap(options) {\\n\\t\\treturn new SourceMap(this.generateDecodedMap(options));\\n\\t}\\n\\n\\tgetIndentString() {\\n\\t\\tconst indentStringCounts = {};\\n\\n\\t\\tthis.sources.forEach((source) => {\\n\\t\\t\\tconst indentStr = source.content._getRawIndentString();\\n\\n\\t\\t\\tif (indentStr === null) return;\\n\\n\\t\\t\\tif (!indentStringCounts[indentStr]) indentStringCounts[indentStr] = 0;\\n\\t\\t\\tindentStringCounts[indentStr] += 1;\\n\\t\\t});\\n\\n\\t\\treturn (\\n\\t\\t\\tObject.keys(indentStringCounts).sort((a, b) => {\\n\\t\\t\\t\\treturn indentStringCounts[a] - indentStringCounts[b];\\n\\t\\t\\t})[0] || '\\\\t'\\n\\t\\t);\\n\\t}\\n\\n\\tindent(indentStr) {\\n\\t\\tif (!arguments.length) {\\n\\t\\t\\tindentStr = this.getIndentString();\\n\\t\\t}\\n\\n\\t\\tif (indentStr === '') return this; // noop\\n\\n\\t\\tlet trailingNewline = !this.intro || this.intro.slice(-1) === '\\\\n';\\n\\n\\t\\tthis.sources.forEach((source, i) => {\\n\\t\\t\\tconst separator = source.separator !== undefined ? source.separator : this.separator;\\n\\t\\t\\tconst indentStart = trailingNewline || (i > 0 && /\\\\r?\\\\n$/.test(separator));\\n\\n\\t\\t\\tsource.content.indent(indentStr, {\\n\\t\\t\\t\\texclude: source.indentExclusionRanges,\\n\\t\\t\\t\\tindentStart, //: trailingNewline || /\\\\r?\\\\n$/.test( separator )  //true///\\\\r?\\\\n/.test( separator )\\n\\t\\t\\t});\\n\\n\\t\\t\\ttrailingNewline = source.content.lastChar() === '\\\\n';\\n\\t\\t});\\n\\n\\t\\tif (this.intro) {\\n\\t\\t\\tthis.intro =\\n\\t\\t\\t\\tindentStr +\\n\\t\\t\\t\\tthis.intro.replace(/^[^\\\\n]/gm, (match, index) => {\\n\\t\\t\\t\\t\\treturn index > 0 ? indentStr + match : match;\\n\\t\\t\\t\\t});\\n\\t\\t}\\n\\n\\t\\treturn this;\\n\\t}\\n\\n\\tprepend(str) {\\n\\t\\tthis.intro = str + this.intro;\\n\\t\\treturn this;\\n\\t}\\n\\n\\ttoString() {\\n\\t\\tconst body = this.sources\\n\\t\\t\\t.map((source, i) => {\\n\\t\\t\\t\\tconst separator = source.separator !== undefined ? source.separator : this.separator;\\n\\t\\t\\t\\tconst str = (i > 0 ? separator : '') + source.content.toString();\\n\\n\\t\\t\\t\\treturn str;\\n\\t\\t\\t})\\n\\t\\t\\t.join('');\\n\\n\\t\\treturn this.intro + body;\\n\\t}\\n\\n\\tisEmpty() {\\n\\t\\tif (this.intro.length && this.intro.trim()) return false;\\n\\t\\tif (this.sources.some((source) => !source.content.isEmpty())) return false;\\n\\t\\treturn true;\\n\\t}\\n\\n\\tlength() {\\n\\t\\treturn this.sources.reduce(\\n\\t\\t\\t(length, source) => length + source.content.length(),\\n\\t\\t\\tthis.intro.length\\n\\t\\t);\\n\\t}\\n\\n\\ttrimLines() {\\n\\t\\treturn this.trim('[\\\\\\\\r\\\\\\\\n]');\\n\\t}\\n\\n\\ttrim(charType) {\\n\\t\\treturn this.trimStart(charType).trimEnd(charType);\\n\\t}\\n\\n\\ttrimStart(charType) {\\n\\t\\tconst rx = new RegExp('^' + (charType || '\\\\\\\\s') + '+');\\n\\t\\tthis.intro = this.intro.replace(rx, '');\\n\\n\\t\\tif (!this.intro) {\\n\\t\\t\\tlet source;\\n\\t\\t\\tlet i = 0;\\n\\n\\t\\t\\tdo {\\n\\t\\t\\t\\tsource = this.sources[i++];\\n\\t\\t\\t\\tif (!source) {\\n\\t\\t\\t\\t\\tbreak;\\n\\t\\t\\t\\t}\\n\\t\\t\\t} while (!source.content.trimStartAborted(charType));\\n\\t\\t}\\n\\n\\t\\treturn this;\\n\\t}\\n\\n\\ttrimEnd(charType) {\\n\\t\\tconst rx = new RegExp((charType || '\\\\\\\\s') + '+$');\\n\\n\\t\\tlet source;\\n\\t\\tlet i = this.sources.length - 1;\\n\\n\\t\\tdo {\\n\\t\\t\\tsource = this.sources[i--];\\n\\t\\t\\tif (!source) {\\n\\t\\t\\t\\tthis.intro = this.intro.replace(rx, '');\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\t}\\n\\t\\t} while (!source.content.trimEndAborted(charType));\\n\\n\\t\\treturn this;\\n\\t}\\n}\\n\"],\"names\":[],\"mappings\":\"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\"}/dist/magic-string.cjs.jsŅ'use strict';\n\nvar sourcemapCodec = require('@jridgewell/sourcemap-codec');\n\nclass BitSet {\n\tconstructor(arg) {\n\t\tthis.bits = arg instanceof BitSet ? arg.bits.slice() : [];\n\t}\n\n\tadd(n) {\n\t\tthis.bits[n >> 5] |= 1 << (n & 31);\n\t}\n\n\thas(n) {\n\t\treturn !!(this.bits[n >> 5] & (1 << (n & 31)));\n\t}\n}\n\nclass Chunk {\n\tconstructor(start, end, content) {\n\t\tthis.start = start;\n\t\tthis.end = end;\n\t\tthis.original = content;\n\n\t\tthis.intro = '';\n\t\tthis.outro = '';\n\n\t\tthis.content = content;\n\t\tthis.storeName = false;\n\t\tthis.edited = false;\n\n\t\t{\n\t\t\tthis.previous = null;\n\t\t\tthis.next = null;\n\t\t}\n\t}\n\n\tappendLeft(content) {\n\t\tthis.outro += content;\n\t}\n\n\tappendRight(content) {\n\t\tthis.intro = this.intro + content;\n\t}\n\n\tclone() {\n\t\tconst chunk = new Chunk(this.start, this.end, this.original);\n\n\t\tchunk.intro = this.intro;\n\t\tchunk.outro = this.outro;\n\t\tchunk.content = this.content;\n\t\tchunk.storeName = this.storeName;\n\t\tchunk.edited = this.edited;\n\n\t\treturn chunk;\n\t}\n\n\tcontains(index) {\n\t\treturn this.start < index && index < this.end;\n\t}\n\n\teachNext(fn) {\n\t\tlet chunk = this;\n\t\twhile (chunk) {\n\t\t\tfn(chunk);\n\t\t\tchunk = chunk.next;\n\t\t}\n\t}\n\n\teachPrevious(fn) {\n\t\tlet chunk = this;\n\t\twhile (chunk) {\n\t\t\tfn(chunk);\n\t\t\tchunk = chunk.previous;\n\t\t}\n\t}\n\n\tedit(content, storeName, contentOnly) {\n\t\tthis.content = content;\n\t\tif (!contentOnly) {\n\t\t\tthis.intro = '';\n\t\t\tthis.outro = '';\n\t\t}\n\t\tthis.storeName = storeName;\n\n\t\tthis.edited = true;\n\n\t\treturn this;\n\t}\n\n\tprependLeft(content) {\n\t\tthis.outro = content + this.outro;\n\t}\n\n\tprependRight(content) {\n\t\tthis.intro = content + this.intro;\n\t}\n\n\tsplit(index) {\n\t\tconst sliceIndex = index - this.start;\n\n\t\tconst originalBefore = this.original.slice(0, sliceIndex);\n\t\tconst originalAfter = this.original.slice(sliceIndex);\n\n\t\tthis.original = originalBefore;\n\n\t\tconst newChunk = new Chunk(index, this.end, originalAfter);\n\t\tnewChunk.outro = this.outro;\n\t\tthis.outro = '';\n\n\t\tthis.end = index;\n\n\t\tif (this.edited) {\n\t\t\t// TODO is this block necessary?...\n\t\t\tnewChunk.edit('', false);\n\t\t\tthis.content = '';\n\t\t} else {\n\t\t\tthis.content = originalBefore;\n\t\t}\n\n\t\tnewChunk.next = this.next;\n\t\tif (newChunk.next) newChunk.next.previous = newChunk;\n\t\tnewChunk.previous = this;\n\t\tthis.next = newChunk;\n\n\t\treturn newChunk;\n\t}\n\n\ttoString() {\n\t\treturn this.intro + this.content + this.outro;\n\t}\n\n\ttrimEnd(rx) {\n\t\tthis.outro = this.outro.replace(rx, '');\n\t\tif (this.outro.length) return true;\n\n\t\tconst trimmed = this.content.replace(rx, '');\n\n\t\tif (trimmed.length) {\n\t\t\tif (trimmed !== this.content) {\n\t\t\t\tthis.split(this.start + trimmed.length).edit('', undefined, true);\n\t\t\t}\n\t\t\treturn true;\n\t\t} else {\n\t\t\tthis.edit('', undefined, true);\n\n\t\t\tthis.intro = this.intro.replace(rx, '');\n\t\t\tif (this.intro.length) return true;\n\t\t}\n\t}\n\n\ttrimStart(rx) {\n\t\tthis.intro = this.intro.replace(rx, '');\n\t\tif (this.intro.length) return true;\n\n\t\tconst trimmed = this.content.replace(rx, '');\n\n\t\tif (trimmed.length) {\n\t\t\tif (trimmed !== this.content) {\n\t\t\t\tthis.split(this.end - trimmed.length);\n\t\t\t\tthis.edit('', undefined, true);\n\t\t\t}\n\t\t\treturn true;\n\t\t} else {\n\t\t\tthis.edit('', undefined, true);\n\n\t\t\tthis.outro = this.outro.replace(rx, '');\n\t\t\tif (this.outro.length) return true;\n\t\t}\n\t}\n}\n\nfunction getBtoa () {\n\tif (typeof window !== 'undefined' && typeof window.btoa === 'function') {\n\t\treturn (str) => window.btoa(unescape(encodeURIComponent(str)));\n\t} else if (typeof Buffer === 'function') {\n\t\treturn (str) => Buffer.from(str, 'utf-8').toString('base64');\n\t} else {\n\t\treturn () => {\n\t\t\tthrow new Error('Unsupported environment: `window.btoa` or `Buffer` should be supported.');\n\t\t};\n\t}\n}\n\nconst btoa = /*#__PURE__*/ getBtoa();\n\nclass SourceMap {\n\tconstructor(properties) {\n\t\tthis.version = 3;\n\t\tthis.file = properties.file;\n\t\tthis.sources = properties.sources;\n\t\tthis.sourcesContent = properties.sourcesContent;\n\t\tthis.names = properties.names;\n\t\tthis.mappings = sourcemapCodec.encode(properties.mappings);\n\t\tif (typeof properties.x_google_ignoreList !== 'undefined') {\n\t\t\tthis.x_google_ignoreList = properties.x_google_ignoreList;\n\t\t}\n\t}\n\n\ttoString() {\n\t\treturn JSON.stringify(this);\n\t}\n\n\ttoUrl() {\n\t\treturn 'data:application/json;charset=utf-8;base64,' + btoa(this.toString());\n\t}\n}\n\nfunction guessIndent(code) {\n\tconst lines = code.split('\\n');\n\n\tconst tabbed = lines.filter((line) => /^\\t+/.test(line));\n\tconst spaced = lines.filter((line) => /^ {2,}/.test(line));\n\n\tif (tabbed.length === 0 && spaced.length === 0) {\n\t\treturn null;\n\t}\n\n\t// More lines tabbed than spaced? Assume tabs, and\n\t// default to tabs in the case of a tie (or nothing\n\t// to go on)\n\tif (tabbed.length >= spaced.length) {\n\t\treturn '\\t';\n\t}\n\n\t// Otherwise, we need to guess the multiple\n\tconst min = spaced.reduce((previous, current) => {\n\t\tconst numSpaces = /^ +/.exec(current)[0].length;\n\t\treturn Math.min(numSpaces, previous);\n\t}, Infinity);\n\n\treturn new Array(min + 1).join(' ');\n}\n\nfunction getRelativePath(from, to) {\n\tconst fromParts = from.split(/[/\\\\]/);\n\tconst toParts = to.split(/[/\\\\]/);\n\n\tfromParts.pop(); // get dirname\n\n\twhile (fromParts[0] === toParts[0]) {\n\t\tfromParts.shift();\n\t\ttoParts.shift();\n\t}\n\n\tif (fromParts.length) {\n\t\tlet i = fromParts.length;\n\t\twhile (i--) fromParts[i] = '..';\n\t}\n\n\treturn fromParts.concat(toParts).join('/');\n}\n\nconst toString = Object.prototype.toString;\n\nfunction isObject(thing) {\n\treturn toString.call(thing) === '[object Object]';\n}\n\nfunction getLocator(source) {\n\tconst originalLines = source.split('\\n');\n\tconst lineOffsets = [];\n\n\tfor (let i = 0, pos = 0; i < originalLines.length; i++) {\n\t\tlineOffsets.push(pos);\n\t\tpos += originalLines[i].length + 1;\n\t}\n\n\treturn function locate(index) {\n\t\tlet i = 0;\n\t\tlet j = lineOffsets.length;\n\t\twhile (i < j) {\n\t\t\tconst m = (i + j) >> 1;\n\t\t\tif (index < lineOffsets[m]) {\n\t\t\t\tj = m;\n\t\t\t} else {\n\t\t\t\ti = m + 1;\n\t\t\t}\n\t\t}\n\t\tconst line = i - 1;\n\t\tconst column = index - lineOffsets[line];\n\t\treturn { line, column };\n\t};\n}\n\nclass Mappings {\n\tconstructor(hires) {\n\t\tthis.hires = hires;\n\t\tthis.generatedCodeLine = 0;\n\t\tthis.generatedCodeColumn = 0;\n\t\tthis.raw = [];\n\t\tthis.rawSegments = this.raw[this.generatedCodeLine] = [];\n\t\tthis.pending = null;\n\t}\n\n\taddEdit(sourceIndex, content, loc, nameIndex) {\n\t\tif (content.length) {\n\t\t\tconst segment = [this.generatedCodeColumn, sourceIndex, loc.line, loc.column];\n\t\t\tif (nameIndex >= 0) {\n\t\t\t\tsegment.push(nameIndex);\n\t\t\t}\n\t\t\tthis.rawSegments.push(segment);\n\t\t} else if (this.pending) {\n\t\t\tthis.rawSegments.push(this.pending);\n\t\t}\n\n\t\tthis.advance(content);\n\t\tthis.pending = null;\n\t}\n\n\taddUneditedChunk(sourceIndex, chunk, original, loc, sourcemapLocations) {\n\t\tlet originalCharIndex = chunk.start;\n\t\tlet first = true;\n\n\t\twhile (originalCharIndex < chunk.end) {\n\t\t\tif (this.hires || first || sourcemapLocations.has(originalCharIndex)) {\n\t\t\t\tthis.rawSegments.push([this.generatedCodeColumn, sourceIndex, loc.line, loc.column]);\n\t\t\t}\n\n\t\t\tif (original[originalCharIndex] === '\\n') {\n\t\t\t\tloc.line += 1;\n\t\t\t\tloc.column = 0;\n\t\t\t\tthis.generatedCodeLine += 1;\n\t\t\t\tthis.raw[this.generatedCodeLine] = this.rawSegments = [];\n\t\t\t\tthis.generatedCodeColumn = 0;\n\t\t\t\tfirst = true;\n\t\t\t} else {\n\t\t\t\tloc.column += 1;\n\t\t\t\tthis.generatedCodeColumn += 1;\n\t\t\t\tfirst = false;\n\t\t\t}\n\n\t\t\toriginalCharIndex += 1;\n\t\t}\n\n\t\tthis.pending = null;\n\t}\n\n\tadvance(str) {\n\t\tif (!str) return;\n\n\t\tconst lines = str.split('\\n');\n\n\t\tif (lines.length > 1) {\n\t\t\tfor (let i = 0; i < lines.length - 1; i++) {\n\t\t\t\tthis.generatedCodeLine++;\n\t\t\t\tthis.raw[this.generatedCodeLine] = this.rawSegments = [];\n\t\t\t}\n\t\t\tthis.generatedCodeColumn = 0;\n\t\t}\n\n\t\tthis.generatedCodeColumn += lines[lines.length - 1].length;\n\t}\n}\n\nconst n = '\\n';\n\nconst warned = {\n\tinsertLeft: false,\n\tinsertRight: false,\n\tstoreName: false,\n};\n\nclass MagicString {\n\tconstructor(string, options = {}) {\n\t\tconst chunk = new Chunk(0, string.length, string);\n\n\t\tObject.defineProperties(this, {\n\t\t\toriginal: { writable: true, value: string },\n\t\t\toutro: { writable: true, value: '' },\n\t\t\tintro: { writable: true, value: '' },\n\t\t\tfirstChunk: { writable: true, value: chunk },\n\t\t\tlastChunk: { writable: true, value: chunk },\n\t\t\tlastSearchedChunk: { writable: true, value: chunk },\n\t\t\tbyStart: { writable: true, value: {} },\n\t\t\tbyEnd: { writable: true, value: {} },\n\t\t\tfilename: { writable: true, value: options.filename },\n\t\t\tindentExclusionRanges: { writable: true, value: options.indentExclusionRanges },\n\t\t\tsourcemapLocations: { writable: true, value: new BitSet() },\n\t\t\tstoredNames: { writable: true, value: {} },\n\t\t\tindentStr: { writable: true, value: undefined },\n\t\t});\n\n\t\tthis.byStart[0] = chunk;\n\t\tthis.byEnd[string.length] = chunk;\n\t}\n\n\taddSourcemapLocation(char) {\n\t\tthis.sourcemapLocations.add(char);\n\t}\n\n\tappend(content) {\n\t\tif (typeof content !== 'string') throw new TypeError('outro content must be a string');\n\n\t\tthis.outro += content;\n\t\treturn this;\n\t}\n\n\tappendLeft(index, content) {\n\t\tif (typeof content !== 'string') throw new TypeError('inserted content must be a string');\n\n\t\tthis._split(index);\n\n\t\tconst chunk = this.byEnd[index];\n\n\t\tif (chunk) {\n\t\t\tchunk.appendLeft(content);\n\t\t} else {\n\t\t\tthis.intro += content;\n\t\t}\n\t\treturn this;\n\t}\n\n\tappendRight(index, content) {\n\t\tif (typeof content !== 'string') throw new TypeError('inserted content must be a string');\n\n\t\tthis._split(index);\n\n\t\tconst chunk = this.byStart[index];\n\n\t\tif (chunk) {\n\t\t\tchunk.appendRight(content);\n\t\t} else {\n\t\t\tthis.outro += content;\n\t\t}\n\t\treturn this;\n\t}\n\n\tclone() {\n\t\tconst cloned = new MagicString(this.original, { filename: this.filename });\n\n\t\tlet originalChunk = this.firstChunk;\n\t\tlet clonedChunk = (cloned.firstChunk = cloned.lastSearchedChunk = originalChunk.clone());\n\n\t\twhile (originalChunk) {\n\t\t\tcloned.byStart[clonedChunk.start] = clonedChunk;\n\t\t\tcloned.byEnd[clonedChunk.end] = clonedChunk;\n\n\t\t\tconst nextOriginalChunk = originalChunk.next;\n\t\t\tconst nextClonedChunk = nextOriginalChunk && nextOriginalChunk.clone();\n\n\t\t\tif (nextClonedChunk) {\n\t\t\t\tclonedChunk.next = nextClonedChunk;\n\t\t\t\tnextClonedChunk.previous = clonedChunk;\n\n\t\t\t\tclonedChunk = nextClonedChunk;\n\t\t\t}\n\n\t\t\toriginalChunk = nextOriginalChunk;\n\t\t}\n\n\t\tcloned.lastChunk = clonedChunk;\n\n\t\tif (this.indentExclusionRanges) {\n\t\t\tcloned.indentExclusionRanges = this.indentExclusionRanges.slice();\n\t\t}\n\n\t\tcloned.sourcemapLocations = new BitSet(this.sourcemapLocations);\n\n\t\tcloned.intro = this.intro;\n\t\tcloned.outro = this.outro;\n\n\t\treturn cloned;\n\t}\n\n\tgenerateDecodedMap(options) {\n\t\toptions = options || {};\n\n\t\tconst sourceIndex = 0;\n\t\tconst names = Object.keys(this.storedNames);\n\t\tconst mappings = new Mappings(options.hires);\n\n\t\tconst locate = getLocator(this.original);\n\n\t\tif (this.intro) {\n\t\t\tmappings.advance(this.intro);\n\t\t}\n\n\t\tthis.firstChunk.eachNext((chunk) => {\n\t\t\tconst loc = locate(chunk.start);\n\n\t\t\tif (chunk.intro.length) mappings.advance(chunk.intro);\n\n\t\t\tif (chunk.edited) {\n\t\t\t\tmappings.addEdit(\n\t\t\t\t\tsourceIndex,\n\t\t\t\t\tchunk.content,\n\t\t\t\t\tloc,\n\t\t\t\t\tchunk.storeName ? names.indexOf(chunk.original) : -1\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tmappings.addUneditedChunk(sourceIndex, chunk, this.original, loc, this.sourcemapLocations);\n\t\t\t}\n\n\t\t\tif (chunk.outro.length) mappings.advance(chunk.outro);\n\t\t});\n\n\t\treturn {\n\t\t\tfile: options.file ? options.file.split(/[/\\\\]/).pop() : null,\n\t\t\tsources: [options.source ? getRelativePath(options.file || '', options.source) : null],\n\t\t\tsourcesContent: options.includeContent ? [this.original] : [null],\n\t\t\tnames,\n\t\t\tmappings: mappings.raw,\n\t\t};\n\t}\n\n\tgenerateMap(options) {\n\t\treturn new SourceMap(this.generateDecodedMap(options));\n\t}\n\n\t_ensureindentStr() {\n\t\tif (this.indentStr === undefined) {\n\t\t\tthis.indentStr = guessIndent(this.original);\n\t\t}\n\t}\n\n\t_getRawIndentString() {\n\t\tthis._ensureindentStr();\n\t\treturn this.indentStr;\n\t}\n\n\tgetIndentString() {\n\t\tthis._ensureindentStr();\n\t\treturn this.indentStr === null ? '\\t' : this.indentStr;\n\t}\n\n\tindent(indentStr, options) {\n\t\tconst pattern = /^[^\\r\\n]/gm;\n\n\t\tif (isObject(indentStr)) {\n\t\t\toptions = indentStr;\n\t\t\tindentStr = undefined;\n\t\t}\n\n\t\tif (indentStr === undefined) {\n\t\t\tthis._ensureindentStr();\n\t\t\tindentStr = this.indentStr || '\\t';\n\t\t}\n\n\t\tif (indentStr === '') return this; // noop\n\n\t\toptions = options || {};\n\n\t\t// Process exclusion ranges\n\t\tconst isExcluded = {};\n\n\t\tif (options.exclude) {\n\t\t\tconst exclusions =\n\t\t\t\ttypeof options.exclude[0] === 'number' ? [options.exclude] : options.exclude;\n\t\t\texclusions.forEach((exclusion) => {\n\t\t\t\tfor (let i = exclusion[0]; i < exclusion[1]; i += 1) {\n\t\t\t\t\tisExcluded[i] = true;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tlet shouldIndentNextCharacter = options.indentStart !== false;\n\t\tconst replacer = (match) => {\n\t\t\tif (shouldIndentNextCharacter) return `${indentStr}${match}`;\n\t\t\tshouldIndentNextCharacter = true;\n\t\t\treturn match;\n\t\t};\n\n\t\tthis.intro = this.intro.replace(pattern, replacer);\n\n\t\tlet charIndex = 0;\n\t\tlet chunk = this.firstChunk;\n\n\t\twhile (chunk) {\n\t\t\tconst end = chunk.end;\n\n\t\t\tif (chunk.edited) {\n\t\t\t\tif (!isExcluded[charIndex]) {\n\t\t\t\t\tchunk.content = chunk.content.replace(pattern, replacer);\n\n\t\t\t\t\tif (chunk.content.length) {\n\t\t\t\t\t\tshouldIndentNextCharacter = chunk.content[chunk.content.length - 1] === '\\n';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcharIndex = chunk.start;\n\n\t\t\t\twhile (charIndex < end) {\n\t\t\t\t\tif (!isExcluded[charIndex]) {\n\t\t\t\t\t\tconst char = this.original[charIndex];\n\n\t\t\t\t\t\tif (char === '\\n') {\n\t\t\t\t\t\t\tshouldIndentNextCharacter = true;\n\t\t\t\t\t\t} else if (char !== '\\r' && shouldIndentNextCharacter) {\n\t\t\t\t\t\t\tshouldIndentNextCharacter = false;\n\n\t\t\t\t\t\t\tif (charIndex === chunk.start) {\n\t\t\t\t\t\t\t\tchunk.prependRight(indentStr);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis._splitChunk(chunk, charIndex);\n\t\t\t\t\t\t\t\tchunk = chunk.next;\n\t\t\t\t\t\t\t\tchunk.prependRight(indentStr);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tcharIndex += 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcharIndex = chunk.end;\n\t\t\tchunk = chunk.next;\n\t\t}\n\n\t\tthis.outro = this.outro.replace(pattern, replacer);\n\n\t\treturn this;\n\t}\n\n\tinsert() {\n\t\tthrow new Error(\n\t\t\t'magicString.insert(...) is deprecated. Use prependRight(...) or appendLeft(...)'\n\t\t);\n\t}\n\n\tinsertLeft(index, content) {\n\t\tif (!warned.insertLeft) {\n\t\t\tconsole.warn(\n\t\t\t\t'magicString.insertLeft(...) is deprecated. Use magicString.appendLeft(...) instead'\n\t\t\t); // eslint-disable-line no-console\n\t\t\twarned.insertLeft = true;\n\t\t}\n\n\t\treturn this.appendLeft(index, content);\n\t}\n\n\tinsertRight(index, content) {\n\t\tif (!warned.insertRight) {\n\t\t\tconsole.warn(\n\t\t\t\t'magicString.insertRight(...) is deprecated. Use magicString.prependRight(...) instead'\n\t\t\t); // eslint-disable-line no-console\n\t\t\twarned.insertRight = true;\n\t\t}\n\n\t\treturn this.prependRight(index, content);\n\t}\n\n\tmove(start, end, index) {\n\t\tif (index >= start && index <= end) throw new Error('Cannot move a selection inside itself');\n\n\t\tthis._split(start);\n\t\tthis._split(end);\n\t\tthis._split(index);\n\n\t\tconst first = this.byStart[start];\n\t\tconst last = this.byEnd[end];\n\n\t\tconst oldLeft = first.previous;\n\t\tconst oldRight = last.next;\n\n\t\tconst newRight = this.byStart[index];\n\t\tif (!newRight && last === this.lastChunk) return this;\n\t\tconst newLeft = newRight ? newRight.previous : this.lastChunk;\n\n\t\tif (oldLeft) oldLeft.next = oldRight;\n\t\tif (oldRight) oldRight.previous = oldLeft;\n\n\t\tif (newLeft) newLeft.next = first;\n\t\tif (newRight) newRight.previous = last;\n\n\t\tif (!first.previous) this.firstChunk = last.next;\n\t\tif (!last.next) {\n\t\t\tthis.lastChunk = first.previous;\n\t\t\tthis.lastChunk.next = null;\n\t\t}\n\n\t\tfirst.previous = newLeft;\n\t\tlast.next = newRight || null;\n\n\t\tif (!newLeft) this.firstChunk = first;\n\t\tif (!newRight) this.lastChunk = last;\n\t\treturn this;\n\t}\n\n\toverwrite(start, end, content, options) {\n\t\toptions = options || {};\n\t\treturn this.update(start, end, content, { ...options, overwrite: !options.contentOnly });\n\t}\n\n\tupdate(start, end, content, options) {\n\t\tif (typeof content !== 'string') throw new TypeError('replacement content must be a string');\n\n\t\twhile (start < 0) start += this.original.length;\n\t\twhile (end < 0) end += this.original.length;\n\n\t\tif (end > this.original.length) throw new Error('end is out of bounds');\n\t\tif (start === end)\n\t\t\tthrow new Error(\n\t\t\t\t'Cannot overwrite a zero-length range – use appendLeft or prependRight instead'\n\t\t\t);\n\n\t\tthis._split(start);\n\t\tthis._split(end);\n\n\t\tif (options === true) {\n\t\t\tif (!warned.storeName) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t'The final argument to magicString.overwrite(...) should be an options object. See https://github.com/rich-harris/magic-string'\n\t\t\t\t); // eslint-disable-line no-console\n\t\t\t\twarned.storeName = true;\n\t\t\t}\n\n\t\t\toptions = { storeName: true };\n\t\t}\n\t\tconst storeName = options !== undefined ? options.storeName : false;\n\t\tconst overwrite = options !== undefined ? options.overwrite : false;\n\n\t\tif (storeName) {\n\t\t\tconst original = this.original.slice(start, end);\n\t\t\tObject.defineProperty(this.storedNames, original, {\n\t\t\t\twritable: true,\n\t\t\t\tvalue: true,\n\t\t\t\tenumerable: true,\n\t\t\t});\n\t\t}\n\n\t\tconst first = this.byStart[start];\n\t\tconst last = this.byEnd[end];\n\n\t\tif (first) {\n\t\t\tlet chunk = first;\n\t\t\twhile (chunk !== last) {\n\t\t\t\tif (chunk.next !== this.byStart[chunk.end]) {\n\t\t\t\t\tthrow new Error('Cannot overwrite across a split point');\n\t\t\t\t}\n\t\t\t\tchunk = chunk.next;\n\t\t\t\tchunk.edit('', false);\n\t\t\t}\n\n\t\t\tfirst.edit(content, storeName, !overwrite);\n\t\t} else {\n\t\t\t// must be inserting at the end\n\t\t\tconst newChunk = new Chunk(start, end, '').edit(content, storeName);\n\n\t\t\t// TODO last chunk in the array may not be the last chunk, if it's moved...\n\t\t\tlast.next = newChunk;\n\t\t\tnewChunk.previous = last;\n\t\t}\n\t\treturn this;\n\t}\n\n\tprepend(content) {\n\t\tif (typeof content !== 'string') throw new TypeError('outro content must be a string');\n\n\t\tthis.intro = content + this.intro;\n\t\treturn this;\n\t}\n\n\tprependLeft(index, content) {\n\t\tif (typeof content !== 'string') throw new TypeError('inserted content must be a string');\n\n\t\tthis._split(index);\n\n\t\tconst chunk = this.byEnd[index];\n\n\t\tif (chunk) {\n\t\t\tchunk.prependLeft(content);\n\t\t} else {\n\t\t\tthis.intro = content + this.intro;\n\t\t}\n\t\treturn this;\n\t}\n\n\tprependRight(index, content) {\n\t\tif (typeof content !== 'string') throw new TypeError('inserted content must be a string');\n\n\t\tthis._split(index);\n\n\t\tconst chunk = this.byStart[index];\n\n\t\tif (chunk) {\n\t\t\tchunk.prependRight(content);\n\t\t} else {\n\t\t\tthis.outro = content + this.outro;\n\t\t}\n\t\treturn this;\n\t}\n\n\tremove(start, end) {\n\t\twhile (start < 0) start += this.original.length;\n\t\twhile (end < 0) end += this.original.length;\n\n\t\tif (start === end) return this;\n\n\t\tif (start < 0 || end > this.original.length) throw new Error('Character is out of bounds');\n\t\tif (start > end) throw new Error('end must be greater than start');\n\n\t\tthis._split(start);\n\t\tthis._split(end);\n\n\t\tlet chunk = this.byStart[start];\n\n\t\twhile (chunk) {\n\t\t\tchunk.intro = '';\n\t\t\tchunk.outro = '';\n\t\t\tchunk.edit('');\n\n\t\t\tchunk = end > chunk.end ? this.byStart[chunk.end] : null;\n\t\t}\n\t\treturn this;\n\t}\n\n\tlastChar() {\n\t\tif (this.outro.length) return this.outro[this.outro.length - 1];\n\t\tlet chunk = this.lastChunk;\n\t\tdo {\n\t\t\tif (chunk.outro.length) return chunk.outro[chunk.outro.length - 1];\n\t\t\tif (chunk.content.length) return chunk.content[chunk.content.length - 1];\n\t\t\tif (chunk.intro.length) return chunk.intro[chunk.intro.length - 1];\n\t\t} while ((chunk = chunk.previous));\n\t\tif (this.intro.length) return this.intro[this.intro.length - 1];\n\t\treturn '';\n\t}\n\n\tlastLine() {\n\t\tlet lineIndex = this.outro.lastIndexOf(n);\n\t\tif (lineIndex !== -1) return this.outro.substr(lineIndex + 1);\n\t\tlet lineStr = this.outro;\n\t\tlet chunk = this.lastChunk;\n\t\tdo {\n\t\t\tif (chunk.outro.length > 0) {\n\t\t\t\tlineIndex = chunk.outro.lastIndexOf(n);\n\t\t\t\tif (lineIndex !== -1) return chunk.outro.substr(lineIndex + 1) + lineStr;\n\t\t\t\tlineStr = chunk.outro + lineStr;\n\t\t\t}\n\n\t\t\tif (chunk.content.length > 0) {\n\t\t\t\tlineIndex = chunk.content.lastIndexOf(n);\n\t\t\t\tif (lineIndex !== -1) return chunk.content.substr(lineIndex + 1) + lineStr;\n\t\t\t\tlineStr = chunk.content + lineStr;\n\t\t\t}\n\n\t\t\tif (chunk.intro.length > 0) {\n\t\t\t\tlineIndex = chunk.intro.lastIndexOf(n);\n\t\t\t\tif (lineIndex !== -1) return chunk.intro.substr(lineIndex + 1) + lineStr;\n\t\t\t\tlineStr = chunk.intro + lineStr;\n\t\t\t}\n\t\t} while ((chunk = chunk.previous));\n\t\tlineIndex = this.intro.lastIndexOf(n);\n\t\tif (lineIndex !== -1) return this.intro.substr(lineIndex + 1) + lineStr;\n\t\treturn this.intro + lineStr;\n\t}\n\n\tslice(start = 0, end = this.original.length) {\n\t\twhile (start < 0) start += this.original.length;\n\t\twhile (end < 0) end += this.original.length;\n\n\t\tlet result = '';\n\n\t\t// find start chunk\n\t\tlet chunk = this.firstChunk;\n\t\twhile (chunk && (chunk.start > start || chunk.end <= start)) {\n\t\t\t// found end chunk before start\n\t\t\tif (chunk.start < end && chunk.end >= end) {\n\t\t\t\treturn result;\n\t\t\t}\n\n\t\t\tchunk = chunk.next;\n\t\t}\n\n\t\tif (chunk && chunk.edited && chunk.start !== start)\n\t\t\tthrow new Error(`Cannot use replaced character ${start} as slice start anchor.`);\n\n\t\tconst startChunk = chunk;\n\t\twhile (chunk) {\n\t\t\tif (chunk.intro && (startChunk !== chunk || chunk.start === start)) {\n\t\t\t\tresult += chunk.intro;\n\t\t\t}\n\n\t\t\tconst containsEnd = chunk.start < end && chunk.end >= end;\n\t\t\tif (containsEnd && chunk.edited && chunk.end !== end)\n\t\t\t\tthrow new Error(`Cannot use replaced character ${end} as slice end anchor.`);\n\n\t\t\tconst sliceStart = startChunk === chunk ? start - chunk.start : 0;\n\t\t\tconst sliceEnd = containsEnd ? chunk.content.length + end - chunk.end : chunk.content.length;\n\n\t\t\tresult += chunk.content.slice(sliceStart, sliceEnd);\n\n\t\t\tif (chunk.outro && (!containsEnd || chunk.end === end)) {\n\t\t\t\tresult += chunk.outro;\n\t\t\t}\n\n\t\t\tif (containsEnd) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tchunk = chunk.next;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t// TODO deprecate this? not really very useful\n\tsnip(start, end) {\n\t\tconst clone = this.clone();\n\t\tclone.remove(0, start);\n\t\tclone.remove(end, clone.original.length);\n\n\t\treturn clone;\n\t}\n\n\t_split(index) {\n\t\tif (this.byStart[index] || this.byEnd[index]) return;\n\n\t\tlet chunk = this.lastSearchedChunk;\n\t\tconst searchForward = index > chunk.end;\n\n\t\twhile (chunk) {\n\t\t\tif (chunk.contains(index)) return this._splitChunk(chunk, index);\n\n\t\t\tchunk = searchForward ? this.byStart[chunk.end] : this.byEnd[chunk.start];\n\t\t}\n\t}\n\n\t_splitChunk(chunk, index) {\n\t\tif (chunk.edited && chunk.content.length) {\n\t\t\t// zero-length edited chunks are a special case (overlapping replacements)\n\t\t\tconst loc = getLocator(this.original)(index);\n\t\t\tthrow new Error(\n\t\t\t\t`Cannot split a chunk that has already been edited (${loc.line}:${loc.column} – \"${chunk.original}\")`\n\t\t\t);\n\t\t}\n\n\t\tconst newChunk = chunk.split(index);\n\n\t\tthis.byEnd[index] = chunk;\n\t\tthis.byStart[index] = newChunk;\n\t\tthis.byEnd[newChunk.end] = newChunk;\n\n\t\tif (chunk === this.lastChunk) this.lastChunk = newChunk;\n\n\t\tthis.lastSearchedChunk = chunk;\n\t\treturn true;\n\t}\n\n\ttoString() {\n\t\tlet str = this.intro;\n\n\t\tlet chunk = this.firstChunk;\n\t\twhile (chunk) {\n\t\t\tstr += chunk.toString();\n\t\t\tchunk = chunk.next;\n\t\t}\n\n\t\treturn str + this.outro;\n\t}\n\n\tisEmpty() {\n\t\tlet chunk = this.firstChunk;\n\t\tdo {\n\t\t\tif (\n\t\t\t\t(chunk.intro.length && chunk.intro.trim()) ||\n\t\t\t\t(chunk.content.length && chunk.content.trim()) ||\n\t\t\t\t(chunk.outro.length && chunk.outro.trim())\n\t\t\t)\n\t\t\t\treturn false;\n\t\t} while ((chunk = chunk.next));\n\t\treturn true;\n\t}\n\n\tlength() {\n\t\tlet chunk = this.firstChunk;\n\t\tlet length = 0;\n\t\tdo {\n\t\t\tlength += chunk.intro.length + chunk.content.length + chunk.outro.length;\n\t\t} while ((chunk = chunk.next));\n\t\treturn length;\n\t}\n\n\ttrimLines() {\n\t\treturn this.trim('[\\\\r\\\\n]');\n\t}\n\n\ttrim(charType) {\n\t\treturn this.trimStart(charType).trimEnd(charType);\n\t}\n\n\ttrimEndAborted(charType) {\n\t\tconst rx = new RegExp((charType || '\\\\s') + '+$');\n\n\t\tthis.outro = this.outro.replace(rx, '');\n\t\tif (this.outro.length) return true;\n\n\t\tlet chunk = this.lastChunk;\n\n\t\tdo {\n\t\t\tconst end = chunk.end;\n\t\t\tconst aborted = chunk.trimEnd(rx);\n\n\t\t\t// if chunk was trimmed, we have a new lastChunk\n\t\t\tif (chunk.end !== end) {\n\t\t\t\tif (this.lastChunk === chunk) {\n\t\t\t\t\tthis.lastChunk = chunk.next;\n\t\t\t\t}\n\n\t\t\t\tthis.byEnd[chunk.end] = chunk;\n\t\t\t\tthis.byStart[chunk.next.start] = chunk.next;\n\t\t\t\tthis.byEnd[chunk.next.end] = chunk.next;\n\t\t\t}\n\n\t\t\tif (aborted) return true;\n\t\t\tchunk = chunk.previous;\n\t\t} while (chunk);\n\n\t\treturn false;\n\t}\n\n\ttrimEnd(charType) {\n\t\tthis.trimEndAborted(charType);\n\t\treturn this;\n\t}\n\ttrimStartAborted(charType) {\n\t\tconst rx = new RegExp('^' + (charType || '\\\\s') + '+');\n\n\t\tthis.intro = this.intro.replace(rx, '');\n\t\tif (this.intro.length) return true;\n\n\t\tlet chunk = this.firstChunk;\n\n\t\tdo {\n\t\t\tconst end = chunk.end;\n\t\t\tconst aborted = chunk.trimStart(rx);\n\n\t\t\tif (chunk.end !== end) {\n\t\t\t\t// special case...\n\t\t\t\tif (chunk === this.lastChunk) this.lastChunk = chunk.next;\n\n\t\t\t\tthis.byEnd[chunk.end] = chunk;\n\t\t\t\tthis.byStart[chunk.next.start] = chunk.next;\n\t\t\t\tthis.byEnd[chunk.next.end] = chunk.next;\n\t\t\t}\n\n\t\t\tif (aborted) return true;\n\t\t\tchunk = chunk.next;\n\t\t} while (chunk);\n\n\t\treturn false;\n\t}\n\n\ttrimStart(charType) {\n\t\tthis.trimStartAborted(charType);\n\t\treturn this;\n\t}\n\n\thasChanged() {\n\t\treturn this.original !== this.toString();\n\t}\n\n\t_replaceRegexp(searchValue, replacement) {\n\t\tfunction getReplacement(match, str) {\n\t\t\tif (typeof replacement === 'string') {\n\t\t\t\treturn replacement.replace(/\\$(\\$|&|\\d+)/g, (_, i) => {\n\t\t\t\t\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace#specifying_a_string_as_a_parameter\n\t\t\t\t\tif (i === '$') return '$';\n\t\t\t\t\tif (i === '&') return match[0];\n\t\t\t\t\tconst num = +i;\n\t\t\t\t\tif (num < match.length) return match[+i];\n\t\t\t\t\treturn `$${i}`;\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\treturn replacement(...match, match.index, str, match.groups);\n\t\t\t}\n\t\t}\n\t\tfunction matchAll(re, str) {\n\t\t\tlet match;\n\t\t\tconst matches = [];\n\t\t\twhile ((match = re.exec(str))) {\n\t\t\t\tmatches.push(match);\n\t\t\t}\n\t\t\treturn matches;\n\t\t}\n\t\tif (searchValue.global) {\n\t\t\tconst matches = matchAll(searchValue, this.original);\n\t\t\tmatches.forEach((match) => {\n\t\t\t\tif (match.index != null)\n\t\t\t\t\tthis.overwrite(\n\t\t\t\t\t\tmatch.index,\n\t\t\t\t\t\tmatch.index + match[0].length,\n\t\t\t\t\t\tgetReplacement(match, this.original)\n\t\t\t\t\t);\n\t\t\t});\n\t\t} else {\n\t\t\tconst match = this.original.match(searchValue);\n\t\t\tif (match && match.index != null)\n\t\t\t\tthis.overwrite(\n\t\t\t\t\tmatch.index,\n\t\t\t\t\tmatch.index + match[0].length,\n\t\t\t\t\tgetReplacement(match, this.original)\n\t\t\t\t);\n\t\t}\n\t\treturn this;\n\t}\n\n\t_replaceString(string, replacement) {\n\t\tconst { original } = this;\n\t\tconst index = original.indexOf(string);\n\n\t\tif (index !== -1) {\n\t\t\tthis.overwrite(index, index + string.length, replacement);\n\t\t}\n\n\t\treturn this;\n\t}\n\n\treplace(searchValue, replacement) {\n\t\tif (typeof searchValue === 'string') {\n\t\t\treturn this._replaceString(searchValue, replacement);\n\t\t}\n\n\t\treturn this._replaceRegexp(searchValue, replacement);\n\t}\n\n\t_replaceAllString(string, replacement) {\n\t\tconst { original } = this;\n\t\tconst stringLength = string.length;\n\t\tfor (\n\t\t\tlet index = original.indexOf(string);\n\t\t\tindex !== -1;\n\t\t\tindex = original.indexOf(string, index + stringLength)\n\t\t) {\n\t\t\tthis.overwrite(index, index + stringLength, replacement);\n\t\t}\n\n\t\treturn this;\n\t}\n\n\treplaceAll(searchValue, replacement) {\n\t\tif (typeof searchValue === 'string') {\n\t\t\treturn this._replaceAllString(searchValue, replacement);\n\t\t}\n\n\t\tif (!searchValue.global) {\n\t\t\tthrow new TypeError(\n\t\t\t\t'MagicString.prototype.replaceAll called with a non-global RegExp argument'\n\t\t\t);\n\t\t}\n\n\t\treturn this._replaceRegexp(searchValue, replacement);\n\t}\n}\n\nconst hasOwnProp = Object.prototype.hasOwnProperty;\n\nclass Bundle {\n\tconstructor(options = {}) {\n\t\tthis.intro = options.intro || '';\n\t\tthis.separator = options.separator !== undefined ? options.separator : '\\n';\n\t\tthis.sources = [];\n\t\tthis.uniqueSources = [];\n\t\tthis.uniqueSourceIndexByFilename = {};\n\t}\n\n\taddSource(source) {\n\t\tif (source instanceof MagicString) {\n\t\t\treturn this.addSource({\n\t\t\t\tcontent: source,\n\t\t\t\tfilename: source.filename,\n\t\t\t\tseparator: this.separator,\n\t\t\t});\n\t\t}\n\n\t\tif (!isObject(source) || !source.content) {\n\t\t\tthrow new Error(\n\t\t\t\t'bundle.addSource() takes an object with a `content` property, which should be an instance of MagicString, and an optional `filename`'\n\t\t\t);\n\t\t}\n\n\t\t['filename', 'indentExclusionRanges', 'separator'].forEach((option) => {\n\t\t\tif (!hasOwnProp.call(source, option)) source[option] = source.content[option];\n\t\t});\n\n\t\tif (source.separator === undefined) {\n\t\t\t// TODO there's a bunch of this sort of thing, needs cleaning up\n\t\t\tsource.separator = this.separator;\n\t\t}\n\n\t\tif (source.filename) {\n\t\t\tif (!hasOwnProp.call(this.uniqueSourceIndexByFilename, source.filename)) {\n\t\t\t\tthis.uniqueSourceIndexByFilename[source.filename] = this.uniqueSources.length;\n\t\t\t\tthis.uniqueSources.push({ filename: source.filename, content: source.content.original });\n\t\t\t} else {\n\t\t\t\tconst uniqueSource = this.uniqueSources[this.uniqueSourceIndexByFilename[source.filename]];\n\t\t\t\tif (source.content.original !== uniqueSource.content) {\n\t\t\t\t\tthrow new Error(`Illegal source: same filename (${source.filename}), different contents`);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.sources.push(source);\n\t\treturn this;\n\t}\n\n\tappend(str, options) {\n\t\tthis.addSource({\n\t\t\tcontent: new MagicString(str),\n\t\t\tseparator: (options && options.separator) || '',\n\t\t});\n\n\t\treturn this;\n\t}\n\n\tclone() {\n\t\tconst bundle = new Bundle({\n\t\t\tintro: this.intro,\n\t\t\tseparator: this.separator,\n\t\t});\n\n\t\tthis.sources.forEach((source) => {\n\t\t\tbundle.addSource({\n\t\t\t\tfilename: source.filename,\n\t\t\t\tcontent: source.content.clone(),\n\t\t\t\tseparator: source.separator,\n\t\t\t});\n\t\t});\n\n\t\treturn bundle;\n\t}\n\n\tgenerateDecodedMap(options = {}) {\n\t\tconst names = [];\n\t\tthis.sources.forEach((source) => {\n\t\t\tObject.keys(source.content.storedNames).forEach((name) => {\n\t\t\t\tif (!~names.indexOf(name)) names.push(name);\n\t\t\t});\n\t\t});\n\n\t\tconst mappings = new Mappings(options.hires);\n\n\t\tif (this.intro) {\n\t\t\tmappings.advance(this.intro);\n\t\t}\n\n\t\tthis.sources.forEach((source, i) => {\n\t\t\tif (i > 0) {\n\t\t\t\tmappings.advance(this.separator);\n\t\t\t}\n\n\t\t\tconst sourceIndex = source.filename ? this.uniqueSourceIndexByFilename[source.filename] : -1;\n\t\t\tconst magicString = source.content;\n\t\t\tconst locate = getLocator(magicString.original);\n\n\t\t\tif (magicString.intro) {\n\t\t\t\tmappings.advance(magicString.intro);\n\t\t\t}\n\n\t\t\tmagicString.firstChunk.eachNext((chunk) => {\n\t\t\t\tconst loc = locate(chunk.start);\n\n\t\t\t\tif (chunk.intro.length) mappings.advance(chunk.intro);\n\n\t\t\t\tif (source.filename) {\n\t\t\t\t\tif (chunk.edited) {\n\t\t\t\t\t\tmappings.addEdit(\n\t\t\t\t\t\t\tsourceIndex,\n\t\t\t\t\t\t\tchunk.content,\n\t\t\t\t\t\t\tloc,\n\t\t\t\t\t\t\tchunk.storeName ? names.indexOf(chunk.original) : -1\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmappings.addUneditedChunk(\n\t\t\t\t\t\t\tsourceIndex,\n\t\t\t\t\t\t\tchunk,\n\t\t\t\t\t\t\tmagicString.original,\n\t\t\t\t\t\t\tloc,\n\t\t\t\t\t\t\tmagicString.sourcemapLocations\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tmappings.advance(chunk.content);\n\t\t\t\t}\n\n\t\t\t\tif (chunk.outro.length) mappings.advance(chunk.outro);\n\t\t\t});\n\n\t\t\tif (magicString.outro) {\n\t\t\t\tmappings.advance(magicString.outro);\n\t\t\t}\n\t\t});\n\n\t\treturn {\n\t\t\tfile: options.file ? options.file.split(/[/\\\\]/).pop() : null,\n\t\t\tsources: this.uniqueSources.map((source) => {\n\t\t\t\treturn options.file ? getRelativePath(options.file, source.filename) : source.filename;\n\t\t\t}),\n\t\t\tsourcesContent: this.uniqueSources.map((source) => {\n\t\t\t\treturn options.includeContent ? source.content : null;\n\t\t\t}),\n\t\t\tnames,\n\t\t\tmappings: mappings.raw,\n\t\t};\n\t}\n\n\tgenerateMap(options) {\n\t\treturn new SourceMap(this.generateDecodedMap(options));\n\t}\n\n\tgetIndentString() {\n\t\tconst indentStringCounts = {};\n\n\t\tthis.sources.forEach((source) => {\n\t\t\tconst indentStr = source.content._getRawIndentString();\n\n\t\t\tif (indentStr === null) return;\n\n\t\t\tif (!indentStringCounts[indentStr]) indentStringCounts[indentStr] = 0;\n\t\t\tindentStringCounts[indentStr] += 1;\n\t\t});\n\n\t\treturn (\n\t\t\tObject.keys(indentStringCounts).sort((a, b) => {\n\t\t\t\treturn indentStringCounts[a] - indentStringCounts[b];\n\t\t\t})[0] || '\\t'\n\t\t);\n\t}\n\n\tindent(indentStr) {\n\t\tif (!arguments.length) {\n\t\t\tindentStr = this.getIndentString();\n\t\t}\n\n\t\tif (indentStr === '') return this; // noop\n\n\t\tlet trailingNewline = !this.intro || this.intro.slice(-1) === '\\n';\n\n\t\tthis.sources.forEach((source, i) => {\n\t\t\tconst separator = source.separator !== undefined ? source.separator : this.separator;\n\t\t\tconst indentStart = trailingNewline || (i > 0 && /\\r?\\n$/.test(separator));\n\n\t\t\tsource.content.indent(indentStr, {\n\t\t\t\texclude: source.indentExclusionRanges,\n\t\t\t\tindentStart, //: trailingNewline || /\\r?\\n$/.test( separator )  //true///\\r?\\n/.test( separator )\n\t\t\t});\n\n\t\t\ttrailingNewline = source.content.lastChar() === '\\n';\n\t\t});\n\n\t\tif (this.intro) {\n\t\t\tthis.intro =\n\t\t\t\tindentStr +\n\t\t\t\tthis.intro.replace(/^[^\\n]/gm, (match, index) => {\n\t\t\t\t\treturn index > 0 ? indentStr + match : match;\n\t\t\t\t});\n\t\t}\n\n\t\treturn this;\n\t}\n\n\tprepend(str) {\n\t\tthis.intro = str + this.intro;\n\t\treturn this;\n\t}\n\n\ttoString() {\n\t\tconst body = this.sources\n\t\t\t.map((source, i) => {\n\t\t\t\tconst separator = source.separator !== undefined ? source.separator : this.separator;\n\t\t\t\tconst str = (i > 0 ? separator : '') + source.content.toString();\n\n\t\t\t\treturn str;\n\t\t\t})\n\t\t\t.join('');\n\n\t\treturn this.intro + body;\n\t}\n\n\tisEmpty() {\n\t\tif (this.intro.length && this.intro.trim()) return false;\n\t\tif (this.sources.some((source) => !source.content.isEmpty())) return false;\n\t\treturn true;\n\t}\n\n\tlength() {\n\t\treturn this.sources.reduce(\n\t\t\t(length, source) => length + source.content.length(),\n\t\t\tthis.intro.length\n\t\t);\n\t}\n\n\ttrimLines() {\n\t\treturn this.trim('[\\\\r\\\\n]');\n\t}\n\n\ttrim(charType) {\n\t\treturn this.trimStart(charType).trimEnd(charType);\n\t}\n\n\ttrimStart(charType) {\n\t\tconst rx = new RegExp('^' + (charType || '\\\\s') + '+');\n\t\tthis.intro = this.intro.replace(rx, '');\n\n\t\tif (!this.intro) {\n\t\t\tlet source;\n\t\t\tlet i = 0;\n\n\t\t\tdo {\n\t\t\t\tsource = this.sources[i++];\n\t\t\t\tif (!source) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} while (!source.content.trimStartAborted(charType));\n\t\t}\n\n\t\treturn this;\n\t}\n\n\ttrimEnd(charType) {\n\t\tconst rx = new RegExp((charType || '\\\\s') + '+$');\n\n\t\tlet source;\n\t\tlet i = this.sources.length - 1;\n\n\t\tdo {\n\t\t\tsource = this.sources[i--];\n\t\t\tif (!source) {\n\t\t\t\tthis.intro = this.intro.replace(rx, '');\n\t\t\t\tbreak;\n\t\t\t}\n\t\t} while (!source.content.trimEndAborted(charType));\n\n\t\treturn this;\n\t}\n}\n\nMagicString.Bundle = Bundle;\nMagicString.SourceMap = SourceMap;\nMagicString.default = MagicString; // work around TypeScript bug https://github.com/Rich-Harris/magic-string/pull/121\n\nmodule.exports = MagicString;\n//# sourceMappingURL=magic-string.cjs.js.map\n/dist/magic-string.cjs.js.map\u0000\u0001[{\"version\":3,\"file\":\"magic-string.cjs.js\",\"sources\":[\"../src/BitSet.js\",\"../src/Chunk.js\",\"../src/SourceMap.js\",\"../src/utils/guessIndent.js\",\"../src/utils/getRelativePath.js\",\"../src/utils/isObject.js\",\"../src/utils/getLocator.js\",\"../src/utils/Mappings.js\",\"../src/MagicString.js\",\"../src/Bundle.js\",\"../src/index-legacy.js\"],\"sourcesContent\":[\"export default class BitSet {\\n\\tconstructor(arg) {\\n\\t\\tthis.bits = arg instanceof BitSet ? arg.bits.slice() : [];\\n\\t}\\n\\n\\tadd(n) {\\n\\t\\tthis.bits[n >> 5] |= 1 << (n & 31);\\n\\t}\\n\\n\\thas(n) {\\n\\t\\treturn !!(this.bits[n >> 5] & (1 << (n & 31)));\\n\\t}\\n}\\n\",\"export default class Chunk {\\n\\tconstructor(start, end, content) {\\n\\t\\tthis.start = start;\\n\\t\\tthis.end = end;\\n\\t\\tthis.original = content;\\n\\n\\t\\tthis.intro = '';\\n\\t\\tthis.outro = '';\\n\\n\\t\\tthis.content = content;\\n\\t\\tthis.storeName = false;\\n\\t\\tthis.edited = false;\\n\\n\\t\\tif (DEBUG) {\\n\\t\\t\\t// we make these non-enumerable, for sanity while debugging\\n\\t\\t\\tObject.defineProperties(this, {\\n\\t\\t\\t\\tprevious: { writable: true, value: null },\\n\\t\\t\\t\\tnext: { writable: true, value: null },\\n\\t\\t\\t});\\n\\t\\t} else {\\n\\t\\t\\tthis.previous = null;\\n\\t\\t\\tthis.next = null;\\n\\t\\t}\\n\\t}\\n\\n\\tappendLeft(content) {\\n\\t\\tthis.outro += content;\\n\\t}\\n\\n\\tappendRight(content) {\\n\\t\\tthis.intro = this.intro + content;\\n\\t}\\n\\n\\tclone() {\\n\\t\\tconst chunk = new Chunk(this.start, this.end, this.original);\\n\\n\\t\\tchunk.intro = this.intro;\\n\\t\\tchunk.outro = this.outro;\\n\\t\\tchunk.content = this.content;\\n\\t\\tchunk.storeName = this.storeName;\\n\\t\\tchunk.edited = this.edited;\\n\\n\\t\\treturn chunk;\\n\\t}\\n\\n\\tcontains(index) {\\n\\t\\treturn this.start < index && index < this.end;\\n\\t}\\n\\n\\teachNext(fn) {\\n\\t\\tlet chunk = this;\\n\\t\\twhile (chunk) {\\n\\t\\t\\tfn(chunk);\\n\\t\\t\\tchunk = chunk.next;\\n\\t\\t}\\n\\t}\\n\\n\\teachPrevious(fn) {\\n\\t\\tlet chunk = this;\\n\\t\\twhile (chunk) {\\n\\t\\t\\tfn(chunk);\\n\\t\\t\\tchunk = chunk.previous;\\n\\t\\t}\\n\\t}\\n\\n\\tedit(content, storeName, contentOnly) {\\n\\t\\tthis.content = content;\\n\\t\\tif (!contentOnly) {\\n\\t\\t\\tthis.intro = '';\\n\\t\\t\\tthis.outro = '';\\n\\t\\t}\\n\\t\\tthis.storeName = storeName;\\n\\n\\t\\tthis.edited = true;\\n\\n\\t\\treturn this;\\n\\t}\\n\\n\\tprependLeft(content) {\\n\\t\\tthis.outro = content + this.outro;\\n\\t}\\n\\n\\tprependRight(content) {\\n\\t\\tthis.intro = content + this.intro;\\n\\t}\\n\\n\\tsplit(index) {\\n\\t\\tconst sliceIndex = index - this.start;\\n\\n\\t\\tconst originalBefore = this.original.slice(0, sliceIndex);\\n\\t\\tconst originalAfter = this.original.slice(sliceIndex);\\n\\n\\t\\tthis.original = originalBefore;\\n\\n\\t\\tconst newChunk = new Chunk(index, this.end, originalAfter);\\n\\t\\tnewChunk.outro = this.outro;\\n\\t\\tthis.outro = '';\\n\\n\\t\\tthis.end = index;\\n\\n\\t\\tif (this.edited) {\\n\\t\\t\\t// TODO is this block necessary?...\\n\\t\\t\\tnewChunk.edit('', false);\\n\\t\\t\\tthis.content = '';\\n\\t\\t} else {\\n\\t\\t\\tthis.content = originalBefore;\\n\\t\\t}\\n\\n\\t\\tnewChunk.next = this.next;\\n\\t\\tif (newChunk.next) newChunk.next.previous = newChunk;\\n\\t\\tnewChunk.previous = this;\\n\\t\\tthis.next = newChunk;\\n\\n\\t\\treturn newChunk;\\n\\t}\\n\\n\\ttoString() {\\n\\t\\treturn this.intro + this.content + this.outro;\\n\\t}\\n\\n\\ttrimEnd(rx) {\\n\\t\\tthis.outro = this.outro.replace(rx, '');\\n\\t\\tif (this.outro.length) return true;\\n\\n\\t\\tconst trimmed = this.content.replace(rx, '');\\n\\n\\t\\tif (trimmed.length) {\\n\\t\\t\\tif (trimmed !== this.content) {\\n\\t\\t\\t\\tthis.split(this.start + trimmed.length).edit('', undefined, true);\\n\\t\\t\\t}\\n\\t\\t\\treturn true;\\n\\t\\t} else {\\n\\t\\t\\tthis.edit('', undefined, true);\\n\\n\\t\\t\\tthis.intro = this.intro.replace(rx, '');\\n\\t\\t\\tif (this.intro.length) return true;\\n\\t\\t}\\n\\t}\\n\\n\\ttrimStart(rx) {\\n\\t\\tthis.intro = this.intro.replace(rx, '');\\n\\t\\tif (this.intro.length) return true;\\n\\n\\t\\tconst trimmed = this.content.replace(rx, '');\\n\\n\\t\\tif (trimmed.length) {\\n\\t\\t\\tif (trimmed !== this.content) {\\n\\t\\t\\t\\tthis.split(this.end - trimmed.length);\\n\\t\\t\\t\\tthis.edit('', undefined, true);\\n\\t\\t\\t}\\n\\t\\t\\treturn true;\\n\\t\\t} else {\\n\\t\\t\\tthis.edit('', undefined, true);\\n\\n\\t\\t\\tthis.outro = this.outro.replace(rx, '');\\n\\t\\t\\tif (this.outro.length) return true;\\n\\t\\t}\\n\\t}\\n}\\n\",\"import { encode } from '@jridgewell/sourcemap-codec';\\n\\nfunction getBtoa () {\\n\\tif (typeof window !== 'undefined' && typeof window.btoa === 'function') {\\n\\t\\treturn (str) => window.btoa(unescape(encodeURIComponent(str)));\\n\\t} else if (typeof Buffer === 'function') {\\n\\t\\treturn (str) => Buffer.from(str, 'utf-8').toString('base64');\\n\\t} else {\\n\\t\\treturn () => {\\n\\t\\t\\tthrow new Error('Unsupported environment: `window.btoa` or `Buffer` should be supported.');\\n\\t\\t};\\n\\t}\\n}\\n\\nconst btoa = /*#__PURE__*/ getBtoa();\\n\\nexport default class SourceMap {\\n\\tconstructor(properties) {\\n\\t\\tthis.version = 3;\\n\\t\\tthis.file = properties.file;\\n\\t\\tthis.sources = properties.sources;\\n\\t\\tthis.sourcesContent = properties.sourcesContent;\\n\\t\\tthis.names = properties.names;\\n\\t\\tthis.mappings = encode(properties.mappings);\\n\\t\\tif (typeof properties.x_google_ignoreList !== 'undefined') {\\n\\t\\t\\tthis.x_google_ignoreList = properties.x_google_ignoreList;\\n\\t\\t}\\n\\t}\\n\\n\\ttoString() {\\n\\t\\treturn JSON.stringify(this);\\n\\t}\\n\\n\\ttoUrl() {\\n\\t\\treturn 'data:application/json;charset=utf-8;base64,' + btoa(this.toString());\\n\\t}\\n}\\n\",\"export default function guessIndent(code) {\\n\\tconst lines = code.split('\\\\n');\\n\\n\\tconst tabbed = lines.filter((line) => /^\\\\t+/.test(line));\\n\\tconst spaced = lines.filter((line) => /^ {2,}/.test(line));\\n\\n\\tif (tabbed.length === 0 && spaced.length === 0) {\\n\\t\\treturn null;\\n\\t}\\n\\n\\t// More lines tabbed than spaced? Assume tabs, and\\n\\t// default to tabs in the case of a tie (or nothing\\n\\t// to go on)\\n\\tif (tabbed.length >= spaced.length) {\\n\\t\\treturn '\\\\t';\\n\\t}\\n\\n\\t// Otherwise, we need to guess the multiple\\n\\tconst min = spaced.reduce((previous, current) => {\\n\\t\\tconst numSpaces = /^ +/.exec(current)[0].length;\\n\\t\\treturn Math.min(numSpaces, previous);\\n\\t}, Infinity);\\n\\n\\treturn new Array(min + 1).join(' ');\\n}\\n\",\"export default function getRelativePath(from, to) {\\n\\tconst fromParts = from.split(/[/\\\\\\\\]/);\\n\\tconst toParts = to.split(/[/\\\\\\\\]/);\\n\\n\\tfromParts.pop(); // get dirname\\n\\n\\twhile (fromParts[0] === toParts[0]) {\\n\\t\\tfromParts.shift();\\n\\t\\ttoParts.shift();\\n\\t}\\n\\n\\tif (fromParts.length) {\\n\\t\\tlet i = fromParts.length;\\n\\t\\twhile (i--) fromParts[i] = '..';\\n\\t}\\n\\n\\treturn fromParts.concat(toParts).join('/');\\n}\\n\",\"const toString = Object.prototype.toString;\\n\\nexport default function isObject(thing) {\\n\\treturn toString.call(thing) === '[object Object]';\\n}\\n\",\"export default function getLocator(source) {\\n\\tconst originalLines = source.split('\\\\n');\\n\\tconst lineOffsets = [];\\n\\n\\tfor (let i = 0, pos = 0; i < originalLines.length; i++) {\\n\\t\\tlineOffsets.push(pos);\\n\\t\\tpos += originalLines[i].length + 1;\\n\\t}\\n\\n\\treturn function locate(index) {\\n\\t\\tlet i = 0;\\n\\t\\tlet j = lineOffsets.length;\\n\\t\\twhile (i < j) {\\n\\t\\t\\tconst m = (i + j) >> 1;\\n\\t\\t\\tif (index < lineOffsets[m]) {\\n\\t\\t\\t\\tj = m;\\n\\t\\t\\t} else {\\n\\t\\t\\t\\ti = m + 1;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tconst line = i - 1;\\n\\t\\tconst column = index - lineOffsets[line];\\n\\t\\treturn { line, column };\\n\\t};\\n}\\n\",\"export default class Mappings {\\n\\tconstructor(hires) {\\n\\t\\tthis.hires = hires;\\n\\t\\tthis.generatedCodeLine = 0;\\n\\t\\tthis.generatedCodeColumn = 0;\\n\\t\\tthis.raw = [];\\n\\t\\tthis.rawSegments = this.raw[this.generatedCodeLine] = [];\\n\\t\\tthis.pending = null;\\n\\t}\\n\\n\\taddEdit(sourceIndex, content, loc, nameIndex) {\\n\\t\\tif (content.length) {\\n\\t\\t\\tconst segment = [this.generatedCodeColumn, sourceIndex, loc.line, loc.column];\\n\\t\\t\\tif (nameIndex >= 0) {\\n\\t\\t\\t\\tsegment.push(nameIndex);\\n\\t\\t\\t}\\n\\t\\t\\tthis.rawSegments.push(segment);\\n\\t\\t} else if (this.pending) {\\n\\t\\t\\tthis.rawSegments.push(this.pending);\\n\\t\\t}\\n\\n\\t\\tthis.advance(content);\\n\\t\\tthis.pending = null;\\n\\t}\\n\\n\\taddUneditedChunk(sourceIndex, chunk, original, loc, sourcemapLocations) {\\n\\t\\tlet originalCharIndex = chunk.start;\\n\\t\\tlet first = true;\\n\\n\\t\\twhile (originalCharIndex < chunk.end) {\\n\\t\\t\\tif (this.hires || first || sourcemapLocations.has(originalCharIndex)) {\\n\\t\\t\\t\\tthis.rawSegments.push([this.generatedCodeColumn, sourceIndex, loc.line, loc.column]);\\n\\t\\t\\t}\\n\\n\\t\\t\\tif (original[originalCharIndex] === '\\\\n') {\\n\\t\\t\\t\\tloc.line += 1;\\n\\t\\t\\t\\tloc.column = 0;\\n\\t\\t\\t\\tthis.generatedCodeLine += 1;\\n\\t\\t\\t\\tthis.raw[this.generatedCodeLine] = this.rawSegments = [];\\n\\t\\t\\t\\tthis.generatedCodeColumn = 0;\\n\\t\\t\\t\\tfirst = true;\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tloc.column += 1;\\n\\t\\t\\t\\tthis.generatedCodeColumn += 1;\\n\\t\\t\\t\\tfirst = false;\\n\\t\\t\\t}\\n\\n\\t\\t\\toriginalCharIndex += 1;\\n\\t\\t}\\n\\n\\t\\tthis.pending = null;\\n\\t}\\n\\n\\tadvance(str) {\\n\\t\\tif (!str) return;\\n\\n\\t\\tconst lines = str.split('\\\\n');\\n\\n\\t\\tif (lines.length > 1) {\\n\\t\\t\\tfor (let i = 0; i < lines.length - 1; i++) {\\n\\t\\t\\t\\tthis.generatedCodeLine++;\\n\\t\\t\\t\\tthis.raw[this.generatedCodeLine] = this.rawSegments = [];\\n\\t\\t\\t}\\n\\t\\t\\tthis.generatedCodeColumn = 0;\\n\\t\\t}\\n\\n\\t\\tthis.generatedCodeColumn += lines[lines.length - 1].length;\\n\\t}\\n}\\n\",\"import BitSet from './BitSet.js';\\nimport Chunk from './Chunk.js';\\nimport SourceMap from './SourceMap.js';\\nimport guessIndent from './utils/guessIndent.js';\\nimport getRelativePath from './utils/getRelativePath.js';\\nimport isObject from './utils/isObject.js';\\nimport getLocator from './utils/getLocator.js';\\nimport Mappings from './utils/Mappings.js';\\nimport Stats from './utils/Stats.js';\\n\\nconst n = '\\\\n';\\n\\nconst warned = {\\n\\tinsertLeft: false,\\n\\tinsertRight: false,\\n\\tstoreName: false,\\n};\\n\\nexport default class MagicString {\\n\\tconstructor(string, options = {}) {\\n\\t\\tconst chunk = new Chunk(0, string.length, string);\\n\\n\\t\\tObject.defineProperties(this, {\\n\\t\\t\\toriginal: { writable: true, value: string },\\n\\t\\t\\toutro: { writable: true, value: '' },\\n\\t\\t\\tintro: { writable: true, value: '' },\\n\\t\\t\\tfirstChunk: { writable: true, value: chunk },\\n\\t\\t\\tlastChunk: { writable: true, value: chunk },\\n\\t\\t\\tlastSearchedChunk: { writable: true, value: chunk },\\n\\t\\t\\tbyStart: { writable: true, value: {} },\\n\\t\\t\\tbyEnd: { writable: true, value: {} },\\n\\t\\t\\tfilename: { writable: true, value: options.filename },\\n\\t\\t\\tindentExclusionRanges: { writable: true, value: options.indentExclusionRanges },\\n\\t\\t\\tsourcemapLocations: { writable: true, value: new BitSet() },\\n\\t\\t\\tstoredNames: { writable: true, value: {} },\\n\\t\\t\\tindentStr: { writable: true, value: undefined },\\n\\t\\t});\\n\\n\\t\\tif (DEBUG) {\\n\\t\\t\\tObject.defineProperty(this, 'stats', { value: new Stats() });\\n\\t\\t}\\n\\n\\t\\tthis.byStart[0] = chunk;\\n\\t\\tthis.byEnd[string.length] = chunk;\\n\\t}\\n\\n\\taddSourcemapLocation(char) {\\n\\t\\tthis.sourcemapLocations.add(char);\\n\\t}\\n\\n\\tappend(content) {\\n\\t\\tif (typeof content !== 'string') throw new TypeError('outro content must be a string');\\n\\n\\t\\tthis.outro += content;\\n\\t\\treturn this;\\n\\t}\\n\\n\\tappendLeft(index, content) {\\n\\t\\tif (typeof content !== 'string') throw new TypeError('inserted content must be a string');\\n\\n\\t\\tif (DEBUG) this.stats.time('appendLeft');\\n\\n\\t\\tthis._split(index);\\n\\n\\t\\tconst chunk = this.byEnd[index];\\n\\n\\t\\tif (chunk) {\\n\\t\\t\\tchunk.appendLeft(content);\\n\\t\\t} else {\\n\\t\\t\\tthis.intro += content;\\n\\t\\t}\\n\\n\\t\\tif (DEBUG) this.stats.timeEnd('appendLeft');\\n\\t\\treturn this;\\n\\t}\\n\\n\\tappendRight(index, content) {\\n\\t\\tif (typeof content !== 'string') throw new TypeError('inserted content must be a string');\\n\\n\\t\\tif (DEBUG) this.stats.time('appendRight');\\n\\n\\t\\tthis._split(index);\\n\\n\\t\\tconst chunk = this.byStart[index];\\n\\n\\t\\tif (chunk) {\\n\\t\\t\\tchunk.appendRight(content);\\n\\t\\t} else {\\n\\t\\t\\tthis.outro += content;\\n\\t\\t}\\n\\n\\t\\tif (DEBUG) this.stats.timeEnd('appendRight');\\n\\t\\treturn this;\\n\\t}\\n\\n\\tclone() {\\n\\t\\tconst cloned = new MagicString(this.original, { filename: this.filename });\\n\\n\\t\\tlet originalChunk = this.firstChunk;\\n\\t\\tlet clonedChunk = (cloned.firstChunk = cloned.lastSearchedChunk = originalChunk.clone());\\n\\n\\t\\twhile (originalChunk) {\\n\\t\\t\\tcloned.byStart[clonedChunk.start] = clonedChunk;\\n\\t\\t\\tcloned.byEnd[clonedChunk.end] = clonedChunk;\\n\\n\\t\\t\\tconst nextOriginalChunk = originalChunk.next;\\n\\t\\t\\tconst nextClonedChunk = nextOriginalChunk && nextOriginalChunk.clone();\\n\\n\\t\\t\\tif (nextClonedChunk) {\\n\\t\\t\\t\\tclonedChunk.next = nextClonedChunk;\\n\\t\\t\\t\\tnextClonedChunk.previous = clonedChunk;\\n\\n\\t\\t\\t\\tclonedChunk = nextClonedChunk;\\n\\t\\t\\t}\\n\\n\\t\\t\\toriginalChunk = nextOriginalChunk;\\n\\t\\t}\\n\\n\\t\\tcloned.lastChunk = clonedChunk;\\n\\n\\t\\tif (this.indentExclusionRanges) {\\n\\t\\t\\tcloned.indentExclusionRanges = this.indentExclusionRanges.slice();\\n\\t\\t}\\n\\n\\t\\tcloned.sourcemapLocations = new BitSet(this.sourcemapLocations);\\n\\n\\t\\tcloned.intro = this.intro;\\n\\t\\tcloned.outro = this.outro;\\n\\n\\t\\treturn cloned;\\n\\t}\\n\\n\\tgenerateDecodedMap(options) {\\n\\t\\toptions = options || {};\\n\\n\\t\\tconst sourceIndex = 0;\\n\\t\\tconst names = Object.keys(this.storedNames);\\n\\t\\tconst mappings = new Mappings(options.hires);\\n\\n\\t\\tconst locate = getLocator(this.original);\\n\\n\\t\\tif (this.intro) {\\n\\t\\t\\tmappings.advance(this.intro);\\n\\t\\t}\\n\\n\\t\\tthis.firstChunk.eachNext((chunk) => {\\n\\t\\t\\tconst loc = locate(chunk.start);\\n\\n\\t\\t\\tif (chunk.intro.length) mappings.advance(chunk.intro);\\n\\n\\t\\t\\tif (chunk.edited) {\\n\\t\\t\\t\\tmappings.addEdit(\\n\\t\\t\\t\\t\\tsourceIndex,\\n\\t\\t\\t\\t\\tchunk.content,\\n\\t\\t\\t\\t\\tloc,\\n\\t\\t\\t\\t\\tchunk.storeName ? names.indexOf(chunk.original) : -1\\n\\t\\t\\t\\t);\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tmappings.addUneditedChunk(sourceIndex, chunk, this.original, loc, this.sourcemapLocations);\\n\\t\\t\\t}\\n\\n\\t\\t\\tif (chunk.outro.length) mappings.advance(chunk.outro);\\n\\t\\t});\\n\\n\\t\\treturn {\\n\\t\\t\\tfile: options.file ? options.file.split(/[/\\\\\\\\]/).pop() : null,\\n\\t\\t\\tsources: [options.source ? getRelativePath(options.file || '', options.source) : null],\\n\\t\\t\\tsourcesContent: options.includeContent ? [this.original] : [null],\\n\\t\\t\\tnames,\\n\\t\\t\\tmappings: mappings.raw,\\n\\t\\t};\\n\\t}\\n\\n\\tgenerateMap(options) {\\n\\t\\treturn new SourceMap(this.generateDecodedMap(options));\\n\\t}\\n\\n\\t_ensureindentStr() {\\n\\t\\tif (this.indentStr === undefined) {\\n\\t\\t\\tthis.indentStr = guessIndent(this.original);\\n\\t\\t}\\n\\t}\\n\\n\\t_getRawIndentString() {\\n\\t\\tthis._ensureindentStr();\\n\\t\\treturn this.indentStr;\\n\\t}\\n\\n\\tgetIndentString() {\\n\\t\\tthis._ensureindentStr();\\n\\t\\treturn this.indentStr === null ? '\\\\t' : this.indentStr;\\n\\t}\\n\\n\\tindent(indentStr, options) {\\n\\t\\tconst pattern = /^[^\\\\r\\\\n]/gm;\\n\\n\\t\\tif (isObject(indentStr)) {\\n\\t\\t\\toptions = indentStr;\\n\\t\\t\\tindentStr = undefined;\\n\\t\\t}\\n\\n\\t\\tif (indentStr === undefined) {\\n\\t\\t\\tthis._ensureindentStr();\\n\\t\\t\\tindentStr = this.indentStr || '\\\\t';\\n\\t\\t}\\n\\n\\t\\tif (indentStr === '') return this; // noop\\n\\n\\t\\toptions = options || {};\\n\\n\\t\\t// Process exclusion ranges\\n\\t\\tconst isExcluded = {};\\n\\n\\t\\tif (options.exclude) {\\n\\t\\t\\tconst exclusions =\\n\\t\\t\\t\\ttypeof options.exclude[0] === 'number' ? [options.exclude] : options.exclude;\\n\\t\\t\\texclusions.forEach((exclusion) => {\\n\\t\\t\\t\\tfor (let i = exclusion[0]; i < exclusion[1]; i += 1) {\\n\\t\\t\\t\\t\\tisExcluded[i] = true;\\n\\t\\t\\t\\t}\\n\\t\\t\\t});\\n\\t\\t}\\n\\n\\t\\tlet shouldIndentNextCharacter = options.indentStart !== false;\\n\\t\\tconst replacer = (match) => {\\n\\t\\t\\tif (shouldIndentNextCharacter) return `${indentStr}${match}`;\\n\\t\\t\\tshouldIndentNextCharacter = true;\\n\\t\\t\\treturn match;\\n\\t\\t};\\n\\n\\t\\tthis.intro = this.intro.replace(pattern, replacer);\\n\\n\\t\\tlet charIndex = 0;\\n\\t\\tlet chunk = this.firstChunk;\\n\\n\\t\\twhile (chunk) {\\n\\t\\t\\tconst end = chunk.end;\\n\\n\\t\\t\\tif (chunk.edited) {\\n\\t\\t\\t\\tif (!isExcluded[charIndex]) {\\n\\t\\t\\t\\t\\tchunk.content = chunk.content.replace(pattern, replacer);\\n\\n\\t\\t\\t\\t\\tif (chunk.content.length) {\\n\\t\\t\\t\\t\\t\\tshouldIndentNextCharacter = chunk.content[chunk.content.length - 1] === '\\\\n';\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tcharIndex = chunk.start;\\n\\n\\t\\t\\t\\twhile (charIndex < end) {\\n\\t\\t\\t\\t\\tif (!isExcluded[charIndex]) {\\n\\t\\t\\t\\t\\t\\tconst char = this.original[charIndex];\\n\\n\\t\\t\\t\\t\\t\\tif (char === '\\\\n') {\\n\\t\\t\\t\\t\\t\\t\\tshouldIndentNextCharacter = true;\\n\\t\\t\\t\\t\\t\\t} else if (char !== '\\\\r' && shouldIndentNextCharacter) {\\n\\t\\t\\t\\t\\t\\t\\tshouldIndentNextCharacter = false;\\n\\n\\t\\t\\t\\t\\t\\t\\tif (charIndex === chunk.start) {\\n\\t\\t\\t\\t\\t\\t\\t\\tchunk.prependRight(indentStr);\\n\\t\\t\\t\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\t\\t\\tthis._splitChunk(chunk, charIndex);\\n\\t\\t\\t\\t\\t\\t\\t\\tchunk = chunk.next;\\n\\t\\t\\t\\t\\t\\t\\t\\tchunk.prependRight(indentStr);\\n\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t\\tcharIndex += 1;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\n\\t\\t\\tcharIndex = chunk.end;\\n\\t\\t\\tchunk = chunk.next;\\n\\t\\t}\\n\\n\\t\\tthis.outro = this.outro.replace(pattern, replacer);\\n\\n\\t\\treturn this;\\n\\t}\\n\\n\\tinsert() {\\n\\t\\tthrow new Error(\\n\\t\\t\\t'magicString.insert(...) is deprecated. Use prependRight(...) or appendLeft(...)'\\n\\t\\t);\\n\\t}\\n\\n\\tinsertLeft(index, content) {\\n\\t\\tif (!warned.insertLeft) {\\n\\t\\t\\tconsole.warn(\\n\\t\\t\\t\\t'magicString.insertLeft(...) is deprecated. Use magicString.appendLeft(...) instead'\\n\\t\\t\\t); // eslint-disable-line no-console\\n\\t\\t\\twarned.insertLeft = true;\\n\\t\\t}\\n\\n\\t\\treturn this.appendLeft(index, content);\\n\\t}\\n\\n\\tinsertRight(index, content) {\\n\\t\\tif (!warned.insertRight) {\\n\\t\\t\\tconsole.warn(\\n\\t\\t\\t\\t'magicString.insertRight(...) is deprecated. Use magicString.prependRight(...) instead'\\n\\t\\t\\t); // eslint-disable-line no-console\\n\\t\\t\\twarned.insertRight = true;\\n\\t\\t}\\n\\n\\t\\treturn this.prependRight(index, content);\\n\\t}\\n\\n\\tmove(start, end, index) {\\n\\t\\tif (index >= start && index <= end) throw new Error('Cannot move a selection inside itself');\\n\\n\\t\\tif (DEBUG) this.stats.time('move');\\n\\n\\t\\tthis._split(start);\\n\\t\\tthis._split(end);\\n\\t\\tthis._split(index);\\n\\n\\t\\tconst first = this.byStart[start];\\n\\t\\tconst last = this.byEnd[end];\\n\\n\\t\\tconst oldLeft = first.previous;\\n\\t\\tconst oldRight = last.next;\\n\\n\\t\\tconst newRight = this.byStart[index];\\n\\t\\tif (!newRight && last === this.lastChunk) return this;\\n\\t\\tconst newLeft = newRight ? newRight.previous : this.lastChunk;\\n\\n\\t\\tif (oldLeft) oldLeft.next = oldRight;\\n\\t\\tif (oldRight) oldRight.previous = oldLeft;\\n\\n\\t\\tif (newLeft) newLeft.next = first;\\n\\t\\tif (newRight) newRight.previous = last;\\n\\n\\t\\tif (!first.previous) this.firstChunk = last.next;\\n\\t\\tif (!last.next) {\\n\\t\\t\\tthis.lastChunk = first.previous;\\n\\t\\t\\tthis.lastChunk.next = null;\\n\\t\\t}\\n\\n\\t\\tfirst.previous = newLeft;\\n\\t\\tlast.next = newRight || null;\\n\\n\\t\\tif (!newLeft) this.firstChunk = first;\\n\\t\\tif (!newRight) this.lastChunk = last;\\n\\n\\t\\tif (DEBUG) this.stats.timeEnd('move');\\n\\t\\treturn this;\\n\\t}\\n\\n\\toverwrite(start, end, content, options) {\\n\\t\\toptions = options || {};\\n\\t\\treturn this.update(start, end, content, { ...options, overwrite: !options.contentOnly });\\n\\t}\\n\\n\\tupdate(start, end, content, options) {\\n\\t\\tif (typeof content !== 'string') throw new TypeError('replacement content must be a string');\\n\\n\\t\\twhile (start < 0) start += this.original.length;\\n\\t\\twhile (end < 0) end += this.original.length;\\n\\n\\t\\tif (end > this.original.length) throw new Error('end is out of bounds');\\n\\t\\tif (start === end)\\n\\t\\t\\tthrow new Error(\\n\\t\\t\\t\\t'Cannot overwrite a zero-length range – use appendLeft or prependRight instead'\\n\\t\\t\\t);\\n\\n\\t\\tif (DEBUG) this.stats.time('overwrite');\\n\\n\\t\\tthis._split(start);\\n\\t\\tthis._split(end);\\n\\n\\t\\tif (options === true) {\\n\\t\\t\\tif (!warned.storeName) {\\n\\t\\t\\t\\tconsole.warn(\\n\\t\\t\\t\\t\\t'The final argument to magicString.overwrite(...) should be an options object. See https://github.com/rich-harris/magic-string'\\n\\t\\t\\t\\t); // eslint-disable-line no-console\\n\\t\\t\\t\\twarned.storeName = true;\\n\\t\\t\\t}\\n\\n\\t\\t\\toptions = { storeName: true };\\n\\t\\t}\\n\\t\\tconst storeName = options !== undefined ? options.storeName : false;\\n\\t\\tconst overwrite = options !== undefined ? options.overwrite : false;\\n\\n\\t\\tif (storeName) {\\n\\t\\t\\tconst original = this.original.slice(start, end);\\n\\t\\t\\tObject.defineProperty(this.storedNames, original, {\\n\\t\\t\\t\\twritable: true,\\n\\t\\t\\t\\tvalue: true,\\n\\t\\t\\t\\tenumerable: true,\\n\\t\\t\\t});\\n\\t\\t}\\n\\n\\t\\tconst first = this.byStart[start];\\n\\t\\tconst last = this.byEnd[end];\\n\\n\\t\\tif (first) {\\n\\t\\t\\tlet chunk = first;\\n\\t\\t\\twhile (chunk !== last) {\\n\\t\\t\\t\\tif (chunk.next !== this.byStart[chunk.end]) {\\n\\t\\t\\t\\t\\tthrow new Error('Cannot overwrite across a split point');\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tchunk = chunk.next;\\n\\t\\t\\t\\tchunk.edit('', false);\\n\\t\\t\\t}\\n\\n\\t\\t\\tfirst.edit(content, storeName, !overwrite);\\n\\t\\t} else {\\n\\t\\t\\t// must be inserting at the end\\n\\t\\t\\tconst newChunk = new Chunk(start, end, '').edit(content, storeName);\\n\\n\\t\\t\\t// TODO last chunk in the array may not be the last chunk, if it's moved...\\n\\t\\t\\tlast.next = newChunk;\\n\\t\\t\\tnewChunk.previous = last;\\n\\t\\t}\\n\\n\\t\\tif (DEBUG) this.stats.timeEnd('overwrite');\\n\\t\\treturn this;\\n\\t}\\n\\n\\tprepend(content) {\\n\\t\\tif (typeof content !== 'string') throw new TypeError('outro content must be a string');\\n\\n\\t\\tthis.intro = content + this.intro;\\n\\t\\treturn this;\\n\\t}\\n\\n\\tprependLeft(index, content) {\\n\\t\\tif (typeof content !== 'string') throw new TypeError('inserted content must be a string');\\n\\n\\t\\tif (DEBUG) this.stats.time('insertRight');\\n\\n\\t\\tthis._split(index);\\n\\n\\t\\tconst chunk = this.byEnd[index];\\n\\n\\t\\tif (chunk) {\\n\\t\\t\\tchunk.prependLeft(content);\\n\\t\\t} else {\\n\\t\\t\\tthis.intro = content + this.intro;\\n\\t\\t}\\n\\n\\t\\tif (DEBUG) this.stats.timeEnd('insertRight');\\n\\t\\treturn this;\\n\\t}\\n\\n\\tprependRight(index, content) {\\n\\t\\tif (typeof content !== 'string') throw new TypeError('inserted content must be a string');\\n\\n\\t\\tif (DEBUG) this.stats.time('insertRight');\\n\\n\\t\\tthis._split(index);\\n\\n\\t\\tconst chunk = this.byStart[index];\\n\\n\\t\\tif (chunk) {\\n\\t\\t\\tchunk.prependRight(content);\\n\\t\\t} else {\\n\\t\\t\\tthis.outro = content + this.outro;\\n\\t\\t}\\n\\n\\t\\tif (DEBUG) this.stats.timeEnd('insertRight');\\n\\t\\treturn this;\\n\\t}\\n\\n\\tremove(start, end) {\\n\\t\\twhile (start < 0) start += this.original.length;\\n\\t\\twhile (end < 0) end += this.original.length;\\n\\n\\t\\tif (start === end) return this;\\n\\n\\t\\tif (start < 0 || end > this.original.length) throw new Error('Character is out of bounds');\\n\\t\\tif (start > end) throw new Error('end must be greater than start');\\n\\n\\t\\tif (DEBUG) this.stats.time('remove');\\n\\n\\t\\tthis._split(start);\\n\\t\\tthis._split(end);\\n\\n\\t\\tlet chunk = this.byStart[start];\\n\\n\\t\\twhile (chunk) {\\n\\t\\t\\tchunk.intro = '';\\n\\t\\t\\tchunk.outro = '';\\n\\t\\t\\tchunk.edit('');\\n\\n\\t\\t\\tchunk = end > chunk.end ? this.byStart[chunk.end] : null;\\n\\t\\t}\\n\\n\\t\\tif (DEBUG) this.stats.timeEnd('remove');\\n\\t\\treturn this;\\n\\t}\\n\\n\\tlastChar() {\\n\\t\\tif (this.outro.length) return this.outro[this.outro.length - 1];\\n\\t\\tlet chunk = this.lastChunk;\\n\\t\\tdo {\\n\\t\\t\\tif (chunk.outro.length) return chunk.outro[chunk.outro.length - 1];\\n\\t\\t\\tif (chunk.content.length) return chunk.content[chunk.content.length - 1];\\n\\t\\t\\tif (chunk.intro.length) return chunk.intro[chunk.intro.length - 1];\\n\\t\\t} while ((chunk = chunk.previous));\\n\\t\\tif (this.intro.length) return this.intro[this.intro.length - 1];\\n\\t\\treturn '';\\n\\t}\\n\\n\\tlastLine() {\\n\\t\\tlet lineIndex = this.outro.lastIndexOf(n);\\n\\t\\tif (lineIndex !== -1) return this.outro.substr(lineIndex + 1);\\n\\t\\tlet lineStr = this.outro;\\n\\t\\tlet chunk = this.lastChunk;\\n\\t\\tdo {\\n\\t\\t\\tif (chunk.outro.length > 0) {\\n\\t\\t\\t\\tlineIndex = chunk.outro.lastIndexOf(n);\\n\\t\\t\\t\\tif (lineIndex !== -1) return chunk.outro.substr(lineIndex + 1) + lineStr;\\n\\t\\t\\t\\tlineStr = chunk.outro + lineStr;\\n\\t\\t\\t}\\n\\n\\t\\t\\tif (chunk.content.length > 0) {\\n\\t\\t\\t\\tlineIndex = chunk.content.lastIndexOf(n);\\n\\t\\t\\t\\tif (lineIndex !== -1) return chunk.content.substr(lineIndex + 1) + lineStr;\\n\\t\\t\\t\\tlineStr = chunk.content + lineStr;\\n\\t\\t\\t}\\n\\n\\t\\t\\tif (chunk.intro.length > 0) {\\n\\t\\t\\t\\tlineIndex = chunk.intro.lastIndexOf(n);\\n\\t\\t\\t\\tif (lineIndex !== -1) return chunk.intro.substr(lineIndex + 1) + lineStr;\\n\\t\\t\\t\\tlineStr = chunk.intro + lineStr;\\n\\t\\t\\t}\\n\\t\\t} while ((chunk = chunk.previous));\\n\\t\\tlineIndex = this.intro.lastIndexOf(n);\\n\\t\\tif (lineIndex !== -1) return this.intro.substr(lineIndex + 1) + lineStr;\\n\\t\\treturn this.intro + lineStr;\\n\\t}\\n\\n\\tslice(start = 0, end = this.original.length) {\\n\\t\\twhile (start < 0) start += this.original.length;\\n\\t\\twhile (end < 0) end += this.original.length;\\n\\n\\t\\tlet result = '';\\n\\n\\t\\t// find start chunk\\n\\t\\tlet chunk = this.firstChunk;\\n\\t\\twhile (chunk && (chunk.start > start || chunk.end <= start)) {\\n\\t\\t\\t// found end chunk before start\\n\\t\\t\\tif (chunk.start < end && chunk.end >= end) {\\n\\t\\t\\t\\treturn result;\\n\\t\\t\\t}\\n\\n\\t\\t\\tchunk = chunk.next;\\n\\t\\t}\\n\\n\\t\\tif (chunk && chunk.edited && chunk.start !== start)\\n\\t\\t\\tthrow new Error(`Cannot use replaced character ${start} as slice start anchor.`);\\n\\n\\t\\tconst startChunk = chunk;\\n\\t\\twhile (chunk) {\\n\\t\\t\\tif (chunk.intro && (startChunk !== chunk || chunk.start === start)) {\\n\\t\\t\\t\\tresult += chunk.intro;\\n\\t\\t\\t}\\n\\n\\t\\t\\tconst containsEnd = chunk.start < end && chunk.end >= end;\\n\\t\\t\\tif (containsEnd && chunk.edited && chunk.end !== end)\\n\\t\\t\\t\\tthrow new Error(`Cannot use replaced character ${end} as slice end anchor.`);\\n\\n\\t\\t\\tconst sliceStart = startChunk === chunk ? start - chunk.start : 0;\\n\\t\\t\\tconst sliceEnd = containsEnd ? chunk.content.length + end - chunk.end : chunk.content.length;\\n\\n\\t\\t\\tresult += chunk.content.slice(sliceStart, sliceEnd);\\n\\n\\t\\t\\tif (chunk.outro && (!containsEnd || chunk.end === end)) {\\n\\t\\t\\t\\tresult += chunk.outro;\\n\\t\\t\\t}\\n\\n\\t\\t\\tif (containsEnd) {\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\t}\\n\\n\\t\\t\\tchunk = chunk.next;\\n\\t\\t}\\n\\n\\t\\treturn result;\\n\\t}\\n\\n\\t// TODO deprecate this? not really very useful\\n\\tsnip(start, end) {\\n\\t\\tconst clone = this.clone();\\n\\t\\tclone.remove(0, start);\\n\\t\\tclone.remove(end, clone.original.length);\\n\\n\\t\\treturn clone;\\n\\t}\\n\\n\\t_split(index) {\\n\\t\\tif (this.byStart[index] || this.byEnd[index]) return;\\n\\n\\t\\tif (DEBUG) this.stats.time('_split');\\n\\n\\t\\tlet chunk = this.lastSearchedChunk;\\n\\t\\tconst searchForward = index > chunk.end;\\n\\n\\t\\twhile (chunk) {\\n\\t\\t\\tif (chunk.contains(index)) return this._splitChunk(chunk, index);\\n\\n\\t\\t\\tchunk = searchForward ? this.byStart[chunk.end] : this.byEnd[chunk.start];\\n\\t\\t}\\n\\t}\\n\\n\\t_splitChunk(chunk, index) {\\n\\t\\tif (chunk.edited && chunk.content.length) {\\n\\t\\t\\t// zero-length edited chunks are a special case (overlapping replacements)\\n\\t\\t\\tconst loc = getLocator(this.original)(index);\\n\\t\\t\\tthrow new Error(\\n\\t\\t\\t\\t`Cannot split a chunk that has already been edited (${loc.line}:${loc.column} – \\\"${chunk.original}\\\")`\\n\\t\\t\\t);\\n\\t\\t}\\n\\n\\t\\tconst newChunk = chunk.split(index);\\n\\n\\t\\tthis.byEnd[index] = chunk;\\n\\t\\tthis.byStart[index] = newChunk;\\n\\t\\tthis.byEnd[newChunk.end] = newChunk;\\n\\n\\t\\tif (chunk === this.lastChunk) this.lastChunk = newChunk;\\n\\n\\t\\tthis.lastSearchedChunk = chunk;\\n\\t\\tif (DEBUG) this.stats.timeEnd('_split');\\n\\t\\treturn true;\\n\\t}\\n\\n\\ttoString() {\\n\\t\\tlet str = this.intro;\\n\\n\\t\\tlet chunk = this.firstChunk;\\n\\t\\twhile (chunk) {\\n\\t\\t\\tstr += chunk.toString();\\n\\t\\t\\tchunk = chunk.next;\\n\\t\\t}\\n\\n\\t\\treturn str + this.outro;\\n\\t}\\n\\n\\tisEmpty() {\\n\\t\\tlet chunk = this.firstChunk;\\n\\t\\tdo {\\n\\t\\t\\tif (\\n\\t\\t\\t\\t(chunk.intro.length && chunk.intro.trim()) ||\\n\\t\\t\\t\\t(chunk.content.length && chunk.content.trim()) ||\\n\\t\\t\\t\\t(chunk.outro.length && chunk.outro.trim())\\n\\t\\t\\t)\\n\\t\\t\\t\\treturn false;\\n\\t\\t} while ((chunk = chunk.next));\\n\\t\\treturn true;\\n\\t}\\n\\n\\tlength() {\\n\\t\\tlet chunk = this.firstChunk;\\n\\t\\tlet length = 0;\\n\\t\\tdo {\\n\\t\\t\\tlength += chunk.intro.length + chunk.content.length + chunk.outro.length;\\n\\t\\t} while ((chunk = chunk.next));\\n\\t\\treturn length;\\n\\t}\\n\\n\\ttrimLines() {\\n\\t\\treturn this.trim('[\\\\\\\\r\\\\\\\\n]');\\n\\t}\\n\\n\\ttrim(charType) {\\n\\t\\treturn this.trimStart(charType).trimEnd(charType);\\n\\t}\\n\\n\\ttrimEndAborted(charType) {\\n\\t\\tconst rx = new RegExp((charType || '\\\\\\\\s') + '+$');\\n\\n\\t\\tthis.outro = this.outro.replace(rx, '');\\n\\t\\tif (this.outro.length) return true;\\n\\n\\t\\tlet chunk = this.lastChunk;\\n\\n\\t\\tdo {\\n\\t\\t\\tconst end = chunk.end;\\n\\t\\t\\tconst aborted = chunk.trimEnd(rx);\\n\\n\\t\\t\\t// if chunk was trimmed, we have a new lastChunk\\n\\t\\t\\tif (chunk.end !== end) {\\n\\t\\t\\t\\tif (this.lastChunk === chunk) {\\n\\t\\t\\t\\t\\tthis.lastChunk = chunk.next;\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\tthis.byEnd[chunk.end] = chunk;\\n\\t\\t\\t\\tthis.byStart[chunk.next.start] = chunk.next;\\n\\t\\t\\t\\tthis.byEnd[chunk.next.end] = chunk.next;\\n\\t\\t\\t}\\n\\n\\t\\t\\tif (aborted) return true;\\n\\t\\t\\tchunk = chunk.previous;\\n\\t\\t} while (chunk);\\n\\n\\t\\treturn false;\\n\\t}\\n\\n\\ttrimEnd(charType) {\\n\\t\\tthis.trimEndAborted(charType);\\n\\t\\treturn this;\\n\\t}\\n\\ttrimStartAborted(charType) {\\n\\t\\tconst rx = new RegExp('^' + (charType || '\\\\\\\\s') + '+');\\n\\n\\t\\tthis.intro = this.intro.replace(rx, '');\\n\\t\\tif (this.intro.length) return true;\\n\\n\\t\\tlet chunk = this.firstChunk;\\n\\n\\t\\tdo {\\n\\t\\t\\tconst end = chunk.end;\\n\\t\\t\\tconst aborted = chunk.trimStart(rx);\\n\\n\\t\\t\\tif (chunk.end !== end) {\\n\\t\\t\\t\\t// special case...\\n\\t\\t\\t\\tif (chunk === this.lastChunk) this.lastChunk = chunk.next;\\n\\n\\t\\t\\t\\tthis.byEnd[chunk.end] = chunk;\\n\\t\\t\\t\\tthis.byStart[chunk.next.start] = chunk.next;\\n\\t\\t\\t\\tthis.byEnd[chunk.next.end] = chunk.next;\\n\\t\\t\\t}\\n\\n\\t\\t\\tif (aborted) return true;\\n\\t\\t\\tchunk = chunk.next;\\n\\t\\t} while (chunk);\\n\\n\\t\\treturn false;\\n\\t}\\n\\n\\ttrimStart(charType) {\\n\\t\\tthis.trimStartAborted(charType);\\n\\t\\treturn this;\\n\\t}\\n\\n\\thasChanged() {\\n\\t\\treturn this.original !== this.toString();\\n\\t}\\n\\n\\t_replaceRegexp(searchValue, replacement) {\\n\\t\\tfunction getReplacement(match, str) {\\n\\t\\t\\tif (typeof replacement === 'string') {\\n\\t\\t\\t\\treturn replacement.replace(/\\\\$(\\\\$|&|\\\\d+)/g, (_, i) => {\\n\\t\\t\\t\\t\\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace#specifying_a_string_as_a_parameter\\n\\t\\t\\t\\t\\tif (i === '$') return '$';\\n\\t\\t\\t\\t\\tif (i === '&') return match[0];\\n\\t\\t\\t\\t\\tconst num = +i;\\n\\t\\t\\t\\t\\tif (num < match.length) return match[+i];\\n\\t\\t\\t\\t\\treturn `$${i}`;\\n\\t\\t\\t\\t});\\n\\t\\t\\t} else {\\n\\t\\t\\t\\treturn replacement(...match, match.index, str, match.groups);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tfunction matchAll(re, str) {\\n\\t\\t\\tlet match;\\n\\t\\t\\tconst matches = [];\\n\\t\\t\\twhile ((match = re.exec(str))) {\\n\\t\\t\\t\\tmatches.push(match);\\n\\t\\t\\t}\\n\\t\\t\\treturn matches;\\n\\t\\t}\\n\\t\\tif (searchValue.global) {\\n\\t\\t\\tconst matches = matchAll(searchValue, this.original);\\n\\t\\t\\tmatches.forEach((match) => {\\n\\t\\t\\t\\tif (match.index != null)\\n\\t\\t\\t\\t\\tthis.overwrite(\\n\\t\\t\\t\\t\\t\\tmatch.index,\\n\\t\\t\\t\\t\\t\\tmatch.index + match[0].length,\\n\\t\\t\\t\\t\\t\\tgetReplacement(match, this.original)\\n\\t\\t\\t\\t\\t);\\n\\t\\t\\t});\\n\\t\\t} else {\\n\\t\\t\\tconst match = this.original.match(searchValue);\\n\\t\\t\\tif (match && match.index != null)\\n\\t\\t\\t\\tthis.overwrite(\\n\\t\\t\\t\\t\\tmatch.index,\\n\\t\\t\\t\\t\\tmatch.index + match[0].length,\\n\\t\\t\\t\\t\\tgetReplacement(match, this.original)\\n\\t\\t\\t\\t);\\n\\t\\t}\\n\\t\\treturn this;\\n\\t}\\n\\n\\t_replaceString(string, replacement) {\\n\\t\\tconst { original } = this;\\n\\t\\tconst index = original.indexOf(string);\\n\\n\\t\\tif (index !== -1) {\\n\\t\\t\\tthis.overwrite(index, index + string.length, replacement);\\n\\t\\t}\\n\\n\\t\\treturn this;\\n\\t}\\n\\n\\treplace(searchValue, replacement) {\\n\\t\\tif (typeof searchValue === 'string') {\\n\\t\\t\\treturn this._replaceString(searchValue, replacement);\\n\\t\\t}\\n\\n\\t\\treturn this._replaceRegexp(searchValue, replacement);\\n\\t}\\n\\n\\t_replaceAllString(string, replacement) {\\n\\t\\tconst { original } = this;\\n\\t\\tconst stringLength = string.length;\\n\\t\\tfor (\\n\\t\\t\\tlet index = original.indexOf(string);\\n\\t\\t\\tindex !== -1;\\n\\t\\t\\tindex = original.indexOf(string, index + stringLength)\\n\\t\\t) {\\n\\t\\t\\tthis.overwrite(index, index + stringLength, replacement);\\n\\t\\t}\\n\\n\\t\\treturn this;\\n\\t}\\n\\n\\treplaceAll(searchValue, replacement) {\\n\\t\\tif (typeof searchValue === 'string') {\\n\\t\\t\\treturn this._replaceAllString(searchValue, replacement);\\n\\t\\t}\\n\\n\\t\\tif (!searchValue.global) {\\n\\t\\t\\tthrow new TypeError(\\n\\t\\t\\t\\t'MagicString.prototype.replaceAll called with a non-global RegExp argument'\\n\\t\\t\\t);\\n\\t\\t}\\n\\n\\t\\treturn this._replaceRegexp(searchValue, replacement);\\n\\t}\\n}\\n\",\"import MagicString from './MagicString.js';\\nimport SourceMap from './SourceMap.js';\\nimport getRelativePath from './utils/getRelativePath.js';\\nimport isObject from './utils/isObject.js';\\nimport getLocator from './utils/getLocator.js';\\nimport Mappings from './utils/Mappings.js';\\n\\nconst hasOwnProp = Object.prototype.hasOwnProperty;\\n\\nexport default class Bundle {\\n\\tconstructor(options = {}) {\\n\\t\\tthis.intro = options.intro || '';\\n\\t\\tthis.separator = options.separator !== undefined ? options.separator : '\\\\n';\\n\\t\\tthis.sources = [];\\n\\t\\tthis.uniqueSources = [];\\n\\t\\tthis.uniqueSourceIndexByFilename = {};\\n\\t}\\n\\n\\taddSource(source) {\\n\\t\\tif (source instanceof MagicString) {\\n\\t\\t\\treturn this.addSource({\\n\\t\\t\\t\\tcontent: source,\\n\\t\\t\\t\\tfilename: source.filename,\\n\\t\\t\\t\\tseparator: this.separator,\\n\\t\\t\\t});\\n\\t\\t}\\n\\n\\t\\tif (!isObject(source) || !source.content) {\\n\\t\\t\\tthrow new Error(\\n\\t\\t\\t\\t'bundle.addSource() takes an object with a `content` property, which should be an instance of MagicString, and an optional `filename`'\\n\\t\\t\\t);\\n\\t\\t}\\n\\n\\t\\t['filename', 'indentExclusionRanges', 'separator'].forEach((option) => {\\n\\t\\t\\tif (!hasOwnProp.call(source, option)) source[option] = source.content[option];\\n\\t\\t});\\n\\n\\t\\tif (source.separator === undefined) {\\n\\t\\t\\t// TODO there's a bunch of this sort of thing, needs cleaning up\\n\\t\\t\\tsource.separator = this.separator;\\n\\t\\t}\\n\\n\\t\\tif (source.filename) {\\n\\t\\t\\tif (!hasOwnProp.call(this.uniqueSourceIndexByFilename, source.filename)) {\\n\\t\\t\\t\\tthis.uniqueSourceIndexByFilename[source.filename] = this.uniqueSources.length;\\n\\t\\t\\t\\tthis.uniqueSources.push({ filename: source.filename, content: source.content.original });\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tconst uniqueSource = this.uniqueSources[this.uniqueSourceIndexByFilename[source.filename]];\\n\\t\\t\\t\\tif (source.content.original !== uniqueSource.content) {\\n\\t\\t\\t\\t\\tthrow new Error(`Illegal source: same filename (${source.filename}), different contents`);\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\tthis.sources.push(source);\\n\\t\\treturn this;\\n\\t}\\n\\n\\tappend(str, options) {\\n\\t\\tthis.addSource({\\n\\t\\t\\tcontent: new MagicString(str),\\n\\t\\t\\tseparator: (options && options.separator) || '',\\n\\t\\t});\\n\\n\\t\\treturn this;\\n\\t}\\n\\n\\tclone() {\\n\\t\\tconst bundle = new Bundle({\\n\\t\\t\\tintro: this.intro,\\n\\t\\t\\tseparator: this.separator,\\n\\t\\t});\\n\\n\\t\\tthis.sources.forEach((source) => {\\n\\t\\t\\tbundle.addSource({\\n\\t\\t\\t\\tfilename: source.filename,\\n\\t\\t\\t\\tcontent: source.content.clone(),\\n\\t\\t\\t\\tseparator: source.separator,\\n\\t\\t\\t});\\n\\t\\t});\\n\\n\\t\\treturn bundle;\\n\\t}\\n\\n\\tgenerateDecodedMap(options = {}) {\\n\\t\\tconst names = [];\\n\\t\\tthis.sources.forEach((source) => {\\n\\t\\t\\tObject.keys(source.content.storedNames).forEach((name) => {\\n\\t\\t\\t\\tif (!~names.indexOf(name)) names.push(name);\\n\\t\\t\\t});\\n\\t\\t});\\n\\n\\t\\tconst mappings = new Mappings(options.hires);\\n\\n\\t\\tif (this.intro) {\\n\\t\\t\\tmappings.advance(this.intro);\\n\\t\\t}\\n\\n\\t\\tthis.sources.forEach((source, i) => {\\n\\t\\t\\tif (i > 0) {\\n\\t\\t\\t\\tmappings.advance(this.separator);\\n\\t\\t\\t}\\n\\n\\t\\t\\tconst sourceIndex = source.filename ? this.uniqueSourceIndexByFilename[source.filename] : -1;\\n\\t\\t\\tconst magicString = source.content;\\n\\t\\t\\tconst locate = getLocator(magicString.original);\\n\\n\\t\\t\\tif (magicString.intro) {\\n\\t\\t\\t\\tmappings.advance(magicString.intro);\\n\\t\\t\\t}\\n\\n\\t\\t\\tmagicString.firstChunk.eachNext((chunk) => {\\n\\t\\t\\t\\tconst loc = locate(chunk.start);\\n\\n\\t\\t\\t\\tif (chunk.intro.length) mappings.advance(chunk.intro);\\n\\n\\t\\t\\t\\tif (source.filename) {\\n\\t\\t\\t\\t\\tif (chunk.edited) {\\n\\t\\t\\t\\t\\t\\tmappings.addEdit(\\n\\t\\t\\t\\t\\t\\t\\tsourceIndex,\\n\\t\\t\\t\\t\\t\\t\\tchunk.content,\\n\\t\\t\\t\\t\\t\\t\\tloc,\\n\\t\\t\\t\\t\\t\\t\\tchunk.storeName ? names.indexOf(chunk.original) : -1\\n\\t\\t\\t\\t\\t\\t);\\n\\t\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\tmappings.addUneditedChunk(\\n\\t\\t\\t\\t\\t\\t\\tsourceIndex,\\n\\t\\t\\t\\t\\t\\t\\tchunk,\\n\\t\\t\\t\\t\\t\\t\\tmagicString.original,\\n\\t\\t\\t\\t\\t\\t\\tloc,\\n\\t\\t\\t\\t\\t\\t\\tmagicString.sourcemapLocations\\n\\t\\t\\t\\t\\t\\t);\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\tmappings.advance(chunk.content);\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\tif (chunk.outro.length) mappings.advance(chunk.outro);\\n\\t\\t\\t});\\n\\n\\t\\t\\tif (magicString.outro) {\\n\\t\\t\\t\\tmappings.advance(magicString.outro);\\n\\t\\t\\t}\\n\\t\\t});\\n\\n\\t\\treturn {\\n\\t\\t\\tfile: options.file ? options.file.split(/[/\\\\\\\\]/).pop() : null,\\n\\t\\t\\tsources: this.uniqueSources.map((source) => {\\n\\t\\t\\t\\treturn options.file ? getRelativePath(options.file, source.filename) : source.filename;\\n\\t\\t\\t}),\\n\\t\\t\\tsourcesContent: this.uniqueSources.map((source) => {\\n\\t\\t\\t\\treturn options.includeContent ? source.content : null;\\n\\t\\t\\t}),\\n\\t\\t\\tnames,\\n\\t\\t\\tmappings: mappings.raw,\\n\\t\\t};\\n\\t}\\n\\n\\tgenerateMap(options) {\\n\\t\\treturn new SourceMap(this.generateDecodedMap(options));\\n\\t}\\n\\n\\tgetIndentString() {\\n\\t\\tconst indentStringCounts = {};\\n\\n\\t\\tthis.sources.forEach((source) => {\\n\\t\\t\\tconst indentStr = source.content._getRawIndentString();\\n\\n\\t\\t\\tif (indentStr === null) return;\\n\\n\\t\\t\\tif (!indentStringCounts[indentStr]) indentStringCounts[indentStr] = 0;\\n\\t\\t\\tindentStringCounts[indentStr] += 1;\\n\\t\\t});\\n\\n\\t\\treturn (\\n\\t\\t\\tObject.keys(indentStringCounts).sort((a, b) => {\\n\\t\\t\\t\\treturn indentStringCounts[a] - indentStringCounts[b];\\n\\t\\t\\t})[0] || '\\\\t'\\n\\t\\t);\\n\\t}\\n\\n\\tindent(indentStr) {\\n\\t\\tif (!arguments.length) {\\n\\t\\t\\tindentStr = this.getIndentString();\\n\\t\\t}\\n\\n\\t\\tif (indentStr === '') return this; // noop\\n\\n\\t\\tlet trailingNewline = !this.intro || this.intro.slice(-1) === '\\\\n';\\n\\n\\t\\tthis.sources.forEach((source, i) => {\\n\\t\\t\\tconst separator = source.separator !== undefined ? source.separator : this.separator;\\n\\t\\t\\tconst indentStart = trailingNewline || (i > 0 && /\\\\r?\\\\n$/.test(separator));\\n\\n\\t\\t\\tsource.content.indent(indentStr, {\\n\\t\\t\\t\\texclude: source.indentExclusionRanges,\\n\\t\\t\\t\\tindentStart, //: trailingNewline || /\\\\r?\\\\n$/.test( separator )  //true///\\\\r?\\\\n/.test( separator )\\n\\t\\t\\t});\\n\\n\\t\\t\\ttrailingNewline = source.content.lastChar() === '\\\\n';\\n\\t\\t});\\n\\n\\t\\tif (this.intro) {\\n\\t\\t\\tthis.intro =\\n\\t\\t\\t\\tindentStr +\\n\\t\\t\\t\\tthis.intro.replace(/^[^\\\\n]/gm, (match, index) => {\\n\\t\\t\\t\\t\\treturn index > 0 ? indentStr + match : match;\\n\\t\\t\\t\\t});\\n\\t\\t}\\n\\n\\t\\treturn this;\\n\\t}\\n\\n\\tprepend(str) {\\n\\t\\tthis.intro = str + this.intro;\\n\\t\\treturn this;\\n\\t}\\n\\n\\ttoString() {\\n\\t\\tconst body = this.sources\\n\\t\\t\\t.map((source, i) => {\\n\\t\\t\\t\\tconst separator = source.separator !== undefined ? source.separator : this.separator;\\n\\t\\t\\t\\tconst str = (i > 0 ? separator : '') + source.content.toString();\\n\\n\\t\\t\\t\\treturn str;\\n\\t\\t\\t})\\n\\t\\t\\t.join('');\\n\\n\\t\\treturn this.intro + body;\\n\\t}\\n\\n\\tisEmpty() {\\n\\t\\tif (this.intro.length && this.intro.trim()) return false;\\n\\t\\tif (this.sources.some((source) => !source.content.isEmpty())) return false;\\n\\t\\treturn true;\\n\\t}\\n\\n\\tlength() {\\n\\t\\treturn this.sources.reduce(\\n\\t\\t\\t(length, source) => length + source.content.length(),\\n\\t\\t\\tthis.intro.length\\n\\t\\t);\\n\\t}\\n\\n\\ttrimLines() {\\n\\t\\treturn this.trim('[\\\\\\\\r\\\\\\\\n]');\\n\\t}\\n\\n\\ttrim(charType) {\\n\\t\\treturn this.trimStart(charType).trimEnd(charType);\\n\\t}\\n\\n\\ttrimStart(charType) {\\n\\t\\tconst rx = new RegExp('^' + (charType || '\\\\\\\\s') + '+');\\n\\t\\tthis.intro = this.intro.replace(rx, '');\\n\\n\\t\\tif (!this.intro) {\\n\\t\\t\\tlet source;\\n\\t\\t\\tlet i = 0;\\n\\n\\t\\t\\tdo {\\n\\t\\t\\t\\tsource = this.sources[i++];\\n\\t\\t\\t\\tif (!source) {\\n\\t\\t\\t\\t\\tbreak;\\n\\t\\t\\t\\t}\\n\\t\\t\\t} while (!source.content.trimStartAborted(charType));\\n\\t\\t}\\n\\n\\t\\treturn this;\\n\\t}\\n\\n\\ttrimEnd(charType) {\\n\\t\\tconst rx = new RegExp((charType || '\\\\\\\\s') + '+$');\\n\\n\\t\\tlet source;\\n\\t\\tlet i = this.sources.length - 1;\\n\\n\\t\\tdo {\\n\\t\\t\\tsource = this.sources[i--];\\n\\t\\t\\tif (!source) {\\n\\t\\t\\t\\tthis.intro = this.intro.replace(rx, '');\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\t}\\n\\t\\t} while (!source.content.trimEndAborted(charType));\\n\\n\\t\\treturn this;\\n\\t}\\n}\\n\",\"import MagicString from './MagicString.js';\\nimport Bundle from './Bundle.js';\\nimport SourceMap from './SourceMap.js';\\n\\nMagicString.Bundle = Bundle;\\nMagicString.SourceMap = SourceMap;\\nMagicString.default = MagicString; // work around TypeScript bug https://github.com/Rich-Harris/magic-string/pull/121\\n\\nexport default MagicString;\\n\"],\"names\":[\"encode\"],\"mappings\":\"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\"}/package.json\u0007<{\n  \"name\": \"magic-string\",\n  \"version\": \"0.29.0\",\n  \"description\": \"Modify strings, generate sourcemaps\",\n  \"keywords\": [\n    \"string\",\n    \"string manipulation\",\n    \"sourcemap\",\n    \"templating\",\n    \"transpilation\"\n  ],\n  \"repository\": \"https://github.com/rich-harris/magic-string\",\n  \"license\": \"MIT\",\n  \"author\": \"Rich Harris\",\n  \"main\": \"./dist/magic-string.cjs.js\",\n  \"module\": \"./dist/magic-string.es.mjs\",\n  \"jsnext:main\": \"./dist/magic-string.es.mjs\",\n  \"types\": \"./index.d.ts\",\n  \"exports\": {\n    \"./package.json\": \"./package.json\",\n    \".\": {\n      \"types\": \"./index.d.ts\",\n      \"import\": \"./dist/magic-string.es.mjs\",\n      \"require\": \"./dist/magic-string.cjs.js\"\n    }\n  },\n  \"files\": [\n    \"dist/*\",\n    \"index.d.ts\",\n    \"README.md\"\n  ],\n  \"scripts\": {\n    \"build\": \"rollup -c\",\n    \"changelog\": \"conventional-changelog -p angular -i CHANGELOG.md -s\",\n    \"format\": \"prettier --single-quote --print-width 100 --use-tabs --write src/*.js src/**/*.js\",\n    \"lint\": \"eslint src test && publint\",\n    \"prepare\": \"npm run build\",\n    \"prepublishOnly\": \"npm run lint && rm -rf dist && npm test\",\n    \"release\": \"bumpp -x \\\"npm run changelog\\\" --all --commit --tag --push && npm publish\",\n    \"pretest\": \"npm run build\",\n    \"test\": \"mocha\",\n    \"bench\": \"npm run build && node benchmark/index.mjs\",\n    \"watch\": \"rollup -cw\"\n  },\n  \"devDependencies\": {\n    \"@rollup/plugin-node-resolve\": \"^14.1.0\",\n    \"@rollup/plugin-replace\": \"^4.0.0\",\n    \"benchmark\": \"^2.1.4\",\n    \"bumpp\": \"^8.2.1\",\n    \"conventional-changelog-cli\": \"^2.2.2\",\n    \"eslint\": \"^8.23.1\",\n    \"mocha\": \"^10.0.0\",\n    \"prettier\": \"^2.7.1\",\n    \"publint\": \"^0.1.7\",\n    \"rollup\": \"^2.79.1\",\n    \"source-map-js\": \"^1.0.2\",\n    \"source-map-support\": \"^0.5.21\"\n  },\n  \"engines\": {\n    \"node\": \">=12\"\n  },\n  \"dependencies\": {\n    \"@jridgewell/sourcemap-codec\": \"^1.4.13\"\n  }\n}\n/index.d.ts#nexport interface BundleOptions {\n  intro?: string;\n  separator?: string;\n}\n\nexport interface SourceMapOptions {\n  /**\n   * Whether the mapping should be high-resolution.\n   * Hi-res mappings map every single character, meaning (for example) your devtools will always\n   * be able to pinpoint the exact location of function calls and so on.\n   * With lo-res mappings, devtools may only be able to identify the correct\n   * line - but they're quicker to generate and less bulky.\n   * If sourcemap locations have been specified with s.addSourceMapLocation(), they will be used here.\n   */\n  hires?: boolean;\n  /**\n   * The filename where you plan to write the sourcemap.\n   */\n  file?: string;\n  /**\n   * The filename of the file containing the original source.\n   */\n  source?: string;\n  /**\n   * Whether to include the original content in the map's sourcesContent array.\n   */\n  includeContent?: boolean;\n}\n\nexport type SourceMapSegment =\n  | [number]\n  | [number, number, number, number]\n  | [number, number, number, number, number];\n\nexport interface DecodedSourceMap {\n  file: string;\n  sources: string[];\n  sourcesContent: (string | null)[];\n  names: string[];\n  mappings: SourceMapSegment[][];\n  x_google_ignoreList?: number[];\n}\n\nexport class SourceMap {\n  constructor(properties: DecodedSourceMap);\n\n  version: number;\n  file: string;\n  sources: string[];\n  sourcesContent: (string | null)[];\n  names: string[];\n  mappings: string;\n  x_google_ignoreList?: number[];\n\n  /**\n   * Returns the equivalent of `JSON.stringify(map)`\n   */\n  toString(): string;\n  /**\n   * Returns a DataURI containing the sourcemap. Useful for doing this sort of thing:\n   * `generateMap(options?: SourceMapOptions): SourceMap;`\n   */\n  toUrl(): string;\n}\n\nexport class Bundle {\n  constructor(options?: BundleOptions);\n  addSource(source: MagicString | { filename?: string, content: MagicString }): Bundle;\n  append(str: string, options?: BundleOptions): Bundle;\n  clone(): Bundle;\n  generateMap(options?: SourceMapOptions): SourceMap;\n  generateDecodedMap(options?: SourceMapOptions): DecodedSourceMap;\n  getIndentString(): string;\n  indent(indentStr?: string): Bundle;\n  indentExclusionRanges: ExclusionRange | Array<ExclusionRange>;\n  prepend(str: string): Bundle;\n  toString(): string;\n  trimLines(): Bundle;\n  trim(charType?: string): Bundle;\n  trimStart(charType?: string): Bundle;\n  trimEnd(charType?: string): Bundle;\n  isEmpty(): boolean;\n  length(): number;\n}\n\nexport type ExclusionRange = [ number, number ];\n\nexport interface MagicStringOptions {\n  filename?: string,\n  indentExclusionRanges?: ExclusionRange | Array<ExclusionRange>;\n}\n\nexport interface IndentOptions {\n  exclude?: ExclusionRange | Array<ExclusionRange>;\n  indentStart?: boolean;\n}\n\nexport interface OverwriteOptions {\n  storeName?: boolean;\n  contentOnly?: boolean;\n}\n\nexport interface UpdateOptions {\n  storeName?: boolean;\n  overwrite?: boolean;\n}\n\nexport default class MagicString {\n  constructor(str: string, options?: MagicStringOptions);\n  /**\n   * Adds the specified character index (with respect to the original string) to sourcemap mappings, if `hires` is false.\n   */\n  addSourcemapLocation(char: number): void;\n  /**\n   * Appends the specified content to the end of the string.\n   */\n  append(content: string): MagicString;\n  /**\n   * Appends the specified content at the index in the original string.\n   * If a range *ending* with index is subsequently moved, the insert will be moved with it. \n   * See also `s.prependLeft(...)`.\n   */\n  appendLeft(index: number, content: string): MagicString;\n  /**\n   * Appends the specified content at the index in the original string.\n   * If a range *starting* with index is subsequently moved, the insert will be moved with it.\n   * See also `s.prependRight(...)`.\n   */\n  appendRight(index: number, content: string): MagicString;\n  /**\n   * Does what you'd expect.\n   */\n  clone(): MagicString;\n  /**\n   * Generates a version 3 sourcemap.\n   */\n  generateMap(options?: SourceMapOptions): SourceMap;\n  /**\n   * Generates a sourcemap object with raw mappings in array form, rather than encoded as a string.\n   * Useful if you need to manipulate the sourcemap further, but most of the time you will use `generateMap` instead.\n   */\n  generateDecodedMap(options?: SourceMapOptions): DecodedSourceMap;\n  getIndentString(): string;\n\n  /**\n   * Prefixes each line of the string with prefix.\n   * If prefix is not supplied, the indentation will be guessed from the original content, falling back to a single tab character.\n   */\n  indent(options?: IndentOptions): MagicString;\n  /**\n   * Prefixes each line of the string with prefix.\n   * If prefix is not supplied, the indentation will be guessed from the original content, falling back to a single tab character.\n   *\n   * The options argument can have an exclude property, which is an array of [start, end] character ranges.\n   * These ranges will be excluded from the indentation - useful for (e.g.) multiline strings.\n   */\n  indent(indentStr?: string, options?: IndentOptions): MagicString;\n  indentExclusionRanges: ExclusionRange | Array<ExclusionRange>;\n\n  /**\n   * Moves the characters from `start and `end` to `index`.\n   */\n  move(start: number, end: number, index: number): MagicString;\n  /**\n   * Replaces the characters from `start` to `end` with `content`, along with the appended/prepended content in \n   * that range. The same restrictions as `s.remove()` apply.\n   *\n   * The fourth argument is optional. It can have a storeName property — if true, the original name will be stored\n   * for later inclusion in a sourcemap's names array — and a contentOnly property which determines whether only\n   * the content is overwritten, or anything that was appended/prepended to the range as well.\n   * \n   * It may be preferred to use `s.update(...)` instead if you wish to avoid overwriting the appended/prepended content.\n   */\n  overwrite(start: number, end: number, content: string, options?: boolean | OverwriteOptions): MagicString;\n  /**\n   * Replaces the characters from `start` to `end` with `content`. The same restrictions as `s.remove()` apply.\n   *\n   * The fourth argument is optional. It can have a storeName property — if true, the original name will be stored\n   * for later inclusion in a sourcemap's names array — and an overwrite property which determines whether only\n   * the content is overwritten, or anything that was appended/prepended to the range as well.\n   */\n  update(start: number, end: number, content: string, options?: boolean | UpdateOptions): MagicString;\n  /**\n   * Prepends the string with the specified content. \n   */\n  prepend(content: string): MagicString;\n  /**\n   * Same as `s.appendLeft(...)`, except that the inserted content will go *before* any previous appends or prepends at index\n   */\n  prependLeft(index: number, content: string): MagicString;\n  /**\n   * Same as `s.appendRight(...)`, except that the inserted content will go *before* any previous appends or prepends at `index`\n   */\n  prependRight(index: number, content: string): MagicString;\n  /**\n   * Removes the characters from `start` to `end` (of the original string, **not** the generated string).\n   * Removing the same content twice, or making removals that partially overlap, will cause an error.\n   */\n  remove(start: number, end: number): MagicString;\n  /**\n   * Returns the content of the generated string that corresponds to the slice between `start` and `end` of the original string.\n   * Throws error if the indices are for characters that were already removed.\n   */\n  slice(start: number, end: number): string;\n  /**\n   * Returns a clone of `s`, with all content before the `start` and `end` characters of the original string removed.\n   */\n  snip(start: number, end: number): MagicString;\n  /**\n   * Trims content matching `charType` (defaults to `\\s`, i.e. whitespace) from the start and end.\n   */\n  trim(charType?: string): MagicString;\n  /**\n   * Trims content matching `charType` (defaults to `\\s`, i.e. whitespace) from the start.\n   */\n  trimStart(charType?: string): MagicString;\n  /**\n   * Trims content matching `charType` (defaults to `\\s`, i.e. whitespace) from the end.\n   */\n  trimEnd(charType?: string): MagicString;\n  /**\n   * Removes empty lines from the start and end.\n   */\n  trimLines(): MagicString;\n  /**\n   * String replacement with RegExp or string.\n   */\n  replace(regex: RegExp | string, replacement: string | ((substring: string, ...args: any[]) => string)): MagicString;\n  /**\n   * Same as `s.replace`, but replace all matched strings instead of just one.\n   */\n  replaceAll(regex: RegExp | string, replacement: string | ((substring: string, ...args: any[]) => string)): MagicString;\n\n  lastChar(): string;\n  lastLine(): string;\n  /**\n   * Returns true if the resulting source is empty (disregarding white space).\n   */\n  isEmpty(): boolean;\n  length(): number;\n\n  /**\n   * Indicates if the string has been changed.\n   */\n  hasChanged(): boolean;\n\n  original: string;\n  /**\n   * Returns the generated string.\n   */\n  toString(): string;\n}\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/bWFya2Rvd24taXQtY29udGFpbmVyQDMuMC4w",
    "content": "\"/dist/markdown-it-container.min.js\b/*! markdown-it-container 3.0.0 https://github.com//markdown-it/markdown-it-container @license MIT */!function(e){if(\"object\"==typeof exports&&\"undefined\"!=typeof module)module.exports=e();else if(\"function\"==typeof define&&define.amd)define([],e);else{(\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:this).markdownitContainer=e()}}((function(){return function e(r,n,t){function o(f,a){if(!n[f]){if(!r[f]){var u=\"function\"==typeof require&&require;if(!a&&u)return u(f,!0);if(i)return i(f,!0);var c=new Error(\"Cannot find module '\"+f+\"'\");throw c.code=\"MODULE_NOT_FOUND\",c}var s=n[f]={exports:{}};r[f][0].call(s.exports,(function(e){return o(r[f][1][e]||e)}),s,s.exports,e,r,n,t)}return n[f].exports}for(var i=\"function\"==typeof require&&require,f=0;f<t.length;f++)o(t[f]);return o}({1:[function(e,r,n){\"use strict\";r.exports=function(e,r,n){var t=(n=n||{}).marker||\":\",o=t.charCodeAt(0),i=t.length,f=n.validate||function(e){return e.trim().split(\" \",2)[0]===r},a=n.render||function(e,n,t,o,i){return 1===e[n].nesting&&e[n].attrJoin(\"class\",r),i.renderToken(e,n,t,o,i)};e.block.ruler.before(\"fence\",\"container_\"+r,(function(e,n,a,u){var c,s,l,d,p,k,b,h,m=!1,y=e.bMarks[n]+e.tShift[n],_=e.eMarks[n];if(o!==e.src.charCodeAt(y))return!1;for(c=y+1;c<=_&&t[(c-y)%i]===e.src[c];c++);if((l=Math.floor((c-y)/i))<3)return!1;if(c-=(c-y)%i,d=e.src.slice(y,c),p=e.src.slice(c,_),!f(p,d))return!1;if(u)return!0;for(s=n;!(++s>=a)&&!((y=e.bMarks[s]+e.tShift[s])<(_=e.eMarks[s])&&e.sCount[s]<e.blkIndent);)if(o===e.src.charCodeAt(y)&&!(e.sCount[s]-e.blkIndent>=4)){for(c=y+1;c<=_&&t[(c-y)%i]===e.src[c];c++);if(!(Math.floor((c-y)/i)<l||(c-=(c-y)%i,(c=e.skipSpaces(c))<_))){m=!0;break}}return b=e.parentType,h=e.lineMax,e.parentType=\"container\",e.lineMax=s,(k=e.push(\"container_\"+r+\"_open\",\"div\",1)).markup=d,k.block=!0,k.info=p,k.map=[n,s],e.md.block.tokenize(e,n+1,s),(k=e.push(\"container_\"+r+\"_close\",\"div\",-1)).markup=e.src.slice(y,c),k.block=!0,e.parentType=b,e.lineMax=h,e.line=s+(m?1:0),!0}),{alt:[\"paragraph\",\"reference\",\"blockquote\",\"list\"]}),e.renderer.rules[\"container_\"+r+\"_open\"]=a,e.renderer.rules[\"container_\"+r+\"_close\"]=a}},{}]},{},[1])(1)}));\n/bower.json\u0002'{\n  \"name\": \"markdown-it-container\",\n  \"main\": \"dist/markdown-it-container.js\",\n  \"homepage\": \"https://github.com/markdown-it/markdown-it-container\",\n  \"description\": \"Plugin to create block-level custom containers for markdown-it markdown parser\",\n  \"keywords\": [\n    \"markdown-it-plugin\",\n    \"markdown-it\",\n    \"markdown\"\n  ],\n  \"license\": \"MIT\",\n  \"ignore\": [\n    \"**/.*\",\n    \"benchmark\",\n    \"bower_components\",\n    \"coverage\",\n    \"demo\",\n    \"docs\",\n    \"lib\",\n    \"node_modules\",\n    \"support\",\n    \"test\",\n    \"Makefile\",\n    \"index*\"\n  ]\n}\n/README.md\t# markdown-it-container\n\n[![Build Status](https://img.shields.io/travis/markdown-it/markdown-it-container/master.svg?style=flat)](https://travis-ci.org/markdown-it/markdown-it-container)\n[![NPM version](https://img.shields.io/npm/v/markdown-it-container.svg?style=flat)](https://www.npmjs.org/package/markdown-it-container)\n[![Coverage Status](https://img.shields.io/coveralls/markdown-it/markdown-it-container/master.svg?style=flat)](https://coveralls.io/r/markdown-it/markdown-it-container?branch=master)\n\n> Plugin for creating block-level custom containers for [markdown-it](https://github.com/markdown-it/markdown-it) markdown parser.\n\n__v2.+ requires `markdown-it` v5.+, see changelog.__\n\nWith this plugin you can create block containers like:\n\n```\n::: warning\n*here be dragons*\n:::\n```\n\n.... and specify how they should be rendered. If no renderer defined, `<div>` with\ncontainer name class will be created:\n\n```html\n<div class=\"warning\">\n<em>here be dragons</em>\n</div>\n```\n\nMarkup is the same as for [fenced code blocks](http://spec.commonmark.org/0.18/#fenced-code-blocks).\nDifference is, that marker use another character and content is rendered as markdown markup.\n\n\n## Installation\n\nnode.js, browser:\n\n```bash\n$ npm install markdown-it-container --save\n$ bower install markdown-it-container --save\n```\n\n\n## API\n\n```js\nvar md = require('markdown-it')()\n            .use(require('markdown-it-container'), name [, options]);\n```\n\nParams:\n\n- __name__ - container name (mandatory)\n- __options:__\n   - __validate__ - optional, function to validate tail after opening marker, should\n     return `true` on success.\n   - __render__ - optional, renderer function for opening/closing tokens.\n   - __marker__ - optional (`:`), character to use in delimiter.\n\n\n## Example\n\n```js\nvar md = require('markdown-it')();\n\nmd.use(require('markdown-it-container'), 'spoiler', {\n\n  validate: function(params) {\n    return params.trim().match(/^spoiler\\s+(.*)$/);\n  },\n\n  render: function (tokens, idx) {\n    var m = tokens[idx].info.trim().match(/^spoiler\\s+(.*)$/);\n\n    if (tokens[idx].nesting === 1) {\n      // opening tag\n      return '<details><summary>' + md.utils.escapeHtml(m[1]) + '</summary>\\n';\n\n    } else {\n      // closing tag\n      return '</details>\\n';\n    }\n  }\n});\n\nconsole.log(md.render('::: spoiler click me\\n*content*\\n:::\\n'));\n\n// Output:\n//\n// <details><summary>click me</summary>\n// <p><em>content</em></p>\n// </details>\n```\n\n## License\n\n[MIT](https://github.com/markdown-it/markdown-it-container/blob/master/LICENSE)\n/dist/markdown-it-container.js\u0014/*! markdown-it-container 3.0.0 https://github.com//markdown-it/markdown-it-container @license MIT */(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.markdownitContainer = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){\n// Process block-level custom containers\n//\n'use strict';\n\n\nmodule.exports = function container_plugin(md, name, options) {\n\n  // Second param may be useful if you decide\n  // to increase minimal allowed marker length\n  function validateDefault(params/*, markup*/) {\n    return params.trim().split(' ', 2)[0] === name;\n  }\n\n  function renderDefault(tokens, idx, _options, env, slf) {\n\n    // add a class to the opening tag\n    if (tokens[idx].nesting === 1) {\n      tokens[idx].attrJoin('class', name);\n    }\n\n    return slf.renderToken(tokens, idx, _options, env, slf);\n  }\n\n  options = options || {};\n\n  var min_markers = 3,\n      marker_str  = options.marker || ':',\n      marker_char = marker_str.charCodeAt(0),\n      marker_len  = marker_str.length,\n      validate    = options.validate || validateDefault,\n      render      = options.render || renderDefault;\n\n  function container(state, startLine, endLine, silent) {\n    var pos, nextLine, marker_count, markup, params, token,\n        old_parent, old_line_max,\n        auto_closed = false,\n        start = state.bMarks[startLine] + state.tShift[startLine],\n        max = state.eMarks[startLine];\n\n    // Check out the first character quickly,\n    // this should filter out most of non-containers\n    //\n    if (marker_char !== state.src.charCodeAt(start)) { return false; }\n\n    // Check out the rest of the marker string\n    //\n    for (pos = start + 1; pos <= max; pos++) {\n      if (marker_str[(pos - start) % marker_len] !== state.src[pos]) {\n        break;\n      }\n    }\n\n    marker_count = Math.floor((pos - start) / marker_len);\n    if (marker_count < min_markers) { return false; }\n    pos -= (pos - start) % marker_len;\n\n    markup = state.src.slice(start, pos);\n    params = state.src.slice(pos, max);\n    if (!validate(params, markup)) { return false; }\n\n    // Since start is found, we can report success here in validation mode\n    //\n    if (silent) { return true; }\n\n    // Search for the end of the block\n    //\n    nextLine = startLine;\n\n    for (;;) {\n      nextLine++;\n      if (nextLine >= endLine) {\n        // unclosed block should be autoclosed by end of document.\n        // also block seems to be autoclosed by end of parent\n        break;\n      }\n\n      start = state.bMarks[nextLine] + state.tShift[nextLine];\n      max = state.eMarks[nextLine];\n\n      if (start < max && state.sCount[nextLine] < state.blkIndent) {\n        // non-empty line with negative indent should stop the list:\n        // - ```\n        //  test\n        break;\n      }\n\n      if (marker_char !== state.src.charCodeAt(start)) { continue; }\n\n      if (state.sCount[nextLine] - state.blkIndent >= 4) {\n        // closing fence should be indented less than 4 spaces\n        continue;\n      }\n\n      for (pos = start + 1; pos <= max; pos++) {\n        if (marker_str[(pos - start) % marker_len] !== state.src[pos]) {\n          break;\n        }\n      }\n\n      // closing code fence must be at least as long as the opening one\n      if (Math.floor((pos - start) / marker_len) < marker_count) { continue; }\n\n      // make sure tail has spaces only\n      pos -= (pos - start) % marker_len;\n      pos = state.skipSpaces(pos);\n\n      if (pos < max) { continue; }\n\n      // found!\n      auto_closed = true;\n      break;\n    }\n\n    old_parent = state.parentType;\n    old_line_max = state.lineMax;\n    state.parentType = 'container';\n\n    // this will prevent lazy continuations from ever going past our end marker\n    state.lineMax = nextLine;\n\n    token        = state.push('container_' + name + '_open', 'div', 1);\n    token.markup = markup;\n    token.block  = true;\n    token.info   = params;\n    token.map    = [ startLine, nextLine ];\n\n    state.md.block.tokenize(state, startLine + 1, nextLine);\n\n    token        = state.push('container_' + name + '_close', 'div', -1);\n    token.markup = state.src.slice(start, pos);\n    token.block  = true;\n\n    state.parentType = old_parent;\n    state.lineMax = old_line_max;\n    state.line = nextLine + (auto_closed ? 1 : 0);\n\n    return true;\n  }\n\n  md.block.ruler.before('fence', 'container_' + name, container, {\n    alt: [ 'paragraph', 'reference', 'blockquote', 'list' ]\n  });\n  md.renderer.rules['container_' + name + '_open'] = render;\n  md.renderer.rules['container_' + name + '_close'] = render;\n};\n\n},{}]},{},[1])(1)\n});\n/index.js\u0010// Process block-level custom containers\n//\n'use strict';\n\n\nmodule.exports = function container_plugin(md, name, options) {\n\n  // Second param may be useful if you decide\n  // to increase minimal allowed marker length\n  function validateDefault(params/*, markup*/) {\n    return params.trim().split(' ', 2)[0] === name;\n  }\n\n  function renderDefault(tokens, idx, _options, env, slf) {\n\n    // add a class to the opening tag\n    if (tokens[idx].nesting === 1) {\n      tokens[idx].attrJoin('class', name);\n    }\n\n    return slf.renderToken(tokens, idx, _options, env, slf);\n  }\n\n  options = options || {};\n\n  var min_markers = 3,\n      marker_str  = options.marker || ':',\n      marker_char = marker_str.charCodeAt(0),\n      marker_len  = marker_str.length,\n      validate    = options.validate || validateDefault,\n      render      = options.render || renderDefault;\n\n  function container(state, startLine, endLine, silent) {\n    var pos, nextLine, marker_count, markup, params, token,\n        old_parent, old_line_max,\n        auto_closed = false,\n        start = state.bMarks[startLine] + state.tShift[startLine],\n        max = state.eMarks[startLine];\n\n    // Check out the first character quickly,\n    // this should filter out most of non-containers\n    //\n    if (marker_char !== state.src.charCodeAt(start)) { return false; }\n\n    // Check out the rest of the marker string\n    //\n    for (pos = start + 1; pos <= max; pos++) {\n      if (marker_str[(pos - start) % marker_len] !== state.src[pos]) {\n        break;\n      }\n    }\n\n    marker_count = Math.floor((pos - start) / marker_len);\n    if (marker_count < min_markers) { return false; }\n    pos -= (pos - start) % marker_len;\n\n    markup = state.src.slice(start, pos);\n    params = state.src.slice(pos, max);\n    if (!validate(params, markup)) { return false; }\n\n    // Since start is found, we can report success here in validation mode\n    //\n    if (silent) { return true; }\n\n    // Search for the end of the block\n    //\n    nextLine = startLine;\n\n    for (;;) {\n      nextLine++;\n      if (nextLine >= endLine) {\n        // unclosed block should be autoclosed by end of document.\n        // also block seems to be autoclosed by end of parent\n        break;\n      }\n\n      start = state.bMarks[nextLine] + state.tShift[nextLine];\n      max = state.eMarks[nextLine];\n\n      if (start < max && state.sCount[nextLine] < state.blkIndent) {\n        // non-empty line with negative indent should stop the list:\n        // - ```\n        //  test\n        break;\n      }\n\n      if (marker_char !== state.src.charCodeAt(start)) { continue; }\n\n      if (state.sCount[nextLine] - state.blkIndent >= 4) {\n        // closing fence should be indented less than 4 spaces\n        continue;\n      }\n\n      for (pos = start + 1; pos <= max; pos++) {\n        if (marker_str[(pos - start) % marker_len] !== state.src[pos]) {\n          break;\n        }\n      }\n\n      // closing code fence must be at least as long as the opening one\n      if (Math.floor((pos - start) / marker_len) < marker_count) { continue; }\n\n      // make sure tail has spaces only\n      pos -= (pos - start) % marker_len;\n      pos = state.skipSpaces(pos);\n\n      if (pos < max) { continue; }\n\n      // found!\n      auto_closed = true;\n      break;\n    }\n\n    old_parent = state.parentType;\n    old_line_max = state.lineMax;\n    state.parentType = 'container';\n\n    // this will prevent lazy continuations from ever going past our end marker\n    state.lineMax = nextLine;\n\n    token        = state.push('container_' + name + '_open', 'div', 1);\n    token.markup = markup;\n    token.block  = true;\n    token.info   = params;\n    token.map    = [ startLine, nextLine ];\n\n    state.md.block.tokenize(state, startLine + 1, nextLine);\n\n    token        = state.push('container_' + name + '_close', 'div', -1);\n    token.markup = state.src.slice(start, pos);\n    token.block  = true;\n\n    state.parentType = old_parent;\n    state.lineMax = old_line_max;\n    state.line = nextLine + (auto_closed ? 1 : 0);\n\n    return true;\n  }\n\n  md.block.ruler.before('fence', 'container_' + name, container, {\n    alt: [ 'paragraph', 'reference', 'blockquote', 'list' ]\n  });\n  md.renderer.rules['container_' + name + '_open'] = render;\n  md.renderer.rules['container_' + name + '_close'] = render;\n};\n/CHANGELOG.md\u0001n3.0.0 / 2020-06-02\n------------------\n\n- Don't assume there are no classes, #26.\n- Added bordering markup to validator params.\n- Fix tests to work with latest `markdown-it`.\n- Dev deps bump.\n- Reorganize configs.\n\n\n2.0.0 / 2015-10-05\n------------------\n\n- Markdown-it 5.0.0 support. Use 1.x version for 4.x.\n\n\n1.0.0 / 2015-03-13\n------------------\n\n- First release.\n/package.json\u0003\u0015{\n  \"name\": \"markdown-it-container\",\n  \"version\": \"3.0.0\",\n  \"description\": \"Plugin to create block-level custom containers for markdown-it markdown parser\",\n  \"repository\": \"markdown-it/markdown-it-container\",\n  \"license\": \"MIT\",\n  \"scripts\": {\n    \"lint\": \"eslint .\",\n    \"test\": \"npm run lint && nyc mocha\",\n    \"coverage\": \"npm run test && nyc report --reporter html\",\n    \"report-coveralls\": \"nyc report --reporter=text-lcov | coveralls\"\n  },\n  \"keywords\": [\n    \"markdown-it-plugin\",\n    \"markdown-it\",\n    \"markdown\"\n  ],\n  \"devDependencies\": {\n    \"browserify\": \"^16.5.1\",\n    \"coveralls\": \"^3.1.0\",\n    \"eslint\": \"^7.1.0\",\n    \"markdown-it\": \"markdown-it/markdown-it\",\n    \"markdown-it-testgen\": \"~0.1.0\",\n    \"mocha\": \"^7.2.0\",\n    \"nyc\": \"^15.1.0\",\n    \"terser\": \"^4.7.0\"\n  }\n}\n/LICENSE\u00041Copyright (c) 2015 Vitaly Puzrin, Alex Kocharin.\n\nPermission is hereby granted, free of charge, to any person\nobtaining a copy of this software and associated documentation\nfiles (the \"Software\"), to deal in the Software without\nrestriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the\nSoftware is furnished to do so, subject to the following\nconditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\nOF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\nHOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\nWHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\nFROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\nOTHER DEALINGS IN THE SOFTWARE.\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/bWR1cmxAMS4wLjE=",
    "content": "/format.js\u0002\u0002\n'use strict';\n\n\nmodule.exports = function format(url) {\n  var result = '';\n\n  result += url.protocol || '';\n  result += url.slashes ? '//' : '';\n  result += url.auth ? url.auth + '@' : '';\n\n  if (url.hostname && url.hostname.indexOf(':') !== -1) {\n    // ipv6 address\n    result += '[' + url.hostname + ']';\n  } else {\n    result += url.hostname || '';\n  }\n\n  result += url.port ? ':' + url.port : '';\n  result += url.pathname || '';\n  result += url.search || '';\n  result += url.hash || '';\n\n  return result;\n};\n/README.md\ro# mdurl\n\n[![Build Status](https://img.shields.io/travis/markdown-it/mdurl/master.svg?style=flat)](https://travis-ci.org/markdown-it/mdurl)\n[![NPM version](https://img.shields.io/npm/v/mdurl.svg?style=flat)](https://www.npmjs.org/package/mdurl)\n\n> URL utilities for [markdown-it](https://github.com/markdown-it/markdown-it) parser.\n\n\n## API\n\n### .encode(str [, exclude, keepEncoded]) -> String\n\nPercent-encode a string, avoiding double encoding. Don't touch `/a-zA-Z0-9/` +\nexcluded chars + `/%[a-fA-F0-9]{2}/` (if not disabled). Broken surrorates are\nreplaced with `U+FFFD`.\n\nParams:\n\n- __str__ - input string.\n- __exclude__ - optional, `;/?:@&=+$,-_.!~*'()#`. Additional chars to keep intact\n  (except `/a-zA-Z0-9/`).\n- __keepEncoded__ - optional, `true`. By default it skips already encoded sequences\n  (`/%[a-fA-F0-9]{2}/`). If set to `false`, `%` will be encoded.\n\n\n### encode.defaultChars, encode.componentChars\n\nYou can use these constants as second argument to `encode` function.\n\n - `encode.defaultChars` is the same exclude set as in the standard `encodeURI()` function\n - `encode.componentChars` is the same exclude set as in the `encodeURIComponent()` function\n\nFor example, `encode('something', encode.componentChars, true)` is roughly the equivalent of\nthe `encodeURIComponent()` function (except `encode()` doesn't throw).\n\n\n### .decode(str [, exclude]) -> String\n\nDecode percent-encoded string. Invalid percent-encoded sequences (e.g. `%2G`)\nare left as is. Invalid UTF-8 characters are replaced with `U+FFFD`.\n\n\nParams:\n\n- __str__ - input string.\n- __exclude__ - set of characters to leave encoded, optional, `;/?:@&=+$,#`.\n\n\n### decode.defaultChars, decode.componentChars\n\nYou can use these constants as second argument to `decode` function.\n\n - `decode.defaultChars` is the same exclude set as in the standard `decodeURI()` function\n - `decode.componentChars` is the same exclude set as in the `decodeURIComponent()` function\n\nFor example, `decode('something', decode.defaultChars)` has the same behavior as\n`decodeURI('something')` on a correctly encoded input.\n\n\n### .parse(url, slashesDenoteHost) -> urlObs\n\nParse url string. Similar to node's [url.parse](http://nodejs.org/api/url.html#url_url_parse_urlstr_parsequerystring_slashesdenotehost), but without any\nnormalizations and query string parse.\n\n - __url__ - input url (string)\n - __slashesDenoteHost__ - if url starts with `//`, expect a hostname after it. Optional, `false`.\n\nResult (hash):\n\n- protocol\n- slashes\n- auth\n- port\n- hostname\n- hash\n- search\n- pathname\n\nDifference with node's `url`:\n\n1. No leading slash in paths, e.g. in `url.parse('http://foo?bar')` pathname is\n   ``, not `/`\n2. Backslashes are not replaced with slashes, so `http:\\\\example.org\\` is\n   treated like a relative path\n3. Trailing colon is treated like a part of the path, i.e. in\n   `http://example.org:foo` pathname is `:foo`\n4. Nothing is URL-encoded in the resulting object, (in joyent/node some chars\n   in auth and paths are encoded)\n5. `url.parse()` does not have `parseQueryString` argument\n6. Removed extraneous result properties: `host`, `path`, `query`, etc.,\n   which can be constructed using other parts of the url.\n\n\n### .format(urlObject)\n\nFormat an object previously obtained with `.parse()` function. Similar to node's\n[url.format](http://nodejs.org/api/url.html#url_url_format_urlobj).\n\n\n## License\n\n[MIT](https://github.com/markdown-it/mdurl/blob/master/LICENSE)\n/package.json\u0001C{\n  \"name\": \"mdurl\",\n  \"version\": \"1.0.1\",\n  \"description\": \"URL utilities for markdown-it\",\n  \"repository\": \"markdown-it/mdurl\",\n  \"license\": \"MIT\",\n  \"scripts\": {\n    \"test\": \"make test\"\n  },\n  \"devDependencies\": {\n    \"mocha\": \"*\",\n    \"eslint\": \"0.13.0\",\n    \"eslint-plugin-nodeca\": \"^1.0.0\",\n    \"istanbul\": \"*\"\n  }\n}\n/parse.js&// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n//\n// Changes from joyent/node:\n//\n// 1. No leading slash in paths,\n//    e.g. in `url.parse('http://foo?bar')` pathname is ``, not `/`\n//\n// 2. Backslashes are not replaced with slashes,\n//    so `http:\\\\example.org\\` is treated like a relative path\n//\n// 3. Trailing colon is treated like a part of the path,\n//    i.e. in `http://example.org:foo` pathname is `:foo`\n//\n// 4. Nothing is URL-encoded in the resulting object,\n//    (in joyent/node some chars in auth and paths are encoded)\n//\n// 5. `url.parse()` does not have `parseQueryString` argument\n//\n// 6. Removed extraneous result properties: `host`, `path`, `query`, etc.,\n//    which can be constructed using other parts of the url.\n//\n\n\nfunction Url() {\n  this.protocol = null;\n  this.slashes = null;\n  this.auth = null;\n  this.port = null;\n  this.hostname = null;\n  this.hash = null;\n  this.search = null;\n  this.pathname = null;\n}\n\n// Reference: RFC 3986, RFC 1808, RFC 2396\n\n// define these here so at least they only have to be\n// compiled once on the first module load.\nvar protocolPattern = /^([a-z0-9.+-]+:)/i,\n    portPattern = /:[0-9]*$/,\n\n    // Special case for a simple path URL\n    simplePathPattern = /^(\\/\\/?(?!\\/)[^\\?\\s]*)(\\?[^\\s]*)?$/,\n\n    // RFC 2396: characters reserved for delimiting URLs.\n    // We actually just auto-escape these.\n    delims = [ '<', '>', '\"', '`', ' ', '\\r', '\\n', '\\t' ],\n\n    // RFC 2396: characters not allowed for various reasons.\n    unwise = [ '{', '}', '|', '\\\\', '^', '`' ].concat(delims),\n\n    // Allowed by RFCs, but cause of XSS attacks.  Always escape these.\n    autoEscape = [ '\\'' ].concat(unwise),\n    // Characters that are never ever allowed in a hostname.\n    // Note that any invalid chars are also handled, but these\n    // are the ones that are *expected* to be seen, so we fast-path\n    // them.\n    nonHostChars = [ '%', '/', '?', ';', '#' ].concat(autoEscape),\n    hostEndingChars = [ '/', '?', '#' ],\n    hostnameMaxLen = 255,\n    hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/,\n    hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/,\n    // protocols that can allow \"unsafe\" and \"unwise\" chars.\n    /* eslint-disable no-script-url */\n    // protocols that never have a hostname.\n    hostlessProtocol = {\n      'javascript': true,\n      'javascript:': true\n    },\n    // protocols that always contain a // bit.\n    slashedProtocol = {\n      'http': true,\n      'https': true,\n      'ftp': true,\n      'gopher': true,\n      'file': true,\n      'http:': true,\n      'https:': true,\n      'ftp:': true,\n      'gopher:': true,\n      'file:': true\n    };\n    /* eslint-enable no-script-url */\n\nfunction urlParse(url, slashesDenoteHost) {\n  if (url && url instanceof Url) { return url; }\n\n  var u = new Url();\n  u.parse(url, slashesDenoteHost);\n  return u;\n}\n\nUrl.prototype.parse = function(url, slashesDenoteHost) {\n  var i, l, lowerProto, hec, slashes,\n      rest = url;\n\n  // trim before proceeding.\n  // This is to support parse stuff like \"  http://foo.com  \\n\"\n  rest = rest.trim();\n\n  if (!slashesDenoteHost && url.split('#').length === 1) {\n    // Try fast path regexp\n    var simplePath = simplePathPattern.exec(rest);\n    if (simplePath) {\n      this.pathname = simplePath[1];\n      if (simplePath[2]) {\n        this.search = simplePath[2];\n      }\n      return this;\n    }\n  }\n\n  var proto = protocolPattern.exec(rest);\n  if (proto) {\n    proto = proto[0];\n    lowerProto = proto.toLowerCase();\n    this.protocol = proto;\n    rest = rest.substr(proto.length);\n  }\n\n  // figure out if it's got a host\n  // user@server is *always* interpreted as a hostname, and url\n  // resolution will treat //foo/bar as host=foo,path=bar because that's\n  // how the browser resolves relative URLs.\n  if (slashesDenoteHost || proto || rest.match(/^\\/\\/[^@\\/]+@[^@\\/]+/)) {\n    slashes = rest.substr(0, 2) === '//';\n    if (slashes && !(proto && hostlessProtocol[proto])) {\n      rest = rest.substr(2);\n      this.slashes = true;\n    }\n  }\n\n  if (!hostlessProtocol[proto] &&\n      (slashes || (proto && !slashedProtocol[proto]))) {\n\n    // there's a hostname.\n    // the first instance of /, ?, ;, or # ends the host.\n    //\n    // If there is an @ in the hostname, then non-host chars *are* allowed\n    // to the left of the last @ sign, unless some host-ending character\n    // comes *before* the @-sign.\n    // URLs are obnoxious.\n    //\n    // ex:\n    // http://a@b@c/ => user:a@b host:c\n    // http://a@b?@c => user:a host:c path:/?@c\n\n    // v0.12 TODO(isaacs): This is not quite how Chrome does things.\n    // Review our test case against browsers more comprehensively.\n\n    // find the first instance of any hostEndingChars\n    var hostEnd = -1;\n    for (i = 0; i < hostEndingChars.length; i++) {\n      hec = rest.indexOf(hostEndingChars[i]);\n      if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) {\n        hostEnd = hec;\n      }\n    }\n\n    // at this point, either we have an explicit point where the\n    // auth portion cannot go past, or the last @ char is the decider.\n    var auth, atSign;\n    if (hostEnd === -1) {\n      // atSign can be anywhere.\n      atSign = rest.lastIndexOf('@');\n    } else {\n      // atSign must be in auth portion.\n      // http://a@b/c@d => host:b auth:a path:/c@d\n      atSign = rest.lastIndexOf('@', hostEnd);\n    }\n\n    // Now we have a portion which is definitely the auth.\n    // Pull that off.\n    if (atSign !== -1) {\n      auth = rest.slice(0, atSign);\n      rest = rest.slice(atSign + 1);\n      this.auth = auth;\n    }\n\n    // the host is the remaining to the left of the first non-host char\n    hostEnd = -1;\n    for (i = 0; i < nonHostChars.length; i++) {\n      hec = rest.indexOf(nonHostChars[i]);\n      if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) {\n        hostEnd = hec;\n      }\n    }\n    // if we still have not hit it, then the entire thing is a host.\n    if (hostEnd === -1) {\n      hostEnd = rest.length;\n    }\n\n    if (rest[hostEnd - 1] === ':') { hostEnd--; }\n    var host = rest.slice(0, hostEnd);\n    rest = rest.slice(hostEnd);\n\n    // pull out port.\n    this.parseHost(host);\n\n    // we've indicated that there is a hostname,\n    // so even if it's empty, it has to be present.\n    this.hostname = this.hostname || '';\n\n    // if hostname begins with [ and ends with ]\n    // assume that it's an IPv6 address.\n    var ipv6Hostname = this.hostname[0] === '[' &&\n        this.hostname[this.hostname.length - 1] === ']';\n\n    // validate a little.\n    if (!ipv6Hostname) {\n      var hostparts = this.hostname.split(/\\./);\n      for (i = 0, l = hostparts.length; i < l; i++) {\n        var part = hostparts[i];\n        if (!part) { continue; }\n        if (!part.match(hostnamePartPattern)) {\n          var newpart = '';\n          for (var j = 0, k = part.length; j < k; j++) {\n            if (part.charCodeAt(j) > 127) {\n              // we replace non-ASCII char with a temporary placeholder\n              // we need this to make sure size of hostname is not\n              // broken by replacing non-ASCII by nothing\n              newpart += 'x';\n            } else {\n              newpart += part[j];\n            }\n          }\n          // we test again with ASCII char only\n          if (!newpart.match(hostnamePartPattern)) {\n            var validParts = hostparts.slice(0, i);\n            var notHost = hostparts.slice(i + 1);\n            var bit = part.match(hostnamePartStart);\n            if (bit) {\n              validParts.push(bit[1]);\n              notHost.unshift(bit[2]);\n            }\n            if (notHost.length) {\n              rest = notHost.join('.') + rest;\n            }\n            this.hostname = validParts.join('.');\n            break;\n          }\n        }\n      }\n    }\n\n    if (this.hostname.length > hostnameMaxLen) {\n      this.hostname = '';\n    }\n\n    // strip [ and ] from the hostname\n    // the host field still retains them, though\n    if (ipv6Hostname) {\n      this.hostname = this.hostname.substr(1, this.hostname.length - 2);\n    }\n  }\n\n  // chop off from the tail first.\n  var hash = rest.indexOf('#');\n  if (hash !== -1) {\n    // got a fragment string.\n    this.hash = rest.substr(hash);\n    rest = rest.slice(0, hash);\n  }\n  var qm = rest.indexOf('?');\n  if (qm !== -1) {\n    this.search = rest.substr(qm);\n    rest = rest.slice(0, qm);\n  }\n  if (rest) { this.pathname = rest; }\n  if (slashedProtocol[lowerProto] &&\n      this.hostname && !this.pathname) {\n    this.pathname = '';\n  }\n\n  return this;\n};\n\nUrl.prototype.parseHost = function(host) {\n  var port = portPattern.exec(host);\n  if (port) {\n    port = port[0];\n    if (port !== ':') {\n      this.port = port.substr(1);\n    }\n    host = host.substr(0, host.length - port.length);\n  }\n  if (host) { this.hostname = host; }\n};\n\nmodule.exports = urlParse;\n/index.js'use strict';\n\n\nmodule.exports.encode = require('./encode');\nmodule.exports.decode = require('./decode');\nmodule.exports.format = require('./format');\nmodule.exports.parse  = require('./parse');\n/CHANGELOG.md1.0.1 / 2015-09-15\n------------------\n\n- Fixed closure compiler compatibility (#1).\n\n\n1.0.0 / 2015-03-04\n------------------\n\n- Added `.decode()`, `.parse()`, `.format()`.\n\n\n0.0.1 / 2015-03-02\n------------------\n\n- First release.\n/encode.js\b\n'use strict';\n\n\nvar encodeCache = {};\n\n\n// Create a lookup array where anything but characters in `chars` string\n// and alphanumeric chars is percent-encoded.\n//\nfunction getEncodeCache(exclude) {\n  var i, ch, cache = encodeCache[exclude];\n  if (cache) { return cache; }\n\n  cache = encodeCache[exclude] = [];\n\n  for (i = 0; i < 128; i++) {\n    ch = String.fromCharCode(i);\n\n    if (/^[0-9a-z]$/i.test(ch)) {\n      // always allow unencoded alphanumeric characters\n      cache.push(ch);\n    } else {\n      cache.push('%' + ('0' + i.toString(16).toUpperCase()).slice(-2));\n    }\n  }\n\n  for (i = 0; i < exclude.length; i++) {\n    cache[exclude.charCodeAt(i)] = exclude[i];\n  }\n\n  return cache;\n}\n\n\n// Encode unsafe characters with percent-encoding, skipping already\n// encoded sequences.\n//\n//  - string       - string to encode\n//  - exclude      - list of characters to ignore (in addition to a-zA-Z0-9)\n//  - keepEscaped  - don't encode '%' in a correct escape sequence (default: true)\n//\nfunction encode(string, exclude, keepEscaped) {\n  var i, l, code, nextCode, cache,\n      result = '';\n\n  if (typeof exclude !== 'string') {\n    // encode(string, keepEscaped)\n    keepEscaped  = exclude;\n    exclude = encode.defaultChars;\n  }\n\n  if (typeof keepEscaped === 'undefined') {\n    keepEscaped = true;\n  }\n\n  cache = getEncodeCache(exclude);\n\n  for (i = 0, l = string.length; i < l; i++) {\n    code = string.charCodeAt(i);\n\n    if (keepEscaped && code === 0x25 /* % */ && i + 2 < l) {\n      if (/^[0-9a-f]{2}$/i.test(string.slice(i + 1, i + 3))) {\n        result += string.slice(i, i + 3);\n        i += 2;\n        continue;\n      }\n    }\n\n    if (code < 128) {\n      result += cache[code];\n      continue;\n    }\n\n    if (code >= 0xD800 && code <= 0xDFFF) {\n      if (code >= 0xD800 && code <= 0xDBFF && i + 1 < l) {\n        nextCode = string.charCodeAt(i + 1);\n        if (nextCode >= 0xDC00 && nextCode <= 0xDFFF) {\n          result += encodeURIComponent(string[i] + string[i + 1]);\n          i++;\n          continue;\n        }\n      }\n      result += '%EF%BF%BD';\n      continue;\n    }\n\n    result += encodeURIComponent(string[i]);\n  }\n\n  return result;\n}\n\nencode.defaultChars   = \";/?:@&=+$,-_.!~*'()#\";\nencode.componentChars = \"-_.!~*'()\";\n\n\nmodule.exports = encode;\n/LICENSE\bCopyright (c) 2015 Vitaly Puzrin, Alex Kocharin.\n\nPermission is hereby granted, free of charge, to any person\nobtaining a copy of this software and associated documentation\nfiles (the \"Software\"), to deal in the Software without\nrestriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the\nSoftware is furnished to do so, subject to the following\nconditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\nOF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\nHOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\nWHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\nFROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\nOTHER DEALINGS IN THE SOFTWARE.\n\n--------------------------------------------------------------------------------\n\n.parse() is based on Joyent's node.js `url` code:\n\nCopyright Joyent, Inc. and other Node contributors. All rights reserved.\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to\ndeal in the Software without restriction, including without limitation the\nrights to use, copy, modify, merge, publish, distribute, sublicense, and/or\nsell copies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\nFROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\nIN THE SOFTWARE.\n/decode.js\u000b9\n'use strict';\n\n\n/* eslint-disable no-bitwise */\n\nvar decodeCache = {};\n\nfunction getDecodeCache(exclude) {\n  var i, ch, cache = decodeCache[exclude];\n  if (cache) { return cache; }\n\n  cache = decodeCache[exclude] = [];\n\n  for (i = 0; i < 128; i++) {\n    ch = String.fromCharCode(i);\n    cache.push(ch);\n  }\n\n  for (i = 0; i < exclude.length; i++) {\n    ch = exclude.charCodeAt(i);\n    cache[ch] = '%' + ('0' + ch.toString(16).toUpperCase()).slice(-2);\n  }\n\n  return cache;\n}\n\n\n// Decode percent-encoded string.\n//\nfunction decode(string, exclude) {\n  var cache;\n\n  if (typeof exclude !== 'string') {\n    exclude = decode.defaultChars;\n  }\n\n  cache = getDecodeCache(exclude);\n\n  return string.replace(/(%[a-f0-9]{2})+/gi, function(seq) {\n    var i, l, b1, b2, b3, b4, chr,\n        result = '';\n\n    for (i = 0, l = seq.length; i < l; i += 3) {\n      b1 = parseInt(seq.slice(i + 1, i + 3), 16);\n\n      if (b1 < 0x80) {\n        result += cache[b1];\n        continue;\n      }\n\n      if ((b1 & 0xE0) === 0xC0 && (i + 3 < l)) {\n        // 110xxxxx 10xxxxxx\n        b2 = parseInt(seq.slice(i + 4, i + 6), 16);\n\n        if ((b2 & 0xC0) === 0x80) {\n          chr = ((b1 << 6) & 0x7C0) | (b2 & 0x3F);\n\n          if (chr < 0x80) {\n            result += '\\ufffd\\ufffd';\n          } else {\n            result += String.fromCharCode(chr);\n          }\n\n          i += 3;\n          continue;\n        }\n      }\n\n      if ((b1 & 0xF0) === 0xE0 && (i + 6 < l)) {\n        // 1110xxxx 10xxxxxx 10xxxxxx\n        b2 = parseInt(seq.slice(i + 4, i + 6), 16);\n        b3 = parseInt(seq.slice(i + 7, i + 9), 16);\n\n        if ((b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80) {\n          chr = ((b1 << 12) & 0xF000) | ((b2 << 6) & 0xFC0) | (b3 & 0x3F);\n\n          if (chr < 0x800 || (chr >= 0xD800 && chr <= 0xDFFF)) {\n            result += '\\ufffd\\ufffd\\ufffd';\n          } else {\n            result += String.fromCharCode(chr);\n          }\n\n          i += 6;\n          continue;\n        }\n      }\n\n      if ((b1 & 0xF8) === 0xF0 && (i + 9 < l)) {\n        // 111110xx 10xxxxxx 10xxxxxx 10xxxxxx\n        b2 = parseInt(seq.slice(i + 4, i + 6), 16);\n        b3 = parseInt(seq.slice(i + 7, i + 9), 16);\n        b4 = parseInt(seq.slice(i + 10, i + 12), 16);\n\n        if ((b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80 && (b4 & 0xC0) === 0x80) {\n          chr = ((b1 << 18) & 0x1C0000) | ((b2 << 12) & 0x3F000) | ((b3 << 6) & 0xFC0) | (b4 & 0x3F);\n\n          if (chr < 0x10000 || chr > 0x10FFFF) {\n            result += '\\ufffd\\ufffd\\ufffd\\ufffd';\n          } else {\n            chr -= 0x10000;\n            result += String.fromCharCode(0xD800 + (chr >> 10), 0xDC00 + (chr & 0x3FF));\n          }\n\n          i += 9;\n          continue;\n        }\n      }\n\n      result += '\\ufffd';\n    }\n\n    return result;\n  });\n}\n\n\ndecode.defaultChars   = ';/?:@&=+$,#';\ndecode.componentChars = '';\n\n\nmodule.exports = decode;\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/bWV0aG9kc0AxLjEuMg==",
    "content": "/index.js\u0004\u0010/*!\n * methods\n * Copyright(c) 2013-2014 TJ Holowaychuk\n * Copyright(c) 2015-2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar http = require('http');\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = getCurrentNodeMethods() || getBasicNodeMethods();\n\n/**\n * Get the current Node.js methods.\n * @private\n */\n\nfunction getCurrentNodeMethods() {\n  return http.METHODS && http.METHODS.map(function lowerCaseMethod(method) {\n    return method.toLowerCase();\n  });\n}\n\n/**\n * Get the \"basic\" Node.js methods, a snapshot from Node.js 0.10.\n * @private\n */\n\nfunction getBasicNodeMethods() {\n  return [\n    'get',\n    'post',\n    'put',\n    'head',\n    'delete',\n    'options',\n    'trace',\n    'copy',\n    'lock',\n    'mkcol',\n    'move',\n    'purge',\n    'propfind',\n    'proppatch',\n    'unlock',\n    'report',\n    'mkactivity',\n    'checkout',\n    'merge',\n    'm-search',\n    'notify',\n    'subscribe',\n    'unsubscribe',\n    'patch',\n    'search',\n    'connect'\n  ];\n}\n/HISTORY.md\u00011.1.2 / 2016-01-17\n==================\n\n  * perf: enable strict mode\n\n1.1.1 / 2014-12-30\n==================\n\n  * Improve `browserify` support\n\n1.1.0 / 2014-07-05\n==================\n\n  * Add `CONNECT` method\n \n1.0.1 / 2014-06-02\n==================\n\n  * Fix module to work with harmony transform\n\n1.0.0 / 2014-05-08\n==================\n\n  * Add `PURGE` method\n\n0.1.0 / 2013-10-28\n==================\n\n  * Add `http.METHODS` support\n/LICENSE\u0004(The MIT License)\n\nCopyright (c) 2013-2014 TJ Holowaychuk <tj@vision-media.ca>\nCopyright (c) 2015-2016 Douglas Christopher Wilson <doug@somethingdoug.com>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n/package.json\u0003{\n  \"name\": \"methods\",\n  \"description\": \"HTTP methods that node supports\",\n  \"version\": \"1.1.2\",\n  \"contributors\": [\n    \"Douglas Christopher Wilson <doug@somethingdoug.com>\",\n    \"Jonathan Ong <me@jongleberry.com> (http://jongleberry.com)\",\n    \"TJ Holowaychuk <tj@vision-media.ca> (http://tjholowaychuk.com)\"\n  ],\n  \"license\": \"MIT\",\n  \"repository\": \"jshttp/methods\",\n  \"devDependencies\": {\n    \"istanbul\": \"0.4.1\",\n    \"mocha\": \"1.21.5\"\n  },\n  \"files\": [\n    \"index.js\",\n    \"HISTORY.md\",\n    \"LICENSE\"\n  ],\n  \"engines\": {\n    \"node\": \">= 0.6\"\n  },\n  \"scripts\": {\n    \"test\": \"mocha --reporter spec --bail --check-leaks test/\",\n    \"test-cov\": \"istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/\",\n    \"test-travis\": \"istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/\"\n  },\n  \"browser\": {\n    \"http\": false\n  },\n  \"keywords\": [\n    \"http\",\n    \"methods\"\n  ]\n}\n/README.md\u0006# Methods\n\n[![NPM Version][npm-image]][npm-url]\n[![NPM Downloads][downloads-image]][downloads-url]\n[![Node.js Version][node-version-image]][node-version-url]\n[![Build Status][travis-image]][travis-url]\n[![Test Coverage][coveralls-image]][coveralls-url]\n\nHTTP verbs that Node.js core's HTTP parser supports.\n\nThis module provides an export that is just like `http.METHODS` from Node.js core,\nwith the following differences:\n\n  * All method names are lower-cased.\n  * Contains a fallback list of methods for Node.js versions that do not have a\n    `http.METHODS` export (0.10 and lower).\n  * Provides the fallback list when using tools like `browserify` without pulling\n    in the `http` shim module.\n\n## Install\n\n```bash\n$ npm install methods\n```\n\n## API\n\n```js\nvar methods = require('methods')\n```\n\n### methods\n\nThis is an array of lower-cased method names that Node.js supports. If Node.js\nprovides the `http.METHODS` export, then this is the same array lower-cased,\notherwise it is a snapshot of the verbs from Node.js 0.10.\n\n## License\n\n[MIT](LICENSE)\n\n[npm-image]: https://img.shields.io/npm/v/methods.svg?style=flat\n[npm-url]: https://npmjs.org/package/methods\n[node-version-image]: https://img.shields.io/node/v/methods.svg?style=flat\n[node-version-url]: https://nodejs.org/en/download/\n[travis-image]: https://img.shields.io/travis/jshttp/methods.svg?style=flat\n[travis-url]: https://travis-ci.org/jshttp/methods\n[coveralls-image]: https://img.shields.io/coveralls/jshttp/methods.svg?style=flat\n[coveralls-url]: https://coveralls.io/r/jshttp/methods?branch=master\n[downloads-image]: https://img.shields.io/npm/dm/methods.svg?style=flat\n[downloads-url]: https://npmjs.org/package/methods\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/bWVkaWEtdHlwZXJAMC4zLjA=",
    "content": "/HISTORY.md\u00010.3.0 / 2014-09-07\n==================\n\n  * Support Node.js 0.6\n  * Throw error when parameter format invalid on parse\n\n0.2.0 / 2014-06-18\n==================\n\n  * Add `typer.format()` to format media types\n\n0.1.0 / 2014-06-17\n==================\n\n  * Accept `req` as argument to `parse`\n  * Accept `res` as argument to `parse`\n  * Parse media type with extra LWS between type and first parameter\n\n0.0.0 / 2014-06-13\n==================\n\n  * Initial implementation\n/index.js\u0018/*!\n * media-typer\n * Copyright(c) 2014 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n/**\n * RegExp to match *( \";\" parameter ) in RFC 2616 sec 3.7\n *\n * parameter     = token \"=\" ( token | quoted-string )\n * token         = 1*<any CHAR except CTLs or separators>\n * separators    = \"(\" | \")\" | \"<\" | \">\" | \"@\"\n *               | \",\" | \";\" | \":\" | \"\\\" | <\">\n *               | \"/\" | \"[\" | \"]\" | \"?\" | \"=\"\n *               | \"{\" | \"}\" | SP | HT\n * quoted-string = ( <\"> *(qdtext | quoted-pair ) <\"> )\n * qdtext        = <any TEXT except <\">>\n * quoted-pair   = \"\\\" CHAR\n * CHAR          = <any US-ASCII character (octets 0 - 127)>\n * TEXT          = <any OCTET except CTLs, but including LWS>\n * LWS           = [CRLF] 1*( SP | HT )\n * CRLF          = CR LF\n * CR            = <US-ASCII CR, carriage return (13)>\n * LF            = <US-ASCII LF, linefeed (10)>\n * SP            = <US-ASCII SP, space (32)>\n * SHT           = <US-ASCII HT, horizontal-tab (9)>\n * CTL           = <any US-ASCII control character (octets 0 - 31) and DEL (127)>\n * OCTET         = <any 8-bit sequence of data>\n */\nvar paramRegExp = /; *([!#$%&'\\*\\+\\-\\.0-9A-Z\\^_`a-z\\|~]+) *= *(\"(?:[ !\\u0023-\\u005b\\u005d-\\u007e\\u0080-\\u00ff]|\\\\[\\u0020-\\u007e])*\"|[!#$%&'\\*\\+\\-\\.0-9A-Z\\^_`a-z\\|~]+) */g;\nvar textRegExp = /^[\\u0020-\\u007e\\u0080-\\u00ff]+$/\nvar tokenRegExp = /^[!#$%&'\\*\\+\\-\\.0-9A-Z\\^_`a-z\\|~]+$/\n\n/**\n * RegExp to match quoted-pair in RFC 2616\n *\n * quoted-pair = \"\\\" CHAR\n * CHAR        = <any US-ASCII character (octets 0 - 127)>\n */\nvar qescRegExp = /\\\\([\\u0000-\\u007f])/g;\n\n/**\n * RegExp to match chars that must be quoted-pair in RFC 2616\n */\nvar quoteRegExp = /([\\\\\"])/g;\n\n/**\n * RegExp to match type in RFC 6838\n *\n * type-name = restricted-name\n * subtype-name = restricted-name\n * restricted-name = restricted-name-first *126restricted-name-chars\n * restricted-name-first  = ALPHA / DIGIT\n * restricted-name-chars  = ALPHA / DIGIT / \"!\" / \"#\" /\n *                          \"$\" / \"&\" / \"-\" / \"^\" / \"_\"\n * restricted-name-chars =/ \".\" ; Characters before first dot always\n *                              ; specify a facet name\n * restricted-name-chars =/ \"+\" ; Characters after last plus always\n *                              ; specify a structured syntax suffix\n * ALPHA =  %x41-5A / %x61-7A   ; A-Z / a-z\n * DIGIT =  %x30-39             ; 0-9\n */\nvar subtypeNameRegExp = /^[A-Za-z0-9][A-Za-z0-9!#$&^_.-]{0,126}$/\nvar typeNameRegExp = /^[A-Za-z0-9][A-Za-z0-9!#$&^_-]{0,126}$/\nvar typeRegExp = /^ *([A-Za-z0-9][A-Za-z0-9!#$&^_-]{0,126})\\/([A-Za-z0-9][A-Za-z0-9!#$&^_.+-]{0,126}) *$/;\n\n/**\n * Module exports.\n */\n\nexports.format = format\nexports.parse = parse\n\n/**\n * Format object to media type.\n *\n * @param {object} obj\n * @return {string}\n * @api public\n */\n\nfunction format(obj) {\n  if (!obj || typeof obj !== 'object') {\n    throw new TypeError('argument obj is required')\n  }\n\n  var parameters = obj.parameters\n  var subtype = obj.subtype\n  var suffix = obj.suffix\n  var type = obj.type\n\n  if (!type || !typeNameRegExp.test(type)) {\n    throw new TypeError('invalid type')\n  }\n\n  if (!subtype || !subtypeNameRegExp.test(subtype)) {\n    throw new TypeError('invalid subtype')\n  }\n\n  // format as type/subtype\n  var string = type + '/' + subtype\n\n  // append +suffix\n  if (suffix) {\n    if (!typeNameRegExp.test(suffix)) {\n      throw new TypeError('invalid suffix')\n    }\n\n    string += '+' + suffix\n  }\n\n  // append parameters\n  if (parameters && typeof parameters === 'object') {\n    var param\n    var params = Object.keys(parameters).sort()\n\n    for (var i = 0; i < params.length; i++) {\n      param = params[i]\n\n      if (!tokenRegExp.test(param)) {\n        throw new TypeError('invalid parameter name')\n      }\n\n      string += '; ' + param + '=' + qstring(parameters[param])\n    }\n  }\n\n  return string\n}\n\n/**\n * Parse media type to object.\n *\n * @param {string|object} string\n * @return {Object}\n * @api public\n */\n\nfunction parse(string) {\n  if (!string) {\n    throw new TypeError('argument string is required')\n  }\n\n  // support req/res-like objects as argument\n  if (typeof string === 'object') {\n    string = getcontenttype(string)\n  }\n\n  if (typeof string !== 'string') {\n    throw new TypeError('argument string is required to be a string')\n  }\n\n  var index = string.indexOf(';')\n  var type = index !== -1\n    ? string.substr(0, index)\n    : string\n\n  var key\n  var match\n  var obj = splitType(type)\n  var params = {}\n  var value\n\n  paramRegExp.lastIndex = index\n\n  while (match = paramRegExp.exec(string)) {\n    if (match.index !== index) {\n      throw new TypeError('invalid parameter format')\n    }\n\n    index += match[0].length\n    key = match[1].toLowerCase()\n    value = match[2]\n\n    if (value[0] === '\"') {\n      // remove quotes and escapes\n      value = value\n        .substr(1, value.length - 2)\n        .replace(qescRegExp, '$1')\n    }\n\n    params[key] = value\n  }\n\n  if (index !== -1 && index !== string.length) {\n    throw new TypeError('invalid parameter format')\n  }\n\n  obj.parameters = params\n\n  return obj\n}\n\n/**\n * Get content-type from req/res objects.\n *\n * @param {object}\n * @return {Object}\n * @api private\n */\n\nfunction getcontenttype(obj) {\n  if (typeof obj.getHeader === 'function') {\n    // res-like\n    return obj.getHeader('content-type')\n  }\n\n  if (typeof obj.headers === 'object') {\n    // req-like\n    return obj.headers && obj.headers['content-type']\n  }\n}\n\n/**\n * Quote a string if necessary.\n *\n * @param {string} val\n * @return {string}\n * @api private\n */\n\nfunction qstring(val) {\n  var str = String(val)\n\n  // no need to quote tokens\n  if (tokenRegExp.test(str)) {\n    return str\n  }\n\n  if (str.length > 0 && !textRegExp.test(str)) {\n    throw new TypeError('invalid parameter value')\n  }\n\n  return '\"' + str.replace(quoteRegExp, '\\\\$1') + '\"'\n}\n\n/**\n * Simply \"type/subtype+siffx\" into parts.\n *\n * @param {string} string\n * @return {Object}\n * @api private\n */\n\nfunction splitType(string) {\n  var match = typeRegExp.exec(string.toLowerCase())\n\n  if (!match) {\n    throw new TypeError('invalid media type')\n  }\n\n  var type = match[1]\n  var subtype = match[2]\n  var suffix\n\n  // suffix after last +\n  var index = subtype.lastIndexOf('+')\n  if (index !== -1) {\n    suffix = subtype.substr(index + 1)\n    subtype = subtype.substr(0, index)\n  }\n\n  var obj = {\n    type: type,\n    subtype: subtype,\n    suffix: suffix\n  }\n\n  return obj\n}\n/package.json\u0002{\n  \"name\": \"media-typer\",\n  \"description\": \"Simple RFC 6838 media type parser and formatter\",\n  \"version\": \"0.3.0\",\n  \"author\": \"Douglas Christopher Wilson <doug@somethingdoug.com>\",\n  \"license\": \"MIT\",\n  \"repository\": \"jshttp/media-typer\",\n  \"devDependencies\": {\n    \"istanbul\": \"0.3.2\",\n    \"mocha\": \"~1.21.4\",\n    \"should\": \"~4.0.4\"\n  },\n  \"files\": [\n    \"LICENSE\",\n    \"HISTORY.md\",\n    \"index.js\"\n  ],\n  \"engines\": {\n    \"node\": \">= 0.6\"\n  },\n  \"scripts\": {\n    \"test\": \"mocha --reporter spec --check-leaks --bail test/\",\n    \"test-cov\": \"istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/\",\n    \"test-travis\": \"istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/\"\n  }\n}\n/LICENSE\u0004A(The MIT License)\n\nCopyright (c) 2014 Douglas Christopher Wilson\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n/README.md\tC# media-typer\n\n[![NPM Version][npm-image]][npm-url]\n[![NPM Downloads][downloads-image]][downloads-url]\n[![Node.js Version][node-version-image]][node-version-url]\n[![Build Status][travis-image]][travis-url]\n[![Test Coverage][coveralls-image]][coveralls-url]\n\nSimple RFC 6838 media type parser\n\n## Installation\n\n```sh\n$ npm install media-typer\n```\n\n## API\n\n```js\nvar typer = require('media-typer')\n```\n\n### typer.parse(string)\n\n```js\nvar obj = typer.parse('image/svg+xml; charset=utf-8')\n```\n\nParse a media type string. This will return an object with the following\nproperties (examples are shown for the string `'image/svg+xml; charset=utf-8'`):\n\n - `type`: The type of the media type (always lower case). Example: `'image'`\n\n - `subtype`: The subtype of the media type (always lower case). Example: `'svg'`\n\n - `suffix`: The suffix of the media type (always lower case). Example: `'xml'`\n\n - `parameters`: An object of the parameters in the media type (name of parameter always lower case). Example: `{charset: 'utf-8'}`\n\n### typer.parse(req)\n\n```js\nvar obj = typer.parse(req)\n```\n\nParse the `content-type` header from the given `req`. Short-cut for\n`typer.parse(req.headers['content-type'])`.\n\n### typer.parse(res)\n\n```js\nvar obj = typer.parse(res)\n```\n\nParse the `content-type` header set on the given `res`. Short-cut for\n`typer.parse(res.getHeader('content-type'))`.\n\n### typer.format(obj)\n\n```js\nvar obj = typer.format({type: 'image', subtype: 'svg', suffix: 'xml'})\n```\n\nFormat an object into a media type string. This will return a string of the\nmime type for the given object. For the properties of the object, see the\ndocumentation for `typer.parse(string)`.\n\n## License\n\n[MIT](LICENSE)\n\n[npm-image]: https://img.shields.io/npm/v/media-typer.svg?style=flat\n[npm-url]: https://npmjs.org/package/media-typer\n[node-version-image]: https://img.shields.io/badge/node.js-%3E%3D_0.6-brightgreen.svg?style=flat\n[node-version-url]: http://nodejs.org/download/\n[travis-image]: https://img.shields.io/travis/jshttp/media-typer.svg?style=flat\n[travis-url]: https://travis-ci.org/jshttp/media-typer\n[coveralls-image]: https://img.shields.io/coveralls/jshttp/media-typer.svg?style=flat\n[coveralls-url]: https://coveralls.io/r/jshttp/media-typer\n[downloads-image]: https://img.shields.io/npm/dm/media-typer.svg?style=flat\n[downloads-url]: https://npmjs.org/package/media-typer\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/bWVkaXVtLXpvb21AMS4wLjg=",
    "content": "/dist/medium-zoom.esm.jsO_/*! medium-zoom 1.0.8 | MIT License | https://github.com/francoischalifour/medium-zoom */\nvar _extends = Object.assign || function (target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i];\n\n    for (var key in source) {\n      if (Object.prototype.hasOwnProperty.call(source, key)) {\n        target[key] = source[key];\n      }\n    }\n  }\n\n  return target;\n};\n\nvar isSupported = function isSupported(node) {\n  return node.tagName === 'IMG';\n};\n\n/* eslint-disable-next-line no-prototype-builtins */\nvar isNodeList = function isNodeList(selector) {\n  return NodeList.prototype.isPrototypeOf(selector);\n};\n\nvar isNode = function isNode(selector) {\n  return selector && selector.nodeType === 1;\n};\n\nvar isSvg = function isSvg(image) {\n  var source = image.currentSrc || image.src;\n  return source.substr(-4).toLowerCase() === '.svg';\n};\n\nvar getImagesFromSelector = function getImagesFromSelector(selector) {\n  try {\n    if (Array.isArray(selector)) {\n      return selector.filter(isSupported);\n    }\n\n    if (isNodeList(selector)) {\n      // Do not use spread operator or Array.from() for IE support\n      return [].slice.call(selector).filter(isSupported);\n    }\n\n    if (isNode(selector)) {\n      return [selector].filter(isSupported);\n    }\n\n    if (typeof selector === 'string') {\n      // Do not use spread operator or Array.from() for IE support\n      return [].slice.call(document.querySelectorAll(selector)).filter(isSupported);\n    }\n\n    return [];\n  } catch (err) {\n    throw new TypeError('The provided selector is invalid.\\n' + 'Expects a CSS selector, a Node element, a NodeList or an array.\\n' + 'See: https://github.com/francoischalifour/medium-zoom');\n  }\n};\n\nvar createOverlay = function createOverlay(background) {\n  var overlay = document.createElement('div');\n  overlay.classList.add('medium-zoom-overlay');\n  overlay.style.background = background;\n\n  return overlay;\n};\n\nvar cloneTarget = function cloneTarget(template) {\n  var _template$getBounding = template.getBoundingClientRect(),\n      top = _template$getBounding.top,\n      left = _template$getBounding.left,\n      width = _template$getBounding.width,\n      height = _template$getBounding.height;\n\n  var clone = template.cloneNode();\n  var scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;\n  var scrollLeft = window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft || 0;\n\n  clone.removeAttribute('id');\n  clone.style.position = 'absolute';\n  clone.style.top = top + scrollTop + 'px';\n  clone.style.left = left + scrollLeft + 'px';\n  clone.style.width = width + 'px';\n  clone.style.height = height + 'px';\n  clone.style.transform = '';\n\n  return clone;\n};\n\nvar createCustomEvent = function createCustomEvent(type, params) {\n  var eventParams = _extends({\n    bubbles: false,\n    cancelable: false,\n    detail: undefined\n  }, params);\n\n  if (typeof window.CustomEvent === 'function') {\n    return new CustomEvent(type, eventParams);\n  }\n\n  var customEvent = document.createEvent('CustomEvent');\n  customEvent.initCustomEvent(type, eventParams.bubbles, eventParams.cancelable, eventParams.detail);\n\n  return customEvent;\n};\n\nvar mediumZoom = function mediumZoom(selector) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  /**\n   * Ensure the compatibility with IE11 if no Promise polyfill are used.\n   */\n  var Promise = window.Promise || function Promise(fn) {\n    function noop() {}\n    fn(noop, noop);\n  };\n\n  var _handleClick = function _handleClick(event) {\n    var target = event.target;\n\n\n    if (target === overlay) {\n      close();\n      return;\n    }\n\n    if (images.indexOf(target) === -1) {\n      return;\n    }\n\n    toggle({ target: target });\n  };\n\n  var _handleScroll = function _handleScroll() {\n    if (isAnimating || !active.original) {\n      return;\n    }\n\n    var currentScroll = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;\n\n    if (Math.abs(scrollTop - currentScroll) > zoomOptions.scrollOffset) {\n      setTimeout(close, 150);\n    }\n  };\n\n  var _handleKeyUp = function _handleKeyUp(event) {\n    var key = event.key || event.keyCode;\n\n    // Close if escape key is pressed\n    if (key === 'Escape' || key === 'Esc' || key === 27) {\n      close();\n    }\n  };\n\n  var update = function update() {\n    var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n    var newOptions = options;\n\n    if (options.background) {\n      overlay.style.background = options.background;\n    }\n\n    if (options.container && options.container instanceof Object) {\n      newOptions.container = _extends({}, zoomOptions.container, options.container);\n    }\n\n    if (options.template) {\n      var template = isNode(options.template) ? options.template : document.querySelector(options.template);\n\n      newOptions.template = template;\n    }\n\n    zoomOptions = _extends({}, zoomOptions, newOptions);\n\n    images.forEach(function (image) {\n      image.dispatchEvent(createCustomEvent('medium-zoom:update', {\n        detail: { zoom: zoom }\n      }));\n    });\n\n    return zoom;\n  };\n\n  var clone = function clone() {\n    var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    return mediumZoom(_extends({}, zoomOptions, options));\n  };\n\n  var attach = function attach() {\n    for (var _len = arguments.length, selectors = Array(_len), _key = 0; _key < _len; _key++) {\n      selectors[_key] = arguments[_key];\n    }\n\n    var newImages = selectors.reduce(function (imagesAccumulator, currentSelector) {\n      return [].concat(imagesAccumulator, getImagesFromSelector(currentSelector));\n    }, []);\n\n    newImages.filter(function (newImage) {\n      return images.indexOf(newImage) === -1;\n    }).forEach(function (newImage) {\n      images.push(newImage);\n      newImage.classList.add('medium-zoom-image');\n    });\n\n    eventListeners.forEach(function (_ref) {\n      var type = _ref.type,\n          listener = _ref.listener,\n          options = _ref.options;\n\n      newImages.forEach(function (image) {\n        image.addEventListener(type, listener, options);\n      });\n    });\n\n    return zoom;\n  };\n\n  var detach = function detach() {\n    for (var _len2 = arguments.length, selectors = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n      selectors[_key2] = arguments[_key2];\n    }\n\n    if (active.zoomed) {\n      close();\n    }\n\n    var imagesToDetach = selectors.length > 0 ? selectors.reduce(function (imagesAccumulator, currentSelector) {\n      return [].concat(imagesAccumulator, getImagesFromSelector(currentSelector));\n    }, []) : images;\n\n    imagesToDetach.forEach(function (image) {\n      image.classList.remove('medium-zoom-image');\n      image.dispatchEvent(createCustomEvent('medium-zoom:detach', {\n        detail: { zoom: zoom }\n      }));\n    });\n\n    images = images.filter(function (image) {\n      return imagesToDetach.indexOf(image) === -1;\n    });\n\n    return zoom;\n  };\n\n  var on = function on(type, listener) {\n    var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n    images.forEach(function (image) {\n      image.addEventListener('medium-zoom:' + type, listener, options);\n    });\n\n    eventListeners.push({ type: 'medium-zoom:' + type, listener: listener, options: options });\n\n    return zoom;\n  };\n\n  var off = function off(type, listener) {\n    var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n    images.forEach(function (image) {\n      image.removeEventListener('medium-zoom:' + type, listener, options);\n    });\n\n    eventListeners = eventListeners.filter(function (eventListener) {\n      return !(eventListener.type === 'medium-zoom:' + type && eventListener.listener.toString() === listener.toString());\n    });\n\n    return zoom;\n  };\n\n  var open = function open() {\n    var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n        target = _ref2.target;\n\n    var _animate = function _animate() {\n      var container = {\n        width: document.documentElement.clientWidth,\n        height: document.documentElement.clientHeight,\n        left: 0,\n        top: 0,\n        right: 0,\n        bottom: 0\n      };\n      var viewportWidth = void 0;\n      var viewportHeight = void 0;\n\n      if (zoomOptions.container) {\n        if (zoomOptions.container instanceof Object) {\n          // The container is given as an object with properties like width, height, left, top\n          container = _extends({}, container, zoomOptions.container);\n\n          // We need to adjust custom options like container.right or container.bottom\n          viewportWidth = container.width - container.left - container.right - zoomOptions.margin * 2;\n          viewportHeight = container.height - container.top - container.bottom - zoomOptions.margin * 2;\n        } else {\n          // The container is given as an element\n          var zoomContainer = isNode(zoomOptions.container) ? zoomOptions.container : document.querySelector(zoomOptions.container);\n\n          var _zoomContainer$getBou = zoomContainer.getBoundingClientRect(),\n              _width = _zoomContainer$getBou.width,\n              _height = _zoomContainer$getBou.height,\n              _left = _zoomContainer$getBou.left,\n              _top = _zoomContainer$getBou.top;\n\n          container = _extends({}, container, {\n            width: _width,\n            height: _height,\n            left: _left,\n            top: _top\n          });\n        }\n      }\n\n      viewportWidth = viewportWidth || container.width - zoomOptions.margin * 2;\n      viewportHeight = viewportHeight || container.height - zoomOptions.margin * 2;\n\n      var zoomTarget = active.zoomedHd || active.original;\n      var naturalWidth = isSvg(zoomTarget) ? viewportWidth : zoomTarget.naturalWidth || viewportWidth;\n      var naturalHeight = isSvg(zoomTarget) ? viewportHeight : zoomTarget.naturalHeight || viewportHeight;\n\n      var _zoomTarget$getBoundi = zoomTarget.getBoundingClientRect(),\n          top = _zoomTarget$getBoundi.top,\n          left = _zoomTarget$getBoundi.left,\n          width = _zoomTarget$getBoundi.width,\n          height = _zoomTarget$getBoundi.height;\n\n      var scaleX = Math.min(Math.max(width, naturalWidth), viewportWidth) / width;\n      var scaleY = Math.min(Math.max(height, naturalHeight), viewportHeight) / height;\n      var scale = Math.min(scaleX, scaleY);\n      var translateX = (-left + (viewportWidth - width) / 2 + zoomOptions.margin + container.left) / scale;\n      var translateY = (-top + (viewportHeight - height) / 2 + zoomOptions.margin + container.top) / scale;\n      var transform = 'scale(' + scale + ') translate3d(' + translateX + 'px, ' + translateY + 'px, 0)';\n\n      active.zoomed.style.transform = transform;\n\n      if (active.zoomedHd) {\n        active.zoomedHd.style.transform = transform;\n      }\n    };\n\n    return new Promise(function (resolve) {\n      if (target && images.indexOf(target) === -1) {\n        resolve(zoom);\n        return;\n      }\n\n      var _handleOpenEnd = function _handleOpenEnd() {\n        isAnimating = false;\n        active.zoomed.removeEventListener('transitionend', _handleOpenEnd);\n        active.original.dispatchEvent(createCustomEvent('medium-zoom:opened', {\n          detail: { zoom: zoom }\n        }));\n\n        resolve(zoom);\n      };\n\n      if (active.zoomed) {\n        resolve(zoom);\n        return;\n      }\n\n      if (target) {\n        // The zoom was triggered manually via a click\n        active.original = target;\n      } else if (images.length > 0) {\nvar _images = images;\n        active.original = _images[0];\n      } else {\n        resolve(zoom);\n        return;\n      }\n\n      active.original.dispatchEvent(createCustomEvent('medium-zoom:open', {\n        detail: { zoom: zoom }\n      }));\n\n      scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;\n      isAnimating = true;\n      active.zoomed = cloneTarget(active.original);\n\n      document.body.appendChild(overlay);\n\n      if (zoomOptions.template) {\n        var template = isNode(zoomOptions.template) ? zoomOptions.template : document.querySelector(zoomOptions.template);\n        active.template = document.createElement('div');\n        active.template.appendChild(template.content.cloneNode(true));\n\n        document.body.appendChild(active.template);\n      }\n\n      // If the selected <img> tag is inside a <picture> tag, set the\n      // currently-applied source as the cloned `src=` attribute.\n      // (as these might differ, or src= might be unset in some cases)\n      if (active.original.parentElement && active.original.parentElement.tagName === 'PICTURE' && active.original.currentSrc) {\n        active.zoomed.src = active.original.currentSrc;\n      }\n\n      document.body.appendChild(active.zoomed);\n\n      window.requestAnimationFrame(function () {\n        document.body.classList.add('medium-zoom--opened');\n      });\n\n      active.original.classList.add('medium-zoom-image--hidden');\n      active.zoomed.classList.add('medium-zoom-image--opened');\n\n      active.zoomed.addEventListener('click', close);\n      active.zoomed.addEventListener('transitionend', _handleOpenEnd);\n\n      if (active.original.getAttribute('data-zoom-src')) {\n        active.zoomedHd = active.zoomed.cloneNode();\n\n        // Reset the `scrset` property or the HD image won't load.\n        active.zoomedHd.removeAttribute('srcset');\n        active.zoomedHd.removeAttribute('sizes');\n        // Remove loading attribute so the browser can load the image normally\n        active.zoomedHd.removeAttribute('loading');\n\n        active.zoomedHd.src = active.zoomed.getAttribute('data-zoom-src');\n\n        active.zoomedHd.onerror = function () {\n          clearInterval(getZoomTargetSize);\n          console.warn('Unable to reach the zoom image target ' + active.zoomedHd.src);\n          active.zoomedHd = null;\n          _animate();\n        };\n\n        // We need to access the natural size of the full HD\n        // target as fast as possible to compute the animation.\n        var getZoomTargetSize = setInterval(function () {\n          if ( active.zoomedHd.complete) {\n            clearInterval(getZoomTargetSize);\n            active.zoomedHd.classList.add('medium-zoom-image--opened');\n            active.zoomedHd.addEventListener('click', close);\n            document.body.appendChild(active.zoomedHd);\n            _animate();\n          }\n        }, 10);\n      } else if (active.original.hasAttribute('srcset')) {\n        // If an image has a `srcset` attribuet, we don't know the dimensions of the\n        // zoomed (HD) image (like when `data-zoom-src` is specified).\n        // Therefore the approach is quite similar.\n        active.zoomedHd = active.zoomed.cloneNode();\n\n        // Resetting the sizes attribute tells the browser to load the\n        // image best fitting the current viewport size, respecting the `srcset`.\n        active.zoomedHd.removeAttribute('sizes');\n\n        // In Firefox, the `loading` attribute needs to be set to `eager` (default\n        // value) for the load event to be fired.\n        active.zoomedHd.removeAttribute('loading');\n\n        // Wait for the load event of the hd image. This will fire if the image\n        // is already cached.\n        var loadEventListener = active.zoomedHd.addEventListener('load', function () {\n          active.zoomedHd.removeEventListener('load', loadEventListener);\n          active.zoomedHd.classList.add('medium-zoom-image--opened');\n          active.zoomedHd.addEventListener('click', close);\n          document.body.appendChild(active.zoomedHd);\n          _animate();\n        });\n      } else {\n        _animate();\n      }\n    });\n  };\n\n  var close = function close() {\n    return new Promise(function (resolve) {\n      if (isAnimating || !active.original) {\n        resolve(zoom);\n        return;\n      }\n\n      var _handleCloseEnd = function _handleCloseEnd() {\n        active.original.classList.remove('medium-zoom-image--hidden');\n        document.body.removeChild(active.zoomed);\n        if (active.zoomedHd) {\n          document.body.removeChild(active.zoomedHd);\n        }\n        document.body.removeChild(overlay);\n        active.zoomed.classList.remove('medium-zoom-image--opened');\n        if (active.template) {\n          document.body.removeChild(active.template);\n        }\n\n        isAnimating = false;\n        active.zoomed.removeEventListener('transitionend', _handleCloseEnd);\n\n        active.original.dispatchEvent(createCustomEvent('medium-zoom:closed', {\n          detail: { zoom: zoom }\n        }));\n\n        active.original = null;\n        active.zoomed = null;\n        active.zoomedHd = null;\n        active.template = null;\n\n        resolve(zoom);\n      };\n\n      isAnimating = true;\n      document.body.classList.remove('medium-zoom--opened');\n      active.zoomed.style.transform = '';\n\n      if (active.zoomedHd) {\n        active.zoomedHd.style.transform = '';\n      }\n\n      // Fade out the template so it's not too abrupt\n      if (active.template) {\n        active.template.style.transition = 'opacity 150ms';\n        active.template.style.opacity = 0;\n      }\n\n      active.original.dispatchEvent(createCustomEvent('medium-zoom:close', {\n        detail: { zoom: zoom }\n      }));\n\n      active.zoomed.addEventListener('transitionend', _handleCloseEnd);\n    });\n  };\n\n  var toggle = function toggle() {\n    var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n        target = _ref3.target;\n\n    if (active.original) {\n      return close();\n    }\n\n    return open({ target: target });\n  };\n\n  var getOptions = function getOptions() {\n    return zoomOptions;\n  };\n\n  var getImages = function getImages() {\n    return images;\n  };\n\n  var getZoomedImage = function getZoomedImage() {\n    return active.original;\n  };\n\n  var images = [];\n  var eventListeners = [];\n  var isAnimating = false;\n  var scrollTop = 0;\n  var zoomOptions = options;\n  var active = {\n    original: null,\n    zoomed: null,\n    zoomedHd: null,\n    template: null\n\n    // If the selector is omitted, it's replaced by the options\n  };if (Object.prototype.toString.call(selector) === '[object Object]') {\n    zoomOptions = selector;\n  } else if (selector || typeof selector === 'string' // to process empty string as a selector\n  ) {\n      attach(selector);\n    }\n\n  // Apply the default option values\n  zoomOptions = _extends({\n    margin: 0,\n    background: '#fff',\n    scrollOffset: 40,\n    container: null,\n    template: null\n  }, zoomOptions);\n\n  var overlay = createOverlay(zoomOptions.background);\n\n  document.addEventListener('click', _handleClick);\n  document.addEventListener('keyup', _handleKeyUp);\n  document.addEventListener('scroll', _handleScroll);\n  window.addEventListener('resize', close);\n\n  var zoom = {\n    open: open,\n    close: close,\n    toggle: toggle,\n    update: update,\n    clone: clone,\n    attach: attach,\n    detach: detach,\n    on: on,\n    off: off,\n    getOptions: getOptions,\n    getImages: getImages,\n    getZoomedImage: getZoomedImage\n  };\n\n  return zoom;\n};\n\nfunction styleInject(css, ref) {\n  if ( ref === void 0 ) ref = {};\n  var insertAt = ref.insertAt;\n\n  if (!css || typeof document === 'undefined') { return; }\n\n  var head = document.head || document.getElementsByTagName('head')[0];\n  var style = document.createElement('style');\n  style.type = 'text/css';\n\n  if (insertAt === 'top') {\n    if (head.firstChild) {\n      head.insertBefore(style, head.firstChild);\n    } else {\n      head.appendChild(style);\n    }\n  } else {\n    head.appendChild(style);\n  }\n\n  if (style.styleSheet) {\n    style.styleSheet.cssText = css;\n  } else {\n    style.appendChild(document.createTextNode(css));\n  }\n}\n\nvar css = \".medium-zoom-overlay{position:fixed;top:0;right:0;bottom:0;left:0;opacity:0;transition:opacity .3s;will-change:opacity}.medium-zoom--opened .medium-zoom-overlay{cursor:pointer;cursor:zoom-out;opacity:1}.medium-zoom-image{cursor:pointer;cursor:zoom-in;transition:transform .3s cubic-bezier(.2,0,.2,1)!important}.medium-zoom-image--hidden{visibility:hidden}.medium-zoom-image--opened{position:relative;cursor:pointer;cursor:zoom-out;will-change:transform}\";\nstyleInject(css);\n\nexport default mediumZoom;\n/LICENSE\u0004FThe MIT License (MIT)\n\nCopyright (c) 2016-present François Chalifour\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n/dist/medium-zoom.jsLV/*! medium-zoom 1.0.8 | MIT License | https://github.com/francoischalifour/medium-zoom */\n(function(global, factory) {\n  typeof exports === \"object\" && typeof module !== \"undefined\" ? module.exports = factory() : typeof define === \"function\" && define.amd ? define(factory) : (global = global || self, \n  global.mediumZoom = factory());\n})(this, function() {\n  \"use strict\";\n  var _extends = Object.assign || function(target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n    return target;\n  };\n  var isSupported = function isSupported(node) {\n    return node.tagName === \"IMG\";\n  };\n  var isNodeList = function isNodeList(selector) {\n    return NodeList.prototype.isPrototypeOf(selector);\n  };\n  var isNode = function isNode(selector) {\n    return selector && selector.nodeType === 1;\n  };\n  var isSvg = function isSvg(image) {\n    var source = image.currentSrc || image.src;\n    return source.substr(-4).toLowerCase() === \".svg\";\n  };\n  var getImagesFromSelector = function getImagesFromSelector(selector) {\n    try {\n      if (Array.isArray(selector)) {\n        return selector.filter(isSupported);\n      }\n      if (isNodeList(selector)) {\n        return [].slice.call(selector).filter(isSupported);\n      }\n      if (isNode(selector)) {\n        return [ selector ].filter(isSupported);\n      }\n      if (typeof selector === \"string\") {\n        return [].slice.call(document.querySelectorAll(selector)).filter(isSupported);\n      }\n      return [];\n    } catch (err) {\n      throw new TypeError(\"The provided selector is invalid.\\n\" + \"Expects a CSS selector, a Node element, a NodeList or an array.\\n\" + \"See: https://github.com/francoischalifour/medium-zoom\");\n    }\n  };\n  var createOverlay = function createOverlay(background) {\n    var overlay = document.createElement(\"div\");\n    overlay.classList.add(\"medium-zoom-overlay\");\n    overlay.style.background = background;\n    return overlay;\n  };\n  var cloneTarget = function cloneTarget(template) {\n    var _template$getBounding = template.getBoundingClientRect(), top = _template$getBounding.top, left = _template$getBounding.left, width = _template$getBounding.width, height = _template$getBounding.height;\n    var clone = template.cloneNode();\n    var scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;\n    var scrollLeft = window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft || 0;\n    clone.removeAttribute(\"id\");\n    clone.style.position = \"absolute\";\n    clone.style.top = top + scrollTop + \"px\";\n    clone.style.left = left + scrollLeft + \"px\";\n    clone.style.width = width + \"px\";\n    clone.style.height = height + \"px\";\n    clone.style.transform = \"\";\n    return clone;\n  };\n  var createCustomEvent = function createCustomEvent(type, params) {\n    var eventParams = _extends({\n      bubbles: false,\n      cancelable: false,\n      detail: undefined\n    }, params);\n    if (typeof window.CustomEvent === \"function\") {\n      return new CustomEvent(type, eventParams);\n    }\n    var customEvent = document.createEvent(\"CustomEvent\");\n    customEvent.initCustomEvent(type, eventParams.bubbles, eventParams.cancelable, eventParams.detail);\n    return customEvent;\n  };\n  var mediumZoom = function mediumZoom(selector) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    var Promise = window.Promise || function Promise(fn) {\n      function noop() {}\n      fn(noop, noop);\n    };\n    var _handleClick = function _handleClick(event) {\n      var target = event.target;\n      if (target === overlay) {\n        close();\n        return;\n      }\n      if (images.indexOf(target) === -1) {\n        return;\n      }\n      toggle({\n        target: target\n      });\n    };\n    var _handleScroll = function _handleScroll() {\n      if (isAnimating || !active.original) {\n        return;\n      }\n      var currentScroll = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;\n      if (Math.abs(scrollTop - currentScroll) > zoomOptions.scrollOffset) {\n        setTimeout(close, 150);\n      }\n    };\n    var _handleKeyUp = function _handleKeyUp(event) {\n      var key = event.key || event.keyCode;\n      if (key === \"Escape\" || key === \"Esc\" || key === 27) {\n        close();\n      }\n    };\n    var update = function update() {\n      var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      var newOptions = options;\n      if (options.background) {\n        overlay.style.background = options.background;\n      }\n      if (options.container && options.container instanceof Object) {\n        newOptions.container = _extends({}, zoomOptions.container, options.container);\n      }\n      if (options.template) {\n        var template = isNode(options.template) ? options.template : document.querySelector(options.template);\n        newOptions.template = template;\n      }\n      zoomOptions = _extends({}, zoomOptions, newOptions);\n      images.forEach(function(image) {\n        image.dispatchEvent(createCustomEvent(\"medium-zoom:update\", {\n          detail: {\n            zoom: zoom\n          }\n        }));\n      });\n      return zoom;\n    };\n    var clone = function clone() {\n      var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      return mediumZoom(_extends({}, zoomOptions, options));\n    };\n    var attach = function attach() {\n      for (var _len = arguments.length, selectors = Array(_len), _key = 0; _key < _len; _key++) {\n        selectors[_key] = arguments[_key];\n      }\n      var newImages = selectors.reduce(function(imagesAccumulator, currentSelector) {\n        return [].concat(imagesAccumulator, getImagesFromSelector(currentSelector));\n      }, []);\n      newImages.filter(function(newImage) {\n        return images.indexOf(newImage) === -1;\n      }).forEach(function(newImage) {\n        images.push(newImage);\n        newImage.classList.add(\"medium-zoom-image\");\n      });\n      eventListeners.forEach(function(_ref) {\n        var type = _ref.type, listener = _ref.listener, options = _ref.options;\n        newImages.forEach(function(image) {\n          image.addEventListener(type, listener, options);\n        });\n      });\n      return zoom;\n    };\n    var detach = function detach() {\n      for (var _len2 = arguments.length, selectors = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n        selectors[_key2] = arguments[_key2];\n      }\n      if (active.zoomed) {\n        close();\n      }\n      var imagesToDetach = selectors.length > 0 ? selectors.reduce(function(imagesAccumulator, currentSelector) {\n        return [].concat(imagesAccumulator, getImagesFromSelector(currentSelector));\n      }, []) : images;\n      imagesToDetach.forEach(function(image) {\n        image.classList.remove(\"medium-zoom-image\");\n        image.dispatchEvent(createCustomEvent(\"medium-zoom:detach\", {\n          detail: {\n            zoom: zoom\n          }\n        }));\n      });\n      images = images.filter(function(image) {\n        return imagesToDetach.indexOf(image) === -1;\n      });\n      return zoom;\n    };\n    var on = function on(type, listener) {\n      var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n      images.forEach(function(image) {\n        image.addEventListener(\"medium-zoom:\" + type, listener, options);\n      });\n      eventListeners.push({\n        type: \"medium-zoom:\" + type,\n        listener: listener,\n        options: options\n      });\n      return zoom;\n    };\n    var off = function off(type, listener) {\n      var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n      images.forEach(function(image) {\n        image.removeEventListener(\"medium-zoom:\" + type, listener, options);\n      });\n      eventListeners = eventListeners.filter(function(eventListener) {\n        return !(eventListener.type === \"medium-zoom:\" + type && eventListener.listener.toString() === listener.toString());\n      });\n      return zoom;\n    };\n    var open = function open() {\n      var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, target = _ref2.target;\n      var _animate = function _animate() {\n        var container = {\n          width: document.documentElement.clientWidth,\n          height: document.documentElement.clientHeight,\n          left: 0,\n          top: 0,\n          right: 0,\n          bottom: 0\n        };\n        var viewportWidth = void 0;\n        var viewportHeight = void 0;\n        if (zoomOptions.container) {\n          if (zoomOptions.container instanceof Object) {\n            container = _extends({}, container, zoomOptions.container);\n            viewportWidth = container.width - container.left - container.right - zoomOptions.margin * 2;\n            viewportHeight = container.height - container.top - container.bottom - zoomOptions.margin * 2;\n          } else {\n            var zoomContainer = isNode(zoomOptions.container) ? zoomOptions.container : document.querySelector(zoomOptions.container);\n            var _zoomContainer$getBou = zoomContainer.getBoundingClientRect(), _width = _zoomContainer$getBou.width, _height = _zoomContainer$getBou.height, _left = _zoomContainer$getBou.left, _top = _zoomContainer$getBou.top;\n            container = _extends({}, container, {\n              width: _width,\n              height: _height,\n              left: _left,\n              top: _top\n            });\n          }\n        }\n        viewportWidth = viewportWidth || container.width - zoomOptions.margin * 2;\n        viewportHeight = viewportHeight || container.height - zoomOptions.margin * 2;\n        var zoomTarget = active.zoomedHd || active.original;\n        var naturalWidth = isSvg(zoomTarget) ? viewportWidth : zoomTarget.naturalWidth || viewportWidth;\n        var naturalHeight = isSvg(zoomTarget) ? viewportHeight : zoomTarget.naturalHeight || viewportHeight;\n        var _zoomTarget$getBoundi = zoomTarget.getBoundingClientRect(), top = _zoomTarget$getBoundi.top, left = _zoomTarget$getBoundi.left, width = _zoomTarget$getBoundi.width, height = _zoomTarget$getBoundi.height;\n        var scaleX = Math.min(Math.max(width, naturalWidth), viewportWidth) / width;\n        var scaleY = Math.min(Math.max(height, naturalHeight), viewportHeight) / height;\n        var scale = Math.min(scaleX, scaleY);\n        var translateX = (-left + (viewportWidth - width) / 2 + zoomOptions.margin + container.left) / scale;\n        var translateY = (-top + (viewportHeight - height) / 2 + zoomOptions.margin + container.top) / scale;\n        var transform = \"scale(\" + scale + \") translate3d(\" + translateX + \"px, \" + translateY + \"px, 0)\";\n        active.zoomed.style.transform = transform;\n        if (active.zoomedHd) {\n          active.zoomedHd.style.transform = transform;\n        }\n      };\n      return new Promise(function(resolve) {\n        if (target && images.indexOf(target) === -1) {\n          resolve(zoom);\n          return;\n        }\n        var _handleOpenEnd = function _handleOpenEnd() {\n          isAnimating = false;\n          active.zoomed.removeEventListener(\"transitionend\", _handleOpenEnd);\n          active.original.dispatchEvent(createCustomEvent(\"medium-zoom:opened\", {\n            detail: {\n              zoom: zoom\n            }\n          }));\n          resolve(zoom);\n        };\n        if (active.zoomed) {\n          resolve(zoom);\n          return;\n        }\n        if (target) {\n          active.original = target;\n        } else if (images.length > 0) {\n          var _images = images;\n          active.original = _images[0];\n        } else {\n          resolve(zoom);\n          return;\n        }\n        active.original.dispatchEvent(createCustomEvent(\"medium-zoom:open\", {\n          detail: {\n            zoom: zoom\n          }\n        }));\n        scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;\n        isAnimating = true;\n        active.zoomed = cloneTarget(active.original);\n        document.body.appendChild(overlay);\n        if (zoomOptions.template) {\n          var template = isNode(zoomOptions.template) ? zoomOptions.template : document.querySelector(zoomOptions.template);\n          active.template = document.createElement(\"div\");\n          active.template.appendChild(template.content.cloneNode(true));\n          document.body.appendChild(active.template);\n        }\n        if (active.original.parentElement && active.original.parentElement.tagName === \"PICTURE\" && active.original.currentSrc) {\n          active.zoomed.src = active.original.currentSrc;\n        }\n        document.body.appendChild(active.zoomed);\n        window.requestAnimationFrame(function() {\n          document.body.classList.add(\"medium-zoom--opened\");\n        });\n        active.original.classList.add(\"medium-zoom-image--hidden\");\n        active.zoomed.classList.add(\"medium-zoom-image--opened\");\n        active.zoomed.addEventListener(\"click\", close);\n        active.zoomed.addEventListener(\"transitionend\", _handleOpenEnd);\n        if (active.original.getAttribute(\"data-zoom-src\")) {\n          active.zoomedHd = active.zoomed.cloneNode();\n          active.zoomedHd.removeAttribute(\"srcset\");\n          active.zoomedHd.removeAttribute(\"sizes\");\n          active.zoomedHd.removeAttribute(\"loading\");\n          active.zoomedHd.src = active.zoomed.getAttribute(\"data-zoom-src\");\n          active.zoomedHd.onerror = function() {\n            clearInterval(getZoomTargetSize);\n            console.warn(\"Unable to reach the zoom image target \" + active.zoomedHd.src);\n            active.zoomedHd = null;\n            _animate();\n          };\n          var getZoomTargetSize = setInterval(function() {\n            if (active.zoomedHd.complete) {\n              clearInterval(getZoomTargetSize);\n              active.zoomedHd.classList.add(\"medium-zoom-image--opened\");\n              active.zoomedHd.addEventListener(\"click\", close);\n              document.body.appendChild(active.zoomedHd);\n              _animate();\n            }\n          }, 10);\n        } else if (active.original.hasAttribute(\"srcset\")) {\n          active.zoomedHd = active.zoomed.cloneNode();\n          active.zoomedHd.removeAttribute(\"sizes\");\n          active.zoomedHd.removeAttribute(\"loading\");\n          var loadEventListener = active.zoomedHd.addEventListener(\"load\", function() {\n            active.zoomedHd.removeEventListener(\"load\", loadEventListener);\n            active.zoomedHd.classList.add(\"medium-zoom-image--opened\");\n            active.zoomedHd.addEventListener(\"click\", close);\n            document.body.appendChild(active.zoomedHd);\n            _animate();\n          });\n        } else {\n          _animate();\n        }\n      });\n    };\n    var close = function close() {\n      return new Promise(function(resolve) {\n        if (isAnimating || !active.original) {\n          resolve(zoom);\n          return;\n        }\n        var _handleCloseEnd = function _handleCloseEnd() {\n          active.original.classList.remove(\"medium-zoom-image--hidden\");\n          document.body.removeChild(active.zoomed);\n          if (active.zoomedHd) {\n            document.body.removeChild(active.zoomedHd);\n          }\n          document.body.removeChild(overlay);\n          active.zoomed.classList.remove(\"medium-zoom-image--opened\");\n          if (active.template) {\n            document.body.removeChild(active.template);\n          }\n          isAnimating = false;\n          active.zoomed.removeEventListener(\"transitionend\", _handleCloseEnd);\n          active.original.dispatchEvent(createCustomEvent(\"medium-zoom:closed\", {\n            detail: {\n              zoom: zoom\n            }\n          }));\n          active.original = null;\n          active.zoomed = null;\n          active.zoomedHd = null;\n          active.template = null;\n          resolve(zoom);\n        };\n        isAnimating = true;\n        document.body.classList.remove(\"medium-zoom--opened\");\n        active.zoomed.style.transform = \"\";\n        if (active.zoomedHd) {\n          active.zoomedHd.style.transform = \"\";\n        }\n        if (active.template) {\n          active.template.style.transition = \"opacity 150ms\";\n          active.template.style.opacity = 0;\n        }\n        active.original.dispatchEvent(createCustomEvent(\"medium-zoom:close\", {\n          detail: {\n            zoom: zoom\n          }\n        }));\n        active.zoomed.addEventListener(\"transitionend\", _handleCloseEnd);\n      });\n    };\n    var toggle = function toggle() {\n      var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, target = _ref3.target;\n      if (active.original) {\n        return close();\n      }\n      return open({\n        target: target\n      });\n    };\n    var getOptions = function getOptions() {\n      return zoomOptions;\n    };\n    var getImages = function getImages() {\n      return images;\n    };\n    var getZoomedImage = function getZoomedImage() {\n      return active.original;\n    };\n    var images = [];\n    var eventListeners = [];\n    var isAnimating = false;\n    var scrollTop = 0;\n    var zoomOptions = options;\n    var active = {\n      original: null,\n      zoomed: null,\n      zoomedHd: null,\n      template: null\n    };\n    if (Object.prototype.toString.call(selector) === \"[object Object]\") {\n      zoomOptions = selector;\n    } else if (selector || typeof selector === \"string\") {\n      attach(selector);\n    }\n    zoomOptions = _extends({\n      margin: 0,\n      background: \"#fff\",\n      scrollOffset: 40,\n      container: null,\n      template: null\n    }, zoomOptions);\n    var overlay = createOverlay(zoomOptions.background);\n    document.addEventListener(\"click\", _handleClick);\n    document.addEventListener(\"keyup\", _handleKeyUp);\n    document.addEventListener(\"scroll\", _handleScroll);\n    window.addEventListener(\"resize\", close);\n    var zoom = {\n      open: open,\n      close: close,\n      toggle: toggle,\n      update: update,\n      clone: clone,\n      attach: attach,\n      detach: detach,\n      on: on,\n      off: off,\n      getOptions: getOptions,\n      getImages: getImages,\n      getZoomedImage: getZoomedImage\n    };\n    return zoom;\n  };\n  function styleInject(css, ref) {\n    if (ref === void 0) ref = {};\n    var insertAt = ref.insertAt;\n    if (!css || typeof document === \"undefined\") {\n      return;\n    }\n    var head = document.head || document.getElementsByTagName(\"head\")[0];\n    var style = document.createElement(\"style\");\n    style.type = \"text/css\";\n    if (insertAt === \"top\") {\n      if (head.firstChild) {\n        head.insertBefore(style, head.firstChild);\n      } else {\n        head.appendChild(style);\n      }\n    } else {\n      head.appendChild(style);\n    }\n    if (style.styleSheet) {\n      style.styleSheet.cssText = css;\n    } else {\n      style.appendChild(document.createTextNode(css));\n    }\n  }\n  var css = \".medium-zoom-overlay{position:fixed;top:0;right:0;bottom:0;left:0;opacity:0;transition:opacity .3s;will-change:opacity}.medium-zoom--opened .medium-zoom-overlay{cursor:pointer;cursor:zoom-out;opacity:1}.medium-zoom-image{cursor:pointer;cursor:zoom-in;transition:transform .3s cubic-bezier(.2,0,.2,1)!important}.medium-zoom-image--hidden{visibility:hidden}.medium-zoom-image--opened{position:relative;cursor:pointer;cursor:zoom-out;will-change:transform}\";\n  styleInject(css);\n  return mediumZoom;\n});\n/package.json\r\u001d{\n  \"name\": \"medium-zoom\",\n  \"version\": \"1.0.8\",\n  \"description\": \"A JavaScript library for zooming images like Medium\",\n  \"license\": \"MIT\",\n  \"repository\": \"francoischalifour/medium-zoom\",\n  \"author\": {\n    \"name\": \"Francois Chalifour\",\n    \"email\": \"francois.chalifour@gmail.com\",\n    \"url\": \"https://francoischalifour.com\"\n  },\n  \"main\": \"dist/medium-zoom.min.js\",\n  \"module\": \"dist/medium-zoom.esm.js\",\n  \"types\": \"dist/medium-zoom.d.ts\",\n  \"sideEffects\": false,\n  \"scripts\": {\n    \"start\": \"yarn run dev\",\n    \"dev\": \"rollup --config --watch\",\n    \"prebuild\": \"yarn run clean\",\n    \"build\": \"rollup --config\",\n    \"postbuild\": \"cp ./src/medium-zoom.d.ts ./dist\",\n    \"prepublishOnly\": \"npm run build\",\n    \"lint\": \"eslint .\",\n    \"format\": \"prettier --write *.{js,json,css,md} && yarn run lint --fix\",\n    \"test\": \"jest\",\n    \"test:cypress:run\": \"cypress run\",\n    \"test:cypress:open\": \"cypress open\",\n    \"test:cypress:update\": \"cypress run --env updateSnapshots=true\",\n    \"test:cypress\": \"npm-run-all --parallel --race storybook test:cypress:run\",\n    \"test:cypress:record\": \"npm-run-all --parallel --race storybook 'test:cypress:run -- --record --key {1}' --\",\n    \"test:size\": \"bundlesize\",\n    \"clean\": \"rimraf ./dist\",\n    \"build:storybook\": \"build-storybook -o ./website/dist/storybook -c ./stories/config -s ./dist,./stories/images\",\n    \"storybook\": \"start-storybook -p 9001 -c ./stories/config -s ./dist,./stories/images\",\n    \"build:website\": \"(cd website && yarn && yarn run build) && yarn run build && yarn run build:storybook\",\n    \"changelog:update\": \"conventional-changelog -p angular -i CHANGELOG.md -s\",\n    \"release\": \"release-it\",\n    \"release:next\": \"release-it --preRelease=next\",\n    \"release:examples\": \"./scripts/release-examples.sh\"\n  },\n  \"files\": [\n    \"dist\"\n  ],\n  \"keywords\": [\n    \"medium\",\n    \"image\",\n    \"zoom\",\n    \"picture\",\n    \"lightbox\",\n    \"click\",\n    \"scroll\",\n    \"pure\",\n    \"plain\",\n    \"vanilla\",\n    \"javascript\",\n    \"ux\",\n    \"performance\",\n    \"event\",\n    \"medium-zoom\",\n    \"zoomable\"\n  ],\n  \"devDependencies\": {\n    \"@storybook/addon-notes\": \"4.0.0-alpha.14\",\n    \"@storybook/addon-options\": \"4.0.0-alpha.14\",\n    \"@storybook/addon-storysource\": \"4.0.0-alpha.14\",\n    \"@storybook/html\": \"4.0.0-alpha.14\",\n    \"babel-core\": \"6.26.3\",\n    \"babel-eslint\": \"10.0.3\",\n    \"babel-plugin-external-helpers\": \"6.22.0\",\n    \"babel-plugin-require-context-hook\": \"1.0.0\",\n    \"babel-plugin-transform-object-rest-spread\": \"6.26.0\",\n    \"babel-preset-env\": \"1.7.0\",\n    \"bundlesize\": \"0.18.0\",\n    \"conventional-changelog-cli\": \"2.0.28\",\n    \"cssnano\": \"4.1.10\",\n    \"cypress\": \"3.7.0\",\n    \"cypress-image-snapshot\": \"3.1.1\",\n    \"eslint\": \"5.12.1\",\n    \"eslint-config-airbnb-base\": \"13.1.0\",\n    \"eslint-config-prettier\": \"3.6.0\",\n    \"eslint-plugin-cypress\": \"2.7.0\",\n    \"eslint-plugin-import\": \"2.18.2\",\n    \"husky\": \"3.1.0\",\n    \"jest\": \"23.6.0\",\n    \"npm-run-all\": \"4.1.5\",\n    \"prettier\": \"1.19.1\",\n    \"pretty-quick\": \"1.10.0\",\n    \"release-it\": \"10.4.5\",\n    \"rimraf\": \"3.0.0\",\n    \"rollup\": \"1.27.8\",\n    \"rollup-plugin-babel\": \"3.0.7\",\n    \"rollup-plugin-filesize\": \"6.2.1\",\n    \"rollup-plugin-license\": \"0.13.0\",\n    \"rollup-plugin-postcss\": \"2.0.3\",\n    \"rollup-plugin-replace\": \"2.2.0\",\n    \"rollup-plugin-terser\": \"5.1.2\",\n    \"rollup-plugin-uglify\": \"4.0.0\",\n    \"rollup-watch\": \"4.3.1\"\n  }\n}\n/dist/medium-zoom.d.ts\u000fexport type ZoomSelector = string | HTMLElement | HTMLElement[] | NodeList\n\nexport interface ZoomOptions {\n  /**\n   * The space outside the zoomed image.\n   *\n   * @default 0\n   */\n  margin?: number\n\n  /**\n   * The background of the overlay.\n   *\n   * @default '#fff'\n   */\n  background?: string\n\n  /**\n   * The number of pixels to scroll to close the zoom.\n   *\n   * @default 40\n   */\n  scrollOffset?: number\n\n  /**\n   * The viewport to render the zoom in.\n   *\n   * @default null\n   */\n  container?: string | HTMLElement | ZoomContainer\n\n  /**\n   * The template element to display on zoom.\n   *\n   * @default null\n   */\n  template?: string | HTMLTemplateElement\n}\n\nexport interface ZoomContainer {\n  width?: number\n  height?: number\n  top?: number\n  bottom?: number\n  right?: number\n  left?: number\n}\n\nexport interface ZoomOpenOptions {\n  /**\n   * The target of the zoom.\n   *\n   * If not specified, the target is the first image of the zoom.\n   *\n   * @default null\n   */\n  target?: HTMLElement\n}\n\nexport interface Zoom {\n  /**\n   * Opens the zoom.\n   *\n   * @param options\n   * @returns A promise resolving with the zoom.\n   */\n  open(options?: ZoomOpenOptions): Promise<Zoom>\n\n  /**\n   * Closes the zoom.\n   *\n   * @returns A promise resolving with the zoom.\n   */\n  close(): Promise<Zoom>\n\n  /**\n   * Toggles the zoom.\n   *\n   * @param options\n   * @returns A promise resolving with the zoom.\n   */\n  toggle(options?: ZoomOpenOptions): Promise<Zoom>\n\n  /**\n   * Attaches the images to the zoom.\n   *\n   * @param selectors - The selectors describing the images.\n   * @returns The zoom.\n   */\n  attach(...selectors: ZoomSelector[]): Zoom\n\n  /**\n   * Releases the images from the zoom.\n   *\n   * @param selectors - The selectors describing the images.\n   * @returns The zoom.\n   */\n  detach(...selectors: ZoomSelector[]): Zoom\n\n  /**\n   * Updates the options.\n   *\n   * @param options\n   * @returns The zoom.\n   */\n  update(options: ZoomOptions): Zoom\n\n  /**\n   * Extends the zoom with the provided options merged with the current ones.\n   *\n   * @param options\n   * @returns The zoom.\n   */\n  clone(options?: ZoomOptions): Zoom\n\n  /**\n   * Registers an event handler on each target of the zoom.\n   *\n   * @param type - The event type to listen for.\n   * @param listener - The function to execute when the event is triggered.\n   * @param options - The event listener options (same as [`addEventListener`](https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Parameters))\n   * @returns The zoom.\n   */\n  on(\n    type: string,\n    listener: EventListenerOrEventListenerObject,\n    options?: boolean | AddEventListenerOptions\n  ): Zoom\n\n  /**\n   * Unregisters an event handler.\n   *\n   * @param type - The event type to unregister.\n   * @param listener - The function to remove from the event target.\n   * @param options - The event listener options (same as [`removeEventListener`](https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/removeEventListener#Parameters))\n   * @returns The zoom.\n   */\n  off(\n    type: string,\n    listener: EventListenerOrEventListenerObject,\n    options?: boolean | AddEventListenerOptions\n  ): Zoom\n\n  /**\n   * Returns the zoom options.\n   *\n   * @returns The zoom options.\n   */\n  getOptions(): ZoomOptions\n\n  /**\n   * Returns the zoom images.\n   *\n   * @returns The zoom images.\n   */\n  getImages(): HTMLElement[]\n\n  /**\n   * Returns the current zoomed image.\n   *\n   * @returns The current zoomed image.\n   */\n  getZoomedImage(): HTMLElement\n}\n\n/**\n * Attaches a zoom effect on a selection of images.\n *\n * @param selector The selector to target the images.\n * @param options The options of the zoom.\n * @returns The zoom.\n */\ndeclare function mediumZoom(\n  selector?: ZoomSelector,\n  options?: ZoomOptions\n): Zoom\n\n/**\n * Attaches a zoom effect on a selection of images.\n *\n * @param options The options of the zoom.\n * @returns The zoom.\n */\ndeclare function mediumZoom(options?: ZoomOptions): Zoom\n\nexport default mediumZoom\n/dist/medium-zoom.min.js%/*! medium-zoom 1.0.8 | MIT License | https://github.com/francoischalifour/medium-zoom */\n!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):(e=e||self).mediumZoom=t()}(this,(function(){\"use strict\";var e=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var o=arguments[t];for(var n in o)Object.prototype.hasOwnProperty.call(o,n)&&(e[n]=o[n])}return e},t=function(e){return\"IMG\"===e.tagName},o=function(e){return e&&1===e.nodeType},n=function(e){return\".svg\"===(e.currentSrc||e.src).substr(-4).toLowerCase()},i=function(e){try{return Array.isArray(e)?e.filter(t):function(e){return NodeList.prototype.isPrototypeOf(e)}(e)?[].slice.call(e).filter(t):o(e)?[e].filter(t):\"string\"==typeof e?[].slice.call(document.querySelectorAll(e)).filter(t):[]}catch(e){throw new TypeError(\"The provided selector is invalid.\\nExpects a CSS selector, a Node element, a NodeList or an array.\\nSee: https://github.com/francoischalifour/medium-zoom\")}},r=function(e){var t=document.createElement(\"div\");return t.classList.add(\"medium-zoom-overlay\"),t.style.background=e,t},d=function(e){var t=e.getBoundingClientRect(),o=t.top,n=t.left,i=t.width,r=t.height,d=e.cloneNode(),a=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,m=window.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft||0;return d.removeAttribute(\"id\"),d.style.position=\"absolute\",d.style.top=o+a+\"px\",d.style.left=n+m+\"px\",d.style.width=i+\"px\",d.style.height=r+\"px\",d.style.transform=\"\",d},a=function(t,o){var n=e({bubbles:!1,cancelable:!1,detail:void 0},o);if(\"function\"==typeof window.CustomEvent)return new CustomEvent(t,n);var i=document.createEvent(\"CustomEvent\");return i.initCustomEvent(t,n.bubbles,n.cancelable,n.detail),i};return function(e,t){void 0===t&&(t={});var o=t.insertAt;if(e&&\"undefined\"!=typeof document){var n=document.head||document.getElementsByTagName(\"head\")[0],i=document.createElement(\"style\");i.type=\"text/css\",\"top\"===o&&n.firstChild?n.insertBefore(i,n.firstChild):n.appendChild(i),i.styleSheet?i.styleSheet.cssText=e:i.appendChild(document.createTextNode(e))}}(\".medium-zoom-overlay{position:fixed;top:0;right:0;bottom:0;left:0;opacity:0;transition:opacity .3s;will-change:opacity}.medium-zoom--opened .medium-zoom-overlay{cursor:pointer;cursor:zoom-out;opacity:1}.medium-zoom-image{cursor:pointer;cursor:zoom-in;transition:transform .3s cubic-bezier(.2,0,.2,1)!important}.medium-zoom-image--hidden{visibility:hidden}.medium-zoom-image--opened{position:relative;cursor:pointer;cursor:zoom-out;will-change:transform}\"),function t(m){var l=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},c=window.Promise||function(e){function t(){}e(t,t)},u=function(e){var t=e.target;t!==N?-1!==x.indexOf(t)&&w({target:t}):E()},s=function(){if(!A&&k.original){var e=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0;Math.abs(S-e)>T.scrollOffset&&setTimeout(E,150)}},f=function(e){var t=e.key||e.keyCode;\"Escape\"!==t&&\"Esc\"!==t&&27!==t||E()},p=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=t;if(t.background&&(N.style.background=t.background),t.container&&t.container instanceof Object&&(n.container=e({},T.container,t.container)),t.template){var i=o(t.template)?t.template:document.querySelector(t.template);n.template=i}return T=e({},T,n),x.forEach((function(e){e.dispatchEvent(a(\"medium-zoom:update\",{detail:{zoom:j}}))})),j},g=function(){var o=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return t(e({},T,o))},v=function(){for(var e=arguments.length,t=Array(e),o=0;o<e;o++)t[o]=arguments[o];var n=t.reduce((function(e,t){return[].concat(e,i(t))}),[]);return n.filter((function(e){return-1===x.indexOf(e)})).forEach((function(e){x.push(e),e.classList.add(\"medium-zoom-image\")})),O.forEach((function(e){var t=e.type,o=e.listener,i=e.options;n.forEach((function(e){e.addEventListener(t,o,i)}))})),j},h=function(){for(var e=arguments.length,t=Array(e),o=0;o<e;o++)t[o]=arguments[o];k.zoomed&&E();var n=t.length>0?t.reduce((function(e,t){return[].concat(e,i(t))}),[]):x;return n.forEach((function(e){e.classList.remove(\"medium-zoom-image\"),e.dispatchEvent(a(\"medium-zoom:detach\",{detail:{zoom:j}}))})),x=x.filter((function(e){return-1===n.indexOf(e)})),j},z=function(e,t){var o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return x.forEach((function(n){n.addEventListener(\"medium-zoom:\"+e,t,o)})),O.push({type:\"medium-zoom:\"+e,listener:t,options:o}),j},y=function(e,t){var o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return x.forEach((function(n){n.removeEventListener(\"medium-zoom:\"+e,t,o)})),O=O.filter((function(o){return!(o.type===\"medium-zoom:\"+e&&o.listener.toString()===t.toString())})),j},b=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},i=t.target,r=function(){var t={width:document.documentElement.clientWidth,height:document.documentElement.clientHeight,left:0,top:0,right:0,bottom:0},i=void 0,r=void 0;if(T.container)if(T.container instanceof Object)i=(t=e({},t,T.container)).width-t.left-t.right-2*T.margin,r=t.height-t.top-t.bottom-2*T.margin;else{var d=(o(T.container)?T.container:document.querySelector(T.container)).getBoundingClientRect(),a=d.width,m=d.height,l=d.left,c=d.top;t=e({},t,{width:a,height:m,left:l,top:c})}i=i||t.width-2*T.margin,r=r||t.height-2*T.margin;var u=k.zoomedHd||k.original,s=n(u)?i:u.naturalWidth||i,f=n(u)?r:u.naturalHeight||r,p=u.getBoundingClientRect(),g=p.top,v=p.left,h=p.width,z=p.height,y=Math.min(Math.max(h,s),i)/h,b=Math.min(Math.max(z,f),r)/z,E=Math.min(y,b),w=\"scale(\"+E+\") translate3d(\"+((i-h)/2-v+T.margin+t.left)/E+\"px, \"+((r-z)/2-g+T.margin+t.top)/E+\"px, 0)\";k.zoomed.style.transform=w,k.zoomedHd&&(k.zoomedHd.style.transform=w)};return new c((function(e){if(i&&-1===x.indexOf(i))e(j);else{if(k.zoomed)e(j);else{if(i)k.original=i;else{if(!(x.length>0))return void e(j);var t=x;k.original=t[0]}if(k.original.dispatchEvent(a(\"medium-zoom:open\",{detail:{zoom:j}})),S=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,A=!0,k.zoomed=d(k.original),document.body.appendChild(N),T.template){var n=o(T.template)?T.template:document.querySelector(T.template);k.template=document.createElement(\"div\"),k.template.appendChild(n.content.cloneNode(!0)),document.body.appendChild(k.template)}if(k.original.parentElement&&\"PICTURE\"===k.original.parentElement.tagName&&k.original.currentSrc&&(k.zoomed.src=k.original.currentSrc),document.body.appendChild(k.zoomed),window.requestAnimationFrame((function(){document.body.classList.add(\"medium-zoom--opened\")})),k.original.classList.add(\"medium-zoom-image--hidden\"),k.zoomed.classList.add(\"medium-zoom-image--opened\"),k.zoomed.addEventListener(\"click\",E),k.zoomed.addEventListener(\"transitionend\",(function t(){A=!1,k.zoomed.removeEventListener(\"transitionend\",t),k.original.dispatchEvent(a(\"medium-zoom:opened\",{detail:{zoom:j}})),e(j)})),k.original.getAttribute(\"data-zoom-src\")){k.zoomedHd=k.zoomed.cloneNode(),k.zoomedHd.removeAttribute(\"srcset\"),k.zoomedHd.removeAttribute(\"sizes\"),k.zoomedHd.removeAttribute(\"loading\"),k.zoomedHd.src=k.zoomed.getAttribute(\"data-zoom-src\"),k.zoomedHd.onerror=function(){clearInterval(m),console.warn(\"Unable to reach the zoom image target \"+k.zoomedHd.src),k.zoomedHd=null,r()};var m=setInterval((function(){k.zoomedHd.complete&&(clearInterval(m),k.zoomedHd.classList.add(\"medium-zoom-image--opened\"),k.zoomedHd.addEventListener(\"click\",E),document.body.appendChild(k.zoomedHd),r())}),10)}else if(k.original.hasAttribute(\"srcset\")){k.zoomedHd=k.zoomed.cloneNode(),k.zoomedHd.removeAttribute(\"sizes\"),k.zoomedHd.removeAttribute(\"loading\");var l=k.zoomedHd.addEventListener(\"load\",(function(){k.zoomedHd.removeEventListener(\"load\",l),k.zoomedHd.classList.add(\"medium-zoom-image--opened\"),k.zoomedHd.addEventListener(\"click\",E),document.body.appendChild(k.zoomedHd),r()}))}else r()}}}))},E=function(){return new c((function(e){if(!A&&k.original){A=!0,document.body.classList.remove(\"medium-zoom--opened\"),k.zoomed.style.transform=\"\",k.zoomedHd&&(k.zoomedHd.style.transform=\"\"),k.template&&(k.template.style.transition=\"opacity 150ms\",k.template.style.opacity=0),k.original.dispatchEvent(a(\"medium-zoom:close\",{detail:{zoom:j}})),k.zoomed.addEventListener(\"transitionend\",(function t(){k.original.classList.remove(\"medium-zoom-image--hidden\"),document.body.removeChild(k.zoomed),k.zoomedHd&&document.body.removeChild(k.zoomedHd),document.body.removeChild(N),k.zoomed.classList.remove(\"medium-zoom-image--opened\"),k.template&&document.body.removeChild(k.template),A=!1,k.zoomed.removeEventListener(\"transitionend\",t),k.original.dispatchEvent(a(\"medium-zoom:closed\",{detail:{zoom:j}})),k.original=null,k.zoomed=null,k.zoomedHd=null,k.template=null,e(j)}))}else e(j)}))},w=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.target;return k.original?E():b({target:t})},L=function(){return T},H=function(){return x},C=function(){return k.original},x=[],O=[],A=!1,S=0,T=l,k={original:null,zoomed:null,zoomedHd:null,template:null};\"[object Object]\"===Object.prototype.toString.call(m)?T=m:(m||\"string\"==typeof m)&&v(m),T=e({margin:0,background:\"#fff\",scrollOffset:40,container:null,template:null},T);var N=r(T.background);document.addEventListener(\"click\",u),document.addEventListener(\"keyup\",f),document.addEventListener(\"scroll\",s),window.addEventListener(\"resize\",E);var j={open:b,close:E,toggle:w,update:p,clone:g,attach:v,detach:h,on:z,off:y,getOptions:L,getImages:H,getZoomedImage:C};return j}}));\n/README.md<*<p align=\"center\">\n  <a href=\"https://medium-zoom.francoischalifour.com\"><img src=\"logo.svg\" alt=\"Demo\" width=\"64\"></a>\n  <h3 align=\"center\">medium-zoom</h3>\n  <p align=\"center\">A JavaScript library for zooming images like Medium</p>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/medium-zoom\">\n    <img src=\"https://img.shields.io/npm/v/medium-zoom.svg?style=flat-square\" alt=\"version\">\n  </a>\n  <a href=\"https://github.com/francoischalifour/medium-zoom/blob/master/LICENSE\">\n    <img src=\"https://img.shields.io/npm/l/medium-zoom.svg?style=flat-square\" alt=\"MIT license\">\n  </a>\n  <a href=\"http://npmcharts.com/compare/medium-zoom\">\n    <img src=\"https://img.shields.io/npm/dm/medium-zoom.svg?style=flat-square\" alt=\"downloads\">\n  </a>\n  <br>\n  <a href=\"https://unpkg.com/medium-zoom/dist/\">\n    <img src=\"http://img.badgesize.io/https://unpkg.com/medium-zoom/dist/medium-zoom.min.js?compression=gzip&label=gzip%20size&style=flat-square\" alt=\"gzip size\">\n  </a>\n  <a href=\"https://github.com/francoischalifour/medium-zoom/blob/master/package.json\">\n    <img src=\"https://img.shields.io/badge/dependencies-none-lightgrey.svg?style=flat-square\" alt=\"no dependencies\">\n  </a>\n  <a href=\"https://travis-ci.org/francoischalifour/medium-zoom\">\n    <img src=\"https://img.shields.io/travis/francoischalifour/medium-zoom.svg?style=flat-square\" alt=\"travis\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://medium-zoom.francoischalifour.com\">\n    <img src=\"https://user-images.githubusercontent.com/6137112/43369906-7623239a-9376-11e8-978b-6e089be499fb.gif\" alt=\"Medium Zoom Demo\">\n  </a>\n  <br>\n  <br>\n  <strong>\n  <a href=\"https://codesandbox.io/s/github/francoischalifour/medium-zoom/tree/master/website\">🔬 Playground</a> ・\n  <a href=\"https://medium-zoom.francoischalifour.com\">🔎 Demo</a> ・\n  <a href=\"https://medium-zoom.francoischalifour.com/storybook\">📚 Storybook</a>\n  </strong>\n</p>\n\n<details>\n  <summary><strong>Contents</strong></summary>\n\n<!--\nGenerate the table of contents using:\n\n```\nnpx doctoc README.md --maxlevel 3\n```\n-->\n\n<!-- START doctoc generated TOC please keep comment here to allow auto update -->\n<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->\n\n- [Features](#features)\n- [Installation](#installation)\n- [Usage](#usage)\n- [API](#api)\n  - [Selectors](#selectors)\n  - [Options](#options)\n  - [Methods](#methods)\n  - [Attributes](#attributes)\n  - [Events](#events)\n- [Examples](#examples)\n- [Debugging](#debugging)\n- [Browser support](#browser-support)\n- [Contributing](#contributing)\n- [License](#license)\n\n<!-- END doctoc generated TOC please keep comment here to allow auto update -->\n\n</details>\n\n## Features\n\n- 📱 **Responsive** — _scale on mobile and desktop_\n- 🚀 **Performant and lightweight** — _should be able to reach 60 [fps](https://en.wikipedia.org/wiki/Frame_rate)_\n- ⚡️ **High definition support** — _load the HD version of your image on zoom_\n- 🔎 **Flexibility** — _apply the zoom to a selection of images_\n- 🖱 **Mouse, keyboard and gesture friendly** — _click anywhere, press a key or scroll away to close the zoom_\n- 🎂 **Event handling** — _trigger events when the zoom enters a new state_\n- 📦 **Customization** — _set your own margin, background and scroll offset_\n- 🔧 **Pluggable** — _add your own features to the zoom_\n- 💎 **Custom templates** — _extend the default look to match the UI of your app_\n\n## Installation\n\nThe module is available on the [npm](https://www.npmjs.com) registry.\n\n```sh\nnpm install medium-zoom\n# or\nyarn add medium-zoom\n```\n\n###### Download\n\n- [Normal](https://cdn.jsdelivr.net/npm/medium-zoom/dist/medium-zoom.js)\n- [Minified](https://cdn.jsdelivr.net/npm/medium-zoom/dist/medium-zoom.min.js)\n\n###### CDN\n\n- [jsDelivr](https://www.jsdelivr.com/package/npm/medium-zoom)\n- [unpkg](https://unpkg.com/medium-zoom/)\n\n## Usage\n\n> [Try it out in the browser](https://codesandbox.io/s/github/francoischalifour/medium-zoom/tree/master/website)\n\nImport the library as a module:\n\n```js\nimport mediumZoom from 'medium-zoom'\n```\n\nOr import the library with a script tag:\n\n```html\n<script src=\"node_modules/medium-zoom/dist/medium-zoom.min.js\"></script>\n```\n\nThat's it! You don't need to import any CSS styles.\n\nAssuming you add the `data-zoomable` attribute to your images:\n\n```js\nmediumZoom('[data-zoomable]')\n```\n\n## API\n\n```ts\nmediumZoom(selector?: string | HTMLElement | HTMLElement[] | NodeList, options?: object): Zoom\n```\n\n### Selectors\n\nThe selector allows attaching images to the zoom. It can be of the following types:\n\n- [CSS selectors](https://developer.mozilla.org/docs/Web/CSS/CSS_Selectors)\n- [`HTMLElement`](https://developer.mozilla.org/docs/Web/API/HTMLElement)\n- [`NodeList`](https://developer.mozilla.org/docs/Web/API/NodeList)\n- [`Array`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array)\n\n```js\n// CSS selector\nmediumZoom('[data-zoomable]')\n\n// HTMLElement\nmediumZoom(document.querySelector('#cover'))\n\n// NodeList\nmediumZoom(document.querySelectorAll('[data-zoomable]'))\n\n// Array\nconst images = [\n  document.querySelector('#cover'),\n  ...document.querySelectorAll('[data-zoomable]'),\n]\n\nmediumZoom(images)\n```\n\n### Options\n\nThe options enable the customization of the zoom. They are defined as an object with the following properties:\n\n| Property       | Type                                  | Default  | Description                                                                 |\n| -------------- | ------------------------------------- | -------- | --------------------------------------------------------------------------- |\n| `margin`       | `number`                              | `0`      | The space outside the zoomed image                                          |\n| `background`   | `string`                              | `\"#fff\"` | The background of the overlay                                               |\n| `scrollOffset` | `number`                              | `40`     | The number of pixels to scroll to close the zoom                            |\n| `container`    | `string` \\| `HTMLElement` \\| `object` | `null`   | The viewport to render the zoom in<br> [Read more →](docs/container.md)     |\n| `template`     | `string` \\| `HTMLTemplateElement`     | `null`   | The template element to display on zoom<br> [Read more →](docs/template.md) |\n\n```js\nmediumZoom('[data-zoomable]', {\n  margin: 24,\n  background: '#BADA55',\n  scrollOffset: 0,\n  container: '#zoom-container',\n  template: '#zoom-template',\n})\n```\n\n### Methods\n\n#### `open({ target?: HTMLElement }): Promise<Zoom>`\n\nOpens the zoom and returns a promise resolving with the zoom.\n\n```js\nconst zoom = mediumZoom('[data-zoomable]')\n\nzoom.open()\n```\n\n_Emits an event [`open`](#events) on animation start and [`opened`](#events) when completed._\n\n#### `close(): Promise<Zoom>`\n\nCloses the zoom and returns a promise resolving with the zoom.\n\n```js\nconst zoom = mediumZoom('[data-zoomable]')\n\nzoom.close()\n```\n\n_Emits an event [`close`](#events) on animation start and [`closed`](#events) when completed._\n\n#### `toggle({ target?: HTMLElement }): Promise<Zoom>`\n\nOpens the zoom when closed / dismisses the zoom when opened, and returns a promise resolving with the zoom.\n\n```js\nconst zoom = mediumZoom('[data-zoomable]')\n\nzoom.toggle()\n```\n\n#### `attach(...selectors: string[] | HTMLElement[] | NodeList[] | Array[]): Zoom`\n\nAttaches the images to the zoom and returns the zoom.\n\n```js\nconst zoom = mediumZoom()\n\nzoom.attach('#image-1', '#image-2')\nzoom.attach(\n  document.querySelector('#image-3'),\n  document.querySelectorAll('[data-zoomable]')\n)\n```\n\n#### `detach(...selectors: string[] | HTMLElement[] | NodeList[] | Array[]): Zoom`\n\nReleases the images from the zoom and returns the zoom.\n\n```js\nconst zoom = mediumZoom('[data-zoomable]')\n\nzoom.detach('#image-1', document.querySelector('#image-2')) // detach two images\nzoom.detach() // detach all images\n```\n\n_Emits an event [`detach`](#events) on the image._\n\n#### `update(options: object): Zoom`\n\nUpdates the options and returns the zoom.\n\n```js\nconst zoom = mediumZoom('[data-zoomable]')\n\nzoom.update({ background: '#BADA55' })\n```\n\n_Emits an event [`update`](#events) on each image of the zoom._\n\n#### `clone(options?: object): Zoom`\n\nClones the zoom with provided options merged with the current ones and returns the zoom.\n\n```js\nconst zoom = mediumZoom('[data-zoomable]', { background: '#BADA55' })\n\nconst clonedZoom = zoom.clone({ margin: 48 })\n\nclonedZoom.getOptions() // => { background: '#BADA55', margin: 48, ... }\n```\n\n#### `on(type: string, listener: () => void, options?: boolean | AddEventListenerOptions): Zoom`\n\nRegisters the listener on each target of the zoom.\n\nThe same `options` as [`addEventListener`](https://developer.mozilla.org/docs/Web/API/EventTarget/addEventListener#Parameters) are used.\n\n```js\nconst zoom = mediumZoom('[data-zoomable]')\n\nzoom.on('closed', event => {\n  // the image has been closed\n})\n\nzoom.on(\n  'open',\n  event => {\n    // the image has been opened (tracked only once)\n  },\n  { once: true }\n)\n```\n\nThe zoom object is accessible in `event.detail.zoom`.\n\n#### `off(type: string, listener: () => void, options?: boolean | AddEventListenerOptions): Zoom`\n\nRemoves the previously registered listener on each target of the zoom.\n\nThe same `options` as [`removeEventListener`](https://developer.mozilla.org/docs/Web/API/EventTarget/removeEventListener#Parameters) are used.\n\n```js\nconst zoom = mediumZoom('[data-zoomable]')\n\nfunction listener(event) {\n  // ...\n}\n\nzoom.on('open', listener)\n// ...\nzoom.off('open', listener)\n```\n\nThe zoom object is accessible in `event.detail.zoom`.\n\n#### `getOptions(): object`\n\nReturns the zoom options as an object.\n\n```js\nconst zoom = mediumZoom({ background: '#BADA55' })\n\nzoom.getOptions() // => { background: '#BADA55', ... }\n```\n\n#### `getImages(): HTMLElement[]`\n\nReturns the images attached to the zoom as an array of [`HTMLElement`s](https://developer.mozilla.org/docs/Web/API/HTMLElement).\n\n```js\nconst zoom = mediumZoom('[data-zoomable]')\n\nzoom.getImages() // => [HTMLElement, HTMLElement]\n```\n\n#### `getZoomedImage(): HTMLElement`\n\nReturns the current zoomed image as an [`HTMLElement`](https://developer.mozilla.org/docs/Web/API/HTMLElement) or `null` if none.\n\n```js\nconst zoom = mediumZoom('[data-zoomable]')\n\nzoom.getZoomedImage() // => null\nzoom.open().then(() => {\n  zoom.getZoomedImage() // => HTMLElement\n})\n```\n\n### Attributes\n\n#### `data-zoom-src`\n\nSpecifies the high definition image to open on zoom. This image loads when the user clicks on the source image.\n\n```html\n<img src=\"image-thumbnail.jpg\" data-zoom-src=\"image-hd.jpg\" alt=\"My image\" />\n```\n\n### Events\n\n| Event  | Description                                         |\n| ------ | --------------------------------------------------- |\n| open   | Fired immediately when the `open` method is called  |\n| opened | Fired when the zoom has finished being animated     |\n| close  | Fired immediately when the `close` method is called |\n| closed | Fired when the zoom out has finished being animated |\n| detach | Fired when the `detach` method is called            |\n| update | Fired when the `update` method is called            |\n\n```js\nconst zoom = mediumZoom('[data-zoomable]')\n\nzoom.on('open', event => {\n  // track when the image is zoomed\n})\n```\n\nThe zoom object is accessible in `event.detail.zoom`.\n\n## Examples\n\n<details>\n <summary>Trigger a zoom from another element</summary>\n\n```js\nconst button = document.querySelector('[data-action=\"zoom\"]')\nconst zoom = mediumZoom('#image')\n\nbutton.addEventListener('click', () => zoom.open())\n```\n\n</details>\n\n<details>\n <summary>Track an event (for analytics)</summary>\n\nYou can use the `open` event to keep track of how many times a user interacts with your image. This can be useful if you want to gather some analytics on user engagement.\n\n```js\nlet counter = 0\nconst zoom = mediumZoom('#image-tracked')\n\nzoom.on('open', event => {\n  console.log(`\"${event.target.alt}\" has been zoomed ${++counter} times`)\n})\n```\n\n</details>\n\n<details>\n <summary>Detach a zoom once closed</summary>\n\n```js\nconst zoom = mediumZoom('[data-zoomable]')\n\nzoom.on('closed', () => zoom.detach(), { once: true })\n```\n\n</details>\n\n<details>\n <summary>Attach jQuery elements</summary>\n\njQuery elements are compatible with `medium-zoom` once converted to an array.\n\n```js\nmediumZoom($('[data-zoomable]').toArray())\n```\n\n</details>\n\n<details>\n <summary>Create a zoomable React component</summary>\n\n**Using React hooks**\n\n```js\nimport React from 'react'\nimport mediumZoom from 'medium-zoom'\n\nfunction ImageZoom({ zoom, src, alt, background }) {\n  const zoomRef = React.useRef(zoom.clone({ background }))\n\n  function attachZoom(image) {\n    zoomRef.current.attach(image)\n  }\n\n  return <img src={src} alt={alt} ref={attachZoom} />\n}\n\nfunction App() {\n  const zoom = React.useRef(mediumZoom({ background: '#000', margin: 48 }))\n\n  render() {\n    return (\n      <ImageZoom src=\"image.jpg\" alt=\"Image\" zoom={zoom.current} color=\"#BADA55\" />\n    )\n  }\n}\n```\n\n**Using React classes**\n\n```js\nimport React, { Component } from 'react'\nimport mediumZoom from 'medium-zoom'\n\nclass ImageZoom extends Component {\n  zoom = this.props.zoom.clone({\n    background: this.props.color,\n  })\n\n  attachZoom = image => {\n    this.zoom.attach(image)\n  }\n\n  render() {\n    return (\n      <img src={this.props.src} alt={this.props.alt} ref={this.attachZoom} />\n    )\n  }\n}\n\nclass App extends Component {\n  zoom = mediumZoom({ background: '#000', margin: 48 })\n\n  render() {\n    return (\n      <ImageZoom src=\"image.jpg\" alt=\"Image\" zoom={this.zoom} color=\"#BADA55\" />\n    )\n  }\n}\n```\n\n</details>\n<br>\n\nYou can see [more examples](examples/) including [React](examples/react) and [Vue](examples/vue), or check out the [storybook](https://medium-zoom.francoischalifour.com/storybook).\n\n## Debugging\n\n### The zoomed image is not visible\n\nThe library doesn't provide a `z-index` value on the zoomed image to avoid conflicts with other frameworks. Some frameworks might specify a `z-index` for their elements, which makes the zoomed image not visible.\n\nIf that's the case, you can provide a `z-index` value in your CSS:\n\n```css\n.medium-zoom-overlay,\n.medium-zoom-image--opened {\n  z-index: 999;\n}\n```\n\n## Browser support\n\n| IE              | Edge            | Chrome | Firefox | Safari |\n| --------------- | --------------- | ------ | ------- | ------ |\n| 10<sup>\\*</sup> | 12<sup>\\*</sup> | 36     | 34      | 9      |\n\n<sup>\\*</sup> _These browsers require a [`template` polyfill](https://github.com/webcomponents/template) when using [custom templates](docs/template.md)_.\n\n<blockquote>\n  <p align=\"center\">\n    Cross-browser testing is sponsored by\n  </p>\n  <p align=\"center\">\n    <a href=\"https://www.browserstack.com\">\n      <img src=\"https://user-images.githubusercontent.com/6137112/44587083-35987000-a7b2-11e8-8e0d-8ba15de83802.png\" alt=\"BrowserStack\" height=\"35\">\n    </a>\n  </p>\n</blockquote>\n\n## Contributing\n\n- Run `yarn` to install Node dev dependencies\n- Run `yarn start` to build the library in watch mode\n- Run `yarn run storybook` to see your changes at http://localhost:9001\n\nPlease read the [contributing guidelines](CONTRIBUTING.md) for more detailed explanations.\n\n_You can also use [npm](https://www.npmjs.com)._\n\n## License\n\nMIT © [François Chalifour](https://francoischalifour.com)\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/bWVyZ2UtZGVzY3JpcHRvcnNAMS4wLjE=",
    "content": "/LICENSE\u0004(The MIT License)\n\nCopyright (c) 2013 Jonathan Ong <me@jongleberry.com>\nCopyright (c) 2015 Douglas Christopher Wilson <doug@somethingdoug.com>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n/README.md\u0004# Merge Descriptors\n\n[![NPM Version][npm-image]][npm-url]\n[![NPM Downloads][downloads-image]][downloads-url]\n[![Build Status][travis-image]][travis-url]\n[![Test Coverage][coveralls-image]][coveralls-url]\n\nMerge objects using descriptors.\n\n```js\nvar thing = {\n  get name() {\n    return 'jon'\n  }\n}\n\nvar animal = {\n\n}\n\nmerge(animal, thing)\n\nanimal.name === 'jon'\n```\n\n## API\n\n### merge(destination, source)\n\nRedefines `destination`'s descriptors with `source`'s.\n\n### merge(destination, source, false)\n\nDefines `source`'s descriptors on `destination` if `destination` does not have\na descriptor by the same name.\n\n## License\n\n[MIT](LICENSE)\n\n[npm-image]: https://img.shields.io/npm/v/merge-descriptors.svg\n[npm-url]: https://npmjs.org/package/merge-descriptors\n[travis-image]: https://img.shields.io/travis/component/merge-descriptors/master.svg\n[travis-url]: https://travis-ci.org/component/merge-descriptors\n[coveralls-image]: https://img.shields.io/coveralls/component/merge-descriptors/master.svg\n[coveralls-url]: https://coveralls.io/r/component/merge-descriptors?branch=master\n[downloads-image]: https://img.shields.io/npm/dm/merge-descriptors.svg\n[downloads-url]: https://npmjs.org/package/merge-descriptors\n/HISTORY.md\u0001k1.0.1 / 2016-01-17\n==================\n\n  * perf: enable strict mode\n\n1.0.0 / 2015-03-01\n==================\n\n  * Add option to only add new descriptors\n  * Add simple argument validation\n  * Add jsdoc to source file\n\n0.0.2 / 2013-12-14\n==================\n\n  * Move repository to `component` organization\n\n0.0.1 / 2013-10-29\n==================\n\n  * Initial release\n/index.js\u0004/*!\n * merge-descriptors\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = merge\n\n/**\n * Module variables.\n * @private\n */\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty\n\n/**\n * Merge the property descriptors of `src` into `dest`\n *\n * @param {object} dest Object to add descriptors to\n * @param {object} src Object to clone descriptors from\n * @param {boolean} [redefine=true] Redefine `dest` properties with `src` properties\n * @returns {object} Reference to dest\n * @public\n */\n\nfunction merge(dest, src, redefine) {\n  if (!dest) {\n    throw new TypeError('argument dest is required')\n  }\n\n  if (!src) {\n    throw new TypeError('argument src is required')\n  }\n\n  if (redefine === undefined) {\n    // Default to true\n    redefine = true\n  }\n\n  Object.getOwnPropertyNames(src).forEach(function forEachOwnPropertyName(name) {\n    if (!redefine && hasOwnProperty.call(dest, name)) {\n      // Skip desriptor\n      return\n    }\n\n    // Copy descriptor\n    var descriptor = Object.getOwnPropertyDescriptor(src, name)\n    Object.defineProperty(dest, name, descriptor)\n  })\n\n  return dest\n}\n/package.json\u0003{\n  \"name\": \"merge-descriptors\",\n  \"description\": \"Merge objects using descriptors\",\n  \"version\": \"1.0.1\",\n  \"author\": {\n    \"name\": \"Jonathan Ong\",\n    \"email\": \"me@jongleberry.com\",\n    \"url\": \"http://jongleberry.com\",\n    \"twitter\": \"https://twitter.com/jongleberry\"\n  },\n  \"contributors\": [\n    \"Douglas Christopher Wilson <doug@somethingdoug.com>\",\n    \"Mike Grabowski <grabbou@gmail.com>\"\n  ],\n  \"license\": \"MIT\",\n  \"repository\": \"component/merge-descriptors\",\n  \"devDependencies\": {\n    \"istanbul\": \"0.4.1\",\n    \"mocha\": \"1.21.5\"\n  },\n  \"files\": [\n    \"HISTORY.md\",\n    \"LICENSE\",\n    \"README.md\",\n    \"index.js\"\n  ],\n  \"scripts\": {\n    \"test\": \"mocha --reporter spec --bail --check-leaks test/\",\n    \"test-ci\": \"istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/\",\n    \"test-cov\": \"istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/\"\n  }\n}\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/bWVyZ2Utc3RyZWFtQDIuMC4w",
    "content": "/LICENSE\u0004_The MIT License (MIT)\n\nCopyright (c) Stephen Sugden <me@stephensugden.com> (stephensugden.com)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n/index.js\u0003u'use strict';\n\nconst { PassThrough } = require('stream');\n\nmodule.exports = function (/*streams...*/) {\n  var sources = []\n  var output  = new PassThrough({objectMode: true})\n\n  output.setMaxListeners(0)\n\n  output.add = add\n  output.isEmpty = isEmpty\n\n  output.on('unpipe', remove)\n\n  Array.prototype.slice.call(arguments).forEach(add)\n\n  return output\n\n  function add (source) {\n    if (Array.isArray(source)) {\n      source.forEach(add)\n      return this\n    }\n\n    sources.push(source);\n    source.once('end', remove.bind(null, source))\n    source.once('error', output.emit.bind(output, 'error'))\n    source.pipe(output, {end: false})\n    return this\n  }\n\n  function isEmpty () {\n    return sources.length == 0;\n  }\n\n  function remove (source) {\n    sources = sources.filter(function (it) { return it !== source })\n    if (!sources.length && output.readable) { output.end() }\n  }\n}\n/package.json\u0001{\n  \"name\": \"merge-stream\",\n  \"version\": \"2.0.0\",\n  \"description\": \"Create a stream that emits events from multiple other streams\",\n  \"files\": [\n    \"index.js\"\n  ],\n  \"scripts\": {\n    \"test\": \"istanbul cover test.js && istanbul check-cover --statements 100 --branches 100\"\n  },\n  \"repository\": \"grncdr/merge-stream\",\n  \"author\": \"Stephen Sugden <me@stephensugden.com>\",\n  \"license\": \"MIT\",\n  \"dependencies\": {},\n  \"devDependencies\": {\n    \"from2\": \"^2.0.3\",\n    \"istanbul\": \"^0.4.5\"\n  }\n}\n/README.md\u0007\u0015# merge-stream\n\nMerge (interleave) a bunch of streams.\n\n[![build status](https://secure.travis-ci.org/grncdr/merge-stream.svg?branch=master)](http://travis-ci.org/grncdr/merge-stream)\n\n## Synopsis\n\n```javascript\nvar stream1 = new Stream();\nvar stream2 = new Stream();\n\nvar merged = mergeStream(stream1, stream2);\n\nvar stream3 = new Stream();\nmerged.add(stream3);\nmerged.isEmpty();\n//=> false\n```\n\n## Description\n\nThis is adapted from [event-stream](https://github.com/dominictarr/event-stream) separated into a new module, using Streams3.\n\n## API\n\n### `mergeStream`\n\nType: `function`\n\nMerges an arbitrary number of streams. Returns a merged stream.\n\n#### `merged.add`\n\nA method to dynamically add more sources to the stream. The argument supplied to `add` can be either a source or an array of sources.\n\n#### `merged.isEmpty`\n\nA method that tells you if the merged stream is empty.\n\nWhen a stream is \"empty\" (aka. no sources were added), it could not be returned to a gulp task.\n\nSo, we could do something like this:\n\n```js\nstream = require('merge-stream')();\n// Something like a loop to add some streams to the merge stream\n// stream.add(streamA);\n// stream.add(streamB);\nreturn stream.isEmpty() ? null : stream;\n```\n\n## Gulp example\n\nAn example use case for **merge-stream** is to combine parts of a task in a project's **gulpfile.js** like this:\n\n```js\nconst gulp =          require('gulp');\nconst htmlValidator = require('gulp-w3c-html-validator');\nconst jsHint =        require('gulp-jshint');\nconst mergeStream =   require('merge-stream');\n\nfunction lint() {\n  return mergeStream(\n    gulp.src('src/*.html')\n      .pipe(htmlValidator())\n      .pipe(htmlValidator.reporter()),\n    gulp.src('src/*.js')\n      .pipe(jsHint())\n      .pipe(jsHint.reporter())\n  );\n}\ngulp.task('lint', lint);\n```\n\n## License\n\nMIT\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/bWVyZ2UyQDEuNC4x",
    "content": "/LICENSE\u0004:The MIT License (MIT)\n\nCopyright (c) 2014-2020 Teambition\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n/README.md\u000e# merge2\n\nMerge multiple streams into one stream in sequence or parallel.\n\n[![NPM version][npm-image]][npm-url]\n[![Build Status][travis-image]][travis-url]\n[![Downloads][downloads-image]][downloads-url]\n\n## Install\n\nInstall with [npm](https://npmjs.org/package/merge2)\n\n```sh\nnpm install merge2\n```\n\n## Usage\n\n```js\nconst gulp = require('gulp')\nconst merge2 = require('merge2')\nconst concat = require('gulp-concat')\nconst minifyHtml = require('gulp-minify-html')\nconst ngtemplate = require('gulp-ngtemplate')\n\ngulp.task('app-js', function () {\n  return merge2(\n      gulp.src('static/src/tpl/*.html')\n        .pipe(minifyHtml({empty: true}))\n        .pipe(ngtemplate({\n          module: 'genTemplates',\n          standalone: true\n        })\n      ), gulp.src([\n        'static/src/js/app.js',\n        'static/src/js/locale_zh-cn.js',\n        'static/src/js/router.js',\n        'static/src/js/tools.js',\n        'static/src/js/services.js',\n        'static/src/js/filters.js',\n        'static/src/js/directives.js',\n        'static/src/js/controllers.js'\n      ])\n    )\n    .pipe(concat('app.js'))\n    .pipe(gulp.dest('static/dist/js/'))\n})\n```\n\n```js\nconst stream = merge2([stream1, stream2], stream3, {end: false})\n//...\nstream.add(stream4, stream5)\n//..\nstream.end()\n```\n\n```js\n// equal to merge2([stream1, stream2], stream3)\nconst stream = merge2()\nstream.add([stream1, stream2])\nstream.add(stream3)\n```\n\n```js\n// merge order:\n//   1. merge `stream1`;\n//   2. merge `stream2` and `stream3` in parallel after `stream1` merged;\n//   3. merge 'stream4' after `stream2` and `stream3` merged;\nconst stream = merge2(stream1, [stream2, stream3], stream4)\n\n// merge order:\n//   1. merge `stream5` and `stream6` in parallel after `stream4` merged;\n//   2. merge 'stream7' after `stream5` and `stream6` merged;\nstream.add([stream5, stream6], stream7)\n```\n\n```js\n// nest merge\n// equal to merge2(stream1, stream2, stream6, stream3, [stream4, stream5]);\nconst streamA = merge2(stream1, stream2)\nconst streamB = merge2(stream3, [stream4, stream5])\nconst stream = merge2(streamA, streamB)\nstreamA.add(stream6)\n```\n\n## API\n\n```js\nconst merge2 = require('merge2')\n```\n\n### merge2()\n\n### merge2(options)\n\n### merge2(stream1, stream2, ..., streamN)\n\n### merge2(stream1, stream2, ..., streamN, options)\n\n### merge2(stream1, [stream2, stream3, ...], streamN, options)\n\nreturn a duplex stream (mergedStream). streams in array will be merged in parallel.\n\n### mergedStream.add(stream)\n\n### mergedStream.add(stream1, [stream2, stream3, ...], ...)\n\nreturn the mergedStream.\n\n### mergedStream.on('queueDrain', function() {})\n\nIt will emit 'queueDrain' when all streams merged. If you set `end === false` in options, this event give you a notice that should add more streams to merge or end the mergedStream.\n\n#### stream\n\n*option*\nType: `Readable` or `Duplex` or `Transform` stream.\n\n#### options\n\n*option*\nType: `Object`.\n\n* **end** - `Boolean` - if `end === false` then mergedStream will not be auto ended, you should end by yourself. **Default:** `undefined`\n\n* **pipeError** - `Boolean` - if `pipeError === true` then mergedStream will emit `error` event from source streams. **Default:** `undefined`\n\n* **objectMode** - `Boolean` . **Default:** `true`\n\n`objectMode` and other options(`highWaterMark`, `defaultEncoding` ...) is same as Node.js `Stream`.\n\n## License\n\nMIT © [Teambition](https://www.teambition.com)\n\n[npm-url]: https://npmjs.org/package/merge2\n[npm-image]: http://img.shields.io/npm/v/merge2.svg\n\n[travis-url]: https://travis-ci.org/teambition/merge2\n[travis-image]: http://img.shields.io/travis/teambition/merge2.svg\n\n[downloads-url]: https://npmjs.org/package/merge2\n[downloads-image]: http://img.shields.io/npm/dm/merge2.svg?style=flat-square\n/package.json\u0003>{\n  \"name\": \"merge2\",\n  \"description\": \"Merge multiple streams into one stream in sequence or parallel.\",\n  \"authors\": [\n    \"Yan Qing <admin@zensh.com>\"\n  ],\n  \"license\": \"MIT\",\n  \"version\": \"1.4.1\",\n  \"main\": \"./index.js\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git@github.com:teambition/merge2.git\"\n  },\n  \"homepage\": \"https://github.com/teambition/merge2\",\n  \"keywords\": [\n    \"merge2\",\n    \"multiple\",\n    \"sequence\",\n    \"parallel\",\n    \"merge\",\n    \"stream\",\n    \"merge stream\",\n    \"sync\"\n  ],\n  \"engines\": {\n    \"node\": \">= 8\"\n  },\n  \"dependencies\": {},\n  \"devDependencies\": {\n    \"standard\": \"^14.3.4\",\n    \"through2\": \"^3.0.1\",\n    \"thunks\": \"^4.9.6\",\n    \"tman\": \"^1.10.0\",\n    \"to-through\": \"^2.0.0\"\n  },\n  \"scripts\": {\n    \"test\": \"standard && tman\"\n  },\n  \"files\": [\n    \"README.md\",\n    \"index.js\"\n  ]\n}\n/index.js\f'use strict'\n/*\n * merge2\n * https://github.com/teambition/merge2\n *\n * Copyright (c) 2014-2020 Teambition\n * Licensed under the MIT license.\n */\nconst Stream = require('stream')\nconst PassThrough = Stream.PassThrough\nconst slice = Array.prototype.slice\n\nmodule.exports = merge2\n\nfunction merge2 () {\n  const streamsQueue = []\n  const args = slice.call(arguments)\n  let merging = false\n  let options = args[args.length - 1]\n\n  if (options && !Array.isArray(options) && options.pipe == null) {\n    args.pop()\n  } else {\n    options = {}\n  }\n\n  const doEnd = options.end !== false\n  const doPipeError = options.pipeError === true\n  if (options.objectMode == null) {\n    options.objectMode = true\n  }\n  if (options.highWaterMark == null) {\n    options.highWaterMark = 64 * 1024\n  }\n  const mergedStream = PassThrough(options)\n\n  function addStream () {\n    for (let i = 0, len = arguments.length; i < len; i++) {\n      streamsQueue.push(pauseStreams(arguments[i], options))\n    }\n    mergeStream()\n    return this\n  }\n\n  function mergeStream () {\n    if (merging) {\n      return\n    }\n    merging = true\n\n    let streams = streamsQueue.shift()\n    if (!streams) {\n      process.nextTick(endStream)\n      return\n    }\n    if (!Array.isArray(streams)) {\n      streams = [streams]\n    }\n\n    let pipesCount = streams.length + 1\n\n    function next () {\n      if (--pipesCount > 0) {\n        return\n      }\n      merging = false\n      mergeStream()\n    }\n\n    function pipe (stream) {\n      function onend () {\n        stream.removeListener('merge2UnpipeEnd', onend)\n        stream.removeListener('end', onend)\n        if (doPipeError) {\n          stream.removeListener('error', onerror)\n        }\n        next()\n      }\n      function onerror (err) {\n        mergedStream.emit('error', err)\n      }\n      // skip ended stream\n      if (stream._readableState.endEmitted) {\n        return next()\n      }\n\n      stream.on('merge2UnpipeEnd', onend)\n      stream.on('end', onend)\n\n      if (doPipeError) {\n        stream.on('error', onerror)\n      }\n\n      stream.pipe(mergedStream, { end: false })\n      // compatible for old stream\n      stream.resume()\n    }\n\n    for (let i = 0; i < streams.length; i++) {\n      pipe(streams[i])\n    }\n\n    next()\n  }\n\n  function endStream () {\n    merging = false\n    // emit 'queueDrain' when all streams merged.\n    mergedStream.emit('queueDrain')\n    if (doEnd) {\n      mergedStream.end()\n    }\n  }\n\n  mergedStream.setMaxListeners(0)\n  mergedStream.add = addStream\n  mergedStream.on('unpipe', function (stream) {\n    stream.emit('merge2UnpipeEnd')\n  })\n\n  if (args.length) {\n    addStream.apply(null, args)\n  }\n  return mergedStream\n}\n\n// check and pause streams for pipe.\nfunction pauseStreams (streams, options) {\n  if (!Array.isArray(streams)) {\n    // Backwards-compat with old-style streams\n    if (!streams._readableState && streams.pipe) {\n      streams = streams.pipe(PassThrough(options))\n    }\n    if (!streams._readableState || !streams.pause || !streams.pipe) {\n      throw new Error('Only readable stream can be merged.')\n    }\n    streams.pause()\n  } else {\n    for (let i = 0, len = streams.length; i < len; i++) {\n      streams[i] = pauseStreams(streams[i], options)\n    }\n  }\n  return streams\n}\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/bWljcm9tYXRjaEA0LjAuNQ==",
    "content": "/LICENSE\u0004CThe MIT License (MIT)\n\nCopyright (c) 2014-present, Jon Schlinkert.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n/package.json\nX{\n  \"name\": \"micromatch\",\n  \"description\": \"Glob matching for javascript/node.js. A replacement and faster alternative to minimatch and multimatch.\",\n  \"version\": \"4.0.5\",\n  \"homepage\": \"https://github.com/micromatch/micromatch\",\n  \"author\": \"Jon Schlinkert (https://github.com/jonschlinkert)\",\n  \"contributors\": [\n    \"(https://github.com/DianeLooney)\",\n    \"Amila Welihinda (amilajack.com)\",\n    \"Bogdan Chadkin (https://github.com/TrySound)\",\n    \"Brian Woodward (https://twitter.com/doowb)\",\n    \"Devon Govett (http://badassjs.com)\",\n    \"Elan Shanker (https://github.com/es128)\",\n    \"Fabrício Matté (https://ultcombo.js.org)\",\n    \"Jon Schlinkert (http://twitter.com/jonschlinkert)\",\n    \"Martin Kolárik (https://kolarik.sk)\",\n    \"Olsten Larck (https://i.am.charlike.online)\",\n    \"Paul Miller (paulmillr.com)\",\n    \"Tom Byrer (https://github.com/tomByrer)\",\n    \"Tyler Akins (http://rumkin.com)\",\n    \"Peter Bright <drpizza@quiscalusmexicanus.org> (https://github.com/drpizza)\",\n    \"Kuba Juszczyk (https://github.com/ku8ar)\"\n  ],\n  \"repository\": \"micromatch/micromatch\",\n  \"bugs\": {\n    \"url\": \"https://github.com/micromatch/micromatch/issues\"\n  },\n  \"license\": \"MIT\",\n  \"files\": [\n    \"index.js\"\n  ],\n  \"main\": \"index.js\",\n  \"engines\": {\n    \"node\": \">=8.6\"\n  },\n  \"scripts\": {\n    \"test\": \"mocha\"\n  },\n  \"dependencies\": {\n    \"braces\": \"^3.0.2\",\n    \"picomatch\": \"^2.3.1\"\n  },\n  \"devDependencies\": {\n    \"fill-range\": \"^7.0.1\",\n    \"gulp-format-md\": \"^2.0.0\",\n    \"minimatch\": \"^5.0.1\",\n    \"mocha\": \"^9.2.2\",\n    \"time-require\": \"github:jonschlinkert/time-require\"\n  },\n  \"keywords\": [\n    \"bash\",\n    \"bracket\",\n    \"character-class\",\n    \"expand\",\n    \"expansion\",\n    \"expression\",\n    \"extglob\",\n    \"extglobs\",\n    \"file\",\n    \"files\",\n    \"filter\",\n    \"find\",\n    \"glob\",\n    \"globbing\",\n    \"globs\",\n    \"globstar\",\n    \"lookahead\",\n    \"lookaround\",\n    \"lookbehind\",\n    \"match\",\n    \"matcher\",\n    \"matches\",\n    \"matching\",\n    \"micromatch\",\n    \"minimatch\",\n    \"multimatch\",\n    \"negate\",\n    \"negation\",\n    \"path\",\n    \"pattern\",\n    \"patterns\",\n    \"posix\",\n    \"regex\",\n    \"regexp\",\n    \"regular\",\n    \"shell\",\n    \"star\",\n    \"wildcard\"\n  ],\n  \"verb\": {\n    \"toc\": \"collapsible\",\n    \"layout\": \"default\",\n    \"tasks\": [\n      \"readme\"\n    ],\n    \"plugins\": [\n      \"gulp-format-md\"\n    ],\n    \"lint\": {\n      \"reflinks\": true\n    },\n    \"related\": {\n      \"list\": [\n        \"braces\",\n        \"expand-brackets\",\n        \"extglob\",\n        \"fill-range\",\n        \"nanomatch\"\n      ]\n    },\n    \"reflinks\": [\n      \"extglob\",\n      \"fill-range\",\n      \"glob-object\",\n      \"minimatch\",\n      \"multimatch\"\n    ]\n  }\n}\n/index.js5'use strict';\n\nconst util = require('util');\nconst braces = require('braces');\nconst picomatch = require('picomatch');\nconst utils = require('picomatch/lib/utils');\nconst isEmptyString = val => val === '' || val === './';\n\n/**\n * Returns an array of strings that match one or more glob patterns.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm(list, patterns[, options]);\n *\n * console.log(mm(['a.js', 'a.txt'], ['*.js']));\n * //=> [ 'a.js' ]\n * ```\n * @param {String|Array<string>} `list` List of strings to match.\n * @param {String|Array<string>} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `options` See available [options](#options)\n * @return {Array} Returns an array of matches\n * @summary false\n * @api public\n */\n\nconst micromatch = (list, patterns, options) => {\n  patterns = [].concat(patterns);\n  list = [].concat(list);\n\n  let omit = new Set();\n  let keep = new Set();\n  let items = new Set();\n  let negatives = 0;\n\n  let onResult = state => {\n    items.add(state.output);\n    if (options && options.onResult) {\n      options.onResult(state);\n    }\n  };\n\n  for (let i = 0; i < patterns.length; i++) {\n    let isMatch = picomatch(String(patterns[i]), { ...options, onResult }, true);\n    let negated = isMatch.state.negated || isMatch.state.negatedExtglob;\n    if (negated) negatives++;\n\n    for (let item of list) {\n      let matched = isMatch(item, true);\n\n      let match = negated ? !matched.isMatch : matched.isMatch;\n      if (!match) continue;\n\n      if (negated) {\n        omit.add(matched.output);\n      } else {\n        omit.delete(matched.output);\n        keep.add(matched.output);\n      }\n    }\n  }\n\n  let result = negatives === patterns.length ? [...items] : [...keep];\n  let matches = result.filter(item => !omit.has(item));\n\n  if (options && matches.length === 0) {\n    if (options.failglob === true) {\n      throw new Error(`No matches found for \"${patterns.join(', ')}\"`);\n    }\n\n    if (options.nonull === true || options.nullglob === true) {\n      return options.unescape ? patterns.map(p => p.replace(/\\\\/g, '')) : patterns;\n    }\n  }\n\n  return matches;\n};\n\n/**\n * Backwards compatibility\n */\n\nmicromatch.match = micromatch;\n\n/**\n * Returns a matcher function from the given glob `pattern` and `options`.\n * The returned function takes a string to match as its only argument and returns\n * true if the string is a match.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.matcher(pattern[, options]);\n *\n * const isMatch = mm.matcher('*.!(*a)');\n * console.log(isMatch('a.a')); //=> false\n * console.log(isMatch('a.b')); //=> true\n * ```\n * @param {String} `pattern` Glob pattern\n * @param {Object} `options`\n * @return {Function} Returns a matcher function.\n * @api public\n */\n\nmicromatch.matcher = (pattern, options) => picomatch(pattern, options);\n\n/**\n * Returns true if **any** of the given glob `patterns` match the specified `string`.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.isMatch(string, patterns[, options]);\n *\n * console.log(mm.isMatch('a.a', ['b.*', '*.a'])); //=> true\n * console.log(mm.isMatch('a.a', 'b.*')); //=> false\n * ```\n * @param {String} `str` The string to test.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `[options]` See available [options](#options).\n * @return {Boolean} Returns true if any patterns match `str`\n * @api public\n */\n\nmicromatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str);\n\n/**\n * Backwards compatibility\n */\n\nmicromatch.any = micromatch.isMatch;\n\n/**\n * Returns a list of strings that _**do not match any**_ of the given `patterns`.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.not(list, patterns[, options]);\n *\n * console.log(mm.not(['a.a', 'b.b', 'c.c'], '*.a'));\n * //=> ['b.b', 'c.c']\n * ```\n * @param {Array} `list` Array of strings to match.\n * @param {String|Array} `patterns` One or more glob pattern to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Array} Returns an array of strings that **do not match** the given patterns.\n * @api public\n */\n\nmicromatch.not = (list, patterns, options = {}) => {\n  patterns = [].concat(patterns).map(String);\n  let result = new Set();\n  let items = [];\n\n  let onResult = state => {\n    if (options.onResult) options.onResult(state);\n    items.push(state.output);\n  };\n\n  let matches = new Set(micromatch(list, patterns, { ...options, onResult }));\n\n  for (let item of items) {\n    if (!matches.has(item)) {\n      result.add(item);\n    }\n  }\n  return [...result];\n};\n\n/**\n * Returns true if the given `string` contains the given pattern. Similar\n * to [.isMatch](#isMatch) but the pattern can match any part of the string.\n *\n * ```js\n * var mm = require('micromatch');\n * // mm.contains(string, pattern[, options]);\n *\n * console.log(mm.contains('aa/bb/cc', '*b'));\n * //=> true\n * console.log(mm.contains('aa/bb/cc', '*d'));\n * //=> false\n * ```\n * @param {String} `str` The string to match.\n * @param {String|Array} `patterns` Glob pattern to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Boolean} Returns true if any of the patterns matches any part of `str`.\n * @api public\n */\n\nmicromatch.contains = (str, pattern, options) => {\n  if (typeof str !== 'string') {\n    throw new TypeError(`Expected a string: \"${util.inspect(str)}\"`);\n  }\n\n  if (Array.isArray(pattern)) {\n    return pattern.some(p => micromatch.contains(str, p, options));\n  }\n\n  if (typeof pattern === 'string') {\n    if (isEmptyString(str) || isEmptyString(pattern)) {\n      return false;\n    }\n\n    if (str.includes(pattern) || (str.startsWith('./') && str.slice(2).includes(pattern))) {\n      return true;\n    }\n  }\n\n  return micromatch.isMatch(str, pattern, { ...options, contains: true });\n};\n\n/**\n * Filter the keys of the given object with the given `glob` pattern\n * and `options`. Does not attempt to match nested keys. If you need this feature,\n * use [glob-object][] instead.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.matchKeys(object, patterns[, options]);\n *\n * const obj = { aa: 'a', ab: 'b', ac: 'c' };\n * console.log(mm.matchKeys(obj, '*b'));\n * //=> { ab: 'b' }\n * ```\n * @param {Object} `object` The object with keys to filter.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Object} Returns an object with only keys that match the given patterns.\n * @api public\n */\n\nmicromatch.matchKeys = (obj, patterns, options) => {\n  if (!utils.isObject(obj)) {\n    throw new TypeError('Expected the first argument to be an object');\n  }\n  let keys = micromatch(Object.keys(obj), patterns, options);\n  let res = {};\n  for (let key of keys) res[key] = obj[key];\n  return res;\n};\n\n/**\n * Returns true if some of the strings in the given `list` match any of the given glob `patterns`.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.some(list, patterns[, options]);\n *\n * console.log(mm.some(['foo.js', 'bar.js'], ['*.js', '!foo.js']));\n * // true\n * console.log(mm.some(['foo.js'], ['*.js', '!foo.js']));\n * // false\n * ```\n * @param {String|Array} `list` The string or array of strings to test. Returns as soon as the first match is found.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Boolean} Returns true if any `patterns` matches any of the strings in `list`\n * @api public\n */\n\nmicromatch.some = (list, patterns, options) => {\n  let items = [].concat(list);\n\n  for (let pattern of [].concat(patterns)) {\n    let isMatch = picomatch(String(pattern), options);\n    if (items.some(item => isMatch(item))) {\n      return true;\n    }\n  }\n  return false;\n};\n\n/**\n * Returns true if every string in the given `list` matches\n * any of the given glob `patterns`.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.every(list, patterns[, options]);\n *\n * console.log(mm.every('foo.js', ['foo.js']));\n * // true\n * console.log(mm.every(['foo.js', 'bar.js'], ['*.js']));\n * // true\n * console.log(mm.every(['foo.js', 'bar.js'], ['*.js', '!foo.js']));\n * // false\n * console.log(mm.every(['foo.js'], ['*.js', '!foo.js']));\n * // false\n * ```\n * @param {String|Array} `list` The string or array of strings to test.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Boolean} Returns true if all `patterns` matches all of the strings in `list`\n * @api public\n */\n\nmicromatch.every = (list, patterns, options) => {\n  let items = [].concat(list);\n\n  for (let pattern of [].concat(patterns)) {\n    let isMatch = picomatch(String(pattern), options);\n    if (!items.every(item => isMatch(item))) {\n      return false;\n    }\n  }\n  return true;\n};\n\n/**\n * Returns true if **all** of the given `patterns` match\n * the specified string.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.all(string, patterns[, options]);\n *\n * console.log(mm.all('foo.js', ['foo.js']));\n * // true\n *\n * console.log(mm.all('foo.js', ['*.js', '!foo.js']));\n * // false\n *\n * console.log(mm.all('foo.js', ['*.js', 'foo.js']));\n * // true\n *\n * console.log(mm.all('foo.js', ['*.js', 'f*', '*o*', '*o.js']));\n * // true\n * ```\n * @param {String|Array} `str` The string to test.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Boolean} Returns true if any patterns match `str`\n * @api public\n */\n\nmicromatch.all = (str, patterns, options) => {\n  if (typeof str !== 'string') {\n    throw new TypeError(`Expected a string: \"${util.inspect(str)}\"`);\n  }\n\n  return [].concat(patterns).every(p => picomatch(p, options)(str));\n};\n\n/**\n * Returns an array of matches captured by `pattern` in `string, or `null` if the pattern did not match.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.capture(pattern, string[, options]);\n *\n * console.log(mm.capture('test/*.js', 'test/foo.js'));\n * //=> ['foo']\n * console.log(mm.capture('test/*.js', 'foo/bar.css'));\n * //=> null\n * ```\n * @param {String} `glob` Glob pattern to use for matching.\n * @param {String} `input` String to match\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Array|null} Returns an array of captures if the input matches the glob pattern, otherwise `null`.\n * @api public\n */\n\nmicromatch.capture = (glob, input, options) => {\n  let posix = utils.isWindows(options);\n  let regex = picomatch.makeRe(String(glob), { ...options, capture: true });\n  let match = regex.exec(posix ? utils.toPosixSlashes(input) : input);\n\n  if (match) {\n    return match.slice(1).map(v => v === void 0 ? '' : v);\n  }\n};\n\n/**\n * Create a regular expression from the given glob `pattern`.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.makeRe(pattern[, options]);\n *\n * console.log(mm.makeRe('*.js'));\n * //=> /^(?:(\\.[\\\\\\/])?(?!\\.)(?=.)[^\\/]*?\\.js)$/\n * ```\n * @param {String} `pattern` A glob pattern to convert to regex.\n * @param {Object} `options`\n * @return {RegExp} Returns a regex created from the given pattern.\n * @api public\n */\n\nmicromatch.makeRe = (...args) => picomatch.makeRe(...args);\n\n/**\n * Scan a glob pattern to separate the pattern into segments. Used\n * by the [split](#split) method.\n *\n * ```js\n * const mm = require('micromatch');\n * const state = mm.scan(pattern[, options]);\n * ```\n * @param {String} `pattern`\n * @param {Object} `options`\n * @return {Object} Returns an object with\n * @api public\n */\n\nmicromatch.scan = (...args) => picomatch.scan(...args);\n\n/**\n * Parse a glob pattern to create the source string for a regular\n * expression.\n *\n * ```js\n * const mm = require('micromatch');\n * const state = mm.parse(pattern[, options]);\n * ```\n * @param {String} `glob`\n * @param {Object} `options`\n * @return {Object} Returns an object with useful properties and output to be used as regex source string.\n * @api public\n */\n\nmicromatch.parse = (patterns, options) => {\n  let res = [];\n  for (let pattern of [].concat(patterns || [])) {\n    for (let str of braces(String(pattern), options)) {\n      res.push(picomatch.parse(str, options));\n    }\n  }\n  return res;\n};\n\n/**\n * Process the given brace `pattern`.\n *\n * ```js\n * const { braces } = require('micromatch');\n * console.log(braces('foo/{a,b,c}/bar'));\n * //=> [ 'foo/(a|b|c)/bar' ]\n *\n * console.log(braces('foo/{a,b,c}/bar', { expand: true }));\n * //=> [ 'foo/a/bar', 'foo/b/bar', 'foo/c/bar' ]\n * ```\n * @param {String} `pattern` String with brace pattern to process.\n * @param {Object} `options` Any [options](#options) to change how expansion is performed. See the [braces][] library for all available options.\n * @return {Array}\n * @api public\n */\n\nmicromatch.braces = (pattern, options) => {\n  if (typeof pattern !== 'string') throw new TypeError('Expected a string');\n  if ((options && options.nobrace === true) || !/\\{.*\\}/.test(pattern)) {\n    return [pattern];\n  }\n  return braces(pattern, options);\n};\n\n/**\n * Expand braces\n */\n\nmicromatch.braceExpand = (pattern, options) => {\n  if (typeof pattern !== 'string') throw new TypeError('Expected a string');\n  return micromatch.braces(pattern, { ...options, expand: true });\n};\n\n/**\n * Expose micromatch\n */\n\nmodule.exports = micromatch;\n/README.mdŖC# micromatch [![NPM version](https://img.shields.io/npm/v/micromatch.svg?style=flat)](https://www.npmjs.com/package/micromatch) [![NPM monthly downloads](https://img.shields.io/npm/dm/micromatch.svg?style=flat)](https://npmjs.org/package/micromatch) [![NPM total downloads](https://img.shields.io/npm/dt/micromatch.svg?style=flat)](https://npmjs.org/package/micromatch)  [![Tests](https://github.com/micromatch/micromatch/actions/workflows/test.yml/badge.svg)](https://github.com/micromatch/micromatch/actions/workflows/test.yml)\n\n> Glob matching for javascript/node.js. A replacement and faster alternative to minimatch and multimatch.\n\nPlease consider following this project's author, [Jon Schlinkert](https://github.com/jonschlinkert), and consider starring the project to show your :heart: and support.\n\n## Table of Contents\n\n<details>\n<summary><strong>Details</strong></summary>\n\n- [Install](#install)\n- [Quickstart](#quickstart)\n- [Why use micromatch?](#why-use-micromatch)\n  * [Matching features](#matching-features)\n- [Switching to micromatch](#switching-to-micromatch)\n  * [From minimatch](#from-minimatch)\n  * [From multimatch](#from-multimatch)\n- [API](#api)\n- [Options](#options)\n- [Options Examples](#options-examples)\n  * [options.basename](#optionsbasename)\n  * [options.bash](#optionsbash)\n  * [options.expandRange](#optionsexpandrange)\n  * [options.format](#optionsformat)\n  * [options.ignore](#optionsignore)\n  * [options.matchBase](#optionsmatchbase)\n  * [options.noextglob](#optionsnoextglob)\n  * [options.nonegate](#optionsnonegate)\n  * [options.noglobstar](#optionsnoglobstar)\n  * [options.nonull](#optionsnonull)\n  * [options.nullglob](#optionsnullglob)\n  * [options.onIgnore](#optionsonignore)\n  * [options.onMatch](#optionsonmatch)\n  * [options.onResult](#optionsonresult)\n  * [options.posixSlashes](#optionsposixslashes)\n  * [options.unescape](#optionsunescape)\n- [Extended globbing](#extended-globbing)\n  * [Extglobs](#extglobs)\n  * [Braces](#braces)\n  * [Regex character classes](#regex-character-classes)\n  * [Regex groups](#regex-groups)\n  * [POSIX bracket expressions](#posix-bracket-expressions)\n- [Notes](#notes)\n  * [Bash 4.3 parity](#bash-43-parity)\n  * [Backslashes](#backslashes)\n- [Benchmarks](#benchmarks)\n  * [Running benchmarks](#running-benchmarks)\n  * [Latest results](#latest-results)\n- [Contributing](#contributing)\n- [About](#about)\n\n</details>\n\n## Install\n\nInstall with [npm](https://www.npmjs.com/) (requires [Node.js](https://nodejs.org/en/) >=8.6):\n\n```sh\n$ npm install --save micromatch\n```\n\n## Quickstart\n\n```js\nconst micromatch = require('micromatch');\n// micromatch(list, patterns[, options]);\n```\n\nThe [main export](#micromatch) takes a list of strings and one or more glob patterns:\n\n```js\nconsole.log(micromatch(['foo', 'bar', 'baz', 'qux'], ['f*', 'b*'])) //=> ['foo', 'bar', 'baz']\nconsole.log(micromatch(['foo', 'bar', 'baz', 'qux'], ['*', '!b*'])) //=> ['foo', 'qux']\n```\n\nUse [.isMatch()](#ismatch) to for boolean matching:\n\n```js\nconsole.log(micromatch.isMatch('foo', 'f*')) //=> true\nconsole.log(micromatch.isMatch('foo', ['b*', 'f*'])) //=> true\n```\n\n[Switching](#switching-to-micromatch) from minimatch and multimatch is easy!\n\n<br>\n\n## Why use micromatch?\n\n> micromatch is a [replacement](#switching-to-micromatch) for minimatch and multimatch\n\n* Supports all of the same matching features as [minimatch](https://github.com/isaacs/minimatch) and [multimatch](https://github.com/sindresorhus/multimatch)\n* More complete support for the Bash 4.3 specification than minimatch and multimatch. Micromatch passes _all of the spec tests_ from bash, including some that bash still fails.\n* **Fast & Performant** - Loads in about 5ms and performs [fast matches](#benchmarks).\n* **Glob matching** - Using wildcards (`*` and `?`), globstars (`**`) for nested directories\n* **[Advanced globbing](#extended-globbing)** - Supports [extglobs](#extglobs), [braces](#braces-1), and [POSIX brackets](#posix-bracket-expressions), and support for escaping special characters with `\\` or quotes.\n* **Accurate** - Covers more scenarios [than minimatch](https://github.com/yarnpkg/yarn/pull/3339)\n* **Well tested** - More than 5,000 [test assertions](./test)\n* **Windows support** - More reliable windows support than minimatch and multimatch.\n* **[Safe](https://github.com/micromatch/braces#braces-is-safe)** - Micromatch is not subject to DoS with brace patterns like minimatch and multimatch.\n\n### Matching features\n\n* Support for multiple glob patterns (no need for wrappers like multimatch)\n* Wildcards (`**`, `*.js`)\n* Negation (`'!a/*.js'`, `'*!(b).js'`)\n* [extglobs](#extglobs) (`+(x|y)`, `!(a|b)`)\n* [POSIX character classes](#posix-bracket-expressions) (`[[:alpha:][:digit:]]`)\n* [brace expansion](https://github.com/micromatch/braces) (`foo/{1..5}.md`, `bar/{a,b,c}.js`)\n* regex character classes (`foo-[1-5].js`)\n* regex logical \"or\" (`foo/(abc|xyz).js`)\n\nYou can mix and match these features to create whatever patterns you need!\n\n## Switching to micromatch\n\n_(There is one notable difference between micromatch and minimatch in regards to how backslashes are handled. See [the notes about backslashes](#backslashes) for more information.)_\n\n### From minimatch\n\nUse [micromatch.isMatch()](#ismatch) instead of `minimatch()`:\n\n```js\nconsole.log(micromatch.isMatch('foo', 'b*')); //=> false\n```\n\nUse [micromatch.match()](#match) instead of `minimatch.match()`:\n\n```js\nconsole.log(micromatch.match(['foo', 'bar'], 'b*')); //=> 'bar'\n```\n\n### From multimatch\n\nSame signature:\n\n```js\nconsole.log(micromatch(['foo', 'bar', 'baz'], ['f*', '*z'])); //=> ['foo', 'baz']\n```\n\n## API\n\n**Params**\n\n* `list` **{String|Array<string>}**: List of strings to match.\n* `patterns` **{String|Array<string>}**: One or more glob patterns to use for matching.\n* `options` **{Object}**: See available [options](#options)\n* `returns` **{Array}**: Returns an array of matches\n\n**Example**\n\n```js\nconst mm = require('micromatch');\n// mm(list, patterns[, options]);\n\nconsole.log(mm(['a.js', 'a.txt'], ['*.js']));\n//=> [ 'a.js' ]\n```\n\n### [.matcher](index.js#L104)\n\nReturns a matcher function from the given glob `pattern` and `options`. The returned function takes a string to match as its only argument and returns true if the string is a match.\n\n**Params**\n\n* `pattern` **{String}**: Glob pattern\n* `options` **{Object}**\n* `returns` **{Function}**: Returns a matcher function.\n\n**Example**\n\n```js\nconst mm = require('micromatch');\n// mm.matcher(pattern[, options]);\n\nconst isMatch = mm.matcher('*.!(*a)');\nconsole.log(isMatch('a.a')); //=> false\nconsole.log(isMatch('a.b')); //=> true\n```\n\n### [.isMatch](index.js#L123)\n\nReturns true if **any** of the given glob `patterns` match the specified `string`.\n\n**Params**\n\n* `str` **{String}**: The string to test.\n* `patterns` **{String|Array}**: One or more glob patterns to use for matching.\n* `[options]` **{Object}**: See available [options](#options).\n* `returns` **{Boolean}**: Returns true if any patterns match `str`\n\n**Example**\n\n```js\nconst mm = require('micromatch');\n// mm.isMatch(string, patterns[, options]);\n\nconsole.log(mm.isMatch('a.a', ['b.*', '*.a'])); //=> true\nconsole.log(mm.isMatch('a.a', 'b.*')); //=> false\n```\n\n### [.not](index.js#L148)\n\nReturns a list of strings that _**do not match any**_ of the given `patterns`.\n\n**Params**\n\n* `list` **{Array}**: Array of strings to match.\n* `patterns` **{String|Array}**: One or more glob pattern to use for matching.\n* `options` **{Object}**: See available [options](#options) for changing how matches are performed\n* `returns` **{Array}**: Returns an array of strings that **do not match** the given patterns.\n\n**Example**\n\n```js\nconst mm = require('micromatch');\n// mm.not(list, patterns[, options]);\n\nconsole.log(mm.not(['a.a', 'b.b', 'c.c'], '*.a'));\n//=> ['b.b', 'c.c']\n```\n\n### [.contains](index.js#L188)\n\nReturns true if the given `string` contains the given pattern. Similar to [.isMatch](#isMatch) but the pattern can match any part of the string.\n\n**Params**\n\n* `str` **{String}**: The string to match.\n* `patterns` **{String|Array}**: Glob pattern to use for matching.\n* `options` **{Object}**: See available [options](#options) for changing how matches are performed\n* `returns` **{Boolean}**: Returns true if any of the patterns matches any part of `str`.\n\n**Example**\n\n```js\nvar mm = require('micromatch');\n// mm.contains(string, pattern[, options]);\n\nconsole.log(mm.contains('aa/bb/cc', '*b'));\n//=> true\nconsole.log(mm.contains('aa/bb/cc', '*d'));\n//=> false\n```\n\n### [.matchKeys](index.js#L230)\n\nFilter the keys of the given object with the given `glob` pattern and `options`. Does not attempt to match nested keys. If you need this feature, use [glob-object](https://github.com/jonschlinkert/glob-object) instead.\n\n**Params**\n\n* `object` **{Object}**: The object with keys to filter.\n* `patterns` **{String|Array}**: One or more glob patterns to use for matching.\n* `options` **{Object}**: See available [options](#options) for changing how matches are performed\n* `returns` **{Object}**: Returns an object with only keys that match the given patterns.\n\n**Example**\n\n```js\nconst mm = require('micromatch');\n// mm.matchKeys(object, patterns[, options]);\n\nconst obj = { aa: 'a', ab: 'b', ac: 'c' };\nconsole.log(mm.matchKeys(obj, '*b'));\n//=> { ab: 'b' }\n```\n\n### [.some](index.js#L259)\n\nReturns true if some of the strings in the given `list` match any of the given glob `patterns`.\n\n**Params**\n\n* `list` **{String|Array}**: The string or array of strings to test. Returns as soon as the first match is found.\n* `patterns` **{String|Array}**: One or more glob patterns to use for matching.\n* `options` **{Object}**: See available [options](#options) for changing how matches are performed\n* `returns` **{Boolean}**: Returns true if any `patterns` matches any of the strings in `list`\n\n**Example**\n\n```js\nconst mm = require('micromatch');\n// mm.some(list, patterns[, options]);\n\nconsole.log(mm.some(['foo.js', 'bar.js'], ['*.js', '!foo.js']));\n// true\nconsole.log(mm.some(['foo.js'], ['*.js', '!foo.js']));\n// false\n```\n\n### [.every](index.js#L295)\n\nReturns true if every string in the given `list` matches any of the given glob `patterns`.\n\n**Params**\n\n* `list` **{String|Array}**: The string or array of strings to test.\n* `patterns` **{String|Array}**: One or more glob patterns to use for matching.\n* `options` **{Object}**: See available [options](#options) for changing how matches are performed\n* `returns` **{Boolean}**: Returns true if all `patterns` matches all of the strings in `list`\n\n**Example**\n\n```js\nconst mm = require('micromatch');\n// mm.every(list, patterns[, options]);\n\nconsole.log(mm.every('foo.js', ['foo.js']));\n// true\nconsole.log(mm.every(['foo.js', 'bar.js'], ['*.js']));\n// true\nconsole.log(mm.every(['foo.js', 'bar.js'], ['*.js', '!foo.js']));\n// false\nconsole.log(mm.every(['foo.js'], ['*.js', '!foo.js']));\n// false\n```\n\n### [.all](index.js#L334)\n\nReturns true if **all** of the given `patterns` match the specified string.\n\n**Params**\n\n* `str` **{String|Array}**: The string to test.\n* `patterns` **{String|Array}**: One or more glob patterns to use for matching.\n* `options` **{Object}**: See available [options](#options) for changing how matches are performed\n* `returns` **{Boolean}**: Returns true if any patterns match `str`\n\n**Example**\n\n```js\nconst mm = require('micromatch');\n// mm.all(string, patterns[, options]);\n\nconsole.log(mm.all('foo.js', ['foo.js']));\n// true\n\nconsole.log(mm.all('foo.js', ['*.js', '!foo.js']));\n// false\n\nconsole.log(mm.all('foo.js', ['*.js', 'foo.js']));\n// true\n\nconsole.log(mm.all('foo.js', ['*.js', 'f*', '*o*', '*o.js']));\n// true\n```\n\n### [.capture](index.js#L361)\n\nReturns an array of matches captured by `pattern` in `string, or`null` if the pattern did not match.\n\n**Params**\n\n* `glob` **{String}**: Glob pattern to use for matching.\n* `input` **{String}**: String to match\n* `options` **{Object}**: See available [options](#options) for changing how matches are performed\n* `returns` **{Array|null}**: Returns an array of captures if the input matches the glob pattern, otherwise `null`.\n\n**Example**\n\n```js\nconst mm = require('micromatch');\n// mm.capture(pattern, string[, options]);\n\nconsole.log(mm.capture('test/*.js', 'test/foo.js'));\n//=> ['foo']\nconsole.log(mm.capture('test/*.js', 'foo/bar.css'));\n//=> null\n```\n\n### [.makeRe](index.js#L387)\n\nCreate a regular expression from the given glob `pattern`.\n\n**Params**\n\n* `pattern` **{String}**: A glob pattern to convert to regex.\n* `options` **{Object}**\n* `returns` **{RegExp}**: Returns a regex created from the given pattern.\n\n**Example**\n\n```js\nconst mm = require('micromatch');\n// mm.makeRe(pattern[, options]);\n\nconsole.log(mm.makeRe('*.js'));\n//=> /^(?:(\\.[\\\\\\/])?(?!\\.)(?=.)[^\\/]*?\\.js)$/\n```\n\n### [.scan](index.js#L403)\n\nScan a glob pattern to separate the pattern into segments. Used by the [split](#split) method.\n\n**Params**\n\n* `pattern` **{String}**\n* `options` **{Object}**\n* `returns` **{Object}**: Returns an object with\n\n**Example**\n\n```js\nconst mm = require('micromatch');\nconst state = mm.scan(pattern[, options]);\n```\n\n### [.parse](index.js#L419)\n\nParse a glob pattern to create the source string for a regular expression.\n\n**Params**\n\n* `glob` **{String}**\n* `options` **{Object}**\n* `returns` **{Object}**: Returns an object with useful properties and output to be used as regex source string.\n\n**Example**\n\n```js\nconst mm = require('micromatch');\nconst state = mm.parse(pattern[, options]);\n```\n\n### [.braces](index.js#L446)\n\nProcess the given brace `pattern`.\n\n**Params**\n\n* `pattern` **{String}**: String with brace pattern to process.\n* `options` **{Object}**: Any [options](#options) to change how expansion is performed. See the [braces](https://github.com/micromatch/braces) library for all available options.\n* `returns` **{Array}**\n\n**Example**\n\n```js\nconst { braces } = require('micromatch');\nconsole.log(braces('foo/{a,b,c}/bar'));\n//=> [ 'foo/(a|b|c)/bar' ]\n\nconsole.log(braces('foo/{a,b,c}/bar', { expand: true }));\n//=> [ 'foo/a/bar', 'foo/b/bar', 'foo/c/bar' ]\n```\n\n## Options\n\n| **Option** | **Type** | **Default value** | **Description** |\n| --- | --- | --- | --- |\n| `basename`            | `boolean`      | `false`     | If set, then patterns without slashes will be matched against the basename of the path if it contains slashes.  For example, `a?b` would match the path `/xyz/123/acb`, but not `/xyz/acb/123`. |\n| `bash`                | `boolean`      | `false`     | Follow bash matching rules more strictly - disallows backslashes as escape characters, and treats single stars as globstars (`**`). |\n| `capture`             | `boolean`      | `undefined` | Return regex matches in supporting methods. |\n| `contains`            | `boolean`      | `undefined` | Allows glob to match any part of the given string(s). |\n| `cwd`                 | `string`       | `process.cwd()` | Current working directory. Used by `picomatch.split()` |\n| `debug`               | `boolean`      | `undefined` | Debug regular expressions when an error is thrown. |\n| `dot`                 | `boolean`      | `false`     | Match dotfiles. Otherwise dotfiles are ignored unless a `.` is explicitly defined in the pattern. |\n| `expandRange`         | `function`     | `undefined` | Custom function for expanding ranges in brace patterns, such as `{a..z}`. The function receives the range values as two arguments, and it must return a string to be used in the generated regex. It's recommended that returned strings be wrapped in parentheses. This option is overridden by the `expandBrace` option. |\n| `failglob`            | `boolean`      | `false`     | Similar to the `failglob` behavior in Bash, throws an error when no matches are found. Based on the bash option of the same name. |\n| `fastpaths`           | `boolean`      | `true`      | To speed up processing, full parsing is skipped for a handful common glob patterns. Disable this behavior by setting this option to `false`. |\n| `flags`               | `boolean`      | `undefined` | Regex flags to use in the generated regex. If defined, the `nocase` option will be overridden. |\n| [format](#optionsformat) | `function` | `undefined` | Custom function for formatting the returned string. This is useful for removing leading slashes, converting Windows paths to Posix paths, etc. |\n| `ignore`              | `array\\|string` | `undefined` | One or more glob patterns for excluding strings that should not be matched from the result. |\n| `keepQuotes`          | `boolean`      | `false`     | Retain quotes in the generated regex, since quotes may also be used as an alternative to backslashes.  |\n| `literalBrackets`     | `boolean`      | `undefined` | When `true`, brackets in the glob pattern will be escaped so that only literal brackets will be matched. |\n| `lookbehinds`         | `boolean`      | `true`      | Support regex positive and negative lookbehinds. Note that you must be using Node 8.1.10 or higher to enable regex lookbehinds. |\n| `matchBase`           | `boolean`      | `false`     | Alias for `basename` |\n| `maxLength`           | `boolean`      | `65536`     | Limit the max length of the input string. An error is thrown if the input string is longer than this value. |\n| `nobrace`             | `boolean`      | `false`     | Disable brace matching, so that `{a,b}` and `{1..3}` would be treated as literal characters. |\n| `nobracket`           | `boolean`      | `undefined` | Disable matching with regex brackets. |\n| `nocase`              | `boolean`      | `false`     | Perform case-insensitive matching. Equivalent to the regex `i` flag. Note that this option is ignored when the `flags` option is defined. |\n| `nodupes`             | `boolean`      | `true`      | Deprecated, use `nounique` instead. This option will be removed in a future major release. By default duplicates are removed. Disable uniquification by setting this option to false. |\n| `noext`               | `boolean`      | `false`     | Alias for `noextglob` |\n| `noextglob`           | `boolean`      | `false`     | Disable support for matching with [extglobs](#extglobs) (like `+(a\\|b)`) |\n| `noglobstar`          | `boolean`      | `false`     | Disable support for matching nested directories with globstars (`**`) |\n| `nonegate`            | `boolean`      | `false`     | Disable support for negating with leading `!` |\n| `noquantifiers`       | `boolean`      | `false`     | Disable support for regex quantifiers (like `a{1,2}`) and treat them as brace patterns to be expanded. |\n| [onIgnore](#optionsonIgnore) | `function` | `undefined` | Function to be called on ignored items. |\n| [onMatch](#optionsonMatch) | `function` | `undefined` | Function to be called on matched items. |\n| [onResult](#optionsonResult) | `function` | `undefined` | Function to be called on all items, regardless of whether or not they are matched or ignored. |\n| `posix`               | `boolean`      | `false`     | Support [POSIX character classes](#posix-bracket-expressions) (\"posix brackets\"). |\n| `posixSlashes`        | `boolean`      | `undefined` | Convert all slashes in file paths to forward slashes. This does not convert slashes in the glob pattern itself |\n| `prepend`             | `string`       | `undefined` | String to prepend to the generated regex used for matching. |\n| `regex`               | `boolean`      | `false`     | Use regular expression rules for `+` (instead of matching literal `+`), and for stars that follow closing parentheses or brackets (as in `)*` and `]*`). |\n| `strictBrackets`      | `boolean`      | `undefined` | Throw an error if brackets, braces, or parens are imbalanced. |\n| `strictSlashes`       | `boolean`      | `undefined` | When true, picomatch won't match trailing slashes with single stars. |\n| `unescape`            | `boolean`      | `undefined` | Remove preceding backslashes from escaped glob characters before creating the regular expression to perform matches. |\n| `unixify`             | `boolean`      | `undefined` | Alias for `posixSlashes`, for backwards compatitibility. |\n\n## Options Examples\n\n### options.basename\n\nAllow glob patterns without slashes to match a file path based on its basename. Same behavior as [minimatch](https://github.com/isaacs/minimatch) option `matchBase`.\n\n**Type**: `Boolean`\n\n**Default**: `false`\n\n**Example**\n\n```js\nmicromatch(['a/b.js', 'a/c.md'], '*.js');\n//=> []\n\nmicromatch(['a/b.js', 'a/c.md'], '*.js', { basename: true });\n//=> ['a/b.js']\n```\n\n### options.bash\n\nEnabled by default, this option enforces bash-like behavior with stars immediately following a bracket expression. Bash bracket expressions are similar to regex character classes, but unlike regex, a star following a bracket expression **does not repeat the bracketed characters**. Instead, the star is treated the same as any other star.\n\n**Type**: `Boolean`\n\n**Default**: `true`\n\n**Example**\n\n```js\nconst files = ['abc', 'ajz'];\nconsole.log(micromatch(files, '[a-c]*'));\n//=> ['abc', 'ajz']\n\nconsole.log(micromatch(files, '[a-c]*', { bash: false }));\n```\n\n### options.expandRange\n\n**Type**: `function`\n\n**Default**: `undefined`\n\nCustom function for expanding ranges in brace patterns. The [fill-range](https://github.com/jonschlinkert/fill-range) library is ideal for this purpose, or you can use custom code to do whatever you need.\n\n**Example**\n\nThe following example shows how to create a glob that matches a numeric folder name between `01` and `25`, with leading zeros.\n\n```js\nconst fill = require('fill-range');\nconst regex = micromatch.makeRe('foo/{01..25}/bar', {\n  expandRange(a, b) {\n    return `(${fill(a, b, { toRegex: true })})`;\n  }\n});\n\nconsole.log(regex)\n//=> /^(?:foo\\/((?:0[1-9]|1[0-9]|2[0-5]))\\/bar)$/\n\nconsole.log(regex.test('foo/00/bar')) // false\nconsole.log(regex.test('foo/01/bar')) // true\nconsole.log(regex.test('foo/10/bar')) // true\nconsole.log(regex.test('foo/22/bar')) // true\nconsole.log(regex.test('foo/25/bar')) // true\nconsole.log(regex.test('foo/26/bar')) // false\n```\n\n### options.format\n\n**Type**: `function`\n\n**Default**: `undefined`\n\nCustom function for formatting strings before they're matched.\n\n**Example**\n\n```js\n// strip leading './' from strings\nconst format = str => str.replace(/^\\.\\//, '');\nconst isMatch = picomatch('foo/*.js', { format });\nconsole.log(isMatch('./foo/bar.js')) //=> true\n```\n\n### options.ignore\n\nString or array of glob patterns to match files to ignore.\n\n**Type**: `String|Array`\n\n**Default**: `undefined`\n\n```js\nconst isMatch = micromatch.matcher('*', { ignore: 'f*' });\nconsole.log(isMatch('foo')) //=> false\nconsole.log(isMatch('bar')) //=> true\nconsole.log(isMatch('baz')) //=> true\n```\n\n### options.matchBase\n\nAlias for [options.basename](#options-basename).\n\n### options.noextglob\n\nDisable extglob support, so that [extglobs](#extglobs) are regarded as literal characters.\n\n**Type**: `Boolean`\n\n**Default**: `undefined`\n\n**Examples**\n\n```js\nconsole.log(micromatch(['a/z', 'a/b', 'a/!(z)'], 'a/!(z)'));\n//=> ['a/b', 'a/!(z)']\n\nconsole.log(micromatch(['a/z', 'a/b', 'a/!(z)'], 'a/!(z)', { noextglob: true }));\n//=> ['a/!(z)'] (matches only as literal characters)\n```\n\n### options.nonegate\n\nDisallow negation (`!`) patterns, and treat leading `!` as a literal character to match.\n\n**Type**: `Boolean`\n\n**Default**: `undefined`\n\n### options.noglobstar\n\nDisable matching with globstars (`**`).\n\n**Type**: `Boolean`\n\n**Default**: `undefined`\n\n```js\nmicromatch(['a/b', 'a/b/c', 'a/b/c/d'], 'a/**');\n//=> ['a/b', 'a/b/c', 'a/b/c/d']\n\nmicromatch(['a/b', 'a/b/c', 'a/b/c/d'], 'a/**', {noglobstar: true});\n//=> ['a/b']\n```\n\n### options.nonull\n\nAlias for [options.nullglob](#options-nullglob).\n\n### options.nullglob\n\nIf `true`, when no matches are found the actual (arrayified) glob pattern is returned instead of an empty array. Same behavior as [minimatch](https://github.com/isaacs/minimatch) option `nonull`.\n\n**Type**: `Boolean`\n\n**Default**: `undefined`\n\n### options.onIgnore\n\n```js\nconst onIgnore = ({ glob, regex, input, output }) => {\n  console.log({ glob, regex, input, output });\n  // { glob: '*', regex: /^(?:(?!\\.)(?=.)[^\\/]*?\\/?)$/, input: 'foo', output: 'foo' }\n};\n\nconst isMatch = micromatch.matcher('*', { onIgnore, ignore: 'f*' });\nisMatch('foo');\nisMatch('bar');\nisMatch('baz');\n```\n\n### options.onMatch\n\n```js\nconst onMatch = ({ glob, regex, input, output }) => {\n  console.log({ input, output });\n  // { input: 'some\\\\path', output: 'some/path' }\n  // { input: 'some\\\\path', output: 'some/path' }\n  // { input: 'some\\\\path', output: 'some/path' }\n};\n\nconst isMatch = micromatch.matcher('**', { onMatch, posixSlashes: true });\nisMatch('some\\\\path');\nisMatch('some\\\\path');\nisMatch('some\\\\path');\n```\n\n### options.onResult\n\n```js\nconst onResult = ({ glob, regex, input, output }) => {\n  console.log({ glob, regex, input, output });\n};\n\nconst isMatch = micromatch('*', { onResult, ignore: 'f*' });\nisMatch('foo');\nisMatch('bar');\nisMatch('baz');\n```\n\n### options.posixSlashes\n\nConvert path separators on returned files to posix/unix-style forward slashes. Aliased as `unixify` for backwards compatibility.\n\n**Type**: `Boolean`\n\n**Default**: `true` on windows, `false` everywhere else.\n\n**Example**\n\n```js\nconsole.log(micromatch.match(['a\\\\b\\\\c'], 'a/**'));\n//=> ['a/b/c']\n\nconsole.log(micromatch.match(['a\\\\b\\\\c'], { posixSlashes: false }));\n//=> ['a\\\\b\\\\c']\n```\n\n### options.unescape\n\nRemove backslashes from escaped glob characters before creating the regular expression to perform matches.\n\n**Type**: `Boolean`\n\n**Default**: `undefined`\n\n**Example**\n\nIn this example we want to match a literal `*`:\n\n```js\nconsole.log(micromatch.match(['abc', 'a\\\\*c'], 'a\\\\*c'));\n//=> ['a\\\\*c']\n\nconsole.log(micromatch.match(['abc', 'a\\\\*c'], 'a\\\\*c', { unescape: true }));\n//=> ['a*c']\n```\n\n<br>\n<br>\n\n## Extended globbing\n\nMicromatch supports the following extended globbing features.\n\n### Extglobs\n\nExtended globbing, as described by the bash man page:\n\n| **pattern** | **regex equivalent** | **description** |\n| --- | --- | --- |\n| `?(pattern)` | `(pattern)?` | Matches zero or one occurrence of the given patterns |\n| `*(pattern)` | `(pattern)*` | Matches zero or more occurrences of the given patterns |\n| `+(pattern)` | `(pattern)+` | Matches one or more occurrences of the given patterns |\n| `@(pattern)` | `(pattern)` <sup>*</sup> | Matches one of the given patterns |\n| `!(pattern)` | N/A (equivalent regex is much more complicated) | Matches anything except one of the given patterns |\n\n<sup><strong>*</strong></sup> Note that `@` isn't a regex character.\n\n### Braces\n\nBrace patterns can be used to match specific ranges or sets of characters.\n\n**Example**\n\nThe pattern `{f,b}*/{1..3}/{b,q}*` would match any of following strings:\n\n```\nfoo/1/bar\nfoo/2/bar\nfoo/3/bar\nbaz/1/qux\nbaz/2/qux\nbaz/3/qux\n```\n\nVisit [braces](https://github.com/micromatch/braces) to see the full range of features and options related to brace expansion, or to create brace matching or expansion related issues.\n\n### Regex character classes\n\nGiven the list: `['a.js', 'b.js', 'c.js', 'd.js', 'E.js']`:\n\n* `[ac].js`: matches both `a` and `c`, returning `['a.js', 'c.js']`\n* `[b-d].js`: matches from `b` to `d`, returning `['b.js', 'c.js', 'd.js']`\n* `a/[A-Z].js`: matches and uppercase letter, returning `['a/E.md']`\n\nLearn about [regex character classes](http://www.regular-expressions.info/charclass.html).\n\n### Regex groups\n\nGiven `['a.js', 'b.js', 'c.js', 'd.js', 'E.js']`:\n\n* `(a|c).js`: would match either `a` or `c`, returning `['a.js', 'c.js']`\n* `(b|d).js`: would match either `b` or `d`, returning `['b.js', 'd.js']`\n* `(b|[A-Z]).js`: would match either `b` or an uppercase letter, returning `['b.js', 'E.js']`\n\nAs with regex, parens can be nested, so patterns like `((a|b)|c)/b` will work. Although brace expansion might be friendlier to use, depending on preference.\n\n### POSIX bracket expressions\n\nPOSIX brackets are intended to be more user-friendly than regex character classes. This of course is in the eye of the beholder.\n\n**Example**\n\n```js\nconsole.log(micromatch.isMatch('a1', '[[:alpha:][:digit:]]')) //=> true\nconsole.log(micromatch.isMatch('a1', '[[:alpha:][:alpha:]]')) //=> false\n```\n\n***\n\n## Notes\n\n### Bash 4.3 parity\n\nWhenever possible matching behavior is based on behavior Bash 4.3, which is mostly consistent with minimatch.\n\nHowever, it's suprising how many edge cases and rabbit holes there are with glob matching, and since there is no real glob specification, and micromatch is more accurate than both Bash and minimatch, there are cases where best-guesses were made for behavior. In a few cases where Bash had no answers, we used wildmatch (used by git) as a fallback.\n\n### Backslashes\n\nThere is an important, notable difference between minimatch and micromatch _in regards to how backslashes are handled_ in glob patterns.\n\n* Micromatch exclusively and explicitly reserves backslashes for escaping characters in a glob pattern, even on windows, which is consistent with bash behavior. _More importantly, unescaping globs can result in unsafe regular expressions_.\n* Minimatch converts all backslashes to forward slashes, which means you can't use backslashes to escape any characters in your glob patterns.\n\nWe made this decision for micromatch for a couple of reasons:\n\n* Consistency with bash conventions.\n* Glob patterns are not filepaths. They are a type of [regular language](https://en.wikipedia.org/wiki/Regular_language) that is converted to a JavaScript regular expression. Thus, when forward slashes are defined in a glob pattern, the resulting regular expression will match windows or POSIX path separators just fine.\n\n**A note about joining paths to globs**\n\nNote that when you pass something like `path.join('foo', '*')` to micromatch, you are creating a filepath and expecting it to still work as a glob pattern. This causes problems on windows, since the `path.sep` is `\\\\`.\n\nIn other words, since `\\\\` is reserved as an escape character in globs, on windows `path.join('foo', '*')` would result in `foo\\\\*`, which tells micromatch to match `*` as a literal character. This is the same behavior as bash.\n\nTo solve this, you might be inspired to do something like `'foo\\\\*'.replace(/\\\\/g, '/')`, but this causes another, potentially much more serious, problem.\n\n## Benchmarks\n\n### Running benchmarks\n\nInstall dependencies for running benchmarks:\n\n```sh\n$ cd bench && npm install\n```\n\nRun the benchmarks:\n\n```sh\n$ npm run bench\n```\n\n### Latest results\n\nAs of March 24, 2022 (longer bars are better):\n\n```sh\n# .makeRe star\n  micromatch x 2,232,802 ops/sec ±2.34% (89 runs sampled))\n  minimatch x 781,018 ops/sec ±6.74% (92 runs sampled))\n\n# .makeRe star; dot=true\n  micromatch x 1,863,453 ops/sec ±0.74% (93 runs sampled)\n  minimatch x 723,105 ops/sec ±0.75% (93 runs sampled)\n\n# .makeRe globstar\n  micromatch x 1,624,179 ops/sec ±2.22% (91 runs sampled)\n  minimatch x 1,117,230 ops/sec ±2.78% (86 runs sampled))\n\n# .makeRe globstars\n  micromatch x 1,658,642 ops/sec ±0.86% (92 runs sampled)\n  minimatch x 741,224 ops/sec ±1.24% (89 runs sampled))\n\n# .makeRe with leading star\n  micromatch x 1,525,014 ops/sec ±1.63% (90 runs sampled)\n  minimatch x 561,074 ops/sec ±3.07% (89 runs sampled)\n\n# .makeRe - braces\n  micromatch x 172,478 ops/sec ±2.37% (78 runs sampled)\n  minimatch x 96,087 ops/sec ±2.34% (88 runs sampled)))\n\n# .makeRe braces - range (expanded)\n  micromatch x 26,973 ops/sec ±0.84% (89 runs sampled)\n  minimatch x 3,023 ops/sec ±0.99% (90 runs sampled))\n\n# .makeRe braces - range (compiled)\n  micromatch x 152,892 ops/sec ±1.67% (83 runs sampled)\n  minimatch x 992 ops/sec ±3.50% (89 runs sampled)d))\n\n# .makeRe braces - nested ranges (expanded)\n  micromatch x 15,816 ops/sec ±13.05% (80 runs sampled)\n  minimatch x 2,953 ops/sec ±1.64% (91 runs sampled)\n\n# .makeRe braces - nested ranges (compiled)\n  micromatch x 110,881 ops/sec ±1.85% (82 runs sampled)\n  minimatch x 1,008 ops/sec ±1.51% (91 runs sampled)\n\n# .makeRe braces - set (compiled)\n  micromatch x 134,930 ops/sec ±3.54% (63 runs sampled))\n  minimatch x 43,242 ops/sec ±0.60% (93 runs sampled)\n\n# .makeRe braces - nested sets (compiled)\n  micromatch x 94,455 ops/sec ±1.74% (69 runs sampled))\n  minimatch x 27,720 ops/sec ±1.84% (93 runs sampled))\n```\n\n## Contributing\n\nAll contributions are welcome! Please read [the contributing guide](.github/contributing.md) to get started.\n\n**Bug reports**\n\nPlease create an issue if you encounter a bug or matching behavior that doesn't seem correct. If you find a matching-related issue, please:\n\n* [research existing issues first](../../issues) (open and closed)\n* visit the [GNU Bash documentation](https://www.gnu.org/software/bash/manual/) to see how Bash deals with the pattern\n* visit the [minimatch](https://github.com/isaacs/minimatch) documentation to cross-check expected behavior in node.js\n* if all else fails, since there is no real specification for globs we will probably need to discuss expected behavior and decide how to resolve it. which means any detail you can provide to help with this discussion would be greatly appreciated.\n\n**Platform issues**\n\nIt's important to us that micromatch work consistently on all platforms. If you encounter any platform-specific matching or path related issues, please let us know (pull requests are also greatly appreciated).\n\n## About\n\n<details>\n<summary><strong>Contributing</strong></summary>\n\nPull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).\n\nPlease read the [contributing guide](.github/contributing.md) for advice on opening issues, pull requests, and coding standards.\n\n</details>\n\n<details>\n<summary><strong>Running Tests</strong></summary>\n\nRunning and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:\n\n```sh\n$ npm install && npm test\n```\n\n</details>\n\n<details>\n<summary><strong>Building docs</strong></summary>\n\n_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_\n\nTo generate the readme, run the following command:\n\n```sh\n$ npm install -g verbose/verb#dev verb-generate-readme && verb\n```\n\n</details>\n\n### Related projects\n\nYou might also be interested in these projects:\n\n* [braces](https://www.npmjs.com/package/braces): Bash-like brace expansion, implemented in JavaScript. Safer than other brace expansion libs, with complete support… [more](https://github.com/micromatch/braces) | [homepage](https://github.com/micromatch/braces \"Bash-like brace expansion, implemented in JavaScript. Safer than other brace expansion libs, with complete support for the Bash 4.3 braces specification, without sacrificing speed.\")\n* [expand-brackets](https://www.npmjs.com/package/expand-brackets): Expand POSIX bracket expressions (character classes) in glob patterns. | [homepage](https://github.com/micromatch/expand-brackets \"Expand POSIX bracket expressions (character classes) in glob patterns.\")\n* [extglob](https://www.npmjs.com/package/extglob): Extended glob support for JavaScript. Adds (almost) the expressive power of regular expressions to glob… [more](https://github.com/micromatch/extglob) | [homepage](https://github.com/micromatch/extglob \"Extended glob support for JavaScript. Adds (almost) the expressive power of regular expressions to glob patterns.\")\n* [fill-range](https://www.npmjs.com/package/fill-range): Fill in a range of numbers or letters, optionally passing an increment or `step` to… [more](https://github.com/jonschlinkert/fill-range) | [homepage](https://github.com/jonschlinkert/fill-range \"Fill in a range of numbers or letters, optionally passing an increment or `step` to use, or create a regex-compatible range with `options.toRegex`\")\n* [nanomatch](https://www.npmjs.com/package/nanomatch): Fast, minimal glob matcher for node.js. Similar to micromatch, minimatch and multimatch, but complete Bash… [more](https://github.com/micromatch/nanomatch) | [homepage](https://github.com/micromatch/nanomatch \"Fast, minimal glob matcher for node.js. Similar to micromatch, minimatch and multimatch, but complete Bash 4.3 wildcard support only (no support for exglobs, posix brackets or braces)\")\n\n### Contributors\n\n| **Commits** | **Contributor** |  \n| --- | --- |  \n| 512 | [jonschlinkert](https://github.com/jonschlinkert) |  \n| 12  | [es128](https://github.com/es128) |  \n| 9   | [danez](https://github.com/danez) |  \n| 8   | [doowb](https://github.com/doowb) |  \n| 6   | [paulmillr](https://github.com/paulmillr) |  \n| 5   | [mrmlnc](https://github.com/mrmlnc) |  \n| 3   | [DrPizza](https://github.com/DrPizza) |  \n| 2   | [TrySound](https://github.com/TrySound) |  \n| 2   | [mceIdo](https://github.com/mceIdo) |  \n| 2   | [Glazy](https://github.com/Glazy) |  \n| 2   | [MartinKolarik](https://github.com/MartinKolarik) |  \n| 2   | [antonyk](https://github.com/antonyk) |  \n| 2   | [Tvrqvoise](https://github.com/Tvrqvoise) |  \n| 1   | [amilajack](https://github.com/amilajack) |  \n| 1   | [Cslove](https://github.com/Cslove) |  \n| 1   | [devongovett](https://github.com/devongovett) |  \n| 1   | [DianeLooney](https://github.com/DianeLooney) |  \n| 1   | [UltCombo](https://github.com/UltCombo) |  \n| 1   | [frangio](https://github.com/frangio) |  \n| 1   | [joyceerhl](https://github.com/joyceerhl) |  \n| 1   | [juszczykjakub](https://github.com/juszczykjakub) |  \n| 1   | [muescha](https://github.com/muescha) |  \n| 1   | [sebdeckers](https://github.com/sebdeckers) |  \n| 1   | [tomByrer](https://github.com/tomByrer) |  \n| 1   | [fidian](https://github.com/fidian) |  \n| 1   | [curbengh](https://github.com/curbengh) |  \n| 1   | [simlu](https://github.com/simlu) |  \n| 1   | [wtgtybhertgeghgtwtg](https://github.com/wtgtybhertgeghgtwtg) |  \n| 1   | [yvele](https://github.com/yvele) |  \n\n### Author\n\n**Jon Schlinkert**\n\n* [GitHub Profile](https://github.com/jonschlinkert)\n* [Twitter Profile](https://twitter.com/jonschlinkert)\n* [LinkedIn Profile](https://linkedin.com/in/jonschlinkert)\n\n### License\n\nCopyright © 2022, [Jon Schlinkert](https://github.com/jonschlinkert).\nReleased under the [MIT License](LICENSE).\n\n***\n\n_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.8.0, on March 24, 2022._"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/bWltZS10eXBlc0AyLjEuMzU=",
    "content": "/package.json\u0004}{\n  \"name\": \"mime-types\",\n  \"description\": \"The ultimate javascript content-type utility.\",\n  \"version\": \"2.1.35\",\n  \"contributors\": [\n    \"Douglas Christopher Wilson <doug@somethingdoug.com>\",\n    \"Jeremiah Senkpiel <fishrock123@rocketmail.com> (https://searchbeam.jit.su)\",\n    \"Jonathan Ong <me@jongleberry.com> (http://jongleberry.com)\"\n  ],\n  \"license\": \"MIT\",\n  \"keywords\": [\n    \"mime\",\n    \"types\"\n  ],\n  \"repository\": \"jshttp/mime-types\",\n  \"dependencies\": {\n    \"mime-db\": \"1.52.0\"\n  },\n  \"devDependencies\": {\n    \"eslint\": \"7.32.0\",\n    \"eslint-config-standard\": \"14.1.1\",\n    \"eslint-plugin-import\": \"2.25.4\",\n    \"eslint-plugin-markdown\": \"2.2.1\",\n    \"eslint-plugin-node\": \"11.1.0\",\n    \"eslint-plugin-promise\": \"5.2.0\",\n    \"eslint-plugin-standard\": \"4.1.0\",\n    \"mocha\": \"9.2.2\",\n    \"nyc\": \"15.1.0\"\n  },\n  \"files\": [\n    \"HISTORY.md\",\n    \"LICENSE\",\n    \"index.js\"\n  ],\n  \"engines\": {\n    \"node\": \">= 0.6\"\n  },\n  \"scripts\": {\n    \"lint\": \"eslint .\",\n    \"test\": \"mocha --reporter spec test/test.js\",\n    \"test-ci\": \"nyc --reporter=lcov --reporter=text npm test\",\n    \"test-cov\": \"nyc --reporter=html --reporter=text npm test\"\n  }\n}\n/README.md\r# mime-types\n\n[![NPM Version][npm-version-image]][npm-url]\n[![NPM Downloads][npm-downloads-image]][npm-url]\n[![Node.js Version][node-version-image]][node-version-url]\n[![Build Status][ci-image]][ci-url]\n[![Test Coverage][coveralls-image]][coveralls-url]\n\nThe ultimate javascript content-type utility.\n\nSimilar to [the `mime@1.x` module](https://www.npmjs.com/package/mime), except:\n\n- __No fallbacks.__ Instead of naively returning the first available type,\n  `mime-types` simply returns `false`, so do\n  `var type = mime.lookup('unrecognized') || 'application/octet-stream'`.\n- No `new Mime()` business, so you could do `var lookup = require('mime-types').lookup`.\n- No `.define()` functionality\n- Bug fixes for `.lookup(path)`\n\nOtherwise, the API is compatible with `mime` 1.x.\n\n## Install\n\nThis is a [Node.js](https://nodejs.org/en/) module available through the\n[npm registry](https://www.npmjs.com/). Installation is done using the\n[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally):\n\n```sh\n$ npm install mime-types\n```\n\n## Adding Types\n\nAll mime types are based on [mime-db](https://www.npmjs.com/package/mime-db),\nso open a PR there if you'd like to add mime types.\n\n## API\n\n```js\nvar mime = require('mime-types')\n```\n\nAll functions return `false` if input is invalid or not found.\n\n### mime.lookup(path)\n\nLookup the content-type associated with a file.\n\n```js\nmime.lookup('json') // 'application/json'\nmime.lookup('.md') // 'text/markdown'\nmime.lookup('file.html') // 'text/html'\nmime.lookup('folder/file.js') // 'application/javascript'\nmime.lookup('folder/.htaccess') // false\n\nmime.lookup('cats') // false\n```\n\n### mime.contentType(type)\n\nCreate a full content-type header given a content-type or extension.\nWhen given an extension, `mime.lookup` is used to get the matching\ncontent-type, otherwise the given content-type is used. Then if the\ncontent-type does not already have a `charset` parameter, `mime.charset`\nis used to get the default charset and add to the returned content-type.\n\n```js\nmime.contentType('markdown') // 'text/x-markdown; charset=utf-8'\nmime.contentType('file.json') // 'application/json; charset=utf-8'\nmime.contentType('text/html') // 'text/html; charset=utf-8'\nmime.contentType('text/html; charset=iso-8859-1') // 'text/html; charset=iso-8859-1'\n\n// from a full path\nmime.contentType(path.extname('/path/to/file.json')) // 'application/json; charset=utf-8'\n```\n\n### mime.extension(type)\n\nGet the default extension for a content-type.\n\n```js\nmime.extension('application/octet-stream') // 'bin'\n```\n\n### mime.charset(type)\n\nLookup the implied default charset of a content-type.\n\n```js\nmime.charset('text/markdown') // 'UTF-8'\n```\n\n### var type = mime.types[extension]\n\nA map of content-types by extension.\n\n### [extensions...] = mime.extensions[type]\n\nA map of extensions by content-type.\n\n## License\n\n[MIT](LICENSE)\n\n[ci-image]: https://badgen.net/github/checks/jshttp/mime-types/master?label=ci\n[ci-url]: https://github.com/jshttp/mime-types/actions/workflows/ci.yml\n[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/mime-types/master\n[coveralls-url]: https://coveralls.io/r/jshttp/mime-types?branch=master\n[node-version-image]: https://badgen.net/npm/node/mime-types\n[node-version-url]: https://nodejs.org/en/download\n[npm-downloads-image]: https://badgen.net/npm/dm/mime-types\n[npm-url]: https://npmjs.org/package/mime-types\n[npm-version-image]: https://badgen.net/npm/v/mime-types\n/LICENSE\u0004(The MIT License)\n\nCopyright (c) 2014 Jonathan Ong <me@jongleberry.com>\nCopyright (c) 2015 Douglas Christopher Wilson <doug@somethingdoug.com>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n/HISTORY.md\"l2.1.35 / 2022-03-12\n===================\n\n  * deps: mime-db@1.52.0\n    - Add extensions from IANA for more `image/*` types\n    - Add extension `.asc` to `application/pgp-keys`\n    - Add extensions to various XML types\n    - Add new upstream MIME types\n\n2.1.34 / 2021-11-08\n===================\n\n  * deps: mime-db@1.51.0\n    - Add new upstream MIME types\n\n2.1.33 / 2021-10-01\n===================\n\n  * deps: mime-db@1.50.0\n    - Add deprecated iWorks mime types and extensions\n    - Add new upstream MIME types\n\n2.1.32 / 2021-07-27\n===================\n\n  * deps: mime-db@1.49.0\n    - Add extension `.trig` to `application/trig`\n    - Add new upstream MIME types\n\n2.1.31 / 2021-06-01\n===================\n\n  * deps: mime-db@1.48.0\n    - Add extension `.mvt` to `application/vnd.mapbox-vector-tile`\n    - Add new upstream MIME types\n\n2.1.30 / 2021-04-02\n===================\n\n  * deps: mime-db@1.47.0\n    - Add extension `.amr` to `audio/amr`\n    - Remove ambigious extensions from IANA for `application/*+xml` types\n    - Update primary extension to `.es` for `application/ecmascript`\n\n2.1.29 / 2021-02-17\n===================\n\n  * deps: mime-db@1.46.0\n    - Add extension `.amr` to `audio/amr`\n    - Add extension `.m4s` to `video/iso.segment`\n    - Add extension `.opus` to `audio/ogg`\n    - Add new upstream MIME types\n\n2.1.28 / 2021-01-01\n===================\n\n  * deps: mime-db@1.45.0\n    - Add `application/ubjson` with extension `.ubj`\n    - Add `image/avif` with extension `.avif`\n    - Add `image/ktx2` with extension `.ktx2`\n    - Add extension `.dbf` to `application/vnd.dbf`\n    - Add extension `.rar` to `application/vnd.rar`\n    - Add extension `.td` to `application/urc-targetdesc+xml`\n    - Add new upstream MIME types\n    - Fix extension of `application/vnd.apple.keynote` to be `.key`\n\n2.1.27 / 2020-04-23\n===================\n\n  * deps: mime-db@1.44.0\n    - Add charsets from IANA\n    - Add extension `.cjs` to `application/node`\n    - Add new upstream MIME types\n\n2.1.26 / 2020-01-05\n===================\n\n  * deps: mime-db@1.43.0\n    - Add `application/x-keepass2` with extension `.kdbx`\n    - Add extension `.mxmf` to `audio/mobile-xmf`\n    - Add extensions from IANA for `application/*+xml` types\n    - Add new upstream MIME types\n\n2.1.25 / 2019-11-12\n===================\n\n  * deps: mime-db@1.42.0\n    - Add new upstream MIME types\n    - Add `application/toml` with extension `.toml`\n    - Add `image/vnd.ms-dds` with extension `.dds`\n\n2.1.24 / 2019-04-20\n===================\n\n  * deps: mime-db@1.40.0\n    - Add extensions from IANA for `model/*` types\n    - Add `text/mdx` with extension `.mdx`\n\n2.1.23 / 2019-04-17\n===================\n\n  * deps: mime-db@~1.39.0\n    - Add extensions `.siv` and `.sieve` to `application/sieve`\n    - Add new upstream MIME types\n\n2.1.22 / 2019-02-14\n===================\n\n  * deps: mime-db@~1.38.0\n    - Add extension `.nq` to `application/n-quads`\n    - Add extension `.nt` to `application/n-triples`\n    - Add new upstream MIME types\n\n2.1.21 / 2018-10-19\n===================\n\n  * deps: mime-db@~1.37.0\n    - Add extensions to HEIC image types\n    - Add new upstream MIME types\n\n2.1.20 / 2018-08-26\n===================\n\n  * deps: mime-db@~1.36.0\n    - Add Apple file extensions from IANA\n    - Add extensions from IANA for `image/*` types\n    - Add new upstream MIME types\n\n2.1.19 / 2018-07-17\n===================\n\n  * deps: mime-db@~1.35.0\n    - Add extension `.csl` to `application/vnd.citationstyles.style+xml`\n    - Add extension `.es` to `application/ecmascript`\n    - Add extension `.owl` to `application/rdf+xml`\n    - Add new upstream MIME types\n    - Add UTF-8 as default charset for `text/turtle`\n\n2.1.18 / 2018-02-16\n===================\n\n  * deps: mime-db@~1.33.0\n    - Add `application/raml+yaml` with extension `.raml`\n    - Add `application/wasm` with extension `.wasm`\n    - Add `text/shex` with extension `.shex`\n    - Add extensions for JPEG-2000 images\n    - Add extensions from IANA for `message/*` types\n    - Add new upstream MIME types\n    - Update font MIME types\n    - Update `text/hjson` to registered `application/hjson`\n\n2.1.17 / 2017-09-01\n===================\n\n  * deps: mime-db@~1.30.0\n    - Add `application/vnd.ms-outlook`\n    - Add `application/x-arj`\n    - Add extension `.mjs` to `application/javascript`\n    - Add glTF types and extensions\n    - Add new upstream MIME types\n    - Add `text/x-org`\n    - Add VirtualBox MIME types\n    - Fix `source` records for `video/*` types that are IANA\n    - Update `font/opentype` to registered `font/otf`\n\n2.1.16 / 2017-07-24\n===================\n\n  * deps: mime-db@~1.29.0\n    - Add `application/fido.trusted-apps+json`\n    - Add extension `.wadl` to `application/vnd.sun.wadl+xml`\n    - Add extension `.gz` to `application/gzip`\n    - Add new upstream MIME types\n    - Update extensions `.md` and `.markdown` to be `text/markdown`\n\n2.1.15 / 2017-03-23\n===================\n\n  * deps: mime-db@~1.27.0\n    - Add new mime types\n    - Add `image/apng`\n\n2.1.14 / 2017-01-14\n===================\n\n  * deps: mime-db@~1.26.0\n    - Add new mime types\n\n2.1.13 / 2016-11-18\n===================\n\n  * deps: mime-db@~1.25.0\n    - Add new mime types\n\n2.1.12 / 2016-09-18\n===================\n\n  * deps: mime-db@~1.24.0\n    - Add new mime types\n    - Add `audio/mp3`\n\n2.1.11 / 2016-05-01\n===================\n\n  * deps: mime-db@~1.23.0\n    - Add new mime types\n\n2.1.10 / 2016-02-15\n===================\n\n  * deps: mime-db@~1.22.0\n    - Add new mime types\n    - Fix extension of `application/dash+xml`\n    - Update primary extension for `audio/mp4`\n\n2.1.9 / 2016-01-06\n==================\n\n  * deps: mime-db@~1.21.0\n    - Add new mime types\n\n2.1.8 / 2015-11-30\n==================\n\n  * deps: mime-db@~1.20.0\n    - Add new mime types\n\n2.1.7 / 2015-09-20\n==================\n\n  * deps: mime-db@~1.19.0\n    - Add new mime types\n\n2.1.6 / 2015-09-03\n==================\n\n  * deps: mime-db@~1.18.0\n    - Add new mime types\n\n2.1.5 / 2015-08-20\n==================\n\n  * deps: mime-db@~1.17.0\n    - Add new mime types\n\n2.1.4 / 2015-07-30\n==================\n\n  * deps: mime-db@~1.16.0\n    - Add new mime types\n\n2.1.3 / 2015-07-13\n==================\n\n  * deps: mime-db@~1.15.0\n    - Add new mime types\n\n2.1.2 / 2015-06-25\n==================\n\n  * deps: mime-db@~1.14.0\n    - Add new mime types\n\n2.1.1 / 2015-06-08\n==================\n\n  * perf: fix deopt during mapping\n\n2.1.0 / 2015-06-07\n==================\n\n  * Fix incorrectly treating extension-less file name as extension\n    - i.e. `'path/to/json'` will no longer return `application/json`\n  * Fix `.charset(type)` to accept parameters\n  * Fix `.charset(type)` to match case-insensitive\n  * Improve generation of extension to MIME mapping\n  * Refactor internals for readability and no argument reassignment\n  * Prefer `application/*` MIME types from the same source\n  * Prefer any type over `application/octet-stream`\n  * deps: mime-db@~1.13.0\n    - Add nginx as a source\n    - Add new mime types\n\n2.0.14 / 2015-06-06\n===================\n\n  * deps: mime-db@~1.12.0\n    - Add new mime types\n\n2.0.13 / 2015-05-31\n===================\n\n  * deps: mime-db@~1.11.0\n    - Add new mime types\n\n2.0.12 / 2015-05-19\n===================\n\n  * deps: mime-db@~1.10.0\n    - Add new mime types\n\n2.0.11 / 2015-05-05\n===================\n\n  * deps: mime-db@~1.9.1\n    - Add new mime types\n\n2.0.10 / 2015-03-13\n===================\n\n  * deps: mime-db@~1.8.0\n    - Add new mime types\n\n2.0.9 / 2015-02-09\n==================\n\n  * deps: mime-db@~1.7.0\n    - Add new mime types\n    - Community extensions ownership transferred from `node-mime`\n\n2.0.8 / 2015-01-29\n==================\n\n  * deps: mime-db@~1.6.0\n    - Add new mime types\n\n2.0.7 / 2014-12-30\n==================\n\n  * deps: mime-db@~1.5.0\n    - Add new mime types\n    - Fix various invalid MIME type entries\n\n2.0.6 / 2014-12-30\n==================\n\n  * deps: mime-db@~1.4.0\n    - Add new mime types\n    - Fix various invalid MIME type entries\n    - Remove example template MIME types\n\n2.0.5 / 2014-12-29\n==================\n\n  * deps: mime-db@~1.3.1\n    - Fix missing extensions\n\n2.0.4 / 2014-12-10\n==================\n\n  * deps: mime-db@~1.3.0\n    - Add new mime types\n\n2.0.3 / 2014-11-09\n==================\n\n  * deps: mime-db@~1.2.0\n    - Add new mime types\n\n2.0.2 / 2014-09-28\n==================\n\n  * deps: mime-db@~1.1.0\n    - Add new mime types\n    - Update charsets\n\n2.0.1 / 2014-09-07\n==================\n\n  * Support Node.js 0.6\n\n2.0.0 / 2014-09-02\n==================\n\n  * Use `mime-db`\n  * Remove `.define()`\n\n1.0.2 / 2014-08-04\n==================\n\n  * Set charset=utf-8 for `text/javascript`\n\n1.0.1 / 2014-06-24\n==================\n\n  * Add `text/jsx` type\n\n1.0.0 / 2014-05-12\n==================\n\n  * Return `false` for unknown types\n  * Set charset=utf-8 for `application/json`\n\n0.1.0 / 2014-05-02\n==================\n\n  * Initial release\n/index.js\u000eO/*!\n * mime-types\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar db = require('mime-db')\nvar extname = require('path').extname\n\n/**\n * Module variables.\n * @private\n */\n\nvar EXTRACT_TYPE_REGEXP = /^\\s*([^;\\s]*)(?:;|\\s|$)/\nvar TEXT_TYPE_REGEXP = /^text\\//i\n\n/**\n * Module exports.\n * @public\n */\n\nexports.charset = charset\nexports.charsets = { lookup: charset }\nexports.contentType = contentType\nexports.extension = extension\nexports.extensions = Object.create(null)\nexports.lookup = lookup\nexports.types = Object.create(null)\n\n// Populate the extensions/types maps\npopulateMaps(exports.extensions, exports.types)\n\n/**\n * Get the default charset for a MIME type.\n *\n * @param {string} type\n * @return {boolean|string}\n */\n\nfunction charset (type) {\n  if (!type || typeof type !== 'string') {\n    return false\n  }\n\n  // TODO: use media-typer\n  var match = EXTRACT_TYPE_REGEXP.exec(type)\n  var mime = match && db[match[1].toLowerCase()]\n\n  if (mime && mime.charset) {\n    return mime.charset\n  }\n\n  // default text/* to utf-8\n  if (match && TEXT_TYPE_REGEXP.test(match[1])) {\n    return 'UTF-8'\n  }\n\n  return false\n}\n\n/**\n * Create a full Content-Type header given a MIME type or extension.\n *\n * @param {string} str\n * @return {boolean|string}\n */\n\nfunction contentType (str) {\n  // TODO: should this even be in this module?\n  if (!str || typeof str !== 'string') {\n    return false\n  }\n\n  var mime = str.indexOf('/') === -1\n    ? exports.lookup(str)\n    : str\n\n  if (!mime) {\n    return false\n  }\n\n  // TODO: use content-type or other module\n  if (mime.indexOf('charset') === -1) {\n    var charset = exports.charset(mime)\n    if (charset) mime += '; charset=' + charset.toLowerCase()\n  }\n\n  return mime\n}\n\n/**\n * Get the default extension for a MIME type.\n *\n * @param {string} type\n * @return {boolean|string}\n */\n\nfunction extension (type) {\n  if (!type || typeof type !== 'string') {\n    return false\n  }\n\n  // TODO: use media-typer\n  var match = EXTRACT_TYPE_REGEXP.exec(type)\n\n  // get extensions\n  var exts = match && exports.extensions[match[1].toLowerCase()]\n\n  if (!exts || !exts.length) {\n    return false\n  }\n\n  return exts[0]\n}\n\n/**\n * Lookup the MIME type for a file path/extension.\n *\n * @param {string} path\n * @return {boolean|string}\n */\n\nfunction lookup (path) {\n  if (!path || typeof path !== 'string') {\n    return false\n  }\n\n  // get the extension (\"ext\" or \".ext\" or full path)\n  var extension = extname('x.' + path)\n    .toLowerCase()\n    .substr(1)\n\n  if (!extension) {\n    return false\n  }\n\n  return exports.types[extension] || false\n}\n\n/**\n * Populate the extensions and types maps.\n * @private\n */\n\nfunction populateMaps (extensions, types) {\n  // source preference (least -> most)\n  var preference = ['nginx', 'apache', undefined, 'iana']\n\n  Object.keys(db).forEach(function forEachMimeType (type) {\n    var mime = db[type]\n    var exts = mime.extensions\n\n    if (!exts || !exts.length) {\n      return\n    }\n\n    // mime -> extensions\n    extensions[type] = exts\n\n    // extension -> mime\n    for (var i = 0; i < exts.length; i++) {\n      var extension = exts[i]\n\n      if (types[extension]) {\n        var from = preference.indexOf(db[types[extension]].source)\n        var to = preference.indexOf(mime.source)\n\n        if (types[extension] !== 'application/octet-stream' &&\n          (from > to || (from === to && types[extension].substr(0, 12) === 'application/'))) {\n          // skip the remapping\n          continue\n        }\n      }\n\n      // set the extension -> mime\n      types[extension] = type\n    }\n  })\n}\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/bWltZUAxLjYuMA==",
    "content": "/types.json{C{\"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\"]}/LICENSE\u0004JThe MIT License (MIT)\n\nCopyright (c) 2010 Benjamin Thomas, Robert Kieffer\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n/src/test.js\t\u001e/**\n * Usage: node test.js\n */\n\nvar mime = require('../mime');\nvar assert = require('assert');\nvar path = require('path');\n\n//\n// Test mime lookups\n//\n\nassert.equal('text/plain', mime.lookup('text.txt'));     // normal file\nassert.equal('text/plain', mime.lookup('TEXT.TXT'));     // uppercase\nassert.equal('text/plain', mime.lookup('dir/text.txt')); // dir + file\nassert.equal('text/plain', mime.lookup('.text.txt'));    // hidden file\nassert.equal('text/plain', mime.lookup('.txt'));         // nameless\nassert.equal('text/plain', mime.lookup('txt'));          // extension-only\nassert.equal('text/plain', mime.lookup('/txt'));         // extension-less ()\nassert.equal('text/plain', mime.lookup('\\\\txt'));        // Windows, extension-less\nassert.equal('application/octet-stream', mime.lookup('text.nope')); // unrecognized\nassert.equal('fallback', mime.lookup('text.fallback', 'fallback')); // alternate default\n\n//\n// Test extensions\n//\n\nassert.equal('txt', mime.extension(mime.types.text));\nassert.equal('html', mime.extension(mime.types.htm));\nassert.equal('bin', mime.extension('application/octet-stream'));\nassert.equal('bin', mime.extension('application/octet-stream '));\nassert.equal('html', mime.extension(' text/html; charset=UTF-8'));\nassert.equal('html', mime.extension('text/html; charset=UTF-8 '));\nassert.equal('html', mime.extension('text/html; charset=UTF-8'));\nassert.equal('html', mime.extension('text/html ; charset=UTF-8'));\nassert.equal('html', mime.extension('text/html;charset=UTF-8'));\nassert.equal('html', mime.extension('text/Html;charset=UTF-8'));\nassert.equal(undefined, mime.extension('unrecognized'));\n\n//\n// Test node.types lookups\n//\n\nassert.equal('font/woff', mime.lookup('file.woff'));\nassert.equal('application/octet-stream', mime.lookup('file.buffer'));\n// TODO: Uncomment once #157 is resolved\n// assert.equal('audio/mp4', mime.lookup('file.m4a'));\nassert.equal('font/otf', mime.lookup('file.otf'));\n\n//\n// Test charsets\n//\n\nassert.equal('UTF-8', mime.charsets.lookup('text/plain'));\nassert.equal('UTF-8', mime.charsets.lookup(mime.types.js));\nassert.equal('UTF-8', mime.charsets.lookup(mime.types.json));\nassert.equal(undefined, mime.charsets.lookup(mime.types.bin));\nassert.equal('fallback', mime.charsets.lookup('application/octet-stream', 'fallback'));\n\nconsole.log('\\nAll tests passed');\n/CHANGELOG.md%\u0001# Changelog\n\n## v1.6.0 (24/11/2017)\n*No changelog for this release.*\n\n---\n\n## v2.0.4 (24/11/2017)\n- [**closed**] Switch to mime-score module for resolving extension contention issues. [#182](https://github.com/broofa/node-mime/issues/182)\n- [**closed**] Update mime-db to 1.31.0 in v1.x branch [#181](https://github.com/broofa/node-mime/issues/181)\n\n---\n\n## v1.5.0 (22/11/2017)\n- [**closed**] need ES5 version ready in npm package [#179](https://github.com/broofa/node-mime/issues/179)\n- [**closed**] mime-db no trace of iWork - pages / numbers / etc. [#178](https://github.com/broofa/node-mime/issues/178)\n- [**closed**] How it works in brownser ? [#176](https://github.com/broofa/node-mime/issues/176)\n- [**closed**] Missing `./Mime` [#175](https://github.com/broofa/node-mime/issues/175)\n- [**closed**] Vulnerable Regular Expression [#167](https://github.com/broofa/node-mime/issues/167)\n\n---\n\n## v2.0.3 (25/09/2017)\n*No changelog for this release.*\n\n---\n\n## v1.4.1 (25/09/2017)\n- [**closed**] Issue when bundling with webpack [#172](https://github.com/broofa/node-mime/issues/172)\n\n---\n\n## v2.0.2 (15/09/2017)\n- [**V2**] fs.readFileSync is not a function [#165](https://github.com/broofa/node-mime/issues/165)\n- [**closed**] The extension for video/quicktime should map to .mov, not .qt [#164](https://github.com/broofa/node-mime/issues/164)\n- [**V2**] [v2 Feedback request] Mime class API [#163](https://github.com/broofa/node-mime/issues/163)\n- [**V2**] [v2 Feedback request] Resolving conflicts over extensions [#162](https://github.com/broofa/node-mime/issues/162)\n- [**V2**] Allow callers to load module with official, full, or no defined types.  [#161](https://github.com/broofa/node-mime/issues/161)\n- [**V2**] Use \"facets\" to resolve extension conflicts [#160](https://github.com/broofa/node-mime/issues/160)\n- [**V2**] Remove fs and path dependencies [#152](https://github.com/broofa/node-mime/issues/152)\n- [**V2**] Default content-type should not be application/octet-stream [#139](https://github.com/broofa/node-mime/issues/139)\n- [**V2**] reset mime-types [#124](https://github.com/broofa/node-mime/issues/124)\n- [**V2**] Extensionless paths should return null or false [#113](https://github.com/broofa/node-mime/issues/113)\n\n---\n\n## v2.0.1 (14/09/2017)\n- [**closed**] Changelog for v2.0 does not mention breaking changes [#171](https://github.com/broofa/node-mime/issues/171)\n- [**closed**] MIME breaking with 'class' declaration as it is without 'use strict mode' [#170](https://github.com/broofa/node-mime/issues/170)\n\n---\n\n## v2.0.0 (12/09/2017)\n- [**closed**] woff and woff2 [#168](https://github.com/broofa/node-mime/issues/168)\n\n---\n\n## v1.4.0 (28/08/2017)\n- [**closed**] support for ac3 voc files [#159](https://github.com/broofa/node-mime/issues/159)\n- [**closed**] Help understanding change from application/xml to text/xml [#158](https://github.com/broofa/node-mime/issues/158)\n- [**closed**] no longer able to override mimetype [#157](https://github.com/broofa/node-mime/issues/157)\n- [**closed**] application/vnd.adobe.photoshop [#147](https://github.com/broofa/node-mime/issues/147)\n- [**closed**] Directories should appear as something other than application/octet-stream [#135](https://github.com/broofa/node-mime/issues/135)\n- [**closed**] requested features [#131](https://github.com/broofa/node-mime/issues/131)\n- [**closed**] Make types.json loading optional? [#129](https://github.com/broofa/node-mime/issues/129)\n- [**closed**] Cannot find module './types.json' [#120](https://github.com/broofa/node-mime/issues/120)\n- [**V2**] .wav files show up as \"audio/x-wav\" instead of \"audio/x-wave\" [#118](https://github.com/broofa/node-mime/issues/118)\n- [**closed**] Don't be a pain in the ass for node community [#108](https://github.com/broofa/node-mime/issues/108)\n- [**closed**] don't make default_type global [#78](https://github.com/broofa/node-mime/issues/78)\n- [**closed**] mime.extension() fails if the content-type is parameterized [#74](https://github.com/broofa/node-mime/issues/74)\n\n---\n\n## v1.3.6 (11/05/2017)\n- [**closed**] .md should be text/markdown as of March 2016 [#154](https://github.com/broofa/node-mime/issues/154)\n- [**closed**] Error while installing mime [#153](https://github.com/broofa/node-mime/issues/153)\n- [**closed**] application/manifest+json [#149](https://github.com/broofa/node-mime/issues/149)\n- [**closed**] Dynamic adaptive streaming over HTTP (DASH) file extension typo [#141](https://github.com/broofa/node-mime/issues/141)\n- [**closed**] charsets image/png undefined [#140](https://github.com/broofa/node-mime/issues/140)\n- [**closed**] Mime-db dependency out of date [#130](https://github.com/broofa/node-mime/issues/130)\n- [**closed**] how to support plist？ [#126](https://github.com/broofa/node-mime/issues/126)\n- [**closed**] how does .types file format look like? [#123](https://github.com/broofa/node-mime/issues/123)\n- [**closed**] Feature: support for expanding MIME patterns [#121](https://github.com/broofa/node-mime/issues/121)\n- [**closed**] DEBUG_MIME doesn't work [#117](https://github.com/broofa/node-mime/issues/117)\n\n---\n\n## v1.3.4 (06/02/2015)\n*No changelog for this release.*\n\n---\n\n## v1.3.3 (06/02/2015)\n*No changelog for this release.*\n\n---\n\n## v1.3.1 (05/02/2015)\n- [**closed**] Consider adding support for Handlebars .hbs file ending [#111](https://github.com/broofa/node-mime/issues/111)\n- [**closed**] Consider adding support for hjson. [#110](https://github.com/broofa/node-mime/issues/110)\n- [**closed**] Add mime type for Opus audio files [#94](https://github.com/broofa/node-mime/issues/94)\n- [**closed**] Consider making the `Requesting New Types` information more visible [#77](https://github.com/broofa/node-mime/issues/77)\n\n---\n\n## v1.3.0 (05/02/2015)\n- [**closed**] Add common name? [#114](https://github.com/broofa/node-mime/issues/114)\n- [**closed**] application/x-yaml [#104](https://github.com/broofa/node-mime/issues/104)\n- [**closed**] Add mime type for WOFF file format 2.0 [#102](https://github.com/broofa/node-mime/issues/102)\n- [**closed**] application/x-msi for .msi [#99](https://github.com/broofa/node-mime/issues/99)\n- [**closed**] Add mimetype for gettext translation files [#98](https://github.com/broofa/node-mime/issues/98)\n- [**closed**] collaborators [#88](https://github.com/broofa/node-mime/issues/88)\n- [**closed**] getting errot in installation of mime module...any1 can help? [#87](https://github.com/broofa/node-mime/issues/87)\n- [**closed**] should application/json's charset be utf8? [#86](https://github.com/broofa/node-mime/issues/86)\n- [**closed**] Add \"license\" and \"licenses\" to package.json [#81](https://github.com/broofa/node-mime/issues/81)\n- [**closed**] lookup with extension-less file on Windows returns wrong type [#68](https://github.com/broofa/node-mime/issues/68)\n\n---\n\n## v1.2.11 (15/08/2013)\n- [**closed**] Update mime.types [#65](https://github.com/broofa/node-mime/issues/65)\n- [**closed**] Publish a new version [#63](https://github.com/broofa/node-mime/issues/63)\n- [**closed**] README should state upfront that \"application/octet-stream\" is default for unknown extension [#55](https://github.com/broofa/node-mime/issues/55)\n- [**closed**] Suggested improvement to the charset API [#52](https://github.com/broofa/node-mime/issues/52)\n\n---\n\n## v1.2.10 (25/07/2013)\n- [**closed**] Mime type for woff files should be application/font-woff and not application/x-font-woff [#62](https://github.com/broofa/node-mime/issues/62)\n- [**closed**] node.types in conflict with mime.types [#51](https://github.com/broofa/node-mime/issues/51)\n\n---\n\n## v1.2.9 (17/01/2013)\n- [**closed**] Please update \"mime\" NPM [#49](https://github.com/broofa/node-mime/issues/49)\n- [**closed**] Please add semicolon [#46](https://github.com/broofa/node-mime/issues/46)\n- [**closed**] parse full mime types [#43](https://github.com/broofa/node-mime/issues/43)\n\n---\n\n## v1.2.8 (10/01/2013)\n- [**closed**] /js directory mime is application/javascript. Is it correct? [#47](https://github.com/broofa/node-mime/issues/47)\n- [**closed**] Add mime types for lua code. [#45](https://github.com/broofa/node-mime/issues/45)\n\n---\n\n## v1.2.7 (19/10/2012)\n- [**closed**] cannot install 1.2.7 via npm [#41](https://github.com/broofa/node-mime/issues/41)\n- [**closed**] Transfer ownership to @broofa [#36](https://github.com/broofa/node-mime/issues/36)\n- [**closed**] it's wrong to set charset to UTF-8 for text [#30](https://github.com/broofa/node-mime/issues/30)\n- [**closed**] Allow multiple instances of MIME types container [#27](https://github.com/broofa/node-mime/issues/27)\n\n---\n\n## v1.2.5 (16/02/2012)\n- [**closed**] When looking up a types, check hasOwnProperty [#23](https://github.com/broofa/node-mime/issues/23)\n- [**closed**] Bump version to 1.2.2 [#18](https://github.com/broofa/node-mime/issues/18)\n- [**closed**] No license [#16](https://github.com/broofa/node-mime/issues/16)\n- [**closed**] Some types missing that are used by html5/css3 [#13](https://github.com/broofa/node-mime/issues/13)\n- [**closed**] npm install fails for 1.2.1 [#12](https://github.com/broofa/node-mime/issues/12)\n- [**closed**] image/pjpeg + image/x-png [#10](https://github.com/broofa/node-mime/issues/10)\n- [**closed**] symlink [#8](https://github.com/broofa/node-mime/issues/8)\n- [**closed**] gzip [#2](https://github.com/broofa/node-mime/issues/2)\n- [**closed**] ALL CAPS filenames return incorrect mime type [#1](https://github.com/broofa/node-mime/issues/1)\n/cli.jsĕ#!/usr/bin/env node\n\nvar mime = require('./mime.js');\nvar file = process.argv[2];\nvar type = mime.lookup(file);\n\nprocess.stdout.write(type + '\\n');\n\n/README.md\bG# mime\n\nComprehensive MIME type mapping API based on mime-db module.\n\n## Install\n\nInstall with [npm](http://github.com/isaacs/npm):\n\n    npm install mime\n\n## Contributing / Testing\n\n    npm run test\n\n## Command Line\n\n    mime [path_string]\n\nE.g.\n\n    > mime scripts/jquery.js\n    application/javascript\n\n## API - Queries\n\n### mime.lookup(path)\nGet the mime type associated with a file, if no mime type is found `application/octet-stream` is returned. Performs a case-insensitive lookup using the extension in `path` (the substring after the last '/' or '.').  E.g.\n\n```js\nvar mime = require('mime');\n\nmime.lookup('/path/to/file.txt');         // => 'text/plain'\nmime.lookup('file.txt');                  // => 'text/plain'\nmime.lookup('.TXT');                      // => 'text/plain'\nmime.lookup('htm');                       // => 'text/html'\n```\n\n### mime.default_type\nSets the mime type returned when `mime.lookup` fails to find the extension searched for. (Default is `application/octet-stream`.)\n\n### mime.extension(type)\nGet the default extension for `type`\n\n```js\nmime.extension('text/html');                 // => 'html'\nmime.extension('application/octet-stream');  // => 'bin'\n```\n\n### mime.charsets.lookup()\n\nMap mime-type to charset\n\n```js\nmime.charsets.lookup('text/plain');        // => 'UTF-8'\n```\n\n(The logic for charset lookups is pretty rudimentary.  Feel free to suggest improvements.)\n\n## API - Defining Custom Types\n\nCustom type mappings can be added on a per-project basis via the following APIs.\n\n### mime.define()\n\nAdd custom mime/extension mappings\n\n```js\nmime.define({\n    'text/x-some-format': ['x-sf', 'x-sft', 'x-sfml'],\n    'application/x-my-type': ['x-mt', 'x-mtt'],\n    // etc ...\n});\n\nmime.lookup('x-sft');                 // => 'text/x-some-format'\n```\n\nThe first entry in the extensions array is returned by `mime.extension()`. E.g.\n\n```js\nmime.extension('text/x-some-format'); // => 'x-sf'\n```\n\n### mime.load(filepath)\n\nLoad mappings from an Apache \".types\" format file\n\n```js\nmime.load('./my_project.types');\n```\nThe .types file format is simple -  See the `types` dir for examples.\n/.npmignore\u0000/src/build.js\u0005G#!/usr/bin/env node\n\n'use strict';\n\nconst fs = require('fs');\nconst path = require('path');\nconst mimeScore = require('mime-score');\n\nlet db = require('mime-db');\nlet chalk = require('chalk');\n\nconst STANDARD_FACET_SCORE = 900;\n\nconst byExtension = {};\n\n// Clear out any conflict extensions in mime-db\nfor (let type in db) {\n  let entry = db[type];\n  entry.type = type;\n\n  if (!entry.extensions) continue;\n\n  entry.extensions.forEach(ext => {\n    if (ext in byExtension) {\n      const e0 = entry;\n      const e1 = byExtension[ext];\n      e0.pri = mimeScore(e0.type, e0.source);\n      e1.pri = mimeScore(e1.type, e1.source);\n\n      let drop = e0.pri < e1.pri ? e0 : e1;\n      let keep = e0.pri >= e1.pri ? e0 : e1;\n      drop.extensions = drop.extensions.filter(e => e !== ext);\n\n      console.log(`${ext}: Keeping ${chalk.green(keep.type)} (${keep.pri}), dropping ${chalk.red(drop.type)} (${drop.pri})`);\n    }\n    byExtension[ext] = entry;\n  });\n}\n\nfunction writeTypesFile(types, path) {\n  fs.writeFileSync(path, JSON.stringify(types));\n}\n\n// Segregate into standard and non-standard types based on facet per\n// https://tools.ietf.org/html/rfc6838#section-3.1\nconst types = {};\n\nObject.keys(db).sort().forEach(k => {\n  const entry = db[k];\n  types[entry.type] = entry.extensions;\n});\n\nwriteTypesFile(types, path.join(__dirname, '..', 'types.json'));\n/mime.js\nvar path = require('path');\nvar fs = require('fs');\n\nfunction Mime() {\n  // Map of extension -> mime type\n  this.types = Object.create(null);\n\n  // Map of mime type -> extension\n  this.extensions = Object.create(null);\n}\n\n/**\n * Define mimetype -> extension mappings.  Each key is a mime-type that maps\n * to an array of extensions associated with the type.  The first extension is\n * used as the default extension for the type.\n *\n * e.g. mime.define({'audio/ogg', ['oga', 'ogg', 'spx']});\n *\n * @param map (Object) type definitions\n */\nMime.prototype.define = function (map) {\n  for (var type in map) {\n    var exts = map[type];\n    for (var i = 0; i < exts.length; i++) {\n      if (process.env.DEBUG_MIME && this.types[exts[i]]) {\n        console.warn((this._loading || \"define()\").replace(/.*\\//, ''), 'changes \"' + exts[i] + '\" extension type from ' +\n          this.types[exts[i]] + ' to ' + type);\n      }\n\n      this.types[exts[i]] = type;\n    }\n\n    // Default extension is the first one we encounter\n    if (!this.extensions[type]) {\n      this.extensions[type] = exts[0];\n    }\n  }\n};\n\n/**\n * Load an Apache2-style \".types\" file\n *\n * This may be called multiple times (it's expected).  Where files declare\n * overlapping types/extensions, the last file wins.\n *\n * @param file (String) path of file to load.\n */\nMime.prototype.load = function(file) {\n  this._loading = file;\n  // Read file and split into lines\n  var map = {},\n      content = fs.readFileSync(file, 'ascii'),\n      lines = content.split(/[\\r\\n]+/);\n\n  lines.forEach(function(line) {\n    // Clean up whitespace/comments, and split into fields\n    var fields = line.replace(/\\s*#.*|^\\s*|\\s*$/g, '').split(/\\s+/);\n    map[fields.shift()] = fields;\n  });\n\n  this.define(map);\n\n  this._loading = null;\n};\n\n/**\n * Lookup a mime type based on extension\n */\nMime.prototype.lookup = function(path, fallback) {\n  var ext = path.replace(/^.*[\\.\\/\\\\]/, '').toLowerCase();\n\n  return this.types[ext] || fallback || this.default_type;\n};\n\n/**\n * Return file extension associated with a mime type\n */\nMime.prototype.extension = function(mimeType) {\n  var type = mimeType.match(/^\\s*([^;\\s]*)(?:;|\\s|$)/)[1].toLowerCase();\n  return this.extensions[type];\n};\n\n// Default instance\nvar mime = new Mime();\n\n// Define built-in types\nmime.define(require('./types.json'));\n\n// Default type\nmime.default_type = mime.lookup('bin');\n\n//\n// Additional API specific to the default instance\n//\n\nmime.Mime = Mime;\n\n/**\n * Lookup a charset based on mime type.\n */\nmime.charsets = {\n  lookup: function(mimeType, fallback) {\n    // Assume text types are utf8\n    return (/^text\\/|^application\\/(javascript|json)/).test(mimeType) ? 'UTF-8' : fallback;\n  }\n};\n\nmodule.exports = mime;\n/package.json\u0003{\n  \"author\": {\n    \"name\": \"Robert Kieffer\",\n    \"url\": \"http://github.com/broofa\",\n    \"email\": \"robert@broofa.com\"\n  },\n  \"bin\": {\n    \"mime\": \"cli.js\"\n  },\n  \"engines\": {\n    \"node\": \">=4\"\n  },\n  \"contributors\": [\n    {\n      \"name\": \"Benjamin Thomas\",\n      \"url\": \"http://github.com/bentomas\",\n      \"email\": \"benjamin@benjaminthomas.org\"\n    }\n  ],\n  \"description\": \"A comprehensive library for mime-type mapping\",\n  \"license\": \"MIT\",\n  \"dependencies\": {},\n  \"devDependencies\": {\n    \"github-release-notes\": \"0.13.1\",\n    \"mime-db\": \"1.31.0\",\n    \"mime-score\": \"1.1.0\"\n  },\n  \"scripts\": {\n    \"prepare\": \"node src/build.js\",\n    \"changelog\": \"gren changelog --tags=all --generate --override\",\n    \"test\": \"node src/test.js\"\n  },\n  \"keywords\": [\n    \"util\",\n    \"mime\"\n  ],\n  \"main\": \"mime.js\",\n  \"name\": \"mime\",\n  \"repository\": {\n    \"url\": \"https://github.com/broofa/node-mime\",\n    \"type\": \"git\"\n  },\n  \"version\": \"1.6.0\"\n}\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/bWltaWMtZm5AMi4xLjA=",
    "content": "/index.js\u0001,'use strict';\n\nconst mimicFn = (to, from) => {\n\tfor (const prop of Reflect.ownKeys(from)) {\n\t\tObject.defineProperty(to, prop, Object.getOwnPropertyDescriptor(from, prop));\n\t}\n\n\treturn to;\n};\n\nmodule.exports = mimicFn;\n// TODO: Remove this for the next major release\nmodule.exports.default = mimicFn;\n/index.d.ts\u0004declare const mimicFn: {\n\t/**\n\tMake a function mimic another one. It will copy over the properties `name`, `length`, `displayName`, and any custom properties you may have set.\n\n\t@param to - Mimicking function.\n\t@param from - Function to mimic.\n\t@returns The modified `to` function.\n\n\t@example\n\t```\n\timport mimicFn = require('mimic-fn');\n\n\tfunction foo() {}\n\tfoo.unicorn = '🦄';\n\n\tfunction wrapper() {\n\t\treturn foo();\n\t}\n\n\tconsole.log(wrapper.name);\n\t//=> 'wrapper'\n\n\tmimicFn(wrapper, foo);\n\n\tconsole.log(wrapper.name);\n\t//=> 'foo'\n\n\tconsole.log(wrapper.unicorn);\n\t//=> '🦄'\n\t```\n\t*/\n\t<\n\t\tArgumentsType extends unknown[],\n\t\tReturnType,\n\t\tFunctionType extends (...arguments: ArgumentsType) => ReturnType\n\t>(\n\t\tto: (...arguments: ArgumentsType) => ReturnType,\n\t\tfrom: FunctionType\n\t): FunctionType;\n\n\t// TODO: Remove this for the next major release, refactor the whole definition to:\n\t// declare function mimicFn<\n\t//\tArgumentsType extends unknown[],\n\t//\tReturnType,\n\t//\tFunctionType extends (...arguments: ArgumentsType) => ReturnType\n\t// >(\n\t//\tto: (...arguments: ArgumentsType) => ReturnType,\n\t//\tfrom: FunctionType\n\t// ): FunctionType;\n\t// export = mimicFn;\n\tdefault: typeof mimicFn;\n};\n\nexport = mimicFn;\n/license\u0004UMIT License\n\nCopyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)\n\nPermission 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:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE 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.\n/readme.md\u0004# mimic-fn [![Build Status](https://travis-ci.org/sindresorhus/mimic-fn.svg?branch=master)](https://travis-ci.org/sindresorhus/mimic-fn)\n\n> Make a function mimic another one\n\nUseful when you wrap a function in another function and like to preserve the original name and other properties.\n\n\n## Install\n\n```\n$ npm install mimic-fn\n```\n\n\n## Usage\n\n```js\nconst mimicFn = require('mimic-fn');\n\nfunction foo() {}\nfoo.unicorn = '🦄';\n\nfunction wrapper() {\n\treturn foo();\n}\n\nconsole.log(wrapper.name);\n//=> 'wrapper'\n\nmimicFn(wrapper, foo);\n\nconsole.log(wrapper.name);\n//=> 'foo'\n\nconsole.log(wrapper.unicorn);\n//=> '🦄'\n```\n\n\n## API\n\nIt will copy over the properties `name`, `length`, `displayName`, and any custom properties you may have set.\n\n### mimicFn(to, from)\n\nModifies the `to` function and returns it.\n\n#### to\n\nType: `Function`\n\nMimicking function.\n\n#### from\n\nType: `Function`\n\nFunction to mimic.\n\n\n## Related\n\n- [rename-fn](https://github.com/sindresorhus/rename-fn) - Rename a function\n- [keep-func-props](https://github.com/ehmicky/keep-func-props) - Wrap a function without changing its name, length and other properties\n\n\n## License\n\nMIT © [Sindre Sorhus](https://sindresorhus.com)\n/package.json\u0002{\n\t\"name\": \"mimic-fn\",\n\t\"version\": \"2.1.0\",\n\t\"description\": \"Make a function mimic another one\",\n\t\"license\": \"MIT\",\n\t\"repository\": \"sindresorhus/mimic-fn\",\n\t\"author\": {\n\t\t\"name\": \"Sindre Sorhus\",\n\t\t\"email\": \"sindresorhus@gmail.com\",\n\t\t\"url\": \"sindresorhus.com\"\n\t},\n\t\"engines\": {\n\t\t\"node\": \">=6\"\n\t},\n\t\"scripts\": {\n\t\t\"test\": \"xo && ava && tsd\"\n\t},\n\t\"files\": [\n\t\t\"index.js\",\n\t\t\"index.d.ts\"\n\t],\n\t\"keywords\": [\n\t\t\"function\",\n\t\t\"mimic\",\n\t\t\"imitate\",\n\t\t\"rename\",\n\t\t\"copy\",\n\t\t\"inherit\",\n\t\t\"properties\",\n\t\t\"name\",\n\t\t\"func\",\n\t\t\"fn\",\n\t\t\"set\",\n\t\t\"infer\",\n\t\t\"change\"\n\t],\n\t\"devDependencies\": {\n\t\t\"ava\": \"^1.4.1\",\n\t\t\"tsd\": \"^0.7.1\",\n\t\t\"xo\": \"^0.24.0\"\n\t}\n}\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/bWltaWMtZm5ANC4wLjA=",
    "content": "/index.js\u000bWconst copyProperty = (to, from, property, ignoreNonConfigurable) => {\n\t// `Function#length` should reflect the parameters of `to` not `from` since we keep its body.\n\t// `Function#prototype` is non-writable and non-configurable so can never be modified.\n\tif (property === 'length' || property === 'prototype') {\n\t\treturn;\n\t}\n\n\t// `Function#arguments` and `Function#caller` should not be copied. They were reported to be present in `Reflect.ownKeys` for some devices in React Native (#41), so we explicitly ignore them here.\n\tif (property === 'arguments' || property === 'caller') {\n\t\treturn;\n\t}\n\n\tconst toDescriptor = Object.getOwnPropertyDescriptor(to, property);\n\tconst fromDescriptor = Object.getOwnPropertyDescriptor(from, property);\n\n\tif (!canCopyProperty(toDescriptor, fromDescriptor) && ignoreNonConfigurable) {\n\t\treturn;\n\t}\n\n\tObject.defineProperty(to, property, fromDescriptor);\n};\n\n// `Object.defineProperty()` throws if the property exists, is not configurable and either:\n// - one its descriptors is changed\n// - it is non-writable and its value is changed\nconst canCopyProperty = function (toDescriptor, fromDescriptor) {\n\treturn toDescriptor === undefined || toDescriptor.configurable || (\n\t\ttoDescriptor.writable === fromDescriptor.writable &&\n\t\ttoDescriptor.enumerable === fromDescriptor.enumerable &&\n\t\ttoDescriptor.configurable === fromDescriptor.configurable &&\n\t\t(toDescriptor.writable || toDescriptor.value === fromDescriptor.value)\n\t);\n};\n\nconst changePrototype = (to, from) => {\n\tconst fromPrototype = Object.getPrototypeOf(from);\n\tif (fromPrototype === Object.getPrototypeOf(to)) {\n\t\treturn;\n\t}\n\n\tObject.setPrototypeOf(to, fromPrototype);\n};\n\nconst wrappedToString = (withName, fromBody) => `/* Wrapped ${withName}*/\\n${fromBody}`;\n\nconst toStringDescriptor = Object.getOwnPropertyDescriptor(Function.prototype, 'toString');\nconst toStringName = Object.getOwnPropertyDescriptor(Function.prototype.toString, 'name');\n\n// We call `from.toString()` early (not lazily) to ensure `from` can be garbage collected.\n// We use `bind()` instead of a closure for the same reason.\n// Calling `from.toString()` early also allows caching it in case `to.toString()` is called several times.\nconst changeToString = (to, from, name) => {\n\tconst withName = name === '' ? '' : `with ${name.trim()}() `;\n\tconst newToString = wrappedToString.bind(null, withName, from.toString());\n\t// Ensure `to.toString.toString` is non-enumerable and has the same `same`\n\tObject.defineProperty(newToString, 'name', toStringName);\n\tObject.defineProperty(to, 'toString', {...toStringDescriptor, value: newToString});\n};\n\nexport default function mimicFunction(to, from, {ignoreNonConfigurable = false} = {}) {\n\tconst {name} = to;\n\n\tfor (const property of Reflect.ownKeys(from)) {\n\t\tcopyProperty(to, from, property, ignoreNonConfigurable);\n\t}\n\n\tchangePrototype(to, from);\n\tchangeToString(to, from, name);\n\n\treturn to;\n}\n/license\u0004]MIT License\n\nCopyright (c) Sindre Sorhus <sindresorhus@gmail.com> (https://sindresorhus.com)\n\nPermission 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:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE 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.\n/package.json\u0002{\n\t\"name\": \"mimic-fn\",\n\t\"version\": \"4.0.0\",\n\t\"description\": \"Make a function mimic another one\",\n\t\"license\": \"MIT\",\n\t\"repository\": \"sindresorhus/mimic-fn\",\n\t\"funding\": \"https://github.com/sponsors/sindresorhus\",\n\t\"author\": {\n\t\t\"name\": \"Sindre Sorhus\",\n\t\t\"email\": \"sindresorhus@gmail.com\",\n\t\t\"url\": \"https://sindresorhus.com\"\n\t},\n\t\"type\": \"module\",\n\t\"exports\": \"./index.js\",\n\t\"engines\": {\n\t\t\"node\": \">=12\"\n\t},\n\t\"scripts\": {\n\t\t\"test\": \"xo && ava && tsd\"\n\t},\n\t\"files\": [\n\t\t\"index.js\",\n\t\t\"index.d.ts\"\n\t],\n\t\"keywords\": [\n\t\t\"function\",\n\t\t\"mimic\",\n\t\t\"imitate\",\n\t\t\"rename\",\n\t\t\"copy\",\n\t\t\"inherit\",\n\t\t\"properties\",\n\t\t\"name\",\n\t\t\"func\",\n\t\t\"fn\",\n\t\t\"set\",\n\t\t\"infer\",\n\t\t\"change\"\n\t],\n\t\"devDependencies\": {\n\t\t\"ava\": \"^3.15.0\",\n\t\t\"tsd\": \"^0.14.0\",\n\t\t\"xo\": \"^0.38.2\"\n\t}\n}\n/readme.md\b%<img src=\"media/logo.svg\" alt=\"mimic-fn\" width=\"400\">\n<br>\n\n> Make a function mimic another one\n\nUseful when you wrap a function in another function and like to preserve the original name and other properties.\n\n## Install\n\n```\n$ npm install mimic-fn\n```\n\n## Usage\n\n```js\nimport mimicFunction from 'mimic-fn';\n\nfunction foo() {}\nfoo.unicorn = '🦄';\n\nfunction wrapper() {\n\treturn foo();\n}\n\nconsole.log(wrapper.name);\n//=> 'wrapper'\n\nmimicFunction(wrapper, foo);\n\nconsole.log(wrapper.name);\n//=> 'foo'\n\nconsole.log(wrapper.unicorn);\n//=> '🦄'\n\nconsole.log(String(wrapper));\n//=> '/* Wrapped with wrapper() */\\nfunction foo() {}'\n```\n\n\n## API\n\n### mimicFunction(to, from, options?)\n\nModifies the `to` function to mimic the `from` function. Returns the `to` function.\n\n`name`, `displayName`, and any other properties of `from` are copied. The `length` property is not copied. Prototype, class, and inherited properties are copied.\n\n`to.toString()` will return the same as `from.toString()` but prepended with a `Wrapped with to()` comment.\n\n#### to\n\nType: `Function`\n\nMimicking function.\n\n#### from\n\nType: `Function`\n\nFunction to mimic.\n\n#### options\n\nType: `object`\n\n##### ignoreNonConfigurable\n\nType: `boolean`\\\nDefault: `false`\n\nSkip modifying [non-configurable properties](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptor#Description) instead of throwing an error.\n\n## Related\n\n- [rename-fn](https://github.com/sindresorhus/rename-fn) - Rename a function\n- [keep-func-props](https://github.com/ehmicky/keep-func-props) - Wrap a function without changing its name and other properties\n\n---\n\n<div align=\"center\">\n\t<b>\n\t\t<a href=\"https://tidelift.com/subscription/pkg/npm-mimic-fn?utm_source=npm-mimic-fn&utm_medium=referral&utm_campaign=readme\">Get professional support for this package with a Tidelift subscription</a>\n\t</b>\n\t<br>\n\t<sub>\n\t\tTidelift helps make open source sustainable for maintainers while giving companies<br>assurances about security, maintenance, and licensing for their dependencies.\n\t</sub>\n</div>\n/index.d.ts\u0005)export interface Options {\n\t/**\n\tSkip modifying [non-configurable properties](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptor#Description) instead of throwing an error.\n\n\t@default false\n\t*/\n\treadonly ignoreNonConfigurable?: boolean;\n}\n\n/**\nModifies the `to` function to mimic the `from` function. Returns the `to` function.\n\n`name`, `displayName`, and any other properties of `from` are copied. The `length` property is not copied. Prototype, class, and inherited properties are copied.\n\n`to.toString()` will return the same as `from.toString()` but prepended with a `Wrapped with to()` comment.\n\n@param to - Mimicking function.\n@param from - Function to mimic.\n@returns The modified `to` function.\n\n@example\n```\nimport mimicFunction from 'mimic-fn';\n\nfunction foo() {}\nfoo.unicorn = '🦄';\n\nfunction wrapper() {\n\treturn foo();\n}\n\nconsole.log(wrapper.name);\n//=> 'wrapper'\n\nmimicFunction(wrapper, foo);\n\nconsole.log(wrapper.name);\n//=> 'foo'\n\nconsole.log(wrapper.unicorn);\n//=> '🦄'\n```\n*/\nexport default function mimicFunction<\n\tArgumentsType extends unknown[],\n\tReturnType,\n\tFunctionType extends (...arguments: ArgumentsType) => ReturnType\n>(\n\tto: (...arguments: ArgumentsType) => ReturnType,\n\tfrom: FunctionType,\n\toptions?: Options,\n): FunctionType;\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/bWluaW1hdGNoQDMuMS4y",
    "content": "/package.json\u0002{\n  \"author\": \"Isaac Z. Schlueter <i@izs.me> (http://blog.izs.me)\",\n  \"name\": \"minimatch\",\n  \"description\": \"a glob matcher in javascript\",\n  \"version\": \"3.1.2\",\n  \"publishConfig\": {\n    \"tag\": \"v3-legacy\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git://github.com/isaacs/minimatch.git\"\n  },\n  \"main\": \"minimatch.js\",\n  \"scripts\": {\n    \"test\": \"tap\",\n    \"preversion\": \"npm test\",\n    \"postversion\": \"npm publish\",\n    \"postpublish\": \"git push origin --all; git push origin --tags\"\n  },\n  \"engines\": {\n    \"node\": \"*\"\n  },\n  \"dependencies\": {\n    \"brace-expansion\": \"^1.1.7\"\n  },\n  \"devDependencies\": {\n    \"tap\": \"^15.1.6\"\n  },\n  \"license\": \"ISC\",\n  \"files\": [\n    \"minimatch.js\"\n  ]\n}\n/README.md\u001c\u0003# minimatch\n\nA minimal matching utility.\n\n[![Build Status](https://travis-ci.org/isaacs/minimatch.svg?branch=master)](http://travis-ci.org/isaacs/minimatch)\n\n\nThis is the matching library used internally by npm.\n\nIt works by converting glob expressions into JavaScript `RegExp`\nobjects.\n\n## Usage\n\n```javascript\nvar minimatch = require(\"minimatch\")\n\nminimatch(\"bar.foo\", \"*.foo\") // true!\nminimatch(\"bar.foo\", \"*.bar\") // false!\nminimatch(\"bar.foo\", \"*.+(bar|foo)\", { debug: true }) // true, and noisy!\n```\n\n## Features\n\nSupports these glob features:\n\n* Brace Expansion\n* Extended glob matching\n* \"Globstar\" `**` matching\n\nSee:\n\n* `man sh`\n* `man bash`\n* `man 3 fnmatch`\n* `man 5 gitignore`\n\n## Minimatch Class\n\nCreate a minimatch object by instantiating the `minimatch.Minimatch` class.\n\n```javascript\nvar Minimatch = require(\"minimatch\").Minimatch\nvar mm = new Minimatch(pattern, options)\n```\n\n### Properties\n\n* `pattern` The original pattern the minimatch object represents.\n* `options` The options supplied to the constructor.\n* `set` A 2-dimensional array of regexp or string expressions.\n  Each row in the\n  array corresponds to a brace-expanded pattern.  Each item in the row\n  corresponds to a single path-part.  For example, the pattern\n  `{a,b/c}/d` would expand to a set of patterns like:\n\n        [ [ a, d ]\n        , [ b, c, d ] ]\n\n    If a portion of the pattern doesn't have any \"magic\" in it\n    (that is, it's something like `\"foo\"` rather than `fo*o?`), then it\n    will be left as a string rather than converted to a regular\n    expression.\n\n* `regexp` Created by the `makeRe` method.  A single regular expression\n  expressing the entire pattern.  This is useful in cases where you wish\n  to use the pattern somewhat like `fnmatch(3)` with `FNM_PATH` enabled.\n* `negate` True if the pattern is negated.\n* `comment` True if the pattern is a comment.\n* `empty` True if the pattern is `\"\"`.\n\n### Methods\n\n* `makeRe` Generate the `regexp` member if necessary, and return it.\n  Will return `false` if the pattern is invalid.\n* `match(fname)` Return true if the filename matches the pattern, or\n  false otherwise.\n* `matchOne(fileArray, patternArray, partial)` Take a `/`-split\n  filename, and match it against a single row in the `regExpSet`.  This\n  method is mainly for internal use, but is exposed so that it can be\n  used by a glob-walker that needs to avoid excessive filesystem calls.\n\nAll other methods are internal, and will be called as necessary.\n\n### minimatch(path, pattern, options)\n\nMain export.  Tests a path against the pattern using the options.\n\n```javascript\nvar isJS = minimatch(file, \"*.js\", { matchBase: true })\n```\n\n### minimatch.filter(pattern, options)\n\nReturns a function that tests its\nsupplied argument, suitable for use with `Array.filter`.  Example:\n\n```javascript\nvar javascripts = fileList.filter(minimatch.filter(\"*.js\", {matchBase: true}))\n```\n\n### minimatch.match(list, pattern, options)\n\nMatch against the list of\nfiles, in the style of fnmatch or glob.  If nothing is matched, and\noptions.nonull is set, then return a list containing the pattern itself.\n\n```javascript\nvar javascripts = minimatch.match(fileList, \"*.js\", {matchBase: true}))\n```\n\n### minimatch.makeRe(pattern, options)\n\nMake a regular expression object from the pattern.\n\n## Options\n\nAll options are `false` by default.\n\n### debug\n\nDump a ton of stuff to stderr.\n\n### nobrace\n\nDo not expand `{a,b}` and `{1..3}` brace sets.\n\n### noglobstar\n\nDisable `**` matching against multiple folder names.\n\n### dot\n\nAllow patterns to match filenames starting with a period, even if\nthe pattern does not explicitly have a period in that spot.\n\nNote that by default, `a/**/b` will **not** match `a/.d/b`, unless `dot`\nis set.\n\n### noext\n\nDisable \"extglob\" style patterns like `+(a|b)`.\n\n### nocase\n\nPerform a case-insensitive match.\n\n### nonull\n\nWhen a match is not found by `minimatch.match`, return a list containing\nthe pattern itself if this option is set.  When not set, an empty list\nis returned if there are no matches.\n\n### matchBase\n\nIf set, then patterns without slashes will be matched\nagainst the basename of the path if it contains slashes.  For example,\n`a?b` would match the path `/xyz/123/acb`, but not `/xyz/acb/123`.\n\n### nocomment\n\nSuppress the behavior of treating `#` at the start of a pattern as a\ncomment.\n\n### nonegate\n\nSuppress the behavior of treating a leading `!` character as negation.\n\n### flipNegate\n\nReturns from negate expressions the same as if they were not negated.\n(Ie, true on a hit, false on a miss.)\n\n### partial\n\nCompare a partial path to a pattern.  As long as the parts of the path that\nare present are not contradicted by the pattern, it will be treated as a\nmatch.  This is useful in applications where you're walking through a\nfolder structure, and don't yet have the full path, but want to ensure that\nyou do not walk down paths that can never be a match.\n\nFor example,\n\n```js\nminimatch('/a/b', '/a/*/c/d', { partial: true })  // true, might be /a/b/c/d\nminimatch('/a/b', '/**/d', { partial: true })     // true, might be /a/b/.../d\nminimatch('/x/y/z', '/a/**/z', { partial: true }) // false, because x !== a\n```\n\n### allowWindowsEscape\n\nWindows path separator `\\` is by default converted to `/`, which\nprohibits the usage of `\\` as a escape character. This flag skips that\nbehavior and allows using the escape character.\n\n## Comparisons to other fnmatch/glob implementations\n\nWhile strict compliance with the existing standards is a worthwhile\ngoal, some discrepancies exist between minimatch and other\nimplementations, and are intentional.\n\nIf the pattern starts with a `!` character, then it is negated.  Set the\n`nonegate` flag to suppress this behavior, and treat leading `!`\ncharacters normally.  This is perhaps relevant if you wish to start the\npattern with a negative extglob pattern like `!(a|B)`.  Multiple `!`\ncharacters at the start of a pattern will negate the pattern multiple\ntimes.\n\nIf a pattern starts with `#`, then it is treated as a comment, and\nwill not match anything.  Use `\\#` to match a literal `#` at the\nstart of a line, or set the `nocomment` flag to suppress this behavior.\n\nThe double-star character `**` is supported by default, unless the\n`noglobstar` flag is set.  This is supported in the manner of bsdglob\nand bash 4.1, where `**` only has special significance if it is the only\nthing in a path part.  That is, `a/**/b` will match `a/x/y/b`, but\n`a/**b` will not.\n\nIf an escaped pattern has no matches, and the `nonull` flag is set,\nthen minimatch.match returns the pattern as-provided, rather than\ninterpreting the character escapes.  For example,\n`minimatch.match([], \"\\\\*a\\\\?\")` will return `\"\\\\*a\\\\?\"` rather than\n`\"*a?\"`.  This is akin to setting the `nullglob` option in bash, except\nthat it does not resolve escaped pattern characters.\n\nIf brace expansion is not disabled, then it is performed before any\nother interpretation of the glob pattern.  Thus, a pattern like\n`+(a|{b),c)}`, which would not be valid in bash or zsh, is expanded\n**first** into the set of `+(a|b)` and `+(a|c)`, and those patterns are\nchecked for validity.  Since those two are valid, matching proceeds.\n/minimatch.jsfmodule.exports = minimatch\nminimatch.Minimatch = Minimatch\n\nvar path = (function () { try { return require('path') } catch (e) {}}()) || {\n  sep: '/'\n}\nminimatch.sep = path.sep\n\nvar GLOBSTAR = minimatch.GLOBSTAR = Minimatch.GLOBSTAR = {}\nvar expand = require('brace-expansion')\n\nvar plTypes = {\n  '!': { open: '(?:(?!(?:', close: '))[^/]*?)'},\n  '?': { open: '(?:', close: ')?' },\n  '+': { open: '(?:', close: ')+' },\n  '*': { open: '(?:', close: ')*' },\n  '@': { open: '(?:', close: ')' }\n}\n\n// any single thing other than /\n// don't need to escape / when using new RegExp()\nvar qmark = '[^/]'\n\n// * => any number of characters\nvar star = qmark + '*?'\n\n// ** when dots are allowed.  Anything goes, except .. and .\n// not (^ or / followed by one or two dots followed by $ or /),\n// followed by anything, any number of times.\nvar twoStarDot = '(?:(?!(?:\\\\\\/|^)(?:\\\\.{1,2})($|\\\\\\/)).)*?'\n\n// not a ^ or / followed by a dot,\n// followed by anything, any number of times.\nvar twoStarNoDot = '(?:(?!(?:\\\\\\/|^)\\\\.).)*?'\n\n// characters that need to be escaped in RegExp.\nvar reSpecials = charSet('().*{}+?[]^$\\\\!')\n\n// \"abc\" -> { a:true, b:true, c:true }\nfunction charSet (s) {\n  return s.split('').reduce(function (set, c) {\n    set[c] = true\n    return set\n  }, {})\n}\n\n// normalizes slashes.\nvar slashSplit = /\\/+/\n\nminimatch.filter = filter\nfunction filter (pattern, options) {\n  options = options || {}\n  return function (p, i, list) {\n    return minimatch(p, pattern, options)\n  }\n}\n\nfunction ext (a, b) {\n  b = b || {}\n  var t = {}\n  Object.keys(a).forEach(function (k) {\n    t[k] = a[k]\n  })\n  Object.keys(b).forEach(function (k) {\n    t[k] = b[k]\n  })\n  return t\n}\n\nminimatch.defaults = function (def) {\n  if (!def || typeof def !== 'object' || !Object.keys(def).length) {\n    return minimatch\n  }\n\n  var orig = minimatch\n\n  var m = function minimatch (p, pattern, options) {\n    return orig(p, pattern, ext(def, options))\n  }\n\n  m.Minimatch = function Minimatch (pattern, options) {\n    return new orig.Minimatch(pattern, ext(def, options))\n  }\n  m.Minimatch.defaults = function defaults (options) {\n    return orig.defaults(ext(def, options)).Minimatch\n  }\n\n  m.filter = function filter (pattern, options) {\n    return orig.filter(pattern, ext(def, options))\n  }\n\n  m.defaults = function defaults (options) {\n    return orig.defaults(ext(def, options))\n  }\n\n  m.makeRe = function makeRe (pattern, options) {\n    return orig.makeRe(pattern, ext(def, options))\n  }\n\n  m.braceExpand = function braceExpand (pattern, options) {\n    return orig.braceExpand(pattern, ext(def, options))\n  }\n\n  m.match = function (list, pattern, options) {\n    return orig.match(list, pattern, ext(def, options))\n  }\n\n  return m\n}\n\nMinimatch.defaults = function (def) {\n  return minimatch.defaults(def).Minimatch\n}\n\nfunction minimatch (p, pattern, options) {\n  assertValidPattern(pattern)\n\n  if (!options) options = {}\n\n  // shortcut: comments match nothing.\n  if (!options.nocomment && pattern.charAt(0) === '#') {\n    return false\n  }\n\n  return new Minimatch(pattern, options).match(p)\n}\n\nfunction Minimatch (pattern, options) {\n  if (!(this instanceof Minimatch)) {\n    return new Minimatch(pattern, options)\n  }\n\n  assertValidPattern(pattern)\n\n  if (!options) options = {}\n\n  pattern = pattern.trim()\n\n  // windows support: need to use /, not \\\n  if (!options.allowWindowsEscape && path.sep !== '/') {\n    pattern = pattern.split(path.sep).join('/')\n  }\n\n  this.options = options\n  this.set = []\n  this.pattern = pattern\n  this.regexp = null\n  this.negate = false\n  this.comment = false\n  this.empty = false\n  this.partial = !!options.partial\n\n  // make the set of regexps etc.\n  this.make()\n}\n\nMinimatch.prototype.debug = function () {}\n\nMinimatch.prototype.make = make\nfunction make () {\n  var pattern = this.pattern\n  var options = this.options\n\n  // empty patterns and comments match nothing.\n  if (!options.nocomment && pattern.charAt(0) === '#') {\n    this.comment = true\n    return\n  }\n  if (!pattern) {\n    this.empty = true\n    return\n  }\n\n  // step 1: figure out negation, etc.\n  this.parseNegate()\n\n  // step 2: expand braces\n  var set = this.globSet = this.braceExpand()\n\n  if (options.debug) this.debug = function debug() { console.error.apply(console, arguments) }\n\n  this.debug(this.pattern, set)\n\n  // step 3: now we have a set, so turn each one into a series of path-portion\n  // matching patterns.\n  // These will be regexps, except in the case of \"**\", which is\n  // set to the GLOBSTAR object for globstar behavior,\n  // and will not contain any / characters\n  set = this.globParts = set.map(function (s) {\n    return s.split(slashSplit)\n  })\n\n  this.debug(this.pattern, set)\n\n  // glob --> regexps\n  set = set.map(function (s, si, set) {\n    return s.map(this.parse, this)\n  }, this)\n\n  this.debug(this.pattern, set)\n\n  // filter out everything that didn't compile properly.\n  set = set.filter(function (s) {\n    return s.indexOf(false) === -1\n  })\n\n  this.debug(this.pattern, set)\n\n  this.set = set\n}\n\nMinimatch.prototype.parseNegate = parseNegate\nfunction parseNegate () {\n  var pattern = this.pattern\n  var negate = false\n  var options = this.options\n  var negateOffset = 0\n\n  if (options.nonegate) return\n\n  for (var i = 0, l = pattern.length\n    ; i < l && pattern.charAt(i) === '!'\n    ; i++) {\n    negate = !negate\n    negateOffset++\n  }\n\n  if (negateOffset) this.pattern = pattern.substr(negateOffset)\n  this.negate = negate\n}\n\n// Brace expansion:\n// a{b,c}d -> abd acd\n// a{b,}c -> abc ac\n// a{0..3}d -> a0d a1d a2d a3d\n// a{b,c{d,e}f}g -> abg acdfg acefg\n// a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg\n//\n// Invalid sets are not expanded.\n// a{2..}b -> a{2..}b\n// a{b}c -> a{b}c\nminimatch.braceExpand = function (pattern, options) {\n  return braceExpand(pattern, options)\n}\n\nMinimatch.prototype.braceExpand = braceExpand\n\nfunction braceExpand (pattern, options) {\n  if (!options) {\n    if (this instanceof Minimatch) {\n      options = this.options\n    } else {\n      options = {}\n    }\n  }\n\n  pattern = typeof pattern === 'undefined'\n    ? this.pattern : pattern\n\n  assertValidPattern(pattern)\n\n  // Thanks to Yeting Li <https://github.com/yetingli> for\n  // improving this regexp to avoid a ReDOS vulnerability.\n  if (options.nobrace || !/\\{(?:(?!\\{).)*\\}/.test(pattern)) {\n    // shortcut. no need to expand.\n    return [pattern]\n  }\n\n  return expand(pattern)\n}\n\nvar MAX_PATTERN_LENGTH = 1024 * 64\nvar assertValidPattern = function (pattern) {\n  if (typeof pattern !== 'string') {\n    throw new TypeError('invalid pattern')\n  }\n\n  if (pattern.length > MAX_PATTERN_LENGTH) {\n    throw new TypeError('pattern is too long')\n  }\n}\n\n// parse a component of the expanded set.\n// At this point, no pattern may contain \"/\" in it\n// so we're going to return a 2d array, where each entry is the full\n// pattern, split on '/', and then turned into a regular expression.\n// A regexp is made at the end which joins each array with an\n// escaped /, and another full one which joins each regexp with |.\n//\n// Following the lead of Bash 4.1, note that \"**\" only has special meaning\n// when it is the *only* thing in a path portion.  Otherwise, any series\n// of * is equivalent to a single *.  Globstar behavior is enabled by\n// default, and can be disabled by setting options.noglobstar.\nMinimatch.prototype.parse = parse\nvar SUBPARSE = {}\nfunction parse (pattern, isSub) {\n  assertValidPattern(pattern)\n\n  var options = this.options\n\n  // shortcuts\n  if (pattern === '**') {\n    if (!options.noglobstar)\n      return GLOBSTAR\n    else\n      pattern = '*'\n  }\n  if (pattern === '') return ''\n\n  var re = ''\n  var hasMagic = !!options.nocase\n  var escaping = false\n  // ? => one single character\n  var patternListStack = []\n  var negativeLists = []\n  var stateChar\n  var inClass = false\n  var reClassStart = -1\n  var classStart = -1\n  // . and .. never match anything that doesn't start with .,\n  // even when options.dot is set.\n  var patternStart = pattern.charAt(0) === '.' ? '' // anything\n  // not (start or / followed by . or .. followed by / or end)\n  : options.dot ? '(?!(?:^|\\\\\\/)\\\\.{1,2}(?:$|\\\\\\/))'\n  : '(?!\\\\.)'\n  var self = this\n\n  function clearStateChar () {\n    if (stateChar) {\n      // we had some state-tracking character\n      // that wasn't consumed by this pass.\n      switch (stateChar) {\n        case '*':\n          re += star\n          hasMagic = true\n        break\n        case '?':\n          re += qmark\n          hasMagic = true\n        break\n        default:\n          re += '\\\\' + stateChar\n        break\n      }\n      self.debug('clearStateChar %j %j', stateChar, re)\n      stateChar = false\n    }\n  }\n\n  for (var i = 0, len = pattern.length, c\n    ; (i < len) && (c = pattern.charAt(i))\n    ; i++) {\n    this.debug('%s\\t%s %s %j', pattern, i, re, c)\n\n    // skip over any that are escaped.\n    if (escaping && reSpecials[c]) {\n      re += '\\\\' + c\n      escaping = false\n      continue\n    }\n\n    switch (c) {\n      /* istanbul ignore next */\n      case '/': {\n        // completely not allowed, even escaped.\n        // Should already be path-split by now.\n        return false\n      }\n\n      case '\\\\':\n        clearStateChar()\n        escaping = true\n      continue\n\n      // the various stateChar values\n      // for the \"extglob\" stuff.\n      case '?':\n      case '*':\n      case '+':\n      case '@':\n      case '!':\n        this.debug('%s\\t%s %s %j <-- stateChar', pattern, i, re, c)\n\n        // all of those are literals inside a class, except that\n        // the glob [!a] means [^a] in regexp\n        if (inClass) {\n          this.debug('  in class')\n          if (c === '!' && i === classStart + 1) c = '^'\n          re += c\n          continue\n        }\n\n        // if we already have a stateChar, then it means\n        // that there was something like ** or +? in there.\n        // Handle the stateChar, then proceed with this one.\n        self.debug('call clearStateChar %j', stateChar)\n        clearStateChar()\n        stateChar = c\n        // if extglob is disabled, then +(asdf|foo) isn't a thing.\n        // just clear the statechar *now*, rather than even diving into\n        // the patternList stuff.\n        if (options.noext) clearStateChar()\n      continue\n\n      case '(':\n        if (inClass) {\n          re += '('\n          continue\n        }\n\n        if (!stateChar) {\n          re += '\\\\('\n          continue\n        }\n\n        patternListStack.push({\n          type: stateChar,\n          start: i - 1,\n          reStart: re.length,\n          open: plTypes[stateChar].open,\n          close: plTypes[stateChar].close\n        })\n        // negation is (?:(?!js)[^/]*)\n        re += stateChar === '!' ? '(?:(?!(?:' : '(?:'\n        this.debug('plType %j %j', stateChar, re)\n        stateChar = false\n      continue\n\n      case ')':\n        if (inClass || !patternListStack.length) {\n          re += '\\\\)'\n          continue\n        }\n\n        clearStateChar()\n        hasMagic = true\n        var pl = patternListStack.pop()\n        // negation is (?:(?!js)[^/]*)\n        // The others are (?:<pattern>)<type>\n        re += pl.close\n        if (pl.type === '!') {\n          negativeLists.push(pl)\n        }\n        pl.reEnd = re.length\n      continue\n\n      case '|':\n        if (inClass || !patternListStack.length || escaping) {\n          re += '\\\\|'\n          escaping = false\n          continue\n        }\n\n        clearStateChar()\n        re += '|'\n      continue\n\n      // these are mostly the same in regexp and glob\n      case '[':\n        // swallow any state-tracking char before the [\n        clearStateChar()\n\n        if (inClass) {\n          re += '\\\\' + c\n          continue\n        }\n\n        inClass = true\n        classStart = i\n        reClassStart = re.length\n        re += c\n      continue\n\n      case ']':\n        //  a right bracket shall lose its special\n        //  meaning and represent itself in\n        //  a bracket expression if it occurs\n        //  first in the list.  -- POSIX.2 2.8.3.2\n        if (i === classStart + 1 || !inClass) {\n          re += '\\\\' + c\n          escaping = false\n          continue\n        }\n\n        // handle the case where we left a class open.\n        // \"[z-a]\" is valid, equivalent to \"\\[z-a\\]\"\n        // split where the last [ was, make sure we don't have\n        // an invalid re. if so, re-walk the contents of the\n        // would-be class to re-translate any characters that\n        // were passed through as-is\n        // TODO: It would probably be faster to determine this\n        // without a try/catch and a new RegExp, but it's tricky\n        // to do safely.  For now, this is safe and works.\n        var cs = pattern.substring(classStart + 1, i)\n        try {\n          RegExp('[' + cs + ']')\n        } catch (er) {\n          // not a valid class!\n          var sp = this.parse(cs, SUBPARSE)\n          re = re.substr(0, reClassStart) + '\\\\[' + sp[0] + '\\\\]'\n          hasMagic = hasMagic || sp[1]\n          inClass = false\n          continue\n        }\n\n        // finish up the class.\n        hasMagic = true\n        inClass = false\n        re += c\n      continue\n\n      default:\n        // swallow any state char that wasn't consumed\n        clearStateChar()\n\n        if (escaping) {\n          // no need\n          escaping = false\n        } else if (reSpecials[c]\n          && !(c === '^' && inClass)) {\n          re += '\\\\'\n        }\n\n        re += c\n\n    } // switch\n  } // for\n\n  // handle the case where we left a class open.\n  // \"[abc\" is valid, equivalent to \"\\[abc\"\n  if (inClass) {\n    // split where the last [ was, and escape it\n    // this is a huge pita.  We now have to re-walk\n    // the contents of the would-be class to re-translate\n    // any characters that were passed through as-is\n    cs = pattern.substr(classStart + 1)\n    sp = this.parse(cs, SUBPARSE)\n    re = re.substr(0, reClassStart) + '\\\\[' + sp[0]\n    hasMagic = hasMagic || sp[1]\n  }\n\n  // handle the case where we had a +( thing at the *end*\n  // of the pattern.\n  // each pattern list stack adds 3 chars, and we need to go through\n  // and escape any | chars that were passed through as-is for the regexp.\n  // Go through and escape them, taking care not to double-escape any\n  // | chars that were already escaped.\n  for (pl = patternListStack.pop(); pl; pl = patternListStack.pop()) {\n    var tail = re.slice(pl.reStart + pl.open.length)\n    this.debug('setting tail', re, pl)\n    // maybe some even number of \\, then maybe 1 \\, followed by a |\n    tail = tail.replace(/((?:\\\\{2}){0,64})(\\\\?)\\|/g, function (_, $1, $2) {\n      if (!$2) {\n        // the | isn't already escaped, so escape it.\n        $2 = '\\\\'\n      }\n\n      // need to escape all those slashes *again*, without escaping the\n      // one that we need for escaping the | character.  As it works out,\n      // escaping an even number of slashes can be done by simply repeating\n      // it exactly after itself.  That's why this trick works.\n      //\n      // I am sorry that you have to see this.\n      return $1 + $1 + $2 + '|'\n    })\n\n    this.debug('tail=%j\\n   %s', tail, tail, pl, re)\n    var t = pl.type === '*' ? star\n      : pl.type === '?' ? qmark\n      : '\\\\' + pl.type\n\n    hasMagic = true\n    re = re.slice(0, pl.reStart) + t + '\\\\(' + tail\n  }\n\n  // handle trailing things that only matter at the very end.\n  clearStateChar()\n  if (escaping) {\n    // trailing \\\\\n    re += '\\\\\\\\'\n  }\n\n  // only need to apply the nodot start if the re starts with\n  // something that could conceivably capture a dot\n  var addPatternStart = false\n  switch (re.charAt(0)) {\n    case '[': case '.': case '(': addPatternStart = true\n  }\n\n  // Hack to work around lack of negative lookbehind in JS\n  // A pattern like: *.!(x).!(y|z) needs to ensure that a name\n  // like 'a.xyz.yz' doesn't match.  So, the first negative\n  // lookahead, has to look ALL the way ahead, to the end of\n  // the pattern.\n  for (var n = negativeLists.length - 1; n > -1; n--) {\n    var nl = negativeLists[n]\n\n    var nlBefore = re.slice(0, nl.reStart)\n    var nlFirst = re.slice(nl.reStart, nl.reEnd - 8)\n    var nlLast = re.slice(nl.reEnd - 8, nl.reEnd)\n    var nlAfter = re.slice(nl.reEnd)\n\n    nlLast += nlAfter\n\n    // Handle nested stuff like *(*.js|!(*.json)), where open parens\n    // mean that we should *not* include the ) in the bit that is considered\n    // \"after\" the negated section.\n    var openParensBefore = nlBefore.split('(').length - 1\n    var cleanAfter = nlAfter\n    for (i = 0; i < openParensBefore; i++) {\n      cleanAfter = cleanAfter.replace(/\\)[+*?]?/, '')\n    }\n    nlAfter = cleanAfter\n\n    var dollar = ''\n    if (nlAfter === '' && isSub !== SUBPARSE) {\n      dollar = '$'\n    }\n    var newRe = nlBefore + nlFirst + nlAfter + dollar + nlLast\n    re = newRe\n  }\n\n  // if the re is not \"\" at this point, then we need to make sure\n  // it doesn't match against an empty path part.\n  // Otherwise a/* will match a/, which it should not.\n  if (re !== '' && hasMagic) {\n    re = '(?=.)' + re\n  }\n\n  if (addPatternStart) {\n    re = patternStart + re\n  }\n\n  // parsing just a piece of a larger pattern.\n  if (isSub === SUBPARSE) {\n    return [re, hasMagic]\n  }\n\n  // skip the regexp for non-magical patterns\n  // unescape anything in it, though, so that it'll be\n  // an exact match against a file etc.\n  if (!hasMagic) {\n    return globUnescape(pattern)\n  }\n\n  var flags = options.nocase ? 'i' : ''\n  try {\n    var regExp = new RegExp('^' + re + '$', flags)\n  } catch (er) /* istanbul ignore next - should be impossible */ {\n    // If it was an invalid regular expression, then it can't match\n    // anything.  This trick looks for a character after the end of\n    // the string, which is of course impossible, except in multi-line\n    // mode, but it's not a /m regex.\n    return new RegExp('$.')\n  }\n\n  regExp._glob = pattern\n  regExp._src = re\n\n  return regExp\n}\n\nminimatch.makeRe = function (pattern, options) {\n  return new Minimatch(pattern, options || {}).makeRe()\n}\n\nMinimatch.prototype.makeRe = makeRe\nfunction makeRe () {\n  if (this.regexp || this.regexp === false) return this.regexp\n\n  // at this point, this.set is a 2d array of partial\n  // pattern strings, or \"**\".\n  //\n  // It's better to use .match().  This function shouldn't\n  // be used, really, but it's pretty convenient sometimes,\n  // when you just want to work with a regex.\n  var set = this.set\n\n  if (!set.length) {\n    this.regexp = false\n    return this.regexp\n  }\n  var options = this.options\n\n  var twoStar = options.noglobstar ? star\n    : options.dot ? twoStarDot\n    : twoStarNoDot\n  var flags = options.nocase ? 'i' : ''\n\n  var re = set.map(function (pattern) {\n    return pattern.map(function (p) {\n      return (p === GLOBSTAR) ? twoStar\n      : (typeof p === 'string') ? regExpEscape(p)\n      : p._src\n    }).join('\\\\\\/')\n  }).join('|')\n\n  // must match entire pattern\n  // ending in a * or ** will make it less strict.\n  re = '^(?:' + re + ')$'\n\n  // can match anything, as long as it's not this.\n  if (this.negate) re = '^(?!' + re + ').*$'\n\n  try {\n    this.regexp = new RegExp(re, flags)\n  } catch (ex) /* istanbul ignore next - should be impossible */ {\n    this.regexp = false\n  }\n  return this.regexp\n}\n\nminimatch.match = function (list, pattern, options) {\n  options = options || {}\n  var mm = new Minimatch(pattern, options)\n  list = list.filter(function (f) {\n    return mm.match(f)\n  })\n  if (mm.options.nonull && !list.length) {\n    list.push(pattern)\n  }\n  return list\n}\n\nMinimatch.prototype.match = function match (f, partial) {\n  if (typeof partial === 'undefined') partial = this.partial\n  this.debug('match', f, this.pattern)\n  // short-circuit in the case of busted things.\n  // comments, etc.\n  if (this.comment) return false\n  if (this.empty) return f === ''\n\n  if (f === '/' && partial) return true\n\n  var options = this.options\n\n  // windows: need to use /, not \\\n  if (path.sep !== '/') {\n    f = f.split(path.sep).join('/')\n  }\n\n  // treat the test path as a set of pathparts.\n  f = f.split(slashSplit)\n  this.debug(this.pattern, 'split', f)\n\n  // just ONE of the pattern sets in this.set needs to match\n  // in order for it to be valid.  If negating, then just one\n  // match means that we have failed.\n  // Either way, return on the first hit.\n\n  var set = this.set\n  this.debug(this.pattern, 'set', set)\n\n  // Find the basename of the path by looking for the last non-empty segment\n  var filename\n  var i\n  for (i = f.length - 1; i >= 0; i--) {\n    filename = f[i]\n    if (filename) break\n  }\n\n  for (i = 0; i < set.length; i++) {\n    var pattern = set[i]\n    var file = f\n    if (options.matchBase && pattern.length === 1) {\n      file = [filename]\n    }\n    var hit = this.matchOne(file, pattern, partial)\n    if (hit) {\n      if (options.flipNegate) return true\n      return !this.negate\n    }\n  }\n\n  // didn't get any hits.  this is success if it's a negative\n  // pattern, failure otherwise.\n  if (options.flipNegate) return false\n  return this.negate\n}\n\n// set partial to true to test if, for example,\n// \"/a/b\" matches the start of \"/*/b/*/d\"\n// Partial means, if you run out of file before you run\n// out of pattern, then that's fine, as long as all\n// the parts match.\nMinimatch.prototype.matchOne = function (file, pattern, partial) {\n  var options = this.options\n\n  this.debug('matchOne',\n    { 'this': this, file: file, pattern: pattern })\n\n  this.debug('matchOne', file.length, pattern.length)\n\n  for (var fi = 0,\n      pi = 0,\n      fl = file.length,\n      pl = pattern.length\n      ; (fi < fl) && (pi < pl)\n      ; fi++, pi++) {\n    this.debug('matchOne loop')\n    var p = pattern[pi]\n    var f = file[fi]\n\n    this.debug(pattern, p, f)\n\n    // should be impossible.\n    // some invalid regexp stuff in the set.\n    /* istanbul ignore if */\n    if (p === false) return false\n\n    if (p === GLOBSTAR) {\n      this.debug('GLOBSTAR', [pattern, p, f])\n\n      // \"**\"\n      // a/**/b/**/c would match the following:\n      // a/b/x/y/z/c\n      // a/x/y/z/b/c\n      // a/b/x/b/x/c\n      // a/b/c\n      // To do this, take the rest of the pattern after\n      // the **, and see if it would match the file remainder.\n      // If so, return success.\n      // If not, the ** \"swallows\" a segment, and try again.\n      // This is recursively awful.\n      //\n      // a/**/b/**/c matching a/b/x/y/z/c\n      // - a matches a\n      // - doublestar\n      //   - matchOne(b/x/y/z/c, b/**/c)\n      //     - b matches b\n      //     - doublestar\n      //       - matchOne(x/y/z/c, c) -> no\n      //       - matchOne(y/z/c, c) -> no\n      //       - matchOne(z/c, c) -> no\n      //       - matchOne(c, c) yes, hit\n      var fr = fi\n      var pr = pi + 1\n      if (pr === pl) {\n        this.debug('** at the end')\n        // a ** at the end will just swallow the rest.\n        // We have found a match.\n        // however, it will not swallow /.x, unless\n        // options.dot is set.\n        // . and .. are *never* matched by **, for explosively\n        // exponential reasons.\n        for (; fi < fl; fi++) {\n          if (file[fi] === '.' || file[fi] === '..' ||\n            (!options.dot && file[fi].charAt(0) === '.')) return false\n        }\n        return true\n      }\n\n      // ok, let's see if we can swallow whatever we can.\n      while (fr < fl) {\n        var swallowee = file[fr]\n\n        this.debug('\\nglobstar while', file, fr, pattern, pr, swallowee)\n\n        // XXX remove this slice.  Just pass the start index.\n        if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) {\n          this.debug('globstar found match!', fr, fl, swallowee)\n          // found a match.\n          return true\n        } else {\n          // can't swallow \".\" or \"..\" ever.\n          // can only swallow \".foo\" when explicitly asked.\n          if (swallowee === '.' || swallowee === '..' ||\n            (!options.dot && swallowee.charAt(0) === '.')) {\n            this.debug('dot detected!', file, fr, pattern, pr)\n            break\n          }\n\n          // ** swallows a segment, and continue.\n          this.debug('globstar swallow a segment, and continue')\n          fr++\n        }\n      }\n\n      // no match was found.\n      // However, in partial mode, we can't say this is necessarily over.\n      // If there's more *pattern* left, then\n      /* istanbul ignore if */\n      if (partial) {\n        // ran out of file\n        this.debug('\\n>>> no match, partial?', file, fr, pattern, pr)\n        if (fr === fl) return true\n      }\n      return false\n    }\n\n    // something other than **\n    // non-magic patterns just have to match exactly\n    // patterns with magic have been turned into regexps.\n    var hit\n    if (typeof p === 'string') {\n      hit = f === p\n      this.debug('string match', p, f, hit)\n    } else {\n      hit = f.match(p)\n      this.debug('pattern match', p, f, hit)\n    }\n\n    if (!hit) return false\n  }\n\n  // Note: ending in / means that we'll get a final \"\"\n  // at the end of the pattern.  This can only match a\n  // corresponding \"\" at the end of the file.\n  // If the file ends in /, then it can only match a\n  // a pattern that ends in /, unless the pattern just\n  // doesn't have any more for it. But, a/b/ should *not*\n  // match \"a/b/*\", even though \"\" matches against the\n  // [^/]*? pattern, except in partial mode, where it might\n  // simply not be reached yet.\n  // However, a/b/ should still satisfy a/*\n\n  // now either we fell off the end of the pattern, or we're done.\n  if (fi === fl && pi === pl) {\n    // ran out of pattern and filename at the same time.\n    // an exact hit!\n    return true\n  } else if (fi === fl) {\n    // ran out of file, but still had pattern left.\n    // this is ok if we're doing the match as part of\n    // a glob fs traversal.\n    return partial\n  } else /* istanbul ignore else */ if (pi === pl) {\n    // ran out of pattern, still have file left.\n    // this is only acceptable if we're on the very last\n    // empty segment of a file with a trailing slash.\n    // a/* should match a/b/\n    return (fi === fl - 1) && (file[fi] === '')\n  }\n\n  // should be unreachable.\n  /* istanbul ignore next */\n  throw new Error('wtf?')\n}\n\n// replace stuff like \\* with *\nfunction globUnescape (s) {\n  return s.replace(/\\\\(.)/g, '$1')\n}\n\nfunction regExpEscape (s) {\n  return s.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&')\n}\n/LICENSE\u0002The ISC License\n\nCopyright (c) Isaac Z. Schlueter and Contributors\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted, provided that the above\ncopyright notice and this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\nWITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\nANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\nACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR\nIN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/bXNAMi4xLjI=",
    "content": "/license.md\u00045The MIT License (MIT)\n\nCopyright (c) 2016 Zeit, Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n/package.json\u0002{\n  \"name\": \"ms\",\n  \"version\": \"2.1.2\",\n  \"description\": \"Tiny millisecond conversion utility\",\n  \"repository\": \"zeit/ms\",\n  \"main\": \"./index\",\n  \"files\": [\n    \"index.js\"\n  ],\n  \"scripts\": {\n    \"precommit\": \"lint-staged\",\n    \"lint\": \"eslint lib/* bin/*\",\n    \"test\": \"mocha tests.js\"\n  },\n  \"eslintConfig\": {\n    \"extends\": \"eslint:recommended\",\n    \"env\": {\n      \"node\": true,\n      \"es6\": true\n    }\n  },\n  \"lint-staged\": {\n    \"*.js\": [\n      \"npm run lint\",\n      \"prettier --single-quote --write\",\n      \"git add\"\n    ]\n  },\n  \"license\": \"MIT\",\n  \"devDependencies\": {\n    \"eslint\": \"4.12.1\",\n    \"expect.js\": \"0.3.1\",\n    \"husky\": \"0.14.3\",\n    \"lint-staged\": \"5.0.0\",\n    \"mocha\": \"4.0.1\"\n  }\n}\n/index.js\u000b/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n *  - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function(val, options) {\n  options = options || {};\n  var type = typeof val;\n  if (type === 'string' && val.length > 0) {\n    return parse(val);\n  } else if (type === 'number' && isFinite(val)) {\n    return options.long ? fmtLong(val) : fmtShort(val);\n  }\n  throw new Error(\n    'val is not a non-empty string or a valid number. val=' +\n      JSON.stringify(val)\n  );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n  str = String(str);\n  if (str.length > 100) {\n    return;\n  }\n  var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n    str\n  );\n  if (!match) {\n    return;\n  }\n  var n = parseFloat(match[1]);\n  var type = (match[2] || 'ms').toLowerCase();\n  switch (type) {\n    case 'years':\n    case 'year':\n    case 'yrs':\n    case 'yr':\n    case 'y':\n      return n * y;\n    case 'weeks':\n    case 'week':\n    case 'w':\n      return n * w;\n    case 'days':\n    case 'day':\n    case 'd':\n      return n * d;\n    case 'hours':\n    case 'hour':\n    case 'hrs':\n    case 'hr':\n    case 'h':\n      return n * h;\n    case 'minutes':\n    case 'minute':\n    case 'mins':\n    case 'min':\n    case 'm':\n      return n * m;\n    case 'seconds':\n    case 'second':\n    case 'secs':\n    case 'sec':\n    case 's':\n      return n * s;\n    case 'milliseconds':\n    case 'millisecond':\n    case 'msecs':\n    case 'msec':\n    case 'ms':\n      return n;\n    default:\n      return undefined;\n  }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n  var msAbs = Math.abs(ms);\n  if (msAbs >= d) {\n    return Math.round(ms / d) + 'd';\n  }\n  if (msAbs >= h) {\n    return Math.round(ms / h) + 'h';\n  }\n  if (msAbs >= m) {\n    return Math.round(ms / m) + 'm';\n  }\n  if (msAbs >= s) {\n    return Math.round(ms / s) + 's';\n  }\n  return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n  var msAbs = Math.abs(ms);\n  if (msAbs >= d) {\n    return plural(ms, msAbs, d, 'day');\n  }\n  if (msAbs >= h) {\n    return plural(ms, msAbs, h, 'hour');\n  }\n  if (msAbs >= m) {\n    return plural(ms, msAbs, m, 'minute');\n  }\n  if (msAbs >= s) {\n    return plural(ms, msAbs, s, 'second');\n  }\n  return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n  var isPlural = msAbs >= n * 1.5;\n  return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n/readme.md\u0007# ms\n\n[![Build Status](https://travis-ci.org/zeit/ms.svg?branch=master)](https://travis-ci.org/zeit/ms)\n[![Join the community on Spectrum](https://withspectrum.github.io/badge/badge.svg)](https://spectrum.chat/zeit)\n\nUse this package to easily convert various time formats to milliseconds.\n\n## Examples\n\n```js\nms('2 days')  // 172800000\nms('1d')      // 86400000\nms('10h')     // 36000000\nms('2.5 hrs') // 9000000\nms('2h')      // 7200000\nms('1m')      // 60000\nms('5s')      // 5000\nms('1y')      // 31557600000\nms('100')     // 100\nms('-3 days') // -259200000\nms('-1h')     // -3600000\nms('-200')    // -200\n```\n\n### Convert from Milliseconds\n\n```js\nms(60000)             // \"1m\"\nms(2 * 60000)         // \"2m\"\nms(-3 * 60000)        // \"-3m\"\nms(ms('10 hours'))    // \"10h\"\n```\n\n### Time Format Written-Out\n\n```js\nms(60000, { long: true })             // \"1 minute\"\nms(2 * 60000, { long: true })         // \"2 minutes\"\nms(-3 * 60000, { long: true })        // \"-3 minutes\"\nms(ms('10 hours'), { long: true })    // \"10 hours\"\n```\n\n## Features\n\n- Works both in [Node.js](https://nodejs.org) and in the browser\n- If a number is supplied to `ms`, a string with a unit is returned\n- If a string that contains the number is supplied, it returns it as a number (e.g.: it returns `100` for `'100'`)\n- If you pass a string with a number and a valid unit, the number of equivalent milliseconds is returned\n\n## Related Packages\n\n- [ms.macro](https://github.com/knpwrs/ms.macro) - Run `ms` as a macro at build-time.\n\n## Caught a Bug?\n\n1. [Fork](https://help.github.com/articles/fork-a-repo/) this repository to your own GitHub account and then [clone](https://help.github.com/articles/cloning-a-repository/) it to your local device\n2. Link the package to the global module directory: `npm link`\n3. Within the module you want to test your local development instance of ms, just link it to the dependencies: `npm link ms`. Instead of the default one from npm, Node.js will now use your clone of ms!\n\nAs always, you can run the tests using: `npm test`\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/bXNAMi4xLjM=",
    "content": "/readme.md\u0007^# ms\n\n![CI](https://github.com/vercel/ms/workflows/CI/badge.svg)\n\nUse this package to easily convert various time formats to milliseconds.\n\n## Examples\n\n```js\nms('2 days')  // 172800000\nms('1d')      // 86400000\nms('10h')     // 36000000\nms('2.5 hrs') // 9000000\nms('2h')      // 7200000\nms('1m')      // 60000\nms('5s')      // 5000\nms('1y')      // 31557600000\nms('100')     // 100\nms('-3 days') // -259200000\nms('-1h')     // -3600000\nms('-200')    // -200\n```\n\n### Convert from Milliseconds\n\n```js\nms(60000)             // \"1m\"\nms(2 * 60000)         // \"2m\"\nms(-3 * 60000)        // \"-3m\"\nms(ms('10 hours'))    // \"10h\"\n```\n\n### Time Format Written-Out\n\n```js\nms(60000, { long: true })             // \"1 minute\"\nms(2 * 60000, { long: true })         // \"2 minutes\"\nms(-3 * 60000, { long: true })        // \"-3 minutes\"\nms(ms('10 hours'), { long: true })    // \"10 hours\"\n```\n\n## Features\n\n- Works both in [Node.js](https://nodejs.org) and in the browser\n- If a number is supplied to `ms`, a string with a unit is returned\n- If a string that contains the number is supplied, it returns it as a number (e.g.: it returns `100` for `'100'`)\n- If you pass a string with a number and a valid unit, the number of equivalent milliseconds is returned\n\n## Related Packages\n\n- [ms.macro](https://github.com/knpwrs/ms.macro) - Run `ms` as a macro at build-time.\n\n## Caught a Bug?\n\n1. [Fork](https://help.github.com/articles/fork-a-repo/) this repository to your own GitHub account and then [clone](https://help.github.com/articles/cloning-a-repository/) it to your local device\n2. Link the package to the global module directory: `npm link`\n3. Within the module you want to test your local development instance of ms, just link it to the dependencies: `npm link ms`. Instead of the default one from npm, Node.js will now use your clone of ms!\n\nAs always, you can run the tests using: `npm test`\n/index.js\u000b/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n *  - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function (val, options) {\n  options = options || {};\n  var type = typeof val;\n  if (type === 'string' && val.length > 0) {\n    return parse(val);\n  } else if (type === 'number' && isFinite(val)) {\n    return options.long ? fmtLong(val) : fmtShort(val);\n  }\n  throw new Error(\n    'val is not a non-empty string or a valid number. val=' +\n      JSON.stringify(val)\n  );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n  str = String(str);\n  if (str.length > 100) {\n    return;\n  }\n  var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n    str\n  );\n  if (!match) {\n    return;\n  }\n  var n = parseFloat(match[1]);\n  var type = (match[2] || 'ms').toLowerCase();\n  switch (type) {\n    case 'years':\n    case 'year':\n    case 'yrs':\n    case 'yr':\n    case 'y':\n      return n * y;\n    case 'weeks':\n    case 'week':\n    case 'w':\n      return n * w;\n    case 'days':\n    case 'day':\n    case 'd':\n      return n * d;\n    case 'hours':\n    case 'hour':\n    case 'hrs':\n    case 'hr':\n    case 'h':\n      return n * h;\n    case 'minutes':\n    case 'minute':\n    case 'mins':\n    case 'min':\n    case 'm':\n      return n * m;\n    case 'seconds':\n    case 'second':\n    case 'secs':\n    case 'sec':\n    case 's':\n      return n * s;\n    case 'milliseconds':\n    case 'millisecond':\n    case 'msecs':\n    case 'msec':\n    case 'ms':\n      return n;\n    default:\n      return undefined;\n  }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n  var msAbs = Math.abs(ms);\n  if (msAbs >= d) {\n    return Math.round(ms / d) + 'd';\n  }\n  if (msAbs >= h) {\n    return Math.round(ms / h) + 'h';\n  }\n  if (msAbs >= m) {\n    return Math.round(ms / m) + 'm';\n  }\n  if (msAbs >= s) {\n    return Math.round(ms / s) + 's';\n  }\n  return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n  var msAbs = Math.abs(ms);\n  if (msAbs >= d) {\n    return plural(ms, msAbs, d, 'day');\n  }\n  if (msAbs >= h) {\n    return plural(ms, msAbs, h, 'hour');\n  }\n  if (msAbs >= m) {\n    return plural(ms, msAbs, m, 'minute');\n  }\n  if (msAbs >= s) {\n    return plural(ms, msAbs, s, 'second');\n  }\n  return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n  var isPlural = msAbs >= n * 1.5;\n  return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n/license.md\u00047The MIT License (MIT)\n\nCopyright (c) 2020 Vercel, Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n/package.json\u0002{\n  \"name\": \"ms\",\n  \"version\": \"2.1.3\",\n  \"description\": \"Tiny millisecond conversion utility\",\n  \"repository\": \"vercel/ms\",\n  \"main\": \"./index\",\n  \"files\": [\n    \"index.js\"\n  ],\n  \"scripts\": {\n    \"precommit\": \"lint-staged\",\n    \"lint\": \"eslint lib/* bin/*\",\n    \"test\": \"mocha tests.js\"\n  },\n  \"eslintConfig\": {\n    \"extends\": \"eslint:recommended\",\n    \"env\": {\n      \"node\": true,\n      \"es6\": true\n    }\n  },\n  \"lint-staged\": {\n    \"*.js\": [\n      \"npm run lint\",\n      \"prettier --single-quote --write\",\n      \"git add\"\n    ]\n  },\n  \"license\": \"MIT\",\n  \"devDependencies\": {\n    \"eslint\": \"4.18.2\",\n    \"expect.js\": \"0.3.1\",\n    \"husky\": \"0.14.3\",\n    \"lint-staged\": \"5.0.0\",\n    \"mocha\": \"4.0.1\",\n    \"prettier\": \"2.0.5\"\n  }\n}\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/bm9kZS1hYm9ydC1jb250cm9sbGVyQDMuMS4x",
    "content": "/CHANGELOG.md\u0004\u0004# 3.0.0\n\nRemoves default exports for AbortController. You must now import the `AbortController` object explicitly. This is a breaking change for some users relying on default exports. Upgrading to 3.0 is a one line change:\n\n```js\n// ES Modules Users\n// v2\nimport AbortController from \"node-abort-controller\";\n\n// v3\nimport { AbortController } from \"node-abort-controller\";\n\n// Common JS Users\n// v2\nconst AbortController = require(\"node-abort-controller\");\n\n// v3\nconst { AbortController } = require(\"node-abort-controller\");\n```\n\nOther changes:\n\n- Fix typos in docs\n- Update all dev dependencies to resolve deprecation warnings\n\n# 2.0.0\n\n- Export AbortSignal class. This is a non-breaking change for JavaScript users and almost surely a non-breaking change for TypeScript users but we are doing a major version bump to be safe.\n\n# 1.2.0\n\n- Remove dependency on lib.dom for types that was conflicting with NodeJS types\n\n# 1.1.0\n\n- Add proper EventTarget support to signal and `signal.onabort`\n\n# 1.0.4\n\n- Initial Stable Release\n/package.json\u0003?{\n  \"name\": \"node-abort-controller\",\n  \"version\": \"3.1.1\",\n  \"description\": \"AbortController for Node based on EventEmitter\",\n  \"main\": \"index.js\",\n  \"browser\": \"browser.js\",\n  \"scripts\": {\n    \"test\": \"jest\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/southpolesteve/node-abort-controller.git\"\n  },\n  \"keywords\": [\n    \"AbortController\",\n    \"AbortSignal\",\n    \"fetch\",\n    \"polyfill\"\n  ],\n  \"author\": \"Steve Faulkner <southpolesteve@gmail.com>\",\n  \"license\": \"MIT\",\n  \"bugs\": {\n    \"url\": \"https://github.com/southpolesteve/node-abort-controller/issues\"\n  },\n  \"homepage\": \"https://github.com/southpolesteve/node-abort-controller#readme\",\n  \"devDependencies\": {\n    \"jest\": \"^27.2.4\",\n    \"node-fetch\": \"^2.6.5\",\n    \"whatwg-fetch\": \"^3.6.2\"\n  },\n  \"jest\": {\n    \"testEnvironment\": \"jsdom\"\n  }\n}\n/__tests__/whatwg-fetch.js\u0003|const { AbortController } = require(\"../index.js\");\nconst { fetch } = require(\"whatwg-fetch\");\n\ndescribe(\"node-fetch\", function () {\n  it(\"should throw exception if aborted during the request\", async function () {\n    expect.assertions(1);\n    try {\n      const controller = new AbortController();\n      const signal = controller.signal;\n      setTimeout(() => controller.abort(), 5);\n      await fetch(\"https://www.google.com/\", { signal });\n    } catch (err) {\n      expect(err.name).toBe(\"AbortError\");\n    }\n  });\n  it(\"should throw exception if passed an already aborted signal\", async function () {\n    expect.assertions(1);\n    try {\n      const controller = new AbortController();\n      const signal = controller.signal;\n      controller.abort();\n      await fetch(\"https://www.google.com/\", { signal });\n    } catch (err) {\n      expect(err.name).toBe(\"AbortError\");\n    }\n  });\n});\n/index.d.ts\u0004// `AbortSignal`,`AbortController` are defined here to prevent a dependency on the `dom` library which disagrees with node runtime.\n// The definition for `AbortSignal` is taken from @types/node-fetch (https://github.com/DefinitelyTyped/DefinitelyTyped) for\n// maximal compatibility with node-fetch.\n// Original node-fetch definitions are under MIT License.\n\nexport class AbortSignal {\n  aborted: boolean;\n  reason?: any;\n\n  addEventListener: (\n    type: \"abort\",\n    listener: (this: AbortSignal, event: any) => any,\n    options?:\n      | boolean\n      | {\n          capture?: boolean;\n          once?: boolean;\n          passive?: boolean;\n        }\n  ) => void;\n\n  removeEventListener: (\n    type: \"abort\",\n    listener: (this: AbortSignal, event: any) => any,\n    options?:\n      | boolean\n      | {\n          capture?: boolean;\n        }\n  ) => void;\n\n  dispatchEvent: (event: any) => boolean;\n\n  onabort: null | ((this: AbortSignal, event: any) => void);\n\n  throwIfAborted(): void;\n\n  static abort(reason?: any): AbortSignal;\n\n  static timeout(time: number): AbortSignal;\n}\n\nexport class AbortController {\n  signal: AbortSignal;\n\n  abort(reason?: any): void;\n}\n/__tests__/abort-signal.js\t8const { AbortController, AbortSignal } = require(\"../index.js\");\n\ndescribe(\"AbortSignal\", function () {\n  it(\"should implement EventTarget\", function () {\n    const controller = new AbortController();\n    const signal = controller.signal;\n    const unusedHandler = jest.fn();\n    const handler = jest.fn();\n    const event = { type: \"abort\", target: signal };\n\n    signal.onabort = jest.fn();\n    signal.addEventListener(\"abort\", handler);\n    signal.addEventListener(\"abort\", unusedHandler);\n    signal.removeEventListener(\"abort\", unusedHandler);\n\n    signal.dispatchEvent(\"abort\", event);\n\n    expect(unusedHandler).not.toBeCalled();\n    expect(handler).toBeCalledTimes(1);\n    expect(handler).toBeCalledWith(event);\n    expect(signal.onabort).toBeCalledTimes(1);\n    expect(signal.onabort).toBeCalledWith(event);\n\n    jest.clearAllMocks();\n    signal.dispatchEvent(\"abort\", event);\n\n    expect(unusedHandler).not.toBeCalled();\n    expect(handler).toBeCalledTimes(1);\n    expect(handler).toBeCalledWith(event);\n    expect(signal.onabort).toBeCalledTimes(1);\n    expect(signal.onabort).toBeCalledWith(event);\n\n    jest.clearAllMocks();\n    signal.dispatchEvent(\"unknown\", event);\n\n    expect(unusedHandler).not.toBeCalled();\n    expect(handler).not.toBeCalled();\n    expect(signal.onabort).not.toBeCalled();\n  });\n\n  it(\"should implement throwIfAborted\", function () {\n    const controller = new AbortController();\n    const signal = controller.signal;\n    expect(() => signal.throwIfAborted()).not.toThrowError();\n    controller.abort();\n    expect(() => signal.throwIfAborted()).toThrowError(new Error(\"AbortError\"));\n  });\n});\n\ndescribe(\"Static methods\", () => {\n  jest.useFakeTimers();\n  jest.spyOn(global, \"setTimeout\");\n\n  it(\"should implement abort\", function () {\n    const signal = AbortSignal.abort();\n    expect(signal.aborted).toBe(true);\n    expect(signal.reason).toEqual(new Error(\"AbortError\"));\n  });\n\n  it(\"should implement timeout\", function () {\n    const signal = AbortSignal.timeout(1000);\n    expect(setTimeout).toHaveBeenCalledTimes(1);\n    expect(setTimeout).toHaveBeenLastCalledWith(expect.any(Function), 1000);\n    expect(signal.aborted).toBe(false);\n    expect(signal.reason).toBeUndefined();\n\n    jest.runAllTimers();\n\n    expect(signal.aborted).toBe(true);\n    expect(signal.reason).toEqual(new Error(\"TimeoutError\"));\n  });\n});\n/.github/workflows/test.yml\u0001ename: Test\n\non:\n  push:\n    branches: [\"master\"]\n  pull_request:\n    branches: [\"master\"]\n\njobs:\n  test:\n    runs-on: ubuntu-latest\n\n    steps:\n      - uses: actions/checkout@v3\n      - name: Use Node.js 14.6.x\n        uses: actions/setup-node@v3\n        with:\n          node-version: 14.6.x\n          cache: \"npm\"\n      - run: npm ci\n      - run: npm test\n/README.md\u0010J# node-abort-controller\n\nAbortController Polyfill for Node.JS based on EventEmitter for Node v14.6.x and below.\n\nAre you using Node 14.7.0 or above? You don't need this! [Node has `AbortController` and `AbortSignal` as builtin globals](https://nodejs.org/dist/latest/docs/api/globals.html#globals_class_abortcontroller). In Node versions >=14.7.0 and <15.4.0 you can access the experimental implementation using `--experimental-abortcontroller`.\n\n## Example Usage\n\n### Timing out `fetch`\n\n```javascript\nimport fetch from \"node-fetch\";\nimport { AbortController } from \"node-abort-controller\";\n\nconst controller = new AbortController();\nconst signal = controller.signal;\n\nawait fetch(\"https:/www.google.com\", { signal });\n\n// Abort fetch after 500ms. Effectively a timeout\nsetTimeout(() => controller.abort(), 500);\n```\n\n### Re-usable `fetch` function with a built in timeout\n\n```javascript\nimport { AbortController } from \"node-abort-controller\";\nimport fetch from \"node-fetch\";\n\nconst fetchWithTimeout = async (url = \"\") => {\n  const controller = new AbortController();\n  const { signal } = controller;\n\n  const timeout = setTimeout(() => {\n    controller.abort();\n  }, 5000);\n\n  const request = await fetch(url, { signal });\n\n  clearTimeout(timeout);\n\n  const result = await req.json();\n\n  return result;\n};\n```\n\n## Why would I need this?\n\nYou might not need to! Generally speaking, there are three environments your JavaScript code can run in:\n\n- Node\n- Modern Browsers (Not Internet Explorer)\n- Legacy Browsers (Mostly Internet Explorer)\n\nFor modern JS APIs, each environment would ideally get a polyfill:\n\n- only if it needs one\n- specific to the platform.\n\nIn practice, this is hard. Tooling such as webpack and browserify are great at making sure stuff works out of the box in all environments. But it is quite easy to fail on both points above. In all likelyhood, you end up shipping less than ideal polyfills on platforms that don't even need them. So what is a developer to do? In the case of `fetch` and `AbortController` I've done the work for you. This is a guide to that work.\n\nIf you are building a ...\n\n#### NodeJS library only supports Node 16 or above\n\nYou don't need this library! [`AbortController` is now built into nodeJS ](https://nodejs.org/api/globals.html#globals_class_abortcontroller). Use that instead.\n\n#### Web Application running only in modern browsers\n\nYou don't need a library! Close this tab. Uninstall this package.\n\n#### Web Application running in modern browsers AND NodeJS (such as a server side rendered JS app)\n\nUse _this package_ and [node-fetch](https://www.npmjs.com/package/node-fetch). It is minimally what you need.\n\n#### Web Application supporting legacy browsers AND NOT NodeJS\n\nUse [abort-controller](https://www.npmjs.com/package/abort-controller) and [whatwg-fetch](https://www.npmjs.com/package/whatwg-fetch). These are more complete polyfills that will work in all browser environments.\n\n#### Web Application supporting legacy browsers AND NodeJS\n\nUse [abort-controller](https://www.npmjs.com/package/abort-controller) and [cross-fetch](https://www.npmjs.com/package/cross-fetch). Same as above, except cross-fetch will polyfill correctly in both the browser and node.js\n\n#### NodeJS Library being consumed by other applications and using `fetch` internally\n\nUse _this package_ and [node-fetch](https://www.npmjs.com/package/node-fetch). It is the smallest and least opinionated combination for your end users. Application developers targeting Internet Exploer will need to polyfill `AbortController` and `fetch` on their own. But your library won't be forcing unecessary polyfills on developers who only target modern browsers.\n\n## Goals\n\nWith the above guide in mind, this library has a very specific set of goals:\n\n1. Provide a minimal polyfill in node.js\n2. Do not provide a polyfill in any browser environment\n\nThis is the ideal for _library authors_ who use `fetch` and `AbortController` internally and target _both_ browser and node developers.\n\n## Prior Art\n\nThank you @mysticatea for https://github.com/mysticatea/abort-controller. It is a fantastic `AbortController` polyfill and ideal for many use cases.\n/browser.js\u0001'use strict'\n\nconst _global =\n  typeof self !== 'undefined'\n    ? self\n    : typeof window !== 'undefined'\n    ? window\n    : /* otherwise */ undefined\n\nif (!_global) {\n  throw new Error(\n    `Unable to find global scope. Are you sure this is running in the browser?`\n  )\n}\n\nif (!_global.AbortController) {\n  throw new Error(\n    `Could not find \"AbortController\" in the global scope. You need to polyfill it first`\n  )\n}\n\nmodule.exports.AbortController = _global.AbortController/index.js\u0006Kconst { EventEmitter } = require(\"events\");\n\nclass AbortSignal {\n  constructor() {\n    this.eventEmitter = new EventEmitter();\n    this.onabort = null;\n    this.aborted = false;\n    this.reason = undefined;\n  }\n  toString() {\n    return \"[object AbortSignal]\";\n  }\n  get [Symbol.toStringTag]() {\n    return \"AbortSignal\";\n  }\n  removeEventListener(name, handler) {\n    this.eventEmitter.removeListener(name, handler);\n  }\n  addEventListener(name, handler) {\n    this.eventEmitter.on(name, handler);\n  }\n  dispatchEvent(type) {\n    const event = { type, target: this };\n    const handlerName = `on${type}`;\n\n    if (typeof this[handlerName] === \"function\") this[handlerName](event);\n\n    this.eventEmitter.emit(type, event);\n  }\n  throwIfAborted() {\n    if (this.aborted) {\n      throw this.reason;\n    }\n  }\n  static abort(reason) {\n    const controller = new AbortController();\n    controller.abort();\n    return controller.signal;\n  }\n  static timeout(time) {\n    const controller = new AbortController();\n    setTimeout(() => controller.abort(new Error(\"TimeoutError\")), time);\n    return controller.signal;\n  }\n}\nclass AbortController {\n  constructor() {\n    this.signal = new AbortSignal();\n  }\n  abort(reason) {\n    if (this.signal.aborted) return;\n\n    this.signal.aborted = true;\n\n    if (reason) this.signal.reason = reason;\n    else this.signal.reason = new Error(\"AbortError\");\n\n    this.signal.dispatchEvent(\"abort\");\n  }\n  toString() {\n    return \"[object AbortController]\";\n  }\n  get [Symbol.toStringTag]() {\n    return \"AbortController\";\n  }\n}\n\nmodule.exports = { AbortController, AbortSignal };\n/__tests__/node-fetch.js\u0003vconst { AbortController } = require(\"../index.js\");\nconst fetch = require(\"node-fetch\");\n\ndescribe(\"node-fetch\", function () {\n  it(\"should throw exception if aborted during the request\", async function () {\n    expect.assertions(1);\n    try {\n      const controller = new AbortController();\n      const signal = controller.signal;\n      setTimeout(() => controller.abort(), 5);\n      await fetch(\"https://www.google.com/\", { signal });\n    } catch (err) {\n      expect(err.name).toBe(\"AbortError\");\n    }\n  });\n  it(\"should throw exception if passed an already aborted signal\", async function () {\n    expect.assertions(1);\n    try {\n      const controller = new AbortController();\n      const signal = controller.signal;\n      controller.abort();\n      await fetch(\"https://www.google.com/\", { signal });\n    } catch (err) {\n      expect(err.name).toBe(\"AbortError\");\n    }\n  });\n});\n/LICENSE\u0004/MIT License\n\nCopyright (c) 2019 Steve Faulkner\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n/__tests__/abort-controller.js\u0005const { AbortController } = require(\"../index.js\");\n\ndescribe(\"AbortController\", function () {\n  it(\"should call abort handlers once\", function () {\n    const controller = new AbortController();\n    const signal = controller.signal;\n    const handler = jest.fn();\n\n    expect(signal.onabort).toBeNull();\n    expect(signal.aborted).toBe(false);\n    expect(signal.reason).toBeUndefined();\n\n    signal.onabort = jest.fn();\n    signal.addEventListener(\"abort\", handler);\n\n    controller.abort();\n\n    expect(signal.aborted).toBe(true);\n    expect(signal.reason).toEqual(new Error(\"AbortError\"));\n    expect(handler).toBeCalledTimes(1);\n    expect(handler).toBeCalledWith({ type: \"abort\", target: signal });\n    expect(signal.onabort).toBeCalledTimes(1);\n    expect(signal.onabort).toBeCalledWith({ type: \"abort\", target: signal });\n\n    jest.clearAllMocks();\n    controller.abort();\n\n    expect(signal.aborted).toBe(true);\n    expect(signal.reason).toEqual(new Error(\"AbortError\"));\n    expect(handler).not.toBeCalled();\n    expect(signal.onabort).not.toBeCalled();\n  });\n\n  it(\"should use custom abort reason\", () => {\n    const controller = new AbortController();\n    const signal = controller.signal;\n    expect(signal.aborted).toBe(false);\n    expect(signal.reason).toBeUndefined();\n\n    const customReason = new Error(\"Custom Reason\");\n    controller.abort(customReason);\n\n    expect(signal.aborted).toBe(true);\n    expect(signal.reason).toBe(customReason);\n  });\n});\n/__tests__/browser.js\u00025describe(\"AbortController in browser\", function () {\n  // Mock AbortController\n  const mockedGlobalAbortController = jest.fn();\n\n  beforeAll(() => {\n    // Attach mocked AbortController to global\n    self.AbortController = mockedGlobalAbortController;\n  });\n\n  it(\"should call global abort controller\", function () {\n    // Require module after global setup\n    const { AbortController } = require(\"../browser.js\");\n\n    const controller = new AbortController();\n\n    expect(controller).toBeTruthy();\n    expect(mockedGlobalAbortController).toBeCalled();\n  });\n});\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/bm9kZS1mZXRjaEAyLjYuOQ==",
    "content": "/package.json\nl{\n    \"name\": \"node-fetch\",\n    \"version\": \"2.6.9\",\n    \"description\": \"A light-weight module that brings window.fetch to node.js\",\n    \"main\": \"lib/index.js\",\n    \"browser\": \"./browser.js\",\n    \"module\": \"lib/index.mjs\",\n    \"files\": [\n        \"lib/index.js\",\n        \"lib/index.mjs\",\n        \"lib/index.es.js\",\n        \"browser.js\"\n    ],\n    \"engines\": {\n        \"node\": \"4.x || >=6.0.0\"\n    },\n    \"scripts\": {\n        \"build\": \"cross-env BABEL_ENV=rollup rollup -c\",\n        \"prepare\": \"npm run build\",\n        \"test\": \"cross-env BABEL_ENV=test mocha --require babel-register --throw-deprecation test/test.js\",\n        \"report\": \"cross-env BABEL_ENV=coverage nyc --reporter lcov --reporter text mocha -R spec test/test.js\",\n        \"coverage\": \"cross-env BABEL_ENV=coverage nyc --reporter json --reporter text mocha -R spec test/test.js && codecov -f coverage/coverage-final.json\"\n    },\n    \"repository\": {\n        \"type\": \"git\",\n        \"url\": \"https://github.com/bitinn/node-fetch.git\"\n    },\n    \"keywords\": [\n        \"fetch\",\n        \"http\",\n        \"promise\"\n    ],\n    \"author\": \"David Frank\",\n    \"license\": \"MIT\",\n    \"bugs\": {\n        \"url\": \"https://github.com/bitinn/node-fetch/issues\"\n    },\n    \"homepage\": \"https://github.com/bitinn/node-fetch\",\n    \"dependencies\": {\n        \"whatwg-url\": \"^5.0.0\"\n    },\n    \"peerDependencies\": {\n        \"encoding\": \"^0.1.0\"\n    },\n    \"peerDependenciesMeta\": {\n        \"encoding\": {\n            \"optional\": true\n        }\n    },\n    \"devDependencies\": {\n        \"@ungap/url-search-params\": \"^0.1.2\",\n        \"abort-controller\": \"^1.1.0\",\n        \"abortcontroller-polyfill\": \"^1.3.0\",\n        \"babel-core\": \"^6.26.3\",\n        \"babel-plugin-istanbul\": \"^4.1.6\",\n        \"babel-plugin-transform-async-generator-functions\": \"^6.24.1\",\n        \"babel-polyfill\": \"^6.26.0\",\n        \"babel-preset-env\": \"1.4.0\",\n        \"babel-register\": \"^6.16.3\",\n        \"chai\": \"^3.5.0\",\n        \"chai-as-promised\": \"^7.1.1\",\n        \"chai-iterator\": \"^1.1.1\",\n        \"chai-string\": \"~1.3.0\",\n        \"codecov\": \"3.3.0\",\n        \"cross-env\": \"^5.2.0\",\n        \"form-data\": \"^2.3.3\",\n        \"is-builtin-module\": \"^1.0.0\",\n        \"mocha\": \"^5.0.0\",\n        \"nyc\": \"11.9.0\",\n        \"parted\": \"^0.1.1\",\n        \"promise\": \"^8.0.3\",\n        \"resumer\": \"0.0.0\",\n        \"rollup\": \"^0.63.4\",\n        \"rollup-plugin-babel\": \"^3.0.7\",\n        \"string-to-arraybuffer\": \"^1.0.2\",\n        \"teeny-request\": \"3.7.0\"\n    },\n    \"release\": {\n        \"branches\": [\n            \"+([0-9]).x\",\n            \"main\",\n            \"next\",\n            {\n                \"name\": \"beta\",\n                \"prerelease\": true\n            }\n        ]\n    }\n}\n/lib/index.es.jsŰprocess.emitWarning(\"The .es.js file is deprecated. Use .mjs instead.\");\n\nimport Stream from 'stream';\nimport http from 'http';\nimport Url from 'url';\nimport whatwgUrl from 'whatwg-url';\nimport https from 'https';\nimport zlib from 'zlib';\n\n// Based on https://github.com/tmpvar/jsdom/blob/aa85b2abf07766ff7bf5c1f6daafb3726f2f2db5/lib/jsdom/living/blob.js\n\n// fix for \"Readable\" isn't a named export issue\nconst Readable = Stream.Readable;\n\nconst BUFFER = Symbol('buffer');\nconst TYPE = Symbol('type');\n\nclass Blob {\n\tconstructor() {\n\t\tthis[TYPE] = '';\n\n\t\tconst blobParts = arguments[0];\n\t\tconst options = arguments[1];\n\n\t\tconst buffers = [];\n\t\tlet size = 0;\n\n\t\tif (blobParts) {\n\t\t\tconst a = blobParts;\n\t\t\tconst length = Number(a.length);\n\t\t\tfor (let i = 0; i < length; i++) {\n\t\t\t\tconst element = a[i];\n\t\t\t\tlet buffer;\n\t\t\t\tif (element instanceof Buffer) {\n\t\t\t\t\tbuffer = element;\n\t\t\t\t} else if (ArrayBuffer.isView(element)) {\n\t\t\t\t\tbuffer = Buffer.from(element.buffer, element.byteOffset, element.byteLength);\n\t\t\t\t} else if (element instanceof ArrayBuffer) {\n\t\t\t\t\tbuffer = Buffer.from(element);\n\t\t\t\t} else if (element instanceof Blob) {\n\t\t\t\t\tbuffer = element[BUFFER];\n\t\t\t\t} else {\n\t\t\t\t\tbuffer = Buffer.from(typeof element === 'string' ? element : String(element));\n\t\t\t\t}\n\t\t\t\tsize += buffer.length;\n\t\t\t\tbuffers.push(buffer);\n\t\t\t}\n\t\t}\n\n\t\tthis[BUFFER] = Buffer.concat(buffers);\n\n\t\tlet type = options && options.type !== undefined && String(options.type).toLowerCase();\n\t\tif (type && !/[^\\u0020-\\u007E]/.test(type)) {\n\t\t\tthis[TYPE] = type;\n\t\t}\n\t}\n\tget size() {\n\t\treturn this[BUFFER].length;\n\t}\n\tget type() {\n\t\treturn this[TYPE];\n\t}\n\ttext() {\n\t\treturn Promise.resolve(this[BUFFER].toString());\n\t}\n\tarrayBuffer() {\n\t\tconst buf = this[BUFFER];\n\t\tconst ab = buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);\n\t\treturn Promise.resolve(ab);\n\t}\n\tstream() {\n\t\tconst readable = new Readable();\n\t\treadable._read = function () {};\n\t\treadable.push(this[BUFFER]);\n\t\treadable.push(null);\n\t\treturn readable;\n\t}\n\ttoString() {\n\t\treturn '[object Blob]';\n\t}\n\tslice() {\n\t\tconst size = this.size;\n\n\t\tconst start = arguments[0];\n\t\tconst end = arguments[1];\n\t\tlet relativeStart, relativeEnd;\n\t\tif (start === undefined) {\n\t\t\trelativeStart = 0;\n\t\t} else if (start < 0) {\n\t\t\trelativeStart = Math.max(size + start, 0);\n\t\t} else {\n\t\t\trelativeStart = Math.min(start, size);\n\t\t}\n\t\tif (end === undefined) {\n\t\t\trelativeEnd = size;\n\t\t} else if (end < 0) {\n\t\t\trelativeEnd = Math.max(size + end, 0);\n\t\t} else {\n\t\t\trelativeEnd = Math.min(end, size);\n\t\t}\n\t\tconst span = Math.max(relativeEnd - relativeStart, 0);\n\n\t\tconst buffer = this[BUFFER];\n\t\tconst slicedBuffer = buffer.slice(relativeStart, relativeStart + span);\n\t\tconst blob = new Blob([], { type: arguments[2] });\n\t\tblob[BUFFER] = slicedBuffer;\n\t\treturn blob;\n\t}\n}\n\nObject.defineProperties(Blob.prototype, {\n\tsize: { enumerable: true },\n\ttype: { enumerable: true },\n\tslice: { enumerable: true }\n});\n\nObject.defineProperty(Blob.prototype, Symbol.toStringTag, {\n\tvalue: 'Blob',\n\twritable: false,\n\tenumerable: false,\n\tconfigurable: true\n});\n\n/**\n * fetch-error.js\n *\n * FetchError interface for operational errors\n */\n\n/**\n * Create FetchError instance\n *\n * @param   String      message      Error message for human\n * @param   String      type         Error type for machine\n * @param   String      systemError  For Node.js system error\n * @return  FetchError\n */\nfunction FetchError(message, type, systemError) {\n  Error.call(this, message);\n\n  this.message = message;\n  this.type = type;\n\n  // when err.type is `system`, err.code contains system error code\n  if (systemError) {\n    this.code = this.errno = systemError.code;\n  }\n\n  // hide custom error implementation details from end-users\n  Error.captureStackTrace(this, this.constructor);\n}\n\nFetchError.prototype = Object.create(Error.prototype);\nFetchError.prototype.constructor = FetchError;\nFetchError.prototype.name = 'FetchError';\n\nlet convert;\ntry {\n\tconvert = require('encoding').convert;\n} catch (e) {}\n\nconst INTERNALS = Symbol('Body internals');\n\n// fix an issue where \"PassThrough\" isn't a named export for node <10\nconst PassThrough = Stream.PassThrough;\n\n/**\n * Body mixin\n *\n * Ref: https://fetch.spec.whatwg.org/#body\n *\n * @param   Stream  body  Readable stream\n * @param   Object  opts  Response options\n * @return  Void\n */\nfunction Body(body) {\n\tvar _this = this;\n\n\tvar _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n\t    _ref$size = _ref.size;\n\n\tlet size = _ref$size === undefined ? 0 : _ref$size;\n\tvar _ref$timeout = _ref.timeout;\n\tlet timeout = _ref$timeout === undefined ? 0 : _ref$timeout;\n\n\tif (body == null) {\n\t\t// body is undefined or null\n\t\tbody = null;\n\t} else if (isURLSearchParams(body)) {\n\t\t// body is a URLSearchParams\n\t\tbody = Buffer.from(body.toString());\n\t} else if (isBlob(body)) ; else if (Buffer.isBuffer(body)) ; else if (Object.prototype.toString.call(body) === '[object ArrayBuffer]') {\n\t\t// body is ArrayBuffer\n\t\tbody = Buffer.from(body);\n\t} else if (ArrayBuffer.isView(body)) {\n\t\t// body is ArrayBufferView\n\t\tbody = Buffer.from(body.buffer, body.byteOffset, body.byteLength);\n\t} else if (body instanceof Stream) ; else {\n\t\t// none of the above\n\t\t// coerce to string then buffer\n\t\tbody = Buffer.from(String(body));\n\t}\n\tthis[INTERNALS] = {\n\t\tbody,\n\t\tdisturbed: false,\n\t\terror: null\n\t};\n\tthis.size = size;\n\tthis.timeout = timeout;\n\n\tif (body instanceof Stream) {\n\t\tbody.on('error', function (err) {\n\t\t\tconst error = err.name === 'AbortError' ? err : new FetchError(`Invalid response body while trying to fetch ${_this.url}: ${err.message}`, 'system', err);\n\t\t\t_this[INTERNALS].error = error;\n\t\t});\n\t}\n}\n\nBody.prototype = {\n\tget body() {\n\t\treturn this[INTERNALS].body;\n\t},\n\n\tget bodyUsed() {\n\t\treturn this[INTERNALS].disturbed;\n\t},\n\n\t/**\n  * Decode response as ArrayBuffer\n  *\n  * @return  Promise\n  */\n\tarrayBuffer() {\n\t\treturn consumeBody.call(this).then(function (buf) {\n\t\t\treturn buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);\n\t\t});\n\t},\n\n\t/**\n  * Return raw response as Blob\n  *\n  * @return Promise\n  */\n\tblob() {\n\t\tlet ct = this.headers && this.headers.get('content-type') || '';\n\t\treturn consumeBody.call(this).then(function (buf) {\n\t\t\treturn Object.assign(\n\t\t\t// Prevent copying\n\t\t\tnew Blob([], {\n\t\t\t\ttype: ct.toLowerCase()\n\t\t\t}), {\n\t\t\t\t[BUFFER]: buf\n\t\t\t});\n\t\t});\n\t},\n\n\t/**\n  * Decode response as json\n  *\n  * @return  Promise\n  */\n\tjson() {\n\t\tvar _this2 = this;\n\n\t\treturn consumeBody.call(this).then(function (buffer) {\n\t\t\ttry {\n\t\t\t\treturn JSON.parse(buffer.toString());\n\t\t\t} catch (err) {\n\t\t\t\treturn Body.Promise.reject(new FetchError(`invalid json response body at ${_this2.url} reason: ${err.message}`, 'invalid-json'));\n\t\t\t}\n\t\t});\n\t},\n\n\t/**\n  * Decode response as text\n  *\n  * @return  Promise\n  */\n\ttext() {\n\t\treturn consumeBody.call(this).then(function (buffer) {\n\t\t\treturn buffer.toString();\n\t\t});\n\t},\n\n\t/**\n  * Decode response as buffer (non-spec api)\n  *\n  * @return  Promise\n  */\n\tbuffer() {\n\t\treturn consumeBody.call(this);\n\t},\n\n\t/**\n  * Decode response as text, while automatically detecting the encoding and\n  * trying to decode to UTF-8 (non-spec api)\n  *\n  * @return  Promise\n  */\n\ttextConverted() {\n\t\tvar _this3 = this;\n\n\t\treturn consumeBody.call(this).then(function (buffer) {\n\t\t\treturn convertBody(buffer, _this3.headers);\n\t\t});\n\t}\n};\n\n// In browsers, all properties are enumerable.\nObject.defineProperties(Body.prototype, {\n\tbody: { enumerable: true },\n\tbodyUsed: { enumerable: true },\n\tarrayBuffer: { enumerable: true },\n\tblob: { enumerable: true },\n\tjson: { enumerable: true },\n\ttext: { enumerable: true }\n});\n\nBody.mixIn = function (proto) {\n\tfor (const name of Object.getOwnPropertyNames(Body.prototype)) {\n\t\t// istanbul ignore else: future proof\n\t\tif (!(name in proto)) {\n\t\t\tconst desc = Object.getOwnPropertyDescriptor(Body.prototype, name);\n\t\t\tObject.defineProperty(proto, name, desc);\n\t\t}\n\t}\n};\n\n/**\n * Consume and convert an entire Body to a Buffer.\n *\n * Ref: https://fetch.spec.whatwg.org/#concept-body-consume-body\n *\n * @return  Promise\n */\nfunction consumeBody() {\n\tvar _this4 = this;\n\n\tif (this[INTERNALS].disturbed) {\n\t\treturn Body.Promise.reject(new TypeError(`body used already for: ${this.url}`));\n\t}\n\n\tthis[INTERNALS].disturbed = true;\n\n\tif (this[INTERNALS].error) {\n\t\treturn Body.Promise.reject(this[INTERNALS].error);\n\t}\n\n\tlet body = this.body;\n\n\t// body is null\n\tif (body === null) {\n\t\treturn Body.Promise.resolve(Buffer.alloc(0));\n\t}\n\n\t// body is blob\n\tif (isBlob(body)) {\n\t\tbody = body.stream();\n\t}\n\n\t// body is buffer\n\tif (Buffer.isBuffer(body)) {\n\t\treturn Body.Promise.resolve(body);\n\t}\n\n\t// istanbul ignore if: should never happen\n\tif (!(body instanceof Stream)) {\n\t\treturn Body.Promise.resolve(Buffer.alloc(0));\n\t}\n\n\t// body is stream\n\t// get ready to actually consume the body\n\tlet accum = [];\n\tlet accumBytes = 0;\n\tlet abort = false;\n\n\treturn new Body.Promise(function (resolve, reject) {\n\t\tlet resTimeout;\n\n\t\t// allow timeout on slow response body\n\t\tif (_this4.timeout) {\n\t\t\tresTimeout = setTimeout(function () {\n\t\t\t\tabort = true;\n\t\t\t\treject(new FetchError(`Response timeout while trying to fetch ${_this4.url} (over ${_this4.timeout}ms)`, 'body-timeout'));\n\t\t\t}, _this4.timeout);\n\t\t}\n\n\t\t// handle stream errors\n\t\tbody.on('error', function (err) {\n\t\t\tif (err.name === 'AbortError') {\n\t\t\t\t// if the request was aborted, reject with this Error\n\t\t\t\tabort = true;\n\t\t\t\treject(err);\n\t\t\t} else {\n\t\t\t\t// other errors, such as incorrect content-encoding\n\t\t\t\treject(new FetchError(`Invalid response body while trying to fetch ${_this4.url}: ${err.message}`, 'system', err));\n\t\t\t}\n\t\t});\n\n\t\tbody.on('data', function (chunk) {\n\t\t\tif (abort || chunk === null) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (_this4.size && accumBytes + chunk.length > _this4.size) {\n\t\t\t\tabort = true;\n\t\t\t\treject(new FetchError(`content size at ${_this4.url} over limit: ${_this4.size}`, 'max-size'));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\taccumBytes += chunk.length;\n\t\t\taccum.push(chunk);\n\t\t});\n\n\t\tbody.on('end', function () {\n\t\t\tif (abort) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tclearTimeout(resTimeout);\n\n\t\t\ttry {\n\t\t\t\tresolve(Buffer.concat(accum, accumBytes));\n\t\t\t} catch (err) {\n\t\t\t\t// handle streams that have accumulated too much data (issue #414)\n\t\t\t\treject(new FetchError(`Could not create Buffer from response body for ${_this4.url}: ${err.message}`, 'system', err));\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Detect buffer encoding and convert to target encoding\n * ref: http://www.w3.org/TR/2011/WD-html5-20110113/parsing.html#determining-the-character-encoding\n *\n * @param   Buffer  buffer    Incoming buffer\n * @param   String  encoding  Target encoding\n * @return  String\n */\nfunction convertBody(buffer, headers) {\n\tif (typeof convert !== 'function') {\n\t\tthrow new Error('The package `encoding` must be installed to use the textConverted() function');\n\t}\n\n\tconst ct = headers.get('content-type');\n\tlet charset = 'utf-8';\n\tlet res, str;\n\n\t// header\n\tif (ct) {\n\t\tres = /charset=([^;]*)/i.exec(ct);\n\t}\n\n\t// no charset in content type, peek at response body for at most 1024 bytes\n\tstr = buffer.slice(0, 1024).toString();\n\n\t// html5\n\tif (!res && str) {\n\t\tres = /<meta.+?charset=(['\"])(.+?)\\1/i.exec(str);\n\t}\n\n\t// html4\n\tif (!res && str) {\n\t\tres = /<meta[\\s]+?http-equiv=(['\"])content-type\\1[\\s]+?content=(['\"])(.+?)\\2/i.exec(str);\n\t\tif (!res) {\n\t\t\tres = /<meta[\\s]+?content=(['\"])(.+?)\\1[\\s]+?http-equiv=(['\"])content-type\\3/i.exec(str);\n\t\t\tif (res) {\n\t\t\t\tres.pop(); // drop last quote\n\t\t\t}\n\t\t}\n\n\t\tif (res) {\n\t\t\tres = /charset=(.*)/i.exec(res.pop());\n\t\t}\n\t}\n\n\t// xml\n\tif (!res && str) {\n\t\tres = /<\\?xml.+?encoding=(['\"])(.+?)\\1/i.exec(str);\n\t}\n\n\t// found charset\n\tif (res) {\n\t\tcharset = res.pop();\n\n\t\t// prevent decode issues when sites use incorrect encoding\n\t\t// ref: https://hsivonen.fi/encoding-menu/\n\t\tif (charset === 'gb2312' || charset === 'gbk') {\n\t\t\tcharset = 'gb18030';\n\t\t}\n\t}\n\n\t// turn raw buffers into a single utf-8 buffer\n\treturn convert(buffer, 'UTF-8', charset).toString();\n}\n\n/**\n * Detect a URLSearchParams object\n * ref: https://github.com/bitinn/node-fetch/issues/296#issuecomment-307598143\n *\n * @param   Object  obj     Object to detect by type or brand\n * @return  String\n */\nfunction isURLSearchParams(obj) {\n\t// Duck-typing as a necessary condition.\n\tif (typeof obj !== 'object' || typeof obj.append !== 'function' || typeof obj.delete !== 'function' || typeof obj.get !== 'function' || typeof obj.getAll !== 'function' || typeof obj.has !== 'function' || typeof obj.set !== 'function') {\n\t\treturn false;\n\t}\n\n\t// Brand-checking and more duck-typing as optional condition.\n\treturn obj.constructor.name === 'URLSearchParams' || Object.prototype.toString.call(obj) === '[object URLSearchParams]' || typeof obj.sort === 'function';\n}\n\n/**\n * Check if `obj` is a W3C `Blob` object (which `File` inherits from)\n * @param  {*} obj\n * @return {boolean}\n */\nfunction isBlob(obj) {\n\treturn typeof obj === 'object' && typeof obj.arrayBuffer === 'function' && typeof obj.type === 'string' && typeof obj.stream === 'function' && typeof obj.constructor === 'function' && typeof obj.constructor.name === 'string' && /^(Blob|File)$/.test(obj.constructor.name) && /^(Blob|File)$/.test(obj[Symbol.toStringTag]);\n}\n\n/**\n * Clone body given Res/Req instance\n *\n * @param   Mixed  instance  Response or Request instance\n * @return  Mixed\n */\nfunction clone(instance) {\n\tlet p1, p2;\n\tlet body = instance.body;\n\n\t// don't allow cloning a used body\n\tif (instance.bodyUsed) {\n\t\tthrow new Error('cannot clone body after it is used');\n\t}\n\n\t// check that body is a stream and not form-data object\n\t// note: we can't clone the form-data object without having it as a dependency\n\tif (body instanceof Stream && typeof body.getBoundary !== 'function') {\n\t\t// tee instance body\n\t\tp1 = new PassThrough();\n\t\tp2 = new PassThrough();\n\t\tbody.pipe(p1);\n\t\tbody.pipe(p2);\n\t\t// set instance body to teed body and return the other teed body\n\t\tinstance[INTERNALS].body = p1;\n\t\tbody = p2;\n\t}\n\n\treturn body;\n}\n\n/**\n * Performs the operation \"extract a `Content-Type` value from |object|\" as\n * specified in the specification:\n * https://fetch.spec.whatwg.org/#concept-bodyinit-extract\n *\n * This function assumes that instance.body is present.\n *\n * @param   Mixed  instance  Any options.body input\n */\nfunction extractContentType(body) {\n\tif (body === null) {\n\t\t// body is null\n\t\treturn null;\n\t} else if (typeof body === 'string') {\n\t\t// body is string\n\t\treturn 'text/plain;charset=UTF-8';\n\t} else if (isURLSearchParams(body)) {\n\t\t// body is a URLSearchParams\n\t\treturn 'application/x-www-form-urlencoded;charset=UTF-8';\n\t} else if (isBlob(body)) {\n\t\t// body is blob\n\t\treturn body.type || null;\n\t} else if (Buffer.isBuffer(body)) {\n\t\t// body is buffer\n\t\treturn null;\n\t} else if (Object.prototype.toString.call(body) === '[object ArrayBuffer]') {\n\t\t// body is ArrayBuffer\n\t\treturn null;\n\t} else if (ArrayBuffer.isView(body)) {\n\t\t// body is ArrayBufferView\n\t\treturn null;\n\t} else if (typeof body.getBoundary === 'function') {\n\t\t// detect form data input from form-data module\n\t\treturn `multipart/form-data;boundary=${body.getBoundary()}`;\n\t} else if (body instanceof Stream) {\n\t\t// body is stream\n\t\t// can't really do much about this\n\t\treturn null;\n\t} else {\n\t\t// Body constructor defaults other things to string\n\t\treturn 'text/plain;charset=UTF-8';\n\t}\n}\n\n/**\n * The Fetch Standard treats this as if \"total bytes\" is a property on the body.\n * For us, we have to explicitly get it with a function.\n *\n * ref: https://fetch.spec.whatwg.org/#concept-body-total-bytes\n *\n * @param   Body    instance   Instance of Body\n * @return  Number?            Number of bytes, or null if not possible\n */\nfunction getTotalBytes(instance) {\n\tconst body = instance.body;\n\n\n\tif (body === null) {\n\t\t// body is null\n\t\treturn 0;\n\t} else if (isBlob(body)) {\n\t\treturn body.size;\n\t} else if (Buffer.isBuffer(body)) {\n\t\t// body is buffer\n\t\treturn body.length;\n\t} else if (body && typeof body.getLengthSync === 'function') {\n\t\t// detect form data input from form-data module\n\t\tif (body._lengthRetrievers && body._lengthRetrievers.length == 0 || // 1.x\n\t\tbody.hasKnownLength && body.hasKnownLength()) {\n\t\t\t// 2.x\n\t\t\treturn body.getLengthSync();\n\t\t}\n\t\treturn null;\n\t} else {\n\t\t// body is stream\n\t\treturn null;\n\t}\n}\n\n/**\n * Write a Body to a Node.js WritableStream (e.g. http.Request) object.\n *\n * @param   Body    instance   Instance of Body\n * @return  Void\n */\nfunction writeToStream(dest, instance) {\n\tconst body = instance.body;\n\n\n\tif (body === null) {\n\t\t// body is null\n\t\tdest.end();\n\t} else if (isBlob(body)) {\n\t\tbody.stream().pipe(dest);\n\t} else if (Buffer.isBuffer(body)) {\n\t\t// body is buffer\n\t\tdest.write(body);\n\t\tdest.end();\n\t} else {\n\t\t// body is stream\n\t\tbody.pipe(dest);\n\t}\n}\n\n// expose Promise\nBody.Promise = global.Promise;\n\n/**\n * headers.js\n *\n * Headers class offers convenient helpers\n */\n\nconst invalidTokenRegex = /[^\\^_`a-zA-Z\\-0-9!#$%&'*+.|~]/;\nconst invalidHeaderCharRegex = /[^\\t\\x20-\\x7e\\x80-\\xff]/;\n\nfunction validateName(name) {\n\tname = `${name}`;\n\tif (invalidTokenRegex.test(name) || name === '') {\n\t\tthrow new TypeError(`${name} is not a legal HTTP header name`);\n\t}\n}\n\nfunction validateValue(value) {\n\tvalue = `${value}`;\n\tif (invalidHeaderCharRegex.test(value)) {\n\t\tthrow new TypeError(`${value} is not a legal HTTP header value`);\n\t}\n}\n\n/**\n * Find the key in the map object given a header name.\n *\n * Returns undefined if not found.\n *\n * @param   String  name  Header name\n * @return  String|Undefined\n */\nfunction find(map, name) {\n\tname = name.toLowerCase();\n\tfor (const key in map) {\n\t\tif (key.toLowerCase() === name) {\n\t\t\treturn key;\n\t\t}\n\t}\n\treturn undefined;\n}\n\nconst MAP = Symbol('map');\nclass Headers {\n\t/**\n  * Headers class\n  *\n  * @param   Object  headers  Response headers\n  * @return  Void\n  */\n\tconstructor() {\n\t\tlet init = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined;\n\n\t\tthis[MAP] = Object.create(null);\n\n\t\tif (init instanceof Headers) {\n\t\t\tconst rawHeaders = init.raw();\n\t\t\tconst headerNames = Object.keys(rawHeaders);\n\n\t\t\tfor (const headerName of headerNames) {\n\t\t\t\tfor (const value of rawHeaders[headerName]) {\n\t\t\t\t\tthis.append(headerName, value);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\t// We don't worry about converting prop to ByteString here as append()\n\t\t// will handle it.\n\t\tif (init == null) ; else if (typeof init === 'object') {\n\t\t\tconst method = init[Symbol.iterator];\n\t\t\tif (method != null) {\n\t\t\t\tif (typeof method !== 'function') {\n\t\t\t\t\tthrow new TypeError('Header pairs must be iterable');\n\t\t\t\t}\n\n\t\t\t\t// sequence<sequence<ByteString>>\n\t\t\t\t// Note: per spec we have to first exhaust the lists then process them\n\t\t\t\tconst pairs = [];\n\t\t\t\tfor (const pair of init) {\n\t\t\t\t\tif (typeof pair !== 'object' || typeof pair[Symbol.iterator] !== 'function') {\n\t\t\t\t\t\tthrow new TypeError('Each header pair must be iterable');\n\t\t\t\t\t}\n\t\t\t\t\tpairs.push(Array.from(pair));\n\t\t\t\t}\n\n\t\t\t\tfor (const pair of pairs) {\n\t\t\t\t\tif (pair.length !== 2) {\n\t\t\t\t\t\tthrow new TypeError('Each header pair must be a name/value tuple');\n\t\t\t\t\t}\n\t\t\t\t\tthis.append(pair[0], pair[1]);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// record<ByteString, ByteString>\n\t\t\t\tfor (const key of Object.keys(init)) {\n\t\t\t\t\tconst value = init[key];\n\t\t\t\t\tthis.append(key, value);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tthrow new TypeError('Provided initializer must be an object');\n\t\t}\n\t}\n\n\t/**\n  * Return combined header value given name\n  *\n  * @param   String  name  Header name\n  * @return  Mixed\n  */\n\tget(name) {\n\t\tname = `${name}`;\n\t\tvalidateName(name);\n\t\tconst key = find(this[MAP], name);\n\t\tif (key === undefined) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn this[MAP][key].join(', ');\n\t}\n\n\t/**\n  * Iterate over all headers\n  *\n  * @param   Function  callback  Executed for each item with parameters (value, name, thisArg)\n  * @param   Boolean   thisArg   `this` context for callback function\n  * @return  Void\n  */\n\tforEach(callback) {\n\t\tlet thisArg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;\n\n\t\tlet pairs = getHeaders(this);\n\t\tlet i = 0;\n\t\twhile (i < pairs.length) {\n\t\t\tvar _pairs$i = pairs[i];\n\t\t\tconst name = _pairs$i[0],\n\t\t\t      value = _pairs$i[1];\n\n\t\t\tcallback.call(thisArg, value, name, this);\n\t\t\tpairs = getHeaders(this);\n\t\t\ti++;\n\t\t}\n\t}\n\n\t/**\n  * Overwrite header values given name\n  *\n  * @param   String  name   Header name\n  * @param   String  value  Header value\n  * @return  Void\n  */\n\tset(name, value) {\n\t\tname = `${name}`;\n\t\tvalue = `${value}`;\n\t\tvalidateName(name);\n\t\tvalidateValue(value);\n\t\tconst key = find(this[MAP], name);\n\t\tthis[MAP][key !== undefined ? key : name] = [value];\n\t}\n\n\t/**\n  * Append a value onto existing header\n  *\n  * @param   String  name   Header name\n  * @param   String  value  Header value\n  * @return  Void\n  */\n\tappend(name, value) {\n\t\tname = `${name}`;\n\t\tvalue = `${value}`;\n\t\tvalidateName(name);\n\t\tvalidateValue(value);\n\t\tconst key = find(this[MAP], name);\n\t\tif (key !== undefined) {\n\t\t\tthis[MAP][key].push(value);\n\t\t} else {\n\t\t\tthis[MAP][name] = [value];\n\t\t}\n\t}\n\n\t/**\n  * Check for header name existence\n  *\n  * @param   String   name  Header name\n  * @return  Boolean\n  */\n\thas(name) {\n\t\tname = `${name}`;\n\t\tvalidateName(name);\n\t\treturn find(this[MAP], name) !== undefined;\n\t}\n\n\t/**\n  * Delete all header values given name\n  *\n  * @param   String  name  Header name\n  * @return  Void\n  */\n\tdelete(name) {\n\t\tname = `${name}`;\n\t\tvalidateName(name);\n\t\tconst key = find(this[MAP], name);\n\t\tif (key !== undefined) {\n\t\t\tdelete this[MAP][key];\n\t\t}\n\t}\n\n\t/**\n  * Return raw headers (non-spec api)\n  *\n  * @return  Object\n  */\n\traw() {\n\t\treturn this[MAP];\n\t}\n\n\t/**\n  * Get an iterator on keys.\n  *\n  * @return  Iterator\n  */\n\tkeys() {\n\t\treturn createHeadersIterator(this, 'key');\n\t}\n\n\t/**\n  * Get an iterator on values.\n  *\n  * @return  Iterator\n  */\n\tvalues() {\n\t\treturn createHeadersIterator(this, 'value');\n\t}\n\n\t/**\n  * Get an iterator on entries.\n  *\n  * This is the default iterator of the Headers object.\n  *\n  * @return  Iterator\n  */\n\t[Symbol.iterator]() {\n\t\treturn createHeadersIterator(this, 'key+value');\n\t}\n}\nHeaders.prototype.entries = Headers.prototype[Symbol.iterator];\n\nObject.defineProperty(Headers.prototype, Symbol.toStringTag, {\n\tvalue: 'Headers',\n\twritable: false,\n\tenumerable: false,\n\tconfigurable: true\n});\n\nObject.defineProperties(Headers.prototype, {\n\tget: { enumerable: true },\n\tforEach: { enumerable: true },\n\tset: { enumerable: true },\n\tappend: { enumerable: true },\n\thas: { enumerable: true },\n\tdelete: { enumerable: true },\n\tkeys: { enumerable: true },\n\tvalues: { enumerable: true },\n\tentries: { enumerable: true }\n});\n\nfunction getHeaders(headers) {\n\tlet kind = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'key+value';\n\n\tconst keys = Object.keys(headers[MAP]).sort();\n\treturn keys.map(kind === 'key' ? function (k) {\n\t\treturn k.toLowerCase();\n\t} : kind === 'value' ? function (k) {\n\t\treturn headers[MAP][k].join(', ');\n\t} : function (k) {\n\t\treturn [k.toLowerCase(), headers[MAP][k].join(', ')];\n\t});\n}\n\nconst INTERNAL = Symbol('internal');\n\nfunction createHeadersIterator(target, kind) {\n\tconst iterator = Object.create(HeadersIteratorPrototype);\n\titerator[INTERNAL] = {\n\t\ttarget,\n\t\tkind,\n\t\tindex: 0\n\t};\n\treturn iterator;\n}\n\nconst HeadersIteratorPrototype = Object.setPrototypeOf({\n\tnext() {\n\t\t// istanbul ignore if\n\t\tif (!this || Object.getPrototypeOf(this) !== HeadersIteratorPrototype) {\n\t\t\tthrow new TypeError('Value of `this` is not a HeadersIterator');\n\t\t}\n\n\t\tvar _INTERNAL = this[INTERNAL];\n\t\tconst target = _INTERNAL.target,\n\t\t      kind = _INTERNAL.kind,\n\t\t      index = _INTERNAL.index;\n\n\t\tconst values = getHeaders(target, kind);\n\t\tconst len = values.length;\n\t\tif (index >= len) {\n\t\t\treturn {\n\t\t\t\tvalue: undefined,\n\t\t\t\tdone: true\n\t\t\t};\n\t\t}\n\n\t\tthis[INTERNAL].index = index + 1;\n\n\t\treturn {\n\t\t\tvalue: values[index],\n\t\t\tdone: false\n\t\t};\n\t}\n}, Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]())));\n\nObject.defineProperty(HeadersIteratorPrototype, Symbol.toStringTag, {\n\tvalue: 'HeadersIterator',\n\twritable: false,\n\tenumerable: false,\n\tconfigurable: true\n});\n\n/**\n * Export the Headers object in a form that Node.js can consume.\n *\n * @param   Headers  headers\n * @return  Object\n */\nfunction exportNodeCompatibleHeaders(headers) {\n\tconst obj = Object.assign({ __proto__: null }, headers[MAP]);\n\n\t// http.request() only supports string as Host header. This hack makes\n\t// specifying custom Host header possible.\n\tconst hostHeaderKey = find(headers[MAP], 'Host');\n\tif (hostHeaderKey !== undefined) {\n\t\tobj[hostHeaderKey] = obj[hostHeaderKey][0];\n\t}\n\n\treturn obj;\n}\n\n/**\n * Create a Headers object from an object of headers, ignoring those that do\n * not conform to HTTP grammar productions.\n *\n * @param   Object  obj  Object of headers\n * @return  Headers\n */\nfunction createHeadersLenient(obj) {\n\tconst headers = new Headers();\n\tfor (const name of Object.keys(obj)) {\n\t\tif (invalidTokenRegex.test(name)) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (Array.isArray(obj[name])) {\n\t\t\tfor (const val of obj[name]) {\n\t\t\t\tif (invalidHeaderCharRegex.test(val)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (headers[MAP][name] === undefined) {\n\t\t\t\t\theaders[MAP][name] = [val];\n\t\t\t\t} else {\n\t\t\t\t\theaders[MAP][name].push(val);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (!invalidHeaderCharRegex.test(obj[name])) {\n\t\t\theaders[MAP][name] = [obj[name]];\n\t\t}\n\t}\n\treturn headers;\n}\n\nconst INTERNALS$1 = Symbol('Response internals');\n\n// fix an issue where \"STATUS_CODES\" aren't a named export for node <10\nconst STATUS_CODES = http.STATUS_CODES;\n\n/**\n * Response class\n *\n * @param   Stream  body  Readable stream\n * @param   Object  opts  Response options\n * @return  Void\n */\nclass Response {\n\tconstructor() {\n\t\tlet body = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n\t\tlet opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n\t\tBody.call(this, body, opts);\n\n\t\tconst status = opts.status || 200;\n\t\tconst headers = new Headers(opts.headers);\n\n\t\tif (body != null && !headers.has('Content-Type')) {\n\t\t\tconst contentType = extractContentType(body);\n\t\t\tif (contentType) {\n\t\t\t\theaders.append('Content-Type', contentType);\n\t\t\t}\n\t\t}\n\n\t\tthis[INTERNALS$1] = {\n\t\t\turl: opts.url,\n\t\t\tstatus,\n\t\t\tstatusText: opts.statusText || STATUS_CODES[status],\n\t\t\theaders,\n\t\t\tcounter: opts.counter\n\t\t};\n\t}\n\n\tget url() {\n\t\treturn this[INTERNALS$1].url || '';\n\t}\n\n\tget status() {\n\t\treturn this[INTERNALS$1].status;\n\t}\n\n\t/**\n  * Convenience property representing if the request ended normally\n  */\n\tget ok() {\n\t\treturn this[INTERNALS$1].status >= 200 && this[INTERNALS$1].status < 300;\n\t}\n\n\tget redirected() {\n\t\treturn this[INTERNALS$1].counter > 0;\n\t}\n\n\tget statusText() {\n\t\treturn this[INTERNALS$1].statusText;\n\t}\n\n\tget headers() {\n\t\treturn this[INTERNALS$1].headers;\n\t}\n\n\t/**\n  * Clone this response\n  *\n  * @return  Response\n  */\n\tclone() {\n\t\treturn new Response(clone(this), {\n\t\t\turl: this.url,\n\t\t\tstatus: this.status,\n\t\t\tstatusText: this.statusText,\n\t\t\theaders: this.headers,\n\t\t\tok: this.ok,\n\t\t\tredirected: this.redirected\n\t\t});\n\t}\n}\n\nBody.mixIn(Response.prototype);\n\nObject.defineProperties(Response.prototype, {\n\turl: { enumerable: true },\n\tstatus: { enumerable: true },\n\tok: { enumerable: true },\n\tredirected: { enumerable: true },\n\tstatusText: { enumerable: true },\n\theaders: { enumerable: true },\n\tclone: { enumerable: true }\n});\n\nObject.defineProperty(Response.prototype, Symbol.toStringTag, {\n\tvalue: 'Response',\n\twritable: false,\n\tenumerable: false,\n\tconfigurable: true\n});\n\nconst INTERNALS$2 = Symbol('Request internals');\nconst URL = Url.URL || whatwgUrl.URL;\n\n// fix an issue where \"format\", \"parse\" aren't a named export for node <10\nconst parse_url = Url.parse;\nconst format_url = Url.format;\n\n/**\n * Wrapper around `new URL` to handle arbitrary URLs\n *\n * @param  {string} urlStr\n * @return {void}\n */\nfunction parseURL(urlStr) {\n\t/*\n \tCheck whether the URL is absolute or not\n \t\tScheme: https://tools.ietf.org/html/rfc3986#section-3.1\n \tAbsolute URL: https://tools.ietf.org/html/rfc3986#section-4.3\n */\n\tif (/^[a-zA-Z][a-zA-Z\\d+\\-.]*:/.exec(urlStr)) {\n\t\turlStr = new URL(urlStr).toString();\n\t}\n\n\t// Fallback to old implementation for arbitrary URLs\n\treturn parse_url(urlStr);\n}\n\nconst streamDestructionSupported = 'destroy' in Stream.Readable.prototype;\n\n/**\n * Check if a value is an instance of Request.\n *\n * @param   Mixed   input\n * @return  Boolean\n */\nfunction isRequest(input) {\n\treturn typeof input === 'object' && typeof input[INTERNALS$2] === 'object';\n}\n\nfunction isAbortSignal(signal) {\n\tconst proto = signal && typeof signal === 'object' && Object.getPrototypeOf(signal);\n\treturn !!(proto && proto.constructor.name === 'AbortSignal');\n}\n\n/**\n * Request class\n *\n * @param   Mixed   input  Url or Request instance\n * @param   Object  init   Custom options\n * @return  Void\n */\nclass Request {\n\tconstructor(input) {\n\t\tlet init = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n\t\tlet parsedURL;\n\n\t\t// normalize input\n\t\tif (!isRequest(input)) {\n\t\t\tif (input && input.href) {\n\t\t\t\t// in order to support Node.js' Url objects; though WHATWG's URL objects\n\t\t\t\t// will fall into this branch also (since their `toString()` will return\n\t\t\t\t// `href` property anyway)\n\t\t\t\tparsedURL = parseURL(input.href);\n\t\t\t} else {\n\t\t\t\t// coerce input to a string before attempting to parse\n\t\t\t\tparsedURL = parseURL(`${input}`);\n\t\t\t}\n\t\t\tinput = {};\n\t\t} else {\n\t\t\tparsedURL = parseURL(input.url);\n\t\t}\n\n\t\tlet method = init.method || input.method || 'GET';\n\t\tmethod = method.toUpperCase();\n\n\t\tif ((init.body != null || isRequest(input) && input.body !== null) && (method === 'GET' || method === 'HEAD')) {\n\t\t\tthrow new TypeError('Request with GET/HEAD method cannot have body');\n\t\t}\n\n\t\tlet inputBody = init.body != null ? init.body : isRequest(input) && input.body !== null ? clone(input) : null;\n\n\t\tBody.call(this, inputBody, {\n\t\t\ttimeout: init.timeout || input.timeout || 0,\n\t\t\tsize: init.size || input.size || 0\n\t\t});\n\n\t\tconst headers = new Headers(init.headers || input.headers || {});\n\n\t\tif (inputBody != null && !headers.has('Content-Type')) {\n\t\t\tconst contentType = extractContentType(inputBody);\n\t\t\tif (contentType) {\n\t\t\t\theaders.append('Content-Type', contentType);\n\t\t\t}\n\t\t}\n\n\t\tlet signal = isRequest(input) ? input.signal : null;\n\t\tif ('signal' in init) signal = init.signal;\n\n\t\tif (signal != null && !isAbortSignal(signal)) {\n\t\t\tthrow new TypeError('Expected signal to be an instanceof AbortSignal');\n\t\t}\n\n\t\tthis[INTERNALS$2] = {\n\t\t\tmethod,\n\t\t\tredirect: init.redirect || input.redirect || 'follow',\n\t\t\theaders,\n\t\t\tparsedURL,\n\t\t\tsignal\n\t\t};\n\n\t\t// node-fetch-only options\n\t\tthis.follow = init.follow !== undefined ? init.follow : input.follow !== undefined ? input.follow : 20;\n\t\tthis.compress = init.compress !== undefined ? init.compress : input.compress !== undefined ? input.compress : true;\n\t\tthis.counter = init.counter || input.counter || 0;\n\t\tthis.agent = init.agent || input.agent;\n\t}\n\n\tget method() {\n\t\treturn this[INTERNALS$2].method;\n\t}\n\n\tget url() {\n\t\treturn format_url(this[INTERNALS$2].parsedURL);\n\t}\n\n\tget headers() {\n\t\treturn this[INTERNALS$2].headers;\n\t}\n\n\tget redirect() {\n\t\treturn this[INTERNALS$2].redirect;\n\t}\n\n\tget signal() {\n\t\treturn this[INTERNALS$2].signal;\n\t}\n\n\t/**\n  * Clone this request\n  *\n  * @return  Request\n  */\n\tclone() {\n\t\treturn new Request(this);\n\t}\n}\n\nBody.mixIn(Request.prototype);\n\nObject.defineProperty(Request.prototype, Symbol.toStringTag, {\n\tvalue: 'Request',\n\twritable: false,\n\tenumerable: false,\n\tconfigurable: true\n});\n\nObject.defineProperties(Request.prototype, {\n\tmethod: { enumerable: true },\n\turl: { enumerable: true },\n\theaders: { enumerable: true },\n\tredirect: { enumerable: true },\n\tclone: { enumerable: true },\n\tsignal: { enumerable: true }\n});\n\n/**\n * Convert a Request to Node.js http request options.\n *\n * @param   Request  A Request instance\n * @return  Object   The options object to be passed to http.request\n */\nfunction getNodeRequestOptions(request) {\n\tconst parsedURL = request[INTERNALS$2].parsedURL;\n\tconst headers = new Headers(request[INTERNALS$2].headers);\n\n\t// fetch step 1.3\n\tif (!headers.has('Accept')) {\n\t\theaders.set('Accept', '*/*');\n\t}\n\n\t// Basic fetch\n\tif (!parsedURL.protocol || !parsedURL.hostname) {\n\t\tthrow new TypeError('Only absolute URLs are supported');\n\t}\n\n\tif (!/^https?:$/.test(parsedURL.protocol)) {\n\t\tthrow new TypeError('Only HTTP(S) protocols are supported');\n\t}\n\n\tif (request.signal && request.body instanceof Stream.Readable && !streamDestructionSupported) {\n\t\tthrow new Error('Cancellation of streamed requests with AbortSignal is not supported in node < 8');\n\t}\n\n\t// HTTP-network-or-cache fetch steps 2.4-2.7\n\tlet contentLengthValue = null;\n\tif (request.body == null && /^(POST|PUT)$/i.test(request.method)) {\n\t\tcontentLengthValue = '0';\n\t}\n\tif (request.body != null) {\n\t\tconst totalBytes = getTotalBytes(request);\n\t\tif (typeof totalBytes === 'number') {\n\t\t\tcontentLengthValue = String(totalBytes);\n\t\t}\n\t}\n\tif (contentLengthValue) {\n\t\theaders.set('Content-Length', contentLengthValue);\n\t}\n\n\t// HTTP-network-or-cache fetch step 2.11\n\tif (!headers.has('User-Agent')) {\n\t\theaders.set('User-Agent', 'node-fetch/1.0 (+https://github.com/bitinn/node-fetch)');\n\t}\n\n\t// HTTP-network-or-cache fetch step 2.15\n\tif (request.compress && !headers.has('Accept-Encoding')) {\n\t\theaders.set('Accept-Encoding', 'gzip,deflate');\n\t}\n\n\tlet agent = request.agent;\n\tif (typeof agent === 'function') {\n\t\tagent = agent(parsedURL);\n\t}\n\n\tif (!headers.has('Connection') && !agent) {\n\t\theaders.set('Connection', 'close');\n\t}\n\n\t// HTTP-network fetch step 4.2\n\t// chunked encoding is handled by Node.js\n\n\treturn Object.assign({}, parsedURL, {\n\t\tmethod: request.method,\n\t\theaders: exportNodeCompatibleHeaders(headers),\n\t\tagent\n\t});\n}\n\n/**\n * abort-error.js\n *\n * AbortError interface for cancelled requests\n */\n\n/**\n * Create AbortError instance\n *\n * @param   String      message      Error message for human\n * @return  AbortError\n */\nfunction AbortError(message) {\n  Error.call(this, message);\n\n  this.type = 'aborted';\n  this.message = message;\n\n  // hide custom error implementation details from end-users\n  Error.captureStackTrace(this, this.constructor);\n}\n\nAbortError.prototype = Object.create(Error.prototype);\nAbortError.prototype.constructor = AbortError;\nAbortError.prototype.name = 'AbortError';\n\nconst URL$1 = Url.URL || whatwgUrl.URL;\n\n// fix an issue where \"PassThrough\", \"resolve\" aren't a named export for node <10\nconst PassThrough$1 = Stream.PassThrough;\n\nconst isDomainOrSubdomain = function isDomainOrSubdomain(destination, original) {\n\tconst orig = new URL$1(original).hostname;\n\tconst dest = new URL$1(destination).hostname;\n\n\treturn orig === dest || orig[orig.length - dest.length - 1] === '.' && orig.endsWith(dest);\n};\n\n/**\n * isSameProtocol reports whether the two provided URLs use the same protocol.\n *\n * Both domains must already be in canonical form.\n * @param {string|URL} original\n * @param {string|URL} destination\n */\nconst isSameProtocol = function isSameProtocol(destination, original) {\n\tconst orig = new URL$1(original).protocol;\n\tconst dest = new URL$1(destination).protocol;\n\n\treturn orig === dest;\n};\n\n/**\n * Fetch function\n *\n * @param   Mixed    url   Absolute url or Request instance\n * @param   Object   opts  Fetch options\n * @return  Promise\n */\nfunction fetch(url, opts) {\n\n\t// allow custom promise\n\tif (!fetch.Promise) {\n\t\tthrow new Error('native promise missing, set fetch.Promise to your favorite alternative');\n\t}\n\n\tBody.Promise = fetch.Promise;\n\n\t// wrap http.request into fetch\n\treturn new fetch.Promise(function (resolve, reject) {\n\t\t// build request object\n\t\tconst request = new Request(url, opts);\n\t\tconst options = getNodeRequestOptions(request);\n\n\t\tconst send = (options.protocol === 'https:' ? https : http).request;\n\t\tconst signal = request.signal;\n\n\t\tlet response = null;\n\n\t\tconst abort = function abort() {\n\t\t\tlet error = new AbortError('The user aborted a request.');\n\t\t\treject(error);\n\t\t\tif (request.body && request.body instanceof Stream.Readable) {\n\t\t\t\tdestroyStream(request.body, error);\n\t\t\t}\n\t\t\tif (!response || !response.body) return;\n\t\t\tresponse.body.emit('error', error);\n\t\t};\n\n\t\tif (signal && signal.aborted) {\n\t\t\tabort();\n\t\t\treturn;\n\t\t}\n\n\t\tconst abortAndFinalize = function abortAndFinalize() {\n\t\t\tabort();\n\t\t\tfinalize();\n\t\t};\n\n\t\t// send request\n\t\tconst req = send(options);\n\t\tlet reqTimeout;\n\n\t\tif (signal) {\n\t\t\tsignal.addEventListener('abort', abortAndFinalize);\n\t\t}\n\n\t\tfunction finalize() {\n\t\t\treq.abort();\n\t\t\tif (signal) signal.removeEventListener('abort', abortAndFinalize);\n\t\t\tclearTimeout(reqTimeout);\n\t\t}\n\n\t\tif (request.timeout) {\n\t\t\treq.once('socket', function (socket) {\n\t\t\t\treqTimeout = setTimeout(function () {\n\t\t\t\t\treject(new FetchError(`network timeout at: ${request.url}`, 'request-timeout'));\n\t\t\t\t\tfinalize();\n\t\t\t\t}, request.timeout);\n\t\t\t});\n\t\t}\n\n\t\treq.on('error', function (err) {\n\t\t\treject(new FetchError(`request to ${request.url} failed, reason: ${err.message}`, 'system', err));\n\n\t\t\tif (response && response.body) {\n\t\t\t\tdestroyStream(response.body, err);\n\t\t\t}\n\n\t\t\tfinalize();\n\t\t});\n\n\t\tfixResponseChunkedTransferBadEnding(req, function (err) {\n\t\t\tif (signal && signal.aborted) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (response && response.body) {\n\t\t\t\tdestroyStream(response.body, err);\n\t\t\t}\n\t\t});\n\n\t\t/* c8 ignore next 18 */\n\t\tif (parseInt(process.version.substring(1)) < 14) {\n\t\t\t// Before Node.js 14, pipeline() does not fully support async iterators and does not always\n\t\t\t// properly handle when the socket close/end events are out of order.\n\t\t\treq.on('socket', function (s) {\n\t\t\t\ts.addListener('close', function (hadError) {\n\t\t\t\t\t// if a data listener is still present we didn't end cleanly\n\t\t\t\t\tconst hasDataListener = s.listenerCount('data') > 0;\n\n\t\t\t\t\t// if end happened before close but the socket didn't emit an error, do it now\n\t\t\t\t\tif (response && hasDataListener && !hadError && !(signal && signal.aborted)) {\n\t\t\t\t\t\tconst err = new Error('Premature close');\n\t\t\t\t\t\terr.code = 'ERR_STREAM_PREMATURE_CLOSE';\n\t\t\t\t\t\tresponse.body.emit('error', err);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\treq.on('response', function (res) {\n\t\t\tclearTimeout(reqTimeout);\n\n\t\t\tconst headers = createHeadersLenient(res.headers);\n\n\t\t\t// HTTP fetch step 5\n\t\t\tif (fetch.isRedirect(res.statusCode)) {\n\t\t\t\t// HTTP fetch step 5.2\n\t\t\t\tconst location = headers.get('Location');\n\n\t\t\t\t// HTTP fetch step 5.3\n\t\t\t\tlet locationURL = null;\n\t\t\t\ttry {\n\t\t\t\t\tlocationURL = location === null ? null : new URL$1(location, request.url).toString();\n\t\t\t\t} catch (err) {\n\t\t\t\t\t// error here can only be invalid URL in Location: header\n\t\t\t\t\t// do not throw when options.redirect == manual\n\t\t\t\t\t// let the user extract the errorneous redirect URL\n\t\t\t\t\tif (request.redirect !== 'manual') {\n\t\t\t\t\t\treject(new FetchError(`uri requested responds with an invalid redirect URL: ${location}`, 'invalid-redirect'));\n\t\t\t\t\t\tfinalize();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// HTTP fetch step 5.5\n\t\t\t\tswitch (request.redirect) {\n\t\t\t\t\tcase 'error':\n\t\t\t\t\t\treject(new FetchError(`uri requested responds with a redirect, redirect mode is set to error: ${request.url}`, 'no-redirect'));\n\t\t\t\t\t\tfinalize();\n\t\t\t\t\t\treturn;\n\t\t\t\t\tcase 'manual':\n\t\t\t\t\t\t// node-fetch-specific step: make manual redirect a bit easier to use by setting the Location header value to the resolved URL.\n\t\t\t\t\t\tif (locationURL !== null) {\n\t\t\t\t\t\t\t// handle corrupted header\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\theaders.set('Location', locationURL);\n\t\t\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\t\t\t// istanbul ignore next: nodejs server prevent invalid response headers, we can't test this through normal request\n\t\t\t\t\t\t\t\treject(err);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'follow':\n\t\t\t\t\t\t// HTTP-redirect fetch step 2\n\t\t\t\t\t\tif (locationURL === null) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// HTTP-redirect fetch step 5\n\t\t\t\t\t\tif (request.counter >= request.follow) {\n\t\t\t\t\t\t\treject(new FetchError(`maximum redirect reached at: ${request.url}`, 'max-redirect'));\n\t\t\t\t\t\t\tfinalize();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// HTTP-redirect fetch step 6 (counter increment)\n\t\t\t\t\t\t// Create a new Request object.\n\t\t\t\t\t\tconst requestOpts = {\n\t\t\t\t\t\t\theaders: new Headers(request.headers),\n\t\t\t\t\t\t\tfollow: request.follow,\n\t\t\t\t\t\t\tcounter: request.counter + 1,\n\t\t\t\t\t\t\tagent: request.agent,\n\t\t\t\t\t\t\tcompress: request.compress,\n\t\t\t\t\t\t\tmethod: request.method,\n\t\t\t\t\t\t\tbody: request.body,\n\t\t\t\t\t\t\tsignal: request.signal,\n\t\t\t\t\t\t\ttimeout: request.timeout,\n\t\t\t\t\t\t\tsize: request.size\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tif (!isDomainOrSubdomain(request.url, locationURL) || !isSameProtocol(request.url, locationURL)) {\n\t\t\t\t\t\t\tfor (const name of ['authorization', 'www-authenticate', 'cookie', 'cookie2']) {\n\t\t\t\t\t\t\t\trequestOpts.headers.delete(name);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// HTTP-redirect fetch step 9\n\t\t\t\t\t\tif (res.statusCode !== 303 && request.body && getTotalBytes(request) === null) {\n\t\t\t\t\t\t\treject(new FetchError('Cannot follow redirect with body being a readable stream', 'unsupported-redirect'));\n\t\t\t\t\t\t\tfinalize();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// HTTP-redirect fetch step 11\n\t\t\t\t\t\tif (res.statusCode === 303 || (res.statusCode === 301 || res.statusCode === 302) && request.method === 'POST') {\n\t\t\t\t\t\t\trequestOpts.method = 'GET';\n\t\t\t\t\t\t\trequestOpts.body = undefined;\n\t\t\t\t\t\t\trequestOpts.headers.delete('content-length');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// HTTP-redirect fetch step 15\n\t\t\t\t\t\tresolve(fetch(new Request(locationURL, requestOpts)));\n\t\t\t\t\t\tfinalize();\n\t\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// prepare response\n\t\t\tres.once('end', function () {\n\t\t\t\tif (signal) signal.removeEventListener('abort', abortAndFinalize);\n\t\t\t});\n\t\t\tlet body = res.pipe(new PassThrough$1());\n\n\t\t\tconst response_options = {\n\t\t\t\turl: request.url,\n\t\t\t\tstatus: res.statusCode,\n\t\t\t\tstatusText: res.statusMessage,\n\t\t\t\theaders: headers,\n\t\t\t\tsize: request.size,\n\t\t\t\ttimeout: request.timeout,\n\t\t\t\tcounter: request.counter\n\t\t\t};\n\n\t\t\t// HTTP-network fetch step 12.1.1.3\n\t\t\tconst codings = headers.get('Content-Encoding');\n\n\t\t\t// HTTP-network fetch step 12.1.1.4: handle content codings\n\n\t\t\t// in following scenarios we ignore compression support\n\t\t\t// 1. compression support is disabled\n\t\t\t// 2. HEAD request\n\t\t\t// 3. no Content-Encoding header\n\t\t\t// 4. no content response (204)\n\t\t\t// 5. content not modified response (304)\n\t\t\tif (!request.compress || request.method === 'HEAD' || codings === null || res.statusCode === 204 || res.statusCode === 304) {\n\t\t\t\tresponse = new Response(body, response_options);\n\t\t\t\tresolve(response);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// For Node v6+\n\t\t\t// Be less strict when decoding compressed responses, since sometimes\n\t\t\t// servers send slightly invalid responses that are still accepted\n\t\t\t// by common browsers.\n\t\t\t// Always using Z_SYNC_FLUSH is what cURL does.\n\t\t\tconst zlibOptions = {\n\t\t\t\tflush: zlib.Z_SYNC_FLUSH,\n\t\t\t\tfinishFlush: zlib.Z_SYNC_FLUSH\n\t\t\t};\n\n\t\t\t// for gzip\n\t\t\tif (codings == 'gzip' || codings == 'x-gzip') {\n\t\t\t\tbody = body.pipe(zlib.createGunzip(zlibOptions));\n\t\t\t\tresponse = new Response(body, response_options);\n\t\t\t\tresolve(response);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// for deflate\n\t\t\tif (codings == 'deflate' || codings == 'x-deflate') {\n\t\t\t\t// handle the infamous raw deflate response from old servers\n\t\t\t\t// a hack for old IIS and Apache servers\n\t\t\t\tconst raw = res.pipe(new PassThrough$1());\n\t\t\t\traw.once('data', function (chunk) {\n\t\t\t\t\t// see http://stackoverflow.com/questions/37519828\n\t\t\t\t\tif ((chunk[0] & 0x0F) === 0x08) {\n\t\t\t\t\t\tbody = body.pipe(zlib.createInflate());\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbody = body.pipe(zlib.createInflateRaw());\n\t\t\t\t\t}\n\t\t\t\t\tresponse = new Response(body, response_options);\n\t\t\t\t\tresolve(response);\n\t\t\t\t});\n\t\t\t\traw.on('end', function () {\n\t\t\t\t\t// some old IIS servers return zero-length OK deflate responses, so 'data' is never emitted.\n\t\t\t\t\tif (!response) {\n\t\t\t\t\t\tresponse = new Response(body, response_options);\n\t\t\t\t\t\tresolve(response);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// for br\n\t\t\tif (codings == 'br' && typeof zlib.createBrotliDecompress === 'function') {\n\t\t\t\tbody = body.pipe(zlib.createBrotliDecompress());\n\t\t\t\tresponse = new Response(body, response_options);\n\t\t\t\tresolve(response);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// otherwise, use response as-is\n\t\t\tresponse = new Response(body, response_options);\n\t\t\tresolve(response);\n\t\t});\n\n\t\twriteToStream(req, request);\n\t});\n}\nfunction fixResponseChunkedTransferBadEnding(request, errorCallback) {\n\tlet socket;\n\n\trequest.on('socket', function (s) {\n\t\tsocket = s;\n\t});\n\n\trequest.on('response', function (response) {\n\t\tconst headers = response.headers;\n\n\t\tif (headers['transfer-encoding'] === 'chunked' && !headers['content-length']) {\n\t\t\tresponse.once('close', function (hadError) {\n\t\t\t\t// if a data listener is still present we didn't end cleanly\n\t\t\t\tconst hasDataListener = socket.listenerCount('data') > 0;\n\n\t\t\t\tif (hasDataListener && !hadError) {\n\t\t\t\t\tconst err = new Error('Premature close');\n\t\t\t\t\terr.code = 'ERR_STREAM_PREMATURE_CLOSE';\n\t\t\t\t\terrorCallback(err);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n}\n\nfunction destroyStream(stream, err) {\n\tif (stream.destroy) {\n\t\tstream.destroy(err);\n\t} else {\n\t\t// node < 8\n\t\tstream.emit('error', err);\n\t\tstream.end();\n\t}\n}\n\n/**\n * Redirect code matching\n *\n * @param   Number   code  Status code\n * @return  Boolean\n */\nfetch.isRedirect = function (code) {\n\treturn code === 301 || code === 302 || code === 303 || code === 307 || code === 308;\n};\n\n// expose Promise\nfetch.Promise = global.Promise;\n\nexport default fetch;\nexport { Headers, Request, Response, FetchError };\n/lib/index.jsŲW'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nfunction _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }\n\nvar Stream = _interopDefault(require('stream'));\nvar http = _interopDefault(require('http'));\nvar Url = _interopDefault(require('url'));\nvar whatwgUrl = _interopDefault(require('whatwg-url'));\nvar https = _interopDefault(require('https'));\nvar zlib = _interopDefault(require('zlib'));\n\n// Based on https://github.com/tmpvar/jsdom/blob/aa85b2abf07766ff7bf5c1f6daafb3726f2f2db5/lib/jsdom/living/blob.js\n\n// fix for \"Readable\" isn't a named export issue\nconst Readable = Stream.Readable;\n\nconst BUFFER = Symbol('buffer');\nconst TYPE = Symbol('type');\n\nclass Blob {\n\tconstructor() {\n\t\tthis[TYPE] = '';\n\n\t\tconst blobParts = arguments[0];\n\t\tconst options = arguments[1];\n\n\t\tconst buffers = [];\n\t\tlet size = 0;\n\n\t\tif (blobParts) {\n\t\t\tconst a = blobParts;\n\t\t\tconst length = Number(a.length);\n\t\t\tfor (let i = 0; i < length; i++) {\n\t\t\t\tconst element = a[i];\n\t\t\t\tlet buffer;\n\t\t\t\tif (element instanceof Buffer) {\n\t\t\t\t\tbuffer = element;\n\t\t\t\t} else if (ArrayBuffer.isView(element)) {\n\t\t\t\t\tbuffer = Buffer.from(element.buffer, element.byteOffset, element.byteLength);\n\t\t\t\t} else if (element instanceof ArrayBuffer) {\n\t\t\t\t\tbuffer = Buffer.from(element);\n\t\t\t\t} else if (element instanceof Blob) {\n\t\t\t\t\tbuffer = element[BUFFER];\n\t\t\t\t} else {\n\t\t\t\t\tbuffer = Buffer.from(typeof element === 'string' ? element : String(element));\n\t\t\t\t}\n\t\t\t\tsize += buffer.length;\n\t\t\t\tbuffers.push(buffer);\n\t\t\t}\n\t\t}\n\n\t\tthis[BUFFER] = Buffer.concat(buffers);\n\n\t\tlet type = options && options.type !== undefined && String(options.type).toLowerCase();\n\t\tif (type && !/[^\\u0020-\\u007E]/.test(type)) {\n\t\t\tthis[TYPE] = type;\n\t\t}\n\t}\n\tget size() {\n\t\treturn this[BUFFER].length;\n\t}\n\tget type() {\n\t\treturn this[TYPE];\n\t}\n\ttext() {\n\t\treturn Promise.resolve(this[BUFFER].toString());\n\t}\n\tarrayBuffer() {\n\t\tconst buf = this[BUFFER];\n\t\tconst ab = buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);\n\t\treturn Promise.resolve(ab);\n\t}\n\tstream() {\n\t\tconst readable = new Readable();\n\t\treadable._read = function () {};\n\t\treadable.push(this[BUFFER]);\n\t\treadable.push(null);\n\t\treturn readable;\n\t}\n\ttoString() {\n\t\treturn '[object Blob]';\n\t}\n\tslice() {\n\t\tconst size = this.size;\n\n\t\tconst start = arguments[0];\n\t\tconst end = arguments[1];\n\t\tlet relativeStart, relativeEnd;\n\t\tif (start === undefined) {\n\t\t\trelativeStart = 0;\n\t\t} else if (start < 0) {\n\t\t\trelativeStart = Math.max(size + start, 0);\n\t\t} else {\n\t\t\trelativeStart = Math.min(start, size);\n\t\t}\n\t\tif (end === undefined) {\n\t\t\trelativeEnd = size;\n\t\t} else if (end < 0) {\n\t\t\trelativeEnd = Math.max(size + end, 0);\n\t\t} else {\n\t\t\trelativeEnd = Math.min(end, size);\n\t\t}\n\t\tconst span = Math.max(relativeEnd - relativeStart, 0);\n\n\t\tconst buffer = this[BUFFER];\n\t\tconst slicedBuffer = buffer.slice(relativeStart, relativeStart + span);\n\t\tconst blob = new Blob([], { type: arguments[2] });\n\t\tblob[BUFFER] = slicedBuffer;\n\t\treturn blob;\n\t}\n}\n\nObject.defineProperties(Blob.prototype, {\n\tsize: { enumerable: true },\n\ttype: { enumerable: true },\n\tslice: { enumerable: true }\n});\n\nObject.defineProperty(Blob.prototype, Symbol.toStringTag, {\n\tvalue: 'Blob',\n\twritable: false,\n\tenumerable: false,\n\tconfigurable: true\n});\n\n/**\n * fetch-error.js\n *\n * FetchError interface for operational errors\n */\n\n/**\n * Create FetchError instance\n *\n * @param   String      message      Error message for human\n * @param   String      type         Error type for machine\n * @param   String      systemError  For Node.js system error\n * @return  FetchError\n */\nfunction FetchError(message, type, systemError) {\n  Error.call(this, message);\n\n  this.message = message;\n  this.type = type;\n\n  // when err.type is `system`, err.code contains system error code\n  if (systemError) {\n    this.code = this.errno = systemError.code;\n  }\n\n  // hide custom error implementation details from end-users\n  Error.captureStackTrace(this, this.constructor);\n}\n\nFetchError.prototype = Object.create(Error.prototype);\nFetchError.prototype.constructor = FetchError;\nFetchError.prototype.name = 'FetchError';\n\nlet convert;\ntry {\n\tconvert = require('encoding').convert;\n} catch (e) {}\n\nconst INTERNALS = Symbol('Body internals');\n\n// fix an issue where \"PassThrough\" isn't a named export for node <10\nconst PassThrough = Stream.PassThrough;\n\n/**\n * Body mixin\n *\n * Ref: https://fetch.spec.whatwg.org/#body\n *\n * @param   Stream  body  Readable stream\n * @param   Object  opts  Response options\n * @return  Void\n */\nfunction Body(body) {\n\tvar _this = this;\n\n\tvar _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n\t    _ref$size = _ref.size;\n\n\tlet size = _ref$size === undefined ? 0 : _ref$size;\n\tvar _ref$timeout = _ref.timeout;\n\tlet timeout = _ref$timeout === undefined ? 0 : _ref$timeout;\n\n\tif (body == null) {\n\t\t// body is undefined or null\n\t\tbody = null;\n\t} else if (isURLSearchParams(body)) {\n\t\t// body is a URLSearchParams\n\t\tbody = Buffer.from(body.toString());\n\t} else if (isBlob(body)) ; else if (Buffer.isBuffer(body)) ; else if (Object.prototype.toString.call(body) === '[object ArrayBuffer]') {\n\t\t// body is ArrayBuffer\n\t\tbody = Buffer.from(body);\n\t} else if (ArrayBuffer.isView(body)) {\n\t\t// body is ArrayBufferView\n\t\tbody = Buffer.from(body.buffer, body.byteOffset, body.byteLength);\n\t} else if (body instanceof Stream) ; else {\n\t\t// none of the above\n\t\t// coerce to string then buffer\n\t\tbody = Buffer.from(String(body));\n\t}\n\tthis[INTERNALS] = {\n\t\tbody,\n\t\tdisturbed: false,\n\t\terror: null\n\t};\n\tthis.size = size;\n\tthis.timeout = timeout;\n\n\tif (body instanceof Stream) {\n\t\tbody.on('error', function (err) {\n\t\t\tconst error = err.name === 'AbortError' ? err : new FetchError(`Invalid response body while trying to fetch ${_this.url}: ${err.message}`, 'system', err);\n\t\t\t_this[INTERNALS].error = error;\n\t\t});\n\t}\n}\n\nBody.prototype = {\n\tget body() {\n\t\treturn this[INTERNALS].body;\n\t},\n\n\tget bodyUsed() {\n\t\treturn this[INTERNALS].disturbed;\n\t},\n\n\t/**\n  * Decode response as ArrayBuffer\n  *\n  * @return  Promise\n  */\n\tarrayBuffer() {\n\t\treturn consumeBody.call(this).then(function (buf) {\n\t\t\treturn buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);\n\t\t});\n\t},\n\n\t/**\n  * Return raw response as Blob\n  *\n  * @return Promise\n  */\n\tblob() {\n\t\tlet ct = this.headers && this.headers.get('content-type') || '';\n\t\treturn consumeBody.call(this).then(function (buf) {\n\t\t\treturn Object.assign(\n\t\t\t// Prevent copying\n\t\t\tnew Blob([], {\n\t\t\t\ttype: ct.toLowerCase()\n\t\t\t}), {\n\t\t\t\t[BUFFER]: buf\n\t\t\t});\n\t\t});\n\t},\n\n\t/**\n  * Decode response as json\n  *\n  * @return  Promise\n  */\n\tjson() {\n\t\tvar _this2 = this;\n\n\t\treturn consumeBody.call(this).then(function (buffer) {\n\t\t\ttry {\n\t\t\t\treturn JSON.parse(buffer.toString());\n\t\t\t} catch (err) {\n\t\t\t\treturn Body.Promise.reject(new FetchError(`invalid json response body at ${_this2.url} reason: ${err.message}`, 'invalid-json'));\n\t\t\t}\n\t\t});\n\t},\n\n\t/**\n  * Decode response as text\n  *\n  * @return  Promise\n  */\n\ttext() {\n\t\treturn consumeBody.call(this).then(function (buffer) {\n\t\t\treturn buffer.toString();\n\t\t});\n\t},\n\n\t/**\n  * Decode response as buffer (non-spec api)\n  *\n  * @return  Promise\n  */\n\tbuffer() {\n\t\treturn consumeBody.call(this);\n\t},\n\n\t/**\n  * Decode response as text, while automatically detecting the encoding and\n  * trying to decode to UTF-8 (non-spec api)\n  *\n  * @return  Promise\n  */\n\ttextConverted() {\n\t\tvar _this3 = this;\n\n\t\treturn consumeBody.call(this).then(function (buffer) {\n\t\t\treturn convertBody(buffer, _this3.headers);\n\t\t});\n\t}\n};\n\n// In browsers, all properties are enumerable.\nObject.defineProperties(Body.prototype, {\n\tbody: { enumerable: true },\n\tbodyUsed: { enumerable: true },\n\tarrayBuffer: { enumerable: true },\n\tblob: { enumerable: true },\n\tjson: { enumerable: true },\n\ttext: { enumerable: true }\n});\n\nBody.mixIn = function (proto) {\n\tfor (const name of Object.getOwnPropertyNames(Body.prototype)) {\n\t\t// istanbul ignore else: future proof\n\t\tif (!(name in proto)) {\n\t\t\tconst desc = Object.getOwnPropertyDescriptor(Body.prototype, name);\n\t\t\tObject.defineProperty(proto, name, desc);\n\t\t}\n\t}\n};\n\n/**\n * Consume and convert an entire Body to a Buffer.\n *\n * Ref: https://fetch.spec.whatwg.org/#concept-body-consume-body\n *\n * @return  Promise\n */\nfunction consumeBody() {\n\tvar _this4 = this;\n\n\tif (this[INTERNALS].disturbed) {\n\t\treturn Body.Promise.reject(new TypeError(`body used already for: ${this.url}`));\n\t}\n\n\tthis[INTERNALS].disturbed = true;\n\n\tif (this[INTERNALS].error) {\n\t\treturn Body.Promise.reject(this[INTERNALS].error);\n\t}\n\n\tlet body = this.body;\n\n\t// body is null\n\tif (body === null) {\n\t\treturn Body.Promise.resolve(Buffer.alloc(0));\n\t}\n\n\t// body is blob\n\tif (isBlob(body)) {\n\t\tbody = body.stream();\n\t}\n\n\t// body is buffer\n\tif (Buffer.isBuffer(body)) {\n\t\treturn Body.Promise.resolve(body);\n\t}\n\n\t// istanbul ignore if: should never happen\n\tif (!(body instanceof Stream)) {\n\t\treturn Body.Promise.resolve(Buffer.alloc(0));\n\t}\n\n\t// body is stream\n\t// get ready to actually consume the body\n\tlet accum = [];\n\tlet accumBytes = 0;\n\tlet abort = false;\n\n\treturn new Body.Promise(function (resolve, reject) {\n\t\tlet resTimeout;\n\n\t\t// allow timeout on slow response body\n\t\tif (_this4.timeout) {\n\t\t\tresTimeout = setTimeout(function () {\n\t\t\t\tabort = true;\n\t\t\t\treject(new FetchError(`Response timeout while trying to fetch ${_this4.url} (over ${_this4.timeout}ms)`, 'body-timeout'));\n\t\t\t}, _this4.timeout);\n\t\t}\n\n\t\t// handle stream errors\n\t\tbody.on('error', function (err) {\n\t\t\tif (err.name === 'AbortError') {\n\t\t\t\t// if the request was aborted, reject with this Error\n\t\t\t\tabort = true;\n\t\t\t\treject(err);\n\t\t\t} else {\n\t\t\t\t// other errors, such as incorrect content-encoding\n\t\t\t\treject(new FetchError(`Invalid response body while trying to fetch ${_this4.url}: ${err.message}`, 'system', err));\n\t\t\t}\n\t\t});\n\n\t\tbody.on('data', function (chunk) {\n\t\t\tif (abort || chunk === null) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (_this4.size && accumBytes + chunk.length > _this4.size) {\n\t\t\t\tabort = true;\n\t\t\t\treject(new FetchError(`content size at ${_this4.url} over limit: ${_this4.size}`, 'max-size'));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\taccumBytes += chunk.length;\n\t\t\taccum.push(chunk);\n\t\t});\n\n\t\tbody.on('end', function () {\n\t\t\tif (abort) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tclearTimeout(resTimeout);\n\n\t\t\ttry {\n\t\t\t\tresolve(Buffer.concat(accum, accumBytes));\n\t\t\t} catch (err) {\n\t\t\t\t// handle streams that have accumulated too much data (issue #414)\n\t\t\t\treject(new FetchError(`Could not create Buffer from response body for ${_this4.url}: ${err.message}`, 'system', err));\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Detect buffer encoding and convert to target encoding\n * ref: http://www.w3.org/TR/2011/WD-html5-20110113/parsing.html#determining-the-character-encoding\n *\n * @param   Buffer  buffer    Incoming buffer\n * @param   String  encoding  Target encoding\n * @return  String\n */\nfunction convertBody(buffer, headers) {\n\tif (typeof convert !== 'function') {\n\t\tthrow new Error('The package `encoding` must be installed to use the textConverted() function');\n\t}\n\n\tconst ct = headers.get('content-type');\n\tlet charset = 'utf-8';\n\tlet res, str;\n\n\t// header\n\tif (ct) {\n\t\tres = /charset=([^;]*)/i.exec(ct);\n\t}\n\n\t// no charset in content type, peek at response body for at most 1024 bytes\n\tstr = buffer.slice(0, 1024).toString();\n\n\t// html5\n\tif (!res && str) {\n\t\tres = /<meta.+?charset=(['\"])(.+?)\\1/i.exec(str);\n\t}\n\n\t// html4\n\tif (!res && str) {\n\t\tres = /<meta[\\s]+?http-equiv=(['\"])content-type\\1[\\s]+?content=(['\"])(.+?)\\2/i.exec(str);\n\t\tif (!res) {\n\t\t\tres = /<meta[\\s]+?content=(['\"])(.+?)\\1[\\s]+?http-equiv=(['\"])content-type\\3/i.exec(str);\n\t\t\tif (res) {\n\t\t\t\tres.pop(); // drop last quote\n\t\t\t}\n\t\t}\n\n\t\tif (res) {\n\t\t\tres = /charset=(.*)/i.exec(res.pop());\n\t\t}\n\t}\n\n\t// xml\n\tif (!res && str) {\n\t\tres = /<\\?xml.+?encoding=(['\"])(.+?)\\1/i.exec(str);\n\t}\n\n\t// found charset\n\tif (res) {\n\t\tcharset = res.pop();\n\n\t\t// prevent decode issues when sites use incorrect encoding\n\t\t// ref: https://hsivonen.fi/encoding-menu/\n\t\tif (charset === 'gb2312' || charset === 'gbk') {\n\t\t\tcharset = 'gb18030';\n\t\t}\n\t}\n\n\t// turn raw buffers into a single utf-8 buffer\n\treturn convert(buffer, 'UTF-8', charset).toString();\n}\n\n/**\n * Detect a URLSearchParams object\n * ref: https://github.com/bitinn/node-fetch/issues/296#issuecomment-307598143\n *\n * @param   Object  obj     Object to detect by type or brand\n * @return  String\n */\nfunction isURLSearchParams(obj) {\n\t// Duck-typing as a necessary condition.\n\tif (typeof obj !== 'object' || typeof obj.append !== 'function' || typeof obj.delete !== 'function' || typeof obj.get !== 'function' || typeof obj.getAll !== 'function' || typeof obj.has !== 'function' || typeof obj.set !== 'function') {\n\t\treturn false;\n\t}\n\n\t// Brand-checking and more duck-typing as optional condition.\n\treturn obj.constructor.name === 'URLSearchParams' || Object.prototype.toString.call(obj) === '[object URLSearchParams]' || typeof obj.sort === 'function';\n}\n\n/**\n * Check if `obj` is a W3C `Blob` object (which `File` inherits from)\n * @param  {*} obj\n * @return {boolean}\n */\nfunction isBlob(obj) {\n\treturn typeof obj === 'object' && typeof obj.arrayBuffer === 'function' && typeof obj.type === 'string' && typeof obj.stream === 'function' && typeof obj.constructor === 'function' && typeof obj.constructor.name === 'string' && /^(Blob|File)$/.test(obj.constructor.name) && /^(Blob|File)$/.test(obj[Symbol.toStringTag]);\n}\n\n/**\n * Clone body given Res/Req instance\n *\n * @param   Mixed  instance  Response or Request instance\n * @return  Mixed\n */\nfunction clone(instance) {\n\tlet p1, p2;\n\tlet body = instance.body;\n\n\t// don't allow cloning a used body\n\tif (instance.bodyUsed) {\n\t\tthrow new Error('cannot clone body after it is used');\n\t}\n\n\t// check that body is a stream and not form-data object\n\t// note: we can't clone the form-data object without having it as a dependency\n\tif (body instanceof Stream && typeof body.getBoundary !== 'function') {\n\t\t// tee instance body\n\t\tp1 = new PassThrough();\n\t\tp2 = new PassThrough();\n\t\tbody.pipe(p1);\n\t\tbody.pipe(p2);\n\t\t// set instance body to teed body and return the other teed body\n\t\tinstance[INTERNALS].body = p1;\n\t\tbody = p2;\n\t}\n\n\treturn body;\n}\n\n/**\n * Performs the operation \"extract a `Content-Type` value from |object|\" as\n * specified in the specification:\n * https://fetch.spec.whatwg.org/#concept-bodyinit-extract\n *\n * This function assumes that instance.body is present.\n *\n * @param   Mixed  instance  Any options.body input\n */\nfunction extractContentType(body) {\n\tif (body === null) {\n\t\t// body is null\n\t\treturn null;\n\t} else if (typeof body === 'string') {\n\t\t// body is string\n\t\treturn 'text/plain;charset=UTF-8';\n\t} else if (isURLSearchParams(body)) {\n\t\t// body is a URLSearchParams\n\t\treturn 'application/x-www-form-urlencoded;charset=UTF-8';\n\t} else if (isBlob(body)) {\n\t\t// body is blob\n\t\treturn body.type || null;\n\t} else if (Buffer.isBuffer(body)) {\n\t\t// body is buffer\n\t\treturn null;\n\t} else if (Object.prototype.toString.call(body) === '[object ArrayBuffer]') {\n\t\t// body is ArrayBuffer\n\t\treturn null;\n\t} else if (ArrayBuffer.isView(body)) {\n\t\t// body is ArrayBufferView\n\t\treturn null;\n\t} else if (typeof body.getBoundary === 'function') {\n\t\t// detect form data input from form-data module\n\t\treturn `multipart/form-data;boundary=${body.getBoundary()}`;\n\t} else if (body instanceof Stream) {\n\t\t// body is stream\n\t\t// can't really do much about this\n\t\treturn null;\n\t} else {\n\t\t// Body constructor defaults other things to string\n\t\treturn 'text/plain;charset=UTF-8';\n\t}\n}\n\n/**\n * The Fetch Standard treats this as if \"total bytes\" is a property on the body.\n * For us, we have to explicitly get it with a function.\n *\n * ref: https://fetch.spec.whatwg.org/#concept-body-total-bytes\n *\n * @param   Body    instance   Instance of Body\n * @return  Number?            Number of bytes, or null if not possible\n */\nfunction getTotalBytes(instance) {\n\tconst body = instance.body;\n\n\n\tif (body === null) {\n\t\t// body is null\n\t\treturn 0;\n\t} else if (isBlob(body)) {\n\t\treturn body.size;\n\t} else if (Buffer.isBuffer(body)) {\n\t\t// body is buffer\n\t\treturn body.length;\n\t} else if (body && typeof body.getLengthSync === 'function') {\n\t\t// detect form data input from form-data module\n\t\tif (body._lengthRetrievers && body._lengthRetrievers.length == 0 || // 1.x\n\t\tbody.hasKnownLength && body.hasKnownLength()) {\n\t\t\t// 2.x\n\t\t\treturn body.getLengthSync();\n\t\t}\n\t\treturn null;\n\t} else {\n\t\t// body is stream\n\t\treturn null;\n\t}\n}\n\n/**\n * Write a Body to a Node.js WritableStream (e.g. http.Request) object.\n *\n * @param   Body    instance   Instance of Body\n * @return  Void\n */\nfunction writeToStream(dest, instance) {\n\tconst body = instance.body;\n\n\n\tif (body === null) {\n\t\t// body is null\n\t\tdest.end();\n\t} else if (isBlob(body)) {\n\t\tbody.stream().pipe(dest);\n\t} else if (Buffer.isBuffer(body)) {\n\t\t// body is buffer\n\t\tdest.write(body);\n\t\tdest.end();\n\t} else {\n\t\t// body is stream\n\t\tbody.pipe(dest);\n\t}\n}\n\n// expose Promise\nBody.Promise = global.Promise;\n\n/**\n * headers.js\n *\n * Headers class offers convenient helpers\n */\n\nconst invalidTokenRegex = /[^\\^_`a-zA-Z\\-0-9!#$%&'*+.|~]/;\nconst invalidHeaderCharRegex = /[^\\t\\x20-\\x7e\\x80-\\xff]/;\n\nfunction validateName(name) {\n\tname = `${name}`;\n\tif (invalidTokenRegex.test(name) || name === '') {\n\t\tthrow new TypeError(`${name} is not a legal HTTP header name`);\n\t}\n}\n\nfunction validateValue(value) {\n\tvalue = `${value}`;\n\tif (invalidHeaderCharRegex.test(value)) {\n\t\tthrow new TypeError(`${value} is not a legal HTTP header value`);\n\t}\n}\n\n/**\n * Find the key in the map object given a header name.\n *\n * Returns undefined if not found.\n *\n * @param   String  name  Header name\n * @return  String|Undefined\n */\nfunction find(map, name) {\n\tname = name.toLowerCase();\n\tfor (const key in map) {\n\t\tif (key.toLowerCase() === name) {\n\t\t\treturn key;\n\t\t}\n\t}\n\treturn undefined;\n}\n\nconst MAP = Symbol('map');\nclass Headers {\n\t/**\n  * Headers class\n  *\n  * @param   Object  headers  Response headers\n  * @return  Void\n  */\n\tconstructor() {\n\t\tlet init = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined;\n\n\t\tthis[MAP] = Object.create(null);\n\n\t\tif (init instanceof Headers) {\n\t\t\tconst rawHeaders = init.raw();\n\t\t\tconst headerNames = Object.keys(rawHeaders);\n\n\t\t\tfor (const headerName of headerNames) {\n\t\t\t\tfor (const value of rawHeaders[headerName]) {\n\t\t\t\t\tthis.append(headerName, value);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\t// We don't worry about converting prop to ByteString here as append()\n\t\t// will handle it.\n\t\tif (init == null) ; else if (typeof init === 'object') {\n\t\t\tconst method = init[Symbol.iterator];\n\t\t\tif (method != null) {\n\t\t\t\tif (typeof method !== 'function') {\n\t\t\t\t\tthrow new TypeError('Header pairs must be iterable');\n\t\t\t\t}\n\n\t\t\t\t// sequence<sequence<ByteString>>\n\t\t\t\t// Note: per spec we have to first exhaust the lists then process them\n\t\t\t\tconst pairs = [];\n\t\t\t\tfor (const pair of init) {\n\t\t\t\t\tif (typeof pair !== 'object' || typeof pair[Symbol.iterator] !== 'function') {\n\t\t\t\t\t\tthrow new TypeError('Each header pair must be iterable');\n\t\t\t\t\t}\n\t\t\t\t\tpairs.push(Array.from(pair));\n\t\t\t\t}\n\n\t\t\t\tfor (const pair of pairs) {\n\t\t\t\t\tif (pair.length !== 2) {\n\t\t\t\t\t\tthrow new TypeError('Each header pair must be a name/value tuple');\n\t\t\t\t\t}\n\t\t\t\t\tthis.append(pair[0], pair[1]);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// record<ByteString, ByteString>\n\t\t\t\tfor (const key of Object.keys(init)) {\n\t\t\t\t\tconst value = init[key];\n\t\t\t\t\tthis.append(key, value);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tthrow new TypeError('Provided initializer must be an object');\n\t\t}\n\t}\n\n\t/**\n  * Return combined header value given name\n  *\n  * @param   String  name  Header name\n  * @return  Mixed\n  */\n\tget(name) {\n\t\tname = `${name}`;\n\t\tvalidateName(name);\n\t\tconst key = find(this[MAP], name);\n\t\tif (key === undefined) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn this[MAP][key].join(', ');\n\t}\n\n\t/**\n  * Iterate over all headers\n  *\n  * @param   Function  callback  Executed for each item with parameters (value, name, thisArg)\n  * @param   Boolean   thisArg   `this` context for callback function\n  * @return  Void\n  */\n\tforEach(callback) {\n\t\tlet thisArg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;\n\n\t\tlet pairs = getHeaders(this);\n\t\tlet i = 0;\n\t\twhile (i < pairs.length) {\n\t\t\tvar _pairs$i = pairs[i];\n\t\t\tconst name = _pairs$i[0],\n\t\t\t      value = _pairs$i[1];\n\n\t\t\tcallback.call(thisArg, value, name, this);\n\t\t\tpairs = getHeaders(this);\n\t\t\ti++;\n\t\t}\n\t}\n\n\t/**\n  * Overwrite header values given name\n  *\n  * @param   String  name   Header name\n  * @param   String  value  Header value\n  * @return  Void\n  */\n\tset(name, value) {\n\t\tname = `${name}`;\n\t\tvalue = `${value}`;\n\t\tvalidateName(name);\n\t\tvalidateValue(value);\n\t\tconst key = find(this[MAP], name);\n\t\tthis[MAP][key !== undefined ? key : name] = [value];\n\t}\n\n\t/**\n  * Append a value onto existing header\n  *\n  * @param   String  name   Header name\n  * @param   String  value  Header value\n  * @return  Void\n  */\n\tappend(name, value) {\n\t\tname = `${name}`;\n\t\tvalue = `${value}`;\n\t\tvalidateName(name);\n\t\tvalidateValue(value);\n\t\tconst key = find(this[MAP], name);\n\t\tif (key !== undefined) {\n\t\t\tthis[MAP][key].push(value);\n\t\t} else {\n\t\t\tthis[MAP][name] = [value];\n\t\t}\n\t}\n\n\t/**\n  * Check for header name existence\n  *\n  * @param   String   name  Header name\n  * @return  Boolean\n  */\n\thas(name) {\n\t\tname = `${name}`;\n\t\tvalidateName(name);\n\t\treturn find(this[MAP], name) !== undefined;\n\t}\n\n\t/**\n  * Delete all header values given name\n  *\n  * @param   String  name  Header name\n  * @return  Void\n  */\n\tdelete(name) {\n\t\tname = `${name}`;\n\t\tvalidateName(name);\n\t\tconst key = find(this[MAP], name);\n\t\tif (key !== undefined) {\n\t\t\tdelete this[MAP][key];\n\t\t}\n\t}\n\n\t/**\n  * Return raw headers (non-spec api)\n  *\n  * @return  Object\n  */\n\traw() {\n\t\treturn this[MAP];\n\t}\n\n\t/**\n  * Get an iterator on keys.\n  *\n  * @return  Iterator\n  */\n\tkeys() {\n\t\treturn createHeadersIterator(this, 'key');\n\t}\n\n\t/**\n  * Get an iterator on values.\n  *\n  * @return  Iterator\n  */\n\tvalues() {\n\t\treturn createHeadersIterator(this, 'value');\n\t}\n\n\t/**\n  * Get an iterator on entries.\n  *\n  * This is the default iterator of the Headers object.\n  *\n  * @return  Iterator\n  */\n\t[Symbol.iterator]() {\n\t\treturn createHeadersIterator(this, 'key+value');\n\t}\n}\nHeaders.prototype.entries = Headers.prototype[Symbol.iterator];\n\nObject.defineProperty(Headers.prototype, Symbol.toStringTag, {\n\tvalue: 'Headers',\n\twritable: false,\n\tenumerable: false,\n\tconfigurable: true\n});\n\nObject.defineProperties(Headers.prototype, {\n\tget: { enumerable: true },\n\tforEach: { enumerable: true },\n\tset: { enumerable: true },\n\tappend: { enumerable: true },\n\thas: { enumerable: true },\n\tdelete: { enumerable: true },\n\tkeys: { enumerable: true },\n\tvalues: { enumerable: true },\n\tentries: { enumerable: true }\n});\n\nfunction getHeaders(headers) {\n\tlet kind = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'key+value';\n\n\tconst keys = Object.keys(headers[MAP]).sort();\n\treturn keys.map(kind === 'key' ? function (k) {\n\t\treturn k.toLowerCase();\n\t} : kind === 'value' ? function (k) {\n\t\treturn headers[MAP][k].join(', ');\n\t} : function (k) {\n\t\treturn [k.toLowerCase(), headers[MAP][k].join(', ')];\n\t});\n}\n\nconst INTERNAL = Symbol('internal');\n\nfunction createHeadersIterator(target, kind) {\n\tconst iterator = Object.create(HeadersIteratorPrototype);\n\titerator[INTERNAL] = {\n\t\ttarget,\n\t\tkind,\n\t\tindex: 0\n\t};\n\treturn iterator;\n}\n\nconst HeadersIteratorPrototype = Object.setPrototypeOf({\n\tnext() {\n\t\t// istanbul ignore if\n\t\tif (!this || Object.getPrototypeOf(this) !== HeadersIteratorPrototype) {\n\t\t\tthrow new TypeError('Value of `this` is not a HeadersIterator');\n\t\t}\n\n\t\tvar _INTERNAL = this[INTERNAL];\n\t\tconst target = _INTERNAL.target,\n\t\t      kind = _INTERNAL.kind,\n\t\t      index = _INTERNAL.index;\n\n\t\tconst values = getHeaders(target, kind);\n\t\tconst len = values.length;\n\t\tif (index >= len) {\n\t\t\treturn {\n\t\t\t\tvalue: undefined,\n\t\t\t\tdone: true\n\t\t\t};\n\t\t}\n\n\t\tthis[INTERNAL].index = index + 1;\n\n\t\treturn {\n\t\t\tvalue: values[index],\n\t\t\tdone: false\n\t\t};\n\t}\n}, Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]())));\n\nObject.defineProperty(HeadersIteratorPrototype, Symbol.toStringTag, {\n\tvalue: 'HeadersIterator',\n\twritable: false,\n\tenumerable: false,\n\tconfigurable: true\n});\n\n/**\n * Export the Headers object in a form that Node.js can consume.\n *\n * @param   Headers  headers\n * @return  Object\n */\nfunction exportNodeCompatibleHeaders(headers) {\n\tconst obj = Object.assign({ __proto__: null }, headers[MAP]);\n\n\t// http.request() only supports string as Host header. This hack makes\n\t// specifying custom Host header possible.\n\tconst hostHeaderKey = find(headers[MAP], 'Host');\n\tif (hostHeaderKey !== undefined) {\n\t\tobj[hostHeaderKey] = obj[hostHeaderKey][0];\n\t}\n\n\treturn obj;\n}\n\n/**\n * Create a Headers object from an object of headers, ignoring those that do\n * not conform to HTTP grammar productions.\n *\n * @param   Object  obj  Object of headers\n * @return  Headers\n */\nfunction createHeadersLenient(obj) {\n\tconst headers = new Headers();\n\tfor (const name of Object.keys(obj)) {\n\t\tif (invalidTokenRegex.test(name)) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (Array.isArray(obj[name])) {\n\t\t\tfor (const val of obj[name]) {\n\t\t\t\tif (invalidHeaderCharRegex.test(val)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (headers[MAP][name] === undefined) {\n\t\t\t\t\theaders[MAP][name] = [val];\n\t\t\t\t} else {\n\t\t\t\t\theaders[MAP][name].push(val);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (!invalidHeaderCharRegex.test(obj[name])) {\n\t\t\theaders[MAP][name] = [obj[name]];\n\t\t}\n\t}\n\treturn headers;\n}\n\nconst INTERNALS$1 = Symbol('Response internals');\n\n// fix an issue where \"STATUS_CODES\" aren't a named export for node <10\nconst STATUS_CODES = http.STATUS_CODES;\n\n/**\n * Response class\n *\n * @param   Stream  body  Readable stream\n * @param   Object  opts  Response options\n * @return  Void\n */\nclass Response {\n\tconstructor() {\n\t\tlet body = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n\t\tlet opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n\t\tBody.call(this, body, opts);\n\n\t\tconst status = opts.status || 200;\n\t\tconst headers = new Headers(opts.headers);\n\n\t\tif (body != null && !headers.has('Content-Type')) {\n\t\t\tconst contentType = extractContentType(body);\n\t\t\tif (contentType) {\n\t\t\t\theaders.append('Content-Type', contentType);\n\t\t\t}\n\t\t}\n\n\t\tthis[INTERNALS$1] = {\n\t\t\turl: opts.url,\n\t\t\tstatus,\n\t\t\tstatusText: opts.statusText || STATUS_CODES[status],\n\t\t\theaders,\n\t\t\tcounter: opts.counter\n\t\t};\n\t}\n\n\tget url() {\n\t\treturn this[INTERNALS$1].url || '';\n\t}\n\n\tget status() {\n\t\treturn this[INTERNALS$1].status;\n\t}\n\n\t/**\n  * Convenience property representing if the request ended normally\n  */\n\tget ok() {\n\t\treturn this[INTERNALS$1].status >= 200 && this[INTERNALS$1].status < 300;\n\t}\n\n\tget redirected() {\n\t\treturn this[INTERNALS$1].counter > 0;\n\t}\n\n\tget statusText() {\n\t\treturn this[INTERNALS$1].statusText;\n\t}\n\n\tget headers() {\n\t\treturn this[INTERNALS$1].headers;\n\t}\n\n\t/**\n  * Clone this response\n  *\n  * @return  Response\n  */\n\tclone() {\n\t\treturn new Response(clone(this), {\n\t\t\turl: this.url,\n\t\t\tstatus: this.status,\n\t\t\tstatusText: this.statusText,\n\t\t\theaders: this.headers,\n\t\t\tok: this.ok,\n\t\t\tredirected: this.redirected\n\t\t});\n\t}\n}\n\nBody.mixIn(Response.prototype);\n\nObject.defineProperties(Response.prototype, {\n\turl: { enumerable: true },\n\tstatus: { enumerable: true },\n\tok: { enumerable: true },\n\tredirected: { enumerable: true },\n\tstatusText: { enumerable: true },\n\theaders: { enumerable: true },\n\tclone: { enumerable: true }\n});\n\nObject.defineProperty(Response.prototype, Symbol.toStringTag, {\n\tvalue: 'Response',\n\twritable: false,\n\tenumerable: false,\n\tconfigurable: true\n});\n\nconst INTERNALS$2 = Symbol('Request internals');\nconst URL = Url.URL || whatwgUrl.URL;\n\n// fix an issue where \"format\", \"parse\" aren't a named export for node <10\nconst parse_url = Url.parse;\nconst format_url = Url.format;\n\n/**\n * Wrapper around `new URL` to handle arbitrary URLs\n *\n * @param  {string} urlStr\n * @return {void}\n */\nfunction parseURL(urlStr) {\n\t/*\n \tCheck whether the URL is absolute or not\n \t\tScheme: https://tools.ietf.org/html/rfc3986#section-3.1\n \tAbsolute URL: https://tools.ietf.org/html/rfc3986#section-4.3\n */\n\tif (/^[a-zA-Z][a-zA-Z\\d+\\-.]*:/.exec(urlStr)) {\n\t\turlStr = new URL(urlStr).toString();\n\t}\n\n\t// Fallback to old implementation for arbitrary URLs\n\treturn parse_url(urlStr);\n}\n\nconst streamDestructionSupported = 'destroy' in Stream.Readable.prototype;\n\n/**\n * Check if a value is an instance of Request.\n *\n * @param   Mixed   input\n * @return  Boolean\n */\nfunction isRequest(input) {\n\treturn typeof input === 'object' && typeof input[INTERNALS$2] === 'object';\n}\n\nfunction isAbortSignal(signal) {\n\tconst proto = signal && typeof signal === 'object' && Object.getPrototypeOf(signal);\n\treturn !!(proto && proto.constructor.name === 'AbortSignal');\n}\n\n/**\n * Request class\n *\n * @param   Mixed   input  Url or Request instance\n * @param   Object  init   Custom options\n * @return  Void\n */\nclass Request {\n\tconstructor(input) {\n\t\tlet init = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n\t\tlet parsedURL;\n\n\t\t// normalize input\n\t\tif (!isRequest(input)) {\n\t\t\tif (input && input.href) {\n\t\t\t\t// in order to support Node.js' Url objects; though WHATWG's URL objects\n\t\t\t\t// will fall into this branch also (since their `toString()` will return\n\t\t\t\t// `href` property anyway)\n\t\t\t\tparsedURL = parseURL(input.href);\n\t\t\t} else {\n\t\t\t\t// coerce input to a string before attempting to parse\n\t\t\t\tparsedURL = parseURL(`${input}`);\n\t\t\t}\n\t\t\tinput = {};\n\t\t} else {\n\t\t\tparsedURL = parseURL(input.url);\n\t\t}\n\n\t\tlet method = init.method || input.method || 'GET';\n\t\tmethod = method.toUpperCase();\n\n\t\tif ((init.body != null || isRequest(input) && input.body !== null) && (method === 'GET' || method === 'HEAD')) {\n\t\t\tthrow new TypeError('Request with GET/HEAD method cannot have body');\n\t\t}\n\n\t\tlet inputBody = init.body != null ? init.body : isRequest(input) && input.body !== null ? clone(input) : null;\n\n\t\tBody.call(this, inputBody, {\n\t\t\ttimeout: init.timeout || input.timeout || 0,\n\t\t\tsize: init.size || input.size || 0\n\t\t});\n\n\t\tconst headers = new Headers(init.headers || input.headers || {});\n\n\t\tif (inputBody != null && !headers.has('Content-Type')) {\n\t\t\tconst contentType = extractContentType(inputBody);\n\t\t\tif (contentType) {\n\t\t\t\theaders.append('Content-Type', contentType);\n\t\t\t}\n\t\t}\n\n\t\tlet signal = isRequest(input) ? input.signal : null;\n\t\tif ('signal' in init) signal = init.signal;\n\n\t\tif (signal != null && !isAbortSignal(signal)) {\n\t\t\tthrow new TypeError('Expected signal to be an instanceof AbortSignal');\n\t\t}\n\n\t\tthis[INTERNALS$2] = {\n\t\t\tmethod,\n\t\t\tredirect: init.redirect || input.redirect || 'follow',\n\t\t\theaders,\n\t\t\tparsedURL,\n\t\t\tsignal\n\t\t};\n\n\t\t// node-fetch-only options\n\t\tthis.follow = init.follow !== undefined ? init.follow : input.follow !== undefined ? input.follow : 20;\n\t\tthis.compress = init.compress !== undefined ? init.compress : input.compress !== undefined ? input.compress : true;\n\t\tthis.counter = init.counter || input.counter || 0;\n\t\tthis.agent = init.agent || input.agent;\n\t}\n\n\tget method() {\n\t\treturn this[INTERNALS$2].method;\n\t}\n\n\tget url() {\n\t\treturn format_url(this[INTERNALS$2].parsedURL);\n\t}\n\n\tget headers() {\n\t\treturn this[INTERNALS$2].headers;\n\t}\n\n\tget redirect() {\n\t\treturn this[INTERNALS$2].redirect;\n\t}\n\n\tget signal() {\n\t\treturn this[INTERNALS$2].signal;\n\t}\n\n\t/**\n  * Clone this request\n  *\n  * @return  Request\n  */\n\tclone() {\n\t\treturn new Request(this);\n\t}\n}\n\nBody.mixIn(Request.prototype);\n\nObject.defineProperty(Request.prototype, Symbol.toStringTag, {\n\tvalue: 'Request',\n\twritable: false,\n\tenumerable: false,\n\tconfigurable: true\n});\n\nObject.defineProperties(Request.prototype, {\n\tmethod: { enumerable: true },\n\turl: { enumerable: true },\n\theaders: { enumerable: true },\n\tredirect: { enumerable: true },\n\tclone: { enumerable: true },\n\tsignal: { enumerable: true }\n});\n\n/**\n * Convert a Request to Node.js http request options.\n *\n * @param   Request  A Request instance\n * @return  Object   The options object to be passed to http.request\n */\nfunction getNodeRequestOptions(request) {\n\tconst parsedURL = request[INTERNALS$2].parsedURL;\n\tconst headers = new Headers(request[INTERNALS$2].headers);\n\n\t// fetch step 1.3\n\tif (!headers.has('Accept')) {\n\t\theaders.set('Accept', '*/*');\n\t}\n\n\t// Basic fetch\n\tif (!parsedURL.protocol || !parsedURL.hostname) {\n\t\tthrow new TypeError('Only absolute URLs are supported');\n\t}\n\n\tif (!/^https?:$/.test(parsedURL.protocol)) {\n\t\tthrow new TypeError('Only HTTP(S) protocols are supported');\n\t}\n\n\tif (request.signal && request.body instanceof Stream.Readable && !streamDestructionSupported) {\n\t\tthrow new Error('Cancellation of streamed requests with AbortSignal is not supported in node < 8');\n\t}\n\n\t// HTTP-network-or-cache fetch steps 2.4-2.7\n\tlet contentLengthValue = null;\n\tif (request.body == null && /^(POST|PUT)$/i.test(request.method)) {\n\t\tcontentLengthValue = '0';\n\t}\n\tif (request.body != null) {\n\t\tconst totalBytes = getTotalBytes(request);\n\t\tif (typeof totalBytes === 'number') {\n\t\t\tcontentLengthValue = String(totalBytes);\n\t\t}\n\t}\n\tif (contentLengthValue) {\n\t\theaders.set('Content-Length', contentLengthValue);\n\t}\n\n\t// HTTP-network-or-cache fetch step 2.11\n\tif (!headers.has('User-Agent')) {\n\t\theaders.set('User-Agent', 'node-fetch/1.0 (+https://github.com/bitinn/node-fetch)');\n\t}\n\n\t// HTTP-network-or-cache fetch step 2.15\n\tif (request.compress && !headers.has('Accept-Encoding')) {\n\t\theaders.set('Accept-Encoding', 'gzip,deflate');\n\t}\n\n\tlet agent = request.agent;\n\tif (typeof agent === 'function') {\n\t\tagent = agent(parsedURL);\n\t}\n\n\tif (!headers.has('Connection') && !agent) {\n\t\theaders.set('Connection', 'close');\n\t}\n\n\t// HTTP-network fetch step 4.2\n\t// chunked encoding is handled by Node.js\n\n\treturn Object.assign({}, parsedURL, {\n\t\tmethod: request.method,\n\t\theaders: exportNodeCompatibleHeaders(headers),\n\t\tagent\n\t});\n}\n\n/**\n * abort-error.js\n *\n * AbortError interface for cancelled requests\n */\n\n/**\n * Create AbortError instance\n *\n * @param   String      message      Error message for human\n * @return  AbortError\n */\nfunction AbortError(message) {\n  Error.call(this, message);\n\n  this.type = 'aborted';\n  this.message = message;\n\n  // hide custom error implementation details from end-users\n  Error.captureStackTrace(this, this.constructor);\n}\n\nAbortError.prototype = Object.create(Error.prototype);\nAbortError.prototype.constructor = AbortError;\nAbortError.prototype.name = 'AbortError';\n\nconst URL$1 = Url.URL || whatwgUrl.URL;\n\n// fix an issue where \"PassThrough\", \"resolve\" aren't a named export for node <10\nconst PassThrough$1 = Stream.PassThrough;\n\nconst isDomainOrSubdomain = function isDomainOrSubdomain(destination, original) {\n\tconst orig = new URL$1(original).hostname;\n\tconst dest = new URL$1(destination).hostname;\n\n\treturn orig === dest || orig[orig.length - dest.length - 1] === '.' && orig.endsWith(dest);\n};\n\n/**\n * isSameProtocol reports whether the two provided URLs use the same protocol.\n *\n * Both domains must already be in canonical form.\n * @param {string|URL} original\n * @param {string|URL} destination\n */\nconst isSameProtocol = function isSameProtocol(destination, original) {\n\tconst orig = new URL$1(original).protocol;\n\tconst dest = new URL$1(destination).protocol;\n\n\treturn orig === dest;\n};\n\n/**\n * Fetch function\n *\n * @param   Mixed    url   Absolute url or Request instance\n * @param   Object   opts  Fetch options\n * @return  Promise\n */\nfunction fetch(url, opts) {\n\n\t// allow custom promise\n\tif (!fetch.Promise) {\n\t\tthrow new Error('native promise missing, set fetch.Promise to your favorite alternative');\n\t}\n\n\tBody.Promise = fetch.Promise;\n\n\t// wrap http.request into fetch\n\treturn new fetch.Promise(function (resolve, reject) {\n\t\t// build request object\n\t\tconst request = new Request(url, opts);\n\t\tconst options = getNodeRequestOptions(request);\n\n\t\tconst send = (options.protocol === 'https:' ? https : http).request;\n\t\tconst signal = request.signal;\n\n\t\tlet response = null;\n\n\t\tconst abort = function abort() {\n\t\t\tlet error = new AbortError('The user aborted a request.');\n\t\t\treject(error);\n\t\t\tif (request.body && request.body instanceof Stream.Readable) {\n\t\t\t\tdestroyStream(request.body, error);\n\t\t\t}\n\t\t\tif (!response || !response.body) return;\n\t\t\tresponse.body.emit('error', error);\n\t\t};\n\n\t\tif (signal && signal.aborted) {\n\t\t\tabort();\n\t\t\treturn;\n\t\t}\n\n\t\tconst abortAndFinalize = function abortAndFinalize() {\n\t\t\tabort();\n\t\t\tfinalize();\n\t\t};\n\n\t\t// send request\n\t\tconst req = send(options);\n\t\tlet reqTimeout;\n\n\t\tif (signal) {\n\t\t\tsignal.addEventListener('abort', abortAndFinalize);\n\t\t}\n\n\t\tfunction finalize() {\n\t\t\treq.abort();\n\t\t\tif (signal) signal.removeEventListener('abort', abortAndFinalize);\n\t\t\tclearTimeout(reqTimeout);\n\t\t}\n\n\t\tif (request.timeout) {\n\t\t\treq.once('socket', function (socket) {\n\t\t\t\treqTimeout = setTimeout(function () {\n\t\t\t\t\treject(new FetchError(`network timeout at: ${request.url}`, 'request-timeout'));\n\t\t\t\t\tfinalize();\n\t\t\t\t}, request.timeout);\n\t\t\t});\n\t\t}\n\n\t\treq.on('error', function (err) {\n\t\t\treject(new FetchError(`request to ${request.url} failed, reason: ${err.message}`, 'system', err));\n\n\t\t\tif (response && response.body) {\n\t\t\t\tdestroyStream(response.body, err);\n\t\t\t}\n\n\t\t\tfinalize();\n\t\t});\n\n\t\tfixResponseChunkedTransferBadEnding(req, function (err) {\n\t\t\tif (signal && signal.aborted) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (response && response.body) {\n\t\t\t\tdestroyStream(response.body, err);\n\t\t\t}\n\t\t});\n\n\t\t/* c8 ignore next 18 */\n\t\tif (parseInt(process.version.substring(1)) < 14) {\n\t\t\t// Before Node.js 14, pipeline() does not fully support async iterators and does not always\n\t\t\t// properly handle when the socket close/end events are out of order.\n\t\t\treq.on('socket', function (s) {\n\t\t\t\ts.addListener('close', function (hadError) {\n\t\t\t\t\t// if a data listener is still present we didn't end cleanly\n\t\t\t\t\tconst hasDataListener = s.listenerCount('data') > 0;\n\n\t\t\t\t\t// if end happened before close but the socket didn't emit an error, do it now\n\t\t\t\t\tif (response && hasDataListener && !hadError && !(signal && signal.aborted)) {\n\t\t\t\t\t\tconst err = new Error('Premature close');\n\t\t\t\t\t\terr.code = 'ERR_STREAM_PREMATURE_CLOSE';\n\t\t\t\t\t\tresponse.body.emit('error', err);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\treq.on('response', function (res) {\n\t\t\tclearTimeout(reqTimeout);\n\n\t\t\tconst headers = createHeadersLenient(res.headers);\n\n\t\t\t// HTTP fetch step 5\n\t\t\tif (fetch.isRedirect(res.statusCode)) {\n\t\t\t\t// HTTP fetch step 5.2\n\t\t\t\tconst location = headers.get('Location');\n\n\t\t\t\t// HTTP fetch step 5.3\n\t\t\t\tlet locationURL = null;\n\t\t\t\ttry {\n\t\t\t\t\tlocationURL = location === null ? null : new URL$1(location, request.url).toString();\n\t\t\t\t} catch (err) {\n\t\t\t\t\t// error here can only be invalid URL in Location: header\n\t\t\t\t\t// do not throw when options.redirect == manual\n\t\t\t\t\t// let the user extract the errorneous redirect URL\n\t\t\t\t\tif (request.redirect !== 'manual') {\n\t\t\t\t\t\treject(new FetchError(`uri requested responds with an invalid redirect URL: ${location}`, 'invalid-redirect'));\n\t\t\t\t\t\tfinalize();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// HTTP fetch step 5.5\n\t\t\t\tswitch (request.redirect) {\n\t\t\t\t\tcase 'error':\n\t\t\t\t\t\treject(new FetchError(`uri requested responds with a redirect, redirect mode is set to error: ${request.url}`, 'no-redirect'));\n\t\t\t\t\t\tfinalize();\n\t\t\t\t\t\treturn;\n\t\t\t\t\tcase 'manual':\n\t\t\t\t\t\t// node-fetch-specific step: make manual redirect a bit easier to use by setting the Location header value to the resolved URL.\n\t\t\t\t\t\tif (locationURL !== null) {\n\t\t\t\t\t\t\t// handle corrupted header\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\theaders.set('Location', locationURL);\n\t\t\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\t\t\t// istanbul ignore next: nodejs server prevent invalid response headers, we can't test this through normal request\n\t\t\t\t\t\t\t\treject(err);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'follow':\n\t\t\t\t\t\t// HTTP-redirect fetch step 2\n\t\t\t\t\t\tif (locationURL === null) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// HTTP-redirect fetch step 5\n\t\t\t\t\t\tif (request.counter >= request.follow) {\n\t\t\t\t\t\t\treject(new FetchError(`maximum redirect reached at: ${request.url}`, 'max-redirect'));\n\t\t\t\t\t\t\tfinalize();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// HTTP-redirect fetch step 6 (counter increment)\n\t\t\t\t\t\t// Create a new Request object.\n\t\t\t\t\t\tconst requestOpts = {\n\t\t\t\t\t\t\theaders: new Headers(request.headers),\n\t\t\t\t\t\t\tfollow: request.follow,\n\t\t\t\t\t\t\tcounter: request.counter + 1,\n\t\t\t\t\t\t\tagent: request.agent,\n\t\t\t\t\t\t\tcompress: request.compress,\n\t\t\t\t\t\t\tmethod: request.method,\n\t\t\t\t\t\t\tbody: request.body,\n\t\t\t\t\t\t\tsignal: request.signal,\n\t\t\t\t\t\t\ttimeout: request.timeout,\n\t\t\t\t\t\t\tsize: request.size\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tif (!isDomainOrSubdomain(request.url, locationURL) || !isSameProtocol(request.url, locationURL)) {\n\t\t\t\t\t\t\tfor (const name of ['authorization', 'www-authenticate', 'cookie', 'cookie2']) {\n\t\t\t\t\t\t\t\trequestOpts.headers.delete(name);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// HTTP-redirect fetch step 9\n\t\t\t\t\t\tif (res.statusCode !== 303 && request.body && getTotalBytes(request) === null) {\n\t\t\t\t\t\t\treject(new FetchError('Cannot follow redirect with body being a readable stream', 'unsupported-redirect'));\n\t\t\t\t\t\t\tfinalize();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// HTTP-redirect fetch step 11\n\t\t\t\t\t\tif (res.statusCode === 303 || (res.statusCode === 301 || res.statusCode === 302) && request.method === 'POST') {\n\t\t\t\t\t\t\trequestOpts.method = 'GET';\n\t\t\t\t\t\t\trequestOpts.body = undefined;\n\t\t\t\t\t\t\trequestOpts.headers.delete('content-length');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// HTTP-redirect fetch step 15\n\t\t\t\t\t\tresolve(fetch(new Request(locationURL, requestOpts)));\n\t\t\t\t\t\tfinalize();\n\t\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// prepare response\n\t\t\tres.once('end', function () {\n\t\t\t\tif (signal) signal.removeEventListener('abort', abortAndFinalize);\n\t\t\t});\n\t\t\tlet body = res.pipe(new PassThrough$1());\n\n\t\t\tconst response_options = {\n\t\t\t\turl: request.url,\n\t\t\t\tstatus: res.statusCode,\n\t\t\t\tstatusText: res.statusMessage,\n\t\t\t\theaders: headers,\n\t\t\t\tsize: request.size,\n\t\t\t\ttimeout: request.timeout,\n\t\t\t\tcounter: request.counter\n\t\t\t};\n\n\t\t\t// HTTP-network fetch step 12.1.1.3\n\t\t\tconst codings = headers.get('Content-Encoding');\n\n\t\t\t// HTTP-network fetch step 12.1.1.4: handle content codings\n\n\t\t\t// in following scenarios we ignore compression support\n\t\t\t// 1. compression support is disabled\n\t\t\t// 2. HEAD request\n\t\t\t// 3. no Content-Encoding header\n\t\t\t// 4. no content response (204)\n\t\t\t// 5. content not modified response (304)\n\t\t\tif (!request.compress || request.method === 'HEAD' || codings === null || res.statusCode === 204 || res.statusCode === 304) {\n\t\t\t\tresponse = new Response(body, response_options);\n\t\t\t\tresolve(response);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// For Node v6+\n\t\t\t// Be less strict when decoding compressed responses, since sometimes\n\t\t\t// servers send slightly invalid responses that are still accepted\n\t\t\t// by common browsers.\n\t\t\t// Always using Z_SYNC_FLUSH is what cURL does.\n\t\t\tconst zlibOptions = {\n\t\t\t\tflush: zlib.Z_SYNC_FLUSH,\n\t\t\t\tfinishFlush: zlib.Z_SYNC_FLUSH\n\t\t\t};\n\n\t\t\t// for gzip\n\t\t\tif (codings == 'gzip' || codings == 'x-gzip') {\n\t\t\t\tbody = body.pipe(zlib.createGunzip(zlibOptions));\n\t\t\t\tresponse = new Response(body, response_options);\n\t\t\t\tresolve(response);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// for deflate\n\t\t\tif (codings == 'deflate' || codings == 'x-deflate') {\n\t\t\t\t// handle the infamous raw deflate response from old servers\n\t\t\t\t// a hack for old IIS and Apache servers\n\t\t\t\tconst raw = res.pipe(new PassThrough$1());\n\t\t\t\traw.once('data', function (chunk) {\n\t\t\t\t\t// see http://stackoverflow.com/questions/37519828\n\t\t\t\t\tif ((chunk[0] & 0x0F) === 0x08) {\n\t\t\t\t\t\tbody = body.pipe(zlib.createInflate());\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbody = body.pipe(zlib.createInflateRaw());\n\t\t\t\t\t}\n\t\t\t\t\tresponse = new Response(body, response_options);\n\t\t\t\t\tresolve(response);\n\t\t\t\t});\n\t\t\t\traw.on('end', function () {\n\t\t\t\t\t// some old IIS servers return zero-length OK deflate responses, so 'data' is never emitted.\n\t\t\t\t\tif (!response) {\n\t\t\t\t\t\tresponse = new Response(body, response_options);\n\t\t\t\t\t\tresolve(response);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// for br\n\t\t\tif (codings == 'br' && typeof zlib.createBrotliDecompress === 'function') {\n\t\t\t\tbody = body.pipe(zlib.createBrotliDecompress());\n\t\t\t\tresponse = new Response(body, response_options);\n\t\t\t\tresolve(response);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// otherwise, use response as-is\n\t\t\tresponse = new Response(body, response_options);\n\t\t\tresolve(response);\n\t\t});\n\n\t\twriteToStream(req, request);\n\t});\n}\nfunction fixResponseChunkedTransferBadEnding(request, errorCallback) {\n\tlet socket;\n\n\trequest.on('socket', function (s) {\n\t\tsocket = s;\n\t});\n\n\trequest.on('response', function (response) {\n\t\tconst headers = response.headers;\n\n\t\tif (headers['transfer-encoding'] === 'chunked' && !headers['content-length']) {\n\t\t\tresponse.once('close', function (hadError) {\n\t\t\t\t// if a data listener is still present we didn't end cleanly\n\t\t\t\tconst hasDataListener = socket.listenerCount('data') > 0;\n\n\t\t\t\tif (hasDataListener && !hadError) {\n\t\t\t\t\tconst err = new Error('Premature close');\n\t\t\t\t\terr.code = 'ERR_STREAM_PREMATURE_CLOSE';\n\t\t\t\t\terrorCallback(err);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n}\n\nfunction destroyStream(stream, err) {\n\tif (stream.destroy) {\n\t\tstream.destroy(err);\n\t} else {\n\t\t// node < 8\n\t\tstream.emit('error', err);\n\t\tstream.end();\n\t}\n}\n\n/**\n * Redirect code matching\n *\n * @param   Number   code  Status code\n * @return  Boolean\n */\nfetch.isRedirect = function (code) {\n\treturn code === 301 || code === 302 || code === 303 || code === 307 || code === 308;\n};\n\n// expose Promise\nfetch.Promise = global.Promise;\n\nmodule.exports = exports = fetch;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = exports;\nexports.Headers = Headers;\nexports.Request = Request;\nexports.Response = Response;\nexports.FetchError = FetchError;\n/LICENSE.md\u00047The MIT License (MIT)\n\nCopyright (c) 2016 David Frank\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n/lib/index.mjsŰuimport Stream from 'stream';\nimport http from 'http';\nimport Url from 'url';\nimport whatwgUrl from 'whatwg-url';\nimport https from 'https';\nimport zlib from 'zlib';\n\n// Based on https://github.com/tmpvar/jsdom/blob/aa85b2abf07766ff7bf5c1f6daafb3726f2f2db5/lib/jsdom/living/blob.js\n\n// fix for \"Readable\" isn't a named export issue\nconst Readable = Stream.Readable;\n\nconst BUFFER = Symbol('buffer');\nconst TYPE = Symbol('type');\n\nclass Blob {\n\tconstructor() {\n\t\tthis[TYPE] = '';\n\n\t\tconst blobParts = arguments[0];\n\t\tconst options = arguments[1];\n\n\t\tconst buffers = [];\n\t\tlet size = 0;\n\n\t\tif (blobParts) {\n\t\t\tconst a = blobParts;\n\t\t\tconst length = Number(a.length);\n\t\t\tfor (let i = 0; i < length; i++) {\n\t\t\t\tconst element = a[i];\n\t\t\t\tlet buffer;\n\t\t\t\tif (element instanceof Buffer) {\n\t\t\t\t\tbuffer = element;\n\t\t\t\t} else if (ArrayBuffer.isView(element)) {\n\t\t\t\t\tbuffer = Buffer.from(element.buffer, element.byteOffset, element.byteLength);\n\t\t\t\t} else if (element instanceof ArrayBuffer) {\n\t\t\t\t\tbuffer = Buffer.from(element);\n\t\t\t\t} else if (element instanceof Blob) {\n\t\t\t\t\tbuffer = element[BUFFER];\n\t\t\t\t} else {\n\t\t\t\t\tbuffer = Buffer.from(typeof element === 'string' ? element : String(element));\n\t\t\t\t}\n\t\t\t\tsize += buffer.length;\n\t\t\t\tbuffers.push(buffer);\n\t\t\t}\n\t\t}\n\n\t\tthis[BUFFER] = Buffer.concat(buffers);\n\n\t\tlet type = options && options.type !== undefined && String(options.type).toLowerCase();\n\t\tif (type && !/[^\\u0020-\\u007E]/.test(type)) {\n\t\t\tthis[TYPE] = type;\n\t\t}\n\t}\n\tget size() {\n\t\treturn this[BUFFER].length;\n\t}\n\tget type() {\n\t\treturn this[TYPE];\n\t}\n\ttext() {\n\t\treturn Promise.resolve(this[BUFFER].toString());\n\t}\n\tarrayBuffer() {\n\t\tconst buf = this[BUFFER];\n\t\tconst ab = buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);\n\t\treturn Promise.resolve(ab);\n\t}\n\tstream() {\n\t\tconst readable = new Readable();\n\t\treadable._read = function () {};\n\t\treadable.push(this[BUFFER]);\n\t\treadable.push(null);\n\t\treturn readable;\n\t}\n\ttoString() {\n\t\treturn '[object Blob]';\n\t}\n\tslice() {\n\t\tconst size = this.size;\n\n\t\tconst start = arguments[0];\n\t\tconst end = arguments[1];\n\t\tlet relativeStart, relativeEnd;\n\t\tif (start === undefined) {\n\t\t\trelativeStart = 0;\n\t\t} else if (start < 0) {\n\t\t\trelativeStart = Math.max(size + start, 0);\n\t\t} else {\n\t\t\trelativeStart = Math.min(start, size);\n\t\t}\n\t\tif (end === undefined) {\n\t\t\trelativeEnd = size;\n\t\t} else if (end < 0) {\n\t\t\trelativeEnd = Math.max(size + end, 0);\n\t\t} else {\n\t\t\trelativeEnd = Math.min(end, size);\n\t\t}\n\t\tconst span = Math.max(relativeEnd - relativeStart, 0);\n\n\t\tconst buffer = this[BUFFER];\n\t\tconst slicedBuffer = buffer.slice(relativeStart, relativeStart + span);\n\t\tconst blob = new Blob([], { type: arguments[2] });\n\t\tblob[BUFFER] = slicedBuffer;\n\t\treturn blob;\n\t}\n}\n\nObject.defineProperties(Blob.prototype, {\n\tsize: { enumerable: true },\n\ttype: { enumerable: true },\n\tslice: { enumerable: true }\n});\n\nObject.defineProperty(Blob.prototype, Symbol.toStringTag, {\n\tvalue: 'Blob',\n\twritable: false,\n\tenumerable: false,\n\tconfigurable: true\n});\n\n/**\n * fetch-error.js\n *\n * FetchError interface for operational errors\n */\n\n/**\n * Create FetchError instance\n *\n * @param   String      message      Error message for human\n * @param   String      type         Error type for machine\n * @param   String      systemError  For Node.js system error\n * @return  FetchError\n */\nfunction FetchError(message, type, systemError) {\n  Error.call(this, message);\n\n  this.message = message;\n  this.type = type;\n\n  // when err.type is `system`, err.code contains system error code\n  if (systemError) {\n    this.code = this.errno = systemError.code;\n  }\n\n  // hide custom error implementation details from end-users\n  Error.captureStackTrace(this, this.constructor);\n}\n\nFetchError.prototype = Object.create(Error.prototype);\nFetchError.prototype.constructor = FetchError;\nFetchError.prototype.name = 'FetchError';\n\nlet convert;\ntry {\n\tconvert = require('encoding').convert;\n} catch (e) {}\n\nconst INTERNALS = Symbol('Body internals');\n\n// fix an issue where \"PassThrough\" isn't a named export for node <10\nconst PassThrough = Stream.PassThrough;\n\n/**\n * Body mixin\n *\n * Ref: https://fetch.spec.whatwg.org/#body\n *\n * @param   Stream  body  Readable stream\n * @param   Object  opts  Response options\n * @return  Void\n */\nfunction Body(body) {\n\tvar _this = this;\n\n\tvar _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n\t    _ref$size = _ref.size;\n\n\tlet size = _ref$size === undefined ? 0 : _ref$size;\n\tvar _ref$timeout = _ref.timeout;\n\tlet timeout = _ref$timeout === undefined ? 0 : _ref$timeout;\n\n\tif (body == null) {\n\t\t// body is undefined or null\n\t\tbody = null;\n\t} else if (isURLSearchParams(body)) {\n\t\t// body is a URLSearchParams\n\t\tbody = Buffer.from(body.toString());\n\t} else if (isBlob(body)) ; else if (Buffer.isBuffer(body)) ; else if (Object.prototype.toString.call(body) === '[object ArrayBuffer]') {\n\t\t// body is ArrayBuffer\n\t\tbody = Buffer.from(body);\n\t} else if (ArrayBuffer.isView(body)) {\n\t\t// body is ArrayBufferView\n\t\tbody = Buffer.from(body.buffer, body.byteOffset, body.byteLength);\n\t} else if (body instanceof Stream) ; else {\n\t\t// none of the above\n\t\t// coerce to string then buffer\n\t\tbody = Buffer.from(String(body));\n\t}\n\tthis[INTERNALS] = {\n\t\tbody,\n\t\tdisturbed: false,\n\t\terror: null\n\t};\n\tthis.size = size;\n\tthis.timeout = timeout;\n\n\tif (body instanceof Stream) {\n\t\tbody.on('error', function (err) {\n\t\t\tconst error = err.name === 'AbortError' ? err : new FetchError(`Invalid response body while trying to fetch ${_this.url}: ${err.message}`, 'system', err);\n\t\t\t_this[INTERNALS].error = error;\n\t\t});\n\t}\n}\n\nBody.prototype = {\n\tget body() {\n\t\treturn this[INTERNALS].body;\n\t},\n\n\tget bodyUsed() {\n\t\treturn this[INTERNALS].disturbed;\n\t},\n\n\t/**\n  * Decode response as ArrayBuffer\n  *\n  * @return  Promise\n  */\n\tarrayBuffer() {\n\t\treturn consumeBody.call(this).then(function (buf) {\n\t\t\treturn buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);\n\t\t});\n\t},\n\n\t/**\n  * Return raw response as Blob\n  *\n  * @return Promise\n  */\n\tblob() {\n\t\tlet ct = this.headers && this.headers.get('content-type') || '';\n\t\treturn consumeBody.call(this).then(function (buf) {\n\t\t\treturn Object.assign(\n\t\t\t// Prevent copying\n\t\t\tnew Blob([], {\n\t\t\t\ttype: ct.toLowerCase()\n\t\t\t}), {\n\t\t\t\t[BUFFER]: buf\n\t\t\t});\n\t\t});\n\t},\n\n\t/**\n  * Decode response as json\n  *\n  * @return  Promise\n  */\n\tjson() {\n\t\tvar _this2 = this;\n\n\t\treturn consumeBody.call(this).then(function (buffer) {\n\t\t\ttry {\n\t\t\t\treturn JSON.parse(buffer.toString());\n\t\t\t} catch (err) {\n\t\t\t\treturn Body.Promise.reject(new FetchError(`invalid json response body at ${_this2.url} reason: ${err.message}`, 'invalid-json'));\n\t\t\t}\n\t\t});\n\t},\n\n\t/**\n  * Decode response as text\n  *\n  * @return  Promise\n  */\n\ttext() {\n\t\treturn consumeBody.call(this).then(function (buffer) {\n\t\t\treturn buffer.toString();\n\t\t});\n\t},\n\n\t/**\n  * Decode response as buffer (non-spec api)\n  *\n  * @return  Promise\n  */\n\tbuffer() {\n\t\treturn consumeBody.call(this);\n\t},\n\n\t/**\n  * Decode response as text, while automatically detecting the encoding and\n  * trying to decode to UTF-8 (non-spec api)\n  *\n  * @return  Promise\n  */\n\ttextConverted() {\n\t\tvar _this3 = this;\n\n\t\treturn consumeBody.call(this).then(function (buffer) {\n\t\t\treturn convertBody(buffer, _this3.headers);\n\t\t});\n\t}\n};\n\n// In browsers, all properties are enumerable.\nObject.defineProperties(Body.prototype, {\n\tbody: { enumerable: true },\n\tbodyUsed: { enumerable: true },\n\tarrayBuffer: { enumerable: true },\n\tblob: { enumerable: true },\n\tjson: { enumerable: true },\n\ttext: { enumerable: true }\n});\n\nBody.mixIn = function (proto) {\n\tfor (const name of Object.getOwnPropertyNames(Body.prototype)) {\n\t\t// istanbul ignore else: future proof\n\t\tif (!(name in proto)) {\n\t\t\tconst desc = Object.getOwnPropertyDescriptor(Body.prototype, name);\n\t\t\tObject.defineProperty(proto, name, desc);\n\t\t}\n\t}\n};\n\n/**\n * Consume and convert an entire Body to a Buffer.\n *\n * Ref: https://fetch.spec.whatwg.org/#concept-body-consume-body\n *\n * @return  Promise\n */\nfunction consumeBody() {\n\tvar _this4 = this;\n\n\tif (this[INTERNALS].disturbed) {\n\t\treturn Body.Promise.reject(new TypeError(`body used already for: ${this.url}`));\n\t}\n\n\tthis[INTERNALS].disturbed = true;\n\n\tif (this[INTERNALS].error) {\n\t\treturn Body.Promise.reject(this[INTERNALS].error);\n\t}\n\n\tlet body = this.body;\n\n\t// body is null\n\tif (body === null) {\n\t\treturn Body.Promise.resolve(Buffer.alloc(0));\n\t}\n\n\t// body is blob\n\tif (isBlob(body)) {\n\t\tbody = body.stream();\n\t}\n\n\t// body is buffer\n\tif (Buffer.isBuffer(body)) {\n\t\treturn Body.Promise.resolve(body);\n\t}\n\n\t// istanbul ignore if: should never happen\n\tif (!(body instanceof Stream)) {\n\t\treturn Body.Promise.resolve(Buffer.alloc(0));\n\t}\n\n\t// body is stream\n\t// get ready to actually consume the body\n\tlet accum = [];\n\tlet accumBytes = 0;\n\tlet abort = false;\n\n\treturn new Body.Promise(function (resolve, reject) {\n\t\tlet resTimeout;\n\n\t\t// allow timeout on slow response body\n\t\tif (_this4.timeout) {\n\t\t\tresTimeout = setTimeout(function () {\n\t\t\t\tabort = true;\n\t\t\t\treject(new FetchError(`Response timeout while trying to fetch ${_this4.url} (over ${_this4.timeout}ms)`, 'body-timeout'));\n\t\t\t}, _this4.timeout);\n\t\t}\n\n\t\t// handle stream errors\n\t\tbody.on('error', function (err) {\n\t\t\tif (err.name === 'AbortError') {\n\t\t\t\t// if the request was aborted, reject with this Error\n\t\t\t\tabort = true;\n\t\t\t\treject(err);\n\t\t\t} else {\n\t\t\t\t// other errors, such as incorrect content-encoding\n\t\t\t\treject(new FetchError(`Invalid response body while trying to fetch ${_this4.url}: ${err.message}`, 'system', err));\n\t\t\t}\n\t\t});\n\n\t\tbody.on('data', function (chunk) {\n\t\t\tif (abort || chunk === null) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (_this4.size && accumBytes + chunk.length > _this4.size) {\n\t\t\t\tabort = true;\n\t\t\t\treject(new FetchError(`content size at ${_this4.url} over limit: ${_this4.size}`, 'max-size'));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\taccumBytes += chunk.length;\n\t\t\taccum.push(chunk);\n\t\t});\n\n\t\tbody.on('end', function () {\n\t\t\tif (abort) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tclearTimeout(resTimeout);\n\n\t\t\ttry {\n\t\t\t\tresolve(Buffer.concat(accum, accumBytes));\n\t\t\t} catch (err) {\n\t\t\t\t// handle streams that have accumulated too much data (issue #414)\n\t\t\t\treject(new FetchError(`Could not create Buffer from response body for ${_this4.url}: ${err.message}`, 'system', err));\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Detect buffer encoding and convert to target encoding\n * ref: http://www.w3.org/TR/2011/WD-html5-20110113/parsing.html#determining-the-character-encoding\n *\n * @param   Buffer  buffer    Incoming buffer\n * @param   String  encoding  Target encoding\n * @return  String\n */\nfunction convertBody(buffer, headers) {\n\tif (typeof convert !== 'function') {\n\t\tthrow new Error('The package `encoding` must be installed to use the textConverted() function');\n\t}\n\n\tconst ct = headers.get('content-type');\n\tlet charset = 'utf-8';\n\tlet res, str;\n\n\t// header\n\tif (ct) {\n\t\tres = /charset=([^;]*)/i.exec(ct);\n\t}\n\n\t// no charset in content type, peek at response body for at most 1024 bytes\n\tstr = buffer.slice(0, 1024).toString();\n\n\t// html5\n\tif (!res && str) {\n\t\tres = /<meta.+?charset=(['\"])(.+?)\\1/i.exec(str);\n\t}\n\n\t// html4\n\tif (!res && str) {\n\t\tres = /<meta[\\s]+?http-equiv=(['\"])content-type\\1[\\s]+?content=(['\"])(.+?)\\2/i.exec(str);\n\t\tif (!res) {\n\t\t\tres = /<meta[\\s]+?content=(['\"])(.+?)\\1[\\s]+?http-equiv=(['\"])content-type\\3/i.exec(str);\n\t\t\tif (res) {\n\t\t\t\tres.pop(); // drop last quote\n\t\t\t}\n\t\t}\n\n\t\tif (res) {\n\t\t\tres = /charset=(.*)/i.exec(res.pop());\n\t\t}\n\t}\n\n\t// xml\n\tif (!res && str) {\n\t\tres = /<\\?xml.+?encoding=(['\"])(.+?)\\1/i.exec(str);\n\t}\n\n\t// found charset\n\tif (res) {\n\t\tcharset = res.pop();\n\n\t\t// prevent decode issues when sites use incorrect encoding\n\t\t// ref: https://hsivonen.fi/encoding-menu/\n\t\tif (charset === 'gb2312' || charset === 'gbk') {\n\t\t\tcharset = 'gb18030';\n\t\t}\n\t}\n\n\t// turn raw buffers into a single utf-8 buffer\n\treturn convert(buffer, 'UTF-8', charset).toString();\n}\n\n/**\n * Detect a URLSearchParams object\n * ref: https://github.com/bitinn/node-fetch/issues/296#issuecomment-307598143\n *\n * @param   Object  obj     Object to detect by type or brand\n * @return  String\n */\nfunction isURLSearchParams(obj) {\n\t// Duck-typing as a necessary condition.\n\tif (typeof obj !== 'object' || typeof obj.append !== 'function' || typeof obj.delete !== 'function' || typeof obj.get !== 'function' || typeof obj.getAll !== 'function' || typeof obj.has !== 'function' || typeof obj.set !== 'function') {\n\t\treturn false;\n\t}\n\n\t// Brand-checking and more duck-typing as optional condition.\n\treturn obj.constructor.name === 'URLSearchParams' || Object.prototype.toString.call(obj) === '[object URLSearchParams]' || typeof obj.sort === 'function';\n}\n\n/**\n * Check if `obj` is a W3C `Blob` object (which `File` inherits from)\n * @param  {*} obj\n * @return {boolean}\n */\nfunction isBlob(obj) {\n\treturn typeof obj === 'object' && typeof obj.arrayBuffer === 'function' && typeof obj.type === 'string' && typeof obj.stream === 'function' && typeof obj.constructor === 'function' && typeof obj.constructor.name === 'string' && /^(Blob|File)$/.test(obj.constructor.name) && /^(Blob|File)$/.test(obj[Symbol.toStringTag]);\n}\n\n/**\n * Clone body given Res/Req instance\n *\n * @param   Mixed  instance  Response or Request instance\n * @return  Mixed\n */\nfunction clone(instance) {\n\tlet p1, p2;\n\tlet body = instance.body;\n\n\t// don't allow cloning a used body\n\tif (instance.bodyUsed) {\n\t\tthrow new Error('cannot clone body after it is used');\n\t}\n\n\t// check that body is a stream and not form-data object\n\t// note: we can't clone the form-data object without having it as a dependency\n\tif (body instanceof Stream && typeof body.getBoundary !== 'function') {\n\t\t// tee instance body\n\t\tp1 = new PassThrough();\n\t\tp2 = new PassThrough();\n\t\tbody.pipe(p1);\n\t\tbody.pipe(p2);\n\t\t// set instance body to teed body and return the other teed body\n\t\tinstance[INTERNALS].body = p1;\n\t\tbody = p2;\n\t}\n\n\treturn body;\n}\n\n/**\n * Performs the operation \"extract a `Content-Type` value from |object|\" as\n * specified in the specification:\n * https://fetch.spec.whatwg.org/#concept-bodyinit-extract\n *\n * This function assumes that instance.body is present.\n *\n * @param   Mixed  instance  Any options.body input\n */\nfunction extractContentType(body) {\n\tif (body === null) {\n\t\t// body is null\n\t\treturn null;\n\t} else if (typeof body === 'string') {\n\t\t// body is string\n\t\treturn 'text/plain;charset=UTF-8';\n\t} else if (isURLSearchParams(body)) {\n\t\t// body is a URLSearchParams\n\t\treturn 'application/x-www-form-urlencoded;charset=UTF-8';\n\t} else if (isBlob(body)) {\n\t\t// body is blob\n\t\treturn body.type || null;\n\t} else if (Buffer.isBuffer(body)) {\n\t\t// body is buffer\n\t\treturn null;\n\t} else if (Object.prototype.toString.call(body) === '[object ArrayBuffer]') {\n\t\t// body is ArrayBuffer\n\t\treturn null;\n\t} else if (ArrayBuffer.isView(body)) {\n\t\t// body is ArrayBufferView\n\t\treturn null;\n\t} else if (typeof body.getBoundary === 'function') {\n\t\t// detect form data input from form-data module\n\t\treturn `multipart/form-data;boundary=${body.getBoundary()}`;\n\t} else if (body instanceof Stream) {\n\t\t// body is stream\n\t\t// can't really do much about this\n\t\treturn null;\n\t} else {\n\t\t// Body constructor defaults other things to string\n\t\treturn 'text/plain;charset=UTF-8';\n\t}\n}\n\n/**\n * The Fetch Standard treats this as if \"total bytes\" is a property on the body.\n * For us, we have to explicitly get it with a function.\n *\n * ref: https://fetch.spec.whatwg.org/#concept-body-total-bytes\n *\n * @param   Body    instance   Instance of Body\n * @return  Number?            Number of bytes, or null if not possible\n */\nfunction getTotalBytes(instance) {\n\tconst body = instance.body;\n\n\n\tif (body === null) {\n\t\t// body is null\n\t\treturn 0;\n\t} else if (isBlob(body)) {\n\t\treturn body.size;\n\t} else if (Buffer.isBuffer(body)) {\n\t\t// body is buffer\n\t\treturn body.length;\n\t} else if (body && typeof body.getLengthSync === 'function') {\n\t\t// detect form data input from form-data module\n\t\tif (body._lengthRetrievers && body._lengthRetrievers.length == 0 || // 1.x\n\t\tbody.hasKnownLength && body.hasKnownLength()) {\n\t\t\t// 2.x\n\t\t\treturn body.getLengthSync();\n\t\t}\n\t\treturn null;\n\t} else {\n\t\t// body is stream\n\t\treturn null;\n\t}\n}\n\n/**\n * Write a Body to a Node.js WritableStream (e.g. http.Request) object.\n *\n * @param   Body    instance   Instance of Body\n * @return  Void\n */\nfunction writeToStream(dest, instance) {\n\tconst body = instance.body;\n\n\n\tif (body === null) {\n\t\t// body is null\n\t\tdest.end();\n\t} else if (isBlob(body)) {\n\t\tbody.stream().pipe(dest);\n\t} else if (Buffer.isBuffer(body)) {\n\t\t// body is buffer\n\t\tdest.write(body);\n\t\tdest.end();\n\t} else {\n\t\t// body is stream\n\t\tbody.pipe(dest);\n\t}\n}\n\n// expose Promise\nBody.Promise = global.Promise;\n\n/**\n * headers.js\n *\n * Headers class offers convenient helpers\n */\n\nconst invalidTokenRegex = /[^\\^_`a-zA-Z\\-0-9!#$%&'*+.|~]/;\nconst invalidHeaderCharRegex = /[^\\t\\x20-\\x7e\\x80-\\xff]/;\n\nfunction validateName(name) {\n\tname = `${name}`;\n\tif (invalidTokenRegex.test(name) || name === '') {\n\t\tthrow new TypeError(`${name} is not a legal HTTP header name`);\n\t}\n}\n\nfunction validateValue(value) {\n\tvalue = `${value}`;\n\tif (invalidHeaderCharRegex.test(value)) {\n\t\tthrow new TypeError(`${value} is not a legal HTTP header value`);\n\t}\n}\n\n/**\n * Find the key in the map object given a header name.\n *\n * Returns undefined if not found.\n *\n * @param   String  name  Header name\n * @return  String|Undefined\n */\nfunction find(map, name) {\n\tname = name.toLowerCase();\n\tfor (const key in map) {\n\t\tif (key.toLowerCase() === name) {\n\t\t\treturn key;\n\t\t}\n\t}\n\treturn undefined;\n}\n\nconst MAP = Symbol('map');\nclass Headers {\n\t/**\n  * Headers class\n  *\n  * @param   Object  headers  Response headers\n  * @return  Void\n  */\n\tconstructor() {\n\t\tlet init = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined;\n\n\t\tthis[MAP] = Object.create(null);\n\n\t\tif (init instanceof Headers) {\n\t\t\tconst rawHeaders = init.raw();\n\t\t\tconst headerNames = Object.keys(rawHeaders);\n\n\t\t\tfor (const headerName of headerNames) {\n\t\t\t\tfor (const value of rawHeaders[headerName]) {\n\t\t\t\t\tthis.append(headerName, value);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\t// We don't worry about converting prop to ByteString here as append()\n\t\t// will handle it.\n\t\tif (init == null) ; else if (typeof init === 'object') {\n\t\t\tconst method = init[Symbol.iterator];\n\t\t\tif (method != null) {\n\t\t\t\tif (typeof method !== 'function') {\n\t\t\t\t\tthrow new TypeError('Header pairs must be iterable');\n\t\t\t\t}\n\n\t\t\t\t// sequence<sequence<ByteString>>\n\t\t\t\t// Note: per spec we have to first exhaust the lists then process them\n\t\t\t\tconst pairs = [];\n\t\t\t\tfor (const pair of init) {\n\t\t\t\t\tif (typeof pair !== 'object' || typeof pair[Symbol.iterator] !== 'function') {\n\t\t\t\t\t\tthrow new TypeError('Each header pair must be iterable');\n\t\t\t\t\t}\n\t\t\t\t\tpairs.push(Array.from(pair));\n\t\t\t\t}\n\n\t\t\t\tfor (const pair of pairs) {\n\t\t\t\t\tif (pair.length !== 2) {\n\t\t\t\t\t\tthrow new TypeError('Each header pair must be a name/value tuple');\n\t\t\t\t\t}\n\t\t\t\t\tthis.append(pair[0], pair[1]);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// record<ByteString, ByteString>\n\t\t\t\tfor (const key of Object.keys(init)) {\n\t\t\t\t\tconst value = init[key];\n\t\t\t\t\tthis.append(key, value);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tthrow new TypeError('Provided initializer must be an object');\n\t\t}\n\t}\n\n\t/**\n  * Return combined header value given name\n  *\n  * @param   String  name  Header name\n  * @return  Mixed\n  */\n\tget(name) {\n\t\tname = `${name}`;\n\t\tvalidateName(name);\n\t\tconst key = find(this[MAP], name);\n\t\tif (key === undefined) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn this[MAP][key].join(', ');\n\t}\n\n\t/**\n  * Iterate over all headers\n  *\n  * @param   Function  callback  Executed for each item with parameters (value, name, thisArg)\n  * @param   Boolean   thisArg   `this` context for callback function\n  * @return  Void\n  */\n\tforEach(callback) {\n\t\tlet thisArg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;\n\n\t\tlet pairs = getHeaders(this);\n\t\tlet i = 0;\n\t\twhile (i < pairs.length) {\n\t\t\tvar _pairs$i = pairs[i];\n\t\t\tconst name = _pairs$i[0],\n\t\t\t      value = _pairs$i[1];\n\n\t\t\tcallback.call(thisArg, value, name, this);\n\t\t\tpairs = getHeaders(this);\n\t\t\ti++;\n\t\t}\n\t}\n\n\t/**\n  * Overwrite header values given name\n  *\n  * @param   String  name   Header name\n  * @param   String  value  Header value\n  * @return  Void\n  */\n\tset(name, value) {\n\t\tname = `${name}`;\n\t\tvalue = `${value}`;\n\t\tvalidateName(name);\n\t\tvalidateValue(value);\n\t\tconst key = find(this[MAP], name);\n\t\tthis[MAP][key !== undefined ? key : name] = [value];\n\t}\n\n\t/**\n  * Append a value onto existing header\n  *\n  * @param   String  name   Header name\n  * @param   String  value  Header value\n  * @return  Void\n  */\n\tappend(name, value) {\n\t\tname = `${name}`;\n\t\tvalue = `${value}`;\n\t\tvalidateName(name);\n\t\tvalidateValue(value);\n\t\tconst key = find(this[MAP], name);\n\t\tif (key !== undefined) {\n\t\t\tthis[MAP][key].push(value);\n\t\t} else {\n\t\t\tthis[MAP][name] = [value];\n\t\t}\n\t}\n\n\t/**\n  * Check for header name existence\n  *\n  * @param   String   name  Header name\n  * @return  Boolean\n  */\n\thas(name) {\n\t\tname = `${name}`;\n\t\tvalidateName(name);\n\t\treturn find(this[MAP], name) !== undefined;\n\t}\n\n\t/**\n  * Delete all header values given name\n  *\n  * @param   String  name  Header name\n  * @return  Void\n  */\n\tdelete(name) {\n\t\tname = `${name}`;\n\t\tvalidateName(name);\n\t\tconst key = find(this[MAP], name);\n\t\tif (key !== undefined) {\n\t\t\tdelete this[MAP][key];\n\t\t}\n\t}\n\n\t/**\n  * Return raw headers (non-spec api)\n  *\n  * @return  Object\n  */\n\traw() {\n\t\treturn this[MAP];\n\t}\n\n\t/**\n  * Get an iterator on keys.\n  *\n  * @return  Iterator\n  */\n\tkeys() {\n\t\treturn createHeadersIterator(this, 'key');\n\t}\n\n\t/**\n  * Get an iterator on values.\n  *\n  * @return  Iterator\n  */\n\tvalues() {\n\t\treturn createHeadersIterator(this, 'value');\n\t}\n\n\t/**\n  * Get an iterator on entries.\n  *\n  * This is the default iterator of the Headers object.\n  *\n  * @return  Iterator\n  */\n\t[Symbol.iterator]() {\n\t\treturn createHeadersIterator(this, 'key+value');\n\t}\n}\nHeaders.prototype.entries = Headers.prototype[Symbol.iterator];\n\nObject.defineProperty(Headers.prototype, Symbol.toStringTag, {\n\tvalue: 'Headers',\n\twritable: false,\n\tenumerable: false,\n\tconfigurable: true\n});\n\nObject.defineProperties(Headers.prototype, {\n\tget: { enumerable: true },\n\tforEach: { enumerable: true },\n\tset: { enumerable: true },\n\tappend: { enumerable: true },\n\thas: { enumerable: true },\n\tdelete: { enumerable: true },\n\tkeys: { enumerable: true },\n\tvalues: { enumerable: true },\n\tentries: { enumerable: true }\n});\n\nfunction getHeaders(headers) {\n\tlet kind = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'key+value';\n\n\tconst keys = Object.keys(headers[MAP]).sort();\n\treturn keys.map(kind === 'key' ? function (k) {\n\t\treturn k.toLowerCase();\n\t} : kind === 'value' ? function (k) {\n\t\treturn headers[MAP][k].join(', ');\n\t} : function (k) {\n\t\treturn [k.toLowerCase(), headers[MAP][k].join(', ')];\n\t});\n}\n\nconst INTERNAL = Symbol('internal');\n\nfunction createHeadersIterator(target, kind) {\n\tconst iterator = Object.create(HeadersIteratorPrototype);\n\titerator[INTERNAL] = {\n\t\ttarget,\n\t\tkind,\n\t\tindex: 0\n\t};\n\treturn iterator;\n}\n\nconst HeadersIteratorPrototype = Object.setPrototypeOf({\n\tnext() {\n\t\t// istanbul ignore if\n\t\tif (!this || Object.getPrototypeOf(this) !== HeadersIteratorPrototype) {\n\t\t\tthrow new TypeError('Value of `this` is not a HeadersIterator');\n\t\t}\n\n\t\tvar _INTERNAL = this[INTERNAL];\n\t\tconst target = _INTERNAL.target,\n\t\t      kind = _INTERNAL.kind,\n\t\t      index = _INTERNAL.index;\n\n\t\tconst values = getHeaders(target, kind);\n\t\tconst len = values.length;\n\t\tif (index >= len) {\n\t\t\treturn {\n\t\t\t\tvalue: undefined,\n\t\t\t\tdone: true\n\t\t\t};\n\t\t}\n\n\t\tthis[INTERNAL].index = index + 1;\n\n\t\treturn {\n\t\t\tvalue: values[index],\n\t\t\tdone: false\n\t\t};\n\t}\n}, Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]())));\n\nObject.defineProperty(HeadersIteratorPrototype, Symbol.toStringTag, {\n\tvalue: 'HeadersIterator',\n\twritable: false,\n\tenumerable: false,\n\tconfigurable: true\n});\n\n/**\n * Export the Headers object in a form that Node.js can consume.\n *\n * @param   Headers  headers\n * @return  Object\n */\nfunction exportNodeCompatibleHeaders(headers) {\n\tconst obj = Object.assign({ __proto__: null }, headers[MAP]);\n\n\t// http.request() only supports string as Host header. This hack makes\n\t// specifying custom Host header possible.\n\tconst hostHeaderKey = find(headers[MAP], 'Host');\n\tif (hostHeaderKey !== undefined) {\n\t\tobj[hostHeaderKey] = obj[hostHeaderKey][0];\n\t}\n\n\treturn obj;\n}\n\n/**\n * Create a Headers object from an object of headers, ignoring those that do\n * not conform to HTTP grammar productions.\n *\n * @param   Object  obj  Object of headers\n * @return  Headers\n */\nfunction createHeadersLenient(obj) {\n\tconst headers = new Headers();\n\tfor (const name of Object.keys(obj)) {\n\t\tif (invalidTokenRegex.test(name)) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (Array.isArray(obj[name])) {\n\t\t\tfor (const val of obj[name]) {\n\t\t\t\tif (invalidHeaderCharRegex.test(val)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (headers[MAP][name] === undefined) {\n\t\t\t\t\theaders[MAP][name] = [val];\n\t\t\t\t} else {\n\t\t\t\t\theaders[MAP][name].push(val);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (!invalidHeaderCharRegex.test(obj[name])) {\n\t\t\theaders[MAP][name] = [obj[name]];\n\t\t}\n\t}\n\treturn headers;\n}\n\nconst INTERNALS$1 = Symbol('Response internals');\n\n// fix an issue where \"STATUS_CODES\" aren't a named export for node <10\nconst STATUS_CODES = http.STATUS_CODES;\n\n/**\n * Response class\n *\n * @param   Stream  body  Readable stream\n * @param   Object  opts  Response options\n * @return  Void\n */\nclass Response {\n\tconstructor() {\n\t\tlet body = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n\t\tlet opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n\t\tBody.call(this, body, opts);\n\n\t\tconst status = opts.status || 200;\n\t\tconst headers = new Headers(opts.headers);\n\n\t\tif (body != null && !headers.has('Content-Type')) {\n\t\t\tconst contentType = extractContentType(body);\n\t\t\tif (contentType) {\n\t\t\t\theaders.append('Content-Type', contentType);\n\t\t\t}\n\t\t}\n\n\t\tthis[INTERNALS$1] = {\n\t\t\turl: opts.url,\n\t\t\tstatus,\n\t\t\tstatusText: opts.statusText || STATUS_CODES[status],\n\t\t\theaders,\n\t\t\tcounter: opts.counter\n\t\t};\n\t}\n\n\tget url() {\n\t\treturn this[INTERNALS$1].url || '';\n\t}\n\n\tget status() {\n\t\treturn this[INTERNALS$1].status;\n\t}\n\n\t/**\n  * Convenience property representing if the request ended normally\n  */\n\tget ok() {\n\t\treturn this[INTERNALS$1].status >= 200 && this[INTERNALS$1].status < 300;\n\t}\n\n\tget redirected() {\n\t\treturn this[INTERNALS$1].counter > 0;\n\t}\n\n\tget statusText() {\n\t\treturn this[INTERNALS$1].statusText;\n\t}\n\n\tget headers() {\n\t\treturn this[INTERNALS$1].headers;\n\t}\n\n\t/**\n  * Clone this response\n  *\n  * @return  Response\n  */\n\tclone() {\n\t\treturn new Response(clone(this), {\n\t\t\turl: this.url,\n\t\t\tstatus: this.status,\n\t\t\tstatusText: this.statusText,\n\t\t\theaders: this.headers,\n\t\t\tok: this.ok,\n\t\t\tredirected: this.redirected\n\t\t});\n\t}\n}\n\nBody.mixIn(Response.prototype);\n\nObject.defineProperties(Response.prototype, {\n\turl: { enumerable: true },\n\tstatus: { enumerable: true },\n\tok: { enumerable: true },\n\tredirected: { enumerable: true },\n\tstatusText: { enumerable: true },\n\theaders: { enumerable: true },\n\tclone: { enumerable: true }\n});\n\nObject.defineProperty(Response.prototype, Symbol.toStringTag, {\n\tvalue: 'Response',\n\twritable: false,\n\tenumerable: false,\n\tconfigurable: true\n});\n\nconst INTERNALS$2 = Symbol('Request internals');\nconst URL = Url.URL || whatwgUrl.URL;\n\n// fix an issue where \"format\", \"parse\" aren't a named export for node <10\nconst parse_url = Url.parse;\nconst format_url = Url.format;\n\n/**\n * Wrapper around `new URL` to handle arbitrary URLs\n *\n * @param  {string} urlStr\n * @return {void}\n */\nfunction parseURL(urlStr) {\n\t/*\n \tCheck whether the URL is absolute or not\n \t\tScheme: https://tools.ietf.org/html/rfc3986#section-3.1\n \tAbsolute URL: https://tools.ietf.org/html/rfc3986#section-4.3\n */\n\tif (/^[a-zA-Z][a-zA-Z\\d+\\-.]*:/.exec(urlStr)) {\n\t\turlStr = new URL(urlStr).toString();\n\t}\n\n\t// Fallback to old implementation for arbitrary URLs\n\treturn parse_url(urlStr);\n}\n\nconst streamDestructionSupported = 'destroy' in Stream.Readable.prototype;\n\n/**\n * Check if a value is an instance of Request.\n *\n * @param   Mixed   input\n * @return  Boolean\n */\nfunction isRequest(input) {\n\treturn typeof input === 'object' && typeof input[INTERNALS$2] === 'object';\n}\n\nfunction isAbortSignal(signal) {\n\tconst proto = signal && typeof signal === 'object' && Object.getPrototypeOf(signal);\n\treturn !!(proto && proto.constructor.name === 'AbortSignal');\n}\n\n/**\n * Request class\n *\n * @param   Mixed   input  Url or Request instance\n * @param   Object  init   Custom options\n * @return  Void\n */\nclass Request {\n\tconstructor(input) {\n\t\tlet init = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n\t\tlet parsedURL;\n\n\t\t// normalize input\n\t\tif (!isRequest(input)) {\n\t\t\tif (input && input.href) {\n\t\t\t\t// in order to support Node.js' Url objects; though WHATWG's URL objects\n\t\t\t\t// will fall into this branch also (since their `toString()` will return\n\t\t\t\t// `href` property anyway)\n\t\t\t\tparsedURL = parseURL(input.href);\n\t\t\t} else {\n\t\t\t\t// coerce input to a string before attempting to parse\n\t\t\t\tparsedURL = parseURL(`${input}`);\n\t\t\t}\n\t\t\tinput = {};\n\t\t} else {\n\t\t\tparsedURL = parseURL(input.url);\n\t\t}\n\n\t\tlet method = init.method || input.method || 'GET';\n\t\tmethod = method.toUpperCase();\n\n\t\tif ((init.body != null || isRequest(input) && input.body !== null) && (method === 'GET' || method === 'HEAD')) {\n\t\t\tthrow new TypeError('Request with GET/HEAD method cannot have body');\n\t\t}\n\n\t\tlet inputBody = init.body != null ? init.body : isRequest(input) && input.body !== null ? clone(input) : null;\n\n\t\tBody.call(this, inputBody, {\n\t\t\ttimeout: init.timeout || input.timeout || 0,\n\t\t\tsize: init.size || input.size || 0\n\t\t});\n\n\t\tconst headers = new Headers(init.headers || input.headers || {});\n\n\t\tif (inputBody != null && !headers.has('Content-Type')) {\n\t\t\tconst contentType = extractContentType(inputBody);\n\t\t\tif (contentType) {\n\t\t\t\theaders.append('Content-Type', contentType);\n\t\t\t}\n\t\t}\n\n\t\tlet signal = isRequest(input) ? input.signal : null;\n\t\tif ('signal' in init) signal = init.signal;\n\n\t\tif (signal != null && !isAbortSignal(signal)) {\n\t\t\tthrow new TypeError('Expected signal to be an instanceof AbortSignal');\n\t\t}\n\n\t\tthis[INTERNALS$2] = {\n\t\t\tmethod,\n\t\t\tredirect: init.redirect || input.redirect || 'follow',\n\t\t\theaders,\n\t\t\tparsedURL,\n\t\t\tsignal\n\t\t};\n\n\t\t// node-fetch-only options\n\t\tthis.follow = init.follow !== undefined ? init.follow : input.follow !== undefined ? input.follow : 20;\n\t\tthis.compress = init.compress !== undefined ? init.compress : input.compress !== undefined ? input.compress : true;\n\t\tthis.counter = init.counter || input.counter || 0;\n\t\tthis.agent = init.agent || input.agent;\n\t}\n\n\tget method() {\n\t\treturn this[INTERNALS$2].method;\n\t}\n\n\tget url() {\n\t\treturn format_url(this[INTERNALS$2].parsedURL);\n\t}\n\n\tget headers() {\n\t\treturn this[INTERNALS$2].headers;\n\t}\n\n\tget redirect() {\n\t\treturn this[INTERNALS$2].redirect;\n\t}\n\n\tget signal() {\n\t\treturn this[INTERNALS$2].signal;\n\t}\n\n\t/**\n  * Clone this request\n  *\n  * @return  Request\n  */\n\tclone() {\n\t\treturn new Request(this);\n\t}\n}\n\nBody.mixIn(Request.prototype);\n\nObject.defineProperty(Request.prototype, Symbol.toStringTag, {\n\tvalue: 'Request',\n\twritable: false,\n\tenumerable: false,\n\tconfigurable: true\n});\n\nObject.defineProperties(Request.prototype, {\n\tmethod: { enumerable: true },\n\turl: { enumerable: true },\n\theaders: { enumerable: true },\n\tredirect: { enumerable: true },\n\tclone: { enumerable: true },\n\tsignal: { enumerable: true }\n});\n\n/**\n * Convert a Request to Node.js http request options.\n *\n * @param   Request  A Request instance\n * @return  Object   The options object to be passed to http.request\n */\nfunction getNodeRequestOptions(request) {\n\tconst parsedURL = request[INTERNALS$2].parsedURL;\n\tconst headers = new Headers(request[INTERNALS$2].headers);\n\n\t// fetch step 1.3\n\tif (!headers.has('Accept')) {\n\t\theaders.set('Accept', '*/*');\n\t}\n\n\t// Basic fetch\n\tif (!parsedURL.protocol || !parsedURL.hostname) {\n\t\tthrow new TypeError('Only absolute URLs are supported');\n\t}\n\n\tif (!/^https?:$/.test(parsedURL.protocol)) {\n\t\tthrow new TypeError('Only HTTP(S) protocols are supported');\n\t}\n\n\tif (request.signal && request.body instanceof Stream.Readable && !streamDestructionSupported) {\n\t\tthrow new Error('Cancellation of streamed requests with AbortSignal is not supported in node < 8');\n\t}\n\n\t// HTTP-network-or-cache fetch steps 2.4-2.7\n\tlet contentLengthValue = null;\n\tif (request.body == null && /^(POST|PUT)$/i.test(request.method)) {\n\t\tcontentLengthValue = '0';\n\t}\n\tif (request.body != null) {\n\t\tconst totalBytes = getTotalBytes(request);\n\t\tif (typeof totalBytes === 'number') {\n\t\t\tcontentLengthValue = String(totalBytes);\n\t\t}\n\t}\n\tif (contentLengthValue) {\n\t\theaders.set('Content-Length', contentLengthValue);\n\t}\n\n\t// HTTP-network-or-cache fetch step 2.11\n\tif (!headers.has('User-Agent')) {\n\t\theaders.set('User-Agent', 'node-fetch/1.0 (+https://github.com/bitinn/node-fetch)');\n\t}\n\n\t// HTTP-network-or-cache fetch step 2.15\n\tif (request.compress && !headers.has('Accept-Encoding')) {\n\t\theaders.set('Accept-Encoding', 'gzip,deflate');\n\t}\n\n\tlet agent = request.agent;\n\tif (typeof agent === 'function') {\n\t\tagent = agent(parsedURL);\n\t}\n\n\tif (!headers.has('Connection') && !agent) {\n\t\theaders.set('Connection', 'close');\n\t}\n\n\t// HTTP-network fetch step 4.2\n\t// chunked encoding is handled by Node.js\n\n\treturn Object.assign({}, parsedURL, {\n\t\tmethod: request.method,\n\t\theaders: exportNodeCompatibleHeaders(headers),\n\t\tagent\n\t});\n}\n\n/**\n * abort-error.js\n *\n * AbortError interface for cancelled requests\n */\n\n/**\n * Create AbortError instance\n *\n * @param   String      message      Error message for human\n * @return  AbortError\n */\nfunction AbortError(message) {\n  Error.call(this, message);\n\n  this.type = 'aborted';\n  this.message = message;\n\n  // hide custom error implementation details from end-users\n  Error.captureStackTrace(this, this.constructor);\n}\n\nAbortError.prototype = Object.create(Error.prototype);\nAbortError.prototype.constructor = AbortError;\nAbortError.prototype.name = 'AbortError';\n\nconst URL$1 = Url.URL || whatwgUrl.URL;\n\n// fix an issue where \"PassThrough\", \"resolve\" aren't a named export for node <10\nconst PassThrough$1 = Stream.PassThrough;\n\nconst isDomainOrSubdomain = function isDomainOrSubdomain(destination, original) {\n\tconst orig = new URL$1(original).hostname;\n\tconst dest = new URL$1(destination).hostname;\n\n\treturn orig === dest || orig[orig.length - dest.length - 1] === '.' && orig.endsWith(dest);\n};\n\n/**\n * isSameProtocol reports whether the two provided URLs use the same protocol.\n *\n * Both domains must already be in canonical form.\n * @param {string|URL} original\n * @param {string|URL} destination\n */\nconst isSameProtocol = function isSameProtocol(destination, original) {\n\tconst orig = new URL$1(original).protocol;\n\tconst dest = new URL$1(destination).protocol;\n\n\treturn orig === dest;\n};\n\n/**\n * Fetch function\n *\n * @param   Mixed    url   Absolute url or Request instance\n * @param   Object   opts  Fetch options\n * @return  Promise\n */\nfunction fetch(url, opts) {\n\n\t// allow custom promise\n\tif (!fetch.Promise) {\n\t\tthrow new Error('native promise missing, set fetch.Promise to your favorite alternative');\n\t}\n\n\tBody.Promise = fetch.Promise;\n\n\t// wrap http.request into fetch\n\treturn new fetch.Promise(function (resolve, reject) {\n\t\t// build request object\n\t\tconst request = new Request(url, opts);\n\t\tconst options = getNodeRequestOptions(request);\n\n\t\tconst send = (options.protocol === 'https:' ? https : http).request;\n\t\tconst signal = request.signal;\n\n\t\tlet response = null;\n\n\t\tconst abort = function abort() {\n\t\t\tlet error = new AbortError('The user aborted a request.');\n\t\t\treject(error);\n\t\t\tif (request.body && request.body instanceof Stream.Readable) {\n\t\t\t\tdestroyStream(request.body, error);\n\t\t\t}\n\t\t\tif (!response || !response.body) return;\n\t\t\tresponse.body.emit('error', error);\n\t\t};\n\n\t\tif (signal && signal.aborted) {\n\t\t\tabort();\n\t\t\treturn;\n\t\t}\n\n\t\tconst abortAndFinalize = function abortAndFinalize() {\n\t\t\tabort();\n\t\t\tfinalize();\n\t\t};\n\n\t\t// send request\n\t\tconst req = send(options);\n\t\tlet reqTimeout;\n\n\t\tif (signal) {\n\t\t\tsignal.addEventListener('abort', abortAndFinalize);\n\t\t}\n\n\t\tfunction finalize() {\n\t\t\treq.abort();\n\t\t\tif (signal) signal.removeEventListener('abort', abortAndFinalize);\n\t\t\tclearTimeout(reqTimeout);\n\t\t}\n\n\t\tif (request.timeout) {\n\t\t\treq.once('socket', function (socket) {\n\t\t\t\treqTimeout = setTimeout(function () {\n\t\t\t\t\treject(new FetchError(`network timeout at: ${request.url}`, 'request-timeout'));\n\t\t\t\t\tfinalize();\n\t\t\t\t}, request.timeout);\n\t\t\t});\n\t\t}\n\n\t\treq.on('error', function (err) {\n\t\t\treject(new FetchError(`request to ${request.url} failed, reason: ${err.message}`, 'system', err));\n\n\t\t\tif (response && response.body) {\n\t\t\t\tdestroyStream(response.body, err);\n\t\t\t}\n\n\t\t\tfinalize();\n\t\t});\n\n\t\tfixResponseChunkedTransferBadEnding(req, function (err) {\n\t\t\tif (signal && signal.aborted) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (response && response.body) {\n\t\t\t\tdestroyStream(response.body, err);\n\t\t\t}\n\t\t});\n\n\t\t/* c8 ignore next 18 */\n\t\tif (parseInt(process.version.substring(1)) < 14) {\n\t\t\t// Before Node.js 14, pipeline() does not fully support async iterators and does not always\n\t\t\t// properly handle when the socket close/end events are out of order.\n\t\t\treq.on('socket', function (s) {\n\t\t\t\ts.addListener('close', function (hadError) {\n\t\t\t\t\t// if a data listener is still present we didn't end cleanly\n\t\t\t\t\tconst hasDataListener = s.listenerCount('data') > 0;\n\n\t\t\t\t\t// if end happened before close but the socket didn't emit an error, do it now\n\t\t\t\t\tif (response && hasDataListener && !hadError && !(signal && signal.aborted)) {\n\t\t\t\t\t\tconst err = new Error('Premature close');\n\t\t\t\t\t\terr.code = 'ERR_STREAM_PREMATURE_CLOSE';\n\t\t\t\t\t\tresponse.body.emit('error', err);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\treq.on('response', function (res) {\n\t\t\tclearTimeout(reqTimeout);\n\n\t\t\tconst headers = createHeadersLenient(res.headers);\n\n\t\t\t// HTTP fetch step 5\n\t\t\tif (fetch.isRedirect(res.statusCode)) {\n\t\t\t\t// HTTP fetch step 5.2\n\t\t\t\tconst location = headers.get('Location');\n\n\t\t\t\t// HTTP fetch step 5.3\n\t\t\t\tlet locationURL = null;\n\t\t\t\ttry {\n\t\t\t\t\tlocationURL = location === null ? null : new URL$1(location, request.url).toString();\n\t\t\t\t} catch (err) {\n\t\t\t\t\t// error here can only be invalid URL in Location: header\n\t\t\t\t\t// do not throw when options.redirect == manual\n\t\t\t\t\t// let the user extract the errorneous redirect URL\n\t\t\t\t\tif (request.redirect !== 'manual') {\n\t\t\t\t\t\treject(new FetchError(`uri requested responds with an invalid redirect URL: ${location}`, 'invalid-redirect'));\n\t\t\t\t\t\tfinalize();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// HTTP fetch step 5.5\n\t\t\t\tswitch (request.redirect) {\n\t\t\t\t\tcase 'error':\n\t\t\t\t\t\treject(new FetchError(`uri requested responds with a redirect, redirect mode is set to error: ${request.url}`, 'no-redirect'));\n\t\t\t\t\t\tfinalize();\n\t\t\t\t\t\treturn;\n\t\t\t\t\tcase 'manual':\n\t\t\t\t\t\t// node-fetch-specific step: make manual redirect a bit easier to use by setting the Location header value to the resolved URL.\n\t\t\t\t\t\tif (locationURL !== null) {\n\t\t\t\t\t\t\t// handle corrupted header\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\theaders.set('Location', locationURL);\n\t\t\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\t\t\t// istanbul ignore next: nodejs server prevent invalid response headers, we can't test this through normal request\n\t\t\t\t\t\t\t\treject(err);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'follow':\n\t\t\t\t\t\t// HTTP-redirect fetch step 2\n\t\t\t\t\t\tif (locationURL === null) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// HTTP-redirect fetch step 5\n\t\t\t\t\t\tif (request.counter >= request.follow) {\n\t\t\t\t\t\t\treject(new FetchError(`maximum redirect reached at: ${request.url}`, 'max-redirect'));\n\t\t\t\t\t\t\tfinalize();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// HTTP-redirect fetch step 6 (counter increment)\n\t\t\t\t\t\t// Create a new Request object.\n\t\t\t\t\t\tconst requestOpts = {\n\t\t\t\t\t\t\theaders: new Headers(request.headers),\n\t\t\t\t\t\t\tfollow: request.follow,\n\t\t\t\t\t\t\tcounter: request.counter + 1,\n\t\t\t\t\t\t\tagent: request.agent,\n\t\t\t\t\t\t\tcompress: request.compress,\n\t\t\t\t\t\t\tmethod: request.method,\n\t\t\t\t\t\t\tbody: request.body,\n\t\t\t\t\t\t\tsignal: request.signal,\n\t\t\t\t\t\t\ttimeout: request.timeout,\n\t\t\t\t\t\t\tsize: request.size\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tif (!isDomainOrSubdomain(request.url, locationURL) || !isSameProtocol(request.url, locationURL)) {\n\t\t\t\t\t\t\tfor (const name of ['authorization', 'www-authenticate', 'cookie', 'cookie2']) {\n\t\t\t\t\t\t\t\trequestOpts.headers.delete(name);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// HTTP-redirect fetch step 9\n\t\t\t\t\t\tif (res.statusCode !== 303 && request.body && getTotalBytes(request) === null) {\n\t\t\t\t\t\t\treject(new FetchError('Cannot follow redirect with body being a readable stream', 'unsupported-redirect'));\n\t\t\t\t\t\t\tfinalize();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// HTTP-redirect fetch step 11\n\t\t\t\t\t\tif (res.statusCode === 303 || (res.statusCode === 301 || res.statusCode === 302) && request.method === 'POST') {\n\t\t\t\t\t\t\trequestOpts.method = 'GET';\n\t\t\t\t\t\t\trequestOpts.body = undefined;\n\t\t\t\t\t\t\trequestOpts.headers.delete('content-length');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// HTTP-redirect fetch step 15\n\t\t\t\t\t\tresolve(fetch(new Request(locationURL, requestOpts)));\n\t\t\t\t\t\tfinalize();\n\t\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// prepare response\n\t\t\tres.once('end', function () {\n\t\t\t\tif (signal) signal.removeEventListener('abort', abortAndFinalize);\n\t\t\t});\n\t\t\tlet body = res.pipe(new PassThrough$1());\n\n\t\t\tconst response_options = {\n\t\t\t\turl: request.url,\n\t\t\t\tstatus: res.statusCode,\n\t\t\t\tstatusText: res.statusMessage,\n\t\t\t\theaders: headers,\n\t\t\t\tsize: request.size,\n\t\t\t\ttimeout: request.timeout,\n\t\t\t\tcounter: request.counter\n\t\t\t};\n\n\t\t\t// HTTP-network fetch step 12.1.1.3\n\t\t\tconst codings = headers.get('Content-Encoding');\n\n\t\t\t// HTTP-network fetch step 12.1.1.4: handle content codings\n\n\t\t\t// in following scenarios we ignore compression support\n\t\t\t// 1. compression support is disabled\n\t\t\t// 2. HEAD request\n\t\t\t// 3. no Content-Encoding header\n\t\t\t// 4. no content response (204)\n\t\t\t// 5. content not modified response (304)\n\t\t\tif (!request.compress || request.method === 'HEAD' || codings === null || res.statusCode === 204 || res.statusCode === 304) {\n\t\t\t\tresponse = new Response(body, response_options);\n\t\t\t\tresolve(response);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// For Node v6+\n\t\t\t// Be less strict when decoding compressed responses, since sometimes\n\t\t\t// servers send slightly invalid responses that are still accepted\n\t\t\t// by common browsers.\n\t\t\t// Always using Z_SYNC_FLUSH is what cURL does.\n\t\t\tconst zlibOptions = {\n\t\t\t\tflush: zlib.Z_SYNC_FLUSH,\n\t\t\t\tfinishFlush: zlib.Z_SYNC_FLUSH\n\t\t\t};\n\n\t\t\t// for gzip\n\t\t\tif (codings == 'gzip' || codings == 'x-gzip') {\n\t\t\t\tbody = body.pipe(zlib.createGunzip(zlibOptions));\n\t\t\t\tresponse = new Response(body, response_options);\n\t\t\t\tresolve(response);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// for deflate\n\t\t\tif (codings == 'deflate' || codings == 'x-deflate') {\n\t\t\t\t// handle the infamous raw deflate response from old servers\n\t\t\t\t// a hack for old IIS and Apache servers\n\t\t\t\tconst raw = res.pipe(new PassThrough$1());\n\t\t\t\traw.once('data', function (chunk) {\n\t\t\t\t\t// see http://stackoverflow.com/questions/37519828\n\t\t\t\t\tif ((chunk[0] & 0x0F) === 0x08) {\n\t\t\t\t\t\tbody = body.pipe(zlib.createInflate());\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbody = body.pipe(zlib.createInflateRaw());\n\t\t\t\t\t}\n\t\t\t\t\tresponse = new Response(body, response_options);\n\t\t\t\t\tresolve(response);\n\t\t\t\t});\n\t\t\t\traw.on('end', function () {\n\t\t\t\t\t// some old IIS servers return zero-length OK deflate responses, so 'data' is never emitted.\n\t\t\t\t\tif (!response) {\n\t\t\t\t\t\tresponse = new Response(body, response_options);\n\t\t\t\t\t\tresolve(response);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// for br\n\t\t\tif (codings == 'br' && typeof zlib.createBrotliDecompress === 'function') {\n\t\t\t\tbody = body.pipe(zlib.createBrotliDecompress());\n\t\t\t\tresponse = new Response(body, response_options);\n\t\t\t\tresolve(response);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// otherwise, use response as-is\n\t\t\tresponse = new Response(body, response_options);\n\t\t\tresolve(response);\n\t\t});\n\n\t\twriteToStream(req, request);\n\t});\n}\nfunction fixResponseChunkedTransferBadEnding(request, errorCallback) {\n\tlet socket;\n\n\trequest.on('socket', function (s) {\n\t\tsocket = s;\n\t});\n\n\trequest.on('response', function (response) {\n\t\tconst headers = response.headers;\n\n\t\tif (headers['transfer-encoding'] === 'chunked' && !headers['content-length']) {\n\t\t\tresponse.once('close', function (hadError) {\n\t\t\t\t// if a data listener is still present we didn't end cleanly\n\t\t\t\tconst hasDataListener = socket.listenerCount('data') > 0;\n\n\t\t\t\tif (hasDataListener && !hadError) {\n\t\t\t\t\tconst err = new Error('Premature close');\n\t\t\t\t\terr.code = 'ERR_STREAM_PREMATURE_CLOSE';\n\t\t\t\t\terrorCallback(err);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n}\n\nfunction destroyStream(stream, err) {\n\tif (stream.destroy) {\n\t\tstream.destroy(err);\n\t} else {\n\t\t// node < 8\n\t\tstream.emit('error', err);\n\t\tstream.end();\n\t}\n}\n\n/**\n * Redirect code matching\n *\n * @param   Number   code  Status code\n * @return  Boolean\n */\nfetch.isRedirect = function (code) {\n\treturn code === 301 || code === 302 || code === 303 || code === 307 || code === 308;\n};\n\n// expose Promise\nfetch.Promise = global.Promise;\n\nexport default fetch;\nexport { Headers, Request, Response, FetchError };\n/browser.js\u0003\r\"use strict\";\n\n// ref: https://github.com/tc39/proposal-global\nvar getGlobal = function () {\n\t// the only reliable means to get the global object is\n\t// `Function('return this')()`\n\t// However, this causes CSP violations in Chrome apps.\n\tif (typeof self !== 'undefined') { return self; }\n\tif (typeof window !== 'undefined') { return window; }\n\tif (typeof global !== 'undefined') { return global; }\n\tthrow new Error('unable to locate global object');\n}\n\nvar globalObject = getGlobal();\n\nmodule.exports = exports = globalObject.fetch;\n\n// Needed for TypeScript and Webpack.\nif (globalObject.fetch) {\n\texports.default = globalObject.fetch.bind(globalObject);\n}\n\nexports.Headers = globalObject.Headers;\nexports.Request = globalObject.Request;\nexports.Response = globalObject.Response;\n/README.mdR\u001bnode-fetch\n==========\n\n[![npm version][npm-image]][npm-url]\n[![build status][travis-image]][travis-url]\n[![coverage status][codecov-image]][codecov-url]\n[![install size][install-size-image]][install-size-url]\n[![Discord][discord-image]][discord-url]\n\nA light-weight module that brings `window.fetch` to Node.js\n\n(We are looking for [v2 maintainers and collaborators](https://github.com/bitinn/node-fetch/issues/567))\n\n[![Backers][opencollective-image]][opencollective-url]\n\n<!-- TOC -->\n\n- [Motivation](#motivation)\n- [Features](#features)\n- [Difference from client-side fetch](#difference-from-client-side-fetch)\n- [Installation](#installation)\n- [Loading and configuring the module](#loading-and-configuring-the-module)\n- [Common Usage](#common-usage)\n    - [Plain text or HTML](#plain-text-or-html)\n    - [JSON](#json)\n    - [Simple Post](#simple-post)\n    - [Post with JSON](#post-with-json)\n    - [Post with form parameters](#post-with-form-parameters)\n    - [Handling exceptions](#handling-exceptions)\n    - [Handling client and server errors](#handling-client-and-server-errors)\n- [Advanced Usage](#advanced-usage)\n    - [Streams](#streams)\n    - [Buffer](#buffer)\n    - [Accessing Headers and other Meta data](#accessing-headers-and-other-meta-data)\n    - [Extract Set-Cookie Header](#extract-set-cookie-header)\n    - [Post data using a file stream](#post-data-using-a-file-stream)\n    - [Post with form-data (detect multipart)](#post-with-form-data-detect-multipart)\n    - [Request cancellation with AbortSignal](#request-cancellation-with-abortsignal)\n- [API](#api)\n    - [fetch(url[, options])](#fetchurl-options)\n    - [Options](#options)\n    - [Class: Request](#class-request)\n    - [Class: Response](#class-response)\n    - [Class: Headers](#class-headers)\n    - [Interface: Body](#interface-body)\n    - [Class: FetchError](#class-fetcherror)\n- [License](#license)\n- [Acknowledgement](#acknowledgement)\n\n<!-- /TOC -->\n\n## Motivation\n\nInstead of implementing `XMLHttpRequest` in Node.js to run browser-specific [Fetch polyfill](https://github.com/github/fetch), why not go from native `http` to `fetch` API directly? Hence, `node-fetch`, minimal code for a `window.fetch` compatible API on Node.js runtime.\n\nSee Matt Andrews' [isomorphic-fetch](https://github.com/matthew-andrews/isomorphic-fetch) or Leonardo Quixada's [cross-fetch](https://github.com/lquixada/cross-fetch) for isomorphic usage (exports `node-fetch` for server-side, `whatwg-fetch` for client-side).\n\n## Features\n\n- Stay consistent with `window.fetch` API.\n- Make conscious trade-off when following [WHATWG fetch spec][whatwg-fetch] and [stream spec](https://streams.spec.whatwg.org/) implementation details, document known differences.\n- Use native promise but allow substituting it with [insert your favorite promise library].\n- Use native Node streams for body on both request and response.\n- Decode content encoding (gzip/deflate) properly and convert string output (such as `res.text()` and `res.json()`) to UTF-8 automatically.\n- Useful extensions such as timeout, redirect limit, response size limit, [explicit errors](ERROR-HANDLING.md) for troubleshooting.\n\n## Difference from client-side fetch\n\n- See [Known Differences](LIMITS.md) for details.\n- If you happen to use a missing feature that `window.fetch` offers, feel free to open an issue.\n- Pull requests are welcomed too!\n\n## Installation\n\nCurrent stable release (`2.x`)\n\n```sh\n$ npm install node-fetch\n```\n\n## Loading and configuring the module\nWe suggest you load the module via `require` until the stabilization of ES modules in node:\n```js\nconst fetch = require('node-fetch');\n```\n\nIf you are using a Promise library other than native, set it through `fetch.Promise`:\n```js\nconst Bluebird = require('bluebird');\n\nfetch.Promise = Bluebird;\n```\n\n## Common Usage\n\nNOTE: The documentation below is up-to-date with `2.x` releases; see the [`1.x` readme](https://github.com/bitinn/node-fetch/blob/1.x/README.md), [changelog](https://github.com/bitinn/node-fetch/blob/1.x/CHANGELOG.md) and [2.x upgrade guide](UPGRADE-GUIDE.md) for the differences.\n\n#### Plain text or HTML\n```js\nfetch('https://github.com/')\n    .then(res => res.text())\n    .then(body => console.log(body));\n```\n\n#### JSON\n\n```js\n\nfetch('https://api.github.com/users/github')\n    .then(res => res.json())\n    .then(json => console.log(json));\n```\n\n#### Simple Post\n```js\nfetch('https://httpbin.org/post', { method: 'POST', body: 'a=1' })\n    .then(res => res.json()) // expecting a json response\n    .then(json => console.log(json));\n```\n\n#### Post with JSON\n\n```js\nconst body = { a: 1 };\n\nfetch('https://httpbin.org/post', {\n        method: 'post',\n        body:    JSON.stringify(body),\n        headers: { 'Content-Type': 'application/json' },\n    })\n    .then(res => res.json())\n    .then(json => console.log(json));\n```\n\n#### Post with form parameters\n`URLSearchParams` is available in Node.js as of v7.5.0. See [official documentation](https://nodejs.org/api/url.html#url_class_urlsearchparams) for more usage methods.\n\nNOTE: The `Content-Type` header is only set automatically to `x-www-form-urlencoded` when an instance of `URLSearchParams` is given as such:\n\n```js\nconst { URLSearchParams } = require('url');\n\nconst params = new URLSearchParams();\nparams.append('a', 1);\n\nfetch('https://httpbin.org/post', { method: 'POST', body: params })\n    .then(res => res.json())\n    .then(json => console.log(json));\n```\n\n#### Handling exceptions\nNOTE: 3xx-5xx responses are *NOT* exceptions and should be handled in `then()`; see the next section for more information.\n\nAdding a catch to the fetch promise chain will catch *all* exceptions, such as errors originating from node core libraries, network errors and operational errors, which are instances of FetchError. See the [error handling document](ERROR-HANDLING.md)  for more details.\n\n```js\nfetch('https://domain.invalid/')\n    .catch(err => console.error(err));\n```\n\n#### Handling client and server errors\nIt is common to create a helper function to check that the response contains no client (4xx) or server (5xx) error responses:\n\n```js\nfunction checkStatus(res) {\n    if (res.ok) { // res.status >= 200 && res.status < 300\n        return res;\n    } else {\n        throw MyCustomError(res.statusText);\n    }\n}\n\nfetch('https://httpbin.org/status/400')\n    .then(checkStatus)\n    .then(res => console.log('will not get here...'))\n```\n\n## Advanced Usage\n\n#### Streams\nThe \"Node.js way\" is to use streams when possible:\n\n```js\nfetch('https://assets-cdn.github.com/images/modules/logos_page/Octocat.png')\n    .then(res => {\n        const dest = fs.createWriteStream('./octocat.png');\n        res.body.pipe(dest);\n    });\n```\n\nIn Node.js 14 you can also use async iterators to read `body`; however, be careful to catch\nerrors -- the longer a response runs, the more likely it is to encounter an error.\n\n```js\nconst fetch = require('node-fetch');\nconst response = await fetch('https://httpbin.org/stream/3');\ntry {\n\tfor await (const chunk of response.body) {\n\t\tconsole.dir(JSON.parse(chunk.toString()));\n\t}\n} catch (err) {\n\tconsole.error(err.stack);\n}\n```\n\nIn Node.js 12 you can also use async iterators to read `body`; however, async iterators with streams\ndid not mature until Node.js 14, so you need to do some extra work to ensure you handle errors\ndirectly from the stream and wait on it response to fully close.\n\n```js\nconst fetch = require('node-fetch');\nconst read = async body => {\n    let error;\n    body.on('error', err => {\n        error = err;\n    });\n    for await (const chunk of body) {\n        console.dir(JSON.parse(chunk.toString()));\n    }\n    return new Promise((resolve, reject) => {\n        body.on('close', () => {\n            error ? reject(error) : resolve();\n        });\n    });\n};\ntry {\n    const response = await fetch('https://httpbin.org/stream/3');\n    await read(response.body);\n} catch (err) {\n    console.error(err.stack);\n}\n```\n\n#### Buffer\nIf you prefer to cache binary data in full, use buffer(). (NOTE: `buffer()` is a `node-fetch`-only API)\n\n```js\nconst fileType = require('file-type');\n\nfetch('https://assets-cdn.github.com/images/modules/logos_page/Octocat.png')\n    .then(res => res.buffer())\n    .then(buffer => fileType(buffer))\n    .then(type => { /* ... */ });\n```\n\n#### Accessing Headers and other Meta data\n```js\nfetch('https://github.com/')\n    .then(res => {\n        console.log(res.ok);\n        console.log(res.status);\n        console.log(res.statusText);\n        console.log(res.headers.raw());\n        console.log(res.headers.get('content-type'));\n    });\n```\n\n#### Extract Set-Cookie Header\n\nUnlike browsers, you can access raw `Set-Cookie` headers manually using `Headers.raw()`. This is a `node-fetch` only API.\n\n```js\nfetch(url).then(res => {\n    // returns an array of values, instead of a string of comma-separated values\n    console.log(res.headers.raw()['set-cookie']);\n});\n```\n\n#### Post data using a file stream\n\n```js\nconst { createReadStream } = require('fs');\n\nconst stream = createReadStream('input.txt');\n\nfetch('https://httpbin.org/post', { method: 'POST', body: stream })\n    .then(res => res.json())\n    .then(json => console.log(json));\n```\n\n#### Post with form-data (detect multipart)\n\n```js\nconst FormData = require('form-data');\n\nconst form = new FormData();\nform.append('a', 1);\n\nfetch('https://httpbin.org/post', { method: 'POST', body: form })\n    .then(res => res.json())\n    .then(json => console.log(json));\n\n// OR, using custom headers\n// NOTE: getHeaders() is non-standard API\n\nconst form = new FormData();\nform.append('a', 1);\n\nconst options = {\n    method: 'POST',\n    body: form,\n    headers: form.getHeaders()\n}\n\nfetch('https://httpbin.org/post', options)\n    .then(res => res.json())\n    .then(json => console.log(json));\n```\n\n#### Request cancellation with AbortSignal\n\n> NOTE: You may cancel streamed requests only on Node >= v8.0.0\n\nYou may cancel requests with `AbortController`. A suggested implementation is [`abort-controller`](https://www.npmjs.com/package/abort-controller).\n\nAn example of timing out a request after 150ms could be achieved as the following:\n\n```js\nimport AbortController from 'abort-controller';\n\nconst controller = new AbortController();\nconst timeout = setTimeout(\n  () => { controller.abort(); },\n  150,\n);\n\nfetch(url, { signal: controller.signal })\n  .then(res => res.json())\n  .then(\n    data => {\n      useData(data)\n    },\n    err => {\n      if (err.name === 'AbortError') {\n        // request was aborted\n      }\n    },\n  )\n  .finally(() => {\n    clearTimeout(timeout);\n  });\n```\n\nSee [test cases](https://github.com/bitinn/node-fetch/blob/master/test/test.js) for more examples.\n\n\n## API\n\n### fetch(url[, options])\n\n- `url` A string representing the URL for fetching\n- `options` [Options](#fetch-options) for the HTTP(S) request\n- Returns: <code>Promise&lt;[Response](#class-response)&gt;</code>\n\nPerform an HTTP(S) fetch.\n\n`url` should be an absolute url, such as `https://example.com/`. A path-relative URL (`/file/under/root`) or protocol-relative URL (`//can-be-http-or-https.com/`) will result in a rejected `Promise`.\n\n<a id=\"fetch-options\"></a>\n### Options\n\nThe default values are shown after each option key.\n\n```js\n{\n    // These properties are part of the Fetch Standard\n    method: 'GET',\n    headers: {},        // request headers. format is the identical to that accepted by the Headers constructor (see below)\n    body: null,         // request body. can be null, a string, a Buffer, a Blob, or a Node.js Readable stream\n    redirect: 'follow', // set to `manual` to extract redirect headers, `error` to reject redirect\n    signal: null,       // pass an instance of AbortSignal to optionally abort requests\n\n    // The following properties are node-fetch extensions\n    follow: 20,         // maximum redirect count. 0 to not follow redirect\n    timeout: 0,         // req/res timeout in ms, it resets on redirect. 0 to disable (OS limit applies). Signal is recommended instead.\n    compress: true,     // support gzip/deflate content encoding. false to disable\n    size: 0,            // maximum response body size in bytes. 0 to disable\n    agent: null         // http(s).Agent instance or function that returns an instance (see below)\n}\n```\n\n##### Default Headers\n\nIf no values are set, the following request headers will be sent automatically:\n\nHeader              | Value\n------------------- | --------------------------------------------------------\n`Accept-Encoding`   | `gzip,deflate` _(when `options.compress === true`)_\n`Accept`            | `*/*`\n`Connection`        | `close` _(when no `options.agent` is present)_\n`Content-Length`    | _(automatically calculated, if possible)_\n`Transfer-Encoding` | `chunked` _(when `req.body` is a stream)_\n`User-Agent`        | `node-fetch/1.0 (+https://github.com/bitinn/node-fetch)`\n\nNote: when `body` is a `Stream`, `Content-Length` is not set automatically.\n\n##### Custom Agent\n\nThe `agent` option allows you to specify networking related options which are out of the scope of Fetch, including and not limited to the following:\n\n- Support self-signed certificate\n- Use only IPv4 or IPv6\n- Custom DNS Lookup\n\nSee [`http.Agent`](https://nodejs.org/api/http.html#http_new_agent_options) for more information.\n\nIn addition, the `agent` option accepts a function that returns `http`(s)`.Agent` instance given current [URL](https://nodejs.org/api/url.html), this is useful during a redirection chain across HTTP and HTTPS protocol.\n\n```js\nconst httpAgent = new http.Agent({\n    keepAlive: true\n});\nconst httpsAgent = new https.Agent({\n    keepAlive: true\n});\n\nconst options = {\n    agent: function (_parsedURL) {\n        if (_parsedURL.protocol == 'http:') {\n            return httpAgent;\n        } else {\n            return httpsAgent;\n        }\n    }\n}\n```\n\n<a id=\"class-request\"></a>\n### Class: Request\n\nAn HTTP(S) request containing information about URL, method, headers, and the body. This class implements the [Body](#iface-body) interface.\n\nDue to the nature of Node.js, the following properties are not implemented at this moment:\n\n- `type`\n- `destination`\n- `referrer`\n- `referrerPolicy`\n- `mode`\n- `credentials`\n- `cache`\n- `integrity`\n- `keepalive`\n\nThe following node-fetch extension properties are provided:\n\n- `follow`\n- `compress`\n- `counter`\n- `agent`\n\nSee [options](#fetch-options) for exact meaning of these extensions.\n\n#### new Request(input[, options])\n\n<small>*(spec-compliant)*</small>\n\n- `input` A string representing a URL, or another `Request` (which will be cloned)\n- `options` [Options][#fetch-options] for the HTTP(S) request\n\nConstructs a new `Request` object. The constructor is identical to that in the [browser](https://developer.mozilla.org/en-US/docs/Web/API/Request/Request).\n\nIn most cases, directly `fetch(url, options)` is simpler than creating a `Request` object.\n\n<a id=\"class-response\"></a>\n### Class: Response\n\nAn HTTP(S) response. This class implements the [Body](#iface-body) interface.\n\nThe following properties are not implemented in node-fetch at this moment:\n\n- `Response.error()`\n- `Response.redirect()`\n- `type`\n- `trailer`\n\n#### new Response([body[, options]])\n\n<small>*(spec-compliant)*</small>\n\n- `body` A `String` or [`Readable` stream][node-readable]\n- `options` A [`ResponseInit`][response-init] options dictionary\n\nConstructs a new `Response` object. The constructor is identical to that in the [browser](https://developer.mozilla.org/en-US/docs/Web/API/Response/Response).\n\nBecause Node.js does not implement service workers (for which this class was designed), one rarely has to construct a `Response` directly.\n\n#### response.ok\n\n<small>*(spec-compliant)*</small>\n\nConvenience property representing if the request ended normally. Will evaluate to true if the response status was greater than or equal to 200 but smaller than 300.\n\n#### response.redirected\n\n<small>*(spec-compliant)*</small>\n\nConvenience property representing if the request has been redirected at least once. Will evaluate to true if the internal redirect counter is greater than 0.\n\n<a id=\"class-headers\"></a>\n### Class: Headers\n\nThis class allows manipulating and iterating over a set of HTTP headers. All methods specified in the [Fetch Standard][whatwg-fetch] are implemented.\n\n#### new Headers([init])\n\n<small>*(spec-compliant)*</small>\n\n- `init` Optional argument to pre-fill the `Headers` object\n\nConstruct a new `Headers` object. `init` can be either `null`, a `Headers` object, an key-value map object or any iterable object.\n\n```js\n// Example adapted from https://fetch.spec.whatwg.org/#example-headers-class\n\nconst meta = {\n  'Content-Type': 'text/xml',\n  'Breaking-Bad': '<3'\n};\nconst headers = new Headers(meta);\n\n// The above is equivalent to\nconst meta = [\n  [ 'Content-Type', 'text/xml' ],\n  [ 'Breaking-Bad', '<3' ]\n];\nconst headers = new Headers(meta);\n\n// You can in fact use any iterable objects, like a Map or even another Headers\nconst meta = new Map();\nmeta.set('Content-Type', 'text/xml');\nmeta.set('Breaking-Bad', '<3');\nconst headers = new Headers(meta);\nconst copyOfHeaders = new Headers(headers);\n```\n\n<a id=\"iface-body\"></a>\n### Interface: Body\n\n`Body` is an abstract interface with methods that are applicable to both `Request` and `Response` classes.\n\nThe following methods are not yet implemented in node-fetch at this moment:\n\n- `formData()`\n\n#### body.body\n\n<small>*(deviation from spec)*</small>\n\n* Node.js [`Readable` stream][node-readable]\n\nData are encapsulated in the `Body` object. Note that while the [Fetch Standard][whatwg-fetch] requires the property to always be a WHATWG `ReadableStream`, in node-fetch it is a Node.js [`Readable` stream][node-readable].\n\n#### body.bodyUsed\n\n<small>*(spec-compliant)*</small>\n\n* `Boolean`\n\nA boolean property for if this body has been consumed. Per the specs, a consumed body cannot be used again.\n\n#### body.arrayBuffer()\n#### body.blob()\n#### body.json()\n#### body.text()\n\n<small>*(spec-compliant)*</small>\n\n* Returns: <code>Promise</code>\n\nConsume the body and return a promise that will resolve to one of these formats.\n\n#### body.buffer()\n\n<small>*(node-fetch extension)*</small>\n\n* Returns: <code>Promise&lt;Buffer&gt;</code>\n\nConsume the body and return a promise that will resolve to a Buffer.\n\n#### body.textConverted()\n\n<small>*(node-fetch extension)*</small>\n\n* Returns: <code>Promise&lt;String&gt;</code>\n\nIdentical to `body.text()`, except instead of always converting to UTF-8, encoding sniffing will be performed and text converted to UTF-8 if possible.\n\n(This API requires an optional dependency of the npm package [encoding](https://www.npmjs.com/package/encoding), which you need to install manually. `webpack` users may see [a warning message](https://github.com/bitinn/node-fetch/issues/412#issuecomment-379007792) due to this optional dependency.)\n\n<a id=\"class-fetcherror\"></a>\n### Class: FetchError\n\n<small>*(node-fetch extension)*</small>\n\nAn operational error in the fetching process. See [ERROR-HANDLING.md][] for more info.\n\n<a id=\"class-aborterror\"></a>\n### Class: AbortError\n\n<small>*(node-fetch extension)*</small>\n\nAn Error thrown when the request is aborted in response to an `AbortSignal`'s `abort` event. It has a `name` property of `AbortError`. See [ERROR-HANDLING.MD][] for more info.\n\n## Acknowledgement\n\nThanks to [github/fetch](https://github.com/github/fetch) for providing a solid implementation reference.\n\n`node-fetch` v1 was maintained by [@bitinn](https://github.com/bitinn); v2 was maintained by [@TimothyGu](https://github.com/timothygu), [@bitinn](https://github.com/bitinn) and [@jimmywarting](https://github.com/jimmywarting); v2 readme is written by [@jkantr](https://github.com/jkantr).\n\n## License\n\nMIT\n\n[npm-image]: https://flat.badgen.net/npm/v/node-fetch\n[npm-url]: https://www.npmjs.com/package/node-fetch\n[travis-image]: https://flat.badgen.net/travis/bitinn/node-fetch\n[travis-url]: https://travis-ci.org/bitinn/node-fetch\n[codecov-image]: https://flat.badgen.net/codecov/c/github/bitinn/node-fetch/master\n[codecov-url]: https://codecov.io/gh/bitinn/node-fetch\n[install-size-image]: https://flat.badgen.net/packagephobia/install/node-fetch\n[install-size-url]: https://packagephobia.now.sh/result?p=node-fetch\n[discord-image]: https://img.shields.io/discord/619915844268326952?color=%237289DA&label=Discord&style=flat-square\n[discord-url]: https://discord.gg/Zxbndcm\n[opencollective-image]: https://opencollective.com/node-fetch/backers.svg\n[opencollective-url]: https://opencollective.com/node-fetch\n[whatwg-fetch]: https://fetch.spec.whatwg.org/\n[response-init]: https://fetch.spec.whatwg.org/#responseinit\n[node-readable]: https://nodejs.org/api/stream.html#stream_readable_streams\n[mdn-headers]: https://developer.mozilla.org/en-US/docs/Web/API/Headers\n[LIMITS.md]: https://github.com/bitinn/node-fetch/blob/master/LIMITS.md\n[ERROR-HANDLING.md]: https://github.com/bitinn/node-fetch/blob/master/ERROR-HANDLING.md\n[UPGRADE-GUIDE.md]: https://github.com/bitinn/node-fetch/blob/master/UPGRADE-GUIDE.md\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/bm9kZS1yZWxlYXNlc0AyLjAuOQ==",
    "content": "/data/processed/envs.jsonW[{\"name\":\"nodejs\",\"version\":\"0.2.0\",\"date\":\"2011-08-26\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"0.3.0\",\"date\":\"2011-08-26\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"0.4.0\",\"date\":\"2011-08-26\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"0.5.0\",\"date\":\"2011-08-26\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"0.6.0\",\"date\":\"2011-11-04\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"0.7.0\",\"date\":\"2012-01-17\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"0.8.0\",\"date\":\"2012-06-22\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"0.9.0\",\"date\":\"2012-07-20\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"0.10.0\",\"date\":\"2013-03-11\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"0.11.0\",\"date\":\"2013-03-28\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"0.12.0\",\"date\":\"2015-02-06\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"4.0.0\",\"date\":\"2015-09-08\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"4.1.0\",\"date\":\"2015-09-17\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"4.2.0\",\"date\":\"2015-10-12\",\"lts\":\"Argon\",\"security\":false},{\"name\":\"nodejs\",\"version\":\"4.3.0\",\"date\":\"2016-02-09\",\"lts\":\"Argon\",\"security\":false},{\"name\":\"nodejs\",\"version\":\"4.4.0\",\"date\":\"2016-03-08\",\"lts\":\"Argon\",\"security\":false},{\"name\":\"nodejs\",\"version\":\"4.5.0\",\"date\":\"2016-08-16\",\"lts\":\"Argon\",\"security\":false},{\"name\":\"nodejs\",\"version\":\"4.6.0\",\"date\":\"2016-09-27\",\"lts\":\"Argon\",\"security\":true},{\"name\":\"nodejs\",\"version\":\"4.7.0\",\"date\":\"2016-12-06\",\"lts\":\"Argon\",\"security\":false},{\"name\":\"nodejs\",\"version\":\"4.8.0\",\"date\":\"2017-02-21\",\"lts\":\"Argon\",\"security\":false},{\"name\":\"nodejs\",\"version\":\"4.9.0\",\"date\":\"2018-03-28\",\"lts\":\"Argon\",\"security\":true},{\"name\":\"nodejs\",\"version\":\"5.0.0\",\"date\":\"2015-10-29\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"5.1.0\",\"date\":\"2015-11-17\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"5.2.0\",\"date\":\"2015-12-09\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"5.3.0\",\"date\":\"2015-12-15\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"5.4.0\",\"date\":\"2016-01-06\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"5.5.0\",\"date\":\"2016-01-21\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"5.6.0\",\"date\":\"2016-02-09\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"5.7.0\",\"date\":\"2016-02-23\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"5.8.0\",\"date\":\"2016-03-09\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"5.9.0\",\"date\":\"2016-03-16\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"5.10.0\",\"date\":\"2016-04-01\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"5.11.0\",\"date\":\"2016-04-21\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"5.12.0\",\"date\":\"2016-06-23\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"6.0.0\",\"date\":\"2016-04-26\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"6.1.0\",\"date\":\"2016-05-05\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"6.2.0\",\"date\":\"2016-05-17\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"6.3.0\",\"date\":\"2016-07-06\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"6.4.0\",\"date\":\"2016-08-12\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"6.5.0\",\"date\":\"2016-08-26\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"6.6.0\",\"date\":\"2016-09-14\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"6.7.0\",\"date\":\"2016-09-27\",\"lts\":false,\"security\":true},{\"name\":\"nodejs\",\"version\":\"6.8.0\",\"date\":\"2016-10-12\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"6.9.0\",\"date\":\"2016-10-18\",\"lts\":\"Boron\",\"security\":false},{\"name\":\"nodejs\",\"version\":\"6.10.0\",\"date\":\"2017-02-21\",\"lts\":\"Boron\",\"security\":false},{\"name\":\"nodejs\",\"version\":\"6.11.0\",\"date\":\"2017-06-06\",\"lts\":\"Boron\",\"security\":false},{\"name\":\"nodejs\",\"version\":\"6.12.0\",\"date\":\"2017-11-06\",\"lts\":\"Boron\",\"security\":false},{\"name\":\"nodejs\",\"version\":\"6.13.0\",\"date\":\"2018-02-10\",\"lts\":\"Boron\",\"security\":false},{\"name\":\"nodejs\",\"version\":\"6.14.0\",\"date\":\"2018-03-28\",\"lts\":\"Boron\",\"security\":true},{\"name\":\"nodejs\",\"version\":\"6.15.0\",\"date\":\"2018-11-27\",\"lts\":\"Boron\",\"security\":true},{\"name\":\"nodejs\",\"version\":\"6.16.0\",\"date\":\"2018-12-26\",\"lts\":\"Boron\",\"security\":false},{\"name\":\"nodejs\",\"version\":\"6.17.0\",\"date\":\"2019-02-28\",\"lts\":\"Boron\",\"security\":true},{\"name\":\"nodejs\",\"version\":\"7.0.0\",\"date\":\"2016-10-25\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"7.1.0\",\"date\":\"2016-11-08\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"7.2.0\",\"date\":\"2016-11-22\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"7.3.0\",\"date\":\"2016-12-20\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"7.4.0\",\"date\":\"2017-01-04\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"7.5.0\",\"date\":\"2017-01-31\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"7.6.0\",\"date\":\"2017-02-21\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"7.7.0\",\"date\":\"2017-02-28\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"7.8.0\",\"date\":\"2017-03-29\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"7.9.0\",\"date\":\"2017-04-11\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"7.10.0\",\"date\":\"2017-05-02\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"8.0.0\",\"date\":\"2017-05-30\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"8.1.0\",\"date\":\"2017-06-08\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"8.2.0\",\"date\":\"2017-07-19\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"8.3.0\",\"date\":\"2017-08-08\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"8.4.0\",\"date\":\"2017-08-15\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"8.5.0\",\"date\":\"2017-09-12\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"8.6.0\",\"date\":\"2017-09-26\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"8.7.0\",\"date\":\"2017-10-11\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"8.8.0\",\"date\":\"2017-10-24\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"8.9.0\",\"date\":\"2017-10-31\",\"lts\":\"Carbon\",\"security\":false},{\"name\":\"nodejs\",\"version\":\"8.10.0\",\"date\":\"2018-03-06\",\"lts\":\"Carbon\",\"security\":false},{\"name\":\"nodejs\",\"version\":\"8.11.0\",\"date\":\"2018-03-28\",\"lts\":\"Carbon\",\"security\":true},{\"name\":\"nodejs\",\"version\":\"8.12.0\",\"date\":\"2018-09-10\",\"lts\":\"Carbon\",\"security\":false},{\"name\":\"nodejs\",\"version\":\"8.13.0\",\"date\":\"2018-11-20\",\"lts\":\"Carbon\",\"security\":false},{\"name\":\"nodejs\",\"version\":\"8.14.0\",\"date\":\"2018-11-27\",\"lts\":\"Carbon\",\"security\":true},{\"name\":\"nodejs\",\"version\":\"8.15.0\",\"date\":\"2018-12-26\",\"lts\":\"Carbon\",\"security\":false},{\"name\":\"nodejs\",\"version\":\"8.16.0\",\"date\":\"2019-04-16\",\"lts\":\"Carbon\",\"security\":false},{\"name\":\"nodejs\",\"version\":\"8.17.0\",\"date\":\"2019-12-17\",\"lts\":\"Carbon\",\"security\":true},{\"name\":\"nodejs\",\"version\":\"9.0.0\",\"date\":\"2017-10-31\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"9.1.0\",\"date\":\"2017-11-07\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"9.2.0\",\"date\":\"2017-11-14\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"9.3.0\",\"date\":\"2017-12-12\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"9.4.0\",\"date\":\"2018-01-10\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"9.5.0\",\"date\":\"2018-01-31\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"9.6.0\",\"date\":\"2018-02-21\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"9.7.0\",\"date\":\"2018-03-01\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"9.8.0\",\"date\":\"2018-03-07\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"9.9.0\",\"date\":\"2018-03-21\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"9.10.0\",\"date\":\"2018-03-28\",\"lts\":false,\"security\":true},{\"name\":\"nodejs\",\"version\":\"9.11.0\",\"date\":\"2018-04-04\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"10.0.0\",\"date\":\"2018-04-24\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"10.1.0\",\"date\":\"2018-05-08\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"10.2.0\",\"date\":\"2018-05-23\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"10.3.0\",\"date\":\"2018-05-29\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"10.4.0\",\"date\":\"2018-06-06\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"10.5.0\",\"date\":\"2018-06-20\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"10.6.0\",\"date\":\"2018-07-04\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"10.7.0\",\"date\":\"2018-07-18\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"10.8.0\",\"date\":\"2018-08-01\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"10.9.0\",\"date\":\"2018-08-15\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"10.10.0\",\"date\":\"2018-09-06\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"10.11.0\",\"date\":\"2018-09-19\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"10.12.0\",\"date\":\"2018-10-10\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"10.13.0\",\"date\":\"2018-10-30\",\"lts\":\"Dubnium\",\"security\":false},{\"name\":\"nodejs\",\"version\":\"10.14.0\",\"date\":\"2018-11-27\",\"lts\":\"Dubnium\",\"security\":true},{\"name\":\"nodejs\",\"version\":\"10.15.0\",\"date\":\"2018-12-26\",\"lts\":\"Dubnium\",\"security\":false},{\"name\":\"nodejs\",\"version\":\"10.16.0\",\"date\":\"2019-05-28\",\"lts\":\"Dubnium\",\"security\":false},{\"name\":\"nodejs\",\"version\":\"10.17.0\",\"date\":\"2019-10-22\",\"lts\":\"Dubnium\",\"security\":false},{\"name\":\"nodejs\",\"version\":\"10.18.0\",\"date\":\"2019-12-17\",\"lts\":\"Dubnium\",\"security\":true},{\"name\":\"nodejs\",\"version\":\"10.19.0\",\"date\":\"2020-02-05\",\"lts\":\"Dubnium\",\"security\":true},{\"name\":\"nodejs\",\"version\":\"10.20.0\",\"date\":\"2020-03-26\",\"lts\":\"Dubnium\",\"security\":false},{\"name\":\"nodejs\",\"version\":\"10.21.0\",\"date\":\"2020-06-02\",\"lts\":\"Dubnium\",\"security\":true},{\"name\":\"nodejs\",\"version\":\"10.22.0\",\"date\":\"2020-07-21\",\"lts\":\"Dubnium\",\"security\":false},{\"name\":\"nodejs\",\"version\":\"10.23.0\",\"date\":\"2020-10-27\",\"lts\":\"Dubnium\",\"security\":false},{\"name\":\"nodejs\",\"version\":\"10.24.0\",\"date\":\"2021-02-23\",\"lts\":\"Dubnium\",\"security\":true},{\"name\":\"nodejs\",\"version\":\"11.0.0\",\"date\":\"2018-10-23\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"11.1.0\",\"date\":\"2018-10-30\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"11.2.0\",\"date\":\"2018-11-15\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"11.3.0\",\"date\":\"2018-11-27\",\"lts\":false,\"security\":true},{\"name\":\"nodejs\",\"version\":\"11.4.0\",\"date\":\"2018-12-07\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"11.5.0\",\"date\":\"2018-12-18\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"11.6.0\",\"date\":\"2018-12-26\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"11.7.0\",\"date\":\"2019-01-17\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"11.8.0\",\"date\":\"2019-01-24\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"11.9.0\",\"date\":\"2019-01-30\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"11.10.0\",\"date\":\"2019-02-14\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"11.11.0\",\"date\":\"2019-03-05\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"11.12.0\",\"date\":\"2019-03-14\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"11.13.0\",\"date\":\"2019-03-28\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"11.14.0\",\"date\":\"2019-04-10\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"11.15.0\",\"date\":\"2019-04-30\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"12.0.0\",\"date\":\"2019-04-23\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"12.1.0\",\"date\":\"2019-04-29\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"12.2.0\",\"date\":\"2019-05-07\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"12.3.0\",\"date\":\"2019-05-21\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"12.4.0\",\"date\":\"2019-06-04\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"12.5.0\",\"date\":\"2019-06-26\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"12.6.0\",\"date\":\"2019-07-03\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"12.7.0\",\"date\":\"2019-07-23\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"12.8.0\",\"date\":\"2019-08-06\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"12.9.0\",\"date\":\"2019-08-20\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"12.10.0\",\"date\":\"2019-09-04\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"12.11.0\",\"date\":\"2019-09-25\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"12.12.0\",\"date\":\"2019-10-11\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"12.13.0\",\"date\":\"2019-10-21\",\"lts\":\"Erbium\",\"security\":false},{\"name\":\"nodejs\",\"version\":\"12.14.0\",\"date\":\"2019-12-17\",\"lts\":\"Erbium\",\"security\":true},{\"name\":\"nodejs\",\"version\":\"12.15.0\",\"date\":\"2020-02-05\",\"lts\":\"Erbium\",\"security\":true},{\"name\":\"nodejs\",\"version\":\"12.16.0\",\"date\":\"2020-02-11\",\"lts\":\"Erbium\",\"security\":false},{\"name\":\"nodejs\",\"version\":\"12.17.0\",\"date\":\"2020-05-26\",\"lts\":\"Erbium\",\"security\":false},{\"name\":\"nodejs\",\"version\":\"12.18.0\",\"date\":\"2020-06-02\",\"lts\":\"Erbium\",\"security\":true},{\"name\":\"nodejs\",\"version\":\"12.19.0\",\"date\":\"2020-10-06\",\"lts\":\"Erbium\",\"security\":false},{\"name\":\"nodejs\",\"version\":\"12.20.0\",\"date\":\"2020-11-24\",\"lts\":\"Erbium\",\"security\":false},{\"name\":\"nodejs\",\"version\":\"12.21.0\",\"date\":\"2021-02-23\",\"lts\":\"Erbium\",\"security\":true},{\"name\":\"nodejs\",\"version\":\"12.22.0\",\"date\":\"2021-03-30\",\"lts\":\"Erbium\",\"security\":false},{\"name\":\"nodejs\",\"version\":\"13.0.0\",\"date\":\"2019-10-22\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"13.1.0\",\"date\":\"2019-11-05\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"13.2.0\",\"date\":\"2019-11-21\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"13.3.0\",\"date\":\"2019-12-03\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"13.4.0\",\"date\":\"2019-12-17\",\"lts\":false,\"security\":true},{\"name\":\"nodejs\",\"version\":\"13.5.0\",\"date\":\"2019-12-18\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"13.6.0\",\"date\":\"2020-01-07\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"13.7.0\",\"date\":\"2020-01-21\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"13.8.0\",\"date\":\"2020-02-05\",\"lts\":false,\"security\":true},{\"name\":\"nodejs\",\"version\":\"13.9.0\",\"date\":\"2020-02-18\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"13.10.0\",\"date\":\"2020-03-04\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"13.11.0\",\"date\":\"2020-03-12\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"13.12.0\",\"date\":\"2020-03-26\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"13.13.0\",\"date\":\"2020-04-14\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"13.14.0\",\"date\":\"2020-04-29\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"14.0.0\",\"date\":\"2020-04-21\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"14.1.0\",\"date\":\"2020-04-29\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"14.2.0\",\"date\":\"2020-05-05\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"14.3.0\",\"date\":\"2020-05-19\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"14.4.0\",\"date\":\"2020-06-02\",\"lts\":false,\"security\":true},{\"name\":\"nodejs\",\"version\":\"14.5.0\",\"date\":\"2020-06-30\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"14.6.0\",\"date\":\"2020-07-20\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"14.7.0\",\"date\":\"2020-07-29\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"14.8.0\",\"date\":\"2020-08-11\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"14.9.0\",\"date\":\"2020-08-27\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"14.10.0\",\"date\":\"2020-09-08\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"14.11.0\",\"date\":\"2020-09-15\",\"lts\":false,\"security\":true},{\"name\":\"nodejs\",\"version\":\"14.12.0\",\"date\":\"2020-09-22\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"14.13.0\",\"date\":\"2020-09-29\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"14.14.0\",\"date\":\"2020-10-15\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"14.15.0\",\"date\":\"2020-10-27\",\"lts\":\"Fermium\",\"security\":false},{\"name\":\"nodejs\",\"version\":\"14.16.0\",\"date\":\"2021-02-23\",\"lts\":\"Fermium\",\"security\":true},{\"name\":\"nodejs\",\"version\":\"14.17.0\",\"date\":\"2021-05-11\",\"lts\":\"Fermium\",\"security\":false},{\"name\":\"nodejs\",\"version\":\"14.18.0\",\"date\":\"2021-09-28\",\"lts\":\"Fermium\",\"security\":false},{\"name\":\"nodejs\",\"version\":\"14.19.0\",\"date\":\"2022-02-01\",\"lts\":\"Fermium\",\"security\":false},{\"name\":\"nodejs\",\"version\":\"14.20.0\",\"date\":\"2022-07-07\",\"lts\":\"Fermium\",\"security\":true},{\"name\":\"nodejs\",\"version\":\"14.21.0\",\"date\":\"2022-11-01\",\"lts\":\"Fermium\",\"security\":false},{\"name\":\"nodejs\",\"version\":\"15.0.0\",\"date\":\"2020-10-20\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"15.1.0\",\"date\":\"2020-11-04\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"15.2.0\",\"date\":\"2020-11-10\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"15.3.0\",\"date\":\"2020-11-24\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"15.4.0\",\"date\":\"2020-12-09\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"15.5.0\",\"date\":\"2020-12-22\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"15.6.0\",\"date\":\"2021-01-14\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"15.7.0\",\"date\":\"2021-01-25\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"15.8.0\",\"date\":\"2021-02-02\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"15.9.0\",\"date\":\"2021-02-18\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"15.10.0\",\"date\":\"2021-02-23\",\"lts\":false,\"security\":true},{\"name\":\"nodejs\",\"version\":\"15.11.0\",\"date\":\"2021-03-03\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"15.12.0\",\"date\":\"2021-03-17\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"15.13.0\",\"date\":\"2021-03-31\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"15.14.0\",\"date\":\"2021-04-06\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"16.0.0\",\"date\":\"2021-04-20\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"16.1.0\",\"date\":\"2021-05-04\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"16.2.0\",\"date\":\"2021-05-19\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"16.3.0\",\"date\":\"2021-06-03\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"16.4.0\",\"date\":\"2021-06-23\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"16.5.0\",\"date\":\"2021-07-14\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"16.6.0\",\"date\":\"2021-07-29\",\"lts\":false,\"security\":true},{\"name\":\"nodejs\",\"version\":\"16.7.0\",\"date\":\"2021-08-18\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"16.8.0\",\"date\":\"2021-08-25\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"16.9.0\",\"date\":\"2021-09-07\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"16.10.0\",\"date\":\"2021-09-22\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"16.11.0\",\"date\":\"2021-10-08\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"16.12.0\",\"date\":\"2021-10-20\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"16.13.0\",\"date\":\"2021-10-26\",\"lts\":\"Gallium\",\"security\":false},{\"name\":\"nodejs\",\"version\":\"16.14.0\",\"date\":\"2022-02-08\",\"lts\":\"Gallium\",\"security\":false},{\"name\":\"nodejs\",\"version\":\"16.15.0\",\"date\":\"2022-04-26\",\"lts\":\"Gallium\",\"security\":false},{\"name\":\"nodejs\",\"version\":\"16.16.0\",\"date\":\"2022-07-07\",\"lts\":\"Gallium\",\"security\":true},{\"name\":\"nodejs\",\"version\":\"16.17.0\",\"date\":\"2022-08-16\",\"lts\":\"Gallium\",\"security\":false},{\"name\":\"nodejs\",\"version\":\"16.18.0\",\"date\":\"2022-10-12\",\"lts\":\"Gallium\",\"security\":false},{\"name\":\"nodejs\",\"version\":\"16.19.0\",\"date\":\"2022-12-13\",\"lts\":\"Gallium\",\"security\":false},{\"name\":\"nodejs\",\"version\":\"17.0.0\",\"date\":\"2021-10-19\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"17.1.0\",\"date\":\"2021-11-09\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"17.2.0\",\"date\":\"2021-11-30\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"17.3.0\",\"date\":\"2021-12-17\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"17.4.0\",\"date\":\"2022-01-18\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"17.5.0\",\"date\":\"2022-02-10\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"17.6.0\",\"date\":\"2022-02-22\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"17.7.0\",\"date\":\"2022-03-09\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"17.8.0\",\"date\":\"2022-03-22\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"17.9.0\",\"date\":\"2022-04-07\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"18.0.0\",\"date\":\"2022-04-18\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"18.1.0\",\"date\":\"2022-05-03\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"18.2.0\",\"date\":\"2022-05-17\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"18.3.0\",\"date\":\"2022-06-02\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"18.4.0\",\"date\":\"2022-06-16\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"18.5.0\",\"date\":\"2022-07-06\",\"lts\":false,\"security\":true},{\"name\":\"nodejs\",\"version\":\"18.6.0\",\"date\":\"2022-07-13\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"18.7.0\",\"date\":\"2022-07-26\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"18.8.0\",\"date\":\"2022-08-24\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"18.9.0\",\"date\":\"2022-09-07\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"18.10.0\",\"date\":\"2022-09-28\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"18.11.0\",\"date\":\"2022-10-13\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"18.12.0\",\"date\":\"2022-10-25\",\"lts\":\"Hydrogen\",\"security\":false},{\"name\":\"nodejs\",\"version\":\"18.13.0\",\"date\":\"2023-01-05\",\"lts\":\"Hydrogen\",\"security\":false},{\"name\":\"nodejs\",\"version\":\"19.0.0\",\"date\":\"2022-10-17\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"19.1.0\",\"date\":\"2022-11-14\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"19.2.0\",\"date\":\"2022-11-29\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"19.3.0\",\"date\":\"2022-12-14\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"19.4.0\",\"date\":\"2023-01-05\",\"lts\":false,\"security\":false},{\"name\":\"nodejs\",\"version\":\"19.5.0\",\"date\":\"2023-01-24\",\"lts\":false,\"security\":false}]/README.md\u0004\u0013# Node.js releases data\n\nAll data is located in `data` directory.\n\n`data/raw` contains raw data `nodejs.json` and `iojs.json`.\n\n`data/processed` contains `envs.js` with both node.js and io.js data preprocessed to be used by [Browserslist](https://github.com/ai/browserslist) and other projects. Each version in this file contains only necessary info: version, release date and optionally LTS flag.\n\n## Installation\n```bash\nnpm install --save node-releases\n```\n\n## Updating data\n```bash\nnpm run build\n```\nThis is a build script which fetches data from web, processes it and saves processed data to `data/processed/envs.json`. If you want to run this steps separately you can use commands described below.\n\n\n### Fetching data\n```bash\nnpm run fetch\n```\nThis npm script will download new data to `data/raw` directory. Also it'll download Node.js release schedule into `release-schedule` folder.\n\n### Processing data\n```bash\nnpm run process\n```\nThis script generates `envs.json` file from raw data files and saves it to `data/processed` directory.\n/LICENSE\u0004SThe MIT License\n\nCopyright (c) 2017 Sergey Rubanov (https://github.com/chicoxyzzy)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n,/data/release-schedule/release-schedule.json\u0006{\"v0.8\":{\"start\":\"2012-06-25\",\"end\":\"2014-07-31\"},\"v0.10\":{\"start\":\"2013-03-11\",\"end\":\"2016-10-31\"},\"v0.12\":{\"start\":\"2015-02-06\",\"end\":\"2016-12-31\"},\"v4\":{\"start\":\"2015-09-08\",\"lts\":\"2015-10-12\",\"maintenance\":\"2017-04-01\",\"end\":\"2018-04-30\",\"codename\":\"Argon\"},\"v5\":{\"start\":\"2015-10-29\",\"maintenance\":\"2016-04-30\",\"end\":\"2016-06-30\"},\"v6\":{\"start\":\"2016-04-26\",\"lts\":\"2016-10-18\",\"maintenance\":\"2018-04-30\",\"end\":\"2019-04-30\",\"codename\":\"Boron\"},\"v7\":{\"start\":\"2016-10-25\",\"maintenance\":\"2017-04-30\",\"end\":\"2017-06-30\"},\"v8\":{\"start\":\"2017-05-30\",\"lts\":\"2017-10-31\",\"maintenance\":\"2019-01-01\",\"end\":\"2019-12-31\",\"codename\":\"Carbon\"},\"v9\":{\"start\":\"2017-10-01\",\"maintenance\":\"2018-04-01\",\"end\":\"2018-06-30\"},\"v10\":{\"start\":\"2018-04-24\",\"lts\":\"2018-10-30\",\"maintenance\":\"2020-05-19\",\"end\":\"2021-04-30\",\"codename\":\"Dubnium\"},\"v11\":{\"start\":\"2018-10-23\",\"maintenance\":\"2019-04-22\",\"end\":\"2019-06-01\"},\"v12\":{\"start\":\"2019-04-23\",\"lts\":\"2019-10-21\",\"maintenance\":\"2020-11-30\",\"end\":\"2022-04-30\",\"codename\":\"Erbium\"},\"v13\":{\"start\":\"2019-10-22\",\"maintenance\":\"2020-04-01\",\"end\":\"2020-06-01\"},\"v14\":{\"start\":\"2020-04-21\",\"lts\":\"2020-10-27\",\"maintenance\":\"2021-10-19\",\"end\":\"2023-04-30\",\"codename\":\"Fermium\"},\"v15\":{\"start\":\"2020-10-20\",\"maintenance\":\"2021-04-01\",\"end\":\"2021-06-01\"},\"v16\":{\"start\":\"2021-04-20\",\"lts\":\"2021-10-26\",\"maintenance\":\"2022-10-18\",\"end\":\"2023-09-11\",\"codename\":\"Gallium\"},\"v17\":{\"start\":\"2021-10-19\",\"maintenance\":\"2022-04-01\",\"end\":\"2022-06-01\"},\"v18\":{\"start\":\"2022-04-19\",\"lts\":\"2022-10-25\",\"maintenance\":\"2023-10-18\",\"end\":\"2025-04-30\",\"codename\":\"Hydrogen\"},\"v19\":{\"start\":\"2022-10-18\",\"maintenance\":\"2023-04-01\",\"end\":\"2023-06-01\"},\"v20\":{\"start\":\"2023-04-18\",\"lts\":\"2023-10-24\",\"maintenance\":\"2024-10-22\",\"end\":\"2026-04-30\",\"codename\":\"\"}}/package.json\u0001m{\n  \"name\": \"node-releases\",\n  \"version\": \"2.0.9\",\n  \"description\": \"Node.js releases data\",\n  \"scripts\": {\n    \"build\": \"node scripts/build.js\"\n  },\n  \"repository\": \"chicoxyzzy/node-releases\",\n  \"keywords\": [\n    \"nodejs\",\n    \"releases\"\n  ],\n  \"author\": \"Sergey Rubanov <chi187@gmail.com>\",\n  \"license\": \"MIT\",\n  \"devDependencies\": {\n    \"semver\": \"^7.3.5\"\n  }\n}\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/bm9ybWFsaXplLXBhdGhAMy4wLjA=",
    "content": "/README.md\u0015A# normalize-path [![NPM version](https://img.shields.io/npm/v/normalize-path.svg?style=flat)](https://www.npmjs.com/package/normalize-path) [![NPM monthly downloads](https://img.shields.io/npm/dm/normalize-path.svg?style=flat)](https://npmjs.org/package/normalize-path) [![NPM total downloads](https://img.shields.io/npm/dt/normalize-path.svg?style=flat)](https://npmjs.org/package/normalize-path) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/normalize-path.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/normalize-path)\n\n> Normalize slashes in a file path to be posix/unix-like forward slashes. Also condenses repeat slashes to a single slash and removes and trailing slashes, unless disabled.\n\nPlease consider following this project's author, [Jon Schlinkert](https://github.com/jonschlinkert), and consider starring the project to show your :heart: and support.\n\n## Install\n\nInstall with [npm](https://www.npmjs.com/):\n\n```sh\n$ npm install --save normalize-path\n```\n\n## Usage\n\n```js\nconst normalize = require('normalize-path');\n\nconsole.log(normalize('\\\\foo\\\\bar\\\\baz\\\\')); \n//=> '/foo/bar/baz'\n```\n\n**win32 namespaces**\n\n```js\nconsole.log(normalize('\\\\\\\\?\\\\UNC\\\\Server01\\\\user\\\\docs\\\\Letter.txt')); \n//=> '//?/UNC/Server01/user/docs/Letter.txt'\n\nconsole.log(normalize('\\\\\\\\.\\\\CdRomX')); \n//=> '//./CdRomX'\n```\n\n**Consecutive slashes**\n\nCondenses multiple consecutive forward slashes (except for leading slashes in win32 namespaces) to a single slash.\n\n```js\nconsole.log(normalize('.//foo//bar///////baz/')); \n//=> './foo/bar/baz'\n```\n\n### Trailing slashes\n\nBy default trailing slashes are removed. Pass `false` as the last argument to disable this behavior and _**keep** trailing slashes_:\n\n```js\nconsole.log(normalize('foo\\\\bar\\\\baz\\\\', false)); //=> 'foo/bar/baz/'\nconsole.log(normalize('./foo/bar/baz/', false)); //=> './foo/bar/baz/'\n```\n\n## Release history\n\n### v3.0\n\nNo breaking changes in this release.\n\n* a check was added to ensure that [win32 namespaces](https://msdn.microsoft.com/library/windows/desktop/aa365247(v=vs.85).aspx#namespaces) are handled properly by win32 `path.parse()` after a path has been normalized by this library.\n* a minor optimization was made to simplify how the trailing separator was handled\n\n## About\n\n<details>\n<summary><strong>Contributing</strong></summary>\n\nPull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).\n\n</details>\n\n<details>\n<summary><strong>Running Tests</strong></summary>\n\nRunning and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:\n\n```sh\n$ npm install && npm test\n```\n\n</details>\n\n<details>\n<summary><strong>Building docs</strong></summary>\n\n_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_\n\nTo generate the readme, run the following command:\n\n```sh\n$ npm install -g verbose/verb#dev verb-generate-readme && verb\n```\n\n</details>\n\n### Related projects\n\nOther useful path-related libraries:\n\n* [contains-path](https://www.npmjs.com/package/contains-path): Return true if a file path contains the given path. | [homepage](https://github.com/jonschlinkert/contains-path \"Return true if a file path contains the given path.\")\n* [is-absolute](https://www.npmjs.com/package/is-absolute): Returns true if a file path is absolute. Does not rely on the path module… [more](https://github.com/jonschlinkert/is-absolute) | [homepage](https://github.com/jonschlinkert/is-absolute \"Returns true if a file path is absolute. Does not rely on the path module and can be used as a polyfill for node.js native `path.isAbolute`.\")\n* [is-relative](https://www.npmjs.com/package/is-relative): Returns `true` if the path appears to be relative. | [homepage](https://github.com/jonschlinkert/is-relative \"Returns `true` if the path appears to be relative.\")\n* [parse-filepath](https://www.npmjs.com/package/parse-filepath): Pollyfill for node.js `path.parse`, parses a filepath into an object. | [homepage](https://github.com/jonschlinkert/parse-filepath \"Pollyfill for node.js `path.parse`, parses a filepath into an object.\")\n* [path-ends-with](https://www.npmjs.com/package/path-ends-with): Return `true` if a file path ends with the given string/suffix. | [homepage](https://github.com/jonschlinkert/path-ends-with \"Return `true` if a file path ends with the given string/suffix.\")\n* [unixify](https://www.npmjs.com/package/unixify): Convert Windows file paths to unix paths. | [homepage](https://github.com/jonschlinkert/unixify \"Convert Windows file paths to unix paths.\")\n\n### Contributors\n\n| **Commits** | **Contributor** | \n| --- | --- |\n| 35 | [jonschlinkert](https://github.com/jonschlinkert) |\n| 1 | [phated](https://github.com/phated) |\n\n### Author\n\n**Jon Schlinkert**\n\n* [LinkedIn Profile](https://linkedin.com/in/jonschlinkert)\n* [GitHub Profile](https://github.com/jonschlinkert)\n* [Twitter Profile](https://twitter.com/jonschlinkert)\n\n### License\n\nCopyright © 2018, [Jon Schlinkert](https://github.com/jonschlinkert).\nReleased under the [MIT License](LICENSE).\n\n***\n\n_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.6.0, on April 19, 2018._/LICENSE\u0004@The MIT License (MIT)\n\nCopyright (c) 2014-2018, Jon Schlinkert.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n/package.json\u0006{\n  \"name\": \"normalize-path\",\n  \"description\": \"Normalize slashes in a file path to be posix/unix-like forward slashes. Also condenses repeat slashes to a single slash and removes and trailing slashes, unless disabled.\",\n  \"version\": \"3.0.0\",\n  \"homepage\": \"https://github.com/jonschlinkert/normalize-path\",\n  \"author\": \"Jon Schlinkert (https://github.com/jonschlinkert)\",\n  \"contributors\": [\n    \"Blaine Bublitz (https://twitter.com/BlaineBublitz)\",\n    \"Jon Schlinkert (http://twitter.com/jonschlinkert)\"\n  ],\n  \"repository\": \"jonschlinkert/normalize-path\",\n  \"bugs\": {\n    \"url\": \"https://github.com/jonschlinkert/normalize-path/issues\"\n  },\n  \"license\": \"MIT\",\n  \"files\": [\n    \"index.js\"\n  ],\n  \"main\": \"index.js\",\n  \"engines\": {\n    \"node\": \">=0.10.0\"\n  },\n  \"scripts\": {\n    \"test\": \"mocha\"\n  },\n  \"devDependencies\": {\n    \"gulp-format-md\": \"^1.0.0\",\n    \"minimist\": \"^1.2.0\",\n    \"mocha\": \"^3.5.3\"\n  },\n  \"keywords\": [\n    \"absolute\",\n    \"backslash\",\n    \"delimiter\",\n    \"file\",\n    \"file-path\",\n    \"filepath\",\n    \"fix\",\n    \"forward\",\n    \"fp\",\n    \"fs\",\n    \"normalize\",\n    \"path\",\n    \"relative\",\n    \"separator\",\n    \"slash\",\n    \"slashes\",\n    \"trailing\",\n    \"unix\",\n    \"urix\"\n  ],\n  \"verb\": {\n    \"toc\": false,\n    \"layout\": \"default\",\n    \"tasks\": [\n      \"readme\"\n    ],\n    \"plugins\": [\n      \"gulp-format-md\"\n    ],\n    \"related\": {\n      \"description\": \"Other useful path-related libraries:\",\n      \"list\": [\n        \"contains-path\",\n        \"is-absolute\",\n        \"is-relative\",\n        \"parse-filepath\",\n        \"path-ends-with\",\n        \"path-ends-with\",\n        \"unixify\"\n      ]\n    },\n    \"lint\": {\n      \"reflinks\": true\n    }\n  }\n}\n/index.js\u0004\u0000/*!\n * normalize-path <https://github.com/jonschlinkert/normalize-path>\n *\n * Copyright (c) 2014-2018, Jon Schlinkert.\n * Released under the MIT License.\n */\n\nmodule.exports = function(path, stripTrailing) {\n  if (typeof path !== 'string') {\n    throw new TypeError('expected path to be a string');\n  }\n\n  if (path === '\\\\' || path === '/') return '/';\n\n  var len = path.length;\n  if (len <= 1) return path;\n\n  // ensure that win32 namespaces has two leading slashes, so that the path is\n  // handled properly by the win32 version of path.parse() after being normalized\n  // https://msdn.microsoft.com/library/windows/desktop/aa365247(v=vs.85).aspx#namespaces\n  var prefix = '';\n  if (len > 4 && path[3] === '\\\\') {\n    var ch = path[2];\n    if ((ch === '?' || ch === '.') && path.slice(0, 2) === '\\\\\\\\') {\n      path = path.slice(2);\n      prefix = '//';\n    }\n  }\n\n  var segs = path.split(/[/\\\\]+/);\n  if (stripTrailing !== false && segs[segs.length - 1] === '') {\n    segs.pop();\n  }\n  return prefix + segs.join('/');\n};\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/bm9ybWFsaXplLXJhbmdlQDAuMS4y",
    "content": "/package.json\u0004{\n  \"name\": \"normalize-range\",\n  \"version\": \"0.1.2\",\n  \"description\": \"Utility for normalizing a numeric range, with a wrapping function useful for polar coordinates\",\n  \"license\": \"MIT\",\n  \"repository\": \"jamestalmage/normalize-range\",\n  \"author\": {\n    \"name\": \"James Talmage\",\n    \"email\": \"james@talmage.io\",\n    \"url\": \"github.com/jamestalmage\"\n  },\n  \"engines\": {\n    \"node\": \">=0.10.0\"\n  },\n  \"scripts\": {\n    \"test\": \"npm run cover && npm run lint && npm run style\",\n    \"cover\": \"istanbul cover ./node_modules/.bin/_mocha\",\n    \"lint\": \"jshint --reporter=node_modules/jshint-stylish *.js test/*.js\",\n    \"debug\": \"mocha\",\n    \"watch\": \"mocha -w\",\n    \"style\": \"jscs *.js ./**/*.js && jscs ./test/** --config=./test/.jscsrc\"\n  },\n  \"files\": [\n    \"index.js\"\n  ],\n  \"keywords\": [\n    \"range\",\n    \"normalize\",\n    \"utility\",\n    \"angle\",\n    \"degrees\",\n    \"polar\"\n  ],\n  \"dependencies\": {},\n  \"devDependencies\": {\n    \"almost-equal\": \"^1.0.0\",\n    \"codeclimate-test-reporter\": \"^0.1.0\",\n    \"coveralls\": \"^2.11.2\",\n    \"istanbul\": \"^0.3.17\",\n    \"jscs\": \"^2.1.1\",\n    \"jshint\": \"^2.8.0\",\n    \"jshint-stylish\": \"^2.0.1\",\n    \"mocha\": \"^2.2.5\",\n    \"stringify-pi\": \"0.0.3\"\n  }\n}\n/index.js\u0005'use strict';\nmodule.exports = {\n  wrap: wrapRange,\n  limit: limitRange,\n  validate: validateRange,\n  test: testRange,\n  curry: curry,\n  name: name\n};\n\nfunction wrapRange(min, max, value) {\n  var maxLessMin = max - min;\n  return ((value - min) % maxLessMin + maxLessMin) % maxLessMin + min;\n}\n\nfunction limitRange(min, max, value) {\n  return Math.max(min, Math.min(max, value));\n}\n\nfunction validateRange(min, max, value, minExclusive, maxExclusive) {\n  if (!testRange(min, max, value, minExclusive, maxExclusive)) {\n    throw new Error(value + ' is outside of range [' + min + ',' + max + ')');\n  }\n  return value;\n}\n\nfunction testRange(min, max, value, minExclusive, maxExclusive) {\n  return !(\n       value < min ||\n       value > max ||\n       (maxExclusive && (value === max)) ||\n       (minExclusive && (value === min))\n  );\n}\n\nfunction name(min, max, minExcl, maxExcl) {\n  return (minExcl ? '(' : '[') + min + ',' + max + (maxExcl ? ')' : ']');\n}\n\nfunction curry(min, max, minExclusive, maxExclusive) {\n  var boundNameFn = name.bind(null, min, max, minExclusive, maxExclusive);\n  return {\n    wrap: wrapRange.bind(null, min, max),\n    limit: limitRange.bind(null, min, max),\n    validate: function(value) {\n      return validateRange(min, max, value, minExclusive, maxExclusive);\n    },\n    test: function(value) {\n      return testRange(min, max, value, minExclusive, maxExclusive);\n    },\n    toString: boundNameFn,\n    name: boundNameFn\n  };\n}\n/readme.md\u000f# normalize-range \n\nUtility for normalizing a numeric range, with a wrapping function useful for polar coordinates.\n\n[![Build Status](https://travis-ci.org/jamestalmage/normalize-range.svg?branch=master)](https://travis-ci.org/jamestalmage/normalize-range)\n[![Coverage Status](https://coveralls.io/repos/jamestalmage/normalize-range/badge.svg?branch=master&service=github)](https://coveralls.io/github/jamestalmage/normalize-range?branch=master)\n[![Code Climate](https://codeclimate.com/github/jamestalmage/normalize-range/badges/gpa.svg)](https://codeclimate.com/github/jamestalmage/normalize-range)\n[![Dependency Status](https://david-dm.org/jamestalmage/normalize-range.svg)](https://david-dm.org/jamestalmage/normalize-range)\n[![devDependency Status](https://david-dm.org/jamestalmage/normalize-range/dev-status.svg)](https://david-dm.org/jamestalmage/normalize-range#info=devDependencies)\n\n[![NPM](https://nodei.co/npm/normalize-range.png)](https://nodei.co/npm/normalize-range/)\n\n## Usage\n\n```js\nvar nr = require('normalize-range');\n\nnr.wrap(0, 360, 400);\n//=> 40\n\nnr.wrap(0, 360, -90);\n//=> 270\n\nnr.limit(0, 100, 500);\n//=> 100\n\nnr.limit(0, 100, -20);\n//=> 0\n\n// There is a convenient currying function\nvar wrapAngle = nr.curry(0, 360).wrap;\nvar limitTo10 = nr.curry(0, 10).limit;\n\nwrapAngle(-30);\n//=> 330\n```\n## API\n\n### wrap(min, max, value)\n\nNormalizes a values that \"wraps around\". For example, in a polar coordinate system, 270˚ can also be\nrepresented as -90˚. \nFor wrapping purposes we assume `max` is functionally equivalent to `min`, and that `wrap(max + 1) === wrap(min + 1)`.\nWrap always assumes that `min` is *inclusive*, and `max` is *exclusive*.\nIn other words, if `value === max` the function will wrap it, and return `min`, but `min` will not be wrapped.\n\n```js\nnr.wrap(0, 360, 0) === 0;\nnr.wrap(0, 360, 360) === 0;\nnr.wrap(0, 360, 361) === 1;\nnr.wrap(0, 360, -1) === 359;\n```\n\nYou are not restricted to whole numbers, and ranges can be negative.\n\n```js\nvar π = Math.PI;\nvar radianRange = nr.curry(-π, π);\n\nredianRange.wrap(0) === 0;\nnr.wrap(π) === -π;\nnr.wrap(4 * π / 3) === -2 * π / 3;\n```\n\n### limit(min, max, value)\n\nNormalize the value by bringing it within the range.\nIf `value` is greater than `max`, `max` will be returned.\nIf `value` is less than `min`, `min` will be returned.\nOtherwise, `value` is returned unaltered.\nBoth ends of this range are *inclusive*.\n\n### test(min, max, value, [minExclusive], [maxExclusive])\n\nReturns `true` if `value` is within the range, `false` otherwise.\nIt defaults to `inclusive` on both ends of the range, but that can be\nchanged by setting `minExclusive` and/or `maxExclusive` to a truthy value.\n\n### validate(min, max, value, [minExclusive], [maxExclusive])\n\nReturns `value` or throws an error if `value` is outside the specified range.\n\n### name(min, max, value, [minExclusive], [maxExclusive])\n\nReturns a string representing this range in \n[range notation](https://en.wikipedia.org/wiki/Interval_(mathematics)#Classification_of_intervals).\n\n### curry(min, max, [minExclusive], [maxExclusive])\n\nConvenience method for currying all method arguments except `value`.\n\n```js\nvar angle = require('normalize-range').curry(-180, 180, false, true);\n\nangle.wrap(270)\n//=> -90\n\nangle.limit(200)\n//=> 180\n\nangle.test(0)\n//=> true\n\nangle.validate(300)\n//=> throws an Error\n\nangle.toString() // or angle.name()\n//=> \"[-180,180)\"\n```\n\n#### min\n\n*Required*  \nType: `number`\n\nThe minimum value (inclusive) of the range.\n\n#### max\n\n*Required*  \nType: `number`\n\nThe maximum value (exclusive) of the range.\n\n#### value\n\n*Required*  \nType: `number`\n\nThe value to be normalized.\n\n#### returns\n\nType: `number`\n\nThe normalized value.\n\n## Building and Releasing\n\n- `npm test`: tests, linting, coverage and style checks.\n- `npm run watch`: autotest mode for active development.\n- `npm run debug`: run tests without coverage (istanbul can obscure line #'s) \n\nRelease via `cut-release` tool.\n\n## License\n\nMIT © [James Talmage](http://github.com/jamestalmage)\n/license\u0004`The MIT License (MIT)\n\nCopyright (c) James Talmage <james@talmage.io> (github.com/jamestalmage)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/bmF0dXJhbC1jb21wYXJlQDEuNC4w",
    "content": "/README.md\r\u0018\n[Build]:    http://img.shields.io/travis/litejs/natural-compare-lite.png\n[Coverage]: http://img.shields.io/coveralls/litejs/natural-compare-lite.png\n[1]: https://travis-ci.org/litejs/natural-compare-lite\n[2]: https://coveralls.io/r/litejs/natural-compare-lite\n[npm package]: https://npmjs.org/package/natural-compare-lite\n[GitHub repo]: https://github.com/litejs/natural-compare-lite\n\n\n\n    @version    1.4.0\n    @date       2015-10-26\n    @stability  3 - Stable\n\n\nNatural Compare &ndash; [![Build][]][1] [![Coverage][]][2]\n===============\n\nCompare strings containing a mix of letters and numbers\nin the way a human being would in sort order.\nThis is described as a \"natural ordering\".\n\n```text\nStandard sorting:   Natural order sorting:\n    img1.png            img1.png\n    img10.png           img2.png\n    img12.png           img10.png\n    img2.png            img12.png\n```\n\nString.naturalCompare returns a number indicating\nwhether a reference string comes before or after or is the same\nas the given string in sort order.\nUse it with builtin sort() function.\n\n\n\n### Installation\n\n- In browser\n\n```html\n<script src=min.natural-compare.js></script>\n```\n\n- In node.js: `npm install natural-compare-lite`\n\n```javascript\nrequire(\"natural-compare-lite\")\n```\n\n### Usage\n\n```javascript\n// Simple case sensitive example\nvar a = [\"z1.doc\", \"z10.doc\", \"z17.doc\", \"z2.doc\", \"z23.doc\", \"z3.doc\"];\na.sort(String.naturalCompare);\n// [\"z1.doc\", \"z2.doc\", \"z3.doc\", \"z10.doc\", \"z17.doc\", \"z23.doc\"]\n\n// Use wrapper function for case insensitivity\na.sort(function(a, b){\n  return String.naturalCompare(a.toLowerCase(), b.toLowerCase());\n})\n\n// In most cases we want to sort an array of objects\nvar a = [ {\"street\":\"350 5th Ave\", \"room\":\"A-1021\"}\n        , {\"street\":\"350 5th Ave\", \"room\":\"A-21046-b\"} ];\n\n// sort by street, then by room\na.sort(function(a, b){\n  return String.naturalCompare(a.street, b.street) || String.naturalCompare(a.room, b.room);\n})\n\n// When text transformation is needed (eg toLowerCase()),\n// it is best for performance to keep\n// transformed key in that object.\n// There are no need to do text transformation\n// on each comparision when sorting.\nvar a = [ {\"make\":\"Audi\", \"model\":\"A6\"}\n        , {\"make\":\"Kia\",  \"model\":\"Rio\"} ];\n\n// sort by make, then by model\na.map(function(car){\n  car.sort_key = (car.make + \" \" + car.model).toLowerCase();\n})\na.sort(function(a, b){\n  return String.naturalCompare(a.sort_key, b.sort_key);\n})\n```\n\n- Works well with dates in ISO format eg \"Rev 2012-07-26.doc\".\n\n\n### Custom alphabet\n\nIt is possible to configure a custom alphabet\nto achieve a desired order.\n\n```javascript\n// Estonian alphabet\nString.alphabet = \"ABDEFGHIJKLMNOPRSŠZŽTUVÕÄÖÜXYabdefghijklmnoprsšzžtuvõäöüxy\"\n[\"t\", \"z\", \"x\", \"õ\"].sort(String.naturalCompare)\n// [\"z\", \"t\", \"õ\", \"x\"]\n\n// Russian alphabet\nString.alphabet = \"АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя\"\n[\"Ё\", \"А\", \"Б\"].sort(String.naturalCompare)\n// [\"А\", \"Б\", \"Ё\"]\n```\n\n\nExternal links\n--------------\n\n-   [GitHub repo][https://github.com/litejs/natural-compare-lite]\n-   [jsperf test](http://jsperf.com/natural-sort-2/12)\n\n\nLicence\n-------\n\nCopyright (c) 2012-2015 Lauri Rooden &lt;lauri@rooden.ee&gt;  \n[The MIT License](http://lauri.rooden.ee/mit-license.txt)\n\n\n/package.json\u0003{\n  \"name\": \"natural-compare\",\n  \"version\": \"1.4.0\",\n  \"stability\": 3,\n  \"author\": \"Lauri Rooden (https://github.com/litejs/natural-compare-lite)\",\n  \"license\": \"MIT\",\n  \"description\": \"Compare strings containing a mix of letters and numbers in the way a human being would in sort order.\",\n  \"keywords\": [\n    \"string\",\n    \"natural\",\n    \"order\",\n    \"sort\",\n    \"natsort\",\n    \"natcmp\",\n    \"compare\",\n    \"alphanum\",\n    \"litejs\"\n  ],\n  \"main\": \"index.js\",\n  \"readmeFilename\": \"README.md\",\n  \"files\": [\n    \"index.js\"\n  ],\n  \"scripts\": {\n    \"build\": \"node node_modules/buildman/index.js --all\",\n    \"test\": \"node tests/index.js\"\n  },\n  \"repository\": \"git://github.com/litejs/natural-compare-lite.git\",\n  \"bugs\": {\n    \"url\": \"https://github.com/litejs/natural-compare-lite/issues\"\n  },\n  \"devDependencies\": {\n    \"buildman\": \"*\",\n    \"testman\": \"*\"\n  },\n  \"buildman\": {\n    \"dist/index-min.js\": {\n      \"banner\": \"/*! litejs.com/MIT-LICENSE.txt */\",\n      \"input\": \"index.js\"\n    }\n  }\n}\n/index.js\u0005\u0017\n\n\n/*\n * @version    1.4.0\n * @date       2015-10-26\n * @stability  3 - Stable\n * @author     Lauri Rooden (https://github.com/litejs/natural-compare-lite)\n * @license    MIT License\n */\n\n\nvar naturalCompare = function(a, b) {\n\tvar i, codeA\n\t, codeB = 1\n\t, posA = 0\n\t, posB = 0\n\t, alphabet = String.alphabet\n\n\tfunction getCode(str, pos, code) {\n\t\tif (code) {\n\t\t\tfor (i = pos; code = getCode(str, i), code < 76 && code > 65;) ++i;\n\t\t\treturn +str.slice(pos - 1, i)\n\t\t}\n\t\tcode = alphabet && alphabet.indexOf(str.charAt(pos))\n\t\treturn code > -1 ? code + 76 : ((code = str.charCodeAt(pos) || 0), code < 45 || code > 127) ? code\n\t\t\t: code < 46 ? 65               // -\n\t\t\t: code < 48 ? code - 1\n\t\t\t: code < 58 ? code + 18        // 0-9\n\t\t\t: code < 65 ? code - 11\n\t\t\t: code < 91 ? code + 11        // A-Z\n\t\t\t: code < 97 ? code - 37\n\t\t\t: code < 123 ? code + 5        // a-z\n\t\t\t: code - 63\n\t}\n\n\n\tif ((a+=\"\") != (b+=\"\")) for (;codeB;) {\n\t\tcodeA = getCode(a, posA++)\n\t\tcodeB = getCode(b, posB++)\n\n\t\tif (codeA < 76 && codeB < 76 && codeA > 66 && codeB > 66) {\n\t\t\tcodeA = getCode(a, posA, posA)\n\t\t\tcodeB = getCode(b, posB, posA = i)\n\t\t\tposB = i\n\t\t}\n\n\t\tif (codeA != codeB) return (codeA < codeB) ? -1 : 1\n\t}\n\treturn 0\n}\n\ntry {\n\tmodule.exports = naturalCompare;\n} catch (e) {\n\tString.naturalCompare = naturalCompare;\n}\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/bmVnb3RpYXRvckAwLjYuMw==",
    "content": "/index.js\t/*!\n * negotiator\n * Copyright(c) 2012 Federico Romero\n * Copyright(c) 2012-2014 Isaac Z. Schlueter\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\nvar preferredCharsets = require('./lib/charset')\nvar preferredEncodings = require('./lib/encoding')\nvar preferredLanguages = require('./lib/language')\nvar preferredMediaTypes = require('./lib/mediaType')\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = Negotiator;\nmodule.exports.Negotiator = Negotiator;\n\n/**\n * Create a Negotiator instance from a request.\n * @param {object} request\n * @public\n */\n\nfunction Negotiator(request) {\n  if (!(this instanceof Negotiator)) {\n    return new Negotiator(request);\n  }\n\n  this.request = request;\n}\n\nNegotiator.prototype.charset = function charset(available) {\n  var set = this.charsets(available);\n  return set && set[0];\n};\n\nNegotiator.prototype.charsets = function charsets(available) {\n  return preferredCharsets(this.request.headers['accept-charset'], available);\n};\n\nNegotiator.prototype.encoding = function encoding(available) {\n  var set = this.encodings(available);\n  return set && set[0];\n};\n\nNegotiator.prototype.encodings = function encodings(available) {\n  return preferredEncodings(this.request.headers['accept-encoding'], available);\n};\n\nNegotiator.prototype.language = function language(available) {\n  var set = this.languages(available);\n  return set && set[0];\n};\n\nNegotiator.prototype.languages = function languages(available) {\n  return preferredLanguages(this.request.headers['accept-language'], available);\n};\n\nNegotiator.prototype.mediaType = function mediaType(available) {\n  var set = this.mediaTypes(available);\n  return set && set[0];\n};\n\nNegotiator.prototype.mediaTypes = function mediaTypes(available) {\n  return preferredMediaTypes(this.request.headers.accept, available);\n};\n\n// Backwards compatibility\nNegotiator.prototype.preferredCharset = Negotiator.prototype.charset;\nNegotiator.prototype.preferredCharsets = Negotiator.prototype.charsets;\nNegotiator.prototype.preferredEncoding = Negotiator.prototype.encoding;\nNegotiator.prototype.preferredEncodings = Negotiator.prototype.encodings;\nNegotiator.prototype.preferredLanguage = Negotiator.prototype.language;\nNegotiator.prototype.preferredLanguages = Negotiator.prototype.languages;\nNegotiator.prototype.preferredMediaType = Negotiator.prototype.mediaType;\nNegotiator.prototype.preferredMediaTypes = Negotiator.prototype.mediaTypes;\n/lib/mediaType.js\u0014/**\n * negotiator\n * Copyright(c) 2012 Isaac Z. Schlueter\n * Copyright(c) 2014 Federico Romero\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = preferredMediaTypes;\nmodule.exports.preferredMediaTypes = preferredMediaTypes;\n\n/**\n * Module variables.\n * @private\n */\n\nvar simpleMediaTypeRegExp = /^\\s*([^\\s\\/;]+)\\/([^;\\s]+)\\s*(?:;(.*))?$/;\n\n/**\n * Parse the Accept header.\n * @private\n */\n\nfunction parseAccept(accept) {\n  var accepts = splitMediaTypes(accept);\n\n  for (var i = 0, j = 0; i < accepts.length; i++) {\n    var mediaType = parseMediaType(accepts[i].trim(), i);\n\n    if (mediaType) {\n      accepts[j++] = mediaType;\n    }\n  }\n\n  // trim accepts\n  accepts.length = j;\n\n  return accepts;\n}\n\n/**\n * Parse a media type from the Accept header.\n * @private\n */\n\nfunction parseMediaType(str, i) {\n  var match = simpleMediaTypeRegExp.exec(str);\n  if (!match) return null;\n\n  var params = Object.create(null);\n  var q = 1;\n  var subtype = match[2];\n  var type = match[1];\n\n  if (match[3]) {\n    var kvps = splitParameters(match[3]).map(splitKeyValuePair);\n\n    for (var j = 0; j < kvps.length; j++) {\n      var pair = kvps[j];\n      var key = pair[0].toLowerCase();\n      var val = pair[1];\n\n      // get the value, unwrapping quotes\n      var value = val && val[0] === '\"' && val[val.length - 1] === '\"'\n        ? val.substr(1, val.length - 2)\n        : val;\n\n      if (key === 'q') {\n        q = parseFloat(value);\n        break;\n      }\n\n      // store parameter\n      params[key] = value;\n    }\n  }\n\n  return {\n    type: type,\n    subtype: subtype,\n    params: params,\n    q: q,\n    i: i\n  };\n}\n\n/**\n * Get the priority of a media type.\n * @private\n */\n\nfunction getMediaTypePriority(type, accepted, index) {\n  var priority = {o: -1, q: 0, s: 0};\n\n  for (var i = 0; i < accepted.length; i++) {\n    var spec = specify(type, accepted[i], index);\n\n    if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) {\n      priority = spec;\n    }\n  }\n\n  return priority;\n}\n\n/**\n * Get the specificity of the media type.\n * @private\n */\n\nfunction specify(type, spec, index) {\n  var p = parseMediaType(type);\n  var s = 0;\n\n  if (!p) {\n    return null;\n  }\n\n  if(spec.type.toLowerCase() == p.type.toLowerCase()) {\n    s |= 4\n  } else if(spec.type != '*') {\n    return null;\n  }\n\n  if(spec.subtype.toLowerCase() == p.subtype.toLowerCase()) {\n    s |= 2\n  } else if(spec.subtype != '*') {\n    return null;\n  }\n\n  var keys = Object.keys(spec.params);\n  if (keys.length > 0) {\n    if (keys.every(function (k) {\n      return spec.params[k] == '*' || (spec.params[k] || '').toLowerCase() == (p.params[k] || '').toLowerCase();\n    })) {\n      s |= 1\n    } else {\n      return null\n    }\n  }\n\n  return {\n    i: index,\n    o: spec.i,\n    q: spec.q,\n    s: s,\n  }\n}\n\n/**\n * Get the preferred media types from an Accept header.\n * @public\n */\n\nfunction preferredMediaTypes(accept, provided) {\n  // RFC 2616 sec 14.2: no header = */*\n  var accepts = parseAccept(accept === undefined ? '*/*' : accept || '');\n\n  if (!provided) {\n    // sorted list of all types\n    return accepts\n      .filter(isQuality)\n      .sort(compareSpecs)\n      .map(getFullType);\n  }\n\n  var priorities = provided.map(function getPriority(type, index) {\n    return getMediaTypePriority(type, accepts, index);\n  });\n\n  // sorted list of accepted types\n  return priorities.filter(isQuality).sort(compareSpecs).map(function getType(priority) {\n    return provided[priorities.indexOf(priority)];\n  });\n}\n\n/**\n * Compare two specs.\n * @private\n */\n\nfunction compareSpecs(a, b) {\n  return (b.q - a.q) || (b.s - a.s) || (a.o - b.o) || (a.i - b.i) || 0;\n}\n\n/**\n * Get full type string.\n * @private\n */\n\nfunction getFullType(spec) {\n  return spec.type + '/' + spec.subtype;\n}\n\n/**\n * Check if a spec has any quality.\n * @private\n */\n\nfunction isQuality(spec) {\n  return spec.q > 0;\n}\n\n/**\n * Count the number of quotes in a string.\n * @private\n */\n\nfunction quoteCount(string) {\n  var count = 0;\n  var index = 0;\n\n  while ((index = string.indexOf('\"', index)) !== -1) {\n    count++;\n    index++;\n  }\n\n  return count;\n}\n\n/**\n * Split a key value pair.\n * @private\n */\n\nfunction splitKeyValuePair(str) {\n  var index = str.indexOf('=');\n  var key;\n  var val;\n\n  if (index === -1) {\n    key = str;\n  } else {\n    key = str.substr(0, index);\n    val = str.substr(index + 1);\n  }\n\n  return [key, val];\n}\n\n/**\n * Split an Accept header into media types.\n * @private\n */\n\nfunction splitMediaTypes(accept) {\n  var accepts = accept.split(',');\n\n  for (var i = 1, j = 0; i < accepts.length; i++) {\n    if (quoteCount(accepts[j]) % 2 == 0) {\n      accepts[++j] = accepts[i];\n    } else {\n      accepts[j] += ',' + accepts[i];\n    }\n  }\n\n  // trim accepts\n  accepts.length = j + 1;\n\n  return accepts;\n}\n\n/**\n * Split a string of parameters.\n * @private\n */\n\nfunction splitParameters(str) {\n  var parameters = str.split(';');\n\n  for (var i = 1, j = 0; i < parameters.length; i++) {\n    if (quoteCount(parameters[j]) % 2 == 0) {\n      parameters[++j] = parameters[i];\n    } else {\n      parameters[j] += ';' + parameters[i];\n    }\n  }\n\n  // trim parameters\n  parameters.length = j + 1;\n\n  for (var i = 0; i < parameters.length; i++) {\n    parameters[i] = parameters[i].trim();\n  }\n\n  return parameters;\n}\n/lib/charset.js\f\t/**\n * negotiator\n * Copyright(c) 2012 Isaac Z. Schlueter\n * Copyright(c) 2014 Federico Romero\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = preferredCharsets;\nmodule.exports.preferredCharsets = preferredCharsets;\n\n/**\n * Module variables.\n * @private\n */\n\nvar simpleCharsetRegExp = /^\\s*([^\\s;]+)\\s*(?:;(.*))?$/;\n\n/**\n * Parse the Accept-Charset header.\n * @private\n */\n\nfunction parseAcceptCharset(accept) {\n  var accepts = accept.split(',');\n\n  for (var i = 0, j = 0; i < accepts.length; i++) {\n    var charset = parseCharset(accepts[i].trim(), i);\n\n    if (charset) {\n      accepts[j++] = charset;\n    }\n  }\n\n  // trim accepts\n  accepts.length = j;\n\n  return accepts;\n}\n\n/**\n * Parse a charset from the Accept-Charset header.\n * @private\n */\n\nfunction parseCharset(str, i) {\n  var match = simpleCharsetRegExp.exec(str);\n  if (!match) return null;\n\n  var charset = match[1];\n  var q = 1;\n  if (match[2]) {\n    var params = match[2].split(';')\n    for (var j = 0; j < params.length; j++) {\n      var p = params[j].trim().split('=');\n      if (p[0] === 'q') {\n        q = parseFloat(p[1]);\n        break;\n      }\n    }\n  }\n\n  return {\n    charset: charset,\n    q: q,\n    i: i\n  };\n}\n\n/**\n * Get the priority of a charset.\n * @private\n */\n\nfunction getCharsetPriority(charset, accepted, index) {\n  var priority = {o: -1, q: 0, s: 0};\n\n  for (var i = 0; i < accepted.length; i++) {\n    var spec = specify(charset, accepted[i], index);\n\n    if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) {\n      priority = spec;\n    }\n  }\n\n  return priority;\n}\n\n/**\n * Get the specificity of the charset.\n * @private\n */\n\nfunction specify(charset, spec, index) {\n  var s = 0;\n  if(spec.charset.toLowerCase() === charset.toLowerCase()){\n    s |= 1;\n  } else if (spec.charset !== '*' ) {\n    return null\n  }\n\n  return {\n    i: index,\n    o: spec.i,\n    q: spec.q,\n    s: s\n  }\n}\n\n/**\n * Get the preferred charsets from an Accept-Charset header.\n * @public\n */\n\nfunction preferredCharsets(accept, provided) {\n  // RFC 2616 sec 14.2: no header = *\n  var accepts = parseAcceptCharset(accept === undefined ? '*' : accept || '');\n\n  if (!provided) {\n    // sorted list of all charsets\n    return accepts\n      .filter(isQuality)\n      .sort(compareSpecs)\n      .map(getFullCharset);\n  }\n\n  var priorities = provided.map(function getPriority(type, index) {\n    return getCharsetPriority(type, accepts, index);\n  });\n\n  // sorted list of accepted charsets\n  return priorities.filter(isQuality).sort(compareSpecs).map(function getCharset(priority) {\n    return provided[priorities.indexOf(priority)];\n  });\n}\n\n/**\n * Compare two specs.\n * @private\n */\n\nfunction compareSpecs(a, b) {\n  return (b.q - a.q) || (b.s - a.s) || (a.o - b.o) || (a.i - b.i) || 0;\n}\n\n/**\n * Get full charset string.\n * @private\n */\n\nfunction getFullCharset(spec) {\n  return spec.charset;\n}\n\n/**\n * Check if a spec has any quality.\n * @private\n */\n\nfunction isQuality(spec) {\n  return spec.q > 0;\n}\n/README.md\u0013%# negotiator\n\n[![NPM Version][npm-image]][npm-url]\n[![NPM Downloads][downloads-image]][downloads-url]\n[![Node.js Version][node-version-image]][node-version-url]\n[![Build Status][github-actions-ci-image]][github-actions-ci-url]\n[![Test Coverage][coveralls-image]][coveralls-url]\n\nAn HTTP content negotiator for Node.js\n\n## Installation\n\n```sh\n$ npm install negotiator\n```\n\n## API\n\n```js\nvar Negotiator = require('negotiator')\n```\n\n### Accept Negotiation\n\n```js\navailableMediaTypes = ['text/html', 'text/plain', 'application/json']\n\n// The negotiator constructor receives a request object\nnegotiator = new Negotiator(request)\n\n// Let's say Accept header is 'text/html, application/*;q=0.2, image/jpeg;q=0.8'\n\nnegotiator.mediaTypes()\n// -> ['text/html', 'image/jpeg', 'application/*']\n\nnegotiator.mediaTypes(availableMediaTypes)\n// -> ['text/html', 'application/json']\n\nnegotiator.mediaType(availableMediaTypes)\n// -> 'text/html'\n```\n\nYou can check a working example at `examples/accept.js`.\n\n#### Methods\n\n##### mediaType()\n\nReturns the most preferred media type from the client.\n\n##### mediaType(availableMediaType)\n\nReturns the most preferred media type from a list of available media types.\n\n##### mediaTypes()\n\nReturns an array of preferred media types ordered by the client preference.\n\n##### mediaTypes(availableMediaTypes)\n\nReturns an array of preferred media types ordered by priority from a list of\navailable media types.\n\n### Accept-Language Negotiation\n\n```js\nnegotiator = new Negotiator(request)\n\navailableLanguages = ['en', 'es', 'fr']\n\n// Let's say Accept-Language header is 'en;q=0.8, es, pt'\n\nnegotiator.languages()\n// -> ['es', 'pt', 'en']\n\nnegotiator.languages(availableLanguages)\n// -> ['es', 'en']\n\nlanguage = negotiator.language(availableLanguages)\n// -> 'es'\n```\n\nYou can check a working example at `examples/language.js`.\n\n#### Methods\n\n##### language()\n\nReturns the most preferred language from the client.\n\n##### language(availableLanguages)\n\nReturns the most preferred language from a list of available languages.\n\n##### languages()\n\nReturns an array of preferred languages ordered by the client preference.\n\n##### languages(availableLanguages)\n\nReturns an array of preferred languages ordered by priority from a list of\navailable languages.\n\n### Accept-Charset Negotiation\n\n```js\navailableCharsets = ['utf-8', 'iso-8859-1', 'iso-8859-5']\n\nnegotiator = new Negotiator(request)\n\n// Let's say Accept-Charset header is 'utf-8, iso-8859-1;q=0.8, utf-7;q=0.2'\n\nnegotiator.charsets()\n// -> ['utf-8', 'iso-8859-1', 'utf-7']\n\nnegotiator.charsets(availableCharsets)\n// -> ['utf-8', 'iso-8859-1']\n\nnegotiator.charset(availableCharsets)\n// -> 'utf-8'\n```\n\nYou can check a working example at `examples/charset.js`.\n\n#### Methods\n\n##### charset()\n\nReturns the most preferred charset from the client.\n\n##### charset(availableCharsets)\n\nReturns the most preferred charset from a list of available charsets.\n\n##### charsets()\n\nReturns an array of preferred charsets ordered by the client preference.\n\n##### charsets(availableCharsets)\n\nReturns an array of preferred charsets ordered by priority from a list of\navailable charsets.\n\n### Accept-Encoding Negotiation\n\n```js\navailableEncodings = ['identity', 'gzip']\n\nnegotiator = new Negotiator(request)\n\n// Let's say Accept-Encoding header is 'gzip, compress;q=0.2, identity;q=0.5'\n\nnegotiator.encodings()\n// -> ['gzip', 'identity', 'compress']\n\nnegotiator.encodings(availableEncodings)\n// -> ['gzip', 'identity']\n\nnegotiator.encoding(availableEncodings)\n// -> 'gzip'\n```\n\nYou can check a working example at `examples/encoding.js`.\n\n#### Methods\n\n##### encoding()\n\nReturns the most preferred encoding from the client.\n\n##### encoding(availableEncodings)\n\nReturns the most preferred encoding from a list of available encodings.\n\n##### encodings()\n\nReturns an array of preferred encodings ordered by the client preference.\n\n##### encodings(availableEncodings)\n\nReturns an array of preferred encodings ordered by priority from a list of\navailable encodings.\n\n## See Also\n\nThe [accepts](https://npmjs.org/package/accepts#readme) module builds on\nthis module and provides an alternative interface, mime type validation,\nand more.\n\n## License\n\n[MIT](LICENSE)\n\n[npm-image]: https://img.shields.io/npm/v/negotiator.svg\n[npm-url]: https://npmjs.org/package/negotiator\n[node-version-image]: https://img.shields.io/node/v/negotiator.svg\n[node-version-url]: https://nodejs.org/en/download/\n[coveralls-image]: https://img.shields.io/coveralls/jshttp/negotiator/master.svg\n[coveralls-url]: https://coveralls.io/r/jshttp/negotiator?branch=master\n[downloads-image]: https://img.shields.io/npm/dm/negotiator.svg\n[downloads-url]: https://npmjs.org/package/negotiator\n[github-actions-ci-image]: https://img.shields.io/github/workflow/status/jshttp/negotiator/ci/master?label=ci\n[github-actions-ci-url]: https://github.com/jshttp/negotiator/actions/workflows/ci.yml\n/lib/language.js\rQ/**\n * negotiator\n * Copyright(c) 2012 Isaac Z. Schlueter\n * Copyright(c) 2014 Federico Romero\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = preferredLanguages;\nmodule.exports.preferredLanguages = preferredLanguages;\n\n/**\n * Module variables.\n * @private\n */\n\nvar simpleLanguageRegExp = /^\\s*([^\\s\\-;]+)(?:-([^\\s;]+))?\\s*(?:;(.*))?$/;\n\n/**\n * Parse the Accept-Language header.\n * @private\n */\n\nfunction parseAcceptLanguage(accept) {\n  var accepts = accept.split(',');\n\n  for (var i = 0, j = 0; i < accepts.length; i++) {\n    var language = parseLanguage(accepts[i].trim(), i);\n\n    if (language) {\n      accepts[j++] = language;\n    }\n  }\n\n  // trim accepts\n  accepts.length = j;\n\n  return accepts;\n}\n\n/**\n * Parse a language from the Accept-Language header.\n * @private\n */\n\nfunction parseLanguage(str, i) {\n  var match = simpleLanguageRegExp.exec(str);\n  if (!match) return null;\n\n  var prefix = match[1]\n  var suffix = match[2]\n  var full = prefix\n\n  if (suffix) full += \"-\" + suffix;\n\n  var q = 1;\n  if (match[3]) {\n    var params = match[3].split(';')\n    for (var j = 0; j < params.length; j++) {\n      var p = params[j].split('=');\n      if (p[0] === 'q') q = parseFloat(p[1]);\n    }\n  }\n\n  return {\n    prefix: prefix,\n    suffix: suffix,\n    q: q,\n    i: i,\n    full: full\n  };\n}\n\n/**\n * Get the priority of a language.\n * @private\n */\n\nfunction getLanguagePriority(language, accepted, index) {\n  var priority = {o: -1, q: 0, s: 0};\n\n  for (var i = 0; i < accepted.length; i++) {\n    var spec = specify(language, accepted[i], index);\n\n    if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) {\n      priority = spec;\n    }\n  }\n\n  return priority;\n}\n\n/**\n * Get the specificity of the language.\n * @private\n */\n\nfunction specify(language, spec, index) {\n  var p = parseLanguage(language)\n  if (!p) return null;\n  var s = 0;\n  if(spec.full.toLowerCase() === p.full.toLowerCase()){\n    s |= 4;\n  } else if (spec.prefix.toLowerCase() === p.full.toLowerCase()) {\n    s |= 2;\n  } else if (spec.full.toLowerCase() === p.prefix.toLowerCase()) {\n    s |= 1;\n  } else if (spec.full !== '*' ) {\n    return null\n  }\n\n  return {\n    i: index,\n    o: spec.i,\n    q: spec.q,\n    s: s\n  }\n};\n\n/**\n * Get the preferred languages from an Accept-Language header.\n * @public\n */\n\nfunction preferredLanguages(accept, provided) {\n  // RFC 2616 sec 14.4: no header = *\n  var accepts = parseAcceptLanguage(accept === undefined ? '*' : accept || '');\n\n  if (!provided) {\n    // sorted list of all languages\n    return accepts\n      .filter(isQuality)\n      .sort(compareSpecs)\n      .map(getFullLanguage);\n  }\n\n  var priorities = provided.map(function getPriority(type, index) {\n    return getLanguagePriority(type, accepts, index);\n  });\n\n  // sorted list of accepted languages\n  return priorities.filter(isQuality).sort(compareSpecs).map(function getLanguage(priority) {\n    return provided[priorities.indexOf(priority)];\n  });\n}\n\n/**\n * Compare two specs.\n * @private\n */\n\nfunction compareSpecs(a, b) {\n  return (b.q - a.q) || (b.s - a.s) || (a.o - b.o) || (a.i - b.i) || 0;\n}\n\n/**\n * Get full language string.\n * @private\n */\n\nfunction getFullLanguage(spec) {\n  return spec.full;\n}\n\n/**\n * Check if a spec has any quality.\n * @private\n */\n\nfunction isQuality(spec) {\n  return spec.q > 0;\n}\n/package.json\u0003{\n  \"name\": \"negotiator\",\n  \"description\": \"HTTP content negotiation\",\n  \"version\": \"0.6.3\",\n  \"contributors\": [\n    \"Douglas Christopher Wilson <doug@somethingdoug.com>\",\n    \"Federico Romero <federico.romero@outboxlabs.com>\",\n    \"Isaac Z. Schlueter <i@izs.me> (http://blog.izs.me/)\"\n  ],\n  \"license\": \"MIT\",\n  \"keywords\": [\n    \"http\",\n    \"content negotiation\",\n    \"accept\",\n    \"accept-language\",\n    \"accept-encoding\",\n    \"accept-charset\"\n  ],\n  \"repository\": \"jshttp/negotiator\",\n  \"devDependencies\": {\n    \"eslint\": \"7.32.0\",\n    \"eslint-plugin-markdown\": \"2.2.1\",\n    \"mocha\": \"9.1.3\",\n    \"nyc\": \"15.1.0\"\n  },\n  \"files\": [\n    \"lib/\",\n    \"HISTORY.md\",\n    \"LICENSE\",\n    \"index.js\",\n    \"README.md\"\n  ],\n  \"engines\": {\n    \"node\": \">= 0.6\"\n  },\n  \"scripts\": {\n    \"lint\": \"eslint .\",\n    \"test\": \"mocha --reporter spec --check-leaks --bail test/\",\n    \"test-ci\": \"nyc --reporter=lcov --reporter=text npm test\",\n    \"test-cov\": \"nyc --reporter=html --reporter=text npm test\"\n  }\n}\n/LICENSE\u0004(The MIT License)\n\nCopyright (c) 2012-2014 Federico Romero\nCopyright (c) 2012-2014 Isaac Z. Schlueter\nCopyright (c) 2014-2015 Douglas Christopher Wilson\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n/lib/encoding.js\r/**\n * negotiator\n * Copyright(c) 2012 Isaac Z. Schlueter\n * Copyright(c) 2014 Federico Romero\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = preferredEncodings;\nmodule.exports.preferredEncodings = preferredEncodings;\n\n/**\n * Module variables.\n * @private\n */\n\nvar simpleEncodingRegExp = /^\\s*([^\\s;]+)\\s*(?:;(.*))?$/;\n\n/**\n * Parse the Accept-Encoding header.\n * @private\n */\n\nfunction parseAcceptEncoding(accept) {\n  var accepts = accept.split(',');\n  var hasIdentity = false;\n  var minQuality = 1;\n\n  for (var i = 0, j = 0; i < accepts.length; i++) {\n    var encoding = parseEncoding(accepts[i].trim(), i);\n\n    if (encoding) {\n      accepts[j++] = encoding;\n      hasIdentity = hasIdentity || specify('identity', encoding);\n      minQuality = Math.min(minQuality, encoding.q || 1);\n    }\n  }\n\n  if (!hasIdentity) {\n    /*\n     * If identity doesn't explicitly appear in the accept-encoding header,\n     * it's added to the list of acceptable encoding with the lowest q\n     */\n    accepts[j++] = {\n      encoding: 'identity',\n      q: minQuality,\n      i: i\n    };\n  }\n\n  // trim accepts\n  accepts.length = j;\n\n  return accepts;\n}\n\n/**\n * Parse an encoding from the Accept-Encoding header.\n * @private\n */\n\nfunction parseEncoding(str, i) {\n  var match = simpleEncodingRegExp.exec(str);\n  if (!match) return null;\n\n  var encoding = match[1];\n  var q = 1;\n  if (match[2]) {\n    var params = match[2].split(';');\n    for (var j = 0; j < params.length; j++) {\n      var p = params[j].trim().split('=');\n      if (p[0] === 'q') {\n        q = parseFloat(p[1]);\n        break;\n      }\n    }\n  }\n\n  return {\n    encoding: encoding,\n    q: q,\n    i: i\n  };\n}\n\n/**\n * Get the priority of an encoding.\n * @private\n */\n\nfunction getEncodingPriority(encoding, accepted, index) {\n  var priority = {o: -1, q: 0, s: 0};\n\n  for (var i = 0; i < accepted.length; i++) {\n    var spec = specify(encoding, accepted[i], index);\n\n    if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) {\n      priority = spec;\n    }\n  }\n\n  return priority;\n}\n\n/**\n * Get the specificity of the encoding.\n * @private\n */\n\nfunction specify(encoding, spec, index) {\n  var s = 0;\n  if(spec.encoding.toLowerCase() === encoding.toLowerCase()){\n    s |= 1;\n  } else if (spec.encoding !== '*' ) {\n    return null\n  }\n\n  return {\n    i: index,\n    o: spec.i,\n    q: spec.q,\n    s: s\n  }\n};\n\n/**\n * Get the preferred encodings from an Accept-Encoding header.\n * @public\n */\n\nfunction preferredEncodings(accept, provided) {\n  var accepts = parseAcceptEncoding(accept || '');\n\n  if (!provided) {\n    // sorted list of all encodings\n    return accepts\n      .filter(isQuality)\n      .sort(compareSpecs)\n      .map(getFullEncoding);\n  }\n\n  var priorities = provided.map(function getPriority(type, index) {\n    return getEncodingPriority(type, accepts, index);\n  });\n\n  // sorted list of accepted encodings\n  return priorities.filter(isQuality).sort(compareSpecs).map(function getEncoding(priority) {\n    return provided[priorities.indexOf(priority)];\n  });\n}\n\n/**\n * Compare two specs.\n * @private\n */\n\nfunction compareSpecs(a, b) {\n  return (b.q - a.q) || (b.s - a.s) || (a.o - b.o) || (a.i - b.i) || 0;\n}\n\n/**\n * Get full encoding string.\n * @private\n */\n\nfunction getFullEncoding(spec) {\n  return spec.encoding;\n}\n\n/**\n * Check if a spec has any quality.\n * @private\n */\n\nfunction isQuality(spec) {\n  return spec.q > 0;\n}\n/HISTORY.md\t0.6.3 / 2022-01-22\n==================\n\n  * Revert \"Lazy-load modules from main entry point\"\n\n0.6.2 / 2019-04-29\n==================\n\n  * Fix sorting charset, encoding, and language with extra parameters\n\n0.6.1 / 2016-05-02\n==================\n\n  * perf: improve `Accept` parsing speed\n  * perf: improve `Accept-Charset` parsing speed\n  * perf: improve `Accept-Encoding` parsing speed\n  * perf: improve `Accept-Language` parsing speed\n\n0.6.0 / 2015-09-29\n==================\n\n  * Fix including type extensions in parameters in `Accept` parsing\n  * Fix parsing `Accept` parameters with quoted equals\n  * Fix parsing `Accept` parameters with quoted semicolons\n  * Lazy-load modules from main entry point\n  * perf: delay type concatenation until needed\n  * perf: enable strict mode\n  * perf: hoist regular expressions\n  * perf: remove closures getting spec properties\n  * perf: remove a closure from media type parsing\n  * perf: remove property delete from media type parsing\n\n0.5.3 / 2015-05-10\n==================\n\n  * Fix media type parameter matching to be case-insensitive\n\n0.5.2 / 2015-05-06\n==================\n\n  * Fix comparing media types with quoted values\n  * Fix splitting media types with quoted commas\n\n0.5.1 / 2015-02-14\n==================\n\n  * Fix preference sorting to be stable for long acceptable lists\n\n0.5.0 / 2014-12-18\n==================\n\n  * Fix list return order when large accepted list\n  * Fix missing identity encoding when q=0 exists\n  * Remove dynamic building of Negotiator class\n\n0.4.9 / 2014-10-14\n==================\n\n  * Fix error when media type has invalid parameter\n\n0.4.8 / 2014-09-28\n==================\n\n  * Fix all negotiations to be case-insensitive\n  * Stable sort preferences of same quality according to client order\n  * Support Node.js 0.6\n\n0.4.7 / 2014-06-24\n==================\n\n  * Handle invalid provided languages\n  * Handle invalid provided media types\n\n0.4.6 / 2014-06-11\n==================\n\n  *  Order by specificity when quality is the same\n\n0.4.5 / 2014-05-29\n==================\n\n  * Fix regression in empty header handling\n\n0.4.4 / 2014-05-29\n==================\n\n  * Fix behaviors when headers are not present\n\n0.4.3 / 2014-04-16\n==================\n\n  * Handle slashes on media params correctly\n\n0.4.2 / 2014-02-28\n==================\n\n  * Fix media type sorting\n  * Handle media types params strictly\n\n0.4.1 / 2014-01-16\n==================\n\n  * Use most specific matches\n\n0.4.0 / 2014-01-09\n==================\n\n  * Remove preferred prefix from methods\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/bnBtLXJ1bi1wYXRoQDUuMS4w",
    "content": "/index.js\u0003import process from 'node:process';\nimport path from 'node:path';\nimport url from 'node:url';\nimport pathKey from 'path-key';\n\nexport function npmRunPath(options = {}) {\n\tconst {\n\t\tcwd = process.cwd(),\n\t\tpath: path_ = process.env[pathKey()],\n\t\texecPath = process.execPath,\n\t} = options;\n\n\tlet previous;\n\tconst cwdString = cwd instanceof URL ? url.fileURLToPath(cwd) : cwd;\n\tlet cwdPath = path.resolve(cwdString);\n\tconst result = [];\n\n\twhile (previous !== cwdPath) {\n\t\tresult.push(path.join(cwdPath, 'node_modules/.bin'));\n\t\tprevious = cwdPath;\n\t\tcwdPath = path.resolve(cwdPath, '..');\n\t}\n\n\t// Ensure the running `node` binary is used.\n\tresult.push(path.resolve(cwdString, execPath, '..'));\n\n\treturn [...result, path_].join(path.delimiter);\n}\n\nexport function npmRunPathEnv({env = process.env, ...options} = {}) {\n\tenv = {...env};\n\n\tconst path = pathKey({env});\n\toptions.path = env[path];\n\tenv[path] = npmRunPath(options);\n\n\treturn env;\n}\n/readme.md\u000b\"# npm-run-path\n\n> Get your [PATH](https://en.wikipedia.org/wiki/PATH_(variable)) prepended with locally installed binaries\n\nIn [npm run scripts](https://docs.npmjs.com/cli/run-script) you can execute locally installed binaries by name. This enables the same outside npm.\n\n## Install\n\n```sh\nnpm install npm-run-path\n```\n\n## Usage\n\n```js\nimport childProcess from 'node:child_process';\nimport {npmRunPath, npmRunPathEnv} from 'npm-run-path';\n\nconsole.log(process.env.PATH);\n//=> '/usr/local/bin'\n\nconsole.log(npmRunPath());\n//=> '/Users/sindresorhus/dev/foo/node_modules/.bin:/Users/sindresorhus/dev/node_modules/.bin:/Users/sindresorhus/node_modules/.bin:/Users/node_modules/.bin:/node_modules/.bin:/usr/local/bin'\n\n// `foo` is a locally installed binary\nchildProcess.execFileSync('foo', {\n\tenv: npmRunPathEnv()\n});\n```\n\n## API\n\n### npmRunPath(options?)\n\nReturns the augmented PATH string.\n\n#### options\n\nType: `object`\n\n##### cwd\n\nType: `string | URL`\\\nDefault: `process.cwd()`\n\nThe working directory.\n\n##### path\n\nType: `string`\\\nDefault: [`PATH`](https://github.com/sindresorhus/path-key)\n\nThe PATH to be appended.\n\nSet it to an empty string to exclude the default PATH.\n\n##### execPath\n\nType: `string`\\\nDefault: `process.execPath`\n\nThe path to the current Node.js executable. Its directory is pushed to the front of PATH.\n\nThis can be either an absolute path or a path relative to the [`cwd` option](#cwd).\n\n### npmRunPathEnv(options?)\n\nReturns the augmented [`process.env`](https://nodejs.org/api/process.html#process_process_env) object.\n\n#### options\n\nType: `object`\n\n##### cwd\n\nType: `string | URL`\\\nDefault: `process.cwd()`\n\nThe working directory.\n\n##### env\n\nType: `object`\n\nAccepts an object of environment variables, like `process.env`, and modifies the PATH using the correct [PATH key](https://github.com/sindresorhus/path-key). Use this if you're modifying the PATH for use in the `child_process` options.\n\n##### execPath\n\nType: `string`\\\nDefault: `process.execPath`\n\nThe path to the Node.js executable to use in child processes if that is different from the current one. Its directory is pushed to the front of PATH.\n\nThis can be either an absolute path or a path relative to the [`cwd` option](#cwd).\n\n## Related\n\n- [npm-run-path-cli](https://github.com/sindresorhus/npm-run-path-cli) - CLI for this module\n- [execa](https://github.com/sindresorhus/execa) - Execute a locally installed binary\n\n---\n\n<div align=\"center\">\n\t<b>\n\t\t<a href=\"https://tidelift.com/subscription/pkg/npm-npm-run-path?utm_source=npm-npm-run-path&utm_medium=referral&utm_campaign=readme\">Get professional support for this package with a Tidelift subscription</a>\n\t</b>\n\t<br>\n\t<sub>\n\t\tTidelift helps make open source sustainable for maintainers while giving companies<br>assurances about security, maintenance, and licensing for their dependencies.\n\t</sub>\n</div>\n/index.d.ts\bexport interface RunPathOptions {\n\t/**\n\tWorking directory.\n\n\t@default process.cwd()\n\t*/\n\treadonly cwd?: string | URL;\n\n\t/**\n\tPATH to be appended. Default: [`PATH`](https://github.com/sindresorhus/path-key).\n\n\tSet it to an empty string to exclude the default PATH.\n\t*/\n\treadonly path?: string;\n\n\t/**\n\tPath to the Node.js executable to use in child processes if that is different from the current one. Its directory is pushed to the front of PATH.\n\n\tThis can be either an absolute path or a path relative to the `cwd` option.\n\n\t@default process.execPath\n\t*/\n\treadonly execPath?: string;\n}\n\nexport type ProcessEnv = Record<string, string | undefined>;\n\nexport interface EnvOptions {\n\t/**\n\tThe working directory.\n\n\t@default process.cwd()\n\t*/\n\treadonly cwd?: string | URL;\n\n\t/**\n\tAccepts an object of environment variables, like `process.env`, and modifies the PATH using the correct [PATH key](https://github.com/sindresorhus/path-key). Use this if you're modifying the PATH for use in the `child_process` options.\n\t*/\n\treadonly env?: ProcessEnv;\n\n\t/**\n\tThe path to the current Node.js executable. Its directory is pushed to the front of PATH.\n\n\tThis can be either an absolute path or a path relative to the `cwd` option.\n\n\t@default process.execPath\n\t*/\n\treadonly execPath?: string;\n}\n\n/**\nGet your [PATH](https://en.wikipedia.org/wiki/PATH_(variable)) prepended with locally installed binaries.\n\n@returns The augmented path string.\n\n@example\n```\nimport childProcess from 'node:child_process';\nimport {npmRunPath} from 'npm-run-path';\n\nconsole.log(process.env.PATH);\n//=> '/usr/local/bin'\n\nconsole.log(npmRunPath());\n//=> '/Users/sindresorhus/dev/foo/node_modules/.bin:/Users/sindresorhus/dev/node_modules/.bin:/Users/sindresorhus/node_modules/.bin:/Users/node_modules/.bin:/node_modules/.bin:/usr/local/bin'\n```\n*/\nexport function npmRunPath(options?: RunPathOptions): string;\n\n/**\n@returns The augmented [`process.env`](https://nodejs.org/api/process.html#process_process_env) object.\n\n@example\n```\nimport childProcess from 'node:child_process';\nimport {npmRunPathEnv} from 'npm-run-path';\n\n// `foo` is a locally installed binary\nchildProcess.execFileSync('foo', {\n\tenv: npmRunPathEnv()\n});\n```\n*/\nexport function npmRunPathEnv(options?: EnvOptions): ProcessEnv;\n/package.json\u0003T{\n\t\"name\": \"npm-run-path\",\n\t\"version\": \"5.1.0\",\n\t\"description\": \"Get your PATH prepended with locally installed binaries\",\n\t\"license\": \"MIT\",\n\t\"repository\": \"sindresorhus/npm-run-path\",\n\t\"funding\": \"https://github.com/sponsors/sindresorhus\",\n\t\"author\": {\n\t\t\"name\": \"Sindre Sorhus\",\n\t\t\"email\": \"sindresorhus@gmail.com\",\n\t\t\"url\": \"https://sindresorhus.com\"\n\t},\n\t\"type\": \"module\",\n\t\"exports\": \"./index.js\",\n\t\"engines\": {\n\t\t\"node\": \"^12.20.0 || ^14.13.1 || >=16.0.0\"\n\t},\n\t\"scripts\": {\n\t\t\"test\": \"xo && ava && tsd\"\n\t},\n\t\"files\": [\n\t\t\"index.js\",\n\t\t\"index.d.ts\"\n\t],\n\t\"keywords\": [\n\t\t\"npm\",\n\t\t\"run\",\n\t\t\"path\",\n\t\t\"package\",\n\t\t\"bin\",\n\t\t\"binary\",\n\t\t\"binaries\",\n\t\t\"script\",\n\t\t\"cli\",\n\t\t\"command-line\",\n\t\t\"execute\",\n\t\t\"executable\"\n\t],\n\t\"dependencies\": {\n\t\t\"path-key\": \"^4.0.0\"\n\t},\n\t\"devDependencies\": {\n\t\t\"ava\": \"^3.15.0\",\n\t\t\"tsd\": \"^0.17.0\",\n\t\t\"xo\": \"^0.45.0\"\n\t}\n}\n/license\u0004]MIT License\n\nCopyright (c) Sindre Sorhus <sindresorhus@gmail.com> (https://sindresorhus.com)\n\nPermission 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:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE 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.\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/c291cmNlbWFwLWNvZGVjQDEuNC44",
    "content": "/package.json\u0007\u0019{\n  \"name\": \"sourcemap-codec\",\n  \"version\": \"1.4.8\",\n  \"description\": \"Encode/decode sourcemap mappings\",\n  \"main\": \"dist/sourcemap-codec.umd.js\",\n  \"module\": \"dist/sourcemap-codec.es.js\",\n  \"types\": \"dist/types/sourcemap-codec.d.ts\",\n  \"scripts\": {\n    \"test\": \"mocha\",\n    \"build\": \"rm -rf dist && rollup -c && tsc\",\n    \"pretest\": \"npm run build\",\n    \"prepublish\": \"npm test\",\n    \"lint\": \"eslint src\",\n    \"pretest-coverage\": \"npm run build\",\n    \"test-coverage\": \"rm -rf coverage/* && istanbul cover --report json node_modules/.bin/_mocha -- -u exports -R spec test/test.js\",\n    \"posttest-coverage\": \"remap-istanbul -i coverage/coverage-final.json -o coverage/coverage-remapped.json -b dist && remap-istanbul -i coverage/coverage-final.json -o coverage/coverage-remapped.lcov -t lcovonly -b dist && remap-istanbul -i coverage/coverage-final.json -o coverage/coverage-remapped -t html -b dist\",\n    \"ci\": \"npm run test-coverage && codecov < coverage/coverage-remapped.lcov\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/Rich-Harris/sourcemap-codec\"\n  },\n  \"keywords\": [\n    \"sourcemap\",\n    \"vlq\"\n  ],\n  \"author\": \"Rich Harris\",\n  \"license\": \"MIT\",\n  \"bugs\": {\n    \"url\": \"https://github.com/Rich-Harris/sourcemap-codec/issues\"\n  },\n  \"homepage\": \"https://github.com/Rich-Harris/sourcemap-codec\",\n  \"dependencies\": {},\n  \"devDependencies\": {\n    \"codecov.io\": \"^0.1.6\",\n    \"console-group\": \"^0.3.3\",\n    \"eslint\": \"^6.0.1\",\n    \"eslint-plugin-import\": \"^2.18.0\",\n    \"istanbul\": \"^0.4.5\",\n    \"mocha\": \"^6.1.4\",\n    \"remap-istanbul\": \"^0.13.0\",\n    \"rollup\": \"^1.16.4\",\n    \"rollup-plugin-node-resolve\": \"^5.2.0\",\n    \"rollup-plugin-typescript\": \"^1.0.1\",\n    \"typescript\": \"^3.5.2\"\n  },\n  \"files\": [\n    \"dist/*.js\",\n    \"dist/*.js.map\",\n    \"dist/**/*.d.ts\",\n    \"README.md\"\n  ]\n}\n /dist/sourcemap-codec.umd.js.map ^{\"version\":3,\"file\":\"sourcemap-codec.umd.js\",\"sources\":[\"../src/sourcemap-codec.ts\"],\"sourcesContent\":[\"export type SourceMapSegment =\\n\\t| [number]\\n\\t| [number, number, number, number]\\n\\t| [number, number, number, number, number];\\nexport type SourceMapLine = SourceMapSegment[];\\nexport type SourceMapMappings = SourceMapLine[];\\n\\nconst charToInteger: { [charCode: number]: number } = {};\\nconst chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\\n\\nfor (let i = 0; i < chars.length; i++) {\\n\\tcharToInteger[chars.charCodeAt(i)] = i;\\n}\\n\\nexport function decode(mappings: string): SourceMapMappings {\\n\\tconst decoded: SourceMapMappings = [];\\n\\tlet line: SourceMapLine = [];\\n\\tconst segment: SourceMapSegment = [\\n\\t\\t0, // generated code column\\n\\t\\t0, // source file index\\n\\t\\t0, // source code line\\n\\t\\t0, // source code column\\n\\t\\t0, // name index\\n\\t];\\n\\n\\tlet j = 0;\\n\\tfor (let i = 0, shift = 0, value = 0; i < mappings.length; i++) {\\n\\t\\tconst c = mappings.charCodeAt(i);\\n\\n\\t\\tif (c === 44) { // \\\",\\\"\\n\\t\\t\\tsegmentify(line, segment, j);\\n\\t\\t\\tj = 0;\\n\\n\\t\\t} else if (c === 59) { // \\\";\\\"\\n\\t\\t\\tsegmentify(line, segment, j);\\n\\t\\t\\tj = 0;\\n\\t\\t\\tdecoded.push(line);\\n\\t\\t\\tline = [];\\n\\t\\t\\tsegment[0] = 0;\\n\\n\\t\\t} else {\\n\\t\\t\\tlet integer = charToInteger[c];\\n\\t\\t\\tif (integer === undefined) {\\n\\t\\t\\t\\tthrow new Error('Invalid character (' + String.fromCharCode(c) + ')');\\n\\t\\t\\t}\\n\\n\\t\\t\\tconst hasContinuationBit = integer & 32;\\n\\n\\t\\t\\tinteger &= 31;\\n\\t\\t\\tvalue += integer << shift;\\n\\n\\t\\t\\tif (hasContinuationBit) {\\n\\t\\t\\t\\tshift += 5;\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tconst shouldNegate = value & 1;\\n\\t\\t\\t\\tvalue >>>= 1;\\n\\n\\t\\t\\t\\tif (shouldNegate) {\\n\\t\\t\\t\\t\\tvalue = value === 0 ? -0x80000000 : -value;\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\tsegment[j] += value;\\n\\t\\t\\t\\tj++;\\n\\t\\t\\t\\tvalue = shift = 0; // reset\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\n\\tsegmentify(line, segment, j);\\n\\tdecoded.push(line);\\n\\n\\treturn decoded;\\n}\\n\\nfunction segmentify(line: SourceMapSegment[], segment: SourceMapSegment, j: number) {\\n\\t// This looks ugly, but we're creating specialized arrays with a specific\\n\\t// length. This is much faster than creating a new array (which v8 expands to\\n\\t// a capacity of 17 after pushing the first item), or slicing out a subarray\\n\\t// (which is slow). Length 4 is assumed to be the most frequent, followed by\\n\\t// length 5 (since not everything will have an associated name), followed by\\n\\t// length 1 (it's probably rare for a source substring to not have an\\n\\t// associated segment data).\\n\\tif (j === 4) line.push([segment[0], segment[1], segment[2], segment[3]]);\\n\\telse if (j === 5) line.push([segment[0], segment[1], segment[2], segment[3], segment[4]]);\\n\\telse if (j === 1) line.push([segment[0]]);\\n}\\n\\nexport function encode(decoded: SourceMapMappings): string {\\n\\tlet sourceFileIndex = 0;  // second field\\n\\tlet sourceCodeLine = 0;   // third field\\n\\tlet sourceCodeColumn = 0; // fourth field\\n\\tlet nameIndex = 0;        // fifth field\\n\\tlet mappings = '';\\n\\n\\tfor (let i = 0; i < decoded.length; i++) {\\n\\t\\tconst line = decoded[i];\\n\\t\\tif (i > 0) mappings += ';';\\n\\t\\tif (line.length === 0) continue;\\n\\n\\t\\tlet generatedCodeColumn = 0; // first field\\n\\n\\t\\tconst lineMappings: string[] = [];\\n\\n\\t\\tfor (const segment of line) {\\n\\t\\t\\tlet segmentMappings = encodeInteger(segment[0] - generatedCodeColumn);\\n\\t\\t\\tgeneratedCodeColumn = segment[0];\\n\\n\\t\\t\\tif (segment.length > 1) {\\n\\t\\t\\t\\tsegmentMappings +=\\n\\t\\t\\t\\t\\tencodeInteger(segment[1] - sourceFileIndex) +\\n\\t\\t\\t\\t\\tencodeInteger(segment[2] - sourceCodeLine) +\\n\\t\\t\\t\\t\\tencodeInteger(segment[3] - sourceCodeColumn);\\n\\n\\t\\t\\t\\tsourceFileIndex = segment[1];\\n\\t\\t\\t\\tsourceCodeLine = segment[2];\\n\\t\\t\\t\\tsourceCodeColumn = segment[3];\\n\\t\\t\\t}\\n\\n\\t\\t\\tif (segment.length === 5) {\\n\\t\\t\\t\\tsegmentMappings += encodeInteger(segment[4] - nameIndex);\\n\\t\\t\\t\\tnameIndex = segment[4];\\n\\t\\t\\t}\\n\\n\\t\\t\\tlineMappings.push(segmentMappings);\\n\\t\\t}\\n\\n\\t\\tmappings += lineMappings.join(',');\\n\\t}\\n\\n\\treturn mappings;\\n}\\n\\nfunction encodeInteger(num: number): string {\\n\\tvar result = '';\\n\\tnum = num < 0 ? (-num << 1) | 1 : num << 1;\\n\\tdo {\\n\\t\\tvar clamped = num & 31;\\n\\t\\tnum >>>= 5;\\n\\t\\tif (num > 0) {\\n\\t\\t\\tclamped |= 32;\\n\\t\\t}\\n\\t\\tresult += chars[clamped];\\n\\t} while (num > 0);\\n\\n\\treturn result;\\n}\\n\"],\"names\":[],\"mappings\":\"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\"}/README.md\u0007+# sourcemap-codec\n\nEncode/decode the `mappings` property of a [sourcemap](https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit).\n\n\n## Why?\n\nSourcemaps are difficult to generate and manipulate, because the `mappings` property – the part that actually links the generated code back to the original source – is encoded using an obscure method called [Variable-length quantity](https://en.wikipedia.org/wiki/Variable-length_quantity). On top of that, each segment in the mapping contains offsets rather than absolute indices, which means that you can't look at a segment in isolation – you have to understand the whole sourcemap.\n\nThis package makes the process slightly easier.\n\n\n## Installation\n\n```bash\nnpm install sourcemap-codec\n```\n\n\n## Usage\n\n```js\nimport { encode, decode } from 'sourcemap-codec';\n\nvar decoded = decode( ';EAEEA,EAAE,EAAC,CAAE;ECQY,UACC' );\n\nassert.deepEqual( decoded, [\n\t// the first line (of the generated code) has no mappings,\n\t// as shown by the starting semi-colon (which separates lines)\n\t[],\n\n\t// the second line contains four (comma-separated) segments\n\t[\n\t\t// segments are encoded as you'd expect:\n\t\t// [ generatedCodeColumn, sourceIndex, sourceCodeLine, sourceCodeColumn, nameIndex ]\n\n\t\t// i.e. the first segment begins at column 2, and maps back to the second column\n\t\t// of the second line (both zero-based) of the 0th source, and uses the 0th\n\t\t// name in the `map.names` array\n\t\t[ 2, 0, 2, 2, 0 ],\n\n\t\t// the remaining segments are 4-length rather than 5-length,\n\t\t// because they don't map a name\n\t\t[ 4, 0, 2, 4 ],\n\t\t[ 6, 0, 2, 5 ],\n\t\t[ 7, 0, 2, 7 ]\n\t],\n\n\t// the final line contains two segments\n\t[\n\t\t[ 2, 1, 10, 19 ],\n\t\t[ 12, 1, 11, 20 ]\n\t]\n]);\n\nvar encoded = encode( decoded );\nassert.equal( encoded, ';EAEEA,EAAE,EAAC,CAAE;ECQY,UACC' );\n```\n\n\n# License\n\nMIT\n/dist/sourcemap-codec.es.js\u0010hvar charToInteger = {};\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\nfor (var i = 0; i < chars.length; i++) {\n    charToInteger[chars.charCodeAt(i)] = i;\n}\nfunction decode(mappings) {\n    var decoded = [];\n    var line = [];\n    var segment = [\n        0,\n        0,\n        0,\n        0,\n        0,\n    ];\n    var j = 0;\n    for (var i = 0, shift = 0, value = 0; i < mappings.length; i++) {\n        var c = mappings.charCodeAt(i);\n        if (c === 44) { // \",\"\n            segmentify(line, segment, j);\n            j = 0;\n        }\n        else if (c === 59) { // \";\"\n            segmentify(line, segment, j);\n            j = 0;\n            decoded.push(line);\n            line = [];\n            segment[0] = 0;\n        }\n        else {\n            var integer = charToInteger[c];\n            if (integer === undefined) {\n                throw new Error('Invalid character (' + String.fromCharCode(c) + ')');\n            }\n            var hasContinuationBit = integer & 32;\n            integer &= 31;\n            value += integer << shift;\n            if (hasContinuationBit) {\n                shift += 5;\n            }\n            else {\n                var shouldNegate = value & 1;\n                value >>>= 1;\n                if (shouldNegate) {\n                    value = value === 0 ? -0x80000000 : -value;\n                }\n                segment[j] += value;\n                j++;\n                value = shift = 0; // reset\n            }\n        }\n    }\n    segmentify(line, segment, j);\n    decoded.push(line);\n    return decoded;\n}\nfunction segmentify(line, segment, j) {\n    // This looks ugly, but we're creating specialized arrays with a specific\n    // length. This is much faster than creating a new array (which v8 expands to\n    // a capacity of 17 after pushing the first item), or slicing out a subarray\n    // (which is slow). Length 4 is assumed to be the most frequent, followed by\n    // length 5 (since not everything will have an associated name), followed by\n    // length 1 (it's probably rare for a source substring to not have an\n    // associated segment data).\n    if (j === 4)\n        line.push([segment[0], segment[1], segment[2], segment[3]]);\n    else if (j === 5)\n        line.push([segment[0], segment[1], segment[2], segment[3], segment[4]]);\n    else if (j === 1)\n        line.push([segment[0]]);\n}\nfunction encode(decoded) {\n    var sourceFileIndex = 0; // second field\n    var sourceCodeLine = 0; // third field\n    var sourceCodeColumn = 0; // fourth field\n    var nameIndex = 0; // fifth field\n    var mappings = '';\n    for (var i = 0; i < decoded.length; i++) {\n        var line = decoded[i];\n        if (i > 0)\n            mappings += ';';\n        if (line.length === 0)\n            continue;\n        var generatedCodeColumn = 0; // first field\n        var lineMappings = [];\n        for (var _i = 0, line_1 = line; _i < line_1.length; _i++) {\n            var segment = line_1[_i];\n            var segmentMappings = encodeInteger(segment[0] - generatedCodeColumn);\n            generatedCodeColumn = segment[0];\n            if (segment.length > 1) {\n                segmentMappings +=\n                    encodeInteger(segment[1] - sourceFileIndex) +\n                        encodeInteger(segment[2] - sourceCodeLine) +\n                        encodeInteger(segment[3] - sourceCodeColumn);\n                sourceFileIndex = segment[1];\n                sourceCodeLine = segment[2];\n                sourceCodeColumn = segment[3];\n            }\n            if (segment.length === 5) {\n                segmentMappings += encodeInteger(segment[4] - nameIndex);\n                nameIndex = segment[4];\n            }\n            lineMappings.push(segmentMappings);\n        }\n        mappings += lineMappings.join(',');\n    }\n    return mappings;\n}\nfunction encodeInteger(num) {\n    var result = '';\n    num = num < 0 ? (-num << 1) | 1 : num << 1;\n    do {\n        var clamped = num & 31;\n        num >>>= 5;\n        if (num > 0) {\n            clamped |= 32;\n        }\n        result += chars[clamped];\n    } while (num > 0);\n    return result;\n}\n\nexport { decode, encode };\n//# sourceMappingURL=sourcemap-codec.es.js.map\n /dist/types/sourcemap-codec.d.ts\u0001yexport declare type SourceMapSegment = [number] | [number, number, number, number] | [number, number, number, number, number];\nexport declare type SourceMapLine = SourceMapSegment[];\nexport declare type SourceMapMappings = SourceMapLine[];\nexport declare function decode(mappings: string): SourceMapMappings;\nexport declare function encode(decoded: SourceMapMappings): string;\n/dist/sourcemap-codec.umd.js\u0012m(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n\ttypeof define === 'function' && define.amd ? define(['exports'], factory) :\n\t(global = global || self, factory(global.sourcemapCodec = {}));\n}(this, function (exports) { 'use strict';\n\n\tvar charToInteger = {};\n\tvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n\tfor (var i = 0; i < chars.length; i++) {\n\t    charToInteger[chars.charCodeAt(i)] = i;\n\t}\n\tfunction decode(mappings) {\n\t    var decoded = [];\n\t    var line = [];\n\t    var segment = [\n\t        0,\n\t        0,\n\t        0,\n\t        0,\n\t        0,\n\t    ];\n\t    var j = 0;\n\t    for (var i = 0, shift = 0, value = 0; i < mappings.length; i++) {\n\t        var c = mappings.charCodeAt(i);\n\t        if (c === 44) { // \",\"\n\t            segmentify(line, segment, j);\n\t            j = 0;\n\t        }\n\t        else if (c === 59) { // \";\"\n\t            segmentify(line, segment, j);\n\t            j = 0;\n\t            decoded.push(line);\n\t            line = [];\n\t            segment[0] = 0;\n\t        }\n\t        else {\n\t            var integer = charToInteger[c];\n\t            if (integer === undefined) {\n\t                throw new Error('Invalid character (' + String.fromCharCode(c) + ')');\n\t            }\n\t            var hasContinuationBit = integer & 32;\n\t            integer &= 31;\n\t            value += integer << shift;\n\t            if (hasContinuationBit) {\n\t                shift += 5;\n\t            }\n\t            else {\n\t                var shouldNegate = value & 1;\n\t                value >>>= 1;\n\t                if (shouldNegate) {\n\t                    value = value === 0 ? -0x80000000 : -value;\n\t                }\n\t                segment[j] += value;\n\t                j++;\n\t                value = shift = 0; // reset\n\t            }\n\t        }\n\t    }\n\t    segmentify(line, segment, j);\n\t    decoded.push(line);\n\t    return decoded;\n\t}\n\tfunction segmentify(line, segment, j) {\n\t    // This looks ugly, but we're creating specialized arrays with a specific\n\t    // length. This is much faster than creating a new array (which v8 expands to\n\t    // a capacity of 17 after pushing the first item), or slicing out a subarray\n\t    // (which is slow). Length 4 is assumed to be the most frequent, followed by\n\t    // length 5 (since not everything will have an associated name), followed by\n\t    // length 1 (it's probably rare for a source substring to not have an\n\t    // associated segment data).\n\t    if (j === 4)\n\t        line.push([segment[0], segment[1], segment[2], segment[3]]);\n\t    else if (j === 5)\n\t        line.push([segment[0], segment[1], segment[2], segment[3], segment[4]]);\n\t    else if (j === 1)\n\t        line.push([segment[0]]);\n\t}\n\tfunction encode(decoded) {\n\t    var sourceFileIndex = 0; // second field\n\t    var sourceCodeLine = 0; // third field\n\t    var sourceCodeColumn = 0; // fourth field\n\t    var nameIndex = 0; // fifth field\n\t    var mappings = '';\n\t    for (var i = 0; i < decoded.length; i++) {\n\t        var line = decoded[i];\n\t        if (i > 0)\n\t            mappings += ';';\n\t        if (line.length === 0)\n\t            continue;\n\t        var generatedCodeColumn = 0; // first field\n\t        var lineMappings = [];\n\t        for (var _i = 0, line_1 = line; _i < line_1.length; _i++) {\n\t            var segment = line_1[_i];\n\t            var segmentMappings = encodeInteger(segment[0] - generatedCodeColumn);\n\t            generatedCodeColumn = segment[0];\n\t            if (segment.length > 1) {\n\t                segmentMappings +=\n\t                    encodeInteger(segment[1] - sourceFileIndex) +\n\t                        encodeInteger(segment[2] - sourceCodeLine) +\n\t                        encodeInteger(segment[3] - sourceCodeColumn);\n\t                sourceFileIndex = segment[1];\n\t                sourceCodeLine = segment[2];\n\t                sourceCodeColumn = segment[3];\n\t            }\n\t            if (segment.length === 5) {\n\t                segmentMappings += encodeInteger(segment[4] - nameIndex);\n\t                nameIndex = segment[4];\n\t            }\n\t            lineMappings.push(segmentMappings);\n\t        }\n\t        mappings += lineMappings.join(',');\n\t    }\n\t    return mappings;\n\t}\n\tfunction encodeInteger(num) {\n\t    var result = '';\n\t    num = num < 0 ? (-num << 1) | 1 : num << 1;\n\t    do {\n\t        var clamped = num & 31;\n\t        num >>>= 5;\n\t        if (num > 0) {\n\t            clamped |= 32;\n\t        }\n\t        result += chars[clamped];\n\t    } while (num > 0);\n\t    return result;\n\t}\n\n\texports.decode = decode;\n\texports.encode = encode;\n\n\tObject.defineProperty(exports, '__esModule', { value: true });\n\n}));\n//# sourceMappingURL=sourcemap-codec.umd.js.map\n/dist/sourcemap-codec.es.js.map 9{\"version\":3,\"file\":\"sourcemap-codec.es.js\",\"sources\":[\"../src/sourcemap-codec.ts\"],\"sourcesContent\":[\"export type SourceMapSegment =\\n\\t| [number]\\n\\t| [number, number, number, number]\\n\\t| [number, number, number, number, number];\\nexport type SourceMapLine = SourceMapSegment[];\\nexport type SourceMapMappings = SourceMapLine[];\\n\\nconst charToInteger: { [charCode: number]: number } = {};\\nconst chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\\n\\nfor (let i = 0; i < chars.length; i++) {\\n\\tcharToInteger[chars.charCodeAt(i)] = i;\\n}\\n\\nexport function decode(mappings: string): SourceMapMappings {\\n\\tconst decoded: SourceMapMappings = [];\\n\\tlet line: SourceMapLine = [];\\n\\tconst segment: SourceMapSegment = [\\n\\t\\t0, // generated code column\\n\\t\\t0, // source file index\\n\\t\\t0, // source code line\\n\\t\\t0, // source code column\\n\\t\\t0, // name index\\n\\t];\\n\\n\\tlet j = 0;\\n\\tfor (let i = 0, shift = 0, value = 0; i < mappings.length; i++) {\\n\\t\\tconst c = mappings.charCodeAt(i);\\n\\n\\t\\tif (c === 44) { // \\\",\\\"\\n\\t\\t\\tsegmentify(line, segment, j);\\n\\t\\t\\tj = 0;\\n\\n\\t\\t} else if (c === 59) { // \\\";\\\"\\n\\t\\t\\tsegmentify(line, segment, j);\\n\\t\\t\\tj = 0;\\n\\t\\t\\tdecoded.push(line);\\n\\t\\t\\tline = [];\\n\\t\\t\\tsegment[0] = 0;\\n\\n\\t\\t} else {\\n\\t\\t\\tlet integer = charToInteger[c];\\n\\t\\t\\tif (integer === undefined) {\\n\\t\\t\\t\\tthrow new Error('Invalid character (' + String.fromCharCode(c) + ')');\\n\\t\\t\\t}\\n\\n\\t\\t\\tconst hasContinuationBit = integer & 32;\\n\\n\\t\\t\\tinteger &= 31;\\n\\t\\t\\tvalue += integer << shift;\\n\\n\\t\\t\\tif (hasContinuationBit) {\\n\\t\\t\\t\\tshift += 5;\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tconst shouldNegate = value & 1;\\n\\t\\t\\t\\tvalue >>>= 1;\\n\\n\\t\\t\\t\\tif (shouldNegate) {\\n\\t\\t\\t\\t\\tvalue = value === 0 ? -0x80000000 : -value;\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\tsegment[j] += value;\\n\\t\\t\\t\\tj++;\\n\\t\\t\\t\\tvalue = shift = 0; // reset\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\n\\tsegmentify(line, segment, j);\\n\\tdecoded.push(line);\\n\\n\\treturn decoded;\\n}\\n\\nfunction segmentify(line: SourceMapSegment[], segment: SourceMapSegment, j: number) {\\n\\t// This looks ugly, but we're creating specialized arrays with a specific\\n\\t// length. This is much faster than creating a new array (which v8 expands to\\n\\t// a capacity of 17 after pushing the first item), or slicing out a subarray\\n\\t// (which is slow). Length 4 is assumed to be the most frequent, followed by\\n\\t// length 5 (since not everything will have an associated name), followed by\\n\\t// length 1 (it's probably rare for a source substring to not have an\\n\\t// associated segment data).\\n\\tif (j === 4) line.push([segment[0], segment[1], segment[2], segment[3]]);\\n\\telse if (j === 5) line.push([segment[0], segment[1], segment[2], segment[3], segment[4]]);\\n\\telse if (j === 1) line.push([segment[0]]);\\n}\\n\\nexport function encode(decoded: SourceMapMappings): string {\\n\\tlet sourceFileIndex = 0;  // second field\\n\\tlet sourceCodeLine = 0;   // third field\\n\\tlet sourceCodeColumn = 0; // fourth field\\n\\tlet nameIndex = 0;        // fifth field\\n\\tlet mappings = '';\\n\\n\\tfor (let i = 0; i < decoded.length; i++) {\\n\\t\\tconst line = decoded[i];\\n\\t\\tif (i > 0) mappings += ';';\\n\\t\\tif (line.length === 0) continue;\\n\\n\\t\\tlet generatedCodeColumn = 0; // first field\\n\\n\\t\\tconst lineMappings: string[] = [];\\n\\n\\t\\tfor (const segment of line) {\\n\\t\\t\\tlet segmentMappings = encodeInteger(segment[0] - generatedCodeColumn);\\n\\t\\t\\tgeneratedCodeColumn = segment[0];\\n\\n\\t\\t\\tif (segment.length > 1) {\\n\\t\\t\\t\\tsegmentMappings +=\\n\\t\\t\\t\\t\\tencodeInteger(segment[1] - sourceFileIndex) +\\n\\t\\t\\t\\t\\tencodeInteger(segment[2] - sourceCodeLine) +\\n\\t\\t\\t\\t\\tencodeInteger(segment[3] - sourceCodeColumn);\\n\\n\\t\\t\\t\\tsourceFileIndex = segment[1];\\n\\t\\t\\t\\tsourceCodeLine = segment[2];\\n\\t\\t\\t\\tsourceCodeColumn = segment[3];\\n\\t\\t\\t}\\n\\n\\t\\t\\tif (segment.length === 5) {\\n\\t\\t\\t\\tsegmentMappings += encodeInteger(segment[4] - nameIndex);\\n\\t\\t\\t\\tnameIndex = segment[4];\\n\\t\\t\\t}\\n\\n\\t\\t\\tlineMappings.push(segmentMappings);\\n\\t\\t}\\n\\n\\t\\tmappings += lineMappings.join(',');\\n\\t}\\n\\n\\treturn mappings;\\n}\\n\\nfunction encodeInteger(num: number): string {\\n\\tvar result = '';\\n\\tnum = num < 0 ? (-num << 1) | 1 : num << 1;\\n\\tdo {\\n\\t\\tvar clamped = num & 31;\\n\\t\\tnum >>>= 5;\\n\\t\\tif (num > 0) {\\n\\t\\t\\tclamped |= 32;\\n\\t\\t}\\n\\t\\tresult += chars[clamped];\\n\\t} while (num > 0);\\n\\n\\treturn result;\\n}\\n\"],\"names\":[],\"mappings\":\"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\"}/CHANGELOG.md\u0004# sourcemap-codec changelog\n\n## 1.4.8\n\n* Performance boost ([#80](https://github.com/Rich-Harris/sourcemap-codec/pull/80))\n\n## 1.4.7\n\n* Include .map files in package ([#73](https://github.com/Rich-Harris/sourcemap-codec/issues/73))\n\n## 1.4.6\n\n* Use arrays instead of typed arrays ([#79](https://github.com/Rich-Harris/sourcemap-codec/pull/79))\n\n## 1.4.5\n\n* Handle overflow cases ([#78](https://github.com/Rich-Harris/sourcemap-codec/pull/78))\n\n## 1.4.4\n\n* Use Uint32Array, yikes ([#77](https://github.com/Rich-Harris/sourcemap-codec/pull/77))\n\n## 1.4.3\n\n* Use Uint16Array to prevent overflow ([#75](https://github.com/Rich-Harris/sourcemap-codec/pull/75))\n\n## 1.4.2\n\n* GO EVEN FASTER ([#74](https://github.com/Rich-Harris/sourcemap-codec/pull/74))\n\n## 1.4.1\n\n* GO FASTER ([#71](https://github.com/Rich-Harris/sourcemap-codec/pull/71))\n\n## 1.4.0\n\n* Add TypeScript declarations ([#70](https://github.com/Rich-Harris/sourcemap-codec/pull/70))\n\n## 1.3.1\n\n* Update build process, expose `pkg.module`\n\n## 1.3.0\n\n* Update build process\n\n## 1.2.1\n\n* Add dist files to npm package\n\n## 1.2.0\n\n* Add ES6 build\n* Update dependencies\n* Add test coverage\n\n## 1.1.0\n\n* Fix bug with lines containing single-character segments\n* Add tests\n\n## 1.0.0\n\n* First release\n/LICENSE\u00040The MIT License\n\nCopyright (c) 2015 Rich Harris\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/c29uaWMtYm9vbUAzLjIuMQ==",
    "content": "/test.jsř\u001e'use strict'\n\nconst { test, teardown } = require('tap')\nconst { join } = require('path')\nconst { fork } = require('child_process')\nconst fs = require('fs')\nconst os = require('os')\nconst path = require('path')\nconst proxyquire = require('proxyquire')\nconst SonicBoom = require('.')\n\nconst isWindows = process.platform === 'win32'\n\nconst MAX_WRITE = 16 * 1024\nconst files = []\nlet count = 0\n\nfunction file () {\n  const file = path.join(os.tmpdir(), `sonic-boom-${process.pid}-${process.hrtime().toString()}-${count++}`)\n  files.push(file)\n  return file\n}\n\nteardown(() => {\n  const rmSync = fs.rmSync || fs.rmdirSync\n  files.forEach((file) => {\n    try {\n      if (fs.existsSync(file)) {\n        fs.statSync(file).isDirectory() ? rmSync(file, { recursive: true, maxRetries: 10 }) : fs.unlinkSync(file)\n      }\n    } catch (e) {\n      console.log(e)\n    }\n  })\n})\n\ntest('sync false', (t) => {\n  buildTests(t.test, false)\n  t.end()\n})\n\ntest('sync true', (t) => {\n  buildTests(t.test, true)\n  t.end()\n})\n\nfunction buildTests (test, sync) {\n  // Reset the umask for testing\n  process.umask(0o000)\n\n  test('write things to a file descriptor', (t) => {\n    t.plan(6)\n\n    const dest = file()\n    const fd = fs.openSync(dest, 'w')\n    const stream = new SonicBoom({ fd, sync })\n\n    stream.on('ready', () => {\n      t.pass('ready emitted')\n    })\n\n    t.ok(stream.write('hello world\\n'))\n    t.ok(stream.write('something else\\n'))\n\n    stream.end()\n\n    stream.on('finish', () => {\n      fs.readFile(dest, 'utf8', (err, data) => {\n        t.error(err)\n        t.equal(data, 'hello world\\nsomething else\\n')\n      })\n    })\n    stream.on('close', () => {\n      t.pass('close emitted')\n    })\n  })\n\n  test('write things in a streaming fashion', (t) => {\n    t.plan(8)\n\n    const dest = file()\n    const fd = fs.openSync(dest, 'w')\n    const stream = new SonicBoom({ fd, sync })\n\n    stream.once('drain', () => {\n      fs.readFile(dest, 'utf8', (err, data) => {\n        t.error(err)\n        t.equal(data, 'hello world\\n')\n        t.ok(stream.write('something else\\n'))\n      })\n\n      stream.once('drain', () => {\n        fs.readFile(dest, 'utf8', (err, data) => {\n          t.error(err)\n          t.equal(data, 'hello world\\nsomething else\\n')\n          stream.end()\n        })\n      })\n    })\n\n    t.ok(stream.write('hello world\\n'))\n\n    stream.on('finish', () => {\n      t.pass('finish emitted')\n    })\n    stream.on('close', () => {\n      t.pass('close emitted')\n    })\n  })\n\n  test('can be piped into', (t) => {\n    t.plan(4)\n\n    const dest = file()\n    const fd = fs.openSync(dest, 'w')\n    const stream = new SonicBoom({ fd, sync })\n    const source = fs.createReadStream(__filename)\n\n    source.pipe(stream)\n\n    stream.on('finish', () => {\n      fs.readFile(__filename, 'utf8', (err, expected) => {\n        t.error(err)\n        fs.readFile(dest, 'utf8', (err, data) => {\n          t.error(err)\n          t.equal(data, expected)\n        })\n      })\n    })\n    stream.on('close', () => {\n      t.pass('close emitted')\n    })\n  })\n\n  test('write things to a file', (t) => {\n    t.plan(6)\n\n    const dest = file()\n    const stream = new SonicBoom({ dest, sync })\n\n    stream.on('ready', () => {\n      t.pass('ready emitted')\n    })\n\n    t.ok(stream.write('hello world\\n'))\n    t.ok(stream.write('something else\\n'))\n\n    stream.end()\n\n    stream.on('finish', () => {\n      fs.readFile(dest, 'utf8', (err, data) => {\n        t.error(err)\n        t.equal(data, 'hello world\\nsomething else\\n')\n      })\n    })\n    stream.on('close', () => {\n      t.pass('close emitted')\n    })\n  })\n\n  test('flushSync', (t) => {\n    t.plan(4)\n\n    const dest = file()\n    const fd = fs.openSync(dest, 'w')\n    const stream = new SonicBoom({ fd, minLength: 4096, sync })\n\n    t.ok(stream.write('hello world\\n'))\n    t.ok(stream.write('something else\\n'))\n\n    stream.flushSync()\n\n    // let the file system settle down things\n    setImmediate(function () {\n      stream.end()\n      const data = fs.readFileSync(dest, 'utf8')\n      t.equal(data, 'hello world\\nsomething else\\n')\n\n      stream.on('close', () => {\n        t.pass('close emitted')\n      })\n    })\n  })\n\n  test('destroy', (t) => {\n    t.plan(5)\n\n    const dest = file()\n    const fd = fs.openSync(dest, 'w')\n    const stream = new SonicBoom({ fd, sync })\n\n    t.ok(stream.write('hello world\\n'))\n    stream.destroy()\n    t.throws(() => { stream.write('hello world\\n') })\n\n    fs.readFile(dest, 'utf8', function (err, data) {\n      t.error(err)\n      t.equal(data, 'hello world\\n')\n    })\n\n    stream.on('finish', () => {\n      t.fail('finish emitted')\n    })\n\n    stream.on('close', () => {\n      t.pass('close emitted')\n    })\n  })\n\n  test('destroy while opening', (t) => {\n    t.plan(1)\n\n    const dest = file()\n    const stream = new SonicBoom({ dest })\n\n    stream.destroy()\n    stream.on('close', () => {\n      t.pass('close emitted')\n    })\n  })\n\n  test('minLength', (t) => {\n    t.plan(8)\n\n    const dest = file()\n    const stream = new SonicBoom({ dest, minLength: 4096, sync })\n\n    stream.on('ready', () => {\n      t.pass('ready emitted')\n    })\n\n    t.ok(stream.write('hello world\\n'))\n    t.ok(stream.write('something else\\n'))\n\n    const fail = t.fail\n    stream.on('drain', fail)\n\n    // bad use of timer\n    // TODO refactor\n    setTimeout(function () {\n      fs.readFile(dest, 'utf8', (err, data) => {\n        t.error(err)\n        t.equal(data, '')\n\n        stream.end()\n\n        stream.on('finish', () => {\n          fs.readFile(dest, 'utf8', (err, data) => {\n            t.error(err)\n            t.equal(data, 'hello world\\nsomething else\\n')\n          })\n        })\n      })\n    }, 100)\n\n    stream.on('close', () => {\n      t.pass('close emitted')\n    })\n  })\n\n  test('append', (t) => {\n    t.plan(4)\n\n    const dest = file()\n    fs.writeFileSync(dest, 'hello world\\n')\n    const stream = new SonicBoom({ dest, append: false, sync })\n\n    stream.on('ready', () => {\n      t.pass('ready emitted')\n    })\n\n    t.ok(stream.write('something else\\n'))\n\n    stream.flush()\n\n    stream.on('drain', () => {\n      fs.readFile(dest, 'utf8', (err, data) => {\n        t.error(err)\n        t.equal(data, 'something else\\n')\n        stream.end()\n      })\n    })\n  })\n\n  test('mkdir', (t) => {\n    t.plan(4)\n\n    const dest = path.join(file(), 'out.log')\n    const stream = new SonicBoom({ dest, mkdir: true, sync })\n\n    stream.on('ready', () => {\n      t.pass('ready emitted')\n    })\n\n    t.ok(stream.write('hello world\\n'))\n\n    stream.flush()\n\n    stream.on('drain', () => {\n      fs.readFile(dest, 'utf8', (err, data) => {\n        t.error(err)\n        t.equal(data, 'hello world\\n')\n        stream.end()\n      })\n    })\n  })\n\n  test('flush', (t) => {\n    t.plan(5)\n\n    const dest = file()\n    const fd = fs.openSync(dest, 'w')\n    const stream = new SonicBoom({ fd, minLength: 4096, sync })\n\n    stream.on('ready', () => {\n      t.pass('ready emitted')\n    })\n\n    t.ok(stream.write('hello world\\n'))\n    t.ok(stream.write('something else\\n'))\n\n    stream.flush()\n\n    stream.on('drain', () => {\n      fs.readFile(dest, 'utf8', (err, data) => {\n        t.error(err)\n        t.equal(data, 'hello world\\nsomething else\\n')\n        stream.end()\n      })\n    })\n  })\n\n  test('flush with no data', (t) => {\n    t.plan(2)\n\n    const dest = file()\n    const fd = fs.openSync(dest, 'w')\n    const stream = new SonicBoom({ fd, minLength: 4096, sync })\n\n    stream.on('ready', () => {\n      t.pass('ready emitted')\n    })\n\n    stream.flush()\n\n    stream.on('drain', () => {\n      t.pass('drain emitted')\n    })\n  })\n\n  test('reopen', (t) => {\n    t.plan(9)\n\n    const dest = file()\n    const stream = new SonicBoom({ dest, sync })\n\n    t.ok(stream.write('hello world\\n'))\n    t.ok(stream.write('something else\\n'))\n\n    const after = dest + '-moved'\n\n    stream.once('drain', () => {\n      t.pass('drain emitted')\n\n      fs.renameSync(dest, after)\n      stream.reopen()\n\n      stream.once('ready', () => {\n        t.pass('ready emitted')\n        t.ok(stream.write('after reopen\\n'))\n\n        stream.on('drain', () => {\n          fs.readFile(after, 'utf8', (err, data) => {\n            t.error(err)\n            t.equal(data, 'hello world\\nsomething else\\n')\n            fs.readFile(dest, 'utf8', (err, data) => {\n              t.error(err)\n              t.equal(data, 'after reopen\\n')\n              stream.end()\n            })\n          })\n        })\n      })\n    })\n  })\n\n  test('reopen with buffer', (t) => {\n    t.plan(9)\n\n    const dest = file()\n    const stream = new SonicBoom({ dest, minLength: 4096, sync })\n\n    t.ok(stream.write('hello world\\n'))\n    t.ok(stream.write('something else\\n'))\n\n    const after = dest + '-moved'\n\n    stream.once('ready', () => {\n      t.pass('drain emitted')\n\n      stream.flush()\n      fs.renameSync(dest, after)\n      stream.reopen()\n\n      stream.once('ready', () => {\n        t.pass('ready emitted')\n        t.ok(stream.write('after reopen\\n'))\n        stream.flush()\n\n        stream.on('drain', () => {\n          fs.readFile(after, 'utf8', (err, data) => {\n            t.error(err)\n            t.equal(data, 'hello world\\nsomething else\\n')\n            fs.readFile(dest, 'utf8', (err, data) => {\n              t.error(err)\n              t.equal(data, 'after reopen\\n')\n              stream.end()\n            })\n          })\n        })\n      })\n    })\n  })\n\n  test('reopen if not open', (t) => {\n    t.plan(3)\n\n    const dest = file()\n    const stream = new SonicBoom({ dest, sync })\n\n    t.ok(stream.write('hello world\\n'))\n    t.ok(stream.write('something else\\n'))\n\n    stream.reopen()\n\n    stream.end()\n    stream.on('close', function () {\n      t.pass('ended')\n    })\n  })\n\n  test('end after reopen', (t) => {\n    t.plan(4)\n\n    const dest = file()\n    const stream = new SonicBoom({ dest, minLength: 4096, sync })\n\n    stream.once('ready', () => {\n      t.pass('ready emitted')\n      const after = dest + '-moved'\n      stream.reopen(after)\n      stream.write('after reopen\\n')\n      stream.on('finish', () => {\n        t.pass('finish emitted')\n        fs.readFile(after, 'utf8', (err, data) => {\n          t.error(err)\n          t.equal(data, 'after reopen\\n')\n        })\n      })\n      stream.end()\n    })\n  })\n\n  test('end after 2x reopen', (t) => {\n    t.plan(4)\n\n    const dest = file()\n    const stream = new SonicBoom({ dest, minLength: 4096, sync })\n\n    stream.once('ready', () => {\n      t.pass('ready emitted')\n      stream.reopen(dest + '-moved')\n      const after = dest + '-moved-moved'\n      stream.reopen(after)\n      stream.write('after reopen\\n')\n      stream.on('finish', () => {\n        t.pass('finish emitted')\n        fs.readFile(after, 'utf8', (err, data) => {\n          t.error(err)\n          t.equal(data, 'after reopen\\n')\n        })\n      })\n      stream.end()\n    })\n  })\n\n  test('end if not ready', (t) => {\n    t.plan(3)\n\n    const dest = file()\n    const stream = new SonicBoom({ dest, minLength: 4096, sync })\n    const after = dest + '-moved'\n    stream.reopen(after)\n    stream.write('after reopen\\n')\n    stream.on('finish', () => {\n      t.pass('finish emitted')\n      fs.readFile(after, 'utf8', (err, data) => {\n        t.error(err)\n        t.equal(data, 'after reopen\\n')\n      })\n    })\n    stream.end()\n  })\n\n  test('reopen with file', (t) => {\n    t.plan(9)\n\n    const dest = file()\n    const stream = new SonicBoom({ dest, minLength: 0, sync })\n\n    t.ok(stream.write('hello world\\n'))\n    t.ok(stream.write('something else\\n'))\n\n    const after = dest + '-new'\n\n    stream.once('drain', () => {\n      t.pass('drain emitted')\n\n      stream.reopen(after)\n\n      stream.once('ready', () => {\n        t.pass('ready emitted')\n        t.ok(stream.write('after reopen\\n'))\n\n        stream.on('drain', () => {\n          fs.readFile(dest, 'utf8', (err, data) => {\n            t.error(err)\n            t.equal(data, 'hello world\\nsomething else\\n')\n            fs.readFile(after, 'utf8', (err, data) => {\n              t.error(err)\n              t.equal(data, 'after reopen\\n')\n              stream.end()\n            })\n          })\n        })\n      })\n    })\n  })\n\n  test('chunk data accordingly', (t) => {\n    t.plan(2)\n\n    const child = fork(join(__dirname, 'fixtures', 'firehose.js'), { silent: true })\n    const str = Buffer.alloc(10000).fill('a').toString()\n\n    let data = ''\n\n    child.stdout.on('data', function (chunk) {\n      data += chunk.toString()\n    })\n\n    child.stdout.on('end', function () {\n      t.equal(data, str)\n    })\n\n    child.on('close', function (code) {\n      t.equal(code, 0)\n    })\n  })\n\n  test('write later on recoverable error', (t) => {\n    t.plan(8)\n\n    const fakeFs = Object.create(fs)\n    const SonicBoom = proxyquire('.', {\n      fs: fakeFs\n    })\n\n    const dest = file()\n    const fd = fs.openSync(dest, 'w')\n    const stream = new SonicBoom({ fd, minLength: 0, sync })\n\n    stream.on('ready', () => {\n      t.pass('ready emitted')\n    })\n    stream.on('error', () => {\n      t.pass('error emitted')\n    })\n\n    if (sync) {\n      fakeFs.writeSync = function (fd, buf, enc) {\n        t.pass('fake fs.writeSync called')\n        throw new Error('recoverable error')\n      }\n    } else {\n      fakeFs.write = function (fd, buf, enc, cb) {\n        t.pass('fake fs.write called')\n        setTimeout(() => cb(new Error('recoverable error')), 0)\n      }\n    }\n\n    t.ok(stream.write('hello world\\n'))\n\n    setTimeout(() => {\n      if (sync) {\n        fakeFs.writeSync = fs.writeSync\n      } else {\n        fakeFs.write = fs.write\n      }\n\n      t.ok(stream.write('something else\\n'))\n\n      stream.end()\n      stream.on('finish', () => {\n        fs.readFile(dest, 'utf8', (err, data) => {\n          t.error(err)\n          t.equal(data, 'hello world\\nsomething else\\n')\n        })\n      })\n      stream.on('close', () => {\n        t.pass('close emitted')\n      })\n    }, 0)\n  })\n\n  test('reopen throws an error', (t) => {\n    t.plan(sync ? 10 : 9)\n\n    const fakeFs = Object.create(fs)\n    const SonicBoom = proxyquire('.', {\n      fs: fakeFs\n    })\n\n    const dest = file()\n    const stream = new SonicBoom({ dest, sync })\n\n    t.ok(stream.write('hello world\\n'))\n    t.ok(stream.write('something else\\n'))\n\n    const after = dest + '-moved'\n\n    stream.on('error', () => {\n      t.pass('error emitted')\n    })\n\n    stream.once('drain', () => {\n      t.pass('drain emitted')\n\n      fs.renameSync(dest, after)\n      if (sync) {\n        fakeFs.openSync = function (file, flags) {\n          t.pass('fake fs.openSync called')\n          throw new Error('open error')\n        }\n      } else {\n        fakeFs.open = function (file, flags, mode, cb) {\n          t.pass('fake fs.open called')\n          setTimeout(() => cb(new Error('open error')), 0)\n        }\n      }\n\n      if (sync) {\n        try {\n          stream.reopen()\n        } catch (err) {\n          t.pass('reopen throwed')\n        }\n      } else {\n        stream.reopen()\n      }\n\n      setTimeout(() => {\n        t.ok(stream.write('after reopen\\n'))\n\n        stream.end()\n        stream.on('finish', () => {\n          fs.readFile(after, 'utf8', (err, data) => {\n            t.error(err)\n            t.equal(data, 'hello world\\nsomething else\\nafter reopen\\n')\n          })\n        })\n        stream.on('close', () => {\n          t.pass('close emitted')\n        })\n      }, 0)\n    })\n  })\n\n  test('mode', { skip: isWindows }, (t) => {\n    t.plan(6)\n\n    const dest = file()\n    const mode = 0o666\n    const stream = new SonicBoom({ dest, sync, mode })\n\n    stream.on('ready', () => {\n      t.pass('ready emitted')\n    })\n\n    t.ok(stream.write('hello world\\n'))\n    t.ok(stream.write('something else\\n'))\n\n    stream.end()\n\n    stream.on('finish', () => {\n      fs.readFile(dest, 'utf8', (err, data) => {\n        t.error(err)\n        t.equal(data, 'hello world\\nsomething else\\n')\n        t.equal(fs.statSync(dest).mode & 0o777, stream.mode)\n      })\n    })\n  })\n\n  test('mode default', { skip: isWindows }, (t) => {\n    t.plan(6)\n\n    const dest = file()\n    const defaultMode = 0o666\n    const stream = new SonicBoom({ dest, sync })\n\n    stream.on('ready', () => {\n      t.pass('ready emitted')\n    })\n\n    t.ok(stream.write('hello world\\n'))\n    t.ok(stream.write('something else\\n'))\n\n    stream.end()\n\n    stream.on('finish', () => {\n      fs.readFile(dest, 'utf8', (err, data) => {\n        t.error(err)\n        t.equal(data, 'hello world\\nsomething else\\n')\n        t.equal(fs.statSync(dest).mode & 0o777, defaultMode)\n      })\n    })\n  })\n\n  test('mode on mkdir', { skip: isWindows }, (t) => {\n    t.plan(5)\n\n    const dest = path.join(file(), 'out.log')\n    const mode = 0o666\n    const stream = new SonicBoom({ dest, mkdir: true, mode, sync })\n\n    stream.on('ready', () => {\n      t.pass('ready emitted')\n    })\n\n    t.ok(stream.write('hello world\\n'))\n\n    stream.flush()\n\n    stream.on('drain', () => {\n      fs.readFile(dest, 'utf8', (err, data) => {\n        t.error(err)\n        t.equal(data, 'hello world\\n')\n        t.equal(fs.statSync(dest).mode & 0o777, stream.mode)\n        stream.end()\n      })\n    })\n  })\n\n  test('mode on append', { skip: isWindows }, (t) => {\n    t.plan(5)\n\n    const dest = file()\n    fs.writeFileSync(dest, 'hello world\\n', 'utf8', 0o422)\n    const mode = isWindows ? 0o444 : 0o666\n    const stream = new SonicBoom({ dest, append: false, mode, sync })\n\n    stream.on('ready', () => {\n      t.pass('ready emitted')\n    })\n\n    t.ok(stream.write('something else\\n'))\n\n    stream.flush()\n\n    stream.on('drain', () => {\n      fs.readFile(dest, 'utf8', (err, data) => {\n        t.error(err)\n        t.equal(data, 'something else\\n')\n        t.equal(fs.statSync(dest).mode & 0o777, stream.mode)\n        stream.end()\n      })\n    })\n  })\n\n  test('emit write events', (t) => {\n    t.plan(7)\n\n    const dest = file()\n    const stream = new SonicBoom({ dest, sync })\n\n    stream.on('ready', () => {\n      t.pass('ready emitted')\n    })\n\n    let length = 0\n    stream.on('write', (bytes) => {\n      length += bytes\n    })\n\n    t.ok(stream.write('hello world\\n'))\n    t.ok(stream.write('something else\\n'))\n\n    stream.end()\n\n    stream.on('finish', () => {\n      fs.readFile(dest, 'utf8', (err, data) => {\n        t.error(err)\n        t.equal(data, 'hello world\\nsomething else\\n')\n        t.equal(length, 27)\n      })\n    })\n    stream.on('close', () => {\n      t.pass('close emitted')\n    })\n  })\n}\n\ntest('drain deadlock', (t) => {\n  t.plan(4)\n\n  const dest = file()\n  const stream = new SonicBoom({ dest, sync: false, minLength: 9999 })\n\n  t.ok(stream.write(Buffer.alloc(1500).fill('x').toString()))\n  t.ok(stream.write(Buffer.alloc(1500).fill('x').toString()))\n  t.ok(!stream.write(Buffer.alloc(MAX_WRITE).fill('x').toString()))\n  stream.on('drain', () => {\n    t.pass()\n  })\n})\n\ntest('retry on EAGAIN', (t) => {\n  t.plan(7)\n\n  const fakeFs = Object.create(fs)\n  fakeFs.write = function (fd, buf, enc, cb) {\n    t.pass('fake fs.write called')\n    fakeFs.write = fs.write\n    const err = new Error('EAGAIN')\n    err.code = 'EAGAIN'\n    process.nextTick(cb, err)\n  }\n  const SonicBoom = proxyquire('.', {\n    fs: fakeFs\n  })\n\n  const dest = file()\n  const fd = fs.openSync(dest, 'w')\n  const stream = new SonicBoom({ fd, sync: false, minLength: 0 })\n\n  stream.on('ready', () => {\n    t.pass('ready emitted')\n  })\n\n  t.ok(stream.write('hello world\\n'))\n  t.ok(stream.write('something else\\n'))\n\n  stream.end()\n\n  stream.on('finish', () => {\n    fs.readFile(dest, 'utf8', (err, data) => {\n      t.error(err)\n      t.equal(data, 'hello world\\nsomething else\\n')\n    })\n  })\n  stream.on('close', () => {\n    t.pass('close emitted')\n  })\n})\n\ntest('emit error on async EAGAIN', (t) => {\n  t.plan(11)\n\n  const fakeFs = Object.create(fs)\n  fakeFs.write = function (fd, buf, enc, cb) {\n    t.pass('fake fs.write called')\n    fakeFs.write = fs.write\n    const err = new Error('EAGAIN')\n    err.code = 'EAGAIN'\n    process.nextTick(cb, err)\n  }\n  const SonicBoom = proxyquire('.', {\n    fs: fakeFs\n  })\n\n  const dest = file()\n  const fd = fs.openSync(dest, 'w')\n  const stream = new SonicBoom({\n    fd,\n    sync: false,\n    minLength: 12,\n    retryEAGAIN: (err, writeBufferLen, remainingBufferLen) => {\n      t.equal(err.code, 'EAGAIN')\n      t.equal(writeBufferLen, 12)\n      t.equal(remainingBufferLen, 0)\n      return false\n    }\n  })\n\n  stream.on('ready', () => {\n    t.pass('ready emitted')\n  })\n\n  stream.once('error', err => {\n    t.equal(err.code, 'EAGAIN')\n    t.ok(stream.write('something else\\n'))\n  })\n\n  t.ok(stream.write('hello world\\n'))\n\n  stream.end()\n\n  stream.on('finish', () => {\n    fs.readFile(dest, 'utf8', (err, data) => {\n      t.error(err)\n      t.equal(data, 'hello world\\nsomething else\\n')\n    })\n  })\n  stream.on('close', () => {\n    t.pass('close emitted')\n  })\n})\n\ntest('retry on EAGAIN (sync)', (t) => {\n  t.plan(7)\n\n  const fakeFs = Object.create(fs)\n  fakeFs.writeSync = function (fd, buf, enc, cb) {\n    t.pass('fake fs.writeSync called')\n    fakeFs.writeSync = fs.writeSync\n    const err = new Error('EAGAIN')\n    err.code = 'EAGAIN'\n    throw err\n  }\n  const SonicBoom = proxyquire('.', {\n    fs: fakeFs\n  })\n\n  const dest = file()\n  const fd = fs.openSync(dest, 'w')\n  const stream = new SonicBoom({ fd, minLength: 0, sync: true })\n\n  stream.on('ready', () => {\n    t.pass('ready emitted')\n  })\n\n  t.ok(stream.write('hello world\\n'))\n  t.ok(stream.write('something else\\n'))\n\n  stream.end()\n\n  stream.on('finish', () => {\n    fs.readFile(dest, 'utf8', (err, data) => {\n      t.error(err)\n      t.equal(data, 'hello world\\nsomething else\\n')\n    })\n  })\n  stream.on('close', () => {\n    t.pass('close emitted')\n  })\n})\n\ntest('emit error on EAGAIN (sync)', (t) => {\n  t.plan(11)\n\n  const fakeFs = Object.create(fs)\n  fakeFs.writeSync = function (fd, buf, enc, cb) {\n    t.pass('fake fs.writeSync called')\n    fakeFs.writeSync = fs.writeSync\n    const err = new Error('EAGAIN')\n    err.code = 'EAGAIN'\n    throw err\n  }\n  const SonicBoom = proxyquire('.', {\n    fs: fakeFs\n  })\n\n  const dest = file()\n  const fd = fs.openSync(dest, 'w')\n  const stream = new SonicBoom({\n    fd,\n    minLength: 0,\n    sync: true,\n    retryEAGAIN: (err, writeBufferLen, remainingBufferLen) => {\n      t.equal(err.code, 'EAGAIN')\n      t.equal(writeBufferLen, 12)\n      t.equal(remainingBufferLen, 0)\n      return false\n    }\n  })\n\n  stream.on('ready', () => {\n    t.pass('ready emitted')\n  })\n\n  stream.once('error', err => {\n    t.equal(err.code, 'EAGAIN')\n    t.ok(stream.write('something else\\n'))\n  })\n\n  t.ok(stream.write('hello world\\n'))\n\n  stream.end()\n\n  stream.on('finish', () => {\n    fs.readFile(dest, 'utf8', (err, data) => {\n      t.error(err)\n      t.equal(data, 'hello world\\nsomething else\\n')\n    })\n  })\n  stream.on('close', () => {\n    t.pass('close emitted')\n  })\n})\n\ntest('retry in flushSync on EAGAIN', (t) => {\n  t.plan(7)\n\n  const fakeFs = Object.create(fs)\n  const SonicBoom = proxyquire('.', {\n    fs: fakeFs\n  })\n\n  const dest = file()\n  const fd = fs.openSync(dest, 'w')\n  const stream = new SonicBoom({ fd, sync: false, minLength: 0 })\n\n  stream.on('ready', () => {\n    t.pass('ready emitted')\n  })\n\n  t.ok(stream.write('hello world\\n'))\n\n  fakeFs.writeSync = function (fd, buf, enc) {\n    t.pass('fake fs.write called')\n    fakeFs.writeSync = fs.writeSync\n    const err = new Error('EAGAIN')\n    err.code = 'EAGAIN'\n    throw err\n  }\n\n  t.ok(stream.write('something else\\n'))\n\n  stream.flushSync()\n  stream.end()\n\n  stream.on('finish', () => {\n    fs.readFile(dest, 'utf8', (err, data) => {\n      t.error(err)\n      t.equal(data, 'hello world\\nsomething else\\n')\n    })\n  })\n  stream.on('close', () => {\n    t.pass('close emitted')\n  })\n})\n\ntest('throw error in flushSync on EAGAIN', (t) => {\n  t.plan(11)\n\n  const fakeFs = Object.create(fs)\n  const SonicBoom = proxyquire('.', {\n    fs: fakeFs\n  })\n\n  const dest = file()\n  const fd = fs.openSync(dest, 'w')\n  const stream = new SonicBoom({\n    fd,\n    sync: false,\n    minLength: 1000,\n    retryEAGAIN: (err, writeBufferLen, remainingBufferLen) => {\n      t.equal(err.code, 'EAGAIN')\n      t.equal(writeBufferLen, 12)\n      t.equal(remainingBufferLen, 0)\n      return false\n    }\n  })\n\n  stream.on('ready', () => {\n    t.pass('ready emitted')\n  })\n\n  const err = new Error('EAGAIN')\n  err.code = 'EAGAIN'\n  fakeFs.writeSync = function (fd, buf, enc) {\n    Error.captureStackTrace(err)\n    t.pass('fake fs.write called')\n    fakeFs.writeSync = fs.writeSync\n    throw err\n  }\n\n  t.ok(stream.write('hello world\\n'))\n  t.throws(stream.flushSync.bind(stream), err, 'EAGAIN')\n\n  t.ok(stream.write('something else\\n'))\n  stream.flushSync()\n\n  stream.end()\n\n  stream.on('finish', () => {\n    fs.readFile(dest, 'utf8', (err, data) => {\n      t.error(err)\n      t.equal(data, 'hello world\\nsomething else\\n')\n    })\n  })\n  stream.on('close', () => {\n    t.pass('close emitted')\n  })\n})\n\ntest('retryEAGAIN receives remaining buffer on async if write fails', (t) => {\n  t.plan(12)\n\n  const fakeFs = Object.create(fs)\n  const SonicBoom = proxyquire('.', {\n    fs: fakeFs\n  })\n\n  const dest = file()\n  const fd = fs.openSync(dest, 'w')\n  const stream = new SonicBoom({\n    fd,\n    sync: false,\n    minLength: 12,\n    retryEAGAIN: (err, writeBufferLen, remainingBufferLen) => {\n      t.equal(err.code, 'EAGAIN')\n      t.equal(writeBufferLen, 12)\n      t.equal(remainingBufferLen, 11)\n      return false\n    }\n  })\n\n  stream.on('ready', () => {\n    t.pass('ready emitted')\n  })\n\n  stream.once('error', err => {\n    t.equal(err.code, 'EAGAIN')\n    t.ok(stream.write('done'))\n  })\n\n  fakeFs.write = function (fd, buf, enc, cb) {\n    t.pass('fake fs.write called')\n    fakeFs.write = fs.write\n    const err = new Error('EAGAIN')\n    err.code = 'EAGAIN'\n    t.ok(stream.write('sonic boom\\n'))\n    process.nextTick(cb, err)\n  }\n\n  t.ok(stream.write('hello world\\n'))\n\n  stream.end()\n\n  stream.on('finish', () => {\n    fs.readFile(dest, 'utf8', (err, data) => {\n      t.error(err)\n      t.equal(data, 'hello world\\nsonic boom\\ndone')\n    })\n  })\n  stream.on('close', () => {\n    t.pass('close emitted')\n  })\n})\n\ntest('retryEAGAIN receives remaining buffer if exceeds maxWrite', (t) => {\n  t.plan(17)\n\n  const fakeFs = Object.create(fs)\n  const SonicBoom = proxyquire('.', {\n    fs: fakeFs\n  })\n\n  const dest = file()\n  const fd = fs.openSync(dest, 'w')\n  const buf = Buffer.alloc(MAX_WRITE - 2).fill('x').toString() // 1 MB\n  const stream = new SonicBoom({\n    fd,\n    sync: false,\n    minLength: MAX_WRITE - 1,\n    retryEAGAIN: (err, writeBufferLen, remainingBufferLen) => {\n      t.equal(err.code, 'EAGAIN', 'retryEAGAIN received EAGAIN error')\n      t.equal(writeBufferLen, buf.length, 'writeBufferLen === buf.length')\n      t.equal(remainingBufferLen, 23, 'remainingBufferLen === 23')\n      return false\n    }\n  })\n\n  stream.on('ready', () => {\n    t.pass('ready emitted')\n  })\n\n  fakeFs.write = function (fd, buf, enc, cb) {\n    t.pass('fake fs.write called')\n    const err = new Error('EAGAIN')\n    err.code = 'EAGAIN'\n    process.nextTick(cb, err)\n  }\n\n  fakeFs.writeSync = function (fd, buf, enc, cb) {\n    t.pass('fake fs.write called')\n    const err = new Error('EAGAIN')\n    err.code = 'EAGAIN'\n    throw err\n  }\n\n  t.ok(stream.write(buf), 'write buf')\n  t.notOk(stream.write('hello world\\nsonic boom\\n'), 'write hello world sonic boom')\n\n  stream.once('error', err => {\n    t.equal(err.code, 'EAGAIN', 'bubbled error should be EAGAIN')\n\n    try {\n      stream.flushSync()\n    } catch (err) {\n      t.equal(err.code, 'EAGAIN', 'thrown error should be EAGAIN')\n      fakeFs.write = fs.write\n      fakeFs.writeSync = fs.writeSync\n      stream.end()\n    }\n  })\n\n  stream.on('finish', () => {\n    t.pass('finish emitted')\n    fs.readFile(dest, 'utf8', (err, data) => {\n      t.error(err)\n      t.equal(data, `${buf}hello world\\nsonic boom\\n`, 'data on file should match written')\n    })\n  })\n  stream.on('close', () => {\n    t.pass('close emitted')\n  })\n})\n\ntest('write buffers that are not totally written', (t) => {\n  t.plan(9)\n\n  const fakeFs = Object.create(fs)\n  fakeFs.write = function (fd, buf, enc, cb) {\n    t.pass('fake fs.write called')\n    fakeFs.write = function (fd, buf, enc, cb) {\n      t.pass('calling real fs.write, ' + buf)\n      fs.write(fd, buf, enc, cb)\n    }\n    process.nextTick(cb, null, 0)\n  }\n  const SonicBoom = proxyquire('.', {\n    fs: fakeFs\n  })\n\n  const dest = file()\n  const fd = fs.openSync(dest, 'w')\n  const stream = new SonicBoom({ fd, minLength: 0, sync: false })\n\n  stream.on('ready', () => {\n    t.pass('ready emitted')\n  })\n\n  t.ok(stream.write('hello world\\n'))\n  t.ok(stream.write('something else\\n'))\n\n  stream.end()\n\n  stream.on('finish', () => {\n    fs.readFile(dest, 'utf8', (err, data) => {\n      t.error(err)\n      t.equal(data, 'hello world\\nsomething else\\n')\n    })\n  })\n  stream.on('close', () => {\n    t.pass('close emitted')\n  })\n})\n\ntest('write buffers that are not totally written with sync mode', (t) => {\n  t.plan(9)\n\n  const fakeFs = Object.create(fs)\n  fakeFs.writeSync = function (fd, buf, enc) {\n    t.pass('fake fs.write called')\n    fakeFs.writeSync = (fd, buf, enc) => {\n      t.pass('calling real fs.writeSync, ' + buf)\n      return fs.writeSync(fd, buf, enc)\n    }\n    return 0\n  }\n  const SonicBoom = proxyquire('.', {\n    fs: fakeFs\n  })\n\n  const dest = file()\n  const fd = fs.openSync(dest, 'w')\n  const stream = new SonicBoom({ fd, minLength: 0, sync: true })\n\n  stream.on('ready', () => {\n    t.pass('ready emitted')\n  })\n\n  t.ok(stream.write('hello world\\n'))\n  t.ok(stream.write('something else\\n'))\n\n  stream.end()\n\n  stream.on('finish', () => {\n    fs.readFile(dest, 'utf8', (err, data) => {\n      t.error(err)\n      t.equal(data, 'hello world\\nsomething else\\n')\n    })\n  })\n  stream.on('close', () => {\n    t.pass('close emitted')\n  })\n})\n\ntest('write buffers that are not totally written with flush sync', (t) => {\n  t.plan(7)\n\n  const fakeFs = Object.create(fs)\n  fakeFs.writeSync = function (fd, buf, enc) {\n    t.pass('fake fs.write called')\n    fakeFs.writeSync = fs.writeSync\n    return 0\n  }\n  const SonicBoom = proxyquire('.', {\n    fs: fakeFs\n  })\n\n  const dest = file()\n  const fd = fs.openSync(dest, 'w')\n  const stream = new SonicBoom({ fd, minLength: 100, sync: false })\n\n  stream.on('ready', () => {\n    t.pass('ready emitted')\n  })\n\n  t.ok(stream.write('hello world\\n'))\n  t.ok(stream.write('something else\\n'))\n\n  stream.flushSync()\n\n  stream.on('write', (n) => {\n    if (n === 0) {\n      t.fail('throwing to avoid infinite loop')\n      throw Error('shouldn\\'t call write handler after flushing with n === 0')\n    }\n  })\n\n  stream.end()\n\n  stream.on('finish', () => {\n    fs.readFile(dest, 'utf8', (err, data) => {\n      t.error(err)\n      t.equal(data, 'hello world\\nsomething else\\n')\n    })\n  })\n  stream.on('close', () => {\n    t.pass('close emitted')\n  })\n})\n\ntest('sync writing is fully sync', (t) => {\n  t.plan(6)\n\n  const fakeFs = Object.create(fs)\n  fakeFs.writeSync = function (fd, buf, enc, cb) {\n    t.pass('fake fs.write called')\n    return fs.writeSync(fd, buf, enc)\n  }\n  const SonicBoom = proxyquire('.', {\n    fs: fakeFs\n  })\n\n  const dest = file()\n  const fd = fs.openSync(dest, 'w')\n  const stream = new SonicBoom({ fd, minLength: 0, sync: true })\n  t.ok(stream.write('hello world\\n'))\n  t.ok(stream.write('something else\\n'))\n\n  // 'drain' will be only emitted once,\n  // the number of assertions at the top check this.\n  stream.on('drain', () => {\n    t.pass('drain emitted')\n  })\n\n  const data = fs.readFileSync(dest, 'utf8')\n  t.equal(data, 'hello world\\nsomething else\\n')\n})\n\ntest('write enormously large buffers async', (t) => {\n  t.plan(3)\n\n  const dest = file()\n  const fd = fs.openSync(dest, 'w')\n  const stream = new SonicBoom({ fd, minLength: 0, sync: false })\n\n  const buf = Buffer.alloc(1024).fill('x').toString() // 1 MB\n  let length = 0\n\n  for (let i = 0; i < 1024 * 512; i++) {\n    length += buf.length\n    stream.write(buf)\n  }\n\n  stream.end()\n\n  stream.on('finish', () => {\n    fs.stat(dest, (err, stat) => {\n      t.error(err)\n      t.equal(stat.size, length)\n    })\n  })\n  stream.on('close', () => {\n    t.pass('close emitted')\n  })\n})\n\ntest('write enormously large buffers sync', (t) => {\n  t.plan(3)\n\n  const dest = file()\n  const fd = fs.openSync(dest, 'w')\n  const stream = new SonicBoom({ fd, minLength: 0, sync: true })\n\n  const buf = Buffer.alloc(1024).fill('x').toString() // 1 MB\n  let length = 0\n\n  for (let i = 0; i < 1024 * 512; i++) {\n    length += buf.length\n    stream.write(buf)\n  }\n\n  stream.end()\n\n  stream.on('finish', () => {\n    fs.stat(dest, (err, stat) => {\n      t.error(err)\n      t.equal(stat.size, length)\n    })\n  })\n  stream.on('close', () => {\n    t.pass('close emitted')\n  })\n})\n\ntest('write enormously large buffers sync with utf8 multi-byte split', (t) => {\n  t.plan(4)\n\n  const dest = file()\n  const fd = fs.openSync(dest, 'w')\n  const stream = new SonicBoom({ fd, minLength: 0, sync: true })\n\n  let buf = Buffer.alloc((1024 * 16) - 2).fill('x') // 16MB - 3B\n  const length = buf.length + 4\n  buf = buf.toString() + '🌲' // 16 MB + 1B\n\n  stream.write(buf)\n\n  stream.end()\n\n  stream.on('finish', () => {\n    fs.stat(dest, (err, stat) => {\n      t.error(err)\n      t.equal(stat.size, length)\n      const char = Buffer.alloc(4)\n      const fd = fs.openSync(dest, 'r')\n      fs.readSync(fd, char, 0, 4, length - 4)\n      t.equal(char.toString(), '🌲')\n    })\n  })\n  stream.on('close', () => {\n    t.pass('close emitted')\n  })\n})\n\n// for context see this issue https://github.com/pinojs/pino/issues/871\ntest('file specified by dest path available immediately when options.sync is true', (t) => {\n  t.plan(3)\n  const dest = file()\n  const stream = new SonicBoom({ dest, sync: true })\n  t.ok(stream.write('hello world\\n'))\n  t.ok(stream.write('something else\\n'))\n  stream.flushSync()\n  t.pass('file opened and written to without error')\n})\n\ntest('sync error handling', (t) => {\n  t.plan(1)\n  try {\n    /* eslint no-new: off */\n    new SonicBoom({ dest: '/path/to/nowwhere', sync: true })\n    t.fail('must throw synchronously')\n  } catch (err) {\n    t.pass('an error happened')\n  }\n})\n\nfor (const fd of [1, 2]) {\n  test(`fd ${fd}`, (t) => {\n    t.plan(1)\n\n    const fakeFs = Object.create(fs)\n    const SonicBoom = proxyquire('.', {\n      fs: fakeFs\n    })\n\n    const stream = new SonicBoom({ fd })\n\n    fakeFs.close = function (fd, cb) {\n      t.fail(`should not close fd ${fd}`)\n    }\n\n    stream.end()\n\n    stream.on('close', () => {\n      t.pass('close emitted')\n    })\n  })\n}\n\ntest('write enormously large buffers async atomicly', (t) => {\n  const fakeFs = Object.create(fs)\n  const SonicBoom = proxyquire('.', {\n    fs: fakeFs\n  })\n\n  const dest = file()\n  const fd = fs.openSync(dest, 'w')\n  const stream = new SonicBoom({ fd, minLength: 0, sync: false })\n\n  const buf = Buffer.alloc(1023).fill('x').toString()\n\n  fakeFs.write = function (fd, _buf, enc, cb) {\n    if (_buf.length % buf.length !== 0) {\n      t.fail('write called with wrong buffer size')\n    }\n\n    setImmediate(cb, null, _buf.length)\n  }\n\n  for (let i = 0; i < 1024 * 512; i++) {\n    stream.write(buf)\n  }\n\n  setImmediate(() => {\n    for (let i = 0; i < 1024 * 512; i++) {\n      stream.write(buf)\n    }\n\n    stream.end()\n  })\n\n  stream.on('close', () => {\n    t.pass('close emitted')\n    t.end()\n  })\n})\n\ntest('write should not drop new data if buffer is not full', (t) => {\n  t.plan(2)\n  const fakeFs = Object.create(fs)\n  const SonicBoom = proxyquire('.', {\n    fs: fakeFs\n  })\n\n  const dest = file()\n  const fd = fs.openSync(dest, 'w')\n  const stream = new SonicBoom({ fd, minLength: 101, maxLength: 102, sync: false })\n\n  const buf = Buffer.alloc(100).fill('x').toString()\n\n  fakeFs.write = function (fd, _buf, enc, cb) {\n    t.equal(_buf.length, buf.length + 2)\n    setImmediate(cb, null, _buf.length)\n    fakeFs.write = () => t.error('shouldnt call write again')\n    stream.end()\n  }\n\n  stream.on('drop', (data) => {\n    t.error('should not drop')\n  })\n\n  stream.write(buf)\n  stream.write('aa')\n\n  stream.on('close', () => {\n    t.pass('close emitted')\n  })\n})\n\ntest('write should drop new data if buffer is full', (t) => {\n  t.plan(3)\n  const fakeFs = Object.create(fs)\n  const SonicBoom = proxyquire('.', {\n    fs: fakeFs\n  })\n\n  const dest = file()\n  const fd = fs.openSync(dest, 'w')\n  const stream = new SonicBoom({ fd, minLength: 101, maxLength: 102, sync: false })\n\n  const buf = Buffer.alloc(100).fill('x').toString()\n\n  fakeFs.write = function (fd, _buf, enc, cb) {\n    t.equal(_buf.length, buf.length)\n    setImmediate(cb, null, _buf.length)\n    fakeFs.write = () => t.error('shouldnt call write more than once')\n  }\n\n  stream.on('drop', (data) => {\n    t.equal(data.length, 3)\n    stream.end()\n  })\n\n  stream.write(buf)\n  stream.write('aaa')\n\n  stream.on('close', () => {\n    t.pass('close emitted')\n  })\n})\n\ntest('should throw if minLength >= maxWrite', (t) => {\n  t.plan(1)\n  t.throws(() => {\n    const dest = file()\n    const fd = fs.openSync(dest, 'w')\n\n    new SonicBoom({\n      fd,\n      minLength: MAX_WRITE\n    })\n  })\n})\n\ntest('make sure `maxWrite` is passed', (t) => {\n  t.plan(1)\n  const dest = file()\n  const stream = new SonicBoom({ dest, maxLength: 65536 })\n  t.equal(stream.maxLength, 65536)\n})\n\ntest('fsync with sync', (t) => {\n  t.plan(5)\n\n  const fakeFs = Object.create(fs)\n  fakeFs.fsyncSync = function (fd) {\n    t.pass('fake fs.fsyncSync called')\n    return fs.fsyncSync(fd)\n  }\n  const SonicBoom = proxyquire('.', {\n    fs: fakeFs\n  })\n\n  const dest = file()\n  const fd = fs.openSync(dest, 'w')\n  const stream = new SonicBoom({ fd, sync: true, fsync: true })\n\n  t.ok(stream.write('hello world\\n'))\n  t.ok(stream.write('something else\\n'))\n\n  stream.end()\n\n  const data = fs.readFileSync(dest, 'utf8')\n  t.equal(data, 'hello world\\nsomething else\\n')\n})\n\ntest('fsync with async', (t) => {\n  t.plan(7)\n\n  const fakeFs = Object.create(fs)\n  fakeFs.fsyncSync = function (fd) {\n    t.pass('fake fs.fsyncSync called')\n    return fs.fsyncSync(fd)\n  }\n  const SonicBoom = proxyquire('.', {\n    fs: fakeFs\n  })\n\n  const dest = file()\n  const fd = fs.openSync(dest, 'w')\n  const stream = new SonicBoom({ fd, fsync: true })\n\n  t.ok(stream.write('hello world\\n'))\n  t.ok(stream.write('something else\\n'))\n\n  stream.end()\n\n  stream.on('finish', () => {\n    fs.readFile(dest, 'utf8', (err, data) => {\n      t.error(err)\n      t.equal(data, 'hello world\\nsomething else\\n')\n    })\n  })\n  stream.on('close', () => {\n    t.pass('close emitted')\n  })\n})\n\ntest('._len must always be equal or greater than 0', (t) => {\n  t.plan(3)\n\n  const dest = file()\n  const fd = fs.openSync(dest, 'w')\n  const stream = new SonicBoom({ fd, sync: true })\n\n  t.ok(stream.write('hello world 👀\\n'))\n  t.ok(stream.write('another line 👀\\n'))\n\n  t.equal(stream._len, 0)\n\n  stream.end()\n})\n\ntest('._len must always be equal or greater than 0', (t) => {\n  const n = 20\n  t.plan(n + 3)\n\n  const dest = file()\n  const fd = fs.openSync(dest, 'w')\n  const stream = new SonicBoom({ fd, sync: true, minLength: 20 })\n\n  let str = ''\n  for (let i = 0; i < 20; i++) {\n    t.ok(stream.write('👀'))\n    str += '👀'\n  }\n\n  t.equal(stream._len, 0)\n\n  fs.readFile(dest, 'utf8', (err, data) => {\n    t.error(err)\n    t.equal(data, str)\n  })\n})\n/README.md\u00140# sonic-boom\n\n[![NPM Package Version](https://img.shields.io/npm/v/sonic-boom)](https://www.npmjs.com/package/sonic-boom)\n[![Build Status](https://github.com/pinojs/sonic-boom/workflows/CI/badge.svg)](https://github.com/pinojs/sonic-boom/actions?query=workflow%3ACI)\n[![js-standard-style](https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat)](https://standardjs.com/)\n\nExtremely fast utf8-only stream implementation to write to files and\nfile descriptors.\n\nThis implementation is partial, but support backpressure and `.pipe()` in is here.\nHowever, it is 2-3x faster than Node Core `fs.createWriteStream()`:\n\n```\nbenchSonic*1000: 1916.904ms\nbenchSonicSync*1000: 8605.265ms\nbenchSonic4k*1000: 1965.231ms\nbenchSonicSync4k*1000: 1588.224ms\nbenchCore*1000: 5851.959ms\nbenchConsole*1000: 7605.713ms\n```\n\nNote that sync mode without buffering is _slower_ than a Node Core WritableStream, however\nthis mode matches the expected behavior of `console.log()`.\n\nNote that if this is used to log to a windows terminal (`cmd.exe` or\npowershell), it is needed to run `chcp 65001` in the terminal to\ncorrectly display utf-8 characters, see\n[chcp](https://ss64.com/nt/chcp.html) for more details.\n\n## Install\n\n```\nnpm i sonic-boom\n```\n\n## Example\n\n```js\n'use strict'\n\nconst SonicBoom = require('sonic-boom')\nconst sonic = new SonicBoom({ fd: process.stdout.fd }) // or { dest: '/path/to/destination' }\n\nfor (let i = 0; i < 10; i++) {\n  sonic.write('hello sonic\\n')\n}\n```\n\n## API\n\n### SonicBoom(opts)\n\nCreates a new instance of SonicBoom.\n\nThe options are:\n\n* `fd`: a file descriptor, something that is returned by `fs.open` or\n   `fs.openSync`.\n* `dest`: a string that is a path to a file to be written to (mode controlled by the `append` option).\n* `minLength`: the minimum length of the internal buffer that is\n  required to be full before flushing.\n* `maxLength`: the maximum length of the internal buffer. If a write operation would cause the buffer\n  to exceed `maxLength`, the data written is dropped and a `drop` event is emitted with the dropped data\n* `maxWrite`: the maximum number of bytes that can be written; default: 16384\n* `sync`: perform writes synchronously (similar to `console.log`).\n* `fsync`: perform a [fsyncSync](https://nodejs.org/api/fs.html#fsfsyncsyncfd) every time a write is completed.\n* `append`: appends writes to dest file instead of truncating it (default `true`).\n* `mode`: specify the creating file `mode` (see [fs.open()](https://nodejs.org/api/fs.html#fsopenpath-flags-mode-callback) from Node.js core).\n* `mkdir`: ensure directory for dest file exists when `true` (default `false`).\n* `retryEAGAIN(err, writeBufferLen, remainingBufferLen)`: a function that will be called when sonic-boom\n    write/writeSync/flushSync encounters a EAGAIN error. If the return value is\n    true sonic-boom will retry the operation, otherwise it will bubble the\n    error. `err` is the error that caused this function to be called,\n    `writeBufferLen` is the length of the buffer sonic-boom tried to write, and\n    `remainingBufferLen` is the length of the remaining buffer sonic-boom didn't try to write.\n\nFor `sync:false`  a `SonicBoom` instance will emit the `'ready'` event when a file descriptor is available.\nFor `sync:true` this is not relevant because the `'ready'` event will be fired when the `SonicBoom` instance is created, before it can be subscribed to.\n\n\n### SonicBoom#write(string)\n\nWrites the string to the file.\nIt will return false to signal the producer to slow down.\n\n### SonicBoom#flush()\n\nWrites the current buffer to the file if a write was not in progress.\nDo nothing if `minLength` is zero or if it is already writing.\n\n### SonicBoom#reopen([file])\n\nReopen the file in place, useful for log rotation.\n\nExample:\n\n```js\nconst stream = new SonicBoom('./my.log')\nprocess.on('SIGUSR2', function () {\n  stream.reopen()\n})\n```\n\n### SonicBoom#flushSync()\n\nFlushes the buffered data synchronously. This is a costly operation.\n\n### SonicBoom#end()\n\nCloses the stream, the data will be flushed down asynchronously\n\n### SonicBoom#destroy()\n\nCloses the stream immediately, the data is not flushed.\n\n### Events\n\n\n#### SonicBoom#close\n\nSee [Stream#close](https://nodejs.org/api/stream.html#event-close). The `'close'` event when the instance has been closed.\n\n#### SonicBoom#drain\n\nSee [Stream#drain](https://nodejs.org/api/stream.html#event-drain). The `'drain'` event is emitted when source can resume sending data.\n\n#### SonicBoom#drop <any>\n\nWhen destination file maximal length is reached, the `'drop'` event is emitted with data that could not be written. \n\n#### SonicBoom#error <Error>\n\nThe `'error'` event is emitted when the destination file can not be opened, or written.\n\n#### SonicBoom#finish\n\nSee [Stream#finish](https://nodejs.org/api/stream.html#event-finish). The `'finish'` event after calling `end()` method and when all data was written.\n\n#### SonicBoom#ready\n\nThe `'ready'` event occurs when the created instance is ready to process input.\n\n#### SonicBoom#write <number>\n\nThe `'write'` event occurs every time data is written to the underlying file. It emits the number of written bytes.\n\n## License\n\nMIT\n/index.js)'use strict'\n\nconst fs = require('fs')\nconst EventEmitter = require('events')\nconst inherits = require('util').inherits\nconst path = require('path')\nconst sleep = require('atomic-sleep')\n\nconst BUSY_WRITE_TIMEOUT = 100\n\n// 16 KB. Don't write more than docker buffer size.\n// https://github.com/moby/moby/blob/513ec73831269947d38a644c278ce3cac36783b2/daemon/logger/copier.go#L13\nconst MAX_WRITE = 16 * 1024\n\nfunction openFile (file, sonic) {\n  sonic._opening = true\n  sonic._writing = true\n  sonic._asyncDrainScheduled = false\n\n  // NOTE: 'error' and 'ready' events emitted below only relevant when sonic.sync===false\n  // for sync mode, there is no way to add a listener that will receive these\n\n  function fileOpened (err, fd) {\n    if (err) {\n      sonic._reopening = false\n      sonic._writing = false\n      sonic._opening = false\n\n      if (sonic.sync) {\n        process.nextTick(() => {\n          if (sonic.listenerCount('error') > 0) {\n            sonic.emit('error', err)\n          }\n        })\n      } else {\n        sonic.emit('error', err)\n      }\n      return\n    }\n\n    sonic.fd = fd\n    sonic.file = file\n    sonic._reopening = false\n    sonic._opening = false\n    sonic._writing = false\n\n    if (sonic.sync) {\n      process.nextTick(() => sonic.emit('ready'))\n    } else {\n      sonic.emit('ready')\n    }\n\n    if (sonic._reopening) {\n      return\n    }\n\n    // start\n    if (!sonic._writing && sonic._len > sonic.minLength && !sonic.destroyed) {\n      actualWrite(sonic)\n    }\n  }\n\n  const flags = sonic.append ? 'a' : 'w'\n  const mode = sonic.mode\n\n  if (sonic.sync) {\n    try {\n      if (sonic.mkdir) fs.mkdirSync(path.dirname(file), { recursive: true })\n      const fd = fs.openSync(file, flags, mode)\n      fileOpened(null, fd)\n    } catch (err) {\n      fileOpened(err)\n      throw err\n    }\n  } else if (sonic.mkdir) {\n    fs.mkdir(path.dirname(file), { recursive: true }, (err) => {\n      if (err) return fileOpened(err)\n      fs.open(file, flags, mode, fileOpened)\n    })\n  } else {\n    fs.open(file, flags, mode, fileOpened)\n  }\n}\n\nfunction SonicBoom (opts) {\n  if (!(this instanceof SonicBoom)) {\n    return new SonicBoom(opts)\n  }\n\n  let { fd, dest, minLength, maxLength, maxWrite, sync, append = true, mode, mkdir, retryEAGAIN, fsync } = opts || {}\n\n  fd = fd || dest\n\n  this._bufs = []\n  this._len = 0\n  this.fd = -1\n  this._writing = false\n  this._writingBuf = ''\n  this._ending = false\n  this._reopening = false\n  this._asyncDrainScheduled = false\n  this._hwm = Math.max(minLength || 0, 16387)\n  this.file = null\n  this.destroyed = false\n  this.minLength = minLength || 0\n  this.maxLength = maxLength || 0\n  this.maxWrite = maxWrite || MAX_WRITE\n  this.sync = sync || false\n  this._fsync = fsync || false\n  this.append = append || false\n  this.mode = mode\n  this.retryEAGAIN = retryEAGAIN || (() => true)\n  this.mkdir = mkdir || false\n\n  if (typeof fd === 'number') {\n    this.fd = fd\n    process.nextTick(() => this.emit('ready'))\n  } else if (typeof fd === 'string') {\n    openFile(fd, this)\n  } else {\n    throw new Error('SonicBoom supports only file descriptors and files')\n  }\n  if (this.minLength >= this.maxWrite) {\n    throw new Error(`minLength should be smaller than maxWrite (${this.maxWrite})`)\n  }\n\n  this.release = (err, n) => {\n    if (err) {\n      if (err.code === 'EAGAIN' && this.retryEAGAIN(err, this._writingBuf.length, this._len - this._writingBuf.length)) {\n        if (this.sync) {\n          // This error code should not happen in sync mode, because it is\n          // not using the underlining operating system asynchronous functions.\n          // However it happens, and so we handle it.\n          // Ref: https://github.com/pinojs/pino/issues/783\n          try {\n            sleep(BUSY_WRITE_TIMEOUT)\n            this.release(undefined, 0)\n          } catch (err) {\n            this.release(err)\n          }\n        } else {\n          // Let's give the destination some time to process the chunk.\n          setTimeout(() => {\n            fs.write(this.fd, this._writingBuf, 'utf8', this.release)\n          }, BUSY_WRITE_TIMEOUT)\n        }\n      } else {\n        this._writing = false\n\n        this.emit('error', err)\n      }\n      return\n    }\n\n    this.emit('write', n)\n\n    this._len -= n\n    // In case of multi-byte characters, the length of the written buffer\n    // may be different from the length of the string. Let's make sure\n    // we do not have an accumulated string with a negative length.\n    // This also mean that ._len is not precise, but it's not a problem as some\n    // writes might be triggered earlier than ._minLength.\n    if (this._len < 0) {\n      this._len = 0\n    }\n\n    // TODO if we have a multi-byte character in the buffer, we need to\n    // n might not be the same as this._writingBuf.length, so we might loose\n    // characters here. The solution to this problem is to use a Buffer for _writingBuf.\n    this._writingBuf = this._writingBuf.slice(n)\n\n    if (this._writingBuf.length) {\n      if (!this.sync) {\n        fs.write(this.fd, this._writingBuf, 'utf8', this.release)\n        return\n      }\n\n      try {\n        do {\n          const n = fs.writeSync(this.fd, this._writingBuf, 'utf8')\n          this._len -= n\n          this._writingBuf = this._writingBuf.slice(n)\n        } while (this._writingBuf)\n      } catch (err) {\n        this.release(err)\n        return\n      }\n    }\n\n    if (this._fsync) {\n      fs.fsyncSync(this.fd)\n    }\n\n    const len = this._len\n    if (this._reopening) {\n      this._writing = false\n      this._reopening = false\n      this.reopen()\n    } else if (len > this.minLength) {\n      actualWrite(this)\n    } else if (this._ending) {\n      if (len > 0) {\n        actualWrite(this)\n      } else {\n        this._writing = false\n        actualClose(this)\n      }\n    } else {\n      this._writing = false\n      if (this.sync) {\n        if (!this._asyncDrainScheduled) {\n          this._asyncDrainScheduled = true\n          process.nextTick(emitDrain, this)\n        }\n      } else {\n        this.emit('drain')\n      }\n    }\n  }\n\n  this.on('newListener', function (name) {\n    if (name === 'drain') {\n      this._asyncDrainScheduled = false\n    }\n  })\n}\n\nfunction emitDrain (sonic) {\n  const hasListeners = sonic.listenerCount('drain') > 0\n  if (!hasListeners) return\n  sonic._asyncDrainScheduled = false\n  sonic.emit('drain')\n}\n\ninherits(SonicBoom, EventEmitter)\n\nSonicBoom.prototype.write = function (data) {\n  if (this.destroyed) {\n    throw new Error('SonicBoom destroyed')\n  }\n\n  const len = this._len + data.length\n  const bufs = this._bufs\n\n  if (this.maxLength && len > this.maxLength) {\n    this.emit('drop', data)\n    return this._len < this._hwm\n  }\n\n  if (\n    bufs.length === 0 ||\n    bufs[bufs.length - 1].length + data.length > this.maxWrite\n  ) {\n    bufs.push('' + data)\n  } else {\n    bufs[bufs.length - 1] += data\n  }\n\n  this._len = len\n\n  if (!this._writing && this._len >= this.minLength) {\n    actualWrite(this)\n  }\n\n  return this._len < this._hwm\n}\n\nSonicBoom.prototype.flush = function () {\n  if (this.destroyed) {\n    throw new Error('SonicBoom destroyed')\n  }\n\n  if (this._writing || this.minLength <= 0) {\n    return\n  }\n\n  if (this._bufs.length === 0) {\n    this._bufs.push('')\n  }\n\n  actualWrite(this)\n}\n\nSonicBoom.prototype.reopen = function (file) {\n  if (this.destroyed) {\n    throw new Error('SonicBoom destroyed')\n  }\n\n  if (this._opening) {\n    this.once('ready', () => {\n      this.reopen(file)\n    })\n    return\n  }\n\n  if (this._ending) {\n    return\n  }\n\n  if (!this.file) {\n    throw new Error('Unable to reopen a file descriptor, you must pass a file to SonicBoom')\n  }\n\n  this._reopening = true\n\n  if (this._writing) {\n    return\n  }\n\n  const fd = this.fd\n  this.once('ready', () => {\n    if (fd !== this.fd) {\n      fs.close(fd, (err) => {\n        if (err) {\n          return this.emit('error', err)\n        }\n      })\n    }\n  })\n\n  openFile(file || this.file, this)\n}\n\nSonicBoom.prototype.end = function () {\n  if (this.destroyed) {\n    throw new Error('SonicBoom destroyed')\n  }\n\n  if (this._opening) {\n    this.once('ready', () => {\n      this.end()\n    })\n    return\n  }\n\n  if (this._ending) {\n    return\n  }\n\n  this._ending = true\n\n  if (this._writing) {\n    return\n  }\n\n  if (this._len > 0 && this.fd >= 0) {\n    actualWrite(this)\n  } else {\n    actualClose(this)\n  }\n}\n\nSonicBoom.prototype.flushSync = function () {\n  if (this.destroyed) {\n    throw new Error('SonicBoom destroyed')\n  }\n\n  if (this.fd < 0) {\n    throw new Error('sonic boom is not ready yet')\n  }\n\n  if (!this._writing && this._writingBuf.length > 0) {\n    this._bufs.unshift(this._writingBuf)\n    this._writingBuf = ''\n  }\n\n  let buf = ''\n  while (this._bufs.length || buf.length) {\n    if (buf.length <= 0) {\n      buf = this._bufs[0]\n    }\n    try {\n      const n = fs.writeSync(this.fd, buf, 'utf8')\n      buf = buf.slice(n)\n      this._len = Math.max(this._len - n, 0)\n      if (buf.length <= 0) {\n        this._bufs.shift()\n      }\n    } catch (err) {\n      if (err.code !== 'EAGAIN' || !this.retryEAGAIN(err, buf.length, this._len - buf.length)) {\n        throw err\n      }\n\n      sleep(BUSY_WRITE_TIMEOUT)\n    }\n  }\n}\n\nSonicBoom.prototype.destroy = function () {\n  if (this.destroyed) {\n    return\n  }\n  actualClose(this)\n}\n\nfunction actualWrite (sonic) {\n  const release = sonic.release\n  sonic._writing = true\n  sonic._writingBuf = sonic._writingBuf || sonic._bufs.shift() || ''\n\n  if (sonic.sync) {\n    try {\n      const written = fs.writeSync(sonic.fd, sonic._writingBuf, 'utf8')\n      release(null, written)\n    } catch (err) {\n      release(err)\n    }\n  } else {\n    fs.write(sonic.fd, sonic._writingBuf, 'utf8', release)\n  }\n}\n\nfunction actualClose (sonic) {\n  if (sonic.fd === -1) {\n    sonic.once('ready', actualClose.bind(null, sonic))\n    return\n  }\n\n  sonic.destroyed = true\n  sonic._bufs = []\n\n  if (sonic.fd !== 1 && sonic.fd !== 2) {\n    fs.close(sonic.fd, done)\n  } else {\n    setImmediate(done)\n  }\n\n  function done (err) {\n    if (err) {\n      sonic.emit('error', err)\n      return\n    }\n\n    if (sonic._ending && !sonic._writing) {\n      sonic.emit('finish')\n    }\n    sonic.emit('close')\n  }\n}\n\n/**\n * These export configurations enable JS and TS developers\n * to consumer SonicBoom in whatever way best suits their needs.\n * Some examples of supported import syntax includes:\n * - `const SonicBoom = require('SonicBoom')`\n * - `const { SonicBoom } = require('SonicBoom')`\n * - `import * as SonicBoom from 'SonicBoom'`\n * - `import { SonicBoom } from 'SonicBoom'`\n * - `import SonicBoom from 'SonicBoom'`\n */\nSonicBoom.SonicBoom = SonicBoom\nSonicBoom.default = SonicBoom\nmodule.exports = SonicBoom\n/types/tests/test.tsximport { SonicBoom } from '../../'\n\nconst sonic = new SonicBoom({ fd: process.stdout.fd })\nsonic.write('hello sonic\\n')\n/fixtures/firehose.js\u00017'use strict'\n\nconst SonicBoom = require('..')\n\nconst out = new SonicBoom({ fd: process.stdout.fd })\nconst str = Buffer.alloc(1000).fill('a').toString()\n\nlet i = 0\n\nfunction write () {\n  if (i++ === 10) {\n    return\n  }\n\n  if (out.write(str)) {\n    write()\n  } else {\n    out.once('drain', write)\n  }\n}\n\nwrite()\n/LICENSE\u0004/MIT License\n\nCopyright (c) 2017 Matteo Collina\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n/check.js\u0001L'use strict'\n\nconst SonicBoom = require('.')\nconst sonic = new SonicBoom({ fd: process.stdout.fd })\n\nlet count = 0\nfunction scheduleWrites () {\n  for (let i = 0; i < 1000; i++) {\n    sonic.write('hello sonic\\n')\n    console.log('hello console')\n  }\n\n  if (++count < 10) {\n    setTimeout(scheduleWrites, 100)\n  }\n}\n\nscheduleWrites()\n/package.json\u0004{\n  \"name\": \"sonic-boom\",\n  \"version\": \"3.2.1\",\n  \"description\": \"Extremely fast utf8 only stream implementation\",\n  \"main\": \"index.js\",\n  \"type\": \"commonjs\",\n  \"types\": \"types/index.d.ts\",\n  \"scripts\": {\n    \"test\": \"npm run test:types && standard && tap test.js\",\n    \"test:unit\": \"tap test.js\",\n    \"test:types\": \"tsc && tsd && ts-node types/tests/test.ts\",\n    \"prepare\": \"husky install\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/pinojs/sonic-boom.git\"\n  },\n  \"keywords\": [\n    \"stream\",\n    \"fs\",\n    \"net\",\n    \"fd\",\n    \"file\",\n    \"descriptor\",\n    \"fast\"\n  ],\n  \"author\": \"Matteo Collina <hello@matteocollina.com>\",\n  \"license\": \"MIT\",\n  \"bugs\": {\n    \"url\": \"https://github.com/pinojs/sonic-boom/issues\"\n  },\n  \"homepage\": \"https://github.com/pinojs/sonic-boom#readme\",\n  \"devDependencies\": {\n    \"@types/node\": \"^18.0.0\",\n    \"fastbench\": \"^1.0.1\",\n    \"husky\": \"^8.0.1\",\n    \"proxyquire\": \"^2.1.3\",\n    \"standard\": \"^17.0.0\",\n    \"tap\": \"^16.2.0\",\n    \"tsd\": \"^0.25.0\",\n    \"typescript\": \"^4.7.2\",\n    \"ts-node\": \"^10.8.0\"\n  },\n  \"dependencies\": {\n    \"atomic-sleep\": \"^1.0.0\"\n  },\n  \"tsd\": {\n    \"directory\": \"./types\"\n  }\n}\n/.eslintignore'types/index.d.ts\ntypes/index.test-d.ts\n/.taprcDflow: false\nts: false\njsx: false\ntimeout: 120\ncheck-coverage: false\n/types/index.d.ts\u0006// Type definitions for sonic-boom 0.7\n// Definitions by: Alex Ferrando <https://github.com/alferpal>\n//                 Igor Savin <https://github.com/kibertoad>\n/// <reference types=\"node\"/>\n\nimport { EventEmitter } from 'events';\n\nexport default SonicBoom;\nexport type SonicBoomOpts = {\n    fd?: number | string | symbol\n    dest?: string | number\n    maxLength?: number\n    minLength?: number\n    maxWrite?: number\n    sync?: boolean\n    fsync?: boolean\n    append?: boolean\n    mode?: string | number\n    mkdir?: boolean\n    retryEAGAIN?: (err: Error, writeBufferLen: number, remainingBufferLen: number) => boolean\n}\n\nexport class SonicBoom extends EventEmitter {\n    /**\n     * @param [fileDescriptor] File path or numerical file descriptor\n     * relative protocol is enabled. Default: process.stdout\n     * @returns a new sonic-boom instance\n     */\n    constructor(opts: SonicBoomOpts)\n\n    /**\n     * Writes the string to the file. It will return false to signal the producer to slow down.\n     */\n    write(string: string): boolean;\n\n    /**\n     * Writes the current buffer to the file if a write was not in progress.\n     * Do nothing if minLength is zero or if it is already writing.\n     */\n    flush(): void;\n\n    /**\n     * Reopen the file in place, useful for log rotation.\n     */\n    reopen(fileDescriptor?: string | number): void;\n\n    /**\n     * Flushes the buffered data synchronously. This is a costly operation.\n     */\n    flushSync(): void;\n\n    /**\n     * Closes the stream, the data will be flushed down asynchronously\n     */\n    end(): void;\n\n    /**\n     * Closes the stream immediately, the data is not flushed.\n     */\n    destroy(): void;\n}\n/bench.js\u0005'use strict'\n\nconst bench = require('fastbench')\nconst SonicBoom = require('./')\nconst Console = require('console').Console\nconst fs = require('fs')\n\nconst core = fs.createWriteStream('/dev/null')\nconst fd = fs.openSync('/dev/null', 'w')\nconst sonic = new SonicBoom({ fd })\nconst sonic4k = new SonicBoom({ fd, minLength: 4096 })\nconst sonicSync = new SonicBoom({ fd, sync: true })\nconst sonicSync4k = new SonicBoom({ fd, minLength: 4096, sync: true })\nconst dummyConsole = new Console(fs.createWriteStream('/dev/null'))\n\nconst MAX = 10000\n\nlet str = ''\n\nfor (let i = 0; i < 10; i++) {\n  str += 'hello'\n}\n\nsetTimeout(doBench, 100)\n\nconst run = bench([\n  function benchSonic (cb) {\n    sonic.once('drain', cb)\n    for (let i = 0; i < MAX; i++) {\n      sonic.write(str)\n    }\n  },\n  function benchSonicSync (cb) {\n    sonicSync.once('drain', cb)\n    for (let i = 0; i < MAX; i++) {\n      sonicSync.write(str)\n    }\n  },\n  function benchSonic4k (cb) {\n    sonic4k.once('drain', cb)\n    for (let i = 0; i < MAX; i++) {\n      sonic4k.write(str)\n    }\n  },\n  function benchSonicSync4k (cb) {\n    sonicSync4k.once('drain', cb)\n    for (let i = 0; i < MAX; i++) {\n      sonicSync4k.write(str)\n    }\n  },\n  function benchCore (cb) {\n    core.once('drain', cb)\n    for (let i = 0; i < MAX; i++) {\n      core.write(str)\n    }\n  },\n  function benchConsole (cb) {\n    for (let i = 0; i < MAX; i++) {\n      dummyConsole.log(str)\n    }\n    setImmediate(cb)\n  }\n], 1000)\n\nfunction doBench () {\n  run(run)\n}\n/.husky/pre-commit>#!/usr/bin/env sh\n. \"$(dirname -- \"$0\")/_/husky.sh\"\n\nnpm test\n/example.jsĹ'use strict'\n\nconst SonicBoom = require('.')\nconst sonic = new SonicBoom({ fd: process.stdout.fd }) // or 'destination'\n\nfor (let i = 0; i < 10; i++) {\n  sonic.write('hello sonic\\n')\n}\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/c2FmZS1idWZmZXJANS4yLjE=",
    "content": "/index.d.ts\"\"declare module \"safe-buffer\" {\n  export class Buffer {\n    length: number\n    write(string: string, offset?: number, length?: number, encoding?: string): number;\n    toString(encoding?: string, start?: number, end?: number): string;\n    toJSON(): { type: 'Buffer', data: any[] };\n    equals(otherBuffer: Buffer): boolean;\n    compare(otherBuffer: Buffer, targetStart?: number, targetEnd?: number, sourceStart?: number, sourceEnd?: number): number;\n    copy(targetBuffer: Buffer, targetStart?: number, sourceStart?: number, sourceEnd?: number): number;\n    slice(start?: number, end?: number): Buffer;\n    writeUIntLE(value: number, offset: number, byteLength: number, noAssert?: boolean): number;\n    writeUIntBE(value: number, offset: number, byteLength: number, noAssert?: boolean): number;\n    writeIntLE(value: number, offset: number, byteLength: number, noAssert?: boolean): number;\n    writeIntBE(value: number, offset: number, byteLength: number, noAssert?: boolean): number;\n    readUIntLE(offset: number, byteLength: number, noAssert?: boolean): number;\n    readUIntBE(offset: number, byteLength: number, noAssert?: boolean): number;\n    readIntLE(offset: number, byteLength: number, noAssert?: boolean): number;\n    readIntBE(offset: number, byteLength: number, noAssert?: boolean): number;\n    readUInt8(offset: number, noAssert?: boolean): number;\n    readUInt16LE(offset: number, noAssert?: boolean): number;\n    readUInt16BE(offset: number, noAssert?: boolean): number;\n    readUInt32LE(offset: number, noAssert?: boolean): number;\n    readUInt32BE(offset: number, noAssert?: boolean): number;\n    readInt8(offset: number, noAssert?: boolean): number;\n    readInt16LE(offset: number, noAssert?: boolean): number;\n    readInt16BE(offset: number, noAssert?: boolean): number;\n    readInt32LE(offset: number, noAssert?: boolean): number;\n    readInt32BE(offset: number, noAssert?: boolean): number;\n    readFloatLE(offset: number, noAssert?: boolean): number;\n    readFloatBE(offset: number, noAssert?: boolean): number;\n    readDoubleLE(offset: number, noAssert?: boolean): number;\n    readDoubleBE(offset: number, noAssert?: boolean): number;\n    swap16(): Buffer;\n    swap32(): Buffer;\n    swap64(): Buffer;\n    writeUInt8(value: number, offset: number, noAssert?: boolean): number;\n    writeUInt16LE(value: number, offset: number, noAssert?: boolean): number;\n    writeUInt16BE(value: number, offset: number, noAssert?: boolean): number;\n    writeUInt32LE(value: number, offset: number, noAssert?: boolean): number;\n    writeUInt32BE(value: number, offset: number, noAssert?: boolean): number;\n    writeInt8(value: number, offset: number, noAssert?: boolean): number;\n    writeInt16LE(value: number, offset: number, noAssert?: boolean): number;\n    writeInt16BE(value: number, offset: number, noAssert?: boolean): number;\n    writeInt32LE(value: number, offset: number, noAssert?: boolean): number;\n    writeInt32BE(value: number, offset: number, noAssert?: boolean): number;\n    writeFloatLE(value: number, offset: number, noAssert?: boolean): number;\n    writeFloatBE(value: number, offset: number, noAssert?: boolean): number;\n    writeDoubleLE(value: number, offset: number, noAssert?: boolean): number;\n    writeDoubleBE(value: number, offset: number, noAssert?: boolean): number;\n    fill(value: any, offset?: number, end?: number): this;\n    indexOf(value: string | number | Buffer, byteOffset?: number, encoding?: string): number;\n    lastIndexOf(value: string | number | Buffer, byteOffset?: number, encoding?: string): number;\n    includes(value: string | number | Buffer, byteOffset?: number, encoding?: string): boolean;\n\n    /**\n     * Allocates a new buffer containing the given {str}.\n     *\n     * @param str String to store in buffer.\n     * @param encoding encoding to use, optional.  Default is 'utf8'\n     */\n     constructor (str: string, encoding?: string);\n    /**\n     * Allocates a new buffer of {size} octets.\n     *\n     * @param size count of octets to allocate.\n     */\n    constructor (size: number);\n    /**\n     * Allocates a new buffer containing the given {array} of octets.\n     *\n     * @param array The octets to store.\n     */\n    constructor (array: Uint8Array);\n    /**\n     * Produces a Buffer backed by the same allocated memory as\n     * the given {ArrayBuffer}.\n     *\n     *\n     * @param arrayBuffer The ArrayBuffer with which to share memory.\n     */\n    constructor (arrayBuffer: ArrayBuffer);\n    /**\n     * Allocates a new buffer containing the given {array} of octets.\n     *\n     * @param array The octets to store.\n     */\n    constructor (array: any[]);\n    /**\n     * Copies the passed {buffer} data onto a new {Buffer} instance.\n     *\n     * @param buffer The buffer to copy.\n     */\n    constructor (buffer: Buffer);\n    prototype: Buffer;\n    /**\n     * Allocates a new Buffer using an {array} of octets.\n     *\n     * @param array\n     */\n    static from(array: any[]): Buffer;\n    /**\n     * When passed a reference to the .buffer property of a TypedArray instance,\n     * the newly created Buffer will share the same allocated memory as the TypedArray.\n     * The optional {byteOffset} and {length} arguments specify a memory range\n     * within the {arrayBuffer} that will be shared by the Buffer.\n     *\n     * @param arrayBuffer The .buffer property of a TypedArray or a new ArrayBuffer()\n     * @param byteOffset\n     * @param length\n     */\n    static from(arrayBuffer: ArrayBuffer, byteOffset?: number, length?: number): Buffer;\n    /**\n     * Copies the passed {buffer} data onto a new Buffer instance.\n     *\n     * @param buffer\n     */\n    static from(buffer: Buffer): Buffer;\n    /**\n     * Creates a new Buffer containing the given JavaScript string {str}.\n     * If provided, the {encoding} parameter identifies the character encoding.\n     * If not provided, {encoding} defaults to 'utf8'.\n     *\n     * @param str\n     */\n    static from(str: string, encoding?: string): Buffer;\n    /**\n     * Returns true if {obj} is a Buffer\n     *\n     * @param obj object to test.\n     */\n    static isBuffer(obj: any): obj is Buffer;\n    /**\n     * Returns true if {encoding} is a valid encoding argument.\n     * Valid string encodings in Node 0.12: 'ascii'|'utf8'|'utf16le'|'ucs2'(alias of 'utf16le')|'base64'|'binary'(deprecated)|'hex'\n     *\n     * @param encoding string to test.\n     */\n    static isEncoding(encoding: string): boolean;\n    /**\n     * Gives the actual byte length of a string. encoding defaults to 'utf8'.\n     * This is not the same as String.prototype.length since that returns the number of characters in a string.\n     *\n     * @param string string to test.\n     * @param encoding encoding used to evaluate (defaults to 'utf8')\n     */\n    static byteLength(string: string, encoding?: string): number;\n    /**\n     * Returns a buffer which is the result of concatenating all the buffers in the list together.\n     *\n     * If the list has no items, or if the totalLength is 0, then it returns a zero-length buffer.\n     * If the list has exactly one item, then the first item of the list is returned.\n     * If the list has more than one item, then a new Buffer is created.\n     *\n     * @param list An array of Buffer objects to concatenate\n     * @param totalLength Total length of the buffers when concatenated.\n     *   If totalLength is not provided, it is read from the buffers in the list. However, this adds an additional loop to the function, so it is faster to provide the length explicitly.\n     */\n    static concat(list: Buffer[], totalLength?: number): Buffer;\n    /**\n     * The same as buf1.compare(buf2).\n     */\n    static compare(buf1: Buffer, buf2: Buffer): number;\n    /**\n     * Allocates a new buffer of {size} octets.\n     *\n     * @param size count of octets to allocate.\n     * @param fill if specified, buffer will be initialized by calling buf.fill(fill).\n     *    If parameter is omitted, buffer will be filled with zeros.\n     * @param encoding encoding used for call to buf.fill while initalizing\n     */\n    static alloc(size: number, fill?: string | Buffer | number, encoding?: string): Buffer;\n    /**\n     * Allocates a new buffer of {size} octets, leaving memory not initialized, so the contents\n     * of the newly created Buffer are unknown and may contain sensitive data.\n     *\n     * @param size count of octets to allocate\n     */\n    static allocUnsafe(size: number): Buffer;\n    /**\n     * Allocates a new non-pooled buffer of {size} octets, leaving memory not initialized, so the contents\n     * of the newly created Buffer are unknown and may contain sensitive data.\n     *\n     * @param size count of octets to allocate\n     */\n    static allocUnsafeSlow(size: number): Buffer;\n  }\n}/package.json\u0004!{\n  \"name\": \"safe-buffer\",\n  \"description\": \"Safer Node.js Buffer API\",\n  \"version\": \"5.2.1\",\n  \"author\": {\n    \"name\": \"Feross Aboukhadijeh\",\n    \"email\": \"feross@feross.org\",\n    \"url\": \"https://feross.org\"\n  },\n  \"bugs\": {\n    \"url\": \"https://github.com/feross/safe-buffer/issues\"\n  },\n  \"devDependencies\": {\n    \"standard\": \"*\",\n    \"tape\": \"^5.0.0\"\n  },\n  \"homepage\": \"https://github.com/feross/safe-buffer\",\n  \"keywords\": [\n    \"buffer\",\n    \"buffer allocate\",\n    \"node security\",\n    \"safe\",\n    \"safe-buffer\",\n    \"security\",\n    \"uninitialized\"\n  ],\n  \"license\": \"MIT\",\n  \"main\": \"index.js\",\n  \"types\": \"index.d.ts\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git://github.com/feross/safe-buffer.git\"\n  },\n  \"scripts\": {\n    \"test\": \"standard && tape test/*.js\"\n  },\n  \"funding\": [\n    {\n      \"type\": \"github\",\n      \"url\": \"https://github.com/sponsors/feross\"\n    },\n    {\n      \"type\": \"patreon\",\n      \"url\": \"https://www.patreon.com/feross\"\n    },\n    {\n      \"type\": \"consulting\",\n      \"url\": \"https://feross.org/support\"\n    }\n  ]\n}\n/README.mdLc# safe-buffer [![travis][travis-image]][travis-url] [![npm][npm-image]][npm-url] [![downloads][downloads-image]][downloads-url] [![javascript style guide][standard-image]][standard-url]\n\n[travis-image]: https://img.shields.io/travis/feross/safe-buffer/master.svg\n[travis-url]: https://travis-ci.org/feross/safe-buffer\n[npm-image]: https://img.shields.io/npm/v/safe-buffer.svg\n[npm-url]: https://npmjs.org/package/safe-buffer\n[downloads-image]: https://img.shields.io/npm/dm/safe-buffer.svg\n[downloads-url]: https://npmjs.org/package/safe-buffer\n[standard-image]: https://img.shields.io/badge/code_style-standard-brightgreen.svg\n[standard-url]: https://standardjs.com\n\n#### Safer Node.js Buffer API\n\n**Use the new Node.js Buffer APIs (`Buffer.from`, `Buffer.alloc`,\n`Buffer.allocUnsafe`, `Buffer.allocUnsafeSlow`) in all versions of Node.js.**\n\n**Uses the built-in implementation when available.**\n\n## install\n\n```\nnpm install safe-buffer\n```\n\n## usage\n\nThe goal of this package is to provide a safe replacement for the node.js `Buffer`.\n\nIt's a drop-in replacement for `Buffer`. You can use it by adding one `require` line to\nthe top of your node.js modules:\n\n```js\nvar Buffer = require('safe-buffer').Buffer\n\n// Existing buffer code will continue to work without issues:\n\nnew Buffer('hey', 'utf8')\nnew Buffer([1, 2, 3], 'utf8')\nnew Buffer(obj)\nnew Buffer(16) // create an uninitialized buffer (potentially unsafe)\n\n// But you can use these new explicit APIs to make clear what you want:\n\nBuffer.from('hey', 'utf8') // convert from many types to a Buffer\nBuffer.alloc(16) // create a zero-filled buffer (safe)\nBuffer.allocUnsafe(16) // create an uninitialized buffer (potentially unsafe)\n```\n\n## api\n\n### Class Method: Buffer.from(array)\n<!-- YAML\nadded: v3.0.0\n-->\n\n* `array` {Array}\n\nAllocates a new `Buffer` using an `array` of octets.\n\n```js\nconst buf = Buffer.from([0x62,0x75,0x66,0x66,0x65,0x72]);\n  // creates a new Buffer containing ASCII bytes\n  // ['b','u','f','f','e','r']\n```\n\nA `TypeError` will be thrown if `array` is not an `Array`.\n\n### Class Method: Buffer.from(arrayBuffer[, byteOffset[, length]])\n<!-- YAML\nadded: v5.10.0\n-->\n\n* `arrayBuffer` {ArrayBuffer} The `.buffer` property of a `TypedArray` or\n  a `new ArrayBuffer()`\n* `byteOffset` {Number} Default: `0`\n* `length` {Number} Default: `arrayBuffer.length - byteOffset`\n\nWhen passed a reference to the `.buffer` property of a `TypedArray` instance,\nthe newly created `Buffer` will share the same allocated memory as the\nTypedArray.\n\n```js\nconst arr = new Uint16Array(2);\narr[0] = 5000;\narr[1] = 4000;\n\nconst buf = Buffer.from(arr.buffer); // shares the memory with arr;\n\nconsole.log(buf);\n  // Prints: <Buffer 88 13 a0 0f>\n\n// changing the TypedArray changes the Buffer also\narr[1] = 6000;\n\nconsole.log(buf);\n  // Prints: <Buffer 88 13 70 17>\n```\n\nThe optional `byteOffset` and `length` arguments specify a memory range within\nthe `arrayBuffer` that will be shared by the `Buffer`.\n\n```js\nconst ab = new ArrayBuffer(10);\nconst buf = Buffer.from(ab, 0, 2);\nconsole.log(buf.length);\n  // Prints: 2\n```\n\nA `TypeError` will be thrown if `arrayBuffer` is not an `ArrayBuffer`.\n\n### Class Method: Buffer.from(buffer)\n<!-- YAML\nadded: v3.0.0\n-->\n\n* `buffer` {Buffer}\n\nCopies the passed `buffer` data onto a new `Buffer` instance.\n\n```js\nconst buf1 = Buffer.from('buffer');\nconst buf2 = Buffer.from(buf1);\n\nbuf1[0] = 0x61;\nconsole.log(buf1.toString());\n  // 'auffer'\nconsole.log(buf2.toString());\n  // 'buffer' (copy is not changed)\n```\n\nA `TypeError` will be thrown if `buffer` is not a `Buffer`.\n\n### Class Method: Buffer.from(str[, encoding])\n<!-- YAML\nadded: v5.10.0\n-->\n\n* `str` {String} String to encode.\n* `encoding` {String} Encoding to use, Default: `'utf8'`\n\nCreates a new `Buffer` containing the given JavaScript string `str`. If\nprovided, the `encoding` parameter identifies the character encoding.\nIf not provided, `encoding` defaults to `'utf8'`.\n\n```js\nconst buf1 = Buffer.from('this is a tést');\nconsole.log(buf1.toString());\n  // prints: this is a tést\nconsole.log(buf1.toString('ascii'));\n  // prints: this is a tC)st\n\nconst buf2 = Buffer.from('7468697320697320612074c3a97374', 'hex');\nconsole.log(buf2.toString());\n  // prints: this is a tést\n```\n\nA `TypeError` will be thrown if `str` is not a string.\n\n### Class Method: Buffer.alloc(size[, fill[, encoding]])\n<!-- YAML\nadded: v5.10.0\n-->\n\n* `size` {Number}\n* `fill` {Value} Default: `undefined`\n* `encoding` {String} Default: `utf8`\n\nAllocates a new `Buffer` of `size` bytes. If `fill` is `undefined`, the\n`Buffer` will be *zero-filled*.\n\n```js\nconst buf = Buffer.alloc(5);\nconsole.log(buf);\n  // <Buffer 00 00 00 00 00>\n```\n\nThe `size` must be less than or equal to the value of\n`require('buffer').kMaxLength` (on 64-bit architectures, `kMaxLength` is\n`(2^31)-1`). Otherwise, a [`RangeError`][] is thrown. A zero-length Buffer will\nbe created if a `size` less than or equal to 0 is specified.\n\nIf `fill` is specified, the allocated `Buffer` will be initialized by calling\n`buf.fill(fill)`. See [`buf.fill()`][] for more information.\n\n```js\nconst buf = Buffer.alloc(5, 'a');\nconsole.log(buf);\n  // <Buffer 61 61 61 61 61>\n```\n\nIf both `fill` and `encoding` are specified, the allocated `Buffer` will be\ninitialized by calling `buf.fill(fill, encoding)`. For example:\n\n```js\nconst buf = Buffer.alloc(11, 'aGVsbG8gd29ybGQ=', 'base64');\nconsole.log(buf);\n  // <Buffer 68 65 6c 6c 6f 20 77 6f 72 6c 64>\n```\n\nCalling `Buffer.alloc(size)` can be significantly slower than the alternative\n`Buffer.allocUnsafe(size)` but ensures that the newly created `Buffer` instance\ncontents will *never contain sensitive data*.\n\nA `TypeError` will be thrown if `size` is not a number.\n\n### Class Method: Buffer.allocUnsafe(size)\n<!-- YAML\nadded: v5.10.0\n-->\n\n* `size` {Number}\n\nAllocates a new *non-zero-filled* `Buffer` of `size` bytes.  The `size` must\nbe less than or equal to the value of `require('buffer').kMaxLength` (on 64-bit\narchitectures, `kMaxLength` is `(2^31)-1`). Otherwise, a [`RangeError`][] is\nthrown. A zero-length Buffer will be created if a `size` less than or equal to\n0 is specified.\n\nThe underlying memory for `Buffer` instances created in this way is *not\ninitialized*. The contents of the newly created `Buffer` are unknown and\n*may contain sensitive data*. Use [`buf.fill(0)`][] to initialize such\n`Buffer` instances to zeroes.\n\n```js\nconst buf = Buffer.allocUnsafe(5);\nconsole.log(buf);\n  // <Buffer 78 e0 82 02 01>\n  // (octets will be different, every time)\nbuf.fill(0);\nconsole.log(buf);\n  // <Buffer 00 00 00 00 00>\n```\n\nA `TypeError` will be thrown if `size` is not a number.\n\nNote that the `Buffer` module pre-allocates an internal `Buffer` instance of\nsize `Buffer.poolSize` that is used as a pool for the fast allocation of new\n`Buffer` instances created using `Buffer.allocUnsafe(size)` (and the deprecated\n`new Buffer(size)` constructor) only when `size` is less than or equal to\n`Buffer.poolSize >> 1` (floor of `Buffer.poolSize` divided by two). The default\nvalue of `Buffer.poolSize` is `8192` but can be modified.\n\nUse of this pre-allocated internal memory pool is a key difference between\ncalling `Buffer.alloc(size, fill)` vs. `Buffer.allocUnsafe(size).fill(fill)`.\nSpecifically, `Buffer.alloc(size, fill)` will *never* use the internal Buffer\npool, while `Buffer.allocUnsafe(size).fill(fill)` *will* use the internal\nBuffer pool if `size` is less than or equal to half `Buffer.poolSize`. The\ndifference is subtle but can be important when an application requires the\nadditional performance that `Buffer.allocUnsafe(size)` provides.\n\n### Class Method: Buffer.allocUnsafeSlow(size)\n<!-- YAML\nadded: v5.10.0\n-->\n\n* `size` {Number}\n\nAllocates a new *non-zero-filled* and non-pooled `Buffer` of `size` bytes.  The\n`size` must be less than or equal to the value of\n`require('buffer').kMaxLength` (on 64-bit architectures, `kMaxLength` is\n`(2^31)-1`). Otherwise, a [`RangeError`][] is thrown. A zero-length Buffer will\nbe created if a `size` less than or equal to 0 is specified.\n\nThe underlying memory for `Buffer` instances created in this way is *not\ninitialized*. The contents of the newly created `Buffer` are unknown and\n*may contain sensitive data*. Use [`buf.fill(0)`][] to initialize such\n`Buffer` instances to zeroes.\n\nWhen using `Buffer.allocUnsafe()` to allocate new `Buffer` instances,\nallocations under 4KB are, by default, sliced from a single pre-allocated\n`Buffer`. This allows applications to avoid the garbage collection overhead of\ncreating many individually allocated Buffers. This approach improves both\nperformance and memory usage by eliminating the need to track and cleanup as\nmany `Persistent` objects.\n\nHowever, in the case where a developer may need to retain a small chunk of\nmemory from a pool for an indeterminate amount of time, it may be appropriate\nto create an un-pooled Buffer instance using `Buffer.allocUnsafeSlow()` then\ncopy out the relevant bits.\n\n```js\n// need to keep around a few small chunks of memory\nconst store = [];\n\nsocket.on('readable', () => {\n  const data = socket.read();\n  // allocate for retained data\n  const sb = Buffer.allocUnsafeSlow(10);\n  // copy the data into the new allocation\n  data.copy(sb, 0, 0, 10);\n  store.push(sb);\n});\n```\n\nUse of `Buffer.allocUnsafeSlow()` should be used only as a last resort *after*\na developer has observed undue memory retention in their applications.\n\nA `TypeError` will be thrown if `size` is not a number.\n\n### All the Rest\n\nThe rest of the `Buffer` API is exactly the same as in node.js.\n[See the docs](https://nodejs.org/api/buffer.html).\n\n\n## Related links\n\n- [Node.js issue: Buffer(number) is unsafe](https://github.com/nodejs/node/issues/4660)\n- [Node.js Enhancement Proposal: Buffer.from/Buffer.alloc/Buffer.zalloc/Buffer() soft-deprecate](https://github.com/nodejs/node-eps/pull/4)\n\n## Why is `Buffer` unsafe?\n\nToday, the node.js `Buffer` constructor is overloaded to handle many different argument\ntypes like `String`, `Array`, `Object`, `TypedArrayView` (`Uint8Array`, etc.),\n`ArrayBuffer`, and also `Number`.\n\nThe API is optimized for convenience: you can throw any type at it, and it will try to do\nwhat you want.\n\nBecause the Buffer constructor is so powerful, you often see code like this:\n\n```js\n// Convert UTF-8 strings to hex\nfunction toHex (str) {\n  return new Buffer(str).toString('hex')\n}\n```\n\n***But what happens if `toHex` is called with a `Number` argument?***\n\n### Remote Memory Disclosure\n\nIf an attacker can make your program call the `Buffer` constructor with a `Number`\nargument, then they can make it allocate uninitialized memory from the node.js process.\nThis could potentially disclose TLS private keys, user data, or database passwords.\n\nWhen the `Buffer` constructor is passed a `Number` argument, it returns an\n**UNINITIALIZED** block of memory of the specified `size`. When you create a `Buffer` like\nthis, you **MUST** overwrite the contents before returning it to the user.\n\nFrom the [node.js docs](https://nodejs.org/api/buffer.html#buffer_new_buffer_size):\n\n> `new Buffer(size)`\n>\n> - `size` Number\n>\n> The underlying memory for `Buffer` instances created in this way is not initialized.\n> **The contents of a newly created `Buffer` are unknown and could contain sensitive\n> data.** Use `buf.fill(0)` to initialize a Buffer to zeroes.\n\n(Emphasis our own.)\n\nWhenever the programmer intended to create an uninitialized `Buffer` you often see code\nlike this:\n\n```js\nvar buf = new Buffer(16)\n\n// Immediately overwrite the uninitialized buffer with data from another buffer\nfor (var i = 0; i < buf.length; i++) {\n  buf[i] = otherBuf[i]\n}\n```\n\n\n### Would this ever be a problem in real code?\n\nYes. It's surprisingly common to forget to check the type of your variables in a\ndynamically-typed language like JavaScript.\n\nUsually the consequences of assuming the wrong type is that your program crashes with an\nuncaught exception. But the failure mode for forgetting to check the type of arguments to\nthe `Buffer` constructor is more catastrophic.\n\nHere's an example of a vulnerable service that takes a JSON payload and converts it to\nhex:\n\n```js\n// Take a JSON payload {str: \"some string\"} and convert it to hex\nvar server = http.createServer(function (req, res) {\n  var data = ''\n  req.setEncoding('utf8')\n  req.on('data', function (chunk) {\n    data += chunk\n  })\n  req.on('end', function () {\n    var body = JSON.parse(data)\n    res.end(new Buffer(body.str).toString('hex'))\n  })\n})\n\nserver.listen(8080)\n```\n\nIn this example, an http client just has to send:\n\n```json\n{\n  \"str\": 1000\n}\n```\n\nand it will get back 1,000 bytes of uninitialized memory from the server.\n\nThis is a very serious bug. It's similar in severity to the\n[the Heartbleed bug](http://heartbleed.com/) that allowed disclosure of OpenSSL process\nmemory by remote attackers.\n\n\n### Which real-world packages were vulnerable?\n\n#### [`bittorrent-dht`](https://www.npmjs.com/package/bittorrent-dht)\n\n[Mathias Buus](https://github.com/mafintosh) and I\n([Feross Aboukhadijeh](http://feross.org/)) found this issue in one of our own packages,\n[`bittorrent-dht`](https://www.npmjs.com/package/bittorrent-dht). The bug would allow\nanyone on the internet to send a series of messages to a user of `bittorrent-dht` and get\nthem to reveal 20 bytes at a time of uninitialized memory from the node.js process.\n\nHere's\n[the commit](https://github.com/feross/bittorrent-dht/commit/6c7da04025d5633699800a99ec3fbadf70ad35b8)\nthat fixed it. We released a new fixed version, created a\n[Node Security Project disclosure](https://nodesecurity.io/advisories/68), and deprecated all\nvulnerable versions on npm so users will get a warning to upgrade to a newer version.\n\n#### [`ws`](https://www.npmjs.com/package/ws)\n\nThat got us wondering if there were other vulnerable packages. Sure enough, within a short\nperiod of time, we found the same issue in [`ws`](https://www.npmjs.com/package/ws), the\nmost popular WebSocket implementation in node.js.\n\nIf certain APIs were called with `Number` parameters instead of `String` or `Buffer` as\nexpected, then uninitialized server memory would be disclosed to the remote peer.\n\nThese were the vulnerable methods:\n\n```js\nsocket.send(number)\nsocket.ping(number)\nsocket.pong(number)\n```\n\nHere's a vulnerable socket server with some echo functionality:\n\n```js\nserver.on('connection', function (socket) {\n  socket.on('message', function (message) {\n    message = JSON.parse(message)\n    if (message.type === 'echo') {\n      socket.send(message.data) // send back the user's message\n    }\n  })\n})\n```\n\n`socket.send(number)` called on the server, will disclose server memory.\n\nHere's [the release](https://github.com/websockets/ws/releases/tag/1.0.1) where the issue\nwas fixed, with a more detailed explanation. Props to\n[Arnout Kazemier](https://github.com/3rd-Eden) for the quick fix. Here's the\n[Node Security Project disclosure](https://nodesecurity.io/advisories/67).\n\n\n### What's the solution?\n\nIt's important that node.js offers a fast way to get memory otherwise performance-critical\napplications would needlessly get a lot slower.\n\nBut we need a better way to *signal our intent* as programmers. **When we want\nuninitialized memory, we should request it explicitly.**\n\nSensitive functionality should not be packed into a developer-friendly API that loosely\naccepts many different types. This type of API encourages the lazy practice of passing\nvariables in without checking the type very carefully.\n\n#### A new API: `Buffer.allocUnsafe(number)`\n\nThe functionality of creating buffers with uninitialized memory should be part of another\nAPI. We propose `Buffer.allocUnsafe(number)`. This way, it's not part of an API that\nfrequently gets user input of all sorts of different types passed into it.\n\n```js\nvar buf = Buffer.allocUnsafe(16) // careful, uninitialized memory!\n\n// Immediately overwrite the uninitialized buffer with data from another buffer\nfor (var i = 0; i < buf.length; i++) {\n  buf[i] = otherBuf[i]\n}\n```\n\n\n### How do we fix node.js core?\n\nWe sent [a PR to node.js core](https://github.com/nodejs/node/pull/4514) (merged as\n`semver-major`) which defends against one case:\n\n```js\nvar str = 16\nnew Buffer(str, 'utf8')\n```\n\nIn this situation, it's implied that the programmer intended the first argument to be a\nstring, since they passed an encoding as a second argument. Today, node.js will allocate\nuninitialized memory in the case of `new Buffer(number, encoding)`, which is probably not\nwhat the programmer intended.\n\nBut this is only a partial solution, since if the programmer does `new Buffer(variable)`\n(without an `encoding` parameter) there's no way to know what they intended. If `variable`\nis sometimes a number, then uninitialized memory will sometimes be returned.\n\n### What's the real long-term fix?\n\nWe could deprecate and remove `new Buffer(number)` and use `Buffer.allocUnsafe(number)` when\nwe need uninitialized memory. But that would break 1000s of packages.\n\n~~We believe the best solution is to:~~\n\n~~1. Change `new Buffer(number)` to return safe, zeroed-out memory~~\n\n~~2. Create a new API for creating uninitialized Buffers. We propose: `Buffer.allocUnsafe(number)`~~\n\n#### Update\n\nWe now support adding three new APIs:\n\n- `Buffer.from(value)` - convert from any type to a buffer\n- `Buffer.alloc(size)` - create a zero-filled buffer\n- `Buffer.allocUnsafe(size)` - create an uninitialized buffer with given size\n\nThis solves the core problem that affected `ws` and `bittorrent-dht` which is\n`Buffer(variable)` getting tricked into taking a number argument.\n\nThis way, existing code continues working and the impact on the npm ecosystem will be\nminimal. Over time, npm maintainers can migrate performance-critical code to use\n`Buffer.allocUnsafe(number)` instead of `new Buffer(number)`.\n\n\n### Conclusion\n\nWe think there's a serious design issue with the `Buffer` API as it exists today. It\npromotes insecure software by putting high-risk functionality into a convenient API\nwith friendly \"developer ergonomics\".\n\nThis wasn't merely a theoretical exercise because we found the issue in some of the\nmost popular npm packages.\n\nFortunately, there's an easy fix that can be applied today. Use `safe-buffer` in place of\n`buffer`.\n\n```js\nvar Buffer = require('safe-buffer').Buffer\n```\n\nEventually, we hope that node.js core can switch to this new, safer behavior. We believe\nthe impact on the ecosystem would be minimal since it's not a breaking change.\nWell-maintained, popular packages would be updated to use `Buffer.alloc` quickly, while\nolder, insecure packages would magically become safe from this attack vector.\n\n\n## links\n\n- [Node.js PR: buffer: throw if both length and enc are passed](https://github.com/nodejs/node/pull/4514)\n- [Node Security Project disclosure for `ws`](https://nodesecurity.io/advisories/67)\n- [Node Security Project disclosure for`bittorrent-dht`](https://nodesecurity.io/advisories/68)\n\n\n## credit\n\nThe original issues in `bittorrent-dht`\n([disclosure](https://nodesecurity.io/advisories/68)) and\n`ws` ([disclosure](https://nodesecurity.io/advisories/67)) were discovered by\n[Mathias Buus](https://github.com/mafintosh) and\n[Feross Aboukhadijeh](http://feross.org/).\n\nThanks to [Adam Baldwin](https://github.com/evilpacket) for helping disclose these issues\nand for his work running the [Node Security Project](https://nodesecurity.io/).\n\nThanks to [John Hiesey](https://github.com/jhiesey) for proofreading this README and\nauditing the code.\n\n\n## license\n\nMIT. Copyright (C) [Feross Aboukhadijeh](http://feross.org)\n/index.js\u0006/*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\n/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n  for (var key in src) {\n    dst[key] = src[key]\n  }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n  module.exports = buffer\n} else {\n  // Copy properties from require('buffer')\n  copyProps(buffer, exports)\n  exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n  return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.prototype = Object.create(Buffer.prototype)\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n  if (typeof arg === 'number') {\n    throw new TypeError('Argument must not be a number')\n  }\n  return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  var buf = Buffer(size)\n  if (fill !== undefined) {\n    if (typeof encoding === 'string') {\n      buf.fill(fill, encoding)\n    } else {\n      buf.fill(fill)\n    }\n  } else {\n    buf.fill(0)\n  }\n  return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  return buffer.SlowBuffer(size)\n}\n/LICENSE\u00049The MIT License (MIT)\n\nCopyright (c) Feross Aboukhadijeh\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/c2FmZS1yZWdleDJAMi4wLjA=",
    "content": "/package.json\u0003\u001e{\n  \"name\": \"safe-regex2\",\n  \"version\": \"2.0.0\",\n  \"description\": \"detect possibly catastrophic, exponential-time regular expressions\",\n  \"main\": \"index.js\",\n  \"dependencies\": {\n    \"ret\": \"~0.2.0\"\n  },\n  \"devDependencies\": {\n    \"standard\": \"^12.0.1\",\n    \"tape\": \"^4.0.0\"\n  },\n  \"scripts\": {\n    \"test\": \"standard && tape test/*.js\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git://github.com/fastify/safe-regex.git\"\n  },\n  \"homepage\": \"https://github.com/fastify/safe-regex\",\n  \"keywords\": [\n    \"catastrophic\",\n    \"exponential\",\n    \"regex\",\n    \"safe\",\n    \"sandbox\"\n  ],\n  \"author\": {\n    \"name\": \"James Halliday\",\n    \"email\": \"mail@substack.net\",\n    \"url\": \"http://substack.net\"\n  },\n  \"contributors\": [\n    \"Matteo Collina <hello@matteocollina.com>\"\n  ],\n  \"license\": \"MIT\"\n}\n/.travis.yml5language: node_js\nnode_js:\n  - 6\n  - 8\n  - 10\n  - 11\n/example/safe.js_var safe = require('../')\nvar regex = process.argv.slice(2).join(' ')\nconsole.log(safe(regex))\n/index.js\u0004>'use strict'\n\nvar parse = require('ret')\nvar types = parse.types\n\nmodule.exports = function (re, opts) {\n  if (!opts) opts = {}\n  var replimit = opts.limit === undefined ? 25 : opts.limit\n\n  if (isRegExp(re)) re = re.source\n  else if (typeof re !== 'string') re = String(re)\n\n  try { re = parse(re) } catch (err) { return false }\n\n  var reps = 0\n  return (function walk (node, starHeight) {\n    var i\n    var ok\n    var len\n\n    if (node.type === types.REPETITION) {\n      starHeight++\n      reps++\n      if (starHeight > 1) return false\n      if (reps > replimit) return false\n    }\n\n    if (node.options) {\n      for (i = 0, len = node.options.length; i < len; i++) {\n        ok = walk({ stack: node.options[i] }, starHeight)\n        if (!ok) return false\n      }\n    }\n    var stack = node.stack || (node.value && node.value.stack)\n    if (!stack) return true\n\n    for (i = 0; i < stack.length; i++) {\n      ok = walk(stack[i], starHeight)\n      if (!ok) return false\n    }\n\n    return true\n  })(re, 0)\n}\n\nfunction isRegExp (x) {\n  return {}.toString.call(x) === '[object RegExp]'\n}\n/test/regex.js\u0003pvar safe = require('../')\nvar test = require('tape')\n\nvar good = [\n  /\\bOakland\\b/,\n  /\\b(Oakland|San Francisco)\\b/i,\n  /^\\d+1337\\d+$/i,\n  /^\\d+(1337|404)\\d+$/i,\n  /^\\d+(1337|404)*\\d+$/i,\n  RegExp(Array(26).join('a?') + Array(26).join('a'))\n]\n\ntest('safe regex', function (t) {\n  t.plan(good.length)\n  good.forEach(function (re) {\n    t.equal(safe(re), true)\n  })\n})\n\nvar bad = [\n  /^(a?){25}(a){25}$/,\n  RegExp(Array(27).join('a?') + Array(27).join('a')),\n  /(x+x+)+y/,\n  /foo|(x+x+)+y/,\n  /(a+){10}y/,\n  /(a+){2}y/,\n  /(.*){1,32000}[bc]/\n]\n\ntest('unsafe regex', function (t) {\n  t.plan(bad.length)\n  bad.forEach(function (re) {\n    t.equal(safe(re), false)\n  })\n})\n\nvar invalid = [\n  '*Oakland*',\n  'hey(yoo))',\n  'abcde(?>hellow)',\n  '[abc'\n]\n\ntest('invalid regex', function (t) {\n  t.plan(invalid.length)\n  invalid.forEach(function (re) {\n    t.equal(safe(re), false)\n  })\n})\n/LICENSE\u00041This software is released under the MIT license:\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n/readme.markdown\u0005{# safe-regex2\n\n[![Build Status](https://travis-ci.com/fastify/safe-regex.svg?branch=master)](https://travis-ci.com/fastify/safe-regex)\n\ndetect potentially\n[catastrophic](http://regular-expressions.mobi/catastrophic.html)\n[exponential-time](http://perlgeek.de/blog-en/perl-tips/in-search-of-an-exponetial-regexp.html)\nregular expressions by limiting the\n[star height](https://en.wikipedia.org/wiki/Star_height) to 1\n\nThis is a fork of https://github.com/substack/safe-regex at 1.1.0.\n\nWARNING: This module has both false positives and false negatives.\nIt is not meant as a full checker, but it detect basic cases.\n\n# example\n\n``` js\nvar safe = require('safe-regex2');\nvar regex = process.argv.slice(2).join(' ');\nconsole.log(safe(regex));\n```\n\n```\n$ node safe.js '(x+x+)+y'\nfalse\n$ node safe.js '(beep|boop)*'\ntrue\n$ node safe.js '(a+){10}'\nfalse\n$ node safe.js '\\blocation\\s*:[^:\\n]+\\b(Oakland|San Francisco)\\b'\ntrue\n```\n\n# methods\n\n``` js\nvar safe = require('safe-regex')\n```\n\n## var ok = safe(re, opts={})\n\nReturn a boolean `ok` whether or not the regex `re` is safe and not possibly\ncatastrophic.\n\n`re` can be a `RegExp` object or just a string.\n\nIf the `re` is a string and is an invalid regex, returns `false`.\n\n* `opts.limit` - maximum number of allowed repetitions in the entire regex.\nDefault: `25`.\n\n# install\n\nWith [npm](https://npmjs.org) do:\n\n```\nnpm install safe-regex2\n```\n\n# license\n\nMIT\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/c2FmZS1zdGFibGUtc3RyaW5naWZ5QDIuNC4z",
    "content": "/esm/wrapper.jsďimport cjsModule from '../index.js'\n\nexport const configure = cjsModule.configure\n\nexport const stringify = cjsModule\nexport default cjsModule\n/index.jsK'use strict'\n\nconst { hasOwnProperty } = Object.prototype\n\nconst stringify = configure()\n\n// @ts-expect-error\nstringify.configure = configure\n// @ts-expect-error\nstringify.stringify = stringify\n\n// @ts-expect-error\nstringify.default = stringify\n\n// @ts-expect-error used for named export\nexports.stringify = stringify\n// @ts-expect-error used for named export\nexports.configure = configure\n\nmodule.exports = stringify\n\n// eslint-disable-next-line no-control-regex\nconst strEscapeSequencesRegExp = /[\\u0000-\\u001f\\u0022\\u005c\\ud800-\\udfff]|[\\ud800-\\udbff](?![\\udc00-\\udfff])|(?:[^\\ud800-\\udbff]|^)[\\udc00-\\udfff]/\n\n// Escape C0 control characters, double quotes, the backslash and every code\n// unit with a numeric value in the inclusive range 0xD800 to 0xDFFF.\nfunction strEscape (str) {\n  // Some magic numbers that worked out fine while benchmarking with v8 8.0\n  if (str.length < 5000 && !strEscapeSequencesRegExp.test(str)) {\n    return `\"${str}\"`\n  }\n  return JSON.stringify(str)\n}\n\nfunction insertSort (array) {\n  // Insertion sort is very efficient for small input sizes but it has a bad\n  // worst case complexity. Thus, use native array sort for bigger values.\n  if (array.length > 2e2) {\n    return array.sort()\n  }\n  for (let i = 1; i < array.length; i++) {\n    const currentValue = array[i]\n    let position = i\n    while (position !== 0 && array[position - 1] > currentValue) {\n      array[position] = array[position - 1]\n      position--\n    }\n    array[position] = currentValue\n  }\n  return array\n}\n\nconst typedArrayPrototypeGetSymbolToStringTag =\n  Object.getOwnPropertyDescriptor(\n    Object.getPrototypeOf(\n      Object.getPrototypeOf(\n        new Int8Array()\n      )\n    ),\n    Symbol.toStringTag\n  ).get\n\nfunction isTypedArrayWithEntries (value) {\n  return typedArrayPrototypeGetSymbolToStringTag.call(value) !== undefined && value.length !== 0\n}\n\nfunction stringifyTypedArray (array, separator, maximumBreadth) {\n  if (array.length < maximumBreadth) {\n    maximumBreadth = array.length\n  }\n  const whitespace = separator === ',' ? '' : ' '\n  let res = `\"0\":${whitespace}${array[0]}`\n  for (let i = 1; i < maximumBreadth; i++) {\n    res += `${separator}\"${i}\":${whitespace}${array[i]}`\n  }\n  return res\n}\n\nfunction getCircularValueOption (options) {\n  if (hasOwnProperty.call(options, 'circularValue')) {\n    const circularValue = options.circularValue\n    if (typeof circularValue === 'string') {\n      return `\"${circularValue}\"`\n    }\n    if (circularValue == null) {\n      return circularValue\n    }\n    if (circularValue === Error || circularValue === TypeError) {\n      return {\n        toString () {\n          throw new TypeError('Converting circular structure to JSON')\n        }\n      }\n    }\n    throw new TypeError('The \"circularValue\" argument must be of type string or the value null or undefined')\n  }\n  return '\"[Circular]\"'\n}\n\nfunction getBooleanOption (options, key) {\n  let value\n  if (hasOwnProperty.call(options, key)) {\n    value = options[key]\n    if (typeof value !== 'boolean') {\n      throw new TypeError(`The \"${key}\" argument must be of type boolean`)\n    }\n  }\n  return value === undefined ? true : value\n}\n\nfunction getPositiveIntegerOption (options, key) {\n  let value\n  if (hasOwnProperty.call(options, key)) {\n    value = options[key]\n    if (typeof value !== 'number') {\n      throw new TypeError(`The \"${key}\" argument must be of type number`)\n    }\n    if (!Number.isInteger(value)) {\n      throw new TypeError(`The \"${key}\" argument must be an integer`)\n    }\n    if (value < 1) {\n      throw new RangeError(`The \"${key}\" argument must be >= 1`)\n    }\n  }\n  return value === undefined ? Infinity : value\n}\n\nfunction getItemCount (number) {\n  if (number === 1) {\n    return '1 item'\n  }\n  return `${number} items`\n}\n\nfunction getUniqueReplacerSet (replacerArray) {\n  const replacerSet = new Set()\n  for (const value of replacerArray) {\n    if (typeof value === 'string' || typeof value === 'number') {\n      replacerSet.add(String(value))\n    }\n  }\n  return replacerSet\n}\n\nfunction getStrictOption (options) {\n  if (hasOwnProperty.call(options, 'strict')) {\n    const value = options.strict\n    if (typeof value !== 'boolean') {\n      throw new TypeError('The \"strict\" argument must be of type boolean')\n    }\n    if (value) {\n      return (value) => {\n        let message = `Object can not safely be stringified. Received type ${typeof value}`\n        if (typeof value !== 'function') message += ` (${value.toString()})`\n        throw new Error(message)\n      }\n    }\n  }\n}\n\nfunction configure (options) {\n  options = { ...options }\n  const fail = getStrictOption(options)\n  if (fail) {\n    if (options.bigint === undefined) {\n      options.bigint = false\n    }\n    if (!('circularValue' in options)) {\n      options.circularValue = Error\n    }\n  }\n  const circularValue = getCircularValueOption(options)\n  const bigint = getBooleanOption(options, 'bigint')\n  const deterministic = getBooleanOption(options, 'deterministic')\n  const maximumDepth = getPositiveIntegerOption(options, 'maximumDepth')\n  const maximumBreadth = getPositiveIntegerOption(options, 'maximumBreadth')\n\n  function stringifyFnReplacer (key, parent, stack, replacer, spacer, indentation) {\n    let value = parent[key]\n\n    if (typeof value === 'object' && value !== null && typeof value.toJSON === 'function') {\n      value = value.toJSON(key)\n    }\n    value = replacer.call(parent, key, value)\n\n    switch (typeof value) {\n      case 'string':\n        return strEscape(value)\n      case 'object': {\n        if (value === null) {\n          return 'null'\n        }\n        if (stack.indexOf(value) !== -1) {\n          return circularValue\n        }\n\n        let res = ''\n        let join = ','\n        const originalIndentation = indentation\n\n        if (Array.isArray(value)) {\n          if (value.length === 0) {\n            return '[]'\n          }\n          if (maximumDepth < stack.length + 1) {\n            return '\"[Array]\"'\n          }\n          stack.push(value)\n          if (spacer !== '') {\n            indentation += spacer\n            res += `\\n${indentation}`\n            join = `,\\n${indentation}`\n          }\n          const maximumValuesToStringify = Math.min(value.length, maximumBreadth)\n          let i = 0\n          for (; i < maximumValuesToStringify - 1; i++) {\n            const tmp = stringifyFnReplacer(String(i), value, stack, replacer, spacer, indentation)\n            res += tmp !== undefined ? tmp : 'null'\n            res += join\n          }\n          const tmp = stringifyFnReplacer(String(i), value, stack, replacer, spacer, indentation)\n          res += tmp !== undefined ? tmp : 'null'\n          if (value.length - 1 > maximumBreadth) {\n            const removedKeys = value.length - maximumBreadth - 1\n            res += `${join}\"... ${getItemCount(removedKeys)} not stringified\"`\n          }\n          if (spacer !== '') {\n            res += `\\n${originalIndentation}`\n          }\n          stack.pop()\n          return `[${res}]`\n        }\n\n        let keys = Object.keys(value)\n        const keyLength = keys.length\n        if (keyLength === 0) {\n          return '{}'\n        }\n        if (maximumDepth < stack.length + 1) {\n          return '\"[Object]\"'\n        }\n        let whitespace = ''\n        let separator = ''\n        if (spacer !== '') {\n          indentation += spacer\n          join = `,\\n${indentation}`\n          whitespace = ' '\n        }\n        const maximumPropertiesToStringify = Math.min(keyLength, maximumBreadth)\n        if (deterministic && !isTypedArrayWithEntries(value)) {\n          keys = insertSort(keys)\n        }\n        stack.push(value)\n        for (let i = 0; i < maximumPropertiesToStringify; i++) {\n          const key = keys[i]\n          const tmp = stringifyFnReplacer(key, value, stack, replacer, spacer, indentation)\n          if (tmp !== undefined) {\n            res += `${separator}${strEscape(key)}:${whitespace}${tmp}`\n            separator = join\n          }\n        }\n        if (keyLength > maximumBreadth) {\n          const removedKeys = keyLength - maximumBreadth\n          res += `${separator}\"...\":${whitespace}\"${getItemCount(removedKeys)} not stringified\"`\n          separator = join\n        }\n        if (spacer !== '' && separator.length > 1) {\n          res = `\\n${indentation}${res}\\n${originalIndentation}`\n        }\n        stack.pop()\n        return `{${res}}`\n      }\n      case 'number':\n        return isFinite(value) ? String(value) : fail ? fail(value) : 'null'\n      case 'boolean':\n        return value === true ? 'true' : 'false'\n      case 'undefined':\n        return undefined\n      case 'bigint':\n        if (bigint) {\n          return String(value)\n        }\n        // fallthrough\n      default:\n        return fail ? fail(value) : undefined\n    }\n  }\n\n  function stringifyArrayReplacer (key, value, stack, replacer, spacer, indentation) {\n    if (typeof value === 'object' && value !== null && typeof value.toJSON === 'function') {\n      value = value.toJSON(key)\n    }\n\n    switch (typeof value) {\n      case 'string':\n        return strEscape(value)\n      case 'object': {\n        if (value === null) {\n          return 'null'\n        }\n        if (stack.indexOf(value) !== -1) {\n          return circularValue\n        }\n\n        const originalIndentation = indentation\n        let res = ''\n        let join = ','\n\n        if (Array.isArray(value)) {\n          if (value.length === 0) {\n            return '[]'\n          }\n          if (maximumDepth < stack.length + 1) {\n            return '\"[Array]\"'\n          }\n          stack.push(value)\n          if (spacer !== '') {\n            indentation += spacer\n            res += `\\n${indentation}`\n            join = `,\\n${indentation}`\n          }\n          const maximumValuesToStringify = Math.min(value.length, maximumBreadth)\n          let i = 0\n          for (; i < maximumValuesToStringify - 1; i++) {\n            const tmp = stringifyArrayReplacer(String(i), value[i], stack, replacer, spacer, indentation)\n            res += tmp !== undefined ? tmp : 'null'\n            res += join\n          }\n          const tmp = stringifyArrayReplacer(String(i), value[i], stack, replacer, spacer, indentation)\n          res += tmp !== undefined ? tmp : 'null'\n          if (value.length - 1 > maximumBreadth) {\n            const removedKeys = value.length - maximumBreadth - 1\n            res += `${join}\"... ${getItemCount(removedKeys)} not stringified\"`\n          }\n          if (spacer !== '') {\n            res += `\\n${originalIndentation}`\n          }\n          stack.pop()\n          return `[${res}]`\n        }\n        stack.push(value)\n        let whitespace = ''\n        if (spacer !== '') {\n          indentation += spacer\n          join = `,\\n${indentation}`\n          whitespace = ' '\n        }\n        let separator = ''\n        for (const key of replacer) {\n          const tmp = stringifyArrayReplacer(key, value[key], stack, replacer, spacer, indentation)\n          if (tmp !== undefined) {\n            res += `${separator}${strEscape(key)}:${whitespace}${tmp}`\n            separator = join\n          }\n        }\n        if (spacer !== '' && separator.length > 1) {\n          res = `\\n${indentation}${res}\\n${originalIndentation}`\n        }\n        stack.pop()\n        return `{${res}}`\n      }\n      case 'number':\n        return isFinite(value) ? String(value) : fail ? fail(value) : 'null'\n      case 'boolean':\n        return value === true ? 'true' : 'false'\n      case 'undefined':\n        return undefined\n      case 'bigint':\n        if (bigint) {\n          return String(value)\n        }\n        // fallthrough\n      default:\n        return fail ? fail(value) : undefined\n    }\n  }\n\n  function stringifyIndent (key, value, stack, spacer, indentation) {\n    switch (typeof value) {\n      case 'string':\n        return strEscape(value)\n      case 'object': {\n        if (value === null) {\n          return 'null'\n        }\n        if (typeof value.toJSON === 'function') {\n          value = value.toJSON(key)\n          // Prevent calling `toJSON` again.\n          if (typeof value !== 'object') {\n            return stringifyIndent(key, value, stack, spacer, indentation)\n          }\n          if (value === null) {\n            return 'null'\n          }\n        }\n        if (stack.indexOf(value) !== -1) {\n          return circularValue\n        }\n        const originalIndentation = indentation\n\n        if (Array.isArray(value)) {\n          if (value.length === 0) {\n            return '[]'\n          }\n          if (maximumDepth < stack.length + 1) {\n            return '\"[Array]\"'\n          }\n          stack.push(value)\n          indentation += spacer\n          let res = `\\n${indentation}`\n          const join = `,\\n${indentation}`\n          const maximumValuesToStringify = Math.min(value.length, maximumBreadth)\n          let i = 0\n          for (; i < maximumValuesToStringify - 1; i++) {\n            const tmp = stringifyIndent(String(i), value[i], stack, spacer, indentation)\n            res += tmp !== undefined ? tmp : 'null'\n            res += join\n          }\n          const tmp = stringifyIndent(String(i), value[i], stack, spacer, indentation)\n          res += tmp !== undefined ? tmp : 'null'\n          if (value.length - 1 > maximumBreadth) {\n            const removedKeys = value.length - maximumBreadth - 1\n            res += `${join}\"... ${getItemCount(removedKeys)} not stringified\"`\n          }\n          res += `\\n${originalIndentation}`\n          stack.pop()\n          return `[${res}]`\n        }\n\n        let keys = Object.keys(value)\n        const keyLength = keys.length\n        if (keyLength === 0) {\n          return '{}'\n        }\n        if (maximumDepth < stack.length + 1) {\n          return '\"[Object]\"'\n        }\n        indentation += spacer\n        const join = `,\\n${indentation}`\n        let res = ''\n        let separator = ''\n        let maximumPropertiesToStringify = Math.min(keyLength, maximumBreadth)\n        if (isTypedArrayWithEntries(value)) {\n          res += stringifyTypedArray(value, join, maximumBreadth)\n          keys = keys.slice(value.length)\n          maximumPropertiesToStringify -= value.length\n          separator = join\n        }\n        if (deterministic) {\n          keys = insertSort(keys)\n        }\n        stack.push(value)\n        for (let i = 0; i < maximumPropertiesToStringify; i++) {\n          const key = keys[i]\n          const tmp = stringifyIndent(key, value[key], stack, spacer, indentation)\n          if (tmp !== undefined) {\n            res += `${separator}${strEscape(key)}: ${tmp}`\n            separator = join\n          }\n        }\n        if (keyLength > maximumBreadth) {\n          const removedKeys = keyLength - maximumBreadth\n          res += `${separator}\"...\": \"${getItemCount(removedKeys)} not stringified\"`\n          separator = join\n        }\n        if (separator !== '') {\n          res = `\\n${indentation}${res}\\n${originalIndentation}`\n        }\n        stack.pop()\n        return `{${res}}`\n      }\n      case 'number':\n        return isFinite(value) ? String(value) : fail ? fail(value) : 'null'\n      case 'boolean':\n        return value === true ? 'true' : 'false'\n      case 'undefined':\n        return undefined\n      case 'bigint':\n        if (bigint) {\n          return String(value)\n        }\n        // fallthrough\n      default:\n        return fail ? fail(value) : undefined\n    }\n  }\n\n  function stringifySimple (key, value, stack) {\n    switch (typeof value) {\n      case 'string':\n        return strEscape(value)\n      case 'object': {\n        if (value === null) {\n          return 'null'\n        }\n        if (typeof value.toJSON === 'function') {\n          value = value.toJSON(key)\n          // Prevent calling `toJSON` again\n          if (typeof value !== 'object') {\n            return stringifySimple(key, value, stack)\n          }\n          if (value === null) {\n            return 'null'\n          }\n        }\n        if (stack.indexOf(value) !== -1) {\n          return circularValue\n        }\n\n        let res = ''\n\n        if (Array.isArray(value)) {\n          if (value.length === 0) {\n            return '[]'\n          }\n          if (maximumDepth < stack.length + 1) {\n            return '\"[Array]\"'\n          }\n          stack.push(value)\n          const maximumValuesToStringify = Math.min(value.length, maximumBreadth)\n          let i = 0\n          for (; i < maximumValuesToStringify - 1; i++) {\n            const tmp = stringifySimple(String(i), value[i], stack)\n            res += tmp !== undefined ? tmp : 'null'\n            res += ','\n          }\n          const tmp = stringifySimple(String(i), value[i], stack)\n          res += tmp !== undefined ? tmp : 'null'\n          if (value.length - 1 > maximumBreadth) {\n            const removedKeys = value.length - maximumBreadth - 1\n            res += `,\"... ${getItemCount(removedKeys)} not stringified\"`\n          }\n          stack.pop()\n          return `[${res}]`\n        }\n\n        let keys = Object.keys(value)\n        const keyLength = keys.length\n        if (keyLength === 0) {\n          return '{}'\n        }\n        if (maximumDepth < stack.length + 1) {\n          return '\"[Object]\"'\n        }\n        let separator = ''\n        let maximumPropertiesToStringify = Math.min(keyLength, maximumBreadth)\n        if (isTypedArrayWithEntries(value)) {\n          res += stringifyTypedArray(value, ',', maximumBreadth)\n          keys = keys.slice(value.length)\n          maximumPropertiesToStringify -= value.length\n          separator = ','\n        }\n        if (deterministic) {\n          keys = insertSort(keys)\n        }\n        stack.push(value)\n        for (let i = 0; i < maximumPropertiesToStringify; i++) {\n          const key = keys[i]\n          const tmp = stringifySimple(key, value[key], stack)\n          if (tmp !== undefined) {\n            res += `${separator}${strEscape(key)}:${tmp}`\n            separator = ','\n          }\n        }\n        if (keyLength > maximumBreadth) {\n          const removedKeys = keyLength - maximumBreadth\n          res += `${separator}\"...\":\"${getItemCount(removedKeys)} not stringified\"`\n        }\n        stack.pop()\n        return `{${res}}`\n      }\n      case 'number':\n        return isFinite(value) ? String(value) : fail ? fail(value) : 'null'\n      case 'boolean':\n        return value === true ? 'true' : 'false'\n      case 'undefined':\n        return undefined\n      case 'bigint':\n        if (bigint) {\n          return String(value)\n        }\n        // fallthrough\n      default:\n        return fail ? fail(value) : undefined\n    }\n  }\n\n  function stringify (value, replacer, space) {\n    if (arguments.length > 1) {\n      let spacer = ''\n      if (typeof space === 'number') {\n        spacer = ' '.repeat(Math.min(space, 10))\n      } else if (typeof space === 'string') {\n        spacer = space.slice(0, 10)\n      }\n      if (replacer != null) {\n        if (typeof replacer === 'function') {\n          return stringifyFnReplacer('', { '': value }, [], replacer, spacer, '')\n        }\n        if (Array.isArray(replacer)) {\n          return stringifyArrayReplacer('', value, [], getUniqueReplacerSet(replacer), spacer, '')\n        }\n      }\n      if (spacer.length !== 0) {\n        return stringifyIndent('', value, [], spacer, '')\n      }\n    }\n    return stringifySimple('', value, [])\n  }\n\n  return stringify\n}\n/esm/package.json/{\n  \"type\": \"module\",\n  \"main\": \"wrapper.js\"\n}\n/readme.md\u0019# safe-stable-stringify\n\nSafe, deterministic and fast serialization alternative to [JSON.stringify][].\nZero dependencies. ESM and CJS. 100% coverage.\n\nGracefully handles circular structures and bigint instead of throwing.\n\nOptional custom circular values, deterministic behavior or strict JSON\ncompatibility check.\n\n## stringify(value[, replacer[, space]])\n\nThe same as [JSON.stringify][].\n\n* `value` {any}\n* `replacer` {string[]|function|null}\n* `space` {number|string}\n* Returns: {string}\n\n```js\nconst stringify = require('safe-stable-stringify')\n\nconst bigint = { a: 0, c: 2n, b: 1 }\n\nstringify(bigint)\n// '{\"a\":0,\"b\":1,\"c\":2}'\nJSON.stringify(bigint)\n// TypeError: Do not know how to serialize a BigInt\n\nconst circular = { b: 1, a: 0 }\ncircular.circular = circular\n\nstringify(circular)\n// '{\"a\":0,\"b\":1,\"circular\":\"[Circular]\"}'\nJSON.stringify(circular)\n// TypeError: Converting circular structure to JSON\n\nstringify(circular, ['a', 'b'], 2)\n// {\n//   \"a\": 0,\n//   \"b\": 1\n// }\n```\n\n## stringify.configure(options)\n\n* `bigint` {boolean} If `true`, bigint values are converted to a number. Otherwise\n  they are ignored. **Default:** `true`.\n* `circularValue` {string|null|undefined|ErrorConstructor} Defines the value for\n  circular references. Set to `undefined`, circular properties are not\n  serialized (array entries are replaced with `null`). Set to `Error`, to throw\n  on circular references. **Default:** `'[Circular]'`.\n* `deterministic` {boolean} If `true`, guarantee a deterministic key order\n  instead of relying on the insertion order. **Default:** `true`.\n* `maximumBreadth` {number} Maximum number of entries to serialize per object\n  (at least one). The serialized output contains information about how many\n  entries have not been serialized. Ignored properties are counted as well\n  (e.g., properties with symbol values). Using the array replacer overrules this\n  option. **Default:** `Infinity`\n* `maximumDepth` {number} Maximum number of object nesting levels (at least 1)\n  that will be serialized. Objects at the maximum level are serialized as\n  `'[Object]'` and arrays as `'[Array]'`. **Default:** `Infinity`\n* `strict` {boolean} Instead of handling any JSON value gracefully, throw an\n  error in case it may not be represented as JSON (functions, NaN, ...).\n  Circular values and bigint values throw as well in case either option is not\n  explicitly defined. Sets and Maps are not detected! **Default:** `false`\n* Returns: {function} A stringify function with the options applied.\n\n```js\nimport { configure } from 'safe-stable-stringify'\n\nconst stringify = configure({\n  bigint: true,\n  circularValue: 'Magic circle!',\n  deterministic: false,\n  maximumDepth: 1,\n  maximumBreadth: 4\n})\n\nconst circular = {\n  bigint: 999_999_999_999_999_999n,\n  typed: new Uint8Array(3),\n  deterministic: \"I don't think so\",\n}\ncircular.circular = circular\ncircular.ignored = true\ncircular.alsoIgnored = 'Yes!'\n\nconst stringified = stringify(circular, null, 4)\n\nconsole.log(stringified)\n// {\n//     \"bigint\": 999999999999999999,\n//     \"typed\": \"[Object]\",\n//     \"deterministic\": \"I don't think so\",\n//     \"circular\": \"Magic circle!\",\n//     \"...\": \"2 items not stringified\"\n// }\n\nconst throwOnCircular = configure({\n  circularValue: Error\n})\n\nthrowOnCircular(circular);\n// TypeError: Converting circular structure to JSON\n```\n\n## Differences to JSON.stringify\n\n1. _Circular values_ are replaced with the string `[Circular]` (configurable).\n1. _Object keys_ are sorted instead of using the insertion order (configurable).\n1. _BigInt_ values are stringified as regular number instead of throwing a\n   TypeError (configurable).\n1. _Boxed primitives_ (e.g., `Number(5)`) are not unboxed and are handled as\n   regular object.\n\nThose are the only differences to `JSON.stringify()`. This is a side effect free\nvariant and [`toJSON`][], [`replacer`][] and the [`spacer`][] work the same as\nwith `JSON.stringify()`.\n\n## Performance / Benchmarks\n\nCurrently this is by far the fastest known stable (deterministic) stringify\nimplementation. This is especially important for big objects and TypedArrays.\n\n(Dell Precision 5540, i7-9850H CPU @ 2.60GHz, Node.js 16.11.1)\n\n```md\nsimple:   simple object x 3,463,894 ops/sec ±0.44% (98 runs sampled)\nsimple:   circular      x 1,236,007 ops/sec ±0.46% (99 runs sampled)\nsimple:   deep          x 18,942 ops/sec ±0.41% (93 runs sampled)\nsimple:   deep circular x 18,690 ops/sec ±0.72% (96 runs sampled)\n\nreplacer:   simple object x 2,664,940 ops/sec ±0.31% (98 runs sampled)\nreplacer:   circular      x 1,015,981 ops/sec ±0.09% (99 runs sampled)\nreplacer:   deep          x 17,328 ops/sec ±0.38% (97 runs sampled)\nreplacer:   deep circular x 17,071 ops/sec ±0.21% (98 runs sampled)\n\narray:   simple object x 3,869,608 ops/sec ±0.22% (98 runs sampled)\narray:   circular      x 3,853,943 ops/sec ±0.45% (96 runs sampled)\narray:   deep          x 3,563,227 ops/sec ±0.20% (100 runs sampled)\narray:   deep circular x 3,286,475 ops/sec ±0.07% (100 runs sampled)\n\nindentation:   simple object x 2,183,162 ops/sec ±0.66% (97 runs sampled)\nindentation:   circular      x 872,538 ops/sec ±0.57% (98 runs sampled)\nindentation:   deep          x 16,795 ops/sec ±0.48% (93 runs sampled)\nindentation:   deep circular x 16,443 ops/sec ±0.40% (97 runs sampled)\n```\n\nComparing `safe-stable-stringify` with known alternatives:\n\n```md\nfast-json-stable-stringify x 18,765 ops/sec ±0.71% (94 runs sampled)\njson-stable-stringify x 13,870 ops/sec ±0.72% (94 runs sampled)\nfast-stable-stringify x 21,343 ops/sec ±0.33% (95 runs sampled)\nfaster-stable-stringify x 17,707 ops/sec ±0.44% (97 runs sampled)\njson-stringify-deterministic x 11,208 ops/sec ±0.57% (98 runs sampled)\nfast-safe-stringify x 21,460 ops/sec ±0.75% (99 runs sampled)\nthis x 30,367 ops/sec ±0.39% (96 runs sampled)\n\nThe fastest is this\n```\n\nThe `fast-safe-stringify` comparison uses the modules stable implementation.\n\n## Acknowledgements\n\nSponsored by [MaibornWolff](https://www.maibornwolff.de/) and [nearForm](http://nearform.com)\n\n## License\n\nMIT\n\n[`replacer`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#The%20replacer%20parameter\n[`spacer`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#The%20space%20argument\n[`toJSON`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#toJSON()_behavior\n[JSON.stringify]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify\n/package.json\u0006{\n  \"name\": \"safe-stable-stringify\",\n  \"version\": \"2.4.3\",\n  \"description\": \"Deterministic and safely JSON.stringify to quickly serialize JavaScript objects\",\n  \"exports\": {\n    \"require\": \"./index.js\",\n    \"import\": \"./esm/wrapper.js\"\n  },\n  \"keywords\": [\n    \"stable\",\n    \"stringify\",\n    \"JSON\",\n    \"JSON.stringify\",\n    \"safe\",\n    \"serialize\",\n    \"deterministic\",\n    \"circular\",\n    \"object\",\n    \"predicable\",\n    \"repeatable\",\n    \"fast\",\n    \"bigint\"\n  ],\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"test\": \"standard && tap test.js\",\n    \"tap\": \"tap test.js\",\n    \"tap:only\": \"tap test.js --watch --only\",\n    \"benchmark\": \"node benchmark.js\",\n    \"compare\": \"node compare.js\",\n    \"lint\": \"standard --fix\",\n    \"tsc\": \"tsc --project tsconfig.json\"\n  },\n  \"engines\": {\n    \"node\": \">=10\"\n  },\n  \"author\": \"Ruben Bridgewater\",\n  \"license\": \"MIT\",\n  \"typings\": \"index.d.ts\",\n  \"devDependencies\": {\n    \"@types/json-stable-stringify\": \"^1.0.34\",\n    \"@types/node\": \"^18.11.18\",\n    \"benchmark\": \"^2.1.4\",\n    \"clone\": \"^2.1.2\",\n    \"fast-json-stable-stringify\": \"^2.1.0\",\n    \"fast-safe-stringify\": \"^2.1.1\",\n    \"fast-stable-stringify\": \"^1.0.0\",\n    \"faster-stable-stringify\": \"^1.0.0\",\n    \"fastest-stable-stringify\": \"^2.0.2\",\n    \"json-stable-stringify\": \"^1.0.1\",\n    \"json-stringify-deterministic\": \"^1.0.7\",\n    \"json-stringify-safe\": \"^5.0.1\",\n    \"standard\": \"^16.0.4\",\n    \"tap\": \"^15.0.9\",\n    \"typescript\": \"^4.8.3\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/BridgeAR/safe-stable-stringify.git\"\n  },\n  \"bugs\": {\n    \"url\": \"https://github.com/BridgeAR/safe-stable-stringify/issues\"\n  },\n  \"homepage\": \"https://github.com/BridgeAR/safe-stable-stringify#readme\"\n}\n/index.d.ts\u0004\u0019export type Replacer = (number | string)[] | null | undefined | ((key: string, value: unknown) => string | number | boolean | null | object)\n\nexport function stringify(value: undefined | symbol | ((...args: unknown[]) => unknown), replacer?: Replacer, space?: string | number): undefined\nexport function stringify(value: string | number | unknown[] | null | boolean | object, replacer?: Replacer, space?: string | number): string\nexport function stringify(value: unknown, replacer?: ((key: string, value: unknown) => unknown) | (number | string)[] | null | undefined, space?: string | number): string | undefined\n\nexport interface StringifyOptions {\n  bigint?: boolean,\n  circularValue?: string | null | TypeErrorConstructor | ErrorConstructor,\n  deterministic?: boolean,\n  maximumBreadth?: number,\n  maximumDepth?: number,\n  strict?: boolean,\n}\n\nexport namespace stringify {\n  export function configure(options: StringifyOptions): typeof stringify\n}\n\nexport function configure(options: StringifyOptions): typeof stringify\n\nexport default stringify\n/esm/wrapper.d.ts^import { stringify } from '../index.js'\n\nexport * from '../index.js'\nexport default stringify\n/LICENSE\u00047The MIT License (MIT)\n\nCopyright (c) Ruben Bridgewater\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/c2FmZXItYnVmZmVyQDIuMS4y",
    "content": "/package.json\u00036{\n  \"name\": \"safer-buffer\",\n  \"version\": \"2.1.2\",\n  \"description\": \"Modern Buffer API polyfill without footguns\",\n  \"main\": \"safer.js\",\n  \"scripts\": {\n    \"browserify-test\": \"browserify --external tape tests.js > browserify-tests.js && tape browserify-tests.js\",\n    \"test\": \"standard && tape tests.js\"\n  },\n  \"author\": {\n    \"name\": \"Nikita Skovoroda\",\n    \"email\": \"chalkerx@gmail.com\",\n    \"url\": \"https://github.com/ChALkeR\"\n  },\n  \"license\": \"MIT\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/ChALkeR/safer-buffer.git\"\n  },\n  \"bugs\": {\n    \"url\": \"https://github.com/ChALkeR/safer-buffer/issues\"\n  },\n  \"devDependencies\": {\n    \"standard\": \"^11.0.1\",\n    \"tape\": \"^4.9.0\"\n  },\n  \"files\": [\n    \"Porting-Buffer.md\",\n    \"Readme.md\",\n    \"tests.js\",\n    \"dangerous.js\",\n    \"safer.js\"\n  ]\n}\n/Readme.md E# safer-buffer [![travis][travis-image]][travis-url] [![npm][npm-image]][npm-url] [![javascript style guide][standard-image]][standard-url] [![Security Responsible Disclosure][secuirty-image]][secuirty-url]\n\n[travis-image]: https://travis-ci.org/ChALkeR/safer-buffer.svg?branch=master\n[travis-url]: https://travis-ci.org/ChALkeR/safer-buffer\n[npm-image]: https://img.shields.io/npm/v/safer-buffer.svg\n[npm-url]: https://npmjs.org/package/safer-buffer\n[standard-image]: https://img.shields.io/badge/code_style-standard-brightgreen.svg\n[standard-url]: https://standardjs.com\n[secuirty-image]: https://img.shields.io/badge/Security-Responsible%20Disclosure-green.svg\n[secuirty-url]: https://github.com/nodejs/security-wg/blob/master/processes/responsible_disclosure_template.md\n\nModern Buffer API polyfill without footguns, working on Node.js from 0.8 to current.\n\n## How to use?\n\nFirst, port all `Buffer()` and `new Buffer()` calls to `Buffer.alloc()` and `Buffer.from()` API.\n\nThen, to achieve compatibility with outdated Node.js versions (`<4.5.0` and 5.x `<5.9.0`), use\n`const Buffer = require('safer-buffer').Buffer` in all files where you make calls to the new\nBuffer API. _Use `var` instead of `const` if you need that for your Node.js version range support._\n\nAlso, see the\n[porting Buffer](https://github.com/ChALkeR/safer-buffer/blob/master/Porting-Buffer.md) guide.\n\n## Do I need it?\n\nHopefully, not — dropping support for outdated Node.js versions should be fine nowdays, and that\nis the recommended path forward. You _do_ need to port to the `Buffer.alloc()` and `Buffer.from()`\nthough.\n\nSee the [porting guide](https://github.com/ChALkeR/safer-buffer/blob/master/Porting-Buffer.md)\nfor a better description.\n\n## Why not [safe-buffer](https://npmjs.com/safe-buffer)?\n\n_In short: while `safe-buffer` serves as a polyfill for the new API, it allows old API usage and\nitself contains footguns._\n\n`safe-buffer` could be used safely to get the new API while still keeping support for older\nNode.js versions (like this module), but while analyzing ecosystem usage of the old Buffer API\nI found out that `safe-buffer` is itself causing problems in some cases.\n\nFor example, consider the following snippet:\n\n```console\n$ cat example.unsafe.js\nconsole.log(Buffer(20))\n$ ./node-v6.13.0-linux-x64/bin/node example.unsafe.js\n<Buffer 0a 00 00 00 00 00 00 00 28 13 de 02 00 00 00 00 05 00 00 00>\n$ standard example.unsafe.js\nstandard: Use JavaScript Standard Style (https://standardjs.com)\n  /home/chalker/repo/safer-buffer/example.unsafe.js:2:13: 'Buffer()' was deprecated since v6. Use 'Buffer.alloc()' or 'Buffer.from()' (use 'https://www.npmjs.com/package/safe-buffer' for '<4.5.0') instead.\n```\n\nThis is allocates and writes to console an uninitialized chunk of memory.\n[standard](https://www.npmjs.com/package/standard) linter (among others) catch that and warn people\nto avoid using unsafe API.\n\nLet's now throw in `safe-buffer`!\n\n```console\n$ cat example.safe-buffer.js\nconst Buffer = require('safe-buffer').Buffer\nconsole.log(Buffer(20))\n$ standard example.safe-buffer.js\n$ ./node-v6.13.0-linux-x64/bin/node example.safe-buffer.js\n<Buffer 08 00 00 00 00 00 00 00 28 58 01 82 fe 7f 00 00 00 00 00 00>\n```\n\nSee the problem? Adding in `safe-buffer` _magically removes the lint warning_, but the behavior\nremains identiсal to what we had before, and when launched on Node.js 6.x LTS — this dumps out\nchunks of uninitialized memory.\n_And this code will still emit runtime warnings on Node.js 10.x and above._\n\nThat was done by design. I first considered changing `safe-buffer`, prohibiting old API usage or\nemitting warnings on it, but that significantly diverges from `safe-buffer` design. After some\ndiscussion, it was decided to move my approach into a separate package, and _this is that separate\npackage_.\n\nThis footgun is not imaginary — I observed top-downloaded packages doing that kind of thing,\n«fixing» the lint warning by blindly including `safe-buffer` without any actual changes.\n\nAlso in some cases, even if the API _was_ migrated to use of safe Buffer API — a random pull request\ncan bring unsafe Buffer API usage back to the codebase by adding new calls — and that could go\nunnoticed even if you have a linter prohibiting that (becase of the reason stated above), and even\npass CI. _I also observed that being done in popular packages._\n\nSome examples:\n * [webdriverio](https://github.com/webdriverio/webdriverio/commit/05cbd3167c12e4930f09ef7cf93b127ba4effae4#diff-124380949022817b90b622871837d56cR31)\n   (a module with 548 759 downloads/month),\n * [websocket-stream](https://github.com/maxogden/websocket-stream/commit/c9312bd24d08271687d76da0fe3c83493871cf61)\n   (218 288 d/m, fix in [maxogden/websocket-stream#142](https://github.com/maxogden/websocket-stream/pull/142)),\n * [node-serialport](https://github.com/node-serialport/node-serialport/commit/e8d9d2b16c664224920ce1c895199b1ce2def48c)\n   (113 138 d/m, fix in [node-serialport/node-serialport#1510](https://github.com/node-serialport/node-serialport/pull/1510)),\n * [karma](https://github.com/karma-runner/karma/commit/3d94b8cf18c695104ca195334dc75ff054c74eec)\n   (3 973 193 d/m, fix in [karma-runner/karma#2947](https://github.com/karma-runner/karma/pull/2947)),\n * [spdy-transport](https://github.com/spdy-http2/spdy-transport/commit/5375ac33f4a62a4f65bcfc2827447d42a5dbe8b1)\n   (5 970 727 d/m, fix in [spdy-http2/spdy-transport#53](https://github.com/spdy-http2/spdy-transport/pull/53)).\n * And there are a lot more over the ecosystem.\n\nI filed a PR at\n[mysticatea/eslint-plugin-node#110](https://github.com/mysticatea/eslint-plugin-node/pull/110) to\npartially fix that (for cases when that lint rule is used), but it is a semver-major change for\nlinter rules and presets, so it would take significant time for that to reach actual setups.\n_It also hasn't been released yet (2018-03-20)._\n\nAlso, `safer-buffer` discourages the usage of `.allocUnsafe()`, which is often done by a mistake.\nIt still supports it with an explicit concern barier, by placing it under\n`require('safer-buffer/dangereous')`.\n\n## But isn't throwing bad?\n\nNot really. It's an error that could be noticed and fixed early, instead of causing havoc later like\nunguarded `new Buffer()` calls that end up receiving user input can do.\n\nThis package affects only the files where `var Buffer = require('safer-buffer').Buffer` was done, so\nit is really simple to keep track of things and make sure that you don't mix old API usage with that.\nAlso, CI should hint anything that you might have missed.\n\nNew commits, if tested, won't land new usage of unsafe Buffer API this way.\n_Node.js 10.x also deals with that by printing a runtime depecation warning._\n\n### Would it affect third-party modules?\n\nNo, unless you explicitly do an awful thing like monkey-patching or overriding the built-in `Buffer`.\nDon't do that.\n\n### But I don't want throwing…\n\nThat is also fine!\n\nAlso, it could be better in some cases when you don't comprehensive enough test coverage.\n\nIn that case — just don't override `Buffer` and use\n`var SaferBuffer = require('safer-buffer').Buffer` instead.\n\nThat way, everything using `Buffer` natively would still work, but there would be two drawbacks:\n\n* `Buffer.from`/`Buffer.alloc` won't be polyfilled — use `SaferBuffer.from` and\n  `SaferBuffer.alloc` instead.\n* You are still open to accidentally using the insecure deprecated API — use a linter to catch that.\n\nNote that using a linter to catch accidential `Buffer` constructor usage in this case is strongly\nrecommended. `Buffer` is not overriden in this usecase, so linters won't get confused.\n\n## «Without footguns»?\n\nWell, it is still possible to do _some_ things with `Buffer` API, e.g. accessing `.buffer` property\non older versions and duping things from there. You shouldn't do that in your code, probabably.\n\nThe intention is to remove the most significant footguns that affect lots of packages in the\necosystem, and to do it in the proper way.\n\nAlso, this package doesn't protect against security issues affecting some Node.js versions, so for\nusage in your own production code, it is still recommended to update to a Node.js version\n[supported by upstream](https://github.com/nodejs/release#release-schedule).\n/LICENSE\u0004FMIT License\n\nCopyright (c) 2018 Nikita Skovoroda <chalkerx@gmail.com>\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n/tests.js=w/* eslint-disable node/no-deprecated-api */\n\n'use strict'\n\nvar test = require('tape')\n\nvar buffer = require('buffer')\n\nvar index = require('./')\nvar safer = require('./safer')\nvar dangerous = require('./dangerous')\n\n/* Inheritance tests */\n\ntest('Default is Safer', function (t) {\n  t.equal(index, safer)\n  t.notEqual(safer, dangerous)\n  t.notEqual(index, dangerous)\n  t.end()\n})\n\ntest('Is not a function', function (t) {\n  [index, safer, dangerous].forEach(function (impl) {\n    t.equal(typeof impl, 'object')\n    t.equal(typeof impl.Buffer, 'object')\n  });\n  [buffer].forEach(function (impl) {\n    t.equal(typeof impl, 'object')\n    t.equal(typeof impl.Buffer, 'function')\n  })\n  t.end()\n})\n\ntest('Constructor throws', function (t) {\n  [index, safer, dangerous].forEach(function (impl) {\n    t.throws(function () { impl.Buffer() })\n    t.throws(function () { impl.Buffer(0) })\n    t.throws(function () { impl.Buffer('a') })\n    t.throws(function () { impl.Buffer('a', 'utf-8') })\n    t.throws(function () { return new impl.Buffer() })\n    t.throws(function () { return new impl.Buffer(0) })\n    t.throws(function () { return new impl.Buffer('a') })\n    t.throws(function () { return new impl.Buffer('a', 'utf-8') })\n  })\n  t.end()\n})\n\ntest('Safe methods exist', function (t) {\n  [index, safer, dangerous].forEach(function (impl) {\n    t.equal(typeof impl.Buffer.alloc, 'function', 'alloc')\n    t.equal(typeof impl.Buffer.from, 'function', 'from')\n  })\n  t.end()\n})\n\ntest('Unsafe methods exist only in Dangerous', function (t) {\n  [index, safer].forEach(function (impl) {\n    t.equal(typeof impl.Buffer.allocUnsafe, 'undefined')\n    t.equal(typeof impl.Buffer.allocUnsafeSlow, 'undefined')\n  });\n  [dangerous].forEach(function (impl) {\n    t.equal(typeof impl.Buffer.allocUnsafe, 'function')\n    t.equal(typeof impl.Buffer.allocUnsafeSlow, 'function')\n  })\n  t.end()\n})\n\ntest('Generic methods/properties are defined and equal', function (t) {\n  ['poolSize', 'isBuffer', 'concat', 'byteLength'].forEach(function (method) {\n    [index, safer, dangerous].forEach(function (impl) {\n      t.equal(impl.Buffer[method], buffer.Buffer[method], method)\n      t.notEqual(typeof impl.Buffer[method], 'undefined', method)\n    })\n  })\n  t.end()\n})\n\ntest('Built-in buffer static methods/properties are inherited', function (t) {\n  Object.keys(buffer).forEach(function (method) {\n    if (method === 'SlowBuffer' || method === 'Buffer') return;\n    [index, safer, dangerous].forEach(function (impl) {\n      t.equal(impl[method], buffer[method], method)\n      t.notEqual(typeof impl[method], 'undefined', method)\n    })\n  })\n  t.end()\n})\n\ntest('Built-in Buffer static methods/properties are inherited', function (t) {\n  Object.keys(buffer.Buffer).forEach(function (method) {\n    if (method === 'allocUnsafe' || method === 'allocUnsafeSlow') return;\n    [index, safer, dangerous].forEach(function (impl) {\n      t.equal(impl.Buffer[method], buffer.Buffer[method], method)\n      t.notEqual(typeof impl.Buffer[method], 'undefined', method)\n    })\n  })\n  t.end()\n})\n\ntest('.prototype property of Buffer is inherited', function (t) {\n  [index, safer, dangerous].forEach(function (impl) {\n    t.equal(impl.Buffer.prototype, buffer.Buffer.prototype, 'prototype')\n    t.notEqual(typeof impl.Buffer.prototype, 'undefined', 'prototype')\n  })\n  t.end()\n})\n\ntest('All Safer methods are present in Dangerous', function (t) {\n  Object.keys(safer).forEach(function (method) {\n    if (method === 'Buffer') return;\n    [index, safer, dangerous].forEach(function (impl) {\n      t.equal(impl[method], safer[method], method)\n      if (method !== 'kStringMaxLength') {\n        t.notEqual(typeof impl[method], 'undefined', method)\n      }\n    })\n  })\n  Object.keys(safer.Buffer).forEach(function (method) {\n    [index, safer, dangerous].forEach(function (impl) {\n      t.equal(impl.Buffer[method], safer.Buffer[method], method)\n      t.notEqual(typeof impl.Buffer[method], 'undefined', method)\n    })\n  })\n  t.end()\n})\n\ntest('Safe methods from Dangerous methods are present in Safer', function (t) {\n  Object.keys(dangerous).forEach(function (method) {\n    if (method === 'Buffer') return;\n    [index, safer, dangerous].forEach(function (impl) {\n      t.equal(impl[method], dangerous[method], method)\n      if (method !== 'kStringMaxLength') {\n        t.notEqual(typeof impl[method], 'undefined', method)\n      }\n    })\n  })\n  Object.keys(dangerous.Buffer).forEach(function (method) {\n    if (method === 'allocUnsafe' || method === 'allocUnsafeSlow') return;\n    [index, safer, dangerous].forEach(function (impl) {\n      t.equal(impl.Buffer[method], dangerous.Buffer[method], method)\n      t.notEqual(typeof impl.Buffer[method], 'undefined', method)\n    })\n  })\n  t.end()\n})\n\n/* Behaviour tests */\n\ntest('Methods return Buffers', function (t) {\n  [index, safer, dangerous].forEach(function (impl) {\n    t.ok(buffer.Buffer.isBuffer(impl.Buffer.alloc(0)))\n    t.ok(buffer.Buffer.isBuffer(impl.Buffer.alloc(0, 10)))\n    t.ok(buffer.Buffer.isBuffer(impl.Buffer.alloc(0, 'a')))\n    t.ok(buffer.Buffer.isBuffer(impl.Buffer.alloc(10)))\n    t.ok(buffer.Buffer.isBuffer(impl.Buffer.alloc(10, 'x')))\n    t.ok(buffer.Buffer.isBuffer(impl.Buffer.alloc(9, 'ab')))\n    t.ok(buffer.Buffer.isBuffer(impl.Buffer.from('')))\n    t.ok(buffer.Buffer.isBuffer(impl.Buffer.from('string')))\n    t.ok(buffer.Buffer.isBuffer(impl.Buffer.from('string', 'utf-8')))\n    t.ok(buffer.Buffer.isBuffer(impl.Buffer.from('b25ldHdvdGhyZWU=', 'base64')))\n    t.ok(buffer.Buffer.isBuffer(impl.Buffer.from([0, 42, 3])))\n    t.ok(buffer.Buffer.isBuffer(impl.Buffer.from(new Uint8Array([0, 42, 3]))))\n    t.ok(buffer.Buffer.isBuffer(impl.Buffer.from([])))\n  });\n  ['allocUnsafe', 'allocUnsafeSlow'].forEach(function (method) {\n    t.ok(buffer.Buffer.isBuffer(dangerous.Buffer[method](0)))\n    t.ok(buffer.Buffer.isBuffer(dangerous.Buffer[method](10)))\n  })\n  t.end()\n})\n\ntest('Constructor is buffer.Buffer', function (t) {\n  [index, safer, dangerous].forEach(function (impl) {\n    t.equal(impl.Buffer.alloc(0).constructor, buffer.Buffer)\n    t.equal(impl.Buffer.alloc(0, 10).constructor, buffer.Buffer)\n    t.equal(impl.Buffer.alloc(0, 'a').constructor, buffer.Buffer)\n    t.equal(impl.Buffer.alloc(10).constructor, buffer.Buffer)\n    t.equal(impl.Buffer.alloc(10, 'x').constructor, buffer.Buffer)\n    t.equal(impl.Buffer.alloc(9, 'ab').constructor, buffer.Buffer)\n    t.equal(impl.Buffer.from('').constructor, buffer.Buffer)\n    t.equal(impl.Buffer.from('string').constructor, buffer.Buffer)\n    t.equal(impl.Buffer.from('string', 'utf-8').constructor, buffer.Buffer)\n    t.equal(impl.Buffer.from('b25ldHdvdGhyZWU=', 'base64').constructor, buffer.Buffer)\n    t.equal(impl.Buffer.from([0, 42, 3]).constructor, buffer.Buffer)\n    t.equal(impl.Buffer.from(new Uint8Array([0, 42, 3])).constructor, buffer.Buffer)\n    t.equal(impl.Buffer.from([]).constructor, buffer.Buffer)\n  });\n  [0, 10, 100].forEach(function (arg) {\n    t.equal(dangerous.Buffer.allocUnsafe(arg).constructor, buffer.Buffer)\n    t.equal(dangerous.Buffer.allocUnsafeSlow(arg).constructor, buffer.SlowBuffer(0).constructor)\n  })\n  t.end()\n})\n\ntest('Invalid calls throw', function (t) {\n  [index, safer, dangerous].forEach(function (impl) {\n    t.throws(function () { impl.Buffer.from(0) })\n    t.throws(function () { impl.Buffer.from(10) })\n    t.throws(function () { impl.Buffer.from(10, 'utf-8') })\n    t.throws(function () { impl.Buffer.from('string', 'invalid encoding') })\n    t.throws(function () { impl.Buffer.from(-10) })\n    t.throws(function () { impl.Buffer.from(1e90) })\n    t.throws(function () { impl.Buffer.from(Infinity) })\n    t.throws(function () { impl.Buffer.from(-Infinity) })\n    t.throws(function () { impl.Buffer.from(NaN) })\n    t.throws(function () { impl.Buffer.from(null) })\n    t.throws(function () { impl.Buffer.from(undefined) })\n    t.throws(function () { impl.Buffer.from() })\n    t.throws(function () { impl.Buffer.from({}) })\n    t.throws(function () { impl.Buffer.alloc('') })\n    t.throws(function () { impl.Buffer.alloc('string') })\n    t.throws(function () { impl.Buffer.alloc('string', 'utf-8') })\n    t.throws(function () { impl.Buffer.alloc('b25ldHdvdGhyZWU=', 'base64') })\n    t.throws(function () { impl.Buffer.alloc(-10) })\n    t.throws(function () { impl.Buffer.alloc(1e90) })\n    t.throws(function () { impl.Buffer.alloc(2 * (1 << 30)) })\n    t.throws(function () { impl.Buffer.alloc(Infinity) })\n    t.throws(function () { impl.Buffer.alloc(-Infinity) })\n    t.throws(function () { impl.Buffer.alloc(null) })\n    t.throws(function () { impl.Buffer.alloc(undefined) })\n    t.throws(function () { impl.Buffer.alloc() })\n    t.throws(function () { impl.Buffer.alloc([]) })\n    t.throws(function () { impl.Buffer.alloc([0, 42, 3]) })\n    t.throws(function () { impl.Buffer.alloc({}) })\n  });\n  ['allocUnsafe', 'allocUnsafeSlow'].forEach(function (method) {\n    t.throws(function () { dangerous.Buffer[method]('') })\n    t.throws(function () { dangerous.Buffer[method]('string') })\n    t.throws(function () { dangerous.Buffer[method]('string', 'utf-8') })\n    t.throws(function () { dangerous.Buffer[method](2 * (1 << 30)) })\n    t.throws(function () { dangerous.Buffer[method](Infinity) })\n    if (dangerous.Buffer[method] === buffer.Buffer.allocUnsafe) {\n      t.skip('Skipping, older impl of allocUnsafe coerced negative sizes to 0')\n    } else {\n      t.throws(function () { dangerous.Buffer[method](-10) })\n      t.throws(function () { dangerous.Buffer[method](-1e90) })\n      t.throws(function () { dangerous.Buffer[method](-Infinity) })\n    }\n    t.throws(function () { dangerous.Buffer[method](null) })\n    t.throws(function () { dangerous.Buffer[method](undefined) })\n    t.throws(function () { dangerous.Buffer[method]() })\n    t.throws(function () { dangerous.Buffer[method]([]) })\n    t.throws(function () { dangerous.Buffer[method]([0, 42, 3]) })\n    t.throws(function () { dangerous.Buffer[method]({}) })\n  })\n  t.end()\n})\n\ntest('Buffers have appropriate lengths', function (t) {\n  [index, safer, dangerous].forEach(function (impl) {\n    t.equal(impl.Buffer.alloc(0).length, 0)\n    t.equal(impl.Buffer.alloc(10).length, 10)\n    t.equal(impl.Buffer.from('').length, 0)\n    t.equal(impl.Buffer.from('string').length, 6)\n    t.equal(impl.Buffer.from('string', 'utf-8').length, 6)\n    t.equal(impl.Buffer.from('b25ldHdvdGhyZWU=', 'base64').length, 11)\n    t.equal(impl.Buffer.from([0, 42, 3]).length, 3)\n    t.equal(impl.Buffer.from(new Uint8Array([0, 42, 3])).length, 3)\n    t.equal(impl.Buffer.from([]).length, 0)\n  });\n  ['allocUnsafe', 'allocUnsafeSlow'].forEach(function (method) {\n    t.equal(dangerous.Buffer[method](0).length, 0)\n    t.equal(dangerous.Buffer[method](10).length, 10)\n  })\n  t.end()\n})\n\ntest('Buffers have appropriate lengths (2)', function (t) {\n  t.equal(index.Buffer.alloc, safer.Buffer.alloc)\n  t.equal(index.Buffer.alloc, dangerous.Buffer.alloc)\n  var ok = true;\n  [ safer.Buffer.alloc,\n    dangerous.Buffer.allocUnsafe,\n    dangerous.Buffer.allocUnsafeSlow\n  ].forEach(function (method) {\n    for (var i = 0; i < 1e2; i++) {\n      var length = Math.round(Math.random() * 1e5)\n      var buf = method(length)\n      if (!buffer.Buffer.isBuffer(buf)) ok = false\n      if (buf.length !== length) ok = false\n    }\n  })\n  t.ok(ok)\n  t.end()\n})\n\ntest('.alloc(size) is zero-filled and has correct length', function (t) {\n  t.equal(index.Buffer.alloc, safer.Buffer.alloc)\n  t.equal(index.Buffer.alloc, dangerous.Buffer.alloc)\n  var ok = true\n  for (var i = 0; i < 1e2; i++) {\n    var length = Math.round(Math.random() * 2e6)\n    var buf = index.Buffer.alloc(length)\n    if (!buffer.Buffer.isBuffer(buf)) ok = false\n    if (buf.length !== length) ok = false\n    var j\n    for (j = 0; j < length; j++) {\n      if (buf[j] !== 0) ok = false\n    }\n    buf.fill(1)\n    for (j = 0; j < length; j++) {\n      if (buf[j] !== 1) ok = false\n    }\n  }\n  t.ok(ok)\n  t.end()\n})\n\ntest('.allocUnsafe / .allocUnsafeSlow are fillable and have correct lengths', function (t) {\n  ['allocUnsafe', 'allocUnsafeSlow'].forEach(function (method) {\n    var ok = true\n    for (var i = 0; i < 1e2; i++) {\n      var length = Math.round(Math.random() * 2e6)\n      var buf = dangerous.Buffer[method](length)\n      if (!buffer.Buffer.isBuffer(buf)) ok = false\n      if (buf.length !== length) ok = false\n      buf.fill(0, 0, length)\n      var j\n      for (j = 0; j < length; j++) {\n        if (buf[j] !== 0) ok = false\n      }\n      buf.fill(1, 0, length)\n      for (j = 0; j < length; j++) {\n        if (buf[j] !== 1) ok = false\n      }\n    }\n    t.ok(ok, method)\n  })\n  t.end()\n})\n\ntest('.alloc(size, fill) is `fill`-filled', function (t) {\n  t.equal(index.Buffer.alloc, safer.Buffer.alloc)\n  t.equal(index.Buffer.alloc, dangerous.Buffer.alloc)\n  var ok = true\n  for (var i = 0; i < 1e2; i++) {\n    var length = Math.round(Math.random() * 2e6)\n    var fill = Math.round(Math.random() * 255)\n    var buf = index.Buffer.alloc(length, fill)\n    if (!buffer.Buffer.isBuffer(buf)) ok = false\n    if (buf.length !== length) ok = false\n    for (var j = 0; j < length; j++) {\n      if (buf[j] !== fill) ok = false\n    }\n  }\n  t.ok(ok)\n  t.end()\n})\n\ntest('.alloc(size, fill) is `fill`-filled', function (t) {\n  t.equal(index.Buffer.alloc, safer.Buffer.alloc)\n  t.equal(index.Buffer.alloc, dangerous.Buffer.alloc)\n  var ok = true\n  for (var i = 0; i < 1e2; i++) {\n    var length = Math.round(Math.random() * 2e6)\n    var fill = Math.round(Math.random() * 255)\n    var buf = index.Buffer.alloc(length, fill)\n    if (!buffer.Buffer.isBuffer(buf)) ok = false\n    if (buf.length !== length) ok = false\n    for (var j = 0; j < length; j++) {\n      if (buf[j] !== fill) ok = false\n    }\n  }\n  t.ok(ok)\n  t.deepEqual(index.Buffer.alloc(9, 'a'), index.Buffer.alloc(9, 97))\n  t.notDeepEqual(index.Buffer.alloc(9, 'a'), index.Buffer.alloc(9, 98))\n\n  var tmp = new buffer.Buffer(2)\n  tmp.fill('ok')\n  if (tmp[1] === tmp[0]) {\n    // Outdated Node.js\n    t.deepEqual(index.Buffer.alloc(5, 'ok'), index.Buffer.from('ooooo'))\n  } else {\n    t.deepEqual(index.Buffer.alloc(5, 'ok'), index.Buffer.from('okoko'))\n  }\n  t.notDeepEqual(index.Buffer.alloc(5, 'ok'), index.Buffer.from('kokok'))\n\n  t.end()\n})\n\ntest('safer.Buffer.from returns results same as Buffer constructor', function (t) {\n  [index, safer, dangerous].forEach(function (impl) {\n    t.deepEqual(impl.Buffer.from(''), new buffer.Buffer(''))\n    t.deepEqual(impl.Buffer.from('string'), new buffer.Buffer('string'))\n    t.deepEqual(impl.Buffer.from('string', 'utf-8'), new buffer.Buffer('string', 'utf-8'))\n    t.deepEqual(impl.Buffer.from('b25ldHdvdGhyZWU=', 'base64'), new buffer.Buffer('b25ldHdvdGhyZWU=', 'base64'))\n    t.deepEqual(impl.Buffer.from([0, 42, 3]), new buffer.Buffer([0, 42, 3]))\n    t.deepEqual(impl.Buffer.from(new Uint8Array([0, 42, 3])), new buffer.Buffer(new Uint8Array([0, 42, 3])))\n    t.deepEqual(impl.Buffer.from([]), new buffer.Buffer([]))\n  })\n  t.end()\n})\n\ntest('safer.Buffer.from returns consistent results', function (t) {\n  [index, safer, dangerous].forEach(function (impl) {\n    t.deepEqual(impl.Buffer.from(''), impl.Buffer.alloc(0))\n    t.deepEqual(impl.Buffer.from([]), impl.Buffer.alloc(0))\n    t.deepEqual(impl.Buffer.from(new Uint8Array([])), impl.Buffer.alloc(0))\n    t.deepEqual(impl.Buffer.from('string', 'utf-8'), impl.Buffer.from('string'))\n    t.deepEqual(impl.Buffer.from('string'), impl.Buffer.from([115, 116, 114, 105, 110, 103]))\n    t.deepEqual(impl.Buffer.from('string'), impl.Buffer.from(impl.Buffer.from('string')))\n    t.deepEqual(impl.Buffer.from('b25ldHdvdGhyZWU=', 'base64'), impl.Buffer.from('onetwothree'))\n    t.notDeepEqual(impl.Buffer.from('b25ldHdvdGhyZWU='), impl.Buffer.from('onetwothree'))\n  })\n  t.end()\n})\n/dangerous.js\u0005/* eslint-disable node/no-deprecated-api */\n\n'use strict'\n\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\nvar safer = require('./safer.js')\nvar Safer = safer.Buffer\n\nvar dangerous = {}\n\nvar key\n\nfor (key in safer) {\n  if (!safer.hasOwnProperty(key)) continue\n  dangerous[key] = safer[key]\n}\n\nvar Dangereous = dangerous.Buffer = {}\n\n// Copy Safer API\nfor (key in Safer) {\n  if (!Safer.hasOwnProperty(key)) continue\n  Dangereous[key] = Safer[key]\n}\n\n// Copy those missing unsafe methods, if they are present\nfor (key in Buffer) {\n  if (!Buffer.hasOwnProperty(key)) continue\n  if (Dangereous.hasOwnProperty(key)) continue\n  Dangereous[key] = Buffer[key]\n}\n\nif (!Dangereous.allocUnsafe) {\n  Dangereous.allocUnsafe = function (size) {\n    if (typeof size !== 'number') {\n      throw new TypeError('The \"size\" argument must be of type number. Received type ' + typeof size)\n    }\n    if (size < 0 || size >= 2 * (1 << 30)) {\n      throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n    }\n    return Buffer(size)\n  }\n}\n\nif (!Dangereous.allocUnsafeSlow) {\n  Dangereous.allocUnsafeSlow = function (size) {\n    if (typeof size !== 'number') {\n      throw new TypeError('The \"size\" argument must be of type number. Received type ' + typeof size)\n    }\n    if (size < 0 || size >= 2 * (1 << 30)) {\n      throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n    }\n    return buffer.SlowBuffer(size)\n  }\n}\n\nmodule.exports = dangerous\n/safer.js\b>/* eslint-disable node/no-deprecated-api */\n\n'use strict'\n\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\nvar safer = {}\n\nvar key\n\nfor (key in buffer) {\n  if (!buffer.hasOwnProperty(key)) continue\n  if (key === 'SlowBuffer' || key === 'Buffer') continue\n  safer[key] = buffer[key]\n}\n\nvar Safer = safer.Buffer = {}\nfor (key in Buffer) {\n  if (!Buffer.hasOwnProperty(key)) continue\n  if (key === 'allocUnsafe' || key === 'allocUnsafeSlow') continue\n  Safer[key] = Buffer[key]\n}\n\nsafer.Buffer.prototype = Buffer.prototype\n\nif (!Safer.from || Safer.from === Uint8Array.from) {\n  Safer.from = function (value, encodingOrOffset, length) {\n    if (typeof value === 'number') {\n      throw new TypeError('The \"value\" argument must not be of type number. Received type ' + typeof value)\n    }\n    if (value && typeof value.length === 'undefined') {\n      throw new TypeError('The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type ' + typeof value)\n    }\n    return Buffer(value, encodingOrOffset, length)\n  }\n}\n\nif (!Safer.alloc) {\n  Safer.alloc = function (size, fill, encoding) {\n    if (typeof size !== 'number') {\n      throw new TypeError('The \"size\" argument must be of type number. Received type ' + typeof size)\n    }\n    if (size < 0 || size >= 2 * (1 << 30)) {\n      throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n    }\n    var buf = Buffer(size)\n    if (!fill || fill.length === 0) {\n      buf.fill(0)\n    } else if (typeof encoding === 'string') {\n      buf.fill(fill, encoding)\n    } else {\n      buf.fill(fill)\n    }\n    return buf\n  }\n}\n\nif (!safer.kStringMaxLength) {\n  try {\n    safer.kStringMaxLength = process.binding('buffer').kStringMaxLength\n  } catch (e) {\n    // we can't determine kStringMaxLength in environments where process.binding\n    // is unsupported, so let's not set it\n  }\n}\n\nif (!safer.constants) {\n  safer.constants = {\n    MAX_LENGTH: safer.kMaxLength\n  }\n  if (safer.kStringMaxLength) {\n    safer.constants.MAX_STRING_LENGTH = safer.kStringMaxLength\n  }\n}\n\nmodule.exports = safer\n/Porting-Buffer.md1# Porting to the Buffer.from/Buffer.alloc API\n\n<a id=\"overview\"></a>\n## Overview\n\n- [Variant 1: Drop support for Node.js ≤ 4.4.x and 5.0.0 — 5.9.x.](#variant-1) (*recommended*)\n- [Variant 2: Use a polyfill](#variant-2)\n- [Variant 3: manual detection, with safeguards](#variant-3)\n\n### Finding problematic bits of code using grep\n\nJust run `grep -nrE '[^a-zA-Z](Slow)?Buffer\\s*\\(' --exclude-dir node_modules`.\n\nIt will find all the potentially unsafe places in your own code (with some considerably unlikely\nexceptions).\n\n### Finding problematic bits of code using Node.js 8\n\nIf you’re using Node.js ≥ 8.0.0 (which is recommended), Node.js exposes multiple options that help with finding the relevant pieces of code:\n\n- `--trace-warnings` will make Node.js show a stack trace for this warning and other warnings that are printed by Node.js.\n- `--trace-deprecation` does the same thing, but only for deprecation warnings.\n- `--pending-deprecation` will show more types of deprecation warnings. In particular, it will show the `Buffer()` deprecation warning, even on Node.js 8.\n\nYou can set these flags using an environment variable:\n\n```console\n$ export NODE_OPTIONS='--trace-warnings --pending-deprecation'\n$ cat example.js\n'use strict';\nconst foo = new Buffer('foo');\n$ node example.js\n(node:7147) [DEP0005] DeprecationWarning: The Buffer() and new Buffer() constructors are not recommended for use due to security and usability concerns. Please use the new Buffer.alloc(), Buffer.allocUnsafe(), or Buffer.from() construction methods instead.\n    at showFlaggedDeprecation (buffer.js:127:13)\n    at new Buffer (buffer.js:148:3)\n    at Object.<anonymous> (/path/to/example.js:2:13)\n    [... more stack trace lines ...]\n```\n\n### Finding problematic bits of code using linters\n\nEslint rules [no-buffer-constructor](https://eslint.org/docs/rules/no-buffer-constructor)\nor\n[node/no-deprecated-api](https://github.com/mysticatea/eslint-plugin-node/blob/master/docs/rules/no-deprecated-api.md)\nalso find calls to deprecated `Buffer()` API. Those rules are included in some pre-sets.\n\nThere is a drawback, though, that it doesn't always\n[work correctly](https://github.com/chalker/safer-buffer#why-not-safe-buffer) when `Buffer` is\noverriden e.g. with a polyfill, so recommended is a combination of this and some other method\ndescribed above.\n\n<a id=\"variant-1\"></a>\n## Variant 1: Drop support for Node.js ≤ 4.4.x and 5.0.0 — 5.9.x.\n\nThis is the recommended solution nowadays that would imply only minimal overhead.\n\nThe Node.js 5.x release line has been unsupported since July 2016, and the Node.js 4.x release line reaches its End of Life in April 2018 (→ [Schedule](https://github.com/nodejs/Release#release-schedule)). This means that these versions of Node.js will *not* receive any updates, even in case of security issues, so using these release lines should be avoided, if at all possible.\n\nWhat you would do in this case is to convert all `new Buffer()` or `Buffer()` calls to use `Buffer.alloc()` or `Buffer.from()`, in the following way:\n\n- For `new Buffer(number)`, replace it with `Buffer.alloc(number)`.\n- For `new Buffer(string)` (or `new Buffer(string, encoding)`), replace it with `Buffer.from(string)` (or `Buffer.from(string, encoding)`).\n- For all other combinations of arguments (these are much rarer), also replace `new Buffer(...arguments)` with `Buffer.from(...arguments)`.\n\nNote that `Buffer.alloc()` is also _faster_ on the current Node.js versions than\n`new Buffer(size).fill(0)`, which is what you would otherwise need to ensure zero-filling.\n\nEnabling eslint rule [no-buffer-constructor](https://eslint.org/docs/rules/no-buffer-constructor)\nor\n[node/no-deprecated-api](https://github.com/mysticatea/eslint-plugin-node/blob/master/docs/rules/no-deprecated-api.md)\nis recommended to avoid accidential unsafe Buffer API usage.\n\nThere is also a [JSCodeshift codemod](https://github.com/joyeecheung/node-dep-codemod#dep005)\nfor automatically migrating Buffer constructors to `Buffer.alloc()` or `Buffer.from()`.\nNote that it currently only works with cases where the arguments are literals or where the\nconstructor is invoked with two arguments.\n\n_If you currently support those older Node.js versions and dropping them would be a semver-major change\nfor you, or if you support older branches of your packages, consider using [Variant 2](#variant-2)\nor [Variant 3](#variant-3) on older branches, so people using those older branches will also receive\nthe fix. That way, you will eradicate potential issues caused by unguarded Buffer API usage and\nyour users will not observe a runtime deprecation warning when running your code on Node.js 10._\n\n<a id=\"variant-2\"></a>\n## Variant 2: Use a polyfill\n\nUtilize [safer-buffer](https://www.npmjs.com/package/safer-buffer) as a polyfill to support older\nNode.js versions.\n\nYou would take exacly the same steps as in [Variant 1](#variant-1), but with a polyfill\n`const Buffer = require('safer-buffer').Buffer` in all files where you use the new `Buffer` api.\n\nMake sure that you do not use old `new Buffer` API — in any files where the line above is added,\nusing old `new Buffer()` API will _throw_. It will be easy to notice that in CI, though.\n\nAlternatively, you could use [buffer-from](https://www.npmjs.com/package/buffer-from) and/or\n[buffer-alloc](https://www.npmjs.com/package/buffer-alloc) [ponyfills](https://ponyfill.com/) —\nthose are great, the only downsides being 4 deps in the tree and slightly more code changes to\nmigrate off them (as you would be using e.g. `Buffer.from` under a different name). If you need only\n`Buffer.from` polyfilled — `buffer-from` alone which comes with no extra dependencies.\n\n_Alternatively, you could use [safe-buffer](https://www.npmjs.com/package/safe-buffer) — it also\nprovides a polyfill, but takes a different approach which has\n[it's drawbacks](https://github.com/chalker/safer-buffer#why-not-safe-buffer). It will allow you\nto also use the older `new Buffer()` API in your code, though — but that's arguably a benefit, as\nit is problematic, can cause issues in your code, and will start emitting runtime deprecation\nwarnings starting with Node.js 10._\n\nNote that in either case, it is important that you also remove all calls to the old Buffer\nAPI manually — just throwing in `safe-buffer` doesn't fix the problem by itself, it just provides\na polyfill for the new API. I have seen people doing that mistake.\n\nEnabling eslint rule [no-buffer-constructor](https://eslint.org/docs/rules/no-buffer-constructor)\nor\n[node/no-deprecated-api](https://github.com/mysticatea/eslint-plugin-node/blob/master/docs/rules/no-deprecated-api.md)\nis recommended.\n\n_Don't forget to drop the polyfill usage once you drop support for Node.js < 4.5.0._\n\n<a id=\"variant-3\"></a>\n## Variant 3 — manual detection, with safeguards\n\nThis is useful if you create Buffer instances in only a few places (e.g. one), or you have your own\nwrapper around them.\n\n### Buffer(0)\n\nThis special case for creating empty buffers can be safely replaced with `Buffer.concat([])`, which\nreturns the same result all the way down to Node.js 0.8.x.\n\n### Buffer(notNumber)\n\nBefore:\n\n```js\nvar buf = new Buffer(notNumber, encoding);\n```\n\nAfter:\n\n```js\nvar buf;\nif (Buffer.from && Buffer.from !== Uint8Array.from) {\n  buf = Buffer.from(notNumber, encoding);\n} else {\n  if (typeof notNumber === 'number')\n    throw new Error('The \"size\" argument must be of type number.');\n  buf = new Buffer(notNumber, encoding);\n}\n```\n\n`encoding` is optional.\n\nNote that the `typeof notNumber` before `new Buffer` is required (for cases when `notNumber` argument is not\nhard-coded) and _is not caused by the deprecation of Buffer constructor_ — it's exactly _why_ the\nBuffer constructor is deprecated. Ecosystem packages lacking this type-check caused numereous\nsecurity issues — situations when unsanitized user input could end up in the `Buffer(arg)` create\nproblems ranging from DoS to leaking sensitive information to the attacker from the process memory.\n\nWhen `notNumber` argument is hardcoded (e.g. literal `\"abc\"` or `[0,1,2]`), the `typeof` check can\nbe omitted.\n\nAlso note that using TypeScript does not fix this problem for you — when libs written in\n`TypeScript` are used from JS, or when user input ends up there — it behaves exactly as pure JS, as\nall type checks are translation-time only and are not present in the actual JS code which TS\ncompiles to.\n\n### Buffer(number)\n\nFor Node.js 0.10.x (and below) support:\n\n```js\nvar buf;\nif (Buffer.alloc) {\n  buf = Buffer.alloc(number);\n} else {\n  buf = new Buffer(number);\n  buf.fill(0);\n}\n```\n\nOtherwise (Node.js ≥ 0.12.x):\n\n```js\nconst buf = Buffer.alloc ? Buffer.alloc(number) : new Buffer(number).fill(0);\n```\n\n## Regarding Buffer.allocUnsafe\n\nBe extra cautious when using `Buffer.allocUnsafe`:\n * Don't use it if you don't have a good reason to\n   * e.g. you probably won't ever see a performance difference for small buffers, in fact, those\n     might be even faster with `Buffer.alloc()`,\n   * if your code is not in the hot code path — you also probably won't notice a difference,\n   * keep in mind that zero-filling minimizes the potential risks.\n * If you use it, make sure that you never return the buffer in a partially-filled state,\n   * if you are writing to it sequentially — always truncate it to the actuall written length\n\nErrors in handling buffers allocated with `Buffer.allocUnsafe` could result in various issues,\nranged from undefined behaviour of your code to sensitive data (user input, passwords, certs)\nleaking to the remote attacker.\n\n_Note that the same applies to `new Buffer` usage without zero-filling, depending on the Node.js\nversion (and lacking type checks also adds DoS to the list of potential problems)._\n\n<a id=\"faq\"></a>\n## FAQ\n\n<a id=\"design-flaws\"></a>\n### What is wrong with the `Buffer` constructor?\n\nThe `Buffer` constructor could be used to create a buffer in many different ways:\n\n- `new Buffer(42)` creates a `Buffer` of 42 bytes. Before Node.js 8, this buffer contained\n  *arbitrary memory* for performance reasons, which could include anything ranging from\n  program source code to passwords and encryption keys.\n- `new Buffer('abc')` creates a `Buffer` that contains the UTF-8-encoded version of\n  the string `'abc'`. A second argument could specify another encoding: For example,\n  `new Buffer(string, 'base64')` could be used to convert a Base64 string into the original\n  sequence of bytes that it represents.\n- There are several other combinations of arguments.\n\nThis meant that, in code like `var buffer = new Buffer(foo);`, *it is not possible to tell\nwhat exactly the contents of the generated buffer are* without knowing the type of `foo`.\n\nSometimes, the value of `foo` comes from an external source. For example, this function\ncould be exposed as a service on a web server, converting a UTF-8 string into its Base64 form:\n\n```\nfunction stringToBase64(req, res) {\n  // The request body should have the format of `{ string: 'foobar' }`\n  const rawBytes = new Buffer(req.body.string)\n  const encoded = rawBytes.toString('base64')\n  res.end({ encoded: encoded })\n}\n```\n\nNote that this code does *not* validate the type of `req.body.string`:\n\n- `req.body.string` is expected to be a string. If this is the case, all goes well.\n- `req.body.string` is controlled by the client that sends the request.\n- If `req.body.string` is the *number* `50`, the `rawBytes` would be 50 bytes:\n  - Before Node.js 8, the content would be uninitialized\n  - After Node.js 8, the content would be `50` bytes with the value `0`\n\nBecause of the missing type check, an attacker could intentionally send a number\nas part of the request. Using this, they can either:\n\n- Read uninitialized memory. This **will** leak passwords, encryption keys and other\n  kinds of sensitive information. (Information leak)\n- Force the program to allocate a large amount of memory. For example, when specifying\n  `500000000` as the input value, each request will allocate 500MB of memory.\n  This can be used to either exhaust the memory available of a program completely\n  and make it crash, or slow it down significantly. (Denial of Service)\n\nBoth of these scenarios are considered serious security issues in a real-world\nweb server context.\n\nwhen using `Buffer.from(req.body.string)` instead, passing a number will always\nthrow an exception instead, giving a controlled behaviour that can always be\nhandled by the program.\n\n<a id=\"ecosystem-usage\"></a>\n### The `Buffer()` constructor has been deprecated for a while. Is this really an issue?\n\nSurveys of code in the `npm` ecosystem have shown that the `Buffer()` constructor is still\nwidely used. This includes new code, and overall usage of such code has actually been\n*increasing*.\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/c2V0LWNvb2tpZS1wYXJzZXJAMi42LjA=",
    "content": "/lib/set-cookie.js\u001a\u0003\"use strict\";\n\nvar defaultParseOptions = {\n  decodeValues: true,\n  map: false,\n  silent: false,\n};\n\nfunction isNonEmptyString(str) {\n  return typeof str === \"string\" && !!str.trim();\n}\n\nfunction parseString(setCookieValue, options) {\n  var parts = setCookieValue.split(\";\").filter(isNonEmptyString);\n\n  var nameValuePairStr = parts.shift();\n  var parsed = parseNameValuePair(nameValuePairStr);\n  var name = parsed.name;\n  var value = parsed.value;\n\n  options = options\n    ? Object.assign({}, defaultParseOptions, options)\n    : defaultParseOptions;\n\n  try {\n    value = options.decodeValues ? decodeURIComponent(value) : value; // decode cookie value\n  } catch (e) {\n    console.error(\n      \"set-cookie-parser encountered an error while decoding a cookie with value '\" +\n        value +\n        \"'. Set options.decodeValues to false to disable this feature.\",\n      e\n    );\n  }\n\n  var cookie = {\n    name: name,\n    value: value,\n  };\n\n  parts.forEach(function (part) {\n    var sides = part.split(\"=\");\n    var key = sides.shift().trimLeft().toLowerCase();\n    var value = sides.join(\"=\");\n    if (key === \"expires\") {\n      cookie.expires = new Date(value);\n    } else if (key === \"max-age\") {\n      cookie.maxAge = parseInt(value, 10);\n    } else if (key === \"secure\") {\n      cookie.secure = true;\n    } else if (key === \"httponly\") {\n      cookie.httpOnly = true;\n    } else if (key === \"samesite\") {\n      cookie.sameSite = value;\n    } else {\n      cookie[key] = value;\n    }\n  });\n\n  return cookie;\n}\n\nfunction parseNameValuePair(nameValuePairStr) {\n  // Parses name-value-pair according to rfc6265bis draft\n\n  var name = \"\";\n  var value = \"\";\n  var nameValueArr = nameValuePairStr.split(\"=\");\n  if (nameValueArr.length > 1) {\n    name = nameValueArr.shift();\n    value = nameValueArr.join(\"=\"); // everything after the first =, joined by a \"=\" if there was more than one part\n  } else {\n    value = nameValuePairStr;\n  }\n\n  return { name: name, value: value };\n}\n\nfunction parse(input, options) {\n  options = options\n    ? Object.assign({}, defaultParseOptions, options)\n    : defaultParseOptions;\n\n  if (!input) {\n    if (!options.map) {\n      return [];\n    } else {\n      return {};\n    }\n  }\n\n  if (input.headers) {\n    if (typeof input.headers.getSetCookie === \"function\") {\n      // for fetch responses - they combine headers of the same type in the headers array,\n      // but getSetCookie returns an uncombined array\n      input = input.headers.getSetCookie();\n    } else if (input.headers[\"set-cookie\"]) {\n      // fast-path for node.js (which automatically normalizes header names to lower-case\n      input = input.headers[\"set-cookie\"];\n    } else {\n      // slow-path for other environments - see #25\n      var sch =\n        input.headers[\n          Object.keys(input.headers).find(function (key) {\n            return key.toLowerCase() === \"set-cookie\";\n          })\n        ];\n      // warn if called on a request-like object with a cookie header rather than a set-cookie header - see #34, 36\n      if (!sch && input.headers.cookie && !options.silent) {\n        console.warn(\n          \"Warning: set-cookie-parser appears to have been called on a request object. It is designed to parse Set-Cookie headers from responses, not Cookie headers from requests. Set the option {silent: true} to suppress this warning.\"\n        );\n      }\n      input = sch;\n    }\n  }\n  if (!Array.isArray(input)) {\n    input = [input];\n  }\n\n  options = options\n    ? Object.assign({}, defaultParseOptions, options)\n    : defaultParseOptions;\n\n  if (!options.map) {\n    return input.filter(isNonEmptyString).map(function (str) {\n      return parseString(str, options);\n    });\n  } else {\n    var cookies = {};\n    return input.filter(isNonEmptyString).reduce(function (cookies, str) {\n      var cookie = parseString(str, options);\n      cookies[cookie.name] = cookie;\n      return cookies;\n    }, cookies);\n  }\n}\n\n/*\n  Set-Cookie header field-values are sometimes comma joined in one string. This splits them without choking on commas\n  that are within a single set-cookie field-value, such as in the Expires portion.\n\n  This is uncommon, but explicitly allowed - see https://tools.ietf.org/html/rfc2616#section-4.2\n  Node.js does this for every header *except* set-cookie - see https://github.com/nodejs/node/blob/d5e363b77ebaf1caf67cd7528224b651c86815c1/lib/_http_incoming.js#L128\n  React Native's fetch does this for *every* header, including set-cookie.\n\n  Based on: https://github.com/google/j2objc/commit/16820fdbc8f76ca0c33472810ce0cb03d20efe25\n  Credits to: https://github.com/tomball for original and https://github.com/chrusart for JavaScript implementation\n*/\nfunction splitCookiesString(cookiesString) {\n  if (Array.isArray(cookiesString)) {\n    return cookiesString;\n  }\n  if (typeof cookiesString !== \"string\") {\n    return [];\n  }\n\n  var cookiesStrings = [];\n  var pos = 0;\n  var start;\n  var ch;\n  var lastComma;\n  var nextStart;\n  var cookiesSeparatorFound;\n\n  function skipWhitespace() {\n    while (pos < cookiesString.length && /\\s/.test(cookiesString.charAt(pos))) {\n      pos += 1;\n    }\n    return pos < cookiesString.length;\n  }\n\n  function notSpecialChar() {\n    ch = cookiesString.charAt(pos);\n\n    return ch !== \"=\" && ch !== \";\" && ch !== \",\";\n  }\n\n  while (pos < cookiesString.length) {\n    start = pos;\n    cookiesSeparatorFound = false;\n\n    while (skipWhitespace()) {\n      ch = cookiesString.charAt(pos);\n      if (ch === \",\") {\n        // ',' is a cookie separator if we have later first '=', not ';' or ','\n        lastComma = pos;\n        pos += 1;\n\n        skipWhitespace();\n        nextStart = pos;\n\n        while (pos < cookiesString.length && notSpecialChar()) {\n          pos += 1;\n        }\n\n        // currently special character\n        if (pos < cookiesString.length && cookiesString.charAt(pos) === \"=\") {\n          // we found cookies separator\n          cookiesSeparatorFound = true;\n          // pos is inside the next cookie, so back up and return it.\n          pos = nextStart;\n          cookiesStrings.push(cookiesString.substring(start, lastComma));\n          start = pos;\n        } else {\n          // in param ',' or param separator ';',\n          // we continue from that comma\n          pos = lastComma + 1;\n        }\n      } else {\n        pos += 1;\n      }\n    }\n\n    if (!cookiesSeparatorFound || pos >= cookiesString.length) {\n      cookiesStrings.push(cookiesString.substring(start, cookiesString.length));\n    }\n  }\n\n  return cookiesStrings;\n}\n\nmodule.exports = parse;\nmodule.exports.parse = parse;\nmodule.exports.parseString = parseString;\nmodule.exports.splitCookiesString = splitCookiesString;\n/package.json\u0004\u0011{\r\n  \"name\": \"set-cookie-parser\",\r\n  \"version\": \"2.6.0\",\r\n  \"description\": \"Parses set-cookie headers into objects\",\r\n  \"homepage\": \"https://github.com/nfriedly/set-cookie-parser\",\r\n  \"repository\": \"nfriedly/set-cookie-parser\",\r\n  \"author\": {\r\n    \"name\": \"Nathan Friedly\",\r\n    \"email\": \"\",\r\n    \"url\": \"http://nfriedly.com/\"\r\n  },\r\n  \"files\": [\r\n    \"lib\"\r\n  ],\r\n  \"main\": \"./lib/set-cookie.js\",\r\n  \"sideEffects\": false,\r\n  \"keywords\": [\r\n    \"set-cookie\",\r\n    \"set\",\r\n    \"cookie\",\r\n    \"cookies\",\r\n    \"header\",\r\n    \"parser\"\r\n  ],\r\n  \"devDependencies\": {\r\n    \"eslint\": \"^8.17.0\",\r\n    \"eslint-config-prettier\": \"^6.10.1\",\r\n    \"eslint-plugin-prettier\": \"^3.1.2\",\r\n    \"husky\": \"^4.2.3\",\r\n    \"mocha\": \"^10.0.0\",\r\n    \"prettier\": \"^2.0.2\",\r\n    \"pretty-quick\": \"^2.0.1\",\r\n    \"sinon\": \"^9.0.1\"\r\n  },\r\n  \"scripts\": {\r\n    \"lint\": \"eslint . --ignore-pattern '!.eslintrc.js'\",\r\n    \"test\": \"npm run lint && mocha\",\r\n    \"autofix\": \"npm run lint -- --fix\",\r\n    \"precommit\": \"npm test\"\r\n  },\r\n  \"license\": \"MIT\",\r\n  \"dependencies\": {}\r\n}\r\n/LICENSE\u0004{The MIT License (MIT)\r\n\r\nCopyright (c) 2015 Nathan Friedly <nathan@nfriedly.com> (http://nfriedly.com/)\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in\r\nall copies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\nTHE SOFTWARE.\r\n/README.md\u001b # set-cookie-parser \r\n\r\n[![Node.js CI](https://github.com/nfriedly/set-cookie-parser/actions/workflows/node.js.yml/badge.svg)](https://github.com/nfriedly/set-cookie-parser/actions/workflows/node.js.yml)\r\n[![NPM version][npm-image]][npm-url] \r\n[![npm downloads](https://img.shields.io/npm/dm/set-cookie-parser)][npm-url]\r\n\r\nParses set-cookie headers into objects\r\n\r\nAccepts a single `set-cookie` header value, an array of `set-cookie` header values, a Node.js response object, or a `fetch()` `Response` object that may have 0 or more `set-cookie` headers.\r\n\r\nAlso accepts an optional options object. Defaults:\r\n\r\n```js\r\n{\r\n    decodeValues: true,  // Calls decodeURIComponent on each value - default: true\r\n    map: false,          // Return an object instead of an array - default: false\r\n    silent: false,       // Suppress the warning that is logged when called on a request instead of a response - default: false\r\n}\r\n```\r\n\r\nReturns either an array of cookie objects or a map of name => cookie object with `{map: true}`. Each cookie object will have, at a minimum `name` and `value` properties, and may have additional properties depending on the set-cookie header:\r\n\r\n* `name` - cookie name (string)\r\n* `value` - cookie value (string)\r\n* `path` - cookie path (string or undefined)\r\n* `domain` - domain for the cookie (string or undefined, may begin with \".\" to indicate the named domain or any subdomain of it)\r\n* `expires` - absolute expiration date for the cookie (Date object or undefined)\r\n* `maxAge` - relative max age of the cookie in seconds from when the client receives it (integer or undefined)\r\n  * Note: when using with [express's res.cookie() method](http://expressjs.com/en/4x/api.html#res.cookie), multiply `maxAge` by 1000 to convert to milliseconds.\r\n* `secure` - indicates that this cookie should only be sent over HTTPs (true or undefined)\r\n* `httpOnly` - indicates that this cookie should *not* be accessible to client-side JavaScript (true or undefined)\r\n* `sameSite` - indicates a cookie ought not to be sent along with cross-site requests (string or undefined)\r\n\r\n(The output format is loosely based on the input format of https://www.npmjs.com/package/cookie)\r\n\r\n## Install\r\n\r\n```sh\r\n$ npm install --save set-cookie-parser\r\n```\r\n\r\n\r\n## Usage\r\n\r\n### Get array of cookie objects\r\n\r\n```js\r\nvar http = require('http');\r\nvar setCookie = require('set-cookie-parser');\r\n\r\nhttp.get('http://example.com', function(res) {\r\n  var cookies = setCookie.parse(res, {\r\n    decodeValues: true  // default: true\r\n  });\r\n\r\n  cookies.forEach(console.log);\r\n}\r\n```\r\n\r\nExample output:\r\n\r\n```js\r\n[\r\n    {\r\n        name: 'bam',\r\n        value: 'baz'\r\n    },\r\n    {\r\n        name: 'foo',\r\n        value: 'bar',\r\n        path: '/',\r\n        expires: new Date('Tue Jul 01 2025 06:01:11 GMT-0400 (EDT)'),\r\n        maxAge: 1000,\r\n        domain: '.example.com',\r\n        secure: true,\r\n        httpOnly: true,\r\n        sameSite: 'lax'\r\n    }\r\n]\r\n```\r\n\r\n### Get map of cookie objects\r\n\r\n```js\r\nvar http = require('http');\r\nvar setCookie = require('set-cookie-parser');\r\n\r\nhttp.get('http://example.com', function(res) {\r\n  var cookies = setCookie.parse(res, {\r\n    decodeValues: true,  // default: true\r\n    map: true            // default: false\r\n  });\r\n\r\n  var desiredCookie = cookies['session'];\r\n  console.log(desiredCookie);\r\n});\r\n```\r\nExample output:\r\n```js\r\n{\r\n    bam: {\r\n        name: 'bam',\r\n        value: 'baz'\r\n    },\r\n    foo: {\r\n        name: 'foo',\r\n        value: 'bar',\r\n        path: '/',\r\n        expires: new Date('Tue Jul 01 2025 06:01:11 GMT-0400 (EDT)'),\r\n        maxAge: 1000,\r\n        domain: '.example.com',\r\n        secure: true,\r\n        httpOnly: true,\r\n        sameSite: 'lax'\r\n    }\r\n}\r\n```\r\n\r\n### Creating a new, modified set-cookie header\r\n\r\nThis library can be used in conjunction with the [cookie](https://www.npmjs.com/package/cookie) library to modify and replace set-cookie headers:\r\n\r\n```js\r\nconst libCookie = require('cookie');\r\nconst setCookie = require('set-cookie-parser');\r\n\r\nfunction modifySetCookie(res){\r\n  // parse the set-cookie headers with this library\r\n  let cookies = setCookie.parse(res);\r\n  \r\n  // modify the cookies here\r\n  // ...\r\n  \r\n  // create new set-cookie headers using the cookie library\r\n  res.headers['set-cookie'] = cookies.map(function(cookie) {\r\n      return libCookie.serialize(cookie.name, cookie.value, cookie);\r\n  });\r\n}\r\n```\r\n\r\nSee a real-world example of this in [unblocker](https://github.com/nfriedly/node-unblocker/blob/08a89ec27274b46dcd80d0a324a59406f2bdad3d/lib/cookies.js#L67-L85)\r\n\r\n## Usage in React Native (and with some other fetch implementations)\r\n\r\nReact Native follows the Fetch spec more closely and combines all of the Set-Cookie header values into a single string.\r\nThe `splitCookiesString` method reverses this.\r\n\r\n```js\r\nvar setCookie = require('set-cookie-parser');\r\n\r\nvar response = fetch(/*...*/);\r\n\r\n// This is mainly for React Native; Node.js does not combine set-cookie headers.\r\nvar combinedCookieHeader = response.headers.get('Set-Cookie');\r\nvar splitCookieHeaders = setCookie.splitCookiesString(combinedCookieHeader)\r\nvar cookies = setCookie.parse(splitCookieHeaders);\r\n\r\nconsole.log(cookies); // should be an array of cookies\r\n```\r\n\r\nThis behavior may become a default part of parse in the next major release, but requires the extra step for now.\r\n\r\nNote that the `fetch()` spec now includes a `getSetCookie()` method that provides un-combined `Set-Cookie` headers. This library will automatically use that method if it is present.\r\n\r\n## API\r\n\r\n### parse(input, [options])\r\n\r\nParses cookies from a string, array of strings, or a http response object. \r\nAlways returns an array, regardless of input format. (Unless the `map` option is set, in which case it always returns an object.)\r\n\r\n### parseString(individualSetCookieHeader, [options])\r\n\r\nParses a single set-cookie header value string. Options default is `{decodeValues: true}`. Used under-the-hood by `parse()`. \r\nReturns an object.\r\n\r\n### splitCookiesString(combinedSetCookieHeader)\r\n\r\nIt's uncommon, but the HTTP spec does allow for multiple of the same header to have their values combined (comma-separated) into a single header. \r\nThis method splits apart a combined header without choking on commas that appear within a cookie's value (or expiration date).\r\nReturns an array of strings that may be passed to `parse()`.\r\n\r\n## V2 Changes\r\n\r\n* Added decodeValues option (calls `decodeURIComponent()` on each cookie value), enabled by default.\r\n* Added `splitCookiesString` method.\r\n\r\n## References\r\n\r\n* [RFC 6265: HTTP State Management Mechanism](https://tools.ietf.org/html/rfc6265)\r\n* [draft-ietf-httpbis-rfc6265bis-10](https://httpwg.org/http-extensions/draft-ietf-httpbis-rfc6265bis.html)\r\n\r\n## License\r\n\r\nMIT © [Nathan Friedly](http://www.nfriedly.com/)\r\n\r\n\r\n[npm-image]: https://badge.fury.io/js/set-cookie-parser.svg\r\n[npm-url]: https://npmjs.org/package/set-cookie-parser\r\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/c2V0cHJvdG90eXBlb2ZAMS4yLjA=",
    "content": "/test/index.js\u0002'use strict'\n/* eslint-env mocha */\n/* eslint no-proto: 0 */\nvar assert = require('assert')\nvar setPrototypeOf = require('..')\n\ndescribe('setProtoOf(obj, proto)', function () {\n  it('should merge objects', function () {\n    var obj = { a: 1, b: 2 }\n    var proto = { b: 3, c: 4 }\n    var mergeObj = setPrototypeOf(obj, proto)\n\n    if (Object.getPrototypeOf) {\n      assert.strictEqual(Object.getPrototypeOf(obj), proto)\n    } else if ({ __proto__: [] } instanceof Array) {\n      assert.strictEqual(obj.__proto__, proto)\n    } else {\n      assert.strictEqual(obj.a, 1)\n      assert.strictEqual(obj.b, 2)\n      assert.strictEqual(obj.c, 4)\n    }\n    assert.strictEqual(mergeObj, obj)\n  })\n})\n/package.json\u0004{\n  \"name\": \"setprototypeof\",\n  \"version\": \"1.2.0\",\n  \"description\": \"A small polyfill for Object.setprototypeof\",\n  \"main\": \"index.js\",\n  \"typings\": \"index.d.ts\",\n  \"scripts\": {\n    \"test\": \"standard && mocha\",\n    \"testallversions\": \"npm run node010 && npm run node4 && npm run node6 && npm run node9 && npm run node11\",\n    \"testversion\": \"docker run -it --rm -v $(PWD):/usr/src/app -w /usr/src/app node:${NODE_VER} npm install mocha@${MOCHA_VER:-latest} && npm t\",\n    \"node010\": \"NODE_VER=0.10 MOCHA_VER=3 npm run testversion\",\n    \"node4\": \"NODE_VER=4 npm run testversion\",\n    \"node6\": \"NODE_VER=6 npm run testversion\",\n    \"node9\": \"NODE_VER=9 npm run testversion\",\n    \"node11\": \"NODE_VER=11 npm run testversion\",\n    \"prepublishOnly\": \"npm t\",\n    \"postpublish\": \"git push origin && git push origin --tags\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/wesleytodd/setprototypeof.git\"\n  },\n  \"keywords\": [\n    \"polyfill\",\n    \"object\",\n    \"setprototypeof\"\n  ],\n  \"author\": \"Wes Todd\",\n  \"license\": \"ISC\",\n  \"bugs\": {\n    \"url\": \"https://github.com/wesleytodd/setprototypeof/issues\"\n  },\n  \"homepage\": \"https://github.com/wesleytodd/setprototypeof\",\n  \"devDependencies\": {\n    \"mocha\": \"^6.1.4\",\n    \"standard\": \"^13.0.2\"\n  }\n}\n/LICENSE\u0002Copyright (c) 2015, Wes Todd\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted, provided that the above\ncopyright notice and this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\nWITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\nSPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION\nOF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN\nCONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n/README.md\u0003L# Polyfill for `Object.setPrototypeOf`\n\n[![NPM Version](https://img.shields.io/npm/v/setprototypeof.svg)](https://npmjs.org/package/setprototypeof)\n[![NPM Downloads](https://img.shields.io/npm/dm/setprototypeof.svg)](https://npmjs.org/package/setprototypeof)\n[![js-standard-style](https://img.shields.io/badge/code%20style-standard-brightgreen.svg)](https://github.com/standard/standard)\n\nA simple cross platform implementation to set the prototype of an instianted object.  Supports all modern browsers and at least back to IE8.\n\n## Usage:\n\n```\n$ npm install --save setprototypeof\n```\n\n```javascript\nvar setPrototypeOf = require('setprototypeof')\n\nvar obj = {}\nsetPrototypeOf(obj, {\n  foo: function () {\n    return 'bar'\n  }\n})\nobj.foo() // bar\n```\n\nTypeScript is also supported:\n\n```typescript\nimport setPrototypeOf from 'setprototypeof'\n```\n/index.js\u0001'use strict'\n/* eslint no-proto: 0 */\nmodule.exports = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array ? setProtoOf : mixinProperties)\n\nfunction setProtoOf (obj, proto) {\n  obj.__proto__ = proto\n  return obj\n}\n\nfunction mixinProperties (obj, proto) {\n  for (var prop in proto) {\n    if (!Object.prototype.hasOwnProperty.call(obj, prop)) {\n      obj[prop] = proto[prop]\n    }\n  }\n  return obj\n}\n/index.d.ts]declare function setPrototypeOf(o: any, proto: object | null): any;\nexport = setPrototypeOf;\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/c2VjdGlvbi1tYXR0ZXJAMS4wLjA=",
    "content": "/README.md\u001a# section-matter [![NPM version](https://img.shields.io/npm/v/section-matter.svg?style=flat)](https://www.npmjs.com/package/section-matter) [![NPM monthly downloads](https://img.shields.io/npm/dm/section-matter.svg?style=flat)](https://npmjs.org/package/section-matter) [![NPM total downloads](https://img.shields.io/npm/dt/section-matter.svg?style=flat)](https://npmjs.org/package/section-matter) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/section-matter.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/section-matter) \n\n> Like front-matter, but supports multiple sections in a document.\n\nPlease consider following this project's author, [Jon Schlinkert](https://github.com/jonschlinkert), and consider starring the project to show your :heart: and support.\n\n## Install\nInstall with [npm](https://www.npmjs.com/):\n\n```sh\n$ npm install --save section-matter\n```\n\n## Usage\n\n**Params**\n\n* `input` **{String|Buffer|Object}**: If input is an object, it's `content` property must be a string or buffer.    \n* **{Object}**: options    \n* `returns` **{Object}**: Returns an object with a `content` string and an array of `sections` objects.  \n\n**Example**\n\n```js\nvar sections = require('{%= name %}');\nvar result = sections(input, options);\n// { content: 'Content before sections', sections: [] }\n```\n\nSee available [options](#options).\n\n## Example\n\n_With the exception of front-matter, **which must be the very first thing in the string**, the opening delimiter of all other sections must be followed by a string to be used as the `key` for the section._\n\nGiven the following string:\n\n```\nContent before the sections.\n\n---\n\nMore content.\n\n---one\ntitle: One\n---\n\nThis is the first section.\n```\n\nThe following code:\n\n```js\nconsole.log(sections(input));\n```\n\nResults in:\n\n```js\n{ \n  content: 'Content before the sections.\\n\\n---\\n\\nMore content.\\n',\n  sections: [\n    { \n      key: 'one',\n      data: 'title: One',\n      content: '\\nThis is the first section.' \n    } \n  ] \n}\n```\n\n## Options\n\n### options.section_parse\n\n**Type**: `function`\n\n**Default**: `undefined`\n\nFunction to be called on each section after it's parsed from the string.\n\n**Example**\n\nGiven the following string (`foo.md`):\n\n```\nThis is content before the sections.\n\n---one\ntitle: First section\n---\n\nThis is section one.\n\n---two\ntitle: Second section\n---\n\nThis is section two.\n```\n\nUsing the following custom `section_parse` function:\n\n```js\nvar fs = require('fs');\nvar path = require('path');\nvar yaml = require('js-yaml');\nvar sections = require('section-matter');\n\nvar str = fs.readFileSync('foo.md');\nvar options = {\n  section_parse: function(section) {\n    console.log(section)\n    section.key = 'section-' + section.key;\n    section.data = yaml.safeLoad(section.data);\n  }\n};\n\nvar result = sections(str, options);\nconsole.log(result);\n```\n\nResults in:\n\n```js\n{\n  content: 'This is content before the sections.\\n',\n  sections: [\n    {\n      key: 'section-one',\n      data: { title: 'First section' },\n      content: '\\nThis is section one.\\n'\n    },\n    {\n      key: 'section-two',\n      data: { title: 'Second section' },\n      content: '\\nThis is section two.\\n'\n    }\n  ]\n}\n```\n\n### options.section_delimiter\n\n**Type**: `string`\n\n**Default**: `---`\n\nDelimiter to use as the separator for sections. _With the exception of front-matter, which must be the very first thing in the string, the opening delimiter of all other sections must be followed by a string to be used as the `key` for the section._\n\n**Example**\n\n```js\nvar input = '~~~\\ntitle: bar\\n~~~\\n\\nfoo\\n~~~one\\ntitle: One\\n~~~\\nThis is one';\nconsole.log(sections(input, {section_delimiter: '~~~'}));\n```\n\nResults in:\n\n```js\n{\n  content: '',\n  sections: [\n    {\n      key: '',\n      data: 'title: bar',\n      content: '\\nfoo'\n    },\n    {\n      key: 'one',\n      data: 'title: One',\n      content: 'This is one'\n    }\n  ]\n}\n```\n\n## About\n<details>\n  <summary><strong>Contributing</strong></summary>\n\nPull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).\n\nPlease read the [contributing guide](.github/contributing.md) for advice on opening issues, pull requests, and coding standards.\n\n</details>\n\n<details>\n  <summary><strong>Running Tests</strong></summary>\n\nRunning and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:\n\n```sh\n$ npm install && npm test\n```\n\n</details>\n\n<details>\n  <summary><strong>Building docs</strong></summary>\n\n_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_\n\nTo generate the readme, run the following command:\n\n```sh\n$ npm install -g verbose/verb#dev verb-generate-readme && verb\n```\n\n</details>\n\n### Related projects\n\nYou might also be interested in these projects: \n\n- [assemble](https://www.npmjs.com/package/assemble): Get the rocks out of your socks! Assemble makes you fast at creating web projects… [more](https://github.com/assemble/assemble) | [homepage](https://github.com/assemble/assemble \"Get the rocks out of your socks! Assemble makes you fast at creating web projects. Assemble is used by thousands of projects for rapid prototyping, creating themes, scaffolds, boilerplates, e-books, UI components, API documentation, blogs, building websit\")\n- [gray-matter](https://www.npmjs.com/package/gray-matter): Parse front-matter from a string or file. Fast, reliable and easy to use. Parses YAML… [more](https://github.com/jonschlinkert/gray-matter) | [homepage](https://github.com/jonschlinkert/gray-matter \"Parse front-matter from a string or file. Fast, reliable and easy to use. Parses YAML front matter by default, but also has support for YAML, JSON, TOML or Coffee Front-Matter, with options to set custom delimiters. Used by metalsmith, assemble, verb and \")\n- [verb](https://www.npmjs.com/package/verb): Documentation generator for GitHub projects. Verb is extremely powerful, easy to use, and is used… [more](https://github.com/verbose/verb) | [homepage](https://github.com/verbose/verb \"Documentation generator for GitHub projects. Verb is extremely powerful, easy to use, and is used on hundreds of projects of all sizes to generate everything from API docs to readmes.\")  \n\n### Contributors\n\n### Author\n**Jon Schlinkert**\n\n+ [github/jonschlinkert](https://github.com/jonschlinkert)\n+ [twitter/jonschlinkert](https://twitter.com/jonschlinkert)\n\n### License\nCopyright © 2017, [Jon Schlinkert](https://github.com/jonschlinkert).\nReleased under the [MIT License](LICENSE).\n\n***\n\n_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.6.0, on October 23, 2017._\n\n/LICENSE\u0004;The MIT License (MIT)\n\nCopyright (c) 2017, Jon Schlinkert.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n/index.js\f\n'use strict';\n\nvar typeOf = require('kind-of');\nvar extend = require('extend-shallow');\n\n/**\n * Parse sections in `input` with the given `options`.\n *\n * ```js\n * var sections = require('{%= name %}');\n * var result = sections(input, options);\n * // { content: 'Content before sections', sections: [] }\n * ```\n * @param {String|Buffer|Object} `input` If input is an object, it's `content` property must be a string or buffer.\n * @param {Object} options\n * @return {Object} Returns an object with a `content` string and an array of `sections` objects.\n * @api public\n */\n\nmodule.exports = function(input, options) {\n  if (typeof options === 'function') {\n    options = { parse: options };\n  }\n\n  var file = toObject(input);\n  var defaults = {section_delimiter: '---', parse: identity};\n  var opts = extend({}, defaults, options);\n  var delim = opts.section_delimiter;\n  var lines = file.content.split(/\\r?\\n/);\n  var sections = null;\n  var section = createSection();\n  var content = [];\n  var stack = [];\n\n  function initSections(val) {\n    file.content = val;\n    sections = [];\n    content = [];\n  }\n\n  function closeSection(val) {\n    if (stack.length) {\n      section.key = getKey(stack[0], delim);\n      section.content = val;\n      opts.parse(section, sections);\n      sections.push(section);\n      section = createSection();\n      content = [];\n      stack = [];\n    }\n  }\n\n  for (var i = 0; i < lines.length; i++) {\n    var line = lines[i];\n    var len = stack.length;\n    var ln = line.trim();\n\n    if (isDelimiter(ln, delim)) {\n      if (ln.length === 3 && i !== 0) {\n        if (len === 0 || len === 2) {\n          content.push(line);\n          continue;\n        }\n        stack.push(ln);\n        section.data = content.join('\\n');\n        content = [];\n        continue;\n      }\n\n      if (sections === null) {\n        initSections(content.join('\\n'));\n      }\n\n      if (len === 2) {\n        closeSection(content.join('\\n'));\n      }\n\n      stack.push(ln);\n      continue;\n    }\n\n    content.push(line);\n  }\n\n  if (sections === null) {\n    initSections(content.join('\\n'));\n  } else {\n    closeSection(content.join('\\n'));\n  }\n\n  file.sections = sections;\n  return file;\n};\n\nfunction isDelimiter(line, delim) {\n  if (line.slice(0, delim.length) !== delim) {\n    return false;\n  }\n  if (line.charAt(delim.length + 1) === delim.slice(-1)) {\n    return false;\n  }\n  return true;\n}\n\nfunction toObject(input) {\n  if (typeOf(input) !== 'object') {\n    input = { content: input };\n  }\n\n  if (typeof input.content !== 'string' && !isBuffer(input.content)) {\n    throw new TypeError('expected a buffer or string');\n  }\n\n  input.content = input.content.toString();\n  input.sections = [];\n  return input;\n}\n\nfunction getKey(val, delim) {\n  return val ? val.slice(delim.length).trim() : '';\n}\n\nfunction createSection() {\n  return { key: '', data: '', content: '' };\n}\n\nfunction identity(val) {\n  return val;\n}\n\nfunction isBuffer(val) {\n  if (val && val.constructor && typeof val.constructor.isBuffer === 'function') {\n    return val.constructor.isBuffer(val);\n  }\n  return false;\n}\n/package.json\u0004={\n  \"name\": \"section-matter\",\n  \"description\": \"Like front-matter, but supports multiple sections in a document.\",\n  \"version\": \"1.0.0\",\n  \"homepage\": \"https://github.com/jonschlinkert/section-matter\",\n  \"author\": \"Jon Schlinkert (https://github.com/jonschlinkert)\",\n  \"repository\": \"jonschlinkert/section-matter\",\n  \"bugs\": {\n    \"url\": \"https://github.com/jonschlinkert/section-matter/issues\"\n  },\n  \"license\": \"MIT\",\n  \"files\": [\n    \"index.js\"\n  ],\n  \"main\": \"index.js\",\n  \"engines\": {\n    \"node\": \">=4\"\n  },\n  \"scripts\": {\n    \"test\": \"mocha\"\n  },\n  \"dependencies\": {\n    \"extend-shallow\": \"^2.0.1\",\n    \"kind-of\": \"^6.0.0\"\n  },\n  \"devDependencies\": {\n    \"gulp-format-md\": \"^1.0.0\",\n    \"js-yaml\": \"^3.10.0\",\n    \"mocha\": \"^4.0.1\"\n  },\n  \"keywords\": [\n    \"matter\",\n    \"section\"\n  ],\n  \"verb\": {\n    \"toc\": false,\n    \"layout\": \"default\",\n    \"tasks\": [\n      \"readme\"\n    ],\n    \"plugins\": [\n      \"gulp-format-md\"\n    ],\n    \"related\": {\n      \"list\": [\n        \"gray-matter\",\n        \"assemble\",\n        \"verb\"\n      ]\n    },\n    \"lint\": {\n      \"reflinks\": true\n    }\n  }\n}\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/c2VtdmVyQDYuMy4w",
    "content": "/package.json\u0002/{\n  \"name\": \"semver\",\n  \"version\": \"6.3.0\",\n  \"description\": \"The semantic version parser used by npm.\",\n  \"main\": \"semver.js\",\n  \"scripts\": {\n    \"test\": \"tap\",\n    \"preversion\": \"npm test\",\n    \"postversion\": \"npm publish\",\n    \"postpublish\": \"git push origin --follow-tags\"\n  },\n  \"devDependencies\": {\n    \"tap\": \"^14.3.1\"\n  },\n  \"license\": \"ISC\",\n  \"repository\": \"https://github.com/npm/node-semver\",\n  \"bin\": {\n    \"semver\": \"./bin/semver.js\"\n  },\n  \"files\": [\n    \"bin\",\n    \"range.bnf\",\n    \"semver.js\"\n  ],\n  \"tap\": {\n    \"check-coverage\": true\n  }\n}\n/bin/semver.js\u0012m#!/usr/bin/env node\n// Standalone semver comparison program.\n// Exits successfully and prints matching version(s) if\n// any supplied version is valid and passes all tests.\n\nvar argv = process.argv.slice(2)\n\nvar versions = []\n\nvar range = []\n\nvar inc = null\n\nvar version = require('../package.json').version\n\nvar loose = false\n\nvar includePrerelease = false\n\nvar coerce = false\n\nvar rtl = false\n\nvar identifier\n\nvar semver = require('../semver')\n\nvar reverse = false\n\nvar options = {}\n\nmain()\n\nfunction main () {\n  if (!argv.length) return help()\n  while (argv.length) {\n    var a = argv.shift()\n    var indexOfEqualSign = a.indexOf('=')\n    if (indexOfEqualSign !== -1) {\n      a = a.slice(0, indexOfEqualSign)\n      argv.unshift(a.slice(indexOfEqualSign + 1))\n    }\n    switch (a) {\n      case '-rv': case '-rev': case '--rev': case '--reverse':\n        reverse = true\n        break\n      case '-l': case '--loose':\n        loose = true\n        break\n      case '-p': case '--include-prerelease':\n        includePrerelease = true\n        break\n      case '-v': case '--version':\n        versions.push(argv.shift())\n        break\n      case '-i': case '--inc': case '--increment':\n        switch (argv[0]) {\n          case 'major': case 'minor': case 'patch': case 'prerelease':\n          case 'premajor': case 'preminor': case 'prepatch':\n            inc = argv.shift()\n            break\n          default:\n            inc = 'patch'\n            break\n        }\n        break\n      case '--preid':\n        identifier = argv.shift()\n        break\n      case '-r': case '--range':\n        range.push(argv.shift())\n        break\n      case '-c': case '--coerce':\n        coerce = true\n        break\n      case '--rtl':\n        rtl = true\n        break\n      case '--ltr':\n        rtl = false\n        break\n      case '-h': case '--help': case '-?':\n        return help()\n      default:\n        versions.push(a)\n        break\n    }\n  }\n\n  var options = { loose: loose, includePrerelease: includePrerelease, rtl: rtl }\n\n  versions = versions.map(function (v) {\n    return coerce ? (semver.coerce(v, options) || { version: v }).version : v\n  }).filter(function (v) {\n    return semver.valid(v)\n  })\n  if (!versions.length) return fail()\n  if (inc && (versions.length !== 1 || range.length)) { return failInc() }\n\n  for (var i = 0, l = range.length; i < l; i++) {\n    versions = versions.filter(function (v) {\n      return semver.satisfies(v, range[i], options)\n    })\n    if (!versions.length) return fail()\n  }\n  return success(versions)\n}\n\nfunction failInc () {\n  console.error('--inc can only be used on a single version with no range')\n  fail()\n}\n\nfunction fail () { process.exit(1) }\n\nfunction success () {\n  var compare = reverse ? 'rcompare' : 'compare'\n  versions.sort(function (a, b) {\n    return semver[compare](a, b, options)\n  }).map(function (v) {\n    return semver.clean(v, options)\n  }).map(function (v) {\n    return inc ? semver.inc(v, inc, options, identifier) : v\n  }).forEach(function (v, i, _) { console.log(v) })\n}\n\nfunction help () {\n  console.log(['SemVer ' + version,\n    '',\n    'A JavaScript implementation of the https://semver.org/ specification',\n    'Copyright Isaac Z. Schlueter',\n    '',\n    'Usage: semver [options] <version> [<version> [...]]',\n    'Prints valid versions sorted by SemVer precedence',\n    '',\n    'Options:',\n    '-r --range <range>',\n    '        Print versions that match the specified range.',\n    '',\n    '-i --increment [<level>]',\n    '        Increment a version by the specified level.  Level can',\n    '        be one of: major, minor, patch, premajor, preminor,',\n    \"        prepatch, or prerelease.  Default level is 'patch'.\",\n    '        Only one version may be specified.',\n    '',\n    '--preid <identifier>',\n    '        Identifier to be used to prefix premajor, preminor,',\n    '        prepatch or prerelease version increments.',\n    '',\n    '-l --loose',\n    '        Interpret versions and ranges loosely',\n    '',\n    '-p --include-prerelease',\n    '        Always include prerelease versions in range matching',\n    '',\n    '-c --coerce',\n    '        Coerce a string into SemVer if possible',\n    '        (does not imply --loose)',\n    '',\n    '--rtl',\n    '        Coerce version strings right to left',\n    '',\n    '--ltr',\n    '        Coerce version strings left to right (default)',\n    '',\n    'Program exits successfully if any valid version satisfies',\n    'all supplied ranges, and prints all satisfying versions.',\n    '',\n    'If no satisfying versions are found, then exits failure.',\n    '',\n    'Versions are printed in ascending order, so supplying',\n    'multiple versions to the utility will just sort them.'\n  ].join('\\n'))\n}\n/LICENSE\u0002The ISC License\n\nCopyright (c) Isaac Z. Schlueter and Contributors\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted, provided that the above\ncopyright notice and this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\nWITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\nANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\nACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR\nIN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n/README.mdBNsemver(1) -- The semantic versioner for npm\n===========================================\n\n## Install\n\n```bash\nnpm install semver\n````\n\n## Usage\n\nAs a node module:\n\n```js\nconst semver = require('semver')\n\nsemver.valid('1.2.3') // '1.2.3'\nsemver.valid('a.b.c') // null\nsemver.clean('  =v1.2.3   ') // '1.2.3'\nsemver.satisfies('1.2.3', '1.x || >=2.5.0 || 5.0.0 - 7.2.3') // true\nsemver.gt('1.2.3', '9.8.7') // false\nsemver.lt('1.2.3', '9.8.7') // true\nsemver.minVersion('>=1.0.0') // '1.0.0'\nsemver.valid(semver.coerce('v2')) // '2.0.0'\nsemver.valid(semver.coerce('42.6.7.9.3-alpha')) // '42.6.7'\n```\n\nAs a command-line utility:\n\n```\n$ semver -h\n\nA JavaScript implementation of the https://semver.org/ specification\nCopyright Isaac Z. Schlueter\n\nUsage: semver [options] <version> [<version> [...]]\nPrints valid versions sorted by SemVer precedence\n\nOptions:\n-r --range <range>\n        Print versions that match the specified range.\n\n-i --increment [<level>]\n        Increment a version by the specified level.  Level can\n        be one of: major, minor, patch, premajor, preminor,\n        prepatch, or prerelease.  Default level is 'patch'.\n        Only one version may be specified.\n\n--preid <identifier>\n        Identifier to be used to prefix premajor, preminor,\n        prepatch or prerelease version increments.\n\n-l --loose\n        Interpret versions and ranges loosely\n\n-p --include-prerelease\n        Always include prerelease versions in range matching\n\n-c --coerce\n        Coerce a string into SemVer if possible\n        (does not imply --loose)\n\n--rtl\n        Coerce version strings right to left\n\n--ltr\n        Coerce version strings left to right (default)\n\nProgram exits successfully if any valid version satisfies\nall supplied ranges, and prints all satisfying versions.\n\nIf no satisfying versions are found, then exits failure.\n\nVersions are printed in ascending order, so supplying\nmultiple versions to the utility will just sort them.\n```\n\n## Versions\n\nA \"version\" is described by the `v2.0.0` specification found at\n<https://semver.org/>.\n\nA leading `\"=\"` or `\"v\"` character is stripped off and ignored.\n\n## Ranges\n\nA `version range` is a set of `comparators` which specify versions\nthat satisfy the range.\n\nA `comparator` is composed of an `operator` and a `version`.  The set\nof primitive `operators` is:\n\n* `<` Less than\n* `<=` Less than or equal to\n* `>` Greater than\n* `>=` Greater than or equal to\n* `=` Equal.  If no operator is specified, then equality is assumed,\n  so this operator is optional, but MAY be included.\n\nFor example, the comparator `>=1.2.7` would match the versions\n`1.2.7`, `1.2.8`, `2.5.3`, and `1.3.9`, but not the versions `1.2.6`\nor `1.1.0`.\n\nComparators can be joined by whitespace to form a `comparator set`,\nwhich is satisfied by the **intersection** of all of the comparators\nit includes.\n\nA range is composed of one or more comparator sets, joined by `||`.  A\nversion matches a range if and only if every comparator in at least\none of the `||`-separated comparator sets is satisfied by the version.\n\nFor example, the range `>=1.2.7 <1.3.0` would match the versions\n`1.2.7`, `1.2.8`, and `1.2.99`, but not the versions `1.2.6`, `1.3.0`,\nor `1.1.0`.\n\nThe range `1.2.7 || >=1.2.9 <2.0.0` would match the versions `1.2.7`,\n`1.2.9`, and `1.4.6`, but not the versions `1.2.8` or `2.0.0`.\n\n### Prerelease Tags\n\nIf a version has a prerelease tag (for example, `1.2.3-alpha.3`) then\nit will only be allowed to satisfy comparator sets if at least one\ncomparator with the same `[major, minor, patch]` tuple also has a\nprerelease tag.\n\nFor example, the range `>1.2.3-alpha.3` would be allowed to match the\nversion `1.2.3-alpha.7`, but it would *not* be satisfied by\n`3.4.5-alpha.9`, even though `3.4.5-alpha.9` is technically \"greater\nthan\" `1.2.3-alpha.3` according to the SemVer sort rules.  The version\nrange only accepts prerelease tags on the `1.2.3` version.  The\nversion `3.4.5` *would* satisfy the range, because it does not have a\nprerelease flag, and `3.4.5` is greater than `1.2.3-alpha.7`.\n\nThe purpose for this behavior is twofold.  First, prerelease versions\nfrequently are updated very quickly, and contain many breaking changes\nthat are (by the author's design) not yet fit for public consumption.\nTherefore, by default, they are excluded from range matching\nsemantics.\n\nSecond, a user who has opted into using a prerelease version has\nclearly indicated the intent to use *that specific* set of\nalpha/beta/rc versions.  By including a prerelease tag in the range,\nthe user is indicating that they are aware of the risk.  However, it\nis still not appropriate to assume that they have opted into taking a\nsimilar risk on the *next* set of prerelease versions.\n\nNote that this behavior can be suppressed (treating all prerelease\nversions as if they were normal versions, for the purpose of range\nmatching) by setting the `includePrerelease` flag on the options\nobject to any\n[functions](https://github.com/npm/node-semver#functions) that do\nrange matching.\n\n#### Prerelease Identifiers\n\nThe method `.inc` takes an additional `identifier` string argument that\nwill append the value of the string as a prerelease identifier:\n\n```javascript\nsemver.inc('1.2.3', 'prerelease', 'beta')\n// '1.2.4-beta.0'\n```\n\ncommand-line example:\n\n```bash\n$ semver 1.2.3 -i prerelease --preid beta\n1.2.4-beta.0\n```\n\nWhich then can be used to increment further:\n\n```bash\n$ semver 1.2.4-beta.0 -i prerelease\n1.2.4-beta.1\n```\n\n### Advanced Range Syntax\n\nAdvanced range syntax desugars to primitive comparators in\ndeterministic ways.\n\nAdvanced ranges may be combined in the same way as primitive\ncomparators using white space or `||`.\n\n#### Hyphen Ranges `X.Y.Z - A.B.C`\n\nSpecifies an inclusive set.\n\n* `1.2.3 - 2.3.4` := `>=1.2.3 <=2.3.4`\n\nIf a partial version is provided as the first version in the inclusive\nrange, then the missing pieces are replaced with zeroes.\n\n* `1.2 - 2.3.4` := `>=1.2.0 <=2.3.4`\n\nIf a partial version is provided as the second version in the\ninclusive range, then all versions that start with the supplied parts\nof the tuple are accepted, but nothing that would be greater than the\nprovided tuple parts.\n\n* `1.2.3 - 2.3` := `>=1.2.3 <2.4.0`\n* `1.2.3 - 2` := `>=1.2.3 <3.0.0`\n\n#### X-Ranges `1.2.x` `1.X` `1.2.*` `*`\n\nAny of `X`, `x`, or `*` may be used to \"stand in\" for one of the\nnumeric values in the `[major, minor, patch]` tuple.\n\n* `*` := `>=0.0.0` (Any version satisfies)\n* `1.x` := `>=1.0.0 <2.0.0` (Matching major version)\n* `1.2.x` := `>=1.2.0 <1.3.0` (Matching major and minor versions)\n\nA partial version range is treated as an X-Range, so the special\ncharacter is in fact optional.\n\n* `\"\"` (empty string) := `*` := `>=0.0.0`\n* `1` := `1.x.x` := `>=1.0.0 <2.0.0`\n* `1.2` := `1.2.x` := `>=1.2.0 <1.3.0`\n\n#### Tilde Ranges `~1.2.3` `~1.2` `~1`\n\nAllows patch-level changes if a minor version is specified on the\ncomparator.  Allows minor-level changes if not.\n\n* `~1.2.3` := `>=1.2.3 <1.(2+1).0` := `>=1.2.3 <1.3.0`\n* `~1.2` := `>=1.2.0 <1.(2+1).0` := `>=1.2.0 <1.3.0` (Same as `1.2.x`)\n* `~1` := `>=1.0.0 <(1+1).0.0` := `>=1.0.0 <2.0.0` (Same as `1.x`)\n* `~0.2.3` := `>=0.2.3 <0.(2+1).0` := `>=0.2.3 <0.3.0`\n* `~0.2` := `>=0.2.0 <0.(2+1).0` := `>=0.2.0 <0.3.0` (Same as `0.2.x`)\n* `~0` := `>=0.0.0 <(0+1).0.0` := `>=0.0.0 <1.0.0` (Same as `0.x`)\n* `~1.2.3-beta.2` := `>=1.2.3-beta.2 <1.3.0` Note that prereleases in\n  the `1.2.3` version will be allowed, if they are greater than or\n  equal to `beta.2`.  So, `1.2.3-beta.4` would be allowed, but\n  `1.2.4-beta.2` would not, because it is a prerelease of a\n  different `[major, minor, patch]` tuple.\n\n#### Caret Ranges `^1.2.3` `^0.2.5` `^0.0.4`\n\nAllows changes that do not modify the left-most non-zero element in the\n`[major, minor, patch]` tuple.  In other words, this allows patch and\nminor updates for versions `1.0.0` and above, patch updates for\nversions `0.X >=0.1.0`, and *no* updates for versions `0.0.X`.\n\nMany authors treat a `0.x` version as if the `x` were the major\n\"breaking-change\" indicator.\n\nCaret ranges are ideal when an author may make breaking changes\nbetween `0.2.4` and `0.3.0` releases, which is a common practice.\nHowever, it presumes that there will *not* be breaking changes between\n`0.2.4` and `0.2.5`.  It allows for changes that are presumed to be\nadditive (but non-breaking), according to commonly observed practices.\n\n* `^1.2.3` := `>=1.2.3 <2.0.0`\n* `^0.2.3` := `>=0.2.3 <0.3.0`\n* `^0.0.3` := `>=0.0.3 <0.0.4`\n* `^1.2.3-beta.2` := `>=1.2.3-beta.2 <2.0.0` Note that prereleases in\n  the `1.2.3` version will be allowed, if they are greater than or\n  equal to `beta.2`.  So, `1.2.3-beta.4` would be allowed, but\n  `1.2.4-beta.2` would not, because it is a prerelease of a\n  different `[major, minor, patch]` tuple.\n* `^0.0.3-beta` := `>=0.0.3-beta <0.0.4`  Note that prereleases in the\n  `0.0.3` version *only* will be allowed, if they are greater than or\n  equal to `beta`.  So, `0.0.3-pr.2` would be allowed.\n\nWhen parsing caret ranges, a missing `patch` value desugars to the\nnumber `0`, but will allow flexibility within that value, even if the\nmajor and minor versions are both `0`.\n\n* `^1.2.x` := `>=1.2.0 <2.0.0`\n* `^0.0.x` := `>=0.0.0 <0.1.0`\n* `^0.0` := `>=0.0.0 <0.1.0`\n\nA missing `minor` and `patch` values will desugar to zero, but also\nallow flexibility within those values, even if the major version is\nzero.\n\n* `^1.x` := `>=1.0.0 <2.0.0`\n* `^0.x` := `>=0.0.0 <1.0.0`\n\n### Range Grammar\n\nPutting all this together, here is a Backus-Naur grammar for ranges,\nfor the benefit of parser authors:\n\n```bnf\nrange-set  ::= range ( logical-or range ) *\nlogical-or ::= ( ' ' ) * '||' ( ' ' ) *\nrange      ::= hyphen | simple ( ' ' simple ) * | ''\nhyphen     ::= partial ' - ' partial\nsimple     ::= primitive | partial | tilde | caret\nprimitive  ::= ( '<' | '>' | '>=' | '<=' | '=' ) partial\npartial    ::= xr ( '.' xr ( '.' xr qualifier ? )? )?\nxr         ::= 'x' | 'X' | '*' | nr\nnr         ::= '0' | ['1'-'9'] ( ['0'-'9'] ) *\ntilde      ::= '~' partial\ncaret      ::= '^' partial\nqualifier  ::= ( '-' pre )? ( '+' build )?\npre        ::= parts\nbuild      ::= parts\nparts      ::= part ( '.' part ) *\npart       ::= nr | [-0-9A-Za-z]+\n```\n\n## Functions\n\nAll methods and classes take a final `options` object argument.  All\noptions in this object are `false` by default.  The options supported\nare:\n\n- `loose`  Be more forgiving about not-quite-valid semver strings.\n  (Any resulting output will always be 100% strict compliant, of\n  course.)  For backwards compatibility reasons, if the `options`\n  argument is a boolean value instead of an object, it is interpreted\n  to be the `loose` param.\n- `includePrerelease`  Set to suppress the [default\n  behavior](https://github.com/npm/node-semver#prerelease-tags) of\n  excluding prerelease tagged versions from ranges unless they are\n  explicitly opted into.\n\nStrict-mode Comparators and Ranges will be strict about the SemVer\nstrings that they parse.\n\n* `valid(v)`: Return the parsed version, or null if it's not valid.\n* `inc(v, release)`: Return the version incremented by the release\n  type (`major`,   `premajor`, `minor`, `preminor`, `patch`,\n  `prepatch`, or `prerelease`), or null if it's not valid\n  * `premajor` in one call will bump the version up to the next major\n    version and down to a prerelease of that major version.\n    `preminor`, and `prepatch` work the same way.\n  * If called from a non-prerelease version, the `prerelease` will work the\n    same as `prepatch`. It increments the patch version, then makes a\n    prerelease. If the input version is already a prerelease it simply\n    increments it.\n* `prerelease(v)`: Returns an array of prerelease components, or null\n  if none exist. Example: `prerelease('1.2.3-alpha.1') -> ['alpha', 1]`\n* `major(v)`: Return the major version number.\n* `minor(v)`: Return the minor version number.\n* `patch(v)`: Return the patch version number.\n* `intersects(r1, r2, loose)`: Return true if the two supplied ranges\n  or comparators intersect.\n* `parse(v)`: Attempt to parse a string as a semantic version, returning either\n  a `SemVer` object or `null`.\n\n### Comparison\n\n* `gt(v1, v2)`: `v1 > v2`\n* `gte(v1, v2)`: `v1 >= v2`\n* `lt(v1, v2)`: `v1 < v2`\n* `lte(v1, v2)`: `v1 <= v2`\n* `eq(v1, v2)`: `v1 == v2` This is true if they're logically equivalent,\n  even if they're not the exact same string.  You already know how to\n  compare strings.\n* `neq(v1, v2)`: `v1 != v2` The opposite of `eq`.\n* `cmp(v1, comparator, v2)`: Pass in a comparison string, and it'll call\n  the corresponding function above.  `\"===\"` and `\"!==\"` do simple\n  string comparison, but are included for completeness.  Throws if an\n  invalid comparison string is provided.\n* `compare(v1, v2)`: Return `0` if `v1 == v2`, or `1` if `v1` is greater, or `-1` if\n  `v2` is greater.  Sorts in ascending order if passed to `Array.sort()`.\n* `rcompare(v1, v2)`: The reverse of compare.  Sorts an array of versions\n  in descending order when passed to `Array.sort()`.\n* `compareBuild(v1, v2)`: The same as `compare` but considers `build` when two versions\n  are equal.  Sorts in ascending order if passed to `Array.sort()`.\n  `v2` is greater.  Sorts in ascending order if passed to `Array.sort()`.\n* `diff(v1, v2)`: Returns difference between two versions by the release type\n  (`major`, `premajor`, `minor`, `preminor`, `patch`, `prepatch`, or `prerelease`),\n  or null if the versions are the same.\n\n### Comparators\n\n* `intersects(comparator)`: Return true if the comparators intersect\n\n### Ranges\n\n* `validRange(range)`: Return the valid range or null if it's not valid\n* `satisfies(version, range)`: Return true if the version satisfies the\n  range.\n* `maxSatisfying(versions, range)`: Return the highest version in the list\n  that satisfies the range, or `null` if none of them do.\n* `minSatisfying(versions, range)`: Return the lowest version in the list\n  that satisfies the range, or `null` if none of them do.\n* `minVersion(range)`: Return the lowest version that can possibly match\n  the given range.\n* `gtr(version, range)`: Return `true` if version is greater than all the\n  versions possible in the range.\n* `ltr(version, range)`: Return `true` if version is less than all the\n  versions possible in the range.\n* `outside(version, range, hilo)`: Return true if the version is outside\n  the bounds of the range in either the high or low direction.  The\n  `hilo` argument must be either the string `'>'` or `'<'`.  (This is\n  the function called by `gtr` and `ltr`.)\n* `intersects(range)`: Return true if any of the ranges comparators intersect\n\nNote that, since ranges may be non-contiguous, a version might not be\ngreater than a range, less than a range, *or* satisfy a range!  For\nexample, the range `1.2 <1.2.9 || >2.0.0` would have a hole from `1.2.9`\nuntil `2.0.0`, so the version `1.2.10` would not be greater than the\nrange (because `2.0.1` satisfies, which is higher), nor less than the\nrange (since `1.2.8` satisfies, which is lower), and it also does not\nsatisfy the range.\n\nIf you want to know if a version satisfies or does not satisfy a\nrange, use the `satisfies(version, range)` function.\n\n### Coercion\n\n* `coerce(version, options)`: Coerces a string to semver if possible\n\nThis aims to provide a very forgiving translation of a non-semver string to\nsemver. It looks for the first digit in a string, and consumes all\nremaining characters which satisfy at least a partial semver (e.g., `1`,\n`1.2`, `1.2.3`) up to the max permitted length (256 characters).  Longer\nversions are simply truncated (`4.6.3.9.2-alpha2` becomes `4.6.3`).  All\nsurrounding text is simply ignored (`v3.4 replaces v3.3.1` becomes\n`3.4.0`).  Only text which lacks digits will fail coercion (`version one`\nis not valid).  The maximum  length for any semver component considered for\ncoercion is 16 characters; longer components will be ignored\n(`10000000000000000.4.7.4` becomes `4.7.4`).  The maximum value for any\nsemver component is `Integer.MAX_SAFE_INTEGER || (2**53 - 1)`; higher value\ncomponents are invalid (`9999999999999999.4.7.4` is likely invalid).\n\nIf the `options.rtl` flag is set, then `coerce` will return the right-most\ncoercible tuple that does not share an ending index with a longer coercible\ntuple.  For example, `1.2.3.4` will return `2.3.4` in rtl mode, not\n`4.0.0`.  `1.2.3/4` will return `4.0.0`, because the `4` is not a part of\nany other overlapping SemVer tuple.\n\n### Clean\n\n* `clean(version)`: Clean a string to be a valid semver if possible\n\nThis will return a cleaned and trimmed semver version. If the provided version is not valid a null will be returned. This does not work for ranges. \n\nex.\n* `s.clean(' = v 2.1.5foo')`: `null`\n* `s.clean(' = v 2.1.5foo', { loose: true })`: `'2.1.5-foo'`\n* `s.clean(' = v 2.1.5-foo')`: `null`\n* `s.clean(' = v 2.1.5-foo', { loose: true })`: `'2.1.5-foo'`\n* `s.clean('=v2.1.5')`: `'2.1.5'`\n* `s.clean('  =v2.1.5')`: `2.1.5`\n* `s.clean('      2.1.5   ')`: `'2.1.5'`\n* `s.clean('~1.0.0')`: `null`\n/CHANGELOG.md\u0005\u001b# changes log\n\n## 6.2.0\n\n* Coerce numbers to strings when passed to semver.coerce()\n* Add `rtl` option to coerce from right to left\n\n## 6.1.3\n\n* Handle X-ranges properly in includePrerelease mode\n\n## 6.1.2\n\n* Do not throw when testing invalid version strings\n\n## 6.1.1\n\n* Add options support for semver.coerce()\n* Handle undefined version passed to Range.test\n\n## 6.1.0\n\n* Add semver.compareBuild function\n* Support `*` in semver.intersects\n\n## 6.0\n\n* Fix `intersects` logic.\n\n    This is technically a bug fix, but since it is also a change to behavior\n    that may require users updating their code, it is marked as a major\n    version increment.\n\n## 5.7\n\n* Add `minVersion` method\n\n## 5.6\n\n* Move boolean `loose` param to an options object, with\n  backwards-compatibility protection.\n* Add ability to opt out of special prerelease version handling with\n  the `includePrerelease` option flag.\n\n## 5.5\n\n* Add version coercion capabilities\n\n## 5.4\n\n* Add intersection checking\n\n## 5.3\n\n* Add `minSatisfying` method\n\n## 5.2\n\n* Add `prerelease(v)` that returns prerelease components\n\n## 5.1\n\n* Add Backus-Naur for ranges\n* Remove excessively cute inspection methods\n\n## 5.0\n\n* Remove AMD/Browserified build artifacts\n* Fix ltr and gtr when using the `*` range\n* Fix for range `*` with a prerelease identifier\n/semver.jsŤexports = module.exports = SemVer\n\nvar debug\n/* istanbul ignore next */\nif (typeof process === 'object' &&\n    process.env &&\n    process.env.NODE_DEBUG &&\n    /\\bsemver\\b/i.test(process.env.NODE_DEBUG)) {\n  debug = function () {\n    var args = Array.prototype.slice.call(arguments, 0)\n    args.unshift('SEMVER')\n    console.log.apply(console, args)\n  }\n} else {\n  debug = function () {}\n}\n\n// Note: this is the semver.org version of the spec that it implements\n// Not necessarily the package version of this code.\nexports.SEMVER_SPEC_VERSION = '2.0.0'\n\nvar MAX_LENGTH = 256\nvar MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER ||\n  /* istanbul ignore next */ 9007199254740991\n\n// Max safe segment length for coercion.\nvar MAX_SAFE_COMPONENT_LENGTH = 16\n\n// The actual regexps go on exports.re\nvar re = exports.re = []\nvar src = exports.src = []\nvar t = exports.tokens = {}\nvar R = 0\n\nfunction tok (n) {\n  t[n] = R++\n}\n\n// The following Regular Expressions can be used for tokenizing,\n// validating, and parsing SemVer version strings.\n\n// ## Numeric Identifier\n// A single `0`, or a non-zero digit followed by zero or more digits.\n\ntok('NUMERICIDENTIFIER')\nsrc[t.NUMERICIDENTIFIER] = '0|[1-9]\\\\d*'\ntok('NUMERICIDENTIFIERLOOSE')\nsrc[t.NUMERICIDENTIFIERLOOSE] = '[0-9]+'\n\n// ## Non-numeric Identifier\n// Zero or more digits, followed by a letter or hyphen, and then zero or\n// more letters, digits, or hyphens.\n\ntok('NONNUMERICIDENTIFIER')\nsrc[t.NONNUMERICIDENTIFIER] = '\\\\d*[a-zA-Z-][a-zA-Z0-9-]*'\n\n// ## Main Version\n// Three dot-separated numeric identifiers.\n\ntok('MAINVERSION')\nsrc[t.MAINVERSION] = '(' + src[t.NUMERICIDENTIFIER] + ')\\\\.' +\n                   '(' + src[t.NUMERICIDENTIFIER] + ')\\\\.' +\n                   '(' + src[t.NUMERICIDENTIFIER] + ')'\n\ntok('MAINVERSIONLOOSE')\nsrc[t.MAINVERSIONLOOSE] = '(' + src[t.NUMERICIDENTIFIERLOOSE] + ')\\\\.' +\n                        '(' + src[t.NUMERICIDENTIFIERLOOSE] + ')\\\\.' +\n                        '(' + src[t.NUMERICIDENTIFIERLOOSE] + ')'\n\n// ## Pre-release Version Identifier\n// A numeric identifier, or a non-numeric identifier.\n\ntok('PRERELEASEIDENTIFIER')\nsrc[t.PRERELEASEIDENTIFIER] = '(?:' + src[t.NUMERICIDENTIFIER] +\n                            '|' + src[t.NONNUMERICIDENTIFIER] + ')'\n\ntok('PRERELEASEIDENTIFIERLOOSE')\nsrc[t.PRERELEASEIDENTIFIERLOOSE] = '(?:' + src[t.NUMERICIDENTIFIERLOOSE] +\n                                 '|' + src[t.NONNUMERICIDENTIFIER] + ')'\n\n// ## Pre-release Version\n// Hyphen, followed by one or more dot-separated pre-release version\n// identifiers.\n\ntok('PRERELEASE')\nsrc[t.PRERELEASE] = '(?:-(' + src[t.PRERELEASEIDENTIFIER] +\n                  '(?:\\\\.' + src[t.PRERELEASEIDENTIFIER] + ')*))'\n\ntok('PRERELEASELOOSE')\nsrc[t.PRERELEASELOOSE] = '(?:-?(' + src[t.PRERELEASEIDENTIFIERLOOSE] +\n                       '(?:\\\\.' + src[t.PRERELEASEIDENTIFIERLOOSE] + ')*))'\n\n// ## Build Metadata Identifier\n// Any combination of digits, letters, or hyphens.\n\ntok('BUILDIDENTIFIER')\nsrc[t.BUILDIDENTIFIER] = '[0-9A-Za-z-]+'\n\n// ## Build Metadata\n// Plus sign, followed by one or more period-separated build metadata\n// identifiers.\n\ntok('BUILD')\nsrc[t.BUILD] = '(?:\\\\+(' + src[t.BUILDIDENTIFIER] +\n             '(?:\\\\.' + src[t.BUILDIDENTIFIER] + ')*))'\n\n// ## Full Version String\n// A main version, followed optionally by a pre-release version and\n// build metadata.\n\n// Note that the only major, minor, patch, and pre-release sections of\n// the version string are capturing groups.  The build metadata is not a\n// capturing group, because it should not ever be used in version\n// comparison.\n\ntok('FULL')\ntok('FULLPLAIN')\nsrc[t.FULLPLAIN] = 'v?' + src[t.MAINVERSION] +\n                  src[t.PRERELEASE] + '?' +\n                  src[t.BUILD] + '?'\n\nsrc[t.FULL] = '^' + src[t.FULLPLAIN] + '$'\n\n// like full, but allows v1.2.3 and =1.2.3, which people do sometimes.\n// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty\n// common in the npm registry.\ntok('LOOSEPLAIN')\nsrc[t.LOOSEPLAIN] = '[v=\\\\s]*' + src[t.MAINVERSIONLOOSE] +\n                  src[t.PRERELEASELOOSE] + '?' +\n                  src[t.BUILD] + '?'\n\ntok('LOOSE')\nsrc[t.LOOSE] = '^' + src[t.LOOSEPLAIN] + '$'\n\ntok('GTLT')\nsrc[t.GTLT] = '((?:<|>)?=?)'\n\n// Something like \"2.*\" or \"1.2.x\".\n// Note that \"x.x\" is a valid xRange identifer, meaning \"any version\"\n// Only the first item is strictly required.\ntok('XRANGEIDENTIFIERLOOSE')\nsrc[t.XRANGEIDENTIFIERLOOSE] = src[t.NUMERICIDENTIFIERLOOSE] + '|x|X|\\\\*'\ntok('XRANGEIDENTIFIER')\nsrc[t.XRANGEIDENTIFIER] = src[t.NUMERICIDENTIFIER] + '|x|X|\\\\*'\n\ntok('XRANGEPLAIN')\nsrc[t.XRANGEPLAIN] = '[v=\\\\s]*(' + src[t.XRANGEIDENTIFIER] + ')' +\n                   '(?:\\\\.(' + src[t.XRANGEIDENTIFIER] + ')' +\n                   '(?:\\\\.(' + src[t.XRANGEIDENTIFIER] + ')' +\n                   '(?:' + src[t.PRERELEASE] + ')?' +\n                   src[t.BUILD] + '?' +\n                   ')?)?'\n\ntok('XRANGEPLAINLOOSE')\nsrc[t.XRANGEPLAINLOOSE] = '[v=\\\\s]*(' + src[t.XRANGEIDENTIFIERLOOSE] + ')' +\n                        '(?:\\\\.(' + src[t.XRANGEIDENTIFIERLOOSE] + ')' +\n                        '(?:\\\\.(' + src[t.XRANGEIDENTIFIERLOOSE] + ')' +\n                        '(?:' + src[t.PRERELEASELOOSE] + ')?' +\n                        src[t.BUILD] + '?' +\n                        ')?)?'\n\ntok('XRANGE')\nsrc[t.XRANGE] = '^' + src[t.GTLT] + '\\\\s*' + src[t.XRANGEPLAIN] + '$'\ntok('XRANGELOOSE')\nsrc[t.XRANGELOOSE] = '^' + src[t.GTLT] + '\\\\s*' + src[t.XRANGEPLAINLOOSE] + '$'\n\n// Coercion.\n// Extract anything that could conceivably be a part of a valid semver\ntok('COERCE')\nsrc[t.COERCE] = '(^|[^\\\\d])' +\n              '(\\\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '})' +\n              '(?:\\\\.(\\\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' +\n              '(?:\\\\.(\\\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' +\n              '(?:$|[^\\\\d])'\ntok('COERCERTL')\nre[t.COERCERTL] = new RegExp(src[t.COERCE], 'g')\n\n// Tilde ranges.\n// Meaning is \"reasonably at or greater than\"\ntok('LONETILDE')\nsrc[t.LONETILDE] = '(?:~>?)'\n\ntok('TILDETRIM')\nsrc[t.TILDETRIM] = '(\\\\s*)' + src[t.LONETILDE] + '\\\\s+'\nre[t.TILDETRIM] = new RegExp(src[t.TILDETRIM], 'g')\nvar tildeTrimReplace = '$1~'\n\ntok('TILDE')\nsrc[t.TILDE] = '^' + src[t.LONETILDE] + src[t.XRANGEPLAIN] + '$'\ntok('TILDELOOSE')\nsrc[t.TILDELOOSE] = '^' + src[t.LONETILDE] + src[t.XRANGEPLAINLOOSE] + '$'\n\n// Caret ranges.\n// Meaning is \"at least and backwards compatible with\"\ntok('LONECARET')\nsrc[t.LONECARET] = '(?:\\\\^)'\n\ntok('CARETTRIM')\nsrc[t.CARETTRIM] = '(\\\\s*)' + src[t.LONECARET] + '\\\\s+'\nre[t.CARETTRIM] = new RegExp(src[t.CARETTRIM], 'g')\nvar caretTrimReplace = '$1^'\n\ntok('CARET')\nsrc[t.CARET] = '^' + src[t.LONECARET] + src[t.XRANGEPLAIN] + '$'\ntok('CARETLOOSE')\nsrc[t.CARETLOOSE] = '^' + src[t.LONECARET] + src[t.XRANGEPLAINLOOSE] + '$'\n\n// A simple gt/lt/eq thing, or just \"\" to indicate \"any version\"\ntok('COMPARATORLOOSE')\nsrc[t.COMPARATORLOOSE] = '^' + src[t.GTLT] + '\\\\s*(' + src[t.LOOSEPLAIN] + ')$|^$'\ntok('COMPARATOR')\nsrc[t.COMPARATOR] = '^' + src[t.GTLT] + '\\\\s*(' + src[t.FULLPLAIN] + ')$|^$'\n\n// An expression to strip any whitespace between the gtlt and the thing\n// it modifies, so that `> 1.2.3` ==> `>1.2.3`\ntok('COMPARATORTRIM')\nsrc[t.COMPARATORTRIM] = '(\\\\s*)' + src[t.GTLT] +\n                      '\\\\s*(' + src[t.LOOSEPLAIN] + '|' + src[t.XRANGEPLAIN] + ')'\n\n// this one has to use the /g flag\nre[t.COMPARATORTRIM] = new RegExp(src[t.COMPARATORTRIM], 'g')\nvar comparatorTrimReplace = '$1$2$3'\n\n// Something like `1.2.3 - 1.2.4`\n// Note that these all use the loose form, because they'll be\n// checked against either the strict or loose comparator form\n// later.\ntok('HYPHENRANGE')\nsrc[t.HYPHENRANGE] = '^\\\\s*(' + src[t.XRANGEPLAIN] + ')' +\n                   '\\\\s+-\\\\s+' +\n                   '(' + src[t.XRANGEPLAIN] + ')' +\n                   '\\\\s*$'\n\ntok('HYPHENRANGELOOSE')\nsrc[t.HYPHENRANGELOOSE] = '^\\\\s*(' + src[t.XRANGEPLAINLOOSE] + ')' +\n                        '\\\\s+-\\\\s+' +\n                        '(' + src[t.XRANGEPLAINLOOSE] + ')' +\n                        '\\\\s*$'\n\n// Star ranges basically just allow anything at all.\ntok('STAR')\nsrc[t.STAR] = '(<|>)?=?\\\\s*\\\\*'\n\n// Compile to actual regexp objects.\n// All are flag-free, unless they were created above with a flag.\nfor (var i = 0; i < R; i++) {\n  debug(i, src[i])\n  if (!re[i]) {\n    re[i] = new RegExp(src[i])\n  }\n}\n\nexports.parse = parse\nfunction parse (version, options) {\n  if (!options || typeof options !== 'object') {\n    options = {\n      loose: !!options,\n      includePrerelease: false\n    }\n  }\n\n  if (version instanceof SemVer) {\n    return version\n  }\n\n  if (typeof version !== 'string') {\n    return null\n  }\n\n  if (version.length > MAX_LENGTH) {\n    return null\n  }\n\n  var r = options.loose ? re[t.LOOSE] : re[t.FULL]\n  if (!r.test(version)) {\n    return null\n  }\n\n  try {\n    return new SemVer(version, options)\n  } catch (er) {\n    return null\n  }\n}\n\nexports.valid = valid\nfunction valid (version, options) {\n  var v = parse(version, options)\n  return v ? v.version : null\n}\n\nexports.clean = clean\nfunction clean (version, options) {\n  var s = parse(version.trim().replace(/^[=v]+/, ''), options)\n  return s ? s.version : null\n}\n\nexports.SemVer = SemVer\n\nfunction SemVer (version, options) {\n  if (!options || typeof options !== 'object') {\n    options = {\n      loose: !!options,\n      includePrerelease: false\n    }\n  }\n  if (version instanceof SemVer) {\n    if (version.loose === options.loose) {\n      return version\n    } else {\n      version = version.version\n    }\n  } else if (typeof version !== 'string') {\n    throw new TypeError('Invalid Version: ' + version)\n  }\n\n  if (version.length > MAX_LENGTH) {\n    throw new TypeError('version is longer than ' + MAX_LENGTH + ' characters')\n  }\n\n  if (!(this instanceof SemVer)) {\n    return new SemVer(version, options)\n  }\n\n  debug('SemVer', version, options)\n  this.options = options\n  this.loose = !!options.loose\n\n  var m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL])\n\n  if (!m) {\n    throw new TypeError('Invalid Version: ' + version)\n  }\n\n  this.raw = version\n\n  // these are actually numbers\n  this.major = +m[1]\n  this.minor = +m[2]\n  this.patch = +m[3]\n\n  if (this.major > MAX_SAFE_INTEGER || this.major < 0) {\n    throw new TypeError('Invalid major version')\n  }\n\n  if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {\n    throw new TypeError('Invalid minor version')\n  }\n\n  if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {\n    throw new TypeError('Invalid patch version')\n  }\n\n  // numberify any prerelease numeric ids\n  if (!m[4]) {\n    this.prerelease = []\n  } else {\n    this.prerelease = m[4].split('.').map(function (id) {\n      if (/^[0-9]+$/.test(id)) {\n        var num = +id\n        if (num >= 0 && num < MAX_SAFE_INTEGER) {\n          return num\n        }\n      }\n      return id\n    })\n  }\n\n  this.build = m[5] ? m[5].split('.') : []\n  this.format()\n}\n\nSemVer.prototype.format = function () {\n  this.version = this.major + '.' + this.minor + '.' + this.patch\n  if (this.prerelease.length) {\n    this.version += '-' + this.prerelease.join('.')\n  }\n  return this.version\n}\n\nSemVer.prototype.toString = function () {\n  return this.version\n}\n\nSemVer.prototype.compare = function (other) {\n  debug('SemVer.compare', this.version, this.options, other)\n  if (!(other instanceof SemVer)) {\n    other = new SemVer(other, this.options)\n  }\n\n  return this.compareMain(other) || this.comparePre(other)\n}\n\nSemVer.prototype.compareMain = function (other) {\n  if (!(other instanceof SemVer)) {\n    other = new SemVer(other, this.options)\n  }\n\n  return compareIdentifiers(this.major, other.major) ||\n         compareIdentifiers(this.minor, other.minor) ||\n         compareIdentifiers(this.patch, other.patch)\n}\n\nSemVer.prototype.comparePre = function (other) {\n  if (!(other instanceof SemVer)) {\n    other = new SemVer(other, this.options)\n  }\n\n  // NOT having a prerelease is > having one\n  if (this.prerelease.length && !other.prerelease.length) {\n    return -1\n  } else if (!this.prerelease.length && other.prerelease.length) {\n    return 1\n  } else if (!this.prerelease.length && !other.prerelease.length) {\n    return 0\n  }\n\n  var i = 0\n  do {\n    var a = this.prerelease[i]\n    var b = other.prerelease[i]\n    debug('prerelease compare', i, a, b)\n    if (a === undefined && b === undefined) {\n      return 0\n    } else if (b === undefined) {\n      return 1\n    } else if (a === undefined) {\n      return -1\n    } else if (a === b) {\n      continue\n    } else {\n      return compareIdentifiers(a, b)\n    }\n  } while (++i)\n}\n\nSemVer.prototype.compareBuild = function (other) {\n  if (!(other instanceof SemVer)) {\n    other = new SemVer(other, this.options)\n  }\n\n  var i = 0\n  do {\n    var a = this.build[i]\n    var b = other.build[i]\n    debug('prerelease compare', i, a, b)\n    if (a === undefined && b === undefined) {\n      return 0\n    } else if (b === undefined) {\n      return 1\n    } else if (a === undefined) {\n      return -1\n    } else if (a === b) {\n      continue\n    } else {\n      return compareIdentifiers(a, b)\n    }\n  } while (++i)\n}\n\n// preminor will bump the version up to the next minor release, and immediately\n// down to pre-release. premajor and prepatch work the same way.\nSemVer.prototype.inc = function (release, identifier) {\n  switch (release) {\n    case 'premajor':\n      this.prerelease.length = 0\n      this.patch = 0\n      this.minor = 0\n      this.major++\n      this.inc('pre', identifier)\n      break\n    case 'preminor':\n      this.prerelease.length = 0\n      this.patch = 0\n      this.minor++\n      this.inc('pre', identifier)\n      break\n    case 'prepatch':\n      // If this is already a prerelease, it will bump to the next version\n      // drop any prereleases that might already exist, since they are not\n      // relevant at this point.\n      this.prerelease.length = 0\n      this.inc('patch', identifier)\n      this.inc('pre', identifier)\n      break\n    // If the input is a non-prerelease version, this acts the same as\n    // prepatch.\n    case 'prerelease':\n      if (this.prerelease.length === 0) {\n        this.inc('patch', identifier)\n      }\n      this.inc('pre', identifier)\n      break\n\n    case 'major':\n      // If this is a pre-major version, bump up to the same major version.\n      // Otherwise increment major.\n      // 1.0.0-5 bumps to 1.0.0\n      // 1.1.0 bumps to 2.0.0\n      if (this.minor !== 0 ||\n          this.patch !== 0 ||\n          this.prerelease.length === 0) {\n        this.major++\n      }\n      this.minor = 0\n      this.patch = 0\n      this.prerelease = []\n      break\n    case 'minor':\n      // If this is a pre-minor version, bump up to the same minor version.\n      // Otherwise increment minor.\n      // 1.2.0-5 bumps to 1.2.0\n      // 1.2.1 bumps to 1.3.0\n      if (this.patch !== 0 || this.prerelease.length === 0) {\n        this.minor++\n      }\n      this.patch = 0\n      this.prerelease = []\n      break\n    case 'patch':\n      // If this is not a pre-release version, it will increment the patch.\n      // If it is a pre-release it will bump up to the same patch version.\n      // 1.2.0-5 patches to 1.2.0\n      // 1.2.0 patches to 1.2.1\n      if (this.prerelease.length === 0) {\n        this.patch++\n      }\n      this.prerelease = []\n      break\n    // This probably shouldn't be used publicly.\n    // 1.0.0 \"pre\" would become 1.0.0-0 which is the wrong direction.\n    case 'pre':\n      if (this.prerelease.length === 0) {\n        this.prerelease = [0]\n      } else {\n        var i = this.prerelease.length\n        while (--i >= 0) {\n          if (typeof this.prerelease[i] === 'number') {\n            this.prerelease[i]++\n            i = -2\n          }\n        }\n        if (i === -1) {\n          // didn't increment anything\n          this.prerelease.push(0)\n        }\n      }\n      if (identifier) {\n        // 1.2.0-beta.1 bumps to 1.2.0-beta.2,\n        // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0\n        if (this.prerelease[0] === identifier) {\n          if (isNaN(this.prerelease[1])) {\n            this.prerelease = [identifier, 0]\n          }\n        } else {\n          this.prerelease = [identifier, 0]\n        }\n      }\n      break\n\n    default:\n      throw new Error('invalid increment argument: ' + release)\n  }\n  this.format()\n  this.raw = this.version\n  return this\n}\n\nexports.inc = inc\nfunction inc (version, release, loose, identifier) {\n  if (typeof (loose) === 'string') {\n    identifier = loose\n    loose = undefined\n  }\n\n  try {\n    return new SemVer(version, loose).inc(release, identifier).version\n  } catch (er) {\n    return null\n  }\n}\n\nexports.diff = diff\nfunction diff (version1, version2) {\n  if (eq(version1, version2)) {\n    return null\n  } else {\n    var v1 = parse(version1)\n    var v2 = parse(version2)\n    var prefix = ''\n    if (v1.prerelease.length || v2.prerelease.length) {\n      prefix = 'pre'\n      var defaultResult = 'prerelease'\n    }\n    for (var key in v1) {\n      if (key === 'major' || key === 'minor' || key === 'patch') {\n        if (v1[key] !== v2[key]) {\n          return prefix + key\n        }\n      }\n    }\n    return defaultResult // may be undefined\n  }\n}\n\nexports.compareIdentifiers = compareIdentifiers\n\nvar numeric = /^[0-9]+$/\nfunction compareIdentifiers (a, b) {\n  var anum = numeric.test(a)\n  var bnum = numeric.test(b)\n\n  if (anum && bnum) {\n    a = +a\n    b = +b\n  }\n\n  return a === b ? 0\n    : (anum && !bnum) ? -1\n    : (bnum && !anum) ? 1\n    : a < b ? -1\n    : 1\n}\n\nexports.rcompareIdentifiers = rcompareIdentifiers\nfunction rcompareIdentifiers (a, b) {\n  return compareIdentifiers(b, a)\n}\n\nexports.major = major\nfunction major (a, loose) {\n  return new SemVer(a, loose).major\n}\n\nexports.minor = minor\nfunction minor (a, loose) {\n  return new SemVer(a, loose).minor\n}\n\nexports.patch = patch\nfunction patch (a, loose) {\n  return new SemVer(a, loose).patch\n}\n\nexports.compare = compare\nfunction compare (a, b, loose) {\n  return new SemVer(a, loose).compare(new SemVer(b, loose))\n}\n\nexports.compareLoose = compareLoose\nfunction compareLoose (a, b) {\n  return compare(a, b, true)\n}\n\nexports.compareBuild = compareBuild\nfunction compareBuild (a, b, loose) {\n  var versionA = new SemVer(a, loose)\n  var versionB = new SemVer(b, loose)\n  return versionA.compare(versionB) || versionA.compareBuild(versionB)\n}\n\nexports.rcompare = rcompare\nfunction rcompare (a, b, loose) {\n  return compare(b, a, loose)\n}\n\nexports.sort = sort\nfunction sort (list, loose) {\n  return list.sort(function (a, b) {\n    return exports.compareBuild(a, b, loose)\n  })\n}\n\nexports.rsort = rsort\nfunction rsort (list, loose) {\n  return list.sort(function (a, b) {\n    return exports.compareBuild(b, a, loose)\n  })\n}\n\nexports.gt = gt\nfunction gt (a, b, loose) {\n  return compare(a, b, loose) > 0\n}\n\nexports.lt = lt\nfunction lt (a, b, loose) {\n  return compare(a, b, loose) < 0\n}\n\nexports.eq = eq\nfunction eq (a, b, loose) {\n  return compare(a, b, loose) === 0\n}\n\nexports.neq = neq\nfunction neq (a, b, loose) {\n  return compare(a, b, loose) !== 0\n}\n\nexports.gte = gte\nfunction gte (a, b, loose) {\n  return compare(a, b, loose) >= 0\n}\n\nexports.lte = lte\nfunction lte (a, b, loose) {\n  return compare(a, b, loose) <= 0\n}\n\nexports.cmp = cmp\nfunction cmp (a, op, b, loose) {\n  switch (op) {\n    case '===':\n      if (typeof a === 'object')\n        a = a.version\n      if (typeof b === 'object')\n        b = b.version\n      return a === b\n\n    case '!==':\n      if (typeof a === 'object')\n        a = a.version\n      if (typeof b === 'object')\n        b = b.version\n      return a !== b\n\n    case '':\n    case '=':\n    case '==':\n      return eq(a, b, loose)\n\n    case '!=':\n      return neq(a, b, loose)\n\n    case '>':\n      return gt(a, b, loose)\n\n    case '>=':\n      return gte(a, b, loose)\n\n    case '<':\n      return lt(a, b, loose)\n\n    case '<=':\n      return lte(a, b, loose)\n\n    default:\n      throw new TypeError('Invalid operator: ' + op)\n  }\n}\n\nexports.Comparator = Comparator\nfunction Comparator (comp, options) {\n  if (!options || typeof options !== 'object') {\n    options = {\n      loose: !!options,\n      includePrerelease: false\n    }\n  }\n\n  if (comp instanceof Comparator) {\n    if (comp.loose === !!options.loose) {\n      return comp\n    } else {\n      comp = comp.value\n    }\n  }\n\n  if (!(this instanceof Comparator)) {\n    return new Comparator(comp, options)\n  }\n\n  debug('comparator', comp, options)\n  this.options = options\n  this.loose = !!options.loose\n  this.parse(comp)\n\n  if (this.semver === ANY) {\n    this.value = ''\n  } else {\n    this.value = this.operator + this.semver.version\n  }\n\n  debug('comp', this)\n}\n\nvar ANY = {}\nComparator.prototype.parse = function (comp) {\n  var r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR]\n  var m = comp.match(r)\n\n  if (!m) {\n    throw new TypeError('Invalid comparator: ' + comp)\n  }\n\n  this.operator = m[1] !== undefined ? m[1] : ''\n  if (this.operator === '=') {\n    this.operator = ''\n  }\n\n  // if it literally is just '>' or '' then allow anything.\n  if (!m[2]) {\n    this.semver = ANY\n  } else {\n    this.semver = new SemVer(m[2], this.options.loose)\n  }\n}\n\nComparator.prototype.toString = function () {\n  return this.value\n}\n\nComparator.prototype.test = function (version) {\n  debug('Comparator.test', version, this.options.loose)\n\n  if (this.semver === ANY || version === ANY) {\n    return true\n  }\n\n  if (typeof version === 'string') {\n    try {\n      version = new SemVer(version, this.options)\n    } catch (er) {\n      return false\n    }\n  }\n\n  return cmp(version, this.operator, this.semver, this.options)\n}\n\nComparator.prototype.intersects = function (comp, options) {\n  if (!(comp instanceof Comparator)) {\n    throw new TypeError('a Comparator is required')\n  }\n\n  if (!options || typeof options !== 'object') {\n    options = {\n      loose: !!options,\n      includePrerelease: false\n    }\n  }\n\n  var rangeTmp\n\n  if (this.operator === '') {\n    if (this.value === '') {\n      return true\n    }\n    rangeTmp = new Range(comp.value, options)\n    return satisfies(this.value, rangeTmp, options)\n  } else if (comp.operator === '') {\n    if (comp.value === '') {\n      return true\n    }\n    rangeTmp = new Range(this.value, options)\n    return satisfies(comp.semver, rangeTmp, options)\n  }\n\n  var sameDirectionIncreasing =\n    (this.operator === '>=' || this.operator === '>') &&\n    (comp.operator === '>=' || comp.operator === '>')\n  var sameDirectionDecreasing =\n    (this.operator === '<=' || this.operator === '<') &&\n    (comp.operator === '<=' || comp.operator === '<')\n  var sameSemVer = this.semver.version === comp.semver.version\n  var differentDirectionsInclusive =\n    (this.operator === '>=' || this.operator === '<=') &&\n    (comp.operator === '>=' || comp.operator === '<=')\n  var oppositeDirectionsLessThan =\n    cmp(this.semver, '<', comp.semver, options) &&\n    ((this.operator === '>=' || this.operator === '>') &&\n    (comp.operator === '<=' || comp.operator === '<'))\n  var oppositeDirectionsGreaterThan =\n    cmp(this.semver, '>', comp.semver, options) &&\n    ((this.operator === '<=' || this.operator === '<') &&\n    (comp.operator === '>=' || comp.operator === '>'))\n\n  return sameDirectionIncreasing || sameDirectionDecreasing ||\n    (sameSemVer && differentDirectionsInclusive) ||\n    oppositeDirectionsLessThan || oppositeDirectionsGreaterThan\n}\n\nexports.Range = Range\nfunction Range (range, options) {\n  if (!options || typeof options !== 'object') {\n    options = {\n      loose: !!options,\n      includePrerelease: false\n    }\n  }\n\n  if (range instanceof Range) {\n    if (range.loose === !!options.loose &&\n        range.includePrerelease === !!options.includePrerelease) {\n      return range\n    } else {\n      return new Range(range.raw, options)\n    }\n  }\n\n  if (range instanceof Comparator) {\n    return new Range(range.value, options)\n  }\n\n  if (!(this instanceof Range)) {\n    return new Range(range, options)\n  }\n\n  this.options = options\n  this.loose = !!options.loose\n  this.includePrerelease = !!options.includePrerelease\n\n  // First, split based on boolean or ||\n  this.raw = range\n  this.set = range.split(/\\s*\\|\\|\\s*/).map(function (range) {\n    return this.parseRange(range.trim())\n  }, this).filter(function (c) {\n    // throw out any that are not relevant for whatever reason\n    return c.length\n  })\n\n  if (!this.set.length) {\n    throw new TypeError('Invalid SemVer Range: ' + range)\n  }\n\n  this.format()\n}\n\nRange.prototype.format = function () {\n  this.range = this.set.map(function (comps) {\n    return comps.join(' ').trim()\n  }).join('||').trim()\n  return this.range\n}\n\nRange.prototype.toString = function () {\n  return this.range\n}\n\nRange.prototype.parseRange = function (range) {\n  var loose = this.options.loose\n  range = range.trim()\n  // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`\n  var hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE]\n  range = range.replace(hr, hyphenReplace)\n  debug('hyphen replace', range)\n  // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`\n  range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace)\n  debug('comparator trim', range, re[t.COMPARATORTRIM])\n\n  // `~ 1.2.3` => `~1.2.3`\n  range = range.replace(re[t.TILDETRIM], tildeTrimReplace)\n\n  // `^ 1.2.3` => `^1.2.3`\n  range = range.replace(re[t.CARETTRIM], caretTrimReplace)\n\n  // normalize spaces\n  range = range.split(/\\s+/).join(' ')\n\n  // At this point, the range is completely trimmed and\n  // ready to be split into comparators.\n\n  var compRe = loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR]\n  var set = range.split(' ').map(function (comp) {\n    return parseComparator(comp, this.options)\n  }, this).join(' ').split(/\\s+/)\n  if (this.options.loose) {\n    // in loose mode, throw out any that are not valid comparators\n    set = set.filter(function (comp) {\n      return !!comp.match(compRe)\n    })\n  }\n  set = set.map(function (comp) {\n    return new Comparator(comp, this.options)\n  }, this)\n\n  return set\n}\n\nRange.prototype.intersects = function (range, options) {\n  if (!(range instanceof Range)) {\n    throw new TypeError('a Range is required')\n  }\n\n  return this.set.some(function (thisComparators) {\n    return (\n      isSatisfiable(thisComparators, options) &&\n      range.set.some(function (rangeComparators) {\n        return (\n          isSatisfiable(rangeComparators, options) &&\n          thisComparators.every(function (thisComparator) {\n            return rangeComparators.every(function (rangeComparator) {\n              return thisComparator.intersects(rangeComparator, options)\n            })\n          })\n        )\n      })\n    )\n  })\n}\n\n// take a set of comparators and determine whether there\n// exists a version which can satisfy it\nfunction isSatisfiable (comparators, options) {\n  var result = true\n  var remainingComparators = comparators.slice()\n  var testComparator = remainingComparators.pop()\n\n  while (result && remainingComparators.length) {\n    result = remainingComparators.every(function (otherComparator) {\n      return testComparator.intersects(otherComparator, options)\n    })\n\n    testComparator = remainingComparators.pop()\n  }\n\n  return result\n}\n\n// Mostly just for testing and legacy API reasons\nexports.toComparators = toComparators\nfunction toComparators (range, options) {\n  return new Range(range, options).set.map(function (comp) {\n    return comp.map(function (c) {\n      return c.value\n    }).join(' ').trim().split(' ')\n  })\n}\n\n// comprised of xranges, tildes, stars, and gtlt's at this point.\n// already replaced the hyphen ranges\n// turn into a set of JUST comparators.\nfunction parseComparator (comp, options) {\n  debug('comp', comp, options)\n  comp = replaceCarets(comp, options)\n  debug('caret', comp)\n  comp = replaceTildes(comp, options)\n  debug('tildes', comp)\n  comp = replaceXRanges(comp, options)\n  debug('xrange', comp)\n  comp = replaceStars(comp, options)\n  debug('stars', comp)\n  return comp\n}\n\nfunction isX (id) {\n  return !id || id.toLowerCase() === 'x' || id === '*'\n}\n\n// ~, ~> --> * (any, kinda silly)\n// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0\n// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0\n// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0\n// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0\n// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0\nfunction replaceTildes (comp, options) {\n  return comp.trim().split(/\\s+/).map(function (comp) {\n    return replaceTilde(comp, options)\n  }).join(' ')\n}\n\nfunction replaceTilde (comp, options) {\n  var r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE]\n  return comp.replace(r, function (_, M, m, p, pr) {\n    debug('tilde', comp, _, M, m, p, pr)\n    var ret\n\n    if (isX(M)) {\n      ret = ''\n    } else if (isX(m)) {\n      ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'\n    } else if (isX(p)) {\n      // ~1.2 == >=1.2.0 <1.3.0\n      ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'\n    } else if (pr) {\n      debug('replaceTilde pr', pr)\n      ret = '>=' + M + '.' + m + '.' + p + '-' + pr +\n            ' <' + M + '.' + (+m + 1) + '.0'\n    } else {\n      // ~1.2.3 == >=1.2.3 <1.3.0\n      ret = '>=' + M + '.' + m + '.' + p +\n            ' <' + M + '.' + (+m + 1) + '.0'\n    }\n\n    debug('tilde return', ret)\n    return ret\n  })\n}\n\n// ^ --> * (any, kinda silly)\n// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0\n// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0\n// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0\n// ^1.2.3 --> >=1.2.3 <2.0.0\n// ^1.2.0 --> >=1.2.0 <2.0.0\nfunction replaceCarets (comp, options) {\n  return comp.trim().split(/\\s+/).map(function (comp) {\n    return replaceCaret(comp, options)\n  }).join(' ')\n}\n\nfunction replaceCaret (comp, options) {\n  debug('caret', comp, options)\n  var r = options.loose ? re[t.CARETLOOSE] : re[t.CARET]\n  return comp.replace(r, function (_, M, m, p, pr) {\n    debug('caret', comp, _, M, m, p, pr)\n    var ret\n\n    if (isX(M)) {\n      ret = ''\n    } else if (isX(m)) {\n      ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'\n    } else if (isX(p)) {\n      if (M === '0') {\n        ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'\n      } else {\n        ret = '>=' + M + '.' + m + '.0 <' + (+M + 1) + '.0.0'\n      }\n    } else if (pr) {\n      debug('replaceCaret pr', pr)\n      if (M === '0') {\n        if (m === '0') {\n          ret = '>=' + M + '.' + m + '.' + p + '-' + pr +\n                ' <' + M + '.' + m + '.' + (+p + 1)\n        } else {\n          ret = '>=' + M + '.' + m + '.' + p + '-' + pr +\n                ' <' + M + '.' + (+m + 1) + '.0'\n        }\n      } else {\n        ret = '>=' + M + '.' + m + '.' + p + '-' + pr +\n              ' <' + (+M + 1) + '.0.0'\n      }\n    } else {\n      debug('no pr')\n      if (M === '0') {\n        if (m === '0') {\n          ret = '>=' + M + '.' + m + '.' + p +\n                ' <' + M + '.' + m + '.' + (+p + 1)\n        } else {\n          ret = '>=' + M + '.' + m + '.' + p +\n                ' <' + M + '.' + (+m + 1) + '.0'\n        }\n      } else {\n        ret = '>=' + M + '.' + m + '.' + p +\n              ' <' + (+M + 1) + '.0.0'\n      }\n    }\n\n    debug('caret return', ret)\n    return ret\n  })\n}\n\nfunction replaceXRanges (comp, options) {\n  debug('replaceXRanges', comp, options)\n  return comp.split(/\\s+/).map(function (comp) {\n    return replaceXRange(comp, options)\n  }).join(' ')\n}\n\nfunction replaceXRange (comp, options) {\n  comp = comp.trim()\n  var r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE]\n  return comp.replace(r, function (ret, gtlt, M, m, p, pr) {\n    debug('xRange', comp, ret, gtlt, M, m, p, pr)\n    var xM = isX(M)\n    var xm = xM || isX(m)\n    var xp = xm || isX(p)\n    var anyX = xp\n\n    if (gtlt === '=' && anyX) {\n      gtlt = ''\n    }\n\n    // if we're including prereleases in the match, then we need\n    // to fix this to -0, the lowest possible prerelease value\n    pr = options.includePrerelease ? '-0' : ''\n\n    if (xM) {\n      if (gtlt === '>' || gtlt === '<') {\n        // nothing is allowed\n        ret = '<0.0.0-0'\n      } else {\n        // nothing is forbidden\n        ret = '*'\n      }\n    } else if (gtlt && anyX) {\n      // we know patch is an x, because we have any x at all.\n      // replace X with 0\n      if (xm) {\n        m = 0\n      }\n      p = 0\n\n      if (gtlt === '>') {\n        // >1 => >=2.0.0\n        // >1.2 => >=1.3.0\n        // >1.2.3 => >= 1.2.4\n        gtlt = '>='\n        if (xm) {\n          M = +M + 1\n          m = 0\n          p = 0\n        } else {\n          m = +m + 1\n          p = 0\n        }\n      } else if (gtlt === '<=') {\n        // <=0.7.x is actually <0.8.0, since any 0.7.x should\n        // pass.  Similarly, <=7.x is actually <8.0.0, etc.\n        gtlt = '<'\n        if (xm) {\n          M = +M + 1\n        } else {\n          m = +m + 1\n        }\n      }\n\n      ret = gtlt + M + '.' + m + '.' + p + pr\n    } else if (xm) {\n      ret = '>=' + M + '.0.0' + pr + ' <' + (+M + 1) + '.0.0' + pr\n    } else if (xp) {\n      ret = '>=' + M + '.' + m + '.0' + pr +\n        ' <' + M + '.' + (+m + 1) + '.0' + pr\n    }\n\n    debug('xRange return', ret)\n\n    return ret\n  })\n}\n\n// Because * is AND-ed with everything else in the comparator,\n// and '' means \"any version\", just remove the *s entirely.\nfunction replaceStars (comp, options) {\n  debug('replaceStars', comp, options)\n  // Looseness is ignored here.  star is always as loose as it gets!\n  return comp.trim().replace(re[t.STAR], '')\n}\n\n// This function is passed to string.replace(re[t.HYPHENRANGE])\n// M, m, patch, prerelease, build\n// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5\n// 1.2.3 - 3.4 => >=1.2.0 <3.5.0 Any 3.4.x will do\n// 1.2 - 3.4 => >=1.2.0 <3.5.0\nfunction hyphenReplace ($0,\n  from, fM, fm, fp, fpr, fb,\n  to, tM, tm, tp, tpr, tb) {\n  if (isX(fM)) {\n    from = ''\n  } else if (isX(fm)) {\n    from = '>=' + fM + '.0.0'\n  } else if (isX(fp)) {\n    from = '>=' + fM + '.' + fm + '.0'\n  } else {\n    from = '>=' + from\n  }\n\n  if (isX(tM)) {\n    to = ''\n  } else if (isX(tm)) {\n    to = '<' + (+tM + 1) + '.0.0'\n  } else if (isX(tp)) {\n    to = '<' + tM + '.' + (+tm + 1) + '.0'\n  } else if (tpr) {\n    to = '<=' + tM + '.' + tm + '.' + tp + '-' + tpr\n  } else {\n    to = '<=' + to\n  }\n\n  return (from + ' ' + to).trim()\n}\n\n// if ANY of the sets match ALL of its comparators, then pass\nRange.prototype.test = function (version) {\n  if (!version) {\n    return false\n  }\n\n  if (typeof version === 'string') {\n    try {\n      version = new SemVer(version, this.options)\n    } catch (er) {\n      return false\n    }\n  }\n\n  for (var i = 0; i < this.set.length; i++) {\n    if (testSet(this.set[i], version, this.options)) {\n      return true\n    }\n  }\n  return false\n}\n\nfunction testSet (set, version, options) {\n  for (var i = 0; i < set.length; i++) {\n    if (!set[i].test(version)) {\n      return false\n    }\n  }\n\n  if (version.prerelease.length && !options.includePrerelease) {\n    // Find the set of versions that are allowed to have prereleases\n    // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0\n    // That should allow `1.2.3-pr.2` to pass.\n    // However, `1.2.4-alpha.notready` should NOT be allowed,\n    // even though it's within the range set by the comparators.\n    for (i = 0; i < set.length; i++) {\n      debug(set[i].semver)\n      if (set[i].semver === ANY) {\n        continue\n      }\n\n      if (set[i].semver.prerelease.length > 0) {\n        var allowed = set[i].semver\n        if (allowed.major === version.major &&\n            allowed.minor === version.minor &&\n            allowed.patch === version.patch) {\n          return true\n        }\n      }\n    }\n\n    // Version has a -pre, but it's not one of the ones we like.\n    return false\n  }\n\n  return true\n}\n\nexports.satisfies = satisfies\nfunction satisfies (version, range, options) {\n  try {\n    range = new Range(range, options)\n  } catch (er) {\n    return false\n  }\n  return range.test(version)\n}\n\nexports.maxSatisfying = maxSatisfying\nfunction maxSatisfying (versions, range, options) {\n  var max = null\n  var maxSV = null\n  try {\n    var rangeObj = new Range(range, options)\n  } catch (er) {\n    return null\n  }\n  versions.forEach(function (v) {\n    if (rangeObj.test(v)) {\n      // satisfies(v, range, options)\n      if (!max || maxSV.compare(v) === -1) {\n        // compare(max, v, true)\n        max = v\n        maxSV = new SemVer(max, options)\n      }\n    }\n  })\n  return max\n}\n\nexports.minSatisfying = minSatisfying\nfunction minSatisfying (versions, range, options) {\n  var min = null\n  var minSV = null\n  try {\n    var rangeObj = new Range(range, options)\n  } catch (er) {\n    return null\n  }\n  versions.forEach(function (v) {\n    if (rangeObj.test(v)) {\n      // satisfies(v, range, options)\n      if (!min || minSV.compare(v) === 1) {\n        // compare(min, v, true)\n        min = v\n        minSV = new SemVer(min, options)\n      }\n    }\n  })\n  return min\n}\n\nexports.minVersion = minVersion\nfunction minVersion (range, loose) {\n  range = new Range(range, loose)\n\n  var minver = new SemVer('0.0.0')\n  if (range.test(minver)) {\n    return minver\n  }\n\n  minver = new SemVer('0.0.0-0')\n  if (range.test(minver)) {\n    return minver\n  }\n\n  minver = null\n  for (var i = 0; i < range.set.length; ++i) {\n    var comparators = range.set[i]\n\n    comparators.forEach(function (comparator) {\n      // Clone to avoid manipulating the comparator's semver object.\n      var compver = new SemVer(comparator.semver.version)\n      switch (comparator.operator) {\n        case '>':\n          if (compver.prerelease.length === 0) {\n            compver.patch++\n          } else {\n            compver.prerelease.push(0)\n          }\n          compver.raw = compver.format()\n          /* fallthrough */\n        case '':\n        case '>=':\n          if (!minver || gt(minver, compver)) {\n            minver = compver\n          }\n          break\n        case '<':\n        case '<=':\n          /* Ignore maximum versions */\n          break\n        /* istanbul ignore next */\n        default:\n          throw new Error('Unexpected operation: ' + comparator.operator)\n      }\n    })\n  }\n\n  if (minver && range.test(minver)) {\n    return minver\n  }\n\n  return null\n}\n\nexports.validRange = validRange\nfunction validRange (range, options) {\n  try {\n    // Return '*' instead of '' so that truthiness works.\n    // This will throw if it's invalid anyway\n    return new Range(range, options).range || '*'\n  } catch (er) {\n    return null\n  }\n}\n\n// Determine if version is less than all the versions possible in the range\nexports.ltr = ltr\nfunction ltr (version, range, options) {\n  return outside(version, range, '<', options)\n}\n\n// Determine if version is greater than all the versions possible in the range.\nexports.gtr = gtr\nfunction gtr (version, range, options) {\n  return outside(version, range, '>', options)\n}\n\nexports.outside = outside\nfunction outside (version, range, hilo, options) {\n  version = new SemVer(version, options)\n  range = new Range(range, options)\n\n  var gtfn, ltefn, ltfn, comp, ecomp\n  switch (hilo) {\n    case '>':\n      gtfn = gt\n      ltefn = lte\n      ltfn = lt\n      comp = '>'\n      ecomp = '>='\n      break\n    case '<':\n      gtfn = lt\n      ltefn = gte\n      ltfn = gt\n      comp = '<'\n      ecomp = '<='\n      break\n    default:\n      throw new TypeError('Must provide a hilo val of \"<\" or \">\"')\n  }\n\n  // If it satisifes the range it is not outside\n  if (satisfies(version, range, options)) {\n    return false\n  }\n\n  // From now on, variable terms are as if we're in \"gtr\" mode.\n  // but note that everything is flipped for the \"ltr\" function.\n\n  for (var i = 0; i < range.set.length; ++i) {\n    var comparators = range.set[i]\n\n    var high = null\n    var low = null\n\n    comparators.forEach(function (comparator) {\n      if (comparator.semver === ANY) {\n        comparator = new Comparator('>=0.0.0')\n      }\n      high = high || comparator\n      low = low || comparator\n      if (gtfn(comparator.semver, high.semver, options)) {\n        high = comparator\n      } else if (ltfn(comparator.semver, low.semver, options)) {\n        low = comparator\n      }\n    })\n\n    // If the edge version comparator has a operator then our version\n    // isn't outside it\n    if (high.operator === comp || high.operator === ecomp) {\n      return false\n    }\n\n    // If the lowest version comparator has an operator and our version\n    // is less than it then it isn't higher than the range\n    if ((!low.operator || low.operator === comp) &&\n        ltefn(version, low.semver)) {\n      return false\n    } else if (low.operator === ecomp && ltfn(version, low.semver)) {\n      return false\n    }\n  }\n  return true\n}\n\nexports.prerelease = prerelease\nfunction prerelease (version, options) {\n  var parsed = parse(version, options)\n  return (parsed && parsed.prerelease.length) ? parsed.prerelease : null\n}\n\nexports.intersects = intersects\nfunction intersects (r1, r2, options) {\n  r1 = new Range(r1, options)\n  r2 = new Range(r2, options)\n  return r1.intersects(r2)\n}\n\nexports.coerce = coerce\nfunction coerce (version, options) {\n  if (version instanceof SemVer) {\n    return version\n  }\n\n  if (typeof version === 'number') {\n    version = String(version)\n  }\n\n  if (typeof version !== 'string') {\n    return null\n  }\n\n  options = options || {}\n\n  var match = null\n  if (!options.rtl) {\n    match = version.match(re[t.COERCE])\n  } else {\n    // Find the right-most coercible string that does not share\n    // a terminus with a more left-ward coercible string.\n    // Eg, '1.2.3.4' wants to coerce '2.3.4', not '3.4' or '4'\n    //\n    // Walk through the string checking with a /g regexp\n    // Manually set the index so as to pick up overlapping matches.\n    // Stop when we get a match that ends at the string end, since no\n    // coercible string can be more right-ward without the same terminus.\n    var next\n    while ((next = re[t.COERCERTL].exec(version)) &&\n      (!match || match.index + match[0].length !== version.length)\n    ) {\n      if (!match ||\n          next.index + next[0].length !== match.index + match[0].length) {\n        match = next\n      }\n      re[t.COERCERTL].lastIndex = next.index + next[1].length + next[2].length\n    }\n    // leave it in a clean state\n    re[t.COERCERTL].lastIndex = -1\n  }\n\n  if (match === null) {\n    return null\n  }\n\n  return parse(match[2] +\n    '.' + (match[3] || '0') +\n    '.' + (match[4] || '0'), options)\n}\n/range.bnf\u0002krange-set  ::= range ( logical-or range ) *\nlogical-or ::= ( ' ' ) * '||' ( ' ' ) *\nrange      ::= hyphen | simple ( ' ' simple ) * | ''\nhyphen     ::= partial ' - ' partial\nsimple     ::= primitive | partial | tilde | caret\nprimitive  ::= ( '<' | '>' | '>=' | '<=' | '=' ) partial\npartial    ::= xr ( '.' xr ( '.' xr qualifier ? )? )?\nxr         ::= 'x' | 'X' | '*' | nr\nnr         ::= '0' | [1-9] ( [0-9] ) *\ntilde      ::= '~' partial\ncaret      ::= '^' partial\nqualifier  ::= ( '-' pre )? ( '+' build )?\npre        ::= parts\nbuild      ::= parts\nparts      ::= part ( '.' part ) *\npart       ::= nr | [-0-9A-Za-z]+\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/c2VuZEAwLjE4LjA=",
    "content": "/index.js[/*!\n * send\n * Copyright(c) 2012 TJ Holowaychuk\n * Copyright(c) 2014-2022 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar createError = require('http-errors')\nvar debug = require('debug')('send')\nvar deprecate = require('depd')('send')\nvar destroy = require('destroy')\nvar encodeUrl = require('encodeurl')\nvar escapeHtml = require('escape-html')\nvar etag = require('etag')\nvar fresh = require('fresh')\nvar fs = require('fs')\nvar mime = require('mime')\nvar ms = require('ms')\nvar onFinished = require('on-finished')\nvar parseRange = require('range-parser')\nvar path = require('path')\nvar statuses = require('statuses')\nvar Stream = require('stream')\nvar util = require('util')\n\n/**\n * Path function references.\n * @private\n */\n\nvar extname = path.extname\nvar join = path.join\nvar normalize = path.normalize\nvar resolve = path.resolve\nvar sep = path.sep\n\n/**\n * Regular expression for identifying a bytes Range header.\n * @private\n */\n\nvar BYTES_RANGE_REGEXP = /^ *bytes=/\n\n/**\n * Maximum value allowed for the max age.\n * @private\n */\n\nvar MAX_MAXAGE = 60 * 60 * 24 * 365 * 1000 // 1 year\n\n/**\n * Regular expression to match a path with a directory up component.\n * @private\n */\n\nvar UP_PATH_REGEXP = /(?:^|[\\\\/])\\.\\.(?:[\\\\/]|$)/\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = send\nmodule.exports.mime = mime\n\n/**\n * Return a `SendStream` for `req` and `path`.\n *\n * @param {object} req\n * @param {string} path\n * @param {object} [options]\n * @return {SendStream}\n * @public\n */\n\nfunction send (req, path, options) {\n  return new SendStream(req, path, options)\n}\n\n/**\n * Initialize a `SendStream` with the given `path`.\n *\n * @param {Request} req\n * @param {String} path\n * @param {object} [options]\n * @private\n */\n\nfunction SendStream (req, path, options) {\n  Stream.call(this)\n\n  var opts = options || {}\n\n  this.options = opts\n  this.path = path\n  this.req = req\n\n  this._acceptRanges = opts.acceptRanges !== undefined\n    ? Boolean(opts.acceptRanges)\n    : true\n\n  this._cacheControl = opts.cacheControl !== undefined\n    ? Boolean(opts.cacheControl)\n    : true\n\n  this._etag = opts.etag !== undefined\n    ? Boolean(opts.etag)\n    : true\n\n  this._dotfiles = opts.dotfiles !== undefined\n    ? opts.dotfiles\n    : 'ignore'\n\n  if (this._dotfiles !== 'ignore' && this._dotfiles !== 'allow' && this._dotfiles !== 'deny') {\n    throw new TypeError('dotfiles option must be \"allow\", \"deny\", or \"ignore\"')\n  }\n\n  this._hidden = Boolean(opts.hidden)\n\n  if (opts.hidden !== undefined) {\n    deprecate('hidden: use dotfiles: \\'' + (this._hidden ? 'allow' : 'ignore') + '\\' instead')\n  }\n\n  // legacy support\n  if (opts.dotfiles === undefined) {\n    this._dotfiles = undefined\n  }\n\n  this._extensions = opts.extensions !== undefined\n    ? normalizeList(opts.extensions, 'extensions option')\n    : []\n\n  this._immutable = opts.immutable !== undefined\n    ? Boolean(opts.immutable)\n    : false\n\n  this._index = opts.index !== undefined\n    ? normalizeList(opts.index, 'index option')\n    : ['index.html']\n\n  this._lastModified = opts.lastModified !== undefined\n    ? Boolean(opts.lastModified)\n    : true\n\n  this._maxage = opts.maxAge || opts.maxage\n  this._maxage = typeof this._maxage === 'string'\n    ? ms(this._maxage)\n    : Number(this._maxage)\n  this._maxage = !isNaN(this._maxage)\n    ? Math.min(Math.max(0, this._maxage), MAX_MAXAGE)\n    : 0\n\n  this._root = opts.root\n    ? resolve(opts.root)\n    : null\n\n  if (!this._root && opts.from) {\n    this.from(opts.from)\n  }\n}\n\n/**\n * Inherits from `Stream`.\n */\n\nutil.inherits(SendStream, Stream)\n\n/**\n * Enable or disable etag generation.\n *\n * @param {Boolean} val\n * @return {SendStream}\n * @api public\n */\n\nSendStream.prototype.etag = deprecate.function(function etag (val) {\n  this._etag = Boolean(val)\n  debug('etag %s', this._etag)\n  return this\n}, 'send.etag: pass etag as option')\n\n/**\n * Enable or disable \"hidden\" (dot) files.\n *\n * @param {Boolean} path\n * @return {SendStream}\n * @api public\n */\n\nSendStream.prototype.hidden = deprecate.function(function hidden (val) {\n  this._hidden = Boolean(val)\n  this._dotfiles = undefined\n  debug('hidden %s', this._hidden)\n  return this\n}, 'send.hidden: use dotfiles option')\n\n/**\n * Set index `paths`, set to a falsy\n * value to disable index support.\n *\n * @param {String|Boolean|Array} paths\n * @return {SendStream}\n * @api public\n */\n\nSendStream.prototype.index = deprecate.function(function index (paths) {\n  var index = !paths ? [] : normalizeList(paths, 'paths argument')\n  debug('index %o', paths)\n  this._index = index\n  return this\n}, 'send.index: pass index as option')\n\n/**\n * Set root `path`.\n *\n * @param {String} path\n * @return {SendStream}\n * @api public\n */\n\nSendStream.prototype.root = function root (path) {\n  this._root = resolve(String(path))\n  debug('root %s', this._root)\n  return this\n}\n\nSendStream.prototype.from = deprecate.function(SendStream.prototype.root,\n  'send.from: pass root as option')\n\nSendStream.prototype.root = deprecate.function(SendStream.prototype.root,\n  'send.root: pass root as option')\n\n/**\n * Set max-age to `maxAge`.\n *\n * @param {Number} maxAge\n * @return {SendStream}\n * @api public\n */\n\nSendStream.prototype.maxage = deprecate.function(function maxage (maxAge) {\n  this._maxage = typeof maxAge === 'string'\n    ? ms(maxAge)\n    : Number(maxAge)\n  this._maxage = !isNaN(this._maxage)\n    ? Math.min(Math.max(0, this._maxage), MAX_MAXAGE)\n    : 0\n  debug('max-age %d', this._maxage)\n  return this\n}, 'send.maxage: pass maxAge as option')\n\n/**\n * Emit error with `status`.\n *\n * @param {number} status\n * @param {Error} [err]\n * @private\n */\n\nSendStream.prototype.error = function error (status, err) {\n  // emit if listeners instead of responding\n  if (hasListeners(this, 'error')) {\n    return this.emit('error', createHttpError(status, err))\n  }\n\n  var res = this.res\n  var msg = statuses.message[status] || String(status)\n  var doc = createHtmlDocument('Error', escapeHtml(msg))\n\n  // clear existing headers\n  clearHeaders(res)\n\n  // add error headers\n  if (err && err.headers) {\n    setHeaders(res, err.headers)\n  }\n\n  // send basic response\n  res.statusCode = status\n  res.setHeader('Content-Type', 'text/html; charset=UTF-8')\n  res.setHeader('Content-Length', Buffer.byteLength(doc))\n  res.setHeader('Content-Security-Policy', \"default-src 'none'\")\n  res.setHeader('X-Content-Type-Options', 'nosniff')\n  res.end(doc)\n}\n\n/**\n * Check if the pathname ends with \"/\".\n *\n * @return {boolean}\n * @private\n */\n\nSendStream.prototype.hasTrailingSlash = function hasTrailingSlash () {\n  return this.path[this.path.length - 1] === '/'\n}\n\n/**\n * Check if this is a conditional GET request.\n *\n * @return {Boolean}\n * @api private\n */\n\nSendStream.prototype.isConditionalGET = function isConditionalGET () {\n  return this.req.headers['if-match'] ||\n    this.req.headers['if-unmodified-since'] ||\n    this.req.headers['if-none-match'] ||\n    this.req.headers['if-modified-since']\n}\n\n/**\n * Check if the request preconditions failed.\n *\n * @return {boolean}\n * @private\n */\n\nSendStream.prototype.isPreconditionFailure = function isPreconditionFailure () {\n  var req = this.req\n  var res = this.res\n\n  // if-match\n  var match = req.headers['if-match']\n  if (match) {\n    var etag = res.getHeader('ETag')\n    return !etag || (match !== '*' && parseTokenList(match).every(function (match) {\n      return match !== etag && match !== 'W/' + etag && 'W/' + match !== etag\n    }))\n  }\n\n  // if-unmodified-since\n  var unmodifiedSince = parseHttpDate(req.headers['if-unmodified-since'])\n  if (!isNaN(unmodifiedSince)) {\n    var lastModified = parseHttpDate(res.getHeader('Last-Modified'))\n    return isNaN(lastModified) || lastModified > unmodifiedSince\n  }\n\n  return false\n}\n\n/**\n * Strip various content header fields for a change in entity.\n *\n * @private\n */\n\nSendStream.prototype.removeContentHeaderFields = function removeContentHeaderFields () {\n  var res = this.res\n\n  res.removeHeader('Content-Encoding')\n  res.removeHeader('Content-Language')\n  res.removeHeader('Content-Length')\n  res.removeHeader('Content-Range')\n  res.removeHeader('Content-Type')\n}\n\n/**\n * Respond with 304 not modified.\n *\n * @api private\n */\n\nSendStream.prototype.notModified = function notModified () {\n  var res = this.res\n  debug('not modified')\n  this.removeContentHeaderFields()\n  res.statusCode = 304\n  res.end()\n}\n\n/**\n * Raise error that headers already sent.\n *\n * @api private\n */\n\nSendStream.prototype.headersAlreadySent = function headersAlreadySent () {\n  var err = new Error('Can\\'t set headers after they are sent.')\n  debug('headers already sent')\n  this.error(500, err)\n}\n\n/**\n * Check if the request is cacheable, aka\n * responded with 2xx or 304 (see RFC 2616 section 14.2{5,6}).\n *\n * @return {Boolean}\n * @api private\n */\n\nSendStream.prototype.isCachable = function isCachable () {\n  var statusCode = this.res.statusCode\n  return (statusCode >= 200 && statusCode < 300) ||\n    statusCode === 304\n}\n\n/**\n * Handle stat() error.\n *\n * @param {Error} error\n * @private\n */\n\nSendStream.prototype.onStatError = function onStatError (error) {\n  switch (error.code) {\n    case 'ENAMETOOLONG':\n    case 'ENOENT':\n    case 'ENOTDIR':\n      this.error(404, error)\n      break\n    default:\n      this.error(500, error)\n      break\n  }\n}\n\n/**\n * Check if the cache is fresh.\n *\n * @return {Boolean}\n * @api private\n */\n\nSendStream.prototype.isFresh = function isFresh () {\n  return fresh(this.req.headers, {\n    etag: this.res.getHeader('ETag'),\n    'last-modified': this.res.getHeader('Last-Modified')\n  })\n}\n\n/**\n * Check if the range is fresh.\n *\n * @return {Boolean}\n * @api private\n */\n\nSendStream.prototype.isRangeFresh = function isRangeFresh () {\n  var ifRange = this.req.headers['if-range']\n\n  if (!ifRange) {\n    return true\n  }\n\n  // if-range as etag\n  if (ifRange.indexOf('\"') !== -1) {\n    var etag = this.res.getHeader('ETag')\n    return Boolean(etag && ifRange.indexOf(etag) !== -1)\n  }\n\n  // if-range as modified date\n  var lastModified = this.res.getHeader('Last-Modified')\n  return parseHttpDate(lastModified) <= parseHttpDate(ifRange)\n}\n\n/**\n * Redirect to path.\n *\n * @param {string} path\n * @private\n */\n\nSendStream.prototype.redirect = function redirect (path) {\n  var res = this.res\n\n  if (hasListeners(this, 'directory')) {\n    this.emit('directory', res, path)\n    return\n  }\n\n  if (this.hasTrailingSlash()) {\n    this.error(403)\n    return\n  }\n\n  var loc = encodeUrl(collapseLeadingSlashes(this.path + '/'))\n  var doc = createHtmlDocument('Redirecting', 'Redirecting to <a href=\"' + escapeHtml(loc) + '\">' +\n    escapeHtml(loc) + '</a>')\n\n  // redirect\n  res.statusCode = 301\n  res.setHeader('Content-Type', 'text/html; charset=UTF-8')\n  res.setHeader('Content-Length', Buffer.byteLength(doc))\n  res.setHeader('Content-Security-Policy', \"default-src 'none'\")\n  res.setHeader('X-Content-Type-Options', 'nosniff')\n  res.setHeader('Location', loc)\n  res.end(doc)\n}\n\n/**\n * Pipe to `res.\n *\n * @param {Stream} res\n * @return {Stream} res\n * @api public\n */\n\nSendStream.prototype.pipe = function pipe (res) {\n  // root path\n  var root = this._root\n\n  // references\n  this.res = res\n\n  // decode the path\n  var path = decode(this.path)\n  if (path === -1) {\n    this.error(400)\n    return res\n  }\n\n  // null byte(s)\n  if (~path.indexOf('\\0')) {\n    this.error(400)\n    return res\n  }\n\n  var parts\n  if (root !== null) {\n    // normalize\n    if (path) {\n      path = normalize('.' + sep + path)\n    }\n\n    // malicious path\n    if (UP_PATH_REGEXP.test(path)) {\n      debug('malicious path \"%s\"', path)\n      this.error(403)\n      return res\n    }\n\n    // explode path parts\n    parts = path.split(sep)\n\n    // join / normalize from optional root dir\n    path = normalize(join(root, path))\n  } else {\n    // \"..\" is malicious without \"root\"\n    if (UP_PATH_REGEXP.test(path)) {\n      debug('malicious path \"%s\"', path)\n      this.error(403)\n      return res\n    }\n\n    // explode path parts\n    parts = normalize(path).split(sep)\n\n    // resolve the path\n    path = resolve(path)\n  }\n\n  // dotfile handling\n  if (containsDotFile(parts)) {\n    var access = this._dotfiles\n\n    // legacy support\n    if (access === undefined) {\n      access = parts[parts.length - 1][0] === '.'\n        ? (this._hidden ? 'allow' : 'ignore')\n        : 'allow'\n    }\n\n    debug('%s dotfile \"%s\"', access, path)\n    switch (access) {\n      case 'allow':\n        break\n      case 'deny':\n        this.error(403)\n        return res\n      case 'ignore':\n      default:\n        this.error(404)\n        return res\n    }\n  }\n\n  // index file support\n  if (this._index.length && this.hasTrailingSlash()) {\n    this.sendIndex(path)\n    return res\n  }\n\n  this.sendFile(path)\n  return res\n}\n\n/**\n * Transfer `path`.\n *\n * @param {String} path\n * @api public\n */\n\nSendStream.prototype.send = function send (path, stat) {\n  var len = stat.size\n  var options = this.options\n  var opts = {}\n  var res = this.res\n  var req = this.req\n  var ranges = req.headers.range\n  var offset = options.start || 0\n\n  if (headersSent(res)) {\n    // impossible to send now\n    this.headersAlreadySent()\n    return\n  }\n\n  debug('pipe \"%s\"', path)\n\n  // set header fields\n  this.setHeader(path, stat)\n\n  // set content-type\n  this.type(path)\n\n  // conditional GET support\n  if (this.isConditionalGET()) {\n    if (this.isPreconditionFailure()) {\n      this.error(412)\n      return\n    }\n\n    if (this.isCachable() && this.isFresh()) {\n      this.notModified()\n      return\n    }\n  }\n\n  // adjust len to start/end options\n  len = Math.max(0, len - offset)\n  if (options.end !== undefined) {\n    var bytes = options.end - offset + 1\n    if (len > bytes) len = bytes\n  }\n\n  // Range support\n  if (this._acceptRanges && BYTES_RANGE_REGEXP.test(ranges)) {\n    // parse\n    ranges = parseRange(len, ranges, {\n      combine: true\n    })\n\n    // If-Range support\n    if (!this.isRangeFresh()) {\n      debug('range stale')\n      ranges = -2\n    }\n\n    // unsatisfiable\n    if (ranges === -1) {\n      debug('range unsatisfiable')\n\n      // Content-Range\n      res.setHeader('Content-Range', contentRange('bytes', len))\n\n      // 416 Requested Range Not Satisfiable\n      return this.error(416, {\n        headers: { 'Content-Range': res.getHeader('Content-Range') }\n      })\n    }\n\n    // valid (syntactically invalid/multiple ranges are treated as a regular response)\n    if (ranges !== -2 && ranges.length === 1) {\n      debug('range %j', ranges)\n\n      // Content-Range\n      res.statusCode = 206\n      res.setHeader('Content-Range', contentRange('bytes', len, ranges[0]))\n\n      // adjust for requested range\n      offset += ranges[0].start\n      len = ranges[0].end - ranges[0].start + 1\n    }\n  }\n\n  // clone options\n  for (var prop in options) {\n    opts[prop] = options[prop]\n  }\n\n  // set read options\n  opts.start = offset\n  opts.end = Math.max(offset, offset + len - 1)\n\n  // content-length\n  res.setHeader('Content-Length', len)\n\n  // HEAD support\n  if (req.method === 'HEAD') {\n    res.end()\n    return\n  }\n\n  this.stream(path, opts)\n}\n\n/**\n * Transfer file for `path`.\n *\n * @param {String} path\n * @api private\n */\nSendStream.prototype.sendFile = function sendFile (path) {\n  var i = 0\n  var self = this\n\n  debug('stat \"%s\"', path)\n  fs.stat(path, function onstat (err, stat) {\n    if (err && err.code === 'ENOENT' && !extname(path) && path[path.length - 1] !== sep) {\n      // not found, check extensions\n      return next(err)\n    }\n    if (err) return self.onStatError(err)\n    if (stat.isDirectory()) return self.redirect(path)\n    self.emit('file', path, stat)\n    self.send(path, stat)\n  })\n\n  function next (err) {\n    if (self._extensions.length <= i) {\n      return err\n        ? self.onStatError(err)\n        : self.error(404)\n    }\n\n    var p = path + '.' + self._extensions[i++]\n\n    debug('stat \"%s\"', p)\n    fs.stat(p, function (err, stat) {\n      if (err) return next(err)\n      if (stat.isDirectory()) return next()\n      self.emit('file', p, stat)\n      self.send(p, stat)\n    })\n  }\n}\n\n/**\n * Transfer index for `path`.\n *\n * @param {String} path\n * @api private\n */\nSendStream.prototype.sendIndex = function sendIndex (path) {\n  var i = -1\n  var self = this\n\n  function next (err) {\n    if (++i >= self._index.length) {\n      if (err) return self.onStatError(err)\n      return self.error(404)\n    }\n\n    var p = join(path, self._index[i])\n\n    debug('stat \"%s\"', p)\n    fs.stat(p, function (err, stat) {\n      if (err) return next(err)\n      if (stat.isDirectory()) return next()\n      self.emit('file', p, stat)\n      self.send(p, stat)\n    })\n  }\n\n  next()\n}\n\n/**\n * Stream `path` to the response.\n *\n * @param {String} path\n * @param {Object} options\n * @api private\n */\n\nSendStream.prototype.stream = function stream (path, options) {\n  var self = this\n  var res = this.res\n\n  // pipe\n  var stream = fs.createReadStream(path, options)\n  this.emit('stream', stream)\n  stream.pipe(res)\n\n  // cleanup\n  function cleanup () {\n    destroy(stream, true)\n  }\n\n  // response finished, cleanup\n  onFinished(res, cleanup)\n\n  // error handling\n  stream.on('error', function onerror (err) {\n    // clean up stream early\n    cleanup()\n\n    // error\n    self.onStatError(err)\n  })\n\n  // end\n  stream.on('end', function onend () {\n    self.emit('end')\n  })\n}\n\n/**\n * Set content-type based on `path`\n * if it hasn't been explicitly set.\n *\n * @param {String} path\n * @api private\n */\n\nSendStream.prototype.type = function type (path) {\n  var res = this.res\n\n  if (res.getHeader('Content-Type')) return\n\n  var type = mime.lookup(path)\n\n  if (!type) {\n    debug('no content-type')\n    return\n  }\n\n  var charset = mime.charsets.lookup(type)\n\n  debug('content-type %s', type)\n  res.setHeader('Content-Type', type + (charset ? '; charset=' + charset : ''))\n}\n\n/**\n * Set response header fields, most\n * fields may be pre-defined.\n *\n * @param {String} path\n * @param {Object} stat\n * @api private\n */\n\nSendStream.prototype.setHeader = function setHeader (path, stat) {\n  var res = this.res\n\n  this.emit('headers', res, path, stat)\n\n  if (this._acceptRanges && !res.getHeader('Accept-Ranges')) {\n    debug('accept ranges')\n    res.setHeader('Accept-Ranges', 'bytes')\n  }\n\n  if (this._cacheControl && !res.getHeader('Cache-Control')) {\n    var cacheControl = 'public, max-age=' + Math.floor(this._maxage / 1000)\n\n    if (this._immutable) {\n      cacheControl += ', immutable'\n    }\n\n    debug('cache-control %s', cacheControl)\n    res.setHeader('Cache-Control', cacheControl)\n  }\n\n  if (this._lastModified && !res.getHeader('Last-Modified')) {\n    var modified = stat.mtime.toUTCString()\n    debug('modified %s', modified)\n    res.setHeader('Last-Modified', modified)\n  }\n\n  if (this._etag && !res.getHeader('ETag')) {\n    var val = etag(stat)\n    debug('etag %s', val)\n    res.setHeader('ETag', val)\n  }\n}\n\n/**\n * Clear all headers from a response.\n *\n * @param {object} res\n * @private\n */\n\nfunction clearHeaders (res) {\n  var headers = getHeaderNames(res)\n\n  for (var i = 0; i < headers.length; i++) {\n    res.removeHeader(headers[i])\n  }\n}\n\n/**\n * Collapse all leading slashes into a single slash\n *\n * @param {string} str\n * @private\n */\nfunction collapseLeadingSlashes (str) {\n  for (var i = 0; i < str.length; i++) {\n    if (str[i] !== '/') {\n      break\n    }\n  }\n\n  return i > 1\n    ? '/' + str.substr(i)\n    : str\n}\n\n/**\n * Determine if path parts contain a dotfile.\n *\n * @api private\n */\n\nfunction containsDotFile (parts) {\n  for (var i = 0; i < parts.length; i++) {\n    var part = parts[i]\n    if (part.length > 1 && part[0] === '.') {\n      return true\n    }\n  }\n\n  return false\n}\n\n/**\n * Create a Content-Range header.\n *\n * @param {string} type\n * @param {number} size\n * @param {array} [range]\n */\n\nfunction contentRange (type, size, range) {\n  return type + ' ' + (range ? range.start + '-' + range.end : '*') + '/' + size\n}\n\n/**\n * Create a minimal HTML document.\n *\n * @param {string} title\n * @param {string} body\n * @private\n */\n\nfunction createHtmlDocument (title, body) {\n  return '<!DOCTYPE html>\\n' +\n    '<html lang=\"en\">\\n' +\n    '<head>\\n' +\n    '<meta charset=\"utf-8\">\\n' +\n    '<title>' + title + '</title>\\n' +\n    '</head>\\n' +\n    '<body>\\n' +\n    '<pre>' + body + '</pre>\\n' +\n    '</body>\\n' +\n    '</html>\\n'\n}\n\n/**\n * Create a HttpError object from simple arguments.\n *\n * @param {number} status\n * @param {Error|object} err\n * @private\n */\n\nfunction createHttpError (status, err) {\n  if (!err) {\n    return createError(status)\n  }\n\n  return err instanceof Error\n    ? createError(status, err, { expose: false })\n    : createError(status, err)\n}\n\n/**\n * decodeURIComponent.\n *\n * Allows V8 to only deoptimize this fn instead of all\n * of send().\n *\n * @param {String} path\n * @api private\n */\n\nfunction decode (path) {\n  try {\n    return decodeURIComponent(path)\n  } catch (err) {\n    return -1\n  }\n}\n\n/**\n * Get the header names on a respnse.\n *\n * @param {object} res\n * @returns {array[string]}\n * @private\n */\n\nfunction getHeaderNames (res) {\n  return typeof res.getHeaderNames !== 'function'\n    ? Object.keys(res._headers || {})\n    : res.getHeaderNames()\n}\n\n/**\n * Determine if emitter has listeners of a given type.\n *\n * The way to do this check is done three different ways in Node.js >= 0.8\n * so this consolidates them into a minimal set using instance methods.\n *\n * @param {EventEmitter} emitter\n * @param {string} type\n * @returns {boolean}\n * @private\n */\n\nfunction hasListeners (emitter, type) {\n  var count = typeof emitter.listenerCount !== 'function'\n    ? emitter.listeners(type).length\n    : emitter.listenerCount(type)\n\n  return count > 0\n}\n\n/**\n * Determine if the response headers have been sent.\n *\n * @param {object} res\n * @returns {boolean}\n * @private\n */\n\nfunction headersSent (res) {\n  return typeof res.headersSent !== 'boolean'\n    ? Boolean(res._header)\n    : res.headersSent\n}\n\n/**\n * Normalize the index option into an array.\n *\n * @param {boolean|string|array} val\n * @param {string} name\n * @private\n */\n\nfunction normalizeList (val, name) {\n  var list = [].concat(val || [])\n\n  for (var i = 0; i < list.length; i++) {\n    if (typeof list[i] !== 'string') {\n      throw new TypeError(name + ' must be array of strings or false')\n    }\n  }\n\n  return list\n}\n\n/**\n * Parse an HTTP Date into a number.\n *\n * @param {string} date\n * @private\n */\n\nfunction parseHttpDate (date) {\n  var timestamp = date && Date.parse(date)\n\n  return typeof timestamp === 'number'\n    ? timestamp\n    : NaN\n}\n\n/**\n * Parse a HTTP token list.\n *\n * @param {string} str\n * @private\n */\n\nfunction parseTokenList (str) {\n  var end = 0\n  var list = []\n  var start = 0\n\n  // gather tokens\n  for (var i = 0, len = str.length; i < len; i++) {\n    switch (str.charCodeAt(i)) {\n      case 0x20: /*   */\n        if (start === end) {\n          start = end = i + 1\n        }\n        break\n      case 0x2c: /* , */\n        if (start !== end) {\n          list.push(str.substring(start, end))\n        }\n        start = end = i + 1\n        break\n      default:\n        end = i + 1\n        break\n    }\n  }\n\n  // final token\n  if (start !== end) {\n    list.push(str.substring(start, end))\n  }\n\n  return list\n}\n\n/**\n * Set an object of headers on a response.\n *\n * @param {object} res\n * @param {object} headers\n * @private\n */\n\nfunction setHeaders (res, headers) {\n  var keys = Object.keys(headers)\n\n  for (var i = 0; i < keys.length; i++) {\n    var key = keys[i]\n    res.setHeader(key, headers[key])\n  }\n}\n/HISTORY.md30.18.0 / 2022-03-23\n===================\n\n  * Fix emitted 416 error missing headers property\n  * Limit the headers removed for 304 response\n  * deps: depd@2.0.0\n    - Replace internal `eval` usage with `Function` constructor\n    - Use instance methods on `process` to check for listeners\n  * deps: destroy@1.2.0\n  * deps: http-errors@2.0.0\n    - deps: depd@2.0.0\n    - deps: statuses@2.0.1\n  * deps: on-finished@2.4.1\n  * deps: statuses@2.0.1\n\n0.17.2 / 2021-12-11\n===================\n\n  * pref: ignore empty http tokens\n  * deps: http-errors@1.8.1\n    - deps: inherits@2.0.4\n    - deps: toidentifier@1.0.1\n    - deps: setprototypeof@1.2.0\n  * deps: ms@2.1.3\n\n0.17.1 / 2019-05-10\n===================\n\n  * Set stricter CSP header in redirect & error responses\n  * deps: range-parser@~1.2.1\n\n0.17.0 / 2019-05-03\n===================\n\n  * deps: http-errors@~1.7.2\n    - Set constructor name when possible\n    - Use `toidentifier` module to make class names\n    - deps: depd@~1.1.2\n    - deps: setprototypeof@1.1.1\n    - deps: statuses@'>= 1.5.0 < 2'\n  * deps: mime@1.6.0\n    - Add extensions for JPEG-2000 images\n    - Add new `font/*` types from IANA\n    - Add WASM mapping\n    - Update `.bdoc` to `application/bdoc`\n    - Update `.bmp` to `image/bmp`\n    - Update `.m4a` to `audio/mp4`\n    - Update `.rtf` to `application/rtf`\n    - Update `.wav` to `audio/wav`\n    - Update `.xml` to `application/xml`\n    - Update generic extensions to `application/octet-stream`:\n      `.deb`, `.dll`, `.dmg`, `.exe`, `.iso`, `.msi`\n    - Use mime-score module to resolve extension conflicts\n  * deps: ms@2.1.1\n    - Add `week`/`w` support\n    - Fix negative number handling\n  * deps: statuses@~1.5.0\n  * perf: remove redundant `path.normalize` call\n\n0.16.2 / 2018-02-07\n===================\n\n  * Fix incorrect end tag in default error & redirects\n  * deps: depd@~1.1.2\n    - perf: remove argument reassignment\n  * deps: encodeurl@~1.0.2\n    - Fix encoding `%` as last character\n  * deps: statuses@~1.4.0\n\n0.16.1 / 2017-09-29\n===================\n\n  * Fix regression in edge-case behavior for empty `path`\n\n0.16.0 / 2017-09-27\n===================\n\n  * Add `immutable` option\n  * Fix missing `</html>` in default error & redirects\n  * Use instance methods on steam to check for listeners\n  * deps: mime@1.4.1\n    - Add 70 new types for file extensions\n    - Set charset as \"UTF-8\" for .js and .json\n  * perf: improve path validation speed\n\n0.15.6 / 2017-09-22\n===================\n\n  * deps: debug@2.6.9\n  * perf: improve `If-Match` token parsing\n\n0.15.5 / 2017-09-20\n===================\n\n  * deps: etag@~1.8.1\n    - perf: replace regular expression with substring\n  * deps: fresh@0.5.2\n    - Fix handling of modified headers with invalid dates\n    - perf: improve ETag match loop\n    - perf: improve `If-None-Match` token parsing\n\n0.15.4 / 2017-08-05\n===================\n\n  * deps: debug@2.6.8\n  * deps: depd@~1.1.1\n    - Remove unnecessary `Buffer` loading\n  * deps: http-errors@~1.6.2\n    - deps: depd@1.1.1\n\n0.15.3 / 2017-05-16\n===================\n\n  * deps: debug@2.6.7\n    - deps: ms@2.0.0\n  * deps: ms@2.0.0\n\n0.15.2 / 2017-04-26\n===================\n\n  * deps: debug@2.6.4\n    - Fix `DEBUG_MAX_ARRAY_LENGTH`\n    - deps: ms@0.7.3\n  * deps: ms@1.0.0\n\n0.15.1 / 2017-03-04\n===================\n\n  * Fix issue when `Date.parse` does not return `NaN` on invalid date\n  * Fix strict violation in broken environments\n\n0.15.0 / 2017-02-25\n===================\n\n  * Support `If-Match` and `If-Unmodified-Since` headers\n  * Add `res` and `path` arguments to `directory` event\n  * Remove usage of `res._headers` private field\n    - Improves compatibility with Node.js 8 nightly\n  * Send complete HTML document in redirect & error responses\n  * Set default CSP header in redirect & error responses\n  * Use `res.getHeaderNames()` when available\n  * Use `res.headersSent` when available\n  * deps: debug@2.6.1\n    - Allow colors in workers\n    - Deprecated `DEBUG_FD` environment variable set to `3` or higher\n    - Fix error when running under React Native\n    - Use same color for same namespace\n    - deps: ms@0.7.2\n  * deps: etag@~1.8.0\n  * deps: fresh@0.5.0\n    - Fix false detection of `no-cache` request directive\n    - Fix incorrect result when `If-None-Match` has both `*` and ETags\n    - Fix weak `ETag` matching to match spec\n    - perf: delay reading header values until needed\n    - perf: enable strict mode\n    - perf: hoist regular expressions\n    - perf: remove duplicate conditional\n    - perf: remove unnecessary boolean coercions\n    - perf: skip checking modified time if ETag check failed\n    - perf: skip parsing `If-None-Match` when no `ETag` header\n    - perf: use `Date.parse` instead of `new Date`\n  * deps: http-errors@~1.6.1\n    - Make `message` property enumerable for `HttpError`s\n    - deps: setprototypeof@1.0.3\n\n0.14.2 / 2017-01-23\n===================\n\n  * deps: http-errors@~1.5.1\n    - deps: inherits@2.0.3\n    - deps: setprototypeof@1.0.2\n    - deps: statuses@'>= 1.3.1 < 2'\n  * deps: ms@0.7.2\n  * deps: statuses@~1.3.1\n\n0.14.1 / 2016-06-09\n===================\n\n  * Fix redirect error when `path` contains raw non-URL characters\n  * Fix redirect when `path` starts with multiple forward slashes\n\n0.14.0 / 2016-06-06\n===================\n\n  * Add `acceptRanges` option\n  * Add `cacheControl` option\n  * Attempt to combine multiple ranges into single range\n  * Correctly inherit from `Stream` class\n  * Fix `Content-Range` header in 416 responses when using `start`/`end` options\n  * Fix `Content-Range` header missing from default 416 responses\n  * Ignore non-byte `Range` headers\n  * deps: http-errors@~1.5.0\n    - Add `HttpError` export, for `err instanceof createError.HttpError`\n    - Support new code `421 Misdirected Request`\n    - Use `setprototypeof` module to replace `__proto__` setting\n    - deps: inherits@2.0.1\n    - deps: statuses@'>= 1.3.0 < 2'\n    - perf: enable strict mode\n  * deps: range-parser@~1.2.0\n    - Fix incorrectly returning -1 when there is at least one valid range\n    - perf: remove internal function\n  * deps: statuses@~1.3.0\n    - Add `421 Misdirected Request`\n    - perf: enable strict mode\n  * perf: remove argument reassignment\n\n0.13.2 / 2016-03-05\n===================\n\n  * Fix invalid `Content-Type` header when `send.mime.default_type` unset\n\n0.13.1 / 2016-01-16\n===================\n\n  * deps: depd@~1.1.0\n    - Support web browser loading\n    - perf: enable strict mode\n  * deps: destroy@~1.0.4\n    - perf: enable strict mode\n  * deps: escape-html@~1.0.3\n    - perf: enable strict mode\n    - perf: optimize string replacement\n    - perf: use faster string coercion\n  * deps: range-parser@~1.0.3\n    - perf: enable strict mode\n\n0.13.0 / 2015-06-16\n===================\n\n  * Allow Node.js HTTP server to set `Date` response header\n  * Fix incorrectly removing `Content-Location` on 304 response\n  * Improve the default redirect response headers\n  * Send appropriate headers on default error response\n  * Use `http-errors` for standard emitted errors\n  * Use `statuses` instead of `http` module for status messages\n  * deps: escape-html@1.0.2\n  * deps: etag@~1.7.0\n    - Improve stat performance by removing hashing\n  * deps: fresh@0.3.0\n    - Add weak `ETag` matching support\n  * deps: on-finished@~2.3.0\n    - Add defined behavior for HTTP `CONNECT` requests\n    - Add defined behavior for HTTP `Upgrade` requests\n    - deps: ee-first@1.1.1\n  * perf: enable strict mode\n  * perf: remove unnecessary array allocations\n\n0.12.3 / 2015-05-13\n===================\n\n  * deps: debug@~2.2.0\n    - deps: ms@0.7.1\n  * deps: depd@~1.0.1\n  * deps: etag@~1.6.0\n   - Improve support for JXcore\n   - Support \"fake\" stats objects in environments without `fs`\n  * deps: ms@0.7.1\n    - Prevent extraordinarily long inputs\n  * deps: on-finished@~2.2.1\n\n0.12.2 / 2015-03-13\n===================\n\n  * Throw errors early for invalid `extensions` or `index` options\n  * deps: debug@~2.1.3\n    - Fix high intensity foreground color for bold\n    - deps: ms@0.7.0\n\n0.12.1 / 2015-02-17\n===================\n\n  * Fix regression sending zero-length files\n\n0.12.0 / 2015-02-16\n===================\n\n  * Always read the stat size from the file\n  * Fix mutating passed-in `options`\n  * deps: mime@1.3.4\n\n0.11.1 / 2015-01-20\n===================\n\n  * Fix `root` path disclosure\n\n0.11.0 / 2015-01-05\n===================\n\n  * deps: debug@~2.1.1\n  * deps: etag@~1.5.1\n    - deps: crc@3.2.1\n  * deps: ms@0.7.0\n    - Add `milliseconds`\n    - Add `msecs`\n    - Add `secs`\n    - Add `mins`\n    - Add `hrs`\n    - Add `yrs`\n  * deps: on-finished@~2.2.0\n\n0.10.1 / 2014-10-22\n===================\n\n  * deps: on-finished@~2.1.1\n    - Fix handling of pipelined requests\n\n0.10.0 / 2014-10-15\n===================\n\n  * deps: debug@~2.1.0\n    - Implement `DEBUG_FD` env variable support\n  * deps: depd@~1.0.0\n  * deps: etag@~1.5.0\n    - Improve string performance\n    - Slightly improve speed for weak ETags over 1KB\n\n0.9.3 / 2014-09-24\n==================\n\n  * deps: etag@~1.4.0\n    - Support \"fake\" stats objects\n\n0.9.2 / 2014-09-15\n==================\n\n  * deps: depd@0.4.5\n  * deps: etag@~1.3.1\n  * deps: range-parser@~1.0.2\n\n0.9.1 / 2014-09-07\n==================\n\n  * deps: fresh@0.2.4\n\n0.9.0 / 2014-09-07\n==================\n\n  * Add `lastModified` option\n  * Use `etag` to generate `ETag` header\n  * deps: debug@~2.0.0\n\n0.8.5 / 2014-09-04\n==================\n\n  * Fix malicious path detection for empty string path\n\n0.8.4 / 2014-09-04\n==================\n\n  * Fix a path traversal issue when using `root`\n\n0.8.3 / 2014-08-16\n==================\n\n  * deps: destroy@1.0.3\n    - renamed from dethroy\n  * deps: on-finished@2.1.0\n\n0.8.2 / 2014-08-14\n==================\n\n  * Work around `fd` leak in Node.js 0.10 for `fs.ReadStream`\n  * deps: dethroy@1.0.2\n\n0.8.1 / 2014-08-05\n==================\n\n  * Fix `extensions` behavior when file already has extension\n\n0.8.0 / 2014-08-05\n==================\n\n  * Add `extensions` option\n\n0.7.4 / 2014-08-04\n==================\n\n  * Fix serving index files without root dir\n\n0.7.3 / 2014-07-29\n==================\n\n  * Fix incorrect 403 on Windows and Node.js 0.11\n\n0.7.2 / 2014-07-27\n==================\n\n  * deps: depd@0.4.4\n    - Work-around v8 generating empty stack traces\n\n0.7.1 / 2014-07-26\n==================\n\n * deps: depd@0.4.3\n   - Fix exception when global `Error.stackTraceLimit` is too low\n\n0.7.0 / 2014-07-20\n==================\n\n * Deprecate `hidden` option; use `dotfiles` option\n * Add `dotfiles` option\n * deps: debug@1.0.4\n * deps: depd@0.4.2\n   - Add `TRACE_DEPRECATION` environment variable\n   - Remove non-standard grey color from color output\n   - Support `--no-deprecation` argument\n   - Support `--trace-deprecation` argument\n\n0.6.0 / 2014-07-11\n==================\n\n * Deprecate `from` option; use `root` option\n * Deprecate `send.etag()` -- use `etag` in `options`\n * Deprecate `send.hidden()` -- use `hidden` in `options`\n * Deprecate `send.index()` -- use `index` in `options`\n * Deprecate `send.maxage()` -- use `maxAge` in `options`\n * Deprecate `send.root()` -- use `root` in `options`\n * Cap `maxAge` value to 1 year\n * deps: debug@1.0.3\n   - Add support for multiple wildcards in namespaces\n\n0.5.0 / 2014-06-28\n==================\n\n * Accept string for `maxAge` (converted by `ms`)\n * Add `headers` event\n * Include link in default redirect response\n * Use `EventEmitter.listenerCount` to count listeners\n\n0.4.3 / 2014-06-11\n==================\n\n * Do not throw un-catchable error on file open race condition\n * Use `escape-html` for HTML escaping\n * deps: debug@1.0.2\n   - fix some debugging output colors on node.js 0.8\n * deps: finished@1.2.2\n * deps: fresh@0.2.2\n\n0.4.2 / 2014-06-09\n==================\n\n * fix \"event emitter leak\" warnings\n * deps: debug@1.0.1\n * deps: finished@1.2.1\n\n0.4.1 / 2014-06-02\n==================\n\n * Send `max-age` in `Cache-Control` in correct format\n\n0.4.0 / 2014-05-27\n==================\n\n * Calculate ETag with md5 for reduced collisions\n * Fix wrong behavior when index file matches directory\n * Ignore stream errors after request ends\n   - Goodbye `EBADF, read`\n * Skip directories in index file search\n * deps: debug@0.8.1\n\n0.3.0 / 2014-04-24\n==================\n\n * Fix sending files with dots without root set\n * Coerce option types\n * Accept API options in options object\n * Set etags to \"weak\"\n * Include file path in etag\n * Make \"Can't set headers after they are sent.\" catchable\n * Send full entity-body for multi range requests\n * Default directory access to 403 when index disabled\n * Support multiple index paths\n * Support \"If-Range\" header\n * Control whether to generate etags\n * deps: mime@1.2.11\n\n0.2.0 / 2014-01-29\n==================\n\n * update range-parser and fresh\n\n0.1.4 / 2013-08-11 \n==================\n\n * update fresh\n\n0.1.3 / 2013-07-08 \n==================\n\n * Revert \"Fix fd leak\"\n\n0.1.2 / 2013-07-03 \n==================\n\n * Fix fd leak\n\n0.1.0 / 2012-08-25 \n==================\n\n  * add options parameter to send() that is passed to fs.createReadStream() [kanongil]\n\n0.0.4 / 2012-08-16 \n==================\n\n  * allow custom \"Accept-Ranges\" definition\n\n0.0.3 / 2012-07-16 \n==================\n\n  * fix normalization of the root directory. Closes #3\n\n0.0.2 / 2012-07-09 \n==================\n\n  * add passing of req explicitly for now (YUCK)\n\n0.0.1 / 2010-01-03\n==================\n\n  * Initial release\n/README.md%\u0004# send\n\n[![NPM Version][npm-version-image]][npm-url]\n[![NPM Downloads][npm-downloads-image]][npm-url]\n[![Linux Build][github-actions-ci-image]][github-actions-ci-url]\n[![Windows Build][appveyor-image]][appveyor-url]\n[![Test Coverage][coveralls-image]][coveralls-url]\n\nSend is a library for streaming files from the file system as a http response\nsupporting partial responses (Ranges), conditional-GET negotiation (If-Match,\nIf-Unmodified-Since, If-None-Match, If-Modified-Since), high test coverage,\nand granular events which may be leveraged to take appropriate actions in your\napplication or framework.\n\nLooking to serve up entire folders mapped to URLs? Try [serve-static](https://www.npmjs.org/package/serve-static).\n\n## Installation\n\nThis is a [Node.js](https://nodejs.org/en/) module available through the\n[npm registry](https://www.npmjs.com/). Installation is done using the\n[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally):\n\n```bash\n$ npm install send\n```\n\n## API\n\n```js\nvar send = require('send')\n```\n\n### send(req, path, [options])\n\nCreate a new `SendStream` for the given path to send to a `res`. The `req` is\nthe Node.js HTTP request and the `path` is a urlencoded path to send (urlencoded,\nnot the actual file-system path).\n\n#### Options\n\n##### acceptRanges\n\nEnable or disable accepting ranged requests, defaults to true.\nDisabling this will not send `Accept-Ranges` and ignore the contents\nof the `Range` request header.\n\n##### cacheControl\n\nEnable or disable setting `Cache-Control` response header, defaults to\ntrue. Disabling this will ignore the `immutable` and `maxAge` options.\n\n##### dotfiles\n\nSet how \"dotfiles\" are treated when encountered. A dotfile is a file\nor directory that begins with a dot (\".\"). Note this check is done on\nthe path itself without checking if the path actually exists on the\ndisk. If `root` is specified, only the dotfiles above the root are\nchecked (i.e. the root itself can be within a dotfile when when set\nto \"deny\").\n\n  - `'allow'` No special treatment for dotfiles.\n  - `'deny'` Send a 403 for any request for a dotfile.\n  - `'ignore'` Pretend like the dotfile does not exist and 404.\n\nThe default value is _similar_ to `'ignore'`, with the exception that\nthis default will not ignore the files within a directory that begins\nwith a dot, for backward-compatibility.\n\n##### end\n\nByte offset at which the stream ends, defaults to the length of the file\nminus 1. The end is inclusive in the stream, meaning `end: 3` will include\nthe 4th byte in the stream.\n\n##### etag\n\nEnable or disable etag generation, defaults to true.\n\n##### extensions\n\nIf a given file doesn't exist, try appending one of the given extensions,\nin the given order. By default, this is disabled (set to `false`). An\nexample value that will serve extension-less HTML files: `['html', 'htm']`.\nThis is skipped if the requested file already has an extension.\n\n##### immutable\n\nEnable or disable the `immutable` directive in the `Cache-Control` response\nheader, defaults to `false`. If set to `true`, the `maxAge` option should\nalso be specified to enable caching. The `immutable` directive will prevent\nsupported clients from making conditional requests during the life of the\n`maxAge` option to check if the file has changed.\n\n##### index\n\nBy default send supports \"index.html\" files, to disable this\nset `false` or to supply a new index pass a string or an array\nin preferred order.\n\n##### lastModified\n\nEnable or disable `Last-Modified` header, defaults to true. Uses the file\nsystem's last modified value.\n\n##### maxAge\n\nProvide a max-age in milliseconds for http caching, defaults to 0.\nThis can also be a string accepted by the\n[ms](https://www.npmjs.org/package/ms#readme) module.\n\n##### root\n\nServe files relative to `path`.\n\n##### start\n\nByte offset at which the stream starts, defaults to 0. The start is inclusive,\nmeaning `start: 2` will include the 3rd byte in the stream.\n\n#### Events\n\nThe `SendStream` is an event emitter and will emit the following events:\n\n  - `error` an error occurred `(err)`\n  - `directory` a directory was requested `(res, path)`\n  - `file` a file was requested `(path, stat)`\n  - `headers` the headers are about to be set on a file `(res, path, stat)`\n  - `stream` file streaming has started `(stream)`\n  - `end` streaming has completed\n\n#### .pipe\n\nThe `pipe` method is used to pipe the response into the Node.js HTTP response\nobject, typically `send(req, path, options).pipe(res)`.\n\n### .mime\n\nThe `mime` export is the global instance of of the\n[`mime` npm module](https://www.npmjs.com/package/mime).\n\nThis is used to configure the MIME types that are associated with file extensions\nas well as other options for how to resolve the MIME type of a file (like the\ndefault type to use for an unknown file extension).\n\n## Error-handling\n\nBy default when no `error` listeners are present an automatic response will be\nmade, otherwise you have full control over the response, aka you may show a 5xx\npage etc.\n\n## Caching\n\nIt does _not_ perform internal caching, you should use a reverse proxy cache\nsuch as Varnish for this, or those fancy things called CDNs. If your\napplication is small enough that it would benefit from single-node memory\ncaching, it's small enough that it does not need caching at all ;).\n\n## Debugging\n\nTo enable `debug()` instrumentation output export __DEBUG__:\n\n```\n$ DEBUG=send node app\n```\n\n## Running tests\n\n```\n$ npm install\n$ npm test\n```\n\n## Examples\n\n### Serve a specific file\n\nThis simple example will send a specific file to all requests.\n\n```js\nvar http = require('http')\nvar send = require('send')\n\nvar server = http.createServer(function onRequest (req, res) {\n  send(req, '/path/to/index.html')\n    .pipe(res)\n})\n\nserver.listen(3000)\n```\n\n### Serve all files from a directory\n\nThis simple example will just serve up all the files in a\ngiven directory as the top-level. For example, a request\n`GET /foo.txt` will send back `/www/public/foo.txt`.\n\n```js\nvar http = require('http')\nvar parseUrl = require('parseurl')\nvar send = require('send')\n\nvar server = http.createServer(function onRequest (req, res) {\n  send(req, parseUrl(req).pathname, { root: '/www/public' })\n    .pipe(res)\n})\n\nserver.listen(3000)\n```\n\n### Custom file types\n\n```js\nvar http = require('http')\nvar parseUrl = require('parseurl')\nvar send = require('send')\n\n// Default unknown types to text/plain\nsend.mime.default_type = 'text/plain'\n\n// Add a custom type\nsend.mime.define({\n  'application/x-my-type': ['x-mt', 'x-mtt']\n})\n\nvar server = http.createServer(function onRequest (req, res) {\n  send(req, parseUrl(req).pathname, { root: '/www/public' })\n    .pipe(res)\n})\n\nserver.listen(3000)\n```\n\n### Custom directory index view\n\nThis is a example of serving up a structure of directories with a\ncustom function to render a listing of a directory.\n\n```js\nvar http = require('http')\nvar fs = require('fs')\nvar parseUrl = require('parseurl')\nvar send = require('send')\n\n// Transfer arbitrary files from within /www/example.com/public/*\n// with a custom handler for directory listing\nvar server = http.createServer(function onRequest (req, res) {\n  send(req, parseUrl(req).pathname, { index: false, root: '/www/public' })\n    .once('directory', directory)\n    .pipe(res)\n})\n\nserver.listen(3000)\n\n// Custom directory handler\nfunction directory (res, path) {\n  var stream = this\n\n  // redirect to trailing slash for consistent url\n  if (!stream.hasTrailingSlash()) {\n    return stream.redirect(path)\n  }\n\n  // get directory list\n  fs.readdir(path, function onReaddir (err, list) {\n    if (err) return stream.error(err)\n\n    // render an index for the directory\n    res.setHeader('Content-Type', 'text/plain; charset=UTF-8')\n    res.end(list.join('\\n') + '\\n')\n  })\n}\n```\n\n### Serving from a root directory with custom error-handling\n\n```js\nvar http = require('http')\nvar parseUrl = require('parseurl')\nvar send = require('send')\n\nvar server = http.createServer(function onRequest (req, res) {\n  // your custom error-handling logic:\n  function error (err) {\n    res.statusCode = err.status || 500\n    res.end(err.message)\n  }\n\n  // your custom headers\n  function headers (res, path, stat) {\n    // serve all files for download\n    res.setHeader('Content-Disposition', 'attachment')\n  }\n\n  // your custom directory handling logic:\n  function redirect () {\n    res.statusCode = 301\n    res.setHeader('Location', req.url + '/')\n    res.end('Redirecting to ' + req.url + '/')\n  }\n\n  // transfer arbitrary files from within\n  // /www/example.com/public/*\n  send(req, parseUrl(req).pathname, { root: '/www/public' })\n    .on('error', error)\n    .on('directory', redirect)\n    .on('headers', headers)\n    .pipe(res)\n})\n\nserver.listen(3000)\n```\n\n## License\n\n[MIT](LICENSE)\n\n[appveyor-image]: https://badgen.net/appveyor/ci/dougwilson/send/master?label=windows\n[appveyor-url]: https://ci.appveyor.com/project/dougwilson/send\n[coveralls-image]: https://badgen.net/coveralls/c/github/pillarjs/send/master\n[coveralls-url]: https://coveralls.io/r/pillarjs/send?branch=master\n[github-actions-ci-image]: https://badgen.net/github/checks/pillarjs/send/master?label=linux\n[github-actions-ci-url]: https://github.com/pillarjs/send/actions/workflows/ci.yml\n[node-image]: https://badgen.net/npm/node/send\n[node-url]: https://nodejs.org/en/download/\n[npm-downloads-image]: https://badgen.net/npm/dm/send\n[npm-url]: https://npmjs.org/package/send\n[npm-version-image]: https://badgen.net/npm/v/send\n/SECURITY.md\u0004# Security Policies and Procedures\n\n## Reporting a Bug\n\nThe `send` team and community take all security bugs seriously. Thank you\nfor improving the security of Express. We appreciate your efforts and\nresponsible disclosure and will make every effort to acknowledge your\ncontributions.\n\nReport security bugs by emailing the current owner(s) of `send`. This information\ncan be found in the npm registry using the command `npm owner ls send`.\nIf unsure or unable to get the information from the above, open an issue\nin the [project issue tracker](https://github.com/pillarjs/send/issues)\nasking for the current contact information.\n\nTo ensure the timely response to your report, please ensure that the entirety\nof the report is contained within the email body and not solely behind a web\nlink or an attachment.\n\nAt least one owner will acknowledge your email within 48 hours, and will send a\nmore detailed response within 48 hours indicating the next steps in handling\nyour report. After the initial reply to your report, the owners will\nendeavor to keep you informed of the progress towards a fix and full\nannouncement, and may ask for additional information or guidance.\n/LICENSE\u0004h(The MIT License)\n\nCopyright (c) 2012 TJ Holowaychuk\nCopyright (c) 2014-2022 Douglas Christopher Wilson\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n/package.json\u0006#{\n  \"name\": \"send\",\n  \"description\": \"Better streaming static file server with Range and conditional-GET support\",\n  \"version\": \"0.18.0\",\n  \"author\": \"TJ Holowaychuk <tj@vision-media.ca>\",\n  \"contributors\": [\n    \"Douglas Christopher Wilson <doug@somethingdoug.com>\",\n    \"James Wyatt Cready <jcready@gmail.com>\",\n    \"Jesús Leganés Combarro <piranna@gmail.com>\"\n  ],\n  \"license\": \"MIT\",\n  \"repository\": \"pillarjs/send\",\n  \"keywords\": [\n    \"static\",\n    \"file\",\n    \"server\"\n  ],\n  \"dependencies\": {\n    \"debug\": \"2.6.9\",\n    \"depd\": \"2.0.0\",\n    \"destroy\": \"1.2.0\",\n    \"encodeurl\": \"~1.0.2\",\n    \"escape-html\": \"~1.0.3\",\n    \"etag\": \"~1.8.1\",\n    \"fresh\": \"0.5.2\",\n    \"http-errors\": \"2.0.0\",\n    \"mime\": \"1.6.0\",\n    \"ms\": \"2.1.3\",\n    \"on-finished\": \"2.4.1\",\n    \"range-parser\": \"~1.2.1\",\n    \"statuses\": \"2.0.1\"\n  },\n  \"devDependencies\": {\n    \"after\": \"0.8.2\",\n    \"eslint\": \"7.32.0\",\n    \"eslint-config-standard\": \"14.1.1\",\n    \"eslint-plugin-import\": \"2.25.4\",\n    \"eslint-plugin-markdown\": \"2.2.1\",\n    \"eslint-plugin-node\": \"11.1.0\",\n    \"eslint-plugin-promise\": \"5.2.0\",\n    \"eslint-plugin-standard\": \"4.1.0\",\n    \"mocha\": \"9.2.2\",\n    \"nyc\": \"15.1.0\",\n    \"supertest\": \"6.2.2\"\n  },\n  \"files\": [\n    \"HISTORY.md\",\n    \"LICENSE\",\n    \"README.md\",\n    \"SECURITY.md\",\n    \"index.js\"\n  ],\n  \"engines\": {\n    \"node\": \">= 0.8.0\"\n  },\n  \"scripts\": {\n    \"lint\": \"eslint .\",\n    \"test\": \"mocha --check-leaks --reporter spec --bail\",\n    \"test-ci\": \"nyc --reporter=lcov --reporter=text npm test\",\n    \"test-cov\": \"nyc --reporter=html --reporter=text npm test\"\n  }\n}\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/c2VydmUtc3RhdGljQDEuMTUuMA==",
    "content": "/README.md\u001e# serve-static\n\n[![NPM Version][npm-version-image]][npm-url]\n[![NPM Downloads][npm-downloads-image]][npm-url]\n[![Linux Build][github-actions-ci-image]][github-actions-ci-url]\n[![Windows Build][appveyor-image]][appveyor-url]\n[![Test Coverage][coveralls-image]][coveralls-url]\n\n## Install\n\nThis is a [Node.js](https://nodejs.org/en/) module available through the\n[npm registry](https://www.npmjs.com/). Installation is done using the\n[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally):\n\n```sh\n$ npm install serve-static\n```\n\n## API\n\n```js\nvar serveStatic = require('serve-static')\n```\n\n### serveStatic(root, options)\n\nCreate a new middleware function to serve files from within a given root\ndirectory. The file to serve will be determined by combining `req.url`\nwith the provided root directory. When a file is not found, instead of\nsending a 404 response, this module will instead call `next()` to move on\nto the next middleware, allowing for stacking and fall-backs.\n\n#### Options\n\n##### acceptRanges\n\nEnable or disable accepting ranged requests, defaults to true.\nDisabling this will not send `Accept-Ranges` and ignore the contents\nof the `Range` request header.\n\n##### cacheControl\n\nEnable or disable setting `Cache-Control` response header, defaults to\ntrue. Disabling this will ignore the `immutable` and `maxAge` options.\n\n##### dotfiles\n\n Set how \"dotfiles\" are treated when encountered. A dotfile is a file\nor directory that begins with a dot (\".\"). Note this check is done on\nthe path itself without checking if the path actually exists on the\ndisk. If `root` is specified, only the dotfiles above the root are\nchecked (i.e. the root itself can be within a dotfile when set\nto \"deny\").\n\n  - `'allow'` No special treatment for dotfiles.\n  - `'deny'` Deny a request for a dotfile and 403/`next()`.\n  - `'ignore'` Pretend like the dotfile does not exist and 404/`next()`.\n\nThe default value is similar to `'ignore'`, with the exception that this\ndefault will not ignore the files within a directory that begins with a dot.\n\n##### etag\n\nEnable or disable etag generation, defaults to true.\n\n##### extensions\n\nSet file extension fallbacks. When set, if a file is not found, the given\nextensions will be added to the file name and search for. The first that\nexists will be served. Example: `['html', 'htm']`.\n\nThe default value is `false`.\n\n##### fallthrough\n\nSet the middleware to have client errors fall-through as just unhandled\nrequests, otherwise forward a client error. The difference is that client\nerrors like a bad request or a request to a non-existent file will cause\nthis middleware to simply `next()` to your next middleware when this value\nis `true`. When this value is `false`, these errors (even 404s), will invoke\n`next(err)`.\n\nTypically `true` is desired such that multiple physical directories can be\nmapped to the same web address or for routes to fill in non-existent files.\n\nThe value `false` can be used if this middleware is mounted at a path that\nis designed to be strictly a single file system directory, which allows for\nshort-circuiting 404s for less overhead. This middleware will also reply to\nall methods.\n\nThe default value is `true`.\n\n##### immutable\n\nEnable or disable the `immutable` directive in the `Cache-Control` response\nheader, defaults to `false`. If set to `true`, the `maxAge` option should\nalso be specified to enable caching. The `immutable` directive will prevent\nsupported clients from making conditional requests during the life of the\n`maxAge` option to check if the file has changed.\n\n##### index\n\nBy default this module will send \"index.html\" files in response to a request\non a directory. To disable this set `false` or to supply a new index pass a\nstring or an array in preferred order.\n\n##### lastModified\n\nEnable or disable `Last-Modified` header, defaults to true. Uses the file\nsystem's last modified value.\n\n##### maxAge\n\nProvide a max-age in milliseconds for http caching, defaults to 0. This\ncan also be a string accepted by the [ms](https://www.npmjs.org/package/ms#readme)\nmodule.\n\n##### redirect\n\nRedirect to trailing \"/\" when the pathname is a dir. Defaults to `true`.\n\n##### setHeaders\n\nFunction to set custom headers on response. Alterations to the headers need to\noccur synchronously. The function is called as `fn(res, path, stat)`, where\nthe arguments are:\n\n  - `res` the response object\n  - `path` the file path that is being sent\n  - `stat` the stat object of the file that is being sent\n\n## Examples\n\n### Serve files with vanilla node.js http server\n\n```js\nvar finalhandler = require('finalhandler')\nvar http = require('http')\nvar serveStatic = require('serve-static')\n\n// Serve up public/ftp folder\nvar serve = serveStatic('public/ftp', { index: ['index.html', 'index.htm'] })\n\n// Create server\nvar server = http.createServer(function onRequest (req, res) {\n  serve(req, res, finalhandler(req, res))\n})\n\n// Listen\nserver.listen(3000)\n```\n\n### Serve all files as downloads\n\n```js\nvar contentDisposition = require('content-disposition')\nvar finalhandler = require('finalhandler')\nvar http = require('http')\nvar serveStatic = require('serve-static')\n\n// Serve up public/ftp folder\nvar serve = serveStatic('public/ftp', {\n  index: false,\n  setHeaders: setHeaders\n})\n\n// Set header to force download\nfunction setHeaders (res, path) {\n  res.setHeader('Content-Disposition', contentDisposition(path))\n}\n\n// Create server\nvar server = http.createServer(function onRequest (req, res) {\n  serve(req, res, finalhandler(req, res))\n})\n\n// Listen\nserver.listen(3000)\n```\n\n### Serving using express\n\n#### Simple\n\nThis is a simple example of using Express.\n\n```js\nvar express = require('express')\nvar serveStatic = require('serve-static')\n\nvar app = express()\n\napp.use(serveStatic('public/ftp', { index: ['default.html', 'default.htm'] }))\napp.listen(3000)\n```\n\n#### Multiple roots\n\nThis example shows a simple way to search through multiple directories.\nFiles are searched for in `public-optimized/` first, then `public/` second\nas a fallback.\n\n```js\nvar express = require('express')\nvar path = require('path')\nvar serveStatic = require('serve-static')\n\nvar app = express()\n\napp.use(serveStatic(path.join(__dirname, 'public-optimized')))\napp.use(serveStatic(path.join(__dirname, 'public')))\napp.listen(3000)\n```\n\n#### Different settings for paths\n\nThis example shows how to set a different max age depending on the served\nfile type. In this example, HTML files are not cached, while everything else\nis for 1 day.\n\n```js\nvar express = require('express')\nvar path = require('path')\nvar serveStatic = require('serve-static')\n\nvar app = express()\n\napp.use(serveStatic(path.join(__dirname, 'public'), {\n  maxAge: '1d',\n  setHeaders: setCustomCacheControl\n}))\n\napp.listen(3000)\n\nfunction setCustomCacheControl (res, path) {\n  if (serveStatic.mime.lookup(path) === 'text/html') {\n    // Custom Cache-Control for HTML files\n    res.setHeader('Cache-Control', 'public, max-age=0')\n  }\n}\n```\n\n## License\n\n[MIT](LICENSE)\n\n[appveyor-image]: https://badgen.net/appveyor/ci/dougwilson/serve-static/master?label=windows\n[appveyor-url]: https://ci.appveyor.com/project/dougwilson/serve-static\n[coveralls-image]: https://badgen.net/coveralls/c/github/expressjs/serve-static/master\n[coveralls-url]: https://coveralls.io/r/expressjs/serve-static?branch=master\n[github-actions-ci-image]: https://badgen.net/github/checks/expressjs/serve-static/master?label=linux\n[github-actions-ci-url]: https://github.com/expressjs/serve-static/actions/workflows/ci.yml\n[node-image]: https://badgen.net/npm/node/serve-static\n[node-url]: https://nodejs.org/en/download/\n[npm-downloads-image]: https://badgen.net/npm/dm/serve-static\n[npm-url]: https://npmjs.org/package/serve-static\n[npm-version-image]: https://badgen.net/npm/v/serve-static\n/HISTORY.md))1.15.0 / 2022-03-24\n===================\n\n  * deps: send@0.18.0\n    - Fix emitted 416 error missing headers property\n    - Limit the headers removed for 304 response\n    - deps: depd@2.0.0\n    - deps: destroy@1.2.0\n    - deps: http-errors@2.0.0\n    - deps: on-finished@2.4.1\n    - deps: statuses@2.0.1\n\n1.14.2 / 2021-12-15\n===================\n\n  * deps: send@0.17.2\n    - deps: http-errors@1.8.1\n    - deps: ms@2.1.3\n    - pref: ignore empty http tokens\n\n1.14.1 / 2019-05-10\n===================\n\n  * Set stricter CSP header in redirect response\n  * deps: send@0.17.1\n    - deps: range-parser@~1.2.1\n\n1.14.0 / 2019-05-07\n===================\n\n  * deps: parseurl@~1.3.3\n  * deps: send@0.17.0\n    - deps: http-errors@~1.7.2\n    - deps: mime@1.6.0\n    - deps: ms@2.1.1\n    - deps: statuses@~1.5.0\n    - perf: remove redundant `path.normalize` call\n\n1.13.2 / 2018-02-07\n===================\n\n  * Fix incorrect end tag in redirects\n  * deps: encodeurl@~1.0.2\n    - Fix encoding `%` as last character\n  * deps: send@0.16.2\n    - deps: depd@~1.1.2\n    - deps: encodeurl@~1.0.2\n    - deps: statuses@~1.4.0\n\n1.13.1 / 2017-09-29\n===================\n\n  * Fix regression when `root` is incorrectly set to a file\n  * deps: send@0.16.1\n\n1.13.0 / 2017-09-27\n===================\n\n  * deps: send@0.16.0\n    - Add 70 new types for file extensions\n    - Add `immutable` option\n    - Fix missing `</html>` in default error & redirects\n    - Set charset as \"UTF-8\" for .js and .json\n    - Use instance methods on steam to check for listeners\n    - deps: mime@1.4.1\n    - perf: improve path validation speed\n\n1.12.6 / 2017-09-22\n===================\n\n  * deps: send@0.15.6\n    - deps: debug@2.6.9\n    - perf: improve `If-Match` token parsing\n  * perf: improve slash collapsing\n\n1.12.5 / 2017-09-21\n===================\n\n  * deps: parseurl@~1.3.2\n    - perf: reduce overhead for full URLs\n    - perf: unroll the \"fast-path\" `RegExp`\n  * deps: send@0.15.5\n    - Fix handling of modified headers with invalid dates\n    - deps: etag@~1.8.1\n    - deps: fresh@0.5.2\n\n1.12.4 / 2017-08-05\n===================\n\n  * deps: send@0.15.4\n    - deps: debug@2.6.8\n    - deps: depd@~1.1.1\n    - deps: http-errors@~1.6.2\n\n1.12.3 / 2017-05-16\n===================\n\n  * deps: send@0.15.3\n    - deps: debug@2.6.7\n\n1.12.2 / 2017-04-26\n===================\n\n  * deps: send@0.15.2\n    - deps: debug@2.6.4\n\n1.12.1 / 2017-03-04\n===================\n\n  * deps: send@0.15.1\n    - Fix issue when `Date.parse` does not return `NaN` on invalid date\n    - Fix strict violation in broken environments\n\n1.12.0 / 2017-02-25\n===================\n\n  * Send complete HTML document in redirect response\n  * Set default CSP header in redirect response\n  * deps: send@0.15.0\n    - Fix false detection of `no-cache` request directive\n    - Fix incorrect result when `If-None-Match` has both `*` and ETags\n    - Fix weak `ETag` matching to match spec\n    - Remove usage of `res._headers` private field\n    - Support `If-Match` and `If-Unmodified-Since` headers\n    - Use `res.getHeaderNames()` when available\n    - Use `res.headersSent` when available\n    - deps: debug@2.6.1\n    - deps: etag@~1.8.0\n    - deps: fresh@0.5.0\n    - deps: http-errors@~1.6.1\n\n1.11.2 / 2017-01-23\n===================\n\n  * deps: send@0.14.2\n    - deps: http-errors@~1.5.1\n    - deps: ms@0.7.2\n    - deps: statuses@~1.3.1\n\n1.11.1 / 2016-06-10\n===================\n\n  * Fix redirect error when `req.url` contains raw non-URL characters\n  * deps: send@0.14.1\n\n1.11.0 / 2016-06-07\n===================\n\n  * Use status code 301 for redirects\n  * deps: send@0.14.0\n    - Add `acceptRanges` option\n    - Add `cacheControl` option\n    - Attempt to combine multiple ranges into single range\n    - Correctly inherit from `Stream` class\n    - Fix `Content-Range` header in 416 responses when using `start`/`end` options\n    - Fix `Content-Range` header missing from default 416 responses\n    - Ignore non-byte `Range` headers\n    - deps: http-errors@~1.5.0\n    - deps: range-parser@~1.2.0\n    - deps: statuses@~1.3.0\n    - perf: remove argument reassignment\n\n1.10.3 / 2016-05-30\n===================\n\n  * deps: send@0.13.2\n    - Fix invalid `Content-Type` header when `send.mime.default_type` unset\n\n1.10.2 / 2016-01-19\n===================\n\n  * deps: parseurl@~1.3.1\n    - perf: enable strict mode\n\n1.10.1 / 2016-01-16\n===================\n\n  * deps: escape-html@~1.0.3\n    - perf: enable strict mode\n    - perf: optimize string replacement\n    - perf: use faster string coercion\n  * deps: send@0.13.1\n    - deps: depd@~1.1.0\n    - deps: destroy@~1.0.4\n    - deps: escape-html@~1.0.3\n    - deps: range-parser@~1.0.3\n\n1.10.0 / 2015-06-17\n===================\n\n  * Add `fallthrough` option\n    - Allows declaring this middleware is the final destination\n    - Provides better integration with Express patterns\n  * Fix reading options from options prototype\n  * Improve the default redirect response headers\n  * deps: escape-html@1.0.2\n  * deps: send@0.13.0\n    - Allow Node.js HTTP server to set `Date` response header\n    - Fix incorrectly removing `Content-Location` on 304 response\n    - Improve the default redirect response headers\n    - Send appropriate headers on default error response\n    - Use `http-errors` for standard emitted errors\n    - Use `statuses` instead of `http` module for status messages\n    - deps: escape-html@1.0.2\n    - deps: etag@~1.7.0\n    - deps: fresh@0.3.0\n    - deps: on-finished@~2.3.0\n    - perf: enable strict mode\n    - perf: remove unnecessary array allocations\n  * perf: enable strict mode\n  * perf: remove argument reassignment\n\n1.9.3 / 2015-05-14\n==================\n\n  * deps: send@0.12.3\n    - deps: debug@~2.2.0\n    - deps: depd@~1.0.1\n    - deps: etag@~1.6.0\n    - deps: ms@0.7.1\n    - deps: on-finished@~2.2.1\n\n1.9.2 / 2015-03-14\n==================\n\n  * deps: send@0.12.2\n    - Throw errors early for invalid `extensions` or `index` options\n    - deps: debug@~2.1.3\n\n1.9.1 / 2015-02-17\n==================\n\n  * deps: send@0.12.1\n    - Fix regression sending zero-length files\n\n1.9.0 / 2015-02-16\n==================\n\n  * deps: send@0.12.0\n    - Always read the stat size from the file\n    - Fix mutating passed-in `options`\n    - deps: mime@1.3.4\n\n1.8.1 / 2015-01-20\n==================\n\n  * Fix redirect loop in Node.js 0.11.14\n  * deps: send@0.11.1\n    - Fix root path disclosure\n\n1.8.0 / 2015-01-05\n==================\n\n  * deps: send@0.11.0\n    - deps: debug@~2.1.1\n    - deps: etag@~1.5.1\n    - deps: ms@0.7.0\n    - deps: on-finished@~2.2.0\n\n1.7.2 / 2015-01-02\n==================\n\n  * Fix potential open redirect when mounted at root\n\n1.7.1 / 2014-10-22\n==================\n\n  * deps: send@0.10.1\n    - deps: on-finished@~2.1.1\n\n1.7.0 / 2014-10-15\n==================\n\n  * deps: send@0.10.0\n    - deps: debug@~2.1.0\n    - deps: depd@~1.0.0\n    - deps: etag@~1.5.0\n\n1.6.5 / 2015-02-04\n==================\n\n  * Fix potential open redirect when mounted at root\n    - Back-ported from v1.7.2\n\n1.6.4 / 2014-10-08\n==================\n\n  * Fix redirect loop when index file serving disabled\n\n1.6.3 / 2014-09-24\n==================\n\n  * deps: send@0.9.3\n    - deps: etag@~1.4.0\n\n1.6.2 / 2014-09-15\n==================\n\n  * deps: send@0.9.2\n    - deps: depd@0.4.5\n    - deps: etag@~1.3.1\n    - deps: range-parser@~1.0.2\n\n1.6.1 / 2014-09-07\n==================\n\n  * deps: send@0.9.1\n    - deps: fresh@0.2.4\n\n1.6.0 / 2014-09-07\n==================\n\n  * deps: send@0.9.0\n    - Add `lastModified` option\n    - Use `etag` to generate `ETag` header\n    - deps: debug@~2.0.0\n\n1.5.4 / 2014-09-04\n==================\n\n  * deps: send@0.8.5\n    - Fix a path traversal issue when using `root`\n    - Fix malicious path detection for empty string path\n\n1.5.3 / 2014-08-17\n==================\n\n  * deps: send@0.8.3\n\n1.5.2 / 2014-08-14\n==================\n\n  * deps: send@0.8.2\n    - Work around `fd` leak in Node.js 0.10 for `fs.ReadStream`\n\n1.5.1 / 2014-08-09\n==================\n\n  * Fix parsing of weird `req.originalUrl` values\n  * deps: parseurl@~1.3.0\n  * deps: utils-merge@1.0.0\n\n1.5.0 / 2014-08-05\n==================\n\n  * deps: send@0.8.1\n    - Add `extensions` option\n\n1.4.4 / 2014-08-04\n==================\n\n  * deps: send@0.7.4\n    - Fix serving index files without root dir\n\n1.4.3 / 2014-07-29\n==================\n\n  * deps: send@0.7.3\n    - Fix incorrect 403 on Windows and Node.js 0.11\n\n1.4.2 / 2014-07-27\n==================\n\n  * deps: send@0.7.2\n    - deps: depd@0.4.4\n\n1.4.1 / 2014-07-26\n==================\n\n  * deps: send@0.7.1\n    - deps: depd@0.4.3\n\n1.4.0 / 2014-07-21\n==================\n\n  * deps: parseurl@~1.2.0\n    - Cache URLs based on original value\n    - Remove no-longer-needed URL mis-parse work-around\n    - Simplify the \"fast-path\" `RegExp`\n  * deps: send@0.7.0\n    - Add `dotfiles` option\n    - deps: debug@1.0.4\n    - deps: depd@0.4.2\n\n1.3.2 / 2014-07-11\n==================\n\n  * deps: send@0.6.0\n    - Cap `maxAge` value to 1 year\n    - deps: debug@1.0.3\n\n1.3.1 / 2014-07-09\n==================\n\n  * deps: parseurl@~1.1.3\n    - faster parsing of href-only URLs\n\n1.3.0 / 2014-06-28\n==================\n\n  * Add `setHeaders` option\n  * Include HTML link in redirect response\n  * deps: send@0.5.0\n    - Accept string for `maxAge` (converted by `ms`)\n\n1.2.3 / 2014-06-11\n==================\n\n  * deps: send@0.4.3\n    - Do not throw un-catchable error on file open race condition\n    - Use `escape-html` for HTML escaping\n    - deps: debug@1.0.2\n    - deps: finished@1.2.2\n    - deps: fresh@0.2.2\n\n1.2.2 / 2014-06-09\n==================\n\n  * deps: send@0.4.2\n    - fix \"event emitter leak\" warnings\n    - deps: debug@1.0.1\n    - deps: finished@1.2.1\n\n1.2.1 / 2014-06-02\n==================\n\n  * use `escape-html` for escaping\n  * deps: send@0.4.1\n    - Send `max-age` in `Cache-Control` in correct format\n\n1.2.0 / 2014-05-29\n==================\n\n  * deps: send@0.4.0\n    - Calculate ETag with md5 for reduced collisions\n    - Fix wrong behavior when index file matches directory\n    - Ignore stream errors after request ends\n    - Skip directories in index file search\n    - deps: debug@0.8.1\n\n1.1.0 / 2014-04-24\n==================\n\n  * Accept options directly to `send` module\n  * deps: send@0.3.0\n\n1.0.4 / 2014-04-07\n==================\n\n  * Resolve relative paths at middleware setup\n  * Use parseurl to parse the URL from request\n\n1.0.3 / 2014-03-20\n==================\n\n  * Do not rely on connect-like environments\n\n1.0.2 / 2014-03-06\n==================\n\n  * deps: send@0.2.0\n\n1.0.1 / 2014-03-05\n==================\n\n  * Add mime export for back-compat\n\n1.0.0 / 2014-03-05\n==================\n\n  * Genesis from `connect`\n/index.js\u0011/*!\n * serve-static\n * Copyright(c) 2010 Sencha Inc.\n * Copyright(c) 2011 TJ Holowaychuk\n * Copyright(c) 2014-2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar encodeUrl = require('encodeurl')\nvar escapeHtml = require('escape-html')\nvar parseUrl = require('parseurl')\nvar resolve = require('path').resolve\nvar send = require('send')\nvar url = require('url')\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = serveStatic\nmodule.exports.mime = send.mime\n\n/**\n * @param {string} root\n * @param {object} [options]\n * @return {function}\n * @public\n */\n\nfunction serveStatic (root, options) {\n  if (!root) {\n    throw new TypeError('root path required')\n  }\n\n  if (typeof root !== 'string') {\n    throw new TypeError('root path must be a string')\n  }\n\n  // copy options object\n  var opts = Object.create(options || null)\n\n  // fall-though\n  var fallthrough = opts.fallthrough !== false\n\n  // default redirect\n  var redirect = opts.redirect !== false\n\n  // headers listener\n  var setHeaders = opts.setHeaders\n\n  if (setHeaders && typeof setHeaders !== 'function') {\n    throw new TypeError('option setHeaders must be function')\n  }\n\n  // setup options for send\n  opts.maxage = opts.maxage || opts.maxAge || 0\n  opts.root = resolve(root)\n\n  // construct directory listener\n  var onDirectory = redirect\n    ? createRedirectDirectoryListener()\n    : createNotFoundDirectoryListener()\n\n  return function serveStatic (req, res, next) {\n    if (req.method !== 'GET' && req.method !== 'HEAD') {\n      if (fallthrough) {\n        return next()\n      }\n\n      // method not allowed\n      res.statusCode = 405\n      res.setHeader('Allow', 'GET, HEAD')\n      res.setHeader('Content-Length', '0')\n      res.end()\n      return\n    }\n\n    var forwardError = !fallthrough\n    var originalUrl = parseUrl.original(req)\n    var path = parseUrl(req).pathname\n\n    // make sure redirect occurs at mount\n    if (path === '/' && originalUrl.pathname.substr(-1) !== '/') {\n      path = ''\n    }\n\n    // create send stream\n    var stream = send(req, path, opts)\n\n    // add directory handler\n    stream.on('directory', onDirectory)\n\n    // add headers listener\n    if (setHeaders) {\n      stream.on('headers', setHeaders)\n    }\n\n    // add file listener for fallthrough\n    if (fallthrough) {\n      stream.on('file', function onFile () {\n        // once file is determined, always forward error\n        forwardError = true\n      })\n    }\n\n    // forward errors\n    stream.on('error', function error (err) {\n      if (forwardError || !(err.statusCode < 500)) {\n        next(err)\n        return\n      }\n\n      next()\n    })\n\n    // pipe\n    stream.pipe(res)\n  }\n}\n\n/**\n * Collapse all leading slashes into a single slash\n * @private\n */\nfunction collapseLeadingSlashes (str) {\n  for (var i = 0; i < str.length; i++) {\n    if (str.charCodeAt(i) !== 0x2f /* / */) {\n      break\n    }\n  }\n\n  return i > 1\n    ? '/' + str.substr(i)\n    : str\n}\n\n/**\n * Create a minimal HTML document.\n *\n * @param {string} title\n * @param {string} body\n * @private\n */\n\nfunction createHtmlDocument (title, body) {\n  return '<!DOCTYPE html>\\n' +\n    '<html lang=\"en\">\\n' +\n    '<head>\\n' +\n    '<meta charset=\"utf-8\">\\n' +\n    '<title>' + title + '</title>\\n' +\n    '</head>\\n' +\n    '<body>\\n' +\n    '<pre>' + body + '</pre>\\n' +\n    '</body>\\n' +\n    '</html>\\n'\n}\n\n/**\n * Create a directory listener that just 404s.\n * @private\n */\n\nfunction createNotFoundDirectoryListener () {\n  return function notFound () {\n    this.error(404)\n  }\n}\n\n/**\n * Create a directory listener that performs a redirect.\n * @private\n */\n\nfunction createRedirectDirectoryListener () {\n  return function redirect (res) {\n    if (this.hasTrailingSlash()) {\n      this.error(404)\n      return\n    }\n\n    // get original URL\n    var originalUrl = parseUrl.original(this.req)\n\n    // append trailing slash\n    originalUrl.path = null\n    originalUrl.pathname = collapseLeadingSlashes(originalUrl.pathname + '/')\n\n    // reformat the URL\n    var loc = encodeUrl(url.format(originalUrl))\n    var doc = createHtmlDocument('Redirecting', 'Redirecting to <a href=\"' + escapeHtml(loc) + '\">' +\n      escapeHtml(loc) + '</a>')\n\n    // send redirect response\n    res.statusCode = 301\n    res.setHeader('Content-Type', 'text/html; charset=UTF-8')\n    res.setHeader('Content-Length', Buffer.byteLength(doc))\n    res.setHeader('Content-Security-Policy', \"default-src 'none'\")\n    res.setHeader('X-Content-Type-Options', 'nosniff')\n    res.setHeader('Location', loc)\n    res.end(doc)\n  }\n}\n/package.json\u0004u{\n  \"name\": \"serve-static\",\n  \"description\": \"Serve static files\",\n  \"version\": \"1.15.0\",\n  \"author\": \"Douglas Christopher Wilson <doug@somethingdoug.com>\",\n  \"license\": \"MIT\",\n  \"repository\": \"expressjs/serve-static\",\n  \"dependencies\": {\n    \"encodeurl\": \"~1.0.2\",\n    \"escape-html\": \"~1.0.3\",\n    \"parseurl\": \"~1.3.3\",\n    \"send\": \"0.18.0\"\n  },\n  \"devDependencies\": {\n    \"eslint\": \"7.32.0\",\n    \"eslint-config-standard\": \"14.1.1\",\n    \"eslint-plugin-import\": \"2.25.4\",\n    \"eslint-plugin-markdown\": \"2.2.1\",\n    \"eslint-plugin-node\": \"11.1.0\",\n    \"eslint-plugin-promise\": \"5.2.0\",\n    \"eslint-plugin-standard\": \"4.1.0\",\n    \"mocha\": \"9.2.2\",\n    \"nyc\": \"15.1.0\",\n    \"safe-buffer\": \"5.2.1\",\n    \"supertest\": \"6.2.2\"\n  },\n  \"files\": [\n    \"LICENSE\",\n    \"HISTORY.md\",\n    \"index.js\"\n  ],\n  \"engines\": {\n    \"node\": \">= 0.8.0\"\n  },\n  \"scripts\": {\n    \"lint\": \"eslint .\",\n    \"test\": \"mocha --reporter spec --bail --check-leaks test/\",\n    \"test-ci\": \"nyc --reporter=lcov --reporter=text npm test\",\n    \"test-cov\": \"nyc --reporter=html --reporter=text npm test\",\n    \"version\": \"node scripts/version-history.js && git add HISTORY.md\"\n  }\n}\n/LICENSE\u0004(The MIT License)\n\nCopyright (c) 2010 Sencha Inc.\nCopyright (c) 2011 LearnBoost\nCopyright (c) 2011 TJ Holowaychuk\nCopyright (c) 2014-2016 Douglas Christopher Wilson\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/c2hlYmFuZy1jb21tYW5kQDIuMC4w",
    "content": "/readme.md\u0001# shebang-command [![Build Status](https://travis-ci.org/kevva/shebang-command.svg?branch=master)](https://travis-ci.org/kevva/shebang-command)\n\n> Get the command from a shebang\n\n\n## Install\n\n```\n$ npm install shebang-command\n```\n\n\n## Usage\n\n```js\nconst shebangCommand = require('shebang-command');\n\nshebangCommand('#!/usr/bin/env node');\n//=> 'node'\n\nshebangCommand('#!/bin/bash');\n//=> 'bash'\n```\n\n\n## API\n\n### shebangCommand(string)\n\n#### string\n\nType: `string`\n\nString containing a shebang.\n/index.js\u0001'use strict';\nconst shebangRegex = require('shebang-regex');\n\nmodule.exports = (string = '') => {\n\tconst match = string.match(shebangRegex);\n\n\tif (!match) {\n\t\treturn null;\n\t}\n\n\tconst [path, argument] = match[0].replace(/#! ?/, '').split(' ');\n\tconst binary = path.split('/').pop();\n\n\tif (binary === 'env') {\n\t\treturn argument;\n\t}\n\n\treturn argument ? `${binary} ${argument}` : binary;\n};\n/license\u0004\\MIT License\n\nCopyright (c) Kevin Mårtensson <kevinmartensson@gmail.com> (github.com/kevva)\n\nPermission 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:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE 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.\n/package.json\u0002.{\n\t\"name\": \"shebang-command\",\n\t\"version\": \"2.0.0\",\n\t\"description\": \"Get the command from a shebang\",\n\t\"license\": \"MIT\",\n\t\"repository\": \"kevva/shebang-command\",\n\t\"author\": {\n\t\t\"name\": \"Kevin Mårtensson\",\n\t\t\"email\": \"kevinmartensson@gmail.com\",\n\t\t\"url\": \"github.com/kevva\"\n\t},\n\t\"engines\": {\n\t\t\"node\": \">=8\"\n\t},\n\t\"scripts\": {\n\t\t\"test\": \"xo && ava\"\n\t},\n\t\"files\": [\n\t\t\"index.js\"\n\t],\n\t\"keywords\": [\n\t\t\"cmd\",\n\t\t\"command\",\n\t\t\"parse\",\n\t\t\"shebang\"\n\t],\n\t\"dependencies\": {\n\t\t\"shebang-regex\": \"^3.0.0\"\n\t},\n\t\"devDependencies\": {\n\t\t\"ava\": \"^2.3.0\",\n\t\t\"xo\": \"^0.24.0\"\n\t}\n}\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/c2hlYmFuZy1yZWdleEAzLjAuMA==",
    "content": "/package.json\u0002F{\n\t\"name\": \"shebang-regex\",\n\t\"version\": \"3.0.0\",\n\t\"description\": \"Regular expression for matching a shebang line\",\n\t\"license\": \"MIT\",\n\t\"repository\": \"sindresorhus/shebang-regex\",\n\t\"author\": {\n\t\t\"name\": \"Sindre Sorhus\",\n\t\t\"email\": \"sindresorhus@gmail.com\",\n\t\t\"url\": \"sindresorhus.com\"\n\t},\n\t\"engines\": {\n\t\t\"node\": \">=8\"\n\t},\n\t\"scripts\": {\n\t\t\"test\": \"xo && ava && tsd\"\n\t},\n\t\"files\": [\n\t\t\"index.js\",\n\t\t\"index.d.ts\"\n\t],\n\t\"keywords\": [\n\t\t\"regex\",\n\t\t\"regexp\",\n\t\t\"shebang\",\n\t\t\"match\",\n\t\t\"test\",\n\t\t\"line\"\n\t],\n\t\"devDependencies\": {\n\t\t\"ava\": \"^1.4.1\",\n\t\t\"tsd\": \"^0.7.2\",\n\t\t\"xo\": \"^0.24.0\"\n\t}\n}\n/readme.md\u0002# shebang-regex [![Build Status](https://travis-ci.org/sindresorhus/shebang-regex.svg?branch=master)](https://travis-ci.org/sindresorhus/shebang-regex)\n\n> Regular expression for matching a [shebang](https://en.wikipedia.org/wiki/Shebang_(Unix)) line\n\n\n## Install\n\n```\n$ npm install shebang-regex\n```\n\n\n## Usage\n\n```js\nconst shebangRegex = require('shebang-regex');\n\nconst string = '#!/usr/bin/env node\\nconsole.log(\"unicorns\");';\n\nshebangRegex.test(string);\n//=> true\n\nshebangRegex.exec(string)[0];\n//=> '#!/usr/bin/env node'\n\nshebangRegex.exec(string)[1];\n//=> '/usr/bin/env node'\n```\n\n\n## License\n\nMIT © [Sindre Sorhus](https://sindresorhus.com)\n/index.d.ts\u0001/**\nRegular expression for matching a [shebang](https://en.wikipedia.org/wiki/Shebang_(Unix)) line.\n\n@example\n```\nimport shebangRegex = require('shebang-regex');\n\nconst string = '#!/usr/bin/env node\\nconsole.log(\"unicorns\");';\n\nshebangRegex.test(string);\n//=> true\n\nshebangRegex.exec(string)[0];\n//=> '#!/usr/bin/env node'\n\nshebangRegex.exec(string)[1];\n//=> '/usr/bin/env node'\n```\n*/\ndeclare const shebangRegex: RegExp;\n\nexport = shebangRegex;\n/index.js*'use strict';\nmodule.exports = /^#!(.*)/;\n/license\u0004UMIT License\n\nCopyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)\n\nPermission 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:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE 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.\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/c2lkZS1jaGFubmVsQDEuMC40",
    "content": "/index.js\r?'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\nvar callBound = require('call-bind/callBound');\nvar inspect = require('object-inspect');\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $WeakMap = GetIntrinsic('%WeakMap%', true);\nvar $Map = GetIntrinsic('%Map%', true);\n\nvar $weakMapGet = callBound('WeakMap.prototype.get', true);\nvar $weakMapSet = callBound('WeakMap.prototype.set', true);\nvar $weakMapHas = callBound('WeakMap.prototype.has', true);\nvar $mapGet = callBound('Map.prototype.get', true);\nvar $mapSet = callBound('Map.prototype.set', true);\nvar $mapHas = callBound('Map.prototype.has', true);\n\n/*\n * This function traverses the list returning the node corresponding to the\n * given key.\n *\n * That node is also moved to the head of the list, so that if it's accessed\n * again we don't need to traverse the whole list. By doing so, all the recently\n * used nodes can be accessed relatively quickly.\n */\nvar listGetNode = function (list, key) { // eslint-disable-line consistent-return\n\tfor (var prev = list, curr; (curr = prev.next) !== null; prev = curr) {\n\t\tif (curr.key === key) {\n\t\t\tprev.next = curr.next;\n\t\t\tcurr.next = list.next;\n\t\t\tlist.next = curr; // eslint-disable-line no-param-reassign\n\t\t\treturn curr;\n\t\t}\n\t}\n};\n\nvar listGet = function (objects, key) {\n\tvar node = listGetNode(objects, key);\n\treturn node && node.value;\n};\nvar listSet = function (objects, key, value) {\n\tvar node = listGetNode(objects, key);\n\tif (node) {\n\t\tnode.value = value;\n\t} else {\n\t\t// Prepend the new node to the beginning of the list\n\t\tobjects.next = { // eslint-disable-line no-param-reassign\n\t\t\tkey: key,\n\t\t\tnext: objects.next,\n\t\t\tvalue: value\n\t\t};\n\t}\n};\nvar listHas = function (objects, key) {\n\treturn !!listGetNode(objects, key);\n};\n\nmodule.exports = function getSideChannel() {\n\tvar $wm;\n\tvar $m;\n\tvar $o;\n\tvar channel = {\n\t\tassert: function (key) {\n\t\t\tif (!channel.has(key)) {\n\t\t\t\tthrow new $TypeError('Side channel does not contain ' + inspect(key));\n\t\t\t}\n\t\t},\n\t\tget: function (key) { // eslint-disable-line consistent-return\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif ($wm) {\n\t\t\t\t\treturn $weakMapGet($wm, key);\n\t\t\t\t}\n\t\t\t} else if ($Map) {\n\t\t\t\tif ($m) {\n\t\t\t\t\treturn $mapGet($m, key);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ($o) { // eslint-disable-line no-lonely-if\n\t\t\t\t\treturn listGet($o, key);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\thas: function (key) {\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif ($wm) {\n\t\t\t\t\treturn $weakMapHas($wm, key);\n\t\t\t\t}\n\t\t\t} else if ($Map) {\n\t\t\t\tif ($m) {\n\t\t\t\t\treturn $mapHas($m, key);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ($o) { // eslint-disable-line no-lonely-if\n\t\t\t\t\treturn listHas($o, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\tset: function (key, value) {\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif (!$wm) {\n\t\t\t\t\t$wm = new $WeakMap();\n\t\t\t\t}\n\t\t\t\t$weakMapSet($wm, key, value);\n\t\t\t} else if ($Map) {\n\t\t\t\tif (!$m) {\n\t\t\t\t\t$m = new $Map();\n\t\t\t\t}\n\t\t\t\t$mapSet($m, key, value);\n\t\t\t} else {\n\t\t\t\tif (!$o) {\n\t\t\t\t\t/*\n\t\t\t\t\t * Initialize the linked list as an empty node, so that we don't have\n\t\t\t\t\t * to special-case handling of the first node: we can always refer to\n\t\t\t\t\t * it as (previous node).next, instead of something like (list).head\n\t\t\t\t\t */\n\t\t\t\t\t$o = { key: {}, next: null };\n\t\t\t\t}\n\t\t\t\tlistSet($o, key, value);\n\t\t\t}\n\t\t}\n\t};\n\treturn channel;\n};\n/CHANGELOG.md\u0015# Changelog\n\nAll notable changes to this project will be documented in this file.\n\nThe format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)\nand this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).\n\n## [v1.0.4](https://github.com/ljharb/side-channel/compare/v1.0.3...v1.0.4) - 2020-12-29\n\n### Commits\n\n- [Tests] migrate tests to Github Actions [`10909cb`](https://github.com/ljharb/side-channel/commit/10909cbf8ce9c0bf96f604cf13d7ffd5a22c2d40)\n- [Refactor] Use a linked list rather than an array, and move accessed nodes to the beginning [`195613f`](https://github.com/ljharb/side-channel/commit/195613f28b5c1e6072ef0b61b5beebaf2b6a304e)\n- [meta] do not publish github action workflow files [`290ec29`](https://github.com/ljharb/side-channel/commit/290ec29cd21a60585145b4a7237ec55228c52c27)\n- [Tests] run `nyc` on all tests; use `tape` runner [`ea6d030`](https://github.com/ljharb/side-channel/commit/ea6d030ff3fe6be2eca39e859d644c51ecd88869)\n- [actions] add \"Allow Edits\" workflow [`d464d8f`](https://github.com/ljharb/side-channel/commit/d464d8fe52b5eddf1504a0ed97f0941a90f32c15)\n- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `auto-changelog` [`02daca8`](https://github.com/ljharb/side-channel/commit/02daca87c6809821c97be468d1afa2f5ef447383)\n- [Refactor] use `call-bind` and `get-intrinsic` instead of `es-abstract` [`e09d481`](https://github.com/ljharb/side-channel/commit/e09d481528452ebafa5cdeae1af665c35aa2deee)\n- [Deps] update `object.assign` [`ee83aa8`](https://github.com/ljharb/side-channel/commit/ee83aa81df313b5e46319a63adb05cf0c179079a)\n- [actions] update rebase action to use checkout v2 [`7726b0b`](https://github.com/ljharb/side-channel/commit/7726b0b058b632fccea709f58960871defaaa9d7)\n\n## [v1.0.3](https://github.com/ljharb/side-channel/compare/v1.0.2...v1.0.3) - 2020-08-23\n\n### Commits\n\n- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `auto-changelog`, `tape` [`1f10561`](https://github.com/ljharb/side-channel/commit/1f105611ef3acf32dec8032ae5c0baa5e56bb868)\n- [Deps] update `es-abstract`, `object-inspect` [`bc20159`](https://github.com/ljharb/side-channel/commit/bc201597949a505e37cef9eaf24c7010831e6f03)\n- [Dev Deps] update `@ljharb/eslint-config`, `tape` [`b9b2b22`](https://github.com/ljharb/side-channel/commit/b9b2b225f9e0ea72a6ec2b89348f0bd690bc9ed1)\n- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `tape` [`7055ab4`](https://github.com/ljharb/side-channel/commit/7055ab4de0860606efd2003674a74f1fe6ebc07e)\n- [Dev Deps] update `auto-changelog`; add `aud` [`d278c37`](https://github.com/ljharb/side-channel/commit/d278c37d08227be4f84aa769fcd919e73feeba40)\n- [actions] switch Automatic Rebase workflow to `pull_request_target` event [`3bcf982`](https://github.com/ljharb/side-channel/commit/3bcf982faa122745b39c33ce83d32fdf003741c6)\n- [Tests] only audit prod deps [`18d01c4`](https://github.com/ljharb/side-channel/commit/18d01c4015b82a3d75044c4d5ba7917b2eac01ec)\n- [Deps] update `es-abstract` [`6ab096d`](https://github.com/ljharb/side-channel/commit/6ab096d9de2b482cf5e0717e34e212f5b2b9bc9a)\n- [Dev Deps] update `tape` [`9dc174c`](https://github.com/ljharb/side-channel/commit/9dc174cc651dfd300b4b72da936a0a7eda5f9452)\n- [Deps] update `es-abstract` [`431d0f0`](https://github.com/ljharb/side-channel/commit/431d0f0ff11fbd2ae6f3115582a356d3a1cfce82)\n- [Deps] update `es-abstract` [`49869fd`](https://github.com/ljharb/side-channel/commit/49869fd323bf4453f0ba515c0fb265cf5ab7b932)\n- [meta] Add package.json to package's exports [`77d9cdc`](https://github.com/ljharb/side-channel/commit/77d9cdceb2a9e47700074f2ae0c0a202e7dac0d4)\n\n## [v1.0.2](https://github.com/ljharb/side-channel/compare/v1.0.1...v1.0.2) - 2019-12-20\n\n### Commits\n\n- [Dev Deps] update `@ljharb/eslint-config`, `tape` [`4a526df`](https://github.com/ljharb/side-channel/commit/4a526df44e4701566ed001ec78546193f818b082)\n- [Deps] update `es-abstract` [`d4f6e62`](https://github.com/ljharb/side-channel/commit/d4f6e629b6fb93a07415db7f30d3c90fd7f264fe)\n\n## [v1.0.1](https://github.com/ljharb/side-channel/compare/v1.0.0...v1.0.1) - 2019-12-01\n\n### Commits\n\n- [Fix] add missing \"exports\" [`d212907`](https://github.com/ljharb/side-channel/commit/d2129073abf0701a5343bf28aa2145617604dc2e)\n\n## v1.0.0 - 2019-12-01\n\n### Commits\n\n- Initial implementation [`dbebd3a`](https://github.com/ljharb/side-channel/commit/dbebd3a4b5ed64242f9a6810efe7c4214cd8cde4)\n- Initial tests [`73bdefe`](https://github.com/ljharb/side-channel/commit/73bdefe568c9076cf8c0b8719bc2141aec0e19b8)\n- Initial commit [`43c03e1`](https://github.com/ljharb/side-channel/commit/43c03e1c2849ec50a87b7a5cd76238a62b0b8770)\n- npm init [`5c090a7`](https://github.com/ljharb/side-channel/commit/5c090a765d66a5527d9889b89aeff78dee91348c)\n- [meta] add `auto-changelog` [`a5c4e56`](https://github.com/ljharb/side-channel/commit/a5c4e5675ec02d5eb4d84b4243aeea2a1d38fbec)\n- [actions] add automatic rebasing / merge commit blocking [`bab1683`](https://github.com/ljharb/side-channel/commit/bab1683d8f9754b086e94397699fdc645e0d7077)\n- [meta] add `funding` field; create FUNDING.yml [`63d7aea`](https://github.com/ljharb/side-channel/commit/63d7aeaf34f5650650ae97ca4b9fae685bd0937c)\n- [Tests] add `npm run lint` [`46a5a81`](https://github.com/ljharb/side-channel/commit/46a5a81705cd2664f83df232c01dbbf2ee952885)\n- Only apps should have lockfiles [`8b16b03`](https://github.com/ljharb/side-channel/commit/8b16b0305f00895d90c4e2e5773c854cfea0e448)\n- [meta] add `safe-publish-latest` [`2f098ef`](https://github.com/ljharb/side-channel/commit/2f098ef092a39399cfe548b19a1fc03c2fd2f490)\n/.eslintrcĬ{\n\t\"root\": true,\n\n\t\"extends\": \"@ljharb\",\n\n\t\"rules\": {\n\t\t\"max-lines-per-function\": 0,\n\t\t\"max-params\": 0,\n\t\t\"new-cap\": [2, { \"capIsNewExceptions\": [\"GetIntrinsic\"] }],\n\t},\n}\n/.eslintignore\ncoverage/\n/package.json\u0006{\n\t\"name\": \"side-channel\",\n\t\"version\": \"1.0.4\",\n\t\"description\": \"Store information about any JS value in a side channel. Uses WeakMap if available.\",\n\t\"main\": \"index.js\",\n\t\"exports\": {\n\t\t\"./package.json\": \"./package.json\",\n\t\t\".\": [\n\t\t\t{\n\t\t\t\t\"default\": \"./index.js\"\n\t\t\t},\n\t\t\t\"./index.js\"\n\t\t]\n\t},\n\t\"scripts\": {\n\t\t\"prepublish\": \"safe-publish-latest\",\n\t\t\"lint\": \"eslint .\",\n\t\t\"pretest\": \"npm run lint\",\n\t\t\"tests-only\": \"nyc tape 'test/**/*.js'\",\n\t\t\"test\": \"npm run tests-only\",\n\t\t\"posttest\": \"npx aud --production\",\n\t\t\"version\": \"auto-changelog && git add CHANGELOG.md\",\n\t\t\"postversion\": \"auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \\\"v$(node -e \\\"console.log(require('./package.json').version)\\\")\\\"\"\n\t},\n\t\"repository\": {\n\t\t\"type\": \"git\",\n\t\t\"url\": \"git+https://github.com/ljharb/side-channel.git\"\n\t},\n\t\"keywords\": [\n\t\t\"weakmap\",\n\t\t\"map\",\n\t\t\"side\",\n\t\t\"channel\",\n\t\t\"metadata\"\n\t],\n\t\"author\": \"Jordan Harband <ljharb@gmail.com>\",\n\t\"funding\": {\n\t\t\"url\": \"https://github.com/sponsors/ljharb\"\n\t},\n\t\"license\": \"MIT\",\n\t\"bugs\": {\n\t\t\"url\": \"https://github.com/ljharb/side-channel/issues\"\n\t},\n\t\"homepage\": \"https://github.com/ljharb/side-channel#readme\",\n\t\"devDependencies\": {\n\t\t\"@ljharb/eslint-config\": \"^17.3.0\",\n\t\t\"aud\": \"^1.1.3\",\n\t\t\"auto-changelog\": \"^2.2.1\",\n\t\t\"eslint\": \"^7.16.0\",\n\t\t\"nyc\": \"^10.3.2\",\n\t\t\"safe-publish-latest\": \"^1.1.4\",\n\t\t\"tape\": \"^5.0.1\"\n\t},\n\t\"dependencies\": {\n\t\t\"call-bind\": \"^1.0.0\",\n\t\t\"get-intrinsic\": \"^1.0.2\",\n\t\t\"object-inspect\": \"^1.9.0\"\n\t},\n\t\"auto-changelog\": {\n\t\t\"output\": \"CHANGELOG.md\",\n\t\t\"template\": \"keepachangelog\",\n\t\t\"unreleased\": false,\n\t\t\"commitLimit\": false,\n\t\t\"backfillLimit\": false,\n\t\t\"hideCredit\": true\n\t}\n}\n/LICENSE\u0004/MIT License\n\nCopyright (c) 2019 Jordan Harband\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n/.github/FUNDING.yml\u0002G# These are supported funding model platforms\n\ngithub: [ljharb]\npatreon: # Replace with a single Patreon username\nopen_collective: # Replace with a single Open Collective username\nko_fi: # Replace with a single Ko-fi username\ntidelift: npm/side-channel\ncommunity_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry\nliberapay: # Replace with a single Liberapay username\nissuehunt: # Replace with a single IssueHunt username\notechie: # Replace with a single Otechie username\ncustom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']\n/.nycrc{\n\t\"all\": true,\n\t\"check-coverage\": false,\n\t\"reporter\": [\"text-summary\", \"text\", \"html\", \"json\"],\n\t\"lines\": 86,\n\t\"statements\": 85.93,\n\t\"functions\": 82.43,\n\t\"branches\": 76.06,\n\t\"exclude\": [\n\t\t\"coverage\",\n\t\t\"test\"\n\t]\n}\n/test/index.js\u0006'use strict';\n\nvar test = require('tape');\n\nvar getSideChannel = require('../');\n\ntest('export', function (t) {\n\tt.equal(typeof getSideChannel, 'function', 'is a function');\n\tt.equal(getSideChannel.length, 0, 'takes no arguments');\n\n\tvar channel = getSideChannel();\n\tt.ok(channel, 'is truthy');\n\tt.equal(typeof channel, 'object', 'is an object');\n\n\tt.end();\n});\n\ntest('assert', function (t) {\n\tvar channel = getSideChannel();\n\tt['throws'](\n\t\tfunction () { channel.assert({}); },\n\t\tTypeError,\n\t\t'nonexistent value throws'\n\t);\n\n\tvar o = {};\n\tchannel.set(o, 'data');\n\tt.doesNotThrow(function () { channel.assert(o); }, 'existent value noops');\n\n\tt.end();\n});\n\ntest('has', function (t) {\n\tvar channel = getSideChannel();\n\tvar o = [];\n\n\tt.equal(channel.has(o), false, 'nonexistent value yields false');\n\n\tchannel.set(o, 'foo');\n\tt.equal(channel.has(o), true, 'existent value yields true');\n\n\tt.end();\n});\n\ntest('get', function (t) {\n\tvar channel = getSideChannel();\n\tvar o = {};\n\tt.equal(channel.get(o), undefined, 'nonexistent value yields undefined');\n\n\tvar data = {};\n\tchannel.set(o, data);\n\tt.equal(channel.get(o), data, '\"get\" yields data set by \"set\"');\n\n\tt.end();\n});\n\ntest('set', function (t) {\n\tvar channel = getSideChannel();\n\tvar o = function () {};\n\tt.equal(channel.get(o), undefined, 'value not set');\n\n\tchannel.set(o, 42);\n\tt.equal(channel.get(o), 42, 'value was set');\n\n\tchannel.set(o, Infinity);\n\tt.equal(channel.get(o), Infinity, 'value was set again');\n\n\tvar o2 = {};\n\tchannel.set(o2, 17);\n\tt.equal(channel.get(o), Infinity, 'o is not modified');\n\tt.equal(channel.get(o2), 17, 'o2 is set');\n\n\tchannel.set(o, 14);\n\tt.equal(channel.get(o), 14, 'o is modified');\n\tt.equal(channel.get(o2), 17, 'o2 is not modified');\n\n\tt.end();\n});\n/README.mdb# side-channel\nStore information about any JS value in a side channel. Uses WeakMap if available.\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/c2lnbmFsLWV4aXRAMy4wLjc=",
    "content": "/README.md\u0005?# signal-exit\n\n[![Build Status](https://travis-ci.org/tapjs/signal-exit.png)](https://travis-ci.org/tapjs/signal-exit)\n[![Coverage](https://coveralls.io/repos/tapjs/signal-exit/badge.svg?branch=master)](https://coveralls.io/r/tapjs/signal-exit?branch=master)\n[![NPM version](https://img.shields.io/npm/v/signal-exit.svg)](https://www.npmjs.com/package/signal-exit)\n[![Standard Version](https://img.shields.io/badge/release-standard%20version-brightgreen.svg)](https://github.com/conventional-changelog/standard-version)\n\nWhen you want to fire an event no matter how a process exits:\n\n* reaching the end of execution.\n* explicitly having `process.exit(code)` called.\n* having `process.kill(pid, sig)` called.\n* receiving a fatal signal from outside the process\n\nUse `signal-exit`.\n\n```js\nvar onExit = require('signal-exit')\n\nonExit(function (code, signal) {\n  console.log('process exited!')\n})\n```\n\n## API\n\n`var remove = onExit(function (code, signal) {}, options)`\n\nThe return value of the function is a function that will remove the\nhandler.\n\nNote that the function *only* fires for signals if the signal would\ncause the process to exit.  That is, there are no other listeners, and\nit is a fatal signal.\n\n## Options\n\n* `alwaysLast`: Run this handler after any other signal or exit\n  handlers.  This causes `process.emit` to be monkeypatched.\n/index.js\u0016L// Note: since nyc uses this module to output coverage, any lines\n// that are in the direct sync flow of nyc's outputCoverage are\n// ignored, since we can never get coverage for them.\n// grab a reference to node's real process object right away\nvar process = global.process\n\nconst processOk = function (process) {\n  return process &&\n    typeof process === 'object' &&\n    typeof process.removeListener === 'function' &&\n    typeof process.emit === 'function' &&\n    typeof process.reallyExit === 'function' &&\n    typeof process.listeners === 'function' &&\n    typeof process.kill === 'function' &&\n    typeof process.pid === 'number' &&\n    typeof process.on === 'function'\n}\n\n// some kind of non-node environment, just no-op\n/* istanbul ignore if */\nif (!processOk(process)) {\n  module.exports = function () {\n    return function () {}\n  }\n} else {\n  var assert = require('assert')\n  var signals = require('./signals.js')\n  var isWin = /^win/i.test(process.platform)\n\n  var EE = require('events')\n  /* istanbul ignore if */\n  if (typeof EE !== 'function') {\n    EE = EE.EventEmitter\n  }\n\n  var emitter\n  if (process.__signal_exit_emitter__) {\n    emitter = process.__signal_exit_emitter__\n  } else {\n    emitter = process.__signal_exit_emitter__ = new EE()\n    emitter.count = 0\n    emitter.emitted = {}\n  }\n\n  // Because this emitter is a global, we have to check to see if a\n  // previous version of this library failed to enable infinite listeners.\n  // I know what you're about to say.  But literally everything about\n  // signal-exit is a compromise with evil.  Get used to it.\n  if (!emitter.infinite) {\n    emitter.setMaxListeners(Infinity)\n    emitter.infinite = true\n  }\n\n  module.exports = function (cb, opts) {\n    /* istanbul ignore if */\n    if (!processOk(global.process)) {\n      return function () {}\n    }\n    assert.equal(typeof cb, 'function', 'a callback must be provided for exit handler')\n\n    if (loaded === false) {\n      load()\n    }\n\n    var ev = 'exit'\n    if (opts && opts.alwaysLast) {\n      ev = 'afterexit'\n    }\n\n    var remove = function () {\n      emitter.removeListener(ev, cb)\n      if (emitter.listeners('exit').length === 0 &&\n          emitter.listeners('afterexit').length === 0) {\n        unload()\n      }\n    }\n    emitter.on(ev, cb)\n\n    return remove\n  }\n\n  var unload = function unload () {\n    if (!loaded || !processOk(global.process)) {\n      return\n    }\n    loaded = false\n\n    signals.forEach(function (sig) {\n      try {\n        process.removeListener(sig, sigListeners[sig])\n      } catch (er) {}\n    })\n    process.emit = originalProcessEmit\n    process.reallyExit = originalProcessReallyExit\n    emitter.count -= 1\n  }\n  module.exports.unload = unload\n\n  var emit = function emit (event, code, signal) {\n    /* istanbul ignore if */\n    if (emitter.emitted[event]) {\n      return\n    }\n    emitter.emitted[event] = true\n    emitter.emit(event, code, signal)\n  }\n\n  // { <signal>: <listener fn>, ... }\n  var sigListeners = {}\n  signals.forEach(function (sig) {\n    sigListeners[sig] = function listener () {\n      /* istanbul ignore if */\n      if (!processOk(global.process)) {\n        return\n      }\n      // If there are no other listeners, an exit is coming!\n      // Simplest way: remove us and then re-send the signal.\n      // We know that this will kill the process, so we can\n      // safely emit now.\n      var listeners = process.listeners(sig)\n      if (listeners.length === emitter.count) {\n        unload()\n        emit('exit', null, sig)\n        /* istanbul ignore next */\n        emit('afterexit', null, sig)\n        /* istanbul ignore next */\n        if (isWin && sig === 'SIGHUP') {\n          // \"SIGHUP\" throws an `ENOSYS` error on Windows,\n          // so use a supported signal instead\n          sig = 'SIGINT'\n        }\n        /* istanbul ignore next */\n        process.kill(process.pid, sig)\n      }\n    }\n  })\n\n  module.exports.signals = function () {\n    return signals\n  }\n\n  var loaded = false\n\n  var load = function load () {\n    if (loaded || !processOk(global.process)) {\n      return\n    }\n    loaded = true\n\n    // This is the number of onSignalExit's that are in play.\n    // It's important so that we can count the correct number of\n    // listeners on signals, and don't wait for the other one to\n    // handle it instead of us.\n    emitter.count += 1\n\n    signals = signals.filter(function (sig) {\n      try {\n        process.on(sig, sigListeners[sig])\n        return true\n      } catch (er) {\n        return false\n      }\n    })\n\n    process.emit = processEmit\n    process.reallyExit = processReallyExit\n  }\n  module.exports.load = load\n\n  var originalProcessReallyExit = process.reallyExit\n  var processReallyExit = function processReallyExit (code) {\n    /* istanbul ignore if */\n    if (!processOk(global.process)) {\n      return\n    }\n    process.exitCode = code || /* istanbul ignore next */ 0\n    emit('exit', process.exitCode, null)\n    /* istanbul ignore next */\n    emit('afterexit', process.exitCode, null)\n    /* istanbul ignore next */\n    originalProcessReallyExit.call(process, process.exitCode)\n  }\n\n  var originalProcessEmit = process.emit\n  var processEmit = function processEmit (ev, arg) {\n    if (ev === 'exit' && processOk(global.process)) {\n      /* istanbul ignore else */\n      if (arg !== undefined) {\n        process.exitCode = arg\n      }\n      var ret = originalProcessEmit.apply(this, arguments)\n      /* istanbul ignore next */\n      emit('exit', process.exitCode, null)\n      /* istanbul ignore next */\n      emit('afterexit', process.exitCode, null)\n      /* istanbul ignore next */\n      return ret\n    } else {\n      return originalProcessEmit.apply(this, arguments)\n    }\n  }\n}\n/LICENSE.txt\u0002The ISC License\n\nCopyright (c) 2015, Contributors\n\nPermission to use, copy, modify, and/or distribute this software\nfor any purpose with or without fee is hereby granted, provided\nthat the above copyright notice and this permission notice\nappear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\nWITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES\nOF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE\nLIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES\nOR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,\nWHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,\nARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n/signals.js\u0005\u000f// This is not the set of all possible signals.\n//\n// It IS, however, the set of all signals that trigger\n// an exit on either Linux or BSD systems.  Linux is a\n// superset of the signal names supported on BSD, and\n// the unknown signals just fail to register, so we can\n// catch that easily enough.\n//\n// Don't bother with SIGKILL.  It's uncatchable, which\n// means that we can't fire any callbacks anyway.\n//\n// If a user does happen to register a handler on a non-\n// fatal signal like SIGWINCH or something, and then\n// exit, it'll end up firing `process.emit('exit')`, so\n// the handler will be fired anyway.\n//\n// SIGBUS, SIGFPE, SIGSEGV and SIGILL, when not raised\n// artificially, inherently leave the process in a\n// state from which it is not safe to try and enter JS\n// listeners.\nmodule.exports = [\n  'SIGABRT',\n  'SIGALRM',\n  'SIGHUP',\n  'SIGINT',\n  'SIGTERM'\n]\n\nif (process.platform !== 'win32') {\n  module.exports.push(\n    'SIGVTALRM',\n    'SIGXCPU',\n    'SIGXFSZ',\n    'SIGUSR2',\n    'SIGTRAP',\n    'SIGSYS',\n    'SIGQUIT',\n    'SIGIOT'\n    // should detect profiler and enable/disable accordingly.\n    // see #21\n    // 'SIGPROF'\n  )\n}\n\nif (process.platform === 'linux') {\n  module.exports.push(\n    'SIGIO',\n    'SIGPOLL',\n    'SIGPWR',\n    'SIGSTKFLT',\n    'SIGUNUSED'\n  )\n}\n/package.json\u0003`{\n  \"name\": \"signal-exit\",\n  \"version\": \"3.0.7\",\n  \"description\": \"when you want to fire an event no matter how a process exits.\",\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"test\": \"tap\",\n    \"snap\": \"tap\",\n    \"preversion\": \"npm test\",\n    \"postversion\": \"npm publish\",\n    \"prepublishOnly\": \"git push origin --follow-tags\"\n  },\n  \"files\": [\n    \"index.js\",\n    \"signals.js\"\n  ],\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/tapjs/signal-exit.git\"\n  },\n  \"keywords\": [\n    \"signal\",\n    \"exit\"\n  ],\n  \"author\": \"Ben Coe <ben@npmjs.com>\",\n  \"license\": \"ISC\",\n  \"bugs\": {\n    \"url\": \"https://github.com/tapjs/signal-exit/issues\"\n  },\n  \"homepage\": \"https://github.com/tapjs/signal-exit\",\n  \"devDependencies\": {\n    \"chai\": \"^3.5.0\",\n    \"coveralls\": \"^3.1.1\",\n    \"nyc\": \"^15.1.0\",\n    \"standard-version\": \"^9.3.1\",\n    \"tap\": \"^15.1.1\"\n  }\n}\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/c2xhc2hANC4wLjA=",
    "content": "/package.json\u0002{\n\t\"name\": \"slash\",\n\t\"version\": \"4.0.0\",\n\t\"description\": \"Convert Windows backslash paths to slash paths\",\n\t\"license\": \"MIT\",\n\t\"repository\": \"sindresorhus/slash\",\n\t\"funding\": \"https://github.com/sponsors/sindresorhus\",\n\t\"author\": {\n\t\t\"name\": \"Sindre Sorhus\",\n\t\t\"email\": \"sindresorhus@gmail.com\",\n\t\t\"url\": \"https://sindresorhus.com\"\n\t},\n\t\"type\": \"module\",\n\t\"exports\": \"./index.js\",\n\t\"engines\": {\n\t\t\"node\": \">=12\"\n\t},\n\t\"scripts\": {\n\t\t\"test\": \"xo && ava && tsd\"\n\t},\n\t\"files\": [\n\t\t\"index.js\",\n\t\t\"index.d.ts\"\n\t],\n\t\"keywords\": [\n\t\t\"path\",\n\t\t\"seperator\",\n\t\t\"slash\",\n\t\t\"backslash\",\n\t\t\"windows\",\n\t\t\"convert\"\n\t],\n\t\"devDependencies\": {\n\t\t\"ava\": \"^3.15.0\",\n\t\t\"tsd\": \"^0.14.0\",\n\t\t\"xo\": \"^0.38.2\"\n\t}\n}\n/index.js\u0001\u001dexport default function slash(path) {\n\tconst isExtendedLengthPath = /^\\\\\\\\\\?\\\\/.test(path);\n\tconst hasNonAscii = /[^\\u0000-\\u0080]+/.test(path); // eslint-disable-line no-control-regex\n\n\tif (isExtendedLengthPath || hasNonAscii) {\n\t\treturn path;\n\t}\n\n\treturn path.replace(/\\\\/g, '/');\n}\n/license\u0004]MIT License\n\nCopyright (c) Sindre Sorhus <sindresorhus@gmail.com> (https://sindresorhus.com)\n\nPermission 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:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE 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.\n/readme.md\u0004x# slash\n\n> Convert Windows backslash paths to slash paths: `foo\\\\bar` ➔ `foo/bar`\n\n[Forward-slash paths can be used in Windows](http://superuser.com/a/176395/6877) as long as they're not extended-length paths and don't contain any non-ascii characters.\n\nThis was created since the `path` methods in Node.js outputs `\\\\` paths on Windows.\n\n## Install\n\n```\n$ npm install slash\n```\n\n## Usage\n\n```js\nimport path from 'path';\nimport slash from 'slash';\n\nconst string = path.join('foo', 'bar');\n// Unix    => foo/bar\n// Windows => foo\\\\bar\n\nslash(string);\n// Unix    => foo/bar\n// Windows => foo/bar\n```\n\n## API\n\n### slash(path)\n\nType: `string`\n\nAccepts a Windows backslash path and returns a path with forward slashes.\n\n---\n\n<div align=\"center\">\n\t<b>\n\t\t<a href=\"https://tidelift.com/subscription/pkg/npm-slash?utm_source=npm-slash&utm_medium=referral&utm_campaign=readme\">Get professional support for this package with a Tidelift subscription</a>\n\t</b>\n\t<br>\n\t<sub>\n\t\tTidelift helps make open source sustainable for maintainers while giving companies<br>assurances about security, maintenance, and licensing for their dependencies.\n\t</sub>\n</div>\n/index.d.ts\u0002X/**\nConvert Windows backslash paths to slash paths: `foo\\\\bar` ➔ `foo/bar`.\n\n[Forward-slash paths can be used in Windows](http://superuser.com/a/176395/6877) as long as they're not extended-length paths and don't contain any non-ascii characters.\n\n@param path - A Windows backslash path.\n@returns A path with forward slashes.\n\n@example\n```\nimport path from 'path';\nimport slash from 'slash';\n\nconst string = path.join('foo', 'bar');\n// Unix    => foo/bar\n// Windows => foo\\\\bar\n\nslash(string);\n// Unix    => foo/bar\n// Windows => foo/bar\n```\n*/\nexport default function slash(path: string): string;\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/c3BsaXQyQDQuMS4w",
    "content": "/package.json\u0004Y{\n  \"name\": \"split2\",\n  \"version\": \"4.1.0\",\n  \"description\": \"split a Text Stream into a Line Stream, using Stream 3\",\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"lint\": \"standard --verbose\",\n    \"unit\": \"nyc --lines 100 --branches 100 --functions 100 --check-coverage --reporter=text tape test.js\",\n    \"coverage\": \"nyc --reporter=html --reporter=cobertura --reporter=text tape test/test.js\",\n    \"test:report\": \"npm run lint && npm run unit:report\",\n    \"test\": \"npm run lint && npm run unit\",\n    \"legacy\": \"tape test.js\"\n  },\n  \"pre-commit\": [\n    \"test\"\n  ],\n  \"website\": \"https://github.com/mcollina/split2\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/mcollina/split2.git\"\n  },\n  \"bugs\": {\n    \"url\": \"http://github.com/mcollina/split2/issues\"\n  },\n  \"engines\": {\n    \"node\": \">= 10.x\"\n  },\n  \"author\": \"Matteo Collina <hello@matteocollina.com>\",\n  \"license\": \"ISC\",\n  \"devDependencies\": {\n    \"binary-split\": \"^1.0.3\",\n    \"callback-stream\": \"^1.1.0\",\n    \"fastbench\": \"^1.0.0\",\n    \"nyc\": \"^15.0.1\",\n    \"pre-commit\": \"^1.1.2\",\n    \"standard\": \"^16.0.1\",\n    \"tape\": \"^5.0.0\"\n  }\n}\n/test.js\u001d'use strict'\n\nconst test = require('tape')\nconst split = require('./')\nconst callback = require('callback-stream')\nconst strcb = callback.bind(null, { decodeStrings: false })\nconst objcb = callback.bind(null, { objectMode: true })\n\ntest('split two lines on end', function (t) {\n  t.plan(2)\n\n  const input = split()\n\n  input.pipe(strcb(function (err, list) {\n    t.error(err)\n    t.deepEqual(list, ['hello', 'world'])\n  }))\n\n  input.end('hello\\nworld')\n})\n\ntest('split two lines on two writes', function (t) {\n  t.plan(2)\n\n  const input = split()\n\n  input.pipe(strcb(function (err, list) {\n    t.error(err)\n    t.deepEqual(list, ['hello', 'world'])\n  }))\n\n  input.write('hello')\n  input.write('\\nworld')\n  input.end()\n})\n\ntest('split four lines on three writes', function (t) {\n  t.plan(2)\n\n  const input = split()\n\n  input.pipe(strcb(function (err, list) {\n    t.error(err)\n    t.deepEqual(list, ['hello', 'world', 'bye', 'world'])\n  }))\n\n  input.write('hello\\nwor')\n  input.write('ld\\nbye\\nwo')\n  input.write('rld')\n  input.end()\n})\n\ntest('accumulate multiple writes', function (t) {\n  t.plan(2)\n\n  const input = split()\n\n  input.pipe(strcb(function (err, list) {\n    t.error(err)\n    t.deepEqual(list, ['helloworld'])\n  }))\n\n  input.write('hello')\n  input.write('world')\n  input.end()\n})\n\ntest('split using a custom string matcher', function (t) {\n  t.plan(2)\n\n  const input = split('~')\n\n  input.pipe(strcb(function (err, list) {\n    t.error(err)\n    t.deepEqual(list, ['hello', 'world'])\n  }))\n\n  input.end('hello~world')\n})\n\ntest('split using a custom regexp matcher', function (t) {\n  t.plan(2)\n\n  const input = split(/~/)\n\n  input.pipe(strcb(function (err, list) {\n    t.error(err)\n    t.deepEqual(list, ['hello', 'world'])\n  }))\n\n  input.end('hello~world')\n})\n\ntest('support an option argument', function (t) {\n  t.plan(2)\n\n  const input = split({ highWaterMark: 2 })\n\n  input.pipe(strcb(function (err, list) {\n    t.error(err)\n    t.deepEqual(list, ['hello', 'world'])\n  }))\n\n  input.end('hello\\nworld')\n})\n\ntest('support a mapper function', function (t) {\n  t.plan(2)\n\n  const a = { a: '42' }\n  const b = { b: '24' }\n\n  const input = split(JSON.parse)\n\n  input.pipe(objcb(function (err, list) {\n    t.error(err)\n    t.deepEqual(list, [a, b])\n  }))\n\n  input.write(JSON.stringify(a))\n  input.write('\\n')\n  input.end(JSON.stringify(b))\n})\n\ntest('split lines windows-style', function (t) {\n  t.plan(2)\n\n  const input = split()\n\n  input.pipe(strcb(function (err, list) {\n    t.error(err)\n    t.deepEqual(list, ['hello', 'world'])\n  }))\n\n  input.end('hello\\r\\nworld')\n})\n\ntest('splits a buffer', function (t) {\n  t.plan(2)\n\n  const input = split()\n\n  input.pipe(strcb(function (err, list) {\n    t.error(err)\n    t.deepEqual(list, ['hello', 'world'])\n  }))\n\n  input.end(Buffer.from('hello\\nworld'))\n})\n\ntest('do not end on undefined', function (t) {\n  t.plan(2)\n\n  const input = split(function (line) { })\n\n  input.pipe(strcb(function (err, list) {\n    t.error(err)\n    t.deepEqual(list, [])\n  }))\n\n  input.end(Buffer.from('hello\\nworld'))\n})\n\ntest('has destroy method', function (t) {\n  t.plan(1)\n\n  const input = split(function (line) { })\n\n  input.on('close', function () {\n    t.ok(true, 'close emitted')\n    t.end()\n  })\n\n  input.destroy()\n})\n\ntest('support custom matcher and mapper', function (t) {\n  t.plan(4)\n\n  const a = { a: '42' }\n  const b = { b: '24' }\n  const input = split('~', JSON.parse)\n\n  t.equal(input.matcher, '~')\n  t.equal(typeof input.mapper, 'function')\n\n  input.pipe(objcb(function (err, list) {\n    t.notOk(err, 'no errors')\n    t.deepEqual(list, [a, b])\n  }))\n\n  input.write(JSON.stringify(a))\n  input.write('~')\n  input.end(JSON.stringify(b))\n})\n\ntest('support custom matcher and options', function (t) {\n  t.plan(6)\n\n  const input = split('~', { highWaterMark: 1024 })\n\n  t.equal(input.matcher, '~')\n  t.equal(typeof input.mapper, 'function')\n  t.equal(input._readableState.highWaterMark, 1024)\n  t.equal(input._writableState.highWaterMark, 1024)\n\n  input.pipe(strcb(function (err, list) {\n    t.error(err)\n    t.deepEqual(list, ['hello', 'world'])\n  }))\n\n  input.end('hello~world')\n})\n\ntest('support mapper and options', function (t) {\n  t.plan(6)\n\n  const a = { a: '42' }\n  const b = { b: '24' }\n  const input = split(JSON.parse, { highWaterMark: 1024 })\n\n  t.ok(input.matcher instanceof RegExp, 'matcher is RegExp')\n  t.equal(typeof input.mapper, 'function')\n  t.equal(input._readableState.highWaterMark, 1024)\n  t.equal(input._writableState.highWaterMark, 1024)\n\n  input.pipe(objcb(function (err, list) {\n    t.error(err)\n    t.deepEqual(list, [a, b])\n  }))\n\n  input.write(JSON.stringify(a))\n  input.write('\\n')\n  input.end(JSON.stringify(b))\n})\n\ntest('split utf8 chars', function (t) {\n  t.plan(2)\n\n  const input = split()\n\n  input.pipe(strcb(function (err, list) {\n    t.error(err)\n    t.deepEqual(list, ['烫烫烫', '锟斤拷'])\n  }))\n\n  const buf = Buffer.from('烫烫烫\\r\\n锟斤拷', 'utf8')\n  for (let i = 0; i < buf.length; ++i) {\n    input.write(buf.slice(i, i + 1))\n  }\n  input.end()\n})\n\ntest('split utf8 chars 2by2', function (t) {\n  t.plan(2)\n\n  const input = split()\n\n  input.pipe(strcb(function (err, list) {\n    t.error(err)\n    t.deepEqual(list, ['烫烫烫', '烫烫烫'])\n  }))\n\n  const str = '烫烫烫\\r\\n烫烫烫'\n  const buf = Buffer.from(str, 'utf8')\n  for (let i = 0; i < buf.length; i += 2) {\n    input.write(buf.slice(i, i + 2))\n  }\n  input.end()\n})\n\ntest('split lines when the \\n comes at the end of a chunk', function (t) {\n  t.plan(2)\n\n  const input = split()\n\n  input.pipe(strcb(function (err, list) {\n    t.error(err)\n    t.deepEqual(list, ['hello', 'world'])\n  }))\n\n  input.write('hello\\n')\n  input.end('world')\n})\n\ntest('truncated utf-8 char', function (t) {\n  t.plan(2)\n\n  const input = split()\n\n  input.pipe(strcb(function (err, list) {\n    t.error(err)\n    t.deepEqual(list, ['烫' + Buffer.from('e7', 'hex').toString()])\n  }))\n\n  const str = '烫烫'\n  const buf = Buffer.from(str, 'utf8')\n\n  input.write(buf.slice(0, 3))\n  input.end(buf.slice(3, 4))\n})\n\ntest('maximum buffer limit', function (t) {\n  t.plan(1)\n\n  const input = split({ maxLength: 2 })\n  input.on('error', function (err) {\n    t.ok(err)\n  })\n\n  input.resume()\n\n  input.write('hey')\n})\n\ntest('readable highWaterMark', function (t) {\n  const input = split()\n  t.equal(input._readableState.highWaterMark, 16)\n  t.end()\n})\n\ntest('maxLength < chunk size', function (t) {\n  t.plan(2)\n\n  const input = split({ maxLength: 2 })\n\n  input.pipe(strcb(function (err, list) {\n    t.error(err)\n    t.deepEqual(list, ['a', 'b'])\n  }))\n\n  input.end('a\\nb')\n})\n\ntest('maximum buffer limit w/skip', function (t) {\n  t.plan(2)\n\n  const input = split({ maxLength: 2, skipOverflow: true })\n\n  input.pipe(strcb(function (err, list) {\n    t.error(err)\n    t.deepEqual(list, ['a', 'b', 'c'])\n  }))\n\n  input.write('a\\n123')\n  input.write('456')\n  input.write('789\\nb\\nc')\n  input.end()\n})\n\ntest(\"don't modify the options object\", function (t) {\n  t.plan(2)\n\n  const options = {}\n  const input = split(options)\n\n  input.pipe(strcb(function (err, list) {\n    t.error(err)\n    t.same(options, {})\n  }))\n\n  input.end()\n})\n\ntest('mapper throws flush', function (t) {\n  t.plan(1)\n  const error = new Error()\n  const input = split(function () {\n    throw error\n  })\n\n  input.on('error', (err, list) => {\n    t.same(err, error)\n  })\n  input.end('hello')\n})\n\ntest('mapper throws on transform', function (t) {\n  t.plan(1)\n\n  const error = new Error()\n  const input = split(function (l) {\n    throw error\n  })\n\n  input.on('error', (err) => {\n    t.same(err, error)\n  })\n  input.write('a')\n  input.write('\\n')\n  input.end('b')\n})\n/index.js\u000e/*\nCopyright (c) 2014-2021, Matteo Collina <hello@matteocollina.com>\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted, provided that the above\ncopyright notice and this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\nWITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\nANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\nACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR\nIN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n*/\n\n'use strict'\n\nconst { Transform } = require('stream')\nconst { StringDecoder } = require('string_decoder')\nconst kLast = Symbol('last')\nconst kDecoder = Symbol('decoder')\n\nfunction transform (chunk, enc, cb) {\n  let list\n  if (this.overflow) { // Line buffer is full. Skip to start of next line.\n    const buf = this[kDecoder].write(chunk)\n    list = buf.split(this.matcher)\n\n    if (list.length === 1) return cb() // Line ending not found. Discard entire chunk.\n\n    // Line ending found. Discard trailing fragment of previous line and reset overflow state.\n    list.shift()\n    this.overflow = false\n  } else {\n    this[kLast] += this[kDecoder].write(chunk)\n    list = this[kLast].split(this.matcher)\n  }\n\n  this[kLast] = list.pop()\n\n  for (let i = 0; i < list.length; i++) {\n    try {\n      push(this, this.mapper(list[i]))\n    } catch (error) {\n      return cb(error)\n    }\n  }\n\n  this.overflow = this[kLast].length > this.maxLength\n  if (this.overflow && !this.skipOverflow) {\n    cb(new Error('maximum buffer reached'))\n    return\n  }\n\n  cb()\n}\n\nfunction flush (cb) {\n  // forward any gibberish left in there\n  this[kLast] += this[kDecoder].end()\n\n  if (this[kLast]) {\n    try {\n      push(this, this.mapper(this[kLast]))\n    } catch (error) {\n      return cb(error)\n    }\n  }\n\n  cb()\n}\n\nfunction push (self, val) {\n  if (val !== undefined) {\n    self.push(val)\n  }\n}\n\nfunction noop (incoming) {\n  return incoming\n}\n\nfunction split (matcher, mapper, options) {\n  // Set defaults for any arguments not supplied.\n  matcher = matcher || /\\r?\\n/\n  mapper = mapper || noop\n  options = options || {}\n\n  // Test arguments explicitly.\n  switch (arguments.length) {\n    case 1:\n      // If mapper is only argument.\n      if (typeof matcher === 'function') {\n        mapper = matcher\n        matcher = /\\r?\\n/\n      // If options is only argument.\n      } else if (typeof matcher === 'object' && !(matcher instanceof RegExp)) {\n        options = matcher\n        matcher = /\\r?\\n/\n      }\n      break\n\n    case 2:\n      // If mapper and options are arguments.\n      if (typeof matcher === 'function') {\n        options = mapper\n        mapper = matcher\n        matcher = /\\r?\\n/\n      // If matcher and options are arguments.\n      } else if (typeof mapper === 'object') {\n        options = mapper\n        mapper = noop\n      }\n  }\n\n  options = Object.assign({}, options)\n  options.autoDestroy = true\n  options.transform = transform\n  options.flush = flush\n  options.readableObjectMode = true\n\n  const stream = new Transform(options)\n\n  stream[kLast] = ''\n  stream[kDecoder] = new StringDecoder('utf8')\n  stream.matcher = matcher\n  stream.mapper = mapper\n  stream.maxLength = options.maxLength\n  stream.skipOverflow = options.skipOverflow || false\n  stream.overflow = false\n  stream._destroy = function (err, cb) {\n    // Weird Node v12 bug that we need to work around\n    this._writableState.errorEmitted = false\n    cb(err)\n  }\n\n  return stream\n}\n\nmodule.exports = split\n/LICENSE\u0002Copyright (c) 2014-2018, Matteo Collina <hello@matteocollina.com>\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted, provided that the above\ncopyright notice and this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\nWITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\nANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\nACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR\nIN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n/bench.js\u0001'use strict'\n\nconst split = require('./')\nconst bench = require('fastbench')\nconst binarySplit = require('binary-split')\nconst fs = require('fs')\n\nfunction benchSplit (cb) {\n  fs.createReadStream('package.json')\n    .pipe(split())\n    .on('end', cb)\n    .resume()\n}\n\nfunction benchBinarySplit (cb) {\n  fs.createReadStream('package.json')\n    .pipe(binarySplit())\n    .on('end', cb)\n    .resume()\n}\n\nconst run = bench([\n  benchSplit,\n  benchBinarySplit\n], 10000)\n\nrun(run)\n/README.md\r8# Split2(matcher, mapper, options)\n\n![ci](https://github.com/mcollina/split2/workflows/ci/badge.svg)\n\nBreak up a stream and reassemble it so that each line is a chunk.\n`split2` is inspired by [@dominictarr](https://github.com/dominictarr) [`split`](https://github.com/dominictarr/split) module,\nand it is totally API compatible with it.\nHowever, it is based on Node.js core [`Transform`](https://nodejs.org/api/stream.html#stream_new_stream_transform_options).\n\n`matcher` may be a `String`, or a `RegExp`. Example, read every line in a file ...\n\n``` js\n  fs.createReadStream(file)\n    .pipe(split2())\n    .on('data', function (line) {\n      //each chunk now is a separate line!\n    })\n\n```\n\n`split` takes the same arguments as `string.split` except it defaults to '/\\r?\\n/', and the optional `limit` paremeter is ignored.\n[String#split](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/split)\n\n`split` takes an optional options object on it's third argument, which\nis directly passed as a\n[Transform](https://nodejs.org/api/stream.html#stream_new_stream_transform_options)\noption.\n\nAdditionally, the `.maxLength` and `.skipOverflow` options are implemented, which set limits on the internal\nbuffer size and the stream's behavior when the limit is exceeded. There is no limit unless `maxLength` is set. When\nthe internal buffer size exceeds `maxLength`, the stream emits an error by default. You may also set `skipOverflow` to\ntrue to suppress the error and instead skip past any lines that cause the internal buffer to exceed `maxLength`.\n\nCalling `.destroy` will make the stream emit `close`. Use this to perform cleanup logic\n\n``` js\nvar splitFile = function(filename) {\n  var file = fs.createReadStream(filename)\n\n  return file\n    .pipe(split2())\n    .on('close', function() {\n      // destroy the file stream in case the split stream was destroyed\n      file.destroy()\n    })\n}\n\nvar stream = splitFile('my-file.txt')\n\nstream.destroy() // will destroy the input file stream\n```\n\n# NDJ - Newline Delimited Json\n\n`split2` accepts a function which transforms each line.\n\n``` js\nfs.createReadStream(file)\n  .pipe(split2(JSON.parse))\n  .on('data', function (obj) {\n    //each chunk now is a js object\n  })\n  .on(\"error\", function(error) => {\n    //handling parsing errors\n  })\n```\n\nHowever, in [@dominictarr](https://github.com/dominictarr) [`split`](https://github.com/dominictarr/split) the mapper\nis wrapped in a try-catch, while here it is not: if your parsing logic can throw, wrap it yourself. Otherwise, you can also use the stream error handling when mapper function throw.\n\n# License\n\nCopyright (c) 2014-2021, Matteo Collina <hello@matteocollina.com>\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted, provided that the above\ncopyright notice and this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\nWITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\nANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\nACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR\nIN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/c3RhdHVzZXNAMi4wLjE=",
    "content": "/package.json\u0005{\n  \"name\": \"statuses\",\n  \"description\": \"HTTP status utility\",\n  \"version\": \"2.0.1\",\n  \"contributors\": [\n    \"Douglas Christopher Wilson <doug@somethingdoug.com>\",\n    \"Jonathan Ong <me@jongleberry.com> (http://jongleberry.com)\"\n  ],\n  \"repository\": \"jshttp/statuses\",\n  \"license\": \"MIT\",\n  \"keywords\": [\n    \"http\",\n    \"status\",\n    \"code\"\n  ],\n  \"files\": [\n    \"HISTORY.md\",\n    \"index.js\",\n    \"codes.json\",\n    \"LICENSE\"\n  ],\n  \"devDependencies\": {\n    \"csv-parse\": \"4.14.2\",\n    \"eslint\": \"7.17.0\",\n    \"eslint-config-standard\": \"14.1.1\",\n    \"eslint-plugin-import\": \"2.22.1\",\n    \"eslint-plugin-markdown\": \"1.0.2\",\n    \"eslint-plugin-node\": \"11.1.0\",\n    \"eslint-plugin-promise\": \"4.2.1\",\n    \"eslint-plugin-standard\": \"4.1.0\",\n    \"mocha\": \"8.2.1\",\n    \"nyc\": \"15.1.0\",\n    \"raw-body\": \"2.4.1\",\n    \"stream-to-array\": \"2.3.0\"\n  },\n  \"engines\": {\n    \"node\": \">= 0.8\"\n  },\n  \"scripts\": {\n    \"build\": \"node scripts/build.js\",\n    \"fetch\": \"node scripts/fetch-apache.js && node scripts/fetch-iana.js && node scripts/fetch-nginx.js && node scripts/fetch-node.js\",\n    \"lint\": \"eslint --plugin markdown --ext js,md .\",\n    \"test\": \"mocha --reporter spec --check-leaks --bail test/\",\n    \"test-ci\": \"nyc --reporter=lcov --reporter=text npm test\",\n    \"test-cov\": \"nyc --reporter=html --reporter=text npm test\",\n    \"update\": \"npm run fetch && npm run build\",\n    \"version\": \"node scripts/version-history.js && git add HISTORY.md\"\n  }\n}\n/codes.json\u0006{\n  \"100\": \"Continue\",\n  \"101\": \"Switching Protocols\",\n  \"102\": \"Processing\",\n  \"103\": \"Early Hints\",\n  \"200\": \"OK\",\n  \"201\": \"Created\",\n  \"202\": \"Accepted\",\n  \"203\": \"Non-Authoritative Information\",\n  \"204\": \"No Content\",\n  \"205\": \"Reset Content\",\n  \"206\": \"Partial Content\",\n  \"207\": \"Multi-Status\",\n  \"208\": \"Already Reported\",\n  \"226\": \"IM Used\",\n  \"300\": \"Multiple Choices\",\n  \"301\": \"Moved Permanently\",\n  \"302\": \"Found\",\n  \"303\": \"See Other\",\n  \"304\": \"Not Modified\",\n  \"305\": \"Use Proxy\",\n  \"307\": \"Temporary Redirect\",\n  \"308\": \"Permanent Redirect\",\n  \"400\": \"Bad Request\",\n  \"401\": \"Unauthorized\",\n  \"402\": \"Payment Required\",\n  \"403\": \"Forbidden\",\n  \"404\": \"Not Found\",\n  \"405\": \"Method Not Allowed\",\n  \"406\": \"Not Acceptable\",\n  \"407\": \"Proxy Authentication Required\",\n  \"408\": \"Request Timeout\",\n  \"409\": \"Conflict\",\n  \"410\": \"Gone\",\n  \"411\": \"Length Required\",\n  \"412\": \"Precondition Failed\",\n  \"413\": \"Payload Too Large\",\n  \"414\": \"URI Too Long\",\n  \"415\": \"Unsupported Media Type\",\n  \"416\": \"Range Not Satisfiable\",\n  \"417\": \"Expectation Failed\",\n  \"418\": \"I'm a Teapot\",\n  \"421\": \"Misdirected Request\",\n  \"422\": \"Unprocessable Entity\",\n  \"423\": \"Locked\",\n  \"424\": \"Failed Dependency\",\n  \"425\": \"Too Early\",\n  \"426\": \"Upgrade Required\",\n  \"428\": \"Precondition Required\",\n  \"429\": \"Too Many Requests\",\n  \"431\": \"Request Header Fields Too Large\",\n  \"451\": \"Unavailable For Legal Reasons\",\n  \"500\": \"Internal Server Error\",\n  \"501\": \"Not Implemented\",\n  \"502\": \"Bad Gateway\",\n  \"503\": \"Service Unavailable\",\n  \"504\": \"Gateway Timeout\",\n  \"505\": \"HTTP Version Not Supported\",\n  \"506\": \"Variant Also Negotiates\",\n  \"507\": \"Insufficient Storage\",\n  \"508\": \"Loop Detected\",\n  \"509\": \"Bandwidth Limit Exceeded\",\n  \"510\": \"Not Extended\",\n  \"511\": \"Network Authentication Required\"\n}\n/HISTORY.md\u0006\n2.0.1 / 2021-01-03\n==================\n\n  * Fix returning values from `Object.prototype`\n\n2.0.0 / 2020-04-19\n==================\n\n  * Drop support for Node.js 0.6\n  * Fix messaging casing of `418 I'm a Teapot`\n  * Remove code 306\n  * Remove `status[code]` exports; use `status.message[code]`\n  * Remove `status[msg]` exports; use `status.code[msg]`\n  * Rename `425 Unordered Collection` to standard `425 Too Early`\n  * Rename `STATUS_CODES` export to `message`\n  * Return status message for `statuses(code)` when given code\n\n1.5.0 / 2018-03-27\n==================\n\n  * Add `103 Early Hints`\n\n1.4.0 / 2017-10-20\n==================\n\n  * Add `STATUS_CODES` export\n\n1.3.1 / 2016-11-11\n==================\n\n  * Fix return type in JSDoc\n\n1.3.0 / 2016-05-17\n==================\n\n  * Add `421 Misdirected Request`\n  * perf: enable strict mode\n\n1.2.1 / 2015-02-01\n==================\n\n  * Fix message for status 451\n    - `451 Unavailable For Legal Reasons`\n\n1.2.0 / 2014-09-28\n==================\n\n  * Add `208 Already Repored`\n  * Add `226 IM Used`\n  * Add `306 (Unused)`\n  * Add `415 Unable For Legal Reasons`\n  * Add `508 Loop Detected`\n\n1.1.1 / 2014-09-24\n==================\n\n  * Add missing 308 to `codes.json`\n\n1.1.0 / 2014-09-21\n==================\n\n  * Add `codes.json` for universal support\n\n1.0.4 / 2014-08-20\n==================\n\n  * Package cleanup\n\n1.0.3 / 2014-06-08\n==================\n\n  * Add 308 to `.redirect` category\n\n1.0.2 / 2014-03-13\n==================\n\n  * Add `.retry` category\n\n1.0.1 / 2014-03-12\n==================\n\n  * Initial release\n/README.md\r# statuses\n\n[![NPM Version][npm-version-image]][npm-url]\n[![NPM Downloads][npm-downloads-image]][npm-url]\n[![Node.js Version][node-version-image]][node-version-url]\n[![Build Status][ci-image]][ci-url]\n[![Test Coverage][coveralls-image]][coveralls-url]\n\nHTTP status utility for node.\n\nThis module provides a list of status codes and messages sourced from\na few different projects:\n\n  * The [IANA Status Code Registry](https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml)\n  * The [Node.js project](https://nodejs.org/)\n  * The [NGINX project](https://www.nginx.com/)\n  * The [Apache HTTP Server project](https://httpd.apache.org/)\n\n## Installation\n\nThis is a [Node.js](https://nodejs.org/en/) module available through the\n[npm registry](https://www.npmjs.com/). Installation is done using the\n[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally):\n\n```sh\n$ npm install statuses\n```\n\n## API\n\n<!-- eslint-disable no-unused-vars -->\n\n```js\nvar status = require('statuses')\n```\n\n### status(code)\n\nReturns the status message string for a known HTTP status code. The code\nmay be a number or a string. An error is thrown for an unknown status code.\n\n<!-- eslint-disable no-undef -->\n\n```js\nstatus(403) // => 'Forbidden'\nstatus('403') // => 'Forbidden'\nstatus(306) // throws\n```\n\n### status(msg)\n\nReturns the numeric status code for a known HTTP status message. The message\nis case-insensitive. An error is thrown for an unknown status message.\n\n<!-- eslint-disable no-undef -->\n\n```js\nstatus('forbidden') // => 403\nstatus('Forbidden') // => 403\nstatus('foo') // throws\n```\n\n### status.codes\n\nReturns an array of all the status codes as `Integer`s.\n\n### status.code[msg]\n\nReturns the numeric status code for a known status message (in lower-case),\notherwise `undefined`.\n\n<!-- eslint-disable no-undef, no-unused-expressions -->\n\n```js\nstatus['not found'] // => 404\n```\n\n### status.empty[code]\n\nReturns `true` if a status code expects an empty body.\n\n<!-- eslint-disable no-undef, no-unused-expressions -->\n\n```js\nstatus.empty[200] // => undefined\nstatus.empty[204] // => true\nstatus.empty[304] // => true\n```\n\n### status.message[code]\n\nReturns the string message for a known numeric status code, otherwise\n`undefined`. This object is the same format as the\n[Node.js http module `http.STATUS_CODES`](https://nodejs.org/dist/latest/docs/api/http.html#http_http_status_codes).\n\n<!-- eslint-disable no-undef, no-unused-expressions -->\n\n```js\nstatus.message[404] // => 'Not Found'\n```\n\n### status.redirect[code]\n\nReturns `true` if a status code is a valid redirect status.\n\n<!-- eslint-disable no-undef, no-unused-expressions -->\n\n```js\nstatus.redirect[200] // => undefined\nstatus.redirect[301] // => true\n```\n\n### status.retry[code]\n\nReturns `true` if you should retry the rest.\n\n<!-- eslint-disable no-undef, no-unused-expressions -->\n\n```js\nstatus.retry[501] // => undefined\nstatus.retry[503] // => true\n```\n\n## License\n\n[MIT](LICENSE)\n\n[ci-image]: https://badgen.net/github/checks/jshttp/statuses/master?label=ci\n[ci-url]: https://github.com/jshttp/statuses/actions?query=workflow%3Aci\n[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/statuses/master\n[coveralls-url]: https://coveralls.io/r/jshttp/statuses?branch=master\n[node-version-image]: https://badgen.net/npm/node/statuses\n[node-version-url]: https://nodejs.org/en/download\n[npm-downloads-image]: https://badgen.net/npm/dm/statuses\n[npm-url]: https://npmjs.org/package/statuses\n[npm-version-image]: https://badgen.net/npm/v/statuses\n/LICENSE\u0004\nThe MIT License (MIT)\n\nCopyright (c) 2014 Jonathan Ong <me@jongleberry.com>\nCopyright (c) 2016 Douglas Christopher Wilson <doug@somethingdoug.com>\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n/index.js\n2/*!\n * statuses\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar codes = require('./codes.json')\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = status\n\n// status code to message map\nstatus.message = codes\n\n// status message (lower-case) to code map\nstatus.code = createMessageToStatusCodeMap(codes)\n\n// array of status codes\nstatus.codes = createStatusCodeList(codes)\n\n// status codes for redirects\nstatus.redirect = {\n  300: true,\n  301: true,\n  302: true,\n  303: true,\n  305: true,\n  307: true,\n  308: true\n}\n\n// status codes for empty bodies\nstatus.empty = {\n  204: true,\n  205: true,\n  304: true\n}\n\n// status codes for when you should retry the request\nstatus.retry = {\n  502: true,\n  503: true,\n  504: true\n}\n\n/**\n * Create a map of message to status code.\n * @private\n */\n\nfunction createMessageToStatusCodeMap (codes) {\n  var map = {}\n\n  Object.keys(codes).forEach(function forEachCode (code) {\n    var message = codes[code]\n    var status = Number(code)\n\n    // populate map\n    map[message.toLowerCase()] = status\n  })\n\n  return map\n}\n\n/**\n * Create a list of all status codes.\n * @private\n */\n\nfunction createStatusCodeList (codes) {\n  return Object.keys(codes).map(function mapCode (code) {\n    return Number(code)\n  })\n}\n\n/**\n * Get the status code for given message.\n * @private\n */\n\nfunction getStatusCode (message) {\n  var msg = message.toLowerCase()\n\n  if (!Object.prototype.hasOwnProperty.call(status.code, msg)) {\n    throw new Error('invalid status message: \"' + message + '\"')\n  }\n\n  return status.code[msg]\n}\n\n/**\n * Get the status message for given code.\n * @private\n */\n\nfunction getStatusMessage (code) {\n  if (!Object.prototype.hasOwnProperty.call(status.message, code)) {\n    throw new Error('invalid status code: ' + code)\n  }\n\n  return status.message[code]\n}\n\n/**\n * Get the status code.\n *\n * Given a number, this will throw if it is not a known status\n * code, otherwise the code will be returned. Given a string,\n * the string will be parsed for a number and return the code\n * if valid, otherwise will lookup the code assuming this is\n * the status message.\n *\n * @param {string|number} code\n * @returns {number}\n * @public\n */\n\nfunction status (code) {\n  if (typeof code === 'number') {\n    return getStatusMessage(code)\n  }\n\n  if (typeof code !== 'string') {\n    throw new TypeError('code must be a number or string')\n  }\n\n  // '403'\n  var n = parseInt(code, 10)\n  if (!isNaN(n)) {\n    return getStatusMessage(n)\n  }\n\n  return getStatusCode(code)\n}\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/c3RkaW4tZGlzY2FyZGVyQDAuMS4w",
    "content": "/readme.md\u0003# stdin-discarder\n\n> Discard stdin input except for Ctrl+C\n\nThis can be useful to prevent stdin input from interfering with stdout output. For example, you are showing a spinner, and if the user presses a key, it would interfere with the spinner, causing visual glitches. This package prevents such problems.\n\nThis has no effect on Windows as there is no good way to implement discarding stdin properly there.\n\nThis package is used by [`ora`](https://github.com/sindresorhus/ora) for its [`discardStdin`](https://github.com/sindresorhus/ora#discardstdin) option.\n\n**Work in progress**\n\n## Install\n\n```sh\nnpm install stdin-discarder\n```\n\n## Usage\n\n```js\nimport stdinDiscarder from 'stdin-discarder';\n\nstdinDiscarder.start();\n```\n\n## API\n\n### stdinDiscarder.start()\n\nStart discarding stdin.\n\n### stdinDiscarder.stop()\n\nStop discarding stdin.\n\n## Related\n\n- [hook-std](https://github.com/sindresorhus/hook-std) - Hook and modify stdout and stderr\n/license\u0004]MIT License\n\nCopyright (c) Sindre Sorhus <sindresorhus@gmail.com> (https://sindresorhus.com)\n\nPermission 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:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE 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.\n/index.d.tsĦdeclare const stdinDiscarder: {\n\t/**\n\tStart discarding stdin.\n\t*/\n\tstart(): void;\n\n\t/**\n\tStop discarding stdin.\n\t*/\n\tstop(): void;\n};\n\nexport default stdinDiscarder;\n/index.js\u00074import process from 'node:process';\nimport readline from 'node:readline';\nimport {BufferListStream} from 'bl';\n\nconst ASCII_ETX_CODE = 0x03; // Ctrl+C emits this code\n\nclass StdinDiscarder {\n\t#requests = 0;\n\t#mutedStream = new BufferListStream();\n\t#ourEmit;\n\t#rl;\n\n\tconstructor() {\n\t\tthis.#mutedStream.pipe(process.stdout);\n\n\t\tconst self = this; // eslint-disable-line unicorn/no-this-assignment\n\t\tthis.#ourEmit = function (event, data, ...arguments_) {\n\t\t\tconst {stdin} = process;\n\t\t\tif (self.#requests > 0 || stdin.emit === self.#ourEmit) {\n\t\t\t\tif (event === 'keypress') { // Fixes readline behavior\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (event === 'data' && data.includes(ASCII_ETX_CODE)) {\n\t\t\t\t\tprocess.emit('SIGINT');\n\t\t\t\t}\n\n\t\t\t\tReflect.apply(self.#ourEmit, this, [event, data, ...arguments_]);\n\t\t\t} else {\n\t\t\t\tReflect.apply(process.stdin.emit, this, [event, data, ...arguments_]);\n\t\t\t}\n\t\t};\n\t}\n\n\tstart() {\n\t\tthis.#requests++;\n\n\t\tif (this.#requests === 1) {\n\t\t\tthis._realStart();\n\t\t}\n\t}\n\n\tstop() {\n\t\tif (this.#requests <= 0) {\n\t\t\tthrow new Error('`stop` called more times than `start`');\n\t\t}\n\n\t\tthis.#requests--;\n\n\t\tif (this.#requests === 0) {\n\t\t\tthis._realStop();\n\t\t}\n\t}\n\n\t// TODO: Use private methods when targeting Node.js 14.\n\t_realStart() {\n\t\t// No known way to make it work reliably on Windows\n\t\tif (process.platform === 'win32') {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#rl = readline.createInterface({\n\t\t\tinput: process.stdin,\n\t\t\toutput: this.#mutedStream,\n\t\t});\n\n\t\tthis.#rl.on('SIGINT', () => {\n\t\t\tif (process.listenerCount('SIGINT') === 0) {\n\t\t\t\tprocess.emit('SIGINT');\n\t\t\t} else {\n\t\t\t\tthis.#rl.close();\n\t\t\t\tprocess.kill(process.pid, 'SIGINT');\n\t\t\t}\n\t\t});\n\t}\n\n\t_realStop() {\n\t\tif (process.platform === 'win32') {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#rl.close();\n\t\tthis.#rl = undefined;\n\t}\n}\n\nconst stdinDiscarder = new StdinDiscarder();\n\nexport default stdinDiscarder;\n/package.json\u0003-{\n\t\"name\": \"stdin-discarder\",\n\t\"version\": \"0.1.0\",\n\t\"description\": \"Discard stdin input except for Ctrl+C\",\n\t\"license\": \"MIT\",\n\t\"repository\": \"sindresorhus/stdin-discarder\",\n\t\"funding\": \"https://github.com/sponsors/sindresorhus\",\n\t\"author\": {\n\t\t\"name\": \"Sindre Sorhus\",\n\t\t\"email\": \"sindresorhus@gmail.com\",\n\t\t\"url\": \"https://sindresorhus.com\"\n\t},\n\t\"type\": \"module\",\n\t\"exports\": \"./index.js\",\n\t\"types\": \"./index.d.ts\",\n\t\"engines\": {\n\t\t\"node\": \"^12.20.0 || ^14.13.1 || >=16.0.0\"\n\t},\n\t\"scripts\": {\n\t\t\"test\": \"xo && ava && tsd\"\n\t},\n\t\"files\": [\n\t\t\"index.js\",\n\t\t\"index.d.ts\"\n\t],\n\t\"keywords\": [\n\t\t\"stdin\",\n\t\t\"process\",\n\t\t\"standard\",\n\t\t\"discard\",\n\t\t\"ignore\",\n\t\t\"input\"\n\t],\n\t\"dependencies\": {\n\t\t\"bl\": \"^5.0.0\"\n\t},\n\t\"devDependencies\": {\n\t\t\"ava\": \"^4.3.0\",\n\t\t\"hook-std\": \"^3.0.0\",\n\t\t\"tsd\": \"^0.21.0\",\n\t\t\"xo\": \"^0.50.0\"\n\t}\n}\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/c3RyaW5nX2RlY29kZXJAMS4zLjA=",
    "content": "/LICENSE\t\"Node.js is licensed for use as follows:\n\n\"\"\"\nCopyright Node.js contributors. All rights reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to\ndeal in the Software without restriction, including without limitation the\nrights to use, copy, modify, merge, publish, distribute, sublicense, and/or\nsell copies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\nFROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\nIN THE SOFTWARE.\n\"\"\"\n\nThis license applies to parts of Node.js originating from the\nhttps://github.com/joyent/node repository:\n\n\"\"\"\nCopyright Joyent, Inc. and other Node contributors. All rights reserved.\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to\ndeal in the Software without restriction, including without limitation the\nrights to use, copy, modify, merge, publish, distribute, sublicense, and/or\nsell copies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\nFROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\nIN THE SOFTWARE.\n\"\"\"\n\n/package.json\u00037{\n  \"name\": \"string_decoder\",\n  \"version\": \"1.3.0\",\n  \"description\": \"The string_decoder module from Node core\",\n  \"main\": \"lib/string_decoder.js\",\n  \"files\": [\n    \"lib\"\n  ],\n  \"dependencies\": {\n    \"safe-buffer\": \"~5.2.0\"\n  },\n  \"devDependencies\": {\n    \"babel-polyfill\": \"^6.23.0\",\n    \"core-util-is\": \"^1.0.2\",\n    \"inherits\": \"^2.0.3\",\n    \"tap\": \"~0.4.8\"\n  },\n  \"scripts\": {\n    \"test\": \"tap test/parallel/*.js && node test/verify-dependencies\",\n    \"ci\": \"tap test/parallel/*.js test/ours/*.js --tap | tee test.tap && node test/verify-dependencies.js\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git://github.com/nodejs/string_decoder.git\"\n  },\n  \"homepage\": \"https://github.com/nodejs/string_decoder\",\n  \"keywords\": [\n    \"string\",\n    \"decoder\",\n    \"browser\",\n    \"browserify\"\n  ],\n  \"license\": \"MIT\"\n}\n/README.md\u0007\t# string_decoder\n\n***Node-core v8.9.4 string_decoder for userland***\n\n\n[![NPM](https://nodei.co/npm/string_decoder.png?downloads=true&downloadRank=true)](https://nodei.co/npm/string_decoder/)\n[![NPM](https://nodei.co/npm-dl/string_decoder.png?&months=6&height=3)](https://nodei.co/npm/string_decoder/)\n\n\n```bash\nnpm install --save string_decoder\n```\n\n***Node-core string_decoder for userland***\n\nThis package is a mirror of the string_decoder implementation in Node-core.\n\nFull documentation may be found on the [Node.js website](https://nodejs.org/dist/v8.9.4/docs/api/).\n\nAs of version 1.0.0 **string_decoder** uses semantic versioning.\n\n## Previous versions\n\nPrevious version numbers match the versions found in Node core, e.g. 0.10.24 matches Node 0.10.24, likewise 0.11.10 matches Node 0.11.10.\n\n## Update\n\nThe *build/* directory contains a build script that will scrape the source from the [nodejs/node](https://github.com/nodejs/node) repo given a specific Node version.\n\n## Streams Working Group\n\n`string_decoder` is maintained by the Streams Working Group, which\noversees the development and maintenance of the Streams API within\nNode.js. The responsibilities of the Streams Working Group include:\n\n* Addressing stream issues on the Node.js issue tracker.\n* Authoring and editing stream documentation within the Node.js project.\n* Reviewing changes to stream subclasses within the Node.js project.\n* Redirecting changes to streams from the Node.js project to this\n  project.\n* Assisting in the implementation of stream providers within Node.js.\n* Recommending versions of `readable-stream` to be included in Node.js.\n* Messaging about the future of streams to give the community advance\n  notice of changes.\n\nSee [readable-stream](https://github.com/nodejs/readable-stream) for\nmore details.\n/lib/string_decoder.js$// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/*<replacement>*/\n\nvar Buffer = require('safe-buffer').Buffer;\n/*</replacement>*/\n\nvar isEncoding = Buffer.isEncoding || function (encoding) {\n  encoding = '' + encoding;\n  switch (encoding && encoding.toLowerCase()) {\n    case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':\n      return true;\n    default:\n      return false;\n  }\n};\n\nfunction _normalizeEncoding(enc) {\n  if (!enc) return 'utf8';\n  var retried;\n  while (true) {\n    switch (enc) {\n      case 'utf8':\n      case 'utf-8':\n        return 'utf8';\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return 'utf16le';\n      case 'latin1':\n      case 'binary':\n        return 'latin1';\n      case 'base64':\n      case 'ascii':\n      case 'hex':\n        return enc;\n      default:\n        if (retried) return; // undefined\n        enc = ('' + enc).toLowerCase();\n        retried = true;\n    }\n  }\n};\n\n// Do not cache `Buffer.isEncoding` when checking encoding names as some\n// modules monkey-patch it to support additional encodings\nfunction normalizeEncoding(enc) {\n  var nenc = _normalizeEncoding(enc);\n  if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);\n  return nenc || enc;\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters.\nexports.StringDecoder = StringDecoder;\nfunction StringDecoder(encoding) {\n  this.encoding = normalizeEncoding(encoding);\n  var nb;\n  switch (this.encoding) {\n    case 'utf16le':\n      this.text = utf16Text;\n      this.end = utf16End;\n      nb = 4;\n      break;\n    case 'utf8':\n      this.fillLast = utf8FillLast;\n      nb = 4;\n      break;\n    case 'base64':\n      this.text = base64Text;\n      this.end = base64End;\n      nb = 3;\n      break;\n    default:\n      this.write = simpleWrite;\n      this.end = simpleEnd;\n      return;\n  }\n  this.lastNeed = 0;\n  this.lastTotal = 0;\n  this.lastChar = Buffer.allocUnsafe(nb);\n}\n\nStringDecoder.prototype.write = function (buf) {\n  if (buf.length === 0) return '';\n  var r;\n  var i;\n  if (this.lastNeed) {\n    r = this.fillLast(buf);\n    if (r === undefined) return '';\n    i = this.lastNeed;\n    this.lastNeed = 0;\n  } else {\n    i = 0;\n  }\n  if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);\n  return r || '';\n};\n\nStringDecoder.prototype.end = utf8End;\n\n// Returns only complete characters in a Buffer\nStringDecoder.prototype.text = utf8Text;\n\n// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer\nStringDecoder.prototype.fillLast = function (buf) {\n  if (this.lastNeed <= buf.length) {\n    buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);\n    return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n  }\n  buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);\n  this.lastNeed -= buf.length;\n};\n\n// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a\n// continuation byte. If an invalid byte is detected, -2 is returned.\nfunction utf8CheckByte(byte) {\n  if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;\n  return byte >> 6 === 0x02 ? -1 : -2;\n}\n\n// Checks at most 3 bytes at the end of a Buffer in order to detect an\n// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)\n// needed to complete the UTF-8 character (if applicable) are returned.\nfunction utf8CheckIncomplete(self, buf, i) {\n  var j = buf.length - 1;\n  if (j < i) return 0;\n  var nb = utf8CheckByte(buf[j]);\n  if (nb >= 0) {\n    if (nb > 0) self.lastNeed = nb - 1;\n    return nb;\n  }\n  if (--j < i || nb === -2) return 0;\n  nb = utf8CheckByte(buf[j]);\n  if (nb >= 0) {\n    if (nb > 0) self.lastNeed = nb - 2;\n    return nb;\n  }\n  if (--j < i || nb === -2) return 0;\n  nb = utf8CheckByte(buf[j]);\n  if (nb >= 0) {\n    if (nb > 0) {\n      if (nb === 2) nb = 0;else self.lastNeed = nb - 3;\n    }\n    return nb;\n  }\n  return 0;\n}\n\n// Validates as many continuation bytes for a multi-byte UTF-8 character as\n// needed or are available. If we see a non-continuation byte where we expect\n// one, we \"replace\" the validated continuation bytes we've seen so far with\n// a single UTF-8 replacement character ('\\ufffd'), to match v8's UTF-8 decoding\n// behavior. The continuation byte check is included three times in the case\n// where all of the continuation bytes for a character exist in the same buffer.\n// It is also done this way as a slight performance increase instead of using a\n// loop.\nfunction utf8CheckExtraBytes(self, buf, p) {\n  if ((buf[0] & 0xC0) !== 0x80) {\n    self.lastNeed = 0;\n    return '\\ufffd';\n  }\n  if (self.lastNeed > 1 && buf.length > 1) {\n    if ((buf[1] & 0xC0) !== 0x80) {\n      self.lastNeed = 1;\n      return '\\ufffd';\n    }\n    if (self.lastNeed > 2 && buf.length > 2) {\n      if ((buf[2] & 0xC0) !== 0x80) {\n        self.lastNeed = 2;\n        return '\\ufffd';\n      }\n    }\n  }\n}\n\n// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.\nfunction utf8FillLast(buf) {\n  var p = this.lastTotal - this.lastNeed;\n  var r = utf8CheckExtraBytes(this, buf, p);\n  if (r !== undefined) return r;\n  if (this.lastNeed <= buf.length) {\n    buf.copy(this.lastChar, p, 0, this.lastNeed);\n    return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n  }\n  buf.copy(this.lastChar, p, 0, buf.length);\n  this.lastNeed -= buf.length;\n}\n\n// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a\n// partial character, the character's bytes are buffered until the required\n// number of bytes are available.\nfunction utf8Text(buf, i) {\n  var total = utf8CheckIncomplete(this, buf, i);\n  if (!this.lastNeed) return buf.toString('utf8', i);\n  this.lastTotal = total;\n  var end = buf.length - (total - this.lastNeed);\n  buf.copy(this.lastChar, 0, end);\n  return buf.toString('utf8', i, end);\n}\n\n// For UTF-8, a replacement character is added when ending on a partial\n// character.\nfunction utf8End(buf) {\n  var r = buf && buf.length ? this.write(buf) : '';\n  if (this.lastNeed) return r + '\\ufffd';\n  return r;\n}\n\n// UTF-16LE typically needs two bytes per character, but even if we have an even\n// number of bytes available, we need to check if we end on a leading/high\n// surrogate. In that case, we need to wait for the next two bytes in order to\n// decode the last character properly.\nfunction utf16Text(buf, i) {\n  if ((buf.length - i) % 2 === 0) {\n    var r = buf.toString('utf16le', i);\n    if (r) {\n      var c = r.charCodeAt(r.length - 1);\n      if (c >= 0xD800 && c <= 0xDBFF) {\n        this.lastNeed = 2;\n        this.lastTotal = 4;\n        this.lastChar[0] = buf[buf.length - 2];\n        this.lastChar[1] = buf[buf.length - 1];\n        return r.slice(0, -1);\n      }\n    }\n    return r;\n  }\n  this.lastNeed = 1;\n  this.lastTotal = 2;\n  this.lastChar[0] = buf[buf.length - 1];\n  return buf.toString('utf16le', i, buf.length - 1);\n}\n\n// For UTF-16LE we do not explicitly append special replacement characters if we\n// end on a partial character, we simply let v8 handle that.\nfunction utf16End(buf) {\n  var r = buf && buf.length ? this.write(buf) : '';\n  if (this.lastNeed) {\n    var end = this.lastTotal - this.lastNeed;\n    return r + this.lastChar.toString('utf16le', 0, end);\n  }\n  return r;\n}\n\nfunction base64Text(buf, i) {\n  var n = (buf.length - i) % 3;\n  if (n === 0) return buf.toString('base64', i);\n  this.lastNeed = 3 - n;\n  this.lastTotal = 3;\n  if (n === 1) {\n    this.lastChar[0] = buf[buf.length - 1];\n  } else {\n    this.lastChar[0] = buf[buf.length - 2];\n    this.lastChar[1] = buf[buf.length - 1];\n  }\n  return buf.toString('base64', i, buf.length - n);\n}\n\nfunction base64End(buf) {\n  var r = buf && buf.length ? this.write(buf) : '';\n  if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);\n  return r;\n}\n\n// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)\nfunction simpleWrite(buf) {\n  return buf.toString(this.encoding);\n}\n\nfunction simpleEnd(buf) {\n  return buf && buf.length ? this.write(buf) : '';\n}"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/c3RyaXAtYW5zaUA2LjAuMQ==",
    "content": "/readme.md\u0006?# strip-ansi [![Build Status](https://travis-ci.org/chalk/strip-ansi.svg?branch=master)](https://travis-ci.org/chalk/strip-ansi)\n\n> Strip [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) from a string\n\n\n## Install\n\n```\n$ npm install strip-ansi\n```\n\n\n## Usage\n\n```js\nconst stripAnsi = require('strip-ansi');\n\nstripAnsi('\\u001B[4mUnicorn\\u001B[0m');\n//=> 'Unicorn'\n\nstripAnsi('\\u001B]8;;https://github.com\\u0007Click\\u001B]8;;\\u0007');\n//=> 'Click'\n```\n\n\n## strip-ansi for enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of strip-ansi and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-strip-ansi?utm_source=npm-strip-ansi&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n\n## Related\n\n- [strip-ansi-cli](https://github.com/chalk/strip-ansi-cli) - CLI for this module\n- [strip-ansi-stream](https://github.com/chalk/strip-ansi-stream) - Streaming version of this module\n- [has-ansi](https://github.com/chalk/has-ansi) - Check if a string has ANSI escape codes\n- [ansi-regex](https://github.com/chalk/ansi-regex) - Regular expression for matching ANSI escape codes\n- [chalk](https://github.com/chalk/chalk) - Terminal string styling done right\n\n\n## Maintainers\n\n- [Sindre Sorhus](https://github.com/sindresorhus)\n- [Josh Junon](https://github.com/qix-)\n\n/license\u0004UMIT License\n\nCopyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)\n\nPermission 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:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE 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.\n/index.d.ts\u0001q/**\nStrip [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) from a string.\n\n@example\n```\nimport stripAnsi = require('strip-ansi');\n\nstripAnsi('\\u001B[4mUnicorn\\u001B[0m');\n//=> 'Unicorn'\n\nstripAnsi('\\u001B]8;;https://github.com\\u0007Click\\u001B]8;;\\u0007');\n//=> 'Click'\n```\n*/\ndeclare function stripAnsi(string: string): string;\n\nexport = stripAnsi;\n/package.json\u0003\u001e{\n\t\"name\": \"strip-ansi\",\n\t\"version\": \"6.0.1\",\n\t\"description\": \"Strip ANSI escape codes from a string\",\n\t\"license\": \"MIT\",\n\t\"repository\": \"chalk/strip-ansi\",\n\t\"author\": {\n\t\t\"name\": \"Sindre Sorhus\",\n\t\t\"email\": \"sindresorhus@gmail.com\",\n\t\t\"url\": \"sindresorhus.com\"\n\t},\n\t\"engines\": {\n\t\t\"node\": \">=8\"\n\t},\n\t\"scripts\": {\n\t\t\"test\": \"xo && ava && tsd\"\n\t},\n\t\"files\": [\n\t\t\"index.js\",\n\t\t\"index.d.ts\"\n\t],\n\t\"keywords\": [\n\t\t\"strip\",\n\t\t\"trim\",\n\t\t\"remove\",\n\t\t\"ansi\",\n\t\t\"styles\",\n\t\t\"color\",\n\t\t\"colour\",\n\t\t\"colors\",\n\t\t\"terminal\",\n\t\t\"console\",\n\t\t\"string\",\n\t\t\"tty\",\n\t\t\"escape\",\n\t\t\"formatting\",\n\t\t\"rgb\",\n\t\t\"256\",\n\t\t\"shell\",\n\t\t\"xterm\",\n\t\t\"log\",\n\t\t\"logging\",\n\t\t\"command-line\",\n\t\t\"text\"\n\t],\n\t\"dependencies\": {\n\t\t\"ansi-regex\": \"^5.0.1\"\n\t},\n\t\"devDependencies\": {\n\t\t\"ava\": \"^2.4.0\",\n\t\t\"tsd\": \"^0.10.0\",\n\t\t\"xo\": \"^0.25.3\"\n\t}\n}\n/index.jsĚ'use strict';\nconst ansiRegex = require('ansi-regex');\n\nmodule.exports = string => typeof string === 'string' ? string.replace(ansiRegex(), '') : string;\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/c3RyaXAtYW5zaUA3LjAuMQ==",
    "content": "/readme.md\u0005# strip-ansi\n\n> Strip [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) from a string\n\n## Install\n\n```\n$ npm install strip-ansi\n```\n\n## Usage\n\n```js\nimport stripAnsi from 'strip-ansi';\n\nstripAnsi('\\u001B[4mUnicorn\\u001B[0m');\n//=> 'Unicorn'\n\nstripAnsi('\\u001B]8;;https://github.com\\u0007Click\\u001B]8;;\\u0007');\n//=> 'Click'\n```\n\n## strip-ansi for enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of strip-ansi and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-strip-ansi?utm_source=npm-strip-ansi&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## Related\n\n- [strip-ansi-cli](https://github.com/chalk/strip-ansi-cli) - CLI for this module\n- [strip-ansi-stream](https://github.com/chalk/strip-ansi-stream) - Streaming version of this module\n- [has-ansi](https://github.com/chalk/has-ansi) - Check if a string has ANSI escape codes\n- [ansi-regex](https://github.com/chalk/ansi-regex) - Regular expression for matching ANSI escape codes\n- [chalk](https://github.com/chalk/chalk) - Terminal string styling done right\n\n## Maintainers\n\n- [Sindre Sorhus](https://github.com/sindresorhus)\n- [Josh Junon](https://github.com/qix-)\n\n/index.d.ts\u0001]/**\nStrip [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) from a string.\n\n@example\n```\nimport stripAnsi from 'strip-ansi';\n\nstripAnsi('\\u001B[4mUnicorn\\u001B[0m');\n//=> 'Unicorn'\n\nstripAnsi('\\u001B]8;;https://github.com\\u0007Click\\u001B]8;;\\u0007');\n//=> 'Click'\n```\n*/\nexport default function stripAnsi(string: string): string;\n/package.json\u0003{\n\t\"name\": \"strip-ansi\",\n\t\"version\": \"7.0.1\",\n\t\"description\": \"Strip ANSI escape codes from a string\",\n\t\"license\": \"MIT\",\n\t\"repository\": \"chalk/strip-ansi\",\n\t\"funding\": \"https://github.com/chalk/strip-ansi?sponsor=1\",\n\t\"author\": {\n\t\t\"name\": \"Sindre Sorhus\",\n\t\t\"email\": \"sindresorhus@gmail.com\",\n\t\t\"url\": \"https://sindresorhus.com\"\n\t},\n\t\"type\": \"module\",\n\t\"exports\": \"./index.js\",\n\t\"engines\": {\n\t\t\"node\": \">=12\"\n\t},\n\t\"scripts\": {\n\t\t\"test\": \"xo && ava && tsd\"\n\t},\n\t\"files\": [\n\t\t\"index.js\",\n\t\t\"index.d.ts\"\n\t],\n\t\"keywords\": [\n\t\t\"strip\",\n\t\t\"trim\",\n\t\t\"remove\",\n\t\t\"ansi\",\n\t\t\"styles\",\n\t\t\"color\",\n\t\t\"colour\",\n\t\t\"colors\",\n\t\t\"terminal\",\n\t\t\"console\",\n\t\t\"string\",\n\t\t\"tty\",\n\t\t\"escape\",\n\t\t\"formatting\",\n\t\t\"rgb\",\n\t\t\"256\",\n\t\t\"shell\",\n\t\t\"xterm\",\n\t\t\"log\",\n\t\t\"logging\",\n\t\t\"command-line\",\n\t\t\"text\"\n\t],\n\t\"dependencies\": {\n\t\t\"ansi-regex\": \"^6.0.1\"\n\t},\n\t\"devDependencies\": {\n\t\t\"ava\": \"^3.15.0\",\n\t\t\"tsd\": \"^0.17.0\",\n\t\t\"xo\": \"^0.44.0\"\n\t}\n}\n/license\u0004]MIT License\n\nCopyright (c) Sindre Sorhus <sindresorhus@gmail.com> (https://sindresorhus.com)\n\nPermission 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:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE 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.\n/index.jsimport ansiRegex from 'ansi-regex';\n\nexport default function stripAnsi(string) {\n\tif (typeof string !== 'string') {\n\t\tthrow new TypeError(`Expected a \\`string\\`, got \\`${typeof string}\\``);\n\t}\n\n\treturn string.replace(ansiRegex(), '');\n}\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/c3RyaXAtYm9tLXN0cmluZ0AxLjAuMA==",
    "content": "/index.js\u0001A/*!\n * strip-bom-string <https://github.com/jonschlinkert/strip-bom-string>\n *\n * Copyright (c) 2015, 2017, Jon Schlinkert.\n * Released under the MIT License.\n */\n\n'use strict';\n\nmodule.exports = function(str) {\n  if (typeof str === 'string' && str.charAt(0) === '\\ufeff') {\n    return str.slice(1);\n  }\n  return str;\n};\n/package.json\u0004Y{\n  \"name\": \"strip-bom-string\",\n  \"description\": \"Strip a byte order mark (BOM) from a string.\",\n  \"version\": \"1.0.0\",\n  \"homepage\": \"https://github.com/jonschlinkert/strip-bom-string\",\n  \"author\": \"Jon Schlinkert (https://github.com/jonschlinkert)\",\n  \"repository\": \"jonschlinkert/strip-bom-string\",\n  \"bugs\": {\n    \"url\": \"https://github.com/jonschlinkert/strip-bom-string/issues\"\n  },\n  \"license\": \"MIT\",\n  \"files\": [\n    \"index.js\"\n  ],\n  \"main\": \"index.js\",\n  \"engines\": {\n    \"node\": \">=0.10.0\"\n  },\n  \"scripts\": {\n    \"test\": \"mocha\"\n  },\n  \"devDependencies\": {\n    \"gulp-format-md\": \"^0.1.11\",\n    \"mocha\": \"^3.2.0\"\n  },\n  \"keywords\": [\n    \"bom\",\n    \"byte\",\n    \"byte-order-mark\",\n    \"file\",\n    \"fs\",\n    \"mark\",\n    \"nl\",\n    \"normalize\",\n    \"order\",\n    \"string\",\n    \"strip\"\n  ],\n  \"verb\": {\n    \"related\": {\n      \"list\": [\n        \"cr\",\n        \"has-bom\",\n        \"read-file\",\n        \"strip-bom-buffer\"\n      ]\n    },\n    \"toc\": false,\n    \"layout\": \"default\",\n    \"tasks\": [\n      \"readme\"\n    ],\n    \"plugins\": [\n      \"gulp-format-md\"\n    ],\n    \"lint\": {\n      \"reflinks\": true\n    }\n  }\n}\n/LICENSE\u0004@The MIT License (MIT)\n\nCopyright (c) 2015, 2017, Jon Schlinkert\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n/README.md\f^# strip-bom-string [![NPM version](https://img.shields.io/npm/v/strip-bom-string.svg?style=flat)](https://www.npmjs.com/package/strip-bom-string) [![NPM monthly downloads](https://img.shields.io/npm/dm/strip-bom-string.svg?style=flat)](https://npmjs.org/package/strip-bom-string)  [![NPM total downloads](https://img.shields.io/npm/dt/strip-bom-string.svg?style=flat)](https://npmjs.org/package/strip-bom-string) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/strip-bom-string.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/strip-bom-string)\n\n> Strip a byte order mark (BOM) from a string.\n\n## Install\n\nInstall with [npm](https://www.npmjs.com/):\n\n```sh\n$ npm install --save strip-bom-string\n```\n\n## Usage\n\n```js\nvar strip = require('strip-bom-string');\nstrip('\\ufefffoo');\n//=> 'foo'\n```\n\n## About\n\n### Related projects\n\n* [cr](https://www.npmjs.com/package/cr): Strip windows carriage returns, or convert carriage returns to newlines. | [homepage](https://github.com/jonschlinkert/cr \"Strip windows carriage returns, or convert carriage returns to newlines.\")\n* [has-bom](https://www.npmjs.com/package/has-bom): Returns true if a buffer or string has a byte order mark (BOM) | [homepage](https://github.com/jonschlinkert/has-bom \"Returns true if a buffer or string has a byte order mark (BOM)\")\n* [read-file](https://www.npmjs.com/package/read-file): Thin wrapper around fs.readFile and fs.readFileSync that also strips byte order marks when `utf8` encoding… [more](https://github.com/jonschlinkert/read-file) | [homepage](https://github.com/jonschlinkert/read-file \"Thin wrapper around fs.readFile and fs.readFileSync that also strips byte order marks when `utf8` encoding is chosen. Also optionally replaces windows newlines with unix newlines.\")\n* [strip-bom-buffer](https://www.npmjs.com/package/strip-bom-buffer): Strip a byte order mark (BOM) from a buffer. | [homepage](https://github.com/jonschlinkert/strip-bom-buffer \"Strip a byte order mark (BOM) from a buffer.\")\n\n### Contributing\n\nPull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).\n\n### Building docs\n\n_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_\n\nTo generate the readme, run the following command:\n\n```sh\n$ npm install -g verbose/verb#dev verb-generate-readme && verb\n```\n\n### Running tests\n\nRunning and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:\n\n```sh\n$ npm install && npm test\n```\n\n### Author\n\n**Jon Schlinkert**\n\n* [github/jonschlinkert](https://github.com/jonschlinkert)\n* [twitter/jonschlinkert](https://twitter.com/jonschlinkert)\n\n### License\n\nCopyright © 2017, [Jon Schlinkert](https://github.com/jonschlinkert).\nReleased under the [MIT License](LICENSE).\n\n***\n\n_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.4.3, on March 29, 2017._"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/c3RyaXAtZmluYWwtbmV3bGluZUAzLjAuMA==",
    "content": "/license\u0004]MIT License\n\nCopyright (c) Sindre Sorhus <sindresorhus@gmail.com> (https://sindresorhus.com)\n\nPermission 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:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE 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.\n/package.json\u0002{\n\t\"name\": \"strip-final-newline\",\n\t\"version\": \"3.0.0\",\n\t\"description\": \"Strip the final newline character from a string/buffer\",\n\t\"license\": \"MIT\",\n\t\"repository\": \"sindresorhus/strip-final-newline\",\n\t\"funding\": \"https://github.com/sponsors/sindresorhus\",\n\t\"author\": {\n\t\t\"name\": \"Sindre Sorhus\",\n\t\t\"email\": \"sindresorhus@gmail.com\",\n\t\t\"url\": \"https://sindresorhus.com\"\n\t},\n\t\"type\": \"module\",\n\t\"exports\": \"./index.js\",\n\t\"engines\": {\n\t\t\"node\": \">=12\"\n\t},\n\t\"scripts\": {\n\t\t\"test\": \"xo && ava\"\n\t},\n\t\"files\": [\n\t\t\"index.js\"\n\t],\n\t\"keywords\": [\n\t\t\"strip\",\n\t\t\"trim\",\n\t\t\"remove\",\n\t\t\"delete\",\n\t\t\"final\",\n\t\t\"last\",\n\t\t\"end\",\n\t\t\"file\",\n\t\t\"newline\",\n\t\t\"linebreak\",\n\t\t\"character\",\n\t\t\"string\",\n\t\t\"buffer\"\n\t],\n\t\"devDependencies\": {\n\t\t\"ava\": \"^3.15.0\",\n\t\t\"xo\": \"^0.39.1\"\n\t}\n}\n/index.js\u0001[export default function stripFinalNewline(input) {\n\tconst LF = typeof input === 'string' ? '\\n' : '\\n'.charCodeAt();\n\tconst CR = typeof input === 'string' ? '\\r' : '\\r'.charCodeAt();\n\n\tif (input[input.length - 1] === LF) {\n\t\tinput = input.slice(0, -1);\n\t}\n\n\tif (input[input.length - 1] === CR) {\n\t\tinput = input.slice(0, -1);\n\t}\n\n\treturn input;\n}\n/readme.md\u0004u# strip-final-newline\n\n> Strip the final [newline character](https://en.wikipedia.org/wiki/Newline) from a string/buffer\n\nCan be useful when parsing the output of, for example, `ChildProcess#execFile`, as [binaries usually output a newline at the end](https://stackoverflow.com/questions/729692/why-should-text-files-end-with-a-newline). Normally, you would use `stdout.trim()`, but that would also remove newlines at the start and whitespace.\n\n## Install\n\n```\n$ npm install strip-final-newline\n```\n\n## Usage\n\n```js\nimport stripFinalNewline from 'strip-final-newline';\n\nstripFinalNewline('foo\\nbar\\n\\n');\n//=> 'foo\\nbar\\n'\n\nstripFinalNewline(Buffer.from('foo\\nbar\\n\\n')).toString();\n//=> 'foo\\nbar\\n'\n```\n\n---\n\n<div align=\"center\">\n\t<b>\n\t\t<a href=\"https://tidelift.com/subscription/pkg/npm-strip-eof?utm_source=npm-strip-eof&utm_medium=referral&utm_campaign=readme\">Get professional support for this package with a Tidelift subscription</a>\n\t</b>\n\t<br>\n\t<sub>\n\t\tTidelift helps make open source sustainable for maintainers while giving companies<br>assurances about security, maintenance, and licensing for their dependencies.\n\t</sub>\n</div>\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/c3RyaXAtanNvbi1jb21tZW50c0AzLjEuMQ==",
    "content": "/index.d.ts\u0003'declare namespace stripJsonComments {\n\tinterface Options {\n\t\t/**\n\t\tReplace comments with whitespace instead of stripping them entirely.\n\n\t\t@default true\n\t\t*/\n\t\treadonly whitespace?: boolean;\n\t}\n}\n\n/**\nStrip comments from JSON. Lets you use comments in your JSON files!\n\nIt will replace single-line comments `//` and multi-line comments `/**\\/` with whitespace. This allows JSON error positions to remain as close as possible to the original source.\n\n@param jsonString - Accepts a string with JSON.\n@returns A JSON string without comments.\n\n@example\n```\nconst json = `{\n\t// Rainbows\n\t\"unicorn\": \"cake\"\n}`;\n\nJSON.parse(stripJsonComments(json));\n//=> {unicorn: 'cake'}\n```\n*/\ndeclare function stripJsonComments(\n\tjsonString: string,\n\toptions?: stripJsonComments.Options\n): string;\n\nexport = stripJsonComments;\n/package.json\u0003W{\n\t\"name\": \"strip-json-comments\",\n\t\"version\": \"3.1.1\",\n\t\"description\": \"Strip comments from JSON. Lets you use comments in your JSON files!\",\n\t\"license\": \"MIT\",\n\t\"repository\": \"sindresorhus/strip-json-comments\",\n\t\"funding\": \"https://github.com/sponsors/sindresorhus\",\n\t\"author\": {\n\t\t\"name\": \"Sindre Sorhus\",\n\t\t\"email\": \"sindresorhus@gmail.com\",\n\t\t\"url\": \"https://sindresorhus.com\"\n\t},\n\t\"engines\": {\n\t\t\"node\": \">=8\"\n\t},\n\t\"scripts\": {\n\t\t\"test\": \"xo && ava && tsd\",\n\t\t\"bench\": \"matcha benchmark.js\"\n\t},\n\t\"files\": [\n\t\t\"index.js\",\n\t\t\"index.d.ts\"\n\t],\n\t\"keywords\": [\n\t\t\"json\",\n\t\t\"strip\",\n\t\t\"comments\",\n\t\t\"remove\",\n\t\t\"delete\",\n\t\t\"trim\",\n\t\t\"multiline\",\n\t\t\"parse\",\n\t\t\"config\",\n\t\t\"configuration\",\n\t\t\"settings\",\n\t\t\"util\",\n\t\t\"env\",\n\t\t\"environment\",\n\t\t\"jsonc\"\n\t],\n\t\"devDependencies\": {\n\t\t\"ava\": \"^1.4.1\",\n\t\t\"matcha\": \"^0.7.0\",\n\t\t\"tsd\": \"^0.7.2\",\n\t\t\"xo\": \"^0.24.0\"\n\t}\n}\n/readme.md\u0007# strip-json-comments [![Build Status](https://travis-ci.com/sindresorhus/strip-json-comments.svg?branch=master)](https://travis-ci.com/github/sindresorhus/strip-json-comments)\n\n> Strip comments from JSON. Lets you use comments in your JSON files!\n\nThis is now possible:\n\n```js\n{\n\t// Rainbows\n\t\"unicorn\": /* ❤ */ \"cake\"\n}\n```\n\nIt will replace single-line comments `//` and multi-line comments `/**/` with whitespace. This allows JSON error positions to remain as close as possible to the original source.\n\nAlso available as a [Gulp](https://github.com/sindresorhus/gulp-strip-json-comments)/[Grunt](https://github.com/sindresorhus/grunt-strip-json-comments)/[Broccoli](https://github.com/sindresorhus/broccoli-strip-json-comments) plugin.\n\n## Install\n\n```\n$ npm install strip-json-comments\n```\n\n## Usage\n\n```js\nconst json = `{\n\t// Rainbows\n\t\"unicorn\": /* ❤ */ \"cake\"\n}`;\n\nJSON.parse(stripJsonComments(json));\n//=> {unicorn: 'cake'}\n```\n\n## API\n\n### stripJsonComments(jsonString, options?)\n\n#### jsonString\n\nType: `string`\n\nAccepts a string with JSON and returns a string without comments.\n\n#### options\n\nType: `object`\n\n##### whitespace\n\nType: `boolean`\\\nDefault: `true`\n\nReplace comments with whitespace instead of stripping them entirely.\n\n## Benchmark\n\n```\n$ npm run bench\n```\n\n## Related\n\n- [strip-json-comments-cli](https://github.com/sindresorhus/strip-json-comments-cli) - CLI for this module\n- [strip-css-comments](https://github.com/sindresorhus/strip-css-comments) - Strip comments from CSS\n\n---\n\n<div align=\"center\">\n\t<b>\n\t\t<a href=\"https://tidelift.com/subscription/pkg/npm-strip-json-comments?utm_source=npm-strip-json-comments&utm_medium=referral&utm_campaign=readme\">Get professional support for this package with a Tidelift subscription</a>\n\t</b>\n\t<br>\n\t<sub>\n\t\tTidelift helps make open source sustainable for maintainers while giving companies<br>assurances about security, maintenance, and licensing for their dependencies.\n\t</sub>\n</div>\n/license\u0004]MIT License\n\nCopyright (c) Sindre Sorhus <sindresorhus@gmail.com> (https://sindresorhus.com)\n\nPermission 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:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE 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.\n/index.js\b'use strict';\nconst singleComment = Symbol('singleComment');\nconst multiComment = Symbol('multiComment');\nconst stripWithoutWhitespace = () => '';\nconst stripWithWhitespace = (string, start, end) => string.slice(start, end).replace(/\\S/g, ' ');\n\nconst isEscaped = (jsonString, quotePosition) => {\n\tlet index = quotePosition - 1;\n\tlet backslashCount = 0;\n\n\twhile (jsonString[index] === '\\\\') {\n\t\tindex -= 1;\n\t\tbackslashCount += 1;\n\t}\n\n\treturn Boolean(backslashCount % 2);\n};\n\nmodule.exports = (jsonString, options = {}) => {\n\tif (typeof jsonString !== 'string') {\n\t\tthrow new TypeError(`Expected argument \\`jsonString\\` to be a \\`string\\`, got \\`${typeof jsonString}\\``);\n\t}\n\n\tconst strip = options.whitespace === false ? stripWithoutWhitespace : stripWithWhitespace;\n\n\tlet insideString = false;\n\tlet insideComment = false;\n\tlet offset = 0;\n\tlet result = '';\n\n\tfor (let i = 0; i < jsonString.length; i++) {\n\t\tconst currentCharacter = jsonString[i];\n\t\tconst nextCharacter = jsonString[i + 1];\n\n\t\tif (!insideComment && currentCharacter === '\"') {\n\t\t\tconst escaped = isEscaped(jsonString, i);\n\t\t\tif (!escaped) {\n\t\t\t\tinsideString = !insideString;\n\t\t\t}\n\t\t}\n\n\t\tif (insideString) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (!insideComment && currentCharacter + nextCharacter === '//') {\n\t\t\tresult += jsonString.slice(offset, i);\n\t\t\toffset = i;\n\t\t\tinsideComment = singleComment;\n\t\t\ti++;\n\t\t} else if (insideComment === singleComment && currentCharacter + nextCharacter === '\\r\\n') {\n\t\t\ti++;\n\t\t\tinsideComment = false;\n\t\t\tresult += strip(jsonString, offset, i);\n\t\t\toffset = i;\n\t\t\tcontinue;\n\t\t} else if (insideComment === singleComment && currentCharacter === '\\n') {\n\t\t\tinsideComment = false;\n\t\t\tresult += strip(jsonString, offset, i);\n\t\t\toffset = i;\n\t\t} else if (!insideComment && currentCharacter + nextCharacter === '/*') {\n\t\t\tresult += jsonString.slice(offset, i);\n\t\t\toffset = i;\n\t\t\tinsideComment = multiComment;\n\t\t\ti++;\n\t\t\tcontinue;\n\t\t} else if (insideComment === multiComment && currentCharacter + nextCharacter === '*/') {\n\t\t\ti++;\n\t\t\tinsideComment = false;\n\t\t\tresult += strip(jsonString, offset, i + 1);\n\t\t\toffset = i + 1;\n\t\t\tcontinue;\n\t\t}\n\t}\n\n\treturn result + (insideComment ? strip(jsonString.slice(offset)) : jsonString.slice(offset));\n};\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/c3VwcG9ydHMtY29sb3JANS41LjA=",
    "content": "/package.json\u00032{\n\t\"name\": \"supports-color\",\n\t\"version\": \"5.5.0\",\n\t\"description\": \"Detect whether a terminal supports color\",\n\t\"license\": \"MIT\",\n\t\"repository\": \"chalk/supports-color\",\n\t\"author\": {\n\t\t\"name\": \"Sindre Sorhus\",\n\t\t\"email\": \"sindresorhus@gmail.com\",\n\t\t\"url\": \"sindresorhus.com\"\n\t},\n\t\"engines\": {\n\t\t\"node\": \">=4\"\n\t},\n\t\"scripts\": {\n\t\t\"test\": \"xo && ava\"\n\t},\n\t\"files\": [\n\t\t\"index.js\",\n\t\t\"browser.js\"\n\t],\n\t\"keywords\": [\n\t\t\"color\",\n\t\t\"colour\",\n\t\t\"colors\",\n\t\t\"terminal\",\n\t\t\"console\",\n\t\t\"cli\",\n\t\t\"ansi\",\n\t\t\"styles\",\n\t\t\"tty\",\n\t\t\"rgb\",\n\t\t\"256\",\n\t\t\"shell\",\n\t\t\"xterm\",\n\t\t\"command-line\",\n\t\t\"support\",\n\t\t\"supports\",\n\t\t\"capability\",\n\t\t\"detect\",\n\t\t\"truecolor\",\n\t\t\"16m\"\n\t],\n\t\"dependencies\": {\n\t\t\"has-flag\": \"^3.0.0\"\n\t},\n\t\"devDependencies\": {\n\t\t\"ava\": \"^0.25.0\",\n\t\t\"import-fresh\": \"^2.0.0\",\n\t\t\"xo\": \"^0.20.0\"\n\t},\n\t\"browser\": \"browser.js\"\n}\n/readme.md\u0007I# supports-color [![Build Status](https://travis-ci.org/chalk/supports-color.svg?branch=master)](https://travis-ci.org/chalk/supports-color)\n\n> Detect whether a terminal supports color\n\n\n## Install\n\n```\n$ npm install supports-color\n```\n\n\n## Usage\n\n```js\nconst supportsColor = require('supports-color');\n\nif (supportsColor.stdout) {\n\tconsole.log('Terminal stdout supports color');\n}\n\nif (supportsColor.stdout.has256) {\n\tconsole.log('Terminal stdout supports 256 colors');\n}\n\nif (supportsColor.stderr.has16m) {\n\tconsole.log('Terminal stderr supports 16 million colors (truecolor)');\n}\n```\n\n\n## API\n\nReturns an `Object` with a `stdout` and `stderr` property for testing either streams. Each property is an `Object`, or `false` if color is not supported.\n\nThe `stdout`/`stderr` objects specifies a level of support for color through a `.level` property and a corresponding flag:\n\n- `.level = 1` and `.hasBasic = true`: Basic color support (16 colors)\n- `.level = 2` and `.has256 = true`: 256 color support\n- `.level = 3` and `.has16m = true`: Truecolor support (16 million colors)\n\n\n## Info\n\nIt obeys the `--color` and `--no-color` CLI flags.\n\nCan be overridden by the user with the flags `--color` and `--no-color`. For situations where using `--color` is not possible, add the environment variable `FORCE_COLOR=1` to forcefully enable color or `FORCE_COLOR=0` to forcefully disable. The use of `FORCE_COLOR` overrides all other color support checks.\n\nExplicit 256/Truecolor mode can be enabled using the `--color=256` and `--color=16m` flags, respectively.\n\n\n## Related\n\n- [supports-color-cli](https://github.com/chalk/supports-color-cli) - CLI for this module\n- [chalk](https://github.com/chalk/chalk) - Terminal string styling done right\n\n\n## Maintainers\n\n- [Sindre Sorhus](https://github.com/sindresorhus)\n- [Josh Junon](https://github.com/qix-)\n\n\n## License\n\nMIT\n/index.js\n'use strict';\nconst os = require('os');\nconst hasFlag = require('has-flag');\n\nconst env = process.env;\n\nlet forceColor;\nif (hasFlag('no-color') ||\n\thasFlag('no-colors') ||\n\thasFlag('color=false')) {\n\tforceColor = false;\n} else if (hasFlag('color') ||\n\thasFlag('colors') ||\n\thasFlag('color=true') ||\n\thasFlag('color=always')) {\n\tforceColor = true;\n}\nif ('FORCE_COLOR' in env) {\n\tforceColor = env.FORCE_COLOR.length === 0 || parseInt(env.FORCE_COLOR, 10) !== 0;\n}\n\nfunction translateLevel(level) {\n\tif (level === 0) {\n\t\treturn false;\n\t}\n\n\treturn {\n\t\tlevel,\n\t\thasBasic: true,\n\t\thas256: level >= 2,\n\t\thas16m: level >= 3\n\t};\n}\n\nfunction supportsColor(stream) {\n\tif (forceColor === false) {\n\t\treturn 0;\n\t}\n\n\tif (hasFlag('color=16m') ||\n\t\thasFlag('color=full') ||\n\t\thasFlag('color=truecolor')) {\n\t\treturn 3;\n\t}\n\n\tif (hasFlag('color=256')) {\n\t\treturn 2;\n\t}\n\n\tif (stream && !stream.isTTY && forceColor !== true) {\n\t\treturn 0;\n\t}\n\n\tconst min = forceColor ? 1 : 0;\n\n\tif (process.platform === 'win32') {\n\t\t// Node.js 7.5.0 is the first version of Node.js to include a patch to\n\t\t// libuv that enables 256 color output on Windows. Anything earlier and it\n\t\t// won't work. However, here we target Node.js 8 at minimum as it is an LTS\n\t\t// release, and Node.js 7 is not. Windows 10 build 10586 is the first Windows\n\t\t// release that supports 256 colors. Windows 10 build 14931 is the first release\n\t\t// that supports 16m/TrueColor.\n\t\tconst osRelease = os.release().split('.');\n\t\tif (\n\t\t\tNumber(process.versions.node.split('.')[0]) >= 8 &&\n\t\t\tNumber(osRelease[0]) >= 10 &&\n\t\t\tNumber(osRelease[2]) >= 10586\n\t\t) {\n\t\t\treturn Number(osRelease[2]) >= 14931 ? 3 : 2;\n\t\t}\n\n\t\treturn 1;\n\t}\n\n\tif ('CI' in env) {\n\t\tif (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI'].some(sign => sign in env) || env.CI_NAME === 'codeship') {\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn min;\n\t}\n\n\tif ('TEAMCITY_VERSION' in env) {\n\t\treturn /^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;\n\t}\n\n\tif (env.COLORTERM === 'truecolor') {\n\t\treturn 3;\n\t}\n\n\tif ('TERM_PROGRAM' in env) {\n\t\tconst version = parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);\n\n\t\tswitch (env.TERM_PROGRAM) {\n\t\t\tcase 'iTerm.app':\n\t\t\t\treturn version >= 3 ? 3 : 2;\n\t\t\tcase 'Apple_Terminal':\n\t\t\t\treturn 2;\n\t\t\t// No default\n\t\t}\n\t}\n\n\tif (/-256(color)?$/i.test(env.TERM)) {\n\t\treturn 2;\n\t}\n\n\tif (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {\n\t\treturn 1;\n\t}\n\n\tif ('COLORTERM' in env) {\n\t\treturn 1;\n\t}\n\n\tif (env.TERM === 'dumb') {\n\t\treturn min;\n\t}\n\n\treturn min;\n}\n\nfunction getSupportLevel(stream) {\n\tconst level = supportsColor(stream);\n\treturn translateLevel(level);\n}\n\nmodule.exports = {\n\tsupportsColor: getSupportLevel,\n\tstdout: getSupportLevel(process.stdout),\n\tstderr: getSupportLevel(process.stderr)\n};\n/browser.jsC'use strict';\nmodule.exports = {\n\tstdout: false,\n\tstderr: false\n};\n/license\u0004UMIT License\n\nCopyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)\n\nPermission 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:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE 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.\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/c3VwcG9ydHMtY29sb3JANy4yLjA=",
    "content": "/package.json\u00031{\n\t\"name\": \"supports-color\",\n\t\"version\": \"7.2.0\",\n\t\"description\": \"Detect whether a terminal supports color\",\n\t\"license\": \"MIT\",\n\t\"repository\": \"chalk/supports-color\",\n\t\"author\": {\n\t\t\"name\": \"Sindre Sorhus\",\n\t\t\"email\": \"sindresorhus@gmail.com\",\n\t\t\"url\": \"sindresorhus.com\"\n\t},\n\t\"engines\": {\n\t\t\"node\": \">=8\"\n\t},\n\t\"scripts\": {\n\t\t\"test\": \"xo && ava\"\n\t},\n\t\"files\": [\n\t\t\"index.js\",\n\t\t\"browser.js\"\n\t],\n\t\"keywords\": [\n\t\t\"color\",\n\t\t\"colour\",\n\t\t\"colors\",\n\t\t\"terminal\",\n\t\t\"console\",\n\t\t\"cli\",\n\t\t\"ansi\",\n\t\t\"styles\",\n\t\t\"tty\",\n\t\t\"rgb\",\n\t\t\"256\",\n\t\t\"shell\",\n\t\t\"xterm\",\n\t\t\"command-line\",\n\t\t\"support\",\n\t\t\"supports\",\n\t\t\"capability\",\n\t\t\"detect\",\n\t\t\"truecolor\",\n\t\t\"16m\"\n\t],\n\t\"dependencies\": {\n\t\t\"has-flag\": \"^4.0.0\"\n\t},\n\t\"devDependencies\": {\n\t\t\"ava\": \"^1.4.1\",\n\t\t\"import-fresh\": \"^3.0.0\",\n\t\t\"xo\": \"^0.24.0\"\n\t},\n\t\"browser\": \"browser.js\"\n}\n/browser.jsC'use strict';\nmodule.exports = {\n\tstdout: false,\n\tstderr: false\n};\n/index.js\n'use strict';\nconst os = require('os');\nconst tty = require('tty');\nconst hasFlag = require('has-flag');\n\nconst {env} = process;\n\nlet forceColor;\nif (hasFlag('no-color') ||\n\thasFlag('no-colors') ||\n\thasFlag('color=false') ||\n\thasFlag('color=never')) {\n\tforceColor = 0;\n} else if (hasFlag('color') ||\n\thasFlag('colors') ||\n\thasFlag('color=true') ||\n\thasFlag('color=always')) {\n\tforceColor = 1;\n}\n\nif ('FORCE_COLOR' in env) {\n\tif (env.FORCE_COLOR === 'true') {\n\t\tforceColor = 1;\n\t} else if (env.FORCE_COLOR === 'false') {\n\t\tforceColor = 0;\n\t} else {\n\t\tforceColor = env.FORCE_COLOR.length === 0 ? 1 : Math.min(parseInt(env.FORCE_COLOR, 10), 3);\n\t}\n}\n\nfunction translateLevel(level) {\n\tif (level === 0) {\n\t\treturn false;\n\t}\n\n\treturn {\n\t\tlevel,\n\t\thasBasic: true,\n\t\thas256: level >= 2,\n\t\thas16m: level >= 3\n\t};\n}\n\nfunction supportsColor(haveStream, streamIsTTY) {\n\tif (forceColor === 0) {\n\t\treturn 0;\n\t}\n\n\tif (hasFlag('color=16m') ||\n\t\thasFlag('color=full') ||\n\t\thasFlag('color=truecolor')) {\n\t\treturn 3;\n\t}\n\n\tif (hasFlag('color=256')) {\n\t\treturn 2;\n\t}\n\n\tif (haveStream && !streamIsTTY && forceColor === undefined) {\n\t\treturn 0;\n\t}\n\n\tconst min = forceColor || 0;\n\n\tif (env.TERM === 'dumb') {\n\t\treturn min;\n\t}\n\n\tif (process.platform === 'win32') {\n\t\t// Windows 10 build 10586 is the first Windows release that supports 256 colors.\n\t\t// Windows 10 build 14931 is the first release that supports 16m/TrueColor.\n\t\tconst osRelease = os.release().split('.');\n\t\tif (\n\t\t\tNumber(osRelease[0]) >= 10 &&\n\t\t\tNumber(osRelease[2]) >= 10586\n\t\t) {\n\t\t\treturn Number(osRelease[2]) >= 14931 ? 3 : 2;\n\t\t}\n\n\t\treturn 1;\n\t}\n\n\tif ('CI' in env) {\n\t\tif (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI', 'GITHUB_ACTIONS', 'BUILDKITE'].some(sign => sign in env) || env.CI_NAME === 'codeship') {\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn min;\n\t}\n\n\tif ('TEAMCITY_VERSION' in env) {\n\t\treturn /^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;\n\t}\n\n\tif (env.COLORTERM === 'truecolor') {\n\t\treturn 3;\n\t}\n\n\tif ('TERM_PROGRAM' in env) {\n\t\tconst version = parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);\n\n\t\tswitch (env.TERM_PROGRAM) {\n\t\t\tcase 'iTerm.app':\n\t\t\t\treturn version >= 3 ? 3 : 2;\n\t\t\tcase 'Apple_Terminal':\n\t\t\t\treturn 2;\n\t\t\t// No default\n\t\t}\n\t}\n\n\tif (/-256(color)?$/i.test(env.TERM)) {\n\t\treturn 2;\n\t}\n\n\tif (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {\n\t\treturn 1;\n\t}\n\n\tif ('COLORTERM' in env) {\n\t\treturn 1;\n\t}\n\n\treturn min;\n}\n\nfunction getSupportLevel(stream) {\n\tconst level = supportsColor(stream, stream && stream.isTTY);\n\treturn translateLevel(level);\n}\n\nmodule.exports = {\n\tsupportsColor: getSupportLevel,\n\tstdout: translateLevel(supportsColor(true, tty.isatty(1))),\n\tstderr: translateLevel(supportsColor(true, tty.isatty(2)))\n};\n/license\u0004UMIT License\n\nCopyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)\n\nPermission 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:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE 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.\n/readme.md\b# supports-color [![Build Status](https://travis-ci.org/chalk/supports-color.svg?branch=master)](https://travis-ci.org/chalk/supports-color)\n\n> Detect whether a terminal supports color\n\n\n## Install\n\n```\n$ npm install supports-color\n```\n\n\n## Usage\n\n```js\nconst supportsColor = require('supports-color');\n\nif (supportsColor.stdout) {\n\tconsole.log('Terminal stdout supports color');\n}\n\nif (supportsColor.stdout.has256) {\n\tconsole.log('Terminal stdout supports 256 colors');\n}\n\nif (supportsColor.stderr.has16m) {\n\tconsole.log('Terminal stderr supports 16 million colors (truecolor)');\n}\n```\n\n\n## API\n\nReturns an `Object` with a `stdout` and `stderr` property for testing either streams. Each property is an `Object`, or `false` if color is not supported.\n\nThe `stdout`/`stderr` objects specifies a level of support for color through a `.level` property and a corresponding flag:\n\n- `.level = 1` and `.hasBasic = true`: Basic color support (16 colors)\n- `.level = 2` and `.has256 = true`: 256 color support\n- `.level = 3` and `.has16m = true`: Truecolor support (16 million colors)\n\n\n## Info\n\nIt obeys the `--color` and `--no-color` CLI flags.\n\nFor situations where using `--color` is not possible, use the environment variable `FORCE_COLOR=1` (level 1), `FORCE_COLOR=2` (level 2), or `FORCE_COLOR=3` (level 3) to forcefully enable color, or `FORCE_COLOR=0` to forcefully disable. The use of `FORCE_COLOR` overrides all other color support checks.\n\nExplicit 256/Truecolor mode can be enabled using the `--color=256` and `--color=16m` flags, respectively.\n\n\n## Related\n\n- [supports-color-cli](https://github.com/chalk/supports-color-cli) - CLI for this module\n- [chalk](https://github.com/chalk/chalk) - Terminal string styling done right\n\n\n## Maintainers\n\n- [Sindre Sorhus](https://github.com/sindresorhus)\n- [Josh Junon](https://github.com/qix-)\n\n\n---\n\n<div align=\"center\">\n\t<b>\n\t\t<a href=\"https://tidelift.com/subscription/pkg/npm-supports-color?utm_source=npm-supports-color&utm_medium=referral&utm_campaign=readme\">Get professional support for this package with a Tidelift subscription</a>\n\t</b>\n\t<br>\n\t<sub>\n\t\tTidelift helps make open source sustainable for maintainers while giving companies<br>assurances about security, maintenance, and licensing for their dependencies.\n\t</sub>\n</div>\n\n---\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/c3VwcG9ydHMtcHJlc2VydmUtc3ltbGlua3MtZmxhZ0AxLjAuMA==",
    "content": "/test/index.js\u0002'use strict';\n\nvar test = require('tape');\nvar semver = require('semver');\n\nvar supportsPreserveSymlinks = require('../');\nvar browser = require('../browser');\n\ntest('supportsPreserveSymlinks', function (t) {\n\tt.equal(typeof supportsPreserveSymlinks, 'boolean', 'is a boolean');\n\n\tt.equal(browser, null, 'browser file is `null`');\n\tt.equal(\n\t\tsupportsPreserveSymlinks,\n\t\tnull,\n\t\t'in a browser, is null',\n\t\t{ skip: typeof window === 'undefined' }\n\t);\n\n\tvar expected = semver.satisfies(process.version, '>= 6.2');\n\tt.equal(\n\t\tsupportsPreserveSymlinks,\n\t\texpected,\n\t\t'is true in node v6.2+, false otherwise (actual: ' + supportsPreserveSymlinks + ', expected ' + expected + ')',\n\t\t{ skip: typeof window !== 'undefined' }\n\t);\n\n\tt.end();\n});\n/README.md\b# node-supports-preserve-symlinks-flag <sup>[![Version Badge][npm-version-svg]][package-url]</sup>\n\n[![github actions][actions-image]][actions-url]\n[![coverage][codecov-image]][codecov-url]\n[![dependency status][deps-svg]][deps-url]\n[![dev dependency status][dev-deps-svg]][dev-deps-url]\n[![License][license-image]][license-url]\n[![Downloads][downloads-image]][downloads-url]\n\n[![npm badge][npm-badge-png]][package-url]\n\nDetermine if the current node version supports the `--preserve-symlinks` flag.\n\n## Example\n\n```js\nvar supportsPreserveSymlinks = require('node-supports-preserve-symlinks-flag');\nvar assert = require('assert');\n\nassert.equal(supportsPreserveSymlinks, null); // in a browser\nassert.equal(supportsPreserveSymlinks, false); // in node < v6.2\nassert.equal(supportsPreserveSymlinks, true); // in node v6.2+\n```\n\n## Tests\nSimply clone the repo, `npm install`, and run `npm test`\n\n[package-url]: https://npmjs.org/package/node-supports-preserve-symlinks-flag\n[npm-version-svg]: https://versionbadg.es/inspect-js/node-supports-preserve-symlinks-flag.svg\n[deps-svg]: https://david-dm.org/inspect-js/node-supports-preserve-symlinks-flag.svg\n[deps-url]: https://david-dm.org/inspect-js/node-supports-preserve-symlinks-flag\n[dev-deps-svg]: https://david-dm.org/inspect-js/node-supports-preserve-symlinks-flag/dev-status.svg\n[dev-deps-url]: https://david-dm.org/inspect-js/node-supports-preserve-symlinks-flag#info=devDependencies\n[npm-badge-png]: https://nodei.co/npm/node-supports-preserve-symlinks-flag.png?downloads=true&stars=true\n[license-image]: https://img.shields.io/npm/l/node-supports-preserve-symlinks-flag.svg\n[license-url]: LICENSE\n[downloads-image]: https://img.shields.io/npm/dm/node-supports-preserve-symlinks-flag.svg\n[downloads-url]: https://npm-stat.com/charts.html?package=node-supports-preserve-symlinks-flag\n[codecov-image]: https://codecov.io/gh/inspect-js/node-supports-preserve-symlinks-flag/branch/main/graphs/badge.svg\n[codecov-url]: https://app.codecov.io/gh/inspect-js/node-supports-preserve-symlinks-flag/\n[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/inspect-js/node-supports-preserve-symlinks-flag\n[actions-url]: https://github.com/inspect-js/node-supports-preserve-symlinks-flag/actions\n/index.js\u0001%'use strict';\n\nmodule.exports = (\n// node 12+\n\tprocess.allowedNodeEnvironmentFlags && process.allowedNodeEnvironmentFlags.has('--preserve-symlinks')\n) || (\n// node v6.2 - v11\n\tString(module.constructor._findPath).indexOf('preserveSymlinks') >= 0 // eslint-disable-line no-underscore-dangle\n);\n/package.json\u0007g{\n\t\"name\": \"supports-preserve-symlinks-flag\",\n\t\"version\": \"1.0.0\",\n\t\"description\": \"Determine if the current node version supports the `--preserve-symlinks` flag.\",\n\t\"main\": \"./index.js\",\n\t\"browser\": \"./browser.js\",\n\t\"exports\": {\n\t\t\".\": [\n\t\t\t{\n\t\t\t\t\"browser\": \"./browser.js\",\n\t\t\t\t\"default\": \"./index.js\"\n\t\t\t},\n\t\t\t\"./index.js\"\n\t\t],\n\t\t\"./package.json\": \"./package.json\"\n\t},\n\t\"sideEffects\": false,\n\t\"scripts\": {\n\t\t\"prepublishOnly\": \"safe-publish-latest\",\n\t\t\"prepublish\": \"not-in-publish || npm run prepublishOnly\",\n\t\t\"lint\": \"eslint --ext=js,mjs .\",\n\t\t\"pretest\": \"npm run lint\",\n\t\t\"tests-only\": \"nyc tape 'test/**/*.js'\",\n\t\t\"test\": \"npm run tests-only\",\n\t\t\"posttest\": \"aud --production\",\n\t\t\"version\": \"auto-changelog && git add CHANGELOG.md\",\n\t\t\"postversion\": \"auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \\\"v$(node -e \\\"console.log(require('./package.json').version)\\\")\\\"\"\n\t},\n\t\"repository\": {\n\t\t\"type\": \"git\",\n\t\t\"url\": \"git+https://github.com/inspect-js/node-supports-preserve-symlinks-flag.git\"\n\t},\n\t\"keywords\": [\n\t\t\"node\",\n\t\t\"flag\",\n\t\t\"symlink\",\n\t\t\"symlinks\",\n\t\t\"preserve-symlinks\"\n\t],\n\t\"author\": \"Jordan Harband <ljharb@gmail.com>\",\n\t\"funding\": {\n\t\t\"url\": \"https://github.com/sponsors/ljharb\"\n\t},\n\t\"license\": \"MIT\",\n\t\"bugs\": {\n\t\t\"url\": \"https://github.com/inspect-js/node-supports-preserve-symlinks-flag/issues\"\n\t},\n\t\"homepage\": \"https://github.com/inspect-js/node-supports-preserve-symlinks-flag#readme\",\n\t\"devDependencies\": {\n\t\t\"@ljharb/eslint-config\": \"^20.1.0\",\n\t\t\"aud\": \"^1.1.5\",\n\t\t\"auto-changelog\": \"^2.3.0\",\n\t\t\"eslint\": \"^8.6.0\",\n\t\t\"nyc\": \"^10.3.2\",\n\t\t\"safe-publish-latest\": \"^2.0.0\",\n\t\t\"semver\": \"^6.3.0\",\n\t\t\"tape\": \"^5.4.0\"\n\t},\n\t\"engines\": {\n\t\t\"node\": \">= 0.4\"\n\t},\n\t\"auto-changelog\": {\n\t\t\"output\": \"CHANGELOG.md\",\n\t\t\"template\": \"keepachangelog\",\n\t\t\"unreleased\": false,\n\t\t\"commitLimit\": false,\n\t\t\"backfillLimit\": false,\n\t\t\"hideCredit\": true\n\t}\n}\n/.nycrcċ{\n\t\"all\": true,\n\t\"check-coverage\": false,\n\t\"reporter\": [\"text-summary\", \"text\", \"html\", \"json\"],\n\t\"exclude\": [\n\t\t\"coverage\",\n\t\t\"test\"\n\t]\n}\n/LICENSE\u0004+MIT License\n\nCopyright (c) 2022 Inspect JS\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n/CHANGELOG.md\u0007# Changelog\n\nAll notable changes to this project will be documented in this file.\n\nThe format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)\nand this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).\n\n## v1.0.0 - 2022-01-02\n\n### Commits\n\n- Tests [`e2f59ad`](https://github.com/inspect-js/node-supports-preserve-symlinks-flag/commit/e2f59ad74e2ae0f5f4899fcde6a6f693ab7cc074)\n- Initial commit [`dc222aa`](https://github.com/inspect-js/node-supports-preserve-symlinks-flag/commit/dc222aad3c0b940d8d3af1ca9937d108bd2dc4b9)\n- [meta] do not publish workflow files [`5ef77f7`](https://github.com/inspect-js/node-supports-preserve-symlinks-flag/commit/5ef77f7cb6946d16ee38672be9ec0f1bbdf63262)\n- npm init [`992b068`](https://github.com/inspect-js/node-supports-preserve-symlinks-flag/commit/992b068503a461f7e8676f40ca2aab255fd8d6ff)\n- read me [`6c9afa9`](https://github.com/inspect-js/node-supports-preserve-symlinks-flag/commit/6c9afa9fabc8eaf0814aaed6dd01e6df0931b76d)\n- Initial implementation [`2f98925`](https://github.com/inspect-js/node-supports-preserve-symlinks-flag/commit/2f9892546396d4ab0ad9f1ff83e76c3f01234ae8)\n- [meta] add `auto-changelog` [`6c476ae`](https://github.com/inspect-js/node-supports-preserve-symlinks-flag/commit/6c476ae1ed7ce68b0480344f090ac2844f35509d)\n- [Dev Deps] add `eslint`, `@ljharb/eslint-config` [`d0fffc8`](https://github.com/inspect-js/node-supports-preserve-symlinks-flag/commit/d0fffc886d25fba119355520750a909d64da0087)\n- Only apps should have lockfiles [`ab318ed`](https://github.com/inspect-js/node-supports-preserve-symlinks-flag/commit/ab318ed7ae62f6c2c0e80a50398d40912afd8f69)\n- [meta] add `safe-publish-latest` [`2bb23b3`](https://github.com/inspect-js/node-supports-preserve-symlinks-flag/commit/2bb23b3ebab02dc4135c4cdf0217db82835b9fca)\n- [meta] add `sideEffects` flag [`600223b`](https://github.com/inspect-js/node-supports-preserve-symlinks-flag/commit/600223ba24f30779f209d9097721eff35ed62741)\n/.github/FUNDING.yml\u0002Y# These are supported funding model platforms\n\ngithub: [ljharb]\npatreon: # Replace with a single Patreon username\nopen_collective: # Replace with a single Open Collective username\nko_fi: # Replace with a single Ko-fi username\ntidelift: npm/supports-preserve-symlink-flag\ncommunity_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry\nliberapay: # Replace with a single Liberapay username\nissuehunt: # Replace with a single IssueHunt username\notechie: # Replace with a single Otechie username\ncustom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']\n/browser.js&'use strict';\n\nmodule.exports = null;\n/.eslintrcĄ{\n\t\"root\": true,\n\n\t\"extends\": \"@ljharb\",\n\n\t\"env\": {\n\t\t\"browser\": true,\n\t\t\"node\": true,\n\t},\n\n\t\"rules\": {\n\t\t\"id-length\": \"off\",\n\t},\n}\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/c3ZlbHRlLWhtckAwLjE1LjE=",
    "content": "/package.json\u0004J{\n  \"name\": \"svelte-hmr\",\n  \"version\": \"0.15.1\",\n  \"description\": \"Bundler agnostic HMR utils for Svelte 3\",\n  \"main\": \"index.js\",\n  \"author\": \"rixo <rixo@rixo.fr>\",\n  \"license\": \"ISC\",\n  \"homepage\": \"https://github.com/sveltejs/svelte-hmr\",\n  \"bugs\": {\n    \"url\": \"https://github.com/sveltejs/svelte-hmr/issues\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/sveltejs/svelte-hmr\",\n    \"directory\": \"packages/svelte-hmr\"\n  },\n  \"files\": [\n    \"index.js\",\n    \"lib\",\n    \"runtime\"\n  ],\n  \"engines\": {\n    \"node\": \"^12.20 || ^14.13.1 || >= 16\"\n  },\n  \"peerDependencies\": {\n    \"svelte\": \">=3.19.0\"\n  },\n  \"devDependencies\": {\n    \"dotenv\": \"^10.0.0\",\n    \"prettier\": \"^1.19.1\",\n    \"svelte\": \"^3.50.1\",\n    \"tap-mocha-reporter\": \"^5.0.1\",\n    \"zoar\": \"^0.3.0\",\n    \"zorax\": \"^0.0.12\"\n  },\n  \"scripts\": {\n    \"lint\": \"eslint '**/*.{js,cjs,mjs}'\",\n    \"lint:fix\": \"pnpm run lint --fix\",\n    \"format\": \"prettier '**/*.{js,cjs,mjs}' --check\",\n    \"format:fix\": \"pnpm run format --write\",\n    \"test:fancy\": \"zoar --pipe 'tap-mocha-reporter spec'\",\n    \"test\": \"zoar --exit\"\n  }\n}/runtime/overlay.js\u000bK/* eslint-env browser */\n\nconst removeElement = el => el && el.parentNode && el.parentNode.removeChild(el)\n\nconst ErrorOverlay = () => {\n  let errors = []\n  let compileError = null\n\n  const errorsTitle = 'Failed to init component'\n  const compileErrorTitle = 'Failed to compile'\n\n  const style = {\n    section: `\n      position: fixed;\n      top: 0;\n      bottom: 0;\n      left: 0;\n      right: 0;\n      padding: 32px;\n      background: rgba(0, 0, 0, .85);\n      font-family: Menlo, Consolas, monospace;\n      font-size: large;\n      color: rgb(232, 232, 232);\n      overflow: auto;\n      z-index: 2147483647;\n    `,\n    h1: `\n      margin-top: 0;\n      color: #E36049;\n      font-size: large;\n      font-weight: normal;\n    `,\n    h2: `\n      margin: 32px 0 0;\n      font-size: large;\n      font-weight: normal;\n    `,\n    pre: ``,\n  }\n\n  const createOverlay = () => {\n    const h1 = document.createElement('h1')\n    h1.style = style.h1\n    const section = document.createElement('section')\n    section.appendChild(h1)\n    section.style = style.section\n    const body = document.createElement('div')\n    section.appendChild(body)\n    return { h1, el: section, body }\n  }\n\n  const setTitle = title => {\n    overlay.h1.textContent = title\n  }\n\n  const show = () => {\n    const { el } = overlay\n    if (!el.parentNode) {\n      const target = document.body\n      target.appendChild(overlay.el)\n    }\n  }\n\n  const hide = () => {\n    const { el } = overlay\n    if (el.parentNode) {\n      overlay.el.remove()\n    }\n  }\n\n  const update = () => {\n    if (compileError) {\n      overlay.body.innerHTML = ''\n      setTitle(compileErrorTitle)\n      const errorEl = renderError(compileError)\n      overlay.body.appendChild(errorEl)\n      show()\n    } else if (errors.length > 0) {\n      overlay.body.innerHTML = ''\n      setTitle(errorsTitle)\n      errors.forEach(({ title, message }) => {\n        const errorEl = renderError(message, title)\n        overlay.body.appendChild(errorEl)\n      })\n      show()\n    } else {\n      hide()\n    }\n  }\n\n  const renderError = (message, title) => {\n    const div = document.createElement('div')\n    if (title) {\n      const h2 = document.createElement('h2')\n      h2.textContent = title\n      h2.style = style.h2\n      div.appendChild(h2)\n    }\n    const pre = document.createElement('pre')\n    pre.textContent = message\n    div.appendChild(pre)\n    return div\n  }\n\n  const addError = (error, title) => {\n    const message = (error && error.stack) || error\n    errors.push({ title, message })\n    update()\n  }\n\n  const clearErrors = () => {\n    errors.forEach(({ element }) => {\n      removeElement(element)\n    })\n    errors = []\n    update()\n  }\n\n  const setCompileError = message => {\n    compileError = message\n    update()\n  }\n\n  const overlay = createOverlay()\n\n  return {\n    addError,\n    clearErrors,\n    setCompileError,\n  }\n}\n\nexport default ErrorOverlay\n/LICENSE\u0002Copyright 2019 - 2020, rixo and the svelte-hmr contributors.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted, provided that the above\ncopyright notice and this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\nWITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\nANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION\nOF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN\nCONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n/runtime/hot-api-esm.jsęimport { makeApplyHmr } from '../runtime/index.js'\n\nexport const applyHmr = makeApplyHmr(args =>\n  Object.assign({}, args, {\n    hot: args.m.hot,\n  })\n)\n/runtime/hot-api.js\u0011x/* eslint-env browser */\n\nimport { createProxy, hasFatalError } from './proxy.js'\n\nconst logPrefix = '[HMR:Svelte]'\n\n// eslint-disable-next-line no-console\nconst log = (...args) => console.log(logPrefix, ...args)\n\nconst domReload = () => {\n  // eslint-disable-next-line no-undef\n  const win = typeof window !== 'undefined' && window\n  if (win && win.location && win.location.reload) {\n    log('Reload')\n    win.location.reload()\n  } else {\n    log('Full reload required')\n  }\n}\n\nconst replaceCss = (previousId, newId) => {\n  if (typeof document === 'undefined') return false\n  if (!previousId) return false\n  if (!newId) return false\n  // svelte-xxx-style => svelte-xxx\n  const previousClass = previousId.slice(0, -6)\n  const newClass = newId.slice(0, -6)\n  // eslint-disable-next-line no-undef\n  document.querySelectorAll('.' + previousClass).forEach(el => {\n    el.classList.remove(previousClass)\n    el.classList.add(newClass)\n  })\n  return true\n}\n\nconst removeStylesheet = cssId => {\n  if (cssId == null) return\n  if (typeof document === 'undefined') return\n  // eslint-disable-next-line no-undef\n  const el = document.getElementById(cssId)\n  if (el) el.remove()\n  return\n}\n\nconst defaultArgs = {\n  reload: domReload,\n}\n\nexport const makeApplyHmr = transformArgs => args => {\n  const allArgs = transformArgs({ ...defaultArgs, ...args })\n  return applyHmr(allArgs)\n}\n\nlet needsReload = false\n\nfunction applyHmr(args) {\n  const {\n    id,\n    cssId,\n    nonCssHash,\n    reload = domReload,\n    // normalized hot API (must conform to rollup-plugin-hot)\n    hot,\n    hotOptions,\n    Component,\n    acceptable, // some types of components are impossible to HMR correctly\n    preserveLocalState,\n    ProxyAdapter,\n    emitCss,\n  } = args\n\n  const existing = hot.data && hot.data.record\n\n  const canAccept = acceptable && (!existing || existing.current.canAccept)\n\n  const r =\n    existing ||\n    createProxy({\n      Adapter: ProxyAdapter,\n      id,\n      Component,\n      hotOptions,\n      canAccept,\n      preserveLocalState,\n    })\n\n  const cssOnly =\n    hotOptions.injectCss &&\n    existing &&\n    nonCssHash &&\n    existing.current.nonCssHash === nonCssHash\n\n  r.update({\n    Component,\n    hotOptions,\n    canAccept,\n    nonCssHash,\n    cssId,\n    previousCssId: r.current.cssId,\n    cssOnly,\n    preserveLocalState,\n  })\n\n  hot.dispose(data => {\n    // handle previous fatal errors\n    if (needsReload || hasFatalError()) {\n      if (hotOptions && hotOptions.noReload) {\n        log('Full reload required')\n      } else {\n        reload()\n      }\n    }\n\n    // 2020-09-21 Snowpack master doesn't pass data as arg to dispose handler\n    data = data || hot.data\n\n    data.record = r\n\n    if (!emitCss && cssId && r.current.cssId !== cssId) {\n      if (hotOptions.cssEjectDelay) {\n        setTimeout(() => removeStylesheet(cssId), hotOptions.cssEjectDelay)\n      } else {\n        removeStylesheet(cssId)\n      }\n    }\n  })\n\n  if (canAccept) {\n    hot.accept(async arg => {\n      const { bubbled } = arg || {}\n\n      // NOTE Snowpack registers accept handlers only once, so we can NOT rely\n      // on the surrounding scope variables -- they're not the last version!\n      const { cssId: newCssId, previousCssId } = r.current\n      const cssChanged = newCssId !== previousCssId\n      // ensure old style sheet has been removed by now\n      if (!emitCss && cssChanged) removeStylesheet(previousCssId)\n      // guard: css only change\n      if (\n        // NOTE bubbled is provided only by rollup-plugin-hot, and we\n        // can't safely assume a CSS only change without it... this means we\n        // can't support CSS only injection with Nollup or Webpack currently\n        bubbled === false && // WARNING check false, not falsy!\n        r.current.cssOnly &&\n        (!cssChanged || replaceCss(previousCssId, newCssId))\n      ) {\n        return\n      }\n\n      const success = await r.reload()\n\n      if (hasFatalError() || (!success && !hotOptions.optimistic)) {\n        needsReload = true\n      }\n    })\n  }\n\n  // well, endgame... we won't be able to render next updates, even successful,\n  // if we don't have proxies in svelte's tree\n  //\n  // since we won't return the proxy and the app will expect a svelte component,\n  // it's gonna crash... so it's best to report the real cause\n  //\n  // full reload required\n  //\n  const proxyOk = r && r.proxy\n  if (!proxyOk) {\n    throw new Error(`Failed to create HMR proxy for Svelte component ${id}`)\n  }\n\n  return r.proxy\n}\n/runtime/svelte-hooks.js*/**\n * Emulates forthcoming HMR hooks in Svelte.\n *\n * All references to private component state ($$) are now isolated in this\n * module.\n */\nimport {\n  current_component,\n  get_current_component,\n  set_current_component,\n} from 'svelte/internal'\n\nconst captureState = cmp => {\n  // sanity check: propper behaviour here is to crash noisily so that\n  // user knows that they're looking at something broken\n  if (!cmp) {\n    throw new Error('Missing component')\n  }\n  if (!cmp.$$) {\n    throw new Error('Invalid component')\n  }\n\n  const {\n    $$: { callbacks, bound, ctx, props },\n  } = cmp\n\n  const state = cmp.$capture_state()\n\n  // capturing current value of props (or we'll recreate the component with the\n  // initial prop values, that may have changed -- and would not be reflected in\n  // options.props)\n  const hmr_props_values = {}\n  Object.keys(cmp.$$.props).forEach(prop => {\n    hmr_props_values[prop] = ctx[props[prop]]\n  })\n\n  return {\n    ctx,\n    props,\n    callbacks,\n    bound,\n    state,\n    hmr_props_values,\n  }\n}\n\n// remapping all existing bindings (including hmr_future_foo ones) to the\n// new version's props indexes, and refresh them with the new value from\n// context\nconst restoreBound = (cmp, restore) => {\n  // reverse prop:ctxIndex in $$.props to ctxIndex:prop\n  //\n  // ctxIndex can be either a regular index in $$.ctx or a hmr_future_ prop\n  //\n  const propsByIndex = {}\n  for (const [name, i] of Object.entries(restore.props)) {\n    propsByIndex[i] = name\n  }\n\n  // NOTE $$.bound cannot change in the HMR lifetime of a component, because\n  //      if bindings changes, that means the parent component has changed,\n  //      which means the child (current) component will be wholly recreated\n  for (const [oldIndex, updateBinding] of Object.entries(restore.bound)) {\n    // can be either regular prop, or future_hmr_ prop\n    const propName = propsByIndex[oldIndex]\n\n    // this should never happen if remembering of future props is enabled...\n    // in any case, there's nothing we can do about it if we have lost prop\n    // name knowledge at this point\n    if (propName == null) continue\n\n    // NOTE $$.props[propName] also propagates knowledge of a possible\n    //      future prop to the new $$.props (via $$.props being a Proxy)\n    const newIndex = cmp.$$.props[propName]\n    cmp.$$.bound[newIndex] = updateBinding\n\n    // NOTE if the prop doesn't exist or doesn't exist anymore in the new\n    //      version of the component, clearing the binding is the expected\n    //      behaviour (since that's what would happen in non HMR code)\n    const newValue = cmp.$$.ctx[newIndex]\n    updateBinding(newValue)\n  }\n}\n\n// restoreState\n//\n// It is too late to restore context at this point because component instance\n// function has already been called (and so context has already been read).\n// Instead, we rely on setting current_component to the same value it has when\n// the component was first rendered -- which fix support for context, and is\n// also generally more respectful of normal operation.\n//\nconst restoreState = (cmp, restore) => {\n  if (!restore) return\n\n  if (restore.callbacks) {\n    cmp.$$.callbacks = restore.callbacks\n  }\n\n  if (restore.bound) {\n    restoreBound(cmp, restore)\n  }\n\n  // props, props.$$slots are restored at component creation (works\n  // better -- well, at all actually)\n}\n\nconst get_current_component_safe = () => {\n  // NOTE relying on dynamic bindings (current_component) makes us dependent on\n  // bundler config (and apparently it does not work in demo-svelte-nollup)\n  try {\n    // unfortunately, unlike current_component, get_current_component() can\n    // crash in the normal path (when there is really no parent)\n    return get_current_component()\n  } catch (err) {\n    // ... so we need to consider that this error means that there is no parent\n    //\n    // that makes us tightly coupled to the error message but, at least, we\n    // won't mute an unexpected error, which is quite a horrible thing to do\n    if (err.message === 'Function called outside component initialization') {\n      // who knows...\n      return current_component\n    } else {\n      throw err\n    }\n  }\n}\n\nexport const createProxiedComponent = (\n  Component,\n  initialOptions,\n  { allowLiveBinding, onInstance, onMount, onDestroy }\n) => {\n  let cmp\n  let options = initialOptions\n\n  const isCurrent = _cmp => cmp === _cmp\n\n  const assignOptions = (target, anchor, restore, preserveLocalState) => {\n    const props = Object.assign({}, options.props)\n\n    // Filtering props to avoid \"unexpected prop\" warning\n    // NOTE this is based on props present in initial options, but it should\n    //      always works, because props that are passed from the parent can't\n    //      change without a code change to the parent itself -- hence, the\n    //      child component will be fully recreated, and initial options should\n    //      always represent props that are currnetly passed by the parent\n    if (options.props && restore.hmr_props_values) {\n      for (const prop of Object.keys(options.props)) {\n        if (restore.hmr_props_values.hasOwnProperty(prop)) {\n          props[prop] = restore.hmr_props_values[prop]\n        }\n      }\n    }\n\n    if (preserveLocalState && restore.state) {\n      if (Array.isArray(preserveLocalState)) {\n        // form ['a', 'b'] => preserve only 'a' and 'b'\n        props.$$inject = {}\n        for (const key of preserveLocalState) {\n          props.$$inject[key] = restore.state[key]\n        }\n      } else {\n        props.$$inject = restore.state\n      }\n    } else {\n      delete props.$$inject\n    }\n    options = Object.assign({}, initialOptions, {\n      target,\n      anchor,\n      props,\n      hydrate: false,\n    })\n  }\n\n  // Preserving knowledge of \"future props\" -- very hackish version (maybe\n  // there should be an option to opt out of this)\n  //\n  // The use case is bind:something where something doesn't exist yet in the\n  // target component, but comes to exist later, after a HMR update.\n  //\n  // If Svelte can't map a prop in the current version of the component, it\n  // will just completely discard it:\n  // https://github.com/sveltejs/svelte/blob/1632bca34e4803d6b0e0b0abd652ab5968181860/src/runtime/internal/Component.ts#L46\n  //\n  const rememberFutureProps = cmp => {\n    if (typeof Proxy === 'undefined') return\n\n    cmp.$$.props = new Proxy(cmp.$$.props, {\n      get(target, name) {\n        if (target[name] === undefined) {\n          target[name] = 'hmr_future_' + name\n        }\n        return target[name]\n      },\n      set(target, name, value) {\n        target[name] = value\n      },\n    })\n  }\n\n  const instrument = targetCmp => {\n    const createComponent = (Component, restore, previousCmp) => {\n      set_current_component(parentComponent || previousCmp)\n      const comp = new Component(options)\n      // NOTE must be instrumented before restoreState, because restoring\n      // bindings relies on hacked $$.props\n      instrument(comp)\n      restoreState(comp, restore)\n      return comp\n    }\n\n    rememberFutureProps(targetCmp)\n\n    targetCmp.$$.on_hmr = []\n\n    // `conservative: true` means we want to be sure that the new component has\n    // actually been successfuly created before destroying the old instance.\n    // This could be useful for preventing runtime errors in component init to\n    // bring down the whole HMR. Unfortunately the implementation bellow is\n    // broken (FIXME), but that remains an interesting target for when HMR hooks\n    // will actually land in Svelte itself.\n    //\n    // The goal would be to render an error inplace in case of error, to avoid\n    // losing the navigation stack (especially annoying in native, that is not\n    // based on URL navigation, so we lose the current page on each error).\n    //\n    targetCmp.$replace = (\n      Component,\n      {\n        target = options.target,\n        anchor = options.anchor,\n        preserveLocalState,\n        conservative = false,\n      }\n    ) => {\n      const restore = captureState(targetCmp)\n      assignOptions(\n        target || options.target,\n        anchor,\n        restore,\n        preserveLocalState\n      )\n\n      const callbacks = cmp ? cmp.$$.on_hmr : []\n\n      const afterCallbacks = callbacks.map(fn => fn(cmp)).filter(Boolean)\n\n      const previous = cmp\n      if (conservative) {\n        try {\n          const next = createComponent(Component, restore, previous)\n          // prevents on_destroy from firing on non-final cmp instance\n          cmp = null\n          previous.$destroy()\n          cmp = next\n        } catch (err) {\n          cmp = previous\n          throw err\n        }\n      } else {\n        // prevents on_destroy from firing on non-final cmp instance\n        cmp = null\n        if (previous) {\n          // previous can be null if last constructor has crashed\n          previous.$destroy()\n        }\n        cmp = createComponent(Component, restore, cmp)\n      }\n\n      cmp.$$.hmr_cmp = cmp\n\n      for (const fn of afterCallbacks) {\n        fn(cmp)\n      }\n\n      cmp.$$.on_hmr = callbacks\n\n      return cmp\n    }\n\n    // NOTE onMount must provide target & anchor (for us to be able to determinate\n    // \t\t\tactual DOM insertion point)\n    //\n    // \t\t\tAnd also, to support keyed list, it needs to be called each time the\n    // \t\t\tcomponent is moved (same as $$.fragment.m)\n    if (onMount) {\n      const m = targetCmp.$$.fragment.m\n      targetCmp.$$.fragment.m = (...args) => {\n        const result = m(...args)\n        onMount(...args)\n        return result\n      }\n    }\n\n    // NOTE onDestroy must be called even if the call doesn't pass through the\n    //      component's $destroy method (that we can hook onto by ourselves, since\n    //      it's public API) -- this happens a lot in svelte's internals, that\n    //      manipulates cmp.$$.fragment directly, often binding to fragment.d,\n    //      for example\n    if (onDestroy) {\n      targetCmp.$$.on_destroy.push(() => {\n        if (isCurrent(targetCmp)) {\n          onDestroy()\n        }\n      })\n    }\n\n    if (onInstance) {\n      onInstance(targetCmp)\n    }\n\n    // Svelte 3 creates and mount components from their constructor if\n    // options.target is present.\n    //\n    // This means that at this point, the component's `fragment.c` and,\n    // most notably, `fragment.m` will already have been called _from inside\n    // createComponent_. That is: before we have a chance to hook on it.\n    //\n    // Proxy's constructor\n    //   -> createComponent\n    //     -> component constructor\n    //       -> component.$$.fragment.c(...) (or l, if hydrate:true)\n    //       -> component.$$.fragment.m(...)\n    //\n    //   -> you are here <-\n    //\n    if (onMount) {\n      const { target, anchor } = options\n      if (target) {\n        onMount(target, anchor)\n      }\n    }\n  }\n\n  const parentComponent = allowLiveBinding\n    ? current_component\n    : get_current_component_safe()\n\n  cmp = new Component(options)\n  cmp.$$.hmr_cmp = cmp\n\n  instrument(cmp)\n\n  return cmp\n}\n//runtime/svelte-native/patch-page-show-modal.js\u0007// This module monkey patches Page#showModal in order to be able to\n// access from the HMR proxy data passed to `showModal` in svelte-native.\n//\n// Data are stored in a opaque prop accessible with `getModalData`.\n//\n// It also switches the `closeCallback` option with a custom brewed one\n// in order to give the proxy control over when its own instance will be\n// destroyed.\n//\n// Obviously this method suffer from extreme coupling with the target code\n// in svelte-native. So it would be wise to recheck compatibility on SN\n// version upgrades.\n//\n// Relevant code is there (last checked version):\n//\n// https://github.com/halfnelson/svelte-native/blob/48fdc97d2eb4d3958cfcb4ff6cf5755a220829eb/src/dom/navigation.ts#L132\n//\n\n// FIXME should we override ViewBase#showModal instead?\n// eslint-disable-next-line import/no-unresolved\nimport { Page } from '@nativescript/core'\n\nconst prop =\n  typeof Symbol !== 'undefined'\n    ? Symbol('hmr_svelte_native_modal')\n    : '___HMR_SVELTE_NATIVE_MODAL___'\n\nconst sup = Page.prototype.showModal\n\nlet patched = false\n\nexport const patchShowModal = () => {\n  // guard: already patched\n  if (patched) return\n  patched = true\n\n  Page.prototype.showModal = function(modalView, options) {\n    const modalData = {\n      originalOptions: options,\n      closeCallback: options.closeCallback,\n    }\n\n    modalView[prop] = modalData\n\n    // Proxies to a function that can be swapped on the fly by HMR proxy.\n    //\n    // The default is still to call the original closeCallback from svelte\n    // navtive, which will destroy the modal view & component. This way, if\n    // no HMR happens on the modal content, normal behaviour is preserved\n    // without the proxy having any work to do.\n    //\n    const closeCallback = (...args) => {\n      return modalData.closeCallback(...args)\n    }\n\n    const tamperedOptions = Object.assign({}, options, { closeCallback })\n\n    return sup.call(this, modalView, tamperedOptions)\n  }\n}\n\nexport const getModalData = modalView => modalView[prop]\n./runtime/svelte-native/proxy-adapter-native.js-K/* global document */\n\nimport { adapter as ProxyAdapterDom } from '../proxy-adapter-dom'\n\nimport { patchShowModal, getModalData } from './patch-page-show-modal'\n\npatchShowModal()\n\n// Svelte Native support\n// =====================\n//\n// Rerendering Svelte Native page proves challenging...\n//\n// In NativeScript, pages are the top level component. They are normally\n// introduced into NativeScript's runtime by its `navigate` function. This\n// is how Svelte Natives handles it: it renders the Page component to a\n// dummy fragment, and \"navigate\" to the page element thus created.\n//\n// As long as modifications only impact child components of the page, then\n// we can keep the existing page and replace its content for HMR.\n//\n// However, if the page component itself is modified (including its system\n// title bar), things get hairy...\n//\n// Apparently, the sole way of introducing a new page in a NS application is\n// to navigate to it (no way to just replace it in its parent \"element\", for\n// example). This is how it is done in NS's own \"core\" HMR.\n//\n// NOTE The last paragraph has not really been confirmed with NS6.\n//\n// Unfortunately the API they're using to do that is not public... Its various\n// parts remain exposed though (but documented as private), so this exploratory\n// work now relies on it. It might be fragile...\n//\n// The problem is that there is no public API that can navigate to a page and\n// replace (like location.replace) the current history entry. Actually there\n// is an active issue at NS asking for that. Incidentally, members of\n// NativeScript-Vue have commented on the issue to weight in for it -- they\n// probably face some similar challenge.\n//\n// https://github.com/NativeScript/NativeScript/issues/6283\n\nconst getNavTransition = ({ transition }) => {\n  if (typeof transition === 'string') {\n    transition = { name: transition }\n  }\n  return transition ? { animated: true, transition } : { animated: false }\n}\n\n// copied from TNS FrameBase.replacePage\n//\n// it is not public but there is a comment in there indicating it is for\n// HMR (probably their own core HMR though)\n//\n// NOTE this \"worked\" in TNS 5, but not anymore in TNS 6: updated version bellow\n//\n// eslint-disable-next-line no-unused-vars\nconst replacePage_tns5 = (frame, newPageElement, hotOptions) => {\n  const currentBackstackEntry = frame._currentEntry\n  frame.navigationType = 2\n  frame.performNavigation({\n    isBackNavigation: false,\n    entry: {\n      resolvedPage: newPageElement.nativeView,\n      //\n      // entry: currentBackstackEntry.entry,\n      entry: Object.assign(\n        currentBackstackEntry.entry,\n        getNavTransition(hotOptions)\n      ),\n      navDepth: currentBackstackEntry.navDepth,\n      fragmentTag: currentBackstackEntry.fragmentTag,\n      frameId: currentBackstackEntry.frameId,\n    },\n  })\n}\n\n// Updated for TNS v6\n//\n// https://github.com/NativeScript/NativeScript/blob/6.1.1/tns-core-modules/ui/frame/frame-common.ts#L656\nconst replacePage = (frame, newPageElement) => {\n  const currentBackstackEntry = frame._currentEntry\n  const newPage = newPageElement.nativeView\n  const newBackstackEntry = {\n    entry: currentBackstackEntry.entry,\n    resolvedPage: newPage,\n    navDepth: currentBackstackEntry.navDepth,\n    fragmentTag: currentBackstackEntry.fragmentTag,\n    frameId: currentBackstackEntry.frameId,\n  }\n  const navigationContext = {\n    entry: newBackstackEntry,\n    isBackNavigation: false,\n    navigationType: 2 /* NavigationType replace */,\n  }\n  frame._navigationQueue.push(navigationContext)\n  frame._processNextNavigationEntry()\n}\n\nexport const adapter = class ProxyAdapterNative extends ProxyAdapterDom {\n  constructor(instance) {\n    super(instance)\n\n    this.nativePageElement = null\n    this.originalNativeView = null\n    this.navigatedFromHandler = null\n\n    this.relayNativeNavigatedFrom = this.relayNativeNavigatedFrom.bind(this)\n  }\n\n  dispose() {\n    super.dispose()\n    this.releaseNativePageElement()\n  }\n\n  releaseNativePageElement() {\n    if (this.nativePageElement) {\n      // native cleaning will happen when navigating back from the page\n      this.nativePageElement = null\n    }\n  }\n\n  // svelte-native uses navigateFrom event + e.isBackNavigation to know\n  // when to $destroy the component -- but we don't want our proxy instance\n  // destroyed when we renavigate to the same page for navigation purposes!\n  interceptPageNavigation(pageElement) {\n    const originalNativeView = pageElement.nativeView\n    const { on } = originalNativeView\n    const ownOn = originalNativeView.hasOwnProperty('on')\n    // tricks svelte-native into giving us its handler\n    originalNativeView.on = function(type, handler) {\n      if (type === 'navigatedFrom') {\n        this.navigatedFromHandler = handler\n        if (ownOn) {\n          originalNativeView.on = on\n        } else {\n          delete originalNativeView.on\n        }\n      } else {\n        //some other handler wireup, we will just pass it on.\n        if (on) {\n          on(type, handler)\n        }\n      }\n    }\n  }\n\n  afterMount(target, anchor) {\n    // nativePageElement needs to be updated each time (only for page\n    // components, native component that are not pages follow normal flow)\n    //\n    // TODO quid of components that are initially a page, but then have the\n    // <page> tag removed while running? or the opposite?\n    //\n    // insertionPoint needs to be updated _only when the target changes_ --\n    // i.e. when the component is mount, i.e. (in svelte3) when the component\n    // is _created_, and svelte3 doesn't allow it to move afterward -- that\n    // is, insertionPoint only needs to be created once when the component is\n    // first mounted.\n    //\n    // TODO is it really true that components' elements cannot move in the\n    // DOM? what about keyed list?\n    //\n\n    const isNativePage =\n      (target.tagName === 'fragment' || target.tagName === 'frame') &&\n      target.firstChild &&\n      target.firstChild.tagName == 'page'\n    if (isNativePage) {\n      const nativePageElement = target.firstChild\n      this.interceptPageNavigation(nativePageElement)\n      this.nativePageElement = nativePageElement\n    } else {\n      // try to protect against components changing from page to no-page\n      // or vice versa -- see DEBUG 1 above. NOT TESTED so prolly not working\n      this.nativePageElement = null\n      super.afterMount(target, anchor)\n    }\n  }\n\n  rerender() {\n    const { nativePageElement } = this\n    if (nativePageElement) {\n      this.rerenderNative()\n    } else {\n      super.rerender()\n    }\n  }\n\n  rerenderNative() {\n    const { nativePageElement: oldPageElement } = this\n    const nativeView = oldPageElement.nativeView\n    const frame = nativeView.frame\n    if (frame) {\n      return this.rerenderPage(frame, nativeView)\n    }\n    const modalParent = nativeView._modalParent // FIXME private API\n    if (modalParent) {\n      return this.rerenderModal(modalParent, nativeView)\n    }\n    // wtf? hopefully a race condition with a destroyed component, so\n    // we have nothing more to do here\n    //\n    // for once, it happens when hot reloading dev deps, like this file\n    //\n  }\n\n  rerenderPage(frame, previousPageView) {\n    const isCurrentPage = frame.currentPage === previousPageView\n    if (isCurrentPage) {\n      const {\n        instance: { hotOptions },\n      } = this\n      const newPageElement = this.createPage()\n      if (!newPageElement) {\n        throw new Error('Failed to create updated page')\n      }\n      const isFirstPage = !frame.canGoBack()\n\n      if (isFirstPage) {\n        // NOTE not so sure of bellow with the new NS6 method for replace\n        //\n        // The \"replacePage\" strategy does not work on the first page\n        // of the stack.\n        //\n        // Resulting bug:\n        // - launch\n        // - change first page => HMR\n        // - navigate to other page\n        // - back\n        //   => actual: back to OS\n        //   => expected: back to page 1\n        //\n        // Fortunately, we can overwrite history in this case.\n        //\n        const nativeView = newPageElement.nativeView\n        frame.navigate(\n          Object.assign(\n            {},\n            {\n              create: () => nativeView,\n              clearHistory: true,\n            },\n            getNavTransition(hotOptions)\n          )\n        )\n      } else {\n        replacePage(frame, newPageElement, hotOptions)\n      }\n    } else {\n      const backEntry = frame.backStack.find(\n        ({ resolvedPage: page }) => page === previousPageView\n      )\n      if (!backEntry) {\n        // well... looks like we didn't make it to history after all\n        return\n      }\n      // replace existing nativeView\n      const newPageElement = this.createPage()\n      if (newPageElement) {\n        backEntry.resolvedPage = newPageElement.nativeView\n      } else {\n        throw new Error('Failed to create updated page')\n      }\n    }\n  }\n\n  // modalParent is the page on which showModal(...) was called\n  // oldPageElement is the modal content, that we're actually trying to reload\n  rerenderModal(modalParent, modalView) {\n    const modalData = getModalData(modalView)\n\n    modalData.closeCallback = () => {\n      const nativePageElement = this.createPage()\n      if (!nativePageElement) {\n        throw new Error('Failed to created updated modal page')\n      }\n      const { nativeView } = nativePageElement\n      const { originalOptions } = modalData\n      // Options will get monkey patched again, the only work left for us\n      // is to try to reduce visual disturbances.\n      //\n      // FIXME Even that proves too much unfortunately... Apparently TNS\n      // does not respect the `animated` option in this context:\n      // https://docs.nativescript.org/api-reference/interfaces/_ui_core_view_base_.showmodaloptions#animated\n      //\n      const options = Object.assign({}, originalOptions, { animated: false })\n      modalParent.showModal(nativeView, options)\n    }\n\n    modalView.closeModal()\n  }\n\n  createPage() {\n    const {\n      instance: { refreshComponent },\n    } = this\n    const { nativePageElement, relayNativeNavigatedFrom } = this\n    const oldNativeView = nativePageElement.nativeView\n    // rerender\n    const target = document.createElement('fragment')\n    // not using conservative for now, since there's nothing in place here to\n    // leverage it (yet?) -- and it might be easier to miss breakages in native\n    // only code paths\n    refreshComponent(target, null)\n    // this.nativePageElement is updated in afterMount, triggered by proxy / hooks\n    const newPageElement = this.nativePageElement\n    // update event proxy\n    oldNativeView.off('navigatedFrom', relayNativeNavigatedFrom)\n    nativePageElement.nativeView.on('navigatedFrom', relayNativeNavigatedFrom)\n    return newPageElement\n  }\n\n  relayNativeNavigatedFrom({ isBackNavigation }) {\n    const { originalNativeView, navigatedFromHandler } = this\n    if (!isBackNavigation) {\n      return\n    }\n    if (originalNativeView) {\n      const { off } = originalNativeView\n      const ownOff = originalNativeView.hasOwnProperty('off')\n      originalNativeView.off = function() {\n        this.navigatedFromHandler = null\n        if (ownOff) {\n          originalNativeView.off = off\n        } else {\n          delete originalNativeView.off\n        }\n      }\n    }\n    if (navigatedFromHandler) {\n      return navigatedFromHandler.apply(this, arguments)\n    }\n  }\n\n  renderError(err /* , target, anchor */) {\n    // TODO fallback on TNS error handler for now... at least our error\n    // is more informative\n    throw err\n  }\n}\n/README.md1I# svelte-hmr\n\nHMR commons for Svelte 3.\n\nThis packages provides shared dependencies for implementing Svelte HMR in any bundler plugins.\n\nIf you want to _use_ HMR in your Svelte project, what you need is a HMR enabled plugin for your bundler (e.g. Rollup or Webpack). You'll find a list of available tools at the end of this doc.\n\nOn the other hand, if you are really developing a plugin... Sorry, no docs for now! Drop me a line, I'd be happy to help!\n\n## Features\n\n- update Svelte components in place\n\n- preservation of component state, including local state (i.e. `let` vars in your components)\n\n- inject CSS instead of doing a full replace when only the component's CSS has changed, with compatible HMR APIs (`rollup-plugin-hot`, Nollup, and Snowpack for now)\n\n## Options\n\nThose are the HMR options that are implemented by `svelte-hmr` itself, and so should be supported by any plugin listed bellow (especially if they include a link pointing to this section). How to pass those options is specific to each plugins, so refer to their specific docs on this point.\n\n#### noReload\n\nType: `bool`<br>\nDefault: `false`\n\nBy default, `svelte-hmr` will trigger a full browser reload when it detects an error that will prevent subsequent HMR updates to be applied correctly. Set this to `true` to prevent automatic reloads. Note that Svelte Native does _not_ execute in a browser, and so this option has no effect there.\n\n#### noPreserveState\n\n**Deprecated: removed and default changed from version 0.12. Use `preserveLocalState` instead.**\n\n#### preserveLocalState\n\nType: `bool`<br>\nDefault: `false`\n\nEnable [preservation of local state](#preservation-of-local-state) for all variables in all components.\n\n#### noPreserveStateKey\n\nType: `string`<br>\nDefault: `'@hmr:reset'` (also accepts legacy `'@!hmr'`)\n\nForce disable preservation of local state for this component.\n\nThis flag has priority over all other settings of state preservation. If it is present, all the state of the component will be reset on the next update, regardless of the value of all the other state preservation settings.\n\n```svelte\n<!-- @hmr:reset -->\n\n<script>\n  '@hmr:reset'\n\n  // @hmr:reset\n</script>\n```\n\n#### preserveAllLocalStateKey\n\nType: `string`<br>\nDefault: `'@hmr:keep-all'`\n\nForce preservation of all local variables of this component.\n\n```svelte\n<!-- @hmr:keep-all -->\n\n<script>\n  '@hmr:keep-all'\n\n  // @hmr:keep-all\n</script>\n```\n\n#### preserveLocalStateKey\n\nType: `string`<br>\nDefault: `'@hmr:keep'`\n\nForce preservation of a given local variable in this component.\n\n```svelte\n<script>\n  // @hmr:keep\n  let x = 0\n\n  let y = 0 // @hmr:keep\n\n  x = 1 // @hmr:keep\n</script>\n```\n\n#### optimistic\n\nType: `bool`<br>\nDefault: `false`\n\nWhen `false`, runtime errors during component init (i.e. when your `<script>` code is run) are considered fatal to HMR (hence worthy of a full reload if `noReload` option is not set). When `true`, `svelte-hmr` will try to render the next version of the component in the place of the one that has crashed instead of programming a full reload.\n\n## What's HMR, by the way?\n\n> **NOTE** To avoid repetition, the following text only mentions HMR in the context of browsers, but it can also be used in other platforms. For example `svelte-hmr` is also used in Svelte Native.\n\nHMR stands for Hot Module Replacement. It is a tool that is used during development to replace only the parts that have changed in a _running_ application, without the need to reload the whole browser page.\n\nIt's nice because it shortens your feedback loop (you don't lose the current state of the page you're working it with each code change), and it feels like magic! :sparkles:\n\nWell, since you're reading this, let me tell you a little more about HMR. Magic is actually not such a good think in software development, so if we can demystify HMR a bit, it will probably benefits you when it comes to answer setup questions or, generally, get the most out of your HMR experience.\n\nSo... There are multiple layers to HMR. The first one is the technical capacity to actually replace a JS _module_ (think ES module -- in practice a JS file) at runtime. This capacity is provided (or not) by your bundler or dev server (e.g. Webpack, Parcel, Vite, Snowpack...). A notable absent in the HMR capable bundlers is Rollup, but a HMR plugin exists, as well as a Rollup-compatible super fast dev bundler and server, Nollup (see links below).\n\nThe HMR capacity essentially revolves around watching your file system and sending events to the browser when this happens (and, of course, doing all the other bundler stuff, but they're not interesting for this discussion).\n\nIn the browser, we need something to receive and process those events. And so there is a HMR runtime (i.e. some JS code) that is injected in the browser when you enable HMR. This runtime exposes a HMR (or hot) API. The hot API differs with each bundler, even if there is some level of standardization. For example, `rollup-plugin-hot`'s API looks like this:\n\n```js\nif (imp‎ort.meta.hot) {\n  import.meta.hot.dispose(data => {\n    // do cleanup\n  })\n  import.meta.hot.accept(() => {\n    // adjust side effects\n  })\n}\n```\n\nWhy do we need a hot API?\n\nBecause just replacing a whole chunk of JS code doesn't really gets you what you want. Let's think about it: what does replacing a JS module really means? You can't unrun the previously executed module. So that's merely running the new version of the module.\n\nAnd that's about all what your HMR server will give you. But it's not enough. If your module was a helper function, new calls will go to the new version of the function, but the result of calling the previous version are still visible on the page. Same with a UI component: newly created components will be fresh, but existing components on the page are still from the previous versions...\n\nThat's why we need this hot API. We need to provide HMR handlers, that is HMR specific code to properly apply the effects of the code change in the app, and cleanup the effects of the previous module versions.\n\nActually, what should be done to reflect a code update is hyper specific to the content of the module. Typically, you'd need specific HMR handlers for each one of your modules (i.e. files). For most kind of contents, this cannot be automatized. Oh, and did I tell you that HMR handlers are pretty tedious things to write?\n\nOops. Does this makes HMR essentially worthless? No! Because, fortunately, there is one kind of content for which we know how to do automatic HMR handlers. Those are UI components. When a HMR update hits a component, we can destroy all existing instances of the component and replace them with new instances created with the updated version of the component. Bim. Well, there's also a part of dark magic involved because we need to recreate the new instances in the same state as the previous instance we're destroying. We need to pass the right props, transfer inner state, local state, event listeners, etc.\n\nThis kind of automatic HMR handlers for Svelte components -- and associated dark magic -- is what `svelte-hmr` provides! (For the sake of completeness, it also provides some Node utils to help bundlers apply the code transform needed to inject those HMR handlers into a Svelte component.)\n\nCool! So you can have HMR with a lot of your modules without having to write HMR handlers yourself, that's good news. And there are more. HMR APIs implements a _bubbling mechanism_. In HMR linguo, when a module has some HMR handlers, it is said to be \"accepted\". When a HMR update hits a module that is not accepted, this will not immediately translate into a full reload of the page. Instead, the HMR engine will check all the modules that imports the unaccepted module and, if they are all accepted, then it will refresh all those parent modules instead (refresh means running HMR handlers, here). If some of the parents are themselves unaccepted, the HMR update will continue to bubble up toward the app's entry point, stopping at accepted module on each branch. If an update hits the entry point (and the entry point itself is not accepted), then only will it command a full reload.\n\nIt makes sense: all those modules boast of being able to apply a code change to themselves so, if we refresh all of them, we should theoretically also see the updated effect of their dependencies, no? Well, unfortunately, it depends... If your updated module is exporting values or pure functions, it will work perfectly. If your module uses `setInterval` and there isn't a HMR handler to dispose that, the `setInterval` function will keep running (and each HMR update will probably add a new one). It all depends on how stateful or how much side effects your module has. But in many cases it can work and, in those cases, you'll also get HMR for free (since all HMR updates will probably be stopped by Svelte components). For the remaining cases... Well, you're probably left with [learning how to write HMR handlers](https://github.com/rixo/rollup-plugin-hot#api), or accept to manually reload the browser.\n\nHere you are. This is what HMR is, and how it works.\n\nI think the most important take away is that the component that is affected by a change will be recreated. Its state will be preserved but all its children will be recreated too, and their state not preserved. This is a necessity because the elements / child components structure of a component can be entirely different after the file has been modified (and we don't really have the technical capacity to track children).\n\nNow, the best way to see what it can do for you is probably to checkout the template bellow and get your hands at it! (Add 500 components and try Nollup, you should love the speed!)\n\n### Preservation of local state\n\n**From version 0.12** this behaviour has been deemed too confusing and hard to anticipate, so preservation of state is now disabled by default, and some escape hatches to preserve the state of some given variables have been added.\n\nLocal state can be preserved by Svelte HMR, that is any state that Svelte itself tracks as reactive (basically any root scope `let` vars, exported or not).\n\nThis means that in code like this:\n\n```svelte\n<script>\n  let x = 1\n  x++ // x is now 2\n</script>\n\n<p>{x}</p>\n```\n\nIf you replace `let x = 1` by `let x = 10` and save, the previous value of `x` will be preserved. That is, `x` will be 2 and not 10. The restoration of previous state happens _after_ the init code of the component has run, so the value will not be 11 either, despite the `x++` that is still here.\n\nIf you want this behaviour for all the state of all your components, you can enable it by setting the `preserveLocalState` option to `true`.\n\nIf you then want to disable it for just one particular file, or just temporarily, you can turn it off by adding a `// @hmr:reset` comment somewhere in your component.\n\nOn the contrary, if you keep the default `preserveLocalState` to `false`, you can enable preservation of all the local state of a given component by adding the following comment: `// @hmr:keep-all`. You can also preserve only the state of some specific variables, by annotating them with: `// @hmr:keep`.\n\nFor example:\n\n```svelte\n<script>\n  let x = 0 // @hmr:keep\n\n  // or:\n\n  // @hmr:keep\n  let y = 1,\n      z = 2\n</script>\n```\n\n## Svelte HMR tools\n\n### Vite\n\nThe [official Svelte plugin for Vite][vite-plugin-svelte] has HMR support.\n\n### Webpack\n\nThe [official loader for Webpack][svelte-loader] now has HMR support.\n\n### Rollup\n\nRollup does not natively support HMR, so we recommend using Vite. However, if you'd like to add HMR support to Rollup, the best way to get started is to refer to [svelte-template-hot], which demonstrates usage of both [rollup-plugin-hot] and [rollup-plugin-svelte-hot].\n\n### Svelte Native\n\nThe official [Svelte Native template][svelte-native-template] already includes HMR support.\n\n## License\n\n[ISC](LICENSE)\n\n[vite-plugin-svelte]: https://www.npmjs.com/package/@sveltejs/vite-plugin-svelte\n[svelte-loader]: https://github.com/sveltejs/svelte-loader\n[rollup-plugin-hot]: https://github.com/rixo/rollup-plugin-hot\n[rollup-plugin-svelte-hot]: https://github.com/rixo/rollup-plugin-svelte-hot\n[rollup-plugin-svelte]: https://github.com/rollup/rollup-plugin-svelte\n[svelte-template-hot]: https://github.com/rixo/svelte-template-hot\n[svelte-template]: https://github.com/sveltejs/template\n[svelte-native-template]: https://github.com/halfnelson/svelte-native-template\n[svelte-loader-hot]: https://github.com/rixo/svelte-loader-hot\n[svelte-template-webpack-hot]: https://github.com/rixo/svelte-template-webpack-hot\n/runtime/proxy-adapter-dom.js\f/* global window, document */\nimport * as svelteInternal from 'svelte/internal'\n// NOTE from 3.38.3 (or so), insert was carrying the hydration logic, that must\n// be used because DOM elements are reused more (and so insertion points are not\n// necessarily added in order); then in 3.40 the logic was moved to\n// insert_hydration, which is the one we must use for HMR\nconst svelteInsert = svelteInternal.insert_hydration || svelteInternal.insert\nif (!svelteInsert) {\n  throw new Error(\n    'failed to find insert_hydration and insert in svelte/internal'\n  )\n}\n\nimport ErrorOverlay from './overlay.js'\n\nconst removeElement = el => el && el.parentNode && el.parentNode.removeChild(el)\n\nexport const adapter = class ProxyAdapterDom {\n  constructor(instance) {\n    this.instance = instance\n    this.insertionPoint = null\n\n    this.afterMount = this.afterMount.bind(this)\n    this.rerender = this.rerender.bind(this)\n\n    this._noOverlay = !!instance.hotOptions.noOverlay\n  }\n\n  // NOTE overlay is only created before being actually shown to help test\n  // runner (it won't have to account for error overlay when running assertions\n  // about the contents of the rendered page)\n  static getErrorOverlay(noCreate = false) {\n    if (!noCreate && !this.errorOverlay) {\n      this.errorOverlay = ErrorOverlay()\n    }\n    return this.errorOverlay\n  }\n\n  // TODO this is probably unused now: remove in next breaking release\n  static renderCompileError(message) {\n    const noCreate = !message\n    const overlay = this.getErrorOverlay(noCreate)\n    if (!overlay) return\n    overlay.setCompileError(message)\n  }\n\n  dispose() {\n    // Component is being destroyed, detaching is not optional in Svelte3's\n    // component API, so we can dispose of the insertion point in every case.\n    if (this.insertionPoint) {\n      removeElement(this.insertionPoint)\n      this.insertionPoint = null\n    }\n    this.clearError()\n  }\n\n  // NOTE afterMount CAN be called multiple times (e.g. keyed list)\n  afterMount(target, anchor) {\n    const {\n      instance: { debugName },\n    } = this\n    if (!this.insertionPoint) {\n      this.insertionPoint = document.createComment(debugName)\n    }\n    svelteInsert(target, this.insertionPoint, anchor)\n  }\n\n  rerender() {\n    this.clearError()\n    const {\n      instance: { refreshComponent },\n      insertionPoint,\n    } = this\n    if (!insertionPoint) {\n      throw new Error('Cannot rerender: missing insertion point')\n    }\n    refreshComponent(insertionPoint.parentNode, insertionPoint)\n  }\n\n  renderError(err) {\n    if (this._noOverlay) return\n    const {\n      instance: { debugName },\n    } = this\n    const title = debugName || err.moduleName || 'Error'\n    this.constructor.getErrorOverlay().addError(err, title)\n  }\n\n  clearError() {\n    if (this._noOverlay) return\n    const overlay = this.constructor.getErrorOverlay(true)\n    if (!overlay) return\n    overlay.clearErrors()\n  }\n}\n\n// TODO this is probably unused now: remove in next breaking release\nif (typeof window !== 'undefined') {\n  window.__SVELTE_HMR_ADAPTER = adapter\n}\n\n// mitigate situation with Snowpack remote source pulling latest of runtime,\n// but using previous version of the Node code transform in the plugin\n// see: https://github.com/rixo/svelte-hmr/issues/27\nexport default adapter\n/runtime/proxy.js.9/* eslint-env browser */\n/**\n * The HMR proxy is a component-like object whose task is to sit in the\n * component tree in place of the proxied component, and rerender each\n * successive versions of said component.\n */\n\nimport { createProxiedComponent } from './svelte-hooks.js'\n\nconst handledMethods = ['constructor', '$destroy']\nconst forwardedMethods = ['$set', '$on']\n\nconst logError = (msg, err) => {\n  // eslint-disable-next-line no-console\n  console.error('[HMR][Svelte]', msg)\n  if (err) {\n    // NOTE avoid too much wrapping around user errors\n    // eslint-disable-next-line no-console\n    console.error(err)\n  }\n}\n\nconst posixify = file => file.replace(/[/\\\\]/g, '/')\n\nconst getBaseName = id =>\n  id\n    .split('/')\n    .pop()\n    .split('.')\n    .slice(0, -1)\n    .join('.')\n\nconst capitalize = str => str[0].toUpperCase() + str.slice(1)\n\nconst getFriendlyName = id => capitalize(getBaseName(posixify(id)))\n\nconst getDebugName = id => `<${getFriendlyName(id)}>`\n\nconst relayCalls = (getTarget, names, dest = {}) => {\n  for (const key of names) {\n    dest[key] = function(...args) {\n      const target = getTarget()\n      if (!target) {\n        return\n      }\n      return target[key] && target[key].call(this, ...args)\n    }\n  }\n  return dest\n}\n\nconst isInternal = key => key !== '$$' && key.slice(0, 2) === '$$'\n\n// This is intented as a somewhat generic / prospective fix to the situation\n// that arised with the introduction of $$set in Svelte 3.24.1 -- trying to\n// avoid giving full knowledge (like its name) of this implementation detail\n// to the proxy. The $$set method can be present or not on the component, and\n// its presence impacts the behaviour (but with HMR it will be tested if it is\n// present _on the proxy_). So the idea here is to expose exactly the same $$\n// props as the current version of the component and, for those that are\n// functions, proxy the calls to the current component.\nconst relayInternalMethods = (proxy, cmp) => {\n  // delete any previously added $$ prop\n  Object.keys(proxy)\n    .filter(isInternal)\n    .forEach(key => {\n      delete proxy[key]\n    })\n  // guard: no component\n  if (!cmp) return\n  // proxy current $$ props to the actual component\n  Object.keys(cmp)\n    .filter(isInternal)\n    .forEach(key => {\n      Object.defineProperty(proxy, key, {\n        configurable: true,\n        get() {\n          const value = cmp[key]\n          if (typeof value !== 'function') return value\n          return (\n            value &&\n            function(...args) {\n              return value.apply(this, args)\n            }\n          )\n        },\n      })\n    })\n}\n\n// proxy custom methods\nconst copyComponentProperties = (proxy, cmp, previous) => {\n  if (previous) {\n    previous.forEach(prop => {\n      delete proxy[prop]\n    })\n  }\n\n  const props = Object.getOwnPropertyNames(Object.getPrototypeOf(cmp))\n  const wrappedProps = props.filter(prop => {\n    if (!handledMethods.includes(prop) && !forwardedMethods.includes(prop)) {\n      Object.defineProperty(proxy, prop, {\n        configurable: true,\n        get() {\n          return cmp[prop]\n        },\n        set(value) {\n          // we're changing it on the real component first to see what it\n          // gives... if it throws an error, we want to throw the same error in\n          // order to most closely follow non-hmr behaviour.\n          cmp[prop] = value\n        },\n      })\n      return true\n    }\n  })\n\n  return wrappedProps\n}\n\n// everything in the constructor!\n//\n// so we don't polute the component class with new members\n//\nclass ProxyComponent {\n  constructor(\n    {\n      Adapter,\n      id,\n      debugName,\n      current, // { Component, hotOptions: { preserveLocalState, ... } }\n      register,\n    },\n    options // { target, anchor, ... }\n  ) {\n    let cmp\n    let disposed = false\n    let lastError = null\n\n    const setComponent = _cmp => {\n      cmp = _cmp\n      relayInternalMethods(this, cmp)\n    }\n\n    const getComponent = () => cmp\n\n    const destroyComponent = () => {\n      // destroyComponent is tolerant (don't crash on no cmp) because it\n      // is possible that reload/rerender is called after a previous\n      // createComponent has failed (hence we have a proxy, but no cmp)\n      if (cmp) {\n        cmp.$destroy()\n        setComponent(null)\n      }\n    }\n\n    const refreshComponent = (target, anchor, conservativeDestroy) => {\n      if (lastError) {\n        lastError = null\n        adapter.rerender()\n      } else {\n        try {\n          const replaceOptions = {\n            target,\n            anchor,\n            preserveLocalState: current.preserveLocalState,\n          }\n          if (conservativeDestroy) {\n            replaceOptions.conservativeDestroy = true\n          }\n          cmp.$replace(current.Component, replaceOptions)\n        } catch (err) {\n          setError(err, target, anchor)\n          if (\n            !current.hotOptions.optimistic ||\n            // non acceptable components (that is components that have to defer\n            // to their parent for rerender -- e.g. accessors, named exports)\n            // are most tricky, and they havent been considered when most of the\n            // code has been written... as a result, they are especially tricky\n            // to deal with, it's better to consider any error with them to be\n            // fatal to avoid odities\n            !current.canAccept ||\n            (err && err.hmrFatal)\n          ) {\n            throw err\n          } else {\n            // const errString = String((err && err.stack) || err)\n            logError(`Error during component init: ${debugName}`, err)\n          }\n        }\n      }\n    }\n\n    const setError = err => {\n      lastError = err\n      adapter.renderError(err)\n    }\n\n    const instance = {\n      hotOptions: current.hotOptions,\n      proxy: this,\n      id,\n      debugName,\n      refreshComponent,\n    }\n\n    const adapter = new Adapter(instance)\n\n    const { afterMount, rerender } = adapter\n\n    // $destroy is not called when a child component is disposed, so we\n    // need to hook from fragment.\n    const onDestroy = () => {\n      // NOTE do NOT call $destroy on the cmp from here; the cmp is already\n      //   dead, this would not work\n      if (!disposed) {\n        disposed = true\n        adapter.dispose()\n        unregister()\n      }\n    }\n\n    // ---- register proxy instance ----\n\n    const unregister = register(rerender)\n\n    // ---- augmented methods ----\n\n    this.$destroy = () => {\n      destroyComponent()\n      onDestroy()\n    }\n\n    // ---- forwarded methods ----\n\n    relayCalls(getComponent, forwardedMethods, this)\n\n    // ---- create & mount target component instance ---\n\n    try {\n      let lastProperties\n      createProxiedComponent(current.Component, options, {\n        allowLiveBinding: current.hotOptions.allowLiveBinding,\n        onDestroy,\n        onMount: afterMount,\n        onInstance: comp => {\n          setComponent(comp)\n          // WARNING the proxy MUST use the same $$ object as its component\n          // instance, because a lot of wiring happens during component\n          // initialisation... lots of references to $$ and $$.fragment have\n          // already been distributed around when the component constructor\n          // returns, before we have a chance to wrap them (and so we can't\n          // wrap them no more, because existing references would become\n          // invalid)\n          this.$$ = comp.$$\n          lastProperties = copyComponentProperties(this, comp, lastProperties)\n        },\n      })\n    } catch (err) {\n      const { target, anchor } = options\n      setError(err, target, anchor)\n      throw err\n    }\n  }\n}\n\nconst syncStatics = (component, proxy, previousKeys) => {\n  // remove previously copied keys\n  if (previousKeys) {\n    for (const key of previousKeys) {\n      delete proxy[key]\n    }\n  }\n\n  // forward static properties and methods\n  const keys = []\n  for (const key in component) {\n    keys.push(key)\n    proxy[key] = component[key]\n  }\n\n  return keys\n}\n\nconst globalListeners = {}\n\nconst onGlobal = (event, fn) => {\n  event = event.toLowerCase()\n  if (!globalListeners[event]) globalListeners[event] = []\n  globalListeners[event].push(fn)\n}\n\nconst fireGlobal = (event, ...args) => {\n  const listeners = globalListeners[event]\n  if (!listeners) return\n  for (const fn of listeners) {\n    fn(...args)\n  }\n}\n\nconst fireBeforeUpdate = () => fireGlobal('beforeupdate')\n\nconst fireAfterUpdate = () => fireGlobal('afterupdate')\n\nif (typeof window !== 'undefined') {\n  window.__SVELTE_HMR = {\n    on: onGlobal,\n  }\n  window.dispatchEvent(new CustomEvent('svelte-hmr:ready'))\n}\n\nlet fatalError = false\n\nexport const hasFatalError = () => fatalError\n\n/**\n * Creates a HMR proxy and its associated `reload` function that pushes a new\n * version to all existing instances of the component.\n */\nexport function createProxy({\n  Adapter,\n  id,\n  Component,\n  hotOptions,\n  canAccept,\n  preserveLocalState,\n}) {\n  const debugName = getDebugName(id)\n  const instances = []\n\n  // current object will be updated, proxy instances will keep a ref\n  const current = {\n    Component,\n    hotOptions,\n    canAccept,\n    preserveLocalState,\n  }\n\n  const name = `Proxy${debugName}`\n\n  // this trick gives the dynamic name Proxy<MyComponent> to the concrete\n  // proxy class... unfortunately, this doesn't shows in dev tools, but\n  // it stills allow to inspect cmp.constructor.name to confirm an instance\n  // is a proxy\n  const proxy = {\n    [name]: class extends ProxyComponent {\n      constructor(options) {\n        try {\n          super(\n            {\n              Adapter,\n              id,\n              debugName,\n              current,\n              register: rerender => {\n                instances.push(rerender)\n                const unregister = () => {\n                  const i = instances.indexOf(rerender)\n                  instances.splice(i, 1)\n                }\n                return unregister\n              },\n            },\n            options\n          )\n        } catch (err) {\n          // If we fail to create a proxy instance, any instance, that means\n          // that we won't be able to fix this instance when it is updated.\n          // Recovering to normal state will be impossible. HMR's dead.\n          //\n          // Fatal error will trigger a full reload on next update (reloading\n          // right now is kinda pointless since buggy code still exists).\n          //\n          // NOTE Only report first error to avoid too much polution -- following\n          // errors are probably caused by the first one, or they will show up\n          // in turn when the first one is fixed ¯\\_(ツ)_/¯\n          //\n          if (!fatalError) {\n            fatalError = true\n            logError(\n              `Unrecoverable HMR error in ${debugName}: ` +\n                `next update will trigger a full reload`\n            )\n          }\n          throw err\n        }\n      }\n    },\n  }[name]\n\n  // initialize static members\n  let previousStatics = syncStatics(current.Component, proxy)\n\n  const update = newState => Object.assign(current, newState)\n\n  // reload all existing instances of this component\n  const reload = () => {\n    fireBeforeUpdate()\n\n    // copy statics before doing anything because a static prop/method\n    // could be used somewhere in the create/render call\n    previousStatics = syncStatics(current.Component, proxy, previousStatics)\n\n    const errors = []\n\n    instances.forEach(rerender => {\n      try {\n        rerender()\n      } catch (err) {\n        logError(`Failed to rerender ${debugName}`, err)\n        errors.push(err)\n      }\n    })\n\n    if (errors.length > 0) {\n      return false\n    }\n\n    fireAfterUpdate()\n\n    return true\n  }\n\n  const hasFatalError = () => fatalError\n\n  return { id, proxy, update, reload, hasFatalError, current }\n}\n/lib/css-only.js\u00023/**\n * Injects a `{}*` CSS rule to force Svelte compiler to scope every elements.\n */\nexport const injectScopeEverythingCssRule = (parse, code) => {\n  const { css } = parse(code)\n  if (!css) return code\n  const {\n    content: { end },\n  } = css\n  return code.slice(0, end) + '*{}' + code.slice(end)\n}\n\nexport const normalizeJsCode = code => {\n  // Svelte now adds locations in dev mode, code locations can change when\n  // CSS change, but we're unaffected (not real behaviour changes)\n  code = code.replace(/\\badd_location\\s*\\([^)]*\\)\\s*;?/g, '')\n  return code\n}\n/lib/make-hot.js<const globalName = '___SVELTE_HMR_HOT_API'\nconst globalAdapterName = '___SVELTE_HMR_HOT_API_PROXY_ADAPTER'\n\nconst defaultHotOptions = {\n  // preserve all local state\n  preserveLocalState: false,\n\n  // escape hatchs from preservation of local state\n  //\n  // disable preservation of state for this component\n  noPreserveStateKey: ['@hmr:reset', '@!hmr'],\n  // enable preservation of state for all variables in this component\n  preserveAllLocalStateKey: '@hmr:keep-all',\n  // enable preservation of state for a given variable (must be inline or\n  // above the target variable or variables; can be repeated)\n  preserveLocalStateKey: '@hmr:keep',\n\n  // don't reload on fatal error\n  noReload: false,\n  // try to recover after runtime errors during component init\n  // defaults to false because some runtime errors are fatal and require a full reload\n  optimistic: false,\n  // auto accept modules of components that have named exports (i.e. exports\n  // from context=\"module\")\n  acceptNamedExports: true,\n  // auto accept modules of components have accessors (either accessors compile\n  // option, or <svelte:option accessors={true} />) -- this means that if you\n  // set accessors compile option globally, you must also set this option to\n  // true, or no component will be hot reloaded (but there are a lot of edge\n  // cases that HMR can't support correctly with accessors)\n  acceptAccessors: true,\n  // only inject CSS instead of recreating components when only CSS changes\n  injectCss: false,\n  // to mitigate FOUC between dispose (remove stylesheet) and accept\n  cssEjectDelay: 100,\n\n  // Svelte Native mode\n  native: false,\n  // name of the adapter import binding\n  importAdapterName: globalAdapterName,\n\n  // disable runtime error overlay\n  noOverlay: false,\n\n  // set to true on systems that supports them, to avoid useless caught /\n  // managed (but still...) exceptions, by using Svelte's current_component\n  // instead of get_current_component\n  allowLiveBinding: false,\n\n  // use acceptExports instead of accept, to fix support of context:module\n  partialAccept: false,\n}\n\nconst defaultHotApi = 'hot-api-esm.js'\n\nconst json = JSON.stringify\n\nconst posixify = file => file.replace(/[/\\\\]/g, '/')\n\nconst renderApplyHmr = ({\n  id,\n  cssId,\n  nonCssHash,\n  hotOptions: {\n    injectCss,\n    partialAccept,\n    _accept = partialAccept ? \"acceptExports(['default'])\" : 'accept()',\n  },\n  hotOptionsJson,\n  hotApiImport,\n  adapterImport,\n  importAdapterName,\n  meta,\n  acceptable,\n  preserveLocalState,\n  emitCss,\n  imports = [\n    `import * as ${globalName} from '${hotApiImport}'`,\n    `import { adapter as ${importAdapterName} } from '${adapterImport}'`,\n  ],\n}) =>\n  // this silly formatting keeps all original characters in their position,\n  // thus saving us from having to provide a sourcemap\n  //\n  // NOTE the `if (false) accept()` line is for tools that wants to see the\n  // accept call in the actual accepted module to enable HMR (Vite and, I\n  // believe, Snowpack 3)\n  //\n  `${imports.join(';')};${`\n    if (${meta} && ${meta}.hot) {\n      ${acceptable ? `if (false) ${meta}.hot.${_accept};` : ''};\n      $2 = ${globalName}.applyHmr({\n        m: ${meta},\n        id: ${json(id)},\n        hotOptions: ${hotOptionsJson},\n        Component: $2,\n        ProxyAdapter: ${importAdapterName},\n        acceptable: ${json(acceptable)},\n        preserveLocalState: ${json(preserveLocalState)},\n        ${cssId ? `cssId: ${json(cssId)},` : ''}\n        ${nonCssHash ? `nonCssHash: ${json(nonCssHash)},` : ''}\n        emitCss: ${json(emitCss)},\n      });\n    }\n  `\n    .split('\\n')\n    .map(x => x.trim())\n    .filter(Boolean)\n    .join(' ')}\nexport default $2;\n${\n  // NOTE when doing CSS only voodoo, we have to inject the stylesheet as soon\n  // as the component is loaded because Svelte normally do that when a component\n  // is instantiated, but we might already have instances in the large when a\n  // component is loaded with HMR\n  cssId && injectCss && !emitCss\n    ? `\nif (typeof add_css !== 'undefined' && !document.getElementById(${json(\n        cssId\n      )})) add_css();`\n    : ``\n}\n`\n\n// replace from last occurrence of the splitter\nconst replaceLast = (string, splitter, regex, replacer) => {\n  const lastIndex = string.lastIndexOf(splitter)\n  return (\n    string.slice(0, lastIndex) +\n    string.slice(lastIndex).replace(regex, replacer)\n  )\n}\n\n// https://github.com/darkskyapp/string-hash/blob/master/index.js\n// (via https://github.com/sveltejs/svelte/blob/91d758e35b2b2154512ddd11e6b6d9d65708a99e/src/compiler/compile/utils/hash.ts#L2)\nconst stringHashcode = str => {\n  let hash = 5381\n  let i = str.length\n  while (i--) hash = ((hash << 5) - hash) ^ str.charCodeAt(i)\n  return (hash >>> 0).toString(36)\n}\n\nconst normalizeJsCode = (code, cssHash) =>\n  code\n    // ignore css hashes in the code (that have changed, necessarily)\n    .replace(new RegExp('\\\\b' + cssHash + '\\\\b', 'g'), '')\n    // Svelte now adds locations in dev mode, code locations can change when\n    // CSS change, but we're unaffected (not real behaviour changes)\n    .replace(/\\badd_location\\s*\\([^)]*\\)\\s*;?/g, '')\n\nconst parseCssId = (code, compileOptions = {}, parseHash, originalCode) => {\n  // the regex matching is very pretty conservative 'cause I don't want to\n  // match something else by error... I'm probably make it more lax if I have\n  // to fix it 3 times in a single week ¯\\_(ツ)_/¯\n  let match = /^function add_css\\(\\) \\{[\\s\\S]*?^}/m.exec(code)\n\n  if (!match) {\n    // guard: injectCss is off, no need to compute hashes\n    if (!parseHash) return {}\n    // guard: compile.css is true, so we should have found the add_css function,\n    //        something unexpected is unraveling here, fall back to caution\n    if (compileOptions.css) return {}\n    // trying to get CSS id the same way as Svelte does it\n    match = /<style[^>]*>([\\s\\S]*)<\\/\\s*style\\s*>/.exec(originalCode)\n    const cssHash = match && match[1] ? stringHashcode(match[1]) : null\n    if (!cssHash) return {}\n    return {\n      cssId: `svelte-${cssHash}-style`,\n      nonCssHash: stringHashcode(normalizeJsCode(code, cssHash)),\n    }\n  }\n\n  const codeExceptCSS =\n    code.slice(0, match.index) + code.slice(match.index + match[0].length)\n\n  match = /\\bstyle\\.id\\s*=\\s*(['\"])([^'\"]*)\\1/.exec(match[0])\n  const cssId = match ? match[2] : null\n\n  if (!parseHash || !cssId) return { cssId }\n\n  const cssHash = cssId.split('-')[1]\n  const nonCssHash = stringHashcode(normalizeJsCode(codeExceptCSS, cssHash))\n\n  return { cssId, nonCssHash }\n}\n\nconst isNamedExport = v => v.export_name && v.module\n\nconst isProp = v => v.export_name && !v.module\n\nconst resolvePackageImport = (name = 'svelte-hmr', version = '') => {\n  const versionSpec = version ? '@' + version : ''\n  return target => `${name}${versionSpec}/${target}`\n}\n\nconst createMakeHot = ({ resolveAbsoluteImport, pkg = {} }) => ({\n  // NOTE hotOptions can be customized by end user through plugin options, while\n  // options passed to this function can only customized by the plugin implementer\n  //\n  // meta can be 'import.meta' or 'module'\n  // const createMakeHot = (hotApi = defaultHotApi, options) => {\n  walk,\n  meta = 'import.meta',\n\n  hotApi: customHotApi = '',\n  adapter: customAdapter = '',\n  // use absolute file paths to import runtime deps of svelte-hmr\n  // - pnpm needs absolute paths because svelte-hmr, being a transitive dep via\n  //   the bundler plugin, is not directly importable from user's project\n  //   (see https://github.com/rixo/svelte-hmr/issues/11)\n  // - Snowpack source=remote needs a version number, otherwise it will try to\n  //   load import, resulting in a possible version mismatch between the code\n  //   transform and the runtime\n  //   (see: https://github.com/rixo/svelte-hmr/issues/27#issuecomment-800142127)\n  absoluteImports = true,\n  versionNonAbsoluteImports = true,\n\n  hotOptions: hotOptionsArg = {},\n}) => {\n  const hotOptions = { ...defaultHotOptions, ...hotOptionsArg }\n\n  const hotOptionsJson = JSON.stringify(hotOptions)\n\n  // NOTE Native adapter cannot be required in code (as opposed to this\n  // generated code) because it requires modules from NativeScript's code that\n  // are not resolvable for non-native users (and those missing modules would\n  // prevent webpack from building).\n  //\n  // careful with relative paths\n  // (see https://github.com/rixo/svelte-hmr/issues/11)\n  const defaultAdapter = hotOptions.native\n    ? 'svelte-native/proxy-adapter-native.js'\n    : 'proxy-adapter-dom.js'\n\n  const resolveImport = absoluteImports\n    ? resolveAbsoluteImport\n    : resolvePackageImport(pkg.name, versionNonAbsoluteImports && pkg.version)\n\n  const adapterImport = posixify(\n    customAdapter || resolveImport('runtime/' + defaultAdapter)\n  )\n\n  const hotApiImport = posixify(\n    customHotApi || resolveImport('runtime/' + defaultHotApi)\n  )\n\n  const resolvePreserveLocalStateKey = ({\n    preserveLocalStateKey,\n    compiled,\n  }) => {\n    const containsKey = comments =>\n      comments &&\n      comments.some(({ value }) => value.includes(preserveLocalStateKey))\n\n    const variables = new Set()\n\n    const addReference = node => {\n      if (!node.name) {\n        // eslint-disable-next-line no-console\n        console.warn('Incorrect identifier for preserveLocalStateKey')\n      }\n      variables.add(node.name)\n    }\n\n    const processNodes = targets => targets.forEach(processNode)\n\n    const processNode = node => {\n      switch (node.type) {\n        case 'Identifier':\n          variables.add(node.name)\n          return true\n        case 'UpdateExpression':\n          addReference(node.argument)\n          return true\n        case 'VariableDeclarator':\n          addReference(node.id)\n          return true\n        case 'AssignmentExpression':\n          processNode(node.left)\n          return true\n        case 'ExpressionStatement':\n          processNode(node.expression)\n          return true\n\n        case 'VariableDeclaration':\n          processNodes(node.declarations)\n          return true\n        case 'SequenceExpression': // ++, --\n          processNodes(node.expressions)\n          return true\n      }\n      return false\n    }\n\n    const stack = []\n\n    if (compiled.ast.instance) {\n      walk(compiled.ast.instance, {\n        leave() {\n          stack.shift()\n        },\n        enter(node) {\n          stack.unshift(node)\n          if (\n            containsKey(node.leadingComments) ||\n            containsKey(node.trailingComments)\n          ) {\n            stack\n              .slice(0, 3)\n              .reverse()\n              .some(processNode)\n          }\n        },\n      })\n    }\n\n    return [...variables]\n  }\n\n  const resolvePreserveLocalState = ({\n    hotOptions,\n    originalCode,\n    compiled,\n  }) => {\n    const {\n      preserveLocalState,\n      noPreserveStateKey,\n      preserveLocalStateKey,\n      preserveAllLocalStateKey,\n    } = hotOptions\n    if (originalCode) {\n      const hasKey = key => {\n        const test = k => originalCode.indexOf(k) !== -1\n        return Array.isArray(key) ? key.some(test) : test(key)\n      }\n      // noPreserveStateKey\n      if (noPreserveStateKey && hasKey(noPreserveStateKey)) {\n        return false\n      }\n      // preserveAllLocalStateKey\n      if (preserveAllLocalStateKey && hasKey(preserveAllLocalStateKey)) {\n        return true\n      }\n      // preserveLocalStateKey\n      if (preserveLocalStateKey && hasKey(preserveLocalStateKey)) {\n        // returns an array of variable names to preserve\n        return resolvePreserveLocalStateKey({ preserveLocalStateKey, compiled })\n      }\n    }\n    // preserveLocalState\n    if (preserveLocalState) {\n      return true\n    }\n    return false\n  }\n\n  const hasAccessorsOption = compiled => {\n    if (!compiled.ast || !compiled.ast.html) return\n    let accessors = false\n    walk(compiled.ast.html, {\n      enter(node) {\n        if (accessors) return\n        if (node.type !== 'Options') return\n        if (!node.attributes) return\n        accessors = node.attributes.some(\n          ({ name, value }) => name === 'accessors' && value\n        )\n      },\n    })\n    return accessors\n  }\n\n  const isAcceptable = (hotOptions, compileOptions, compiled) => {\n    if (!compiled || !compileOptions) {\n      // this should never happen, since it's the bundler plugins that control\n      // what version of svelte-hmr they embark, and they should be kept up to\n      // date with our API\n      //\n      // eslint-disable-next-line no-console\n      console.warn(\n        'WARNING Your bundler plugin is outdated for this version of svelte-hmr'\n      )\n      return true\n    }\n\n    const { vars } = compiled\n\n    // if the module has named exports (in context=\"module\"), then we can't\n    // auto accept the component, since all the consumers need to be aware of\n    // the change (e.g. rerender with the new exports value)\n    if (!hotOptions.acceptNamedExports && vars.some(isNamedExport)) {\n      return false\n    }\n\n    // ...same for accessors: if accessible props change, then we need to\n    // rerender/rerun all the consumers to reflect the change\n    //\n    // NOTE we can still accept components with no props, since they won't\n    // have accessors... this is actually all we can safely accept in this case\n    //\n    if (\n      !hotOptions.acceptAccessors &&\n      // we test is we have props first, because searching for the\n      // <svelte:options /> tag in the AST is probably the most expensive here\n      vars.some(isProp) &&\n      (compileOptions.accessors || hasAccessorsOption(compiled))\n    ) {\n      return false\n    }\n\n    return true\n  }\n\n  const parseMakeHotArgs = args => {\n    // case: named args (object)\n    if (args.length === 1) return args[0]\n    // case: legacy (positional)\n    const [\n      id,\n      compiledCode,\n      hotOptions,\n      compiled,\n      originalCode,\n      compileOptions,\n    ] = args\n    return {\n      id,\n      compiledCode,\n      hotOptions,\n      compiled,\n      originalCode,\n      compileOptions,\n    }\n  }\n\n  function makeHot(...args) {\n    const {\n      id,\n      compiledCode,\n      compiled,\n      originalCode,\n      compileOptions,\n    } = parseMakeHotArgs(args)\n\n    const { importAdapterName, injectCss } = hotOptions\n\n    const emitCss =\n      compileOptions &&\n      (compileOptions.css === false || compileOptions.css === 'external')\n\n    const preserveLocalState = resolvePreserveLocalState({\n      hotOptions,\n      originalCode,\n      compiled,\n    })\n\n    const replacement = renderApplyHmr({\n      id,\n      // adds cssId & nonCssHash\n      ...((injectCss || !emitCss) &&\n        parseCssId(compiledCode, compileOptions, injectCss, originalCode)),\n      hotOptions,\n      hotOptionsJson,\n      preserveLocalState,\n      hotApiImport,\n      adapterImport,\n      importAdapterName,\n      meta,\n      acceptable: isAcceptable(hotOptions, compileOptions, compiled),\n      // CSS is handled outside of Svelte: don't tamper with it!\n      emitCss,\n    })\n\n    // NOTE export default can appear in strings in use code\n    // see: https://github.com/rixo/svelte-hmr/issues/34\n    return replaceLast(\n      compiledCode,\n      'export default',\n      /(\\n?export default ([^;]*);)/,\n      (match, $1, $2) => replacement.replace(/\\$2/g, () => $2)\n    )\n  }\n\n  // rollup-plugin-svelte-hot needs hotApi path (for tests)\n  // makeHot.hotApi = hotApi\n  Object.defineProperty(makeHot, 'hotApi', {\n    get() {\n      // TODO makeHot.hotApi has been lost in 0.12 => 0.13... still needed?\n      debugger // eslint-disable-line no-debugger\n      return undefined\n    },\n  })\n\n  return makeHot\n}\n\nmodule.exports = createMakeHot\n/index.js\u0001^const createMakeHotFactory = require('./lib/make-hot.js')\nconst { resolve } = require('path')\nconst { name, version } = require('./package.json')\n\nconst resolveAbsoluteImport = target => resolve(__dirname, target)\n\nconst createMakeHot = createMakeHotFactory({\n  pkg: { name, version },\n  resolveAbsoluteImport,\n})\n\nmodule.exports = { createMakeHot }\n/runtime/index.js,export { makeApplyHmr } from './hot-api.js'\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/cG9zdGNzcy12YWx1ZS1wYXJzZXJANC4yLjA=",
    "content": "/LICENSE\u00042Copyright (c) Bogdan Chadkin <trysound@yandex.ru>\n\nPermission is hereby granted, free of charge, to any person\nobtaining a copy of this software and associated documentation\nfiles (the \"Software\"), to deal in the Software without\nrestriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the\nSoftware is furnished to do so, subject to the following\nconditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\nOF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\nHOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\nWHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\nFROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\nOTHER DEALINGS IN THE SOFTWARE.\n/lib/index.js\u0002_var parse = require(\"./parse\");\nvar walk = require(\"./walk\");\nvar stringify = require(\"./stringify\");\n\nfunction ValueParser(value) {\n  if (this instanceof ValueParser) {\n    this.nodes = parse(value);\n    return this;\n  }\n  return new ValueParser(value);\n}\n\nValueParser.prototype.toString = function() {\n  return Array.isArray(this.nodes) ? stringify(this.nodes) : \"\";\n};\n\nValueParser.prototype.walk = function(cb, bubble) {\n  walk(this.nodes, cb, bubble);\n  return this;\n};\n\nValueParser.unit = require(\"./unit\");\n\nValueParser.walk = walk;\n\nValueParser.stringify = stringify;\n\nmodule.exports = ValueParser;\n/package.json\u0005\u0016{\n  \"name\": \"postcss-value-parser\",\n  \"version\": \"4.2.0\",\n  \"description\": \"Transforms css values and at-rule params into the tree\",\n  \"main\": \"lib/index.js\",\n  \"files\": [\n    \"lib\"\n  ],\n  \"devDependencies\": {\n    \"eslint\": \"^5.16.0\",\n    \"husky\": \"^2.3.0\",\n    \"lint-staged\": \"^8.1.7\",\n    \"prettier\": \"^1.17.1\",\n    \"tap-spec\": \"^5.0.0\",\n    \"tape\": \"^4.10.2\"\n  },\n  \"scripts\": {\n    \"lint:prettier\": \"prettier \\\"**/*.js\\\" \\\"**/*.ts\\\" --list-different\",\n    \"lint:js\": \"eslint . --cache\",\n    \"lint\": \"yarn lint:js && yarn lint:prettier\",\n    \"pretest\": \"yarn lint\",\n    \"test\": \"tape test/*.js | tap-spec\"\n  },\n  \"eslintConfig\": {\n    \"env\": {\n      \"es6\": true,\n      \"node\": true\n    },\n    \"extends\": \"eslint:recommended\"\n  },\n  \"lint-staged\": {\n    \"*.js\": [\n      \"eslint\",\n      \"prettier --write\",\n      \"git add\"\n    ]\n  },\n  \"husky\": {\n    \"hooks\": {\n      \"pre-commit\": \"lint-staged\"\n    }\n  },\n  \"author\": \"Bogdan Chadkin <trysound@yandex.ru>\",\n  \"license\": \"MIT\",\n  \"homepage\": \"https://github.com/TrySound/postcss-value-parser\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/TrySound/postcss-value-parser.git\"\n  },\n  \"keywords\": [\n    \"postcss\",\n    \"value\",\n    \"parser\"\n  ],\n  \"bugs\": {\n    \"url\": \"https://github.com/TrySound/postcss-value-parser/issues\"\n  }\n}\n/lib/walk.js\u0001module.exports = function walk(nodes, cb, bubble) {\n  var i, max, node, result;\n\n  for (i = 0, max = nodes.length; i < max; i += 1) {\n    node = nodes[i];\n    if (!bubble) {\n      result = cb(node, i, nodes);\n    }\n\n    if (\n      result !== false &&\n      node.type === \"function\" &&\n      Array.isArray(node.nodes)\n    ) {\n      walk(node.nodes, cb, bubble);\n    }\n\n    if (bubble) {\n      cb(node, i, nodes);\n    }\n  }\n};\n/README.md\u001e\u0003# postcss-value-parser\n\n[![Travis CI](https://travis-ci.org/TrySound/postcss-value-parser.svg)](https://travis-ci.org/TrySound/postcss-value-parser)\n\nTransforms CSS declaration values and at-rule parameters into a tree of nodes, and provides a simple traversal API.\n\n## Usage\n\n```js\nvar valueParser = require('postcss-value-parser');\nvar cssBackgroundValue = 'url(foo.png) no-repeat 40px 73%';\nvar parsedValue = valueParser(cssBackgroundValue);\n// parsedValue exposes an API described below,\n// e.g. parsedValue.walk(..), parsedValue.toString(), etc.\n```\n\nFor example, parsing the value `rgba(233, 45, 66, .5)` will return the following:\n\n```js\n{\n  nodes: [\n    {\n      type: 'function',\n      value: 'rgba',\n      before: '',\n      after: '',\n      nodes: [\n        { type: 'word', value: '233' },\n        { type: 'div', value: ',', before: '', after: ' ' },\n        { type: 'word', value: '45' },\n        { type: 'div', value: ',', before: '', after: ' ' },\n        { type: 'word', value: '66' },\n        { type: 'div', value: ',', before: ' ', after: '' },\n        { type: 'word', value: '.5' }\n      ]\n    }\n  ]\n}\n```\n\nIf you wanted to convert each `rgba()` value in `sourceCSS` to a hex value, you could do so like this:\n\n```js\nvar valueParser = require('postcss-value-parser');\n\nvar parsed = valueParser(sourceCSS);\n\n// walk() will visit all the of the nodes in the tree,\n// invoking the callback for each.\nparsed.walk(function (node) {\n\n  // Since we only want to transform rgba() values,\n  // we can ignore anything else.\n  if (node.type !== 'function' && node.value !== 'rgba') return;\n\n  // We can make an array of the rgba() arguments to feed to a\n  // convertToHex() function\n  var color = node.nodes.filter(function (node) {\n    return node.type === 'word';\n  }).map(function (node) {\n    return Number(node.value);\n  }); // [233, 45, 66, .5]\n\n  // Now we will transform the existing rgba() function node\n  // into a word node with the hex value\n  node.type = 'word';\n  node.value = convertToHex(color);\n})\n\nparsed.toString(); // #E92D42\n```\n\n## Nodes\n\nEach node is an object with these common properties:\n\n- **type**: The type of node (`word`, `string`, `div`, `space`, `comment`, or `function`).\n  Each type is documented below.\n- **value**: Each node has a `value` property; but what exactly `value` means\n  is specific to the node type. Details are documented for each type below.\n- **sourceIndex**: The starting index of the node within the original source\n  string. For example, given the source string `10px 20px`, the `word` node\n  whose value is `20px` will have a `sourceIndex` of `5`.\n\n### word\n\nThe catch-all node type that includes keywords (e.g. `no-repeat`),\nquantities (e.g. `20px`, `75%`, `1.5`), and hex colors (e.g. `#e6e6e6`).\n\nNode-specific properties:\n\n- **value**: The \"word\" itself.\n\n### string\n\nA quoted string value, e.g. `\"something\"` in `content: \"something\";`.\n\nNode-specific properties:\n\n- **value**: The text content of the string.\n- **quote**: The quotation mark surrounding the string, either `\"` or `'`.\n- **unclosed**: `true` if the string was not closed properly. e.g. `\"unclosed string  `.\n\n### div\n\nA divider, for example\n\n- `,` in `animation-duration: 1s, 2s, 3s`\n- `/` in `border-radius: 10px / 23px`\n- `:` in `(min-width: 700px)`\n\nNode-specific properties:\n\n- **value**: The divider character. Either `,`, `/`, or `:` (see examples above).\n- **before**: Whitespace before the divider.\n- **after**: Whitespace after the divider.\n\n### space\n\nWhitespace used as a separator, e.g. ` ` occurring twice in `border: 1px solid black;`.\n\nNode-specific properties:\n\n- **value**: The whitespace itself.\n\n### comment\n\nA CSS comment starts with `/*` and ends with `*/`\n\nNode-specific properties:\n\n- **value**: The comment value without `/*` and `*/`\n- **unclosed**: `true` if the comment was not closed properly. e.g. `/* comment without an end  `.\n\n### function\n\nA CSS function, e.g. `rgb(0,0,0)` or `url(foo.bar)`.\n\nFunction nodes have nodes nested within them: the function arguments.\n\nAdditional properties:\n\n- **value**: The name of the function, e.g. `rgb` in `rgb(0,0,0)`.\n- **before**: Whitespace after the opening parenthesis and before the first argument,\n  e.g. `  ` in `rgb(  0,0,0)`.\n- **after**: Whitespace before the closing parenthesis and after the last argument,\n  e.g. `  ` in `rgb(0,0,0  )`.\n- **nodes**: More nodes representing the arguments to the function.\n- **unclosed**: `true` if the parentheses was not closed properly. e.g. `( unclosed-function  `.\n\nMedia features surrounded by parentheses are considered functions with an\nempty value. For example, `(min-width: 700px)` parses to these nodes:\n\n```js\n[\n  {\n    type: 'function', value: '', before: '', after: '',\n    nodes: [\n      { type: 'word', value: 'min-width' },\n      { type: 'div', value: ':', before: '', after: ' ' },\n      { type: 'word', value: '700px' }\n    ]\n  }\n]\n```\n\n`url()` functions can be parsed a little bit differently depending on\nwhether the first character in the argument is a quotation mark.\n\n`url( /gfx/img/bg.jpg )` parses to:\n\n```js\n{ type: 'function', sourceIndex: 0, value: 'url', before: ' ', after: ' ', nodes: [\n    { type: 'word', sourceIndex: 5, value: '/gfx/img/bg.jpg' }\n] }\n```\n\n`url( \"/gfx/img/bg.jpg\" )`, on the other hand, parses to:\n\n```js\n{ type: 'function', sourceIndex: 0, value: 'url', before: ' ', after: ' ', nodes: [\n     type: 'string', sourceIndex: 5, quote: '\"', value: '/gfx/img/bg.jpg' },\n] }\n```\n\n### unicode-range\n\nThe unicode-range CSS descriptor sets the specific range of characters to be \nused from a font defined by @font-face and made available \nfor use on the current page (`unicode-range: U+0025-00FF`).\n\nNode-specific properties:\n\n- **value**: The \"unicode-range\" itself.\n\n## API\n\n```\nvar valueParser = require('postcss-value-parser');\n```\n\n### valueParser.unit(quantity)\n\nParses `quantity`, distinguishing the number from the unit. Returns an object like the following:\n\n```js\n// Given 2rem\n{\n  number: '2',\n  unit: 'rem'\n}\n```\n\nIf the `quantity` argument cannot be parsed as a number, returns `false`.\n\n*This function does not parse complete values*: you cannot pass it `1px solid black` and expect `px` as\nthe unit. Instead, you should pass it single quantities only. Parse `1px solid black`, then pass it\nthe stringified `1px` node (a `word` node) to parse the number and unit.\n\n### valueParser.stringify(nodes[, custom])\n\nStringifies a node or array of nodes.\n\nThe `custom` function is called for each `node`; return a string to override the default behaviour.\n\n### valueParser.walk(nodes, callback[, bubble])\n\nWalks each provided node, recursively walking all descendent nodes within functions.\n\nReturning `false` in the `callback` will prevent traversal of descendent nodes (within functions).\nYou can use this feature to for shallow iteration, walking over only the *immediate* children.\n*Note: This only applies if `bubble` is `false` (which is the default).*\n\nBy default, the tree is walked from the outermost node inwards.\nTo reverse the direction, pass `true` for the `bubble` argument.\n\nThe `callback` is invoked with three arguments: `callback(node, index, nodes)`.\n\n- `node`: The current node.\n- `index`: The index of the current node.\n- `nodes`: The complete nodes array passed to `walk()`.\n\nReturns the `valueParser` instance.\n\n### var parsed = valueParser(value)\n\nReturns the parsed node tree.\n\n### parsed.nodes\n\nThe array of nodes.\n\n### parsed.toString()\n\nStringifies the node tree.\n\n### parsed.walk(callback[, bubble])\n\nWalks each node inside `parsed.nodes`. See the documentation for `valueParser.walk()` above.\n\n# License\n\nMIT © [Bogdan Chadkin](mailto:trysound@yandex.ru)\n/lib/parse.js var openParentheses = \"(\".charCodeAt(0);\nvar closeParentheses = \")\".charCodeAt(0);\nvar singleQuote = \"'\".charCodeAt(0);\nvar doubleQuote = '\"'.charCodeAt(0);\nvar backslash = \"\\\\\".charCodeAt(0);\nvar slash = \"/\".charCodeAt(0);\nvar comma = \",\".charCodeAt(0);\nvar colon = \":\".charCodeAt(0);\nvar star = \"*\".charCodeAt(0);\nvar uLower = \"u\".charCodeAt(0);\nvar uUpper = \"U\".charCodeAt(0);\nvar plus = \"+\".charCodeAt(0);\nvar isUnicodeRange = /^[a-f0-9?-]+$/i;\n\nmodule.exports = function(input) {\n  var tokens = [];\n  var value = input;\n\n  var next,\n    quote,\n    prev,\n    token,\n    escape,\n    escapePos,\n    whitespacePos,\n    parenthesesOpenPos;\n  var pos = 0;\n  var code = value.charCodeAt(pos);\n  var max = value.length;\n  var stack = [{ nodes: tokens }];\n  var balanced = 0;\n  var parent;\n\n  var name = \"\";\n  var before = \"\";\n  var after = \"\";\n\n  while (pos < max) {\n    // Whitespaces\n    if (code <= 32) {\n      next = pos;\n      do {\n        next += 1;\n        code = value.charCodeAt(next);\n      } while (code <= 32);\n      token = value.slice(pos, next);\n\n      prev = tokens[tokens.length - 1];\n      if (code === closeParentheses && balanced) {\n        after = token;\n      } else if (prev && prev.type === \"div\") {\n        prev.after = token;\n        prev.sourceEndIndex += token.length;\n      } else if (\n        code === comma ||\n        code === colon ||\n        (code === slash &&\n          value.charCodeAt(next + 1) !== star &&\n          (!parent ||\n            (parent && parent.type === \"function\" && parent.value !== \"calc\")))\n      ) {\n        before = token;\n      } else {\n        tokens.push({\n          type: \"space\",\n          sourceIndex: pos,\n          sourceEndIndex: next,\n          value: token\n        });\n      }\n\n      pos = next;\n\n      // Quotes\n    } else if (code === singleQuote || code === doubleQuote) {\n      next = pos;\n      quote = code === singleQuote ? \"'\" : '\"';\n      token = {\n        type: \"string\",\n        sourceIndex: pos,\n        quote: quote\n      };\n      do {\n        escape = false;\n        next = value.indexOf(quote, next + 1);\n        if (~next) {\n          escapePos = next;\n          while (value.charCodeAt(escapePos - 1) === backslash) {\n            escapePos -= 1;\n            escape = !escape;\n          }\n        } else {\n          value += quote;\n          next = value.length - 1;\n          token.unclosed = true;\n        }\n      } while (escape);\n      token.value = value.slice(pos + 1, next);\n      token.sourceEndIndex = token.unclosed ? next : next + 1;\n      tokens.push(token);\n      pos = next + 1;\n      code = value.charCodeAt(pos);\n\n      // Comments\n    } else if (code === slash && value.charCodeAt(pos + 1) === star) {\n      next = value.indexOf(\"*/\", pos);\n\n      token = {\n        type: \"comment\",\n        sourceIndex: pos,\n        sourceEndIndex: next + 2\n      };\n\n      if (next === -1) {\n        token.unclosed = true;\n        next = value.length;\n        token.sourceEndIndex = next;\n      }\n\n      token.value = value.slice(pos + 2, next);\n      tokens.push(token);\n\n      pos = next + 2;\n      code = value.charCodeAt(pos);\n\n      // Operation within calc\n    } else if (\n      (code === slash || code === star) &&\n      parent &&\n      parent.type === \"function\" &&\n      parent.value === \"calc\"\n    ) {\n      token = value[pos];\n      tokens.push({\n        type: \"word\",\n        sourceIndex: pos - before.length,\n        sourceEndIndex: pos + token.length,\n        value: token\n      });\n      pos += 1;\n      code = value.charCodeAt(pos);\n\n      // Dividers\n    } else if (code === slash || code === comma || code === colon) {\n      token = value[pos];\n\n      tokens.push({\n        type: \"div\",\n        sourceIndex: pos - before.length,\n        sourceEndIndex: pos + token.length,\n        value: token,\n        before: before,\n        after: \"\"\n      });\n      before = \"\";\n\n      pos += 1;\n      code = value.charCodeAt(pos);\n\n      // Open parentheses\n    } else if (openParentheses === code) {\n      // Whitespaces after open parentheses\n      next = pos;\n      do {\n        next += 1;\n        code = value.charCodeAt(next);\n      } while (code <= 32);\n      parenthesesOpenPos = pos;\n      token = {\n        type: \"function\",\n        sourceIndex: pos - name.length,\n        value: name,\n        before: value.slice(parenthesesOpenPos + 1, next)\n      };\n      pos = next;\n\n      if (name === \"url\" && code !== singleQuote && code !== doubleQuote) {\n        next -= 1;\n        do {\n          escape = false;\n          next = value.indexOf(\")\", next + 1);\n          if (~next) {\n            escapePos = next;\n            while (value.charCodeAt(escapePos - 1) === backslash) {\n              escapePos -= 1;\n              escape = !escape;\n            }\n          } else {\n            value += \")\";\n            next = value.length - 1;\n            token.unclosed = true;\n          }\n        } while (escape);\n        // Whitespaces before closed\n        whitespacePos = next;\n        do {\n          whitespacePos -= 1;\n          code = value.charCodeAt(whitespacePos);\n        } while (code <= 32);\n        if (parenthesesOpenPos < whitespacePos) {\n          if (pos !== whitespacePos + 1) {\n            token.nodes = [\n              {\n                type: \"word\",\n                sourceIndex: pos,\n                sourceEndIndex: whitespacePos + 1,\n                value: value.slice(pos, whitespacePos + 1)\n              }\n            ];\n          } else {\n            token.nodes = [];\n          }\n          if (token.unclosed && whitespacePos + 1 !== next) {\n            token.after = \"\";\n            token.nodes.push({\n              type: \"space\",\n              sourceIndex: whitespacePos + 1,\n              sourceEndIndex: next,\n              value: value.slice(whitespacePos + 1, next)\n            });\n          } else {\n            token.after = value.slice(whitespacePos + 1, next);\n            token.sourceEndIndex = next;\n          }\n        } else {\n          token.after = \"\";\n          token.nodes = [];\n        }\n        pos = next + 1;\n        token.sourceEndIndex = token.unclosed ? next : pos;\n        code = value.charCodeAt(pos);\n        tokens.push(token);\n      } else {\n        balanced += 1;\n        token.after = \"\";\n        token.sourceEndIndex = pos + 1;\n        tokens.push(token);\n        stack.push(token);\n        tokens = token.nodes = [];\n        parent = token;\n      }\n      name = \"\";\n\n      // Close parentheses\n    } else if (closeParentheses === code && balanced) {\n      pos += 1;\n      code = value.charCodeAt(pos);\n\n      parent.after = after;\n      parent.sourceEndIndex += after.length;\n      after = \"\";\n      balanced -= 1;\n      stack[stack.length - 1].sourceEndIndex = pos;\n      stack.pop();\n      parent = stack[balanced];\n      tokens = parent.nodes;\n\n      // Words\n    } else {\n      next = pos;\n      do {\n        if (code === backslash) {\n          next += 1;\n        }\n        next += 1;\n        code = value.charCodeAt(next);\n      } while (\n        next < max &&\n        !(\n          code <= 32 ||\n          code === singleQuote ||\n          code === doubleQuote ||\n          code === comma ||\n          code === colon ||\n          code === slash ||\n          code === openParentheses ||\n          (code === star &&\n            parent &&\n            parent.type === \"function\" &&\n            parent.value === \"calc\") ||\n          (code === slash &&\n            parent.type === \"function\" &&\n            parent.value === \"calc\") ||\n          (code === closeParentheses && balanced)\n        )\n      );\n      token = value.slice(pos, next);\n\n      if (openParentheses === code) {\n        name = token;\n      } else if (\n        (uLower === token.charCodeAt(0) || uUpper === token.charCodeAt(0)) &&\n        plus === token.charCodeAt(1) &&\n        isUnicodeRange.test(token.slice(2))\n      ) {\n        tokens.push({\n          type: \"unicode-range\",\n          sourceIndex: pos,\n          sourceEndIndex: next,\n          value: token\n        });\n      } else {\n        tokens.push({\n          type: \"word\",\n          sourceIndex: pos,\n          sourceEndIndex: next,\n          value: token\n        });\n      }\n\n      pos = next;\n    }\n  }\n\n  for (pos = stack.length - 1; pos; pos -= 1) {\n    stack[pos].unclosed = true;\n    stack[pos].sourceEndIndex = value.length;\n  }\n\n  return stack[0].nodes;\n};\n/lib/index.d.ts\u0010declare namespace postcssValueParser {\n  interface BaseNode {\n    /**\n     * The offset, inclusive, inside the CSS value at which the node starts.\n     */\n    sourceIndex: number;\n\n    /**\n     * The offset, exclusive, inside the CSS value at which the node ends.\n     */\n    sourceEndIndex: number;\n\n    /**\n     * The node's characteristic value\n     */\n    value: string;\n  }\n\n  interface ClosableNode {\n    /**\n     * Whether the parsed CSS value ended before the node was properly closed\n     */\n    unclosed?: true;\n  }\n\n  interface AdjacentAwareNode {\n    /**\n     * The token at the start of the node\n     */\n    before: string;\n\n    /**\n     * The token at the end of the node\n     */\n    after: string;\n  }\n\n  interface CommentNode extends BaseNode, ClosableNode {\n    type: \"comment\";\n  }\n\n  interface DivNode extends BaseNode, AdjacentAwareNode {\n    type: \"div\";\n  }\n\n  interface FunctionNode extends BaseNode, ClosableNode, AdjacentAwareNode {\n    type: \"function\";\n\n    /**\n     * Nodes inside the function\n     */\n    nodes: Node[];\n  }\n\n  interface SpaceNode extends BaseNode {\n    type: \"space\";\n  }\n\n  interface StringNode extends BaseNode, ClosableNode {\n    type: \"string\";\n\n    /**\n     * The quote type delimiting the string\n     */\n    quote: '\"' | \"'\";\n  }\n\n  interface UnicodeRangeNode extends BaseNode {\n    type: \"unicode-range\";\n  }\n\n  interface WordNode extends BaseNode {\n    type: \"word\";\n  }\n\n  /**\n   * Any node parsed from a CSS value\n   */\n  type Node =\n    | CommentNode\n    | DivNode\n    | FunctionNode\n    | SpaceNode\n    | StringNode\n    | UnicodeRangeNode\n    | WordNode;\n\n  interface CustomStringifierCallback {\n    /**\n     * @param node The node to stringify\n     * @returns The serialized CSS representation of the node\n     */\n    (nodes: Node): string | undefined;\n  }\n\n  interface WalkCallback {\n    /**\n     * @param node  The currently visited node\n     * @param index The index of the node in the series of parsed nodes\n     * @param nodes The series of parsed nodes\n     * @returns Returning `false` will prevent traversal of descendant nodes (only applies if `bubble` was set to `true` in the `walk()` call)\n     */\n    (node: Node, index: number, nodes: Node[]): void | boolean;\n  }\n\n  /**\n   * A CSS dimension, decomposed into its numeric and unit parts\n   */\n  interface Dimension {\n    number: string;\n    unit: string;\n  }\n\n  /**\n   * A wrapper around a parsed CSS value that allows for inspecting and walking nodes\n   */\n  interface ParsedValue {\n    /**\n     * The series of parsed nodes\n     */\n    nodes: Node[];\n\n    /**\n     * Walk all parsed nodes, applying a callback\n     *\n     * @param callback A visitor callback that will be executed for each node\n     * @param bubble   When set to `true`, walking will be done inside-out instead of outside-in\n     */\n    walk(callback: WalkCallback, bubble?: boolean): this;\n  }\n\n  interface ValueParser {\n    /**\n     * Decompose a CSS dimension into its numeric and unit part\n     *\n     * @param value The dimension to decompose\n     * @returns An object representing `number` and `unit` part of the dimension or `false` if the decomposing fails\n     */\n    unit(value: string): Dimension | false;\n\n    /**\n     * Serialize a series of nodes into a CSS value\n     *\n     * @param nodes  The nodes to stringify\n     * @param custom A custom stringifier callback\n     * @returns The generated CSS value\n     */\n    stringify(nodes: Node | Node[], custom?: CustomStringifierCallback): string;\n\n    /**\n     * Walk a series of nodes, applying a callback\n     *\n     * @param nodes    The nodes to walk\n     * @param callback A visitor callback that will be executed for each node\n     * @param bubble   When set to `true`, walking will be done inside-out instead of outside-in\n     */\n    walk(nodes: Node[], callback: WalkCallback, bubble?: boolean): void;\n\n    /**\n     * Parse a CSS value into a series of nodes to operate on\n     *\n     * @param value The value to parse\n     */\n    new (value: string): ParsedValue;\n\n    /**\n     * Parse a CSS value into a series of nodes to operate on\n     *\n     * @param value The value to parse\n     */\n    (value: string): ParsedValue;\n  }\n}\n\ndeclare const postcssValueParser: postcssValueParser.ValueParser;\n\nexport = postcssValueParser;\n/lib/unit.js\bvar minus = \"-\".charCodeAt(0);\nvar plus = \"+\".charCodeAt(0);\nvar dot = \".\".charCodeAt(0);\nvar exp = \"e\".charCodeAt(0);\nvar EXP = \"E\".charCodeAt(0);\n\n// Check if three code points would start a number\n// https://www.w3.org/TR/css-syntax-3/#starts-with-a-number\nfunction likeNumber(value) {\n  var code = value.charCodeAt(0);\n  var nextCode;\n\n  if (code === plus || code === minus) {\n    nextCode = value.charCodeAt(1);\n\n    if (nextCode >= 48 && nextCode <= 57) {\n      return true;\n    }\n\n    var nextNextCode = value.charCodeAt(2);\n\n    if (nextCode === dot && nextNextCode >= 48 && nextNextCode <= 57) {\n      return true;\n    }\n\n    return false;\n  }\n\n  if (code === dot) {\n    nextCode = value.charCodeAt(1);\n\n    if (nextCode >= 48 && nextCode <= 57) {\n      return true;\n    }\n\n    return false;\n  }\n\n  if (code >= 48 && code <= 57) {\n    return true;\n  }\n\n  return false;\n}\n\n// Consume a number\n// https://www.w3.org/TR/css-syntax-3/#consume-number\nmodule.exports = function(value) {\n  var pos = 0;\n  var length = value.length;\n  var code;\n  var nextCode;\n  var nextNextCode;\n\n  if (length === 0 || !likeNumber(value)) {\n    return false;\n  }\n\n  code = value.charCodeAt(pos);\n\n  if (code === plus || code === minus) {\n    pos++;\n  }\n\n  while (pos < length) {\n    code = value.charCodeAt(pos);\n\n    if (code < 48 || code > 57) {\n      break;\n    }\n\n    pos += 1;\n  }\n\n  code = value.charCodeAt(pos);\n  nextCode = value.charCodeAt(pos + 1);\n\n  if (code === dot && nextCode >= 48 && nextCode <= 57) {\n    pos += 2;\n\n    while (pos < length) {\n      code = value.charCodeAt(pos);\n\n      if (code < 48 || code > 57) {\n        break;\n      }\n\n      pos += 1;\n    }\n  }\n\n  code = value.charCodeAt(pos);\n  nextCode = value.charCodeAt(pos + 1);\n  nextNextCode = value.charCodeAt(pos + 2);\n\n  if (\n    (code === exp || code === EXP) &&\n    ((nextCode >= 48 && nextCode <= 57) ||\n      ((nextCode === plus || nextCode === minus) &&\n        nextNextCode >= 48 &&\n        nextNextCode <= 57))\n  ) {\n    pos += nextCode === plus || nextCode === minus ? 3 : 2;\n\n    while (pos < length) {\n      code = value.charCodeAt(pos);\n\n      if (code < 48 || code > 57) {\n        break;\n      }\n\n      pos += 1;\n    }\n  }\n\n  return {\n    number: value.slice(0, pos),\n    unit: value.slice(pos)\n  };\n};\n/lib/stringify.js\u0004function stringifyNode(node, custom) {\n  var type = node.type;\n  var value = node.value;\n  var buf;\n  var customResult;\n\n  if (custom && (customResult = custom(node)) !== undefined) {\n    return customResult;\n  } else if (type === \"word\" || type === \"space\") {\n    return value;\n  } else if (type === \"string\") {\n    buf = node.quote || \"\";\n    return buf + value + (node.unclosed ? \"\" : buf);\n  } else if (type === \"comment\") {\n    return \"/*\" + value + (node.unclosed ? \"\" : \"*/\");\n  } else if (type === \"div\") {\n    return (node.before || \"\") + value + (node.after || \"\");\n  } else if (Array.isArray(node.nodes)) {\n    buf = stringify(node.nodes, custom);\n    if (type !== \"function\") {\n      return buf;\n    }\n    return (\n      value +\n      \"(\" +\n      (node.before || \"\") +\n      buf +\n      (node.after || \"\") +\n      (node.unclosed ? \"\" : \")\")\n    );\n  }\n  return value;\n}\n\nfunction stringify(nodes, custom) {\n  var result, i;\n\n  if (Array.isArray(nodes)) {\n    result = \"\";\n    for (i = nodes.length - 1; ~i; i -= 1) {\n      result = stringifyNode(nodes[i], custom) + result;\n    }\n    return result;\n  }\n  return stringifyNode(nodes, custom);\n}\n\nmodule.exports = stringify;\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/cG9zdGNzcy1sb2FkLWNvbmZpZ0A0LjAuMQ==",
    "content": "/src/index.js\u0010='use strict'\n\nconst resolve = require('path').resolve\nconst url = require('url')\n\nconst config = require('lilconfig')\nconst yaml = require('yaml')\n\nconst loadOptions = require('./options.js')\nconst loadPlugins = require('./plugins.js')\n\n/* istanbul ignore next */\nconst interopRequireDefault = (obj) => obj && obj.__esModule ? obj : { default: obj }\n\n/**\n * Process the result from cosmiconfig\n *\n * @param  {Object} ctx Config Context\n * @param  {Object} result Cosmiconfig result\n *\n * @return {Object} PostCSS Config\n */\nconst processResult = (ctx, result) => {\n  const file = result.filepath || ''\n  let config = interopRequireDefault(result.config).default || {}\n\n  if (typeof config === 'function') {\n    config = config(ctx)\n  } else {\n    config = Object.assign({}, config, ctx)\n  }\n\n  if (!config.plugins) {\n    config.plugins = []\n  }\n\n  return {\n    plugins: loadPlugins(config, file),\n    options: loadOptions(config, file),\n    file\n  }\n}\n\n/**\n * Builds the Config Context\n *\n * @param  {Object} ctx Config Context\n *\n * @return {Object} Config Context\n */\nconst createContext = (ctx) => {\n  /**\n   * @type {Object}\n   *\n   * @prop {String} cwd=process.cwd() Config search start location\n   * @prop {String} env=process.env.NODE_ENV Config Enviroment, will be set to `development` by `postcss-load-config` if `process.env.NODE_ENV` is `undefined`\n   */\n  ctx = Object.assign({\n    cwd: process.cwd(),\n    env: process.env.NODE_ENV\n  }, ctx)\n\n  if (!ctx.env) {\n    process.env.NODE_ENV = 'development'\n  }\n\n  return ctx\n}\n\nconst importDefault = async filepath => {\n  const module = await import(url.pathToFileURL(filepath).href)\n  return module.default\n}\n\nconst addTypeScriptLoader = (options = {}, loader) => {\n  const moduleName = 'postcss'\n\n  return {\n    ...options,\n    searchPlaces: [\n      ...(options.searchPlaces || []),\n      'package.json',\n      `.${moduleName}rc`,\n      `.${moduleName}rc.json`,\n      `.${moduleName}rc.yaml`,\n      `.${moduleName}rc.yml`,\n      `.${moduleName}rc.ts`,\n      `.${moduleName}rc.js`,\n      `.${moduleName}rc.cjs`,\n      `.${moduleName}rc.mjs`,\n      `${moduleName}.config.ts`,\n      `${moduleName}.config.js`,\n      `${moduleName}.config.cjs`,\n      `${moduleName}.config.mjs`\n    ],\n    loaders: {\n      ...options.loaders,\n      '.yaml': (filepath, content) => yaml.parse(content),\n      '.yml': (filepath, content) => yaml.parse(content),\n      '.js': importDefault,\n      '.cjs': importDefault,\n      '.mjs': importDefault,\n      '.ts': loader\n    }\n  }\n}\n\nconst withTypeScriptLoader = (rcFunc) => {\n  return (ctx, path, options) => {\n    return rcFunc(ctx, path, addTypeScriptLoader(options, (configFile) => {\n      let registerer = { enabled () {} }\n\n      try {\n        // Register TypeScript compiler instance\n        registerer = require('ts-node').register()\n\n        return require(configFile)\n      } catch (err) {\n        if (err.code === 'MODULE_NOT_FOUND') {\n          throw new Error(\n            `'ts-node' is required for the TypeScript configuration files. Make sure it is installed\\nError: ${err.message}`\n          )\n        }\n\n        throw err\n      } finally {\n        registerer.enabled(false)\n      }\n    }))\n  }\n}\n\n/**\n * Load Config\n *\n * @method rc\n *\n * @param  {Object} ctx Config Context\n * @param  {String} path Config Path\n * @param  {Object} options Config Options\n *\n * @return {Promise} config PostCSS Config\n */\nconst rc = withTypeScriptLoader((ctx, path, options) => {\n  /**\n   * @type {Object} The full Config Context\n   */\n  ctx = createContext(ctx)\n\n  /**\n   * @type {String} `process.cwd()`\n   */\n  path = path ? resolve(path) : process.cwd()\n\n  return config.lilconfig('postcss', options)\n    .search(path)\n    .then((result) => {\n      if (!result) {\n        throw new Error(`No PostCSS Config found in: ${path}`)\n      }\n\n      return processResult(ctx, result)\n    })\n})\n\n/**\n * Autoload Config for PostCSS\n *\n * @author Michael Ciniawsky @michael-ciniawsky <michael.ciniawsky@gmail.com>\n * @license MIT\n *\n * @module postcss-load-config\n * @version 2.1.0\n *\n * @requires comsiconfig\n * @requires ./options\n * @requires ./plugins\n */\nmodule.exports = rc\n/src/index.d.ts\bF// based on @types/postcss-load-config@2.0.1\n// Type definitions for postcss-load-config 2.1\nimport Processor from 'postcss/lib/processor';\nimport { Plugin, ProcessOptions, Transformer } from 'postcss';\nimport { Options as ConfigOptions } from \"lilconfig\";\n\ndeclare function postcssrc(\n  ctx?: postcssrc.ConfigContext,\n  path?: string,\n  options?: ConfigOptions\n): Promise<postcssrc.Result>;\n\ndeclare namespace postcssrc {\n  // In the ConfigContext, these three options can be instances of the\n  // appropriate class, or strings. If they are strings, postcss-load-config will\n  // require() them and pass the instances along.\n  export interface ProcessOptionsPreload {\n    parser?: string | ProcessOptions['parser'];\n    stringifier?: string | ProcessOptions['stringifier'];\n    syntax?: string | ProcessOptions['syntax'];\n  }\n\n  // The remaining ProcessOptions, sans the three above.\n  export type RemainingProcessOptions = Pick<\n    ProcessOptions,\n    Exclude<keyof ProcessOptions, keyof ProcessOptionsPreload>\n  >;\n\n  // Additional context options that postcss-load-config understands.\n  export interface Context {\n    cwd?: string;\n    env?: string;\n  }\n\n  // The full shape of the ConfigContext.\n  export type ConfigContext = Context &\n    ProcessOptionsPreload &\n    RemainingProcessOptions;\n\n  // Result of postcssrc is a Promise containing the filename plus the options\n  // and plugins that are ready to pass on to postcss.\n  export type ResultPlugin = Plugin | Transformer | Processor;\n\n  export interface Result {\n    file: string;\n    options: ProcessOptions;\n    plugins: ResultPlugin[];\n  }\n\n  export type ConfigPlugin = Transformer | Plugin | Processor;\n\n  export interface Config {\n    parser?: string | ProcessOptions['parser'] | false;\n    stringifier?: string | ProcessOptions['stringifier'] | false;\n    syntax?: string | ProcessOptions['syntax'] | false;\n    map?: string | false;\n    from?: string;\n    to?: string;\n    plugins?: Array<ConfigPlugin | false> | Record<string, object | false>;\n  }\n\n  export type ConfigFn = (ctx: ConfigContext) => Config | Promise<Config>;\n}\n\nexport = postcssrc;\n/LICENSE\u0004QThe MIT License (MIT)\n\nCopyright Michael Ciniawsky <michael.ciniawsky@gmail.com>\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n/src/req.js\u0001\u001e// eslint-disable-next-line n/no-deprecated-api\nconst { createRequire, createRequireFromPath } = require('module')\n\nfunction req (name, rootFile) {\n  const create = createRequire || createRequireFromPath\n  const require = create(rootFile)\n  return require(name)\n}\n\nmodule.exports = req\n/src/options.js\u0004!'use strict'\n\nconst req = require('./req.js')\n\n/**\n * Load Options\n *\n * @private\n * @method options\n *\n * @param  {Object} config  PostCSS Config\n *\n * @return {Object} options PostCSS Options\n */\nconst options = (config, file) => {\n  if (config.parser && typeof config.parser === 'string') {\n    try {\n      config.parser = req(config.parser, file)\n    } catch (err) {\n      throw new Error(`Loading PostCSS Parser failed: ${err.message}\\n\\n(@${file})`)\n    }\n  }\n\n  if (config.syntax && typeof config.syntax === 'string') {\n    try {\n      config.syntax = req(config.syntax, file)\n    } catch (err) {\n      throw new Error(`Loading PostCSS Syntax failed: ${err.message}\\n\\n(@${file})`)\n    }\n  }\n\n  if (config.stringifier && typeof config.stringifier === 'string') {\n    try {\n      config.stringifier = req(config.stringifier, file)\n    } catch (err) {\n      throw new Error(`Loading PostCSS Stringifier failed: ${err.message}\\n\\n(@${file})`)\n    }\n  }\n\n  if (config.plugins) {\n    delete config.plugins\n  }\n\n  return config\n}\n\nmodule.exports = options\n/src/plugins.js\u0007C'use strict'\n\nconst req = require('./req.js')\n\n/**\n * Plugin Loader\n *\n * @private\n * @method load\n *\n * @param  {String} plugin PostCSS Plugin Name\n * @param  {Object} options PostCSS Plugin Options\n *\n * @return {Function} PostCSS Plugin\n */\nconst load = (plugin, options, file) => {\n  try {\n    if (\n      options === null ||\n      options === undefined ||\n      Object.keys(options).length === 0\n    ) {\n      return req(plugin, file)\n    } else {\n      return req(plugin, file)(options)\n    }\n  } catch (err) {\n    throw new Error(`Loading PostCSS Plugin failed: ${err.message}\\n\\n(@${file})`)\n  }\n}\n\n/**\n * Load Plugins\n *\n * @private\n * @method plugins\n *\n * @param {Object} config PostCSS Config Plugins\n *\n * @return {Array} plugins PostCSS Plugins\n */\nconst plugins = (config, file) => {\n  let plugins = []\n\n  if (Array.isArray(config.plugins)) {\n    plugins = config.plugins.filter(Boolean)\n  } else {\n    plugins = Object.keys(config.plugins)\n      .filter((plugin) => {\n        return config.plugins[plugin] !== false ? plugin : ''\n      })\n      .map((plugin) => {\n        return load(plugin, config.plugins[plugin], file)\n      })\n  }\n\n  if (plugins.length && plugins.length > 0) {\n    plugins.forEach((plugin, i) => {\n      if (plugin.default) {\n        plugin = plugin.default\n      }\n\n      if (plugin.postcss === true) {\n        plugin = plugin()\n      } else if (plugin.postcss) {\n        plugin = plugin.postcss\n      }\n\n      if (\n        // eslint-disable-next-line\n        !(\n          (typeof plugin === 'object' && Array.isArray(plugin.plugins)) ||\n          (typeof plugin === 'object' && plugin.postcssPlugin) ||\n          (typeof plugin === 'function')\n        )\n      ) {\n        throw new TypeError(`Invalid PostCSS Plugin found at: plugins[${i}]\\n\\n(@${file})`)\n      }\n    })\n  }\n\n  return plugins\n}\n\nmodule.exports = plugins\n/package.json\u0003{\n  \"name\": \"postcss-load-config\",\n  \"version\": \"4.0.1\",\n  \"description\": \"Autoload Config for PostCSS\",\n  \"main\": \"src/index.js\",\n  \"types\": \"src/index.d.ts\",\n  \"files\": [\n    \"src\"\n  ],\n  \"engines\": {\n    \"node\": \">= 14\"\n  },\n  \"funding\": {\n    \"type\": \"opencollective\",\n    \"url\": \"https://opencollective.com/postcss/\"\n  },\n  \"dependencies\": {\n    \"lilconfig\": \"^2.0.5\",\n    \"yaml\": \"^2.1.1\"\n  },\n  \"peerDependencies\": {\n    \"postcss\": \">=8.0.9\",\n    \"ts-node\": \">=9.0.0\"\n  },\n  \"peerDependenciesMeta\": {\n    \"ts-node\": {\n      \"optional\": true\n    },\n    \"postcss\": {\n      \"optional\": true\n    }\n  },\n  \"keywords\": [\n    \"postcss\",\n    \"postcssrc\",\n    \"postcss.config.js\"\n  ],\n  \"author\": \"Michael Ciniawky <michael.ciniawsky@gmail.com>\",\n  \"contributors\": [\n    \"Ryan Dunckel\",\n    \"Mateusz Derks\",\n    \"Dalton Santos\",\n    \"Patrick Gilday\",\n    \"François Wouts\"\n  ],\n  \"repository\": \"postcss/postcss-load-config\",\n  \"license\": \"MIT\"\n}\n/README.md*7[![npm][npm]][npm-url]\n[![node][node]][node-url]\n[![deps][deps]][deps-url]\n[![test][test]][test-url]\n[![coverage][cover]][cover-url]\n[![code style][style]][style-url]\n[![chat][chat]][chat-url]\n\n<div align=\"center\">\n  <img width=\"100\" height=\"100\" title=\"Load Options\" src=\"http://michael-ciniawsky.github.io/postcss-load-options/logo.svg\">\n  <a href=\"https://github.com/postcss/postcss\">\n    <img width=\"110\" height=\"110\" title=\"PostCSS\"           src=\"http://postcss.github.io/postcss/logo.svg\" hspace=\"10\">\n  </a>\n  <img width=\"100\" height=\"100\" title=\"Load Plugins\" src=\"http://michael-ciniawsky.github.io/postcss-load-plugins/logo.svg\">\n  <h1>Load Config</h1>\n</div>\n\n<h2 align=\"center\">Install</h2>\n\n```bash\nnpm i -D postcss-load-config\n```\n\n<h2 align=\"center\">Usage</h2>\n\n```bash\nnpm i -S|-D postcss-plugin\n```\n\nInstall all required PostCSS plugins and save them to your **package.json** `dependencies`/`devDependencies`\n\nThen create a PostCSS config file by choosing one of the following formats\n\n### `package.json`\n\nCreate a **`postcss`** section in your project's **`package.json`**\n\n```\nProject (Root)\n  |– client\n  |– public\n  |\n  |- package.json\n```\n\n```json\n{\n  \"postcss\": {\n    \"parser\": \"sugarss\",\n    \"map\": false,\n    \"plugins\": {\n      \"postcss-plugin\": {}\n    }\n  }\n}\n```\n\n### `.postcssrc`\n\nCreate a **`.postcssrc`** file in JSON or YAML format\n\n> ℹ️ It's recommended to use an extension (e.g **`.postcssrc.json`** or **`.postcssrc.yml`**) instead of `.postcssrc`\n\n```\nProject (Root)\n  |– client\n  |– public\n  |\n  |- (.postcssrc|.postcssrc.json|.postcssrc.yml)\n  |- package.json\n```\n\n**`.postcssrc.json`**\n```json\n{\n  \"parser\": \"sugarss\",\n  \"map\": false,\n  \"plugins\": {\n    \"postcss-plugin\": {}\n  }\n}\n```\n\n**`.postcssrc.yml`**\n```yaml\nparser: sugarss\nmap: false\nplugins:\n  postcss-plugin: {}\n```\n\n### `.postcssrc.js` or `postcss.config.js`\n\nYou may need some logic within your config.\nIn this case create JS file named:\n- `.postcssrc.js`\n- `.postcssrc.mjs`\n- `.postcssrc.cjs`\n- `.postcssrc.ts`\n- `postcss.config.js`\n- `postcss.config.mjs`\n- `postcss.config.cjs`\n- `postcss.config.ts`\n\n```\nProject (Root)\n  |– client\n  |– public\n  |- (.postcssrc|postcss.config).(js|mjs|cjs|ts)\n  |- package.json\n```\n\nYou can export the config as an `{Object}`\n\n**.postcssrc.js**\n```js\nmodule.exports = {\n  parser: 'sugarss',\n  map: false,\n  plugins: {\n    'postcss-plugin': {}\n  }\n}\n```\n\nOr export a `{Function}` that returns the config (more about the `ctx` param below)\n\n**.postcssrc.js**\n```js\nmodule.exports = (ctx) => ({\n  parser: ctx.parser ? 'sugarss' : false,\n  map: ctx.env === 'development' ? ctx.map : false,\n  plugins: {\n    'postcss-plugin': ctx.options.plugin\n  }\n})\n```\n\nPlugins can be loaded either using an `{Object}` or an `{Array}`\n\n#### `{Object}`\n\n**.postcssrc.js**\n```js\nmodule.exports = ({ env }) => ({\n  ...options,\n  plugins: {\n    'postcss-plugin': env === 'production' ? {} : false\n  }\n})\n```\n\n> ℹ️ When using an `{Object}`, the key can be a Node.js module name, a path to a JavaScript file that is relative to the directory of the PostCSS config file, or an absolute path to a JavaScript file.\n\n#### `{Array}`\n\n**.postcssrc.js**\n```js\nmodule.exports = ({ env }) => ({\n  ...options,\n  plugins: [\n    env === 'production' ? require('postcss-plugin')() : false\n  ]\n})\n```\n> :warning: When using an `{Array}`, make sure to `require()` each plugin\n\n<h2 align=\"center\">Options</h2>\n\n|Name|Type|Default|Description|\n|:--:|:--:|:-----:|:----------|\n|[**`to`**](#to)|`{String}`|`undefined`|Destination File Path|\n|[**`map`**](#map)|`{String\\|Object}`|`false`|Enable/Disable Source Maps|\n|[**`from`**](#from)|`{String}`|`undefined`|Source File Path|\n|[**`parser`**](#parser)|`{String\\|Function}`|`false`|Custom PostCSS Parser|\n|[**`syntax`**](#syntax)|`{String\\|Function}`|`false`|Custom PostCSS Syntax|\n|[**`stringifier`**](#stringifier)|`{String\\|Function}`|`false`|Custom PostCSS Stringifier|\n\n### `parser`\n\n**.postcssrc.js**\n```js\nmodule.exports = {\n  parser: 'sugarss'\n}\n```\n\n### `syntax`\n\n**.postcssrc.js**\n```js\nmodule.exports = {\n  syntax: 'postcss-scss'\n}\n```\n\n### `stringifier`\n\n**.postcssrc.js**\n```js\nmodule.exports = {\n  stringifier: 'midas'\n}\n```\n\n### [**`map`**](https://github.com/postcss/postcss/blob/master/docs/source-maps.md)\n\n**.postcssrc.js**\n```js\nmodule.exports = {\n  map: 'inline'\n}\n```\n\n> :warning: In most cases `options.from` && `options.to` are set by the third-party which integrates this package (CLI, gulp, webpack). It's unlikely one needs to set/use `options.from` && `options.to` within a config file. Unless you're a third-party plugin author using this module and its Node API directly **dont't set `options.from` && `options.to` yourself**\n\n### `to`\n\n```js\nmodule.exports = {\n  to: 'path/to/dest.css'\n}\n```\n\n### `from`\n\n```js\nmodule.exports = {\n  from: 'path/to/src.css'\n}\n```\n\n<h2 align=\"center\">Plugins</h2>\n\n### `{} || null`\n\nThe plugin will be loaded with defaults\n\n```js\n'postcss-plugin': {} || null\n```\n\n**.postcssrc.js**\n```js\nmodule.exports = {\n  plugins: {\n    'postcss-plugin': {} || null\n  }\n}\n```\n\n> :warning: `{}` must be an **empty** `{Object}` literal\n\n### `{Object}`\n\nThe plugin will be loaded with given options\n\n```js\n'postcss-plugin': { option: '', option: '' }\n```\n\n**.postcssrc.js**\n```js\nmodule.exports = {\n  plugins: {\n    'postcss-plugin': { option: '', option: '' }\n  }\n}\n```\n\n### `false`\n\nThe plugin will not be loaded\n\n```js\n'postcss-plugin': false\n```\n\n**.postcssrc.js**\n```js\nmodule.exports = {\n  plugins: {\n    'postcss-plugin': false\n  }\n}\n```\n\n### `Ordering`\n\nPlugin **execution order** is determined by declaration in the plugins section (**top-down**)\n\n```js\n{\n  plugins: {\n    'postcss-plugin': {}, // [0]\n    'postcss-plugin': {}, // [1]\n    'postcss-plugin': {}  // [2]\n  }\n}\n```\n\n<h2 align=\"center\">Context</h2>\n\nWhen using a `{Function}` (`postcss.config.js` or `.postcssrc.js`), it's possible to pass context to `postcss-load-config`, which will be evaluated while loading your config. By default `ctx.env (process.env.NODE_ENV)` and `ctx.cwd (process.cwd())` are available on the `ctx` `{Object}`\n\n> ℹ️ Most third-party integrations add additional properties to the `ctx` (e.g `postcss-loader`). Check the specific module's README for more information about what is available on the respective `ctx`\n\n<h2 align=\"center\">Examples</h2>\n\n**postcss.config.js**\n\n```js\nmodule.exports = (ctx) => ({\n  parser: ctx.parser ? 'sugarss' : false,\n  map: ctx.env === 'development' ? ctx.map : false,\n  plugins: {\n    'postcss-import': {},\n    'postcss-nested': {},\n    cssnano: ctx.env === 'production' ? {} : false\n  }\n})\n```\n\n<div align=\"center\">\n  <img width=\"80\" height=\"80\" src=\"https://worldvectorlogo.com/logos/nodejs-icon.svg\">\n</div>\n\n```json\n\"scripts\": {\n  \"build\": \"NODE_ENV=production node postcss\",\n  \"start\": \"NODE_ENV=development node postcss\"\n}\n```\n\n```js\nconst { readFileSync } = require('fs')\n\nconst postcss = require('postcss')\nconst postcssrc = require('postcss-load-config')\n\nconst css = readFileSync('index.sss', 'utf8')\n\nconst ctx = { parser: true, map: 'inline' }\n\npostcssrc(ctx).then(({ plugins, options }) => {\n  postcss(plugins)\n    .process(css, options)\n    .then((result) => console.log(result.css))\n})\n```\n\n<div align=\"center\">\n  <img width=\"80\" height=\"80\" halign=\"10\" src=\"https://worldvectorlogo.com/logos/gulp.svg\">\n</div>\n\n```json\n\"scripts\": {\n  \"build\": \"NODE_ENV=production gulp\",\n  \"start\": \"NODE_ENV=development gulp\"\n}\n```\n\n```js\nconst { task, src, dest, series, watch } = require('gulp')\n\nconst postcss = require('gulp-postcssrc')\n\nconst css = () => {\n  src('src/*.css')\n    .pipe(postcss())\n    .pipe(dest('dest'))\n})\n\ntask('watch', () => {\n  watch(['src/*.css', 'postcss.config.js'], css)\n})\n\ntask('default', series(css, 'watch'))\n```\n\n<div align=\"center\">\n  <img width=\"80\" height=\"80\" src=\"https://cdn.rawgit.com/webpack/media/e7485eb2/logo/icon.svg\">\n</div>\n\n```json\n\"scripts\": {\n  \"build\": \"NODE_ENV=production webpack\",\n  \"start\": \"NODE_ENV=development webpack-dev-server\"\n}\n```\n\n**webpack.config.js**\n```js\nmodule.exports = (env) => ({\n  module: {\n    rules: [\n      {\n        test: /\\.css$/,\n        use: [\n          'style-loader',\n          'css-loader',\n          'postcss-loader'\n        ]\n      }\n    ]\n  }\n})\n```\n\n<h2 align=\"center\">Maintainers</h2>\n\n<table>\n  <tbody>\n   <tr>\n    <td align=\"center\">\n      <img width=\"150\" height=\"150\"\n        src=\"https://github.com/michael-ciniawsky.png?v=3&s=150\">\n      <br />\n      <a href=\"https://github.com/michael-ciniawsky\">Michael Ciniawsky</a>\n    </td>\n    <td align=\"center\">\n      <img width=\"150\" height=\"150\"\n        src=\"https://github.com/ertrzyiks.png?v=3&s=150\">\n      <br />\n      <a href=\"https://github.com/ertrzyiks\">Mateusz Derks</a>\n    </td>\n  </tr>\n  <tbody>\n</table>\n\n<h2 align=\"center\">Contributors</h2>\n\n<table>\n  <tbody>\n   <tr>\n    <td align=\"center\">\n      <img width=\"150\" height=\"150\"\n        src=\"https://github.com/sparty02.png?v=3&s=150\">\n      <br />\n      <a href=\"https://github.com/sparty02\">Ryan Dunckel</a>\n    </td>\n    <td align=\"center\">\n      <img width=\"150\" height=\"150\"\n        src=\"https://github.com/pcgilday.png?v=3&s=150\">\n      <br />\n      <a href=\"https://github.com/pcgilday\">Patrick Gilday</a>\n    </td>\n    <td align=\"center\">\n      <img width=\"150\" height=\"150\"\n        src=\"https://github.com/daltones.png?v=3&s=150\">\n      <br />\n      <a href=\"https://github.com/daltones\">Dalton Santos</a>\n    </td>\n    <td align=\"center\">\n      <img width=\"150\" height=\"150\"\n        src=\"https://github.com/fwouts.png?v=3&s=150\">\n      <br />\n      <a href=\"https://github.com/fwouts\">François Wouts</a>\n    </td>\n  </tr>\n  <tbody>\n</table>\n\n\n[npm]: https://img.shields.io/npm/v/postcss-load-config.svg\n[npm-url]: https://npmjs.com/package/postcss-load-config\n\n[node]: https://img.shields.io/node/v/postcss-load-plugins.svg\n[node-url]: https://nodejs.org/\n\n[deps]: https://david-dm.org/michael-ciniawsky/postcss-load-config.svg\n[deps-url]: https://david-dm.org/michael-ciniawsky/postcss-load-config\n\n[test]: http://img.shields.io/travis/michael-ciniawsky/postcss-load-config.svg\n[test-url]: https://travis-ci.org/michael-ciniawsky/postcss-load-config\n\n[cover]: https://coveralls.io/repos/github/michael-ciniawsky/postcss-load-config/badge.svg\n[cover-url]: https://coveralls.io/github/michael-ciniawsky/postcss-load-config\n\n[style]: https://img.shields.io/badge/code%20style-standard-yellow.svg\n[style-url]: http://standardjs.com/\n\n[chat]: https://img.shields.io/gitter/room/postcss/postcss.svg\n[chat-url]: https://gitter.im/postcss/postcss\n\n## Security Contact\n\nTo report a security vulnerability, please use the [Tidelift security contact].\nTidelift will coordinate the fix and disclosure.\n\n[Tidelift security contact]: https://tidelift.com/security\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/cGF0aC10eXBlQDQuMC4w",
    "content": "/readme.md\u0004X# path-type [![Build Status](https://travis-ci.org/sindresorhus/path-type.svg?branch=master)](https://travis-ci.org/sindresorhus/path-type)\n\n> Check if a path is a file, directory, or symlink\n\n\n## Install\n\n```\n$ npm install path-type\n```\n\n\n## Usage\n\n```js\nconst {isFile} = require('path-type');\n\n(async () => {\n\tconsole.log(await isFile('package.json'));\n\t//=> true\n})();\n```\n\n\n## API\n\n### isFile(path)\n\nCheck whether the passed `path` is a file.\n\nReturns a `Promise<boolean>`.\n\n#### path\n\nType: `string`\n\nThe path to check.\n\n### isDirectory(path)\n\nCheck whether the passed `path` is a directory.\n\nReturns a `Promise<boolean>`.\n\n### isSymlink(path)\n\nCheck whether the passed `path` is a symlink.\n\nReturns a `Promise<boolean>`.\n\n### isFileSync(path)\n\nSynchronously check whether the passed `path` is a file.\n\nReturns a `boolean`.\n\n### isDirectorySync(path)\n\nSynchronously check whether the passed `path` is a directory.\n\nReturns a `boolean`.\n\n### isSymlinkSync(path)\n\nSynchronously check whether the passed `path` is a symlink.\n\nReturns a `boolean`.\n\n\n## License\n\nMIT © [Sindre Sorhus](https://sindresorhus.com)\n/package.json\u0002{\n\t\"name\": \"path-type\",\n\t\"version\": \"4.0.0\",\n\t\"description\": \"Check if a path is a file, directory, or symlink\",\n\t\"license\": \"MIT\",\n\t\"repository\": \"sindresorhus/path-type\",\n\t\"author\": {\n\t\t\"name\": \"Sindre Sorhus\",\n\t\t\"email\": \"sindresorhus@gmail.com\",\n\t\t\"url\": \"sindresorhus.com\"\n\t},\n\t\"engines\": {\n\t\t\"node\": \">=8\"\n\t},\n\t\"scripts\": {\n\t\t\"test\": \"xo && nyc ava && tsd-check\"\n\t},\n\t\"files\": [\n\t\t\"index.js\",\n\t\t\"index.d.ts\"\n\t],\n\t\"keywords\": [\n\t\t\"path\",\n\t\t\"fs\",\n\t\t\"type\",\n\t\t\"is\",\n\t\t\"check\",\n\t\t\"directory\",\n\t\t\"dir\",\n\t\t\"file\",\n\t\t\"filepath\",\n\t\t\"symlink\",\n\t\t\"symbolic\",\n\t\t\"link\",\n\t\t\"stat\",\n\t\t\"stats\",\n\t\t\"filesystem\"\n\t],\n\t\"devDependencies\": {\n\t\t\"ava\": \"^1.3.1\",\n\t\t\"nyc\": \"^13.3.0\",\n\t\t\"tsd-check\": \"^0.3.0\",\n\t\t\"xo\": \"^0.24.0\"\n\t}\n}\n/index.js\u0004'use strict';\nconst {promisify} = require('util');\nconst fs = require('fs');\n\nasync function isType(fsStatType, statsMethodName, filePath) {\n\tif (typeof filePath !== 'string') {\n\t\tthrow new TypeError(`Expected a string, got ${typeof filePath}`);\n\t}\n\n\ttry {\n\t\tconst stats = await promisify(fs[fsStatType])(filePath);\n\t\treturn stats[statsMethodName]();\n\t} catch (error) {\n\t\tif (error.code === 'ENOENT') {\n\t\t\treturn false;\n\t\t}\n\n\t\tthrow error;\n\t}\n}\n\nfunction isTypeSync(fsStatType, statsMethodName, filePath) {\n\tif (typeof filePath !== 'string') {\n\t\tthrow new TypeError(`Expected a string, got ${typeof filePath}`);\n\t}\n\n\ttry {\n\t\treturn fs[fsStatType](filePath)[statsMethodName]();\n\t} catch (error) {\n\t\tif (error.code === 'ENOENT') {\n\t\t\treturn false;\n\t\t}\n\n\t\tthrow error;\n\t}\n}\n\nexports.isFile = isType.bind(null, 'stat', 'isFile');\nexports.isDirectory = isType.bind(null, 'stat', 'isDirectory');\nexports.isSymlink = isType.bind(null, 'lstat', 'isSymbolicLink');\nexports.isFileSync = isTypeSync.bind(null, 'statSync', 'isFile');\nexports.isDirectorySync = isTypeSync.bind(null, 'statSync', 'isDirectory');\nexports.isSymlinkSync = isTypeSync.bind(null, 'lstatSync', 'isSymbolicLink');\n/license\u0004UMIT License\n\nCopyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)\n\nPermission 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:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE 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.\n/index.d.ts\u0005\u0010export type PathTypeFunction = (path: string) => Promise<boolean>;\n\n/**\n * Check whether the passed `path` is a file.\n *\n * @param path - The path to check.\n * @returns Whether the `path` is a file.\n */\nexport const isFile: PathTypeFunction;\n\n/**\n * Check whether the passed `path` is a directory.\n *\n * @param path - The path to check.\n * @returns Whether the `path` is a directory.\n */\nexport const isDirectory: PathTypeFunction;\n\n/**\n * Check whether the passed `path` is a symlink.\n *\n * @param path - The path to check.\n * @returns Whether the `path` is a symlink.\n */\nexport const isSymlink: PathTypeFunction;\n\nexport type PathTypeSyncFunction = (path: string) => boolean;\n\n/**\n * Synchronously check whether the passed `path` is a file.\n *\n * @param path - The path to check.\n * @returns Whether the `path` is a file.\n */\nexport const isFileSync: PathTypeSyncFunction;\n\n/**\n * Synchronously check whether the passed `path` is a directory.\n *\n * @param path - The path to check.\n * @returns Whether the `path` is a directory.\n */\nexport const isDirectorySync: PathTypeSyncFunction;\n\n/**\n * Synchronously check whether the passed `path` is a symlink.\n *\n * @param path - The path to check.\n * @returns Whether the `path` is a directory.\n */\nexport const isSymlinkSync: PathTypeSyncFunction;\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/cGF0aC1pcy1hYnNvbHV0ZUAxLjAuMQ==",
    "content": "/readme.md\u0004# path-is-absolute [![Build Status](https://travis-ci.org/sindresorhus/path-is-absolute.svg?branch=master)](https://travis-ci.org/sindresorhus/path-is-absolute)\n\n> Node.js 0.12 [`path.isAbsolute()`](http://nodejs.org/api/path.html#path_path_isabsolute_path) [ponyfill](https://ponyfill.com)\n\n\n## Install\n\n```\n$ npm install --save path-is-absolute\n```\n\n\n## Usage\n\n```js\nconst pathIsAbsolute = require('path-is-absolute');\n\n// Running on Linux\npathIsAbsolute('/home/foo');\n//=> true\npathIsAbsolute('C:/Users/foo');\n//=> false\n\n// Running on Windows\npathIsAbsolute('C:/Users/foo');\n//=> true\npathIsAbsolute('/home/foo');\n//=> false\n\n// Running on any OS\npathIsAbsolute.posix('/home/foo');\n//=> true\npathIsAbsolute.posix('C:/Users/foo');\n//=> false\npathIsAbsolute.win32('C:/Users/foo');\n//=> true\npathIsAbsolute.win32('/home/foo');\n//=> false\n```\n\n\n## API\n\nSee the [`path.isAbsolute()` docs](http://nodejs.org/api/path.html#path_path_isabsolute_path).\n\n### pathIsAbsolute(path)\n\n### pathIsAbsolute.posix(path)\n\nPOSIX specific version.\n\n### pathIsAbsolute.win32(path)\n\nWindows specific version.\n\n\n## License\n\nMIT © [Sindre Sorhus](https://sindresorhus.com)\n/license\u0004_The MIT License (MIT)\n\nCopyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n/index.js\u0002c'use strict';\n\nfunction posix(path) {\n\treturn path.charAt(0) === '/';\n}\n\nfunction win32(path) {\n\t// https://github.com/nodejs/node/blob/b3fcc245fb25539909ef1d5eaa01dbf92e168633/lib/path.js#L56\n\tvar splitDeviceRe = /^([a-zA-Z]:|[\\\\\\/]{2}[^\\\\\\/]+[\\\\\\/]+[^\\\\\\/]+)?([\\\\\\/])?([\\s\\S]*?)$/;\n\tvar result = splitDeviceRe.exec(path);\n\tvar device = result[1] || '';\n\tvar isUnc = Boolean(device && device.charAt(1) !== ':');\n\n\t// UNC paths are always absolute\n\treturn Boolean(result[2] || isUnc);\n}\n\nmodule.exports = process.platform === 'win32' ? win32 : posix;\nmodule.exports.posix = posix;\nmodule.exports.win32 = win32;\n/package.json\u0002{\n  \"name\": \"path-is-absolute\",\n  \"version\": \"1.0.1\",\n  \"description\": \"Node.js 0.12 path.isAbsolute() ponyfill\",\n  \"license\": \"MIT\",\n  \"repository\": \"sindresorhus/path-is-absolute\",\n  \"author\": {\n    \"name\": \"Sindre Sorhus\",\n    \"email\": \"sindresorhus@gmail.com\",\n    \"url\": \"sindresorhus.com\"\n  },\n  \"engines\": {\n    \"node\": \">=0.10.0\"\n  },\n  \"scripts\": {\n    \"test\": \"xo && node test.js\"\n  },\n  \"files\": [\n    \"index.js\"\n  ],\n  \"keywords\": [\n    \"path\",\n    \"paths\",\n    \"file\",\n    \"dir\",\n    \"absolute\",\n    \"isabsolute\",\n    \"is-absolute\",\n    \"built-in\",\n    \"util\",\n    \"utils\",\n    \"core\",\n    \"ponyfill\",\n    \"polyfill\",\n    \"shim\",\n    \"is\",\n    \"detect\",\n    \"check\"\n  ],\n  \"devDependencies\": {\n    \"xo\": \"^0.16.0\"\n  }\n}\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/cGF0aC1rZXlAMy4xLjE=",
    "content": "/package.json\u0002{\n\t\"name\": \"path-key\",\n\t\"version\": \"3.1.1\",\n\t\"description\": \"Get the PATH environment variable key cross-platform\",\n\t\"license\": \"MIT\",\n\t\"repository\": \"sindresorhus/path-key\",\n\t\"author\": {\n\t\t\"name\": \"Sindre Sorhus\",\n\t\t\"email\": \"sindresorhus@gmail.com\",\n\t\t\"url\": \"sindresorhus.com\"\n\t},\n\t\"engines\": {\n\t\t\"node\": \">=8\"\n\t},\n\t\"scripts\": {\n\t\t\"test\": \"xo && ava && tsd\"\n\t},\n\t\"files\": [\n\t\t\"index.js\",\n\t\t\"index.d.ts\"\n\t],\n\t\"keywords\": [\n\t\t\"path\",\n\t\t\"key\",\n\t\t\"environment\",\n\t\t\"env\",\n\t\t\"variable\",\n\t\t\"var\",\n\t\t\"get\",\n\t\t\"cross-platform\",\n\t\t\"windows\"\n\t],\n\t\"devDependencies\": {\n\t\t\"@types/node\": \"^11.13.0\",\n\t\t\"ava\": \"^1.4.1\",\n\t\t\"tsd\": \"^0.7.2\",\n\t\t\"xo\": \"^0.24.0\"\n\t}\n}\n/license\u0004UMIT License\n\nCopyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)\n\nPermission 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:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE 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.\n/index.d.ts\u0004\b/// <reference types=\"node\" />\n\ndeclare namespace pathKey {\n\tinterface Options {\n\t\t/**\n\t\tUse a custom environment variables object. Default: [`process.env`](https://nodejs.org/api/process.html#process_process_env).\n\t\t*/\n\t\treadonly env?: {[key: string]: string | undefined};\n\n\t\t/**\n\t\tGet the PATH key for a specific platform. Default: [`process.platform`](https://nodejs.org/api/process.html#process_process_platform).\n\t\t*/\n\t\treadonly platform?: NodeJS.Platform;\n\t}\n}\n\ndeclare const pathKey: {\n\t/**\n\tGet the [PATH](https://en.wikipedia.org/wiki/PATH_(variable)) environment variable key cross-platform.\n\n\t@example\n\t```\n\timport pathKey = require('path-key');\n\n\tconst key = pathKey();\n\t//=> 'PATH'\n\n\tconst PATH = process.env[key];\n\t//=> '/usr/local/bin:/usr/bin:/bin'\n\t```\n\t*/\n\t(options?: pathKey.Options): string;\n\n\t// TODO: Remove this for the next major release, refactor the whole definition to:\n\t// declare function pathKey(options?: pathKey.Options): string;\n\t// export = pathKey;\n\tdefault: typeof pathKey;\n};\n\nexport = pathKey;\n/index.js\u0001'use strict';\n\nconst pathKey = (options = {}) => {\n\tconst environment = options.env || process.env;\n\tconst platform = options.platform || process.platform;\n\n\tif (platform !== 'win32') {\n\t\treturn 'PATH';\n\t}\n\n\treturn Object.keys(environment).reverse().find(key => key.toUpperCase() === 'PATH') || 'Path';\n};\n\nmodule.exports = pathKey;\n// TODO: Remove this for the next major release\nmodule.exports.default = pathKey;\n/readme.md\u0005C# path-key [![Build Status](https://travis-ci.org/sindresorhus/path-key.svg?branch=master)](https://travis-ci.org/sindresorhus/path-key)\n\n> Get the [PATH](https://en.wikipedia.org/wiki/PATH_(variable)) environment variable key cross-platform\n\nIt's usually `PATH`, but on Windows it can be any casing like `Path`...\n\n\n## Install\n\n```\n$ npm install path-key\n```\n\n\n## Usage\n\n```js\nconst pathKey = require('path-key');\n\nconst key = pathKey();\n//=> 'PATH'\n\nconst PATH = process.env[key];\n//=> '/usr/local/bin:/usr/bin:/bin'\n```\n\n\n## API\n\n### pathKey(options?)\n\n#### options\n\nType: `object`\n\n##### env\n\nType: `object`<br>\nDefault: [`process.env`](https://nodejs.org/api/process.html#process_process_env)\n\nUse a custom environment variables object.\n\n#### platform\n\nType: `string`<br>\nDefault: [`process.platform`](https://nodejs.org/api/process.html#process_process_platform)\n\nGet the PATH key for a specific platform.\n\n\n---\n\n<div align=\"center\">\n\t<b>\n\t\t<a href=\"https://tidelift.com/subscription/pkg/npm-path-key?utm_source=npm-path-key&utm_medium=referral&utm_campaign=readme\">Get professional support for this package with a Tidelift subscription</a>\n\t</b>\n\t<br>\n\t<sub>\n\t\tTidelift helps make open source sustainable for maintainers while giving companies<br>assurances about security, maintenance, and licensing for their dependencies.\n\t</sub>\n</div>\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/cGF0aC1rZXlANC4wLjA=",
    "content": "/index.js\u0001\u0007export default function pathKey(options = {}) {\n\tconst {\n\t\tenv = process.env,\n\t\tplatform = process.platform\n\t} = options;\n\n\tif (platform !== 'win32') {\n\t\treturn 'PATH';\n\t}\n\n\treturn Object.keys(env).reverse().find(key => key.toUpperCase() === 'PATH') || 'Path';\n}\n/license\u0004]MIT License\n\nCopyright (c) Sindre Sorhus <sindresorhus@gmail.com> (https://sindresorhus.com)\n\nPermission 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:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE 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.\n/readme.md\u0004# path-key\n\n> Get the [PATH](https://en.wikipedia.org/wiki/PATH_(variable)) environment variable key cross-platform\n\nIt's usually `PATH` but on Windows it can be any casing like `Path`...\n\n## Install\n\n```\n$ npm install path-key\n```\n\n## Usage\n\n```js\nimport pathKey from 'path-key';\n\nconst key = pathKey();\n//=> 'PATH'\n\nconst PATH = process.env[key];\n//=> '/usr/local/bin:/usr/bin:/bin'\n```\n\n## API\n\n### pathKey(options?)\n\n#### options\n\nType: `object`\n\n##### env\n\nType: `object`\\\nDefault: [`process.env`](https://nodejs.org/api/process.html#process_process_env)\n\nUse a custom environment variables object.\n\n#### platform\n\nType: `string`\\\nDefault: [`process.platform`](https://nodejs.org/api/process.html#process_process_platform)\n\nGet the PATH key for a specific platform.\n\n---\n\n<div align=\"center\">\n\t<b>\n\t\t<a href=\"https://tidelift.com/subscription/pkg/npm-path-key?utm_source=npm-path-key&utm_medium=referral&utm_campaign=readme\">Get professional support for this package with a Tidelift subscription</a>\n\t</b>\n\t<br>\n\t<sub>\n\t\tTidelift helps make open source sustainable for maintainers while giving companies<br>assurances about security, maintenance, and licensing for their dependencies.\n\t</sub>\n</div>\n/index.d.ts\u0002export interface Options {\n\t/**\n\tUse a custom environment variables object.\n\n\tDefault: [`process.env`](https://nodejs.org/api/process.html#process_process_env).\n\t*/\n\treadonly env?: Record<string, string | undefined>;\n\n\t/**\n\tGet the PATH key for a specific platform.\n\n\tDefault: [`process.platform`](https://nodejs.org/api/process.html#process_process_platform).\n\t*/\n\treadonly platform?: NodeJS.Platform;\n}\n\n/**\nGet the [PATH](https://en.wikipedia.org/wiki/PATH_(variable)) environment variable key cross-platform.\n\n@example\n```\nimport pathKey from 'path-key';\n\nconst key = pathKey();\n//=> 'PATH'\n\nconst PATH = process.env[key];\n//=> '/usr/local/bin:/usr/bin:/bin'\n```\n*/\nexport default function pathKey(options?: Options): string;\n/package.json\u0002{\n\t\"name\": \"path-key\",\n\t\"version\": \"4.0.0\",\n\t\"description\": \"Get the PATH environment variable key cross-platform\",\n\t\"license\": \"MIT\",\n\t\"repository\": \"sindresorhus/path-key\",\n\t\"funding\": \"https://github.com/sponsors/sindresorhus\",\n\t\"author\": {\n\t\t\"name\": \"Sindre Sorhus\",\n\t\t\"email\": \"sindresorhus@gmail.com\",\n\t\t\"url\": \"https://sindresorhus.com\"\n\t},\n\t\"type\": \"module\",\n\t\"exports\": \"./index.js\",\n\t\"engines\": {\n\t\t\"node\": \">=12\"\n\t},\n\t\"scripts\": {\n\t\t\"test\": \"xo && ava && tsd\"\n\t},\n\t\"files\": [\n\t\t\"index.js\",\n\t\t\"index.d.ts\"\n\t],\n\t\"keywords\": [\n\t\t\"path\",\n\t\t\"key\",\n\t\t\"environment\",\n\t\t\"env\",\n\t\t\"variable\",\n\t\t\"get\",\n\t\t\"cross-platform\",\n\t\t\"windows\"\n\t],\n\t\"devDependencies\": {\n\t\t\"@types/node\": \"^14.14.37\",\n\t\t\"ava\": \"^3.15.0\",\n\t\t\"tsd\": \"^0.14.0\",\n\t\t\"xo\": \"^0.38.2\"\n\t}\n}\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/cGF0aC1wYXJzZUAxLjAuNw==",
    "content": "/package.json\u0002{\n  \"name\": \"path-parse\",\n  \"version\": \"1.0.7\",\n  \"description\": \"Node.js path.parse() ponyfill\",\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"test\": \"node test.js\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/jbgutierrez/path-parse.git\"\n  },\n  \"keywords\": [\n    \"path\",\n    \"paths\",\n    \"file\",\n    \"dir\",\n    \"parse\",\n    \"built-in\",\n    \"util\",\n    \"utils\",\n    \"core\",\n    \"ponyfill\",\n    \"polyfill\",\n    \"shim\"\n  ],\n  \"author\": \"Javier Blanco <http://jbgutierrez.info>\",\n  \"license\": \"MIT\",\n  \"bugs\": {\n    \"url\": \"https://github.com/jbgutierrez/path-parse/issues\"\n  },\n  \"homepage\": \"https://github.com/jbgutierrez/path-parse#readme\"\n}\n/LICENSE\u00048The MIT License (MIT)\n\nCopyright (c) 2015 Javier Blanco\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n/index.js\u0007e'use strict';\n\nvar isWindows = process.platform === 'win32';\n\n// Regex to split a windows path into into [dir, root, basename, name, ext]\nvar splitWindowsRe =\n    /^(((?:[a-zA-Z]:|[\\\\\\/]{2}[^\\\\\\/]+[\\\\\\/]+[^\\\\\\/]+)?[\\\\\\/]?)(?:[^\\\\\\/]*[\\\\\\/])*)((\\.{1,2}|[^\\\\\\/]+?|)(\\.[^.\\/\\\\]*|))[\\\\\\/]*$/;\n\nvar win32 = {};\n\nfunction win32SplitPath(filename) {\n  return splitWindowsRe.exec(filename).slice(1);\n}\n\nwin32.parse = function(pathString) {\n  if (typeof pathString !== 'string') {\n    throw new TypeError(\n        \"Parameter 'pathString' must be a string, not \" + typeof pathString\n    );\n  }\n  var allParts = win32SplitPath(pathString);\n  if (!allParts || allParts.length !== 5) {\n    throw new TypeError(\"Invalid path '\" + pathString + \"'\");\n  }\n  return {\n    root: allParts[1],\n    dir: allParts[0] === allParts[1] ? allParts[0] : allParts[0].slice(0, -1),\n    base: allParts[2],\n    ext: allParts[4],\n    name: allParts[3]\n  };\n};\n\n\n\n// Split a filename into [dir, root, basename, name, ext], unix version\n// 'root' is just a slash, or nothing.\nvar splitPathRe =\n    /^((\\/?)(?:[^\\/]*\\/)*)((\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))[\\/]*$/;\nvar posix = {};\n\n\nfunction posixSplitPath(filename) {\n  return splitPathRe.exec(filename).slice(1);\n}\n\n\nposix.parse = function(pathString) {\n  if (typeof pathString !== 'string') {\n    throw new TypeError(\n        \"Parameter 'pathString' must be a string, not \" + typeof pathString\n    );\n  }\n  var allParts = posixSplitPath(pathString);\n  if (!allParts || allParts.length !== 5) {\n    throw new TypeError(\"Invalid path '\" + pathString + \"'\");\n  }\n  \n  return {\n    root: allParts[1],\n    dir: allParts[0].slice(0, -1),\n    base: allParts[2],\n    ext: allParts[4],\n    name: allParts[3],\n  };\n};\n\n\nif (isWindows)\n  module.exports = win32.parse;\nelse /* posix */\n  module.exports = posix.parse;\n\nmodule.exports.posix = posix.parse;\nmodule.exports.win32 = win32.parse;\n/README.md\u0003g# path-parse [![Build Status](https://travis-ci.org/jbgutierrez/path-parse.svg?branch=master)](https://travis-ci.org/jbgutierrez/path-parse)\n\n> Node.js [`path.parse(pathString)`](https://nodejs.org/api/path.html#path_path_parse_pathstring) [ponyfill](https://ponyfill.com).\n\n## Install\n\n```\n$ npm install --save path-parse\n```\n\n## Usage\n\n```js\nvar pathParse = require('path-parse');\n\npathParse('/home/user/dir/file.txt');\n//=> {\n//       root : \"/\",\n//       dir : \"/home/user/dir\",\n//       base : \"file.txt\",\n//       ext : \".txt\",\n//       name : \"file\"\n//   }\n```\n\n## API\n\nSee [`path.parse(pathString)`](https://nodejs.org/api/path.html#path_path_parse_pathstring) docs.\n\n### pathParse(path)\n\n### pathParse.posix(path)\n\nThe Posix specific version.\n\n### pathParse.win32(path)\n\nThe Windows specific version.\n\n## License\n\nMIT © [Javier Blanco](http://jbgutierrez.info)\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/cGFyZW50LW1vZHVsZUAxLjAuMQ==",
    "content": "/index.js\u0002'use strict';\nconst callsites = require('callsites');\n\nmodule.exports = filepath => {\n\tconst stacks = callsites();\n\n\tif (!filepath) {\n\t\treturn stacks[2].getFileName();\n\t}\n\n\tlet seenVal = false;\n\n\t// Skip the first stack as it's this function\n\tstacks.shift();\n\n\tfor (const stack of stacks) {\n\t\tconst parentFilepath = stack.getFileName();\n\n\t\tif (typeof parentFilepath !== 'string') {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (parentFilepath === filepath) {\n\t\t\tseenVal = true;\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Skip native modules\n\t\tif (parentFilepath === 'module.js') {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (seenVal && parentFilepath !== filepath) {\n\t\t\treturn parentFilepath;\n\t\t}\n\t}\n};\n/license\u0004UMIT License\n\nCopyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)\n\nPermission 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:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE 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.\n/package.json\u0002{\n\t\"name\": \"parent-module\",\n\t\"version\": \"1.0.1\",\n\t\"description\": \"Get the path of the parent module\",\n\t\"license\": \"MIT\",\n\t\"repository\": \"sindresorhus/parent-module\",\n\t\"author\": {\n\t\t\"name\": \"Sindre Sorhus\",\n\t\t\"email\": \"sindresorhus@gmail.com\",\n\t\t\"url\": \"sindresorhus.com\"\n\t},\n\t\"engines\": {\n\t\t\"node\": \">=6\"\n\t},\n\t\"scripts\": {\n\t\t\"test\": \"xo && ava\"\n\t},\n\t\"files\": [\n\t\t\"index.js\"\n\t],\n\t\"keywords\": [\n\t\t\"parent\",\n\t\t\"module\",\n\t\t\"package\",\n\t\t\"pkg\",\n\t\t\"caller\",\n\t\t\"calling\",\n\t\t\"module\",\n\t\t\"path\",\n\t\t\"callsites\",\n\t\t\"callsite\",\n\t\t\"stacktrace\",\n\t\t\"stack\",\n\t\t\"trace\",\n\t\t\"function\",\n\t\t\"file\"\n\t],\n\t\"dependencies\": {\n\t\t\"callsites\": \"^3.0.0\"\n\t},\n\t\"devDependencies\": {\n\t\t\"ava\": \"^1.4.1\",\n\t\t\"execa\": \"^1.0.0\",\n\t\t\"xo\": \"^0.24.0\"\n\t}\n}\n/readme.md\u0005# parent-module [![Build Status](https://travis-ci.org/sindresorhus/parent-module.svg?branch=master)](https://travis-ci.org/sindresorhus/parent-module)\n\n> Get the path of the parent module\n\nNode.js exposes `module.parent`, but it only gives you the first cached parent, which is not necessarily the actual parent.\n\n\n## Install\n\n```\n$ npm install parent-module\n```\n\n\n## Usage\n\n```js\n// bar.js\nconst parentModule = require('parent-module');\n\nmodule.exports = () => {\n\tconsole.log(parentModule());\n\t//=> '/Users/sindresorhus/dev/unicorn/foo.js'\n};\n```\n\n```js\n// foo.js\nconst bar = require('./bar');\n\nbar();\n```\n\n\n## API\n\n### parentModule([filepath])\n\nBy default, it will return the path of the immediate parent.\n\n#### filepath\n\nType: `string`<br>\nDefault: [`__filename`](https://nodejs.org/api/globals.html#globals_filename)\n\nFilepath of the module of which to get the parent path.\n\nUseful if you want it to work [multiple module levels down](https://github.com/sindresorhus/parent-module/tree/master/fixtures/filepath).\n\n\n## Tip\n\nCombine it with [`read-pkg-up`](https://github.com/sindresorhus/read-pkg-up) to read the package.json of the parent module.\n\n```js\nconst path = require('path');\nconst readPkgUp = require('read-pkg-up');\nconst parentModule = require('parent-module');\n\nconsole.log(readPkgUp.sync({cwd: path.dirname(parentModule())}).pkg);\n//=> {name: 'chalk', version: '1.0.0', …}\n```\n\n\n## License\n\nMIT © [Sindre Sorhus](https://sindresorhus.com)\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/cGFyc2V1cmxAMS4zLjM=",
    "content": "/package.json\u0004{\n  \"name\": \"parseurl\",\n  \"description\": \"parse a url with memoization\",\n  \"version\": \"1.3.3\",\n  \"contributors\": [\n    \"Douglas Christopher Wilson <doug@somethingdoug.com>\",\n    \"Jonathan Ong <me@jongleberry.com> (http://jongleberry.com)\"\n  ],\n  \"repository\": \"pillarjs/parseurl\",\n  \"license\": \"MIT\",\n  \"devDependencies\": {\n    \"beautify-benchmark\": \"0.2.4\",\n    \"benchmark\": \"2.1.4\",\n    \"eslint\": \"5.16.0\",\n    \"eslint-config-standard\": \"12.0.0\",\n    \"eslint-plugin-import\": \"2.17.1\",\n    \"eslint-plugin-node\": \"7.0.1\",\n    \"eslint-plugin-promise\": \"4.1.1\",\n    \"eslint-plugin-standard\": \"4.0.0\",\n    \"fast-url-parser\": \"1.1.3\",\n    \"istanbul\": \"0.4.5\",\n    \"mocha\": \"6.1.3\"\n  },\n  \"files\": [\n    \"LICENSE\",\n    \"HISTORY.md\",\n    \"README.md\",\n    \"index.js\"\n  ],\n  \"engines\": {\n    \"node\": \">= 0.8\"\n  },\n  \"scripts\": {\n    \"bench\": \"node benchmark/index.js\",\n    \"lint\": \"eslint .\",\n    \"test\": \"mocha --check-leaks --bail --reporter spec test/\",\n    \"test-cov\": \"istanbul cover node_modules/mocha/bin/_mocha -- --check-leaks --reporter dot test/\",\n    \"test-travis\": \"istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --check-leaks --reporter spec test/\"\n  }\n}\n/LICENSE\u0004\n(The MIT License)\n\nCopyright (c) 2014 Jonathan Ong <me@jongleberry.com>\nCopyright (c) 2014-2017 Douglas Christopher Wilson <doug@somethingdoug.com>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n/README.md\u000f# parseurl\n\n[![NPM Version][npm-version-image]][npm-url]\n[![NPM Downloads][npm-downloads-image]][npm-url]\n[![Node.js Version][node-image]][node-url]\n[![Build Status][travis-image]][travis-url]\n[![Test Coverage][coveralls-image]][coveralls-url]\n\nParse a URL with memoization.\n\n## Install\n\nThis is a [Node.js](https://nodejs.org/en/) module available through the\n[npm registry](https://www.npmjs.com/). Installation is done using the\n[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally):\n\n```sh\n$ npm install parseurl\n```\n\n## API\n\n```js\nvar parseurl = require('parseurl')\n```\n\n### parseurl(req)\n\nParse the URL of the given request object (looks at the `req.url` property)\nand return the result. The result is the same as `url.parse` in Node.js core.\nCalling this function multiple times on the same `req` where `req.url` does\nnot change will return a cached parsed object, rather than parsing again.\n\n### parseurl.original(req)\n\nParse the original URL of the given request object and return the result.\nThis works by trying to parse `req.originalUrl` if it is a string, otherwise\nparses `req.url`. The result is the same as `url.parse` in Node.js core.\nCalling this function multiple times on the same `req` where `req.originalUrl`\ndoes not change will return a cached parsed object, rather than parsing again.\n\n## Benchmark\n\n```bash\n$ npm run-script bench\n\n> parseurl@1.3.3 bench nodejs-parseurl\n> node benchmark/index.js\n\n  http_parser@2.8.0\n  node@10.6.0\n  v8@6.7.288.46-node.13\n  uv@1.21.0\n  zlib@1.2.11\n  ares@1.14.0\n  modules@64\n  nghttp2@1.32.0\n  napi@3\n  openssl@1.1.0h\n  icu@61.1\n  unicode@10.0\n  cldr@33.0\n  tz@2018c\n\n> node benchmark/fullurl.js\n\n  Parsing URL \"http://localhost:8888/foo/bar?user=tj&pet=fluffy\"\n\n  4 tests completed.\n\n  fasturl            x 2,207,842 ops/sec ±3.76% (184 runs sampled)\n  nativeurl - legacy x   507,180 ops/sec ±0.82% (191 runs sampled)\n  nativeurl - whatwg x   290,044 ops/sec ±1.96% (189 runs sampled)\n  parseurl           x   488,907 ops/sec ±2.13% (192 runs sampled)\n\n> node benchmark/pathquery.js\n\n  Parsing URL \"/foo/bar?user=tj&pet=fluffy\"\n\n  4 tests completed.\n\n  fasturl            x 3,812,564 ops/sec ±3.15% (188 runs sampled)\n  nativeurl - legacy x 2,651,631 ops/sec ±1.68% (189 runs sampled)\n  nativeurl - whatwg x   161,837 ops/sec ±2.26% (189 runs sampled)\n  parseurl           x 4,166,338 ops/sec ±2.23% (184 runs sampled)\n\n> node benchmark/samerequest.js\n\n  Parsing URL \"/foo/bar?user=tj&pet=fluffy\" on same request object\n\n  4 tests completed.\n\n  fasturl            x  3,821,651 ops/sec ±2.42% (185 runs sampled)\n  nativeurl - legacy x  2,651,162 ops/sec ±1.90% (187 runs sampled)\n  nativeurl - whatwg x    175,166 ops/sec ±1.44% (188 runs sampled)\n  parseurl           x 14,912,606 ops/sec ±3.59% (183 runs sampled)\n\n> node benchmark/simplepath.js\n\n  Parsing URL \"/foo/bar\"\n\n  4 tests completed.\n\n  fasturl            x 12,421,765 ops/sec ±2.04% (191 runs sampled)\n  nativeurl - legacy x  7,546,036 ops/sec ±1.41% (188 runs sampled)\n  nativeurl - whatwg x    198,843 ops/sec ±1.83% (189 runs sampled)\n  parseurl           x 24,244,006 ops/sec ±0.51% (194 runs sampled)\n\n> node benchmark/slash.js\n\n  Parsing URL \"/\"\n\n  4 tests completed.\n\n  fasturl            x 17,159,456 ops/sec ±3.25% (188 runs sampled)\n  nativeurl - legacy x 11,635,097 ops/sec ±3.79% (184 runs sampled)\n  nativeurl - whatwg x    240,693 ops/sec ±0.83% (189 runs sampled)\n  parseurl           x 42,279,067 ops/sec ±0.55% (190 runs sampled)\n```\n\n## License\n\n  [MIT](LICENSE)\n\n[coveralls-image]: https://badgen.net/coveralls/c/github/pillarjs/parseurl/master\n[coveralls-url]: https://coveralls.io/r/pillarjs/parseurl?branch=master\n[node-image]: https://badgen.net/npm/node/parseurl\n[node-url]: https://nodejs.org/en/download\n[npm-downloads-image]: https://badgen.net/npm/dm/parseurl\n[npm-url]: https://npmjs.org/package/parseurl\n[npm-version-image]: https://badgen.net/npm/v/parseurl\n[travis-image]: https://badgen.net/travis/pillarjs/parseurl/master\n[travis-url]: https://travis-ci.org/pillarjs/parseurl\n/HISTORY.md\u0004\u00131.3.3 / 2019-04-15\n==================\n\n  * Fix Node.js 0.8 return value inconsistencies\n\n1.3.2 / 2017-09-09\n==================\n\n  * perf: reduce overhead for full URLs\n  * perf: unroll the \"fast-path\" `RegExp`\n\n1.3.1 / 2016-01-17\n==================\n\n  * perf: enable strict mode\n\n1.3.0 / 2014-08-09\n==================\n\n  * Add `parseurl.original` for parsing `req.originalUrl` with fallback\n  * Return `undefined` if `req.url` is `undefined`\n\n1.2.0 / 2014-07-21\n==================\n\n  * Cache URLs based on original value\n  * Remove no-longer-needed URL mis-parse work-around\n  * Simplify the \"fast-path\" `RegExp`\n\n1.1.3 / 2014-07-08\n==================\n\n  * Fix typo\n\n1.1.2 / 2014-07-08\n==================\n\n  * Seriously fix Node.js 0.8 compatibility\n\n1.1.1 / 2014-07-08\n==================\n\n  * Fix Node.js 0.8 compatibility\n\n1.1.0 / 2014-07-08\n==================\n\n  * Incorporate URL href-only parse fast-path\n\n1.0.1 / 2014-03-08\n==================\n\n  * Add missing `require`\n\n1.0.0 / 2014-03-08\n==================\n\n  * Genesis from `connect`\n/index.js\n/*!\n * parseurl\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2014-2017 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar url = require('url')\nvar parse = url.parse\nvar Url = url.Url\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = parseurl\nmodule.exports.original = originalurl\n\n/**\n * Parse the `req` url with memoization.\n *\n * @param {ServerRequest} req\n * @return {Object}\n * @public\n */\n\nfunction parseurl (req) {\n  var url = req.url\n\n  if (url === undefined) {\n    // URL is undefined\n    return undefined\n  }\n\n  var parsed = req._parsedUrl\n\n  if (fresh(url, parsed)) {\n    // Return cached URL parse\n    return parsed\n  }\n\n  // Parse the URL\n  parsed = fastparse(url)\n  parsed._raw = url\n\n  return (req._parsedUrl = parsed)\n};\n\n/**\n * Parse the `req` original url with fallback and memoization.\n *\n * @param {ServerRequest} req\n * @return {Object}\n * @public\n */\n\nfunction originalurl (req) {\n  var url = req.originalUrl\n\n  if (typeof url !== 'string') {\n    // Fallback\n    return parseurl(req)\n  }\n\n  var parsed = req._parsedOriginalUrl\n\n  if (fresh(url, parsed)) {\n    // Return cached URL parse\n    return parsed\n  }\n\n  // Parse the URL\n  parsed = fastparse(url)\n  parsed._raw = url\n\n  return (req._parsedOriginalUrl = parsed)\n};\n\n/**\n * Parse the `str` url with fast-path short-cut.\n *\n * @param {string} str\n * @return {Object}\n * @private\n */\n\nfunction fastparse (str) {\n  if (typeof str !== 'string' || str.charCodeAt(0) !== 0x2f /* / */) {\n    return parse(str)\n  }\n\n  var pathname = str\n  var query = null\n  var search = null\n\n  // This takes the regexp from https://github.com/joyent/node/pull/7878\n  // Which is /^(\\/[^?#\\s]*)(\\?[^#\\s]*)?$/\n  // And unrolls it into a for loop\n  for (var i = 1; i < str.length; i++) {\n    switch (str.charCodeAt(i)) {\n      case 0x3f: /* ?  */\n        if (search === null) {\n          pathname = str.substring(0, i)\n          query = str.substring(i + 1)\n          search = str.substring(i)\n        }\n        break\n      case 0x09: /* \\t */\n      case 0x0a: /* \\n */\n      case 0x0c: /* \\f */\n      case 0x0d: /* \\r */\n      case 0x20: /*    */\n      case 0x23: /* #  */\n      case 0xa0:\n      case 0xfeff:\n        return parse(str)\n    }\n  }\n\n  var url = Url !== undefined\n    ? new Url()\n    : {}\n\n  url.path = str\n  url.href = str\n  url.pathname = pathname\n\n  if (search !== null) {\n    url.query = query\n    url.search = search\n  }\n\n  return url\n}\n\n/**\n * Determine if parsed is still fresh for url.\n *\n * @param {string} url\n * @param {object} parsedUrl\n * @return {boolean}\n * @private\n */\n\nfunction fresh (url, parsedUrl) {\n  return typeof parsedUrl === 'object' &&\n    parsedUrl !== null &&\n    (Url === undefined || parsedUrl instanceof Url) &&\n    parsedUrl._raw === url\n}\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/cGljb21hdGNoQDIuMy4x",
    "content": "/lib/utils.js\u0007]'use strict';\n\nconst path = require('path');\nconst win32 = process.platform === 'win32';\nconst {\n  REGEX_BACKSLASH,\n  REGEX_REMOVE_BACKSLASH,\n  REGEX_SPECIAL_CHARS,\n  REGEX_SPECIAL_CHARS_GLOBAL\n} = require('./constants');\n\nexports.isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val);\nexports.hasRegexChars = str => REGEX_SPECIAL_CHARS.test(str);\nexports.isRegexChar = str => str.length === 1 && exports.hasRegexChars(str);\nexports.escapeRegex = str => str.replace(REGEX_SPECIAL_CHARS_GLOBAL, '\\\\$1');\nexports.toPosixSlashes = str => str.replace(REGEX_BACKSLASH, '/');\n\nexports.removeBackslashes = str => {\n  return str.replace(REGEX_REMOVE_BACKSLASH, match => {\n    return match === '\\\\' ? '' : match;\n  });\n};\n\nexports.supportsLookbehinds = () => {\n  const segs = process.version.slice(1).split('.').map(Number);\n  if (segs.length === 3 && segs[0] >= 9 || (segs[0] === 8 && segs[1] >= 10)) {\n    return true;\n  }\n  return false;\n};\n\nexports.isWindows = options => {\n  if (options && typeof options.windows === 'boolean') {\n    return options.windows;\n  }\n  return win32 === true || path.sep === '\\\\';\n};\n\nexports.escapeLast = (input, char, lastIdx) => {\n  const idx = input.lastIndexOf(char, lastIdx);\n  if (idx === -1) return input;\n  if (input[idx - 1] === '\\\\') return exports.escapeLast(input, char, idx - 1);\n  return `${input.slice(0, idx)}\\\\${input.slice(idx)}`;\n};\n\nexports.removePrefix = (input, state = {}) => {\n  let output = input;\n  if (output.startsWith('./')) {\n    output = output.slice(2);\n    state.prefix = './';\n  }\n  return output;\n};\n\nexports.wrapOutput = (input, state = {}, options = {}) => {\n  const prepend = options.contains ? '' : '^';\n  const append = options.contains ? '' : '$';\n\n  let output = `${prepend}(?:${input})${append}`;\n  if (state.negated === true) {\n    output = `(?:^(?!${output}).*$)`;\n  }\n  return output;\n};\n/lib/scan.js#'use strict';\n\nconst utils = require('./utils');\nconst {\n  CHAR_ASTERISK,             /* * */\n  CHAR_AT,                   /* @ */\n  CHAR_BACKWARD_SLASH,       /* \\ */\n  CHAR_COMMA,                /* , */\n  CHAR_DOT,                  /* . */\n  CHAR_EXCLAMATION_MARK,     /* ! */\n  CHAR_FORWARD_SLASH,        /* / */\n  CHAR_LEFT_CURLY_BRACE,     /* { */\n  CHAR_LEFT_PARENTHESES,     /* ( */\n  CHAR_LEFT_SQUARE_BRACKET,  /* [ */\n  CHAR_PLUS,                 /* + */\n  CHAR_QUESTION_MARK,        /* ? */\n  CHAR_RIGHT_CURLY_BRACE,    /* } */\n  CHAR_RIGHT_PARENTHESES,    /* ) */\n  CHAR_RIGHT_SQUARE_BRACKET  /* ] */\n} = require('./constants');\n\nconst isPathSeparator = code => {\n  return code === CHAR_FORWARD_SLASH || code === CHAR_BACKWARD_SLASH;\n};\n\nconst depth = token => {\n  if (token.isPrefix !== true) {\n    token.depth = token.isGlobstar ? Infinity : 1;\n  }\n};\n\n/**\n * Quickly scans a glob pattern and returns an object with a handful of\n * useful properties, like `isGlob`, `path` (the leading non-glob, if it exists),\n * `glob` (the actual pattern), `negated` (true if the path starts with `!` but not\n * with `!(`) and `negatedExtglob` (true if the path starts with `!(`).\n *\n * ```js\n * const pm = require('picomatch');\n * console.log(pm.scan('foo/bar/*.js'));\n * { isGlob: true, input: 'foo/bar/*.js', base: 'foo/bar', glob: '*.js' }\n * ```\n * @param {String} `str`\n * @param {Object} `options`\n * @return {Object} Returns an object with tokens and regex source string.\n * @api public\n */\n\nconst scan = (input, options) => {\n  const opts = options || {};\n\n  const length = input.length - 1;\n  const scanToEnd = opts.parts === true || opts.scanToEnd === true;\n  const slashes = [];\n  const tokens = [];\n  const parts = [];\n\n  let str = input;\n  let index = -1;\n  let start = 0;\n  let lastIndex = 0;\n  let isBrace = false;\n  let isBracket = false;\n  let isGlob = false;\n  let isExtglob = false;\n  let isGlobstar = false;\n  let braceEscaped = false;\n  let backslashes = false;\n  let negated = false;\n  let negatedExtglob = false;\n  let finished = false;\n  let braces = 0;\n  let prev;\n  let code;\n  let token = { value: '', depth: 0, isGlob: false };\n\n  const eos = () => index >= length;\n  const peek = () => str.charCodeAt(index + 1);\n  const advance = () => {\n    prev = code;\n    return str.charCodeAt(++index);\n  };\n\n  while (index < length) {\n    code = advance();\n    let next;\n\n    if (code === CHAR_BACKWARD_SLASH) {\n      backslashes = token.backslashes = true;\n      code = advance();\n\n      if (code === CHAR_LEFT_CURLY_BRACE) {\n        braceEscaped = true;\n      }\n      continue;\n    }\n\n    if (braceEscaped === true || code === CHAR_LEFT_CURLY_BRACE) {\n      braces++;\n\n      while (eos() !== true && (code = advance())) {\n        if (code === CHAR_BACKWARD_SLASH) {\n          backslashes = token.backslashes = true;\n          advance();\n          continue;\n        }\n\n        if (code === CHAR_LEFT_CURLY_BRACE) {\n          braces++;\n          continue;\n        }\n\n        if (braceEscaped !== true && code === CHAR_DOT && (code = advance()) === CHAR_DOT) {\n          isBrace = token.isBrace = true;\n          isGlob = token.isGlob = true;\n          finished = true;\n\n          if (scanToEnd === true) {\n            continue;\n          }\n\n          break;\n        }\n\n        if (braceEscaped !== true && code === CHAR_COMMA) {\n          isBrace = token.isBrace = true;\n          isGlob = token.isGlob = true;\n          finished = true;\n\n          if (scanToEnd === true) {\n            continue;\n          }\n\n          break;\n        }\n\n        if (code === CHAR_RIGHT_CURLY_BRACE) {\n          braces--;\n\n          if (braces === 0) {\n            braceEscaped = false;\n            isBrace = token.isBrace = true;\n            finished = true;\n            break;\n          }\n        }\n      }\n\n      if (scanToEnd === true) {\n        continue;\n      }\n\n      break;\n    }\n\n    if (code === CHAR_FORWARD_SLASH) {\n      slashes.push(index);\n      tokens.push(token);\n      token = { value: '', depth: 0, isGlob: false };\n\n      if (finished === true) continue;\n      if (prev === CHAR_DOT && index === (start + 1)) {\n        start += 2;\n        continue;\n      }\n\n      lastIndex = index + 1;\n      continue;\n    }\n\n    if (opts.noext !== true) {\n      const isExtglobChar = code === CHAR_PLUS\n        || code === CHAR_AT\n        || code === CHAR_ASTERISK\n        || code === CHAR_QUESTION_MARK\n        || code === CHAR_EXCLAMATION_MARK;\n\n      if (isExtglobChar === true && peek() === CHAR_LEFT_PARENTHESES) {\n        isGlob = token.isGlob = true;\n        isExtglob = token.isExtglob = true;\n        finished = true;\n        if (code === CHAR_EXCLAMATION_MARK && index === start) {\n          negatedExtglob = true;\n        }\n\n        if (scanToEnd === true) {\n          while (eos() !== true && (code = advance())) {\n            if (code === CHAR_BACKWARD_SLASH) {\n              backslashes = token.backslashes = true;\n              code = advance();\n              continue;\n            }\n\n            if (code === CHAR_RIGHT_PARENTHESES) {\n              isGlob = token.isGlob = true;\n              finished = true;\n              break;\n            }\n          }\n          continue;\n        }\n        break;\n      }\n    }\n\n    if (code === CHAR_ASTERISK) {\n      if (prev === CHAR_ASTERISK) isGlobstar = token.isGlobstar = true;\n      isGlob = token.isGlob = true;\n      finished = true;\n\n      if (scanToEnd === true) {\n        continue;\n      }\n      break;\n    }\n\n    if (code === CHAR_QUESTION_MARK) {\n      isGlob = token.isGlob = true;\n      finished = true;\n\n      if (scanToEnd === true) {\n        continue;\n      }\n      break;\n    }\n\n    if (code === CHAR_LEFT_SQUARE_BRACKET) {\n      while (eos() !== true && (next = advance())) {\n        if (next === CHAR_BACKWARD_SLASH) {\n          backslashes = token.backslashes = true;\n          advance();\n          continue;\n        }\n\n        if (next === CHAR_RIGHT_SQUARE_BRACKET) {\n          isBracket = token.isBracket = true;\n          isGlob = token.isGlob = true;\n          finished = true;\n          break;\n        }\n      }\n\n      if (scanToEnd === true) {\n        continue;\n      }\n\n      break;\n    }\n\n    if (opts.nonegate !== true && code === CHAR_EXCLAMATION_MARK && index === start) {\n      negated = token.negated = true;\n      start++;\n      continue;\n    }\n\n    if (opts.noparen !== true && code === CHAR_LEFT_PARENTHESES) {\n      isGlob = token.isGlob = true;\n\n      if (scanToEnd === true) {\n        while (eos() !== true && (code = advance())) {\n          if (code === CHAR_LEFT_PARENTHESES) {\n            backslashes = token.backslashes = true;\n            code = advance();\n            continue;\n          }\n\n          if (code === CHAR_RIGHT_PARENTHESES) {\n            finished = true;\n            break;\n          }\n        }\n        continue;\n      }\n      break;\n    }\n\n    if (isGlob === true) {\n      finished = true;\n\n      if (scanToEnd === true) {\n        continue;\n      }\n\n      break;\n    }\n  }\n\n  if (opts.noext === true) {\n    isExtglob = false;\n    isGlob = false;\n  }\n\n  let base = str;\n  let prefix = '';\n  let glob = '';\n\n  if (start > 0) {\n    prefix = str.slice(0, start);\n    str = str.slice(start);\n    lastIndex -= start;\n  }\n\n  if (base && isGlob === true && lastIndex > 0) {\n    base = str.slice(0, lastIndex);\n    glob = str.slice(lastIndex);\n  } else if (isGlob === true) {\n    base = '';\n    glob = str;\n  } else {\n    base = str;\n  }\n\n  if (base && base !== '' && base !== '/' && base !== str) {\n    if (isPathSeparator(base.charCodeAt(base.length - 1))) {\n      base = base.slice(0, -1);\n    }\n  }\n\n  if (opts.unescape === true) {\n    if (glob) glob = utils.removeBackslashes(glob);\n\n    if (base && backslashes === true) {\n      base = utils.removeBackslashes(base);\n    }\n  }\n\n  const state = {\n    prefix,\n    input,\n    start,\n    base,\n    glob,\n    isBrace,\n    isBracket,\n    isGlob,\n    isExtglob,\n    isGlobstar,\n    negated,\n    negatedExtglob\n  };\n\n  if (opts.tokens === true) {\n    state.maxDepth = 0;\n    if (!isPathSeparator(code)) {\n      tokens.push(token);\n    }\n    state.tokens = tokens;\n  }\n\n  if (opts.parts === true || opts.tokens === true) {\n    let prevIndex;\n\n    for (let idx = 0; idx < slashes.length; idx++) {\n      const n = prevIndex ? prevIndex + 1 : start;\n      const i = slashes[idx];\n      const value = input.slice(n, i);\n      if (opts.tokens) {\n        if (idx === 0 && start !== 0) {\n          tokens[idx].isPrefix = true;\n          tokens[idx].value = prefix;\n        } else {\n          tokens[idx].value = value;\n        }\n        depth(tokens[idx]);\n        state.maxDepth += tokens[idx].depth;\n      }\n      if (idx !== 0 || value !== '') {\n        parts.push(value);\n      }\n      prevIndex = i;\n    }\n\n    if (prevIndex && prevIndex + 1 < input.length) {\n      const value = input.slice(prevIndex + 1);\n      parts.push(value);\n\n      if (opts.tokens) {\n        tokens[tokens.length - 1].value = value;\n        depth(tokens[tokens.length - 1]);\n        state.maxDepth += tokens[tokens.length - 1].depth;\n      }\n    }\n\n    state.slashes = slashes;\n    state.parts = parts;\n  }\n\n  return state;\n};\n\nmodule.exports = scan;\n/README.mdk5<h1 align=\"center\">Picomatch</h1>\n\n<p align=\"center\">\n<a href=\"https://npmjs.org/package/picomatch\">\n<img src=\"https://img.shields.io/npm/v/picomatch.svg\" alt=\"version\">\n</a>\n<a href=\"https://github.com/micromatch/picomatch/actions?workflow=Tests\">\n<img src=\"https://github.com/micromatch/picomatch/workflows/Tests/badge.svg\" alt=\"test status\">\n</a>\n<a href=\"https://coveralls.io/github/micromatch/picomatch\">\n<img src=\"https://img.shields.io/coveralls/github/micromatch/picomatch/master.svg\" alt=\"coverage status\">\n</a>\n<a href=\"https://npmjs.org/package/picomatch\">\n<img src=\"https://img.shields.io/npm/dm/picomatch.svg\" alt=\"downloads\">\n</a>\n</p>\n\n<br>\n<br>\n\n<p align=\"center\">\n<strong>Blazing fast and accurate glob matcher written in JavaScript.</strong></br>\n<em>No dependencies and full support for standard and extended Bash glob features, including braces, extglobs, POSIX brackets, and regular expressions.</em>\n</p>\n\n<br>\n<br>\n\n## Why picomatch?\n\n* **Lightweight** - No dependencies\n* **Minimal** - Tiny API surface. Main export is a function that takes a glob pattern and returns a matcher function.\n* **Fast** - Loads in about 2ms (that's several times faster than a [single frame of a HD movie](http://www.endmemo.com/sconvert/framespersecondframespermillisecond.php) at 60fps)\n* **Performant** - Use the returned matcher function to speed up repeat matching (like when watching files)\n* **Accurate matching** - Using wildcards (`*` and `?`), globstars (`**`) for nested directories, [advanced globbing](#advanced-globbing) with extglobs, braces, and POSIX brackets, and support for escaping special characters with `\\` or quotes.\n* **Well tested** - Thousands of unit tests\n\nSee the [library comparison](#library-comparisons) to other libraries.\n\n<br>\n<br>\n\n## Table of Contents\n\n<details><summary> Click to expand </summary>\n\n- [Install](#install)\n- [Usage](#usage)\n- [API](#api)\n  * [picomatch](#picomatch)\n  * [.test](#test)\n  * [.matchBase](#matchbase)\n  * [.isMatch](#ismatch)\n  * [.parse](#parse)\n  * [.scan](#scan)\n  * [.compileRe](#compilere)\n  * [.makeRe](#makere)\n  * [.toRegex](#toregex)\n- [Options](#options)\n  * [Picomatch options](#picomatch-options)\n  * [Scan Options](#scan-options)\n  * [Options Examples](#options-examples)\n- [Globbing features](#globbing-features)\n  * [Basic globbing](#basic-globbing)\n  * [Advanced globbing](#advanced-globbing)\n  * [Braces](#braces)\n  * [Matching special characters as literals](#matching-special-characters-as-literals)\n- [Library Comparisons](#library-comparisons)\n- [Benchmarks](#benchmarks)\n- [Philosophies](#philosophies)\n- [About](#about)\n  * [Author](#author)\n  * [License](#license)\n\n_(TOC generated by [verb](https://github.com/verbose/verb) using [markdown-toc](https://github.com/jonschlinkert/markdown-toc))_\n\n</details>\n\n<br>\n<br>\n\n## Install\n\nInstall with [npm](https://www.npmjs.com/):\n\n```sh\nnpm install --save picomatch\n```\n\n<br>\n\n## Usage\n\nThe main export is a function that takes a glob pattern and an options object and returns a function for matching strings.\n\n```js\nconst pm = require('picomatch');\nconst isMatch = pm('*.js');\n\nconsole.log(isMatch('abcd')); //=> false\nconsole.log(isMatch('a.js')); //=> true\nconsole.log(isMatch('a.md')); //=> false\nconsole.log(isMatch('a/b.js')); //=> false\n```\n\n<br>\n\n## API\n\n### [picomatch](lib/picomatch.js#L32)\n\nCreates a matcher function from one or more glob patterns. The returned function takes a string to match as its first argument, and returns true if the string is a match. The returned matcher function also takes a boolean as the second argument that, when true, returns an object with additional information.\n\n**Params**\n\n* `globs` **{String|Array}**: One or more glob patterns.\n* `options` **{Object=}**\n* `returns` **{Function=}**: Returns a matcher function.\n\n**Example**\n\n```js\nconst picomatch = require('picomatch');\n// picomatch(glob[, options]);\n\nconst isMatch = picomatch('*.!(*a)');\nconsole.log(isMatch('a.a')); //=> false\nconsole.log(isMatch('a.b')); //=> true\n```\n\n### [.test](lib/picomatch.js#L117)\n\nTest `input` with the given `regex`. This is used by the main `picomatch()` function to test the input string.\n\n**Params**\n\n* `input` **{String}**: String to test.\n* `regex` **{RegExp}**\n* `returns` **{Object}**: Returns an object with matching info.\n\n**Example**\n\n```js\nconst picomatch = require('picomatch');\n// picomatch.test(input, regex[, options]);\n\nconsole.log(picomatch.test('foo/bar', /^(?:([^/]*?)\\/([^/]*?))$/));\n// { isMatch: true, match: [ 'foo/', 'foo', 'bar' ], output: 'foo/bar' }\n```\n\n### [.matchBase](lib/picomatch.js#L161)\n\nMatch the basename of a filepath.\n\n**Params**\n\n* `input` **{String}**: String to test.\n* `glob` **{RegExp|String}**: Glob pattern or regex created by [.makeRe](#makeRe).\n* `returns` **{Boolean}**\n\n**Example**\n\n```js\nconst picomatch = require('picomatch');\n// picomatch.matchBase(input, glob[, options]);\nconsole.log(picomatch.matchBase('foo/bar.js', '*.js'); // true\n```\n\n### [.isMatch](lib/picomatch.js#L183)\n\nReturns true if **any** of the given glob `patterns` match the specified `string`.\n\n**Params**\n\n* **{String|Array}**: str The string to test.\n* **{String|Array}**: patterns One or more glob patterns to use for matching.\n* **{Object}**: See available [options](#options).\n* `returns` **{Boolean}**: Returns true if any patterns match `str`\n\n**Example**\n\n```js\nconst picomatch = require('picomatch');\n// picomatch.isMatch(string, patterns[, options]);\n\nconsole.log(picomatch.isMatch('a.a', ['b.*', '*.a'])); //=> true\nconsole.log(picomatch.isMatch('a.a', 'b.*')); //=> false\n```\n\n### [.parse](lib/picomatch.js#L199)\n\nParse a glob pattern to create the source string for a regular expression.\n\n**Params**\n\n* `pattern` **{String}**\n* `options` **{Object}**\n* `returns` **{Object}**: Returns an object with useful properties and output to be used as a regex source string.\n\n**Example**\n\n```js\nconst picomatch = require('picomatch');\nconst result = picomatch.parse(pattern[, options]);\n```\n\n### [.scan](lib/picomatch.js#L231)\n\nScan a glob pattern to separate the pattern into segments.\n\n**Params**\n\n* `input` **{String}**: Glob pattern to scan.\n* `options` **{Object}**\n* `returns` **{Object}**: Returns an object with\n\n**Example**\n\n```js\nconst picomatch = require('picomatch');\n// picomatch.scan(input[, options]);\n\nconst result = picomatch.scan('!./foo/*.js');\nconsole.log(result);\n{ prefix: '!./',\n  input: '!./foo/*.js',\n  start: 3,\n  base: 'foo',\n  glob: '*.js',\n  isBrace: false,\n  isBracket: false,\n  isGlob: true,\n  isExtglob: false,\n  isGlobstar: false,\n  negated: true }\n```\n\n### [.compileRe](lib/picomatch.js#L245)\n\nCompile a regular expression from the `state` object returned by the\n[parse()](#parse) method.\n\n**Params**\n\n* `state` **{Object}**\n* `options` **{Object}**\n* `returnOutput` **{Boolean}**: Intended for implementors, this argument allows you to return the raw output from the parser.\n* `returnState` **{Boolean}**: Adds the state to a `state` property on the returned regex. Useful for implementors and debugging.\n* `returns` **{RegExp}**\n\n### [.makeRe](lib/picomatch.js#L286)\n\nCreate a regular expression from a parsed glob pattern.\n\n**Params**\n\n* `state` **{String}**: The object returned from the `.parse` method.\n* `options` **{Object}**\n* `returnOutput` **{Boolean}**: Implementors may use this argument to return the compiled output, instead of a regular expression. This is not exposed on the options to prevent end-users from mutating the result.\n* `returnState` **{Boolean}**: Implementors may use this argument to return the state from the parsed glob with the returned regular expression.\n* `returns` **{RegExp}**: Returns a regex created from the given pattern.\n\n**Example**\n\n```js\nconst picomatch = require('picomatch');\nconst state = picomatch.parse('*.js');\n// picomatch.compileRe(state[, options]);\n\nconsole.log(picomatch.compileRe(state));\n//=> /^(?:(?!\\.)(?=.)[^/]*?\\.js)$/\n```\n\n### [.toRegex](lib/picomatch.js#L321)\n\nCreate a regular expression from the given regex source string.\n\n**Params**\n\n* `source` **{String}**: Regular expression source string.\n* `options` **{Object}**\n* `returns` **{RegExp}**\n\n**Example**\n\n```js\nconst picomatch = require('picomatch');\n// picomatch.toRegex(source[, options]);\n\nconst { output } = picomatch.parse('*.js');\nconsole.log(picomatch.toRegex(output));\n//=> /^(?:(?!\\.)(?=.)[^/]*?\\.js)$/\n```\n\n<br>\n\n## Options\n\n### Picomatch options\n\nThe following options may be used with the main `picomatch()` function or any of the methods on the picomatch API.\n\n| **Option** | **Type** | **Default value** | **Description** |\n| --- | --- | --- | --- |\n| `basename`            | `boolean`      | `false`     | If set, then patterns without slashes will be matched against the basename of the path if it contains slashes.  For example, `a?b` would match the path `/xyz/123/acb`, but not `/xyz/acb/123`. |\n| `bash`                | `boolean`      | `false`     | Follow bash matching rules more strictly - disallows backslashes as escape characters, and treats single stars as globstars (`**`). |\n| `capture`             | `boolean`      | `undefined` | Return regex matches in supporting methods. |\n| `contains`            | `boolean`      | `undefined` | Allows glob to match any part of the given string(s). |\n| `cwd`                 | `string`       | `process.cwd()` | Current working directory. Used by `picomatch.split()` |\n| `debug`               | `boolean`      | `undefined` | Debug regular expressions when an error is thrown. |\n| `dot`                 | `boolean`      | `false`     | Enable dotfile matching. By default, dotfiles are ignored unless a `.` is explicitly defined in the pattern, or `options.dot` is true |\n| `expandRange`         | `function`     | `undefined` | Custom function for expanding ranges in brace patterns, such as `{a..z}`. The function receives the range values as two arguments, and it must return a string to be used in the generated regex. It's recommended that returned strings be wrapped in parentheses. |\n| `failglob`            | `boolean`      | `false`     | Throws an error if no matches are found. Based on the bash option of the same name. |\n| `fastpaths`           | `boolean`      | `true`      | To speed up processing, full parsing is skipped for a handful common glob patterns. Disable this behavior by setting this option to `false`. |\n| `flags`               | `string`      | `undefined` | Regex flags to use in the generated regex. If defined, the `nocase` option will be overridden. |\n| [format](#optionsformat) | `function` | `undefined` | Custom function for formatting the returned string. This is useful for removing leading slashes, converting Windows paths to Posix paths, etc. |\n| `ignore`              | `array\\|string` | `undefined` | One or more glob patterns for excluding strings that should not be matched from the result. |\n| `keepQuotes`          | `boolean`      | `false`     | Retain quotes in the generated regex, since quotes may also be used as an alternative to backslashes.  |\n| `literalBrackets`     | `boolean`      | `undefined` | When `true`, brackets in the glob pattern will be escaped so that only literal brackets will be matched. |\n| `matchBase`           | `boolean`      | `false`     | Alias for `basename` |\n| `maxLength`           | `boolean`      | `65536`     | Limit the max length of the input string. An error is thrown if the input string is longer than this value. |\n| `nobrace`             | `boolean`      | `false`     | Disable brace matching, so that `{a,b}` and `{1..3}` would be treated as literal characters. |\n| `nobracket`           | `boolean`      | `undefined` | Disable matching with regex brackets. |\n| `nocase`              | `boolean`      | `false`     | Make matching case-insensitive. Equivalent to the regex `i` flag. Note that this option is overridden by the `flags` option. |\n| `nodupes`             | `boolean`      | `true`      | Deprecated, use `nounique` instead. This option will be removed in a future major release. By default duplicates are removed. Disable uniquification by setting this option to false. |\n| `noext`               | `boolean`      | `false`     | Alias for `noextglob` |\n| `noextglob`           | `boolean`      | `false`     | Disable support for matching with extglobs (like `+(a\\|b)`) |\n| `noglobstar`          | `boolean`      | `false`     | Disable support for matching nested directories with globstars (`**`) |\n| `nonegate`            | `boolean`      | `false`     | Disable support for negating with leading `!` |\n| `noquantifiers`       | `boolean`      | `false`     | Disable support for regex quantifiers (like `a{1,2}`) and treat them as brace patterns to be expanded. |\n| [onIgnore](#optionsonIgnore) | `function` | `undefined` | Function to be called on ignored items. |\n| [onMatch](#optionsonMatch) | `function` | `undefined` | Function to be called on matched items. |\n| [onResult](#optionsonResult) | `function` | `undefined` | Function to be called on all items, regardless of whether or not they are matched or ignored. |\n| `posix`               | `boolean`      | `false`     | Support POSIX character classes (\"posix brackets\"). |\n| `posixSlashes`        | `boolean`      | `undefined` | Convert all slashes in file paths to forward slashes. This does not convert slashes in the glob pattern itself |\n| `prepend`             | `boolean`      | `undefined` | String to prepend to the generated regex used for matching. |\n| `regex`               | `boolean`      | `false`     | Use regular expression rules for `+` (instead of matching literal `+`), and for stars that follow closing parentheses or brackets (as in `)*` and `]*`). |\n| `strictBrackets`      | `boolean`      | `undefined` | Throw an error if brackets, braces, or parens are imbalanced. |\n| `strictSlashes`       | `boolean`      | `undefined` | When true, picomatch won't match trailing slashes with single stars. |\n| `unescape`            | `boolean`      | `undefined` | Remove backslashes preceding escaped characters in the glob pattern. By default, backslashes are retained. |\n| `unixify`             | `boolean`      | `undefined` | Alias for `posixSlashes`, for backwards compatibility. |\n\npicomatch has automatic detection for regex positive and negative lookbehinds. If the pattern contains a negative lookbehind, you must be using Node.js >= 8.10 or else picomatch will throw an error.\n\n### Scan Options\n\nIn addition to the main [picomatch options](#picomatch-options), the following options may also be used with the [.scan](#scan) method.\n\n| **Option** | **Type** | **Default value** | **Description** |\n| --- | --- | --- | --- |\n| `tokens` | `boolean` | `false` | When `true`, the returned object will include an array of tokens (objects), representing each path \"segment\" in the scanned glob pattern |\n| `parts` | `boolean` | `false` | When `true`, the returned object will include an array of strings representing each path \"segment\" in the scanned glob pattern. This is automatically enabled when `options.tokens` is true |\n\n**Example**\n\n```js\nconst picomatch = require('picomatch');\nconst result = picomatch.scan('!./foo/*.js', { tokens: true });\nconsole.log(result);\n// {\n//   prefix: '!./',\n//   input: '!./foo/*.js',\n//   start: 3,\n//   base: 'foo',\n//   glob: '*.js',\n//   isBrace: false,\n//   isBracket: false,\n//   isGlob: true,\n//   isExtglob: false,\n//   isGlobstar: false,\n//   negated: true,\n//   maxDepth: 2,\n//   tokens: [\n//     { value: '!./', depth: 0, isGlob: false, negated: true, isPrefix: true },\n//     { value: 'foo', depth: 1, isGlob: false },\n//     { value: '*.js', depth: 1, isGlob: true }\n//   ],\n//   slashes: [ 2, 6 ],\n//   parts: [ 'foo', '*.js' ]\n// }\n```\n\n<br>\n\n### Options Examples\n\n#### options.expandRange\n\n**Type**: `function`\n\n**Default**: `undefined`\n\nCustom function for expanding ranges in brace patterns. The [fill-range](https://github.com/jonschlinkert/fill-range) library is ideal for this purpose, or you can use custom code to do whatever you need.\n\n**Example**\n\nThe following example shows how to create a glob that matches a folder\n\n```js\nconst fill = require('fill-range');\nconst regex = pm.makeRe('foo/{01..25}/bar', {\n  expandRange(a, b) {\n    return `(${fill(a, b, { toRegex: true })})`;\n  }\n});\n\nconsole.log(regex);\n//=> /^(?:foo\\/((?:0[1-9]|1[0-9]|2[0-5]))\\/bar)$/\n\nconsole.log(regex.test('foo/00/bar'))  // false\nconsole.log(regex.test('foo/01/bar'))  // true\nconsole.log(regex.test('foo/10/bar')) // true\nconsole.log(regex.test('foo/22/bar')) // true\nconsole.log(regex.test('foo/25/bar')) // true\nconsole.log(regex.test('foo/26/bar')) // false\n```\n\n#### options.format\n\n**Type**: `function`\n\n**Default**: `undefined`\n\nCustom function for formatting strings before they're matched.\n\n**Example**\n\n```js\n// strip leading './' from strings\nconst format = str => str.replace(/^\\.\\//, '');\nconst isMatch = picomatch('foo/*.js', { format });\nconsole.log(isMatch('./foo/bar.js')); //=> true\n```\n\n#### options.onMatch\n\n```js\nconst onMatch = ({ glob, regex, input, output }) => {\n  console.log({ glob, regex, input, output });\n};\n\nconst isMatch = picomatch('*', { onMatch });\nisMatch('foo');\nisMatch('bar');\nisMatch('baz');\n```\n\n#### options.onIgnore\n\n```js\nconst onIgnore = ({ glob, regex, input, output }) => {\n  console.log({ glob, regex, input, output });\n};\n\nconst isMatch = picomatch('*', { onIgnore, ignore: 'f*' });\nisMatch('foo');\nisMatch('bar');\nisMatch('baz');\n```\n\n#### options.onResult\n\n```js\nconst onResult = ({ glob, regex, input, output }) => {\n  console.log({ glob, regex, input, output });\n};\n\nconst isMatch = picomatch('*', { onResult, ignore: 'f*' });\nisMatch('foo');\nisMatch('bar');\nisMatch('baz');\n```\n\n<br>\n<br>\n\n## Globbing features\n\n* [Basic globbing](#basic-globbing) (Wildcard matching)\n* [Advanced globbing](#advanced-globbing) (extglobs, posix brackets, brace matching)\n\n### Basic globbing\n\n| **Character** | **Description** |\n| --- | --- |\n| `*` | Matches any character zero or more times, excluding path separators. Does _not match_ path separators or hidden files or directories (\"dotfiles\"), unless explicitly enabled by setting the `dot` option to `true`. |\n| `**` | Matches any character zero or more times, including path separators. Note that `**` will only match path separators (`/`, and `\\\\` on Windows) when they are the only characters in a path segment. Thus, `foo**/bar` is equivalent to `foo*/bar`, and `foo/a**b/bar` is equivalent to `foo/a*b/bar`, and _more than two_ consecutive stars in a glob path segment are regarded as _a single star_. Thus, `foo/***/bar` is equivalent to `foo/*/bar`. |\n| `?` | Matches any character excluding path separators one time. Does _not match_ path separators or leading dots.  |\n| `[abc]` | Matches any characters inside the brackets. For example, `[abc]` would match the characters `a`, `b` or `c`, and nothing else. |\n\n#### Matching behavior vs. Bash\n\nPicomatch's matching features and expected results in unit tests are based on Bash's unit tests and the Bash 4.3 specification, with the following exceptions:\n\n* Bash will match `foo/bar/baz` with `*`. Picomatch only matches nested directories with `**`.\n* Bash greedily matches with negated extglobs. For example, Bash 4.3 says that `!(foo)*` should match `foo` and `foobar`, since the trailing `*` bracktracks to match the preceding pattern. This is very memory-inefficient, and IMHO, also incorrect. Picomatch would return `false` for both `foo` and `foobar`.\n\n<br>\n\n### Advanced globbing\n\n* [extglobs](#extglobs)\n* [POSIX brackets](#posix-brackets)\n* [Braces](#brace-expansion)\n\n#### Extglobs\n\n| **Pattern** | **Description** |\n| --- | --- |\n| `@(pattern)` | Match _only one_ consecutive occurrence of `pattern` |\n| `*(pattern)` | Match _zero or more_ consecutive occurrences of `pattern` |\n| `+(pattern)` | Match _one or more_ consecutive occurrences of `pattern` |\n| `?(pattern)` | Match _zero or **one**_ consecutive occurrences of `pattern` |\n| `!(pattern)` | Match _anything but_ `pattern` |\n\n**Examples**\n\n```js\nconst pm = require('picomatch');\n\n// *(pattern) matches ZERO or more of \"pattern\"\nconsole.log(pm.isMatch('a', 'a*(z)')); // true\nconsole.log(pm.isMatch('az', 'a*(z)')); // true\nconsole.log(pm.isMatch('azzz', 'a*(z)')); // true\n\n// +(pattern) matches ONE or more of \"pattern\"\nconsole.log(pm.isMatch('a', 'a*(z)')); // true\nconsole.log(pm.isMatch('az', 'a*(z)')); // true\nconsole.log(pm.isMatch('azzz', 'a*(z)')); // true\n\n// supports multiple extglobs\nconsole.log(pm.isMatch('foo.bar', '!(foo).!(bar)')); // false\n\n// supports nested extglobs\nconsole.log(pm.isMatch('foo.bar', '!(!(foo)).!(!(bar))')); // true\n```\n\n#### POSIX brackets\n\nPOSIX classes are disabled by default. Enable this feature by setting the `posix` option to true.\n\n**Enable POSIX bracket support**\n\n```js\nconsole.log(pm.makeRe('[[:word:]]+', { posix: true }));\n//=> /^(?:(?=.)[A-Za-z0-9_]+\\/?)$/\n```\n\n**Supported POSIX classes**\n\nThe following named POSIX bracket expressions are supported:\n\n* `[:alnum:]` - Alphanumeric characters, equ `[a-zA-Z0-9]`\n* `[:alpha:]` - Alphabetical characters, equivalent to `[a-zA-Z]`.\n* `[:ascii:]` - ASCII characters, equivalent to `[\\\\x00-\\\\x7F]`.\n* `[:blank:]` - Space and tab characters, equivalent to `[ \\\\t]`.\n* `[:cntrl:]` - Control characters, equivalent to `[\\\\x00-\\\\x1F\\\\x7F]`.\n* `[:digit:]` - Numerical digits, equivalent to `[0-9]`.\n* `[:graph:]` - Graph characters, equivalent to `[\\\\x21-\\\\x7E]`.\n* `[:lower:]` - Lowercase letters, equivalent to `[a-z]`.\n* `[:print:]` - Print characters, equivalent to `[\\\\x20-\\\\x7E ]`.\n* `[:punct:]` - Punctuation and symbols, equivalent to `[\\\\-!\"#$%&\\'()\\\\*+,./:;<=>?@[\\\\]^_`{|}~]`.\n* `[:space:]` - Extended space characters, equivalent to `[ \\\\t\\\\r\\\\n\\\\v\\\\f]`.\n* `[:upper:]` - Uppercase letters, equivalent to `[A-Z]`.\n* `[:word:]` -  Word characters (letters, numbers and underscores), equivalent to `[A-Za-z0-9_]`.\n* `[:xdigit:]` - Hexadecimal digits, equivalent to `[A-Fa-f0-9]`.\n\nSee the [Bash Reference Manual](https://www.gnu.org/software/bash/manual/html_node/Pattern-Matching.html) for more information.\n\n### Braces\n\nPicomatch does not do brace expansion. For [brace expansion](https://www.gnu.org/software/bash/manual/html_node/Brace-Expansion.html) and advanced matching with braces, use [micromatch](https://github.com/micromatch/micromatch) instead. Picomatch has very basic support for braces.\n\n### Matching special characters as literals\n\nIf you wish to match the following special characters in a filepath, and you want to use these characters in your glob pattern, they must be escaped with backslashes or quotes:\n\n**Special Characters**\n\nSome characters that are used for matching in regular expressions are also regarded as valid file path characters on some platforms.\n\nTo match any of the following characters as literals: `$^*+?()[]\n\nExamples:\n\n```js\nconsole.log(pm.makeRe('foo/bar \\\\(1\\\\)'));\nconsole.log(pm.makeRe('foo/bar \\\\(1\\\\)'));\n```\n\n<br>\n<br>\n\n## Library Comparisons\n\nThe following table shows which features are supported by [minimatch](https://github.com/isaacs/minimatch), [micromatch](https://github.com/micromatch/micromatch), [picomatch](https://github.com/micromatch/picomatch), [nanomatch](https://github.com/micromatch/nanomatch), [extglob](https://github.com/micromatch/extglob), [braces](https://github.com/micromatch/braces), and [expand-brackets](https://github.com/micromatch/expand-brackets).\n\n| **Feature** | `minimatch` | `micromatch` | `picomatch` | `nanomatch` | `extglob` | `braces` | `expand-brackets` |\n| --- | --- | --- | --- | --- | --- | --- | --- |\n| Wildcard matching (`*?+`) | ✔ | ✔ | ✔ | ✔ | - | - | - |\n| Advancing globbing        | ✔ | ✔ | ✔ | - | - | - | - |\n| Brace _matching_          | ✔ | ✔ | ✔ | - | - | ✔ | - |\n| Brace _expansion_         | ✔ | ✔ | - | - | - | ✔ | - |\n| Extglobs                  | partial | ✔ | ✔ | - | ✔ | - | - |\n| Posix brackets            | - | ✔ | ✔ | - | - | - | ✔ |\n| Regular expression syntax | - | ✔ | ✔ | ✔ | ✔ | - | ✔ |\n| File system operations    | - | - | - | - | - | - | - |\n\n<br>\n<br>\n\n## Benchmarks\n\nPerformance comparison of picomatch and minimatch.\n\n```\n# .makeRe star\n  picomatch x 1,993,050 ops/sec ±0.51% (91 runs sampled)\n  minimatch x 627,206 ops/sec ±1.96% (87 runs sampled))\n\n# .makeRe star; dot=true\n  picomatch x 1,436,640 ops/sec ±0.62% (91 runs sampled)\n  minimatch x 525,876 ops/sec ±0.60% (88 runs sampled)\n\n# .makeRe globstar\n  picomatch x 1,592,742 ops/sec ±0.42% (90 runs sampled)\n  minimatch x 962,043 ops/sec ±1.76% (91 runs sampled)d)\n\n# .makeRe globstars\n  picomatch x 1,615,199 ops/sec ±0.35% (94 runs sampled)\n  minimatch x 477,179 ops/sec ±1.33% (91 runs sampled)\n\n# .makeRe with leading star\n  picomatch x 1,220,856 ops/sec ±0.40% (92 runs sampled)\n  minimatch x 453,564 ops/sec ±1.43% (94 runs sampled)\n\n# .makeRe - basic braces\n  picomatch x 392,067 ops/sec ±0.70% (90 runs sampled)\n  minimatch x 99,532 ops/sec ±2.03% (87 runs sampled))\n```\n\n<br>\n<br>\n\n## Philosophies\n\nThe goal of this library is to be blazing fast, without compromising on accuracy.\n\n**Accuracy**\n\nThe number one of goal of this library is accuracy. However, it's not unusual for different glob implementations to have different rules for matching behavior, even with simple wildcard matching. It gets increasingly more complicated when combinations of different features are combined, like when extglobs are combined with globstars, braces, slashes, and so on: `!(**/{a,b,*/c})`.\n\nThus, given that there is no canonical glob specification to use as a single source of truth when differences of opinion arise regarding behavior, sometimes we have to implement our best judgement and rely on feedback from users to make improvements.\n\n**Performance**\n\nAlthough this library performs well in benchmarks, and in most cases it's faster than other popular libraries we benchmarked against, we will always choose accuracy over performance. It's not helpful to anyone if our library is faster at returning the wrong answer.\n\n<br>\n<br>\n\n## About\n\n<details>\n<summary><strong>Contributing</strong></summary>\n\nPull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).\n\nPlease read the [contributing guide](.github/contributing.md) for advice on opening issues, pull requests, and coding standards.\n\n</details>\n\n<details>\n<summary><strong>Running Tests</strong></summary>\n\nRunning and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:\n\n```sh\nnpm install && npm test\n```\n\n</details>\n\n<details>\n<summary><strong>Building docs</strong></summary>\n\n_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_\n\nTo generate the readme, run the following command:\n\n```sh\nnpm install -g verbose/verb#dev verb-generate-readme && verb\n```\n\n</details>\n\n### Author\n\n**Jon Schlinkert**\n\n* [GitHub Profile](https://github.com/jonschlinkert)\n* [Twitter Profile](https://twitter.com/jonschlinkert)\n* [LinkedIn Profile](https://linkedin.com/in/jonschlinkert)\n\n### License\n\nCopyright © 2017-present, [Jon Schlinkert](https://github.com/jonschlinkert).\nReleased under the [MIT License](LICENSE).\n/lib/constants.js\u0011`'use strict';\n\nconst path = require('path');\nconst WIN_SLASH = '\\\\\\\\/';\nconst WIN_NO_SLASH = `[^${WIN_SLASH}]`;\n\n/**\n * Posix glob regex\n */\n\nconst DOT_LITERAL = '\\\\.';\nconst PLUS_LITERAL = '\\\\+';\nconst QMARK_LITERAL = '\\\\?';\nconst SLASH_LITERAL = '\\\\/';\nconst ONE_CHAR = '(?=.)';\nconst QMARK = '[^/]';\nconst END_ANCHOR = `(?:${SLASH_LITERAL}|$)`;\nconst START_ANCHOR = `(?:^|${SLASH_LITERAL})`;\nconst DOTS_SLASH = `${DOT_LITERAL}{1,2}${END_ANCHOR}`;\nconst NO_DOT = `(?!${DOT_LITERAL})`;\nconst NO_DOTS = `(?!${START_ANCHOR}${DOTS_SLASH})`;\nconst NO_DOT_SLASH = `(?!${DOT_LITERAL}{0,1}${END_ANCHOR})`;\nconst NO_DOTS_SLASH = `(?!${DOTS_SLASH})`;\nconst QMARK_NO_DOT = `[^.${SLASH_LITERAL}]`;\nconst STAR = `${QMARK}*?`;\n\nconst POSIX_CHARS = {\n  DOT_LITERAL,\n  PLUS_LITERAL,\n  QMARK_LITERAL,\n  SLASH_LITERAL,\n  ONE_CHAR,\n  QMARK,\n  END_ANCHOR,\n  DOTS_SLASH,\n  NO_DOT,\n  NO_DOTS,\n  NO_DOT_SLASH,\n  NO_DOTS_SLASH,\n  QMARK_NO_DOT,\n  STAR,\n  START_ANCHOR\n};\n\n/**\n * Windows glob regex\n */\n\nconst WINDOWS_CHARS = {\n  ...POSIX_CHARS,\n\n  SLASH_LITERAL: `[${WIN_SLASH}]`,\n  QMARK: WIN_NO_SLASH,\n  STAR: `${WIN_NO_SLASH}*?`,\n  DOTS_SLASH: `${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$)`,\n  NO_DOT: `(?!${DOT_LITERAL})`,\n  NO_DOTS: `(?!(?:^|[${WIN_SLASH}])${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,\n  NO_DOT_SLASH: `(?!${DOT_LITERAL}{0,1}(?:[${WIN_SLASH}]|$))`,\n  NO_DOTS_SLASH: `(?!${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,\n  QMARK_NO_DOT: `[^.${WIN_SLASH}]`,\n  START_ANCHOR: `(?:^|[${WIN_SLASH}])`,\n  END_ANCHOR: `(?:[${WIN_SLASH}]|$)`\n};\n\n/**\n * POSIX Bracket Regex\n */\n\nconst POSIX_REGEX_SOURCE = {\n  alnum: 'a-zA-Z0-9',\n  alpha: 'a-zA-Z',\n  ascii: '\\\\x00-\\\\x7F',\n  blank: ' \\\\t',\n  cntrl: '\\\\x00-\\\\x1F\\\\x7F',\n  digit: '0-9',\n  graph: '\\\\x21-\\\\x7E',\n  lower: 'a-z',\n  print: '\\\\x20-\\\\x7E ',\n  punct: '\\\\-!\"#$%&\\'()\\\\*+,./:;<=>?@[\\\\]^_`{|}~',\n  space: ' \\\\t\\\\r\\\\n\\\\v\\\\f',\n  upper: 'A-Z',\n  word: 'A-Za-z0-9_',\n  xdigit: 'A-Fa-f0-9'\n};\n\nmodule.exports = {\n  MAX_LENGTH: 1024 * 64,\n  POSIX_REGEX_SOURCE,\n\n  // regular expressions\n  REGEX_BACKSLASH: /\\\\(?![*+?^${}(|)[\\]])/g,\n  REGEX_NON_SPECIAL_CHARS: /^[^@![\\].,$*+?^{}()|\\\\/]+/,\n  REGEX_SPECIAL_CHARS: /[-*+?.^${}(|)[\\]]/,\n  REGEX_SPECIAL_CHARS_BACKREF: /(\\\\?)((\\W)(\\3*))/g,\n  REGEX_SPECIAL_CHARS_GLOBAL: /([-*+?.^${}(|)[\\]])/g,\n  REGEX_REMOVE_BACKSLASH: /(?:\\[.*?[^\\\\]\\]|\\\\(?=.))/g,\n\n  // Replace globs with equivalent patterns to reduce parsing time.\n  REPLACEMENTS: {\n    '***': '*',\n    '**/**': '**',\n    '**/**/**': '**'\n  },\n\n  // Digits\n  CHAR_0: 48, /* 0 */\n  CHAR_9: 57, /* 9 */\n\n  // Alphabet chars.\n  CHAR_UPPERCASE_A: 65, /* A */\n  CHAR_LOWERCASE_A: 97, /* a */\n  CHAR_UPPERCASE_Z: 90, /* Z */\n  CHAR_LOWERCASE_Z: 122, /* z */\n\n  CHAR_LEFT_PARENTHESES: 40, /* ( */\n  CHAR_RIGHT_PARENTHESES: 41, /* ) */\n\n  CHAR_ASTERISK: 42, /* * */\n\n  // Non-alphabetic chars.\n  CHAR_AMPERSAND: 38, /* & */\n  CHAR_AT: 64, /* @ */\n  CHAR_BACKWARD_SLASH: 92, /* \\ */\n  CHAR_CARRIAGE_RETURN: 13, /* \\r */\n  CHAR_CIRCUMFLEX_ACCENT: 94, /* ^ */\n  CHAR_COLON: 58, /* : */\n  CHAR_COMMA: 44, /* , */\n  CHAR_DOT: 46, /* . */\n  CHAR_DOUBLE_QUOTE: 34, /* \" */\n  CHAR_EQUAL: 61, /* = */\n  CHAR_EXCLAMATION_MARK: 33, /* ! */\n  CHAR_FORM_FEED: 12, /* \\f */\n  CHAR_FORWARD_SLASH: 47, /* / */\n  CHAR_GRAVE_ACCENT: 96, /* ` */\n  CHAR_HASH: 35, /* # */\n  CHAR_HYPHEN_MINUS: 45, /* - */\n  CHAR_LEFT_ANGLE_BRACKET: 60, /* < */\n  CHAR_LEFT_CURLY_BRACE: 123, /* { */\n  CHAR_LEFT_SQUARE_BRACKET: 91, /* [ */\n  CHAR_LINE_FEED: 10, /* \\n */\n  CHAR_NO_BREAK_SPACE: 160, /* \\u00A0 */\n  CHAR_PERCENT: 37, /* % */\n  CHAR_PLUS: 43, /* + */\n  CHAR_QUESTION_MARK: 63, /* ? */\n  CHAR_RIGHT_ANGLE_BRACKET: 62, /* > */\n  CHAR_RIGHT_CURLY_BRACE: 125, /* } */\n  CHAR_RIGHT_SQUARE_BRACKET: 93, /* ] */\n  CHAR_SEMICOLON: 59, /* ; */\n  CHAR_SINGLE_QUOTE: 39, /* ' */\n  CHAR_SPACE: 32, /*   */\n  CHAR_TAB: 9, /* \\t */\n  CHAR_UNDERSCORE: 95, /* _ */\n  CHAR_VERTICAL_LINE: 124, /* | */\n  CHAR_ZERO_WIDTH_NOBREAK_SPACE: 65279, /* \\uFEFF */\n\n  SEP: path.sep,\n\n  /**\n   * Create EXTGLOB_CHARS\n   */\n\n  extglobChars(chars) {\n    return {\n      '!': { type: 'negate', open: '(?:(?!(?:', close: `))${chars.STAR})` },\n      '?': { type: 'qmark', open: '(?:', close: ')?' },\n      '+': { type: 'plus', open: '(?:', close: ')+' },\n      '*': { type: 'star', open: '(?:', close: ')*' },\n      '@': { type: 'at', open: '(?:', close: ')' }\n    };\n  },\n\n  /**\n   * Create GLOB_CHARS\n   */\n\n  globChars(win32) {\n    return win32 === true ? WINDOWS_CHARS : POSIX_CHARS;\n  }\n};\n/lib/picomatch.js&'use strict';\n\nconst path = require('path');\nconst scan = require('./scan');\nconst parse = require('./parse');\nconst utils = require('./utils');\nconst constants = require('./constants');\nconst isObject = val => val && typeof val === 'object' && !Array.isArray(val);\n\n/**\n * Creates a matcher function from one or more glob patterns. The\n * returned function takes a string to match as its first argument,\n * and returns true if the string is a match. The returned matcher\n * function also takes a boolean as the second argument that, when true,\n * returns an object with additional information.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch(glob[, options]);\n *\n * const isMatch = picomatch('*.!(*a)');\n * console.log(isMatch('a.a')); //=> false\n * console.log(isMatch('a.b')); //=> true\n * ```\n * @name picomatch\n * @param {String|Array} `globs` One or more glob patterns.\n * @param {Object=} `options`\n * @return {Function=} Returns a matcher function.\n * @api public\n */\n\nconst picomatch = (glob, options, returnState = false) => {\n  if (Array.isArray(glob)) {\n    const fns = glob.map(input => picomatch(input, options, returnState));\n    const arrayMatcher = str => {\n      for (const isMatch of fns) {\n        const state = isMatch(str);\n        if (state) return state;\n      }\n      return false;\n    };\n    return arrayMatcher;\n  }\n\n  const isState = isObject(glob) && glob.tokens && glob.input;\n\n  if (glob === '' || (typeof glob !== 'string' && !isState)) {\n    throw new TypeError('Expected pattern to be a non-empty string');\n  }\n\n  const opts = options || {};\n  const posix = utils.isWindows(options);\n  const regex = isState\n    ? picomatch.compileRe(glob, options)\n    : picomatch.makeRe(glob, options, false, true);\n\n  const state = regex.state;\n  delete regex.state;\n\n  let isIgnored = () => false;\n  if (opts.ignore) {\n    const ignoreOpts = { ...options, ignore: null, onMatch: null, onResult: null };\n    isIgnored = picomatch(opts.ignore, ignoreOpts, returnState);\n  }\n\n  const matcher = (input, returnObject = false) => {\n    const { isMatch, match, output } = picomatch.test(input, regex, options, { glob, posix });\n    const result = { glob, state, regex, posix, input, output, match, isMatch };\n\n    if (typeof opts.onResult === 'function') {\n      opts.onResult(result);\n    }\n\n    if (isMatch === false) {\n      result.isMatch = false;\n      return returnObject ? result : false;\n    }\n\n    if (isIgnored(input)) {\n      if (typeof opts.onIgnore === 'function') {\n        opts.onIgnore(result);\n      }\n      result.isMatch = false;\n      return returnObject ? result : false;\n    }\n\n    if (typeof opts.onMatch === 'function') {\n      opts.onMatch(result);\n    }\n    return returnObject ? result : true;\n  };\n\n  if (returnState) {\n    matcher.state = state;\n  }\n\n  return matcher;\n};\n\n/**\n * Test `input` with the given `regex`. This is used by the main\n * `picomatch()` function to test the input string.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.test(input, regex[, options]);\n *\n * console.log(picomatch.test('foo/bar', /^(?:([^/]*?)\\/([^/]*?))$/));\n * // { isMatch: true, match: [ 'foo/', 'foo', 'bar' ], output: 'foo/bar' }\n * ```\n * @param {String} `input` String to test.\n * @param {RegExp} `regex`\n * @return {Object} Returns an object with matching info.\n * @api public\n */\n\npicomatch.test = (input, regex, options, { glob, posix } = {}) => {\n  if (typeof input !== 'string') {\n    throw new TypeError('Expected input to be a string');\n  }\n\n  if (input === '') {\n    return { isMatch: false, output: '' };\n  }\n\n  const opts = options || {};\n  const format = opts.format || (posix ? utils.toPosixSlashes : null);\n  let match = input === glob;\n  let output = (match && format) ? format(input) : input;\n\n  if (match === false) {\n    output = format ? format(input) : input;\n    match = output === glob;\n  }\n\n  if (match === false || opts.capture === true) {\n    if (opts.matchBase === true || opts.basename === true) {\n      match = picomatch.matchBase(input, regex, options, posix);\n    } else {\n      match = regex.exec(output);\n    }\n  }\n\n  return { isMatch: Boolean(match), match, output };\n};\n\n/**\n * Match the basename of a filepath.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.matchBase(input, glob[, options]);\n * console.log(picomatch.matchBase('foo/bar.js', '*.js'); // true\n * ```\n * @param {String} `input` String to test.\n * @param {RegExp|String} `glob` Glob pattern or regex created by [.makeRe](#makeRe).\n * @return {Boolean}\n * @api public\n */\n\npicomatch.matchBase = (input, glob, options, posix = utils.isWindows(options)) => {\n  const regex = glob instanceof RegExp ? glob : picomatch.makeRe(glob, options);\n  return regex.test(path.basename(input));\n};\n\n/**\n * Returns true if **any** of the given glob `patterns` match the specified `string`.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.isMatch(string, patterns[, options]);\n *\n * console.log(picomatch.isMatch('a.a', ['b.*', '*.a'])); //=> true\n * console.log(picomatch.isMatch('a.a', 'b.*')); //=> false\n * ```\n * @param {String|Array} str The string to test.\n * @param {String|Array} patterns One or more glob patterns to use for matching.\n * @param {Object} [options] See available [options](#options).\n * @return {Boolean} Returns true if any patterns match `str`\n * @api public\n */\n\npicomatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str);\n\n/**\n * Parse a glob pattern to create the source string for a regular\n * expression.\n *\n * ```js\n * const picomatch = require('picomatch');\n * const result = picomatch.parse(pattern[, options]);\n * ```\n * @param {String} `pattern`\n * @param {Object} `options`\n * @return {Object} Returns an object with useful properties and output to be used as a regex source string.\n * @api public\n */\n\npicomatch.parse = (pattern, options) => {\n  if (Array.isArray(pattern)) return pattern.map(p => picomatch.parse(p, options));\n  return parse(pattern, { ...options, fastpaths: false });\n};\n\n/**\n * Scan a glob pattern to separate the pattern into segments.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.scan(input[, options]);\n *\n * const result = picomatch.scan('!./foo/*.js');\n * console.log(result);\n * { prefix: '!./',\n *   input: '!./foo/*.js',\n *   start: 3,\n *   base: 'foo',\n *   glob: '*.js',\n *   isBrace: false,\n *   isBracket: false,\n *   isGlob: true,\n *   isExtglob: false,\n *   isGlobstar: false,\n *   negated: true }\n * ```\n * @param {String} `input` Glob pattern to scan.\n * @param {Object} `options`\n * @return {Object} Returns an object with\n * @api public\n */\n\npicomatch.scan = (input, options) => scan(input, options);\n\n/**\n * Compile a regular expression from the `state` object returned by the\n * [parse()](#parse) method.\n *\n * @param {Object} `state`\n * @param {Object} `options`\n * @param {Boolean} `returnOutput` Intended for implementors, this argument allows you to return the raw output from the parser.\n * @param {Boolean} `returnState` Adds the state to a `state` property on the returned regex. Useful for implementors and debugging.\n * @return {RegExp}\n * @api public\n */\n\npicomatch.compileRe = (state, options, returnOutput = false, returnState = false) => {\n  if (returnOutput === true) {\n    return state.output;\n  }\n\n  const opts = options || {};\n  const prepend = opts.contains ? '' : '^';\n  const append = opts.contains ? '' : '$';\n\n  let source = `${prepend}(?:${state.output})${append}`;\n  if (state && state.negated === true) {\n    source = `^(?!${source}).*$`;\n  }\n\n  const regex = picomatch.toRegex(source, options);\n  if (returnState === true) {\n    regex.state = state;\n  }\n\n  return regex;\n};\n\n/**\n * Create a regular expression from a parsed glob pattern.\n *\n * ```js\n * const picomatch = require('picomatch');\n * const state = picomatch.parse('*.js');\n * // picomatch.compileRe(state[, options]);\n *\n * console.log(picomatch.compileRe(state));\n * //=> /^(?:(?!\\.)(?=.)[^/]*?\\.js)$/\n * ```\n * @param {String} `state` The object returned from the `.parse` method.\n * @param {Object} `options`\n * @param {Boolean} `returnOutput` Implementors may use this argument to return the compiled output, instead of a regular expression. This is not exposed on the options to prevent end-users from mutating the result.\n * @param {Boolean} `returnState` Implementors may use this argument to return the state from the parsed glob with the returned regular expression.\n * @return {RegExp} Returns a regex created from the given pattern.\n * @api public\n */\n\npicomatch.makeRe = (input, options = {}, returnOutput = false, returnState = false) => {\n  if (!input || typeof input !== 'string') {\n    throw new TypeError('Expected a non-empty string');\n  }\n\n  let parsed = { negated: false, fastpaths: true };\n\n  if (options.fastpaths !== false && (input[0] === '.' || input[0] === '*')) {\n    parsed.output = parse.fastpaths(input, options);\n  }\n\n  if (!parsed.output) {\n    parsed = parse(input, options);\n  }\n\n  return picomatch.compileRe(parsed, options, returnOutput, returnState);\n};\n\n/**\n * Create a regular expression from the given regex source string.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.toRegex(source[, options]);\n *\n * const { output } = picomatch.parse('*.js');\n * console.log(picomatch.toRegex(output));\n * //=> /^(?:(?!\\.)(?=.)[^/]*?\\.js)$/\n * ```\n * @param {String} `source` Regular expression source string.\n * @param {Object} `options`\n * @return {RegExp}\n * @api public\n */\n\npicomatch.toRegex = (source, options) => {\n  try {\n    const opts = options || {};\n    return new RegExp(source, opts.flags || (opts.nocase ? 'i' : ''));\n  } catch (err) {\n    if (options && options.debug === true) throw err;\n    return /$^/;\n  }\n};\n\n/**\n * Picomatch constants.\n * @return {Object}\n */\n\npicomatch.constants = constants;\n\n/**\n * Expose \"picomatch\"\n */\n\nmodule.exports = picomatch;\n/LICENSE\u0004CThe MIT License (MIT)\n\nCopyright (c) 2017-present, Jon Schlinkert.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n/CHANGELOG.md\u0018;# Release history\n\n**All notable changes to this project will be documented in this file.**\n\nThe format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)\nand this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).\n\n<details>\n  <summary><strong>Guiding Principles</strong></summary>\n\n- Changelogs are for humans, not machines.\n- There should be an entry for every single version.\n- The same types of changes should be grouped.\n- Versions and sections should be linkable.\n- The latest version comes first.\n- The release date of each versions is displayed.\n- Mention whether you follow Semantic Versioning.\n\n</details>\n\n<details>\n  <summary><strong>Types of changes</strong></summary>\n\nChangelog entries are classified using the following labels _(from [keep-a-changelog](http://keepachangelog.com/)_):\n\n- `Added` for new features.\n- `Changed` for changes in existing functionality.\n- `Deprecated` for soon-to-be removed features.\n- `Removed` for now removed features.\n- `Fixed` for any bug fixes.\n- `Security` in case of vulnerabilities.\n\n</details>\n\n## 2.3.1 (2022-01-02)\n\n### Fixed\n\n* Fixes bug when a pattern containing an expression after the closing parenthesis (`/!(*.d).{ts,tsx}`) was incorrectly converted to regexp ([9f241ef](https://github.com/micromatch/picomatch/commit/9f241ef)).\n\n### Changed\n\n* Some documentation improvements ([f81d236](https://github.com/micromatch/picomatch/commit/f81d236), [421e0e7](https://github.com/micromatch/picomatch/commit/421e0e7)).\n\n## 2.3.0 (2021-05-21)\n\n### Fixed\n\n* Fixes bug where file names with two dots were not being matched consistently with negation extglobs containing a star ([56083ef](https://github.com/micromatch/picomatch/commit/56083ef))\n\n## 2.2.3 (2021-04-10)\n\n### Fixed\n\n* Do not skip pattern seperator for square brackets ([fb08a30](https://github.com/micromatch/picomatch/commit/fb08a30)).\n* Set negatedExtGlob also if it does not span the whole pattern ([032e3f5](https://github.com/micromatch/picomatch/commit/032e3f5)).\n\n## 2.2.2 (2020-03-21)\n\n### Fixed\n\n* Correctly handle parts of the pattern after parentheses in the `scan` method ([e15b920](https://github.com/micromatch/picomatch/commit/e15b920)).\n\n## 2.2.1 (2020-01-04)\n\n* Fixes [#49](https://github.com/micromatch/picomatch/issues/49), so that braces with no sets or ranges are now propertly treated as literals.\n\n## 2.2.0 (2020-01-04)\n\n* Disable fastpaths mode for the parse method ([5b8d33f](https://github.com/micromatch/picomatch/commit/5b8d33f))\n* Add `tokens`, `slashes`, and `parts` to the object returned by `picomatch.scan()`.\n\n## 2.1.0 (2019-10-31)\n\n* add benchmarks for scan ([4793b92](https://github.com/micromatch/picomatch/commit/4793b92))\n* Add eslint object-curly-spacing rule ([707c650](https://github.com/micromatch/picomatch/commit/707c650))\n* Add prefer-const eslint rule ([5c7501c](https://github.com/micromatch/picomatch/commit/5c7501c))\n* Add support for nonegate in scan API ([275c9b9](https://github.com/micromatch/picomatch/commit/275c9b9))\n* Change lets to consts. Move root import up. ([4840625](https://github.com/micromatch/picomatch/commit/4840625))\n* closes https://github.com/micromatch/picomatch/issues/21 ([766bcb0](https://github.com/micromatch/picomatch/commit/766bcb0))\n* Fix \"Extglobs\" table in readme ([eb19da8](https://github.com/micromatch/picomatch/commit/eb19da8))\n* fixes https://github.com/micromatch/picomatch/issues/20 ([9caca07](https://github.com/micromatch/picomatch/commit/9caca07))\n* fixes https://github.com/micromatch/picomatch/issues/26 ([fa58f45](https://github.com/micromatch/picomatch/commit/fa58f45))\n* Lint test ([d433a34](https://github.com/micromatch/picomatch/commit/d433a34))\n* lint unit tests ([0159b55](https://github.com/micromatch/picomatch/commit/0159b55))\n* Make scan work with noext ([6c02e03](https://github.com/micromatch/picomatch/commit/6c02e03))\n* minor linting ([c2a2b87](https://github.com/micromatch/picomatch/commit/c2a2b87))\n* minor parser improvements ([197671d](https://github.com/micromatch/picomatch/commit/197671d))\n* remove eslint since it... ([07876fa](https://github.com/micromatch/picomatch/commit/07876fa))\n* remove funding file ([8ebe96d](https://github.com/micromatch/picomatch/commit/8ebe96d))\n* Remove unused funks ([cbc6d54](https://github.com/micromatch/picomatch/commit/cbc6d54))\n* Run eslint during pretest, fix existing eslint findings ([0682367](https://github.com/micromatch/picomatch/commit/0682367))\n* support `noparen` in scan ([3d37569](https://github.com/micromatch/picomatch/commit/3d37569))\n* update changelog ([7b34e77](https://github.com/micromatch/picomatch/commit/7b34e77))\n* update travis ([777f038](https://github.com/micromatch/picomatch/commit/777f038))\n* Use eslint-disable-next-line instead of eslint-disable ([4e7c1fd](https://github.com/micromatch/picomatch/commit/4e7c1fd))\n\n## 2.0.7 (2019-05-14)\n\n* 2.0.7 ([9eb9a71](https://github.com/micromatch/picomatch/commit/9eb9a71))\n* supports lookbehinds ([1f63f7e](https://github.com/micromatch/picomatch/commit/1f63f7e))\n* update .verb.md file with typo change ([2741279](https://github.com/micromatch/picomatch/commit/2741279))\n* fix: typo in README ([0753e44](https://github.com/micromatch/picomatch/commit/0753e44))\n\n## 2.0.4 (2019-04-10)\n\n### Fixed\n\n- Readme link [fixed](https://github.com/micromatch/picomatch/pull/13/commits/a96ab3aa2b11b6861c23289964613d85563b05df) by @danez.\n- `options.capture` now works as expected when fastpaths are enabled. See https://github.com/micromatch/picomatch/pull/12/commits/26aefd71f1cfaf95c37f1c1fcab68a693b037304. Thanks to @DrPizza.\n\n## 2.0.0 (2019-04-10)\n\n### Added\n\n- Adds support for `options.onIgnore`. See the readme for details\n- Adds support for `options.onResult`. See the readme for details\n\n### Breaking changes\n\n- The unixify option was renamed to `windows`\n- caching and all related options and methods have been removed\n\n## 1.0.0 (2018-11-05)\n\n- adds `.onMatch` option\n- improvements to `.scan` method\n- numerous improvements and optimizations for matching and parsing\n- better windows path handling\n\n## 0.1.0 - 2017-04-13\n\nFirst release.\n\n\n[keep-a-changelog]: https://github.com/olivierlacan/keep-a-changelog\n/package.json\u0007x{\n  \"name\": \"picomatch\",\n  \"description\": \"Blazing fast and accurate glob matcher written in JavaScript, with no dependencies and full support for standard and extended Bash glob features, including braces, extglobs, POSIX brackets, and regular expressions.\",\n  \"version\": \"2.3.1\",\n  \"homepage\": \"https://github.com/micromatch/picomatch\",\n  \"author\": \"Jon Schlinkert (https://github.com/jonschlinkert)\",\n  \"funding\": \"https://github.com/sponsors/jonschlinkert\",\n  \"repository\": \"micromatch/picomatch\",\n  \"bugs\": {\n    \"url\": \"https://github.com/micromatch/picomatch/issues\"\n  },\n  \"license\": \"MIT\",\n  \"files\": [\n    \"index.js\",\n    \"lib\"\n  ],\n  \"main\": \"index.js\",\n  \"engines\": {\n    \"node\": \">=8.6\"\n  },\n  \"scripts\": {\n    \"lint\": \"eslint --cache --cache-location node_modules/.cache/.eslintcache --report-unused-disable-directives --ignore-path .gitignore .\",\n    \"mocha\": \"mocha --reporter dot\",\n    \"test\": \"npm run lint && npm run mocha\",\n    \"test:ci\": \"npm run test:cover\",\n    \"test:cover\": \"nyc npm run mocha\"\n  },\n  \"devDependencies\": {\n    \"eslint\": \"^6.8.0\",\n    \"fill-range\": \"^7.0.1\",\n    \"gulp-format-md\": \"^2.0.0\",\n    \"mocha\": \"^6.2.2\",\n    \"nyc\": \"^15.0.0\",\n    \"time-require\": \"github:jonschlinkert/time-require\"\n  },\n  \"keywords\": [\n    \"glob\",\n    \"match\",\n    \"picomatch\"\n  ],\n  \"nyc\": {\n    \"reporter\": [\n      \"html\",\n      \"lcov\",\n      \"text-summary\"\n    ]\n  },\n  \"verb\": {\n    \"toc\": {\n      \"render\": true,\n      \"method\": \"preWrite\",\n      \"maxdepth\": 3\n    },\n    \"layout\": \"empty\",\n    \"tasks\": [\n      \"readme\"\n    ],\n    \"plugins\": [\n      \"gulp-format-md\"\n    ],\n    \"lint\": {\n      \"reflinks\": true\n    },\n    \"related\": {\n      \"list\": [\n        \"braces\",\n        \"micromatch\"\n      ]\n    },\n    \"reflinks\": [\n      \"braces\",\n      \"expand-brackets\",\n      \"extglob\",\n      \"fill-range\",\n      \"micromatch\",\n      \"minimatch\",\n      \"nanomatch\",\n      \"picomatch\"\n    ]\n  }\n}\n/index.js<'use strict';\n\nmodule.exports = require('./lib/picomatch');\n/lib/parse.jsls'use strict';\n\nconst constants = require('./constants');\nconst utils = require('./utils');\n\n/**\n * Constants\n */\n\nconst {\n  MAX_LENGTH,\n  POSIX_REGEX_SOURCE,\n  REGEX_NON_SPECIAL_CHARS,\n  REGEX_SPECIAL_CHARS_BACKREF,\n  REPLACEMENTS\n} = constants;\n\n/**\n * Helpers\n */\n\nconst expandRange = (args, options) => {\n  if (typeof options.expandRange === 'function') {\n    return options.expandRange(...args, options);\n  }\n\n  args.sort();\n  const value = `[${args.join('-')}]`;\n\n  try {\n    /* eslint-disable-next-line no-new */\n    new RegExp(value);\n  } catch (ex) {\n    return args.map(v => utils.escapeRegex(v)).join('..');\n  }\n\n  return value;\n};\n\n/**\n * Create the message for a syntax error\n */\n\nconst syntaxError = (type, char) => {\n  return `Missing ${type}: \"${char}\" - use \"\\\\\\\\${char}\" to match literal characters`;\n};\n\n/**\n * Parse the given input string.\n * @param {String} input\n * @param {Object} options\n * @return {Object}\n */\n\nconst parse = (input, options) => {\n  if (typeof input !== 'string') {\n    throw new TypeError('Expected a string');\n  }\n\n  input = REPLACEMENTS[input] || input;\n\n  const opts = { ...options };\n  const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;\n\n  let len = input.length;\n  if (len > max) {\n    throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);\n  }\n\n  const bos = { type: 'bos', value: '', output: opts.prepend || '' };\n  const tokens = [bos];\n\n  const capture = opts.capture ? '' : '?:';\n  const win32 = utils.isWindows(options);\n\n  // create constants based on platform, for windows or posix\n  const PLATFORM_CHARS = constants.globChars(win32);\n  const EXTGLOB_CHARS = constants.extglobChars(PLATFORM_CHARS);\n\n  const {\n    DOT_LITERAL,\n    PLUS_LITERAL,\n    SLASH_LITERAL,\n    ONE_CHAR,\n    DOTS_SLASH,\n    NO_DOT,\n    NO_DOT_SLASH,\n    NO_DOTS_SLASH,\n    QMARK,\n    QMARK_NO_DOT,\n    STAR,\n    START_ANCHOR\n  } = PLATFORM_CHARS;\n\n  const globstar = opts => {\n    return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;\n  };\n\n  const nodot = opts.dot ? '' : NO_DOT;\n  const qmarkNoDot = opts.dot ? QMARK : QMARK_NO_DOT;\n  let star = opts.bash === true ? globstar(opts) : STAR;\n\n  if (opts.capture) {\n    star = `(${star})`;\n  }\n\n  // minimatch options support\n  if (typeof opts.noext === 'boolean') {\n    opts.noextglob = opts.noext;\n  }\n\n  const state = {\n    input,\n    index: -1,\n    start: 0,\n    dot: opts.dot === true,\n    consumed: '',\n    output: '',\n    prefix: '',\n    backtrack: false,\n    negated: false,\n    brackets: 0,\n    braces: 0,\n    parens: 0,\n    quotes: 0,\n    globstar: false,\n    tokens\n  };\n\n  input = utils.removePrefix(input, state);\n  len = input.length;\n\n  const extglobs = [];\n  const braces = [];\n  const stack = [];\n  let prev = bos;\n  let value;\n\n  /**\n   * Tokenizing helpers\n   */\n\n  const eos = () => state.index === len - 1;\n  const peek = state.peek = (n = 1) => input[state.index + n];\n  const advance = state.advance = () => input[++state.index] || '';\n  const remaining = () => input.slice(state.index + 1);\n  const consume = (value = '', num = 0) => {\n    state.consumed += value;\n    state.index += num;\n  };\n\n  const append = token => {\n    state.output += token.output != null ? token.output : token.value;\n    consume(token.value);\n  };\n\n  const negate = () => {\n    let count = 1;\n\n    while (peek() === '!' && (peek(2) !== '(' || peek(3) === '?')) {\n      advance();\n      state.start++;\n      count++;\n    }\n\n    if (count % 2 === 0) {\n      return false;\n    }\n\n    state.negated = true;\n    state.start++;\n    return true;\n  };\n\n  const increment = type => {\n    state[type]++;\n    stack.push(type);\n  };\n\n  const decrement = type => {\n    state[type]--;\n    stack.pop();\n  };\n\n  /**\n   * Push tokens onto the tokens array. This helper speeds up\n   * tokenizing by 1) helping us avoid backtracking as much as possible,\n   * and 2) helping us avoid creating extra tokens when consecutive\n   * characters are plain text. This improves performance and simplifies\n   * lookbehinds.\n   */\n\n  const push = tok => {\n    if (prev.type === 'globstar') {\n      const isBrace = state.braces > 0 && (tok.type === 'comma' || tok.type === 'brace');\n      const isExtglob = tok.extglob === true || (extglobs.length && (tok.type === 'pipe' || tok.type === 'paren'));\n\n      if (tok.type !== 'slash' && tok.type !== 'paren' && !isBrace && !isExtglob) {\n        state.output = state.output.slice(0, -prev.output.length);\n        prev.type = 'star';\n        prev.value = '*';\n        prev.output = star;\n        state.output += prev.output;\n      }\n    }\n\n    if (extglobs.length && tok.type !== 'paren') {\n      extglobs[extglobs.length - 1].inner += tok.value;\n    }\n\n    if (tok.value || tok.output) append(tok);\n    if (prev && prev.type === 'text' && tok.type === 'text') {\n      prev.value += tok.value;\n      prev.output = (prev.output || '') + tok.value;\n      return;\n    }\n\n    tok.prev = prev;\n    tokens.push(tok);\n    prev = tok;\n  };\n\n  const extglobOpen = (type, value) => {\n    const token = { ...EXTGLOB_CHARS[value], conditions: 1, inner: '' };\n\n    token.prev = prev;\n    token.parens = state.parens;\n    token.output = state.output;\n    const output = (opts.capture ? '(' : '') + token.open;\n\n    increment('parens');\n    push({ type, value, output: state.output ? '' : ONE_CHAR });\n    push({ type: 'paren', extglob: true, value: advance(), output });\n    extglobs.push(token);\n  };\n\n  const extglobClose = token => {\n    let output = token.close + (opts.capture ? ')' : '');\n    let rest;\n\n    if (token.type === 'negate') {\n      let extglobStar = star;\n\n      if (token.inner && token.inner.length > 1 && token.inner.includes('/')) {\n        extglobStar = globstar(opts);\n      }\n\n      if (extglobStar !== star || eos() || /^\\)+$/.test(remaining())) {\n        output = token.close = `)$))${extglobStar}`;\n      }\n\n      if (token.inner.includes('*') && (rest = remaining()) && /^\\.[^\\\\/.]+$/.test(rest)) {\n        // Any non-magical string (`.ts`) or even nested expression (`.{ts,tsx}`) can follow after the closing parenthesis.\n        // In this case, we need to parse the string and use it in the output of the original pattern.\n        // Suitable patterns: `/!(*.d).ts`, `/!(*.d).{ts,tsx}`, `**/!(*-dbg).@(js)`.\n        //\n        // Disabling the `fastpaths` option due to a problem with parsing strings as `.ts` in the pattern like `**/!(*.d).ts`.\n        const expression = parse(rest, { ...options, fastpaths: false }).output;\n\n        output = token.close = `)${expression})${extglobStar})`;\n      }\n\n      if (token.prev.type === 'bos') {\n        state.negatedExtglob = true;\n      }\n    }\n\n    push({ type: 'paren', extglob: true, value, output });\n    decrement('parens');\n  };\n\n  /**\n   * Fast paths\n   */\n\n  if (opts.fastpaths !== false && !/(^[*!]|[/()[\\]{}\"])/.test(input)) {\n    let backslashes = false;\n\n    let output = input.replace(REGEX_SPECIAL_CHARS_BACKREF, (m, esc, chars, first, rest, index) => {\n      if (first === '\\\\') {\n        backslashes = true;\n        return m;\n      }\n\n      if (first === '?') {\n        if (esc) {\n          return esc + first + (rest ? QMARK.repeat(rest.length) : '');\n        }\n        if (index === 0) {\n          return qmarkNoDot + (rest ? QMARK.repeat(rest.length) : '');\n        }\n        return QMARK.repeat(chars.length);\n      }\n\n      if (first === '.') {\n        return DOT_LITERAL.repeat(chars.length);\n      }\n\n      if (first === '*') {\n        if (esc) {\n          return esc + first + (rest ? star : '');\n        }\n        return star;\n      }\n      return esc ? m : `\\\\${m}`;\n    });\n\n    if (backslashes === true) {\n      if (opts.unescape === true) {\n        output = output.replace(/\\\\/g, '');\n      } else {\n        output = output.replace(/\\\\+/g, m => {\n          return m.length % 2 === 0 ? '\\\\\\\\' : (m ? '\\\\' : '');\n        });\n      }\n    }\n\n    if (output === input && opts.contains === true) {\n      state.output = input;\n      return state;\n    }\n\n    state.output = utils.wrapOutput(output, state, options);\n    return state;\n  }\n\n  /**\n   * Tokenize input until we reach end-of-string\n   */\n\n  while (!eos()) {\n    value = advance();\n\n    if (value === '\\u0000') {\n      continue;\n    }\n\n    /**\n     * Escaped characters\n     */\n\n    if (value === '\\\\') {\n      const next = peek();\n\n      if (next === '/' && opts.bash !== true) {\n        continue;\n      }\n\n      if (next === '.' || next === ';') {\n        continue;\n      }\n\n      if (!next) {\n        value += '\\\\';\n        push({ type: 'text', value });\n        continue;\n      }\n\n      // collapse slashes to reduce potential for exploits\n      const match = /^\\\\+/.exec(remaining());\n      let slashes = 0;\n\n      if (match && match[0].length > 2) {\n        slashes = match[0].length;\n        state.index += slashes;\n        if (slashes % 2 !== 0) {\n          value += '\\\\';\n        }\n      }\n\n      if (opts.unescape === true) {\n        value = advance();\n      } else {\n        value += advance();\n      }\n\n      if (state.brackets === 0) {\n        push({ type: 'text', value });\n        continue;\n      }\n    }\n\n    /**\n     * If we're inside a regex character class, continue\n     * until we reach the closing bracket.\n     */\n\n    if (state.brackets > 0 && (value !== ']' || prev.value === '[' || prev.value === '[^')) {\n      if (opts.posix !== false && value === ':') {\n        const inner = prev.value.slice(1);\n        if (inner.includes('[')) {\n          prev.posix = true;\n\n          if (inner.includes(':')) {\n            const idx = prev.value.lastIndexOf('[');\n            const pre = prev.value.slice(0, idx);\n            const rest = prev.value.slice(idx + 2);\n            const posix = POSIX_REGEX_SOURCE[rest];\n            if (posix) {\n              prev.value = pre + posix;\n              state.backtrack = true;\n              advance();\n\n              if (!bos.output && tokens.indexOf(prev) === 1) {\n                bos.output = ONE_CHAR;\n              }\n              continue;\n            }\n          }\n        }\n      }\n\n      if ((value === '[' && peek() !== ':') || (value === '-' && peek() === ']')) {\n        value = `\\\\${value}`;\n      }\n\n      if (value === ']' && (prev.value === '[' || prev.value === '[^')) {\n        value = `\\\\${value}`;\n      }\n\n      if (opts.posix === true && value === '!' && prev.value === '[') {\n        value = '^';\n      }\n\n      prev.value += value;\n      append({ value });\n      continue;\n    }\n\n    /**\n     * If we're inside a quoted string, continue\n     * until we reach the closing double quote.\n     */\n\n    if (state.quotes === 1 && value !== '\"') {\n      value = utils.escapeRegex(value);\n      prev.value += value;\n      append({ value });\n      continue;\n    }\n\n    /**\n     * Double quotes\n     */\n\n    if (value === '\"') {\n      state.quotes = state.quotes === 1 ? 0 : 1;\n      if (opts.keepQuotes === true) {\n        push({ type: 'text', value });\n      }\n      continue;\n    }\n\n    /**\n     * Parentheses\n     */\n\n    if (value === '(') {\n      increment('parens');\n      push({ type: 'paren', value });\n      continue;\n    }\n\n    if (value === ')') {\n      if (state.parens === 0 && opts.strictBrackets === true) {\n        throw new SyntaxError(syntaxError('opening', '('));\n      }\n\n      const extglob = extglobs[extglobs.length - 1];\n      if (extglob && state.parens === extglob.parens + 1) {\n        extglobClose(extglobs.pop());\n        continue;\n      }\n\n      push({ type: 'paren', value, output: state.parens ? ')' : '\\\\)' });\n      decrement('parens');\n      continue;\n    }\n\n    /**\n     * Square brackets\n     */\n\n    if (value === '[') {\n      if (opts.nobracket === true || !remaining().includes(']')) {\n        if (opts.nobracket !== true && opts.strictBrackets === true) {\n          throw new SyntaxError(syntaxError('closing', ']'));\n        }\n\n        value = `\\\\${value}`;\n      } else {\n        increment('brackets');\n      }\n\n      push({ type: 'bracket', value });\n      continue;\n    }\n\n    if (value === ']') {\n      if (opts.nobracket === true || (prev && prev.type === 'bracket' && prev.value.length === 1)) {\n        push({ type: 'text', value, output: `\\\\${value}` });\n        continue;\n      }\n\n      if (state.brackets === 0) {\n        if (opts.strictBrackets === true) {\n          throw new SyntaxError(syntaxError('opening', '['));\n        }\n\n        push({ type: 'text', value, output: `\\\\${value}` });\n        continue;\n      }\n\n      decrement('brackets');\n\n      const prevValue = prev.value.slice(1);\n      if (prev.posix !== true && prevValue[0] === '^' && !prevValue.includes('/')) {\n        value = `/${value}`;\n      }\n\n      prev.value += value;\n      append({ value });\n\n      // when literal brackets are explicitly disabled\n      // assume we should match with a regex character class\n      if (opts.literalBrackets === false || utils.hasRegexChars(prevValue)) {\n        continue;\n      }\n\n      const escaped = utils.escapeRegex(prev.value);\n      state.output = state.output.slice(0, -prev.value.length);\n\n      // when literal brackets are explicitly enabled\n      // assume we should escape the brackets to match literal characters\n      if (opts.literalBrackets === true) {\n        state.output += escaped;\n        prev.value = escaped;\n        continue;\n      }\n\n      // when the user specifies nothing, try to match both\n      prev.value = `(${capture}${escaped}|${prev.value})`;\n      state.output += prev.value;\n      continue;\n    }\n\n    /**\n     * Braces\n     */\n\n    if (value === '{' && opts.nobrace !== true) {\n      increment('braces');\n\n      const open = {\n        type: 'brace',\n        value,\n        output: '(',\n        outputIndex: state.output.length,\n        tokensIndex: state.tokens.length\n      };\n\n      braces.push(open);\n      push(open);\n      continue;\n    }\n\n    if (value === '}') {\n      const brace = braces[braces.length - 1];\n\n      if (opts.nobrace === true || !brace) {\n        push({ type: 'text', value, output: value });\n        continue;\n      }\n\n      let output = ')';\n\n      if (brace.dots === true) {\n        const arr = tokens.slice();\n        const range = [];\n\n        for (let i = arr.length - 1; i >= 0; i--) {\n          tokens.pop();\n          if (arr[i].type === 'brace') {\n            break;\n          }\n          if (arr[i].type !== 'dots') {\n            range.unshift(arr[i].value);\n          }\n        }\n\n        output = expandRange(range, opts);\n        state.backtrack = true;\n      }\n\n      if (brace.comma !== true && brace.dots !== true) {\n        const out = state.output.slice(0, brace.outputIndex);\n        const toks = state.tokens.slice(brace.tokensIndex);\n        brace.value = brace.output = '\\\\{';\n        value = output = '\\\\}';\n        state.output = out;\n        for (const t of toks) {\n          state.output += (t.output || t.value);\n        }\n      }\n\n      push({ type: 'brace', value, output });\n      decrement('braces');\n      braces.pop();\n      continue;\n    }\n\n    /**\n     * Pipes\n     */\n\n    if (value === '|') {\n      if (extglobs.length > 0) {\n        extglobs[extglobs.length - 1].conditions++;\n      }\n      push({ type: 'text', value });\n      continue;\n    }\n\n    /**\n     * Commas\n     */\n\n    if (value === ',') {\n      let output = value;\n\n      const brace = braces[braces.length - 1];\n      if (brace && stack[stack.length - 1] === 'braces') {\n        brace.comma = true;\n        output = '|';\n      }\n\n      push({ type: 'comma', value, output });\n      continue;\n    }\n\n    /**\n     * Slashes\n     */\n\n    if (value === '/') {\n      // if the beginning of the glob is \"./\", advance the start\n      // to the current index, and don't add the \"./\" characters\n      // to the state. This greatly simplifies lookbehinds when\n      // checking for BOS characters like \"!\" and \".\" (not \"./\")\n      if (prev.type === 'dot' && state.index === state.start + 1) {\n        state.start = state.index + 1;\n        state.consumed = '';\n        state.output = '';\n        tokens.pop();\n        prev = bos; // reset \"prev\" to the first token\n        continue;\n      }\n\n      push({ type: 'slash', value, output: SLASH_LITERAL });\n      continue;\n    }\n\n    /**\n     * Dots\n     */\n\n    if (value === '.') {\n      if (state.braces > 0 && prev.type === 'dot') {\n        if (prev.value === '.') prev.output = DOT_LITERAL;\n        const brace = braces[braces.length - 1];\n        prev.type = 'dots';\n        prev.output += value;\n        prev.value += value;\n        brace.dots = true;\n        continue;\n      }\n\n      if ((state.braces + state.parens) === 0 && prev.type !== 'bos' && prev.type !== 'slash') {\n        push({ type: 'text', value, output: DOT_LITERAL });\n        continue;\n      }\n\n      push({ type: 'dot', value, output: DOT_LITERAL });\n      continue;\n    }\n\n    /**\n     * Question marks\n     */\n\n    if (value === '?') {\n      const isGroup = prev && prev.value === '(';\n      if (!isGroup && opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n        extglobOpen('qmark', value);\n        continue;\n      }\n\n      if (prev && prev.type === 'paren') {\n        const next = peek();\n        let output = value;\n\n        if (next === '<' && !utils.supportsLookbehinds()) {\n          throw new Error('Node.js v10 or higher is required for regex lookbehinds');\n        }\n\n        if ((prev.value === '(' && !/[!=<:]/.test(next)) || (next === '<' && !/<([!=]|\\w+>)/.test(remaining()))) {\n          output = `\\\\${value}`;\n        }\n\n        push({ type: 'text', value, output });\n        continue;\n      }\n\n      if (opts.dot !== true && (prev.type === 'slash' || prev.type === 'bos')) {\n        push({ type: 'qmark', value, output: QMARK_NO_DOT });\n        continue;\n      }\n\n      push({ type: 'qmark', value, output: QMARK });\n      continue;\n    }\n\n    /**\n     * Exclamation\n     */\n\n    if (value === '!') {\n      if (opts.noextglob !== true && peek() === '(') {\n        if (peek(2) !== '?' || !/[!=<:]/.test(peek(3))) {\n          extglobOpen('negate', value);\n          continue;\n        }\n      }\n\n      if (opts.nonegate !== true && state.index === 0) {\n        negate();\n        continue;\n      }\n    }\n\n    /**\n     * Plus\n     */\n\n    if (value === '+') {\n      if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n        extglobOpen('plus', value);\n        continue;\n      }\n\n      if ((prev && prev.value === '(') || opts.regex === false) {\n        push({ type: 'plus', value, output: PLUS_LITERAL });\n        continue;\n      }\n\n      if ((prev && (prev.type === 'bracket' || prev.type === 'paren' || prev.type === 'brace')) || state.parens > 0) {\n        push({ type: 'plus', value });\n        continue;\n      }\n\n      push({ type: 'plus', value: PLUS_LITERAL });\n      continue;\n    }\n\n    /**\n     * Plain text\n     */\n\n    if (value === '@') {\n      if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n        push({ type: 'at', extglob: true, value, output: '' });\n        continue;\n      }\n\n      push({ type: 'text', value });\n      continue;\n    }\n\n    /**\n     * Plain text\n     */\n\n    if (value !== '*') {\n      if (value === '$' || value === '^') {\n        value = `\\\\${value}`;\n      }\n\n      const match = REGEX_NON_SPECIAL_CHARS.exec(remaining());\n      if (match) {\n        value += match[0];\n        state.index += match[0].length;\n      }\n\n      push({ type: 'text', value });\n      continue;\n    }\n\n    /**\n     * Stars\n     */\n\n    if (prev && (prev.type === 'globstar' || prev.star === true)) {\n      prev.type = 'star';\n      prev.star = true;\n      prev.value += value;\n      prev.output = star;\n      state.backtrack = true;\n      state.globstar = true;\n      consume(value);\n      continue;\n    }\n\n    let rest = remaining();\n    if (opts.noextglob !== true && /^\\([^?]/.test(rest)) {\n      extglobOpen('star', value);\n      continue;\n    }\n\n    if (prev.type === 'star') {\n      if (opts.noglobstar === true) {\n        consume(value);\n        continue;\n      }\n\n      const prior = prev.prev;\n      const before = prior.prev;\n      const isStart = prior.type === 'slash' || prior.type === 'bos';\n      const afterStar = before && (before.type === 'star' || before.type === 'globstar');\n\n      if (opts.bash === true && (!isStart || (rest[0] && rest[0] !== '/'))) {\n        push({ type: 'star', value, output: '' });\n        continue;\n      }\n\n      const isBrace = state.braces > 0 && (prior.type === 'comma' || prior.type === 'brace');\n      const isExtglob = extglobs.length && (prior.type === 'pipe' || prior.type === 'paren');\n      if (!isStart && prior.type !== 'paren' && !isBrace && !isExtglob) {\n        push({ type: 'star', value, output: '' });\n        continue;\n      }\n\n      // strip consecutive `/**/`\n      while (rest.slice(0, 3) === '/**') {\n        const after = input[state.index + 4];\n        if (after && after !== '/') {\n          break;\n        }\n        rest = rest.slice(3);\n        consume('/**', 3);\n      }\n\n      if (prior.type === 'bos' && eos()) {\n        prev.type = 'globstar';\n        prev.value += value;\n        prev.output = globstar(opts);\n        state.output = prev.output;\n        state.globstar = true;\n        consume(value);\n        continue;\n      }\n\n      if (prior.type === 'slash' && prior.prev.type !== 'bos' && !afterStar && eos()) {\n        state.output = state.output.slice(0, -(prior.output + prev.output).length);\n        prior.output = `(?:${prior.output}`;\n\n        prev.type = 'globstar';\n        prev.output = globstar(opts) + (opts.strictSlashes ? ')' : '|$)');\n        prev.value += value;\n        state.globstar = true;\n        state.output += prior.output + prev.output;\n        consume(value);\n        continue;\n      }\n\n      if (prior.type === 'slash' && prior.prev.type !== 'bos' && rest[0] === '/') {\n        const end = rest[1] !== void 0 ? '|$' : '';\n\n        state.output = state.output.slice(0, -(prior.output + prev.output).length);\n        prior.output = `(?:${prior.output}`;\n\n        prev.type = 'globstar';\n        prev.output = `${globstar(opts)}${SLASH_LITERAL}|${SLASH_LITERAL}${end})`;\n        prev.value += value;\n\n        state.output += prior.output + prev.output;\n        state.globstar = true;\n\n        consume(value + advance());\n\n        push({ type: 'slash', value: '/', output: '' });\n        continue;\n      }\n\n      if (prior.type === 'bos' && rest[0] === '/') {\n        prev.type = 'globstar';\n        prev.value += value;\n        prev.output = `(?:^|${SLASH_LITERAL}|${globstar(opts)}${SLASH_LITERAL})`;\n        state.output = prev.output;\n        state.globstar = true;\n        consume(value + advance());\n        push({ type: 'slash', value: '/', output: '' });\n        continue;\n      }\n\n      // remove single star from output\n      state.output = state.output.slice(0, -prev.output.length);\n\n      // reset previous token to globstar\n      prev.type = 'globstar';\n      prev.output = globstar(opts);\n      prev.value += value;\n\n      // reset output with globstar\n      state.output += prev.output;\n      state.globstar = true;\n      consume(value);\n      continue;\n    }\n\n    const token = { type: 'star', value, output: star };\n\n    if (opts.bash === true) {\n      token.output = '.*?';\n      if (prev.type === 'bos' || prev.type === 'slash') {\n        token.output = nodot + token.output;\n      }\n      push(token);\n      continue;\n    }\n\n    if (prev && (prev.type === 'bracket' || prev.type === 'paren') && opts.regex === true) {\n      token.output = value;\n      push(token);\n      continue;\n    }\n\n    if (state.index === state.start || prev.type === 'slash' || prev.type === 'dot') {\n      if (prev.type === 'dot') {\n        state.output += NO_DOT_SLASH;\n        prev.output += NO_DOT_SLASH;\n\n      } else if (opts.dot === true) {\n        state.output += NO_DOTS_SLASH;\n        prev.output += NO_DOTS_SLASH;\n\n      } else {\n        state.output += nodot;\n        prev.output += nodot;\n      }\n\n      if (peek() !== '*') {\n        state.output += ONE_CHAR;\n        prev.output += ONE_CHAR;\n      }\n    }\n\n    push(token);\n  }\n\n  while (state.brackets > 0) {\n    if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ']'));\n    state.output = utils.escapeLast(state.output, '[');\n    decrement('brackets');\n  }\n\n  while (state.parens > 0) {\n    if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ')'));\n    state.output = utils.escapeLast(state.output, '(');\n    decrement('parens');\n  }\n\n  while (state.braces > 0) {\n    if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', '}'));\n    state.output = utils.escapeLast(state.output, '{');\n    decrement('braces');\n  }\n\n  if (opts.strictSlashes !== true && (prev.type === 'star' || prev.type === 'bracket')) {\n    push({ type: 'maybe_slash', value: '', output: `${SLASH_LITERAL}?` });\n  }\n\n  // rebuild the output if we had to backtrack at any point\n  if (state.backtrack === true) {\n    state.output = '';\n\n    for (const token of state.tokens) {\n      state.output += token.output != null ? token.output : token.value;\n\n      if (token.suffix) {\n        state.output += token.suffix;\n      }\n    }\n  }\n\n  return state;\n};\n\n/**\n * Fast paths for creating regular expressions for common glob patterns.\n * This can significantly speed up processing and has very little downside\n * impact when none of the fast paths match.\n */\n\nparse.fastpaths = (input, options) => {\n  const opts = { ...options };\n  const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;\n  const len = input.length;\n  if (len > max) {\n    throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);\n  }\n\n  input = REPLACEMENTS[input] || input;\n  const win32 = utils.isWindows(options);\n\n  // create constants based on platform, for windows or posix\n  const {\n    DOT_LITERAL,\n    SLASH_LITERAL,\n    ONE_CHAR,\n    DOTS_SLASH,\n    NO_DOT,\n    NO_DOTS,\n    NO_DOTS_SLASH,\n    STAR,\n    START_ANCHOR\n  } = constants.globChars(win32);\n\n  const nodot = opts.dot ? NO_DOTS : NO_DOT;\n  const slashDot = opts.dot ? NO_DOTS_SLASH : NO_DOT;\n  const capture = opts.capture ? '' : '?:';\n  const state = { negated: false, prefix: '' };\n  let star = opts.bash === true ? '.*?' : STAR;\n\n  if (opts.capture) {\n    star = `(${star})`;\n  }\n\n  const globstar = opts => {\n    if (opts.noglobstar === true) return star;\n    return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;\n  };\n\n  const create = str => {\n    switch (str) {\n      case '*':\n        return `${nodot}${ONE_CHAR}${star}`;\n\n      case '.*':\n        return `${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n      case '*.*':\n        return `${nodot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n      case '*/*':\n        return `${nodot}${star}${SLASH_LITERAL}${ONE_CHAR}${slashDot}${star}`;\n\n      case '**':\n        return nodot + globstar(opts);\n\n      case '**/*':\n        return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${ONE_CHAR}${star}`;\n\n      case '**/*.*':\n        return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n      case '**/.*':\n        return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n      default: {\n        const match = /^(.*?)\\.(\\w+)$/.exec(str);\n        if (!match) return;\n\n        const source = create(match[1]);\n        if (!source) return;\n\n        return source + DOT_LITERAL + match[2];\n      }\n    }\n  };\n\n  const output = utils.removePrefix(input, state);\n  let source = create(output);\n\n  if (source && opts.strictSlashes !== true) {\n    source += `${SLASH_LITERAL}?`;\n  }\n\n  return source;\n};\n\nmodule.exports = parse;\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/cGljb2NvbG9yc0AxLjAuMA==",
    "content": "/picocolors.d.tsĊimport { Colors } from \"./types\"\n\ndeclare const picocolors: Colors & { createColors: (enabled?: boolean) => Colors }\n\nexport = picocolors\n/LICENSE\u0003\rISC License\n\nCopyright (c) 2021 Alexey Raspopov, Kostiantyn Denysov, Anton Verinov\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted, provided that the above\ncopyright notice and this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\nWITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\nANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\nACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\nOR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n/README.md\u0002n# picocolors\n\nThe tiniest and the fastest library for terminal output formatting with ANSI colors.\n\n```javascript\nimport pc from \"picocolors\"\n\nconsole.log(\n  pc.green(`How are ${pc.italic(`you`)} doing?`)\n)\n```\n\n- **No dependencies.**\n- **14 times** smaller and **2 times** faster than chalk.\n- Used by popular tools like PostCSS, SVGO, Stylelint, and Browserslist.\n- Node.js v6+ & browsers support. Support for both CJS and ESM projects.\n- TypeScript type declarations included.\n- [`NO_COLOR`](https://no-color.org/) friendly.\n\n## Docs\nRead **[full docs](https://github.com/alexeyraspopov/picocolors#readme)** on GitHub.\n/types.ts\u0002bexport type Formatter = (input: string | number | null | undefined) => string\n\nexport interface Colors {\n\tisColorSupported: boolean\n\treset: Formatter\n\tbold: Formatter\n\tdim: Formatter\n\titalic: Formatter\n\tunderline: Formatter\n\tinverse: Formatter\n\thidden: Formatter\n\tstrikethrough: Formatter\n\tblack: Formatter\n\tred: Formatter\n\tgreen: Formatter\n\tyellow: Formatter\n\tblue: Formatter\n\tmagenta: Formatter\n\tcyan: Formatter\n\twhite: Formatter\n\tgray: Formatter\n\tbgBlack: Formatter\n\tbgRed: Formatter\n\tbgGreen: Formatter\n\tbgYellow: Formatter\n\tbgBlue: Formatter\n\tbgMagenta: Formatter\n\tbgCyan: Formatter\n\tbgWhite: Formatter\n}\n/package.json\u0002&{\n  \"name\": \"picocolors\",\n  \"version\": \"1.0.0\",\n  \"main\": \"./picocolors.js\",\n  \"types\": \"./picocolors.d.ts\",\n  \"browser\": {\n    \"./picocolors.js\": \"./picocolors.browser.js\"\n  },\n  \"sideEffects\": false,\n  \"description\": \"The tiniest and the fastest library for terminal output formatting with ANSI colors\",\n  \"files\": [\n    \"picocolors.*\",\n    \"types.ts\"\n  ],\n  \"keywords\": [\n    \"terminal\",\n    \"colors\",\n    \"formatting\",\n    \"cli\",\n    \"console\"\n  ],\n  \"author\": \"Alexey Raspopov\",\n  \"repository\": \"alexeyraspopov/picocolors\",\n  \"license\": \"ISC\"\n}\n/picocolors.js\n\"let tty = require(\"tty\")\n\nlet isColorSupported =\n\t!(\"NO_COLOR\" in process.env || process.argv.includes(\"--no-color\")) &&\n\t(\"FORCE_COLOR\" in process.env ||\n\t\tprocess.argv.includes(\"--color\") ||\n\t\tprocess.platform === \"win32\" ||\n\t\t(tty.isatty(1) && process.env.TERM !== \"dumb\") ||\n\t\t\"CI\" in process.env)\n\nlet formatter =\n\t(open, close, replace = open) =>\n\tinput => {\n\t\tlet string = \"\" + input\n\t\tlet index = string.indexOf(close, open.length)\n\t\treturn ~index\n\t\t\t? open + replaceClose(string, close, replace, index) + close\n\t\t\t: open + string + close\n\t}\n\nlet replaceClose = (string, close, replace, index) => {\n\tlet start = string.substring(0, index) + replace\n\tlet end = string.substring(index + close.length)\n\tlet nextIndex = end.indexOf(close)\n\treturn ~nextIndex ? start + replaceClose(end, close, replace, nextIndex) : start + end\n}\n\nlet createColors = (enabled = isColorSupported) => ({\n\tisColorSupported: enabled,\n\treset: enabled ? s => `\\x1b[0m${s}\\x1b[0m` : String,\n\tbold: enabled ? formatter(\"\\x1b[1m\", \"\\x1b[22m\", \"\\x1b[22m\\x1b[1m\") : String,\n\tdim: enabled ? formatter(\"\\x1b[2m\", \"\\x1b[22m\", \"\\x1b[22m\\x1b[2m\") : String,\n\titalic: enabled ? formatter(\"\\x1b[3m\", \"\\x1b[23m\") : String,\n\tunderline: enabled ? formatter(\"\\x1b[4m\", \"\\x1b[24m\") : String,\n\tinverse: enabled ? formatter(\"\\x1b[7m\", \"\\x1b[27m\") : String,\n\thidden: enabled ? formatter(\"\\x1b[8m\", \"\\x1b[28m\") : String,\n\tstrikethrough: enabled ? formatter(\"\\x1b[9m\", \"\\x1b[29m\") : String,\n\tblack: enabled ? formatter(\"\\x1b[30m\", \"\\x1b[39m\") : String,\n\tred: enabled ? formatter(\"\\x1b[31m\", \"\\x1b[39m\") : String,\n\tgreen: enabled ? formatter(\"\\x1b[32m\", \"\\x1b[39m\") : String,\n\tyellow: enabled ? formatter(\"\\x1b[33m\", \"\\x1b[39m\") : String,\n\tblue: enabled ? formatter(\"\\x1b[34m\", \"\\x1b[39m\") : String,\n\tmagenta: enabled ? formatter(\"\\x1b[35m\", \"\\x1b[39m\") : String,\n\tcyan: enabled ? formatter(\"\\x1b[36m\", \"\\x1b[39m\") : String,\n\twhite: enabled ? formatter(\"\\x1b[37m\", \"\\x1b[39m\") : String,\n\tgray: enabled ? formatter(\"\\x1b[90m\", \"\\x1b[39m\") : String,\n\tbgBlack: enabled ? formatter(\"\\x1b[40m\", \"\\x1b[49m\") : String,\n\tbgRed: enabled ? formatter(\"\\x1b[41m\", \"\\x1b[49m\") : String,\n\tbgGreen: enabled ? formatter(\"\\x1b[42m\", \"\\x1b[49m\") : String,\n\tbgYellow: enabled ? formatter(\"\\x1b[43m\", \"\\x1b[49m\") : String,\n\tbgBlue: enabled ? formatter(\"\\x1b[44m\", \"\\x1b[49m\") : String,\n\tbgMagenta: enabled ? formatter(\"\\x1b[45m\", \"\\x1b[49m\") : String,\n\tbgCyan: enabled ? formatter(\"\\x1b[46m\", \"\\x1b[49m\") : String,\n\tbgWhite: enabled ? formatter(\"\\x1b[47m\", \"\\x1b[49m\") : String,\n})\n\nmodule.exports = createColors()\nmodule.exports.createColors = createColors\n/picocolors.browser.js\u0001hvar x=String;\nvar create=function() {return {isColorSupported:false,reset:x,bold:x,dim:x,italic:x,underline:x,inverse:x,hidden:x,strikethrough:x,black:x,red:x,green:x,yellow:x,blue:x,magenta:x,cyan:x,white:x,gray:x,bgBlack:x,bgRed:x,bgGreen:x,bgYellow:x,bgBlue:x,bgMagenta:x,bgCyan:x,bgWhite:x}};\nmodule.exports=create();\nmodule.exports.createColors = create;\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/cGluby1hYnN0cmFjdC10cmFuc3BvcnRAMS4wLjA=",
    "content": "/index.js\u0006'use strict'\n\nconst metadata = Symbol.for('pino.metadata')\nconst split = require('split2')\nconst { Duplex } = require('readable-stream')\n\nmodule.exports = function build (fn, opts = {}) {\n  const parseLines = opts.parse === 'lines'\n  const parseLine = typeof opts.parseLine === 'function' ? opts.parseLine : JSON.parse\n  const close = opts.close || defaultClose\n  const stream = split(function (line) {\n    let value\n\n    try {\n      value = parseLine(line)\n    } catch (error) {\n      this.emit('unknown', line, error)\n      return\n    }\n\n    if (value === null) {\n      this.emit('unknown', line, 'Null value ignored')\n      return\n    }\n\n    if (typeof value !== 'object') {\n      value = {\n        data: value,\n        time: Date.now()\n      }\n    }\n\n    if (stream[metadata]) {\n      stream.lastTime = value.time\n      stream.lastLevel = value.level\n      stream.lastObj = value\n    }\n\n    if (parseLines) {\n      return line\n    }\n\n    return value\n  }, { autoDestroy: true })\n\n  stream._destroy = function (err, cb) {\n    const promise = close(err, cb)\n    if (promise && typeof promise.then === 'function') {\n      promise.then(cb, cb)\n    }\n  }\n\n  if (opts.metadata !== false) {\n    stream[metadata] = true\n    stream.lastTime = 0\n    stream.lastLevel = 0\n    stream.lastObj = null\n  }\n\n  let res = fn(stream)\n\n  if (res && typeof res.catch === 'function') {\n    res.catch((err) => {\n      stream.destroy(err)\n    })\n\n    // set it to null to not retain a reference to the promise\n    res = null\n  } else if (opts.enablePipelining && res) {\n    return Duplex.from({ writable: stream, readable: res, objectMode: true })\n  }\n\n  return stream\n}\n\nfunction defaultClose (err, cb) {\n  process.nextTick(cb, err)\n}\n/test/base.test.js$'use strict'\n\nconst { once } = require('events')\nconst { Transform, pipeline } = require('stream')\n\nconst { test } = require('tap')\nconst build = require('../')\n\ntest('parse newlined delimited JSON', ({ same, plan }) => {\n  plan(2)\n  const expected = [{\n    level: 30,\n    time: 1617955768092,\n    pid: 2942,\n    hostname: 'MacBook-Pro.local',\n    msg: 'hello world'\n  }, {\n    level: 30,\n    time: 1617955768092,\n    pid: 2942,\n    hostname: 'MacBook-Pro.local',\n    msg: 'another message',\n    prop: 42\n  }]\n\n  const stream = build(function (source) {\n    source.on('data', function (line) {\n      same(expected.shift(), line)\n    })\n  })\n\n  const lines = expected.map(JSON.stringify).join('\\n')\n  stream.write(lines)\n  stream.end()\n})\n\ntest('parse newlined delimited JSON', ({ same, plan }) => {\n  plan(2)\n  const expected = [{\n    level: 30,\n    time: 1617955768092,\n    pid: 2942,\n    hostname: 'MacBook-Pro.local',\n    msg: 'hello world'\n  }, {\n    level: 30,\n    time: 1617955768092,\n    pid: 2942,\n    hostname: 'MacBook-Pro.local',\n    msg: 'another message',\n    prop: 42\n  }]\n\n  const stream = build(function (source) {\n    source.on('data', function (line) {\n      same(expected.shift(), line)\n    })\n  }, { parse: 'json' })\n\n  const lines = expected.map(JSON.stringify).join('\\n')\n  stream.write(lines)\n  stream.end()\n})\n\ntest('null support', ({ same, plan }) => {\n  plan(1)\n  const stream = build(function (source) {\n    source.on('unknown', function (line) {\n      same('null', line)\n    })\n  })\n\n  stream.write('null\\n')\n  stream.end()\n})\n\ntest('broken json', ({ same, plan }) => {\n  plan(2)\n  const expected = '{ \"truncated'\n  const stream = build(function (source) {\n    source.on('unknown', function (line, error) {\n      same(expected, line)\n      same(error.message, 'Unexpected end of JSON input')\n    })\n  })\n\n  stream.write(expected + '\\n')\n  stream.end()\n})\n\ntest('pure values', ({ same, ok, plan }) => {\n  plan(3)\n  const stream = build(function (source) {\n    source.on('data', function (line) {\n      same(line.data, 42)\n      ok(line.time)\n      same(new Date(line.time).getTime(), line.time)\n    })\n  })\n\n  stream.write('42\\n')\n  stream.end()\n})\n\ntest('support async iteration', ({ same, plan }) => {\n  plan(2)\n  const expected = [{\n    level: 30,\n    time: 1617955768092,\n    pid: 2942,\n    hostname: 'MacBook-Pro.local',\n    msg: 'hello world'\n  }, {\n    level: 30,\n    time: 1617955768092,\n    pid: 2942,\n    hostname: 'MacBook-Pro.local',\n    msg: 'another message',\n    prop: 42\n  }]\n\n  const stream = build(async function (source) {\n    for await (const line of source) {\n      same(expected.shift(), line)\n    }\n  })\n\n  const lines = expected.map(JSON.stringify).join('\\n')\n  stream.write(lines)\n  stream.end()\n})\n\ntest('rejecting errors the stream', async ({ same, plan }) => {\n  const stream = build(async function (source) {\n    throw new Error('kaboom')\n  })\n\n  const [err] = await once(stream, 'error')\n  same(err.message, 'kaboom')\n})\n\ntest('set metadata', ({ same, plan, equal }) => {\n  plan(9)\n\n  const expected = [{\n    level: 30,\n    time: 1617955768092,\n    pid: 2942,\n    hostname: 'MacBook-Pro.local',\n    msg: 'hello world'\n  }, {\n    level: 30,\n    time: 1617955768092,\n    pid: 2942,\n    hostname: 'MacBook-Pro.local',\n    msg: 'another message',\n    prop: 42\n  }]\n\n  const stream = build(function (source) {\n    source.on('data', function (line) {\n      const obj = expected.shift()\n      same(this.lastLevel, obj.level)\n      same(this.lastTime, obj.time)\n      same(this.lastObj, obj)\n      same(obj, line)\n    })\n  }, { metadata: true })\n\n  equal(stream[Symbol.for('pino.metadata')], true)\n  const lines = expected.map(JSON.stringify).join('\\n')\n  stream.write(lines)\n  stream.end()\n})\n\ntest('parse lines', ({ same, plan, equal }) => {\n  plan(9)\n\n  const expected = [{\n    level: 30,\n    time: 1617955768092,\n    pid: 2942,\n    hostname: 'MacBook-Pro.local',\n    msg: 'hello world'\n  }, {\n    level: 30,\n    time: 1617955768092,\n    pid: 2942,\n    hostname: 'MacBook-Pro.local',\n    msg: 'another message',\n    prop: 42\n  }]\n\n  const stream = build(function (source) {\n    source.on('data', function (line) {\n      const obj = expected.shift()\n      same(this.lastLevel, obj.level)\n      same(this.lastTime, obj.time)\n      same(this.lastObj, obj)\n      same(JSON.stringify(obj), line)\n    })\n  }, { metadata: true, parse: 'lines' })\n\n  equal(stream[Symbol.for('pino.metadata')], true)\n  const lines = expected.map(JSON.stringify).join('\\n')\n  stream.write(lines)\n  stream.end()\n})\n\ntest('custom parse line function', ({ same, plan, equal }) => {\n  plan(11)\n\n  const expected = [{\n    level: 30,\n    time: 1617955768092,\n    pid: 2942,\n    hostname: 'MacBook-Pro.local',\n    msg: 'hello world'\n  }, {\n    level: 30,\n    time: 1617955768092,\n    pid: 2942,\n    hostname: 'MacBook-Pro.local',\n    msg: 'another message',\n    prop: 42\n  }]\n  let num = 0\n\n  function parseLine (str) {\n    const obj = JSON.parse(str)\n    same(expected[num], obj)\n    return obj\n  }\n\n  const stream = build(function (source) {\n    source.on('data', function (line) {\n      const obj = expected[num]\n      same(this.lastLevel, obj.level)\n      same(this.lastTime, obj.time)\n      same(this.lastObj, obj)\n      same(obj, line)\n      num++\n    })\n  }, { metadata: true, parseLine })\n\n  equal(stream[Symbol.for('pino.metadata')], true)\n  const lines = expected.map(JSON.stringify).join('\\n')\n  stream.write(lines)\n  stream.end()\n})\n\ntest('set metadata (default)', ({ same, plan, equal }) => {\n  plan(9)\n\n  const expected = [{\n    level: 30,\n    time: 1617955768092,\n    pid: 2942,\n    hostname: 'MacBook-Pro.local',\n    msg: 'hello world'\n  }, {\n    level: 30,\n    time: 1617955768092,\n    pid: 2942,\n    hostname: 'MacBook-Pro.local',\n    msg: 'another message',\n    prop: 42\n  }]\n\n  const stream = build(function (source) {\n    source.on('data', function (line) {\n      const obj = expected.shift()\n      same(this.lastLevel, obj.level)\n      same(this.lastTime, obj.time)\n      same(this.lastObj, obj)\n      same(obj, line)\n    })\n  })\n\n  equal(stream[Symbol.for('pino.metadata')], true)\n  const lines = expected.map(JSON.stringify).join('\\n')\n  stream.write(lines)\n  stream.end()\n})\n\ntest('do not set metadata', ({ same, plan, equal }) => {\n  plan(9)\n\n  const expected = [{\n    level: 30,\n    time: 1617955768092,\n    pid: 2942,\n    hostname: 'MacBook-Pro.local',\n    msg: 'hello world'\n  }, {\n    level: 30,\n    time: 1617955768092,\n    pid: 2942,\n    hostname: 'MacBook-Pro.local',\n    msg: 'another message',\n    prop: 42\n  }]\n\n  const stream = build(function (source) {\n    source.on('data', function (line) {\n      const obj = expected.shift()\n      same(this.lastLevel, undefined)\n      same(this.lastTime, undefined)\n      same(this.lastObj, undefined)\n      same(obj, line)\n    })\n  }, { metadata: false })\n\n  equal(stream[Symbol.for('pino.metadata')], undefined)\n  const lines = expected.map(JSON.stringify).join('\\n')\n  stream.write(lines)\n  stream.end()\n})\n\ntest('close logic', ({ same, plan, pass }) => {\n  plan(3)\n  const expected = [{\n    level: 30,\n    time: 1617955768092,\n    pid: 2942,\n    hostname: 'MacBook-Pro.local',\n    msg: 'hello world'\n  }, {\n    level: 30,\n    time: 1617955768092,\n    pid: 2942,\n    hostname: 'MacBook-Pro.local',\n    msg: 'another message',\n    prop: 42\n  }]\n\n  const stream = build(function (source) {\n    source.on('data', function (line) {\n      same(expected.shift(), line)\n    })\n  }, {\n    close (err, cb) {\n      pass('close called')\n      process.nextTick(cb, err)\n    }\n  })\n\n  const lines = expected.map(JSON.stringify).join('\\n')\n  stream.write(lines)\n  stream.end()\n})\n\ntest('close with promises', ({ same, plan, pass }) => {\n  plan(3)\n  const expected = [{\n    level: 30,\n    time: 1617955768092,\n    pid: 2942,\n    hostname: 'MacBook-Pro.local',\n    msg: 'hello world'\n  }, {\n    level: 30,\n    time: 1617955768092,\n    pid: 2942,\n    hostname: 'MacBook-Pro.local',\n    msg: 'another message',\n    prop: 42\n  }]\n\n  const stream = build(function (source) {\n    source.on('data', function (line) {\n      same(expected.shift(), line)\n    })\n  }, {\n    async close () {\n      pass('close called')\n    }\n  })\n\n  const lines = expected.map(JSON.stringify).join('\\n')\n  stream.write(lines)\n  stream.end()\n})\n\ntest('support Transform streams', ({ same, plan, error }) => {\n  plan(7)\n\n  const expected1 = [{\n    level: 30,\n    time: 1617955768092,\n    pid: 2942,\n    hostname: 'MacBook-Pro.local',\n    msg: 'hello world'\n  }, {\n    level: 30,\n    time: 1617955768092,\n    pid: 2942,\n    hostname: 'MacBook-Pro.local',\n    msg: 'another message',\n    prop: 42\n  }]\n\n  const expected2 = []\n\n  const stream1 = build(function (source) {\n    const transform = new Transform({\n      objectMode: true,\n      autoDestroy: true,\n      transform (chunk, enc, cb) {\n        same(expected1.shift(), chunk)\n        chunk.service = 'from transform'\n        expected2.push(chunk)\n        cb(null, JSON.stringify(chunk) + '\\n')\n      }\n    })\n\n    pipeline(source, transform, () => {})\n\n    return transform\n  }, { enablePipelining: true })\n\n  const stream2 = build(function (source) {\n    source.on('data', function (line) {\n      same(expected2.shift(), line)\n    })\n  })\n\n  pipeline(stream1, stream2, function (err) {\n    error(err)\n    same(expected1, [])\n    same(expected2, [])\n  })\n\n  const lines = expected1.map(JSON.stringify).join('\\n')\n  stream1.write(lines)\n  stream1.end()\n})\n/LICENSE\u0004%MIT License\n\nCopyright (c) 2021 pino\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n/.github/dependabot.yml\u0001\u0011version: 2\nupdates:\n  - package-ecosystem: \"github-actions\"\n    directory: \"/\"\n    schedule:\n      interval: \"monthly\"\n    open-pull-requests-limit: 10\n\n  - package-ecosystem: \"npm\"\n    directory: \"/\"\n    schedule:\n      interval: \"weekly\"\n    open-pull-requests-limit: 10\n/.github/workflows/ci.yml\tname: CI\n\non:\n  push:\n    paths-ignore:\n        - 'docs/**'\n        - '*.md'\n  pull_request:\n    paths-ignore:\n        - 'docs/**'\n        - '*.md'\n\n# This allows a subsequently queued workflow run to interrupt previous runs\nconcurrency:\n  group: \"${{ github.workflow }} @ ${{ github.event.pull_request.head.label || github.head_ref || github.ref }}\"\n  cancel-in-progress: true\n\njobs:\n  dependency-review:\n    name: Dependency Review\n    if: github.event_name == 'pull_request'\n    runs-on: ubuntu-latest\n    permissions:\n      contents: read\n    steps:\n      - name: Check out repo\n        uses: actions/checkout@v3\n        with:\n          persist-credentials: false\n\n      - name: Dependency review\n        uses: actions/dependency-review-action@v1\n\n  test:\n    name: Test\n    runs-on: ${{ matrix.os }}\n    permissions:\n      contents: read\n    strategy:\n      matrix:\n        node-version: [14, 16, 18]\n        os: [macos-latest, ubuntu-latest, windows-latest]\n    steps:\n      - name: Check out repo\n        uses: actions/checkout@v3\n        with:\n          persist-credentials: false\n\n      - name: Setup Node ${{ matrix.node-version }}\n        uses: actions/setup-node@v3\n        with:\n          node-version: ${{ matrix.node-version }}\n\n      - name: Restore cached dependencies\n        uses: actions/cache@v3\n        with:\n          path: node_modules\n          key: node-modules-${{ hashFiles('package.json') }}\n  \n      - name: Install dependencies\n        run: npm i --ignore-scripts\n\n      - name: Run Tests\n        run: npm run test-ci\n\n      - name: Coveralls Parallel\n        uses: coverallsapp/github-action@1.1.3\n        with:\n          github-token: ${{ secrets.github_token }}\n          parallel: true\n          flag-name: run-${{ matrix.node-version }}-${{ matrix.os }}\n\n  coverage:\n    needs: test\n    runs-on: ubuntu-latest\n    steps:\n      - name: Coveralls Finished\n        uses: coverallsapp/github-action@1.1.3\n        with:\n          github-token: ${{ secrets.GITHUB_TOKEN }}\n          parallel-finished: true\n\n  automerge:\n    name: Automerge Dependabot PRs\n    if: >\n        github.event_name == 'pull_request' &&\n        github.event.pull_request.user.login == 'dependabot[bot]'\n    needs: test\n    permissions:\n      pull-requests: write\n      contents: write\n    runs-on: ubuntu-latest\n    steps:\n      - uses: fastify/github-action-merge-dependabot@v3\n        with:\n          github-token: ${{ secrets.GITHUB_TOKEN }}\n/README.md\u000fq# pino-abstract-transport\n[![npm version](https://img.shields.io/npm/v/pino-abstract-transport)](https://www.npmjs.com/package/pino-abstract-transport)\n[![Build Status](https://img.shields.io/github/workflow/status/pinojs/pino-abstract-transport/CI)](https://github.com/pinojs/pino-abstract-transport/actions)\n[![Coverage Status](https://coveralls.io/repos/github/pinojs/pino-abstract-transport/badge.svg?branch=master)](https://coveralls.io/github/pinojs/pino-abstract-transport?branch=master)\n[![js-standard-style](https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat)](https://standardjs.com/)\n\nWrite Pino transports easily.\n\n## Install\n\n```\nnpm i pino-abstract-transport\n```\n\n## Usage\n\n```js\nimport build from 'pino-abstract-transport'\n\nexport default async function (opts) {\n  return build(async function (source) {\n    for await (let obj of source) {\n      console.log(obj)\n    }\n  })\n}\n```\n\nor in CommonJS and streams:\n\n```js\n'use strict'\n\nconst build = require('pino-abstract-transport')\n\nmodule.exports = function (opts) {\n  return build(function (source) {\n    source.on('data', function (obj) {\n      console.log(obj)\n    })\n  })\n}\n```\n\n## Typescript usage\nInstall the type definitions for node. Make sure the major version of the type definitions matches the node version you are using.\n#### Node 16\n```\nnpm i -D @types/node@16\n```\n\n## API\n\n### build(fn, opts) => Stream\n\nCreate a [`split2`](http://npm.im/split2) instance and returns it.\nThis same instance is also passed to the given function, which is called\nsynchronously.\n\nIf `opts.transform` is `true`, `pino-abstract-transform` will \nwrap the split2 instance and the returned stream using [`duplexify`](https://www.npmjs.com/package/duplexify),\nso they can be concatenated into multiple transports.\n\n#### Events emitted\n\nIn addition to all events emitted by a [`Readable`](https://nodejs.org/api/stream.html#stream_class_stream_readable)\nstream, it emits the following events:\n\n* `unknown` where an unparsable line is found, both the line and optional error is emitted.\n\n#### Options\n\n* `parse` an option to change to data format passed to build function. When this option is set to `lines`,\n  the data is passed as a string, otherwise the data is passed as an object. Default: `undefined`.\n\n* `close(err, cb)` a function that is called to shutdown the transport. It's called both on error and non-error shutdowns.\n  It can also return a promise. In this case discard the the `cb` argument.\n\n* `parseLine(line)` a function that is used to parse line received from `pino`.\n\n## Example\n\n### custom parseLine\n\nYou can allow custom `parseLine` from users while providing a simple and safe default parseLine.\n\n```js\n'use strict'\n\nconst build = require('pino-abstract-transport')\n\nfunction defaultParseLine (line) {\n  const obj = JSON.parse(line)\n  // property foo will be added on each line\n  obj.foo = 'bar'\n  return obj\n}\n\nmodule.exports = function (opts) {\n  const parseLine = typeof opts.parseLine === 'function' ? opts.parseLine : defaultParseLine\n  return build(function (source) {\n    source.on('data', function (obj) {\n      console.log(obj)\n    })\n  }, {\n    parseLine: parseLine\n  })\n}\n```\n\n### Stream concatenation / pipeline\n\nYou can pipeline multiple transports:\n\n```js\nconst build = require('pino-abstract-transport')\nconst { Transform, pipeline } = require('stream')\n\nfunction buildTransform () {\n  return build(function (source) {\n    return new Transform({\n      objectMode: true,\n      autoDestroy: true,\n      transform (line, enc, cb) {\n        line.service = 'bob'\n        cb(null, JSON.stringify(line))\n      }\n    })\n  }, { enablePipelining: true })\n}\n\nfunction buildDestination () {\n  return build(function (source) {\n    source.on('data', function (obj) {\n      console.log(obj)\n    })\n  })\n}\n\npipeline(process.stdin, buildTransform(), buildDestination(), function (err) {\n  console.log('pipeline completed!', err)\n})\n```\n\n## License\n\nMIT\n/.husky/pre-commit3#!/bin/sh\n. \"$(dirname \"$0\")/_/husky.sh\"\n\nnpm test\n/package.json\u0004\u0012{\n  \"name\": \"pino-abstract-transport\",\n  \"version\": \"1.0.0\",\n  \"description\": \"Write Pino transports easily\",\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"prepare\": \"husky install\",\n    \"test\": \"standard | snazzy && tap test/*.test.js  && tsd\",\n    \"test-ci\": \"standard | snazzy && tap test/*.test.js --coverage-report=lcovonly && tsd\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/pinojs/pino-abstract-transport.git\"\n  },\n  \"keywords\": [\n    \"pino\",\n    \"transport\"\n  ],\n  \"author\": \"Matteo Collina <hello@matteocollina.com>\",\n  \"license\": \"MIT\",\n  \"bugs\": {\n    \"url\": \"https://github.com/pinojs/pino-abstract-transport/issues\"\n  },\n  \"homepage\": \"https://github.com/pinojs/pino-abstract-transport#readme\",\n  \"dependencies\": {\n    \"readable-stream\": \"^4.0.0\",\n    \"split2\": \"^4.0.0\"\n  },\n  \"devDependencies\": {\n    \"@types/node\": \"^18.0.0\",\n    \"husky\": \"^8.0.0\",\n    \"snazzy\": \"^9.0.0\",\n    \"standard\": \"^17.0.0\",\n    \"tap\": \"^16.0.0\",\n    \"tsd\": \"^0.21.0\"\n  },\n  \"tsd\": {\n    \"directory\": \"./test/types\"\n  }\n}\n/test/types/index.test-d.ts\u0002import build, { OnUnknown } from \"../../index\";\nimport { expectType } from \"tsd\";\nimport { Transform } from \"stream\";\n\n/**\n * If enablePipelining is set to true, the function passed as an argument\n * must return a transform. The unknown event should be listened to on the\n * stream passed in the first argument.\n */\nexpectType<Transform>(build((source) => source, { enablePipelining: true }));\n\n/**\n * If enablePipelining is not set the unknown event can be listened to on\n * the returned stream.\n */\nexpectType<Transform & OnUnknown>(build((source) => {}));\n\n/**\n * build also accepts an async function\n */\nexpectType<Transform  & OnUnknown>(build(async (source) => {}));\n/index.d.ts\tj// Type definitions for pino-abstract-transport 0.4.0\n// Project: https://github.com/pinojs/pino-abstract-transport#readme\n// Definitions by: Diyar Oktay <https://github.com/windupbird144>\n\n/// <reference types=\"node\" />\n\nimport { Transform } from \"stream\";\n\ntype BuildOptions = {\n  /**\n   * `parseLine(line)` a function that is used to parse line received from pino.\n   * @default JSON.parse\n   */\n  parseLine?: (line: string) => unknown;\n\n  /**\n   * `parse` an option to change to data format passed to build function.\n   * @default undefined\n   *\n   */\n  parse?: \"lines\";\n\n  /**\n   * `close(err, cb)` a function that is called to shutdown the transport.\n   * It's called both on error and non-error shutdowns. It can also return\n   * a promise. In this case discard the the cb argument.\n   *\n   * @example\n   * ```typescript\n   * {\n   *   close: function (err, cb) {\n   *     process.nextTick(cb, err)\n   *   }\n   * }\n   * ```\n   * */\n  close?: (err: Error, cb: Function) => void | Promise<void>;\n\n  /**\n   * `metadata` If set to false, do not add metadata properties to the returned stream\n   */\n  metadata?: false;\n};\n\n/**\n * Pass these options to wrap the split2 stream and\n * the returned stream into a Duplex\n */\ntype EnablePipelining = BuildOptions & {\n  enablePipelining: true;\n};\n\ninterface OnUnknown {\n  /**\n   * `unknown` is the event emitted where an unparsable line is found\n   *\n   * @param event 'unknown'\n   * @param line the unparsable line\n   * @param error the error that was thrown when parsing the line\n   */\n  on(event: \"unknown\", listener: (line: string, error: unknown) => void): void;\n}\n\n/**\n * Create a split2 instance and returns it. This same instance is also passed\n * to the given function, which is called synchronously.\n *\n * @returns {Transform} the split2 instance\n */\ndeclare function build(\n  fn: (transform: Transform & OnUnknown) => void | Promise<void>,\n  opts?: BuildOptions\n): Transform & OnUnknown;\n\n/**\n * Creates a split2 instance and passes it to the given function, which is called\n * synchronously. Then wraps the split2 instance and the returned stream into a\n * Duplex, so they can be concatenated into multiple transports.\n *\n * @returns {Transform} the wrapped split2 instance\n */\ndeclare function build(\n  fn: (transform: Transform & OnUnknown) => Transform & OnUnknown,\n  opts: EnablePipelining\n): Transform;\n\nexport { OnUnknown };\n\nexport default build;\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/cHJlbHVkZS1sc0AxLjIuMQ==",
    "content": "/lib/index.js\u0013D// Generated by LiveScript 1.6.0\nvar Func, List, Obj, Str, Num, id, isType, replicate, prelude, toString$ = {}.toString;\nFunc = require('./Func.js');\nList = require('./List.js');\nObj = require('./Obj.js');\nStr = require('./Str.js');\nNum = require('./Num.js');\nid = function(x){\n  return x;\n};\nisType = curry$(function(type, x){\n  return toString$.call(x).slice(8, -1) === type;\n});\nreplicate = curry$(function(n, x){\n  var i$, results$ = [];\n  for (i$ = 0; i$ < n; ++i$) {\n    results$.push(x);\n  }\n  return results$;\n});\nStr.empty = List.empty;\nStr.slice = List.slice;\nStr.take = List.take;\nStr.drop = List.drop;\nStr.splitAt = List.splitAt;\nStr.takeWhile = List.takeWhile;\nStr.dropWhile = List.dropWhile;\nStr.span = List.span;\nStr.breakStr = List.breakList;\nprelude = {\n  Func: Func,\n  List: List,\n  Obj: Obj,\n  Str: Str,\n  Num: Num,\n  id: id,\n  isType: isType,\n  replicate: replicate\n};\nprelude.each = List.each;\nprelude.map = List.map;\nprelude.filter = List.filter;\nprelude.compact = List.compact;\nprelude.reject = List.reject;\nprelude.partition = List.partition;\nprelude.find = List.find;\nprelude.head = List.head;\nprelude.first = List.first;\nprelude.tail = List.tail;\nprelude.last = List.last;\nprelude.initial = List.initial;\nprelude.empty = List.empty;\nprelude.reverse = List.reverse;\nprelude.difference = List.difference;\nprelude.intersection = List.intersection;\nprelude.union = List.union;\nprelude.countBy = List.countBy;\nprelude.groupBy = List.groupBy;\nprelude.fold = List.fold;\nprelude.foldl = List.foldl;\nprelude.fold1 = List.fold1;\nprelude.foldl1 = List.foldl1;\nprelude.foldr = List.foldr;\nprelude.foldr1 = List.foldr1;\nprelude.unfoldr = List.unfoldr;\nprelude.andList = List.andList;\nprelude.orList = List.orList;\nprelude.any = List.any;\nprelude.all = List.all;\nprelude.unique = List.unique;\nprelude.uniqueBy = List.uniqueBy;\nprelude.sort = List.sort;\nprelude.sortWith = List.sortWith;\nprelude.sortBy = List.sortBy;\nprelude.sum = List.sum;\nprelude.product = List.product;\nprelude.mean = List.mean;\nprelude.average = List.average;\nprelude.concat = List.concat;\nprelude.concatMap = List.concatMap;\nprelude.flatten = List.flatten;\nprelude.maximum = List.maximum;\nprelude.minimum = List.minimum;\nprelude.maximumBy = List.maximumBy;\nprelude.minimumBy = List.minimumBy;\nprelude.scan = List.scan;\nprelude.scanl = List.scanl;\nprelude.scan1 = List.scan1;\nprelude.scanl1 = List.scanl1;\nprelude.scanr = List.scanr;\nprelude.scanr1 = List.scanr1;\nprelude.slice = List.slice;\nprelude.take = List.take;\nprelude.drop = List.drop;\nprelude.splitAt = List.splitAt;\nprelude.takeWhile = List.takeWhile;\nprelude.dropWhile = List.dropWhile;\nprelude.span = List.span;\nprelude.breakList = List.breakList;\nprelude.zip = List.zip;\nprelude.zipWith = List.zipWith;\nprelude.zipAll = List.zipAll;\nprelude.zipAllWith = List.zipAllWith;\nprelude.at = List.at;\nprelude.elemIndex = List.elemIndex;\nprelude.elemIndices = List.elemIndices;\nprelude.findIndex = List.findIndex;\nprelude.findIndices = List.findIndices;\nprelude.apply = Func.apply;\nprelude.curry = Func.curry;\nprelude.flip = Func.flip;\nprelude.fix = Func.fix;\nprelude.over = Func.over;\nprelude.split = Str.split;\nprelude.join = Str.join;\nprelude.lines = Str.lines;\nprelude.unlines = Str.unlines;\nprelude.words = Str.words;\nprelude.unwords = Str.unwords;\nprelude.chars = Str.chars;\nprelude.unchars = Str.unchars;\nprelude.repeat = Str.repeat;\nprelude.capitalize = Str.capitalize;\nprelude.camelize = Str.camelize;\nprelude.dasherize = Str.dasherize;\nprelude.values = Obj.values;\nprelude.keys = Obj.keys;\nprelude.pairsToObj = Obj.pairsToObj;\nprelude.objToPairs = Obj.objToPairs;\nprelude.listsToObj = Obj.listsToObj;\nprelude.objToLists = Obj.objToLists;\nprelude.max = Num.max;\nprelude.min = Num.min;\nprelude.negate = Num.negate;\nprelude.abs = Num.abs;\nprelude.signum = Num.signum;\nprelude.quot = Num.quot;\nprelude.rem = Num.rem;\nprelude.div = Num.div;\nprelude.mod = Num.mod;\nprelude.recip = Num.recip;\nprelude.pi = Num.pi;\nprelude.tau = Num.tau;\nprelude.exp = Num.exp;\nprelude.sqrt = Num.sqrt;\nprelude.ln = Num.ln;\nprelude.pow = Num.pow;\nprelude.sin = Num.sin;\nprelude.tan = Num.tan;\nprelude.cos = Num.cos;\nprelude.acos = Num.acos;\nprelude.asin = Num.asin;\nprelude.atan = Num.atan;\nprelude.atan2 = Num.atan2;\nprelude.truncate = Num.truncate;\nprelude.round = Num.round;\nprelude.ceiling = Num.ceiling;\nprelude.floor = Num.floor;\nprelude.isItNaN = Num.isItNaN;\nprelude.even = Num.even;\nprelude.odd = Num.odd;\nprelude.gcd = Num.gcd;\nprelude.lcm = Num.lcm;\nprelude.VERSION = '1.2.1';\nmodule.exports = prelude;\nfunction curry$(f, bound){\n  var context,\n  _curry = function(args) {\n    return f.length > 1 ? function(){\n      var params = args ? args.concat() : [];\n      context = bound ? context || this : this;\n      return params.push.apply(params, arguments) <\n          f.length && arguments.length ?\n        _curry.call(context, params) : f.apply(context, params);\n    } : f;\n  };\n  return _curry();\n}/LICENSE\u0004\u001eCopyright (c) George Zahariev\n\nPermission is hereby granted, free of charge, to any person\nobtaining a copy of this software and associated documentation\nfiles (the \"Software\"), to deal in the Software without\nrestriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the\nSoftware is furnished to do so, subject to the following\nconditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\nOF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\nHOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\nWHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\nFROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\nOTHER DEALINGS IN THE SOFTWARE.\n/README.md\u0002e# prelude.ls [![Build Status](https://travis-ci.org/gkz/prelude-ls.png?branch=master)](https://travis-ci.org/gkz/prelude-ls)\n\nis a functionally oriented utility library. It is powerful and flexible. Almost all of its functions are curried. It is written in, and is the recommended base library for, <a href=\"http://livescript.net\">LiveScript</a>.\n\nSee **[the prelude.ls site](http://preludels.com)** for examples, a reference, and more.\n\nYou can install via npm `npm install prelude-ls`\n\n### Development\n\n`make test` to test\n\n`make build` to build `lib` from `src`\n\n`make build-browser` to build browser versions\n/lib/Str.js\b8// Generated by LiveScript 1.6.0\nvar split, join, lines, unlines, words, unwords, chars, unchars, reverse, repeat, capitalize, camelize, dasherize;\nsplit = curry$(function(sep, str){\n  return str.split(sep);\n});\njoin = curry$(function(sep, xs){\n  return xs.join(sep);\n});\nlines = function(str){\n  if (!str.length) {\n    return [];\n  }\n  return str.split('\\n');\n};\nunlines = function(it){\n  return it.join('\\n');\n};\nwords = function(str){\n  if (!str.length) {\n    return [];\n  }\n  return str.split(/[ ]+/);\n};\nunwords = function(it){\n  return it.join(' ');\n};\nchars = function(it){\n  return it.split('');\n};\nunchars = function(it){\n  return it.join('');\n};\nreverse = function(str){\n  return str.split('').reverse().join('');\n};\nrepeat = curry$(function(n, str){\n  var result, i$;\n  result = '';\n  for (i$ = 0; i$ < n; ++i$) {\n    result += str;\n  }\n  return result;\n});\ncapitalize = function(str){\n  return str.charAt(0).toUpperCase() + str.slice(1);\n};\ncamelize = function(it){\n  return it.replace(/[-_]+(.)?/g, function(arg$, c){\n    return (c != null ? c : '').toUpperCase();\n  });\n};\ndasherize = function(str){\n  return str.replace(/([^-A-Z])([A-Z]+)/g, function(arg$, lower, upper){\n    return lower + \"-\" + (upper.length > 1\n      ? upper\n      : upper.toLowerCase());\n  }).replace(/^([A-Z]+)/, function(arg$, upper){\n    if (upper.length > 1) {\n      return upper + \"-\";\n    } else {\n      return upper.toLowerCase();\n    }\n  });\n};\nmodule.exports = {\n  split: split,\n  join: join,\n  lines: lines,\n  unlines: unlines,\n  words: words,\n  unwords: unwords,\n  chars: chars,\n  unchars: unchars,\n  reverse: reverse,\n  repeat: repeat,\n  capitalize: capitalize,\n  camelize: camelize,\n  dasherize: dasherize\n};\nfunction curry$(f, bound){\n  var context,\n  _curry = function(args) {\n    return f.length > 1 ? function(){\n      var params = args ? args.concat() : [];\n      context = bound ? context || this : this;\n      return params.push.apply(params, arguments) <\n          f.length && arguments.length ?\n        _curry.call(context, params) : f.apply(context, params);\n    } : f;\n  };\n  return _curry();\n}/lib/Obj.js\f// Generated by LiveScript 1.6.0\nvar values, keys, pairsToObj, objToPairs, listsToObj, objToLists, empty, each, map, compact, filter, reject, partition, find;\nvalues = function(object){\n  var i$, x, results$ = [];\n  for (i$ in object) {\n    x = object[i$];\n    results$.push(x);\n  }\n  return results$;\n};\nkeys = function(object){\n  var x, results$ = [];\n  for (x in object) {\n    results$.push(x);\n  }\n  return results$;\n};\npairsToObj = function(object){\n  var i$, len$, x, resultObj$ = {};\n  for (i$ = 0, len$ = object.length; i$ < len$; ++i$) {\n    x = object[i$];\n    resultObj$[x[0]] = x[1];\n  }\n  return resultObj$;\n};\nobjToPairs = function(object){\n  var key, value, results$ = [];\n  for (key in object) {\n    value = object[key];\n    results$.push([key, value]);\n  }\n  return results$;\n};\nlistsToObj = curry$(function(keys, values){\n  var i$, len$, i, key, resultObj$ = {};\n  for (i$ = 0, len$ = keys.length; i$ < len$; ++i$) {\n    i = i$;\n    key = keys[i$];\n    resultObj$[key] = values[i];\n  }\n  return resultObj$;\n});\nobjToLists = function(object){\n  var keys, values, key, value;\n  keys = [];\n  values = [];\n  for (key in object) {\n    value = object[key];\n    keys.push(key);\n    values.push(value);\n  }\n  return [keys, values];\n};\nempty = function(object){\n  var x;\n  for (x in object) {\n    return false;\n  }\n  return true;\n};\neach = curry$(function(f, object){\n  var i$, x;\n  for (i$ in object) {\n    x = object[i$];\n    f(x);\n  }\n  return object;\n});\nmap = curry$(function(f, object){\n  var k, x, resultObj$ = {};\n  for (k in object) {\n    x = object[k];\n    resultObj$[k] = f(x);\n  }\n  return resultObj$;\n});\ncompact = function(object){\n  var k, x, resultObj$ = {};\n  for (k in object) {\n    x = object[k];\n    if (x) {\n      resultObj$[k] = x;\n    }\n  }\n  return resultObj$;\n};\nfilter = curry$(function(f, object){\n  var k, x, resultObj$ = {};\n  for (k in object) {\n    x = object[k];\n    if (f(x)) {\n      resultObj$[k] = x;\n    }\n  }\n  return resultObj$;\n});\nreject = curry$(function(f, object){\n  var k, x, resultObj$ = {};\n  for (k in object) {\n    x = object[k];\n    if (!f(x)) {\n      resultObj$[k] = x;\n    }\n  }\n  return resultObj$;\n});\npartition = curry$(function(f, object){\n  var passed, failed, k, x;\n  passed = {};\n  failed = {};\n  for (k in object) {\n    x = object[k];\n    (f(x) ? passed : failed)[k] = x;\n  }\n  return [passed, failed];\n});\nfind = curry$(function(f, object){\n  var i$, x;\n  for (i$ in object) {\n    x = object[i$];\n    if (f(x)) {\n      return x;\n    }\n  }\n});\nmodule.exports = {\n  values: values,\n  keys: keys,\n  pairsToObj: pairsToObj,\n  objToPairs: objToPairs,\n  listsToObj: listsToObj,\n  objToLists: objToLists,\n  empty: empty,\n  each: each,\n  map: map,\n  filter: filter,\n  compact: compact,\n  reject: reject,\n  partition: partition,\n  find: find\n};\nfunction curry$(f, bound){\n  var context,\n  _curry = function(args) {\n    return f.length > 1 ? function(){\n      var params = args ? args.concat() : [];\n      context = bound ? context || this : this;\n      return params.push.apply(params, arguments) <\n          f.length && arguments.length ?\n        _curry.call(context, params) : f.apply(context, params);\n    } : f;\n  };\n  return _curry();\n}/lib/List.js<// Generated by LiveScript 1.6.0\nvar each, map, compact, filter, reject, remove, partition, find, head, first, tail, last, initial, empty, reverse, unique, uniqueBy, fold, foldl, fold1, foldl1, foldr, foldr1, unfoldr, concat, concatMap, flatten, difference, intersection, union, countBy, groupBy, andList, orList, any, all, sort, sortWith, sortBy, sum, product, mean, average, maximum, minimum, maximumBy, minimumBy, scan, scanl, scan1, scanl1, scanr, scanr1, slice, take, drop, splitAt, takeWhile, dropWhile, span, breakList, zip, zipWith, zipAll, zipAllWith, at, elemIndex, elemIndices, findIndex, findIndices, toString$ = {}.toString;\neach = curry$(function(f, xs){\n  var i$, len$, x;\n  for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {\n    x = xs[i$];\n    f(x);\n  }\n  return xs;\n});\nmap = curry$(function(f, xs){\n  var i$, len$, x, results$ = [];\n  for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {\n    x = xs[i$];\n    results$.push(f(x));\n  }\n  return results$;\n});\ncompact = function(xs){\n  var i$, len$, x, results$ = [];\n  for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {\n    x = xs[i$];\n    if (x) {\n      results$.push(x);\n    }\n  }\n  return results$;\n};\nfilter = curry$(function(f, xs){\n  var i$, len$, x, results$ = [];\n  for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {\n    x = xs[i$];\n    if (f(x)) {\n      results$.push(x);\n    }\n  }\n  return results$;\n});\nreject = curry$(function(f, xs){\n  var i$, len$, x, results$ = [];\n  for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {\n    x = xs[i$];\n    if (!f(x)) {\n      results$.push(x);\n    }\n  }\n  return results$;\n});\nremove = curry$(function(el, xs){\n  var i, x$;\n  i = elemIndex(el, xs);\n  x$ = xs.slice();\n  if (i != null) {\n    x$.splice(i, 1);\n  }\n  return x$;\n});\npartition = curry$(function(f, xs){\n  var passed, failed, i$, len$, x;\n  passed = [];\n  failed = [];\n  for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {\n    x = xs[i$];\n    (f(x) ? passed : failed).push(x);\n  }\n  return [passed, failed];\n});\nfind = curry$(function(f, xs){\n  var i$, len$, x;\n  for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {\n    x = xs[i$];\n    if (f(x)) {\n      return x;\n    }\n  }\n});\nhead = first = function(xs){\n  return xs[0];\n};\ntail = function(xs){\n  if (!xs.length) {\n    return;\n  }\n  return xs.slice(1);\n};\nlast = function(xs){\n  return xs[xs.length - 1];\n};\ninitial = function(xs){\n  if (!xs.length) {\n    return;\n  }\n  return xs.slice(0, -1);\n};\nempty = function(xs){\n  return !xs.length;\n};\nreverse = function(xs){\n  return xs.concat().reverse();\n};\nunique = function(xs){\n  var result, i$, len$, x;\n  result = [];\n  for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {\n    x = xs[i$];\n    if (!in$(x, result)) {\n      result.push(x);\n    }\n  }\n  return result;\n};\nuniqueBy = curry$(function(f, xs){\n  var seen, i$, len$, x, val, results$ = [];\n  seen = [];\n  for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {\n    x = xs[i$];\n    val = f(x);\n    if (in$(val, seen)) {\n      continue;\n    }\n    seen.push(val);\n    results$.push(x);\n  }\n  return results$;\n});\nfold = foldl = curry$(function(f, memo, xs){\n  var i$, len$, x;\n  for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {\n    x = xs[i$];\n    memo = f(memo, x);\n  }\n  return memo;\n});\nfold1 = foldl1 = curry$(function(f, xs){\n  return fold(f, xs[0], xs.slice(1));\n});\nfoldr = curry$(function(f, memo, xs){\n  var i$, x;\n  for (i$ = xs.length - 1; i$ >= 0; --i$) {\n    x = xs[i$];\n    memo = f(x, memo);\n  }\n  return memo;\n});\nfoldr1 = curry$(function(f, xs){\n  return foldr(f, xs[xs.length - 1], xs.slice(0, -1));\n});\nunfoldr = curry$(function(f, b){\n  var result, x, that;\n  result = [];\n  x = b;\n  while ((that = f(x)) != null) {\n    result.push(that[0]);\n    x = that[1];\n  }\n  return result;\n});\nconcat = function(xss){\n  return [].concat.apply([], xss);\n};\nconcatMap = curry$(function(f, xs){\n  var x;\n  return [].concat.apply([], (function(){\n    var i$, ref$, len$, results$ = [];\n    for (i$ = 0, len$ = (ref$ = xs).length; i$ < len$; ++i$) {\n      x = ref$[i$];\n      results$.push(f(x));\n    }\n    return results$;\n  }()));\n});\nflatten = function(xs){\n  var x;\n  return [].concat.apply([], (function(){\n    var i$, ref$, len$, results$ = [];\n    for (i$ = 0, len$ = (ref$ = xs).length; i$ < len$; ++i$) {\n      x = ref$[i$];\n      if (toString$.call(x).slice(8, -1) === 'Array') {\n        results$.push(flatten(x));\n      } else {\n        results$.push(x);\n      }\n    }\n    return results$;\n  }()));\n};\ndifference = function(xs){\n  var yss, res$, i$, to$, results, len$, x, j$, len1$, ys;\n  res$ = [];\n  for (i$ = 1, to$ = arguments.length; i$ < to$; ++i$) {\n    res$.push(arguments[i$]);\n  }\n  yss = res$;\n  results = [];\n  outer: for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {\n    x = xs[i$];\n    for (j$ = 0, len1$ = yss.length; j$ < len1$; ++j$) {\n      ys = yss[j$];\n      if (in$(x, ys)) {\n        continue outer;\n      }\n    }\n    results.push(x);\n  }\n  return results;\n};\nintersection = function(xs){\n  var yss, res$, i$, to$, results, len$, x, j$, len1$, ys;\n  res$ = [];\n  for (i$ = 1, to$ = arguments.length; i$ < to$; ++i$) {\n    res$.push(arguments[i$]);\n  }\n  yss = res$;\n  results = [];\n  outer: for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {\n    x = xs[i$];\n    for (j$ = 0, len1$ = yss.length; j$ < len1$; ++j$) {\n      ys = yss[j$];\n      if (!in$(x, ys)) {\n        continue outer;\n      }\n    }\n    results.push(x);\n  }\n  return results;\n};\nunion = function(){\n  var xss, res$, i$, to$, results, len$, xs, j$, len1$, x;\n  res$ = [];\n  for (i$ = 0, to$ = arguments.length; i$ < to$; ++i$) {\n    res$.push(arguments[i$]);\n  }\n  xss = res$;\n  results = [];\n  for (i$ = 0, len$ = xss.length; i$ < len$; ++i$) {\n    xs = xss[i$];\n    for (j$ = 0, len1$ = xs.length; j$ < len1$; ++j$) {\n      x = xs[j$];\n      if (!in$(x, results)) {\n        results.push(x);\n      }\n    }\n  }\n  return results;\n};\ncountBy = curry$(function(f, xs){\n  var results, i$, len$, x, key;\n  results = {};\n  for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {\n    x = xs[i$];\n    key = f(x);\n    if (key in results) {\n      results[key] += 1;\n    } else {\n      results[key] = 1;\n    }\n  }\n  return results;\n});\ngroupBy = curry$(function(f, xs){\n  var results, i$, len$, x, key;\n  results = {};\n  for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {\n    x = xs[i$];\n    key = f(x);\n    if (key in results) {\n      results[key].push(x);\n    } else {\n      results[key] = [x];\n    }\n  }\n  return results;\n});\nandList = function(xs){\n  var i$, len$, x;\n  for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {\n    x = xs[i$];\n    if (!x) {\n      return false;\n    }\n  }\n  return true;\n};\norList = function(xs){\n  var i$, len$, x;\n  for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {\n    x = xs[i$];\n    if (x) {\n      return true;\n    }\n  }\n  return false;\n};\nany = curry$(function(f, xs){\n  var i$, len$, x;\n  for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {\n    x = xs[i$];\n    if (f(x)) {\n      return true;\n    }\n  }\n  return false;\n});\nall = curry$(function(f, xs){\n  var i$, len$, x;\n  for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {\n    x = xs[i$];\n    if (!f(x)) {\n      return false;\n    }\n  }\n  return true;\n});\nsort = function(xs){\n  return xs.concat().sort(function(x, y){\n    if (x > y) {\n      return 1;\n    } else if (x < y) {\n      return -1;\n    } else {\n      return 0;\n    }\n  });\n};\nsortWith = curry$(function(f, xs){\n  return xs.concat().sort(f);\n});\nsortBy = curry$(function(f, xs){\n  return xs.concat().sort(function(x, y){\n    if (f(x) > f(y)) {\n      return 1;\n    } else if (f(x) < f(y)) {\n      return -1;\n    } else {\n      return 0;\n    }\n  });\n});\nsum = function(xs){\n  var result, i$, len$, x;\n  result = 0;\n  for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {\n    x = xs[i$];\n    result += x;\n  }\n  return result;\n};\nproduct = function(xs){\n  var result, i$, len$, x;\n  result = 1;\n  for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {\n    x = xs[i$];\n    result *= x;\n  }\n  return result;\n};\nmean = average = function(xs){\n  var sum, i$, len$, x;\n  sum = 0;\n  for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {\n    x = xs[i$];\n    sum += x;\n  }\n  return sum / xs.length;\n};\nmaximum = function(xs){\n  var max, i$, ref$, len$, x;\n  max = xs[0];\n  for (i$ = 0, len$ = (ref$ = xs.slice(1)).length; i$ < len$; ++i$) {\n    x = ref$[i$];\n    if (x > max) {\n      max = x;\n    }\n  }\n  return max;\n};\nminimum = function(xs){\n  var min, i$, ref$, len$, x;\n  min = xs[0];\n  for (i$ = 0, len$ = (ref$ = xs.slice(1)).length; i$ < len$; ++i$) {\n    x = ref$[i$];\n    if (x < min) {\n      min = x;\n    }\n  }\n  return min;\n};\nmaximumBy = curry$(function(f, xs){\n  var max, i$, ref$, len$, x;\n  max = xs[0];\n  for (i$ = 0, len$ = (ref$ = xs.slice(1)).length; i$ < len$; ++i$) {\n    x = ref$[i$];\n    if (f(x) > f(max)) {\n      max = x;\n    }\n  }\n  return max;\n});\nminimumBy = curry$(function(f, xs){\n  var min, i$, ref$, len$, x;\n  min = xs[0];\n  for (i$ = 0, len$ = (ref$ = xs.slice(1)).length; i$ < len$; ++i$) {\n    x = ref$[i$];\n    if (f(x) < f(min)) {\n      min = x;\n    }\n  }\n  return min;\n});\nscan = scanl = curry$(function(f, memo, xs){\n  var last, x;\n  last = memo;\n  return [memo].concat((function(){\n    var i$, ref$, len$, results$ = [];\n    for (i$ = 0, len$ = (ref$ = xs).length; i$ < len$; ++i$) {\n      x = ref$[i$];\n      results$.push(last = f(last, x));\n    }\n    return results$;\n  }()));\n});\nscan1 = scanl1 = curry$(function(f, xs){\n  if (!xs.length) {\n    return;\n  }\n  return scan(f, xs[0], xs.slice(1));\n});\nscanr = curry$(function(f, memo, xs){\n  xs = xs.concat().reverse();\n  return scan(f, memo, xs).reverse();\n});\nscanr1 = curry$(function(f, xs){\n  if (!xs.length) {\n    return;\n  }\n  xs = xs.concat().reverse();\n  return scan(f, xs[0], xs.slice(1)).reverse();\n});\nslice = curry$(function(x, y, xs){\n  return xs.slice(x, y);\n});\ntake = curry$(function(n, xs){\n  if (n <= 0) {\n    return xs.slice(0, 0);\n  } else {\n    return xs.slice(0, n);\n  }\n});\ndrop = curry$(function(n, xs){\n  if (n <= 0) {\n    return xs;\n  } else {\n    return xs.slice(n);\n  }\n});\nsplitAt = curry$(function(n, xs){\n  return [take(n, xs), drop(n, xs)];\n});\ntakeWhile = curry$(function(p, xs){\n  var len, i;\n  len = xs.length;\n  if (!len) {\n    return xs;\n  }\n  i = 0;\n  while (i < len && p(xs[i])) {\n    i += 1;\n  }\n  return xs.slice(0, i);\n});\ndropWhile = curry$(function(p, xs){\n  var len, i;\n  len = xs.length;\n  if (!len) {\n    return xs;\n  }\n  i = 0;\n  while (i < len && p(xs[i])) {\n    i += 1;\n  }\n  return xs.slice(i);\n});\nspan = curry$(function(p, xs){\n  return [takeWhile(p, xs), dropWhile(p, xs)];\n});\nbreakList = curry$(function(p, xs){\n  return span(compose$(p, not$), xs);\n});\nzip = curry$(function(xs, ys){\n  var result, len, i$, len$, i, x;\n  result = [];\n  len = ys.length;\n  for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {\n    i = i$;\n    x = xs[i$];\n    if (i === len) {\n      break;\n    }\n    result.push([x, ys[i]]);\n  }\n  return result;\n});\nzipWith = curry$(function(f, xs, ys){\n  var result, len, i$, len$, i, x;\n  result = [];\n  len = ys.length;\n  for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {\n    i = i$;\n    x = xs[i$];\n    if (i === len) {\n      break;\n    }\n    result.push(f(x, ys[i]));\n  }\n  return result;\n});\nzipAll = function(){\n  var xss, res$, i$, to$, minLength, len$, xs, ref$, i, lresult$, j$, results$ = [];\n  res$ = [];\n  for (i$ = 0, to$ = arguments.length; i$ < to$; ++i$) {\n    res$.push(arguments[i$]);\n  }\n  xss = res$;\n  minLength = undefined;\n  for (i$ = 0, len$ = xss.length; i$ < len$; ++i$) {\n    xs = xss[i$];\n    minLength <= (ref$ = xs.length) || (minLength = ref$);\n  }\n  for (i$ = 0; i$ < minLength; ++i$) {\n    i = i$;\n    lresult$ = [];\n    for (j$ = 0, len$ = xss.length; j$ < len$; ++j$) {\n      xs = xss[j$];\n      lresult$.push(xs[i]);\n    }\n    results$.push(lresult$);\n  }\n  return results$;\n};\nzipAllWith = function(f){\n  var xss, res$, i$, to$, minLength, len$, xs, ref$, i, results$ = [];\n  res$ = [];\n  for (i$ = 1, to$ = arguments.length; i$ < to$; ++i$) {\n    res$.push(arguments[i$]);\n  }\n  xss = res$;\n  minLength = undefined;\n  for (i$ = 0, len$ = xss.length; i$ < len$; ++i$) {\n    xs = xss[i$];\n    minLength <= (ref$ = xs.length) || (minLength = ref$);\n  }\n  for (i$ = 0; i$ < minLength; ++i$) {\n    i = i$;\n    results$.push(f.apply(null, (fn$())));\n  }\n  return results$;\n  function fn$(){\n    var i$, ref$, len$, results$ = [];\n    for (i$ = 0, len$ = (ref$ = xss).length; i$ < len$; ++i$) {\n      xs = ref$[i$];\n      results$.push(xs[i]);\n    }\n    return results$;\n  }\n};\nat = curry$(function(n, xs){\n  if (n < 0) {\n    return xs[xs.length + n];\n  } else {\n    return xs[n];\n  }\n});\nelemIndex = curry$(function(el, xs){\n  var i$, len$, i, x;\n  for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {\n    i = i$;\n    x = xs[i$];\n    if (x === el) {\n      return i;\n    }\n  }\n});\nelemIndices = curry$(function(el, xs){\n  var i$, len$, i, x, results$ = [];\n  for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {\n    i = i$;\n    x = xs[i$];\n    if (x === el) {\n      results$.push(i);\n    }\n  }\n  return results$;\n});\nfindIndex = curry$(function(f, xs){\n  var i$, len$, i, x;\n  for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {\n    i = i$;\n    x = xs[i$];\n    if (f(x)) {\n      return i;\n    }\n  }\n});\nfindIndices = curry$(function(f, xs){\n  var i$, len$, i, x, results$ = [];\n  for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {\n    i = i$;\n    x = xs[i$];\n    if (f(x)) {\n      results$.push(i);\n    }\n  }\n  return results$;\n});\nmodule.exports = {\n  each: each,\n  map: map,\n  filter: filter,\n  compact: compact,\n  reject: reject,\n  remove: remove,\n  partition: partition,\n  find: find,\n  head: head,\n  first: first,\n  tail: tail,\n  last: last,\n  initial: initial,\n  empty: empty,\n  reverse: reverse,\n  difference: difference,\n  intersection: intersection,\n  union: union,\n  countBy: countBy,\n  groupBy: groupBy,\n  fold: fold,\n  fold1: fold1,\n  foldl: foldl,\n  foldl1: foldl1,\n  foldr: foldr,\n  foldr1: foldr1,\n  unfoldr: unfoldr,\n  andList: andList,\n  orList: orList,\n  any: any,\n  all: all,\n  unique: unique,\n  uniqueBy: uniqueBy,\n  sort: sort,\n  sortWith: sortWith,\n  sortBy: sortBy,\n  sum: sum,\n  product: product,\n  mean: mean,\n  average: average,\n  concat: concat,\n  concatMap: concatMap,\n  flatten: flatten,\n  maximum: maximum,\n  minimum: minimum,\n  maximumBy: maximumBy,\n  minimumBy: minimumBy,\n  scan: scan,\n  scan1: scan1,\n  scanl: scanl,\n  scanl1: scanl1,\n  scanr: scanr,\n  scanr1: scanr1,\n  slice: slice,\n  take: take,\n  drop: drop,\n  splitAt: splitAt,\n  takeWhile: takeWhile,\n  dropWhile: dropWhile,\n  span: span,\n  breakList: breakList,\n  zip: zip,\n  zipWith: zipWith,\n  zipAll: zipAll,\n  zipAllWith: zipAllWith,\n  at: at,\n  elemIndex: elemIndex,\n  elemIndices: elemIndices,\n  findIndex: findIndex,\n  findIndices: findIndices\n};\nfunction curry$(f, bound){\n  var context,\n  _curry = function(args) {\n    return f.length > 1 ? function(){\n      var params = args ? args.concat() : [];\n      context = bound ? context || this : this;\n      return params.push.apply(params, arguments) <\n          f.length && arguments.length ?\n        _curry.call(context, params) : f.apply(context, params);\n    } : f;\n  };\n  return _curry();\n}\nfunction in$(x, xs){\n  var i = -1, l = xs.length >>> 0;\n  while (++i < l) if (x === xs[i]) return true;\n  return false;\n}\nfunction compose$() {\n  var functions = arguments;\n  return function() {\n    var i, result;\n    result = functions[0].apply(this, arguments);\n    for (i = 1; i < functions.length; ++i) {\n      result = functions[i](result);\n    }\n    return result;\n  };\n}\nfunction not$(x){ return !x; }/package.json\u0004\u0017{\n  \"name\": \"prelude-ls\",\n  \"version\": \"1.2.1\",\n  \"author\": \"George Zahariev <z@georgezahariev.com>\",\n  \"description\": \"prelude.ls is a functionally oriented utility library. It is powerful and flexible. Almost all of its functions are curried. It is written in, and is the recommended base library for, LiveScript.\",\n  \"keywords\": [\n    \"prelude\",\n    \"livescript\",\n    \"utility\",\n    \"ls\",\n    \"coffeescript\",\n    \"javascript\",\n    \"library\",\n    \"functional\",\n    \"array\",\n    \"list\",\n    \"object\",\n    \"string\"\n  ],\n  \"main\": \"lib/\",\n  \"files\": [\n    \"lib/\",\n    \"README.md\",\n    \"LICENSE\"\n  ],\n  \"homepage\": \"http://preludels.com\",\n  \"bugs\": \"https://github.com/gkz/prelude-ls/issues\",\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"node\": \">= 0.8.0\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git://github.com/gkz/prelude-ls.git\"\n  },\n  \"scripts\": {\n    \"test\": \"make test\"\n  },\n  \"devDependencies\": {\n    \"livescript\": \"^1.6.0\",\n    \"uglify-js\": \"^3.8.1\",\n    \"mocha\": \"^7.1.1\",\n    \"browserify\": \"^16.5.1\",\n    \"sinon\": \"~8.0.1\"\n  }\n}\n/lib/Num.js\t// Generated by LiveScript 1.6.0\nvar max, min, negate, abs, signum, quot, rem, div, mod, recip, pi, tau, exp, sqrt, ln, pow, sin, tan, cos, asin, acos, atan, atan2, truncate, round, ceiling, floor, isItNaN, even, odd, gcd, lcm;\nmax = curry$(function(x$, y$){\n  return x$ > y$ ? x$ : y$;\n});\nmin = curry$(function(x$, y$){\n  return x$ < y$ ? x$ : y$;\n});\nnegate = function(x){\n  return -x;\n};\nabs = Math.abs;\nsignum = function(x){\n  if (x < 0) {\n    return -1;\n  } else if (x > 0) {\n    return 1;\n  } else {\n    return 0;\n  }\n};\nquot = curry$(function(x, y){\n  return ~~(x / y);\n});\nrem = curry$(function(x$, y$){\n  return x$ % y$;\n});\ndiv = curry$(function(x, y){\n  return Math.floor(x / y);\n});\nmod = curry$(function(x$, y$){\n  var ref$;\n  return ((x$) % (ref$ = y$) + ref$) % ref$;\n});\nrecip = (function(it){\n  return 1 / it;\n});\npi = Math.PI;\ntau = pi * 2;\nexp = Math.exp;\nsqrt = Math.sqrt;\nln = Math.log;\npow = curry$(function(x$, y$){\n  return Math.pow(x$, y$);\n});\nsin = Math.sin;\ntan = Math.tan;\ncos = Math.cos;\nasin = Math.asin;\nacos = Math.acos;\natan = Math.atan;\natan2 = curry$(function(x, y){\n  return Math.atan2(x, y);\n});\ntruncate = function(x){\n  return ~~x;\n};\nround = Math.round;\nceiling = Math.ceil;\nfloor = Math.floor;\nisItNaN = function(x){\n  return x !== x;\n};\neven = function(x){\n  return x % 2 === 0;\n};\nodd = function(x){\n  return x % 2 !== 0;\n};\ngcd = curry$(function(x, y){\n  var z;\n  x = Math.abs(x);\n  y = Math.abs(y);\n  while (y !== 0) {\n    z = x % y;\n    x = y;\n    y = z;\n  }\n  return x;\n});\nlcm = curry$(function(x, y){\n  return Math.abs(Math.floor(x / gcd(x, y) * y));\n});\nmodule.exports = {\n  max: max,\n  min: min,\n  negate: negate,\n  abs: abs,\n  signum: signum,\n  quot: quot,\n  rem: rem,\n  div: div,\n  mod: mod,\n  recip: recip,\n  pi: pi,\n  tau: tau,\n  exp: exp,\n  sqrt: sqrt,\n  ln: ln,\n  pow: pow,\n  sin: sin,\n  tan: tan,\n  cos: cos,\n  acos: acos,\n  asin: asin,\n  atan: atan,\n  atan2: atan2,\n  truncate: truncate,\n  round: round,\n  ceiling: ceiling,\n  floor: floor,\n  isItNaN: isItNaN,\n  even: even,\n  odd: odd,\n  gcd: gcd,\n  lcm: lcm\n};\nfunction curry$(f, bound){\n  var context,\n  _curry = function(args) {\n    return f.length > 1 ? function(){\n      var params = args ? args.concat() : [];\n      context = bound ? context || this : this;\n      return params.push.apply(params, arguments) <\n          f.length && arguments.length ?\n        _curry.call(context, params) : f.apply(context, params);\n    } : f;\n  };\n  return _curry();\n}/CHANGELOG.md\u0010\u001b# 1.2.1\n- fix version\n\n# 1.2.0\n- add `List.remove`\n- build with LiveScript 1.6.0\n- update dependencies\n- remove coverage calculation\n\n# 1.1.2\n- add `Func.memoize`\n- fix `zip-all` and `zip-with-all` corner case (no input)\n- build with LiveScript 1.4.0\n\n# 1.1.1\n- curry `unique-by`, `minimum-by`\n\n# 1.1.0\n- added `List` functions: `maximum-by`, `minimum-by`, `unique-by`\n- added `List` functions: `at`, `elem-index`, `elem-indices`, `find-index`, `find-indices`\n- added `Str` functions: `capitalize`, `camelize`, `dasherize`\n- added `Func` function: `over` - eg. ``same-length = (==) `over` (.length)``\n- exported `Str.repeat` through main `prelude` object\n- fixed definition of `foldr` and `foldr1`, the new correct definition is backwards incompatible with the old, incorrect one\n- fixed issue with `fix`\n- improved code coverage\n\n# 1.0.3\n- build browser versions\n\n# 1.0.2\n- bug fix for `flatten` - slight change with bug fix, flattens arrays only, not array-like objects\n\n# 1.0.1\n- bug fixes for `drop-while` and `take-while`\n\n# 1.0.0\n* massive update - separated functions into separate modules\n* functions do not accept multiple types anymore - use different versions in their respective modules in some cases (eg. `Obj.map`), or use `chars` or `values` in other cases to transform into a list\n* objects are no longer transformed into functions, simply use `(obj.)` in LiveScript to do that\n* browser version now using browserify - use `prelude = require('prelude-ls')`\n* added `compact`, `split`, `flatten`, `difference`, `intersection`, `union`, `count-by`, `group-by`, `chars`, `unchars`, `apply`\n* added `lists-to-obj` which takes a list of keys and list of values and zips them up into an object, and the converse `obj-to-lists`\n* added `pairs-to-obj` which takes a list of pairs (2 element lists) and creates an object, and the converse `obj-to-pairs`\n* removed `cons`, `append` - use the concat operator\n* removed `compose` - use the compose operator\n* removed `obj-to-func` - use partially applied access (eg. `(obj.)`)\n* removed `length` - use `(.length)`\n* `sort-by` renamed to `sort-with`\n* added new `sort-by`\n* removed `compare` - just use the new `sort-by`\n* `break-it` renamed `break-list`, (`Str.break-str` for the string version)\n* added `Str.repeat` which creates a new string by repeating the input n times\n* `unfold` as alias to `unfoldr` is no longer used\n* fixed up style and compiled with LiveScript 1.1.1\n* use Make instead of Slake\n* greatly improved tests\n\n# 0.6.0\n* fixed various bugs\n* added `fix`, a fixpoint (Y combinator) for anonymous recursive functions\n* added `unfoldr` (alias `unfold`)\n* calling `replicate` with a string now returns a list of strings\n* removed `partial`, just use native partial application in LiveScript using the `_` placeholder, or currying\n* added `sort`, `sortBy`, and `compare`\n\n# 0.5.0\n* removed `lookup` - use (.prop)\n* removed `call` - use (.func arg1, arg2)\n* removed `pluck` - use map (.prop), xs\n* fixed buys wtih `head` and `last`\n* added non-minifed browser version, as `prelude-browser.js`\n* renamed `prelude-min.js` to `prelude-browser-min.js`\n* renamed `zip` to `zipAll`\n* renamed `zipWith` to `zipAllWith`\n* added `zip`, a curried zip that takes only two arguments\n* added `zipWith`, a curried zipWith that takes only two arguments\n\n# 0.4.0\n* added `parition` function\n* added `curry` function\n* removed `elem` function (use `in`)\n* removed `notElem` function (use `not in`)\n\n# 0.3.0\n* added `listToObject`\n* added `unique`\n* added `objToFunc`\n* added support for using strings in map and the like\n* added support for using objects in map and the like\n* added ability to use objects instead of functions in certain cases\n* removed `error` (just use throw)\n* added `tau` constant\n* added `join`\n* added `values`\n* added `keys`\n* added `partial`\n* renamed `log` to `ln`\n* added alias to `head`: `first`\n* added `installPrelude` helper\n\n# 0.2.0\n* removed functions that simply warp operators as you can now use operators as functions in LiveScript\n* `min/max` are now curried and take only 2 arguments\n* added `call`\n\n# 0.1.0\n* initial public release\n/lib/Func.js\u0006v// Generated by LiveScript 1.6.0\nvar apply, curry, flip, fix, over, memoize, toString$ = {}.toString;\napply = curry$(function(f, list){\n  return f.apply(null, list);\n});\ncurry = function(f){\n  return curry$(f);\n};\nflip = curry$(function(f, x, y){\n  return f(y, x);\n});\nfix = function(f){\n  return function(g){\n    return function(){\n      return f(g(g)).apply(null, arguments);\n    };\n  }(function(g){\n    return function(){\n      return f(g(g)).apply(null, arguments);\n    };\n  });\n};\nover = curry$(function(f, g, x, y){\n  return f(g(x), g(y));\n});\nmemoize = function(f){\n  var memo;\n  memo = {};\n  return function(){\n    var args, res$, i$, to$, key, arg;\n    res$ = [];\n    for (i$ = 0, to$ = arguments.length; i$ < to$; ++i$) {\n      res$.push(arguments[i$]);\n    }\n    args = res$;\n    key = (function(){\n      var i$, ref$, len$, results$ = [];\n      for (i$ = 0, len$ = (ref$ = args).length; i$ < len$; ++i$) {\n        arg = ref$[i$];\n        results$.push(arg + toString$.call(arg).slice(8, -1));\n      }\n      return results$;\n    }()).join('');\n    return memo[key] = key in memo\n      ? memo[key]\n      : f.apply(null, args);\n  };\n};\nmodule.exports = {\n  curry: curry,\n  flip: flip,\n  fix: fix,\n  apply: apply,\n  over: over,\n  memoize: memoize\n};\nfunction curry$(f, bound){\n  var context,\n  _curry = function(args) {\n    return f.length > 1 ? function(){\n      var params = args ? args.concat() : [];\n      context = bound ? context || this : this;\n      return params.push.apply(params, arguments) <\n          f.length && arguments.length ?\n        _curry.call(context, params) : f.apply(context, params);\n    } : f;\n  };\n  return _curry();\n}"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/cHJpc21qc0AxLjI5LjA=",
    "content": "\u0002/components/prism-iecst.min.js\u0005(Prism.languages.iecst={comment:[{pattern:/(^|[^\\\\])(?:\\/\\*[\\s\\S]*?(?:\\*\\/|$)|\\(\\*[\\s\\S]*?(?:\\*\\)|$)|\\{[\\s\\S]*?(?:\\}|$))/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\\\:])\\/\\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1/,greedy:!0},keyword:[/\\b(?:END_)?(?:PROGRAM|CONFIGURATION|INTERFACE|FUNCTION_BLOCK|FUNCTION|ACTION|TRANSITION|TYPE|STRUCT|(?:INITIAL_)?STEP|NAMESPACE|LIBRARY|CHANNEL|FOLDER|RESOURCE|VAR_(?:ACCESS|CONFIG|EXTERNAL|GLOBAL|INPUT|IN_OUT|OUTPUT|TEMP)|VAR|METHOD|PROPERTY)\\b/i,/\\b(?:AT|BY|(?:END_)?(?:CASE|FOR|IF|REPEAT|WHILE)|CONSTANT|CONTINUE|DO|ELSE|ELSIF|EXIT|EXTENDS|FROM|GET|GOTO|IMPLEMENTS|JMP|NON_RETAIN|OF|PRIVATE|PROTECTED|PUBLIC|RETAIN|RETURN|SET|TASK|THEN|TO|UNTIL|USING|WITH|__CATCH|__ENDTRY|__FINALLY|__TRY)\\b/],\"class-name\":/\\b(?:ANY|ARRAY|BOOL|BYTE|U?(?:D|L|S)?INT|(?:D|L)?WORD|DATE(?:_AND_TIME)?|DT|L?REAL|POINTER|STRING|TIME(?:_OF_DAY)?|TOD)\\b/,address:{pattern:/%[IQM][XBWDL][\\d.]*|%[IQ][\\d.]*/,alias:\"symbol\"},number:/\\b(?:16#[\\da-f]+|2#[01_]+|0x[\\da-f]+)\\b|\\b(?:D|DT|T|TOD)#[\\d_shmd:]*|\\b[A-Z]*#[\\d.,_]*|(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:e[+-]?\\d+)?/i,boolean:/\\b(?:FALSE|NULL|TRUE)\\b/,operator:/S?R?:?=>?|&&?|\\*\\*?|<[=>]?|>=?|[-:^/+#]|\\b(?:AND|EQ|EXPT|GE|GT|LE|LT|MOD|NE|NOT|OR|XOR)\\b/,function:/\\b[a-z_]\\w*(?=\\s*\\()/i,punctuation:/[()[\\].,;]/};/components/prism-parigp.js\u0004Prism.languages.parigp = {\n\t'comment': /\\/\\*[\\s\\S]*?\\*\\/|\\\\\\\\.*/,\n\t'string': {\n\t\tpattern: /\"(?:[^\"\\\\\\r\\n]|\\\\.)*\"/,\n\t\tgreedy: true\n\t},\n\t// PARI/GP does not care about white spaces at all\n\t// so let's process the keywords to build an appropriate regexp\n\t// (e.g. \"b *r *e *a *k\", etc.)\n\t'keyword': (function () {\n\t\tvar keywords = [\n\t\t\t'breakpoint', 'break', 'dbg_down', 'dbg_err', 'dbg_up', 'dbg_x',\n\t\t\t'forcomposite', 'fordiv', 'forell', 'forpart', 'forprime',\n\t\t\t'forstep', 'forsubgroup', 'forvec', 'for', 'iferr', 'if',\n\t\t\t'local', 'my', 'next', 'return', 'until', 'while'\n\t\t];\n\t\tkeywords = keywords.map(function (keyword) {\n\t\t\treturn keyword.split('').join(' *');\n\t\t}).join('|');\n\t\treturn RegExp('\\\\b(?:' + keywords + ')\\\\b');\n\t}()),\n\t'function': /\\b\\w(?:[\\w ]*\\w)?(?= *\\()/,\n\t'number': {\n\t\t// The lookbehind and the negative lookahead prevent from breaking the .. operator\n\t\tpattern: /((?:\\. *\\. *)?)(?:\\b\\d(?: *\\d)*(?: *(?!\\. *\\.)\\.(?: *\\d)*)?|\\. *\\d(?: *\\d)*)(?: *e *(?:[+-] *)?\\d(?: *\\d)*)?/i,\n\t\tlookbehind: true\n\t},\n\t'operator': /\\. *\\.|[*\\/!](?: *=)?|%(?: *=|(?: *#)?(?: *')*)?|\\+(?: *[+=])?|-(?: *[-=>])?|<(?: *>|(?: *<)?(?: *=)?)?|>(?: *>)?(?: *=)?|=(?: *=){0,2}|\\\\(?: *\\/)?(?: *=)?|&(?: *&)?|\\| *\\||['#~^]/,\n\t'punctuation': /[\\[\\]{}().,:;|]/\n};\n/components/prism-hoon.min.js\u0001Prism.languages.hoon={comment:{pattern:/::.*/,greedy:!0},string:{pattern:/\"(?:[^\"\\\\]|\\\\.)*\"|'(?:[^'\\\\]|\\\\.)*'/,greedy:!0},constant:/%(?:\\.[ny]|[\\w-]+)/,\"class-name\":/@(?:[a-z0-9-]*[a-z0-9])?|\\*/i,function:/(?:\\+[-+] {2})?(?:[a-z](?:[a-z0-9-]*[a-z0-9])?)/,keyword:/\\.[\\^\\+\\*=\\?]|![><:\\.=\\?!]|=[>|:,\\.\\-\\^<+;/~\\*\\?]|\\?[>|:\\.\\-\\^<\\+&~=@!]|\\|[\\$_%:\\.\\-\\^~\\*=@\\?]|\\+[|\\$\\+\\*]|:[_\\-\\^\\+~\\*]|%[_:\\.\\-\\^\\+~\\*=]|\\^[|:\\.\\-\\+&~\\*=\\?]|\\$[|_%:<>\\-\\^&~@=\\?]|;[:<\\+;\\/~\\*=]|~[>|\\$_%<\\+\\/&=\\?!]|--|==/};/components/prism-gml.min.js\u001fPrism.languages.gamemakerlanguage=Prism.languages.gml=Prism.languages.extend(\"clike\",{keyword:/\\b(?:break|case|continue|default|do|else|enum|exit|for|globalvar|if|repeat|return|switch|until|var|while)\\b/,number:/(?:\\b0x[\\da-f]+|(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:e[+-]?\\d+)?)[ulf]{0,4}/i,operator:/--|\\+\\+|[-+%/=]=?|!=|\\*\\*?=?|<[<=>]?|>[=>]?|&&?|\\^\\^?|\\|\\|?|~|\\b(?:and|at|not|or|with|xor)\\b/,constant:/\\b(?:GM_build_date|GM_version|action_(?:continue|restart|reverse|stop)|all|gamespeed_(?:fps|microseconds)|global|local|noone|other|pi|pointer_(?:invalid|null)|self|timezone_(?:local|utc)|undefined|ev_(?:create|destroy|step|alarm|keyboard|mouse|collision|other|draw|draw_(?:begin|end|post|pre)|keypress|keyrelease|trigger|(?:left|middle|no|right)_button|(?:left|middle|right)_press|(?:left|middle|right)_release|mouse_(?:enter|leave|wheel_down|wheel_up)|global_(?:left|middle|right)_button|global_(?:left|middle|right)_press|global_(?:left|middle|right)_release|joystick(?:1|2)_(?:button1|button2|button3|button4|button5|button6|button7|button8|down|left|right|up)|outside|boundary|game_start|game_end|room_start|room_end|no_more_lives|animation_end|end_of_path|no_more_health|user\\d|gui|gui_begin|gui_end|step_(?:begin|end|normal))|vk_(?:alt|anykey|backspace|control|delete|down|end|enter|escape|home|insert|left|nokey|pagedown|pageup|pause|printscreen|return|right|shift|space|tab|up|f\\d|numpad\\d|add|decimal|divide|lalt|lcontrol|lshift|multiply|ralt|rcontrol|rshift|subtract)|achievement_(?:filter_(?:all_players|favorites_only|friends_only)|friends_info|info|leaderboard_info|our_info|pic_loaded|show_(?:achievement|bank|friend_picker|leaderboard|profile|purchase_prompt|ui)|type_challenge|type_score_challenge)|asset_(?:font|object|path|room|script|shader|sound|sprite|tiles|timeline|unknown)|audio_(?:3d|falloff_(?:exponent_distance|exponent_distance_clamped|inverse_distance|inverse_distance_clamped|linear_distance|linear_distance_clamped|none)|mono|new_system|old_system|stereo)|bm_(?:add|complex|dest_alpha|dest_color|dest_colour|inv_dest_alpha|inv_dest_color|inv_dest_colour|inv_src_alpha|inv_src_color|inv_src_colour|max|normal|one|src_alpha|src_alpha_sat|src_color|src_colour|subtract|zero)|browser_(?:chrome|firefox|ie|ie_mobile|not_a_browser|opera|safari|safari_mobile|tizen|unknown|windows_store)|buffer_(?:bool|f16|f32|f64|fast|fixed|generalerror|grow|invalidtype|network|outofbounds|outofspace|s16|s32|s8|seek_end|seek_relative|seek_start|string|text|u16|u32|u64|u8|vbuffer|wrap)|c_(?:aqua|black|blue|dkgray|fuchsia|gray|green|lime|ltgray|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow)|cmpfunc_(?:always|equal|greater|greaterequal|less|lessequal|never|notequal)|cr_(?:appstart|arrow|beam|cross|default|drag|handpoint|hourglass|none|size_all|size_nesw|size_ns|size_nwse|size_we|uparrow)|cull_(?:clockwise|counterclockwise|noculling)|device_(?:emulator|tablet)|device_ios_(?:ipad|ipad_retina|iphone|iphone5|iphone6|iphone6plus|iphone_retina|unknown)|display_(?:landscape|landscape_flipped|portrait|portrait_flipped)|dll_(?:cdecl|cdel|stdcall)|ds_type_(?:grid|list|map|priority|queue|stack)|ef_(?:cloud|ellipse|explosion|firework|flare|rain|ring|smoke|smokeup|snow|spark|star)|fa_(?:archive|bottom|center|directory|hidden|left|middle|readonly|right|sysfile|top|volumeid)|fb_login_(?:default|fallback_to_webview|forcing_safari|forcing_webview|no_fallback_to_webview|use_system_account)|iap_(?:available|canceled|ev_consume|ev_product|ev_purchase|ev_restore|ev_storeload|failed|purchased|refunded|status_available|status_loading|status_processing|status_restoring|status_unavailable|status_uninitialised|storeload_failed|storeload_ok|unavailable)|leaderboard_type_(?:number|time_mins_secs)|lighttype_(?:dir|point)|matrix_(?:projection|view|world)|mb_(?:any|left|middle|none|right)|network_(?:config_(?:connect_timeout|disable_reliable_udp|enable_reliable_udp|use_non_blocking_socket)|socket_(?:bluetooth|tcp|udp)|type_(?:connect|data|disconnect|non_blocking_connect))|of_challenge_(?:lose|tie|win)|os_(?:android|ios|linux|macosx|ps3|ps4|psvita|unknown|uwp|win32|win8native|windows|winphone|xboxone)|phy_debug_render_(?:aabb|collision_pairs|coms|core_shapes|joints|obb|shapes)|phy_joint_(?:anchor_1_x|anchor_1_y|anchor_2_x|anchor_2_y|angle|angle_limits|damping_ratio|frequency|length_1|length_2|lower_angle_limit|max_force|max_length|max_motor_force|max_motor_torque|max_torque|motor_force|motor_speed|motor_torque|reaction_force_x|reaction_force_y|reaction_torque|speed|translation|upper_angle_limit)|phy_particle_data_flag_(?:category|color|colour|position|typeflags|velocity)|phy_particle_flag_(?:colormixing|colourmixing|elastic|powder|spring|tensile|viscous|wall|water|zombie)|phy_particle_group_flag_(?:rigid|solid)|pr_(?:linelist|linestrip|pointlist|trianglefan|trianglelist|trianglestrip)|ps_(?:distr|shape)_(?:diamond|ellipse|gaussian|invgaussian|line|linear|rectangle)|pt_shape_(?:circle|cloud|disk|explosion|flare|line|pixel|ring|smoke|snow|spark|sphere|square|star)|ty_(?:real|string)|gp_(?:face\\d|axislh|axislv|axisrh|axisrv|padd|padl|padr|padu|select|shoulderl|shoulderlb|shoulderr|shoulderrb|start|stickl|stickr)|lb_disp_(?:none|numeric|time_ms|time_sec)|lb_sort_(?:ascending|descending|none)|ov_(?:achievements|community|friends|gamegroup|players|settings)|ugc_(?:filetype_(?:community|microtrans)|list_(?:Favorited|Followed|Published|Subscribed|UsedOrPlayed|VotedDown|VotedOn|VotedUp|WillVoteLater)|match_(?:AllGuides|Artwork|Collections|ControllerBindings|IntegratedGuides|Items|Items_Mtx|Items_ReadyToUse|Screenshots|UsableInGame|Videos|WebGuides)|query_(?:AcceptedForGameRankedByAcceptanceDate|CreatedByFriendsRankedByPublicationDate|FavoritedByFriendsRankedByPublicationDate|NotYetRated)|query_RankedBy(?:NumTimesReported|PublicationDate|TextSearch|TotalVotesAsc|Trend|Vote|VotesUp)|result_success|sortorder_CreationOrder(?:Asc|Desc)|sortorder_(?:ForModeration|LastUpdatedDesc|SubscriptionDateDesc|TitleAsc|VoteScoreDesc)|visibility_(?:friends_only|private|public))|vertex_usage_(?:binormal|blendindices|blendweight|color|colour|depth|fog|normal|position|psize|sample|tangent|texcoord|textcoord)|vertex_type_(?:float\\d|color|colour|ubyte4)|input_type|layerelementtype_(?:background|instance|oldtilemap|particlesystem|sprite|tile|tilemap|undefined)|se_(?:chorus|compressor|echo|equalizer|flanger|gargle|none|reverb)|text_type|tile_(?:flip|index_mask|mirror|rotate)|(?:obj|rm|scr|spr)\\w+)\\b/,variable:/\\b(?:alarm|application_surface|async_load|background_(?:alpha|blend|color|colour|foreground|height|hspeed|htiled|index|showcolor|showcolour|visible|vspeed|vtiled|width|x|xscale|y|yscale)|bbox_(?:bottom|left|right|top)|browser_(?:height|width)|caption_(?:health|lives|score)|current_(?:day|hour|minute|month|second|time|weekday|year)|cursor_sprite|debug_mode|delta_time|direction|display_aa|error_(?:last|occurred)|event_(?:action|number|object|type)|fps|fps_real|friction|game_(?:display|project|save)_(?:id|name)|gamemaker_(?:pro|registered|version)|gravity|gravity_direction|(?:h|v)speed|health|iap_data|id|image_(?:alpha|angle|blend|depth|index|number|speed|xscale|yscale)|instance_(?:count|id)|keyboard_(?:key|lastchar|lastkey|string)|layer|lives|mask_index|mouse_(?:button|lastbutton|x|y)|object_index|os_(?:browser|device|type|version)|path_(?:endaction|index|orientation|position|positionprevious|scale|speed)|persistent|phy_(?:rotation|(?:col_normal|collision|com|linear_velocity|position|speed)_(?:x|y)|angular_(?:damping|velocity)|position_(?:x|y)previous|speed|linear_damping|bullet|fixed_rotation|active|mass|inertia|dynamic|kinematic|sleeping|collision_points)|pointer_(?:invalid|null)|room|room_(?:caption|first|height|last|persistent|speed|width)|score|secure_mode|show_(?:health|lives|score)|solid|speed|sprite_(?:height|index|width|xoffset|yoffset)|temp_directory|timeline_(?:index|loop|position|running|speed)|transition_(?:color|kind|steps)|undefined|view_(?:angle|current|enabled|(?:h|v)(?:border|speed)|(?:h|w|x|y)port|(?:h|w|x|y)view|object|surface_id|visible)|visible|webgl_enabled|working_directory|(?:x|y)(?:previous|start)|x|y|argument(?:_relitive|_count|\\d)|argument|global|local|other|self)\\b/});;/plugins/normalize-whitespace/prism-normalize-whitespace.js\u0016\u0007(function () {\n\n\tif (typeof Prism === 'undefined') {\n\t\treturn;\n\t}\n\n\tvar assign = Object.assign || function (obj1, obj2) {\n\t\tfor (var name in obj2) {\n\t\t\tif (obj2.hasOwnProperty(name)) {\n\t\t\t\tobj1[name] = obj2[name];\n\t\t\t}\n\t\t}\n\t\treturn obj1;\n\t};\n\n\tfunction NormalizeWhitespace(defaults) {\n\t\tthis.defaults = assign({}, defaults);\n\t}\n\n\tfunction toCamelCase(value) {\n\t\treturn value.replace(/-(\\w)/g, function (match, firstChar) {\n\t\t\treturn firstChar.toUpperCase();\n\t\t});\n\t}\n\n\tfunction tabLen(str) {\n\t\tvar res = 0;\n\t\tfor (var i = 0; i < str.length; ++i) {\n\t\t\tif (str.charCodeAt(i) == '\\t'.charCodeAt(0)) {\n\t\t\t\tres += 3;\n\t\t\t}\n\t\t}\n\t\treturn str.length + res;\n\t}\n\n\tvar settingsConfig = {\n\t\t'remove-trailing': 'boolean',\n\t\t'remove-indent': 'boolean',\n\t\t'left-trim': 'boolean',\n\t\t'right-trim': 'boolean',\n\t\t'break-lines': 'number',\n\t\t'indent': 'number',\n\t\t'remove-initial-line-feed': 'boolean',\n\t\t'tabs-to-spaces': 'number',\n\t\t'spaces-to-tabs': 'number',\n\t};\n\n\tNormalizeWhitespace.prototype = {\n\t\tsetDefaults: function (defaults) {\n\t\t\tthis.defaults = assign(this.defaults, defaults);\n\t\t},\n\t\tnormalize: function (input, settings) {\n\t\t\tsettings = assign(this.defaults, settings);\n\n\t\t\tfor (var name in settings) {\n\t\t\t\tvar methodName = toCamelCase(name);\n\t\t\t\tif (name !== 'normalize' && methodName !== 'setDefaults' &&\n\t\t\t\t\tsettings[name] && this[methodName]) {\n\t\t\t\t\tinput = this[methodName].call(this, input, settings[name]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn input;\n\t\t},\n\n\t\t/*\n\t\t * Normalization methods\n\t\t */\n\t\tleftTrim: function (input) {\n\t\t\treturn input.replace(/^\\s+/, '');\n\t\t},\n\t\trightTrim: function (input) {\n\t\t\treturn input.replace(/\\s+$/, '');\n\t\t},\n\t\ttabsToSpaces: function (input, spaces) {\n\t\t\tspaces = spaces|0 || 4;\n\t\t\treturn input.replace(/\\t/g, new Array(++spaces).join(' '));\n\t\t},\n\t\tspacesToTabs: function (input, spaces) {\n\t\t\tspaces = spaces|0 || 4;\n\t\t\treturn input.replace(RegExp(' {' + spaces + '}', 'g'), '\\t');\n\t\t},\n\t\tremoveTrailing: function (input) {\n\t\t\treturn input.replace(/\\s*?$/gm, '');\n\t\t},\n\t\t// Support for deprecated plugin remove-initial-line-feed\n\t\tremoveInitialLineFeed: function (input) {\n\t\t\treturn input.replace(/^(?:\\r?\\n|\\r)/, '');\n\t\t},\n\t\tremoveIndent: function (input) {\n\t\t\tvar indents = input.match(/^[^\\S\\n\\r]*(?=\\S)/gm);\n\n\t\t\tif (!indents || !indents[0].length) {\n\t\t\t\treturn input;\n\t\t\t}\n\n\t\t\tindents.sort(function (a, b) { return a.length - b.length; });\n\n\t\t\tif (!indents[0].length) {\n\t\t\t\treturn input;\n\t\t\t}\n\n\t\t\treturn input.replace(RegExp('^' + indents[0], 'gm'), '');\n\t\t},\n\t\tindent: function (input, tabs) {\n\t\t\treturn input.replace(/^[^\\S\\n\\r]*(?=\\S)/gm, new Array(++tabs).join('\\t') + '$&');\n\t\t},\n\t\tbreakLines: function (input, characters) {\n\t\t\tcharacters = (characters === true) ? 80 : characters|0 || 80;\n\n\t\t\tvar lines = input.split('\\n');\n\t\t\tfor (var i = 0; i < lines.length; ++i) {\n\t\t\t\tif (tabLen(lines[i]) <= characters) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tvar line = lines[i].split(/(\\s+)/g);\n\t\t\t\tvar len = 0;\n\n\t\t\t\tfor (var j = 0; j < line.length; ++j) {\n\t\t\t\t\tvar tl = tabLen(line[j]);\n\t\t\t\t\tlen += tl;\n\t\t\t\t\tif (len > characters) {\n\t\t\t\t\t\tline[j] = '\\n' + line[j];\n\t\t\t\t\t\tlen = tl;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tlines[i] = line.join('');\n\t\t\t}\n\t\t\treturn lines.join('\\n');\n\t\t}\n\t};\n\n\t// Support node modules\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tmodule.exports = NormalizeWhitespace;\n\t}\n\n\tPrism.plugins.NormalizeWhitespace = new NormalizeWhitespace({\n\t\t'remove-trailing': true,\n\t\t'remove-indent': true,\n\t\t'left-trim': true,\n\t\t'right-trim': true,\n\t\t/*'break-lines': 80,\n\t\t'indent': 2,\n\t\t'remove-initial-line-feed': false,\n\t\t'tabs-to-spaces': 4,\n\t\t'spaces-to-tabs': 4*/\n\t});\n\n\tPrism.hooks.add('before-sanity-check', function (env) {\n\t\tvar Normalizer = Prism.plugins.NormalizeWhitespace;\n\n\t\t// Check settings\n\t\tif (env.settings && env.settings['whitespace-normalization'] === false) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Check classes\n\t\tif (!Prism.util.isActive(env.element, 'whitespace-normalization', true)) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Simple mode if there is no env.element\n\t\tif ((!env.element || !env.element.parentNode) && env.code) {\n\t\t\tenv.code = Normalizer.normalize(env.code, env.settings);\n\t\t\treturn;\n\t\t}\n\n\t\t// Normal mode\n\t\tvar pre = env.element.parentNode;\n\t\tif (!env.code || !pre || pre.nodeName.toLowerCase() !== 'pre') {\n\t\t\treturn;\n\t\t}\n\n\t\tif (env.settings == null) { env.settings = {}; }\n\n\t\t// Read settings from 'data-' attributes\n\t\tfor (var key in settingsConfig) {\n\t\t\tif (Object.hasOwnProperty.call(settingsConfig, key)) {\n\t\t\t\tvar settingType = settingsConfig[key];\n\t\t\t\tif (pre.hasAttribute('data-' + key)) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tvar value = JSON.parse(pre.getAttribute('data-' + key) || 'true');\n\t\t\t\t\t\tif (typeof value === settingType) {\n\t\t\t\t\t\t\tenv.settings[key] = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch (_error) {\n\t\t\t\t\t\t// ignore error\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tvar children = pre.childNodes;\n\t\tvar before = '';\n\t\tvar after = '';\n\t\tvar codeFound = false;\n\n\t\t// Move surrounding whitespace from the <pre> tag into the <code> tag\n\t\tfor (var i = 0; i < children.length; ++i) {\n\t\t\tvar node = children[i];\n\n\t\t\tif (node == env.element) {\n\t\t\t\tcodeFound = true;\n\t\t\t} else if (node.nodeName === '#text') {\n\t\t\t\tif (codeFound) {\n\t\t\t\t\tafter += node.nodeValue;\n\t\t\t\t} else {\n\t\t\t\t\tbefore += node.nodeValue;\n\t\t\t\t}\n\n\t\t\t\tpre.removeChild(node);\n\t\t\t\t--i;\n\t\t\t}\n\t\t}\n\n\t\tif (!env.element.children.length || !Prism.plugins.KeepMarkup) {\n\t\t\tenv.code = before + env.code + after;\n\t\t\tenv.code = Normalizer.normalize(env.code, env.settings);\n\t\t} else {\n\t\t\t// Preserve markup for keep-markup plugin\n\t\t\tvar html = before + env.element.innerHTML + after;\n\t\t\tenv.element.innerHTML = Normalizer.normalize(html, env.settings);\n\t\t\tenv.code = env.element.textContent;\n\t\t}\n\t});\n\n}());\n/components/prism-gedcom.min.js\u0002\bPrism.languages.gedcom={\"line-value\":{pattern:/(^[\\t ]*\\d+ +(?:@\\w[\\w!\"$%&'()*+,\\-./:;<=>?[\\\\\\]^`{|}~\\x80-\\xfe #]*@ +)?\\w+ ).+/m,lookbehind:!0,inside:{pointer:{pattern:/^@\\w[\\w!\"$%&'()*+,\\-./:;<=>?[\\\\\\]^`{|}~\\x80-\\xfe #]*@$/,alias:\"variable\"}}},record:{pattern:/(^[\\t ]*\\d+ +(?:@\\w[\\w!\"$%&'()*+,\\-./:;<=>?[\\\\\\]^`{|}~\\x80-\\xfe #]*@ +)?)\\w+/m,lookbehind:!0,alias:\"tag\"},level:{pattern:/(^[\\t ]*)\\d+/m,lookbehind:!0,alias:\"number\"},pointer:{pattern:/@\\w[\\w!\"$%&'()*+,\\-./:;<=>?[\\\\\\]^`{|}~\\x80-\\xfe #]*@/,alias:\"variable\"}};4/plugins/line-highlight/prism-line-highlight.min.css\u0004mpre[data-line]{position:relative;padding:1em 0 1em 3em}.line-highlight{position:absolute;left:0;right:0;padding:inherit 0;margin-top:1em;background:hsla(24,20%,50%,.08);background:linear-gradient(to right,hsla(24,20%,50%,.1) 70%,hsla(24,20%,50%,0));pointer-events:none;line-height:inherit;white-space:pre}@media print{.line-highlight{-webkit-print-color-adjust:exact;color-adjust:exact}}.line-highlight:before,.line-highlight[data-end]:after{content:attr(data-start);position:absolute;top:.4em;left:.6em;min-width:1em;padding:0 .5em;background-color:hsla(24,20%,50%,.4);color:#f4f1ef;font:bold 65%/1.5 sans-serif;text-align:center;vertical-align:.3em;border-radius:999px;text-shadow:none;box-shadow:0 1px #fff}.line-highlight[data-end]:after{content:attr(data-end);top:auto;bottom:.4em}.line-numbers .line-highlight:after,.line-numbers .line-highlight:before{content:none}pre[id].linkable-line-numbers span.line-numbers-rows{pointer-events:all}pre[id].linkable-line-numbers span.line-numbers-rows>span:before{cursor:pointer}pre[id].linkable-line-numbers span.line-numbers-rows>span:hover:before{background-color:rgba(128,128,128,.2)}/components/prism-bqn.min.js\u00051Prism.languages.bqn={shebang:{pattern:/^#![ \\t]*\\/.*/,alias:\"important\",greedy:!0},comment:{pattern:/#.*/,greedy:!0},\"string-literal\":{pattern:/\"(?:[^\"]|\"\")*\"/,greedy:!0,alias:\"string\"},\"character-literal\":{pattern:/'(?:[\\s\\S]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF])'/,greedy:!0,alias:\"char\"},function:/•[\\w¯.∞π]+[\\w¯.∞π]*/,\"dot-notation-on-brackets\":{pattern:/\\{(?=.*\\}\\.)|\\}\\./,alias:\"namespace\"},\"special-name\":{pattern:/(?:𝕨|𝕩|𝕗|𝕘|𝕤|𝕣|𝕎|𝕏|𝔽|𝔾|𝕊|_𝕣_|_𝕣)/,alias:\"keyword\"},\"dot-notation-on-name\":{pattern:/[A-Za-z_][\\w¯∞π]*\\./,alias:\"namespace\"},\"word-number-scientific\":{pattern:/\\d+(?:\\.\\d+)?[eE]¯?\\d+/,alias:\"number\"},\"word-name\":{pattern:/[A-Za-z_][\\w¯∞π]*/,alias:\"symbol\"},\"word-number\":{pattern:/[¯∞π]?(?:\\d*\\.?\\b\\d+(?:e[+¯]?\\d+|E[+¯]?\\d+)?|¯|∞|π)(?:j¯?(?:(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:e[+¯]?\\d+|E[+¯]?\\d+)?|¯|∞|π))?/,alias:\"number\"},\"null-literal\":{pattern:/@/,alias:\"char\"},\"primitive-functions\":{pattern:/[-+×÷⋆√⌊⌈|¬∧∨<>≠=≤≥≡≢⊣⊢⥊∾≍⋈↑↓↕«»⌽⍉/⍋⍒⊏⊑⊐⊒∊⍷⊔!]/,alias:\"operator\"},\"primitive-1-operators\":{pattern:/[`˜˘¨⁼⌜´˝˙]/,alias:\"operator\"},\"primitive-2-operators\":{pattern:/[∘⊸⟜○⌾⎉⚇⍟⊘◶⎊]/,alias:\"operator\"},punctuation:/[←⇐↩(){}⟨⟩[\\]‿·⋄,.;:?]/};/components/prism-coq.js\r(function (Prism) {\n\n\t// https://github.com/coq/coq\n\n\tvar commentSource = /\\(\\*(?:[^(*]|\\((?!\\*)|\\*(?!\\))|<self>)*\\*\\)/.source;\n\tfor (var i = 0; i < 2; i++) {\n\t\tcommentSource = commentSource.replace(/<self>/g, function () { return commentSource; });\n\t}\n\tcommentSource = commentSource.replace(/<self>/g, '[]');\n\n\tPrism.languages.coq = {\n\t\t'comment': RegExp(commentSource),\n\t\t'string': {\n\t\t\tpattern: /\"(?:[^\"]|\"\")*\"(?!\")/,\n\t\t\tgreedy: true\n\t\t},\n\t\t'attribute': [\n\t\t\t{\n\t\t\t\tpattern: RegExp(\n\t\t\t\t\t/#\\[(?:[^\\[\\](\"]|\"(?:[^\"]|\"\")*\"(?!\")|\\((?!\\*)|<comment>)*\\]/.source\n\t\t\t\t\t\t.replace(/<comment>/g, function () { return commentSource; })\n\t\t\t\t),\n\t\t\t\tgreedy: true,\n\t\t\t\talias: 'attr-name',\n\t\t\t\tinside: {\n\t\t\t\t\t'comment': RegExp(commentSource),\n\t\t\t\t\t'string': {\n\t\t\t\t\t\tpattern: /\"(?:[^\"]|\"\")*\"(?!\")/,\n\t\t\t\t\t\tgreedy: true\n\t\t\t\t\t},\n\n\t\t\t\t\t'operator': /=/,\n\t\t\t\t\t'punctuation': /^#\\[|\\]$|[,()]/\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /\\b(?:Cumulative|Global|Local|Monomorphic|NonCumulative|Polymorphic|Private|Program)\\b/,\n\t\t\t\talias: 'attr-name'\n\t\t\t}\n\t\t],\n\n\t\t'keyword': /\\b(?:Abort|About|Add|Admit|Admitted|All|Arguments|As|Assumptions|Axiom|Axioms|Back|BackTo|Backtrace|BinOp|BinOpSpec|BinRel|Bind|Blacklist|Canonical|Case|Cd|Check|Class|Classes|Close|CoFixpoint|CoInductive|Coercion|Coercions|Collection|Combined|Compute|Conjecture|Conjectures|Constant|Constants|Constraint|Constructors|Context|Corollary|Create|CstOp|Custom|Cut|Debug|Declare|Defined|Definition|Delimit|Dependencies|Dependent|Derive|Diffs|Drop|Elimination|End|Entry|Equality|Eval|Example|Existential|Existentials|Existing|Export|Extern|Extraction|Fact|Fail|Field|File|Firstorder|Fixpoint|Flags|Focus|From|Funclass|Function|Functional|GC|Generalizable|Goal|Grab|Grammar|Graph|Guarded|Haskell|Heap|Hide|Hint|HintDb|Hints|Hypotheses|Hypothesis|IF|Identity|Immediate|Implicit|Implicits|Import|Include|Induction|Inductive|Infix|Info|Initial|InjTyp|Inline|Inspect|Instance|Instances|Intro|Intros|Inversion|Inversion_clear|JSON|Language|Left|Lemma|Let|Lia|Libraries|Library|Load|LoadPath|Locate|Ltac|Ltac2|ML|Match|Method|Minimality|Module|Modules|Morphism|Next|NoInline|Notation|Number|OCaml|Obligation|Obligations|Opaque|Open|Optimize|Parameter|Parameters|Parametric|Path|Paths|Prenex|Preterm|Primitive|Print|Profile|Projections|Proof|Prop|PropBinOp|PropOp|PropUOp|Property|Proposition|Pwd|Qed|Quit|Rec|Record|Recursive|Redirect|Reduction|Register|Relation|Remark|Remove|Require|Reserved|Reset|Resolve|Restart|Rewrite|Right|Ring|Rings|SProp|Saturate|Save|Scheme|Scope|Scopes|Search|SearchHead|SearchPattern|SearchRewrite|Section|Separate|Set|Setoid|Show|Signatures|Solve|Solver|Sort|Sortclass|Sorted|Spec|Step|Strategies|Strategy|String|Structure|SubClass|Subgraph|SuchThat|Tactic|Term|TestCompile|Theorem|Time|Timeout|To|Transparent|Type|Typeclasses|Types|Typing|UnOp|UnOpSpec|Undelimit|Undo|Unfocus|Unfocused|Unfold|Universe|Universes|Unshelve|Variable|Variables|Variant|Verbose|View|Visibility|Zify|_|apply|as|at|by|cofix|else|end|exists|exists2|fix|for|forall|fun|if|in|let|match|measure|move|removed|return|struct|then|using|wf|where|with)\\b/,\n\n\t\t'number': /\\b(?:0x[a-f0-9][a-f0-9_]*(?:\\.[a-f0-9_]+)?(?:p[+-]?\\d[\\d_]*)?|\\d[\\d_]*(?:\\.[\\d_]+)?(?:e[+-]?\\d[\\d_]*)?)\\b/i,\n\n\t\t'punct': {\n\t\t\tpattern: /@\\{|\\{\\||\\[=|:>/,\n\t\t\talias: 'punctuation'\n\t\t},\n\t\t'operator': /\\/\\\\|\\\\\\/|\\.{2,3}|:{1,2}=|\\*\\*|[-=]>|<(?:->?|[+:=>]|<:)|>(?:=|->)|\\|[-|]?|[-!%&*+/<=>?@^~']/,\n\t\t'punctuation': /\\.\\(|`\\(|@\\{|`\\{|\\{\\||\\[=|:>|[:.,;(){}\\[\\]]/\n\t};\n\n}(Prism));\n/components/prism-t4-cs.min.js`Prism.languages.t4=Prism.languages[\"t4-cs\"]=Prism.languages[\"t4-templating\"].createT4(\"csharp\");/components/prism-mizar.min.js\u0004\u0015Prism.languages.mizar={comment:/::.+/,keyword:/@proof\\b|\\b(?:according|aggregate|all|and|antonym|are|as|associativity|assume|asymmetry|attr|be|begin|being|by|canceled|case|cases|clusters?|coherence|commutativity|compatibility|connectedness|consider|consistency|constructors|contradiction|correctness|def|deffunc|define|definitions?|defpred|do|does|end|environ|equals|ex|exactly|existence|for|from|func|given|hence|hereby|holds|idempotence|identity|iff?|implies|involutiveness|irreflexivity|is|it|let|means|mode|non|not|notations?|now|of|or|otherwise|over|per|pred|prefix|projectivity|proof|provided|qua|reconsider|redefine|reduce|reducibility|reflexivity|registrations?|requirements|reserve|sch|schemes?|section|selector|set|sethood|st|struct|such|suppose|symmetry|synonym|take|that|the|then|theorems?|thesis|thus|to|transitivity|uniqueness|vocabular(?:ies|y)|when|where|with|wrt)\\b/,parameter:{pattern:/\\$(?:10|\\d)/,alias:\"variable\"},variable:/\\b\\w+(?=:)/,number:/(?:\\b|-)\\d+\\b/,operator:/\\.\\.\\.|->|&|\\.?=/,punctuation:/\\(#|#\\)|[,:;\\[\\](){}]/};/components/prism-bicep.js\u0007}// based loosely upon: https://github.com/Azure/bicep/blob/main/src/textmate/bicep.tmlanguage\nPrism.languages.bicep = {\n\t'comment': [\n\t\t{\n\t\t\t// multiline comments eg /* ASDF */\n\t\t\tpattern: /(^|[^\\\\])\\/\\*[\\s\\S]*?(?:\\*\\/|$)/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true\n\t\t},\n\t\t{\n\t\t\t// singleline comments eg // ASDF\n\t\t\tpattern: /(^|[^\\\\:])\\/\\/.*/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true\n\t\t}\n\t],\n\n\t'property': [\n\t\t{\n\t\t\tpattern: /([\\r\\n][ \\t]*)[a-z_]\\w*(?=[ \\t]*:)/i,\n\t\t\tlookbehind: true\n\t\t},\n\t\t{\n\t\t\tpattern: /([\\r\\n][ \\t]*)'(?:\\\\.|\\$(?!\\{)|[^'\\\\\\r\\n$])*'(?=[ \\t]*:)/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true\n\t\t}\n\t],\n\t'string': [\n\t\t{\n\t\t\tpattern: /'''[^'][\\s\\S]*?'''/,\n\t\t\tgreedy: true\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^\\\\'])'(?:\\\\.|\\$(?!\\{)|[^'\\\\\\r\\n$])*'/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t}\n\t],\n\t'interpolated-string': {\n\t\tpattern: /(^|[^\\\\'])'(?:\\\\.|\\$(?:(?!\\{)|\\{[^{}\\r\\n]*\\})|[^'\\\\\\r\\n$])*'/,\n\t\tlookbehind: true,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'interpolation': {\n\t\t\t\tpattern: /\\$\\{[^{}\\r\\n]*\\}/,\n\t\t\t\tinside: {\n\t\t\t\t\t'expression': {\n\t\t\t\t\t\tpattern: /(^\\$\\{)[\\s\\S]+(?=\\}$)/,\n\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t},\n\t\t\t\t\t'punctuation': /^\\$\\{|\\}$/,\n\t\t\t\t}\n\t\t\t},\n\t\t\t'string': /[\\s\\S]+/\n\t\t}\n\t},\n\n\t'datatype': {\n\t\tpattern: /(\\b(?:output|param)\\b[ \\t]+\\w+[ \\t]+)\\w+\\b/,\n\t\tlookbehind: true,\n\t\talias: 'class-name'\n\t},\n\n\t'boolean': /\\b(?:false|true)\\b/,\n\t// https://github.com/Azure/bicep/blob/114a3251b4e6e30082a58729f19a8cc4e374ffa6/src/textmate/bicep.tmlanguage#L184\n\t'keyword': /\\b(?:existing|for|if|in|module|null|output|param|resource|targetScope|var)\\b/,\n\n\t'decorator': /@\\w+\\b/,\n\t'function': /\\b[a-z_]\\w*(?=[ \\t]*\\()/i,\n\n\t'number': /(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:E[+-]?\\d+)?/i,\n\t'operator': /--|\\+\\+|\\*\\*=?|=>|&&=?|\\|\\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\\.{3}|\\?\\?=?|\\?\\.?|[~:]/,\n\t'punctuation': /[{}[\\];(),.:]/,\n};\n\nPrism.languages.bicep['interpolated-string'].inside['interpolation'].inside['expression'].inside = Prism.languages.bicep;\n/components/prism-sml.js\t\\// https://smlfamily.github.io/sml97-defn.pdf\n// https://people.mpi-sws.org/~rossberg/sml.html\n(function (Prism) {\n\n\tvar keywords = /\\b(?:abstype|and|andalso|as|case|datatype|do|else|end|eqtype|exception|fn|fun|functor|handle|if|in|include|infix|infixr|let|local|nonfix|of|op|open|orelse|raise|rec|sharing|sig|signature|struct|structure|then|type|val|where|while|with|withtype)\\b/i;\n\n\tPrism.languages.sml = {\n\t\t// allow one level of nesting\n\t\t'comment': /\\(\\*(?:[^*(]|\\*(?!\\))|\\((?!\\*)|\\(\\*(?:[^*(]|\\*(?!\\))|\\((?!\\*))*\\*\\))*\\*\\)/,\n\t\t'string': {\n\t\t\tpattern: /#?\"(?:[^\"\\\\]|\\\\.)*\"/,\n\t\t\tgreedy: true\n\t\t},\n\n\t\t'class-name': [\n\t\t\t{\n\t\t\t\t// This is only an approximation since the real grammar is context-free\n\t\t\t\t//\n\t\t\t\t// Why the main loop so complex?\n\t\t\t\t// The main loop is approximately the same as /(?:\\s*(?:[*,]|->)\\s*<TERMINAL>)*/ which is, obviously, a lot\n\t\t\t\t// simpler. The difference is that if a comma is the last iteration of the loop, then the terminal must be\n\t\t\t\t// followed by a long identifier.\n\t\t\t\tpattern: RegExp(\n\t\t\t\t\t/((?:^|[^:]):\\s*)<TERMINAL>(?:\\s*(?:(?:\\*|->)\\s*<TERMINAL>|,\\s*<TERMINAL>(?:(?=<NOT-LAST>)|(?!<NOT-LAST>)\\s+<LONG-ID>)))*/.source\n\t\t\t\t\t\t.replace(/<NOT-LAST>/g, function () { return /\\s*(?:[*,]|->)/.source; })\n\t\t\t\t\t\t.replace(/<TERMINAL>/g, function () {\n\t\t\t\t\t\t\treturn /(?:'[\\w']*|<LONG-ID>|\\((?:[^()]|\\([^()]*\\))*\\)|\\{(?:[^{}]|\\{[^{}]*\\})*\\})(?:\\s+<LONG-ID>)*/.source;\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.replace(/<LONG-ID>/g, function () { return /(?!<KEYWORD>)[a-z\\d_][\\w'.]*/.source; })\n\t\t\t\t\t\t.replace(/<KEYWORD>/g, function () { return keywords.source; }),\n\t\t\t\t\t'i'\n\t\t\t\t),\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: null // see below\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /((?:^|[^\\w'])(?:datatype|exception|functor|signature|structure|type)\\s+)[a-z_][\\w'.]*/i,\n\t\t\t\tlookbehind: true\n\t\t\t}\n\t\t],\n\t\t'function': {\n\t\t\tpattern: /((?:^|[^\\w'])fun\\s+)[a-z_][\\w'.]*/i,\n\t\t\tlookbehind: true\n\t\t},\n\n\t\t'keyword': keywords,\n\t\t'variable': {\n\t\t\tpattern: /(^|[^\\w'])'[\\w']*/,\n\t\t\tlookbehind: true,\n\t\t},\n\n\t\t'number': /~?\\b(?:\\d+(?:\\.\\d+)?(?:e~?\\d+)?|0x[\\da-f]+)\\b/i,\n\t\t'word': {\n\t\t\tpattern: /\\b0w(?:\\d+|x[\\da-f]+)\\b/i,\n\t\t\talias: 'constant'\n\t\t},\n\n\t\t'boolean': /\\b(?:false|true)\\b/i,\n\t\t'operator': /\\.\\.\\.|:[>=:]|=>?|->|[<>]=?|[!+\\-*/^#|@~]/,\n\t\t'punctuation': /[(){}\\[\\].:,;]/\n\t};\n\n\tPrism.languages.sml['class-name'][0].inside = Prism.languages.sml;\n\n\tPrism.languages.smlnj = Prism.languages.sml;\n\n}(Prism));\n/components/prism-nasm.min.js\u0002Prism.languages.nasm={comment:/;.*$/m,string:/([\"'`])(?:\\\\.|(?!\\1)[^\\\\\\r\\n])*\\1/,label:{pattern:/(^\\s*)[A-Za-z._?$][\\w.?$@~#]*:/m,lookbehind:!0,alias:\"function\"},keyword:[/\\[?BITS (?:16|32|64)\\]?/,{pattern:/(^\\s*)section\\s*[a-z.]+:?/im,lookbehind:!0},/(?:extern|global)[^;\\r\\n]*/i,/(?:CPU|DEFAULT|FLOAT).*$/m],register:{pattern:/\\b(?:st\\d|[xyz]mm\\d\\d?|[cdt]r\\d|r\\d\\d?[bwd]?|[er]?[abcd]x|[abcd][hl]|[er]?(?:bp|di|si|sp)|[cdefgs]s)\\b/i,alias:\"variable\"},number:/(?:\\b|(?=\\$))(?:0[hx](?:\\.[\\da-f]+|[\\da-f]+(?:\\.[\\da-f]+)?)(?:p[+-]?\\d+)?|\\d[\\da-f]+[hx]|\\$\\d[\\da-f]*|0[oq][0-7]+|[0-7]+[oq]|0[by][01]+|[01]+[by]|0[dt]\\d+|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:\\.?e[+-]?\\d+)?[dt]?)\\b/i,operator:/[\\[\\]*+\\-\\/%<>=&|$!]/};(/plugins/treeview/prism-treeview.min.css\u001c.token.treeview-part .entry-line{position:relative;text-indent:-99em;display:inline-block;vertical-align:top;width:1.2em}.token.treeview-part .entry-line:before,.token.treeview-part .line-h:after{content:\"\";position:absolute;top:0;left:50%;width:50%;height:100%}.token.treeview-part .line-h:before,.token.treeview-part .line-v:before{border-left:1px solid #ccc}.token.treeview-part .line-v-last:before{height:50%;border-left:1px solid #ccc;border-bottom:1px solid #ccc}.token.treeview-part .line-h:after{height:50%;border-bottom:1px solid #ccc}.token.treeview-part .entry-name{position:relative;display:inline-block;vertical-align:top}.token.treeview-part .entry-name.dotfile{opacity:.5}@font-face{font-family:PrismTreeview;src:url(data:application/font-woff;base64,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) format(\"woff\")}.token.treeview-part .entry-name:before{content:\"\\ea01\";font-family:PrismTreeview;font-size:inherit;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;width:2.5ex;display:inline-block}.token.treeview-part .entry-name.dir:before{content:\"\\ea02\"}.token.treeview-part .entry-name.ext-bmp:before,.token.treeview-part .entry-name.ext-eps:before,.token.treeview-part .entry-name.ext-gif:before,.token.treeview-part .entry-name.ext-jpe:before,.token.treeview-part .entry-name.ext-jpeg:before,.token.treeview-part .entry-name.ext-jpg:before,.token.treeview-part .entry-name.ext-png:before,.token.treeview-part .entry-name.ext-svg:before,.token.treeview-part .entry-name.ext-tiff:before{content:\"\\ea03\"}.token.treeview-part .entry-name.ext-cfg:before,.token.treeview-part .entry-name.ext-conf:before,.token.treeview-part .entry-name.ext-config:before,.token.treeview-part .entry-name.ext-csv:before,.token.treeview-part .entry-name.ext-ini:before,.token.treeview-part .entry-name.ext-log:before,.token.treeview-part .entry-name.ext-md:before,.token.treeview-part .entry-name.ext-nfo:before,.token.treeview-part .entry-name.ext-txt:before{content:\"\\ea06\"}.token.treeview-part .entry-name.ext-asp:before,.token.treeview-part .entry-name.ext-aspx:before,.token.treeview-part .entry-name.ext-c:before,.token.treeview-part .entry-name.ext-cc:before,.token.treeview-part .entry-name.ext-cpp:before,.token.treeview-part .entry-name.ext-cs:before,.token.treeview-part .entry-name.ext-css:before,.token.treeview-part .entry-name.ext-h:before,.token.treeview-part .entry-name.ext-hh:before,.token.treeview-part .entry-name.ext-htm:before,.token.treeview-part .entry-name.ext-html:before,.token.treeview-part .entry-name.ext-jav:before,.token.treeview-part .entry-name.ext-java:before,.token.treeview-part .entry-name.ext-js:before,.token.treeview-part .entry-name.ext-php:before,.token.treeview-part .entry-name.ext-rb:before,.token.treeview-part .entry-name.ext-xml:before{content:\"\\ea07\"}.token.treeview-part .entry-name.ext-7z:before,.token.treeview-part .entry-name.ext-bz2:before,.token.treeview-part .entry-name.ext-bz:before,.token.treeview-part .entry-name.ext-gz:before,.token.treeview-part .entry-name.ext-rar:before,.token.treeview-part .entry-name.ext-tar:before,.token.treeview-part .entry-name.ext-tgz:before,.token.treeview-part .entry-name.ext-zip:before{content:\"\\ea08\"}.token.treeview-part .entry-name.ext-aac:before,.token.treeview-part .entry-name.ext-au:before,.token.treeview-part .entry-name.ext-cda:before,.token.treeview-part .entry-name.ext-flac:before,.token.treeview-part .entry-name.ext-mp3:before,.token.treeview-part .entry-name.ext-oga:before,.token.treeview-part .entry-name.ext-ogg:before,.token.treeview-part .entry-name.ext-wav:before,.token.treeview-part .entry-name.ext-wma:before{content:\"\\ea04\"}.token.treeview-part .entry-name.ext-avi:before,.token.treeview-part .entry-name.ext-flv:before,.token.treeview-part .entry-name.ext-mkv:before,.token.treeview-part .entry-name.ext-mov:before,.token.treeview-part .entry-name.ext-mp4:before,.token.treeview-part .entry-name.ext-mpeg:before,.token.treeview-part .entry-name.ext-mpg:before,.token.treeview-part .entry-name.ext-ogv:before,.token.treeview-part .entry-name.ext-webm:before{content:\"\\ea05\"}.token.treeview-part .entry-name.ext-pdf:before{content:\"\\ea09\"}.token.treeview-part .entry-name.ext-xls:before,.token.treeview-part .entry-name.ext-xlsx:before{content:\"\\ea0a\"}.token.treeview-part .entry-name.ext-doc:before,.token.treeview-part .entry-name.ext-docm:before,.token.treeview-part .entry-name.ext-docx:before{content:\"\\ea0c\"}.token.treeview-part .entry-name.ext-pps:before,.token.treeview-part .entry-name.ext-ppt:before,.token.treeview-part .entry-name.ext-pptx:before{content:\"\\ea0b\"}/components/prism-clike.js\u0003MPrism.languages.clike = {\n\t'comment': [\n\t\t{\n\t\t\tpattern: /(^|[^\\\\])\\/\\*[\\s\\S]*?(?:\\*\\/|$)/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^\\\\:])\\/\\/.*/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true\n\t\t}\n\t],\n\t'string': {\n\t\tpattern: /([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1/,\n\t\tgreedy: true\n\t},\n\t'class-name': {\n\t\tpattern: /(\\b(?:class|extends|implements|instanceof|interface|new|trait)\\s+|\\bcatch\\s+\\()[\\w.\\\\]+/i,\n\t\tlookbehind: true,\n\t\tinside: {\n\t\t\t'punctuation': /[.\\\\]/\n\t\t}\n\t},\n\t'keyword': /\\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\\b/,\n\t'boolean': /\\b(?:false|true)\\b/,\n\t'function': /\\b\\w+(?=\\()/,\n\t'number': /\\b0x[\\da-f]+\\b|(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:e[+-]?\\d+)?/i,\n\t'operator': /[<>]=?|[!=]=?=?|--?|\\+\\+?|&&?|\\|\\|?|[?*/~^%]/,\n\t'punctuation': /[{}[\\];(),.:]/\n};\n/components/prism-csharp.min.js\u0018#!function(e){function n(e,n){return e.replace(/<<(\\d+)>>/g,(function(e,s){return\"(?:\"+n[+s]+\")\"}))}function s(e,s,a){return RegExp(n(e,s),a||\"\")}function a(e,n){for(var s=0;s<n;s++)e=e.replace(/<<self>>/g,(function(){return\"(?:\"+e+\")\"}));return e.replace(/<<self>>/g,\"[^\\\\s\\\\S]\")}var t=\"bool byte char decimal double dynamic float int long object sbyte short string uint ulong ushort var void\",r=\"class enum interface record struct\",i=\"add alias and ascending async await by descending from(?=\\\\s*(?:\\\\w|$)) get global group into init(?=\\\\s*;) join let nameof not notnull on or orderby partial remove select set unmanaged value when where with(?=\\\\s*{)\",o=\"abstract as base break case catch checked const continue default delegate do else event explicit extern finally fixed for foreach goto if implicit in internal is lock namespace new null operator out override params private protected public readonly ref return sealed sizeof stackalloc static switch this throw try typeof unchecked unsafe using virtual volatile while yield\";function l(e){return\"\\\\b(?:\"+e.trim().replace(/ /g,\"|\")+\")\\\\b\"}var d=l(r),p=RegExp(l(t+\" \"+r+\" \"+i+\" \"+o)),c=l(r+\" \"+i+\" \"+o),u=l(t+\" \"+r+\" \"+o),g=a(\"<(?:[^<>;=+\\\\-*/%&|^]|<<self>>)*>\",2),b=a(\"\\\\((?:[^()]|<<self>>)*\\\\)\",2),h=\"@?\\\\b[A-Za-z_]\\\\w*\\\\b\",f=n(\"<<0>>(?:\\\\s*<<1>>)?\",[h,g]),m=n(\"(?!<<0>>)<<1>>(?:\\\\s*\\\\.\\\\s*<<1>>)*\",[c,f]),k=\"\\\\[\\\\s*(?:,\\\\s*)*\\\\]\",y=n(\"<<0>>(?:\\\\s*(?:\\\\?\\\\s*)?<<1>>)*(?:\\\\s*\\\\?)?\",[m,k]),w=n(\"[^,()<>[\\\\];=+\\\\-*/%&|^]|<<0>>|<<1>>|<<2>>\",[g,b,k]),v=n(\"\\\\(<<0>>+(?:,<<0>>+)+\\\\)\",[w]),x=n(\"(?:<<0>>|<<1>>)(?:\\\\s*(?:\\\\?\\\\s*)?<<2>>)*(?:\\\\s*\\\\?)?\",[v,m,k]),$={keyword:p,punctuation:/[<>()?,.:[\\]]/},_=\"'(?:[^\\r\\n'\\\\\\\\]|\\\\\\\\.|\\\\\\\\[Uux][\\\\da-fA-F]{1,8})'\",B='\"(?:\\\\\\\\.|[^\\\\\\\\\"\\r\\n])*\"';e.languages.csharp=e.languages.extend(\"clike\",{string:[{pattern:s(\"(^|[^$\\\\\\\\])<<0>>\",['@\"(?:\"\"|\\\\\\\\[^]|[^\\\\\\\\\"])*\"(?!\")']),lookbehind:!0,greedy:!0},{pattern:s(\"(^|[^@$\\\\\\\\])<<0>>\",[B]),lookbehind:!0,greedy:!0}],\"class-name\":[{pattern:s(\"(\\\\busing\\\\s+static\\\\s+)<<0>>(?=\\\\s*;)\",[m]),lookbehind:!0,inside:$},{pattern:s(\"(\\\\busing\\\\s+<<0>>\\\\s*=\\\\s*)<<1>>(?=\\\\s*;)\",[h,x]),lookbehind:!0,inside:$},{pattern:s(\"(\\\\busing\\\\s+)<<0>>(?=\\\\s*=)\",[h]),lookbehind:!0},{pattern:s(\"(\\\\b<<0>>\\\\s+)<<1>>\",[d,f]),lookbehind:!0,inside:$},{pattern:s(\"(\\\\bcatch\\\\s*\\\\(\\\\s*)<<0>>\",[m]),lookbehind:!0,inside:$},{pattern:s(\"(\\\\bwhere\\\\s+)<<0>>\",[h]),lookbehind:!0},{pattern:s(\"(\\\\b(?:is(?:\\\\s+not)?|as)\\\\s+)<<0>>\",[y]),lookbehind:!0,inside:$},{pattern:s(\"\\\\b<<0>>(?=\\\\s+(?!<<1>>|with\\\\s*\\\\{)<<2>>(?:\\\\s*[=,;:{)\\\\]]|\\\\s+(?:in|when)\\\\b))\",[x,u,h]),inside:$}],keyword:p,number:/(?:\\b0(?:x[\\da-f_]*[\\da-f]|b[01_]*[01])|(?:\\B\\.\\d+(?:_+\\d+)*|\\b\\d+(?:_+\\d+)*(?:\\.\\d+(?:_+\\d+)*)?)(?:e[-+]?\\d+(?:_+\\d+)*)?)(?:[dflmu]|lu|ul)?\\b/i,operator:/>>=?|<<=?|[-=]>|([-+&|])\\1|~|\\?\\?=?|[-+*/%&|^!=<>]=?/,punctuation:/\\?\\.?|::|[{}[\\];(),.:]/}),e.languages.insertBefore(\"csharp\",\"number\",{range:{pattern:/\\.\\./,alias:\"operator\"}}),e.languages.insertBefore(\"csharp\",\"punctuation\",{\"named-parameter\":{pattern:s(\"([(,]\\\\s*)<<0>>(?=\\\\s*:)\",[h]),lookbehind:!0,alias:\"punctuation\"}}),e.languages.insertBefore(\"csharp\",\"class-name\",{namespace:{pattern:s(\"(\\\\b(?:namespace|using)\\\\s+)<<0>>(?:\\\\s*\\\\.\\\\s*<<0>>)*(?=\\\\s*[;{])\",[h]),lookbehind:!0,inside:{punctuation:/\\./}},\"type-expression\":{pattern:s(\"(\\\\b(?:default|sizeof|typeof)\\\\s*\\\\(\\\\s*(?!\\\\s))(?:[^()\\\\s]|\\\\s(?!\\\\s)|<<0>>)*(?=\\\\s*\\\\))\",[b]),lookbehind:!0,alias:\"class-name\",inside:$},\"return-type\":{pattern:s(\"<<0>>(?=\\\\s+(?:<<1>>\\\\s*(?:=>|[({]|\\\\.\\\\s*this\\\\s*\\\\[)|this\\\\s*\\\\[))\",[x,m]),inside:$,alias:\"class-name\"},\"constructor-invocation\":{pattern:s(\"(\\\\bnew\\\\s+)<<0>>(?=\\\\s*[[({])\",[x]),lookbehind:!0,inside:$,alias:\"class-name\"},\"generic-method\":{pattern:s(\"<<0>>\\\\s*<<1>>(?=\\\\s*\\\\()\",[h,g]),inside:{function:s(\"^<<0>>\",[h]),generic:{pattern:RegExp(g),alias:\"class-name\",inside:$}}},\"type-list\":{pattern:s(\"\\\\b((?:<<0>>\\\\s+<<1>>|record\\\\s+<<1>>\\\\s*<<5>>|where\\\\s+<<2>>)\\\\s*:\\\\s*)(?:<<3>>|<<4>>|<<1>>\\\\s*<<5>>|<<6>>)(?:\\\\s*,\\\\s*(?:<<3>>|<<4>>|<<6>>))*(?=\\\\s*(?:where|[{;]|=>|$))\",[d,f,h,x,p.source,b,\"\\\\bnew\\\\s*\\\\(\\\\s*\\\\)\"]),lookbehind:!0,inside:{\"record-arguments\":{pattern:s(\"(^(?!new\\\\s*\\\\()<<0>>\\\\s*)<<1>>\",[f,b]),lookbehind:!0,greedy:!0,inside:e.languages.csharp},keyword:p,\"class-name\":{pattern:RegExp(x),greedy:!0,inside:$},punctuation:/[,()]/}},preprocessor:{pattern:/(^[\\t ]*)#.*/m,lookbehind:!0,alias:\"property\",inside:{directive:{pattern:/(#)\\b(?:define|elif|else|endif|endregion|error|if|line|nullable|pragma|region|undef|warning)\\b/,lookbehind:!0,alias:\"keyword\"}}}});var E=B+\"|\"+_,R=n(\"/(?![*/])|//[^\\r\\n]*[\\r\\n]|/\\\\*(?:[^*]|\\\\*(?!/))*\\\\*/|<<0>>\",[E]),z=a(n(\"[^\\\"'/()]|<<0>>|\\\\(<<self>>*\\\\)\",[R]),2),S=\"\\\\b(?:assembly|event|field|method|module|param|property|return|type)\\\\b\",j=n(\"<<0>>(?:\\\\s*\\\\(<<1>>*\\\\))?\",[m,z]);e.languages.insertBefore(\"csharp\",\"class-name\",{attribute:{pattern:s(\"((?:^|[^\\\\s\\\\w>)?])\\\\s*\\\\[\\\\s*)(?:<<0>>\\\\s*:\\\\s*)?<<1>>(?:\\\\s*,\\\\s*<<1>>)*(?=\\\\s*\\\\])\",[S,j]),lookbehind:!0,greedy:!0,inside:{target:{pattern:s(\"^<<0>>(?=\\\\s*:)\",[S]),alias:\"keyword\"},\"attribute-arguments\":{pattern:s(\"\\\\(<<0>>*\\\\)\",[z]),inside:e.languages.csharp},\"class-name\":{pattern:RegExp(m),inside:{punctuation:/\\./}},punctuation:/[:,]/}}});var A=\":[^}\\r\\n]+\",F=a(n(\"[^\\\"'/()]|<<0>>|\\\\(<<self>>*\\\\)\",[R]),2),P=n(\"\\\\{(?!\\\\{)(?:(?![}:])<<0>>)*<<1>>?\\\\}\",[F,A]),U=a(n(\"[^\\\"'/()]|/(?!\\\\*)|/\\\\*(?:[^*]|\\\\*(?!/))*\\\\*/|<<0>>|\\\\(<<self>>*\\\\)\",[E]),2),Z=n(\"\\\\{(?!\\\\{)(?:(?![}:])<<0>>)*<<1>>?\\\\}\",[U,A]);function q(n,a){return{interpolation:{pattern:s(\"((?:^|[^{])(?:\\\\{\\\\{)*)<<0>>\",[n]),lookbehind:!0,inside:{\"format-string\":{pattern:s(\"(^\\\\{(?:(?![}:])<<0>>)*)<<1>>(?=\\\\}$)\",[a,A]),lookbehind:!0,inside:{punctuation:/^:/}},punctuation:/^\\{|\\}$/,expression:{pattern:/[\\s\\S]+/,alias:\"language-csharp\",inside:e.languages.csharp}}},string:/[\\s\\S]+/}}e.languages.insertBefore(\"csharp\",\"string\",{\"interpolation-string\":[{pattern:s('(^|[^\\\\\\\\])(?:\\\\$@|@\\\\$)\"(?:\"\"|\\\\\\\\[^]|\\\\{\\\\{|<<0>>|[^\\\\\\\\{\"])*\"',[P]),lookbehind:!0,greedy:!0,inside:q(P,F)},{pattern:s('(^|[^@\\\\\\\\])\\\\$\"(?:\\\\\\\\.|\\\\{\\\\{|<<0>>|[^\\\\\\\\\"{])*\"',[Z]),lookbehind:!0,greedy:!0,inside:q(Z,U)}],char:{pattern:RegExp(_),greedy:!0}}),e.languages.dotnet=e.languages.cs=e.languages.csharp}(Prism);/themes/prism-okaidia.css\u0007\u0014/**\n * okaidia theme for JavaScript, CSS and HTML\n * Loosely based on Monokai textmate theme by http://www.monokai.nl/\n * @author ocodia\n */\n\ncode[class*=\"language-\"],\npre[class*=\"language-\"] {\n\tcolor: #f8f8f2;\n\tbackground: none;\n\ttext-shadow: 0 1px rgba(0, 0, 0, 0.3);\n\tfont-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;\n\tfont-size: 1em;\n\ttext-align: left;\n\twhite-space: pre;\n\tword-spacing: normal;\n\tword-break: normal;\n\tword-wrap: normal;\n\tline-height: 1.5;\n\n\t-moz-tab-size: 4;\n\t-o-tab-size: 4;\n\ttab-size: 4;\n\n\t-webkit-hyphens: none;\n\t-moz-hyphens: none;\n\t-ms-hyphens: none;\n\thyphens: none;\n}\n\n/* Code blocks */\npre[class*=\"language-\"] {\n\tpadding: 1em;\n\tmargin: .5em 0;\n\toverflow: auto;\n\tborder-radius: 0.3em;\n}\n\n:not(pre) > code[class*=\"language-\"],\npre[class*=\"language-\"] {\n\tbackground: #272822;\n}\n\n/* Inline code */\n:not(pre) > code[class*=\"language-\"] {\n\tpadding: .1em;\n\tborder-radius: .3em;\n\twhite-space: normal;\n}\n\n.token.comment,\n.token.prolog,\n.token.doctype,\n.token.cdata {\n\tcolor: #8292a2;\n}\n\n.token.punctuation {\n\tcolor: #f8f8f2;\n}\n\n.token.namespace {\n\topacity: .7;\n}\n\n.token.property,\n.token.tag,\n.token.constant,\n.token.symbol,\n.token.deleted {\n\tcolor: #f92672;\n}\n\n.token.boolean,\n.token.number {\n\tcolor: #ae81ff;\n}\n\n.token.selector,\n.token.attr-name,\n.token.string,\n.token.char,\n.token.builtin,\n.token.inserted {\n\tcolor: #a6e22e;\n}\n\n.token.operator,\n.token.entity,\n.token.url,\n.language-css .token.string,\n.style .token.string,\n.token.variable {\n\tcolor: #f8f8f2;\n}\n\n.token.atrule,\n.token.attr-value,\n.token.function,\n.token.class-name {\n\tcolor: #e6db74;\n}\n\n.token.keyword {\n\tcolor: #66d9ef;\n}\n\n.token.regex,\n.token.important {\n\tcolor: #fd971f;\n}\n\n.token.important,\n.token.bold {\n\tfont-weight: bold;\n}\n.token.italic {\n\tfont-style: italic;\n}\n\n.token.entity {\n\tcursor: help;\n}\n;/plugins/data-uri-highlight/prism-data-uri-highlight.min.js\u0005!function(){if(\"undefined\"!=typeof Prism){var i={pattern:/(.)\\bdata:[^\\/]+\\/[^,]+,(?:(?!\\1)[\\s\\S]|\\\\\\1)+(?=\\1)/,lookbehind:!0,inside:{\"language-css\":{pattern:/(data:[^\\/]+\\/(?:[^+,]+\\+)?css,)[\\s\\S]+/,lookbehind:!0},\"language-javascript\":{pattern:/(data:[^\\/]+\\/(?:[^+,]+\\+)?javascript,)[\\s\\S]+/,lookbehind:!0},\"language-json\":{pattern:/(data:[^\\/]+\\/(?:[^+,]+\\+)?json,)[\\s\\S]+/,lookbehind:!0},\"language-markup\":{pattern:/(data:[^\\/]+\\/(?:[^+,]+\\+)?(?:html|xml),)[\\s\\S]+/,lookbehind:!0}}},a=[\"url\",\"attr-value\",\"string\"];Prism.plugins.dataURIHighlight={processGrammar:function(n){n&&!n[\"data-uri\"]&&(Prism.languages.DFS(n,(function(n,r,e){a.indexOf(e)>-1&&!Array.isArray(r)&&(r.pattern||(r=this[n]={pattern:r}),r.inside=r.inside||{},\"attr-value\"==e?Prism.languages.insertBefore(\"inside\",r.inside[\"url-link\"]?\"url-link\":\"punctuation\",{\"data-uri\":i},r):r.inside[\"url-link\"]?Prism.languages.insertBefore(\"inside\",\"url-link\",{\"data-uri\":i},r):r.inside[\"data-uri\"]=i)})),n[\"data-uri\"]=i)}},Prism.hooks.add(\"before-highlight\",(function(a){if(i.pattern.test(a.code))for(var n in i.inside)if(i.inside.hasOwnProperty(n)&&!i.inside[n].inside&&i.inside[n].pattern.test(a.code)){var r=n.match(/^language-(.+)/)[1];Prism.languages[r]&&(i.inside[n].inside={rest:(e=Prism.languages[r],Prism.plugins.autolinker&&Prism.plugins.autolinker.processGrammar(e),e)})}var e;Prism.plugins.dataURIHighlight.processGrammar(a.grammar)}))}}();/components/prism-gradle.min.js\u0005a!function(e){var n={pattern:/((?:^|[^\\\\$])(?:\\\\{2})*)\\$(?:\\w+|\\{[^{}]*\\})/,lookbehind:!0,inside:{\"interpolation-punctuation\":{pattern:/^\\$\\{?|\\}$/,alias:\"punctuation\"},expression:{pattern:/[\\s\\S]+/,inside:null}}};e.languages.gradle=e.languages.extend(\"clike\",{string:{pattern:/'''(?:[^\\\\]|\\\\[\\s\\S])*?'''|'(?:\\\\.|[^\\\\'\\r\\n])*'/,greedy:!0},keyword:/\\b(?:apply|def|dependencies|else|if|implementation|import|plugin|plugins|project|repositories|repository|sourceSets|tasks|val)\\b/,number:/\\b(?:0b[01_]+|0x[\\da-f_]+(?:\\.[\\da-f_p\\-]+)?|[\\d_]+(?:\\.[\\d_]+)?(?:e[+-]?\\d+)?)[glidf]?\\b/i,operator:{pattern:/(^|[^.])(?:~|==?~?|\\?[.:]?|\\*(?:[.=]|\\*=?)?|\\.[@&]|\\.\\.<|\\.\\.(?!\\.)|-[-=>]?|\\+[+=]?|!=?|<(?:<=?|=>?)?|>(?:>>?=?|=)?|&[&=]?|\\|[|=]?|\\/=?|\\^=?|%=?)/,lookbehind:!0},punctuation:/\\.+|[{}[\\];(),:$]/}),e.languages.insertBefore(\"gradle\",\"string\",{shebang:{pattern:/#!.+/,alias:\"comment\",greedy:!0},\"interpolation-string\":{pattern:/\"\"\"(?:[^\\\\]|\\\\[\\s\\S])*?\"\"\"|([\"/])(?:\\\\.|(?!\\1)[^\\\\\\r\\n])*\\1|\\$\\/(?:[^/$]|\\$(?:[/$]|(?![/$]))|\\/(?!\\$))*\\/\\$/,greedy:!0,inside:{interpolation:n,string:/[\\s\\S]+/}}}),e.languages.insertBefore(\"gradle\",\"punctuation\",{\"spock-block\":/\\b(?:and|cleanup|expect|given|setup|then|when|where):/}),e.languages.insertBefore(\"gradle\",\"function\",{annotation:{pattern:/(^|[^.])@\\w+/,lookbehind:!0,alias:\"punctuation\"}}),n.inside.expression.inside=e.languages.gradle}(Prism);/components/prism-moonscript.js\tVPrism.languages.moonscript = {\n\t'comment': /--.*/,\n\t'string': [\n\t\t{\n\t\t\tpattern: /'[^']*'|\\[(=*)\\[[\\s\\S]*?\\]\\1\\]/,\n\t\t\tgreedy: true\n\t\t},\n\t\t{\n\t\t\tpattern: /\"[^\"]*\"/,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'interpolation': {\n\t\t\t\t\tpattern: /#\\{[^{}]*\\}/,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'moonscript': {\n\t\t\t\t\t\t\tpattern: /(^#\\{)[\\s\\S]+(?=\\})/,\n\t\t\t\t\t\t\tlookbehind: true,\n\t\t\t\t\t\t\tinside: null // see beow\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'interpolation-punctuation': {\n\t\t\t\t\t\t\tpattern: /#\\{|\\}/,\n\t\t\t\t\t\t\talias: 'punctuation'\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t],\n\t'class-name': [\n\t\t{\n\t\t\tpattern: /(\\b(?:class|extends)[ \\t]+)\\w+/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t// class-like names start with a capital letter\n\t\t/\\b[A-Z]\\w*/\n\t],\n\t'keyword': /\\b(?:class|continue|do|else|elseif|export|extends|for|from|if|import|in|local|nil|return|self|super|switch|then|unless|using|when|while|with)\\b/,\n\t'variable': /@@?\\w*/,\n\t'property': {\n\t\tpattern: /\\b(?!\\d)\\w+(?=:)|(:)(?!\\d)\\w+/,\n\t\tlookbehind: true\n\t},\n\t'function': {\n\t\tpattern: /\\b(?:_G|_VERSION|assert|collectgarbage|coroutine\\.(?:create|resume|running|status|wrap|yield)|debug\\.(?:debug|getfenv|gethook|getinfo|getlocal|getmetatable|getregistry|getupvalue|setfenv|sethook|setlocal|setmetatable|setupvalue|traceback)|dofile|error|getfenv|getmetatable|io\\.(?:close|flush|input|lines|open|output|popen|read|stderr|stdin|stdout|tmpfile|type|write)|ipairs|load|loadfile|loadstring|math\\.(?:abs|acos|asin|atan|atan2|ceil|cos|cosh|deg|exp|floor|fmod|frexp|ldexp|log|log10|max|min|modf|pi|pow|rad|random|randomseed|sin|sinh|sqrt|tan|tanh)|module|next|os\\.(?:clock|date|difftime|execute|exit|getenv|remove|rename|setlocale|time|tmpname)|package\\.(?:cpath|loaded|loadlib|path|preload|seeall)|pairs|pcall|print|rawequal|rawget|rawset|require|select|setfenv|setmetatable|string\\.(?:byte|char|dump|find|format|gmatch|gsub|len|lower|match|rep|reverse|sub|upper)|table\\.(?:concat|insert|maxn|remove|sort)|tonumber|tostring|type|unpack|xpcall)\\b/,\n\t\tinside: {\n\t\t\t'punctuation': /\\./\n\t\t}\n\t},\n\t'boolean': /\\b(?:false|true)\\b/,\n\t'number': /(?:\\B\\.\\d+|\\b\\d+\\.\\d+|\\b\\d+(?=[eE]))(?:[eE][-+]?\\d+)?\\b|\\b(?:0x[a-fA-F\\d]+|\\d+)(?:U?LL)?\\b/,\n\t'operator': /\\.{3}|[-=]>|~=|(?:[-+*/%<>!=]|\\.\\.)=?|[:#^]|\\b(?:and|or)\\b=?|\\b(?:not)\\b/,\n\t'punctuation': /[.,()[\\]{}\\\\]/\n};\n\nPrism.languages.moonscript.string[1].inside.interpolation.inside.moonscript.inside = Prism.languages.moonscript;\n\nPrism.languages.moon = Prism.languages.moonscript;\n/components/prism-wolfram.js\u0004\rPrism.languages.wolfram = {\n\t'comment': // Allow one level of nesting - note: regex taken from applescipt\n\t\t/\\(\\*(?:\\(\\*(?:[^*]|\\*(?!\\)))*\\*\\)|(?!\\(\\*)[\\s\\S])*?\\*\\)/,\n\t'string': {\n\t\tpattern: /\"(?:\\\\.|[^\"\\\\\\r\\n])*\"/,\n\t\tgreedy: true\n\t},\n\t'keyword': /\\b(?:Abs|AbsArg|Accuracy|Block|Do|For|Function|If|Manipulate|Module|Nest|NestList|None|Return|Switch|Table|Which|While)\\b/,\n\t'context': {\n\t\tpattern: /\\b\\w+`+\\w*/,\n\t\talias: 'class-name'\n\t},\n\t'blank': {\n\t\tpattern: /\\b\\w+_\\b/,\n\t\talias: 'regex'\n\t},\n\t'global-variable': {\n\t\tpattern: /\\$\\w+/,\n\t\talias: 'variable'\n\t},\n\t'boolean': /\\b(?:False|True)\\b/,\n\t'number': /(?:\\b(?=\\d)|\\B(?=\\.))(?:0[bo])?(?:(?:\\d|0x[\\da-f])[\\da-f]*(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?j?\\b/i,\n\t'operator': /\\/\\.|;|=\\.|\\^=|\\^:=|:=|<<|>>|<\\||\\|>|:>|\\|->|->|<-|@@@|@@|@|\\/@|=!=|===|==|=|\\+|-|\\[\\/-+%=\\]=?|!=|\\*\\*?=?|\\/\\/?=?|<[<=>]?|>[=>]?|[&|^~]/,\n\t'punctuation': /[{}[\\];(),.:]/\n};\n\nPrism.languages.mathematica = Prism.languages.wolfram;\nPrism.languages.wl = Prism.languages.wolfram;\nPrism.languages.nb = Prism.languages.wolfram;\n/themes/prism-coy.min.css\u000bcode[class*=language-],pre[class*=language-]{color:#000;background:0 0;font-family:Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}pre[class*=language-]{position:relative;margin:.5em 0;overflow:visible;padding:1px}pre[class*=language-]>code{position:relative;z-index:1;border-left:10px solid #358ccb;box-shadow:-1px 0 0 0 #358ccb,0 0 0 1px #dfdfdf;background-color:#fdfdfd;background-image:linear-gradient(transparent 50%,rgba(69,142,209,.04) 50%);background-size:3em 3em;background-origin:content-box;background-attachment:local}code[class*=language-]{max-height:inherit;height:inherit;padding:0 1em;display:block;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background-color:#fdfdfd;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin-bottom:1em}:not(pre)>code[class*=language-]{position:relative;padding:.2em;border-radius:.3em;color:#c92c2c;border:1px solid rgba(0,0,0,.1);display:inline;white-space:normal}pre[class*=language-]:after,pre[class*=language-]:before{content:'';display:block;position:absolute;bottom:.75em;left:.18em;width:40%;height:20%;max-height:13em;box-shadow:0 13px 8px #979797;-webkit-transform:rotate(-2deg);-moz-transform:rotate(-2deg);-ms-transform:rotate(-2deg);-o-transform:rotate(-2deg);transform:rotate(-2deg)}pre[class*=language-]:after{right:.75em;left:auto;-webkit-transform:rotate(2deg);-moz-transform:rotate(2deg);-ms-transform:rotate(2deg);-o-transform:rotate(2deg);transform:rotate(2deg)}.token.block-comment,.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#7d8b99}.token.punctuation{color:#5f6364}.token.boolean,.token.constant,.token.deleted,.token.function-name,.token.number,.token.property,.token.symbol,.token.tag{color:#c92c2c}.token.attr-name,.token.builtin,.token.char,.token.function,.token.inserted,.token.selector,.token.string{color:#2f9c0a}.token.entity,.token.operator,.token.url,.token.variable{color:#a67f59;background:rgba(255,255,255,.5)}.token.atrule,.token.attr-value,.token.class-name,.token.keyword{color:#1990b8}.token.important,.token.regex{color:#e90}.language-css .token.string,.style .token.string{color:#a67f59;background:rgba(255,255,255,.5)}.token.important{font-weight:400}.token.bold{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.token.namespace{opacity:.7}@media screen and (max-width:767px){pre[class*=language-]:after,pre[class*=language-]:before{bottom:14px;box-shadow:none}}pre[class*=language-].line-numbers.line-numbers{padding-left:0}pre[class*=language-].line-numbers.line-numbers code{padding-left:3.8em}pre[class*=language-].line-numbers.line-numbers .line-numbers-rows{left:0}pre[class*=language-][data-line]{padding-top:0;padding-bottom:0;padding-left:0}pre[data-line] code{position:relative;padding-left:4em}pre .line-highlight{margin-top:0}!/components/prism-squirrel.min.js\u0004EPrism.languages.squirrel=Prism.languages.extend(\"clike\",{comment:[Prism.languages.clike.comment[0],{pattern:/(^|[^\\\\:])(?:\\/\\/|#).*/,lookbehind:!0,greedy:!0}],string:{pattern:/(^|[^\\\\\"'@])(?:@\"(?:[^\"]|\"\")*\"(?!\")|\"(?:[^\\\\\\r\\n\"]|\\\\.)*\")/,lookbehind:!0,greedy:!0},\"class-name\":{pattern:/(\\b(?:class|enum|extends|instanceof)\\s+)\\w+(?:\\.\\w+)*/,lookbehind:!0,inside:{punctuation:/\\./}},keyword:/\\b(?:__FILE__|__LINE__|base|break|case|catch|class|clone|const|constructor|continue|default|delete|else|enum|extends|for|foreach|function|if|in|instanceof|local|null|resume|return|static|switch|this|throw|try|typeof|while|yield)\\b/,number:/\\b(?:0x[0-9a-fA-F]+|\\d+(?:\\.(?:\\d+|[eE][+-]?\\d+))?)\\b/,operator:/\\+\\+|--|<=>|<[-<]|>>>?|&&?|\\|\\|?|[-+*/%!=<>]=?|[~^]|::?/,punctuation:/[(){}\\[\\],;.]/}),Prism.languages.insertBefore(\"squirrel\",\"string\",{char:{pattern:/(^|[^\\\\\"'])'(?:[^\\\\']|\\\\(?:[xuU][0-9a-fA-F]{0,8}|[\\s\\S]))'/,lookbehind:!0,greedy:!0}}),Prism.languages.insertBefore(\"squirrel\",\"operator\",{\"attribute-punctuation\":{pattern:/<\\/|\\/>/,alias:\"important\"},lambda:{pattern:/@(?=\\()/,alias:\"operator\"}});/components/prism-chaiscript.js\u00067Prism.languages.chaiscript = Prism.languages.extend('clike', {\n\t'string': {\n\t\tpattern: /(^|[^\\\\])'(?:[^'\\\\]|\\\\[\\s\\S])*'/,\n\t\tlookbehind: true,\n\t\tgreedy: true\n\t},\n\t'class-name': [\n\t\t{\n\t\t\t// e.g. class Rectangle { ... }\n\t\t\tpattern: /(\\bclass\\s+)\\w+/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t{\n\t\t\t// e.g. attr Rectangle::height, def Rectangle::area() { ... }\n\t\t\tpattern: /(\\b(?:attr|def)\\s+)\\w+(?=\\s*::)/,\n\t\t\tlookbehind: true\n\t\t}\n\t],\n\t'keyword': /\\b(?:attr|auto|break|case|catch|class|continue|def|default|else|finally|for|fun|global|if|return|switch|this|try|var|while)\\b/,\n\t'number': [\n\t\tPrism.languages.cpp.number,\n\t\t/\\b(?:Infinity|NaN)\\b/\n\t],\n\t'operator': />>=?|<<=?|\\|\\||&&|:[:=]?|--|\\+\\+|[=!<>+\\-*/%|&^]=?|[?~]|`[^`\\r\\n]{1,4}`/,\n});\n\nPrism.languages.insertBefore('chaiscript', 'operator', {\n\t'parameter-type': {\n\t\t// e.g. def foo(int x, Vector y) {...}\n\t\tpattern: /([,(]\\s*)\\w+(?=\\s+\\w)/,\n\t\tlookbehind: true,\n\t\talias: 'class-name'\n\t},\n});\n\nPrism.languages.insertBefore('chaiscript', 'string', {\n\t'string-interpolation': {\n\t\tpattern: /(^|[^\\\\])\"(?:[^\"$\\\\]|\\\\[\\s\\S]|\\$(?!\\{)|\\$\\{(?:[^{}]|\\{(?:[^{}]|\\{[^{}]*\\})*\\})*\\})*\"/,\n\t\tlookbehind: true,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'interpolation': {\n\t\t\t\tpattern: /((?:^|[^\\\\])(?:\\\\{2})*)\\$\\{(?:[^{}]|\\{(?:[^{}]|\\{[^{}]*\\})*\\})*\\}/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'interpolation-expression': {\n\t\t\t\t\t\tpattern: /(^\\$\\{)[\\s\\S]+(?=\\}$)/,\n\t\t\t\t\t\tlookbehind: true,\n\t\t\t\t\t\tinside: Prism.languages.chaiscript\n\t\t\t\t\t},\n\t\t\t\t\t'interpolation-punctuation': {\n\t\t\t\t\t\tpattern: /^\\$\\{|\\}$/,\n\t\t\t\t\t\talias: 'punctuation'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t'string': /[\\s\\S]+/\n\t\t}\n\t},\n});\n'/components/prism-icu-message-format.js\u000f// https://unicode-org.github.io/icu/userguide/format_parse/messages/\n// https://unicode-org.github.io/icu-docs/apidoc/released/icu4j/com/ibm/icu/text/MessageFormat.html\n\n(function (Prism) {\n\n\t/**\n\t * @param {string} source\n\t * @param {number} level\n\t * @returns {string}\n\t */\n\tfunction nested(source, level) {\n\t\tif (level <= 0) {\n\t\t\treturn /[]/.source;\n\t\t} else {\n\t\t\treturn source.replace(/<SELF>/g, function () { return nested(source, level - 1); });\n\t\t}\n\t}\n\n\tvar stringPattern = /'[{}:=,](?:[^']|'')*'(?!')/;\n\n\tvar escape = {\n\t\tpattern: /''/,\n\t\tgreedy: true,\n\t\talias: 'operator'\n\t};\n\tvar string = {\n\t\tpattern: stringPattern,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'escape': escape\n\t\t}\n\t};\n\n\tvar argumentSource = nested(\n\t\t/\\{(?:[^{}']|'(?![{},'])|''|<STR>|<SELF>)*\\}/.source\n\t\t\t.replace(/<STR>/g, function () { return stringPattern.source; }),\n\t\t8\n\t);\n\n\tvar nestedMessage = {\n\t\tpattern: RegExp(argumentSource),\n\t\tinside: {\n\t\t\t'message': {\n\t\t\t\tpattern: /^(\\{)[\\s\\S]+(?=\\}$)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: null // see below\n\t\t\t},\n\t\t\t'message-delimiter': {\n\t\t\t\tpattern: /./,\n\t\t\t\talias: 'punctuation'\n\t\t\t}\n\t\t}\n\t};\n\n\tPrism.languages['icu-message-format'] = {\n\t\t'argument': {\n\t\t\tpattern: RegExp(argumentSource),\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'content': {\n\t\t\t\t\tpattern: /^(\\{)[\\s\\S]+(?=\\}$)/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'argument-name': {\n\t\t\t\t\t\t\tpattern: /^(\\s*)[^{}:=,\\s]+/,\n\t\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'choice-style': {\n\t\t\t\t\t\t\t// https://unicode-org.github.io/icu-docs/apidoc/released/icu4c/classicu_1_1ChoiceFormat.html#details\n\t\t\t\t\t\t\tpattern: /^(\\s*,\\s*choice\\s*,\\s*)\\S(?:[\\s\\S]*\\S)?/,\n\t\t\t\t\t\t\tlookbehind: true,\n\t\t\t\t\t\t\tinside: {\n\t\t\t\t\t\t\t\t'punctuation': /\\|/,\n\t\t\t\t\t\t\t\t'range': {\n\t\t\t\t\t\t\t\t\tpattern: /^(\\s*)[+-]?(?:\\d+(?:\\.\\d*)?|\\u221e)\\s*[<#\\u2264]/,\n\t\t\t\t\t\t\t\t\tlookbehind: true,\n\t\t\t\t\t\t\t\t\tinside: {\n\t\t\t\t\t\t\t\t\t\t'operator': /[<#\\u2264]/,\n\t\t\t\t\t\t\t\t\t\t'number': /\\S+/\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\trest: null // see below\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'plural-style': {\n\t\t\t\t\t\t\t// https://unicode-org.github.io/icu-docs/apidoc/released/icu4j/com/ibm/icu/text/PluralFormat.html#:~:text=Patterns%20and%20Their%20Interpretation\n\t\t\t\t\t\t\tpattern: /^(\\s*,\\s*(?:plural|selectordinal)\\s*,\\s*)\\S(?:[\\s\\S]*\\S)?/,\n\t\t\t\t\t\t\tlookbehind: true,\n\t\t\t\t\t\t\tinside: {\n\t\t\t\t\t\t\t\t'offset': /^offset:\\s*\\d+/,\n\t\t\t\t\t\t\t\t'nested-message': nestedMessage,\n\t\t\t\t\t\t\t\t'selector': {\n\t\t\t\t\t\t\t\t\tpattern: /=\\d+|[^{}:=,\\s]+/,\n\t\t\t\t\t\t\t\t\tinside: {\n\t\t\t\t\t\t\t\t\t\t'keyword': /^(?:few|many|one|other|two|zero)$/\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'select-style': {\n\t\t\t\t\t\t\t// https://unicode-org.github.io/icu-docs/apidoc/released/icu4j/com/ibm/icu/text/SelectFormat.html#:~:text=Patterns%20and%20Their%20Interpretation\n\t\t\t\t\t\t\tpattern: /^(\\s*,\\s*select\\s*,\\s*)\\S(?:[\\s\\S]*\\S)?/,\n\t\t\t\t\t\t\tlookbehind: true,\n\t\t\t\t\t\t\tinside: {\n\t\t\t\t\t\t\t\t'nested-message': nestedMessage,\n\t\t\t\t\t\t\t\t'selector': {\n\t\t\t\t\t\t\t\t\tpattern: /[^{}:=,\\s]+/,\n\t\t\t\t\t\t\t\t\tinside: {\n\t\t\t\t\t\t\t\t\t\t'keyword': /^other$/\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'keyword': /\\b(?:choice|plural|select|selectordinal)\\b/,\n\t\t\t\t\t\t'arg-type': {\n\t\t\t\t\t\t\tpattern: /\\b(?:date|duration|number|ordinal|spellout|time)\\b/,\n\t\t\t\t\t\t\talias: 'keyword'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'arg-skeleton': {\n\t\t\t\t\t\t\tpattern: /(,\\s*)::[^{}:=,\\s]+/,\n\t\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'arg-style': {\n\t\t\t\t\t\t\tpattern: /(,\\s*)(?:currency|full|integer|long|medium|percent|short)(?=\\s*$)/,\n\t\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'arg-style-text': {\n\t\t\t\t\t\t\tpattern: RegExp(/(^\\s*,\\s*(?=\\S))/.source + nested(/(?:[^{}']|'[^']*'|\\{(?:<SELF>)?\\})+/.source, 8) + '$'),\n\t\t\t\t\t\t\tlookbehind: true,\n\t\t\t\t\t\t\talias: 'string'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'punctuation': /,/\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t'argument-delimiter': {\n\t\t\t\t\tpattern: /./,\n\t\t\t\t\talias: 'operator'\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t'escape': escape,\n\t\t'string': string\n\t};\n\n\tnestedMessage.inside.message.inside = Prism.languages['icu-message-format'];\n\tPrism.languages['icu-message-format'].argument.inside.content.inside['choice-style'].inside.rest = Prism.languages['icu-message-format'];\n\n}(Prism));\n'/plugins/previewers/prism-previewers.jsN(function () {\n\n\tif (typeof Prism === 'undefined' || typeof document === 'undefined' || !Function.prototype.bind) {\n\t\treturn;\n\t}\n\n\tvar previewers = {\n\t\t// gradient must be defined before color and angle\n\t\t'gradient': {\n\t\t\tcreate: (function () {\n\n\t\t\t\t// Stores already processed gradients so that we don't\n\t\t\t\t// make the conversion every time the previewer is shown\n\t\t\t\tvar cache = {};\n\n\t\t\t\t/**\n\t\t\t\t * Returns a W3C-valid linear gradient\n\t\t\t\t *\n\t\t\t\t * @param {string} prefix Vendor prefix if any (\"-moz-\", \"-webkit-\", etc.)\n\t\t\t\t * @param {string} func Gradient function name (\"linear-gradient\")\n\t\t\t\t * @param {string[]} values Array of the gradient function parameters ([\"0deg\", \"red 0%\", \"blue 100%\"])\n\t\t\t\t */\n\t\t\t\tvar convertToW3CLinearGradient = function (prefix, func, values) {\n\t\t\t\t\t// Default value for angle\n\t\t\t\t\tvar angle = '180deg';\n\n\t\t\t\t\tif (/^(?:-?(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:deg|rad)|to\\b|top|right|bottom|left)/.test(values[0])) {\n\t\t\t\t\t\tangle = values.shift();\n\t\t\t\t\t\tif (angle.indexOf('to ') < 0) {\n\t\t\t\t\t\t\t// Angle uses old keywords\n\t\t\t\t\t\t\t// W3C syntax uses \"to\" + opposite keywords\n\t\t\t\t\t\t\tif (angle.indexOf('top') >= 0) {\n\t\t\t\t\t\t\t\tif (angle.indexOf('left') >= 0) {\n\t\t\t\t\t\t\t\t\tangle = 'to bottom right';\n\t\t\t\t\t\t\t\t} else if (angle.indexOf('right') >= 0) {\n\t\t\t\t\t\t\t\t\tangle = 'to bottom left';\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tangle = 'to bottom';\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if (angle.indexOf('bottom') >= 0) {\n\t\t\t\t\t\t\t\tif (angle.indexOf('left') >= 0) {\n\t\t\t\t\t\t\t\t\tangle = 'to top right';\n\t\t\t\t\t\t\t\t} else if (angle.indexOf('right') >= 0) {\n\t\t\t\t\t\t\t\t\tangle = 'to top left';\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tangle = 'to top';\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if (angle.indexOf('left') >= 0) {\n\t\t\t\t\t\t\t\tangle = 'to right';\n\t\t\t\t\t\t\t} else if (angle.indexOf('right') >= 0) {\n\t\t\t\t\t\t\t\tangle = 'to left';\n\t\t\t\t\t\t\t} else if (prefix) {\n\t\t\t\t\t\t\t\t// Angle is shifted by 90deg in prefixed gradients\n\t\t\t\t\t\t\t\tif (angle.indexOf('deg') >= 0) {\n\t\t\t\t\t\t\t\t\tangle = (90 - parseFloat(angle)) + 'deg';\n\t\t\t\t\t\t\t\t} else if (angle.indexOf('rad') >= 0) {\n\t\t\t\t\t\t\t\t\tangle = (Math.PI / 2 - parseFloat(angle)) + 'rad';\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn func + '(' + angle + ',' + values.join(',') + ')';\n\t\t\t\t};\n\n\t\t\t\t/**\n\t\t\t\t * Returns a W3C-valid radial gradient\n\t\t\t\t *\n\t\t\t\t * @param {string} prefix Vendor prefix if any (\"-moz-\", \"-webkit-\", etc.)\n\t\t\t\t * @param {string} func Gradient function name (\"linear-gradient\")\n\t\t\t\t * @param {string[]} values Array of the gradient function parameters ([\"0deg\", \"red 0%\", \"blue 100%\"])\n\t\t\t\t */\n\t\t\t\tvar convertToW3CRadialGradient = function (prefix, func, values) {\n\t\t\t\t\tif (values[0].indexOf('at') < 0) {\n\t\t\t\t\t\t// Looks like old syntax\n\n\t\t\t\t\t\t// Default values\n\t\t\t\t\t\tvar position = 'center';\n\t\t\t\t\t\tvar shape = 'ellipse';\n\t\t\t\t\t\tvar size = 'farthest-corner';\n\n\t\t\t\t\t\tif (/\\b(?:bottom|center|left|right|top)\\b|^\\d+/.test(values[0])) {\n\t\t\t\t\t\t\t// Found a position\n\t\t\t\t\t\t\t// Remove angle value, if any\n\t\t\t\t\t\t\tposition = values.shift().replace(/\\s*-?\\d+(?:deg|rad)\\s*/, '');\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (/\\b(?:circle|closest|contain|cover|ellipse|farthest)\\b/.test(values[0])) {\n\t\t\t\t\t\t\t// Found a shape and/or size\n\t\t\t\t\t\t\tvar shapeSizeParts = values.shift().split(/\\s+/);\n\t\t\t\t\t\t\tif (shapeSizeParts[0] && (shapeSizeParts[0] === 'circle' || shapeSizeParts[0] === 'ellipse')) {\n\t\t\t\t\t\t\t\tshape = shapeSizeParts.shift();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (shapeSizeParts[0]) {\n\t\t\t\t\t\t\t\tsize = shapeSizeParts.shift();\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Old keywords are converted to their synonyms\n\t\t\t\t\t\t\tif (size === 'cover') {\n\t\t\t\t\t\t\t\tsize = 'farthest-corner';\n\t\t\t\t\t\t\t} else if (size === 'contain') {\n\t\t\t\t\t\t\t\tsize = 'clothest-side';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn func + '(' + shape + ' ' + size + ' at ' + position + ',' + values.join(',') + ')';\n\t\t\t\t\t}\n\t\t\t\t\treturn func + '(' + values.join(',') + ')';\n\t\t\t\t};\n\n\t\t\t\t/**\n\t\t\t\t * Converts a gradient to a W3C-valid one\n\t\t\t\t * Does not support old webkit syntax (-webkit-gradient(linear...) and -webkit-gradient(radial...))\n\t\t\t\t *\n\t\t\t\t * @param {string} gradient The CSS gradient\n\t\t\t\t */\n\t\t\t\tvar convertToW3CGradient = function (gradient) {\n\t\t\t\t\tif (cache[gradient]) {\n\t\t\t\t\t\treturn cache[gradient];\n\t\t\t\t\t}\n\t\t\t\t\tvar parts = gradient.match(/^(\\b|\\B-[a-z]{1,10}-)((?:repeating-)?(?:linear|radial)-gradient)/);\n\t\t\t\t\t// \"\", \"-moz-\", etc.\n\t\t\t\t\tvar prefix = parts && parts[1];\n\t\t\t\t\t// \"linear-gradient\", \"radial-gradient\", etc.\n\t\t\t\t\tvar func = parts && parts[2];\n\n\t\t\t\t\tvar values = gradient.replace(/^(?:\\b|\\B-[a-z]{1,10}-)(?:repeating-)?(?:linear|radial)-gradient\\(|\\)$/g, '').split(/\\s*,\\s*/);\n\n\t\t\t\t\tif (func.indexOf('linear') >= 0) {\n\t\t\t\t\t\treturn cache[gradient] = convertToW3CLinearGradient(prefix, func, values);\n\t\t\t\t\t} else if (func.indexOf('radial') >= 0) {\n\t\t\t\t\t\treturn cache[gradient] = convertToW3CRadialGradient(prefix, func, values);\n\t\t\t\t\t}\n\t\t\t\t\treturn cache[gradient] = func + '(' + values.join(',') + ')';\n\t\t\t\t};\n\n\t\t\t\treturn function () {\n\t\t\t\t\tnew Prism.plugins.Previewer('gradient', function (value) {\n\t\t\t\t\t\tthis.firstChild.style.backgroundImage = '';\n\t\t\t\t\t\tthis.firstChild.style.backgroundImage = convertToW3CGradient(value);\n\t\t\t\t\t\treturn !!this.firstChild.style.backgroundImage;\n\t\t\t\t\t}, '*', function () {\n\t\t\t\t\t\tthis._elt.innerHTML = '<div></div>';\n\t\t\t\t\t});\n\t\t\t\t};\n\t\t\t}()),\n\t\t\ttokens: {\n\t\t\t\t'gradient': {\n\t\t\t\t\tpattern: /(?:\\b|\\B-[a-z]{1,10}-)(?:repeating-)?(?:linear|radial)-gradient\\((?:(?:hsl|rgb)a?\\(.+?\\)|[^\\)])+\\)/gi,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'function': /[\\w-]+(?=\\()/,\n\t\t\t\t\t\t'punctuation': /[(),]/\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tlanguages: {\n\t\t\t\t'css': true,\n\t\t\t\t'less': true,\n\t\t\t\t'sass': [\n\t\t\t\t\t{\n\t\t\t\t\t\tlang: 'sass',\n\t\t\t\t\t\tbefore: 'punctuation',\n\t\t\t\t\t\tinside: 'inside',\n\t\t\t\t\t\troot: Prism.languages.sass && Prism.languages.sass['variable-line']\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tlang: 'sass',\n\t\t\t\t\t\tbefore: 'punctuation',\n\t\t\t\t\t\tinside: 'inside',\n\t\t\t\t\t\troot: Prism.languages.sass && Prism.languages.sass['property-line']\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t'scss': true,\n\t\t\t\t'stylus': [\n\t\t\t\t\t{\n\t\t\t\t\t\tlang: 'stylus',\n\t\t\t\t\t\tbefore: 'func',\n\t\t\t\t\t\tinside: 'rest',\n\t\t\t\t\t\troot: Prism.languages.stylus && Prism.languages.stylus['property-declaration'].inside\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tlang: 'stylus',\n\t\t\t\t\t\tbefore: 'func',\n\t\t\t\t\t\tinside: 'rest',\n\t\t\t\t\t\troot: Prism.languages.stylus && Prism.languages.stylus['variable-declaration'].inside\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t},\n\t\t'angle': {\n\t\t\tcreate: function () {\n\t\t\t\tnew Prism.plugins.Previewer('angle', function (value) {\n\t\t\t\t\tvar num = parseFloat(value);\n\t\t\t\t\tvar unit = value.match(/[a-z]+$/i);\n\t\t\t\t\tvar max; var percentage;\n\t\t\t\t\tif (!num || !unit) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tunit = unit[0];\n\n\t\t\t\t\tswitch (unit) {\n\t\t\t\t\t\tcase 'deg':\n\t\t\t\t\t\t\tmax = 360;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'grad':\n\t\t\t\t\t\t\tmax = 400;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'rad':\n\t\t\t\t\t\t\tmax = 2 * Math.PI;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'turn':\n\t\t\t\t\t\t\tmax = 1;\n\t\t\t\t\t}\n\n\t\t\t\t\tpercentage = 100 * num / max;\n\t\t\t\t\tpercentage %= 100;\n\n\t\t\t\t\tthis[(num < 0 ? 'set' : 'remove') + 'Attribute']('data-negative', '');\n\t\t\t\t\tthis.querySelector('circle').style.strokeDasharray = Math.abs(percentage) + ',500';\n\t\t\t\t\treturn true;\n\t\t\t\t}, '*', function () {\n\t\t\t\t\tthis._elt.innerHTML = '<svg viewBox=\"0 0 64 64\">' +\n\t\t\t\t\t\t'<circle r=\"16\" cy=\"32\" cx=\"32\"></circle>' +\n\t\t\t\t\t\t'</svg>';\n\t\t\t\t});\n\t\t\t},\n\t\t\ttokens: {\n\t\t\t\t'angle': /(?:\\b|\\B-|(?=\\B\\.))(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:deg|g?rad|turn)\\b/i\n\t\t\t},\n\t\t\tlanguages: {\n\t\t\t\t'css': true,\n\t\t\t\t'less': true,\n\t\t\t\t'markup': {\n\t\t\t\t\tlang: 'markup',\n\t\t\t\t\tbefore: 'punctuation',\n\t\t\t\t\tinside: 'inside',\n\t\t\t\t\troot: Prism.languages.markup && Prism.languages.markup['tag'].inside['attr-value']\n\t\t\t\t},\n\t\t\t\t'sass': [\n\t\t\t\t\t{\n\t\t\t\t\t\tlang: 'sass',\n\t\t\t\t\t\tinside: 'inside',\n\t\t\t\t\t\troot: Prism.languages.sass && Prism.languages.sass['property-line']\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tlang: 'sass',\n\t\t\t\t\t\tbefore: 'operator',\n\t\t\t\t\t\tinside: 'inside',\n\t\t\t\t\t\troot: Prism.languages.sass && Prism.languages.sass['variable-line']\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t'scss': true,\n\t\t\t\t'stylus': [\n\t\t\t\t\t{\n\t\t\t\t\t\tlang: 'stylus',\n\t\t\t\t\t\tbefore: 'func',\n\t\t\t\t\t\tinside: 'rest',\n\t\t\t\t\t\troot: Prism.languages.stylus && Prism.languages.stylus['property-declaration'].inside\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tlang: 'stylus',\n\t\t\t\t\t\tbefore: 'func',\n\t\t\t\t\t\tinside: 'rest',\n\t\t\t\t\t\troot: Prism.languages.stylus && Prism.languages.stylus['variable-declaration'].inside\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t},\n\t\t'color': {\n\t\t\tcreate: function () {\n\t\t\t\tnew Prism.plugins.Previewer('color', function (value) {\n\t\t\t\t\tthis.style.backgroundColor = '';\n\t\t\t\t\tthis.style.backgroundColor = value;\n\t\t\t\t\treturn !!this.style.backgroundColor;\n\t\t\t\t});\n\t\t\t},\n\t\t\ttokens: {\n\t\t\t\t'color': [Prism.languages.css['hexcode']].concat(Prism.languages.css['color'])\n\t\t\t},\n\t\t\tlanguages: {\n\t\t\t\t// CSS extras is required, so css and scss are not necessary\n\t\t\t\t'css': false,\n\t\t\t\t'less': true,\n\t\t\t\t'markup': {\n\t\t\t\t\tlang: 'markup',\n\t\t\t\t\tbefore: 'punctuation',\n\t\t\t\t\tinside: 'inside',\n\t\t\t\t\troot: Prism.languages.markup && Prism.languages.markup['tag'].inside['attr-value']\n\t\t\t\t},\n\t\t\t\t'sass': [\n\t\t\t\t\t{\n\t\t\t\t\t\tlang: 'sass',\n\t\t\t\t\t\tbefore: 'punctuation',\n\t\t\t\t\t\tinside: 'inside',\n\t\t\t\t\t\troot: Prism.languages.sass && Prism.languages.sass['variable-line']\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tlang: 'sass',\n\t\t\t\t\t\tinside: 'inside',\n\t\t\t\t\t\troot: Prism.languages.sass && Prism.languages.sass['property-line']\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t'scss': false,\n\t\t\t\t'stylus': [\n\t\t\t\t\t{\n\t\t\t\t\t\tlang: 'stylus',\n\t\t\t\t\t\tbefore: 'hexcode',\n\t\t\t\t\t\tinside: 'rest',\n\t\t\t\t\t\troot: Prism.languages.stylus && Prism.languages.stylus['property-declaration'].inside\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tlang: 'stylus',\n\t\t\t\t\t\tbefore: 'hexcode',\n\t\t\t\t\t\tinside: 'rest',\n\t\t\t\t\t\troot: Prism.languages.stylus && Prism.languages.stylus['variable-declaration'].inside\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t},\n\t\t'easing': {\n\t\t\tcreate: function () {\n\t\t\t\tnew Prism.plugins.Previewer('easing', function (value) {\n\n\t\t\t\t\tvalue = {\n\t\t\t\t\t\t'linear': '0,0,1,1',\n\t\t\t\t\t\t'ease': '.25,.1,.25,1',\n\t\t\t\t\t\t'ease-in': '.42,0,1,1',\n\t\t\t\t\t\t'ease-out': '0,0,.58,1',\n\t\t\t\t\t\t'ease-in-out': '.42,0,.58,1'\n\t\t\t\t\t}[value] || value;\n\n\t\t\t\t\tvar p = value.match(/-?(?:\\d+(?:\\.\\d+)?|\\.\\d+)/g);\n\n\t\t\t\t\tif (p.length === 4) {\n\t\t\t\t\t\tp = p.map(function (p, i) { return (i % 2 ? 1 - p : p) * 100; });\n\n\t\t\t\t\t\tthis.querySelector('path').setAttribute('d', 'M0,100 C' + p[0] + ',' + p[1] + ', ' + p[2] + ',' + p[3] + ', 100,0');\n\n\t\t\t\t\t\tvar lines = this.querySelectorAll('line');\n\t\t\t\t\t\tlines[0].setAttribute('x2', p[0]);\n\t\t\t\t\t\tlines[0].setAttribute('y2', p[1]);\n\t\t\t\t\t\tlines[1].setAttribute('x2', p[2]);\n\t\t\t\t\t\tlines[1].setAttribute('y2', p[3]);\n\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn false;\n\t\t\t\t}, '*', function () {\n\t\t\t\t\tthis._elt.innerHTML = '<svg viewBox=\"-20 -20 140 140\" width=\"100\" height=\"100\">' +\n\t\t\t\t\t\t'<defs>' +\n\t\t\t\t\t\t'<marker id=\"prism-previewer-easing-marker\" viewBox=\"0 0 4 4\" refX=\"2\" refY=\"2\" markerUnits=\"strokeWidth\">' +\n\t\t\t\t\t\t'<circle cx=\"2\" cy=\"2\" r=\"1.5\" />' +\n\t\t\t\t\t\t'</marker>' +\n\t\t\t\t\t\t'</defs>' +\n\t\t\t\t\t\t'<path d=\"M0,100 C20,50, 40,30, 100,0\" />' +\n\t\t\t\t\t\t'<line x1=\"0\" y1=\"100\" x2=\"20\" y2=\"50\" marker-start=\"url(#prism-previewer-easing-marker)\" marker-end=\"url(#prism-previewer-easing-marker)\" />' +\n\t\t\t\t\t\t'<line x1=\"100\" y1=\"0\" x2=\"40\" y2=\"30\" marker-start=\"url(#prism-previewer-easing-marker)\" marker-end=\"url(#prism-previewer-easing-marker)\" />' +\n\t\t\t\t\t\t'</svg>';\n\t\t\t\t});\n\t\t\t},\n\t\t\ttokens: {\n\t\t\t\t'easing': {\n\t\t\t\t\tpattern: /\\bcubic-bezier\\((?:-?(?:\\d+(?:\\.\\d+)?|\\.\\d+),\\s*){3}-?(?:\\d+(?:\\.\\d+)?|\\.\\d+)\\)\\B|\\b(?:ease(?:-in)?(?:-out)?|linear)(?=\\s|[;}]|$)/i,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'function': /[\\w-]+(?=\\()/,\n\t\t\t\t\t\t'punctuation': /[(),]/\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tlanguages: {\n\t\t\t\t'css': true,\n\t\t\t\t'less': true,\n\t\t\t\t'sass': [\n\t\t\t\t\t{\n\t\t\t\t\t\tlang: 'sass',\n\t\t\t\t\t\tinside: 'inside',\n\t\t\t\t\t\tbefore: 'punctuation',\n\t\t\t\t\t\troot: Prism.languages.sass && Prism.languages.sass['variable-line']\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tlang: 'sass',\n\t\t\t\t\t\tinside: 'inside',\n\t\t\t\t\t\troot: Prism.languages.sass && Prism.languages.sass['property-line']\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t'scss': true,\n\t\t\t\t'stylus': [\n\t\t\t\t\t{\n\t\t\t\t\t\tlang: 'stylus',\n\t\t\t\t\t\tbefore: 'hexcode',\n\t\t\t\t\t\tinside: 'rest',\n\t\t\t\t\t\troot: Prism.languages.stylus && Prism.languages.stylus['property-declaration'].inside\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tlang: 'stylus',\n\t\t\t\t\t\tbefore: 'hexcode',\n\t\t\t\t\t\tinside: 'rest',\n\t\t\t\t\t\troot: Prism.languages.stylus && Prism.languages.stylus['variable-declaration'].inside\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t},\n\n\t\t'time': {\n\t\t\tcreate: function () {\n\t\t\t\tnew Prism.plugins.Previewer('time', function (value) {\n\t\t\t\t\tvar num = parseFloat(value);\n\t\t\t\t\tvar unit = value.match(/[a-z]+$/i);\n\t\t\t\t\tif (!num || !unit) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tunit = unit[0];\n\t\t\t\t\tthis.querySelector('circle').style.animationDuration = 2 * num + unit;\n\t\t\t\t\treturn true;\n\t\t\t\t}, '*', function () {\n\t\t\t\t\tthis._elt.innerHTML = '<svg viewBox=\"0 0 64 64\">' +\n\t\t\t\t\t\t'<circle r=\"16\" cy=\"32\" cx=\"32\"></circle>' +\n\t\t\t\t\t\t'</svg>';\n\t\t\t\t});\n\t\t\t},\n\t\t\ttokens: {\n\t\t\t\t'time': /(?:\\b|\\B-|(?=\\B\\.))(?:\\d+(?:\\.\\d+)?|\\.\\d+)m?s\\b/i\n\t\t\t},\n\t\t\tlanguages: {\n\t\t\t\t'css': true,\n\t\t\t\t'less': true,\n\t\t\t\t'markup': {\n\t\t\t\t\tlang: 'markup',\n\t\t\t\t\tbefore: 'punctuation',\n\t\t\t\t\tinside: 'inside',\n\t\t\t\t\troot: Prism.languages.markup && Prism.languages.markup['tag'].inside['attr-value']\n\t\t\t\t},\n\t\t\t\t'sass': [\n\t\t\t\t\t{\n\t\t\t\t\t\tlang: 'sass',\n\t\t\t\t\t\tinside: 'inside',\n\t\t\t\t\t\troot: Prism.languages.sass && Prism.languages.sass['property-line']\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tlang: 'sass',\n\t\t\t\t\t\tbefore: 'operator',\n\t\t\t\t\t\tinside: 'inside',\n\t\t\t\t\t\troot: Prism.languages.sass && Prism.languages.sass['variable-line']\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t'scss': true,\n\t\t\t\t'stylus': [\n\t\t\t\t\t{\n\t\t\t\t\t\tlang: 'stylus',\n\t\t\t\t\t\tbefore: 'hexcode',\n\t\t\t\t\t\tinside: 'rest',\n\t\t\t\t\t\troot: Prism.languages.stylus && Prism.languages.stylus['property-declaration'].inside\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tlang: 'stylus',\n\t\t\t\t\t\tbefore: 'hexcode',\n\t\t\t\t\t\tinside: 'rest',\n\t\t\t\t\t\troot: Prism.languages.stylus && Prism.languages.stylus['variable-declaration'].inside\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t}\n\t};\n\n\t/**\n\t * Returns the absolute X, Y offsets for an element\n\t *\n\t * @param {HTMLElement} element\n\t * @returns {{top: number, right: number, bottom: number, left: number, width: number, height: number}}\n\t */\n\tvar getOffset = function (element) {\n\t\tvar elementBounds = element.getBoundingClientRect();\n\t\tvar left = elementBounds.left;\n\t\tvar top = elementBounds.top;\n\t\tvar documentBounds = document.documentElement.getBoundingClientRect();\n\t\tleft -= documentBounds.left;\n\t\ttop -= documentBounds.top;\n\n\t\treturn {\n\t\t\ttop: top,\n\t\t\tright: innerWidth - left - elementBounds.width,\n\t\t\tbottom: innerHeight - top - elementBounds.height,\n\t\t\tleft: left,\n\t\t\twidth: elementBounds.width,\n\t\t\theight: elementBounds.height\n\t\t};\n\t};\n\n\tvar TOKEN_CLASS = 'token';\n\tvar ACTIVE_CLASS = 'active';\n\tvar FLIPPED_CLASS = 'flipped';\n\n\t/**\n\t * Previewer constructor\n\t *\n\t * @param {string} type Unique previewer type\n\t * @param {Function} updater Function that will be called on mouseover.\n\t * @param {string[]|string} [supportedLanguages] Aliases of the languages this previewer must be enabled for. Defaults to \"*\", all languages.\n\t * @param {Function} [initializer] Function that will be called on initialization.\n\t * @class\n\t */\n\tvar Previewer = function (type, updater, supportedLanguages, initializer) {\n\t\tthis._elt = null;\n\t\tthis._type = type;\n\t\tthis._token = null;\n\t\tthis.updater = updater;\n\t\tthis._mouseout = this.mouseout.bind(this);\n\t\tthis.initializer = initializer;\n\n\t\tvar self = this;\n\n\t\tif (!supportedLanguages) {\n\t\t\tsupportedLanguages = ['*'];\n\t\t}\n\t\tif (!Array.isArray(supportedLanguages)) {\n\t\t\tsupportedLanguages = [supportedLanguages];\n\t\t}\n\t\tsupportedLanguages.forEach(function (lang) {\n\t\t\tif (typeof lang !== 'string') {\n\t\t\t\tlang = lang.lang;\n\t\t\t}\n\t\t\tif (!Previewer.byLanguages[lang]) {\n\t\t\t\tPreviewer.byLanguages[lang] = [];\n\t\t\t}\n\t\t\tif (Previewer.byLanguages[lang].indexOf(self) < 0) {\n\t\t\t\tPreviewer.byLanguages[lang].push(self);\n\t\t\t}\n\t\t});\n\t\tPreviewer.byType[type] = this;\n\t};\n\n\t/**\n\t * Creates the HTML element for the previewer.\n\t */\n\tPreviewer.prototype.init = function () {\n\t\tif (this._elt) {\n\t\t\treturn;\n\t\t}\n\t\tthis._elt = document.createElement('div');\n\t\tthis._elt.className = 'prism-previewer prism-previewer-' + this._type;\n\t\tdocument.body.appendChild(this._elt);\n\t\tif (this.initializer) {\n\t\t\tthis.initializer();\n\t\t}\n\t};\n\n\t/**\n\t * @param {Element} token\n\t * @returns {boolean}\n\t */\n\tPreviewer.prototype.isDisabled = function (token) {\n\t\tdo {\n\t\t\tif (token.hasAttribute && token.hasAttribute('data-previewers')) {\n\t\t\t\tvar previewers = token.getAttribute('data-previewers');\n\t\t\t\treturn (previewers || '').split(/\\s+/).indexOf(this._type) === -1;\n\t\t\t}\n\t\t} while ((token = token.parentNode));\n\t\treturn false;\n\t};\n\n\t/**\n\t * Checks the class name of each hovered element\n\t *\n\t * @param {Element} token\n\t */\n\tPreviewer.prototype.check = function (token) {\n\t\tif (token.classList.contains(TOKEN_CLASS) && this.isDisabled(token)) {\n\t\t\treturn;\n\t\t}\n\t\tdo {\n\t\t\tif (token.classList && token.classList.contains(TOKEN_CLASS) && token.classList.contains(this._type)) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t} while ((token = token.parentNode));\n\n\t\tif (token && token !== this._token) {\n\t\t\tthis._token = token;\n\t\t\tthis.show();\n\t\t}\n\t};\n\n\t/**\n\t * Called on mouseout\n\t */\n\tPreviewer.prototype.mouseout = function () {\n\t\tthis._token.removeEventListener('mouseout', this._mouseout, false);\n\t\tthis._token = null;\n\t\tthis.hide();\n\t};\n\n\t/**\n\t * Shows the previewer positioned properly for the current token.\n\t */\n\tPreviewer.prototype.show = function () {\n\t\tif (!this._elt) {\n\t\t\tthis.init();\n\t\t}\n\t\tif (!this._token) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.updater.call(this._elt, this._token.textContent)) {\n\t\t\tthis._token.addEventListener('mouseout', this._mouseout, false);\n\n\t\t\tvar offset = getOffset(this._token);\n\t\t\tthis._elt.classList.add(ACTIVE_CLASS);\n\n\t\t\tif (offset.top - this._elt.offsetHeight > 0) {\n\t\t\t\tthis._elt.classList.remove(FLIPPED_CLASS);\n\t\t\t\tthis._elt.style.top = offset.top + 'px';\n\t\t\t\tthis._elt.style.bottom = '';\n\t\t\t} else {\n\t\t\t\tthis._elt.classList.add(FLIPPED_CLASS);\n\t\t\t\tthis._elt.style.bottom = offset.bottom + 'px';\n\t\t\t\tthis._elt.style.top = '';\n\t\t\t}\n\n\t\t\tthis._elt.style.left = offset.left + Math.min(200, offset.width / 2) + 'px';\n\t\t} else {\n\t\t\tthis.hide();\n\t\t}\n\t};\n\n\t/**\n\t * Hides the previewer.\n\t */\n\tPreviewer.prototype.hide = function () {\n\t\tthis._elt.classList.remove(ACTIVE_CLASS);\n\t};\n\n\t/**\n\t * Map of all registered previewers by language\n\t *\n\t * @type {{}}\n\t */\n\tPreviewer.byLanguages = {};\n\n\t/**\n\t * Map of all registered previewers by type\n\t *\n\t * @type {{}}\n\t */\n\tPreviewer.byType = {};\n\n\t/**\n\t * Initializes the mouseover event on the code block.\n\t *\n\t * @param {HTMLElement} elt The code block (env.element)\n\t * @param {string} lang The language (env.language)\n\t */\n\tPreviewer.initEvents = function (elt, lang) {\n\t\tvar previewers = [];\n\t\tif (Previewer.byLanguages[lang]) {\n\t\t\tpreviewers = previewers.concat(Previewer.byLanguages[lang]);\n\t\t}\n\t\tif (Previewer.byLanguages['*']) {\n\t\t\tpreviewers = previewers.concat(Previewer.byLanguages['*']);\n\t\t}\n\t\telt.addEventListener('mouseover', function (e) {\n\t\t\tvar target = e.target;\n\t\t\tpreviewers.forEach(function (previewer) {\n\t\t\t\tpreviewer.check(target);\n\t\t\t});\n\t\t}, false);\n\t};\n\tPrism.plugins.Previewer = Previewer;\n\n\tPrism.hooks.add('before-highlight', function (env) {\n\t\tfor (var previewer in previewers) {\n\t\t\tvar languages = previewers[previewer].languages;\n\t\t\tif (env.language && languages[env.language] && !languages[env.language].initialized) {\n\t\t\t\tvar lang = languages[env.language];\n\t\t\t\tif (!Array.isArray(lang)) {\n\t\t\t\t\tlang = [lang];\n\t\t\t\t}\n\t\t\t\tlang.forEach(function (lang) {\n\t\t\t\t\tvar before; var inside; var root; var skip;\n\t\t\t\t\tif (lang === true) {\n\t\t\t\t\t\tbefore = 'important';\n\t\t\t\t\t\tinside = env.language;\n\t\t\t\t\t\tlang = env.language;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbefore = lang.before || 'important';\n\t\t\t\t\t\tinside = lang.inside || lang.lang;\n\t\t\t\t\t\troot = lang.root || Prism.languages;\n\t\t\t\t\t\tskip = lang.skip;\n\t\t\t\t\t\tlang = env.language;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!skip && Prism.languages[lang]) {\n\t\t\t\t\t\tPrism.languages.insertBefore(inside, before, previewers[previewer].tokens, root);\n\t\t\t\t\t\tenv.grammar = Prism.languages[lang];\n\n\t\t\t\t\t\tlanguages[env.language] = { initialized: true };\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t});\n\n\t// Initialize the previewers only when needed\n\tPrism.hooks.add('after-highlight', function (env) {\n\t\tif (Previewer.byLanguages['*'] || Previewer.byLanguages[env.language]) {\n\t\t\tPreviewer.initEvents(env.element, env.language);\n\t\t}\n\t});\n\n\tfor (var previewer in previewers) {\n\t\tpreviewers[previewer].create();\n\t}\n\n}());\n#/components/prism-php-extras.min.js\u0001IPrism.languages.insertBefore(\"php\",\"variable\",{this:{pattern:/\\$this\\b/,alias:\"keyword\"},global:/\\$(?:GLOBALS|HTTP_RAW_POST_DATA|_(?:COOKIE|ENV|FILES|GET|POST|REQUEST|SERVER|SESSION)|argc|argv|http_response_header|php_errormsg)\\b/,scope:{pattern:/\\b[\\w\\\\]+::/,inside:{keyword:/\\b(?:parent|self|static)\\b/,punctuation:/::|\\\\/}}});/components/prism-bnf.min.js\u00010Prism.languages.bnf={string:{pattern:/\"[^\\r\\n\"]*\"|'[^\\r\\n']*'/},definition:{pattern:/<[^<>\\r\\n\\t]+>(?=\\s*::=)/,alias:[\"rule\",\"keyword\"],inside:{punctuation:/^<|>$/}},rule:{pattern:/<[^<>\\r\\n\\t]+>/,inside:{punctuation:/^<|>$/}},operator:/::=|[|()[\\]{}*+?]|\\.{3}/},Prism.languages.rbnf=Prism.languages.bnf; /components/prism-cilkcpp.min.js\u0001\u0005Prism.languages.cilkcpp=Prism.languages.insertBefore(\"cpp\",\"function\",{\"parallel-keyword\":{pattern:/\\bcilk_(?:for|reducer|s(?:cope|pawn|ync))\\b/,alias:\"keyword\"}}),Prism.languages[\"cilk-cpp\"]=Prism.languages.cilkcpp,Prism.languages.cilk=Prism.languages.cilkcpp;\"/components/prism-excel-formula.js\u0006Prism.languages['excel-formula'] = {\n\t'comment': {\n\t\tpattern: /(\\bN\\(\\s*)\"(?:[^\"]|\"\")*\"(?=\\s*\\))/i,\n\t\tlookbehind: true,\n\t\tgreedy: true\n\t},\n\t'string': {\n\t\tpattern: /\"(?:[^\"]|\"\")*\"(?!\")/,\n\t\tgreedy: true\n\t},\n\t'reference': {\n\t\t// https://www.ablebits.com/office-addins-blog/2015/12/08/excel-reference-another-sheet-workbook/\n\n\t\t// Sales!B2\n\t\t// 'Winter sales'!B2\n\t\t// [Sales.xlsx]Jan!B2:B5\n\t\t// D:\\Reports\\[Sales.xlsx]Jan!B2:B5\n\t\t// '[Sales.xlsx]Jan sales'!B2:B5\n\t\t// 'D:\\Reports\\[Sales.xlsx]Jan sales'!B2:B5\n\n\t\tpattern: /(?:'[^']*'|(?:[^\\s()[\\]{}<>*?\"';,$&]*\\[[^^\\s()[\\]{}<>*?\"']+\\])?\\w+)!/,\n\t\tgreedy: true,\n\t\talias: 'string',\n\t\tinside: {\n\t\t\t'operator': /!$/,\n\t\t\t'punctuation': /'/,\n\t\t\t'sheet': {\n\t\t\t\tpattern: /[^[\\]]+$/,\n\t\t\t\talias: 'function'\n\t\t\t},\n\t\t\t'file': {\n\t\t\t\tpattern: /\\[[^[\\]]+\\]$/,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': /[[\\]]/\n\t\t\t\t}\n\t\t\t},\n\t\t\t'path': /[\\s\\S]+/\n\t\t}\n\t},\n\t'function-name': {\n\t\tpattern: /\\b[A-Z]\\w*(?=\\()/i,\n\t\talias: 'builtin'\n\t},\n\t'range': {\n\t\tpattern: /\\$?\\b(?:[A-Z]+\\$?\\d+:\\$?[A-Z]+\\$?\\d+|[A-Z]+:\\$?[A-Z]+|\\d+:\\$?\\d+)\\b/i,\n\t\talias: 'selector',\n\t\tinside: {\n\t\t\t'operator': /:/,\n\t\t\t'cell': /\\$?[A-Z]+\\$?\\d+/i,\n\t\t\t'column': /\\$?[A-Z]+/i,\n\t\t\t'row': /\\$?\\d+/\n\t\t}\n\t},\n\t'cell': {\n\t\t// Excel is case insensitive, so the string \"foo1\" could be either a variable or a cell.\n\t\t// To combat this, we match cells case insensitive, if the contain at least one \"$\", and case sensitive otherwise.\n\t\tpattern: /\\b[A-Z]+\\d+\\b|\\$[A-Za-z]+\\$?\\d+\\b|\\b[A-Za-z]+\\$\\d+\\b/,\n\t\talias: 'selector'\n\t},\n\t'number': /(?:\\b\\d+(?:\\.\\d+)?|\\B\\.\\d+)(?:e[+-]?\\d+)?\\b/i,\n\t'boolean': /\\b(?:FALSE|TRUE)\\b/i,\n\t'operator': /[-+*/^%=&,]|<[=>]?|>=?/,\n\t'punctuation': /[[\\]();{}|]/\n};\n\nPrism.languages['xlsx'] = Prism.languages['xls'] = Prism.languages['excel-formula'];\n/components/prism-javadoc.js\b(function (Prism) {\n\n\tvar codeLinePattern = /(^(?:[\\t ]*(?:\\*\\s*)*))[^*\\s].*$/m;\n\n\tvar memberReference = /#\\s*\\w+(?:\\s*\\([^()]*\\))?/.source;\n\tvar reference = /(?:\\b[a-zA-Z]\\w+\\s*\\.\\s*)*\\b[A-Z]\\w*(?:\\s*<mem>)?|<mem>/.source.replace(/<mem>/g, function () { return memberReference; });\n\n\tPrism.languages.javadoc = Prism.languages.extend('javadoclike', {});\n\tPrism.languages.insertBefore('javadoc', 'keyword', {\n\t\t'reference': {\n\t\t\tpattern: RegExp(/(@(?:exception|link|linkplain|see|throws|value)\\s+(?:\\*\\s*)?)/.source + '(?:' + reference + ')'),\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'function': {\n\t\t\t\t\tpattern: /(#\\s*)\\w+(?=\\s*\\()/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t},\n\t\t\t\t'field': {\n\t\t\t\t\tpattern: /(#\\s*)\\w+/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t},\n\t\t\t\t'namespace': {\n\t\t\t\t\tpattern: /\\b(?:[a-z]\\w*\\s*\\.\\s*)+/,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'punctuation': /\\./\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t'class-name': /\\b[A-Z]\\w*/,\n\t\t\t\t'keyword': Prism.languages.java.keyword,\n\t\t\t\t'punctuation': /[#()[\\],.]/\n\t\t\t}\n\t\t},\n\t\t'class-name': {\n\t\t\t// @param <T> the first generic type parameter\n\t\t\tpattern: /(@param\\s+)<[A-Z]\\w*>/,\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'punctuation': /[.<>]/\n\t\t\t}\n\t\t},\n\t\t'code-section': [\n\t\t\t{\n\t\t\t\tpattern: /(\\{@code\\s+(?!\\s))(?:[^\\s{}]|\\s+(?![\\s}])|\\{(?:[^{}]|\\{(?:[^{}]|\\{(?:[^{}]|\\{[^{}]*\\})*\\})*\\})*\\})+(?=\\s*\\})/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'code': {\n\t\t\t\t\t\t// there can't be any HTML inside of {@code} tags\n\t\t\t\t\t\tpattern: codeLinePattern,\n\t\t\t\t\t\tlookbehind: true,\n\t\t\t\t\t\tinside: Prism.languages.java,\n\t\t\t\t\t\talias: 'language-java'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /(<(code|pre|tt)>(?!<code>)\\s*)\\S(?:\\S|\\s+\\S)*?(?=\\s*<\\/\\2>)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'line': {\n\t\t\t\t\t\tpattern: codeLinePattern,\n\t\t\t\t\t\tlookbehind: true,\n\t\t\t\t\t\tinside: {\n\t\t\t\t\t\t\t// highlight HTML tags and entities\n\t\t\t\t\t\t\t'tag': Prism.languages.markup.tag,\n\t\t\t\t\t\t\t'entity': Prism.languages.markup.entity,\n\t\t\t\t\t\t\t'code': {\n\t\t\t\t\t\t\t\t// everything else is Java code\n\t\t\t\t\t\t\t\tpattern: /.+/,\n\t\t\t\t\t\t\t\tinside: Prism.languages.java,\n\t\t\t\t\t\t\t\talias: 'language-java'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t],\n\t\t'tag': Prism.languages.markup.tag,\n\t\t'entity': Prism.languages.markup.entity,\n\t});\n\n\tPrism.languages.javadoclike.addSupport('java', Prism.languages.javadoc);\n}(Prism));\n\"/components/prism-plant-uml.min.js\t!function(e){var t=/\\$\\w+|%[a-z]+%/;e.languages[\"plant-uml\"]={comment:{pattern:/(^[ \\t]*)(?:'.*|\\/'[\\s\\S]*?'\\/)/m,lookbehind:!0,greedy:!0},preprocessor:{pattern:/(^[ \\t]*)!.*/m,lookbehind:!0,greedy:!0,alias:\"property\",inside:{variable:t}},delimiter:{pattern:/(^[ \\t]*)@(?:end|start)uml\\b/m,lookbehind:!0,greedy:!0,alias:\"punctuation\"},arrow:{pattern:RegExp(\"(^|[^-.<>?|\\\\\\\\[\\\\]ox])[[?]?[ox]?(?:(?:-+(?:[drlu]|do|down|le|left|ri|right|up)-+|\\\\.+(?:[drlu]|do|down|le|left|ri|right|up)\\\\.+|-+(?:\\\\[[^[\\\\]]*\\\\]-*)?|\\\\[[^[\\\\]]*\\\\]-+|\\\\.+(?:\\\\[[^[\\\\]]*\\\\]\\\\.*)?|\\\\[[^[\\\\]]*\\\\]\\\\.+)(?:>{1,2}|/{1,2}|\\\\\\\\{1,2}|\\\\|>|[#*^+{xo])|(?:<{1,2}|/{1,2}|\\\\\\\\{1,2}|<\\\\||[#*^+}xo])(?:-+(?:[drlu]|do|down|le|left|ri|right|up)-+|\\\\.+(?:[drlu]|do|down|le|left|ri|right|up)\\\\.+|-+(?:\\\\[[^[\\\\]]*\\\\]-*)?|\\\\[[^[\\\\]]*\\\\]-+|\\\\.+(?:\\\\[[^[\\\\]]*\\\\]\\\\.*)?|\\\\[[^[\\\\]]*\\\\]\\\\.+)(?:(?:>{1,2}|/{1,2}|\\\\\\\\{1,2}|\\\\|>|[#*^+{xo]))?)[ox]?[\\\\]?]?(?![-.<>?|\\\\\\\\\\\\]ox])\"),lookbehind:!0,greedy:!0,alias:\"operator\",inside:{expression:{pattern:/(\\[)[^[\\]]+(?=\\])/,lookbehind:!0,inside:null},punctuation:/\\[(?=$|\\])|^\\]/}},string:{pattern:/\"[^\"]*\"/,greedy:!0},text:{pattern:/(\\[[ \\t]*[\\r\\n]+(?![\\r\\n]))[^\\]]*(?=\\])/,lookbehind:!0,greedy:!0,alias:\"string\"},keyword:[{pattern:/^([ \\t]*)(?:abstract\\s+class|end\\s+(?:box|fork|group|merge|note|ref|split|title)|(?:fork|split)(?:\\s+again)?|activate|actor|agent|alt|annotation|artifact|autoactivate|autonumber|backward|binary|boundary|box|break|caption|card|case|circle|class|clock|cloud|collections|component|concise|control|create|critical|database|deactivate|destroy|detach|diamond|else|elseif|end|end[hr]note|endif|endswitch|endwhile|entity|enum|file|folder|footer|frame|group|[hr]?note|header|hexagon|hide|if|interface|label|legend|loop|map|namespace|network|newpage|node|nwdiag|object|opt|package|page|par|participant|person|queue|rectangle|ref|remove|repeat|restore|return|robust|scale|set|show|skinparam|stack|start|state|stop|storage|switch|title|together|usecase|usecase\\/|while)(?=\\s|$)/m,lookbehind:!0,greedy:!0},/\\b(?:elseif|equals|not|while)(?=\\s*\\()/,/\\b(?:as|is|then)\\b/],divider:{pattern:/^==.+==$/m,greedy:!0,alias:\"important\"},time:{pattern:/@(?:\\d+(?:[:/]\\d+){2}|[+-]?\\d+|:[a-z]\\w*(?:[+-]\\d+)?)\\b/i,greedy:!0,alias:\"number\"},color:{pattern:/#(?:[a-z_]+|[a-fA-F0-9]+)\\b/,alias:\"symbol\"},variable:t,punctuation:/[:,;()[\\]{}]|\\.{3}/},e.languages[\"plant-uml\"].arrow.inside.expression.inside=e.languages[\"plant-uml\"],e.languages.plantuml=e.languages[\"plant-uml\"]}(Prism);6/plugins/show-invisibles/prism-show-invisibles.min.css\u0001.token.cr,.token.lf,.token.space,.token.tab:not(:empty){position:relative}.token.cr:before,.token.lf:before,.token.space:before,.token.tab:not(:empty):before{color:grey;opacity:.6;position:absolute}.token.tab:not(:empty):before{content:'\\21E5'}.token.cr:before{content:'\\240D'}.token.crlf:before{content:'\\240D\\240A'}.token.lf:before{content:'\\240A'}.token.space:before{content:'\\00B7'}#/components/prism-objectivec.min.js\u0002Prism.languages.objectivec=Prism.languages.extend(\"c\",{string:{pattern:/@?\"(?:\\\\(?:\\r\\n|[\\s\\S])|[^\"\\\\\\r\\n])*\"/,greedy:!0},keyword:/\\b(?:asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|in|inline|int|long|register|return|self|short|signed|sizeof|static|struct|super|switch|typedef|typeof|union|unsigned|void|volatile|while)\\b|(?:@interface|@end|@implementation|@protocol|@class|@public|@protected|@private|@property|@try|@catch|@finally|@throw|@synthesize|@dynamic|@selector)\\b/,operator:/-[->]?|\\+\\+?|!=?|<<?=?|>>?=?|==?|&&?|\\|\\|?|[~^%?*\\/@]/}),delete Prism.languages.objectivec[\"class-name\"],Prism.languages.objc=Prism.languages.objectivec;/components/prism-diff.min.js\u0002]!function(e){e.languages.diff={coord:[/^(?:\\*{3}|-{3}|\\+{3}).*$/m,/^@@.*@@$/m,/^\\d.*$/m]};var n={\"deleted-sign\":\"-\",\"deleted-arrow\":\"<\",\"inserted-sign\":\"+\",\"inserted-arrow\":\">\",unchanged:\" \",diff:\"!\"};Object.keys(n).forEach((function(a){var i=n[a],r=[];/^\\w+$/.test(a)||r.push(/\\w+/.exec(a)[0]),\"diff\"===a&&r.push(\"bold\"),e.languages.diff[a]={pattern:RegExp(\"^(?:[\"+i+\"].*(?:\\r\\n?|\\n|(?![\\\\s\\\\S])))+\",\"m\"),alias:r,inside:{line:{pattern:/(.)(?=[\\s\\S]).*(?:\\r\\n?|\\n)?/,lookbehind:!0},prefix:{pattern:/[\\s\\S]/,alias:/\\w+/.exec(a)[0]}}}})),Object.defineProperty(e.languages.diff,\"PREFIXES\",{value:n})}(Prism);/components/prism-peoplecode.js\u0005Prism.languages.peoplecode = {\n\t'comment': RegExp([\n\t\t// C-style multiline comments\n\t\t/\\/\\*[\\s\\S]*?\\*\\//.source,\n\t\t// REM comments\n\t\t/\\bREM[^;]*;/.source,\n\t\t// Nested <* *> comments\n\t\t/<\\*(?:[^<*]|\\*(?!>)|<(?!\\*)|<\\*(?:(?!\\*>)[\\s\\S])*\\*>)*\\*>/.source,\n\t\t// /+ +/ comments\n\t\t/\\/\\+[\\s\\S]*?\\+\\//.source,\n\t].join('|')),\n\t'string': {\n\t\tpattern: /'(?:''|[^'\\r\\n])*'(?!')|\"(?:\"\"|[^\"\\r\\n])*\"(?!\")/,\n\t\tgreedy: true\n\t},\n\t'variable': /%\\w+/,\n\t'function-definition': {\n\t\tpattern: /((?:^|[^\\w-])(?:function|method)\\s+)\\w+/i,\n\t\tlookbehind: true,\n\t\talias: 'function'\n\t},\n\t'class-name': {\n\t\tpattern: /((?:^|[^-\\w])(?:as|catch|class|component|create|extends|global|implements|instance|local|of|property|returns)\\s+)\\w+(?::\\w+)*/i,\n\t\tlookbehind: true,\n\t\tinside: {\n\t\t\t'punctuation': /:/\n\t\t}\n\t},\n\t'keyword': /\\b(?:abstract|alias|as|catch|class|component|constant|create|declare|else|end-(?:class|evaluate|for|function|get|if|method|set|try|while)|evaluate|extends|for|function|get|global|if|implements|import|instance|library|local|method|null|of|out|peopleCode|private|program|property|protected|readonly|ref|repeat|returns?|set|step|then|throw|to|try|until|value|when(?:-other)?|while)\\b/i,\n\t'operator-keyword': {\n\t\tpattern: /\\b(?:and|not|or)\\b/i,\n\t\talias: 'operator'\n\t},\n\t'function': /[_a-z]\\w*(?=\\s*\\()/i,\n\n\t'boolean': /\\b(?:false|true)\\b/i,\n\t'number': /\\b\\d+(?:\\.\\d+)?\\b/,\n\t'operator': /<>|[<>]=?|!=|\\*\\*|[-+*/|=@]/,\n\t'punctuation': /[:.;,()[\\]]/\n};\n\nPrism.languages.pcode = Prism.languages.peoplecode;\n!/components/prism-editorconfig.js\u0002%Prism.languages.editorconfig = {\n\t// https://editorconfig-specification.readthedocs.io\n\t'comment': /[;#].*/,\n\t'section': {\n\t\tpattern: /(^[ \\t]*)\\[.+\\]/m,\n\t\tlookbehind: true,\n\t\talias: 'selector',\n\t\tinside: {\n\t\t\t'regex': /\\\\\\\\[\\[\\]{},!?.*]/, // Escape special characters with '\\\\'\n\t\t\t'operator': /[!?]|\\.\\.|\\*{1,2}/,\n\t\t\t'punctuation': /[\\[\\]{},]/\n\t\t}\n\t},\n\t'key': {\n\t\tpattern: /(^[ \\t]*)[^\\s=]+(?=[ \\t]*=)/m,\n\t\tlookbehind: true,\n\t\talias: 'attr-name'\n\t},\n\t'value': {\n\t\tpattern: /=.*/,\n\t\talias: 'attr-value',\n\t\tinside: {\n\t\t\t'punctuation': /^=/\n\t\t}\n\t}\n};\n/components/prism-smali.min.js\u0005PPrism.languages.smali={comment:/#.*/,string:{pattern:/\"(?:[^\\r\\n\\\\\"]|\\\\.)*\"|'(?:[^\\r\\n\\\\']|\\\\(?:.|u[\\da-fA-F]{4}))'/,greedy:!0},\"class-name\":{pattern:/(^|[^L])L(?:(?:\\w+|`[^`\\r\\n]*`)\\/)*(?:[\\w$]+|`[^`\\r\\n]*`)(?=\\s*;)/,lookbehind:!0,inside:{\"class-name\":{pattern:/(^L|\\/)(?:[\\w$]+|`[^`\\r\\n]*`)$/,lookbehind:!0},namespace:{pattern:/^(L)(?:(?:\\w+|`[^`\\r\\n]*`)\\/)+/,lookbehind:!0,inside:{punctuation:/\\//}},builtin:/^L/}},builtin:[{pattern:/([();\\[])[BCDFIJSVZ]+/,lookbehind:!0},{pattern:/([\\w$>]:)[BCDFIJSVZ]/,lookbehind:!0}],keyword:[{pattern:/(\\.end\\s+)[\\w-]+/,lookbehind:!0},{pattern:/(^|[^\\w.-])\\.(?!\\d)[\\w-]+/,lookbehind:!0},{pattern:/(^|[^\\w.-])(?:abstract|annotation|bridge|constructor|enum|final|interface|private|protected|public|runtime|static|synthetic|system|transient)(?![\\w.-])/,lookbehind:!0}],function:{pattern:/(^|[^\\w.-])(?:\\w+|<[\\w$-]+>)(?=\\()/,lookbehind:!0},field:{pattern:/[\\w$]+(?=:)/,alias:\"variable\"},register:{pattern:/(^|[^\\w.-])[vp]\\d(?![\\w.-])/,lookbehind:!0,alias:\"variable\"},boolean:{pattern:/(^|[^\\w.-])(?:false|true)(?![\\w.-])/,lookbehind:!0},number:{pattern:/(^|[^/\\w.-])-?(?:NAN|INFINITY|0x(?:[\\dA-F]+(?:\\.[\\dA-F]*)?|\\.[\\dA-F]+)(?:p[+-]?[\\dA-F]+)?|(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?)[dflst]?(?![\\w.-])/i,lookbehind:!0},label:{pattern:/(:)\\w+/,lookbehind:!0,alias:\"property\"},operator:/->|\\.\\.|[\\[=]/,punctuation:/[{}(),;:]/};/components/prism-csv.jsă// https://tools.ietf.org/html/rfc4180\n\nPrism.languages.csv = {\n\t'value': /[^\\r\\n,\"]+|\"(?:[^\"]|\"\")*\"(?!\")/,\n\t'punctuation': /,/\n};\n/components/prism-vhdl.js\u0005TPrism.languages.vhdl = {\n\t'comment': /--.+/,\n\t// support for all logic vectors\n\t'vhdl-vectors': {\n\t\t'pattern': /\\b[oxb]\"[\\da-f_]+\"|\"[01uxzwlh-]+\"/i,\n\t\t'alias': 'number'\n\t},\n\t// support for operator overloading included\n\t'quoted-function': {\n\t\tpattern: /\"\\S+?\"(?=\\()/,\n\t\talias: 'function'\n\t},\n\t'string': /\"(?:[^\\\\\"\\r\\n]|\\\\(?:\\r\\n|[\\s\\S]))*\"/,\n\t'attribute': {\n\t\tpattern: /\\b'\\w+/,\n\t\talias: 'attr-name'\n\t},\n\t// support for predefined attributes included\n\t'keyword': /\\b(?:access|after|alias|all|architecture|array|assert|attribute|begin|block|body|buffer|bus|case|component|configuration|constant|disconnect|downto|else|elsif|end|entity|exit|file|for|function|generate|generic|group|guarded|if|impure|in|inertial|inout|is|label|library|linkage|literal|loop|map|new|next|null|of|on|open|others|out|package|port|postponed|private|procedure|process|pure|range|record|register|reject|report|return|select|severity|shared|signal|subtype|then|to|transport|type|unaffected|units|until|use|variable|view|wait|when|while|with)\\b/i,\n\t'boolean': /\\b(?:false|true)\\b/i,\n\t'function': /\\w+(?=\\()/,\n\t// decimal, based, physical, and exponential numbers supported\n\t'number': /'[01uxzwlh-]'|\\b(?:\\d+#[\\da-f_.]+#|\\d[\\d_.]*)(?:e[-+]?\\d+)?/i,\n\t'operator': /[<>]=?|:=|[-+*/&=]|\\b(?:abs|and|mod|nand|nor|not|or|rem|rol|ror|sla|sll|sra|srl|xnor|xor)\\b/i,\n\t'punctuation': /[{}[\\];(),.:]/\n};\n,/plugins/inline-color/prism-inline-color.css\u0004\u001fspan.inline-color-wrapper {\n\t/*\n\t * The background image is the following SVG inline in base 64:\n\t *\n\t * <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 2 2\">\n\t *     <path fill=\"gray\" d=\"M0 0h2v2H0z\"/>\n\t *     <path fill=\"white\" d=\"M0 0h1v1H0zM1 1h1v1H1z\"/>\n\t * </svg>\n\t *\n\t * SVG-inlining explained:\n\t * https://stackoverflow.com/a/21626701/7595472\n\t */\n\tbackground: url(\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyIDIiPjxwYXRoIGZpbGw9ImdyYXkiIGQ9Ik0wIDBoMnYySDB6Ii8+PHBhdGggZmlsbD0id2hpdGUiIGQ9Ik0wIDBoMXYxSDB6TTEgMWgxdjFIMXoiLz48L3N2Zz4=\");\n\t/* This is to prevent visual glitches where one pixel from the repeating pattern could be seen. */\n\tbackground-position: center;\n\tbackground-size: 110%;\n\n\tdisplay: inline-block;\n\theight: 1.333ch;\n\twidth: 1.333ch;\n\tmargin: 0 .333ch;\n\tbox-sizing: border-box;\n\tborder: 1px solid white;\n\toutline: 1px solid rgba(0,0,0,.5);\n\toverflow: hidden;\n}\n\nspan.inline-color {\n\tdisplay: block;\n\t/* To prevent visual glitches again */\n\theight: 120%;\n\twidth: 120%;\n}\n/components/prism-etlua.js\u0002\f(function (Prism) {\n\n\tPrism.languages.etlua = {\n\t\t'delimiter': {\n\t\t\tpattern: /^<%[-=]?|-?%>$/,\n\t\t\talias: 'punctuation'\n\t\t},\n\t\t'language-lua': {\n\t\t\tpattern: /[\\s\\S]+/,\n\t\t\tinside: Prism.languages.lua\n\t\t}\n\t};\n\n\tPrism.hooks.add('before-tokenize', function (env) {\n\t\tvar pattern = /<%[\\s\\S]+?%>/g;\n\t\tPrism.languages['markup-templating'].buildPlaceholders(env, 'etlua', pattern);\n\t});\n\n\tPrism.hooks.add('after-tokenize', function (env) {\n\t\tPrism.languages['markup-templating'].tokenizePlaceholders(env, 'etlua');\n\t});\n\n}(Prism));\n'/components/prism-javastacktrace.min.js\u0006\u0006Prism.languages.javastacktrace={summary:{pattern:/^([\\t ]*)(?:(?:Caused by:|Suppressed:|Exception in thread \"[^\"]*\")[\\t ]+)?[\\w$.]+(?::.*)?$/m,lookbehind:!0,inside:{keyword:{pattern:/^([\\t ]*)(?:(?:Caused by|Suppressed)(?=:)|Exception in thread)/m,lookbehind:!0},string:{pattern:/^(\\s*)\"[^\"]*\"/,lookbehind:!0},exceptions:{pattern:/^(:?\\s*)[\\w$.]+(?=:|$)/,lookbehind:!0,inside:{\"class-name\":/[\\w$]+$/,namespace:/\\b[a-z]\\w*\\b/,punctuation:/\\./}},message:{pattern:/(:\\s*)\\S.*/,lookbehind:!0,alias:\"string\"},punctuation:/:/}},\"stack-frame\":{pattern:/^([\\t ]*)at (?:[\\w$./]|@[\\w$.+-]*\\/)+(?:<init>)?\\([^()]*\\)/m,lookbehind:!0,inside:{keyword:{pattern:/^(\\s*)at(?= )/,lookbehind:!0},source:[{pattern:/(\\()\\w+\\.\\w+:\\d+(?=\\))/,lookbehind:!0,inside:{file:/^\\w+\\.\\w+/,punctuation:/:/,\"line-number\":{pattern:/\\b\\d+\\b/,alias:\"number\"}}},{pattern:/(\\()[^()]*(?=\\))/,lookbehind:!0,inside:{keyword:/^(?:Native Method|Unknown Source)$/}}],\"class-name\":/[\\w$]+(?=\\.(?:<init>|[\\w$]+)\\()/,function:/(?:<init>|[\\w$]+)(?=\\()/,\"class-loader\":{pattern:/(\\s)[a-z]\\w*(?:\\.[a-z]\\w*)*(?=\\/[\\w@$.]*\\/)/,lookbehind:!0,alias:\"namespace\",inside:{punctuation:/\\./}},module:{pattern:/([\\s/])[a-z]\\w*(?:\\.[a-z]\\w*)*(?:@[\\w$.+-]*)?(?=\\/)/,lookbehind:!0,inside:{version:{pattern:/(@)[\\s\\S]+/,lookbehind:!0,alias:\"number\"},punctuation:/[@.]/}},namespace:{pattern:/(?:\\b[a-z]\\w*\\.)+/,inside:{punctuation:/\\./}},punctuation:/[()/.]/}},more:{pattern:/^([\\t ]*)\\.{3} \\d+ [a-z]+(?: [a-z]+)*/m,lookbehind:!0,inside:{punctuation:/\\.{3}/,number:/\\d+/,keyword:/\\b[a-z]+(?: [a-z]+)*\\b/}}};/components/prism-hlsl.min.js\u0006vPrism.languages.hlsl=Prism.languages.extend(\"c\",{\"class-name\":[Prism.languages.c[\"class-name\"],/\\b(?:AppendStructuredBuffer|BlendState|Buffer|ByteAddressBuffer|CompileShader|ComputeShader|ConsumeStructuredBuffer|DepthStencilState|DepthStencilView|DomainShader|GeometryShader|Hullshader|InputPatch|LineStream|OutputPatch|PixelShader|PointStream|RWBuffer|RWByteAddressBuffer|RWStructuredBuffer|RWTexture(?:1D|1DArray|2D|2DArray|3D)|RasterizerState|RenderTargetView|SamplerComparisonState|SamplerState|StructuredBuffer|Texture(?:1D|1DArray|2D|2DArray|2DMS|2DMSArray|3D|Cube|CubeArray)|TriangleStream|VertexShader)\\b/],keyword:[/\\b(?:asm|asm_fragment|auto|break|case|catch|cbuffer|centroid|char|class|column_major|compile|compile_fragment|const|const_cast|continue|default|delete|discard|do|dynamic_cast|else|enum|explicit|export|extern|for|friend|fxgroup|goto|groupshared|if|in|inline|inout|interface|line|lineadj|linear|long|matrix|mutable|namespace|new|nointerpolation|noperspective|operator|out|packoffset|pass|pixelfragment|point|precise|private|protected|public|register|reinterpret_cast|return|row_major|sample|sampler|shared|short|signed|sizeof|snorm|stateblock|stateblock_state|static|static_cast|string|struct|switch|tbuffer|technique|technique10|technique11|template|texture|this|throw|triangle|triangleadj|try|typedef|typename|uniform|union|unorm|unsigned|using|vector|vertexfragment|virtual|void|volatile|while)\\b/,/\\b(?:bool|double|dword|float|half|int|min(?:10float|12int|16(?:float|int|uint))|uint)(?:[1-4](?:x[1-4])?)?\\b/],number:/(?:(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:[eE][+-]?\\d+)?|\\b0x[\\da-fA-F]+)[fFhHlLuU]?\\b/,boolean:/\\b(?:false|true)\\b/});/components/prism-jsx.min.js\tT!function(t){var n=t.util.clone(t.languages.javascript),e=\"(?:\\\\{<S>*\\\\.{3}(?:[^{}]|<BRACES>)*\\\\})\";function a(t,n){return t=t.replace(/<S>/g,(function(){return\"(?:\\\\s|//.*(?!.)|/\\\\*(?:[^*]|\\\\*(?!/))\\\\*/)\"})).replace(/<BRACES>/g,(function(){return\"(?:\\\\{(?:\\\\{(?:\\\\{[^{}]*\\\\}|[^{}])*\\\\}|[^{}])*\\\\})\"})).replace(/<SPREAD>/g,(function(){return e})),RegExp(t,n)}e=a(e).source,t.languages.jsx=t.languages.extend(\"markup\",n),t.languages.jsx.tag.pattern=a(\"</?(?:[\\\\w.:-]+(?:<S>+(?:[\\\\w.:$-]+(?:=(?:\\\"(?:\\\\\\\\[^]|[^\\\\\\\\\\\"])*\\\"|'(?:\\\\\\\\[^]|[^\\\\\\\\'])*'|[^\\\\s{'\\\"/>=]+|<BRACES>))?|<SPREAD>))*<S>*/?)?>\"),t.languages.jsx.tag.inside.tag.pattern=/^<\\/?[^\\s>\\/]*/,t.languages.jsx.tag.inside[\"attr-value\"].pattern=/=(?!\\{)(?:\"(?:\\\\[\\s\\S]|[^\\\\\"])*\"|'(?:\\\\[\\s\\S]|[^\\\\'])*'|[^\\s'\">]+)/,t.languages.jsx.tag.inside.tag.inside[\"class-name\"]=/^[A-Z]\\w*(?:\\.[A-Z]\\w*)*$/,t.languages.jsx.tag.inside.comment=n.comment,t.languages.insertBefore(\"inside\",\"attr-name\",{spread:{pattern:a(\"<SPREAD>\"),inside:t.languages.jsx}},t.languages.jsx.tag),t.languages.insertBefore(\"inside\",\"special-attr\",{script:{pattern:a(\"=<BRACES>\"),alias:\"language-javascript\",inside:{\"script-punctuation\":{pattern:/^=(?=\\{)/,alias:\"punctuation\"},rest:t.languages.jsx}}},t.languages.jsx.tag);var s=function(t){return t?\"string\"==typeof t?t:\"string\"==typeof t.content?t.content:t.content.map(s).join(\"\"):\"\"},g=function(n){for(var e=[],a=0;a<n.length;a++){var o=n[a],i=!1;if(\"string\"!=typeof o&&(\"tag\"===o.type&&o.content[0]&&\"tag\"===o.content[0].type?\"</\"===o.content[0].content[0].content?e.length>0&&e[e.length-1].tagName===s(o.content[0].content[1])&&e.pop():\"/>\"===o.content[o.content.length-1].content||e.push({tagName:s(o.content[0].content[1]),openedBraces:0}):e.length>0&&\"punctuation\"===o.type&&\"{\"===o.content?e[e.length-1].openedBraces++:e.length>0&&e[e.length-1].openedBraces>0&&\"punctuation\"===o.type&&\"}\"===o.content?e[e.length-1].openedBraces--:i=!0),(i||\"string\"==typeof o)&&e.length>0&&0===e[e.length-1].openedBraces){var r=s(o);a<n.length-1&&(\"string\"==typeof n[a+1]||\"plain-text\"===n[a+1].type)&&(r+=s(n[a+1]),n.splice(a+1,1)),a>0&&(\"string\"==typeof n[a-1]||\"plain-text\"===n[a-1].type)&&(r=s(n[a-1])+r,n.splice(a-1,1),a--),n[a]=new t.Token(\"plain-text\",r,null,r)}o.content&&\"string\"!=typeof o.content&&g(o.content)}};t.hooks.add(\"after-tokenize\",(function(t){\"jsx\"!==t.language&&\"tsx\"!==t.language||g(t.tokens)}))}(Prism);/components/prism-wgsl.min.js\rvPrism.languages.wgsl={comment:{pattern:/\\/\\/.*|\\/\\*[\\s\\S]*?(?:\\*\\/|$)/,greedy:!0},\"builtin-attribute\":{pattern:/(@)builtin\\(.*?\\)/,lookbehind:!0,inside:{attribute:{pattern:/^builtin/,alias:\"attr-name\"},punctuation:/[(),]/,\"built-in-values\":{pattern:/\\b(?:frag_depth|front_facing|global_invocation_id|instance_index|local_invocation_id|local_invocation_index|num_workgroups|position|sample_index|sample_mask|vertex_index|workgroup_id)\\b/,alias:\"attr-value\"}}},attributes:{pattern:/(@)(?:align|binding|compute|const|fragment|group|id|interpolate|invariant|location|size|vertex|workgroup_size)/i,lookbehind:!0,alias:\"attr-name\"},functions:{pattern:/\\b(fn\\s+)[_a-zA-Z]\\w*(?=[(<])/,lookbehind:!0,alias:\"function\"},keyword:/\\b(?:bitcast|break|case|const|continue|continuing|default|discard|else|enable|fallthrough|fn|for|function|if|let|loop|private|return|storage|struct|switch|type|uniform|var|while|workgroup)\\b/,builtin:/\\b(?:abs|acos|acosh|all|any|array|asin|asinh|atan|atan2|atanh|atomic|atomicAdd|atomicAnd|atomicCompareExchangeWeak|atomicExchange|atomicLoad|atomicMax|atomicMin|atomicOr|atomicStore|atomicSub|atomicXor|bool|ceil|clamp|cos|cosh|countLeadingZeros|countOneBits|countTrailingZeros|cross|degrees|determinant|distance|dot|dpdx|dpdxCoarse|dpdxFine|dpdy|dpdyCoarse|dpdyFine|exp|exp2|extractBits|f32|f64|faceForward|firstLeadingBit|floor|fma|fract|frexp|fwidth|fwidthCoarse|fwidthFine|i32|i64|insertBits|inverseSqrt|ldexp|length|log|log2|mat[2-4]x[2-4]|max|min|mix|modf|normalize|override|pack2x16float|pack2x16snorm|pack2x16unorm|pack4x8snorm|pack4x8unorm|pow|ptr|quantizeToF16|radians|reflect|refract|reverseBits|round|sampler|sampler_comparison|select|shiftLeft|shiftRight|sign|sin|sinh|smoothstep|sqrt|staticAssert|step|storageBarrier|tan|tanh|textureDimensions|textureGather|textureGatherCompare|textureLoad|textureNumLayers|textureNumLevels|textureNumSamples|textureSample|textureSampleBias|textureSampleCompare|textureSampleCompareLevel|textureSampleGrad|textureSampleLevel|textureStore|texture_1d|texture_2d|texture_2d_array|texture_3d|texture_cube|texture_cube_array|texture_depth_2d|texture_depth_2d_array|texture_depth_cube|texture_depth_cube_array|texture_depth_multisampled_2d|texture_multisampled_2d|texture_storage_1d|texture_storage_2d|texture_storage_2d_array|texture_storage_3d|transpose|trunc|u32|u64|unpack2x16float|unpack2x16snorm|unpack2x16unorm|unpack4x8snorm|unpack4x8unorm|vec[2-4]|workgroupBarrier)\\b/,\"function-calls\":{pattern:/\\b[_a-z]\\w*(?=\\()/i,alias:\"function\"},\"class-name\":/\\b(?:[A-Z][A-Za-z0-9]*)\\b/,\"bool-literal\":{pattern:/\\b(?:false|true)\\b/,alias:\"boolean\"},\"hex-int-literal\":{pattern:/\\b0[xX][0-9a-fA-F]+[iu]?\\b(?![.pP])/,alias:\"number\"},\"hex-float-literal\":{pattern:/\\b0[xX][0-9a-fA-F]*(?:\\.[0-9a-fA-F]*)?(?:[pP][+-]?\\d+[fh]?)?/,alias:\"number\"},\"decimal-float-literal\":[{pattern:/\\d*\\.\\d+(?:[eE](?:\\+|-)?\\d+)?[fh]?/,alias:\"number\"},{pattern:/\\d+\\.\\d*(?:[eE](?:\\+|-)?\\d+)?[fh]?/,alias:\"number\"},{pattern:/\\d+[eE](?:\\+|-)?\\d+[fh]?/,alias:\"number\"},{pattern:/\\b\\d+[fh]\\b/,alias:\"number\"}],\"int-literal\":{pattern:/\\b\\d+[iu]?\\b/,alias:\"number\"},operator:[{pattern:/(?:\\^|~|\\|(?!\\|)|\\|\\||&&|<<|>>|!)(?!=)/},{pattern:/&(?![&=])/},{pattern:/(?:\\+=|-=|\\*=|\\/=|%=|\\^=|&=|\\|=|<<=|>>=)/},{pattern:/(^|[^<>=!])=(?![=>])/,lookbehind:!0},{pattern:/(?:==|!=|<=|\\+\\+|--|(^|[^=])>=)/,lookbehind:!0},{pattern:/(?:(?:[+%]|(?:\\*(?!\\w)))(?!=))|(?:-(?!>))|(?:\\/(?!\\/))/},{pattern:/->/}],punctuation:/[@(){}[\\],;<>:.]/};/components/prism-abap.js!Prism.languages.abap = {\n\t'comment': /^\\*.*/m,\n\t'string': /(`|')(?:\\\\.|(?!\\1)[^\\\\\\r\\n])*\\1/,\n\t'string-template': {\n\t\tpattern: /([|}])(?:\\\\.|[^\\\\|{\\r\\n])*(?=[|{])/,\n\t\tlookbehind: true,\n\t\talias: 'string'\n\t},\n\t/* End Of Line comments should not interfere with strings when the\n\tquote character occurs within them. We assume a string being highlighted\n\tinside an EOL comment is more acceptable than the opposite.\n\t*/\n\t'eol-comment': {\n\t\tpattern: /(^|\\s)\".*/m,\n\t\tlookbehind: true,\n\t\talias: 'comment'\n\t},\n\t'keyword': {\n\t\tpattern: /(\\s|\\.|^)(?:\\*-INPUT|\\?TO|ABAP-SOURCE|ABBREVIATED|ABS|ABSTRACT|ACCEPT|ACCEPTING|ACCESSPOLICY|ACCORDING|ACOS|ACTIVATION|ACTUAL|ADD|ADD-CORRESPONDING|ADJACENT|AFTER|ALIAS|ALIASES|ALIGN|ALL|ALLOCATE|ALPHA|ANALYSIS|ANALYZER|AND|ANY|APPEND|APPENDAGE|APPENDING|APPLICATION|ARCHIVE|AREA|ARITHMETIC|AS|ASCENDING|ASIN|ASPECT|ASSERT|ASSIGN|ASSIGNED|ASSIGNING|ASSOCIATION|ASYNCHRONOUS|AT|ATAN|ATTRIBUTES|AUTHORITY|AUTHORITY-CHECK|AVG|BACK|BACKGROUND|BACKUP|BACKWARD|BADI|BASE|BEFORE|BEGIN|BETWEEN|BIG|BINARY|BINDING|BIT|BIT-AND|BIT-NOT|BIT-OR|BIT-XOR|BLACK|BLANK|BLANKS|BLOB|BLOCK|BLOCKS|BLUE|BOUND|BOUNDARIES|BOUNDS|BOXED|BREAK-POINT|BT|BUFFER|BY|BYPASSING|BYTE|BYTE-CA|BYTE-CN|BYTE-CO|BYTE-CS|BYTE-NA|BYTE-NS|BYTE-ORDER|C|CA|CALL|CALLING|CASE|CAST|CASTING|CATCH|CEIL|CENTER|CENTERED|CHAIN|CHAIN-INPUT|CHAIN-REQUEST|CHANGE|CHANGING|CHANNELS|CHAR-TO-HEX|CHARACTER|CHARLEN|CHECK|CHECKBOX|CIRCULAR|CI_|CLASS|CLASS-CODING|CLASS-DATA|CLASS-EVENTS|CLASS-METHODS|CLASS-POOL|CLEANUP|CLEAR|CLIENT|CLOB|CLOCK|CLOSE|CN|CNT|CO|COALESCE|CODE|CODING|COLLECT|COLOR|COLUMN|COLUMNS|COL_BACKGROUND|COL_GROUP|COL_HEADING|COL_KEY|COL_NEGATIVE|COL_NORMAL|COL_POSITIVE|COL_TOTAL|COMMENT|COMMENTS|COMMIT|COMMON|COMMUNICATION|COMPARING|COMPONENT|COMPONENTS|COMPRESSION|COMPUTE|CONCAT|CONCATENATE|COND|CONDENSE|CONDITION|CONNECT|CONNECTION|CONSTANTS|CONTEXT|CONTEXTS|CONTINUE|CONTROL|CONTROLS|CONV|CONVERSION|CONVERT|COPIES|COPY|CORRESPONDING|COS|COSH|COUNT|COUNTRY|COVER|CP|CPI|CREATE|CREATING|CRITICAL|CS|CURRENCY|CURRENCY_CONVERSION|CURRENT|CURSOR|CURSOR-SELECTION|CUSTOMER|CUSTOMER-FUNCTION|DANGEROUS|DATA|DATABASE|DATAINFO|DATASET|DATE|DAYLIGHT|DBMAXLEN|DD\\/MM\\/YY|DD\\/MM\\/YYYY|DDMMYY|DEALLOCATE|DECIMALS|DECIMAL_SHIFT|DECLARATIONS|DEEP|DEFAULT|DEFERRED|DEFINE|DEFINING|DEFINITION|DELETE|DELETING|DEMAND|DEPARTMENT|DESCENDING|DESCRIBE|DESTINATION|DETAIL|DIALOG|DIRECTORY|DISCONNECT|DISPLAY|DISPLAY-MODE|DISTANCE|DISTINCT|DIV|DIVIDE|DIVIDE-CORRESPONDING|DIVISION|DO|DUMMY|DUPLICATE|DUPLICATES|DURATION|DURING|DYNAMIC|DYNPRO|E|EACH|EDIT|EDITOR-CALL|ELSE|ELSEIF|EMPTY|ENABLED|ENABLING|ENCODING|END|END-ENHANCEMENT-SECTION|END-LINES|END-OF-DEFINITION|END-OF-FILE|END-OF-PAGE|END-OF-SELECTION|ENDAT|ENDCASE|ENDCATCH|ENDCHAIN|ENDCLASS|ENDDO|ENDENHANCEMENT|ENDEXEC|ENDFOR|ENDFORM|ENDFUNCTION|ENDIAN|ENDIF|ENDING|ENDINTERFACE|ENDLOOP|ENDMETHOD|ENDMODULE|ENDON|ENDPROVIDE|ENDSELECT|ENDTRY|ENDWHILE|ENGINEERING|ENHANCEMENT|ENHANCEMENT-POINT|ENHANCEMENT-SECTION|ENHANCEMENTS|ENTRIES|ENTRY|ENVIRONMENT|EQ|EQUAL|EQUIV|ERRORMESSAGE|ERRORS|ESCAPE|ESCAPING|EVENT|EVENTS|EXACT|EXCEPT|EXCEPTION|EXCEPTION-TABLE|EXCEPTIONS|EXCLUDE|EXCLUDING|EXEC|EXECUTE|EXISTS|EXIT|EXIT-COMMAND|EXP|EXPAND|EXPANDING|EXPIRATION|EXPLICIT|EXPONENT|EXPORT|EXPORTING|EXTEND|EXTENDED|EXTENSION|EXTRACT|FAIL|FETCH|FIELD|FIELD-GROUPS|FIELD-SYMBOL|FIELD-SYMBOLS|FIELDS|FILE|FILTER|FILTER-TABLE|FILTERS|FINAL|FIND|FIRST|FIRST-LINE|FIXED-POINT|FKEQ|FKGE|FLOOR|FLUSH|FONT|FOR|FORM|FORMAT|FORWARD|FOUND|FRAC|FRAME|FRAMES|FREE|FRIENDS|FROM|FUNCTION|FUNCTION-POOL|FUNCTIONALITY|FURTHER|GAPS|GE|GENERATE|GET|GIVING|GKEQ|GKGE|GLOBAL|GRANT|GREATER|GREEN|GROUP|GROUPS|GT|HANDLE|HANDLER|HARMLESS|HASHED|HAVING|HDB|HEAD-LINES|HEADER|HEADERS|HEADING|HELP-ID|HELP-REQUEST|HIDE|HIGH|HINT|HOLD|HOTSPOT|I|ICON|ID|IDENTIFICATION|IDENTIFIER|IDS|IF|IGNORE|IGNORING|IMMEDIATELY|IMPLEMENTATION|IMPLEMENTATIONS|IMPLEMENTED|IMPLICIT|IMPORT|IMPORTING|IN|INACTIVE|INCL|INCLUDE|INCLUDES|INCLUDING|INCREMENT|INDEX|INDEX-LINE|INFOTYPES|INHERITING|INIT|INITIAL|INITIALIZATION|INNER|INOUT|INPUT|INSERT|INSTANCES|INTENSIFIED|INTERFACE|INTERFACE-POOL|INTERFACES|INTERNAL|INTERVALS|INTO|INVERSE|INVERTED-DATE|IS|ISO|ITERATOR|ITNO|JOB|JOIN|KEEP|KEEPING|KERNEL|KEY|KEYS|KEYWORDS|KIND|LANGUAGE|LAST|LATE|LAYOUT|LE|LEADING|LEAVE|LEFT|LEFT-JUSTIFIED|LEFTPLUS|LEFTSPACE|LEGACY|LENGTH|LESS|LET|LEVEL|LEVELS|LIKE|LINE|LINE-COUNT|LINE-SELECTION|LINE-SIZE|LINEFEED|LINES|LIST|LIST-PROCESSING|LISTBOX|LITTLE|LLANG|LOAD|LOAD-OF-PROGRAM|LOB|LOCAL|LOCALE|LOCATOR|LOG|LOG-POINT|LOG10|LOGFILE|LOGICAL|LONG|LOOP|LOW|LOWER|LPAD|LPI|LT|M|MAIL|MAIN|MAJOR-ID|MAPPING|MARGIN|MARK|MASK|MATCH|MATCHCODE|MAX|MAXIMUM|MEDIUM|MEMBERS|MEMORY|MESH|MESSAGE|MESSAGE-ID|MESSAGES|MESSAGING|METHOD|METHODS|MIN|MINIMUM|MINOR-ID|MM\\/DD\\/YY|MM\\/DD\\/YYYY|MMDDYY|MOD|MODE|MODIF|MODIFIER|MODIFY|MODULE|MOVE|MOVE-CORRESPONDING|MULTIPLY|MULTIPLY-CORRESPONDING|NA|NAME|NAMETAB|NATIVE|NB|NE|NESTED|NESTING|NEW|NEW-LINE|NEW-PAGE|NEW-SECTION|NEXT|NO|NO-DISPLAY|NO-EXTENSION|NO-GAP|NO-GAPS|NO-GROUPING|NO-HEADING|NO-SCROLLING|NO-SIGN|NO-TITLE|NO-TOPOFPAGE|NO-ZERO|NODE|NODES|NON-UNICODE|NON-UNIQUE|NOT|NP|NS|NULL|NUMBER|NUMOFCHAR|O|OBJECT|OBJECTS|OBLIGATORY|OCCURRENCE|OCCURRENCES|OCCURS|OF|OFF|OFFSET|OLE|ON|ONLY|OPEN|OPTION|OPTIONAL|OPTIONS|OR|ORDER|OTHER|OTHERS|OUT|OUTER|OUTPUT|OUTPUT-LENGTH|OVERFLOW|OVERLAY|PACK|PACKAGE|PAD|PADDING|PAGE|PAGES|PARAMETER|PARAMETER-TABLE|PARAMETERS|PART|PARTIALLY|PATTERN|PERCENTAGE|PERFORM|PERFORMING|PERSON|PF|PF-STATUS|PINK|PLACES|POOL|POSITION|POS_HIGH|POS_LOW|PRAGMAS|PRECOMPILED|PREFERRED|PRESERVING|PRIMARY|PRINT|PRINT-CONTROL|PRIORITY|PRIVATE|PROCEDURE|PROCESS|PROGRAM|PROPERTY|PROTECTED|PROVIDE|PUBLIC|PUSHBUTTON|PUT|QUEUE-ONLY|QUICKINFO|RADIOBUTTON|RAISE|RAISING|RANGE|RANGES|RAW|READ|READ-ONLY|READER|RECEIVE|RECEIVED|RECEIVER|RECEIVING|RED|REDEFINITION|REDUCE|REDUCED|REF|REFERENCE|REFRESH|REGEX|REJECT|REMOTE|RENAMING|REPLACE|REPLACEMENT|REPLACING|REPORT|REQUEST|REQUESTED|RESERVE|RESET|RESOLUTION|RESPECTING|RESPONSIBLE|RESULT|RESULTS|RESUMABLE|RESUME|RETRY|RETURN|RETURNCODE|RETURNING|RIGHT|RIGHT-JUSTIFIED|RIGHTPLUS|RIGHTSPACE|RISK|RMC_COMMUNICATION_FAILURE|RMC_INVALID_STATUS|RMC_SYSTEM_FAILURE|ROLE|ROLLBACK|ROUND|ROWS|RTTI|RUN|SAP|SAP-SPOOL|SAVING|SCALE_PRESERVING|SCALE_PRESERVING_SCIENTIFIC|SCAN|SCIENTIFIC|SCIENTIFIC_WITH_LEADING_ZERO|SCREEN|SCROLL|SCROLL-BOUNDARY|SCROLLING|SEARCH|SECONDARY|SECONDS|SECTION|SELECT|SELECT-OPTIONS|SELECTION|SELECTION-SCREEN|SELECTION-SET|SELECTION-SETS|SELECTION-TABLE|SELECTIONS|SELECTOR|SEND|SEPARATE|SEPARATED|SET|SHARED|SHIFT|SHORT|SHORTDUMP-ID|SIGN|SIGN_AS_POSTFIX|SIMPLE|SIN|SINGLE|SINH|SIZE|SKIP|SKIPPING|SMART|SOME|SORT|SORTABLE|SORTED|SOURCE|SPACE|SPECIFIED|SPLIT|SPOOL|SPOTS|SQL|SQLSCRIPT|SQRT|STABLE|STAMP|STANDARD|START-OF-SELECTION|STARTING|STATE|STATEMENT|STATEMENTS|STATIC|STATICS|STATUSINFO|STEP-LOOP|STOP|STRLEN|STRUCTURE|STRUCTURES|STYLE|SUBKEY|SUBMATCHES|SUBMIT|SUBROUTINE|SUBSCREEN|SUBSTRING|SUBTRACT|SUBTRACT-CORRESPONDING|SUFFIX|SUM|SUMMARY|SUMMING|SUPPLIED|SUPPLY|SUPPRESS|SWITCH|SWITCHSTATES|SYMBOL|SYNCPOINTS|SYNTAX|SYNTAX-CHECK|SYNTAX-TRACE|SYSTEM-CALL|SYSTEM-EXCEPTIONS|SYSTEM-EXIT|TAB|TABBED|TABLE|TABLES|TABLEVIEW|TABSTRIP|TAN|TANH|TARGET|TASK|TASKS|TEST|TESTING|TEXT|TEXTPOOL|THEN|THROW|TIME|TIMES|TIMESTAMP|TIMEZONE|TITLE|TITLE-LINES|TITLEBAR|TO|TOKENIZATION|TOKENS|TOP-LINES|TOP-OF-PAGE|TRACE-FILE|TRACE-TABLE|TRAILING|TRANSACTION|TRANSFER|TRANSFORMATION|TRANSLATE|TRANSPORTING|TRMAC|TRUNC|TRUNCATE|TRUNCATION|TRY|TYPE|TYPE-POOL|TYPE-POOLS|TYPES|ULINE|UNASSIGN|UNDER|UNICODE|UNION|UNIQUE|UNIT|UNIT_CONVERSION|UNIX|UNPACK|UNTIL|UNWIND|UP|UPDATE|UPPER|USER|USER-COMMAND|USING|UTF-8|VALID|VALUE|VALUE-REQUEST|VALUES|VARY|VARYING|VERIFICATION-MESSAGE|VERSION|VIA|VIEW|VISIBLE|WAIT|WARNING|WHEN|WHENEVER|WHERE|WHILE|WIDTH|WINDOW|WINDOWS|WITH|WITH-HEADING|WITH-TITLE|WITHOUT|WORD|WORK|WRITE|WRITER|X|XML|XOR|XSD|XSTRLEN|YELLOW|YES|YYMMDD|Z|ZERO|ZONE)(?![\\w-])/i,\n\t\tlookbehind: true\n\t},\n\t/* Numbers can be only integers. Decimal or Hex appear only as strings */\n\t'number': /\\b\\d+\\b/,\n\t/* Operators must always be surrounded by whitespace, they cannot be put\n\tadjacent to operands.\n\t*/\n\t'operator': {\n\t\tpattern: /(\\s)(?:\\*\\*?|<[=>]?|>=?|\\?=|[-+\\/=])(?=\\s)/,\n\t\tlookbehind: true\n\t},\n\t'string-operator': {\n\t\tpattern: /(\\s)&&?(?=\\s)/,\n\t\tlookbehind: true,\n\t\t/* The official editor highlights */\n\t\talias: 'keyword'\n\t},\n\t'token-operator': [{\n\t\t/* Special operators used to access structure components, class methods/attributes, etc. */\n\t\tpattern: /(\\w)(?:->?|=>|[~|{}])(?=\\w)/,\n\t\tlookbehind: true,\n\t\talias: 'punctuation'\n\t}, {\n\t\t/* Special tokens used do delimit string templates */\n\t\tpattern: /[|{}]/,\n\t\talias: 'punctuation'\n\t}],\n\t'punctuation': /[,.:()]/\n};\n/components/prism-v.min.js\u0007W!function(e){var n={pattern:/[\\s\\S]+/,inside:null};e.languages.v=e.languages.extend(\"clike\",{string:{pattern:/r?([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1/,alias:\"quoted-string\",greedy:!0,inside:{interpolation:{pattern:/((?:^|[^\\\\])(?:\\\\{2})*)\\$(?:\\{[^{}]*\\}|\\w+(?:\\.\\w+(?:\\([^\\(\\)]*\\))?|\\[[^\\[\\]]+\\])*)/,lookbehind:!0,inside:{\"interpolation-variable\":{pattern:/^\\$\\w[\\s\\S]*$/,alias:\"variable\"},\"interpolation-punctuation\":{pattern:/^\\$\\{|\\}$/,alias:\"punctuation\"},\"interpolation-expression\":n}}}},\"class-name\":{pattern:/(\\b(?:enum|interface|struct|type)\\s+)(?:C\\.)?\\w+/,lookbehind:!0},keyword:/(?:\\b(?:__global|as|asm|assert|atomic|break|chan|const|continue|defer|else|embed|enum|fn|for|go(?:to)?|if|import|in|interface|is|lock|match|module|mut|none|or|pub|return|rlock|select|shared|sizeof|static|struct|type(?:of)?|union|unsafe)|\\$(?:else|for|if)|#(?:flag|include))\\b/,number:/\\b(?:0x[a-f\\d]+(?:_[a-f\\d]+)*|0b[01]+(?:_[01]+)*|0o[0-7]+(?:_[0-7]+)*|\\d+(?:_\\d+)*(?:\\.\\d+(?:_\\d+)*)?)\\b/i,operator:/~|\\?|[*\\/%^!=]=?|\\+[=+]?|-[=-]?|\\|[=|]?|&(?:=|&|\\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\\.\\.\\.?/,builtin:/\\b(?:any(?:_float|_int)?|bool|byte(?:ptr)?|charptr|f(?:32|64)|i(?:8|16|64|128|nt)|rune|size_t|string|u(?:16|32|64|128)|voidptr)\\b/}),n.inside=e.languages.v,e.languages.insertBefore(\"v\",\"string\",{char:{pattern:/`(?:\\\\`|\\\\?[^`]{1,2})`/,alias:\"rune\"}}),e.languages.insertBefore(\"v\",\"operator\",{attribute:{pattern:/(^[\\t ]*)\\[(?:deprecated|direct_array_access|flag|inline|live|ref_only|typedef|unsafe_fn|windows_stdcall)\\]/m,lookbehind:!0,alias:\"annotation\",inside:{punctuation:/[\\[\\]]/,keyword:/\\w+/}},generic:{pattern:/<\\w+>(?=\\s*[\\)\\{])/,inside:{punctuation:/[<>]/,\"class-name\":/\\w+/}}}),e.languages.insertBefore(\"v\",\"function\",{\"generic-function\":{pattern:/\\b\\w+\\s*<\\w+>(?=\\()/,inside:{function:/^\\w+/,generic:{pattern:/<\\w+>/,inside:e.languages.v.generic.inside}}}})}(Prism);&/components/prism-shell-session.min.js\u0003!function(s){var n=['\"(?:\\\\\\\\[^]|\\\\$\\\\([^)]+\\\\)|\\\\$(?!\\\\()|`[^`]+`|[^\"\\\\\\\\`$])*\"',\"'[^']*'\",\"\\\\$'(?:[^'\\\\\\\\]|\\\\\\\\[^])*'\",\"<<-?\\\\s*([\\\"']?)(\\\\w+)\\\\1\\\\s[^]*?[\\r\\n]\\\\2\"].join(\"|\");s.languages[\"shell-session\"]={command:{pattern:RegExp('^(?:[^\\\\s@:$#%*!/\\\\\\\\]+@[^\\r\\n@:$#%*!/\\\\\\\\]+(?::[^\\0-\\\\x1F$#%*?\"<>:;|]+)?|[/~.][^\\0-\\\\x1F$#%*?\"<>@:;|]*)?[$#%](?=\\\\s)'+\"(?:[^\\\\\\\\\\r\\n \\t'\\\"<$]|[ \\t](?:(?!#)|#.*$)|\\\\\\\\(?:[^\\r]|\\r\\n?)|\\\\$(?!')|<(?!<)|<<str>>)+\".replace(/<<str>>/g,(function(){return n})),\"m\"),greedy:!0,inside:{info:{pattern:/^[^#$%]+/,alias:\"punctuation\",inside:{user:/^[^\\s@:$#%*!/\\\\]+@[^\\r\\n@:$#%*!/\\\\]+/,punctuation:/:/,path:/[\\s\\S]+/}},bash:{pattern:/(^[$#%]\\s*)\\S[\\s\\S]*/,lookbehind:!0,alias:\"language-bash\",inside:s.languages.bash},\"shell-symbol\":{pattern:/^[$#%]/,alias:\"important\"}}},output:/.(?:.*(?:[\\r\\n]|.$))*/},s.languages[\"sh-session\"]=s.languages.shellsession=s.languages[\"shell-session\"]}(Prism);0/plugins/line-numbers/prism-line-numbers.min.css\u0002apre[class*=language-].line-numbers{position:relative;padding-left:3.8em;counter-reset:linenumber}pre[class*=language-].line-numbers>code{position:relative;white-space:inherit}.line-numbers .line-numbers-rows{position:absolute;pointer-events:none;top:0;font-size:100%;left:-3.8em;width:3em;letter-spacing:-1px;border-right:1px solid #999;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.line-numbers-rows>span{display:block;counter-increment:linenumber}.line-numbers-rows>span:before{content:counter(linenumber);color:#999;display:block;padding-right:.8em;text-align:right}/components/prism-apacheconf.js Prism.languages.apacheconf = {\n\t'comment': /#.*/,\n\t'directive-inline': {\n\t\tpattern: /(^[\\t ]*)\\b(?:AcceptFilter|AcceptPathInfo|AccessFileName|Action|Add(?:Alt|AltByEncoding|AltByType|Charset|DefaultCharset|Description|Encoding|Handler|Icon|IconByEncoding|IconByType|InputFilter|Language|ModuleInfo|OutputFilter|OutputFilterByType|Type)|Alias|AliasMatch|Allow(?:CONNECT|EncodedSlashes|Methods|Override|OverrideList)?|Anonymous(?:_LogEmail|_MustGiveEmail|_NoUserID|_VerifyEmail)?|AsyncRequestWorkerFactor|Auth(?:BasicAuthoritative|BasicFake|BasicProvider|BasicUseDigestAlgorithm|DBDUserPWQuery|DBDUserRealmQuery|DBMGroupFile|DBMType|DBMUserFile|Digest(?:Algorithm|Domain|NonceLifetime|Provider|Qop|ShmemSize)|Form(?:Authoritative|Body|DisableNoStore|FakeBasicAuth|Location|LoginRequiredLocation|LoginSuccessLocation|LogoutLocation|Method|Mimetype|Password|Provider|SitePassphrase|Size|Username)|GroupFile|LDAP(?:AuthorizePrefix|BindAuthoritative|BindDN|BindPassword|CharsetConfig|CompareAsUser|CompareDNOnServer|DereferenceAliases|GroupAttribute|GroupAttributeIsDN|InitialBindAsUser|InitialBindPattern|MaxSubGroupDepth|RemoteUserAttribute|RemoteUserIsDN|SearchAsUser|SubGroupAttribute|SubGroupClass|Url)|Merging|Name|nCache(?:Context|Enable|ProvideFor|SOCache|Timeout)|nzFcgiCheckAuthnProvider|nzFcgiDefineProvider|Type|UserFile|zDBDLoginToReferer|zDBDQuery|zDBDRedirectQuery|zDBMType|zSendForbiddenOnFailure)|BalancerGrowth|BalancerInherit|BalancerMember|BalancerPersist|BrowserMatch|BrowserMatchNoCase|BufferedLogs|BufferSize|Cache(?:DefaultExpire|DetailHeader|DirLength|DirLevels|Disable|Enable|File|Header|IgnoreCacheControl|IgnoreHeaders|IgnoreNoLastMod|IgnoreQueryString|IgnoreURLSessionIdentifiers|KeyBaseURL|LastModifiedFactor|Lock|LockMaxAge|LockPath|MaxExpire|MaxFileSize|MinExpire|MinFileSize|NegotiatedDocs|QuickHandler|ReadSize|ReadTime|Root|Socache(?:MaxSize|MaxTime|MinTime|ReadSize|ReadTime)?|StaleOnError|StoreExpired|StoreNoStore|StorePrivate)|CGIDScriptTimeout|CGIMapExtension|CharsetDefault|CharsetOptions|CharsetSourceEnc|CheckCaseOnly|CheckSpelling|ChrootDir|ContentDigest|CookieDomain|CookieExpires|CookieName|CookieStyle|CookieTracking|CoreDumpDirectory|CustomLog|Dav|DavDepthInfinity|DavGenericLockDB|DavLockDB|DavMinTimeout|DBDExptime|DBDInitSQL|DBDKeep|DBDMax|DBDMin|DBDParams|DBDPersist|DBDPrepareSQL|DBDriver|DefaultIcon|DefaultLanguage|DefaultRuntimeDir|DefaultType|Define|Deflate(?:BufferSize|CompressionLevel|FilterNote|InflateLimitRequestBody|InflateRatio(?:Burst|Limit)|MemLevel|WindowSize)|Deny|DirectoryCheckHandler|DirectoryIndex|DirectoryIndexRedirect|DirectorySlash|DocumentRoot|DTracePrivileges|DumpIOInput|DumpIOOutput|EnableExceptionHook|EnableMMAP|EnableSendfile|Error|ErrorDocument|ErrorLog|ErrorLogFormat|Example|ExpiresActive|ExpiresByType|ExpiresDefault|ExtendedStatus|ExtFilterDefine|ExtFilterOptions|FallbackResource|FileETag|FilterChain|FilterDeclare|FilterProtocol|FilterProvider|FilterTrace|ForceLanguagePriority|ForceType|ForensicLog|GprofDir|GracefulShutdownTimeout|Group|Header|HeaderName|Heartbeat(?:Address|Listen|MaxServers|Storage)|HostnameLookups|IdentityCheck|IdentityCheckTimeout|ImapBase|ImapDefault|ImapMenu|Include|IncludeOptional|Index(?:HeadInsert|Ignore|IgnoreReset|Options|OrderDefault|StyleSheet)|InputSed|ISAPI(?:AppendLogToErrors|AppendLogToQuery|CacheFile|FakeAsync|LogNotSupported|ReadAheadBuffer)|KeepAlive|KeepAliveTimeout|KeptBodySize|LanguagePriority|LDAP(?:CacheEntries|CacheTTL|ConnectionPoolTTL|ConnectionTimeout|LibraryDebug|OpCacheEntries|OpCacheTTL|ReferralHopLimit|Referrals|Retries|RetryDelay|SharedCacheFile|SharedCacheSize|Timeout|TrustedClientCert|TrustedGlobalCert|TrustedMode|VerifyServerCert)|Limit(?:InternalRecursion|Request(?:Body|Fields|FieldSize|Line)|XMLRequestBody)|Listen|ListenBackLog|LoadFile|LoadModule|LogFormat|LogLevel|LogMessage|LuaAuthzProvider|LuaCodeCache|Lua(?:Hook(?:AccessChecker|AuthChecker|CheckUserID|Fixups|InsertFilter|Log|MapToStorage|TranslateName|TypeChecker)|Inherit|InputFilter|MapHandler|OutputFilter|PackageCPath|PackagePath|QuickHandler|Root|Scope)|Max(?:ConnectionsPerChild|KeepAliveRequests|MemFree|RangeOverlaps|RangeReversals|Ranges|RequestWorkers|SpareServers|SpareThreads|Threads)|MergeTrailers|MetaDir|MetaFiles|MetaSuffix|MimeMagicFile|MinSpareServers|MinSpareThreads|MMapFile|ModemStandard|ModMimeUsePathInfo|MultiviewsMatch|Mutex|NameVirtualHost|NoProxy|NWSSLTrustedCerts|NWSSLUpgradeable|Options|Order|OutputSed|PassEnv|PidFile|PrivilegesMode|Protocol|ProtocolEcho|Proxy(?:AddHeaders|BadHeader|Block|Domain|ErrorOverride|ExpressDBMFile|ExpressDBMType|ExpressEnable|FtpDirCharset|FtpEscapeWildcards|FtpListOnWildcard|HTML(?:BufSize|CharsetOut|DocType|Enable|Events|Extended|Fixups|Interp|Links|Meta|StripComments|URLMap)|IOBufferSize|MaxForwards|Pass(?:Inherit|InterpolateEnv|Match|Reverse|ReverseCookieDomain|ReverseCookiePath)?|PreserveHost|ReceiveBufferSize|Remote|RemoteMatch|Requests|SCGIInternalRedirect|SCGISendfile|Set|SourceAddress|Status|Timeout|Via)|ReadmeName|ReceiveBufferSize|Redirect|RedirectMatch|RedirectPermanent|RedirectTemp|ReflectorHeader|RemoteIP(?:Header|InternalProxy|InternalProxyList|ProxiesHeader|TrustedProxy|TrustedProxyList)|RemoveCharset|RemoveEncoding|RemoveHandler|RemoveInputFilter|RemoveLanguage|RemoveOutputFilter|RemoveType|RequestHeader|RequestReadTimeout|Require|Rewrite(?:Base|Cond|Engine|Map|Options|Rule)|RLimitCPU|RLimitMEM|RLimitNPROC|Satisfy|ScoreBoardFile|Script(?:Alias|AliasMatch|InterpreterSource|Log|LogBuffer|LogLength|Sock)?|SecureListen|SeeRequestTail|SendBufferSize|Server(?:Admin|Alias|Limit|Name|Path|Root|Signature|Tokens)|Session(?:Cookie(?:Name|Name2|Remove)|Crypto(?:Cipher|Driver|Passphrase|PassphraseFile)|DBD(?:CookieName|CookieName2|CookieRemove|DeleteLabel|InsertLabel|PerUser|SelectLabel|UpdateLabel)|Env|Exclude|Header|Include|MaxAge)?|SetEnv|SetEnvIf|SetEnvIfExpr|SetEnvIfNoCase|SetHandler|SetInputFilter|SetOutputFilter|SSIEndTag|SSIErrorMsg|SSIETag|SSILastModified|SSILegacyExprParser|SSIStartTag|SSITimeFormat|SSIUndefinedEcho|SSL(?:CACertificateFile|CACertificatePath|CADNRequestFile|CADNRequestPath|CARevocationCheck|CARevocationFile|CARevocationPath|CertificateChainFile|CertificateFile|CertificateKeyFile|CipherSuite|Compression|CryptoDevice|Engine|FIPS|HonorCipherOrder|InsecureRenegotiation|OCSP(?:DefaultResponder|Enable|OverrideResponder|ResponderTimeout|ResponseMaxAge|ResponseTimeSkew|UseRequestNonce)|OpenSSLConfCmd|Options|PassPhraseDialog|Protocol|Proxy(?:CACertificateFile|CACertificatePath|CARevocation(?:Check|File|Path)|CheckPeer(?:CN|Expire|Name)|CipherSuite|Engine|MachineCertificate(?:ChainFile|File|Path)|Protocol|Verify|VerifyDepth)|RandomSeed|RenegBufferSize|Require|RequireSSL|Session(?:Cache|CacheTimeout|TicketKeyFile|Tickets)|SRPUnknownUserSeed|SRPVerifierFile|Stapling(?:Cache|ErrorCacheTimeout|FakeTryLater|ForceURL|ResponderTimeout|ResponseMaxAge|ResponseTimeSkew|ReturnResponderErrors|StandardCacheTimeout)|StrictSNIVHostCheck|UserName|UseStapling|VerifyClient|VerifyDepth)|StartServers|StartThreads|Substitute|Suexec|SuexecUserGroup|ThreadLimit|ThreadsPerChild|ThreadStackSize|TimeOut|TraceEnable|TransferLog|TypesConfig|UnDefine|UndefMacro|UnsetEnv|Use|UseCanonicalName|UseCanonicalPhysicalPort|User|UserDir|VHostCGIMode|VHostCGIPrivs|VHostGroup|VHostPrivs|VHostSecure|VHostUser|Virtual(?:DocumentRoot|ScriptAlias)(?:IP)?|WatchdogInterval|XBitHack|xml2EncAlias|xml2EncDefault|xml2StartParse)\\b/im,\n\t\tlookbehind: true,\n\t\talias: 'property'\n\t},\n\t'directive-block': {\n\t\tpattern: /<\\/?\\b(?:Auth[nz]ProviderAlias|Directory|DirectoryMatch|Else|ElseIf|Files|FilesMatch|If|IfDefine|IfModule|IfVersion|Limit|LimitExcept|Location|LocationMatch|Macro|Proxy|Require(?:All|Any|None)|VirtualHost)\\b.*>/i,\n\t\tinside: {\n\t\t\t'directive-block': {\n\t\t\t\tpattern: /^<\\/?\\w+/,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': /^<\\/?/\n\t\t\t\t},\n\t\t\t\talias: 'tag'\n\t\t\t},\n\t\t\t'directive-block-parameter': {\n\t\t\t\tpattern: /.*[^>]/,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': /:/,\n\t\t\t\t\t'string': {\n\t\t\t\t\t\tpattern: /(\"|').*\\1/,\n\t\t\t\t\t\tinside: {\n\t\t\t\t\t\t\t'variable': /[$%]\\{?(?:\\w\\.?[-+:]?)+\\}?/\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\talias: 'attr-value'\n\t\t\t},\n\t\t\t'punctuation': />/\n\t\t},\n\t\talias: 'tag'\n\t},\n\t'directive-flags': {\n\t\tpattern: /\\[(?:[\\w=],?)+\\]/,\n\t\talias: 'keyword'\n\t},\n\t'string': {\n\t\tpattern: /(\"|').*\\1/,\n\t\tinside: {\n\t\t\t'variable': /[$%]\\{?(?:\\w\\.?[-+:]?)+\\}?/\n\t\t}\n\t},\n\t'variable': /[$%]\\{?(?:\\w\\.?[-+:]?)+\\}?/,\n\t'regex': /\\^?.*\\$|\\^.*\\$?/\n};\n/components/prism-icon.js\u0003Prism.languages.icon = {\n\t'comment': /#.*/,\n\t'string': {\n\t\tpattern: /([\"'])(?:(?!\\1)[^\\\\\\r\\n_]|\\\\.|_(?!\\1)(?:\\r\\n|[\\s\\S]))*\\1/,\n\t\tgreedy: true\n\t},\n\t'number': /\\b(?:\\d+r[a-z\\d]+|\\d+(?:\\.\\d+)?(?:e[+-]?\\d+)?)\\b|\\.\\d+\\b/i,\n\t'builtin-keyword': {\n\t\tpattern: /&(?:allocated|ascii|clock|collections|cset|current|date|dateline|digits|dump|e|error(?:number|text|value)?|errout|fail|features|file|host|input|lcase|letters|level|line|main|null|output|phi|pi|pos|progname|random|regions|source|storage|subject|time|trace|ucase|version)\\b/,\n\t\talias: 'variable'\n\t},\n\t'directive': {\n\t\tpattern: /\\$\\w+/,\n\t\talias: 'builtin'\n\t},\n\t'keyword': /\\b(?:break|by|case|create|default|do|else|end|every|fail|global|if|initial|invocable|link|local|next|not|of|procedure|record|repeat|return|static|suspend|then|to|until|while)\\b/,\n\t'function': /\\b(?!\\d)\\w+(?=\\s*[({]|\\s*!\\s*\\[)/,\n\t'operator': /[+-]:(?!=)|(?:[\\/?@^%&]|\\+\\+?|--?|==?=?|~==?=?|\\*\\*?|\\|\\|\\|?|<(?:->?|<?=?)|>>?=?)(?::=)?|:(?:=:?)?|[!.\\\\|~]/,\n\t'punctuation': /[\\[\\](){},;]/\n};\n/components/prism-nim.js\u0007ePrism.languages.nim = {\n\t'comment': {\n\t\tpattern: /#.*/,\n\t\tgreedy: true\n\t},\n\t'string': {\n\t\t// Double-quoted strings can be prefixed by an identifier (Generalized raw string literals)\n\t\tpattern: /(?:\\b(?!\\d)(?:\\w|\\\\x[89a-fA-F][0-9a-fA-F])+)?(?:\"\"\"[\\s\\S]*?\"\"\"(?!\")|\"(?:\\\\[\\s\\S]|\"\"|[^\"\\\\])*\")/,\n\t\tgreedy: true\n\t},\n\t'char': {\n\t\t// Character literals are handled specifically to prevent issues with numeric type suffixes\n\t\tpattern: /'(?:\\\\(?:\\d+|x[\\da-fA-F]{0,2}|.)|[^'])'/,\n\t\tgreedy: true\n\t},\n\n\t'function': {\n\t\tpattern: /(?:(?!\\d)(?:\\w|\\\\x[89a-fA-F][0-9a-fA-F])+|`[^`\\r\\n]+`)\\*?(?:\\[[^\\]]+\\])?(?=\\s*\\()/,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'operator': /\\*$/\n\t\t}\n\t},\n\t// We don't want to highlight operators (and anything really) inside backticks\n\t'identifier': {\n\t\tpattern: /`[^`\\r\\n]+`/,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'punctuation': /`/\n\t\t}\n\t},\n\n\t// The negative look ahead prevents wrong highlighting of the .. operator\n\t'number': /\\b(?:0[xXoObB][\\da-fA-F_]+|\\d[\\d_]*(?:(?!\\.\\.)\\.[\\d_]*)?(?:[eE][+-]?\\d[\\d_]*)?)(?:'?[iuf]\\d*)?/,\n\t'keyword': /\\b(?:addr|as|asm|atomic|bind|block|break|case|cast|concept|const|continue|converter|defer|discard|distinct|do|elif|else|end|enum|except|export|finally|for|from|func|generic|if|import|include|interface|iterator|let|macro|method|mixin|nil|object|out|proc|ptr|raise|ref|return|static|template|try|tuple|type|using|var|when|while|with|without|yield)\\b/,\n\t'operator': {\n\t\t// Look behind and look ahead prevent wrong highlighting of punctuations [. .] {. .} (. .)\n\t\t// but allow the slice operator .. to take precedence over them\n\t\t// One can define his own operators in Nim so all combination of operators might be an operator.\n\t\tpattern: /(^|[({\\[](?=\\.\\.)|(?![({\\[]\\.).)(?:(?:[=+\\-*\\/<>@$~&%|!?^:\\\\]|\\.\\.|\\.(?![)}\\]]))+|\\b(?:and|div|in|is|isnot|mod|not|notin|of|or|shl|shr|xor)\\b)/m,\n\t\tlookbehind: true\n\t},\n\t'punctuation': /[({\\[]\\.|\\.[)}\\]]|[`(){}\\[\\],:]/\n};\n/components/prism-naniscript.js\u000ek(function (Prism) {\n\n\tvar expressionDef = /\\{[^\\r\\n\\[\\]{}]*\\}/;\n\n\tvar params = {\n\t\t'quoted-string': {\n\t\t\tpattern: /\"(?:[^\"\\\\]|\\\\.)*\"/,\n\t\t\talias: 'operator'\n\t\t},\n\t\t'command-param-id': {\n\t\t\tpattern: /(\\s)\\w+:/,\n\t\t\tlookbehind: true,\n\t\t\talias: 'property'\n\t\t},\n\t\t'command-param-value': [\n\t\t\t{\n\t\t\t\tpattern: expressionDef,\n\t\t\t\talias: 'selector',\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /([\\t ])\\S+/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true,\n\t\t\t\talias: 'operator',\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /\\S(?:.*\\S)?/,\n\t\t\t\talias: 'operator',\n\t\t\t}\n\t\t]\n\t};\n\n\tPrism.languages.naniscript = {\n\t\t// ; ...\n\t\t'comment': {\n\t\t\tpattern: /^([\\t ]*);.*/m,\n\t\t\tlookbehind: true,\n\t\t},\n\t\t// > ...\n\t\t// Define is a control line starting with '>' followed by a word, a space and a text.\n\t\t'define': {\n\t\t\tpattern: /^>.+/m,\n\t\t\talias: 'tag',\n\t\t\tinside: {\n\t\t\t\t'value': {\n\t\t\t\t\tpattern: /(^>\\w+[\\t ]+)(?!\\s)[^{}\\r\\n]+/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\talias: 'operator'\n\t\t\t\t},\n\t\t\t\t'key': {\n\t\t\t\t\tpattern: /(^>)\\w+/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t// # ...\n\t\t'label': {\n\t\t\tpattern: /^([\\t ]*)#[\\t ]*\\w+[\\t ]*$/m,\n\t\t\tlookbehind: true,\n\t\t\talias: 'regex'\n\t\t},\n\t\t'command': {\n\t\t\tpattern: /^([\\t ]*)@\\w+(?=[\\t ]|$).*/m,\n\t\t\tlookbehind: true,\n\t\t\talias: 'function',\n\t\t\tinside: {\n\t\t\t\t'command-name': /^@\\w+/,\n\t\t\t\t'expression': {\n\t\t\t\t\tpattern: expressionDef,\n\t\t\t\t\tgreedy: true,\n\t\t\t\t\talias: 'selector'\n\t\t\t\t},\n\t\t\t\t'command-params': {\n\t\t\t\t\tpattern: /\\s*\\S[\\s\\S]*/,\n\t\t\t\t\tinside: params\n\t\t\t\t},\n\t\t\t}\n\t\t},\n\t\t// Generic is any line that doesn't start with operators: ;>#@\n\t\t'generic-text': {\n\t\t\tpattern: /(^[ \\t]*)[^#@>;\\s].*/m,\n\t\t\tlookbehind: true,\n\t\t\talias: 'punctuation',\n\t\t\tinside: {\n\t\t\t\t// \\{ ... \\} ... \\[ ... \\] ... \\\"\n\t\t\t\t'escaped-char': /\\\\[{}\\[\\]\"]/,\n\t\t\t\t'expression': {\n\t\t\t\t\tpattern: expressionDef,\n\t\t\t\t\tgreedy: true,\n\t\t\t\t\talias: 'selector'\n\t\t\t\t},\n\t\t\t\t'inline-command': {\n\t\t\t\t\tpattern: /\\[[\\t ]*\\w[^\\r\\n\\[\\]]*\\]/,\n\t\t\t\t\tgreedy: true,\n\t\t\t\t\talias: 'function',\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'command-params': {\n\t\t\t\t\t\t\tpattern: /(^\\[[\\t ]*\\w+\\b)[\\s\\S]+(?=\\]$)/,\n\t\t\t\t\t\t\tlookbehind: true,\n\t\t\t\t\t\t\tinside: params\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'command-param-name': {\n\t\t\t\t\t\t\tpattern: /^(\\[[\\t ]*)\\w+/,\n\t\t\t\t\t\t\tlookbehind: true,\n\t\t\t\t\t\t\talias: 'name',\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'start-stop-char': /[\\[\\]]/,\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\t};\n\tPrism.languages.nani = Prism.languages['naniscript'];\n\n\t/** @typedef {InstanceType<import(\"./prism-core\")[\"Token\"]>} Token */\n\n\t/**\n\t * This hook is used to validate generic-text tokens for balanced brackets.\n\t * Mark token as bad-line when contains not balanced brackets: {},[]\n\t */\n\tPrism.hooks.add('after-tokenize', function (env) {\n\t\t/** @type {(Token | string)[]} */\n\t\tvar tokens = env.tokens;\n\t\ttokens.forEach(function (token) {\n\t\t\tif (typeof token !== 'string' && token.type === 'generic-text') {\n\t\t\t\tvar content = getTextContent(token);\n\t\t\t\tif (!isBracketsBalanced(content)) {\n\t\t\t\t\ttoken.type = 'bad-line';\n\t\t\t\t\ttoken.content = content;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n\n\t/**\n\t * @param {string} input\n\t * @returns {boolean}\n\t */\n\tfunction isBracketsBalanced(input) {\n\t\tvar brackets = '[]{}';\n\t\tvar stack = [];\n\t\tfor (var i = 0; i < input.length; i++) {\n\t\t\tvar bracket = input[i];\n\t\t\tvar bracketsIndex = brackets.indexOf(bracket);\n\t\t\tif (bracketsIndex !== -1) {\n\t\t\t\tif (bracketsIndex % 2 === 0) {\n\t\t\t\t\tstack.push(bracketsIndex + 1);\n\t\t\t\t} else if (stack.pop() !== bracketsIndex) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn stack.length === 0;\n\t}\n\n\t/**\n\t * @param {string | Token | (string | Token)[]} token\n\t * @returns {string}\n\t */\n\tfunction getTextContent(token) {\n\t\tif (typeof token === 'string') {\n\t\t\treturn token;\n\t\t} else if (Array.isArray(token)) {\n\t\t\treturn token.map(getTextContent).join('');\n\t\t} else {\n\t\t\treturn getTextContent(token.content);\n\t\t}\n\t}\n\n}(Prism));\n/components/prism-makefile.js\u00043Prism.languages.makefile = {\n\t'comment': {\n\t\tpattern: /(^|[^\\\\])#(?:\\\\(?:\\r\\n|[\\s\\S])|[^\\\\\\r\\n])*/,\n\t\tlookbehind: true\n\t},\n\t'string': {\n\t\tpattern: /([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1/,\n\t\tgreedy: true\n\t},\n\n\t'builtin-target': {\n\t\tpattern: /\\.[A-Z][^:#=\\s]+(?=\\s*:(?!=))/,\n\t\talias: 'builtin'\n\t},\n\n\t'target': {\n\t\tpattern: /^(?:[^:=\\s]|[ \\t]+(?![\\s:]))+(?=\\s*:(?!=))/m,\n\t\talias: 'symbol',\n\t\tinside: {\n\t\t\t'variable': /\\$+(?:(?!\\$)[^(){}:#=\\s]+|(?=[({]))/\n\t\t}\n\t},\n\t'variable': /\\$+(?:(?!\\$)[^(){}:#=\\s]+|\\([@*%<^+?][DF]\\)|(?=[({]))/,\n\n\t// Directives\n\t'keyword': /-include\\b|\\b(?:define|else|endef|endif|export|ifn?def|ifn?eq|include|override|private|sinclude|undefine|unexport|vpath)\\b/,\n\n\t'function': {\n\t\tpattern: /(\\()(?:abspath|addsuffix|and|basename|call|dir|error|eval|file|filter(?:-out)?|findstring|firstword|flavor|foreach|guile|if|info|join|lastword|load|notdir|or|origin|patsubst|realpath|shell|sort|strip|subst|suffix|value|warning|wildcard|word(?:list|s)?)(?=[ \\t])/,\n\t\tlookbehind: true\n\t},\n\t'operator': /(?:::|[?:+!])?=|[|@]/,\n\t'punctuation': /[:;(){}]/\n};\n\"/components/prism-maxscript.min.js\u0006+!function(t){var e=/\\b(?:about|and|animate|as|at|attributes|by|case|catch|collect|continue|coordsys|do|else|exit|fn|for|from|function|global|if|in|local|macroscript|mapped|max|not|of|off|on|or|parameters|persistent|plugin|rcmenu|return|rollout|set|struct|then|throw|to|tool|try|undo|utility|when|where|while|with)\\b/i;t.languages.maxscript={comment:{pattern:/\\/\\*[\\s\\S]*?(?:\\*\\/|$)|--.*/,greedy:!0},string:{pattern:/(^|[^\"\\\\@])(?:\"(?:[^\"\\\\]|\\\\[\\s\\S])*\"|@\"[^\"]*\")/,lookbehind:!0,greedy:!0},path:{pattern:/\\$(?:[\\w/\\\\.*?]|'[^']*')*/,greedy:!0,alias:\"string\"},\"function-call\":{pattern:RegExp(\"((?:^|[;=<>+\\\\-*/^({\\\\[]|\\\\b(?:and|by|case|catch|collect|do|else|if|in|not|or|return|then|to|try|where|while|with)\\\\b)[ \\t]*)(?!\"+e.source+\")[a-z_]\\\\w*\\\\b(?=[ \\t]*(?:(?!\"+e.source+\")[a-z_]|\\\\d|-\\\\.?\\\\d|[({'\\\"$@#?]))\",\"im\"),lookbehind:!0,greedy:!0,alias:\"function\"},\"function-definition\":{pattern:/(\\b(?:fn|function)\\s+)\\w+\\b/i,lookbehind:!0,alias:\"function\"},argument:{pattern:/\\b[a-z_]\\w*(?=:)/i,alias:\"attr-name\"},keyword:e,boolean:/\\b(?:false|true)\\b/,time:{pattern:/(^|[^\\w.])(?:(?:(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:[eEdD][+-]\\d+|[LP])?[msft])+|\\d+:\\d+(?:\\.\\d*)?)(?![\\w.:])/,lookbehind:!0,alias:\"number\"},number:[{pattern:/(^|[^\\w.])(?:(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:[eEdD][+-]\\d+|[LP])?|0x[a-fA-F0-9]+)(?![\\w.:])/,lookbehind:!0},/\\b(?:e|pi)\\b/],constant:/\\b(?:dontcollect|ok|silentValue|undefined|unsupplied)\\b/,color:{pattern:/\\b(?:black|blue|brown|gray|green|orange|red|white|yellow)\\b/i,alias:\"constant\"},operator:/[-+*/<>=!]=?|[&^?]|#(?!\\()/,punctuation:/[()\\[\\]{}.:,;]|#(?=\\()|\\\\$/m}}(Prism);-/plugins/show-language/prism-show-language.js\u001e(function () {\n\n\tif (typeof Prism === 'undefined' || typeof document === 'undefined') {\n\t\treturn;\n\t}\n\n\tif (!Prism.plugins.toolbar) {\n\t\tconsole.warn('Show Languages plugin loaded before Toolbar plugin.');\n\n\t\treturn;\n\t}\n\n\t/* eslint-disable */\n\n\t// The languages map is built automatically with gulp\n\tvar Languages = /*languages_placeholder[*/{\n\t\t\"none\": \"Plain text\",\n\t\t\"plain\": \"Plain text\",\n\t\t\"plaintext\": \"Plain text\",\n\t\t\"text\": \"Plain text\",\n\t\t\"txt\": \"Plain text\",\n\t\t\"html\": \"HTML\",\n\t\t\"xml\": \"XML\",\n\t\t\"svg\": \"SVG\",\n\t\t\"mathml\": \"MathML\",\n\t\t\"ssml\": \"SSML\",\n\t\t\"rss\": \"RSS\",\n\t\t\"css\": \"CSS\",\n\t\t\"clike\": \"C-like\",\n\t\t\"js\": \"JavaScript\",\n\t\t\"abap\": \"ABAP\",\n\t\t\"abnf\": \"ABNF\",\n\t\t\"al\": \"AL\",\n\t\t\"antlr4\": \"ANTLR4\",\n\t\t\"g4\": \"ANTLR4\",\n\t\t\"apacheconf\": \"Apache Configuration\",\n\t\t\"apl\": \"APL\",\n\t\t\"aql\": \"AQL\",\n\t\t\"ino\": \"Arduino\",\n\t\t\"arff\": \"ARFF\",\n\t\t\"armasm\": \"ARM Assembly\",\n\t\t\"arm-asm\": \"ARM Assembly\",\n\t\t\"art\": \"Arturo\",\n\t\t\"asciidoc\": \"AsciiDoc\",\n\t\t\"adoc\": \"AsciiDoc\",\n\t\t\"aspnet\": \"ASP.NET (C#)\",\n\t\t\"asm6502\": \"6502 Assembly\",\n\t\t\"asmatmel\": \"Atmel AVR Assembly\",\n\t\t\"autohotkey\": \"AutoHotkey\",\n\t\t\"autoit\": \"AutoIt\",\n\t\t\"avisynth\": \"AviSynth\",\n\t\t\"avs\": \"AviSynth\",\n\t\t\"avro-idl\": \"Avro IDL\",\n\t\t\"avdl\": \"Avro IDL\",\n\t\t\"awk\": \"AWK\",\n\t\t\"gawk\": \"GAWK\",\n\t\t\"sh\": \"Shell\",\n\t\t\"basic\": \"BASIC\",\n\t\t\"bbcode\": \"BBcode\",\n\t\t\"bbj\": \"BBj\",\n\t\t\"bnf\": \"BNF\",\n\t\t\"rbnf\": \"RBNF\",\n\t\t\"bqn\": \"BQN\",\n\t\t\"bsl\": \"BSL (1C:Enterprise)\",\n\t\t\"oscript\": \"OneScript\",\n\t\t\"csharp\": \"C#\",\n\t\t\"cs\": \"C#\",\n\t\t\"dotnet\": \"C#\",\n\t\t\"cpp\": \"C++\",\n\t\t\"cfscript\": \"CFScript\",\n\t\t\"cfc\": \"CFScript\",\n\t\t\"cil\": \"CIL\",\n\t\t\"cilkc\": \"Cilk/C\",\n\t\t\"cilk-c\": \"Cilk/C\",\n\t\t\"cilkcpp\": \"Cilk/C++\",\n\t\t\"cilk-cpp\": \"Cilk/C++\",\n\t\t\"cilk\": \"Cilk/C++\",\n\t\t\"cmake\": \"CMake\",\n\t\t\"cobol\": \"COBOL\",\n\t\t\"coffee\": \"CoffeeScript\",\n\t\t\"conc\": \"Concurnas\",\n\t\t\"csp\": \"Content-Security-Policy\",\n\t\t\"css-extras\": \"CSS Extras\",\n\t\t\"csv\": \"CSV\",\n\t\t\"cue\": \"CUE\",\n\t\t\"dataweave\": \"DataWeave\",\n\t\t\"dax\": \"DAX\",\n\t\t\"django\": \"Django/Jinja2\",\n\t\t\"jinja2\": \"Django/Jinja2\",\n\t\t\"dns-zone-file\": \"DNS zone file\",\n\t\t\"dns-zone\": \"DNS zone file\",\n\t\t\"dockerfile\": \"Docker\",\n\t\t\"dot\": \"DOT (Graphviz)\",\n\t\t\"gv\": \"DOT (Graphviz)\",\n\t\t\"ebnf\": \"EBNF\",\n\t\t\"editorconfig\": \"EditorConfig\",\n\t\t\"ejs\": \"EJS\",\n\t\t\"etlua\": \"Embedded Lua templating\",\n\t\t\"erb\": \"ERB\",\n\t\t\"excel-formula\": \"Excel Formula\",\n\t\t\"xlsx\": \"Excel Formula\",\n\t\t\"xls\": \"Excel Formula\",\n\t\t\"fsharp\": \"F#\",\n\t\t\"firestore-security-rules\": \"Firestore security rules\",\n\t\t\"ftl\": \"FreeMarker Template Language\",\n\t\t\"gml\": \"GameMaker Language\",\n\t\t\"gamemakerlanguage\": \"GameMaker Language\",\n\t\t\"gap\": \"GAP (CAS)\",\n\t\t\"gcode\": \"G-code\",\n\t\t\"gdscript\": \"GDScript\",\n\t\t\"gedcom\": \"GEDCOM\",\n\t\t\"gettext\": \"gettext\",\n\t\t\"po\": \"gettext\",\n\t\t\"glsl\": \"GLSL\",\n\t\t\"gn\": \"GN\",\n\t\t\"gni\": \"GN\",\n\t\t\"linker-script\": \"GNU Linker Script\",\n\t\t\"ld\": \"GNU Linker Script\",\n\t\t\"go-module\": \"Go module\",\n\t\t\"go-mod\": \"Go module\",\n\t\t\"graphql\": \"GraphQL\",\n\t\t\"hbs\": \"Handlebars\",\n\t\t\"hs\": \"Haskell\",\n\t\t\"hcl\": \"HCL\",\n\t\t\"hlsl\": \"HLSL\",\n\t\t\"http\": \"HTTP\",\n\t\t\"hpkp\": \"HTTP Public-Key-Pins\",\n\t\t\"hsts\": \"HTTP Strict-Transport-Security\",\n\t\t\"ichigojam\": \"IchigoJam\",\n\t\t\"icu-message-format\": \"ICU Message Format\",\n\t\t\"idr\": \"Idris\",\n\t\t\"ignore\": \".ignore\",\n\t\t\"gitignore\": \".gitignore\",\n\t\t\"hgignore\": \".hgignore\",\n\t\t\"npmignore\": \".npmignore\",\n\t\t\"inform7\": \"Inform 7\",\n\t\t\"javadoc\": \"JavaDoc\",\n\t\t\"javadoclike\": \"JavaDoc-like\",\n\t\t\"javastacktrace\": \"Java stack trace\",\n\t\t\"jq\": \"JQ\",\n\t\t\"jsdoc\": \"JSDoc\",\n\t\t\"js-extras\": \"JS Extras\",\n\t\t\"json\": \"JSON\",\n\t\t\"webmanifest\": \"Web App Manifest\",\n\t\t\"json5\": \"JSON5\",\n\t\t\"jsonp\": \"JSONP\",\n\t\t\"jsstacktrace\": \"JS stack trace\",\n\t\t\"js-templates\": \"JS Templates\",\n\t\t\"keepalived\": \"Keepalived Configure\",\n\t\t\"kts\": \"Kotlin Script\",\n\t\t\"kt\": \"Kotlin\",\n\t\t\"kumir\": \"KuMir (КуМир)\",\n\t\t\"kum\": \"KuMir (КуМир)\",\n\t\t\"latex\": \"LaTeX\",\n\t\t\"tex\": \"TeX\",\n\t\t\"context\": \"ConTeXt\",\n\t\t\"lilypond\": \"LilyPond\",\n\t\t\"ly\": \"LilyPond\",\n\t\t\"emacs\": \"Lisp\",\n\t\t\"elisp\": \"Lisp\",\n\t\t\"emacs-lisp\": \"Lisp\",\n\t\t\"llvm\": \"LLVM IR\",\n\t\t\"log\": \"Log file\",\n\t\t\"lolcode\": \"LOLCODE\",\n\t\t\"magma\": \"Magma (CAS)\",\n\t\t\"md\": \"Markdown\",\n\t\t\"markup-templating\": \"Markup templating\",\n\t\t\"matlab\": \"MATLAB\",\n\t\t\"maxscript\": \"MAXScript\",\n\t\t\"mel\": \"MEL\",\n\t\t\"metafont\": \"METAFONT\",\n\t\t\"mongodb\": \"MongoDB\",\n\t\t\"moon\": \"MoonScript\",\n\t\t\"n1ql\": \"N1QL\",\n\t\t\"n4js\": \"N4JS\",\n\t\t\"n4jsd\": \"N4JS\",\n\t\t\"nand2tetris-hdl\": \"Nand To Tetris HDL\",\n\t\t\"naniscript\": \"Naninovel Script\",\n\t\t\"nani\": \"Naninovel Script\",\n\t\t\"nasm\": \"NASM\",\n\t\t\"neon\": \"NEON\",\n\t\t\"nginx\": \"nginx\",\n\t\t\"nsis\": \"NSIS\",\n\t\t\"objectivec\": \"Objective-C\",\n\t\t\"objc\": \"Objective-C\",\n\t\t\"ocaml\": \"OCaml\",\n\t\t\"opencl\": \"OpenCL\",\n\t\t\"openqasm\": \"OpenQasm\",\n\t\t\"qasm\": \"OpenQasm\",\n\t\t\"parigp\": \"PARI/GP\",\n\t\t\"objectpascal\": \"Object Pascal\",\n\t\t\"psl\": \"PATROL Scripting Language\",\n\t\t\"pcaxis\": \"PC-Axis\",\n\t\t\"px\": \"PC-Axis\",\n\t\t\"peoplecode\": \"PeopleCode\",\n\t\t\"pcode\": \"PeopleCode\",\n\t\t\"php\": \"PHP\",\n\t\t\"phpdoc\": \"PHPDoc\",\n\t\t\"php-extras\": \"PHP Extras\",\n\t\t\"plant-uml\": \"PlantUML\",\n\t\t\"plantuml\": \"PlantUML\",\n\t\t\"plsql\": \"PL/SQL\",\n\t\t\"powerquery\": \"PowerQuery\",\n\t\t\"pq\": \"PowerQuery\",\n\t\t\"mscript\": \"PowerQuery\",\n\t\t\"powershell\": \"PowerShell\",\n\t\t\"promql\": \"PromQL\",\n\t\t\"properties\": \".properties\",\n\t\t\"protobuf\": \"Protocol Buffers\",\n\t\t\"purebasic\": \"PureBasic\",\n\t\t\"pbfasm\": \"PureBasic\",\n\t\t\"purs\": \"PureScript\",\n\t\t\"py\": \"Python\",\n\t\t\"qsharp\": \"Q#\",\n\t\t\"qs\": \"Q#\",\n\t\t\"q\": \"Q (kdb+ database)\",\n\t\t\"qml\": \"QML\",\n\t\t\"rkt\": \"Racket\",\n\t\t\"cshtml\": \"Razor C#\",\n\t\t\"razor\": \"Razor C#\",\n\t\t\"jsx\": \"React JSX\",\n\t\t\"tsx\": \"React TSX\",\n\t\t\"renpy\": \"Ren'py\",\n\t\t\"rpy\": \"Ren'py\",\n\t\t\"res\": \"ReScript\",\n\t\t\"rest\": \"reST (reStructuredText)\",\n\t\t\"robotframework\": \"Robot Framework\",\n\t\t\"robot\": \"Robot Framework\",\n\t\t\"rb\": \"Ruby\",\n\t\t\"sas\": \"SAS\",\n\t\t\"sass\": \"Sass (Sass)\",\n\t\t\"scss\": \"Sass (SCSS)\",\n\t\t\"shell-session\": \"Shell session\",\n\t\t\"sh-session\": \"Shell session\",\n\t\t\"shellsession\": \"Shell session\",\n\t\t\"sml\": \"SML\",\n\t\t\"smlnj\": \"SML/NJ\",\n\t\t\"solidity\": \"Solidity (Ethereum)\",\n\t\t\"sol\": \"Solidity (Ethereum)\",\n\t\t\"solution-file\": \"Solution file\",\n\t\t\"sln\": \"Solution file\",\n\t\t\"soy\": \"Soy (Closure Template)\",\n\t\t\"sparql\": \"SPARQL\",\n\t\t\"rq\": \"SPARQL\",\n\t\t\"splunk-spl\": \"Splunk SPL\",\n\t\t\"sqf\": \"SQF: Status Quo Function (Arma 3)\",\n\t\t\"sql\": \"SQL\",\n\t\t\"stata\": \"Stata Ado\",\n\t\t\"iecst\": \"Structured Text (IEC 61131-3)\",\n\t\t\"supercollider\": \"SuperCollider\",\n\t\t\"sclang\": \"SuperCollider\",\n\t\t\"systemd\": \"Systemd configuration file\",\n\t\t\"t4-templating\": \"T4 templating\",\n\t\t\"t4-cs\": \"T4 Text Templates (C#)\",\n\t\t\"t4\": \"T4 Text Templates (C#)\",\n\t\t\"t4-vb\": \"T4 Text Templates (VB)\",\n\t\t\"tap\": \"TAP\",\n\t\t\"tt2\": \"Template Toolkit 2\",\n\t\t\"toml\": \"TOML\",\n\t\t\"trickle\": \"trickle\",\n\t\t\"troy\": \"troy\",\n\t\t\"trig\": \"TriG\",\n\t\t\"ts\": \"TypeScript\",\n\t\t\"tsconfig\": \"TSConfig\",\n\t\t\"uscript\": \"UnrealScript\",\n\t\t\"uc\": \"UnrealScript\",\n\t\t\"uorazor\": \"UO Razor Script\",\n\t\t\"uri\": \"URI\",\n\t\t\"url\": \"URL\",\n\t\t\"vbnet\": \"VB.Net\",\n\t\t\"vhdl\": \"VHDL\",\n\t\t\"vim\": \"vim\",\n\t\t\"visual-basic\": \"Visual Basic\",\n\t\t\"vba\": \"VBA\",\n\t\t\"vb\": \"Visual Basic\",\n\t\t\"wasm\": \"WebAssembly\",\n\t\t\"web-idl\": \"Web IDL\",\n\t\t\"webidl\": \"Web IDL\",\n\t\t\"wgsl\": \"WGSL\",\n\t\t\"wiki\": \"Wiki markup\",\n\t\t\"wolfram\": \"Wolfram language\",\n\t\t\"nb\": \"Mathematica Notebook\",\n\t\t\"wl\": \"Wolfram language\",\n\t\t\"xeoracube\": \"XeoraCube\",\n\t\t\"xml-doc\": \"XML doc (.net)\",\n\t\t\"xojo\": \"Xojo (REALbasic)\",\n\t\t\"xquery\": \"XQuery\",\n\t\t\"yaml\": \"YAML\",\n\t\t\"yml\": \"YAML\",\n\t\t\"yang\": \"YANG\"\n\t}/*]*/;\n\n\t/* eslint-enable */\n\n\tPrism.plugins.toolbar.registerButton('show-language', function (env) {\n\t\tvar pre = env.element.parentNode;\n\t\tif (!pre || !/pre/i.test(pre.nodeName)) {\n\t\t\treturn;\n\t\t}\n\n\t\t/**\n\t\t * Tries to guess the name of a language given its id.\n\t\t *\n\t\t * @param {string} id The language id.\n\t\t * @returns {string}\n\t\t */\n\t\tfunction guessTitle(id) {\n\t\t\tif (!id) {\n\t\t\t\treturn id;\n\t\t\t}\n\t\t\treturn (id.substring(0, 1).toUpperCase() + id.substring(1)).replace(/s(?=cript)/, 'S');\n\t\t}\n\n\t\tvar language = pre.getAttribute('data-language') || Languages[env.language] || guessTitle(env.language);\n\n\t\tif (!language) {\n\t\t\treturn;\n\t\t}\n\t\tvar element = document.createElement('span');\n\t\telement.textContent = language;\n\n\t\treturn element;\n\t});\n\n}());\n+/plugins/custom-class/prism-custom-class.js\t\u0019(function () {\n\n\tif (typeof Prism === 'undefined') {\n\t\treturn;\n\t}\n\n\t/**\n\t * @callback ClassMapper\n\t * @param {string} className\n\t * @param {string} language\n\t * @returns {string}\n\t *\n\t * @callback ClassAdder\n\t * @param {ClassAdderEnvironment} env\n\t * @returns {undefined | string | string[]}\n\t *\n\t * @typedef ClassAdderEnvironment\n\t * @property {string} language\n\t * @property {string} type\n\t * @property {string} content\n\t */\n\n\t// options\n\n\t/** @type {ClassAdder | undefined} */\n\tvar adder;\n\t/** @type {ClassMapper | undefined} */\n\tvar mapper;\n\t/** @type {string} */\n\tvar prefixString = '';\n\n\n\t/**\n\t * @param {string} className\n\t * @param {string} language\n\t */\n\tfunction apply(className, language) {\n\t\treturn prefixString + (mapper ? mapper(className, language) : className);\n\t}\n\n\n\tPrism.plugins.customClass = {\n\t\t/**\n\t\t * Sets the function which can be used to add custom aliases to any token.\n\t\t *\n\t\t * @param {ClassAdder} classAdder\n\t\t */\n\t\tadd: function (classAdder) {\n\t\t\tadder = classAdder;\n\t\t},\n\t\t/**\n\t\t * Maps all class names using the given object or map function.\n\t\t *\n\t\t * This does not affect the prefix.\n\t\t *\n\t\t * @param {Object<string, string> | ClassMapper} classMapper\n\t\t */\n\t\tmap: function map(classMapper) {\n\t\t\tif (typeof classMapper === 'function') {\n\t\t\t\tmapper = classMapper;\n\t\t\t} else {\n\t\t\t\tmapper = function (className) {\n\t\t\t\t\treturn classMapper[className] || className;\n\t\t\t\t};\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * Adds the given prefix to all class names.\n\t\t *\n\t\t * @param {string} string\n\t\t */\n\t\tprefix: function prefix(string) {\n\t\t\tprefixString = string || '';\n\t\t},\n\t\t/**\n\t\t * Applies the current mapping and prefix to the given class name.\n\t\t *\n\t\t * @param {string} className A single class name.\n\t\t * @param {string} language The language of the code that contains this class name.\n\t\t *\n\t\t * If the language is unknown, pass `\"none\"`.\n\t\t */\n\t\tapply: apply\n\t};\n\n\tPrism.hooks.add('wrap', function (env) {\n\t\tif (adder) {\n\t\t\tvar result = adder({\n\t\t\t\tcontent: env.content,\n\t\t\t\ttype: env.type,\n\t\t\t\tlanguage: env.language\n\t\t\t});\n\n\t\t\tif (Array.isArray(result)) {\n\t\t\t\tenv.classes.push.apply(env.classes, result);\n\t\t\t} else if (result) {\n\t\t\t\tenv.classes.push(result);\n\t\t\t}\n\t\t}\n\n\t\tif (!mapper && !prefixString) {\n\t\t\treturn;\n\t\t}\n\n\t\tenv.classes = env.classes.map(function (c) {\n\t\t\treturn apply(c, env.language);\n\t\t});\n\t});\n\n}());\n/components/prism-docker.js\u000b)(function (Prism) {\n\n\t// Many of the following regexes will contain negated lookaheads like `[ \\t]+(?![ \\t])`. This is a trick to ensure\n\t// that quantifiers behave *atomically*. Atomic quantifiers are necessary to prevent exponential backtracking.\n\n\tvar spaceAfterBackSlash = /\\\\[\\r\\n](?:\\s|\\\\[\\r\\n]|#.*(?!.))*(?![\\s#]|\\\\[\\r\\n])/.source;\n\t// At least one space, comment, or line break\n\tvar space = /(?:[ \\t]+(?![ \\t])(?:<SP_BS>)?|<SP_BS>)/.source\n\t\t.replace(/<SP_BS>/g, function () { return spaceAfterBackSlash; });\n\n\tvar string = /\"(?:[^\"\\\\\\r\\n]|\\\\(?:\\r\\n|[\\s\\S]))*\"|'(?:[^'\\\\\\r\\n]|\\\\(?:\\r\\n|[\\s\\S]))*'/.source;\n\tvar option = /--[\\w-]+=(?:<STR>|(?![\"'])(?:[^\\s\\\\]|\\\\.)+)/.source.replace(/<STR>/g, function () { return string; });\n\n\tvar stringRule = {\n\t\tpattern: RegExp(string),\n\t\tgreedy: true\n\t};\n\tvar commentRule = {\n\t\tpattern: /(^[ \\t]*)#.*/m,\n\t\tlookbehind: true,\n\t\tgreedy: true\n\t};\n\n\t/**\n\t * @param {string} source\n\t * @param {string} flags\n\t * @returns {RegExp}\n\t */\n\tfunction re(source, flags) {\n\t\tsource = source\n\t\t\t.replace(/<OPT>/g, function () { return option; })\n\t\t\t.replace(/<SP>/g, function () { return space; });\n\n\t\treturn RegExp(source, flags);\n\t}\n\n\tPrism.languages.docker = {\n\t\t'instruction': {\n\t\t\tpattern: /(^[ \\t]*)(?:ADD|ARG|CMD|COPY|ENTRYPOINT|ENV|EXPOSE|FROM|HEALTHCHECK|LABEL|MAINTAINER|ONBUILD|RUN|SHELL|STOPSIGNAL|USER|VOLUME|WORKDIR)(?=\\s)(?:\\\\.|[^\\r\\n\\\\])*(?:\\\\$(?:\\s|#.*$)*(?![\\s#])(?:\\\\.|[^\\r\\n\\\\])*)*/im,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'options': {\n\t\t\t\t\tpattern: re(/(^(?:ONBUILD<SP>)?\\w+<SP>)<OPT>(?:<SP><OPT>)*/.source, 'i'),\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tgreedy: true,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'property': {\n\t\t\t\t\t\t\tpattern: /(^|\\s)--[\\w-]+/,\n\t\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'string': [\n\t\t\t\t\t\t\tstringRule,\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tpattern: /(=)(?![\"'])(?:[^\\s\\\\]|\\\\.)+/,\n\t\t\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t],\n\t\t\t\t\t\t'operator': /\\\\$/m,\n\t\t\t\t\t\t'punctuation': /=/\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t'keyword': [\n\t\t\t\t\t{\n\t\t\t\t\t\t// https://docs.docker.com/engine/reference/builder/#healthcheck\n\t\t\t\t\t\tpattern: re(/(^(?:ONBUILD<SP>)?HEALTHCHECK<SP>(?:<OPT><SP>)*)(?:CMD|NONE)\\b/.source, 'i'),\n\t\t\t\t\t\tlookbehind: true,\n\t\t\t\t\t\tgreedy: true\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t// https://docs.docker.com/engine/reference/builder/#from\n\t\t\t\t\t\tpattern: re(/(^(?:ONBUILD<SP>)?FROM<SP>(?:<OPT><SP>)*(?!--)[^ \\t\\\\]+<SP>)AS/.source, 'i'),\n\t\t\t\t\t\tlookbehind: true,\n\t\t\t\t\t\tgreedy: true\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t// https://docs.docker.com/engine/reference/builder/#onbuild\n\t\t\t\t\t\tpattern: re(/(^ONBUILD<SP>)\\w+/.source, 'i'),\n\t\t\t\t\t\tlookbehind: true,\n\t\t\t\t\t\tgreedy: true\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tpattern: /^\\w+/,\n\t\t\t\t\t\tgreedy: true\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t'comment': commentRule,\n\t\t\t\t'string': stringRule,\n\t\t\t\t'variable': /\\$(?:\\w+|\\{[^{}\"'\\\\]*\\})/,\n\t\t\t\t'operator': /\\\\$/m\n\t\t\t}\n\t\t},\n\t\t'comment': commentRule\n\t};\n\n\tPrism.languages.dockerfile = Prism.languages.docker;\n\n}(Prism));\n/components/prism-xquery.js\u0018\"(function (Prism) {\n\n\tPrism.languages.xquery = Prism.languages.extend('markup', {\n\t\t'xquery-comment': {\n\t\t\tpattern: /\\(:[\\s\\S]*?:\\)/,\n\t\t\tgreedy: true,\n\t\t\talias: 'comment'\n\t\t},\n\t\t'string': {\n\t\t\tpattern: /([\"'])(?:\\1\\1|(?!\\1)[\\s\\S])*\\1/,\n\t\t\tgreedy: true\n\t\t},\n\t\t'extension': {\n\t\t\tpattern: /\\(#.+?#\\)/,\n\t\t\talias: 'symbol'\n\t\t},\n\t\t'variable': /\\$[-\\w:]+/,\n\t\t'axis': {\n\t\t\tpattern: /(^|[^-])(?:ancestor(?:-or-self)?|attribute|child|descendant(?:-or-self)?|following(?:-sibling)?|parent|preceding(?:-sibling)?|self)(?=::)/,\n\t\t\tlookbehind: true,\n\t\t\talias: 'operator'\n\t\t},\n\t\t'keyword-operator': {\n\t\t\tpattern: /(^|[^:-])\\b(?:and|castable as|div|eq|except|ge|gt|idiv|instance of|intersect|is|le|lt|mod|ne|or|union)\\b(?=$|[^:-])/,\n\t\t\tlookbehind: true,\n\t\t\talias: 'operator'\n\t\t},\n\t\t'keyword': {\n\t\t\tpattern: /(^|[^:-])\\b(?:as|ascending|at|base-uri|boundary-space|case|cast as|collation|construction|copy-namespaces|declare|default|descending|else|empty (?:greatest|least)|encoding|every|external|for|function|if|import|in|inherit|lax|let|map|module|namespace|no-inherit|no-preserve|option|order(?: by|ed|ing)?|preserve|return|satisfies|schema|some|stable|strict|strip|then|to|treat as|typeswitch|unordered|validate|variable|version|where|xquery)\\b(?=$|[^:-])/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'function': /[\\w-]+(?::[\\w-]+)*(?=\\s*\\()/,\n\t\t'xquery-element': {\n\t\t\tpattern: /(element\\s+)[\\w-]+(?::[\\w-]+)*/,\n\t\t\tlookbehind: true,\n\t\t\talias: 'tag'\n\t\t},\n\t\t'xquery-attribute': {\n\t\t\tpattern: /(attribute\\s+)[\\w-]+(?::[\\w-]+)*/,\n\t\t\tlookbehind: true,\n\t\t\talias: 'attr-name'\n\t\t},\n\t\t'builtin': {\n\t\t\tpattern: /(^|[^:-])\\b(?:attribute|comment|document|element|processing-instruction|text|xs:(?:ENTITIES|ENTITY|ID|IDREFS?|NCName|NMTOKENS?|NOTATION|Name|QName|anyAtomicType|anyType|anyURI|base64Binary|boolean|byte|date|dateTime|dayTimeDuration|decimal|double|duration|float|gDay|gMonth|gMonthDay|gYear|gYearMonth|hexBinary|int|integer|language|long|negativeInteger|nonNegativeInteger|nonPositiveInteger|normalizedString|positiveInteger|short|string|time|token|unsigned(?:Byte|Int|Long|Short)|untyped(?:Atomic)?|yearMonthDuration))\\b(?=$|[^:-])/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'number': /\\b\\d+(?:\\.\\d+)?(?:E[+-]?\\d+)?/,\n\t\t'operator': [\n\t\t\t/[+*=?|@]|\\.\\.?|:=|!=|<[=<]?|>[=>]?/,\n\t\t\t{\n\t\t\t\tpattern: /(\\s)-(?=\\s)/,\n\t\t\t\tlookbehind: true\n\t\t\t}\n\t\t],\n\t\t'punctuation': /[[\\](){},;:/]/\n\t});\n\n\tPrism.languages.xquery.tag.pattern = /<\\/?(?!\\d)[^\\s>\\/=$<%]+(?:\\s+[^\\s>\\/=]+(?:=(?:(\"|')(?:\\\\[\\s\\S]|\\{(?!\\{)(?:\\{(?:\\{[^{}]*\\}|[^{}])*\\}|[^{}])+\\}|(?!\\1)[^\\\\])*\\1|[^\\s'\">=]+))?)*\\s*\\/?>/;\n\tPrism.languages.xquery['tag'].inside['attr-value'].pattern = /=(?:(\"|')(?:\\\\[\\s\\S]|\\{(?!\\{)(?:\\{(?:\\{[^{}]*\\}|[^{}])*\\}|[^{}])+\\}|(?!\\1)[^\\\\])*\\1|[^\\s'\">=]+)/;\n\tPrism.languages.xquery['tag'].inside['attr-value'].inside['punctuation'] = /^=\"|\"$/;\n\tPrism.languages.xquery['tag'].inside['attr-value'].inside['expression'] = {\n\t\t// Allow for two levels of nesting\n\t\tpattern: /\\{(?!\\{)(?:\\{(?:\\{[^{}]*\\}|[^{}])*\\}|[^{}])+\\}/,\n\t\tinside: Prism.languages.xquery,\n\t\talias: 'language-xquery'\n\t};\n\n\t// The following will handle plain text inside tags\n\tvar stringifyToken = function (token) {\n\t\tif (typeof token === 'string') {\n\t\t\treturn token;\n\t\t}\n\t\tif (typeof token.content === 'string') {\n\t\t\treturn token.content;\n\t\t}\n\t\treturn token.content.map(stringifyToken).join('');\n\t};\n\n\tvar walkTokens = function (tokens) {\n\t\tvar openedTags = [];\n\t\tfor (var i = 0; i < tokens.length; i++) {\n\t\t\tvar token = tokens[i];\n\t\t\tvar notTagNorBrace = false;\n\n\t\t\tif (typeof token !== 'string') {\n\t\t\t\tif (token.type === 'tag' && token.content[0] && token.content[0].type === 'tag') {\n\t\t\t\t\t// We found a tag, now find its kind\n\n\t\t\t\t\tif (token.content[0].content[0].content === '</') {\n\t\t\t\t\t\t// Closing tag\n\t\t\t\t\t\tif (openedTags.length > 0 && openedTags[openedTags.length - 1].tagName === stringifyToken(token.content[0].content[1])) {\n\t\t\t\t\t\t\t// Pop matching opening tag\n\t\t\t\t\t\t\topenedTags.pop();\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (token.content[token.content.length - 1].content === '/>') {\n\t\t\t\t\t\t\t// Autoclosed tag, ignore\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Opening tag\n\t\t\t\t\t\t\topenedTags.push({\n\t\t\t\t\t\t\t\ttagName: stringifyToken(token.content[0].content[1]),\n\t\t\t\t\t\t\t\topenedBraces: 0\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else if (\n\t\t\t\t\topenedTags.length > 0 && token.type === 'punctuation' && token.content === '{' &&\n\t\t\t\t\t// Ignore `{{`\n\t\t\t\t\t(!tokens[i + 1] || tokens[i + 1].type !== 'punctuation' || tokens[i + 1].content !== '{') &&\n\t\t\t\t\t(!tokens[i - 1] || tokens[i - 1].type !== 'plain-text' || tokens[i - 1].content !== '{')\n\t\t\t\t) {\n\t\t\t\t\t// Here we might have entered an XQuery expression inside a tag\n\t\t\t\t\topenedTags[openedTags.length - 1].openedBraces++;\n\n\t\t\t\t} else if (openedTags.length > 0 && openedTags[openedTags.length - 1].openedBraces > 0 && token.type === 'punctuation' && token.content === '}') {\n\n\t\t\t\t\t// Here we might have left an XQuery expression inside a tag\n\t\t\t\t\topenedTags[openedTags.length - 1].openedBraces--;\n\n\t\t\t\t} else if (token.type !== 'comment') {\n\t\t\t\t\tnotTagNorBrace = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (notTagNorBrace || typeof token === 'string') {\n\t\t\t\tif (openedTags.length > 0 && openedTags[openedTags.length - 1].openedBraces === 0) {\n\t\t\t\t\t// Here we are inside a tag, and not inside an XQuery expression.\n\t\t\t\t\t// That's plain text: drop any tokens matched.\n\t\t\t\t\tvar plainText = stringifyToken(token);\n\n\t\t\t\t\t// And merge text with adjacent text\n\t\t\t\t\tif (i < tokens.length - 1 && (typeof tokens[i + 1] === 'string' || tokens[i + 1].type === 'plain-text')) {\n\t\t\t\t\t\tplainText += stringifyToken(tokens[i + 1]);\n\t\t\t\t\t\ttokens.splice(i + 1, 1);\n\t\t\t\t\t}\n\t\t\t\t\tif (i > 0 && (typeof tokens[i - 1] === 'string' || tokens[i - 1].type === 'plain-text')) {\n\t\t\t\t\t\tplainText = stringifyToken(tokens[i - 1]) + plainText;\n\t\t\t\t\t\ttokens.splice(i - 1, 1);\n\t\t\t\t\t\ti--;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (/^\\s+$/.test(plainText)) {\n\t\t\t\t\t\ttokens[i] = plainText;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttokens[i] = new Prism.Token('plain-text', plainText, null, plainText);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (token.content && typeof token.content !== 'string') {\n\t\t\t\twalkTokens(token.content);\n\t\t\t}\n\t\t}\n\t};\n\n\tPrism.hooks.add('after-tokenize', function (env) {\n\t\tif (env.language !== 'xquery') {\n\t\t\treturn;\n\t\t}\n\t\twalkTokens(env.tokens);\n\t});\n\n}(Prism));\n+/plugins/command-line/prism-command-line.js\u001e(function () {\n\n\tif (typeof Prism === 'undefined' || typeof document === 'undefined') {\n\t\treturn;\n\t}\n\n\tvar CLASS_PATTERN = /(?:^|\\s)command-line(?:\\s|$)/;\n\tvar PROMPT_CLASS = 'command-line-prompt';\n\n\t/** @type {(str: string, prefix: string) => boolean} */\n\tvar startsWith = ''.startsWith\n\t\t? function (s, p) { return s.startsWith(p); }\n\t\t: function (s, p) { return s.indexOf(p) === 0; };\n\n\t// Support for IE11 that has no endsWith()\n\t/** @type {(str: string, suffix: string) => boolean} */\n\tvar endsWith = ''.endsWith\n\t\t? function (str, suffix) {\n\t\t\treturn str.endsWith(suffix);\n\t\t}\n\t\t: function (str, suffix) {\n\t\t\tvar len = str.length;\n\t\t\treturn str.substring(len - suffix.length, len) === suffix;\n\t\t};\n\n\t/**\n\t * Returns whether the given hook environment has a command line info object.\n\t *\n\t * @param {any} env\n\t * @returns {boolean}\n\t */\n\tfunction hasCommandLineInfo(env) {\n\t\tvar vars = env.vars = env.vars || {};\n\t\treturn 'command-line' in vars;\n\t}\n\t/**\n\t * Returns the command line info object from the given hook environment.\n\t *\n\t * @param {any} env\n\t * @returns {CommandLineInfo}\n\t *\n\t * @typedef CommandLineInfo\n\t * @property {boolean} [complete]\n\t * @property {number} [numberOfLines]\n\t * @property {string[]} [outputLines]\n\t */\n\tfunction getCommandLineInfo(env) {\n\t\tvar vars = env.vars = env.vars || {};\n\t\treturn vars['command-line'] = vars['command-line'] || {};\n\t}\n\n\n\tPrism.hooks.add('before-highlight', function (env) {\n\t\tvar commandLine = getCommandLineInfo(env);\n\n\t\tif (commandLine.complete || !env.code) {\n\t\t\tcommandLine.complete = true;\n\t\t\treturn;\n\t\t}\n\n\t\t// Works only for <code> wrapped inside <pre> (not inline).\n\t\tvar pre = env.element.parentElement;\n\t\tif (!pre || !/pre/i.test(pre.nodeName) || // Abort only if neither the <pre> nor the <code> have the class\n\t\t\t(!CLASS_PATTERN.test(pre.className) && !CLASS_PATTERN.test(env.element.className))) {\n\t\t\tcommandLine.complete = true;\n\t\t\treturn;\n\t\t}\n\n\t\t// The element might be highlighted multiple times, so we just remove the previous prompt\n\t\tvar existingPrompt = env.element.querySelector('.' + PROMPT_CLASS);\n\t\tif (existingPrompt) {\n\t\t\texistingPrompt.remove();\n\t\t}\n\n\t\tvar codeLines = env.code.split('\\n');\n\n\t\tcommandLine.numberOfLines = codeLines.length;\n\t\t/** @type {string[]} */\n\t\tvar outputLines = commandLine.outputLines = [];\n\n\t\tvar outputSections = pre.getAttribute('data-output');\n\t\tvar outputFilter = pre.getAttribute('data-filter-output');\n\t\tif (outputSections !== null) { // The user specified the output lines. -- cwells\n\t\t\toutputSections.split(',').forEach(function (section) {\n\t\t\t\tvar range = section.split('-');\n\t\t\t\tvar outputStart = parseInt(range[0], 10);\n\t\t\t\tvar outputEnd = range.length === 2 ? parseInt(range[1], 10) : outputStart;\n\n\t\t\t\tif (!isNaN(outputStart) && !isNaN(outputEnd)) {\n\t\t\t\t\tif (outputStart < 1) {\n\t\t\t\t\t\toutputStart = 1;\n\t\t\t\t\t}\n\t\t\t\t\tif (outputEnd > codeLines.length) {\n\t\t\t\t\t\toutputEnd = codeLines.length;\n\t\t\t\t\t}\n\t\t\t\t\t// Convert start and end to 0-based to simplify the arrays. -- cwells\n\t\t\t\t\toutputStart--;\n\t\t\t\t\toutputEnd--;\n\t\t\t\t\t// Save the output line in an array and clear it in the code so it's not highlighted. -- cwells\n\t\t\t\t\tfor (var j = outputStart; j <= outputEnd; j++) {\n\t\t\t\t\t\toutputLines[j] = codeLines[j];\n\t\t\t\t\t\tcodeLines[j] = '';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t} else if (outputFilter) { // Treat lines beginning with this string as output. -- cwells\n\t\t\tfor (var i = 0; i < codeLines.length; i++) {\n\t\t\t\tif (startsWith(codeLines[i], outputFilter)) { // This line is output. -- cwells\n\t\t\t\t\toutputLines[i] = codeLines[i].slice(outputFilter.length);\n\t\t\t\t\tcodeLines[i] = '';\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tvar continuationLineIndicies = commandLine.continuationLineIndicies = new Set();\n\t\tvar lineContinuationStr = pre.getAttribute('data-continuation-str');\n\t\tvar continuationFilter = pre.getAttribute('data-filter-continuation');\n\n\t\t// Identify code lines where the command has continued onto subsequent\n\t\t// lines and thus need a different prompt. Need to do this after the output\n\t\t// lines have been removed to ensure we don't pick up a continuation string\n\t\t// in an output line.\n\t\tfor (var j = 0; j < codeLines.length; j++) {\n\t\t\tvar line = codeLines[j];\n\t\t\tif (!line) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Record the next line as a continuation if this one ends in a continuation str.\n\t\t\tif (lineContinuationStr && endsWith(line, lineContinuationStr)) {\n\t\t\t\tcontinuationLineIndicies.add(j + 1);\n\t\t\t}\n\t\t\t// Record this line as a continuation if marked with a continuation prefix\n\t\t\t// (that we will remove).\n\t\t\tif (j > 0 && continuationFilter && startsWith(line, continuationFilter)) {\n\t\t\t\tcodeLines[j] = line.slice(continuationFilter.length);\n\t\t\t\tcontinuationLineIndicies.add(j);\n\t\t\t}\n\t\t}\n\n\t\tenv.code = codeLines.join('\\n');\n\t});\n\n\tPrism.hooks.add('before-insert', function (env) {\n\t\tvar commandLine = getCommandLineInfo(env);\n\n\t\tif (commandLine.complete) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Reinsert the output lines into the highlighted code. -- cwells\n\t\tvar codeLines = env.highlightedCode.split('\\n');\n\t\tvar outputLines = commandLine.outputLines || [];\n\t\tfor (var i = 0, l = codeLines.length; i < l; i++) {\n\t\t\t// Add spans to allow distinction of input/output text for styling\n\t\t\tif (outputLines.hasOwnProperty(i)) {\n\t\t\t\t// outputLines were removed from codeLines so missed out on escaping\n\t\t\t\t// of markup so do it here.\n\t\t\t\tcodeLines[i] = '<span class=\"token output\">'\n\t\t\t\t\t+ Prism.util.encode(outputLines[i]) + '</span>';\n\t\t\t} else {\n\t\t\t\tcodeLines[i] = '<span class=\"token command\">'\n\t\t\t\t\t+ codeLines[i] + '</span>';\n\t\t\t}\n\t\t}\n\t\tenv.highlightedCode = codeLines.join('\\n');\n\t});\n\n\tPrism.hooks.add('complete', function (env) {\n\t\tif (!hasCommandLineInfo(env)) {\n\t\t\t// the previous hooks never ran\n\t\t\treturn;\n\t\t}\n\n\t\tvar commandLine = getCommandLineInfo(env);\n\n\t\tif (commandLine.complete) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar pre = env.element.parentElement;\n\t\tif (CLASS_PATTERN.test(env.element.className)) { // Remove the class \"command-line\" from the <code>\n\t\t\tenv.element.className = env.element.className.replace(CLASS_PATTERN, ' ');\n\t\t}\n\t\tif (!CLASS_PATTERN.test(pre.className)) { // Add the class \"command-line\" to the <pre>\n\t\t\tpre.className += ' command-line';\n\t\t}\n\n\t\tfunction getAttribute(key, defaultValue) {\n\t\t\treturn (pre.getAttribute(key) || defaultValue).replace(/\"/g, '&quot');\n\t\t}\n\n\t\t// Create the \"rows\" that will become the command-line prompts. -- cwells\n\t\tvar promptLines = '';\n\t\tvar rowCount = commandLine.numberOfLines || 0;\n\t\tvar promptText = getAttribute('data-prompt', '');\n\t\tvar promptLine;\n\t\tif (promptText !== '') {\n\t\t\tpromptLine = '<span data-prompt=\"' + promptText + '\"></span>';\n\t\t} else {\n\t\t\tvar user = getAttribute('data-user', 'user');\n\t\t\tvar host = getAttribute('data-host', 'localhost');\n\t\t\tpromptLine = '<span data-user=\"' + user + '\" data-host=\"' + host + '\"></span>';\n\t\t}\n\n\t\tvar continuationLineIndicies = commandLine.continuationLineIndicies || new Set();\n\t\tvar continuationPromptText = getAttribute('data-continuation-prompt', '>');\n\t\tvar continuationPromptLine = '<span data-continuation-prompt=\"' + continuationPromptText + '\"></span>';\n\n\t\t// Assemble all the appropriate prompt/continuation lines\n\t\tfor (var j = 0; j < rowCount; j++) {\n\t\t\tif (continuationLineIndicies.has(j)) {\n\t\t\t\tpromptLines += continuationPromptLine;\n\t\t\t} else {\n\t\t\t\tpromptLines += promptLine;\n\t\t\t}\n\t\t}\n\n\t\t// Create the wrapper element. -- cwells\n\t\tvar prompt = document.createElement('span');\n\t\tprompt.className = PROMPT_CLASS;\n\t\tprompt.innerHTML = promptLines;\n\n\t\t// Remove the prompt from the output lines. -- cwells\n\t\tvar outputLines = commandLine.outputLines || [];\n\t\tfor (var i = 0, l = outputLines.length; i < l; i++) {\n\t\t\tif (outputLines.hasOwnProperty(i)) {\n\t\t\t\tvar node = prompt.children[i];\n\t\t\t\tnode.removeAttribute('data-user');\n\t\t\t\tnode.removeAttribute('data-host');\n\t\t\t\tnode.removeAttribute('data-prompt');\n\t\t\t}\n\t\t}\n\n\t\tenv.element.insertBefore(prompt, env.element.firstChild);\n\t\tcommandLine.complete = true;\n\t});\n\n}());\n/components/prism-go-module.js\u0002,// https://go.dev/ref/mod#go-mod-file-module\n\nPrism.languages['go-mod'] = Prism.languages['go-module'] = {\n\t'comment': {\n\t\tpattern: /\\/\\/.*/,\n\t\tgreedy: true\n\t},\n\t'version': {\n\t\tpattern: /(^|[\\s()[\\],])v\\d+\\.\\d+\\.\\d+(?:[+-][-+.\\w]*)?(?![^\\s()[\\],])/,\n\t\tlookbehind: true,\n\t\talias: 'number'\n\t},\n\t'go-version': {\n\t\tpattern: /((?:^|\\s)go\\s+)\\d+(?:\\.\\d+){1,2}/,\n\t\tlookbehind: true,\n\t\talias: 'number'\n\t},\n\t'keyword': {\n\t\tpattern: /^([ \\t]*)(?:exclude|go|module|replace|require|retract)\\b/m,\n\t\tlookbehind: true\n\t},\n\t'operator': /=>/,\n\t'punctuation': /[()[\\],]/\n};\n/components/prism-php.js\"/**\n * Original by Aaron Harun: http://aahacreative.com/2012/07/31/php-syntax-highlighting-prism/\n * Modified by Miles Johnson: http://milesj.me\n * Rewritten by Tom Pavelec\n *\n * Supports PHP 5.3 - 8.0\n */\n(function (Prism) {\n\tvar comment = /\\/\\*[\\s\\S]*?\\*\\/|\\/\\/.*|#(?!\\[).*/;\n\tvar constant = [\n\t\t{\n\t\t\tpattern: /\\b(?:false|true)\\b/i,\n\t\t\talias: 'boolean'\n\t\t},\n\t\t{\n\t\t\tpattern: /(::\\s*)\\b[a-z_]\\w*\\b(?!\\s*\\()/i,\n\t\t\tgreedy: true,\n\t\t\tlookbehind: true,\n\t\t},\n\t\t{\n\t\t\tpattern: /(\\b(?:case|const)\\s+)\\b[a-z_]\\w*(?=\\s*[;=])/i,\n\t\t\tgreedy: true,\n\t\t\tlookbehind: true,\n\t\t},\n\t\t/\\b(?:null)\\b/i,\n\t\t/\\b[A-Z_][A-Z0-9_]*\\b(?!\\s*\\()/,\n\t];\n\tvar number = /\\b0b[01]+(?:_[01]+)*\\b|\\b0o[0-7]+(?:_[0-7]+)*\\b|\\b0x[\\da-f]+(?:_[\\da-f]+)*\\b|(?:\\b\\d+(?:_\\d+)*\\.?(?:\\d+(?:_\\d+)*)?|\\B\\.\\d+)(?:e[+-]?\\d+)?/i;\n\tvar operator = /<?=>|\\?\\?=?|\\.{3}|\\??->|[!=]=?=?|::|\\*\\*=?|--|\\+\\+|&&|\\|\\||<<|>>|[?~]|[/^|%*&<>.+-]=?/;\n\tvar punctuation = /[{}\\[\\](),:;]/;\n\n\tPrism.languages.php = {\n\t\t'delimiter': {\n\t\t\tpattern: /\\?>$|^<\\?(?:php(?=\\s)|=)?/i,\n\t\t\talias: 'important'\n\t\t},\n\t\t'comment': comment,\n\t\t'variable': /\\$+(?:\\w+\\b|(?=\\{))/,\n\t\t'package': {\n\t\t\tpattern: /(namespace\\s+|use\\s+(?:function\\s+)?)(?:\\\\?\\b[a-z_]\\w*)+\\b(?!\\\\)/i,\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'punctuation': /\\\\/\n\t\t\t}\n\t\t},\n\t\t'class-name-definition': {\n\t\t\tpattern: /(\\b(?:class|enum|interface|trait)\\s+)\\b[a-z_]\\w*(?!\\\\)\\b/i,\n\t\t\tlookbehind: true,\n\t\t\talias: 'class-name'\n\t\t},\n\t\t'function-definition': {\n\t\t\tpattern: /(\\bfunction\\s+)[a-z_]\\w*(?=\\s*\\()/i,\n\t\t\tlookbehind: true,\n\t\t\talias: 'function'\n\t\t},\n\t\t'keyword': [\n\t\t\t{\n\t\t\t\tpattern: /(\\(\\s*)\\b(?:array|bool|boolean|float|int|integer|object|string)\\b(?=\\s*\\))/i,\n\t\t\t\talias: 'type-casting',\n\t\t\t\tgreedy: true,\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /([(,?]\\s*)\\b(?:array(?!\\s*\\()|bool|callable|(?:false|null)(?=\\s*\\|)|float|int|iterable|mixed|object|self|static|string)\\b(?=\\s*\\$)/i,\n\t\t\t\talias: 'type-hint',\n\t\t\t\tgreedy: true,\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /(\\)\\s*:\\s*(?:\\?\\s*)?)\\b(?:array(?!\\s*\\()|bool|callable|(?:false|null)(?=\\s*\\|)|float|int|iterable|mixed|never|object|self|static|string|void)\\b/i,\n\t\t\t\talias: 'return-type',\n\t\t\t\tgreedy: true,\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /\\b(?:array(?!\\s*\\()|bool|float|int|iterable|mixed|object|string|void)\\b/i,\n\t\t\t\talias: 'type-declaration',\n\t\t\t\tgreedy: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /(\\|\\s*)(?:false|null)\\b|\\b(?:false|null)(?=\\s*\\|)/i,\n\t\t\t\talias: 'type-declaration',\n\t\t\t\tgreedy: true,\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /\\b(?:parent|self|static)(?=\\s*::)/i,\n\t\t\t\talias: 'static-context',\n\t\t\t\tgreedy: true\n\t\t\t},\n\t\t\t{\n\t\t\t\t// yield from\n\t\t\t\tpattern: /(\\byield\\s+)from\\b/i,\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\t// `class` is always a keyword unlike other keywords\n\t\t\t/\\bclass\\b/i,\n\t\t\t{\n\t\t\t\t// https://www.php.net/manual/en/reserved.keywords.php\n\t\t\t\t//\n\t\t\t\t// keywords cannot be preceded by \"->\"\n\t\t\t\t// the complex lookbehind means `(?<!(?:->|::)\\s*)`\n\t\t\t\tpattern: /((?:^|[^\\s>:]|(?:^|[^-])>|(?:^|[^:]):)\\s*)\\b(?:abstract|and|array|as|break|callable|case|catch|clone|const|continue|declare|default|die|do|echo|else|elseif|empty|enddeclare|endfor|endforeach|endif|endswitch|endwhile|enum|eval|exit|extends|final|finally|fn|for|foreach|function|global|goto|if|implements|include|include_once|instanceof|insteadof|interface|isset|list|match|namespace|never|new|or|parent|print|private|protected|public|readonly|require|require_once|return|self|static|switch|throw|trait|try|unset|use|var|while|xor|yield|__halt_compiler)\\b/i,\n\t\t\t\tlookbehind: true\n\t\t\t}\n\t\t],\n\t\t'argument-name': {\n\t\t\tpattern: /([(,]\\s*)\\b[a-z_]\\w*(?=\\s*:(?!:))/i,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'class-name': [\n\t\t\t{\n\t\t\t\tpattern: /(\\b(?:extends|implements|instanceof|new(?!\\s+self|\\s+static))\\s+|\\bcatch\\s*\\()\\b[a-z_]\\w*(?!\\\\)\\b/i,\n\t\t\t\tgreedy: true,\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /(\\|\\s*)\\b[a-z_]\\w*(?!\\\\)\\b/i,\n\t\t\t\tgreedy: true,\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /\\b[a-z_]\\w*(?!\\\\)\\b(?=\\s*\\|)/i,\n\t\t\t\tgreedy: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /(\\|\\s*)(?:\\\\?\\b[a-z_]\\w*)+\\b/i,\n\t\t\t\talias: 'class-name-fully-qualified',\n\t\t\t\tgreedy: true,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': /\\\\/\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /(?:\\\\?\\b[a-z_]\\w*)+\\b(?=\\s*\\|)/i,\n\t\t\t\talias: 'class-name-fully-qualified',\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': /\\\\/\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /(\\b(?:extends|implements|instanceof|new(?!\\s+self\\b|\\s+static\\b))\\s+|\\bcatch\\s*\\()(?:\\\\?\\b[a-z_]\\w*)+\\b(?!\\\\)/i,\n\t\t\t\talias: 'class-name-fully-qualified',\n\t\t\t\tgreedy: true,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': /\\\\/\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /\\b[a-z_]\\w*(?=\\s*\\$)/i,\n\t\t\t\talias: 'type-declaration',\n\t\t\t\tgreedy: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /(?:\\\\?\\b[a-z_]\\w*)+(?=\\s*\\$)/i,\n\t\t\t\talias: ['class-name-fully-qualified', 'type-declaration'],\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': /\\\\/\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /\\b[a-z_]\\w*(?=\\s*::)/i,\n\t\t\t\talias: 'static-context',\n\t\t\t\tgreedy: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /(?:\\\\?\\b[a-z_]\\w*)+(?=\\s*::)/i,\n\t\t\t\talias: ['class-name-fully-qualified', 'static-context'],\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': /\\\\/\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /([(,?]\\s*)[a-z_]\\w*(?=\\s*\\$)/i,\n\t\t\t\talias: 'type-hint',\n\t\t\t\tgreedy: true,\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /([(,?]\\s*)(?:\\\\?\\b[a-z_]\\w*)+(?=\\s*\\$)/i,\n\t\t\t\talias: ['class-name-fully-qualified', 'type-hint'],\n\t\t\t\tgreedy: true,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': /\\\\/\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /(\\)\\s*:\\s*(?:\\?\\s*)?)\\b[a-z_]\\w*(?!\\\\)\\b/i,\n\t\t\t\talias: 'return-type',\n\t\t\t\tgreedy: true,\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /(\\)\\s*:\\s*(?:\\?\\s*)?)(?:\\\\?\\b[a-z_]\\w*)+\\b(?!\\\\)/i,\n\t\t\t\talias: ['class-name-fully-qualified', 'return-type'],\n\t\t\t\tgreedy: true,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': /\\\\/\n\t\t\t\t}\n\t\t\t}\n\t\t],\n\t\t'constant': constant,\n\t\t'function': {\n\t\t\tpattern: /(^|[^\\\\\\w])\\\\?[a-z_](?:[\\w\\\\]*\\w)?(?=\\s*\\()/i,\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'punctuation': /\\\\/\n\t\t\t}\n\t\t},\n\t\t'property': {\n\t\t\tpattern: /(->\\s*)\\w+/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'number': number,\n\t\t'operator': operator,\n\t\t'punctuation': punctuation\n\t};\n\n\tvar string_interpolation = {\n\t\tpattern: /\\{\\$(?:\\{(?:\\{[^{}]+\\}|[^{}]+)\\}|[^{}])+\\}|(^|[^\\\\{])\\$+(?:\\w+(?:\\[[^\\r\\n\\[\\]]+\\]|->\\w+)?)/,\n\t\tlookbehind: true,\n\t\tinside: Prism.languages.php\n\t};\n\n\tvar string = [\n\t\t{\n\t\t\tpattern: /<<<'([^']+)'[\\r\\n](?:.*[\\r\\n])*?\\1;/,\n\t\t\talias: 'nowdoc-string',\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'delimiter': {\n\t\t\t\t\tpattern: /^<<<'[^']+'|[a-z_]\\w*;$/i,\n\t\t\t\t\talias: 'symbol',\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'punctuation': /^<<<'?|[';]$/\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tpattern: /<<<(?:\"([^\"]+)\"[\\r\\n](?:.*[\\r\\n])*?\\1;|([a-z_]\\w*)[\\r\\n](?:.*[\\r\\n])*?\\2;)/i,\n\t\t\talias: 'heredoc-string',\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'delimiter': {\n\t\t\t\t\tpattern: /^<<<(?:\"[^\"]+\"|[a-z_]\\w*)|[a-z_]\\w*;$/i,\n\t\t\t\t\talias: 'symbol',\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'punctuation': /^<<<\"?|[\";]$/\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t'interpolation': string_interpolation\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tpattern: /`(?:\\\\[\\s\\S]|[^\\\\`])*`/,\n\t\t\talias: 'backtick-quoted-string',\n\t\t\tgreedy: true\n\t\t},\n\t\t{\n\t\t\tpattern: /'(?:\\\\[\\s\\S]|[^\\\\'])*'/,\n\t\t\talias: 'single-quoted-string',\n\t\t\tgreedy: true\n\t\t},\n\t\t{\n\t\t\tpattern: /\"(?:\\\\[\\s\\S]|[^\\\\\"])*\"/,\n\t\t\talias: 'double-quoted-string',\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'interpolation': string_interpolation\n\t\t\t}\n\t\t}\n\t];\n\n\tPrism.languages.insertBefore('php', 'variable', {\n\t\t'string': string,\n\t\t'attribute': {\n\t\t\tpattern: /#\\[(?:[^\"'\\/#]|\\/(?![*/])|\\/\\/.*$|#(?!\\[).*$|\\/\\*(?:[^*]|\\*(?!\\/))*\\*\\/|\"(?:\\\\[\\s\\S]|[^\\\\\"])*\"|'(?:\\\\[\\s\\S]|[^\\\\'])*')+\\](?=\\s*[a-z$#])/im,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'attribute-content': {\n\t\t\t\t\tpattern: /^(#\\[)[\\s\\S]+(?=\\]$)/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\t// inside can appear subset of php\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'comment': comment,\n\t\t\t\t\t\t'string': string,\n\t\t\t\t\t\t'attribute-class-name': [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tpattern: /([^:]|^)\\b[a-z_]\\w*(?!\\\\)\\b/i,\n\t\t\t\t\t\t\t\talias: 'class-name',\n\t\t\t\t\t\t\t\tgreedy: true,\n\t\t\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tpattern: /([^:]|^)(?:\\\\?\\b[a-z_]\\w*)+/i,\n\t\t\t\t\t\t\t\talias: [\n\t\t\t\t\t\t\t\t\t'class-name',\n\t\t\t\t\t\t\t\t\t'class-name-fully-qualified'\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\tgreedy: true,\n\t\t\t\t\t\t\t\tlookbehind: true,\n\t\t\t\t\t\t\t\tinside: {\n\t\t\t\t\t\t\t\t\t'punctuation': /\\\\/\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t],\n\t\t\t\t\t\t'constant': constant,\n\t\t\t\t\t\t'number': number,\n\t\t\t\t\t\t'operator': operator,\n\t\t\t\t\t\t'punctuation': punctuation\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t'delimiter': {\n\t\t\t\t\tpattern: /^#\\[|\\]$/,\n\t\t\t\t\talias: 'punctuation'\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t});\n\n\tPrism.hooks.add('before-tokenize', function (env) {\n\t\tif (!/<\\?/.test(env.code)) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar phpPattern = /<\\?(?:[^\"'/#]|\\/(?![*/])|(\"|')(?:\\\\[\\s\\S]|(?!\\1)[^\\\\])*\\1|(?:\\/\\/|#(?!\\[))(?:[^?\\n\\r]|\\?(?!>))*(?=$|\\?>|[\\r\\n])|#\\[|\\/\\*(?:[^*]|\\*(?!\\/))*(?:\\*\\/|$))*?(?:\\?>|$)/g;\n\t\tPrism.languages['markup-templating'].buildPlaceholders(env, 'php', phpPattern);\n\t});\n\n\tPrism.hooks.add('after-tokenize', function (env) {\n\t\tPrism.languages['markup-templating'].tokenizePlaceholders(env, 'php');\n\t});\n\n}(Prism));\n/components/prism-prolog.js\u0002Prism.languages.prolog = {\n\t// Syntax depends on the implementation\n\t'comment': {\n\t\tpattern: /\\/\\*[\\s\\S]*?\\*\\/|%.*/,\n\t\tgreedy: true\n\t},\n\t// Depending on the implementation, strings may allow escaped newlines and quote-escape\n\t'string': {\n\t\tpattern: /([\"'])(?:\\1\\1|\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1(?!\\1)/,\n\t\tgreedy: true\n\t},\n\t'builtin': /\\b(?:fx|fy|xf[xy]?|yfx?)\\b/,\n\t// FIXME: Should we list all null-ary predicates (not followed by a parenthesis) like halt, trace, etc.?\n\t'function': /\\b[a-z]\\w*(?:(?=\\()|\\/\\d+)/,\n\t'number': /\\b\\d+(?:\\.\\d*)?/,\n\t// Custom operators are allowed\n\t'operator': /[:\\\\=><\\-?*@\\/;+^|!$.]+|\\b(?:is|mod|not|xor)\\b/,\n\t'punctuation': /[(){}\\[\\],]/\n};\n\"/components/prism-solution-file.js\u0004:(function (Prism) {\n\n\tvar guid = {\n\t\t// https://en.wikipedia.org/wiki/Universally_unique_identifier#Format\n\t\tpattern: /\\{[\\da-f]{8}-[\\da-f]{4}-[\\da-f]{4}-[\\da-f]{4}-[\\da-f]{12}\\}/i,\n\t\talias: 'constant',\n\t\tinside: {\n\t\t\t'punctuation': /[{}]/\n\t\t}\n\t};\n\n\tPrism.languages['solution-file'] = {\n\t\t'comment': {\n\t\t\tpattern: /#.*/,\n\t\t\tgreedy: true\n\t\t},\n\t\t'string': {\n\t\t\tpattern: /\"[^\"\\r\\n]*\"|'[^'\\r\\n]*'/,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'guid': guid\n\t\t\t}\n\t\t},\n\t\t'object': {\n\t\t\t// Foo\n\t\t\t//   Bar(\"abs\") = 9\n\t\t\t//   EndBar\n\t\t\t//   Prop = TRUE\n\t\t\t// EndFoo\n\t\t\tpattern: /^([ \\t]*)(?:([A-Z]\\w*)\\b(?=.*(?:\\r\\n?|\\n)(?:\\1[ \\t].*(?:\\r\\n?|\\n))*\\1End\\2(?=[ \\t]*$))|End[A-Z]\\w*(?=[ \\t]*$))/m,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\talias: 'keyword'\n\t\t},\n\t\t'property': {\n\t\t\tpattern: /^([ \\t]*)(?!\\s)[^\\r\\n\"#=()]*[^\\s\"#=()](?=\\s*=)/m,\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'guid': guid\n\t\t\t}\n\t\t},\n\t\t'guid': guid,\n\t\t'number': /\\b\\d+(?:\\.\\d+)*\\b/,\n\t\t'boolean': /\\b(?:FALSE|TRUE)\\b/,\n\t\t'operator': /=/,\n\t\t'punctuation': /[(),]/\n\t};\n\n\tPrism.languages['sln'] = Prism.languages['solution-file'];\n\n}(Prism));\n/components/prism-armasm.min.js\u0004Prism.languages.armasm={comment:{pattern:/;.*/,greedy:!0},string:{pattern:/\"(?:[^\"\\r\\n]|\"\")*\"/,greedy:!0,inside:{variable:{pattern:/((?:^|[^$])(?:\\${2})*)\\$\\w+/,lookbehind:!0}}},char:{pattern:/'(?:[^'\\r\\n]{0,4}|'')'/,greedy:!0},\"version-symbol\":{pattern:/\\|[\\w@]+\\|/,greedy:!0,alias:\"property\"},boolean:/\\b(?:FALSE|TRUE)\\b/,directive:{pattern:/\\b(?:ALIAS|ALIGN|AREA|ARM|ASSERT|ATTR|CN|CODE|CODE16|CODE32|COMMON|CP|DATA|DCB|DCD|DCDO|DCDU|DCFD|DCFDU|DCI|DCQ|DCQU|DCW|DCWU|DN|ELIF|ELSE|END|ENDFUNC|ENDIF|ENDP|ENTRY|EQU|EXPORT|EXPORTAS|EXTERN|FIELD|FILL|FN|FUNCTION|GBLA|GBLL|GBLS|GET|GLOBAL|IF|IMPORT|INCBIN|INCLUDE|INFO|KEEP|LCLA|LCLL|LCLS|LTORG|MACRO|MAP|MEND|MEXIT|NOFP|OPT|PRESERVE8|PROC|QN|READONLY|RELOC|REQUIRE|REQUIRE8|RLIST|ROUT|SETA|SETL|SETS|SN|SPACE|SUBT|THUMB|THUMBX|TTL|WEND|WHILE)\\b/,alias:\"property\"},instruction:{pattern:/((?:^|(?:^|[^\\\\])(?:\\r\\n?|\\n))[ \\t]*(?:(?:[A-Z][A-Z0-9_]*[a-z]\\w*|[a-z]\\w*|\\d+)[ \\t]+)?)\\b[A-Z.]+\\b/,lookbehind:!0,alias:\"keyword\"},variable:/\\$\\w+/,number:/(?:\\b[2-9]_\\d+|(?:\\b\\d+(?:\\.\\d+)?|\\B\\.\\d+)(?:e-?\\d+)?|\\b0(?:[fd]_|x)[0-9a-f]+|&[0-9a-f]+)\\b/i,register:{pattern:/\\b(?:r\\d|lr)\\b/,alias:\"symbol\"},operator:/<>|<<|>>|&&|\\|\\||[=!<>/]=?|[+\\-*%#?&|^]|:[A-Z]+:/,punctuation:/[()[\\],]/},Prism.languages[\"arm-asm\"]=Prism.languages.armasm;/components/prism-lua.min.js\u0002VPrism.languages.lua={comment:/^#!.+|--(?:\\[(=*)\\[[\\s\\S]*?\\]\\1\\]|.*)/m,string:{pattern:/([\"'])(?:(?!\\1)[^\\\\\\r\\n]|\\\\z(?:\\r\\n|\\s)|\\\\(?:\\r\\n|[^z]))*\\1|\\[(=*)\\[[\\s\\S]*?\\]\\2\\]/,greedy:!0},number:/\\b0x[a-f\\d]+(?:\\.[a-f\\d]*)?(?:p[+-]?\\d+)?\\b|\\b\\d+(?:\\.\\B|(?:\\.\\d*)?(?:e[+-]?\\d+)?\\b)|\\B\\.\\d+(?:e[+-]?\\d+)?\\b/i,keyword:/\\b(?:and|break|do|else|elseif|end|false|for|function|goto|if|in|local|nil|not|or|repeat|return|then|true|until|while)\\b/,function:/(?!\\d)\\w+(?=\\s*(?:[({]))/,operator:[/[-+*%^&|#]|\\/\\/?|<[<=]?|>[>=]?|[=~]=?/,{pattern:/(^|[^.])\\.\\.(?!\\.)/,lookbehind:!0}],punctuation:/[\\[\\](){},;]|\\.+|:+/};#/components/prism-css-extras.min.js\f!function(e){var a,n=/(\"|')(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1/;e.languages.css.selector={pattern:e.languages.css.selector.pattern,lookbehind:!0,inside:a={\"pseudo-element\":/:(?:after|before|first-letter|first-line|selection)|::[-\\w]+/,\"pseudo-class\":/:[-\\w]+/,class:/\\.[-\\w]+/,id:/#[-\\w]+/,attribute:{pattern:RegExp(\"\\\\[(?:[^[\\\\]\\\"']|\"+n.source+\")*\\\\]\"),greedy:!0,inside:{punctuation:/^\\[|\\]$/,\"case-sensitivity\":{pattern:/(\\s)[si]$/i,lookbehind:!0,alias:\"keyword\"},namespace:{pattern:/^(\\s*)(?:(?!\\s)[-*\\w\\xA0-\\uFFFF])*\\|(?!=)/,lookbehind:!0,inside:{punctuation:/\\|$/}},\"attr-name\":{pattern:/^(\\s*)(?:(?!\\s)[-\\w\\xA0-\\uFFFF])+/,lookbehind:!0},\"attr-value\":[n,{pattern:/(=\\s*)(?:(?!\\s)[-\\w\\xA0-\\uFFFF])+(?=\\s*$)/,lookbehind:!0}],operator:/[|~*^$]?=/}},\"n-th\":[{pattern:/(\\(\\s*)[+-]?\\d*[\\dn](?:\\s*[+-]\\s*\\d+)?(?=\\s*\\))/,lookbehind:!0,inside:{number:/[\\dn]+/,operator:/[+-]/}},{pattern:/(\\(\\s*)(?:even|odd)(?=\\s*\\))/i,lookbehind:!0}],combinator:/>|\\+|~|\\|\\|/,punctuation:/[(),]/}},e.languages.css.atrule.inside[\"selector-function-argument\"].inside=a,e.languages.insertBefore(\"css\",\"property\",{variable:{pattern:/(^|[^-\\w\\xA0-\\uFFFF])--(?!\\s)[-_a-z\\xA0-\\uFFFF](?:(?!\\s)[-\\w\\xA0-\\uFFFF])*/i,lookbehind:!0}});var r={pattern:/(\\b\\d+)(?:%|[a-z]+(?![\\w-]))/,lookbehind:!0},i={pattern:/(^|[^\\w.-])-?(?:\\d+(?:\\.\\d+)?|\\.\\d+)/,lookbehind:!0};e.languages.insertBefore(\"css\",\"function\",{operator:{pattern:/(\\s)[+\\-*\\/](?=\\s)/,lookbehind:!0},hexcode:{pattern:/\\B#[\\da-f]{3,8}\\b/i,alias:\"color\"},color:[{pattern:/(^|[^\\w-])(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|RebeccaPurple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)(?![\\w-])/i,lookbehind:!0},{pattern:/\\b(?:hsl|rgb)\\(\\s*\\d{1,3}\\s*,\\s*\\d{1,3}%?\\s*,\\s*\\d{1,3}%?\\s*\\)\\B|\\b(?:hsl|rgb)a\\(\\s*\\d{1,3}\\s*,\\s*\\d{1,3}%?\\s*,\\s*\\d{1,3}%?\\s*,\\s*(?:0|0?\\.\\d+|1)\\s*\\)\\B/i,inside:{unit:r,number:i,function:/[\\w-]+(?=\\()/,punctuation:/[(),]/}}],entity:/\\\\[\\da-f]{1,8}/i,unit:r,number:i})}(Prism);/components/prism-asm6502.js\u0003Prism.languages.asm6502 = {\n\t'comment': /;.*/,\n\t'directive': {\n\t\tpattern: /\\.\\w+(?= )/,\n\t\talias: 'property'\n\t},\n\t'string': /([\"'`])(?:\\\\.|(?!\\1)[^\\\\\\r\\n])*\\1/,\n\t'op-code': {\n\t\tpattern: /\\b(?:ADC|AND|ASL|BCC|BCS|BEQ|BIT|BMI|BNE|BPL|BRK|BVC|BVS|CLC|CLD|CLI|CLV|CMP|CPX|CPY|DEC|DEX|DEY|EOR|INC|INX|INY|JMP|JSR|LDA|LDX|LDY|LSR|NOP|ORA|PHA|PHP|PLA|PLP|ROL|ROR|RTI|RTS|SBC|SEC|SED|SEI|STA|STX|STY|TAX|TAY|TSX|TXA|TXS|TYA|adc|and|asl|bcc|bcs|beq|bit|bmi|bne|bpl|brk|bvc|bvs|clc|cld|cli|clv|cmp|cpx|cpy|dec|dex|dey|eor|inc|inx|iny|jmp|jsr|lda|ldx|ldy|lsr|nop|ora|pha|php|pla|plp|rol|ror|rti|rts|sbc|sec|sed|sei|sta|stx|sty|tax|tay|tsx|txa|txs|tya)\\b/,\n\t\talias: 'keyword'\n\t},\n\t'hex-number': {\n\t\tpattern: /#?\\$[\\da-f]{1,4}\\b/i,\n\t\talias: 'number'\n\t},\n\t'binary-number': {\n\t\tpattern: /#?%[01]+\\b/,\n\t\talias: 'number'\n\t},\n\t'decimal-number': {\n\t\tpattern: /#?\\b\\d+\\b/,\n\t\talias: 'number'\n\t},\n\t'register': {\n\t\tpattern: /\\b[xya]\\b/i,\n\t\talias: 'variable'\n\t},\n\t'punctuation': /[(),:]/\n};\n/components/prism-promql.min.js\u0004!function(t){var n=[\"on\",\"ignoring\",\"group_right\",\"group_left\",\"by\",\"without\"],a=[\"sum\",\"min\",\"max\",\"avg\",\"group\",\"stddev\",\"stdvar\",\"count\",\"count_values\",\"bottomk\",\"topk\",\"quantile\"].concat(n,[\"offset\"]);t.languages.promql={comment:{pattern:/(^[ \\t]*)#.*/m,lookbehind:!0},\"vector-match\":{pattern:new RegExp(\"((?:\"+n.join(\"|\")+\")\\\\s*)\\\\([^)]*\\\\)\"),lookbehind:!0,inside:{\"label-key\":{pattern:/\\b[^,]+\\b/,alias:\"attr-name\"},punctuation:/[(),]/}},\"context-labels\":{pattern:/\\{[^{}]*\\}/,inside:{\"label-key\":{pattern:/\\b[a-z_]\\w*(?=\\s*(?:=|![=~]))/,alias:\"attr-name\"},\"label-value\":{pattern:/([\"'`])(?:\\\\[\\s\\S]|(?!\\1)[^\\\\])*\\1/,greedy:!0,alias:\"attr-value\"},punctuation:/\\{|\\}|=~?|![=~]|,/}},\"context-range\":[{pattern:/\\[[\\w\\s:]+\\]/,inside:{punctuation:/\\[|\\]|:/,\"range-duration\":{pattern:/\\b(?:\\d+(?:[smhdwy]|ms))+\\b/i,alias:\"number\"}}},{pattern:/(\\boffset\\s+)\\w+/,lookbehind:!0,inside:{\"range-duration\":{pattern:/\\b(?:\\d+(?:[smhdwy]|ms))+\\b/i,alias:\"number\"}}}],keyword:new RegExp(\"\\\\b(?:\"+a.join(\"|\")+\")\\\\b\",\"i\"),function:/\\b[a-z_]\\w*(?=\\s*\\()/i,number:/[-+]?(?:(?:\\b\\d+(?:\\.\\d+)?|\\B\\.\\d+)(?:e[-+]?\\d+)?\\b|\\b(?:0x[0-9a-f]+|nan|inf)\\b)/i,operator:/[\\^*/%+-]|==|!=|<=|<|>=|>|\\b(?:and|or|unless)\\b/i,punctuation:/[{};()`,.[\\]]/}}(Prism);/components/prism-etlua.min.js\u0001!function(a){a.languages.etlua={delimiter:{pattern:/^<%[-=]?|-?%>$/,alias:\"punctuation\"},\"language-lua\":{pattern:/[\\s\\S]+/,inside:a.languages.lua}},a.hooks.add(\"before-tokenize\",(function(e){a.languages[\"markup-templating\"].buildPlaceholders(e,\"etlua\",/<%[\\s\\S]+?%>/g)})),a.hooks.add(\"after-tokenize\",(function(e){a.languages[\"markup-templating\"].tokenizePlaceholders(e,\"etlua\")}))}(Prism);/components/prism-verilog.js\tPrism.languages.verilog = {\n\t'comment': {\n\t\tpattern: /\\/\\/.*|\\/\\*[\\s\\S]*?\\*\\//,\n\t\tgreedy: true\n\t},\n\t'string': {\n\t\tpattern: /\"(?:\\\\(?:\\r\\n|[\\s\\S])|[^\"\\\\\\r\\n])*\"/,\n\t\tgreedy: true\n\t},\n\t'kernel-function': {\n\t\t// support for any kernel function (ex: $display())\n\t\tpattern: /\\B\\$\\w+\\b/,\n\t\talias: 'property'\n\t},\n\t// support for user defined constants (ex: `define)\n\t'constant': /\\B`\\w+\\b/,\n\t'function': /\\b\\w+(?=\\()/,\n\t// support for verilog and system verilog keywords\n\t'keyword': /\\b(?:alias|and|assert|assign|assume|automatic|before|begin|bind|bins|binsof|bit|break|buf|bufif0|bufif1|byte|case|casex|casez|cell|chandle|class|clocking|cmos|config|const|constraint|context|continue|cover|covergroup|coverpoint|cross|deassign|default|defparam|design|disable|dist|do|edge|else|end|endcase|endclass|endclocking|endconfig|endfunction|endgenerate|endgroup|endinterface|endmodule|endpackage|endprimitive|endprogram|endproperty|endsequence|endspecify|endtable|endtask|enum|event|expect|export|extends|extern|final|first_match|for|force|foreach|forever|fork|forkjoin|function|generate|genvar|highz0|highz1|if|iff|ifnone|ignore_bins|illegal_bins|import|incdir|include|initial|inout|input|inside|instance|int|integer|interface|intersect|join|join_any|join_none|large|liblist|library|local|localparam|logic|longint|macromodule|matches|medium|modport|module|nand|negedge|new|nmos|nor|noshowcancelled|not|notif0|notif1|null|or|output|package|packed|parameter|pmos|posedge|primitive|priority|program|property|protected|pull0|pull1|pulldown|pullup|pulsestyle_ondetect|pulsestyle_onevent|pure|rand|randc|randcase|randsequence|rcmos|real|realtime|ref|reg|release|repeat|return|rnmos|rpmos|rtran|rtranif0|rtranif1|scalared|sequence|shortint|shortreal|showcancelled|signed|small|solve|specify|specparam|static|string|strong0|strong1|struct|super|supply0|supply1|table|tagged|task|this|throughout|time|timeprecision|timeunit|tran|tranif0|tranif1|tri|tri0|tri1|triand|trior|trireg|type|typedef|union|unique|unsigned|use|uwire|var|vectored|virtual|void|wait|wait_order|wand|weak0|weak1|while|wildcard|wire|with|within|wor|xnor|xor)\\b/,\n\t// bold highlighting for all verilog and system verilog logic blocks\n\t'important': /\\b(?:always|always_comb|always_ff|always_latch)\\b(?: *@)?/,\n\t// support for time ticks, vectors, and real numbers\n\t'number': /\\B##?\\d+|(?:\\b\\d+)?'[odbh] ?[\\da-fzx_?]+|\\b(?:\\d*[._])?\\d+(?:e[-+]?\\d+)?/i,\n\t'operator': /[-+{}^~%*\\/?=!<>&|]+/,\n\t'punctuation': /[[\\];(),.:]/\n};\n/components/prism-d.js\f]Prism.languages.d = Prism.languages.extend('clike', {\n\t'comment': [\n\t\t{\n\t\t\t// Shebang\n\t\t\tpattern: /^\\s*#!.+/,\n\t\t\tgreedy: true\n\t\t},\n\t\t{\n\t\t\tpattern: RegExp(/(^|[^\\\\])/.source + '(?:' + [\n\t\t\t\t// /+ comment +/\n\t\t\t\t// Allow one level of nesting\n\t\t\t\t/\\/\\+(?:\\/\\+(?:[^+]|\\+(?!\\/))*\\+\\/|(?!\\/\\+)[\\s\\S])*?\\+\\//.source,\n\t\t\t\t// // comment\n\t\t\t\t/\\/\\/.*/.source,\n\t\t\t\t// /* comment */\n\t\t\t\t/\\/\\*[\\s\\S]*?\\*\\//.source\n\t\t\t].join('|') + ')'),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true\n\t\t}\n\t],\n\t'string': [\n\t\t{\n\t\t\tpattern: RegExp([\n\t\t\t\t// r\"\", x\"\"\n\t\t\t\t/\\b[rx]\"(?:\\\\[\\s\\S]|[^\\\\\"])*\"[cwd]?/.source,\n\n\t\t\t\t// q\"[]\", q\"()\", q\"<>\", q\"{}\"\n\t\t\t\t/\\bq\"(?:\\[[\\s\\S]*?\\]|\\([\\s\\S]*?\\)|<[\\s\\S]*?>|\\{[\\s\\S]*?\\})\"/.source,\n\n\t\t\t\t// q\"IDENT\n\t\t\t\t// ...\n\t\t\t\t// IDENT\"\n\t\t\t\t/\\bq\"((?!\\d)\\w+)$[\\s\\S]*?^\\1\"/.source,\n\n\t\t\t\t// q\"//\", q\"||\", etc.\n\t\t\t\t// eslint-disable-next-line regexp/strict\n\t\t\t\t/\\bq\"(.)[\\s\\S]*?\\2\"/.source,\n\n\t\t\t\t// eslint-disable-next-line regexp/strict\n\t\t\t\t/([\"`])(?:\\\\[\\s\\S]|(?!\\3)[^\\\\])*\\3[cwd]?/.source\n\t\t\t].join('|'), 'm'),\n\t\t\tgreedy: true\n\t\t},\n\t\t{\n\t\t\tpattern: /\\bq\\{(?:\\{[^{}]*\\}|[^{}])*\\}/,\n\t\t\tgreedy: true,\n\t\t\talias: 'token-string'\n\t\t}\n\t],\n\n\t// In order: $, keywords and special tokens, globally defined symbols\n\t'keyword': /\\$|\\b(?:__(?:(?:DATE|EOF|FILE|FUNCTION|LINE|MODULE|PRETTY_FUNCTION|TIMESTAMP|TIME|VENDOR|VERSION)__|gshared|parameters|traits|vector)|abstract|alias|align|asm|assert|auto|body|bool|break|byte|case|cast|catch|cdouble|cent|cfloat|char|class|const|continue|creal|dchar|debug|default|delegate|delete|deprecated|do|double|dstring|else|enum|export|extern|false|final|finally|float|for|foreach|foreach_reverse|function|goto|idouble|if|ifloat|immutable|import|inout|int|interface|invariant|ireal|lazy|long|macro|mixin|module|new|nothrow|null|out|override|package|pragma|private|protected|ptrdiff_t|public|pure|real|ref|return|scope|shared|short|size_t|static|string|struct|super|switch|synchronized|template|this|throw|true|try|typedef|typeid|typeof|ubyte|ucent|uint|ulong|union|unittest|ushort|version|void|volatile|wchar|while|with|wstring)\\b/,\n\n\t'number': [\n\t\t// The lookbehind and the negative look-ahead try to prevent bad highlighting of the .. operator\n\t\t// Hexadecimal numbers must be handled separately to avoid problems with exponent \"e\"\n\t\t/\\b0x\\.?[a-f\\d_]+(?:(?!\\.\\.)\\.[a-f\\d_]*)?(?:p[+-]?[a-f\\d_]+)?[ulfi]{0,4}/i,\n\t\t{\n\t\t\tpattern: /((?:\\.\\.)?)(?:\\b0b\\.?|\\b|\\.)\\d[\\d_]*(?:(?!\\.\\.)\\.[\\d_]*)?(?:e[+-]?\\d[\\d_]*)?[ulfi]{0,4}/i,\n\t\t\tlookbehind: true\n\t\t}\n\t],\n\n\t'operator': /\\|[|=]?|&[&=]?|\\+[+=]?|-[-=]?|\\.?\\.\\.|=[>=]?|!(?:i[ns]\\b|<>?=?|>=?|=)?|\\bi[ns]\\b|(?:<[<>]?|>>?>?|\\^\\^|[*\\/%^~])=?/\n});\n\nPrism.languages.insertBefore('d', 'string', {\n\t// Characters\n\t// 'a', '\\\\', '\\n', '\\xFF', '\\377', '\\uFFFF', '\\U0010FFFF', '\\quot'\n\t'char': /'(?:\\\\(?:\\W|\\w+)|[^\\\\])'/\n});\n\nPrism.languages.insertBefore('d', 'keyword', {\n\t'property': /\\B@\\w*/\n});\n\nPrism.languages.insertBefore('d', 'function', {\n\t'register': {\n\t\t// Iasm registers\n\t\tpattern: /\\b(?:[ABCD][LHX]|E?(?:BP|DI|SI|SP)|[BS]PL|[ECSDGF]S|CR[0234]|[DS]IL|DR[012367]|E[ABCD]X|X?MM[0-7]|R(?:1[0-5]|[89])[BWD]?|R[ABCD]X|R[BS]P|R[DS]I|TR[3-7]|XMM(?:1[0-5]|[89])|YMM(?:1[0-5]|\\d))\\b|\\bST(?:\\([0-7]\\)|\\b)/,\n\t\talias: 'variable'\n\t}\n});\n!/components/prism-coffeescript.js\bt(function (Prism) {\n\n\t// Ignore comments starting with { to privilege string interpolation highlighting\n\tvar comment = /#(?!\\{).+/;\n\tvar interpolation = {\n\t\tpattern: /#\\{[^}]+\\}/,\n\t\talias: 'variable'\n\t};\n\n\tPrism.languages.coffeescript = Prism.languages.extend('javascript', {\n\t\t'comment': comment,\n\t\t'string': [\n\n\t\t\t// Strings are multiline\n\t\t\t{\n\t\t\t\tpattern: /'(?:\\\\[\\s\\S]|[^\\\\'])*'/,\n\t\t\t\tgreedy: true\n\t\t\t},\n\n\t\t\t{\n\t\t\t\t// Strings are multiline\n\t\t\t\tpattern: /\"(?:\\\\[\\s\\S]|[^\\\\\"])*\"/,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'interpolation': interpolation\n\t\t\t\t}\n\t\t\t}\n\t\t],\n\t\t'keyword': /\\b(?:and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\\b/,\n\t\t'class-member': {\n\t\t\tpattern: /@(?!\\d)\\w+/,\n\t\t\talias: 'variable'\n\t\t}\n\t});\n\n\tPrism.languages.insertBefore('coffeescript', 'comment', {\n\t\t'multiline-comment': {\n\t\t\tpattern: /###[\\s\\S]+?###/,\n\t\t\talias: 'comment'\n\t\t},\n\n\t\t// Block regexp can contain comments and interpolation\n\t\t'block-regex': {\n\t\t\tpattern: /\\/{3}[\\s\\S]*?\\/{3}/,\n\t\t\talias: 'regex',\n\t\t\tinside: {\n\t\t\t\t'comment': comment,\n\t\t\t\t'interpolation': interpolation\n\t\t\t}\n\t\t}\n\t});\n\n\tPrism.languages.insertBefore('coffeescript', 'string', {\n\t\t'inline-javascript': {\n\t\t\tpattern: /`(?:\\\\[\\s\\S]|[^\\\\`])*`/,\n\t\t\tinside: {\n\t\t\t\t'delimiter': {\n\t\t\t\t\tpattern: /^`|`$/,\n\t\t\t\t\talias: 'punctuation'\n\t\t\t\t},\n\t\t\t\t'script': {\n\t\t\t\t\tpattern: /[\\s\\S]+/,\n\t\t\t\t\talias: 'language-javascript',\n\t\t\t\t\tinside: Prism.languages.javascript\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Block strings\n\t\t'multiline-string': [\n\t\t\t{\n\t\t\t\tpattern: /'''[\\s\\S]*?'''/,\n\t\t\t\tgreedy: true,\n\t\t\t\talias: 'string'\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /\"\"\"[\\s\\S]*?\"\"\"/,\n\t\t\t\tgreedy: true,\n\t\t\t\talias: 'string',\n\t\t\t\tinside: {\n\t\t\t\t\tinterpolation: interpolation\n\t\t\t\t}\n\t\t\t}\n\t\t]\n\n\t});\n\n\tPrism.languages.insertBefore('coffeescript', 'keyword', {\n\t\t// Object property\n\t\t'property': /(?!\\d)\\w+(?=\\s*:(?!:))/\n\t});\n\n\tdelete Prism.languages.coffeescript['template-string'];\n\n\tPrism.languages.coffee = Prism.languages.coffeescript;\n}(Prism));\n/components/prism-bro.js\u0004Prism.languages.bro = {\n\n\t'comment': {\n\t\tpattern: /(^|[^\\\\$])#.*/,\n\t\tlookbehind: true,\n\t\tinside: {\n\t\t\t'italic': /\\b(?:FIXME|TODO|XXX)\\b/\n\t\t}\n\t},\n\n\t'string': {\n\t\tpattern: /([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1/,\n\t\tgreedy: true\n\t},\n\n\t'boolean': /\\b[TF]\\b/,\n\n\t'function': {\n\t\tpattern: /(\\b(?:event|function|hook)[ \\t]+)\\w+(?:::\\w+)?/,\n\t\tlookbehind: true\n\t},\n\n\t'builtin': /(?:@(?:load(?:-(?:plugin|sigs))?|unload|prefixes|ifn?def|else|(?:end)?if|DIR|FILENAME))|(?:&?(?:add_func|create_expire|default|delete_func|encrypt|error_handler|expire_func|group|log|mergeable|optional|persistent|priority|raw_output|read_expire|redef|rotate_interval|rotate_size|synchronized|type_column|write_expire))/,\n\n\t'constant': {\n\t\tpattern: /(\\bconst[ \\t]+)\\w+/i,\n\t\tlookbehind: true\n\t},\n\n\t'keyword': /\\b(?:add|addr|alarm|any|bool|break|const|continue|count|delete|double|else|enum|event|export|file|for|function|global|hook|if|in|int|interval|local|module|next|of|opaque|pattern|port|print|record|return|schedule|set|string|subnet|table|time|timeout|using|vector|when)\\b/,\n\n\t'operator': /--?|\\+\\+?|!=?=?|<=?|>=?|==?=?|&&|\\|\\|?|\\?|\\*|\\/|~|\\^|%/,\n\n\t'number': /\\b0x[\\da-f]+\\b|(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:e[+-]?\\d+)?/i,\n\n\t'punctuation': /[{}[\\];(),.:]/\n};\n/components/prism-bicep.min.js\u0005\u000bPrism.languages.bicep={comment:[{pattern:/(^|[^\\\\])\\/\\*[\\s\\S]*?(?:\\*\\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\\\:])\\/\\/.*/,lookbehind:!0,greedy:!0}],property:[{pattern:/([\\r\\n][ \\t]*)[a-z_]\\w*(?=[ \\t]*:)/i,lookbehind:!0},{pattern:/([\\r\\n][ \\t]*)'(?:\\\\.|\\$(?!\\{)|[^'\\\\\\r\\n$])*'(?=[ \\t]*:)/,lookbehind:!0,greedy:!0}],string:[{pattern:/'''[^'][\\s\\S]*?'''/,greedy:!0},{pattern:/(^|[^\\\\'])'(?:\\\\.|\\$(?!\\{)|[^'\\\\\\r\\n$])*'/,lookbehind:!0,greedy:!0}],\"interpolated-string\":{pattern:/(^|[^\\\\'])'(?:\\\\.|\\$(?:(?!\\{)|\\{[^{}\\r\\n]*\\})|[^'\\\\\\r\\n$])*'/,lookbehind:!0,greedy:!0,inside:{interpolation:{pattern:/\\$\\{[^{}\\r\\n]*\\}/,inside:{expression:{pattern:/(^\\$\\{)[\\s\\S]+(?=\\}$)/,lookbehind:!0},punctuation:/^\\$\\{|\\}$/}},string:/[\\s\\S]+/}},datatype:{pattern:/(\\b(?:output|param)\\b[ \\t]+\\w+[ \\t]+)\\w+\\b/,lookbehind:!0,alias:\"class-name\"},boolean:/\\b(?:false|true)\\b/,keyword:/\\b(?:existing|for|if|in|module|null|output|param|resource|targetScope|var)\\b/,decorator:/@\\w+\\b/,function:/\\b[a-z_]\\w*(?=[ \\t]*\\()/i,number:/(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:E[+-]?\\d+)?/i,operator:/--|\\+\\+|\\*\\*=?|=>|&&=?|\\|\\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\\.{3}|\\?\\?=?|\\?\\.?|[~:]/,punctuation:/[{}[\\];(),.:]/},Prism.languages.bicep[\"interpolated-string\"].inside.interpolation.inside.expression.inside=Prism.languages.bicep;,/plugins/match-braces/prism-match-braces.css\u0003/.token.punctuation.brace-hover,\n.token.punctuation.brace-selected {\n\toutline: solid 1px;\n}\n\n.rainbow-braces .token.punctuation.brace-level-1,\n.rainbow-braces .token.punctuation.brace-level-5,\n.rainbow-braces .token.punctuation.brace-level-9 {\n\tcolor: #E50;\n\topacity: 1;\n}\n.rainbow-braces .token.punctuation.brace-level-2,\n.rainbow-braces .token.punctuation.brace-level-6,\n.rainbow-braces .token.punctuation.brace-level-10 {\n\tcolor: #0B3;\n\topacity: 1;\n}\n.rainbow-braces .token.punctuation.brace-level-3,\n.rainbow-braces .token.punctuation.brace-level-7,\n.rainbow-braces .token.punctuation.brace-level-11 {\n\tcolor: #26F;\n\topacity: 1;\n}\n.rainbow-braces .token.punctuation.brace-level-4,\n.rainbow-braces .token.punctuation.brace-level-8,\n.rainbow-braces .token.punctuation.brace-level-12 {\n\tcolor: #E0E;\n\topacity: 1;\n}\n/components/prism-objectivec.js\u0002Prism.languages.objectivec = Prism.languages.extend('c', {\n\t'string': {\n\t\tpattern: /@?\"(?:\\\\(?:\\r\\n|[\\s\\S])|[^\"\\\\\\r\\n])*\"/,\n\t\tgreedy: true\n\t},\n\t'keyword': /\\b(?:asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|in|inline|int|long|register|return|self|short|signed|sizeof|static|struct|super|switch|typedef|typeof|union|unsigned|void|volatile|while)\\b|(?:@interface|@end|@implementation|@protocol|@class|@public|@protected|@private|@property|@try|@catch|@finally|@throw|@synthesize|@dynamic|@selector)\\b/,\n\t'operator': /-[->]?|\\+\\+?|!=?|<<?=?|>>?=?|==?|&&?|\\|\\|?|[~^%?*\\/@]/\n});\n\ndelete Prism.languages.objectivec['class-name'];\n\nPrism.languages.objc = Prism.languages.objectivec;\n/components/prism-nsis.min.js\u000ePrism.languages.nsis={comment:{pattern:/(^|[^\\\\])(?:\\/\\*[\\s\\S]*?\\*\\/|[#;].*)/,lookbehind:!0,greedy:!0},string:{pattern:/(\"|')(?:\\\\.|(?!\\1)[^\\\\\\r\\n])*\\1/,greedy:!0},keyword:{pattern:/(^[\\t ]*)(?:Abort|Add(?:BrandingImage|Size)|AdvSplash|Allow(?:RootDirInstall|SkipFiles)|AutoCloseWindow|BG(?:Font|Gradient|Image)|Banner|BrandingText|BringToFront|CRCCheck|Call(?:InstDLL)?|Caption|ChangeUI|CheckBitmap|ClearErrors|CompletedText|ComponentText|CopyFiles|Create(?:Directory|Font|ShortCut)|Delete(?:INISec|INIStr|RegKey|RegValue)?|Detail(?:Print|sButtonText)|Dialer|Dir(?:Text|Var|Verify)|EnableWindow|Enum(?:RegKey|RegValue)|Exch|Exec(?:Shell(?:Wait)?|Wait)?|ExpandEnvStrings|File(?:BufSize|Close|ErrorText|Open|Read|ReadByte|ReadUTF16LE|ReadWord|Seek|Write|WriteByte|WriteUTF16LE|WriteWord)?|Find(?:Close|First|Next|Window)|FlushINI|Get(?:CurInstType|CurrentAddress|DLLVersion(?:Local)?|DlgItem|ErrorLevel|FileTime(?:Local)?|FullPathName|Function(?:Address|End)?|InstDirError|KnownFolderPath|LabelAddress|TempFileName|WinVer)|Goto|HideWindow|Icon|If(?:Abort|Errors|FileExists|RebootFlag|RtlLanguage|ShellVarContextAll|Silent)|InitPluginsDir|InstProgressFlags|Inst(?:Type(?:GetText|SetText)?)|Install(?:ButtonText|Colors|Dir(?:RegKey)?)|Int(?:64|Ptr)?CmpU?|Int(?:64)?Fmt|Int(?:Ptr)?Op|IsWindow|Lang(?:DLL|String)|License(?:BkColor|Data|ForceSelection|LangString|Text)|LoadLanguageFile|LockWindow|Log(?:Set|Text)|Manifest(?:DPIAware|SupportedOS)|Math|MessageBox|MiscButtonText|NSISdl|Name|Nop|OutFile|PE(?:DllCharacteristics|SubsysVer)|Page(?:Callbacks)?|Pop|Push|Quit|RMDir|Read(?:EnvStr|INIStr|RegDWORD|RegStr)|Reboot|RegDLL|Rename|RequestExecutionLevel|ReserveFile|Return|SearchPath|Section(?:End|GetFlags|GetInstTypes|GetSize|GetText|Group|In|SetFlags|SetInstTypes|SetSize|SetText)?|SendMessage|Set(?:AutoClose|BrandingImage|Compress|Compressor(?:DictSize)?|CtlColors|CurInstType|DatablockOptimize|DateSave|Details(?:Print|View)|ErrorLevel|Errors|FileAttributes|Font|OutPath|Overwrite|PluginUnload|RebootFlag|RegView|ShellVarContext|Silent)|Show(?:InstDetails|UninstDetails|Window)|Silent(?:Install|UnInstall)|Sleep|SpaceTexts|Splash|StartMenu|Str(?:CmpS?|Cpy|Len)|SubCaption|System|Target|UnRegDLL|Unicode|UninstPage|Uninstall(?:ButtonText|Caption|Icon|SubCaption|Text)|UserInfo|VI(?:AddVersionKey|FileVersion|ProductVersion)|VPatch|Var|WindowIcon|Write(?:INIStr|Reg(?:Bin|DWORD|ExpandStr|MultiStr|None|Str)|Uninstaller)|XPStyle|ns(?:Dialogs|Exec))\\b/m,lookbehind:!0},property:/\\b(?:ARCHIVE|FILE_(?:ATTRIBUTE_ARCHIVE|ATTRIBUTE_NORMAL|ATTRIBUTE_OFFLINE|ATTRIBUTE_READONLY|ATTRIBUTE_SYSTEM|ATTRIBUTE_TEMPORARY)|HK(?:(?:CR|CU|LM)(?:32|64)?|DD|PD|U)|HKEY_(?:CLASSES_ROOT|CURRENT_CONFIG|CURRENT_USER|DYN_DATA|LOCAL_MACHINE|PERFORMANCE_DATA|USERS)|ID(?:ABORT|CANCEL|IGNORE|NO|OK|RETRY|YES)|MB_(?:ABORTRETRYIGNORE|DEFBUTTON1|DEFBUTTON2|DEFBUTTON3|DEFBUTTON4|ICONEXCLAMATION|ICONINFORMATION|ICONQUESTION|ICONSTOP|OK|OKCANCEL|RETRYCANCEL|RIGHT|RTLREADING|SETFOREGROUND|TOPMOST|USERICON|YESNO)|NORMAL|OFFLINE|READONLY|SHCTX|SHELL_CONTEXT|SYSTEM|TEMPORARY|admin|all|auto|both|colored|false|force|hide|highest|lastused|leave|listonly|none|normal|notset|off|on|open|print|show|silent|silentlog|smooth|textonly|true|user)\\b/,constant:/\\$\\{[!\\w\\.:\\^-]+\\}|\\$\\([!\\w\\.:\\^-]+\\)/,variable:/\\$\\w[\\w\\.]*/,number:/\\b0x[\\dA-Fa-f]+\\b|(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:[Ee]-?\\d+)?/,operator:/--?|\\+\\+?|<=?|>=?|==?=?|&&?|\\|\\|?|[?*\\/~^%]/,punctuation:/[{}[\\];(),.:]/,important:{pattern:/(^[\\t ]*)!(?:addincludedir|addplugindir|appendfile|cd|define|delfile|echo|else|endif|error|execute|finalize|getdllversion|gettlbversion|if|ifdef|ifmacrodef|ifmacrondef|ifndef|include|insertmacro|macro|macroend|makensis|packhdr|pragma|searchparse|searchreplace|system|tempfile|undef|verbose|warning)\\b/im,lookbehind:!0}};/components/prism-inform7.js\u000ePrism.languages.inform7 = {\n\t'string': {\n\t\tpattern: /\"[^\"]*\"/,\n\t\tinside: {\n\t\t\t'substitution': {\n\t\t\t\tpattern: /\\[[^\\[\\]]+\\]/,\n\t\t\t\tinside: {\n\t\t\t\t\t'delimiter': {\n\t\t\t\t\t\tpattern: /\\[|\\]/,\n\t\t\t\t\t\talias: 'punctuation'\n\t\t\t\t\t}\n\t\t\t\t\t// See rest below\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\t'comment': {\n\t\tpattern: /\\[[^\\[\\]]+\\]/,\n\t\tgreedy: true\n\t},\n\t'title': {\n\t\tpattern: /^[ \\t]*(?:book|chapter|part(?! of)|section|table|volume)\\b.+/im,\n\t\talias: 'important'\n\t},\n\t'number': {\n\t\tpattern: /(^|[^-])(?:\\b\\d+(?:\\.\\d+)?(?:\\^\\d+)?(?:(?!\\d)\\w+)?|\\b(?:eight|eleven|five|four|nine|one|seven|six|ten|three|twelve|two))\\b(?!-)/i,\n\t\tlookbehind: true\n\t},\n\t'verb': {\n\t\tpattern: /(^|[^-])\\b(?:answering|applying to|are|asking|attacking|be(?:ing)?|burning|buying|called|carries|carry(?! out)|carrying|climbing|closing|conceal(?:ing|s)?|consulting|contain(?:ing|s)?|cutting|drinking|dropping|eating|enclos(?:es?|ing)|entering|examining|exiting|getting|giving|going|ha(?:s|ve|ving)|hold(?:ing|s)?|impl(?:ies|y)|incorporat(?:es?|ing)|inserting|is|jumping|kissing|listening|locking|looking|mean(?:ing|s)?|opening|provid(?:es?|ing)|pulling|pushing|putting|relat(?:es?|ing)|removing|searching|see(?:ing|s)?|setting|showing|singing|sleeping|smelling|squeezing|support(?:ing|s)?|swearing|switching|taking|tasting|telling|thinking|throwing|touching|turning|tying|unlock(?:ing|s)?|var(?:ies|y|ying)|waiting|waking|waving|wear(?:ing|s)?)\\b(?!-)/i,\n\t\tlookbehind: true,\n\t\talias: 'operator'\n\t},\n\t'keyword': {\n\t\tpattern: /(^|[^-])\\b(?:after|before|carry out|check|continue the action|definition(?= *:)|do nothing|else|end (?:if|the story|unless)|every turn|if|include|instead(?: of)?|let|move|no|now|otherwise|repeat|report|resume the story|rule for|running through|say(?:ing)?|stop the action|test|try(?:ing)?|understand|unless|use|when|while|yes)\\b(?!-)/i,\n\t\tlookbehind: true\n\t},\n\t'property': {\n\t\tpattern: /(^|[^-])\\b(?:adjacent(?! to)|carried|closed|concealed|contained|dark|described|edible|empty|enclosed|enterable|even|female|fixed in place|full|handled|held|improper-named|incorporated|inedible|invisible|lighted|lit|lock(?:able|ed)|male|marked for listing|mentioned|negative|neuter|non-(?:empty|full|recurring)|odd|opaque|open(?:able)?|plural-named|portable|positive|privately-named|proper-named|provided|publically-named|pushable between rooms|recurring|related|rubbing|scenery|seen|singular-named|supported|swinging|switch(?:able|ed(?: off| on)?)|touch(?:able|ed)|transparent|unconcealed|undescribed|unlit|unlocked|unmarked for listing|unmentioned|unopenable|untouchable|unvisited|variable|visible|visited|wearable|worn)\\b(?!-)/i,\n\t\tlookbehind: true,\n\t\talias: 'symbol'\n\t},\n\t'position': {\n\t\tpattern: /(^|[^-])\\b(?:above|adjacent to|back side of|below|between|down|east|everywhere|front side|here|in|inside(?: from)?|north(?:east|west)?|nowhere|on(?: top of)?|other side|outside(?: from)?|parts? of|regionally in|south(?:east|west)?|through|up|west|within)\\b(?!-)/i,\n\t\tlookbehind: true,\n\t\talias: 'keyword'\n\t},\n\t'type': {\n\t\tpattern: /(^|[^-])\\b(?:actions?|activit(?:ies|y)|actors?|animals?|backdrops?|containers?|devices?|directions?|doors?|holders?|kinds?|lists?|m[ae]n|nobody|nothing|nouns?|numbers?|objects?|people|persons?|player(?:'s holdall)?|regions?|relations?|rooms?|rule(?:book)?s?|scenes?|someone|something|supporters?|tables?|texts?|things?|time|vehicles?|wom[ae]n)\\b(?!-)/i,\n\t\tlookbehind: true,\n\t\talias: 'variable'\n\t},\n\t'punctuation': /[.,:;(){}]/\n};\n\nPrism.languages.inform7['string'].inside['substitution'].inside.rest = Prism.languages.inform7;\n// We don't want the remaining text in the substitution to be highlighted as the string.\nPrism.languages.inform7['string'].inside['substitution'].inside.rest.text = {\n\tpattern: /\\S(?:\\s*\\S)*/,\n\talias: 'comment'\n};\n/components/prism-j.min.js\u00032Prism.languages.j={comment:{pattern:/\\bNB\\..*/,greedy:!0},string:{pattern:/'(?:''|[^'\\r\\n])*'/,greedy:!0},keyword:/\\b(?:(?:CR|LF|adverb|conjunction|def|define|dyad|monad|noun|verb)\\b|(?:assert|break|case|catch[dt]?|continue|do|else|elseif|end|fcase|for|for_\\w+|goto_\\w+|if|label_\\w+|return|select|throw|try|while|whilst)\\.)/,verb:{pattern:/(?!\\^:|;\\.|[=!][.:])(?:\\{(?:\\.|::?)?|p(?:\\.\\.?|:)|[=!\\]]|[<>+*\\-%$|,#][.:]?|[?^]\\.?|[;\\[]:?|[~}\"i][.:]|[ACeEIjLor]\\.|(?:[_\\/\\\\qsux]|_?\\d):)/,alias:\"keyword\"},number:/\\b_?(?:(?!\\d:)\\d+(?:\\.\\d+)?(?:(?:ad|ar|[ejpx])_?\\d+(?:\\.\\d+)?)*(?:b_?[\\da-z]+(?:\\.[\\da-z]+)?)?|_\\b(?!\\.))/,adverb:{pattern:/[~}]|[\\/\\\\]\\.?|[bfM]\\.|t[.:]/,alias:\"builtin\"},operator:/[=a][.:]|_\\./,conjunction:{pattern:/&(?:\\.:?|:)?|[.:@][.:]?|[!D][.:]|[;dHT]\\.|`:?|[\\^LS]:|\"/,alias:\"variable\"},punctuation:/[()]/};/components/prism-qore.js\u0004qPrism.languages.qore = Prism.languages.extend('clike', {\n\t'comment': {\n\t\tpattern: /(^|[^\\\\])(?:\\/\\*[\\s\\S]*?\\*\\/|(?:\\/\\/|#).*)/,\n\t\tlookbehind: true\n\t},\n\t// Overridden to allow unescaped multi-line strings\n\t'string': {\n\t\tpattern: /(\"|')(?:\\\\[\\s\\S]|(?!\\1)[^\\\\])*\\1/,\n\t\tgreedy: true\n\t},\n\t'keyword': /\\b(?:abstract|any|assert|binary|bool|boolean|break|byte|case|catch|char|class|code|const|continue|data|default|do|double|else|enum|extends|final|finally|float|for|goto|hash|if|implements|import|inherits|instanceof|int|interface|long|my|native|new|nothing|null|object|our|own|private|reference|rethrow|return|short|soft(?:bool|date|float|int|list|number|string)|static|strictfp|string|sub|super|switch|synchronized|this|throw|throws|transient|try|void|volatile|while)\\b/,\n\t'boolean': /\\b(?:false|true)\\b/i,\n\t'function': /\\$?\\b(?!\\d)\\w+(?=\\()/,\n\t'number': /\\b(?:0b[01]+|0x(?:[\\da-f]*\\.)?[\\da-fp\\-]+|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:e\\d+)?[df]|(?:\\d+(?:\\.\\d+)?|\\.\\d+))\\b/i,\n\t'operator': {\n\t\tpattern: /(^|[^.])(?:\\+[+=]?|-[-=]?|[!=](?:==?|~)?|>>?=?|<(?:=>?|<=?)?|&[&=]?|\\|[|=]?|[*\\/%^]=?|[~?])/,\n\t\tlookbehind: true\n\t},\n\t'variable': /\\$(?!\\d)\\w+\\b/\n});\n+/components/prism-icu-message-format.min.js\b\u0006!function(e){function t(e,s){return s<=0?\"[]\":e.replace(/<SELF>/g,(function(){return t(e,s-1)}))}var s=/'[{}:=,](?:[^']|'')*'(?!')/,n={pattern:/''/,greedy:!0,alias:\"operator\"},r={pattern:s,greedy:!0,inside:{escape:n}},a=t(\"\\\\{(?:[^{}']|'(?![{},'])|''|<STR>|<SELF>)*\\\\}\".replace(/<STR>/g,(function(){return s.source})),8),i={pattern:RegExp(a),inside:{message:{pattern:/^(\\{)[\\s\\S]+(?=\\}$)/,lookbehind:!0,inside:null},\"message-delimiter\":{pattern:/./,alias:\"punctuation\"}}};e.languages[\"icu-message-format\"]={argument:{pattern:RegExp(a),greedy:!0,inside:{content:{pattern:/^(\\{)[\\s\\S]+(?=\\}$)/,lookbehind:!0,inside:{\"argument-name\":{pattern:/^(\\s*)[^{}:=,\\s]+/,lookbehind:!0},\"choice-style\":{pattern:/^(\\s*,\\s*choice\\s*,\\s*)\\S(?:[\\s\\S]*\\S)?/,lookbehind:!0,inside:{punctuation:/\\|/,range:{pattern:/^(\\s*)[+-]?(?:\\d+(?:\\.\\d*)?|\\u221e)\\s*[<#\\u2264]/,lookbehind:!0,inside:{operator:/[<#\\u2264]/,number:/\\S+/}},rest:null}},\"plural-style\":{pattern:/^(\\s*,\\s*(?:plural|selectordinal)\\s*,\\s*)\\S(?:[\\s\\S]*\\S)?/,lookbehind:!0,inside:{offset:/^offset:\\s*\\d+/,\"nested-message\":i,selector:{pattern:/=\\d+|[^{}:=,\\s]+/,inside:{keyword:/^(?:few|many|one|other|two|zero)$/}}}},\"select-style\":{pattern:/^(\\s*,\\s*select\\s*,\\s*)\\S(?:[\\s\\S]*\\S)?/,lookbehind:!0,inside:{\"nested-message\":i,selector:{pattern:/[^{}:=,\\s]+/,inside:{keyword:/^other$/}}}},keyword:/\\b(?:choice|plural|select|selectordinal)\\b/,\"arg-type\":{pattern:/\\b(?:date|duration|number|ordinal|spellout|time)\\b/,alias:\"keyword\"},\"arg-skeleton\":{pattern:/(,\\s*)::[^{}:=,\\s]+/,lookbehind:!0},\"arg-style\":{pattern:/(,\\s*)(?:currency|full|integer|long|medium|percent|short)(?=\\s*$)/,lookbehind:!0},\"arg-style-text\":{pattern:RegExp(\"(^\\\\s*,\\\\s*(?=\\\\S))\"+t(\"(?:[^{}']|'[^']*'|\\\\{(?:<SELF>)?\\\\})+\",8)+\"$\"),lookbehind:!0,alias:\"string\"},punctuation:/,/}},\"argument-delimiter\":{pattern:/./,alias:\"operator\"}}},escape:n,string:r},i.inside.message.inside=e.languages[\"icu-message-format\"],e.languages[\"icu-message-format\"].argument.inside.content.inside[\"choice-style\"].inside.rest=e.languages[\"icu-message-format\"]}(Prism);/components/prism-turtle.min.js\u0003Prism.languages.turtle={comment:{pattern:/#.*/,greedy:!0},\"multiline-string\":{pattern:/\"\"\"(?:(?:\"\"?)?(?:[^\"\\\\]|\\\\.))*\"\"\"|'''(?:(?:''?)?(?:[^'\\\\]|\\\\.))*'''/,greedy:!0,alias:\"string\",inside:{comment:/#.*/}},string:{pattern:/\"(?:[^\\\\\"\\r\\n]|\\\\.)*\"|'(?:[^\\\\'\\r\\n]|\\\\.)*'/,greedy:!0},url:{pattern:/<(?:[^\\x00-\\x20<>\"{}|^`\\\\]|\\\\(?:u[\\da-fA-F]{4}|U[\\da-fA-F]{8}))*>/,greedy:!0,inside:{punctuation:/[<>]/}},function:{pattern:/(?:(?![-.\\d\\xB7])[-.\\w\\xB7\\xC0-\\uFFFD]+)?:(?:(?![-.])(?:[-.:\\w\\xC0-\\uFFFD]|%[\\da-f]{2}|\\\\.)+)?/i,inside:{\"local-name\":{pattern:/([^:]*:)[\\s\\S]+/,lookbehind:!0},prefix:{pattern:/[\\s\\S]+/,inside:{punctuation:/:/}}}},number:/[+-]?\\b\\d+(?:\\.\\d*)?(?:e[+-]?\\d+)?/i,punctuation:/[{}.,;()[\\]]|\\^\\^/,boolean:/\\b(?:false|true)\\b/,keyword:[/(?:\\ba|@prefix|@base)\\b|=/,/\\b(?:base|graph|prefix)\\b/i],tag:{pattern:/@[a-z]+(?:-[a-z\\d]+)*/i,inside:{punctuation:/@/}}},Prism.languages.trig=Prism.languages.turtle;/components/prism-scala.js\u0006KPrism.languages.scala = Prism.languages.extend('java', {\n\t'triple-quoted-string': {\n\t\tpattern: /\"\"\"[\\s\\S]*?\"\"\"/,\n\t\tgreedy: true,\n\t\talias: 'string'\n\t},\n\t'string': {\n\t\tpattern: /(\"|')(?:\\\\.|(?!\\1)[^\\\\\\r\\n])*\\1/,\n\t\tgreedy: true\n\t},\n\t'keyword': /<-|=>|\\b(?:abstract|case|catch|class|def|derives|do|else|enum|extends|extension|final|finally|for|forSome|given|if|implicit|import|infix|inline|lazy|match|new|null|object|opaque|open|override|package|private|protected|return|sealed|self|super|this|throw|trait|transparent|try|type|using|val|var|while|with|yield)\\b/,\n\t'number': /\\b0x(?:[\\da-f]*\\.)?[\\da-f]+|(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:e\\d+)?[dfl]?/i,\n\t'builtin': /\\b(?:Any|AnyRef|AnyVal|Boolean|Byte|Char|Double|Float|Int|Long|Nothing|Short|String|Unit)\\b/,\n\t'symbol': /'[^\\d\\s\\\\]\\w*/\n});\n\nPrism.languages.insertBefore('scala', 'triple-quoted-string', {\n\t'string-interpolation': {\n\t\tpattern: /\\b[a-z]\\w*(?:\"\"\"(?:[^$]|\\$(?:[^{]|\\{(?:[^{}]|\\{[^{}]*\\})*\\}))*?\"\"\"|\"(?:[^$\"\\r\\n]|\\$(?:[^{]|\\{(?:[^{}]|\\{[^{}]*\\})*\\}))*\")/i,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'id': {\n\t\t\t\tpattern: /^\\w+/,\n\t\t\t\tgreedy: true,\n\t\t\t\talias: 'function'\n\t\t\t},\n\t\t\t'escape': {\n\t\t\t\tpattern: /\\\\\\$\"|\\$[$\"]/,\n\t\t\t\tgreedy: true,\n\t\t\t\talias: 'symbol'\n\t\t\t},\n\t\t\t'interpolation': {\n\t\t\t\tpattern: /\\$(?:\\w+|\\{(?:[^{}]|\\{[^{}]*\\})*\\})/,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': /^\\$\\{?|\\}$/,\n\t\t\t\t\t'expression': {\n\t\t\t\t\t\tpattern: /[\\s\\S]+/,\n\t\t\t\t\t\tinside: Prism.languages.scala\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t'string': /[\\s\\S]+/\n\t\t}\n\t}\n});\n\ndelete Prism.languages.scala['class-name'];\ndelete Prism.languages.scala['function'];\ndelete Prism.languages.scala['constant'];\n/components/prism-flow.js\u0004K(function (Prism) {\n\tPrism.languages.flow = Prism.languages.extend('javascript', {});\n\n\tPrism.languages.insertBefore('flow', 'keyword', {\n\t\t'type': [\n\t\t\t{\n\t\t\t\tpattern: /\\b(?:[Bb]oolean|Function|[Nn]umber|[Ss]tring|[Ss]ymbol|any|mixed|null|void)\\b/,\n\t\t\t\talias: 'class-name'\n\t\t\t}\n\t\t]\n\t});\n\tPrism.languages.flow['function-variable'].pattern = /(?!\\s)[_$a-z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*=\\s*(?:function\\b|(?:\\([^()]*\\)(?:\\s*:\\s*\\w+)?|(?!\\s)[_$a-z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*)\\s*=>))/i;\n\tdelete Prism.languages.flow['parameter'];\n\n\tPrism.languages.insertBefore('flow', 'operator', {\n\t\t'flow-punctuation': {\n\t\t\tpattern: /\\{\\||\\|\\}/,\n\t\t\talias: 'punctuation'\n\t\t}\n\t});\n\n\tif (!Array.isArray(Prism.languages.flow.keyword)) {\n\t\tPrism.languages.flow.keyword = [Prism.languages.flow.keyword];\n\t}\n\tPrism.languages.flow.keyword.unshift(\n\t\t{\n\t\t\tpattern: /(^|[^$]\\b)(?:Class|declare|opaque|type)\\b(?!\\$)/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^$]\\B)\\$(?:Diff|Enum|Exact|Keys|ObjMap|PropertyType|Record|Shape|Subtype|Supertype|await)\\b(?!\\$)/,\n\t\t\tlookbehind: true\n\t\t}\n\t);\n}(Prism));\n/components/prism-racket.js\u0001Prism.languages.racket = Prism.languages.extend('scheme', {\n\t'lambda-parameter': {\n\t\t// the racket lambda syntax is a lot more complex, so we won't even attempt to capture it.\n\t\t// this will just prevent false positives of the `function` pattern\n\t\tpattern: /([(\\[]lambda\\s+[(\\[])[^()\\[\\]'\\s]+/,\n\t\tlookbehind: true\n\t}\n});\n\nPrism.languages.insertBefore('racket', 'string', {\n\t'lang': {\n\t\tpattern: /^#lang.+/m,\n\t\tgreedy: true,\n\t\talias: 'keyword'\n\t}\n});\n\nPrism.languages.rkt = Prism.languages.racket;\n/components/prism-asmatmel.js\u0007\\Prism.languages.asmatmel = {\n\t'comment': {\n\t\tpattern: /;.*/,\n\t\tgreedy: true\n\t},\n\t'string': {\n\t\tpattern: /([\"'`])(?:\\\\.|(?!\\1)[^\\\\\\r\\n])*\\1/,\n\t\tgreedy: true\n\t},\n\n\t'constant': /\\b(?:PORT[A-Z]|DDR[A-Z]|(?:DD|P)[A-Z](?:\\d|[0-2]\\d|3[01]))\\b/,\n\n\t'directive': {\n\t\tpattern: /\\.\\w+(?= )/,\n\t\talias: 'property'\n\t},\n\t'r-register': {\n\t\tpattern: /\\br(?:\\d|[12]\\d|3[01])\\b/,\n\t\talias: 'variable'\n\t},\n\t'op-code': {\n\t\tpattern: /\\b(?:ADC|ADD|ADIW|AND|ANDI|ASR|BCLR|BLD|BRBC|BRBS|BRCC|BRCS|BREAK|BREQ|BRGE|BRHC|BRHS|BRID|BRIE|BRLO|BRLT|BRMI|BRNE|BRPL|BRSH|BRTC|BRTS|BRVC|BRVS|BSET|BST|CALL|CBI|CBR|CLC|CLH|CLI|CLN|CLR|CLS|CLT|CLV|CLZ|COM|CP|CPC|CPI|CPSE|DEC|DES|EICALL|EIJMP|ELPM|EOR|FMUL|FMULS|FMULSU|ICALL|IJMP|IN|INC|JMP|LAC|LAS|LAT|LD|LD[A-Za-z0-9]|LPM|LSL|LSR|MOV|MOVW|MUL|MULS|MULSU|NEG|NOP|OR|ORI|OUT|POP|PUSH|RCALL|RET|RETI|RJMP|ROL|ROR|SBC|SBCI|SBI|SBIC|SBIS|SBIW|SBR|SBRC|SBRS|SEC|SEH|SEI|SEN|SER|SES|SET|SEV|SEZ|SLEEP|SPM|ST|ST[A-Z0-9]|SUB|SUBI|SWAP|TST|WDR|XCH|adc|add|adiw|and|andi|asr|bclr|bld|brbc|brbs|brcc|brcs|break|breq|brge|brhc|brhs|brid|brie|brlo|brlt|brmi|brne|brpl|brsh|brtc|brts|brvc|brvs|bset|bst|call|cbi|cbr|clc|clh|cli|cln|clr|cls|clt|clv|clz|com|cp|cpc|cpi|cpse|dec|des|eicall|eijmp|elpm|eor|fmul|fmuls|fmulsu|icall|ijmp|in|inc|jmp|lac|las|lat|ld|ld[a-z0-9]|lpm|lsl|lsr|mov|movw|mul|muls|mulsu|neg|nop|or|ori|out|pop|push|rcall|ret|reti|rjmp|rol|ror|sbc|sbci|sbi|sbic|sbis|sbiw|sbr|sbrc|sbrs|sec|seh|sei|sen|ser|ses|set|sev|sez|sleep|spm|st|st[a-zA-Z0-9]|sub|subi|swap|tst|wdr|xch)\\b/,\n\t\talias: 'keyword'\n\t},\n\t'hex-number': {\n\t\tpattern: /#?\\$[\\da-f]{2,4}\\b/i,\n\t\talias: 'number'\n\t},\n\t'binary-number': {\n\t\tpattern: /#?%[01]+\\b/,\n\t\talias: 'number'\n\t},\n\t'decimal-number': {\n\t\tpattern: /#?\\b\\d+\\b/,\n\t\talias: 'number'\n\t},\n\t'register': {\n\t\tpattern: /\\b[acznvshtixy]\\b/i,\n\t\talias: 'variable'\n\t},\n\t'operator': />>=?|<<=?|&[&=]?|\\|[\\|=]?|[-+*/%^!=<>?]=?/,\n\t'punctuation': /[(),:]/\n};\n/components/prism-scheme.js\u0018+(function (Prism) {\n\tPrism.languages.scheme = {\n\t\t// this supports \"normal\" single-line comments:\n\t\t//   ; comment\n\t\t// and (potentially nested) multiline comments:\n\t\t//   #| comment #| nested |# still comment |#\n\t\t// (only 1 level of nesting is supported)\n\t\t'comment': /;.*|#;\\s*(?:\\((?:[^()]|\\([^()]*\\))*\\)|\\[(?:[^\\[\\]]|\\[[^\\[\\]]*\\])*\\])|#\\|(?:[^#|]|#(?!\\|)|\\|(?!#)|#\\|(?:[^#|]|#(?!\\|)|\\|(?!#))*\\|#)*\\|#/,\n\t\t'string': {\n\t\t\tpattern: /\"(?:[^\"\\\\]|\\\\.)*\"/,\n\t\t\tgreedy: true\n\t\t},\n\t\t'symbol': {\n\t\t\tpattern: /'[^()\\[\\]#'\\s]+/,\n\t\t\tgreedy: true\n\t\t},\n\t\t'char': {\n\t\t\tpattern: /#\\\\(?:[ux][a-fA-F\\d]+\\b|[-a-zA-Z]+\\b|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|\\S)/,\n\t\t\tgreedy: true\n\t\t},\n\t\t'lambda-parameter': [\n\t\t\t// https://www.cs.cmu.edu/Groups/AI/html/r4rs/r4rs_6.html#SEC30\n\t\t\t{\n\t\t\t\tpattern: /((?:^|[^'`#])[(\\[]lambda\\s+)(?:[^|()\\[\\]'\\s]+|\\|(?:[^\\\\|]|\\\\.)*\\|)/,\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /((?:^|[^'`#])[(\\[]lambda\\s+[(\\[])[^()\\[\\]']+/,\n\t\t\t\tlookbehind: true\n\t\t\t}\n\t\t],\n\t\t'keyword': {\n\t\t\tpattern: /((?:^|[^'`#])[(\\[])(?:begin|case(?:-lambda)?|cond(?:-expand)?|define(?:-library|-macro|-record-type|-syntax|-values)?|defmacro|delay(?:-force)?|do|else|except|export|guard|if|import|include(?:-ci|-library-declarations)?|lambda|let(?:rec)?(?:-syntax|-values|\\*)?|let\\*-values|only|parameterize|prefix|(?:quasi-?)?quote|rename|set!|syntax-(?:case|rules)|unless|unquote(?:-splicing)?|when)(?=[()\\[\\]\\s]|$)/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'builtin': {\n\t\t\t// all functions of the base library of R7RS plus some of built-ins of R5Rs\n\t\t\tpattern: /((?:^|[^'`#])[(\\[])(?:abs|and|append|apply|assoc|ass[qv]|binary-port\\?|boolean=?\\?|bytevector(?:-append|-copy|-copy!|-length|-u8-ref|-u8-set!|\\?)?|caar|cadr|call-with-(?:current-continuation|port|values)|call\\/cc|car|cdar|cddr|cdr|ceiling|char(?:->integer|-ready\\?|\\?|<\\?|<=\\?|=\\?|>\\?|>=\\?)|close-(?:input-port|output-port|port)|complex\\?|cons|current-(?:error|input|output)-port|denominator|dynamic-wind|eof-object\\??|eq\\?|equal\\?|eqv\\?|error|error-object(?:-irritants|-message|\\?)|eval|even\\?|exact(?:-integer-sqrt|-integer\\?|\\?)?|expt|features|file-error\\?|floor(?:-quotient|-remainder|\\/)?|flush-output-port|for-each|gcd|get-output-(?:bytevector|string)|inexact\\??|input-port(?:-open\\?|\\?)|integer(?:->char|\\?)|lcm|length|list(?:->string|->vector|-copy|-ref|-set!|-tail|\\?)?|make-(?:bytevector|list|parameter|string|vector)|map|max|member|memq|memv|min|modulo|negative\\?|newline|not|null\\?|number(?:->string|\\?)|numerator|odd\\?|open-(?:input|output)-(?:bytevector|string)|or|output-port(?:-open\\?|\\?)|pair\\?|peek-char|peek-u8|port\\?|positive\\?|procedure\\?|quotient|raise|raise-continuable|rational\\?|rationalize|read-(?:bytevector|bytevector!|char|error\\?|line|string|u8)|real\\?|remainder|reverse|round|set-c[ad]r!|square|string(?:->list|->number|->symbol|->utf8|->vector|-append|-copy|-copy!|-fill!|-for-each|-length|-map|-ref|-set!|\\?|<\\?|<=\\?|=\\?|>\\?|>=\\?)?|substring|symbol(?:->string|\\?|=\\?)|syntax-error|textual-port\\?|truncate(?:-quotient|-remainder|\\/)?|u8-ready\\?|utf8->string|values|vector(?:->list|->string|-append|-copy|-copy!|-fill!|-for-each|-length|-map|-ref|-set!|\\?)?|with-exception-handler|write-(?:bytevector|char|string|u8)|zero\\?)(?=[()\\[\\]\\s]|$)/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'operator': {\n\t\t\tpattern: /((?:^|[^'`#])[(\\[])(?:[-+*%/]|[<>]=?|=>?)(?=[()\\[\\]\\s]|$)/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'number': {\n\t\t\t// The number pattern from [the R7RS spec](https://small.r7rs.org/attachment/r7rs.pdf).\n\t\t\t//\n\t\t\t// <number>      := <num 2>|<num 8>|<num 10>|<num 16>\n\t\t\t// <num R>       := <prefix R><complex R>\n\t\t\t// <complex R>   := <real R>(?:@<real R>|<imaginary R>)?|<imaginary R>\n\t\t\t// <imaginary R> := [+-](?:<ureal R>|(?:inf|nan)\\.0)?i\n\t\t\t// <real R>      := [+-]?<ureal R>|[+-](?:inf|nan)\\.0\n\t\t\t// <ureal R>     := <uint R>(?:\\/<uint R>)?\n\t\t\t//                | <decimal R>\n\t\t\t//\n\t\t\t// <decimal 10>  := (?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?\n\t\t\t// <uint R>      := <digit R>+\n\t\t\t// <prefix R>    := <radix R>(?:#[ei])?|(?:#[ei])?<radix R>\n\t\t\t// <radix 2>     := #b\n\t\t\t// <radix 8>     := #o\n\t\t\t// <radix 10>    := (?:#d)?\n\t\t\t// <radix 16>    := #x\n\t\t\t// <digit 2>     := [01]\n\t\t\t// <digit 8>     := [0-7]\n\t\t\t// <digit 10>    := \\d\n\t\t\t// <digit 16>    := [0-9a-f]\n\t\t\t//\n\t\t\t// The problem with this grammar is that the resulting regex is way to complex, so we simplify by grouping all\n\t\t\t// non-decimal bases together. This results in a decimal (dec) and combined binary, octal, and hexadecimal (box)\n\t\t\t// pattern:\n\t\t\tpattern: RegExp(SortedBNF({\n\t\t\t\t'<ureal dec>': /\\d+(?:\\/\\d+)|(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:[esfdl][+-]?\\d+)?/.source,\n\t\t\t\t'<real dec>': /[+-]?<ureal dec>|[+-](?:inf|nan)\\.0/.source,\n\t\t\t\t'<imaginary dec>': /[+-](?:<ureal dec>|(?:inf|nan)\\.0)?i/.source,\n\t\t\t\t'<complex dec>': /<real dec>(?:@<real dec>|<imaginary dec>)?|<imaginary dec>/.source,\n\t\t\t\t'<num dec>': /(?:#d(?:#[ei])?|#[ei](?:#d)?)?<complex dec>/.source,\n\n\t\t\t\t'<ureal box>': /[0-9a-f]+(?:\\/[0-9a-f]+)?/.source,\n\t\t\t\t'<real box>': /[+-]?<ureal box>|[+-](?:inf|nan)\\.0/.source,\n\t\t\t\t'<imaginary box>': /[+-](?:<ureal box>|(?:inf|nan)\\.0)?i/.source,\n\t\t\t\t'<complex box>': /<real box>(?:@<real box>|<imaginary box>)?|<imaginary box>/.source,\n\t\t\t\t'<num box>': /#[box](?:#[ei])?|(?:#[ei])?#[box]<complex box>/.source,\n\n\t\t\t\t'<number>': /(^|[()\\[\\]\\s])(?:<num dec>|<num box>)(?=[()\\[\\]\\s]|$)/.source,\n\t\t\t}), 'i'),\n\t\t\tlookbehind: true\n\t\t},\n\t\t'boolean': {\n\t\t\tpattern: /(^|[()\\[\\]\\s])#(?:[ft]|false|true)(?=[()\\[\\]\\s]|$)/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'function': {\n\t\t\tpattern: /((?:^|[^'`#])[(\\[])(?:[^|()\\[\\]'\\s]+|\\|(?:[^\\\\|]|\\\\.)*\\|)(?=[()\\[\\]\\s]|$)/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'identifier': {\n\t\t\tpattern: /(^|[()\\[\\]\\s])\\|(?:[^\\\\|]|\\\\.)*\\|(?=[()\\[\\]\\s]|$)/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true\n\t\t},\n\t\t'punctuation': /[()\\[\\]']/\n\t};\n\n\t/**\n\t * Given a topologically sorted BNF grammar, this will return the RegExp source of last rule of the grammar.\n\t *\n\t * @param {Record<string, string>} grammar\n\t * @returns {string}\n\t */\n\tfunction SortedBNF(grammar) {\n\t\tfor (var key in grammar) {\n\t\t\tgrammar[key] = grammar[key].replace(/<[\\w\\s]+>/g, function (key) {\n\t\t\t\treturn '(?:' + grammar[key].trim() + ')';\n\t\t\t});\n\t\t}\n\t\t// return the last item\n\t\treturn grammar[key];\n\t}\n\n}(Prism));\n!/components/prism-solidity.min.js\u00045Prism.languages.solidity=Prism.languages.extend(\"clike\",{\"class-name\":{pattern:/(\\b(?:contract|enum|interface|library|new|struct|using)\\s+)(?!\\d)[\\w$]+/,lookbehind:!0},keyword:/\\b(?:_|anonymous|as|assembly|assert|break|calldata|case|constant|constructor|continue|contract|default|delete|do|else|emit|enum|event|external|for|from|function|if|import|indexed|inherited|interface|internal|is|let|library|mapping|memory|modifier|new|payable|pragma|private|public|pure|require|returns?|revert|selfdestruct|solidity|storage|struct|suicide|switch|this|throw|using|var|view|while)\\b/,operator:/=>|->|:=|=:|\\*\\*|\\+\\+|--|\\|\\||&&|<<=?|>>=?|[-+*/%^&|<>!=]=?|[~?]/}),Prism.languages.insertBefore(\"solidity\",\"keyword\",{builtin:/\\b(?:address|bool|byte|u?int(?:8|16|24|32|40|48|56|64|72|80|88|96|104|112|120|128|136|144|152|160|168|176|184|192|200|208|216|224|232|240|248|256)?|string|bytes(?:[1-9]|[12]\\d|3[0-2])?)\\b/}),Prism.languages.insertBefore(\"solidity\",\"number\",{version:{pattern:/([<>]=?|\\^)\\d+\\.\\d+\\.\\d+\\b/,lookbehind:!0,alias:\"number\"}}),Prism.languages.sol=Prism.languages.solidity; /components/prism-mongodb.min.js\r[!function($){var e=[\"$eq\",\"$gt\",\"$gte\",\"$in\",\"$lt\",\"$lte\",\"$ne\",\"$nin\",\"$and\",\"$not\",\"$nor\",\"$or\",\"$exists\",\"$type\",\"$expr\",\"$jsonSchema\",\"$mod\",\"$regex\",\"$text\",\"$where\",\"$geoIntersects\",\"$geoWithin\",\"$near\",\"$nearSphere\",\"$all\",\"$elemMatch\",\"$size\",\"$bitsAllClear\",\"$bitsAllSet\",\"$bitsAnyClear\",\"$bitsAnySet\",\"$comment\",\"$elemMatch\",\"$meta\",\"$slice\",\"$currentDate\",\"$inc\",\"$min\",\"$max\",\"$mul\",\"$rename\",\"$set\",\"$setOnInsert\",\"$unset\",\"$addToSet\",\"$pop\",\"$pull\",\"$push\",\"$pullAll\",\"$each\",\"$position\",\"$slice\",\"$sort\",\"$bit\",\"$addFields\",\"$bucket\",\"$bucketAuto\",\"$collStats\",\"$count\",\"$currentOp\",\"$facet\",\"$geoNear\",\"$graphLookup\",\"$group\",\"$indexStats\",\"$limit\",\"$listLocalSessions\",\"$listSessions\",\"$lookup\",\"$match\",\"$merge\",\"$out\",\"$planCacheStats\",\"$project\",\"$redact\",\"$replaceRoot\",\"$replaceWith\",\"$sample\",\"$set\",\"$skip\",\"$sort\",\"$sortByCount\",\"$unionWith\",\"$unset\",\"$unwind\",\"$setWindowFields\",\"$abs\",\"$accumulator\",\"$acos\",\"$acosh\",\"$add\",\"$addToSet\",\"$allElementsTrue\",\"$and\",\"$anyElementTrue\",\"$arrayElemAt\",\"$arrayToObject\",\"$asin\",\"$asinh\",\"$atan\",\"$atan2\",\"$atanh\",\"$avg\",\"$binarySize\",\"$bsonSize\",\"$ceil\",\"$cmp\",\"$concat\",\"$concatArrays\",\"$cond\",\"$convert\",\"$cos\",\"$dateFromParts\",\"$dateToParts\",\"$dateFromString\",\"$dateToString\",\"$dayOfMonth\",\"$dayOfWeek\",\"$dayOfYear\",\"$degreesToRadians\",\"$divide\",\"$eq\",\"$exp\",\"$filter\",\"$first\",\"$floor\",\"$function\",\"$gt\",\"$gte\",\"$hour\",\"$ifNull\",\"$in\",\"$indexOfArray\",\"$indexOfBytes\",\"$indexOfCP\",\"$isArray\",\"$isNumber\",\"$isoDayOfWeek\",\"$isoWeek\",\"$isoWeekYear\",\"$last\",\"$last\",\"$let\",\"$literal\",\"$ln\",\"$log\",\"$log10\",\"$lt\",\"$lte\",\"$ltrim\",\"$map\",\"$max\",\"$mergeObjects\",\"$meta\",\"$min\",\"$millisecond\",\"$minute\",\"$mod\",\"$month\",\"$multiply\",\"$ne\",\"$not\",\"$objectToArray\",\"$or\",\"$pow\",\"$push\",\"$radiansToDegrees\",\"$range\",\"$reduce\",\"$regexFind\",\"$regexFindAll\",\"$regexMatch\",\"$replaceOne\",\"$replaceAll\",\"$reverseArray\",\"$round\",\"$rtrim\",\"$second\",\"$setDifference\",\"$setEquals\",\"$setIntersection\",\"$setIsSubset\",\"$setUnion\",\"$size\",\"$sin\",\"$slice\",\"$split\",\"$sqrt\",\"$stdDevPop\",\"$stdDevSamp\",\"$strcasecmp\",\"$strLenBytes\",\"$strLenCP\",\"$substr\",\"$substrBytes\",\"$substrCP\",\"$subtract\",\"$sum\",\"$switch\",\"$tan\",\"$toBool\",\"$toDate\",\"$toDecimal\",\"$toDouble\",\"$toInt\",\"$toLong\",\"$toObjectId\",\"$toString\",\"$toLower\",\"$toUpper\",\"$trim\",\"$trunc\",\"$type\",\"$week\",\"$year\",\"$zip\",\"$count\",\"$dateAdd\",\"$dateDiff\",\"$dateSubtract\",\"$dateTrunc\",\"$getField\",\"$rand\",\"$sampleRate\",\"$setField\",\"$unsetField\",\"$comment\",\"$explain\",\"$hint\",\"$max\",\"$maxTimeMS\",\"$min\",\"$orderby\",\"$query\",\"$returnKey\",\"$showDiskLoc\",\"$natural\"],t=\"(?:\"+(e=e.map((function($){return $.replace(\"$\",\"\\\\$\")}))).join(\"|\")+\")\\\\b\";$.languages.mongodb=$.languages.extend(\"javascript\",{}),$.languages.insertBefore(\"mongodb\",\"string\",{property:{pattern:/(?:([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1|(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*)(?=\\s*:)/,greedy:!0,inside:{keyword:RegExp(\"^(['\\\"])?\"+t+\"(?:\\\\1)?$\")}}}),$.languages.mongodb.string.inside={url:{pattern:/https?:\\/\\/[-\\w@:%.+~#=]{1,256}\\.[a-z0-9()]{1,6}\\b[-\\w()@:%+.~#?&/=]*/i,greedy:!0},entity:{pattern:/\\b(?:(?:[01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.){3}(?:[01]?\\d\\d?|2[0-4]\\d|25[0-5])\\b/,greedy:!0}},$.languages.insertBefore(\"mongodb\",\"constant\",{builtin:{pattern:RegExp(\"\\\\b(?:\"+[\"ObjectId\",\"Code\",\"BinData\",\"DBRef\",\"Timestamp\",\"NumberLong\",\"NumberDecimal\",\"MaxKey\",\"MinKey\",\"RegExp\",\"ISODate\",\"UUID\"].join(\"|\")+\")\\\\b\"),alias:\"keyword\"}})}(Prism);/components/prism-mel.min.js\u0003cPrism.languages.mel={comment:{pattern:/\\/\\/.*|\\/\\*[\\s\\S]*?\\*\\//,greedy:!0},code:{pattern:/`(?:\\\\.|[^\\\\`])*`/,greedy:!0,alias:\"italic\",inside:{delimiter:{pattern:/^`|`$/,alias:\"punctuation\"},statement:{pattern:/[\\s\\S]+/,inside:null}}},string:{pattern:/\"(?:\\\\.|[^\\\\\"\\r\\n])*\"/,greedy:!0},variable:/\\$\\w+/,number:/\\b0x[\\da-fA-F]+\\b|\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+/,flag:{pattern:/-[^\\d\\W]\\w*/,alias:\"operator\"},keyword:/\\b(?:break|case|continue|default|do|else|float|for|global|if|in|int|matrix|proc|return|string|switch|vector|while)\\b/,function:{pattern:/((?:^|[{;])[ \\t]*)[a-z_]\\w*\\b(?!\\s*(?:\\.(?!\\.)|[[{=]))|\\b[a-z_]\\w*(?=[ \\t]*\\()/im,lookbehind:!0,greedy:!0},\"tensor-punctuation\":{pattern:/<<|>>/,alias:\"punctuation\"},operator:/\\+[+=]?|-[-=]?|&&|\\|\\||[<>]=?|[*\\/!=]=?|[%^]/,punctuation:/[.,:;?\\[\\](){}]/},Prism.languages.mel.code.inside.statement.inside=Prism.languages.mel;/components/prism-openqasm.js\u0003// https://qiskit.github.io/openqasm/grammar/index.html\n\nPrism.languages.openqasm = {\n\t'comment': /\\/\\*[\\s\\S]*?\\*\\/|\\/\\/.*/,\n\t'string': {\n\t\tpattern: /\"[^\"\\r\\n\\t]*\"|'[^'\\r\\n\\t]*'/,\n\t\tgreedy: true\n\t},\n\n\t'keyword': /\\b(?:CX|OPENQASM|U|barrier|boxas|boxto|break|const|continue|ctrl|def|defcal|defcalgrammar|delay|else|end|for|gate|gphase|if|in|include|inv|kernel|lengthof|let|measure|pow|reset|return|rotary|stretchinf|while)\\b|#pragma\\b/,\n\t'class-name': /\\b(?:angle|bit|bool|creg|fixed|float|int|length|qreg|qubit|stretch|uint)\\b/,\n\t'function': /\\b(?:cos|exp|ln|popcount|rotl|rotr|sin|sqrt|tan)\\b(?=\\s*\\()/,\n\n\t'constant': /\\b(?:euler|pi|tau)\\b|π|𝜏|ℇ/,\n\t'number': {\n\t\tpattern: /(^|[^.\\w$])(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?(?:dt|ns|us|µs|ms|s)?/i,\n\t\tlookbehind: true\n\t},\n\t'operator': /->|>>=?|<<=?|&&|\\|\\||\\+\\+|--|[!=<>&|~^+\\-*/%]=?|@/,\n\t'punctuation': /[(){}\\[\\];,:.]/\n};\n\nPrism.languages.qasm = Prism.languages.openqasm;\n/components/prism-abnf.js\u0004(function (Prism) {\n\n\tvar coreRules = '(?:ALPHA|BIT|CHAR|CR|CRLF|CTL|DIGIT|DQUOTE|HEXDIG|HTAB|LF|LWSP|OCTET|SP|VCHAR|WSP)';\n\n\tPrism.languages.abnf = {\n\t\t'comment': /;.*/,\n\t\t'string': {\n\t\t\tpattern: /(?:%[is])?\"[^\"\\n\\r]*\"/,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'punctuation': /^%[is]/\n\t\t\t}\n\t\t},\n\t\t'range': {\n\t\t\tpattern: /%(?:b[01]+-[01]+|d\\d+-\\d+|x[A-F\\d]+-[A-F\\d]+)/i,\n\t\t\talias: 'number'\n\t\t},\n\t\t'terminal': {\n\t\t\tpattern: /%(?:b[01]+(?:\\.[01]+)*|d\\d+(?:\\.\\d+)*|x[A-F\\d]+(?:\\.[A-F\\d]+)*)/i,\n\t\t\talias: 'number'\n\t\t},\n\t\t'repetition': {\n\t\t\tpattern: /(^|[^\\w-])(?:\\d*\\*\\d*|\\d+)/,\n\t\t\tlookbehind: true,\n\t\t\talias: 'operator'\n\t\t},\n\t\t'definition': {\n\t\t\tpattern: /(^[ \\t]*)(?:[a-z][\\w-]*|<[^<>\\r\\n]*>)(?=\\s*=)/m,\n\t\t\tlookbehind: true,\n\t\t\talias: 'keyword',\n\t\t\tinside: {\n\t\t\t\t'punctuation': /<|>/\n\t\t\t}\n\t\t},\n\t\t'core-rule': {\n\t\t\tpattern: RegExp('(?:(^|[^<\\\\w-])' + coreRules + '|<' + coreRules + '>)(?![\\\\w-])', 'i'),\n\t\t\tlookbehind: true,\n\t\t\talias: ['rule', 'constant'],\n\t\t\tinside: {\n\t\t\t\t'punctuation': /<|>/\n\t\t\t}\n\t\t},\n\t\t'rule': {\n\t\t\tpattern: /(^|[^<\\w-])[a-z][\\w-]*|<[^<>\\r\\n]*>/i,\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'punctuation': /<|>/\n\t\t\t}\n\t\t},\n\t\t'operator': /=\\/?|\\//,\n\t\t'punctuation': /[()\\[\\]]/\n\t};\n\n}(Prism));\n/components/prism-birb.min.js\u0002EPrism.languages.birb=Prism.languages.extend(\"clike\",{string:{pattern:/r?(\"|')(?:\\\\.|(?!\\1)[^\\\\])*\\1/,greedy:!0},\"class-name\":[/\\b[A-Z](?:[\\d_]*[a-zA-Z]\\w*)?\\b/,/\\b(?:[A-Z]\\w*|(?!(?:var|void)\\b)[a-z]\\w*)(?=\\s+\\w+\\s*[;,=()])/],keyword:/\\b(?:assert|break|case|class|const|default|else|enum|final|follows|for|grab|if|nest|new|next|noSeeb|return|static|switch|throw|var|void|while)\\b/,operator:/\\+\\+|--|&&|\\|\\||<<=?|>>=?|~(?:\\/=?)?|[+\\-*\\/%&^|=!<>]=?|\\?|:/,variable:/\\b[a-z_]\\w*\\b/}),Prism.languages.insertBefore(\"birb\",\"function\",{metadata:{pattern:/<\\w+>/,greedy:!0,alias:\"symbol\"}});/components/prism-bro.min.js\u0004YPrism.languages.bro={comment:{pattern:/(^|[^\\\\$])#.*/,lookbehind:!0,inside:{italic:/\\b(?:FIXME|TODO|XXX)\\b/}},string:{pattern:/([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1/,greedy:!0},boolean:/\\b[TF]\\b/,function:{pattern:/(\\b(?:event|function|hook)[ \\t]+)\\w+(?:::\\w+)?/,lookbehind:!0},builtin:/(?:@(?:load(?:-(?:plugin|sigs))?|unload|prefixes|ifn?def|else|(?:end)?if|DIR|FILENAME))|(?:&?(?:add_func|create_expire|default|delete_func|encrypt|error_handler|expire_func|group|log|mergeable|optional|persistent|priority|raw_output|read_expire|redef|rotate_interval|rotate_size|synchronized|type_column|write_expire))/,constant:{pattern:/(\\bconst[ \\t]+)\\w+/i,lookbehind:!0},keyword:/\\b(?:add|addr|alarm|any|bool|break|const|continue|count|delete|double|else|enum|event|export|file|for|function|global|hook|if|in|int|interval|local|module|next|of|opaque|pattern|port|print|record|return|schedule|set|string|subnet|table|time|timeout|using|vector|when)\\b/,operator:/--?|\\+\\+?|!=?=?|<=?|>=?|==?=?|&&|\\|\\|?|\\?|\\*|\\/|~|\\^|%/,number:/\\b0x[\\da-f]+\\b|(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:e[+-]?\\d+)?/i,punctuation:/[{}[\\];(),.:]/};/components/prism-matlab.min.js\u0001Prism.languages.matlab={comment:[/%\\{[\\s\\S]*?\\}%/,/%.+/],string:{pattern:/\\B'(?:''|[^'\\r\\n])*'/,greedy:!0},number:/(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:[eE][+-]?\\d+)?(?:[ij])?|\\b[ij]\\b/,keyword:/\\b(?:NaN|break|case|catch|continue|else|elseif|end|for|function|if|inf|otherwise|parfor|pause|pi|return|switch|try|while)\\b/,function:/\\b(?!\\d)\\w+(?=\\s*\\()/,operator:/\\.?[*^\\/\\\\']|[+\\-:@]|[<>=~]=?|&&?|\\|\\|?/,punctuation:/\\.{3}|[.,;\\[\\](){}!]/};/LICENSE\u0004*MIT LICENSE\n\nCopyright (c) 2012 Lea Verou\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n&/components/prism-solution-file.min.js\u0002!function(n){var t={pattern:/\\{[\\da-f]{8}-[\\da-f]{4}-[\\da-f]{4}-[\\da-f]{4}-[\\da-f]{12}\\}/i,alias:\"constant\",inside:{punctuation:/[{}]/}};n.languages[\"solution-file\"]={comment:{pattern:/#.*/,greedy:!0},string:{pattern:/\"[^\"\\r\\n]*\"|'[^'\\r\\n]*'/,greedy:!0,inside:{guid:t}},object:{pattern:/^([ \\t]*)(?:([A-Z]\\w*)\\b(?=.*(?:\\r\\n?|\\n)(?:\\1[ \\t].*(?:\\r\\n?|\\n))*\\1End\\2(?=[ \\t]*$))|End[A-Z]\\w*(?=[ \\t]*$))/m,lookbehind:!0,greedy:!0,alias:\"keyword\"},property:{pattern:/^([ \\t]*)(?!\\s)[^\\r\\n\"#=()]*[^\\s\"#=()](?=\\s*=)/m,lookbehind:!0,inside:{guid:t}},guid:t,number:/\\b\\d+(?:\\.\\d+)*\\b/,boolean:/\\b(?:FALSE|TRUE)\\b/,operator:/=/,punctuation:/[(),]/},n.languages.sln=n.languages[\"solution-file\"]}(Prism);/components/prism-basic.js\u0007nPrism.languages.basic = {\n\t'comment': {\n\t\tpattern: /(?:!|REM\\b).+/i,\n\t\tinside: {\n\t\t\t'keyword': /^REM/i\n\t\t}\n\t},\n\t'string': {\n\t\tpattern: /\"(?:\"\"|[!#$%&'()*,\\/:;<=>?^\\w +\\-.])*\"/,\n\t\tgreedy: true\n\t},\n\t'number': /(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:E[+-]?\\d+)?/i,\n\t'keyword': /\\b(?:AS|BEEP|BLOAD|BSAVE|CALL(?: ABSOLUTE)?|CASE|CHAIN|CHDIR|CLEAR|CLOSE|CLS|COM|COMMON|CONST|DATA|DECLARE|DEF(?: FN| SEG|DBL|INT|LNG|SNG|STR)|DIM|DO|DOUBLE|ELSE|ELSEIF|END|ENVIRON|ERASE|ERROR|EXIT|FIELD|FILES|FOR|FUNCTION|GET|GOSUB|GOTO|IF|INPUT|INTEGER|IOCTL|KEY|KILL|LINE INPUT|LOCATE|LOCK|LONG|LOOP|LSET|MKDIR|NAME|NEXT|OFF|ON(?: COM| ERROR| KEY| TIMER)?|OPEN|OPTION BASE|OUT|POKE|PUT|READ|REDIM|REM|RESTORE|RESUME|RETURN|RMDIR|RSET|RUN|SELECT CASE|SHARED|SHELL|SINGLE|SLEEP|STATIC|STEP|STOP|STRING|SUB|SWAP|SYSTEM|THEN|TIMER|TO|TROFF|TRON|TYPE|UNLOCK|UNTIL|USING|VIEW PRINT|WAIT|WEND|WHILE|WRITE)(?:\\$|\\b)/i,\n\t'function': /\\b(?:ABS|ACCESS|ACOS|ANGLE|AREA|ARITHMETIC|ARRAY|ASIN|ASK|AT|ATN|BASE|BEGIN|BREAK|CAUSE|CEIL|CHR|CLIP|COLLATE|COLOR|CON|COS|COSH|COT|CSC|DATE|DATUM|DEBUG|DECIMAL|DEF|DEG|DEGREES|DELETE|DET|DEVICE|DISPLAY|DOT|ELAPSED|EPS|ERASABLE|EXLINE|EXP|EXTERNAL|EXTYPE|FILETYPE|FIXED|FP|GO|GRAPH|HANDLER|IDN|IMAGE|IN|INT|INTERNAL|IP|IS|KEYED|LBOUND|LCASE|LEFT|LEN|LENGTH|LET|LINE|LINES|LOG|LOG10|LOG2|LTRIM|MARGIN|MAT|MAX|MAXNUM|MID|MIN|MISSING|MOD|NATIVE|NUL|NUMERIC|OF|OPTION|ORD|ORGANIZATION|OUTIN|OUTPUT|PI|POINT|POINTER|POINTS|POS|PRINT|PROGRAM|PROMPT|RAD|RADIANS|RANDOMIZE|RECORD|RECSIZE|RECTYPE|RELATIVE|REMAINDER|REPEAT|REST|RETRY|REWRITE|RIGHT|RND|ROUND|RTRIM|SAME|SEC|SELECT|SEQUENTIAL|SET|SETTER|SGN|SIN|SINH|SIZE|SKIP|SQR|STANDARD|STATUS|STR|STREAM|STYLE|TAB|TAN|TANH|TEMPLATE|TEXT|THERE|TIME|TIMEOUT|TRACE|TRANSFORM|TRUNCATE|UBOUND|UCASE|USE|VAL|VARIABLE|VIEWPORT|WHEN|WINDOW|WITH|ZER|ZONEWIDTH)(?:\\$|\\b)/i,\n\t'operator': /<[=>]?|>=?|[+\\-*\\/^=&]|\\b(?:AND|EQV|IMP|NOT|OR|XOR)\\b/i,\n\t'punctuation': /[,;:()]/\n};\n/components/prism-mizar.js\u0004FPrism.languages.mizar = {\n\t'comment': /::.+/,\n\t'keyword': /@proof\\b|\\b(?:according|aggregate|all|and|antonym|are|as|associativity|assume|asymmetry|attr|be|begin|being|by|canceled|case|cases|clusters?|coherence|commutativity|compatibility|connectedness|consider|consistency|constructors|contradiction|correctness|def|deffunc|define|definitions?|defpred|do|does|end|environ|equals|ex|exactly|existence|for|from|func|given|hence|hereby|holds|idempotence|identity|iff?|implies|involutiveness|irreflexivity|is|it|let|means|mode|non|not|notations?|now|of|or|otherwise|over|per|pred|prefix|projectivity|proof|provided|qua|reconsider|redefine|reduce|reducibility|reflexivity|registrations?|requirements|reserve|sch|schemes?|section|selector|set|sethood|st|struct|such|suppose|symmetry|synonym|take|that|the|then|theorems?|thesis|thus|to|transitivity|uniqueness|vocabular(?:ies|y)|when|where|with|wrt)\\b/,\n\t'parameter': {\n\t\tpattern: /\\$(?:10|\\d)/,\n\t\talias: 'variable'\n\t},\n\t'variable': /\\b\\w+(?=:)/,\n\t'number': /(?:\\b|-)\\d+\\b/,\n\t'operator': /\\.\\.\\.|->|&|\\.?=/,\n\t'punctuation': /\\(#|#\\)|[,:;\\[\\](){}]/\n};\n/components/prism-rescript.js\u0007:Prism.languages.rescript = {\n\t'comment': {\n\t\tpattern: /\\/\\/.*|\\/\\*[\\s\\S]*?(?:\\*\\/|$)/,\n\t\tgreedy: true\n\t},\n\t'char': { pattern: /'(?:[^\\r\\n\\\\]|\\\\(?:.|\\w+))'/, greedy: true },\n\t'string': {\n\t\tpattern: /\"(?:\\\\(?:\\r\\n|[\\s\\S])|[^\\\\\\r\\n\"])*\"/,\n\t\tgreedy: true\n\t},\n\t'class-name': /\\b[A-Z]\\w*|@[a-z.]*|#[A-Za-z]\\w*|#\\d/,\n\t'function': {\n\t\tpattern: /[a-zA-Z]\\w*(?=\\()|(\\.)[a-z]\\w*/,\n\t\tlookbehind: true,\n\t},\n\t'number': /(?:\\b0x(?:[\\da-f]+(?:\\.[\\da-f]*)?|\\.[\\da-f]+)(?:p[+-]?\\d+)?|(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:e[+-]?\\d+)?)[ful]{0,4}/i,\n\t'boolean': /\\b(?:false|true)\\b/,\n\t'attr-value': /[A-Za-z]\\w*(?==)/,\n\t'constant': {\n\t\tpattern: /(\\btype\\s+)[a-z]\\w*/,\n\t\tlookbehind: true\n\t},\n\t'tag': {\n\t\tpattern: /(<)[a-z]\\w*|(?:<\\/)[a-z]\\w*/,\n\t\tlookbehind: true,\n\t\tinside: {\n\t\t\t'operator': /<|>|\\//,\n\t\t},\n\t},\n\t'keyword': /\\b(?:and|as|assert|begin|bool|class|constraint|do|done|downto|else|end|exception|external|float|for|fun|function|if|in|include|inherit|initializer|int|lazy|let|method|module|mutable|new|nonrec|object|of|open|or|private|rec|string|switch|then|to|try|type|when|while|with)\\b/,\n\t'operator': /\\.{3}|:[:=]?|\\|>|->|=(?:==?|>)?|<=?|>=?|[|^?'#!~`]|[+\\-*\\/]\\.?|\\b(?:asr|land|lor|lsl|lsr|lxor|mod)\\b/,\n\t'punctuation': /[(){}[\\],;.]/\n};\n\nPrism.languages.insertBefore('rescript', 'string', {\n\t'template-string': {\n\t\tpattern: /`(?:\\\\[\\s\\S]|\\$\\{(?:[^{}]|\\{(?:[^{}]|\\{[^}]*\\})*\\})+\\}|(?!\\$\\{)[^\\\\`])*`/,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'template-punctuation': {\n\t\t\t\tpattern: /^`|`$/,\n\t\t\t\talias: 'string'\n\t\t\t},\n\t\t\t'interpolation': {\n\t\t\t\tpattern: /((?:^|[^\\\\])(?:\\\\{2})*)\\$\\{(?:[^{}]|\\{(?:[^{}]|\\{[^}]*\\})*\\})+\\}/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'interpolation-punctuation': {\n\t\t\t\t\t\tpattern: /^\\$\\{|\\}$/,\n\t\t\t\t\t\talias: 'tag'\n\t\t\t\t\t},\n\t\t\t\t\trest: Prism.languages.rescript\n\t\t\t\t}\n\t\t\t},\n\t\t\t'string': /[\\s\\S]+/\n\t\t}\n\t},\n});\n\nPrism.languages.res = Prism.languages.rescript;\n/themes/prism-twilight.min.css\tcode[class*=language-],pre[class*=language-]{color:#fff;background:0 0;font-family:Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;font-size:1em;text-align:left;text-shadow:0 -.1em .2em #000;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}:not(pre)>code[class*=language-],pre[class*=language-]{background:#141414}pre[class*=language-]{border-radius:.5em;border:.3em solid #545454;box-shadow:1px 1px .5em #000 inset;margin:.5em 0;overflow:auto;padding:1em}pre[class*=language-]::-moz-selection{background:#27292a}pre[class*=language-]::selection{background:#27292a}code[class*=language-] ::-moz-selection,code[class*=language-]::-moz-selection,pre[class*=language-] ::-moz-selection,pre[class*=language-]::-moz-selection{text-shadow:none;background:hsla(0,0%,93%,.15)}code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection,pre[class*=language-]::selection{text-shadow:none;background:hsla(0,0%,93%,.15)}:not(pre)>code[class*=language-]{border-radius:.3em;border:.13em solid #545454;box-shadow:1px 1px .3em -.1em #000 inset;padding:.15em .2em .05em;white-space:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#777}.token.punctuation{opacity:.7}.token.namespace{opacity:.7}.token.boolean,.token.deleted,.token.number,.token.tag{color:#ce6849}.token.builtin,.token.constant,.token.keyword,.token.property,.token.selector,.token.symbol{color:#f9ed99}.language-css .token.string,.style .token.string,.token.attr-name,.token.attr-value,.token.char,.token.entity,.token.inserted,.token.operator,.token.string,.token.url,.token.variable{color:#909e6a}.token.atrule{color:#7385a5}.token.important,.token.regex{color:#e8c062}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.language-markup .token.attr-name,.language-markup .token.punctuation,.language-markup .token.tag{color:#ac885c}.token{position:relative;z-index:1}.line-highlight.line-highlight{background:hsla(0,0%,33%,.25);background:linear-gradient(to right,hsla(0,0%,33%,.1) 70%,hsla(0,0%,33%,0));border-bottom:1px dashed #545454;border-top:1px dashed #545454;margin-top:.75em;z-index:0}.line-highlight.line-highlight:before,.line-highlight.line-highlight[data-end]:after{background-color:#8693a6;color:#f4f1ef}/components/prism-concurnas.js\bxPrism.languages.concurnas = {\n\t'comment': {\n\t\tpattern: /(^|[^\\\\])(?:\\/\\*[\\s\\S]*?(?:\\*\\/|$)|\\/\\/.*)/,\n\t\tlookbehind: true,\n\t\tgreedy: true\n\t},\n\t'langext': {\n\t\tpattern: /\\b\\w+\\s*\\|\\|[\\s\\S]+?\\|\\|/,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'class-name': /^\\w+/,\n\t\t\t'string': {\n\t\t\t\tpattern: /(^\\s*\\|\\|)[\\s\\S]+(?=\\|\\|$)/,\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\t'punctuation': /\\|\\|/\n\t\t}\n\t},\n\t'function': {\n\t\tpattern: /((?:^|\\s)def[ \\t]+)[a-zA-Z_]\\w*(?=\\s*\\()/,\n\t\tlookbehind: true\n\t},\n\t'keyword': /\\b(?:abstract|actor|also|annotation|assert|async|await|bool|boolean|break|byte|case|catch|changed|char|class|closed|constant|continue|def|default|del|double|elif|else|enum|every|extends|false|finally|float|for|from|global|gpudef|gpukernel|if|import|in|init|inject|int|lambda|local|long|loop|match|new|nodefault|null|of|onchange|open|out|override|package|parfor|parforsync|post|pre|private|protected|provide|provider|public|return|shared|short|single|size_t|sizeof|super|sync|this|throw|trait|trans|transient|true|try|typedef|unchecked|using|val|var|void|while|with)\\b/,\n\t'boolean': /\\b(?:false|true)\\b/,\n\t'number': /\\b0b[01][01_]*L?\\b|\\b0x(?:[\\da-f_]*\\.)?[\\da-f_p+-]+\\b|(?:\\b\\d[\\d_]*(?:\\.[\\d_]*)?|\\B\\.\\d[\\d_]*)(?:e[+-]?\\d[\\d_]*)?[dfls]?/i,\n\t'punctuation': /[{}[\\];(),.:]/,\n\t'operator': /<==|>==|=>|->|<-|<>|&==|&<>|\\?:?|\\.\\?|\\+\\+|--|[-+*/=<>]=?|[!^~]|\\b(?:and|as|band|bor|bxor|comp|is|isnot|mod|or)\\b=?/,\n\t'annotation': {\n\t\tpattern: /@(?:\\w+:)?(?:\\w+|\\[[^\\]]+\\])?/,\n\t\talias: 'builtin'\n\t}\n};\n\nPrism.languages.insertBefore('concurnas', 'langext', {\n\t'regex-literal': {\n\t\tpattern: /\\br(\"|')(?:\\\\.|(?!\\1)[^\\\\\\r\\n])*\\1/,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'interpolation': {\n\t\t\t\tpattern: /((?:^|[^\\\\])(?:\\\\{2})*)\\{(?:[^{}]|\\{(?:[^{}]|\\{[^}]*\\})*\\})+\\}/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: Prism.languages.concurnas\n\t\t\t},\n\t\t\t'regex': /[\\s\\S]+/\n\t\t}\n\t},\n\t'string-literal': {\n\t\tpattern: /(?:\\B|\\bs)(\"|')(?:\\\\.|(?!\\1)[^\\\\\\r\\n])*\\1/,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'interpolation': {\n\t\t\t\tpattern: /((?:^|[^\\\\])(?:\\\\{2})*)\\{(?:[^{}]|\\{(?:[^{}]|\\{[^}]*\\})*\\})+\\}/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: Prism.languages.concurnas\n\t\t\t},\n\t\t\t'string': /[\\s\\S]+/\n\t\t}\n\t}\n});\n\nPrism.languages.conc = Prism.languages.concurnas;\n+/plugins/match-braces/prism-match-braces.js\u0013((function () {\n\n\tif (typeof Prism === 'undefined' || typeof document === 'undefined') {\n\t\treturn;\n\t}\n\n\tfunction mapClassName(name) {\n\t\tvar customClass = Prism.plugins.customClass;\n\t\tif (customClass) {\n\t\t\treturn customClass.apply(name, 'none');\n\t\t} else {\n\t\t\treturn name;\n\t\t}\n\t}\n\n\tvar PARTNER = {\n\t\t'(': ')',\n\t\t'[': ']',\n\t\t'{': '}',\n\t};\n\n\t// The names for brace types.\n\t// These names have two purposes: 1) they can be used for styling and 2) they are used to pair braces. Only braces\n\t// of the same type are paired.\n\tvar NAMES = {\n\t\t'(': 'brace-round',\n\t\t'[': 'brace-square',\n\t\t'{': 'brace-curly',\n\t};\n\n\t// A map for brace aliases.\n\t// This is useful for when some braces have a prefix/suffix as part of the punctuation token.\n\tvar BRACE_ALIAS_MAP = {\n\t\t'${': '{', // JS template punctuation (e.g. `foo ${bar + 1}`)\n\t};\n\n\tvar LEVEL_WARP = 12;\n\n\tvar pairIdCounter = 0;\n\n\tvar BRACE_ID_PATTERN = /^(pair-\\d+-)(close|open)$/;\n\n\t/**\n\t * Returns the brace partner given one brace of a brace pair.\n\t *\n\t * @param {HTMLElement} brace\n\t * @returns {HTMLElement}\n\t */\n\tfunction getPartnerBrace(brace) {\n\t\tvar match = BRACE_ID_PATTERN.exec(brace.id);\n\t\treturn document.querySelector('#' + match[1] + (match[2] == 'open' ? 'close' : 'open'));\n\t}\n\n\t/**\n\t * @this {HTMLElement}\n\t */\n\tfunction hoverBrace() {\n\t\tif (!Prism.util.isActive(this, 'brace-hover', true)) {\n\t\t\treturn;\n\t\t}\n\n\t\t[this, getPartnerBrace(this)].forEach(function (e) {\n\t\t\te.classList.add(mapClassName('brace-hover'));\n\t\t});\n\t}\n\t/**\n\t * @this {HTMLElement}\n\t */\n\tfunction leaveBrace() {\n\t\t[this, getPartnerBrace(this)].forEach(function (e) {\n\t\t\te.classList.remove(mapClassName('brace-hover'));\n\t\t});\n\t}\n\t/**\n\t * @this {HTMLElement}\n\t */\n\tfunction clickBrace() {\n\t\tif (!Prism.util.isActive(this, 'brace-select', true)) {\n\t\t\treturn;\n\t\t}\n\n\t\t[this, getPartnerBrace(this)].forEach(function (e) {\n\t\t\te.classList.add(mapClassName('brace-selected'));\n\t\t});\n\t}\n\n\tPrism.hooks.add('complete', function (env) {\n\n\t\t/** @type {HTMLElement} */\n\t\tvar code = env.element;\n\t\tvar pre = code.parentElement;\n\n\t\tif (!pre || pre.tagName != 'PRE') {\n\t\t\treturn;\n\t\t}\n\n\t\t// find the braces to match\n\t\t/** @type {string[]} */\n\t\tvar toMatch = [];\n\t\tif (Prism.util.isActive(code, 'match-braces')) {\n\t\t\ttoMatch.push('(', '[', '{');\n\t\t}\n\n\t\tif (toMatch.length == 0) {\n\t\t\t// nothing to match\n\t\t\treturn;\n\t\t}\n\n\t\tif (!pre.__listenerAdded) {\n\t\t\t// code blocks might be highlighted more than once\n\t\t\tpre.addEventListener('mousedown', function removeBraceSelected() {\n\t\t\t\t// the code element might have been replaced\n\t\t\t\tvar code = pre.querySelector('code');\n\t\t\t\tvar className = mapClassName('brace-selected');\n\t\t\t\tArray.prototype.slice.call(code.querySelectorAll('.' + className)).forEach(function (e) {\n\t\t\t\t\te.classList.remove(className);\n\t\t\t\t});\n\t\t\t});\n\t\t\tObject.defineProperty(pre, '__listenerAdded', { value: true });\n\t\t}\n\n\t\t/** @type {HTMLSpanElement[]} */\n\t\tvar punctuation = Array.prototype.slice.call(\n\t\t\tcode.querySelectorAll('span.' + mapClassName('token') + '.' + mapClassName('punctuation'))\n\t\t);\n\n\t\t/** @type {{ index: number, open: boolean, element: HTMLElement }[]} */\n\t\tvar allBraces = [];\n\n\t\ttoMatch.forEach(function (open) {\n\t\t\tvar close = PARTNER[open];\n\t\t\tvar name = mapClassName(NAMES[open]);\n\n\t\t\t/** @type {[number, number][]} */\n\t\t\tvar pairs = [];\n\t\t\t/** @type {number[]} */\n\t\t\tvar openStack = [];\n\n\t\t\tfor (var i = 0; i < punctuation.length; i++) {\n\t\t\t\tvar element = punctuation[i];\n\t\t\t\tif (element.childElementCount == 0) {\n\t\t\t\t\tvar text = element.textContent;\n\t\t\t\t\ttext = BRACE_ALIAS_MAP[text] || text;\n\t\t\t\t\tif (text === open) {\n\t\t\t\t\t\tallBraces.push({ index: i, open: true, element: element });\n\t\t\t\t\t\telement.classList.add(name);\n\t\t\t\t\t\telement.classList.add(mapClassName('brace-open'));\n\t\t\t\t\t\topenStack.push(i);\n\t\t\t\t\t} else if (text === close) {\n\t\t\t\t\t\tallBraces.push({ index: i, open: false, element: element });\n\t\t\t\t\t\telement.classList.add(name);\n\t\t\t\t\t\telement.classList.add(mapClassName('brace-close'));\n\t\t\t\t\t\tif (openStack.length) {\n\t\t\t\t\t\t\tpairs.push([i, openStack.pop()]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tpairs.forEach(function (pair) {\n\t\t\t\tvar pairId = 'pair-' + (pairIdCounter++) + '-';\n\n\t\t\t\tvar opening = punctuation[pair[0]];\n\t\t\t\tvar closing = punctuation[pair[1]];\n\n\t\t\t\topening.id = pairId + 'open';\n\t\t\t\tclosing.id = pairId + 'close';\n\n\t\t\t\t[opening, closing].forEach(function (e) {\n\t\t\t\t\te.addEventListener('mouseenter', hoverBrace);\n\t\t\t\t\te.addEventListener('mouseleave', leaveBrace);\n\t\t\t\t\te.addEventListener('click', clickBrace);\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\n\t\tvar level = 0;\n\t\tallBraces.sort(function (a, b) { return a.index - b.index; });\n\t\tallBraces.forEach(function (brace) {\n\t\t\tif (brace.open) {\n\t\t\t\tbrace.element.classList.add(mapClassName('brace-level-' + (level % LEVEL_WARP + 1)));\n\t\t\t\tlevel++;\n\t\t\t} else {\n\t\t\t\tlevel = Math.max(0, level - 1);\n\t\t\t\tbrace.element.classList.add(mapClassName('brace-level-' + (level % LEVEL_WARP + 1)));\n\t\t\t}\n\t\t});\n\t});\n\n}());\n&/plugins/toolbar/prism-toolbar.min.css\u0004div.code-toolbar{position:relative}div.code-toolbar>.toolbar{position:absolute;z-index:10;top:.3em;right:.2em;transition:opacity .3s ease-in-out;opacity:0}div.code-toolbar:hover>.toolbar{opacity:1}div.code-toolbar:focus-within>.toolbar{opacity:1}div.code-toolbar>.toolbar>.toolbar-item{display:inline-block}div.code-toolbar>.toolbar>.toolbar-item>a{cursor:pointer}div.code-toolbar>.toolbar>.toolbar-item>button{background:0 0;border:0;color:inherit;font:inherit;line-height:normal;overflow:visible;padding:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}div.code-toolbar>.toolbar>.toolbar-item>a,div.code-toolbar>.toolbar>.toolbar-item>button,div.code-toolbar>.toolbar>.toolbar-item>span{color:#bbb;font-size:.8em;padding:0 .5em;background:#f5f2f0;background:rgba(224,224,224,.2);box-shadow:0 2px 0 0 rgba(0,0,0,.2);border-radius:.5em}div.code-toolbar>.toolbar>.toolbar-item>a:focus,div.code-toolbar>.toolbar>.toolbar-item>a:hover,div.code-toolbar>.toolbar>.toolbar-item>button:focus,div.code-toolbar>.toolbar>.toolbar-item>button:hover,div.code-toolbar>.toolbar>.toolbar-item>span:focus,div.code-toolbar>.toolbar>.toolbar-item>span:hover{color:inherit;text-decoration:none}/components/prism-uri.min.js\u0004Prism.languages.uri={scheme:{pattern:/^[a-z][a-z0-9+.-]*:/im,greedy:!0,inside:{\"scheme-delimiter\":/:$/}},fragment:{pattern:/#[\\w\\-.~!$&'()*+,;=%:@/?]*/,inside:{\"fragment-delimiter\":/^#/}},query:{pattern:/\\?[\\w\\-.~!$&'()*+,;=%:@/?]*/,inside:{\"query-delimiter\":{pattern:/^\\?/,greedy:!0},\"pair-delimiter\":/[&;]/,pair:{pattern:/^[^=][\\s\\S]*/,inside:{key:/^[^=]+/,value:{pattern:/(^=)[\\s\\S]+/,lookbehind:!0}}}}},authority:{pattern:RegExp(\"^//(?:[\\\\w\\\\-.~!$&'()*+,;=%:]*@)?(?:\\\\[(?:[0-9a-fA-F:.]{2,48}|v[0-9a-fA-F]+\\\\.[\\\\w\\\\-.~!$&'()*+,;=]+)\\\\]|[\\\\w\\\\-.~!$&'()*+,;=%]*)(?::\\\\d*)?\",\"m\"),inside:{\"authority-delimiter\":/^\\/\\//,\"user-info-segment\":{pattern:/^[\\w\\-.~!$&'()*+,;=%:]*@/,inside:{\"user-info-delimiter\":/@$/,\"user-info\":/^[\\w\\-.~!$&'()*+,;=%:]+/}},\"port-segment\":{pattern:/:\\d*$/,inside:{\"port-delimiter\":/^:/,port:/^\\d+/}},host:{pattern:/[\\s\\S]+/,inside:{\"ip-literal\":{pattern:/^\\[[\\s\\S]+\\]$/,inside:{\"ip-literal-delimiter\":/^\\[|\\]$/,\"ipv-future\":/^v[\\s\\S]+/,\"ipv6-address\":/^[\\s\\S]+/}},\"ipv4-address\":/^(?:(?:[03-9]\\d?|[12]\\d{0,2})\\.){3}(?:[03-9]\\d?|[12]\\d{0,2})$/}}}},path:{pattern:/^[\\w\\-.~!$&'()*+,;=%:@/]+/m,inside:{\"path-separator\":/\\//}}},Prism.languages.url=Prism.languages.uri;7/plugins/highlight-keywords/prism-highlight-keywords.js(function () {\n\n\tif (typeof Prism === 'undefined') {\n\t\treturn;\n\t}\n\n\tPrism.hooks.add('wrap', function (env) {\n\t\tif (env.type !== 'keyword') {\n\t\t\treturn;\n\t\t}\n\t\tenv.classes.push('keyword-' + env.content);\n\t});\n\n}());\n/components/prism-qsharp.min.js\u0007!function(e){function n(e,n){return e.replace(/<<(\\d+)>>/g,(function(e,r){return\"(?:\"+n[+r]+\")\"}))}function r(e,r,a){return RegExp(n(e,r),a||\"\")}var a=RegExp(\"\\\\b(?:\"+\"Adj BigInt Bool Ctl Double false Int One Pauli PauliI PauliX PauliY PauliZ Qubit Range Result String true Unit Zero Adjoint adjoint apply as auto body borrow borrowing Controlled controlled distribute elif else fail fixup for function if in internal intrinsic invert is let mutable namespace new newtype open operation repeat return self set until use using while within\".trim().replace(/ /g,\"|\")+\")\\\\b\"),t=n(\"<<0>>(?:\\\\s*\\\\.\\\\s*<<0>>)*\",[\"\\\\b[A-Za-z_]\\\\w*\\\\b\"]),i={keyword:a,punctuation:/[<>()?,.:[\\]]/},s='\"(?:\\\\\\\\.|[^\\\\\\\\\"])*\"';e.languages.qsharp=e.languages.extend(\"clike\",{comment:/\\/\\/.*/,string:[{pattern:r(\"(^|[^$\\\\\\\\])<<0>>\",[s]),lookbehind:!0,greedy:!0}],\"class-name\":[{pattern:r(\"(\\\\b(?:as|open)\\\\s+)<<0>>(?=\\\\s*(?:;|as\\\\b))\",[t]),lookbehind:!0,inside:i},{pattern:r(\"(\\\\bnamespace\\\\s+)<<0>>(?=\\\\s*\\\\{)\",[t]),lookbehind:!0,inside:i}],keyword:a,number:/(?:\\b0(?:x[\\da-f]+|b[01]+|o[0-7]+)|(?:\\B\\.\\d+|\\b\\d+(?:\\.\\d*)?)(?:e[-+]?\\d+)?)l?\\b/i,operator:/\\band=|\\bor=|\\band\\b|\\bnot\\b|\\bor\\b|<[-=]|[-=]>|>>>=?|<<<=?|\\^\\^\\^=?|\\|\\|\\|=?|&&&=?|w\\/=?|~~~|[*\\/+\\-^=!%]=?/,punctuation:/::|[{}[\\];(),.:]/}),e.languages.insertBefore(\"qsharp\",\"number\",{range:{pattern:/\\.\\./,alias:\"operator\"}});var o=function(e,n){for(var r=0;r<2;r++)e=e.replace(/<<self>>/g,(function(){return\"(?:\"+e+\")\"}));return e.replace(/<<self>>/g,\"[^\\\\s\\\\S]\")}(n('\\\\{(?:[^\"{}]|<<0>>|<<self>>)*\\\\}',[s]));e.languages.insertBefore(\"qsharp\",\"string\",{\"interpolation-string\":{pattern:r('\\\\$\"(?:\\\\\\\\.|<<0>>|[^\\\\\\\\\"{])*\"',[o]),greedy:!0,inside:{interpolation:{pattern:r(\"((?:^|[^\\\\\\\\])(?:\\\\\\\\\\\\\\\\)*)<<0>>\",[o]),lookbehind:!0,inside:{punctuation:/^\\{|\\}$/,expression:{pattern:/[\\s\\S]+/,alias:\"language-qsharp\",inside:e.languages.qsharp}}},string:/[\\s\\S]+/}}})}(Prism),Prism.languages.qs=Prism.languages.qsharp;/components/prism-cil.min.js\b@Prism.languages.cil={comment:/\\/\\/.*/,string:{pattern:/([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1/,greedy:!0},directive:{pattern:/(^|\\W)\\.[a-z]+(?=\\s)/,lookbehind:!0,alias:\"class-name\"},variable:/\\[[\\w\\.]+\\]/,keyword:/\\b(?:abstract|ansi|assembly|auto|autochar|beforefieldinit|bool|bstr|byvalstr|catch|char|cil|class|currency|date|decimal|default|enum|error|explicit|extends|extern|famandassem|family|famorassem|final(?:ly)?|float32|float64|hidebysig|u?int(?:8|16|32|64)?|iant|idispatch|implements|import|initonly|instance|interface|iunknown|literal|lpstr|lpstruct|lptstr|lpwstr|managed|method|native(?:Type)?|nested|newslot|object(?:ref)?|pinvokeimpl|private|privatescope|public|reqsecobj|rtspecialname|runtime|sealed|sequential|serializable|specialname|static|string|struct|syschar|tbstr|unicode|unmanagedexp|unsigned|value(?:type)?|variant|virtual|void)\\b/,function:/\\b(?:(?:constrained|no|readonly|tail|unaligned|volatile)\\.)?(?:conv\\.(?:[iu][1248]?|ovf\\.[iu][1248]?(?:\\.un)?|r\\.un|r4|r8)|ldc\\.(?:i4(?:\\.\\d+|\\.[mM]1|\\.s)?|i8|r4|r8)|ldelem(?:\\.[iu][1248]?|\\.r[48]|\\.ref|a)?|ldind\\.(?:[iu][1248]?|r[48]|ref)|stelem\\.?(?:i[1248]?|r[48]|ref)?|stind\\.(?:i[1248]?|r[48]|ref)?|end(?:fault|filter|finally)|ldarg(?:\\.[0-3s]|a(?:\\.s)?)?|ldloc(?:\\.\\d+|\\.s)?|sub(?:\\.ovf(?:\\.un)?)?|mul(?:\\.ovf(?:\\.un)?)?|add(?:\\.ovf(?:\\.un)?)?|stloc(?:\\.[0-3s])?|refany(?:type|val)|blt(?:\\.un)?(?:\\.s)?|ble(?:\\.un)?(?:\\.s)?|bgt(?:\\.un)?(?:\\.s)?|bge(?:\\.un)?(?:\\.s)?|unbox(?:\\.any)?|init(?:blk|obj)|call(?:i|virt)?|brfalse(?:\\.s)?|bne\\.un(?:\\.s)?|ldloca(?:\\.s)?|brzero(?:\\.s)?|brtrue(?:\\.s)?|brnull(?:\\.s)?|brinst(?:\\.s)?|starg(?:\\.s)?|leave(?:\\.s)?|shr(?:\\.un)?|rem(?:\\.un)?|div(?:\\.un)?|clt(?:\\.un)?|alignment|castclass|ldvirtftn|beq(?:\\.s)?|ckfinite|ldsflda|ldtoken|localloc|mkrefany|rethrow|cgt\\.un|arglist|switch|stsfld|sizeof|newobj|newarr|ldsfld|ldnull|ldflda|isinst|throw|stobj|stfld|ldstr|ldobj|ldlen|ldftn|ldfld|cpobj|cpblk|break|br\\.s|xor|shl|ret|pop|not|nop|neg|jmp|dup|cgt|ceq|box|and|or|br)\\b/,boolean:/\\b(?:false|true)\\b/,number:/\\b-?(?:0x[0-9a-f]+|\\d+)(?:\\.[0-9a-f]+)?\\b/i,punctuation:/[{}[\\];(),:=]|IL_[0-9A-Za-z]+/};/components/prism-elm.min.js\u0003Prism.languages.elm={comment:/--.*|\\{-[\\s\\S]*?-\\}/,char:{pattern:/'(?:[^\\\\'\\r\\n]|\\\\(?:[abfnrtv\\\\']|\\d+|x[0-9a-fA-F]+|u\\{[0-9a-fA-F]+\\}))'/,greedy:!0},string:[{pattern:/\"\"\"[\\s\\S]*?\"\"\"/,greedy:!0},{pattern:/\"(?:[^\\\\\"\\r\\n]|\\\\.)*\"/,greedy:!0}],\"import-statement\":{pattern:/(^[\\t ]*)import\\s+[A-Z]\\w*(?:\\.[A-Z]\\w*)*(?:\\s+as\\s+(?:[A-Z]\\w*)(?:\\.[A-Z]\\w*)*)?(?:\\s+exposing\\s+)?/m,lookbehind:!0,inside:{keyword:/\\b(?:as|exposing|import)\\b/}},keyword:/\\b(?:alias|as|case|else|exposing|if|in|infixl|infixr|let|module|of|then|type)\\b/,builtin:/\\b(?:abs|acos|always|asin|atan|atan2|ceiling|clamp|compare|cos|curry|degrees|e|flip|floor|fromPolar|identity|isInfinite|isNaN|logBase|max|min|negate|never|not|pi|radians|rem|round|sin|sqrt|tan|toFloat|toPolar|toString|truncate|turns|uncurry|xor)\\b/,number:/\\b(?:\\d+(?:\\.\\d+)?(?:e[+-]?\\d+)?|0x[0-9a-f]+)\\b/i,operator:/\\s\\.\\s|[+\\-/*=.$<>:&|^?%#@~!]{2,}|[+\\-/*=$<>:&|^?%#@~!]/,hvariable:/\\b(?:[A-Z]\\w*\\.)*[a-z]\\w*\\b/,constant:/\\b(?:[A-Z]\\w*\\.)*[A-Z]\\w*\\b/,punctuation:/[{}[\\]|(),.:]/};/components/prism-clojure.js\f// Copied from https://github.com/jeluard/prism-clojure\nPrism.languages.clojure = {\n\t'comment': {\n\t\tpattern: /;.*/,\n\t\tgreedy: true\n\t},\n\t'string': {\n\t\tpattern: /\"(?:[^\"\\\\]|\\\\.)*\"/,\n\t\tgreedy: true\n\t},\n\t'char': /\\\\\\w+/,\n\t'symbol': {\n\t\tpattern: /(^|[\\s()\\[\\]{},])::?[\\w*+!?'<>=/.-]+/,\n\t\tlookbehind: true\n\t},\n\t'keyword': {\n\t\tpattern: /(\\()(?:-|->|->>|\\.|\\.\\.|\\*|\\/|\\+|<|<=|=|==|>|>=|accessor|agent|agent-errors|aget|alength|all-ns|alter|and|append-child|apply|array-map|aset|aset-boolean|aset-byte|aset-char|aset-double|aset-float|aset-int|aset-long|aset-short|assert|assoc|await|await-for|bean|binding|bit-and|bit-not|bit-or|bit-shift-left|bit-shift-right|bit-xor|boolean|branch\\?|butlast|byte|cast|char|children|class|clear-agent-errors|comment|commute|comp|comparator|complement|concat|cond|conj|cons|constantly|construct-proxy|contains\\?|count|create-ns|create-struct|cycle|dec|declare|def|def-|definline|definterface|defmacro|defmethod|defmulti|defn|defn-|defonce|defproject|defprotocol|defrecord|defstruct|deftype|deref|difference|disj|dissoc|distinct|do|doall|doc|dorun|doseq|dosync|dotimes|doto|double|down|drop|drop-while|edit|end\\?|ensure|eval|every\\?|false\\?|ffirst|file-seq|filter|find|find-doc|find-ns|find-var|first|float|flush|fn|fnseq|for|frest|gensym|get|get-proxy-class|hash-map|hash-set|identical\\?|identity|if|if-let|if-not|import|in-ns|inc|index|insert-child|insert-left|insert-right|inspect-table|inspect-tree|instance\\?|int|interleave|intersection|into|into-array|iterate|join|key|keys|keyword|keyword\\?|last|lazy-cat|lazy-cons|left|lefts|let|line-seq|list|list\\*|load|load-file|locking|long|loop|macroexpand|macroexpand-1|make-array|make-node|map|map-invert|map\\?|mapcat|max|max-key|memfn|merge|merge-with|meta|min|min-key|monitor-enter|name|namespace|neg\\?|new|newline|next|nil\\?|node|not|not-any\\?|not-every\\?|not=|ns|ns-imports|ns-interns|ns-map|ns-name|ns-publics|ns-refers|ns-resolve|ns-unmap|nth|nthrest|or|parse|partial|path|peek|pop|pos\\?|pr|pr-str|print|print-str|println|println-str|prn|prn-str|project|proxy|proxy-mappings|quot|quote|rand|rand-int|range|re-find|re-groups|re-matcher|re-matches|re-pattern|re-seq|read|read-line|recur|reduce|ref|ref-set|refer|rem|remove|remove-method|remove-ns|rename|rename-keys|repeat|replace|replicate|resolve|rest|resultset-seq|reverse|rfirst|right|rights|root|rrest|rseq|second|select|select-keys|send|send-off|seq|seq-zip|seq\\?|set|set!|short|slurp|some|sort|sort-by|sorted-map|sorted-map-by|sorted-set|special-symbol\\?|split-at|split-with|str|string\\?|struct|struct-map|subs|subvec|symbol|symbol\\?|sync|take|take-nth|take-while|test|throw|time|to-array|to-array-2d|tree-seq|true\\?|try|union|up|update-proxy|val|vals|var|var-get|var-set|var\\?|vector|vector-zip|vector\\?|when|when-first|when-let|when-not|with-local-vars|with-meta|with-open|with-out-str|xml-seq|xml-zip|zero\\?|zipmap|zipper)(?=[\\s)]|$)/,\n\t\tlookbehind: true\n\t},\n\t'boolean': /\\b(?:false|nil|true)\\b/,\n\t'number': {\n\t\tpattern: /(^|[^\\w$@])(?:\\d+(?:[/.]\\d+)?(?:e[+-]?\\d+)?|0x[a-f0-9]+|[1-9]\\d?r[a-z0-9]+)[lmn]?(?![\\w$@])/i,\n\t\tlookbehind: true\n\t},\n\t'function': {\n\t\tpattern: /((?:^|[^'])\\()[\\w*+!?'<>=/.-]+(?=[\\s)]|$)/,\n\t\tlookbehind: true\n\t},\n\t'operator': /[#@^`~]/,\n\t'punctuation': /[{}\\[\\](),]/\n};\n//plugins/match-braces/prism-match-braces.min.js\bV!function(){if(\"undefined\"!=typeof Prism&&\"undefined\"!=typeof document){var e={\"(\":\")\",\"[\":\"]\",\"{\":\"}\"},t={\"(\":\"brace-round\",\"[\":\"brace-square\",\"{\":\"brace-curly\"},n={\"${\":\"{\"},r=0,c=/^(pair-\\d+-)(close|open)$/;Prism.hooks.add(\"complete\",(function(c){var i=c.element,d=i.parentElement;if(d&&\"PRE\"==d.tagName){var u=[];if(Prism.util.isActive(i,\"match-braces\")&&u.push(\"(\",\"[\",\"{\"),0!=u.length){d.__listenerAdded||(d.addEventListener(\"mousedown\",(function(){var e=d.querySelector(\"code\"),t=s(\"brace-selected\");Array.prototype.slice.call(e.querySelectorAll(\".\"+t)).forEach((function(e){e.classList.remove(t)}))})),Object.defineProperty(d,\"__listenerAdded\",{value:!0}));var f=Array.prototype.slice.call(i.querySelectorAll(\"span.\"+s(\"token\")+\".\"+s(\"punctuation\"))),h=[];u.forEach((function(c){for(var i=e[c],d=s(t[c]),u=[],p=[],v=0;v<f.length;v++){var m=f[v];if(0==m.childElementCount){var b=m.textContent;(b=n[b]||b)===c?(h.push({index:v,open:!0,element:m}),m.classList.add(d),m.classList.add(s(\"brace-open\")),p.push(v)):b===i&&(h.push({index:v,open:!1,element:m}),m.classList.add(d),m.classList.add(s(\"brace-close\")),p.length&&u.push([v,p.pop()]))}}u.forEach((function(e){var t=\"pair-\"+r+++\"-\",n=f[e[0]],c=f[e[1]];n.id=t+\"open\",c.id=t+\"close\",[n,c].forEach((function(e){e.addEventListener(\"mouseenter\",a),e.addEventListener(\"mouseleave\",o),e.addEventListener(\"click\",l)}))}))}));var p=0;h.sort((function(e,t){return e.index-t.index})),h.forEach((function(e){e.open?(e.element.classList.add(s(\"brace-level-\"+(p%12+1))),p++):(p=Math.max(0,p-1),e.element.classList.add(s(\"brace-level-\"+(p%12+1))))}))}}}))}function s(e){var t=Prism.plugins.customClass;return t?t.apply(e,\"none\"):e}function i(e){var t=c.exec(e.id);return document.querySelector(\"#\"+t[1]+(\"open\"==t[2]?\"close\":\"open\"))}function a(){Prism.util.isActive(this,\"brace-hover\",!0)&&[this,i(this)].forEach((function(e){e.classList.add(s(\"brace-hover\"))}))}function o(){[this,i(this)].forEach((function(e){e.classList.remove(s(\"brace-hover\"))}))}function l(){Prism.util.isActive(this,\"brace-select\",!0)&&[this,i(this)].forEach((function(e){e.classList.add(s(\"brace-selected\"))}))}}();/components/prism-bison.js\u0003Prism.languages.bison = Prism.languages.extend('c', {});\n\nPrism.languages.insertBefore('bison', 'comment', {\n\t'bison': {\n\t\t// This should match all the beginning of the file\n\t\t// including the prologue(s), the bison declarations and\n\t\t// the grammar rules.\n\t\tpattern: /^(?:[^%]|%(?!%))*%%[\\s\\S]*?%%/,\n\t\tinside: {\n\t\t\t'c': {\n\t\t\t\t// Allow for one level of nested braces\n\t\t\t\tpattern: /%\\{[\\s\\S]*?%\\}|\\{(?:\\{[^}]*\\}|[^{}])*\\}/,\n\t\t\t\tinside: {\n\t\t\t\t\t'delimiter': {\n\t\t\t\t\t\tpattern: /^%?\\{|%?\\}$/,\n\t\t\t\t\t\talias: 'punctuation'\n\t\t\t\t\t},\n\t\t\t\t\t'bison-variable': {\n\t\t\t\t\t\tpattern: /[$@](?:<[^\\s>]+>)?[\\w$]+/,\n\t\t\t\t\t\talias: 'variable',\n\t\t\t\t\t\tinside: {\n\t\t\t\t\t\t\t'punctuation': /<|>/\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\trest: Prism.languages.c\n\t\t\t\t}\n\t\t\t},\n\t\t\t'comment': Prism.languages.c.comment,\n\t\t\t'string': Prism.languages.c.string,\n\t\t\t'property': /\\S+(?=:)/,\n\t\t\t'keyword': /%\\w+/,\n\t\t\t'number': {\n\t\t\t\tpattern: /(^|[^@])\\b(?:0x[\\da-f]+|\\d+)/i,\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\t'punctuation': /%[%?]|[|:;\\[\\]<>]/\n\t\t}\n\t}\n});\n!/components/prism-cfscript.min.js\u0004Prism.languages.cfscript=Prism.languages.extend(\"clike\",{comment:[{pattern:/(^|[^\\\\])\\/\\*[\\s\\S]*?(?:\\*\\/|$)/,lookbehind:!0,inside:{annotation:{pattern:/(?:^|[^.])@[\\w\\.]+/,alias:\"punctuation\"}}},{pattern:/(^|[^\\\\:])\\/\\/.*/,lookbehind:!0,greedy:!0}],keyword:/\\b(?:abstract|break|catch|component|continue|default|do|else|extends|final|finally|for|function|if|in|include|package|private|property|public|remote|required|rethrow|return|static|switch|throw|try|var|while|xml)\\b(?!\\s*=)/,operator:[/\\+\\+|--|&&|\\|\\||::|=>|[!=]==|[-+*/%&|^!=<>]=?|\\?(?:\\.|:)?|:/,/\\b(?:and|contains|eq|equal|eqv|gt|gte|imp|is|lt|lte|mod|not|or|xor)\\b/],scope:{pattern:/\\b(?:application|arguments|cgi|client|cookie|local|session|super|this|variables)\\b/,alias:\"global\"},type:{pattern:/\\b(?:any|array|binary|boolean|date|guid|numeric|query|string|struct|uuid|void|xml)\\b/,alias:\"builtin\"}}),Prism.languages.insertBefore(\"cfscript\",\"keyword\",{\"function-variable\":{pattern:/[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*[=:]\\s*(?:\\bfunction\\b|(?:\\((?:[^()]|\\([^()]*\\))*\\)|(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*)\\s*=>))/,alias:\"function\"}}),delete Prism.languages.cfscript[\"class-name\"],Prism.languages.cfc=Prism.languages.cfscript;!/components/prism-visual-basic.js\u0007Prism.languages['visual-basic'] = {\n\t'comment': {\n\t\tpattern: /(?:['‘’]|REM\\b)(?:[^\\r\\n_]|_(?:\\r\\n?|\\n)?)*/i,\n\t\tinside: {\n\t\t\t'keyword': /^REM/i\n\t\t}\n\t},\n\t'directive': {\n\t\tpattern: /#(?:Const|Else|ElseIf|End|ExternalChecksum|ExternalSource|If|Region)(?:\\b_[ \\t]*(?:\\r\\n?|\\n)|.)+/i,\n\t\talias: 'property',\n\t\tgreedy: true\n\t},\n\t'string': {\n\t\tpattern: /\\$?[\"“”](?:[\"“”]{2}|[^\"“”])*[\"“”]C?/i,\n\t\tgreedy: true\n\t},\n\t'date': {\n\t\tpattern: /#[ \\t]*(?:\\d+([/-])\\d+\\1\\d+(?:[ \\t]+(?:\\d+[ \\t]*(?:AM|PM)|\\d+:\\d+(?::\\d+)?(?:[ \\t]*(?:AM|PM))?))?|\\d+[ \\t]*(?:AM|PM)|\\d+:\\d+(?::\\d+)?(?:[ \\t]*(?:AM|PM))?)[ \\t]*#/i,\n\t\talias: 'number'\n\t},\n\t'number': /(?:(?:\\b\\d+(?:\\.\\d+)?|\\.\\d+)(?:E[+-]?\\d+)?|&[HO][\\dA-F]+)(?:[FRD]|U?[ILS])?/i,\n\t'boolean': /\\b(?:False|Nothing|True)\\b/i,\n\t'keyword': /\\b(?:AddHandler|AddressOf|Alias|And(?:Also)?|As|Boolean|ByRef|Byte|ByVal|Call|Case|Catch|C(?:Bool|Byte|Char|Date|Dbl|Dec|Int|Lng|Obj|SByte|Short|Sng|Str|Type|UInt|ULng|UShort)|Char|Class|Const|Continue|Currency|Date|Decimal|Declare|Default|Delegate|Dim|DirectCast|Do|Double|Each|Else(?:If)?|End(?:If)?|Enum|Erase|Error|Event|Exit|Finally|For|Friend|Function|Get(?:Type|XMLNamespace)?|Global|GoSub|GoTo|Handles|If|Implements|Imports|In|Inherits|Integer|Interface|Is|IsNot|Let|Lib|Like|Long|Loop|Me|Mod|Module|Must(?:Inherit|Override)|My(?:Base|Class)|Namespace|Narrowing|New|Next|Not(?:Inheritable|Overridable)?|Object|Of|On|Operator|Option(?:al)?|Or(?:Else)?|Out|Overloads|Overridable|Overrides|ParamArray|Partial|Private|Property|Protected|Public|RaiseEvent|ReadOnly|ReDim|RemoveHandler|Resume|Return|SByte|Select|Set|Shadows|Shared|short|Single|Static|Step|Stop|String|Structure|Sub|SyncLock|Then|Throw|To|Try|TryCast|Type|TypeOf|U(?:Integer|Long|Short)|Until|Using|Variant|Wend|When|While|Widening|With(?:Events)?|WriteOnly|Xor)\\b/i,\n\t'operator': /[+\\-*/\\\\^<=>&#@$%!]|\\b_(?=[ \\t]*[\\r\\n])/,\n\t'punctuation': /[{}().,:?]/\n};\n\nPrism.languages.vb = Prism.languages['visual-basic'];\nPrism.languages.vba = Prism.languages['visual-basic'];\n/components/prism-turtle.js\u0004Prism.languages.turtle = {\n\t'comment': {\n\t\tpattern: /#.*/,\n\t\tgreedy: true\n\t},\n\t'multiline-string': {\n\t\tpattern: /\"\"\"(?:(?:\"\"?)?(?:[^\"\\\\]|\\\\.))*\"\"\"|'''(?:(?:''?)?(?:[^'\\\\]|\\\\.))*'''/,\n\t\tgreedy: true,\n\t\talias: 'string',\n\t\tinside: {\n\t\t\t'comment': /#.*/\n\t\t}\n\t},\n\t'string': {\n\t\tpattern: /\"(?:[^\\\\\"\\r\\n]|\\\\.)*\"|'(?:[^\\\\'\\r\\n]|\\\\.)*'/,\n\t\tgreedy: true\n\t},\n\t'url': {\n\t\tpattern: /<(?:[^\\x00-\\x20<>\"{}|^`\\\\]|\\\\(?:u[\\da-fA-F]{4}|U[\\da-fA-F]{8}))*>/,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'punctuation': /[<>]/\n\t\t}\n\t},\n\t'function': {\n\t\tpattern: /(?:(?![-.\\d\\xB7])[-.\\w\\xB7\\xC0-\\uFFFD]+)?:(?:(?![-.])(?:[-.:\\w\\xC0-\\uFFFD]|%[\\da-f]{2}|\\\\.)+)?/i,\n\t\tinside: {\n\t\t\t'local-name': {\n\t\t\t\tpattern: /([^:]*:)[\\s\\S]+/,\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\t'prefix': {\n\t\t\t\tpattern: /[\\s\\S]+/,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': /:/\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\t'number': /[+-]?\\b\\d+(?:\\.\\d*)?(?:e[+-]?\\d+)?/i,\n\t'punctuation': /[{}.,;()[\\]]|\\^\\^/,\n\t'boolean': /\\b(?:false|true)\\b/,\n\t'keyword': [\n\t\t/(?:\\ba|@prefix|@base)\\b|=/,\n\t\t/\\b(?:base|graph|prefix)\\b/i\n\t],\n\t'tag': {\n\t\tpattern: /@[a-z]+(?:-[a-z\\d]+)*/i,\n\t\tinside: {\n\t\t\t'punctuation': /@/\n\t\t}\n\t}\n};\nPrism.languages.trig = Prism.languages['turtle'];\n!/components/prism-actionscript.js\u0003Prism.languages.actionscript = Prism.languages.extend('javascript', {\n\t'keyword': /\\b(?:as|break|case|catch|class|const|default|delete|do|dynamic|each|else|extends|final|finally|for|function|get|if|implements|import|in|include|instanceof|interface|internal|is|namespace|native|new|null|override|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|use|var|void|while|with)\\b/,\n\t'operator': /\\+\\+|--|(?:[+\\-*\\/%^]|&&?|\\|\\|?|<<?|>>?>?|[!=]=?)=?|[~?@]/\n});\nPrism.languages.actionscript['class-name'].alias = 'function';\n\n// doesn't work with AS because AS is too complex\ndelete Prism.languages.actionscript['parameter'];\ndelete Prism.languages.actionscript['literal-property'];\n\nif (Prism.languages.markup) {\n\tPrism.languages.insertBefore('actionscript', 'string', {\n\t\t'xml': {\n\t\t\tpattern: /(^|[^.])<\\/?\\w+(?:\\s+[^\\s>\\/=]+=(\"|')(?:\\\\[\\s\\S]|(?!\\2)[^\\\\])*\\2)*\\s*\\/?>/,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.markup\n\t\t}\n\t});\n}\n/components/prism-v.js\t(function (Prism) {\n\tvar interpolationExpr = {\n\t\tpattern: /[\\s\\S]+/,\n\t\tinside: null\n\t};\n\n\tPrism.languages.v = Prism.languages.extend('clike', {\n\t\t'string': {\n\t\t\tpattern: /r?([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1/,\n\t\t\talias: 'quoted-string',\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'interpolation': {\n\t\t\t\t\tpattern: /((?:^|[^\\\\])(?:\\\\{2})*)\\$(?:\\{[^{}]*\\}|\\w+(?:\\.\\w+(?:\\([^\\(\\)]*\\))?|\\[[^\\[\\]]+\\])*)/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'interpolation-variable': {\n\t\t\t\t\t\t\tpattern: /^\\$\\w[\\s\\S]*$/,\n\t\t\t\t\t\t\talias: 'variable'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'interpolation-punctuation': {\n\t\t\t\t\t\t\tpattern: /^\\$\\{|\\}$/,\n\t\t\t\t\t\t\talias: 'punctuation'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'interpolation-expression': interpolationExpr\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t'class-name': {\n\t\t\tpattern: /(\\b(?:enum|interface|struct|type)\\s+)(?:C\\.)?\\w+/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'keyword': /(?:\\b(?:__global|as|asm|assert|atomic|break|chan|const|continue|defer|else|embed|enum|fn|for|go(?:to)?|if|import|in|interface|is|lock|match|module|mut|none|or|pub|return|rlock|select|shared|sizeof|static|struct|type(?:of)?|union|unsafe)|\\$(?:else|for|if)|#(?:flag|include))\\b/,\n\t\t'number': /\\b(?:0x[a-f\\d]+(?:_[a-f\\d]+)*|0b[01]+(?:_[01]+)*|0o[0-7]+(?:_[0-7]+)*|\\d+(?:_\\d+)*(?:\\.\\d+(?:_\\d+)*)?)\\b/i,\n\t\t'operator': /~|\\?|[*\\/%^!=]=?|\\+[=+]?|-[=-]?|\\|[=|]?|&(?:=|&|\\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\\.\\.\\.?/,\n\t\t'builtin': /\\b(?:any(?:_float|_int)?|bool|byte(?:ptr)?|charptr|f(?:32|64)|i(?:8|16|64|128|nt)|rune|size_t|string|u(?:16|32|64|128)|voidptr)\\b/\n\t});\n\n\tinterpolationExpr.inside = Prism.languages.v;\n\n\tPrism.languages.insertBefore('v', 'string', {\n\t\t'char': {\n\t\t\tpattern: /`(?:\\\\`|\\\\?[^`]{1,2})`/, // using {1,2} instead of `u` flag for compatibility\n\t\t\talias: 'rune'\n\t\t}\n\t});\n\n\tPrism.languages.insertBefore('v', 'operator', {\n\t\t'attribute': {\n\t\t\tpattern: /(^[\\t ]*)\\[(?:deprecated|direct_array_access|flag|inline|live|ref_only|typedef|unsafe_fn|windows_stdcall)\\]/m,\n\t\t\tlookbehind: true,\n\t\t\talias: 'annotation',\n\t\t\tinside: {\n\t\t\t\t'punctuation': /[\\[\\]]/,\n\t\t\t\t'keyword': /\\w+/\n\t\t\t}\n\t\t},\n\t\t'generic': {\n\t\t\tpattern: /<\\w+>(?=\\s*[\\)\\{])/,\n\t\t\tinside: {\n\t\t\t\t'punctuation': /[<>]/,\n\t\t\t\t'class-name': /\\w+/\n\t\t\t}\n\t\t}\n\t});\n\n\tPrism.languages.insertBefore('v', 'function', {\n\t\t'generic-function': {\n\t\t\t// e.g. foo<T>( ...\n\t\t\tpattern: /\\b\\w+\\s*<\\w+>(?=\\()/,\n\t\t\tinside: {\n\t\t\t\t'function': /^\\w+/,\n\t\t\t\t'generic': {\n\t\t\t\t\tpattern: /<\\w+>/,\n\t\t\t\t\tinside: Prism.languages.v.generic.inside\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n}(Prism));\n\"/components/prism-js-extras.min.js\t!function(a){function e(a,e){return RegExp(a.replace(/<ID>/g,(function(){return\"(?!\\\\s)[_$a-zA-Z\\\\xA0-\\\\uFFFF](?:(?!\\\\s)[$\\\\w\\\\xA0-\\\\uFFFF])*\"})),e)}a.languages.insertBefore(\"javascript\",\"function-variable\",{\"method-variable\":{pattern:RegExp(\"(\\\\.\\\\s*)\"+a.languages.javascript[\"function-variable\"].pattern.source),lookbehind:!0,alias:[\"function-variable\",\"method\",\"function\",\"property-access\"]}}),a.languages.insertBefore(\"javascript\",\"function\",{method:{pattern:RegExp(\"(\\\\.\\\\s*)\"+a.languages.javascript.function.source),lookbehind:!0,alias:[\"function\",\"property-access\"]}}),a.languages.insertBefore(\"javascript\",\"constant\",{\"known-class-name\":[{pattern:/\\b(?:(?:Float(?:32|64)|(?:Int|Uint)(?:8|16|32)|Uint8Clamped)?Array|ArrayBuffer|BigInt|Boolean|DataView|Date|Error|Function|Intl|JSON|(?:Weak)?(?:Map|Set)|Math|Number|Object|Promise|Proxy|Reflect|RegExp|String|Symbol|WebAssembly)\\b/,alias:\"class-name\"},{pattern:/\\b(?:[A-Z]\\w*)Error\\b/,alias:\"class-name\"}]}),a.languages.insertBefore(\"javascript\",\"keyword\",{imports:{pattern:e(\"(\\\\bimport\\\\b\\\\s*)(?:<ID>(?:\\\\s*,\\\\s*(?:\\\\*\\\\s*as\\\\s+<ID>|\\\\{[^{}]*\\\\}))?|\\\\*\\\\s*as\\\\s+<ID>|\\\\{[^{}]*\\\\})(?=\\\\s*\\\\bfrom\\\\b)\"),lookbehind:!0,inside:a.languages.javascript},exports:{pattern:e(\"(\\\\bexport\\\\b\\\\s*)(?:\\\\*(?:\\\\s*as\\\\s+<ID>)?(?=\\\\s*\\\\bfrom\\\\b)|\\\\{[^{}]*\\\\})\"),lookbehind:!0,inside:a.languages.javascript}}),a.languages.javascript.keyword.unshift({pattern:/\\b(?:as|default|export|from|import)\\b/,alias:\"module\"},{pattern:/\\b(?:await|break|catch|continue|do|else|finally|for|if|return|switch|throw|try|while|yield)\\b/,alias:\"control-flow\"},{pattern:/\\bnull\\b/,alias:[\"null\",\"nil\"]},{pattern:/\\bundefined\\b/,alias:\"nil\"}),a.languages.insertBefore(\"javascript\",\"operator\",{spread:{pattern:/\\.{3}/,alias:\"operator\"},arrow:{pattern:/=>/,alias:\"operator\"}}),a.languages.insertBefore(\"javascript\",\"punctuation\",{\"property-access\":{pattern:e(\"(\\\\.\\\\s*)#?<ID>\"),lookbehind:!0},\"maybe-class-name\":{pattern:/(^|[^$\\w\\xA0-\\uFFFF])[A-Z][$\\w\\xA0-\\uFFFF]+/,lookbehind:!0},dom:{pattern:/\\b(?:document|(?:local|session)Storage|location|navigator|performance|window)\\b/,alias:\"variable\"},console:{pattern:/\\bconsole(?=\\s*\\.)/,alias:\"class-name\"}});for(var t=[\"function\",\"function-variable\",\"method\",\"method-variable\",\"property-access\"],r=0;r<t.length;r++){var n=t[r],s=a.languages.javascript[n];\"RegExp\"===a.util.type(s)&&(s=a.languages.javascript[n]={pattern:s});var o=s.inside||{};s.inside=o,o[\"maybe-class-name\"]=/^[A-Z][\\s\\S]*/}}(Prism);!/components/prism-jsstacktrace.js\u0003Prism.languages.jsstacktrace = {\n\t'error-message': {\n\t\tpattern: /^\\S.*/m,\n\t\talias: 'string'\n\t},\n\n\t'stack-frame': {\n\t\tpattern: /(^[ \\t]+)at[ \\t].*/m,\n\t\tlookbehind: true,\n\t\tinside: {\n\t\t\t'not-my-code': {\n\t\t\t\tpattern: /^at[ \\t]+(?!\\s)(?:node\\.js|<unknown>|.*(?:node_modules|\\(<anonymous>\\)|\\(<unknown>|<anonymous>$|\\(internal\\/|\\(node\\.js)).*/m,\n\t\t\t\talias: 'comment'\n\t\t\t},\n\n\t\t\t'filename': {\n\t\t\t\tpattern: /(\\bat\\s+(?!\\s)|\\()(?:[a-zA-Z]:)?[^():]+(?=:)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'url'\n\t\t\t},\n\n\t\t\t'function': {\n\t\t\t\tpattern: /(\\bat\\s+(?:new\\s+)?)(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF<][.$\\w\\xA0-\\uFFFF<>]*/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': /\\./\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t'punctuation': /[()]/,\n\n\t\t\t'keyword': /\\b(?:at|new)\\b/,\n\n\t\t\t'alias': {\n\t\t\t\tpattern: /\\[(?:as\\s+)?(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF][$\\w\\xA0-\\uFFFF]*\\]/,\n\t\t\t\talias: 'variable'\n\t\t\t},\n\n\t\t\t'line-number': {\n\t\t\t\tpattern: /:\\d+(?::\\d+)?\\b/,\n\t\t\t\talias: 'number',\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': /:/\n\t\t\t\t}\n\t\t\t},\n\n\t\t}\n\t}\n};\n(/plugins/autolinker/prism-autolinker.css\u001d.token a {\n\tcolor: inherit;\n}/components/prism-haml.min.js\b!function(n){n.languages.haml={\"multiline-comment\":{pattern:/((?:^|\\r?\\n|\\r)([\\t ]*))(?:\\/|-#).*(?:(?:\\r?\\n|\\r)\\2[\\t ].+)*/,lookbehind:!0,alias:\"comment\"},\"multiline-code\":[{pattern:/((?:^|\\r?\\n|\\r)([\\t ]*)(?:[~-]|[&!]?=)).*,[\\t ]*(?:(?:\\r?\\n|\\r)\\2[\\t ].*,[\\t ]*)*(?:(?:\\r?\\n|\\r)\\2[\\t ].+)/,lookbehind:!0,inside:n.languages.ruby},{pattern:/((?:^|\\r?\\n|\\r)([\\t ]*)(?:[~-]|[&!]?=)).*\\|[\\t ]*(?:(?:\\r?\\n|\\r)\\2[\\t ].*\\|[\\t ]*)*/,lookbehind:!0,inside:n.languages.ruby}],filter:{pattern:/((?:^|\\r?\\n|\\r)([\\t ]*)):[\\w-]+(?:(?:\\r?\\n|\\r)(?:\\2[\\t ].+|\\s*?(?=\\r?\\n|\\r)))+/,lookbehind:!0,inside:{\"filter-name\":{pattern:/^:[\\w-]+/,alias:\"symbol\"}}},markup:{pattern:/((?:^|\\r?\\n|\\r)[\\t ]*)<.+/,lookbehind:!0,inside:n.languages.markup},doctype:{pattern:/((?:^|\\r?\\n|\\r)[\\t ]*)!!!(?: .+)?/,lookbehind:!0},tag:{pattern:/((?:^|\\r?\\n|\\r)[\\t ]*)[%.#][\\w\\-#.]*[\\w\\-](?:\\([^)]+\\)|\\{(?:\\{[^}]+\\}|[^{}])+\\}|\\[[^\\]]+\\])*[\\/<>]*/,lookbehind:!0,inside:{attributes:[{pattern:/(^|[^#])\\{(?:\\{[^}]+\\}|[^{}])+\\}/,lookbehind:!0,inside:n.languages.ruby},{pattern:/\\([^)]+\\)/,inside:{\"attr-value\":{pattern:/(=\\s*)(?:\"(?:\\\\.|[^\\\\\"\\r\\n])*\"|[^)\\s]+)/,lookbehind:!0},\"attr-name\":/[\\w:-]+(?=\\s*!?=|\\s*[,)])/,punctuation:/[=(),]/}},{pattern:/\\[[^\\]]+\\]/,inside:n.languages.ruby}],punctuation:/[<>]/}},code:{pattern:/((?:^|\\r?\\n|\\r)[\\t ]*(?:[~-]|[&!]?=)).+/,lookbehind:!0,inside:n.languages.ruby},interpolation:{pattern:/#\\{[^}]+\\}/,inside:{delimiter:{pattern:/^#\\{|\\}$/,alias:\"punctuation\"},ruby:{pattern:/[\\s\\S]+/,inside:n.languages.ruby}}},punctuation:{pattern:/((?:^|\\r?\\n|\\r)[\\t ]*)[~=\\-&!]+/,lookbehind:!0}};for(var e=[\"css\",{filter:\"coffee\",language:\"coffeescript\"},\"erb\",\"javascript\",\"less\",\"markdown\",\"ruby\",\"scss\",\"textile\"],t={},r=0,a=e.length;r<a;r++){var i=e[r];i=\"string\"==typeof i?{filter:i,language:i}:i,n.languages[i.language]&&(t[\"filter-\"+i.filter]={pattern:RegExp(\"((?:^|\\\\r?\\\\n|\\\\r)([\\\\t ]*)):{{filter_name}}(?:(?:\\\\r?\\\\n|\\\\r)(?:\\\\2[\\\\t ].+|\\\\s*?(?=\\\\r?\\\\n|\\\\r)))+\".replace(\"{{filter_name}}\",(function(){return i.filter}))),lookbehind:!0,inside:{\"filter-name\":{pattern:/^:[\\w-]+/,alias:\"symbol\"},text:{pattern:/[\\s\\S]+/,alias:[i.language,\"language-\"+i.language],inside:n.languages[i.language]}}})}n.languages.insertBefore(\"haml\",\"filter\",t)}(Prism);(/plugins/previewers/prism-previewers.css\u0013.prism-previewer,\n.prism-previewer:before,\n.prism-previewer:after {\n\tposition: absolute;\n\tpointer-events: none;\n}\n.prism-previewer,\n.prism-previewer:after {\n\tleft: 50%;\n}\n.prism-previewer {\n\tmargin-top: -48px;\n\twidth: 32px;\n\theight: 32px;\n\tmargin-left: -16px;\n\tz-index: 10;\n\n\topacity: 0;\n\t-webkit-transition: opacity .25s;\n\t-o-transition: opacity .25s;\n\ttransition: opacity .25s;\n}\n.prism-previewer.flipped {\n\tmargin-top: 0;\n\tmargin-bottom: -48px;\n}\n.prism-previewer:before,\n.prism-previewer:after {\n\tcontent: '';\n\tposition: absolute;\n\tpointer-events: none;\n}\n.prism-previewer:before {\n\ttop: -5px;\n\tright: -5px;\n\tleft: -5px;\n\tbottom: -5px;\n\tborder-radius: 10px;\n\tborder: 5px solid #fff;\n\tbox-shadow: 0 0 3px rgba(0, 0, 0, 0.5) inset, 0 0 10px rgba(0, 0, 0, 0.75);\n}\n.prism-previewer:after {\n\ttop: 100%;\n\twidth: 0;\n\theight: 0;\n\tmargin: 5px 0 0 -7px;\n\tborder: 7px solid transparent;\n\tborder-color: rgba(255, 0, 0, 0);\n\tborder-top-color: #fff;\n}\n.prism-previewer.flipped:after {\n\ttop: auto;\n\tbottom: 100%;\n\tmargin-top: 0;\n\tmargin-bottom: 5px;\n\tborder-top-color: rgba(255, 0, 0, 0);\n\tborder-bottom-color: #fff;\n}\n.prism-previewer.active {\n\topacity: 1;\n}\n\n.prism-previewer-angle:before {\n\tborder-radius: 50%;\n\tbackground: #fff;\n}\n.prism-previewer-angle:after {\n\tmargin-top: 4px;\n}\n.prism-previewer-angle svg {\n\twidth: 32px;\n\theight: 32px;\n\t-webkit-transform: rotate(-90deg);\n\t-moz-transform: rotate(-90deg);\n\t-ms-transform: rotate(-90deg);\n\t-o-transform: rotate(-90deg);\n\ttransform: rotate(-90deg);\n}\n.prism-previewer-angle[data-negative] svg {\n\t-webkit-transform: scaleX(-1) rotate(-90deg);\n\t-moz-transform: scaleX(-1) rotate(-90deg);\n\t-ms-transform: scaleX(-1) rotate(-90deg);\n\t-o-transform: scaleX(-1) rotate(-90deg);\n\ttransform: scaleX(-1) rotate(-90deg);\n}\n.prism-previewer-angle circle {\n\tfill: transparent;\n\tstroke: hsl(200, 10%, 20%);\n\tstroke-opacity: 0.9;\n\tstroke-width: 32;\n\tstroke-dasharray: 0, 500;\n}\n\n.prism-previewer-gradient {\n\tbackground-image: linear-gradient(45deg, #bbb 25%, transparent 25%, transparent 75%, #bbb 75%, #bbb), linear-gradient(45deg, #bbb 25%, #eee 25%, #eee 75%, #bbb 75%, #bbb);\n\tbackground-size: 10px 10px;\n\tbackground-position: 0 0, 5px 5px;\n\n\twidth: 64px;\n\tmargin-left: -32px;\n}\n.prism-previewer-gradient:before {\n\tcontent: none;\n}\n.prism-previewer-gradient div {\n\tposition: absolute;\n\ttop: -5px;\n\tleft: -5px;\n\tright: -5px;\n\tbottom: -5px;\n\tborder-radius: 10px;\n\tborder: 5px solid #fff;\n\tbox-shadow: 0 0 3px rgba(0, 0, 0, 0.5) inset, 0 0 10px rgba(0, 0, 0, 0.75);\n}\n\n.prism-previewer-color {\n\tbackground-image: linear-gradient(45deg, #bbb 25%, transparent 25%, transparent 75%, #bbb 75%, #bbb), linear-gradient(45deg, #bbb 25%, #eee 25%, #eee 75%, #bbb 75%, #bbb);\n\tbackground-size: 10px 10px;\n\tbackground-position: 0 0, 5px 5px;\n}\n.prism-previewer-color:before {\n\tbackground-color: inherit;\n\tbackground-clip: padding-box;\n}\n\n.prism-previewer-easing {\n\tmargin-top: -76px;\n\tmargin-left: -30px;\n\twidth: 60px;\n\theight: 60px;\n\tbackground: #333;\n}\n.prism-previewer-easing.flipped {\n\tmargin-bottom: -116px;\n}\n.prism-previewer-easing svg {\n\twidth: 60px;\n\theight: 60px;\n}\n.prism-previewer-easing circle {\n\tfill: hsl(200, 10%, 20%);\n\tstroke: white;\n}\n.prism-previewer-easing path {\n\tfill: none;\n\tstroke: white;\n\tstroke-linecap: round;\n\tstroke-width: 4;\n}\n.prism-previewer-easing line {\n\tstroke: white;\n\tstroke-opacity: 0.5;\n\tstroke-width: 2;\n}\n\n@-webkit-keyframes prism-previewer-time {\n\t0% {\n\t\tstroke-dasharray: 0, 500;\n\t\tstroke-dashoffset: 0;\n\t}\n\t50% {\n\t\tstroke-dasharray: 100, 500;\n\t\tstroke-dashoffset: 0;\n\t}\n\t100% {\n\t\tstroke-dasharray: 0, 500;\n\t\tstroke-dashoffset: -100;\n\t}\n}\n\n@-o-keyframes prism-previewer-time {\n\t0% {\n\t\tstroke-dasharray: 0, 500;\n\t\tstroke-dashoffset: 0;\n\t}\n\t50% {\n\t\tstroke-dasharray: 100, 500;\n\t\tstroke-dashoffset: 0;\n\t}\n\t100% {\n\t\tstroke-dasharray: 0, 500;\n\t\tstroke-dashoffset: -100;\n\t}\n}\n\n@-moz-keyframes prism-previewer-time {\n\t0% {\n\t\tstroke-dasharray: 0, 500;\n\t\tstroke-dashoffset: 0;\n\t}\n\t50% {\n\t\tstroke-dasharray: 100, 500;\n\t\tstroke-dashoffset: 0;\n\t}\n\t100% {\n\t\tstroke-dasharray: 0, 500;\n\t\tstroke-dashoffset: -100;\n\t}\n}\n\n@keyframes prism-previewer-time {\n\t0% {\n\t\tstroke-dasharray: 0, 500;\n\t\tstroke-dashoffset: 0;\n\t}\n\t50% {\n\t\tstroke-dasharray: 100, 500;\n\t\tstroke-dashoffset: 0;\n\t}\n\t100% {\n\t\tstroke-dasharray: 0, 500;\n\t\tstroke-dashoffset: -100;\n\t}\n}\n\n.prism-previewer-time:before {\n\tborder-radius: 50%;\n\tbackground: #fff;\n}\n.prism-previewer-time:after {\n\tmargin-top: 4px;\n}\n.prism-previewer-time svg {\n\twidth: 32px;\n\theight: 32px;\n\t-webkit-transform: rotate(-90deg);\n\t-moz-transform: rotate(-90deg);\n\t-ms-transform: rotate(-90deg);\n\t-o-transform: rotate(-90deg);\n\ttransform: rotate(-90deg);\n}\n.prism-previewer-time circle {\n\tfill: transparent;\n\tstroke: hsl(200, 10%, 20%);\n\tstroke-opacity: 0.9;\n\tstroke-width: 32;\n\tstroke-dasharray: 0, 500;\n\tstroke-dashoffset: 0;\n\t-webkit-animation: prism-previewer-time linear infinite 3s;\n\t-moz-animation: prism-previewer-time linear infinite 3s;\n\t-o-animation: prism-previewer-time linear infinite 3s;\n\tanimation: prism-previewer-time linear infinite 3s;\n}/components/prism-nix.js\u0005Prism.languages.nix = {\n\t'comment': {\n\t\tpattern: /\\/\\*[\\s\\S]*?\\*\\/|#.*/,\n\t\tgreedy: true\n\t},\n\t'string': {\n\t\tpattern: /\"(?:[^\"\\\\]|\\\\[\\s\\S])*\"|''(?:(?!'')[\\s\\S]|''(?:'|\\\\|\\$\\{))*''/,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'interpolation': {\n\t\t\t\t// The lookbehind ensures the ${} is not preceded by \\ or ''\n\t\t\t\tpattern: /(^|(?:^|(?!'').)[^\\\\])\\$\\{(?:[^{}]|\\{[^}]*\\})*\\}/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: null // see below\n\t\t\t}\n\t\t}\n\t},\n\t'url': [\n\t\t/\\b(?:[a-z]{3,7}:\\/\\/)[\\w\\-+%~\\/.:#=?&]+/,\n\t\t{\n\t\t\tpattern: /([^\\/])(?:[\\w\\-+%~.:#=?&]*(?!\\/\\/)[\\w\\-+%~\\/.:#=?&])?(?!\\/\\/)\\/[\\w\\-+%~\\/.:#=?&]*/,\n\t\t\tlookbehind: true\n\t\t}\n\t],\n\t'antiquotation': {\n\t\tpattern: /\\$(?=\\{)/,\n\t\talias: 'important'\n\t},\n\t'number': /\\b\\d+\\b/,\n\t'keyword': /\\b(?:assert|builtins|else|if|in|inherit|let|null|or|then|with)\\b/,\n\t'function': /\\b(?:abort|add|all|any|attrNames|attrValues|baseNameOf|compareVersions|concatLists|currentSystem|deepSeq|derivation|dirOf|div|elem(?:At)?|fetch(?:Tarball|url)|filter(?:Source)?|fromJSON|genList|getAttr|getEnv|hasAttr|hashString|head|import|intersectAttrs|is(?:Attrs|Bool|Function|Int|List|Null|String)|length|lessThan|listToAttrs|map|mul|parseDrvName|pathExists|read(?:Dir|File)|removeAttrs|replaceStrings|seq|sort|stringLength|sub(?:string)?|tail|throw|to(?:File|JSON|Path|String|XML)|trace|typeOf)\\b|\\bfoldl'\\B/,\n\t'boolean': /\\b(?:false|true)\\b/,\n\t'operator': /[=!<>]=?|\\+\\+?|\\|\\||&&|\\/\\/|->?|[?@]/,\n\t'punctuation': /[{}()[\\].,:;]/\n};\n\nPrism.languages.nix.string.inside.interpolation.inside = Prism.languages.nix;\n!/components/prism-brightscript.js\u0005\u000fPrism.languages.brightscript = {\n\t'comment': /(?:\\brem|').*/i,\n\t'directive-statement': {\n\t\tpattern: /(^[\\t ]*)#(?:const|else(?:[\\t ]+if)?|end[\\t ]+if|error|if).*/im,\n\t\tlookbehind: true,\n\t\talias: 'property',\n\t\tinside: {\n\t\t\t'error-message': {\n\t\t\t\tpattern: /(^#error).+/,\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\t'directive': {\n\t\t\t\tpattern: /^#(?:const|else(?:[\\t ]+if)?|end[\\t ]+if|error|if)/,\n\t\t\t\talias: 'keyword'\n\t\t\t},\n\t\t\t'expression': {\n\t\t\t\tpattern: /[\\s\\S]+/,\n\t\t\t\tinside: null // see below\n\t\t\t}\n\t\t}\n\t},\n\t'property': {\n\t\tpattern: /([\\r\\n{,][\\t ]*)(?:(?!\\d)\\w+|\"(?:[^\"\\r\\n]|\"\")*\"(?!\"))(?=[ \\t]*:)/,\n\t\tlookbehind: true,\n\t\tgreedy: true\n\t},\n\t'string': {\n\t\tpattern: /\"(?:[^\"\\r\\n]|\"\")*\"(?!\")/,\n\t\tgreedy: true\n\t},\n\t'class-name': {\n\t\tpattern: /(\\bAs[\\t ]+)\\w+/i,\n\t\tlookbehind: true\n\t},\n\t'keyword': /\\b(?:As|Dim|Each|Else|Elseif|End|Exit|For|Function|Goto|If|In|Print|Return|Step|Stop|Sub|Then|To|While)\\b/i,\n\t'boolean': /\\b(?:false|true)\\b/i,\n\t'function': /\\b(?!\\d)\\w+(?=[\\t ]*\\()/,\n\t'number': /(?:\\b\\d+(?:\\.\\d+)?(?:[ed][+-]\\d+)?|&h[a-f\\d]+)\\b[%&!#]?/i,\n\t'operator': /--|\\+\\+|>>=?|<<=?|<>|[-+*/\\\\<>]=?|[:^=?]|\\b(?:and|mod|not|or)\\b/i,\n\t'punctuation': /[.,;()[\\]{}]/,\n\t'constant': /\\b(?:LINE_NUM)\\b/i\n};\n\nPrism.languages.brightscript['directive-statement'].inside.expression.inside = Prism.languages.brightscript;\n/components/prism-renpy.js\u0011\u001dPrism.languages.renpy = {\n\t'comment': {\n\t\tpattern: /(^|[^\\\\])#.+/,\n\t\tlookbehind: true\n\t},\n\n\t'string': {\n\t\tpattern: /(\"\"\"|''')[\\s\\S]+?\\1|(\"|')(?:\\\\.|(?!\\2)[^\\\\])*\\2|(?:^#?(?:(?:[0-9a-fA-F]){3}|[0-9a-fA-F]{6})$)/m,\n\t\tgreedy: true\n\t},\n\n\t'function': /\\b[a-z_]\\w*(?=\\()/i,\n\n\t'property': /\\b(?:Update|UpdateVersion|action|activate_sound|adv_nvl_transition|after_load_transition|align|alpha|alt|anchor|antialias|area|auto|background|bar_invert|bar_resizing|bar_vertical|black_color|bold|bottom_bar|bottom_gutter|bottom_margin|bottom_padding|box_reverse|box_wrap|can_update|caret|child|color|crop|default_afm_enable|default_afm_time|default_fullscreen|default_text_cps|developer|directory_name|drag_handle|drag_joined|drag_name|drag_raise|draggable|dragged|drop_shadow|drop_shadow_color|droppable|dropped|easein|easeout|edgescroll|end_game_transition|end_splash_transition|enter_replay_transition|enter_sound|enter_transition|enter_yesno_transition|executable_name|exit_replay_transition|exit_sound|exit_transition|exit_yesno_transition|fadein|fadeout|first_indent|first_spacing|fit_first|focus|focus_mask|font|foreground|game_main_transition|get_installed_packages|google_play_key|google_play_salt|ground|has_music|has_sound|has_voice|height|help|hinting|hover|hover_background|hover_color|hover_sound|hovered|hyperlink_functions|idle|idle_color|image_style|include_update|insensitive|insensitive_background|insensitive_color|inside|intra_transition|italic|justify|kerning|keyboard_focus|language|layer_clipping|layers|layout|left_bar|left_gutter|left_margin|left_padding|length|line_leading|line_overlap_split|line_spacing|linear|main_game_transition|main_menu_music|maximum|min_width|minimum|minwidth|modal|mouse|mousewheel|name|narrator_menu|newline_indent|nvl_adv_transition|offset|order_reverse|outlines|overlay_functions|pos|position|prefix|radius|range|rest_indent|right_bar|right_gutter|right_margin|right_padding|rotate|rotate_pad|ruby_style|sample_sound|save_directory|say_attribute_transition|screen_height|screen_width|scrollbars|selected_hover|selected_hover_color|selected_idle|selected_idle_color|selected_insensitive|show_side_image|show_two_window|side_spacing|side_xpos|side_ypos|size|size_group|slow_cps|slow_cps_multiplier|spacing|strikethrough|subpixel|text_align|text_style|text_xpos|text_y_fudge|text_ypos|thumb|thumb_offset|thumb_shadow|thumbnail_height|thumbnail_width|time|top_bar|top_gutter|top_margin|top_padding|translations|underline|unscrollable|update|value|version|version_name|version_tuple|vertical|width|window_hide_transition|window_icon|window_left_padding|window_show_transition|window_title|windows_icon|xadjustment|xalign|xanchor|xanchoraround|xaround|xcenter|xfill|xinitial|xmargin|xmaximum|xminimum|xoffset|xofsset|xpadding|xpos|xsize|xzoom|yadjustment|yalign|yanchor|yanchoraround|yaround|ycenter|yfill|yinitial|ymargin|ymaximum|yminimum|yoffset|ypadding|ypos|ysize|ysizexysize|yzoom|zoom|zorder)\\b/,\n\n\t'tag': /\\b(?:bar|block|button|buttoscreenn|drag|draggroup|fixed|frame|grid|[hv]box|hotbar|hotspot|image|imagebutton|imagemap|input|key|label|menu|mm_menu_frame|mousearea|nvl|parallel|screen|self|side|tag|text|textbutton|timer|vbar|viewport|window)\\b|\\$/,\n\n\t'keyword': /\\b(?:None|add|adjustment|alignaround|allow|angle|animation|around|as|assert|behind|box_layout|break|build|cache|call|center|changed|child_size|choice|circles|class|clear|clicked|clipping|clockwise|config|contains|continue|corner1|corner2|counterclockwise|def|default|define|del|delay|disabled|disabled_text|dissolve|elif|else|event|except|exclude|exec|expression|fade|finally|for|from|function|global|gm_root|has|hide|id|if|import|in|init|is|jump|knot|lambda|left|less_rounded|mm_root|movie|music|null|on|onlayer|pass|pause|persistent|play|print|python|queue|raise|random|renpy|repeat|return|right|rounded_window|scene|scope|set|show|slow|slow_abortable|slow_done|sound|stop|store|style|style_group|substitute|suffix|theme|transform|transform_anchor|transpose|try|ui|unhovered|updater|use|voice|while|widget|widget_hover|widget_selected|widget_text|yield)\\b/,\n\n\t'boolean': /\\b(?:[Ff]alse|[Tt]rue)\\b/,\n\n\t'number': /(?:\\b(?:0[bo])?(?:(?:\\d|0x[\\da-f])[\\da-f]*(?:\\.\\d*)?)|\\B\\.\\d+)(?:e[+-]?\\d+)?j?/i,\n\n\t'operator': /[-+%=]=?|!=|\\*\\*?=?|\\/\\/?=?|<[<=>]?|>[=>]?|[&|^~]|\\b(?:and|at|not|or|with)\\b/,\n\n\t'punctuation': /[{}[\\];(),.:]/\n};\n\nPrism.languages.rpy = Prism.languages.renpy;\n/components/prism-ruby.js\u0013Z/**\n * Original by Samuel Flores\n *\n * Adds the following new token classes:\n *     constant, builtin, variable, symbol, regex\n */\n(function (Prism) {\n\tPrism.languages.ruby = Prism.languages.extend('clike', {\n\t\t'comment': {\n\t\t\tpattern: /#.*|^=begin\\s[\\s\\S]*?^=end/m,\n\t\t\tgreedy: true\n\t\t},\n\t\t'class-name': {\n\t\t\tpattern: /(\\b(?:class|module)\\s+|\\bcatch\\s+\\()[\\w.\\\\]+|\\b[A-Z_]\\w*(?=\\s*\\.\\s*new\\b)/,\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'punctuation': /[.\\\\]/\n\t\t\t}\n\t\t},\n\t\t'keyword': /\\b(?:BEGIN|END|alias|and|begin|break|case|class|def|define_method|defined|do|each|else|elsif|end|ensure|extend|for|if|in|include|module|new|next|nil|not|or|prepend|private|protected|public|raise|redo|require|rescue|retry|return|self|super|then|throw|undef|unless|until|when|while|yield)\\b/,\n\t\t'operator': /\\.{2,3}|&\\.|===|<?=>|[!=]?~|(?:&&|\\|\\||<<|>>|\\*\\*|[+\\-*/%<>!^&|=])=?|[?:]/,\n\t\t'punctuation': /[(){}[\\].,;]/,\n\t});\n\n\tPrism.languages.insertBefore('ruby', 'operator', {\n\t\t'double-colon': {\n\t\t\tpattern: /::/,\n\t\t\talias: 'punctuation'\n\t\t},\n\t});\n\n\tvar interpolation = {\n\t\tpattern: /((?:^|[^\\\\])(?:\\\\{2})*)#\\{(?:[^{}]|\\{[^{}]*\\})*\\}/,\n\t\tlookbehind: true,\n\t\tinside: {\n\t\t\t'content': {\n\t\t\t\tpattern: /^(#\\{)[\\s\\S]+(?=\\}$)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: Prism.languages.ruby\n\t\t\t},\n\t\t\t'delimiter': {\n\t\t\t\tpattern: /^#\\{|\\}$/,\n\t\t\t\talias: 'punctuation'\n\t\t\t}\n\t\t}\n\t};\n\n\tdelete Prism.languages.ruby.function;\n\n\tvar percentExpression = '(?:' + [\n\t\t/([^a-zA-Z0-9\\s{(\\[<=])(?:(?!\\1)[^\\\\]|\\\\[\\s\\S])*\\1/.source,\n\t\t/\\((?:[^()\\\\]|\\\\[\\s\\S]|\\((?:[^()\\\\]|\\\\[\\s\\S])*\\))*\\)/.source,\n\t\t/\\{(?:[^{}\\\\]|\\\\[\\s\\S]|\\{(?:[^{}\\\\]|\\\\[\\s\\S])*\\})*\\}/.source,\n\t\t/\\[(?:[^\\[\\]\\\\]|\\\\[\\s\\S]|\\[(?:[^\\[\\]\\\\]|\\\\[\\s\\S])*\\])*\\]/.source,\n\t\t/<(?:[^<>\\\\]|\\\\[\\s\\S]|<(?:[^<>\\\\]|\\\\[\\s\\S])*>)*>/.source\n\t].join('|') + ')';\n\n\tvar symbolName = /(?:\"(?:\\\\.|[^\"\\\\\\r\\n])*\"|(?:\\b[a-zA-Z_]\\w*|[^\\s\\0-\\x7F]+)[?!]?|\\$.)/.source;\n\n\tPrism.languages.insertBefore('ruby', 'keyword', {\n\t\t'regex-literal': [\n\t\t\t{\n\t\t\t\tpattern: RegExp(/%r/.source + percentExpression + /[egimnosux]{0,6}/.source),\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'interpolation': interpolation,\n\t\t\t\t\t'regex': /[\\s\\S]+/\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /(^|[^/])\\/(?!\\/)(?:\\[[^\\r\\n\\]]+\\]|\\\\.|[^[/\\\\\\r\\n])+\\/[egimnosux]{0,6}(?=\\s*(?:$|[\\r\\n,.;})#]))/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'interpolation': interpolation,\n\t\t\t\t\t'regex': /[\\s\\S]+/\n\t\t\t\t}\n\t\t\t}\n\t\t],\n\t\t'variable': /[@$]+[a-zA-Z_]\\w*(?:[?!]|\\b)/,\n\t\t'symbol': [\n\t\t\t{\n\t\t\t\tpattern: RegExp(/(^|[^:]):/.source + symbolName),\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: RegExp(/([\\r\\n{(,][ \\t]*)/.source + symbolName + /(?=:(?!:))/.source),\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true\n\t\t\t},\n\t\t],\n\t\t'method-definition': {\n\t\t\tpattern: /(\\bdef\\s+)\\w+(?:\\s*\\.\\s*\\w+)?/,\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'function': /\\b\\w+$/,\n\t\t\t\t'keyword': /^self\\b/,\n\t\t\t\t'class-name': /^\\w+/,\n\t\t\t\t'punctuation': /\\./\n\t\t\t}\n\t\t}\n\t});\n\n\tPrism.languages.insertBefore('ruby', 'string', {\n\t\t'string-literal': [\n\t\t\t{\n\t\t\t\tpattern: RegExp(/%[qQiIwWs]?/.source + percentExpression),\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'interpolation': interpolation,\n\t\t\t\t\t'string': /[\\s\\S]+/\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /(\"|')(?:#\\{[^}]+\\}|#(?!\\{)|\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\#\\r\\n])*\\1/,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'interpolation': interpolation,\n\t\t\t\t\t'string': /[\\s\\S]+/\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /<<[-~]?([a-z_]\\w*)[\\r\\n](?:.*[\\r\\n])*?[\\t ]*\\1/i,\n\t\t\t\talias: 'heredoc-string',\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'delimiter': {\n\t\t\t\t\t\tpattern: /^<<[-~]?[a-z_]\\w*|\\b[a-z_]\\w*$/i,\n\t\t\t\t\t\tinside: {\n\t\t\t\t\t\t\t'symbol': /\\b\\w+/,\n\t\t\t\t\t\t\t'punctuation': /^<<[-~]?/\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t'interpolation': interpolation,\n\t\t\t\t\t'string': /[\\s\\S]+/\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /<<[-~]?'([a-z_]\\w*)'[\\r\\n](?:.*[\\r\\n])*?[\\t ]*\\1/i,\n\t\t\t\talias: 'heredoc-string',\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'delimiter': {\n\t\t\t\t\t\tpattern: /^<<[-~]?'[a-z_]\\w*'|\\b[a-z_]\\w*$/i,\n\t\t\t\t\t\tinside: {\n\t\t\t\t\t\t\t'symbol': /\\b\\w+/,\n\t\t\t\t\t\t\t'punctuation': /^<<[-~]?'|'$/,\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t'string': /[\\s\\S]+/\n\t\t\t\t}\n\t\t\t}\n\t\t],\n\t\t'command-literal': [\n\t\t\t{\n\t\t\t\tpattern: RegExp(/%x/.source + percentExpression),\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'interpolation': interpolation,\n\t\t\t\t\t'command': {\n\t\t\t\t\t\tpattern: /[\\s\\S]+/,\n\t\t\t\t\t\talias: 'string'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /`(?:#\\{[^}]+\\}|#(?!\\{)|\\\\(?:\\r\\n|[\\s\\S])|[^\\\\`#\\r\\n])*`/,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'interpolation': interpolation,\n\t\t\t\t\t'command': {\n\t\t\t\t\t\tpattern: /[\\s\\S]+/,\n\t\t\t\t\t\talias: 'string'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t]\n\t});\n\n\tdelete Prism.languages.ruby.string;\n\n\tPrism.languages.insertBefore('ruby', 'number', {\n\t\t'builtin': /\\b(?:Array|Bignum|Binding|Class|Continuation|Dir|Exception|FalseClass|File|Fixnum|Float|Hash|IO|Integer|MatchData|Method|Module|NilClass|Numeric|Object|Proc|Range|Regexp|Stat|String|Struct|Symbol|TMS|Thread|ThreadGroup|Time|TrueClass)\\b/,\n\t\t'constant': /\\b[A-Z][A-Z0-9_]*(?:[?!]|\\b)/\n\t});\n\n\tPrism.languages.rb = Prism.languages.ruby;\n}(Prism));\n&/components/prism-markup-templating.js\r(function (Prism) {\n\n\t/**\n\t * Returns the placeholder for the given language id and index.\n\t *\n\t * @param {string} language\n\t * @param {string|number} index\n\t * @returns {string}\n\t */\n\tfunction getPlaceholder(language, index) {\n\t\treturn '___' + language.toUpperCase() + index + '___';\n\t}\n\n\tObject.defineProperties(Prism.languages['markup-templating'] = {}, {\n\t\tbuildPlaceholders: {\n\t\t\t/**\n\t\t\t * Tokenize all inline templating expressions matching `placeholderPattern`.\n\t\t\t *\n\t\t\t * If `replaceFilter` is provided, only matches of `placeholderPattern` for which `replaceFilter` returns\n\t\t\t * `true` will be replaced.\n\t\t\t *\n\t\t\t * @param {object} env The environment of the `before-tokenize` hook.\n\t\t\t * @param {string} language The language id.\n\t\t\t * @param {RegExp} placeholderPattern The matches of this pattern will be replaced by placeholders.\n\t\t\t * @param {(match: string) => boolean} [replaceFilter]\n\t\t\t */\n\t\t\tvalue: function (env, language, placeholderPattern, replaceFilter) {\n\t\t\t\tif (env.language !== language) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar tokenStack = env.tokenStack = [];\n\n\t\t\t\tenv.code = env.code.replace(placeholderPattern, function (match) {\n\t\t\t\t\tif (typeof replaceFilter === 'function' && !replaceFilter(match)) {\n\t\t\t\t\t\treturn match;\n\t\t\t\t\t}\n\t\t\t\t\tvar i = tokenStack.length;\n\t\t\t\t\tvar placeholder;\n\n\t\t\t\t\t// Check for existing strings\n\t\t\t\t\twhile (env.code.indexOf(placeholder = getPlaceholder(language, i)) !== -1) {\n\t\t\t\t\t\t++i;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Create a sparse array\n\t\t\t\t\ttokenStack[i] = match;\n\n\t\t\t\t\treturn placeholder;\n\t\t\t\t});\n\n\t\t\t\t// Switch the grammar to markup\n\t\t\t\tenv.grammar = Prism.languages.markup;\n\t\t\t}\n\t\t},\n\t\ttokenizePlaceholders: {\n\t\t\t/**\n\t\t\t * Replace placeholders with proper tokens after tokenizing.\n\t\t\t *\n\t\t\t * @param {object} env The environment of the `after-tokenize` hook.\n\t\t\t * @param {string} language The language id.\n\t\t\t */\n\t\t\tvalue: function (env, language) {\n\t\t\t\tif (env.language !== language || !env.tokenStack) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Switch the grammar back\n\t\t\t\tenv.grammar = Prism.languages[language];\n\n\t\t\t\tvar j = 0;\n\t\t\t\tvar keys = Object.keys(env.tokenStack);\n\n\t\t\t\tfunction walkTokens(tokens) {\n\t\t\t\t\tfor (var i = 0; i < tokens.length; i++) {\n\t\t\t\t\t\t// all placeholders are replaced already\n\t\t\t\t\t\tif (j >= keys.length) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar token = tokens[i];\n\t\t\t\t\t\tif (typeof token === 'string' || (token.content && typeof token.content === 'string')) {\n\t\t\t\t\t\t\tvar k = keys[j];\n\t\t\t\t\t\t\tvar t = env.tokenStack[k];\n\t\t\t\t\t\t\tvar s = typeof token === 'string' ? token : token.content;\n\t\t\t\t\t\t\tvar placeholder = getPlaceholder(language, k);\n\n\t\t\t\t\t\t\tvar index = s.indexOf(placeholder);\n\t\t\t\t\t\t\tif (index > -1) {\n\t\t\t\t\t\t\t\t++j;\n\n\t\t\t\t\t\t\t\tvar before = s.substring(0, index);\n\t\t\t\t\t\t\t\tvar middle = new Prism.Token(language, Prism.tokenize(t, env.grammar), 'language-' + language, t);\n\t\t\t\t\t\t\t\tvar after = s.substring(index + placeholder.length);\n\n\t\t\t\t\t\t\t\tvar replacement = [];\n\t\t\t\t\t\t\t\tif (before) {\n\t\t\t\t\t\t\t\t\treplacement.push.apply(replacement, walkTokens([before]));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treplacement.push(middle);\n\t\t\t\t\t\t\t\tif (after) {\n\t\t\t\t\t\t\t\t\treplacement.push.apply(replacement, walkTokens([after]));\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (typeof token === 'string') {\n\t\t\t\t\t\t\t\t\ttokens.splice.apply(tokens, [i, 1].concat(replacement));\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\ttoken.content = replacement;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (token.content /* && typeof token.content !== 'string' */) {\n\t\t\t\t\t\t\twalkTokens(token.content);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn tokens;\n\t\t\t\t}\n\n\t\t\t\twalkTokens(env.tokens);\n\t\t\t}\n\t\t}\n\t});\n\n}(Prism));\n'/plugins/autolinker/prism-autolinker.js\u0007W(function () {\n\n\tif (typeof Prism === 'undefined') {\n\t\treturn;\n\t}\n\n\tvar url = /\\b([a-z]{3,7}:\\/\\/|tel:)[\\w\\-+%~/.:=&!$'()*,;@]+(?:\\?[\\w\\-+%~/.:=?&!$'()*,;@]*)?(?:#[\\w\\-+%~/.:#=?&!$'()*,;@]*)?/;\n\tvar email = /\\b\\S+@[\\w.]+[a-z]{2}/;\n\tvar linkMd = /\\[([^\\]]+)\\]\\(([^)]+)\\)/;\n\n\t// Tokens that may contain URLs and emails\n\tvar candidates = ['comment', 'url', 'attr-value', 'string'];\n\n\tPrism.plugins.autolinker = {\n\t\tprocessGrammar: function (grammar) {\n\t\t\t// Abort if grammar has already been processed\n\t\t\tif (!grammar || grammar['url-link']) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tPrism.languages.DFS(grammar, function (key, def, type) {\n\t\t\t\tif (candidates.indexOf(type) > -1 && !Array.isArray(def)) {\n\t\t\t\t\tif (!def.pattern) {\n\t\t\t\t\t\tdef = this[key] = {\n\t\t\t\t\t\t\tpattern: def\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\tdef.inside = def.inside || {};\n\n\t\t\t\t\tif (type == 'comment') {\n\t\t\t\t\t\tdef.inside['md-link'] = linkMd;\n\t\t\t\t\t}\n\t\t\t\t\tif (type == 'attr-value') {\n\t\t\t\t\t\tPrism.languages.insertBefore('inside', 'punctuation', { 'url-link': url }, def);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdef.inside['url-link'] = url;\n\t\t\t\t\t}\n\n\t\t\t\t\tdef.inside['email-link'] = email;\n\t\t\t\t}\n\t\t\t});\n\t\t\tgrammar['url-link'] = url;\n\t\t\tgrammar['email-link'] = email;\n\t\t}\n\t};\n\n\tPrism.hooks.add('before-highlight', function (env) {\n\t\tPrism.plugins.autolinker.processGrammar(env.grammar);\n\t});\n\n\tPrism.hooks.add('wrap', function (env) {\n\t\tif (/-link$/.test(env.type)) {\n\t\t\tenv.tag = 'a';\n\n\t\t\tvar href = env.content;\n\n\t\t\tif (env.type == 'email-link' && href.indexOf('mailto:') != 0) {\n\t\t\t\thref = 'mailto:' + href;\n\t\t\t} else if (env.type == 'md-link') {\n\t\t\t\t// Markdown\n\t\t\t\tvar match = env.content.match(linkMd);\n\n\t\t\t\thref = match[2];\n\t\t\t\tenv.content = match[1];\n\t\t\t}\n\n\t\t\tenv.attributes.href = href;\n\n\t\t\t// Silently catch any error thrown by decodeURIComponent (#1186)\n\t\t\ttry {\n\t\t\t\tenv.content = decodeURIComponent(env.content);\n\t\t\t} catch (e) { /* noop */ }\n\t\t}\n\t});\n\n}());\n1/plugins/show-invisibles/prism-show-invisibles.js\u0006(function () {\n\n\tif (typeof Prism === 'undefined') {\n\t\treturn;\n\t}\n\n\n\tvar invisibles = {\n\t\t'tab': /\\t/,\n\t\t'crlf': /\\r\\n/,\n\t\t'lf': /\\n/,\n\t\t'cr': /\\r/,\n\t\t'space': / /\n\t};\n\n\n\t/**\n\t * Handles the recursive calling of `addInvisibles` for one token.\n\t *\n\t * @param {Object|Array} tokens The grammar or array which contains the token.\n\t * @param {string|number} name The name or index of the token in `tokens`.\n\t */\n\tfunction handleToken(tokens, name) {\n\t\tvar value = tokens[name];\n\n\t\tvar type = Prism.util.type(value);\n\t\tswitch (type) {\n\t\t\tcase 'RegExp':\n\t\t\t\tvar inside = {};\n\t\t\t\ttokens[name] = {\n\t\t\t\t\tpattern: value,\n\t\t\t\t\tinside: inside\n\t\t\t\t};\n\t\t\t\taddInvisibles(inside);\n\t\t\t\tbreak;\n\n\t\t\tcase 'Array':\n\t\t\t\tfor (var i = 0, l = value.length; i < l; i++) {\n\t\t\t\t\thandleToken(value, i);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tdefault: // 'Object'\n\t\t\t\t// eslint-disable-next-line no-redeclare\n\t\t\t\tvar inside = value.inside || (value.inside = {});\n\t\t\t\taddInvisibles(inside);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\t/**\n\t * Recursively adds patterns to match invisible characters to the given grammar (if not added already).\n\t *\n\t * @param {Object} grammar\n\t */\n\tfunction addInvisibles(grammar) {\n\t\tif (!grammar || grammar['tab']) {\n\t\t\treturn;\n\t\t}\n\n\t\t// assign invisibles here to \"mark\" the grammar in case of self references\n\t\tfor (var name in invisibles) {\n\t\t\tif (invisibles.hasOwnProperty(name)) {\n\t\t\t\tgrammar[name] = invisibles[name];\n\t\t\t}\n\t\t}\n\n\t\t// eslint-disable-next-line no-redeclare\n\t\tfor (var name in grammar) {\n\t\t\tif (grammar.hasOwnProperty(name) && !invisibles[name]) {\n\t\t\t\tif (name === 'rest') {\n\t\t\t\t\taddInvisibles(grammar['rest']);\n\t\t\t\t} else {\n\t\t\t\t\thandleToken(grammar, name);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tPrism.hooks.add('before-highlight', function (env) {\n\t\taddInvisibles(env.grammar);\n\t});\n}());\n/components/prism-stan.min.js\u0005!function(e){var r=/\\b(?:algebra_solver|algebra_solver_newton|integrate_1d|integrate_ode|integrate_ode_bdf|integrate_ode_rk45|map_rect|ode_(?:adams|bdf|ckrk|rk45)(?:_tol)?|ode_adjoint_tol_ctl|reduce_sum|reduce_sum_static)\\b/;e.languages.stan={comment:/\\/\\/.*|\\/\\*[\\s\\S]*?\\*\\/|#(?!include).*/,string:{pattern:/\"[\\x20\\x21\\x23-\\x5B\\x5D-\\x7E]*\"/,greedy:!0},directive:{pattern:/^([ \\t]*)#include\\b.*/m,lookbehind:!0,alias:\"property\"},\"function-arg\":{pattern:RegExp(\"(\"+r.source+\"\\\\s*\\\\(\\\\s*)[a-zA-Z]\\\\w*\"),lookbehind:!0,alias:\"function\"},constraint:{pattern:/(\\b(?:int|matrix|real|row_vector|vector)\\s*)<[^<>]*>/,lookbehind:!0,inside:{expression:{pattern:/(=\\s*)\\S(?:\\S|\\s+(?!\\s))*?(?=\\s*(?:>$|,\\s*\\w+\\s*=))/,lookbehind:!0,inside:null},property:/\\b[a-z]\\w*(?=\\s*=)/i,operator:/=/,punctuation:/^<|>$|,/}},keyword:[{pattern:/\\bdata(?=\\s*\\{)|\\b(?:functions|generated|model|parameters|quantities|transformed)\\b/,alias:\"program-block\"},/\\b(?:array|break|cholesky_factor_corr|cholesky_factor_cov|complex|continue|corr_matrix|cov_matrix|data|else|for|if|in|increment_log_prob|int|matrix|ordered|positive_ordered|print|real|reject|return|row_vector|simplex|target|unit_vector|vector|void|while)\\b/,r],function:/\\b[a-z]\\w*(?=\\s*\\()/i,number:/(?:\\b\\d+(?:_\\d+)*(?:\\.(?:\\d+(?:_\\d+)*)?)?|\\B\\.\\d+(?:_\\d+)*)(?:E[+-]?\\d+(?:_\\d+)*)?i?(?!\\w)/i,boolean:/\\b(?:false|true)\\b/,operator:/<-|\\.[*/]=?|\\|\\|?|&&|[!=<>+\\-*/]=?|['^%~?:]/,punctuation:/[()\\[\\]{},;]/},e.languages.stan.constraint.inside.expression.inside=e.languages.stan}(Prism);#/components/prism-peoplecode.min.js\u0004Prism.languages.peoplecode={comment:RegExp([\"/\\\\*[^]*?\\\\*/\",\"\\\\bREM[^;]*;\",\"<\\\\*(?:[^<*]|\\\\*(?!>)|<(?!\\\\*)|<\\\\*(?:(?!\\\\*>)[^])*\\\\*>)*\\\\*>\",\"/\\\\+[^]*?\\\\+/\"].join(\"|\")),string:{pattern:/'(?:''|[^'\\r\\n])*'(?!')|\"(?:\"\"|[^\"\\r\\n])*\"(?!\")/,greedy:!0},variable:/%\\w+/,\"function-definition\":{pattern:/((?:^|[^\\w-])(?:function|method)\\s+)\\w+/i,lookbehind:!0,alias:\"function\"},\"class-name\":{pattern:/((?:^|[^-\\w])(?:as|catch|class|component|create|extends|global|implements|instance|local|of|property|returns)\\s+)\\w+(?::\\w+)*/i,lookbehind:!0,inside:{punctuation:/:/}},keyword:/\\b(?:abstract|alias|as|catch|class|component|constant|create|declare|else|end-(?:class|evaluate|for|function|get|if|method|set|try|while)|evaluate|extends|for|function|get|global|if|implements|import|instance|library|local|method|null|of|out|peopleCode|private|program|property|protected|readonly|ref|repeat|returns?|set|step|then|throw|to|try|until|value|when(?:-other)?|while)\\b/i,\"operator-keyword\":{pattern:/\\b(?:and|not|or)\\b/i,alias:\"operator\"},function:/[_a-z]\\w*(?=\\s*\\()/i,boolean:/\\b(?:false|true)\\b/i,number:/\\b\\d+(?:\\.\\d+)?\\b/,operator:/<>|[<>]=?|!=|\\*\\*|[-+*/|=@]/,punctuation:/[:.;,()[\\]]/},Prism.languages.pcode=Prism.languages.peoplecode;#/components/prism-apacheconf.min.js\u001fPrism.languages.apacheconf={comment:/#.*/,\"directive-inline\":{pattern:/(^[\\t ]*)\\b(?:AcceptFilter|AcceptPathInfo|AccessFileName|Action|Add(?:Alt|AltByEncoding|AltByType|Charset|DefaultCharset|Description|Encoding|Handler|Icon|IconByEncoding|IconByType|InputFilter|Language|ModuleInfo|OutputFilter|OutputFilterByType|Type)|Alias|AliasMatch|Allow(?:CONNECT|EncodedSlashes|Methods|Override|OverrideList)?|Anonymous(?:_LogEmail|_MustGiveEmail|_NoUserID|_VerifyEmail)?|AsyncRequestWorkerFactor|Auth(?:BasicAuthoritative|BasicFake|BasicProvider|BasicUseDigestAlgorithm|DBDUserPWQuery|DBDUserRealmQuery|DBMGroupFile|DBMType|DBMUserFile|Digest(?:Algorithm|Domain|NonceLifetime|Provider|Qop|ShmemSize)|Form(?:Authoritative|Body|DisableNoStore|FakeBasicAuth|Location|LoginRequiredLocation|LoginSuccessLocation|LogoutLocation|Method|Mimetype|Password|Provider|SitePassphrase|Size|Username)|GroupFile|LDAP(?:AuthorizePrefix|BindAuthoritative|BindDN|BindPassword|CharsetConfig|CompareAsUser|CompareDNOnServer|DereferenceAliases|GroupAttribute|GroupAttributeIsDN|InitialBindAsUser|InitialBindPattern|MaxSubGroupDepth|RemoteUserAttribute|RemoteUserIsDN|SearchAsUser|SubGroupAttribute|SubGroupClass|Url)|Merging|Name|nCache(?:Context|Enable|ProvideFor|SOCache|Timeout)|nzFcgiCheckAuthnProvider|nzFcgiDefineProvider|Type|UserFile|zDBDLoginToReferer|zDBDQuery|zDBDRedirectQuery|zDBMType|zSendForbiddenOnFailure)|BalancerGrowth|BalancerInherit|BalancerMember|BalancerPersist|BrowserMatch|BrowserMatchNoCase|BufferedLogs|BufferSize|Cache(?:DefaultExpire|DetailHeader|DirLength|DirLevels|Disable|Enable|File|Header|IgnoreCacheControl|IgnoreHeaders|IgnoreNoLastMod|IgnoreQueryString|IgnoreURLSessionIdentifiers|KeyBaseURL|LastModifiedFactor|Lock|LockMaxAge|LockPath|MaxExpire|MaxFileSize|MinExpire|MinFileSize|NegotiatedDocs|QuickHandler|ReadSize|ReadTime|Root|Socache(?:MaxSize|MaxTime|MinTime|ReadSize|ReadTime)?|StaleOnError|StoreExpired|StoreNoStore|StorePrivate)|CGIDScriptTimeout|CGIMapExtension|CharsetDefault|CharsetOptions|CharsetSourceEnc|CheckCaseOnly|CheckSpelling|ChrootDir|ContentDigest|CookieDomain|CookieExpires|CookieName|CookieStyle|CookieTracking|CoreDumpDirectory|CustomLog|Dav|DavDepthInfinity|DavGenericLockDB|DavLockDB|DavMinTimeout|DBDExptime|DBDInitSQL|DBDKeep|DBDMax|DBDMin|DBDParams|DBDPersist|DBDPrepareSQL|DBDriver|DefaultIcon|DefaultLanguage|DefaultRuntimeDir|DefaultType|Define|Deflate(?:BufferSize|CompressionLevel|FilterNote|InflateLimitRequestBody|InflateRatio(?:Burst|Limit)|MemLevel|WindowSize)|Deny|DirectoryCheckHandler|DirectoryIndex|DirectoryIndexRedirect|DirectorySlash|DocumentRoot|DTracePrivileges|DumpIOInput|DumpIOOutput|EnableExceptionHook|EnableMMAP|EnableSendfile|Error|ErrorDocument|ErrorLog|ErrorLogFormat|Example|ExpiresActive|ExpiresByType|ExpiresDefault|ExtendedStatus|ExtFilterDefine|ExtFilterOptions|FallbackResource|FileETag|FilterChain|FilterDeclare|FilterProtocol|FilterProvider|FilterTrace|ForceLanguagePriority|ForceType|ForensicLog|GprofDir|GracefulShutdownTimeout|Group|Header|HeaderName|Heartbeat(?:Address|Listen|MaxServers|Storage)|HostnameLookups|IdentityCheck|IdentityCheckTimeout|ImapBase|ImapDefault|ImapMenu|Include|IncludeOptional|Index(?:HeadInsert|Ignore|IgnoreReset|Options|OrderDefault|StyleSheet)|InputSed|ISAPI(?:AppendLogToErrors|AppendLogToQuery|CacheFile|FakeAsync|LogNotSupported|ReadAheadBuffer)|KeepAlive|KeepAliveTimeout|KeptBodySize|LanguagePriority|LDAP(?:CacheEntries|CacheTTL|ConnectionPoolTTL|ConnectionTimeout|LibraryDebug|OpCacheEntries|OpCacheTTL|ReferralHopLimit|Referrals|Retries|RetryDelay|SharedCacheFile|SharedCacheSize|Timeout|TrustedClientCert|TrustedGlobalCert|TrustedMode|VerifyServerCert)|Limit(?:InternalRecursion|Request(?:Body|Fields|FieldSize|Line)|XMLRequestBody)|Listen|ListenBackLog|LoadFile|LoadModule|LogFormat|LogLevel|LogMessage|LuaAuthzProvider|LuaCodeCache|Lua(?:Hook(?:AccessChecker|AuthChecker|CheckUserID|Fixups|InsertFilter|Log|MapToStorage|TranslateName|TypeChecker)|Inherit|InputFilter|MapHandler|OutputFilter|PackageCPath|PackagePath|QuickHandler|Root|Scope)|Max(?:ConnectionsPerChild|KeepAliveRequests|MemFree|RangeOverlaps|RangeReversals|Ranges|RequestWorkers|SpareServers|SpareThreads|Threads)|MergeTrailers|MetaDir|MetaFiles|MetaSuffix|MimeMagicFile|MinSpareServers|MinSpareThreads|MMapFile|ModemStandard|ModMimeUsePathInfo|MultiviewsMatch|Mutex|NameVirtualHost|NoProxy|NWSSLTrustedCerts|NWSSLUpgradeable|Options|Order|OutputSed|PassEnv|PidFile|PrivilegesMode|Protocol|ProtocolEcho|Proxy(?:AddHeaders|BadHeader|Block|Domain|ErrorOverride|ExpressDBMFile|ExpressDBMType|ExpressEnable|FtpDirCharset|FtpEscapeWildcards|FtpListOnWildcard|HTML(?:BufSize|CharsetOut|DocType|Enable|Events|Extended|Fixups|Interp|Links|Meta|StripComments|URLMap)|IOBufferSize|MaxForwards|Pass(?:Inherit|InterpolateEnv|Match|Reverse|ReverseCookieDomain|ReverseCookiePath)?|PreserveHost|ReceiveBufferSize|Remote|RemoteMatch|Requests|SCGIInternalRedirect|SCGISendfile|Set|SourceAddress|Status|Timeout|Via)|ReadmeName|ReceiveBufferSize|Redirect|RedirectMatch|RedirectPermanent|RedirectTemp|ReflectorHeader|RemoteIP(?:Header|InternalProxy|InternalProxyList|ProxiesHeader|TrustedProxy|TrustedProxyList)|RemoveCharset|RemoveEncoding|RemoveHandler|RemoveInputFilter|RemoveLanguage|RemoveOutputFilter|RemoveType|RequestHeader|RequestReadTimeout|Require|Rewrite(?:Base|Cond|Engine|Map|Options|Rule)|RLimitCPU|RLimitMEM|RLimitNPROC|Satisfy|ScoreBoardFile|Script(?:Alias|AliasMatch|InterpreterSource|Log|LogBuffer|LogLength|Sock)?|SecureListen|SeeRequestTail|SendBufferSize|Server(?:Admin|Alias|Limit|Name|Path|Root|Signature|Tokens)|Session(?:Cookie(?:Name|Name2|Remove)|Crypto(?:Cipher|Driver|Passphrase|PassphraseFile)|DBD(?:CookieName|CookieName2|CookieRemove|DeleteLabel|InsertLabel|PerUser|SelectLabel|UpdateLabel)|Env|Exclude|Header|Include|MaxAge)?|SetEnv|SetEnvIf|SetEnvIfExpr|SetEnvIfNoCase|SetHandler|SetInputFilter|SetOutputFilter|SSIEndTag|SSIErrorMsg|SSIETag|SSILastModified|SSILegacyExprParser|SSIStartTag|SSITimeFormat|SSIUndefinedEcho|SSL(?:CACertificateFile|CACertificatePath|CADNRequestFile|CADNRequestPath|CARevocationCheck|CARevocationFile|CARevocationPath|CertificateChainFile|CertificateFile|CertificateKeyFile|CipherSuite|Compression|CryptoDevice|Engine|FIPS|HonorCipherOrder|InsecureRenegotiation|OCSP(?:DefaultResponder|Enable|OverrideResponder|ResponderTimeout|ResponseMaxAge|ResponseTimeSkew|UseRequestNonce)|OpenSSLConfCmd|Options|PassPhraseDialog|Protocol|Proxy(?:CACertificateFile|CACertificatePath|CARevocation(?:Check|File|Path)|CheckPeer(?:CN|Expire|Name)|CipherSuite|Engine|MachineCertificate(?:ChainFile|File|Path)|Protocol|Verify|VerifyDepth)|RandomSeed|RenegBufferSize|Require|RequireSSL|Session(?:Cache|CacheTimeout|TicketKeyFile|Tickets)|SRPUnknownUserSeed|SRPVerifierFile|Stapling(?:Cache|ErrorCacheTimeout|FakeTryLater|ForceURL|ResponderTimeout|ResponseMaxAge|ResponseTimeSkew|ReturnResponderErrors|StandardCacheTimeout)|StrictSNIVHostCheck|UserName|UseStapling|VerifyClient|VerifyDepth)|StartServers|StartThreads|Substitute|Suexec|SuexecUserGroup|ThreadLimit|ThreadsPerChild|ThreadStackSize|TimeOut|TraceEnable|TransferLog|TypesConfig|UnDefine|UndefMacro|UnsetEnv|Use|UseCanonicalName|UseCanonicalPhysicalPort|User|UserDir|VHostCGIMode|VHostCGIPrivs|VHostGroup|VHostPrivs|VHostSecure|VHostUser|Virtual(?:DocumentRoot|ScriptAlias)(?:IP)?|WatchdogInterval|XBitHack|xml2EncAlias|xml2EncDefault|xml2StartParse)\\b/im,lookbehind:!0,alias:\"property\"},\"directive-block\":{pattern:/<\\/?\\b(?:Auth[nz]ProviderAlias|Directory|DirectoryMatch|Else|ElseIf|Files|FilesMatch|If|IfDefine|IfModule|IfVersion|Limit|LimitExcept|Location|LocationMatch|Macro|Proxy|Require(?:All|Any|None)|VirtualHost)\\b.*>/i,inside:{\"directive-block\":{pattern:/^<\\/?\\w+/,inside:{punctuation:/^<\\/?/},alias:\"tag\"},\"directive-block-parameter\":{pattern:/.*[^>]/,inside:{punctuation:/:/,string:{pattern:/(\"|').*\\1/,inside:{variable:/[$%]\\{?(?:\\w\\.?[-+:]?)+\\}?/}}},alias:\"attr-value\"},punctuation:/>/},alias:\"tag\"},\"directive-flags\":{pattern:/\\[(?:[\\w=],?)+\\]/,alias:\"keyword\"},string:{pattern:/(\"|').*\\1/,inside:{variable:/[$%]\\{?(?:\\w\\.?[-+:]?)+\\}?/}},variable:/[$%]\\{?(?:\\w\\.?[-+:]?)+\\}?/,regex:/\\^?.*\\$|\\^.*\\$?/};2/plugins/show-invisibles/prism-show-invisibles.css\u0001.token.tab:not(:empty),\n.token.cr,\n.token.lf,\n.token.space {\n\tposition: relative;\n}\n\n.token.tab:not(:empty):before,\n.token.cr:before,\n.token.lf:before,\n.token.space:before {\n\tcolor: #808080;\n\topacity: 0.6;\n\tposition: absolute;\n}\n\n.token.tab:not(:empty):before {\n\tcontent: '\\21E5';\n}\n\n.token.cr:before {\n\tcontent: '\\240D';\n}\n\n.token.crlf:before {\n\tcontent: '\\240D\\240A';\n}\n.token.lf:before {\n\tcontent: '\\240A';\n}\n\n.token.space:before {\n\tcontent: '\\00B7';\n}\n/plugins/wpd/prism-wpd.min.csscode[class*=language-] a[href],pre[class*=language-] a[href]{cursor:help;text-decoration:none}code[class*=language-] a[href]:hover,pre[class*=language-] a[href]:hover{cursor:help;text-decoration:underline};/plugins/filter-highlight-all/prism-filter-highlight-all.js\rY(function () {\n\n\tif (typeof Prism === 'undefined' || typeof document === 'undefined') {\n\t\treturn;\n\t}\n\n\t// https://developer.mozilla.org/en-US/docs/Web/API/Element/matches#Polyfill\n\tif (!Element.prototype.matches) {\n\t\tElement.prototype.matches = Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector;\n\t}\n\n\tvar script = Prism.util.currentScript();\n\n\n\t/**\n\t * @type {Array<(element: HTMLElement) => boolean>}\n\t */\n\tvar filters = [];\n\n\tvar config = Prism.plugins.filterHighlightAll = {\n\n\t\t/**\n\t\t * Adds a new filter for the elements of `highlightAll` and `highlightAllUnder` such that only elements for\n\t\t * which the given function returns `true` will be highlighted.\n\t\t *\n\t\t * @param {(value: { element: HTMLElement, language: string }) => boolean} condition\n\t\t */\n\t\tadd: function (condition) {\n\t\t\tfilters.push(function (element) {\n\t\t\t\treturn condition({\n\t\t\t\t\telement: element,\n\t\t\t\t\tlanguage: Prism.util.getLanguage(element)\n\t\t\t\t});\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * Adds a new filter for the elements of `highlightAll` and `highlightAllUnder` such that only elements that\n\t\t * match the given CSS selection will be highlighted.\n\t\t *\n\t\t * @param {string} selector\n\t\t */\n\t\taddSelector: function (selector) {\n\t\t\tfilters.push(function (element) {\n\t\t\t\treturn element.matches(selector);\n\t\t\t});\n\t\t},\n\n\t\treject: {\n\n\t\t\t/**\n\t\t\t * Adds a new filter for the elements of `highlightAll` and `highlightAllUnder` such that only elements for\n\t\t\t * which the given function returns `false` will be highlighted.\n\t\t\t *\n\t\t\t * @param {(value: { element: HTMLElement, language: string }) => boolean} condition\n\t\t\t */\n\t\t\tadd: function (condition) {\n\t\t\t\tfilters.push(function (element) {\n\t\t\t\t\treturn !condition({\n\t\t\t\t\t\telement: element,\n\t\t\t\t\t\tlanguage: Prism.util.getLanguage(element)\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Adds a new filter for the elements of `highlightAll` and `highlightAllUnder` such that only elements that do\n\t\t\t * not match the given CSS selection will be highlighted.\n\t\t\t *\n\t\t\t * @param {string} selector\n\t\t\t */\n\t\t\taddSelector: function (selector) {\n\t\t\t\tfilters.push(function (element) {\n\t\t\t\t\treturn !element.matches(selector);\n\t\t\t\t});\n\t\t\t},\n\n\t\t},\n\n\t\t/**\n\t\t * Filters the elements of `highlightAll` and `highlightAllUnder` such that only elements with a known language\n\t\t * will be highlighted. All elements with an unset or unknown language will be ignored.\n\t\t *\n\t\t * __Note:__ This will effectively disable the AutoLoader plugin.\n\t\t *\n\t\t * @type {boolean}\n\t\t */\n\t\tfilterKnown: !!script && script.hasAttribute('data-filter-known')\n\t};\n\n\tconfig.add(function filterKnown(env) {\n\t\treturn !config.filterKnown || typeof Prism.languages[env.language] === 'object';\n\t});\n\n\tif (script) {\n\t\tvar attr;\n\t\tattr = script.getAttribute('data-filter-selector');\n\t\tif (attr) {\n\t\t\tconfig.addSelector(attr);\n\t\t}\n\t\tattr = script.getAttribute('data-reject-selector');\n\t\tif (attr) {\n\t\t\tconfig.reject.addSelector(attr);\n\t\t}\n\t}\n\n\t/**\n\t * Applies all filters to the given element and returns true if and only if every filter returned true on the\n\t * given element.\n\t *\n\t * @param {HTMLElement} element\n\t * @returns {boolean}\n\t */\n\tfunction combinedFilter(element) {\n\t\tfor (var i = 0, l = filters.length; i < l; i++) {\n\t\t\tif (!filters[i](element)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\tPrism.hooks.add('before-all-elements-highlight', function (env) {\n\t\tenv.elements = env.elements.filter(combinedFilter);\n\t});\n\n}());\n/themes/prism-okaidia.min.css\u0005dcode[class*=language-],pre[class*=language-]{color:#f8f8f2;background:0 0;text-shadow:0 1px rgba(0,0,0,.3);font-family:Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto;border-radius:.3em}:not(pre)>code[class*=language-],pre[class*=language-]{background:#272822}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#8292a2}.token.punctuation{color:#f8f8f2}.token.namespace{opacity:.7}.token.constant,.token.deleted,.token.property,.token.symbol,.token.tag{color:#f92672}.token.boolean,.token.number{color:#ae81ff}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color:#a6e22e}.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url,.token.variable{color:#f8f8f2}.token.atrule,.token.attr-value,.token.class-name,.token.function{color:#e6db74}.token.keyword{color:#66d9ef}.token.important,.token.regex{color:#fd971f}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}/components/prism-qore.min.js\u0003Prism.languages.qore=Prism.languages.extend(\"clike\",{comment:{pattern:/(^|[^\\\\])(?:\\/\\*[\\s\\S]*?\\*\\/|(?:\\/\\/|#).*)/,lookbehind:!0},string:{pattern:/(\"|')(?:\\\\[\\s\\S]|(?!\\1)[^\\\\])*\\1/,greedy:!0},keyword:/\\b(?:abstract|any|assert|binary|bool|boolean|break|byte|case|catch|char|class|code|const|continue|data|default|do|double|else|enum|extends|final|finally|float|for|goto|hash|if|implements|import|inherits|instanceof|int|interface|long|my|native|new|nothing|null|object|our|own|private|reference|rethrow|return|short|soft(?:bool|date|float|int|list|number|string)|static|strictfp|string|sub|super|switch|synchronized|this|throw|throws|transient|try|void|volatile|while)\\b/,boolean:/\\b(?:false|true)\\b/i,function:/\\$?\\b(?!\\d)\\w+(?=\\()/,number:/\\b(?:0b[01]+|0x(?:[\\da-f]*\\.)?[\\da-fp\\-]+|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:e\\d+)?[df]|(?:\\d+(?:\\.\\d+)?|\\.\\d+))\\b/i,operator:{pattern:/(^|[^.])(?:\\+[+=]?|-[-=]?|[!=](?:==?|~)?|>>?=?|<(?:=>?|<=?)?|&[&=]?|\\|[|=]?|[*\\/%^]=?|[~?])/,lookbehind:!0},variable:/\\$(?!\\d)\\w+\\b/});/components/prism-less.min.js\u0002Prism.languages.less=Prism.languages.extend(\"css\",{comment:[/\\/\\*[\\s\\S]*?\\*\\//,{pattern:/(^|[^\\\\])\\/\\/.*/,lookbehind:!0}],atrule:{pattern:/@[\\w-](?:\\((?:[^(){}]|\\([^(){}]*\\))*\\)|[^(){};\\s]|\\s+(?!\\s))*?(?=\\s*\\{)/,inside:{punctuation:/[:()]/}},selector:{pattern:/(?:@\\{[\\w-]+\\}|[^{};\\s@])(?:@\\{[\\w-]+\\}|\\((?:[^(){}]|\\([^(){}]*\\))*\\)|[^(){};@\\s]|\\s+(?!\\s))*?(?=\\s*\\{)/,inside:{variable:/@+[\\w-]+/}},property:/(?:@\\{[\\w-]+\\}|[\\w-])+(?:\\+_?)?(?=\\s*:)/,operator:/[+\\-*\\/]/}),Prism.languages.insertBefore(\"less\",\"property\",{variable:[{pattern:/@[\\w-]+\\s*:/,inside:{punctuation:/:/}},/@@?[\\w-]+/],\"mixin-usage\":{pattern:/([{;]\\s*)[.#](?!\\d)[\\w-].*?(?=[(;])/,lookbehind:!0,alias:\"function\"}});/components/prism-aql.js\u0005\u001cPrism.languages.aql = {\n\t'comment': /\\/\\/.*|\\/\\*[\\s\\S]*?\\*\\//,\n\t'property': {\n\t\tpattern: /([{,]\\s*)(?:(?!\\d)\\w+|([\"'´`])(?:(?!\\2)[^\\\\\\r\\n]|\\\\.)*\\2)(?=\\s*:)/,\n\t\tlookbehind: true,\n\t\tgreedy: true\n\t},\n\t'string': {\n\t\tpattern: /([\"'])(?:(?!\\1)[^\\\\\\r\\n]|\\\\.)*\\1/,\n\t\tgreedy: true\n\t},\n\t'identifier': {\n\t\tpattern: /([´`])(?:(?!\\1)[^\\\\\\r\\n]|\\\\.)*\\1/,\n\t\tgreedy: true\n\t},\n\t'variable': /@@?\\w+/,\n\t'keyword': [\n\t\t{\n\t\t\tpattern: /(\\bWITH\\s+)COUNT(?=\\s+INTO\\b)/i,\n\t\t\tlookbehind: true\n\t\t},\n\t\t/\\b(?:AGGREGATE|ALL|AND|ANY|ASC|COLLECT|DESC|DISTINCT|FILTER|FOR|GRAPH|IN|INBOUND|INSERT|INTO|K_PATHS|K_SHORTEST_PATHS|LET|LIKE|LIMIT|NONE|NOT|NULL|OR|OUTBOUND|REMOVE|REPLACE|RETURN|SHORTEST_PATH|SORT|UPDATE|UPSERT|WINDOW|WITH)\\b/i,\n\t\t// pseudo keywords get a lookbehind to avoid false positives\n\t\t{\n\t\t\tpattern: /(^|[^\\w.[])(?:KEEP|PRUNE|SEARCH|TO)\\b/i,\n\t\t\tlookbehind: true\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^\\w.[])(?:CURRENT|NEW|OLD)\\b/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t{\n\t\t\tpattern: /\\bOPTIONS(?=\\s*\\{)/i\n\t\t}\n\t],\n\t'function': /\\b(?!\\d)\\w+(?=\\s*\\()/,\n\t'boolean': /\\b(?:false|true)\\b/i,\n\t'range': {\n\t\tpattern: /\\.\\./,\n\t\talias: 'operator'\n\t},\n\t'number': [\n\t\t/\\b0b[01]+/i,\n\t\t/\\b0x[0-9a-f]+/i,\n\t\t/(?:\\B\\.\\d+|\\b(?:0|[1-9]\\d*)(?:\\.\\d+)?)(?:e[+-]?\\d+)?/i\n\t],\n\t'operator': /\\*{2,}|[=!]~|[!=<>]=?|&&|\\|\\||[-+*/%]/,\n\t'punctuation': /::|[?.:,;()[\\]{}]/\n};\n&/components/prism-supercollider.min.js\u0003VPrism.languages.supercollider={comment:{pattern:/\\/\\/.*|\\/\\*(?:[^*/]|\\*(?!\\/)|\\/(?!\\*)|\\/\\*(?:[^*]|\\*(?!\\/))*\\*\\/)*\\*\\//,greedy:!0},string:{pattern:/(^|[^\\\\])\"(?:[^\"\\\\]|\\\\[\\s\\S])*\"/,lookbehind:!0,greedy:!0},char:{pattern:/\\$(?:[^\\\\\\r\\n]|\\\\.)/,greedy:!0},symbol:{pattern:/(^|[^\\\\])'(?:[^'\\\\]|\\\\[\\s\\S])*'|\\\\\\w+/,lookbehind:!0,greedy:!0},keyword:/\\b(?:_|arg|classvar|const|nil|var|while)\\b/,boolean:/\\b(?:false|true)\\b/,label:{pattern:/\\b[a-z_]\\w*(?=\\s*:)/,alias:\"property\"},number:/\\b(?:inf|pi|0x[0-9a-fA-F]+|\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?(?:pi)?|\\d+r[0-9a-zA-Z]+(?:\\.[0-9a-zA-Z]+)?|\\d+[sb]{1,4}\\d*)\\b/,\"class-name\":/\\b[A-Z]\\w*\\b/,operator:/\\.{2,3}|#(?![[{])|&&|[!=]==?|\\+>>|\\+{1,3}|-[->]|=>|>>|\\?\\?|@\\|?@|\\|(?:@|[!=]=)?\\||!\\?|<[!=>]|\\*{1,2}|<{2,3}\\*?|[-!%&/<>?@|=`]/,punctuation:/[{}()[\\].:,;]|#[[{]/},Prism.languages.sclang=Prism.languages.supercollider;#/components/prism-naniscript.min.js\u0006!function(e){var a=/\\{[^\\r\\n\\[\\]{}]*\\}/,n={\"quoted-string\":{pattern:/\"(?:[^\"\\\\]|\\\\.)*\"/,alias:\"operator\"},\"command-param-id\":{pattern:/(\\s)\\w+:/,lookbehind:!0,alias:\"property\"},\"command-param-value\":[{pattern:a,alias:\"selector\"},{pattern:/([\\t ])\\S+/,lookbehind:!0,greedy:!0,alias:\"operator\"},{pattern:/\\S(?:.*\\S)?/,alias:\"operator\"}]};function t(e){return\"string\"==typeof e?e:Array.isArray(e)?e.map(t).join(\"\"):t(e.content)}e.languages.naniscript={comment:{pattern:/^([\\t ]*);.*/m,lookbehind:!0},define:{pattern:/^>.+/m,alias:\"tag\",inside:{value:{pattern:/(^>\\w+[\\t ]+)(?!\\s)[^{}\\r\\n]+/,lookbehind:!0,alias:\"operator\"},key:{pattern:/(^>)\\w+/,lookbehind:!0}}},label:{pattern:/^([\\t ]*)#[\\t ]*\\w+[\\t ]*$/m,lookbehind:!0,alias:\"regex\"},command:{pattern:/^([\\t ]*)@\\w+(?=[\\t ]|$).*/m,lookbehind:!0,alias:\"function\",inside:{\"command-name\":/^@\\w+/,expression:{pattern:a,greedy:!0,alias:\"selector\"},\"command-params\":{pattern:/\\s*\\S[\\s\\S]*/,inside:n}}},\"generic-text\":{pattern:/(^[ \\t]*)[^#@>;\\s].*/m,lookbehind:!0,alias:\"punctuation\",inside:{\"escaped-char\":/\\\\[{}\\[\\]\"]/,expression:{pattern:a,greedy:!0,alias:\"selector\"},\"inline-command\":{pattern:/\\[[\\t ]*\\w[^\\r\\n\\[\\]]*\\]/,greedy:!0,alias:\"function\",inside:{\"command-params\":{pattern:/(^\\[[\\t ]*\\w+\\b)[\\s\\S]+(?=\\]$)/,lookbehind:!0,inside:n},\"command-param-name\":{pattern:/^(\\[[\\t ]*)\\w+/,lookbehind:!0,alias:\"name\"},\"start-stop-char\":/[\\[\\]]/}}}}},e.languages.nani=e.languages.naniscript,e.hooks.add(\"after-tokenize\",(function(e){e.tokens.forEach((function(e){if(\"string\"!=typeof e&&\"generic-text\"===e.type){var a=t(e);(function(e){for(var a=[],n=0;n<e.length;n++){var t=e[n],r=\"[]{}\".indexOf(t);if(-1!==r)if(r%2==0)a.push(r+1);else if(a.pop()!==r)return!1}return 0===a.length})(a)||(e.type=\"bad-line\",e.content=a)}}))}))}(Prism);/components/prism-birb.js\u0002Prism.languages.birb = Prism.languages.extend('clike', {\n\t'string': {\n\t\tpattern: /r?(\"|')(?:\\\\.|(?!\\1)[^\\\\])*\\1/,\n\t\tgreedy: true\n\t},\n\t'class-name': [\n\t\t/\\b[A-Z](?:[\\d_]*[a-zA-Z]\\w*)?\\b/,\n\n\t\t// matches variable and function return types (parameters as well).\n\t\t/\\b(?:[A-Z]\\w*|(?!(?:var|void)\\b)[a-z]\\w*)(?=\\s+\\w+\\s*[;,=()])/\n\t],\n\t'keyword': /\\b(?:assert|break|case|class|const|default|else|enum|final|follows|for|grab|if|nest|new|next|noSeeb|return|static|switch|throw|var|void|while)\\b/,\n\t'operator': /\\+\\+|--|&&|\\|\\||<<=?|>>=?|~(?:\\/=?)?|[+\\-*\\/%&^|=!<>]=?|\\?|:/,\n\t'variable': /\\b[a-z_]\\w*\\b/,\n});\n\nPrism.languages.insertBefore('birb', 'function', {\n\t'metadata': {\n\t\tpattern: /<\\w+>/,\n\t\tgreedy: true,\n\t\talias: 'symbol'\n\t}\n});\n/components/prism-jq.min.js\u0004!function(e){var n=\"\\\\\\\\\\\\((?:[^()]|\\\\([^()]*\\\\))*\\\\)\",t=RegExp('(^|[^\\\\\\\\])\"(?:[^\"\\r\\n\\\\\\\\]|\\\\\\\\[^\\r\\n(]|__)*\"'.replace(/__/g,(function(){return n}))),i={interpolation:{pattern:RegExp(\"((?:^|[^\\\\\\\\])(?:\\\\\\\\{2})*)\"+n),lookbehind:!0,inside:{content:{pattern:/^(\\\\\\()[\\s\\S]+(?=\\)$)/,lookbehind:!0,inside:null},punctuation:/^\\\\\\(|\\)$/}}},a=e.languages.jq={comment:/#.*/,property:{pattern:RegExp(t.source+\"(?=\\\\s*:(?!:))\"),lookbehind:!0,greedy:!0,inside:i},string:{pattern:t,lookbehind:!0,greedy:!0,inside:i},function:{pattern:/(\\bdef\\s+)[a-z_]\\w+/i,lookbehind:!0},variable:/\\B\\$\\w+/,\"property-literal\":{pattern:/\\b[a-z_]\\w*(?=\\s*:(?!:))/i,alias:\"property\"},keyword:/\\b(?:as|break|catch|def|elif|else|end|foreach|if|import|include|label|module|modulemeta|null|reduce|then|try|while)\\b/,boolean:/\\b(?:false|true)\\b/,number:/(?:\\b\\d+\\.|\\B\\.)?\\b\\d+(?:[eE][+-]?\\d+)?\\b/,operator:[{pattern:/\\|=?/,alias:\"pipe\"},/\\.\\.|[!=<>]?=|\\?\\/\\/|\\/\\/=?|[-+*/%]=?|[<>?]|\\b(?:and|not|or)\\b/],\"c-style-function\":{pattern:/\\b[a-z_]\\w*(?=\\s*\\()/i,alias:\"function\"},punctuation:/::|[()\\[\\]{},:;]|\\.(?=\\s*[\\[\\w$])/,dot:{pattern:/\\./,alias:\"important\"}};i.interpolation.inside.content.inside=a}(Prism);#/components/prism-powerquery.min.js\u0007Prism.languages.powerquery={comment:{pattern:/(^|[^\\\\])(?:\\/\\*[\\s\\S]*?\\*\\/|\\/\\/.*)/,lookbehind:!0,greedy:!0},\"quoted-identifier\":{pattern:/#\"(?:[^\"\\r\\n]|\"\")*\"(?!\")/,greedy:!0},string:{pattern:/(?:#!)?\"(?:[^\"\\r\\n]|\"\")*\"(?!\")/,greedy:!0},constant:[/\\bDay\\.(?:Friday|Monday|Saturday|Sunday|Thursday|Tuesday|Wednesday)\\b/,/\\bTraceLevel\\.(?:Critical|Error|Information|Verbose|Warning)\\b/,/\\bOccurrence\\.(?:All|First|Last)\\b/,/\\bOrder\\.(?:Ascending|Descending)\\b/,/\\bRoundingMode\\.(?:AwayFromZero|Down|ToEven|TowardZero|Up)\\b/,/\\bMissingField\\.(?:Error|Ignore|UseNull)\\b/,/\\bQuoteStyle\\.(?:Csv|None)\\b/,/\\bJoinKind\\.(?:FullOuter|Inner|LeftAnti|LeftOuter|RightAnti|RightOuter)\\b/,/\\bGroupKind\\.(?:Global|Local)\\b/,/\\bExtraValues\\.(?:Error|Ignore|List)\\b/,/\\bJoinAlgorithm\\.(?:Dynamic|LeftHash|LeftIndex|PairwiseHash|RightHash|RightIndex|SortMerge)\\b/,/\\bJoinSide\\.(?:Left|Right)\\b/,/\\bPrecision\\.(?:Decimal|Double)\\b/,/\\bRelativePosition\\.From(?:End|Start)\\b/,/\\bTextEncoding\\.(?:Ascii|BigEndianUnicode|Unicode|Utf16|Utf8|Windows)\\b/,/\\b(?:Any|Binary|Date|DateTime|DateTimeZone|Duration|Function|Int16|Int32|Int64|Int8|List|Logical|None|Number|Record|Table|Text|Time)\\.Type\\b/,/\\bnull\\b/],boolean:/\\b(?:false|true)\\b/,keyword:/\\b(?:and|as|each|else|error|if|in|is|let|meta|not|nullable|optional|or|otherwise|section|shared|then|try|type)\\b|#(?:binary|date|datetime|datetimezone|duration|infinity|nan|sections|shared|table|time)\\b/,function:{pattern:/(^|[^#\\w.])[a-z_][\\w.]*(?=\\s*\\()/i,lookbehind:!0},\"data-type\":{pattern:/\\b(?:any|anynonnull|binary|date|datetime|datetimezone|duration|function|list|logical|none|number|record|table|text|time)\\b/,alias:\"class-name\"},number:{pattern:/\\b0x[\\da-f]+\\b|(?:[+-]?(?:\\b\\d+\\.)?\\b\\d+|[+-]\\.\\d+|(^|[^.])\\B\\.\\d+)(?:e[+-]?\\d+)?\\b/i,lookbehind:!0},operator:/[-+*\\/&?@^]|<(?:=>?|>)?|>=?|=>?|\\.\\.\\.?/,punctuation:/[,;\\[\\](){}]/},Prism.languages.pq=Prism.languages.powerquery,Prism.languages.mscript=Prism.languages.powerquery;//plugins/line-numbers/prism-line-numbers.min.js\n)!function(){if(\"undefined\"!=typeof Prism&&\"undefined\"!=typeof document){var e=\"line-numbers\",n=/\\n(?!$)/g,t=Prism.plugins.lineNumbers={getLine:function(n,t){if(\"PRE\"===n.tagName&&n.classList.contains(e)){var i=n.querySelector(\".line-numbers-rows\");if(i){var r=parseInt(n.getAttribute(\"data-start\"),10)||1,s=r+(i.children.length-1);t<r&&(t=r),t>s&&(t=s);var l=t-r;return i.children[l]}}},resize:function(e){r([e])},assumeViewportIndependence:!0},i=void 0;window.addEventListener(\"resize\",(function(){t.assumeViewportIndependence&&i===window.innerWidth||(i=window.innerWidth,r(Array.prototype.slice.call(document.querySelectorAll(\"pre.line-numbers\"))))})),Prism.hooks.add(\"complete\",(function(t){if(t.code){var i=t.element,s=i.parentNode;if(s&&/pre/i.test(s.nodeName)&&!i.querySelector(\".line-numbers-rows\")&&Prism.util.isActive(i,e)){i.classList.remove(e),s.classList.add(e);var l,o=t.code.match(n),a=o?o.length+1:1,u=new Array(a+1).join(\"<span></span>\");(l=document.createElement(\"span\")).setAttribute(\"aria-hidden\",\"true\"),l.className=\"line-numbers-rows\",l.innerHTML=u,s.hasAttribute(\"data-start\")&&(s.style.counterReset=\"linenumber \"+(parseInt(s.getAttribute(\"data-start\"),10)-1)),t.element.appendChild(l),r([s]),Prism.hooks.run(\"line-numbers\",t)}}})),Prism.hooks.add(\"line-numbers\",(function(e){e.plugins=e.plugins||{},e.plugins.lineNumbers=!0}))}function r(e){if(0!=(e=e.filter((function(e){var n,t=(n=e,n?window.getComputedStyle?getComputedStyle(n):n.currentStyle||null:null)[\"white-space\"];return\"pre-wrap\"===t||\"pre-line\"===t}))).length){var t=e.map((function(e){var t=e.querySelector(\"code\"),i=e.querySelector(\".line-numbers-rows\");if(t&&i){var r=e.querySelector(\".line-numbers-sizer\"),s=t.textContent.split(n);r||((r=document.createElement(\"span\")).className=\"line-numbers-sizer\",t.appendChild(r)),r.innerHTML=\"0\",r.style.display=\"block\";var l=r.getBoundingClientRect().height;return r.innerHTML=\"\",{element:e,lines:s,lineHeights:[],oneLinerHeight:l,sizer:r}}})).filter(Boolean);t.forEach((function(e){var n=e.sizer,t=e.lines,i=e.lineHeights,r=e.oneLinerHeight;i[t.length-1]=void 0,t.forEach((function(e,t){if(e&&e.length>1){var s=n.appendChild(document.createElement(\"span\"));s.style.display=\"block\",s.textContent=e}else i[t]=r}))})),t.forEach((function(e){for(var n=e.sizer,t=e.lineHeights,i=0,r=0;r<t.length;r++)void 0===t[r]&&(t[r]=n.children[i++].getBoundingClientRect().height)})),t.forEach((function(e){var n=e.sizer,t=e.element.querySelector(\".line-numbers-rows\");n.style.display=\"none\",n.innerHTML=\"\",e.lineHeights.forEach((function(e,n){t.children[n].style.height=e+\"px\"}))}))}}}();/components/prism-js-extras.js\u000e(function (Prism) {\n\n\tPrism.languages.insertBefore('javascript', 'function-variable', {\n\t\t'method-variable': {\n\t\t\tpattern: RegExp('(\\\\.\\\\s*)' + Prism.languages.javascript['function-variable'].pattern.source),\n\t\t\tlookbehind: true,\n\t\t\talias: ['function-variable', 'method', 'function', 'property-access']\n\t\t}\n\t});\n\n\tPrism.languages.insertBefore('javascript', 'function', {\n\t\t'method': {\n\t\t\tpattern: RegExp('(\\\\.\\\\s*)' + Prism.languages.javascript['function'].source),\n\t\t\tlookbehind: true,\n\t\t\talias: ['function', 'property-access']\n\t\t}\n\t});\n\n\tPrism.languages.insertBefore('javascript', 'constant', {\n\t\t'known-class-name': [\n\t\t\t{\n\t\t\t\t// standard built-ins\n\t\t\t\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects\n\t\t\t\tpattern: /\\b(?:(?:Float(?:32|64)|(?:Int|Uint)(?:8|16|32)|Uint8Clamped)?Array|ArrayBuffer|BigInt|Boolean|DataView|Date|Error|Function|Intl|JSON|(?:Weak)?(?:Map|Set)|Math|Number|Object|Promise|Proxy|Reflect|RegExp|String|Symbol|WebAssembly)\\b/,\n\t\t\t\talias: 'class-name'\n\t\t\t},\n\t\t\t{\n\t\t\t\t// errors\n\t\t\t\tpattern: /\\b(?:[A-Z]\\w*)Error\\b/,\n\t\t\t\talias: 'class-name'\n\t\t\t}\n\t\t]\n\t});\n\n\t/**\n\t * Replaces the `<ID>` placeholder in the given pattern with a pattern for general JS identifiers.\n\t *\n\t * @param {string} source\n\t * @param {string} [flags]\n\t * @returns {RegExp}\n\t */\n\tfunction withId(source, flags) {\n\t\treturn RegExp(\n\t\t\tsource.replace(/<ID>/g, function () { return /(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*/.source; }),\n\t\t\tflags);\n\t}\n\tPrism.languages.insertBefore('javascript', 'keyword', {\n\t\t'imports': {\n\t\t\t// https://tc39.es/ecma262/#sec-imports\n\t\t\tpattern: withId(/(\\bimport\\b\\s*)(?:<ID>(?:\\s*,\\s*(?:\\*\\s*as\\s+<ID>|\\{[^{}]*\\}))?|\\*\\s*as\\s+<ID>|\\{[^{}]*\\})(?=\\s*\\bfrom\\b)/.source),\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t},\n\t\t'exports': {\n\t\t\t// https://tc39.es/ecma262/#sec-exports\n\t\t\tpattern: withId(/(\\bexport\\b\\s*)(?:\\*(?:\\s*as\\s+<ID>)?(?=\\s*\\bfrom\\b)|\\{[^{}]*\\})/.source),\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t}\n\t});\n\n\tPrism.languages.javascript['keyword'].unshift(\n\t\t{\n\t\t\tpattern: /\\b(?:as|default|export|from|import)\\b/,\n\t\t\talias: 'module'\n\t\t},\n\t\t{\n\t\t\tpattern: /\\b(?:await|break|catch|continue|do|else|finally|for|if|return|switch|throw|try|while|yield)\\b/,\n\t\t\talias: 'control-flow'\n\t\t},\n\t\t{\n\t\t\tpattern: /\\bnull\\b/,\n\t\t\talias: ['null', 'nil']\n\t\t},\n\t\t{\n\t\t\tpattern: /\\bundefined\\b/,\n\t\t\talias: 'nil'\n\t\t}\n\t);\n\n\tPrism.languages.insertBefore('javascript', 'operator', {\n\t\t'spread': {\n\t\t\tpattern: /\\.{3}/,\n\t\t\talias: 'operator'\n\t\t},\n\t\t'arrow': {\n\t\t\tpattern: /=>/,\n\t\t\talias: 'operator'\n\t\t}\n\t});\n\n\tPrism.languages.insertBefore('javascript', 'punctuation', {\n\t\t'property-access': {\n\t\t\tpattern: withId(/(\\.\\s*)#?<ID>/.source),\n\t\t\tlookbehind: true\n\t\t},\n\t\t'maybe-class-name': {\n\t\t\tpattern: /(^|[^$\\w\\xA0-\\uFFFF])[A-Z][$\\w\\xA0-\\uFFFF]+/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'dom': {\n\t\t\t// this contains only a few commonly used DOM variables\n\t\t\tpattern: /\\b(?:document|(?:local|session)Storage|location|navigator|performance|window)\\b/,\n\t\t\talias: 'variable'\n\t\t},\n\t\t'console': {\n\t\t\tpattern: /\\bconsole(?=\\s*\\.)/,\n\t\t\talias: 'class-name'\n\t\t}\n\t});\n\n\n\t// add 'maybe-class-name' to tokens which might be a class name\n\tvar maybeClassNameTokens = ['function', 'function-variable', 'method', 'method-variable', 'property-access'];\n\n\tfor (var i = 0; i < maybeClassNameTokens.length; i++) {\n\t\tvar token = maybeClassNameTokens[i];\n\t\tvar value = Prism.languages.javascript[token];\n\n\t\t// convert regex to object\n\t\tif (Prism.util.type(value) === 'RegExp') {\n\t\t\tvalue = Prism.languages.javascript[token] = {\n\t\t\t\tpattern: value\n\t\t\t};\n\t\t}\n\n\t\t// keep in mind that we don't support arrays\n\n\t\tvar inside = value.inside || {};\n\t\tvalue.inside = inside;\n\n\t\tinside['maybe-class-name'] = /^[A-Z][\\s\\S]*/;\n\t}\n\n}(Prism));\n/components/prism-tcl.js\u0006Prism.languages.tcl = {\n\t'comment': {\n\t\tpattern: /(^|[^\\\\])#.*/,\n\t\tlookbehind: true\n\t},\n\t'string': {\n\t\tpattern: /\"(?:[^\"\\\\\\r\\n]|\\\\(?:\\r\\n|[\\s\\S]))*\"/,\n\t\tgreedy: true\n\t},\n\t'variable': [\n\t\t{\n\t\t\tpattern: /(\\$)(?:::)?(?:[a-zA-Z0-9]+::)*\\w+/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t{\n\t\t\tpattern: /(\\$)\\{[^}]+\\}/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t{\n\t\t\tpattern: /(^[\\t ]*set[ \\t]+)(?:::)?(?:[a-zA-Z0-9]+::)*\\w+/m,\n\t\t\tlookbehind: true\n\t\t}\n\t],\n\t'function': {\n\t\tpattern: /(^[\\t ]*proc[ \\t]+)\\S+/m,\n\t\tlookbehind: true\n\t},\n\t'builtin': [\n\t\t{\n\t\t\tpattern: /(^[\\t ]*)(?:break|class|continue|error|eval|exit|for|foreach|if|proc|return|switch|while)\\b/m,\n\t\t\tlookbehind: true\n\t\t},\n\t\t/\\b(?:else|elseif)\\b/\n\t],\n\t'scope': {\n\t\tpattern: /(^[\\t ]*)(?:global|upvar|variable)\\b/m,\n\t\tlookbehind: true,\n\t\talias: 'constant'\n\t},\n\t'keyword': {\n\t\tpattern: /(^[\\t ]*|\\[)(?:Safe_Base|Tcl|after|append|apply|array|auto_(?:execok|import|load|mkindex|qualify|reset)|automkindex_old|bgerror|binary|catch|cd|chan|clock|close|concat|dde|dict|encoding|eof|exec|expr|fblocked|fconfigure|fcopy|file(?:event|name)?|flush|gets|glob|history|http|incr|info|interp|join|lappend|lassign|lindex|linsert|list|llength|load|lrange|lrepeat|lreplace|lreverse|lsearch|lset|lsort|math(?:func|op)|memory|msgcat|namespace|open|package|parray|pid|pkg_mkIndex|platform|puts|pwd|re_syntax|read|refchan|regexp|registry|regsub|rename|scan|seek|set|socket|source|split|string|subst|tcl(?:_endOfWord|_findLibrary|startOf(?:Next|Previous)Word|test|vars|wordBreak(?:After|Before))|tell|time|tm|trace|unknown|unload|unset|update|uplevel|vwait)\\b/m,\n\t\tlookbehind: true\n\t},\n\t'operator': /!=?|\\*\\*?|==|&&?|\\|\\|?|<[=<]?|>[=>]?|[-+~\\/%?^]|\\b(?:eq|in|ne|ni)\\b/,\n\t'punctuation': /[{}()\\[\\]]/\n};\n/components/prism-groovy.js\b(function (Prism) {\n\n\tvar interpolation = {\n\t\tpattern: /((?:^|[^\\\\$])(?:\\\\{2})*)\\$(?:\\w+|\\{[^{}]*\\})/,\n\t\tlookbehind: true,\n\t\tinside: {\n\t\t\t'interpolation-punctuation': {\n\t\t\t\tpattern: /^\\$\\{?|\\}$/,\n\t\t\t\talias: 'punctuation'\n\t\t\t},\n\t\t\t'expression': {\n\t\t\t\tpattern: /[\\s\\S]+/,\n\t\t\t\tinside: null // see below\n\t\t\t}\n\t\t}\n\t};\n\n\tPrism.languages.groovy = Prism.languages.extend('clike', {\n\t\t'string': {\n\t\t\t// https://groovy-lang.org/syntax.html#_dollar_slashy_string\n\t\t\tpattern: /'''(?:[^\\\\]|\\\\[\\s\\S])*?'''|'(?:\\\\.|[^\\\\'\\r\\n])*'/,\n\t\t\tgreedy: true\n\t\t},\n\t\t'keyword': /\\b(?:abstract|as|assert|boolean|break|byte|case|catch|char|class|const|continue|def|default|do|double|else|enum|extends|final|finally|float|for|goto|if|implements|import|in|instanceof|int|interface|long|native|new|package|private|protected|public|return|short|static|strictfp|super|switch|synchronized|this|throw|throws|trait|transient|try|void|volatile|while)\\b/,\n\t\t'number': /\\b(?:0b[01_]+|0x[\\da-f_]+(?:\\.[\\da-f_p\\-]+)?|[\\d_]+(?:\\.[\\d_]+)?(?:e[+-]?\\d+)?)[glidf]?\\b/i,\n\t\t'operator': {\n\t\t\tpattern: /(^|[^.])(?:~|==?~?|\\?[.:]?|\\*(?:[.=]|\\*=?)?|\\.[@&]|\\.\\.<|\\.\\.(?!\\.)|-[-=>]?|\\+[+=]?|!=?|<(?:<=?|=>?)?|>(?:>>?=?|=)?|&[&=]?|\\|[|=]?|\\/=?|\\^=?|%=?)/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'punctuation': /\\.+|[{}[\\];(),:$]/\n\t});\n\n\tPrism.languages.insertBefore('groovy', 'string', {\n\t\t'shebang': {\n\t\t\tpattern: /#!.+/,\n\t\t\talias: 'comment',\n\t\t\tgreedy: true\n\t\t},\n\t\t'interpolation-string': {\n\t\t\t// TODO: Slash strings (e.g. /foo/) can contain line breaks but this will cause a lot of trouble with\n\t\t\t// simple division (see JS regex), so find a fix maybe?\n\t\t\tpattern: /\"\"\"(?:[^\\\\]|\\\\[\\s\\S])*?\"\"\"|([\"/])(?:\\\\.|(?!\\1)[^\\\\\\r\\n])*\\1|\\$\\/(?:[^/$]|\\$(?:[/$]|(?![/$]))|\\/(?!\\$))*\\/\\$/,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'interpolation': interpolation,\n\t\t\t\t'string': /[\\s\\S]+/\n\t\t\t}\n\t\t}\n\t});\n\n\tPrism.languages.insertBefore('groovy', 'punctuation', {\n\t\t'spock-block': /\\b(?:and|cleanup|expect|given|setup|then|when|where):/\n\t});\n\n\tPrism.languages.insertBefore('groovy', 'function', {\n\t\t'annotation': {\n\t\t\tpattern: /(^|[^.])@\\w+/,\n\t\t\tlookbehind: true,\n\t\t\talias: 'punctuation'\n\t\t}\n\t});\n\n\tinterpolation.inside.expression.inside = Prism.languages.groovy;\n\n}(Prism));\n/components/prism-dart.js\t\u001d(function (Prism) {\n\tvar keywords = [\n\t\t/\\b(?:async|sync|yield)\\*/,\n\t\t/\\b(?:abstract|assert|async|await|break|case|catch|class|const|continue|covariant|default|deferred|do|dynamic|else|enum|export|extends|extension|external|factory|final|finally|for|get|hide|if|implements|import|in|interface|library|mixin|new|null|on|operator|part|rethrow|return|set|show|static|super|switch|sync|this|throw|try|typedef|var|void|while|with|yield)\\b/\n\t];\n\n\t// Handles named imports, such as http.Client\n\tvar packagePrefix = /(^|[^\\w.])(?:[a-z]\\w*\\s*\\.\\s*)*(?:[A-Z]\\w*\\s*\\.\\s*)*/.source;\n\n\t// based on the dart naming conventions\n\tvar className = {\n\t\tpattern: RegExp(packagePrefix + /[A-Z](?:[\\d_A-Z]*[a-z]\\w*)?\\b/.source),\n\t\tlookbehind: true,\n\t\tinside: {\n\t\t\t'namespace': {\n\t\t\t\tpattern: /^[a-z]\\w*(?:\\s*\\.\\s*[a-z]\\w*)*(?:\\s*\\.)?/,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': /\\./\n\t\t\t\t}\n\t\t\t},\n\t\t}\n\t};\n\n\tPrism.languages.dart = Prism.languages.extend('clike', {\n\t\t'class-name': [\n\t\t\tclassName,\n\t\t\t{\n\t\t\t\t// variables and parameters\n\t\t\t\t// this to support class names (or generic parameters) which do not contain a lower case letter (also works for methods)\n\t\t\t\tpattern: RegExp(packagePrefix + /[A-Z]\\w*(?=\\s+\\w+\\s*[;,=()])/.source),\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: className.inside\n\t\t\t}\n\t\t],\n\t\t'keyword': keywords,\n\t\t'operator': /\\bis!|\\b(?:as|is)\\b|\\+\\+|--|&&|\\|\\||<<=?|>>=?|~(?:\\/=?)?|[+\\-*\\/%&^|=!<>]=?|\\?/\n\t});\n\n\tPrism.languages.insertBefore('dart', 'string', {\n\t\t'string-literal': {\n\t\t\tpattern: /r?(?:(\"\"\"|''')[\\s\\S]*?\\1|([\"'])(?:\\\\.|(?!\\2)[^\\\\\\r\\n])*\\2(?!\\2))/,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'interpolation': {\n\t\t\t\t\tpattern: /((?:^|[^\\\\])(?:\\\\{2})*)\\$(?:\\w+|\\{(?:[^{}]|\\{[^{}]*\\})*\\})/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'punctuation': /^\\$\\{?|\\}$/,\n\t\t\t\t\t\t'expression': {\n\t\t\t\t\t\t\tpattern: /[\\s\\S]+/,\n\t\t\t\t\t\t\tinside: Prism.languages.dart\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t'string': /[\\s\\S]+/\n\t\t\t}\n\t\t},\n\t\t'string': undefined\n\t});\n\n\tPrism.languages.insertBefore('dart', 'class-name', {\n\t\t'metadata': {\n\t\t\tpattern: /@\\w+/,\n\t\t\talias: 'function'\n\t\t}\n\t});\n\n\tPrism.languages.insertBefore('dart', 'class-name', {\n\t\t'generics': {\n\t\t\tpattern: /<(?:[\\w\\s,.&?]|<(?:[\\w\\s,.&?]|<(?:[\\w\\s,.&?]|<[\\w\\s,.&?]*>)*>)*>)*>/,\n\t\t\tinside: {\n\t\t\t\t'class-name': className,\n\t\t\t\t'keyword': keywords,\n\t\t\t\t'punctuation': /[<>(),.:]/,\n\t\t\t\t'operator': /[?&|]/\n\t\t\t}\n\t\t},\n\t});\n}(Prism));\n/components/prism-nginx.min.js\u0002!function(e){var n=/\\$(?:\\w[a-z\\d]*(?:_[^\\x00-\\x1F\\s\"'\\\\()$]*)?|\\{[^}\\s\"'\\\\]+\\})/i;e.languages.nginx={comment:{pattern:/(^|[\\s{};])#.*/,lookbehind:!0,greedy:!0},directive:{pattern:/(^|\\s)\\w(?:[^;{}\"'\\\\\\s]|\\\\.|\"(?:[^\"\\\\]|\\\\.)*\"|'(?:[^'\\\\]|\\\\.)*'|\\s+(?:#.*(?!.)|(?![#\\s])))*?(?=\\s*[;{])/,lookbehind:!0,greedy:!0,inside:{string:{pattern:/((?:^|[^\\\\])(?:\\\\\\\\)*)(?:\"(?:[^\"\\\\]|\\\\.)*\"|'(?:[^'\\\\]|\\\\.)*')/,lookbehind:!0,greedy:!0,inside:{escape:{pattern:/\\\\[\"'\\\\nrt]/,alias:\"entity\"},variable:n}},comment:{pattern:/(\\s)#.*/,lookbehind:!0,greedy:!0},keyword:{pattern:/^\\S+/,greedy:!0},boolean:{pattern:/(\\s)(?:off|on)(?!\\S)/,lookbehind:!0},number:{pattern:/(\\s)\\d+[a-z]*(?!\\S)/i,lookbehind:!0},variable:n}},punctuation:/[{};]/}}(Prism); /components/prism-systemd.min.js\u0002!function(e){var t={pattern:/^[;#].*/m,greedy:!0},n='\"(?:[^\\r\\n\"\\\\\\\\]|\\\\\\\\(?:[^\\r]|\\r\\n?))*\"(?!\\\\S)';e.languages.systemd={comment:t,section:{pattern:/^\\[[^\\n\\r\\[\\]]*\\](?=[ \\t]*$)/m,greedy:!0,inside:{punctuation:/^\\[|\\]$/,\"section-name\":{pattern:/[\\s\\S]+/,alias:\"selector\"}}},key:{pattern:/^[^\\s=]+(?=[ \\t]*=)/m,greedy:!0,alias:\"attr-name\"},value:{pattern:RegExp(\"(=[ \\t]*(?!\\\\s))(?:\"+n+'|(?=[^\"\\r\\n]))(?:[^\\\\s\\\\\\\\]|[ \\t]+(?:(?![ \\t\"])|'+n+\")|\\\\\\\\[\\r\\n]+(?:[#;].*[\\r\\n]+)*(?![#;]))*\"),lookbehind:!0,greedy:!0,alias:\"attr-value\",inside:{comment:t,quoted:{pattern:RegExp(\"(^|\\\\s)\"+n),lookbehind:!0,greedy:!0},punctuation:/\\\\$/m,boolean:{pattern:/^(?:false|no|off|on|true|yes)$/,greedy:!0}}},punctuation:/=/}}(Prism);/components/prism-roboconf.js\u00020Prism.languages.roboconf = {\n\t'comment': /#.*/,\n\t'keyword': {\n\t\t'pattern': /(^|\\s)(?:(?:external|import)\\b|(?:facet|instance of)(?=[ \\t]+[\\w-]+[ \\t]*\\{))/,\n\t\tlookbehind: true\n\t},\n\t'component': {\n\t\tpattern: /[\\w-]+(?=[ \\t]*\\{)/,\n\t\talias: 'variable'\n\t},\n\t'property': /[\\w.-]+(?=[ \\t]*:)/,\n\t'value': {\n\t\tpattern: /(=[ \\t]*(?![ \\t]))[^,;]+/,\n\t\tlookbehind: true,\n\t\talias: 'attr-value'\n\t},\n\t'optional': {\n\t\tpattern: /\\(optional\\)/,\n\t\talias: 'builtin'\n\t},\n\t'wildcard': {\n\t\tpattern: /(\\.)\\*/,\n\t\tlookbehind: true,\n\t\talias: 'operator'\n\t},\n\t'punctuation': /[{},.;:=]/\n};\n/components/prism-ini.min.js\u0002_Prism.languages.ini={comment:{pattern:/(^[ \\f\\t\\v]*)[#;][^\\n\\r]*/m,lookbehind:!0},section:{pattern:/(^[ \\f\\t\\v]*)\\[[^\\n\\r\\]]*\\]?/m,lookbehind:!0,inside:{\"section-name\":{pattern:/(^\\[[ \\f\\t\\v]*)[^ \\f\\t\\v\\]]+(?:[ \\f\\t\\v]+[^ \\f\\t\\v\\]]+)*/,lookbehind:!0,alias:\"selector\"},punctuation:/\\[|\\]/}},key:{pattern:/(^[ \\f\\t\\v]*)[^ \\f\\n\\r\\t\\v=]+(?:[ \\f\\t\\v]+[^ \\f\\n\\r\\t\\v=]+)*(?=[ \\f\\t\\v]*=)/m,lookbehind:!0,alias:\"attr-name\"},value:{pattern:/(=[ \\f\\t\\v]*)[^ \\f\\n\\r\\t\\v]+(?:[ \\f\\t\\v]+[^ \\f\\n\\r\\t\\v]+)*/,lookbehind:!0,alias:\"attr-value\",inside:{\"inner-value\":{pattern:/^(\"|').+(?=\\1$)/,lookbehind:!0}}},punctuation:/=/};/components/prism-rip.min.js\u0003\u0003Prism.languages.rip={comment:{pattern:/#.*/,greedy:!0},char:{pattern:/\\B`[^\\s`'\",.:;#\\/\\\\()<>\\[\\]{}]\\b/,greedy:!0},string:{pattern:/(\"|')(?:\\\\.|(?!\\1)[^\\\\\\r\\n])*\\1/,greedy:!0},regex:{pattern:/(^|[^/])\\/(?!\\/)(?:\\[[^\\n\\r\\]]*\\]|\\\\.|[^/\\\\\\r\\n\\[])+\\/(?=\\s*(?:$|[\\r\\n,.;})]))/,lookbehind:!0,greedy:!0},keyword:/(?:=>|->)|\\b(?:case|catch|class|else|exit|finally|if|raise|return|switch|try)\\b/,builtin:/@|\\bSystem\\b/,boolean:/\\b(?:false|true)\\b/,date:/\\b\\d{4}-\\d{2}-\\d{2}\\b/,time:/\\b\\d{2}:\\d{2}:\\d{2}\\b/,datetime:/\\b\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\b/,symbol:/:[^\\d\\s`'\",.:;#\\/\\\\()<>\\[\\]{}][^\\s`'\",.:;#\\/\\\\()<>\\[\\]{}]*/,number:/[+-]?\\b(?:\\d+\\.\\d+|\\d+)\\b/,punctuation:/(?:\\.{2,3})|[`,.:;=\\/\\\\()<>\\[\\]{}]/,reference:/[^\\d\\s`'\",.:;#\\/\\\\()<>\\[\\]{}][^\\s`'\",.:;#\\/\\\\()<>\\[\\]{}]*/};/components/prism-jolie.min.js\u0005Prism.languages.jolie=Prism.languages.extend(\"clike\",{string:{pattern:/(^|[^\\\\])\"(?:\\\\[\\s\\S]|[^\"\\\\])*\"/,lookbehind:!0,greedy:!0},\"class-name\":{pattern:/((?:\\b(?:as|courier|embed|in|inputPort|outputPort|service)\\b|@)[ \\t]*)\\w+/,lookbehind:!0},keyword:/\\b(?:as|cH|comp|concurrent|constants|courier|cset|csets|default|define|else|embed|embedded|execution|exit|extender|for|foreach|forward|from|global|if|import|in|include|init|inputPort|install|instanceof|interface|is_defined|linkIn|linkOut|main|new|nullProcess|outputPort|over|private|provide|public|scope|sequential|service|single|spawn|synchronized|this|throw|throws|type|undef|until|while|with)\\b/,function:/\\b[a-z_]\\w*(?=[ \\t]*[@(])/i,number:/(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:e[+-]?\\d+)?l?/i,operator:/-[-=>]?|\\+[+=]?|<[<=]?|[>=*!]=?|&&|\\|\\||[?\\/%^@|]/,punctuation:/[()[\\]{},;.:]/,builtin:/\\b(?:Byte|any|bool|char|double|enum|float|int|length|long|ranges|regex|string|undefined|void)\\b/}),Prism.languages.insertBefore(\"jolie\",\"keyword\",{aggregates:{pattern:/(\\bAggregates\\s*:\\s*)(?:\\w+(?:\\s+with\\s+\\w+)?\\s*,\\s*)*\\w+(?:\\s+with\\s+\\w+)?/,lookbehind:!0,inside:{keyword:/\\bwith\\b/,\"class-name\":/\\w+/,punctuation:/,/}},redirects:{pattern:/(\\bRedirects\\s*:\\s*)(?:\\w+\\s*=>\\s*\\w+\\s*,\\s*)*(?:\\w+\\s*=>\\s*\\w+)/,lookbehind:!0,inside:{punctuation:/,/,\"class-name\":/\\w+/,operator:/=>/}},property:{pattern:/\\b(?:Aggregates|[Ii]nterfaces|Java|Javascript|Jolie|[Ll]ocation|OneWay|[Pp]rotocol|Redirects|RequestResponse)\\b(?=[ \\t]*:)/}});#/components/prism-robotframework.js\tC(function (Prism) {\n\n\tvar comment = {\n\t\tpattern: /(^[ \\t]*| {2}|\\t)#.*/m,\n\t\tlookbehind: true,\n\t\tgreedy: true\n\t};\n\n\tvar variable = {\n\t\tpattern: /((?:^|[^\\\\])(?:\\\\{2})*)[$@&%]\\{(?:[^{}\\r\\n]|\\{[^{}\\r\\n]*\\})*\\}/,\n\t\tlookbehind: true,\n\t\tinside: {\n\t\t\t'punctuation': /^[$@&%]\\{|\\}$/\n\t\t}\n\t};\n\n\tfunction createSection(name, inside) {\n\t\tvar extendecInside = {};\n\n\t\textendecInside['section-header'] = {\n\t\t\tpattern: /^ ?\\*{3}.+?\\*{3}/,\n\t\t\talias: 'keyword'\n\t\t};\n\n\t\t// copy inside tokens\n\t\tfor (var token in inside) {\n\t\t\textendecInside[token] = inside[token];\n\t\t}\n\n\t\textendecInside['tag'] = {\n\t\t\tpattern: /([\\r\\n](?: {2}|\\t)[ \\t]*)\\[[-\\w]+\\]/,\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'punctuation': /\\[|\\]/\n\t\t\t}\n\t\t};\n\t\textendecInside['variable'] = variable;\n\t\textendecInside['comment'] = comment;\n\n\t\treturn {\n\t\t\tpattern: RegExp(/^ ?\\*{3}[ \\t]*<name>[ \\t]*\\*{3}(?:.|[\\r\\n](?!\\*{3}))*/.source.replace(/<name>/g, function () { return name; }), 'im'),\n\t\t\talias: 'section',\n\t\t\tinside: extendecInside\n\t\t};\n\t}\n\n\n\tvar docTag = {\n\t\tpattern: /(\\[Documentation\\](?: {2}|\\t)[ \\t]*)(?![ \\t]|#)(?:.|(?:\\r\\n?|\\n)[ \\t]*\\.{3})+/,\n\t\tlookbehind: true,\n\t\talias: 'string'\n\t};\n\n\tvar testNameLike = {\n\t\tpattern: /([\\r\\n] ?)(?!#)(?:\\S(?:[ \\t]\\S)*)+/,\n\t\tlookbehind: true,\n\t\talias: 'function',\n\t\tinside: {\n\t\t\t'variable': variable\n\t\t}\n\t};\n\n\tvar testPropertyLike = {\n\t\tpattern: /([\\r\\n](?: {2}|\\t)[ \\t]*)(?!\\[|\\.{3}|#)(?:\\S(?:[ \\t]\\S)*)+/,\n\t\tlookbehind: true,\n\t\tinside: {\n\t\t\t'variable': variable\n\t\t}\n\t};\n\n\tPrism.languages['robotframework'] = {\n\t\t'settings': createSection('Settings', {\n\t\t\t'documentation': {\n\t\t\t\tpattern: /([\\r\\n] ?Documentation(?: {2}|\\t)[ \\t]*)(?![ \\t]|#)(?:.|(?:\\r\\n?|\\n)[ \\t]*\\.{3})+/,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'string'\n\t\t\t},\n\t\t\t'property': {\n\t\t\t\tpattern: /([\\r\\n] ?)(?!\\.{3}|#)(?:\\S(?:[ \\t]\\S)*)+/,\n\t\t\t\tlookbehind: true\n\t\t\t}\n\t\t}),\n\t\t'variables': createSection('Variables'),\n\t\t'test-cases': createSection('Test Cases', {\n\t\t\t'test-name': testNameLike,\n\t\t\t'documentation': docTag,\n\t\t\t'property': testPropertyLike\n\t\t}),\n\t\t'keywords': createSection('Keywords', {\n\t\t\t'keyword-name': testNameLike,\n\t\t\t'documentation': docTag,\n\t\t\t'property': testPropertyLike\n\t\t}),\n\t\t'tasks': createSection('Tasks', {\n\t\t\t'task-name': testNameLike,\n\t\t\t'documentation': docTag,\n\t\t\t'property': testPropertyLike\n\t\t}),\n\t\t'comment': comment\n\t};\n\n\tPrism.languages.robot = Prism.languages['robotframework'];\n\n}(Prism));\n/components/prism-scss.min.js\u00058Prism.languages.scss=Prism.languages.extend(\"css\",{comment:{pattern:/(^|[^\\\\])(?:\\/\\*[\\s\\S]*?\\*\\/|\\/\\/.*)/,lookbehind:!0},atrule:{pattern:/@[\\w-](?:\\([^()]+\\)|[^()\\s]|\\s+(?!\\s))*?(?=\\s+[{;])/,inside:{rule:/@[\\w-]+/}},url:/(?:[-a-z]+-)?url(?=\\()/i,selector:{pattern:/(?=\\S)[^@;{}()]?(?:[^@;{}()\\s]|\\s+(?!\\s)|#\\{\\$[-\\w]+\\})+(?=\\s*\\{(?:\\}|\\s|[^}][^:{}]*[:{][^}]))/,inside:{parent:{pattern:/&/,alias:\"important\"},placeholder:/%[-\\w]+/,variable:/\\$[-\\w]+|#\\{\\$[-\\w]+\\}/}},property:{pattern:/(?:[-\\w]|\\$[-\\w]|#\\{\\$[-\\w]+\\})+(?=\\s*:)/,inside:{variable:/\\$[-\\w]+|#\\{\\$[-\\w]+\\}/}}}),Prism.languages.insertBefore(\"scss\",\"atrule\",{keyword:[/@(?:content|debug|each|else(?: if)?|extend|for|forward|function|if|import|include|mixin|return|use|warn|while)\\b/i,{pattern:/( )(?:from|through)(?= )/,lookbehind:!0}]}),Prism.languages.insertBefore(\"scss\",\"important\",{variable:/\\$[-\\w]+|#\\{\\$[-\\w]+\\}/}),Prism.languages.insertBefore(\"scss\",\"function\",{\"module-modifier\":{pattern:/\\b(?:as|hide|show|with)\\b/i,alias:\"keyword\"},placeholder:{pattern:/%[-\\w]+/,alias:\"selector\"},statement:{pattern:/\\B!(?:default|optional)\\b/i,alias:\"keyword\"},boolean:/\\b(?:false|true)\\b/,null:{pattern:/\\bnull\\b/,alias:\"keyword\"},operator:{pattern:/(\\s)(?:[-+*\\/%]|[=!]=|<=?|>=?|and|not|or)(?=\\s)/,lookbehind:!0}}),Prism.languages.scss.atrule.inside.rest=Prism.languages.scss;/components/prism-armasm.js\u0005Prism.languages.armasm = {\n\t'comment': {\n\t\tpattern: /;.*/,\n\t\tgreedy: true\n\t},\n\t'string': {\n\t\tpattern: /\"(?:[^\"\\r\\n]|\"\")*\"/,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'variable': {\n\t\t\t\tpattern: /((?:^|[^$])(?:\\${2})*)\\$\\w+/,\n\t\t\t\tlookbehind: true\n\t\t\t}\n\t\t}\n\t},\n\t'char': {\n\t\tpattern: /'(?:[^'\\r\\n]{0,4}|'')'/,\n\t\tgreedy: true\n\t},\n\t'version-symbol': {\n\t\tpattern: /\\|[\\w@]+\\|/,\n\t\tgreedy: true,\n\t\talias: 'property'\n\t},\n\n\t'boolean': /\\b(?:FALSE|TRUE)\\b/,\n\t'directive': {\n\t\tpattern: /\\b(?:ALIAS|ALIGN|AREA|ARM|ASSERT|ATTR|CN|CODE|CODE16|CODE32|COMMON|CP|DATA|DCB|DCD|DCDO|DCDU|DCFD|DCFDU|DCI|DCQ|DCQU|DCW|DCWU|DN|ELIF|ELSE|END|ENDFUNC|ENDIF|ENDP|ENTRY|EQU|EXPORT|EXPORTAS|EXTERN|FIELD|FILL|FN|FUNCTION|GBLA|GBLL|GBLS|GET|GLOBAL|IF|IMPORT|INCBIN|INCLUDE|INFO|KEEP|LCLA|LCLL|LCLS|LTORG|MACRO|MAP|MEND|MEXIT|NOFP|OPT|PRESERVE8|PROC|QN|READONLY|RELOC|REQUIRE|REQUIRE8|RLIST|ROUT|SETA|SETL|SETS|SN|SPACE|SUBT|THUMB|THUMBX|TTL|WEND|WHILE)\\b/,\n\t\talias: 'property'\n\t},\n\t'instruction': {\n\t\tpattern: /((?:^|(?:^|[^\\\\])(?:\\r\\n?|\\n))[ \\t]*(?:(?:[A-Z][A-Z0-9_]*[a-z]\\w*|[a-z]\\w*|\\d+)[ \\t]+)?)\\b[A-Z.]+\\b/,\n\t\tlookbehind: true,\n\t\talias: 'keyword'\n\t},\n\t'variable': /\\$\\w+/,\n\n\t'number': /(?:\\b[2-9]_\\d+|(?:\\b\\d+(?:\\.\\d+)?|\\B\\.\\d+)(?:e-?\\d+)?|\\b0(?:[fd]_|x)[0-9a-f]+|&[0-9a-f]+)\\b/i,\n\n\t'register': {\n\t\tpattern: /\\b(?:r\\d|lr)\\b/,\n\t\talias: 'symbol'\n\t},\n\n\t'operator': /<>|<<|>>|&&|\\|\\||[=!<>/]=?|[+\\-*%#?&|^]|:[A-Z]+:/,\n\t'punctuation': /[()[\\],]/\n};\n\nPrism.languages['arm-asm'] = Prism.languages.armasm;\n/components/prism-parser.min.js\u0005!function(e){var n=e.languages.parser=e.languages.extend(\"markup\",{keyword:{pattern:/(^|[^^])(?:\\^(?:case|eval|for|if|switch|throw)\\b|@(?:BASE|CLASS|GET(?:_DEFAULT)?|OPTIONS|SET_DEFAULT|USE)\\b)/,lookbehind:!0},variable:{pattern:/(^|[^^])\\B\\$(?:\\w+|(?=[.{]))(?:(?:\\.|::?)\\w+)*(?:\\.|::?)?/,lookbehind:!0,inside:{punctuation:/\\.|:+/}},function:{pattern:/(^|[^^])\\B[@^]\\w+(?:(?:\\.|::?)\\w+)*(?:\\.|::?)?/,lookbehind:!0,inside:{keyword:{pattern:/(^@)(?:GET_|SET_)/,lookbehind:!0},punctuation:/\\.|:+/}},escape:{pattern:/\\^(?:[$^;@()\\[\\]{}\"':]|#[a-f\\d]*)/i,alias:\"builtin\"},punctuation:/[\\[\\](){};]/});n=e.languages.insertBefore(\"parser\",\"keyword\",{\"parser-comment\":{pattern:/(\\s)#.*/,lookbehind:!0,alias:\"comment\"},expression:{pattern:/(^|[^^])\\((?:[^()]|\\((?:[^()]|\\((?:[^()])*\\))*\\))*\\)/,greedy:!0,lookbehind:!0,inside:{string:{pattern:/(^|[^^])([\"'])(?:(?!\\2)[^^]|\\^[\\s\\S])*\\2/,lookbehind:!0},keyword:n.keyword,variable:n.variable,function:n.function,boolean:/\\b(?:false|true)\\b/,number:/\\b(?:0x[a-f\\d]+|\\d+(?:\\.\\d*)?(?:e[+-]?\\d+)?)\\b/i,escape:n.escape,operator:/[~+*\\/\\\\%]|!(?:\\|\\|?|=)?|&&?|\\|\\|?|==|<[<=]?|>[>=]?|-[fd]?|\\b(?:def|eq|ge|gt|in|is|le|lt|ne)\\b/,punctuation:n.punctuation}}}),e.languages.insertBefore(\"inside\",\"punctuation\",{expression:n.expression,keyword:n.keyword,variable:n.variable,function:n.function,escape:n.escape,\"parser-punctuation\":{pattern:n.punctuation,alias:\"punctuation\"}},n.tag.inside[\"attr-value\"])}(Prism);/components/prism-vim.min.js7Prism.languages.vim={string:/\"(?:[^\"\\\\\\r\\n]|\\\\.)*\"|'(?:[^'\\r\\n]|'')*'/,comment:/\".*/,function:/\\b\\w+(?=\\()/,keyword:/\\b(?:N|Next|P|Print|X|XMLent|XMLns|ab|abbreviate|abc|abclear|abo|aboveleft|al|all|ar|arga|argadd|argd|argdelete|argdo|arge|argedit|argg|argglobal|argl|arglocal|args|argu|argument|as|ascii|b|bN|bNext|ba|bad|badd|ball|bd|bdelete|be|bel|belowright|bf|bfirst|bl|blast|bm|bmodified|bn|bnext|bo|botright|bp|bprevious|br|brea|break|breaka|breakadd|breakd|breakdel|breakl|breaklist|brewind|bro|browse|bufdo|buffer|buffers|bun|bunload|bw|bwipeout|c|cN|cNext|cNfcNfile|ca|cabbrev|cabc|cabclear|cad|caddb|caddbuffer|caddexpr|caddf|caddfile|cal|call|cat|catch|cb|cbuffer|cc|ccl|cclose|cd|ce|center|cex|cexpr|cf|cfile|cfir|cfirst|cg|cgetb|cgetbuffer|cgete|cgetexpr|cgetfile|change|changes|chd|chdir|che|checkpath|checkt|checktime|cl|cla|clast|clist|clo|close|cmapc|cmapclear|cn|cnew|cnewer|cnext|cnf|cnfile|cnorea|cnoreabbrev|co|col|colder|colo|colorscheme|comc|comclear|comp|compiler|con|conf|confirm|continue|cope|copen|copy|cp|cpf|cpfile|cprevious|cq|cquit|cr|crewind|cu|cuna|cunabbrev|cunmap|cw|cwindow|d|debugg|debuggreedy|delc|delcommand|delete|delf|delfunction|delm|delmarks|di|diffg|diffget|diffoff|diffpatch|diffpu|diffput|diffsplit|diffthis|diffu|diffupdate|dig|digraphs|display|dj|djump|dl|dlist|dr|drop|ds|dsearch|dsp|dsplit|e|earlier|echoe|echoerr|echom|echomsg|echon|edit|el|else|elsei|elseif|em|emenu|en|endf|endfo|endfor|endfun|endfunction|endif|endt|endtry|endw|endwhile|ene|enew|ex|exi|exit|exu|exusage|f|file|files|filetype|fin|fina|finally|find|fini|finish|fir|first|fix|fixdel|fo|fold|foldc|foldclose|foldd|folddoc|folddoclosed|folddoopen|foldo|foldopen|for|fu|fun|function|go|goto|gr|grep|grepa|grepadd|h|ha|hardcopy|help|helpf|helpfind|helpg|helpgrep|helpt|helptags|hid|hide|his|history|ia|iabbrev|iabc|iabclear|if|ij|ijump|il|ilist|imapc|imapclear|in|inorea|inoreabbrev|isearch|isp|isplit|iu|iuna|iunabbrev|iunmap|j|join|ju|jumps|k|kee|keepalt|keepj|keepjumps|keepmarks|l|lN|lNext|lNf|lNfile|la|lad|laddb|laddbuffer|laddexpr|laddf|laddfile|lan|language|last|later|lb|lbuffer|lc|lcd|lch|lchdir|lcl|lclose|left|lefta|leftabove|let|lex|lexpr|lf|lfile|lfir|lfirst|lg|lgetb|lgetbuffer|lgete|lgetexpr|lgetfile|lgr|lgrep|lgrepa|lgrepadd|lh|lhelpgrep|list|ll|lla|llast|lli|llist|lm|lmak|lmake|lmap|lmapc|lmapclear|ln|lne|lnew|lnewer|lnext|lnf|lnfile|lnoremap|lo|loadview|loc|lockmarks|lockv|lockvar|lol|lolder|lop|lopen|lp|lpf|lpfile|lprevious|lr|lrewind|ls|lt|ltag|lu|lunmap|lv|lvimgrep|lvimgrepa|lvimgrepadd|lw|lwindow|m|ma|mak|make|mark|marks|mat|match|menut|menutranslate|mk|mkexrc|mks|mksession|mksp|mkspell|mkv|mkvie|mkview|mkvimrc|mod|mode|move|mz|mzf|mzfile|mzscheme|n|nbkey|new|next|nmapc|nmapclear|noh|nohlsearch|norea|noreabbrev|nu|number|nun|nunmap|o|omapc|omapclear|on|only|open|opt|options|ou|ounmap|p|pc|pclose|pe|ped|pedit|perl|perld|perldo|po|pop|popu|popup|pp|ppop|pre|preserve|prev|previous|print|prof|profd|profdel|profile|promptf|promptfind|promptr|promptrepl|ps|psearch|ptN|ptNext|pta|ptag|ptf|ptfirst|ptj|ptjump|ptl|ptlast|ptn|ptnext|ptp|ptprevious|ptr|ptrewind|pts|ptselect|pu|put|pw|pwd|py|pyf|pyfile|python|q|qa|qall|quit|quita|quitall|r|read|rec|recover|red|redi|redir|redo|redr|redraw|redraws|redrawstatus|reg|registers|res|resize|ret|retab|retu|return|rew|rewind|ri|right|rightb|rightbelow|ru|rub|ruby|rubyd|rubydo|rubyf|rubyfile|runtime|rv|rviminfo|sN|sNext|sa|sal|sall|san|sandbox|sargument|sav|saveas|sb|sbN|sbNext|sba|sball|sbf|sbfirst|sbl|sblast|sbm|sbmodified|sbn|sbnext|sbp|sbprevious|sbr|sbrewind|sbuffer|scrip|scripte|scriptencoding|scriptnames|se|set|setf|setfiletype|setg|setglobal|setl|setlocal|sf|sfind|sfir|sfirst|sh|shell|sign|sil|silent|sim|simalt|sl|sla|slast|sleep|sm|smagic|smap|smapc|smapclear|sme|smenu|sn|snext|sni|sniff|sno|snomagic|snor|snoremap|snoreme|snoremenu|so|sor|sort|source|sp|spe|spelld|spelldump|spellgood|spelli|spellinfo|spellr|spellrepall|spellu|spellundo|spellw|spellwrong|split|spr|sprevious|sre|srewind|st|sta|stag|star|startg|startgreplace|startinsert|startr|startreplace|stj|stjump|stop|stopi|stopinsert|sts|stselect|sun|sunhide|sunm|sunmap|sus|suspend|sv|sview|syncbind|t|tN|tNext|ta|tab|tabN|tabNext|tabc|tabclose|tabd|tabdo|tabe|tabedit|tabf|tabfind|tabfir|tabfirst|tabl|tablast|tabm|tabmove|tabn|tabnew|tabnext|tabo|tabonly|tabp|tabprevious|tabr|tabrewind|tabs|tag|tags|tc|tcl|tcld|tcldo|tclf|tclfile|te|tearoff|tf|tfirst|th|throw|tj|tjump|tl|tlast|tm|tmenu|tn|tnext|to|topleft|tp|tprevious|tr|trewind|try|ts|tselect|tu|tunmenu|u|una|unabbreviate|undo|undoj|undojoin|undol|undolist|unh|unhide|unlet|unlo|unlockvar|unm|unmap|up|update|ve|verb|verbose|version|vert|vertical|vi|vie|view|vim|vimgrep|vimgrepa|vimgrepadd|visual|viu|viusage|vmapc|vmapclear|vne|vnew|vs|vsplit|vu|vunmap|w|wN|wNext|wa|wall|wh|while|win|winc|wincmd|windo|winp|winpos|winsize|wn|wnext|wp|wprevious|wq|wqa|wqall|write|ws|wsverb|wv|wviminfo|x|xa|xall|xit|xm|xmap|xmapc|xmapclear|xme|xmenu|xn|xnoremap|xnoreme|xnoremenu|xu|xunmap|y|yank)\\b/,builtin:/\\b(?:acd|ai|akm|aleph|allowrevins|altkeymap|ambiwidth|ambw|anti|antialias|arab|arabic|arabicshape|ari|arshape|autochdir|autocmd|autoindent|autoread|autowrite|autowriteall|aw|awa|background|backspace|backup|backupcopy|backupdir|backupext|backupskip|balloondelay|ballooneval|balloonexpr|bdir|bdlay|beval|bex|bexpr|bg|bh|bin|binary|biosk|bioskey|bk|bkc|bomb|breakat|brk|browsedir|bs|bsdir|bsk|bt|bufhidden|buflisted|buftype|casemap|ccv|cdpath|cedit|cfu|ch|charconvert|ci|cin|cindent|cink|cinkeys|cino|cinoptions|cinw|cinwords|clipboard|cmdheight|cmdwinheight|cmp|cms|columns|com|comments|commentstring|compatible|complete|completefunc|completeopt|consk|conskey|copyindent|cot|cpo|cpoptions|cpt|cscopepathcomp|cscopeprg|cscopequickfix|cscopetag|cscopetagorder|cscopeverbose|cspc|csprg|csqf|cst|csto|csverb|cuc|cul|cursorcolumn|cursorline|cwh|debug|deco|def|define|delcombine|dex|dg|dict|dictionary|diff|diffexpr|diffopt|digraph|dip|dir|directory|dy|ea|ead|eadirection|eb|ed|edcompatible|ef|efm|ei|ek|enc|encoding|endofline|eol|ep|equalalways|equalprg|errorbells|errorfile|errorformat|esckeys|et|eventignore|expandtab|exrc|fcl|fcs|fdc|fde|fdi|fdl|fdls|fdm|fdn|fdo|fdt|fen|fenc|fencs|fex|ff|ffs|fileencoding|fileencodings|fileformat|fileformats|fillchars|fk|fkmap|flp|fml|fmr|foldcolumn|foldenable|foldexpr|foldignore|foldlevel|foldlevelstart|foldmarker|foldmethod|foldminlines|foldnestmax|foldtext|formatexpr|formatlistpat|formatoptions|formatprg|fp|fs|fsync|ft|gcr|gd|gdefault|gfm|gfn|gfs|gfw|ghr|gp|grepformat|grepprg|gtl|gtt|guicursor|guifont|guifontset|guifontwide|guiheadroom|guioptions|guipty|guitablabel|guitabtooltip|helpfile|helpheight|helplang|hf|hh|hi|hidden|highlight|hk|hkmap|hkmapp|hkp|hl|hlg|hls|hlsearch|ic|icon|iconstring|ignorecase|im|imactivatekey|imak|imc|imcmdline|imd|imdisable|imi|iminsert|ims|imsearch|inc|include|includeexpr|incsearch|inde|indentexpr|indentkeys|indk|inex|inf|infercase|insertmode|invacd|invai|invakm|invallowrevins|invaltkeymap|invanti|invantialias|invar|invarab|invarabic|invarabicshape|invari|invarshape|invautochdir|invautoindent|invautoread|invautowrite|invautowriteall|invaw|invawa|invbackup|invballooneval|invbeval|invbin|invbinary|invbiosk|invbioskey|invbk|invbl|invbomb|invbuflisted|invcf|invci|invcin|invcindent|invcompatible|invconfirm|invconsk|invconskey|invcopyindent|invcp|invcscopetag|invcscopeverbose|invcst|invcsverb|invcuc|invcul|invcursorcolumn|invcursorline|invdeco|invdelcombine|invdg|invdiff|invdigraph|invdisable|invea|inveb|inved|invedcompatible|invek|invendofline|inveol|invequalalways|inverrorbells|invesckeys|invet|invex|invexpandtab|invexrc|invfen|invfk|invfkmap|invfoldenable|invgd|invgdefault|invguipty|invhid|invhidden|invhk|invhkmap|invhkmapp|invhkp|invhls|invhlsearch|invic|invicon|invignorecase|invim|invimc|invimcmdline|invimd|invincsearch|invinf|invinfercase|invinsertmode|invis|invjoinspaces|invjs|invlazyredraw|invlbr|invlinebreak|invlisp|invlist|invloadplugins|invlpl|invlz|invma|invmacatsui|invmagic|invmh|invml|invmod|invmodeline|invmodifiable|invmodified|invmore|invmousef|invmousefocus|invmousehide|invnu|invnumber|invodev|invopendevice|invpaste|invpi|invpreserveindent|invpreviewwindow|invprompt|invpvw|invreadonly|invremap|invrestorescreen|invrevins|invri|invrightleft|invrightleftcmd|invrl|invrlc|invro|invrs|invru|invruler|invsb|invsc|invscb|invscrollbind|invscs|invsecure|invsft|invshellslash|invshelltemp|invshiftround|invshortname|invshowcmd|invshowfulltag|invshowmatch|invshowmode|invsi|invsm|invsmartcase|invsmartindent|invsmarttab|invsmd|invsn|invsol|invspell|invsplitbelow|invsplitright|invspr|invsr|invssl|invsta|invstartofline|invstmp|invswapfile|invswf|invta|invtagbsearch|invtagrelative|invtagstack|invtbi|invtbidi|invtbs|invtermbidi|invterse|invtextauto|invtextmode|invtf|invtgst|invtildeop|invtimeout|invtitle|invto|invtop|invtr|invttimeout|invttybuiltin|invttyfast|invtx|invvb|invvisualbell|invwa|invwarn|invwb|invweirdinvert|invwfh|invwfw|invwildmenu|invwinfixheight|invwinfixwidth|invwiv|invwmnu|invwrap|invwrapscan|invwrite|invwriteany|invwritebackup|invws|isf|isfname|isi|isident|isk|iskeyword|isprint|joinspaces|js|key|keymap|keymodel|keywordprg|km|kmp|kp|langmap|langmenu|laststatus|lazyredraw|lbr|lcs|linebreak|lines|linespace|lisp|lispwords|listchars|loadplugins|lpl|lsp|lz|macatsui|magic|makeef|makeprg|matchpairs|matchtime|maxcombine|maxfuncdepth|maxmapdepth|maxmem|maxmempattern|maxmemtot|mco|mef|menuitems|mfd|mh|mis|mkspellmem|ml|mls|mm|mmd|mmp|mmt|modeline|modelines|modifiable|modified|more|mouse|mousef|mousefocus|mousehide|mousem|mousemodel|mouses|mouseshape|mouset|mousetime|mp|mps|msm|mzq|mzquantum|nf|noacd|noai|noakm|noallowrevins|noaltkeymap|noanti|noantialias|noar|noarab|noarabic|noarabicshape|noari|noarshape|noautochdir|noautoindent|noautoread|noautowrite|noautowriteall|noaw|noawa|nobackup|noballooneval|nobeval|nobin|nobinary|nobiosk|nobioskey|nobk|nobl|nobomb|nobuflisted|nocf|noci|nocin|nocindent|nocompatible|noconfirm|noconsk|noconskey|nocopyindent|nocp|nocscopetag|nocscopeverbose|nocst|nocsverb|nocuc|nocul|nocursorcolumn|nocursorline|nodeco|nodelcombine|nodg|nodiff|nodigraph|nodisable|noea|noeb|noed|noedcompatible|noek|noendofline|noeol|noequalalways|noerrorbells|noesckeys|noet|noex|noexpandtab|noexrc|nofen|nofk|nofkmap|nofoldenable|nogd|nogdefault|noguipty|nohid|nohidden|nohk|nohkmap|nohkmapp|nohkp|nohls|noic|noicon|noignorecase|noim|noimc|noimcmdline|noimd|noincsearch|noinf|noinfercase|noinsertmode|nois|nojoinspaces|nojs|nolazyredraw|nolbr|nolinebreak|nolisp|nolist|noloadplugins|nolpl|nolz|noma|nomacatsui|nomagic|nomh|noml|nomod|nomodeline|nomodifiable|nomodified|nomore|nomousef|nomousefocus|nomousehide|nonu|nonumber|noodev|noopendevice|nopaste|nopi|nopreserveindent|nopreviewwindow|noprompt|nopvw|noreadonly|noremap|norestorescreen|norevins|nori|norightleft|norightleftcmd|norl|norlc|noro|nors|noru|noruler|nosb|nosc|noscb|noscrollbind|noscs|nosecure|nosft|noshellslash|noshelltemp|noshiftround|noshortname|noshowcmd|noshowfulltag|noshowmatch|noshowmode|nosi|nosm|nosmartcase|nosmartindent|nosmarttab|nosmd|nosn|nosol|nospell|nosplitbelow|nosplitright|nospr|nosr|nossl|nosta|nostartofline|nostmp|noswapfile|noswf|nota|notagbsearch|notagrelative|notagstack|notbi|notbidi|notbs|notermbidi|noterse|notextauto|notextmode|notf|notgst|notildeop|notimeout|notitle|noto|notop|notr|nottimeout|nottybuiltin|nottyfast|notx|novb|novisualbell|nowa|nowarn|nowb|noweirdinvert|nowfh|nowfw|nowildmenu|nowinfixheight|nowinfixwidth|nowiv|nowmnu|nowrap|nowrapscan|nowrite|nowriteany|nowritebackup|nows|nrformats|numberwidth|nuw|odev|oft|ofu|omnifunc|opendevice|operatorfunc|opfunc|osfiletype|pa|para|paragraphs|paste|pastetoggle|patchexpr|patchmode|path|pdev|penc|pex|pexpr|pfn|ph|pheader|pi|pm|pmbcs|pmbfn|popt|preserveindent|previewheight|previewwindow|printdevice|printencoding|printexpr|printfont|printheader|printmbcharset|printmbfont|printoptions|prompt|pt|pumheight|pvh|pvw|qe|quoteescape|readonly|remap|report|restorescreen|revins|rightleft|rightleftcmd|rl|rlc|ro|rs|rtp|ruf|ruler|rulerformat|runtimepath|sbo|sc|scb|scr|scroll|scrollbind|scrolljump|scrolloff|scrollopt|scs|sect|sections|secure|sel|selection|selectmode|sessionoptions|sft|shcf|shellcmdflag|shellpipe|shellquote|shellredir|shellslash|shelltemp|shelltype|shellxquote|shiftround|shiftwidth|shm|shortmess|shortname|showbreak|showcmd|showfulltag|showmatch|showmode|showtabline|shq|si|sidescroll|sidescrolloff|siso|sj|slm|smartcase|smartindent|smarttab|smc|smd|softtabstop|sol|spc|spell|spellcapcheck|spellfile|spelllang|spellsuggest|spf|spl|splitbelow|splitright|sps|sr|srr|ss|ssl|ssop|stal|startofline|statusline|stl|stmp|su|sua|suffixes|suffixesadd|sw|swapfile|swapsync|swb|swf|switchbuf|sws|sxq|syn|synmaxcol|syntax|t_AB|t_AF|t_AL|t_CS|t_CV|t_Ce|t_Co|t_Cs|t_DL|t_EI|t_F1|t_F2|t_F3|t_F4|t_F5|t_F6|t_F7|t_F8|t_F9|t_IE|t_IS|t_K1|t_K3|t_K4|t_K5|t_K6|t_K7|t_K8|t_K9|t_KA|t_KB|t_KC|t_KD|t_KE|t_KF|t_KG|t_KH|t_KI|t_KJ|t_KK|t_KL|t_RI|t_RV|t_SI|t_Sb|t_Sf|t_WP|t_WS|t_ZH|t_ZR|t_al|t_bc|t_cd|t_ce|t_cl|t_cm|t_cs|t_da|t_db|t_dl|t_fs|t_k1|t_k2|t_k3|t_k4|t_k5|t_k6|t_k7|t_k8|t_k9|t_kB|t_kD|t_kI|t_kN|t_kP|t_kb|t_kd|t_ke|t_kh|t_kl|t_kr|t_ks|t_ku|t_le|t_mb|t_md|t_me|t_mr|t_ms|t_nd|t_op|t_se|t_so|t_sr|t_te|t_ti|t_ts|t_ue|t_us|t_ut|t_vb|t_ve|t_vi|t_vs|t_xs|tabline|tabpagemax|tabstop|tagbsearch|taglength|tagrelative|tagstack|tal|tb|tbi|tbidi|tbis|tbs|tenc|term|termbidi|termencoding|terse|textauto|textmode|textwidth|tgst|thesaurus|tildeop|timeout|timeoutlen|title|titlelen|titleold|titlestring|toolbar|toolbariconsize|top|tpm|tsl|tsr|ttimeout|ttimeoutlen|ttm|tty|ttybuiltin|ttyfast|ttym|ttymouse|ttyscroll|ttytype|tw|tx|uc|ul|undolevels|updatecount|updatetime|ut|vb|vbs|vdir|verbosefile|vfile|viewdir|viewoptions|viminfo|virtualedit|visualbell|vop|wak|warn|wb|wc|wcm|wd|weirdinvert|wfh|wfw|whichwrap|wi|wig|wildchar|wildcharm|wildignore|wildmenu|wildmode|wildoptions|wim|winaltkeys|window|winfixheight|winfixwidth|winheight|winminheight|winminwidth|winwidth|wiv|wiw|wm|wmh|wmnu|wmw|wop|wrap|wrapmargin|wrapscan|writeany|writebackup|writedelay|ww)\\b/,number:/\\b(?:0x[\\da-f]+|\\d+(?:\\.\\d+)?)\\b/i,operator:/\\|\\||&&|[-+.]=?|[=!](?:[=~][#?]?)?|[<>]=?[#?]?|[*\\/%?]|\\b(?:is(?:not)?)\\b/,punctuation:/[{}[\\](),;:]/};/components/prism-sqf.jsłPrism.languages.sqf = Prism.languages.extend('clike', {\n\t'string': {\n\t\tpattern: /\"(?:(?:\"\")?[^\"])*\"(?!\")|'(?:[^'])*'/,\n\t\tgreedy: true\n\t},\n\t'keyword': /\\b(?:breakOut|breakTo|call|case|catch|default|do|echo|else|execFSM|execVM|exitWith|for|forEach|forEachMember|forEachMemberAgent|forEachMemberTeam|from|goto|if|nil|preprocessFile|preprocessFileLineNumbers|private|scopeName|spawn|step|switch|then|throw|to|try|while|with)\\b/i,\n\t'boolean': /\\b(?:false|true)\\b/i,\n\t'function': /\\b(?:abs|accTime|acos|action|actionIDs|actionKeys|actionKeysImages|actionKeysNames|actionKeysNamesArray|actionName|actionParams|activateAddons|activatedAddons|activateKey|add3DENConnection|add3DENEventHandler|add3DENLayer|addAction|addBackpack|addBackpackCargo|addBackpackCargoGlobal|addBackpackGlobal|addCamShake|addCuratorAddons|addCuratorCameraArea|addCuratorEditableObjects|addCuratorEditingArea|addCuratorPoints|addEditorObject|addEventHandler|addForce|addForceGeneratorRTD|addGoggles|addGroupIcon|addHandgunItem|addHeadgear|addItem|addItemCargo|addItemCargoGlobal|addItemPool|addItemToBackpack|addItemToUniform|addItemToVest|addLiveStats|addMagazine|addMagazineAmmoCargo|addMagazineCargo|addMagazineCargoGlobal|addMagazineGlobal|addMagazinePool|addMagazines|addMagazineTurret|addMenu|addMenuItem|addMissionEventHandler|addMPEventHandler|addMusicEventHandler|addOwnedMine|addPlayerScores|addPrimaryWeaponItem|addPublicVariableEventHandler|addRating|addResources|addScore|addScoreSide|addSecondaryWeaponItem|addSwitchableUnit|addTeamMember|addToRemainsCollector|addTorque|addUniform|addVehicle|addVest|addWaypoint|addWeapon|addWeaponCargo|addWeaponCargoGlobal|addWeaponGlobal|addWeaponItem|addWeaponPool|addWeaponTurret|admin|agent|agents|AGLToASL|aimedAtTarget|aimPos|airDensityCurveRTD|airDensityRTD|airplaneThrottle|airportSide|AISFinishHeal|alive|all3DENEntities|allAirports|allControls|allCurators|allCutLayers|allDead|allDeadMen|allDisplays|allGroups|allMapMarkers|allMines|allMissionObjects|allow3DMode|allowCrewInImmobile|allowCuratorLogicIgnoreAreas|allowDamage|allowDammage|allowFileOperations|allowFleeing|allowGetIn|allowSprint|allPlayers|allSimpleObjects|allSites|allTurrets|allUnits|allUnitsUAV|allVariables|ammo|ammoOnPylon|animate|animateBay|animateDoor|animatePylon|animateSource|animationNames|animationPhase|animationSourcePhase|animationState|append|apply|armoryPoints|arrayIntersect|asin|ASLToAGL|ASLToATL|assert|assignAsCargo|assignAsCargoIndex|assignAsCommander|assignAsDriver|assignAsGunner|assignAsTurret|assignCurator|assignedCargo|assignedCommander|assignedDriver|assignedGunner|assignedItems|assignedTarget|assignedTeam|assignedVehicle|assignedVehicleRole|assignItem|assignTeam|assignToAirport|atan|atan2|atg|ATLToASL|attachedObject|attachedObjects|attachedTo|attachObject|attachTo|attackEnabled|backpack|backpackCargo|backpackContainer|backpackItems|backpackMagazines|backpackSpaceFor|behaviour|benchmark|binocular|blufor|boundingBox|boundingBoxReal|boundingCenter|briefingName|buildingExit|buildingPos|buldozer_EnableRoadDiag|buldozer_IsEnabledRoadDiag|buldozer_LoadNewRoads|buldozer_reloadOperMap|buttonAction|buttonSetAction|cadetMode|callExtension|camCommand|camCommit|camCommitPrepared|camCommitted|camConstuctionSetParams|camCreate|camDestroy|cameraEffect|cameraEffectEnableHUD|cameraInterest|cameraOn|cameraView|campaignConfigFile|camPreload|camPreloaded|camPrepareBank|camPrepareDir|camPrepareDive|camPrepareFocus|camPrepareFov|camPrepareFovRange|camPreparePos|camPrepareRelPos|camPrepareTarget|camSetBank|camSetDir|camSetDive|camSetFocus|camSetFov|camSetFovRange|camSetPos|camSetRelPos|camSetTarget|camTarget|camUseNVG|canAdd|canAddItemToBackpack|canAddItemToUniform|canAddItemToVest|cancelSimpleTaskDestination|canFire|canMove|canSlingLoad|canStand|canSuspend|canTriggerDynamicSimulation|canUnloadInCombat|canVehicleCargo|captive|captiveNum|cbChecked|cbSetChecked|ceil|channelEnabled|cheatsEnabled|checkAIFeature|checkVisibility|civilian|className|clear3DENAttribute|clear3DENInventory|clearAllItemsFromBackpack|clearBackpackCargo|clearBackpackCargoGlobal|clearForcesRTD|clearGroupIcons|clearItemCargo|clearItemCargoGlobal|clearItemPool|clearMagazineCargo|clearMagazineCargoGlobal|clearMagazinePool|clearOverlay|clearRadio|clearVehicleInit|clearWeaponCargo|clearWeaponCargoGlobal|clearWeaponPool|clientOwner|closeDialog|closeDisplay|closeOverlay|collapseObjectTree|collect3DENHistory|collectiveRTD|combatMode|commandArtilleryFire|commandChat|commander|commandFire|commandFollow|commandFSM|commandGetOut|commandingMenu|commandMove|commandRadio|commandStop|commandSuppressiveFire|commandTarget|commandWatch|comment|commitOverlay|compile|compileFinal|completedFSM|composeText|configClasses|configFile|configHierarchy|configName|configNull|configProperties|configSourceAddonList|configSourceMod|configSourceModList|confirmSensorTarget|connectTerminalToUAV|controlNull|controlsGroupCtrl|copyFromClipboard|copyToClipboard|copyWaypoints|cos|count|countEnemy|countFriendly|countSide|countType|countUnknown|create3DENComposition|create3DENEntity|createAgent|createCenter|createDialog|createDiaryLink|createDiaryRecord|createDiarySubject|createDisplay|createGearDialog|createGroup|createGuardedPoint|createLocation|createMarker|createMarkerLocal|createMenu|createMine|createMissionDisplay|createMPCampaignDisplay|createSimpleObject|createSimpleTask|createSite|createSoundSource|createTask|createTeam|createTrigger|createUnit|createVehicle|createVehicleCrew|createVehicleLocal|crew|ctAddHeader|ctAddRow|ctClear|ctCurSel|ctData|ctFindHeaderRows|ctFindRowHeader|ctHeaderControls|ctHeaderCount|ctRemoveHeaders|ctRemoveRows|ctrlActivate|ctrlAddEventHandler|ctrlAngle|ctrlAutoScrollDelay|ctrlAutoScrollRewind|ctrlAutoScrollSpeed|ctrlChecked|ctrlClassName|ctrlCommit|ctrlCommitted|ctrlCreate|ctrlDelete|ctrlEnable|ctrlEnabled|ctrlFade|ctrlHTMLLoaded|ctrlIDC|ctrlIDD|ctrlMapAnimAdd|ctrlMapAnimClear|ctrlMapAnimCommit|ctrlMapAnimDone|ctrlMapCursor|ctrlMapMouseOver|ctrlMapScale|ctrlMapScreenToWorld|ctrlMapWorldToScreen|ctrlModel|ctrlModelDirAndUp|ctrlModelScale|ctrlParent|ctrlParentControlsGroup|ctrlPosition|ctrlRemoveAllEventHandlers|ctrlRemoveEventHandler|ctrlScale|ctrlSetActiveColor|ctrlSetAngle|ctrlSetAutoScrollDelay|ctrlSetAutoScrollRewind|ctrlSetAutoScrollSpeed|ctrlSetBackgroundColor|ctrlSetChecked|ctrlSetDisabledColor|ctrlSetEventHandler|ctrlSetFade|ctrlSetFocus|ctrlSetFont|ctrlSetFontH1|ctrlSetFontH1B|ctrlSetFontH2|ctrlSetFontH2B|ctrlSetFontH3|ctrlSetFontH3B|ctrlSetFontH4|ctrlSetFontH4B|ctrlSetFontH5|ctrlSetFontH5B|ctrlSetFontH6|ctrlSetFontH6B|ctrlSetFontHeight|ctrlSetFontHeightH1|ctrlSetFontHeightH2|ctrlSetFontHeightH3|ctrlSetFontHeightH4|ctrlSetFontHeightH5|ctrlSetFontHeightH6|ctrlSetFontHeightSecondary|ctrlSetFontP|ctrlSetFontPB|ctrlSetFontSecondary|ctrlSetForegroundColor|ctrlSetModel|ctrlSetModelDirAndUp|ctrlSetModelScale|ctrlSetPixelPrecision|ctrlSetPosition|ctrlSetScale|ctrlSetStructuredText|ctrlSetText|ctrlSetTextColor|ctrlSetTextColorSecondary|ctrlSetTextSecondary|ctrlSetTooltip|ctrlSetTooltipColorBox|ctrlSetTooltipColorShade|ctrlSetTooltipColorText|ctrlShow|ctrlShown|ctrlText|ctrlTextHeight|ctrlTextSecondary|ctrlTextWidth|ctrlType|ctrlVisible|ctRowControls|ctRowCount|ctSetCurSel|ctSetData|ctSetHeaderTemplate|ctSetRowTemplate|ctSetValue|ctValue|curatorAddons|curatorCamera|curatorCameraArea|curatorCameraAreaCeiling|curatorCoef|curatorEditableObjects|curatorEditingArea|curatorEditingAreaType|curatorMouseOver|curatorPoints|curatorRegisteredObjects|curatorSelected|curatorWaypointCost|current3DENOperation|currentChannel|currentCommand|currentMagazine|currentMagazineDetail|currentMagazineDetailTurret|currentMagazineTurret|currentMuzzle|currentNamespace|currentTask|currentTasks|currentThrowable|currentVisionMode|currentWaypoint|currentWeapon|currentWeaponMode|currentWeaponTurret|currentZeroing|cursorObject|cursorTarget|customChat|customRadio|cutFadeOut|cutObj|cutRsc|cutText|damage|date|dateToNumber|daytime|deActivateKey|debriefingText|debugFSM|debugLog|deg|delete3DENEntities|deleteAt|deleteCenter|deleteCollection|deleteEditorObject|deleteGroup|deleteGroupWhenEmpty|deleteIdentity|deleteLocation|deleteMarker|deleteMarkerLocal|deleteRange|deleteResources|deleteSite|deleteStatus|deleteTeam|deleteVehicle|deleteVehicleCrew|deleteWaypoint|detach|detectedMines|diag_activeMissionFSMs|diag_activeScripts|diag_activeSQFScripts|diag_activeSQSScripts|diag_captureFrame|diag_captureFrameToFile|diag_captureSlowFrame|diag_codePerformance|diag_drawMode|diag_dynamicSimulationEnd|diag_enable|diag_enabled|diag_fps|diag_fpsMin|diag_frameNo|diag_lightNewLoad|diag_list|diag_log|diag_logSlowFrame|diag_mergeConfigFile|diag_recordTurretLimits|diag_setLightNew|diag_tickTime|diag_toggle|dialog|diarySubjectExists|didJIP|didJIPOwner|difficulty|difficultyEnabled|difficultyEnabledRTD|difficultyOption|direction|directSay|disableAI|disableCollisionWith|disableConversation|disableDebriefingStats|disableMapIndicators|disableNVGEquipment|disableRemoteSensors|disableSerialization|disableTIEquipment|disableUAVConnectability|disableUserInput|displayAddEventHandler|displayCtrl|displayNull|displayParent|displayRemoveAllEventHandlers|displayRemoveEventHandler|displaySetEventHandler|dissolveTeam|distance|distance2D|distanceSqr|distributionRegion|do3DENAction|doArtilleryFire|doFire|doFollow|doFSM|doGetOut|doMove|doorPhase|doStop|doSuppressiveFire|doTarget|doWatch|drawArrow|drawEllipse|drawIcon|drawIcon3D|drawLine|drawLine3D|drawLink|drawLocation|drawPolygon|drawRectangle|drawTriangle|driver|drop|dynamicSimulationDistance|dynamicSimulationDistanceCoef|dynamicSimulationEnabled|dynamicSimulationSystemEnabled|east|edit3DENMissionAttributes|editObject|editorSetEventHandler|effectiveCommander|emptyPositions|enableAI|enableAIFeature|enableAimPrecision|enableAttack|enableAudioFeature|enableAutoStartUpRTD|enableAutoTrimRTD|enableCamShake|enableCaustics|enableChannel|enableCollisionWith|enableCopilot|enableDebriefingStats|enableDiagLegend|enableDynamicSimulation|enableDynamicSimulationSystem|enableEndDialog|enableEngineArtillery|enableEnvironment|enableFatigue|enableGunLights|enableInfoPanelComponent|enableIRLasers|enableMimics|enablePersonTurret|enableRadio|enableReload|enableRopeAttach|enableSatNormalOnDetail|enableSaving|enableSentences|enableSimulation|enableSimulationGlobal|enableStamina|enableStressDamage|enableTeamSwitch|enableTraffic|enableUAVConnectability|enableUAVWaypoints|enableVehicleCargo|enableVehicleSensor|enableWeaponDisassembly|endl|endLoadingScreen|endMission|engineOn|enginesIsOnRTD|enginesPowerRTD|enginesRpmRTD|enginesTorqueRTD|entities|environmentEnabled|estimatedEndServerTime|estimatedTimeLeft|evalObjectArgument|everyBackpack|everyContainer|exec|execEditorScript|exp|expectedDestination|exportJIPMessages|eyeDirection|eyePos|face|faction|fadeMusic|fadeRadio|fadeSound|fadeSpeech|failMission|fillWeaponsFromPool|find|findCover|findDisplay|findEditorObject|findEmptyPosition|findEmptyPositionReady|findIf|findNearestEnemy|finishMissionInit|finite|fire|fireAtTarget|firstBackpack|flag|flagAnimationPhase|flagOwner|flagSide|flagTexture|fleeing|floor|flyInHeight|flyInHeightASL|fog|fogForecast|fogParams|forceAddUniform|forceAtPositionRTD|forcedMap|forceEnd|forceFlagTexture|forceFollowRoad|forceGeneratorRTD|forceMap|forceRespawn|forceSpeed|forceWalk|forceWeaponFire|forceWeatherChange|forgetTarget|format|formation|formationDirection|formationLeader|formationMembers|formationPosition|formationTask|formatText|formLeader|freeLook|fromEditor|fuel|fullCrew|gearIDCAmmoCount|gearSlotAmmoCount|gearSlotData|get3DENActionState|get3DENAttribute|get3DENCamera|get3DENConnections|get3DENEntity|get3DENEntityID|get3DENGrid|get3DENIconsVisible|get3DENLayerEntities|get3DENLinesVisible|get3DENMissionAttribute|get3DENMouseOver|get3DENSelected|getAimingCoef|getAllEnvSoundControllers|getAllHitPointsDamage|getAllOwnedMines|getAllSoundControllers|getAmmoCargo|getAnimAimPrecision|getAnimSpeedCoef|getArray|getArtilleryAmmo|getArtilleryComputerSettings|getArtilleryETA|getAssignedCuratorLogic|getAssignedCuratorUnit|getBackpackCargo|getBleedingRemaining|getBurningValue|getCameraViewDirection|getCargoIndex|getCenterOfMass|getClientState|getClientStateNumber|getCompatiblePylonMagazines|getConnectedUAV|getContainerMaxLoad|getCursorObjectParams|getCustomAimCoef|getDammage|getDescription|getDir|getDirVisual|getDLCAssetsUsage|getDLCAssetsUsageByName|getDLCs|getDLCUsageTime|getEditorCamera|getEditorMode|getEditorObjectScope|getElevationOffset|getEngineTargetRpmRTD|getEnvSoundController|getFatigue|getFieldManualStartPage|getForcedFlagTexture|getFriend|getFSMVariable|getFuelCargo|getGroupIcon|getGroupIconParams|getGroupIcons|getHideFrom|getHit|getHitIndex|getHitPointDamage|getItemCargo|getMagazineCargo|getMarkerColor|getMarkerPos|getMarkerSize|getMarkerType|getMass|getMissionConfig|getMissionConfigValue|getMissionDLCs|getMissionLayerEntities|getMissionLayers|getModelInfo|getMousePosition|getMusicPlayedTime|getNumber|getObjectArgument|getObjectChildren|getObjectDLC|getObjectMaterials|getObjectProxy|getObjectTextures|getObjectType|getObjectViewDistance|getOxygenRemaining|getPersonUsedDLCs|getPilotCameraDirection|getPilotCameraPosition|getPilotCameraRotation|getPilotCameraTarget|getPlateNumber|getPlayerChannel|getPlayerScores|getPlayerUID|getPlayerUIDOld|getPos|getPosASL|getPosASLVisual|getPosASLW|getPosATL|getPosATLVisual|getPosVisual|getPosWorld|getPylonMagazines|getRelDir|getRelPos|getRemoteSensorsDisabled|getRepairCargo|getResolution|getRotorBrakeRTD|getShadowDistance|getShotParents|getSlingLoad|getSoundController|getSoundControllerResult|getSpeed|getStamina|getStatValue|getSuppression|getTerrainGrid|getTerrainHeightASL|getText|getTotalDLCUsageTime|getTrimOffsetRTD|getUnitLoadout|getUnitTrait|getUserMFDText|getUserMFDValue|getVariable|getVehicleCargo|getWeaponCargo|getWeaponSway|getWingsOrientationRTD|getWingsPositionRTD|getWPPos|glanceAt|globalChat|globalRadio|goggles|group|groupChat|groupFromNetId|groupIconSelectable|groupIconsVisible|groupId|groupOwner|groupRadio|groupSelectedUnits|groupSelectUnit|grpNull|gunner|gusts|halt|handgunItems|handgunMagazine|handgunWeapon|handsHit|hasInterface|hasPilotCamera|hasWeapon|hcAllGroups|hcGroupParams|hcLeader|hcRemoveAllGroups|hcRemoveGroup|hcSelected|hcSelectGroup|hcSetGroup|hcShowBar|hcShownBar|headgear|hideBody|hideObject|hideObjectGlobal|hideSelection|hint|hintC|hintCadet|hintSilent|hmd|hostMission|htmlLoad|HUDMovementLevels|humidity|image|importAllGroups|importance|in|inArea|inAreaArray|incapacitatedState|independent|inflame|inflamed|infoPanel|infoPanelComponentEnabled|infoPanelComponents|infoPanels|inGameUISetEventHandler|inheritsFrom|initAmbientLife|inPolygon|inputAction|inRangeOfArtillery|insertEditorObject|intersect|is3DEN|is3DENMultiplayer|isAbleToBreathe|isAgent|isAimPrecisionEnabled|isArray|isAutoHoverOn|isAutonomous|isAutoStartUpEnabledRTD|isAutotest|isAutoTrimOnRTD|isBleeding|isBurning|isClass|isCollisionLightOn|isCopilotEnabled|isDamageAllowed|isDedicated|isDLCAvailable|isEngineOn|isEqualTo|isEqualType|isEqualTypeAll|isEqualTypeAny|isEqualTypeArray|isEqualTypeParams|isFilePatchingEnabled|isFlashlightOn|isFlatEmpty|isForcedWalk|isFormationLeader|isGroupDeletedWhenEmpty|isHidden|isInRemainsCollector|isInstructorFigureEnabled|isIRLaserOn|isKeyActive|isKindOf|isLaserOn|isLightOn|isLocalized|isManualFire|isMarkedForCollection|isMultiplayer|isMultiplayerSolo|isNil|isNull|isNumber|isObjectHidden|isObjectRTD|isOnRoad|isPipEnabled|isPlayer|isRealTime|isRemoteExecuted|isRemoteExecutedJIP|isServer|isShowing3DIcons|isSimpleObject|isSprintAllowed|isStaminaEnabled|isSteamMission|isStreamFriendlyUIEnabled|isStressDamageEnabled|isText|isTouchingGround|isTurnedOut|isTutHintsEnabled|isUAVConnectable|isUAVConnected|isUIContext|isUniformAllowed|isVehicleCargo|isVehicleRadarOn|isVehicleSensorEnabled|isWalking|isWeaponDeployed|isWeaponRested|itemCargo|items|itemsWithMagazines|join|joinAs|joinAsSilent|joinSilent|joinString|kbAddDatabase|kbAddDatabaseTargets|kbAddTopic|kbHasTopic|kbReact|kbRemoveTopic|kbTell|kbWasSaid|keyImage|keyName|knowsAbout|land|landAt|landResult|language|laserTarget|lbAdd|lbClear|lbColor|lbColorRight|lbCurSel|lbData|lbDelete|lbIsSelected|lbPicture|lbPictureRight|lbSelection|lbSetColor|lbSetColorRight|lbSetCurSel|lbSetData|lbSetPicture|lbSetPictureColor|lbSetPictureColorDisabled|lbSetPictureColorSelected|lbSetPictureRight|lbSetPictureRightColor|lbSetPictureRightColorDisabled|lbSetPictureRightColorSelected|lbSetSelectColor|lbSetSelectColorRight|lbSetSelected|lbSetText|lbSetTextRight|lbSetTooltip|lbSetValue|lbSize|lbSort|lbSortByValue|lbText|lbTextRight|lbValue|leader|leaderboardDeInit|leaderboardGetRows|leaderboardInit|leaderboardRequestRowsFriends|leaderboardRequestRowsGlobal|leaderboardRequestRowsGlobalAroundUser|leaderboardsRequestUploadScore|leaderboardsRequestUploadScoreKeepBest|leaderboardState|leaveVehicle|libraryCredits|libraryDisclaimers|lifeState|lightAttachObject|lightDetachObject|lightIsOn|lightnings|limitSpeed|linearConversion|lineBreak|lineIntersects|lineIntersectsObjs|lineIntersectsSurfaces|lineIntersectsWith|linkItem|list|listObjects|listRemoteTargets|listVehicleSensors|ln|lnbAddArray|lnbAddColumn|lnbAddRow|lnbClear|lnbColor|lnbColorRight|lnbCurSelRow|lnbData|lnbDeleteColumn|lnbDeleteRow|lnbGetColumnsPosition|lnbPicture|lnbPictureRight|lnbSetColor|lnbSetColorRight|lnbSetColumnsPos|lnbSetCurSelRow|lnbSetData|lnbSetPicture|lnbSetPictureColor|lnbSetPictureColorRight|lnbSetPictureColorSelected|lnbSetPictureColorSelectedRight|lnbSetPictureRight|lnbSetText|lnbSetTextRight|lnbSetValue|lnbSize|lnbSort|lnbSortByValue|lnbText|lnbTextRight|lnbValue|load|loadAbs|loadBackpack|loadFile|loadGame|loadIdentity|loadMagazine|loadOverlay|loadStatus|loadUniform|loadVest|local|localize|locationNull|locationPosition|lock|lockCameraTo|lockCargo|lockDriver|locked|lockedCargo|lockedDriver|lockedTurret|lockIdentity|lockTurret|lockWP|log|logEntities|logNetwork|logNetworkTerminate|lookAt|lookAtPos|magazineCargo|magazines|magazinesAllTurrets|magazinesAmmo|magazinesAmmoCargo|magazinesAmmoFull|magazinesDetail|magazinesDetailBackpack|magazinesDetailUniform|magazinesDetailVest|magazinesTurret|magazineTurretAmmo|mapAnimAdd|mapAnimClear|mapAnimCommit|mapAnimDone|mapCenterOnCamera|mapGridPosition|markAsFinishedOnSteam|markerAlpha|markerBrush|markerColor|markerDir|markerPos|markerShape|markerSize|markerText|markerType|max|members|menuAction|menuAdd|menuChecked|menuClear|menuCollapse|menuData|menuDelete|menuEnable|menuEnabled|menuExpand|menuHover|menuPicture|menuSetAction|menuSetCheck|menuSetData|menuSetPicture|menuSetValue|menuShortcut|menuShortcutText|menuSize|menuSort|menuText|menuURL|menuValue|min|mineActive|mineDetectedBy|missionConfigFile|missionDifficulty|missionName|missionNamespace|missionStart|missionVersion|modelToWorld|modelToWorldVisual|modelToWorldVisualWorld|modelToWorldWorld|modParams|moonIntensity|moonPhase|morale|move|move3DENCamera|moveInAny|moveInCargo|moveInCommander|moveInDriver|moveInGunner|moveInTurret|moveObjectToEnd|moveOut|moveTime|moveTo|moveToCompleted|moveToFailed|musicVolume|name|nameSound|nearEntities|nearestBuilding|nearestLocation|nearestLocations|nearestLocationWithDubbing|nearestObject|nearestObjects|nearestTerrainObjects|nearObjects|nearObjectsReady|nearRoads|nearSupplies|nearTargets|needReload|netId|netObjNull|newOverlay|nextMenuItemIndex|nextWeatherChange|nMenuItems|numberOfEnginesRTD|numberToDate|objectCurators|objectFromNetId|objectParent|objNull|objStatus|onBriefingGear|onBriefingGroup|onBriefingNotes|onBriefingPlan|onBriefingTeamSwitch|onCommandModeChanged|onDoubleClick|onEachFrame|onGroupIconClick|onGroupIconOverEnter|onGroupIconOverLeave|onHCGroupSelectionChanged|onMapSingleClick|onPlayerConnected|onPlayerDisconnected|onPreloadFinished|onPreloadStarted|onShowNewObject|onTeamSwitch|openCuratorInterface|openDLCPage|openDSInterface|openMap|openSteamApp|openYoutubeVideo|opfor|orderGetIn|overcast|overcastForecast|owner|param|params|parseNumber|parseSimpleArray|parseText|parsingNamespace|particlesQuality|pi|pickWeaponPool|pitch|pixelGrid|pixelGridBase|pixelGridNoUIScale|pixelH|pixelW|playableSlotsNumber|playableUnits|playAction|playActionNow|player|playerRespawnTime|playerSide|playersNumber|playGesture|playMission|playMove|playMoveNow|playMusic|playScriptedMission|playSound|playSound3D|position|positionCameraToWorld|posScreenToWorld|posWorldToScreen|ppEffectAdjust|ppEffectCommit|ppEffectCommitted|ppEffectCreate|ppEffectDestroy|ppEffectEnable|ppEffectEnabled|ppEffectForceInNVG|precision|preloadCamera|preloadObject|preloadSound|preloadTitleObj|preloadTitleRsc|primaryWeapon|primaryWeaponItems|primaryWeaponMagazine|priority|processDiaryLink|processInitCommands|productVersion|profileName|profileNamespace|profileNameSteam|progressLoadingScreen|progressPosition|progressSetPosition|publicVariable|publicVariableClient|publicVariableServer|pushBack|pushBackUnique|putWeaponPool|queryItemsPool|queryMagazinePool|queryWeaponPool|rad|radioChannelAdd|radioChannelCreate|radioChannelRemove|radioChannelSetCallSign|radioChannelSetLabel|radioVolume|rain|rainbow|random|rank|rankId|rating|rectangular|registeredTasks|registerTask|reload|reloadEnabled|remoteControl|remoteExec|remoteExecCall|remoteExecutedOwner|remove3DENConnection|remove3DENEventHandler|remove3DENLayer|removeAction|removeAll3DENEventHandlers|removeAllActions|removeAllAssignedItems|removeAllContainers|removeAllCuratorAddons|removeAllCuratorCameraAreas|removeAllCuratorEditingAreas|removeAllEventHandlers|removeAllHandgunItems|removeAllItems|removeAllItemsWithMagazines|removeAllMissionEventHandlers|removeAllMPEventHandlers|removeAllMusicEventHandlers|removeAllOwnedMines|removeAllPrimaryWeaponItems|removeAllWeapons|removeBackpack|removeBackpackGlobal|removeCuratorAddons|removeCuratorCameraArea|removeCuratorEditableObjects|removeCuratorEditingArea|removeDrawIcon|removeDrawLinks|removeEventHandler|removeFromRemainsCollector|removeGoggles|removeGroupIcon|removeHandgunItem|removeHeadgear|removeItem|removeItemFromBackpack|removeItemFromUniform|removeItemFromVest|removeItems|removeMagazine|removeMagazineGlobal|removeMagazines|removeMagazinesTurret|removeMagazineTurret|removeMenuItem|removeMissionEventHandler|removeMPEventHandler|removeMusicEventHandler|removeOwnedMine|removePrimaryWeaponItem|removeSecondaryWeaponItem|removeSimpleTask|removeSwitchableUnit|removeTeamMember|removeUniform|removeVest|removeWeapon|removeWeaponAttachmentCargo|removeWeaponCargo|removeWeaponGlobal|removeWeaponTurret|reportRemoteTarget|requiredVersion|resetCamShake|resetSubgroupDirection|resistance|resize|resources|respawnVehicle|restartEditorCamera|reveal|revealMine|reverse|reversedMouseY|roadAt|roadsConnectedTo|roleDescription|ropeAttachedObjects|ropeAttachedTo|ropeAttachEnabled|ropeAttachTo|ropeCreate|ropeCut|ropeDestroy|ropeDetach|ropeEndPosition|ropeLength|ropes|ropeUnwind|ropeUnwound|rotorsForcesRTD|rotorsRpmRTD|round|runInitScript|safeZoneH|safeZoneW|safeZoneWAbs|safeZoneX|safeZoneXAbs|safeZoneY|save3DENInventory|saveGame|saveIdentity|saveJoysticks|saveOverlay|saveProfileNamespace|saveStatus|saveVar|savingEnabled|say|say2D|say3D|score|scoreSide|screenshot|screenToWorld|scriptDone|scriptName|scriptNull|scudState|secondaryWeapon|secondaryWeaponItems|secondaryWeaponMagazine|select|selectBestPlaces|selectDiarySubject|selectedEditorObjects|selectEditorObject|selectionNames|selectionPosition|selectLeader|selectMax|selectMin|selectNoPlayer|selectPlayer|selectRandom|selectRandomWeighted|selectWeapon|selectWeaponTurret|sendAUMessage|sendSimpleCommand|sendTask|sendTaskResult|sendUDPMessage|serverCommand|serverCommandAvailable|serverCommandExecutable|serverName|serverTime|set|set3DENAttribute|set3DENAttributes|set3DENGrid|set3DENIconsVisible|set3DENLayer|set3DENLinesVisible|set3DENLogicType|set3DENMissionAttribute|set3DENMissionAttributes|set3DENModelsVisible|set3DENObjectType|set3DENSelected|setAccTime|setActualCollectiveRTD|setAirplaneThrottle|setAirportSide|setAmmo|setAmmoCargo|setAmmoOnPylon|setAnimSpeedCoef|setAperture|setApertureNew|setArmoryPoints|setAttributes|setAutonomous|setBehaviour|setBleedingRemaining|setBrakesRTD|setCameraInterest|setCamShakeDefParams|setCamShakeParams|setCamUseTI|setCaptive|setCenterOfMass|setCollisionLight|setCombatMode|setCompassOscillation|setConvoySeparation|setCuratorCameraAreaCeiling|setCuratorCoef|setCuratorEditingAreaType|setCuratorWaypointCost|setCurrentChannel|setCurrentTask|setCurrentWaypoint|setCustomAimCoef|setCustomWeightRTD|setDamage|setDammage|setDate|setDebriefingText|setDefaultCamera|setDestination|setDetailMapBlendPars|setDir|setDirection|setDrawIcon|setDriveOnPath|setDropInterval|setDynamicSimulationDistance|setDynamicSimulationDistanceCoef|setEditorMode|setEditorObjectScope|setEffectCondition|setEngineRpmRTD|setFace|setFaceAnimation|setFatigue|setFeatureType|setFlagAnimationPhase|setFlagOwner|setFlagSide|setFlagTexture|setFog|setForceGeneratorRTD|setFormation|setFormationTask|setFormDir|setFriend|setFromEditor|setFSMVariable|setFuel|setFuelCargo|setGroupIcon|setGroupIconParams|setGroupIconsSelectable|setGroupIconsVisible|setGroupId|setGroupIdGlobal|setGroupOwner|setGusts|setHideBehind|setHit|setHitIndex|setHitPointDamage|setHorizonParallaxCoef|setHUDMovementLevels|setIdentity|setImportance|setInfoPanel|setLeader|setLightAmbient|setLightAttenuation|setLightBrightness|setLightColor|setLightDayLight|setLightFlareMaxDistance|setLightFlareSize|setLightIntensity|setLightnings|setLightUseFlare|setLocalWindParams|setMagazineTurretAmmo|setMarkerAlpha|setMarkerAlphaLocal|setMarkerBrush|setMarkerBrushLocal|setMarkerColor|setMarkerColorLocal|setMarkerDir|setMarkerDirLocal|setMarkerPos|setMarkerPosLocal|setMarkerShape|setMarkerShapeLocal|setMarkerSize|setMarkerSizeLocal|setMarkerText|setMarkerTextLocal|setMarkerType|setMarkerTypeLocal|setMass|setMimic|setMousePosition|setMusicEffect|setMusicEventHandler|setName|setNameSound|setObjectArguments|setObjectMaterial|setObjectMaterialGlobal|setObjectProxy|setObjectTexture|setObjectTextureGlobal|setObjectViewDistance|setOvercast|setOwner|setOxygenRemaining|setParticleCircle|setParticleClass|setParticleFire|setParticleParams|setParticleRandom|setPilotCameraDirection|setPilotCameraRotation|setPilotCameraTarget|setPilotLight|setPiPEffect|setPitch|setPlateNumber|setPlayable|setPlayerRespawnTime|setPos|setPosASL|setPosASL2|setPosASLW|setPosATL|setPosition|setPosWorld|setPylonLoadOut|setPylonsPriority|setRadioMsg|setRain|setRainbow|setRandomLip|setRank|setRectangular|setRepairCargo|setRotorBrakeRTD|setShadowDistance|setShotParents|setSide|setSimpleTaskAlwaysVisible|setSimpleTaskCustomData|setSimpleTaskDescription|setSimpleTaskDestination|setSimpleTaskTarget|setSimpleTaskType|setSimulWeatherLayers|setSize|setSkill|setSlingLoad|setSoundEffect|setSpeaker|setSpeech|setSpeedMode|setStamina|setStaminaScheme|setStatValue|setSuppression|setSystemOfUnits|setTargetAge|setTaskMarkerOffset|setTaskResult|setTaskState|setTerrainGrid|setText|setTimeMultiplier|setTitleEffect|setToneMapping|setToneMappingParams|setTrafficDensity|setTrafficDistance|setTrafficGap|setTrafficSpeed|setTriggerActivation|setTriggerArea|setTriggerStatements|setTriggerText|setTriggerTimeout|setTriggerType|setType|setUnconscious|setUnitAbility|setUnitLoadout|setUnitPos|setUnitPosWeak|setUnitRank|setUnitRecoilCoefficient|setUnitTrait|setUnloadInCombat|setUserActionText|setUserMFDText|setUserMFDValue|setVariable|setVectorDir|setVectorDirAndUp|setVectorUp|setVehicleAmmo|setVehicleAmmoDef|setVehicleArmor|setVehicleCargo|setVehicleId|setVehicleInit|setVehicleLock|setVehiclePosition|setVehicleRadar|setVehicleReceiveRemoteTargets|setVehicleReportOwnPosition|setVehicleReportRemoteTargets|setVehicleTIPars|setVehicleVarName|setVelocity|setVelocityModelSpace|setVelocityTransformation|setViewDistance|setVisibleIfTreeCollapsed|setWantedRpmRTD|setWaves|setWaypointBehaviour|setWaypointCombatMode|setWaypointCompletionRadius|setWaypointDescription|setWaypointForceBehaviour|setWaypointFormation|setWaypointHousePosition|setWaypointLoiterRadius|setWaypointLoiterType|setWaypointName|setWaypointPosition|setWaypointScript|setWaypointSpeed|setWaypointStatements|setWaypointTimeout|setWaypointType|setWaypointVisible|setWeaponReloadingTime|setWind|setWindDir|setWindForce|setWindStr|setWingForceScaleRTD|setWPPos|show3DIcons|showChat|showCinemaBorder|showCommandingMenu|showCompass|showCuratorCompass|showGPS|showHUD|showLegend|showMap|shownArtilleryComputer|shownChat|shownCompass|shownCuratorCompass|showNewEditorObject|shownGPS|shownHUD|shownMap|shownPad|shownRadio|shownScoretable|shownUAVFeed|shownWarrant|shownWatch|showPad|showRadio|showScoretable|showSubtitles|showUAVFeed|showWarrant|showWatch|showWaypoint|showWaypoints|side|sideAmbientLife|sideChat|sideEmpty|sideEnemy|sideFriendly|sideLogic|sideRadio|sideUnknown|simpleTasks|simulationEnabled|simulCloudDensity|simulCloudOcclusion|simulInClouds|simulWeatherSync|sin|size|sizeOf|skill|skillFinal|skipTime|sleep|sliderPosition|sliderRange|sliderSetPosition|sliderSetRange|sliderSetSpeed|sliderSpeed|slingLoadAssistantShown|soldierMagazines|someAmmo|sort|soundVolume|speaker|speed|speedMode|splitString|sqrt|squadParams|stance|startLoadingScreen|stop|stopEngineRTD|stopped|str|sunOrMoon|supportInfo|suppressFor|surfaceIsWater|surfaceNormal|surfaceType|swimInDepth|switchableUnits|switchAction|switchCamera|switchGesture|switchLight|switchMove|synchronizedObjects|synchronizedTriggers|synchronizedWaypoints|synchronizeObjectsAdd|synchronizeObjectsRemove|synchronizeTrigger|synchronizeWaypoint|systemChat|systemOfUnits|tan|targetKnowledge|targets|targetsAggregate|targetsQuery|taskAlwaysVisible|taskChildren|taskCompleted|taskCustomData|taskDescription|taskDestination|taskHint|taskMarkerOffset|taskNull|taskParent|taskResult|taskState|taskType|teamMember|teamMemberNull|teamName|teams|teamSwitch|teamSwitchEnabled|teamType|terminate|terrainIntersect|terrainIntersectASL|terrainIntersectAtASL|text|textLog|textLogFormat|tg|time|timeMultiplier|titleCut|titleFadeOut|titleObj|titleRsc|titleText|toArray|toFixed|toLower|toString|toUpper|triggerActivated|triggerActivation|triggerArea|triggerAttachedVehicle|triggerAttachObject|triggerAttachVehicle|triggerDynamicSimulation|triggerStatements|triggerText|triggerTimeout|triggerTimeoutCurrent|triggerType|turretLocal|turretOwner|turretUnit|tvAdd|tvClear|tvCollapse|tvCollapseAll|tvCount|tvCurSel|tvData|tvDelete|tvExpand|tvExpandAll|tvPicture|tvPictureRight|tvSetColor|tvSetCurSel|tvSetData|tvSetPicture|tvSetPictureColor|tvSetPictureColorDisabled|tvSetPictureColorSelected|tvSetPictureRight|tvSetPictureRightColor|tvSetPictureRightColorDisabled|tvSetPictureRightColorSelected|tvSetSelectColor|tvSetText|tvSetTooltip|tvSetValue|tvSort|tvSortByValue|tvText|tvTooltip|tvValue|type|typeName|typeOf|UAVControl|uiNamespace|uiSleep|unassignCurator|unassignItem|unassignTeam|unassignVehicle|underwater|uniform|uniformContainer|uniformItems|uniformMagazines|unitAddons|unitAimPosition|unitAimPositionVisual|unitBackpack|unitIsUAV|unitPos|unitReady|unitRecoilCoefficient|units|unitsBelowHeight|unlinkItem|unlockAchievement|unregisterTask|updateDrawIcon|updateMenuItem|updateObjectTree|useAIOperMapObstructionTest|useAISteeringComponent|useAudioTimeForMoves|userInputDisabled|vectorAdd|vectorCos|vectorCrossProduct|vectorDiff|vectorDir|vectorDirVisual|vectorDistance|vectorDistanceSqr|vectorDotProduct|vectorFromTo|vectorMagnitude|vectorMagnitudeSqr|vectorModelToWorld|vectorModelToWorldVisual|vectorMultiply|vectorNormalized|vectorUp|vectorUpVisual|vectorWorldToModel|vectorWorldToModelVisual|vehicle|vehicleCargoEnabled|vehicleChat|vehicleRadio|vehicleReceiveRemoteTargets|vehicleReportOwnPosition|vehicleReportRemoteTargets|vehicles|vehicleVarName|velocity|velocityModelSpace|verifySignature|vest|vestContainer|vestItems|vestMagazines|viewDistance|visibleCompass|visibleGPS|visibleMap|visiblePosition|visiblePositionASL|visibleScoretable|visibleWatch|waitUntil|waves|waypointAttachedObject|waypointAttachedVehicle|waypointAttachObject|waypointAttachVehicle|waypointBehaviour|waypointCombatMode|waypointCompletionRadius|waypointDescription|waypointForceBehaviour|waypointFormation|waypointHousePosition|waypointLoiterRadius|waypointLoiterType|waypointName|waypointPosition|waypoints|waypointScript|waypointsEnabledUAV|waypointShow|waypointSpeed|waypointStatements|waypointTimeout|waypointTimeoutCurrent|waypointType|waypointVisible|weaponAccessories|weaponAccessoriesCargo|weaponCargo|weaponDirection|weaponInertia|weaponLowered|weapons|weaponsItems|weaponsItemsCargo|weaponState|weaponsTurret|weightRTD|west|WFSideText|wind|windDir|windRTD|windStr|wingsForcesRTD|worldName|worldSize|worldToModel|worldToModelVisual|worldToScreen)\\b/i,\n\t'number': /(?:\\$|\\b0x)[\\da-f]+\\b|(?:\\B\\.\\d+|\\b\\d+(?:\\.\\d+)?)(?:e[+-]?\\d+)?\\b/i,\n\t'operator': /##|>>|&&|\\|\\||[!=<>]=?|[-+*/%#^]|\\b(?:and|mod|not|or)\\b/i,\n\t'magic-variable': {\n\t\tpattern: /\\b(?:this|thisList|thisTrigger|_exception|_fnc_scriptName|_fnc_scriptNameParent|_forEachIndex|_this|_thisEventHandler|_thisFSM|_thisScript|_x)\\b/i,\n\t\talias: 'keyword'\n\t},\n\t'constant': /\\bDIK(?:_[a-z\\d]+)+\\b/i\n});\n\nPrism.languages.insertBefore('sqf', 'string', {\n\t'macro': {\n\t\tpattern: /(^[ \\t]*)#[a-z](?:[^\\r\\n\\\\]|\\\\(?:\\r\\n|[\\s\\S]))*/im,\n\t\tlookbehind: true,\n\t\tgreedy: true,\n\t\talias: 'property',\n\t\tinside: {\n\t\t\t'directive': {\n\t\t\t\tpattern: /#[a-z]+\\b/i,\n\t\t\t\talias: 'keyword'\n\t\t\t},\n\t\t\t'comment': Prism.languages.sqf.comment\n\t\t}\n\t}\n});\n\ndelete Prism.languages.sqf['class-name'];\n/components/prism-dhall.js\t\u0013// ABNF grammar:\n// https://github.com/dhall-lang/dhall-lang/blob/master/standard/dhall.abnf\n\nPrism.languages.dhall = {\n\t// Multi-line comments can be nested. E.g. {- foo {- bar -} -}\n\t// The multi-line pattern is essentially this:\n\t//   \\{-(?:[^-{]|-(?!\\})|\\{(?!-)|<SELF>)*-\\}\n\t'comment': /--.*|\\{-(?:[^-{]|-(?!\\})|\\{(?!-)|\\{-(?:[^-{]|-(?!\\})|\\{(?!-))*-\\})*-\\}/,\n\t'string': {\n\t\tpattern: /\"(?:[^\"\\\\]|\\\\.)*\"|''(?:[^']|'(?!')|'''|''\\$\\{)*''(?!'|\\$)/,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'interpolation': {\n\t\t\t\tpattern: /\\$\\{[^{}]*\\}/,\n\t\t\t\tinside: {\n\t\t\t\t\t'expression': {\n\t\t\t\t\t\tpattern: /(^\\$\\{)[\\s\\S]+(?=\\}$)/,\n\t\t\t\t\t\tlookbehind: true,\n\t\t\t\t\t\talias: 'language-dhall',\n\t\t\t\t\t\tinside: null // see blow\n\t\t\t\t\t},\n\t\t\t\t\t'punctuation': /\\$\\{|\\}/\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\t'label': {\n\t\tpattern: /`[^`]*`/,\n\t\tgreedy: true\n\t},\n\t'url': {\n\t\t// https://github.com/dhall-lang/dhall-lang/blob/5fde8ef1bead6fb4e999d3c1ffe7044cd019d63a/standard/dhall.abnf#L596\n\t\tpattern: /\\bhttps?:\\/\\/[\\w.:%!$&'*+;=@~-]+(?:\\/[\\w.:%!$&'*+;=@~-]*)*(?:\\?[/?\\w.:%!$&'*+;=@~-]*)?/,\n\t\tgreedy: true\n\t},\n\t'env': {\n\t\t// https://github.com/dhall-lang/dhall-lang/blob/5fde8ef1bead6fb4e999d3c1ffe7044cd019d63a/standard/dhall.abnf#L661\n\t\tpattern: /\\benv:(?:(?!\\d)\\w+|\"(?:[^\"\\\\=]|\\\\.)*\")/,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'function': /^env/,\n\t\t\t'operator': /^:/,\n\t\t\t'variable': /[\\s\\S]+/\n\t\t}\n\t},\n\t'hash': {\n\t\t// https://github.com/dhall-lang/dhall-lang/blob/5fde8ef1bead6fb4e999d3c1ffe7044cd019d63a/standard/dhall.abnf#L725\n\t\tpattern: /\\bsha256:[\\da-fA-F]{64}\\b/,\n\t\tinside: {\n\t\t\t'function': /sha256/,\n\t\t\t'operator': /:/,\n\t\t\t'number': /[\\da-fA-F]{64}/\n\t\t}\n\t},\n\n\t// https://github.com/dhall-lang/dhall-lang/blob/5fde8ef1bead6fb4e999d3c1ffe7044cd019d63a/standard/dhall.abnf#L359\n\t'keyword': /\\b(?:as|assert|else|forall|if|in|let|merge|missing|then|toMap|using|with)\\b|\\u2200/,\n\t'builtin': /\\b(?:None|Some)\\b/,\n\n\t'boolean': /\\b(?:False|True)\\b/,\n\t'number': /\\bNaN\\b|-?\\bInfinity\\b|[+-]?\\b(?:0x[\\da-fA-F]+|\\d+(?:\\.\\d+)?(?:e[+-]?\\d+)?)\\b/,\n\t'operator': /\\/\\\\|\\/\\/\\\\\\\\|&&|\\|\\||===|[!=]=|\\/\\/|->|\\+\\+|::|[+*#@=:?<>|\\\\\\u2227\\u2a53\\u2261\\u2afd\\u03bb\\u2192]/,\n\t'punctuation': /\\.\\.|[{}\\[\\](),./]/,\n\n\t// we'll just assume that every capital word left is a type name\n\t'class-name': /\\b[A-Z]\\w*\\b/\n};\n\nPrism.languages.dhall.string.inside.interpolation.inside.expression.inside = Prism.languages.dhall;\n/components/prism-cmake.js)uPrism.languages.cmake = {\n\t'comment': /#.*/,\n\t'string': {\n\t\tpattern: /\"(?:[^\\\\\"]|\\\\.)*\"/,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'interpolation': {\n\t\t\t\tpattern: /\\$\\{(?:[^{}$]|\\$\\{[^{}$]*\\})*\\}/,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': /\\$\\{|\\}/,\n\t\t\t\t\t'variable': /\\w+/\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\t'variable': /\\b(?:CMAKE_\\w+|\\w+_(?:(?:BINARY|SOURCE)_DIR|DESCRIPTION|HOMEPAGE_URL|ROOT|VERSION(?:_MAJOR|_MINOR|_PATCH|_TWEAK)?)|(?:ANDROID|APPLE|BORLAND|BUILD_SHARED_LIBS|CACHE|CPACK_(?:ABSOLUTE_DESTINATION_FILES|COMPONENT_INCLUDE_TOPLEVEL_DIRECTORY|ERROR_ON_ABSOLUTE_INSTALL_DESTINATION|INCLUDE_TOPLEVEL_DIRECTORY|INSTALL_DEFAULT_DIRECTORY_PERMISSIONS|INSTALL_SCRIPT|PACKAGING_INSTALL_PREFIX|SET_DESTDIR|WARN_ON_ABSOLUTE_INSTALL_DESTINATION)|CTEST_(?:BINARY_DIRECTORY|BUILD_COMMAND|BUILD_NAME|BZR_COMMAND|BZR_UPDATE_OPTIONS|CHANGE_ID|CHECKOUT_COMMAND|CONFIGURATION_TYPE|CONFIGURE_COMMAND|COVERAGE_COMMAND|COVERAGE_EXTRA_FLAGS|CURL_OPTIONS|CUSTOM_(?:COVERAGE_EXCLUDE|ERROR_EXCEPTION|ERROR_MATCH|ERROR_POST_CONTEXT|ERROR_PRE_CONTEXT|MAXIMUM_FAILED_TEST_OUTPUT_SIZE|MAXIMUM_NUMBER_OF_(?:ERRORS|WARNINGS)|MAXIMUM_PASSED_TEST_OUTPUT_SIZE|MEMCHECK_IGNORE|POST_MEMCHECK|POST_TEST|PRE_MEMCHECK|PRE_TEST|TESTS_IGNORE|WARNING_EXCEPTION|WARNING_MATCH)|CVS_CHECKOUT|CVS_COMMAND|CVS_UPDATE_OPTIONS|DROP_LOCATION|DROP_METHOD|DROP_SITE|DROP_SITE_CDASH|DROP_SITE_PASSWORD|DROP_SITE_USER|EXTRA_COVERAGE_GLOB|GIT_COMMAND|GIT_INIT_SUBMODULES|GIT_UPDATE_CUSTOM|GIT_UPDATE_OPTIONS|HG_COMMAND|HG_UPDATE_OPTIONS|LABELS_FOR_SUBPROJECTS|MEMORYCHECK_(?:COMMAND|COMMAND_OPTIONS|SANITIZER_OPTIONS|SUPPRESSIONS_FILE|TYPE)|NIGHTLY_START_TIME|P4_CLIENT|P4_COMMAND|P4_OPTIONS|P4_UPDATE_OPTIONS|RUN_CURRENT_SCRIPT|SCP_COMMAND|SITE|SOURCE_DIRECTORY|SUBMIT_URL|SVN_COMMAND|SVN_OPTIONS|SVN_UPDATE_OPTIONS|TEST_LOAD|TEST_TIMEOUT|TRIGGER_SITE|UPDATE_COMMAND|UPDATE_OPTIONS|UPDATE_VERSION_ONLY|USE_LAUNCHERS)|CYGWIN|ENV|EXECUTABLE_OUTPUT_PATH|GHS-MULTI|IOS|LIBRARY_OUTPUT_PATH|MINGW|MSVC(?:10|11|12|14|60|70|71|80|90|_IDE|_TOOLSET_VERSION|_VERSION)?|MSYS|PROJECT_NAME|UNIX|WIN32|WINCE|WINDOWS_PHONE|WINDOWS_STORE|XCODE))\\b/,\n\t'property': /\\b(?:cxx_\\w+|(?:ARCHIVE_OUTPUT_(?:DIRECTORY|NAME)|COMPILE_DEFINITIONS|COMPILE_PDB_NAME|COMPILE_PDB_OUTPUT_DIRECTORY|EXCLUDE_FROM_DEFAULT_BUILD|IMPORTED_(?:IMPLIB|LIBNAME|LINK_DEPENDENT_LIBRARIES|LINK_INTERFACE_LANGUAGES|LINK_INTERFACE_LIBRARIES|LINK_INTERFACE_MULTIPLICITY|LOCATION|NO_SONAME|OBJECTS|SONAME)|INTERPROCEDURAL_OPTIMIZATION|LIBRARY_OUTPUT_DIRECTORY|LIBRARY_OUTPUT_NAME|LINK_FLAGS|LINK_INTERFACE_LIBRARIES|LINK_INTERFACE_MULTIPLICITY|LOCATION|MAP_IMPORTED_CONFIG|OSX_ARCHITECTURES|OUTPUT_NAME|PDB_NAME|PDB_OUTPUT_DIRECTORY|RUNTIME_OUTPUT_DIRECTORY|RUNTIME_OUTPUT_NAME|STATIC_LIBRARY_FLAGS|VS_CSHARP|VS_DOTNET_REFERENCEPROP|VS_DOTNET_REFERENCE|VS_GLOBAL_SECTION_POST|VS_GLOBAL_SECTION_PRE|VS_GLOBAL|XCODE_ATTRIBUTE)_\\w+|\\w+_(?:CLANG_TIDY|COMPILER_LAUNCHER|CPPCHECK|CPPLINT|INCLUDE_WHAT_YOU_USE|OUTPUT_NAME|POSTFIX|VISIBILITY_PRESET)|ABSTRACT|ADDITIONAL_MAKE_CLEAN_FILES|ADVANCED|ALIASED_TARGET|ALLOW_DUPLICATE_CUSTOM_TARGETS|ANDROID_(?:ANT_ADDITIONAL_OPTIONS|API|API_MIN|ARCH|ASSETS_DIRECTORIES|GUI|JAR_DEPENDENCIES|NATIVE_LIB_DEPENDENCIES|NATIVE_LIB_DIRECTORIES|PROCESS_MAX|PROGUARD|PROGUARD_CONFIG_PATH|SECURE_PROPS_PATH|SKIP_ANT_STEP|STL_TYPE)|ARCHIVE_OUTPUT_DIRECTORY|ATTACHED_FILES|ATTACHED_FILES_ON_FAIL|AUTOGEN_(?:BUILD_DIR|ORIGIN_DEPENDS|PARALLEL|SOURCE_GROUP|TARGETS_FOLDER|TARGET_DEPENDS)|AUTOMOC|AUTOMOC_(?:COMPILER_PREDEFINES|DEPEND_FILTERS|EXECUTABLE|MACRO_NAMES|MOC_OPTIONS|SOURCE_GROUP|TARGETS_FOLDER)|AUTORCC|AUTORCC_EXECUTABLE|AUTORCC_OPTIONS|AUTORCC_SOURCE_GROUP|AUTOUIC|AUTOUIC_EXECUTABLE|AUTOUIC_OPTIONS|AUTOUIC_SEARCH_PATHS|BINARY_DIR|BUILDSYSTEM_TARGETS|BUILD_RPATH|BUILD_RPATH_USE_ORIGIN|BUILD_WITH_INSTALL_NAME_DIR|BUILD_WITH_INSTALL_RPATH|BUNDLE|BUNDLE_EXTENSION|CACHE_VARIABLES|CLEAN_NO_CUSTOM|COMMON_LANGUAGE_RUNTIME|COMPATIBLE_INTERFACE_(?:BOOL|NUMBER_MAX|NUMBER_MIN|STRING)|COMPILE_(?:DEFINITIONS|FEATURES|FLAGS|OPTIONS|PDB_NAME|PDB_OUTPUT_DIRECTORY)|COST|CPACK_DESKTOP_SHORTCUTS|CPACK_NEVER_OVERWRITE|CPACK_PERMANENT|CPACK_STARTUP_SHORTCUTS|CPACK_START_MENU_SHORTCUTS|CPACK_WIX_ACL|CROSSCOMPILING_EMULATOR|CUDA_EXTENSIONS|CUDA_PTX_COMPILATION|CUDA_RESOLVE_DEVICE_SYMBOLS|CUDA_SEPARABLE_COMPILATION|CUDA_STANDARD|CUDA_STANDARD_REQUIRED|CXX_EXTENSIONS|CXX_STANDARD|CXX_STANDARD_REQUIRED|C_EXTENSIONS|C_STANDARD|C_STANDARD_REQUIRED|DEBUG_CONFIGURATIONS|DEFINE_SYMBOL|DEFINITIONS|DEPENDS|DEPLOYMENT_ADDITIONAL_FILES|DEPLOYMENT_REMOTE_DIRECTORY|DISABLED|DISABLED_FEATURES|ECLIPSE_EXTRA_CPROJECT_CONTENTS|ECLIPSE_EXTRA_NATURES|ENABLED_FEATURES|ENABLED_LANGUAGES|ENABLE_EXPORTS|ENVIRONMENT|EXCLUDE_FROM_ALL|EXCLUDE_FROM_DEFAULT_BUILD|EXPORT_NAME|EXPORT_PROPERTIES|EXTERNAL_OBJECT|EchoString|FAIL_REGULAR_EXPRESSION|FIND_LIBRARY_USE_LIB32_PATHS|FIND_LIBRARY_USE_LIB64_PATHS|FIND_LIBRARY_USE_LIBX32_PATHS|FIND_LIBRARY_USE_OPENBSD_VERSIONING|FIXTURES_CLEANUP|FIXTURES_REQUIRED|FIXTURES_SETUP|FOLDER|FRAMEWORK|Fortran_FORMAT|Fortran_MODULE_DIRECTORY|GENERATED|GENERATOR_FILE_NAME|GENERATOR_IS_MULTI_CONFIG|GHS_INTEGRITY_APP|GHS_NO_SOURCE_GROUP_FILE|GLOBAL_DEPENDS_DEBUG_MODE|GLOBAL_DEPENDS_NO_CYCLES|GNUtoMS|HAS_CXX|HEADER_FILE_ONLY|HELPSTRING|IMPLICIT_DEPENDS_INCLUDE_TRANSFORM|IMPORTED|IMPORTED_(?:COMMON_LANGUAGE_RUNTIME|CONFIGURATIONS|GLOBAL|IMPLIB|LIBNAME|LINK_DEPENDENT_LIBRARIES|LINK_INTERFACE_(?:LANGUAGES|LIBRARIES|MULTIPLICITY)|LOCATION|NO_SONAME|OBJECTS|SONAME)|IMPORT_PREFIX|IMPORT_SUFFIX|INCLUDE_DIRECTORIES|INCLUDE_REGULAR_EXPRESSION|INSTALL_NAME_DIR|INSTALL_RPATH|INSTALL_RPATH_USE_LINK_PATH|INTERFACE_(?:AUTOUIC_OPTIONS|COMPILE_DEFINITIONS|COMPILE_FEATURES|COMPILE_OPTIONS|INCLUDE_DIRECTORIES|LINK_DEPENDS|LINK_DIRECTORIES|LINK_LIBRARIES|LINK_OPTIONS|POSITION_INDEPENDENT_CODE|SOURCES|SYSTEM_INCLUDE_DIRECTORIES)|INTERPROCEDURAL_OPTIMIZATION|IN_TRY_COMPILE|IOS_INSTALL_COMBINED|JOB_POOLS|JOB_POOL_COMPILE|JOB_POOL_LINK|KEEP_EXTENSION|LABELS|LANGUAGE|LIBRARY_OUTPUT_DIRECTORY|LINKER_LANGUAGE|LINK_(?:DEPENDS|DEPENDS_NO_SHARED|DIRECTORIES|FLAGS|INTERFACE_LIBRARIES|INTERFACE_MULTIPLICITY|LIBRARIES|OPTIONS|SEARCH_END_STATIC|SEARCH_START_STATIC|WHAT_YOU_USE)|LISTFILE_STACK|LOCATION|MACOSX_BUNDLE|MACOSX_BUNDLE_INFO_PLIST|MACOSX_FRAMEWORK_INFO_PLIST|MACOSX_PACKAGE_LOCATION|MACOSX_RPATH|MACROS|MANUALLY_ADDED_DEPENDENCIES|MEASUREMENT|MODIFIED|NAME|NO_SONAME|NO_SYSTEM_FROM_IMPORTED|OBJECT_DEPENDS|OBJECT_OUTPUTS|OSX_ARCHITECTURES|OUTPUT_NAME|PACKAGES_FOUND|PACKAGES_NOT_FOUND|PARENT_DIRECTORY|PASS_REGULAR_EXPRESSION|PDB_NAME|PDB_OUTPUT_DIRECTORY|POSITION_INDEPENDENT_CODE|POST_INSTALL_SCRIPT|PREDEFINED_TARGETS_FOLDER|PREFIX|PRE_INSTALL_SCRIPT|PRIVATE_HEADER|PROCESSORS|PROCESSOR_AFFINITY|PROJECT_LABEL|PUBLIC_HEADER|REPORT_UNDEFINED_PROPERTIES|REQUIRED_FILES|RESOURCE|RESOURCE_LOCK|RULE_LAUNCH_COMPILE|RULE_LAUNCH_CUSTOM|RULE_LAUNCH_LINK|RULE_MESSAGES|RUNTIME_OUTPUT_DIRECTORY|RUN_SERIAL|SKIP_AUTOGEN|SKIP_AUTOMOC|SKIP_AUTORCC|SKIP_AUTOUIC|SKIP_BUILD_RPATH|SKIP_RETURN_CODE|SOURCES|SOURCE_DIR|SOVERSION|STATIC_LIBRARY_FLAGS|STATIC_LIBRARY_OPTIONS|STRINGS|SUBDIRECTORIES|SUFFIX|SYMBOLIC|TARGET_ARCHIVES_MAY_BE_SHARED_LIBS|TARGET_MESSAGES|TARGET_SUPPORTS_SHARED_LIBS|TESTS|TEST_INCLUDE_FILE|TEST_INCLUDE_FILES|TIMEOUT|TIMEOUT_AFTER_MATCH|TYPE|USE_FOLDERS|VALUE|VARIABLES|VERSION|VISIBILITY_INLINES_HIDDEN|VS_(?:CONFIGURATION_TYPE|COPY_TO_OUT_DIR|DEBUGGER_(?:COMMAND|COMMAND_ARGUMENTS|ENVIRONMENT|WORKING_DIRECTORY)|DEPLOYMENT_CONTENT|DEPLOYMENT_LOCATION|DOTNET_REFERENCES|DOTNET_REFERENCES_COPY_LOCAL|INCLUDE_IN_VSIX|IOT_STARTUP_TASK|KEYWORD|RESOURCE_GENERATOR|SCC_AUXPATH|SCC_LOCALPATH|SCC_PROJECTNAME|SCC_PROVIDER|SDK_REFERENCES|SHADER_(?:DISABLE_OPTIMIZATIONS|ENABLE_DEBUG|ENTRYPOINT|FLAGS|MODEL|OBJECT_FILE_NAME|OUTPUT_HEADER_FILE|TYPE|VARIABLE_NAME)|STARTUP_PROJECT|TOOL_OVERRIDE|USER_PROPS|WINRT_COMPONENT|WINRT_EXTENSIONS|WINRT_REFERENCES|XAML_TYPE)|WILL_FAIL|WIN32_EXECUTABLE|WINDOWS_EXPORT_ALL_SYMBOLS|WORKING_DIRECTORY|WRAP_EXCLUDE|XCODE_(?:EMIT_EFFECTIVE_PLATFORM_NAME|EXPLICIT_FILE_TYPE|FILE_ATTRIBUTES|LAST_KNOWN_FILE_TYPE|PRODUCT_TYPE|SCHEME_(?:ADDRESS_SANITIZER|ADDRESS_SANITIZER_USE_AFTER_RETURN|ARGUMENTS|DISABLE_MAIN_THREAD_CHECKER|DYNAMIC_LIBRARY_LOADS|DYNAMIC_LINKER_API_USAGE|ENVIRONMENT|EXECUTABLE|GUARD_MALLOC|MAIN_THREAD_CHECKER_STOP|MALLOC_GUARD_EDGES|MALLOC_SCRIBBLE|MALLOC_STACK|THREAD_SANITIZER(?:_STOP)?|UNDEFINED_BEHAVIOUR_SANITIZER(?:_STOP)?|ZOMBIE_OBJECTS))|XCTEST)\\b/,\n\t'keyword': /\\b(?:add_compile_definitions|add_compile_options|add_custom_command|add_custom_target|add_definitions|add_dependencies|add_executable|add_library|add_link_options|add_subdirectory|add_test|aux_source_directory|break|build_command|build_name|cmake_host_system_information|cmake_minimum_required|cmake_parse_arguments|cmake_policy|configure_file|continue|create_test_sourcelist|ctest_build|ctest_configure|ctest_coverage|ctest_empty_binary_directory|ctest_memcheck|ctest_read_custom_files|ctest_run_script|ctest_sleep|ctest_start|ctest_submit|ctest_test|ctest_update|ctest_upload|define_property|else|elseif|enable_language|enable_testing|endforeach|endfunction|endif|endmacro|endwhile|exec_program|execute_process|export|export_library_dependencies|file|find_file|find_library|find_package|find_path|find_program|fltk_wrap_ui|foreach|function|get_cmake_property|get_directory_property|get_filename_component|get_property|get_source_file_property|get_target_property|get_test_property|if|include|include_directories|include_external_msproject|include_guard|include_regular_expression|install|install_files|install_programs|install_targets|link_directories|link_libraries|list|load_cache|load_command|macro|make_directory|mark_as_advanced|math|message|option|output_required_files|project|qt_wrap_cpp|qt_wrap_ui|remove|remove_definitions|return|separate_arguments|set|set_directory_properties|set_property|set_source_files_properties|set_target_properties|set_tests_properties|site_name|source_group|string|subdir_depends|subdirs|target_compile_definitions|target_compile_features|target_compile_options|target_include_directories|target_link_directories|target_link_libraries|target_link_options|target_sources|try_compile|try_run|unset|use_mangled_mesa|utility_source|variable_requires|variable_watch|while|write_file)(?=\\s*\\()\\b/,\n\t'boolean': /\\b(?:FALSE|OFF|ON|TRUE)\\b/,\n\t'namespace': /\\b(?:INTERFACE|PRIVATE|PROPERTIES|PUBLIC|SHARED|STATIC|TARGET_OBJECTS)\\b/,\n\t'operator': /\\b(?:AND|DEFINED|EQUAL|GREATER|LESS|MATCHES|NOT|OR|STREQUAL|STRGREATER|STRLESS|VERSION_EQUAL|VERSION_GREATER|VERSION_LESS)\\b/,\n\t'inserted': {\n\t\tpattern: /\\b\\w+::\\w+\\b/,\n\t\talias: 'class-name'\n\t},\n\t'number': /\\b\\d+(?:\\.\\d+)*\\b/,\n\t'function': /\\b[a-z_]\\w*(?=\\s*\\()\\b/i,\n\t'punctuation': /[()>}]|\\$[<{]/\n};\n/components/prism-j.js\u0003Prism.languages.j = {\n\t'comment': {\n\t\tpattern: /\\bNB\\..*/,\n\t\tgreedy: true\n\t},\n\t'string': {\n\t\tpattern: /'(?:''|[^'\\r\\n])*'/,\n\t\tgreedy: true\n\t},\n\t'keyword': /\\b(?:(?:CR|LF|adverb|conjunction|def|define|dyad|monad|noun|verb)\\b|(?:assert|break|case|catch[dt]?|continue|do|else|elseif|end|fcase|for|for_\\w+|goto_\\w+|if|label_\\w+|return|select|throw|try|while|whilst)\\.)/,\n\t'verb': {\n\t\t// Negative look-ahead prevents bad highlighting\n\t\t// of ^: ;. =. =: !. !:\n\t\tpattern: /(?!\\^:|;\\.|[=!][.:])(?:\\{(?:\\.|::?)?|p(?:\\.\\.?|:)|[=!\\]]|[<>+*\\-%$|,#][.:]?|[?^]\\.?|[;\\[]:?|[~}\"i][.:]|[ACeEIjLor]\\.|(?:[_\\/\\\\qsux]|_?\\d):)/,\n\t\talias: 'keyword'\n\t},\n\t'number': /\\b_?(?:(?!\\d:)\\d+(?:\\.\\d+)?(?:(?:ad|ar|[ejpx])_?\\d+(?:\\.\\d+)?)*(?:b_?[\\da-z]+(?:\\.[\\da-z]+)?)?|_\\b(?!\\.))/,\n\t'adverb': {\n\t\tpattern: /[~}]|[\\/\\\\]\\.?|[bfM]\\.|t[.:]/,\n\t\talias: 'builtin'\n\t},\n\t'operator': /[=a][.:]|_\\./,\n\t'conjunction': {\n\t\tpattern: /&(?:\\.:?|:)?|[.:@][.:]?|[!D][.:]|[;dHT]\\.|`:?|[\\^LS]:|\"/,\n\t\talias: 'variable'\n\t},\n\t'punctuation': /[()]/\n};\n/components/prism-stylus.min.js\u000e!function(e){var n={pattern:/(\\b\\d+)(?:%|[a-z]+)/,lookbehind:!0},r={pattern:/(^|[^\\w.-])-?(?:\\d+(?:\\.\\d+)?|\\.\\d+)/,lookbehind:!0},t={comment:{pattern:/(^|[^\\\\])(?:\\/\\*[\\s\\S]*?\\*\\/|\\/\\/.*)/,lookbehind:!0},url:{pattern:/\\burl\\(([\"']?).*?\\1\\)/i,greedy:!0},string:{pattern:/(\"|')(?:(?!\\1)[^\\\\\\r\\n]|\\\\(?:\\r\\n|[\\s\\S]))*\\1/,greedy:!0},interpolation:null,func:null,important:/\\B!(?:important|optional)\\b/i,keyword:{pattern:/(^|\\s+)(?:(?:else|for|if|return|unless)(?=\\s|$)|@[\\w-]+)/,lookbehind:!0},hexcode:/#[\\da-f]{3,6}/i,color:[/\\b(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)\\b/i,{pattern:/\\b(?:hsl|rgb)\\(\\s*\\d{1,3}\\s*,\\s*\\d{1,3}%?\\s*,\\s*\\d{1,3}%?\\s*\\)\\B|\\b(?:hsl|rgb)a\\(\\s*\\d{1,3}\\s*,\\s*\\d{1,3}%?\\s*,\\s*\\d{1,3}%?\\s*,\\s*(?:0|0?\\.\\d+|1)\\s*\\)\\B/i,inside:{unit:n,number:r,function:/[\\w-]+(?=\\()/,punctuation:/[(),]/}}],entity:/\\\\[\\da-f]{1,8}/i,unit:n,boolean:/\\b(?:false|true)\\b/,operator:[/~|[+!\\/%<>?=]=?|[-:]=|\\*[*=]?|\\.{2,3}|&&|\\|\\||\\B-\\B|\\b(?:and|in|is(?: a| defined| not|nt)?|not|or)\\b/],number:r,punctuation:/[{}()\\[\\];:,]/};t.interpolation={pattern:/\\{[^\\r\\n}:]+\\}/,alias:\"variable\",inside:{delimiter:{pattern:/^\\{|\\}$/,alias:\"punctuation\"},rest:t}},t.func={pattern:/[\\w-]+\\([^)]*\\).*/,inside:{function:/^[^(]+/,rest:t}},e.languages.stylus={\"atrule-declaration\":{pattern:/(^[ \\t]*)@.+/m,lookbehind:!0,inside:{atrule:/^@[\\w-]+/,rest:t}},\"variable-declaration\":{pattern:/(^[ \\t]*)[\\w$-]+\\s*.?=[ \\t]*(?:\\{[^{}]*\\}|\\S.*|$)/m,lookbehind:!0,inside:{variable:/^\\S+/,rest:t}},statement:{pattern:/(^[ \\t]*)(?:else|for|if|return|unless)[ \\t].+/m,lookbehind:!0,inside:{keyword:/^\\S+/,rest:t}},\"property-declaration\":{pattern:/((?:^|\\{)([ \\t]*))(?:[\\w-]|\\{[^}\\r\\n]+\\})+(?:\\s*:\\s*|[ \\t]+)(?!\\s)[^{\\r\\n]*(?:;|[^{\\r\\n,]$(?!(?:\\r?\\n|\\r)(?:\\{|\\2[ \\t])))/m,lookbehind:!0,inside:{property:{pattern:/^[^\\s:]+/,inside:{interpolation:t.interpolation}},rest:t}},selector:{pattern:/(^[ \\t]*)(?:(?=\\S)(?:[^{}\\r\\n:()]|::?[\\w-]+(?:\\([^)\\r\\n]*\\)|(?![\\w-]))|\\{[^}\\r\\n]+\\})+)(?:(?:\\r?\\n|\\r)(?:\\1(?:(?=\\S)(?:[^{}\\r\\n:()]|::?[\\w-]+(?:\\([^)\\r\\n]*\\)|(?![\\w-]))|\\{[^}\\r\\n]+\\})+)))*(?:,$|\\{|(?=(?:\\r?\\n|\\r)(?:\\{|\\1[ \\t])))/m,lookbehind:!0,inside:{interpolation:t.interpolation,comment:t.comment,punctuation:/[{},]/}},func:t.func,string:t.string,comment:{pattern:/(^|[^\\\\])(?:\\/\\*[\\s\\S]*?\\*\\/|\\/\\/.*)/,lookbehind:!0,greedy:!0},interpolation:t.interpolation,punctuation:/[{}()\\[\\];:.]/}}(Prism);/components/prism-json5.min.js\u0001!function(n){var e=/(\"|')(?:\\\\(?:\\r\\n?|\\n|.)|(?!\\1)[^\\\\\\r\\n])*\\1/;n.languages.json5=n.languages.extend(\"json\",{property:[{pattern:RegExp(e.source+\"(?=\\\\s*:)\"),greedy:!0},{pattern:/(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*:)/,alias:\"unquoted\"}],string:{pattern:e,greedy:!0},number:/[+-]?\\b(?:NaN|Infinity|0x[a-fA-F\\d]+)\\b|[+-]?(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:[eE][+-]?\\d+\\b)?/})}(Prism);/components/prism-gherkin.js((function (Prism) {\n\n\tvar tableRow = /(?:\\r?\\n|\\r)[ \\t]*\\|.+\\|(?:(?!\\|).)*/.source;\n\n\tPrism.languages.gherkin = {\n\t\t'pystring': {\n\t\t\tpattern: /(\"\"\"|''')[\\s\\S]+?\\1/,\n\t\t\talias: 'string'\n\t\t},\n\t\t'comment': {\n\t\t\tpattern: /(^[ \\t]*)#.*/m,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'tag': {\n\t\t\tpattern: /(^[ \\t]*)@\\S*/m,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'feature': {\n\t\t\tpattern: /((?:^|\\r?\\n|\\r)[ \\t]*)(?:Ability|Ahoy matey!|Arwedd|Aspekt|Besigheid Behoefte|Business Need|Caracteristica|Característica|Egenskab|Egenskap|Eiginleiki|Feature|Fīča|Fitur|Fonctionnalité|Fonksyonalite|Funcionalidade|Funcionalitat|Functionalitate|Funcţionalitate|Funcționalitate|Functionaliteit|Fungsi|Funkcia|Funkcija|Funkcionalitāte|Funkcionalnost|Funkcja|Funksie|Funktionalität|Funktionalitéit|Funzionalità|Hwaet|Hwæt|Jellemző|Karakteristik|Lastnost|Mak|Mogucnost|laH|Mogućnost|Moznosti|Možnosti|OH HAI|Omadus|Ominaisuus|Osobina|Özellik|Potrzeba biznesowa|perbogh|poQbogh malja'|Požadavek|Požiadavka|Pretty much|Qap|Qu'meH 'ut|Savybė|Tính năng|Trajto|Vermoë|Vlastnosť|Właściwość|Značilnost|Δυνατότητα|Λειτουργία|Могућност|Мөмкинлек|Особина|Свойство|Үзенчәлеклелек|Функционал|Функционалност|Функция|Функціонал|תכונה|خاصية|خصوصیت|صلاحیت|کاروبار کی ضرورت|وِیژگی|रूप लेख|ਖਾਸੀਅਤ|ਨਕਸ਼ ਨੁਹਾਰ|ਮੁਹਾਂਦਰਾ|గుణము|ಹೆಚ್ಚಳ|ความต้องการทางธุรกิจ|ความสามารถ|โครงหลัก|기능|フィーチャ|功能|機能):(?:[^:\\r\\n]+(?:\\r?\\n|\\r|$))*/,\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'important': {\n\t\t\t\t\tpattern: /(:)[^\\r\\n]+/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t},\n\t\t\t\t'keyword': /[^:\\r\\n]+:/\n\t\t\t}\n\t\t},\n\t\t'scenario': {\n\t\t\tpattern: /(^[ \\t]*)(?:Abstract Scenario|Abstrakt Scenario|Achtergrond|Aer|Ær|Agtergrond|All y'all|Antecedentes|Antecedents|Atburðarás|Atburðarásir|Awww, look mate|B4|Background|Baggrund|Bakgrund|Bakgrunn|Bakgrunnur|Beispiele|Beispiller|Bối cảnh|Cefndir|Cenario|Cenário|Cenario de Fundo|Cenário de Fundo|Cenarios|Cenários|Contesto|Context|Contexte|Contexto|Conto|Contoh|Contone|Dæmi|Dasar|Dead men tell no tales|Delineacao do Cenario|Delineação do Cenário|Dis is what went down|Dữ liệu|Dyagram Senaryo|Dyagram senaryo|Egzanp|Ejemplos|Eksempler|Ekzemploj|Enghreifftiau|Esbozo do escenario|Escenari|Escenario|Esempi|Esquema de l'escenari|Esquema del escenario|Esquema do Cenario|Esquema do Cenário|EXAMPLZ|Examples|Exempel|Exemple|Exemples|Exemplos|First off|Fono|Forgatókönyv|Forgatókönyv vázlat|Fundo|Geçmiş|Grundlage|Hannergrond|ghantoH|Háttér|Heave to|Istorik|Juhtumid|Keadaan|Khung kịch bản|Khung tình huống|Kịch bản|Koncept|Konsep skenario|Kontèks|Kontekst|Kontekstas|Konteksts|Kontext|Konturo de la scenaro|Latar Belakang|lut chovnatlh|lut|lutmey|Lýsing Atburðarásar|Lýsing Dæma|MISHUN SRSLY|MISHUN|Menggariskan Senario|mo'|Náčrt Scenára|Náčrt Scénáře|Náčrt Scenáru|Oris scenarija|Örnekler|Osnova|Osnova Scenára|Osnova scénáře|Osnutek|Ozadje|Paraugs|Pavyzdžiai|Példák|Piemēri|Plan du scénario|Plan du Scénario|Plan Senaryo|Plan senaryo|Plang vum Szenario|Pozadí|Pozadie|Pozadina|Príklady|Příklady|Primer|Primeri|Primjeri|Przykłady|Raamstsenaarium|Reckon it's like|Rerefons|Scenár|Scénář|Scenarie|Scenarij|Scenarijai|Scenarijaus šablonas|Scenariji|Scenārijs|Scenārijs pēc parauga|Scenarijus|Scenario|Scénario|Scenario Amlinellol|Scenario Outline|Scenario Template|Scenariomal|Scenariomall|Scenarios|Scenariu|Scenariusz|Scenaro|Schema dello scenario|Se ðe|Se the|Se þe|Senario|Senaryo Deskripsyon|Senaryo deskripsyon|Senaryo|Senaryo taslağı|Shiver me timbers|Situācija|Situai|Situasie Uiteensetting|Situasie|Skenario konsep|Skenario|Skica|Structura scenariu|Structură scenariu|Struktura scenarija|Stsenaarium|Swa hwaer swa|Swa|Swa hwær swa|Szablon scenariusza|Szenario|Szenariogrundriss|Tapaukset|Tapaus|Tapausaihio|Taust|Tausta|Template Keadaan|Template Senario|Template Situai|The thing of it is|Tình huống|Variantai|Voorbeelde|Voorbeelden|Wharrimean is|Yo-ho-ho|You'll wanna|Założenia|Παραδείγματα|Περιγραφή Σεναρίου|Σενάρια|Σενάριο|Υπόβαθρο|Кереш|Контекст|Концепт|Мисаллар|Мисоллар|Основа|Передумова|Позадина|Предистория|Предыстория|Приклади|Пример|Примери|Примеры|Рамка на сценарий|Скица|Структура сценарија|Структура сценария|Структура сценарію|Сценарий|Сценарий структураси|Сценарийның төзелеше|Сценарији|Сценарио|Сценарій|Тарих|Үрнәкләр|דוגמאות|רקע|תבנית תרחיש|תרחיש|الخلفية|الگوی سناریو|امثلة|پس منظر|زمینه|سناریو|سيناريو|سيناريو مخطط|مثالیں|منظر نامے کا خاکہ|منظرنامہ|نمونه ها|उदाहरण|परिदृश्य|परिदृश्य रूपरेखा|पृष्ठभूमि|ਉਦਾਹਰਨਾਂ|ਪਟਕਥਾ|ਪਟਕਥਾ ਢਾਂਚਾ|ਪਟਕਥਾ ਰੂਪ ਰੇਖਾ|ਪਿਛੋਕੜ|ఉదాహరణలు|కథనం|నేపథ్యం|సన్నివేశం|ಉದಾಹರಣೆಗಳು|ಕಥಾಸಾರಾಂಶ|ವಿವರಣೆ|ಹಿನ್ನೆಲೆ|โครงสร้างของเหตุการณ์|ชุดของตัวอย่าง|ชุดของเหตุการณ์|แนวคิด|สรุปเหตุการณ์|เหตุการณ์|배경|시나리오|시나리오 개요|예|サンプル|シナリオ|シナリオアウトライン|シナリオテンプレ|シナリオテンプレート|テンプレ|例|例子|剧本|剧本大纲|劇本|劇本大綱|场景|场景大纲|場景|場景大綱|背景):[^:\\r\\n]*/m,\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'important': {\n\t\t\t\t\tpattern: /(:)[^\\r\\n]*/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t},\n\t\t\t\t'keyword': /[^:\\r\\n]+:/\n\t\t\t}\n\t\t},\n\t\t'table-body': {\n\t\t\t// Look-behind is used to skip the table head, which has the same format as any table row\n\t\t\tpattern: RegExp('(' + tableRow + ')(?:' + tableRow + ')+'),\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'outline': {\n\t\t\t\t\tpattern: /<[^>]+>/,\n\t\t\t\t\talias: 'variable'\n\t\t\t\t},\n\t\t\t\t'td': {\n\t\t\t\t\tpattern: /\\s*[^\\s|][^|]*/,\n\t\t\t\t\talias: 'string'\n\t\t\t\t},\n\t\t\t\t'punctuation': /\\|/\n\t\t\t}\n\t\t},\n\t\t'table-head': {\n\t\t\tpattern: RegExp(tableRow),\n\t\t\tinside: {\n\t\t\t\t'th': {\n\t\t\t\t\tpattern: /\\s*[^\\s|][^|]*/,\n\t\t\t\t\talias: 'variable'\n\t\t\t\t},\n\t\t\t\t'punctuation': /\\|/\n\t\t\t}\n\t\t},\n\t\t'atrule': {\n\t\t\tpattern: /(^[ \\t]+)(?:'a|'ach|'ej|7|a|A také|A taktiež|A tiež|A zároveň|Aber|Ac|Adott|Akkor|Ak|Aleshores|Ale|Ali|Allora|Alors|Als|Ama|Amennyiben|Amikor|Ampak|an|AN|Ananging|And y'all|And|Angenommen|Anrhegedig a|An|Apabila|Atès|Atesa|Atunci|Avast!|Aye|A|awer|Bagi|Banjur|Bet|Biết|Blimey!|Buh|But at the end of the day I reckon|But y'all|But|BUT|Cal|Când|Cand|Cando|Ce|Cuando|Če|Ða ðe|Ða|Dadas|Dada|Dados|Dado|DaH ghu' bejlu'|dann|Dann|Dano|Dan|Dar|Dat fiind|Data|Date fiind|Date|Dati fiind|Dati|Daţi fiind|Dați fiind|DEN|Dato|De|Den youse gotta|Dengan|Diberi|Diyelim ki|Donada|Donat|Donitaĵo|Do|Dun|Duota|Ðurh|Eeldades|Ef|Eğer ki|Entao|Então|Entón|E|En|Entonces|Epi|És|Etant donnée|Etant donné|Et|Étant données|Étant donnée|Étant donné|Etant données|Etant donnés|Étant donnés|Fakat|Gangway!|Gdy|Gegeben seien|Gegeben sei|Gegeven|Gegewe|ghu' noblu'|Gitt|Given y'all|Given|Givet|Givun|Ha|Cho|I CAN HAZ|In|Ir|It's just unbelievable|I|Ja|Jeśli|Jeżeli|Kad|Kada|Kadar|Kai|Kaj|Když|Keď|Kemudian|Ketika|Khi|Kiedy|Ko|Kuid|Kui|Kun|Lan|latlh|Le sa a|Let go and haul|Le|Lè sa a|Lè|Logo|Lorsqu'<|Lorsque|mä|Maar|Mais|Mając|Ma|Majd|Maka|Manawa|Mas|Men|Menawa|Mutta|Nalika|Nalikaning|Nanging|Når|När|Nato|Nhưng|Niin|Njuk|O zaman|Och|Og|Oletetaan|Ond|Onda|Oraz|Pak|Pero|Però|Podano|Pokiaľ|Pokud|Potem|Potom|Privzeto|Pryd|Quan|Quand|Quando|qaSDI'|Så|Sed|Se|Siis|Sipoze ke|Sipoze Ke|Sipoze|Si|Şi|Și|Soit|Stel|Tada|Tad|Takrat|Tak|Tapi|Ter|Tetapi|Tha the|Tha|Then y'all|Then|Thì|Thurh|Toda|Too right|Un|Und|ugeholl|Và|vaj|Vendar|Ve|wann|Wanneer|WEN|Wenn|When y'all|When|Wtedy|Wun|Y'know|Yeah nah|Yna|Youse know like when|Youse know when youse got|Y|Za predpokladu|Za předpokladu|Zadan|Zadani|Zadano|Zadate|Zadato|Zakładając|Zaradi|Zatati|Þa þe|Þa|Þá|Þegar|Þurh|Αλλά|Δεδομένου|Και|Όταν|Τότε|А також|Агар|Але|Али|Аммо|А|Әгәр|Әйтик|Әмма|Бирок|Ва|Вә|Дадено|Дано|Допустим|Если|Задате|Задати|Задато|И|І|К тому же|Када|Кад|Когато|Когда|Коли|Ләкин|Лекин|Нәтиҗәдә|Нехай|Но|Онда|Припустимо, що|Припустимо|Пусть|Также|Та|Тогда|Тоді|То|Унда|Һәм|Якщо|אבל|אזי|אז|בהינתן|וגם|כאשר|آنگاه|اذاً|اگر|اما|اور|با فرض|بالفرض|بفرض|پھر|تب|ثم|جب|عندما|فرض کیا|لكن|لیکن|متى|هنگامی|و|अगर|और|कदा|किन्तु|चूंकि|जब|तथा|तदा|तब|परन्तु|पर|यदि|ਅਤੇ|ਜਦੋਂ|ਜਿਵੇਂ ਕਿ|ਜੇਕਰ|ਤਦ|ਪਰ|అప్పుడు|ఈ పరిస్థితిలో|కాని|చెప్పబడినది|మరియు|ಆದರೆ|ನಂತರ|ನೀಡಿದ|ಮತ್ತು|ಸ್ಥಿತಿಯನ್ನು|กำหนดให้|ดังนั้น|แต่|เมื่อ|และ|그러면<|그리고<|단<|만약<|만일<|먼저<|조건<|하지만<|かつ<|しかし<|ただし<|ならば<|もし<|並且<|但し<|但是<|假如<|假定<|假設<|假设<|前提<|同时<|同時<|并且<|当<|當<|而且<|那么<|那麼<)(?=[ \\t])/m,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'string': {\n\t\t\tpattern: /\"(?:\\\\.|[^\"\\\\\\r\\n])*\"|'(?:\\\\.|[^'\\\\\\r\\n])*'/,\n\t\t\tinside: {\n\t\t\t\t'outline': {\n\t\t\t\t\tpattern: /<[^>]+>/,\n\t\t\t\t\talias: 'variable'\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t'outline': {\n\t\t\tpattern: /<[^>]+>/,\n\t\t\talias: 'variable'\n\t\t}\n\t};\n\n}(Prism));\n/components/prism-css.js\u0006(function (Prism) {\n\n\tvar string = /(?:\"(?:\\\\(?:\\r\\n|[\\s\\S])|[^\"\\\\\\r\\n])*\"|'(?:\\\\(?:\\r\\n|[\\s\\S])|[^'\\\\\\r\\n])*')/;\n\n\tPrism.languages.css = {\n\t\t'comment': /\\/\\*[\\s\\S]*?\\*\\//,\n\t\t'atrule': {\n\t\t\tpattern: RegExp('@[\\\\w-](?:' + /[^;{\\s\"']|\\s+(?!\\s)/.source + '|' + string.source + ')*?' + /(?:;|(?=\\s*\\{))/.source),\n\t\t\tinside: {\n\t\t\t\t'rule': /^@[\\w-]+/,\n\t\t\t\t'selector-function-argument': {\n\t\t\t\t\tpattern: /(\\bselector\\s*\\(\\s*(?![\\s)]))(?:[^()\\s]|\\s+(?![\\s)])|\\((?:[^()]|\\([^()]*\\))*\\))+(?=\\s*\\))/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\talias: 'selector'\n\t\t\t\t},\n\t\t\t\t'keyword': {\n\t\t\t\t\tpattern: /(^|[^\\w-])(?:and|not|only|or)(?![\\w-])/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t}\n\t\t\t\t// See rest below\n\t\t\t}\n\t\t},\n\t\t'url': {\n\t\t\t// https://drafts.csswg.org/css-values-3/#urls\n\t\t\tpattern: RegExp('\\\\burl\\\\((?:' + string.source + '|' + /(?:[^\\\\\\r\\n()\"']|\\\\[\\s\\S])*/.source + ')\\\\)', 'i'),\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'function': /^url/i,\n\t\t\t\t'punctuation': /^\\(|\\)$/,\n\t\t\t\t'string': {\n\t\t\t\t\tpattern: RegExp('^' + string.source + '$'),\n\t\t\t\t\talias: 'url'\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t'selector': {\n\t\t\tpattern: RegExp('(^|[{}\\\\s])[^{}\\\\s](?:[^{};\"\\'\\\\s]|\\\\s+(?![\\\\s{])|' + string.source + ')*(?=\\\\s*\\\\{)'),\n\t\t\tlookbehind: true\n\t\t},\n\t\t'string': {\n\t\t\tpattern: string,\n\t\t\tgreedy: true\n\t\t},\n\t\t'property': {\n\t\t\tpattern: /(^|[^-\\w\\xA0-\\uFFFF])(?!\\s)[-_a-z\\xA0-\\uFFFF](?:(?!\\s)[-\\w\\xA0-\\uFFFF])*(?=\\s*:)/i,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'important': /!important\\b/i,\n\t\t'function': {\n\t\t\tpattern: /(^|[^-a-z0-9])[-a-z0-9]+(?=\\()/i,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'punctuation': /[(){};:,]/\n\t};\n\n\tPrism.languages.css['atrule'].inside.rest = Prism.languages.css;\n\n\tvar markup = Prism.languages.markup;\n\tif (markup) {\n\t\tmarkup.tag.addInlined('style', 'css');\n\t\tmarkup.tag.addAttribute('style', 'css');\n\t}\n\n}(Prism));\n/components/prism-smalltalk.js\u0003!Prism.languages.smalltalk = {\n\t'comment': {\n\t\tpattern: /\"(?:\"\"|[^\"])*\"/,\n\t\tgreedy: true\n\t},\n\t'char': {\n\t\tpattern: /\\$./,\n\t\tgreedy: true\n\t},\n\t'string': {\n\t\tpattern: /'(?:''|[^'])*'/,\n\t\tgreedy: true\n\t},\n\t'symbol': /#[\\da-z]+|#(?:-|([+\\/\\\\*~<>=@%|&?!])\\1?)|#(?=\\()/i,\n\t'block-arguments': {\n\t\tpattern: /(\\[\\s*):[^\\[|]*\\|/,\n\t\tlookbehind: true,\n\t\tinside: {\n\t\t\t'variable': /:[\\da-z]+/i,\n\t\t\t'punctuation': /\\|/\n\t\t}\n\t},\n\t'temporary-variables': {\n\t\tpattern: /\\|[^|]+\\|/,\n\t\tinside: {\n\t\t\t'variable': /[\\da-z]+/i,\n\t\t\t'punctuation': /\\|/\n\t\t}\n\t},\n\t'keyword': /\\b(?:new|nil|self|super)\\b/,\n\t'boolean': /\\b(?:false|true)\\b/,\n\t'number': [\n\t\t/\\d+r-?[\\dA-Z]+(?:\\.[\\dA-Z]+)?(?:e-?\\d+)?/,\n\t\t/\\b\\d+(?:\\.\\d+)?(?:e-?\\d+)?/\n\t],\n\t'operator': /[<=]=?|:=|~[~=]|\\/\\/?|\\\\\\\\|>[>=]?|[!^+\\-*&|,@]/,\n\t'punctuation': /[.;:?\\[\\](){}]/\n};\n/components/prism-llvm.js\u0002(function (Prism) {\n\tPrism.languages.llvm = {\n\t\t'comment': /;.*/,\n\t\t'string': {\n\t\t\tpattern: /\"[^\"]*\"/,\n\t\t\tgreedy: true,\n\t\t},\n\t\t'boolean': /\\b(?:false|true)\\b/,\n\t\t'variable': /[%@!#](?:(?!\\d)(?:[-$.\\w]|\\\\[a-f\\d]{2})+|\\d+)/i,\n\t\t'label': /(?!\\d)(?:[-$.\\w]|\\\\[a-f\\d]{2})+:/i,\n\t\t'type': {\n\t\t\tpattern: /\\b(?:double|float|fp128|half|i[1-9]\\d*|label|metadata|ppc_fp128|token|void|x86_fp80|x86_mmx)\\b/,\n\t\t\talias: 'class-name',\n\t\t},\n\t\t'keyword': /\\b[a-z_][a-z_0-9]*\\b/,\n\t\t'number': /[+-]?\\b\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?\\b|\\b0x[\\dA-Fa-f]+\\b|\\b0xK[\\dA-Fa-f]{20}\\b|\\b0x[ML][\\dA-Fa-f]{32}\\b|\\b0xH[\\dA-Fa-f]{4}\\b/,\n\t\t'punctuation': /[{}[\\];(),.!*=<>]/,\n\t};\n}(Prism));\n/components/prism-latte.js\u0006\u0004(function (Prism) {\n\tPrism.languages.latte = {\n\t\t'comment': /^\\{\\*[\\s\\S]*/,\n\t\t'latte-tag': {\n\t\t\t// https://latte.nette.org/en/tags\n\t\t\tpattern: /(^\\{(?:\\/(?=[a-z]))?)(?:[=_]|[a-z]\\w*\\b(?!\\())/i,\n\t\t\tlookbehind: true,\n\t\t\talias: 'important'\n\t\t},\n\t\t'delimiter': {\n\t\t\tpattern: /^\\{\\/?|\\}$/,\n\t\t\talias: 'punctuation'\n\t\t},\n\t\t'php': {\n\t\t\tpattern: /\\S(?:[\\s\\S]*\\S)?/,\n\t\t\talias: 'language-php',\n\t\t\tinside: Prism.languages.php\n\t\t}\n\t};\n\n\tvar markupLatte = Prism.languages.extend('markup', {});\n\tPrism.languages.insertBefore('inside', 'attr-value', {\n\t\t'n-attr': {\n\t\t\tpattern: /n:[\\w-]+(?:\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+))?/,\n\t\t\tinside: {\n\t\t\t\t'attr-name': {\n\t\t\t\t\tpattern: /^[^\\s=]+/,\n\t\t\t\t\talias: 'important'\n\t\t\t\t},\n\t\t\t\t'attr-value': {\n\t\t\t\t\tpattern: /=[\\s\\S]+/,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'punctuation': [\n\t\t\t\t\t\t\t/^=/,\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tpattern: /^(\\s*)[\"']|[\"']$/,\n\t\t\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t],\n\t\t\t\t\t\t'php': {\n\t\t\t\t\t\t\tpattern: /\\S(?:[\\s\\S]*\\S)?/,\n\t\t\t\t\t\t\tinside: Prism.languages.php\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t}\n\t\t},\n\t}, markupLatte.tag);\n\n\tPrism.hooks.add('before-tokenize', function (env) {\n\t\tif (env.language !== 'latte') {\n\t\t\treturn;\n\t\t}\n\t\tvar lattePattern = /\\{\\*[\\s\\S]*?\\*\\}|\\{[^'\"\\s{}*](?:[^\"'/{}]|\\/(?![*/])|(\"|')(?:\\\\[\\s\\S]|(?!\\1)[^\\\\])*\\1|\\/\\*(?:[^*]|\\*(?!\\/))*\\*\\/)*\\}/g;\n\t\tPrism.languages['markup-templating'].buildPlaceholders(env, 'latte', lattePattern);\n\t\tenv.grammar = markupLatte;\n\t});\n\n\tPrism.hooks.add('after-tokenize', function (env) {\n\t\tPrism.languages['markup-templating'].tokenizePlaceholders(env, 'latte');\n\t});\n\n}(Prism));\n/components/prism-csp.js\u0007Q/**\n * Original by Scott Helme.\n *\n * Reference: https://scotthelme.co.uk/csp-cheat-sheet/\n *\n * Supports the following:\n *  - https://www.w3.org/TR/CSP1/\n *  - https://www.w3.org/TR/CSP2/\n *  - https://www.w3.org/TR/CSP3/\n */\n\n(function (Prism) {\n\n\t/**\n\t * @param {string} source\n\t * @returns {RegExp}\n\t */\n\tfunction value(source) {\n\t\treturn RegExp(/([ \\t])/.source + '(?:' + source + ')' + /(?=[\\s;]|$)/.source, 'i');\n\t}\n\n\tPrism.languages.csp = {\n\t\t'directive': {\n\t\t\tpattern: /(^|[\\s;])(?:base-uri|block-all-mixed-content|(?:child|connect|default|font|frame|img|manifest|media|object|prefetch|script|style|worker)-src|disown-opener|form-action|frame-(?:ancestors|options)|input-protection(?:-(?:clip|selectors))?|navigate-to|plugin-types|policy-uri|referrer|reflected-xss|report-(?:to|uri)|require-sri-for|sandbox|(?:script|style)-src-(?:attr|elem)|upgrade-insecure-requests)(?=[\\s;]|$)/i,\n\t\t\tlookbehind: true,\n\t\t\talias: 'property'\n\t\t},\n\t\t'scheme': {\n\t\t\tpattern: value(/[a-z][a-z0-9.+-]*:/.source),\n\t\t\tlookbehind: true\n\t\t},\n\t\t'none': {\n\t\t\tpattern: value(/'none'/.source),\n\t\t\tlookbehind: true,\n\t\t\talias: 'keyword'\n\t\t},\n\t\t'nonce': {\n\t\t\tpattern: value(/'nonce-[-+/\\w=]+'/.source),\n\t\t\tlookbehind: true,\n\t\t\talias: 'number'\n\t\t},\n\t\t'hash': {\n\t\t\tpattern: value(/'sha(?:256|384|512)-[-+/\\w=]+'/.source),\n\t\t\tlookbehind: true,\n\t\t\talias: 'number'\n\t\t},\n\t\t'host': {\n\t\t\tpattern: value(\n\t\t\t\t/[a-z][a-z0-9.+-]*:\\/\\/[^\\s;,']*/.source +\n\t\t\t\t'|' +\n\t\t\t\t/\\*[^\\s;,']*/.source +\n\t\t\t\t'|' +\n\t\t\t\t/[a-z0-9-]+(?:\\.[a-z0-9-]+)+(?::[\\d*]+)?(?:\\/[^\\s;,']*)?/.source\n\t\t\t),\n\t\t\tlookbehind: true,\n\t\t\talias: 'url',\n\t\t\tinside: {\n\t\t\t\t'important': /\\*/\n\t\t\t}\n\t\t},\n\t\t'keyword': [\n\t\t\t{\n\t\t\t\tpattern: value(/'unsafe-[a-z-]+'/.source),\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'unsafe'\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: value(/'[a-z-]+'/.source),\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'safe'\n\t\t\t},\n\t\t],\n\t\t'punctuation': /;/\n\t};\n\n}(Prism));\n/components/prism-latex.js\u0006(function (Prism) {\n\tvar funcPattern = /\\\\(?:[^a-z()[\\]]|[a-z*]+)/i;\n\tvar insideEqu = {\n\t\t'equation-command': {\n\t\t\tpattern: funcPattern,\n\t\t\talias: 'regex'\n\t\t}\n\t};\n\n\tPrism.languages.latex = {\n\t\t'comment': /%.*/,\n\t\t// the verbatim environment prints whitespace to the document\n\t\t'cdata': {\n\t\t\tpattern: /(\\\\begin\\{((?:lstlisting|verbatim)\\*?)\\})[\\s\\S]*?(?=\\\\end\\{\\2\\})/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t/*\n\t\t * equations can be between $$ $$ or $ $ or \\( \\) or \\[ \\]\n\t\t * (all are multiline)\n\t\t */\n\t\t'equation': [\n\t\t\t{\n\t\t\t\tpattern: /\\$\\$(?:\\\\[\\s\\S]|[^\\\\$])+\\$\\$|\\$(?:\\\\[\\s\\S]|[^\\\\$])+\\$|\\\\\\([\\s\\S]*?\\\\\\)|\\\\\\[[\\s\\S]*?\\\\\\]/,\n\t\t\t\tinside: insideEqu,\n\t\t\t\talias: 'string'\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /(\\\\begin\\{((?:align|eqnarray|equation|gather|math|multline)\\*?)\\})[\\s\\S]*?(?=\\\\end\\{\\2\\})/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: insideEqu,\n\t\t\t\talias: 'string'\n\t\t\t}\n\t\t],\n\t\t/*\n\t\t * arguments which are keywords or references are highlighted\n\t\t * as keywords\n\t\t */\n\t\t'keyword': {\n\t\t\tpattern: /(\\\\(?:begin|cite|documentclass|end|label|ref|usepackage)(?:\\[[^\\]]+\\])?\\{)[^}]+(?=\\})/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'url': {\n\t\t\tpattern: /(\\\\url\\{)[^}]+(?=\\})/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t/*\n\t\t * section or chapter headlines are highlighted as bold so that\n\t\t * they stand out more\n\t\t */\n\t\t'headline': {\n\t\t\tpattern: /(\\\\(?:chapter|frametitle|paragraph|part|section|subparagraph|subsection|subsubparagraph|subsubsection|subsubsubparagraph)\\*?(?:\\[[^\\]]+\\])?\\{)[^}]+(?=\\})/,\n\t\t\tlookbehind: true,\n\t\t\talias: 'class-name'\n\t\t},\n\t\t'function': {\n\t\t\tpattern: funcPattern,\n\t\t\talias: 'selector'\n\t\t},\n\t\t'punctuation': /[[\\]{}&]/\n\t};\n\n\tPrism.languages.tex = Prism.languages.latex;\n\tPrism.languages.context = Prism.languages.latex;\n}(Prism));\n#/components/prism-processing.min.js\u0001Prism.languages.processing=Prism.languages.extend(\"clike\",{keyword:/\\b(?:break|case|catch|class|continue|default|else|extends|final|for|if|implements|import|new|null|private|public|return|static|super|switch|this|try|void|while)\\b/,function:/\\b\\w+(?=\\s*\\()/,operator:/<[<=]?|>[>=]?|&&?|\\|\\|?|[%?]|[!=+\\-*\\/]=?/}),Prism.languages.insertBefore(\"processing\",\"number\",{constant:/\\b(?!XML\\b)[A-Z][A-Z\\d_]+\\b/,type:{pattern:/\\b(?:boolean|byte|char|color|double|float|int|[A-Z]\\w*)\\b/,alias:\"class-name\"}});/components/prism-magma.js\u0005#Prism.languages.magma = {\n\t'output': {\n\t\tpattern: /^(>.*(?:\\r(?:\\n|(?!\\n))|\\n))(?!>)(?:.+|(?:\\r(?:\\n|(?!\\n))|\\n)(?!>).*)(?:(?:\\r(?:\\n|(?!\\n))|\\n)(?!>).*)*/m,\n\t\tlookbehind: true,\n\t\tgreedy: true\n\t},\n\n\t'comment': {\n\t\tpattern: /\\/\\/.*|\\/\\*[\\s\\S]*?\\*\\//,\n\t\tgreedy: true\n\t},\n\t'string': {\n\t\tpattern: /(^|[^\\\\\"])\"(?:[^\\r\\n\\\\\"]|\\\\.)*\"/,\n\t\tlookbehind: true,\n\t\tgreedy: true\n\t},\n\n\t// http://magma.maths.usyd.edu.au/magma/handbook/text/82\n\t'keyword': /\\b(?:_|adj|and|assert|assert2|assert3|assigned|break|by|case|cat|catch|clear|cmpeq|cmpne|continue|declare|default|delete|diff|div|do|elif|else|end|eq|error|eval|exists|exit|for|forall|forward|fprintf|freeze|function|ge|gt|if|iload|import|in|intrinsic|is|join|le|load|local|lt|meet|mod|ne|not|notadj|notin|notsubset|or|print|printf|procedure|quit|random|read|readi|repeat|require|requirege|requirerange|restore|return|save|sdiff|select|subset|then|time|to|try|until|vprint|vprintf|vtime|when|where|while|xor)\\b/,\n\t'boolean': /\\b(?:false|true)\\b/,\n\n\t'generator': {\n\t\tpattern: /\\b[a-z_]\\w*(?=\\s*<)/i,\n\t\talias: 'class-name'\n\t},\n\t'function': /\\b[a-z_]\\w*(?=\\s*\\()/i,\n\n\t'number': {\n\t\tpattern: /(^|[^\\w.]|\\.\\.)(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+)?(?:_[a-z]?)?(?=$|[^\\w.]|\\.\\.)/,\n\t\tlookbehind: true\n\t},\n\n\t'operator': /->|[-+*/^~!|#=]|:=|\\.\\./,\n\t'punctuation': /[()[\\]{}<>,;.:]/\n};\n/components/prism-sparql.min.js\u0003Prism.languages.sparql=Prism.languages.extend(\"turtle\",{boolean:/\\b(?:false|true)\\b/i,variable:{pattern:/[?$]\\w+/,greedy:!0}}),Prism.languages.insertBefore(\"sparql\",\"punctuation\",{keyword:[/\\b(?:A|ADD|ALL|AS|ASC|ASK|BNODE|BY|CLEAR|CONSTRUCT|COPY|CREATE|DATA|DEFAULT|DELETE|DESC|DESCRIBE|DISTINCT|DROP|EXISTS|FILTER|FROM|GROUP|HAVING|INSERT|INTO|LIMIT|LOAD|MINUS|MOVE|NAMED|NOT|NOW|OFFSET|OPTIONAL|ORDER|RAND|REDUCED|SELECT|SEPARATOR|SERVICE|SILENT|STRUUID|UNION|USING|UUID|VALUES|WHERE)\\b/i,/\\b(?:ABS|AVG|BIND|BOUND|CEIL|COALESCE|CONCAT|CONTAINS|COUNT|DATATYPE|DAY|ENCODE_FOR_URI|FLOOR|GROUP_CONCAT|HOURS|IF|IRI|isBLANK|isIRI|isLITERAL|isNUMERIC|isURI|LANG|LANGMATCHES|LCASE|MAX|MD5|MIN|MINUTES|MONTH|REGEX|REPLACE|ROUND|sameTerm|SAMPLE|SECONDS|SHA1|SHA256|SHA384|SHA512|STR|STRAFTER|STRBEFORE|STRDT|STRENDS|STRLANG|STRLEN|STRSTARTS|SUBSTR|SUM|TIMEZONE|TZ|UCASE|URI|YEAR)\\b(?=\\s*\\()/i,/\\b(?:BASE|GRAPH|PREFIX)\\b/i]}),Prism.languages.rq=Prism.languages.sparql;/components/prism-bash.js#(function (Prism) {\n\t// $ set | grep '^[A-Z][^[:space:]]*=' | cut -d= -f1 | tr '\\n' '|'\n\t// + LC_ALL, RANDOM, REPLY, SECONDS.\n\t// + make sure PS1..4 are here as they are not always set,\n\t// - some useless things.\n\tvar envVars = '\\\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\\\b';\n\n\tvar commandAfterHeredoc = {\n\t\tpattern: /(^([\"']?)\\w+\\2)[ \\t]+\\S.*/,\n\t\tlookbehind: true,\n\t\talias: 'punctuation', // this looks reasonably well in all themes\n\t\tinside: null // see below\n\t};\n\n\tvar insideString = {\n\t\t'bash': commandAfterHeredoc,\n\t\t'environment': {\n\t\t\tpattern: RegExp('\\\\$' + envVars),\n\t\t\talias: 'constant'\n\t\t},\n\t\t'variable': [\n\t\t\t// [0]: Arithmetic Environment\n\t\t\t{\n\t\t\t\tpattern: /\\$?\\(\\([\\s\\S]+?\\)\\)/,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: {\n\t\t\t\t\t// If there is a $ sign at the beginning highlight $(( and )) as variable\n\t\t\t\t\t'variable': [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpattern: /(^\\$\\(\\([\\s\\S]+)\\)\\)/,\n\t\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t\t},\n\t\t\t\t\t\t/^\\$\\(\\(/\n\t\t\t\t\t],\n\t\t\t\t\t'number': /\\b0x[\\dA-Fa-f]+\\b|(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:[Ee]-?\\d+)?/,\n\t\t\t\t\t// Operators according to https://www.gnu.org/software/bash/manual/bashref.html#Shell-Arithmetic\n\t\t\t\t\t'operator': /--|\\+\\+|\\*\\*=?|<<=?|>>=?|&&|\\|\\||[=!+\\-*/%<>^&|]=?|[?~:]/,\n\t\t\t\t\t// If there is no $ sign at the beginning highlight (( and )) as punctuation\n\t\t\t\t\t'punctuation': /\\(\\(?|\\)\\)?|,|;/\n\t\t\t\t}\n\t\t\t},\n\t\t\t// [1]: Command Substitution\n\t\t\t{\n\t\t\t\tpattern: /\\$\\((?:\\([^)]+\\)|[^()])+\\)|`[^`]+`/,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'variable': /^\\$\\(|^`|\\)$|`$/\n\t\t\t\t}\n\t\t\t},\n\t\t\t// [2]: Brace expansion\n\t\t\t{\n\t\t\t\tpattern: /\\$\\{[^}]+\\}/,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'operator': /:[-=?+]?|[!\\/]|##?|%%?|\\^\\^?|,,?/,\n\t\t\t\t\t'punctuation': /[\\[\\]]/,\n\t\t\t\t\t'environment': {\n\t\t\t\t\t\tpattern: RegExp('(\\\\{)' + envVars),\n\t\t\t\t\t\tlookbehind: true,\n\t\t\t\t\t\talias: 'constant'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t/\\$(?:\\w+|[#?*!@$])/\n\t\t],\n\t\t// Escape sequences from echo and printf's manuals, and escaped quotes.\n\t\t'entity': /\\\\(?:[abceEfnrtv\\\\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/\n\t};\n\n\tPrism.languages.bash = {\n\t\t'shebang': {\n\t\t\tpattern: /^#!\\s*\\/.*/,\n\t\t\talias: 'important'\n\t\t},\n\t\t'comment': {\n\t\t\tpattern: /(^|[^\"{\\\\$])#.*/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'function-name': [\n\t\t\t// a) function foo {\n\t\t\t// b) foo() {\n\t\t\t// c) function foo() {\n\t\t\t// but not “foo {”\n\t\t\t{\n\t\t\t\t// a) and c)\n\t\t\t\tpattern: /(\\bfunction\\s+)[\\w-]+(?=(?:\\s*\\(?:\\s*\\))?\\s*\\{)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'function'\n\t\t\t},\n\t\t\t{\n\t\t\t\t// b)\n\t\t\t\tpattern: /\\b[\\w-]+(?=\\s*\\(\\s*\\)\\s*\\{)/,\n\t\t\t\talias: 'function'\n\t\t\t}\n\t\t],\n\t\t// Highlight variable names as variables in for and select beginnings.\n\t\t'for-or-select': {\n\t\t\tpattern: /(\\b(?:for|select)\\s+)\\w+(?=\\s+in\\s)/,\n\t\t\talias: 'variable',\n\t\t\tlookbehind: true\n\t\t},\n\t\t// Highlight variable names as variables in the left-hand part\n\t\t// of assignments (“=” and “+=”).\n\t\t'assign-left': {\n\t\t\tpattern: /(^|[\\s;|&]|[<>]\\()\\w+(?:\\.\\w+)*(?=\\+?=)/,\n\t\t\tinside: {\n\t\t\t\t'environment': {\n\t\t\t\t\tpattern: RegExp('(^|[\\\\s;|&]|[<>]\\\\()' + envVars),\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\talias: 'constant'\n\t\t\t\t}\n\t\t\t},\n\t\t\talias: 'variable',\n\t\t\tlookbehind: true\n\t\t},\n\t\t// Highlight parameter names as variables\n\t\t'parameter': {\n\t\t\tpattern: /(^|\\s)-{1,2}(?:\\w+:[+-]?)?\\w+(?:\\.\\w+)*(?=[=\\s]|$)/,\n\t\t\talias: 'variable',\n\t\t\tlookbehind: true\n\t\t},\n\t\t'string': [\n\t\t\t// Support for Here-documents https://en.wikipedia.org/wiki/Here_document\n\t\t\t{\n\t\t\t\tpattern: /((?:^|[^<])<<-?\\s*)(\\w+)\\s[\\s\\S]*?(?:\\r?\\n|\\r)\\2/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: insideString\n\t\t\t},\n\t\t\t// Here-document with quotes around the tag\n\t\t\t// → No expansion (so no “inside”).\n\t\t\t{\n\t\t\t\tpattern: /((?:^|[^<])<<-?\\s*)([\"'])(\\w+)\\2\\s[\\s\\S]*?(?:\\r?\\n|\\r)\\3/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'bash': commandAfterHeredoc\n\t\t\t\t}\n\t\t\t},\n\t\t\t// “Normal” string\n\t\t\t{\n\t\t\t\t// https://www.gnu.org/software/bash/manual/html_node/Double-Quotes.html\n\t\t\t\tpattern: /(^|[^\\\\](?:\\\\\\\\)*)\"(?:\\\\[\\s\\S]|\\$\\([^)]+\\)|\\$(?!\\()|`[^`]+`|[^\"\\\\`$])*\"/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: insideString\n\t\t\t},\n\t\t\t{\n\t\t\t\t// https://www.gnu.org/software/bash/manual/html_node/Single-Quotes.html\n\t\t\t\tpattern: /(^|[^$\\\\])'[^']*'/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true\n\t\t\t},\n\t\t\t{\n\t\t\t\t// https://www.gnu.org/software/bash/manual/html_node/ANSI_002dC-Quoting.html\n\t\t\t\tpattern: /\\$'(?:[^'\\\\]|\\\\[\\s\\S])*'/,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'entity': insideString.entity\n\t\t\t\t}\n\t\t\t}\n\t\t],\n\t\t'environment': {\n\t\t\tpattern: RegExp('\\\\$?' + envVars),\n\t\t\talias: 'constant'\n\t\t},\n\t\t'variable': insideString.variable,\n\t\t'function': {\n\t\t\tpattern: /(^|[\\s;|&]|[<>]\\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cargo|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|java|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|sysctl|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\\s;|&])/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'keyword': {\n\t\t\tpattern: /(^|[\\s;|&]|[<>]\\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\\s;|&])/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t// https://www.gnu.org/software/bash/manual/html_node/Shell-Builtin-Commands.html\n\t\t'builtin': {\n\t\t\tpattern: /(^|[\\s;|&]|[<>]\\()(?:\\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\\s;|&])/,\n\t\t\tlookbehind: true,\n\t\t\t// Alias added to make those easier to distinguish from strings.\n\t\t\talias: 'class-name'\n\t\t},\n\t\t'boolean': {\n\t\t\tpattern: /(^|[\\s;|&]|[<>]\\()(?:false|true)(?=$|[)\\s;|&])/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'file-descriptor': {\n\t\t\tpattern: /\\B&\\d\\b/,\n\t\t\talias: 'important'\n\t\t},\n\t\t'operator': {\n\t\t\t// Lots of redirections here, but not just that.\n\t\t\tpattern: /\\d?<>|>\\||\\+=|=[=~]?|!=?|<<[<-]?|[&\\d]?>>|\\d[<>]&?|[<>][&=]?|&[>&]?|\\|[&|]?/,\n\t\t\tinside: {\n\t\t\t\t'file-descriptor': {\n\t\t\t\t\tpattern: /^\\d/,\n\t\t\t\t\talias: 'important'\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t'punctuation': /\\$?\\(\\(?|\\)\\)?|\\.\\.|[{}[\\];\\\\]/,\n\t\t'number': {\n\t\t\tpattern: /(^|\\s)(?:[1-9]\\d*|0)(?:[.,]\\d+)?\\b/,\n\t\t\tlookbehind: true\n\t\t}\n\t};\n\n\tcommandAfterHeredoc.inside = Prism.languages.bash;\n\n\t/* Patterns in command substitution. */\n\tvar toBeCopied = [\n\t\t'comment',\n\t\t'function-name',\n\t\t'for-or-select',\n\t\t'assign-left',\n\t\t'parameter',\n\t\t'string',\n\t\t'environment',\n\t\t'function',\n\t\t'keyword',\n\t\t'builtin',\n\t\t'boolean',\n\t\t'file-descriptor',\n\t\t'operator',\n\t\t'punctuation',\n\t\t'number'\n\t];\n\tvar inside = insideString.variable[1].inside;\n\tfor (var i = 0; i < toBeCopied.length; i++) {\n\t\tinside[toBeCopied[i]] = Prism.languages.bash[toBeCopied[i]];\n\t}\n\n\tPrism.languages.sh = Prism.languages.bash;\n\tPrism.languages.shell = Prism.languages.bash;\n}(Prism));\n/components/prism-regex.min.js\u0005\t!function(a){var e={pattern:/\\\\[\\\\(){}[\\]^$+*?|.]/,alias:\"escape\"},n=/\\\\(?:x[\\da-fA-F]{2}|u[\\da-fA-F]{4}|u\\{[\\da-fA-F]+\\}|0[0-7]{0,2}|[123][0-7]{2}|c[a-zA-Z]|.)/,t=\"(?:[^\\\\\\\\-]|\"+n.source+\")\",s=RegExp(t+\"-\"+t),i={pattern:/(<|')[^<>']+(?=[>']$)/,lookbehind:!0,alias:\"variable\"};a.languages.regex={\"char-class\":{pattern:/((?:^|[^\\\\])(?:\\\\\\\\)*)\\[(?:[^\\\\\\]]|\\\\[\\s\\S])*\\]/,lookbehind:!0,inside:{\"char-class-negation\":{pattern:/(^\\[)\\^/,lookbehind:!0,alias:\"operator\"},\"char-class-punctuation\":{pattern:/^\\[|\\]$/,alias:\"punctuation\"},range:{pattern:s,inside:{escape:n,\"range-punctuation\":{pattern:/-/,alias:\"operator\"}}},\"special-escape\":e,\"char-set\":{pattern:/\\\\[wsd]|\\\\p\\{[^{}]+\\}/i,alias:\"class-name\"},escape:n}},\"special-escape\":e,\"char-set\":{pattern:/\\.|\\\\[wsd]|\\\\p\\{[^{}]+\\}/i,alias:\"class-name\"},backreference:[{pattern:/\\\\(?![123][0-7]{2})[1-9]/,alias:\"keyword\"},{pattern:/\\\\k<[^<>']+>/,alias:\"keyword\",inside:{\"group-name\":i}}],anchor:{pattern:/[$^]|\\\\[ABbGZz]/,alias:\"function\"},escape:n,group:[{pattern:/\\((?:\\?(?:<[^<>']+>|'[^<>']+'|[>:]|<?[=!]|[idmnsuxU]+(?:-[idmnsuxU]+)?:?))?/,alias:\"punctuation\",inside:{\"group-name\":i}},{pattern:/\\)/,alias:\"punctuation\"}],quantifier:{pattern:/(?:[+*?]|\\{\\d+(?:,\\d*)?\\})[?+]?/,alias:\"number\"},alternation:{pattern:/\\|/,alias:\"keyword\"}}}(Prism);/components/prism-django.min.js\u0004u!function(e){e.languages.django={comment:/^\\{#[\\s\\S]*?#\\}$/,tag:{pattern:/(^\\{%[+-]?\\s*)\\w+/,lookbehind:!0,alias:\"keyword\"},delimiter:{pattern:/^\\{[{%][+-]?|[+-]?[}%]\\}$/,alias:\"punctuation\"},string:{pattern:/(\"|')(?:\\\\.|(?!\\1)[^\\\\\\r\\n])*\\1/,greedy:!0},filter:{pattern:/(\\|)\\w+/,lookbehind:!0,alias:\"function\"},test:{pattern:/(\\bis\\s+(?:not\\s+)?)(?!not\\b)\\w+/,lookbehind:!0,alias:\"function\"},function:/\\b[a-z_]\\w+(?=\\s*\\()/i,keyword:/\\b(?:and|as|by|else|for|if|import|in|is|loop|not|or|recursive|with|without)\\b/,operator:/[-+%=]=?|!=|\\*\\*?=?|\\/\\/?=?|<[<=>]?|>[=>]?|[&|^~]/,number:/\\b\\d+(?:\\.\\d+)?\\b/,boolean:/[Ff]alse|[Nn]one|[Tt]rue/,variable:/\\b\\w+\\b/,punctuation:/[{}[\\](),.:;]/};var n=/\\{\\{[\\s\\S]*?\\}\\}|\\{%[\\s\\S]*?%\\}|\\{#[\\s\\S]*?#\\}/g,o=e.languages[\"markup-templating\"];e.hooks.add(\"before-tokenize\",(function(e){o.buildPlaceholders(e,\"django\",n)})),e.hooks.add(\"after-tokenize\",(function(e){o.tokenizePlaceholders(e,\"django\")})),e.languages.jinja2=e.languages.django,e.hooks.add(\"before-tokenize\",(function(e){o.buildPlaceholders(e,\"jinja2\",n)})),e.hooks.add(\"after-tokenize\",(function(e){o.tokenizePlaceholders(e,\"jinja2\")}))}(Prism);/components/prism-less.js\u0005'/* FIXME :\n :extend() is not handled specifically : its highlighting is buggy.\n Mixin usage must be inside a ruleset to be highlighted.\n At-rules (e.g. import) containing interpolations are buggy.\n Detached rulesets are highlighted as at-rules.\n A comment before a mixin usage prevents the latter to be properly highlighted.\n */\n\nPrism.languages.less = Prism.languages.extend('css', {\n\t'comment': [\n\t\t/\\/\\*[\\s\\S]*?\\*\\//,\n\t\t{\n\t\t\tpattern: /(^|[^\\\\])\\/\\/.*/,\n\t\t\tlookbehind: true\n\t\t}\n\t],\n\t'atrule': {\n\t\tpattern: /@[\\w-](?:\\((?:[^(){}]|\\([^(){}]*\\))*\\)|[^(){};\\s]|\\s+(?!\\s))*?(?=\\s*\\{)/,\n\t\tinside: {\n\t\t\t'punctuation': /[:()]/\n\t\t}\n\t},\n\t// selectors and mixins are considered the same\n\t'selector': {\n\t\tpattern: /(?:@\\{[\\w-]+\\}|[^{};\\s@])(?:@\\{[\\w-]+\\}|\\((?:[^(){}]|\\([^(){}]*\\))*\\)|[^(){};@\\s]|\\s+(?!\\s))*?(?=\\s*\\{)/,\n\t\tinside: {\n\t\t\t// mixin parameters\n\t\t\t'variable': /@+[\\w-]+/\n\t\t}\n\t},\n\n\t'property': /(?:@\\{[\\w-]+\\}|[\\w-])+(?:\\+_?)?(?=\\s*:)/,\n\t'operator': /[+\\-*\\/]/\n});\n\nPrism.languages.insertBefore('less', 'property', {\n\t'variable': [\n\t\t// Variable declaration (the colon must be consumed!)\n\t\t{\n\t\t\tpattern: /@[\\w-]+\\s*:/,\n\t\t\tinside: {\n\t\t\t\t'punctuation': /:/\n\t\t\t}\n\t\t},\n\n\t\t// Variable usage\n\t\t/@@?[\\w-]+/\n\t],\n\t'mixin-usage': {\n\t\tpattern: /([{;]\\s*)[.#](?!\\d)[\\w-].*?(?=[(;])/,\n\t\tlookbehind: true,\n\t\talias: 'function'\n\t}\n});\n/components/prism-false.js\u0002(function (Prism) {\n\t/**\n\t * Based on the manual by Wouter van Oortmerssen.\n\t *\n\t * @see {@link https://github.com/PrismJS/prism/issues/2801#issue-829717504}\n\t */\n\tPrism.languages['false'] = {\n\t\t'comment': {\n\t\t\tpattern: /\\{[^}]*\\}/\n\t\t},\n\t\t'string': {\n\t\t\tpattern: /\"[^\"]*\"/,\n\t\t\tgreedy: true\n\t\t},\n\t\t'character-code': {\n\t\t\tpattern: /'(?:[^\\r]|\\r\\n?)/,\n\t\t\talias: 'number'\n\t\t},\n\t\t'assembler-code': {\n\t\t\tpattern: /\\d+`/,\n\t\t\talias: 'important'\n\t\t},\n\t\t'number': /\\d+/,\n\t\t'operator': /[-!#$%&'*+,./:;=>?@\\\\^_`|~ßø]/,\n\t\t'punctuation': /\\[|\\]/,\n\t\t'variable': /[a-z]/,\n\t\t'non-standard': {\n\t\t\tpattern: /[()<BDO®]/,\n\t\t\talias: 'bold'\n\t\t}\n\t};\n}(Prism));\n/components/prism-json5.js\u0002\u0012(function (Prism) {\n\n\tvar string = /(\"|')(?:\\\\(?:\\r\\n?|\\n|.)|(?!\\1)[^\\\\\\r\\n])*\\1/;\n\n\tPrism.languages.json5 = Prism.languages.extend('json', {\n\t\t'property': [\n\t\t\t{\n\t\t\t\tpattern: RegExp(string.source + '(?=\\\\s*:)'),\n\t\t\t\tgreedy: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*:)/,\n\t\t\t\talias: 'unquoted'\n\t\t\t}\n\t\t],\n\t\t'string': {\n\t\t\tpattern: string,\n\t\t\tgreedy: true\n\t\t},\n\t\t'number': /[+-]?\\b(?:NaN|Infinity|0x[a-fA-F\\d]+)\\b|[+-]?(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n\t});\n\n}(Prism));\n/components/prism-avro-idl.js\u0004// GitHub: https://github.com/apache/avro\n// Docs: https://avro.apache.org/docs/current/idl.html\n\nPrism.languages['avro-idl'] = {\n\t'comment': {\n\t\tpattern: /\\/\\/.*|\\/\\*[\\s\\S]*?\\*\\//,\n\t\tgreedy: true\n\t},\n\t'string': {\n\t\tpattern: /(^|[^\\\\])\"(?:[^\\r\\n\"\\\\]|\\\\.)*\"/,\n\t\tlookbehind: true,\n\t\tgreedy: true\n\t},\n\n\t'annotation': {\n\t\tpattern: /@(?:[$\\w.-]|`[^\\r\\n`]+`)+/,\n\t\tgreedy: true,\n\t\talias: 'function'\n\t},\n\t'function-identifier': {\n\t\tpattern: /`[^\\r\\n`]+`(?=\\s*\\()/,\n\t\tgreedy: true,\n\t\talias: 'function'\n\t},\n\t'identifier': {\n\t\tpattern: /`[^\\r\\n`]+`/,\n\t\tgreedy: true\n\t},\n\n\t'class-name': {\n\t\tpattern: /(\\b(?:enum|error|protocol|record|throws)\\b\\s+)[$\\w]+/,\n\t\tlookbehind: true,\n\t\tgreedy: true\n\t},\n\t'keyword': /\\b(?:array|boolean|bytes|date|decimal|double|enum|error|false|fixed|float|idl|import|int|local_timestamp_ms|long|map|null|oneway|protocol|record|schema|string|throws|time_ms|timestamp_ms|true|union|uuid|void)\\b/,\n\t'function': /\\b[a-z_]\\w*(?=\\s*\\()/i,\n\n\t'number': [\n\t\t{\n\t\t\tpattern: /(^|[^\\w.])-?(?:(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?|0x(?:[a-f0-9]+(?:\\.[a-f0-9]*)?|\\.[a-f0-9]+)(?:p[+-]?\\d+)?)[dfl]?(?![\\w.])/i,\n\t\t\tlookbehind: true\n\t\t},\n\t\t/-?\\b(?:Infinity|NaN)\\b/\n\t],\n\n\t'operator': /=/,\n\t'punctuation': /[()\\[\\]{}<>.:,;-]/\n};\n\nPrism.languages.avdl = Prism.languages['avro-idl'];\n/components/prism-cue.js\nL(function (Prism) {\n\n\t// https://cuelang.org/docs/references/spec/\n\n\t// eslint-disable-next-line regexp/strict\n\tvar stringEscape = /\\\\(?:(?!\\2)|\\2(?:[^()\\r\\n]|\\([^()]*\\)))/.source;\n\t// eslint-disable-next-line regexp/strict\n\tvar stringTypes = /\"\"\"(?:[^\\\\\"]|\"(?!\"\"\\2)|<esc>)*\"\"\"/.source +\n\t\t// eslint-disable-next-line regexp/strict\n\t\t'|' + /'''(?:[^\\\\']|'(?!''\\2)|<esc>)*'''/.source +\n\t\t// eslint-disable-next-line regexp/strict\n\t\t'|' + /\"(?:[^\\\\\\r\\n\"]|\"(?!\\2)|<esc>)*\"/.source +\n\t\t// eslint-disable-next-line regexp/strict\n\t\t'|' + /'(?:[^\\\\\\r\\n']|'(?!\\2)|<esc>)*'/.source;\n\tvar stringLiteral = '(?:' + stringTypes.replace(/<esc>/g, stringEscape) + ')';\n\n\tPrism.languages.cue = {\n\t\t'comment': {\n\t\t\tpattern: /\\/\\/.*/,\n\t\t\tgreedy: true\n\t\t},\n\t\t'string-literal': {\n\t\t\t// eslint-disable-next-line regexp/strict\n\t\t\tpattern: RegExp(/(^|[^#\"'\\\\])(#*)/.source + stringLiteral + /(?![\"'])\\2/.source),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t// I'm using dirty hack here. We have to know the number hashes at the start of the string somehow,\n\t\t\t\t// but we can't look back. So instead, we will use a lookahead, go to the end of the string, and\n\t\t\t\t// capture the hashes at the end of the string.\n\t\t\t\t'escape': {\n\t\t\t\t\tpattern: /(?=[\\s\\S]*[\"'](#*)$)\\\\\\1(?:U[a-fA-F0-9]{1,8}|u[a-fA-F0-9]{1,4}|x[a-fA-F0-9]{1,2}|\\d{2,3}|[^(])/,\n\t\t\t\t\tgreedy: true,\n\t\t\t\t\talias: 'string'\n\t\t\t\t},\n\t\t\t\t'interpolation': {\n\t\t\t\t\tpattern: /(?=[\\s\\S]*[\"'](#*)$)\\\\\\1\\([^()]*\\)/,\n\t\t\t\t\tgreedy: true,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'punctuation': /^\\\\#*\\(|\\)$/,\n\t\t\t\t\t\t'expression': {\n\t\t\t\t\t\t\tpattern: /[\\s\\S]+/,\n\t\t\t\t\t\t\tinside: null\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t'string': /[\\s\\S]+/\n\t\t\t}\n\t\t},\n\n\t\t'keyword': {\n\t\t\tpattern: /(^|[^\\w$])(?:for|if|import|in|let|null|package)(?![\\w$])/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'boolean': {\n\t\t\tpattern: /(^|[^\\w$])(?:false|true)(?![\\w$])/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'builtin': {\n\t\t\tpattern: /(^|[^\\w$])(?:bool|bytes|float|float(?:32|64)|u?int(?:8|16|32|64|128)?|number|rune|string)(?![\\w$])/,\n\t\t\tlookbehind: true\n\t\t},\n\n\t\t'attribute': {\n\t\t\tpattern: /@[\\w$]+(?=\\s*\\()/,\n\t\t\talias: 'function'\n\t\t},\n\t\t'function': {\n\t\t\tpattern: /(^|[^\\w$])[a-z_$][\\w$]*(?=\\s*\\()/i,\n\t\t\tlookbehind: true\n\t\t},\n\n\t\t'number': {\n\t\t\tpattern: /(^|[^\\w$.])(?:0b[01]+(?:_[01]+)*|0o[0-7]+(?:_[0-7]+)*|0[xX][0-9A-Fa-f]+(?:_[0-9A-Fa-f]+)*|(?:\\d+(?:_\\d+)*(?:\\.(?:\\d+(?:_\\d+)*)?)?|\\.\\d+(?:_\\d+)*)(?:[eE][+-]?\\d+(?:_\\d+)*)?(?:[KMGTP]i?)?)(?![\\w$])/,\n\t\t\tlookbehind: true\n\t\t},\n\n\t\t'operator': /\\.{3}|_\\|_|&&?|\\|\\|?|[=!]~|[<>=!]=?|[+\\-*/?]/,\n\t\t'punctuation': /[()[\\]{},.:]/\n\t};\n\n\tPrism.languages.cue['string-literal'].inside.interpolation.inside.expression.inside = Prism.languages.cue;\n\n}(Prism));\n/components/prism-icon.min.js\u0003Prism.languages.icon={comment:/#.*/,string:{pattern:/([\"'])(?:(?!\\1)[^\\\\\\r\\n_]|\\\\.|_(?!\\1)(?:\\r\\n|[\\s\\S]))*\\1/,greedy:!0},number:/\\b(?:\\d+r[a-z\\d]+|\\d+(?:\\.\\d+)?(?:e[+-]?\\d+)?)\\b|\\.\\d+\\b/i,\"builtin-keyword\":{pattern:/&(?:allocated|ascii|clock|collections|cset|current|date|dateline|digits|dump|e|error(?:number|text|value)?|errout|fail|features|file|host|input|lcase|letters|level|line|main|null|output|phi|pi|pos|progname|random|regions|source|storage|subject|time|trace|ucase|version)\\b/,alias:\"variable\"},directive:{pattern:/\\$\\w+/,alias:\"builtin\"},keyword:/\\b(?:break|by|case|create|default|do|else|end|every|fail|global|if|initial|invocable|link|local|next|not|of|procedure|record|repeat|return|static|suspend|then|to|until|while)\\b/,function:/\\b(?!\\d)\\w+(?=\\s*[({]|\\s*!\\s*\\[)/,operator:/[+-]:(?!=)|(?:[\\/?@^%&]|\\+\\+?|--?|==?=?|~==?=?|\\*\\*?|\\|\\|\\|?|<(?:->?|<?=?)|>>?=?)(?::=)?|:(?:=:?)?|[!.\\\\|~]/,punctuation:/[\\[\\](){},;]/};5/plugins/show-invisibles/prism-show-invisibles.min.js\u0002\n!function(){if(\"undefined\"!=typeof Prism){var r={tab:/\\t/,crlf:/\\r\\n/,lf:/\\n/,cr:/\\r/,space:/ /};Prism.hooks.add(\"before-highlight\",(function(r){i(r.grammar)}))}function e(r,a){var n=r[a];switch(Prism.util.type(n)){case\"RegExp\":var t={};r[a]={pattern:n,inside:t},i(t);break;case\"Array\":for(var f=0,s=n.length;f<s;f++)e(n,f);break;default:i(t=n.inside||(n.inside={}))}}function i(a){if(a&&!a.tab){for(var n in r)r.hasOwnProperty(n)&&(a[n]=r[n]);for(var n in a)a.hasOwnProperty(n)&&!r[n]&&(\"rest\"===n?i(a.rest):e(a,n))}}}();/components/prism-csharp.js4(function (Prism) {\n\n\t/**\n\t * Replaces all placeholders \"<<n>>\" of given pattern with the n-th replacement (zero based).\n\t *\n\t * Note: This is a simple text based replacement. Be careful when using backreferences!\n\t *\n\t * @param {string} pattern the given pattern.\n\t * @param {string[]} replacements a list of replacement which can be inserted into the given pattern.\n\t * @returns {string} the pattern with all placeholders replaced with their corresponding replacements.\n\t * @example replace(/a<<0>>a/.source, [/b+/.source]) === /a(?:b+)a/.source\n\t */\n\tfunction replace(pattern, replacements) {\n\t\treturn pattern.replace(/<<(\\d+)>>/g, function (m, index) {\n\t\t\treturn '(?:' + replacements[+index] + ')';\n\t\t});\n\t}\n\t/**\n\t * @param {string} pattern\n\t * @param {string[]} replacements\n\t * @param {string} [flags]\n\t * @returns {RegExp}\n\t */\n\tfunction re(pattern, replacements, flags) {\n\t\treturn RegExp(replace(pattern, replacements), flags || '');\n\t}\n\n\t/**\n\t * Creates a nested pattern where all occurrences of the string `<<self>>` are replaced with the pattern itself.\n\t *\n\t * @param {string} pattern\n\t * @param {number} depthLog2\n\t * @returns {string}\n\t */\n\tfunction nested(pattern, depthLog2) {\n\t\tfor (var i = 0; i < depthLog2; i++) {\n\t\t\tpattern = pattern.replace(/<<self>>/g, function () { return '(?:' + pattern + ')'; });\n\t\t}\n\t\treturn pattern.replace(/<<self>>/g, '[^\\\\s\\\\S]');\n\t}\n\n\t// https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/\n\tvar keywordKinds = {\n\t\t// keywords which represent a return or variable type\n\t\ttype: 'bool byte char decimal double dynamic float int long object sbyte short string uint ulong ushort var void',\n\t\t// keywords which are used to declare a type\n\t\ttypeDeclaration: 'class enum interface record struct',\n\t\t// contextual keywords\n\t\t// (\"var\" and \"dynamic\" are missing because they are used like types)\n\t\tcontextual: 'add alias and ascending async await by descending from(?=\\\\s*(?:\\\\w|$)) get global group into init(?=\\\\s*;) join let nameof not notnull on or orderby partial remove select set unmanaged value when where with(?=\\\\s*{)',\n\t\t// all other keywords\n\t\tother: 'abstract as base break case catch checked const continue default delegate do else event explicit extern finally fixed for foreach goto if implicit in internal is lock namespace new null operator out override params private protected public readonly ref return sealed sizeof stackalloc static switch this throw try typeof unchecked unsafe using virtual volatile while yield'\n\t};\n\n\t// keywords\n\tfunction keywordsToPattern(words) {\n\t\treturn '\\\\b(?:' + words.trim().replace(/ /g, '|') + ')\\\\b';\n\t}\n\tvar typeDeclarationKeywords = keywordsToPattern(keywordKinds.typeDeclaration);\n\tvar keywords = RegExp(keywordsToPattern(keywordKinds.type + ' ' + keywordKinds.typeDeclaration + ' ' + keywordKinds.contextual + ' ' + keywordKinds.other));\n\tvar nonTypeKeywords = keywordsToPattern(keywordKinds.typeDeclaration + ' ' + keywordKinds.contextual + ' ' + keywordKinds.other);\n\tvar nonContextualKeywords = keywordsToPattern(keywordKinds.type + ' ' + keywordKinds.typeDeclaration + ' ' + keywordKinds.other);\n\n\t// types\n\tvar generic = nested(/<(?:[^<>;=+\\-*/%&|^]|<<self>>)*>/.source, 2); // the idea behind the other forbidden characters is to prevent false positives. Same for tupleElement.\n\tvar nestedRound = nested(/\\((?:[^()]|<<self>>)*\\)/.source, 2);\n\tvar name = /@?\\b[A-Za-z_]\\w*\\b/.source;\n\tvar genericName = replace(/<<0>>(?:\\s*<<1>>)?/.source, [name, generic]);\n\tvar identifier = replace(/(?!<<0>>)<<1>>(?:\\s*\\.\\s*<<1>>)*/.source, [nonTypeKeywords, genericName]);\n\tvar array = /\\[\\s*(?:,\\s*)*\\]/.source;\n\tvar typeExpressionWithoutTuple = replace(/<<0>>(?:\\s*(?:\\?\\s*)?<<1>>)*(?:\\s*\\?)?/.source, [identifier, array]);\n\tvar tupleElement = replace(/[^,()<>[\\];=+\\-*/%&|^]|<<0>>|<<1>>|<<2>>/.source, [generic, nestedRound, array]);\n\tvar tuple = replace(/\\(<<0>>+(?:,<<0>>+)+\\)/.source, [tupleElement]);\n\tvar typeExpression = replace(/(?:<<0>>|<<1>>)(?:\\s*(?:\\?\\s*)?<<2>>)*(?:\\s*\\?)?/.source, [tuple, identifier, array]);\n\n\tvar typeInside = {\n\t\t'keyword': keywords,\n\t\t'punctuation': /[<>()?,.:[\\]]/\n\t};\n\n\t// strings & characters\n\t// https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/language-specification/lexical-structure#character-literals\n\t// https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/language-specification/lexical-structure#string-literals\n\tvar character = /'(?:[^\\r\\n'\\\\]|\\\\.|\\\\[Uux][\\da-fA-F]{1,8})'/.source; // simplified pattern\n\tvar regularString = /\"(?:\\\\.|[^\\\\\"\\r\\n])*\"/.source;\n\tvar verbatimString = /@\"(?:\"\"|\\\\[\\s\\S]|[^\\\\\"])*\"(?!\")/.source;\n\n\n\tPrism.languages.csharp = Prism.languages.extend('clike', {\n\t\t'string': [\n\t\t\t{\n\t\t\t\tpattern: re(/(^|[^$\\\\])<<0>>/.source, [verbatimString]),\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: re(/(^|[^@$\\\\])<<0>>/.source, [regularString]),\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true\n\t\t\t}\n\t\t],\n\t\t'class-name': [\n\t\t\t{\n\t\t\t\t// Using static\n\t\t\t\t// using static System.Math;\n\t\t\t\tpattern: re(/(\\busing\\s+static\\s+)<<0>>(?=\\s*;)/.source, [identifier]),\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: typeInside\n\t\t\t},\n\t\t\t{\n\t\t\t\t// Using alias (type)\n\t\t\t\t// using Project = PC.MyCompany.Project;\n\t\t\t\tpattern: re(/(\\busing\\s+<<0>>\\s*=\\s*)<<1>>(?=\\s*;)/.source, [name, typeExpression]),\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: typeInside\n\t\t\t},\n\t\t\t{\n\t\t\t\t// Using alias (alias)\n\t\t\t\t// using Project = PC.MyCompany.Project;\n\t\t\t\tpattern: re(/(\\busing\\s+)<<0>>(?=\\s*=)/.source, [name]),\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\t{\n\t\t\t\t// Type declarations\n\t\t\t\t// class Foo<A, B>\n\t\t\t\t// interface Foo<out A, B>\n\t\t\t\tpattern: re(/(\\b<<0>>\\s+)<<1>>/.source, [typeDeclarationKeywords, genericName]),\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: typeInside\n\t\t\t},\n\t\t\t{\n\t\t\t\t// Single catch exception declaration\n\t\t\t\t// catch(Foo)\n\t\t\t\t// (things like catch(Foo e) is covered by variable declaration)\n\t\t\t\tpattern: re(/(\\bcatch\\s*\\(\\s*)<<0>>/.source, [identifier]),\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: typeInside\n\t\t\t},\n\t\t\t{\n\t\t\t\t// Name of the type parameter of generic constraints\n\t\t\t\t// where Foo : class\n\t\t\t\tpattern: re(/(\\bwhere\\s+)<<0>>/.source, [name]),\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\t{\n\t\t\t\t// Casts and checks via as and is.\n\t\t\t\t// as Foo<A>, is Bar<B>\n\t\t\t\t// (things like if(a is Foo b) is covered by variable declaration)\n\t\t\t\tpattern: re(/(\\b(?:is(?:\\s+not)?|as)\\s+)<<0>>/.source, [typeExpressionWithoutTuple]),\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: typeInside\n\t\t\t},\n\t\t\t{\n\t\t\t\t// Variable, field and parameter declaration\n\t\t\t\t// (Foo bar, Bar baz, Foo[,,] bay, Foo<Bar, FooBar<Bar>> bax)\n\t\t\t\tpattern: re(/\\b<<0>>(?=\\s+(?!<<1>>|with\\s*\\{)<<2>>(?:\\s*[=,;:{)\\]]|\\s+(?:in|when)\\b))/.source, [typeExpression, nonContextualKeywords, name]),\n\t\t\t\tinside: typeInside\n\t\t\t}\n\t\t],\n\t\t'keyword': keywords,\n\t\t// https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/language-specification/lexical-structure#literals\n\t\t'number': /(?:\\b0(?:x[\\da-f_]*[\\da-f]|b[01_]*[01])|(?:\\B\\.\\d+(?:_+\\d+)*|\\b\\d+(?:_+\\d+)*(?:\\.\\d+(?:_+\\d+)*)?)(?:e[-+]?\\d+(?:_+\\d+)*)?)(?:[dflmu]|lu|ul)?\\b/i,\n\t\t'operator': />>=?|<<=?|[-=]>|([-+&|])\\1|~|\\?\\?=?|[-+*/%&|^!=<>]=?/,\n\t\t'punctuation': /\\?\\.?|::|[{}[\\];(),.:]/\n\t});\n\n\tPrism.languages.insertBefore('csharp', 'number', {\n\t\t'range': {\n\t\t\tpattern: /\\.\\./,\n\t\t\talias: 'operator'\n\t\t}\n\t});\n\n\tPrism.languages.insertBefore('csharp', 'punctuation', {\n\t\t'named-parameter': {\n\t\t\tpattern: re(/([(,]\\s*)<<0>>(?=\\s*:)/.source, [name]),\n\t\t\tlookbehind: true,\n\t\t\talias: 'punctuation'\n\t\t}\n\t});\n\n\tPrism.languages.insertBefore('csharp', 'class-name', {\n\t\t'namespace': {\n\t\t\t// namespace Foo.Bar {}\n\t\t\t// using Foo.Bar;\n\t\t\tpattern: re(/(\\b(?:namespace|using)\\s+)<<0>>(?:\\s*\\.\\s*<<0>>)*(?=\\s*[;{])/.source, [name]),\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'punctuation': /\\./\n\t\t\t}\n\t\t},\n\t\t'type-expression': {\n\t\t\t// default(Foo), typeof(Foo<Bar>), sizeof(int)\n\t\t\tpattern: re(/(\\b(?:default|sizeof|typeof)\\s*\\(\\s*(?!\\s))(?:[^()\\s]|\\s(?!\\s)|<<0>>)*(?=\\s*\\))/.source, [nestedRound]),\n\t\t\tlookbehind: true,\n\t\t\talias: 'class-name',\n\t\t\tinside: typeInside\n\t\t},\n\t\t'return-type': {\n\t\t\t// Foo<Bar> ForBar(); Foo IFoo.Bar() => 0\n\t\t\t// int this[int index] => 0; T IReadOnlyList<T>.this[int index] => this[index];\n\t\t\t// int Foo => 0; int Foo { get; set } = 0;\n\t\t\tpattern: re(/<<0>>(?=\\s+(?:<<1>>\\s*(?:=>|[({]|\\.\\s*this\\s*\\[)|this\\s*\\[))/.source, [typeExpression, identifier]),\n\t\t\tinside: typeInside,\n\t\t\talias: 'class-name'\n\t\t},\n\t\t'constructor-invocation': {\n\t\t\t// new List<Foo<Bar[]>> { }\n\t\t\tpattern: re(/(\\bnew\\s+)<<0>>(?=\\s*[[({])/.source, [typeExpression]),\n\t\t\tlookbehind: true,\n\t\t\tinside: typeInside,\n\t\t\talias: 'class-name'\n\t\t},\n\t\t/*'explicit-implementation': {\n\t\t\t// int IFoo<Foo>.Bar => 0; void IFoo<Foo<Foo>>.Foo<T>();\n\t\t\tpattern: replace(/\\b<<0>>(?=\\.<<1>>)/, className, methodOrPropertyDeclaration),\n\t\t\tinside: classNameInside,\n\t\t\talias: 'class-name'\n\t\t},*/\n\t\t'generic-method': {\n\t\t\t// foo<Bar>()\n\t\t\tpattern: re(/<<0>>\\s*<<1>>(?=\\s*\\()/.source, [name, generic]),\n\t\t\tinside: {\n\t\t\t\t'function': re(/^<<0>>/.source, [name]),\n\t\t\t\t'generic': {\n\t\t\t\t\tpattern: RegExp(generic),\n\t\t\t\t\talias: 'class-name',\n\t\t\t\t\tinside: typeInside\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t'type-list': {\n\t\t\t// The list of types inherited or of generic constraints\n\t\t\t// class Foo<F> : Bar, IList<FooBar>\n\t\t\t// where F : Bar, IList<int>\n\t\t\tpattern: re(\n\t\t\t\t/\\b((?:<<0>>\\s+<<1>>|record\\s+<<1>>\\s*<<5>>|where\\s+<<2>>)\\s*:\\s*)(?:<<3>>|<<4>>|<<1>>\\s*<<5>>|<<6>>)(?:\\s*,\\s*(?:<<3>>|<<4>>|<<6>>))*(?=\\s*(?:where|[{;]|=>|$))/.source,\n\t\t\t\t[typeDeclarationKeywords, genericName, name, typeExpression, keywords.source, nestedRound, /\\bnew\\s*\\(\\s*\\)/.source]\n\t\t\t),\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'record-arguments': {\n\t\t\t\t\tpattern: re(/(^(?!new\\s*\\()<<0>>\\s*)<<1>>/.source, [genericName, nestedRound]),\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tgreedy: true,\n\t\t\t\t\tinside: Prism.languages.csharp\n\t\t\t\t},\n\t\t\t\t'keyword': keywords,\n\t\t\t\t'class-name': {\n\t\t\t\t\tpattern: RegExp(typeExpression),\n\t\t\t\t\tgreedy: true,\n\t\t\t\t\tinside: typeInside\n\t\t\t\t},\n\t\t\t\t'punctuation': /[,()]/\n\t\t\t}\n\t\t},\n\t\t'preprocessor': {\n\t\t\tpattern: /(^[\\t ]*)#.*/m,\n\t\t\tlookbehind: true,\n\t\t\talias: 'property',\n\t\t\tinside: {\n\t\t\t\t// highlight preprocessor directives as keywords\n\t\t\t\t'directive': {\n\t\t\t\t\tpattern: /(#)\\b(?:define|elif|else|endif|endregion|error|if|line|nullable|pragma|region|undef|warning)\\b/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\talias: 'keyword'\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\t// attributes\n\tvar regularStringOrCharacter = regularString + '|' + character;\n\tvar regularStringCharacterOrComment = replace(/\\/(?![*/])|\\/\\/[^\\r\\n]*[\\r\\n]|\\/\\*(?:[^*]|\\*(?!\\/))*\\*\\/|<<0>>/.source, [regularStringOrCharacter]);\n\tvar roundExpression = nested(replace(/[^\"'/()]|<<0>>|\\(<<self>>*\\)/.source, [regularStringCharacterOrComment]), 2);\n\n\t// https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/attributes/#attribute-targets\n\tvar attrTarget = /\\b(?:assembly|event|field|method|module|param|property|return|type)\\b/.source;\n\tvar attr = replace(/<<0>>(?:\\s*\\(<<1>>*\\))?/.source, [identifier, roundExpression]);\n\n\tPrism.languages.insertBefore('csharp', 'class-name', {\n\t\t'attribute': {\n\t\t\t// Attributes\n\t\t\t// [Foo], [Foo(1), Bar(2, Prop = \"foo\")], [return: Foo(1), Bar(2)], [assembly: Foo(Bar)]\n\t\t\tpattern: re(/((?:^|[^\\s\\w>)?])\\s*\\[\\s*)(?:<<0>>\\s*:\\s*)?<<1>>(?:\\s*,\\s*<<1>>)*(?=\\s*\\])/.source, [attrTarget, attr]),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'target': {\n\t\t\t\t\tpattern: re(/^<<0>>(?=\\s*:)/.source, [attrTarget]),\n\t\t\t\t\talias: 'keyword'\n\t\t\t\t},\n\t\t\t\t'attribute-arguments': {\n\t\t\t\t\tpattern: re(/\\(<<0>>*\\)/.source, [roundExpression]),\n\t\t\t\t\tinside: Prism.languages.csharp\n\t\t\t\t},\n\t\t\t\t'class-name': {\n\t\t\t\t\tpattern: RegExp(identifier),\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'punctuation': /\\./\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t'punctuation': /[:,]/\n\t\t\t}\n\t\t}\n\t});\n\n\n\t// string interpolation\n\tvar formatString = /:[^}\\r\\n]+/.source;\n\t// multi line\n\tvar mInterpolationRound = nested(replace(/[^\"'/()]|<<0>>|\\(<<self>>*\\)/.source, [regularStringCharacterOrComment]), 2);\n\tvar mInterpolation = replace(/\\{(?!\\{)(?:(?![}:])<<0>>)*<<1>>?\\}/.source, [mInterpolationRound, formatString]);\n\t// single line\n\tvar sInterpolationRound = nested(replace(/[^\"'/()]|\\/(?!\\*)|\\/\\*(?:[^*]|\\*(?!\\/))*\\*\\/|<<0>>|\\(<<self>>*\\)/.source, [regularStringOrCharacter]), 2);\n\tvar sInterpolation = replace(/\\{(?!\\{)(?:(?![}:])<<0>>)*<<1>>?\\}/.source, [sInterpolationRound, formatString]);\n\n\tfunction createInterpolationInside(interpolation, interpolationRound) {\n\t\treturn {\n\t\t\t'interpolation': {\n\t\t\t\tpattern: re(/((?:^|[^{])(?:\\{\\{)*)<<0>>/.source, [interpolation]),\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'format-string': {\n\t\t\t\t\t\tpattern: re(/(^\\{(?:(?![}:])<<0>>)*)<<1>>(?=\\}$)/.source, [interpolationRound, formatString]),\n\t\t\t\t\t\tlookbehind: true,\n\t\t\t\t\t\tinside: {\n\t\t\t\t\t\t\t'punctuation': /^:/\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t'punctuation': /^\\{|\\}$/,\n\t\t\t\t\t'expression': {\n\t\t\t\t\t\tpattern: /[\\s\\S]+/,\n\t\t\t\t\t\talias: 'language-csharp',\n\t\t\t\t\t\tinside: Prism.languages.csharp\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t'string': /[\\s\\S]+/\n\t\t};\n\t}\n\n\tPrism.languages.insertBefore('csharp', 'string', {\n\t\t'interpolation-string': [\n\t\t\t{\n\t\t\t\tpattern: re(/(^|[^\\\\])(?:\\$@|@\\$)\"(?:\"\"|\\\\[\\s\\S]|\\{\\{|<<0>>|[^\\\\{\"])*\"/.source, [mInterpolation]),\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: createInterpolationInside(mInterpolation, mInterpolationRound),\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: re(/(^|[^@\\\\])\\$\"(?:\\\\.|\\{\\{|<<0>>|[^\\\\\"{])*\"/.source, [sInterpolation]),\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: createInterpolationInside(sInterpolation, sInterpolationRound),\n\t\t\t}\n\t\t],\n\t\t'char': {\n\t\t\tpattern: RegExp(character),\n\t\t\tgreedy: true\n\t\t}\n\t});\n\n\tPrism.languages.dotnet = Prism.languages.cs = Prism.languages.csharp;\n\n}(Prism));\n/components/prism-ejs.min.js\u0001!function(a){a.languages.ejs={delimiter:{pattern:/^<%[-_=]?|[-_]?%>$/,alias:\"punctuation\"},comment:/^#[\\s\\S]*/,\"language-javascript\":{pattern:/[\\s\\S]+/,inside:a.languages.javascript}},a.hooks.add(\"before-tokenize\",(function(e){a.languages[\"markup-templating\"].buildPlaceholders(e,\"ejs\",/<%(?!%)[\\s\\S]+?%>/g)})),a.hooks.add(\"after-tokenize\",(function(e){a.languages[\"markup-templating\"].tokenizePlaceholders(e,\"ejs\")})),a.languages.eta=a.languages.ejs}(Prism);/components/prism-ada.min.js\u0003Prism.languages.ada={comment:/--.*/,string:/\"(?:\"\"|[^\"\\r\\f\\n])*\"/,number:[{pattern:/\\b\\d(?:_?\\d)*#[\\dA-F](?:_?[\\dA-F])*(?:\\.[\\dA-F](?:_?[\\dA-F])*)?#(?:E[+-]?\\d(?:_?\\d)*)?/i},{pattern:/\\b\\d(?:_?\\d)*(?:\\.\\d(?:_?\\d)*)?(?:E[+-]?\\d(?:_?\\d)*)?\\b/i}],attribute:{pattern:/\\b'\\w+/,alias:\"attr-name\"},keyword:/\\b(?:abort|abs|abstract|accept|access|aliased|all|and|array|at|begin|body|case|constant|declare|delay|delta|digits|do|else|elsif|end|entry|exception|exit|for|function|generic|goto|if|in|interface|is|limited|loop|mod|new|not|null|of|or|others|out|overriding|package|pragma|private|procedure|protected|raise|range|record|rem|renames|requeue|return|reverse|select|separate|some|subtype|synchronized|tagged|task|terminate|then|type|until|use|when|while|with|xor)\\b/i,boolean:/\\b(?:false|true)\\b/i,operator:/<[=>]?|>=?|=>?|:=|\\/=?|\\*\\*?|[&+-]/,punctuation:/\\.\\.?|[,;():]/,char:/'.'/,variable:/\\b[a-z](?:\\w)*\\b/i};/components/prism-gettext.js\u0002Prism.languages.gettext = {\n\t'comment': [\n\t\t{\n\t\t\tpattern: /# .*/,\n\t\t\tgreedy: true,\n\t\t\talias: 'translator-comment'\n\t\t},\n\t\t{\n\t\t\tpattern: /#\\..*/,\n\t\t\tgreedy: true,\n\t\t\talias: 'extracted-comment'\n\t\t},\n\t\t{\n\t\t\tpattern: /#:.*/,\n\t\t\tgreedy: true,\n\t\t\talias: 'reference-comment'\n\t\t},\n\t\t{\n\t\t\tpattern: /#,.*/,\n\t\t\tgreedy: true,\n\t\t\talias: 'flag-comment'\n\t\t},\n\t\t{\n\t\t\tpattern: /#\\|.*/,\n\t\t\tgreedy: true,\n\t\t\talias: 'previously-untranslated-comment'\n\t\t},\n\t\t{\n\t\t\tpattern: /#.*/,\n\t\t\tgreedy: true\n\t\t},\n\t],\n\t'string': {\n\t\tpattern: /(^|[^\\\\])\"(?:[^\"\\\\]|\\\\.)*\"/,\n\t\tlookbehind: true,\n\t\tgreedy: true\n\t},\n\t'keyword': /^msg(?:ctxt|id|id_plural|str)\\b/m,\n\t'number': /\\b\\d+\\b/,\n\t'punctuation': /[\\[\\]]/\n};\n\nPrism.languages.po = Prism.languages.gettext;\n/components/prism-autoit.js\u0004/Prism.languages.autoit = {\n\t'comment': [\n\t\t/;.*/,\n\t\t{\n\t\t\t// The multi-line comments delimiters can actually be commented out with \";\"\n\t\t\tpattern: /(^[\\t ]*)#(?:comments-start|cs)[\\s\\S]*?^[ \\t]*#(?:ce|comments-end)/m,\n\t\t\tlookbehind: true\n\t\t}\n\t],\n\t'url': {\n\t\tpattern: /(^[\\t ]*#include\\s+)(?:<[^\\r\\n>]+>|\"[^\\r\\n\"]+\")/m,\n\t\tlookbehind: true\n\t},\n\t'string': {\n\t\tpattern: /([\"'])(?:\\1\\1|(?!\\1)[^\\r\\n])*\\1/,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'variable': /([%$@])\\w+\\1/\n\t\t}\n\t},\n\t'directive': {\n\t\tpattern: /(^[\\t ]*)#[\\w-]+/m,\n\t\tlookbehind: true,\n\t\talias: 'keyword'\n\t},\n\t'function': /\\b\\w+(?=\\()/,\n\t// Variables and macros\n\t'variable': /[$@]\\w+/,\n\t'keyword': /\\b(?:Case|Const|Continue(?:Case|Loop)|Default|Dim|Do|Else(?:If)?|End(?:Func|If|Select|Switch|With)|Enum|Exit(?:Loop)?|For|Func|Global|If|In|Local|Next|Null|ReDim|Select|Static|Step|Switch|Then|To|Until|Volatile|WEnd|While|With)\\b/i,\n\t'number': /\\b(?:0x[\\da-f]+|\\d+(?:\\.\\d+)?(?:e[+-]?\\d+)?)\\b/i,\n\t'boolean': /\\b(?:False|True)\\b/i,\n\t'operator': /<[=>]?|[-+*\\/=&>]=?|[?^]|\\b(?:And|Not|Or)\\b/i,\n\t'punctuation': /[\\[\\]().,:]/\n};\n/components/prism-smali.js\u0007// Test files for the parser itself:\n// https://github.com/JesusFreke/smali/tree/master/smali/src/test/resources/LexerTest\n\nPrism.languages.smali = {\n\t'comment': /#.*/,\n\t'string': {\n\t\tpattern: /\"(?:[^\\r\\n\\\\\"]|\\\\.)*\"|'(?:[^\\r\\n\\\\']|\\\\(?:.|u[\\da-fA-F]{4}))'/,\n\t\tgreedy: true\n\t},\n\n\t'class-name': {\n\t\tpattern: /(^|[^L])L(?:(?:\\w+|`[^`\\r\\n]*`)\\/)*(?:[\\w$]+|`[^`\\r\\n]*`)(?=\\s*;)/,\n\t\tlookbehind: true,\n\t\tinside: {\n\t\t\t'class-name': {\n\t\t\t\tpattern: /(^L|\\/)(?:[\\w$]+|`[^`\\r\\n]*`)$/,\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\t'namespace': {\n\t\t\t\tpattern: /^(L)(?:(?:\\w+|`[^`\\r\\n]*`)\\/)+/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': /\\//\n\t\t\t\t}\n\t\t\t},\n\t\t\t'builtin': /^L/\n\t\t}\n\t},\n\t'builtin': [\n\t\t{\n\t\t\t// Reference: https://github.com/JesusFreke/smali/wiki/TypesMethodsAndFields#types\n\t\t\tpattern: /([();\\[])[BCDFIJSVZ]+/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t{\n\t\t\t// e.g. .field mWifiOnUid:I\n\t\t\tpattern: /([\\w$>]:)[BCDFIJSVZ]/,\n\t\t\tlookbehind: true\n\t\t}\n\t],\n\t'keyword': [\n\t\t{\n\t\t\tpattern: /(\\.end\\s+)[\\w-]+/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^\\w.-])\\.(?!\\d)[\\w-]+/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^\\w.-])(?:abstract|annotation|bridge|constructor|enum|final|interface|private|protected|public|runtime|static|synthetic|system|transient)(?![\\w.-])/,\n\t\t\tlookbehind: true\n\t\t}\n\t],\n\t'function': {\n\t\tpattern: /(^|[^\\w.-])(?:\\w+|<[\\w$-]+>)(?=\\()/,\n\t\tlookbehind: true\n\t},\n\n\t'field': {\n\t\tpattern: /[\\w$]+(?=:)/,\n\t\talias: 'variable'\n\t},\n\t'register': {\n\t\tpattern: /(^|[^\\w.-])[vp]\\d(?![\\w.-])/,\n\t\tlookbehind: true,\n\t\talias: 'variable'\n\t},\n\n\t'boolean': {\n\t\tpattern: /(^|[^\\w.-])(?:false|true)(?![\\w.-])/,\n\t\tlookbehind: true\n\t},\n\t'number': {\n\t\tpattern: /(^|[^/\\w.-])-?(?:NAN|INFINITY|0x(?:[\\dA-F]+(?:\\.[\\dA-F]*)?|\\.[\\dA-F]+)(?:p[+-]?[\\dA-F]+)?|(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?)[dflst]?(?![\\w.-])/i,\n\t\tlookbehind: true\n\t},\n\n\t'label': {\n\t\tpattern: /(:)\\w+/,\n\t\tlookbehind: true,\n\t\talias: 'property'\n\t},\n\n\t'operator': /->|\\.\\.|[\\[=]/,\n\t'punctuation': /[{}(),;:]/\n};\n/components/prism-soy.min.js\u0006=!function(e){var a=/([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1/,t=/\\b\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?\\b|\\b0x[\\dA-F]+\\b/;e.languages.soy={comment:[/\\/\\*[\\s\\S]*?\\*\\//,{pattern:/(\\s)\\/\\/.*/,lookbehind:!0,greedy:!0}],\"command-arg\":{pattern:/(\\{+\\/?\\s*(?:alias|call|delcall|delpackage|deltemplate|namespace|template)\\s+)\\.?[\\w.]+/,lookbehind:!0,alias:\"string\",inside:{punctuation:/\\./}},parameter:{pattern:/(\\{+\\/?\\s*@?param\\??\\s+)\\.?[\\w.]+/,lookbehind:!0,alias:\"variable\"},keyword:[{pattern:/(\\{+\\/?[^\\S\\r\\n]*)(?:\\\\[nrt]|alias|call|case|css|default|delcall|delpackage|deltemplate|else(?:if)?|fallbackmsg|for(?:each)?|if(?:empty)?|lb|let|literal|msg|namespace|nil|@?param\\??|rb|sp|switch|template|xid)/,lookbehind:!0},/\\b(?:any|as|attributes|bool|css|float|html|in|int|js|list|map|null|number|string|uri)\\b/],delimiter:{pattern:/^\\{+\\/?|\\/?\\}+$/,alias:\"punctuation\"},property:/\\w+(?==)/,variable:{pattern:/\\$[^\\W\\d]\\w*(?:\\??(?:\\.\\w+|\\[[^\\]]+\\]))*/,inside:{string:{pattern:a,greedy:!0},number:t,punctuation:/[\\[\\].?]/}},string:{pattern:a,greedy:!0},function:[/\\w+(?=\\()/,{pattern:/(\\|[^\\S\\r\\n]*)\\w+/,lookbehind:!0}],boolean:/\\b(?:false|true)\\b/,number:t,operator:/\\?:?|<=?|>=?|==?|!=|[+*/%-]|\\b(?:and|not|or)\\b/,punctuation:/[{}()\\[\\]|.,:]/},e.hooks.add(\"before-tokenize\",(function(a){var t=!1;e.languages[\"markup-templating\"].buildPlaceholders(a,\"soy\",/\\{\\{.+?\\}\\}|\\{.+?\\}|\\s\\/\\/.*|\\/\\*[\\s\\S]*?\\*\\//g,(function(e){return\"{/literal}\"===e&&(t=!1),!t&&(\"{literal}\"===e&&(t=!0),!0)}))})),e.hooks.add(\"after-tokenize\",(function(a){e.languages[\"markup-templating\"].tokenizePlaceholders(a,\"soy\")}))}(Prism);!/components/prism-rescript.min.js\u0006!Prism.languages.rescript={comment:{pattern:/\\/\\/.*|\\/\\*[\\s\\S]*?(?:\\*\\/|$)/,greedy:!0},char:{pattern:/'(?:[^\\r\\n\\\\]|\\\\(?:.|\\w+))'/,greedy:!0},string:{pattern:/\"(?:\\\\(?:\\r\\n|[\\s\\S])|[^\\\\\\r\\n\"])*\"/,greedy:!0},\"class-name\":/\\b[A-Z]\\w*|@[a-z.]*|#[A-Za-z]\\w*|#\\d/,function:{pattern:/[a-zA-Z]\\w*(?=\\()|(\\.)[a-z]\\w*/,lookbehind:!0},number:/(?:\\b0x(?:[\\da-f]+(?:\\.[\\da-f]*)?|\\.[\\da-f]+)(?:p[+-]?\\d+)?|(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:e[+-]?\\d+)?)[ful]{0,4}/i,boolean:/\\b(?:false|true)\\b/,\"attr-value\":/[A-Za-z]\\w*(?==)/,constant:{pattern:/(\\btype\\s+)[a-z]\\w*/,lookbehind:!0},tag:{pattern:/(<)[a-z]\\w*|(?:<\\/)[a-z]\\w*/,lookbehind:!0,inside:{operator:/<|>|\\//}},keyword:/\\b(?:and|as|assert|begin|bool|class|constraint|do|done|downto|else|end|exception|external|float|for|fun|function|if|in|include|inherit|initializer|int|lazy|let|method|module|mutable|new|nonrec|object|of|open|or|private|rec|string|switch|then|to|try|type|when|while|with)\\b/,operator:/\\.{3}|:[:=]?|\\|>|->|=(?:==?|>)?|<=?|>=?|[|^?'#!~`]|[+\\-*\\/]\\.?|\\b(?:asr|land|lor|lsl|lsr|lxor|mod)\\b/,punctuation:/[(){}[\\],;.]/},Prism.languages.insertBefore(\"rescript\",\"string\",{\"template-string\":{pattern:/`(?:\\\\[\\s\\S]|\\$\\{(?:[^{}]|\\{(?:[^{}]|\\{[^}]*\\})*\\})+\\}|(?!\\$\\{)[^\\\\`])*`/,greedy:!0,inside:{\"template-punctuation\":{pattern:/^`|`$/,alias:\"string\"},interpolation:{pattern:/((?:^|[^\\\\])(?:\\\\{2})*)\\$\\{(?:[^{}]|\\{(?:[^{}]|\\{[^}]*\\})*\\})+\\}/,lookbehind:!0,inside:{\"interpolation-punctuation\":{pattern:/^\\$\\{|\\}$/,alias:\"tag\"},rest:Prism.languages.rescript}},string:/[\\s\\S]+/}}}),Prism.languages.res=Prism.languages.rescript;/components/prism-tcl.min.js\u0005Prism.languages.tcl={comment:{pattern:/(^|[^\\\\])#.*/,lookbehind:!0},string:{pattern:/\"(?:[^\"\\\\\\r\\n]|\\\\(?:\\r\\n|[\\s\\S]))*\"/,greedy:!0},variable:[{pattern:/(\\$)(?:::)?(?:[a-zA-Z0-9]+::)*\\w+/,lookbehind:!0},{pattern:/(\\$)\\{[^}]+\\}/,lookbehind:!0},{pattern:/(^[\\t ]*set[ \\t]+)(?:::)?(?:[a-zA-Z0-9]+::)*\\w+/m,lookbehind:!0}],function:{pattern:/(^[\\t ]*proc[ \\t]+)\\S+/m,lookbehind:!0},builtin:[{pattern:/(^[\\t ]*)(?:break|class|continue|error|eval|exit|for|foreach|if|proc|return|switch|while)\\b/m,lookbehind:!0},/\\b(?:else|elseif)\\b/],scope:{pattern:/(^[\\t ]*)(?:global|upvar|variable)\\b/m,lookbehind:!0,alias:\"constant\"},keyword:{pattern:/(^[\\t ]*|\\[)(?:Safe_Base|Tcl|after|append|apply|array|auto_(?:execok|import|load|mkindex|qualify|reset)|automkindex_old|bgerror|binary|catch|cd|chan|clock|close|concat|dde|dict|encoding|eof|exec|expr|fblocked|fconfigure|fcopy|file(?:event|name)?|flush|gets|glob|history|http|incr|info|interp|join|lappend|lassign|lindex|linsert|list|llength|load|lrange|lrepeat|lreplace|lreverse|lsearch|lset|lsort|math(?:func|op)|memory|msgcat|namespace|open|package|parray|pid|pkg_mkIndex|platform|puts|pwd|re_syntax|read|refchan|regexp|registry|regsub|rename|scan|seek|set|socket|source|split|string|subst|tcl(?:_endOfWord|_findLibrary|startOf(?:Next|Previous)Word|test|vars|wordBreak(?:After|Before))|tell|time|tm|trace|unknown|unload|unset|update|uplevel|vwait)\\b/m,lookbehind:!0},operator:/!=?|\\*\\*?|==|&&?|\\|\\|?|<[=<]?|>[=>]?|[-+~\\/%?^]|\\b(?:eq|in|ne|ni)\\b/,punctuation:/[{}()\\[\\]]/};\"/components/prism-supercollider.js\u0003Prism.languages.supercollider = {\n\t'comment': {\n\t\tpattern: /\\/\\/.*|\\/\\*(?:[^*/]|\\*(?!\\/)|\\/(?!\\*)|\\/\\*(?:[^*]|\\*(?!\\/))*\\*\\/)*\\*\\//,\n\t\tgreedy: true\n\t},\n\t'string': {\n\t\tpattern: /(^|[^\\\\])\"(?:[^\"\\\\]|\\\\[\\s\\S])*\"/,\n\t\tlookbehind: true,\n\t\tgreedy: true\n\t},\n\t'char': {\n\t\tpattern: /\\$(?:[^\\\\\\r\\n]|\\\\.)/,\n\t\tgreedy: true\n\t},\n\t'symbol': {\n\t\tpattern: /(^|[^\\\\])'(?:[^'\\\\]|\\\\[\\s\\S])*'|\\\\\\w+/,\n\t\tlookbehind: true,\n\t\tgreedy: true\n\t},\n\n\t'keyword': /\\b(?:_|arg|classvar|const|nil|var|while)\\b/,\n\t'boolean': /\\b(?:false|true)\\b/,\n\n\t'label': {\n\t\tpattern: /\\b[a-z_]\\w*(?=\\s*:)/,\n\t\talias: 'property'\n\t},\n\n\t'number': /\\b(?:inf|pi|0x[0-9a-fA-F]+|\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?(?:pi)?|\\d+r[0-9a-zA-Z]+(?:\\.[0-9a-zA-Z]+)?|\\d+[sb]{1,4}\\d*)\\b/,\n\t'class-name': /\\b[A-Z]\\w*\\b/,\n\n\t'operator': /\\.{2,3}|#(?![[{])|&&|[!=]==?|\\+>>|\\+{1,3}|-[->]|=>|>>|\\?\\?|@\\|?@|\\|(?:@|[!=]=)?\\||!\\?|<[!=>]|\\*{1,2}|<{2,3}\\*?|[-!%&/<>?@|=`]/,\n\t'punctuation': /[{}()[\\].:,;]|#[[{]/\n};\n\nPrism.languages.sclang = Prism.languages.supercollider;\n/components/prism-dax.min.js\rjPrism.languages.dax={comment:{pattern:/(^|[^\\\\])(?:\\/\\*[\\s\\S]*?\\*\\/|(?:--|\\/\\/).*)/,lookbehind:!0},\"data-field\":{pattern:/'(?:[^']|'')*'(?!')(?:\\[[ \\w\\xA0-\\uFFFF]+\\])?|\\w+\\[[ \\w\\xA0-\\uFFFF]+\\]/,alias:\"symbol\"},measure:{pattern:/\\[[ \\w\\xA0-\\uFFFF]+\\]/,alias:\"constant\"},string:{pattern:/\"(?:[^\"]|\"\")*\"(?!\")/,greedy:!0},function:/\\b(?:ABS|ACOS|ACOSH|ACOT|ACOTH|ADDCOLUMNS|ADDMISSINGITEMS|ALL|ALLCROSSFILTERED|ALLEXCEPT|ALLNOBLANKROW|ALLSELECTED|AND|APPROXIMATEDISTINCTCOUNT|ASIN|ASINH|ATAN|ATANH|AVERAGE|AVERAGEA|AVERAGEX|BETA\\.DIST|BETA\\.INV|BLANK|CALCULATE|CALCULATETABLE|CALENDAR|CALENDARAUTO|CEILING|CHISQ\\.DIST|CHISQ\\.DIST\\.RT|CHISQ\\.INV|CHISQ\\.INV\\.RT|CLOSINGBALANCEMONTH|CLOSINGBALANCEQUARTER|CLOSINGBALANCEYEAR|COALESCE|COMBIN|COMBINA|COMBINEVALUES|CONCATENATE|CONCATENATEX|CONFIDENCE\\.NORM|CONFIDENCE\\.T|CONTAINS|CONTAINSROW|CONTAINSSTRING|CONTAINSSTRINGEXACT|CONVERT|COS|COSH|COT|COTH|COUNT|COUNTA|COUNTAX|COUNTBLANK|COUNTROWS|COUNTX|CROSSFILTER|CROSSJOIN|CURRENCY|CURRENTGROUP|CUSTOMDATA|DATATABLE|DATE|DATEADD|DATEDIFF|DATESBETWEEN|DATESINPERIOD|DATESMTD|DATESQTD|DATESYTD|DATEVALUE|DAY|DEGREES|DETAILROWS|DISTINCT|DISTINCTCOUNT|DISTINCTCOUNTNOBLANK|DIVIDE|EARLIER|EARLIEST|EDATE|ENDOFMONTH|ENDOFQUARTER|ENDOFYEAR|EOMONTH|ERROR|EVEN|EXACT|EXCEPT|EXP|EXPON\\.DIST|FACT|FALSE|FILTER|FILTERS|FIND|FIRSTDATE|FIRSTNONBLANK|FIRSTNONBLANKVALUE|FIXED|FLOOR|FORMAT|GCD|GENERATE|GENERATEALL|GENERATESERIES|GEOMEAN|GEOMEANX|GROUPBY|HASONEFILTER|HASONEVALUE|HOUR|IF|IF\\.EAGER|IFERROR|IGNORE|INT|INTERSECT|ISBLANK|ISCROSSFILTERED|ISEMPTY|ISERROR|ISEVEN|ISFILTERED|ISINSCOPE|ISLOGICAL|ISNONTEXT|ISNUMBER|ISO\\.CEILING|ISODD|ISONORAFTER|ISSELECTEDMEASURE|ISSUBTOTAL|ISTEXT|KEEPFILTERS|KEYWORDMATCH|LASTDATE|LASTNONBLANK|LASTNONBLANKVALUE|LCM|LEFT|LEN|LN|LOG|LOG10|LOOKUPVALUE|LOWER|MAX|MAXA|MAXX|MEDIAN|MEDIANX|MID|MIN|MINA|MINUTE|MINX|MOD|MONTH|MROUND|NATURALINNERJOIN|NATURALLEFTOUTERJOIN|NEXTDAY|NEXTMONTH|NEXTQUARTER|NEXTYEAR|NONVISUAL|NORM\\.DIST|NORM\\.INV|NORM\\.S\\.DIST|NORM\\.S\\.INV|NOT|NOW|ODD|OPENINGBALANCEMONTH|OPENINGBALANCEQUARTER|OPENINGBALANCEYEAR|OR|PARALLELPERIOD|PATH|PATHCONTAINS|PATHITEM|PATHITEMREVERSE|PATHLENGTH|PERCENTILE\\.EXC|PERCENTILE\\.INC|PERCENTILEX\\.EXC|PERCENTILEX\\.INC|PERMUT|PI|POISSON\\.DIST|POWER|PREVIOUSDAY|PREVIOUSMONTH|PREVIOUSQUARTER|PREVIOUSYEAR|PRODUCT|PRODUCTX|QUARTER|QUOTIENT|RADIANS|RAND|RANDBETWEEN|RANK\\.EQ|RANKX|RELATED|RELATEDTABLE|REMOVEFILTERS|REPLACE|REPT|RIGHT|ROLLUP|ROLLUPADDISSUBTOTAL|ROLLUPGROUP|ROLLUPISSUBTOTAL|ROUND|ROUNDDOWN|ROUNDUP|ROW|SAMEPERIODLASTYEAR|SAMPLE|SEARCH|SECOND|SELECTCOLUMNS|SELECTEDMEASURE|SELECTEDMEASUREFORMATSTRING|SELECTEDMEASURENAME|SELECTEDVALUE|SIGN|SIN|SINH|SQRT|SQRTPI|STARTOFMONTH|STARTOFQUARTER|STARTOFYEAR|STDEV\\.P|STDEV\\.S|STDEVX\\.P|STDEVX\\.S|SUBSTITUTE|SUBSTITUTEWITHINDEX|SUM|SUMMARIZE|SUMMARIZECOLUMNS|SUMX|SWITCH|T\\.DIST|T\\.DIST\\.2T|T\\.DIST\\.RT|T\\.INV|T\\.INV\\.2T|TAN|TANH|TIME|TIMEVALUE|TODAY|TOPN|TOPNPERLEVEL|TOPNSKIP|TOTALMTD|TOTALQTD|TOTALYTD|TREATAS|TRIM|TRUE|TRUNC|UNICHAR|UNICODE|UNION|UPPER|USERELATIONSHIP|USERNAME|USEROBJECTID|USERPRINCIPALNAME|UTCNOW|UTCTODAY|VALUE|VALUES|VAR\\.P|VAR\\.S|VARX\\.P|VARX\\.S|WEEKDAY|WEEKNUM|XIRR|XNPV|YEAR|YEARFRAC)(?=\\s*\\()/i,keyword:/\\b(?:DEFINE|EVALUATE|MEASURE|ORDER\\s+BY|RETURN|VAR|START\\s+AT|ASC|DESC)\\b/i,boolean:{pattern:/\\b(?:FALSE|NULL|TRUE)\\b/i,alias:\"constant\"},number:/\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+\\b/,operator:/:=|[-+*\\/=^]|&&?|\\|\\||<(?:=>?|<|>)?|>[>=]?|\\b(?:IN|NOT)\\b/i,punctuation:/[;\\[\\](){}`,.]/};/plugins/wpd/prism-wpd.js\u0013(function () {\n\n\tif (typeof Prism === 'undefined') {\n\t\treturn;\n\t}\n\n\tif (Prism.languages.css) {\n\t\t// check whether the selector is an advanced pattern before extending it\n\t\tif (Prism.languages.css.selector.pattern) {\n\t\t\tPrism.languages.css.selector.inside['pseudo-class'] = /:[\\w-]+/;\n\t\t\tPrism.languages.css.selector.inside['pseudo-element'] = /::[\\w-]+/;\n\t\t} else {\n\t\t\tPrism.languages.css.selector = {\n\t\t\t\tpattern: Prism.languages.css.selector,\n\t\t\t\tinside: {\n\t\t\t\t\t'pseudo-class': /:[\\w-]+/,\n\t\t\t\t\t'pseudo-element': /::[\\w-]+/\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t}\n\n\tif (Prism.languages.markup) {\n\t\tPrism.languages.markup.tag.inside.tag.inside['tag-id'] = /[\\w-]+/;\n\n\t\tvar Tags = {\n\t\t\tHTML: {\n\t\t\t\t'a': 1, 'abbr': 1, 'acronym': 1, 'b': 1, 'basefont': 1, 'bdo': 1, 'big': 1, 'blink': 1, 'cite': 1, 'code': 1, 'dfn': 1, 'em': 1, 'kbd': 1, 'i': 1,\n\t\t\t\t'rp': 1, 'rt': 1, 'ruby': 1, 's': 1, 'samp': 1, 'small': 1, 'spacer': 1, 'strike': 1, 'strong': 1, 'sub': 1, 'sup': 1, 'time': 1, 'tt': 1, 'u': 1,\n\t\t\t\t'var': 1, 'wbr': 1, 'noframes': 1, 'summary': 1, 'command': 1, 'dt': 1, 'dd': 1, 'figure': 1, 'figcaption': 1, 'center': 1, 'section': 1, 'nav': 1,\n\t\t\t\t'article': 1, 'aside': 1, 'hgroup': 1, 'header': 1, 'footer': 1, 'address': 1, 'noscript': 1, 'isIndex': 1, 'main': 1, 'mark': 1, 'marquee': 1,\n\t\t\t\t'meter': 1, 'menu': 1\n\t\t\t},\n\t\t\tSVG: {\n\t\t\t\t'animateColor': 1, 'animateMotion': 1, 'animateTransform': 1, 'glyph': 1, 'feBlend': 1, 'feColorMatrix': 1, 'feComponentTransfer': 1,\n\t\t\t\t'feFuncR': 1, 'feFuncG': 1, 'feFuncB': 1, 'feFuncA': 1, 'feComposite': 1, 'feConvolveMatrix': 1, 'feDiffuseLighting': 1, 'feDisplacementMap': 1,\n\t\t\t\t'feFlood': 1, 'feGaussianBlur': 1, 'feImage': 1, 'feMerge': 1, 'feMergeNode': 1, 'feMorphology': 1, 'feOffset': 1, 'feSpecularLighting': 1,\n\t\t\t\t'feTile': 1, 'feTurbulence': 1, 'feDistantLight': 1, 'fePointLight': 1, 'feSpotLight': 1, 'linearGradient': 1, 'radialGradient': 1, 'altGlyph': 1,\n\t\t\t\t'textPath': 1, 'tref': 1, 'altglyph': 1, 'textpath': 1, 'altglyphdef': 1, 'altglyphitem': 1, 'clipPath': 1, 'color-profile': 1, 'cursor': 1,\n\t\t\t\t'font-face': 1, 'font-face-format': 1, 'font-face-name': 1, 'font-face-src': 1, 'font-face-uri': 1, 'foreignObject': 1, 'glyphRef': 1,\n\t\t\t\t'hkern': 1, 'vkern': 1\n\t\t\t},\n\t\t\tMathML: {}\n\t\t};\n\t}\n\n\tvar language;\n\n\tPrism.hooks.add('wrap', function (env) {\n\t\tif ((env.type == 'tag-id'\n\t\t\t|| (env.type == 'property' && env.content.indexOf('-') != 0)\n\t\t\t|| (env.type == 'rule' && env.content.indexOf('@-') != 0)\n\t\t\t|| (env.type == 'pseudo-class' && env.content.indexOf(':-') != 0)\n\t\t\t|| (env.type == 'pseudo-element' && env.content.indexOf('::-') != 0)\n\t\t\t|| (env.type == 'attr-name' && env.content.indexOf('data-') != 0)\n\t\t) && env.content.indexOf('<') === -1\n\t\t) {\n\t\t\tif (env.language == 'css'\n\t\t\t\t|| env.language == 'scss'\n\t\t\t\t|| env.language == 'markup'\n\t\t\t) {\n\t\t\t\tvar href = 'https://webplatform.github.io/docs/';\n\t\t\t\tvar content = env.content;\n\n\t\t\t\tif (env.language == 'css' || env.language == 'scss') {\n\t\t\t\t\thref += 'css/';\n\n\t\t\t\t\tif (env.type == 'property') {\n\t\t\t\t\t\thref += 'properties/';\n\t\t\t\t\t} else if (env.type == 'rule') {\n\t\t\t\t\t\thref += 'atrules/';\n\t\t\t\t\t\tcontent = content.substring(1);\n\t\t\t\t\t} else if (env.type == 'pseudo-class') {\n\t\t\t\t\t\thref += 'selectors/pseudo-classes/';\n\t\t\t\t\t\tcontent = content.substring(1);\n\t\t\t\t\t} else if (env.type == 'pseudo-element') {\n\t\t\t\t\t\thref += 'selectors/pseudo-elements/';\n\t\t\t\t\t\tcontent = content.substring(2);\n\t\t\t\t\t}\n\t\t\t\t} else if (env.language == 'markup') {\n\t\t\t\t\tif (env.type == 'tag-id') {\n\t\t\t\t\t\t// Check language\n\t\t\t\t\t\tlanguage = getLanguage(env.content) || language;\n\n\t\t\t\t\t\tif (language) {\n\t\t\t\t\t\t\thref += language + '/elements/';\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn; // Abort\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (env.type == 'attr-name') {\n\t\t\t\t\t\tif (language) {\n\t\t\t\t\t\t\thref += language + '/attributes/';\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn; // Abort\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\thref += content;\n\t\t\t\tenv.tag = 'a';\n\t\t\t\tenv.attributes.href = href;\n\t\t\t\tenv.attributes.target = '_blank';\n\t\t\t}\n\t\t}\n\t});\n\n\tfunction getLanguage(tag) {\n\t\tvar tagL = tag.toLowerCase();\n\n\t\tif (Tags.HTML[tagL]) {\n\t\t\treturn 'html';\n\t\t} else if (Tags.SVG[tag]) {\n\t\t\treturn 'svg';\n\t\t} else if (Tags.MathML[tag]) {\n\t\t\treturn 'mathml';\n\t\t}\n\n\t\t// Not in dictionary, perform check\n\t\tif (Tags.HTML[tagL] !== 0 && typeof document !== 'undefined') {\n\t\t\tvar htmlInterface = (document.createElement(tag).toString().match(/\\[object HTML(.+)Element\\]/) || [])[1];\n\n\t\t\tif (htmlInterface && htmlInterface != 'Unknown') {\n\t\t\t\tTags.HTML[tagL] = 1;\n\t\t\t\treturn 'html';\n\t\t\t}\n\t\t}\n\n\t\tTags.HTML[tagL] = 0;\n\n\t\tif (Tags.SVG[tag] !== 0 && typeof document !== 'undefined') {\n\t\t\tvar svgInterface = (document.createElementNS('http://www.w3.org/2000/svg', tag).toString().match(/\\[object SVG(.+)Element\\]/) || [])[1];\n\n\t\t\tif (svgInterface && svgInterface != 'Unknown') {\n\t\t\t\tTags.SVG[tag] = 1;\n\t\t\t\treturn 'svg';\n\t\t\t}\n\t\t}\n\n\t\tTags.SVG[tag] = 0;\n\n\t\t// Lame way to detect MathML, but browsers don’t expose interface names there :(\n\t\tif (Tags.MathML[tag] !== 0) {\n\t\t\tif (tag.indexOf('m') === 0) {\n\t\t\t\tTags.MathML[tag] = 1;\n\t\t\t\treturn 'mathml';\n\t\t\t}\n\t\t}\n\n\t\tTags.MathML[tag] = 0;\n\n\t\treturn null;\n\t}\n\n}());\n/components/prism-apl.js\u0003~Prism.languages.apl = {\n\t'comment': /(?:⍝|#[! ]).*$/m,\n\t'string': {\n\t\tpattern: /'(?:[^'\\r\\n]|'')*'/,\n\t\tgreedy: true\n\t},\n\t'number': /¯?(?:\\d*\\.?\\b\\d+(?:e[+¯]?\\d+)?|¯|∞)(?:j¯?(?:(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:e[+¯]?\\d+)?|¯|∞))?/i,\n\t'statement': /:[A-Z][a-z][A-Za-z]*\\b/,\n\t'system-function': {\n\t\tpattern: /⎕[A-Z]+/i,\n\t\talias: 'function'\n\t},\n\t'constant': /[⍬⌾#⎕⍞]/,\n\t'function': /[-+×÷⌈⌊∣|⍳⍸?*⍟○!⌹<≤=>≥≠≡≢∊⍷∪∩~∨∧⍱⍲⍴,⍪⌽⊖⍉↑↓⊂⊃⊆⊇⌷⍋⍒⊤⊥⍕⍎⊣⊢⍁⍂≈⍯↗¤→]/,\n\t'monadic-operator': {\n\t\tpattern: /[\\\\\\/⌿⍀¨⍨⌶&∥]/,\n\t\talias: 'operator'\n\t},\n\t'dyadic-operator': {\n\t\tpattern: /[.⍣⍠⍤∘⌸@⌺⍥]/,\n\t\talias: 'operator'\n\t},\n\t'assignment': {\n\t\tpattern: /←/,\n\t\talias: 'keyword'\n\t},\n\t'punctuation': /[\\[;\\]()◇⋄]/,\n\t'dfn': {\n\t\tpattern: /[{}⍺⍵⍶⍹∇⍫:]/,\n\t\talias: 'builtin'\n\t}\n};\n/components/prism-rego.js\u0002// https://www.openpolicyagent.org/docs/latest/policy-reference/\n\nPrism.languages.rego = {\n\t'comment': /#.*/,\n\t'property': {\n\t\tpattern: /(^|[^\\\\.])(?:\"(?:\\\\.|[^\\\\\"\\r\\n])*\"|`[^`]*`|\\b[a-z_]\\w*\\b)(?=\\s*:(?!=))/i,\n\t\tlookbehind: true,\n\t\tgreedy: true\n\t},\n\t'string': {\n\t\tpattern: /(^|[^\\\\])\"(?:\\\\.|[^\\\\\"\\r\\n])*\"|`[^`]*`/,\n\t\tlookbehind: true,\n\t\tgreedy: true\n\t},\n\n\t'keyword': /\\b(?:as|default|else|import|not|null|package|set(?=\\s*\\()|some|with)\\b/,\n\t'boolean': /\\b(?:false|true)\\b/,\n\n\t'function': {\n\t\tpattern: /\\b[a-z_]\\w*\\b(?:\\s*\\.\\s*\\b[a-z_]\\w*\\b)*(?=\\s*\\()/i,\n\t\tinside: {\n\t\t\t'namespace': /\\b\\w+\\b(?=\\s*\\.)/,\n\t\t\t'punctuation': /\\./\n\t\t}\n\t},\n\n\t'number': /-?\\b\\d+(?:\\.\\d+)?(?:e[+-]?\\d+)?\\b/i,\n\t'operator': /[-+*/%|&]|[<>:=]=?|!=|\\b_\\b/,\n\t'punctuation': /[,;.\\[\\]{}()]/\n};\n/components/prism-reason.min.js\u00033Prism.languages.reason=Prism.languages.extend(\"clike\",{string:{pattern:/\"(?:\\\\(?:\\r\\n|[\\s\\S])|[^\\\\\\r\\n\"])*\"/,greedy:!0},\"class-name\":/\\b[A-Z]\\w*/,keyword:/\\b(?:and|as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|method|module|mutable|new|nonrec|object|of|open|or|private|rec|sig|struct|switch|then|to|try|type|val|virtual|when|while|with)\\b/,operator:/\\.{3}|:[:=]|\\|>|->|=(?:==?|>)?|<=?|>=?|[|^?'#!~`]|[+\\-*\\/]\\.?|\\b(?:asr|land|lor|lsl|lsr|lxor|mod)\\b/}),Prism.languages.insertBefore(\"reason\",\"class-name\",{char:{pattern:/'(?:\\\\x[\\da-f]{2}|\\\\o[0-3][0-7][0-7]|\\\\\\d{3}|\\\\.|[^'\\\\\\r\\n])'/,greedy:!0},constructor:/\\b[A-Z]\\w*\\b(?!\\s*\\.)/,label:{pattern:/\\b[a-z]\\w*(?=::)/,alias:\"symbol\"}}),delete Prism.languages.reason.function;/components/prism-jsx.js\u0012\f(function (Prism) {\n\n\tvar javascript = Prism.util.clone(Prism.languages.javascript);\n\n\tvar space = /(?:\\s|\\/\\/.*(?!.)|\\/\\*(?:[^*]|\\*(?!\\/))\\*\\/)/.source;\n\tvar braces = /(?:\\{(?:\\{(?:\\{[^{}]*\\}|[^{}])*\\}|[^{}])*\\})/.source;\n\tvar spread = /(?:\\{<S>*\\.{3}(?:[^{}]|<BRACES>)*\\})/.source;\n\n\t/**\n\t * @param {string} source\n\t * @param {string} [flags]\n\t */\n\tfunction re(source, flags) {\n\t\tsource = source\n\t\t\t.replace(/<S>/g, function () { return space; })\n\t\t\t.replace(/<BRACES>/g, function () { return braces; })\n\t\t\t.replace(/<SPREAD>/g, function () { return spread; });\n\t\treturn RegExp(source, flags);\n\t}\n\n\tspread = re(spread).source;\n\n\n\tPrism.languages.jsx = Prism.languages.extend('markup', javascript);\n\tPrism.languages.jsx.tag.pattern = re(\n\t\t/<\\/?(?:[\\w.:-]+(?:<S>+(?:[\\w.:$-]+(?:=(?:\"(?:\\\\[\\s\\S]|[^\\\\\"])*\"|'(?:\\\\[\\s\\S]|[^\\\\'])*'|[^\\s{'\"/>=]+|<BRACES>))?|<SPREAD>))*<S>*\\/?)?>/.source\n\t);\n\n\tPrism.languages.jsx.tag.inside['tag'].pattern = /^<\\/?[^\\s>\\/]*/;\n\tPrism.languages.jsx.tag.inside['attr-value'].pattern = /=(?!\\{)(?:\"(?:\\\\[\\s\\S]|[^\\\\\"])*\"|'(?:\\\\[\\s\\S]|[^\\\\'])*'|[^\\s'\">]+)/;\n\tPrism.languages.jsx.tag.inside['tag'].inside['class-name'] = /^[A-Z]\\w*(?:\\.[A-Z]\\w*)*$/;\n\tPrism.languages.jsx.tag.inside['comment'] = javascript['comment'];\n\n\tPrism.languages.insertBefore('inside', 'attr-name', {\n\t\t'spread': {\n\t\t\tpattern: re(/<SPREAD>/.source),\n\t\t\tinside: Prism.languages.jsx\n\t\t}\n\t}, Prism.languages.jsx.tag);\n\n\tPrism.languages.insertBefore('inside', 'special-attr', {\n\t\t'script': {\n\t\t\t// Allow for two levels of nesting\n\t\t\tpattern: re(/=<BRACES>/.source),\n\t\t\talias: 'language-javascript',\n\t\t\tinside: {\n\t\t\t\t'script-punctuation': {\n\t\t\t\t\tpattern: /^=(?=\\{)/,\n\t\t\t\t\talias: 'punctuation'\n\t\t\t\t},\n\t\t\t\trest: Prism.languages.jsx\n\t\t\t},\n\t\t}\n\t}, Prism.languages.jsx.tag);\n\n\t// The following will handle plain text inside tags\n\tvar stringifyToken = function (token) {\n\t\tif (!token) {\n\t\t\treturn '';\n\t\t}\n\t\tif (typeof token === 'string') {\n\t\t\treturn token;\n\t\t}\n\t\tif (typeof token.content === 'string') {\n\t\t\treturn token.content;\n\t\t}\n\t\treturn token.content.map(stringifyToken).join('');\n\t};\n\n\tvar walkTokens = function (tokens) {\n\t\tvar openedTags = [];\n\t\tfor (var i = 0; i < tokens.length; i++) {\n\t\t\tvar token = tokens[i];\n\t\t\tvar notTagNorBrace = false;\n\n\t\t\tif (typeof token !== 'string') {\n\t\t\t\tif (token.type === 'tag' && token.content[0] && token.content[0].type === 'tag') {\n\t\t\t\t\t// We found a tag, now find its kind\n\n\t\t\t\t\tif (token.content[0].content[0].content === '</') {\n\t\t\t\t\t\t// Closing tag\n\t\t\t\t\t\tif (openedTags.length > 0 && openedTags[openedTags.length - 1].tagName === stringifyToken(token.content[0].content[1])) {\n\t\t\t\t\t\t\t// Pop matching opening tag\n\t\t\t\t\t\t\topenedTags.pop();\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (token.content[token.content.length - 1].content === '/>') {\n\t\t\t\t\t\t\t// Autoclosed tag, ignore\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Opening tag\n\t\t\t\t\t\t\topenedTags.push({\n\t\t\t\t\t\t\t\ttagName: stringifyToken(token.content[0].content[1]),\n\t\t\t\t\t\t\t\topenedBraces: 0\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else if (openedTags.length > 0 && token.type === 'punctuation' && token.content === '{') {\n\n\t\t\t\t\t// Here we might have entered a JSX context inside a tag\n\t\t\t\t\topenedTags[openedTags.length - 1].openedBraces++;\n\n\t\t\t\t} else if (openedTags.length > 0 && openedTags[openedTags.length - 1].openedBraces > 0 && token.type === 'punctuation' && token.content === '}') {\n\n\t\t\t\t\t// Here we might have left a JSX context inside a tag\n\t\t\t\t\topenedTags[openedTags.length - 1].openedBraces--;\n\n\t\t\t\t} else {\n\t\t\t\t\tnotTagNorBrace = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (notTagNorBrace || typeof token === 'string') {\n\t\t\t\tif (openedTags.length > 0 && openedTags[openedTags.length - 1].openedBraces === 0) {\n\t\t\t\t\t// Here we are inside a tag, and not inside a JSX context.\n\t\t\t\t\t// That's plain text: drop any tokens matched.\n\t\t\t\t\tvar plainText = stringifyToken(token);\n\n\t\t\t\t\t// And merge text with adjacent text\n\t\t\t\t\tif (i < tokens.length - 1 && (typeof tokens[i + 1] === 'string' || tokens[i + 1].type === 'plain-text')) {\n\t\t\t\t\t\tplainText += stringifyToken(tokens[i + 1]);\n\t\t\t\t\t\ttokens.splice(i + 1, 1);\n\t\t\t\t\t}\n\t\t\t\t\tif (i > 0 && (typeof tokens[i - 1] === 'string' || tokens[i - 1].type === 'plain-text')) {\n\t\t\t\t\t\tplainText = stringifyToken(tokens[i - 1]) + plainText;\n\t\t\t\t\t\ttokens.splice(i - 1, 1);\n\t\t\t\t\t\ti--;\n\t\t\t\t\t}\n\n\t\t\t\t\ttokens[i] = new Prism.Token('plain-text', plainText, null, plainText);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (token.content && typeof token.content !== 'string') {\n\t\t\t\twalkTokens(token.content);\n\t\t\t}\n\t\t}\n\t};\n\n\tPrism.hooks.add('after-tokenize', function (env) {\n\t\tif (env.language !== 'jsx' && env.language !== 'tsx') {\n\t\t\treturn;\n\t\t}\n\t\twalkTokens(env.tokens);\n\t});\n\n}(Prism));\n/components/prism-t4-cs.jsePrism.languages.t4 = Prism.languages['t4-cs'] = Prism.languages['t4-templating'].createT4('csharp');\n!/components/prism-velocity.min.js\u0004!function(e){e.languages.velocity=e.languages.extend(\"markup\",{});var n={variable:{pattern:/(^|[^\\\\](?:\\\\\\\\)*)\\$!?(?:[a-z][\\w-]*(?:\\([^)]*\\))?(?:\\.[a-z][\\w-]*(?:\\([^)]*\\))?|\\[[^\\]]+\\])*|\\{[^}]+\\})/i,lookbehind:!0,inside:{}},string:{pattern:/\"[^\"]*\"|'[^']*'/,greedy:!0},number:/\\b\\d+\\b/,boolean:/\\b(?:false|true)\\b/,operator:/[=!<>]=?|[+*/%-]|&&|\\|\\||\\.\\.|\\b(?:eq|g[et]|l[et]|n(?:e|ot))\\b/,punctuation:/[(){}[\\]:,.]/};n.variable.inside={string:n.string,function:{pattern:/([^\\w-])[a-z][\\w-]*(?=\\()/,lookbehind:!0},number:n.number,boolean:n.boolean,punctuation:n.punctuation},e.languages.insertBefore(\"velocity\",\"comment\",{unparsed:{pattern:/(^|[^\\\\])#\\[\\[[\\s\\S]*?\\]\\]#/,lookbehind:!0,greedy:!0,inside:{punctuation:/^#\\[\\[|\\]\\]#$/}},\"velocity-comment\":[{pattern:/(^|[^\\\\])#\\*[\\s\\S]*?\\*#/,lookbehind:!0,greedy:!0,alias:\"comment\"},{pattern:/(^|[^\\\\])##.*/,lookbehind:!0,greedy:!0,alias:\"comment\"}],directive:{pattern:/(^|[^\\\\](?:\\\\\\\\)*)#@?(?:[a-z][\\w-]*|\\{[a-z][\\w-]*\\})(?:\\s*\\((?:[^()]|\\([^()]*\\))*\\))?/i,lookbehind:!0,inside:{keyword:{pattern:/^#@?(?:[a-z][\\w-]*|\\{[a-z][\\w-]*\\})|\\bin\\b/,inside:{punctuation:/[{}]/}},rest:n}},variable:n.variable}),e.languages.velocity.tag.inside[\"attr-value\"].inside.rest=e.languages.velocity}(Prism);/components/prism-aspnet.min.js\u0004HPrism.languages.aspnet=Prism.languages.extend(\"markup\",{\"page-directive\":{pattern:/<%\\s*@.*%>/,alias:\"tag\",inside:{\"page-directive\":{pattern:/<%\\s*@\\s*(?:Assembly|Control|Implements|Import|Master(?:Type)?|OutputCache|Page|PreviousPageType|Reference|Register)?|%>/i,alias:\"tag\"},rest:Prism.languages.markup.tag.inside}},directive:{pattern:/<%.*%>/,alias:\"tag\",inside:{directive:{pattern:/<%\\s*?[$=%#:]{0,2}|%>/,alias:\"tag\"},rest:Prism.languages.csharp}}}),Prism.languages.aspnet.tag.pattern=/<(?!%)\\/?[^\\s>\\/]+(?:\\s+[^\\s>\\/=]+(?:=(?:(\"|')(?:\\\\[\\s\\S]|(?!\\1)[^\\\\])*\\1|[^\\s'\">=]+))?)*\\s*\\/?>/,Prism.languages.insertBefore(\"inside\",\"punctuation\",{directive:Prism.languages.aspnet.directive},Prism.languages.aspnet.tag.inside[\"attr-value\"]),Prism.languages.insertBefore(\"aspnet\",\"comment\",{\"asp-comment\":{pattern:/<%--[\\s\\S]*?--%>/,alias:[\"asp\",\"comment\"]}}),Prism.languages.insertBefore(\"aspnet\",Prism.languages.javascript?\"script\":\"tag\",{\"asp-script\":{pattern:/(<script(?=.*runat=['\"]?server\\b)[^>]*>)[\\s\\S]*?(?=<\\/script>)/i,lookbehind:!0,alias:[\"asp\",\"script\"],inside:Prism.languages.csharp||{}}});/components/prism-lisp.min.js\n\u0013!function(e){function n(e){return RegExp(\"(\\\\()(?:\"+e+\")(?=[\\\\s\\\\)])\")}function a(e){return RegExp(\"([\\\\s([])(?:\"+e+\")(?=[\\\\s)])\")}var t=\"(?!\\\\d)[-+*/~!@$%^=<>{}\\\\w]+\",r=\"(\\\\()\",i=\"(?:[^()]|\\\\((?:[^()]|\\\\((?:[^()]|\\\\((?:[^()]|\\\\((?:[^()]|\\\\([^()]*\\\\))*\\\\))*\\\\))*\\\\))*\\\\))*\",s={heading:{pattern:/;;;.*/,alias:[\"comment\",\"title\"]},comment:/;.*/,string:{pattern:/\"(?:[^\"\\\\]|\\\\.)*\"/,greedy:!0,inside:{argument:/[-A-Z]+(?=[.,\\s])/,symbol:RegExp(\"`\"+t+\"'\")}},\"quoted-symbol\":{pattern:RegExp(\"#?'\"+t),alias:[\"variable\",\"symbol\"]},\"lisp-property\":{pattern:RegExp(\":\"+t),alias:\"property\"},splice:{pattern:RegExp(\",@?\"+t),alias:[\"symbol\",\"variable\"]},keyword:[{pattern:RegExp(\"(\\\\()(?:and|(?:cl-)?letf|cl-loop|cond|cons|error|if|(?:lexical-)?let\\\\*?|message|not|null|or|provide|require|setq|unless|use-package|when|while)(?=\\\\s)\"),lookbehind:!0},{pattern:RegExp(\"(\\\\()(?:append|by|collect|concat|do|finally|for|in|return)(?=\\\\s)\"),lookbehind:!0}],declare:{pattern:n(\"declare\"),lookbehind:!0,alias:\"keyword\"},interactive:{pattern:n(\"interactive\"),lookbehind:!0,alias:\"keyword\"},boolean:{pattern:a(\"nil|t\"),lookbehind:!0},number:{pattern:a(\"[-+]?\\\\d+(?:\\\\.\\\\d*)?\"),lookbehind:!0},defvar:{pattern:RegExp(\"(\\\\()def(?:const|custom|group|var)\\\\s+\"+t),lookbehind:!0,inside:{keyword:/^def[a-z]+/,variable:RegExp(t)}},defun:{pattern:RegExp(\"(\\\\()(?:cl-)?(?:defmacro|defun\\\\*?)\\\\s+\"+t+\"\\\\s+\\\\(\"+i+\"\\\\)\"),lookbehind:!0,greedy:!0,inside:{keyword:/^(?:cl-)?def\\S+/,arguments:null,function:{pattern:RegExp(\"(^\\\\s)\"+t),lookbehind:!0},punctuation:/[()]/}},lambda:{pattern:RegExp(\"(\\\\()lambda\\\\s+\\\\(\\\\s*(?:&?\"+t+\"(?:\\\\s+&?\"+t+\")*\\\\s*)?\\\\)\"),lookbehind:!0,greedy:!0,inside:{keyword:/^lambda/,arguments:null,punctuation:/[()]/}},car:{pattern:RegExp(r+t),lookbehind:!0},punctuation:[/(?:['`,]?\\(|[)\\[\\]])/,{pattern:/(\\s)\\.(?=\\s)/,lookbehind:!0}]},l={\"lisp-marker\":RegExp(\"&(?!\\\\d)[-+*/~!@$%^=<>{}\\\\w]+\"),varform:{pattern:RegExp(\"\\\\(\"+t+\"\\\\s+(?=\\\\S)\"+i+\"\\\\)\"),inside:s},argument:{pattern:RegExp(\"(^|[\\\\s(])\"+t),lookbehind:!0,alias:\"variable\"},rest:s},o=\"\\\\S+(?:\\\\s+\\\\S+)*\",p={pattern:RegExp(r+i+\"(?=\\\\))\"),lookbehind:!0,inside:{\"rest-vars\":{pattern:RegExp(\"&(?:body|rest)\\\\s+\"+o),inside:l},\"other-marker-vars\":{pattern:RegExp(\"&(?:aux|optional)\\\\s+\"+o),inside:l},keys:{pattern:RegExp(\"&key\\\\s+\"+o+\"(?:\\\\s+&allow-other-keys)?\"),inside:l},argument:{pattern:RegExp(t),alias:\"variable\"},punctuation:/[()]/}};s.lambda.inside.arguments=p,s.defun.inside.arguments=e.util.clone(p),s.defun.inside.arguments.inside.sublist=p,e.languages.lisp=s,e.languages.elisp=s,e.languages.emacs=s,e.languages[\"emacs-lisp\"]=s}(Prism);/components/prism-tap.js\u0002\r// https://en.wikipedia.org/wiki/Test_Anything_Protocol\n\nPrism.languages.tap = {\n\t'fail': /not ok[^#{\\n\\r]*/,\n\t'pass': /ok[^#{\\n\\r]*/,\n\t'pragma': /pragma [+-][a-z]+/,\n\t'bailout': /bail out!.*/i,\n\t'version': /TAP version \\d+/i,\n\t'plan': /\\b\\d+\\.\\.\\d+(?: +#.*)?/,\n\t'subtest': {\n\t\tpattern: /# Subtest(?:: .*)?/,\n\t\tgreedy: true\n\t},\n\t'punctuation': /[{}]/,\n\t'directive': /#.*/,\n\t'yamlish': {\n\t\tpattern: /(^[ \\t]*)---[\\s\\S]*?[\\r\\n][ \\t]*\\.\\.\\.$/m,\n\t\tlookbehind: true,\n\t\tinside: Prism.languages.yaml,\n\t\talias: 'language-yaml'\n\t}\n};\n1/plugins/show-language/prism-show-language.min.js\u0016|!function(){if(\"undefined\"!=typeof Prism&&\"undefined\"!=typeof document)if(Prism.plugins.toolbar){var e={none:\"Plain text\",plain:\"Plain text\",plaintext:\"Plain text\",text:\"Plain text\",txt:\"Plain text\",html:\"HTML\",xml:\"XML\",svg:\"SVG\",mathml:\"MathML\",ssml:\"SSML\",rss:\"RSS\",css:\"CSS\",clike:\"C-like\",js:\"JavaScript\",abap:\"ABAP\",abnf:\"ABNF\",al:\"AL\",antlr4:\"ANTLR4\",g4:\"ANTLR4\",apacheconf:\"Apache Configuration\",apl:\"APL\",aql:\"AQL\",ino:\"Arduino\",arff:\"ARFF\",armasm:\"ARM Assembly\",\"arm-asm\":\"ARM Assembly\",art:\"Arturo\",asciidoc:\"AsciiDoc\",adoc:\"AsciiDoc\",aspnet:\"ASP.NET (C#)\",asm6502:\"6502 Assembly\",asmatmel:\"Atmel AVR Assembly\",autohotkey:\"AutoHotkey\",autoit:\"AutoIt\",avisynth:\"AviSynth\",avs:\"AviSynth\",\"avro-idl\":\"Avro IDL\",avdl:\"Avro IDL\",awk:\"AWK\",gawk:\"GAWK\",sh:\"Shell\",basic:\"BASIC\",bbcode:\"BBcode\",bbj:\"BBj\",bnf:\"BNF\",rbnf:\"RBNF\",bqn:\"BQN\",bsl:\"BSL (1C:Enterprise)\",oscript:\"OneScript\",csharp:\"C#\",cs:\"C#\",dotnet:\"C#\",cpp:\"C++\",cfscript:\"CFScript\",cfc:\"CFScript\",cil:\"CIL\",cilkc:\"Cilk/C\",\"cilk-c\":\"Cilk/C\",cilkcpp:\"Cilk/C++\",\"cilk-cpp\":\"Cilk/C++\",cilk:\"Cilk/C++\",cmake:\"CMake\",cobol:\"COBOL\",coffee:\"CoffeeScript\",conc:\"Concurnas\",csp:\"Content-Security-Policy\",\"css-extras\":\"CSS Extras\",csv:\"CSV\",cue:\"CUE\",dataweave:\"DataWeave\",dax:\"DAX\",django:\"Django/Jinja2\",jinja2:\"Django/Jinja2\",\"dns-zone-file\":\"DNS zone file\",\"dns-zone\":\"DNS zone file\",dockerfile:\"Docker\",dot:\"DOT (Graphviz)\",gv:\"DOT (Graphviz)\",ebnf:\"EBNF\",editorconfig:\"EditorConfig\",ejs:\"EJS\",etlua:\"Embedded Lua templating\",erb:\"ERB\",\"excel-formula\":\"Excel Formula\",xlsx:\"Excel Formula\",xls:\"Excel Formula\",fsharp:\"F#\",\"firestore-security-rules\":\"Firestore security rules\",ftl:\"FreeMarker Template Language\",gml:\"GameMaker Language\",gamemakerlanguage:\"GameMaker Language\",gap:\"GAP (CAS)\",gcode:\"G-code\",gdscript:\"GDScript\",gedcom:\"GEDCOM\",gettext:\"gettext\",po:\"gettext\",glsl:\"GLSL\",gn:\"GN\",gni:\"GN\",\"linker-script\":\"GNU Linker Script\",ld:\"GNU Linker Script\",\"go-module\":\"Go module\",\"go-mod\":\"Go module\",graphql:\"GraphQL\",hbs:\"Handlebars\",hs:\"Haskell\",hcl:\"HCL\",hlsl:\"HLSL\",http:\"HTTP\",hpkp:\"HTTP Public-Key-Pins\",hsts:\"HTTP Strict-Transport-Security\",ichigojam:\"IchigoJam\",\"icu-message-format\":\"ICU Message Format\",idr:\"Idris\",ignore:\".ignore\",gitignore:\".gitignore\",hgignore:\".hgignore\",npmignore:\".npmignore\",inform7:\"Inform 7\",javadoc:\"JavaDoc\",javadoclike:\"JavaDoc-like\",javastacktrace:\"Java stack trace\",jq:\"JQ\",jsdoc:\"JSDoc\",\"js-extras\":\"JS Extras\",json:\"JSON\",webmanifest:\"Web App Manifest\",json5:\"JSON5\",jsonp:\"JSONP\",jsstacktrace:\"JS stack trace\",\"js-templates\":\"JS Templates\",keepalived:\"Keepalived Configure\",kts:\"Kotlin Script\",kt:\"Kotlin\",kumir:\"KuMir (КуМир)\",kum:\"KuMir (КуМир)\",latex:\"LaTeX\",tex:\"TeX\",context:\"ConTeXt\",lilypond:\"LilyPond\",ly:\"LilyPond\",emacs:\"Lisp\",elisp:\"Lisp\",\"emacs-lisp\":\"Lisp\",llvm:\"LLVM IR\",log:\"Log file\",lolcode:\"LOLCODE\",magma:\"Magma (CAS)\",md:\"Markdown\",\"markup-templating\":\"Markup templating\",matlab:\"MATLAB\",maxscript:\"MAXScript\",mel:\"MEL\",metafont:\"METAFONT\",mongodb:\"MongoDB\",moon:\"MoonScript\",n1ql:\"N1QL\",n4js:\"N4JS\",n4jsd:\"N4JS\",\"nand2tetris-hdl\":\"Nand To Tetris HDL\",naniscript:\"Naninovel Script\",nani:\"Naninovel Script\",nasm:\"NASM\",neon:\"NEON\",nginx:\"nginx\",nsis:\"NSIS\",objectivec:\"Objective-C\",objc:\"Objective-C\",ocaml:\"OCaml\",opencl:\"OpenCL\",openqasm:\"OpenQasm\",qasm:\"OpenQasm\",parigp:\"PARI/GP\",objectpascal:\"Object Pascal\",psl:\"PATROL Scripting Language\",pcaxis:\"PC-Axis\",px:\"PC-Axis\",peoplecode:\"PeopleCode\",pcode:\"PeopleCode\",php:\"PHP\",phpdoc:\"PHPDoc\",\"php-extras\":\"PHP Extras\",\"plant-uml\":\"PlantUML\",plantuml:\"PlantUML\",plsql:\"PL/SQL\",powerquery:\"PowerQuery\",pq:\"PowerQuery\",mscript:\"PowerQuery\",powershell:\"PowerShell\",promql:\"PromQL\",properties:\".properties\",protobuf:\"Protocol Buffers\",purebasic:\"PureBasic\",pbfasm:\"PureBasic\",purs:\"PureScript\",py:\"Python\",qsharp:\"Q#\",qs:\"Q#\",q:\"Q (kdb+ database)\",qml:\"QML\",rkt:\"Racket\",cshtml:\"Razor C#\",razor:\"Razor C#\",jsx:\"React JSX\",tsx:\"React TSX\",renpy:\"Ren'py\",rpy:\"Ren'py\",res:\"ReScript\",rest:\"reST (reStructuredText)\",robotframework:\"Robot Framework\",robot:\"Robot Framework\",rb:\"Ruby\",sas:\"SAS\",sass:\"Sass (Sass)\",scss:\"Sass (SCSS)\",\"shell-session\":\"Shell session\",\"sh-session\":\"Shell session\",shellsession:\"Shell session\",sml:\"SML\",smlnj:\"SML/NJ\",solidity:\"Solidity (Ethereum)\",sol:\"Solidity (Ethereum)\",\"solution-file\":\"Solution file\",sln:\"Solution file\",soy:\"Soy (Closure Template)\",sparql:\"SPARQL\",rq:\"SPARQL\",\"splunk-spl\":\"Splunk SPL\",sqf:\"SQF: Status Quo Function (Arma 3)\",sql:\"SQL\",stata:\"Stata Ado\",iecst:\"Structured Text (IEC 61131-3)\",supercollider:\"SuperCollider\",sclang:\"SuperCollider\",systemd:\"Systemd configuration file\",\"t4-templating\":\"T4 templating\",\"t4-cs\":\"T4 Text Templates (C#)\",t4:\"T4 Text Templates (C#)\",\"t4-vb\":\"T4 Text Templates (VB)\",tap:\"TAP\",tt2:\"Template Toolkit 2\",toml:\"TOML\",trickle:\"trickle\",troy:\"troy\",trig:\"TriG\",ts:\"TypeScript\",tsconfig:\"TSConfig\",uscript:\"UnrealScript\",uc:\"UnrealScript\",uorazor:\"UO Razor Script\",uri:\"URI\",url:\"URL\",vbnet:\"VB.Net\",vhdl:\"VHDL\",vim:\"vim\",\"visual-basic\":\"Visual Basic\",vba:\"VBA\",vb:\"Visual Basic\",wasm:\"WebAssembly\",\"web-idl\":\"Web IDL\",webidl:\"Web IDL\",wgsl:\"WGSL\",wiki:\"Wiki markup\",wolfram:\"Wolfram language\",nb:\"Mathematica Notebook\",wl:\"Wolfram language\",xeoracube:\"XeoraCube\",\"xml-doc\":\"XML doc (.net)\",xojo:\"Xojo (REALbasic)\",xquery:\"XQuery\",yaml:\"YAML\",yml:\"YAML\",yang:\"YANG\"};Prism.plugins.toolbar.registerButton(\"show-language\",(function(a){var t=a.element.parentNode;if(t&&/pre/i.test(t.nodeName)){var o,i=t.getAttribute(\"data-language\")||e[a.language]||((o=a.language)?(o.substring(0,1).toUpperCase()+o.substring(1)).replace(/s(?=cript)/,\"S\"):o);if(i){var s=document.createElement(\"span\");return s.textContent=i,s}}}))}else console.warn(\"Show Languages plugin loaded before Toolbar plugin.\")}(); /components/prism-clojure.min.js\u000bPrism.languages.clojure={comment:{pattern:/;.*/,greedy:!0},string:{pattern:/\"(?:[^\"\\\\]|\\\\.)*\"/,greedy:!0},char:/\\\\\\w+/,symbol:{pattern:/(^|[\\s()\\[\\]{},])::?[\\w*+!?'<>=/.-]+/,lookbehind:!0},keyword:{pattern:/(\\()(?:-|->|->>|\\.|\\.\\.|\\*|\\/|\\+|<|<=|=|==|>|>=|accessor|agent|agent-errors|aget|alength|all-ns|alter|and|append-child|apply|array-map|aset|aset-boolean|aset-byte|aset-char|aset-double|aset-float|aset-int|aset-long|aset-short|assert|assoc|await|await-for|bean|binding|bit-and|bit-not|bit-or|bit-shift-left|bit-shift-right|bit-xor|boolean|branch\\?|butlast|byte|cast|char|children|class|clear-agent-errors|comment|commute|comp|comparator|complement|concat|cond|conj|cons|constantly|construct-proxy|contains\\?|count|create-ns|create-struct|cycle|dec|declare|def|def-|definline|definterface|defmacro|defmethod|defmulti|defn|defn-|defonce|defproject|defprotocol|defrecord|defstruct|deftype|deref|difference|disj|dissoc|distinct|do|doall|doc|dorun|doseq|dosync|dotimes|doto|double|down|drop|drop-while|edit|end\\?|ensure|eval|every\\?|false\\?|ffirst|file-seq|filter|find|find-doc|find-ns|find-var|first|float|flush|fn|fnseq|for|frest|gensym|get|get-proxy-class|hash-map|hash-set|identical\\?|identity|if|if-let|if-not|import|in-ns|inc|index|insert-child|insert-left|insert-right|inspect-table|inspect-tree|instance\\?|int|interleave|intersection|into|into-array|iterate|join|key|keys|keyword|keyword\\?|last|lazy-cat|lazy-cons|left|lefts|let|line-seq|list|list\\*|load|load-file|locking|long|loop|macroexpand|macroexpand-1|make-array|make-node|map|map-invert|map\\?|mapcat|max|max-key|memfn|merge|merge-with|meta|min|min-key|monitor-enter|name|namespace|neg\\?|new|newline|next|nil\\?|node|not|not-any\\?|not-every\\?|not=|ns|ns-imports|ns-interns|ns-map|ns-name|ns-publics|ns-refers|ns-resolve|ns-unmap|nth|nthrest|or|parse|partial|path|peek|pop|pos\\?|pr|pr-str|print|print-str|println|println-str|prn|prn-str|project|proxy|proxy-mappings|quot|quote|rand|rand-int|range|re-find|re-groups|re-matcher|re-matches|re-pattern|re-seq|read|read-line|recur|reduce|ref|ref-set|refer|rem|remove|remove-method|remove-ns|rename|rename-keys|repeat|replace|replicate|resolve|rest|resultset-seq|reverse|rfirst|right|rights|root|rrest|rseq|second|select|select-keys|send|send-off|seq|seq-zip|seq\\?|set|set!|short|slurp|some|sort|sort-by|sorted-map|sorted-map-by|sorted-set|special-symbol\\?|split-at|split-with|str|string\\?|struct|struct-map|subs|subvec|symbol|symbol\\?|sync|take|take-nth|take-while|test|throw|time|to-array|to-array-2d|tree-seq|true\\?|try|union|up|update-proxy|val|vals|var|var-get|var-set|var\\?|vector|vector-zip|vector\\?|when|when-first|when-let|when-not|with-local-vars|with-meta|with-open|with-out-str|xml-seq|xml-zip|zero\\?|zipmap|zipper)(?=[\\s)]|$)/,lookbehind:!0},boolean:/\\b(?:false|nil|true)\\b/,number:{pattern:/(^|[^\\w$@])(?:\\d+(?:[/.]\\d+)?(?:e[+-]?\\d+)?|0x[a-f0-9]+|[1-9]\\d?r[a-z0-9]+)[lmn]?(?![\\w$@])/i,lookbehind:!0},function:{pattern:/((?:^|[^'])\\()[\\w*+!?'<>=/.-]+(?=[\\s)]|$)/,lookbehind:!0},operator:/[#@^`~]/,punctuation:/[{}\\[\\](),]/};/components/prism-jsonp.jsPrism.languages.jsonp = Prism.languages.extend('json', {\n\t'punctuation': /[{}[\\]();,.]/\n});\n\nPrism.languages.insertBefore('jsonp', 'punctuation', {\n\t'function': /(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*\\()/\n});\n/components/prism-jexl.js\u0002TPrism.languages.jexl = {\n\t'string': /([\"'])(?:\\\\[\\s\\S]|(?!\\1)[^\\\\])*\\1/,\n\t'transform': {\n\t\tpattern: /(\\|\\s*)[a-zA-Zа-яА-Я_\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u00FF$][\\wа-яА-Я\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u00FF$]*/,\n\t\talias: 'function',\n\t\tlookbehind: true\n\t},\n\t'function': /[a-zA-Zа-яА-Я_\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u00FF$][\\wа-яА-Я\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u00FF$]*\\s*(?=\\()/,\n\t'number': /\\b\\d+(?:\\.\\d+)?\\b|\\B\\.\\d+\\b/,\n\t'operator': /[<>!]=?|-|\\+|&&|==|\\|\\|?|\\/\\/?|[?:*^%]/,\n\t'boolean': /\\b(?:false|true)\\b/,\n\t'keyword': /\\bin\\b/,\n\t'punctuation': /[{}[\\](),.]/,\n};\n /components/prism-xml-doc.min.js\u00010!function(a){function e(e,n){a.languages[e]&&a.languages.insertBefore(e,\"comment\",{\"doc-comment\":n})}var n=a.languages.markup.tag,t={pattern:/\\/\\/\\/.*/,greedy:!0,alias:\"comment\",inside:{tag:n}},g={pattern:/'''.*/,greedy:!0,alias:\"comment\",inside:{tag:n}};e(\"csharp\",t),e(\"fsharp\",t),e(\"vbnet\",g)}(Prism);/components/prism-al.min.js\n:Prism.languages.al={comment:/\\/\\/.*|\\/\\*[\\s\\S]*?\\*\\//,string:{pattern:/'(?:''|[^'\\r\\n])*'(?!')|\"(?:\"\"|[^\"\\r\\n])*\"(?!\")/,greedy:!0},function:{pattern:/(\\b(?:event|procedure|trigger)\\s+|(?:^|[^.])\\.\\s*)[a-z_]\\w*(?=\\s*\\()/i,lookbehind:!0},keyword:[/\\b(?:array|asserterror|begin|break|case|do|downto|else|end|event|exit|for|foreach|function|if|implements|in|indataset|interface|internal|local|of|procedure|program|protected|repeat|runonclient|securityfiltering|suppressdispose|temporary|then|to|trigger|until|var|while|with|withevents)\\b/i,/\\b(?:action|actions|addafter|addbefore|addfirst|addlast|area|assembly|chartpart|codeunit|column|controladdin|cuegroup|customizes|dataitem|dataset|dotnet|elements|enum|enumextension|extends|field|fieldattribute|fieldelement|fieldgroup|fieldgroups|fields|filter|fixed|grid|group|key|keys|label|labels|layout|modify|moveafter|movebefore|movefirst|movelast|page|pagecustomization|pageextension|part|profile|query|repeater|report|requestpage|schema|separator|systempart|table|tableelement|tableextension|textattribute|textelement|type|usercontrol|value|xmlport)\\b/i],number:/\\b(?:0x[\\da-f]+|(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?)(?:F|LL?|U(?:LL?)?)?\\b/i,boolean:/\\b(?:false|true)\\b/i,variable:/\\b(?:Curr(?:FieldNo|Page|Report)|x?Rec|RequestOptionsPage)\\b/,\"class-name\":/\\b(?:automation|biginteger|bigtext|blob|boolean|byte|char|clienttype|code|completiontriggererrorlevel|connectiontype|database|dataclassification|datascope|date|dateformula|datetime|decimal|defaultlayout|dialog|dictionary|dotnetassembly|dotnettypedeclaration|duration|errorinfo|errortype|executioncontext|executionmode|fieldclass|fieldref|fieldtype|file|filterpagebuilder|guid|httpclient|httpcontent|httpheaders|httprequestmessage|httpresponsemessage|instream|integer|joker|jsonarray|jsonobject|jsontoken|jsonvalue|keyref|list|moduledependencyinfo|moduleinfo|none|notification|notificationscope|objecttype|option|outstream|pageresult|record|recordid|recordref|reportformat|securityfilter|sessionsettings|tableconnectiontype|tablefilter|testaction|testfield|testfilterfield|testpage|testpermissions|testrequestpage|text|textbuilder|textconst|textencoding|time|transactionmodel|transactiontype|variant|verbosity|version|view|views|webserviceactioncontext|webserviceactionresultcode|xmlattribute|xmlattributecollection|xmlcdata|xmlcomment|xmldeclaration|xmldocument|xmldocumenttype|xmlelement|xmlnamespacemanager|xmlnametable|xmlnode|xmlnodelist|xmlprocessinginstruction|xmlreadoptions|xmltext|xmlwriteoptions)\\b/i,operator:/\\.\\.|:[=:]|[-+*/]=?|<>|[<>]=?|=|\\b(?:and|div|mod|not|or|xor)\\b/i,punctuation:/[()\\[\\]{}:.;,]/};/components/prism-tt2.min.js\u0004!function(e){e.languages.tt2=e.languages.extend(\"clike\",{comment:/#.*|\\[%#[\\s\\S]*?%\\]/,keyword:/\\b(?:BLOCK|CALL|CASE|CATCH|CLEAR|DEBUG|DEFAULT|ELSE|ELSIF|END|FILTER|FINAL|FOREACH|GET|IF|IN|INCLUDE|INSERT|LAST|MACRO|META|NEXT|PERL|PROCESS|RAWPERL|RETURN|SET|STOP|SWITCH|TAGS|THROW|TRY|UNLESS|USE|WHILE|WRAPPER)\\b/,punctuation:/[[\\]{},()]/}),e.languages.insertBefore(\"tt2\",\"number\",{operator:/=[>=]?|!=?|<=?|>=?|&&|\\|\\|?|\\b(?:and|not|or)\\b/,variable:{pattern:/\\b[a-z]\\w*(?:\\s*\\.\\s*(?:\\d+|\\$?[a-z]\\w*))*\\b/i}}),e.languages.insertBefore(\"tt2\",\"keyword\",{delimiter:{pattern:/^(?:\\[%|%%)-?|-?%\\]$/,alias:\"punctuation\"}}),e.languages.insertBefore(\"tt2\",\"string\",{\"single-quoted-string\":{pattern:/'[^\\\\']*(?:\\\\[\\s\\S][^\\\\']*)*'/,greedy:!0,alias:\"string\"},\"double-quoted-string\":{pattern:/\"[^\\\\\"]*(?:\\\\[\\s\\S][^\\\\\"]*)*\"/,greedy:!0,alias:\"string\",inside:{variable:{pattern:/\\$(?:[a-z]\\w*(?:\\.(?:\\d+|\\$?[a-z]\\w*))*)/i}}}}),delete e.languages.tt2.string,e.hooks.add(\"before-tokenize\",(function(t){e.languages[\"markup-templating\"].buildPlaceholders(t,\"tt2\",/\\[%[\\s\\S]+?%\\]/g)})),e.hooks.add(\"after-tokenize\",(function(t){e.languages[\"markup-templating\"].tokenizePlaceholders(t,\"tt2\")}))}(Prism);/components/prism-swift.js\u0011Prism.languages.swift = {\n\t'comment': {\n\t\t// Nested comments are supported up to 2 levels\n\t\tpattern: /(^|[^\\\\:])(?:\\/\\/.*|\\/\\*(?:[^/*]|\\/(?!\\*)|\\*(?!\\/)|\\/\\*(?:[^*]|\\*(?!\\/))*\\*\\/)*\\*\\/)/,\n\t\tlookbehind: true,\n\t\tgreedy: true\n\t},\n\t'string-literal': [\n\t\t// https://docs.swift.org/swift-book/LanguageGuide/StringsAndCharacters.html\n\t\t{\n\t\t\tpattern: RegExp(\n\t\t\t\t/(^|[^\"#])/.source\n\t\t\t\t+ '(?:'\n\t\t\t\t// single-line string\n\t\t\t\t+ /\"(?:\\\\(?:\\((?:[^()]|\\([^()]*\\))*\\)|\\r\\n|[^(])|[^\\\\\\r\\n\"])*\"/.source\n\t\t\t\t+ '|'\n\t\t\t\t// multi-line string\n\t\t\t\t+ /\"\"\"(?:\\\\(?:\\((?:[^()]|\\([^()]*\\))*\\)|[^(])|[^\\\\\"]|\"(?!\"\"))*\"\"\"/.source\n\t\t\t\t+ ')'\n\t\t\t\t+ /(?![\"#])/.source\n\t\t\t),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'interpolation': {\n\t\t\t\t\tpattern: /(\\\\\\()(?:[^()]|\\([^()]*\\))*(?=\\))/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tinside: null // see below\n\t\t\t\t},\n\t\t\t\t'interpolation-punctuation': {\n\t\t\t\t\tpattern: /^\\)|\\\\\\($/,\n\t\t\t\t\talias: 'punctuation'\n\t\t\t\t},\n\t\t\t\t'punctuation': /\\\\(?=[\\r\\n])/,\n\t\t\t\t'string': /[\\s\\S]+/\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tpattern: RegExp(\n\t\t\t\t/(^|[^\"#])(#+)/.source\n\t\t\t\t+ '(?:'\n\t\t\t\t// single-line string\n\t\t\t\t+ /\"(?:\\\\(?:#+\\((?:[^()]|\\([^()]*\\))*\\)|\\r\\n|[^#])|[^\\\\\\r\\n])*?\"/.source\n\t\t\t\t+ '|'\n\t\t\t\t// multi-line string\n\t\t\t\t+ /\"\"\"(?:\\\\(?:#+\\((?:[^()]|\\([^()]*\\))*\\)|[^#])|[^\\\\])*?\"\"\"/.source\n\t\t\t\t+ ')'\n\t\t\t\t+ '\\\\2'\n\t\t\t),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'interpolation': {\n\t\t\t\t\tpattern: /(\\\\#+\\()(?:[^()]|\\([^()]*\\))*(?=\\))/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tinside: null // see below\n\t\t\t\t},\n\t\t\t\t'interpolation-punctuation': {\n\t\t\t\t\tpattern: /^\\)|\\\\#+\\($/,\n\t\t\t\t\talias: 'punctuation'\n\t\t\t\t},\n\t\t\t\t'string': /[\\s\\S]+/\n\t\t\t}\n\t\t},\n\t],\n\n\t'directive': {\n\t\t// directives with conditions\n\t\tpattern: RegExp(\n\t\t\t/#/.source\n\t\t\t+ '(?:'\n\t\t\t+ (\n\t\t\t\t/(?:elseif|if)\\b/.source\n\t\t\t\t+ '(?:[ \\t]*'\n\t\t\t\t// This regex is a little complex. It's equivalent to this:\n\t\t\t\t//   (?:![ \\t]*)?(?:\\b\\w+\\b(?:[ \\t]*<round>)?|<round>)(?:[ \\t]*(?:&&|\\|\\|))?\n\t\t\t\t// where <round> is a general parentheses expression.\n\t\t\t\t+ /(?:![ \\t]*)?(?:\\b\\w+\\b(?:[ \\t]*\\((?:[^()]|\\([^()]*\\))*\\))?|\\((?:[^()]|\\([^()]*\\))*\\))(?:[ \\t]*(?:&&|\\|\\|))?/.source\n\t\t\t\t+ ')+'\n\t\t\t)\n\t\t\t+ '|'\n\t\t\t+ /(?:else|endif)\\b/.source\n\t\t\t+ ')'\n\t\t),\n\t\talias: 'property',\n\t\tinside: {\n\t\t\t'directive-name': /^#\\w+/,\n\t\t\t'boolean': /\\b(?:false|true)\\b/,\n\t\t\t'number': /\\b\\d+(?:\\.\\d+)*\\b/,\n\t\t\t'operator': /!|&&|\\|\\||[<>]=?/,\n\t\t\t'punctuation': /[(),]/\n\t\t}\n\t},\n\t'literal': {\n\t\tpattern: /#(?:colorLiteral|column|dsohandle|file(?:ID|Literal|Path)?|function|imageLiteral|line)\\b/,\n\t\talias: 'constant'\n\t},\n\t'other-directive': {\n\t\tpattern: /#\\w+\\b/,\n\t\talias: 'property'\n\t},\n\n\t'attribute': {\n\t\tpattern: /@\\w+/,\n\t\talias: 'atrule'\n\t},\n\n\t'function-definition': {\n\t\tpattern: /(\\bfunc\\s+)\\w+/,\n\t\tlookbehind: true,\n\t\talias: 'function'\n\t},\n\t'label': {\n\t\t// https://docs.swift.org/swift-book/LanguageGuide/ControlFlow.html#ID141\n\t\tpattern: /\\b(break|continue)\\s+\\w+|\\b[a-zA-Z_]\\w*(?=\\s*:\\s*(?:for|repeat|while)\\b)/,\n\t\tlookbehind: true,\n\t\talias: 'important'\n\t},\n\n\t'keyword': /\\b(?:Any|Protocol|Self|Type|actor|as|assignment|associatedtype|associativity|async|await|break|case|catch|class|continue|convenience|default|defer|deinit|didSet|do|dynamic|else|enum|extension|fallthrough|fileprivate|final|for|func|get|guard|higherThan|if|import|in|indirect|infix|init|inout|internal|is|isolated|lazy|left|let|lowerThan|mutating|none|nonisolated|nonmutating|open|operator|optional|override|postfix|precedencegroup|prefix|private|protocol|public|repeat|required|rethrows|return|right|safe|self|set|some|static|struct|subscript|super|switch|throw|throws|try|typealias|unowned|unsafe|var|weak|where|while|willSet)\\b/,\n\t'boolean': /\\b(?:false|true)\\b/,\n\t'nil': {\n\t\tpattern: /\\bnil\\b/,\n\t\talias: 'constant'\n\t},\n\n\t'short-argument': /\\$\\d+\\b/,\n\t'omit': {\n\t\tpattern: /\\b_\\b/,\n\t\talias: 'keyword'\n\t},\n\t'number': /\\b(?:[\\d_]+(?:\\.[\\de_]+)?|0x[a-f0-9_]+(?:\\.[a-f0-9p_]+)?|0b[01_]+|0o[0-7_]+)\\b/i,\n\n\t// A class name must start with an upper-case letter and be either 1 letter long or contain a lower-case letter.\n\t'class-name': /\\b[A-Z](?:[A-Z_\\d]*[a-z]\\w*)?\\b/,\n\t'function': /\\b[a-z_]\\w*(?=\\s*\\()/i,\n\t'constant': /\\b(?:[A-Z_]{2,}|k[A-Z][A-Za-z_]+)\\b/,\n\n\t// Operators are generic in Swift. Developers can even create new operators (e.g. +++).\n\t// https://docs.swift.org/swift-book/ReferenceManual/zzSummaryOfTheGrammar.html#ID481\n\t// This regex only supports ASCII operators.\n\t'operator': /[-+*/%=!<>&|^~?]+|\\.[.\\-+*/%=!<>&|^~?]+/,\n\t'punctuation': /[{}[\\]();,.:\\\\]/\n};\n\nPrism.languages.swift['string-literal'].forEach(function (rule) {\n\trule.inside['interpolation'].inside = Prism.languages.swift;\n});\n/components/prism-java.js\u0010\"(function (Prism) {\n\n\tvar keywords = /\\b(?:abstract|assert|boolean|break|byte|case|catch|char|class|const|continue|default|do|double|else|enum|exports|extends|final|finally|float|for|goto|if|implements|import|instanceof|int|interface|long|module|native|new|non-sealed|null|open|opens|package|permits|private|protected|provides|public|record(?!\\s*[(){}[\\]<>=%~.:,;?+\\-*/&|^])|requires|return|sealed|short|static|strictfp|super|switch|synchronized|this|throw|throws|to|transient|transitive|try|uses|var|void|volatile|while|with|yield)\\b/;\n\n\t// full package (optional) + parent classes (optional)\n\tvar classNamePrefix = /(?:[a-z]\\w*\\s*\\.\\s*)*(?:[A-Z]\\w*\\s*\\.\\s*)*/.source;\n\n\t// based on the java naming conventions\n\tvar className = {\n\t\tpattern: RegExp(/(^|[^\\w.])/.source + classNamePrefix + /[A-Z](?:[\\d_A-Z]*[a-z]\\w*)?\\b/.source),\n\t\tlookbehind: true,\n\t\tinside: {\n\t\t\t'namespace': {\n\t\t\t\tpattern: /^[a-z]\\w*(?:\\s*\\.\\s*[a-z]\\w*)*(?:\\s*\\.)?/,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': /\\./\n\t\t\t\t}\n\t\t\t},\n\t\t\t'punctuation': /\\./\n\t\t}\n\t};\n\n\tPrism.languages.java = Prism.languages.extend('clike', {\n\t\t'string': {\n\t\t\tpattern: /(^|[^\\\\])\"(?:\\\\.|[^\"\\\\\\r\\n])*\"/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true\n\t\t},\n\t\t'class-name': [\n\t\t\tclassName,\n\t\t\t{\n\t\t\t\t// variables, parameters, and constructor references\n\t\t\t\t// this to support class names (or generic parameters) which do not contain a lower case letter (also works for methods)\n\t\t\t\tpattern: RegExp(/(^|[^\\w.])/.source + classNamePrefix + /[A-Z]\\w*(?=\\s+\\w+\\s*[;,=()]|\\s*(?:\\[[\\s,]*\\]\\s*)?::\\s*new\\b)/.source),\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: className.inside\n\t\t\t},\n\t\t\t{\n\t\t\t\t// class names based on keyword\n\t\t\t\t// this to support class names (or generic parameters) which do not contain a lower case letter (also works for methods)\n\t\t\t\tpattern: RegExp(/(\\b(?:class|enum|extends|implements|instanceof|interface|new|record|throws)\\s+)/.source + classNamePrefix + /[A-Z]\\w*\\b/.source),\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: className.inside\n\t\t\t}\n\t\t],\n\t\t'keyword': keywords,\n\t\t'function': [\n\t\t\tPrism.languages.clike.function,\n\t\t\t{\n\t\t\t\tpattern: /(::\\s*)[a-z_]\\w*/,\n\t\t\t\tlookbehind: true\n\t\t\t}\n\t\t],\n\t\t'number': /\\b0b[01][01_]*L?\\b|\\b0x(?:\\.[\\da-f_p+-]+|[\\da-f_]+(?:\\.[\\da-f_p+-]+)?)\\b|(?:\\b\\d[\\d_]*(?:\\.[\\d_]*)?|\\B\\.\\d[\\d_]*)(?:e[+-]?\\d[\\d_]*)?[dfl]?/i,\n\t\t'operator': {\n\t\t\tpattern: /(^|[^.])(?:<<=?|>>>?=?|->|--|\\+\\+|&&|\\|\\||::|[?:~]|[-+*/%&|^!=<>]=?)/m,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'constant': /\\b[A-Z][A-Z_\\d]+\\b/\n\t});\n\n\tPrism.languages.insertBefore('java', 'string', {\n\t\t'triple-quoted-string': {\n\t\t\t// http://openjdk.java.net/jeps/355#Description\n\t\t\tpattern: /\"\"\"[ \\t]*[\\r\\n](?:(?:\"|\"\")?(?:\\\\.|[^\"\\\\]))*\"\"\"/,\n\t\t\tgreedy: true,\n\t\t\talias: 'string'\n\t\t},\n\t\t'char': {\n\t\t\tpattern: /'(?:\\\\.|[^'\\\\\\r\\n]){1,6}'/,\n\t\t\tgreedy: true\n\t\t}\n\t});\n\n\tPrism.languages.insertBefore('java', 'class-name', {\n\t\t'annotation': {\n\t\t\tpattern: /(^|[^.])@\\w+(?:\\s*\\.\\s*\\w+)*/,\n\t\t\tlookbehind: true,\n\t\t\talias: 'punctuation'\n\t\t},\n\t\t'generics': {\n\t\t\tpattern: /<(?:[\\w\\s,.?]|&(?!&)|<(?:[\\w\\s,.?]|&(?!&)|<(?:[\\w\\s,.?]|&(?!&)|<(?:[\\w\\s,.?]|&(?!&))*>)*>)*>)*>/,\n\t\t\tinside: {\n\t\t\t\t'class-name': className,\n\t\t\t\t'keyword': keywords,\n\t\t\t\t'punctuation': /[<>(),.:]/,\n\t\t\t\t'operator': /[?&|]/\n\t\t\t}\n\t\t},\n\t\t'import': [\n\t\t\t{\n\t\t\t\tpattern: RegExp(/(\\bimport\\s+)/.source + classNamePrefix + /(?:[A-Z]\\w*|\\*)(?=\\s*;)/.source),\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'namespace': className.inside.namespace,\n\t\t\t\t\t'punctuation': /\\./,\n\t\t\t\t\t'operator': /\\*/,\n\t\t\t\t\t'class-name': /\\w+/\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: RegExp(/(\\bimport\\s+static\\s+)/.source + classNamePrefix + /(?:\\w+|\\*)(?=\\s*;)/.source),\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'static',\n\t\t\t\tinside: {\n\t\t\t\t\t'namespace': className.inside.namespace,\n\t\t\t\t\t'static': /\\b\\w+$/,\n\t\t\t\t\t'punctuation': /\\./,\n\t\t\t\t\t'operator': /\\*/,\n\t\t\t\t\t'class-name': /\\w+/\n\t\t\t\t}\n\t\t\t}\n\t\t],\n\t\t'namespace': {\n\t\t\tpattern: RegExp(\n\t\t\t\t/(\\b(?:exports|import(?:\\s+static)?|module|open|opens|package|provides|requires|to|transitive|uses|with)\\s+)(?!<keyword>)[a-z]\\w*(?:\\.[a-z]\\w*)*\\.?/\n\t\t\t\t\t.source.replace(/<keyword>/g, function () { return keywords.source; })),\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'punctuation': /\\./,\n\t\t\t}\n\t\t}\n\t});\n}(Prism));\n/components/prism-json.js\u0002P// https://www.json.org/json-en.html\nPrism.languages.json = {\n\t'property': {\n\t\tpattern: /(^|[^\\\\])\"(?:\\\\.|[^\\\\\"\\r\\n])*\"(?=\\s*:)/,\n\t\tlookbehind: true,\n\t\tgreedy: true\n\t},\n\t'string': {\n\t\tpattern: /(^|[^\\\\])\"(?:\\\\.|[^\\\\\"\\r\\n])*\"(?!\\s*:)/,\n\t\tlookbehind: true,\n\t\tgreedy: true\n\t},\n\t'comment': {\n\t\tpattern: /\\/\\/.*|\\/\\*[\\s\\S]*?(?:\\*\\/|$)/,\n\t\tgreedy: true\n\t},\n\t'number': /-?\\b\\d+(?:\\.\\d+)?(?:e[+-]?\\d+)?\\b/i,\n\t'punctuation': /[{}[\\],]/,\n\t'operator': /:/,\n\t'boolean': /\\b(?:false|true)\\b/,\n\t'null': {\n\t\tpattern: /\\bnull\\b/,\n\t\talias: 'keyword'\n\t}\n};\n\nPrism.languages.webmanifest = Prism.languages.json;\n/components/prism-bbcode.min.js\u0001Prism.languages.bbcode={tag:{pattern:/\\[\\/?[^\\s=\\]]+(?:\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\"\\]=]+))?(?:\\s+[^\\s=\\]]+\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\"\\]=]+))*\\s*\\]/,inside:{tag:{pattern:/^\\[\\/?[^\\s=\\]]+/,inside:{punctuation:/^\\[\\/?/}},\"attr-value\":{pattern:/=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\"\\]=]+)/,inside:{punctuation:[/^=/,{pattern:/^(\\s*)[\"']|[\"']$/,lookbehind:!0}]}},punctuation:/\\]/,\"attr-name\":/[^\\s=\\]]+/}}},Prism.languages.shortcode=Prism.languages.bbcode;/components/prism-bbj.min.js\u0003i!function(e){e.languages.bbj={comment:{pattern:/(^|[^\\\\:])rem\\s+.*/i,lookbehind:!0,greedy:!0},string:{pattern:/(['\"])(?:(?!\\1|\\\\).|\\\\.)*\\1/,greedy:!0},number:/(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:E[+-]?\\d+)?/i,keyword:/\\b(?:abstract|all|argc|begin|bye|callback|case|chn|class|classend|ctl|day|declare|delete|dim|dom|dread|dsz|else|end|endif|err|exitto|extends|fi|field|for|from|gosub|goto|if|implements|interface|interfaceend|iol|iolist|let|list|load|method|methodend|methodret|on|opts|pfx|print|private|process_events|protected|psz|public|read|read_resource|release|remove_callback|repeat|restore|return|rev|seterr|setesc|sqlchn|sqlunt|ssn|start|static|swend|switch|sys|then|tim|unt|until|use|void|wend|where|while)\\b/i,function:/\\b\\w+(?=\\()/,boolean:/\\b(?:BBjAPI\\.TRUE|BBjAPI\\.FALSE)\\b/i,operator:/<[=>]?|>=?|[+\\-*\\/^=&]|\\b(?:and|not|or|xor)\\b/i,punctuation:/[.,;:()]/}}(Prism);/components/prism-crystal.js\u0006l(function (Prism) {\n\tPrism.languages.crystal = Prism.languages.extend('ruby', {\n\t\t'keyword': [\n\t\t\t/\\b(?:__DIR__|__END_LINE__|__FILE__|__LINE__|abstract|alias|annotation|as|asm|begin|break|case|class|def|do|else|elsif|end|ensure|enum|extend|for|fun|if|ifdef|include|instance_sizeof|lib|macro|module|next|of|out|pointerof|private|protected|ptr|require|rescue|return|select|self|sizeof|struct|super|then|type|typeof|undef|uninitialized|union|unless|until|when|while|with|yield)\\b/,\n\t\t\t{\n\t\t\t\tpattern: /(\\.\\s*)(?:is_a|responds_to)\\?/,\n\t\t\t\tlookbehind: true\n\t\t\t}\n\t\t],\n\t\t'number': /\\b(?:0b[01_]*[01]|0o[0-7_]*[0-7]|0x[\\da-fA-F_]*[\\da-fA-F]|(?:\\d(?:[\\d_]*\\d)?)(?:\\.[\\d_]*\\d)?(?:[eE][+-]?[\\d_]*\\d)?)(?:_(?:[uif](?:8|16|32|64))?)?\\b/,\n\t\t'operator': [\n\t\t\t/->/,\n\t\t\tPrism.languages.ruby.operator,\n\t\t],\n\t\t'punctuation': /[(){}[\\].,;\\\\]/,\n\t});\n\n\tPrism.languages.insertBefore('crystal', 'string-literal', {\n\t\t'attribute': {\n\t\t\tpattern: /@\\[.*?\\]/,\n\t\t\tinside: {\n\t\t\t\t'delimiter': {\n\t\t\t\t\tpattern: /^@\\[|\\]$/,\n\t\t\t\t\talias: 'punctuation'\n\t\t\t\t},\n\t\t\t\t'attribute': {\n\t\t\t\t\tpattern: /^(\\s*)\\w+/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\talias: 'class-name'\n\t\t\t\t},\n\t\t\t\t'args': {\n\t\t\t\t\tpattern: /\\S(?:[\\s\\S]*\\S)?/,\n\t\t\t\t\tinside: Prism.languages.crystal\n\t\t\t\t},\n\t\t\t}\n\t\t},\n\t\t'expansion': {\n\t\t\tpattern: /\\{(?:\\{.*?\\}|%.*?%)\\}/,\n\t\t\tinside: {\n\t\t\t\t'content': {\n\t\t\t\t\tpattern: /^(\\{.)[\\s\\S]+(?=.\\}$)/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tinside: Prism.languages.crystal\n\t\t\t\t},\n\t\t\t\t'delimiter': {\n\t\t\t\t\tpattern: /^\\{[\\{%]|[\\}%]\\}$/,\n\t\t\t\t\talias: 'operator'\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t'char': {\n\t\t\tpattern: /'(?:[^\\\\\\r\\n]{1,2}|\\\\(?:.|u(?:[A-Fa-f0-9]{1,4}|\\{[A-Fa-f0-9]{1,6}\\})))'/,\n\t\t\tgreedy: true\n\t\t}\n\t});\n\n}(Prism));\n/components/prism-yaml.js\fp(function (Prism) {\n\n\t// https://yaml.org/spec/1.2/spec.html#c-ns-anchor-property\n\t// https://yaml.org/spec/1.2/spec.html#c-ns-alias-node\n\tvar anchorOrAlias = /[*&][^\\s[\\]{},]+/;\n\t// https://yaml.org/spec/1.2/spec.html#c-ns-tag-property\n\tvar tag = /!(?:<[\\w\\-%#;/?:@&=+$,.!~*'()[\\]]+>|(?:[a-zA-Z\\d-]*!)?[\\w\\-%#;/?:@&=+$.~*'()]+)?/;\n\t// https://yaml.org/spec/1.2/spec.html#c-ns-properties(n,c)\n\tvar properties = '(?:' + tag.source + '(?:[ \\t]+' + anchorOrAlias.source + ')?|'\n\t\t+ anchorOrAlias.source + '(?:[ \\t]+' + tag.source + ')?)';\n\t// https://yaml.org/spec/1.2/spec.html#ns-plain(n,c)\n\t// This is a simplified version that doesn't support \"#\" and multiline keys\n\t// All these long scarry character classes are simplified versions of YAML's characters\n\tvar plainKey = /(?:[^\\s\\x00-\\x08\\x0e-\\x1f!\"#%&'*,\\-:>?@[\\]`{|}\\x7f-\\x84\\x86-\\x9f\\ud800-\\udfff\\ufffe\\uffff]|[?:-]<PLAIN>)(?:[ \\t]*(?:(?![#:])<PLAIN>|:<PLAIN>))*/.source\n\t\t.replace(/<PLAIN>/g, function () { return /[^\\s\\x00-\\x08\\x0e-\\x1f,[\\]{}\\x7f-\\x84\\x86-\\x9f\\ud800-\\udfff\\ufffe\\uffff]/.source; });\n\tvar string = /\"(?:[^\"\\\\\\r\\n]|\\\\.)*\"|'(?:[^'\\\\\\r\\n]|\\\\.)*'/.source;\n\n\t/**\n\t *\n\t * @param {string} value\n\t * @param {string} [flags]\n\t * @returns {RegExp}\n\t */\n\tfunction createValuePattern(value, flags) {\n\t\tflags = (flags || '').replace(/m/g, '') + 'm'; // add m flag\n\t\tvar pattern = /([:\\-,[{]\\s*(?:\\s<<prop>>[ \\t]+)?)(?:<<value>>)(?=[ \\t]*(?:$|,|\\]|\\}|(?:[\\r\\n]\\s*)?#))/.source\n\t\t\t.replace(/<<prop>>/g, function () { return properties; }).replace(/<<value>>/g, function () { return value; });\n\t\treturn RegExp(pattern, flags);\n\t}\n\n\tPrism.languages.yaml = {\n\t\t'scalar': {\n\t\t\tpattern: RegExp(/([\\-:]\\s*(?:\\s<<prop>>[ \\t]+)?[|>])[ \\t]*(?:((?:\\r?\\n|\\r)[ \\t]+)\\S[^\\r\\n]*(?:\\2[^\\r\\n]+)*)/.source\n\t\t\t\t.replace(/<<prop>>/g, function () { return properties; })),\n\t\t\tlookbehind: true,\n\t\t\talias: 'string'\n\t\t},\n\t\t'comment': /#.*/,\n\t\t'key': {\n\t\t\tpattern: RegExp(/((?:^|[:\\-,[{\\r\\n?])[ \\t]*(?:<<prop>>[ \\t]+)?)<<key>>(?=\\s*:\\s)/.source\n\t\t\t\t.replace(/<<prop>>/g, function () { return properties; })\n\t\t\t\t.replace(/<<key>>/g, function () { return '(?:' + plainKey + '|' + string + ')'; })),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\talias: 'atrule'\n\t\t},\n\t\t'directive': {\n\t\t\tpattern: /(^[ \\t]*)%.+/m,\n\t\t\tlookbehind: true,\n\t\t\talias: 'important'\n\t\t},\n\t\t'datetime': {\n\t\t\tpattern: createValuePattern(/\\d{4}-\\d\\d?-\\d\\d?(?:[tT]|[ \\t]+)\\d\\d?:\\d{2}:\\d{2}(?:\\.\\d*)?(?:[ \\t]*(?:Z|[-+]\\d\\d?(?::\\d{2})?))?|\\d{4}-\\d{2}-\\d{2}|\\d\\d?:\\d{2}(?::\\d{2}(?:\\.\\d*)?)?/.source),\n\t\t\tlookbehind: true,\n\t\t\talias: 'number'\n\t\t},\n\t\t'boolean': {\n\t\t\tpattern: createValuePattern(/false|true/.source, 'i'),\n\t\t\tlookbehind: true,\n\t\t\talias: 'important'\n\t\t},\n\t\t'null': {\n\t\t\tpattern: createValuePattern(/null|~/.source, 'i'),\n\t\t\tlookbehind: true,\n\t\t\talias: 'important'\n\t\t},\n\t\t'string': {\n\t\t\tpattern: createValuePattern(string),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true\n\t\t},\n\t\t'number': {\n\t\t\tpattern: createValuePattern(/[+-]?(?:0x[\\da-f]+|0o[0-7]+|(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?|\\.inf|\\.nan)/.source, 'i'),\n\t\t\tlookbehind: true\n\t\t},\n\t\t'tag': tag,\n\t\t'important': anchorOrAlias,\n\t\t'punctuation': /---|[:[\\]{}\\-,|>?]|\\.\\.\\./\n\t};\n\n\tPrism.languages.yml = Prism.languages.yaml;\n\n}(Prism));\n/components/prism-matlab.js\u0002\"Prism.languages.matlab = {\n\t'comment': [\n\t\t/%\\{[\\s\\S]*?\\}%/,\n\t\t/%.+/\n\t],\n\t'string': {\n\t\tpattern: /\\B'(?:''|[^'\\r\\n])*'/,\n\t\tgreedy: true\n\t},\n\t// FIXME We could handle imaginary numbers as a whole\n\t'number': /(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:[eE][+-]?\\d+)?(?:[ij])?|\\b[ij]\\b/,\n\t'keyword': /\\b(?:NaN|break|case|catch|continue|else|elseif|end|for|function|if|inf|otherwise|parfor|pause|pi|return|switch|try|while)\\b/,\n\t'function': /\\b(?!\\d)\\w+(?=\\s*\\()/,\n\t'operator': /\\.?[*^\\/\\\\']|[+\\-:@]|[<>=~]=?|&&?|\\|\\|?/,\n\t'punctuation': /\\.{3}|[.,;\\[\\](){}!]/\n};\n/themes/prism-tomorrow.css\u0006/**\n * prism.js tomorrow night eighties for JavaScript, CoffeeScript, CSS and HTML\n * Based on https://github.com/chriskempson/tomorrow-theme\n * @author Rose Pritchard\n */\n\ncode[class*=\"language-\"],\npre[class*=\"language-\"] {\n\tcolor: #ccc;\n\tbackground: none;\n\tfont-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;\n\tfont-size: 1em;\n\ttext-align: left;\n\twhite-space: pre;\n\tword-spacing: normal;\n\tword-break: normal;\n\tword-wrap: normal;\n\tline-height: 1.5;\n\n\t-moz-tab-size: 4;\n\t-o-tab-size: 4;\n\ttab-size: 4;\n\n\t-webkit-hyphens: none;\n\t-moz-hyphens: none;\n\t-ms-hyphens: none;\n\thyphens: none;\n\n}\n\n/* Code blocks */\npre[class*=\"language-\"] {\n\tpadding: 1em;\n\tmargin: .5em 0;\n\toverflow: auto;\n}\n\n:not(pre) > code[class*=\"language-\"],\npre[class*=\"language-\"] {\n\tbackground: #2d2d2d;\n}\n\n/* Inline code */\n:not(pre) > code[class*=\"language-\"] {\n\tpadding: .1em;\n\tborder-radius: .3em;\n\twhite-space: normal;\n}\n\n.token.comment,\n.token.block-comment,\n.token.prolog,\n.token.doctype,\n.token.cdata {\n\tcolor: #999;\n}\n\n.token.punctuation {\n\tcolor: #ccc;\n}\n\n.token.tag,\n.token.attr-name,\n.token.namespace,\n.token.deleted {\n\tcolor: #e2777a;\n}\n\n.token.function-name {\n\tcolor: #6196cc;\n}\n\n.token.boolean,\n.token.number,\n.token.function {\n\tcolor: #f08d49;\n}\n\n.token.property,\n.token.class-name,\n.token.constant,\n.token.symbol {\n\tcolor: #f8c555;\n}\n\n.token.selector,\n.token.important,\n.token.atrule,\n.token.keyword,\n.token.builtin {\n\tcolor: #cc99cd;\n}\n\n.token.string,\n.token.char,\n.token.attr-value,\n.token.regex,\n.token.variable {\n\tcolor: #7ec699;\n}\n\n.token.operator,\n.token.entity,\n.token.url {\n\tcolor: #67cdcc;\n}\n\n.token.important,\n.token.bold {\n\tfont-weight: bold;\n}\n.token.italic {\n\tfont-style: italic;\n}\n\n.token.entity {\n\tcursor: help;\n}\n\n.token.inserted {\n\tcolor: green;\n}\n#/components/prism-powershell.min.js\b^!function(e){var i=e.languages.powershell={comment:[{pattern:/(^|[^`])<#[\\s\\S]*?#>/,lookbehind:!0},{pattern:/(^|[^`])#.*/,lookbehind:!0}],string:[{pattern:/\"(?:`[\\s\\S]|[^`\"])*\"/,greedy:!0,inside:null},{pattern:/'(?:[^']|'')*'/,greedy:!0}],namespace:/\\[[a-z](?:\\[(?:\\[[^\\]]*\\]|[^\\[\\]])*\\]|[^\\[\\]])*\\]/i,boolean:/\\$(?:false|true)\\b/i,variable:/\\$\\w+\\b/,function:[/\\b(?:Add|Approve|Assert|Backup|Block|Checkpoint|Clear|Close|Compare|Complete|Compress|Confirm|Connect|Convert|ConvertFrom|ConvertTo|Copy|Debug|Deny|Disable|Disconnect|Dismount|Edit|Enable|Enter|Exit|Expand|Export|Find|ForEach|Format|Get|Grant|Group|Hide|Import|Initialize|Install|Invoke|Join|Limit|Lock|Measure|Merge|Move|New|Open|Optimize|Out|Ping|Pop|Protect|Publish|Push|Read|Receive|Redo|Register|Remove|Rename|Repair|Request|Reset|Resize|Resolve|Restart|Restore|Resume|Revoke|Save|Search|Select|Send|Set|Show|Skip|Sort|Split|Start|Step|Stop|Submit|Suspend|Switch|Sync|Tee|Test|Trace|Unblock|Undo|Uninstall|Unlock|Unprotect|Unpublish|Unregister|Update|Use|Wait|Watch|Where|Write)-[a-z]+\\b/i,/\\b(?:ac|cat|chdir|clc|cli|clp|clv|compare|copy|cp|cpi|cpp|cvpa|dbp|del|diff|dir|ebp|echo|epal|epcsv|epsn|erase|fc|fl|ft|fw|gal|gbp|gc|gci|gcs|gdr|gi|gl|gm|gp|gps|group|gsv|gu|gv|gwmi|iex|ii|ipal|ipcsv|ipsn|irm|iwmi|iwr|kill|lp|ls|measure|mi|mount|move|mp|mv|nal|ndr|ni|nv|ogv|popd|ps|pushd|pwd|rbp|rd|rdr|ren|ri|rm|rmdir|rni|rnp|rp|rv|rvpa|rwmi|sal|saps|sasv|sbp|sc|select|set|shcm|si|sl|sleep|sls|sort|sp|spps|spsv|start|sv|swmi|tee|trcm|type|write)\\b/i],keyword:/\\b(?:Begin|Break|Catch|Class|Continue|Data|Define|Do|DynamicParam|Else|ElseIf|End|Exit|Filter|Finally|For|ForEach|From|Function|If|InlineScript|Parallel|Param|Process|Return|Sequence|Switch|Throw|Trap|Try|Until|Using|Var|While|Workflow)\\b/i,operator:{pattern:/(^|\\W)(?:!|-(?:b?(?:and|x?or)|as|(?:Not)?(?:Contains|In|Like|Match)|eq|ge|gt|is(?:Not)?|Join|le|lt|ne|not|Replace|sh[lr])\\b|-[-=]?|\\+[+=]?|[*\\/%]=?)/i,lookbehind:!0},punctuation:/[|{}[\\];(),.]/};i.string[0].inside={function:{pattern:/(^|[^`])\\$\\((?:\\$\\([^\\r\\n()]*\\)|(?!\\$\\()[^\\r\\n)])*\\)/,lookbehind:!0,inside:i},boolean:i.boolean,variable:i.variable}}(Prism);/components/prism-dot.min.js\u0004!function(e){var a=\"(?:\"+[\"[a-zA-Z_\\\\x80-\\\\uFFFF][\\\\w\\\\x80-\\\\uFFFF]*\",\"-?(?:\\\\.\\\\d+|\\\\d+(?:\\\\.\\\\d*)?)\",'\"[^\"\\\\\\\\]*(?:\\\\\\\\[^][^\"\\\\\\\\]*)*\"',\"<(?:[^<>]|(?!\\x3c!--)<(?:[^<>\\\"']|\\\"[^\\\"]*\\\"|'[^']*')+>|\\x3c!--(?:[^-]|-(?!->))*--\\x3e)*>\"].join(\"|\")+\")\",n={markup:{pattern:/(^<)[\\s\\S]+(?=>$)/,lookbehind:!0,alias:[\"language-markup\",\"language-html\",\"language-xml\"],inside:e.languages.markup}};function r(e,n){return RegExp(e.replace(/<ID>/g,(function(){return a})),n)}e.languages.dot={comment:{pattern:/\\/\\/.*|\\/\\*[\\s\\S]*?\\*\\/|^#.*/m,greedy:!0},\"graph-name\":{pattern:r(\"(\\\\b(?:digraph|graph|subgraph)[ \\t\\r\\n]+)<ID>\",\"i\"),lookbehind:!0,greedy:!0,alias:\"class-name\",inside:n},\"attr-value\":{pattern:r(\"(=[ \\t\\r\\n]*)<ID>\"),lookbehind:!0,greedy:!0,inside:n},\"attr-name\":{pattern:r(\"([\\\\[;, \\t\\r\\n])<ID>(?=[ \\t\\r\\n]*=)\"),lookbehind:!0,greedy:!0,inside:n},keyword:/\\b(?:digraph|edge|graph|node|strict|subgraph)\\b/i,\"compass-point\":{pattern:/(:[ \\t\\r\\n]*)(?:[ewc_]|[ns][ew]?)(?![\\w\\x80-\\uFFFF])/,lookbehind:!0,alias:\"builtin\"},node:{pattern:r(\"(^|[^-.\\\\w\\\\x80-\\\\uFFFF\\\\\\\\])<ID>\"),lookbehind:!0,greedy:!0,inside:n},operator:/[=:]|-[->]/,punctuation:/[\\[\\]{};,]/},e.languages.gv=e.languages.dot}(Prism);/components/prism-java.min.js\n!function(e){var n=/\\b(?:abstract|assert|boolean|break|byte|case|catch|char|class|const|continue|default|do|double|else|enum|exports|extends|final|finally|float|for|goto|if|implements|import|instanceof|int|interface|long|module|native|new|non-sealed|null|open|opens|package|permits|private|protected|provides|public|record(?!\\s*[(){}[\\]<>=%~.:,;?+\\-*/&|^])|requires|return|sealed|short|static|strictfp|super|switch|synchronized|this|throw|throws|to|transient|transitive|try|uses|var|void|volatile|while|with|yield)\\b/,t=\"(?:[a-z]\\\\w*\\\\s*\\\\.\\\\s*)*(?:[A-Z]\\\\w*\\\\s*\\\\.\\\\s*)*\",s={pattern:RegExp(\"(^|[^\\\\w.])\"+t+\"[A-Z](?:[\\\\d_A-Z]*[a-z]\\\\w*)?\\\\b\"),lookbehind:!0,inside:{namespace:{pattern:/^[a-z]\\w*(?:\\s*\\.\\s*[a-z]\\w*)*(?:\\s*\\.)?/,inside:{punctuation:/\\./}},punctuation:/\\./}};e.languages.java=e.languages.extend(\"clike\",{string:{pattern:/(^|[^\\\\])\"(?:\\\\.|[^\"\\\\\\r\\n])*\"/,lookbehind:!0,greedy:!0},\"class-name\":[s,{pattern:RegExp(\"(^|[^\\\\w.])\"+t+\"[A-Z]\\\\w*(?=\\\\s+\\\\w+\\\\s*[;,=()]|\\\\s*(?:\\\\[[\\\\s,]*\\\\]\\\\s*)?::\\\\s*new\\\\b)\"),lookbehind:!0,inside:s.inside},{pattern:RegExp(\"(\\\\b(?:class|enum|extends|implements|instanceof|interface|new|record|throws)\\\\s+)\"+t+\"[A-Z]\\\\w*\\\\b\"),lookbehind:!0,inside:s.inside}],keyword:n,function:[e.languages.clike.function,{pattern:/(::\\s*)[a-z_]\\w*/,lookbehind:!0}],number:/\\b0b[01][01_]*L?\\b|\\b0x(?:\\.[\\da-f_p+-]+|[\\da-f_]+(?:\\.[\\da-f_p+-]+)?)\\b|(?:\\b\\d[\\d_]*(?:\\.[\\d_]*)?|\\B\\.\\d[\\d_]*)(?:e[+-]?\\d[\\d_]*)?[dfl]?/i,operator:{pattern:/(^|[^.])(?:<<=?|>>>?=?|->|--|\\+\\+|&&|\\|\\||::|[?:~]|[-+*/%&|^!=<>]=?)/m,lookbehind:!0},constant:/\\b[A-Z][A-Z_\\d]+\\b/}),e.languages.insertBefore(\"java\",\"string\",{\"triple-quoted-string\":{pattern:/\"\"\"[ \\t]*[\\r\\n](?:(?:\"|\"\")?(?:\\\\.|[^\"\\\\]))*\"\"\"/,greedy:!0,alias:\"string\"},char:{pattern:/'(?:\\\\.|[^'\\\\\\r\\n]){1,6}'/,greedy:!0}}),e.languages.insertBefore(\"java\",\"class-name\",{annotation:{pattern:/(^|[^.])@\\w+(?:\\s*\\.\\s*\\w+)*/,lookbehind:!0,alias:\"punctuation\"},generics:{pattern:/<(?:[\\w\\s,.?]|&(?!&)|<(?:[\\w\\s,.?]|&(?!&)|<(?:[\\w\\s,.?]|&(?!&)|<(?:[\\w\\s,.?]|&(?!&))*>)*>)*>)*>/,inside:{\"class-name\":s,keyword:n,punctuation:/[<>(),.:]/,operator:/[?&|]/}},import:[{pattern:RegExp(\"(\\\\bimport\\\\s+)\"+t+\"(?:[A-Z]\\\\w*|\\\\*)(?=\\\\s*;)\"),lookbehind:!0,inside:{namespace:s.inside.namespace,punctuation:/\\./,operator:/\\*/,\"class-name\":/\\w+/}},{pattern:RegExp(\"(\\\\bimport\\\\s+static\\\\s+)\"+t+\"(?:\\\\w+|\\\\*)(?=\\\\s*;)\"),lookbehind:!0,alias:\"static\",inside:{namespace:s.inside.namespace,static:/\\b\\w+$/,punctuation:/\\./,operator:/\\*/,\"class-name\":/\\w+/}}],namespace:{pattern:RegExp(\"(\\\\b(?:exports|import(?:\\\\s+static)?|module|open|opens|package|provides|requires|to|transitive|uses|with)\\\\s+)(?!<keyword>)[a-z]\\\\w*(?:\\\\.[a-z]\\\\w*)*\\\\.?\".replace(/<keyword>/g,(function(){return n.source}))),lookbehind:!0,inside:{punctuation:/\\./}}})}(Prism); /themes/prism-solarizedlight.css\n./*\n Solarized Color Schemes originally by Ethan Schoonover\n http://ethanschoonover.com/solarized\n\n Ported for PrismJS by Hector Matos\n Website: https://krakendev.io\n Twitter Handle: https://twitter.com/allonsykraken)\n*/\n\n/*\nSOLARIZED HEX\n--------- -------\nbase03    #002b36\nbase02    #073642\nbase01    #586e75\nbase00    #657b83\nbase0     #839496\nbase1     #93a1a1\nbase2     #eee8d5\nbase3     #fdf6e3\nyellow    #b58900\norange    #cb4b16\nred       #dc322f\nmagenta   #d33682\nviolet    #6c71c4\nblue      #268bd2\ncyan      #2aa198\ngreen     #859900\n*/\n\ncode[class*=\"language-\"],\npre[class*=\"language-\"] {\n\tcolor: #657b83; /* base00 */\n\tfont-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;\n\tfont-size: 1em;\n\ttext-align: left;\n\twhite-space: pre;\n\tword-spacing: normal;\n\tword-break: normal;\n\tword-wrap: normal;\n\n\tline-height: 1.5;\n\n\t-moz-tab-size: 4;\n\t-o-tab-size: 4;\n\ttab-size: 4;\n\n\t-webkit-hyphens: none;\n\t-moz-hyphens: none;\n\t-ms-hyphens: none;\n\thyphens: none;\n}\n\npre[class*=\"language-\"]::-moz-selection, pre[class*=\"language-\"] ::-moz-selection,\ncode[class*=\"language-\"]::-moz-selection, code[class*=\"language-\"] ::-moz-selection {\n\tbackground: #073642; /* base02 */\n}\n\npre[class*=\"language-\"]::selection, pre[class*=\"language-\"] ::selection,\ncode[class*=\"language-\"]::selection, code[class*=\"language-\"] ::selection {\n\tbackground: #073642; /* base02 */\n}\n\n/* Code blocks */\npre[class*=\"language-\"] {\n\tpadding: 1em;\n\tmargin: .5em 0;\n\toverflow: auto;\n\tborder-radius: 0.3em;\n}\n\n:not(pre) > code[class*=\"language-\"],\npre[class*=\"language-\"] {\n\tbackground-color: #fdf6e3; /* base3 */\n}\n\n/* Inline code */\n:not(pre) > code[class*=\"language-\"] {\n\tpadding: .1em;\n\tborder-radius: .3em;\n}\n\n.token.comment,\n.token.prolog,\n.token.doctype,\n.token.cdata {\n\tcolor: #93a1a1; /* base1 */\n}\n\n.token.punctuation {\n\tcolor: #586e75; /* base01 */\n}\n\n.token.namespace {\n\topacity: .7;\n}\n\n.token.property,\n.token.tag,\n.token.boolean,\n.token.number,\n.token.constant,\n.token.symbol,\n.token.deleted {\n\tcolor: #268bd2; /* blue */\n}\n\n.token.selector,\n.token.attr-name,\n.token.string,\n.token.char,\n.token.builtin,\n.token.url,\n.token.inserted {\n\tcolor: #2aa198; /* cyan */\n}\n\n.token.entity {\n\tcolor: #657b83; /* base00 */\n\tbackground: #eee8d5; /* base2 */\n}\n\n.token.atrule,\n.token.attr-value,\n.token.keyword {\n\tcolor: #859900; /* green */\n}\n\n.token.function,\n.token.class-name {\n\tcolor: #b58900; /* yellow */\n}\n\n.token.regex,\n.token.important,\n.token.variable {\n\tcolor: #cb4b16; /* orange */\n}\n\n.token.important,\n.token.bold {\n\tfont-weight: bold;\n}\n.token.italic {\n\tfont-style: italic;\n}\n\n.token.entity {\n\tcursor: help;\n}\n /components/prism-textile.min.js\rM!function(n){function e(n,e){return RegExp(n.replace(/<MOD>/g,(function(){return\"(?:\\\\([^|()\\n]+\\\\)|\\\\[[^\\\\]\\n]+\\\\]|\\\\{[^}\\n]+\\\\})\"})).replace(/<PAR>/g,(function(){return\"(?:\\\\)|\\\\((?![^|()\\n]+\\\\)))\"})),e||\"\")}var i={css:{pattern:/\\{[^{}]+\\}/,inside:{rest:n.languages.css}},\"class-id\":{pattern:/(\\()[^()]+(?=\\))/,lookbehind:!0,alias:\"attr-value\"},lang:{pattern:/(\\[)[^\\[\\]]+(?=\\])/,lookbehind:!0,alias:\"attr-value\"},punctuation:/[\\\\\\/]\\d+|\\S/},t=n.languages.textile=n.languages.extend(\"markup\",{phrase:{pattern:/(^|\\r|\\n)\\S[\\s\\S]*?(?=$|\\r?\\n\\r?\\n|\\r\\r)/,lookbehind:!0,inside:{\"block-tag\":{pattern:e(\"^[a-z]\\\\w*(?:<MOD>|<PAR>|[<>=])*\\\\.\"),inside:{modifier:{pattern:e(\"(^[a-z]\\\\w*)(?:<MOD>|<PAR>|[<>=])+(?=\\\\.)\"),lookbehind:!0,inside:i},tag:/^[a-z]\\w*/,punctuation:/\\.$/}},list:{pattern:e(\"^[*#]+<MOD>*\\\\s+\\\\S.*\",\"m\"),inside:{modifier:{pattern:e(\"(^[*#]+)<MOD>+\"),lookbehind:!0,inside:i},punctuation:/^[*#]+/}},table:{pattern:e(\"^(?:(?:<MOD>|<PAR>|[<>=^~])+\\\\.\\\\s*)?(?:\\\\|(?:(?:<MOD>|<PAR>|[<>=^~_]|[\\\\\\\\/]\\\\d+)+\\\\.|(?!(?:<MOD>|<PAR>|[<>=^~_]|[\\\\\\\\/]\\\\d+)+\\\\.))[^|]*)+\\\\|\",\"m\"),inside:{modifier:{pattern:e(\"(^|\\\\|(?:\\r?\\n|\\r)?)(?:<MOD>|<PAR>|[<>=^~_]|[\\\\\\\\/]\\\\d+)+(?=\\\\.)\"),lookbehind:!0,inside:i},punctuation:/\\||^\\./}},inline:{pattern:e(\"(^|[^a-zA-Z\\\\d])(\\\\*\\\\*|__|\\\\?\\\\?|[*_%@+\\\\-^~])<MOD>*.+?\\\\2(?![a-zA-Z\\\\d])\"),lookbehind:!0,inside:{bold:{pattern:e(\"(^(\\\\*\\\\*?)<MOD>*).+?(?=\\\\2)\"),lookbehind:!0},italic:{pattern:e(\"(^(__?)<MOD>*).+?(?=\\\\2)\"),lookbehind:!0},cite:{pattern:e(\"(^\\\\?\\\\?<MOD>*).+?(?=\\\\?\\\\?)\"),lookbehind:!0,alias:\"string\"},code:{pattern:e(\"(^@<MOD>*).+?(?=@)\"),lookbehind:!0,alias:\"keyword\"},inserted:{pattern:e(\"(^\\\\+<MOD>*).+?(?=\\\\+)\"),lookbehind:!0},deleted:{pattern:e(\"(^-<MOD>*).+?(?=-)\"),lookbehind:!0},span:{pattern:e(\"(^%<MOD>*).+?(?=%)\"),lookbehind:!0},modifier:{pattern:e(\"(^\\\\*\\\\*|__|\\\\?\\\\?|[*_%@+\\\\-^~])<MOD>+\"),lookbehind:!0,inside:i},punctuation:/[*_%?@+\\-^~]+/}},\"link-ref\":{pattern:/^\\[[^\\]]+\\]\\S+$/m,inside:{string:{pattern:/(^\\[)[^\\]]+(?=\\])/,lookbehind:!0},url:{pattern:/(^\\])\\S+$/,lookbehind:!0},punctuation:/[\\[\\]]/}},link:{pattern:e('\"<MOD>*[^\"]+\":.+?(?=[^\\\\w/]?(?:\\\\s|$))'),inside:{text:{pattern:e('(^\"<MOD>*)[^\"]+(?=\")'),lookbehind:!0},modifier:{pattern:e('(^\")<MOD>+'),lookbehind:!0,inside:i},url:{pattern:/(:).+/,lookbehind:!0},punctuation:/[\":]/}},image:{pattern:e(\"!(?:<MOD>|<PAR>|[<>=])*(?![<>=])[^!\\\\s()]+(?:\\\\([^)]+\\\\))?!(?::.+?(?=[^\\\\w/]?(?:\\\\s|$)))?\"),inside:{source:{pattern:e(\"(^!(?:<MOD>|<PAR>|[<>=])*)(?![<>=])[^!\\\\s()]+(?:\\\\([^)]+\\\\))?(?=!)\"),lookbehind:!0,alias:\"url\"},modifier:{pattern:e(\"(^!)(?:<MOD>|<PAR>|[<>=])+\"),lookbehind:!0,inside:i},url:{pattern:/(:).+/,lookbehind:!0},punctuation:/[!:]/}},footnote:{pattern:/\\b\\[\\d+\\]/,alias:\"comment\",inside:{punctuation:/\\[|\\]/}},acronym:{pattern:/\\b[A-Z\\d]+\\([^)]+\\)/,inside:{comment:{pattern:/(\\()[^()]+(?=\\))/,lookbehind:!0},punctuation:/[()]/}},mark:{pattern:/\\b\\((?:C|R|TM)\\)/,alias:\"comment\",inside:{punctuation:/[()]/}}}}}),a=t.phrase.inside,o={inline:a.inline,link:a.link,image:a.image,footnote:a.footnote,acronym:a.acronym,mark:a.mark};t.tag.pattern=/<\\/?(?!\\d)[a-z0-9]+(?:\\s+[^\\s>\\/=]+(?:=(?:(\"|')(?:\\\\[\\s\\S]|(?!\\1)[^\\\\])*\\1|[^\\s'\">=]+))?)*\\s*\\/?>/i;var r=a.inline.inside;r.bold.inside=o,r.italic.inside=o,r.inserted.inside=o,r.deleted.inside=o,r.span.inside=o;var d=a.table.inside;d.inline=o.inline,d.link=o.link,d.image=o.image,d.footnote=o.footnote,d.acronym=o.acronym,d.mark=o.mark}(Prism);/components/prism-dax.js\rPrism.languages.dax = {\n\t'comment': {\n\t\tpattern: /(^|[^\\\\])(?:\\/\\*[\\s\\S]*?\\*\\/|(?:--|\\/\\/).*)/,\n\t\tlookbehind: true\n\t},\n\t'data-field': {\n\t\tpattern: /'(?:[^']|'')*'(?!')(?:\\[[ \\w\\xA0-\\uFFFF]+\\])?|\\w+\\[[ \\w\\xA0-\\uFFFF]+\\]/,\n\t\talias: 'symbol'\n\t},\n\t'measure': {\n\t\tpattern: /\\[[ \\w\\xA0-\\uFFFF]+\\]/,\n\t\talias: 'constant'\n\t},\n\t'string': {\n\t\tpattern: /\"(?:[^\"]|\"\")*\"(?!\")/,\n\t\tgreedy: true\n\t},\n\t'function': /\\b(?:ABS|ACOS|ACOSH|ACOT|ACOTH|ADDCOLUMNS|ADDMISSINGITEMS|ALL|ALLCROSSFILTERED|ALLEXCEPT|ALLNOBLANKROW|ALLSELECTED|AND|APPROXIMATEDISTINCTCOUNT|ASIN|ASINH|ATAN|ATANH|AVERAGE|AVERAGEA|AVERAGEX|BETA\\.DIST|BETA\\.INV|BLANK|CALCULATE|CALCULATETABLE|CALENDAR|CALENDARAUTO|CEILING|CHISQ\\.DIST|CHISQ\\.DIST\\.RT|CHISQ\\.INV|CHISQ\\.INV\\.RT|CLOSINGBALANCEMONTH|CLOSINGBALANCEQUARTER|CLOSINGBALANCEYEAR|COALESCE|COMBIN|COMBINA|COMBINEVALUES|CONCATENATE|CONCATENATEX|CONFIDENCE\\.NORM|CONFIDENCE\\.T|CONTAINS|CONTAINSROW|CONTAINSSTRING|CONTAINSSTRINGEXACT|CONVERT|COS|COSH|COT|COTH|COUNT|COUNTA|COUNTAX|COUNTBLANK|COUNTROWS|COUNTX|CROSSFILTER|CROSSJOIN|CURRENCY|CURRENTGROUP|CUSTOMDATA|DATATABLE|DATE|DATEADD|DATEDIFF|DATESBETWEEN|DATESINPERIOD|DATESMTD|DATESQTD|DATESYTD|DATEVALUE|DAY|DEGREES|DETAILROWS|DISTINCT|DISTINCTCOUNT|DISTINCTCOUNTNOBLANK|DIVIDE|EARLIER|EARLIEST|EDATE|ENDOFMONTH|ENDOFQUARTER|ENDOFYEAR|EOMONTH|ERROR|EVEN|EXACT|EXCEPT|EXP|EXPON\\.DIST|FACT|FALSE|FILTER|FILTERS|FIND|FIRSTDATE|FIRSTNONBLANK|FIRSTNONBLANKVALUE|FIXED|FLOOR|FORMAT|GCD|GENERATE|GENERATEALL|GENERATESERIES|GEOMEAN|GEOMEANX|GROUPBY|HASONEFILTER|HASONEVALUE|HOUR|IF|IF\\.EAGER|IFERROR|IGNORE|INT|INTERSECT|ISBLANK|ISCROSSFILTERED|ISEMPTY|ISERROR|ISEVEN|ISFILTERED|ISINSCOPE|ISLOGICAL|ISNONTEXT|ISNUMBER|ISO\\.CEILING|ISODD|ISONORAFTER|ISSELECTEDMEASURE|ISSUBTOTAL|ISTEXT|KEEPFILTERS|KEYWORDMATCH|LASTDATE|LASTNONBLANK|LASTNONBLANKVALUE|LCM|LEFT|LEN|LN|LOG|LOG10|LOOKUPVALUE|LOWER|MAX|MAXA|MAXX|MEDIAN|MEDIANX|MID|MIN|MINA|MINUTE|MINX|MOD|MONTH|MROUND|NATURALINNERJOIN|NATURALLEFTOUTERJOIN|NEXTDAY|NEXTMONTH|NEXTQUARTER|NEXTYEAR|NONVISUAL|NORM\\.DIST|NORM\\.INV|NORM\\.S\\.DIST|NORM\\.S\\.INV|NOT|NOW|ODD|OPENINGBALANCEMONTH|OPENINGBALANCEQUARTER|OPENINGBALANCEYEAR|OR|PARALLELPERIOD|PATH|PATHCONTAINS|PATHITEM|PATHITEMREVERSE|PATHLENGTH|PERCENTILE\\.EXC|PERCENTILE\\.INC|PERCENTILEX\\.EXC|PERCENTILEX\\.INC|PERMUT|PI|POISSON\\.DIST|POWER|PREVIOUSDAY|PREVIOUSMONTH|PREVIOUSQUARTER|PREVIOUSYEAR|PRODUCT|PRODUCTX|QUARTER|QUOTIENT|RADIANS|RAND|RANDBETWEEN|RANK\\.EQ|RANKX|RELATED|RELATEDTABLE|REMOVEFILTERS|REPLACE|REPT|RIGHT|ROLLUP|ROLLUPADDISSUBTOTAL|ROLLUPGROUP|ROLLUPISSUBTOTAL|ROUND|ROUNDDOWN|ROUNDUP|ROW|SAMEPERIODLASTYEAR|SAMPLE|SEARCH|SECOND|SELECTCOLUMNS|SELECTEDMEASURE|SELECTEDMEASUREFORMATSTRING|SELECTEDMEASURENAME|SELECTEDVALUE|SIGN|SIN|SINH|SQRT|SQRTPI|STARTOFMONTH|STARTOFQUARTER|STARTOFYEAR|STDEV\\.P|STDEV\\.S|STDEVX\\.P|STDEVX\\.S|SUBSTITUTE|SUBSTITUTEWITHINDEX|SUM|SUMMARIZE|SUMMARIZECOLUMNS|SUMX|SWITCH|T\\.DIST|T\\.DIST\\.2T|T\\.DIST\\.RT|T\\.INV|T\\.INV\\.2T|TAN|TANH|TIME|TIMEVALUE|TODAY|TOPN|TOPNPERLEVEL|TOPNSKIP|TOTALMTD|TOTALQTD|TOTALYTD|TREATAS|TRIM|TRUE|TRUNC|UNICHAR|UNICODE|UNION|UPPER|USERELATIONSHIP|USERNAME|USEROBJECTID|USERPRINCIPALNAME|UTCNOW|UTCTODAY|VALUE|VALUES|VAR\\.P|VAR\\.S|VARX\\.P|VARX\\.S|WEEKDAY|WEEKNUM|XIRR|XNPV|YEAR|YEARFRAC)(?=\\s*\\()/i,\n\t'keyword': /\\b(?:DEFINE|EVALUATE|MEASURE|ORDER\\s+BY|RETURN|VAR|START\\s+AT|ASC|DESC)\\b/i,\n\t'boolean': {\n\t\tpattern: /\\b(?:FALSE|NULL|TRUE)\\b/i,\n\t\talias: 'constant'\n\t},\n\t'number': /\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+\\b/,\n\t'operator': /:=|[-+*\\/=^]|&&?|\\|\\||<(?:=>?|<|>)?|>[>=]?|\\b(?:IN|NOT)\\b/i,\n\t'punctuation': /[;\\[\\](){}`,.]/\n};\n/components/prism-core.min.js\u001cvar _self=\"undefined\"!=typeof window?window:\"undefined\"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:{},Prism=function(e){var n=/(?:^|\\s)lang(?:uage)?-([\\w-]+)(?=\\s|$)/i,t=0,r={},a={manual:e.Prism&&e.Prism.manual,disableWorkerMessageHandler:e.Prism&&e.Prism.disableWorkerMessageHandler,util:{encode:function e(n){return n instanceof i?new i(n.type,e(n.content),n.alias):Array.isArray(n)?n.map(e):n.replace(/&/g,\"&amp;\").replace(/</g,\"&lt;\").replace(/\\u00a0/g,\" \")},type:function(e){return Object.prototype.toString.call(e).slice(8,-1)},objId:function(e){return e.__id||Object.defineProperty(e,\"__id\",{value:++t}),e.__id},clone:function e(n,t){var r,i;switch(t=t||{},a.util.type(n)){case\"Object\":if(i=a.util.objId(n),t[i])return t[i];for(var l in r={},t[i]=r,n)n.hasOwnProperty(l)&&(r[l]=e(n[l],t));return r;case\"Array\":return i=a.util.objId(n),t[i]?t[i]:(r=[],t[i]=r,n.forEach((function(n,a){r[a]=e(n,t)})),r);default:return n}},getLanguage:function(e){for(;e;){var t=n.exec(e.className);if(t)return t[1].toLowerCase();e=e.parentElement}return\"none\"},setLanguage:function(e,t){e.className=e.className.replace(RegExp(n,\"gi\"),\"\"),e.classList.add(\"language-\"+t)},currentScript:function(){if(\"undefined\"==typeof document)return null;if(\"currentScript\"in document)return document.currentScript;try{throw new Error}catch(r){var e=(/at [^(\\r\\n]*\\((.*):[^:]+:[^:]+\\)$/i.exec(r.stack)||[])[1];if(e){var n=document.getElementsByTagName(\"script\");for(var t in n)if(n[t].src==e)return n[t]}return null}},isActive:function(e,n,t){for(var r=\"no-\"+n;e;){var a=e.classList;if(a.contains(n))return!0;if(a.contains(r))return!1;e=e.parentElement}return!!t}},languages:{plain:r,plaintext:r,text:r,txt:r,extend:function(e,n){var t=a.util.clone(a.languages[e]);for(var r in n)t[r]=n[r];return t},insertBefore:function(e,n,t,r){var i=(r=r||a.languages)[e],l={};for(var o in i)if(i.hasOwnProperty(o)){if(o==n)for(var s in t)t.hasOwnProperty(s)&&(l[s]=t[s]);t.hasOwnProperty(o)||(l[o]=i[o])}var u=r[e];return r[e]=l,a.languages.DFS(a.languages,(function(n,t){t===u&&n!=e&&(this[n]=l)})),l},DFS:function e(n,t,r,i){i=i||{};var l=a.util.objId;for(var o in n)if(n.hasOwnProperty(o)){t.call(n,o,n[o],r||o);var s=n[o],u=a.util.type(s);\"Object\"!==u||i[l(s)]?\"Array\"!==u||i[l(s)]||(i[l(s)]=!0,e(s,t,o,i)):(i[l(s)]=!0,e(s,t,null,i))}}},plugins:{},highlightAll:function(e,n){a.highlightAllUnder(document,e,n)},highlightAllUnder:function(e,n,t){var r={callback:t,container:e,selector:'code[class*=\"language-\"], [class*=\"language-\"] code, code[class*=\"lang-\"], [class*=\"lang-\"] code'};a.hooks.run(\"before-highlightall\",r),r.elements=Array.prototype.slice.apply(r.container.querySelectorAll(r.selector)),a.hooks.run(\"before-all-elements-highlight\",r);for(var i,l=0;i=r.elements[l++];)a.highlightElement(i,!0===n,r.callback)},highlightElement:function(n,t,r){var i=a.util.getLanguage(n),l=a.languages[i];a.util.setLanguage(n,i);var o=n.parentElement;o&&\"pre\"===o.nodeName.toLowerCase()&&a.util.setLanguage(o,i);var s={element:n,language:i,grammar:l,code:n.textContent};function u(e){s.highlightedCode=e,a.hooks.run(\"before-insert\",s),s.element.innerHTML=s.highlightedCode,a.hooks.run(\"after-highlight\",s),a.hooks.run(\"complete\",s),r&&r.call(s.element)}if(a.hooks.run(\"before-sanity-check\",s),(o=s.element.parentElement)&&\"pre\"===o.nodeName.toLowerCase()&&!o.hasAttribute(\"tabindex\")&&o.setAttribute(\"tabindex\",\"0\"),!s.code)return a.hooks.run(\"complete\",s),void(r&&r.call(s.element));if(a.hooks.run(\"before-highlight\",s),s.grammar)if(t&&e.Worker){var c=new Worker(a.filename);c.onmessage=function(e){u(e.data)},c.postMessage(JSON.stringify({language:s.language,code:s.code,immediateClose:!0}))}else u(a.highlight(s.code,s.grammar,s.language));else u(a.util.encode(s.code))},highlight:function(e,n,t){var r={code:e,grammar:n,language:t};if(a.hooks.run(\"before-tokenize\",r),!r.grammar)throw new Error('The language \"'+r.language+'\" has no grammar.');return r.tokens=a.tokenize(r.code,r.grammar),a.hooks.run(\"after-tokenize\",r),i.stringify(a.util.encode(r.tokens),r.language)},tokenize:function(e,n){var t=n.rest;if(t){for(var r in t)n[r]=t[r];delete n.rest}var a=new s;return u(a,a.head,e),o(e,a,n,a.head,0),function(e){for(var n=[],t=e.head.next;t!==e.tail;)n.push(t.value),t=t.next;return n}(a)},hooks:{all:{},add:function(e,n){var t=a.hooks.all;t[e]=t[e]||[],t[e].push(n)},run:function(e,n){var t=a.hooks.all[e];if(t&&t.length)for(var r,i=0;r=t[i++];)r(n)}},Token:i};function i(e,n,t,r){this.type=e,this.content=n,this.alias=t,this.length=0|(r||\"\").length}function l(e,n,t,r){e.lastIndex=n;var a=e.exec(t);if(a&&r&&a[1]){var i=a[1].length;a.index+=i,a[0]=a[0].slice(i)}return a}function o(e,n,t,r,s,g){for(var f in t)if(t.hasOwnProperty(f)&&t[f]){var h=t[f];h=Array.isArray(h)?h:[h];for(var d=0;d<h.length;++d){if(g&&g.cause==f+\",\"+d)return;var v=h[d],p=v.inside,m=!!v.lookbehind,y=!!v.greedy,k=v.alias;if(y&&!v.pattern.global){var x=v.pattern.toString().match(/[imsuy]*$/)[0];v.pattern=RegExp(v.pattern.source,x+\"g\")}for(var b=v.pattern||v,w=r.next,A=s;w!==n.tail&&!(g&&A>=g.reach);A+=w.value.length,w=w.next){var E=w.value;if(n.length>e.length)return;if(!(E instanceof i)){var P,L=1;if(y){if(!(P=l(b,A,e,m))||P.index>=e.length)break;var S=P.index,O=P.index+P[0].length,j=A;for(j+=w.value.length;S>=j;)j+=(w=w.next).value.length;if(A=j-=w.value.length,w.value instanceof i)continue;for(var C=w;C!==n.tail&&(j<O||\"string\"==typeof C.value);C=C.next)L++,j+=C.value.length;L--,E=e.slice(A,j),P.index-=A}else if(!(P=l(b,0,E,m)))continue;S=P.index;var N=P[0],_=E.slice(0,S),M=E.slice(S+N.length),W=A+E.length;g&&W>g.reach&&(g.reach=W);var z=w.prev;if(_&&(z=u(n,z,_),A+=_.length),c(n,z,L),w=u(n,z,new i(f,p?a.tokenize(N,p):N,k,N)),M&&u(n,w,M),L>1){var I={cause:f+\",\"+d,reach:W};o(e,n,t,w.prev,A,I),g&&I.reach>g.reach&&(g.reach=I.reach)}}}}}}function s(){var e={value:null,prev:null,next:null},n={value:null,prev:e,next:null};e.next=n,this.head=e,this.tail=n,this.length=0}function u(e,n,t){var r=n.next,a={value:t,prev:n,next:r};return n.next=a,r.prev=a,e.length++,a}function c(e,n,t){for(var r=n.next,a=0;a<t&&r!==e.tail;a++)r=r.next;n.next=r,r.prev=n,e.length-=a}if(e.Prism=a,i.stringify=function e(n,t){if(\"string\"==typeof n)return n;if(Array.isArray(n)){var r=\"\";return n.forEach((function(n){r+=e(n,t)})),r}var i={type:n.type,content:e(n.content,t),tag:\"span\",classes:[\"token\",n.type],attributes:{},language:t},l=n.alias;l&&(Array.isArray(l)?Array.prototype.push.apply(i.classes,l):i.classes.push(l)),a.hooks.run(\"wrap\",i);var o=\"\";for(var s in i.attributes)o+=\" \"+s+'=\"'+(i.attributes[s]||\"\").replace(/\"/g,\"&quot;\")+'\"';return\"<\"+i.tag+' class=\"'+i.classes.join(\" \")+'\"'+o+\">\"+i.content+\"</\"+i.tag+\">\"},!e.document)return e.addEventListener?(a.disableWorkerMessageHandler||e.addEventListener(\"message\",(function(n){var t=JSON.parse(n.data),r=t.language,i=t.code,l=t.immediateClose;e.postMessage(a.highlight(i,a.languages[r],r)),l&&e.close()}),!1),a):a;var g=a.util.currentScript();function f(){a.manual||a.highlightAll()}if(g&&(a.filename=g.src,g.hasAttribute(\"data-manual\")&&(a.manual=!0)),!a.manual){var h=document.readyState;\"loading\"===h||\"interactive\"===h&&g&&g.defer?document.addEventListener(\"DOMContentLoaded\",f):window.requestAnimationFrame?window.requestAnimationFrame(f):window.setTimeout(f,16)}return a}(_self);\"undefined\"!=typeof module&&module.exports&&(module.exports=Prism),\"undefined\"!=typeof global&&(global.Prism=Prism);/components/prism-n1ql.min.js\u0007\u0006Prism.languages.n1ql={comment:{pattern:/\\/\\*[\\s\\S]*?(?:$|\\*\\/)|--.*/,greedy:!0},string:{pattern:/([\"'])(?:\\\\[\\s\\S]|(?!\\1)[^\\\\]|\\1\\1)*\\1/,greedy:!0},identifier:{pattern:/`(?:\\\\[\\s\\S]|[^\\\\`]|``)*`/,greedy:!0},parameter:/\\$[\\w.]+/,keyword:/\\b(?:ADVISE|ALL|ALTER|ANALYZE|AS|ASC|AT|BEGIN|BINARY|BOOLEAN|BREAK|BUCKET|BUILD|BY|CALL|CAST|CLUSTER|COLLATE|COLLECTION|COMMIT|COMMITTED|CONNECT|CONTINUE|CORRELATE|CORRELATED|COVER|CREATE|CURRENT|DATABASE|DATASET|DATASTORE|DECLARE|DECREMENT|DELETE|DERIVED|DESC|DESCRIBE|DISTINCT|DO|DROP|EACH|ELEMENT|EXCEPT|EXCLUDE|EXECUTE|EXPLAIN|FETCH|FILTER|FLATTEN|FLUSH|FOLLOWING|FOR|FORCE|FROM|FTS|FUNCTION|GOLANG|GRANT|GROUP|GROUPS|GSI|HASH|HAVING|IF|IGNORE|ILIKE|INCLUDE|INCREMENT|INDEX|INFER|INLINE|INNER|INSERT|INTERSECT|INTO|IS|ISOLATION|JAVASCRIPT|JOIN|KEY|KEYS|KEYSPACE|KNOWN|LANGUAGE|LAST|LEFT|LET|LETTING|LEVEL|LIMIT|LSM|MAP|MAPPING|MATCHED|MATERIALIZED|MERGE|MINUS|MISSING|NAMESPACE|NEST|NL|NO|NTH_VALUE|NULL|NULLS|NUMBER|OBJECT|OFFSET|ON|OPTION|OPTIONS|ORDER|OTHERS|OUTER|OVER|PARSE|PARTITION|PASSWORD|PATH|POOL|PRECEDING|PREPARE|PRIMARY|PRIVATE|PRIVILEGE|PROBE|PROCEDURE|PUBLIC|RANGE|RAW|REALM|REDUCE|RENAME|RESPECT|RETURN|RETURNING|REVOKE|RIGHT|ROLE|ROLLBACK|ROW|ROWS|SATISFIES|SAVEPOINT|SCHEMA|SCOPE|SELECT|SELF|SEMI|SET|SHOW|SOME|START|STATISTICS|STRING|SYSTEM|TIES|TO|TRAN|TRANSACTION|TRIGGER|TRUNCATE|UNBOUNDED|UNDER|UNION|UNIQUE|UNKNOWN|UNNEST|UNSET|UPDATE|UPSERT|USE|USER|USING|VALIDATE|VALUE|VALUES|VIA|VIEW|WHERE|WHILE|WINDOW|WITH|WORK|XOR)\\b/i,function:/\\b[a-z_]\\w*(?=\\s*\\()/i,boolean:/\\b(?:FALSE|TRUE)\\b/i,number:/(?:\\b\\d+\\.|\\B\\.)\\d+e[+\\-]?\\d+\\b|\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+\\b/i,operator:/[-+*\\/%]|!=|==?|\\|\\||<[>=]?|>=?|\\b(?:AND|ANY|ARRAY|BETWEEN|CASE|ELSE|END|EVERY|EXISTS|FIRST|IN|LIKE|NOT|OR|THEN|VALUED|WHEN|WITHIN)\\b/i,punctuation:/[;[\\](),.{}:]/};/components/prism-iecst.js\u0005Prism.languages.iecst = {\n\t'comment': [\n\t\t{\n\t\t\tpattern: /(^|[^\\\\])(?:\\/\\*[\\s\\S]*?(?:\\*\\/|$)|\\(\\*[\\s\\S]*?(?:\\*\\)|$)|\\{[\\s\\S]*?(?:\\}|$))/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^\\\\:])\\/\\/.*/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t},\n\t],\n\t'string': {\n\t\tpattern: /([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1/,\n\t\tgreedy: true,\n\t},\n\t'keyword': [\n\t\t/\\b(?:END_)?(?:PROGRAM|CONFIGURATION|INTERFACE|FUNCTION_BLOCK|FUNCTION|ACTION|TRANSITION|TYPE|STRUCT|(?:INITIAL_)?STEP|NAMESPACE|LIBRARY|CHANNEL|FOLDER|RESOURCE|VAR_(?:ACCESS|CONFIG|EXTERNAL|GLOBAL|INPUT|IN_OUT|OUTPUT|TEMP)|VAR|METHOD|PROPERTY)\\b/i,\n\t\t/\\b(?:AT|BY|(?:END_)?(?:CASE|FOR|IF|REPEAT|WHILE)|CONSTANT|CONTINUE|DO|ELSE|ELSIF|EXIT|EXTENDS|FROM|GET|GOTO|IMPLEMENTS|JMP|NON_RETAIN|OF|PRIVATE|PROTECTED|PUBLIC|RETAIN|RETURN|SET|TASK|THEN|TO|UNTIL|USING|WITH|__CATCH|__ENDTRY|__FINALLY|__TRY)\\b/\n\t],\n\t'class-name': /\\b(?:ANY|ARRAY|BOOL|BYTE|U?(?:D|L|S)?INT|(?:D|L)?WORD|DATE(?:_AND_TIME)?|DT|L?REAL|POINTER|STRING|TIME(?:_OF_DAY)?|TOD)\\b/,\n\t'address': {\n\t\tpattern: /%[IQM][XBWDL][\\d.]*|%[IQ][\\d.]*/,\n\t\talias: 'symbol'\n\t},\n\t'number': /\\b(?:16#[\\da-f]+|2#[01_]+|0x[\\da-f]+)\\b|\\b(?:D|DT|T|TOD)#[\\d_shmd:]*|\\b[A-Z]*#[\\d.,_]*|(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:e[+-]?\\d+)?/i,\n\t'boolean': /\\b(?:FALSE|NULL|TRUE)\\b/,\n\t'operator': /S?R?:?=>?|&&?|\\*\\*?|<[=>]?|>=?|[-:^/+#]|\\b(?:AND|EQ|EXPT|GE|GT|LE|LT|MOD|NE|NOT|OR|XOR)\\b/,\n\t'function': /\\b[a-z_]\\w*(?=\\s*\\()/i,\n\t'punctuation': /[()[\\].,;]/,\n};\n/components/prism-lisp.js\u0013>(function (Prism) {\n\t/**\n\t * Functions to construct regular expressions\n\t * e.g. (interactive ... or (interactive)\n\t *\n\t * @param {string} name\n\t * @returns {RegExp}\n\t */\n\tfunction simple_form(name) {\n\t\treturn RegExp(/(\\()/.source + '(?:' + name + ')' + /(?=[\\s\\)])/.source);\n\t}\n\t/**\n\t * booleans and numbers\n\t *\n\t * @param {string} pattern\n\t * @returns {RegExp}\n\t */\n\tfunction primitive(pattern) {\n\t\treturn RegExp(/([\\s([])/.source + '(?:' + pattern + ')' + /(?=[\\s)])/.source);\n\t}\n\n\t// Patterns in regular expressions\n\n\t// Symbol name. See https://www.gnu.org/software/emacs/manual/html_node/elisp/Symbol-Type.html\n\t// & and : are excluded as they are usually used for special purposes\n\tvar symbol = /(?!\\d)[-+*/~!@$%^=<>{}\\w]+/.source;\n\t// symbol starting with & used in function arguments\n\tvar marker = '&' + symbol;\n\t// Open parenthesis for look-behind\n\tvar par = '(\\\\()';\n\tvar endpar = '(?=\\\\))';\n\t// End the pattern with look-ahead space\n\tvar space = '(?=\\\\s)';\n\tvar nestedPar = /(?:[^()]|\\((?:[^()]|\\((?:[^()]|\\((?:[^()]|\\((?:[^()]|\\([^()]*\\))*\\))*\\))*\\))*\\))*/.source;\n\n\tvar language = {\n\t\t// Three or four semicolons are considered a heading.\n\t\t// See https://www.gnu.org/software/emacs/manual/html_node/elisp/Comment-Tips.html\n\t\theading: {\n\t\t\tpattern: /;;;.*/,\n\t\t\talias: ['comment', 'title']\n\t\t},\n\t\tcomment: /;.*/,\n\t\tstring: {\n\t\t\tpattern: /\"(?:[^\"\\\\]|\\\\.)*\"/,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\targument: /[-A-Z]+(?=[.,\\s])/,\n\t\t\t\tsymbol: RegExp('`' + symbol + \"'\")\n\t\t\t}\n\t\t},\n\t\t'quoted-symbol': {\n\t\t\tpattern: RegExp(\"#?'\" + symbol),\n\t\t\talias: ['variable', 'symbol']\n\t\t},\n\t\t'lisp-property': {\n\t\t\tpattern: RegExp(':' + symbol),\n\t\t\talias: 'property'\n\t\t},\n\t\tsplice: {\n\t\t\tpattern: RegExp(',@?' + symbol),\n\t\t\talias: ['symbol', 'variable']\n\t\t},\n\t\tkeyword: [\n\t\t\t{\n\t\t\t\tpattern: RegExp(\n\t\t\t\t\tpar +\n\t\t\t\t\t\t'(?:and|(?:cl-)?letf|cl-loop|cond|cons|error|if|(?:lexical-)?let\\\\*?|message|not|null|or|provide|require|setq|unless|use-package|when|while)' +\n\t\t\t\t\t\tspace\n\t\t\t\t),\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: RegExp(\n\t\t\t\t\tpar + '(?:append|by|collect|concat|do|finally|for|in|return)' + space\n\t\t\t\t),\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t],\n\t\tdeclare: {\n\t\t\tpattern: simple_form(/declare/.source),\n\t\t\tlookbehind: true,\n\t\t\talias: 'keyword'\n\t\t},\n\t\tinteractive: {\n\t\t\tpattern: simple_form(/interactive/.source),\n\t\t\tlookbehind: true,\n\t\t\talias: 'keyword'\n\t\t},\n\t\tboolean: {\n\t\t\tpattern: primitive(/nil|t/.source),\n\t\t\tlookbehind: true\n\t\t},\n\t\tnumber: {\n\t\t\tpattern: primitive(/[-+]?\\d+(?:\\.\\d*)?/.source),\n\t\t\tlookbehind: true\n\t\t},\n\t\tdefvar: {\n\t\t\tpattern: RegExp(par + 'def(?:const|custom|group|var)\\\\s+' + symbol),\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\tkeyword: /^def[a-z]+/,\n\t\t\t\tvariable: RegExp(symbol)\n\t\t\t}\n\t\t},\n\t\tdefun: {\n\t\t\tpattern: RegExp(par + /(?:cl-)?(?:defmacro|defun\\*?)\\s+/.source + symbol + /\\s+\\(/.source + nestedPar + /\\)/.source),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\tkeyword: /^(?:cl-)?def\\S+/,\n\t\t\t\t// See below, this property needs to be defined later so that it can\n\t\t\t\t// reference the language object.\n\t\t\t\targuments: null,\n\t\t\t\tfunction: {\n\t\t\t\t\tpattern: RegExp('(^\\\\s)' + symbol),\n\t\t\t\t\tlookbehind: true\n\t\t\t\t},\n\t\t\t\tpunctuation: /[()]/\n\t\t\t}\n\t\t},\n\t\tlambda: {\n\t\t\tpattern: RegExp(par + 'lambda\\\\s+\\\\(\\\\s*(?:&?' + symbol + '(?:\\\\s+&?' + symbol + ')*\\\\s*)?\\\\)'),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\tkeyword: /^lambda/,\n\t\t\t\t// See below, this property needs to be defined later so that it can\n\t\t\t\t// reference the language object.\n\t\t\t\targuments: null,\n\t\t\t\tpunctuation: /[()]/\n\t\t\t}\n\t\t},\n\t\tcar: {\n\t\t\tpattern: RegExp(par + symbol),\n\t\t\tlookbehind: true\n\t\t},\n\t\tpunctuation: [\n\t\t\t// open paren, brackets, and close paren\n\t\t\t/(?:['`,]?\\(|[)\\[\\]])/,\n\t\t\t// cons\n\t\t\t{\n\t\t\t\tpattern: /(\\s)\\.(?=\\s)/,\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t]\n\t};\n\n\tvar arg = {\n\t\t'lisp-marker': RegExp(marker),\n\t\t'varform': {\n\t\t\tpattern: RegExp(/\\(/.source + symbol + /\\s+(?=\\S)/.source + nestedPar + /\\)/.source),\n\t\t\tinside: language\n\t\t},\n\t\t'argument': {\n\t\t\tpattern: RegExp(/(^|[\\s(])/.source + symbol),\n\t\t\tlookbehind: true,\n\t\t\talias: 'variable'\n\t\t},\n\t\trest: language\n\t};\n\n\tvar forms = '\\\\S+(?:\\\\s+\\\\S+)*';\n\n\tvar arglist = {\n\t\tpattern: RegExp(par + nestedPar + endpar),\n\t\tlookbehind: true,\n\t\tinside: {\n\t\t\t'rest-vars': {\n\t\t\t\tpattern: RegExp('&(?:body|rest)\\\\s+' + forms),\n\t\t\t\tinside: arg\n\t\t\t},\n\t\t\t'other-marker-vars': {\n\t\t\t\tpattern: RegExp('&(?:aux|optional)\\\\s+' + forms),\n\t\t\t\tinside: arg\n\t\t\t},\n\t\t\tkeys: {\n\t\t\t\tpattern: RegExp('&key\\\\s+' + forms + '(?:\\\\s+&allow-other-keys)?'),\n\t\t\t\tinside: arg\n\t\t\t},\n\t\t\targument: {\n\t\t\t\tpattern: RegExp(symbol),\n\t\t\t\talias: 'variable'\n\t\t\t},\n\t\t\tpunctuation: /[()]/\n\t\t}\n\t};\n\n\tlanguage['lambda'].inside.arguments = arglist;\n\tlanguage['defun'].inside.arguments = Prism.util.clone(arglist);\n\tlanguage['defun'].inside.arguments.inside.sublist = arglist;\n\n\tPrism.languages.lisp = language;\n\tPrism.languages.elisp = language;\n\tPrism.languages.emacs = language;\n\tPrism.languages['emacs-lisp'] = language;\n}(Prism));\n/components/prism-agda.min.js\u0002!function(t){t.languages.agda={comment:/\\{-[\\s\\S]*?(?:-\\}|$)|--.*/,string:{pattern:/\"(?:\\\\(?:\\r\\n|[\\s\\S])|[^\\\\\\r\\n\"])*\"/,greedy:!0},punctuation:/[(){}⦃⦄.;@]/,\"class-name\":{pattern:/((?:data|record) +)\\S+/,lookbehind:!0},function:{pattern:/(^[ \\t]*)(?!\\s)[^:\\r\\n]+(?=:)/m,lookbehind:!0},operator:{pattern:/(^\\s*|\\s)(?:[=|:∀→λ\\\\?_]|->)(?=\\s)/,lookbehind:!0},keyword:/\\b(?:Set|abstract|constructor|data|eta-equality|field|forall|hiding|import|in|inductive|infix|infixl|infixr|instance|let|macro|module|mutual|no-eta-equality|open|overlap|pattern|postulate|primitive|private|public|quote|quoteContext|quoteGoal|quoteTerm|record|renaming|rewrite|syntax|tactic|unquote|unquoteDecl|unquoteDef|using|variable|where|with)\\b/}}(Prism);%/components/prism-actionscript.min.js\u0003PPrism.languages.actionscript=Prism.languages.extend(\"javascript\",{keyword:/\\b(?:as|break|case|catch|class|const|default|delete|do|dynamic|each|else|extends|final|finally|for|function|get|if|implements|import|in|include|instanceof|interface|internal|is|namespace|native|new|null|override|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|use|var|void|while|with)\\b/,operator:/\\+\\+|--|(?:[+\\-*\\/%^]|&&?|\\|\\|?|<<?|>>?>?|[!=]=?)=?|[~?@]/}),Prism.languages.actionscript[\"class-name\"].alias=\"function\",delete Prism.languages.actionscript.parameter,delete Prism.languages.actionscript[\"literal-property\"],Prism.languages.markup&&Prism.languages.insertBefore(\"actionscript\",\"string\",{xml:{pattern:/(^|[^.])<\\/?\\w+(?:\\s+[^\\s>\\/=]+=(\"|')(?:\\\\[\\s\\S]|(?!\\2)[^\\\\])*\\2)*\\s*\\/?>/,lookbehind:!0,inside:Prism.languages.markup}}); /components/prism-lolcode.min.js\u0004Prism.languages.lolcode={comment:[/\\bOBTW\\s[\\s\\S]*?\\sTLDR\\b/,/\\bBTW.+/],string:{pattern:/\"(?::.|[^\":])*\"/,inside:{variable:/:\\{[^}]+\\}/,symbol:[/:\\([a-f\\d]+\\)/i,/:\\[[^\\]]+\\]/,/:[)>o\":]/]},greedy:!0},number:/(?:\\B-)?(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)/,symbol:{pattern:/(^|\\s)(?:A )?(?:BUKKIT|NOOB|NUMBAR|NUMBR|TROOF|YARN)(?=\\s|,|$)/,lookbehind:!0,inside:{keyword:/A(?=\\s)/}},label:{pattern:/((?:^|\\s)(?:IM IN YR|IM OUTTA YR) )[a-zA-Z]\\w*/,lookbehind:!0,alias:\"string\"},function:{pattern:/((?:^|\\s)(?:HOW IZ I|I IZ|IZ) )[a-zA-Z]\\w*/,lookbehind:!0},keyword:[{pattern:/(^|\\s)(?:AN|FOUND YR|GIMMEH|GTFO|HAI|HAS A|HOW IZ I|I HAS A|I IZ|IF U SAY SO|IM IN YR|IM OUTTA YR|IS NOW(?: A)?|ITZ(?: A)?|IZ|KTHX|KTHXBYE|LIEK(?: A)?|MAEK|MEBBE|MKAY|NERFIN|NO WAI|O HAI IM|O RLY\\?|OIC|OMG|OMGWTF|R|SMOOSH|SRS|TIL|UPPIN|VISIBLE|WILE|WTF\\?|YA RLY|YR)(?=\\s|,|$)/,lookbehind:!0},/'Z(?=\\s|,|$)/],boolean:{pattern:/(^|\\s)(?:FAIL|WIN)(?=\\s|,|$)/,lookbehind:!0},variable:{pattern:/(^|\\s)IT(?=\\s|,|$)/,lookbehind:!0},operator:{pattern:/(^|\\s)(?:NOT|BOTH SAEM|DIFFRINT|(?:ALL|ANY|BIGGR|BOTH|DIFF|EITHER|MOD|PRODUKT|QUOSHUNT|SMALLR|SUM|WON) OF)(?=\\s|,|$)/,lookbehind:!0},punctuation:/\\.{3}|…|,|!/};/components/prism-arturo.js\u000e(function (Prism) {\n\t/**\n\t * @param {string} lang\n\t * @param {string} pattern\n\t */\n\tvar createLanguageString = function (lang, pattern) {\n\t\treturn {\n\t\t\tpattern: RegExp(/\\{!/.source + '(?:' + (pattern || lang) + ')' + /$[\\s\\S]*\\}/.source, 'm'),\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'embedded': {\n\t\t\t\t\tpattern: /(^\\{!\\w+\\b)[\\s\\S]+(?=\\}$)/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\talias: 'language-' + lang,\n\t\t\t\t\tinside: Prism.languages[lang]\n\t\t\t\t},\n\t\t\t\t'string': /[\\s\\S]+/\n\t\t\t}\n\t\t};\n\t};\n\n\tPrism.languages.arturo = {\n\t\t'comment': {\n\t\t\tpattern: /;.*/,\n\t\t\tgreedy: true\n\t\t},\n\n\t\t'character': {\n\t\t\tpattern: /`.`/,\n\t\t\talias: 'char',\n\t\t\tgreedy: true\n\t\t},\n\n\t\t'number': {\n\t\t\tpattern: /\\b\\d+(?:\\.\\d+(?:\\.\\d+(?:-[\\w+-]+)?)?)?\\b/,\n\t\t},\n\n\t\t'string': {\n\t\t\tpattern: /\"(?:[^\"\\\\\\r\\n]|\\\\.)*\"/,\n\t\t\tgreedy: true\n\t\t},\n\n\t\t'regex': {\n\t\t\tpattern: /\\{\\/.*?\\/\\}/,\n\t\t\tgreedy: true\n\t\t},\n\n\t\t'html-string': createLanguageString('html'),\n\t\t'css-string': createLanguageString('css'),\n\t\t'js-string': createLanguageString('js'),\n\t\t'md-string': createLanguageString('md'),\n\t\t'sql-string': createLanguageString('sql'),\n\t\t'sh-string': createLanguageString('shell', 'sh'),\n\n\t\t'multistring': {\n\t\t\tpattern: /».*|\\{:[\\s\\S]*?:\\}|\\{[\\s\\S]*?\\}|^-{6}$[\\s\\S]*/m,\n\t\t\talias: 'string',\n\t\t\tgreedy: true\n\t\t},\n\n\t\t'label': {\n\t\t\tpattern: /\\w+\\b\\??:/,\n\t\t\talias: 'property'\n\t\t},\n\n\t\t'literal': {\n\t\t\tpattern: /'(?:\\w+\\b\\??:?)/,\n\t\t\talias: 'constant'\n\t\t},\n\n\t\t'type': {\n\t\t\tpattern: /:(?:\\w+\\b\\??:?)/,\n\t\t\talias: 'class-name'\n\t\t},\n\n\t\t'color': /#\\w+/,\n\n\t\t'predicate': {\n\t\t\tpattern: /\\b(?:all|and|any|ascii|attr|attribute|attributeLabel|binary|block|char|contains|database|date|dictionary|empty|equal|even|every|exists|false|floating|function|greater|greaterOrEqual|if|in|inline|integer|is|key|label|leap|less|lessOrEqual|literal|logical|lower|nand|negative|nor|not|notEqual|null|numeric|odd|or|path|pathLabel|positive|prefix|prime|regex|same|set|some|sorted|standalone|string|subset|suffix|superset|symbol|symbolLiteral|true|try|type|unless|upper|when|whitespace|word|xnor|xor|zero)\\?/,\n\t\t\talias: 'keyword'\n\t\t},\n\n\t\t'builtin-function': {\n\t\t\tpattern: /\\b(?:abs|acos|acosh|acsec|acsech|actan|actanh|add|after|alert|alias|and|angle|append|arg|args|arity|array|as|asec|asech|asin|asinh|atan|atan2|atanh|attr|attrs|average|before|benchmark|blend|break|call|capitalize|case|ceil|chop|clear|clip|close|color|combine|conj|continue|copy|cos|cosh|crc|csec|csech|ctan|ctanh|cursor|darken|dec|decode|define|delete|desaturate|deviation|dialog|dictionary|difference|digest|digits|div|do|download|drop|dup|e|else|empty|encode|ensure|env|escape|execute|exit|exp|extend|extract|factors|fdiv|filter|first|flatten|floor|fold|from|function|gamma|gcd|get|goto|hash|hypot|if|inc|indent|index|infinity|info|input|insert|inspect|intersection|invert|jaro|join|keys|kurtosis|last|let|levenshtein|lighten|list|ln|log|loop|lower|mail|map|match|max|median|min|mod|module|mul|nand|neg|new|nor|normalize|not|now|null|open|or|outdent|pad|palette|panic|path|pause|permissions|permutate|pi|pop|popup|pow|powerset|powmod|prefix|print|prints|process|product|query|random|range|read|relative|remove|rename|render|repeat|replace|request|return|reverse|round|sample|saturate|script|sec|sech|select|serve|set|shl|shr|shuffle|sin|sinh|size|skewness|slice|sort|spin|split|sqrt|squeeze|stack|strip|sub|suffix|sum|switch|symbols|symlink|sys|take|tan|tanh|terminal|terminate|to|truncate|try|type|unclip|union|unique|unless|until|unzip|upper|values|var|variance|volume|webview|while|with|wordwrap|write|xnor|xor|zip)\\b/,\n\t\t\talias: 'keyword'\n\t\t},\n\n\t\t'sugar': {\n\t\t\tpattern: /->|=>|\\||::/,\n\t\t\talias: 'operator'\n\t\t},\n\n\t\t'punctuation': /[()[\\],]/,\n\n\t\t'symbol': {\n\t\t\tpattern: /<:|-:|ø|@|#|\\+|\\||\\*|\\$|---|-|%|\\/|\\.\\.|\\^|~|=|<|>|\\\\/\n\t\t},\n\n\t\t'boolean': {\n\t\t\tpattern: /\\b(?:false|maybe|true)\\b/\n\t\t}\n\t};\n\n\tPrism.languages.art = Prism.languages['arturo'];\n}(Prism));\n-/components/prism-firestore-security-rules.js\u0003Prism.languages['firestore-security-rules'] = Prism.languages.extend('clike', {\n\t'comment': /\\/\\/.*/,\n\t'keyword': /\\b(?:allow|function|if|match|null|return|rules_version|service)\\b/,\n\t'operator': /&&|\\|\\||[<>!=]=?|[-+*/%]|\\b(?:in|is)\\b/,\n});\n\ndelete Prism.languages['firestore-security-rules']['class-name'];\n\nPrism.languages.insertBefore('firestore-security-rules', 'keyword', {\n\t'path': {\n\t\tpattern: /(^|[\\s(),])(?:\\/(?:[\\w\\xA0-\\uFFFF]+|\\{[\\w\\xA0-\\uFFFF]+(?:=\\*\\*)?\\}|\\$\\([\\w\\xA0-\\uFFFF.]+\\)))+/,\n\t\tlookbehind: true,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'variable': {\n\t\t\t\tpattern: /\\{[\\w\\xA0-\\uFFFF]+(?:=\\*\\*)?\\}|\\$\\([\\w\\xA0-\\uFFFF.]+\\)/,\n\t\t\t\tinside: {\n\t\t\t\t\t'operator': /=/,\n\t\t\t\t\t'keyword': /\\*\\*/,\n\t\t\t\t\t'punctuation': /[.$(){}]/\n\t\t\t\t}\n\t\t\t},\n\t\t\t'punctuation': /\\//\n\t\t}\n\t},\n\t'method': {\n\t\t// to make the pattern shorter, the actual method names are omitted\n\t\tpattern: /(\\ballow\\s+)[a-z]+(?:\\s*,\\s*[a-z]+)*(?=\\s*[:;])/,\n\t\tlookbehind: true,\n\t\talias: 'builtin',\n\t\tinside: {\n\t\t\t'punctuation': /,/\n\t\t}\n\t},\n});\n\"/components/prism-go-module.min.js\u0001Prism.languages[\"go-mod\"]=Prism.languages[\"go-module\"]={comment:{pattern:/\\/\\/.*/,greedy:!0},version:{pattern:/(^|[\\s()[\\],])v\\d+\\.\\d+\\.\\d+(?:[+-][-+.\\w]*)?(?![^\\s()[\\],])/,lookbehind:!0,alias:\"number\"},\"go-version\":{pattern:/((?:^|\\s)go\\s+)\\d+(?:\\.\\d+){1,2}/,lookbehind:!0,alias:\"number\"},keyword:{pattern:/^([ \\t]*)(?:exclude|go|module|replace|require|retract)\\b/m,lookbehind:!0},operator:/=>/,punctuation:/[()[\\],]/};#/components/prism-typescript.min.js\u0005\u000e!function(e){e.languages.typescript=e.languages.extend(\"javascript\",{\"class-name\":{pattern:/(\\b(?:class|extends|implements|instanceof|interface|new|type)\\s+)(?!keyof\\b)(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?:\\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},builtin:/\\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\\b/}),e.languages.typescript.keyword.push(/\\b(?:abstract|declare|is|keyof|readonly|require)\\b/,/\\b(?:asserts|infer|interface|module|namespace|type)\\b(?=\\s*(?:[{_$a-zA-Z\\xA0-\\uFFFF]|$))/,/\\btype\\b(?=\\s*(?:[\\{*]|$))/),delete e.languages.typescript.parameter,delete e.languages.typescript[\"literal-property\"];var s=e.languages.extend(\"typescript\",{});delete s[\"class-name\"],e.languages.typescript[\"class-name\"].inside=s,e.languages.insertBefore(\"typescript\",\"function\",{decorator:{pattern:/@[$\\w\\xA0-\\uFFFF]+/,inside:{at:{pattern:/^@/,alias:\"operator\"},function:/^[\\s\\S]+/}},\"generic-function\":{pattern:/#?(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*\\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\\s*\\()/,greedy:!0,inside:{function:/^#?(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*/,generic:{pattern:/<[\\s\\S]+/,alias:\"class-name\",inside:s}}}}),e.languages.ts=e.languages.typescript}(Prism);/components/prism-phpdoc.min.js\u0002!function(a){var e=\"(?:\\\\b[a-zA-Z]\\\\w*|[|\\\\\\\\[\\\\]])+\";a.languages.phpdoc=a.languages.extend(\"javadoclike\",{parameter:{pattern:RegExp(\"(@(?:global|param|property(?:-read|-write)?|var)\\\\s+(?:\"+e+\"\\\\s+)?)\\\\$\\\\w+\"),lookbehind:!0}}),a.languages.insertBefore(\"phpdoc\",\"keyword\",{\"class-name\":[{pattern:RegExp(\"(@(?:global|package|param|property(?:-read|-write)?|return|subpackage|throws|var)\\\\s+)\"+e),lookbehind:!0,inside:{keyword:/\\b(?:array|bool|boolean|callback|double|false|float|int|integer|mixed|null|object|resource|self|string|true|void)\\b/,punctuation:/[|\\\\[\\]()]/}}]}),a.languages.javadoclike.addSupport(\"php\",a.languages.phpdoc)}(Prism);/components/prism-mermaid.js\f\"Prism.languages.mermaid = {\n\t'comment': {\n\t\tpattern: /%%.*/,\n\t\tgreedy: true\n\t},\n\n\t'style': {\n\t\tpattern: /^([ \\t]*(?:classDef|linkStyle|style)[ \\t]+[\\w$-]+[ \\t]+)\\w.*[^\\s;]/m,\n\t\tlookbehind: true,\n\t\tinside: {\n\t\t\t'property': /\\b\\w[\\w-]*(?=[ \\t]*:)/,\n\t\t\t'operator': /:/,\n\t\t\t'punctuation': /,/\n\t\t}\n\t},\n\n\t'inter-arrow-label': {\n\t\tpattern: /([^<>ox.=-])(?:-[-.]|==)(?![<>ox.=-])[ \\t]*(?:\"[^\"\\r\\n]*\"|[^\\s\".=-](?:[^\\r\\n.=-]*[^\\s.=-])?)[ \\t]*(?:\\.+->?|--+[->]|==+[=>])(?![<>ox.=-])/,\n\t\tlookbehind: true,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'arrow': {\n\t\t\t\tpattern: /(?:\\.+->?|--+[->]|==+[=>])$/,\n\t\t\t\talias: 'operator'\n\t\t\t},\n\t\t\t'label': {\n\t\t\t\tpattern: /^([\\s\\S]{2}[ \\t]*)\\S(?:[\\s\\S]*\\S)?/,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'property'\n\t\t\t},\n\t\t\t'arrow-head': {\n\t\t\t\tpattern: /^\\S+/,\n\t\t\t\talias: ['arrow', 'operator']\n\t\t\t}\n\t\t}\n\t},\n\n\t'arrow': [\n\t\t// This might look complex but it really isn't.\n\t\t// There are many possible arrows (see tests) and it's impossible to fit all of them into one pattern. The\n\t\t// problem is that we only have one lookbehind per pattern. However, we cannot disallow too many arrow\n\t\t// characters in the one lookbehind because that would create too many false negatives. So we have to split the\n\t\t// arrows into different patterns.\n\t\t{\n\t\t\t// ER diagram\n\t\t\tpattern: /(^|[^{}|o.-])[|}][|o](?:--|\\.\\.)[|o][|{](?![{}|o.-])/,\n\t\t\tlookbehind: true,\n\t\t\talias: 'operator'\n\t\t},\n\t\t{\n\t\t\t// flow chart\n\t\t\t// (?:==+|--+|-\\.*-)\n\t\t\tpattern: /(^|[^<>ox.=-])(?:[<ox](?:==+|--+|-\\.*-)[>ox]?|(?:==+|--+|-\\.*-)[>ox]|===+|---+|-\\.+-)(?![<>ox.=-])/,\n\t\t\tlookbehind: true,\n\t\t\talias: 'operator'\n\t\t},\n\t\t{\n\t\t\t// sequence diagram\n\t\t\tpattern: /(^|[^<>()x-])(?:--?(?:>>|[x>)])(?![<>()x])|(?:<<|[x<(])--?(?!-))/,\n\t\t\tlookbehind: true,\n\t\t\talias: 'operator'\n\t\t},\n\t\t{\n\t\t\t// class diagram\n\t\t\tpattern: /(^|[^<>|*o.-])(?:[*o]--|--[*o]|<\\|?(?:--|\\.\\.)|(?:--|\\.\\.)\\|?>|--|\\.\\.)(?![<>|*o.-])/,\n\t\t\tlookbehind: true,\n\t\t\talias: 'operator'\n\t\t},\n\t],\n\n\t'label': {\n\t\tpattern: /(^|[^|<])\\|(?:[^\\r\\n\"|]|\"[^\"\\r\\n]*\")+\\|/,\n\t\tlookbehind: true,\n\t\tgreedy: true,\n\t\talias: 'property'\n\t},\n\n\t'text': {\n\t\tpattern: /(?:[(\\[{]+|\\b>)(?:[^\\r\\n\"()\\[\\]{}]|\"[^\"\\r\\n]*\")+(?:[)\\]}]+|>)/,\n\t\talias: 'string'\n\t},\n\t'string': {\n\t\tpattern: /\"[^\"\\r\\n]*\"/,\n\t\tgreedy: true\n\t},\n\n\t'annotation': {\n\t\tpattern: /<<(?:abstract|choice|enumeration|fork|interface|join|service)>>|\\[\\[(?:choice|fork|join)\\]\\]/i,\n\t\talias: 'important'\n\t},\n\n\t'keyword': [\n\t\t// This language has both case-sensitive and case-insensitive keywords\n\t\t{\n\t\t\tpattern: /(^[ \\t]*)(?:action|callback|class|classDef|classDiagram|click|direction|erDiagram|flowchart|gantt|gitGraph|graph|journey|link|linkStyle|pie|requirementDiagram|sequenceDiagram|stateDiagram|stateDiagram-v2|style|subgraph)(?![\\w$-])/m,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true\n\t\t},\n\t\t{\n\t\t\tpattern: /(^[ \\t]*)(?:activate|alt|and|as|autonumber|deactivate|else|end(?:[ \\t]+note)?|loop|opt|par|participant|rect|state|note[ \\t]+(?:over|(?:left|right)[ \\t]+of))(?![\\w$-])/im,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true\n\t\t}\n\t],\n\n\t'entity': /#[a-z0-9]+;/,\n\n\t'operator': {\n\t\tpattern: /(\\w[ \\t]*)&(?=[ \\t]*\\w)|:::|:/,\n\t\tlookbehind: true\n\t},\n\t'punctuation': /[(){};]/\n};\n#/components/prism-autohotkey.min.js\".Prism.languages.autohotkey={comment:[{pattern:/(^|\\s);.*/,lookbehind:!0},{pattern:/(^[\\t ]*)\\/\\*(?:[\\r\\n](?![ \\t]*\\*\\/)|[^\\r\\n])*(?:[\\r\\n][ \\t]*\\*\\/)?/m,lookbehind:!0,greedy:!0}],tag:{pattern:/^([ \\t]*)[^\\s,`\":]+(?=:[ \\t]*$)/m,lookbehind:!0},string:/\"(?:[^\"\\n\\r]|\"\")*\"/,variable:/%\\w+%/,number:/\\b0x[\\dA-Fa-f]+\\b|(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:[Ee]-?\\d+)?/,operator:/\\?|\\/\\/?=?|:=|\\|[=|]?|&[=&]?|\\+[=+]?|-[=-]?|\\*[=*]?|<(?:<=?|>|=)?|>>?=?|[.^!=~]=?|\\b(?:AND|NOT|OR)\\b/,boolean:/\\b(?:false|true)\\b/,command:{pattern:/\\b(?:AutoTrim|BlockInput|Break|Click|ClipWait|Continue|Control|ControlClick|ControlFocus|ControlGet|ControlGetFocus|ControlGetPos|ControlGetText|ControlMove|ControlSend|ControlSendRaw|ControlSetText|CoordMode|Critical|DetectHiddenText|DetectHiddenWindows|Drive|DriveGet|DriveSpaceFree|EnvAdd|EnvDiv|EnvGet|EnvMult|EnvSet|EnvSub|EnvUpdate|Exit|ExitApp|FileAppend|FileCopy|FileCopyDir|FileCreateDir|FileCreateShortcut|FileDelete|FileEncoding|FileGetAttrib|FileGetShortcut|FileGetSize|FileGetTime|FileGetVersion|FileInstall|FileMove|FileMoveDir|FileRead|FileReadLine|FileRecycle|FileRecycleEmpty|FileRemoveDir|FileSelectFile|FileSelectFolder|FileSetAttrib|FileSetTime|FormatTime|GetKeyState|Gosub|Goto|GroupActivate|GroupAdd|GroupClose|GroupDeactivate|Gui|GuiControl|GuiControlGet|Hotkey|ImageSearch|IniDelete|IniRead|IniWrite|Input|InputBox|KeyWait|ListHotkeys|ListLines|ListVars|Loop|Menu|MouseClick|MouseClickDrag|MouseGetPos|MouseMove|MsgBox|OnExit|OutputDebug|Pause|PixelGetColor|PixelSearch|PostMessage|Process|Progress|Random|RegDelete|RegRead|RegWrite|Reload|Repeat|Return|Run|RunAs|RunWait|Send|SendEvent|SendInput|SendMessage|SendMode|SendPlay|SendRaw|SetBatchLines|SetCapslockState|SetControlDelay|SetDefaultMouseSpeed|SetEnv|SetFormat|SetKeyDelay|SetMouseDelay|SetNumlockState|SetRegView|SetScrollLockState|SetStoreCapslockMode|SetTimer|SetTitleMatchMode|SetWinDelay|SetWorkingDir|Shutdown|Sleep|Sort|SoundBeep|SoundGet|SoundGetWaveVolume|SoundPlay|SoundSet|SoundSetWaveVolume|SplashImage|SplashTextOff|SplashTextOn|SplitPath|StatusBarGetText|StatusBarWait|StringCaseSense|StringGetPos|StringLeft|StringLen|StringLower|StringMid|StringReplace|StringRight|StringSplit|StringTrimLeft|StringTrimRight|StringUpper|Suspend|SysGet|Thread|ToolTip|Transform|TrayTip|URLDownloadToFile|WinActivate|WinActivateBottom|WinClose|WinGet|WinGetActiveStats|WinGetActiveTitle|WinGetClass|WinGetPos|WinGetText|WinGetTitle|WinHide|WinKill|WinMaximize|WinMenuSelectItem|WinMinimize|WinMinimizeAll|WinMinimizeAllUndo|WinMove|WinRestore|WinSet|WinSetTitle|WinShow|WinWait|WinWaitActive|WinWaitClose|WinWaitNotActive)\\b/i,alias:\"selector\"},constant:/\\b(?:a_ahkpath|a_ahkversion|a_appdata|a_appdatacommon|a_autotrim|a_batchlines|a_caretx|a_carety|a_computername|a_controldelay|a_cursor|a_dd|a_ddd|a_dddd|a_defaultmousespeed|a_desktop|a_desktopcommon|a_detecthiddentext|a_detecthiddenwindows|a_endchar|a_eventinfo|a_exitreason|a_fileencoding|a_formatfloat|a_formatinteger|a_gui|a_guicontrol|a_guicontrolevent|a_guievent|a_guiheight|a_guiwidth|a_guix|a_guiy|a_hour|a_iconfile|a_iconhidden|a_iconnumber|a_icontip|a_index|a_ipaddress1|a_ipaddress2|a_ipaddress3|a_ipaddress4|a_is64bitos|a_isadmin|a_iscompiled|a_iscritical|a_ispaused|a_issuspended|a_isunicode|a_keydelay|a_language|a_lasterror|a_linefile|a_linenumber|a_loopfield|a_loopfileattrib|a_loopfiledir|a_loopfileext|a_loopfilefullpath|a_loopfilelongpath|a_loopfilename|a_loopfileshortname|a_loopfileshortpath|a_loopfilesize|a_loopfilesizekb|a_loopfilesizemb|a_loopfiletimeaccessed|a_loopfiletimecreated|a_loopfiletimemodified|a_loopreadline|a_loopregkey|a_loopregname|a_loopregsubkey|a_loopregtimemodified|a_loopregtype|a_mday|a_min|a_mm|a_mmm|a_mmmm|a_mon|a_mousedelay|a_msec|a_mydocuments|a_now|a_nowutc|a_numbatchlines|a_ostype|a_osversion|a_priorhotkey|a_priorkey|a_programfiles|a_programs|a_programscommon|a_ptrsize|a_regview|a_screendpi|a_screenheight|a_screenwidth|a_scriptdir|a_scriptfullpath|a_scripthwnd|a_scriptname|a_sec|a_space|a_startmenu|a_startmenucommon|a_startup|a_startupcommon|a_stringcasesense|a_tab|a_temp|a_thisfunc|a_thishotkey|a_thislabel|a_thismenu|a_thismenuitem|a_thismenuitempos|a_tickcount|a_timeidle|a_timeidlephysical|a_timesincepriorhotkey|a_timesincethishotkey|a_titlematchmode|a_titlematchmodespeed|a_username|a_wday|a_windelay|a_windir|a_workingdir|a_yday|a_year|a_yweek|a_yyyy|clipboard|clipboardall|comspec|errorlevel|programfiles)\\b/i,builtin:/\\b(?:abs|acos|asc|asin|atan|ceil|chr|class|comobjactive|comobjarray|comobjconnect|comobjcreate|comobjerror|comobjflags|comobjget|comobjquery|comobjtype|comobjvalue|cos|dllcall|exp|fileexist|Fileopen|floor|format|il_add|il_create|il_destroy|instr|isfunc|islabel|IsObject|ln|log|ltrim|lv_add|lv_delete|lv_deletecol|lv_getcount|lv_getnext|lv_gettext|lv_insert|lv_insertcol|lv_modify|lv_modifycol|lv_setimagelist|mod|numget|numput|onmessage|regexmatch|regexreplace|registercallback|round|rtrim|sb_seticon|sb_setparts|sb_settext|sin|sqrt|strlen|strreplace|strsplit|substr|tan|tv_add|tv_delete|tv_get|tv_getchild|tv_getcount|tv_getnext|tv_getparent|tv_getprev|tv_getselection|tv_gettext|tv_modify|varsetcapacity|winactive|winexist|__Call|__Get|__New|__Set)\\b/i,symbol:/\\b(?:alt|altdown|altup|appskey|backspace|browser_back|browser_favorites|browser_forward|browser_home|browser_refresh|browser_search|browser_stop|bs|capslock|ctrl|ctrlbreak|ctrldown|ctrlup|del|delete|down|end|enter|esc|escape|f1|f10|f11|f12|f13|f14|f15|f16|f17|f18|f19|f2|f20|f21|f22|f23|f24|f3|f4|f5|f6|f7|f8|f9|home|ins|insert|joy1|joy10|joy11|joy12|joy13|joy14|joy15|joy16|joy17|joy18|joy19|joy2|joy20|joy21|joy22|joy23|joy24|joy25|joy26|joy27|joy28|joy29|joy3|joy30|joy31|joy32|joy4|joy5|joy6|joy7|joy8|joy9|joyaxes|joybuttons|joyinfo|joyname|joypov|joyr|joyu|joyv|joyx|joyy|joyz|lalt|launch_app1|launch_app2|launch_mail|launch_media|lbutton|lcontrol|lctrl|left|lshift|lwin|lwindown|lwinup|mbutton|media_next|media_play_pause|media_prev|media_stop|numlock|numpad0|numpad1|numpad2|numpad3|numpad4|numpad5|numpad6|numpad7|numpad8|numpad9|numpadadd|numpadclear|numpaddel|numpaddiv|numpaddot|numpaddown|numpadend|numpadenter|numpadhome|numpadins|numpadleft|numpadmult|numpadpgdn|numpadpgup|numpadright|numpadsub|numpadup|pgdn|pgup|printscreen|ralt|rbutton|rcontrol|rctrl|right|rshift|rwin|rwindown|rwinup|scrolllock|shift|shiftdown|shiftup|space|tab|up|volume_down|volume_mute|volume_up|wheeldown|wheelleft|wheelright|wheelup|xbutton1|xbutton2)\\b/i,directive:{pattern:/#[a-z]+\\b/i,alias:\"important\"},keyword:/\\b(?:Abort|AboveNormal|Add|ahk_class|ahk_exe|ahk_group|ahk_id|ahk_pid|All|Alnum|Alpha|AltSubmit|AltTab|AltTabAndMenu|AltTabMenu|AltTabMenuDismiss|AlwaysOnTop|AutoSize|Background|BackgroundTrans|BelowNormal|between|BitAnd|BitNot|BitOr|BitShiftLeft|BitShiftRight|BitXOr|Bold|Border|Button|ByRef|Catch|Checkbox|Checked|CheckedGray|Choose|ChooseString|Close|Color|ComboBox|Contains|ControlList|Count|Date|DateTime|Days|DDL|Default|DeleteAll|Delimiter|Deref|Destroy|Digit|Disable|Disabled|DropDownList|Edit|Eject|Else|Enable|Enabled|Error|Exist|Expand|ExStyle|FileSystem|Finally|First|Flash|Float|FloatFast|Focus|Font|for|global|Grid|Group|GroupBox|GuiClose|GuiContextMenu|GuiDropFiles|GuiEscape|GuiSize|Hdr|Hidden|Hide|High|HKCC|HKCR|HKCU|HKEY_CLASSES_ROOT|HKEY_CURRENT_CONFIG|HKEY_CURRENT_USER|HKEY_LOCAL_MACHINE|HKEY_USERS|HKLM|HKU|Hours|HScroll|Icon|IconSmall|ID|IDLast|If|IfEqual|IfExist|IfGreater|IfGreaterOrEqual|IfInString|IfLess|IfLessOrEqual|IfMsgBox|IfNotEqual|IfNotExist|IfNotInString|IfWinActive|IfWinExist|IfWinNotActive|IfWinNotExist|Ignore|ImageList|in|Integer|IntegerFast|Interrupt|is|italic|Join|Label|LastFound|LastFoundExist|Limit|Lines|List|ListBox|ListView|local|Lock|Logoff|Low|Lower|Lowercase|MainWindow|Margin|Maximize|MaximizeBox|MaxSize|Minimize|MinimizeBox|MinMax|MinSize|Minutes|MonthCal|Mouse|Move|Multi|NA|No|NoActivate|NoDefault|NoHide|NoIcon|NoMainWindow|norm|Normal|NoSort|NoSortHdr|NoStandard|Not|NoTab|NoTimers|Number|Off|Ok|On|OwnDialogs|Owner|Parse|Password|Picture|Pixel|Pos|Pow|Priority|ProcessName|Radio|Range|Read|ReadOnly|Realtime|Redraw|Region|REG_BINARY|REG_DWORD|REG_EXPAND_SZ|REG_MULTI_SZ|REG_SZ|Relative|Rename|Report|Resize|Restore|Retry|RGB|Screen|Seconds|Section|Serial|SetLabel|ShiftAltTab|Show|Single|Slider|SortDesc|Standard|static|Status|StatusBar|StatusCD|strike|Style|Submit|SysMenu|Tab2|TabStop|Text|Theme|Throw|Tile|ToggleCheck|ToggleEnable|ToolWindow|Top|Topmost|TransColor|Transparent|Tray|TreeView|Try|TryAgain|Type|UnCheck|underline|Unicode|Unlock|Until|UpDown|Upper|Uppercase|UseErrorLevel|Vis|VisFirst|Visible|VScroll|Wait|WaitClose|WantCtrlA|WantF2|WantReturn|While|Wrap|Xdigit|xm|xp|xs|Yes|ym|yp|ys)\\b/i,function:/[^(); \\t,\\n+*\\-=?>:\\\\\\/<&%\\[\\]]+(?=\\()/,punctuation:/[{}[\\]():,]/};/components/prism-cpp.js\u000f(function (Prism) {\n\n\tvar keyword = /\\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\\b/;\n\tvar modName = /\\b(?!<keyword>)\\w+(?:\\s*\\.\\s*\\w+)*\\b/.source.replace(/<keyword>/g, function () { return keyword.source; });\n\n\tPrism.languages.cpp = Prism.languages.extend('c', {\n\t\t'class-name': [\n\t\t\t{\n\t\t\t\tpattern: RegExp(/(\\b(?:class|concept|enum|struct|typename)\\s+)(?!<keyword>)\\w+/.source\n\t\t\t\t\t.replace(/<keyword>/g, function () { return keyword.source; })),\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\t// This is intended to capture the class name of method implementations like:\n\t\t\t//   void foo::bar() const {}\n\t\t\t// However! The `foo` in the above example could also be a namespace, so we only capture the class name if\n\t\t\t// it starts with an uppercase letter. This approximation should give decent results.\n\t\t\t/\\b[A-Z]\\w*(?=\\s*::\\s*\\w+\\s*\\()/,\n\t\t\t// This will capture the class name before destructors like:\n\t\t\t//   Foo::~Foo() {}\n\t\t\t/\\b[A-Z_]\\w*(?=\\s*::\\s*~\\w+\\s*\\()/i,\n\t\t\t// This also intends to capture the class name of method implementations but here the class has template\n\t\t\t// parameters, so it can't be a namespace (until C++ adds generic namespaces).\n\t\t\t/\\b\\w+(?=\\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\\s*::\\s*\\w+\\s*\\()/\n\t\t],\n\t\t'keyword': keyword,\n\t\t'number': {\n\t\t\tpattern: /(?:\\b0b[01']+|\\b0x(?:[\\da-f']+(?:\\.[\\da-f']*)?|\\.[\\da-f']+)(?:p[+-]?[\\d']+)?|(?:\\b[\\d']+(?:\\.[\\d']*)?|\\B\\.[\\d']+)(?:e[+-]?[\\d']+)?)[ful]{0,4}/i,\n\t\t\tgreedy: true\n\t\t},\n\t\t'operator': />>=?|<<=?|->|--|\\+\\+|&&|\\|\\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\\b/,\n\t\t'boolean': /\\b(?:false|true)\\b/\n\t});\n\n\tPrism.languages.insertBefore('cpp', 'string', {\n\t\t'module': {\n\t\t\t// https://en.cppreference.com/w/cpp/language/modules\n\t\t\tpattern: RegExp(\n\t\t\t\t/(\\b(?:import|module)\\s+)/.source +\n\t\t\t\t'(?:' +\n\t\t\t\t// header-name\n\t\t\t\t/\"(?:\\\\(?:\\r\\n|[\\s\\S])|[^\"\\\\\\r\\n])*\"|<[^<>\\r\\n]*>/.source +\n\t\t\t\t'|' +\n\t\t\t\t// module name or partition or both\n\t\t\t\t/<mod-name>(?:\\s*:\\s*<mod-name>)?|:\\s*<mod-name>/.source.replace(/<mod-name>/g, function () { return modName; }) +\n\t\t\t\t')'\n\t\t\t),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'string': /^[<\"][\\s\\S]+/,\n\t\t\t\t'operator': /:/,\n\t\t\t\t'punctuation': /\\./\n\t\t\t}\n\t\t},\n\t\t'raw-string': {\n\t\t\tpattern: /R\"([^()\\\\ ]{0,16})\\([\\s\\S]*?\\)\\1\"/,\n\t\t\talias: 'string',\n\t\t\tgreedy: true\n\t\t}\n\t});\n\n\tPrism.languages.insertBefore('cpp', 'keyword', {\n\t\t'generic-function': {\n\t\t\tpattern: /\\b(?!operator\\b)[a-z_]\\w*\\s*<(?:[^<>]|<[^<>]*>)*>(?=\\s*\\()/i,\n\t\t\tinside: {\n\t\t\t\t'function': /^\\w+/,\n\t\t\t\t'generic': {\n\t\t\t\t\tpattern: /<[\\s\\S]+/,\n\t\t\t\t\talias: 'class-name',\n\t\t\t\t\tinside: Prism.languages.cpp\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\tPrism.languages.insertBefore('cpp', 'operator', {\n\t\t'double-colon': {\n\t\t\tpattern: /::/,\n\t\t\talias: 'punctuation'\n\t\t}\n\t});\n\n\tPrism.languages.insertBefore('cpp', 'class-name', {\n\t\t// the base clause is an optional list of parent classes\n\t\t// https://en.cppreference.com/w/cpp/language/class\n\t\t'base-clause': {\n\t\t\tpattern: /(\\b(?:class|struct)\\s+\\w+\\s*:\\s*)[^;{}\"'\\s]+(?:\\s+[^;{}\"'\\s]+)*(?=\\s*[;{])/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: Prism.languages.extend('cpp', {})\n\t\t}\n\t});\n\n\tPrism.languages.insertBefore('inside', 'double-colon', {\n\t\t// All untokenized words that are not namespaces should be class names\n\t\t'class-name': /\\b[a-z_]\\w*\\b(?!\\s*::)/i\n\t}, Prism.languages.cpp['base-clause']);\n\n}(Prism));\n/components/prism-javascript.js\u0018Prism.languages.javascript = Prism.languages.extend('clike', {\n\t'class-name': [\n\t\tPrism.languages.clike['class-name'],\n\t\t{\n\t\t\tpattern: /(^|[^$\\w\\xA0-\\uFFFF])(?!\\s)[_$A-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\.(?:constructor|prototype))/,\n\t\t\tlookbehind: true\n\t\t}\n\t],\n\t'keyword': [\n\t\t{\n\t\t\tpattern: /((?:^|\\})\\s*)catch\\b/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^.]|\\.\\.\\.\\s*)\\b(?:as|assert(?=\\s*\\{)|async(?=\\s*(?:function\\b|\\(|[$\\w\\xA0-\\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\\s*(?:\\{|$))|for|from(?=\\s*(?:['\"]|$))|function|(?:get|set)(?=\\s*(?:[#\\[$\\w\\xA0-\\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\\b/,\n\t\t\tlookbehind: true\n\t\t},\n\t],\n\t// Allow for all non-ASCII characters (See http://stackoverflow.com/a/2008444)\n\t'function': /#?(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*(?:\\.\\s*(?:apply|bind|call)\\s*)?\\()/,\n\t'number': {\n\t\tpattern: RegExp(\n\t\t\t/(^|[^\\w$])/.source +\n\t\t\t'(?:' +\n\t\t\t(\n\t\t\t\t// constant\n\t\t\t\t/NaN|Infinity/.source +\n\t\t\t\t'|' +\n\t\t\t\t// binary integer\n\t\t\t\t/0[bB][01]+(?:_[01]+)*n?/.source +\n\t\t\t\t'|' +\n\t\t\t\t// octal integer\n\t\t\t\t/0[oO][0-7]+(?:_[0-7]+)*n?/.source +\n\t\t\t\t'|' +\n\t\t\t\t// hexadecimal integer\n\t\t\t\t/0[xX][\\dA-Fa-f]+(?:_[\\dA-Fa-f]+)*n?/.source +\n\t\t\t\t'|' +\n\t\t\t\t// decimal bigint\n\t\t\t\t/\\d+(?:_\\d+)*n/.source +\n\t\t\t\t'|' +\n\t\t\t\t// decimal number (integer or float) but no bigint\n\t\t\t\t/(?:\\d+(?:_\\d+)*(?:\\.(?:\\d+(?:_\\d+)*)?)?|\\.\\d+(?:_\\d+)*)(?:[Ee][+-]?\\d+(?:_\\d+)*)?/.source\n\t\t\t) +\n\t\t\t')' +\n\t\t\t/(?![\\w$])/.source\n\t\t),\n\t\tlookbehind: true\n\t},\n\t'operator': /--|\\+\\+|\\*\\*=?|=>|&&=?|\\|\\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\\.{3}|\\?\\?=?|\\?\\.?|[~:]/\n});\n\nPrism.languages.javascript['class-name'][0].pattern = /(\\b(?:class|extends|implements|instanceof|interface|new)\\s+)[\\w.\\\\]+/;\n\nPrism.languages.insertBefore('javascript', 'keyword', {\n\t'regex': {\n\t\tpattern: RegExp(\n\t\t\t// lookbehind\n\t\t\t// eslint-disable-next-line regexp/no-dupe-characters-character-class\n\t\t\t/((?:^|[^$\\w\\xA0-\\uFFFF.\"'\\])\\s]|\\b(?:return|yield))\\s*)/.source +\n\t\t\t// Regex pattern:\n\t\t\t// There are 2 regex patterns here. The RegExp set notation proposal added support for nested character\n\t\t\t// classes if the `v` flag is present. Unfortunately, nested CCs are both context-free and incompatible\n\t\t\t// with the only syntax, so we have to define 2 different regex patterns.\n\t\t\t/\\//.source +\n\t\t\t'(?:' +\n\t\t\t/(?:\\[(?:[^\\]\\\\\\r\\n]|\\\\.)*\\]|\\\\.|[^/\\\\\\[\\r\\n])+\\/[dgimyus]{0,7}/.source +\n\t\t\t'|' +\n\t\t\t// `v` flag syntax. This supports 3 levels of nested character classes.\n\t\t\t/(?:\\[(?:[^[\\]\\\\\\r\\n]|\\\\.|\\[(?:[^[\\]\\\\\\r\\n]|\\\\.|\\[(?:[^[\\]\\\\\\r\\n]|\\\\.)*\\])*\\])*\\]|\\\\.|[^/\\\\\\[\\r\\n])+\\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source +\n\t\t\t')' +\n\t\t\t// lookahead\n\t\t\t/(?=(?:\\s|\\/\\*(?:[^*]|\\*(?!\\/))*\\*\\/)*(?:$|[\\r\\n,.;:})\\]]|\\/\\/))/.source\n\t\t),\n\t\tlookbehind: true,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'regex-source': {\n\t\t\t\tpattern: /^(\\/)[\\s\\S]+(?=\\/[a-z]*$)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'language-regex',\n\t\t\t\tinside: Prism.languages.regex\n\t\t\t},\n\t\t\t'regex-delimiter': /^\\/|\\/$/,\n\t\t\t'regex-flags': /^[a-z]+$/,\n\t\t}\n\t},\n\t// This must be declared before keyword because we use \"function\" inside the look-forward\n\t'function-variable': {\n\t\tpattern: /#?(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*[=:]\\s*(?:async\\s*)?(?:\\bfunction\\b|(?:\\((?:[^()]|\\([^()]*\\))*\\)|(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*)\\s*=>))/,\n\t\talias: 'function'\n\t},\n\t'parameter': [\n\t\t{\n\t\t\tpattern: /(function(?:\\s+(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*)?\\s*\\(\\s*)(?!\\s)(?:[^()\\s]|\\s+(?![\\s)])|\\([^()]*\\))+(?=\\s*\\))/,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^$\\w\\xA0-\\uFFFF])(?!\\s)[_$a-z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*=>)/i,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t},\n\t\t{\n\t\t\tpattern: /(\\(\\s*)(?!\\s)(?:[^()\\s]|\\s+(?![\\s)])|\\([^()]*\\))+(?=\\s*\\)\\s*=>)/,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t},\n\t\t{\n\t\t\tpattern: /((?:\\b|\\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\\w\\xA0-\\uFFFF]))(?:(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*\\s*)\\(\\s*|\\]\\s*\\(\\s*)(?!\\s)(?:[^()\\s]|\\s+(?![\\s)])|\\([^()]*\\))+(?=\\s*\\)\\s*\\{)/,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t}\n\t],\n\t'constant': /\\b[A-Z](?:[A-Z_]|\\dx?)*\\b/\n});\n\nPrism.languages.insertBefore('javascript', 'string', {\n\t'hashbang': {\n\t\tpattern: /^#!.*/,\n\t\tgreedy: true,\n\t\talias: 'comment'\n\t},\n\t'template-string': {\n\t\tpattern: /`(?:\\\\[\\s\\S]|\\$\\{(?:[^{}]|\\{(?:[^{}]|\\{[^}]*\\})*\\})+\\}|(?!\\$\\{)[^\\\\`])*`/,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'template-punctuation': {\n\t\t\t\tpattern: /^`|`$/,\n\t\t\t\talias: 'string'\n\t\t\t},\n\t\t\t'interpolation': {\n\t\t\t\tpattern: /((?:^|[^\\\\])(?:\\\\{2})*)\\$\\{(?:[^{}]|\\{(?:[^{}]|\\{[^}]*\\})*\\})+\\}/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'interpolation-punctuation': {\n\t\t\t\t\t\tpattern: /^\\$\\{|\\}$/,\n\t\t\t\t\t\talias: 'punctuation'\n\t\t\t\t\t},\n\t\t\t\t\trest: Prism.languages.javascript\n\t\t\t\t}\n\t\t\t},\n\t\t\t'string': /[\\s\\S]+/\n\t\t}\n\t},\n\t'string-property': {\n\t\tpattern: /((?:^|[,{])[ \\t]*)([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\2)[^\\\\\\r\\n])*\\2(?=\\s*:)/m,\n\t\tlookbehind: true,\n\t\tgreedy: true,\n\t\talias: 'property'\n\t}\n});\n\nPrism.languages.insertBefore('javascript', 'operator', {\n\t'literal-property': {\n\t\tpattern: /((?:^|[,{])[ \\t]*)(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*:)/m,\n\t\tlookbehind: true,\n\t\talias: 'property'\n\t},\n});\n\nif (Prism.languages.markup) {\n\tPrism.languages.markup.tag.addInlined('script', 'javascript');\n\n\t// add attribute support for all DOM events.\n\t// https://developer.mozilla.org/en-US/docs/Web/Events#Standard_events\n\tPrism.languages.markup.tag.addAttribute(\n\t\t/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,\n\t\t'javascript'\n\t);\n}\n\nPrism.languages.js = Prism.languages.javascript;\n/components/prism-oz.js\u0003Prism.languages.oz = {\n\t'comment': {\n\t\tpattern: /\\/\\*[\\s\\S]*?\\*\\/|%.*/,\n\t\tgreedy: true\n\t},\n\t'string': {\n\t\tpattern: /\"(?:[^\"\\\\]|\\\\[\\s\\S])*\"/,\n\t\tgreedy: true\n\t},\n\t'atom': {\n\t\tpattern: /'(?:[^'\\\\]|\\\\[\\s\\S])*'/,\n\t\tgreedy: true,\n\t\talias: 'builtin'\n\t},\n\t'keyword': /\\$|\\[\\]|\\b(?:_|at|attr|case|catch|choice|class|cond|declare|define|dis|else(?:case|if)?|end|export|fail|false|feat|finally|from|fun|functor|if|import|in|local|lock|meth|nil|not|of|or|prepare|proc|prop|raise|require|self|skip|then|thread|true|try|unit)\\b/,\n\t'function': [\n\t\t/\\b[a-z][A-Za-z\\d]*(?=\\()/,\n\t\t{\n\t\t\tpattern: /(\\{)[A-Z][A-Za-z\\d]*\\b/,\n\t\t\tlookbehind: true\n\t\t}\n\t],\n\t'number': /\\b(?:0[bx][\\da-f]+|\\d+(?:\\.\\d*)?(?:e~?\\d+)?)\\b|&(?:[^\\\\]|\\\\(?:\\d{3}|.))/i,\n\t'variable': /`(?:[^`\\\\]|\\\\.)+`/,\n\t'attr-name': /\\b\\w+(?=[ \\t]*:(?![:=]))/,\n\t'operator': /:(?:=|::?)|<[-:=]?|=(?:=|<?:?)|>=?:?|\\\\=:?|!!?|[|#+\\-*\\/,~^@]|\\b(?:andthen|div|mod|orelse)\\b/,\n\t'punctuation': /[\\[\\](){}.:;?]/\n};\n3/plugins/file-highlight/prism-file-highlight.min.js\b!function(){if(\"undefined\"!=typeof Prism&&\"undefined\"!=typeof document){Element.prototype.matches||(Element.prototype.matches=Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector);var t={js:\"javascript\",py:\"python\",rb:\"ruby\",ps1:\"powershell\",psm1:\"powershell\",sh:\"bash\",bat:\"batch\",h:\"c\",tex:\"latex\"},e=\"data-src-status\",i='pre[data-src]:not([data-src-status=\"loaded\"]):not([data-src-status=\"loading\"])';Prism.hooks.add(\"before-highlightall\",(function(t){t.selector+=\", \"+i})),Prism.hooks.add(\"before-sanity-check\",(function(a){var n=a.element;if(n.matches(i)){a.code=\"\",n.setAttribute(e,\"loading\");var s=n.appendChild(document.createElement(\"CODE\"));s.textContent=\"Loading…\";var r=n.getAttribute(\"data-src\"),l=a.language;if(\"none\"===l){var o=(/\\.(\\w+)$/.exec(r)||[,\"none\"])[1];l=t[o]||o}Prism.util.setLanguage(s,l),Prism.util.setLanguage(n,l);var h=Prism.plugins.autoloader;h&&h.loadLanguages(l),function(t,i,a){var r=new XMLHttpRequest;r.open(\"GET\",t,!0),r.onreadystatechange=function(){4==r.readyState&&(r.status<400&&r.responseText?function(t){n.setAttribute(e,\"loaded\");var i=function(t){var e=/^\\s*(\\d+)\\s*(?:(,)\\s*(?:(\\d+)\\s*)?)?$/.exec(t||\"\");if(e){var i=Number(e[1]),a=e[2],n=e[3];return a?n?[i,Number(n)]:[i,void 0]:[i,i]}}(n.getAttribute(\"data-range\"));if(i){var a=t.split(/\\r\\n?|\\n/g),r=i[0],l=null==i[1]?a.length:i[1];r<0&&(r+=a.length),r=Math.max(0,Math.min(r-1,a.length)),l<0&&(l+=a.length),l=Math.max(0,Math.min(l,a.length)),t=a.slice(r,l).join(\"\\n\"),n.hasAttribute(\"data-start\")||n.setAttribute(\"data-start\",String(r+1))}s.textContent=t,Prism.highlightElement(s)}(r.responseText):r.status>=400?a(\"✖ Error \"+r.status+\" while fetching file: \"+r.statusText):a(\"✖ Error: File does not exist or is empty\"))},r.send(null)}(r,0,(function(t){n.setAttribute(e,\"failed\"),s.textContent=t}))}})),Prism.plugins.fileHighlight={highlight:function(t){for(var e,a=(t||document).querySelectorAll(i),n=0;e=a[n++];)Prism.highlightElement(e)}};var a=!1;Prism.fileHighlight=function(){a||(console.warn(\"Prism.fileHighlight is deprecated. Use `Prism.plugins.fileHighlight.highlight` instead.\"),a=!0),Prism.plugins.fileHighlight.highlight.apply(this,arguments)}}}();,/plugins/command-line/prism-command-line.css\u0003.command-line-prompt {\n\tborder-right: 1px solid #999;\n\tdisplay: block;\n\tfloat: left;\n\tfont-size: 100%;\n\tletter-spacing: -1px;\n\tmargin-right: 1em;\n\tpointer-events: none;\n\ttext-align: right;\n\n\t-webkit-user-select: none;\n\t-moz-user-select: none;\n\t-ms-user-select: none;\n\tuser-select: none;\n}\n\n.command-line-prompt > span:before {\n\topacity: 0.7;\n\tcontent: ' ';\n\tdisplay: block;\n\tpadding-right: 0.8em;\n}\n\n.command-line-prompt > span[data-user]:before {\n\tcontent: \"[\" attr(data-user) \"@\" attr(data-host) \"] $\";\n}\n\n.command-line-prompt > span[data-user=\"root\"]:before {\n\tcontent: \"[\" attr(data-user) \"@\" attr(data-host) \"] #\";\n}\n\n.command-line-prompt > span[data-prompt]:before {\n\tcontent: attr(data-prompt);\n}\n\n.command-line-prompt > span[data-continuation-prompt]:before {\n\tcontent: attr(data-continuation-prompt);\n}\n\n.command-line span.token.output {\n\t/* Make shell output lines a bit lighter to distinguish them from shell commands */\n\topacity: 0.7;\n}\n/components/prism-ichigojam.js\u0003// according to the offical reference (EN)\n// https://ichigojam.net/IchigoJam-en.html\nPrism.languages.ichigojam = {\n\t'comment': /(?:\\B'|REM)(?:[^\\n\\r]*)/i,\n\t'string': {\n\t\tpattern: /\"(?:\"\"|[!#$%&'()*,\\/:;<=>?^\\w +\\-.])*\"/,\n\t\tgreedy: true\n\t},\n\t'number': /\\B#[0-9A-F]+|\\B`[01]+|(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:E[+-]?\\d+)?/i,\n\t'keyword': /\\b(?:BEEP|BPS|CASE|CLEAR|CLK|CLO|CLP|CLS|CLT|CLV|CONT|COPY|ELSE|END|FILE|FILES|FOR|GOSUB|GOTO|GSB|IF|INPUT|KBD|LED|LET|LIST|LOAD|LOCATE|LRUN|NEW|NEXT|OUT|PLAY|POKE|PRINT|PWM|REM|RENUM|RESET|RETURN|RIGHT|RTN|RUN|SAVE|SCROLL|SLEEP|SRND|STEP|STOP|SUB|TEMPO|THEN|TO|UART|VIDEO|WAIT)(?:\\$|\\b)/i,\n\t'function': /\\b(?:ABS|ANA|ASC|BIN|BTN|DEC|END|FREE|HELP|HEX|I2CR|I2CW|IN|INKEY|LEN|LINE|PEEK|RND|SCR|SOUND|STR|TICK|USR|VER|VPEEK|ZER)(?:\\$|\\b)/i,\n\t'label': /(?:\\B@\\S+)/,\n\t'operator': /<[=>]?|>=?|\\|\\||&&|[+\\-*\\/=|&^~!]|\\b(?:AND|NOT|OR)\\b/i,\n\t'punctuation': /[\\[,;:()\\]]/\n};\n/components/prism-warpscript.js\u0003Prism.languages.warpscript = {\n\t'comment': /#.*|\\/\\/.*|\\/\\*[\\s\\S]*?\\*\\//,\n\t'string': {\n\t\tpattern: /\"(?:[^\"\\\\\\r\\n]|\\\\.)*\"|'(?:[^'\\\\\\r\\n]|\\\\.)*'|<'(?:[^\\\\']|'(?!>)|\\\\.)*'>/,\n\t\tgreedy: true\n\t},\n\t'variable': /\\$\\S+/,\n\t'macro': {\n\t\tpattern: /@\\S+/,\n\t\talias: 'property'\n\t},\n\t// WarpScript doesn't have any keywords, these are all functions under the control category\n\t// https://www.warp10.io/tags/control\n\t'keyword': /\\b(?:BREAK|CHECKMACRO|CONTINUE|CUDF|DEFINED|DEFINEDMACRO|EVAL|FAIL|FOR|FOREACH|FORSTEP|IFT|IFTE|MSGFAIL|NRETURN|RETHROW|RETURN|SWITCH|TRY|UDF|UNTIL|WHILE)\\b/,\n\t'number': /[+-]?\\b(?:NaN|Infinity|\\d+(?:\\.\\d*)?(?:[Ee][+-]?\\d+)?|0x[\\da-fA-F]+|0b[01]+)\\b/,\n\t'boolean': /\\b(?:F|T|false|true)\\b/,\n\t'punctuation': /<%|%>|[{}[\\]()]/,\n\t// Some operators from the \"operators\" category\n\t// https://www.warp10.io/tags/operators\n\t'operator': /==|&&?|\\|\\|?|\\*\\*?|>>>?|<<|[<>!~]=?|[-/%^]|\\+!?|\\b(?:AND|NOT|OR)\\b/\n};\n /components/prism-uorazor.min.js\tWPrism.languages.uorazor={\"comment-hash\":{pattern:/#.*/,alias:\"comment\",greedy:!0},\"comment-slash\":{pattern:/\\/\\/.*/,alias:\"comment\",greedy:!0},string:{pattern:/(\"|')(?:\\\\.|(?!\\1)[^\\\\\\r\\n])*\\1/,inside:{punctuation:/^['\"]|['\"]$/},greedy:!0},\"source-layers\":{pattern:/\\b(?:arms|backpack|blue|bracelet|cancel|clear|cloak|criminal|earrings|enemy|facialhair|friend|friendly|gloves|gray|grey|ground|hair|head|innerlegs|innertorso|innocent|lefthand|middletorso|murderer|neck|nonfriendly|onehandedsecondary|outerlegs|outertorso|pants|red|righthand|ring|self|shirt|shoes|talisman|waist)\\b/i,alias:\"function\"},\"source-commands\":{pattern:/\\b(?:alliance|attack|cast|clearall|clearignore|clearjournal|clearlist|clearsysmsg|createlist|createtimer|dclick|dclicktype|dclickvar|dress|dressconfig|drop|droprelloc|emote|getlabel|guild|gumpclose|gumpresponse|hotkey|ignore|lasttarget|lift|lifttype|menu|menuresponse|msg|org|organize|organizer|overhead|pause|poplist|potion|promptresponse|pushlist|removelist|removetimer|rename|restock|say|scav|scavenger|script|setability|setlasttarget|setskill|settimer|setvar|sysmsg|target|targetloc|targetrelloc|targettype|undress|unignore|unsetvar|useobject|useonce|useskill|usetype|virtue|wait|waitforgump|waitformenu|waitforprompt|waitforstat|waitforsysmsg|waitfortarget|walk|wfsysmsg|wft|whisper|yell)\\b/,alias:\"function\"},\"tag-name\":{pattern:/(^\\{%-?\\s*)\\w+/,lookbehind:!0,alias:\"keyword\"},delimiter:{pattern:/^\\{[{%]-?|-?[%}]\\}$/,alias:\"punctuation\"},function:/\\b(?:atlist|close|closest|count|counter|counttype|dead|dex|diffhits|diffmana|diffstam|diffweight|find|findbuff|finddebuff|findlayer|findtype|findtypelist|followers|gumpexists|hidden|hits|hp|hue|human|humanoid|ingump|inlist|insysmessage|insysmsg|int|invul|lhandempty|list|listexists|mana|maxhits|maxhp|maxmana|maxstam|maxweight|monster|mounted|name|next|noto|paralyzed|poisoned|position|prev|previous|queued|rand|random|rhandempty|skill|stam|str|targetexists|timer|timerexists|varexist|warmode|weight)\\b/,keyword:/\\b(?:and|as|break|continue|else|elseif|endfor|endif|endwhile|for|if|loop|not|or|replay|stop|while)\\b/,boolean:/\\b(?:false|null|true)\\b/,number:/\\b0x[\\dA-Fa-f]+|(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:[Ee][-+]?\\d+)?/,operator:[{pattern:/(\\s)(?:and|b-and|b-or|b-xor|ends with|in|is|matches|not|or|same as|starts with)(?=\\s)/,lookbehind:!0},/[=<>]=?|!=|\\*\\*?|\\/\\/?|\\?:?|[-+~%|]/],punctuation:/[()\\[\\]{}:.,]/};/components/prism-wasm.min.js\u0004Prism.languages.wasm={comment:[/\\(;[\\s\\S]*?;\\)/,{pattern:/;;.*/,greedy:!0}],string:{pattern:/\"(?:\\\\[\\s\\S]|[^\"\\\\])*\"/,greedy:!0},keyword:[{pattern:/\\b(?:align|offset)=/,inside:{operator:/=/}},{pattern:/\\b(?:(?:f32|f64|i32|i64)(?:\\.(?:abs|add|and|ceil|clz|const|convert_[su]\\/i(?:32|64)|copysign|ctz|demote\\/f64|div(?:_[su])?|eqz?|extend_[su]\\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|neg?|nearest|or|popcnt|promote\\/f32|reinterpret\\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|sqrt|store(?:8|16|32)?|sub|trunc(?:_[su]\\/f(?:32|64))?|wrap\\/i64|xor))?|memory\\.(?:grow|size))\\b/,inside:{punctuation:/\\./}},/\\b(?:anyfunc|block|br(?:_if|_table)?|call(?:_indirect)?|data|drop|elem|else|end|export|func|get_(?:global|local)|global|if|import|local|loop|memory|module|mut|nop|offset|param|result|return|select|set_(?:global|local)|start|table|tee_local|then|type|unreachable)\\b/],variable:/\\$[\\w!#$%&'*+\\-./:<=>?@\\\\^`|~]+/,number:/[+-]?\\b(?:\\d(?:_?\\d)*(?:\\.\\d(?:_?\\d)*)?(?:[eE][+-]?\\d(?:_?\\d)*)?|0x[\\da-fA-F](?:_?[\\da-fA-F])*(?:\\.[\\da-fA-F](?:_?[\\da-fA-D])*)?(?:[pP][+-]?\\d(?:_?\\d)*)?)\\b|\\binf\\b|\\bnan(?::0x[\\da-fA-F](?:_?[\\da-fA-D])*)?\\b/,punctuation:/[()]/};/components/prism-lilypond.js\u0007(function (Prism) {\n\n\tvar schemeExpression = /\\((?:[^();\"#\\\\]|\\\\[\\s\\S]|;.*(?!.)|\"(?:[^\"\\\\]|\\\\.)*\"|#(?:\\{(?:(?!#\\})[\\s\\S])*#\\}|[^{])|<expr>)*\\)/.source;\n\t// allow for up to pow(2, recursivenessLog2) many levels of recursive brace expressions\n\t// For some reason, this can't be 4\n\tvar recursivenessLog2 = 5;\n\tfor (var i = 0; i < recursivenessLog2; i++) {\n\t\tschemeExpression = schemeExpression.replace(/<expr>/g, function () { return schemeExpression; });\n\t}\n\tschemeExpression = schemeExpression.replace(/<expr>/g, /[^\\s\\S]/.source);\n\n\n\tvar lilypond = Prism.languages.lilypond = {\n\t\t'comment': /%(?:(?!\\{).*|\\{[\\s\\S]*?%\\})/,\n\t\t'embedded-scheme': {\n\t\t\tpattern: RegExp(/(^|[=\\s])#(?:\"(?:[^\"\\\\]|\\\\.)*\"|[^\\s()\"]*(?:[^\\s()]|<expr>))/.source.replace(/<expr>/g, function () { return schemeExpression; }), 'm'),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'scheme': {\n\t\t\t\t\tpattern: /^(#)[\\s\\S]+$/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\talias: 'language-scheme',\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'embedded-lilypond': {\n\t\t\t\t\t\t\tpattern: /#\\{[\\s\\S]*?#\\}/,\n\t\t\t\t\t\t\tgreedy: true,\n\t\t\t\t\t\t\tinside: {\n\t\t\t\t\t\t\t\t'punctuation': /^#\\{|#\\}$/,\n\t\t\t\t\t\t\t\t'lilypond': {\n\t\t\t\t\t\t\t\t\tpattern: /[\\s\\S]+/,\n\t\t\t\t\t\t\t\t\talias: 'language-lilypond',\n\t\t\t\t\t\t\t\t\tinside: null // see below\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\trest: Prism.languages.scheme\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t'punctuation': /#/\n\t\t\t}\n\t\t},\n\t\t'string': {\n\t\t\tpattern: /\"(?:[^\"\\\\]|\\\\.)*\"/,\n\t\t\tgreedy: true\n\t\t},\n\t\t'class-name': {\n\t\t\tpattern: /(\\\\new\\s+)[\\w-]+/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'keyword': {\n\t\t\tpattern: /\\\\[a-z][-\\w]*/i,\n\t\t\tinside: {\n\t\t\t\t'punctuation': /^\\\\/\n\t\t\t}\n\t\t},\n\t\t'operator': /[=|]|<<|>>/,\n\t\t'punctuation': {\n\t\t\tpattern: /(^|[a-z\\d])(?:'+|,+|[_^]?-[_^]?(?:[-+^!>._]|(?=\\d))|[_^]\\.?|[.!])|[{}()[\\]<>^~]|\\\\[()[\\]<>\\\\!]|--|__/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'number': /\\b\\d+(?:\\/\\d+)?\\b/\n\t};\n\n\tlilypond['embedded-scheme'].inside['scheme'].inside['embedded-lilypond'].inside['lilypond'].inside = lilypond;\n\n\tPrism.languages.ly = lilypond;\n\n}(Prism));\n/components/prism-bison.min.js\u0002RPrism.languages.bison=Prism.languages.extend(\"c\",{}),Prism.languages.insertBefore(\"bison\",\"comment\",{bison:{pattern:/^(?:[^%]|%(?!%))*%%[\\s\\S]*?%%/,inside:{c:{pattern:/%\\{[\\s\\S]*?%\\}|\\{(?:\\{[^}]*\\}|[^{}])*\\}/,inside:{delimiter:{pattern:/^%?\\{|%?\\}$/,alias:\"punctuation\"},\"bison-variable\":{pattern:/[$@](?:<[^\\s>]+>)?[\\w$]+/,alias:\"variable\",inside:{punctuation:/<|>/}},rest:Prism.languages.c}},comment:Prism.languages.c.comment,string:Prism.languages.c.string,property:/\\S+(?=:)/,keyword:/%\\w+/,number:{pattern:/(^|[^@])\\b(?:0x[\\da-f]+|\\d+)/i,lookbehind:!0},punctuation:/%[%?]|[|:;\\[\\]<>]/}}});7/plugins/data-uri-highlight/prism-data-uri-highlight.js\t<(function () {\n\n\tif (typeof Prism === 'undefined') {\n\t\treturn;\n\t}\n\n\tvar autoLinkerProcess = function (grammar) {\n\t\tif (Prism.plugins.autolinker) {\n\t\t\tPrism.plugins.autolinker.processGrammar(grammar);\n\t\t}\n\t\treturn grammar;\n\t};\n\tvar dataURI = {\n\t\tpattern: /(.)\\bdata:[^\\/]+\\/[^,]+,(?:(?!\\1)[\\s\\S]|\\\\\\1)+(?=\\1)/,\n\t\tlookbehind: true,\n\t\tinside: {\n\t\t\t'language-css': {\n\t\t\t\tpattern: /(data:[^\\/]+\\/(?:[^+,]+\\+)?css,)[\\s\\S]+/,\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\t'language-javascript': {\n\t\t\t\tpattern: /(data:[^\\/]+\\/(?:[^+,]+\\+)?javascript,)[\\s\\S]+/,\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\t'language-json': {\n\t\t\t\tpattern: /(data:[^\\/]+\\/(?:[^+,]+\\+)?json,)[\\s\\S]+/,\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\t'language-markup': {\n\t\t\t\tpattern: /(data:[^\\/]+\\/(?:[^+,]+\\+)?(?:html|xml),)[\\s\\S]+/,\n\t\t\t\tlookbehind: true\n\t\t\t}\n\t\t}\n\t};\n\n\t// Tokens that may contain URLs\n\tvar candidates = ['url', 'attr-value', 'string'];\n\n\tPrism.plugins.dataURIHighlight = {\n\t\tprocessGrammar: function (grammar) {\n\t\t\t// Abort if grammar has already been processed\n\t\t\tif (!grammar || grammar['data-uri']) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tPrism.languages.DFS(grammar, function (key, def, type) {\n\t\t\t\tif (candidates.indexOf(type) > -1 && !Array.isArray(def)) {\n\t\t\t\t\tif (!def.pattern) {\n\t\t\t\t\t\tdef = this[key] = {\n\t\t\t\t\t\t\tpattern: def\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\tdef.inside = def.inside || {};\n\n\t\t\t\t\tif (type == 'attr-value') {\n\t\t\t\t\t\tPrism.languages.insertBefore('inside', def.inside['url-link'] ? 'url-link' : 'punctuation', {\n\t\t\t\t\t\t\t'data-uri': dataURI\n\t\t\t\t\t\t}, def);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (def.inside['url-link']) {\n\t\t\t\t\t\t\tPrism.languages.insertBefore('inside', 'url-link', {\n\t\t\t\t\t\t\t\t'data-uri': dataURI\n\t\t\t\t\t\t\t}, def);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tdef.inside['data-uri'] = dataURI;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\tgrammar['data-uri'] = dataURI;\n\t\t}\n\t};\n\n\tPrism.hooks.add('before-highlight', function (env) {\n\t\t// Prepare the needed grammars for this code block\n\t\tif (dataURI.pattern.test(env.code)) {\n\t\t\tfor (var p in dataURI.inside) {\n\t\t\t\tif (dataURI.inside.hasOwnProperty(p)) {\n\t\t\t\t\tif (!dataURI.inside[p].inside && dataURI.inside[p].pattern.test(env.code)) {\n\t\t\t\t\t\tvar lang = p.match(/^language-(.+)/)[1];\n\t\t\t\t\t\tif (Prism.languages[lang]) {\n\t\t\t\t\t\t\tdataURI.inside[p].inside = {\n\t\t\t\t\t\t\t\trest: autoLinkerProcess(Prism.languages[lang])\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tPrism.plugins.dataURIHighlight.processGrammar(env.grammar);\n\t});\n}());\n/components/prism-kusto.js\u0006Prism.languages.kusto = {\n\t'comment': {\n\t\tpattern: /\\/\\/.*/,\n\t\tgreedy: true\n\t},\n\t'string': {\n\t\tpattern: /```[\\s\\S]*?```|[hH]?(?:\"(?:[^\\r\\n\\\\\"]|\\\\.)*\"|'(?:[^\\r\\n\\\\']|\\\\.)*'|@(?:\"[^\\r\\n\"]*\"|'[^\\r\\n']*'))/,\n\t\tgreedy: true\n\t},\n\n\t'verb': {\n\t\tpattern: /(\\|\\s*)[a-z][\\w-]*/i,\n\t\tlookbehind: true,\n\t\talias: 'keyword'\n\t},\n\n\t'command': {\n\t\tpattern: /\\.[a-z][a-z\\d-]*\\b/,\n\t\talias: 'keyword'\n\t},\n\n\t'class-name': /\\b(?:bool|datetime|decimal|dynamic|guid|int|long|real|string|timespan)\\b/,\n\t'keyword': /\\b(?:access|alias|and|anti|as|asc|auto|between|by|(?:contains|(?:ends|starts)with|has(?:perfix|suffix)?)(?:_cs)?|database|declare|desc|external|from|fullouter|has_all|in|ingestion|inline|inner|innerunique|into|(?:left|right)(?:anti(?:semi)?|inner|outer|semi)?|let|like|local|not|of|on|or|pattern|print|query_parameters|range|restrict|schema|set|step|table|tables|to|view|where|with|matches\\s+regex|nulls\\s+(?:first|last))(?![\\w-])/,\n\t'boolean': /\\b(?:false|null|true)\\b/,\n\n\t'function': /\\b[a-z_]\\w*(?=\\s*\\()/,\n\n\t'datetime': [\n\t\t{\n\t\t\t// RFC 822 + RFC 850\n\t\t\tpattern: /\\b(?:(?:Fri|Friday|Mon|Monday|Sat|Saturday|Sun|Sunday|Thu|Thursday|Tue|Tuesday|Wed|Wednesday)\\s*,\\s*)?\\d{1,2}(?:\\s+|-)(?:Apr|Aug|Dec|Feb|Jan|Jul|Jun|Mar|May|Nov|Oct|Sep)(?:\\s+|-)\\d{2}\\s+\\d{2}:\\d{2}(?::\\d{2})?(?:\\s*(?:\\b(?:[A-Z]|(?:[ECMT][DS]|GM|U)T)|[+-]\\d{4}))?\\b/,\n\t\t\talias: 'number'\n\t\t},\n\t\t{\n\t\t\t// ISO 8601\n\t\t\tpattern: /[+-]?\\b(?:\\d{4}-\\d{2}-\\d{2}(?:[ T]\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d+)?)?)?|\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d+)?)?)Z?/,\n\t\t\talias: 'number'\n\t\t}\n\t],\n\t'number': /\\b(?:0x[0-9A-Fa-f]+|\\d+(?:\\.\\d+)?(?:[Ee][+-]?\\d+)?)(?:(?:min|sec|[mnµ]s|[dhms]|microsecond|tick)\\b)?|[+-]?\\binf\\b/,\n\n\t'operator': /=>|[!=]~|[!=<>]=?|[-+*/%|]|\\.\\./,\n\t'punctuation': /[()\\[\\]{},;.:]/\n};\n/components/prism-glsl.min.js\u0004IPrism.languages.glsl=Prism.languages.extend(\"c\",{keyword:/\\b(?:active|asm|atomic_uint|attribute|[ibdu]?vec[234]|bool|break|buffer|case|cast|centroid|class|coherent|common|const|continue|d?mat[234](?:x[234])?|default|discard|do|double|else|enum|extern|external|false|filter|fixed|flat|float|for|fvec[234]|goto|half|highp|hvec[234]|[iu]?sampler2DMS(?:Array)?|[iu]?sampler2DRect|[iu]?samplerBuffer|[iu]?samplerCube|[iu]?samplerCubeArray|[iu]?sampler[123]D|[iu]?sampler[12]DArray|[iu]?image2DMS(?:Array)?|[iu]?image2DRect|[iu]?imageBuffer|[iu]?imageCube|[iu]?imageCubeArray|[iu]?image[123]D|[iu]?image[12]DArray|if|in|inline|inout|input|int|interface|invariant|layout|long|lowp|mediump|namespace|noinline|noperspective|out|output|partition|patch|precise|precision|public|readonly|resource|restrict|return|sample|sampler[12]DArrayShadow|sampler[12]DShadow|sampler2DRectShadow|sampler3DRect|samplerCubeArrayShadow|samplerCubeShadow|shared|short|sizeof|smooth|static|struct|subroutine|superp|switch|template|this|true|typedef|uint|uniform|union|unsigned|using|varying|void|volatile|while|writeonly)\\b/});/components/prism-asciidoc.js\u001b(function (Prism) {\n\n\tvar attributes = {\n\t\tpattern: /(^[ \\t]*)\\[(?!\\[)(?:([\"'$`])(?:(?!\\2)[^\\\\]|\\\\.)*\\2|\\[(?:[^\\[\\]\\\\]|\\\\.)*\\]|[^\\[\\]\\\\\"'$`]|\\\\.)*\\]/m,\n\t\tlookbehind: true,\n\t\tinside: {\n\t\t\t'quoted': {\n\t\t\t\tpattern: /([$`])(?:(?!\\1)[^\\\\]|\\\\.)*\\1/,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': /^[$`]|[$`]$/\n\t\t\t\t}\n\t\t\t},\n\t\t\t'interpreted': {\n\t\t\t\tpattern: /'(?:[^'\\\\]|\\\\.)*'/,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': /^'|'$/\n\t\t\t\t\t// See rest below\n\t\t\t\t}\n\t\t\t},\n\t\t\t'string': /\"(?:[^\"\\\\]|\\\\.)*\"/,\n\t\t\t'variable': /\\w+(?==)/,\n\t\t\t'punctuation': /^\\[|\\]$|,/,\n\t\t\t'operator': /=/,\n\t\t\t// The negative look-ahead prevents blank matches\n\t\t\t'attr-value': /(?!^\\s+$).+/\n\t\t}\n\t};\n\n\tvar asciidoc = Prism.languages.asciidoc = {\n\t\t'comment-block': {\n\t\t\tpattern: /^(\\/{4,})$[\\s\\S]*?^\\1/m,\n\t\t\talias: 'comment'\n\t\t},\n\t\t'table': {\n\t\t\tpattern: /^\\|={3,}(?:(?:\\r?\\n|\\r(?!\\n)).*)*?(?:\\r?\\n|\\r)\\|={3,}$/m,\n\t\t\tinside: {\n\t\t\t\t'specifiers': {\n\t\t\t\t\tpattern: /(?:(?:(?:\\d+(?:\\.\\d+)?|\\.\\d+)[+*](?:[<^>](?:\\.[<^>])?|\\.[<^>])?|[<^>](?:\\.[<^>])?|\\.[<^>])[a-z]*|[a-z]+)(?=\\|)/,\n\t\t\t\t\talias: 'attr-value'\n\t\t\t\t},\n\t\t\t\t'punctuation': {\n\t\t\t\t\tpattern: /(^|[^\\\\])[|!]=*/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t}\n\t\t\t\t// See rest below\n\t\t\t}\n\t\t},\n\n\t\t'passthrough-block': {\n\t\t\tpattern: /^(\\+{4,})$[\\s\\S]*?^\\1$/m,\n\t\t\tinside: {\n\t\t\t\t'punctuation': /^\\++|\\++$/\n\t\t\t\t// See rest below\n\t\t\t}\n\t\t},\n\t\t// Literal blocks and listing blocks\n\t\t'literal-block': {\n\t\t\tpattern: /^(-{4,}|\\.{4,})$[\\s\\S]*?^\\1$/m,\n\t\t\tinside: {\n\t\t\t\t'punctuation': /^(?:-+|\\.+)|(?:-+|\\.+)$/\n\t\t\t\t// See rest below\n\t\t\t}\n\t\t},\n\t\t// Sidebar blocks, quote blocks, example blocks and open blocks\n\t\t'other-block': {\n\t\t\tpattern: /^(--|\\*{4,}|_{4,}|={4,})$[\\s\\S]*?^\\1$/m,\n\t\t\tinside: {\n\t\t\t\t'punctuation': /^(?:-+|\\*+|_+|=+)|(?:-+|\\*+|_+|=+)$/\n\t\t\t\t// See rest below\n\t\t\t}\n\t\t},\n\n\t\t// list-punctuation and list-label must appear before indented-block\n\t\t'list-punctuation': {\n\t\t\tpattern: /(^[ \\t]*)(?:-|\\*{1,5}|\\.{1,5}|(?:[a-z]|\\d+)\\.|[xvi]+\\))(?= )/im,\n\t\t\tlookbehind: true,\n\t\t\talias: 'punctuation'\n\t\t},\n\t\t'list-label': {\n\t\t\tpattern: /(^[ \\t]*)[a-z\\d].+(?::{2,4}|;;)(?=\\s)/im,\n\t\t\tlookbehind: true,\n\t\t\talias: 'symbol'\n\t\t},\n\t\t'indented-block': {\n\t\t\tpattern: /((\\r?\\n|\\r)\\2)([ \\t]+)\\S.*(?:(?:\\r?\\n|\\r)\\3.+)*(?=\\2{2}|$)/,\n\t\t\tlookbehind: true\n\t\t},\n\n\t\t'comment': /^\\/\\/.*/m,\n\t\t'title': {\n\t\t\tpattern: /^.+(?:\\r?\\n|\\r)(?:={3,}|-{3,}|~{3,}|\\^{3,}|\\+{3,})$|^={1,5} .+|^\\.(?![\\s.]).*/m,\n\t\t\talias: 'important',\n\t\t\tinside: {\n\t\t\t\t'punctuation': /^(?:\\.|=+)|(?:=+|-+|~+|\\^+|\\++)$/\n\t\t\t\t// See rest below\n\t\t\t}\n\t\t},\n\t\t'attribute-entry': {\n\t\t\tpattern: /^:[^:\\r\\n]+:(?: .*?(?: \\+(?:\\r?\\n|\\r).*?)*)?$/m,\n\t\t\talias: 'tag'\n\t\t},\n\t\t'attributes': attributes,\n\t\t'hr': {\n\t\t\tpattern: /^'{3,}$/m,\n\t\t\talias: 'punctuation'\n\t\t},\n\t\t'page-break': {\n\t\t\tpattern: /^<{3,}$/m,\n\t\t\talias: 'punctuation'\n\t\t},\n\t\t'admonition': {\n\t\t\tpattern: /^(?:CAUTION|IMPORTANT|NOTE|TIP|WARNING):/m,\n\t\t\talias: 'keyword'\n\t\t},\n\t\t'callout': [\n\t\t\t{\n\t\t\t\tpattern: /(^[ \\t]*)<?\\d*>/m,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'symbol'\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /<\\d+>/,\n\t\t\t\talias: 'symbol'\n\t\t\t}\n\t\t],\n\t\t'macro': {\n\t\t\tpattern: /\\b[a-z\\d][a-z\\d-]*::?(?:[^\\s\\[\\]]*\\[(?:[^\\]\\\\\"']|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*\\1|\\\\.)*\\])/,\n\t\t\tinside: {\n\t\t\t\t'function': /^[a-z\\d-]+(?=:)/,\n\t\t\t\t'punctuation': /^::?/,\n\t\t\t\t'attributes': {\n\t\t\t\t\tpattern: /(?:\\[(?:[^\\]\\\\\"']|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*\\1|\\\\.)*\\])/,\n\t\t\t\t\tinside: attributes.inside\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t'inline': {\n\t\t\t/*\n\t\t\tThe initial look-behind prevents the highlighting of escaped quoted text.\n\n\t\t\tQuoted text can be multi-line but cannot span an empty line.\n\t\t\tAll quoted text can have attributes before [foobar, 'foobar', baz=\"bar\"].\n\n\t\t\tFirst, we handle the constrained quotes.\n\t\t\tThose must be bounded by non-word chars and cannot have spaces between the delimiter and the first char.\n\t\t\tThey are, in order: _emphasis_, ``double quotes'', `single quotes', `monospace`, 'emphasis', *strong*, +monospace+ and #unquoted#\n\n\t\t\tThen we handle the unconstrained quotes.\n\t\t\tThose do not have the restrictions of the constrained quotes.\n\t\t\tThey are, in order: __emphasis__, **strong**, ++monospace++, +++passthrough+++, ##unquoted##, $$passthrough$$, ~subscript~, ^superscript^, {attribute-reference}, [[anchor]], [[[bibliography anchor]]], <<xref>>, (((indexes))) and ((indexes))\n\t\t\t */\n\t\t\tpattern: /(^|[^\\\\])(?:(?:\\B\\[(?:[^\\]\\\\\"']|([\"'])(?:(?!\\2)[^\\\\]|\\\\.)*\\2|\\\\.)*\\])?(?:\\b_(?!\\s)(?: _|[^_\\\\\\r\\n]|\\\\.)+(?:(?:\\r?\\n|\\r)(?: _|[^_\\\\\\r\\n]|\\\\.)+)*_\\b|\\B``(?!\\s).+?(?:(?:\\r?\\n|\\r).+?)*''\\B|\\B`(?!\\s)(?:[^`'\\s]|\\s+\\S)+['`]\\B|\\B(['*+#])(?!\\s)(?: \\3|(?!\\3)[^\\\\\\r\\n]|\\\\.)+(?:(?:\\r?\\n|\\r)(?: \\3|(?!\\3)[^\\\\\\r\\n]|\\\\.)+)*\\3\\B)|(?:\\[(?:[^\\]\\\\\"']|([\"'])(?:(?!\\4)[^\\\\]|\\\\.)*\\4|\\\\.)*\\])?(?:(__|\\*\\*|\\+\\+\\+?|##|\\$\\$|[~^]).+?(?:(?:\\r?\\n|\\r).+?)*\\5|\\{[^}\\r\\n]+\\}|\\[\\[\\[?.+?(?:(?:\\r?\\n|\\r).+?)*\\]?\\]\\]|<<.+?(?:(?:\\r?\\n|\\r).+?)*>>|\\(\\(\\(?.+?(?:(?:\\r?\\n|\\r).+?)*\\)?\\)\\)))/m,\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'attributes': attributes,\n\t\t\t\t'url': {\n\t\t\t\t\tpattern: /^(?:\\[\\[\\[?.+?\\]?\\]\\]|<<.+?>>)$/,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'punctuation': /^(?:\\[\\[\\[?|<<)|(?:\\]\\]\\]?|>>)$/\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t'attribute-ref': {\n\t\t\t\t\tpattern: /^\\{.+\\}$/,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'variable': {\n\t\t\t\t\t\t\tpattern: /(^\\{)[a-z\\d,+_-]+/,\n\t\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'operator': /^[=?!#%@$]|!(?=[:}])/,\n\t\t\t\t\t\t'punctuation': /^\\{|\\}$|::?/\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t'italic': {\n\t\t\t\t\tpattern: /^(['_])[\\s\\S]+\\1$/,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'punctuation': /^(?:''?|__?)|(?:''?|__?)$/\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t'bold': {\n\t\t\t\t\tpattern: /^\\*[\\s\\S]+\\*$/,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\tpunctuation: /^\\*\\*?|\\*\\*?$/\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t'punctuation': /^(?:``?|\\+{1,3}|##?|\\$\\$|[~^]|\\(\\(\\(?)|(?:''?|\\+{1,3}|##?|\\$\\$|[~^`]|\\)?\\)\\))$/\n\t\t\t}\n\t\t},\n\t\t'replacement': {\n\t\t\tpattern: /\\((?:C|R|TM)\\)/,\n\t\t\talias: 'builtin'\n\t\t},\n\t\t'entity': /&#?[\\da-z]{1,8};/i,\n\t\t'line-continuation': {\n\t\t\tpattern: /(^| )\\+$/m,\n\t\t\tlookbehind: true,\n\t\t\talias: 'punctuation'\n\t\t}\n\t};\n\n\n\t// Allow some nesting. There is no recursion though, so cloning should not be needed.\n\n\tfunction copyFromAsciiDoc(keys) {\n\t\tkeys = keys.split(' ');\n\n\t\tvar o = {};\n\t\tfor (var i = 0, l = keys.length; i < l; i++) {\n\t\t\to[keys[i]] = asciidoc[keys[i]];\n\t\t}\n\t\treturn o;\n\t}\n\n\tattributes.inside['interpreted'].inside.rest = copyFromAsciiDoc('macro inline replacement entity');\n\n\tasciidoc['passthrough-block'].inside.rest = copyFromAsciiDoc('macro');\n\n\tasciidoc['literal-block'].inside.rest = copyFromAsciiDoc('callout');\n\n\tasciidoc['table'].inside.rest = copyFromAsciiDoc('comment-block passthrough-block literal-block other-block list-punctuation indented-block comment title attribute-entry attributes hr page-break admonition list-label callout macro inline replacement entity line-continuation');\n\n\tasciidoc['other-block'].inside.rest = copyFromAsciiDoc('table list-punctuation indented-block comment attribute-entry attributes hr page-break admonition list-label macro inline replacement entity line-continuation');\n\n\tasciidoc['title'].inside.rest = copyFromAsciiDoc('macro inline replacement entity');\n\n\n\t// Plugin to make entity title show the real entity, idea by Roman Komarov\n\tPrism.hooks.add('wrap', function (env) {\n\t\tif (env.type === 'entity') {\n\t\t\tenv.attributes['title'] = env.content.replace(/&amp;/, '&');\n\t\t}\n\t});\n\n\tPrism.languages.adoc = Prism.languages.asciidoc;\n}(Prism));\n/components/prism-magma.min.js\u0004hPrism.languages.magma={output:{pattern:/^(>.*(?:\\r(?:\\n|(?!\\n))|\\n))(?!>)(?:.+|(?:\\r(?:\\n|(?!\\n))|\\n)(?!>).*)(?:(?:\\r(?:\\n|(?!\\n))|\\n)(?!>).*)*/m,lookbehind:!0,greedy:!0},comment:{pattern:/\\/\\/.*|\\/\\*[\\s\\S]*?\\*\\//,greedy:!0},string:{pattern:/(^|[^\\\\\"])\"(?:[^\\r\\n\\\\\"]|\\\\.)*\"/,lookbehind:!0,greedy:!0},keyword:/\\b(?:_|adj|and|assert|assert2|assert3|assigned|break|by|case|cat|catch|clear|cmpeq|cmpne|continue|declare|default|delete|diff|div|do|elif|else|end|eq|error|eval|exists|exit|for|forall|forward|fprintf|freeze|function|ge|gt|if|iload|import|in|intrinsic|is|join|le|load|local|lt|meet|mod|ne|not|notadj|notin|notsubset|or|print|printf|procedure|quit|random|read|readi|repeat|require|requirege|requirerange|restore|return|save|sdiff|select|subset|then|time|to|try|until|vprint|vprintf|vtime|when|where|while|xor)\\b/,boolean:/\\b(?:false|true)\\b/,generator:{pattern:/\\b[a-z_]\\w*(?=\\s*<)/i,alias:\"class-name\"},function:/\\b[a-z_]\\w*(?=\\s*\\()/i,number:{pattern:/(^|[^\\w.]|\\.\\.)(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+)?(?:_[a-z]?)?(?=$|[^\\w.]|\\.\\.)/,lookbehind:!0},operator:/->|[-+*/^~!|#=]|:=|\\.\\./,punctuation:/[()[\\]{}<>,;.:]/};/components/prism-http.min.js\u0007F!function(t){function a(t){return RegExp(\"(^(?:\"+t+\"):[ \\t]*(?![ \\t]))[^]+\",\"i\")}t.languages.http={\"request-line\":{pattern:/^(?:CONNECT|DELETE|GET|HEAD|OPTIONS|PATCH|POST|PRI|PUT|SEARCH|TRACE)\\s(?:https?:\\/\\/|\\/)\\S*\\sHTTP\\/[\\d.]+/m,inside:{method:{pattern:/^[A-Z]+\\b/,alias:\"property\"},\"request-target\":{pattern:/^(\\s)(?:https?:\\/\\/|\\/)\\S*(?=\\s)/,lookbehind:!0,alias:\"url\",inside:t.languages.uri},\"http-version\":{pattern:/^(\\s)HTTP\\/[\\d.]+/,lookbehind:!0,alias:\"property\"}}},\"response-status\":{pattern:/^HTTP\\/[\\d.]+ \\d+ .+/m,inside:{\"http-version\":{pattern:/^HTTP\\/[\\d.]+/,alias:\"property\"},\"status-code\":{pattern:/^(\\s)\\d+(?=\\s)/,lookbehind:!0,alias:\"number\"},\"reason-phrase\":{pattern:/^(\\s).+/,lookbehind:!0,alias:\"string\"}}},header:{pattern:/^[\\w-]+:.+(?:(?:\\r\\n?|\\n)[ \\t].+)*/m,inside:{\"header-value\":[{pattern:a(\"Content-Security-Policy\"),lookbehind:!0,alias:[\"csp\",\"languages-csp\"],inside:t.languages.csp},{pattern:a(\"Public-Key-Pins(?:-Report-Only)?\"),lookbehind:!0,alias:[\"hpkp\",\"languages-hpkp\"],inside:t.languages.hpkp},{pattern:a(\"Strict-Transport-Security\"),lookbehind:!0,alias:[\"hsts\",\"languages-hsts\"],inside:t.languages.hsts},{pattern:a(\"[^:]+\"),lookbehind:!0}],\"header-name\":{pattern:/^[^:]+/,alias:\"keyword\"},punctuation:/^:/}}};var e,n=t.languages,s={\"application/javascript\":n.javascript,\"application/json\":n.json||n.javascript,\"application/xml\":n.xml,\"text/xml\":n.xml,\"text/html\":n.html,\"text/css\":n.css,\"text/plain\":n.plain},i={\"application/json\":!0,\"application/xml\":!0};function r(t){var a=t.replace(/^[a-z]+\\//,\"\");return\"(?:\"+t+\"|\\\\w+/(?:[\\\\w.-]+\\\\+)+\"+a+\"(?![+\\\\w.-]))\"}for(var p in s)if(s[p]){e=e||{};var l=i[p]?r(p):p;e[p.replace(/\\//g,\"-\")]={pattern:RegExp(\"(content-type:\\\\s*\"+l+\"(?:(?:\\r\\n?|\\n)[\\\\w-].*)*(?:\\r(?:\\n|(?!\\n))|\\n))[^ \\t\\\\w-][^]*\",\"i\"),lookbehind:!0,inside:s[p]}}e&&t.languages.insertBefore(\"http\",\"header\",e)}(Prism);$/themes/prism-solarizedlight.min.css\u00065code[class*=language-],pre[class*=language-]{color:#657b83;font-family:Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}code[class*=language-] ::-moz-selection,code[class*=language-]::-moz-selection,pre[class*=language-] ::-moz-selection,pre[class*=language-]::-moz-selection{background:#073642}code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection,pre[class*=language-]::selection{background:#073642}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto;border-radius:.3em}:not(pre)>code[class*=language-],pre[class*=language-]{background-color:#fdf6e3}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#93a1a1}.token.punctuation{color:#586e75}.token.namespace{opacity:.7}.token.boolean,.token.constant,.token.deleted,.token.number,.token.property,.token.symbol,.token.tag{color:#268bd2}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string,.token.url{color:#2aa198}.token.entity{color:#657b83;background:#eee8d5}.token.atrule,.token.attr-value,.token.keyword{color:#859900}.token.class-name,.token.function{color:#b58900}.token.important,.token.regex,.token.variable{color:#cb4b16}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}/components/prism-hlsl.js\bPrism.languages.hlsl = Prism.languages.extend('c', {\n\n\t// Regarding keywords and class names:\n\t// The list of all keywords was split into 'keyword' and 'class-name' tokens based on whether they are capitalized.\n\t// https://docs.microsoft.com/en-us/windows/win32/direct3dhlsl/dx-graphics-hlsl-appendix-keywords\n\t// https://docs.microsoft.com/en-us/windows/win32/direct3dhlsl/dx-graphics-hlsl-appendix-reserved-words\n\t'class-name': [\n\t\tPrism.languages.c['class-name'],\n\t\t/\\b(?:AppendStructuredBuffer|BlendState|Buffer|ByteAddressBuffer|CompileShader|ComputeShader|ConsumeStructuredBuffer|DepthStencilState|DepthStencilView|DomainShader|GeometryShader|Hullshader|InputPatch|LineStream|OutputPatch|PixelShader|PointStream|RWBuffer|RWByteAddressBuffer|RWStructuredBuffer|RWTexture(?:1D|1DArray|2D|2DArray|3D)|RasterizerState|RenderTargetView|SamplerComparisonState|SamplerState|StructuredBuffer|Texture(?:1D|1DArray|2D|2DArray|2DMS|2DMSArray|3D|Cube|CubeArray)|TriangleStream|VertexShader)\\b/\n\t],\n\t'keyword': [\n\t\t// HLSL keyword\n\t\t/\\b(?:asm|asm_fragment|auto|break|case|catch|cbuffer|centroid|char|class|column_major|compile|compile_fragment|const|const_cast|continue|default|delete|discard|do|dynamic_cast|else|enum|explicit|export|extern|for|friend|fxgroup|goto|groupshared|if|in|inline|inout|interface|line|lineadj|linear|long|matrix|mutable|namespace|new|nointerpolation|noperspective|operator|out|packoffset|pass|pixelfragment|point|precise|private|protected|public|register|reinterpret_cast|return|row_major|sample|sampler|shared|short|signed|sizeof|snorm|stateblock|stateblock_state|static|static_cast|string|struct|switch|tbuffer|technique|technique10|technique11|template|texture|this|throw|triangle|triangleadj|try|typedef|typename|uniform|union|unorm|unsigned|using|vector|vertexfragment|virtual|void|volatile|while)\\b/,\n\t\t// scalar, vector, and matrix types\n\t\t/\\b(?:bool|double|dword|float|half|int|min(?:10float|12int|16(?:float|int|uint))|uint)(?:[1-4](?:x[1-4])?)?\\b/\n\t],\n\t// https://docs.microsoft.com/en-us/windows/win32/direct3dhlsl/dx-graphics-hlsl-appendix-grammar#floating-point-numbers\n\t'number': /(?:(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:[eE][+-]?\\d+)?|\\b0x[\\da-fA-F]+)[fFhHlLuU]?\\b/,\n\t'boolean': /\\b(?:false|true)\\b/\n});\n/components/prism-css-extras.js\u0011-(function (Prism) {\n\n\tvar string = /(\"|')(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1/;\n\tvar selectorInside;\n\n\tPrism.languages.css.selector = {\n\t\tpattern: Prism.languages.css.selector.pattern,\n\t\tlookbehind: true,\n\t\tinside: selectorInside = {\n\t\t\t'pseudo-element': /:(?:after|before|first-letter|first-line|selection)|::[-\\w]+/,\n\t\t\t'pseudo-class': /:[-\\w]+/,\n\t\t\t'class': /\\.[-\\w]+/,\n\t\t\t'id': /#[-\\w]+/,\n\t\t\t'attribute': {\n\t\t\t\tpattern: RegExp('\\\\[(?:[^[\\\\]\"\\']|' + string.source + ')*\\\\]'),\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': /^\\[|\\]$/,\n\t\t\t\t\t'case-sensitivity': {\n\t\t\t\t\t\tpattern: /(\\s)[si]$/i,\n\t\t\t\t\t\tlookbehind: true,\n\t\t\t\t\t\talias: 'keyword'\n\t\t\t\t\t},\n\t\t\t\t\t'namespace': {\n\t\t\t\t\t\tpattern: /^(\\s*)(?:(?!\\s)[-*\\w\\xA0-\\uFFFF])*\\|(?!=)/,\n\t\t\t\t\t\tlookbehind: true,\n\t\t\t\t\t\tinside: {\n\t\t\t\t\t\t\t'punctuation': /\\|$/\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t'attr-name': {\n\t\t\t\t\t\tpattern: /^(\\s*)(?:(?!\\s)[-\\w\\xA0-\\uFFFF])+/,\n\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t},\n\t\t\t\t\t'attr-value': [\n\t\t\t\t\t\tstring,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpattern: /(=\\s*)(?:(?!\\s)[-\\w\\xA0-\\uFFFF])+(?=\\s*$)/,\n\t\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t'operator': /[|~*^$]?=/\n\t\t\t\t}\n\t\t\t},\n\t\t\t'n-th': [\n\t\t\t\t{\n\t\t\t\t\tpattern: /(\\(\\s*)[+-]?\\d*[\\dn](?:\\s*[+-]\\s*\\d+)?(?=\\s*\\))/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'number': /[\\dn]+/,\n\t\t\t\t\t\t'operator': /[+-]/\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tpattern: /(\\(\\s*)(?:even|odd)(?=\\s*\\))/i,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t}\n\t\t\t],\n\t\t\t'combinator': />|\\+|~|\\|\\|/,\n\n\t\t\t// the `tag` token has been existed and removed.\n\t\t\t// because we can't find a perfect tokenize to match it.\n\t\t\t// if you want to add it, please read https://github.com/PrismJS/prism/pull/2373 first.\n\n\t\t\t'punctuation': /[(),]/,\n\t\t}\n\t};\n\n\tPrism.languages.css['atrule'].inside['selector-function-argument'].inside = selectorInside;\n\n\tPrism.languages.insertBefore('css', 'property', {\n\t\t'variable': {\n\t\t\tpattern: /(^|[^-\\w\\xA0-\\uFFFF])--(?!\\s)[-_a-z\\xA0-\\uFFFF](?:(?!\\s)[-\\w\\xA0-\\uFFFF])*/i,\n\t\t\tlookbehind: true\n\t\t}\n\t});\n\n\tvar unit = {\n\t\tpattern: /(\\b\\d+)(?:%|[a-z]+(?![\\w-]))/,\n\t\tlookbehind: true\n\t};\n\t// 123 -123 .123 -.123 12.3 -12.3\n\tvar number = {\n\t\tpattern: /(^|[^\\w.-])-?(?:\\d+(?:\\.\\d+)?|\\.\\d+)/,\n\t\tlookbehind: true\n\t};\n\n\tPrism.languages.insertBefore('css', 'function', {\n\t\t'operator': {\n\t\t\tpattern: /(\\s)[+\\-*\\/](?=\\s)/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t// CAREFUL!\n\t\t// Previewers and Inline color use hexcode and color.\n\t\t'hexcode': {\n\t\t\tpattern: /\\B#[\\da-f]{3,8}\\b/i,\n\t\t\talias: 'color'\n\t\t},\n\t\t'color': [\n\t\t\t{\n\t\t\t\tpattern: /(^|[^\\w-])(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|RebeccaPurple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)(?![\\w-])/i,\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /\\b(?:hsl|rgb)\\(\\s*\\d{1,3}\\s*,\\s*\\d{1,3}%?\\s*,\\s*\\d{1,3}%?\\s*\\)\\B|\\b(?:hsl|rgb)a\\(\\s*\\d{1,3}\\s*,\\s*\\d{1,3}%?\\s*,\\s*\\d{1,3}%?\\s*,\\s*(?:0|0?\\.\\d+|1)\\s*\\)\\B/i,\n\t\t\t\tinside: {\n\t\t\t\t\t'unit': unit,\n\t\t\t\t\t'number': number,\n\t\t\t\t\t'function': /[\\w-]+(?=\\()/,\n\t\t\t\t\t'punctuation': /[(),]/\n\t\t\t\t}\n\t\t\t}\n\t\t],\n\t\t// it's important that there is no boundary assertion after the hex digits\n\t\t'entity': /\\\\[\\da-f]{1,8}/i,\n\t\t'unit': unit,\n\t\t'number': number\n\t});\n\n}(Prism));\n/components/prism-sass.js\u0007\u0014(function (Prism) {\n\tPrism.languages.sass = Prism.languages.extend('css', {\n\t\t// Sass comments don't need to be closed, only indented\n\t\t'comment': {\n\t\t\tpattern: /^([ \\t]*)\\/[\\/*].*(?:(?:\\r?\\n|\\r)\\1[ \\t].+)*/m,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true\n\t\t}\n\t});\n\n\tPrism.languages.insertBefore('sass', 'atrule', {\n\t\t// We want to consume the whole line\n\t\t'atrule-line': {\n\t\t\t// Includes support for = and + shortcuts\n\t\t\tpattern: /^(?:[ \\t]*)[@+=].+/m,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'atrule': /(?:@[\\w-]+|[+=])/\n\t\t\t}\n\t\t}\n\t});\n\tdelete Prism.languages.sass.atrule;\n\n\n\tvar variable = /\\$[-\\w]+|#\\{\\$[-\\w]+\\}/;\n\tvar operator = [\n\t\t/[+*\\/%]|[=!]=|<=?|>=?|\\b(?:and|not|or)\\b/,\n\t\t{\n\t\t\tpattern: /(\\s)-(?=\\s)/,\n\t\t\tlookbehind: true\n\t\t}\n\t];\n\n\tPrism.languages.insertBefore('sass', 'property', {\n\t\t// We want to consume the whole line\n\t\t'variable-line': {\n\t\t\tpattern: /^[ \\t]*\\$.+/m,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'punctuation': /:/,\n\t\t\t\t'variable': variable,\n\t\t\t\t'operator': operator\n\t\t\t}\n\t\t},\n\t\t// We want to consume the whole line\n\t\t'property-line': {\n\t\t\tpattern: /^[ \\t]*(?:[^:\\s]+ *:.*|:[^:\\s].*)/m,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'property': [\n\t\t\t\t\t/[^:\\s]+(?=\\s*:)/,\n\t\t\t\t\t{\n\t\t\t\t\t\tpattern: /(:)[^:\\s]+/,\n\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t'punctuation': /:/,\n\t\t\t\t'variable': variable,\n\t\t\t\t'operator': operator,\n\t\t\t\t'important': Prism.languages.sass.important\n\t\t\t}\n\t\t}\n\t});\n\tdelete Prism.languages.sass.property;\n\tdelete Prism.languages.sass.important;\n\n\t// Now that whole lines for other patterns are consumed,\n\t// what's left should be selectors\n\tPrism.languages.insertBefore('sass', 'punctuation', {\n\t\t'selector': {\n\t\t\tpattern: /^([ \\t]*)\\S(?:,[^,\\r\\n]+|[^,\\r\\n]*)(?:,[^,\\r\\n]+)*(?:,(?:\\r?\\n|\\r)\\1[ \\t]+\\S(?:,[^,\\r\\n]+|[^,\\r\\n]*)(?:,[^,\\r\\n]+)*)*/m,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true\n\t\t}\n\t});\n\n}(Prism));\n/components/prism-stata.min.js\u0006fPrism.languages.stata={comment:[{pattern:/(^[ \\t]*)\\*.*/m,lookbehind:!0,greedy:!0},{pattern:/(^|\\s)\\/\\/.*|\\/\\*[\\s\\S]*?\\*\\//,lookbehind:!0,greedy:!0}],\"string-literal\":{pattern:/\"[^\"\\r\\n]*\"|[‘`']\".*?\"[’`']/,greedy:!0,inside:{interpolation:{pattern:/\\$\\{[^{}]*\\}|[‘`']\\w[^’`'\\r\\n]*[’`']/,inside:{punctuation:/^\\$\\{|\\}$/,expression:{pattern:/[\\s\\S]+/,inside:null}}},string:/[\\s\\S]+/}},mata:{pattern:/(^[ \\t]*mata[ \\t]*:)[\\s\\S]+?(?=^end\\b)/m,lookbehind:!0,greedy:!0,alias:\"language-mata\",inside:Prism.languages.mata},java:{pattern:/(^[ \\t]*java[ \\t]*:)[\\s\\S]+?(?=^end\\b)/m,lookbehind:!0,greedy:!0,alias:\"language-java\",inside:Prism.languages.java},python:{pattern:/(^[ \\t]*python[ \\t]*:)[\\s\\S]+?(?=^end\\b)/m,lookbehind:!0,greedy:!0,alias:\"language-python\",inside:Prism.languages.python},command:{pattern:/(^[ \\t]*(?:\\.[ \\t]+)?(?:(?:bayes|bootstrap|by|bysort|capture|collect|fmm|fp|frame|jackknife|mfp|mi|nestreg|noisily|permute|quietly|rolling|simulate|statsby|stepwise|svy|version|xi)\\b[^:\\r\\n]*:[ \\t]*|(?:capture|noisily|quietly|version)[ \\t]+)?)[a-zA-Z]\\w*/m,lookbehind:!0,greedy:!0,alias:\"keyword\"},variable:/\\$\\w+|[‘`']\\w[^’`'\\r\\n]*[’`']/,keyword:/\\b(?:bayes|bootstrap|by|bysort|capture|clear|collect|fmm|fp|frame|if|in|jackknife|mi[ \\t]+estimate|mfp|nestreg|noisily|of|permute|quietly|rolling|simulate|sort|statsby|stepwise|svy|varlist|version|xi)\\b/,boolean:/\\b(?:off|on)\\b/,number:/\\b\\d+(?:\\.\\d+)?\\b|\\B\\.\\d+/,function:/\\b[a-z_]\\w*(?=\\()/i,operator:/\\+\\+|--|##?|[<>!=~]=?|[+\\-*^&|/]/,punctuation:/[(){}[\\],:]/},Prism.languages.stata[\"string-literal\"].inside.interpolation.inside.expression.inside=Prism.languages.stata;/components.jsonń{\n\t\"core\": {\n\t\t\"meta\": {\n\t\t\t\"path\": \"components/prism-core.js\",\n\t\t\t\"option\": \"mandatory\"\n\t\t},\n\t\t\"core\": \"Core\"\n\t},\n\t\"themes\": {\n\t\t\"meta\": {\n\t\t\t\"path\": \"themes/{id}.css\",\n\t\t\t\"link\": \"index.html?theme={id}\",\n\t\t\t\"exclusive\": true\n\t\t},\n\t\t\"prism\": {\n\t\t\t\"title\": \"Default\",\n\t\t\t\"option\": \"default\"\n\t\t},\n\t\t\"prism-dark\": \"Dark\",\n\t\t\"prism-funky\": \"Funky\",\n\t\t\"prism-okaidia\": {\n\t\t\t\"title\": \"Okaidia\",\n\t\t\t\"owner\": \"ocodia\"\n\t\t},\n\t\t\"prism-twilight\": {\n\t\t\t\"title\": \"Twilight\",\n\t\t\t\"owner\": \"remybach\"\n\t\t},\n\t\t\"prism-coy\": {\n\t\t\t\"title\": \"Coy\",\n\t\t\t\"owner\": \"tshedor\"\n\t\t},\n\t\t\"prism-solarizedlight\": {\n\t\t\t\"title\": \"Solarized Light\",\n\t\t\t\"owner\": \"hectormatos2011 \"\n\t\t},\n\t\t\"prism-tomorrow\": {\n\t\t\t\"title\": \"Tomorrow Night\",\n\t\t\t\"owner\": \"Rosey\"\n\t\t}\n\t},\n\t\"languages\": {\n\t\t\"meta\": {\n\t\t\t\"path\": \"components/prism-{id}\",\n\t\t\t\"noCSS\": true,\n\t\t\t\"examplesPath\": \"examples/prism-{id}\",\n\t\t\t\"addCheckAll\": true\n\t\t},\n\t\t\"markup\": {\n\t\t\t\"title\": \"Markup\",\n\t\t\t\"alias\": [\"html\", \"xml\", \"svg\", \"mathml\", \"ssml\", \"atom\", \"rss\"],\n\t\t\t\"aliasTitles\": {\n\t\t\t\t\"html\": \"HTML\",\n\t\t\t\t\"xml\": \"XML\",\n\t\t\t\t\"svg\": \"SVG\",\n\t\t\t\t\"mathml\": \"MathML\",\n\t\t\t\t\"ssml\": \"SSML\",\n\t\t\t\t\"atom\": \"Atom\",\n\t\t\t\t\"rss\": \"RSS\"\n\t\t\t},\n\t\t\t\"option\": \"default\"\n\t\t},\n\t\t\"css\": {\n\t\t\t\"title\": \"CSS\",\n\t\t\t\"option\": \"default\",\n\t\t\t\"modify\": \"markup\"\n\t\t},\n\t\t\"clike\": {\n\t\t\t\"title\": \"C-like\",\n\t\t\t\"option\": \"default\"\n\t\t},\n\t\t\"javascript\": {\n\t\t\t\"title\": \"JavaScript\",\n\t\t\t\"require\": \"clike\",\n\t\t\t\"modify\": \"markup\",\n\t\t\t\"optional\": \"regex\",\n\t\t\t\"alias\": \"js\",\n\t\t\t\"option\": \"default\"\n\t\t},\n\t\t\"abap\": {\n\t\t\t\"title\": \"ABAP\",\n\t\t\t\"owner\": \"dellagustin\"\n\t\t},\n\t\t\"abnf\": {\n\t\t\t\"title\": \"ABNF\",\n\t\t\t\"owner\": \"RunDevelopment\"\n\t\t},\n\t\t\"actionscript\": {\n\t\t\t\"title\": \"ActionScript\",\n\t\t\t\"require\": \"javascript\",\n\t\t\t\"modify\": \"markup\",\n\t\t\t\"owner\": \"Golmote\"\n\t\t},\n\t\t\"ada\": {\n\t\t\t\"title\": \"Ada\",\n\t\t\t\"owner\": \"Lucretia\"\n\t\t},\n\t\t\"agda\": {\n\t\t\t\"title\": \"Agda\",\n\t\t\t\"owner\": \"xy-ren\"\n\t\t},\n\t\t\"al\": {\n\t\t\t\"title\": \"AL\",\n\t\t\t\"owner\": \"RunDevelopment\"\n\t\t},\n\t\t\"antlr4\": {\n\t\t\t\"title\": \"ANTLR4\",\n\t\t\t\"alias\": \"g4\",\n\t\t\t\"owner\": \"RunDevelopment\"\n\t\t},\n\t\t\"apacheconf\": {\n\t\t\t\"title\": \"Apache Configuration\",\n\t\t\t\"owner\": \"GuiTeK\"\n\t\t},\n\t\t\"apex\": {\n\t\t\t\"title\": \"Apex\",\n\t\t\t\"require\": [\"clike\", \"sql\"],\n\t\t\t\"owner\": \"RunDevelopment\"\n\t\t},\n\t\t\"apl\": {\n\t\t\t\"title\": \"APL\",\n\t\t\t\"owner\": \"ngn\"\n\t\t},\n\t\t\"applescript\": {\n\t\t\t\"title\": \"AppleScript\",\n\t\t\t\"owner\": \"Golmote\"\n\t\t},\n\t\t\"aql\": {\n\t\t\t\"title\": \"AQL\",\n\t\t\t\"owner\": \"RunDevelopment\"\n\t\t},\n\t\t\"arduino\": {\n\t\t\t\"title\": \"Arduino\",\n\t\t\t\"require\": \"cpp\",\n\t\t\t\"alias\": \"ino\",\n\t\t\t\"owner\": \"dkern\"\n\t\t},\n\t\t\"arff\": {\n\t\t\t\"title\": \"ARFF\",\n\t\t\t\"owner\": \"Golmote\"\n\t\t},\n\t\t\"armasm\": {\n\t\t\t\"title\": \"ARM Assembly\",\n\t\t\t\"alias\": \"arm-asm\",\n\t\t\t\"owner\": \"RunDevelopment\"\n\t\t},\n\t\t\"arturo\": {\n\t\t\t\"title\": \"Arturo\",\n\t\t\t\"alias\": \"art\",\n\t\t\t\"optional\": [\n\t\t\t\t\"bash\",\n\t\t\t\t\"css\",\n\t\t\t\t\"javascript\",\n\t\t\t\t\"markup\",\n\t\t\t\t\"markdown\",\n\t\t\t\t\"sql\"\n\t\t\t],\n\t\t\t\"owner\": \"drkameleon\"\n\t\t},\n\t\t\"asciidoc\": {\n\t\t\t\"alias\": \"adoc\",\n\t\t\t\"title\": \"AsciiDoc\",\n\t\t\t\"owner\": \"Golmote\"\n\t\t},\n\t\t\"aspnet\": {\n\t\t\t\"title\": \"ASP.NET (C#)\",\n\t\t\t\"require\": [\"markup\", \"csharp\"],\n\t\t\t\"owner\": \"nauzilus\"\n\t\t},\n\t\t\"asm6502\": {\n\t\t\t\"title\": \"6502 Assembly\",\n\t\t\t\"owner\": \"kzurawel\"\n\t\t},\n\t\t\"asmatmel\": {\n\t\t\t\"title\": \"Atmel AVR Assembly\",\n\t\t\t\"owner\": \"cerkit\"\n\t\t},\n\t\t\"autohotkey\": {\n\t\t\t\"title\": \"AutoHotkey\",\n\t\t\t\"owner\": \"aviaryan\"\n\t\t},\n\t\t\"autoit\": {\n\t\t\t\"title\": \"AutoIt\",\n\t\t\t\"owner\": \"Golmote\"\n\t\t},\n\t\t\"avisynth\": {\n\t\t\t\"title\": \"AviSynth\",\n\t\t\t\"alias\": \"avs\",\n\t\t\t\"owner\": \"Zinfidel\"\n\t\t},\n\t\t\"avro-idl\": {\n\t\t\t\"title\":\"Avro IDL\",\n\t\t\t\"alias\": \"avdl\",\n\t\t\t\"owner\": \"RunDevelopment\"\n\t\t},\n\t\t\"awk\": {\n\t\t\t\"title\": \"AWK\",\n\t\t\t\"alias\": \"gawk\",\n\t\t\t\"aliasTitles\": {\n\t\t\t\t\"gawk\": \"GAWK\"\n\t\t\t},\n\t\t\t\"owner\": \"RunDevelopment\"\n\t\t},\n\t\t\"bash\": {\n\t\t\t\"title\": \"Bash\",\n\t\t\t\"alias\": [\"sh\", \"shell\"],\n\t\t\t\"aliasTitles\": {\n\t\t\t\t\"sh\": \"Shell\",\n\t\t\t\t\"shell\": \"Shell\"\n\t\t\t},\n\t\t\t\"owner\": \"zeitgeist87\"\n\t\t},\n\t\t\"basic\": {\n\t\t\t\"title\": \"BASIC\",\n\t\t\t\"owner\": \"Golmote\"\n\t\t},\n\t\t\"batch\": {\n\t\t\t\"title\": \"Batch\",\n\t\t\t\"owner\": \"Golmote\"\n\t\t},\n\t\t\"bbcode\": {\n\t\t\t\"title\": \"BBcode\",\n\t\t\t\"alias\": \"shortcode\",\n\t\t\t\"aliasTitles\": {\n\t\t\t\t\"shortcode\": \"Shortcode\"\n\t\t\t},\n\t\t\t\"owner\": \"RunDevelopment\"\n\t\t},\n\t\t\"bbj\": {\n\t\t\t\"title\": \"BBj\",\n\t\t\t\"owner\": \"hyyan\"\n\t\t},\n\t\t\"bicep\": {\n\t\t\t\"title\": \"Bicep\",\n\t\t\t\"owner\": \"johnnyreilly\"\n\t\t},\n\t\t\"birb\": {\n\t\t\t\"title\": \"Birb\",\n\t\t\t\"require\": \"clike\",\n\t\t\t\"owner\": \"Calamity210\"\n\t\t},\n\t\t\"bison\": {\n\t\t\t\"title\": \"Bison\",\n\t\t\t\"require\": \"c\",\n\t\t\t\"owner\": \"Golmote\"\n\t\t},\n\t\t\"bnf\": {\n\t\t\t\"title\": \"BNF\",\n\t\t\t\"alias\": \"rbnf\",\n\t\t\t\"aliasTitles\": {\n\t\t\t\t\"rbnf\": \"RBNF\"\n\t\t\t},\n\t\t\t\"owner\": \"RunDevelopment\"\n\t\t},\n\t\t\"bqn\": {\n\t\t\t\"title\": \"BQN\",\n\t\t\t\"owner\": \"yewscion\"\n\t\t},\n\t\t\"brainfuck\": {\n\t\t\t\"title\": \"Brainfuck\",\n\t\t\t\"owner\": \"Golmote\"\n\t\t},\n\t\t\"brightscript\": {\n\t\t\t\"title\": \"BrightScript\",\n\t\t\t\"owner\": \"RunDevelopment\"\n\t\t},\n\t\t\"bro\": {\n\t\t\t\"title\": \"Bro\",\n\t\t\t\"owner\": \"wayward710\"\n\t\t},\n\t\t\"bsl\": {\n\t\t\t\"title\": \"BSL (1C:Enterprise)\",\n\t\t\t\"alias\": \"oscript\",\n\t\t\t\"aliasTitles\": {\n\t\t\t\t\"oscript\": \"OneScript\"\n\t\t\t},\n\t\t\t\"owner\": \"Diversus23\"\n\t\t},\n\t\t\"c\": {\n\t\t\t\"title\": \"C\",\n\t\t\t\"require\": \"clike\",\n\t\t\t\"owner\": \"zeitgeist87\"\n\t\t},\n\t\t\"csharp\": {\n\t\t\t\"title\": \"C#\",\n\t\t\t\"require\": \"clike\",\n\t\t\t\"alias\": [\"cs\", \"dotnet\"],\n\t\t\t\"owner\": \"mvalipour\"\n\t\t},\n\t\t\"cpp\": {\n\t\t\t\"title\": \"C++\",\n\t\t\t\"require\": \"c\",\n\t\t\t\"owner\": \"zeitgeist87\"\n\t\t},\n\t\t\"cfscript\": {\n\t\t\t\"title\": \"CFScript\",\n\t\t\t\"require\": \"clike\",\n\t\t\t\"alias\": \"cfc\",\n\t\t\t\"owner\": \"mjclemente\"\n\t\t},\n\t\t\"chaiscript\": {\n\t\t\t\"title\": \"ChaiScript\",\n\t\t\t\"require\": [\"clike\", \"cpp\"],\n\t\t\t\"owner\": \"RunDevelopment\"\n\t\t},\n\t\t\"cil\": {\n\t\t\t\"title\": \"CIL\",\n\t\t\t\"owner\": \"sbrl\"\n\t\t},\n\t\t\"cilkc\": {\n\t\t\t\"title\": \"Cilk/C\",\n\t\t\t\"require\": \"c\",\n\t\t\t\"alias\": \"cilk-c\",\n\t\t\t\"owner\": \"OpenCilk\"\n\t\t},\n\t\t\"cilkcpp\": {\n\t\t\t\"title\": \"Cilk/C++\",\n\t\t\t\"require\": \"cpp\",\n\t\t\t\"alias\": [\"cilk-cpp\", \"cilk\"],\n\t\t\t\"owner\": \"OpenCilk\"\n\t\t},\n\t\t\"clojure\": {\n\t\t\t\"title\": \"Clojure\",\n\t\t\t\"owner\": \"troglotit\"\n\t\t},\n\t\t\"cmake\": {\n\t\t\t\"title\": \"CMake\",\n\t\t\t\"owner\": \"mjrogozinski\"\n\t\t},\n\t\t\"cobol\": {\n\t\t\t\"title\": \"COBOL\",\n\t\t\t\"owner\": \"RunDevelopment\"\n\t\t},\n\t\t\"coffeescript\": {\n\t\t\t\"title\": \"CoffeeScript\",\n\t\t\t\"require\": \"javascript\",\n\t\t\t\"alias\": \"coffee\",\n\t\t\t\"owner\": \"R-osey\"\n\t\t},\n\t\t\"concurnas\": {\n\t\t\t\"title\": \"Concurnas\",\n\t\t\t\"alias\": \"conc\",\n\t\t\t\"owner\": \"jasontatton\"\n\t\t},\n\t\t\"csp\": {\n\t\t\t\"title\": \"Content-Security-Policy\",\n\t\t\t\"owner\": \"ScottHelme\"\n\t\t},\n\t\t\"cooklang\": {\n\t\t\t\"title\": \"Cooklang\",\n\t\t\t\"owner\": \"ahue\"\n\t\t},\n\t\t\"coq\": {\n\t\t\t\"title\": \"Coq\",\n\t\t\t\"owner\": \"RunDevelopment\"\n\t\t},\n\t\t\"crystal\": {\n\t\t\t\"title\": \"Crystal\",\n\t\t\t\"require\": \"ruby\",\n\t\t\t\"owner\": \"MakeNowJust\"\n\t\t},\n\t\t\"css-extras\": {\n\t\t\t\"title\": \"CSS Extras\",\n\t\t\t\"require\": \"css\",\n\t\t\t\"modify\": \"css\",\n\t\t\t\"owner\": \"milesj\"\n\t\t},\n\t\t\"csv\": {\n\t\t\t\"title\": \"CSV\",\n\t\t\t\"owner\": \"RunDevelopment\"\n\t\t},\n\t\t\"cue\": {\n\t\t\t\"title\": \"CUE\",\n\t\t\t\"owner\": \"RunDevelopment\"\n\t\t},\n\t\t\"cypher\": {\n\t\t\t\"title\": \"Cypher\",\n\t\t\t\"owner\": \"RunDevelopment\"\n\t\t},\n\t\t\"d\": {\n\t\t\t\"title\": \"D\",\n\t\t\t\"require\": \"clike\",\n\t\t\t\"owner\": \"Golmote\"\n\t\t},\n\t\t\"dart\": {\n\t\t\t\"title\": \"Dart\",\n\t\t\t\"require\": \"clike\",\n\t\t\t\"owner\": \"Golmote\"\n\t\t},\n\t\t\"dataweave\": {\n\t\t\t\"title\": \"DataWeave\",\n\t\t\t\"owner\": \"machaval\"\n\t\t},\n\t\t\"dax\": {\n\t\t\t\"title\": \"DAX\",\n\t\t\t\"owner\": \"peterbud\"\n\t\t},\n\t\t\"dhall\": {\n\t\t\t\"title\": \"Dhall\",\n\t\t\t\"owner\": \"RunDevelopment\"\n\t\t},\n\t\t\"diff\": {\n\t\t\t\"title\": \"Diff\",\n\t\t\t\"owner\": \"uranusjr\"\n\t\t},\n\t\t\"django\": {\n\t\t\t\"title\": \"Django/Jinja2\",\n\t\t\t\"require\": \"markup-templating\",\n\t\t\t\"alias\": \"jinja2\",\n\t\t\t\"owner\": \"romanvm\"\n\t\t},\n\t\t\"dns-zone-file\": {\n\t\t\t\"title\": \"DNS zone file\",\n\t\t\t\"owner\": \"RunDevelopment\",\n\t\t\t\"alias\": \"dns-zone\"\n\t\t},\n\t\t\"docker\": {\n\t\t\t\"title\": \"Docker\",\n\t\t\t\"alias\": \"dockerfile\",\n\t\t\t\"owner\": \"JustinBeckwith\"\n\t\t},\n\t\t\"dot\": {\n\t\t\t\"title\": \"DOT (Graphviz)\",\n\t\t\t\"alias\": \"gv\",\n\t\t\t\"optional\": \"markup\",\n\t\t\t\"owner\": \"RunDevelopment\"\n\t\t},\n\t\t\"ebnf\": {\n\t\t\t\"title\": \"EBNF\",\n\t\t\t\"owner\": \"RunDevelopment\"\n\t\t},\n\t\t\"editorconfig\": {\n\t\t\t\"title\": \"EditorConfig\",\n\t\t\t\"owner\": \"osipxd\"\n\t\t},\n\t\t\"eiffel\": {\n\t\t\t\"title\": \"Eiffel\",\n\t\t\t\"owner\": \"Conaclos\"\n\t\t},\n\t\t\"ejs\": {\n\t\t\t\"title\": \"EJS\",\n\t\t\t\"require\": [\"javascript\", \"markup-templating\"],\n\t\t\t\"owner\": \"RunDevelopment\",\n\t\t\t\"alias\": \"eta\",\n\t\t\t\"aliasTitles\": {\n\t\t\t\t\"eta\": \"Eta\"\n\t\t\t}\n\t\t},\n\t\t\"elixir\": {\n\t\t\t\"title\": \"Elixir\",\n\t\t\t\"owner\": \"Golmote\"\n\t\t},\n\t\t\"elm\": {\n\t\t\t\"title\": \"Elm\",\n\t\t\t\"owner\": \"zwilias\"\n\t\t},\n\t\t\"etlua\": {\n\t\t\t\"title\": \"Embedded Lua templating\",\n\t\t\t\"require\": [\"lua\", \"markup-templating\"],\n\t\t\t\"owner\": \"RunDevelopment\"\n\t\t},\n\t\t\"erb\": {\n\t\t\t\"title\": \"ERB\",\n\t\t\t\"require\": [\"ruby\", \"markup-templating\"],\n\t\t\t\"owner\": \"Golmote\"\n\t\t},\n\t\t\"erlang\": {\n\t\t\t\"title\": \"Erlang\",\n\t\t\t\"owner\": \"Golmote\"\n\t\t},\n\t\t\"excel-formula\": {\n\t\t\t\"title\": \"Excel Formula\",\n\t\t\t\"alias\": [\"xlsx\", \"xls\"],\n\t\t\t\"owner\": \"RunDevelopment\"\n\t\t},\n\t\t\"fsharp\": {\n\t\t\t\"title\": \"F#\",\n\t\t\t\"require\": \"clike\",\n\t\t\t\"owner\": \"simonreynolds7\"\n\t\t},\n\t\t\"factor\": {\n\t\t\t\"title\": \"Factor\",\n\t\t\t\"owner\": \"catb0t\"\n\t\t},\n\t\t\"false\": {\n\t\t\t\"title\": \"False\",\n\t\t\t\"owner\": \"edukisto\"\n\t\t},\n\t\t\"firestore-security-rules\": {\n\t\t\t\"title\": \"Firestore security rules\",\n\t\t\t\"require\": \"clike\",\n\t\t\t\"owner\": \"RunDevelopment\"\n\t\t},\n\t\t\"flow\": {\n\t\t\t\"title\": \"Flow\",\n\t\t\t\"require\": \"javascript\",\n\t\t\t\"owner\": \"Golmote\"\n\t\t},\n\t\t\"fortran\": {\n\t\t\t\"title\": \"Fortran\",\n\t\t\t\"owner\": \"Golmote\"\n\t\t},\n\t\t\"ftl\": {\n\t\t\t\"title\": \"FreeMarker Template Language\",\n\t\t\t\"require\": \"markup-templating\",\n\t\t\t\"owner\": \"RunDevelopment\"\n\t\t},\n\t\t\"gml\": {\n\t\t\t\"title\": \"GameMaker Language\",\n\t\t\t\"alias\": \"gamemakerlanguage\",\n\t\t\t\"require\": \"clike\",\n\t\t\t\"owner\": \"LiarOnce\"\n\t\t},\n\t\t\"gap\": {\n\t\t\t\"title\": \"GAP (CAS)\",\n\t\t\t\"owner\": \"RunDevelopment\"\n\t\t},\n\t\t\"gcode\": {\n\t\t\t\"title\": \"G-code\",\n\t\t\t\"owner\": \"RunDevelopment\"\n\t\t},\n\t\t\"gdscript\": {\n\t\t\t\"title\": \"GDScript\",\n\t\t\t\"owner\": \"RunDevelopment\"\n\t\t},\n\t\t\"gedcom\": {\n\t\t\t\"title\": \"GEDCOM\",\n\t\t\t\"owner\": \"Golmote\"\n\t\t},\n\t\t\"gettext\": {\n\t\t\t\"title\": \"gettext\",\n\t\t\t\"alias\": \"po\",\n\t\t\t\"owner\": \"RunDevelopment\"\n\t\t},\n\t\t\"gherkin\": {\n\t\t\t\"title\": \"Gherkin\",\n\t\t\t\"owner\": \"hason\"\n\t\t},\n\t\t\"git\": {\n\t\t\t\"title\": \"Git\",\n\t\t\t\"owner\": \"lgiraudel\"\n\t\t},\n\t\t\"glsl\": {\n\t\t\t\"title\": \"GLSL\",\n\t\t\t\"require\": \"c\",\n\t\t\t\"owner\": \"Golmote\"\n\t\t},\n\t\t\"gn\": {\n\t\t\t\"title\": \"GN\",\n\t\t\t\"alias\": \"gni\",\n\t\t\t\"owner\": \"RunDevelopment\"\n\t\t},\n\t\t\"linker-script\": {\n\t\t\t\"title\": \"GNU Linker Script\",\n\t\t\t\"alias\": \"ld\",\n\t\t\t\"owner\": \"RunDevelopment\"\n\t\t},\n\t\t\"go\": {\n\t\t\t\"title\": \"Go\",\n\t\t\t\"require\": \"clike\",\n\t\t\t\"owner\": \"arnehormann\"\n\t\t},\n\t\t\"go-module\": {\n\t\t\t\"title\": \"Go module\",\n\t\t\t\"alias\": \"go-mod\",\n\t\t\t\"owner\": \"RunDevelopment\"\n\t\t},\n\t\t\"gradle\": {\n\t\t\t\"title\": \"Gradle\",\n\t\t\t\"require\": \"clike\",\n\t\t\t\"owner\": \"zeabdelkhalek-badido18\"\n\t\t},\n\t\t\"graphql\": {\n\t\t\t\"title\": \"GraphQL\",\n\t\t\t\"optional\": \"markdown\",\n\t\t\t\"owner\": \"Golmote\"\n\t\t},\n\t\t\"groovy\": {\n\t\t\t\"title\": \"Groovy\",\n\t\t\t\"require\": \"clike\",\n\t\t\t\"owner\": \"robfletcher\"\n\t\t},\n\t\t\"haml\": {\n\t\t\t\"title\": \"Haml\",\n\t\t\t\"require\": \"ruby\",\n\t\t\t\"optional\": [\n\t\t\t\t\"css\",\n\t\t\t\t\"css-extras\",\n\t\t\t\t\"coffeescript\",\n\t\t\t\t\"erb\",\n\t\t\t\t\"javascript\",\n\t\t\t\t\"less\",\n\t\t\t\t\"markdown\",\n\t\t\t\t\"scss\",\n\t\t\t\t\"textile\"\n\t\t\t],\n\t\t\t\"owner\": \"Golmote\"\n\t\t},\n\t\t\"handlebars\": {\n\t\t\t\"title\": \"Handlebars\",\n\t\t\t\"require\": \"markup-templating\",\n\t\t\t\"alias\": [\"hbs\", \"mustache\"],\n\t\t\t\"aliasTitles\": {\n\t\t\t\t\"mustache\": \"Mustache\"\n\t\t\t},\n\t\t\t\"owner\": \"Golmote\"\n\t\t},\n\t\t\"haskell\": {\n\t\t\t\"title\": \"Haskell\",\n\t\t\t\"alias\": \"hs\",\n\t\t\t\"owner\": \"bholst\"\n\t\t},\n\t\t\"haxe\": {\n\t\t\t\"title\": \"Haxe\",\n\t\t\t\"require\": \"clike\",\n\t\t\t\"optional\": \"regex\",\n\t\t\t\"owner\": \"Golmote\"\n\t\t},\n\t\t\"hcl\": {\n\t\t\t\"title\": \"HCL\",\n\t\t\t\"owner\": \"outsideris\"\n\t\t},\n\t\t\"hlsl\": {\n\t\t\t\"title\": \"HLSL\",\n\t\t\t\"require\": \"c\",\n\t\t\t\"owner\": \"RunDevelopment\"\n\t\t},\n\t\t\"hoon\": {\n\t\t\t\"title\": \"Hoon\",\n\t\t\t\"owner\": \"matildepark\"\n\t\t},\n\t\t\"http\": {\n\t\t\t\"title\": \"HTTP\",\n\t\t\t\"optional\": [\n\t\t\t\t\"csp\",\n\t\t\t\t\"css\",\n\t\t\t\t\"hpkp\",\n\t\t\t\t\"hsts\",\n\t\t\t\t\"javascript\",\n\t\t\t\t\"json\",\n\t\t\t\t\"markup\",\n\t\t\t\t\"uri\"\n\t\t\t],\n\t\t\t\"owner\": \"danielgtaylor\"\n\t\t},\n\t\t\"hpkp\": {\n\t\t\t\"title\": \"HTTP Public-Key-Pins\",\n\t\t\t\"owner\": \"ScottHelme\"\n\t\t},\n\t\t\"hsts\": {\n\t\t\t\"title\": \"HTTP Strict-Transport-Security\",\n\t\t\t\"owner\": \"ScottHelme\"\n\t\t},\n\t\t\"ichigojam\": {\n\t\t\t\"title\": \"IchigoJam\",\n\t\t\t\"owner\": \"BlueCocoa\"\n\t\t},\n\t\t\"icon\": {\n\t\t\t\"title\": \"Icon\",\n\t\t\t\"owner\": \"Golmote\"\n\t\t},\n\t\t\"icu-message-format\": {\n\t\t\t\"title\": \"ICU Message Format\",\n\t\t\t\"owner\": \"RunDevelopment\"\n\t\t},\n\t\t\"idris\": {\n\t\t\t\"title\": \"Idris\",\n\t\t\t\"alias\": \"idr\",\n\t\t\t\"owner\": \"KeenS\",\n\t\t\t\"require\": \"haskell\"\n\t\t},\n\t\t\"ignore\": {\n\t\t\t\"title\": \".ignore\",\n\t\t\t\"owner\": \"osipxd\",\n\t\t\t\"alias\": [\n\t\t\t\t\"gitignore\",\n\t\t\t\t\"hgignore\",\n\t\t\t\t\"npmignore\"\n\t\t\t],\n\t\t\t\"aliasTitles\": {\n\t\t\t\t\"gitignore\": \".gitignore\",\n\t\t\t\t\"hgignore\": \".hgignore\",\n\t\t\t\t\"npmignore\": \".npmignore\"\n\t\t\t}\n\t\t},\n\t\t\"inform7\": {\n\t\t\t\"title\": \"Inform 7\",\n\t\t\t\"owner\": \"Golmote\"\n\t\t},\n\t\t\"ini\": {\n\t\t\t\"title\": \"Ini\",\n\t\t\t\"owner\": \"aviaryan\"\n\t\t},\n\t\t\"io\": {\n\t\t\t\"title\": \"Io\",\n\t\t\t\"owner\": \"AlesTsurko\"\n\t\t},\n\t\t\"j\": {\n\t\t\t\"title\": \"J\",\n\t\t\t\"owner\": \"Golmote\"\n\t\t},\n\t\t\"java\": {\n\t\t\t\"title\": \"Java\",\n\t\t\t\"require\": \"clike\",\n\t\t\t\"owner\": \"sherblot\"\n\t\t},\n\t\t\"javadoc\": {\n\t\t\t\"title\": \"JavaDoc\",\n\t\t\t\"require\": [\"markup\", \"java\", \"javadoclike\"],\n\t\t\t\"modify\": \"java\",\n\t\t\t\"optional\": \"scala\",\n\t\t\t\"owner\": \"RunDevelopment\"\n\t\t},\n\t\t\"javadoclike\": {\n\t\t\t\"title\": \"JavaDoc-like\",\n\t\t\t\"modify\": [\n\t\t\t\t\"java\",\n\t\t\t\t\"javascript\",\n\t\t\t\t\"php\"\n\t\t\t],\n\t\t\t\"owner\": \"RunDevelopment\"\n\t\t},\n\t\t\"javastacktrace\": {\n\t\t\t\"title\": \"Java stack trace\",\n\t\t\t\"owner\": \"RunDevelopment\"\n\t\t},\n\t\t\"jexl\": {\n\t\t\t\"title\": \"Jexl\",\n\t\t\t\"owner\": \"czosel\"\n\t\t},\n\t\t\"jolie\": {\n\t\t\t\"title\": \"Jolie\",\n\t\t\t\"require\": \"clike\",\n\t\t\t\"owner\": \"thesave\"\n\t\t},\n\t\t\"jq\": {\n\t\t\t\"title\": \"JQ\",\n\t\t\t\"owner\": \"RunDevelopment\"\n\t\t},\n\t\t\"jsdoc\": {\n\t\t\t\"title\": \"JSDoc\",\n\t\t\t\"require\": [\"javascript\", \"javadoclike\", \"typescript\"],\n\t\t\t\"modify\": \"javascript\",\n\t\t\t\"optional\": [\n\t\t\t\t\"actionscript\",\n\t\t\t\t\"coffeescript\"\n\t\t\t],\n\t\t\t\"owner\": \"RunDevelopment\"\n\t\t},\n\t\t\"js-extras\": {\n\t\t\t\"title\": \"JS Extras\",\n\t\t\t\"require\": \"javascript\",\n\t\t\t\"modify\": \"javascript\",\n\t\t\t\"optional\": [\n\t\t\t\t\"actionscript\",\n\t\t\t\t\"coffeescript\",\n\t\t\t\t\"flow\",\n\t\t\t\t\"n4js\",\n\t\t\t\t\"typescript\"\n\t\t\t],\n\t\t\t\"owner\": \"RunDevelopment\"\n\t\t},\n\t\t\"json\": {\n\t\t\t\"title\": \"JSON\",\n\t\t\t\"alias\": \"webmanifest\",\n\t\t\t\"aliasTitles\": {\n\t\t\t\t\"webmanifest\": \"Web App Manifest\"\n\t\t\t},\n\t\t\t\"owner\": \"CupOfTea696\"\n\t\t},\n\t\t\"json5\": {\n\t\t\t\"title\": \"JSON5\",\n\t\t\t\"require\": \"json\",\n\t\t\t\"owner\": \"RunDevelopment\"\n\t\t},\n\t\t\"jsonp\": {\n\t\t\t\"title\": \"JSONP\",\n\t\t\t\"require\": \"json\",\n\t\t\t\"owner\": \"RunDevelopment\"\n\t\t},\n\t\t\"jsstacktrace\": {\n\t\t\t\"title\": \"JS stack trace\",\n\t\t\t\"owner\": \"sbrl\"\n\t\t},\n\t\t\"js-templates\": {\n\t\t\t\"title\": \"JS Templates\",\n\t\t\t\"require\": \"javascript\",\n\t\t\t\"modify\": \"javascript\",\n\t\t\t\"optional\": [\n\t\t\t\t\"css\",\n\t\t\t\t\"css-extras\",\n\t\t\t\t\"graphql\",\n\t\t\t\t\"markdown\",\n\t\t\t\t\"markup\",\n\t\t\t\t\"sql\"\n\t\t\t],\n\t\t\t\"owner\": \"RunDevelopment\"\n\t\t},\n\t\t\"julia\": {\n\t\t\t\"title\": \"Julia\",\n\t\t\t\"owner\": \"cdagnino\"\n\t\t},\n\t\t\"keepalived\": {\n\t\t\t\"title\": \"Keepalived Configure\",\n\t\t\t\"owner\": \"dev-itsheng\"\n\t\t},\n\t\t\"keyman\": {\n\t\t\t\"title\": \"Keyman\",\n\t\t\t\"owner\": \"mcdurdin\"\n\t\t},\n\t\t\"kotlin\": {\n\t\t\t\"title\": \"Kotlin\",\n\t\t\t\"alias\": [\"kt\", \"kts\"],\n\t\t\t\"aliasTitles\": {\n\t\t\t\t\"kts\": \"Kotlin Script\"\n\t\t\t},\n\t\t\t\"require\": \"clike\",\n\t\t\t\"owner\": \"Golmote\"\n\t\t},\n\t\t\"kumir\": {\n\t\t\t\"title\": \"KuMir (КуМир)\",\n\t\t\t\"alias\": \"kum\",\n\t\t\t\"owner\": \"edukisto\"\n\t\t},\n\t\t\"kusto\": {\n\t\t\t\"title\": \"Kusto\",\n\t\t\t\"owner\": \"RunDevelopment\"\n\t\t},\n\t\t\"latex\": {\n\t\t\t\"title\": \"LaTeX\",\n\t\t\t\"alias\": [\"tex\", \"context\"],\n\t\t\t\"aliasTitles\": {\n\t\t\t\t\"tex\": \"TeX\",\n\t\t\t\t\"context\": \"ConTeXt\"\n\t\t\t},\n\t\t\t\"owner\": \"japborst\"\n\t\t},\n\t\t\"latte\": {\n\t\t\t\"title\": \"Latte\",\n\t\t\t\"require\": [\"clike\", \"markup-templating\", \"php\"],\n\t\t\t\"owner\": \"nette\"\n\t\t},\n\t\t\"less\": {\n\t\t\t\"title\": \"Less\",\n\t\t\t\"require\": \"css\",\n\t\t\t\"optional\": \"css-extras\",\n\t\t\t\"owner\": \"Golmote\"\n\t\t},\n\t\t\"lilypond\": {\n\t\t\t\"title\": \"LilyPond\",\n\t\t\t\"require\": \"scheme\",\n\t\t\t\"alias\": \"ly\",\n\t\t\t\"owner\": \"RunDevelopment\"\n\t\t},\n\t\t\"liquid\": {\n\t\t\t\"title\": \"Liquid\",\n\t\t\t\"require\": \"markup-templating\",\n\t\t\t\"owner\": \"cinhtau\"\n\t\t},\n\t\t\"lisp\": {\n\t\t\t\"title\": \"Lisp\",\n\t\t\t\"alias\": [\"emacs\", \"elisp\", \"emacs-lisp\"],\n\t\t\t\"owner\": \"JuanCaicedo\"\n\t\t},\n\t\t\"livescript\": {\n\t\t\t\"title\": \"LiveScript\",\n\t\t\t\"owner\": \"Golmote\"\n\t\t},\n\t\t\"llvm\": {\n\t\t\t\"title\": \"LLVM IR\",\n\t\t\t\"owner\": \"porglezomp\"\n\t\t},\n\t\t\"log\": {\n\t\t\t\"title\": \"Log file\",\n\t\t\t\"optional\": \"javastacktrace\",\n\t\t\t\"owner\": \"RunDevelopment\"\n\t\t},\n\t\t\"lolcode\": {\n\t\t\t\"title\": \"LOLCODE\",\n\t\t\t\"owner\": \"Golmote\"\n\t\t},\n\t\t\"lua\": {\n\t\t\t\"title\": \"Lua\",\n\t\t\t\"owner\": \"Golmote\"\n\t\t},\n\t\t\"magma\": {\n\t\t\t\"title\": \"Magma (CAS)\",\n\t\t\t\"owner\": \"RunDevelopment\"\n\t\t},\n\t\t\"makefile\": {\n\t\t\t\"title\": \"Makefile\",\n\t\t\t\"owner\": \"Golmote\"\n\t\t},\n\t\t\"markdown\": {\n\t\t\t\"title\": \"Markdown\",\n\t\t\t\"require\": \"markup\",\n\t\t\t\"optional\": \"yaml\",\n\t\t\t\"alias\": \"md\",\n\t\t\t\"owner\": \"Golmote\"\n\t\t},\n\t\t\"markup-templating\": {\n\t\t\t\"title\": \"Markup templating\",\n\t\t\t\"require\": \"markup\",\n\t\t\t\"owner\": \"Golmote\"\n\t\t},\n\t\t\"mata\": {\n\t\t\t\"title\": \"Mata\",\n\t\t\t\"owner\": \"RunDevelopment\"\n\t\t},\n\t\t\"matlab\": {\n\t\t\t\"title\": \"MATLAB\",\n\t\t\t\"owner\": \"Golmote\"\n\t\t},\n\t\t\"maxscript\": {\n\t\t\t\"title\": \"MAXScript\",\n\t\t\t\"owner\": \"RunDevelopment\"\n\t\t},\n\t\t\"mel\": {\n\t\t\t\"title\": \"MEL\",\n\t\t\t\"owner\": \"Golmote\"\n\t\t},\n\t\t\"mermaid\": {\n\t\t\t\"title\": \"Mermaid\",\n\t\t\t\"owner\": \"RunDevelopment\"\n\t\t},\n\t\t\"metafont\": {\n\t\t\t\"title\": \"METAFONT\",\n\t\t\t\"owner\": \"LaeriExNihilo\"\n\t\t},\n\t\t\"mizar\": {\n\t\t\t\"title\": \"Mizar\",\n\t\t\t\"owner\": \"Golmote\"\n\t\t},\n\t\t\"mongodb\": {\n\t\t\t\"title\": \"MongoDB\",\n\t\t\t\"owner\": \"airs0urce\",\n\t\t\t\"require\": \"javascript\"\n\t\t},\n\t\t\"monkey\": {\n\t\t\t\"title\": \"Monkey\",\n\t\t\t\"owner\": \"Golmote\"\n\t\t},\n\t\t\"moonscript\": {\n\t\t\t\"title\": \"MoonScript\",\n\t\t\t\"alias\": \"moon\",\n\t\t\t\"owner\": \"RunDevelopment\"\n\t\t},\n\t\t\"n1ql\": {\n\t\t\t\"title\": \"N1QL\",\n\t\t\t\"owner\": \"TMWilds\"\n\t\t},\n\t\t\"n4js\": {\n\t\t\t\"title\": \"N4JS\",\n\t\t\t\"require\": \"javascript\",\n\t\t\t\"optional\": \"jsdoc\",\n\t\t\t\"alias\": \"n4jsd\",\n\t\t\t\"owner\": \"bsmith-n4\"\n\t\t},\n\t\t\"nand2tetris-hdl\": {\n\t\t\t\"title\": \"Nand To Tetris HDL\",\n\t\t\t\"owner\": \"stephanmax\"\n\t\t},\n\t\t\"naniscript\": {\n\t\t\t\"title\": \"Naninovel Script\",\n\t\t\t\"owner\": \"Elringus\",\n\t\t\t\"alias\": \"nani\"\n\t\t},\n\t\t\"nasm\": {\n\t\t\t\"title\": \"NASM\",\n\t\t\t\"owner\": \"rbmj\"\n\t\t},\n\t\t\"neon\": {\n\t\t\t\"title\": \"NEON\",\n\t\t\t\"owner\": \"nette\"\n\t\t},\n\t\t\"nevod\": {\n\t\t\t\"title\": \"Nevod\",\n\t\t\t\"owner\": \"nezaboodka\"\n\t\t},\n\t\t\"nginx\": {\n\t\t\t\"title\": \"nginx\",\n\t\t\t\"owner\": \"volado\"\n\t\t},\n\t\t\"nim\": {\n\t\t\t\"title\": \"Nim\",\n\t\t\t\"owner\": \"Golmote\"\n\t\t},\n\t\t\"nix\": {\n\t\t\t\"title\": \"Nix\",\n\t\t\t\"owner\": \"Golmote\"\n\t\t},\n\t\t\"nsis\": {\n\t\t\t\"title\": \"NSIS\",\n\t\t\t\"owner\": \"idleberg\"\n\t\t},\n\t\t\"objectivec\": {\n\t\t\t\"title\": \"Objective-C\",\n\t\t\t\"require\": \"c\",\n\t\t\t\"alias\": \"objc\",\n\t\t\t\"owner\": \"uranusjr\"\n\t\t},\n\t\t\"ocaml\": {\n\t\t\t\"title\": \"OCaml\",\n\t\t\t\"owner\": \"Golmote\"\n\t\t},\n\t\t\"odin\": {\n\t\t\t\"title\": \"Odin\",\n\t\t\t\"owner\": \"edukisto\"\n\t\t},\n\t\t\"opencl\": {\n\t\t\t\"title\": \"OpenCL\",\n\t\t\t\"require\": \"c\",\n\t\t\t\"modify\": [\n\t\t\t\t\"c\",\n\t\t\t\t\"cpp\"\n\t\t\t],\n\t\t\t\"owner\": \"Milania1\"\n\t\t},\n\t\t\"openqasm\": {\n\t\t\t\"title\": \"OpenQasm\",\n\t\t\t\"alias\": \"qasm\",\n\t\t\t\"owner\": \"RunDevelopment\"\n\t\t},\n\t\t\"oz\": {\n\t\t\t\"title\": \"Oz\",\n\t\t\t\"owner\": \"Golmote\"\n\t\t},\n\t\t\"parigp\": {\n\t\t\t\"title\": \"PARI/GP\",\n\t\t\t\"owner\": \"Golmote\"\n\t\t},\n\t\t\"parser\": {\n\t\t\t\"title\": \"Parser\",\n\t\t\t\"require\": \"markup\",\n\t\t\t\"owner\": \"Golmote\"\n\t\t},\n\t\t\"pascal\": {\n\t\t\t\"title\": \"Pascal\",\n\t\t\t\"alias\": \"objectpascal\",\n\t\t\t\"aliasTitles\": {\n\t\t\t\t\"objectpascal\": \"Object Pascal\"\n\t\t\t},\n\t\t\t\"owner\": \"Golmote\"\n\t\t},\n\t\t\"pascaligo\": {\n\t\t\t\"title\": \"Pascaligo\",\n\t\t\t\"owner\": \"DefinitelyNotAGoat\"\n\t\t},\n\t\t\"psl\": {\n\t\t\t\"title\": \"PATROL Scripting Language\",\n\t\t\t\"owner\": \"bertysentry\"\n\t\t},\n\t\t\"pcaxis\": {\n\t\t\t\"title\": \"PC-Axis\",\n\t\t\t\"alias\": \"px\",\n\t\t\t\"owner\": \"RunDevelopment\"\n\t\t},\n\t\t\"peoplecode\": {\n\t\t\t\"title\": \"PeopleCode\",\n\t\t\t\"alias\": \"pcode\",\n\t\t\t\"owner\": \"RunDevelopment\"\n\t\t},\n\t\t\"perl\": {\n\t\t\t\"title\": \"Perl\",\n\t\t\t\"owner\": \"Golmote\"\n\t\t},\n\t\t\"php\": {\n\t\t\t\"title\": \"PHP\",\n\t\t\t\"require\": \"markup-templating\",\n\t\t\t\"owner\": \"milesj\"\n\t\t},\n\t\t\"phpdoc\": {\n\t\t\t\"title\": \"PHPDoc\",\n\t\t\t\"require\": [\"php\", \"javadoclike\"],\n\t\t\t\"modify\": \"php\",\n\t\t\t\"owner\": \"RunDevelopment\"\n\t\t},\n\t\t\"php-extras\": {\n\t\t\t\"title\": \"PHP Extras\",\n\t\t\t\"require\": \"php\",\n\t\t\t\"modify\": \"php\",\n\t\t\t\"owner\": \"milesj\"\n\t\t},\n\t\t\"plant-uml\": {\n\t\t\t\"title\": \"PlantUML\",\n\t\t\t\"alias\": \"plantuml\",\n\t\t\t\"owner\": \"RunDevelopment\"\n\t\t},\n\t\t\"plsql\": {\n\t\t\t\"title\": \"PL/SQL\",\n\t\t\t\"require\": \"sql\",\n\t\t\t\"owner\": \"Golmote\"\n\t\t},\n\t\t\"powerquery\": {\n\t\t\t\"title\": \"PowerQuery\",\n\t\t\t\"alias\": [\"pq\", \"mscript\"],\n\t\t\t\"owner\": \"peterbud\"\n\t\t},\n\t\t\"powershell\": {\n\t\t\t\"title\": \"PowerShell\",\n\t\t\t\"owner\": \"nauzilus\"\n\t\t},\n\t\t\"processing\": {\n\t\t\t\"title\": \"Processing\",\n\t\t\t\"require\": \"clike\",\n\t\t\t\"owner\": \"Golmote\"\n\t\t},\n\t\t\"prolog\": {\n\t\t\t\"title\": \"Prolog\",\n\t\t\t\"owner\": \"Golmote\"\n\t\t},\n\t\t\"promql\": {\n\t\t\t\"title\": \"PromQL\",\n\t\t\t\"owner\": \"arendjr\"\n\t\t},\n\t\t\"properties\": {\n\t\t\t\"title\": \".properties\",\n\t\t\t\"owner\": \"Golmote\"\n\t\t},\n\t\t\"protobuf\": {\n\t\t\t\"title\": \"Protocol Buffers\",\n\t\t\t\"require\": \"clike\",\n\t\t\t\"owner\": \"just-boris\"\n\t\t},\n\t\t\"pug\": {\n\t\t\t\"title\": \"Pug\",\n\t\t\t\"require\": [\"markup\", \"javascript\"],\n\t\t\t\"optional\": [\n\t\t\t\t\"coffeescript\",\n\t\t\t\t\"ejs\",\n\t\t\t\t\"handlebars\",\n\t\t\t\t\"less\",\n\t\t\t\t\"livescript\",\n\t\t\t\t\"markdown\",\n\t\t\t\t\"scss\",\n\t\t\t\t\"stylus\",\n\t\t\t\t\"twig\"\n\t\t\t],\n\t\t\t\"owner\": \"Golmote\"\n\t\t},\n\t\t\"puppet\": {\n\t\t\t\"title\": \"Puppet\",\n\t\t\t\"owner\": \"Golmote\"\n\t\t},\n\t\t\"pure\": {\n\t\t\t\"title\": \"Pure\",\n\t\t\t\"optional\": [\n\t\t\t\t\"c\",\n\t\t\t\t\"cpp\",\n\t\t\t\t\"fortran\"\n\t\t\t],\n\t\t\t\"owner\": \"Golmote\"\n\t\t},\n\t\t\"purebasic\": {\n\t\t\t\"title\": \"PureBasic\",\n\t\t\t\"require\": \"clike\",\n\t\t\t\"alias\": \"pbfasm\",\n\t\t\t\"owner\": \"HeX0R101\"\n\t\t},\n\t\t\"purescript\": {\n\t\t\t\"title\": \"PureScript\",\n\t\t\t\"require\": \"haskell\",\n\t\t\t\"alias\": \"purs\",\n\t\t\t\"owner\": \"sriharshachilakapati\"\n\t\t},\n\t\t\"python\": {\n\t\t\t\"title\": \"Python\",\n\t\t\t\"alias\": \"py\",\n\t\t\t\"owner\": \"multipetros\"\n\t\t},\n\t\t\"qsharp\": {\n\t\t\t\"title\": \"Q#\",\n\t\t\t\"require\": \"clike\",\n\t\t\t\"alias\": \"qs\",\n\t\t\t\"owner\": \"fedonman\"\n\t\t},\n\t\t\"q\": {\n\t\t\t\"title\": \"Q (kdb+ database)\",\n\t\t\t\"owner\": \"Golmote\"\n\t\t},\n\t\t\"qml\": {\n\t\t\t\"title\": \"QML\",\n\t\t\t\"require\": \"javascript\",\n\t\t\t\"owner\": \"RunDevelopment\"\n\t\t},\n\t\t\"qore\": {\n\t\t\t\"title\": \"Qore\",\n\t\t\t\"require\": \"clike\",\n\t\t\t\"owner\": \"temnroegg\"\n\t\t},\n\t\t\"r\": {\n\t\t\t\"title\": \"R\",\n\t\t\t\"owner\": \"Golmote\"\n\t\t},\n\t\t\"racket\": {\n\t\t\t\"title\": \"Racket\",\n\t\t\t\"require\": \"scheme\",\n\t\t\t\"alias\": \"rkt\",\n\t\t\t\"owner\": \"RunDevelopment\"\n\t\t},\n\t\t\"cshtml\": {\n\t\t\t\"title\": \"Razor C#\",\n\t\t\t\"alias\": \"razor\",\n\t\t\t\"require\": [\"markup\", \"csharp\"],\n\t\t\t\"optional\":[\n\t\t\t\t\"css\",\n\t\t\t\t\"css-extras\",\n\t\t\t\t\"javascript\",\n\t\t\t\t\"js-extras\"\n\t\t\t],\n\t\t\t\"owner\": \"RunDevelopment\"\n\t\t},\n\t\t\"jsx\": {\n\t\t\t\"title\": \"React JSX\",\n\t\t\t\"require\": [\"markup\", \"javascript\"],\n\t\t\t\"optional\": [\n\t\t\t\t\"jsdoc\",\n\t\t\t\t\"js-extras\",\n\t\t\t\t\"js-templates\"\n\t\t\t],\n\t\t\t\"owner\": \"vkbansal\"\n\t\t},\n\t\t\"tsx\": {\n\t\t\t\"title\": \"React TSX\",\n\t\t\t\"require\": [\"jsx\", \"typescript\"]\n\t\t},\n\t\t\"reason\": {\n\t\t\t\"title\": \"Reason\",\n\t\t\t\"require\": \"clike\",\n\t\t\t\"owner\": \"Golmote\"\n\t\t},\n\t\t\"regex\": {\n\t\t\t\"title\": \"Regex\",\n\t\t\t\"owner\": \"RunDevelopment\"\n\t\t},\n\t\t\"rego\": {\n\t\t\t\"title\": \"Rego\",\n\t\t\t\"owner\": \"JordanSh\"\n\t\t},\n\t\t\"renpy\": {\n\t\t\t\"title\": \"Ren'py\",\n\t\t\t\"alias\": \"rpy\",\n\t\t\t\"owner\": \"HyuchiaDiego\"\n\t\t},\n\t\t\"rescript\": {\n\t\t\t\"title\": \"ReScript\",\n\t\t\t\"alias\": \"res\",\n\t\t\t\"owner\": \"vmarcosp\"\n\t\t},\n\t\t\"rest\": {\n\t\t\t\"title\": \"reST (reStructuredText)\",\n\t\t\t\"owner\": \"Golmote\"\n\t\t},\n\t\t\"rip\": {\n\t\t\t\"title\": \"Rip\",\n\t\t\t\"owner\": \"ravinggenius\"\n\t\t},\n\t\t\"roboconf\": {\n\t\t\t\"title\": \"Roboconf\",\n\t\t\t\"owner\": \"Golmote\"\n\t\t},\n\t\t\"robotframework\": {\n\t\t\t\"title\": \"Robot Framework\",\n\t\t\t\"alias\": \"robot\",\n\t\t\t\"owner\": \"RunDevelopment\"\n\t\t},\n\t\t\"ruby\": {\n\t\t\t\"title\": \"Ruby\",\n\t\t\t\"require\": \"clike\",\n\t\t\t\"alias\": \"rb\",\n\t\t\t\"owner\": \"samflores\"\n\t\t},\n\t\t\"rust\": {\n\t\t\t\"title\": \"Rust\",\n\t\t\t\"owner\": \"Golmote\"\n\t\t},\n\t\t\"sas\": {\n\t\t\t\"title\": \"SAS\",\n\t\t\t\"optional\": [\"groovy\", \"lua\", \"sql\"],\n\t\t\t\"owner\": \"Golmote\"\n\t\t},\n\t\t\"sass\": {\n\t\t\t\"title\": \"Sass (Sass)\",\n\t\t\t\"require\": \"css\",\n\t\t\t\"optional\": \"css-extras\",\n\t\t\t\"owner\": \"Golmote\"\n\t\t},\n\t\t\"scss\": {\n\t\t\t\"title\": \"Sass (SCSS)\",\n\t\t\t\"require\": \"css\",\n\t\t\t\"optional\": \"css-extras\",\n\t\t\t\"owner\": \"MoOx\"\n\t\t},\n\t\t\"scala\": {\n\t\t\t\"title\": \"Scala\",\n\t\t\t\"require\": \"java\",\n\t\t\t\"owner\": \"jozic\"\n\t\t},\n\t\t\"scheme\": {\n\t\t\t\"title\": \"Scheme\",\n\t\t\t\"owner\": \"bacchus123\"\n\t\t},\n\t\t\"shell-session\": {\n\t\t\t\"title\": \"Shell session\",\n\t\t\t\"require\": \"bash\",\n\t\t\t\"alias\": [\"sh-session\", \"shellsession\"],\n\t\t\t\"owner\": \"RunDevelopment\"\n\t\t},\n\t\t\"smali\": {\n\t\t\t\"title\": \"Smali\",\n\t\t\t\"owner\": \"RunDevelopment\"\n\t\t},\n\t\t\"smalltalk\": {\n\t\t\t\"title\": \"Smalltalk\",\n\t\t\t\"owner\": \"Golmote\"\n\t\t},\n\t\t\"smarty\": {\n\t\t\t\"title\": \"Smarty\",\n\t\t\t\"require\": \"markup-templating\",\n\t\t\t\"optional\": \"php\",\n\t\t\t\"owner\": \"Golmote\"\n\t\t},\n\t\t\"sml\": {\n\t\t\t\"title\": \"SML\",\n\t\t\t\"alias\": \"smlnj\",\n\t\t\t\"aliasTitles\": {\n\t\t\t\t\"smlnj\": \"SML/NJ\"\n\t\t\t},\n\t\t\t\"owner\": \"RunDevelopment\"\n\t\t},\n\t\t\"solidity\": {\n\t\t\t\"title\": \"Solidity (Ethereum)\",\n\t\t\t\"alias\": \"sol\",\n\t\t\t\"require\": \"clike\",\n\t\t\t\"owner\": \"glachaud\"\n\t\t},\n\t\t\"solution-file\": {\n\t\t\t\"title\": \"Solution file\",\n\t\t\t\"alias\": \"sln\",\n\t\t\t\"owner\": \"RunDevelopment\"\n\t\t},\n\t\t\"soy\": {\n\t\t\t\"title\": \"Soy (Closure Template)\",\n\t\t\t\"require\": \"markup-templating\",\n\t\t\t\"owner\": \"Golmote\"\n\t\t},\n\t\t\"sparql\": {\n\t\t\t\"title\": \"SPARQL\",\n\t\t\t\"require\": \"turtle\",\n\t\t\t\"owner\": \"Triply-Dev\",\n\t\t\t\"alias\": \"rq\"\n\t\t},\n\t\t\"splunk-spl\": {\n\t\t\t\"title\": \"Splunk SPL\",\n\t\t\t\"owner\": \"RunDevelopment\"\n\t\t},\n\t\t\"sqf\": {\n\t\t\t\"title\": \"SQF: Status Quo Function (Arma 3)\",\n\t\t\t\"require\": \"clike\",\n\t\t\t\"owner\": \"RunDevelopment\"\n\t\t},\n\t\t\"sql\": {\n\t\t\t\"title\": \"SQL\",\n\t\t\t\"owner\": \"multipetros\"\n\t\t},\n\t\t\"squirrel\": {\n\t\t\t\"title\": \"Squirrel\",\n\t\t\t\"require\": \"clike\",\n\t\t\t\"owner\": \"RunDevelopment\"\n\t\t},\n\t\t\"stan\": {\n\t\t\t\"title\": \"Stan\",\n\t\t\t\"owner\": \"RunDevelopment\"\n\t\t},\n\t\t\"stata\": {\n\t\t\t\"title\": \"Stata Ado\",\n\t\t\t\"require\": [\"mata\", \"java\", \"python\"],\n\t\t\t\"owner\": \"RunDevelopment\"\n\t\t},\n\t\t\"iecst\": {\n\t\t\t\"title\": \"Structured Text (IEC 61131-3)\",\n\t\t\t\"owner\": \"serhioromano\"\n\t\t},\n\t\t\"stylus\": {\n\t\t\t\"title\": \"Stylus\",\n\t\t\t\"owner\": \"vkbansal\"\n\t\t},\n\t\t\"supercollider\": {\n\t\t\t\"title\": \"SuperCollider\",\n\t\t\t\"alias\": \"sclang\",\n\t\t\t\"owner\": \"RunDevelopment\"\n\t\t},\n\t\t\"swift\": {\n\t\t\t\"title\": \"Swift\",\n\t\t\t\"owner\": \"chrischares\"\n\t\t},\n\t\t\"systemd\": {\n\t\t\t\"title\": \"Systemd configuration file\",\n\t\t\t\"owner\": \"RunDevelopment\"\n\t\t},\n\t\t\"t4-templating\": {\n\t\t\t\"title\": \"T4 templating\",\n\t\t\t\"owner\": \"RunDevelopment\"\n\t\t},\n\t\t\"t4-cs\": {\n\t\t\t\"title\": \"T4 Text Templates (C#)\",\n\t\t\t\"require\": [\"t4-templating\", \"csharp\"],\n\t\t\t\"alias\": \"t4\",\n\t\t\t\"owner\": \"RunDevelopment\"\n\t\t},\n\t\t\"t4-vb\": {\n\t\t\t\"title\": \"T4 Text Templates (VB)\",\n\t\t\t\"require\": [\"t4-templating\", \"vbnet\"],\n\t\t\t\"owner\": \"RunDevelopment\"\n\t\t},\n\t\t\"tap\": {\n\t\t\t\"title\": \"TAP\",\n\t\t\t\"owner\": \"isaacs\",\n\t\t\t\"require\": \"yaml\"\n\t\t},\n\t\t\"tcl\": {\n\t\t\t\"title\": \"Tcl\",\n\t\t\t\"owner\": \"PeterChaplin\"\n\t\t},\n\t\t\"tt2\": {\n\t\t\t\"title\": \"Template Toolkit 2\",\n\t\t\t\"require\": [\"clike\", \"markup-templating\"],\n\t\t\t\"owner\": \"gflohr\"\n\t\t},\n\t\t\"textile\": {\n\t\t\t\"title\": \"Textile\",\n\t\t\t\"require\": \"markup\",\n\t\t\t\"optional\": \"css\",\n\t\t\t\"owner\": \"Golmote\"\n\t\t},\n\t\t\"toml\": {\n\t\t\t\"title\": \"TOML\",\n\t\t\t\"owner\": \"RunDevelopment\"\n\t\t},\n\t\t\"tremor\": {\n\t\t\t\"title\": \"Tremor\",\n\t\t\t\"alias\": [\n\t\t\t\t\"trickle\",\n\t\t\t\t\"troy\"\n\t\t\t],\n\t\t\t\"owner\": \"darach\",\n\t\t\t\"aliasTitles\": {\n\t\t\t\t\"trickle\": \"trickle\",\n\t\t\t\t\"troy\": \"troy\"\n\t\t\t}\n\t\t},\n\t\t\"turtle\": {\n\t\t\t\"title\": \"Turtle\",\n\t\t\t\"alias\": \"trig\",\n\t\t\t\"aliasTitles\": {\n\t\t\t\t\"trig\": \"TriG\"\n\t\t\t},\n\t\t\t\"owner\": \"jakubklimek\"\n\t\t},\n\t\t\"twig\": {\n\t\t\t\"title\": \"Twig\",\n\t\t\t\"require\": \"markup-templating\",\n\t\t\t\"owner\": \"brandonkelly\"\n\t\t},\n\t\t\"typescript\": {\n\t\t\t\"title\": \"TypeScript\",\n\t\t\t\"require\": \"javascript\",\n\t\t\t\"optional\": \"js-templates\",\n\t\t\t\"alias\": \"ts\",\n\t\t\t\"owner\": \"vkbansal\"\n\t\t},\n\t\t\"typoscript\": {\n\t\t\t\"title\": \"TypoScript\",\n\t\t\t\"alias\": \"tsconfig\",\n\t\t\t\"aliasTitles\": {\n\t\t\t\t\"tsconfig\": \"TSConfig\"\n\t\t\t},\n\t\t\t\"owner\": \"dkern\"\n\t\t},\n\t\t\"unrealscript\": {\n\t\t\t\"title\": \"UnrealScript\",\n\t\t\t\"alias\": [\"uscript\", \"uc\"],\n\t\t\t\"owner\": \"RunDevelopment\"\n\t\t},\n\t\t\"uorazor\": {\n\t\t\t\"title\": \"UO Razor Script\",\n\t\t\t\"owner\": \"jaseowns\"\n\t\t},\n\t\t\"uri\": {\n\t\t\t\"title\": \"URI\",\n\t\t\t\"alias\": \"url\",\n\t\t\t\"aliasTitles\": {\n\t\t\t\t\"url\": \"URL\"\n\t\t\t},\n\t\t\t\"owner\": \"RunDevelopment\"\n\t\t},\n\t\t\"v\": {\n\t\t\t\"title\": \"V\",\n\t\t\t\"require\": \"clike\",\n\t\t\t\"owner\": \"taggon\"\n\t\t},\n\t\t\"vala\": {\n\t\t\t\"title\": \"Vala\",\n\t\t\t\"require\": \"clike\",\n\t\t\t\"optional\": \"regex\",\n\t\t\t\"owner\": \"TemplarVolk\"\n\t\t},\n\t\t\"vbnet\": {\n\t\t\t\"title\": \"VB.Net\",\n\t\t\t\"require\": \"basic\",\n\t\t\t\"owner\": \"Bigsby\"\n\t\t},\n\t\t\"velocity\": {\n\t\t\t\"title\": \"Velocity\",\n\t\t\t\"require\": \"markup\",\n\t\t\t\"owner\": \"Golmote\"\n\t\t},\n\t\t\"verilog\": {\n\t\t\t\"title\": \"Verilog\",\n\t\t\t\"owner\": \"a-rey\"\n\t\t},\n\t\t\"vhdl\": {\n\t\t\t\"title\": \"VHDL\",\n\t\t\t\"owner\": \"a-rey\"\n\t\t},\n\t\t\"vim\": {\n\t\t\t\"title\": \"vim\",\n\t\t\t\"owner\": \"westonganger\"\n\t\t},\n\t\t\"visual-basic\": {\n\t\t\t\"title\": \"Visual Basic\",\n\t\t\t\"alias\": [\"vb\", \"vba\"],\n\t\t\t\"aliasTitles\": {\n\t\t\t\t\"vba\": \"VBA\"\n\t\t\t},\n\t\t\t\"owner\": \"Golmote\"\n\t\t},\n\t\t\"warpscript\": {\n\t\t\t\"title\": \"WarpScript\",\n\t\t\t\"owner\": \"RunDevelopment\"\n\t\t},\n\t\t\"wasm\": {\n\t\t\t\"title\": \"WebAssembly\",\n\t\t\t\"owner\": \"Golmote\"\n\t\t},\n\t\t\"web-idl\": {\n\t\t\t\"title\": \"Web IDL\",\n\t\t\t\"alias\": \"webidl\",\n\t\t\t\"owner\": \"RunDevelopment\"\n\t\t},\n\t\t\"wgsl\": {\n\t\t\t\"title\": \"WGSL\",\n\t\t\t\"owner\": \"Dr4gonthree\"\n\t\t},\n\t\t\"wiki\": {\n\t\t\t\"title\": \"Wiki markup\",\n\t\t\t\"require\": \"markup\",\n\t\t\t\"owner\": \"Golmote\"\n\t\t},\n\t\t\"wolfram\": {\n\t\t\t\"title\": \"Wolfram language\",\n\t\t\t\"alias\": [\"mathematica\", \"nb\", \"wl\"],\n\t\t\t\"aliasTitles\": {\n\t\t\t\t\"mathematica\": \"Mathematica\",\n\t\t\t\t\"nb\": \"Mathematica Notebook\"\n\t\t\t},\n\t\t\t\"owner\": \"msollami\"\n\t\t},\n\t\t\"wren\": {\n\t\t\t\"title\": \"Wren\",\n\t\t\t\"owner\": \"clsource\"\n\t\t},\n\t\t\"xeora\": {\n\t\t\t\"title\": \"Xeora\",\n\t\t\t\"require\": \"markup\",\n\t\t\t\"alias\": \"xeoracube\",\n\t\t\t\"aliasTitles\": {\n\t\t\t\t\"xeoracube\": \"XeoraCube\"\n\t\t\t},\n\t\t\t\"owner\": \"freakmaxi\"\n\t\t},\n\t\t\"xml-doc\": {\n\t\t\t\"title\": \"XML doc (.net)\",\n\t\t\t\"require\": \"markup\",\n\t\t\t\"modify\": [\"csharp\", \"fsharp\", \"vbnet\"],\n\t\t\t\"owner\": \"RunDevelopment\"\n\t\t},\n\t\t\"xojo\": {\n\t\t\t\"title\": \"Xojo (REALbasic)\",\n\t\t\t\"owner\": \"Golmote\"\n\t\t},\n\t\t\"xquery\": {\n\t\t\t\"title\": \"XQuery\",\n\t\t\t\"require\": \"markup\",\n\t\t\t\"owner\": \"Golmote\"\n\t\t},\n\t\t\"yaml\": {\n\t\t\t\"title\": \"YAML\",\n\t\t\t\"alias\": \"yml\",\n\t\t\t\"owner\": \"hason\"\n\t\t},\n\t\t\"yang\": {\n\t\t\t\"title\": \"YANG\",\n\t\t\t\"owner\": \"RunDevelopment\"\n\t\t},\n\t\t\"zig\": {\n\t\t\t\"title\": \"Zig\",\n\t\t\t\"owner\": \"RunDevelopment\"\n\t\t}\n\t},\n\t\"plugins\": {\n\t\t\"meta\": {\n\t\t\t\"path\": \"plugins/{id}/prism-{id}\",\n\t\t\t\"link\": \"plugins/{id}/\"\n\t\t},\n\t\t\"line-highlight\": {\n\t\t\t\"title\": \"Line Highlight\",\n\t\t\t\"description\": \"Highlights specific lines and/or line ranges.\"\n\t\t},\n\t\t\"line-numbers\": {\n\t\t\t\"title\": \"Line Numbers\",\n\t\t\t\"description\": \"Line number at the beginning of code lines.\",\n\t\t\t\"owner\": \"kuba-kubula\"\n\t\t},\n\t\t\"show-invisibles\": {\n\t\t\t\"title\": \"Show Invisibles\",\n\t\t\t\"description\": \"Show hidden characters such as tabs and line breaks.\",\n\t\t\t\"optional\": [\n\t\t\t\t\"autolinker\",\n\t\t\t\t\"data-uri-highlight\"\n\t\t\t]\n\t\t},\n\t\t\"autolinker\": {\n\t\t\t\"title\": \"Autolinker\",\n\t\t\t\"description\": \"Converts URLs and emails in code to clickable links. Parses Markdown links in comments.\"\n\t\t},\n\t\t\"wpd\": {\n\t\t\t\"title\": \"WebPlatform Docs\",\n\t\t\t\"description\": \"Makes tokens link to <a href=\\\"https://webplatform.github.io/docs/\\\">WebPlatform.org documentation</a>. The links open in a new tab.\"\n\t\t},\n\t\t\"custom-class\": {\n\t\t\t\"title\": \"Custom Class\",\n\t\t\t\"description\": \"This plugin allows you to prefix Prism's default classes (<code>.comment</code> can become <code>.namespace--comment</code>) or replace them with your defined ones (like <code>.editor__comment</code>). You can even add new classes.\",\n\t\t\t\"owner\": \"dvkndn\",\n\t\t\t\"noCSS\": true\n\t\t},\n\t\t\"file-highlight\": {\n\t\t\t\"title\": \"File Highlight\",\n\t\t\t\"description\": \"Fetch external files and highlight them with Prism. Used on the Prism website itself.\",\n\t\t\t\"noCSS\": true\n\t\t},\n\t\t\"show-language\": {\n\t\t\t\"title\": \"Show Language\",\n\t\t\t\"description\": \"Display the highlighted language in code blocks (inline code does not show the label).\",\n\t\t\t\"owner\": \"nauzilus\",\n\t\t\t\"noCSS\": true,\n\t\t\t\"require\": \"toolbar\"\n\t\t},\n\t\t\"jsonp-highlight\": {\n\t\t\t\"title\": \"JSONP Highlight\",\n\t\t\t\"description\": \"Fetch content with JSONP and highlight some interesting content (e.g. GitHub/Gists or Bitbucket API).\",\n\t\t\t\"noCSS\": true,\n\t\t\t\"owner\": \"nauzilus\"\n\t\t},\n\t\t\"highlight-keywords\": {\n\t\t\t\"title\": \"Highlight Keywords\",\n\t\t\t\"description\": \"Adds special CSS classes for each keyword for fine-grained highlighting.\",\n\t\t\t\"owner\": \"vkbansal\",\n\t\t\t\"noCSS\": true\n\t\t},\n\t\t\"remove-initial-line-feed\": {\n\t\t\t\"title\": \"Remove initial line feed\",\n\t\t\t\"description\": \"Removes the initial line feed in code blocks.\",\n\t\t\t\"owner\": \"Golmote\",\n\t\t\t\"noCSS\": true\n\t\t},\n\t\t\"inline-color\": {\n\t\t\t\"title\": \"Inline color\",\n\t\t\t\"description\": \"Adds a small inline preview for colors in style sheets.\",\n\t\t\t\"require\": \"css-extras\",\n\t\t\t\"owner\": \"RunDevelopment\"\n\t\t},\n\t\t\"previewers\": {\n\t\t\t\"title\": \"Previewers\",\n\t\t\t\"description\": \"Previewers for angles, colors, gradients, easing and time.\",\n\t\t\t\"require\": \"css-extras\",\n\t\t\t\"owner\": \"Golmote\"\n\t\t},\n\t\t\"autoloader\": {\n\t\t\t\"title\": \"Autoloader\",\n\t\t\t\"description\": \"Automatically loads the needed languages to highlight the code blocks.\",\n\t\t\t\"owner\": \"Golmote\",\n\t\t\t\"noCSS\": true\n\t\t},\n\t\t\"keep-markup\": {\n\t\t\t\"title\": \"Keep Markup\",\n\t\t\t\"description\": \"Prevents custom markup from being dropped out during highlighting.\",\n\t\t\t\"owner\": \"Golmote\",\n\t\t\t\"optional\": \"normalize-whitespace\",\n\t\t\t\"noCSS\": true\n\t\t},\n\t\t\"command-line\": {\n\t\t\t\"title\": \"Command Line\",\n\t\t\t\"description\": \"Display a command line with a prompt and, optionally, the output/response from the commands.\",\n\t\t\t\"owner\": \"chriswells0\"\n\t\t},\n\t\t\"unescaped-markup\": {\n\t\t\t\"title\": \"Unescaped Markup\",\n\t\t\t\"description\": \"Write markup without having to escape anything.\"\n\t\t},\n\t\t\"normalize-whitespace\": {\n\t\t\t\"title\": \"Normalize Whitespace\",\n\t\t\t\"description\": \"Supports multiple operations to normalize whitespace in code blocks.\",\n\t\t\t\"owner\": \"zeitgeist87\",\n\t\t\t\"optional\": \"unescaped-markup\",\n\t\t\t\"noCSS\": true\n\t\t},\n\t\t\"data-uri-highlight\": {\n\t\t\t\"title\": \"Data-URI Highlight\",\n\t\t\t\"description\": \"Highlights data-URI contents.\",\n\t\t\t\"owner\": \"Golmote\",\n\t\t\t\"noCSS\": true\n\t\t},\n\t\t\"toolbar\": {\n\t\t\t\"title\": \"Toolbar\",\n\t\t\t\"description\": \"Attach a toolbar for plugins to easily register buttons on the top of a code block.\",\n\t\t\t\"owner\": \"mAAdhaTTah\"\n\t\t},\n\t\t\"copy-to-clipboard\": {\n\t\t\t\"title\": \"Copy to Clipboard Button\",\n\t\t\t\"description\": \"Add a button that copies the code block to the clipboard when clicked.\",\n\t\t\t\"owner\": \"mAAdhaTTah\",\n\t\t\t\"require\": \"toolbar\",\n\t\t\t\"noCSS\": true\n\t\t},\n\t\t\"download-button\": {\n\t\t\t\"title\": \"Download Button\",\n\t\t\t\"description\": \"A button in the toolbar of a code block adding a convenient way to download a code file.\",\n\t\t\t\"owner\": \"Golmote\",\n\t\t\t\"require\": \"toolbar\",\n\t\t\t\"noCSS\": true\n\t\t},\n\t\t\"match-braces\": {\n\t\t\t\"title\": \"Match braces\",\n\t\t\t\"description\": \"Highlights matching braces.\",\n\t\t\t\"owner\": \"RunDevelopment\"\n\t\t},\n\t\t\"diff-highlight\": {\n\t\t\t\"title\": \"Diff Highlight\",\n\t\t\t\"description\": \"Highlights the code inside diff blocks.\",\n\t\t\t\"owner\": \"RunDevelopment\",\n\t\t\t\"require\": \"diff\"\n\t\t},\n\t\t\"filter-highlight-all\": {\n\t\t\t\"title\": \"Filter highlightAll\",\n\t\t\t\"description\": \"Filters the elements the <code>highlightAll</code> and <code>highlightAllUnder</code> methods actually highlight.\",\n\t\t\t\"owner\": \"RunDevelopment\",\n\t\t\t\"noCSS\": true\n\t\t},\n\t\t\"treeview\": {\n\t\t\t\"title\": \"Treeview\",\n\t\t\t\"description\": \"A language with special styles to highlight file system tree structures.\",\n\t\t\t\"owner\": \"Golmote\"\n\t\t}\n\t}\n}\n/components/prism-solidity.js\u0004|Prism.languages.solidity = Prism.languages.extend('clike', {\n\t'class-name': {\n\t\tpattern: /(\\b(?:contract|enum|interface|library|new|struct|using)\\s+)(?!\\d)[\\w$]+/,\n\t\tlookbehind: true\n\t},\n\t'keyword': /\\b(?:_|anonymous|as|assembly|assert|break|calldata|case|constant|constructor|continue|contract|default|delete|do|else|emit|enum|event|external|for|from|function|if|import|indexed|inherited|interface|internal|is|let|library|mapping|memory|modifier|new|payable|pragma|private|public|pure|require|returns?|revert|selfdestruct|solidity|storage|struct|suicide|switch|this|throw|using|var|view|while)\\b/,\n\t'operator': /=>|->|:=|=:|\\*\\*|\\+\\+|--|\\|\\||&&|<<=?|>>=?|[-+*/%^&|<>!=]=?|[~?]/\n});\n\nPrism.languages.insertBefore('solidity', 'keyword', {\n\t'builtin': /\\b(?:address|bool|byte|u?int(?:8|16|24|32|40|48|56|64|72|80|88|96|104|112|120|128|136|144|152|160|168|176|184|192|200|208|216|224|232|240|248|256)?|string|bytes(?:[1-9]|[12]\\d|3[0-2])?)\\b/\n});\n\nPrism.languages.insertBefore('solidity', 'number', {\n\t'version': {\n\t\tpattern: /([<>]=?|\\^)\\d+\\.\\d+\\.\\d+\\b/,\n\t\tlookbehind: true,\n\t\talias: 'number',\n\t}\n});\n\nPrism.languages.sol = Prism.languages.solidity;\n/components/prism-nevod.min.js\u0007Prism.languages.nevod={comment:/\\/\\/.*|(?:\\/\\*[\\s\\S]*?(?:\\*\\/|$))/,string:{pattern:/(?:\"(?:\"\"|[^\"])*\"(?!\")|'(?:''|[^'])*'(?!'))!?\\*?/,greedy:!0,inside:{\"string-attrs\":/!$|!\\*$|\\*$/}},namespace:{pattern:/(@namespace\\s+)[a-zA-Z0-9\\-.]+(?=\\s*\\{)/,lookbehind:!0},pattern:{pattern:/(@pattern\\s+)?#?[a-zA-Z0-9\\-.]+(?:\\s*\\(\\s*(?:~\\s*)?[a-zA-Z0-9\\-.]+\\s*(?:,\\s*(?:~\\s*)?[a-zA-Z0-9\\-.]*)*\\))?(?=\\s*=)/,lookbehind:!0,inside:{\"pattern-name\":{pattern:/^#?[a-zA-Z0-9\\-.]+/,alias:\"class-name\"},fields:{pattern:/\\(.*\\)/,inside:{\"field-name\":{pattern:/[a-zA-Z0-9\\-.]+/,alias:\"variable\"},punctuation:/[,()]/,operator:{pattern:/~/,alias:\"field-hidden-mark\"}}}}},search:{pattern:/(@search\\s+|#)[a-zA-Z0-9\\-.]+(?:\\.\\*)?(?=\\s*;)/,alias:\"function\",lookbehind:!0},keyword:/@(?:having|inside|namespace|outside|pattern|require|search|where)\\b/,\"standard-pattern\":{pattern:/\\b(?:Alpha|AlphaNum|Any|Blank|End|LineBreak|Num|NumAlpha|Punct|Space|Start|Symbol|Word|WordBreak)\\b(?:\\([a-zA-Z0-9\\-.,\\s+]*\\))?/,inside:{\"standard-pattern-name\":{pattern:/^[a-zA-Z0-9\\-.]+/,alias:\"builtin\"},quantifier:{pattern:/\\b\\d+(?:\\s*\\+|\\s*-\\s*\\d+)?(?!\\w)/,alias:\"number\"},\"standard-pattern-attr\":{pattern:/[a-zA-Z0-9\\-.]+/,alias:\"builtin\"},punctuation:/[,()]/}},quantifier:{pattern:/\\b\\d+(?:\\s*\\+|\\s*-\\s*\\d+)?(?!\\w)/,alias:\"number\"},operator:[{pattern:/=/,alias:\"pattern-def\"},{pattern:/&/,alias:\"conjunction\"},{pattern:/~/,alias:\"exception\"},{pattern:/\\?/,alias:\"optionality\"},{pattern:/[[\\]]/,alias:\"repetition\"},{pattern:/[{}]/,alias:\"variation\"},{pattern:/[+_]/,alias:\"sequence\"},{pattern:/\\.{2,3}/,alias:\"span\"}],\"field-capture\":[{pattern:/([a-zA-Z0-9\\-.]+\\s*\\()\\s*[a-zA-Z0-9\\-.]+\\s*:\\s*[a-zA-Z0-9\\-.]+(?:\\s*,\\s*[a-zA-Z0-9\\-.]+\\s*:\\s*[a-zA-Z0-9\\-.]+)*(?=\\s*\\))/,lookbehind:!0,inside:{\"field-name\":{pattern:/[a-zA-Z0-9\\-.]+/,alias:\"variable\"},colon:/:/}},{pattern:/[a-zA-Z0-9\\-.]+\\s*:/,inside:{\"field-name\":{pattern:/[a-zA-Z0-9\\-.]+/,alias:\"variable\"},colon:/:/}}],punctuation:/[:;,()]/,name:/[a-zA-Z0-9\\-.]+/};/components/prism-xml-doc.js\u0003\r(function (Prism) {\n\n\t/**\n\t * If the given language is present, it will insert the given doc comment grammar token into it.\n\t *\n\t * @param {string} lang\n\t * @param {any} docComment\n\t */\n\tfunction insertDocComment(lang, docComment) {\n\t\tif (Prism.languages[lang]) {\n\t\t\tPrism.languages.insertBefore(lang, 'comment', {\n\t\t\t\t'doc-comment': docComment\n\t\t\t});\n\t\t}\n\t}\n\n\tvar tag = Prism.languages.markup.tag;\n\n\tvar slashDocComment = {\n\t\tpattern: /\\/\\/\\/.*/,\n\t\tgreedy: true,\n\t\talias: 'comment',\n\t\tinside: {\n\t\t\t'tag': tag\n\t\t}\n\t};\n\tvar tickDocComment = {\n\t\tpattern: /'''.*/,\n\t\tgreedy: true,\n\t\talias: 'comment',\n\t\tinside: {\n\t\t\t'tag': tag\n\t\t}\n\t};\n\n\tinsertDocComment('csharp', slashDocComment);\n\tinsertDocComment('fsharp', slashDocComment);\n\tinsertDocComment('vbnet', tickDocComment);\n\n}(Prism));\n/components/prism-ocaml.min.js\u0004Prism.languages.ocaml={comment:{pattern:/\\(\\*[\\s\\S]*?\\*\\)/,greedy:!0},char:{pattern:/'(?:[^\\\\\\r\\n']|\\\\(?:.|[ox]?[0-9a-f]{1,3}))'/i,greedy:!0},string:[{pattern:/\"(?:\\\\(?:[\\s\\S]|\\r\\n)|[^\\\\\\r\\n\"])*\"/,greedy:!0},{pattern:/\\{([a-z_]*)\\|[\\s\\S]*?\\|\\1\\}/,greedy:!0}],number:[/\\b(?:0b[01][01_]*|0o[0-7][0-7_]*)\\b/i,/\\b0x[a-f0-9][a-f0-9_]*(?:\\.[a-f0-9_]*)?(?:p[+-]?\\d[\\d_]*)?(?!\\w)/i,/\\b\\d[\\d_]*(?:\\.[\\d_]*)?(?:e[+-]?\\d[\\d_]*)?(?!\\w)/i],directive:{pattern:/\\B#\\w+/,alias:\"property\"},label:{pattern:/\\B~\\w+/,alias:\"property\"},\"type-variable\":{pattern:/\\B'\\w+/,alias:\"function\"},variant:{pattern:/`\\w+/,alias:\"symbol\"},keyword:/\\b(?:as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|match|method|module|mutable|new|nonrec|object|of|open|private|rec|sig|struct|then|to|try|type|val|value|virtual|when|where|while|with)\\b/,boolean:/\\b(?:false|true)\\b/,\"operator-like-punctuation\":{pattern:/\\[[<>|]|[>|]\\]|\\{<|>\\}/,alias:\"punctuation\"},operator:/\\.[.~]|:[=>]|[=<>@^|&+\\-*\\/$%!?~][!$%&*+\\-.\\/:<=>?@^|~]*|\\b(?:and|asr|land|lor|lsl|lsr|lxor|mod|or)\\b/,punctuation:/;;|::|[(){}\\[\\].,:;#]|\\b_\\b/};/components/prism-parser.js\u0007(function (Prism) {\n\n\tvar parser = Prism.languages.parser = Prism.languages.extend('markup', {\n\t\t'keyword': {\n\t\t\tpattern: /(^|[^^])(?:\\^(?:case|eval|for|if|switch|throw)\\b|@(?:BASE|CLASS|GET(?:_DEFAULT)?|OPTIONS|SET_DEFAULT|USE)\\b)/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'variable': {\n\t\t\tpattern: /(^|[^^])\\B\\$(?:\\w+|(?=[.{]))(?:(?:\\.|::?)\\w+)*(?:\\.|::?)?/,\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'punctuation': /\\.|:+/\n\t\t\t}\n\t\t},\n\t\t'function': {\n\t\t\tpattern: /(^|[^^])\\B[@^]\\w+(?:(?:\\.|::?)\\w+)*(?:\\.|::?)?/,\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'keyword': {\n\t\t\t\t\tpattern: /(^@)(?:GET_|SET_)/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t},\n\t\t\t\t'punctuation': /\\.|:+/\n\t\t\t}\n\t\t},\n\t\t'escape': {\n\t\t\tpattern: /\\^(?:[$^;@()\\[\\]{}\"':]|#[a-f\\d]*)/i,\n\t\t\talias: 'builtin'\n\t\t},\n\t\t'punctuation': /[\\[\\](){};]/\n\t});\n\n\tparser = Prism.languages.insertBefore('parser', 'keyword', {\n\t\t'parser-comment': {\n\t\t\tpattern: /(\\s)#.*/,\n\t\t\tlookbehind: true,\n\t\t\talias: 'comment'\n\t\t},\n\t\t'expression': {\n\t\t\t// Allow for 3 levels of depth\n\t\t\tpattern: /(^|[^^])\\((?:[^()]|\\((?:[^()]|\\((?:[^()])*\\))*\\))*\\)/,\n\t\t\tgreedy: true,\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'string': {\n\t\t\t\t\tpattern: /(^|[^^])([\"'])(?:(?!\\2)[^^]|\\^[\\s\\S])*\\2/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t},\n\t\t\t\t'keyword': parser.keyword,\n\t\t\t\t'variable': parser.variable,\n\t\t\t\t'function': parser.function,\n\t\t\t\t'boolean': /\\b(?:false|true)\\b/,\n\t\t\t\t'number': /\\b(?:0x[a-f\\d]+|\\d+(?:\\.\\d*)?(?:e[+-]?\\d+)?)\\b/i,\n\t\t\t\t'escape': parser.escape,\n\t\t\t\t'operator': /[~+*\\/\\\\%]|!(?:\\|\\|?|=)?|&&?|\\|\\|?|==|<[<=]?|>[>=]?|-[fd]?|\\b(?:def|eq|ge|gt|in|is|le|lt|ne)\\b/,\n\t\t\t\t'punctuation': parser.punctuation\n\t\t\t}\n\t\t}\n\t});\n\n\tPrism.languages.insertBefore('inside', 'punctuation', {\n\t\t'expression': parser.expression,\n\t\t'keyword': parser.keyword,\n\t\t'variable': parser.variable,\n\t\t'function': parser.function,\n\t\t'escape': parser.escape,\n\t\t'parser-punctuation': {\n\t\t\tpattern: parser.punctuation,\n\t\t\talias: 'punctuation'\n\t\t}\n\t}, parser['tag'].inside['attr-value']);\n\n}(Prism));\n/components/prism-rest.min.js\rPrism.languages.rest={table:[{pattern:/(^[\\t ]*)(?:\\+[=-]+)+\\+(?:\\r?\\n|\\r)(?:\\1[+|].+[+|](?:\\r?\\n|\\r))+\\1(?:\\+[=-]+)+\\+/m,lookbehind:!0,inside:{punctuation:/\\||(?:\\+[=-]+)+\\+/}},{pattern:/(^[\\t ]*)=+ [ =]*=(?:(?:\\r?\\n|\\r)\\1.+)+(?:\\r?\\n|\\r)\\1=+ [ =]*=(?=(?:\\r?\\n|\\r){2}|\\s*$)/m,lookbehind:!0,inside:{punctuation:/[=-]+/}}],\"substitution-def\":{pattern:/(^[\\t ]*\\.\\. )\\|(?:[^|\\s](?:[^|]*[^|\\s])?)\\| [^:]+::/m,lookbehind:!0,inside:{substitution:{pattern:/^\\|(?:[^|\\s]|[^|\\s][^|]*[^|\\s])\\|/,alias:\"attr-value\",inside:{punctuation:/^\\||\\|$/}},directive:{pattern:/( )(?! )[^:]+::/,lookbehind:!0,alias:\"function\",inside:{punctuation:/::$/}}}},\"link-target\":[{pattern:/(^[\\t ]*\\.\\. )\\[[^\\]]+\\]/m,lookbehind:!0,alias:\"string\",inside:{punctuation:/^\\[|\\]$/}},{pattern:/(^[\\t ]*\\.\\. )_(?:`[^`]+`|(?:[^:\\\\]|\\\\.)+):/m,lookbehind:!0,alias:\"string\",inside:{punctuation:/^_|:$/}}],directive:{pattern:/(^[\\t ]*\\.\\. )[^:]+::/m,lookbehind:!0,alias:\"function\",inside:{punctuation:/::$/}},comment:{pattern:/(^[\\t ]*\\.\\.)(?:(?: .+)?(?:(?:\\r?\\n|\\r).+)+| .+)(?=(?:\\r?\\n|\\r){2}|$)/m,lookbehind:!0},title:[{pattern:/^(([!\"#$%&'()*+,\\-.\\/:;<=>?@\\[\\\\\\]^_`{|}~])\\2+)(?:\\r?\\n|\\r).+(?:\\r?\\n|\\r)\\1$/m,inside:{punctuation:/^[!\"#$%&'()*+,\\-.\\/:;<=>?@\\[\\\\\\]^_`{|}~]+|[!\"#$%&'()*+,\\-.\\/:;<=>?@\\[\\\\\\]^_`{|}~]+$/,important:/.+/}},{pattern:/(^|(?:\\r?\\n|\\r){2}).+(?:\\r?\\n|\\r)([!\"#$%&'()*+,\\-.\\/:;<=>?@\\[\\\\\\]^_`{|}~])\\2+(?=\\r?\\n|\\r|$)/,lookbehind:!0,inside:{punctuation:/[!\"#$%&'()*+,\\-.\\/:;<=>?@\\[\\\\\\]^_`{|}~]+$/,important:/.+/}}],hr:{pattern:/((?:\\r?\\n|\\r){2})([!\"#$%&'()*+,\\-.\\/:;<=>?@\\[\\\\\\]^_`{|}~])\\2{3,}(?=(?:\\r?\\n|\\r){2})/,lookbehind:!0,alias:\"punctuation\"},field:{pattern:/(^[\\t ]*):[^:\\r\\n]+:(?= )/m,lookbehind:!0,alias:\"attr-name\"},\"command-line-option\":{pattern:/(^[\\t ]*)(?:[+-][a-z\\d]|(?:--|\\/)[a-z\\d-]+)(?:[ =](?:[a-z][\\w-]*|<[^<>]+>))?(?:, (?:[+-][a-z\\d]|(?:--|\\/)[a-z\\d-]+)(?:[ =](?:[a-z][\\w-]*|<[^<>]+>))?)*(?=(?:\\r?\\n|\\r)? {2,}\\S)/im,lookbehind:!0,alias:\"symbol\"},\"literal-block\":{pattern:/::(?:\\r?\\n|\\r){2}([ \\t]+)(?![ \\t]).+(?:(?:\\r?\\n|\\r)\\1.+)*/,inside:{\"literal-block-punctuation\":{pattern:/^::/,alias:\"punctuation\"}}},\"quoted-literal-block\":{pattern:/::(?:\\r?\\n|\\r){2}([!\"#$%&'()*+,\\-.\\/:;<=>?@\\[\\\\\\]^_`{|}~]).*(?:(?:\\r?\\n|\\r)\\1.*)*/,inside:{\"literal-block-punctuation\":{pattern:/^(?:::|([!\"#$%&'()*+,\\-.\\/:;<=>?@\\[\\\\\\]^_`{|}~])\\1*)/m,alias:\"punctuation\"}}},\"list-bullet\":{pattern:/(^[\\t ]*)(?:[*+\\-•‣⁃]|\\(?(?:\\d+|[a-z]|[ivxdclm]+)\\)|(?:\\d+|[a-z]|[ivxdclm]+)\\.)(?= )/im,lookbehind:!0,alias:\"punctuation\"},\"doctest-block\":{pattern:/(^[\\t ]*)>>> .+(?:(?:\\r?\\n|\\r).+)*/m,lookbehind:!0,inside:{punctuation:/^>>>/}},inline:[{pattern:/(^|[\\s\\-:\\/'\"<(\\[{])(?::[^:]+:`.*?`|`.*?`:[^:]+:|(\\*\\*?|``?|\\|)(?!\\s)(?:(?!\\2).)*\\S\\2(?=[\\s\\-.,:;!?\\\\\\/'\")\\]}]|$))/m,lookbehind:!0,inside:{bold:{pattern:/(^\\*\\*).+(?=\\*\\*$)/,lookbehind:!0},italic:{pattern:/(^\\*).+(?=\\*$)/,lookbehind:!0},\"inline-literal\":{pattern:/(^``).+(?=``$)/,lookbehind:!0,alias:\"symbol\"},role:{pattern:/^:[^:]+:|:[^:]+:$/,alias:\"function\",inside:{punctuation:/^:|:$/}},\"interpreted-text\":{pattern:/(^`).+(?=`$)/,lookbehind:!0,alias:\"attr-value\"},substitution:{pattern:/(^\\|).+(?=\\|$)/,lookbehind:!0,alias:\"attr-value\"},punctuation:/\\*\\*?|``?|\\|/}}],link:[{pattern:/\\[[^\\[\\]]+\\]_(?=[\\s\\-.,:;!?\\\\\\/'\")\\]}]|$)/,alias:\"string\",inside:{punctuation:/^\\[|\\]_$/}},{pattern:/(?:\\b[a-z\\d]+(?:[_.:+][a-z\\d]+)*_?_|`[^`]+`_?_|_`[^`]+`)(?=[\\s\\-.,:;!?\\\\\\/'\")\\]}]|$)/i,alias:\"string\",inside:{punctuation:/^_?`|`$|`?_?_$/}}],punctuation:{pattern:/(^[\\t ]*)(?:\\|(?= |$)|(?:---?|—|\\.\\.|__)(?= )|\\.\\.$)/m,lookbehind:!0}};&/components/prism-dns-zone-file.min.js\u0003<Prism.languages[\"dns-zone-file\"]={comment:/;.*/,string:{pattern:/\"(?:\\\\.|[^\"\\\\\\r\\n])*\"/,greedy:!0},variable:[{pattern:/(^\\$ORIGIN[ \\t]+)\\S+/m,lookbehind:!0},{pattern:/(^|\\s)@(?=\\s|$)/,lookbehind:!0}],keyword:/^\\$(?:INCLUDE|ORIGIN|TTL)(?=\\s|$)/m,class:{pattern:/(^|\\s)(?:CH|CS|HS|IN)(?=\\s|$)/,lookbehind:!0,alias:\"keyword\"},type:{pattern:/(^|\\s)(?:A|A6|AAAA|AFSDB|APL|ATMA|CAA|CDNSKEY|CDS|CERT|CNAME|DHCID|DLV|DNAME|DNSKEY|DS|EID|GID|GPOS|HINFO|HIP|IPSECKEY|ISDN|KEY|KX|LOC|MAILA|MAILB|MB|MD|MF|MG|MINFO|MR|MX|NAPTR|NB|NBSTAT|NIMLOC|NINFO|NS|NSAP|NSAP-PTR|NSEC|NSEC3|NSEC3PARAM|NULL|NXT|OPENPGPKEY|PTR|PX|RKEY|RP|RRSIG|RT|SIG|SINK|SMIMEA|SOA|SPF|SRV|SSHFP|TA|TKEY|TLSA|TSIG|TXT|UID|UINFO|UNSPEC|URI|WKS|X25)(?=\\s|$)/,lookbehind:!0,alias:\"keyword\"},punctuation:/[()]/},Prism.languages[\"dns-zone\"]=Prism.languages[\"dns-zone-file\"];/components/prism-lua.js\u0002Prism.languages.lua = {\n\t'comment': /^#!.+|--(?:\\[(=*)\\[[\\s\\S]*?\\]\\1\\]|.*)/m,\n\t// \\z may be used to skip the following space\n\t'string': {\n\t\tpattern: /([\"'])(?:(?!\\1)[^\\\\\\r\\n]|\\\\z(?:\\r\\n|\\s)|\\\\(?:\\r\\n|[^z]))*\\1|\\[(=*)\\[[\\s\\S]*?\\]\\2\\]/,\n\t\tgreedy: true\n\t},\n\t'number': /\\b0x[a-f\\d]+(?:\\.[a-f\\d]*)?(?:p[+-]?\\d+)?\\b|\\b\\d+(?:\\.\\B|(?:\\.\\d*)?(?:e[+-]?\\d+)?\\b)|\\B\\.\\d+(?:e[+-]?\\d+)?\\b/i,\n\t'keyword': /\\b(?:and|break|do|else|elseif|end|false|for|function|goto|if|in|local|nil|not|or|repeat|return|then|true|until|while)\\b/,\n\t'function': /(?!\\d)\\w+(?=\\s*(?:[({]))/,\n\t'operator': [\n\t\t/[-+*%^&|#]|\\/\\/?|<[<=]?|>[>=]?|[=~]=?/,\n\t\t{\n\t\t\t// Match \"..\" but don't break \"...\"\n\t\t\tpattern: /(^|[^.])\\.\\.(?!\\.)/,\n\t\t\tlookbehind: true\n\t\t}\n\t],\n\t'punctuation': /[\\[\\](){},;]|\\.+|:+/\n};\n/components/prism-zig.min.js\t\n!function(e){function n(e){return function(){return e}}var r=/\\b(?:align|allowzero|and|anyframe|anytype|asm|async|await|break|cancel|catch|comptime|const|continue|defer|else|enum|errdefer|error|export|extern|fn|for|if|inline|linksection|nakedcc|noalias|nosuspend|null|or|orelse|packed|promise|pub|resume|return|stdcallcc|struct|suspend|switch|test|threadlocal|try|undefined|union|unreachable|usingnamespace|var|volatile|while)\\b/,a=\"\\\\b(?!\"+r.source+\")(?!\\\\d)\\\\w+\\\\b\",o=\"align\\\\s*\\\\((?:[^()]|\\\\([^()]*\\\\))*\\\\)\",s=\"(?!\\\\s)(?:!?\\\\s*(?:\"+\"(?:\\\\?|\\\\bpromise->|(?:\\\\[[^[\\\\]]*\\\\]|\\\\*(?!\\\\*)|\\\\*\\\\*)(?:\\\\s*<ALIGN>|\\\\s*const\\\\b|\\\\s*volatile\\\\b|\\\\s*allowzero\\\\b)*)\".replace(/<ALIGN>/g,n(o))+\"\\\\s*)*\"+\"(?:\\\\bpromise\\\\b|(?:\\\\berror\\\\.)?<ID>(?:\\\\.<ID>)*(?!\\\\s+<ID>))\".replace(/<ID>/g,n(a))+\")+\";e.languages.zig={comment:[{pattern:/\\/\\/[/!].*/,alias:\"doc-comment\"},/\\/{2}.*/],string:[{pattern:/(^|[^\\\\@])c?\"(?:[^\"\\\\\\r\\n]|\\\\.)*\"/,lookbehind:!0,greedy:!0},{pattern:/([\\r\\n])([ \\t]+c?\\\\{2}).*(?:(?:\\r\\n?|\\n)\\2.*)*/,lookbehind:!0,greedy:!0}],char:{pattern:/(^|[^\\\\])'(?:[^'\\\\\\r\\n]|[\\uD800-\\uDFFF]{2}|\\\\(?:.|x[a-fA-F\\d]{2}|u\\{[a-fA-F\\d]{1,6}\\}))'/,lookbehind:!0,greedy:!0},builtin:/\\B@(?!\\d)\\w+(?=\\s*\\()/,label:{pattern:/(\\b(?:break|continue)\\s*:\\s*)\\w+\\b|\\b(?!\\d)\\w+\\b(?=\\s*:\\s*(?:\\{|while\\b))/,lookbehind:!0},\"class-name\":[/\\b(?!\\d)\\w+(?=\\s*=\\s*(?:(?:extern|packed)\\s+)?(?:enum|struct|union)\\s*[({])/,{pattern:RegExp(\"(:\\\\s*)<TYPE>(?=\\\\s*(?:<ALIGN>\\\\s*)?[=;,)])|<TYPE>(?=\\\\s*(?:<ALIGN>\\\\s*)?\\\\{)\".replace(/<TYPE>/g,n(s)).replace(/<ALIGN>/g,n(o))),lookbehind:!0,inside:null},{pattern:RegExp(\"(\\\\)\\\\s*)<TYPE>(?=\\\\s*(?:<ALIGN>\\\\s*)?;)\".replace(/<TYPE>/g,n(s)).replace(/<ALIGN>/g,n(o))),lookbehind:!0,inside:null}],\"builtin-type\":{pattern:/\\b(?:anyerror|bool|c_u?(?:int|long|longlong|short)|c_longdouble|c_void|comptime_(?:float|int)|f(?:16|32|64|128)|[iu](?:8|16|32|64|128|size)|noreturn|type|void)\\b/,alias:\"keyword\"},keyword:r,function:/\\b(?!\\d)\\w+(?=\\s*\\()/,number:/\\b(?:0b[01]+|0o[0-7]+|0x[a-fA-F\\d]+(?:\\.[a-fA-F\\d]*)?(?:[pP][+-]?[a-fA-F\\d]+)?|\\d+(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)\\b/,boolean:/\\b(?:false|true)\\b/,operator:/\\.[*?]|\\.{2,3}|[-=]>|\\*\\*|\\+\\+|\\|\\||(?:<<|>>|[-+*]%|[-+*/%^&|<>!=])=?|[?~]/,punctuation:/[.:,;(){}[\\]]/},e.languages.zig[\"class-name\"].forEach((function(n){null===n.inside&&(n.inside=e.languages.zig)}))}(Prism);/components/prism-haskell.js\u000fPrism.languages.haskell = {\n\t'comment': {\n\t\tpattern: /(^|[^-!#$%*+=?&@|~.:<>^\\\\\\/])(?:--(?:(?=.)[^-!#$%*+=?&@|~.:<>^\\\\\\/].*|$)|\\{-[\\s\\S]*?-\\})/m,\n\t\tlookbehind: true\n\t},\n\t'char': {\n\t\tpattern: /'(?:[^\\\\']|\\\\(?:[abfnrtv\\\\\"'&]|\\^[A-Z@[\\]^_]|ACK|BEL|BS|CAN|CR|DC1|DC2|DC3|DC4|DEL|DLE|EM|ENQ|EOT|ESC|ETB|ETX|FF|FS|GS|HT|LF|NAK|NUL|RS|SI|SO|SOH|SP|STX|SUB|SYN|US|VT|\\d+|o[0-7]+|x[0-9a-fA-F]+))'/,\n\t\talias: 'string'\n\t},\n\t'string': {\n\t\tpattern: /\"(?:[^\\\\\"]|\\\\(?:\\S|\\s+\\\\))*\"/,\n\t\tgreedy: true\n\t},\n\t'keyword': /\\b(?:case|class|data|deriving|do|else|if|in|infixl|infixr|instance|let|module|newtype|of|primitive|then|type|where)\\b/,\n\t'import-statement': {\n\t\t// The imported or hidden names are not included in this import\n\t\t// statement. This is because we want to highlight those exactly like\n\t\t// we do for the names in the program.\n\t\tpattern: /(^[\\t ]*)import\\s+(?:qualified\\s+)?(?:[A-Z][\\w']*)(?:\\.[A-Z][\\w']*)*(?:\\s+as\\s+(?:[A-Z][\\w']*)(?:\\.[A-Z][\\w']*)*)?(?:\\s+hiding\\b)?/m,\n\t\tlookbehind: true,\n\t\tinside: {\n\t\t\t'keyword': /\\b(?:as|hiding|import|qualified)\\b/,\n\t\t\t'punctuation': /\\./\n\t\t}\n\t},\n\t// These are builtin variables only. Constructors are highlighted later as a constant.\n\t'builtin': /\\b(?:abs|acos|acosh|all|and|any|appendFile|approxRational|asTypeOf|asin|asinh|atan|atan2|atanh|basicIORun|break|catch|ceiling|chr|compare|concat|concatMap|const|cos|cosh|curry|cycle|decodeFloat|denominator|digitToInt|div|divMod|drop|dropWhile|either|elem|encodeFloat|enumFrom|enumFromThen|enumFromThenTo|enumFromTo|error|even|exp|exponent|fail|filter|flip|floatDigits|floatRadix|floatRange|floor|fmap|foldl|foldl1|foldr|foldr1|fromDouble|fromEnum|fromInt|fromInteger|fromIntegral|fromRational|fst|gcd|getChar|getContents|getLine|group|head|id|inRange|index|init|intToDigit|interact|ioError|isAlpha|isAlphaNum|isAscii|isControl|isDenormalized|isDigit|isHexDigit|isIEEE|isInfinite|isLower|isNaN|isNegativeZero|isOctDigit|isPrint|isSpace|isUpper|iterate|last|lcm|length|lex|lexDigits|lexLitChar|lines|log|logBase|lookup|map|mapM|mapM_|max|maxBound|maximum|maybe|min|minBound|minimum|mod|negate|not|notElem|null|numerator|odd|or|ord|otherwise|pack|pi|pred|primExitWith|print|product|properFraction|putChar|putStr|putStrLn|quot|quotRem|range|rangeSize|read|readDec|readFile|readFloat|readHex|readIO|readInt|readList|readLitChar|readLn|readOct|readParen|readSigned|reads|readsPrec|realToFrac|recip|rem|repeat|replicate|return|reverse|round|scaleFloat|scanl|scanl1|scanr|scanr1|seq|sequence|sequence_|show|showChar|showInt|showList|showLitChar|showParen|showSigned|showString|shows|showsPrec|significand|signum|sin|sinh|snd|sort|span|splitAt|sqrt|subtract|succ|sum|tail|take|takeWhile|tan|tanh|threadToIOResult|toEnum|toInt|toInteger|toLower|toRational|toUpper|truncate|uncurry|undefined|unlines|until|unwords|unzip|unzip3|userError|words|writeFile|zip|zip3|zipWith|zipWith3)\\b/,\n\t// decimal integers and floating point numbers | octal integers | hexadecimal integers\n\t'number': /\\b(?:\\d+(?:\\.\\d+)?(?:e[+-]?\\d+)?|0o[0-7]+|0x[0-9a-f]+)\\b/i,\n\t'operator': [\n\t\t{\n\t\t\t// infix operator\n\t\t\tpattern: /`(?:[A-Z][\\w']*\\.)*[_a-z][\\w']*`/,\n\t\t\tgreedy: true\n\t\t},\n\t\t{\n\t\t\t// function composition\n\t\t\tpattern: /(\\s)\\.(?=\\s)/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t// Most of this is needed because of the meaning of a single '.'.\n\t\t// If it stands alone freely, it is the function composition.\n\t\t// It may also be a separator between a module name and an identifier => no\n\t\t// operator. If it comes together with other special characters it is an\n\t\t// operator too.\n\t\t//\n\t\t// This regex means: /[-!#$%*+=?&@|~.:<>^\\\\\\/]+/ without /\\./.\n\t\t/[-!#$%*+=?&@|~:<>^\\\\\\/][-!#$%*+=?&@|~.:<>^\\\\\\/]*|\\.[-!#$%*+=?&@|~.:<>^\\\\\\/]+/,\n\t],\n\t// In Haskell, nearly everything is a variable, do not highlight these.\n\t'hvariable': {\n\t\tpattern: /\\b(?:[A-Z][\\w']*\\.)*[_a-z][\\w']*/,\n\t\tinside: {\n\t\t\t'punctuation': /\\./\n\t\t}\n\t},\n\t'constant': {\n\t\tpattern: /\\b(?:[A-Z][\\w']*\\.)*[A-Z][\\w']*/,\n\t\tinside: {\n\t\t\t'punctuation': /\\./\n\t\t}\n\t},\n\t'punctuation': /[{}[\\];(),.:]/\n};\n\nPrism.languages.hs = Prism.languages.haskell;\n/plugins/wpd/prism-wpd.csscode[class*=\"language-\"] a[href],\npre[class*=\"language-\"] a[href] {\n\tcursor: help;\n\ttext-decoration: none;\n}\n\ncode[class*=\"language-\"] a[href]:hover,\npre[class*=\"language-\"] a[href]:hover {\n\tcursor: help;\n\ttext-decoration: underline;\n}/components/prism-stan.js\b(function (Prism) {\n\n\t// https://mc-stan.org/docs/2_28/reference-manual/bnf-grammars.html\n\n\tvar higherOrderFunctions = /\\b(?:algebra_solver|algebra_solver_newton|integrate_1d|integrate_ode|integrate_ode_bdf|integrate_ode_rk45|map_rect|ode_(?:adams|bdf|ckrk|rk45)(?:_tol)?|ode_adjoint_tol_ctl|reduce_sum|reduce_sum_static)\\b/;\n\n\tPrism.languages.stan = {\n\t\t'comment': /\\/\\/.*|\\/\\*[\\s\\S]*?\\*\\/|#(?!include).*/,\n\t\t'string': {\n\t\t\t// String literals can contain spaces and any printable ASCII characters except for \" and \\\n\t\t\t// https://mc-stan.org/docs/2_24/reference-manual/print-statements-section.html#string-literals\n\t\t\tpattern: /\"[\\x20\\x21\\x23-\\x5B\\x5D-\\x7E]*\"/,\n\t\t\tgreedy: true\n\t\t},\n\t\t'directive': {\n\t\t\tpattern: /^([ \\t]*)#include\\b.*/m,\n\t\t\tlookbehind: true,\n\t\t\talias: 'property'\n\t\t},\n\n\t\t'function-arg': {\n\t\t\tpattern: RegExp(\n\t\t\t\t'(' +\n\t\t\t\thigherOrderFunctions.source +\n\t\t\t\t/\\s*\\(\\s*/.source +\n\t\t\t\t')' +\n\t\t\t\t/[a-zA-Z]\\w*/.source\n\t\t\t),\n\t\t\tlookbehind: true,\n\t\t\talias: 'function'\n\t\t},\n\t\t'constraint': {\n\t\t\tpattern: /(\\b(?:int|matrix|real|row_vector|vector)\\s*)<[^<>]*>/,\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'expression': {\n\t\t\t\t\tpattern: /(=\\s*)\\S(?:\\S|\\s+(?!\\s))*?(?=\\s*(?:>$|,\\s*\\w+\\s*=))/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tinside: null // see below\n\t\t\t\t},\n\t\t\t\t'property': /\\b[a-z]\\w*(?=\\s*=)/i,\n\t\t\t\t'operator': /=/,\n\t\t\t\t'punctuation': /^<|>$|,/\n\t\t\t}\n\t\t},\n\t\t'keyword': [\n\t\t\t{\n\t\t\t\tpattern: /\\bdata(?=\\s*\\{)|\\b(?:functions|generated|model|parameters|quantities|transformed)\\b/,\n\t\t\t\talias: 'program-block'\n\t\t\t},\n\t\t\t/\\b(?:array|break|cholesky_factor_corr|cholesky_factor_cov|complex|continue|corr_matrix|cov_matrix|data|else|for|if|in|increment_log_prob|int|matrix|ordered|positive_ordered|print|real|reject|return|row_vector|simplex|target|unit_vector|vector|void|while)\\b/,\n\t\t\t// these are functions that are known to take another function as their first argument.\n\t\t\thigherOrderFunctions\n\t\t],\n\t\t'function': /\\b[a-z]\\w*(?=\\s*\\()/i,\n\t\t'number': /(?:\\b\\d+(?:_\\d+)*(?:\\.(?:\\d+(?:_\\d+)*)?)?|\\B\\.\\d+(?:_\\d+)*)(?:E[+-]?\\d+(?:_\\d+)*)?i?(?!\\w)/i,\n\t\t'boolean': /\\b(?:false|true)\\b/,\n\n\t\t'operator': /<-|\\.[*/]=?|\\|\\|?|&&|[!=<>+\\-*/]=?|['^%~?:]/,\n\t\t'punctuation': /[()\\[\\]{},;]/\n\t};\n\n\tPrism.languages.stan.constraint.inside.expression.inside = Prism.languages.stan;\n\n}(Prism));\n/components/prism-coq.min.js\u000b!function(e){for(var t=\"\\\\(\\\\*(?:[^(*]|\\\\((?!\\\\*)|\\\\*(?!\\\\))|<self>)*\\\\*\\\\)\",i=0;i<2;i++)t=t.replace(/<self>/g,(function(){return t}));t=t.replace(/<self>/g,\"[]\"),e.languages.coq={comment:RegExp(t),string:{pattern:/\"(?:[^\"]|\"\")*\"(?!\")/,greedy:!0},attribute:[{pattern:RegExp('#\\\\[(?:[^\\\\[\\\\](\"]|\"(?:[^\"]|\"\")*\"(?!\")|\\\\((?!\\\\*)|<comment>)*\\\\]'.replace(/<comment>/g,(function(){return t}))),greedy:!0,alias:\"attr-name\",inside:{comment:RegExp(t),string:{pattern:/\"(?:[^\"]|\"\")*\"(?!\")/,greedy:!0},operator:/=/,punctuation:/^#\\[|\\]$|[,()]/}},{pattern:/\\b(?:Cumulative|Global|Local|Monomorphic|NonCumulative|Polymorphic|Private|Program)\\b/,alias:\"attr-name\"}],keyword:/\\b(?:Abort|About|Add|Admit|Admitted|All|Arguments|As|Assumptions|Axiom|Axioms|Back|BackTo|Backtrace|BinOp|BinOpSpec|BinRel|Bind|Blacklist|Canonical|Case|Cd|Check|Class|Classes|Close|CoFixpoint|CoInductive|Coercion|Coercions|Collection|Combined|Compute|Conjecture|Conjectures|Constant|Constants|Constraint|Constructors|Context|Corollary|Create|CstOp|Custom|Cut|Debug|Declare|Defined|Definition|Delimit|Dependencies|Dependent|Derive|Diffs|Drop|Elimination|End|Entry|Equality|Eval|Example|Existential|Existentials|Existing|Export|Extern|Extraction|Fact|Fail|Field|File|Firstorder|Fixpoint|Flags|Focus|From|Funclass|Function|Functional|GC|Generalizable|Goal|Grab|Grammar|Graph|Guarded|Haskell|Heap|Hide|Hint|HintDb|Hints|Hypotheses|Hypothesis|IF|Identity|Immediate|Implicit|Implicits|Import|Include|Induction|Inductive|Infix|Info|Initial|InjTyp|Inline|Inspect|Instance|Instances|Intro|Intros|Inversion|Inversion_clear|JSON|Language|Left|Lemma|Let|Lia|Libraries|Library|Load|LoadPath|Locate|Ltac|Ltac2|ML|Match|Method|Minimality|Module|Modules|Morphism|Next|NoInline|Notation|Number|OCaml|Obligation|Obligations|Opaque|Open|Optimize|Parameter|Parameters|Parametric|Path|Paths|Prenex|Preterm|Primitive|Print|Profile|Projections|Proof|Prop|PropBinOp|PropOp|PropUOp|Property|Proposition|Pwd|Qed|Quit|Rec|Record|Recursive|Redirect|Reduction|Register|Relation|Remark|Remove|Require|Reserved|Reset|Resolve|Restart|Rewrite|Right|Ring|Rings|SProp|Saturate|Save|Scheme|Scope|Scopes|Search|SearchHead|SearchPattern|SearchRewrite|Section|Separate|Set|Setoid|Show|Signatures|Solve|Solver|Sort|Sortclass|Sorted|Spec|Step|Strategies|Strategy|String|Structure|SubClass|Subgraph|SuchThat|Tactic|Term|TestCompile|Theorem|Time|Timeout|To|Transparent|Type|Typeclasses|Types|Typing|UnOp|UnOpSpec|Undelimit|Undo|Unfocus|Unfocused|Unfold|Universe|Universes|Unshelve|Variable|Variables|Variant|Verbose|View|Visibility|Zify|_|apply|as|at|by|cofix|else|end|exists|exists2|fix|for|forall|fun|if|in|let|match|measure|move|removed|return|struct|then|using|wf|where|with)\\b/,number:/\\b(?:0x[a-f0-9][a-f0-9_]*(?:\\.[a-f0-9_]+)?(?:p[+-]?\\d[\\d_]*)?|\\d[\\d_]*(?:\\.[\\d_]+)?(?:e[+-]?\\d[\\d_]*)?)\\b/i,punct:{pattern:/@\\{|\\{\\||\\[=|:>/,alias:\"punctuation\"},operator:/\\/\\\\|\\\\\\/|\\.{2,3}|:{1,2}=|\\*\\*|[-=]>|<(?:->?|[+:=>]|<:)|>(?:=|->)|\\|[-|]?|[-!%&*+/<=>?@^~']/,punctuation:/\\.\\(|`\\(|@\\{|`\\{|\\{\\||\\[=|:>|[:.,;(){}\\[\\]]/}}(Prism);/components/prism-ejs.js\u0002j(function (Prism) {\n\n\tPrism.languages.ejs = {\n\t\t'delimiter': {\n\t\t\tpattern: /^<%[-_=]?|[-_]?%>$/,\n\t\t\talias: 'punctuation'\n\t\t},\n\t\t'comment': /^#[\\s\\S]*/,\n\t\t'language-javascript': {\n\t\t\tpattern: /[\\s\\S]+/,\n\t\t\tinside: Prism.languages.javascript\n\t\t}\n\t};\n\n\tPrism.hooks.add('before-tokenize', function (env) {\n\t\tvar ejsPattern = /<%(?!%)[\\s\\S]+?%>/g;\n\t\tPrism.languages['markup-templating'].buildPlaceholders(env, 'ejs', ejsPattern);\n\t});\n\n\tPrism.hooks.add('after-tokenize', function (env) {\n\t\tPrism.languages['markup-templating'].tokenizePlaceholders(env, 'ejs');\n\t});\n\n\tPrism.languages.eta = Prism.languages.ejs;\n\n}(Prism));\n/components/prism-prolog.min.js\u0001[Prism.languages.prolog={comment:{pattern:/\\/\\*[\\s\\S]*?\\*\\/|%.*/,greedy:!0},string:{pattern:/([\"'])(?:\\1\\1|\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1(?!\\1)/,greedy:!0},builtin:/\\b(?:fx|fy|xf[xy]?|yfx?)\\b/,function:/\\b[a-z]\\w*(?:(?=\\()|\\/\\d+)/,number:/\\b\\d+(?:\\.\\d*)?/,operator:/[:\\\\=><\\-?*@\\/;+^|!$.]+|\\b(?:is|mod|not|xor)\\b/,punctuation:/[(){}\\[\\],]/};!/components/prism-metafont.min.js\u0011Prism.languages.metafont={comment:{pattern:/%.*/,greedy:!0},string:{pattern:/\"[^\\r\\n\"]*\"/,greedy:!0},number:/\\d*\\.?\\d+/,boolean:/\\b(?:false|true)\\b/,punctuation:[/[,;()]/,{pattern:/(^|[^{}])(?:\\{|\\})(?![{}])/,lookbehind:!0},{pattern:/(^|[^[])\\[(?!\\[)/,lookbehind:!0},{pattern:/(^|[^\\]])\\](?!\\])/,lookbehind:!0}],constant:[{pattern:/(^|[^!?])\\?\\?\\?(?![!?])/,lookbehind:!0},{pattern:/(^|[^/*\\\\])(?:\\\\|\\\\\\\\)(?![/*\\\\])/,lookbehind:!0},/\\b(?:_|blankpicture|bp|cc|cm|dd|ditto|down|eps|epsilon|fullcircle|halfcircle|identity|in|infinity|left|mm|nullpen|nullpicture|origin|pc|penrazor|penspeck|pensquare|penstroke|proof|pt|quartercircle|relax|right|smoke|unitpixel|unitsquare|up)\\b/],quantity:{pattern:/\\b(?:autorounding|blacker|boundarychar|charcode|chardp|chardx|chardy|charext|charht|charic|charwd|currentwindow|day|designsize|displaying|fillin|fontmaking|granularity|hppp|join_radius|month|o_correction|pausing|pen_(?:bot|lft|rt|top)|pixels_per_inch|proofing|showstopping|smoothing|time|tolerance|tracingcapsules|tracingchoices|tracingcommands|tracingedges|tracingequations|tracingmacros|tracingonline|tracingoutput|tracingpens|tracingrestores|tracingspecs|tracingstats|tracingtitles|turningcheck|vppp|warningcheck|xoffset|year|yoffset)\\b/,alias:\"keyword\"},command:{pattern:/\\b(?:addto|batchmode|charlist|cull|display|errhelp|errmessage|errorstopmode|everyjob|extensible|fontdimen|headerbyte|inner|interim|let|ligtable|message|newinternal|nonstopmode|numspecial|openwindow|outer|randomseed|save|scrollmode|shipout|show|showdependencies|showstats|showtoken|showvariable|special)\\b/,alias:\"builtin\"},operator:[{pattern:/(^|[^>=<:|])(?:<|<=|=|=:|\\|=:|\\|=:>|=:\\|>|=:\\||\\|=:\\||\\|=:\\|>|\\|=:\\|>>|>|>=|:|:=|<>|::|\\|\\|:)(?![>=<:|])/,lookbehind:!0},{pattern:/(^|[^+-])(?:\\+|\\+\\+|-{1,3}|\\+-\\+)(?![+-])/,lookbehind:!0},{pattern:/(^|[^/*\\\\])(?:\\*|\\*\\*|\\/)(?![/*\\\\])/,lookbehind:!0},{pattern:/(^|[^.])(?:\\.{2,3})(?!\\.)/,lookbehind:!0},{pattern:/(^|[^@#&$])&(?![@#&$])/,lookbehind:!0},/\\b(?:and|not|or)\\b/],macro:{pattern:/\\b(?:abs|beginchar|bot|byte|capsule_def|ceiling|change_width|clear_pen_memory|clearit|clearpen|clearxy|counterclockwise|cullit|cutdraw|cutoff|decr|define_blacker_pixels|define_corrected_pixels|define_good_x_pixels|define_good_y_pixels|define_horizontal_corrected_pixels|define_pixels|define_whole_blacker_pixels|define_whole_pixels|define_whole_vertical_blacker_pixels|define_whole_vertical_pixels|dir|direction|directionpoint|div|dotprod|downto|draw|drawdot|endchar|erase|fill|filldraw|fix_units|flex|font_coding_scheme|font_extra_space|font_identifier|font_normal_shrink|font_normal_space|font_normal_stretch|font_quad|font_size|font_slant|font_x_height|gfcorners|gobble|gobbled|good\\.(?:bot|lft|rt|top|x|y)|grayfont|hide|hround|imagerules|incr|interact|interpath|intersectionpoint|inverse|italcorr|killtext|labelfont|labels|lft|loggingall|lowres_fix|makegrid|makelabel(?:\\.(?:bot|lft|rt|top)(?:\\.nodot)?)?|max|min|mod|mode_def|mode_setup|nodisplays|notransforms|numtok|openit|penlabels|penpos|pickup|proofoffset|proofrule|proofrulethickness|range|reflectedabout|rotatedabout|rotatedaround|round|rt|savepen|screenchars|screenrule|screenstrokes|shipit|showit|slantfont|softjoin|solve|stop|superellipse|tensepath|thru|titlefont|top|tracingall|tracingnone|undraw|undrawdot|unfill|unfilldraw|upto|vround)\\b/,alias:\"function\"},builtin:/\\b(?:ASCII|angle|char|cosd|decimal|directiontime|floor|hex|intersectiontimes|jobname|known|length|makepath|makepen|mexp|mlog|normaldeviate|oct|odd|pencircle|penoffset|point|postcontrol|precontrol|reverse|rotated|sind|sqrt|str|subpath|substring|totalweight|turningnumber|uniformdeviate|unknown|xpart|xxpart|xypart|ypart|yxpart|yypart)\\b/,keyword:/\\b(?:also|at|atleast|begingroup|charexists|contour|controls|curl|cycle|def|delimiters|doublepath|dropping|dump|else|elseif|end|enddef|endfor|endgroup|endinput|exitif|exitunless|expandafter|fi|for|forever|forsuffixes|from|if|input|inwindow|keeping|kern|of|primarydef|quote|readstring|scaled|scantokens|secondarydef|shifted|skipto|slanted|step|tension|tertiarydef|to|transformed|until|vardef|withpen|withweight|xscaled|yscaled|zscaled)\\b/,type:{pattern:/\\b(?:boolean|expr|numeric|pair|path|pen|picture|primary|secondary|string|suffix|tertiary|text|transform)\\b/,alias:\"property\"},variable:{pattern:/(^|[^@#&$])(?:@#|#@|#|@)(?![@#&$])|\\b(?:aspect_ratio|currentpen|currentpicture|currenttransform|d|extra_beginchar|extra_endchar|extra_setup|h|localfont|mag|mode|screen_cols|screen_rows|w|whatever|x|y|z)\\b/,lookbehind:!0}}; /components/prism-graphql.min.js\tPrism.languages.graphql={comment:/#.*/,description:{pattern:/(?:\"\"\"(?:[^\"]|(?!\"\"\")\")*\"\"\"|\"(?:\\\\.|[^\\\\\"\\r\\n])*\")(?=\\s*[a-z_])/i,greedy:!0,alias:\"string\",inside:{\"language-markdown\":{pattern:/(^\"(?:\"\")?)(?!\\1)[\\s\\S]+(?=\\1$)/,lookbehind:!0,inside:Prism.languages.markdown}}},string:{pattern:/\"\"\"(?:[^\"]|(?!\"\"\")\")*\"\"\"|\"(?:\\\\.|[^\\\\\"\\r\\n])*\"/,greedy:!0},number:/(?:\\B-|\\b)\\d+(?:\\.\\d+)?(?:e[+-]?\\d+)?\\b/i,boolean:/\\b(?:false|true)\\b/,variable:/\\$[a-z_]\\w*/i,directive:{pattern:/@[a-z_]\\w*/i,alias:\"function\"},\"attr-name\":{pattern:/\\b[a-z_]\\w*(?=\\s*(?:\\((?:[^()\"]|\"(?:\\\\.|[^\\\\\"\\r\\n])*\")*\\))?:)/i,greedy:!0},\"atom-input\":{pattern:/\\b[A-Z]\\w*Input\\b/,alias:\"class-name\"},scalar:/\\b(?:Boolean|Float|ID|Int|String)\\b/,constant:/\\b[A-Z][A-Z_\\d]*\\b/,\"class-name\":{pattern:/(\\b(?:enum|implements|interface|on|scalar|type|union)\\s+|&\\s*|:\\s*|\\[)[A-Z_]\\w*/,lookbehind:!0},fragment:{pattern:/(\\bfragment\\s+|\\.{3}\\s*(?!on\\b))[a-zA-Z_]\\w*/,lookbehind:!0,alias:\"function\"},\"definition-mutation\":{pattern:/(\\bmutation\\s+)[a-zA-Z_]\\w*/,lookbehind:!0,alias:\"function\"},\"definition-query\":{pattern:/(\\bquery\\s+)[a-zA-Z_]\\w*/,lookbehind:!0,alias:\"function\"},keyword:/\\b(?:directive|enum|extend|fragment|implements|input|interface|mutation|on|query|repeatable|scalar|schema|subscription|type|union)\\b/,operator:/[!=|&]|\\.{3}/,\"property-query\":/\\w+(?=\\s*\\()/,object:/\\w+(?=\\s*\\{)/,punctuation:/[!(){}\\[\\]:=,]/,property:/\\w+/},Prism.hooks.add(\"after-tokenize\",(function(n){if(\"graphql\"===n.language)for(var t=n.tokens.filter((function(n){return\"string\"!=typeof n&&\"comment\"!==n.type&&\"scalar\"!==n.type})),e=0;e<t.length;){var a=t[e++];if(\"keyword\"===a.type&&\"mutation\"===a.content){var r=[];if(c([\"definition-mutation\",\"punctuation\"])&&\"(\"===l(1).content){e+=2;var i=f(/^\\($/,/^\\)$/);if(-1===i)continue;for(;e<i;e++){var o=l(0);\"variable\"===o.type&&(b(o,\"variable-input\"),r.push(o.content))}e=i+1}if(c([\"punctuation\",\"property-query\"])&&\"{\"===l(0).content&&(e++,b(l(0),\"property-mutation\"),r.length>0)){var s=f(/^\\{$/,/^\\}$/);if(-1===s)continue;for(var u=e;u<s;u++){var p=t[u];\"variable\"===p.type&&r.indexOf(p.content)>=0&&b(p,\"variable-input\")}}}}function l(n){return t[e+n]}function c(n,t){t=t||0;for(var e=0;e<n.length;e++){var a=l(e+t);if(!a||a.type!==n[e])return!1}return!0}function f(n,a){for(var r=1,i=e;i<t.length;i++){var o=t[i],s=o.content;if(\"punctuation\"===o.type&&\"string\"==typeof s)if(n.test(s))r++;else if(a.test(s)&&0==--r)return i}return-1}function b(n,t){var e=n.alias;e?Array.isArray(e)||(n.alias=e=[e]):n.alias=e=[],e.push(t)}}));/components/prism-odin.js\bo(function (Prism) {\n\tvar escapes = /\\\\(?:[\"'\\\\abefnrtv]|0[0-7]{2}|U[\\dA-Fa-f]{6}|u[\\dA-Fa-f]{4}|x[\\dA-Fa-f]{2})/;\n\n\tPrism.languages.odin = {\n\t\t/**\n\t\t * The current implementation supports only 1 level of nesting.\n\t\t *\n\t\t * @author Michael Schmidt\n\t\t * @author edukisto\n\t\t */\n\t\t'comment': [\n\t\t\t{\n\t\t\t\tpattern: /\\/\\*(?:[^/*]|\\/(?!\\*)|\\*(?!\\/)|\\/\\*(?:\\*(?!\\/)|[^*])*(?:\\*\\/|$))*(?:\\*\\/|$)/,\n\t\t\t\tgreedy: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /#![^\\n\\r]*/,\n\t\t\t\tgreedy: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /\\/\\/[^\\n\\r]*/,\n\t\t\t\tgreedy: true\n\t\t\t}\n\t\t],\n\n\t\t/**\n\t\t * Should be found before strings because of '\"'\"- and '`'`-like sequences.\n\t\t */\n\t\t'char': {\n\t\t\tpattern: /'(?:\\\\(?:.|[0Uux][0-9A-Fa-f]{1,6})|[^\\n\\r'\\\\])'/,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'symbol': escapes\n\t\t\t}\n\t\t},\n\n\t\t'string': [\n\t\t\t{\n\t\t\t\tpattern: /`[^`]*`/,\n\t\t\t\tgreedy: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /\"(?:\\\\.|[^\\n\\r\"\\\\])*\"/,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'symbol': escapes\n\t\t\t\t}\n\t\t\t}\n\t\t],\n\n\t\t'directive': {\n\t\t\tpattern: /#\\w+/,\n\t\t\talias: 'property'\n\t\t},\n\n\t\t'number': /\\b0(?:b[01_]+|d[\\d_]+|h_*(?:(?:(?:[\\dA-Fa-f]_*){8}){1,2}|(?:[\\dA-Fa-f]_*){4})|o[0-7_]+|x[\\dA-F_a-f]+|z[\\dAB_ab]+)\\b|(?:\\b\\d+(?:\\.(?!\\.)\\d*)?|\\B\\.\\d+)(?:[Ee][+-]?\\d*)?[ijk]?(?!\\w)/,\n\n\t\t'discard': {\n\t\t\tpattern: /\\b_\\b/,\n\t\t\talias: 'keyword'\n\t\t},\n\n\t\t'procedure-definition': {\n\t\t\tpattern: /\\b\\w+(?=[ \\t]*(?::\\s*){2}proc\\b)/,\n\t\t\talias: 'function'\n\t\t},\n\n\t\t'keyword': /\\b(?:asm|auto_cast|bit_set|break|case|cast|context|continue|defer|distinct|do|dynamic|else|enum|fallthrough|for|foreign|if|import|in|map|matrix|not_in|or_else|or_return|package|proc|return|struct|switch|transmute|typeid|union|using|when|where)\\b/,\n\n\t\t/**\n\t\t * false, nil, true can be used as procedure names. \"_\" and keywords can't.\n\t\t */\n\t\t'procedure-name': {\n\t\t\tpattern: /\\b\\w+(?=[ \\t]*\\()/,\n\t\t\talias: 'function'\n\t\t},\n\n\t\t'boolean': /\\b(?:false|nil|true)\\b/,\n\n\t\t'constant-parameter-sign': {\n\t\t\tpattern: /\\$/,\n\t\t\talias: 'important'\n\t\t},\n\n\t\t'undefined': {\n\t\t\tpattern: /---/,\n\t\t\talias: 'operator'\n\t\t},\n\n\t\t'arrow': {\n\t\t\tpattern: /->/,\n\t\t\talias: 'punctuation'\n\t\t},\n\n\t\t'operator': /\\+\\+|--|\\.\\.[<=]?|(?:&~|[-!*+/=~]|[%&<>|]{1,2})=?|[?^]/,\n\n\t\t'punctuation': /[(),.:;@\\[\\]{}]/\n\t};\n}(Prism));\n/components/prism-rust.js\u000e(function (Prism) {\n\n\tvar multilineComment = /\\/\\*(?:[^*/]|\\*(?!\\/)|\\/(?!\\*)|<self>)*\\*\\//.source;\n\tfor (var i = 0; i < 2; i++) {\n\t\t// support 4 levels of nested comments\n\t\tmultilineComment = multilineComment.replace(/<self>/g, function () { return multilineComment; });\n\t}\n\tmultilineComment = multilineComment.replace(/<self>/g, function () { return /[^\\s\\S]/.source; });\n\n\n\tPrism.languages.rust = {\n\t\t'comment': [\n\t\t\t{\n\t\t\t\tpattern: RegExp(/(^|[^\\\\])/.source + multilineComment),\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /(^|[^\\\\:])\\/\\/.*/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true\n\t\t\t}\n\t\t],\n\t\t'string': {\n\t\t\tpattern: /b?\"(?:\\\\[\\s\\S]|[^\\\\\"])*\"|b?r(#*)\"(?:[^\"]|\"(?!\\1))*\"\\1/,\n\t\t\tgreedy: true\n\t\t},\n\t\t'char': {\n\t\t\tpattern: /b?'(?:\\\\(?:x[0-7][\\da-fA-F]|u\\{(?:[\\da-fA-F]_*){1,6}\\}|.)|[^\\\\\\r\\n\\t'])'/,\n\t\t\tgreedy: true\n\t\t},\n\t\t'attribute': {\n\t\t\tpattern: /#!?\\[(?:[^\\[\\]\"]|\"(?:\\\\[\\s\\S]|[^\\\\\"])*\")*\\]/,\n\t\t\tgreedy: true,\n\t\t\talias: 'attr-name',\n\t\t\tinside: {\n\t\t\t\t'string': null // see below\n\t\t\t}\n\t\t},\n\n\t\t// Closure params should not be confused with bitwise OR |\n\t\t'closure-params': {\n\t\t\tpattern: /([=(,:]\\s*|\\bmove\\s*)\\|[^|]*\\||\\|[^|]*\\|(?=\\s*(?:\\{|->))/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'closure-punctuation': {\n\t\t\t\t\tpattern: /^\\||\\|$/,\n\t\t\t\t\talias: 'punctuation'\n\t\t\t\t},\n\t\t\t\trest: null // see below\n\t\t\t}\n\t\t},\n\n\t\t'lifetime-annotation': {\n\t\t\tpattern: /'\\w+/,\n\t\t\talias: 'symbol'\n\t\t},\n\n\t\t'fragment-specifier': {\n\t\t\tpattern: /(\\$\\w+:)[a-z]+/,\n\t\t\tlookbehind: true,\n\t\t\talias: 'punctuation'\n\t\t},\n\t\t'variable': /\\$\\w+/,\n\n\t\t'function-definition': {\n\t\t\tpattern: /(\\bfn\\s+)\\w+/,\n\t\t\tlookbehind: true,\n\t\t\talias: 'function'\n\t\t},\n\t\t'type-definition': {\n\t\t\tpattern: /(\\b(?:enum|struct|trait|type|union)\\s+)\\w+/,\n\t\t\tlookbehind: true,\n\t\t\talias: 'class-name'\n\t\t},\n\t\t'module-declaration': [\n\t\t\t{\n\t\t\t\tpattern: /(\\b(?:crate|mod)\\s+)[a-z][a-z_\\d]*/,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'namespace'\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /(\\b(?:crate|self|super)\\s*)::\\s*[a-z][a-z_\\d]*\\b(?:\\s*::(?:\\s*[a-z][a-z_\\d]*\\s*::)*)?/,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'namespace',\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': /::/\n\t\t\t\t}\n\t\t\t}\n\t\t],\n\t\t'keyword': [\n\t\t\t// https://github.com/rust-lang/reference/blob/master/src/keywords.md\n\t\t\t/\\b(?:Self|abstract|as|async|await|become|box|break|const|continue|crate|do|dyn|else|enum|extern|final|fn|for|if|impl|in|let|loop|macro|match|mod|move|mut|override|priv|pub|ref|return|self|static|struct|super|trait|try|type|typeof|union|unsafe|unsized|use|virtual|where|while|yield)\\b/,\n\t\t\t// primitives and str\n\t\t\t// https://doc.rust-lang.org/stable/rust-by-example/primitives.html\n\t\t\t/\\b(?:bool|char|f(?:32|64)|[ui](?:8|16|32|64|128|size)|str)\\b/\n\t\t],\n\n\t\t// functions can technically start with an upper-case letter, but this will introduce a lot of false positives\n\t\t// and Rust's naming conventions recommend snake_case anyway.\n\t\t// https://doc.rust-lang.org/1.0.0/style/style/naming/README.html\n\t\t'function': /\\b[a-z_]\\w*(?=\\s*(?:::\\s*<|\\())/,\n\t\t'macro': {\n\t\t\tpattern: /\\b\\w+!/,\n\t\t\talias: 'property'\n\t\t},\n\t\t'constant': /\\b[A-Z_][A-Z_\\d]+\\b/,\n\t\t'class-name': /\\b[A-Z]\\w*\\b/,\n\n\t\t'namespace': {\n\t\t\tpattern: /(?:\\b[a-z][a-z_\\d]*\\s*::\\s*)*\\b[a-z][a-z_\\d]*\\s*::(?!\\s*<)/,\n\t\t\tinside: {\n\t\t\t\t'punctuation': /::/\n\t\t\t}\n\t\t},\n\n\t\t// Hex, oct, bin, dec numbers with visual separators and type suffix\n\t\t'number': /\\b(?:0x[\\dA-Fa-f](?:_?[\\dA-Fa-f])*|0o[0-7](?:_?[0-7])*|0b[01](?:_?[01])*|(?:(?:\\d(?:_?\\d)*)?\\.)?\\d(?:_?\\d)*(?:[Ee][+-]?\\d+)?)(?:_?(?:f32|f64|[iu](?:8|16|32|64|size)?))?\\b/,\n\t\t'boolean': /\\b(?:false|true)\\b/,\n\t\t'punctuation': /->|\\.\\.=|\\.{1,3}|::|[{}[\\];(),:]/,\n\t\t'operator': /[-+*\\/%!^]=?|=[=>]?|&[&=]?|\\|[|=]?|<<?=?|>>?=?|[@?]/\n\t};\n\n\tPrism.languages.rust['closure-params'].inside.rest = Prism.languages.rust;\n\tPrism.languages.rust['attribute'].inside['string'] = Prism.languages.rust['string'];\n\n}(Prism));\n/components/prism-latte.min.js\u0004\"!function(a){a.languages.latte={comment:/^\\{\\*[\\s\\S]*/,\"latte-tag\":{pattern:/(^\\{(?:\\/(?=[a-z]))?)(?:[=_]|[a-z]\\w*\\b(?!\\())/i,lookbehind:!0,alias:\"important\"},delimiter:{pattern:/^\\{\\/?|\\}$/,alias:\"punctuation\"},php:{pattern:/\\S(?:[\\s\\S]*\\S)?/,alias:\"language-php\",inside:a.languages.php}};var t=a.languages.extend(\"markup\",{});a.languages.insertBefore(\"inside\",\"attr-value\",{\"n-attr\":{pattern:/n:[\\w-]+(?:\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+))?/,inside:{\"attr-name\":{pattern:/^[^\\s=]+/,alias:\"important\"},\"attr-value\":{pattern:/=[\\s\\S]+/,inside:{punctuation:[/^=/,{pattern:/^(\\s*)[\"']|[\"']$/,lookbehind:!0}],php:{pattern:/\\S(?:[\\s\\S]*\\S)?/,inside:a.languages.php}}}}}},t.tag),a.hooks.add(\"before-tokenize\",(function(e){\"latte\"===e.language&&(a.languages[\"markup-templating\"].buildPlaceholders(e,\"latte\",/\\{\\*[\\s\\S]*?\\*\\}|\\{[^'\"\\s{}*](?:[^\"'/{}]|\\/(?![*/])|(\"|')(?:\\\\[\\s\\S]|(?!\\1)[^\\\\])*\\1|\\/\\*(?:[^*]|\\*(?!\\/))*\\*\\/)*\\}/g),e.grammar=t)})),a.hooks.add(\"after-tokenize\",(function(t){a.languages[\"markup-templating\"].tokenizePlaceholders(t,\"latte\")}))}(Prism);\"/components/prism-purebasic.min.js\tPrism.languages.purebasic=Prism.languages.extend(\"clike\",{comment:/;.*/,keyword:/\\b(?:align|and|as|break|calldebugger|case|compilercase|compilerdefault|compilerelse|compilerelseif|compilerendif|compilerendselect|compilererror|compilerif|compilerselect|continue|data|datasection|debug|debuglevel|declare|declarec|declarecdll|declaredll|declaremodule|default|define|dim|disableasm|disabledebugger|disableexplicit|else|elseif|enableasm|enabledebugger|enableexplicit|end|enddatasection|enddeclaremodule|endenumeration|endif|endimport|endinterface|endmacro|endmodule|endprocedure|endselect|endstructure|endstructureunion|endwith|enumeration|extends|fakereturn|for|foreach|forever|global|gosub|goto|if|import|importc|includebinary|includefile|includepath|interface|macro|module|newlist|newmap|next|not|or|procedure|procedurec|procedurecdll|proceduredll|procedurereturn|protected|prototype|prototypec|read|redim|repeat|restore|return|runtime|select|shared|static|step|structure|structureunion|swap|threaded|to|until|wend|while|with|xincludefile|xor)\\b/i,function:/\\b\\w+(?:\\.\\w+)?\\s*(?=\\()/,number:/(?:\\$[\\da-f]+|\\b-?(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:e[+-]?\\d+)?)\\b/i,operator:/(?:@\\*?|\\?|\\*)\\w+\\$?|-[>-]?|\\+\\+?|!=?|<<?=?|>>?=?|==?|&&?|\\|?\\||[~^%?*/@]/}),Prism.languages.insertBefore(\"purebasic\",\"keyword\",{tag:/#\\w+\\$?/,asm:{pattern:/(^[\\t ]*)!.*/m,lookbehind:!0,alias:\"tag\",inside:{comment:/;.*/,string:{pattern:/([\"'`])(?:\\\\.|(?!\\1)[^\\\\\\r\\n])*\\1/,greedy:!0},\"label-reference-anonymous\":{pattern:/(!\\s*j[a-z]+\\s+)@[fb]/i,lookbehind:!0,alias:\"fasm-label\"},\"label-reference-addressed\":{pattern:/(!\\s*j[a-z]+\\s+)[A-Z._?$@][\\w.?$@~#]*/i,lookbehind:!0,alias:\"fasm-label\"},keyword:[/\\b(?:extern|global)\\b[^;\\r\\n]*/i,/\\b(?:CPU|DEFAULT|FLOAT)\\b.*/],function:{pattern:/^([\\t ]*!\\s*)[\\da-z]+(?=\\s|$)/im,lookbehind:!0},\"function-inline\":{pattern:/(:\\s*)[\\da-z]+(?=\\s)/i,lookbehind:!0,alias:\"function\"},label:{pattern:/^([\\t ]*!\\s*)[A-Za-z._?$@][\\w.?$@~#]*(?=:)/m,lookbehind:!0,alias:\"fasm-label\"},register:/\\b(?:st\\d|[xyz]mm\\d\\d?|[cdt]r\\d|r\\d\\d?[bwd]?|[er]?[abcd]x|[abcd][hl]|[er]?(?:bp|di|si|sp)|[cdefgs]s|mm\\d+)\\b/i,number:/(?:\\b|-|(?=\\$))(?:0[hx](?:[\\da-f]*\\.)?[\\da-f]+(?:p[+-]?\\d+)?|\\d[\\da-f]+[hx]|\\$\\d[\\da-f]*|0[oq][0-7]+|[0-7]+[oq]|0[by][01]+|[01]+[by]|0[dt]\\d+|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:\\.?e[+-]?\\d+)?[dt]?)\\b/i,operator:/[\\[\\]*+\\-/%<>=&|$!,.:]/}}}),delete Prism.languages.purebasic[\"class-name\"],delete Prism.languages.purebasic.boolean,Prism.languages.pbfasm=Prism.languages.purebasic; /components/prism-asm6502.min.js\u0003aPrism.languages.asm6502={comment:/;.*/,directive:{pattern:/\\.\\w+(?= )/,alias:\"property\"},string:/([\"'`])(?:\\\\.|(?!\\1)[^\\\\\\r\\n])*\\1/,\"op-code\":{pattern:/\\b(?:ADC|AND|ASL|BCC|BCS|BEQ|BIT|BMI|BNE|BPL|BRK|BVC|BVS|CLC|CLD|CLI|CLV|CMP|CPX|CPY|DEC|DEX|DEY|EOR|INC|INX|INY|JMP|JSR|LDA|LDX|LDY|LSR|NOP|ORA|PHA|PHP|PLA|PLP|ROL|ROR|RTI|RTS|SBC|SEC|SED|SEI|STA|STX|STY|TAX|TAY|TSX|TXA|TXS|TYA|adc|and|asl|bcc|bcs|beq|bit|bmi|bne|bpl|brk|bvc|bvs|clc|cld|cli|clv|cmp|cpx|cpy|dec|dex|dey|eor|inc|inx|iny|jmp|jsr|lda|ldx|ldy|lsr|nop|ora|pha|php|pla|plp|rol|ror|rti|rts|sbc|sec|sed|sei|sta|stx|sty|tax|tay|tsx|txa|txs|tya)\\b/,alias:\"keyword\"},\"hex-number\":{pattern:/#?\\$[\\da-f]{1,4}\\b/i,alias:\"number\"},\"binary-number\":{pattern:/#?%[01]+\\b/,alias:\"number\"},\"decimal-number\":{pattern:/#?\\b\\d+\\b/,alias:\"number\"},register:{pattern:/\\b[xya]\\b/i,alias:\"variable\"},punctuation:/[(),:]/};/components/prism-sass.min.js\u0004=!function(e){e.languages.sass=e.languages.extend(\"css\",{comment:{pattern:/^([ \\t]*)\\/[\\/*].*(?:(?:\\r?\\n|\\r)\\1[ \\t].+)*/m,lookbehind:!0,greedy:!0}}),e.languages.insertBefore(\"sass\",\"atrule\",{\"atrule-line\":{pattern:/^(?:[ \\t]*)[@+=].+/m,greedy:!0,inside:{atrule:/(?:@[\\w-]+|[+=])/}}}),delete e.languages.sass.atrule;var r=/\\$[-\\w]+|#\\{\\$[-\\w]+\\}/,t=[/[+*\\/%]|[=!]=|<=?|>=?|\\b(?:and|not|or)\\b/,{pattern:/(\\s)-(?=\\s)/,lookbehind:!0}];e.languages.insertBefore(\"sass\",\"property\",{\"variable-line\":{pattern:/^[ \\t]*\\$.+/m,greedy:!0,inside:{punctuation:/:/,variable:r,operator:t}},\"property-line\":{pattern:/^[ \\t]*(?:[^:\\s]+ *:.*|:[^:\\s].*)/m,greedy:!0,inside:{property:[/[^:\\s]+(?=\\s*:)/,{pattern:/(:)[^:\\s]+/,lookbehind:!0}],punctuation:/:/,variable:r,operator:t,important:e.languages.sass.important}}}),delete e.languages.sass.property,delete e.languages.sass.important,e.languages.insertBefore(\"sass\",\"punctuation\",{selector:{pattern:/^([ \\t]*)\\S(?:,[^,\\r\\n]+|[^,\\r\\n]*)(?:,[^,\\r\\n]+)*(?:,(?:\\r?\\n|\\r)\\1[ \\t]+\\S(?:,[^,\\r\\n]+|[^,\\r\\n]*)(?:,[^,\\r\\n]+)*)*/m,lookbehind:!0,greedy:!0}})}(Prism);/components/prism-hoon.js\u0002\u001fPrism.languages.hoon = {\n\t'comment': {\n\t\tpattern: /::.*/,\n\t\tgreedy: true\n\t},\n\t'string': {\n\t\tpattern: /\"(?:[^\"\\\\]|\\\\.)*\"|'(?:[^'\\\\]|\\\\.)*'/,\n\t\tgreedy: true\n\t},\n\t'constant': /%(?:\\.[ny]|[\\w-]+)/,\n\t'class-name': /@(?:[a-z0-9-]*[a-z0-9])?|\\*/i,\n\t'function': /(?:\\+[-+] {2})?(?:[a-z](?:[a-z0-9-]*[a-z0-9])?)/,\n\t'keyword': /\\.[\\^\\+\\*=\\?]|![><:\\.=\\?!]|=[>|:,\\.\\-\\^<+;/~\\*\\?]|\\?[>|:\\.\\-\\^<\\+&~=@!]|\\|[\\$_%:\\.\\-\\^~\\*=@\\?]|\\+[|\\$\\+\\*]|:[_\\-\\^\\+~\\*]|%[_:\\.\\-\\^\\+~\\*=]|\\^[|:\\.\\-\\+&~\\*=\\?]|\\$[|_%:<>\\-\\^&~@=\\?]|;[:<\\+;\\/~\\*=]|~[>|\\$_%<\\+\\/&=\\?!]|--|==/\n};\n/components/prism-jq.js\u0006(function (Prism) {\n\n\tvar interpolation = /\\\\\\((?:[^()]|\\([^()]*\\))*\\)/.source;\n\tvar string = RegExp(/(^|[^\\\\])\"(?:[^\"\\r\\n\\\\]|\\\\[^\\r\\n(]|__)*\"/.source.replace(/__/g, function () { return interpolation; }));\n\tvar stringInterpolation = {\n\t\t'interpolation': {\n\t\t\tpattern: RegExp(/((?:^|[^\\\\])(?:\\\\{2})*)/.source + interpolation),\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'content': {\n\t\t\t\t\tpattern: /^(\\\\\\()[\\s\\S]+(?=\\)$)/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tinside: null // see below\n\t\t\t\t},\n\t\t\t\t'punctuation': /^\\\\\\(|\\)$/\n\t\t\t}\n\t\t}\n\t};\n\n\tvar jq = Prism.languages.jq = {\n\t\t'comment': /#.*/,\n\t\t'property': {\n\t\t\tpattern: RegExp(string.source + /(?=\\s*:(?!:))/.source),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: stringInterpolation\n\t\t},\n\t\t'string': {\n\t\t\tpattern: string,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: stringInterpolation\n\t\t},\n\n\t\t'function': {\n\t\t\tpattern: /(\\bdef\\s+)[a-z_]\\w+/i,\n\t\t\tlookbehind: true\n\t\t},\n\n\t\t'variable': /\\B\\$\\w+/,\n\t\t'property-literal': {\n\t\t\tpattern: /\\b[a-z_]\\w*(?=\\s*:(?!:))/i,\n\t\t\talias: 'property'\n\t\t},\n\t\t'keyword': /\\b(?:as|break|catch|def|elif|else|end|foreach|if|import|include|label|module|modulemeta|null|reduce|then|try|while)\\b/,\n\t\t'boolean': /\\b(?:false|true)\\b/,\n\t\t'number': /(?:\\b\\d+\\.|\\B\\.)?\\b\\d+(?:[eE][+-]?\\d+)?\\b/,\n\n\t\t'operator': [\n\t\t\t{\n\t\t\t\tpattern: /\\|=?/,\n\t\t\t\talias: 'pipe'\n\t\t\t},\n\t\t\t/\\.\\.|[!=<>]?=|\\?\\/\\/|\\/\\/=?|[-+*/%]=?|[<>?]|\\b(?:and|not|or)\\b/\n\t\t],\n\t\t'c-style-function': {\n\t\t\tpattern: /\\b[a-z_]\\w*(?=\\s*\\()/i,\n\t\t\talias: 'function'\n\t\t},\n\t\t'punctuation': /::|[()\\[\\]{},:;]|\\.(?=\\s*[\\[\\w$])/,\n\t\t'dot': {\n\t\t\tpattern: /\\./,\n\t\t\talias: 'important'\n\t\t}\n\t};\n\n\tstringInterpolation.interpolation.inside.content.inside = jq;\n\n}(Prism));\n/components/prism-purescript.js\u000btPrism.languages.purescript = Prism.languages.extend('haskell', {\n\t'keyword': /\\b(?:ado|case|class|data|derive|do|else|forall|if|in|infixl|infixr|instance|let|module|newtype|of|primitive|then|type|where)\\b|∀/,\n\n\t'import-statement': {\n\t\t// The imported or hidden names are not included in this import\n\t\t// statement. This is because we want to highlight those exactly like\n\t\t// we do for the names in the program.\n\t\tpattern: /(^[\\t ]*)import\\s+[A-Z][\\w']*(?:\\.[A-Z][\\w']*)*(?:\\s+as\\s+[A-Z][\\w']*(?:\\.[A-Z][\\w']*)*)?(?:\\s+hiding\\b)?/m,\n\t\tlookbehind: true,\n\t\tinside: {\n\t\t\t'keyword': /\\b(?:as|hiding|import)\\b/,\n\t\t\t'punctuation': /\\./\n\t\t}\n\t},\n\n\t// These are builtin functions only. Constructors are highlighted later as a constant.\n\t'builtin': /\\b(?:absurd|add|ap|append|apply|between|bind|bottom|clamp|compare|comparing|compose|conj|const|degree|discard|disj|div|eq|flap|flip|gcd|identity|ifM|join|lcm|liftA1|liftM1|map|max|mempty|min|mod|mul|negate|not|notEq|one|otherwise|recip|show|sub|top|unit|unless|unlessM|void|when|whenM|zero)\\b/,\n\n\t'operator': [\n\t\t// Infix operators\n\t\tPrism.languages.haskell.operator[0],\n\t\t// ASCII operators\n\t\tPrism.languages.haskell.operator[2],\n\t\t// All UTF16 Unicode operator symbols\n\t\t// This regex is equivalent to /(?=[\\x80-\\uFFFF])[\\p{gc=Math_Symbol}\\p{gc=Currency_Symbol}\\p{Modifier_Symbol}\\p{Other_Symbol}]/u\n\t\t// See https://github.com/PrismJS/prism/issues/3006 for more details.\n\t\t/[\\xa2-\\xa6\\xa8\\xa9\\xac\\xae-\\xb1\\xb4\\xb8\\xd7\\xf7\\u02c2-\\u02c5\\u02d2-\\u02df\\u02e5-\\u02eb\\u02ed\\u02ef-\\u02ff\\u0375\\u0384\\u0385\\u03f6\\u0482\\u058d-\\u058f\\u0606-\\u0608\\u060b\\u060e\\u060f\\u06de\\u06e9\\u06fd\\u06fe\\u07f6\\u07fe\\u07ff\\u09f2\\u09f3\\u09fa\\u09fb\\u0af1\\u0b70\\u0bf3-\\u0bfa\\u0c7f\\u0d4f\\u0d79\\u0e3f\\u0f01-\\u0f03\\u0f13\\u0f15-\\u0f17\\u0f1a-\\u0f1f\\u0f34\\u0f36\\u0f38\\u0fbe-\\u0fc5\\u0fc7-\\u0fcc\\u0fce\\u0fcf\\u0fd5-\\u0fd8\\u109e\\u109f\\u1390-\\u1399\\u166d\\u17db\\u1940\\u19de-\\u19ff\\u1b61-\\u1b6a\\u1b74-\\u1b7c\\u1fbd\\u1fbf-\\u1fc1\\u1fcd-\\u1fcf\\u1fdd-\\u1fdf\\u1fed-\\u1fef\\u1ffd\\u1ffe\\u2044\\u2052\\u207a-\\u207c\\u208a-\\u208c\\u20a0-\\u20bf\\u2100\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211e-\\u2123\\u2125\\u2127\\u2129\\u212e\\u213a\\u213b\\u2140-\\u2144\\u214a-\\u214d\\u214f\\u218a\\u218b\\u2190-\\u2307\\u230c-\\u2328\\u232b-\\u2426\\u2440-\\u244a\\u249c-\\u24e9\\u2500-\\u2767\\u2794-\\u27c4\\u27c7-\\u27e5\\u27f0-\\u2982\\u2999-\\u29d7\\u29dc-\\u29fb\\u29fe-\\u2b73\\u2b76-\\u2b95\\u2b97-\\u2bff\\u2ce5-\\u2cea\\u2e50\\u2e51\\u2e80-\\u2e99\\u2e9b-\\u2ef3\\u2f00-\\u2fd5\\u2ff0-\\u2ffb\\u3004\\u3012\\u3013\\u3020\\u3036\\u3037\\u303e\\u303f\\u309b\\u309c\\u3190\\u3191\\u3196-\\u319f\\u31c0-\\u31e3\\u3200-\\u321e\\u322a-\\u3247\\u3250\\u3260-\\u327f\\u328a-\\u32b0\\u32c0-\\u33ff\\u4dc0-\\u4dff\\ua490-\\ua4c6\\ua700-\\ua716\\ua720\\ua721\\ua789\\ua78a\\ua828-\\ua82b\\ua836-\\ua839\\uaa77-\\uaa79\\uab5b\\uab6a\\uab6b\\ufb29\\ufbb2-\\ufbc1\\ufdfc\\ufdfd\\ufe62\\ufe64-\\ufe66\\ufe69\\uff04\\uff0b\\uff1c-\\uff1e\\uff3e\\uff40\\uff5c\\uff5e\\uffe0-\\uffe6\\uffe8-\\uffee\\ufffc\\ufffd]/\n\t]\n});\n\nPrism.languages.purs = Prism.languages.purescript;\n#/components/prism-warpscript.min.js\u0002lPrism.languages.warpscript={comment:/#.*|\\/\\/.*|\\/\\*[\\s\\S]*?\\*\\//,string:{pattern:/\"(?:[^\"\\\\\\r\\n]|\\\\.)*\"|'(?:[^'\\\\\\r\\n]|\\\\.)*'|<'(?:[^\\\\']|'(?!>)|\\\\.)*'>/,greedy:!0},variable:/\\$\\S+/,macro:{pattern:/@\\S+/,alias:\"property\"},keyword:/\\b(?:BREAK|CHECKMACRO|CONTINUE|CUDF|DEFINED|DEFINEDMACRO|EVAL|FAIL|FOR|FOREACH|FORSTEP|IFT|IFTE|MSGFAIL|NRETURN|RETHROW|RETURN|SWITCH|TRY|UDF|UNTIL|WHILE)\\b/,number:/[+-]?\\b(?:NaN|Infinity|\\d+(?:\\.\\d*)?(?:[Ee][+-]?\\d+)?|0x[\\da-fA-F]+|0b[01]+)\\b/,boolean:/\\b(?:F|T|false|true)\\b/,punctuation:/<%|%>|[{}[\\]()]/,operator:/==|&&?|\\|\\|?|\\*\\*?|>>>?|<<|[<>!~]=?|[-/%^]|\\+!?|\\b(?:AND|NOT|OR)\\b/};/components/prism-git.js\u0006kPrism.languages.git = {\n\t/*\n\t * A simple one line comment like in a git status command\n\t * For instance:\n\t * $ git status\n\t * # On branch infinite-scroll\n\t * # Your branch and 'origin/sharedBranches/frontendTeam/infinite-scroll' have diverged,\n\t * # and have 1 and 2 different commits each, respectively.\n\t * nothing to commit (working directory clean)\n\t */\n\t'comment': /^#.*/m,\n\n\t/*\n\t * Regexp to match the changed lines in a git diff output. Check the example below.\n\t */\n\t'deleted': /^[-–].*/m,\n\t'inserted': /^\\+.*/m,\n\n\t/*\n\t * a string (double and simple quote)\n\t */\n\t'string': /(\"|')(?:\\\\.|(?!\\1)[^\\\\\\r\\n])*\\1/,\n\n\t/*\n\t * a git command. It starts with a random prompt finishing by a $, then \"git\" then some other parameters\n\t * For instance:\n\t * $ git add file.txt\n\t */\n\t'command': {\n\t\tpattern: /^.*\\$ git .*$/m,\n\t\tinside: {\n\t\t\t/*\n\t\t\t * A git command can contain a parameter starting by a single or a double dash followed by a string\n\t\t\t * For instance:\n\t\t\t * $ git diff --cached\n\t\t\t * $ git log -p\n\t\t\t */\n\t\t\t'parameter': /\\s--?\\w+/\n\t\t}\n\t},\n\n\t/*\n\t * Coordinates displayed in a git diff command\n\t * For instance:\n\t * $ git diff\n\t * diff --git file.txt file.txt\n\t * index 6214953..1d54a52 100644\n\t * --- file.txt\n\t * +++ file.txt\n\t * @@ -1 +1,2 @@\n\t * -Here's my tetx file\n\t * +Here's my text file\n\t * +And this is the second line\n\t */\n\t'coord': /^@@.*@@$/m,\n\n\t/*\n\t * Match a \"commit [SHA1]\" line in a git log output.\n\t * For instance:\n\t * $ git log\n\t * commit a11a14ef7e26f2ca62d4b35eac455ce636d0dc09\n\t * Author: lgiraudel\n\t * Date:   Mon Feb 17 11:18:34 2014 +0100\n\t *\n\t *     Add of a new line\n\t */\n\t'commit-sha1': /^commit \\w{40}$/m\n};\n/components/prism-tremor.min.js\u0006\u001a!function(e){e.languages.tremor={comment:{pattern:/(^|[^\\\\])(?:\\/\\*[\\s\\S]*?\\*\\/|(?:--|\\/\\/|#).*)/,lookbehind:!0},\"interpolated-string\":null,extractor:{pattern:/\\b[a-z_]\\w*\\|(?:[^\\r\\n\\\\|]|\\\\(?:\\r\\n|[\\s\\S]))*\\|/i,greedy:!0,inside:{regex:{pattern:/(^re)\\|[\\s\\S]+/,lookbehind:!0},function:/^\\w+/,value:/\\|[\\s\\S]+/}},identifier:{pattern:/`[^`]*`/,greedy:!0},function:/\\b[a-z_]\\w*(?=\\s*(?:::\\s*<|\\())\\b/,keyword:/\\b(?:args|as|by|case|config|connect|connector|const|copy|create|default|define|deploy|drop|each|emit|end|erase|event|flow|fn|for|from|group|having|insert|into|intrinsic|let|links|match|merge|mod|move|of|operator|patch|pipeline|recur|script|select|set|sliding|state|stream|to|tumbling|update|use|when|where|window|with)\\b/,boolean:/\\b(?:false|null|true)\\b/i,number:/\\b(?:0b[01_]*|0x[0-9a-fA-F_]*|\\d[\\d_]*(?:\\.\\d[\\d_]*)?(?:[Ee][+-]?[\\d_]+)?)\\b/,\"pattern-punctuation\":{pattern:/%(?=[({[])/,alias:\"punctuation\"},operator:/[-+*\\/%~!^]=?|=[=>]?|&[&=]?|\\|[|=]?|<<?=?|>>?>?=?|(?:absent|and|not|or|present|xor)\\b/,punctuation:/::|[;\\[\\]()\\{\\},.:]/};var n='#\\\\{(?:[^\"{}]|\\\\{[^{}]*\\\\}|\"(?:[^\"\\\\\\\\\\r\\n]|\\\\\\\\(?:\\r\\n|[^]))*\")*\\\\}';e.languages.tremor[\"interpolated-string\"]={pattern:RegExp('(^|[^\\\\\\\\])(?:\"\"\"(?:[^\"\\\\\\\\#]|\\\\\\\\[^]|\"(?!\"\")|#(?!\\\\{)|'+n+')*\"\"\"|\"(?:[^\"\\\\\\\\\\r\\n#]|\\\\\\\\(?:\\r\\n|[^])|#(?!\\\\{)|'+n+')*\")'),lookbehind:!0,greedy:!0,inside:{interpolation:{pattern:RegExp(n),inside:{punctuation:/^#\\{|\\}$/,expression:{pattern:/[\\s\\S]+/,inside:e.languages.tremor}}},string:/[\\s\\S]+/}},e.languages.troy=e.languages.tremor,e.languages.trickle=e.languages.tremor}(Prism);/components/prism-typoscript.js\b(function (Prism) {\n\n\tvar keywords = /\\b(?:ACT|ACTIFSUB|CARRAY|CASE|CLEARGIF|COA|COA_INT|CONSTANTS|CONTENT|CUR|EDITPANEL|EFFECT|EXT|FILE|FLUIDTEMPLATE|FORM|FRAME|FRAMESET|GIFBUILDER|GMENU|GMENU_FOLDOUT|GMENU_LAYERS|GP|HMENU|HRULER|HTML|IENV|IFSUB|IMAGE|IMGMENU|IMGMENUITEM|IMGTEXT|IMG_RESOURCE|INCLUDE_TYPOSCRIPT|JSMENU|JSMENUITEM|LLL|LOAD_REGISTER|NO|PAGE|RECORDS|RESTORE_REGISTER|TEMPLATE|TEXT|TMENU|TMENUITEM|TMENU_LAYERS|USER|USER_INT|_GIFBUILDER|global|globalString|globalVar)\\b/;\n\n\tPrism.languages.typoscript = {\n\t\t'comment': [\n\t\t\t{\n\t\t\t\t// multiline comments /* */\n\t\t\t\tpattern: /(^|[^\\\\])\\/\\*[\\s\\S]*?(?:\\*\\/|$)/,\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\t{\n\t\t\t\t// double-slash comments - ignored when backslashes or colon is found in front\n\t\t\t\t// also ignored whenever directly after an equal-sign, because it would probably be an url without protocol\n\t\t\t\tpattern: /(^|[^\\\\:= \\t]|(?:^|[^= \\t])[ \\t]+)\\/\\/.*/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true\n\t\t\t},\n\t\t\t{\n\t\t\t\t// hash comments - ignored when leading quote is found for hex colors in strings\n\t\t\t\tpattern: /(^|[^\"'])#.*/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true\n\t\t\t}\n\t\t],\n\t\t'function': [\n\t\t\t{\n\t\t\t\t// old include style\n\t\t\t\tpattern: /<INCLUDE_TYPOSCRIPT:\\s*source\\s*=\\s*(?:\"[^\"\\r\\n]*\"|'[^'\\r\\n]*')\\s*>/,\n\t\t\t\tinside: {\n\t\t\t\t\t'string': {\n\t\t\t\t\t\tpattern: /\"[^\"\\r\\n]*\"|'[^'\\r\\n]*'/,\n\t\t\t\t\t\tinside: {\n\t\t\t\t\t\t\t'keyword': keywords,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t'keyword': {\n\t\t\t\t\t\tpattern: /INCLUDE_TYPOSCRIPT/,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\t// new include style\n\t\t\t\tpattern: /@import\\s*(?:\"[^\"\\r\\n]*\"|'[^'\\r\\n]*')/,\n\t\t\t\tinside: {\n\t\t\t\t\t'string': /\"[^\"\\r\\n]*\"|'[^'\\r\\n]*'/,\n\t\t\t\t},\n\t\t\t}\n\t\t],\n\t\t'string': {\n\t\t\tpattern: /^([^=]*=[< ]?)(?:(?!\\]\\n).)*/,\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'function': /\\{\\$.*\\}/, // constants include\n\t\t\t\t'keyword': keywords,\n\t\t\t\t'number': /^\\d+$/,\n\t\t\t\t'punctuation': /[,|:]/,\n\t\t\t}\n\t\t},\n\t\t'keyword': keywords,\n\t\t'number': {\n\t\t\t// special highlighting for indexes of arrays in tags\n\t\t\tpattern: /\\b\\d+\\s*[.{=]/,\n\t\t\tinside: {\n\t\t\t\t'operator': /[.{=]/,\n\t\t\t}\n\t\t},\n\t\t'tag': {\n\t\t\tpattern: /\\.?[-\\w\\\\]+\\.?/,\n\t\t\tinside: {\n\t\t\t\t'punctuation': /\\./,\n\t\t\t}\n\t\t},\n\t\t'punctuation': /[{}[\\];(),.:|]/,\n\t\t'operator': /[<>]=?|[!=]=?=?|--?|\\+\\+?|&&?|\\|\\|?|[?*/~^%]/,\n\t};\n\n\tPrism.languages.tsconfig = Prism.languages.typoscript;\n\n}(Prism));\n/components/prism-kumir.min.js\u0006S!function(n){function o(n,o){return RegExp(n.replace(/<nonId>/g,\"\\\\s\\\\x00-\\\\x1f\\\\x22-\\\\x2f\\\\x3a-\\\\x3f\\\\x5b-\\\\x5e\\\\x60\\\\x7b-\\\\x7e\"),o)}n.languages.kumir={comment:{pattern:/\\|.*/},prolog:{pattern:/#.*/,greedy:!0},string:{pattern:/\"[^\\n\\r\"]*\"|'[^\\n\\r']*'/,greedy:!0},boolean:{pattern:o(\"(^|[<nonId>])(?:да|нет)(?=[<nonId>]|$)\"),lookbehind:!0},\"operator-word\":{pattern:o(\"(^|[<nonId>])(?:и|или|не)(?=[<nonId>]|$)\"),lookbehind:!0,alias:\"keyword\"},\"system-variable\":{pattern:o(\"(^|[<nonId>])знач(?=[<nonId>]|$)\"),lookbehind:!0,alias:\"keyword\"},type:[{pattern:o(\"(^|[<nonId>])(?:вещ|лит|лог|сим|цел)(?:\\\\x20*таб)?(?=[<nonId>]|$)\"),lookbehind:!0,alias:\"builtin\"},{pattern:o(\"(^|[<nonId>])(?:компл|сканкод|файл|цвет)(?=[<nonId>]|$)\"),lookbehind:!0,alias:\"important\"}],keyword:{pattern:o(\"(^|[<nonId>])(?:алг|арг(?:\\\\x20*рез)?|ввод|ВКЛЮЧИТЬ|вс[её]|выбор|вывод|выход|дано|для|до|дс|если|иначе|исп|использовать|кон(?:(?:\\\\x20+|_)исп)?|кц(?:(?:\\\\x20+|_)при)?|надо|нач|нс|нц|от|пауза|пока|при|раза?|рез|стоп|таб|то|утв|шаг)(?=[<nonId>]|$)\"),lookbehind:!0},name:{pattern:o(\"(^|[<nonId>])[^\\\\d<nonId>][^<nonId>]*(?:\\\\x20+[^<nonId>]+)*(?=[<nonId>]|$)\"),lookbehind:!0},number:{pattern:o(\"(^|[<nonId>])(?:\\\\B\\\\$[\\\\da-f]+\\\\b|(?:\\\\b\\\\d+(?:\\\\.\\\\d*)?|\\\\B\\\\.\\\\d+)(?:e[+-]?\\\\d+)?)(?=[<nonId>]|$)\",\"i\"),lookbehind:!0},punctuation:/:=|[(),:;\\[\\]]/,\"operator-char\":{pattern:/\\*\\*?|<[=>]?|>=?|[-+/=]/,alias:\"operator\"}},n.languages.kum=n.languages.kumir}(Prism);/components/prism-qml.min.js\u0005!function(e){for(var r=\"(?:[^\\\\\\\\()[\\\\]{}\\\"'/]|<string>|/(?![*/])|<comment>|\\\\(<expr>*\\\\)|\\\\[<expr>*\\\\]|\\\\{<expr>*\\\\}|\\\\\\\\[^])\".replace(/<string>/g,(function(){return\"\\\"(?:\\\\\\\\.|[^\\\\\\\\\\\"\\r\\n])*\\\"|'(?:\\\\\\\\.|[^\\\\\\\\'\\r\\n])*'\"})).replace(/<comment>/g,(function(){return\"//.*(?!.)|/\\\\*(?:[^*]|\\\\*(?!/))*\\\\*/\"})),t=0;t<2;t++)r=r.replace(/<expr>/g,(function(){return r}));r=r.replace(/<expr>/g,\"[^\\\\s\\\\S]\"),e.languages.qml={comment:{pattern:/\\/\\/.*|\\/\\*[\\s\\S]*?\\*\\//,greedy:!0},\"javascript-function\":{pattern:RegExp(\"((?:^|;)[ \\t]*)function\\\\s+(?!\\\\s)[_$a-zA-Z\\\\xA0-\\\\uFFFF](?:(?!\\\\s)[$\\\\w\\\\xA0-\\\\uFFFF])*\\\\s*\\\\(<js>*\\\\)\\\\s*\\\\{<js>*\\\\}\".replace(/<js>/g,(function(){return r})),\"m\"),lookbehind:!0,greedy:!0,alias:\"language-javascript\",inside:e.languages.javascript},\"class-name\":{pattern:/((?:^|[:;])[ \\t]*)(?!\\d)\\w+(?=[ \\t]*\\{|[ \\t]+on\\b)/m,lookbehind:!0},property:[{pattern:/((?:^|[;{])[ \\t]*)(?!\\d)\\w+(?:\\.\\w+)*(?=[ \\t]*:)/m,lookbehind:!0},{pattern:/((?:^|[;{])[ \\t]*)property[ \\t]+(?!\\d)\\w+(?:\\.\\w+)*[ \\t]+(?!\\d)\\w+(?:\\.\\w+)*(?=[ \\t]*:)/m,lookbehind:!0,inside:{keyword:/^property/,property:/\\w+(?:\\.\\w+)*/}}],\"javascript-expression\":{pattern:RegExp(\"(:[ \\t]*)(?![\\\\s;}[])(?:(?!$|[;}])<js>)+\".replace(/<js>/g,(function(){return r})),\"m\"),lookbehind:!0,greedy:!0,alias:\"language-javascript\",inside:e.languages.javascript},string:{pattern:/\"(?:\\\\.|[^\\\\\"\\r\\n])*\"/,greedy:!0},keyword:/\\b(?:as|import|on)\\b/,punctuation:/[{}[\\]:;,]/}}(Prism);/components/prism-stylus.js\u0013w(function (Prism) {\n\tvar unit = {\n\t\tpattern: /(\\b\\d+)(?:%|[a-z]+)/,\n\t\tlookbehind: true\n\t};\n\t// 123 -123 .123 -.123 12.3 -12.3\n\tvar number = {\n\t\tpattern: /(^|[^\\w.-])-?(?:\\d+(?:\\.\\d+)?|\\.\\d+)/,\n\t\tlookbehind: true\n\t};\n\n\tvar inside = {\n\t\t'comment': {\n\t\t\tpattern: /(^|[^\\\\])(?:\\/\\*[\\s\\S]*?\\*\\/|\\/\\/.*)/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'url': {\n\t\t\tpattern: /\\burl\\(([\"']?).*?\\1\\)/i,\n\t\t\tgreedy: true\n\t\t},\n\t\t'string': {\n\t\t\tpattern: /(\"|')(?:(?!\\1)[^\\\\\\r\\n]|\\\\(?:\\r\\n|[\\s\\S]))*\\1/,\n\t\t\tgreedy: true\n\t\t},\n\t\t'interpolation': null, // See below\n\t\t'func': null, // See below\n\t\t'important': /\\B!(?:important|optional)\\b/i,\n\t\t'keyword': {\n\t\t\tpattern: /(^|\\s+)(?:(?:else|for|if|return|unless)(?=\\s|$)|@[\\w-]+)/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'hexcode': /#[\\da-f]{3,6}/i,\n\t\t'color': [\n\t\t\t/\\b(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)\\b/i,\n\t\t\t{\n\t\t\t\tpattern: /\\b(?:hsl|rgb)\\(\\s*\\d{1,3}\\s*,\\s*\\d{1,3}%?\\s*,\\s*\\d{1,3}%?\\s*\\)\\B|\\b(?:hsl|rgb)a\\(\\s*\\d{1,3}\\s*,\\s*\\d{1,3}%?\\s*,\\s*\\d{1,3}%?\\s*,\\s*(?:0|0?\\.\\d+|1)\\s*\\)\\B/i,\n\t\t\t\tinside: {\n\t\t\t\t\t'unit': unit,\n\t\t\t\t\t'number': number,\n\t\t\t\t\t'function': /[\\w-]+(?=\\()/,\n\t\t\t\t\t'punctuation': /[(),]/\n\t\t\t\t}\n\t\t\t}\n\t\t],\n\t\t'entity': /\\\\[\\da-f]{1,8}/i,\n\t\t'unit': unit,\n\t\t'boolean': /\\b(?:false|true)\\b/,\n\t\t'operator': [\n\t\t\t// We want non-word chars around \"-\" because it is\n\t\t\t// accepted in property names.\n\t\t\t/~|[+!\\/%<>?=]=?|[-:]=|\\*[*=]?|\\.{2,3}|&&|\\|\\||\\B-\\B|\\b(?:and|in|is(?: a| defined| not|nt)?|not|or)\\b/\n\t\t],\n\t\t'number': number,\n\t\t'punctuation': /[{}()\\[\\];:,]/\n\t};\n\n\tinside['interpolation'] = {\n\t\tpattern: /\\{[^\\r\\n}:]+\\}/,\n\t\talias: 'variable',\n\t\tinside: {\n\t\t\t'delimiter': {\n\t\t\t\tpattern: /^\\{|\\}$/,\n\t\t\t\talias: 'punctuation'\n\t\t\t},\n\t\t\trest: inside\n\t\t}\n\t};\n\tinside['func'] = {\n\t\tpattern: /[\\w-]+\\([^)]*\\).*/,\n\t\tinside: {\n\t\t\t'function': /^[^(]+/,\n\t\t\trest: inside\n\t\t}\n\t};\n\n\tPrism.languages.stylus = {\n\t\t'atrule-declaration': {\n\t\t\tpattern: /(^[ \\t]*)@.+/m,\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'atrule': /^@[\\w-]+/,\n\t\t\t\trest: inside\n\t\t\t}\n\t\t},\n\t\t'variable-declaration': {\n\t\t\tpattern: /(^[ \\t]*)[\\w$-]+\\s*.?=[ \\t]*(?:\\{[^{}]*\\}|\\S.*|$)/m,\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'variable': /^\\S+/,\n\t\t\t\trest: inside\n\t\t\t}\n\t\t},\n\n\t\t'statement': {\n\t\t\tpattern: /(^[ \\t]*)(?:else|for|if|return|unless)[ \\t].+/m,\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'keyword': /^\\S+/,\n\t\t\t\trest: inside\n\t\t\t}\n\t\t},\n\n\t\t// A property/value pair cannot end with a comma or a brace\n\t\t// It cannot have indented content unless it ended with a semicolon\n\t\t'property-declaration': {\n\t\t\tpattern: /((?:^|\\{)([ \\t]*))(?:[\\w-]|\\{[^}\\r\\n]+\\})+(?:\\s*:\\s*|[ \\t]+)(?!\\s)[^{\\r\\n]*(?:;|[^{\\r\\n,]$(?!(?:\\r?\\n|\\r)(?:\\{|\\2[ \\t])))/m,\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'property': {\n\t\t\t\t\tpattern: /^[^\\s:]+/,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'interpolation': inside.interpolation\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\trest: inside\n\t\t\t}\n\t\t},\n\n\n\t\t// A selector can contain parentheses only as part of a pseudo-element\n\t\t// It can span multiple lines.\n\t\t// It must end with a comma or an accolade or have indented content.\n\t\t'selector': {\n\t\t\tpattern: /(^[ \\t]*)(?:(?=\\S)(?:[^{}\\r\\n:()]|::?[\\w-]+(?:\\([^)\\r\\n]*\\)|(?![\\w-]))|\\{[^}\\r\\n]+\\})+)(?:(?:\\r?\\n|\\r)(?:\\1(?:(?=\\S)(?:[^{}\\r\\n:()]|::?[\\w-]+(?:\\([^)\\r\\n]*\\)|(?![\\w-]))|\\{[^}\\r\\n]+\\})+)))*(?:,$|\\{|(?=(?:\\r?\\n|\\r)(?:\\{|\\1[ \\t])))/m,\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'interpolation': inside.interpolation,\n\t\t\t\t'comment': inside.comment,\n\t\t\t\t'punctuation': /[{},]/\n\t\t\t}\n\t\t},\n\n\t\t'func': inside.func,\n\t\t'string': inside.string,\n\t\t'comment': {\n\t\t\tpattern: /(^|[^\\\\])(?:\\/\\*[\\s\\S]*?\\*\\/|\\/\\/.*)/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true\n\t\t},\n\t\t'interpolation': inside.interpolation,\n\t\t'punctuation': /[{}()\\[\\];:.]/\n\t};\n}(Prism));\n/components/prism-nevod.js\n\u001ePrism.languages.nevod = {\n\t'comment': /\\/\\/.*|(?:\\/\\*[\\s\\S]*?(?:\\*\\/|$))/,\n\t'string': {\n\t\tpattern: /(?:\"(?:\"\"|[^\"])*\"(?!\")|'(?:''|[^'])*'(?!'))!?\\*?/,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'string-attrs': /!$|!\\*$|\\*$/,\n\t\t},\n\t},\n\t'namespace': {\n\t\tpattern: /(@namespace\\s+)[a-zA-Z0-9\\-.]+(?=\\s*\\{)/,\n\t\tlookbehind: true,\n\t},\n\t'pattern': {\n\t\tpattern: /(@pattern\\s+)?#?[a-zA-Z0-9\\-.]+(?:\\s*\\(\\s*(?:~\\s*)?[a-zA-Z0-9\\-.]+\\s*(?:,\\s*(?:~\\s*)?[a-zA-Z0-9\\-.]*)*\\))?(?=\\s*=)/,\n\t\tlookbehind: true,\n\t\tinside: {\n\t\t\t'pattern-name': {\n\t\t\t\tpattern: /^#?[a-zA-Z0-9\\-.]+/,\n\t\t\t\talias: 'class-name',\n\t\t\t},\n\t\t\t'fields': {\n\t\t\t\tpattern: /\\(.*\\)/,\n\t\t\t\tinside: {\n\t\t\t\t\t'field-name': {\n\t\t\t\t\t\tpattern: /[a-zA-Z0-9\\-.]+/,\n\t\t\t\t\t\talias: 'variable',\n\t\t\t\t\t},\n\t\t\t\t\t'punctuation': /[,()]/,\n\t\t\t\t\t'operator': {\n\t\t\t\t\t\tpattern: /~/,\n\t\t\t\t\t\talias: 'field-hidden-mark',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t},\n\t'search': {\n\t\tpattern: /(@search\\s+|#)[a-zA-Z0-9\\-.]+(?:\\.\\*)?(?=\\s*;)/,\n\t\talias: 'function',\n\t\tlookbehind: true,\n\t},\n\t'keyword': /@(?:having|inside|namespace|outside|pattern|require|search|where)\\b/,\n\t'standard-pattern': {\n\t\tpattern: /\\b(?:Alpha|AlphaNum|Any|Blank|End|LineBreak|Num|NumAlpha|Punct|Space|Start|Symbol|Word|WordBreak)\\b(?:\\([a-zA-Z0-9\\-.,\\s+]*\\))?/,\n\t\tinside: {\n\t\t\t'standard-pattern-name': {\n\t\t\t\tpattern: /^[a-zA-Z0-9\\-.]+/,\n\t\t\t\talias: 'builtin',\n\t\t\t},\n\t\t\t'quantifier': {\n\t\t\t\tpattern: /\\b\\d+(?:\\s*\\+|\\s*-\\s*\\d+)?(?!\\w)/,\n\t\t\t\talias: 'number',\n\t\t\t},\n\t\t\t'standard-pattern-attr': {\n\t\t\t\tpattern: /[a-zA-Z0-9\\-.]+/,\n\t\t\t\talias: 'builtin',\n\t\t\t},\n\t\t\t'punctuation': /[,()]/,\n\t\t},\n\t},\n\t'quantifier': {\n\t\tpattern: /\\b\\d+(?:\\s*\\+|\\s*-\\s*\\d+)?(?!\\w)/,\n\t\talias: 'number',\n\t},\n\t'operator': [\n\t\t{\n\t\t\tpattern: /=/,\n\t\t\talias: 'pattern-def',\n\t\t},\n\t\t{\n\t\t\tpattern: /&/,\n\t\t\talias: 'conjunction',\n\t\t},\n\t\t{\n\t\t\tpattern: /~/,\n\t\t\talias: 'exception',\n\t\t},\n\t\t{\n\t\t\tpattern: /\\?/,\n\t\t\talias: 'optionality',\n\t\t},\n\t\t{\n\t\t\tpattern: /[[\\]]/,\n\t\t\talias: 'repetition',\n\t\t},\n\t\t{\n\t\t\tpattern: /[{}]/,\n\t\t\talias: 'variation',\n\t\t},\n\t\t{\n\t\t\tpattern: /[+_]/,\n\t\t\talias: 'sequence',\n\t\t},\n\t\t{\n\t\t\tpattern: /\\.{2,3}/,\n\t\t\talias: 'span',\n\t\t},\n\t],\n\t'field-capture': [\n\t\t{\n\t\t\tpattern: /([a-zA-Z0-9\\-.]+\\s*\\()\\s*[a-zA-Z0-9\\-.]+\\s*:\\s*[a-zA-Z0-9\\-.]+(?:\\s*,\\s*[a-zA-Z0-9\\-.]+\\s*:\\s*[a-zA-Z0-9\\-.]+)*(?=\\s*\\))/,\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'field-name': {\n\t\t\t\t\tpattern: /[a-zA-Z0-9\\-.]+/,\n\t\t\t\t\talias: 'variable',\n\t\t\t\t},\n\t\t\t\t'colon': /:/,\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tpattern: /[a-zA-Z0-9\\-.]+\\s*:/,\n\t\t\tinside: {\n\t\t\t\t'field-name': {\n\t\t\t\t\tpattern: /[a-zA-Z0-9\\-.]+/,\n\t\t\t\t\talias: 'variable',\n\t\t\t\t},\n\t\t\t\t'colon': /:/,\n\t\t\t},\n\t\t},\n\t],\n\t'punctuation': /[:;,()]/,\n\t'name': /[a-zA-Z0-9\\-.]+/\n};\n/components/prism-odin.min.js\u0005!function(e){var t=/\\\\(?:[\"'\\\\abefnrtv]|0[0-7]{2}|U[\\dA-Fa-f]{6}|u[\\dA-Fa-f]{4}|x[\\dA-Fa-f]{2})/;e.languages.odin={comment:[{pattern:/\\/\\*(?:[^/*]|\\/(?!\\*)|\\*(?!\\/)|\\/\\*(?:\\*(?!\\/)|[^*])*(?:\\*\\/|$))*(?:\\*\\/|$)/,greedy:!0},{pattern:/#![^\\n\\r]*/,greedy:!0},{pattern:/\\/\\/[^\\n\\r]*/,greedy:!0}],char:{pattern:/'(?:\\\\(?:.|[0Uux][0-9A-Fa-f]{1,6})|[^\\n\\r'\\\\])'/,greedy:!0,inside:{symbol:t}},string:[{pattern:/`[^`]*`/,greedy:!0},{pattern:/\"(?:\\\\.|[^\\n\\r\"\\\\])*\"/,greedy:!0,inside:{symbol:t}}],directive:{pattern:/#\\w+/,alias:\"property\"},number:/\\b0(?:b[01_]+|d[\\d_]+|h_*(?:(?:(?:[\\dA-Fa-f]_*){8}){1,2}|(?:[\\dA-Fa-f]_*){4})|o[0-7_]+|x[\\dA-F_a-f]+|z[\\dAB_ab]+)\\b|(?:\\b\\d+(?:\\.(?!\\.)\\d*)?|\\B\\.\\d+)(?:[Ee][+-]?\\d*)?[ijk]?(?!\\w)/,discard:{pattern:/\\b_\\b/,alias:\"keyword\"},\"procedure-definition\":{pattern:/\\b\\w+(?=[ \\t]*(?::\\s*){2}proc\\b)/,alias:\"function\"},keyword:/\\b(?:asm|auto_cast|bit_set|break|case|cast|context|continue|defer|distinct|do|dynamic|else|enum|fallthrough|for|foreign|if|import|in|map|matrix|not_in|or_else|or_return|package|proc|return|struct|switch|transmute|typeid|union|using|when|where)\\b/,\"procedure-name\":{pattern:/\\b\\w+(?=[ \\t]*\\()/,alias:\"function\"},boolean:/\\b(?:false|nil|true)\\b/,\"constant-parameter-sign\":{pattern:/\\$/,alias:\"important\"},undefined:{pattern:/---/,alias:\"operator\"},arrow:{pattern:/->/,alias:\"punctuation\"},operator:/\\+\\+|--|\\.\\.[<=]?|(?:&~|[-!*+/=~]|[%&<>|]{1,2})=?|[?^]/,punctuation:/[(),.:;@\\[\\]{}]/}}(Prism);+/plugins/line-numbers/prism-line-numbers.js\u0019(function () {\n\n\tif (typeof Prism === 'undefined' || typeof document === 'undefined') {\n\t\treturn;\n\t}\n\n\t/**\n\t * Plugin name which is used as a class name for <pre> which is activating the plugin\n\t *\n\t * @type {string}\n\t */\n\tvar PLUGIN_NAME = 'line-numbers';\n\n\t/**\n\t * Regular expression used for determining line breaks\n\t *\n\t * @type {RegExp}\n\t */\n\tvar NEW_LINE_EXP = /\\n(?!$)/g;\n\n\n\t/**\n\t * Global exports\n\t */\n\tvar config = Prism.plugins.lineNumbers = {\n\t\t/**\n\t\t * Get node for provided line number\n\t\t *\n\t\t * @param {Element} element pre element\n\t\t * @param {number} number line number\n\t\t * @returns {Element|undefined}\n\t\t */\n\t\tgetLine: function (element, number) {\n\t\t\tif (element.tagName !== 'PRE' || !element.classList.contains(PLUGIN_NAME)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar lineNumberRows = element.querySelector('.line-numbers-rows');\n\t\t\tif (!lineNumberRows) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar lineNumberStart = parseInt(element.getAttribute('data-start'), 10) || 1;\n\t\t\tvar lineNumberEnd = lineNumberStart + (lineNumberRows.children.length - 1);\n\n\t\t\tif (number < lineNumberStart) {\n\t\t\t\tnumber = lineNumberStart;\n\t\t\t}\n\t\t\tif (number > lineNumberEnd) {\n\t\t\t\tnumber = lineNumberEnd;\n\t\t\t}\n\n\t\t\tvar lineIndex = number - lineNumberStart;\n\n\t\t\treturn lineNumberRows.children[lineIndex];\n\t\t},\n\n\t\t/**\n\t\t * Resizes the line numbers of the given element.\n\t\t *\n\t\t * This function will not add line numbers. It will only resize existing ones.\n\t\t *\n\t\t * @param {HTMLElement} element A `<pre>` element with line numbers.\n\t\t * @returns {void}\n\t\t */\n\t\tresize: function (element) {\n\t\t\tresizeElements([element]);\n\t\t},\n\n\t\t/**\n\t\t * Whether the plugin can assume that the units font sizes and margins are not depended on the size of\n\t\t * the current viewport.\n\t\t *\n\t\t * Setting this to `true` will allow the plugin to do certain optimizations for better performance.\n\t\t *\n\t\t * Set this to `false` if you use any of the following CSS units: `vh`, `vw`, `vmin`, `vmax`.\n\t\t *\n\t\t * @type {boolean}\n\t\t */\n\t\tassumeViewportIndependence: true\n\t};\n\n\t/**\n\t * Resizes the given elements.\n\t *\n\t * @param {HTMLElement[]} elements\n\t */\n\tfunction resizeElements(elements) {\n\t\telements = elements.filter(function (e) {\n\t\t\tvar codeStyles = getStyles(e);\n\t\t\tvar whiteSpace = codeStyles['white-space'];\n\t\t\treturn whiteSpace === 'pre-wrap' || whiteSpace === 'pre-line';\n\t\t});\n\n\t\tif (elements.length == 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar infos = elements.map(function (element) {\n\t\t\tvar codeElement = element.querySelector('code');\n\t\t\tvar lineNumbersWrapper = element.querySelector('.line-numbers-rows');\n\t\t\tif (!codeElement || !lineNumbersWrapper) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\t/** @type {HTMLElement} */\n\t\t\tvar lineNumberSizer = element.querySelector('.line-numbers-sizer');\n\t\t\tvar codeLines = codeElement.textContent.split(NEW_LINE_EXP);\n\n\t\t\tif (!lineNumberSizer) {\n\t\t\t\tlineNumberSizer = document.createElement('span');\n\t\t\t\tlineNumberSizer.className = 'line-numbers-sizer';\n\n\t\t\t\tcodeElement.appendChild(lineNumberSizer);\n\t\t\t}\n\n\t\t\tlineNumberSizer.innerHTML = '0';\n\t\t\tlineNumberSizer.style.display = 'block';\n\n\t\t\tvar oneLinerHeight = lineNumberSizer.getBoundingClientRect().height;\n\t\t\tlineNumberSizer.innerHTML = '';\n\n\t\t\treturn {\n\t\t\t\telement: element,\n\t\t\t\tlines: codeLines,\n\t\t\t\tlineHeights: [],\n\t\t\t\toneLinerHeight: oneLinerHeight,\n\t\t\t\tsizer: lineNumberSizer,\n\t\t\t};\n\t\t}).filter(Boolean);\n\n\t\tinfos.forEach(function (info) {\n\t\t\tvar lineNumberSizer = info.sizer;\n\t\t\tvar lines = info.lines;\n\t\t\tvar lineHeights = info.lineHeights;\n\t\t\tvar oneLinerHeight = info.oneLinerHeight;\n\n\t\t\tlineHeights[lines.length - 1] = undefined;\n\t\t\tlines.forEach(function (line, index) {\n\t\t\t\tif (line && line.length > 1) {\n\t\t\t\t\tvar e = lineNumberSizer.appendChild(document.createElement('span'));\n\t\t\t\t\te.style.display = 'block';\n\t\t\t\t\te.textContent = line;\n\t\t\t\t} else {\n\t\t\t\t\tlineHeights[index] = oneLinerHeight;\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\tinfos.forEach(function (info) {\n\t\t\tvar lineNumberSizer = info.sizer;\n\t\t\tvar lineHeights = info.lineHeights;\n\n\t\t\tvar childIndex = 0;\n\t\t\tfor (var i = 0; i < lineHeights.length; i++) {\n\t\t\t\tif (lineHeights[i] === undefined) {\n\t\t\t\t\tlineHeights[i] = lineNumberSizer.children[childIndex++].getBoundingClientRect().height;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tinfos.forEach(function (info) {\n\t\t\tvar lineNumberSizer = info.sizer;\n\t\t\tvar wrapper = info.element.querySelector('.line-numbers-rows');\n\n\t\t\tlineNumberSizer.style.display = 'none';\n\t\t\tlineNumberSizer.innerHTML = '';\n\n\t\t\tinfo.lineHeights.forEach(function (height, lineNumber) {\n\t\t\t\twrapper.children[lineNumber].style.height = height + 'px';\n\t\t\t});\n\t\t});\n\t}\n\n\t/**\n\t * Returns style declarations for the element\n\t *\n\t * @param {Element} element\n\t */\n\tfunction getStyles(element) {\n\t\tif (!element) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn window.getComputedStyle ? getComputedStyle(element) : (element.currentStyle || null);\n\t}\n\n\tvar lastWidth = undefined;\n\twindow.addEventListener('resize', function () {\n\t\tif (config.assumeViewportIndependence && lastWidth === window.innerWidth) {\n\t\t\treturn;\n\t\t}\n\t\tlastWidth = window.innerWidth;\n\n\t\tresizeElements(Array.prototype.slice.call(document.querySelectorAll('pre.' + PLUGIN_NAME)));\n\t});\n\n\tPrism.hooks.add('complete', function (env) {\n\t\tif (!env.code) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar code = /** @type {Element} */ (env.element);\n\t\tvar pre = /** @type {HTMLElement} */ (code.parentNode);\n\n\t\t// works only for <code> wrapped inside <pre> (not inline)\n\t\tif (!pre || !/pre/i.test(pre.nodeName)) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Abort if line numbers already exists\n\t\tif (code.querySelector('.line-numbers-rows')) {\n\t\t\treturn;\n\t\t}\n\n\t\t// only add line numbers if <code> or one of its ancestors has the `line-numbers` class\n\t\tif (!Prism.util.isActive(code, PLUGIN_NAME)) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remove the class 'line-numbers' from the <code>\n\t\tcode.classList.remove(PLUGIN_NAME);\n\t\t// Add the class 'line-numbers' to the <pre>\n\t\tpre.classList.add(PLUGIN_NAME);\n\n\t\tvar match = env.code.match(NEW_LINE_EXP);\n\t\tvar linesNum = match ? match.length + 1 : 1;\n\t\tvar lineNumbersWrapper;\n\n\t\tvar lines = new Array(linesNum + 1).join('<span></span>');\n\n\t\tlineNumbersWrapper = document.createElement('span');\n\t\tlineNumbersWrapper.setAttribute('aria-hidden', 'true');\n\t\tlineNumbersWrapper.className = 'line-numbers-rows';\n\t\tlineNumbersWrapper.innerHTML = lines;\n\n\t\tif (pre.hasAttribute('data-start')) {\n\t\t\tpre.style.counterReset = 'linenumber ' + (parseInt(pre.getAttribute('data-start'), 10) - 1);\n\t\t}\n\n\t\tenv.element.appendChild(lineNumbersWrapper);\n\n\t\tresizeElements([pre]);\n\n\t\tPrism.hooks.run('line-numbers', env);\n\t});\n\n\tPrism.hooks.add('line-numbers', function (env) {\n\t\tenv.plugins = env.plugins || {};\n\t\tenv.plugins.lineNumbers = true;\n\t});\n\n}());\n/components/prism-cshtml.js\u0019// Docs:\n// https://docs.microsoft.com/en-us/aspnet/core/razor-pages/?view=aspnetcore-5.0&tabs=visual-studio\n// https://docs.microsoft.com/en-us/aspnet/core/mvc/views/razor?view=aspnetcore-5.0\n\n(function (Prism) {\n\n\tvar commentLike = /\\/(?![/*])|\\/\\/.*[\\r\\n]|\\/\\*[^*]*(?:\\*(?!\\/)[^*]*)*\\*\\//.source;\n\tvar stringLike =\n\t\t/@(?!\")|\"(?:[^\\r\\n\\\\\"]|\\\\.)*\"|@\"(?:[^\\\\\"]|\"\"|\\\\[\\s\\S])*\"(?!\")/.source +\n\t\t'|' +\n\t\t/'(?:(?:[^\\r\\n'\\\\]|\\\\.|\\\\[Uux][\\da-fA-F]{1,8})'|(?=[^\\\\](?!')))/.source;\n\n\t/**\n\t * Creates a nested pattern where all occurrences of the string `<<self>>` are replaced with the pattern itself.\n\t *\n\t * @param {string} pattern\n\t * @param {number} depthLog2\n\t * @returns {string}\n\t */\n\tfunction nested(pattern, depthLog2) {\n\t\tfor (var i = 0; i < depthLog2; i++) {\n\t\t\tpattern = pattern.replace(/<self>/g, function () { return '(?:' + pattern + ')'; });\n\t\t}\n\t\treturn pattern\n\t\t\t.replace(/<self>/g, '[^\\\\s\\\\S]')\n\t\t\t.replace(/<str>/g, '(?:' + stringLike + ')')\n\t\t\t.replace(/<comment>/g, '(?:' + commentLike + ')');\n\t}\n\n\tvar round = nested(/\\((?:[^()'\"@/]|<str>|<comment>|<self>)*\\)/.source, 2);\n\tvar square = nested(/\\[(?:[^\\[\\]'\"@/]|<str>|<comment>|<self>)*\\]/.source, 1);\n\tvar curly = nested(/\\{(?:[^{}'\"@/]|<str>|<comment>|<self>)*\\}/.source, 2);\n\tvar angle = nested(/<(?:[^<>'\"@/]|<comment>|<self>)*>/.source, 1);\n\n\tvar inlineCs = /@/.source +\n\t\t/(?:await\\b\\s*)?/.source +\n\t\t'(?:' + /(?!await\\b)\\w+\\b/.source + '|' + round + ')' +\n\t\t'(?:' + /[?!]?\\.\\w+\\b/.source + '|' + '(?:' + angle + ')?' + round + '|' + square + ')*' +\n\t\t/(?![?!\\.(\\[]|<(?!\\/))/.source;\n\n\t// Note about the above bracket patterns:\n\t// They all ignore HTML expressions that might be in the C# code. This is a problem because HTML (like strings and\n\t// comments) is parsed differently. This is a huge problem because HTML might contain brackets and quotes which\n\t// messes up the bracket and string counting implemented by the above patterns.\n\t//\n\t// This problem is not fixable because 1) HTML expression are highly context sensitive and very difficult to detect\n\t// and 2) they require one capturing group at every nested level. See the `tagRegion` pattern to admire the\n\t// complexity of an HTML expression.\n\t//\n\t// To somewhat alleviate the problem a bit, the patterns for characters (e.g. 'a') is very permissive, it also\n\t// allows invalid characters to support HTML expressions like this: <p>That's it!</p>.\n\n\tvar tagAttrInlineCs = /@(?![\\w()])/.source + '|' + inlineCs;\n\tvar tagAttrValue = '(?:' +\n\t\t/\"[^\"@]*\"|'[^'@]*'|[^\\s'\"@>=]+(?=[\\s>])/.source +\n\t\t'|' +\n\t\t'[\"\\'][^\"\\'@]*(?:(?:' + tagAttrInlineCs + ')[^\"\\'@]*)+[\"\\']' +\n\t\t')';\n\n\tvar tagAttrs = /(?:\\s(?:\\s*[^\\s>\\/=]+(?:\\s*=\\s*<tagAttrValue>|(?=[\\s/>])))+)?/.source.replace(/<tagAttrValue>/, tagAttrValue);\n\tvar tagContent = /(?!\\d)[^\\s>\\/=$<%]+/.source + tagAttrs + /\\s*\\/?>/.source;\n\tvar tagRegion =\n\t\t/\\B@?/.source +\n\t\t'(?:' +\n\t\t/<([a-zA-Z][\\w:]*)/.source + tagAttrs + /\\s*>/.source +\n\t\t'(?:' +\n\t\t(\n\t\t\t/[^<]/.source +\n\t\t\t'|' +\n\t\t\t// all tags that are not the start tag\n\t\t\t// eslint-disable-next-line regexp/strict\n\t\t\t/<\\/?(?!\\1\\b)/.source + tagContent +\n\t\t\t'|' +\n\t\t\t// nested start tag\n\t\t\tnested(\n\t\t\t\t// eslint-disable-next-line regexp/strict\n\t\t\t\t/<\\1/.source + tagAttrs + /\\s*>/.source +\n\t\t\t\t'(?:' +\n\t\t\t\t(\n\t\t\t\t\t/[^<]/.source +\n\t\t\t\t\t'|' +\n\t\t\t\t\t// all tags that are not the start tag\n\t\t\t\t\t// eslint-disable-next-line regexp/strict\n\t\t\t\t\t/<\\/?(?!\\1\\b)/.source + tagContent +\n\t\t\t\t\t'|' +\n\t\t\t\t\t'<self>'\n\t\t\t\t) +\n\t\t\t\t')*' +\n\t\t\t\t// eslint-disable-next-line regexp/strict\n\t\t\t\t/<\\/\\1\\s*>/.source,\n\t\t\t\t2\n\t\t\t)\n\t\t) +\n\t\t')*' +\n\t\t// eslint-disable-next-line regexp/strict\n\t\t/<\\/\\1\\s*>/.source +\n\t\t'|' +\n\t\t/</.source + tagContent +\n\t\t')';\n\n\t// Now for the actual language definition(s):\n\t//\n\t// Razor as a language has 2 parts:\n\t//  1) CSHTML: A markup-like language that has been extended with inline C# code expressions and blocks.\n\t//  2) C#+HTML: A variant of C# that can contain CSHTML tags as expressions.\n\t//\n\t// In the below code, both CSHTML and C#+HTML will be create as separate language definitions that reference each\n\t// other. However, only CSHTML will be exported via `Prism.languages`.\n\n\tPrism.languages.cshtml = Prism.languages.extend('markup', {});\n\n\tvar csharpWithHtml = Prism.languages.insertBefore('csharp', 'string', {\n\t\t'html': {\n\t\t\tpattern: RegExp(tagRegion),\n\t\t\tgreedy: true,\n\t\t\tinside: Prism.languages.cshtml\n\t\t},\n\t}, { csharp: Prism.languages.extend('csharp', {}) });\n\n\tvar cs = {\n\t\tpattern: /\\S[\\s\\S]*/,\n\t\talias: 'language-csharp',\n\t\tinside: csharpWithHtml\n\t};\n\n\tvar inlineValue = {\n\t\tpattern: RegExp(/(^|[^@])/.source + inlineCs),\n\t\tlookbehind: true,\n\t\tgreedy: true,\n\t\talias: 'variable',\n\t\tinside: {\n\t\t\t'keyword': /^@/,\n\t\t\t'csharp': cs\n\t\t}\n\t};\n\n\tPrism.languages.cshtml.tag.pattern = RegExp(/<\\/?/.source + tagContent);\n\tPrism.languages.cshtml.tag.inside['attr-value'].pattern = RegExp(/=\\s*/.source + tagAttrValue);\n\tPrism.languages.insertBefore('inside', 'punctuation', { 'value': inlineValue }, Prism.languages.cshtml.tag.inside['attr-value']);\n\n\tPrism.languages.insertBefore('cshtml', 'prolog', {\n\t\t'razor-comment': {\n\t\t\tpattern: /@\\*[\\s\\S]*?\\*@/,\n\t\t\tgreedy: true,\n\t\t\talias: 'comment'\n\t\t},\n\n\t\t'block': {\n\t\t\tpattern: RegExp(\n\t\t\t\t/(^|[^@])@/.source +\n\t\t\t\t'(?:' +\n\t\t\t\t[\n\t\t\t\t\t// @{ ... }\n\t\t\t\t\tcurly,\n\t\t\t\t\t// @code{ ... }\n\t\t\t\t\t/(?:code|functions)\\s*/.source + curly,\n\t\t\t\t\t// @for (...) { ... }\n\t\t\t\t\t/(?:for|foreach|lock|switch|using|while)\\s*/.source + round + /\\s*/.source + curly,\n\t\t\t\t\t// @do { ... } while (...);\n\t\t\t\t\t/do\\s*/.source + curly + /\\s*while\\s*/.source + round + /(?:\\s*;)?/.source,\n\t\t\t\t\t// @try { ... } catch (...) { ... } finally { ... }\n\t\t\t\t\t/try\\s*/.source + curly + /\\s*catch\\s*/.source + round + /\\s*/.source + curly + /\\s*finally\\s*/.source + curly,\n\t\t\t\t\t// @if (...) {...} else if (...) {...} else {...}\n\t\t\t\t\t/if\\s*/.source + round + /\\s*/.source + curly + '(?:' + /\\s*else/.source + '(?:' + /\\s+if\\s*/.source + round + ')?' + /\\s*/.source + curly + ')*',\n\t\t\t\t\t// @helper Ident(params) { ... }\n\t\t\t\t\t/helper\\s+\\w+\\s*/.source + round + /\\s*/.source + curly,\n\t\t\t\t].join('|') +\n\t\t\t\t')'\n\t\t\t),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'keyword': /^@\\w*/,\n\t\t\t\t'csharp': cs\n\t\t\t}\n\t\t},\n\n\t\t'directive': {\n\t\t\tpattern: /^([ \\t]*)@(?:addTagHelper|attribute|implements|inherits|inject|layout|model|namespace|page|preservewhitespace|removeTagHelper|section|tagHelperPrefix|using)(?=\\s).*/m,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'keyword': /^@\\w+/,\n\t\t\t\t'csharp': cs\n\t\t\t}\n\t\t},\n\n\t\t'value': inlineValue,\n\n\t\t'delegate-operator': {\n\t\t\tpattern: /(^|[^@])@(?=<)/,\n\t\t\tlookbehind: true,\n\t\t\talias: 'operator'\n\t\t}\n\t});\n\n\tPrism.languages.razor = Prism.languages.cshtml;\n\n}(Prism));\n/components/prism-jsonp.min.jsPrism.languages.jsonp=Prism.languages.extend(\"json\",{punctuation:/[{}[\\]();,.]/}),Prism.languages.insertBefore(\"jsonp\",\"punctuation\",{function:/(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*\\()/});/components/prism-metafont.js\u0013Prism.languages.metafont = {\n\t// Syntax of METAFONT with the added (public) elements of PlainMETAFONT. Except for internal quantities they are expected to be rarely redefined. Freely inspired by the syntax of Christophe Grandsire for the Crimson Editor.\n\t'comment': {\n\t\tpattern: /%.*/,\n\t\tgreedy: true\n\t},\n\t'string': {\n\t\tpattern: /\"[^\\r\\n\"]*\"/,\n\t\tgreedy: true\n\t},\n\t'number': /\\d*\\.?\\d+/,\n\t'boolean': /\\b(?:false|true)\\b/,\n\t'punctuation': [\n\t\t/[,;()]/,\n\t\t{\n\t\t\tpattern: /(^|[^{}])(?:\\{|\\})(?![{}])/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^[])\\[(?!\\[)/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^\\]])\\](?!\\])/,\n\t\t\tlookbehind: true\n\t\t}\n\t],\n\t'constant': [\n\t\t{\n\t\t\tpattern: /(^|[^!?])\\?\\?\\?(?![!?])/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^/*\\\\])(?:\\\\|\\\\\\\\)(?![/*\\\\])/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t/\\b(?:_|blankpicture|bp|cc|cm|dd|ditto|down|eps|epsilon|fullcircle|halfcircle|identity|in|infinity|left|mm|nullpen|nullpicture|origin|pc|penrazor|penspeck|pensquare|penstroke|proof|pt|quartercircle|relax|right|smoke|unitpixel|unitsquare|up)\\b/\n\t],\n\t'quantity': {\n\t\tpattern: /\\b(?:autorounding|blacker|boundarychar|charcode|chardp|chardx|chardy|charext|charht|charic|charwd|currentwindow|day|designsize|displaying|fillin|fontmaking|granularity|hppp|join_radius|month|o_correction|pausing|pen_(?:bot|lft|rt|top)|pixels_per_inch|proofing|showstopping|smoothing|time|tolerance|tracingcapsules|tracingchoices|tracingcommands|tracingedges|tracingequations|tracingmacros|tracingonline|tracingoutput|tracingpens|tracingrestores|tracingspecs|tracingstats|tracingtitles|turningcheck|vppp|warningcheck|xoffset|year|yoffset)\\b/,\n\t\talias: 'keyword'\n\t},\n\t'command': {\n\t\tpattern: /\\b(?:addto|batchmode|charlist|cull|display|errhelp|errmessage|errorstopmode|everyjob|extensible|fontdimen|headerbyte|inner|interim|let|ligtable|message|newinternal|nonstopmode|numspecial|openwindow|outer|randomseed|save|scrollmode|shipout|show|showdependencies|showstats|showtoken|showvariable|special)\\b/,\n\t\talias: 'builtin'\n\t},\n\t'operator': [\n\t\t{\n\t\t\tpattern: /(^|[^>=<:|])(?:<|<=|=|=:|\\|=:|\\|=:>|=:\\|>|=:\\||\\|=:\\||\\|=:\\|>|\\|=:\\|>>|>|>=|:|:=|<>|::|\\|\\|:)(?![>=<:|])/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^+-])(?:\\+|\\+\\+|-{1,3}|\\+-\\+)(?![+-])/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^/*\\\\])(?:\\*|\\*\\*|\\/)(?![/*\\\\])/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^.])(?:\\.{2,3})(?!\\.)/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^@#&$])&(?![@#&$])/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t/\\b(?:and|not|or)\\b/\n\t],\n\t'macro': {\n\t\tpattern: /\\b(?:abs|beginchar|bot|byte|capsule_def|ceiling|change_width|clear_pen_memory|clearit|clearpen|clearxy|counterclockwise|cullit|cutdraw|cutoff|decr|define_blacker_pixels|define_corrected_pixels|define_good_x_pixels|define_good_y_pixels|define_horizontal_corrected_pixels|define_pixels|define_whole_blacker_pixels|define_whole_pixels|define_whole_vertical_blacker_pixels|define_whole_vertical_pixels|dir|direction|directionpoint|div|dotprod|downto|draw|drawdot|endchar|erase|fill|filldraw|fix_units|flex|font_coding_scheme|font_extra_space|font_identifier|font_normal_shrink|font_normal_space|font_normal_stretch|font_quad|font_size|font_slant|font_x_height|gfcorners|gobble|gobbled|good\\.(?:bot|lft|rt|top|x|y)|grayfont|hide|hround|imagerules|incr|interact|interpath|intersectionpoint|inverse|italcorr|killtext|labelfont|labels|lft|loggingall|lowres_fix|makegrid|makelabel(?:\\.(?:bot|lft|rt|top)(?:\\.nodot)?)?|max|min|mod|mode_def|mode_setup|nodisplays|notransforms|numtok|openit|penlabels|penpos|pickup|proofoffset|proofrule|proofrulethickness|range|reflectedabout|rotatedabout|rotatedaround|round|rt|savepen|screenchars|screenrule|screenstrokes|shipit|showit|slantfont|softjoin|solve|stop|superellipse|tensepath|thru|titlefont|top|tracingall|tracingnone|undraw|undrawdot|unfill|unfilldraw|upto|vround)\\b/,\n\t\talias: 'function'\n\t},\n\t'builtin': /\\b(?:ASCII|angle|char|cosd|decimal|directiontime|floor|hex|intersectiontimes|jobname|known|length|makepath|makepen|mexp|mlog|normaldeviate|oct|odd|pencircle|penoffset|point|postcontrol|precontrol|reverse|rotated|sind|sqrt|str|subpath|substring|totalweight|turningnumber|uniformdeviate|unknown|xpart|xxpart|xypart|ypart|yxpart|yypart)\\b/,\n\t'keyword': /\\b(?:also|at|atleast|begingroup|charexists|contour|controls|curl|cycle|def|delimiters|doublepath|dropping|dump|else|elseif|end|enddef|endfor|endgroup|endinput|exitif|exitunless|expandafter|fi|for|forever|forsuffixes|from|if|input|inwindow|keeping|kern|of|primarydef|quote|readstring|scaled|scantokens|secondarydef|shifted|skipto|slanted|step|tension|tertiarydef|to|transformed|until|vardef|withpen|withweight|xscaled|yscaled|zscaled)\\b/,\n\t'type': {\n\t\tpattern: /\\b(?:boolean|expr|numeric|pair|path|pen|picture|primary|secondary|string|suffix|tertiary|text|transform)\\b/,\n\t\talias: 'property'\n\t},\n\t'variable': {\n\t\tpattern: /(^|[^@#&$])(?:@#|#@|#|@)(?![@#&$])|\\b(?:aspect_ratio|currentpen|currentpicture|currenttransform|d|extra_beginchar|extra_endchar|extra_setup|h|localfont|mag|mode|screen_cols|screen_rows|w|whatever|x|y|z)\\b/,\n\t\tlookbehind: true\n\t}\n};\n/package.json\b{\n\t\"name\": \"prismjs\",\n\t\"version\": \"1.29.0\",\n\t\"description\": \"Lightweight, robust, elegant syntax highlighting. A spin-off project from Dabblet.\",\n\t\"main\": \"prism.js\",\n\t\"style\": \"themes/prism.css\",\n\t\"engines\": {\n\t\t\"node\": \">=6\"\n\t},\n\t\"scripts\": {\n\t\t\"benchmark\": \"node benchmark/benchmark.js\",\n\t\t\"build\": \"gulp\",\n\t\t\"start\": \"http-server -c-1\",\n\t\t\"lint\": \"eslint . --cache\",\n\t\t\"lint:fix\": \"npm run lint -- --fix\",\n\t\t\"lint:ci\": \"eslint . --max-warnings 0\",\n\t\t\"regex-coverage\": \"mocha tests/coverage.js\",\n\t\t\"test:aliases\": \"mocha tests/aliases-test.js\",\n\t\t\"test:core\": \"mocha tests/core/**/*.js\",\n\t\t\"test:dependencies\": \"mocha tests/dependencies-test.js\",\n\t\t\"test:examples\": \"mocha tests/examples-test.js\",\n\t\t\"test:identifiers\": \"mocha tests/identifier-test.js\",\n\t\t\"test:languages\": \"mocha tests/run.js\",\n\t\t\"test:patterns\": \"mocha tests/pattern-tests.js\",\n\t\t\"test:plugins\": \"mocha tests/plugins/**/*.js\",\n\t\t\"test:runner\": \"mocha tests/testrunner-tests.js\",\n\t\t\"test\": \"npm-run-all test:*\"\n\t},\n\t\"repository\": {\n\t\t\"type\": \"git\",\n\t\t\"url\": \"https://github.com/PrismJS/prism.git\"\n\t},\n\t\"keywords\": [\n\t\t\"prism\",\n\t\t\"highlight\"\n\t],\n\t\"author\": \"Lea Verou\",\n\t\"license\": \"MIT\",\n\t\"readmeFilename\": \"README.md\",\n\t\"devDependencies\": {\n\t\t\"@types/node-fetch\": \"^2.5.5\",\n\t\t\"benchmark\": \"^2.1.4\",\n\t\t\"chai\": \"^4.2.0\",\n\t\t\"danger\": \"^10.5.0\",\n\t\t\"del\": \"^4.1.1\",\n\t\t\"docdash\": \"^1.2.0\",\n\t\t\"eslint\": \"^7.22.0\",\n\t\t\"eslint-plugin-jsdoc\": \"^32.3.0\",\n\t\t\"eslint-plugin-regexp\": \"^1.6.0\",\n\t\t\"gulp\": \"^4.0.2\",\n\t\t\"gulp-clean-css\": \"^4.3.0\",\n\t\t\"gulp-concat\": \"^2.3.4\",\n\t\t\"gulp-header\": \"^2.0.7\",\n\t\t\"gulp-jsdoc3\": \"^3.0.0\",\n\t\t\"gulp-rename\": \"^1.2.0\",\n\t\t\"gulp-replace\": \"^1.0.0\",\n\t\t\"gulp-terser\": \"^2.1.0\",\n\t\t\"gzip-size\": \"^5.1.1\",\n\t\t\"htmlparser2\": \"^4.0.0\",\n\t\t\"http-server\": \"^0.12.3\",\n\t\t\"jsdom\": \"^16.7.0\",\n\t\t\"mocha\": \"^9.2.2\",\n\t\t\"node-fetch\": \"^3.1.1\",\n\t\t\"npm-run-all\": \"^4.1.5\",\n\t\t\"prettier\": \"^2.4.1\",\n\t\t\"pump\": \"^3.0.0\",\n\t\t\"refa\": \"^0.9.1\",\n\t\t\"regexp-ast-analysis\": \"^0.2.4\",\n\t\t\"regexpp\": \"^3.2.0\",\n\t\t\"scslre\": \"^0.1.6\",\n\t\t\"simple-git\": \"^3.3.0\",\n\t\t\"webfont\": \"^9.0.0\",\n\t\t\"yargs\": \"^13.2.2\"\n\t},\n\t\"jspm\": {\n\t\t\"main\": \"prism\",\n\t\t\"registry\": \"jspm\",\n\t\t\"jspmPackage\": true,\n\t\t\"format\": \"global\",\n\t\t\"files\": [\n\t\t\t\"components/**/*.js\",\n\t\t\t\"plugins/**/*\",\n\t\t\t\"themes/*.css\",\n\t\t\t\"prism.js\"\n\t\t]\n\t}\n}\n/themes/prism-dark.min.css\u0005code[class*=language-],pre[class*=language-]{color:#fff;background:0 0;text-shadow:0 -.1em .2em #000;font-family:Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}@media print{code[class*=language-],pre[class*=language-]{text-shadow:none}}:not(pre)>code[class*=language-],pre[class*=language-]{background:#4c3f33}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto;border:.3em solid #7a6651;border-radius:.5em;box-shadow:1px 1px .5em #000 inset}:not(pre)>code[class*=language-]{padding:.15em .2em .05em;border-radius:.3em;border:.13em solid #7a6651;box-shadow:1px 1px .3em -.1em #000 inset;white-space:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#997f66}.token.punctuation{opacity:.7}.token.namespace{opacity:.7}.token.boolean,.token.constant,.token.number,.token.property,.token.symbol,.token.tag{color:#d1939e}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color:#bce051}.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url,.token.variable{color:#f4b73d}.token.atrule,.token.attr-value,.token.keyword{color:#d1939e}.token.important,.token.regex{color:#e90}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.token.deleted{color:red}/components/prism-brainfuck.js\u0001,Prism.languages.brainfuck = {\n\t'pointer': {\n\t\tpattern: /<|>/,\n\t\talias: 'keyword'\n\t},\n\t'increment': {\n\t\tpattern: /\\+/,\n\t\talias: 'inserted'\n\t},\n\t'decrement': {\n\t\tpattern: /-/,\n\t\talias: 'deleted'\n\t},\n\t'branching': {\n\t\tpattern: /\\[|\\]/,\n\t\talias: 'important'\n\t},\n\t'operator': /[.,]/,\n\t'comment': /\\S+/\n};\n/components/prism-basic.min.js\u0007'Prism.languages.basic={comment:{pattern:/(?:!|REM\\b).+/i,inside:{keyword:/^REM/i}},string:{pattern:/\"(?:\"\"|[!#$%&'()*,\\/:;<=>?^\\w +\\-.])*\"/,greedy:!0},number:/(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:E[+-]?\\d+)?/i,keyword:/\\b(?:AS|BEEP|BLOAD|BSAVE|CALL(?: ABSOLUTE)?|CASE|CHAIN|CHDIR|CLEAR|CLOSE|CLS|COM|COMMON|CONST|DATA|DECLARE|DEF(?: FN| SEG|DBL|INT|LNG|SNG|STR)|DIM|DO|DOUBLE|ELSE|ELSEIF|END|ENVIRON|ERASE|ERROR|EXIT|FIELD|FILES|FOR|FUNCTION|GET|GOSUB|GOTO|IF|INPUT|INTEGER|IOCTL|KEY|KILL|LINE INPUT|LOCATE|LOCK|LONG|LOOP|LSET|MKDIR|NAME|NEXT|OFF|ON(?: COM| ERROR| KEY| TIMER)?|OPEN|OPTION BASE|OUT|POKE|PUT|READ|REDIM|REM|RESTORE|RESUME|RETURN|RMDIR|RSET|RUN|SELECT CASE|SHARED|SHELL|SINGLE|SLEEP|STATIC|STEP|STOP|STRING|SUB|SWAP|SYSTEM|THEN|TIMER|TO|TROFF|TRON|TYPE|UNLOCK|UNTIL|USING|VIEW PRINT|WAIT|WEND|WHILE|WRITE)(?:\\$|\\b)/i,function:/\\b(?:ABS|ACCESS|ACOS|ANGLE|AREA|ARITHMETIC|ARRAY|ASIN|ASK|AT|ATN|BASE|BEGIN|BREAK|CAUSE|CEIL|CHR|CLIP|COLLATE|COLOR|CON|COS|COSH|COT|CSC|DATE|DATUM|DEBUG|DECIMAL|DEF|DEG|DEGREES|DELETE|DET|DEVICE|DISPLAY|DOT|ELAPSED|EPS|ERASABLE|EXLINE|EXP|EXTERNAL|EXTYPE|FILETYPE|FIXED|FP|GO|GRAPH|HANDLER|IDN|IMAGE|IN|INT|INTERNAL|IP|IS|KEYED|LBOUND|LCASE|LEFT|LEN|LENGTH|LET|LINE|LINES|LOG|LOG10|LOG2|LTRIM|MARGIN|MAT|MAX|MAXNUM|MID|MIN|MISSING|MOD|NATIVE|NUL|NUMERIC|OF|OPTION|ORD|ORGANIZATION|OUTIN|OUTPUT|PI|POINT|POINTER|POINTS|POS|PRINT|PROGRAM|PROMPT|RAD|RADIANS|RANDOMIZE|RECORD|RECSIZE|RECTYPE|RELATIVE|REMAINDER|REPEAT|REST|RETRY|REWRITE|RIGHT|RND|ROUND|RTRIM|SAME|SEC|SELECT|SEQUENTIAL|SET|SETTER|SGN|SIN|SINH|SIZE|SKIP|SQR|STANDARD|STATUS|STR|STREAM|STYLE|TAB|TAN|TANH|TEMPLATE|TEXT|THERE|TIME|TIMEOUT|TRACE|TRANSFORM|TRUNCATE|UBOUND|UCASE|USE|VAL|VARIABLE|VIEWPORT|WHEN|WINDOW|WITH|ZER|ZONEWIDTH)(?:\\$|\\b)/i,operator:/<[=>]?|>=?|[+\\-*\\/^=&]|\\b(?:AND|EQV|IMP|NOT|OR|XOR)\\b/i,punctuation:/[,;:()]/};/components/prism-jsdoc.min.js\u0005!function(e){var a=e.languages.javascript,n=\"\\\\{(?:[^{}]|\\\\{(?:[^{}]|\\\\{[^{}]*\\\\})*\\\\})+\\\\}\",t=\"(@(?:arg|argument|param|property)\\\\s+(?:\"+n+\"\\\\s+)?)\";e.languages.jsdoc=e.languages.extend(\"javadoclike\",{parameter:{pattern:RegExp(t+\"(?:(?!\\\\s)[$\\\\w\\\\xA0-\\\\uFFFF.])+(?=\\\\s|$)\"),lookbehind:!0,inside:{punctuation:/\\./}}}),e.languages.insertBefore(\"jsdoc\",\"keyword\",{\"optional-parameter\":{pattern:RegExp(t+\"\\\\[(?:(?!\\\\s)[$\\\\w\\\\xA0-\\\\uFFFF.])+(?:=[^[\\\\]]+)?\\\\](?=\\\\s|$)\"),lookbehind:!0,inside:{parameter:{pattern:/(^\\[)[$\\w\\xA0-\\uFFFF\\.]+/,lookbehind:!0,inside:{punctuation:/\\./}},code:{pattern:/(=)[\\s\\S]*(?=\\]$)/,lookbehind:!0,inside:a,alias:\"language-javascript\"},punctuation:/[=[\\]]/}},\"class-name\":[{pattern:RegExp(\"(@(?:augments|class|extends|interface|memberof!?|template|this|typedef)\\\\s+(?:<TYPE>\\\\s+)?)[A-Z]\\\\w*(?:\\\\.[A-Z]\\\\w*)*\".replace(/<TYPE>/g,(function(){return n}))),lookbehind:!0,inside:{punctuation:/\\./}},{pattern:RegExp(\"(@[a-z]+\\\\s+)\"+n),lookbehind:!0,inside:{string:a.string,number:a.number,boolean:a.boolean,keyword:e.languages.typescript.keyword,operator:/=>|\\.\\.\\.|[&|?:*]/,punctuation:/[.,;=<>{}()[\\]]/}}],example:{pattern:/(@example\\s+(?!\\s))(?:[^@\\s]|\\s+(?!\\s))+?(?=\\s*(?:\\*\\s*)?(?:@\\w|\\*\\/))/,lookbehind:!0,inside:{code:{pattern:/^([\\t ]*(?:\\*\\s*)?)\\S.*$/m,lookbehind:!0,inside:a,alias:\"language-javascript\"}}}}),e.languages.javadoclike.addSupport(\"javascript\",e.languages.jsdoc)}(Prism);/components/prism-llvm.min.js\u0002%!function(a){a.languages.llvm={comment:/;.*/,string:{pattern:/\"[^\"]*\"/,greedy:!0},boolean:/\\b(?:false|true)\\b/,variable:/[%@!#](?:(?!\\d)(?:[-$.\\w]|\\\\[a-f\\d]{2})+|\\d+)/i,label:/(?!\\d)(?:[-$.\\w]|\\\\[a-f\\d]{2})+:/i,type:{pattern:/\\b(?:double|float|fp128|half|i[1-9]\\d*|label|metadata|ppc_fp128|token|void|x86_fp80|x86_mmx)\\b/,alias:\"class-name\"},keyword:/\\b[a-z_][a-z_0-9]*\\b/,number:/[+-]?\\b\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?\\b|\\b0x[\\dA-Fa-f]+\\b|\\b0xK[\\dA-Fa-f]{20}\\b|\\b0x[ML][\\dA-Fa-f]{32}\\b|\\b0xH[\\dA-Fa-f]{4}\\b/,punctuation:/[{}[\\];(),.!*=<>]/}}(Prism);/components/prism-opencl.min.js&!function(E){E.languages.opencl=E.languages.extend(\"c\",{keyword:/\\b(?:(?:__)?(?:constant|global|kernel|local|private|read_only|read_write|write_only)|__attribute__|auto|(?:bool|u?(?:char|int|long|short)|half|quad)(?:2|3|4|8|16)?|break|case|complex|const|continue|(?:double|float)(?:16(?:x(?:1|2|4|8|16))?|1x(?:1|2|4|8|16)|2(?:x(?:1|2|4|8|16))?|3|4(?:x(?:1|2|4|8|16))?|8(?:x(?:1|2|4|8|16))?)?|default|do|else|enum|extern|for|goto|if|imaginary|inline|packed|pipe|register|restrict|return|signed|sizeof|static|struct|switch|typedef|uniform|union|unsigned|void|volatile|while)\\b/,number:/(?:\\b0x(?:[\\da-f]+(?:\\.[\\da-f]*)?|\\.[\\da-f]+)(?:p[+-]?\\d+)?|(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:e[+-]?\\d+)?)[fuhl]{0,4}/i,boolean:/\\b(?:false|true)\\b/,\"constant-opencl-kernel\":{pattern:/\\b(?:CHAR_(?:BIT|MAX|MIN)|CLK_(?:ADDRESS_(?:CLAMP(?:_TO_EDGE)?|NONE|REPEAT)|FILTER_(?:LINEAR|NEAREST)|(?:GLOBAL|LOCAL)_MEM_FENCE|NORMALIZED_COORDS_(?:FALSE|TRUE))|CL_(?:BGRA|(?:HALF_)?FLOAT|INTENSITY|LUMINANCE|A?R?G?B?[Ax]?|(?:(?:UN)?SIGNED|[US]NORM)_(?:INT(?:8|16|32))|UNORM_(?:INT_101010|SHORT_(?:555|565)))|(?:DBL|FLT|HALF)_(?:DIG|EPSILON|(?:MAX|MIN)(?:(?:_10)?_EXP)?|MANT_DIG)|FLT_RADIX|HUGE_VALF?|(?:INT|LONG|SCHAR|SHRT)_(?:MAX|MIN)|INFINITY|MAXFLOAT|M_(?:[12]_PI|2_SQRTPI|E|LN(?:2|10)|LOG(?:2|10)E?|PI(?:_[24])?|SQRT(?:1_2|2))(?:_F|_H)?|NAN|(?:UCHAR|UINT|ULONG|USHRT)_MAX)\\b/,alias:\"constant\"}}),E.languages.insertBefore(\"opencl\",\"class-name\",{\"builtin-type\":{pattern:/\\b(?:_cl_(?:command_queue|context|device_id|event|kernel|mem|platform_id|program|sampler)|cl_(?:image_format|mem_fence_flags)|clk_event_t|event_t|image(?:1d_(?:array_|buffer_)?t|2d_(?:array_(?:depth_|msaa_depth_|msaa_)?|depth_|msaa_depth_|msaa_)?t|3d_t)|intptr_t|ndrange_t|ptrdiff_t|queue_t|reserve_id_t|sampler_t|size_t|uintptr_t)\\b/,alias:\"keyword\"}});var _={\"type-opencl-host\":{pattern:/\\b(?:cl_(?:GLenum|GLint|GLuin|addressing_mode|bitfield|bool|buffer_create_type|build_status|channel_(?:order|type)|(?:u?(?:char|int|long|short)|double|float)(?:2|3|4|8|16)?|command_(?:queue(?:_info|_properties)?|type)|context(?:_info|_properties)?|device_(?:exec_capabilities|fp_config|id|info|local_mem_type|mem_cache_type|type)|(?:event|sampler)(?:_info)?|filter_mode|half|image_info|kernel(?:_info|_work_group_info)?|map_flags|mem(?:_flags|_info|_object_type)?|platform_(?:id|info)|profiling_info|program(?:_build_info|_info)?))\\b/,alias:\"keyword\"},\"boolean-opencl-host\":{pattern:/\\bCL_(?:FALSE|TRUE)\\b/,alias:\"boolean\"},\"constant-opencl-host\":{pattern:/\\bCL_(?:A|ABGR|ADDRESS_(?:CLAMP(?:_TO_EDGE)?|MIRRORED_REPEAT|NONE|REPEAT)|ARGB|BGRA|BLOCKING|BUFFER_CREATE_TYPE_REGION|BUILD_(?:ERROR|IN_PROGRESS|NONE|PROGRAM_FAILURE|SUCCESS)|COMMAND_(?:ACQUIRE_GL_OBJECTS|BARRIER|COPY_(?:BUFFER(?:_RECT|_TO_IMAGE)?|IMAGE(?:_TO_BUFFER)?)|FILL_(?:BUFFER|IMAGE)|MAP(?:_BUFFER|_IMAGE)|MARKER|MIGRATE(?:_SVM)?_MEM_OBJECTS|NATIVE_KERNEL|NDRANGE_KERNEL|READ_(?:BUFFER(?:_RECT)?|IMAGE)|RELEASE_GL_OBJECTS|SVM_(?:FREE|MAP|MEMCPY|MEMFILL|UNMAP)|TASK|UNMAP_MEM_OBJECT|USER|WRITE_(?:BUFFER(?:_RECT)?|IMAGE))|COMPILER_NOT_AVAILABLE|COMPILE_PROGRAM_FAILURE|COMPLETE|CONTEXT_(?:DEVICES|INTEROP_USER_SYNC|NUM_DEVICES|PLATFORM|PROPERTIES|REFERENCE_COUNT)|DEPTH(?:_STENCIL)?|DEVICE_(?:ADDRESS_BITS|AFFINITY_DOMAIN_(?:L[1-4]_CACHE|NEXT_PARTITIONABLE|NUMA)|AVAILABLE|BUILT_IN_KERNELS|COMPILER_AVAILABLE|DOUBLE_FP_CONFIG|ENDIAN_LITTLE|ERROR_CORRECTION_SUPPORT|EXECUTION_CAPABILITIES|EXTENSIONS|GLOBAL_(?:MEM_(?:CACHELINE_SIZE|CACHE_SIZE|CACHE_TYPE|SIZE)|VARIABLE_PREFERRED_TOTAL_SIZE)|HOST_UNIFIED_MEMORY|IL_VERSION|IMAGE(?:2D_MAX_(?:HEIGHT|WIDTH)|3D_MAX_(?:DEPTH|HEIGHT|WIDTH)|_BASE_ADDRESS_ALIGNMENT|_MAX_ARRAY_SIZE|_MAX_BUFFER_SIZE|_PITCH_ALIGNMENT|_SUPPORT)|LINKER_AVAILABLE|LOCAL_MEM_SIZE|LOCAL_MEM_TYPE|MAX_(?:CLOCK_FREQUENCY|COMPUTE_UNITS|CONSTANT_ARGS|CONSTANT_BUFFER_SIZE|GLOBAL_VARIABLE_SIZE|MEM_ALLOC_SIZE|NUM_SUB_GROUPS|ON_DEVICE_(?:EVENTS|QUEUES)|PARAMETER_SIZE|PIPE_ARGS|READ_IMAGE_ARGS|READ_WRITE_IMAGE_ARGS|SAMPLERS|WORK_GROUP_SIZE|WORK_ITEM_DIMENSIONS|WORK_ITEM_SIZES|WRITE_IMAGE_ARGS)|MEM_BASE_ADDR_ALIGN|MIN_DATA_TYPE_ALIGN_SIZE|NAME|NATIVE_VECTOR_WIDTH_(?:CHAR|DOUBLE|FLOAT|HALF|INT|LONG|SHORT)|NOT_(?:AVAILABLE|FOUND)|OPENCL_C_VERSION|PARENT_DEVICE|PARTITION_(?:AFFINITY_DOMAIN|BY_AFFINITY_DOMAIN|BY_COUNTS|BY_COUNTS_LIST_END|EQUALLY|FAILED|MAX_SUB_DEVICES|PROPERTIES|TYPE)|PIPE_MAX_(?:ACTIVE_RESERVATIONS|PACKET_SIZE)|PLATFORM|PREFERRED_(?:GLOBAL_ATOMIC_ALIGNMENT|INTEROP_USER_SYNC|LOCAL_ATOMIC_ALIGNMENT|PLATFORM_ATOMIC_ALIGNMENT|VECTOR_WIDTH_(?:CHAR|DOUBLE|FLOAT|HALF|INT|LONG|SHORT))|PRINTF_BUFFER_SIZE|PROFILE|PROFILING_TIMER_RESOLUTION|QUEUE_(?:ON_(?:DEVICE_(?:MAX_SIZE|PREFERRED_SIZE|PROPERTIES)|HOST_PROPERTIES)|PROPERTIES)|REFERENCE_COUNT|SINGLE_FP_CONFIG|SUB_GROUP_INDEPENDENT_FORWARD_PROGRESS|SVM_(?:ATOMICS|CAPABILITIES|COARSE_GRAIN_BUFFER|FINE_GRAIN_BUFFER|FINE_GRAIN_SYSTEM)|TYPE(?:_ACCELERATOR|_ALL|_CPU|_CUSTOM|_DEFAULT|_GPU)?|VENDOR(?:_ID)?|VERSION)|DRIVER_VERSION|EVENT_(?:COMMAND_(?:EXECUTION_STATUS|QUEUE|TYPE)|CONTEXT|REFERENCE_COUNT)|EXEC_(?:KERNEL|NATIVE_KERNEL|STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST)|FILTER_(?:LINEAR|NEAREST)|FLOAT|FP_(?:CORRECTLY_ROUNDED_DIVIDE_SQRT|DENORM|FMA|INF_NAN|ROUND_TO_INF|ROUND_TO_NEAREST|ROUND_TO_ZERO|SOFT_FLOAT)|GLOBAL|HALF_FLOAT|IMAGE_(?:ARRAY_SIZE|BUFFER|DEPTH|ELEMENT_SIZE|FORMAT|FORMAT_MISMATCH|FORMAT_NOT_SUPPORTED|HEIGHT|NUM_MIP_LEVELS|NUM_SAMPLES|ROW_PITCH|SLICE_PITCH|WIDTH)|INTENSITY|INVALID_(?:ARG_INDEX|ARG_SIZE|ARG_VALUE|BINARY|BUFFER_SIZE|BUILD_OPTIONS|COMMAND_QUEUE|COMPILER_OPTIONS|CONTEXT|DEVICE|DEVICE_PARTITION_COUNT|DEVICE_QUEUE|DEVICE_TYPE|EVENT|EVENT_WAIT_LIST|GLOBAL_OFFSET|GLOBAL_WORK_SIZE|GL_OBJECT|HOST_PTR|IMAGE_DESCRIPTOR|IMAGE_FORMAT_DESCRIPTOR|IMAGE_SIZE|KERNEL|KERNEL_ARGS|KERNEL_DEFINITION|KERNEL_NAME|LINKER_OPTIONS|MEM_OBJECT|MIP_LEVEL|OPERATION|PIPE_SIZE|PLATFORM|PROGRAM|PROGRAM_EXECUTABLE|PROPERTY|QUEUE_PROPERTIES|SAMPLER|VALUE|WORK_DIMENSION|WORK_GROUP_SIZE|WORK_ITEM_SIZE)|KERNEL_(?:ARG_(?:ACCESS_(?:NONE|QUALIFIER|READ_ONLY|READ_WRITE|WRITE_ONLY)|ADDRESS_(?:CONSTANT|GLOBAL|LOCAL|PRIVATE|QUALIFIER)|INFO_NOT_AVAILABLE|NAME|TYPE_(?:CONST|NAME|NONE|PIPE|QUALIFIER|RESTRICT|VOLATILE))|ATTRIBUTES|COMPILE_NUM_SUB_GROUPS|COMPILE_WORK_GROUP_SIZE|CONTEXT|EXEC_INFO_SVM_FINE_GRAIN_SYSTEM|EXEC_INFO_SVM_PTRS|FUNCTION_NAME|GLOBAL_WORK_SIZE|LOCAL_MEM_SIZE|LOCAL_SIZE_FOR_SUB_GROUP_COUNT|MAX_NUM_SUB_GROUPS|MAX_SUB_GROUP_SIZE_FOR_NDRANGE|NUM_ARGS|PREFERRED_WORK_GROUP_SIZE_MULTIPLE|PRIVATE_MEM_SIZE|PROGRAM|REFERENCE_COUNT|SUB_GROUP_COUNT_FOR_NDRANGE|WORK_GROUP_SIZE)|LINKER_NOT_AVAILABLE|LINK_PROGRAM_FAILURE|LOCAL|LUMINANCE|MAP_(?:FAILURE|READ|WRITE|WRITE_INVALIDATE_REGION)|MEM_(?:ALLOC_HOST_PTR|ASSOCIATED_MEMOBJECT|CONTEXT|COPY_HOST_PTR|COPY_OVERLAP|FLAGS|HOST_NO_ACCESS|HOST_PTR|HOST_READ_ONLY|HOST_WRITE_ONLY|KERNEL_READ_AND_WRITE|MAP_COUNT|OBJECT_(?:ALLOCATION_FAILURE|BUFFER|IMAGE1D|IMAGE1D_ARRAY|IMAGE1D_BUFFER|IMAGE2D|IMAGE2D_ARRAY|IMAGE3D|PIPE)|OFFSET|READ_ONLY|READ_WRITE|REFERENCE_COUNT|SIZE|SVM_ATOMICS|SVM_FINE_GRAIN_BUFFER|TYPE|USES_SVM_POINTER|USE_HOST_PTR|WRITE_ONLY)|MIGRATE_MEM_OBJECT_(?:CONTENT_UNDEFINED|HOST)|MISALIGNED_SUB_BUFFER_OFFSET|NONE|NON_BLOCKING|OUT_OF_(?:HOST_MEMORY|RESOURCES)|PIPE_(?:MAX_PACKETS|PACKET_SIZE)|PLATFORM_(?:EXTENSIONS|HOST_TIMER_RESOLUTION|NAME|PROFILE|VENDOR|VERSION)|PROFILING_(?:COMMAND_(?:COMPLETE|END|QUEUED|START|SUBMIT)|INFO_NOT_AVAILABLE)|PROGRAM_(?:BINARIES|BINARY_SIZES|BINARY_TYPE(?:_COMPILED_OBJECT|_EXECUTABLE|_LIBRARY|_NONE)?|BUILD_(?:GLOBAL_VARIABLE_TOTAL_SIZE|LOG|OPTIONS|STATUS)|CONTEXT|DEVICES|IL|KERNEL_NAMES|NUM_DEVICES|NUM_KERNELS|REFERENCE_COUNT|SOURCE)|QUEUED|QUEUE_(?:CONTEXT|DEVICE|DEVICE_DEFAULT|ON_DEVICE|ON_DEVICE_DEFAULT|OUT_OF_ORDER_EXEC_MODE_ENABLE|PROFILING_ENABLE|PROPERTIES|REFERENCE_COUNT|SIZE)|R|RA|READ_(?:ONLY|WRITE)_CACHE|RG|RGB|RGBA|RGBx|RGx|RUNNING|Rx|SAMPLER_(?:ADDRESSING_MODE|CONTEXT|FILTER_MODE|LOD_MAX|LOD_MIN|MIP_FILTER_MODE|NORMALIZED_COORDS|REFERENCE_COUNT)|(?:UN)?SIGNED_INT(?:8|16|32)|SNORM_INT(?:8|16)|SUBMITTED|SUCCESS|UNORM_INT(?:8|16|24|_101010|_101010_2)|UNORM_SHORT_(?:555|565)|VERSION_(?:1_0|1_1|1_2|2_0|2_1)|sBGRA|sRGB|sRGBA|sRGBx)\\b/,alias:\"constant\"},\"function-opencl-host\":{pattern:/\\bcl(?:BuildProgram|CloneKernel|CompileProgram|Create(?:Buffer|CommandQueue(?:WithProperties)?|Context|ContextFromType|Image|Image2D|Image3D|Kernel|KernelsInProgram|Pipe|ProgramWith(?:Binary|BuiltInKernels|IL|Source)|Sampler|SamplerWithProperties|SubBuffer|SubDevices|UserEvent)|Enqueue(?:(?:Barrier|Marker)(?:WithWaitList)?|Copy(?:Buffer(?:Rect|ToImage)?|Image(?:ToBuffer)?)|(?:Fill|Map)(?:Buffer|Image)|MigrateMemObjects|NDRangeKernel|NativeKernel|(?:Read|Write)(?:Buffer(?:Rect)?|Image)|SVM(?:Free|Map|MemFill|Memcpy|MigrateMem|Unmap)|Task|UnmapMemObject|WaitForEvents)|Finish|Flush|Get(?:CommandQueueInfo|ContextInfo|Device(?:AndHostTimer|IDs|Info)|Event(?:Profiling)?Info|ExtensionFunctionAddress(?:ForPlatform)?|HostTimer|ImageInfo|Kernel(?:ArgInfo|Info|SubGroupInfo|WorkGroupInfo)|MemObjectInfo|PipeInfo|Platform(?:IDs|Info)|Program(?:Build)?Info|SamplerInfo|SupportedImageFormats)|LinkProgram|(?:Release|Retain)(?:CommandQueue|Context|Device|Event|Kernel|MemObject|Program|Sampler)|SVM(?:Alloc|Free)|Set(?:CommandQueueProperty|DefaultDeviceCommandQueue|EventCallback|Kernel|Kernel(?:Arg(?:SVMPointer)?|ExecInfo)|MemObjectDestructorCallback|UserEventStatus)|Unload(?:Platform)?Compiler|WaitForEvents)\\b/,alias:\"function\"}};E.languages.insertBefore(\"c\",\"keyword\",_),E.languages.cpp&&(_[\"type-opencl-host-cpp\"]={pattern:/\\b(?:Buffer|BufferGL|BufferRenderGL|CommandQueue|Context|Device|DeviceCommandQueue|EnqueueArgs|Event|Image|Image1D|Image1DArray|Image1DBuffer|Image2D|Image2DArray|Image2DGL|Image3D|Image3DGL|ImageFormat|ImageGL|Kernel|KernelFunctor|LocalSpaceArg|Memory|NDRange|Pipe|Platform|Program|SVMAllocator|SVMTraitAtomic|SVMTraitCoarse|SVMTraitFine|SVMTraitReadOnly|SVMTraitReadWrite|SVMTraitWriteOnly|Sampler|UserEvent)\\b/,alias:\"keyword\"},E.languages.insertBefore(\"cpp\",\"keyword\",_))}(Prism);/components/prism-perl.min.js\b!function(e){var n=\"(?:\\\\((?:[^()\\\\\\\\]|\\\\\\\\[^])*\\\\)|\\\\{(?:[^{}\\\\\\\\]|\\\\\\\\[^])*\\\\}|\\\\[(?:[^[\\\\]\\\\\\\\]|\\\\\\\\[^])*\\\\]|<(?:[^<>\\\\\\\\]|\\\\\\\\[^])*>)\";e.languages.perl={comment:[{pattern:/(^\\s*)=\\w[\\s\\S]*?=cut.*/m,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\\\$])#.*/,lookbehind:!0,greedy:!0}],string:[{pattern:RegExp(\"\\\\b(?:q|qq|qw|qx)(?![a-zA-Z0-9])\\\\s*(?:\"+[\"([^a-zA-Z0-9\\\\s{(\\\\[<])(?:(?!\\\\1)[^\\\\\\\\]|\\\\\\\\[^])*\\\\1\",\"([a-zA-Z0-9])(?:(?!\\\\2)[^\\\\\\\\]|\\\\\\\\[^])*\\\\2\",n].join(\"|\")+\")\"),greedy:!0},{pattern:/(\"|`)(?:(?!\\1)[^\\\\]|\\\\[\\s\\S])*\\1/,greedy:!0},{pattern:/'(?:[^'\\\\\\r\\n]|\\\\.)*'/,greedy:!0}],regex:[{pattern:RegExp(\"\\\\b(?:m|qr)(?![a-zA-Z0-9])\\\\s*(?:\"+[\"([^a-zA-Z0-9\\\\s{(\\\\[<])(?:(?!\\\\1)[^\\\\\\\\]|\\\\\\\\[^])*\\\\1\",\"([a-zA-Z0-9])(?:(?!\\\\2)[^\\\\\\\\]|\\\\\\\\[^])*\\\\2\",n].join(\"|\")+\")[msixpodualngc]*\"),greedy:!0},{pattern:RegExp(\"(^|[^-])\\\\b(?:s|tr|y)(?![a-zA-Z0-9])\\\\s*(?:\"+[\"([^a-zA-Z0-9\\\\s{(\\\\[<])(?:(?!\\\\2)[^\\\\\\\\]|\\\\\\\\[^])*\\\\2(?:(?!\\\\2)[^\\\\\\\\]|\\\\\\\\[^])*\\\\2\",\"([a-zA-Z0-9])(?:(?!\\\\3)[^\\\\\\\\]|\\\\\\\\[^])*\\\\3(?:(?!\\\\3)[^\\\\\\\\]|\\\\\\\\[^])*\\\\3\",n+\"\\\\s*\"+n].join(\"|\")+\")[msixpodualngcer]*\"),lookbehind:!0,greedy:!0},{pattern:/\\/(?:[^\\/\\\\\\r\\n]|\\\\.)*\\/[msixpodualngc]*(?=\\s*(?:$|[\\r\\n,.;})&|\\-+*~<>!?^]|(?:and|cmp|eq|ge|gt|le|lt|ne|not|or|x|xor)\\b))/,greedy:!0}],variable:[/[&*$@%]\\{\\^[A-Z]+\\}/,/[&*$@%]\\^[A-Z_]/,/[&*$@%]#?(?=\\{)/,/[&*$@%]#?(?:(?:::)*'?(?!\\d)[\\w$]+(?![\\w$]))+(?:::)*/,/[&*$@%]\\d+/,/(?!%=)[$@%][!\"#$%&'()*+,\\-.\\/:;<=>?@[\\\\\\]^_`{|}~]/],filehandle:{pattern:/<(?![<=])\\S*?>|\\b_\\b/,alias:\"symbol\"},\"v-string\":{pattern:/v\\d+(?:\\.\\d+)*|\\d+(?:\\.\\d+){2,}/,alias:\"string\"},function:{pattern:/(\\bsub[ \\t]+)\\w+/,lookbehind:!0},keyword:/\\b(?:any|break|continue|default|delete|die|do|else|elsif|eval|for|foreach|given|goto|if|last|local|my|next|our|package|print|redo|require|return|say|state|sub|switch|undef|unless|until|use|when|while)\\b/,number:/\\b(?:0x[\\dA-Fa-f](?:_?[\\dA-Fa-f])*|0b[01](?:_?[01])*|(?:(?:\\d(?:_?\\d)*)?\\.)?\\d(?:_?\\d)*(?:[Ee][+-]?\\d+)?)\\b/,operator:/-[rwxoRWXOezsfdlpSbctugkTBMAC]\\b|\\+[+=]?|-[-=>]?|\\*\\*?=?|\\/\\/?=?|=[=~>]?|~[~=]?|\\|\\|?=?|&&?=?|<(?:=>?|<=?)?|>>?=?|![~=]?|[%^]=?|\\.(?:=|\\.\\.?)?|[\\\\?]|\\bx(?:=|\\b)|\\b(?:and|cmp|eq|ge|gt|le|lt|ne|not|or|xor)\\b/,punctuation:/[{}[\\];(),:]/}}(Prism);/CHANGELOG.md\u0000\u0004 \u001b# Prism Changelog\n\n## 1.29.0 (2022-08-23)\n\n### New components\n\n* __BBj__ ([#3511](https://github.com/PrismJS/prism/issues/3511)) [`1134bdfc`](https://github.com/PrismJS/prism/commit/1134bdfc)\n* __BQN__ ([#3515](https://github.com/PrismJS/prism/issues/3515)) [`859f99a0`](https://github.com/PrismJS/prism/commit/859f99a0)\n* __Cilk/C__ & __Cilk/C++__ ([#3522](https://github.com/PrismJS/prism/issues/3522)) [`c8462a29`](https://github.com/PrismJS/prism/commit/c8462a29)\n* __Gradle__ ([#3443](https://github.com/PrismJS/prism/issues/3443)) [`32119823`](https://github.com/PrismJS/prism/commit/32119823)\n* __METAFONT__ ([#3465](https://github.com/PrismJS/prism/issues/3465)) [`2815f699`](https://github.com/PrismJS/prism/commit/2815f699)\n* __WGSL__ ([#3455](https://github.com/PrismJS/prism/issues/3455)) [`4c87d418`](https://github.com/PrismJS/prism/commit/4c87d418)\n\n### Updated components\n\n* __AsciiDoc__\n    * Some regexes are too greedy ([#3481](https://github.com/PrismJS/prism/issues/3481)) [`c4cbeeaa`](https://github.com/PrismJS/prism/commit/c4cbeeaa)\n* __Bash__\n    * Added \"sh\" alias ([#3509](https://github.com/PrismJS/prism/issues/3509)) [`6b824d47`](https://github.com/PrismJS/prism/commit/6b824d47)\n    * Added support for parameters and the `java` and `sysctl` commands. ([#3505](https://github.com/PrismJS/prism/issues/3505)) [`b9512b22`](https://github.com/PrismJS/prism/commit/b9512b22)\n    * Added `cargo` command ([#3488](https://github.com/PrismJS/prism/issues/3488)) [`3e937137`](https://github.com/PrismJS/prism/commit/3e937137)\n* __BBj__\n    * Improve regexes ([#3512](https://github.com/PrismJS/prism/issues/3512)) [`0cad9ae5`](https://github.com/PrismJS/prism/commit/0cad9ae5)\n* __CSS__\n    * Fixed @-rules not accounting for strings ([#3438](https://github.com/PrismJS/prism/issues/3438)) [`0d4b6cb6`](https://github.com/PrismJS/prism/commit/0d4b6cb6)\n* __CSS Extras__\n    * Added support for `RebeccaPurple` color ([#3448](https://github.com/PrismJS/prism/issues/3448)) [`646b2e0a`](https://github.com/PrismJS/prism/commit/646b2e0a)\n* __Hoon__\n    * Fixed escaped strings ([#3473](https://github.com/PrismJS/prism/issues/3473)) [`64642716`](https://github.com/PrismJS/prism/commit/64642716)\n* __Java__\n    * Added support for constants ([#3507](https://github.com/PrismJS/prism/issues/3507)) [`342a0039`](https://github.com/PrismJS/prism/commit/342a0039)\n* __Markup__\n    * Fixed quotes in HTML attribute values ([#3442](https://github.com/PrismJS/prism/issues/3442)) [`ca8eaeee`](https://github.com/PrismJS/prism/commit/ca8eaeee)\n* __NSIS__\n    * Added missing commands ([#3504](https://github.com/PrismJS/prism/issues/3504)) [`b0c2a9b4`](https://github.com/PrismJS/prism/commit/b0c2a9b4)\n* __Scala__\n    * Updated keywords to support Scala 3 ([#3506](https://github.com/PrismJS/prism/issues/3506)) [`a090d063`](https://github.com/PrismJS/prism/commit/a090d063)\n* __SCSS__\n    * Fix casing in title of the `scss` lang ([#3501](https://github.com/PrismJS/prism/issues/3501)) [`2aed9ce7`](https://github.com/PrismJS/prism/commit/2aed9ce7)\n\n### Updated plugins\n\n* __Line Highlight__\n    * Account for offset when clamping ranges ([#3518](https://github.com/PrismJS/prism/issues/3518)) [`098e3000`](https://github.com/PrismJS/prism/commit/098e3000)\n    * Ignore ranges outside of actual lines ([#3475](https://github.com/PrismJS/prism/issues/3475)) [`9a4e725b`](https://github.com/PrismJS/prism/commit/9a4e725b)\n* __Normalize Whitespace__\n    * Add configuration via attributes ([#3467](https://github.com/PrismJS/prism/issues/3467)) [`91dea0c8`](https://github.com/PrismJS/prism/commit/91dea0c8)\n\n### Other\n\n* Added security policy ([#3070](https://github.com/PrismJS/prism/issues/3070)) [`05ee042a`](https://github.com/PrismJS/prism/commit/05ee042a)\n* Added list of maintainers ([#3410](https://github.com/PrismJS/prism/issues/3410)) [`866b302e`](https://github.com/PrismJS/prism/commit/866b302e)\n* Included githubactions in the dependabot config ([#3470](https://github.com/PrismJS/prism/issues/3470)) [`9561a9ab`](https://github.com/PrismJS/prism/commit/9561a9ab)\n* Set permissions for GitHub actions ([#3468](https://github.com/PrismJS/prism/issues/3468)) [`b85e1ada`](https://github.com/PrismJS/prism/commit/b85e1ada)\n* __Website__\n    * Website: Added third-party tutorial for Pug template ([#3459](https://github.com/PrismJS/prism/issues/3459)) [`15272f76`](https://github.com/PrismJS/prism/commit/15272f76)\n    * Docs: Add missing word ([#3489](https://github.com/PrismJS/prism/issues/3489)) [`9d603ef4`](https://github.com/PrismJS/prism/commit/9d603ef4)\n\n## 1.28.0 (2022-04-17)\n\n### New components\n\n* __Ado__ & __Mata__ (Stata) ([#3383](https://github.com/PrismJS/prism/issues/3383)) [`63806d57`](https://github.com/PrismJS/prism/commit/63806d57)\n* __ARM Assembly__ ([#3376](https://github.com/PrismJS/prism/issues/3376)) [`554ff324`](https://github.com/PrismJS/prism/commit/554ff324)\n* __Arturo__ ([#3403](https://github.com/PrismJS/prism/issues/3403)) [`e2fe1f79`](https://github.com/PrismJS/prism/commit/e2fe1f79)\n* __AWK__ & __GAWK__ ([#3374](https://github.com/PrismJS/prism/issues/3374)) [`ea8a0f40`](https://github.com/PrismJS/prism/commit/ea8a0f40)\n* __Cooklang__ ([#3337](https://github.com/PrismJS/prism/issues/3337)) [`4eb928c3`](https://github.com/PrismJS/prism/commit/4eb928c3)\n* __CUE__ ([#3375](https://github.com/PrismJS/prism/issues/3375)) [`a1340666`](https://github.com/PrismJS/prism/commit/a1340666)\n* __gettext__ ([#3369](https://github.com/PrismJS/prism/issues/3369)) [`dfef9b61`](https://github.com/PrismJS/prism/commit/dfef9b61)\n* __GNU Linker Script__ ([#3373](https://github.com/PrismJS/prism/issues/3373)) [`33f2cf95`](https://github.com/PrismJS/prism/commit/33f2cf95)\n* __Odin__ ([#3424](https://github.com/PrismJS/prism/issues/3424)) [`8a3fef6d`](https://github.com/PrismJS/prism/commit/8a3fef6d)\n* __PlantUML__ ([#3372](https://github.com/PrismJS/prism/issues/3372)) [`0d49553c`](https://github.com/PrismJS/prism/commit/0d49553c)\n* __ReScript__ ([#3435](https://github.com/PrismJS/prism/issues/3435)) [`cbef9af7`](https://github.com/PrismJS/prism/commit/cbef9af7)\n* __SuperCollider__ ([#3371](https://github.com/PrismJS/prism/issues/3371)) [`1b1d6731`](https://github.com/PrismJS/prism/commit/1b1d6731)\n\n### Updated components\n\n* __.properties__\n    * Use `key`, `value` for token names; `attr-name`, `attr-value` as aliases ([#3377](https://github.com/PrismJS/prism/issues/3377)) [`b94a664d`](https://github.com/PrismJS/prism/commit/b94a664d)\n* __ABAP__\n    * Sorted keyword list ([#3368](https://github.com/PrismJS/prism/issues/3368)) [`7bda2bf1`](https://github.com/PrismJS/prism/commit/7bda2bf1)\n* __Ada__\n    * Changed `attr-name` to `attribute`; Use `attr-name` as alias ([#3381](https://github.com/PrismJS/prism/issues/3381)) [`cde0b5b2`](https://github.com/PrismJS/prism/commit/cde0b5b2)\n    * Added `or` keyword ([#3380](https://github.com/PrismJS/prism/issues/3380)) [`c30b736f`](https://github.com/PrismJS/prism/commit/c30b736f)\n* __Atmel AVR Assembly__\n    * Fixed `&=` and `|=` operators ([#3395](https://github.com/PrismJS/prism/issues/3395)) [`8c4ae5a5`](https://github.com/PrismJS/prism/commit/8c4ae5a5)\n* __AutoHotkey__\n    * Use standard tokens ([#3385](https://github.com/PrismJS/prism/issues/3385)) [`61c460e8`](https://github.com/PrismJS/prism/commit/61c460e8)\n    * Use general pattern instead of name list for directives ([#3384](https://github.com/PrismJS/prism/issues/3384)) [`7ac84dda`](https://github.com/PrismJS/prism/commit/7ac84dda)\n* __CFScript__\n    * Simplified operator regex ([#3396](https://github.com/PrismJS/prism/issues/3396)) [`6a215fe0`](https://github.com/PrismJS/prism/commit/6a215fe0)\n* __CMake__\n    * Simplified `variable` and `operator` regexes ([#3398](https://github.com/PrismJS/prism/issues/3398)) [`8e59744b`](https://github.com/PrismJS/prism/commit/8e59744b)\n* __Erlang__\n    * Added `begin` keyword ([#3387](https://github.com/PrismJS/prism/issues/3387)) [`cf38d059`](https://github.com/PrismJS/prism/commit/cf38d059)\n* __Excel Formula__\n    * Use more fitting aliases for `function-name`, `range`, and `cell` ([#3391](https://github.com/PrismJS/prism/issues/3391)) [`ef0ec02a`](https://github.com/PrismJS/prism/commit/ef0ec02a)\n* __Flow__\n    * Changed alias of `type` to `class-name` ([#3390](https://github.com/PrismJS/prism/issues/3390)) [`ce41434d`](https://github.com/PrismJS/prism/commit/ce41434d)\n    * Recognise `[Ss]ymbol` as a type ([#3388](https://github.com/PrismJS/prism/issues/3388)) [`3916883a`](https://github.com/PrismJS/prism/commit/3916883a)\n* __GEDCOM__\n    * Update `tag` to `record` ([#3386](https://github.com/PrismJS/prism/issues/3386)) [`f8f95340`](https://github.com/PrismJS/prism/commit/f8f95340)\n* __Groovy__\n    * Added string interpolation without hook ([#3366](https://github.com/PrismJS/prism/issues/3366)) [`5617765f`](https://github.com/PrismJS/prism/commit/5617765f)\n* __Handlebars__\n    * Added Mustache alias ([#3422](https://github.com/PrismJS/prism/issues/3422)) [`cb5229af`](https://github.com/PrismJS/prism/commit/cb5229af)\n* __Java__\n    * Improved class name detection ([#3351](https://github.com/PrismJS/prism/issues/3351)) [`4cb3d038`](https://github.com/PrismJS/prism/commit/4cb3d038)\n    * Fixed `record` false positives ([#3348](https://github.com/PrismJS/prism/issues/3348)) [`3bd8fdb1`](https://github.com/PrismJS/prism/commit/3bd8fdb1)\n* __JavaScript__\n    * Added support for new regex syntax ([#3399](https://github.com/PrismJS/prism/issues/3399)) [`ca78cde6`](https://github.com/PrismJS/prism/commit/ca78cde6)\n* __Keyman__\n    * Added new keywords ([#3401](https://github.com/PrismJS/prism/issues/3401)) [`bac36827`](https://github.com/PrismJS/prism/commit/bac36827)\n* __MEL__\n    * Improved functions, code, and comments ([#3393](https://github.com/PrismJS/prism/issues/3393)) [`8e648dab`](https://github.com/PrismJS/prism/commit/8e648dab)\n* __NEON__\n    * Change alias of `key` to `property` ([#3394](https://github.com/PrismJS/prism/issues/3394)) [`1c533f4a`](https://github.com/PrismJS/prism/commit/1c533f4a)\n* __PHP__\n    * Added `never` return type + minor fix of named arguments ([#3421](https://github.com/PrismJS/prism/issues/3421)) [`4ffab525`](https://github.com/PrismJS/prism/commit/4ffab525)\n    * Added `readonly` keyword ([#3349](https://github.com/PrismJS/prism/issues/3349)) [`4c3f1969`](https://github.com/PrismJS/prism/commit/4c3f1969)\n* __PureBasic__\n    * Added support for pointer to string operator ([#3362](https://github.com/PrismJS/prism/issues/3362)) [`499b1fa0`](https://github.com/PrismJS/prism/commit/499b1fa0)\n* __Razor C#__\n    * Added support for `@helper` and inline C# inside attribute values ([#3355](https://github.com/PrismJS/prism/issues/3355)) [`31a38d0c`](https://github.com/PrismJS/prism/commit/31a38d0c)\n* __VHDL__\n    * Add `private`, `view` keywords; Distinguish `attribute` from `keyword` ([#3389](https://github.com/PrismJS/prism/issues/3389)) [`d1a5ce30`](https://github.com/PrismJS/prism/commit/d1a5ce30)\n* __Wolfram language__\n    * Simplified `operator` regex ([#3397](https://github.com/PrismJS/prism/issues/3397)) [`10ae6da3`](https://github.com/PrismJS/prism/commit/10ae6da3)\n\n### Updated plugins\n\n* __Autolinker__\n    * Fixed URL regex to match more valid URLs ([#3358](https://github.com/PrismJS/prism/issues/3358)) [`17ed9160`](https://github.com/PrismJS/prism/commit/17ed9160)\n* __Command Line__\n    * Add support for command continuation prefix ([#3344](https://github.com/PrismJS/prism/issues/3344)) [`b53832cd`](https://github.com/PrismJS/prism/commit/b53832cd)\n    * Increased prompt opacity ([#3352](https://github.com/PrismJS/prism/issues/3352)) [`f95dd190`](https://github.com/PrismJS/prism/commit/f95dd190)\n* __Keep Markup__\n    * Use original nodes instead of clones ([#3365](https://github.com/PrismJS/prism/issues/3365)) [`8a843a17`](https://github.com/PrismJS/prism/commit/8a843a17)\n\n### Other\n\n* __Infrastructure__\n    * Use terser ([#3407](https://github.com/PrismJS/prism/issues/3407)) [`11c54624`](https://github.com/PrismJS/prism/commit/11c54624)\n    * Tests: Cache results for exp backtracking check ([#3356](https://github.com/PrismJS/prism/issues/3356)) [`ead22e1e`](https://github.com/PrismJS/prism/commit/ead22e1e)\n* __Website__\n    * More documentation for language definitons ([#3427](https://github.com/PrismJS/prism/issues/3427)) [`333bd590`](https://github.com/PrismJS/prism/commit/333bd590)\n\n## 1.27.0 (2022-02-17)\n\n### New components\n\n* __UO Razor Script__ ([#3309](https://github.com/PrismJS/prism/issues/3309)) [`3f8cc5a0`](https://github.com/PrismJS/prism/commit/3f8cc5a0)\n\n### Updated components\n\n* __AutoIt__\n    * Allow hyphen in directive ([#3308](https://github.com/PrismJS/prism/issues/3308)) [`bcb2e2c8`](https://github.com/PrismJS/prism/commit/bcb2e2c8)\n* __EditorConfig__\n    * Change alias of `section` from `keyword` to `selector` ([#3305](https://github.com/PrismJS/prism/issues/3305)) [`e46501b9`](https://github.com/PrismJS/prism/commit/e46501b9)\n* __Ini__\n    * Swap out `header` for `section` ([#3304](https://github.com/PrismJS/prism/issues/3304)) [`deb3a97f`](https://github.com/PrismJS/prism/commit/deb3a97f)\n* __MongoDB__\n    * Added v5 support ([#3297](https://github.com/PrismJS/prism/issues/3297)) [`8458c41f`](https://github.com/PrismJS/prism/commit/8458c41f)\n* __PureBasic__\n    * Added missing keyword and fixed constants ending with `$` ([#3320](https://github.com/PrismJS/prism/issues/3320)) [`d6c53726`](https://github.com/PrismJS/prism/commit/d6c53726)\n* __Scala__\n    * Added support for interpolated strings ([#3293](https://github.com/PrismJS/prism/issues/3293)) [`441a1422`](https://github.com/PrismJS/prism/commit/441a1422)\n* __Systemd configuration file__\n    * Swap out `operator` for `punctuation` ([#3306](https://github.com/PrismJS/prism/issues/3306)) [`2eb89e15`](https://github.com/PrismJS/prism/commit/2eb89e15)\n\n### Updated plugins\n\n* __Command Line__\n    * Escape markup in command line output ([#3341](https://github.com/PrismJS/prism/issues/3341)) [`e002e78c`](https://github.com/PrismJS/prism/commit/e002e78c)\n    * Add support for line continuation and improved colors ([#3326](https://github.com/PrismJS/prism/issues/3326)) [`1784b175`](https://github.com/PrismJS/prism/commit/1784b175)\n    * Added span around command and output ([#3312](https://github.com/PrismJS/prism/issues/3312)) [`82d0ca15`](https://github.com/PrismJS/prism/commit/82d0ca15)\n\n### Other\n\n* __Core__\n    * Added better error message for missing grammars ([#3311](https://github.com/PrismJS/prism/issues/3311)) [`2cc4660b`](https://github.com/PrismJS/prism/commit/2cc4660b)\n\n## 1.26.0 (2022-01-06)\n\n### New components\n\n* __Atmel AVR Assembly__ ([#2078](https://github.com/PrismJS/prism/issues/2078)) [`b5a70e4c`](https://github.com/PrismJS/prism/commit/b5a70e4c)\n* __Go module__ ([#3209](https://github.com/PrismJS/prism/issues/3209)) [`8476a9ab`](https://github.com/PrismJS/prism/commit/8476a9ab)\n* __Keepalived Configure__ ([#2417](https://github.com/PrismJS/prism/issues/2417)) [`d908e457`](https://github.com/PrismJS/prism/commit/d908e457)\n* __Tremor__ & __Trickle__ & __Troy__ ([#3087](https://github.com/PrismJS/prism/issues/3087)) [`ec25ba65`](https://github.com/PrismJS/prism/commit/ec25ba65)\n* __Web IDL__ ([#3107](https://github.com/PrismJS/prism/issues/3107)) [`ef53f021`](https://github.com/PrismJS/prism/commit/ef53f021)\n\n### Updated components\n\n* Use `\\d` for `[0-9]` ([#3097](https://github.com/PrismJS/prism/issues/3097)) [`9fe2f93e`](https://github.com/PrismJS/prism/commit/9fe2f93e)\n* __6502 Assembly__\n    * Use standard tokens and minor improvements ([#3184](https://github.com/PrismJS/prism/issues/3184)) [`929c33e0`](https://github.com/PrismJS/prism/commit/929c33e0)\n* __AppleScript__\n    * Use `class-name` standard token ([#3182](https://github.com/PrismJS/prism/issues/3182)) [`9f5e511d`](https://github.com/PrismJS/prism/commit/9f5e511d)\n* __AQL__\n    * Differentiate between strings and identifiers ([#3183](https://github.com/PrismJS/prism/issues/3183)) [`fa540ab7`](https://github.com/PrismJS/prism/commit/fa540ab7)\n* __Arduino__\n    * Added `ino` alias ([#2990](https://github.com/PrismJS/prism/issues/2990)) [`5b7ce5e4`](https://github.com/PrismJS/prism/commit/5b7ce5e4)\n* __Avro IDL__\n    * Removed char syntax ([#3185](https://github.com/PrismJS/prism/issues/3185)) [`c7809285`](https://github.com/PrismJS/prism/commit/c7809285)\n* __Bash__\n    * Added `node` to known commands ([#3291](https://github.com/PrismJS/prism/issues/3291)) [`4b19b502`](https://github.com/PrismJS/prism/commit/4b19b502)\n    * Added `vcpkg` command ([#3282](https://github.com/PrismJS/prism/issues/3282)) [`b351bc69`](https://github.com/PrismJS/prism/commit/b351bc69)\n    * Added `docker` and `podman` commands ([#3237](https://github.com/PrismJS/prism/issues/3237)) [`8c5ed251`](https://github.com/PrismJS/prism/commit/8c5ed251)\n* __Birb__\n    * Fixed class name false positives ([#3111](https://github.com/PrismJS/prism/issues/3111)) [`d7017beb`](https://github.com/PrismJS/prism/commit/d7017beb)\n* __Bro__\n    * Removed `variable` and minor improvements ([#3186](https://github.com/PrismJS/prism/issues/3186)) [`4cebf34c`](https://github.com/PrismJS/prism/commit/4cebf34c)\n* __BSL (1C:Enterprise)__\n    * Made `directive` greedy ([#3112](https://github.com/PrismJS/prism/issues/3112)) [`5c412cbb`](https://github.com/PrismJS/prism/commit/5c412cbb)\n* __C__\n    * Added `char` token ([#3207](https://github.com/PrismJS/prism/issues/3207)) [`d85a64ae`](https://github.com/PrismJS/prism/commit/d85a64ae)\n* __C#__\n    * Added `char` token ([#3270](https://github.com/PrismJS/prism/issues/3270)) [`220bc40f`](https://github.com/PrismJS/prism/commit/220bc40f)\n    * Move everything into the IIFE ([#3077](https://github.com/PrismJS/prism/issues/3077)) [`9ed4cf6e`](https://github.com/PrismJS/prism/commit/9ed4cf6e)\n* __Clojure__\n    * Added `char` token ([#3188](https://github.com/PrismJS/prism/issues/3188)) [`1c88c7da`](https://github.com/PrismJS/prism/commit/1c88c7da)\n* __Concurnas__\n    * Improved tokenization ([#3189](https://github.com/PrismJS/prism/issues/3189)) [`7b34e65d`](https://github.com/PrismJS/prism/commit/7b34e65d)\n* __Content-Security-Policy__\n    * Improved tokenization ([#3276](https://github.com/PrismJS/prism/issues/3276)) [`a943f2bb`](https://github.com/PrismJS/prism/commit/a943f2bb)\n* __Coq__\n    * Improved attribute pattern performance ([#3085](https://github.com/PrismJS/prism/issues/3085)) [`2f9672aa`](https://github.com/PrismJS/prism/commit/2f9672aa)\n* __Crystal__\n    * Improved tokenization ([#3194](https://github.com/PrismJS/prism/issues/3194)) [`51e3ecc0`](https://github.com/PrismJS/prism/commit/51e3ecc0)\n* __Cypher__\n    * Removed non-standard use of `symbol` token name ([#3195](https://github.com/PrismJS/prism/issues/3195)) [`6af8a644`](https://github.com/PrismJS/prism/commit/6af8a644)\n* __D__\n    * Added standard char token ([#3196](https://github.com/PrismJS/prism/issues/3196)) [`dafdbdec`](https://github.com/PrismJS/prism/commit/dafdbdec)\n* __Dart__\n    * Added string interpolation and improved metadata ([#3197](https://github.com/PrismJS/prism/issues/3197)) [`e1370357`](https://github.com/PrismJS/prism/commit/e1370357)\n* __DataWeave__\n    * Fixed keywords being highlighted as functions ([#3113](https://github.com/PrismJS/prism/issues/3113)) [`532212b2`](https://github.com/PrismJS/prism/commit/532212b2)\n* __EditorConfig__\n    * Swap out `property` for `key`; alias with `attr-name` ([#3272](https://github.com/PrismJS/prism/issues/3272)) [`bee6ad56`](https://github.com/PrismJS/prism/commit/bee6ad56)\n* __Eiffel__\n    * Removed non-standard use of `builtin` name ([#3198](https://github.com/PrismJS/prism/issues/3198)) [`6add768b`](https://github.com/PrismJS/prism/commit/6add768b)\n* __Elm__\n    * Recognize unicode escapes as valid Char ([#3105](https://github.com/PrismJS/prism/issues/3105)) [`736c581d`](https://github.com/PrismJS/prism/commit/736c581d)\n* __ERB__\n    * Better embedding of Ruby ([#3192](https://github.com/PrismJS/prism/issues/3192)) [`336edeea`](https://github.com/PrismJS/prism/commit/336edeea)\n* __F#__\n    * Added `char` token ([#3271](https://github.com/PrismJS/prism/issues/3271)) [`b58cd722`](https://github.com/PrismJS/prism/commit/b58cd722)\n* __G-code__\n    * Use standard-conforming alias for checksum ([#3205](https://github.com/PrismJS/prism/issues/3205)) [`ee7ab563`](https://github.com/PrismJS/prism/commit/ee7ab563)\n* __GameMaker Language__\n    * Fixed `operator` token and added tests ([#3114](https://github.com/PrismJS/prism/issues/3114)) [`d359eeae`](https://github.com/PrismJS/prism/commit/d359eeae)\n* __Go__\n    * Added `char` token and improved `string` and `number` tokens ([#3208](https://github.com/PrismJS/prism/issues/3208)) [`f11b86e2`](https://github.com/PrismJS/prism/commit/f11b86e2)\n* __GraphQL__\n    * Optimized regexes ([#3136](https://github.com/PrismJS/prism/issues/3136)) [`8494519e`](https://github.com/PrismJS/prism/commit/8494519e)\n* __Haml__\n    * Use `symbol` alias for filter names ([#3210](https://github.com/PrismJS/prism/issues/3210)) [`3d410670`](https://github.com/PrismJS/prism/commit/3d410670)\n    * Improved filter and interpolation tokenization ([#3191](https://github.com/PrismJS/prism/issues/3191)) [`005ba469`](https://github.com/PrismJS/prism/commit/005ba469)\n* __Haxe__\n    * Improved tokenization ([#3211](https://github.com/PrismJS/prism/issues/3211)) [`f41bcf23`](https://github.com/PrismJS/prism/commit/f41bcf23)\n* __Hoon__\n    * Simplified the language definition a little ([#3212](https://github.com/PrismJS/prism/issues/3212)) [`81920b62`](https://github.com/PrismJS/prism/commit/81920b62)\n* __HTTP__\n    * Added support for special header value tokenization ([#3275](https://github.com/PrismJS/prism/issues/3275)) [`3362fc79`](https://github.com/PrismJS/prism/commit/3362fc79)\n    * Relax pattern for body ([#3169](https://github.com/PrismJS/prism/issues/3169)) [`22d0c6ba`](https://github.com/PrismJS/prism/commit/22d0c6ba)\n* __HTTP Public-Key-Pins__\n    * Improved tokenization ([#3278](https://github.com/PrismJS/prism/issues/3278)) [`0f1b5810`](https://github.com/PrismJS/prism/commit/0f1b5810)\n* __HTTP Strict-Transport-Security__\n    * Improved tokenization ([#3277](https://github.com/PrismJS/prism/issues/3277)) [`3d708b97`](https://github.com/PrismJS/prism/commit/3d708b97)\n* __Idris__\n    * Fixed import statements ([#3115](https://github.com/PrismJS/prism/issues/3115)) [`15cb3b78`](https://github.com/PrismJS/prism/commit/15cb3b78)\n* __Io__\n    * Simplified comment token ([#3214](https://github.com/PrismJS/prism/issues/3214)) [`c2afa59b`](https://github.com/PrismJS/prism/commit/c2afa59b)\n* __J__\n    * Made comments greedy ([#3215](https://github.com/PrismJS/prism/issues/3215)) [`5af16014`](https://github.com/PrismJS/prism/commit/5af16014)\n* __Java__\n    * Added `char` token ([#3217](https://github.com/PrismJS/prism/issues/3217)) [`0a9f909c`](https://github.com/PrismJS/prism/commit/0a9f909c)\n* __Java stack trace__\n    * Removed unreachable parts of regexes ([#3219](https://github.com/PrismJS/prism/issues/3219)) [`fa55492b`](https://github.com/PrismJS/prism/commit/fa55492b)\n    * Added missing lookbehinds ([#3116](https://github.com/PrismJS/prism/issues/3116)) [`cfb2e782`](https://github.com/PrismJS/prism/commit/cfb2e782)\n* __JavaScript__\n    * Improved `number` pattern ([#3149](https://github.com/PrismJS/prism/issues/3149)) [`5a24cbff`](https://github.com/PrismJS/prism/commit/5a24cbff)\n    * Added properties ([#3099](https://github.com/PrismJS/prism/issues/3099)) [`3b2238fa`](https://github.com/PrismJS/prism/commit/3b2238fa)\n* __Jolie__\n    * Improved tokenization ([#3221](https://github.com/PrismJS/prism/issues/3221)) [`dfbb2020`](https://github.com/PrismJS/prism/commit/dfbb2020)\n* __JQ__\n    * Improved performance of strings ([#3084](https://github.com/PrismJS/prism/issues/3084)) [`233415b8`](https://github.com/PrismJS/prism/commit/233415b8)\n* __JS stack trace__\n    * Added missing boundary assertion ([#3117](https://github.com/PrismJS/prism/issues/3117)) [`23d9aec1`](https://github.com/PrismJS/prism/commit/23d9aec1)\n* __Julia__\n    * Added `char` token ([#3223](https://github.com/PrismJS/prism/issues/3223)) [`3a876df0`](https://github.com/PrismJS/prism/commit/3a876df0)\n* __Keyman__\n    * Improved tokenization ([#3224](https://github.com/PrismJS/prism/issues/3224)) [`baa95cab`](https://github.com/PrismJS/prism/commit/baa95cab)\n* __Kotlin__\n    * Added `char` token and improved string interpolation ([#3225](https://github.com/PrismJS/prism/issues/3225)) [`563cd73e`](https://github.com/PrismJS/prism/commit/563cd73e)\n* __Latte__\n    * Use standard token names and combined delimiter tokens ([#3226](https://github.com/PrismJS/prism/issues/3226)) [`6b168a3b`](https://github.com/PrismJS/prism/commit/6b168a3b)\n* __Liquid__\n    * Removed unmatchable object variants ([#3135](https://github.com/PrismJS/prism/issues/3135)) [`05e7ab04`](https://github.com/PrismJS/prism/commit/05e7ab04)\n* __Lisp__\n    * Improved `defun` ([#3130](https://github.com/PrismJS/prism/issues/3130)) [`e8f84a6c`](https://github.com/PrismJS/prism/commit/e8f84a6c)\n* __Makefile__\n    * Use standard token names correctly ([#3227](https://github.com/PrismJS/prism/issues/3227)) [`21a3c2d7`](https://github.com/PrismJS/prism/commit/21a3c2d7)\n* __Markdown__\n    * Fixed typo in token name ([#3101](https://github.com/PrismJS/prism/issues/3101)) [`00f77a2c`](https://github.com/PrismJS/prism/commit/00f77a2c)\n* __MAXScript__\n    * Various improvements ([#3181](https://github.com/PrismJS/prism/issues/3181)) [`e9b856c8`](https://github.com/PrismJS/prism/commit/e9b856c8)\n    * Fixed booleans not being highlighted ([#3134](https://github.com/PrismJS/prism/issues/3134)) [`c6574e6b`](https://github.com/PrismJS/prism/commit/c6574e6b)\n* __Monkey__\n    * Use standard tokens correctly ([#3228](https://github.com/PrismJS/prism/issues/3228)) [`c1025aa6`](https://github.com/PrismJS/prism/commit/c1025aa6)\n* __N1QL__\n    * Updated keywords + minor improvements ([#3229](https://github.com/PrismJS/prism/issues/3229)) [`642d93ec`](https://github.com/PrismJS/prism/commit/642d93ec)\n* __nginx__\n    * Made some patterns greedy ([#3230](https://github.com/PrismJS/prism/issues/3230)) [`7b72e0ad`](https://github.com/PrismJS/prism/commit/7b72e0ad)\n* __Nim__\n    * Added `char` token and made some tokens greedy ([#3231](https://github.com/PrismJS/prism/issues/3231)) [`2334b4b6`](https://github.com/PrismJS/prism/commit/2334b4b6)\n    * Fixed backtick identifier ([#3118](https://github.com/PrismJS/prism/issues/3118)) [`75331bea`](https://github.com/PrismJS/prism/commit/75331bea)\n* __Nix__\n    * Use standard token name correctly ([#3232](https://github.com/PrismJS/prism/issues/3232)) [`5bf6e35f`](https://github.com/PrismJS/prism/commit/5bf6e35f)\n    * Removed unmatchable token ([#3119](https://github.com/PrismJS/prism/issues/3119)) [`dc1e808f`](https://github.com/PrismJS/prism/commit/dc1e808f)\n* __NSIS__\n    * Made `comment` greedy ([#3234](https://github.com/PrismJS/prism/issues/3234)) [`969f152a`](https://github.com/PrismJS/prism/commit/969f152a)\n    * Update regex pattern for variables ([#3266](https://github.com/PrismJS/prism/issues/3266)) [`adcc8784`](https://github.com/PrismJS/prism/commit/adcc8784)\n    * Update regex for constants pattern ([#3267](https://github.com/PrismJS/prism/issues/3267)) [`55583fb2`](https://github.com/PrismJS/prism/commit/55583fb2)\n* __Objective-C__\n    * Improved `string` token ([#3235](https://github.com/PrismJS/prism/issues/3235)) [`8e0e95f3`](https://github.com/PrismJS/prism/commit/8e0e95f3)\n* __OCaml__\n    * Improved tokenization ([#3269](https://github.com/PrismJS/prism/issues/3269)) [`7bcc5da0`](https://github.com/PrismJS/prism/commit/7bcc5da0)\n    * Removed unmatchable punctuation variant ([#3120](https://github.com/PrismJS/prism/issues/3120)) [`314d6994`](https://github.com/PrismJS/prism/commit/314d6994)\n* __Oz__\n    * Improved tokenization ([#3240](https://github.com/PrismJS/prism/issues/3240)) [`a3905c04`](https://github.com/PrismJS/prism/commit/a3905c04)\n* __Pascal__\n    * Added support for asm and directives ([#2653](https://github.com/PrismJS/prism/issues/2653)) [`f053af13`](https://github.com/PrismJS/prism/commit/f053af13)\n* __PATROL Scripting Language__\n    * Added `boolean` token ([#3248](https://github.com/PrismJS/prism/issues/3248)) [`a5b6c5eb`](https://github.com/PrismJS/prism/commit/a5b6c5eb)\n* __Perl__\n    * Improved tokenization ([#3241](https://github.com/PrismJS/prism/issues/3241)) [`f22ea9f9`](https://github.com/PrismJS/prism/commit/f22ea9f9)\n* __PHP__\n    * Removed useless keyword tokens ([#3121](https://github.com/PrismJS/prism/issues/3121)) [`ee62a080`](https://github.com/PrismJS/prism/commit/ee62a080)\n* __PHP Extras__\n    * Improved `scope` and `this` ([#3243](https://github.com/PrismJS/prism/issues/3243)) [`59ef51db`](https://github.com/PrismJS/prism/commit/59ef51db)\n* __PL/SQL__\n    * Updated keywords + other improvements ([#3109](https://github.com/PrismJS/prism/issues/3109)) [`e7ba877b`](https://github.com/PrismJS/prism/commit/e7ba877b)\n* __PowerQuery__\n    * Improved tokenization and use standard tokens correctly ([#3244](https://github.com/PrismJS/prism/issues/3244)) [`5688f487`](https://github.com/PrismJS/prism/commit/5688f487)\n    * Removed useless `data-type` alternative ([#3122](https://github.com/PrismJS/prism/issues/3122)) [`eeb13996`](https://github.com/PrismJS/prism/commit/eeb13996)\n* __PowerShell__\n    * Fixed lookbehind + refactoring ([#3245](https://github.com/PrismJS/prism/issues/3245)) [`d30a2da6`](https://github.com/PrismJS/prism/commit/d30a2da6)\n* __Processing__\n    * Use standard tokens correctly ([#3246](https://github.com/PrismJS/prism/issues/3246)) [`5ee8c557`](https://github.com/PrismJS/prism/commit/5ee8c557)\n* __Prolog__\n    * Removed variable token + minor improvements ([#3247](https://github.com/PrismJS/prism/issues/3247)) [`bacf9ae3`](https://github.com/PrismJS/prism/commit/bacf9ae3)\n* __Pug__\n    * Improved filter tokenization ([#3258](https://github.com/PrismJS/prism/issues/3258)) [`0390e644`](https://github.com/PrismJS/prism/commit/0390e644)\n* __PureBasic__\n    * Fixed token order inside `asm` token ([#3123](https://github.com/PrismJS/prism/issues/3123)) [`f3b25786`](https://github.com/PrismJS/prism/commit/f3b25786)\n* __Python__\n    * Made `comment` greedy ([#3249](https://github.com/PrismJS/prism/issues/3249)) [`8ecef306`](https://github.com/PrismJS/prism/commit/8ecef306)\n    * Add `match` and `case` (soft) keywords ([#3142](https://github.com/PrismJS/prism/issues/3142)) [`3f24dc72`](https://github.com/PrismJS/prism/commit/3f24dc72)\n    * Recognize walrus operator ([#3126](https://github.com/PrismJS/prism/issues/3126)) [`18bd101c`](https://github.com/PrismJS/prism/commit/18bd101c)\n    * Fixed numbers ending with a dot ([#3106](https://github.com/PrismJS/prism/issues/3106)) [`2c63efa6`](https://github.com/PrismJS/prism/commit/2c63efa6)\n* __QML__\n    * Made `string` greedy ([#3250](https://github.com/PrismJS/prism/issues/3250)) [`1e6dcb51`](https://github.com/PrismJS/prism/commit/1e6dcb51)\n* __React JSX__\n    * Move alias property ([#3222](https://github.com/PrismJS/prism/issues/3222)) [`18c92048`](https://github.com/PrismJS/prism/commit/18c92048)\n* __React TSX__\n    * Removed `parameter` token ([#3090](https://github.com/PrismJS/prism/issues/3090)) [`0a313f4f`](https://github.com/PrismJS/prism/commit/0a313f4f)\n* __Reason__\n    * Use standard tokens correctly ([#3251](https://github.com/PrismJS/prism/issues/3251)) [`809af0d9`](https://github.com/PrismJS/prism/commit/809af0d9)\n* __Regex__\n    * Fixed char-class/char-set confusion ([#3124](https://github.com/PrismJS/prism/issues/3124)) [`4dde2e20`](https://github.com/PrismJS/prism/commit/4dde2e20)\n* __Ren'py__\n    * Improved language + added tests ([#3125](https://github.com/PrismJS/prism/issues/3125)) [`ede55b2c`](https://github.com/PrismJS/prism/commit/ede55b2c)\n* __Rip__\n    * Use standard `char` token ([#3252](https://github.com/PrismJS/prism/issues/3252)) [`2069ab0c`](https://github.com/PrismJS/prism/commit/2069ab0c)\n* __Ruby__\n    * Improved tokenization ([#3193](https://github.com/PrismJS/prism/issues/3193)) [`86028adb`](https://github.com/PrismJS/prism/commit/86028adb)\n* __Rust__\n    * Improved `type-definition` and use standard tokens correctly ([#3253](https://github.com/PrismJS/prism/issues/3253)) [`4049e5c6`](https://github.com/PrismJS/prism/commit/4049e5c6)\n* __Scheme__\n    * Use standard `char` token ([#3254](https://github.com/PrismJS/prism/issues/3254)) [`7d740c45`](https://github.com/PrismJS/prism/commit/7d740c45)\n    * Updates syntax for reals ([#3159](https://github.com/PrismJS/prism/issues/3159)) [`4eb81fa1`](https://github.com/PrismJS/prism/commit/4eb81fa1)\n* __Smalltalk__\n    * Use standard `char` token ([#3255](https://github.com/PrismJS/prism/issues/3255)) [`a7bb3001`](https://github.com/PrismJS/prism/commit/a7bb3001)\n    * Added `boolean` token ([#3100](https://github.com/PrismJS/prism/issues/3100)) [`51382524`](https://github.com/PrismJS/prism/commit/51382524)\n* __Smarty__\n    * Improved tokenization ([#3268](https://github.com/PrismJS/prism/issues/3268)) [`acc0bc09`](https://github.com/PrismJS/prism/commit/acc0bc09)\n* __SQL__\n    * Added identifier token ([#3141](https://github.com/PrismJS/prism/issues/3141)) [`4e00cddd`](https://github.com/PrismJS/prism/commit/4e00cddd)\n* __Squirrel__\n    * Use standard `char` token ([#3256](https://github.com/PrismJS/prism/issues/3256)) [`58a65bfd`](https://github.com/PrismJS/prism/commit/58a65bfd)\n* __Stan__\n    * Added missing keywords and HOFs ([#3238](https://github.com/PrismJS/prism/issues/3238)) [`afd77ed1`](https://github.com/PrismJS/prism/commit/afd77ed1)\n* __Structured Text (IEC 61131-3)__\n    * Structured text: Improved tokenization ([#3213](https://github.com/PrismJS/prism/issues/3213)) [`d04d166d`](https://github.com/PrismJS/prism/commit/d04d166d)\n* __Swift__\n    * Added support for `isolated` keyword ([#3174](https://github.com/PrismJS/prism/issues/3174)) [`18c828a6`](https://github.com/PrismJS/prism/commit/18c828a6)\n* __TAP__\n    * Conform to quoted-properties style ([#3127](https://github.com/PrismJS/prism/issues/3127)) [`3ef71533`](https://github.com/PrismJS/prism/commit/3ef71533)\n* __Tremor__\n    * Use standard `regex` token ([#3257](https://github.com/PrismJS/prism/issues/3257)) [`c56e4bf5`](https://github.com/PrismJS/prism/commit/c56e4bf5)\n* __Twig__\n    * Improved tokenization ([#3259](https://github.com/PrismJS/prism/issues/3259)) [`e03a7c24`](https://github.com/PrismJS/prism/commit/e03a7c24)\n* __TypeScript__\n    * Removed duplicate keywords ([#3132](https://github.com/PrismJS/prism/issues/3132)) [`91060fd6`](https://github.com/PrismJS/prism/commit/91060fd6)\n* __URI__\n    * Fixed IPv4 regex ([#3128](https://github.com/PrismJS/prism/issues/3128)) [`599e30ee`](https://github.com/PrismJS/prism/commit/599e30ee)\n* __V__\n    * Use standard `char` token ([#3260](https://github.com/PrismJS/prism/issues/3260)) [`e4373256`](https://github.com/PrismJS/prism/commit/e4373256)\n* __Verilog__\n    * Use standard tokens correctly ([#3261](https://github.com/PrismJS/prism/issues/3261)) [`43124129`](https://github.com/PrismJS/prism/commit/43124129)\n* __Visual Basic__\n    * Simplify regexes and use more common aliases ([#3262](https://github.com/PrismJS/prism/issues/3262)) [`aa73d448`](https://github.com/PrismJS/prism/commit/aa73d448)\n* __Wolfram language__\n    * Removed unmatchable punctuation variant ([#3133](https://github.com/PrismJS/prism/issues/3133)) [`a28a86ad`](https://github.com/PrismJS/prism/commit/a28a86ad)\n* __Xojo (REALbasic)__\n    * Proper token name for directives ([#3263](https://github.com/PrismJS/prism/issues/3263)) [`ffd8343f`](https://github.com/PrismJS/prism/commit/ffd8343f)\n* __Zig__\n    * Added missing keywords ([#3279](https://github.com/PrismJS/prism/issues/3279)) [`deed35e3`](https://github.com/PrismJS/prism/commit/deed35e3)\n    * Use standard `char` token ([#3264](https://github.com/PrismJS/prism/issues/3264)) [`c3f9fb70`](https://github.com/PrismJS/prism/commit/c3f9fb70)\n    * Fixed module comments and astral chars ([#3129](https://github.com/PrismJS/prism/issues/3129)) [`09a0e2ba`](https://github.com/PrismJS/prism/commit/09a0e2ba)\n\n### Updated plugins\n\n* __File Highlight__\n    * File highlight+data range ([#1813](https://github.com/PrismJS/prism/issues/1813)) [`d38592c5`](https://github.com/PrismJS/prism/commit/d38592c5)\n* __Keep Markup__\n    * Added `drop-tokens` option class ([#3166](https://github.com/PrismJS/prism/issues/3166)) [`b679cfe6`](https://github.com/PrismJS/prism/commit/b679cfe6)\n* __Line Highlight__\n    * Expose `highlightLines` function as `Prism.plugins.highlightLines` ([#3086](https://github.com/PrismJS/prism/issues/3086)) [`9f4c0e74`](https://github.com/PrismJS/prism/commit/9f4c0e74)\n* __Toolbar__\n    * Set `z-index` of `.toolbar` to 10 ([#3163](https://github.com/PrismJS/prism/issues/3163)) [`1cac3559`](https://github.com/PrismJS/prism/commit/1cac3559)\n\n### Updated themes\n\n* Coy: Set `z-index` to make shadows visible in colored table cells ([#3161](https://github.com/PrismJS/prism/issues/3161)) [`79f250f3`](https://github.com/PrismJS/prism/commit/79f250f3)\n* Coy: Added padding to account for box shadow ([#3143](https://github.com/PrismJS/prism/issues/3143)) [`a6a4ce7e`](https://github.com/PrismJS/prism/commit/a6a4ce7e)\n\n### Other\n\n* __Core__\n    * Added `setLanguage` util function ([#3167](https://github.com/PrismJS/prism/issues/3167)) [`b631949a`](https://github.com/PrismJS/prism/commit/b631949a)\n    * Fixed type error on null ([#3057](https://github.com/PrismJS/prism/issues/3057)) [`a80a68ba`](https://github.com/PrismJS/prism/commit/a80a68ba)\n    * Document `disableWorkerMessageHandler` ([#3088](https://github.com/PrismJS/prism/issues/3088)) [`213cf7be`](https://github.com/PrismJS/prism/commit/213cf7be)\n* __Infrastructure__\n    * Tests: Added `.html.test` files for replace `.js` language tests ([#3148](https://github.com/PrismJS/prism/issues/3148)) [`2e834c8c`](https://github.com/PrismJS/prism/commit/2e834c8c)\n    * Added regex coverage ([#3138](https://github.com/PrismJS/prism/issues/3138)) [`5333e281`](https://github.com/PrismJS/prism/commit/5333e281)\n    * Tests: Added `TestCaseFile` class and generalized `runTestCase` ([#3147](https://github.com/PrismJS/prism/issues/3147)) [`ae8888a0`](https://github.com/PrismJS/prism/commit/ae8888a0)\n    * Added even more language tests ([#3137](https://github.com/PrismJS/prism/issues/3137)) [`344d0b27`](https://github.com/PrismJS/prism/commit/344d0b27)\n    * Added more plugin tests ([#1969](https://github.com/PrismJS/prism/issues/1969)) [`a394a14d`](https://github.com/PrismJS/prism/commit/a394a14d)\n    * Added more language tests ([#3131](https://github.com/PrismJS/prism/issues/3131)) [`2f7f7364`](https://github.com/PrismJS/prism/commit/2f7f7364)\n    * `package.json`: Added `engines.node` field ([#3108](https://github.com/PrismJS/prism/issues/3108)) [`798ee4f6`](https://github.com/PrismJS/prism/commit/798ee4f6)\n    * Use tabs in `package(-lock).json` ([#3098](https://github.com/PrismJS/prism/issues/3098)) [`8daebb4a`](https://github.com/PrismJS/prism/commit/8daebb4a)\n    * Update `eslint-plugin-regexp@1.2.0` ([#3091](https://github.com/PrismJS/prism/issues/3091)) [`e6e1d5ae`](https://github.com/PrismJS/prism/commit/e6e1d5ae)\n    * Added minified CSS ([#3073](https://github.com/PrismJS/prism/issues/3073)) [`d63d6c0e`](https://github.com/PrismJS/prism/commit/d63d6c0e)\n* __Website__\n    * Readme: Clarify usage of our build system ([#3239](https://github.com/PrismJS/prism/issues/3239)) [`6f1d904a`](https://github.com/PrismJS/prism/commit/6f1d904a)\n    * Improved CDN usage URLs ([#3285](https://github.com/PrismJS/prism/issues/3285)) [`6c21b2f7`](https://github.com/PrismJS/prism/commit/6c21b2f7)\n    * Update download.html [`9d5424b6`](https://github.com/PrismJS/prism/commit/9d5424b6)\n    * Autoloader: Mention how to load grammars from URLs ([#3218](https://github.com/PrismJS/prism/issues/3218)) [`cefccdd1`](https://github.com/PrismJS/prism/commit/cefccdd1)\n    * Added PrismJS React and HTML tutorial link ([#3190](https://github.com/PrismJS/prism/issues/3190)) [`0ecdbdce`](https://github.com/PrismJS/prism/commit/0ecdbdce)\n    * Improved readability ([#3177](https://github.com/PrismJS/prism/issues/3177)) [`4433d7fe`](https://github.com/PrismJS/prism/commit/4433d7fe)\n    * Fixed red highlighting in Firefox ([#3178](https://github.com/PrismJS/prism/issues/3178)) [`746da79b`](https://github.com/PrismJS/prism/commit/746da79b)\n    * Use Keep markup to highlight code section ([#3164](https://github.com/PrismJS/prism/issues/3164)) [`ebd59e32`](https://github.com/PrismJS/prism/commit/ebd59e32)\n    * Document standard tokens and provide examples ([#3104](https://github.com/PrismJS/prism/issues/3104)) [`37551200`](https://github.com/PrismJS/prism/commit/37551200)\n    * Fixed dead link to third-party tutorial [#3155](https://github.com/PrismJS/prism/issues/3155) ([#3156](https://github.com/PrismJS/prism/issues/3156)) [`31b4c1b8`](https://github.com/PrismJS/prism/commit/31b4c1b8)\n    * Repositioned theme selector ([#3146](https://github.com/PrismJS/prism/issues/3146)) [`ea361e5a`](https://github.com/PrismJS/prism/commit/ea361e5a)\n    * Adjusted TOC's line height for better readability ([#3145](https://github.com/PrismJS/prism/issues/3145)) [`c5629706`](https://github.com/PrismJS/prism/commit/c5629706)\n    * Updated plugin header template ([#3144](https://github.com/PrismJS/prism/issues/3144)) [`faedfe85`](https://github.com/PrismJS/prism/commit/faedfe85)\n    * Update test and example pages to use Autoloader ([#1936](https://github.com/PrismJS/prism/issues/1936)) [`3d96eedc`](https://github.com/PrismJS/prism/commit/3d96eedc)\n\n## 1.25.0 (2021-09-16)\n\n### New components\n\n* __AviSynth__ ([#3071](https://github.com/PrismJS/prism/issues/3071)) [`746a4b1a`](https://github.com/PrismJS/prism/commit/746a4b1a)\n* __Avro IDL__ ([#3051](https://github.com/PrismJS/prism/issues/3051)) [`87e5a376`](https://github.com/PrismJS/prism/commit/87e5a376)\n* __Bicep__ ([#3027](https://github.com/PrismJS/prism/issues/3027)) [`c1dce998`](https://github.com/PrismJS/prism/commit/c1dce998)\n* __GAP (CAS)__ ([#3054](https://github.com/PrismJS/prism/issues/3054)) [`23cd9b65`](https://github.com/PrismJS/prism/commit/23cd9b65)\n* __GN__ ([#3062](https://github.com/PrismJS/prism/issues/3062)) [`4f97b82b`](https://github.com/PrismJS/prism/commit/4f97b82b)\n* __Hoon__ ([#2978](https://github.com/PrismJS/prism/issues/2978)) [`ea776756`](https://github.com/PrismJS/prism/commit/ea776756)\n* __Kusto__ ([#3068](https://github.com/PrismJS/prism/issues/3068)) [`e008ea05`](https://github.com/PrismJS/prism/commit/e008ea05)\n* __Magma (CAS)__ ([#3055](https://github.com/PrismJS/prism/issues/3055)) [`a1b67ce3`](https://github.com/PrismJS/prism/commit/a1b67ce3)\n* __MAXScript__ ([#3060](https://github.com/PrismJS/prism/issues/3060)) [`4fbdd2f8`](https://github.com/PrismJS/prism/commit/4fbdd2f8)\n* __Mermaid__ ([#3050](https://github.com/PrismJS/prism/issues/3050)) [`148c1eca`](https://github.com/PrismJS/prism/commit/148c1eca)\n* __Razor C#__ ([#3064](https://github.com/PrismJS/prism/issues/3064)) [`4433ccfc`](https://github.com/PrismJS/prism/commit/4433ccfc)\n* __Systemd configuration file__ ([#3053](https://github.com/PrismJS/prism/issues/3053)) [`8df825e0`](https://github.com/PrismJS/prism/commit/8df825e0)\n* __Wren__ ([#3063](https://github.com/PrismJS/prism/issues/3063)) [`6a356d25`](https://github.com/PrismJS/prism/commit/6a356d25)\n\n### Updated components\n\n* __Bicep__\n    * Added support for multiline and interpolated strings and other improvements ([#3028](https://github.com/PrismJS/prism/issues/3028)) [`748bb9ac`](https://github.com/PrismJS/prism/commit/748bb9ac)\n* __C#__\n    * Added `with` keyword & improved record support ([#2993](https://github.com/PrismJS/prism/issues/2993)) [`fdd291c0`](https://github.com/PrismJS/prism/commit/fdd291c0)\n    * Added `record`, `init`, and `nullable` keyword ([#2991](https://github.com/PrismJS/prism/issues/2991)) [`9b561565`](https://github.com/PrismJS/prism/commit/9b561565)\n    * Added context check for `from` keyword ([#2970](https://github.com/PrismJS/prism/issues/2970)) [`158f25d4`](https://github.com/PrismJS/prism/commit/158f25d4)\n* __C++__\n    * Fixed generic function false positive ([#3043](https://github.com/PrismJS/prism/issues/3043)) [`5de8947f`](https://github.com/PrismJS/prism/commit/5de8947f)\n* __Clojure__\n    * Improved tokenization ([#3056](https://github.com/PrismJS/prism/issues/3056)) [`8d0b74b5`](https://github.com/PrismJS/prism/commit/8d0b74b5)\n* __Hoon__\n    * Fixed mixed-case aura tokenization ([#3002](https://github.com/PrismJS/prism/issues/3002)) [`9c8911bd`](https://github.com/PrismJS/prism/commit/9c8911bd)\n* __Liquid__\n    * Added all objects from Shopify reference ([#2998](https://github.com/PrismJS/prism/issues/2998)) [`693b7433`](https://github.com/PrismJS/prism/commit/693b7433)\n    * Added `empty` keyword ([#2997](https://github.com/PrismJS/prism/issues/2997)) [`fe3bc526`](https://github.com/PrismJS/prism/commit/fe3bc526)\n* __Log file__\n    * Added support for Java stack traces ([#3003](https://github.com/PrismJS/prism/issues/3003)) [`b0365e70`](https://github.com/PrismJS/prism/commit/b0365e70)\n* __Markup__\n    * Made most patterns greedy ([#3065](https://github.com/PrismJS/prism/issues/3065)) [`52e8cee9`](https://github.com/PrismJS/prism/commit/52e8cee9)\n    * Fixed ReDoS ([#3078](https://github.com/PrismJS/prism/issues/3078)) [`0ff371bb`](https://github.com/PrismJS/prism/commit/0ff371bb)\n* __PureScript__\n    * Made `∀` a keyword (alias for `forall`) ([#3005](https://github.com/PrismJS/prism/issues/3005)) [`b38fc89a`](https://github.com/PrismJS/prism/commit/b38fc89a)\n    * Improved Haskell and PureScript ([#3020](https://github.com/PrismJS/prism/issues/3020)) [`679539ec`](https://github.com/PrismJS/prism/commit/679539ec)\n* __Python__\n    * Support for underscores in numbers ([#3039](https://github.com/PrismJS/prism/issues/3039)) [`6f5d68f7`](https://github.com/PrismJS/prism/commit/6f5d68f7)\n* __Sass__\n    * Fixed issues with CSS Extras ([#2994](https://github.com/PrismJS/prism/issues/2994)) [`14fdfe32`](https://github.com/PrismJS/prism/commit/14fdfe32)\n* __Shell session__\n    * Fixed command false positives ([#3048](https://github.com/PrismJS/prism/issues/3048)) [`35b88fcf`](https://github.com/PrismJS/prism/commit/35b88fcf)\n    * Added support for the percent sign as shell symbol ([#3010](https://github.com/PrismJS/prism/issues/3010)) [`4492b62b`](https://github.com/PrismJS/prism/commit/4492b62b)\n* __Swift__\n    * Major improvements ([#3022](https://github.com/PrismJS/prism/issues/3022)) [`8541db2e`](https://github.com/PrismJS/prism/commit/8541db2e)\n    * Added support for `@propertyWrapper`, `@MainActor`, and `@globalActor` ([#3009](https://github.com/PrismJS/prism/issues/3009)) [`ce5e0f01`](https://github.com/PrismJS/prism/commit/ce5e0f01)\n    * Added support for new Swift 5.5 keywords ([#2988](https://github.com/PrismJS/prism/issues/2988)) [`bb93fac0`](https://github.com/PrismJS/prism/commit/bb93fac0)\n* __TypeScript__\n    * Fixed keyword false positives ([#3001](https://github.com/PrismJS/prism/issues/3001)) [`212e0ef2`](https://github.com/PrismJS/prism/commit/212e0ef2)\n\n### Updated plugins\n\n* __JSONP Highlight__\n    * Refactored JSONP logic ([#3018](https://github.com/PrismJS/prism/issues/3018)) [`5126d1e1`](https://github.com/PrismJS/prism/commit/5126d1e1)\n* __Line Highlight__\n    * Extend highlight to full line width inside scroll container ([#3011](https://github.com/PrismJS/prism/issues/3011)) [`e289ec60`](https://github.com/PrismJS/prism/commit/e289ec60)\n* __Normalize Whitespace__\n    * Removed unnecessary checks ([#3017](https://github.com/PrismJS/prism/issues/3017)) [`63edf14c`](https://github.com/PrismJS/prism/commit/63edf14c)\n* __Previewers__\n    * Ensure popup is visible across themes ([#3080](https://github.com/PrismJS/prism/issues/3080)) [`c7b6a7f6`](https://github.com/PrismJS/prism/commit/c7b6a7f6)\n\n### Updated themes\n\n* __Twilight__\n    * Increase selector specificities of plugin overrides ([#3081](https://github.com/PrismJS/prism/issues/3081)) [`ffb20439`](https://github.com/PrismJS/prism/commit/ffb20439)\n\n### Other\n\n* __Infrastructure__\n    * Added benchmark suite ([#2153](https://github.com/PrismJS/prism/issues/2153)) [`44456b21`](https://github.com/PrismJS/prism/commit/44456b21)\n    * Tests: Insert expected JSON by Default ([#2960](https://github.com/PrismJS/prism/issues/2960)) [`e997dd35`](https://github.com/PrismJS/prism/commit/e997dd35)\n    * Tests: Improved dection of empty patterns ([#3058](https://github.com/PrismJS/prism/issues/3058)) [`d216e602`](https://github.com/PrismJS/prism/commit/d216e602)\n* __Website__\n    * Highlight Keywords: More documentation ([#3049](https://github.com/PrismJS/prism/issues/3049)) [`247fd9a3`](https://github.com/PrismJS/prism/commit/247fd9a3)\n\n\n## 1.24.1 (2021-07-03)\n\n### Updated components\n\n* __Markdown__\n    * Fixed Markdown not working in NodeJS ([#2977](https://github.com/PrismJS/prism/issues/2977)) [`151121cd`](https://github.com/PrismJS/prism/commit/151121cd)\n\n### Updated plugins\n\n* __Toolbar__\n    * Fixed styles being applies to nested elements ([#2980](https://github.com/PrismJS/prism/issues/2980)) [`748ecddc`](https://github.com/PrismJS/prism/commit/748ecddc)\n\n\n## 1.24.0 (2021-06-27)\n\n### New components\n\n* __CFScript__ ([#2771](https://github.com/PrismJS/prism/issues/2771)) [`b0a6ec85`](https://github.com/PrismJS/prism/commit/b0a6ec85)\n* __ChaiScript__ ([#2706](https://github.com/PrismJS/prism/issues/2706)) [`3f7d7453`](https://github.com/PrismJS/prism/commit/3f7d7453)\n* __COBOL__ ([#2800](https://github.com/PrismJS/prism/issues/2800)) [`7e5f78ff`](https://github.com/PrismJS/prism/commit/7e5f78ff)\n* __Coq__ ([#2803](https://github.com/PrismJS/prism/issues/2803)) [`41e25d3c`](https://github.com/PrismJS/prism/commit/41e25d3c)\n* __CSV__ ([#2794](https://github.com/PrismJS/prism/issues/2794)) [`f9b69528`](https://github.com/PrismJS/prism/commit/f9b69528)\n* __DOT (Graphviz)__ ([#2690](https://github.com/PrismJS/prism/issues/2690)) [`1f91868e`](https://github.com/PrismJS/prism/commit/1f91868e)\n* __False__ ([#2802](https://github.com/PrismJS/prism/issues/2802)) [`99a21dc5`](https://github.com/PrismJS/prism/commit/99a21dc5)\n* __ICU Message Format__ ([#2745](https://github.com/PrismJS/prism/issues/2745)) [`bf4e7ba9`](https://github.com/PrismJS/prism/commit/bf4e7ba9)\n* __Idris__ ([#2755](https://github.com/PrismJS/prism/issues/2755)) [`e9314415`](https://github.com/PrismJS/prism/commit/e9314415)\n* __Jexl__ ([#2764](https://github.com/PrismJS/prism/issues/2764)) [`7e51b99c`](https://github.com/PrismJS/prism/commit/7e51b99c)\n* __KuMir (КуМир)__ ([#2760](https://github.com/PrismJS/prism/issues/2760)) [`3419fb77`](https://github.com/PrismJS/prism/commit/3419fb77)\n* __Log file__ ([#2796](https://github.com/PrismJS/prism/issues/2796)) [`2bc6475b`](https://github.com/PrismJS/prism/commit/2bc6475b)\n* __Nevod__ ([#2798](https://github.com/PrismJS/prism/issues/2798)) [`f84c49c5`](https://github.com/PrismJS/prism/commit/f84c49c5)\n* __OpenQasm__ ([#2797](https://github.com/PrismJS/prism/issues/2797)) [`1a2347a3`](https://github.com/PrismJS/prism/commit/1a2347a3)\n* __PATROL Scripting Language__ ([#2739](https://github.com/PrismJS/prism/issues/2739)) [`18c67b49`](https://github.com/PrismJS/prism/commit/18c67b49)\n* __Q#__ ([#2804](https://github.com/PrismJS/prism/issues/2804)) [`1b63cd01`](https://github.com/PrismJS/prism/commit/1b63cd01)\n* __Rego__ ([#2624](https://github.com/PrismJS/prism/issues/2624)) [`e38986f9`](https://github.com/PrismJS/prism/commit/e38986f9)\n* __Squirrel__ ([#2721](https://github.com/PrismJS/prism/issues/2721)) [`fd1081d2`](https://github.com/PrismJS/prism/commit/fd1081d2)\n* __URI__ ([#2708](https://github.com/PrismJS/prism/issues/2708)) [`bbc77d19`](https://github.com/PrismJS/prism/commit/bbc77d19)\n* __V__ ([#2687](https://github.com/PrismJS/prism/issues/2687)) [`72962701`](https://github.com/PrismJS/prism/commit/72962701)\n* __Wolfram language__ & __Mathematica__ & __Mathematica Notebook__ ([#2921](https://github.com/PrismJS/prism/issues/2921)) [`c4f6b2cc`](https://github.com/PrismJS/prism/commit/c4f6b2cc)\n\n### Updated components\n\n* Fixed problems reported by `regexp/no-dupe-disjunctions` ([#2952](https://github.com/PrismJS/prism/issues/2952)) [`f471d2d7`](https://github.com/PrismJS/prism/commit/f471d2d7)\n* Fixed some cases of quadratic worst-case runtime ([#2922](https://github.com/PrismJS/prism/issues/2922)) [`79d22182`](https://github.com/PrismJS/prism/commit/79d22182)\n* Fixed 2 cases of exponential backtracking ([#2774](https://github.com/PrismJS/prism/issues/2774)) [`d85e30da`](https://github.com/PrismJS/prism/commit/d85e30da)\n* __AQL__\n    * Update for ArangoDB 3.8 ([#2842](https://github.com/PrismJS/prism/issues/2842)) [`ea82478d`](https://github.com/PrismJS/prism/commit/ea82478d)\n* __AutoHotkey__\n    * Improved tag pattern ([#2920](https://github.com/PrismJS/prism/issues/2920)) [`fc2a3334`](https://github.com/PrismJS/prism/commit/fc2a3334)\n* __Bash__\n    * Accept hyphens in function names ([#2832](https://github.com/PrismJS/prism/issues/2832)) [`e4ad22ad`](https://github.com/PrismJS/prism/commit/e4ad22ad)\n    * Fixed single-quoted strings ([#2792](https://github.com/PrismJS/prism/issues/2792)) [`e5cfdb4a`](https://github.com/PrismJS/prism/commit/e5cfdb4a)\n* __C++__\n    * Added support for generic functions and made `::` punctuation ([#2814](https://github.com/PrismJS/prism/issues/2814)) [`3df62fd0`](https://github.com/PrismJS/prism/commit/3df62fd0)\n    * Added missing keywords and modules ([#2763](https://github.com/PrismJS/prism/issues/2763)) [`88fa72cf`](https://github.com/PrismJS/prism/commit/88fa72cf)\n* __Dart__\n    * Improved support for classes & generics ([#2810](https://github.com/PrismJS/prism/issues/2810)) [`d0bcd074`](https://github.com/PrismJS/prism/commit/d0bcd074)\n* __Docker__\n    * Improvements ([#2720](https://github.com/PrismJS/prism/issues/2720)) [`93dd83c2`](https://github.com/PrismJS/prism/commit/93dd83c2)\n* __Elixir__\n    * Added missing keywords ([#2958](https://github.com/PrismJS/prism/issues/2958)) [`114e4626`](https://github.com/PrismJS/prism/commit/114e4626)\n    * Added missing keyword and other improvements ([#2773](https://github.com/PrismJS/prism/issues/2773)) [`e6c0d298`](https://github.com/PrismJS/prism/commit/e6c0d298)\n    * Added `defdelagate` keyword and highlighting for function/module names ([#2709](https://github.com/PrismJS/prism/issues/2709)) [`59f725d7`](https://github.com/PrismJS/prism/commit/59f725d7)\n* __F#__\n    * Fixed comment false positive ([#2703](https://github.com/PrismJS/prism/issues/2703)) [`a5d7178c`](https://github.com/PrismJS/prism/commit/a5d7178c)\n* __GraphQL__\n    * Fixed `definition-query` and `definition-mutation` tokens ([#2964](https://github.com/PrismJS/prism/issues/2964)) [`bfd7fded`](https://github.com/PrismJS/prism/commit/bfd7fded)\n    * Added more detailed tokens ([#2939](https://github.com/PrismJS/prism/issues/2939)) [`34f24ac9`](https://github.com/PrismJS/prism/commit/34f24ac9)\n* __Handlebars__\n    * Added `hbs` alias ([#2874](https://github.com/PrismJS/prism/issues/2874)) [`43976351`](https://github.com/PrismJS/prism/commit/43976351)\n* __HTTP__\n    * Fixed body not being highlighted ([#2734](https://github.com/PrismJS/prism/issues/2734)) [`1dfc8271`](https://github.com/PrismJS/prism/commit/1dfc8271)\n    * More granular tokenization ([#2722](https://github.com/PrismJS/prism/issues/2722)) [`6183fd9b`](https://github.com/PrismJS/prism/commit/6183fd9b)\n    * Allow root path in request line ([#2711](https://github.com/PrismJS/prism/issues/2711)) [`4e7b2a82`](https://github.com/PrismJS/prism/commit/4e7b2a82)\n* __Ini__\n    * Consistently mimic Win32 INI parsing ([#2779](https://github.com/PrismJS/prism/issues/2779)) [`42d24fa2`](https://github.com/PrismJS/prism/commit/42d24fa2)\n* __Java__\n    * Improved generics ([#2812](https://github.com/PrismJS/prism/issues/2812)) [`4ec7535c`](https://github.com/PrismJS/prism/commit/4ec7535c)\n* __JavaScript__\n    * Added support for import assertions ([#2953](https://github.com/PrismJS/prism/issues/2953)) [`ab7c9953`](https://github.com/PrismJS/prism/commit/ab7c9953)\n    * Added support for RegExp Match Indices ([#2900](https://github.com/PrismJS/prism/issues/2900)) [`415651a0`](https://github.com/PrismJS/prism/commit/415651a0)\n    * Added hashbang and private getters/setters ([#2815](https://github.com/PrismJS/prism/issues/2815)) [`9c610ae6`](https://github.com/PrismJS/prism/commit/9c610ae6)\n    * Improved contextual keywords ([#2713](https://github.com/PrismJS/prism/issues/2713)) [`022f90a0`](https://github.com/PrismJS/prism/commit/022f90a0)\n* __JS Templates__\n    * Added SQL templates ([#2945](https://github.com/PrismJS/prism/issues/2945)) [`abab9104`](https://github.com/PrismJS/prism/commit/abab9104)\n* __JSON__\n    * Fixed backtracking issue in Safari ([#2691](https://github.com/PrismJS/prism/issues/2691)) [`cf28d1b2`](https://github.com/PrismJS/prism/commit/cf28d1b2)\n* __Liquid__\n    * Added Markup support, missing tokens, and other improvements ([#2950](https://github.com/PrismJS/prism/issues/2950)) [`ac1d12f9`](https://github.com/PrismJS/prism/commit/ac1d12f9)\n* __Log file__\n    * Minor improvements ([#2851](https://github.com/PrismJS/prism/issues/2851)) [`45ec4a88`](https://github.com/PrismJS/prism/commit/45ec4a88)\n* __Markdown__\n    * Improved code snippets ([#2967](https://github.com/PrismJS/prism/issues/2967)) [`e9477d83`](https://github.com/PrismJS/prism/commit/e9477d83)\n    * Workaround for incorrect highlighting due to double `wrap` hook ([#2719](https://github.com/PrismJS/prism/issues/2719)) [`2b355c98`](https://github.com/PrismJS/prism/commit/2b355c98)\n* __Markup__\n    * Added support for DOM event attributes ([#2702](https://github.com/PrismJS/prism/issues/2702)) [`8dbbbb35`](https://github.com/PrismJS/prism/commit/8dbbbb35)\n* __nginx__\n    * Complete rewrite ([#2793](https://github.com/PrismJS/prism/issues/2793)) [`5943f4cb`](https://github.com/PrismJS/prism/commit/5943f4cb)\n* __PHP__\n    * Fixed functions with namespaces ([#2889](https://github.com/PrismJS/prism/issues/2889)) [`87d79390`](https://github.com/PrismJS/prism/commit/87d79390)\n    * Fixed string interpolation ([#2864](https://github.com/PrismJS/prism/issues/2864)) [`cf3755cb`](https://github.com/PrismJS/prism/commit/cf3755cb)\n    * Added missing PHP 7.4 `fn` keyword ([#2858](https://github.com/PrismJS/prism/issues/2858)) [`e0ee93f1`](https://github.com/PrismJS/prism/commit/e0ee93f1)\n    * Fixed methods with keyword names + minor improvements ([#2818](https://github.com/PrismJS/prism/issues/2818)) [`7e8cd40d`](https://github.com/PrismJS/prism/commit/7e8cd40d)\n    * Improved constant support for PHP 8.1 enums ([#2770](https://github.com/PrismJS/prism/issues/2770)) [`8019e2f6`](https://github.com/PrismJS/prism/commit/8019e2f6)\n    * Added support for PHP 8.1 enums ([#2752](https://github.com/PrismJS/prism/issues/2752)) [`f79b0eef`](https://github.com/PrismJS/prism/commit/f79b0eef)\n    * Class names at the start of a string are now highlighted correctly ([#2731](https://github.com/PrismJS/prism/issues/2731)) [`04ef309c`](https://github.com/PrismJS/prism/commit/04ef309c)\n    * Numeral syntax improvements ([#2701](https://github.com/PrismJS/prism/issues/2701)) [`01af04ed`](https://github.com/PrismJS/prism/commit/01af04ed)\n* __React JSX__\n    * Added support for general spread expressions ([#2754](https://github.com/PrismJS/prism/issues/2754)) [`9f59f52d`](https://github.com/PrismJS/prism/commit/9f59f52d)\n    * Added support for comments inside tags ([#2728](https://github.com/PrismJS/prism/issues/2728)) [`30b0444f`](https://github.com/PrismJS/prism/commit/30b0444f)\n* __reST (reStructuredText)__\n    * Fixed `inline` pattern ([#2946](https://github.com/PrismJS/prism/issues/2946)) [`a7656de6`](https://github.com/PrismJS/prism/commit/a7656de6)\n* __Ruby__\n    * Added heredoc literals ([#2885](https://github.com/PrismJS/prism/issues/2885)) [`20b77bff`](https://github.com/PrismJS/prism/commit/20b77bff)\n    * Added missing regex flags ([#2845](https://github.com/PrismJS/prism/issues/2845)) [`3786f396`](https://github.com/PrismJS/prism/commit/3786f396)\n    * Added missing regex interpolation ([#2841](https://github.com/PrismJS/prism/issues/2841)) [`f08c2f7f`](https://github.com/PrismJS/prism/commit/f08c2f7f)\n* __Scheme__\n    * Added support for high Unicode characters ([#2693](https://github.com/PrismJS/prism/issues/2693)) [`0e61a7e1`](https://github.com/PrismJS/prism/commit/0e61a7e1)\n    * Added bracket support ([#2813](https://github.com/PrismJS/prism/issues/2813)) [`1c6c0bf3`](https://github.com/PrismJS/prism/commit/1c6c0bf3)\n* __Shell session__\n    * Fixed multi-line commands ([#2872](https://github.com/PrismJS/prism/issues/2872)) [`cda976b1`](https://github.com/PrismJS/prism/commit/cda976b1)\n    * Commands prefixed with a path are now detected ([#2686](https://github.com/PrismJS/prism/issues/2686)) [`c83fd0b8`](https://github.com/PrismJS/prism/commit/c83fd0b8)\n* __SQL__\n    * Added `ILIKE` operator ([#2704](https://github.com/PrismJS/prism/issues/2704)) [`6e34771f`](https://github.com/PrismJS/prism/commit/6e34771f)\n* __Swift__\n    * Added `some` keyword ([#2756](https://github.com/PrismJS/prism/issues/2756)) [`cf354ef5`](https://github.com/PrismJS/prism/commit/cf354ef5)\n* __TypeScript__\n    * Updated keywords ([#2861](https://github.com/PrismJS/prism/issues/2861)) [`fe98d536`](https://github.com/PrismJS/prism/commit/fe98d536)\n    * Added support for decorators ([#2820](https://github.com/PrismJS/prism/issues/2820)) [`31cc2142`](https://github.com/PrismJS/prism/commit/31cc2142)\n* __VB.Net__\n    * Improved strings, comments, and punctuation ([#2782](https://github.com/PrismJS/prism/issues/2782)) [`a68f1fb6`](https://github.com/PrismJS/prism/commit/a68f1fb6)\n* __Xojo (REALbasic)__\n    * `REM` is no longer highlighted as a keyword in comments ([#2823](https://github.com/PrismJS/prism/issues/2823)) [`ebbbfd47`](https://github.com/PrismJS/prism/commit/ebbbfd47)\n    * Added last missing Keyword \"Selector\" ([#2807](https://github.com/PrismJS/prism/issues/2807)) [`e32e043b`](https://github.com/PrismJS/prism/commit/e32e043b)\n    * Added missing keywords ([#2805](https://github.com/PrismJS/prism/issues/2805)) [`459365ec`](https://github.com/PrismJS/prism/commit/459365ec)\n\n### Updated plugins\n\n* Made Match Braces and Custom Class compatible ([#2947](https://github.com/PrismJS/prism/issues/2947)) [`4b55bd6a`](https://github.com/PrismJS/prism/commit/4b55bd6a)\n* Consistent Prism check ([#2788](https://github.com/PrismJS/prism/issues/2788)) [`96335642`](https://github.com/PrismJS/prism/commit/96335642)\n* __Command Line__\n    * Don't modify empty code blocks ([#2896](https://github.com/PrismJS/prism/issues/2896)) [`c81c3319`](https://github.com/PrismJS/prism/commit/c81c3319)\n* __Copy to Clipboard__\n    * Removed ClipboardJS dependency ([#2784](https://github.com/PrismJS/prism/issues/2784)) [`d5e14e1a`](https://github.com/PrismJS/prism/commit/d5e14e1a)\n    * Fixed `clipboard.writeText` not working inside iFrames ([#2826](https://github.com/PrismJS/prism/issues/2826)) [`01b7b6f7`](https://github.com/PrismJS/prism/commit/01b7b6f7)\n    * Added support for custom styles ([#2789](https://github.com/PrismJS/prism/issues/2789)) [`4d7f75b0`](https://github.com/PrismJS/prism/commit/4d7f75b0)\n    * Make copy-to-clipboard configurable with multiple attributes ([#2723](https://github.com/PrismJS/prism/issues/2723)) [`2cb909e1`](https://github.com/PrismJS/prism/commit/2cb909e1)\n* __File Highlight__\n    * Fixed Prism check ([#2827](https://github.com/PrismJS/prism/issues/2827)) [`53d34b22`](https://github.com/PrismJS/prism/commit/53d34b22)\n* __Line Highlight__\n    * Fixed linkable line numbers not being initialized ([#2732](https://github.com/PrismJS/prism/issues/2732)) [`ccc73ab7`](https://github.com/PrismJS/prism/commit/ccc73ab7)\n* __Previewers__\n    * Use `classList` instead of `className` ([#2787](https://github.com/PrismJS/prism/issues/2787)) [`d298d46e`](https://github.com/PrismJS/prism/commit/d298d46e)\n\n### Other\n\n* __Core__\n    * Add `tabindex` to code blocks to enable keyboard navigation ([#2799](https://github.com/PrismJS/prism/issues/2799)) [`dbf70515`](https://github.com/PrismJS/prism/commit/dbf70515)\n    * Fixed greedy rematching reach bug ([#2705](https://github.com/PrismJS/prism/issues/2705)) [`b37987d3`](https://github.com/PrismJS/prism/commit/b37987d3)\n    * Added support for plaintext ([#2738](https://github.com/PrismJS/prism/issues/2738)) [`970674cf`](https://github.com/PrismJS/prism/commit/970674cf)\n* __Infrastructure__\n    * Added ESLint\n    * Added `npm-run-all` to clean up test command ([#2938](https://github.com/PrismJS/prism/issues/2938)) [`5d3d8088`](https://github.com/PrismJS/prism/commit/5d3d8088)\n    * Added link to Q&A to issue templates ([#2834](https://github.com/PrismJS/prism/issues/2834)) [`7cd9e794`](https://github.com/PrismJS/prism/commit/7cd9e794)\n    * CI: Run tests with NodeJS 16.x ([#2888](https://github.com/PrismJS/prism/issues/2888)) [`b77317c5`](https://github.com/PrismJS/prism/commit/b77317c5)\n    * Dangerfile: Trim merge base ([#2761](https://github.com/PrismJS/prism/issues/2761)) [`45b0e82a`](https://github.com/PrismJS/prism/commit/45b0e82a)\n    * Dangerfile: Fixed how changed files are determined ([#2757](https://github.com/PrismJS/prism/issues/2757)) [`0feb266f`](https://github.com/PrismJS/prism/commit/0feb266f)\n    * Deps: Updated regex tooling ([#2923](https://github.com/PrismJS/prism/issues/2923)) [`ad9878ad`](https://github.com/PrismJS/prism/commit/ad9878ad)\n    * Tests: Added `--language` for patterns tests ([#2929](https://github.com/PrismJS/prism/issues/2929)) [`a62ef796`](https://github.com/PrismJS/prism/commit/a62ef796)\n    * Tests: Fixed polynomial backtracking test ([#2891](https://github.com/PrismJS/prism/issues/2891)) [`8dbf1217`](https://github.com/PrismJS/prism/commit/8dbf1217)\n    * Tests: Fixed languages test discovery [`a9a199b6`](https://github.com/PrismJS/prism/commit/a9a199b6)\n    * Tests: Test discovery should ignore unsupported file extensions ([#2886](https://github.com/PrismJS/prism/issues/2886)) [`4492c5ce`](https://github.com/PrismJS/prism/commit/4492c5ce)\n    * Tests: Exhaustive pattern tests ([#2688](https://github.com/PrismJS/prism/issues/2688)) [`53151404`](https://github.com/PrismJS/prism/commit/53151404)\n    * Tests: Fixed pretty print incorrectly calculating print width ([#2821](https://github.com/PrismJS/prism/issues/2821)) [`5bc405e7`](https://github.com/PrismJS/prism/commit/5bc405e7)\n    * Tests: Automatically normalize line ends ([#2934](https://github.com/PrismJS/prism/issues/2934)) [`99f3ddcd`](https://github.com/PrismJS/prism/commit/99f3ddcd)\n    * Tests: Added `--insert` and `--update` parameters to language test ([#2809](https://github.com/PrismJS/prism/issues/2809)) [`4c8b855d`](https://github.com/PrismJS/prism/commit/4c8b855d)\n    * Tests: Stricter `components.json` tests ([#2758](https://github.com/PrismJS/prism/issues/2758)) [`933af805`](https://github.com/PrismJS/prism/commit/933af805)\n* __Website__\n    * Copy to clipboard: Fixed highlighting ([#2725](https://github.com/PrismJS/prism/issues/2725)) [`7a790bf9`](https://github.com/PrismJS/prism/commit/7a790bf9)\n    * Readme: Mention `npm ci` ([#2899](https://github.com/PrismJS/prism/issues/2899)) [`91f3aaed`](https://github.com/PrismJS/prism/commit/91f3aaed)\n    * Readme: Added Node and npm version requirements ([#2790](https://github.com/PrismJS/prism/issues/2790)) [`cb220168`](https://github.com/PrismJS/prism/commit/cb220168)\n    * Readme: Update link to Chinese translation ([#2749](https://github.com/PrismJS/prism/issues/2749)) [`266cc700`](https://github.com/PrismJS/prism/commit/266cc700)\n    * Replace `my.cdn` in code sample with Handlebars-like placeholder ([#2906](https://github.com/PrismJS/prism/issues/2906)) [`80471181`](https://github.com/PrismJS/prism/commit/80471181)\n    * Set dummy domain for CDN ([#2905](https://github.com/PrismJS/prism/issues/2905)) [`38f1d289`](https://github.com/PrismJS/prism/commit/38f1d289)\n    * Added MySQL to \"Used by\" section ([#2785](https://github.com/PrismJS/prism/issues/2785)) [`9b784ebf`](https://github.com/PrismJS/prism/commit/9b784ebf)\n    * Improved basic usage section ([#2777](https://github.com/PrismJS/prism/issues/2777)) [`a1209930`](https://github.com/PrismJS/prism/commit/a1209930)\n    * Updated URL in Autolinker example ([#2751](https://github.com/PrismJS/prism/issues/2751)) [`ec9767d6`](https://github.com/PrismJS/prism/commit/ec9767d6)\n    * Added React native tutorial ([#2683](https://github.com/PrismJS/prism/issues/2683)) [`1506f345`](https://github.com/PrismJS/prism/commit/1506f345)\n\n\n## 1.23.0 (2020-12-31)\n\n### New components\n\n* __Apex__ ([#2622](https://github.com/PrismJS/prism/issues/2622)) [`f0e2b70e`](https://github.com/PrismJS/prism/commit/f0e2b70e)\n* __DataWeave__ ([#2659](https://github.com/PrismJS/prism/issues/2659)) [`0803525b`](https://github.com/PrismJS/prism/commit/0803525b)\n* __PromQL__ ([#2628](https://github.com/PrismJS/prism/issues/2628)) [`8831c706`](https://github.com/PrismJS/prism/commit/8831c706)\n\n### Updated components\n\n* Fixed multiple vulnerable regexes ([#2584](https://github.com/PrismJS/prism/issues/2584)) [`c2f6a644`](https://github.com/PrismJS/prism/commit/c2f6a644)\n* __Apache Configuration__\n    * Update directive-flag to match `=` ([#2612](https://github.com/PrismJS/prism/issues/2612)) [`00bf00e3`](https://github.com/PrismJS/prism/commit/00bf00e3)\n* __C-like__\n    * Made all comments greedy ([#2680](https://github.com/PrismJS/prism/issues/2680)) [`0a3932fe`](https://github.com/PrismJS/prism/commit/0a3932fe)\n* __C__\n    * Better class name and macro name detection ([#2585](https://github.com/PrismJS/prism/issues/2585)) [`129faf5c`](https://github.com/PrismJS/prism/commit/129faf5c)\n* __Content-Security-Policy__\n    * Added missing directives and keywords ([#2664](https://github.com/PrismJS/prism/issues/2664)) [`f1541342`](https://github.com/PrismJS/prism/commit/f1541342)\n    * Do not highlight directive names with adjacent hyphens ([#2662](https://github.com/PrismJS/prism/issues/2662)) [`a7ccc16d`](https://github.com/PrismJS/prism/commit/a7ccc16d)\n* __CSS__\n    * Better HTML `style` attribute tokenization ([#2569](https://github.com/PrismJS/prism/issues/2569)) [`b04cbafe`](https://github.com/PrismJS/prism/commit/b04cbafe)\n* __Java__\n    * Improved package and class name detection ([#2599](https://github.com/PrismJS/prism/issues/2599)) [`0889bc7c`](https://github.com/PrismJS/prism/commit/0889bc7c)\n    * Added Java 15 keywords ([#2567](https://github.com/PrismJS/prism/issues/2567)) [`73f81c89`](https://github.com/PrismJS/prism/commit/73f81c89)\n* __Java stack trace__\n    * Added support stack frame element class loaders and modules ([#2658](https://github.com/PrismJS/prism/issues/2658)) [`0bb4f096`](https://github.com/PrismJS/prism/commit/0bb4f096)\n* __Julia__\n    * Removed constants that are not exported by default ([#2601](https://github.com/PrismJS/prism/issues/2601)) [`093c8175`](https://github.com/PrismJS/prism/commit/093c8175)\n* __Kotlin__\n    * Added support for backticks in function names ([#2489](https://github.com/PrismJS/prism/issues/2489)) [`a5107d5c`](https://github.com/PrismJS/prism/commit/a5107d5c)\n* __Latte__\n    * Fixed exponential backtracking ([#2682](https://github.com/PrismJS/prism/issues/2682)) [`89f1e182`](https://github.com/PrismJS/prism/commit/89f1e182)\n* __Markdown__\n    * Improved URL tokenization ([#2678](https://github.com/PrismJS/prism/issues/2678)) [`2af3e2c2`](https://github.com/PrismJS/prism/commit/2af3e2c2)\n    * Added support for YAML front matter ([#2634](https://github.com/PrismJS/prism/issues/2634)) [`5cf9cfbc`](https://github.com/PrismJS/prism/commit/5cf9cfbc)\n* __PHP__\n    * Added support for PHP 7.4 + other major improvements ([#2566](https://github.com/PrismJS/prism/issues/2566)) [`38808e64`](https://github.com/PrismJS/prism/commit/38808e64)\n    * Added support for PHP 8.0 features ([#2591](https://github.com/PrismJS/prism/issues/2591)) [`df922d90`](https://github.com/PrismJS/prism/commit/df922d90)\n    * Removed C-like dependency ([#2619](https://github.com/PrismJS/prism/issues/2619)) [`89ebb0b7`](https://github.com/PrismJS/prism/commit/89ebb0b7)\n    * Fixed exponential backtracking ([#2684](https://github.com/PrismJS/prism/issues/2684)) [`37b9c9a1`](https://github.com/PrismJS/prism/commit/37b9c9a1)\n* __Sass (Scss)__\n    * Added support for Sass modules ([#2643](https://github.com/PrismJS/prism/issues/2643)) [`deb238a6`](https://github.com/PrismJS/prism/commit/deb238a6)\n* __Scheme__\n    * Fixed number pattern ([#2648](https://github.com/PrismJS/prism/issues/2648)) [`e01ecd00`](https://github.com/PrismJS/prism/commit/e01ecd00)\n    * Fixed function and function-like false positives ([#2611](https://github.com/PrismJS/prism/issues/2611)) [`7951ca24`](https://github.com/PrismJS/prism/commit/7951ca24)\n* __Shell session__\n    * Fixed false positives because of links in command output ([#2649](https://github.com/PrismJS/prism/issues/2649)) [`8e76a978`](https://github.com/PrismJS/prism/commit/8e76a978)\n* __TSX__\n    * Temporary fix for the collisions of JSX tags and TS generics ([#2596](https://github.com/PrismJS/prism/issues/2596)) [`25bdb494`](https://github.com/PrismJS/prism/commit/25bdb494)\n\n### Updated plugins\n\n* Made Autoloader and Diff Highlight compatible ([#2580](https://github.com/PrismJS/prism/issues/2580)) [`7a74497a`](https://github.com/PrismJS/prism/commit/7a74497a)\n* __Copy to Clipboard Button__\n    * Set `type=\"button\"` attribute for copy to clipboard plugin ([#2593](https://github.com/PrismJS/prism/issues/2593)) [`f59a85f1`](https://github.com/PrismJS/prism/commit/f59a85f1)\n* __File Highlight__\n    * Fixed IE compatibility problem ([#2656](https://github.com/PrismJS/prism/issues/2656)) [`3f4ae00d`](https://github.com/PrismJS/prism/commit/3f4ae00d)\n* __Line Highlight__\n    * Fixed top offset in combination with Line numbers ([#2237](https://github.com/PrismJS/prism/issues/2237)) [`b40f8f4b`](https://github.com/PrismJS/prism/commit/b40f8f4b)\n    * Fixed print background color ([#2668](https://github.com/PrismJS/prism/issues/2668)) [`cdb24abe`](https://github.com/PrismJS/prism/commit/cdb24abe)\n* __Line Numbers__\n    * Fixed null reference ([#2605](https://github.com/PrismJS/prism/issues/2605)) [`7cdfe556`](https://github.com/PrismJS/prism/commit/7cdfe556)\n* __Treeview__\n    * Fixed icons on dark themes ([#2631](https://github.com/PrismJS/prism/issues/2631)) [`7266e32f`](https://github.com/PrismJS/prism/commit/7266e32f)\n* __Unescaped Markup__\n    * Refactoring ([#2445](https://github.com/PrismJS/prism/issues/2445)) [`fc602822`](https://github.com/PrismJS/prism/commit/fc602822)\n\n### Other\n\n* Readme: Added alternative link for Chinese translation [`071232b4`](https://github.com/PrismJS/prism/commit/071232b4)\n* Readme: Removed broken icon for Chinese translation ([#2670](https://github.com/PrismJS/prism/issues/2670)) [`2ea202b9`](https://github.com/PrismJS/prism/commit/2ea202b9)\n* Readme: Grammar adjustments ([#2629](https://github.com/PrismJS/prism/issues/2629)) [`f217ab75`](https://github.com/PrismJS/prism/commit/f217ab75)\n* __Core__\n    * Moved pattern matching + lookbehind logic into function ([#2633](https://github.com/PrismJS/prism/issues/2633)) [`24574406`](https://github.com/PrismJS/prism/commit/24574406)\n    * Fixed bug with greedy matching ([#2632](https://github.com/PrismJS/prism/issues/2632)) [`8fa8dd24`](https://github.com/PrismJS/prism/commit/8fa8dd24)\n* __Infrastructure__\n    * Migrate from TravisCI -> GitHub Actions ([#2606](https://github.com/PrismJS/prism/issues/2606)) [`69132045`](https://github.com/PrismJS/prism/commit/69132045)\n    * Added Dangerfile and provide bundle size info ([#2608](https://github.com/PrismJS/prism/issues/2608)) [`9df20c5e`](https://github.com/PrismJS/prism/commit/9df20c5e)\n    * New `start` script to start local server ([#2491](https://github.com/PrismJS/prism/issues/2491)) [`0604793c`](https://github.com/PrismJS/prism/commit/0604793c)\n    * Added test for exponential backtracking ([#2590](https://github.com/PrismJS/prism/issues/2590)) [`05afbb10`](https://github.com/PrismJS/prism/commit/05afbb10)\n    * Added test for polynomial backtracking ([#2597](https://github.com/PrismJS/prism/issues/2597)) [`e644178b`](https://github.com/PrismJS/prism/commit/e644178b)\n    * Tests: Better pretty print ([#2600](https://github.com/PrismJS/prism/issues/2600)) [`8bfcc819`](https://github.com/PrismJS/prism/commit/8bfcc819)\n    * Tests: Fixed sorted language list test ([#2623](https://github.com/PrismJS/prism/issues/2623)) [`2d3a1267`](https://github.com/PrismJS/prism/commit/2d3a1267)\n    * Tests: Stricter pattern for nice-token-names test ([#2588](https://github.com/PrismJS/prism/issues/2588)) [`0df60be1`](https://github.com/PrismJS/prism/commit/0df60be1)\n    * Tests: Added strict checks for `Prism.languages.extend` ([#2572](https://github.com/PrismJS/prism/issues/2572)) [`8828500e`](https://github.com/PrismJS/prism/commit/8828500e)\n* __Website__\n    * Test page: Added \"Share\" option ([#2575](https://github.com/PrismJS/prism/issues/2575)) [`b5f4f10e`](https://github.com/PrismJS/prism/commit/b5f4f10e)\n    * Test page: Don't trigger ad-blockers with class ([#2677](https://github.com/PrismJS/prism/issues/2677)) [`df0738e9`](https://github.com/PrismJS/prism/commit/df0738e9)\n    * Thousands -> millions [`9f82de50`](https://github.com/PrismJS/prism/commit/9f82de50)\n    * Unescaped Markup: More doc regarding comments ([#2652](https://github.com/PrismJS/prism/issues/2652)) [`add3736a`](https://github.com/PrismJS/prism/commit/add3736a)\n    * Website: Added and updated documentation ([#2654](https://github.com/PrismJS/prism/issues/2654)) [`8e660495`](https://github.com/PrismJS/prism/commit/8e660495)\n    * Website: Updated and improved guide on \"Extending Prism\" page ([#2586](https://github.com/PrismJS/prism/issues/2586)) [`8e1f38ff`](https://github.com/PrismJS/prism/commit/8e1f38ff)\n\n## 1.22.0 (2020-10-10)\n\n### New components\n\n* __Birb__ ([#2542](https://github.com/PrismJS/prism/issues/2542)) [`4d31e22a`](https://github.com/PrismJS/prism/commit/4d31e22a)\n* __BSL (1C:Enterprise)__ & __OneScript__ ([#2520](https://github.com/PrismJS/prism/issues/2520)) [`5c33f0bb`](https://github.com/PrismJS/prism/commit/5c33f0bb)\n* __MongoDB__ ([#2518](https://github.com/PrismJS/prism/issues/2518)) [`004eaa74`](https://github.com/PrismJS/prism/commit/004eaa74)\n* __Naninovel Script__ ([#2494](https://github.com/PrismJS/prism/issues/2494)) [`388ad996`](https://github.com/PrismJS/prism/commit/388ad996)\n* __PureScript__ ([#2526](https://github.com/PrismJS/prism/issues/2526)) [`ad748a00`](https://github.com/PrismJS/prism/commit/ad748a00)\n* __SML__ & __SML/NJ__ ([#2537](https://github.com/PrismJS/prism/issues/2537)) [`cb75d9e2`](https://github.com/PrismJS/prism/commit/cb75d9e2)\n* __Stan__ ([#2490](https://github.com/PrismJS/prism/issues/2490)) [`2da2beba`](https://github.com/PrismJS/prism/commit/2da2beba)\n* __TypoScript__ & __TSConfig__ ([#2505](https://github.com/PrismJS/prism/issues/2505)) [`bf115f47`](https://github.com/PrismJS/prism/commit/bf115f47)\n\n### Updated components\n\n* Removed duplicate alternatives in various languages ([#2524](https://github.com/PrismJS/prism/issues/2524)) [`fa2225ff`](https://github.com/PrismJS/prism/commit/fa2225ff)\n* __Haskell__\n    * Improvements ([#2535](https://github.com/PrismJS/prism/issues/2535)) [`e023044c`](https://github.com/PrismJS/prism/commit/e023044c)\n* __JS Extras__\n    * Highlight import and export bindings ([#2533](https://github.com/PrismJS/prism/issues/2533)) [`c51ababb`](https://github.com/PrismJS/prism/commit/c51ababb)\n    * Added control-flow keywords ([#2529](https://github.com/PrismJS/prism/issues/2529)) [`bcef22af`](https://github.com/PrismJS/prism/commit/bcef22af)\n* __PHP__\n    * Added `match` keyword (PHP 8.0) ([#2574](https://github.com/PrismJS/prism/issues/2574)) [`1761513e`](https://github.com/PrismJS/prism/commit/1761513e)\n* __Processing__\n    * Fixed function pattern ([#2564](https://github.com/PrismJS/prism/issues/2564)) [`35cbc02f`](https://github.com/PrismJS/prism/commit/35cbc02f)\n* __Regex__\n    * Changed how languages embed regexes ([#2532](https://github.com/PrismJS/prism/issues/2532)) [`f62ca787`](https://github.com/PrismJS/prism/commit/f62ca787)\n* __Rust__\n    * Fixed Unicode char literals ([#2550](https://github.com/PrismJS/prism/issues/2550)) [`3b4f14ca`](https://github.com/PrismJS/prism/commit/3b4f14ca)\n* __Scheme__\n    * Added support for R7RS syntax ([#2525](https://github.com/PrismJS/prism/issues/2525)) [`e4f6ccac`](https://github.com/PrismJS/prism/commit/e4f6ccac)\n* __Shell session__\n    * Added aliases ([#2548](https://github.com/PrismJS/prism/issues/2548)) [`bfb36748`](https://github.com/PrismJS/prism/commit/bfb36748)\n    * Highlight all commands after the start of any Heredoc string ([#2509](https://github.com/PrismJS/prism/issues/2509)) [`6c921801`](https://github.com/PrismJS/prism/commit/6c921801)\n* __YAML__\n    * Improved key pattern ([#2561](https://github.com/PrismJS/prism/issues/2561)) [`59853a52`](https://github.com/PrismJS/prism/commit/59853a52)\n\n### Updated plugins\n\n* __Autoloader__\n    * Fixed file detection regexes ([#2549](https://github.com/PrismJS/prism/issues/2549)) [`d36ea993`](https://github.com/PrismJS/prism/commit/d36ea993)\n* __Match braces__\n    * Fixed JS interpolation punctuation ([#2541](https://github.com/PrismJS/prism/issues/2541)) [`6b47133d`](https://github.com/PrismJS/prism/commit/6b47133d)\n* __Show Language__\n    * Added title for plain text ([#2555](https://github.com/PrismJS/prism/issues/2555)) [`a409245e`](https://github.com/PrismJS/prism/commit/a409245e)\n\n### Other\n\n* Tests: Added an option to accept the actual token stream ([#2515](https://github.com/PrismJS/prism/issues/2515)) [`bafab634`](https://github.com/PrismJS/prism/commit/bafab634)\n* __Core__\n    * Docs: Minor improvement ([#2513](https://github.com/PrismJS/prism/issues/2513)) [`206dc80f`](https://github.com/PrismJS/prism/commit/206dc80f)\n* __Infrastructure__\n    * JSDoc: Fixed line ends ([#2523](https://github.com/PrismJS/prism/issues/2523)) [`bf169e5f`](https://github.com/PrismJS/prism/commit/bf169e5f)\n* __Website__\n    * Website: Added new SB101 tutorial replacing the Crambler one ([#2576](https://github.com/PrismJS/prism/issues/2576)) [`655f985c`](https://github.com/PrismJS/prism/commit/655f985c)\n    * Website: Fix typo on homepage by adding missing word add ([#2570](https://github.com/PrismJS/prism/issues/2570)) [`8ae6a4ba`](https://github.com/PrismJS/prism/commit/8ae6a4ba)\n    * Custom class: Improved doc ([#2512](https://github.com/PrismJS/prism/issues/2512)) [`5ad6cb23`](https://github.com/PrismJS/prism/commit/5ad6cb23)\n\n## 1.21.0 (2020-08-06)\n\n### New components\n\n* __.ignore__ & __.gitignore__ & __.hgignore__ & __.npmignore__ ([#2481](https://github.com/PrismJS/prism/issues/2481)) [`3fcce6fe`](https://github.com/PrismJS/prism/commit/3fcce6fe)\n* __Agda__ ([#2430](https://github.com/PrismJS/prism/issues/2430)) [`3a127c7d`](https://github.com/PrismJS/prism/commit/3a127c7d)\n* __AL__ ([#2300](https://github.com/PrismJS/prism/issues/2300)) [`de21eb64`](https://github.com/PrismJS/prism/commit/de21eb64)\n* __Cypher__ ([#2459](https://github.com/PrismJS/prism/issues/2459)) [`398e2943`](https://github.com/PrismJS/prism/commit/398e2943)\n* __Dhall__ ([#2473](https://github.com/PrismJS/prism/issues/2473)) [`649e51e5`](https://github.com/PrismJS/prism/commit/649e51e5)\n* __EditorConfig__ ([#2471](https://github.com/PrismJS/prism/issues/2471)) [`ed8fff91`](https://github.com/PrismJS/prism/commit/ed8fff91)\n* __HLSL__ ([#2318](https://github.com/PrismJS/prism/issues/2318)) [`87a5c7ae`](https://github.com/PrismJS/prism/commit/87a5c7ae)\n* __JS stack trace__ ([#2418](https://github.com/PrismJS/prism/issues/2418)) [`ae0327b3`](https://github.com/PrismJS/prism/commit/ae0327b3)\n* __PeopleCode__ ([#2302](https://github.com/PrismJS/prism/issues/2302)) [`bd4d8165`](https://github.com/PrismJS/prism/commit/bd4d8165)\n* __PureBasic__ ([#2369](https://github.com/PrismJS/prism/issues/2369)) [`d0c1c70d`](https://github.com/PrismJS/prism/commit/d0c1c70d)\n* __Racket__ ([#2315](https://github.com/PrismJS/prism/issues/2315)) [`053016ef`](https://github.com/PrismJS/prism/commit/053016ef)\n* __Smali__ ([#2419](https://github.com/PrismJS/prism/issues/2419)) [`22eb5cad`](https://github.com/PrismJS/prism/commit/22eb5cad)\n* __Structured Text (IEC 61131-3)__ ([#2311](https://github.com/PrismJS/prism/issues/2311)) [`8704cdfb`](https://github.com/PrismJS/prism/commit/8704cdfb)\n* __UnrealScript__ ([#2305](https://github.com/PrismJS/prism/issues/2305)) [`1093ceb3`](https://github.com/PrismJS/prism/commit/1093ceb3)\n* __WarpScript__ ([#2307](https://github.com/PrismJS/prism/issues/2307)) [`cde5b0fa`](https://github.com/PrismJS/prism/commit/cde5b0fa)\n* __XML doc (.net)__ ([#2340](https://github.com/PrismJS/prism/issues/2340)) [`caec5e30`](https://github.com/PrismJS/prism/commit/caec5e30)\n* __YANG__ ([#2467](https://github.com/PrismJS/prism/issues/2467)) [`ed1df1e1`](https://github.com/PrismJS/prism/commit/ed1df1e1)\n\n### Updated components\n\n* Markup & JSON: Added new aliases ([#2390](https://github.com/PrismJS/prism/issues/2390)) [`9782cfe6`](https://github.com/PrismJS/prism/commit/9782cfe6)\n* Fixed several cases of exponential backtracking ([#2268](https://github.com/PrismJS/prism/issues/2268)) [`7a554b5f`](https://github.com/PrismJS/prism/commit/7a554b5f)\n* __APL__\n    * Added `⍥` ([#2409](https://github.com/PrismJS/prism/issues/2409)) [`0255cb6a`](https://github.com/PrismJS/prism/commit/0255cb6a)\n* __AutoHotkey__\n    * Added missing `format` built-in ([#2450](https://github.com/PrismJS/prism/issues/2450)) [`7c66cfc4`](https://github.com/PrismJS/prism/commit/7c66cfc4)\n    * Improved comments and other improvements ([#2412](https://github.com/PrismJS/prism/issues/2412)) [`ddf3cc62`](https://github.com/PrismJS/prism/commit/ddf3cc62)\n    * Added missing definitions ([#2400](https://github.com/PrismJS/prism/issues/2400)) [`4fe03676`](https://github.com/PrismJS/prism/commit/4fe03676)\n* __Bash__\n    * Added `composer` command ([#2298](https://github.com/PrismJS/prism/issues/2298)) [`044dd271`](https://github.com/PrismJS/prism/commit/044dd271)\n* __Batch__\n    * Fix escaped double quote ([#2485](https://github.com/PrismJS/prism/issues/2485)) [`f0f8210c`](https://github.com/PrismJS/prism/commit/f0f8210c)\n* __C__\n    * Improved macros and expressions ([#2440](https://github.com/PrismJS/prism/issues/2440)) [`8a72fa6f`](https://github.com/PrismJS/prism/commit/8a72fa6f)\n    * Improved macros ([#2320](https://github.com/PrismJS/prism/issues/2320)) [`fdcf7ed2`](https://github.com/PrismJS/prism/commit/fdcf7ed2)\n* __C#__\n    * Improved pattern matching ([#2411](https://github.com/PrismJS/prism/issues/2411)) [`7f341fc1`](https://github.com/PrismJS/prism/commit/7f341fc1)\n    * Fixed adjacent string interpolations ([#2402](https://github.com/PrismJS/prism/issues/2402)) [`2a2e79ed`](https://github.com/PrismJS/prism/commit/2a2e79ed)\n* __C++__\n    * Added support for default comparison operator ([#2426](https://github.com/PrismJS/prism/issues/2426)) [`8e9d161c`](https://github.com/PrismJS/prism/commit/8e9d161c)\n    * Improved class name detection ([#2348](https://github.com/PrismJS/prism/issues/2348)) [`e3fe9040`](https://github.com/PrismJS/prism/commit/e3fe9040)\n    * Fixed `enum class` class names ([#2342](https://github.com/PrismJS/prism/issues/2342)) [`30b4e254`](https://github.com/PrismJS/prism/commit/30b4e254)\n* __Content-Security-Policy__\n    * Fixed directives ([#2461](https://github.com/PrismJS/prism/issues/2461)) [`537a9e80`](https://github.com/PrismJS/prism/commit/537a9e80)\n* __CSS__\n    * Improved url and added keywords ([#2432](https://github.com/PrismJS/prism/issues/2432)) [`964de5a1`](https://github.com/PrismJS/prism/commit/964de5a1)\n* __CSS Extras__\n    * Optimized `class` and `id` patterns ([#2359](https://github.com/PrismJS/prism/issues/2359)) [`fdbc4473`](https://github.com/PrismJS/prism/commit/fdbc4473)\n    * Renamed `attr-{name,value}` tokens and added tokens for combinators and selector lists ([#2373](https://github.com/PrismJS/prism/issues/2373)) [`e523f5d0`](https://github.com/PrismJS/prism/commit/e523f5d0)\n* __Dart__\n    * Added missing keywords ([#2355](https://github.com/PrismJS/prism/issues/2355)) [`4172ab6f`](https://github.com/PrismJS/prism/commit/4172ab6f)\n* __Diff__\n    * Added `prefix` token ([#2281](https://github.com/PrismJS/prism/issues/2281)) [`fd432a5b`](https://github.com/PrismJS/prism/commit/fd432a5b)\n* __Docker__\n    * Fixed strings inside comments ([#2428](https://github.com/PrismJS/prism/issues/2428)) [`37273a6f`](https://github.com/PrismJS/prism/commit/37273a6f)\n* __EditorConfig__\n    * Trim spaces before key and section title ([#2482](https://github.com/PrismJS/prism/issues/2482)) [`0c30c582`](https://github.com/PrismJS/prism/commit/0c30c582)\n* __EJS__\n    * Added `eta` alias ([#2282](https://github.com/PrismJS/prism/issues/2282)) [`0cfb6c5f`](https://github.com/PrismJS/prism/commit/0cfb6c5f)\n* __GLSL__\n    * Improvements ([#2321](https://github.com/PrismJS/prism/issues/2321)) [`33e49956`](https://github.com/PrismJS/prism/commit/33e49956)\n* __GraphQL__\n    * Added missing keywords ([#2407](https://github.com/PrismJS/prism/issues/2407)) [`de8ed16d`](https://github.com/PrismJS/prism/commit/de8ed16d)\n    * Added support for multi-line strings and descriptions ([#2406](https://github.com/PrismJS/prism/issues/2406)) [`9e64c62e`](https://github.com/PrismJS/prism/commit/9e64c62e)\n* __Io__\n    * Fixed operator pattern ([#2365](https://github.com/PrismJS/prism/issues/2365)) [`d6055771`](https://github.com/PrismJS/prism/commit/d6055771)\n* __Java__\n    * Fixed `namespace` token ([#2295](https://github.com/PrismJS/prism/issues/2295)) [`62e184bb`](https://github.com/PrismJS/prism/commit/62e184bb)\n* __JavaDoc__\n    * Improvements ([#2324](https://github.com/PrismJS/prism/issues/2324)) [`032910ba`](https://github.com/PrismJS/prism/commit/032910ba)\n* __JavaScript__\n    * Improved regex detection ([#2465](https://github.com/PrismJS/prism/issues/2465)) [`4f55052f`](https://github.com/PrismJS/prism/commit/4f55052f)\n    * Improved `get`/`set` and parameter detection ([#2387](https://github.com/PrismJS/prism/issues/2387)) [`ed715158`](https://github.com/PrismJS/prism/commit/ed715158)\n    * Added support for logical assignment operators ([#2378](https://github.com/PrismJS/prism/issues/2378)) [`b28f21b7`](https://github.com/PrismJS/prism/commit/b28f21b7)\n* __JSDoc__\n    * Improvements ([#2466](https://github.com/PrismJS/prism/issues/2466)) [`2805ae35`](https://github.com/PrismJS/prism/commit/2805ae35)\n* __JSON__\n    * Greedy comments ([#2479](https://github.com/PrismJS/prism/issues/2479)) [`158caf52`](https://github.com/PrismJS/prism/commit/158caf52)\n* __Julia__\n    * Improved strings, comments, and other patterns ([#2363](https://github.com/PrismJS/prism/issues/2363)) [`81cf2344`](https://github.com/PrismJS/prism/commit/81cf2344)\n* __Kotlin__\n    * Added `kt` and `kts` aliases ([#2474](https://github.com/PrismJS/prism/issues/2474)) [`67f97e2e`](https://github.com/PrismJS/prism/commit/67f97e2e)\n* __Markup__\n    * Added tokens inside DOCTYPE ([#2349](https://github.com/PrismJS/prism/issues/2349)) [`9c7bc820`](https://github.com/PrismJS/prism/commit/9c7bc820)\n    * Added `attr-equals` alias for the attribute `=` sign ([#2350](https://github.com/PrismJS/prism/issues/2350)) [`96a0116e`](https://github.com/PrismJS/prism/commit/96a0116e)\n    * Added alias for named entities ([#2351](https://github.com/PrismJS/prism/issues/2351)) [`ab1e34ae`](https://github.com/PrismJS/prism/commit/ab1e34ae)\n    * Added support for SSML ([#2306](https://github.com/PrismJS/prism/issues/2306)) [`eb70070d`](https://github.com/PrismJS/prism/commit/eb70070d)\n* __Objective-C__\n    * Added `objc` alias ([#2331](https://github.com/PrismJS/prism/issues/2331)) [`67c6b7af`](https://github.com/PrismJS/prism/commit/67c6b7af)\n* __PowerShell__\n    * New functions pattern bases on naming conventions ([#2301](https://github.com/PrismJS/prism/issues/2301)) [`fec39bcf`](https://github.com/PrismJS/prism/commit/fec39bcf)\n* __Protocol Buffers__\n    * Added support for RPC syntax ([#2414](https://github.com/PrismJS/prism/issues/2414)) [`939a17c4`](https://github.com/PrismJS/prism/commit/939a17c4)\n* __Pug__\n    * Improved class and id detection in tags ([#2358](https://github.com/PrismJS/prism/issues/2358)) [`7f948ecb`](https://github.com/PrismJS/prism/commit/7f948ecb)\n* __Python__\n    * Fixed empty multiline strings ([#2344](https://github.com/PrismJS/prism/issues/2344)) [`c9324476`](https://github.com/PrismJS/prism/commit/c9324476)\n* __Regex__\n    * Added aliases and minor improvements ([#2325](https://github.com/PrismJS/prism/issues/2325)) [`8a72830a`](https://github.com/PrismJS/prism/commit/8a72830a)\n* __Ren'py__\n    * Added `rpy` alias ([#2385](https://github.com/PrismJS/prism/issues/2385)) [`4935b5ca`](https://github.com/PrismJS/prism/commit/4935b5ca)\n* __Ruby__\n    * Optimized `regex` and `string` patterns ([#2354](https://github.com/PrismJS/prism/issues/2354)) [`b526e8c0`](https://github.com/PrismJS/prism/commit/b526e8c0)\n* __Rust__\n    * Improvements ([#2464](https://github.com/PrismJS/prism/issues/2464)) [`2ff40fe0`](https://github.com/PrismJS/prism/commit/2ff40fe0)\n    * Improvements ([#2332](https://github.com/PrismJS/prism/issues/2332)) [`194c5429`](https://github.com/PrismJS/prism/commit/194c5429)\n* __SAS__\n    * Improved macro string functions ([#2463](https://github.com/PrismJS/prism/issues/2463)) [`278316ca`](https://github.com/PrismJS/prism/commit/278316ca)\n    * Handle edge case of string macro functions ([#2451](https://github.com/PrismJS/prism/issues/2451)) [`a0a9f1ef`](https://github.com/PrismJS/prism/commit/a0a9f1ef)\n    * Improved comments in `proc groovy` and `proc lua` ([#2392](https://github.com/PrismJS/prism/issues/2392)) [`475a5903`](https://github.com/PrismJS/prism/commit/475a5903)\n* __Scheme__\n    * Adjusted lookbehind for literals ([#2396](https://github.com/PrismJS/prism/issues/2396)) [`1e3f542b`](https://github.com/PrismJS/prism/commit/1e3f542b)\n    * Improved lambda parameter ([#2346](https://github.com/PrismJS/prism/issues/2346)) [`1946918a`](https://github.com/PrismJS/prism/commit/1946918a)\n    * Consistent lookaheads ([#2322](https://github.com/PrismJS/prism/issues/2322)) [`d2541d54`](https://github.com/PrismJS/prism/commit/d2541d54)\n    * Improved boolean ([#2316](https://github.com/PrismJS/prism/issues/2316)) [`e27e65af`](https://github.com/PrismJS/prism/commit/e27e65af)\n    * Added missing special keywords ([#2304](https://github.com/PrismJS/prism/issues/2304)) [`ac297ba5`](https://github.com/PrismJS/prism/commit/ac297ba5)\n    * Improvements ([#2263](https://github.com/PrismJS/prism/issues/2263)) [`9a49f78f`](https://github.com/PrismJS/prism/commit/9a49f78f)\n* __Solidity (Ethereum)__\n    * Added `sol` alias ([#2382](https://github.com/PrismJS/prism/issues/2382)) [`6352213a`](https://github.com/PrismJS/prism/commit/6352213a)\n* __SQL__\n    * Added PostgreSQL `RETURNING` keyword ([#2476](https://github.com/PrismJS/prism/issues/2476)) [`bea7a585`](https://github.com/PrismJS/prism/commit/bea7a585)\n* __Stylus__\n    * Fixed comments breaking declarations + minor improvements ([#2372](https://github.com/PrismJS/prism/issues/2372)) [`6d663b6e`](https://github.com/PrismJS/prism/commit/6d663b6e)\n    * New tokens and other improvements ([#2368](https://github.com/PrismJS/prism/issues/2368)) [`2c10ef8a`](https://github.com/PrismJS/prism/commit/2c10ef8a)\n    * Fixed comments breaking strings and URLs ([#2361](https://github.com/PrismJS/prism/issues/2361)) [`0d65d6c9`](https://github.com/PrismJS/prism/commit/0d65d6c9)\n* __T4 Text Templates (VB)__\n    * Use the correct VB variant ([#2341](https://github.com/PrismJS/prism/issues/2341)) [`b6093339`](https://github.com/PrismJS/prism/commit/b6093339)\n* __TypeScript__\n    * Added `asserts` keyword and other improvements ([#2280](https://github.com/PrismJS/prism/issues/2280)) [`a197cfcd`](https://github.com/PrismJS/prism/commit/a197cfcd)\n* __Visual Basic__\n    * Added VBA alias ([#2469](https://github.com/PrismJS/prism/issues/2469)) [`78161d60`](https://github.com/PrismJS/prism/commit/78161d60)\n    * Added `until` keyword ([#2423](https://github.com/PrismJS/prism/issues/2423)) [`a13ee8d9`](https://github.com/PrismJS/prism/commit/a13ee8d9)\n    * Added missing keywords ([#2376](https://github.com/PrismJS/prism/issues/2376)) [`ba5ac1da`](https://github.com/PrismJS/prism/commit/ba5ac1da)\n\n### Updated plugins\n\n* File Highlight & JSONP Highlight update ([#1974](https://github.com/PrismJS/prism/issues/1974)) [`afea17d9`](https://github.com/PrismJS/prism/commit/afea17d9)\n* Added general de/activation mechanism for plugins ([#2434](https://github.com/PrismJS/prism/issues/2434)) [`a36e96ab`](https://github.com/PrismJS/prism/commit/a36e96ab)\n* __Autoloader__\n    * Fixed bug breaking Autoloader ([#2449](https://github.com/PrismJS/prism/issues/2449)) [`a3416bf3`](https://github.com/PrismJS/prism/commit/a3416bf3)\n    * Fixed `data-dependencies` and extensions ([#2326](https://github.com/PrismJS/prism/issues/2326)) [`1654b25f`](https://github.com/PrismJS/prism/commit/1654b25f)\n    * Improved path detection and other minor improvements ([#2245](https://github.com/PrismJS/prism/issues/2245)) [`5cdc3251`](https://github.com/PrismJS/prism/commit/5cdc3251)\n* __Command Line__\n    * Some refactoring ([#2290](https://github.com/PrismJS/prism/issues/2290)) [`8c9c2896`](https://github.com/PrismJS/prism/commit/8c9c2896)\n    * Correctly rehighlight elements ([#2291](https://github.com/PrismJS/prism/issues/2291)) [`e6b2c6fc`](https://github.com/PrismJS/prism/commit/e6b2c6fc)\n* __Line Highlight__\n    * Added linkable line numbers ([#2328](https://github.com/PrismJS/prism/issues/2328)) [`eb82e804`](https://github.com/PrismJS/prism/commit/eb82e804)\n* __Line Numbers__\n    * Improved resize performance ([#2125](https://github.com/PrismJS/prism/issues/2125)) [`b96ed225`](https://github.com/PrismJS/prism/commit/b96ed225)\n    * Fixed TypeError when `lineNumberWrapper` is null ([#2337](https://github.com/PrismJS/prism/issues/2337)) [`4b61661d`](https://github.com/PrismJS/prism/commit/4b61661d)\n    * Exposed `_resizeElement` function ([#2288](https://github.com/PrismJS/prism/issues/2288)) [`893f2a79`](https://github.com/PrismJS/prism/commit/893f2a79)\n* __Previewers__\n    * Fixed XSS ([#2506](https://github.com/PrismJS/prism/issues/2506)) [`8bba4880`](https://github.com/PrismJS/prism/commit/8bba4880)\n* __Unescaped Markup__\n    * No longer requires `Prism.languages.markup` ([#2444](https://github.com/PrismJS/prism/issues/2444)) [`af132dd3`](https://github.com/PrismJS/prism/commit/af132dd3)\n\n### Updated themes\n\n* __Coy__\n    * Minor improvements ([#2176](https://github.com/PrismJS/prism/issues/2176)) [`7109c18c`](https://github.com/PrismJS/prism/commit/7109c18c)\n* __Default__\n    * Added a comment that declares the background color of `operator` tokens as intentional ([#2309](https://github.com/PrismJS/prism/issues/2309)) [`937e2691`](https://github.com/PrismJS/prism/commit/937e2691)\n* __Okaidia__\n    * Update comment text color to meet WCAG contrast recommendations to AA level ([#2292](https://github.com/PrismJS/prism/issues/2292)) [`06495f90`](https://github.com/PrismJS/prism/commit/06495f90)\n\n### Other\n\n* Changelog: Fixed v1.20.0 release date [`cb6349e2`](https://github.com/PrismJS/prism/commit/cb6349e2)\n* __Core__\n    * Fixed greedy matching bug ([#2032](https://github.com/PrismJS/prism/issues/2032)) [`40285203`](https://github.com/PrismJS/prism/commit/40285203)\n    * Added JSDoc ([#1782](https://github.com/PrismJS/prism/issues/1782)) [`4ff555be`](https://github.com/PrismJS/prism/commit/4ff555be)\n* __Infrastructure__\n    * Update Git repo URL in package.json ([#2334](https://github.com/PrismJS/prism/issues/2334)) [`10f43275`](https://github.com/PrismJS/prism/commit/10f43275)\n    * Added docs to ignore files ([#2437](https://github.com/PrismJS/prism/issues/2437)) [`05c9f20b`](https://github.com/PrismJS/prism/commit/05c9f20b)\n    * Added `npm run build` command ([#2356](https://github.com/PrismJS/prism/issues/2356)) [`ff74a610`](https://github.com/PrismJS/prism/commit/ff74a610)\n    * gulp: Improved `inlineRegexSource` ([#2296](https://github.com/PrismJS/prism/issues/2296)) [`abb800dd`](https://github.com/PrismJS/prism/commit/abb800dd)\n    * gulp: Fixed language map ([#2283](https://github.com/PrismJS/prism/issues/2283)) [`11053193`](https://github.com/PrismJS/prism/commit/11053193)\n    * gulp: Removed `premerge` task ([#2357](https://github.com/PrismJS/prism/issues/2357)) [`5ff7932b`](https://github.com/PrismJS/prism/commit/5ff7932b)\n    * Tests are now faster ([#2165](https://github.com/PrismJS/prism/issues/2165)) [`e756be3f`](https://github.com/PrismJS/prism/commit/e756be3f)\n    * Tests: Added extra newlines in pretty token streams ([#2070](https://github.com/PrismJS/prism/issues/2070)) [`681adeef`](https://github.com/PrismJS/prism/commit/681adeef)\n    * Tests: Added test for identifier support across all languages ([#2371](https://github.com/PrismJS/prism/issues/2371)) [`48fac3b2`](https://github.com/PrismJS/prism/commit/48fac3b2)\n    * Tests: Added test to sort the language list ([#2222](https://github.com/PrismJS/prism/issues/2222)) [`a3758728`](https://github.com/PrismJS/prism/commit/a3758728)\n    * Tests: Always pretty-print token streams ([#2421](https://github.com/PrismJS/prism/issues/2421)) [`583e7eb5`](https://github.com/PrismJS/prism/commit/583e7eb5)\n    * Tests: Always use `components.json` ([#2370](https://github.com/PrismJS/prism/issues/2370)) [`e416341f`](https://github.com/PrismJS/prism/commit/e416341f)\n    * Tests: Better error messages for pattern tests ([#2364](https://github.com/PrismJS/prism/issues/2364)) [`10ca6433`](https://github.com/PrismJS/prism/commit/10ca6433)\n    * Tests: Included `console` in VM context ([#2353](https://github.com/PrismJS/prism/issues/2353)) [`b4ed5ded`](https://github.com/PrismJS/prism/commit/b4ed5ded)\n* __Website__\n    * Fixed typos \"Prims\" ([#2455](https://github.com/PrismJS/prism/issues/2455)) [`dfa5498a`](https://github.com/PrismJS/prism/commit/dfa5498a)\n    * New assets directory for all web-only files ([#2180](https://github.com/PrismJS/prism/issues/2180)) [`91fdd0b1`](https://github.com/PrismJS/prism/commit/91fdd0b1)\n    * Improvements ([#2053](https://github.com/PrismJS/prism/issues/2053)) [`ce0fa227`](https://github.com/PrismJS/prism/commit/ce0fa227)\n    * Fixed Treeview page ([#2484](https://github.com/PrismJS/prism/issues/2484)) [`a0efa40b`](https://github.com/PrismJS/prism/commit/a0efa40b)\n    * Line Numbers: Fixed class name on website [`453079bf`](https://github.com/PrismJS/prism/commit/453079bf)\n    * Line Numbers: Improved documentation ([#2456](https://github.com/PrismJS/prism/issues/2456)) [`447429f0`](https://github.com/PrismJS/prism/commit/447429f0)\n    * Line Numbers: Style inline code on website ([#2435](https://github.com/PrismJS/prism/issues/2435)) [`ad9c13e2`](https://github.com/PrismJS/prism/commit/ad9c13e2)\n    * Filter highlightAll: Fixed typo ([#2391](https://github.com/PrismJS/prism/issues/2391)) [`55bf7ec1`](https://github.com/PrismJS/prism/commit/55bf7ec1)\n\n## 1.20.0 (2020-04-04)\n\n### New components\n\n* __Concurnas__ ([#2206](https://github.com/PrismJS/prism/issues/2206)) [`b24f7348`](https://github.com/PrismJS/prism/commit/b24f7348)\n* __DAX__ ([#2248](https://github.com/PrismJS/prism/issues/2248)) [`9227853f`](https://github.com/PrismJS/prism/commit/9227853f)\n* __Excel Formula__ ([#2219](https://github.com/PrismJS/prism/issues/2219)) [`bf4f7bfa`](https://github.com/PrismJS/prism/commit/bf4f7bfa)\n* __Factor__ ([#2203](https://github.com/PrismJS/prism/issues/2203)) [`f941102e`](https://github.com/PrismJS/prism/commit/f941102e)\n* __LLVM IR__ ([#2221](https://github.com/PrismJS/prism/issues/2221)) [`43efde2e`](https://github.com/PrismJS/prism/commit/43efde2e)\n* __PowerQuery__ ([#2250](https://github.com/PrismJS/prism/issues/2250)) [`8119e57b`](https://github.com/PrismJS/prism/commit/8119e57b)\n* __Solution file__ ([#2213](https://github.com/PrismJS/prism/issues/2213)) [`15983d52`](https://github.com/PrismJS/prism/commit/15983d52)\n\n### Updated components\n\n* __Bash__\n    * Added support for escaped quotes ([#2256](https://github.com/PrismJS/prism/issues/2256)) [`328d0e0e`](https://github.com/PrismJS/prism/commit/328d0e0e)\n* __BBcode__\n    * Added \"shortcode\" alias ([#2273](https://github.com/PrismJS/prism/issues/2273)) [`57eebced`](https://github.com/PrismJS/prism/commit/57eebced)\n* __C/C++/OpenCL C__\n    * Improvements ([#2196](https://github.com/PrismJS/prism/issues/2196)) [`674f4b35`](https://github.com/PrismJS/prism/commit/674f4b35)\n* __C__\n    * Improvemed `comment` pattern ([#2229](https://github.com/PrismJS/prism/issues/2229)) [`fa630726`](https://github.com/PrismJS/prism/commit/fa630726)\n* __C#__\n    * Fixed keywords in type lists blocking type names ([#2277](https://github.com/PrismJS/prism/issues/2277)) [`947a55bd`](https://github.com/PrismJS/prism/commit/947a55bd)\n    * C# improvements ([#1444](https://github.com/PrismJS/prism/issues/1444)) [`42b15463`](https://github.com/PrismJS/prism/commit/42b15463)\n* __C++__\n    * Added C++20 keywords ([#2236](https://github.com/PrismJS/prism/issues/2236)) [`462ad57e`](https://github.com/PrismJS/prism/commit/462ad57e)\n* __CSS__\n    * Fixed `url()` containing \"@\" ([#2272](https://github.com/PrismJS/prism/issues/2272)) [`504a63ba`](https://github.com/PrismJS/prism/commit/504a63ba)\n* __CSS Extras__\n    * Added support for the selector function ([#2201](https://github.com/PrismJS/prism/issues/2201)) [`2e0eff76`](https://github.com/PrismJS/prism/commit/2e0eff76)\n* __Elixir__\n    * Added support for attributes names ending with `?` ([#2182](https://github.com/PrismJS/prism/issues/2182)) [`5450e24c`](https://github.com/PrismJS/prism/commit/5450e24c)\n* __Java__\n    * Added `record` keyword ([#2185](https://github.com/PrismJS/prism/issues/2185)) [`47910b5c`](https://github.com/PrismJS/prism/commit/47910b5c)\n* __Markdown__\n    * Added support for nested lists ([#2228](https://github.com/PrismJS/prism/issues/2228)) [`73c8a376`](https://github.com/PrismJS/prism/commit/73c8a376)\n* __OpenCL__\n    * Require C ([#2231](https://github.com/PrismJS/prism/issues/2231)) [`26626ded`](https://github.com/PrismJS/prism/commit/26626ded)\n* __PHPDoc__\n    * Fixed exponential backtracking ([#2198](https://github.com/PrismJS/prism/issues/2198)) [`3b42536e`](https://github.com/PrismJS/prism/commit/3b42536e)\n* __Ruby__\n    * Fixed exponential backtracking ([#2225](https://github.com/PrismJS/prism/issues/2225)) [`c5de5aa8`](https://github.com/PrismJS/prism/commit/c5de5aa8)\n* __SAS__\n    * Fixed SAS' \"peerDependencies\" ([#2230](https://github.com/PrismJS/prism/issues/2230)) [`7d8ff7ea`](https://github.com/PrismJS/prism/commit/7d8ff7ea)\n* __Shell session__\n    * Improvements ([#2208](https://github.com/PrismJS/prism/issues/2208)) [`bd16bd57`](https://github.com/PrismJS/prism/commit/bd16bd57)\n* __Visual Basic__\n    * Added support for comments with line continuations ([#2195](https://github.com/PrismJS/prism/issues/2195)) [`a7d67ca3`](https://github.com/PrismJS/prism/commit/a7d67ca3)\n* __YAML__\n    * Improvements ([#2226](https://github.com/PrismJS/prism/issues/2226)) [`5362ba16`](https://github.com/PrismJS/prism/commit/5362ba16)\n    * Fixed highlighting of anchors and aliases ([#2217](https://github.com/PrismJS/prism/issues/2217)) [`6124c974`](https://github.com/PrismJS/prism/commit/6124c974)\n\n### New plugins\n\n* __Treeview__ ([#2265](https://github.com/PrismJS/prism/issues/2265)) [`be909b18`](https://github.com/PrismJS/prism/commit/be909b18)\n\n### Updated plugins\n\n* __Inline Color__\n    * Support for (semi-)transparent colors and minor improvements ([#2223](https://github.com/PrismJS/prism/issues/2223)) [`8d2c5a3e`](https://github.com/PrismJS/prism/commit/8d2c5a3e)\n* __Keep Markup__\n    * Remove self & document from IIFE arguments ([#2258](https://github.com/PrismJS/prism/issues/2258)) [`3c043338`](https://github.com/PrismJS/prism/commit/3c043338)\n* __Toolbar__\n    * `data-toolbar-order` is now inherited ([#2205](https://github.com/PrismJS/prism/issues/2205)) [`238f1163`](https://github.com/PrismJS/prism/commit/238f1163)\n\n### Other\n\n* Updated all `String.propotype.replace` calls for literal strings [`5d7aab56`](https://github.com/PrismJS/prism/commit/5d7aab56)\n* __Core__\n    * Linked list implementation for `matchGrammar` ([#1909](https://github.com/PrismJS/prism/issues/1909)) [`2d4c94cd`](https://github.com/PrismJS/prism/commit/2d4c94cd)\n    * Faster `Token.stringify` ([#2171](https://github.com/PrismJS/prism/issues/2171)) [`f683972e`](https://github.com/PrismJS/prism/commit/f683972e)\n    * Fixed scope problem in script mode ([#2184](https://github.com/PrismJS/prism/issues/2184)) [`984e5d2e`](https://github.com/PrismJS/prism/commit/984e5d2e)\n* __Infrastructure__\n    * Travis: Updated NodeJS versions ([#2246](https://github.com/PrismJS/prism/issues/2246)) [`e635260b`](https://github.com/PrismJS/prism/commit/e635260b)\n    * gulp: Inline regex source improvement ([#2227](https://github.com/PrismJS/prism/issues/2227)) [`67afc5ad`](https://github.com/PrismJS/prism/commit/67afc5ad)\n    * Tests: Added new pattern check for octal escapes ([#2189](https://github.com/PrismJS/prism/issues/2189)) [`81e1c3dd`](https://github.com/PrismJS/prism/commit/81e1c3dd)\n    * Tests: Fixed optional dependencies in pattern tests ([#2242](https://github.com/PrismJS/prism/issues/2242)) [`1e3070a2`](https://github.com/PrismJS/prism/commit/1e3070a2)\n    * Tests: Added test for zero-width lookbehinds ([#2220](https://github.com/PrismJS/prism/issues/2220)) [`7d03ece4`](https://github.com/PrismJS/prism/commit/7d03ece4)\n    * Added tests for examples ([#2216](https://github.com/PrismJS/prism/issues/2216)) [`1f7a245c`](https://github.com/PrismJS/prism/commit/1f7a245c)\n* __Website__\n    * Removed invalid strings from C# example ([#2266](https://github.com/PrismJS/prism/issues/2266)) [`c917a8ca`](https://github.com/PrismJS/prism/commit/c917a8ca)\n    * Fixed Diff highlight plugin page title ([#2233](https://github.com/PrismJS/prism/issues/2233)) [`a82770f8`](https://github.com/PrismJS/prism/commit/a82770f8)\n    * Added link to `prism-liquibase` Bash language extension. ([#2191](https://github.com/PrismJS/prism/issues/2191)) [`0bf73dc7`](https://github.com/PrismJS/prism/commit/0bf73dc7)\n    * Examples: Updated content header ([#2232](https://github.com/PrismJS/prism/issues/2232)) [`6232878b`](https://github.com/PrismJS/prism/commit/6232878b)\n    * Website: Added Coy bug to the known failures page. ([#2170](https://github.com/PrismJS/prism/issues/2170)) [`e9dab85e`](https://github.com/PrismJS/prism/commit/e9dab85e)\n\n## 1.19.0 (2020-01-13)\n\n### New components\n\n* __Latte__ ([#2140](https://github.com/PrismJS/prism/issues/2140)) [`694a81b8`](https://github.com/PrismJS/prism/commit/694a81b8)\n* __Neon__ ([#2140](https://github.com/PrismJS/prism/issues/2140)) [`694a81b8`](https://github.com/PrismJS/prism/commit/694a81b8)\n* __QML__ ([#2139](https://github.com/PrismJS/prism/issues/2139)) [`c40d96c6`](https://github.com/PrismJS/prism/commit/c40d96c6)\n\n### Updated components\n\n* __Handlebars__\n    * Added support for `:` and improved the `variable` pattern ([#2172](https://github.com/PrismJS/prism/issues/2172)) [`ef4d29d9`](https://github.com/PrismJS/prism/commit/ef4d29d9)\n* __JavaScript__\n    * Added support for keywords after a spread operator ([#2148](https://github.com/PrismJS/prism/issues/2148)) [`1f3f8929`](https://github.com/PrismJS/prism/commit/1f3f8929)\n    * Better regex detection ([#2158](https://github.com/PrismJS/prism/issues/2158)) [`a23d8f84`](https://github.com/PrismJS/prism/commit/a23d8f84)\n* __Markdown__\n    * Better language detection for code blocks ([#2114](https://github.com/PrismJS/prism/issues/2114)) [`d7ad48f9`](https://github.com/PrismJS/prism/commit/d7ad48f9)\n* __OCaml__\n    * Improvements ([#2179](https://github.com/PrismJS/prism/issues/2179)) [`2a570fd4`](https://github.com/PrismJS/prism/commit/2a570fd4)\n* __PHP__\n    * Fixed exponential runtime of a pattern ([#2157](https://github.com/PrismJS/prism/issues/2157)) [`24c8f833`](https://github.com/PrismJS/prism/commit/24c8f833)\n* __React JSX__\n    * Improved spread operator in tag attributes ([#2159](https://github.com/PrismJS/prism/issues/2159)) [`fd857e7b`](https://github.com/PrismJS/prism/commit/fd857e7b)\n    * Made `$` a valid character for attribute names ([#2144](https://github.com/PrismJS/prism/issues/2144)) [`f018cf04`](https://github.com/PrismJS/prism/commit/f018cf04)\n* __Reason__\n    * Added support for single line comments ([#2150](https://github.com/PrismJS/prism/issues/2150)) [`7f1c55b7`](https://github.com/PrismJS/prism/commit/7f1c55b7)\n* __Ruby__\n    * Override 'class-name' definition ([#2135](https://github.com/PrismJS/prism/issues/2135)) [`401d4b02`](https://github.com/PrismJS/prism/commit/401d4b02)\n* __SAS__\n    * Added CASL support ([#2112](https://github.com/PrismJS/prism/issues/2112)) [`99d979a0`](https://github.com/PrismJS/prism/commit/99d979a0)\n\n### Updated plugins\n\n* __Custom Class__\n    * Fixed TypeError when mapper is undefined ([#2167](https://github.com/PrismJS/prism/issues/2167)) [`543f04d7`](https://github.com/PrismJS/prism/commit/543f04d7)\n\n### Updated themes\n\n* Added missing `.token` selector ([#2161](https://github.com/PrismJS/prism/issues/2161)) [`86780457`](https://github.com/PrismJS/prism/commit/86780457)\n\n### Other\n\n* Added a check for redundant dependency declarations ([#2142](https://github.com/PrismJS/prism/issues/2142)) [`a06aca06`](https://github.com/PrismJS/prism/commit/a06aca06)\n* Added a check for examples ([#2128](https://github.com/PrismJS/prism/issues/2128)) [`0b539136`](https://github.com/PrismJS/prism/commit/0b539136)\n* Added silent option to `loadLanguages` ([#2147](https://github.com/PrismJS/prism/issues/2147)) [`191b4116`](https://github.com/PrismJS/prism/commit/191b4116)\n* __Infrastructure__\n    * Dependencies: Improved `getLoader` ([#2151](https://github.com/PrismJS/prism/issues/2151)) [`199bdcae`](https://github.com/PrismJS/prism/commit/199bdcae)\n    * Updated gulp to v4.0.2 ([#2178](https://github.com/PrismJS/prism/issues/2178)) [`e5678a00`](https://github.com/PrismJS/prism/commit/e5678a00)\n* __Website__\n    * Custom Class: Fixed examples ([#2160](https://github.com/PrismJS/prism/issues/2160)) [`0c2fe405`](https://github.com/PrismJS/prism/commit/0c2fe405)\n    * Added documentation for new dependency API ([#2141](https://github.com/PrismJS/prism/issues/2141)) [`59068d67`](https://github.com/PrismJS/prism/commit/59068d67)\n\n## 1.18.0 (2020-01-04)\n\n### New components\n\n* __ANTLR4__ ([#2063](https://github.com/PrismJS/prism/issues/2063)) [`aaaa29a8`](https://github.com/PrismJS/prism/commit/aaaa29a8)\n* __AQL__ ([#2025](https://github.com/PrismJS/prism/issues/2025)) [`3fdb7d55`](https://github.com/PrismJS/prism/commit/3fdb7d55)\n* __BBcode__ ([#2095](https://github.com/PrismJS/prism/issues/2095)) [`aaf13aa6`](https://github.com/PrismJS/prism/commit/aaf13aa6)\n* __BrightScript__ ([#2096](https://github.com/PrismJS/prism/issues/2096)) [`631f1e34`](https://github.com/PrismJS/prism/commit/631f1e34)\n* __Embedded Lua templating__ ([#2050](https://github.com/PrismJS/prism/issues/2050)) [`0b771c90`](https://github.com/PrismJS/prism/commit/0b771c90)\n* __Firestore security rules__ ([#2010](https://github.com/PrismJS/prism/issues/2010)) [`9f722586`](https://github.com/PrismJS/prism/commit/9f722586)\n* __FreeMarker Template Language__ ([#2080](https://github.com/PrismJS/prism/issues/2080)) [`2f3da7e8`](https://github.com/PrismJS/prism/commit/2f3da7e8)\n* __GDScript__ ([#2006](https://github.com/PrismJS/prism/issues/2006)) [`e2b99f40`](https://github.com/PrismJS/prism/commit/e2b99f40)\n* __MoonScript__ ([#2100](https://github.com/PrismJS/prism/issues/2100)) [`f31946b3`](https://github.com/PrismJS/prism/commit/f31946b3)\n* __Robot Framework__ (only the plain text format) ([#2034](https://github.com/PrismJS/prism/issues/2034)) [`f7eaa618`](https://github.com/PrismJS/prism/commit/f7eaa618)\n* __Solidity (Ethereum)__ ([#2031](https://github.com/PrismJS/prism/issues/2031)) [`cc2cf3f7`](https://github.com/PrismJS/prism/commit/cc2cf3f7)\n* __SPARQL__ ([#2033](https://github.com/PrismJS/prism/issues/2033)) [`c42f877d`](https://github.com/PrismJS/prism/commit/c42f877d)\n* __SQF: Status Quo Function (Arma 3)__ ([#2079](https://github.com/PrismJS/prism/issues/2079)) [`cfac94ec`](https://github.com/PrismJS/prism/commit/cfac94ec)\n* __Turtle__ & __TriG__ ([#2012](https://github.com/PrismJS/prism/issues/2012)) [`508d57ac`](https://github.com/PrismJS/prism/commit/508d57ac)\n* __Zig__ ([#2019](https://github.com/PrismJS/prism/issues/2019)) [`a7cf56b7`](https://github.com/PrismJS/prism/commit/a7cf56b7)\n\n### Updated components\n\n* Minor improvements for C-like and Clojure ([#2064](https://github.com/PrismJS/prism/issues/2064)) [`7db0cab3`](https://github.com/PrismJS/prism/commit/7db0cab3)\n* Inlined some unnecessary rest properties ([#2082](https://github.com/PrismJS/prism/issues/2082)) [`ad3fa443`](https://github.com/PrismJS/prism/commit/ad3fa443)\n* __AQL__\n    * Disallow unclosed multiline comments again ([#2089](https://github.com/PrismJS/prism/issues/2089)) [`717ace02`](https://github.com/PrismJS/prism/commit/717ace02)\n    * Allow unclosed multi-line comments ([#2058](https://github.com/PrismJS/prism/issues/2058)) [`f3c6ba59`](https://github.com/PrismJS/prism/commit/f3c6ba59)\n    * More pseudo keywords ([#2055](https://github.com/PrismJS/prism/issues/2055)) [`899574eb`](https://github.com/PrismJS/prism/commit/899574eb)\n    * Added missing keyword + minor improvements ([#2047](https://github.com/PrismJS/prism/issues/2047)) [`32a4c422`](https://github.com/PrismJS/prism/commit/32a4c422)\n* __Clojure__\n    * Added multiline strings (lisp style) ([#2061](https://github.com/PrismJS/prism/issues/2061)) [`8ea685b8`](https://github.com/PrismJS/prism/commit/8ea685b8)\n* __CSS Extras__\n    * CSS Extras & PHP: Fixed too greedy number token ([#2009](https://github.com/PrismJS/prism/issues/2009)) [`ebe363f4`](https://github.com/PrismJS/prism/commit/ebe363f4)\n* __D__\n    * Fixed strings ([#2029](https://github.com/PrismJS/prism/issues/2029)) [`010a0157`](https://github.com/PrismJS/prism/commit/010a0157)\n* __Groovy__\n    * Minor improvements ([#2036](https://github.com/PrismJS/prism/issues/2036)) [`fb618331`](https://github.com/PrismJS/prism/commit/fb618331)\n* __Java__\n    * Added missing `::` operator ([#2101](https://github.com/PrismJS/prism/issues/2101)) [`ee7fdbee`](https://github.com/PrismJS/prism/commit/ee7fdbee)\n    * Added support for new Java 13 syntax ([#2060](https://github.com/PrismJS/prism/issues/2060)) [`a7b95dd3`](https://github.com/PrismJS/prism/commit/a7b95dd3)\n* __JavaScript__\n    * Added Optional Chaining and Nullish Coalescing ([#2084](https://github.com/PrismJS/prism/issues/2084)) [`fdb7de0d`](https://github.com/PrismJS/prism/commit/fdb7de0d)\n    * Tokenize `:` as an operator ([#2073](https://github.com/PrismJS/prism/issues/2073)) [`0e5c48d1`](https://github.com/PrismJS/prism/commit/0e5c48d1)\n* __Less__\n    * Fixed exponential backtracking ([#2016](https://github.com/PrismJS/prism/issues/2016)) [`d03d19b4`](https://github.com/PrismJS/prism/commit/d03d19b4)\n* __Markup__\n    * Improved doctype pattern ([#2094](https://github.com/PrismJS/prism/issues/2094)) [`99994c58`](https://github.com/PrismJS/prism/commit/99994c58)\n* __Python__\n    * Fixed decorators ([#2018](https://github.com/PrismJS/prism/issues/2018)) [`5b8a16d9`](https://github.com/PrismJS/prism/commit/5b8a16d9)\n* __Robot Framework__\n    * Rename \"robot-framework\" to \"robotframework\" ([#2113](https://github.com/PrismJS/prism/issues/2113)) [`baa78774`](https://github.com/PrismJS/prism/commit/baa78774)\n* __Ruby__\n    * Made `true` and `false` booleans ([#2098](https://github.com/PrismJS/prism/issues/2098)) [`68d1c472`](https://github.com/PrismJS/prism/commit/68d1c472)\n    * Added missing keywords ([#2097](https://github.com/PrismJS/prism/issues/2097)) [`f460eafc`](https://github.com/PrismJS/prism/commit/f460eafc)\n* __SAS__\n    * Added support for embedded Groovy and Lua code ([#2091](https://github.com/PrismJS/prism/issues/2091)) [`3640b3f2`](https://github.com/PrismJS/prism/commit/3640b3f2)\n    * Minor improvements ([#2085](https://github.com/PrismJS/prism/issues/2085)) [`07020c7a`](https://github.com/PrismJS/prism/commit/07020c7a)\n    * Fixed `proc-args` token by removing backreferences from string pattern ([#2013](https://github.com/PrismJS/prism/issues/2013)) [`af5a36ae`](https://github.com/PrismJS/prism/commit/af5a36ae)\n    * Major improvements ([#1981](https://github.com/PrismJS/prism/issues/1981)) [`076f6155`](https://github.com/PrismJS/prism/commit/076f6155)\n* __Smalltalk__\n    * Fixed single quote character literal ([#2041](https://github.com/PrismJS/prism/issues/2041)) [`1aabcd17`](https://github.com/PrismJS/prism/commit/1aabcd17)\n* __Turtle__\n    * Minor improvements ([#2038](https://github.com/PrismJS/prism/issues/2038)) [`8ccd258b`](https://github.com/PrismJS/prism/commit/8ccd258b)\n* __TypeScript__\n    * Added missing keyword `undefined` ([#2088](https://github.com/PrismJS/prism/issues/2088)) [`c8b48b9f`](https://github.com/PrismJS/prism/commit/c8b48b9f)\n\n### Updated plugins\n\n* New Match Braces plugin ([#1944](https://github.com/PrismJS/prism/issues/1944)) [`365faade`](https://github.com/PrismJS/prism/commit/365faade)\n* New Inline color plugin ([#2007](https://github.com/PrismJS/prism/issues/2007)) [`8403e453`](https://github.com/PrismJS/prism/commit/8403e453)\n* New Filter highlightAll plugin ([#2074](https://github.com/PrismJS/prism/issues/2074)) [`a7f70090`](https://github.com/PrismJS/prism/commit/a7f70090)\n* __Custom Class__\n    * New class adder feature ([#2075](https://github.com/PrismJS/prism/issues/2075)) [`dab7998e`](https://github.com/PrismJS/prism/commit/dab7998e)\n* __File Highlight__\n    * Made the download button its own plugin ([#1840](https://github.com/PrismJS/prism/issues/1840)) [`c6c62a69`](https://github.com/PrismJS/prism/commit/c6c62a69)\n\n### Other\n\n* Issue template improvements ([#2069](https://github.com/PrismJS/prism/issues/2069)) [`53f07b1b`](https://github.com/PrismJS/prism/commit/53f07b1b)\n* Readme: Links now use HTTPS if available ([#2045](https://github.com/PrismJS/prism/issues/2045)) [`6cd0738a`](https://github.com/PrismJS/prism/commit/6cd0738a)\n* __Core__\n    * Fixed null reference ([#2106](https://github.com/PrismJS/prism/issues/2106)) [`0fd062d5`](https://github.com/PrismJS/prism/commit/0fd062d5)\n    * Fixed race condition caused by deferring the script ([#2103](https://github.com/PrismJS/prism/issues/2103)) [`a3785ec9`](https://github.com/PrismJS/prism/commit/a3785ec9)\n    * Minor improvements ([#1973](https://github.com/PrismJS/prism/issues/1973)) [`2d858e0a`](https://github.com/PrismJS/prism/commit/2d858e0a)\n    * Fixed greedy partial lookbehinds not working ([#2030](https://github.com/PrismJS/prism/issues/2030)) [`174ed103`](https://github.com/PrismJS/prism/commit/174ed103)\n    * Fixed greedy targeting bug ([#1932](https://github.com/PrismJS/prism/issues/1932)) [`e864d518`](https://github.com/PrismJS/prism/commit/e864d518)\n    * Doubly check the `manual` flag ([#1957](https://github.com/PrismJS/prism/issues/1957)) [`d49f0f26`](https://github.com/PrismJS/prism/commit/d49f0f26)\n    * IE11 workaround for `currentScript` ([#2104](https://github.com/PrismJS/prism/issues/2104)) [`2108c60f`](https://github.com/PrismJS/prism/commit/2108c60f)\n* __Infrastructure__\n    * gulp: Fixed changes task [`2f495905`](https://github.com/PrismJS/prism/commit/2f495905)\n    * npm: Added `.github` folder to npm ignore ([#2052](https://github.com/PrismJS/prism/issues/2052)) [`1af89e06`](https://github.com/PrismJS/prism/commit/1af89e06)\n    * npm: Updated dependencies to fix 122 vulnerabilities ([#1997](https://github.com/PrismJS/prism/issues/1997)) [`3af5d744`](https://github.com/PrismJS/prism/commit/3af5d744)\n    * Tests: New test for unused capturing groups ([#1996](https://github.com/PrismJS/prism/issues/1996)) [`c187e229`](https://github.com/PrismJS/prism/commit/c187e229)\n    * Tests: Simplified error message format ([#2056](https://github.com/PrismJS/prism/issues/2056)) [`007c9af4`](https://github.com/PrismJS/prism/commit/007c9af4)\n    * Tests: New test for nice names ([#1911](https://github.com/PrismJS/prism/issues/1911)) [`3fda5c95`](https://github.com/PrismJS/prism/commit/3fda5c95)\n    * Standardized dependency logic implementation ([#1998](https://github.com/PrismJS/prism/issues/1998)) [`7a4a0c7c`](https://github.com/PrismJS/prism/commit/7a4a0c7c)\n* __Website__\n    * Added @mAAdhaTTah and @RunDevelopment to credits and footer [`5d07aa7c`](https://github.com/PrismJS/prism/commit/5d07aa7c)\n    * Added plugin descriptions to plugin list ([#2076](https://github.com/PrismJS/prism/issues/2076)) [`cdfa60ac`](https://github.com/PrismJS/prism/commit/cdfa60ac)\n    * Use HTTPS link to alistapart.com ([#2044](https://github.com/PrismJS/prism/issues/2044)) [`8bcc1b85`](https://github.com/PrismJS/prism/commit/8bcc1b85)\n    * Fixed the Toolbar plugin's overflow issue ([#1966](https://github.com/PrismJS/prism/issues/1966)) [`56a8711c`](https://github.com/PrismJS/prism/commit/56a8711c)\n    * FAQ update ([#1977](https://github.com/PrismJS/prism/issues/1977)) [`8a572af5`](https://github.com/PrismJS/prism/commit/8a572af5)\n    * Use modern JavaScript in the NodeJS usage section ([#1942](https://github.com/PrismJS/prism/issues/1942)) [`5c68a556`](https://github.com/PrismJS/prism/commit/5c68a556)\n    * Improved test page performance for Chromium ([#2020](https://github.com/PrismJS/prism/issues/2020)) [`3509f3e5`](https://github.com/PrismJS/prism/commit/3509f3e5)\n    * Fixed alias example in extending page ([#2011](https://github.com/PrismJS/prism/issues/2011)) [`7cb65eec`](https://github.com/PrismJS/prism/commit/7cb65eec)\n    * Robot Framework: Renamed example file ([#2126](https://github.com/PrismJS/prism/issues/2126)) [`9908ca69`](https://github.com/PrismJS/prism/commit/9908ca69)\n\n## 1.17.1 (2019-07-21)\n\n### Other\n\n* __Infrastructure__\n    * Add .DS_Store to npmignore [`c2229ec2`](https://github.com/PrismJS/prism/commit/c2229ec2)\n\n## 1.17.0 (2019-07-21)\n\n### New components\n\n* __DNS zone file__ ([#1961](https://github.com/PrismJS/prism/issues/1961)) [`bb84f98c`](https://github.com/PrismJS/prism/commit/bb84f98c)\n* __JQ__ ([#1896](https://github.com/PrismJS/prism/issues/1896)) [`73d964be`](https://github.com/PrismJS/prism/commit/73d964be)\n* __JS Templates__: Syntax highlighting inside tagged template literals ([#1931](https://github.com/PrismJS/prism/issues/1931)) [`c8844286`](https://github.com/PrismJS/prism/commit/c8844286)\n* __LilyPond__ ([#1967](https://github.com/PrismJS/prism/issues/1967)) [`5d992fc5`](https://github.com/PrismJS/prism/commit/5d992fc5)\n* __PascaLIGO__ ([#1947](https://github.com/PrismJS/prism/issues/1947)) [`858201c7`](https://github.com/PrismJS/prism/commit/858201c7)\n* __PC-Axis__ ([#1940](https://github.com/PrismJS/prism/issues/1940)) [`473f7fbd`](https://github.com/PrismJS/prism/commit/473f7fbd)\n* __Shell session__ ([#1892](https://github.com/PrismJS/prism/issues/1892)) [`96044979`](https://github.com/PrismJS/prism/commit/96044979)\n* __Splunk SPL__ ([#1962](https://github.com/PrismJS/prism/issues/1962)) [`c93c066b`](https://github.com/PrismJS/prism/commit/c93c066b)\n\n### New plugins\n\n* __Diff Highlight__: Syntax highlighting inside diff blocks ([#1889](https://github.com/PrismJS/prism/issues/1889)) [`e7702ae1`](https://github.com/PrismJS/prism/commit/e7702ae1)\n\n### Updated components\n\n* __Bash__\n    * Major improvements ([#1443](https://github.com/PrismJS/prism/issues/1443)) [`363281b3`](https://github.com/PrismJS/prism/commit/363281b3)\n* __C#__\n    * Added `cs` alias ([#1899](https://github.com/PrismJS/prism/issues/1899)) [`a8164559`](https://github.com/PrismJS/prism/commit/a8164559)\n* __C++__\n    * Fixed number pattern ([#1887](https://github.com/PrismJS/prism/issues/1887)) [`3de29e72`](https://github.com/PrismJS/prism/commit/3de29e72)\n* __CSS__\n    * Extended `url` inside ([#1874](https://github.com/PrismJS/prism/issues/1874)) [`f0a10669`](https://github.com/PrismJS/prism/commit/f0a10669)\n    * Removed unnecessary flag and modifier ([#1875](https://github.com/PrismJS/prism/issues/1875)) [`74050c68`](https://github.com/PrismJS/prism/commit/74050c68)\n* __CSS Extras__\n    * Added `even` & `odd` keywords to `n-th` pattern ([#1872](https://github.com/PrismJS/prism/issues/1872)) [`5e5a3e00`](https://github.com/PrismJS/prism/commit/5e5a3e00)\n* __F#__\n    * Improved character literals ([#1956](https://github.com/PrismJS/prism/issues/1956)) [`d58d2aeb`](https://github.com/PrismJS/prism/commit/d58d2aeb)\n* __JavaScript__\n    * Fixed escaped template interpolation ([#1931](https://github.com/PrismJS/prism/issues/1931)) [`c8844286`](https://github.com/PrismJS/prism/commit/c8844286)\n    * Added support for private fields ([#1950](https://github.com/PrismJS/prism/issues/1950)) [`7bd08327`](https://github.com/PrismJS/prism/commit/7bd08327)\n    * Added support for numeric separators ([#1895](https://github.com/PrismJS/prism/issues/1895)) [`6068bf18`](https://github.com/PrismJS/prism/commit/6068bf18)\n    * Increased bracket count of interpolation expressions in template strings ([#1845](https://github.com/PrismJS/prism/issues/1845)) [`c13d6e7d`](https://github.com/PrismJS/prism/commit/c13d6e7d)\n    * Added support for the `s` regex flag ([#1846](https://github.com/PrismJS/prism/issues/1846)) [`9e164935`](https://github.com/PrismJS/prism/commit/9e164935)\n    * Formatting: Added missing semicolon ([#1856](https://github.com/PrismJS/prism/issues/1856)) [`e2683959`](https://github.com/PrismJS/prism/commit/e2683959)\n* __JSON__\n    * Kinda fixed comment issue ([#1853](https://github.com/PrismJS/prism/issues/1853)) [`cbe05ec3`](https://github.com/PrismJS/prism/commit/cbe05ec3)\n* __Julia__\n    * Added `struct` keyword ([#1941](https://github.com/PrismJS/prism/issues/1941)) [`feb1b6f5`](https://github.com/PrismJS/prism/commit/feb1b6f5)\n    * Highlight `Inf` and `NaN` as constants ([#1921](https://github.com/PrismJS/prism/issues/1921)) [`2141129f`](https://github.com/PrismJS/prism/commit/2141129f)\n    * Added `in` keyword ([#1918](https://github.com/PrismJS/prism/issues/1918)) [`feb3187f`](https://github.com/PrismJS/prism/commit/feb3187f)\n* __LaTeX__\n    * Added TeX and ConTeXt alias ([#1915](https://github.com/PrismJS/prism/issues/1915)) [`5ad58a75`](https://github.com/PrismJS/prism/commit/5ad58a75)\n    * Added support for $$ equations [`6f53f749`](https://github.com/PrismJS/prism/commit/6f53f749)\n* __Markdown__\n    * Markdown: Added support for auto-loading code block languages ([#1898](https://github.com/PrismJS/prism/issues/1898)) [`05823e88`](https://github.com/PrismJS/prism/commit/05823e88)\n    * Improved URLs ([#1955](https://github.com/PrismJS/prism/issues/1955)) [`b9ec6fd8`](https://github.com/PrismJS/prism/commit/b9ec6fd8)\n    * Added support for nested bold and italic expressions ([#1897](https://github.com/PrismJS/prism/issues/1897)) [`11903721`](https://github.com/PrismJS/prism/commit/11903721)\n    * Added support for tables ([#1848](https://github.com/PrismJS/prism/issues/1848)) [`cedb8e84`](https://github.com/PrismJS/prism/commit/cedb8e84)\n* __Perl__\n    * Added `return` keyword ([#1943](https://github.com/PrismJS/prism/issues/1943)) [`2f39de97`](https://github.com/PrismJS/prism/commit/2f39de97)\n* __Protocol Buffers__\n    * Full support for PB2 and PB3 syntax + numerous other improvements ([#1948](https://github.com/PrismJS/prism/issues/1948)) [`de10bd1d`](https://github.com/PrismJS/prism/commit/de10bd1d)\n* __reST (reStructuredText)__\n    * Fixed exponentially backtracking pattern ([#1986](https://github.com/PrismJS/prism/issues/1986)) [`8b5d67a3`](https://github.com/PrismJS/prism/commit/8b5d67a3)\n* __Rust__\n    * Added `async` and `await` keywords. ([#1882](https://github.com/PrismJS/prism/issues/1882)) [`4faa3314`](https://github.com/PrismJS/prism/commit/4faa3314)\n    * Improved punctuation and operators ([#1839](https://github.com/PrismJS/prism/issues/1839)) [`a42b1557`](https://github.com/PrismJS/prism/commit/a42b1557)\n* __Sass (Scss)__\n    * Fixed exponential url pattern ([#1938](https://github.com/PrismJS/prism/issues/1938)) [`4b6b6e8b`](https://github.com/PrismJS/prism/commit/4b6b6e8b)\n* __Scheme__\n    * Added support for rational number literals ([#1964](https://github.com/PrismJS/prism/issues/1964)) [`e8811d22`](https://github.com/PrismJS/prism/commit/e8811d22)\n* __TOML__\n    * Minor improvements ([#1917](https://github.com/PrismJS/prism/issues/1917)) [`3e181241`](https://github.com/PrismJS/prism/commit/3e181241)\n* __Visual Basic__\n    * Added support for interpolation strings ([#1971](https://github.com/PrismJS/prism/issues/1971)) [`4a2c90c1`](https://github.com/PrismJS/prism/commit/4a2c90c1)\n\n### Updated plugins\n\n* __Autolinker__\n    * Improved component path guessing ([#1928](https://github.com/PrismJS/prism/issues/1928)) [`452d5c7d`](https://github.com/PrismJS/prism/commit/452d5c7d)\n    * Improved URL regex ([#1842](https://github.com/PrismJS/prism/issues/1842)) [`eb28b62b`](https://github.com/PrismJS/prism/commit/eb28b62b)\n* __Autoloader__\n    * Fixed and improved callbacks ([#1935](https://github.com/PrismJS/prism/issues/1935)) [`b19f512f`](https://github.com/PrismJS/prism/commit/b19f512f)\n* __Command Line__\n    * Fix for uncaught errors for empty 'commandLine' object. ([#1862](https://github.com/PrismJS/prism/issues/1862)) [`c24831b5`](https://github.com/PrismJS/prism/commit/c24831b5)\n* __Copy to Clipboard Button__\n    * Switch anchor to button ([#1926](https://github.com/PrismJS/prism/issues/1926)) [`79880197`](https://github.com/PrismJS/prism/commit/79880197)\n* __Custom Class__\n    * Added mapper functions for language specific transformations ([#1873](https://github.com/PrismJS/prism/issues/1873)) [`acceb3b5`](https://github.com/PrismJS/prism/commit/acceb3b5)\n* __Line Highlight__\n    * Batching DOM read/writes to avoid reflows ([#1865](https://github.com/PrismJS/prism/issues/1865)) [`632ce00c`](https://github.com/PrismJS/prism/commit/632ce00c)\n* __Toolbar__\n    * Added `className` option for toolbar items ([#1951](https://github.com/PrismJS/prism/issues/1951)) [`5ab28bbe`](https://github.com/PrismJS/prism/commit/5ab28bbe)\n    * Set opacity to 1 when focus is within ([#1927](https://github.com/PrismJS/prism/issues/1927)) [`0b1662dd`](https://github.com/PrismJS/prism/commit/0b1662dd)\n\n### Updated themes\n\n* __Funky__\n    * Fixed typo ([#1960](https://github.com/PrismJS/prism/issues/1960)) [`7d056591`](https://github.com/PrismJS/prism/commit/7d056591)\n\n### Other\n\n* README: Added npm downloads badge ([#1934](https://github.com/PrismJS/prism/issues/1934)) [`d673d701`](https://github.com/PrismJS/prism/commit/d673d701)\n* README: Minor changes ([#1857](https://github.com/PrismJS/prism/issues/1857)) [`77e403cb`](https://github.com/PrismJS/prism/commit/77e403cb)\n* Clearer description for the highlighting bug report template ([#1850](https://github.com/PrismJS/prism/issues/1850)) [`2f9c9261`](https://github.com/PrismJS/prism/commit/2f9c9261)\n* More language examples ([#1917](https://github.com/PrismJS/prism/issues/1917)) [`3e181241`](https://github.com/PrismJS/prism/commit/3e181241)\n* __Core__\n    * Removed `env.elements` from `before-highlightall` hook ([#1968](https://github.com/PrismJS/prism/issues/1968)) [`9d9e2ca4`](https://github.com/PrismJS/prism/commit/9d9e2ca4)\n    * Made `language-none` the default language ([#1858](https://github.com/PrismJS/prism/issues/1858)) [`fd691c52`](https://github.com/PrismJS/prism/commit/fd691c52)\n    * Removed `parent` from the `wrap` hook's environment ([#1837](https://github.com/PrismJS/prism/issues/1837)) [`65a4e894`](https://github.com/PrismJS/prism/commit/65a4e894)\n* __Infrastructure__\n    * gulp: Split `gulpfile.js` and expanded `changes` task ([#1835](https://github.com/PrismJS/prism/issues/1835)) [`033c5ad8`](https://github.com/PrismJS/prism/commit/033c5ad8)\n    * gulp: JSON formatting for partly generated files ([#1933](https://github.com/PrismJS/prism/issues/1933)) [`d4373f3a`](https://github.com/PrismJS/prism/commit/d4373f3a)\n    * gulp: Use `async` functions & drop testing on Node v6 ([#1783](https://github.com/PrismJS/prism/issues/1783)) [`0dd44d53`](https://github.com/PrismJS/prism/commit/0dd44d53)\n    * Tests: `lookbehind` test for patterns ([#1890](https://github.com/PrismJS/prism/issues/1890)) [`3ba786cd`](https://github.com/PrismJS/prism/commit/3ba786cd)\n    * Tests: Added test for empty regexes ([#1847](https://github.com/PrismJS/prism/issues/1847)) [`c1e6a7fd`](https://github.com/PrismJS/prism/commit/c1e6a7fd)\n* __Website__\n    * Added tutorial for using PrismJS with React ([#1979](https://github.com/PrismJS/prism/issues/1979)) [`f1e16c7b`](https://github.com/PrismJS/prism/commit/f1e16c7b)\n    * Update footer's GitHub repository URL and capitalisation of \"GitHub\" ([#1983](https://github.com/PrismJS/prism/issues/1983)) [`bab744a6`](https://github.com/PrismJS/prism/commit/bab744a6)\n    * Added known failures page ([#1876](https://github.com/PrismJS/prism/issues/1876)) [`36a5fa0e`](https://github.com/PrismJS/prism/commit/36a5fa0e)\n    * Added basic usage for CDNs ([#1924](https://github.com/PrismJS/prism/issues/1924)) [`922ec555`](https://github.com/PrismJS/prism/commit/922ec555)\n    * New tutorial for Drupal ([#1859](https://github.com/PrismJS/prism/issues/1859)) [`d2089d83`](https://github.com/PrismJS/prism/commit/d2089d83)\n    * Updated website page styles to not interfere with themes ([#1952](https://github.com/PrismJS/prism/issues/1952)) [`b6543853`](https://github.com/PrismJS/prism/commit/b6543853)\n    * Download page: Improved performance for Chromium-based browsers ([#1907](https://github.com/PrismJS/prism/issues/1907)) [`11f18e36`](https://github.com/PrismJS/prism/commit/11f18e36)\n    * Download page: Fixed Edge's word wrap ([#1920](https://github.com/PrismJS/prism/issues/1920)) [`5d191b92`](https://github.com/PrismJS/prism/commit/5d191b92)\n    * Examples page: Minor improvements ([#1919](https://github.com/PrismJS/prism/issues/1919)) [`a16d4a25`](https://github.com/PrismJS/prism/commit/a16d4a25)\n    * Extending page: Fixed typo + new alias section ([#1949](https://github.com/PrismJS/prism/issues/1949)) [`24c8e717`](https://github.com/PrismJS/prism/commit/24c8e717)\n    * Extending page: Added \"Creating a new language definition\" section ([#1925](https://github.com/PrismJS/prism/issues/1925)) [`ddf81233`](https://github.com/PrismJS/prism/commit/ddf81233)\n    * Test page: Use `prism-core.js` instead of `prism.js` ([#1908](https://github.com/PrismJS/prism/issues/1908)) [`0853e694`](https://github.com/PrismJS/prism/commit/0853e694)\n    * Copy to clipboard: Fixed typo ([#1869](https://github.com/PrismJS/prism/issues/1869)) [`59d4323f`](https://github.com/PrismJS/prism/commit/59d4323f)\n    * JSONP Highlight: Fixed examples ([#1877](https://github.com/PrismJS/prism/issues/1877)) [`f8ae465d`](https://github.com/PrismJS/prism/commit/f8ae465d)\n    * Line numbers: Fixed typo on webpage ([#1838](https://github.com/PrismJS/prism/issues/1838)) [`0f16eb87`](https://github.com/PrismJS/prism/commit/0f16eb87)\n\n## 1.16.0 (2019-03-24)\n\n### New components\n\n* __ANBF__ ([#1753](https://github.com/PrismJS/prism/issues/1753)) [`6d98f0e7`](https://github.com/PrismJS/prism/commit/6d98f0e7)\n* __BNF__ & __RBNF__ ([#1754](https://github.com/PrismJS/prism/issues/1754)) [`1df96c55`](https://github.com/PrismJS/prism/commit/1df96c55)\n* __CIL__ ([#1593](https://github.com/PrismJS/prism/issues/1593)) [`38def334`](https://github.com/PrismJS/prism/commit/38def334)\n* __CMake__ ([#1820](https://github.com/PrismJS/prism/issues/1820)) [`30779976`](https://github.com/PrismJS/prism/commit/30779976)\n* __Doc comment__ ([#1541](https://github.com/PrismJS/prism/issues/1541)) [`493d19ef`](https://github.com/PrismJS/prism/commit/493d19ef)\n* __EBNF__ ([#1756](https://github.com/PrismJS/prism/issues/1756)) [`13e1c97d`](https://github.com/PrismJS/prism/commit/13e1c97d)\n* __EJS__ ([#1769](https://github.com/PrismJS/prism/issues/1769)) [`c37c90df`](https://github.com/PrismJS/prism/commit/c37c90df)\n* __G-code__ ([#1572](https://github.com/PrismJS/prism/issues/1572)) [`2288c25e`](https://github.com/PrismJS/prism/commit/2288c25e)\n* __GameMaker Language__ ([#1551](https://github.com/PrismJS/prism/issues/1551)) [`e529edd8`](https://github.com/PrismJS/prism/commit/e529edd8)\n* __HCL__ ([#1594](https://github.com/PrismJS/prism/issues/1594)) [`c939df8e`](https://github.com/PrismJS/prism/commit/c939df8e)\n* __Java stack trace__ ([#1520](https://github.com/PrismJS/prism/issues/1520)) [`4a8219a4`](https://github.com/PrismJS/prism/commit/4a8219a4)\n* __JavaScript Extras__ ([#1743](https://github.com/PrismJS/prism/issues/1743)) [`bb628606`](https://github.com/PrismJS/prism/commit/bb628606)\n* __JSON5__ ([#1744](https://github.com/PrismJS/prism/issues/1744)) [`64dc049d`](https://github.com/PrismJS/prism/commit/64dc049d)\n* __N1QL__ ([#1620](https://github.com/PrismJS/prism/issues/1620)) [`7def8f5c`](https://github.com/PrismJS/prism/commit/7def8f5c)\n* __Nand To Tetris HDL__ ([#1710](https://github.com/PrismJS/prism/issues/1710)) [`b94b56c1`](https://github.com/PrismJS/prism/commit/b94b56c1)\n* __Regex__ ([#1682](https://github.com/PrismJS/prism/issues/1682)) [`571704cb`](https://github.com/PrismJS/prism/commit/571704cb)\n* __T4__ ([#1699](https://github.com/PrismJS/prism/issues/1699)) [`16f2ad06`](https://github.com/PrismJS/prism/commit/16f2ad06)\n* __TOML__ ([#1488](https://github.com/PrismJS/prism/issues/1488)) [`5b6ad70d`](https://github.com/PrismJS/prism/commit/5b6ad70d)\n* __Vala__ ([#1658](https://github.com/PrismJS/prism/issues/1658)) [`b48c012c`](https://github.com/PrismJS/prism/commit/b48c012c)\n\n### Updated components\n\n* Fixed dependencies of Pug and Pure ([#1759](https://github.com/PrismJS/prism/issues/1759)) [`c9a32674`](https://github.com/PrismJS/prism/commit/c9a32674)\n* Add file extensions support for major languages ([#1478](https://github.com/PrismJS/prism/issues/1478)) [`0c8f6504`](https://github.com/PrismJS/prism/commit/0c8f6504)\n* Fixed patterns which can match the empty string ([#1775](https://github.com/PrismJS/prism/issues/1775)) [`86dd3e42`](https://github.com/PrismJS/prism/commit/86dd3e42)\n* More variables for better code compression ([#1489](https://github.com/PrismJS/prism/issues/1489)) [`bc53e093`](https://github.com/PrismJS/prism/commit/bc53e093)\n* Added missing aliases ([#1830](https://github.com/PrismJS/prism/issues/1830)) [`8d28c74c`](https://github.com/PrismJS/prism/commit/8d28c74c)\n* Replaced all occurrences of `new RegExp` with `RegExp` ([#1493](https://github.com/PrismJS/prism/issues/1493)) [`44fed4d3`](https://github.com/PrismJS/prism/commit/44fed4d3)\n* Added missing aliases to components.json ([#1503](https://github.com/PrismJS/prism/issues/1503)) [`2fb66e04`](https://github.com/PrismJS/prism/commit/2fb66e04)\n* __Apacheconf__\n\t* Apache config: Minor improvements + new keyword ([#1823](https://github.com/PrismJS/prism/issues/1823)) [`a91be7b2`](https://github.com/PrismJS/prism/commit/a91be7b2)\n* __AsciiDoc__\n\t* Added `adoc` alias for AsciiDoc ([#1685](https://github.com/PrismJS/prism/issues/1685)) [`88434f7a`](https://github.com/PrismJS/prism/commit/88434f7a)\n* __Bash__\n\t* Add additional commands to bash ([#1577](https://github.com/PrismJS/prism/issues/1577)) [`a2230c38`](https://github.com/PrismJS/prism/commit/a2230c38)\n\t* Added `yarn add` to bash functions ([#1731](https://github.com/PrismJS/prism/issues/1731)) [`3a32cb75`](https://github.com/PrismJS/prism/commit/3a32cb75)\n\t* Added `pnpm` function to Bash ([#1734](https://github.com/PrismJS/prism/issues/1734)) [`fccfb98d`](https://github.com/PrismJS/prism/commit/fccfb98d)\n* __Batch__\n\t* Remove batch's shell alias ([#1543](https://github.com/PrismJS/prism/issues/1543)) [`7155e60f`](https://github.com/PrismJS/prism/commit/7155e60f)\n* __C__\n\t* Improve C language ([#1697](https://github.com/PrismJS/prism/issues/1697)) [`7eccea5c`](https://github.com/PrismJS/prism/commit/7eccea5c)\n* __C-like__\n\t* Simplify function pattern of C-like language ([#1552](https://github.com/PrismJS/prism/issues/1552)) [`b520e1b6`](https://github.com/PrismJS/prism/commit/b520e1b6)\n* __C/C++/Java__\n\t* Operator fixes ([#1528](https://github.com/PrismJS/prism/issues/1528)) [`7af8f8be`](https://github.com/PrismJS/prism/commit/7af8f8be)\n* __C#__\n\t* Improvements to C# operator and punctuation ([#1532](https://github.com/PrismJS/prism/issues/1532)) [`3b1e0916`](https://github.com/PrismJS/prism/commit/3b1e0916)\n* __CSS__\n\t* Fix tokenizing !important ([#1585](https://github.com/PrismJS/prism/issues/1585)) [`c1d6cb85`](https://github.com/PrismJS/prism/commit/c1d6cb85)\n\t* Added the comma to the list of CSS punctuation [`7ea2ff28`](https://github.com/PrismJS/prism/commit/7ea2ff28)\n\t* CSS: Comma punctuation ([#1632](https://github.com/PrismJS/prism/issues/1632)) [`1b812386`](https://github.com/PrismJS/prism/commit/1b812386)\n\t* Reuse CSS selector pattern in CSS Extras ([#1637](https://github.com/PrismJS/prism/issues/1637)) [`e2f2fd19`](https://github.com/PrismJS/prism/commit/e2f2fd19)\n\t* Fixed CSS extra variable ([#1649](https://github.com/PrismJS/prism/issues/1649)) [`9de47d3a`](https://github.com/PrismJS/prism/commit/9de47d3a)\n\t* Identify CSS units and variables ([#1450](https://github.com/PrismJS/prism/issues/1450)) [`5fcee966`](https://github.com/PrismJS/prism/commit/5fcee966)\n\t* Allow multiline CSS at-rules ([#1676](https://github.com/PrismJS/prism/issues/1676)) [`4f6f3c7d`](https://github.com/PrismJS/prism/commit/4f6f3c7d)\n\t* CSS: Highlight attribute selector ([#1671](https://github.com/PrismJS/prism/issues/1671)) [`245b59d4`](https://github.com/PrismJS/prism/commit/245b59d4)\n\t* CSS: Selectors can contain any string ([#1638](https://github.com/PrismJS/prism/issues/1638)) [`a2d445d0`](https://github.com/PrismJS/prism/commit/a2d445d0)\n\t* CSS extras: Highlighting for pseudo class arguments ([#1650](https://github.com/PrismJS/prism/issues/1650)) [`70a40414`](https://github.com/PrismJS/prism/commit/70a40414)\n* __Django__\n\t* Django/Jinja2 improvements ([#1800](https://github.com/PrismJS/prism/issues/1800)) [`f2467488`](https://github.com/PrismJS/prism/commit/f2467488)\n* __F#__\n\t* Chars can only contain one character ([#1570](https://github.com/PrismJS/prism/issues/1570)) [`f96b083a`](https://github.com/PrismJS/prism/commit/f96b083a)\n\t* Improve F# ([#1573](https://github.com/PrismJS/prism/issues/1573)) [`00bfc969`](https://github.com/PrismJS/prism/commit/00bfc969)\n* __GraphQL__\n\t* Improved field highlighting for GraphQL ([#1711](https://github.com/PrismJS/prism/issues/1711)) [`44aeffb9`](https://github.com/PrismJS/prism/commit/44aeffb9)\n\t* Added GraphQL improvements and tests ([#1788](https://github.com/PrismJS/prism/issues/1788)) [`b2298b12`](https://github.com/PrismJS/prism/commit/b2298b12)\n* __Haskell__\n\t* Added `hs` alias for Haskell ([#1831](https://github.com/PrismJS/prism/issues/1831)) [`64baec3c`](https://github.com/PrismJS/prism/commit/64baec3c)\n* __HTTP__\n\t* Improved HTTP content highlighting ([#1598](https://github.com/PrismJS/prism/issues/1598)) [`1b75da90`](https://github.com/PrismJS/prism/commit/1b75da90)\n* __Ini__\n\t* Add support for # comments to INI language ([#1730](https://github.com/PrismJS/prism/issues/1730)) [`baf6bb0c`](https://github.com/PrismJS/prism/commit/baf6bb0c)\n* __Java__\n\t* Add Java 10 support ([#1549](https://github.com/PrismJS/prism/issues/1549)) [`8c981a22`](https://github.com/PrismJS/prism/commit/8c981a22)\n\t* Added module keywords to Java. ([#1655](https://github.com/PrismJS/prism/issues/1655)) [`6e250a5f`](https://github.com/PrismJS/prism/commit/6e250a5f)\n\t* Improve Java ([#1474](https://github.com/PrismJS/prism/issues/1474)) [`81bd8f0b`](https://github.com/PrismJS/prism/commit/81bd8f0b)\n* __JavaScript__\n\t* Fix regex for `catch` and `finally` ([#1527](https://github.com/PrismJS/prism/issues/1527)) [`ebd1b9a6`](https://github.com/PrismJS/prism/commit/ebd1b9a6)\n\t* Highlighting of supposed classes and functions ([#1482](https://github.com/PrismJS/prism/issues/1482)) [`c40f6047`](https://github.com/PrismJS/prism/commit/c40f6047)\n\t* Added support for JS BigInt literals ([#1542](https://github.com/PrismJS/prism/issues/1542)) [`2b62e57b`](https://github.com/PrismJS/prism/commit/2b62e57b)\n\t* Fixed lowercase supposed class names ([#1544](https://github.com/PrismJS/prism/issues/1544)) [`a47c05ad`](https://github.com/PrismJS/prism/commit/a47c05ad)\n\t* Fixes regex for JS examples ([#1591](https://github.com/PrismJS/prism/issues/1591)) [`b41fb8f1`](https://github.com/PrismJS/prism/commit/b41fb8f1)\n\t* Improve regex detection in JS ([#1473](https://github.com/PrismJS/prism/issues/1473)) [`2a4758ab`](https://github.com/PrismJS/prism/commit/2a4758ab)\n\t* Identify JavaScript function parameters ([#1446](https://github.com/PrismJS/prism/issues/1446)) [`0cc8c56a`](https://github.com/PrismJS/prism/commit/0cc8c56a)\n\t* Improved JavaScript parameter recognization ([#1722](https://github.com/PrismJS/prism/issues/1722)) [`57a92035`](https://github.com/PrismJS/prism/commit/57a92035)\n\t* Make `undefined` a keyword in JS ([#1740](https://github.com/PrismJS/prism/issues/1740)) [`d9fa29a8`](https://github.com/PrismJS/prism/commit/d9fa29a8)\n\t* Fix `function-variable` in JS ([#1739](https://github.com/PrismJS/prism/issues/1739)) [`bfbea4d6`](https://github.com/PrismJS/prism/commit/bfbea4d6)\n\t* Improved JS constant pattern ([#1737](https://github.com/PrismJS/prism/issues/1737)) [`7bcec584`](https://github.com/PrismJS/prism/commit/7bcec584)\n\t* Improved JS function pattern ([#1736](https://github.com/PrismJS/prism/issues/1736)) [`8378ac83`](https://github.com/PrismJS/prism/commit/8378ac83)\n\t* JS: Fixed variables named \"async\" ([#1738](https://github.com/PrismJS/prism/issues/1738)) [`3560c643`](https://github.com/PrismJS/prism/commit/3560c643)\n\t* JS: Keyword fix ([#1808](https://github.com/PrismJS/prism/issues/1808)) [`f2d8e1c7`](https://github.com/PrismJS/prism/commit/f2d8e1c7)\n* __JSON__ / __JSONP__\n\t* Fix bugs in JSON language ([#1479](https://github.com/PrismJS/prism/issues/1479)) [`74fe81c6`](https://github.com/PrismJS/prism/commit/74fe81c6)\n\t* Adds support for comments in JSON ([#1595](https://github.com/PrismJS/prism/issues/1595)) [`8720b3e6`](https://github.com/PrismJS/prism/commit/8720b3e6)\n\t* Cleaned up JSON ([#1596](https://github.com/PrismJS/prism/issues/1596)) [`da474c77`](https://github.com/PrismJS/prism/commit/da474c77)\n\t* Added `keyword` alias to JSON's `null` ([#1733](https://github.com/PrismJS/prism/issues/1733)) [`eee06649`](https://github.com/PrismJS/prism/commit/eee06649)\n\t* Fix JSONP support ([#1745](https://github.com/PrismJS/prism/issues/1745)) [`b5041cf9`](https://github.com/PrismJS/prism/commit/b5041cf9)\n\t* Fixed JSON/JSONP examples ([#1765](https://github.com/PrismJS/prism/issues/1765)) [`ae4842db`](https://github.com/PrismJS/prism/commit/ae4842db)\n* __JSX__\n\t* React component tags are styled as classes in JSX ([#1519](https://github.com/PrismJS/prism/issues/1519)) [`3e1a9a3d`](https://github.com/PrismJS/prism/commit/3e1a9a3d)\n\t* Support JSX/TSX class-name with dot ([#1725](https://github.com/PrismJS/prism/issues/1725)) [`4362e42c`](https://github.com/PrismJS/prism/commit/4362e42c)\n* __Less__\n\t* Remove useless insertBefore in LESS ([#1629](https://github.com/PrismJS/prism/issues/1629)) [`86d31793`](https://github.com/PrismJS/prism/commit/86d31793)\n* __Lisp__\n\t* Fix Lisp exponential string pattern ([#1763](https://github.com/PrismJS/prism/issues/1763)) [`5bd182c0`](https://github.com/PrismJS/prism/commit/5bd182c0))\n* __Markdown__\n\t* Added strike support to markdown ([#1563](https://github.com/PrismJS/prism/issues/1563)) [`9d2fddc2`](https://github.com/PrismJS/prism/commit/9d2fddc2)\n\t* Fixed Markdown headers ([#1557](https://github.com/PrismJS/prism/issues/1557)) [`c6584290`](https://github.com/PrismJS/prism/commit/c6584290)\n\t* Add support for code blocks in Markdown ([#1562](https://github.com/PrismJS/prism/issues/1562)) [`b0717e70`](https://github.com/PrismJS/prism/commit/b0717e70)\n\t* Markdown: The 'md' alias is now recognized by hooks ([#1771](https://github.com/PrismJS/prism/issues/1771)) [`8ca3d65b`](https://github.com/PrismJS/prism/commit/8ca3d65b)\n* __Markup__\n\t* Decouple XML from Markup ([#1603](https://github.com/PrismJS/prism/issues/1603)) [`0030a4ef`](https://github.com/PrismJS/prism/commit/0030a4ef)\n\t* Fix for markup attributes ([#1752](https://github.com/PrismJS/prism/issues/1752)) [`c3862a24`](https://github.com/PrismJS/prism/commit/c3862a24)\n\t* Markup: Added support for CSS and JS inside of CDATAs ([#1660](https://github.com/PrismJS/prism/issues/1660)) [`57127701`](https://github.com/PrismJS/prism/commit/57127701)\n\t* Markup `addInline` improvements ([#1798](https://github.com/PrismJS/prism/issues/1798)) [`af67c32e`](https://github.com/PrismJS/prism/commit/af67c32e)\n* __Markup Templating__\n\t* Markup-templating improvements ([#1653](https://github.com/PrismJS/prism/issues/1653)) [`b62e282b`](https://github.com/PrismJS/prism/commit/b62e282b)\n* __nginx__\n\t* Add new keywords to nginx ([#1587](https://github.com/PrismJS/prism/issues/1587)) [`0d73f7f5`](https://github.com/PrismJS/prism/commit/0d73f7f5)\n* __PHP__\n\t* Update PHP keywords ([#1690](https://github.com/PrismJS/prism/issues/1690)) [`55fb0f8e`](https://github.com/PrismJS/prism/commit/55fb0f8e)\n\t* Improve recognition of constants in PHP ([#1688](https://github.com/PrismJS/prism/issues/1688)) [`f1026b4b`](https://github.com/PrismJS/prism/commit/f1026b4b)\n\t* Made false, true, and null constants in PHP ([#1694](https://github.com/PrismJS/prism/issues/1694)) [`439e3bd7`](https://github.com/PrismJS/prism/commit/439e3bd7)\n\t* PHP: Fixed closing tag issue ([#1652](https://github.com/PrismJS/prism/issues/1652)) [`289ddd9b`](https://github.com/PrismJS/prism/commit/289ddd9b)\n* __Python__\n\t* Operator keywords are now keywords ([#1617](https://github.com/PrismJS/prism/issues/1617)) [`1d1fb800`](https://github.com/PrismJS/prism/commit/1d1fb800)\n\t* Add decorator support to Python ([#1639](https://github.com/PrismJS/prism/issues/1639)) [`2577b6e6`](https://github.com/PrismJS/prism/commit/2577b6e6)\n\t* Improvements to Python F-strings and string prefixes ([#1642](https://github.com/PrismJS/prism/issues/1642)) [`a69c2b62`](https://github.com/PrismJS/prism/commit/a69c2b62)\n* __Reason__\n\t* Added additional operators to Reason ([#1648](https://github.com/PrismJS/prism/issues/1648)) [`8b1bb469`](https://github.com/PrismJS/prism/commit/8b1bb469)\n* __Ruby__\n\t* Consistent Ruby method highlighting ([#1523](https://github.com/PrismJS/prism/issues/1523)) [`72775919`](https://github.com/PrismJS/prism/commit/72775919)\n\t* Ruby/ERB: Fixed block comments ([#1768](https://github.com/PrismJS/prism/issues/1768)) [`c805f859`](https://github.com/PrismJS/prism/commit/c805f859)\n* __Rust__\n\t* Add missing keywords ([#1634](https://github.com/PrismJS/prism/issues/1634)) [`3590edde`](https://github.com/PrismJS/prism/commit/3590edde)\n* __SAS__\n\t* Added new SAS keywords ([#1784](https://github.com/PrismJS/prism/issues/1784)) [`3b396ef5`](https://github.com/PrismJS/prism/commit/3b396ef5)\n* __Scheme__\n\t* Fix function without arguments in scheme language ([#1463](https://github.com/PrismJS/prism/issues/1463)) [`12a827e7`](https://github.com/PrismJS/prism/commit/12a827e7)\n\t* Scheme improvements ([#1556](https://github.com/PrismJS/prism/issues/1556)) [`225dd3f7`](https://github.com/PrismJS/prism/commit/225dd3f7)\n\t* Fixed operator-like functions in Scheme ([#1467](https://github.com/PrismJS/prism/issues/1467)) [`f8c8add2`](https://github.com/PrismJS/prism/commit/f8c8add2)\n\t* Scheme: Minor improvements ([#1814](https://github.com/PrismJS/prism/issues/1814)) [`191830f2`](https://github.com/PrismJS/prism/commit/191830f2)\n* __SCSS__\n\t* Fixed that selector pattern can take exponential time ([#1499](https://github.com/PrismJS/prism/issues/1499)) [`0f75d9d4`](https://github.com/PrismJS/prism/commit/0f75d9d4)\n\t* Move SCSS `property` definition ([#1633](https://github.com/PrismJS/prism/issues/1633)) [`0536fb14`](https://github.com/PrismJS/prism/commit/0536fb14)\n\t* Add `keyword` alias for SCSS' `null` ([#1735](https://github.com/PrismJS/prism/issues/1735)) [`bd0378f0`](https://github.com/PrismJS/prism/commit/bd0378f0)\n* __Smalltalk__\n\t* Allowed empty strings and comments ([#1747](https://github.com/PrismJS/prism/issues/1747)) [`5fd7577a`](https://github.com/PrismJS/prism/commit/5fd7577a)\n* __Smarty__\n\t* Removed useless `insertBefore` call in Smarty ([#1677](https://github.com/PrismJS/prism/issues/1677)) [`bc49c361`](https://github.com/PrismJS/prism/commit/bc49c361)\n* __SQL__\n\t* Added support for quote escapes to SQL strings ([#1500](https://github.com/PrismJS/prism/issues/1500)) [`a59a7926`](https://github.com/PrismJS/prism/commit/a59a7926)\n\t* SQL Quoted variables are now greedy ([#1510](https://github.com/PrismJS/prism/issues/1510)) [`42d119a2`](https://github.com/PrismJS/prism/commit/42d119a2)\n* __TypeScript__\n\t* Enhance definitions in TypeScript component ([#1522](https://github.com/PrismJS/prism/issues/1522)) [`11695629`](https://github.com/PrismJS/prism/commit/11695629)\n* __YAML__\n\t* Allow YAML strings to have trailing comments ([#1602](https://github.com/PrismJS/prism/issues/1602)) [`1c5f28a9`](https://github.com/PrismJS/prism/commit/1c5f28a9)\n\n### Updated plugins\n\n* Better class name detection for plugins ([#1772](https://github.com/PrismJS/prism/issues/1772)) [`c9762c6f`](https://github.com/PrismJS/prism/commit/c9762c6f)\n* __Autolinker__\n\t* Fix Autolinker url-decoding all tokens ([#1723](https://github.com/PrismJS/prism/issues/1723)) [`8cf20d49`](https://github.com/PrismJS/prism/commit/8cf20d49)\n* __Autoloader__\n\t* Resolved variable name clash ([#1568](https://github.com/PrismJS/prism/issues/1568)) [`bfa5a8d9`](https://github.com/PrismJS/prism/commit/bfa5a8d9)\n\t* Autoloader: Fixed the directory of scripts ([#1828](https://github.com/PrismJS/prism/issues/1828)) [`fd4c764f`](https://github.com/PrismJS/prism/commit/fd4c764f)\n\t* Autoloader: Added support for aliases ([#1829](https://github.com/PrismJS/prism/issues/1829)) [`52889b5b`](https://github.com/PrismJS/prism/commit/52889b5b)\n* __Command Line__\n\t* Fixed class regex for Command Line plugin ([#1566](https://github.com/PrismJS/prism/issues/1566)) [`9f6e5026`](https://github.com/PrismJS/prism/commit/9f6e5026)\n* __File Highlight__\n\t* Prevent double-loading & add scope to File Highlight ([#1586](https://github.com/PrismJS/prism/issues/1586)) [`10239c14`](https://github.com/PrismJS/prism/commit/10239c14)\n* __JSONP Highlight__\n\t* Cleanup JSONP highlight code ([#1674](https://github.com/PrismJS/prism/issues/1674)) [`28489698`](https://github.com/PrismJS/prism/commit/28489698)\n\t* Fix typos & other issues in JSONP docs ([#1672](https://github.com/PrismJS/prism/issues/1672)) [`cd058a91`](https://github.com/PrismJS/prism/commit/cd058a91)\n\t* JSONP highlight: Fixed minified adapter names ([#1793](https://github.com/PrismJS/prism/issues/1793)) [`5dd8f916`](https://github.com/PrismJS/prism/commit/5dd8f916)\n* __Keep Markup__\n\t* Add unit tests to the Keep Markup plugin ([#1646](https://github.com/PrismJS/prism/issues/1646)) [`a944c418`](https://github.com/PrismJS/prism/commit/a944c418)\n* __Line Numbers__\n\t* Added inheritance for the `line-numbers` class ([#1799](https://github.com/PrismJS/prism/issues/1799)) [`14be7489`](https://github.com/PrismJS/prism/commit/14be7489)\n* __Previewers__\n\t* Fixed Previewers bug [#1496](https://github.com/PrismJS/prism/issues/1496) ([#1497](https://github.com/PrismJS/prism/issues/1497)) [`4b56f3c1`](https://github.com/PrismJS/prism/commit/4b56f3c1)\n* __Show Invisibles__\n\t* Updated styles of show invisibles ([#1607](https://github.com/PrismJS/prism/issues/1607)) [`2ba62268`](https://github.com/PrismJS/prism/commit/2ba62268)\n\t* Corrected load order of Show Invisibles ([#1612](https://github.com/PrismJS/prism/issues/1612)) [`6e0c6e86`](https://github.com/PrismJS/prism/commit/6e0c6e86)\n\t* Show invisibles inside tokens ([#1610](https://github.com/PrismJS/prism/issues/1610)) [`1090b253`](https://github.com/PrismJS/prism/commit/1090b253)\n* __Show Language__\n\t* Show Language plugin alias support and improvements ([#1683](https://github.com/PrismJS/prism/issues/1683)) [`4c66d72c`](https://github.com/PrismJS/prism/commit/4c66d72c)\n* __Toolbar__\n\t* Toolbar: Minor improvements ([#1818](https://github.com/PrismJS/prism/issues/1818)) [`3ad47047`](https://github.com/PrismJS/prism/commit/3ad47047)\n\n### Updated themes\n\n* Normalized the font-size of pre and code ([#1791](https://github.com/PrismJS/prism/issues/1791)) [`878ef295`](https://github.com/PrismJS/prism/commit/878ef295)\n* __Coy__\n\t* Correct typo ([#1508](https://github.com/PrismJS/prism/issues/1508)) [`c322fc80`](https://github.com/PrismJS/prism/commit/c322fc80)\n\n### Other changes\n\n* __Core__\n\t* `insertBefore` now correctly updates references ([#1531](https://github.com/PrismJS/prism/issues/1531)) [`9dfec340`](https://github.com/PrismJS/prism/commit/9dfec340)\n\t* Invoke `callback` after `after-highlight` hook ([#1588](https://github.com/PrismJS/prism/issues/1588)) [`bfbe4464`](https://github.com/PrismJS/prism/commit/bfbe4464)\n\t* Improve `Prism.util.type` performance ([#1545](https://github.com/PrismJS/prism/issues/1545)) [`2864fe24`](https://github.com/PrismJS/prism/commit/2864fe24)\n\t* Remove unused `insertBefore` overload ([#1631](https://github.com/PrismJS/prism/issues/1631)) [`39686e12`](https://github.com/PrismJS/prism/commit/39686e12)\n\t* Ignore duplicates in insertBefore ([#1628](https://github.com/PrismJS/prism/issues/1628)) [`d33d259c`](https://github.com/PrismJS/prism/commit/d33d259c)\n\t* Remove the Prism.tokenize language parameter ([#1654](https://github.com/PrismJS/prism/issues/1654)) [`fbf0b094`](https://github.com/PrismJS/prism/commit/fbf0b094)\n\t* Call `insert-before` hook properly ([#1709](https://github.com/PrismJS/prism/issues/1709)) [`393ab164`](https://github.com/PrismJS/prism/commit/393ab164)\n\t* Improved languages.DFS and util.clone ([#1506](https://github.com/PrismJS/prism/issues/1506)) [`152a68ef`](https://github.com/PrismJS/prism/commit/152a68ef)\n\t* Core: Avoid redeclaring variables in util.clone ([#1778](https://github.com/PrismJS/prism/issues/1778)) [`b06f532f`](https://github.com/PrismJS/prism/commit/b06f532f)\n\t* Made prism-core a little more editor friendly ([#1776](https://github.com/PrismJS/prism/issues/1776)) [`bac09f0a`](https://github.com/PrismJS/prism/commit/bac09f0a)\n\t* Applied Array.isArray ([#1804](https://github.com/PrismJS/prism/issues/1804)) [`11d0f75e`](https://github.com/PrismJS/prism/commit/11d0f75e)\n* __Infrastructure__\n\t* Linkify changelog more + add missing PR references [`2a100db7`](https://github.com/PrismJS/prism/commit/2a100db7)\n\t* Set default indentation size ([#1516](https://github.com/PrismJS/prism/issues/1516)) [`e63d1597`](https://github.com/PrismJS/prism/commit/e63d1597)\n\t* Add travis repo badge to readme ([#1561](https://github.com/PrismJS/prism/issues/1561)) [`716923f4`](https://github.com/PrismJS/prism/commit/716923f4)\n\t* Update README.md ([#1553](https://github.com/PrismJS/prism/issues/1553)) [`6d1a2c61`](https://github.com/PrismJS/prism/commit/6d1a2c61)\n\t* Mention Prism Themes in README ([#1625](https://github.com/PrismJS/prism/issues/1625)) [`5db04656`](https://github.com/PrismJS/prism/commit/5db04656)\n\t* Fixed CHANGELOG.md ([#1707](https://github.com/PrismJS/prism/issues/1707)) [`b1f8a65d`](https://github.com/PrismJS/prism/commit/b1f8a65d) ([#1704](https://github.com/PrismJS/prism/issues/1704)) [`66d2104a`](https://github.com/PrismJS/prism/commit/66d2104a)\n\t* Change tested NodeJS versions ([#1651](https://github.com/PrismJS/prism/issues/1651)) [`6ec71e0b`](https://github.com/PrismJS/prism/commit/6ec71e0b)\n\t* Inline regex source with gulp ([#1537](https://github.com/PrismJS/prism/issues/1537)) [`e894fc89`](https://github.com/PrismJS/prism/commit/e894fc89) ([#1716](https://github.com/PrismJS/prism/issues/1716)) [`217a6ea4`](https://github.com/PrismJS/prism/commit/217a6ea4)\n\t* Improve gulp error messages with pump ([#1741](https://github.com/PrismJS/prism/issues/1741)) [`671f4ca0`](https://github.com/PrismJS/prism/commit/671f4ca0)\n\t* Update gulp to version 4.0.0 ([#1779](https://github.com/PrismJS/prism/issues/1779)) [`06627f6a`](https://github.com/PrismJS/prism/commit/06627f6a)\n\t* gulp: Refactoring ([#1780](https://github.com/PrismJS/prism/issues/1780)) [`6c9fe257`](https://github.com/PrismJS/prism/commit/6c9fe257)\n\t* npm: Updated all dependencies ([#1742](https://github.com/PrismJS/prism/issues/1742)) [`9d908d5a`](https://github.com/PrismJS/prism/commit/9d908d5a)\n\t* Tests: Pretty-printed token stream ([#1801](https://github.com/PrismJS/prism/issues/1801)) [`9ea6d600`](https://github.com/PrismJS/prism/commit/9ea6d600)\n\t* Refactored tests ([#1795](https://github.com/PrismJS/prism/issues/1795)) [`832a9643`](https://github.com/PrismJS/prism/commit/832a9643)\n\t* Added issue templates ([#1805](https://github.com/PrismJS/prism/issues/1805)) [`dedb475f`](https://github.com/PrismJS/prism/commit/dedb475f)\n\t* npm: Fixed `test` script ([#1809](https://github.com/PrismJS/prism/issues/1809)) [`bc649dfa`](https://github.com/PrismJS/prism/commit/bc649dfa)\n\t* Add command to generate CHANGELOG [`212666d3`](https://github.com/PrismJS/prism/commit/212666d3)\n\t* Name in composer.json set to lowercase ([#1824](https://github.com/PrismJS/prism/issues/1824)) [`4f78f1d6`](https://github.com/PrismJS/prism/commit/4f78f1d6)\n\t* Added alias tests ([#1832](https://github.com/PrismJS/prism/issues/1832)) [`5c1a6fb2`](https://github.com/PrismJS/prism/commit/5c1a6fb2)\n\t* Travis: Fail when changed files are detected ([#1819](https://github.com/PrismJS/prism/issues/1819)) [`66b44e3b`](https://github.com/PrismJS/prism/commit/66b44e3b)\n\t* Tests: Additional checks for Prism functions ([#1803](https://github.com/PrismJS/prism/issues/1803)) [`c3e74ea3`](https://github.com/PrismJS/prism/commit/c3e74ea3)\n\t* Adjusted .npmignore ([#1834](https://github.com/PrismJS/prism/issues/1834)) [`29a30c62`](https://github.com/PrismJS/prism/commit/29a30c62)\n* __Website__\n\t* Add Python triple-quoted strings \"known failure\" ([#1449](https://github.com/PrismJS/prism/issues/1449)) [`334c7bca`](https://github.com/PrismJS/prism/commit/334c7bca)\n\t* Updated index.html to fix broken instructions ([#1462](https://github.com/PrismJS/prism/issues/1462)) [`7418dfdd`](https://github.com/PrismJS/prism/commit/7418dfdd)\n\t* Improve download page typography ([#1484](https://github.com/PrismJS/prism/issues/1484)) [`b1c2f4df`](https://github.com/PrismJS/prism/commit/b1c2f4df)\n\t* Fixed peer dependencies in download page ([#1491](https://github.com/PrismJS/prism/issues/1491)) [`9d15ff6e`](https://github.com/PrismJS/prism/commit/9d15ff6e)\n\t* Fixed empty link in extending ([#1507](https://github.com/PrismJS/prism/issues/1507)) [`74916d48`](https://github.com/PrismJS/prism/commit/74916d48)\n\t* Display language aliases ([#1626](https://github.com/PrismJS/prism/issues/1626)) [`654b527b`](https://github.com/PrismJS/prism/commit/654b527b)\n\t* Clean up Previewers' page ([#1630](https://github.com/PrismJS/prism/issues/1630)) [`b0d1823c`](https://github.com/PrismJS/prism/commit/b0d1823c)\n\t* Updated website table of contents styles ([#1681](https://github.com/PrismJS/prism/issues/1681)) [`efdd96c3`](https://github.com/PrismJS/prism/commit/efdd96c3)\n\t* Added new third-party tutorial for using Prism in Gutenberg ([#1701](https://github.com/PrismJS/prism/issues/1701)) [`ff9ccbe5`](https://github.com/PrismJS/prism/commit/ff9ccbe5)\n\t* Remove dead tutorial ([#1702](https://github.com/PrismJS/prism/issues/1702)) [`e2d3bc7e`](https://github.com/PrismJS/prism/commit/e2d3bc7e)\n\t* Fix downloads page fetching from GitHub([#1684](https://github.com/PrismJS/prism/issues/1684)) [`dbd3555e`](https://github.com/PrismJS/prism/commit/dbd3555e)\n\t* Remove parentheses from download page ([#1627](https://github.com/PrismJS/prism/issues/1627)) [`2ce0666d`](https://github.com/PrismJS/prism/commit/2ce0666d)\n\t* Line Numbers plugin instructions clarifications ([#1719](https://github.com/PrismJS/prism/issues/1719)) [`00f4f04f`](https://github.com/PrismJS/prism/commit/00f4f04f)\n\t* Fixed Toolbar plugin example ([#1726](https://github.com/PrismJS/prism/issues/1726)) [`5311ca32`](https://github.com/PrismJS/prism/commit/5311ca32)\n\t* Test page: Show tokens option ([#1757](https://github.com/PrismJS/prism/issues/1757)) [`729cb28b`](https://github.com/PrismJS/prism/commit/729cb28b)\n\t* Some encouragement for visitors of PrismJS.com to request new languages ([#1760](https://github.com/PrismJS/prism/issues/1760)) [`ea769e0b`](https://github.com/PrismJS/prism/commit/ea769e0b)\n\t* Docs: Added missing parameter ([#1774](https://github.com/PrismJS/prism/issues/1774)) [`18f2921d`](https://github.com/PrismJS/prism/commit/18f2921d)\n\t* More persistent test page ([#1529](https://github.com/PrismJS/prism/issues/1529)) [`3100fa31`](https://github.com/PrismJS/prism/commit/3100fa31)\n\t* Added scripts directory ([#1781](https://github.com/PrismJS/prism/issues/1781)) [`439ea1ee`](https://github.com/PrismJS/prism/commit/439ea1ee)\n\t* Fixed download page ([#1811](https://github.com/PrismJS/prism/issues/1811)) [`77c57446`](https://github.com/PrismJS/prism/commit/77c57446)\n\n## 1.15.0 (2018-06-16)\n\n### New components\n\n* __Template Tookit 2__ ([#1418](https://github.com/PrismJS/prism/issues/1418)) [[`e063992`](https://github.com/PrismJS/prism/commit/e063992)]\n* __XQuery__ ([#1411](https://github.com/PrismJS/prism/issues/1411)) [[`e326cb0`](https://github.com/PrismJS/prism/commit/e326cb0)]\n* __TAP__ ([#1430](https://github.com/PrismJS/prism/issues/1430)) [[`8c2b71f`](https://github.com/PrismJS/prism/commit/8c2b71f)]\n\n### Updated components\n\n* __HTTP__\n\t* Absolute path is a valid request uri ([#1388](https://github.com/PrismJS/prism/issues/1388)) [[`f6e81cb`](https://github.com/PrismJS/prism/commit/f6e81cb)]\n* __Kotlin__\n\t* Add keywords of Kotlin and modify it's number pattern. ([#1389](https://github.com/PrismJS/prism/issues/1389)) [[`1bf73b0`](https://github.com/PrismJS/prism/commit/1bf73b0)]\n\t* Add `typealias` keyword ([#1437](https://github.com/PrismJS/prism/issues/1437)) [[`a21fdee`](https://github.com/PrismJS/prism/commit/a21fdee)]\n* __JavaScript__\n\t* Improve Regexp pattern [[`5b043cf`](https://github.com/PrismJS/prism/commit/5b043cf)]\n\t* Add support for one level of nesting inside template strings. Fix [#1397](https://github.com/PrismJS/prism/issues/1397) [[`db2d0eb`](https://github.com/PrismJS/prism/commit/db2d0eb)]\n* __Elixir__\n\t* Elixir: Fix attributes consuming punctuation. Fix [#1392](https://github.com/PrismJS/prism/issues/1392) [[`dac0485`](https://github.com/PrismJS/prism/commit/dac0485)]\n* __Bash__\n\t* Change reserved keyword reference ([#1396](https://github.com/PrismJS/prism/issues/1396)) [[`b94f01f`](https://github.com/PrismJS/prism/commit/b94f01f)]\n* __PowerShell__\n\t* Allow for one level of nesting in expressions inside strings. Fix [#1407](https://github.com/PrismJS/prism/issues/1407) [[`9272d6f`](https://github.com/PrismJS/prism/commit/9272d6f)]\n* __JSX__\n\t* Allow for two levels of nesting inside JSX tags. Fix [#1408](https://github.com/PrismJS/prism/issues/1408) [[`f1cd7c5`](https://github.com/PrismJS/prism/commit/f1cd7c5)]\n\t* Add support for fragments short syntax. Fix [#1421](https://github.com/PrismJS/prism/issues/1421) [[`38ce121`](https://github.com/PrismJS/prism/commit/38ce121)]\n* __Pascal__\n\t* Add `objectpascal` as an alias to `pascal` ([#1426](https://github.com/PrismJS/prism/issues/1426)) [[`a0bfc84`](https://github.com/PrismJS/prism/commit/a0bfc84)]\n* __Swift__\n\t* Fix Swift 'protocol' keyword ([#1440](https://github.com/PrismJS/prism/issues/1440)) [[`081e318`](https://github.com/PrismJS/prism/commit/081e318)]\n\n### Updated plugins\n\n* __File Highlight__\n\t* Fix issue causing the Download button to show up on every code blocks. [[`cd22499`](https://github.com/PrismJS/prism/commit/cd22499)]\n\t* Simplify lang regex on File Highlight plugin ([#1399](https://github.com/PrismJS/prism/issues/1399)) [[`7bc9a4a`](https://github.com/PrismJS/prism/commit/7bc9a4a)]\n* __Show Language__\n\t* Don't process language if block language not set ([#1410](https://github.com/PrismJS/prism/issues/1410)) [[`c111869`](https://github.com/PrismJS/prism/commit/c111869)]\n* __Autoloader__\n\t* ASP.NET should require C# [[`fa328bb`](https://github.com/PrismJS/prism/commit/fa328bb)]\n* __Line Numbers__\n\t* Make line-numbers styles more specific ([#1434](https://github.com/PrismJS/prism/issues/1434), [#1435](https://github.com/PrismJS/prism/issues/1435)) [[`9ee4f54`](https://github.com/PrismJS/prism/commit/9ee4f54)]\n\n### Updated themes\n\n* Add .token.class-name to rest of themes ([#1360](https://github.com/PrismJS/prism/issues/1360)) [[`f356dfe`](https://github.com/PrismJS/prism/commit/f356dfe)]\n\n### Other changes\n\n* __Website__\n\t* Site now loads over HTTPS!\n\t* Use HTTPS / canonical URLs ([#1390](https://github.com/PrismJS/prism/issues/1390)) [[`95146c8`](https://github.com/PrismJS/prism/commit/95146c8)]\n\t* Added Angular tutorial link [[`c436a7c`](https://github.com/PrismJS/prism/commit/c436a7c)]\n\t* Use rel=\"icon\" instead of rel=\"shortcut icon\" ([#1398](https://github.com/PrismJS/prism/issues/1398)) [[`d95f8fb`](https://github.com/PrismJS/prism/commit/d95f8fb)]\n\t* Fix Download page not handling multiple dependencies when from Redownload URL [[`c2ff248`](https://github.com/PrismJS/prism/commit/c2ff248)]\n\t* Update documentation for node & webpack usage [[`1e99e96`](https://github.com/PrismJS/prism/commit/1e99e96)]\n* Handle optional dependencies in `loadLanguages()` ([#1417](https://github.com/PrismJS/prism/issues/1417)) [[`84935ac`](https://github.com/PrismJS/prism/commit/84935ac)]\n* Add Chinese translation [[`f2b1964`](https://github.com/PrismJS/prism/commit/f2b1964)]\n\n## 1.14.0 (2018-04-11)\n\n### New components\n* __GEDCOM__ ([#1385](https://github.com/PrismJS/prism/issues/1385)) [[`6e0b20a`](https://github.com/PrismJS/prism/commit/6e0b20a)]\n* __Lisp__ ([#1297](https://github.com/PrismJS/prism/issues/1297)) [[`46468f8`](https://github.com/PrismJS/prism/commit/46468f8)]\n* __Markup Templating__ ([#1367](https://github.com/PrismJS/prism/issues/1367)) [[`5f9c078`](https://github.com/PrismJS/prism/commit/5f9c078)]\n* __Soy__ ([#1387](https://github.com/PrismJS/prism/issues/1387)) [[`b4509bf`](https://github.com/PrismJS/prism/commit/b4509bf)]\n* __Velocity__ ([#1378](https://github.com/PrismJS/prism/issues/1378)) [[`5a524f7`](https://github.com/PrismJS/prism/commit/5a524f7)]\n* __Visual Basic__ ([#1382](https://github.com/PrismJS/prism/issues/1382)) [[`c673ec2`](https://github.com/PrismJS/prism/commit/c673ec2)]\n* __WebAssembly__ ([#1386](https://github.com/PrismJS/prism/issues/1386)) [[`c28d8c5`](https://github.com/PrismJS/prism/commit/c28d8c5)]\n\n### Updated components\n* __Bash__:\n\t* Add curl to the list of common functions. Close [#1160](https://github.com/PrismJS/prism/issues/1160) [[`1bfc084`](https://github.com/PrismJS/prism/commit/1bfc084)]\n* __C-like__:\n\t* Make single-line comments greedy. Fix [#1337](https://github.com/PrismJS/prism/issues/1337). Make sure [#1340](https://github.com/PrismJS/prism/issues/1340) stays fixed. [[`571f2c5`](https://github.com/PrismJS/prism/commit/571f2c5)]\n* __C#__:\n\t* More generic class-name highlighting. Fix [#1365](https://github.com/PrismJS/prism/issues/1365) [[`a6837d2`](https://github.com/PrismJS/prism/commit/a6837d2)]\n\t* More specific class-name highlighting. Fix [#1371](https://github.com/PrismJS/prism/issues/1371) [[`0a95f69`](https://github.com/PrismJS/prism/commit/0a95f69)]\n* __Eiffel__:\n\t* Fix verbatim strings. Fix [#1379](https://github.com/PrismJS/prism/issues/1379) [[`04df41b`](https://github.com/PrismJS/prism/commit/04df41b)]\n* __Elixir__\n\t* Make regexps greedy, remove comment hacks. Update known failures and tests. [[`e93d61f`](https://github.com/PrismJS/prism/commit/e93d61f)]\n* __ERB__:\n\t* Make highlighting work properly in NodeJS ([#1367](https://github.com/PrismJS/prism/issues/1367)) [[`5f9c078`](https://github.com/PrismJS/prism/commit/5f9c078)]\n* __Fortran__:\n\t* Make single-line comments greedy. Update known failures and tests. [[`c083b78`](https://github.com/PrismJS/prism/commit/c083b78)]\n* __Handlebars__:\n\t* Make highlighting work properly in NodeJS ([#1367](https://github.com/PrismJS/prism/issues/1367)) [[`5f9c078`](https://github.com/PrismJS/prism/commit/5f9c078)]\n* __Java__:\n\t* Add support for generics. Fix [#1351](https://github.com/PrismJS/prism/issues/1351) [[`a5cf302`](https://github.com/PrismJS/prism/commit/a5cf302)]\n* __JavaScript__:\n\t* Add support for constants. Fix [#1348](https://github.com/PrismJS/prism/issues/1348) [[`9084481`](https://github.com/PrismJS/prism/commit/9084481)]\n\t* Improve Regex matching [[`172d351`](https://github.com/PrismJS/prism/commit/172d351)]\n* __JSX__:\n\t* Fix highlighting of empty objects. Fix [#1364](https://github.com/PrismJS/prism/issues/1364) [[`b26bbb8`](https://github.com/PrismJS/prism/commit/b26bbb8)]\n* __Monkey__:\n\t* Make comments greedy. Update known failures and tests. [[`d7b2b43`](https://github.com/PrismJS/prism/commit/d7b2b43)]\n* __PHP__:\n\t* Make highlighting work properly in NodeJS ([#1367](https://github.com/PrismJS/prism/issues/1367)) [[`5f9c078`](https://github.com/PrismJS/prism/commit/5f9c078)]\n* __Puppet__:\n\t* Make heredoc, comments, regexps and strings greedy. Update known failures and tests. [[`0c139d1`](https://github.com/PrismJS/prism/commit/0c139d1)]\n* __Q__:\n\t* Make comments greedy. Update known failures and tests. [[`a0f5081`](https://github.com/PrismJS/prism/commit/a0f5081)]\n* __Ruby__:\n\t* Make multi-line comments greedy, remove single-line comment hack. Update known failures and tests. [[`b0e34fb`](https://github.com/PrismJS/prism/commit/b0e34fb)]\n* __SQL__:\n\t* Add missing keywords. Fix [#1374](https://github.com/PrismJS/prism/issues/1374) [[`238b195`](https://github.com/PrismJS/prism/commit/238b195)]\n\n### Updated plugins\n* __Command Line__:\n\t* Command Line: Allow specifying output prefix using data-filter-output attribute. ([#856](https://github.com/PrismJS/prism/issues/856)) [[`094d546`](https://github.com/PrismJS/prism/commit/094d546)]\n* __File Highlight__:\n\t* Add option to provide a download button, when used with the Toolbar plugin. Fix [#1030](https://github.com/PrismJS/prism/issues/1030) [[`9f22952`](https://github.com/PrismJS/prism/commit/9f22952)]\n\n### Updated themes\n* __Default__:\n\t* Reach AA contrast ratio level ([#1296](https://github.com/PrismJS/prism/issues/1296)) [[`8aea939`](https://github.com/PrismJS/prism/commit/8aea939)]\n\n### Other changes\n* Website: Remove broken third-party tutorials from homepage [[`0efd6e1`](https://github.com/PrismJS/prism/commit/0efd6e1)]\n* Docs: Mention `loadLanguages()` function on homepage in the nodeJS section. Close [#972](https://github.com/PrismJS/prism/issues/972), close [#593](https://github.com/PrismJS/prism/issues/593) [[`4a14d20`](https://github.com/PrismJS/prism/commit/4a14d20)]\n* Core: Greedy patterns should always be matched against the full string. Fix [#1355](https://github.com/PrismJS/prism/issues/1355) [[`294efaa`](https://github.com/PrismJS/prism/commit/294efaa)]\n* Crystal: Update known failures. [[`e1d2d42`](https://github.com/PrismJS/prism/commit/e1d2d42)]\n* D: Update known failures and tests. [[`13d9991`](https://github.com/PrismJS/prism/commit/13d9991)]\n* Markdown: Update known failures. [[`5b6c76d`](https://github.com/PrismJS/prism/commit/5b6c76d)]\n* Matlab: Update known failures. [[`259b6fc`](https://github.com/PrismJS/prism/commit/259b6fc)]\n* Website: Remove non-existent anchor to failures. Reword on homepage to make is less misleading. [[`8c0911a`](https://github.com/PrismJS/prism/commit/8c0911a)]\n* Website: Add link to Keep Markup plugin in FAQ [[`e8cb6d4`](https://github.com/PrismJS/prism/commit/e8cb6d4)]\n* Test suite: Memory leak in vm.runInNewContext() seems fixed. Revert [[`9a4b6fa`](https://github.com/PrismJS/prism/commit/9a4b6fa)] to drastically improve tests execution time. [[`9bceece`](https://github.com/PrismJS/prism/commit/9bceece), [`7c7602b`](https://github.com/PrismJS/prism/commit/7c7602b)]\n* Gulp: Don't minify `components/index.js` [[`689227b`](https://github.com/PrismJS/prism/commit/689227b)]\n* Website: Fix theme selection on Download page, when theme is in query string or hash. [[`b4d3063`](https://github.com/PrismJS/prism/commit/b4d3063)]\n* Update JSPM config to also include unminified components. Close [#995](https://github.com/PrismJS/prism/issues/995) [[`218f160`](https://github.com/PrismJS/prism/commit/218f160)]\n* Core: Fix support for language alias containing dash `-` [[`659ea31`](https://github.com/PrismJS/prism/commit/659ea31)]\n\n## 1.13.0 (2018-03-21)\n\n### New components\n* __ERB__ [[`e6213ac`](https://github.com/PrismJS/prism/commit/e6213ac)]\n* __PL/SQL__ ([#1338](https://github.com/PrismJS/prism/issues/1338)) [[`3599e6a`](https://github.com/PrismJS/prism/commit/3599e6a)]\n\n### Updated components\n* __JSX__:\n\t* Add support for plain text inside tags ([#1357](https://github.com/PrismJS/prism/issues/1357)) [[`2b8321d`](https://github.com/PrismJS/prism/commit/2b8321d)]\n* __Markup__:\n\t* Make tags greedy. Fix [#1356](https://github.com/PrismJS/prism/issues/1356) [[`af834be`](https://github.com/PrismJS/prism/commit/af834be)]\n* __Powershell__:\n\t* Add lookbehind to fix function interpolation inside strings. Fix [#1361](https://github.com/PrismJS/prism/issues/1361) [[`d2c026e`](https://github.com/PrismJS/prism/commit/d2c026e)]\n* __Rust__:\n\t* Improve char pattern so that lifetime annotations are matched better. Fix [#1353](https://github.com/PrismJS/prism/issues/1353) [[`efdccbf`](https://github.com/PrismJS/prism/commit/efdccbf)]\n\n### Updated themes\n* __Default__:\n\t* Add color for class names [[`8572474`](https://github.com/PrismJS/prism/commit/8572474)]\n* __Coy__:\n\t* Inherit pre's height on code, so it does not break on Download page. [[`c6c7fd1`](https://github.com/PrismJS/prism/commit/c6c7fd1)]\n\n### Other changes\n* Website: Auto-generate example headers [[`c3ed5b5`](https://github.com/PrismJS/prism/commit/c3ed5b5)]\n* Core: Allow cloning of circular structures. ([#1345](https://github.com/PrismJS/prism/issues/1345)) [[`f90d555`](https://github.com/PrismJS/prism/commit/f90d555)]\n* Core: Generate components.js from components.json and make it exportable to nodeJS. ([#1354](https://github.com/PrismJS/prism/issues/1354)) [[`ba60df0`](https://github.com/PrismJS/prism/commit/ba60df0)]\n* Website: Improve appearance of theme selector [[`0460cad`](https://github.com/PrismJS/prism/commit/0460cad)]\n* Website: Check stored theme by default + link both theme selectors together. Close [#1038](https://github.com/PrismJS/prism/issues/1038) [[`212dd4e`](https://github.com/PrismJS/prism/commit/212dd4e)]\n* Tests: Use the new components.js file directly [[`0e1a8b7`](https://github.com/PrismJS/prism/commit/0e1a8b7)]\n* Update .npmignore Close [#1274](https://github.com/PrismJS/prism/issues/1274) [[`a52319a`](https://github.com/PrismJS/prism/commit/a52319a)]\n* Add a loadLanguages() function for easy component loading on NodeJS ([#1359](https://github.com/PrismJS/prism/issues/1359)) [[`a5331a6`](https://github.com/PrismJS/prism/commit/a5331a6)]\n\n## 1.12.2 (2018-03-08)\n\n### Other changes\n* Test against NodeJS 4, 6, 8 and 9 ([#1329](https://github.com/PrismJS/prism/issues/1329)) [[`97b7d0a`](https://github.com/PrismJS/prism/commit/97b7d0a)]\n* Stop testing against NodeJS 0.10 and 0.12 [[`df01b1b`](https://github.com/PrismJS/prism/commit/df01b1b)]\n\n## 1.12.1 (2018-03-08)\n\n### Updated components\n* __C-like__:\n\t* Revert [[`b98e5b9`](https://github.com/PrismJS/prism/commit/b98e5b9)] to fix [#1340](https://github.com/PrismJS/prism/issues/1340). Reopened [#1337](https://github.com/PrismJS/prism/issues/1337). [[`cebacdf`](https://github.com/PrismJS/prism/commit/cebacdf)]\n* __JSX__:\n\t* Allow for one level of nested curly braces inside tag attribute value. Fix [#1335](https://github.com/PrismJS/prism/issues/1335) [[`05bf67d`](https://github.com/PrismJS/prism/commit/05bf67d)]\n* __Ruby__:\n\t*  Ensure module syntax is not confused with symbols. Fix [#1336](https://github.com/PrismJS/prism/issues/1336) [[`31a2a69`](https://github.com/PrismJS/prism/commit/31a2a69)]\n\n## 1.12.0 (2018-03-07)\n\n### New components\n* __ARFF__ ([#1327](https://github.com/PrismJS/prism/issues/1327)) [[`0bc98ac`](https://github.com/PrismJS/prism/commit/0bc98ac)]\n* __Clojure__ ([#1311](https://github.com/PrismJS/prism/issues/1311)) [[`8b4d3bd`](https://github.com/PrismJS/prism/commit/8b4d3bd)]\n* __Liquid__ ([#1326](https://github.com/PrismJS/prism/issues/1326)) [[`f0b2c9e`](https://github.com/PrismJS/prism/commit/f0b2c9e)]\n\n### Updated components\n* __Bash__:\n\t* Add shell as an alias ([#1321](https://github.com/PrismJS/prism/issues/1321)) [[`67e16a2`](https://github.com/PrismJS/prism/commit/67e16a2)]\n\t* Add support for quoted command substitution. Fix [#1287](https://github.com/PrismJS/prism/issues/1287) [[`63fc215`](https://github.com/PrismJS/prism/commit/63fc215)]\n* __C#__:\n\t* Add \"dotnet\" alias. [[`405867c`](https://github.com/PrismJS/prism/commit/405867c)]\n* __C-like__:\n\t* Change order of comment patterns and make multi-line one greedy. Fix [#1337](https://github.com/PrismJS/prism/issues/1337) [[`b98e5b9`](https://github.com/PrismJS/prism/commit/b98e5b9)]\n* __NSIS__:\n\t* Add support for NSIS 3.03 ([#1288](https://github.com/PrismJS/prism/issues/1288)) [[`bd1e98b`](https://github.com/PrismJS/prism/commit/bd1e98b)]\n\t* Add missing NSIS commands ([#1289](https://github.com/PrismJS/prism/issues/1289)) [[`ad2948f`](https://github.com/PrismJS/prism/commit/ad2948f)]\n* __PHP__:\n\t* Add support for string interpolation inside double-quoted strings. Fix [#1146](https://github.com/PrismJS/prism/issues/1146) [[`9f1f8d6`](https://github.com/PrismJS/prism/commit/9f1f8d6)]\n\t* Add support for Heredoc and Nowdoc strings [[`5d7223c`](https://github.com/PrismJS/prism/commit/5d7223c)]\n\t* Fix shell-comment failure now that strings are greedy [[`ad25d22`](https://github.com/PrismJS/prism/commit/ad25d22)]\n* __PowerShell__:\n\t* Add support for two levels of nested brackets inside namespace pattern. Fixes [#1317](https://github.com/PrismJS/prism/issues/1317) [[`3bc3e9c`](https://github.com/PrismJS/prism/commit/3bc3e9c)]\n* __Ruby__:\n\t* Add keywords \"protected\", \"private\" and \"public\" [[`4593837`](https://github.com/PrismJS/prism/commit/4593837)]\n* __Rust__:\n\t* Add support for lifetime-annotation and => operator. Fix [#1339](https://github.com/PrismJS/prism/issues/1339) [[`926f6f8`](https://github.com/PrismJS/prism/commit/926f6f8)]\n* __Scheme__:\n\t* Don't highlight first number of a list as a function. Fix [#1331](https://github.com/PrismJS/prism/issues/1331) [[`51bff80`](https://github.com/PrismJS/prism/commit/51bff80)]\n* __SQL__:\n\t* Add missing keywords and functions, fix numbers [[`de29d4a`](https://github.com/PrismJS/prism/commit/de29d4a)]\n\n### Updated plugins\n* __Autolinker__:\n\t* Allow more chars in query string and hash to match more URLs. Fix [#1142](https://github.com/PrismJS/prism/issues/1142) [[`109bd6f`](https://github.com/PrismJS/prism/commit/109bd6f)]\n* __Copy to Clipboard__:\n\t* Bump ClipboardJS to 2.0.0 and remove hack ([#1314](https://github.com/PrismJS/prism/issues/1314)) [[`e9f410e`](https://github.com/PrismJS/prism/commit/e9f410e)]\n* __Toolbar__:\n\t* Prevent scrolling toolbar with content ([#1305](https://github.com/PrismJS/prism/issues/1305), [#1314](https://github.com/PrismJS/prism/issues/1314)) [[`84eeb89`](https://github.com/PrismJS/prism/commit/84eeb89)]\n* __Unescaped Markup__:\n\t* Use msMatchesSelector for IE11 and below. Fix [#1302](https://github.com/PrismJS/prism/issues/1302) [[`c246c1a`](https://github.com/PrismJS/prism/commit/c246c1a)]\n* __WebPlatform Docs__:\n\t* WebPlatform Docs plugin: Fix links. Fixes [#1290](https://github.com/PrismJS/prism/issues/1290) [[`7a9dbe0`](https://github.com/PrismJS/prism/commit/7a9dbe0)]\n\n### Other changes\n* Fix Autoloader's demo page [[`3dddac9`](https://github.com/PrismJS/prism/commit/3dddac9)]\n* Download page: Use hash instead of query-string for redownload URL. Fix [#1263](https://github.com/PrismJS/prism/issues/1263) [[`b03c02a`](https://github.com/PrismJS/prism/commit/b03c02a)]\n* Core: Don't thow an error if lookbehing is used without anything matching. [[`e0cd47f`](https://github.com/PrismJS/prism/commit/e0cd47f)]\n* Docs: Fix link to the `<code>` element specification in HTML5 [[`a84263f`](https://github.com/PrismJS/prism/commit/a84263f)]\n* Docs: Mention support for `lang-xxxx` class. Close [#1312](https://github.com/PrismJS/prism/issues/1312) [[`a9e76db`](https://github.com/PrismJS/prism/commit/a9e76db)]\n* Docs: Add note on `async` parameter to clarify the requirement of using a single bundled file. Closes [#1249](https://github.com/PrismJS/prism/issues/1249) [[`eba0235`](https://github.com/PrismJS/prism/commit/eba0235)]\n\n## 1.11.0 (2018-02-05)\n\n### New components\n* __Content-Security-Policy (CSP)__ ([#1275](https://github.com/PrismJS/prism/issues/1275)) [[`b08cae5`](https://github.com/PrismJS/prism/commit/b08cae5)]\n* __HTTP Public-Key-Pins (HPKP)__ ([#1275](https://github.com/PrismJS/prism/issues/1275)) [[`b08cae5`](https://github.com/PrismJS/prism/commit/b08cae5)]\n* __HTTP String-Transport-Security (HSTS)__ ([#1275](https://github.com/PrismJS/prism/issues/1275)) [[`b08cae5`](https://github.com/PrismJS/prism/commit/b08cae5)]\n* __React TSX__ ([#1280](https://github.com/PrismJS/prism/issues/1280)) [[`fbe82b8`](https://github.com/PrismJS/prism/commit/fbe82b8)]\n\n### Updated components\n* __C++__:\n\t* Add C++ platform-independent types ([#1271](https://github.com/PrismJS/prism/issues/1271)) [[`3da238f`](https://github.com/PrismJS/prism/commit/3da238f)]\n* __TypeScript__:\n\t* Improve typescript with builtins ([#1277](https://github.com/PrismJS/prism/issues/1277)) [[`5de1b1f`](https://github.com/PrismJS/prism/commit/5de1b1f)]\n\n### Other changes\n* Fix passing of non-enumerable Error properties from the child test runner ([#1276](https://github.com/PrismJS/prism/issues/1276)) [[`38df653`](https://github.com/PrismJS/prism/commit/38df653)]\n\n## 1.10.0 (2018-01-17)\n\n### New components\n* __6502 Assembly__ ([#1245](https://github.com/PrismJS/prism/issues/1245)) [[`2ece18b`](https://github.com/PrismJS/prism/commit/2ece18b)]\n* __Elm__ ([#1174](https://github.com/PrismJS/prism/issues/1174)) [[`d6da70e`](https://github.com/PrismJS/prism/commit/d6da70e)]\n* __IchigoJam BASIC__ ([#1246](https://github.com/PrismJS/prism/issues/1246)) [[`cf840be`](https://github.com/PrismJS/prism/commit/cf840be)]\n* __Io__ ([#1251](https://github.com/PrismJS/prism/issues/1251)) [[`84ed3ed`](https://github.com/PrismJS/prism/commit/84ed3ed)]\n\n### Updated components\n* __BASIC__:\n\t* Make strings greedy [[`60114d0`](https://github.com/PrismJS/prism/commit/60114d0)]\n* __C++__:\n\t* Add C++11 raw string feature ([#1254](https://github.com/PrismJS/prism/issues/1254)) [[`71595be`](https://github.com/PrismJS/prism/commit/71595be)]\n\n### Updated plugins\n* __Autoloader__:\n\t* Add support for `data-autoloader-path` ([#1242](https://github.com/PrismJS/prism/issues/1242)) [[`39360d6`](https://github.com/PrismJS/prism/commit/39360d6)]\n* __Previewers__:\n\t* New plugin combining previous plugins Previewer: Base, Previewer: Angle, Previewer: Color, Previewer: Easing, Previewer: Gradient and Previewer: Time. ([#1244](https://github.com/PrismJS/prism/issues/1244)) [[`28e4b4c`](https://github.com/PrismJS/prism/commit/28e4b4c)]\n* __Unescaped Markup__:\n\t* Make it work with any language ([#1265](https://github.com/PrismJS/prism/issues/1265)) [[`7bcdae7`](https://github.com/PrismJS/prism/commit/7bcdae7)]\n\n### Other changes\n* Add attribute `style` in `package.json` ([#1256](https://github.com/PrismJS/prism/issues/1256)) [[`a9b6785`](https://github.com/PrismJS/prism/commit/a9b6785)]\n\n## 1.9.0 (2017-12-06)\n\n### New components\n* __Flow__ [[`d27b70d`](https://github.com/PrismJS/prism/commit/d27b70d)]\n\n### Updated components\n* __CSS__:\n\t* Unicode characters in CSS properties ([#1227](https://github.com/PrismJS/prism/issues/1227)) [[`f234ea4`](https://github.com/PrismJS/prism/commit/f234ea4)]\n* __JSX__:\n\t* JSX: Improve highlighting support. Fix [#1235](https://github.com/PrismJS/prism/issues/1235) and [#1236](https://github.com/PrismJS/prism/issues/1236) [[`f41c5cd`](https://github.com/PrismJS/prism/commit/f41c5cd)]\n* __Markup__:\n\t* Make CSS and JS inclusions in Markup greedy. Fix [#1240](https://github.com/PrismJS/prism/issues/1240) [[`7dc1e45`](https://github.com/PrismJS/prism/commit/7dc1e45)]\n* __PHP__:\n\t* Add support for multi-line strings. Fix [#1233](https://github.com/PrismJS/prism/issues/1233) [[`9a542a0`](https://github.com/PrismJS/prism/commit/9a542a0)]\n\n### Updated plugins\n* __Copy to clipboard__:\n\t* Fix test for native Clipboard. Fix [#1241](https://github.com/PrismJS/prism/issues/1241) [[`e7b5e82`](https://github.com/PrismJS/prism/commit/e7b5e82)]\n\t* Copy to clipboard: Update to v1.7.1. Fix [#1220](https://github.com/PrismJS/prism/issues/1220) [[`a1b85e3`](https://github.com/PrismJS/prism/commit/a1b85e3), [`af50e44`](https://github.com/PrismJS/prism/commit/af50e44)]\n* __Line highlight__:\n\t* Fixes to compatibility of line number and line higlight plugins ([#1194](https://github.com/PrismJS/prism/issues/1194)) [[`e63058f`](https://github.com/PrismJS/prism/commit/e63058f), [`3842a91`](https://github.com/PrismJS/prism/commit/3842a91)]\n* __Unescaped Markup__:\n\t* Fix ambiguity in documentation by improving examples. Fix [#1197](https://github.com/PrismJS/prism/issues/1197) [[`924784a`](https://github.com/PrismJS/prism/commit/924784a)]\n\n### Other changes\n* Allow any element being root instead of document. ([#1230](https://github.com/PrismJS/prism/issues/1230)) [[`69f2e2c`](https://github.com/PrismJS/prism/commit/69f2e2c), [`6e50d44`](https://github.com/PrismJS/prism/commit/6e50d44)]\n* Coy Theme: The 'height' element makes code blocks the height of the browser canvas. ([#1224](https://github.com/PrismJS/prism/issues/1224)) [[`ac219d7`](https://github.com/PrismJS/prism/commit/ac219d7)]\n* Download page: Fix implicitly declared variable [[`f986551`](https://github.com/PrismJS/prism/commit/f986551)]\n* Download page: Add version number at the beginning of the generated files. Fix [#788](https://github.com/PrismJS/prism/issues/788) [[`928790d`](https://github.com/PrismJS/prism/commit/928790d)]\n\n## 1.8.4 (2017-11-05)\n\n### Updated components\n\n* __ABAP__:\n\t* Regexp optimisation [[`e7b411e`](https://github.com/PrismJS/prism/commit/e7b411e)]\n* __ActionScript__:\n\t* Fix XML regex + optimise [[`75d00d7`](https://github.com/PrismJS/prism/commit/75d00d7)]\n* __Ada__:\n\t* Regexp simplification [[`e881fe3`](https://github.com/PrismJS/prism/commit/e881fe3)]\n* __Apacheconf__:\n\t* Regexp optimisation [[`a065e61`](https://github.com/PrismJS/prism/commit/a065e61)]\n* __APL__:\n\t* Regexp simplification [[`33297c4`](https://github.com/PrismJS/prism/commit/33297c4)]\n* __AppleScript__:\n\t* Regexp optimisation [[`d879f36`](https://github.com/PrismJS/prism/commit/d879f36)]\n* __Arduino__:\n\t* Don't use captures if not needed [[`16b338f`](https://github.com/PrismJS/prism/commit/16b338f)]\n* __ASP.NET__:\n\t* Regexp optimisation [[`438926c`](https://github.com/PrismJS/prism/commit/438926c)]\n* __AutoHotkey__:\n\t* Regexp simplification + don't use captures if not needed [[`5edfd2f`](https://github.com/PrismJS/prism/commit/5edfd2f)]\n* __Bash__:\n\t* Regexp optimisation and simplification [[`75b9b29`](https://github.com/PrismJS/prism/commit/75b9b29)]\n* __Bro__:\n\t* Regexp simplification + don't use captures if not needed [[`d4b9003`](https://github.com/PrismJS/prism/commit/d4b9003)]\n* __C__:\n\t* Regexp optimisation + don't use captures if not needed [[`f61d487`](https://github.com/PrismJS/prism/commit/f61d487)]\n* __C++__:\n\t* Fix operator regexp + regexp simplification + don't use captures if not needed [[`ffeb26e`](https://github.com/PrismJS/prism/commit/ffeb26e)]\n* __C#__:\n\t* Remove duplicates in keywords + regexp optimisation + don't use captures if not needed [[`d28d178`](https://github.com/PrismJS/prism/commit/d28d178)]\n* __C-like__:\n\t* Regexp simplification + don't use captures if not needed [[`918e0ff`](https://github.com/PrismJS/prism/commit/918e0ff)]\n* __CoffeeScript__:\n\t* Regexp optimisation + don't use captures if not needed [[`5895978`](https://github.com/PrismJS/prism/commit/5895978)]\n* __Crystal__:\n\t* Remove trailing comma [[`16979a3`](https://github.com/PrismJS/prism/commit/16979a3)]\n* __CSS__:\n\t* Regexp simplification + don't use captures if not needed + handle multi-line style attributes [[`43d9f36`](https://github.com/PrismJS/prism/commit/43d9f36)]\n* __CSS Extras__:\n\t* Regexp simplification [[`134ed70`](https://github.com/PrismJS/prism/commit/134ed70)]\n* __D__:\n\t* Regexp optimisation [[`fbe39c9`](https://github.com/PrismJS/prism/commit/fbe39c9)]\n* __Dart__:\n\t* Regexp optimisation [[`f24e919`](https://github.com/PrismJS/prism/commit/f24e919)]\n* __Django__:\n\t* Regexp optimisation [[`a95c51d`](https://github.com/PrismJS/prism/commit/a95c51d)]\n* __Docker__:\n\t* Regexp optimisation [[`27f99ff`](https://github.com/PrismJS/prism/commit/27f99ff)]\n* __Eiffel__:\n\t* Regexp optimisation [[`b7cdea2`](https://github.com/PrismJS/prism/commit/b7cdea2)]\n* __Elixir__:\n\t* Regexp optimisation + uniform behavior between ~r and ~s [[`5d12e80`](https://github.com/PrismJS/prism/commit/5d12e80)]\n* __Erlang__:\n\t* Regexp optimisation [[`7547f83`](https://github.com/PrismJS/prism/commit/7547f83)]\n* __F#__:\n\t* Regexp optimisation + don't use captures if not needed [[`7753fc4`](https://github.com/PrismJS/prism/commit/7753fc4)]\n* __Gherkin__:\n\t* Regexp optimisation + don't use captures if not needed + added explanation comment on table-body regexp [[`f26197a`](https://github.com/PrismJS/prism/commit/f26197a)]\n* __Git__:\n\t* Regexp optimisation [[`b9483b9`](https://github.com/PrismJS/prism/commit/b9483b9)]\n* __GLSL__:\n\t* Regexp optimisation [[`e66d21b`](https://github.com/PrismJS/prism/commit/e66d21b)]\n* __Go__:\n\t* Regexp optimisation + don't use captures if not needed [[`88caabb`](https://github.com/PrismJS/prism/commit/88caabb)]\n* __GraphQL__:\n\t* Regexp optimisation and simplification [[`2474f06`](https://github.com/PrismJS/prism/commit/2474f06)]\n* __Groovy__:\n\t* Regexp optimisation + don't use captures if not needed [[`e74e00c`](https://github.com/PrismJS/prism/commit/e74e00c)]\n* __Haml__:\n\t* Regexp optimisation + don't use captures if not needed + fix typo in comment [[`23e3b43`](https://github.com/PrismJS/prism/commit/23e3b43)]\n* __Handlebars__:\n\t* Regexp optimisation + don't use captures if not needed [[`09dbfce`](https://github.com/PrismJS/prism/commit/09dbfce)]\n* __Haskell__:\n\t* Regexp simplification + don't use captures if not needed [[`f11390a`](https://github.com/PrismJS/prism/commit/f11390a)]\n* __HTTP__:\n\t* Regexp simplification + don't use captures if not needed [[`37ef24e`](https://github.com/PrismJS/prism/commit/37ef24e)]\n* __Icon__:\n\t* Regexp optimisation [[`9cf64a0`](https://github.com/PrismJS/prism/commit/9cf64a0)]\n* __J__:\n\t* Regexp simplification [[`de15150`](https://github.com/PrismJS/prism/commit/de15150)]\n* __Java__:\n\t* Don't use captures if not needed [[`96b35c8`](https://github.com/PrismJS/prism/commit/96b35c8)]\n* __JavaScript__:\n\t* Regexp optimisation + don't use captures if not needed [[`93d4002`](https://github.com/PrismJS/prism/commit/93d4002)]\n* __Jolie__:\n\t* Regexp optimisation + don't use captures if not needed + remove duplicates in keywords [[`a491f9e`](https://github.com/PrismJS/prism/commit/a491f9e)]\n* __JSON__:\n\t* Make strings greedy, remove negative look-ahead for \":\". Fix [#1204](https://github.com/PrismJS/prism/issues/1204) [[`98acd2d`](https://github.com/PrismJS/prism/commit/98acd2d)]\n\t* Regexp optimisation + don't use captures if not needed [[`8fc1b03`](https://github.com/PrismJS/prism/commit/8fc1b03)]\n* __JSX__:\n\t* Regexp optimisation + handle spread operator as a whole [[`28de4e2`](https://github.com/PrismJS/prism/commit/28de4e2)]\n* __Julia__:\n\t* Regexp optimisation and simplification [[`12684c0`](https://github.com/PrismJS/prism/commit/12684c0)]\n* __Keyman__:\n\t* Regexp optimisation + don't use captures if not needed [[`9726087`](https://github.com/PrismJS/prism/commit/9726087)]\n* __Kotlin__:\n\t* Regexp simplification [[`12ff8dc`](https://github.com/PrismJS/prism/commit/12ff8dc)]\n* __LaTeX__:\n\t* Regexp optimisation and simplification [[`aa426b0`](https://github.com/PrismJS/prism/commit/aa426b0)]\n* __LiveScript__:\n\t* Make interpolated strings greedy + fix variable and identifier regexps [[`c581049`](https://github.com/PrismJS/prism/commit/c581049)]\n* __LOLCODE__:\n\t* Don't use captures if not needed [[`52903af`](https://github.com/PrismJS/prism/commit/52903af)]\n* __Makefile__:\n\t* Regexp optimisation [[`20ae2e5`](https://github.com/PrismJS/prism/commit/20ae2e5)]\n* __Markdown__:\n\t* Don't use captures if not needed [[`f489a1e`](https://github.com/PrismJS/prism/commit/f489a1e)]\n* __Markup__:\n\t* Regexp optimisation + fix punctuation inside attr-value [[`ea380c6`](https://github.com/PrismJS/prism/commit/ea380c6)]\n* __MATLAB__:\n\t* Make strings greedy + handle line feeds better [[`4cd4f01`](https://github.com/PrismJS/prism/commit/4cd4f01)]\n* __Monkey__:\n\t* Don't use captures if not needed [[`7f47140`](https://github.com/PrismJS/prism/commit/7f47140)]\n* __N4JS__:\n\t* Don't use captures if not needed [[`2d3f9df`](https://github.com/PrismJS/prism/commit/2d3f9df)]\n* __NASM__:\n\t* Regexp optimisation and simplification + don't use captures if not needed [[`9937428`](https://github.com/PrismJS/prism/commit/9937428)]\n* __nginx__:\n\t* Remove trailing comma + remove duplicates in keywords [[`c6e7195`](https://github.com/PrismJS/prism/commit/c6e7195)]\n* __NSIS__:\n\t* Regexp optimisation + don't use captures if not needed [[`beeb107`](https://github.com/PrismJS/prism/commit/beeb107)]\n* __Objective-C__:\n\t* Don't use captures if not needed [[`9be0f88`](https://github.com/PrismJS/prism/commit/9be0f88)]\n* __OCaml__:\n\t* Regexp simplification [[`5f5f38c`](https://github.com/PrismJS/prism/commit/5f5f38c)]\n* __OpenCL__:\n\t* Don't use captures if not needed [[`5e70f1d`](https://github.com/PrismJS/prism/commit/5e70f1d)]\n* __Oz__:\n\t* Fix atom regexp [[`9320e92`](https://github.com/PrismJS/prism/commit/9320e92)]\n* __PARI/GP__:\n\t* Regexp optimisation [[`2c7b59b`](https://github.com/PrismJS/prism/commit/2c7b59b)]\n* __Parser__:\n\t* Regexp simplification [[`569d511`](https://github.com/PrismJS/prism/commit/569d511)]\n* __Perl__:\n\t* Regexp optimisation and simplification + don't use captures if not needed [[`0fe4cf6`](https://github.com/PrismJS/prism/commit/0fe4cf6)]\n* __PHP__:\n\t* Don't use captures if not needed Golmote [[`5235f18`](https://github.com/PrismJS/prism/commit/5235f18)]\n* __PHP Extras__:\n\t* Add word boundary after global keywords + don't use captures if not needed [[`9049a2a`](https://github.com/PrismJS/prism/commit/9049a2a)]\n* __PowerShell__:\n\t* Regexp optimisation + don't use captures if not needed [[`0d05957`](https://github.com/PrismJS/prism/commit/0d05957)]\n* __Processing__:\n\t* Regexp simplification [[`8110d38`](https://github.com/PrismJS/prism/commit/8110d38)]\n* __.properties__:\n\t* Regexp optimisation [[`678b621`](https://github.com/PrismJS/prism/commit/678b621)]\n* __Protocol Buffers__:\n\t* Don't use captures if not needed [[`3e256d8`](https://github.com/PrismJS/prism/commit/3e256d8)]\n* __Pug__:\n\t* Don't use captures if not needed [[`76dc925`](https://github.com/PrismJS/prism/commit/76dc925)]\n* __Pure__:\n\t* Make inline-lang greedy [[`92318b0`](https://github.com/PrismJS/prism/commit/92318b0)]\n* __Python__:\n\t* Add Python builtin function highlighting ([#1205](https://github.com/PrismJS/prism/issues/1205)) [[`2169c99`](https://github.com/PrismJS/prism/commit/2169c99)]\n\t* Python: Add highlighting to functions with space between name and parentheses ([#1207](https://github.com/PrismJS/prism/issues/1207)) [[`3badd8a`](https://github.com/PrismJS/prism/commit/3badd8a)]\n\t* Make triple-quoted strings greedy + regexp optimisation and simplification [[`f09f9f5`](https://github.com/PrismJS/prism/commit/f09f9f5)]\n* __Qore__:\n\t* Regexp simplification [[`69459f0`](https://github.com/PrismJS/prism/commit/69459f0)]\n* __R__:\n\t* Regexp optimisation [[`06a9da4`](https://github.com/PrismJS/prism/commit/06a9da4)]\n* __Reason__:\n\t* Regexp optimisation + don't use capture if not needed [[`19d79b4`](https://github.com/PrismJS/prism/commit/19d79b4)]\n* __Ren'py__:\n\t* Make strings greedy + don't use captures if not needed [[`91d84d9`](https://github.com/PrismJS/prism/commit/91d84d9)]\n* __reST__:\n\t* Regexp simplification + don't use captures if not needed [[`1a8b3e9`](https://github.com/PrismJS/prism/commit/1a8b3e9)]\n* __Rip__:\n\t* Regexp optimisation [[`d7f0ee8`](https://github.com/PrismJS/prism/commit/d7f0ee8)]\n* __Ruby__:\n\t* Regexp optimisation and simplification + don't use captures if not needed [[`4902ed4`](https://github.com/PrismJS/prism/commit/4902ed4)]\n* __Rust__:\n\t* Regexp optimisation and simplification + don't use captures if not needed [[`cc9d874`](https://github.com/PrismJS/prism/commit/cc9d874)]\n* __Sass__:\n\t* Regexp simplification Golmote [[`165d957`](https://github.com/PrismJS/prism/commit/165d957)]\n* __Scala__:\n\t* Regexp optimisation Golmote [[`5f50c12`](https://github.com/PrismJS/prism/commit/5f50c12)]\n* __Scheme__:\n\t* Regexp optimisation [[`bd19b04`](https://github.com/PrismJS/prism/commit/bd19b04)]\n* __SCSS__:\n\t* Regexp simplification [[`c60b7d4`](https://github.com/PrismJS/prism/commit/c60b7d4)]\n* __Smalltalk__:\n\t* Regexp simplification [[`41a2c76`](https://github.com/PrismJS/prism/commit/41a2c76)]\n* __Smarty__:\n\t* Regexp optimisation and simplification [[`e169be9`](https://github.com/PrismJS/prism/commit/e169be9)]\n* __SQL__:\n\t* Regexp optimisation [[`a6244a4`](https://github.com/PrismJS/prism/commit/a6244a4)]\n* __Stylus__:\n\t* Regexp optimisation [[`df9506c`](https://github.com/PrismJS/prism/commit/df9506c)]\n* __Swift__:\n\t* Don't use captures if not needed [[`a2d737a`](https://github.com/PrismJS/prism/commit/a2d737a)]\n* __Tcl__:\n\t* Regexp simplification + don't use captures if not needed [[`f0b8a33`](https://github.com/PrismJS/prism/commit/f0b8a33)]\n* __Textile__:\n\t* Regexp optimisation + don't use captures if not needed [[`08139ad`](https://github.com/PrismJS/prism/commit/08139ad)]\n* __Twig__:\n\t* Regexp optimisation and simplification + don't use captures if not needed [[`0b10fd0`](https://github.com/PrismJS/prism/commit/0b10fd0)]\n* __TypeScript__:\n\t* Don't use captures if not needed [[`e296caf`](https://github.com/PrismJS/prism/commit/e296caf)]\n* __Verilog__:\n\t* Regexp simplification [[`1b24b34`](https://github.com/PrismJS/prism/commit/1b24b34)]\n* __VHDL__:\n\t* Regexp optimisation and simplification [[`7af36df`](https://github.com/PrismJS/prism/commit/7af36df)]\n* __vim__:\n\t* Remove duplicates in keywords [[`700505e`](https://github.com/PrismJS/prism/commit/700505e)]\n* __Wiki markup__:\n\t* Fix escaping consistency [[`1fd690d`](https://github.com/PrismJS/prism/commit/1fd690d)]\n* __YAML__:\n\t* Regexp optimisation + don't use captures if not needed [[`1fd690d`](https://github.com/PrismJS/prism/commit/1fd690d)]\n\n### Other changes\n* Remove comments spellcheck for AMP validation ([#1106](https://github.com/PrismJS/prism/issues/1106)) [[`de996d7`](https://github.com/PrismJS/prism/commit/de996d7)]\n* Prevent error from throwing when element does not have a parentNode in highlightElement. [[`c33be19`](https://github.com/PrismJS/prism/commit/c33be19)]\n* Provide a way to load Prism from inside a Worker without listening to messages. ([#1188](https://github.com/PrismJS/prism/issues/1188)) [[`d09982d`](https://github.com/PrismJS/prism/commit/d09982d)]\n\n## 1.8.3 (2017-10-19)\n\n### Other changes\n\n* Fix inclusion tests for Pug [[`955c2ab`](https://github.com/PrismJS/prism/commit/955c2ab)]\n\n## 1.8.2 (2017-10-19)\n\n### Updated components\n* __Jade__:\n\t* Jade has been renamed to __Pug__ ([#1201](https://github.com/PrismJS/prism/issues/1201)) [[`bcfef7c`](https://github.com/PrismJS/prism/commit/bcfef7c)]\n* __JavaScript__:\n\t* Better highlighting of functions ([#1190](https://github.com/PrismJS/prism/issues/1190)) [[`8ee2cd3`](https://github.com/PrismJS/prism/commit/8ee2cd3)]\n\n### Update plugins\n* __Copy to clipboard__:\n\t* Fix error occurring when using in Chrome 61+ ([#1206](https://github.com/PrismJS/prism/issues/1206)) [[`b41d571`](https://github.com/PrismJS/prism/commit/b41d571)]\n* __Show invisibles__:\n\t* Prevent error when using with Autoloader plugin ([#1195](https://github.com/PrismJS/prism/issues/1195)) [[`ed8bdb5`](https://github.com/PrismJS/prism/commit/ed8bdb5)]\n\n## 1.8.1 (2017-09-16)\n\n### Other changes\n\n* Add Arduino to components.js [[`290a3c6`](https://github.com/PrismJS/prism/commit/290a3c6)]\n\n## 1.8.0 (2017-09-16)\n\n### New components\n\n* __Arduino__ ([#1184](https://github.com/PrismJS/prism/issues/1184)) [[`edf2454`](https://github.com/PrismJS/prism/commit/edf2454)]\n* __OpenCL__ ([#1175](https://github.com/PrismJS/prism/issues/1175)) [[`131e8fa`](https://github.com/PrismJS/prism/commit/131e8fa)]\n\n### Updated plugins\n\n* __Autolinker__:\n\t* Silently catch any error thrown by decodeURIComponent. Fixes [#1186](https://github.com/PrismJS/prism/issues/1186) [[`2e43fcf`](https://github.com/PrismJS/prism/commit/2e43fcf)]\n\n## 1.7.0 (2017-09-09)\n\n### New components\n\n* __Django/Jinja2__ ([#1085](https://github.com/PrismJS/prism/issues/1085)) [[`345b1b2`](https://github.com/PrismJS/prism/commit/345b1b2)]\n* __N4JS__ ([#1141](https://github.com/PrismJS/prism/issues/1141)) [[`eaa8ebb`](https://github.com/PrismJS/prism/commit/eaa8ebb)]\n* __Ren'py__ ([#658](https://github.com/PrismJS/prism/issues/658)) [[`7ab4013`](https://github.com/PrismJS/prism/commit/7ab4013)]\n* __VB.Net__ ([#1122](https://github.com/PrismJS/prism/issues/1122)) [[`5400651`](https://github.com/PrismJS/prism/commit/5400651)]\n\n### Updated components\n\n* __APL__:\n\t* Add left shoe underbar and right shoe underbar ([#1072](https://github.com/PrismJS/prism/issues/1072)) [[`12238c5`](https://github.com/PrismJS/prism/commit/12238c5)]\n\t* Update prism-apl.js ([#1126](https://github.com/PrismJS/prism/issues/1126)) [[`a5f3cdb`](https://github.com/PrismJS/prism/commit/a5f3cdb)]\n* __C__:\n\t* Add more keywords and constants for C. ([#1029](https://github.com/PrismJS/prism/issues/1029)) [[`43a388e`](https://github.com/PrismJS/prism/commit/43a388e)]\n* __C#__:\n\t* Fix wrong highlighting when three slashes appear inside string. Fix [#1091](https://github.com/PrismJS/prism/issues/1091) [[`dfb6f17`](https://github.com/PrismJS/prism/commit/dfb6f17)]\n* __C-like__:\n\t* Add support for unclosed block comments. Close [#828](https://github.com/PrismJS/prism/issues/828) [[`3426ed1`](https://github.com/PrismJS/prism/commit/3426ed1)]\n* __Crystal__:\n\t* Update Crystal keywords ([#1092](https://github.com/PrismJS/prism/issues/1092)) [[`125bff1`](https://github.com/PrismJS/prism/commit/125bff1)]\n* __CSS Extras__:\n\t* Support CSS #RRGGBBAA ([#1139](https://github.com/PrismJS/prism/issues/1139)) [[`07a6806`](https://github.com/PrismJS/prism/commit/07a6806)]\n* __Docker__:\n\t* Add dockerfile alias for docker language ([#1164](https://github.com/PrismJS/prism/issues/1164)) [[`601c47f`](https://github.com/PrismJS/prism/commit/601c47f)]\n\t* Update the list of keywords for dockerfiles ([#1180](https://github.com/PrismJS/prism/issues/1180)) [[`f0d73e0`](https://github.com/PrismJS/prism/commit/f0d73e0)]\n* __Eiffel__:\n\t* Add class-name highlighting for Eiffel ([#471](https://github.com/PrismJS/prism/issues/471)) [[`cd03587`](https://github.com/PrismJS/prism/commit/cd03587)]\n* __Handlebars__:\n\t* Check for possible pre-existing marker strings in Handlebars [[`7a1a404`](https://github.com/PrismJS/prism/commit/7a1a404)]\n* __JavaScript__:\n\t* Properly match every operator as a whole token. Fix [#1133](https://github.com/PrismJS/prism/issues/1133) [[`9f649fb`](https://github.com/PrismJS/prism/commit/9f649fb)]\n\t* Allows uppercase prefixes in JS number literals ([#1151](https://github.com/PrismJS/prism/issues/1151)) [[`d4ee904`](https://github.com/PrismJS/prism/commit/d4ee904)]\n\t* Reduced backtracking in regex pattern. Fix [#1159](https://github.com/PrismJS/prism/issues/1159) [[`ac09e97`](https://github.com/PrismJS/prism/commit/ac09e97)]\n* __JSON__:\n\t* Fix property and string patterns performance. Fix [#1080](https://github.com/PrismJS/prism/issues/1080) [[`0ca1353`](https://github.com/PrismJS/prism/commit/0ca1353)]\n* __JSX__:\n\t* JSX spread operator break. Fixes [#1061](https://github.com/PrismJS/prism/issues/1061) ([#1094](https://github.com/PrismJS/prism/issues/1094)) [[`561bceb`](https://github.com/PrismJS/prism/commit/561bceb)]\n\t* Fix highlighting of attributes containing spaces [[`867ea42`](https://github.com/PrismJS/prism/commit/867ea42)]\n\t* Improved performance for tags (when not matching) Fix [#1152](https://github.com/PrismJS/prism/issues/1152) [[`b0fe103`](https://github.com/PrismJS/prism/commit/b0fe103)]\n* __LOLCODE__:\n\t* Make strings greedy Golmote [[`1a5e7a4`](https://github.com/PrismJS/prism/commit/1a5e7a4)]\n* __Markup__:\n\t* Support HTML entities in attribute values ([#1143](https://github.com/PrismJS/prism/issues/1143)) [[`1d5047d`](https://github.com/PrismJS/prism/commit/1d5047d)]\n* __NSIS__:\n\t* Update patterns ([#1033](https://github.com/PrismJS/prism/issues/1033)) [[`01a59d8`](https://github.com/PrismJS/prism/commit/01a59d8)]\n\t* Add support for NSIS 3.02 ([#1169](https://github.com/PrismJS/prism/issues/1169)) [[`393b5f7`](https://github.com/PrismJS/prism/commit/393b5f7)]\n* __PHP__:\n\t* Fix the PHP language ([#1100](https://github.com/PrismJS/prism/issues/1100)) [[`1453fa7`](https://github.com/PrismJS/prism/commit/1453fa7)]\n\t* Check for possible pre-existing marker strings in PHP [[`36bc560`](https://github.com/PrismJS/prism/commit/36bc560)]\n* __Ruby__:\n\t* Fix slash regex performance. Fix [#1083](https://github.com/PrismJS/prism/issues/1083) [[`a708730`](https://github.com/PrismJS/prism/commit/a708730)]\n\t* Add support for =begin =end comments. Manual merge of [#1121](https://github.com/PrismJS/prism/issues/1121). [[`62cdaf8`](https://github.com/PrismJS/prism/commit/62cdaf8)]\n* __Smarty__:\n\t* Check for possible pre-existing marker strings in Smarty [[`5df26e2`](https://github.com/PrismJS/prism/commit/5df26e2)]\n* __TypeScript__:\n\t* Update typescript keywords ([#1064](https://github.com/PrismJS/prism/issues/1064)) [[`52020a0`](https://github.com/PrismJS/prism/commit/52020a0)]\n\t* Chmod -x prism-typescript component ([#1145](https://github.com/PrismJS/prism/issues/1145)) [[`afe0542`](https://github.com/PrismJS/prism/commit/afe0542)]\n* __YAML__:\n\t* Make strings greedy (partial fix for [#1075](https://github.com/PrismJS/prism/issues/1075)) [[`565a2cc`](https://github.com/PrismJS/prism/commit/565a2cc)]\n\n### Updated plugins\n\n* __Autolinker__:\n\t* Fixed an rendering issue for encoded urls ([#1173](https://github.com/PrismJS/prism/issues/1173)) [[`abc007f`](https://github.com/PrismJS/prism/commit/abc007f)]\n* __Custom Class__:\n\t* Add missing noCSS property for the Custom Class plugin [[`ba64f8d`](https://github.com/PrismJS/prism/commit/ba64f8d)]\n\t* Added a default for classMap. Fixes [#1137](https://github.com/PrismJS/prism/issues/1137). ([#1157](https://github.com/PrismJS/prism/issues/1157)) [[`5400af9`](https://github.com/PrismJS/prism/commit/5400af9)]\n* __Keep Markup__:\n\t* Store highlightedCode after reinserting markup. Fix [#1127](https://github.com/PrismJS/prism/issues/1127) [[`6df2ceb`](https://github.com/PrismJS/prism/commit/6df2ceb)]\n* __Line Highlight__:\n\t* Cleanup left-over line-highlight tags before other plugins run [[`79b723d`](https://github.com/PrismJS/prism/commit/79b723d)]\n\t* Avoid conflict between line-highlight and other plugins [[`224fdb8`](https://github.com/PrismJS/prism/commit/224fdb8)]\n* __Line Numbers__:\n\t* Support soft wrap for line numbers plugin ([#584](https://github.com/PrismJS/prism/issues/584)) [[`849f1d6`](https://github.com/PrismJS/prism/commit/849f1d6)]\n\t* Plugins fixes (unescaped-markup, line-numbers) ([#1012](https://github.com/PrismJS/prism/issues/1012)) [[`3fb7cf8`](https://github.com/PrismJS/prism/commit/3fb7cf8)]\n* __Normalize Whitespace__:\n\t* Add Node.js support for the normalize-whitespace plugin [[`6c7dae2`](https://github.com/PrismJS/prism/commit/6c7dae2)]\n* __Unescaped Markup__:\n\t* Plugins fixes (unescaped-markup, line-numbers) ([#1012](https://github.com/PrismJS/prism/issues/1012)) [[`3fb7cf8`](https://github.com/PrismJS/prism/commit/3fb7cf8)]\n\n### Updated themes\n* __Coy__:\n\t* Scroll 'Coy' background with contents ([#1163](https://github.com/PrismJS/prism/issues/1163)) [[`310990b`](https://github.com/PrismJS/prism/commit/310990b)]\n\n### Other changes\n\n* Initial implementation of manual highlighting ([#1087](https://github.com/PrismJS/prism/issues/1087)) [[`bafc4cb`](https://github.com/PrismJS/prism/commit/bafc4cb)]\n* Remove dead link in Third-party tutorials section. Fixes [#1028](https://github.com/PrismJS/prism/issues/1028) [[`dffadc6`](https://github.com/PrismJS/prism/commit/dffadc6)]\n* Most languages now use the greedy flag for better highlighting [[`7549ecc`](https://github.com/PrismJS/prism/commit/7549ecc)]\n* .npmignore: Unignore components.js ([#1108](https://github.com/PrismJS/prism/issues/1108)) [[`1f699e7`](https://github.com/PrismJS/prism/commit/1f699e7)]\n* Run before-highlight and after-highlight hooks even when no grammar is found. Fix [#1134](https://github.com/PrismJS/prism/issues/1134) [[`70cb472`](https://github.com/PrismJS/prism/commit/70cb472)]\n* Replace [\\w\\W] with [\\s\\S] and [0-9] with \\d in regexes ([#1107](https://github.com/PrismJS/prism/issues/1107)) [[`8aa2cc4`](https://github.com/PrismJS/prism/commit/8aa2cc4)]\n* Fix corner cases for the greedy flag ([#1095](https://github.com/PrismJS/prism/issues/1095)) [[`6530709`](https://github.com/PrismJS/prism/commit/6530709)]\n* Add Third Party Tutorial ([#1156](https://github.com/PrismJS/prism/issues/1156)) [[`c34e57b`](https://github.com/PrismJS/prism/commit/c34e57b)]\n* Add Composer support ([#648](https://github.com/PrismJS/prism/issues/648)) [[`2989633`](https://github.com/PrismJS/prism/commit/2989633)]\n* Remove IE8 plugin ([#992](https://github.com/PrismJS/prism/issues/992)) [[`25788eb`](https://github.com/PrismJS/prism/commit/25788eb)]\n* Website: remove width and height on logo.svg, so it becomes scalable. Close [#1005](https://github.com/PrismJS/prism/issues/1005) [[`0621ff7`](https://github.com/PrismJS/prism/commit/0621ff7)]\n* Remove yarn.lock ([#1098](https://github.com/PrismJS/prism/issues/1098)) [[`11eed25`](https://github.com/PrismJS/prism/commit/11eed25)]\n\n## 1.6.0 (2016-12-03)\n\n### New components\n\n* __.properties__ ([#980](https://github.com/PrismJS/prism/issues/980)) [[`be6219a`](https://github.com/PrismJS/prism/commit/be6219a)]\n* __Ada__ ([#949](https://github.com/PrismJS/prism/issues/949)) [[`65619f7`](https://github.com/PrismJS/prism/commit/65619f7)]\n* __GraphQL__ ([#971](https://github.com/PrismJS/prism/issues/971)) [[`e018087`](https://github.com/PrismJS/prism/commit/e018087)]\n* __Jolie__ ([#1014](https://github.com/PrismJS/prism/issues/1014)) [[`dfc1941`](https://github.com/PrismJS/prism/commit/dfc1941)]\n* __LiveScript__ ([#982](https://github.com/PrismJS/prism/issues/982)) [[`62e258c`](https://github.com/PrismJS/prism/commit/62e258c)]\n* __Reason__ (Fixes [#1046](https://github.com/PrismJS/prism/issues/1046)) [[`3cae6ce`](https://github.com/PrismJS/prism/commit/3cae6ce)]\n* __Xojo__ ([#994](https://github.com/PrismJS/prism/issues/994)) [[`0224b7c`](https://github.com/PrismJS/prism/commit/0224b7c)]\n\n### Updated components\n\n* __APL__:\n\t* Add iota underbar ([#1024](https://github.com/PrismJS/prism/issues/1024)) [[`3c5c89a`](https://github.com/PrismJS/prism/commit/3c5c89a), [`ac21d33`](https://github.com/PrismJS/prism/commit/ac21d33)]\n* __AsciiDoc__:\n\t* Optimized block regexps to prevent struggling on large files. Fixes [#1001](https://github.com/PrismJS/prism/issues/1001). [[`1a86d34`](https://github.com/PrismJS/prism/commit/1a86d34)]\n* __Bash__:\n\t* Add `npm` to function list ([#969](https://github.com/PrismJS/prism/issues/969)) [[`912bdfe`](https://github.com/PrismJS/prism/commit/912bdfe)]\n* __CSS__:\n\t* Make CSS strings greedy. Fix [#1013](https://github.com/PrismJS/prism/issues/1013). [[`e57e26d`](https://github.com/PrismJS/prism/commit/e57e26d)]\n* __CSS Extras__:\n\t* Match attribute inside selectors [[`13fed76`](https://github.com/PrismJS/prism/commit/13fed76)]\n* __Groovy__:\n\t* Fix order of decoding entities in groovy. Fixes [#1049](https://github.com/PrismJS/prism/issues/1049) ([#1050](https://github.com/PrismJS/prism/issues/1050)) [[`d75da8e`](https://github.com/PrismJS/prism/commit/d75da8e)]\n* __Ini__:\n\t* Remove important token in ini definition ([#1047](https://github.com/PrismJS/prism/issues/1047)) [[`fe8ad8b`](https://github.com/PrismJS/prism/commit/fe8ad8b)]\n* __JavaScript__:\n\t* Add exponentiation & spread/rest operator ([#991](https://github.com/PrismJS/prism/issues/991)) [[`b2de65a`](https://github.com/PrismJS/prism/commit/b2de65a), [`268d01e`](https://github.com/PrismJS/prism/commit/268d01e)]\n* __JSON__:\n\t* JSON: Fixed issues with properties and strings + added tests. Fix [#1025](https://github.com/PrismJS/prism/issues/1025) [[`25a541d`](https://github.com/PrismJS/prism/commit/25a541d)]\n* __Markup__:\n\t* Allow for dots in Markup tag names, but not in HTML tags included in Textile. Fixes [#888](https://github.com/PrismJS/prism/issues/888). [[`31ea66b`](https://github.com/PrismJS/prism/commit/31ea66b)]\n\t* Make doctype case-insensitive ([#1009](https://github.com/PrismJS/prism/issues/1009)) [[`3dd7219`](https://github.com/PrismJS/prism/commit/3dd7219)]\n* __NSIS__:\n\t* Updated patterns ([#1032](https://github.com/PrismJS/prism/issues/1032)) [[`76ba1b8`](https://github.com/PrismJS/prism/commit/76ba1b8)]\n* __PHP__:\n\t* Make comments greedy. Fix [#197](https://github.com/PrismJS/prism/issues/197) [[`318aab3`](https://github.com/PrismJS/prism/commit/318aab3)]\n* __PowerShell__:\n\t* Fix highlighting of empty comments ([#977](https://github.com/PrismJS/prism/issues/977)) [[`4fda477`](https://github.com/PrismJS/prism/commit/4fda477)]\n* __Puppet__:\n\t* Fix over-greedy regexp detection ([#978](https://github.com/PrismJS/prism/issues/978)) [[`105be25`](https://github.com/PrismJS/prism/commit/105be25)]\n* __Ruby__:\n\t* Fix typo `Fload` to `Float` in prism-ruby.js ([#1023](https://github.com/PrismJS/prism/issues/1023)) [[`22cb018`](https://github.com/PrismJS/prism/commit/22cb018)]\n\t* Make strings greedy. Fixes [#1048](https://github.com/PrismJS/prism/issues/1048) [[`8b0520a`](https://github.com/PrismJS/prism/commit/8b0520a)]\n* __SCSS__:\n\t* Alias statement as keyword. Fix [#246](https://github.com/PrismJS/prism/issues/246) [[`fd09391`](https://github.com/PrismJS/prism/commit/fd09391)]\n\t* Highlight variables inside selectors and properties. [[`d6b5c2f`](https://github.com/PrismJS/prism/commit/d6b5c2f)]\n\t* Highlight parent selector [[`8f5f1fa`](https://github.com/PrismJS/prism/commit/8f5f1fa)]\n* __TypeScript__:\n\t* Add missing `from` keyword to typescript & set `ts` as alias. ([#1042](https://github.com/PrismJS/prism/issues/1042)) [[`cba78f3`](https://github.com/PrismJS/prism/commit/cba78f3)]\n\n### New plugins\n\n* __Copy to Clipboard__ ([#891](https://github.com/PrismJS/prism/issues/891)) [[`07b81ac`](https://github.com/PrismJS/prism/commit/07b81ac)]\n* __Custom Class__ ([#950](https://github.com/PrismJS/prism/issues/950)) [[`a0bd686`](https://github.com/PrismJS/prism/commit/a0bd686)]\n* __Data-URI Highlight__ ([#996](https://github.com/PrismJS/prism/issues/996)) [[`bdca61b`](https://github.com/PrismJS/prism/commit/bdca61b)]\n* __Toolbar__ ([#891](https://github.com/PrismJS/prism/issues/891)) [[`07b81ac`](https://github.com/PrismJS/prism/commit/07b81ac)]\n\n### Updated plugins\n\n* __Autoloader__:\n\t* Updated documentation for Autoloader plugin [[`b4f3423`](https://github.com/PrismJS/prism/commit/b4f3423)]\n    * Download all grammars as a zip from Autoloader plugin page ([#981](https://github.com/PrismJS/prism/issues/981)) [[`0d0a007`](https://github.com/PrismJS/prism/commit/0d0a007), [`5c815d3`](https://github.com/PrismJS/prism/commit/5c815d3)]\n    * Removed duplicated script on Autoloader plugin page [[`9671996`](https://github.com/PrismJS/prism/commit/9671996)]\n    * Don't try to load \"none\" component. Fix [#1000](https://github.com/PrismJS/prism/issues/1000) [[`f89b0b9`](https://github.com/PrismJS/prism/commit/f89b0b9)]\n* __WPD__:\n\t* Fix at-rule detection + don't process if language is not handled [[`2626728`](https://github.com/PrismJS/prism/commit/2626728)]\n\n### Other changes\n\n* Improvement to greedy-flag ([#967](https://github.com/PrismJS/prism/issues/967)) [[`500121b`](https://github.com/PrismJS/prism/commit/500121b), [`9893489`](https://github.com/PrismJS/prism/commit/9893489)]\n* Add setTimeout fallback for requestAnimationFrame. Fixes [#987](https://github.com/PrismJS/prism/issues/987). ([#988](https://github.com/PrismJS/prism/issues/988)) [[`c9bdcd3`](https://github.com/PrismJS/prism/commit/c9bdcd3)]\n* Added aria-hidden attributes on elements created by the Line Highlight and Line Numbers plugins. Fixes [#574](https://github.com/PrismJS/prism/issues/574). [[`e5587a7`](https://github.com/PrismJS/prism/commit/e5587a7)]\n* Don't insert space before \">\" when there is no attributes [[`3dc8c9e`](https://github.com/PrismJS/prism/commit/3dc8c9e)]\n* Added missing hooks-related tests for AsciiDoc, Groovy, Handlebars, Markup, PHP and Smarty [[`c1a0c1b`](https://github.com/PrismJS/prism/commit/c1a0c1b)]\n* Fix issue when using Line numbers plugin and Normalise whitespace plugin together with Handlebars, PHP or Smarty. Fix [#1018](https://github.com/PrismJS/prism/issues/1018), [#997](https://github.com/PrismJS/prism/issues/997), [#935](https://github.com/PrismJS/prism/issues/935). Revert [#998](https://github.com/PrismJS/prism/issues/998). [[`86aa3d2`](https://github.com/PrismJS/prism/commit/86aa3d2)]\n* Optimized logo ([#990](https://github.com/PrismJS/prism/issues/990)) ([#1002](https://github.com/PrismJS/prism/issues/1002)) [[`f69e570`](https://github.com/PrismJS/prism/commit/f69e570), [`218fd25`](https://github.com/PrismJS/prism/commit/218fd25)]\n* Remove unneeded prefixed CSS ([#989](https://github.com/PrismJS/prism/issues/989)) [[`5e56833`](https://github.com/PrismJS/prism/commit/5e56833)]\n* Optimize images ([#1007](https://github.com/PrismJS/prism/issues/1007)) [[`b2fa6d5`](https://github.com/PrismJS/prism/commit/b2fa6d5)]\n* Add yarn.lock to .gitignore ([#1035](https://github.com/PrismJS/prism/issues/1035)) [[`03ecf74`](https://github.com/PrismJS/prism/commit/03ecf74)]\n* Fix greedy flag bug. Fixes [#1039](https://github.com/PrismJS/prism/issues/1039) [[`32cd99f`](https://github.com/PrismJS/prism/commit/32cd99f)]\n* Ruby: Fix test after [#1023](https://github.com/PrismJS/prism/issues/1023) [[`b15d43b`](https://github.com/PrismJS/prism/commit/b15d43b)]\n* Ini: Fix test after [#1047](https://github.com/PrismJS/prism/issues/1047) [[`25cdd3f`](https://github.com/PrismJS/prism/commit/25cdd3f)]\n* Reduce risk of XSS ([#1051](https://github.com/PrismJS/prism/issues/1051)) [[`17e33bc`](https://github.com/PrismJS/prism/commit/17e33bc)]\n* env.code can be modified by before-sanity-check hook even when using language-none. Fix [#1066](https://github.com/PrismJS/prism/issues/1066) [[`83bafbd`](https://github.com/PrismJS/prism/commit/83bafbd)]\n\n\n## 1.5.1 (2016-06-05)\n\n### Updated components\n\n* __Normalize Whitespace__:\n\t* Add class that disables the normalize whitespace plugin [[`9385c54`](https://github.com/PrismJS/prism/commit/9385c54)]\n* __JavaScript Language__:\n\t* Rearrange the `string` and `template-string` token in JavaScript [[`1158e46`](https://github.com/PrismJS/prism/commit/1158e46)]\n* __SQL Language__:\n\t* add delimeter and delimeters keywords to sql ([#958](https://github.com/PrismJS/prism/pull/958)) [[`a9ef24e`](https://github.com/PrismJS/prism/commit/a9ef24e)]\n\t* add AUTO_INCREMENT and DATE keywords to sql ([#954](https://github.com/PrismJS/prism/pull/954)) [[`caea2af`](https://github.com/PrismJS/prism/commit/caea2af)]\n* __Diff Language__:\n\t* Highlight diff lines with only + or - ([#952](https://github.com/PrismJS/prism/pull/952)) [[`4d0526f`](https://github.com/PrismJS/prism/commit/4d0526f)]\n\n### Other changes\n\n* Allow for asynchronous loading of prism.js ([#959](https://github.com/PrismJS/prism/pull/959))\n* Use toLowerCase on language names ([#957](https://github.com/PrismJS/prism/pull/957)) [[`acd9508`](https://github.com/PrismJS/prism/commit/acd9508)]\n* link to index for basic usage - fixes [#945](https://github.com/PrismJS/prism/issues/945) ([#946](https://github.com/PrismJS/prism/pull/946)) [[`6c772d8`](https://github.com/PrismJS/prism/commit/6c772d8)]\n* Fixed monospace typo ([#953](https://github.com/PrismJS/prism/pull/953)) [[`e6c3498`](https://github.com/PrismJS/prism/commit/e6c3498)]\n\n## 1.5.0 (2016-05-01)\n\n### New components\n\n* __Bro Language__ ([#925](https://github.com/PrismJS/prism/pull/925))\n* __Protocol Buffers Language__ ([#938](https://github.com/PrismJS/prism/pull/938)) [[`ae4a4f2`](https://github.com/PrismJS/prism/commit/ae4a4f2)]\n\n### Updated components\n\n* __Keep Markup__:\n\t* Fix Keep Markup plugin incorrect highlighting ([#880](https://github.com/PrismJS/prism/pull/880)) [[`24841ef`](https://github.com/PrismJS/prism/commit/24841ef)]\n* __Groovy Language__:\n\t* Fix double HTML-encoding bug in Groovy language [[`24a0936`](https://github.com/PrismJS/prism/commit/24a0936)]\n* __Java Language__:\n\t* Adding annotation token for Java ([#905](https://github.com/PrismJS/prism/pull/905)) [[`367ace6`](https://github.com/PrismJS/prism/commit/367ace6)]\n* __SAS Language__:\n\t* Add missing keywords for SAS ([#922](https://github.com/PrismJS/prism/pull/922))\n* __YAML Language__:\n\t* fix hilighting of YAML keys on first line of code block ([#943](https://github.com/PrismJS/prism/pull/943)) [[`f19db81`](https://github.com/PrismJS/prism/commit/f19db81)]\n* __C# Language__:\n\t* Support for generic methods in csharp [[`6f75735`](https://github.com/PrismJS/prism/commit/6f75735)]\n\n### New plugins\n\n* __Unescaped Markup__ [[`07d77e5`](https://github.com/PrismJS/prism/commit/07d77e5)]\n* __Normalize Whitespace__ ([#847](https://github.com/PrismJS/prism/pull/847)) [[`e86ec01`](https://github.com/PrismJS/prism/commit/e86ec01)]\n\n### Other changes\n\n* Add JSPM support [[`ad048ab`](https://github.com/PrismJS/prism/commit/ad048ab)]\n* update linear-gradient syntax from `left` to `to right` [[`cd234dc`](https://github.com/PrismJS/prism/commit/cd234dc)]\n* Add after-property to allow ordering of plugins [[`224b7a1`](https://github.com/PrismJS/prism/commit/224b7a1)]\n* Partial solution for the \"Comment-like substrings\"-problem [[`2705c50`](https://github.com/PrismJS/prism/commit/2705c50)]\n* Add property 'aliasTitles' to components.js [[`54400fb`](https://github.com/PrismJS/prism/commit/54400fb)]\n* Add before-highlightall hook [[`70a8602`](https://github.com/PrismJS/prism/commit/70a8602)]\n* Fix catastrophic backtracking regex issues in JavaScript [[`ab65be2`](https://github.com/PrismJS/prism/commit/ab65be2)]\n\n## 1.4.1 (2016-02-03)\n\n### Other changes\n\n* Fix DFS bug in Prism core [[`b86c727`](https://github.com/PrismJS/prism/commit/b86c727)]\n\n## 1.4.0 (2016-02-03)\n\n### New components\n\n* __Solarized Light__ ([#855](https://github.com/PrismJS/prism/pull/855)) [[`70846ba`](https://github.com/PrismJS/prism/commit/70846ba)]\n* __JSON__ ([#370](https://github.com/PrismJS/prism/pull/370)) [[`ad2fcd0`](https://github.com/PrismJS/prism/commit/ad2fcd0)]\n\n### Updated components\n\n* __Show Language__:\n\t* Remove data-language attribute ([#840](https://github.com/PrismJS/prism/pull/840)) [[`eb9a83c`](https://github.com/PrismJS/prism/commit/eb9a83c)]\n\t* Allow custom label without a language mapping ([#837](https://github.com/PrismJS/prism/pull/837)) [[`7e74aef`](https://github.com/PrismJS/prism/commit/7e74aef)]\n* __JSX__:\n\t* Better Nesting in JSX attributes ([#842](https://github.com/PrismJS/prism/pull/842)) [[`971dda7`](https://github.com/PrismJS/prism/commit/971dda7)]\n* __File Highlight__:\n\t* Defer File Highlight until the full DOM has loaded. ([#844](https://github.com/PrismJS/prism/pull/844)) [[`6f995ef`](https://github.com/PrismJS/prism/commit/6f995ef)]\n* __Coy Theme__:\n\t* Fix coy theme shadows ([#865](https://github.com/PrismJS/prism/pull/865)) [[`58d2337`](https://github.com/PrismJS/prism/commit/58d2337)]\n* __Show Invisibles__:\n\t* Ensure show-invisibles compat with autoloader ([#874](https://github.com/PrismJS/prism/pull/874)) [[`c3cfb1f`](https://github.com/PrismJS/prism/commit/c3cfb1f)]\n\t* Add support for the space character for the show-invisibles plugin ([#876](https://github.com/PrismJS/prism/pull/876)) [[`05442d3`](https://github.com/PrismJS/prism/commit/05442d3)]\n\n### New plugins\n\n* __Command Line__ ([#831](https://github.com/PrismJS/prism/pull/831)) [[`8378906`](https://github.com/PrismJS/prism/commit/8378906)]\n\n### Other changes\n\n* Use document.currentScript instead of document.getElementsByTagName() [[`fa98743`](https://github.com/PrismJS/prism/commit/fa98743)]\n* Add prefix for Firefox selection and move prefixed rule first [[`6d54717`](https://github.com/PrismJS/prism/commit/6d54717)]\n* No background for `<code>` in `<pre>` [[`8c310bc`](https://github.com/PrismJS/prism/commit/8c310bc)]\n* Fixing to initial copyright year [[`69cbf7a`](https://github.com/PrismJS/prism/commit/69cbf7a)]\n* Simplify the “lang” regex [[`417f54a`](https://github.com/PrismJS/prism/commit/417f54a)]\n* Fix broken heading links [[`a7f9e62`](https://github.com/PrismJS/prism/commit/a7f9e62)]\n* Prevent infinite recursion in DFS [[`02894e1`](https://github.com/PrismJS/prism/commit/02894e1)]\n* Fix incorrect page title [[`544b56f`](https://github.com/PrismJS/prism/commit/544b56f)]\n* Link scss to webplatform wiki [[`08d979a`](https://github.com/PrismJS/prism/commit/08d979a)]\n* Revert white-space to normal when code is inline instead of in a pre [[`1a971b5`](https://github.com/PrismJS/prism/commit/1a971b5)]\n\n## 1.3.0 (2015-10-26)\n\n### New components\n\n* __AsciiDoc__ ([#800](https://github.com/PrismJS/prism/issues/800)) [[`6803ca0`](https://github.com/PrismJS/prism/commit/6803ca0)]\n* __Haxe__ ([#811](https://github.com/PrismJS/prism/issues/811)) [[`bd44341`](https://github.com/PrismJS/prism/commit/bd44341)]\n* __Icon__ ([#803](https://github.com/PrismJS/prism/issues/803)) [[`b43c5f3`](https://github.com/PrismJS/prism/commit/b43c5f3)]\n* __Kotlin__ ([#814](https://github.com/PrismJS/prism/issues/814)) [[`e8a31a5`](https://github.com/PrismJS/prism/commit/e8a31a5)]\n* __Lua__ ([#804](https://github.com/PrismJS/prism/issues/804)) [[`a36bc4a`](https://github.com/PrismJS/prism/commit/a36bc4a)]\n* __Nix__ ([#795](https://github.com/PrismJS/prism/issues/795)) [[`9b275c8`](https://github.com/PrismJS/prism/commit/9b275c8)]\n* __Oz__ ([#805](https://github.com/PrismJS/prism/issues/805)) [[`388c53f`](https://github.com/PrismJS/prism/commit/388c53f)]\n* __PARI/GP__ ([#802](https://github.com/PrismJS/prism/issues/802)) [[`253c035`](https://github.com/PrismJS/prism/commit/253c035)]\n* __Parser__ ([#808](https://github.com/PrismJS/prism/issues/808)) [[`a953b3a`](https://github.com/PrismJS/prism/commit/a953b3a)]\n* __Puppet__ ([#813](https://github.com/PrismJS/prism/issues/813)) [[`81933ee`](https://github.com/PrismJS/prism/commit/81933ee)]\n* __Roboconf__ ([#812](https://github.com/PrismJS/prism/issues/812)) [[`f5db346`](https://github.com/PrismJS/prism/commit/f5db346)]\n\n### Updated components\n\n* __C__:\n\t* Highlight directives in preprocessor lines ([#801](https://github.com/PrismJS/prism/issues/801)) [[`ad316a3`](https://github.com/PrismJS/prism/commit/ad316a3)]\n* __C#__:\n\t* Highlight directives in preprocessor lines ([#801](https://github.com/PrismJS/prism/issues/801)) [[`ad316a3`](https://github.com/PrismJS/prism/commit/ad316a3)]\n\t* Fix detection of float numbers ([#806](https://github.com/PrismJS/prism/issues/806)) [[`1dae72b`](https://github.com/PrismJS/prism/commit/1dae72b)]\n* __F#__:\n\t* Highlight directives in preprocessor lines ([#801](https://github.com/PrismJS/prism/issues/801)) [[`ad316a3`](https://github.com/PrismJS/prism/commit/ad316a3)]\n* __JavaScript__:\n\t* Highlight true and false as booleans ([#801](https://github.com/PrismJS/prism/issues/801)) [[`ad316a3`](https://github.com/PrismJS/prism/commit/ad316a3)]\n* __Python__:\n\t* Highlight triple-quoted strings before comments. Fix [#815](https://github.com/PrismJS/prism/issues/815) [[`90fbf0b`](https://github.com/PrismJS/prism/commit/90fbf0b)]\n\n### New plugins\n\n* __Previewer: Time__ ([#790](https://github.com/PrismJS/prism/issues/790)) [[`88173de`](https://github.com/PrismJS/prism/commit/88173de)]\n* __Previewer: Angle__ ([#791](https://github.com/PrismJS/prism/issues/791)) [[`a434c86`](https://github.com/PrismJS/prism/commit/a434c86)]\n\n### Other changes\n\n* Increase mocha's timeout [[`f1c41db`](https://github.com/PrismJS/prism/commit/f1c41db)]\n* Prevent most errors in IE8. Fix [#9](https://github.com/PrismJS/prism/issues/9) [[`9652d75`](https://github.com/PrismJS/prism/commit/9652d75)]\n* Add U.S. Web Design Standards on homepage. Fix [#785](https://github.com/PrismJS/prism/issues/785) [[`e10d48b`](https://github.com/PrismJS/prism/commit/e10d48b), [`79ebbf8`](https://github.com/PrismJS/prism/commit/79ebbf8), [`2f7088d`](https://github.com/PrismJS/prism/commit/2f7088d)]\n* Added gulp task to autolink PRs and commits in changelog [[`5ec4e4d`](https://github.com/PrismJS/prism/commit/5ec4e4d)]\n* Use child processes to run each set of tests, in order to deal with the memory leak in vm.runInNewContext() [[`9a4b6fa`](https://github.com/PrismJS/prism/commit/9a4b6fa)]\n\n## 1.2.0 (2015-10-07)\n\n### New components\n\n* __Batch__ ([#781](https://github.com/PrismJS/prism/issues/781)) [[`eab5b06`](https://github.com/PrismJS/prism/commit/eab5b06)]\n\n### Updated components\n\n* __ASP.NET__:\n\t* Simplified pattern for `<script>` [[`29643f4`](https://github.com/PrismJS/prism/issues/29643f4)]\n* __Bash__:\n\t* Fix regression in strings ([#792](https://github.com/PrismJS/prism/issues/792)) [[`bd275c2`](https://github.com/PrismJS/prism/commit/bd275c2)]\n\t* Substantially reduce wrongly highlighted stuff ([#793](https://github.com/PrismJS/prism/issues/793)) [[`ac6fe2e`](https://github.com/PrismJS/prism/commit/ac6fe2e)]\n* __CSS__:\n\t* Simplified pattern for `<style>` [[`29643f4`](https://github.com/PrismJS/prism/issues/29643f4)]\n* __JavaScript__:\n\t* Simplified pattern for `<script>` [[`29643f4`](https://github.com/PrismJS/prism/issues/29643f4)]\n\n### New plugins\n\n* __Previewer: Gradient__ ([#783](https://github.com/PrismJS/prism/issues/783)) [[`9a63483`](https://github.com/PrismJS/prism/commit/9a63483)]\n\n### Updated plugins\n\n* __Previewer: Color__\n\t* Add support for Sass variables [[`3a1fb04`](https://github.com/PrismJS/prism/commit/3a1fb04)]\n\n* __Previewer: Easing__\n\t* Add support for Sass variables [[`7c7ab4e`](https://github.com/PrismJS/prism/commit/7c7ab4e)]\n\n### Other changes\n\n* Test runner: Allow to run tests for only some languages [[`5ade8a5`](https://github.com/PrismJS/prism/issues/5ade8a5)]\n* Download page: Fixed wrong components order raising error in generated file ([#797](https://github.com/PrismJS/prism/issues/787)) [[`7a6aed8`](https://github.com/PrismJS/prism/commit/7a6aed8)]\n\n## 1.1.0 (2015-10-04)\n\n### New components\n\n* __ABAP__ ([#636](https://github.com/PrismJS/prism/issues/636)) [[`75b0328`](https://github.com/PrismJS/prism/commit/75b0328), [`0749129`](https://github.com/PrismJS/prism/commit/0749129)]\n* __APL__ ([#308](https://github.com/PrismJS/prism/issues/308)) [[`1f45942`](https://github.com/PrismJS/prism/commit/1f45942), [`33a295f`](https://github.com/PrismJS/prism/commit/33a295f)]\n* __AutoIt__ ([#771](https://github.com/PrismJS/prism/issues/771)) [[`211a41c`](https://github.com/PrismJS/prism/commit/211a41c)]\n* __BASIC__ ([#620](https://github.com/PrismJS/prism/issues/620)) [[`805a0ce`](https://github.com/PrismJS/prism/commit/805a0ce)]\n* __Bison__ ([#764](https://github.com/PrismJS/prism/issues/764)) [[`7feb135`](https://github.com/PrismJS/prism/commit/7feb135)]\n* __Crystal__ ([#780](https://github.com/PrismJS/prism/issues/780)) [[`5b473de`](https://github.com/PrismJS/prism/commit/5b473de), [`414848d`](https://github.com/PrismJS/prism/commit/414848d)]\n* __D__ ([#613](https://github.com/PrismJS/prism/issues/613)) [[`b5e741c`](https://github.com/PrismJS/prism/commit/b5e741c)]\n* __Diff__ ([#450](https://github.com/PrismJS/prism/issues/450)) [[`ef41c74`](https://github.com/PrismJS/prism/commit/ef41c74)]\n* __Docker__ ([#576](https://github.com/PrismJS/prism/issues/576)) [[`e808352`](https://github.com/PrismJS/prism/commit/e808352)]\n* __Elixir__ ([#614](https://github.com/PrismJS/prism/issues/614)) [[`a1c028c`](https://github.com/PrismJS/prism/commit/a1c028c), [`c451611`](https://github.com/PrismJS/prism/commit/c451611), [`2e637f0`](https://github.com/PrismJS/prism/commit/2e637f0), [`ccb6566`](https://github.com/PrismJS/prism/commit/ccb6566)]\n* __GLSL__ ([#615](https://github.com/PrismJS/prism/issues/615)) [[`247da05`](https://github.com/PrismJS/prism/commit/247da05)]\n* __Inform 7__ ([#616](https://github.com/PrismJS/prism/issues/616)) [[`d2595b4`](https://github.com/PrismJS/prism/commit/d2595b4)]\n* __J__ ([#623](https://github.com/PrismJS/prism/issues/623)) [[`0cc50b2`](https://github.com/PrismJS/prism/commit/0cc50b2)]\n* __MEL__ ([#618](https://github.com/PrismJS/prism/issues/618)) [[`8496c14`](https://github.com/PrismJS/prism/commit/8496c14)]\n* __Mizar__ ([#619](https://github.com/PrismJS/prism/issues/619)) [[`efde61d`](https://github.com/PrismJS/prism/commit/efde61d)]\n* __Monkey__ ([#621](https://github.com/PrismJS/prism/issues/621)) [[`fdd4a3c`](https://github.com/PrismJS/prism/commit/fdd4a3c)]\n* __nginx__ ([#776](https://github.com/PrismJS/prism/issues/776)) [[`dc4fc19`](https://github.com/PrismJS/prism/commit/dc4fc19), [`e62c88e`](https://github.com/PrismJS/prism/commit/e62c88e)]\n* __Nim__ ([#622](https://github.com/PrismJS/prism/issues/622)) [[`af9c49a`](https://github.com/PrismJS/prism/commit/af9c49a)]\n* __OCaml__ ([#628](https://github.com/PrismJS/prism/issues/628)) [[`556c04d`](https://github.com/PrismJS/prism/commit/556c04d)]\n* __Processing__ ([#629](https://github.com/PrismJS/prism/issues/629)) [[`e47087b`](https://github.com/PrismJS/prism/commit/e47087b)]\n* __Prolog__ ([#630](https://github.com/PrismJS/prism/issues/630)) [[`dd04c32`](https://github.com/PrismJS/prism/commit/dd04c32)]\n* __Pure__ ([#626](https://github.com/PrismJS/prism/issues/626)) [[`9c276ab`](https://github.com/PrismJS/prism/commit/9c276ab)]\n* __Q__ ([#624](https://github.com/PrismJS/prism/issues/624)) [[`c053c9e`](https://github.com/PrismJS/prism/commit/c053c9e)]\n* __Qore__ [[`125e91f`](https://github.com/PrismJS/prism/commit/125e91f)]\n* __Tcl__ [[`a3e751a`](https://github.com/PrismJS/prism/commit/a3e751a), [`11ff829`](https://github.com/PrismJS/prism/commit/11ff829)]\n* __Textile__ ([#544](https://github.com/PrismJS/prism/issues/544)) [[`d0c6764`](https://github.com/PrismJS/prism/commit/d0c6764)]\n* __Verilog__ ([#640](https://github.com/PrismJS/prism/issues/640)) [[`44a11c2`](https://github.com/PrismJS/prism/commit/44a11c2), [`795eb99`](https://github.com/PrismJS/prism/commit/795eb99)]\n* __Vim__ [[`69ea994`](https://github.com/PrismJS/prism/commit/69ea994)]\n\n### Updated components\n\n* __Bash__:\n\t* Add support for Here-Documents ([#787](https://github.com/PrismJS/prism/issues/787)) [[`b57a096`](https://github.com/PrismJS/prism/commit/b57a096)]\n\t* Remove C-like dependency ([#789](https://github.com/PrismJS/prism/issues/789)) [[`1ab4619`](https://github.com/PrismJS/prism/commit/1ab4619)]\n* __C__:\n\t* Fixed numbers [[`4d64d07`](https://github.com/PrismJS/prism/commit/4d64d07), [`071c3dd`](https://github.com/PrismJS/prism/commit/071c3dd)]\n* __C-like__:\n\t* Add word boundary before class-name prefixes [[`aa757f6`](https://github.com/PrismJS/prism/commit/aa757f6)]\n\t* Improved operator regex + add != and !== [[`135ee9d`](https://github.com/PrismJS/prism/commit/135ee9d)]\n\t* Optimized string regexp [[`792e35c`](https://github.com/PrismJS/prism/commit/792e35c)]\n* __F#__:\n\t* Fixed keywords containing exclamation mark [[`09f2005`](https://github.com/PrismJS/prism/commit/09f2005)]\n\t* Improved string pattern [[`0101c89`](https://github.com/PrismJS/prism/commit/0101c89)]\n\t* Insert preprocessor before keyword + don't allow line feeds before # [[`fdc9477`](https://github.com/PrismJS/prism/commit/fdc9477)]\n\t* Fixed numbers [[`0aa0791`](https://github.com/PrismJS/prism/commit/0aa0791)]\n* __Gherkin__:\n\t* Don't allow spaces in tags [[`48ff8b7`](https://github.com/PrismJS/prism/commit/48ff8b7)]\n\t* Handle \\r\\n and \\r + allow feature alone + don't match blank td/th [[`ce1ec3b`](https://github.com/PrismJS/prism/commit/ce1ec3b)]\n* __Git__:\n\t* Added more examples ([#652](https://github.com/PrismJS/prism/issues/652)) [[`95dc102`](https://github.com/PrismJS/prism/commit/95dc102)]\n\t* Add support for unified diff. Fixes [#769](https://github.com/PrismJS/prism/issues/769), fixes [#357](https://github.com/PrismJS/prism/issues/357), closes [#401](https://github.com/PrismJS/prism/issues/401) [[`3aadd5d`](https://github.com/PrismJS/prism/commit/3aadd5d)]\n* __Go__:\n\t* Improved operator regexp + removed punctuation from it [[`776ab90`](https://github.com/PrismJS/prism/commit/776ab90)]\n* __Haml__:\n\t* Combine both multiline-comment regexps + handle \\r\\n and \\r [[`f77b40b`](https://github.com/PrismJS/prism/commit/f77b40b)]\n\t* Handle \\r\\n and \\r in filter regex [[`bbe68ac`](https://github.com/PrismJS/prism/commit/bbe68ac)]\n* __Handlebars__:\n\t* Fix empty strings, add plus sign in exponential notation, improve block pattern and variable pattern [[`c477f9a`](https://github.com/PrismJS/prism/commit/c477f9a)]\n\t* Properly escape special replacement patterns ($) in Handlebars, PHP and Smarty. Fix [#772](https://github.com/PrismJS/prism/issues/772) [[`895bf46`](https://github.com/PrismJS/prism/commit/895bf46)]\n* __Haskell__:\n\t* Removed useless backslashes and parentheses + handle \\r\\n and \\r + simplify number regexp + fix operator regexp [[`1cc8d8e`](https://github.com/PrismJS/prism/commit/1cc8d8e)]\n* __HTTP__:\n\t* Fix indentation + Add multiline flag for more flexibility + Fix response status + Handle \\r\\n and \\r [[`aaa90f1`](https://github.com/PrismJS/prism/commit/aaa90f1)]\n* __Ini__:\n\t* Fix some regexps + remove unused flags [[`53d5839`](https://github.com/PrismJS/prism/commit/53d5839)]\n* __Jade__:\n\t* Add todo list + remove single-line comment pattern + simplified most patterns with m flag + handle \\r\\n and \\r [[`a79e838`](https://github.com/PrismJS/prism/commit/a79e838)]\n* __Java__:\n\t* Fix number regexp + simplified number regexp and optimized operator regexp [[`21e20b9`](https://github.com/PrismJS/prism/commit/21e20b9)]\n* __JavaScript__:\n\t* JavaScript: Allow for all non-ASCII characters in function names. Fix [#400](https://github.com/PrismJS/prism/issues/400) [[`29e26dc`](https://github.com/PrismJS/prism/commit/29e26dc)]\n* __JSX__:\n\t* Allow for one level of nesting in scripts (Fix [#717](https://github.com/PrismJS/prism/issues/717)) [[`90c75d5`](https://github.com/PrismJS/prism/commit/90c75d5)]\n* __Julia__:\n\t* Simplify comment regexp + improved number regexp + improved operator regexp [[`bcac7d4`](https://github.com/PrismJS/prism/commit/bcac7d4)]\n* __Keyman__:\n\t* Move header statements above keywords [[`23a444c`](https://github.com/PrismJS/prism/commit/23a444c)]\n* __LaTeX__:\n\t* Simplify comment regexp [[`132b41a`](https://github.com/PrismJS/prism/commit/132b41a)]\n\t* Extend support [[`942a6ec`](https://github.com/PrismJS/prism/commit/942a6ec)]\n* __Less__:\n\t* Remove useless part in property regexp [[`80d8260`](https://github.com/PrismJS/prism/commit/80d8260)]\n* __LOLCODE__:\n\t* Removed useless parentheses [[`8147c9b`](https://github.com/PrismJS/prism/commit/8147c9b)]\n* __Makefile__:\n\t* Add known failures in example [[`e0f8984`](https://github.com/PrismJS/prism/commit/e0f8984)]\n\t* Handle \\r\\n in comments and strings + fix \"-include\" keyword\n* __Markup__:\n\t* Simplify patterns + handle \\r\\n and \\r [[`4c551e8`](https://github.com/PrismJS/prism/commit/4c551e8)]\n\t* Don't allow = to appear in tag name [[`85d8a55`](https://github.com/PrismJS/prism/commit/85d8a55)]\n\t* Don't allow dot inside tag name [[`283691e`](https://github.com/PrismJS/prism/commit/283691e)]\n* __MATLAB__:\n\t* Simplify string pattern to remove lookbehind [[`a3cbecc`](https://github.com/PrismJS/prism/commit/a3cbecc)]\n* __NASM__:\n\t* Converted indents to tabs, removed uneeded escapes, added lookbehinds [[`a92e4bd`](https://github.com/PrismJS/prism/commit/a92e4bd)]\n* __NSIS__:\n\t* Simplified patterns [[`bbd83d4`](https://github.com/PrismJS/prism/commit/bbd83d4)]\n\t* Fix operator regexp [[`44ad8dc`](https://github.com/PrismJS/prism/commit/44ad8dc)]\n* __Objective-C__:\n\t* Simplified regexps + fix strings + handle \\r [[`1d33147`](https://github.com/PrismJS/prism/commit/1d33147)]\n\t* Fix operator regexp [[`e9d382e`](https://github.com/PrismJS/prism/commit/e9d382e)]\n* __Pascal__:\n\t* Simplified regexps [[`c03c8a4`](https://github.com/PrismJS/prism/commit/c03c8a4)]\n* __Perl__:\n\t* Simplified regexps + Made most string and regexp patterns multi-line + Added support for regexp's n flag + Added missing operators [[`71b00cc`](https://github.com/PrismJS/prism/commit/71b00cc)]\n* __PHP__:\n\t* Simplified patterns [[`f9d9452`](https://github.com/PrismJS/prism/commit/f9d9452)]\n\t* Properly escape special replacement patterns ($) in Handlebars, PHP and Smarty. Fix [#772](https://github.com/PrismJS/prism/issues/772) [[`895bf46`](https://github.com/PrismJS/prism/commit/895bf46)]\n* __PHP Extras__:\n\t* Fix $this regexp + improve global regexp [[`781fdad`](https://github.com/PrismJS/prism/commit/781fdad)]\n* __PowerShell__:\n\t* Update definitions for command/alias/operators [[`14da55c`](https://github.com/PrismJS/prism/commit/14da55c)]\n* __Python__:\n\t* Added async/await and @ operator ([#656](https://github.com/PrismJS/prism/issues/656)) [[`7f1ae75`](https://github.com/PrismJS/prism/commit/7f1ae75)]\n\t* Added 'self' keyword and support for class names ([#677](https://github.com/PrismJS/prism/issues/677)) [[`d9d4ab2`](https://github.com/PrismJS/prism/commit/d9d4ab2)]\n\t* Simplified regexps + don't capture where unneeded + fixed operators [[`530f5f0`](https://github.com/PrismJS/prism/commit/530f5f0)]\n* __R__:\n\t* Fixed and simplified patterns [[`c20c3ec`](https://github.com/PrismJS/prism/commit/c20c3ec)]\n* __reST__:\n\t* Simplified some patterns, fixed others, prevented blank comments to match, moved list-bullet down to prevent breaking quotes [[`e6c6b85`](https://github.com/PrismJS/prism/commit/e6c6b85)]\n* __Rip__:\n\t* Fixed some regexp + moved down numbers [[`1093f7d`](https://github.com/PrismJS/prism/commit/1093f7d)]\n* __Ruby__:\n\t* Code cleaning, handle \\r\\n and \\r, fix some regexps [[`dd4989f`](https://github.com/PrismJS/prism/commit/dd4989f)]\n\t* Add % notations for strings and regexps. Fix [#590](https://github.com/PrismJS/prism/issues/590) [[`2d37800`](https://github.com/PrismJS/prism/commit/2d37800)]\n* __Rust__:\n\t* Simplified patterns and fixed operators [[`6c8494f`](https://github.com/PrismJS/prism/commit/6c8494f)]\n* __SAS__:\n\t* Simplified datalines and optimized operator patterns [[`6ebb96f`](https://github.com/PrismJS/prism/commit/6ebb96f)]\n* __Sass__:\n\t* Add missing require in components [[`35b8c50`](https://github.com/PrismJS/prism/commit/35b8c50)]\n\t* Fix comments, operators and selectors and simplified patterns [[`28759d0`](https://github.com/PrismJS/prism/commit/28759d0)]\n\t* Highlight \"-\" as operator only if surrounded by spaces, in order to not break hyphenated values (e.g. \"ease-in-out\") [[`b2763e7`](https://github.com/PrismJS/prism/commit/b2763e7)]\n* __Scala__:\n\t* Simplified patterns [[`daf2597`](https://github.com/PrismJS/prism/commit/daf2597)]\n* __Scheme__:\n\t* Add missing lookbehind on number pattern. Fix [#702](https://github.com/PrismJS/prism/issues/702) [[`3120ff7`](https://github.com/PrismJS/prism/commit/3120ff7)]\n\t* Fixes and simplifications [[`068704a`](https://github.com/PrismJS/prism/commit/068704a)]\n\t* Don't match content of symbols starting with a parenthesis [[`fa7df08`](https://github.com/PrismJS/prism/commit/fa7df08)]\n* __Scss__:\n\t* Simplified patterns + fixed operators + don't match empty selectors [[`672c167`](https://github.com/PrismJS/prism/commit/672c167)]\n* __Smalltalk__:\n\t* Simplified patterns [[`d896622`](https://github.com/PrismJS/prism/commit/d896622)]\n* __Smarty__:\n\t* Optimized regexps + fixed punctuation and operators [[`1446700`](https://github.com/PrismJS/prism/commit/1446700)]\n\t* Properly escape special replacement patterns ($) in Handlebars, PHP and Smarty. Fix [#772](https://github.com/PrismJS/prism/issues/772) [[`895bf46`](https://github.com/PrismJS/prism/commit/895bf46)]\n* __SQL__:\n\t* Simplified regexp + fixed keywords and operators + add CHARSET keyword [[`d49fec0`](https://github.com/PrismJS/prism/commit/d49fec0)]\n* __Stylus__:\n\t* Rewrote the component entirely [[`7729728`](https://github.com/PrismJS/prism/commit/7729728)]\n* __Swift__:\n\t* Optimized keywords lists and removed duplicates [[`936e429`](https://github.com/PrismJS/prism/commit/936e429)]\n\t* Add support for string interpolation. Fix [#448](https://github.com/PrismJS/prism/issues/448) [[`89cd5d0`](https://github.com/PrismJS/prism/commit/89cd5d0)]\n* __Twig__:\n\t* Prevent \"other\" pattern from matching blank strings [[`cae2cef`](https://github.com/PrismJS/prism/commit/cae2cef)]\n\t* Optimized regexps + fixed operators + added missing operators/keywords [[`2d8271f`](https://github.com/PrismJS/prism/commit/2d8271f)]\n* __VHDL__:\n\t* Move operator overloading before strings, don't capture if not needed, handle \\r\\n and \\r, fix numbers [[`4533f17`](https://github.com/PrismJS/prism/commit/4533f17)]\n* __Wiki markup__:\n\t* Fixed emphasis + merged some url patterns + added TODOs [[`8cf9e6a`](https://github.com/PrismJS/prism/commit/8cf9e6a)]\n* __YAML__:\n\t* Handled \\r\\n and \\r, simplified some patterns, fixed \"---\" [[`9e33e0a`](https://github.com/PrismJS/prism/commit/9e33e0a)]\n\n### New plugins\n\n* __Autoloader__ ([#766](https://github.com/PrismJS/prism/issues/766)) [[`ed4ccfe`](https://github.com/PrismJS/prism/commit/ed4ccfe)]\n* __JSONP Highlight__ [[`b2f14d9`](https://github.com/PrismJS/prism/commit/b2f14d9)]\n* __Keep Markup__ ([#770](https://github.com/PrismJS/prism/issues/770)) [[`bd3e9ea`](https://github.com/PrismJS/prism/commit/bd3e9ea)]\n* __Previewer: Base__ ([#767](https://github.com/PrismJS/prism/issues/767)) [[`cf764c0`](https://github.com/PrismJS/prism/commit/cf764c0)]\n* __Previewer: Color__ ([#767](https://github.com/PrismJS/prism/issues/767)) [[`cf764c0`](https://github.com/PrismJS/prism/commit/cf764c0)]\n* __Previewer: Easing__ ([#773](https://github.com/PrismJS/prism/issues/773)) [[`513137c`](https://github.com/PrismJS/prism/commit/513137c), [`9207258`](https://github.com/PrismJS/prism/commit/9207258), [`4303c94`](https://github.com/PrismJS/prism/commit/4303c94)]\n* __Remove initial line feed__ [[`ed9f2b2`](https://github.com/PrismJS/prism/commit/ed9f2b2), [`b8d098e`](https://github.com/PrismJS/prism/commit/b8d098e)]\n\n### Updated plugins\n\n* __Autolinker__:\n\t* Don't process all grammars on load, process each one in before-highlight. Should fix [#760](https://github.com/PrismJS/prism/issues/760) [[`a572495`](https://github.com/PrismJS/prism/commit/a572495)]\n* __Line Highlight__:\n\t* Run in `complete` hook [[`f237e67`](https://github.com/PrismJS/prism/commit/f237e67)]\n\t* Fixed position when font-size is odd ([#668](https://github.com/PrismJS/prism/issues/668)) [[`86bbd4c`](https://github.com/PrismJS/prism/commit/86bbd4c), [`8ed7ce3`](https://github.com/PrismJS/prism/commit/8ed7ce3)]\n* __Line Numbers__:\n\t* Run in `complete` hook [[`3f4d918`](https://github.com/PrismJS/prism/commit/3f4d918)]\n\t* Don't run if already exists [[`c89bbdb`](https://github.com/PrismJS/prism/commit/c89bbdb)]\n\t* Don't run if block is empty. Fix [#669](https://github.com/PrismJS/prism/issues/669) [[`ee463e8`](https://github.com/PrismJS/prism/commit/ee463e8)]\n\t* Correct calculation for number of lines (fix [#385](https://github.com/PrismJS/prism/issues/385)) [[`14f3f80`](https://github.com/PrismJS/prism/commit/14f3f80)]\n\t* Fix computation of line numbers for single-line code blocks. Fix [#721](https://github.com/PrismJS/prism/issues/721) [[`02b220e`](https://github.com/PrismJS/prism/commit/02b220e)]\n\t* Fixing word wrap on long code lines [[`56b3d29`](https://github.com/PrismJS/prism/commit/56b3d29)]\n\t* Fixing coy theme + line numbers plugin overflowing on long blocks of text ([#762](https://github.com/PrismJS/prism/issues/762)) [[`a0127eb`](https://github.com/PrismJS/prism/commit/a0127eb)]\n* __Show Language__:\n\t* Add gulp task to build languages map in Show language plugin (Fix [#671](https://github.com/PrismJS/prism/issues/671)) [[`39bd827`](https://github.com/PrismJS/prism/commit/39bd827)]\n\t* Add reset styles to prevent bug in Coy theme ([#703](https://github.com/PrismJS/prism/issues/703)) [[`08dd500`](https://github.com/PrismJS/prism/commit/08dd500)]\n\n### Other changes\n\n* Fixed link to David Peach article ([#647](https://github.com/PrismJS/prism/issues/647)) [[`3f679f8`](https://github.com/PrismJS/prism/commit/3f679f8)]\n* Added `complete` hook, which runs even when no grammar is found [[`e58b6c0`](https://github.com/PrismJS/prism/commit/e58b6c0), [`fd54995`](https://github.com/PrismJS/prism/commit/fd54995)]\n* Added test suite runner ([#588](https://github.com/PrismJS/prism/issues/588)) [[`956cd85`](https://github.com/PrismJS/prism/commit/956cd85)]\n* Added tests for every components\n* Added `.gitattributes` to prevent line ending changes in test files [[`45ca8c8`](https://github.com/PrismJS/prism/commit/45ca8c8)]\n* Split plugins into 3 columns on Download page [[`a88936a`](https://github.com/PrismJS/prism/commit/a88936a)]\n* Removed comment in components.js to make it easier to parse as JSON ([#679](https://github.com/PrismJS/prism/issues/679)) [[`2cb1326`](https://github.com/PrismJS/prism/commit/2cb1326)]\n* Updated README.md [[`1388256`](https://github.com/PrismJS/prism/commit/1388256)]\n* Updated documentation since the example was not relevant any more [[`80aedb2`](https://github.com/PrismJS/prism/commit/80aedb2)]\n* Fixed inline style for Coy theme [[`52829b3`](https://github.com/PrismJS/prism/commit/52829b3)]\n* Prevent errors in nodeJS ([#754](https://github.com/PrismJS/prism/issues/754)) [[`9f5c93c`](https://github.com/PrismJS/prism/commit/9f5c93c), [`0356c58`](https://github.com/PrismJS/prism/commit/0356c58)]\n* Explicitly make the Worker close itself after highlighting, so that users have control on this behaviour when directly using Prism inside a Worker. Fix [#492](https://github.com/PrismJS/prism/issues/492) [[`e42a228`](https://github.com/PrismJS/prism/commit/e42a228)]\n* Added some language aliases: js for javascript, xml, html, mathml and svg for markup [[`2f9fe1e`](https://github.com/PrismJS/prism/commit/2f9fe1e)]\n* Download page: Add a \"Select all\" checkbox ([#561](https://github.com/PrismJS/prism/issues/561)) [[`9a9020b`](https://github.com/PrismJS/prism/commit/9a9020b)]\n* Download page: Don't add semicolon unless needed in generated code. Fix [#273](https://github.com/PrismJS/prism/issues/273) [[`5a5eec5`](https://github.com/PrismJS/prism/commit/5a5eec5)]\n* Add language counter on homepage [[`889cda5`](https://github.com/PrismJS/prism/commit/889cda5)]\n* Improve performance by doing more work in the worker [[`1316abc`](https://github.com/PrismJS/prism/commit/1316abc)]\n* Replace Typeplate with SitePoint on homepage. Fix [#774](https://github.com/PrismJS/prism/issues/774) [[`0c54308`](https://github.com/PrismJS/prism/commit/0c54308)]\n* Added basic `.editorconfig` [[`c48f55d`](https://github.com/PrismJS/prism/commit/c48f55d)]\n\n---\n\n## 1.0.1 (2015-07-26)\n\n### New components\n\n* __Brainfuck__ ([#611](https://github.com/PrismJS/prism/issues/611)) [[`3ede718`](https://github.com/PrismJS/prism/commit/3ede718)]\n* __Keyman__ ([#609](https://github.com/PrismJS/prism/issues/609)) [[`2698f82`](https://github.com/PrismJS/prism/commit/2698f82), [`e9936c6`](https://github.com/PrismJS/prism/commit/e9936c6)]\n* __Makefile__ ([#610](https://github.com/PrismJS/prism/issues/610)) [[`3baa61c`](https://github.com/PrismJS/prism/commit/3baa61c)]\n* __Sass (Sass)__ (fix [#199](https://github.com/PrismJS/prism/issues/199)) [[`b081804`](https://github.com/PrismJS/prism/commit/b081804)]\n* __VHDL__ ([#595](https://github.com/PrismJS/prism/issues/595)) [[`43e6157`](https://github.com/PrismJS/prism/commit/43e6157)]\n\n### Updated components\n\n* __ActionScript__:\n\t* Fix ! operator and add ++ and -- as whole operators [[`6bf0794`](https://github.com/PrismJS/prism/commit/6bf0794)]\n\t* Fix XML highlighting [[`90257b0`](https://github.com/PrismJS/prism/commit/90257b0)]\n\t* Update examples to add inline XML [[`2c1626a`](https://github.com/PrismJS/prism/commit/2c1626a), [`3987711`](https://github.com/PrismJS/prism/commit/3987711)]\n* __Apache Configuration__:\n\t* Don't include the spaces in directive-inline [[`e87efd8`](https://github.com/PrismJS/prism/commit/e87efd8)]\n* __AppleScript__:\n\t* Allow one level of nesting in block comments [[`65894c5`](https://github.com/PrismJS/prism/commit/65894c5)]\n\t* Removed duplicates between operators and keywords [[`1ec5a81`](https://github.com/PrismJS/prism/commit/1ec5a81)]\n\t* Removed duplicates between keywords and classes [[`e8d09f6`](https://github.com/PrismJS/prism/commit/e8d09f6)]\n\t* Move numbers up so they are not broken by operator pattern [[`66dac31`](https://github.com/PrismJS/prism/commit/66dac31)]\n* __ASP.NET__:\n\t* Prevent Markup tags from breaking ASP tags + fix MasterType directive [[`1f0a336`](https://github.com/PrismJS/prism/commit/1f0a336)]\n* __AutoHotkey__:\n\t* Allow tags (labels) to be highlighted at the end of the code [[`0a1fc4b`](https://github.com/PrismJS/prism/commit/0a1fc4b)]\n\t* Match all operators + add comma to punctuation [[`f0ccb1b`](https://github.com/PrismJS/prism/commit/f0ccb1b)]\n\t* Removed duplicates in keywords lists [[`fe0a068`](https://github.com/PrismJS/prism/commit/fe0a068)]\n* __Bash__:\n\t* Simplify comment regex [[`2700981`](https://github.com/PrismJS/prism/commit/2700981)]\n\t* Removed duplicates in keywords + removed unneeded parentheses [[`903b8a4`](https://github.com/PrismJS/prism/commit/903b8a4)]\n* __C__:\n\t* Removed string pattern (inherited from C-like) [[`dcce1a7`](https://github.com/PrismJS/prism/commit/dcce1a7)]\n\t* Better support for macro statements [[`4868635`](https://github.com/PrismJS/prism/commit/4868635)]\n* __C#__:\n\t* Fix preprocessor pattern [[`86311f5`](https://github.com/PrismJS/prism/commit/86311f5)]\n* __C++__:\n\t* Removed delete[] and new[] broken keywords [[`42fbeef`](https://github.com/PrismJS/prism/commit/42fbeef)]\n* __C-like__:\n\t* Removed unused 'ignore' pattern [[`b6535dd`](https://github.com/PrismJS/prism/commit/b6535dd)]\n\t* Use look-ahead instead of inside to match functions [[`d4194c9`](https://github.com/PrismJS/prism/commit/d4194c9)]\n* __CoffeeScript__:\n\t* Prevent strings from ending with a backslash [[`cb6b824`](https://github.com/PrismJS/prism/commit/cb6b824)]\n* __CSS__:\n\t* Highlight parentheses as punctuation [[`cd0273e`](https://github.com/PrismJS/prism/commit/cd0273e)]\n\t* Improved highlighting of at-rules [[`e254088`](https://github.com/PrismJS/prism/commit/e254088)]\n\t* Improved URL and strings [[`901812c`](https://github.com/PrismJS/prism/commit/901812c)]\n\t* Selector regexp should not include last spaces before brace [[`f2e2718`](https://github.com/PrismJS/prism/commit/f2e2718)]\n\t* Handle \\r\\n [[`15760e1`](https://github.com/PrismJS/prism/commit/15760e1)]\n* __Eiffel__:\n\t* Fix string patterns order + fix /= operator [[`7d1b8d7`](https://github.com/PrismJS/prism/commit/7d1b8d7)]\n* __Erlang__:\n\t* Fixed quoted functions, quoted atoms, variables and <= operator [[`fa286aa`](https://github.com/PrismJS/prism/commit/fa286aa)]\n* __Fortran__:\n\t* Improved pattern for comments inside strings [[`40ae215`](https://github.com/PrismJS/prism/commit/40ae215)]\n\t* Fixed order in keyword pattern [[`8a6d32d`](https://github.com/PrismJS/prism/commit/8a6d32d)]\n* __Handlebars__:\n\t* Support blocks with dashes ([#587](https://github.com/PrismJS/prism/issues/587)) [[`f409b13`](https://github.com/PrismJS/prism/commit/f409b13)]\n* __JavaScript__:\n\t* Added support for 'y' and 'u' ES6 JavaScript regex flags ([#596](https://github.com/PrismJS/prism/issues/596)) [[`5d99957`](https://github.com/PrismJS/prism/commit/5d99957)]\n\t* Added support for missing ES6 keywords in JavaScript ([#596](https://github.com/PrismJS/prism/issues/596)) [[`ca68b87`](https://github.com/PrismJS/prism/commit/ca68b87)]\n\t* Added `async` and `await` keywords ([#575](https://github.com/PrismJS/prism/issues/575)) [[`5458cec`](https://github.com/PrismJS/prism/commit/5458cec)]\n\t* Added support for Template strings + interpolation [[`04f72b1`](https://github.com/PrismJS/prism/commit/04f72b1)]\n\t* Added support for octal and binary numbers ([#597](https://github.com/PrismJS/prism/issues/597)) [[`a8aa058`](https://github.com/PrismJS/prism/commit/a8aa058)]\n\t* Improve regex performance of C-like strings and JS regexps [[`476cbf4`](https://github.com/PrismJS/prism/commit/476cbf4)]\n* __Markup__:\n\t* Allow non-ASCII chars in tag names and attributes (fix [#585](https://github.com/PrismJS/prism/issues/585)) [[`52fd55e`](https://github.com/PrismJS/prism/commit/52fd55e)]\n\t* Optimized tag's regexp so that it stops crashing on large unclosed tags [[`75452ba`](https://github.com/PrismJS/prism/commit/75452ba)]\n\t* Highlight single quotes in attr-value as punctuation [[`1ebcb8e`](https://github.com/PrismJS/prism/commit/1ebcb8e)]\n\t* Doctype and prolog can be multi-line [[`c19a238`](https://github.com/PrismJS/prism/commit/c19a238)]\n* __Python__:\n\t* Added highlighting for function declaration ([#601](https://github.com/PrismJS/prism/issues/601)) [[`a88aae8`](https://github.com/PrismJS/prism/commit/a88aae8)]\n\t* Fixed wrong highlighting of variables named a, b, c... f ([#601](https://github.com/PrismJS/prism/issues/601)) [[`a88aae8`](https://github.com/PrismJS/prism/commit/a88aae8)]\n* __Ruby__:\n\t* Added support for string interpolation [[`c36b123`](https://github.com/PrismJS/prism/commit/c36b123)]\n* __Scss__:\n\t* Fixed media queries highlighting [[`bf8e032`](https://github.com/PrismJS/prism/commit/bf8e032)]\n\t* Improved highlighting inside at-rules [[`eef4248`](https://github.com/PrismJS/prism/commit/eef4248)]\n\t* Match placeholders inside selectors (fix [#238](https://github.com/PrismJS/prism/issues/238)) [[`4e42e26`](https://github.com/PrismJS/prism/commit/4e42e26)]\n* __Swift__:\n\t* Update keywords list (fix [#625](https://github.com/PrismJS/prism/issues/625)) [[`88f44a7`](https://github.com/PrismJS/prism/commit/88f44a7)]\n\n### Updated plugins\n\n* __File Highlight__:\n\t* Allow to specify the highlighting language. Fix [#607](https://github.com/PrismJS/prism/issues/607) [[`8030db9`](https://github.com/PrismJS/prism/commit/8030db9)]\n* __Line Highlight__:\n\t* Fixed incorrect height in IE9 ([#604](https://github.com/PrismJS/prism/issues/604)) [[`f1705eb`](https://github.com/PrismJS/prism/commit/f1705eb)]\n\t* Prevent errors in IE8 [[`5f133c8`](https://github.com/PrismJS/prism/commit/5f133c8)]\n\n### Other changes\n\n* Removed moot `version` property from `bower.json` ([#594](https://github.com/PrismJS/prism/issues/594)) [[`4693499`](https://github.com/PrismJS/prism/commit/4693499)]\n* Added repository to `bower.json` ([#600](https://github.com/PrismJS/prism/issues/600)) [[`8e5ebcc`](https://github.com/PrismJS/prism/commit/8e5ebcc)]\n* Added `.DS_Store` to `.gitignore` [[`1707e4e`](https://github.com/PrismJS/prism/commit/1707e4e)]\n* Improve test drive page usability. Fix [#591](https://github.com/PrismJS/prism/issues/591) [[`fe60858`](https://github.com/PrismJS/prism/commit/fe60858)]\n* Fixed prism-core and prism-file-highlight to prevent errors in IE8 [[`5f133c8`](https://github.com/PrismJS/prism/commit/5f133c8)]\n* Add Ubuntu Mono font to font stack [[`ed9d7e3`](https://github.com/PrismJS/prism/commit/ed9d7e3)]\n\n---\n\n## 1.0.0 (2015-05-23)\n\n* First release\n* Supported languages:\n\t* ActionScript\n\t* Apache Configuration\n\t* AppleScript\n\t* ASP.NET (C#)\n\t* AutoHotkey\n\t* Bash\n\t* C\n\t* C#\n\t* C++\n\t* C-like\n\t* CoffeeScript\n\t* CSS\n\t* CSS Extras\n\t* Dart\n\t* Eiffel\n\t* Erlang\n\t* F#\n\t* Fortran\n\t* Gherkin\n\t* Git\n\t* Go\n\t* Groovy\n\t* Haml\n\t* Handlebars\n\t* Haskell\n\t* HTTP\n\t* Ini\n\t* Jade\n\t* Java\n\t* JavaScript\n\t* Julia\n\t* LaTeX\n\t* Less\n\t* LOLCODE\n\t* Markdown\n\t* Markup\n\t* MATLAB\n\t* NASM\n\t* NSIS\n\t* Objective-C\n\t* Pascal\n\t* Perl\n\t* PHP\n\t* PHP Extras\n\t* PowerShell\n\t* Python\n\t* R\n\t* React JSX\n\t* reST\n\t* Rip\n\t* Ruby\n\t* Rust\n\t* SAS\n\t* Sass (Scss)\n\t* Scala\n\t* Scheme\n\t* Smalltalk\n\t* Smarty\n\t* SQL\n\t* Stylus\n\t* Swift\n\t* Twig\n\t* TypeScript\n\t* Wiki markup\n\t* YAML\n* Plugins:\n\t* Autolinker\n\t* File Highlight\n\t* Highlight Keywords\n\t* Line Highlight\n\t* Line Numbers\n\t* Show Invisibles\n\t* Show Language\n\t* WebPlatform Docs\n'/plugins/autoloader/prism-autoloader.js.(function () {\n\n\tif (typeof Prism === 'undefined' || typeof document === 'undefined') {\n\t\treturn;\n\t}\n\n\t/* eslint-disable */\n\n\t/**\n\t * The dependencies map is built automatically with gulp.\n\t *\n\t * @type {Object<string, string | string[]>}\n\t */\n\tvar lang_dependencies = /*dependencies_placeholder[*/{\n\t\t\"javascript\": \"clike\",\n\t\t\"actionscript\": \"javascript\",\n\t\t\"apex\": [\n\t\t\t\"clike\",\n\t\t\t\"sql\"\n\t\t],\n\t\t\"arduino\": \"cpp\",\n\t\t\"aspnet\": [\n\t\t\t\"markup\",\n\t\t\t\"csharp\"\n\t\t],\n\t\t\"birb\": \"clike\",\n\t\t\"bison\": \"c\",\n\t\t\"c\": \"clike\",\n\t\t\"csharp\": \"clike\",\n\t\t\"cpp\": \"c\",\n\t\t\"cfscript\": \"clike\",\n\t\t\"chaiscript\": [\n\t\t\t\"clike\",\n\t\t\t\"cpp\"\n\t\t],\n\t\t\"cilkc\": \"c\",\n\t\t\"cilkcpp\": \"cpp\",\n\t\t\"coffeescript\": \"javascript\",\n\t\t\"crystal\": \"ruby\",\n\t\t\"css-extras\": \"css\",\n\t\t\"d\": \"clike\",\n\t\t\"dart\": \"clike\",\n\t\t\"django\": \"markup-templating\",\n\t\t\"ejs\": [\n\t\t\t\"javascript\",\n\t\t\t\"markup-templating\"\n\t\t],\n\t\t\"etlua\": [\n\t\t\t\"lua\",\n\t\t\t\"markup-templating\"\n\t\t],\n\t\t\"erb\": [\n\t\t\t\"ruby\",\n\t\t\t\"markup-templating\"\n\t\t],\n\t\t\"fsharp\": \"clike\",\n\t\t\"firestore-security-rules\": \"clike\",\n\t\t\"flow\": \"javascript\",\n\t\t\"ftl\": \"markup-templating\",\n\t\t\"gml\": \"clike\",\n\t\t\"glsl\": \"c\",\n\t\t\"go\": \"clike\",\n\t\t\"gradle\": \"clike\",\n\t\t\"groovy\": \"clike\",\n\t\t\"haml\": \"ruby\",\n\t\t\"handlebars\": \"markup-templating\",\n\t\t\"haxe\": \"clike\",\n\t\t\"hlsl\": \"c\",\n\t\t\"idris\": \"haskell\",\n\t\t\"java\": \"clike\",\n\t\t\"javadoc\": [\n\t\t\t\"markup\",\n\t\t\t\"java\",\n\t\t\t\"javadoclike\"\n\t\t],\n\t\t\"jolie\": \"clike\",\n\t\t\"jsdoc\": [\n\t\t\t\"javascript\",\n\t\t\t\"javadoclike\",\n\t\t\t\"typescript\"\n\t\t],\n\t\t\"js-extras\": \"javascript\",\n\t\t\"json5\": \"json\",\n\t\t\"jsonp\": \"json\",\n\t\t\"js-templates\": \"javascript\",\n\t\t\"kotlin\": \"clike\",\n\t\t\"latte\": [\n\t\t\t\"clike\",\n\t\t\t\"markup-templating\",\n\t\t\t\"php\"\n\t\t],\n\t\t\"less\": \"css\",\n\t\t\"lilypond\": \"scheme\",\n\t\t\"liquid\": \"markup-templating\",\n\t\t\"markdown\": \"markup\",\n\t\t\"markup-templating\": \"markup\",\n\t\t\"mongodb\": \"javascript\",\n\t\t\"n4js\": \"javascript\",\n\t\t\"objectivec\": \"c\",\n\t\t\"opencl\": \"c\",\n\t\t\"parser\": \"markup\",\n\t\t\"php\": \"markup-templating\",\n\t\t\"phpdoc\": [\n\t\t\t\"php\",\n\t\t\t\"javadoclike\"\n\t\t],\n\t\t\"php-extras\": \"php\",\n\t\t\"plsql\": \"sql\",\n\t\t\"processing\": \"clike\",\n\t\t\"protobuf\": \"clike\",\n\t\t\"pug\": [\n\t\t\t\"markup\",\n\t\t\t\"javascript\"\n\t\t],\n\t\t\"purebasic\": \"clike\",\n\t\t\"purescript\": \"haskell\",\n\t\t\"qsharp\": \"clike\",\n\t\t\"qml\": \"javascript\",\n\t\t\"qore\": \"clike\",\n\t\t\"racket\": \"scheme\",\n\t\t\"cshtml\": [\n\t\t\t\"markup\",\n\t\t\t\"csharp\"\n\t\t],\n\t\t\"jsx\": [\n\t\t\t\"markup\",\n\t\t\t\"javascript\"\n\t\t],\n\t\t\"tsx\": [\n\t\t\t\"jsx\",\n\t\t\t\"typescript\"\n\t\t],\n\t\t\"reason\": \"clike\",\n\t\t\"ruby\": \"clike\",\n\t\t\"sass\": \"css\",\n\t\t\"scss\": \"css\",\n\t\t\"scala\": \"java\",\n\t\t\"shell-session\": \"bash\",\n\t\t\"smarty\": \"markup-templating\",\n\t\t\"solidity\": \"clike\",\n\t\t\"soy\": \"markup-templating\",\n\t\t\"sparql\": \"turtle\",\n\t\t\"sqf\": \"clike\",\n\t\t\"squirrel\": \"clike\",\n\t\t\"stata\": [\n\t\t\t\"mata\",\n\t\t\t\"java\",\n\t\t\t\"python\"\n\t\t],\n\t\t\"t4-cs\": [\n\t\t\t\"t4-templating\",\n\t\t\t\"csharp\"\n\t\t],\n\t\t\"t4-vb\": [\n\t\t\t\"t4-templating\",\n\t\t\t\"vbnet\"\n\t\t],\n\t\t\"tap\": \"yaml\",\n\t\t\"tt2\": [\n\t\t\t\"clike\",\n\t\t\t\"markup-templating\"\n\t\t],\n\t\t\"textile\": \"markup\",\n\t\t\"twig\": \"markup-templating\",\n\t\t\"typescript\": \"javascript\",\n\t\t\"v\": \"clike\",\n\t\t\"vala\": \"clike\",\n\t\t\"vbnet\": \"basic\",\n\t\t\"velocity\": \"markup\",\n\t\t\"wiki\": \"markup\",\n\t\t\"xeora\": \"markup\",\n\t\t\"xml-doc\": \"markup\",\n\t\t\"xquery\": \"markup\"\n\t}/*]*/;\n\n\tvar lang_aliases = /*aliases_placeholder[*/{\n\t\t\"html\": \"markup\",\n\t\t\"xml\": \"markup\",\n\t\t\"svg\": \"markup\",\n\t\t\"mathml\": \"markup\",\n\t\t\"ssml\": \"markup\",\n\t\t\"atom\": \"markup\",\n\t\t\"rss\": \"markup\",\n\t\t\"js\": \"javascript\",\n\t\t\"g4\": \"antlr4\",\n\t\t\"ino\": \"arduino\",\n\t\t\"arm-asm\": \"armasm\",\n\t\t\"art\": \"arturo\",\n\t\t\"adoc\": \"asciidoc\",\n\t\t\"avs\": \"avisynth\",\n\t\t\"avdl\": \"avro-idl\",\n\t\t\"gawk\": \"awk\",\n\t\t\"sh\": \"bash\",\n\t\t\"shell\": \"bash\",\n\t\t\"shortcode\": \"bbcode\",\n\t\t\"rbnf\": \"bnf\",\n\t\t\"oscript\": \"bsl\",\n\t\t\"cs\": \"csharp\",\n\t\t\"dotnet\": \"csharp\",\n\t\t\"cfc\": \"cfscript\",\n\t\t\"cilk-c\": \"cilkc\",\n\t\t\"cilk-cpp\": \"cilkcpp\",\n\t\t\"cilk\": \"cilkcpp\",\n\t\t\"coffee\": \"coffeescript\",\n\t\t\"conc\": \"concurnas\",\n\t\t\"jinja2\": \"django\",\n\t\t\"dns-zone\": \"dns-zone-file\",\n\t\t\"dockerfile\": \"docker\",\n\t\t\"gv\": \"dot\",\n\t\t\"eta\": \"ejs\",\n\t\t\"xlsx\": \"excel-formula\",\n\t\t\"xls\": \"excel-formula\",\n\t\t\"gamemakerlanguage\": \"gml\",\n\t\t\"po\": \"gettext\",\n\t\t\"gni\": \"gn\",\n\t\t\"ld\": \"linker-script\",\n\t\t\"go-mod\": \"go-module\",\n\t\t\"hbs\": \"handlebars\",\n\t\t\"mustache\": \"handlebars\",\n\t\t\"hs\": \"haskell\",\n\t\t\"idr\": \"idris\",\n\t\t\"gitignore\": \"ignore\",\n\t\t\"hgignore\": \"ignore\",\n\t\t\"npmignore\": \"ignore\",\n\t\t\"webmanifest\": \"json\",\n\t\t\"kt\": \"kotlin\",\n\t\t\"kts\": \"kotlin\",\n\t\t\"kum\": \"kumir\",\n\t\t\"tex\": \"latex\",\n\t\t\"context\": \"latex\",\n\t\t\"ly\": \"lilypond\",\n\t\t\"emacs\": \"lisp\",\n\t\t\"elisp\": \"lisp\",\n\t\t\"emacs-lisp\": \"lisp\",\n\t\t\"md\": \"markdown\",\n\t\t\"moon\": \"moonscript\",\n\t\t\"n4jsd\": \"n4js\",\n\t\t\"nani\": \"naniscript\",\n\t\t\"objc\": \"objectivec\",\n\t\t\"qasm\": \"openqasm\",\n\t\t\"objectpascal\": \"pascal\",\n\t\t\"px\": \"pcaxis\",\n\t\t\"pcode\": \"peoplecode\",\n\t\t\"plantuml\": \"plant-uml\",\n\t\t\"pq\": \"powerquery\",\n\t\t\"mscript\": \"powerquery\",\n\t\t\"pbfasm\": \"purebasic\",\n\t\t\"purs\": \"purescript\",\n\t\t\"py\": \"python\",\n\t\t\"qs\": \"qsharp\",\n\t\t\"rkt\": \"racket\",\n\t\t\"razor\": \"cshtml\",\n\t\t\"rpy\": \"renpy\",\n\t\t\"res\": \"rescript\",\n\t\t\"robot\": \"robotframework\",\n\t\t\"rb\": \"ruby\",\n\t\t\"sh-session\": \"shell-session\",\n\t\t\"shellsession\": \"shell-session\",\n\t\t\"smlnj\": \"sml\",\n\t\t\"sol\": \"solidity\",\n\t\t\"sln\": \"solution-file\",\n\t\t\"rq\": \"sparql\",\n\t\t\"sclang\": \"supercollider\",\n\t\t\"t4\": \"t4-cs\",\n\t\t\"trickle\": \"tremor\",\n\t\t\"troy\": \"tremor\",\n\t\t\"trig\": \"turtle\",\n\t\t\"ts\": \"typescript\",\n\t\t\"tsconfig\": \"typoscript\",\n\t\t\"uscript\": \"unrealscript\",\n\t\t\"uc\": \"unrealscript\",\n\t\t\"url\": \"uri\",\n\t\t\"vb\": \"visual-basic\",\n\t\t\"vba\": \"visual-basic\",\n\t\t\"webidl\": \"web-idl\",\n\t\t\"mathematica\": \"wolfram\",\n\t\t\"nb\": \"wolfram\",\n\t\t\"wl\": \"wolfram\",\n\t\t\"xeoracube\": \"xeora\",\n\t\t\"yml\": \"yaml\"\n\t}/*]*/;\n\n\t/* eslint-enable */\n\n\t/**\n\t * @typedef LangDataItem\n\t * @property {{ success?: () => void, error?: () => void }[]} callbacks\n\t * @property {boolean} [error]\n\t * @property {boolean} [loading]\n\t */\n\t/** @type {Object<string, LangDataItem>} */\n\tvar lang_data = {};\n\n\tvar ignored_language = 'none';\n\tvar languages_path = 'components/';\n\n\tvar script = Prism.util.currentScript();\n\tif (script) {\n\t\tvar autoloaderFile = /\\bplugins\\/autoloader\\/prism-autoloader\\.(?:min\\.)?js(?:\\?[^\\r\\n/]*)?$/i;\n\t\tvar prismFile = /(^|\\/)[\\w-]+\\.(?:min\\.)?js(?:\\?[^\\r\\n/]*)?$/i;\n\n\t\tvar autoloaderPath = script.getAttribute('data-autoloader-path');\n\t\tif (autoloaderPath != null) {\n\t\t\t// data-autoloader-path is set, so just use it\n\t\t\tlanguages_path = autoloaderPath.trim().replace(/\\/?$/, '/');\n\t\t} else {\n\t\t\tvar src = script.src;\n\t\t\tif (autoloaderFile.test(src)) {\n\t\t\t\t// the script is the original autoloader script in the usual Prism project structure\n\t\t\t\tlanguages_path = src.replace(autoloaderFile, 'components/');\n\t\t\t} else if (prismFile.test(src)) {\n\t\t\t\t// the script is part of a bundle like a custom prism.js from the download page\n\t\t\t\tlanguages_path = src.replace(prismFile, '$1components/');\n\t\t\t}\n\t\t}\n\t}\n\n\tvar config = Prism.plugins.autoloader = {\n\t\tlanguages_path: languages_path,\n\t\tuse_minified: true,\n\t\tloadLanguages: loadLanguages\n\t};\n\n\n\t/**\n\t * Lazily loads an external script.\n\t *\n\t * @param {string} src\n\t * @param {() => void} [success]\n\t * @param {() => void} [error]\n\t */\n\tfunction addScript(src, success, error) {\n\t\tvar s = document.createElement('script');\n\t\ts.src = src;\n\t\ts.async = true;\n\t\ts.onload = function () {\n\t\t\tdocument.body.removeChild(s);\n\t\t\tsuccess && success();\n\t\t};\n\t\ts.onerror = function () {\n\t\t\tdocument.body.removeChild(s);\n\t\t\terror && error();\n\t\t};\n\t\tdocument.body.appendChild(s);\n\t}\n\n\t/**\n\t * Returns all additional dependencies of the given element defined by the `data-dependencies` attribute.\n\t *\n\t * @param {Element} element\n\t * @returns {string[]}\n\t */\n\tfunction getDependencies(element) {\n\t\tvar deps = (element.getAttribute('data-dependencies') || '').trim();\n\t\tif (!deps) {\n\t\t\tvar parent = element.parentElement;\n\t\t\tif (parent && parent.tagName.toLowerCase() === 'pre') {\n\t\t\t\tdeps = (parent.getAttribute('data-dependencies') || '').trim();\n\t\t\t}\n\t\t}\n\t\treturn deps ? deps.split(/\\s*,\\s*/g) : [];\n\t}\n\n\t/**\n\t * Returns whether the given language is currently loaded.\n\t *\n\t * @param {string} lang\n\t * @returns {boolean}\n\t */\n\tfunction isLoaded(lang) {\n\t\tif (lang.indexOf('!') >= 0) {\n\t\t\t// forced reload\n\t\t\treturn false;\n\t\t}\n\n\t\tlang = lang_aliases[lang] || lang; // resolve alias\n\n\t\tif (lang in Prism.languages) {\n\t\t\t// the given language is already loaded\n\t\t\treturn true;\n\t\t}\n\n\t\t// this will catch extensions like CSS extras that don't add a grammar to Prism.languages\n\t\tvar data = lang_data[lang];\n\t\treturn data && !data.error && data.loading === false;\n\t}\n\n\t/**\n\t * Returns the path to a grammar, using the language_path and use_minified config keys.\n\t *\n\t * @param {string} lang\n\t * @returns {string}\n\t */\n\tfunction getLanguagePath(lang) {\n\t\treturn config.languages_path + 'prism-' + lang + (config.use_minified ? '.min' : '') + '.js';\n\t}\n\n\t/**\n\t * Loads all given grammars concurrently.\n\t *\n\t * @param {string[]|string} languages\n\t * @param {(languages: string[]) => void} [success]\n\t * @param {(language: string) => void} [error] This callback will be invoked on the first language to fail.\n\t */\n\tfunction loadLanguages(languages, success, error) {\n\t\tif (typeof languages === 'string') {\n\t\t\tlanguages = [languages];\n\t\t}\n\n\t\tvar total = languages.length;\n\t\tvar completed = 0;\n\t\tvar failed = false;\n\n\t\tif (total === 0) {\n\t\t\tif (success) {\n\t\t\t\tsetTimeout(success, 0);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tfunction successCallback() {\n\t\t\tif (failed) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcompleted++;\n\t\t\tif (completed === total) {\n\t\t\t\tsuccess && success(languages);\n\t\t\t}\n\t\t}\n\n\t\tlanguages.forEach(function (lang) {\n\t\t\tloadLanguage(lang, successCallback, function () {\n\t\t\t\tif (failed) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tfailed = true;\n\t\t\t\terror && error(lang);\n\t\t\t});\n\t\t});\n\t}\n\n\t/**\n\t * Loads a grammar with its dependencies.\n\t *\n\t * @param {string} lang\n\t * @param {() => void} [success]\n\t * @param {() => void} [error]\n\t */\n\tfunction loadLanguage(lang, success, error) {\n\t\tvar force = lang.indexOf('!') >= 0;\n\n\t\tlang = lang.replace('!', '');\n\t\tlang = lang_aliases[lang] || lang;\n\n\t\tfunction load() {\n\t\t\tvar data = lang_data[lang];\n\t\t\tif (!data) {\n\t\t\t\tdata = lang_data[lang] = {\n\t\t\t\t\tcallbacks: []\n\t\t\t\t};\n\t\t\t}\n\t\t\tdata.callbacks.push({\n\t\t\t\tsuccess: success,\n\t\t\t\terror: error\n\t\t\t});\n\n\t\t\tif (!force && isLoaded(lang)) {\n\t\t\t\t// the language is already loaded and we aren't forced to reload\n\t\t\t\tlanguageCallback(lang, 'success');\n\t\t\t} else if (!force && data.error) {\n\t\t\t\t// the language failed to load before and we don't reload\n\t\t\t\tlanguageCallback(lang, 'error');\n\t\t\t} else if (force || !data.loading) {\n\t\t\t\t// the language isn't currently loading and/or we are forced to reload\n\t\t\t\tdata.loading = true;\n\t\t\t\tdata.error = false;\n\n\t\t\t\taddScript(getLanguagePath(lang), function () {\n\t\t\t\t\tdata.loading = false;\n\t\t\t\t\tlanguageCallback(lang, 'success');\n\n\t\t\t\t}, function () {\n\t\t\t\t\tdata.loading = false;\n\t\t\t\t\tdata.error = true;\n\t\t\t\t\tlanguageCallback(lang, 'error');\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tvar dependencies = lang_dependencies[lang];\n\t\tif (dependencies && dependencies.length) {\n\t\t\tloadLanguages(dependencies, load, error);\n\t\t} else {\n\t\t\tload();\n\t\t}\n\t}\n\n\t/**\n\t * Runs all callbacks of the given type for the given language.\n\t *\n\t * @param {string} lang\n\t * @param {\"success\" | \"error\"} type\n\t */\n\tfunction languageCallback(lang, type) {\n\t\tif (lang_data[lang]) {\n\t\t\tvar callbacks = lang_data[lang].callbacks;\n\t\t\tfor (var i = 0, l = callbacks.length; i < l; i++) {\n\t\t\t\tvar callback = callbacks[i][type];\n\t\t\t\tif (callback) {\n\t\t\t\t\tsetTimeout(callback, 0);\n\t\t\t\t}\n\t\t\t}\n\t\t\tcallbacks.length = 0;\n\t\t}\n\t}\n\n\tPrism.hooks.add('complete', function (env) {\n\t\tvar element = env.element;\n\t\tvar language = env.language;\n\t\tif (!element || !language || language === ignored_language) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar deps = getDependencies(element);\n\t\tif (/^diff-./i.test(language)) {\n\t\t\t// the \"diff-xxxx\" format is used by the Diff Highlight plugin\n\t\t\tdeps.push('diff');\n\t\t\tdeps.push(language.substr('diff-'.length));\n\t\t} else {\n\t\t\tdeps.push(language);\n\t\t}\n\n\t\tif (!deps.every(isLoaded)) {\n\t\t\t// the language or some dependencies aren't loaded\n\t\t\tloadLanguages(deps, function () {\n\t\t\t\tPrism.highlightElement(element);\n\t\t\t});\n\t\t}\n\t});\n\n}());\n/components/prism-go.min.js\u0003Prism.languages.go=Prism.languages.extend(\"clike\",{string:{pattern:/(^|[^\\\\])\"(?:\\\\.|[^\"\\\\\\r\\n])*\"|`[^`]*`/,lookbehind:!0,greedy:!0},keyword:/\\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\\b/,boolean:/\\b(?:_|false|iota|nil|true)\\b/,number:[/\\b0(?:b[01_]+|o[0-7_]+)i?\\b/i,/\\b0x(?:[a-f\\d_]+(?:\\.[a-f\\d_]*)?|\\.[a-f\\d_]+)(?:p[+-]?\\d+(?:_\\d+)*)?i?(?!\\w)/i,/(?:\\b\\d[\\d_]*(?:\\.[\\d_]*)?|\\B\\.\\d[\\d_]*)(?:e[+-]?[\\d_]+)?i?(?!\\w)/i],operator:/[*\\/%^!=]=?|\\+[=+]?|-[=-]?|\\|[=|]?|&(?:=|&|\\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\\.\\.\\./,builtin:/\\b(?:append|bool|byte|cap|close|complex|complex(?:64|128)|copy|delete|error|float(?:32|64)|u?int(?:8|16|32|64)?|imag|len|make|new|panic|print(?:ln)?|real|recover|rune|string|uintptr)\\b/}),Prism.languages.insertBefore(\"go\",\"string\",{char:{pattern:/'(?:\\\\.|[^'\\\\\\r\\n]){0,10}'/,greedy:!0}}),delete Prism.languages.go[\"class-name\"];/components/prism-cilkc.jsPrism.languages.cilkc = Prism.languages.insertBefore('c', 'function', {\n\t'parallel-keyword': {\n\t\tpattern: /\\bcilk_(?:for|reducer|s(?:cope|pawn|ync))\\b/,\n\t\talias: 'keyword'\n\t}\n});\n\nPrism.languages['cilk-c'] = Prism.languages['cilkc'];\n/components/prism-xojo.js\u0004Prism.languages.xojo = {\n\t'comment': {\n\t\tpattern: /(?:'|\\/\\/|Rem\\b).+/i,\n\t\tgreedy: true\n\t},\n\t'string': {\n\t\tpattern: /\"(?:\"\"|[^\"])*\"/,\n\t\tgreedy: true\n\t},\n\t'number': [\n\t\t/(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:E[+-]?\\d+)?/i,\n\t\t/&[bchou][a-z\\d]+/i\n\t],\n\t'directive': {\n\t\tpattern: /#(?:Else|ElseIf|Endif|If|Pragma)\\b/i,\n\t\talias: 'property'\n\t},\n\t'keyword': /\\b(?:AddHandler|App|Array|As(?:signs)?|Auto|Boolean|Break|By(?:Ref|Val)|Byte|Call|Case|Catch|CFStringRef|CGFloat|Class|Color|Const|Continue|CString|Currency|CurrentMethodName|Declare|Delegate|Dim|Do(?:uble|wnTo)?|Each|Else(?:If)?|End|Enumeration|Event|Exception|Exit|Extends|False|Finally|For|Function|Get|GetTypeInfo|Global|GOTO|If|Implements|In|Inherits|Int(?:8|16|32|64|eger|erface)?|Lib|Loop|Me|Module|Next|Nil|Object|Optional|OSType|ParamArray|Private|Property|Protected|PString|Ptr|Raise(?:Event)?|ReDim|RemoveHandler|Return|Select(?:or)?|Self|Set|Shared|Short|Single|Soft|Static|Step|String|Sub|Super|Text|Then|To|True|Try|Ubound|UInt(?:8|16|32|64|eger)?|Until|Using|Var(?:iant)?|Wend|While|WindowPtr|WString)\\b/i,\n\t'operator': /<[=>]?|>=?|[+\\-*\\/\\\\^=]|\\b(?:AddressOf|And|Ctype|IsA?|Mod|New|Not|Or|WeakAddressOf|Xor)\\b/i,\n\t'punctuation': /[.,;:()]/\n};\n?/plugins/filter-highlight-all/prism-filter-highlight-all.min.js\u0004/!function(){if(\"undefined\"!=typeof Prism&&\"undefined\"!=typeof document){Element.prototype.matches||(Element.prototype.matches=Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector);var e,t=Prism.util.currentScript(),n=[],r=Prism.plugins.filterHighlightAll={add:function(e){n.push((function(t){return e({element:t,language:Prism.util.getLanguage(t)})}))},addSelector:function(e){n.push((function(t){return t.matches(e)}))},reject:{add:function(e){n.push((function(t){return!e({element:t,language:Prism.util.getLanguage(t)})}))},addSelector:function(e){n.push((function(t){return!t.matches(e)}))}},filterKnown:!!t&&t.hasAttribute(\"data-filter-known\")};r.add((function(e){return!r.filterKnown||\"object\"==typeof Prism.languages[e.language]})),t&&((e=t.getAttribute(\"data-filter-selector\"))&&r.addSelector(e),(e=t.getAttribute(\"data-reject-selector\"))&&r.reject.addSelector(e)),Prism.hooks.add(\"before-all-elements-highlight\",(function(e){e.elements=e.elements.filter(i)}))}function i(e){for(var t=0,r=n.length;t<r;t++)if(!n[t](e))return!1;return!0}}();/components/prism-nim.min.js\u0004uPrism.languages.nim={comment:{pattern:/#.*/,greedy:!0},string:{pattern:/(?:\\b(?!\\d)(?:\\w|\\\\x[89a-fA-F][0-9a-fA-F])+)?(?:\"\"\"[\\s\\S]*?\"\"\"(?!\")|\"(?:\\\\[\\s\\S]|\"\"|[^\"\\\\])*\")/,greedy:!0},char:{pattern:/'(?:\\\\(?:\\d+|x[\\da-fA-F]{0,2}|.)|[^'])'/,greedy:!0},function:{pattern:/(?:(?!\\d)(?:\\w|\\\\x[89a-fA-F][0-9a-fA-F])+|`[^`\\r\\n]+`)\\*?(?:\\[[^\\]]+\\])?(?=\\s*\\()/,greedy:!0,inside:{operator:/\\*$/}},identifier:{pattern:/`[^`\\r\\n]+`/,greedy:!0,inside:{punctuation:/`/}},number:/\\b(?:0[xXoObB][\\da-fA-F_]+|\\d[\\d_]*(?:(?!\\.\\.)\\.[\\d_]*)?(?:[eE][+-]?\\d[\\d_]*)?)(?:'?[iuf]\\d*)?/,keyword:/\\b(?:addr|as|asm|atomic|bind|block|break|case|cast|concept|const|continue|converter|defer|discard|distinct|do|elif|else|end|enum|except|export|finally|for|from|func|generic|if|import|include|interface|iterator|let|macro|method|mixin|nil|object|out|proc|ptr|raise|ref|return|static|template|try|tuple|type|using|var|when|while|with|without|yield)\\b/,operator:{pattern:/(^|[({\\[](?=\\.\\.)|(?![({\\[]\\.).)(?:(?:[=+\\-*\\/<>@$~&%|!?^:\\\\]|\\.\\.|\\.(?![)}\\]]))+|\\b(?:and|div|in|is|isnot|mod|not|notin|of|or|shl|shr|xor)\\b)/m,lookbehind:!0},punctuation:/[({\\[]\\.|\\.[)}\\]]|[`(){}\\[\\],:]/};0/plugins/line-highlight/prism-line-highlight.css\u0006\u000fpre[data-line] {\n\tposition: relative;\n\tpadding: 1em 0 1em 3em;\n}\n\n.line-highlight {\n\tposition: absolute;\n\tleft: 0;\n\tright: 0;\n\tpadding: inherit 0;\n\tmargin-top: 1em; /* Same as .prism’s padding-top */\n\n\tbackground: hsla(24, 20%, 50%,.08);\n\tbackground: linear-gradient(to right, hsla(24, 20%, 50%,.1) 70%, hsla(24, 20%, 50%,0));\n\n\tpointer-events: none;\n\n\tline-height: inherit;\n\twhite-space: pre;\n}\n\n@media print {\n\t.line-highlight {\n\t\t/*\n\t\t * This will prevent browsers from replacing the background color with white.\n\t\t * It's necessary because the element is layered on top of the displayed code.\n\t\t */\n\t\t-webkit-print-color-adjust: exact;\n\t\tcolor-adjust: exact;\n\t}\n}\n\n\t.line-highlight:before,\n\t.line-highlight[data-end]:after {\n\t\tcontent: attr(data-start);\n\t\tposition: absolute;\n\t\ttop: .4em;\n\t\tleft: .6em;\n\t\tmin-width: 1em;\n\t\tpadding: 0 .5em;\n\t\tbackground-color: hsla(24, 20%, 50%,.4);\n\t\tcolor: hsl(24, 20%, 95%);\n\t\tfont: bold 65%/1.5 sans-serif;\n\t\ttext-align: center;\n\t\tvertical-align: .3em;\n\t\tborder-radius: 999px;\n\t\ttext-shadow: none;\n\t\tbox-shadow: 0 1px white;\n\t}\n\n\t.line-highlight[data-end]:after {\n\t\tcontent: attr(data-end);\n\t\ttop: auto;\n\t\tbottom: .4em;\n\t}\n\n.line-numbers .line-highlight:before,\n.line-numbers .line-highlight:after {\n\tcontent: none;\n}\n\npre[id].linkable-line-numbers span.line-numbers-rows {\n\tpointer-events: all;\n}\npre[id].linkable-line-numbers span.line-numbers-rows > span:before {\n\tcursor: pointer;\n}\npre[id].linkable-line-numbers span.line-numbers-rows > span:hover:before {\n\tbackground-color: rgba(128, 128, 128, .2);\n}\n/components/prism-php-extras.js\u0001Prism.languages.insertBefore('php', 'variable', {\n\t'this': {\n\t\tpattern: /\\$this\\b/,\n\t\talias: 'keyword'\n\t},\n\t'global': /\\$(?:GLOBALS|HTTP_RAW_POST_DATA|_(?:COOKIE|ENV|FILES|GET|POST|REQUEST|SERVER|SESSION)|argc|argv|http_response_header|php_errormsg)\\b/,\n\t'scope': {\n\t\tpattern: /\\b[\\w\\\\]+::/,\n\t\tinside: {\n\t\t\t'keyword': /\\b(?:parent|self|static)\\b/,\n\t\t\t'punctuation': /::|\\\\/\n\t\t}\n\t}\n});\n/components/prism-plant-uml.js\f.(function (Prism) {\n\tvar variable = /\\$\\w+|%[a-z]+%/;\n\n\tvar arrowAttr = /\\[[^[\\]]*\\]/.source;\n\tvar arrowDirection = /(?:[drlu]|do|down|le|left|ri|right|up)/.source;\n\tvar arrowBody = '(?:-+' + arrowDirection + '-+|\\\\.+' + arrowDirection + '\\\\.+|-+(?:' + arrowAttr + '-*)?|' + arrowAttr + '-+|\\\\.+(?:' + arrowAttr + '\\\\.*)?|' + arrowAttr + '\\\\.+)';\n\tvar arrowLeft = /(?:<{1,2}|\\/{1,2}|\\\\{1,2}|<\\||[#*^+}xo])/.source;\n\tvar arrowRight = /(?:>{1,2}|\\/{1,2}|\\\\{1,2}|\\|>|[#*^+{xo])/.source;\n\tvar arrowPrefix = /[[?]?[ox]?/.source;\n\tvar arrowSuffix = /[ox]?[\\]?]?/.source;\n\tvar arrow =\n\t\tarrowPrefix +\n\t\t'(?:' +\n\t\tarrowBody + arrowRight +\n\t\t'|' +\n\t\tarrowLeft + arrowBody + '(?:' + arrowRight + ')?' +\n\t\t')' +\n\t\tarrowSuffix;\n\n\tPrism.languages['plant-uml'] = {\n\t\t'comment': {\n\t\t\tpattern: /(^[ \\t]*)(?:'.*|\\/'[\\s\\S]*?'\\/)/m,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true\n\t\t},\n\t\t'preprocessor': {\n\t\t\tpattern: /(^[ \\t]*)!.*/m,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\talias: 'property',\n\t\t\tinside: {\n\t\t\t\t'variable': variable\n\t\t\t}\n\t\t},\n\t\t'delimiter': {\n\t\t\tpattern: /(^[ \\t]*)@(?:end|start)uml\\b/m,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\talias: 'punctuation'\n\t\t},\n\n\t\t'arrow': {\n\t\t\tpattern: RegExp(/(^|[^-.<>?|\\\\[\\]ox])/.source + arrow + /(?![-.<>?|\\\\\\]ox])/.source),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\talias: 'operator',\n\t\t\tinside: {\n\t\t\t\t'expression': {\n\t\t\t\t\tpattern: /(\\[)[^[\\]]+(?=\\])/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tinside: null // see below\n\t\t\t\t},\n\t\t\t\t'punctuation': /\\[(?=$|\\])|^\\]/\n\t\t\t}\n\t\t},\n\n\t\t'string': {\n\t\t\tpattern: /\"[^\"]*\"/,\n\t\t\tgreedy: true\n\t\t},\n\t\t'text': {\n\t\t\tpattern: /(\\[[ \\t]*[\\r\\n]+(?![\\r\\n]))[^\\]]*(?=\\])/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\talias: 'string'\n\t\t},\n\n\t\t'keyword': [\n\t\t\t{\n\t\t\t\tpattern: /^([ \\t]*)(?:abstract\\s+class|end\\s+(?:box|fork|group|merge|note|ref|split|title)|(?:fork|split)(?:\\s+again)?|activate|actor|agent|alt|annotation|artifact|autoactivate|autonumber|backward|binary|boundary|box|break|caption|card|case|circle|class|clock|cloud|collections|component|concise|control|create|critical|database|deactivate|destroy|detach|diamond|else|elseif|end|end[hr]note|endif|endswitch|endwhile|entity|enum|file|folder|footer|frame|group|[hr]?note|header|hexagon|hide|if|interface|label|legend|loop|map|namespace|network|newpage|node|nwdiag|object|opt|package|page|par|participant|person|queue|rectangle|ref|remove|repeat|restore|return|robust|scale|set|show|skinparam|stack|start|state|stop|storage|switch|title|together|usecase|usecase\\/|while)(?=\\s|$)/m,\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true\n\t\t\t},\n\t\t\t/\\b(?:elseif|equals|not|while)(?=\\s*\\()/,\n\t\t\t/\\b(?:as|is|then)\\b/\n\t\t],\n\n\t\t'divider': {\n\t\t\tpattern: /^==.+==$/m,\n\t\t\tgreedy: true,\n\t\t\talias: 'important'\n\t\t},\n\n\t\t'time': {\n\t\t\tpattern: /@(?:\\d+(?:[:/]\\d+){2}|[+-]?\\d+|:[a-z]\\w*(?:[+-]\\d+)?)\\b/i,\n\t\t\tgreedy: true,\n\t\t\talias: 'number'\n\t\t},\n\n\t\t'color': {\n\t\t\tpattern: /#(?:[a-z_]+|[a-fA-F0-9]+)\\b/,\n\t\t\talias: 'symbol'\n\t\t},\n\t\t'variable': variable,\n\n\t\t'punctuation': /[:,;()[\\]{}]|\\.{3}/\n\t};\n\n\tPrism.languages['plant-uml'].arrow.inside.expression.inside = Prism.languages['plant-uml'];\n\n\tPrism.languages['plantuml'] = Prism.languages['plant-uml'];\n\n}(Prism));\n/components/prism-cpp.min.js\n$!function(e){var t=/\\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\\b/,n=\"\\\\b(?!<keyword>)\\\\w+(?:\\\\s*\\\\.\\\\s*\\\\w+)*\\\\b\".replace(/<keyword>/g,(function(){return t.source}));e.languages.cpp=e.languages.extend(\"c\",{\"class-name\":[{pattern:RegExp(\"(\\\\b(?:class|concept|enum|struct|typename)\\\\s+)(?!<keyword>)\\\\w+\".replace(/<keyword>/g,(function(){return t.source}))),lookbehind:!0},/\\b[A-Z]\\w*(?=\\s*::\\s*\\w+\\s*\\()/,/\\b[A-Z_]\\w*(?=\\s*::\\s*~\\w+\\s*\\()/i,/\\b\\w+(?=\\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\\s*::\\s*\\w+\\s*\\()/],keyword:t,number:{pattern:/(?:\\b0b[01']+|\\b0x(?:[\\da-f']+(?:\\.[\\da-f']*)?|\\.[\\da-f']+)(?:p[+-]?[\\d']+)?|(?:\\b[\\d']+(?:\\.[\\d']*)?|\\B\\.[\\d']+)(?:e[+-]?[\\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\\+\\+|&&|\\|\\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\\b/,boolean:/\\b(?:false|true)\\b/}),e.languages.insertBefore(\"cpp\",\"string\",{module:{pattern:RegExp('(\\\\b(?:import|module)\\\\s+)(?:\"(?:\\\\\\\\(?:\\r\\n|[^])|[^\"\\\\\\\\\\r\\n])*\"|<[^<>\\r\\n]*>|'+\"<mod-name>(?:\\\\s*:\\\\s*<mod-name>)?|:\\\\s*<mod-name>\".replace(/<mod-name>/g,(function(){return n}))+\")\"),lookbehind:!0,greedy:!0,inside:{string:/^[<\"][\\s\\S]+/,operator:/:/,punctuation:/\\./}},\"raw-string\":{pattern:/R\"([^()\\\\ ]{0,16})\\([\\s\\S]*?\\)\\1\"/,alias:\"string\",greedy:!0}}),e.languages.insertBefore(\"cpp\",\"keyword\",{\"generic-function\":{pattern:/\\b(?!operator\\b)[a-z_]\\w*\\s*<(?:[^<>]|<[^<>]*>)*>(?=\\s*\\()/i,inside:{function:/^\\w+/,generic:{pattern:/<[\\s\\S]+/,alias:\"class-name\",inside:e.languages.cpp}}}}),e.languages.insertBefore(\"cpp\",\"operator\",{\"double-colon\":{pattern:/::/,alias:\"punctuation\"}}),e.languages.insertBefore(\"cpp\",\"class-name\",{\"base-clause\":{pattern:/(\\b(?:class|struct)\\s+\\w+\\s*:\\s*)[^;{}\"'\\s]+(?:\\s+[^;{}\"'\\s]+)*(?=\\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend(\"cpp\",{})}}),e.languages.insertBefore(\"inside\",\"double-colon\",{\"class-name\":/\\b[a-z_]\\w*\\b(?!\\s*::)/i},e.languages.cpp[\"base-clause\"])}(Prism);/components/prism-csv.min.jsMPrism.languages.csv={value:/[^\\r\\n,\"]+|\"(?:[^\"]|\"\")*\"(?!\")/,punctuation:/,/};0/plugins/inline-color/prism-inline-color.min.css\u0002\u000fspan.inline-color-wrapper{background:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyIDIiPjxwYXRoIGZpbGw9ImdyYXkiIGQ9Ik0wIDBoMnYySDB6Ii8+PHBhdGggZmlsbD0id2hpdGUiIGQ9Ik0wIDBoMXYxSDB6TTEgMWgxdjFIMXoiLz48L3N2Zz4=);background-position:center;background-size:110%;display:inline-block;height:1.333ch;width:1.333ch;margin:0 .333ch;box-sizing:border-box;border:1px solid #fff;outline:1px solid rgba(0,0,0,.5);overflow:hidden}span.inline-color{display:block;height:120%;width:120%}/components/prism-keyman.js\u0005 Prism.languages.keyman = {\n\t'comment': {\n\t\tpattern: /\\bc .*/i,\n\t\tgreedy: true\n\t},\n\t'string': {\n\t\tpattern: /\"[^\"\\r\\n]*\"|'[^'\\r\\n]*'/,\n\t\tgreedy: true\n\t},\n\t'virtual-key': {\n\t\tpattern: /\\[\\s*(?:(?:ALT|CAPS|CTRL|LALT|LCTRL|NCAPS|RALT|RCTRL|SHIFT)\\s+)*(?:[TKU]_[\\w?]+|[A-E]\\d\\d?|\"[^\"\\r\\n]*\"|'[^'\\r\\n]*')\\s*\\]/i,\n\t\tgreedy: true,\n\t\talias: 'function' // alias for styles\n\t},\n\n\t// https://help.keyman.com/developer/language/guide/headers\n\t'header-keyword': {\n\t\tpattern: /&\\w+/,\n\t\talias: 'bold' // alias for styles\n\t},\n\t'header-statement': {\n\t\tpattern: /\\b(?:bitmap|bitmaps|caps always off|caps on only|copyright|hotkey|language|layout|message|name|shift frees caps|version)\\b/i,\n\t\talias: 'bold' // alias for styles\n\t},\n\n\t'rule-keyword': {\n\t\tpattern: /\\b(?:any|baselayout|beep|call|context|deadkey|dk|if|index|layer|notany|nul|outs|platform|reset|return|save|set|store|use)\\b/i,\n\t\talias: 'keyword'\n\t},\n\t'structural-keyword': {\n\t\tpattern: /\\b(?:ansi|begin|group|match|newcontext|nomatch|postkeystroke|readonly|unicode|using keys)\\b/i,\n\t\talias: 'keyword'\n\t},\n\n\t'compile-target': {\n\t\tpattern: /\\$(?:keyman|keymanonly|keymanweb|kmfl|weaver):/i,\n\t\talias: 'property'\n\t},\n\n\t// U+####, x###, d### characters and numbers\n\t'number': /\\b(?:U\\+[\\dA-F]+|d\\d+|x[\\da-f]+|\\d+)\\b/i,\n\t'operator': /[+>\\\\$]|\\.\\./,\n\t'punctuation': /[()=,]/\n};\n/components/prism-abap.min.js\u001ePrism.languages.abap={comment:/^\\*.*/m,string:/(`|')(?:\\\\.|(?!\\1)[^\\\\\\r\\n])*\\1/,\"string-template\":{pattern:/([|}])(?:\\\\.|[^\\\\|{\\r\\n])*(?=[|{])/,lookbehind:!0,alias:\"string\"},\"eol-comment\":{pattern:/(^|\\s)\".*/m,lookbehind:!0,alias:\"comment\"},keyword:{pattern:/(\\s|\\.|^)(?:\\*-INPUT|\\?TO|ABAP-SOURCE|ABBREVIATED|ABS|ABSTRACT|ACCEPT|ACCEPTING|ACCESSPOLICY|ACCORDING|ACOS|ACTIVATION|ACTUAL|ADD|ADD-CORRESPONDING|ADJACENT|AFTER|ALIAS|ALIASES|ALIGN|ALL|ALLOCATE|ALPHA|ANALYSIS|ANALYZER|AND|ANY|APPEND|APPENDAGE|APPENDING|APPLICATION|ARCHIVE|AREA|ARITHMETIC|AS|ASCENDING|ASIN|ASPECT|ASSERT|ASSIGN|ASSIGNED|ASSIGNING|ASSOCIATION|ASYNCHRONOUS|AT|ATAN|ATTRIBUTES|AUTHORITY|AUTHORITY-CHECK|AVG|BACK|BACKGROUND|BACKUP|BACKWARD|BADI|BASE|BEFORE|BEGIN|BETWEEN|BIG|BINARY|BINDING|BIT|BIT-AND|BIT-NOT|BIT-OR|BIT-XOR|BLACK|BLANK|BLANKS|BLOB|BLOCK|BLOCKS|BLUE|BOUND|BOUNDARIES|BOUNDS|BOXED|BREAK-POINT|BT|BUFFER|BY|BYPASSING|BYTE|BYTE-CA|BYTE-CN|BYTE-CO|BYTE-CS|BYTE-NA|BYTE-NS|BYTE-ORDER|C|CA|CALL|CALLING|CASE|CAST|CASTING|CATCH|CEIL|CENTER|CENTERED|CHAIN|CHAIN-INPUT|CHAIN-REQUEST|CHANGE|CHANGING|CHANNELS|CHAR-TO-HEX|CHARACTER|CHARLEN|CHECK|CHECKBOX|CIRCULAR|CI_|CLASS|CLASS-CODING|CLASS-DATA|CLASS-EVENTS|CLASS-METHODS|CLASS-POOL|CLEANUP|CLEAR|CLIENT|CLOB|CLOCK|CLOSE|CN|CNT|CO|COALESCE|CODE|CODING|COLLECT|COLOR|COLUMN|COLUMNS|COL_BACKGROUND|COL_GROUP|COL_HEADING|COL_KEY|COL_NEGATIVE|COL_NORMAL|COL_POSITIVE|COL_TOTAL|COMMENT|COMMENTS|COMMIT|COMMON|COMMUNICATION|COMPARING|COMPONENT|COMPONENTS|COMPRESSION|COMPUTE|CONCAT|CONCATENATE|COND|CONDENSE|CONDITION|CONNECT|CONNECTION|CONSTANTS|CONTEXT|CONTEXTS|CONTINUE|CONTROL|CONTROLS|CONV|CONVERSION|CONVERT|COPIES|COPY|CORRESPONDING|COS|COSH|COUNT|COUNTRY|COVER|CP|CPI|CREATE|CREATING|CRITICAL|CS|CURRENCY|CURRENCY_CONVERSION|CURRENT|CURSOR|CURSOR-SELECTION|CUSTOMER|CUSTOMER-FUNCTION|DANGEROUS|DATA|DATABASE|DATAINFO|DATASET|DATE|DAYLIGHT|DBMAXLEN|DD\\/MM\\/YY|DD\\/MM\\/YYYY|DDMMYY|DEALLOCATE|DECIMALS|DECIMAL_SHIFT|DECLARATIONS|DEEP|DEFAULT|DEFERRED|DEFINE|DEFINING|DEFINITION|DELETE|DELETING|DEMAND|DEPARTMENT|DESCENDING|DESCRIBE|DESTINATION|DETAIL|DIALOG|DIRECTORY|DISCONNECT|DISPLAY|DISPLAY-MODE|DISTANCE|DISTINCT|DIV|DIVIDE|DIVIDE-CORRESPONDING|DIVISION|DO|DUMMY|DUPLICATE|DUPLICATES|DURATION|DURING|DYNAMIC|DYNPRO|E|EACH|EDIT|EDITOR-CALL|ELSE|ELSEIF|EMPTY|ENABLED|ENABLING|ENCODING|END|END-ENHANCEMENT-SECTION|END-LINES|END-OF-DEFINITION|END-OF-FILE|END-OF-PAGE|END-OF-SELECTION|ENDAT|ENDCASE|ENDCATCH|ENDCHAIN|ENDCLASS|ENDDO|ENDENHANCEMENT|ENDEXEC|ENDFOR|ENDFORM|ENDFUNCTION|ENDIAN|ENDIF|ENDING|ENDINTERFACE|ENDLOOP|ENDMETHOD|ENDMODULE|ENDON|ENDPROVIDE|ENDSELECT|ENDTRY|ENDWHILE|ENGINEERING|ENHANCEMENT|ENHANCEMENT-POINT|ENHANCEMENT-SECTION|ENHANCEMENTS|ENTRIES|ENTRY|ENVIRONMENT|EQ|EQUAL|EQUIV|ERRORMESSAGE|ERRORS|ESCAPE|ESCAPING|EVENT|EVENTS|EXACT|EXCEPT|EXCEPTION|EXCEPTION-TABLE|EXCEPTIONS|EXCLUDE|EXCLUDING|EXEC|EXECUTE|EXISTS|EXIT|EXIT-COMMAND|EXP|EXPAND|EXPANDING|EXPIRATION|EXPLICIT|EXPONENT|EXPORT|EXPORTING|EXTEND|EXTENDED|EXTENSION|EXTRACT|FAIL|FETCH|FIELD|FIELD-GROUPS|FIELD-SYMBOL|FIELD-SYMBOLS|FIELDS|FILE|FILTER|FILTER-TABLE|FILTERS|FINAL|FIND|FIRST|FIRST-LINE|FIXED-POINT|FKEQ|FKGE|FLOOR|FLUSH|FONT|FOR|FORM|FORMAT|FORWARD|FOUND|FRAC|FRAME|FRAMES|FREE|FRIENDS|FROM|FUNCTION|FUNCTION-POOL|FUNCTIONALITY|FURTHER|GAPS|GE|GENERATE|GET|GIVING|GKEQ|GKGE|GLOBAL|GRANT|GREATER|GREEN|GROUP|GROUPS|GT|HANDLE|HANDLER|HARMLESS|HASHED|HAVING|HDB|HEAD-LINES|HEADER|HEADERS|HEADING|HELP-ID|HELP-REQUEST|HIDE|HIGH|HINT|HOLD|HOTSPOT|I|ICON|ID|IDENTIFICATION|IDENTIFIER|IDS|IF|IGNORE|IGNORING|IMMEDIATELY|IMPLEMENTATION|IMPLEMENTATIONS|IMPLEMENTED|IMPLICIT|IMPORT|IMPORTING|IN|INACTIVE|INCL|INCLUDE|INCLUDES|INCLUDING|INCREMENT|INDEX|INDEX-LINE|INFOTYPES|INHERITING|INIT|INITIAL|INITIALIZATION|INNER|INOUT|INPUT|INSERT|INSTANCES|INTENSIFIED|INTERFACE|INTERFACE-POOL|INTERFACES|INTERNAL|INTERVALS|INTO|INVERSE|INVERTED-DATE|IS|ISO|ITERATOR|ITNO|JOB|JOIN|KEEP|KEEPING|KERNEL|KEY|KEYS|KEYWORDS|KIND|LANGUAGE|LAST|LATE|LAYOUT|LE|LEADING|LEAVE|LEFT|LEFT-JUSTIFIED|LEFTPLUS|LEFTSPACE|LEGACY|LENGTH|LESS|LET|LEVEL|LEVELS|LIKE|LINE|LINE-COUNT|LINE-SELECTION|LINE-SIZE|LINEFEED|LINES|LIST|LIST-PROCESSING|LISTBOX|LITTLE|LLANG|LOAD|LOAD-OF-PROGRAM|LOB|LOCAL|LOCALE|LOCATOR|LOG|LOG-POINT|LOG10|LOGFILE|LOGICAL|LONG|LOOP|LOW|LOWER|LPAD|LPI|LT|M|MAIL|MAIN|MAJOR-ID|MAPPING|MARGIN|MARK|MASK|MATCH|MATCHCODE|MAX|MAXIMUM|MEDIUM|MEMBERS|MEMORY|MESH|MESSAGE|MESSAGE-ID|MESSAGES|MESSAGING|METHOD|METHODS|MIN|MINIMUM|MINOR-ID|MM\\/DD\\/YY|MM\\/DD\\/YYYY|MMDDYY|MOD|MODE|MODIF|MODIFIER|MODIFY|MODULE|MOVE|MOVE-CORRESPONDING|MULTIPLY|MULTIPLY-CORRESPONDING|NA|NAME|NAMETAB|NATIVE|NB|NE|NESTED|NESTING|NEW|NEW-LINE|NEW-PAGE|NEW-SECTION|NEXT|NO|NO-DISPLAY|NO-EXTENSION|NO-GAP|NO-GAPS|NO-GROUPING|NO-HEADING|NO-SCROLLING|NO-SIGN|NO-TITLE|NO-TOPOFPAGE|NO-ZERO|NODE|NODES|NON-UNICODE|NON-UNIQUE|NOT|NP|NS|NULL|NUMBER|NUMOFCHAR|O|OBJECT|OBJECTS|OBLIGATORY|OCCURRENCE|OCCURRENCES|OCCURS|OF|OFF|OFFSET|OLE|ON|ONLY|OPEN|OPTION|OPTIONAL|OPTIONS|OR|ORDER|OTHER|OTHERS|OUT|OUTER|OUTPUT|OUTPUT-LENGTH|OVERFLOW|OVERLAY|PACK|PACKAGE|PAD|PADDING|PAGE|PAGES|PARAMETER|PARAMETER-TABLE|PARAMETERS|PART|PARTIALLY|PATTERN|PERCENTAGE|PERFORM|PERFORMING|PERSON|PF|PF-STATUS|PINK|PLACES|POOL|POSITION|POS_HIGH|POS_LOW|PRAGMAS|PRECOMPILED|PREFERRED|PRESERVING|PRIMARY|PRINT|PRINT-CONTROL|PRIORITY|PRIVATE|PROCEDURE|PROCESS|PROGRAM|PROPERTY|PROTECTED|PROVIDE|PUBLIC|PUSHBUTTON|PUT|QUEUE-ONLY|QUICKINFO|RADIOBUTTON|RAISE|RAISING|RANGE|RANGES|RAW|READ|READ-ONLY|READER|RECEIVE|RECEIVED|RECEIVER|RECEIVING|RED|REDEFINITION|REDUCE|REDUCED|REF|REFERENCE|REFRESH|REGEX|REJECT|REMOTE|RENAMING|REPLACE|REPLACEMENT|REPLACING|REPORT|REQUEST|REQUESTED|RESERVE|RESET|RESOLUTION|RESPECTING|RESPONSIBLE|RESULT|RESULTS|RESUMABLE|RESUME|RETRY|RETURN|RETURNCODE|RETURNING|RIGHT|RIGHT-JUSTIFIED|RIGHTPLUS|RIGHTSPACE|RISK|RMC_COMMUNICATION_FAILURE|RMC_INVALID_STATUS|RMC_SYSTEM_FAILURE|ROLE|ROLLBACK|ROUND|ROWS|RTTI|RUN|SAP|SAP-SPOOL|SAVING|SCALE_PRESERVING|SCALE_PRESERVING_SCIENTIFIC|SCAN|SCIENTIFIC|SCIENTIFIC_WITH_LEADING_ZERO|SCREEN|SCROLL|SCROLL-BOUNDARY|SCROLLING|SEARCH|SECONDARY|SECONDS|SECTION|SELECT|SELECT-OPTIONS|SELECTION|SELECTION-SCREEN|SELECTION-SET|SELECTION-SETS|SELECTION-TABLE|SELECTIONS|SELECTOR|SEND|SEPARATE|SEPARATED|SET|SHARED|SHIFT|SHORT|SHORTDUMP-ID|SIGN|SIGN_AS_POSTFIX|SIMPLE|SIN|SINGLE|SINH|SIZE|SKIP|SKIPPING|SMART|SOME|SORT|SORTABLE|SORTED|SOURCE|SPACE|SPECIFIED|SPLIT|SPOOL|SPOTS|SQL|SQLSCRIPT|SQRT|STABLE|STAMP|STANDARD|START-OF-SELECTION|STARTING|STATE|STATEMENT|STATEMENTS|STATIC|STATICS|STATUSINFO|STEP-LOOP|STOP|STRLEN|STRUCTURE|STRUCTURES|STYLE|SUBKEY|SUBMATCHES|SUBMIT|SUBROUTINE|SUBSCREEN|SUBSTRING|SUBTRACT|SUBTRACT-CORRESPONDING|SUFFIX|SUM|SUMMARY|SUMMING|SUPPLIED|SUPPLY|SUPPRESS|SWITCH|SWITCHSTATES|SYMBOL|SYNCPOINTS|SYNTAX|SYNTAX-CHECK|SYNTAX-TRACE|SYSTEM-CALL|SYSTEM-EXCEPTIONS|SYSTEM-EXIT|TAB|TABBED|TABLE|TABLES|TABLEVIEW|TABSTRIP|TAN|TANH|TARGET|TASK|TASKS|TEST|TESTING|TEXT|TEXTPOOL|THEN|THROW|TIME|TIMES|TIMESTAMP|TIMEZONE|TITLE|TITLE-LINES|TITLEBAR|TO|TOKENIZATION|TOKENS|TOP-LINES|TOP-OF-PAGE|TRACE-FILE|TRACE-TABLE|TRAILING|TRANSACTION|TRANSFER|TRANSFORMATION|TRANSLATE|TRANSPORTING|TRMAC|TRUNC|TRUNCATE|TRUNCATION|TRY|TYPE|TYPE-POOL|TYPE-POOLS|TYPES|ULINE|UNASSIGN|UNDER|UNICODE|UNION|UNIQUE|UNIT|UNIT_CONVERSION|UNIX|UNPACK|UNTIL|UNWIND|UP|UPDATE|UPPER|USER|USER-COMMAND|USING|UTF-8|VALID|VALUE|VALUE-REQUEST|VALUES|VARY|VARYING|VERIFICATION-MESSAGE|VERSION|VIA|VIEW|VISIBLE|WAIT|WARNING|WHEN|WHENEVER|WHERE|WHILE|WIDTH|WINDOW|WINDOWS|WITH|WITH-HEADING|WITH-TITLE|WITHOUT|WORD|WORK|WRITE|WRITER|X|XML|XOR|XSD|XSTRLEN|YELLOW|YES|YYMMDD|Z|ZERO|ZONE)(?![\\w-])/i,lookbehind:!0},number:/\\b\\d+\\b/,operator:{pattern:/(\\s)(?:\\*\\*?|<[=>]?|>=?|\\?=|[-+\\/=])(?=\\s)/,lookbehind:!0},\"string-operator\":{pattern:/(\\s)&&?(?=\\s)/,lookbehind:!0,alias:\"keyword\"},\"token-operator\":[{pattern:/(\\w)(?:->?|=>|[~|{}])(?=\\w)/,lookbehind:!0,alias:\"punctuation\"},{pattern:/[|{}]/,alias:\"punctuation\"}],punctuation:/[,.:()]/}; /components/prism-crystal.min.js\u0005\u001c!function(e){e.languages.crystal=e.languages.extend(\"ruby\",{keyword:[/\\b(?:__DIR__|__END_LINE__|__FILE__|__LINE__|abstract|alias|annotation|as|asm|begin|break|case|class|def|do|else|elsif|end|ensure|enum|extend|for|fun|if|ifdef|include|instance_sizeof|lib|macro|module|next|of|out|pointerof|private|protected|ptr|require|rescue|return|select|self|sizeof|struct|super|then|type|typeof|undef|uninitialized|union|unless|until|when|while|with|yield)\\b/,{pattern:/(\\.\\s*)(?:is_a|responds_to)\\?/,lookbehind:!0}],number:/\\b(?:0b[01_]*[01]|0o[0-7_]*[0-7]|0x[\\da-fA-F_]*[\\da-fA-F]|(?:\\d(?:[\\d_]*\\d)?)(?:\\.[\\d_]*\\d)?(?:[eE][+-]?[\\d_]*\\d)?)(?:_(?:[uif](?:8|16|32|64))?)?\\b/,operator:[/->/,e.languages.ruby.operator],punctuation:/[(){}[\\].,;\\\\]/}),e.languages.insertBefore(\"crystal\",\"string-literal\",{attribute:{pattern:/@\\[.*?\\]/,inside:{delimiter:{pattern:/^@\\[|\\]$/,alias:\"punctuation\"},attribute:{pattern:/^(\\s*)\\w+/,lookbehind:!0,alias:\"class-name\"},args:{pattern:/\\S(?:[\\s\\S]*\\S)?/,inside:e.languages.crystal}}},expansion:{pattern:/\\{(?:\\{.*?\\}|%.*?%)\\}/,inside:{content:{pattern:/^(\\{.)[\\s\\S]+(?=.\\}$)/,lookbehind:!0,inside:e.languages.crystal},delimiter:{pattern:/^\\{[\\{%]|[\\}%]\\}$/,alias:\"operator\"}}},char:{pattern:/'(?:[^\\\\\\r\\n]{1,2}|\\\\(?:.|u(?:[A-Fa-f0-9]{1,4}|\\{[A-Fa-f0-9]{1,6}\\})))'/,greedy:!0}})}(Prism);/components/prism-ebnf.js\u0001Prism.languages.ebnf = {\n\t'comment': /\\(\\*[\\s\\S]*?\\*\\)/,\n\t'string': {\n\t\tpattern: /\"[^\"\\r\\n]*\"|'[^'\\r\\n]*'/,\n\t\tgreedy: true\n\t},\n\t'special': {\n\t\tpattern: /\\?[^?\\r\\n]*\\?/,\n\t\tgreedy: true,\n\t\talias: 'class-name'\n\t},\n\n\t'definition': {\n\t\tpattern: /^([\\t ]*)[a-z]\\w*(?:[ \\t]+[a-z]\\w*)*(?=\\s*=)/im,\n\t\tlookbehind: true,\n\t\talias: ['rule', 'keyword']\n\t},\n\t'rule': /\\b[a-z]\\w*(?:[ \\t]+[a-z]\\w*)*\\b/i,\n\n\t'punctuation': /\\([:/]|[:/]\\)|[.,;()[\\]{}]/,\n\t'operator': /[-=|*/!]/\n};\n/components/prism-pascal.min.js\u0007xPrism.languages.pascal={directive:{pattern:/\\{\\$[\\s\\S]*?\\}/,greedy:!0,alias:[\"marco\",\"property\"]},comment:{pattern:/\\(\\*[\\s\\S]*?\\*\\)|\\{[\\s\\S]*?\\}|\\/\\/.*/,greedy:!0},string:{pattern:/(?:'(?:''|[^'\\r\\n])*'(?!')|#[&$%]?[a-f\\d]+)+|\\^[a-z]/i,greedy:!0},asm:{pattern:/(\\basm\\b)[\\s\\S]+?(?=\\bend\\s*[;[])/i,lookbehind:!0,greedy:!0,inside:null},keyword:[{pattern:/(^|[^&])\\b(?:absolute|array|asm|begin|case|const|constructor|destructor|do|downto|else|end|file|for|function|goto|if|implementation|inherited|inline|interface|label|nil|object|of|operator|packed|procedure|program|record|reintroduce|repeat|self|set|string|then|to|type|unit|until|uses|var|while|with)\\b/i,lookbehind:!0},{pattern:/(^|[^&])\\b(?:dispose|exit|false|new|true)\\b/i,lookbehind:!0},{pattern:/(^|[^&])\\b(?:class|dispinterface|except|exports|finalization|finally|initialization|inline|library|on|out|packed|property|raise|resourcestring|threadvar|try)\\b/i,lookbehind:!0},{pattern:/(^|[^&])\\b(?:absolute|abstract|alias|assembler|bitpacked|break|cdecl|continue|cppdecl|cvar|default|deprecated|dynamic|enumerator|experimental|export|external|far|far16|forward|generic|helper|implements|index|interrupt|iochecks|local|message|name|near|nodefault|noreturn|nostackframe|oldfpccall|otherwise|overload|override|pascal|platform|private|protected|public|published|read|register|reintroduce|result|safecall|saveregisters|softfloat|specialize|static|stdcall|stored|strict|unaligned|unimplemented|varargs|virtual|write)\\b/i,lookbehind:!0}],number:[/(?:[&%]\\d+|\\$[a-f\\d]+)/i,/\\b\\d+(?:\\.\\d+)?(?:e[+-]?\\d+)?/i],operator:[/\\.\\.|\\*\\*|:=|<[<=>]?|>[>=]?|[+\\-*\\/]=?|[@^=]/,{pattern:/(^|[^&])\\b(?:and|as|div|exclude|in|include|is|mod|not|or|shl|shr|xor)\\b/,lookbehind:!0}],punctuation:/\\(\\.|\\.\\)|[()\\[\\]:;,.]/},Prism.languages.pascal.asm.inside=Prism.languages.extend(\"pascal\",{asm:void 0,keyword:void 0,operator:void 0}),Prism.languages.objectpascal=Prism.languages.pascal;//plugins/command-line/prism-command-line.min.js\n!function(){if(\"undefined\"!=typeof Prism&&\"undefined\"!=typeof document){var e=/(?:^|\\s)command-line(?:\\s|$)/,t=\"command-line-prompt\",n=\"\".startsWith?function(e,t){return e.startsWith(t)}:function(e,t){return 0===e.indexOf(t)},a=\"\".endsWith?function(e,t){return e.endsWith(t)}:function(e,t){var n=e.length;return e.substring(n-t.length,n)===t};Prism.hooks.add(\"before-highlight\",(function(i){var o=r(i);if(!o.complete&&i.code){var s=i.element.parentElement;if(s&&/pre/i.test(s.nodeName)&&(e.test(s.className)||e.test(i.element.className))){var l=i.element.querySelector(\".\"+t);l&&l.remove();var m=i.code.split(\"\\n\");o.numberOfLines=m.length;var u=o.outputLines=[],c=s.getAttribute(\"data-output\"),d=s.getAttribute(\"data-filter-output\");if(null!==c)c.split(\",\").forEach((function(e){var t=e.split(\"-\"),n=parseInt(t[0],10),a=2===t.length?parseInt(t[1],10):n;if(!isNaN(n)&&!isNaN(a)){n<1&&(n=1),a>m.length&&(a=m.length),a--;for(var r=--n;r<=a;r++)u[r]=m[r],m[r]=\"\"}}));else if(d)for(var p=0;p<m.length;p++)n(m[p],d)&&(u[p]=m[p].slice(d.length),m[p]=\"\");for(var f=o.continuationLineIndicies=new Set,h=s.getAttribute(\"data-continuation-str\"),v=s.getAttribute(\"data-filter-continuation\"),g=0;g<m.length;g++){var b=m[g];b&&(h&&a(b,h)&&f.add(g+1),g>0&&v&&n(b,v)&&(m[g]=b.slice(v.length),f.add(g)))}i.code=m.join(\"\\n\")}else o.complete=!0}else o.complete=!0})),Prism.hooks.add(\"before-insert\",(function(e){var t=r(e);if(!t.complete){for(var n=e.highlightedCode.split(\"\\n\"),a=t.outputLines||[],i=0,o=n.length;i<o;i++)a.hasOwnProperty(i)?n[i]='<span class=\"token output\">'+Prism.util.encode(a[i])+\"</span>\":n[i]='<span class=\"token command\">'+n[i]+\"</span>\";e.highlightedCode=n.join(\"\\n\")}})),Prism.hooks.add(\"complete\",(function(n){if(function(e){return\"command-line\"in(e.vars=e.vars||{})}(n)){var a=r(n);if(!a.complete){var i=n.element.parentElement;e.test(n.element.className)&&(n.element.className=n.element.className.replace(e,\" \")),e.test(i.className)||(i.className+=\" command-line\");var o,s=\"\",l=a.numberOfLines||0,m=b(\"data-prompt\",\"\");o=\"\"!==m?'<span data-prompt=\"'+m+'\"></span>':'<span data-user=\"'+b(\"data-user\",\"user\")+'\" data-host=\"'+b(\"data-host\",\"localhost\")+'\"></span>';for(var u=a.continuationLineIndicies||new Set,c='<span data-continuation-prompt=\"'+b(\"data-continuation-prompt\",\">\")+'\"></span>',d=0;d<l;d++)u.has(d)?s+=c:s+=o;var p=document.createElement(\"span\");p.className=t,p.innerHTML=s;for(var f=a.outputLines||[],h=0,v=f.length;h<v;h++)if(f.hasOwnProperty(h)){var g=p.children[h];g.removeAttribute(\"data-user\"),g.removeAttribute(\"data-host\"),g.removeAttribute(\"data-prompt\")}n.element.insertBefore(p,n.element.firstChild),a.complete=!0}}function b(e,t){return(i.getAttribute(e)||t).replace(/\"/g,\"&quot\")}}))}function r(e){var t=e.vars=e.vars||{};return t[\"command-line\"]=t[\"command-line\"]||{}}}();/components/prism-sas.min.js\u001dM!function(e){var t=\"(?:\\\"(?:\\\"\\\"|[^\\\"])*\\\"(?!\\\")|'(?:''|[^'])*'(?!'))\",a=/\\b(?:\\d[\\da-f]*x|\\d+(?:\\.\\d+)?(?:e[+-]?\\d+)?)\\b/i,n={pattern:RegExp(t+\"[bx]\"),alias:\"number\"},i={pattern:/&[a-z_]\\w*/i},r={pattern:/((?:^|\\s|=|\\())%(?:ABORT|BY|CMS|COPY|DISPLAY|DO|ELSE|END|EVAL|GLOBAL|GO|GOTO|IF|INC|INCLUDE|INDEX|INPUT|KTRIM|LENGTH|LET|LIST|LOCAL|PUT|QKTRIM|QSCAN|QSUBSTR|QSYSFUNC|QUPCASE|RETURN|RUN|SCAN|SUBSTR|SUPERQ|SYMDEL|SYMEXIST|SYMGLOBL|SYMLOCAL|SYSCALL|SYSEVALF|SYSEXEC|SYSFUNC|SYSGET|SYSRPUT|THEN|TO|TSO|UNQUOTE|UNTIL|UPCASE|WHILE|WINDOW)\\b/i,lookbehind:!0,alias:\"keyword\"},s={pattern:/(^|\\s)(?:proc\\s+\\w+|data(?!=)|quit|run)\\b/i,alias:\"keyword\",lookbehind:!0},o=[/\\/\\*[\\s\\S]*?\\*\\//,{pattern:/(^[ \\t]*|;\\s*)\\*[^;]*;/m,lookbehind:!0}],l={pattern:RegExp(t),greedy:!0},c=/[$%@.(){}\\[\\];,\\\\]/,d={pattern:/%?\\b\\w+(?=\\()/,alias:\"keyword\"},p={function:d,\"arg-value\":{pattern:/(=\\s*)[A-Z\\.]+/i,lookbehind:!0},operator:/=/,\"macro-variable\":i,arg:{pattern:/[A-Z]+/i,alias:\"keyword\"},number:a,\"numeric-constant\":n,punctuation:c,string:l},u={pattern:/\\b(?:format|put)\\b=?[\\w'$.]+/i,inside:{keyword:/^(?:format|put)(?==)/i,equals:/=/,format:{pattern:/(?:\\w|\\$\\d)+\\.\\d?/,alias:\"number\"}}},m={pattern:/\\b(?:format|put)\\s+[\\w']+(?:\\s+[$.\\w]+)+(?=;)/i,inside:{keyword:/^(?:format|put)/i,format:{pattern:/[\\w$]+\\.\\d?/,alias:\"number\"}}},b={pattern:/((?:^|\\s)=?)(?:catname|checkpoint execute_always|dm|endsas|filename|footnote|%include|libname|%list|lock|missing|options|page|resetline|%run|sasfile|skip|sysecho|title\\d?)\\b/i,lookbehind:!0,alias:\"keyword\"},g={pattern:/(^|\\s)(?:submit(?:\\s+(?:load|norun|parseonly))?|endsubmit)\\b/i,lookbehind:!0,alias:\"keyword\"},k=\"aStore|accessControl|aggregation|audio|autotune|bayesianNetClassifier|bioMedImage|boolRule|builtins|cardinality|cdm|clustering|conditionalRandomFields|configuration|copula|countreg|dataDiscovery|dataPreprocess|dataSciencePilot|dataStep|decisionTree|deduplication|deepLearn|deepNeural|deepRnn|ds2|ecm|entityRes|espCluster|explainModel|factmac|fastKnn|fcmpact|fedSql|freqTab|gVarCluster|gam|gleam|graphSemiSupLearn|hiddenMarkovModel|hyperGroup|ica|image|iml|kernalPca|langModel|ldaTopic|loadStreams|mbc|mixed|mlTools|modelPublishing|network|neuralNet|nmf|nonParametricBayes|nonlinear|optNetwork|optimization|panel|pca|percentile|phreg|pls|qkb|qlim|quantreg|recommend|regression|reinforcementLearn|robustPca|ruleMining|sampling|sandwich|sccasl|search(?:Analytics)?|sentimentAnalysis|sequence|session(?:Prop)?|severity|simSystem|simple|smartData|sparkEmbeddedProcess|sparseML|spatialreg|spc|stabilityMonitoring|svDataDescription|svm|table|text(?:Filters|Frequency|Mining|Parse|Rule(?:Develop|Score)|Topic|Util)|timeData|transpose|tsInfo|tsReconcile|uniTimeSeries|varReduce\",y={pattern:RegExp(\"(^|\\\\s)(?:action\\\\s+)?(?:<act>)\\\\.[a-z]+\\\\b[^;]+\".replace(/<act>/g,(function(){return k})),\"i\"),lookbehind:!0,inside:{keyword:RegExp(\"(?:<act>)\\\\.[a-z]+\\\\b\".replace(/<act>/g,(function(){return k})),\"i\"),action:{pattern:/(?:action)/i,alias:\"keyword\"},comment:o,function:d,\"arg-value\":p[\"arg-value\"],operator:p.operator,argument:p.arg,number:a,\"numeric-constant\":n,punctuation:c,string:l}},S={pattern:/((?:^|\\s)=?)(?:after|analysis|and|array|barchart|barwidth|begingraph|by|call|cas|cbarline|cfill|class(?:lev)?|close|column|computed?|contains|continue|data(?==)|define|delete|describe|document|do\\s+over|do|dol|drop|dul|else|end(?:comp|source)?|entryTitle|eval(?:uate)?|exec(?:ute)?|exit|file(?:name)?|fill(?:attrs)?|flist|fnc|function(?:list)?|global|goto|group(?:by)?|headline|headskip|histogram|if|infile|keep|keylabel|keyword|label|layout|leave|legendlabel|length|libname|loadactionset|merge|midpoints|_?null_|name|noobs|nowd|ods|options|or|otherwise|out(?:put)?|over(?:lay)?|plot|print|put|raise|ranexp|rannor|rbreak|retain|return|select|session|sessref|set|source|statgraph|sum|summarize|table|temp|terminate|then\\s+do|then|title\\d?|to|var|when|where|xaxisopts|y2axisopts|yaxisopts)\\b/i,lookbehind:!0};e.languages.sas={datalines:{pattern:/^([ \\t]*)(?:cards|(?:data)?lines);[\\s\\S]+?^[ \\t]*;/im,lookbehind:!0,alias:\"string\",inside:{keyword:{pattern:/^(?:cards|(?:data)?lines)/i},punctuation:/;/}},\"proc-sql\":{pattern:/(^proc\\s+(?:fed)?sql(?:\\s+[\\w|=]+)?;)[\\s\\S]+?(?=^(?:proc\\s+\\w+|data|quit|run);|(?![\\s\\S]))/im,lookbehind:!0,inside:{sql:{pattern:RegExp(\"^[ \\t]*(?:select|alter\\\\s+table|(?:create|describe|drop)\\\\s+(?:index|table(?:\\\\s+constraints)?|view)|create\\\\s+unique\\\\s+index|insert\\\\s+into|update)(?:<str>|[^;\\\"'])+;\".replace(/<str>/g,(function(){return t})),\"im\"),alias:\"language-sql\",inside:e.languages.sql},\"global-statements\":b,\"sql-statements\":{pattern:/(^|\\s)(?:disconnect\\s+from|begin|commit|exec(?:ute)?|reset|rollback|validate)\\b/i,lookbehind:!0,alias:\"keyword\"},number:a,\"numeric-constant\":n,punctuation:c,string:l}},\"proc-groovy\":{pattern:/(^proc\\s+groovy(?:\\s+[\\w|=]+)?;)[\\s\\S]+?(?=^(?:proc\\s+\\w+|data|quit|run);|(?![\\s\\S]))/im,lookbehind:!0,inside:{comment:o,groovy:{pattern:RegExp(\"(^[ \\t]*submit(?:\\\\s+(?:load|norun|parseonly))?)(?:<str>|[^\\\"'])+?(?=endsubmit;)\".replace(/<str>/g,(function(){return t})),\"im\"),lookbehind:!0,alias:\"language-groovy\",inside:e.languages.groovy},keyword:S,\"submit-statement\":g,\"global-statements\":b,number:a,\"numeric-constant\":n,punctuation:c,string:l}},\"proc-lua\":{pattern:/(^proc\\s+lua(?:\\s+[\\w|=]+)?;)[\\s\\S]+?(?=^(?:proc\\s+\\w+|data|quit|run);|(?![\\s\\S]))/im,lookbehind:!0,inside:{comment:o,lua:{pattern:RegExp(\"(^[ \\t]*submit(?:\\\\s+(?:load|norun|parseonly))?)(?:<str>|[^\\\"'])+?(?=endsubmit;)\".replace(/<str>/g,(function(){return t})),\"im\"),lookbehind:!0,alias:\"language-lua\",inside:e.languages.lua},keyword:S,\"submit-statement\":g,\"global-statements\":b,number:a,\"numeric-constant\":n,punctuation:c,string:l}},\"proc-cas\":{pattern:/(^proc\\s+cas(?:\\s+[\\w|=]+)?;)[\\s\\S]+?(?=^(?:proc\\s+\\w+|quit|data);|(?![\\s\\S]))/im,lookbehind:!0,inside:{comment:o,\"statement-var\":{pattern:/((?:^|\\s)=?)saveresult\\s[^;]+/im,lookbehind:!0,inside:{statement:{pattern:/^saveresult\\s+\\S+/i,inside:{keyword:/^(?:saveresult)/i}},rest:p}},\"cas-actions\":y,statement:{pattern:/((?:^|\\s)=?)(?:default|(?:un)?set|on|output|upload)[^;]+/im,lookbehind:!0,inside:p},step:s,keyword:S,function:d,format:u,altformat:m,\"global-statements\":b,number:a,\"numeric-constant\":n,punctuation:c,string:l}},\"proc-args\":{pattern:RegExp(\"(^proc\\\\s+\\\\w+\\\\s+)(?!\\\\s)(?:[^;\\\"']|<str>)+;\".replace(/<str>/g,(function(){return t})),\"im\"),lookbehind:!0,inside:p},\"macro-keyword\":r,\"macro-variable\":i,\"macro-string-functions\":{pattern:/((?:^|\\s|=))%(?:BQUOTE|NRBQUOTE|NRQUOTE|NRSTR|QUOTE|STR)\\(.*?(?:[^%]\\))/i,lookbehind:!0,inside:{function:{pattern:/%(?:BQUOTE|NRBQUOTE|NRQUOTE|NRSTR|QUOTE|STR)/i,alias:\"keyword\"},\"macro-keyword\":r,\"macro-variable\":i,\"escaped-char\":{pattern:/%['\"()<>=¬^~;,#]/},punctuation:c}},\"macro-declaration\":{pattern:/^%macro[^;]+(?=;)/im,inside:{keyword:/%macro/i}},\"macro-end\":{pattern:/^%mend[^;]+(?=;)/im,inside:{keyword:/%mend/i}},macro:{pattern:/%_\\w+(?=\\()/,alias:\"keyword\"},input:{pattern:/\\binput\\s[-\\w\\s/*.$&]+;/i,inside:{input:{alias:\"keyword\",pattern:/^input/i},comment:o,number:a,\"numeric-constant\":n}},\"options-args\":{pattern:/(^options)[-'\"|/\\\\<>*+=:()\\w\\s]*(?=;)/im,lookbehind:!0,inside:p},\"cas-actions\":y,comment:o,function:d,format:u,altformat:m,\"numeric-constant\":n,datetime:{pattern:RegExp(t+\"(?:dt?|t)\"),alias:\"number\"},string:l,step:s,keyword:S,\"operator-keyword\":{pattern:/\\b(?:eq|ge|gt|in|le|lt|ne|not)\\b/i,alias:\"operator\"},number:a,operator:/\\*\\*?|\\|\\|?|!!?|¦¦?|<[>=]?|>[<=]?|[-+\\/=&]|[~¬^]=?/,punctuation:c}}(Prism);/components/prism-io.js\u0007\u000fPrism.languages.io = {\n\t'comment': {\n\t\tpattern: /(^|[^\\\\])(?:\\/\\*[\\s\\S]*?(?:\\*\\/|$)|\\/\\/.*|#.*)/,\n\t\tlookbehind: true,\n\t\tgreedy: true\n\t},\n\t'triple-quoted-string': {\n\t\tpattern: /\"\"\"(?:\\\\[\\s\\S]|(?!\"\"\")[^\\\\])*\"\"\"/,\n\t\tgreedy: true,\n\t\talias: 'string'\n\t},\n\t'string': {\n\t\tpattern: /\"(?:\\\\.|[^\\\\\\r\\n\"])*\"/,\n\t\tgreedy: true\n\t},\n\t'keyword': /\\b(?:activate|activeCoroCount|asString|block|break|call|catch|clone|collectGarbage|compileString|continue|do|doFile|doMessage|doString|else|elseif|exit|for|foreach|forward|getEnvironmentVariable|getSlot|hasSlot|if|ifFalse|ifNil|ifNilEval|ifTrue|isActive|isNil|isResumable|list|message|method|parent|pass|pause|perform|performWithArgList|print|println|proto|raise|raiseResumable|removeSlot|resend|resume|schedulerSleepSeconds|self|sender|setSchedulerSleepSeconds|setSlot|shallowCopy|slotNames|super|system|then|thisBlock|thisContext|try|type|uniqueId|updateSlot|wait|while|write|yield)\\b/,\n\t'builtin': /\\b(?:Array|AudioDevice|AudioMixer|BigNum|Block|Box|Buffer|CFunction|CGI|Color|Curses|DBM|DNSResolver|DOConnection|DOProxy|DOServer|Date|Directory|Duration|DynLib|Error|Exception|FFT|File|Fnmatch|Font|Future|GL|GLE|GLScissor|GLU|GLUCylinder|GLUQuadric|GLUSphere|GLUT|Host|Image|Importer|LinkList|List|Lobby|Locals|MD5|MP3Decoder|MP3Encoder|Map|Message|Movie|Notification|Number|Object|OpenGL|Point|Protos|Random|Regex|SGML|SGMLElement|SGMLParser|SQLite|Sequence|Server|ShowMessage|SleepyCat|SleepyCatCursor|Socket|SocketManager|Sound|Soup|Store|String|Tree|UDPSender|UPDReceiver|URL|User|Warning|WeakLink)\\b/,\n\t'boolean': /\\b(?:false|nil|true)\\b/,\n\t'number': /\\b0x[\\da-f]+\\b|(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:e-?\\d+)?/i,\n\t'operator': /[=!*/%+\\-^&|]=|>>?=?|<<?=?|:?:?=|\\+\\+?|--?|\\*\\*?|\\/\\/?|%|\\|\\|?|&&?|\\b(?:and|not|or|return)\\b|@@?|\\?\\??|\\.\\./,\n\t'punctuation': /[{}[\\];(),.:]/\n};\n\"/plugins/toolbar/prism-toolbar.css\u0006\u001ddiv.code-toolbar {\n\tposition: relative;\n}\n\ndiv.code-toolbar > .toolbar {\n\tposition: absolute;\n\tz-index: 10;\n\ttop: .3em;\n\tright: .2em;\n\ttransition: opacity 0.3s ease-in-out;\n\topacity: 0;\n}\n\ndiv.code-toolbar:hover > .toolbar {\n\topacity: 1;\n}\n\n/* Separate line b/c rules are thrown out if selector is invalid.\n   IE11 and old Edge versions don't support :focus-within. */\ndiv.code-toolbar:focus-within > .toolbar {\n\topacity: 1;\n}\n\ndiv.code-toolbar > .toolbar > .toolbar-item {\n\tdisplay: inline-block;\n}\n\ndiv.code-toolbar > .toolbar > .toolbar-item > a {\n\tcursor: pointer;\n}\n\ndiv.code-toolbar > .toolbar > .toolbar-item > button {\n\tbackground: none;\n\tborder: 0;\n\tcolor: inherit;\n\tfont: inherit;\n\tline-height: normal;\n\toverflow: visible;\n\tpadding: 0;\n\t-webkit-user-select: none; /* for button */\n\t-moz-user-select: none;\n\t-ms-user-select: none;\n}\n\ndiv.code-toolbar > .toolbar > .toolbar-item > a,\ndiv.code-toolbar > .toolbar > .toolbar-item > button,\ndiv.code-toolbar > .toolbar > .toolbar-item > span {\n\tcolor: #bbb;\n\tfont-size: .8em;\n\tpadding: 0 .5em;\n\tbackground: #f5f2f0;\n\tbackground: rgba(224, 224, 224, 0.2);\n\tbox-shadow: 0 2px 0 0 rgba(0,0,0,0.2);\n\tborder-radius: .5em;\n}\n\ndiv.code-toolbar > .toolbar > .toolbar-item > a:hover,\ndiv.code-toolbar > .toolbar > .toolbar-item > a:focus,\ndiv.code-toolbar > .toolbar > .toolbar-item > button:hover,\ndiv.code-toolbar > .toolbar > .toolbar-item > button:focus,\ndiv.code-toolbar > .toolbar > .toolbar-item > span:hover,\ndiv.code-toolbar > .toolbar > .toolbar-item > span:focus {\n\tcolor: inherit;\n\ttext-decoration: none;\n}\n/components/prism-promql.js\t// Thanks to: https://github.com/prometheus-community/monaco-promql/blob/master/src/promql/promql.ts\n// As well as: https://kausal.co/blog/slate-prism-add-new-syntax-promql/\n\n(function (Prism) {\n\t// PromQL Aggregation Operators\n\t// (https://prometheus.io/docs/prometheus/latest/querying/operators/#aggregation-operators)\n\tvar aggregations = [\n\t\t'sum',\n\t\t'min',\n\t\t'max',\n\t\t'avg',\n\t\t'group',\n\t\t'stddev',\n\t\t'stdvar',\n\t\t'count',\n\t\t'count_values',\n\t\t'bottomk',\n\t\t'topk',\n\t\t'quantile'\n\t];\n\n\t// PromQL vector matching + the by and without clauses\n\t// (https://prometheus.io/docs/prometheus/latest/querying/operators/#vector-matching)\n\tvar vectorMatching = [\n\t\t'on',\n\t\t'ignoring',\n\t\t'group_right',\n\t\t'group_left',\n\t\t'by',\n\t\t'without',\n\t];\n\n\t// PromQL offset modifier\n\t// (https://prometheus.io/docs/prometheus/latest/querying/basics/#offset-modifier)\n\tvar offsetModifier = ['offset'];\n\n\tvar keywords = aggregations.concat(vectorMatching, offsetModifier);\n\n\tPrism.languages.promql = {\n\t\t'comment': {\n\t\t\tpattern: /(^[ \\t]*)#.*/m,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'vector-match': {\n\t\t\t// Match the comma-separated label lists inside vector matching:\n\t\t\tpattern: new RegExp('((?:' + vectorMatching.join('|') + ')\\\\s*)\\\\([^)]*\\\\)'),\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'label-key': {\n\t\t\t\t\tpattern: /\\b[^,]+\\b/,\n\t\t\t\t\talias: 'attr-name',\n\t\t\t\t},\n\t\t\t\t'punctuation': /[(),]/\n\t\t\t},\n\t\t},\n\t\t'context-labels': {\n\t\t\tpattern: /\\{[^{}]*\\}/,\n\t\t\tinside: {\n\t\t\t\t'label-key': {\n\t\t\t\t\tpattern: /\\b[a-z_]\\w*(?=\\s*(?:=|![=~]))/,\n\t\t\t\t\talias: 'attr-name',\n\t\t\t\t},\n\t\t\t\t'label-value': {\n\t\t\t\t\tpattern: /([\"'`])(?:\\\\[\\s\\S]|(?!\\1)[^\\\\])*\\1/,\n\t\t\t\t\tgreedy: true,\n\t\t\t\t\talias: 'attr-value',\n\t\t\t\t},\n\t\t\t\t'punctuation': /\\{|\\}|=~?|![=~]|,/,\n\t\t\t},\n\t\t},\n\t\t'context-range': [\n\t\t\t{\n\t\t\t\tpattern: /\\[[\\w\\s:]+\\]/, // [1m]\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': /\\[|\\]|:/,\n\t\t\t\t\t'range-duration': {\n\t\t\t\t\t\tpattern: /\\b(?:\\d+(?:[smhdwy]|ms))+\\b/i,\n\t\t\t\t\t\talias: 'number',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /(\\boffset\\s+)\\w+/, // offset 1m\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'range-duration': {\n\t\t\t\t\t\tpattern: /\\b(?:\\d+(?:[smhdwy]|ms))+\\b/i,\n\t\t\t\t\t\talias: 'number',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t],\n\t\t'keyword': new RegExp('\\\\b(?:' + keywords.join('|') + ')\\\\b', 'i'),\n\t\t'function': /\\b[a-z_]\\w*(?=\\s*\\()/i,\n\t\t'number': /[-+]?(?:(?:\\b\\d+(?:\\.\\d+)?|\\B\\.\\d+)(?:e[-+]?\\d+)?\\b|\\b(?:0x[0-9a-f]+|nan|inf)\\b)/i,\n\t\t'operator': /[\\^*/%+-]|==|!=|<=|<|>=|>|\\b(?:and|or|unless)\\b/i,\n\t\t'punctuation': /[{};()`,.[\\]]/,\n\t};\n}(Prism));\n/components/prism-python.js\tPrism.languages.python = {\n\t'comment': {\n\t\tpattern: /(^|[^\\\\])#.*/,\n\t\tlookbehind: true,\n\t\tgreedy: true\n\t},\n\t'string-interpolation': {\n\t\tpattern: /(?:f|fr|rf)(?:(\"\"\"|''')[\\s\\S]*?\\1|(\"|')(?:\\\\.|(?!\\2)[^\\\\\\r\\n])*\\2)/i,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'interpolation': {\n\t\t\t\t// \"{\" <expression> <optional \"!s\", \"!r\", or \"!a\"> <optional \":\" format specifier> \"}\"\n\t\t\t\tpattern: /((?:^|[^{])(?:\\{\\{)*)\\{(?!\\{)(?:[^{}]|\\{(?!\\{)(?:[^{}]|\\{(?!\\{)(?:[^{}])+\\})+\\})+\\}/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'format-spec': {\n\t\t\t\t\t\tpattern: /(:)[^:(){}]+(?=\\}$)/,\n\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t},\n\t\t\t\t\t'conversion-option': {\n\t\t\t\t\t\tpattern: /![sra](?=[:}]$)/,\n\t\t\t\t\t\talias: 'punctuation'\n\t\t\t\t\t},\n\t\t\t\t\trest: null\n\t\t\t\t}\n\t\t\t},\n\t\t\t'string': /[\\s\\S]+/\n\t\t}\n\t},\n\t'triple-quoted-string': {\n\t\tpattern: /(?:[rub]|br|rb)?(\"\"\"|''')[\\s\\S]*?\\1/i,\n\t\tgreedy: true,\n\t\talias: 'string'\n\t},\n\t'string': {\n\t\tpattern: /(?:[rub]|br|rb)?(\"|')(?:\\\\.|(?!\\1)[^\\\\\\r\\n])*\\1/i,\n\t\tgreedy: true\n\t},\n\t'function': {\n\t\tpattern: /((?:^|\\s)def[ \\t]+)[a-zA-Z_]\\w*(?=\\s*\\()/g,\n\t\tlookbehind: true\n\t},\n\t'class-name': {\n\t\tpattern: /(\\bclass\\s+)\\w+/i,\n\t\tlookbehind: true\n\t},\n\t'decorator': {\n\t\tpattern: /(^[\\t ]*)@\\w+(?:\\.\\w+)*/m,\n\t\tlookbehind: true,\n\t\talias: ['annotation', 'punctuation'],\n\t\tinside: {\n\t\t\t'punctuation': /\\./\n\t\t}\n\t},\n\t'keyword': /\\b(?:_(?=\\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\\b/,\n\t'builtin': /\\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\\b/,\n\t'boolean': /\\b(?:False|None|True)\\b/,\n\t'number': /\\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\\b|(?:\\b\\d+(?:_\\d+)*(?:\\.(?:\\d+(?:_\\d+)*)?)?|\\B\\.\\d+(?:_\\d+)*)(?:e[+-]?\\d+(?:_\\d+)*)?j?(?!\\w)/i,\n\t'operator': /[-+%=]=?|!=|:=|\\*\\*?=?|\\/\\/?=?|<[<=>]?|>[=>]?|[&|^~]/,\n\t'punctuation': /[{}[\\];(),.:]/\n};\n\nPrism.languages.python['string-interpolation'].inside['interpolation'].inside.rest = Prism.languages.python;\n\nPrism.languages.py = Prism.languages.python;\n/components/prism-idris.min.js\u0002Prism.languages.idris=Prism.languages.extend(\"haskell\",{comment:{pattern:/(?:(?:--|\\|\\|\\|).*$|\\{-[\\s\\S]*?-\\})/m},keyword:/\\b(?:Type|case|class|codata|constructor|corecord|data|do|dsl|else|export|if|implementation|implicit|import|impossible|in|infix|infixl|infixr|instance|interface|let|module|mutual|namespace|of|parameters|partial|postulate|private|proof|public|quoteGoal|record|rewrite|syntax|then|total|using|where|with)\\b/,builtin:void 0}),Prism.languages.insertBefore(\"idris\",\"keyword\",{\"import-statement\":{pattern:/(^\\s*import\\s+)(?:[A-Z][\\w']*)(?:\\.[A-Z][\\w']*)*/m,lookbehind:!0,inside:{punctuation:/\\./}}}),Prism.languages.idr=Prism.languages.idris;3/plugins/line-highlight/prism-line-highlight.min.js\u000ez!function(){if(\"undefined\"!=typeof Prism&&\"undefined\"!=typeof document&&document.querySelector){var e,t=\"line-numbers\",i=\"linkable-line-numbers\",n=/\\n(?!$)/g,r=!0;Prism.plugins.lineHighlight={highlightLines:function(o,u,c){var h=(u=\"string\"==typeof u?u:o.getAttribute(\"data-line\")||\"\").replace(/\\s+/g,\"\").split(\",\").filter(Boolean),d=+o.getAttribute(\"data-line-offset\")||0,f=(function(){if(void 0===e){var t=document.createElement(\"div\");t.style.fontSize=\"13px\",t.style.lineHeight=\"1.5\",t.style.padding=\"0\",t.style.border=\"0\",t.innerHTML=\"&nbsp;<br />&nbsp;\",document.body.appendChild(t),e=38===t.offsetHeight,document.body.removeChild(t)}return e}()?parseInt:parseFloat)(getComputedStyle(o).lineHeight),p=Prism.util.isActive(o,t),g=o.querySelector(\"code\"),m=p?o:g||o,v=[],y=g.textContent.match(n),b=y?y.length+1:1,A=g&&m!=g?function(e,t){var i=getComputedStyle(e),n=getComputedStyle(t);function r(e){return+e.substr(0,e.length-2)}return t.offsetTop+r(n.borderTopWidth)+r(n.paddingTop)-r(i.paddingTop)}(o,g):0;h.forEach((function(e){var t=e.split(\"-\"),i=+t[0],n=+t[1]||i;if(!((n=Math.min(b+d,n))<i)){var r=o.querySelector('.line-highlight[data-range=\"'+e+'\"]')||document.createElement(\"div\");if(v.push((function(){r.setAttribute(\"aria-hidden\",\"true\"),r.setAttribute(\"data-range\",e),r.className=(c||\"\")+\" line-highlight\"})),p&&Prism.plugins.lineNumbers){var s=Prism.plugins.lineNumbers.getLine(o,i),l=Prism.plugins.lineNumbers.getLine(o,n);if(s){var a=s.offsetTop+A+\"px\";v.push((function(){r.style.top=a}))}if(l){var u=l.offsetTop-s.offsetTop+l.offsetHeight+\"px\";v.push((function(){r.style.height=u}))}}else v.push((function(){r.setAttribute(\"data-start\",String(i)),n>i&&r.setAttribute(\"data-end\",String(n)),r.style.top=(i-d-1)*f+A+\"px\",r.textContent=new Array(n-i+2).join(\" \\n\")}));v.push((function(){r.style.width=o.scrollWidth+\"px\"})),v.push((function(){m.appendChild(r)}))}}));var P=o.id;if(p&&Prism.util.isActive(o,i)&&P){l(o,i)||v.push((function(){o.classList.add(i)}));var E=parseInt(o.getAttribute(\"data-start\")||\"1\");s(\".line-numbers-rows > span\",o).forEach((function(e,t){var i=t+E;e.onclick=function(){var e=P+\".\"+i;r=!1,location.hash=e,setTimeout((function(){r=!0}),1)}}))}return function(){v.forEach(a)}}};var o=0;Prism.hooks.add(\"before-sanity-check\",(function(e){var t=e.element.parentElement;if(u(t)){var i=0;s(\".line-highlight\",t).forEach((function(e){i+=e.textContent.length,e.parentNode.removeChild(e)})),i&&/^(?: \\n)+$/.test(e.code.slice(-i))&&(e.code=e.code.slice(0,-i))}})),Prism.hooks.add(\"complete\",(function e(i){var n=i.element.parentElement;if(u(n)){clearTimeout(o);var r=Prism.plugins.lineNumbers,s=i.plugins&&i.plugins.lineNumbers;l(n,t)&&r&&!s?Prism.hooks.add(\"line-numbers\",e):(Prism.plugins.lineHighlight.highlightLines(n)(),o=setTimeout(c,1))}})),window.addEventListener(\"hashchange\",c),window.addEventListener(\"resize\",(function(){s(\"pre\").filter(u).map((function(e){return Prism.plugins.lineHighlight.highlightLines(e)})).forEach(a)}))}function s(e,t){return Array.prototype.slice.call((t||document).querySelectorAll(e))}function l(e,t){return e.classList.contains(t)}function a(e){e()}function u(e){return!!(e&&/pre/i.test(e.nodeName)&&(e.hasAttribute(\"data-line\")||e.id&&Prism.util.isActive(e,i)))}function c(){var e=location.hash.slice(1);s(\".temporary.line-highlight\").forEach((function(e){e.parentNode.removeChild(e)}));var t=(e.match(/\\.([\\d,-]+)$/)||[,\"\"])[1];if(t&&!document.getElementById(e)){var i=e.slice(0,e.lastIndexOf(\".\")),n=document.getElementById(i);n&&(n.hasAttribute(\"data-line\")||n.setAttribute(\"data-line\",\"\"),Prism.plugins.lineHighlight.highlightLines(n,t,\"temporary \")(),r&&document.querySelector(\".temporary.line-highlight\").scrollIntoView())}}}();/components/prism-php.min.js\u0018!function(e){var a=/\\/\\*[\\s\\S]*?\\*\\/|\\/\\/.*|#(?!\\[).*/,t=[{pattern:/\\b(?:false|true)\\b/i,alias:\"boolean\"},{pattern:/(::\\s*)\\b[a-z_]\\w*\\b(?!\\s*\\()/i,greedy:!0,lookbehind:!0},{pattern:/(\\b(?:case|const)\\s+)\\b[a-z_]\\w*(?=\\s*[;=])/i,greedy:!0,lookbehind:!0},/\\b(?:null)\\b/i,/\\b[A-Z_][A-Z0-9_]*\\b(?!\\s*\\()/],i=/\\b0b[01]+(?:_[01]+)*\\b|\\b0o[0-7]+(?:_[0-7]+)*\\b|\\b0x[\\da-f]+(?:_[\\da-f]+)*\\b|(?:\\b\\d+(?:_\\d+)*\\.?(?:\\d+(?:_\\d+)*)?|\\B\\.\\d+)(?:e[+-]?\\d+)?/i,n=/<?=>|\\?\\?=?|\\.{3}|\\??->|[!=]=?=?|::|\\*\\*=?|--|\\+\\+|&&|\\|\\||<<|>>|[?~]|[/^|%*&<>.+-]=?/,s=/[{}\\[\\](),:;]/;e.languages.php={delimiter:{pattern:/\\?>$|^<\\?(?:php(?=\\s)|=)?/i,alias:\"important\"},comment:a,variable:/\\$+(?:\\w+\\b|(?=\\{))/,package:{pattern:/(namespace\\s+|use\\s+(?:function\\s+)?)(?:\\\\?\\b[a-z_]\\w*)+\\b(?!\\\\)/i,lookbehind:!0,inside:{punctuation:/\\\\/}},\"class-name-definition\":{pattern:/(\\b(?:class|enum|interface|trait)\\s+)\\b[a-z_]\\w*(?!\\\\)\\b/i,lookbehind:!0,alias:\"class-name\"},\"function-definition\":{pattern:/(\\bfunction\\s+)[a-z_]\\w*(?=\\s*\\()/i,lookbehind:!0,alias:\"function\"},keyword:[{pattern:/(\\(\\s*)\\b(?:array|bool|boolean|float|int|integer|object|string)\\b(?=\\s*\\))/i,alias:\"type-casting\",greedy:!0,lookbehind:!0},{pattern:/([(,?]\\s*)\\b(?:array(?!\\s*\\()|bool|callable|(?:false|null)(?=\\s*\\|)|float|int|iterable|mixed|object|self|static|string)\\b(?=\\s*\\$)/i,alias:\"type-hint\",greedy:!0,lookbehind:!0},{pattern:/(\\)\\s*:\\s*(?:\\?\\s*)?)\\b(?:array(?!\\s*\\()|bool|callable|(?:false|null)(?=\\s*\\|)|float|int|iterable|mixed|never|object|self|static|string|void)\\b/i,alias:\"return-type\",greedy:!0,lookbehind:!0},{pattern:/\\b(?:array(?!\\s*\\()|bool|float|int|iterable|mixed|object|string|void)\\b/i,alias:\"type-declaration\",greedy:!0},{pattern:/(\\|\\s*)(?:false|null)\\b|\\b(?:false|null)(?=\\s*\\|)/i,alias:\"type-declaration\",greedy:!0,lookbehind:!0},{pattern:/\\b(?:parent|self|static)(?=\\s*::)/i,alias:\"static-context\",greedy:!0},{pattern:/(\\byield\\s+)from\\b/i,lookbehind:!0},/\\bclass\\b/i,{pattern:/((?:^|[^\\s>:]|(?:^|[^-])>|(?:^|[^:]):)\\s*)\\b(?:abstract|and|array|as|break|callable|case|catch|clone|const|continue|declare|default|die|do|echo|else|elseif|empty|enddeclare|endfor|endforeach|endif|endswitch|endwhile|enum|eval|exit|extends|final|finally|fn|for|foreach|function|global|goto|if|implements|include|include_once|instanceof|insteadof|interface|isset|list|match|namespace|never|new|or|parent|print|private|protected|public|readonly|require|require_once|return|self|static|switch|throw|trait|try|unset|use|var|while|xor|yield|__halt_compiler)\\b/i,lookbehind:!0}],\"argument-name\":{pattern:/([(,]\\s*)\\b[a-z_]\\w*(?=\\s*:(?!:))/i,lookbehind:!0},\"class-name\":[{pattern:/(\\b(?:extends|implements|instanceof|new(?!\\s+self|\\s+static))\\s+|\\bcatch\\s*\\()\\b[a-z_]\\w*(?!\\\\)\\b/i,greedy:!0,lookbehind:!0},{pattern:/(\\|\\s*)\\b[a-z_]\\w*(?!\\\\)\\b/i,greedy:!0,lookbehind:!0},{pattern:/\\b[a-z_]\\w*(?!\\\\)\\b(?=\\s*\\|)/i,greedy:!0},{pattern:/(\\|\\s*)(?:\\\\?\\b[a-z_]\\w*)+\\b/i,alias:\"class-name-fully-qualified\",greedy:!0,lookbehind:!0,inside:{punctuation:/\\\\/}},{pattern:/(?:\\\\?\\b[a-z_]\\w*)+\\b(?=\\s*\\|)/i,alias:\"class-name-fully-qualified\",greedy:!0,inside:{punctuation:/\\\\/}},{pattern:/(\\b(?:extends|implements|instanceof|new(?!\\s+self\\b|\\s+static\\b))\\s+|\\bcatch\\s*\\()(?:\\\\?\\b[a-z_]\\w*)+\\b(?!\\\\)/i,alias:\"class-name-fully-qualified\",greedy:!0,lookbehind:!0,inside:{punctuation:/\\\\/}},{pattern:/\\b[a-z_]\\w*(?=\\s*\\$)/i,alias:\"type-declaration\",greedy:!0},{pattern:/(?:\\\\?\\b[a-z_]\\w*)+(?=\\s*\\$)/i,alias:[\"class-name-fully-qualified\",\"type-declaration\"],greedy:!0,inside:{punctuation:/\\\\/}},{pattern:/\\b[a-z_]\\w*(?=\\s*::)/i,alias:\"static-context\",greedy:!0},{pattern:/(?:\\\\?\\b[a-z_]\\w*)+(?=\\s*::)/i,alias:[\"class-name-fully-qualified\",\"static-context\"],greedy:!0,inside:{punctuation:/\\\\/}},{pattern:/([(,?]\\s*)[a-z_]\\w*(?=\\s*\\$)/i,alias:\"type-hint\",greedy:!0,lookbehind:!0},{pattern:/([(,?]\\s*)(?:\\\\?\\b[a-z_]\\w*)+(?=\\s*\\$)/i,alias:[\"class-name-fully-qualified\",\"type-hint\"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\\\/}},{pattern:/(\\)\\s*:\\s*(?:\\?\\s*)?)\\b[a-z_]\\w*(?!\\\\)\\b/i,alias:\"return-type\",greedy:!0,lookbehind:!0},{pattern:/(\\)\\s*:\\s*(?:\\?\\s*)?)(?:\\\\?\\b[a-z_]\\w*)+\\b(?!\\\\)/i,alias:[\"class-name-fully-qualified\",\"return-type\"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\\\/}}],constant:t,function:{pattern:/(^|[^\\\\\\w])\\\\?[a-z_](?:[\\w\\\\]*\\w)?(?=\\s*\\()/i,lookbehind:!0,inside:{punctuation:/\\\\/}},property:{pattern:/(->\\s*)\\w+/,lookbehind:!0},number:i,operator:n,punctuation:s};var l={pattern:/\\{\\$(?:\\{(?:\\{[^{}]+\\}|[^{}]+)\\}|[^{}])+\\}|(^|[^\\\\{])\\$+(?:\\w+(?:\\[[^\\r\\n\\[\\]]+\\]|->\\w+)?)/,lookbehind:!0,inside:e.languages.php},r=[{pattern:/<<<'([^']+)'[\\r\\n](?:.*[\\r\\n])*?\\1;/,alias:\"nowdoc-string\",greedy:!0,inside:{delimiter:{pattern:/^<<<'[^']+'|[a-z_]\\w*;$/i,alias:\"symbol\",inside:{punctuation:/^<<<'?|[';]$/}}}},{pattern:/<<<(?:\"([^\"]+)\"[\\r\\n](?:.*[\\r\\n])*?\\1;|([a-z_]\\w*)[\\r\\n](?:.*[\\r\\n])*?\\2;)/i,alias:\"heredoc-string\",greedy:!0,inside:{delimiter:{pattern:/^<<<(?:\"[^\"]+\"|[a-z_]\\w*)|[a-z_]\\w*;$/i,alias:\"symbol\",inside:{punctuation:/^<<<\"?|[\";]$/}},interpolation:l}},{pattern:/`(?:\\\\[\\s\\S]|[^\\\\`])*`/,alias:\"backtick-quoted-string\",greedy:!0},{pattern:/'(?:\\\\[\\s\\S]|[^\\\\'])*'/,alias:\"single-quoted-string\",greedy:!0},{pattern:/\"(?:\\\\[\\s\\S]|[^\\\\\"])*\"/,alias:\"double-quoted-string\",greedy:!0,inside:{interpolation:l}}];e.languages.insertBefore(\"php\",\"variable\",{string:r,attribute:{pattern:/#\\[(?:[^\"'\\/#]|\\/(?![*/])|\\/\\/.*$|#(?!\\[).*$|\\/\\*(?:[^*]|\\*(?!\\/))*\\*\\/|\"(?:\\\\[\\s\\S]|[^\\\\\"])*\"|'(?:\\\\[\\s\\S]|[^\\\\'])*')+\\](?=\\s*[a-z$#])/im,greedy:!0,inside:{\"attribute-content\":{pattern:/^(#\\[)[\\s\\S]+(?=\\]$)/,lookbehind:!0,inside:{comment:a,string:r,\"attribute-class-name\":[{pattern:/([^:]|^)\\b[a-z_]\\w*(?!\\\\)\\b/i,alias:\"class-name\",greedy:!0,lookbehind:!0},{pattern:/([^:]|^)(?:\\\\?\\b[a-z_]\\w*)+/i,alias:[\"class-name\",\"class-name-fully-qualified\"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\\\/}}],constant:t,number:i,operator:n,punctuation:s}},delimiter:{pattern:/^#\\[|\\]$/,alias:\"punctuation\"}}}}),e.hooks.add(\"before-tokenize\",(function(a){/<\\?/.test(a.code)&&e.languages[\"markup-templating\"].buildPlaceholders(a,\"php\",/<\\?(?:[^\"'/#]|\\/(?![*/])|(\"|')(?:\\\\[\\s\\S]|(?!\\1)[^\\\\])*\\1|(?:\\/\\/|#(?!\\[))(?:[^?\\n\\r]|\\?(?!>))*(?=$|\\?>|[\\r\\n])|#\\[|\\/\\*(?:[^*]|\\*(?!\\/))*(?:\\*\\/|$))*?(?:\\?>|$)/g)})),e.hooks.add(\"after-tokenize\",(function(a){e.languages[\"markup-templating\"].tokenizePlaceholders(a,\"php\")}))}(Prism);/components/prism-plsql.min.js\nPrism.languages.plsql=Prism.languages.extend(\"sql\",{comment:{pattern:/\\/\\*[\\s\\S]*?\\*\\/|--.*/,greedy:!0},keyword:/\\b(?:A|ACCESSIBLE|ADD|AGENT|AGGREGATE|ALL|ALTER|AND|ANY|ARRAY|AS|ASC|AT|ATTRIBUTE|AUTHID|AVG|BEGIN|BETWEEN|BFILE_BASE|BINARY|BLOB_BASE|BLOCK|BODY|BOTH|BOUND|BULK|BY|BYTE|C|CALL|CALLING|CASCADE|CASE|CHAR|CHARACTER|CHARSET|CHARSETFORM|CHARSETID|CHAR_BASE|CHECK|CLOB_BASE|CLONE|CLOSE|CLUSTER|CLUSTERS|COLAUTH|COLLECT|COLUMNS|COMMENT|COMMIT|COMMITTED|COMPILED|COMPRESS|CONNECT|CONSTANT|CONSTRUCTOR|CONTEXT|CONTINUE|CONVERT|COUNT|CRASH|CREATE|CREDENTIAL|CURRENT|CURSOR|CUSTOMDATUM|DANGLING|DATA|DATE|DATE_BASE|DAY|DECLARE|DEFAULT|DEFINE|DELETE|DESC|DETERMINISTIC|DIRECTORY|DISTINCT|DOUBLE|DROP|DURATION|ELEMENT|ELSE|ELSIF|EMPTY|END|ESCAPE|EXCEPT|EXCEPTION|EXCEPTIONS|EXCLUSIVE|EXECUTE|EXISTS|EXIT|EXTERNAL|FETCH|FINAL|FIRST|FIXED|FLOAT|FOR|FORALL|FORCE|FROM|FUNCTION|GENERAL|GOTO|GRANT|GROUP|HASH|HAVING|HEAP|HIDDEN|HOUR|IDENTIFIED|IF|IMMEDIATE|IMMUTABLE|IN|INCLUDING|INDEX|INDEXES|INDICATOR|INDICES|INFINITE|INSERT|INSTANTIABLE|INT|INTERFACE|INTERSECT|INTERVAL|INTO|INVALIDATE|IS|ISOLATION|JAVA|LANGUAGE|LARGE|LEADING|LENGTH|LEVEL|LIBRARY|LIKE|LIKE2|LIKE4|LIKEC|LIMIT|LIMITED|LOCAL|LOCK|LONG|LOOP|MAP|MAX|MAXLEN|MEMBER|MERGE|MIN|MINUS|MINUTE|MOD|MODE|MODIFY|MONTH|MULTISET|MUTABLE|NAME|NAN|NATIONAL|NATIVE|NCHAR|NEW|NOCOMPRESS|NOCOPY|NOT|NOWAIT|NULL|NUMBER_BASE|OBJECT|OCICOLL|OCIDATE|OCIDATETIME|OCIDURATION|OCIINTERVAL|OCILOBLOCATOR|OCINUMBER|OCIRAW|OCIREF|OCIREFCURSOR|OCIROWID|OCISTRING|OCITYPE|OF|OLD|ON|ONLY|OPAQUE|OPEN|OPERATOR|OPTION|OR|ORACLE|ORADATA|ORDER|ORGANIZATION|ORLANY|ORLVARY|OTHERS|OUT|OVERLAPS|OVERRIDING|PACKAGE|PARALLEL_ENABLE|PARAMETER|PARAMETERS|PARENT|PARTITION|PASCAL|PERSISTABLE|PIPE|PIPELINED|PLUGGABLE|POLYMORPHIC|PRAGMA|PRECISION|PRIOR|PRIVATE|PROCEDURE|PUBLIC|RAISE|RANGE|RAW|READ|RECORD|REF|REFERENCE|RELIES_ON|REM|REMAINDER|RENAME|RESOURCE|RESULT|RESULT_CACHE|RETURN|RETURNING|REVERSE|REVOKE|ROLLBACK|ROW|SAMPLE|SAVE|SAVEPOINT|SB1|SB2|SB4|SECOND|SEGMENT|SELECT|SELF|SEPARATE|SEQUENCE|SERIALIZABLE|SET|SHARE|SHORT|SIZE|SIZE_T|SOME|SPARSE|SQL|SQLCODE|SQLDATA|SQLNAME|SQLSTATE|STANDARD|START|STATIC|STDDEV|STORED|STRING|STRUCT|STYLE|SUBMULTISET|SUBPARTITION|SUBSTITUTABLE|SUBTYPE|SUM|SYNONYM|TABAUTH|TABLE|TDO|THE|THEN|TIME|TIMESTAMP|TIMEZONE_ABBR|TIMEZONE_HOUR|TIMEZONE_MINUTE|TIMEZONE_REGION|TO|TRAILING|TRANSACTION|TRANSACTIONAL|TRUSTED|TYPE|UB1|UB2|UB4|UNDER|UNION|UNIQUE|UNPLUG|UNSIGNED|UNTRUSTED|UPDATE|USE|USING|VALIST|VALUE|VALUES|VARIABLE|VARIANCE|VARRAY|VARYING|VIEW|VIEWS|VOID|WHEN|WHERE|WHILE|WITH|WORK|WRAPPED|WRITE|YEAR|ZONE)\\b/i,operator:/:=?|=>|[<>^~!]=|\\.\\.|\\|\\||\\*\\*|[-+*/%<>=@]/}),Prism.languages.insertBefore(\"plsql\",\"operator\",{label:{pattern:/<<\\s*\\w+\\s*>>/,alias:\"symbol\"}});!/components/prism-js-templates.js&](function (Prism) {\n\n\tvar templateString = Prism.languages.javascript['template-string'];\n\n\t// see the pattern in prism-javascript.js\n\tvar templateLiteralPattern = templateString.pattern.source;\n\tvar interpolationObject = templateString.inside['interpolation'];\n\tvar interpolationPunctuationObject = interpolationObject.inside['interpolation-punctuation'];\n\tvar interpolationPattern = interpolationObject.pattern.source;\n\n\n\t/**\n\t * Creates a new pattern to match a template string with a special tag.\n\t *\n\t * This will return `undefined` if there is no grammar with the given language id.\n\t *\n\t * @param {string} language The language id of the embedded language. E.g. `markdown`.\n\t * @param {string} tag The regex pattern to match the tag.\n\t * @returns {object | undefined}\n\t * @example\n\t * createTemplate('css', /\\bcss/.source);\n\t */\n\tfunction createTemplate(language, tag) {\n\t\tif (!Prism.languages[language]) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\treturn {\n\t\t\tpattern: RegExp('((?:' + tag + ')\\\\s*)' + templateLiteralPattern),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'template-punctuation': {\n\t\t\t\t\tpattern: /^`|`$/,\n\t\t\t\t\talias: 'string'\n\t\t\t\t},\n\t\t\t\t'embedded-code': {\n\t\t\t\t\tpattern: /[\\s\\S]+/,\n\t\t\t\t\talias: language\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n\n\n\tPrism.languages.javascript['template-string'] = [\n\t\t// styled-jsx:\n\t\t//   css`a { color: #25F; }`\n\t\t// styled-components:\n\t\t//   styled.h1`color: red;`\n\t\tcreateTemplate('css', /\\b(?:styled(?:\\([^)]*\\))?(?:\\s*\\.\\s*\\w+(?:\\([^)]*\\))*)*|css(?:\\s*\\.\\s*(?:global|resolve))?|createGlobalStyle|keyframes)/.source),\n\n\t\t// html`<p></p>`\n\t\t// div.innerHTML = `<p></p>`\n\t\tcreateTemplate('html', /\\bhtml|\\.\\s*(?:inner|outer)HTML\\s*\\+?=/.source),\n\n\t\t// svg`<path fill=\"#fff\" d=\"M55.37 ...\"/>`\n\t\tcreateTemplate('svg', /\\bsvg/.source),\n\n\t\t// md`# h1`, markdown`## h2`\n\t\tcreateTemplate('markdown', /\\b(?:markdown|md)/.source),\n\n\t\t// gql`...`, graphql`...`, graphql.experimental`...`\n\t\tcreateTemplate('graphql', /\\b(?:gql|graphql(?:\\s*\\.\\s*experimental)?)/.source),\n\n\t\t// sql`...`\n\t\tcreateTemplate('sql', /\\bsql/.source),\n\n\t\t// vanilla template string\n\t\ttemplateString\n\t].filter(Boolean);\n\n\n\t/**\n\t * Returns a specific placeholder literal for the given language.\n\t *\n\t * @param {number} counter\n\t * @param {string} language\n\t * @returns {string}\n\t */\n\tfunction getPlaceholder(counter, language) {\n\t\treturn '___' + language.toUpperCase() + '_' + counter + '___';\n\t}\n\n\t/**\n\t * Returns the tokens of `Prism.tokenize` but also runs the `before-tokenize` and `after-tokenize` hooks.\n\t *\n\t * @param {string} code\n\t * @param {any} grammar\n\t * @param {string} language\n\t * @returns {(string|Token)[]}\n\t */\n\tfunction tokenizeWithHooks(code, grammar, language) {\n\t\tvar env = {\n\t\t\tcode: code,\n\t\t\tgrammar: grammar,\n\t\t\tlanguage: language\n\t\t};\n\t\tPrism.hooks.run('before-tokenize', env);\n\t\tenv.tokens = Prism.tokenize(env.code, env.grammar);\n\t\tPrism.hooks.run('after-tokenize', env);\n\t\treturn env.tokens;\n\t}\n\n\t/**\n\t * Returns the token of the given JavaScript interpolation expression.\n\t *\n\t * @param {string} expression The code of the expression. E.g. `\"${42}\"`\n\t * @returns {Token}\n\t */\n\tfunction tokenizeInterpolationExpression(expression) {\n\t\tvar tempGrammar = {};\n\t\ttempGrammar['interpolation-punctuation'] = interpolationPunctuationObject;\n\n\t\t/** @type {Array} */\n\t\tvar tokens = Prism.tokenize(expression, tempGrammar);\n\t\tif (tokens.length === 3) {\n\t\t\t/**\n\t\t\t * The token array will look like this\n\t\t\t * [\n\t\t\t *     [\"interpolation-punctuation\", \"${\"]\n\t\t\t *     \"...\" // JavaScript expression of the interpolation\n\t\t\t *     [\"interpolation-punctuation\", \"}\"]\n\t\t\t * ]\n\t\t\t */\n\n\t\t\tvar args = [1, 1];\n\t\t\targs.push.apply(args, tokenizeWithHooks(tokens[1], Prism.languages.javascript, 'javascript'));\n\n\t\t\ttokens.splice.apply(tokens, args);\n\t\t}\n\n\t\treturn new Prism.Token('interpolation', tokens, interpolationObject.alias, expression);\n\t}\n\n\t/**\n\t * Tokenizes the given code with support for JavaScript interpolation expressions mixed in.\n\t *\n\t * This function has 3 phases:\n\t *\n\t * 1. Replace all JavaScript interpolation expression with a placeholder.\n\t *    The placeholder will have the syntax of a identify of the target language.\n\t * 2. Tokenize the code with placeholders.\n\t * 3. Tokenize the interpolation expressions and re-insert them into the tokenize code.\n\t *    The insertion only works if a placeholder hasn't been \"ripped apart\" meaning that the placeholder has been\n\t *    tokenized as two tokens by the grammar of the embedded language.\n\t *\n\t * @param {string} code\n\t * @param {object} grammar\n\t * @param {string} language\n\t * @returns {Token}\n\t */\n\tfunction tokenizeEmbedded(code, grammar, language) {\n\t\t// 1. First filter out all interpolations\n\n\t\t// because they might be escaped, we need a lookbehind, so we use Prism\n\t\t/** @type {(Token|string)[]} */\n\t\tvar _tokens = Prism.tokenize(code, {\n\t\t\t'interpolation': {\n\t\t\t\tpattern: RegExp(interpolationPattern),\n\t\t\t\tlookbehind: true\n\t\t\t}\n\t\t});\n\n\t\t// replace all interpolations with a placeholder which is not in the code already\n\t\tvar placeholderCounter = 0;\n\t\t/** @type {Object<string, string>} */\n\t\tvar placeholderMap = {};\n\t\tvar embeddedCode = _tokens.map(function (token) {\n\t\t\tif (typeof token === 'string') {\n\t\t\t\treturn token;\n\t\t\t} else {\n\t\t\t\tvar interpolationExpression = token.content;\n\n\t\t\t\tvar placeholder;\n\t\t\t\twhile (code.indexOf(placeholder = getPlaceholder(placeholderCounter++, language)) !== -1) { /* noop */ }\n\t\t\t\tplaceholderMap[placeholder] = interpolationExpression;\n\t\t\t\treturn placeholder;\n\t\t\t}\n\t\t}).join('');\n\n\n\t\t// 2. Tokenize the embedded code\n\n\t\tvar embeddedTokens = tokenizeWithHooks(embeddedCode, grammar, language);\n\n\n\t\t// 3. Re-insert the interpolation\n\n\t\tvar placeholders = Object.keys(placeholderMap);\n\t\tplaceholderCounter = 0;\n\n\t\t/**\n\t\t *\n\t\t * @param {(Token|string)[]} tokens\n\t\t * @returns {void}\n\t\t */\n\t\tfunction walkTokens(tokens) {\n\t\t\tfor (var i = 0; i < tokens.length; i++) {\n\t\t\t\tif (placeholderCounter >= placeholders.length) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar token = tokens[i];\n\n\t\t\t\tif (typeof token === 'string' || typeof token.content === 'string') {\n\t\t\t\t\tvar placeholder = placeholders[placeholderCounter];\n\t\t\t\t\tvar s = typeof token === 'string' ? token : /** @type {string} */ (token.content);\n\n\t\t\t\t\tvar index = s.indexOf(placeholder);\n\t\t\t\t\tif (index !== -1) {\n\t\t\t\t\t\t++placeholderCounter;\n\n\t\t\t\t\t\tvar before = s.substring(0, index);\n\t\t\t\t\t\tvar middle = tokenizeInterpolationExpression(placeholderMap[placeholder]);\n\t\t\t\t\t\tvar after = s.substring(index + placeholder.length);\n\n\t\t\t\t\t\tvar replacement = [];\n\t\t\t\t\t\tif (before) {\n\t\t\t\t\t\t\treplacement.push(before);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treplacement.push(middle);\n\t\t\t\t\t\tif (after) {\n\t\t\t\t\t\t\tvar afterTokens = [after];\n\t\t\t\t\t\t\twalkTokens(afterTokens);\n\t\t\t\t\t\t\treplacement.push.apply(replacement, afterTokens);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (typeof token === 'string') {\n\t\t\t\t\t\t\ttokens.splice.apply(tokens, [i, 1].concat(replacement));\n\t\t\t\t\t\t\ti += replacement.length - 1;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttoken.content = replacement;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tvar content = token.content;\n\t\t\t\t\tif (Array.isArray(content)) {\n\t\t\t\t\t\twalkTokens(content);\n\t\t\t\t\t} else {\n\t\t\t\t\t\twalkTokens([content]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\twalkTokens(embeddedTokens);\n\n\t\treturn new Prism.Token(language, embeddedTokens, 'language-' + language, code);\n\t}\n\n\t/**\n\t * The languages for which JS templating will handle tagged template literals.\n\t *\n\t * JS templating isn't active for only JavaScript but also related languages like TypeScript, JSX, and TSX.\n\t */\n\tvar supportedLanguages = {\n\t\t'javascript': true,\n\t\t'js': true,\n\t\t'typescript': true,\n\t\t'ts': true,\n\t\t'jsx': true,\n\t\t'tsx': true,\n\t};\n\tPrism.hooks.add('after-tokenize', function (env) {\n\t\tif (!(env.language in supportedLanguages)) {\n\t\t\treturn;\n\t\t}\n\n\t\t/**\n\t\t * Finds and tokenizes all template strings with an embedded languages.\n\t\t *\n\t\t * @param {(Token | string)[]} tokens\n\t\t * @returns {void}\n\t\t */\n\t\tfunction findTemplateStrings(tokens) {\n\t\t\tfor (var i = 0, l = tokens.length; i < l; i++) {\n\t\t\t\tvar token = tokens[i];\n\n\t\t\t\tif (typeof token === 'string') {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tvar content = token.content;\n\t\t\t\tif (!Array.isArray(content)) {\n\t\t\t\t\tif (typeof content !== 'string') {\n\t\t\t\t\t\tfindTemplateStrings([content]);\n\t\t\t\t\t}\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (token.type === 'template-string') {\n\t\t\t\t\t/**\n\t\t\t\t\t * A JavaScript template-string token will look like this:\n\t\t\t\t\t *\n\t\t\t\t\t * [\"template-string\", [\n\t\t\t\t\t *     [\"template-punctuation\", \"`\"],\n\t\t\t\t\t *     (\n\t\t\t\t\t *         An array of \"string\" and \"interpolation\" tokens. This is the simple string case.\n\t\t\t\t\t *         or\n\t\t\t\t\t *         [\"embedded-code\", \"...\"] This is the token containing the embedded code.\n\t\t\t\t\t *                                  It also has an alias which is the language of the embedded code.\n\t\t\t\t\t *     ),\n\t\t\t\t\t *     [\"template-punctuation\", \"`\"]\n\t\t\t\t\t * ]]\n\t\t\t\t\t */\n\n\t\t\t\t\tvar embedded = content[1];\n\t\t\t\t\tif (content.length === 3 && typeof embedded !== 'string' && embedded.type === 'embedded-code') {\n\t\t\t\t\t\t// get string content\n\t\t\t\t\t\tvar code = stringContent(embedded);\n\n\t\t\t\t\t\tvar alias = embedded.alias;\n\t\t\t\t\t\tvar language = Array.isArray(alias) ? alias[0] : alias;\n\n\t\t\t\t\t\tvar grammar = Prism.languages[language];\n\t\t\t\t\t\tif (!grammar) {\n\t\t\t\t\t\t\t// the embedded language isn't registered.\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcontent[1] = tokenizeEmbedded(code, grammar, language);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tfindTemplateStrings(content);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfindTemplateStrings(env.tokens);\n\t});\n\n\n\t/**\n\t * Returns the string content of a token or token stream.\n\t *\n\t * @param {string | Token | (string | Token)[]} value\n\t * @returns {string}\n\t */\n\tfunction stringContent(value) {\n\t\tif (typeof value === 'string') {\n\t\t\treturn value;\n\t\t} else if (Array.isArray(value)) {\n\t\t\treturn value.map(stringContent).join('');\n\t\t} else {\n\t\t\treturn stringContent(value.content);\n\t\t}\n\t}\n\n}(Prism));\n/components/prism-twig.js\u00048Prism.languages.twig = {\n\t'comment': /^\\{#[\\s\\S]*?#\\}$/,\n\n\t'tag-name': {\n\t\tpattern: /(^\\{%-?\\s*)\\w+/,\n\t\tlookbehind: true,\n\t\talias: 'keyword'\n\t},\n\t'delimiter': {\n\t\tpattern: /^\\{[{%]-?|-?[%}]\\}$/,\n\t\talias: 'punctuation'\n\t},\n\n\t'string': {\n\t\tpattern: /(\"|')(?:\\\\.|(?!\\1)[^\\\\\\r\\n])*\\1/,\n\t\tinside: {\n\t\t\t'punctuation': /^['\"]|['\"]$/\n\t\t}\n\t},\n\t'keyword': /\\b(?:even|if|odd)\\b/,\n\t'boolean': /\\b(?:false|null|true)\\b/,\n\t'number': /\\b0x[\\dA-Fa-f]+|(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:[Ee][-+]?\\d+)?/,\n\t'operator': [\n\t\t{\n\t\t\tpattern: /(\\s)(?:and|b-and|b-or|b-xor|ends with|in|is|matches|not|or|same as|starts with)(?=\\s)/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t/[=<>]=?|!=|\\*\\*?|\\/\\/?|\\?:?|[-+~%|]/\n\t],\n\t'punctuation': /[()\\[\\]{}:.,]/\n};\n\nPrism.hooks.add('before-tokenize', function (env) {\n\tif (env.language !== 'twig') {\n\t\treturn;\n\t}\n\n\tvar pattern = /\\{(?:#[\\s\\S]*?#|%[\\s\\S]*?%|\\{[\\s\\S]*?\\})\\}/g;\n\tPrism.languages['markup-templating'].buildPlaceholders(env, 'twig', pattern);\n});\n\nPrism.hooks.add('after-tokenize', function (env) {\n\tPrism.languages['markup-templating'].tokenizePlaceholders(env, 'twig');\n});\nG/plugins/remove-initial-line-feed/prism-remove-initial-line-feed.min.js\u0001E\"undefined\"!=typeof Prism&&\"undefined\"!=typeof document&&Prism.hooks.add(\"before-sanity-check\",(function(e){if(e.code){var n=e.element.parentNode,o=/(?:^|\\s)keep-initial-line-feed(?:\\s|$)/;!n||\"pre\"!==n.nodeName.toLowerCase()||o.test(n.className)||o.test(e.element.className)||(e.code=e.code.replace(/^(?:\\r?\\n|\\r)/,\"\"))}}));/components/prism-properties.js\u0001dPrism.languages.properties = {\n\t'comment': /^[ \\t]*[#!].*$/m,\n\t'value': {\n\t\tpattern: /(^[ \\t]*(?:\\\\(?:\\r\\n|[\\s\\S])|[^\\\\\\s:=])+(?: *[=:] *(?! )| ))(?:\\\\(?:\\r\\n|[\\s\\S])|[^\\\\\\r\\n])+/m,\n\t\tlookbehind: true,\n\t\talias: 'attr-value'\n\t},\n\t'key': {\n\t\tpattern: /^[ \\t]*(?:\\\\(?:\\r\\n|[\\s\\S])|[^\\\\\\s:=])+(?= *[=:]| )/m,\n\t\talias: 'attr-name'\n\t},\n\t'punctuation': /[=:]/\n};\n /components/prism-fortran.min.js\u0004Prism.languages.fortran={\"quoted-number\":{pattern:/[BOZ](['\"])[A-F0-9]+\\1/i,alias:\"number\"},string:{pattern:/(?:\\b\\w+_)?(['\"])(?:\\1\\1|&(?:\\r\\n?|\\n)(?:[ \\t]*!.*(?:\\r\\n?|\\n)|(?![ \\t]*!))|(?!\\1).)*(?:\\1|&)/,inside:{comment:{pattern:/(&(?:\\r\\n?|\\n)\\s*)!.*/,lookbehind:!0}}},comment:{pattern:/!.*/,greedy:!0},boolean:/\\.(?:FALSE|TRUE)\\.(?:_\\w+)?/i,number:/(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:[ED][+-]?\\d+)?(?:_\\w+)?/i,keyword:[/\\b(?:CHARACTER|COMPLEX|DOUBLE ?PRECISION|INTEGER|LOGICAL|REAL)\\b/i,/\\b(?:END ?)?(?:BLOCK ?DATA|DO|FILE|FORALL|FUNCTION|IF|INTERFACE|MODULE(?! PROCEDURE)|PROGRAM|SELECT|SUBROUTINE|TYPE|WHERE)\\b/i,/\\b(?:ALLOCATABLE|ALLOCATE|BACKSPACE|CALL|CASE|CLOSE|COMMON|CONTAINS|CONTINUE|CYCLE|DATA|DEALLOCATE|DIMENSION|DO|END|EQUIVALENCE|EXIT|EXTERNAL|FORMAT|GO ?TO|IMPLICIT(?: NONE)?|INQUIRE|INTENT|INTRINSIC|MODULE PROCEDURE|NAMELIST|NULLIFY|OPEN|OPTIONAL|PARAMETER|POINTER|PRINT|PRIVATE|PUBLIC|READ|RETURN|REWIND|SAVE|SELECT|STOP|TARGET|WHILE|WRITE)\\b/i,/\\b(?:ASSIGNMENT|DEFAULT|ELEMENTAL|ELSE|ELSEIF|ELSEWHERE|ENTRY|IN|INCLUDE|INOUT|KIND|NULL|ONLY|OPERATOR|OUT|PURE|RECURSIVE|RESULT|SEQUENCE|STAT|THEN|USE)\\b/i],operator:[/\\*\\*|\\/\\/|=>|[=\\/]=|[<>]=?|::|[+\\-*=%]|\\.[A-Z]+\\./i,{pattern:/(^|(?!\\().)\\/(?!\\))/,lookbehind:!0}],punctuation:/\\(\\/|\\/\\)|[(),;:&]/};+/plugins/autoloader/prism-autoloader.min.js\u0016!function(){if(\"undefined\"!=typeof Prism&&\"undefined\"!=typeof document){var e={javascript:\"clike\",actionscript:\"javascript\",apex:[\"clike\",\"sql\"],arduino:\"cpp\",aspnet:[\"markup\",\"csharp\"],birb:\"clike\",bison:\"c\",c:\"clike\",csharp:\"clike\",cpp:\"c\",cfscript:\"clike\",chaiscript:[\"clike\",\"cpp\"],cilkc:\"c\",cilkcpp:\"cpp\",coffeescript:\"javascript\",crystal:\"ruby\",\"css-extras\":\"css\",d:\"clike\",dart:\"clike\",django:\"markup-templating\",ejs:[\"javascript\",\"markup-templating\"],etlua:[\"lua\",\"markup-templating\"],erb:[\"ruby\",\"markup-templating\"],fsharp:\"clike\",\"firestore-security-rules\":\"clike\",flow:\"javascript\",ftl:\"markup-templating\",gml:\"clike\",glsl:\"c\",go:\"clike\",gradle:\"clike\",groovy:\"clike\",haml:\"ruby\",handlebars:\"markup-templating\",haxe:\"clike\",hlsl:\"c\",idris:\"haskell\",java:\"clike\",javadoc:[\"markup\",\"java\",\"javadoclike\"],jolie:\"clike\",jsdoc:[\"javascript\",\"javadoclike\",\"typescript\"],\"js-extras\":\"javascript\",json5:\"json\",jsonp:\"json\",\"js-templates\":\"javascript\",kotlin:\"clike\",latte:[\"clike\",\"markup-templating\",\"php\"],less:\"css\",lilypond:\"scheme\",liquid:\"markup-templating\",markdown:\"markup\",\"markup-templating\":\"markup\",mongodb:\"javascript\",n4js:\"javascript\",objectivec:\"c\",opencl:\"c\",parser:\"markup\",php:\"markup-templating\",phpdoc:[\"php\",\"javadoclike\"],\"php-extras\":\"php\",plsql:\"sql\",processing:\"clike\",protobuf:\"clike\",pug:[\"markup\",\"javascript\"],purebasic:\"clike\",purescript:\"haskell\",qsharp:\"clike\",qml:\"javascript\",qore:\"clike\",racket:\"scheme\",cshtml:[\"markup\",\"csharp\"],jsx:[\"markup\",\"javascript\"],tsx:[\"jsx\",\"typescript\"],reason:\"clike\",ruby:\"clike\",sass:\"css\",scss:\"css\",scala:\"java\",\"shell-session\":\"bash\",smarty:\"markup-templating\",solidity:\"clike\",soy:\"markup-templating\",sparql:\"turtle\",sqf:\"clike\",squirrel:\"clike\",stata:[\"mata\",\"java\",\"python\"],\"t4-cs\":[\"t4-templating\",\"csharp\"],\"t4-vb\":[\"t4-templating\",\"vbnet\"],tap:\"yaml\",tt2:[\"clike\",\"markup-templating\"],textile:\"markup\",twig:\"markup-templating\",typescript:\"javascript\",v:\"clike\",vala:\"clike\",vbnet:\"basic\",velocity:\"markup\",wiki:\"markup\",xeora:\"markup\",\"xml-doc\":\"markup\",xquery:\"markup\"},a={html:\"markup\",xml:\"markup\",svg:\"markup\",mathml:\"markup\",ssml:\"markup\",atom:\"markup\",rss:\"markup\",js:\"javascript\",g4:\"antlr4\",ino:\"arduino\",\"arm-asm\":\"armasm\",art:\"arturo\",adoc:\"asciidoc\",avs:\"avisynth\",avdl:\"avro-idl\",gawk:\"awk\",sh:\"bash\",shell:\"bash\",shortcode:\"bbcode\",rbnf:\"bnf\",oscript:\"bsl\",cs:\"csharp\",dotnet:\"csharp\",cfc:\"cfscript\",\"cilk-c\":\"cilkc\",\"cilk-cpp\":\"cilkcpp\",cilk:\"cilkcpp\",coffee:\"coffeescript\",conc:\"concurnas\",jinja2:\"django\",\"dns-zone\":\"dns-zone-file\",dockerfile:\"docker\",gv:\"dot\",eta:\"ejs\",xlsx:\"excel-formula\",xls:\"excel-formula\",gamemakerlanguage:\"gml\",po:\"gettext\",gni:\"gn\",ld:\"linker-script\",\"go-mod\":\"go-module\",hbs:\"handlebars\",mustache:\"handlebars\",hs:\"haskell\",idr:\"idris\",gitignore:\"ignore\",hgignore:\"ignore\",npmignore:\"ignore\",webmanifest:\"json\",kt:\"kotlin\",kts:\"kotlin\",kum:\"kumir\",tex:\"latex\",context:\"latex\",ly:\"lilypond\",emacs:\"lisp\",elisp:\"lisp\",\"emacs-lisp\":\"lisp\",md:\"markdown\",moon:\"moonscript\",n4jsd:\"n4js\",nani:\"naniscript\",objc:\"objectivec\",qasm:\"openqasm\",objectpascal:\"pascal\",px:\"pcaxis\",pcode:\"peoplecode\",plantuml:\"plant-uml\",pq:\"powerquery\",mscript:\"powerquery\",pbfasm:\"purebasic\",purs:\"purescript\",py:\"python\",qs:\"qsharp\",rkt:\"racket\",razor:\"cshtml\",rpy:\"renpy\",res:\"rescript\",robot:\"robotframework\",rb:\"ruby\",\"sh-session\":\"shell-session\",shellsession:\"shell-session\",smlnj:\"sml\",sol:\"solidity\",sln:\"solution-file\",rq:\"sparql\",sclang:\"supercollider\",t4:\"t4-cs\",trickle:\"tremor\",troy:\"tremor\",trig:\"turtle\",ts:\"typescript\",tsconfig:\"typoscript\",uscript:\"unrealscript\",uc:\"unrealscript\",url:\"uri\",vb:\"visual-basic\",vba:\"visual-basic\",webidl:\"web-idl\",mathematica:\"wolfram\",nb:\"wolfram\",wl:\"wolfram\",xeoracube:\"xeora\",yml:\"yaml\"},r={},s=\"components/\",i=Prism.util.currentScript();if(i){var t=/\\bplugins\\/autoloader\\/prism-autoloader\\.(?:min\\.)?js(?:\\?[^\\r\\n/]*)?$/i,c=/(^|\\/)[\\w-]+\\.(?:min\\.)?js(?:\\?[^\\r\\n/]*)?$/i,l=i.getAttribute(\"data-autoloader-path\");if(null!=l)s=l.trim().replace(/\\/?$/,\"/\");else{var p=i.src;t.test(p)?s=p.replace(t,\"components/\"):c.test(p)&&(s=p.replace(c,\"$1components/\"))}}var n=Prism.plugins.autoloader={languages_path:s,use_minified:!0,loadLanguages:m};Prism.hooks.add(\"complete\",(function(e){var a=e.element,r=e.language;if(a&&r&&\"none\"!==r){var s=function(e){var a=(e.getAttribute(\"data-dependencies\")||\"\").trim();if(!a){var r=e.parentElement;r&&\"pre\"===r.tagName.toLowerCase()&&(a=(r.getAttribute(\"data-dependencies\")||\"\").trim())}return a?a.split(/\\s*,\\s*/g):[]}(a);/^diff-./i.test(r)?(s.push(\"diff\"),s.push(r.substr(\"diff-\".length))):s.push(r),s.every(o)||m(s,(function(){Prism.highlightElement(a)}))}}))}function o(e){if(e.indexOf(\"!\")>=0)return!1;if((e=a[e]||e)in Prism.languages)return!0;var s=r[e];return s&&!s.error&&!1===s.loading}function m(s,i,t){\"string\"==typeof s&&(s=[s]);var c=s.length,l=0,p=!1;function k(){p||++l===c&&i&&i(s)}0!==c?s.forEach((function(s){!function(s,i,t){var c=s.indexOf(\"!\")>=0;function l(){var e=r[s];e||(e=r[s]={callbacks:[]}),e.callbacks.push({success:i,error:t}),!c&&o(s)?u(s,\"success\"):!c&&e.error?u(s,\"error\"):!c&&e.loading||(e.loading=!0,e.error=!1,function(e,a,r){var s=document.createElement(\"script\");s.src=e,s.async=!0,s.onload=function(){document.body.removeChild(s),a&&a()},s.onerror=function(){document.body.removeChild(s),r&&r()},document.body.appendChild(s)}(function(e){return n.languages_path+\"prism-\"+e+(n.use_minified?\".min\":\"\")+\".js\"}(s),(function(){e.loading=!1,u(s,\"success\")}),(function(){e.loading=!1,e.error=!0,u(s,\"error\")})))}s=s.replace(\"!\",\"\");var p=e[s=a[s]||s];p&&p.length?m(p,l,t):l()}(s,k,(function(){p||(p=!0,t&&t(s))}))})):i&&setTimeout(i,0)}function u(e,a){if(r[e]){for(var s=r[e].callbacks,i=0,t=s.length;i<t;i++){var c=s[i][a];c&&setTimeout(c,0)}s.length=0}}}();%/components/prism-unrealscript.min.js\u0007\u0001Prism.languages.unrealscript={comment:/\\/\\/.*|\\/\\*[\\s\\S]*?\\*\\//,string:{pattern:/([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1/,greedy:!0},category:{pattern:/(\\b(?:(?:autoexpand|hide|show)categories|var)\\s*\\()[^()]+(?=\\))/,lookbehind:!0,greedy:!0,alias:\"property\"},metadata:{pattern:/(\\w\\s*)<\\s*\\w+\\s*=[^<>|=\\r\\n]+(?:\\|\\s*\\w+\\s*=[^<>|=\\r\\n]+)*>/,lookbehind:!0,greedy:!0,inside:{property:/\\b\\w+(?=\\s*=)/,operator:/=/,punctuation:/[<>|]/}},macro:{pattern:/`\\w+/,alias:\"property\"},\"class-name\":{pattern:/(\\b(?:class|enum|extends|interface|state(?:\\(\\))?|struct|within)\\s+)\\w+/,lookbehind:!0},keyword:/\\b(?:abstract|actor|array|auto|autoexpandcategories|bool|break|byte|case|class|classgroup|client|coerce|collapsecategories|config|const|continue|default|defaultproperties|delegate|dependson|deprecated|do|dontcollapsecategories|editconst|editinlinenew|else|enum|event|exec|export|extends|final|float|for|forcescriptorder|foreach|function|goto|guid|hidecategories|hidedropdown|if|ignores|implements|inherits|input|int|interface|iterator|latent|local|material|name|native|nativereplication|noexport|nontransient|noteditinlinenew|notplaceable|operator|optional|out|pawn|perobjectconfig|perobjectlocalized|placeable|postoperator|preoperator|private|protected|reliable|replication|return|server|showcategories|simulated|singular|state|static|string|struct|structdefault|structdefaultproperties|switch|texture|transient|travel|unreliable|until|var|vector|while|within)\\b/,function:/\\b[a-z_]\\w*(?=\\s*\\()/i,boolean:/\\b(?:false|true)\\b/,number:/\\b0x[\\da-f]+\\b|(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:e[+-]?\\d+)?/i,operator:/>>|<<|--|\\+\\+|\\*\\*|[-+*/~!=<>$@]=?|&&?|\\|\\|?|\\^\\^?|[?:%]|\\b(?:ClockwiseFrom|Cross|Dot)\\b/,punctuation:/[()[\\]{};,.]/},Prism.languages.uc=Prism.languages.uscript=Prism.languages.unrealscript;/components/prism-eiffel.min.js\u0003Prism.languages.eiffel={comment:/--.*/,string:[{pattern:/\"([^[]*)\\[[\\s\\S]*?\\]\\1\"/,greedy:!0},{pattern:/\"([^{]*)\\{[\\s\\S]*?\\}\\1\"/,greedy:!0},{pattern:/\"(?:%(?:(?!\\n)\\s)*\\n\\s*%|%\\S|[^%\"\\r\\n])*\"/,greedy:!0}],char:/'(?:%.|[^%'\\r\\n])+'/,keyword:/\\b(?:across|agent|alias|all|and|as|assign|attached|attribute|check|class|convert|create|Current|debug|deferred|detachable|do|else|elseif|end|ensure|expanded|export|external|feature|from|frozen|if|implies|inherit|inspect|invariant|like|local|loop|not|note|obsolete|old|once|or|Precursor|redefine|rename|require|rescue|Result|retry|select|separate|some|then|undefine|until|variant|Void|when|xor)\\b/i,boolean:/\\b(?:False|True)\\b/i,\"class-name\":/\\b[A-Z][\\dA-Z_]*\\b/,number:[/\\b0[xcb][\\da-f](?:_*[\\da-f])*\\b/i,/(?:\\b\\d(?:_*\\d)*)?\\.(?:(?:\\d(?:_*\\d)*)?e[+-]?)?\\d(?:_*\\d)*\\b|\\b\\d(?:_*\\d)*\\b\\.?/i],punctuation:/:=|<<|>>|\\(\\||\\|\\)|->|\\.(?=\\w)|[{}[\\];(),:?]/,operator:/\\\\\\\\|\\|\\.\\.\\||\\.\\.|\\/[~\\/=]?|[><]=?|[-+*^=~]/};/components/prism-awk.js\u0003:Prism.languages.awk = {\n\t'hashbang': {\n\t\tpattern: /^#!.*/,\n\t\tgreedy: true,\n\t\talias: 'comment'\n\t},\n\t'comment': {\n\t\tpattern: /#.*/,\n\t\tgreedy: true\n\t},\n\t'string': {\n\t\tpattern: /(^|[^\\\\])\"(?:[^\\\\\"\\r\\n]|\\\\.)*\"/,\n\t\tlookbehind: true,\n\t\tgreedy: true\n\t},\n\t'regex': {\n\t\tpattern: /((?:^|[^\\w\\s)])\\s*)\\/(?:[^\\/\\\\\\r\\n]|\\\\.)*\\//,\n\t\tlookbehind: true,\n\t\tgreedy: true\n\t},\n\n\t'variable': /\\$\\w+/,\n\t'keyword': /\\b(?:BEGIN|BEGINFILE|END|ENDFILE|break|case|continue|default|delete|do|else|exit|for|function|getline|if|in|next|nextfile|printf?|return|switch|while)\\b|@(?:include|load)\\b/,\n\n\t'function': /\\b[a-z_]\\w*(?=\\s*\\()/i,\n\t'number': /\\b(?:\\d+(?:\\.\\d+)?(?:e[+-]?\\d+)?|0x[a-fA-F0-9]+)\\b/,\n\n\t'operator': /--|\\+\\+|!?~|>&|>>|<<|(?:\\*\\*|[<>!=+\\-*/%^])=?|&&|\\|[|&]|[?:]/,\n\t'punctuation': /[()[\\]{},;]/\n};\n\nPrism.languages.gawk = Prism.languages.awk;\n/components/prism-wren.min.js\u0005KPrism.languages.wren={comment:[{pattern:/\\/\\*(?:[^*/]|\\*(?!\\/)|\\/(?!\\*)|\\/\\*(?:[^*/]|\\*(?!\\/)|\\/(?!\\*)|\\/\\*(?:[^*/]|\\*(?!\\/)|\\/(?!\\*))*\\*\\/)*\\*\\/)*\\*\\//,greedy:!0},{pattern:/(^|[^\\\\:])\\/\\/.*/,lookbehind:!0,greedy:!0}],\"triple-quoted-string\":{pattern:/\"\"\"[\\s\\S]*?\"\"\"/,greedy:!0,alias:\"string\"},\"string-literal\":null,hashbang:{pattern:/^#!\\/.+/,greedy:!0,alias:\"comment\"},attribute:{pattern:/#!?[ \\t\\u3000]*\\w+/,alias:\"keyword\"},\"class-name\":[{pattern:/(\\bclass\\s+)\\w+/,lookbehind:!0},/\\b[A-Z][a-z\\d_]*\\b/],constant:/\\b[A-Z][A-Z\\d_]*\\b/,null:{pattern:/\\bnull\\b/,alias:\"keyword\"},keyword:/\\b(?:as|break|class|construct|continue|else|for|foreign|if|import|in|is|return|static|super|this|var|while)\\b/,boolean:/\\b(?:false|true)\\b/,number:/\\b(?:0x[\\da-f]+|\\d+(?:\\.\\d+)?(?:e[+-]?\\d+)?)\\b/i,function:/\\b[a-z_]\\w*(?=\\s*[({])/i,operator:/<<|>>|[=!<>]=?|&&|\\|\\||[-+*/%~^&|?:]|\\.{2,3}/,punctuation:/[\\[\\](){}.,;]/},Prism.languages.wren[\"string-literal\"]={pattern:/(^|[^\\\\\"])\"(?:[^\\\\\"%]|\\\\[\\s\\S]|%(?!\\()|%\\((?:[^()]|\\((?:[^()]|\\([^)]*\\))*\\))*\\))*\"/,lookbehind:!0,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^\\\\])(?:\\\\{2})*)%\\((?:[^()]|\\((?:[^()]|\\([^)]*\\))*\\))*\\)/,lookbehind:!0,inside:{expression:{pattern:/^(%\\()[\\s\\S]+(?=\\)$)/,lookbehind:!0,inside:Prism.languages.wren},\"interpolation-punctuation\":{pattern:/^%\\(|\\)$/,alias:\"punctuation\"}}},string:/[\\s\\S]+/}};/components/prism-bash.min.js\u0017!function(e){var t=\"\\\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\\\b\",a={pattern:/(^([\"']?)\\w+\\2)[ \\t]+\\S.*/,lookbehind:!0,alias:\"punctuation\",inside:null},n={bash:a,environment:{pattern:RegExp(\"\\\\$\"+t),alias:\"constant\"},variable:[{pattern:/\\$?\\(\\([\\s\\S]+?\\)\\)/,greedy:!0,inside:{variable:[{pattern:/(^\\$\\(\\([\\s\\S]+)\\)\\)/,lookbehind:!0},/^\\$\\(\\(/],number:/\\b0x[\\dA-Fa-f]+\\b|(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:[Ee]-?\\d+)?/,operator:/--|\\+\\+|\\*\\*=?|<<=?|>>=?|&&|\\|\\||[=!+\\-*/%<>^&|]=?|[?~:]/,punctuation:/\\(\\(?|\\)\\)?|,|;/}},{pattern:/\\$\\((?:\\([^)]+\\)|[^()])+\\)|`[^`]+`/,greedy:!0,inside:{variable:/^\\$\\(|^`|\\)$|`$/}},{pattern:/\\$\\{[^}]+\\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\\/]|##?|%%?|\\^\\^?|,,?/,punctuation:/[\\[\\]]/,environment:{pattern:RegExp(\"(\\\\{)\"+t),lookbehind:!0,alias:\"constant\"}}},/\\$(?:\\w+|[#?*!@$])/],entity:/\\\\(?:[abceEfnrtv\\\\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/};e.languages.bash={shebang:{pattern:/^#!\\s*\\/.*/,alias:\"important\"},comment:{pattern:/(^|[^\"{\\\\$])#.*/,lookbehind:!0},\"function-name\":[{pattern:/(\\bfunction\\s+)[\\w-]+(?=(?:\\s*\\(?:\\s*\\))?\\s*\\{)/,lookbehind:!0,alias:\"function\"},{pattern:/\\b[\\w-]+(?=\\s*\\(\\s*\\)\\s*\\{)/,alias:\"function\"}],\"for-or-select\":{pattern:/(\\b(?:for|select)\\s+)\\w+(?=\\s+in\\s)/,alias:\"variable\",lookbehind:!0},\"assign-left\":{pattern:/(^|[\\s;|&]|[<>]\\()\\w+(?:\\.\\w+)*(?=\\+?=)/,inside:{environment:{pattern:RegExp(\"(^|[\\\\s;|&]|[<>]\\\\()\"+t),lookbehind:!0,alias:\"constant\"}},alias:\"variable\",lookbehind:!0},parameter:{pattern:/(^|\\s)-{1,2}(?:\\w+:[+-]?)?\\w+(?:\\.\\w+)*(?=[=\\s]|$)/,alias:\"variable\",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\\s*)(\\w+)\\s[\\s\\S]*?(?:\\r?\\n|\\r)\\2/,lookbehind:!0,greedy:!0,inside:n},{pattern:/((?:^|[^<])<<-?\\s*)([\"'])(\\w+)\\2\\s[\\s\\S]*?(?:\\r?\\n|\\r)\\3/,lookbehind:!0,greedy:!0,inside:{bash:a}},{pattern:/(^|[^\\\\](?:\\\\\\\\)*)\"(?:\\\\[\\s\\S]|\\$\\([^)]+\\)|\\$(?!\\()|`[^`]+`|[^\"\\\\`$])*\"/,lookbehind:!0,greedy:!0,inside:n},{pattern:/(^|[^$\\\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\\$'(?:[^'\\\\]|\\\\[\\s\\S])*'/,greedy:!0,inside:{entity:n.entity}}],environment:{pattern:RegExp(\"\\\\$?\"+t),alias:\"constant\"},variable:n.variable,function:{pattern:/(^|[\\s;|&]|[<>]\\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cargo|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|java|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|sysctl|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\\s;|&]|[<>]\\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\\s;|&]|[<>]\\()(?:\\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\\s;|&])/,lookbehind:!0,alias:\"class-name\"},boolean:{pattern:/(^|[\\s;|&]|[<>]\\()(?:false|true)(?=$|[)\\s;|&])/,lookbehind:!0},\"file-descriptor\":{pattern:/\\B&\\d\\b/,alias:\"important\"},operator:{pattern:/\\d?<>|>\\||\\+=|=[=~]?|!=?|<<[<-]?|[&\\d]?>>|\\d[<>]&?|[<>][&=]?|&[>&]?|\\|[&|]?/,inside:{\"file-descriptor\":{pattern:/^\\d/,alias:\"important\"}}},punctuation:/\\$?\\(\\(?|\\)\\)?|\\.\\.|[{}[\\];\\\\]/,number:{pattern:/(^|\\s)(?:[1-9]\\d*|0)(?:[.,]\\d+)?\\b/,lookbehind:!0}},a.inside=e.languages.bash;for(var s=[\"comment\",\"function-name\",\"for-or-select\",\"assign-left\",\"parameter\",\"string\",\"environment\",\"function\",\"keyword\",\"builtin\",\"boolean\",\"file-descriptor\",\"operator\",\"punctuation\",\"number\"],o=n.variable[1].inside,i=0;i<s.length;i++)o[s[i]]=e.languages.bash[s[i]];e.languages.sh=e.languages.bash,e.languages.shell=e.languages.bash}(Prism);/components/prism-twig.min.js\u0003xPrism.languages.twig={comment:/^\\{#[\\s\\S]*?#\\}$/,\"tag-name\":{pattern:/(^\\{%-?\\s*)\\w+/,lookbehind:!0,alias:\"keyword\"},delimiter:{pattern:/^\\{[{%]-?|-?[%}]\\}$/,alias:\"punctuation\"},string:{pattern:/(\"|')(?:\\\\.|(?!\\1)[^\\\\\\r\\n])*\\1/,inside:{punctuation:/^['\"]|['\"]$/}},keyword:/\\b(?:even|if|odd)\\b/,boolean:/\\b(?:false|null|true)\\b/,number:/\\b0x[\\dA-Fa-f]+|(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:[Ee][-+]?\\d+)?/,operator:[{pattern:/(\\s)(?:and|b-and|b-or|b-xor|ends with|in|is|matches|not|or|same as|starts with)(?=\\s)/,lookbehind:!0},/[=<>]=?|!=|\\*\\*?|\\/\\/?|\\?:?|[-+~%|]/],punctuation:/[()\\[\\]{}:.,]/},Prism.hooks.add(\"before-tokenize\",(function(e){\"twig\"===e.language&&Prism.languages[\"markup-templating\"].buildPlaceholders(e,\"twig\",/\\{(?:#[\\s\\S]*?#|%[\\s\\S]*?%|\\{[\\s\\S]*?\\})\\}/g)})),Prism.hooks.add(\"after-tokenize\",(function(e){Prism.languages[\"markup-templating\"].tokenizePlaceholders(e,\"twig\")}));/components/prism-c.min.js\u0007ePrism.languages.c=Prism.languages.extend(\"clike\",{comment:{pattern:/\\/\\/(?:[^\\r\\n\\\\]|\\\\(?:\\r\\n?|\\n|(?![\\r\\n])))*|\\/\\*[\\s\\S]*?(?:\\*\\/|$)/,greedy:!0},string:{pattern:/\"(?:\\\\(?:\\r\\n|[\\s\\S])|[^\"\\\\\\r\\n])*\"/,greedy:!0},\"class-name\":{pattern:/(\\b(?:enum|struct)\\s+(?:__attribute__\\s*\\(\\([\\s\\S]*?\\)\\)\\s*)?)\\w+|\\b[a-z]\\w*_t\\b/,lookbehind:!0},keyword:/\\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\\b/,function:/\\b[a-z_]\\w*(?=\\s*\\()/i,number:/(?:\\b0x(?:[\\da-f]+(?:\\.[\\da-f]*)?|\\.[\\da-f]+)(?:p[+-]?\\d+)?|(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:e[+-]?\\d+)?)[ful]{0,4}/i,operator:/>>=?|<<=?|->|([-+&|:])\\1|[?:~]|[-+*/%&|^!=<>]=?/}),Prism.languages.insertBefore(\"c\",\"string\",{char:{pattern:/'(?:\\\\(?:\\r\\n|[\\s\\S])|[^'\\\\\\r\\n]){0,32}'/,greedy:!0}}),Prism.languages.insertBefore(\"c\",\"string\",{macro:{pattern:/(^[\\t ]*)#\\s*[a-z](?:[^\\r\\n\\\\/]|\\/(?!\\*)|\\/\\*(?:[^*]|\\*(?!\\/))*\\*\\/|\\\\(?:\\r\\n|[\\s\\S]))*/im,lookbehind:!0,greedy:!0,alias:\"property\",inside:{string:[{pattern:/^(#\\s*include\\s*)<[^>]+>/,lookbehind:!0},Prism.languages.c.string],char:Prism.languages.c.char,comment:Prism.languages.c.comment,\"macro-name\":[{pattern:/(^#\\s*define\\s+)\\w+\\b(?!\\()/i,lookbehind:!0},{pattern:/(^#\\s*define\\s+)\\w+\\b(?=\\()/i,lookbehind:!0,alias:\"function\"}],directive:{pattern:/^(#\\s*)[a-z]+/,lookbehind:!0,alias:\"keyword\"},\"directive-hash\":/^#/,punctuation:/##|\\\\(?=[\\r\\n])/,expression:{pattern:/\\S[\\s\\S]*/,inside:Prism.languages.c}}}}),Prism.languages.insertBefore(\"c\",\"function\",{constant:/\\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\\b/}),delete Prism.languages.c.boolean;/components/prism-vala.js\tPrism.languages.vala = Prism.languages.extend('clike', {\n\t// Classes copied from prism-csharp\n\t'class-name': [\n\t\t{\n\t\t\t// (Foo bar, Bar baz)\n\t\t\tpattern: /\\b[A-Z]\\w*(?:\\.\\w+)*\\b(?=(?:\\?\\s+|\\*?\\s+\\*?)\\w)/,\n\t\t\tinside: {\n\t\t\t\tpunctuation: /\\./\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t// [Foo]\n\t\t\tpattern: /(\\[)[A-Z]\\w*(?:\\.\\w+)*\\b/,\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\tpunctuation: /\\./\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t// class Foo : Bar\n\t\t\tpattern: /(\\b(?:class|interface)\\s+[A-Z]\\w*(?:\\.\\w+)*\\s*:\\s*)[A-Z]\\w*(?:\\.\\w+)*\\b/,\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\tpunctuation: /\\./\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t// class Foo\n\t\t\tpattern: /((?:\\b(?:class|enum|interface|new|struct)\\s+)|(?:catch\\s+\\())[A-Z]\\w*(?:\\.\\w+)*\\b/,\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\tpunctuation: /\\./\n\t\t\t}\n\t\t}\n\t],\n\t'keyword': /\\b(?:abstract|as|assert|async|base|bool|break|case|catch|char|class|const|construct|continue|default|delegate|delete|do|double|dynamic|else|ensures|enum|errordomain|extern|finally|float|for|foreach|get|if|in|inline|int|int16|int32|int64|int8|interface|internal|is|lock|long|namespace|new|null|out|override|owned|params|private|protected|public|ref|requires|return|set|short|signal|sizeof|size_t|ssize_t|static|string|struct|switch|this|throw|throws|try|typeof|uchar|uint|uint16|uint32|uint64|uint8|ulong|unichar|unowned|ushort|using|value|var|virtual|void|volatile|weak|while|yield)\\b/i,\n\t'function': /\\b\\w+(?=\\s*\\()/,\n\t'number': /(?:\\b0x[\\da-f]+\\b|(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:e[+-]?\\d+)?)(?:f|u?l?)?/i,\n\t'operator': /\\+\\+|--|&&|\\|\\||<<=?|>>=?|=>|->|~|[+\\-*\\/%&^|=!<>]=?|\\?\\??|\\.\\.\\./,\n\t'punctuation': /[{}[\\];(),.:]/,\n\t'constant': /\\b[A-Z0-9_]+\\b/\n});\n\nPrism.languages.insertBefore('vala', 'string', {\n\t'raw-string': {\n\t\tpattern: /\"\"\"[\\s\\S]*?\"\"\"/,\n\t\tgreedy: true,\n\t\talias: 'string'\n\t},\n\t'template-string': {\n\t\tpattern: /@\"[\\s\\S]*?\"/,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'interpolation': {\n\t\t\t\tpattern: /\\$(?:\\([^)]*\\)|[a-zA-Z]\\w*)/,\n\t\t\t\tinside: {\n\t\t\t\t\t'delimiter': {\n\t\t\t\t\t\tpattern: /^\\$\\(?|\\)$/,\n\t\t\t\t\t\talias: 'punctuation'\n\t\t\t\t\t},\n\t\t\t\t\trest: Prism.languages.vala\n\t\t\t\t}\n\t\t\t},\n\t\t\t'string': /[\\s\\S]+/\n\t\t}\n\t}\n});\n\nPrism.languages.insertBefore('vala', 'keyword', {\n\t'regex': {\n\t\tpattern: /\\/(?:\\[(?:[^\\]\\\\\\r\\n]|\\\\.)*\\]|\\\\.|[^/\\\\\\[\\r\\n])+\\/[imsx]{0,4}(?=\\s*(?:$|[\\r\\n,.;})\\]]))/,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'regex-source': {\n\t\t\t\tpattern: /^(\\/)[\\s\\S]+(?=\\/[a-z]*$)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'language-regex',\n\t\t\t\tinside: Prism.languages.regex\n\t\t\t},\n\t\t\t'regex-delimiter': /^\\//,\n\t\t\t'regex-flags': /^[a-z]+$/,\n\t\t}\n\t}\n});\n#/components/prism-handlebars.min.js\u0003!function(a){a.languages.handlebars={comment:/\\{\\{![\\s\\S]*?\\}\\}/,delimiter:{pattern:/^\\{\\{\\{?|\\}\\}\\}?$/,alias:\"punctuation\"},string:/([\"'])(?:\\\\.|(?!\\1)[^\\\\\\r\\n])*\\1/,number:/\\b0x[\\dA-Fa-f]+\\b|(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:[Ee][+-]?\\d+)?/,boolean:/\\b(?:false|true)\\b/,block:{pattern:/^(\\s*(?:~\\s*)?)[#\\/]\\S+?(?=\\s*(?:~\\s*)?$|\\s)/,lookbehind:!0,alias:\"keyword\"},brackets:{pattern:/\\[[^\\]]+\\]/,inside:{punctuation:/\\[|\\]/,variable:/[\\s\\S]+/}},punctuation:/[!\"#%&':()*+,.\\/;<=>@\\[\\\\\\]^`{|}~]/,variable:/[^!\"#%&'()*+,\\/;<=>@\\[\\\\\\]^`{|}~\\s]+/},a.hooks.add(\"before-tokenize\",(function(e){a.languages[\"markup-templating\"].buildPlaceholders(e,\"handlebars\",/\\{\\{\\{[\\s\\S]+?\\}\\}\\}|\\{\\{[\\s\\S]+?\\}\\}/g)})),a.hooks.add(\"after-tokenize\",(function(e){a.languages[\"markup-templating\"].tokenizePlaceholders(e,\"handlebars\")})),a.languages.hbs=a.languages.handlebars,a.languages.mustache=a.languages.handlebars}(Prism);\"/components/prism-dns-zone-file.js\u0004(Prism.languages['dns-zone-file'] = {\n\t'comment': /;.*/,\n\t'string': {\n\t\tpattern: /\"(?:\\\\.|[^\"\\\\\\r\\n])*\"/,\n\t\tgreedy: true\n\t},\n\t'variable': [\n\t\t{\n\t\t\tpattern: /(^\\$ORIGIN[ \\t]+)\\S+/m,\n\t\t\tlookbehind: true,\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|\\s)@(?=\\s|$)/,\n\t\t\tlookbehind: true,\n\t\t}\n\t],\n\t'keyword': /^\\$(?:INCLUDE|ORIGIN|TTL)(?=\\s|$)/m,\n\t'class': {\n\t\t// https://tools.ietf.org/html/rfc1035#page-13\n\t\tpattern: /(^|\\s)(?:CH|CS|HS|IN)(?=\\s|$)/,\n\t\tlookbehind: true,\n\t\talias: 'keyword'\n\t},\n\t'type': {\n\t\t// https://en.wikipedia.org/wiki/List_of_DNS_record_types\n\t\tpattern: /(^|\\s)(?:A|A6|AAAA|AFSDB|APL|ATMA|CAA|CDNSKEY|CDS|CERT|CNAME|DHCID|DLV|DNAME|DNSKEY|DS|EID|GID|GPOS|HINFO|HIP|IPSECKEY|ISDN|KEY|KX|LOC|MAILA|MAILB|MB|MD|MF|MG|MINFO|MR|MX|NAPTR|NB|NBSTAT|NIMLOC|NINFO|NS|NSAP|NSAP-PTR|NSEC|NSEC3|NSEC3PARAM|NULL|NXT|OPENPGPKEY|PTR|PX|RKEY|RP|RRSIG|RT|SIG|SINK|SMIMEA|SOA|SPF|SRV|SSHFP|TA|TKEY|TLSA|TSIG|TXT|UID|UINFO|UNSPEC|URI|WKS|X25)(?=\\s|$)/,\n\t\tlookbehind: true,\n\t\talias: 'keyword'\n\t},\n\t'punctuation': /[()]/\n};\n\nPrism.languages['dns-zone'] = Prism.languages['dns-zone-file'];\n/components/prism-qsharp.js\u0010(function (Prism) {\n\n\t/**\n\t * Replaces all placeholders \"<<n>>\" of given pattern with the n-th replacement (zero based).\n\t *\n\t * Note: This is a simple text based replacement. Be careful when using backreferences!\n\t *\n\t * @param {string} pattern the given pattern.\n\t * @param {string[]} replacements a list of replacement which can be inserted into the given pattern.\n\t * @returns {string} the pattern with all placeholders replaced with their corresponding replacements.\n\t * @example replace(/a<<0>>a/.source, [/b+/.source]) === /a(?:b+)a/.source\n\t */\n\tfunction replace(pattern, replacements) {\n\t\treturn pattern.replace(/<<(\\d+)>>/g, function (m, index) {\n\t\t\treturn '(?:' + replacements[+index] + ')';\n\t\t});\n\t}\n\t/**\n\t * @param {string} pattern\n\t * @param {string[]} replacements\n\t * @param {string} [flags]\n\t * @returns {RegExp}\n\t */\n\tfunction re(pattern, replacements, flags) {\n\t\treturn RegExp(replace(pattern, replacements), flags || '');\n\t}\n\n\t/**\n\t * Creates a nested pattern where all occurrences of the string `<<self>>` are replaced with the pattern itself.\n\t *\n\t * @param {string} pattern\n\t * @param {number} depthLog2\n\t * @returns {string}\n\t */\n\tfunction nested(pattern, depthLog2) {\n\t\tfor (var i = 0; i < depthLog2; i++) {\n\t\t\tpattern = pattern.replace(/<<self>>/g, function () { return '(?:' + pattern + ')'; });\n\t\t}\n\t\treturn pattern.replace(/<<self>>/g, '[^\\\\s\\\\S]');\n\t}\n\n\t// https://docs.microsoft.com/en-us/azure/quantum/user-guide/language/typesystem/\n\t// https://github.com/microsoft/qsharp-language/tree/main/Specifications/Language/5_Grammar\n\tvar keywordKinds = {\n\t\t// keywords which represent a return or variable type\n\t\ttype: 'Adj BigInt Bool Ctl Double false Int One Pauli PauliI PauliX PauliY PauliZ Qubit Range Result String true Unit Zero',\n\t\t// all other keywords\n\t\tother: 'Adjoint adjoint apply as auto body borrow borrowing Controlled controlled distribute elif else fail fixup for function if in internal intrinsic invert is let mutable namespace new newtype open operation repeat return self set until use using while within'\n\t};\n\t// keywords\n\tfunction keywordsToPattern(words) {\n\t\treturn '\\\\b(?:' + words.trim().replace(/ /g, '|') + ')\\\\b';\n\t}\n\tvar keywords = RegExp(keywordsToPattern(keywordKinds.type + ' ' + keywordKinds.other));\n\n\t// types\n\tvar identifier = /\\b[A-Za-z_]\\w*\\b/.source;\n\tvar qualifiedName = replace(/<<0>>(?:\\s*\\.\\s*<<0>>)*/.source, [identifier]);\n\n\tvar typeInside = {\n\t\t'keyword': keywords,\n\t\t'punctuation': /[<>()?,.:[\\]]/\n\t};\n\n\t// strings\n\tvar regularString = /\"(?:\\\\.|[^\\\\\"])*\"/.source;\n\n\tPrism.languages.qsharp = Prism.languages.extend('clike', {\n\t\t'comment': /\\/\\/.*/,\n\t\t'string': [\n\t\t\t{\n\t\t\t\tpattern: re(/(^|[^$\\\\])<<0>>/.source, [regularString]),\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true\n\t\t\t}\n\t\t],\n\t\t'class-name': [\n\t\t\t{\n\t\t\t\t// open Microsoft.Quantum.Canon;\n\t\t\t\t// open Microsoft.Quantum.Canon as CN;\n\t\t\t\tpattern: re(/(\\b(?:as|open)\\s+)<<0>>(?=\\s*(?:;|as\\b))/.source, [qualifiedName]),\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: typeInside\n\t\t\t},\n\t\t\t{\n\t\t\t\t// namespace Quantum.App1;\n\t\t\t\tpattern: re(/(\\bnamespace\\s+)<<0>>(?=\\s*\\{)/.source, [qualifiedName]),\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: typeInside\n\t\t\t},\n\t\t],\n\t\t'keyword': keywords,\n\t\t'number': /(?:\\b0(?:x[\\da-f]+|b[01]+|o[0-7]+)|(?:\\B\\.\\d+|\\b\\d+(?:\\.\\d*)?)(?:e[-+]?\\d+)?)l?\\b/i,\n\t\t'operator': /\\band=|\\bor=|\\band\\b|\\bnot\\b|\\bor\\b|<[-=]|[-=]>|>>>=?|<<<=?|\\^\\^\\^=?|\\|\\|\\|=?|&&&=?|w\\/=?|~~~|[*\\/+\\-^=!%]=?/,\n\t\t'punctuation': /::|[{}[\\];(),.:]/\n\t});\n\n\tPrism.languages.insertBefore('qsharp', 'number', {\n\t\t'range': {\n\t\t\tpattern: /\\.\\./,\n\t\t\talias: 'operator'\n\t\t}\n\t});\n\n\t// single line\n\tvar interpolationExpr = nested(replace(/\\{(?:[^\"{}]|<<0>>|<<self>>)*\\}/.source, [regularString]), 2);\n\n\tPrism.languages.insertBefore('qsharp', 'string', {\n\t\t'interpolation-string': {\n\t\t\tpattern: re(/\\$\"(?:\\\\.|<<0>>|[^\\\\\"{])*\"/.source, [interpolationExpr]),\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'interpolation': {\n\t\t\t\t\tpattern: re(/((?:^|[^\\\\])(?:\\\\\\\\)*)<<0>>/.source, [interpolationExpr]),\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'punctuation': /^\\{|\\}$/,\n\t\t\t\t\t\t'expression': {\n\t\t\t\t\t\t\tpattern: /[\\s\\S]+/,\n\t\t\t\t\t\t\talias: 'language-qsharp',\n\t\t\t\t\t\t\tinside: Prism.languages.qsharp\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t'string': /[\\s\\S]+/\n\t\t\t}\n\t\t}\n\t});\n\n}(Prism));\n\nPrism.languages.qs = Prism.languages.qsharp;\n/components/prism-ocaml.js\u0006;// https://ocaml.org/manual/lex.html\n\nPrism.languages.ocaml = {\n\t'comment': {\n\t\tpattern: /\\(\\*[\\s\\S]*?\\*\\)/,\n\t\tgreedy: true\n\t},\n\t'char': {\n\t\tpattern: /'(?:[^\\\\\\r\\n']|\\\\(?:.|[ox]?[0-9a-f]{1,3}))'/i,\n\t\tgreedy: true\n\t},\n\t'string': [\n\t\t{\n\t\t\tpattern: /\"(?:\\\\(?:[\\s\\S]|\\r\\n)|[^\\\\\\r\\n\"])*\"/,\n\t\t\tgreedy: true\n\t\t},\n\t\t{\n\t\t\tpattern: /\\{([a-z_]*)\\|[\\s\\S]*?\\|\\1\\}/,\n\t\t\tgreedy: true\n\t\t}\n\t],\n\t'number': [\n\t\t// binary and octal\n\t\t/\\b(?:0b[01][01_]*|0o[0-7][0-7_]*)\\b/i,\n\t\t// hexadecimal\n\t\t/\\b0x[a-f0-9][a-f0-9_]*(?:\\.[a-f0-9_]*)?(?:p[+-]?\\d[\\d_]*)?(?!\\w)/i,\n\t\t// decimal\n\t\t/\\b\\d[\\d_]*(?:\\.[\\d_]*)?(?:e[+-]?\\d[\\d_]*)?(?!\\w)/i,\n\t],\n\t'directive': {\n\t\tpattern: /\\B#\\w+/,\n\t\talias: 'property'\n\t},\n\t'label': {\n\t\tpattern: /\\B~\\w+/,\n\t\talias: 'property'\n\t},\n\t'type-variable': {\n\t\tpattern: /\\B'\\w+/,\n\t\talias: 'function'\n\t},\n\t'variant': {\n\t\tpattern: /`\\w+/,\n\t\talias: 'symbol'\n\t},\n\t// For the list of keywords and operators,\n\t// see: http://caml.inria.fr/pub/docs/manual-ocaml/lex.html#sec84\n\t'keyword': /\\b(?:as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|match|method|module|mutable|new|nonrec|object|of|open|private|rec|sig|struct|then|to|try|type|val|value|virtual|when|where|while|with)\\b/,\n\t'boolean': /\\b(?:false|true)\\b/,\n\n\t'operator-like-punctuation': {\n\t\tpattern: /\\[[<>|]|[>|]\\]|\\{<|>\\}/,\n\t\talias: 'punctuation'\n\t},\n\t// Custom operators are allowed\n\t'operator': /\\.[.~]|:[=>]|[=<>@^|&+\\-*\\/$%!?~][!$%&*+\\-.\\/:<=>?@^|~]*|\\b(?:and|asr|land|lor|lsl|lsr|lxor|mod|or)\\b/,\n\t'punctuation': /;;|::|[(){}\\[\\].,:;#]|\\b_\\b/\n};\n/components/prism-xquery.min.js\u000fJ!function(e){e.languages.xquery=e.languages.extend(\"markup\",{\"xquery-comment\":{pattern:/\\(:[\\s\\S]*?:\\)/,greedy:!0,alias:\"comment\"},string:{pattern:/([\"'])(?:\\1\\1|(?!\\1)[\\s\\S])*\\1/,greedy:!0},extension:{pattern:/\\(#.+?#\\)/,alias:\"symbol\"},variable:/\\$[-\\w:]+/,axis:{pattern:/(^|[^-])(?:ancestor(?:-or-self)?|attribute|child|descendant(?:-or-self)?|following(?:-sibling)?|parent|preceding(?:-sibling)?|self)(?=::)/,lookbehind:!0,alias:\"operator\"},\"keyword-operator\":{pattern:/(^|[^:-])\\b(?:and|castable as|div|eq|except|ge|gt|idiv|instance of|intersect|is|le|lt|mod|ne|or|union)\\b(?=$|[^:-])/,lookbehind:!0,alias:\"operator\"},keyword:{pattern:/(^|[^:-])\\b(?:as|ascending|at|base-uri|boundary-space|case|cast as|collation|construction|copy-namespaces|declare|default|descending|else|empty (?:greatest|least)|encoding|every|external|for|function|if|import|in|inherit|lax|let|map|module|namespace|no-inherit|no-preserve|option|order(?: by|ed|ing)?|preserve|return|satisfies|schema|some|stable|strict|strip|then|to|treat as|typeswitch|unordered|validate|variable|version|where|xquery)\\b(?=$|[^:-])/,lookbehind:!0},function:/[\\w-]+(?::[\\w-]+)*(?=\\s*\\()/,\"xquery-element\":{pattern:/(element\\s+)[\\w-]+(?::[\\w-]+)*/,lookbehind:!0,alias:\"tag\"},\"xquery-attribute\":{pattern:/(attribute\\s+)[\\w-]+(?::[\\w-]+)*/,lookbehind:!0,alias:\"attr-name\"},builtin:{pattern:/(^|[^:-])\\b(?:attribute|comment|document|element|processing-instruction|text|xs:(?:ENTITIES|ENTITY|ID|IDREFS?|NCName|NMTOKENS?|NOTATION|Name|QName|anyAtomicType|anyType|anyURI|base64Binary|boolean|byte|date|dateTime|dayTimeDuration|decimal|double|duration|float|gDay|gMonth|gMonthDay|gYear|gYearMonth|hexBinary|int|integer|language|long|negativeInteger|nonNegativeInteger|nonPositiveInteger|normalizedString|positiveInteger|short|string|time|token|unsigned(?:Byte|Int|Long|Short)|untyped(?:Atomic)?|yearMonthDuration))\\b(?=$|[^:-])/,lookbehind:!0},number:/\\b\\d+(?:\\.\\d+)?(?:E[+-]?\\d+)?/,operator:[/[+*=?|@]|\\.\\.?|:=|!=|<[=<]?|>[=>]?/,{pattern:/(\\s)-(?=\\s)/,lookbehind:!0}],punctuation:/[[\\](){},;:/]/}),e.languages.xquery.tag.pattern=/<\\/?(?!\\d)[^\\s>\\/=$<%]+(?:\\s+[^\\s>\\/=]+(?:=(?:(\"|')(?:\\\\[\\s\\S]|\\{(?!\\{)(?:\\{(?:\\{[^{}]*\\}|[^{}])*\\}|[^{}])+\\}|(?!\\1)[^\\\\])*\\1|[^\\s'\">=]+))?)*\\s*\\/?>/,e.languages.xquery.tag.inside[\"attr-value\"].pattern=/=(?:(\"|')(?:\\\\[\\s\\S]|\\{(?!\\{)(?:\\{(?:\\{[^{}]*\\}|[^{}])*\\}|[^{}])+\\}|(?!\\1)[^\\\\])*\\1|[^\\s'\">=]+)/,e.languages.xquery.tag.inside[\"attr-value\"].inside.punctuation=/^=\"|\"$/,e.languages.xquery.tag.inside[\"attr-value\"].inside.expression={pattern:/\\{(?!\\{)(?:\\{(?:\\{[^{}]*\\}|[^{}])*\\}|[^{}])+\\}/,inside:e.languages.xquery,alias:\"language-xquery\"};var t=function(e){return\"string\"==typeof e?e:\"string\"==typeof e.content?e.content:e.content.map(t).join(\"\")},n=function(a){for(var o=[],i=0;i<a.length;i++){var r=a[i],s=!1;if(\"string\"!=typeof r&&(\"tag\"===r.type&&r.content[0]&&\"tag\"===r.content[0].type?\"</\"===r.content[0].content[0].content?o.length>0&&o[o.length-1].tagName===t(r.content[0].content[1])&&o.pop():\"/>\"===r.content[r.content.length-1].content||o.push({tagName:t(r.content[0].content[1]),openedBraces:0}):!(o.length>0&&\"punctuation\"===r.type&&\"{\"===r.content)||a[i+1]&&\"punctuation\"===a[i+1].type&&\"{\"===a[i+1].content||a[i-1]&&\"plain-text\"===a[i-1].type&&\"{\"===a[i-1].content?o.length>0&&o[o.length-1].openedBraces>0&&\"punctuation\"===r.type&&\"}\"===r.content?o[o.length-1].openedBraces--:\"comment\"!==r.type&&(s=!0):o[o.length-1].openedBraces++),(s||\"string\"==typeof r)&&o.length>0&&0===o[o.length-1].openedBraces){var l=t(r);i<a.length-1&&(\"string\"==typeof a[i+1]||\"plain-text\"===a[i+1].type)&&(l+=t(a[i+1]),a.splice(i+1,1)),i>0&&(\"string\"==typeof a[i-1]||\"plain-text\"===a[i-1].type)&&(l=t(a[i-1])+l,a.splice(i-1,1),i--),/^\\s+$/.test(l)?a[i]=l:a[i]=new e.Token(\"plain-text\",l,null,l)}r.content&&\"string\"!=typeof r.content&&n(r.content)}};e.hooks.add(\"after-tokenize\",(function(e){\"xquery\"===e.language&&n(e.tokens)}))}(Prism);!/components/prism-protobuf.min.js\u0003!function(e){var s=/\\b(?:bool|bytes|double|s?fixed(?:32|64)|float|[su]?int(?:32|64)|string)\\b/;e.languages.protobuf=e.languages.extend(\"clike\",{\"class-name\":[{pattern:/(\\b(?:enum|extend|message|service)\\s+)[A-Za-z_]\\w*(?=\\s*\\{)/,lookbehind:!0},{pattern:/(\\b(?:rpc\\s+\\w+|returns)\\s*\\(\\s*(?:stream\\s+)?)\\.?[A-Za-z_]\\w*(?:\\.[A-Za-z_]\\w*)*(?=\\s*\\))/,lookbehind:!0}],keyword:/\\b(?:enum|extend|extensions|import|message|oneof|option|optional|package|public|repeated|required|reserved|returns|rpc(?=\\s+\\w)|service|stream|syntax|to)\\b(?!\\s*=\\s*\\d)/,function:/\\b[a-z_]\\w*(?=\\s*\\()/i}),e.languages.insertBefore(\"protobuf\",\"operator\",{map:{pattern:/\\bmap<\\s*[\\w.]+\\s*,\\s*[\\w.]+\\s*>(?=\\s+[a-z_]\\w*\\s*[=;])/i,alias:\"class-name\",inside:{punctuation:/[<>.,]/,builtin:s}},builtin:s,\"positional-class-name\":{pattern:/(?:\\b|\\B\\.)[a-z_]\\w*(?:\\.[a-z_]\\w*)*(?=\\s+[a-z_]\\w*\\s*[=;])/i,alias:\"class-name\",inside:{punctuation:/\\./}},annotation:{pattern:/(\\[\\s*)[a-z_]\\w*(?=\\s*=)/i,lookbehind:!0}})}(Prism);/components/prism-mata.min.js\u0004!function(t){var e=\"\\\\bvoid\\\\b|<org>|\\\\b(?:complex|numeric|pointer(?:\\\\s*\\\\([^()]*\\\\))?|real|string|(?:class|struct)\\\\s+\\\\w+|transmorphic)(?:\\\\s*<org>)?\".replace(/<org>/g,\"\\\\b(?:(?:col|row)?vector|matrix|scalar)\\\\b\");t.languages.mata={comment:{pattern:/\\/\\/.*|\\/\\*(?:[^*/]|\\*(?!\\/)|\\/(?!\\*)|\\/\\*(?:[^*]|\\*(?!\\/))*\\*\\/)*\\*\\//,greedy:!0},string:{pattern:/\"[^\"\\r\\n]*\"|[‘`']\".*?\"[’`']/,greedy:!0},\"class-name\":{pattern:/(\\b(?:class|extends|struct)\\s+)\\w+(?=\\s*(?:\\{|\\bextends\\b))/,lookbehind:!0},type:{pattern:RegExp(e),alias:\"class-name\",inside:{punctuation:/[()]/,keyword:/\\b(?:class|function|struct|void)\\b/}},keyword:/\\b(?:break|class|continue|do|else|end|extends|external|final|for|function|goto|if|pragma|private|protected|public|return|static|struct|unset|unused|version|virtual|while)\\b/,constant:/\\bNULL\\b/,number:{pattern:/(^|[^\\w.])(?:\\d+(?:\\.\\d+)?(?:e[+-]?\\d+)?|\\d[a-f0-9]*(?:\\.[a-f0-9]+)?x[+-]?\\d+)i?(?![\\w.])/i,lookbehind:!0},missing:{pattern:/(^|[^\\w.])(?:\\.[a-z]?)(?![\\w.])/,lookbehind:!0,alias:\"symbol\"},function:/\\b[a-z_]\\w*(?=\\s*\\()/i,operator:/\\.\\.|\\+\\+|--|&&|\\|\\||:?(?:[!=<>]=|[+\\-*/^<>&|:])|[!?=\\\\#’`']/,punctuation:/[()[\\]{},;.]/}}(Prism);/components/prism-cfscript.js\u0005// https://cfdocs.org/script\nPrism.languages.cfscript = Prism.languages.extend('clike', {\n\t'comment': [\n\t\t{\n\t\t\tpattern: /(^|[^\\\\])\\/\\*[\\s\\S]*?(?:\\*\\/|$)/,\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'annotation': {\n\t\t\t\t\tpattern: /(?:^|[^.])@[\\w\\.]+/,\n\t\t\t\t\talias: 'punctuation'\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^\\\\:])\\/\\/.*/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true\n\t\t}\n\t],\n\t'keyword': /\\b(?:abstract|break|catch|component|continue|default|do|else|extends|final|finally|for|function|if|in|include|package|private|property|public|remote|required|rethrow|return|static|switch|throw|try|var|while|xml)\\b(?!\\s*=)/,\n\t'operator': [\n\t\t/\\+\\+|--|&&|\\|\\||::|=>|[!=]==|[-+*/%&|^!=<>]=?|\\?(?:\\.|:)?|:/,\n\t\t/\\b(?:and|contains|eq|equal|eqv|gt|gte|imp|is|lt|lte|mod|not|or|xor)\\b/\n\t],\n\t'scope': {\n\t\tpattern: /\\b(?:application|arguments|cgi|client|cookie|local|session|super|this|variables)\\b/,\n\t\talias: 'global'\n\t},\n\t'type': {\n\t\tpattern: /\\b(?:any|array|binary|boolean|date|guid|numeric|query|string|struct|uuid|void|xml)\\b/,\n\t\talias: 'builtin'\n\t}\n});\n\nPrism.languages.insertBefore('cfscript', 'keyword', {\n\t// This must be declared before keyword because we use \"function\" inside the lookahead\n\t'function-variable': {\n\t\tpattern: /[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*[=:]\\s*(?:\\bfunction\\b|(?:\\((?:[^()]|\\([^()]*\\))*\\)|(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*)\\s*=>))/,\n\t\talias: 'function'\n\t}\n});\n\ndelete Prism.languages.cfscript['class-name'];\nPrism.languages.cfc = Prism.languages['cfscript'];\n\"/components/prism-shell-session.js\u0006(function (Prism) {\n\n\t// CAREFUL!\n\t// The following patterns are concatenated, so the group referenced by a back reference is non-obvious!\n\n\tvar strings = [\n\t\t// normal string\n\t\t/\"(?:\\\\[\\s\\S]|\\$\\([^)]+\\)|\\$(?!\\()|`[^`]+`|[^\"\\\\`$])*\"/.source,\n\t\t/'[^']*'/.source,\n\t\t/\\$'(?:[^'\\\\]|\\\\[\\s\\S])*'/.source,\n\n\t\t// here doc\n\t\t// 2 capturing groups\n\t\t/<<-?\\s*([\"']?)(\\w+)\\1\\s[\\s\\S]*?[\\r\\n]\\2/.source\n\t].join('|');\n\n\tPrism.languages['shell-session'] = {\n\t\t'command': {\n\t\t\tpattern: RegExp(\n\t\t\t\t// user info\n\t\t\t\t/^/.source +\n\t\t\t\t'(?:' +\n\t\t\t\t(\n\t\t\t\t\t// <user> \":\" ( <path> )?\n\t\t\t\t\t/[^\\s@:$#%*!/\\\\]+@[^\\r\\n@:$#%*!/\\\\]+(?::[^\\0-\\x1F$#%*?\"<>:;|]+)?/.source +\n\t\t\t\t\t'|' +\n\t\t\t\t\t// <path>\n\t\t\t\t\t// Since the path pattern is quite general, we will require it to start with a special character to\n\t\t\t\t\t// prevent false positives.\n\t\t\t\t\t/[/~.][^\\0-\\x1F$#%*?\"<>@:;|]*/.source\n\t\t\t\t) +\n\t\t\t\t')?' +\n\t\t\t\t// shell symbol\n\t\t\t\t/[$#%](?=\\s)/.source +\n\t\t\t\t// bash command\n\t\t\t\t/(?:[^\\\\\\r\\n \\t'\"<$]|[ \\t](?:(?!#)|#.*$)|\\\\(?:[^\\r]|\\r\\n?)|\\$(?!')|<(?!<)|<<str>>)+/.source.replace(/<<str>>/g, function () { return strings; }),\n\t\t\t\t'm'\n\t\t\t),\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'info': {\n\t\t\t\t\t// foo@bar:~/files$ exit\n\t\t\t\t\t// foo@bar$ exit\n\t\t\t\t\t// ~/files$ exit\n\t\t\t\t\tpattern: /^[^#$%]+/,\n\t\t\t\t\talias: 'punctuation',\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'user': /^[^\\s@:$#%*!/\\\\]+@[^\\r\\n@:$#%*!/\\\\]+/,\n\t\t\t\t\t\t'punctuation': /:/,\n\t\t\t\t\t\t'path': /[\\s\\S]+/\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t'bash': {\n\t\t\t\t\tpattern: /(^[$#%]\\s*)\\S[\\s\\S]*/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\talias: 'language-bash',\n\t\t\t\t\tinside: Prism.languages.bash\n\t\t\t\t},\n\t\t\t\t'shell-symbol': {\n\t\t\t\t\tpattern: /^[$#%]/,\n\t\t\t\t\talias: 'important'\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t'output': /.(?:.*(?:[\\r\\n]|.$))*/\n\t};\n\n\tPrism.languages['sh-session'] = Prism.languages['shellsession'] = Prism.languages['shell-session'];\n\n}(Prism));\n/components/prism-ruby.min.js\r!function(e){e.languages.ruby=e.languages.extend(\"clike\",{comment:{pattern:/#.*|^=begin\\s[\\s\\S]*?^=end/m,greedy:!0},\"class-name\":{pattern:/(\\b(?:class|module)\\s+|\\bcatch\\s+\\()[\\w.\\\\]+|\\b[A-Z_]\\w*(?=\\s*\\.\\s*new\\b)/,lookbehind:!0,inside:{punctuation:/[.\\\\]/}},keyword:/\\b(?:BEGIN|END|alias|and|begin|break|case|class|def|define_method|defined|do|each|else|elsif|end|ensure|extend|for|if|in|include|module|new|next|nil|not|or|prepend|private|protected|public|raise|redo|require|rescue|retry|return|self|super|then|throw|undef|unless|until|when|while|yield)\\b/,operator:/\\.{2,3}|&\\.|===|<?=>|[!=]?~|(?:&&|\\|\\||<<|>>|\\*\\*|[+\\-*/%<>!^&|=])=?|[?:]/,punctuation:/[(){}[\\].,;]/}),e.languages.insertBefore(\"ruby\",\"operator\",{\"double-colon\":{pattern:/::/,alias:\"punctuation\"}});var n={pattern:/((?:^|[^\\\\])(?:\\\\{2})*)#\\{(?:[^{}]|\\{[^{}]*\\})*\\}/,lookbehind:!0,inside:{content:{pattern:/^(#\\{)[\\s\\S]+(?=\\}$)/,lookbehind:!0,inside:e.languages.ruby},delimiter:{pattern:/^#\\{|\\}$/,alias:\"punctuation\"}}};delete e.languages.ruby.function;var t=\"(?:\"+[\"([^a-zA-Z0-9\\\\s{(\\\\[<=])(?:(?!\\\\1)[^\\\\\\\\]|\\\\\\\\[^])*\\\\1\",\"\\\\((?:[^()\\\\\\\\]|\\\\\\\\[^]|\\\\((?:[^()\\\\\\\\]|\\\\\\\\[^])*\\\\))*\\\\)\",\"\\\\{(?:[^{}\\\\\\\\]|\\\\\\\\[^]|\\\\{(?:[^{}\\\\\\\\]|\\\\\\\\[^])*\\\\})*\\\\}\",\"\\\\[(?:[^\\\\[\\\\]\\\\\\\\]|\\\\\\\\[^]|\\\\[(?:[^\\\\[\\\\]\\\\\\\\]|\\\\\\\\[^])*\\\\])*\\\\]\",\"<(?:[^<>\\\\\\\\]|\\\\\\\\[^]|<(?:[^<>\\\\\\\\]|\\\\\\\\[^])*>)*>\"].join(\"|\")+\")\",i='(?:\"(?:\\\\\\\\.|[^\"\\\\\\\\\\r\\n])*\"|(?:\\\\b[a-zA-Z_]\\\\w*|[^\\\\s\\0-\\\\x7F]+)[?!]?|\\\\$.)';e.languages.insertBefore(\"ruby\",\"keyword\",{\"regex-literal\":[{pattern:RegExp(\"%r\"+t+\"[egimnosux]{0,6}\"),greedy:!0,inside:{interpolation:n,regex:/[\\s\\S]+/}},{pattern:/(^|[^/])\\/(?!\\/)(?:\\[[^\\r\\n\\]]+\\]|\\\\.|[^[/\\\\\\r\\n])+\\/[egimnosux]{0,6}(?=\\s*(?:$|[\\r\\n,.;})#]))/,lookbehind:!0,greedy:!0,inside:{interpolation:n,regex:/[\\s\\S]+/}}],variable:/[@$]+[a-zA-Z_]\\w*(?:[?!]|\\b)/,symbol:[{pattern:RegExp(\"(^|[^:]):\"+i),lookbehind:!0,greedy:!0},{pattern:RegExp(\"([\\r\\n{(,][ \\t]*)\"+i+\"(?=:(?!:))\"),lookbehind:!0,greedy:!0}],\"method-definition\":{pattern:/(\\bdef\\s+)\\w+(?:\\s*\\.\\s*\\w+)?/,lookbehind:!0,inside:{function:/\\b\\w+$/,keyword:/^self\\b/,\"class-name\":/^\\w+/,punctuation:/\\./}}}),e.languages.insertBefore(\"ruby\",\"string\",{\"string-literal\":[{pattern:RegExp(\"%[qQiIwWs]?\"+t),greedy:!0,inside:{interpolation:n,string:/[\\s\\S]+/}},{pattern:/(\"|')(?:#\\{[^}]+\\}|#(?!\\{)|\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\#\\r\\n])*\\1/,greedy:!0,inside:{interpolation:n,string:/[\\s\\S]+/}},{pattern:/<<[-~]?([a-z_]\\w*)[\\r\\n](?:.*[\\r\\n])*?[\\t ]*\\1/i,alias:\"heredoc-string\",greedy:!0,inside:{delimiter:{pattern:/^<<[-~]?[a-z_]\\w*|\\b[a-z_]\\w*$/i,inside:{symbol:/\\b\\w+/,punctuation:/^<<[-~]?/}},interpolation:n,string:/[\\s\\S]+/}},{pattern:/<<[-~]?'([a-z_]\\w*)'[\\r\\n](?:.*[\\r\\n])*?[\\t ]*\\1/i,alias:\"heredoc-string\",greedy:!0,inside:{delimiter:{pattern:/^<<[-~]?'[a-z_]\\w*'|\\b[a-z_]\\w*$/i,inside:{symbol:/\\b\\w+/,punctuation:/^<<[-~]?'|'$/}},string:/[\\s\\S]+/}}],\"command-literal\":[{pattern:RegExp(\"%x\"+t),greedy:!0,inside:{interpolation:n,command:{pattern:/[\\s\\S]+/,alias:\"string\"}}},{pattern:/`(?:#\\{[^}]+\\}|#(?!\\{)|\\\\(?:\\r\\n|[\\s\\S])|[^\\\\`#\\r\\n])*`/,greedy:!0,inside:{interpolation:n,command:{pattern:/[\\s\\S]+/,alias:\"string\"}}}]}),delete e.languages.ruby.string,e.languages.insertBefore(\"ruby\",\"number\",{builtin:/\\b(?:Array|Bignum|Binding|Class|Continuation|Dir|Exception|FalseClass|File|Fixnum|Float|Hash|IO|Integer|MatchData|Method|Module|NilClass|Numeric|Object|Proc|Range|Regexp|Stat|String|Struct|Symbol|TMS|Thread|ThreadGroup|Time|TrueClass)\\b/,constant:/\\b[A-Z][A-Z0-9_]*(?:[?!]|\\b)/}),e.languages.rb=e.languages.ruby}(Prism);/components/prism-arduino.js\u000flPrism.languages.arduino = Prism.languages.extend('cpp', {\n\t'keyword': /\\b(?:String|array|bool|boolean|break|byte|case|catch|continue|default|do|double|else|finally|for|function|goto|if|in|instanceof|int|integer|long|loop|new|null|return|setup|string|switch|throw|try|void|while|word)\\b/,\n\t'constant': /\\b(?:ANALOG_MESSAGE|DEFAULT|DIGITAL_MESSAGE|EXTERNAL|FIRMATA_STRING|HIGH|INPUT|INPUT_PULLUP|INTERNAL|INTERNAL1V1|INTERNAL2V56|LED_BUILTIN|LOW|OUTPUT|REPORT_ANALOG|REPORT_DIGITAL|SET_PIN_MODE|SYSEX_START|SYSTEM_RESET)\\b/,\n\t'builtin': /\\b(?:Audio|BSSID|Bridge|Client|Console|EEPROM|Esplora|EsploraTFT|Ethernet|EthernetClient|EthernetServer|EthernetUDP|File|FileIO|FileSystem|Firmata|GPRS|GSM|GSMBand|GSMClient|GSMModem|GSMPIN|GSMScanner|GSMServer|GSMVoiceCall|GSM_SMS|HttpClient|IPAddress|IRread|Keyboard|KeyboardController|LiquidCrystal|LiquidCrystal_I2C|Mailbox|Mouse|MouseController|PImage|Process|RSSI|RobotControl|RobotMotor|SD|SPI|SSID|Scheduler|Serial|Server|Servo|SoftwareSerial|Stepper|Stream|TFT|Task|USBHost|WiFi|WiFiClient|WiFiServer|WiFiUDP|Wire|YunClient|YunServer|abs|addParameter|analogRead|analogReadResolution|analogReference|analogWrite|analogWriteResolution|answerCall|attach|attachGPRS|attachInterrupt|attached|autoscroll|available|background|beep|begin|beginPacket|beginSD|beginSMS|beginSpeaker|beginTFT|beginTransmission|beginWrite|bit|bitClear|bitRead|bitSet|bitWrite|blink|blinkVersion|buffer|changePIN|checkPIN|checkPUK|checkReg|circle|cityNameRead|cityNameWrite|clear|clearScreen|click|close|compassRead|config|connect|connected|constrain|cos|countryNameRead|countryNameWrite|createChar|cursor|debugPrint|delay|delayMicroseconds|detach|detachInterrupt|digitalRead|digitalWrite|disconnect|display|displayLogos|drawBMP|drawCompass|encryptionType|end|endPacket|endSMS|endTransmission|endWrite|exists|exitValue|fill|find|findUntil|flush|gatewayIP|get|getAsynchronously|getBand|getButton|getCurrentCarrier|getIMEI|getKey|getModifiers|getOemKey|getPINUsed|getResult|getSignalStrength|getSocket|getVoiceCallStatus|getXChange|getYChange|hangCall|height|highByte|home|image|interrupts|isActionDone|isDirectory|isListening|isPIN|isPressed|isValid|keyPressed|keyReleased|keyboardRead|knobRead|leftToRight|line|lineFollowConfig|listen|listenOnLocalhost|loadImage|localIP|lowByte|macAddress|maintain|map|max|messageAvailable|micros|millis|min|mkdir|motorsStop|motorsWrite|mouseDragged|mouseMoved|mousePressed|mouseReleased|move|noAutoscroll|noBlink|noBuffer|noCursor|noDisplay|noFill|noInterrupts|noListenOnLocalhost|noStroke|noTone|onReceive|onRequest|open|openNextFile|overflow|parseCommand|parseFloat|parseInt|parsePacket|pauseMode|peek|pinMode|playFile|playMelody|point|pointTo|position|pow|prepare|press|print|printFirmwareVersion|printVersion|println|process|processInput|pulseIn|put|random|randomSeed|read|readAccelerometer|readBlue|readButton|readBytes|readBytesUntil|readGreen|readJoystickButton|readJoystickSwitch|readJoystickX|readJoystickY|readLightSensor|readMessage|readMicrophone|readNetworks|readRed|readSlider|readString|readStringUntil|readTemperature|ready|rect|release|releaseAll|remoteIP|remoteNumber|remotePort|remove|requestFrom|retrieveCallingNumber|rewindDirectory|rightToLeft|rmdir|robotNameRead|robotNameWrite|run|runAsynchronously|runShellCommand|runShellCommandAsynchronously|running|scanNetworks|scrollDisplayLeft|scrollDisplayRight|seek|sendAnalog|sendDigitalPortPair|sendDigitalPorts|sendString|sendSysex|serialEvent|setBand|setBitOrder|setClockDivider|setCursor|setDNS|setDataMode|setFirmwareVersion|setMode|setPINUsed|setSpeed|setTextSize|setTimeout|shiftIn|shiftOut|shutdown|sin|size|sqrt|startLoop|step|stop|stroke|subnetMask|switchPIN|tan|tempoWrite|text|tone|transfer|tuneWrite|turn|updateIR|userNameRead|userNameWrite|voiceCall|waitContinue|width|write|writeBlue|writeGreen|writeJSON|writeMessage|writeMicroseconds|writeRGB|writeRed|yield)\\b/\n});\n\nPrism.languages.ino = Prism.languages.arduino;\n!/components/prism-unrealscript.js\u0007Prism.languages.unrealscript = {\n\t'comment': /\\/\\/.*|\\/\\*[\\s\\S]*?\\*\\//,\n\t'string': {\n\t\tpattern: /([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1/,\n\t\tgreedy: true\n\t},\n\t'category': {\n\t\tpattern: /(\\b(?:(?:autoexpand|hide|show)categories|var)\\s*\\()[^()]+(?=\\))/,\n\t\tlookbehind: true,\n\t\tgreedy: true,\n\t\talias: 'property'\n\t},\n\t'metadata': {\n\t\tpattern: /(\\w\\s*)<\\s*\\w+\\s*=[^<>|=\\r\\n]+(?:\\|\\s*\\w+\\s*=[^<>|=\\r\\n]+)*>/,\n\t\tlookbehind: true,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'property': /\\b\\w+(?=\\s*=)/,\n\t\t\t'operator': /=/,\n\t\t\t'punctuation': /[<>|]/\n\t\t}\n\t},\n\t'macro': {\n\t\tpattern: /`\\w+/,\n\t\talias: 'property'\n\t},\n\t'class-name': {\n\t\tpattern: /(\\b(?:class|enum|extends|interface|state(?:\\(\\))?|struct|within)\\s+)\\w+/,\n\t\tlookbehind: true\n\t},\n\n\t'keyword': /\\b(?:abstract|actor|array|auto|autoexpandcategories|bool|break|byte|case|class|classgroup|client|coerce|collapsecategories|config|const|continue|default|defaultproperties|delegate|dependson|deprecated|do|dontcollapsecategories|editconst|editinlinenew|else|enum|event|exec|export|extends|final|float|for|forcescriptorder|foreach|function|goto|guid|hidecategories|hidedropdown|if|ignores|implements|inherits|input|int|interface|iterator|latent|local|material|name|native|nativereplication|noexport|nontransient|noteditinlinenew|notplaceable|operator|optional|out|pawn|perobjectconfig|perobjectlocalized|placeable|postoperator|preoperator|private|protected|reliable|replication|return|server|showcategories|simulated|singular|state|static|string|struct|structdefault|structdefaultproperties|switch|texture|transient|travel|unreliable|until|var|vector|while|within)\\b/,\n\t'function': /\\b[a-z_]\\w*(?=\\s*\\()/i,\n\n\t'boolean': /\\b(?:false|true)\\b/,\n\t'number': /\\b0x[\\da-f]+\\b|(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:e[+-]?\\d+)?/i,\n\t// https://docs.unrealengine.com/udk/Three/UnrealScriptExpressions.html\n\t'operator': />>|<<|--|\\+\\+|\\*\\*|[-+*/~!=<>$@]=?|&&?|\\|\\|?|\\^\\^?|[?:%]|\\b(?:ClockwiseFrom|Cross|Dot)\\b/,\n\t'punctuation': /[()[\\]{};,.]/\n};\n\nPrism.languages.uc = Prism.languages.uscript = Prism.languages.unrealscript;\n/components/prism-vbnet.js\u0007\u001fPrism.languages.vbnet = Prism.languages.extend('basic', {\n\t'comment': [\n\t\t{\n\t\t\tpattern: /(?:!|REM\\b).+/i,\n\t\t\tinside: {\n\t\t\t\t'keyword': /^REM/i\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^\\\\:])'.*/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true\n\t\t}\n\t],\n\t'string': {\n\t\tpattern: /(^|[^\"])\"(?:\"\"|[^\"])*\"(?!\")/,\n\t\tlookbehind: true,\n\t\tgreedy: true\n\t},\n\t'keyword': /(?:\\b(?:ADDHANDLER|ADDRESSOF|ALIAS|AND|ANDALSO|AS|BEEP|BLOAD|BOOLEAN|BSAVE|BYREF|BYTE|BYVAL|CALL(?: ABSOLUTE)?|CASE|CATCH|CBOOL|CBYTE|CCHAR|CDATE|CDBL|CDEC|CHAIN|CHAR|CHDIR|CINT|CLASS|CLEAR|CLNG|CLOSE|CLS|COBJ|COM|COMMON|CONST|CONTINUE|CSBYTE|CSHORT|CSNG|CSTR|CTYPE|CUINT|CULNG|CUSHORT|DATA|DATE|DECIMAL|DECLARE|DEF(?: FN| SEG|DBL|INT|LNG|SNG|STR)|DEFAULT|DELEGATE|DIM|DIRECTCAST|DO|DOUBLE|ELSE|ELSEIF|END|ENUM|ENVIRON|ERASE|ERROR|EVENT|EXIT|FALSE|FIELD|FILES|FINALLY|FOR(?: EACH)?|FRIEND|FUNCTION|GET|GETTYPE|GETXMLNAMESPACE|GLOBAL|GOSUB|GOTO|HANDLES|IF|IMPLEMENTS|IMPORTS|IN|INHERITS|INPUT|INTEGER|INTERFACE|IOCTL|IS|ISNOT|KEY|KILL|LET|LIB|LIKE|LINE INPUT|LOCATE|LOCK|LONG|LOOP|LSET|ME|MKDIR|MOD|MODULE|MUSTINHERIT|MUSTOVERRIDE|MYBASE|MYCLASS|NAME|NAMESPACE|NARROWING|NEW|NEXT|NOT|NOTHING|NOTINHERITABLE|NOTOVERRIDABLE|OBJECT|OF|OFF|ON(?: COM| ERROR| KEY| TIMER)?|OPEN|OPERATOR|OPTION(?: BASE)?|OPTIONAL|OR|ORELSE|OUT|OVERLOADS|OVERRIDABLE|OVERRIDES|PARAMARRAY|PARTIAL|POKE|PRIVATE|PROPERTY|PROTECTED|PUBLIC|PUT|RAISEEVENT|READ|READONLY|REDIM|REM|REMOVEHANDLER|RESTORE|RESUME|RETURN|RMDIR|RSET|RUN|SBYTE|SELECT(?: CASE)?|SET|SHADOWS|SHARED|SHELL|SHORT|SINGLE|SLEEP|STATIC|STEP|STOP|STRING|STRUCTURE|SUB|SWAP|SYNCLOCK|SYSTEM|THEN|THROW|TIMER|TO|TROFF|TRON|TRUE|TRY|TRYCAST|TYPE|TYPEOF|UINTEGER|ULONG|UNLOCK|UNTIL|USHORT|USING|VIEW PRINT|WAIT|WEND|WHEN|WHILE|WIDENING|WITH|WITHEVENTS|WRITE|WRITEONLY|XOR)|\\B(?:#CONST|#ELSE|#ELSEIF|#END|#IF))(?:\\$|\\b)/i,\n\t'punctuation': /[,;:(){}]/\n});\n/components/prism-sqf.min.jsłlPrism.languages.sqf=Prism.languages.extend(\"clike\",{string:{pattern:/\"(?:(?:\"\")?[^\"])*\"(?!\")|'(?:[^'])*'/,greedy:!0},keyword:/\\b(?:breakOut|breakTo|call|case|catch|default|do|echo|else|execFSM|execVM|exitWith|for|forEach|forEachMember|forEachMemberAgent|forEachMemberTeam|from|goto|if|nil|preprocessFile|preprocessFileLineNumbers|private|scopeName|spawn|step|switch|then|throw|to|try|while|with)\\b/i,boolean:/\\b(?:false|true)\\b/i,function:/\\b(?:abs|accTime|acos|action|actionIDs|actionKeys|actionKeysImages|actionKeysNames|actionKeysNamesArray|actionName|actionParams|activateAddons|activatedAddons|activateKey|add3DENConnection|add3DENEventHandler|add3DENLayer|addAction|addBackpack|addBackpackCargo|addBackpackCargoGlobal|addBackpackGlobal|addCamShake|addCuratorAddons|addCuratorCameraArea|addCuratorEditableObjects|addCuratorEditingArea|addCuratorPoints|addEditorObject|addEventHandler|addForce|addForceGeneratorRTD|addGoggles|addGroupIcon|addHandgunItem|addHeadgear|addItem|addItemCargo|addItemCargoGlobal|addItemPool|addItemToBackpack|addItemToUniform|addItemToVest|addLiveStats|addMagazine|addMagazineAmmoCargo|addMagazineCargo|addMagazineCargoGlobal|addMagazineGlobal|addMagazinePool|addMagazines|addMagazineTurret|addMenu|addMenuItem|addMissionEventHandler|addMPEventHandler|addMusicEventHandler|addOwnedMine|addPlayerScores|addPrimaryWeaponItem|addPublicVariableEventHandler|addRating|addResources|addScore|addScoreSide|addSecondaryWeaponItem|addSwitchableUnit|addTeamMember|addToRemainsCollector|addTorque|addUniform|addVehicle|addVest|addWaypoint|addWeapon|addWeaponCargo|addWeaponCargoGlobal|addWeaponGlobal|addWeaponItem|addWeaponPool|addWeaponTurret|admin|agent|agents|AGLToASL|aimedAtTarget|aimPos|airDensityCurveRTD|airDensityRTD|airplaneThrottle|airportSide|AISFinishHeal|alive|all3DENEntities|allAirports|allControls|allCurators|allCutLayers|allDead|allDeadMen|allDisplays|allGroups|allMapMarkers|allMines|allMissionObjects|allow3DMode|allowCrewInImmobile|allowCuratorLogicIgnoreAreas|allowDamage|allowDammage|allowFileOperations|allowFleeing|allowGetIn|allowSprint|allPlayers|allSimpleObjects|allSites|allTurrets|allUnits|allUnitsUAV|allVariables|ammo|ammoOnPylon|animate|animateBay|animateDoor|animatePylon|animateSource|animationNames|animationPhase|animationSourcePhase|animationState|append|apply|armoryPoints|arrayIntersect|asin|ASLToAGL|ASLToATL|assert|assignAsCargo|assignAsCargoIndex|assignAsCommander|assignAsDriver|assignAsGunner|assignAsTurret|assignCurator|assignedCargo|assignedCommander|assignedDriver|assignedGunner|assignedItems|assignedTarget|assignedTeam|assignedVehicle|assignedVehicleRole|assignItem|assignTeam|assignToAirport|atan|atan2|atg|ATLToASL|attachedObject|attachedObjects|attachedTo|attachObject|attachTo|attackEnabled|backpack|backpackCargo|backpackContainer|backpackItems|backpackMagazines|backpackSpaceFor|behaviour|benchmark|binocular|blufor|boundingBox|boundingBoxReal|boundingCenter|briefingName|buildingExit|buildingPos|buldozer_EnableRoadDiag|buldozer_IsEnabledRoadDiag|buldozer_LoadNewRoads|buldozer_reloadOperMap|buttonAction|buttonSetAction|cadetMode|callExtension|camCommand|camCommit|camCommitPrepared|camCommitted|camConstuctionSetParams|camCreate|camDestroy|cameraEffect|cameraEffectEnableHUD|cameraInterest|cameraOn|cameraView|campaignConfigFile|camPreload|camPreloaded|camPrepareBank|camPrepareDir|camPrepareDive|camPrepareFocus|camPrepareFov|camPrepareFovRange|camPreparePos|camPrepareRelPos|camPrepareTarget|camSetBank|camSetDir|camSetDive|camSetFocus|camSetFov|camSetFovRange|camSetPos|camSetRelPos|camSetTarget|camTarget|camUseNVG|canAdd|canAddItemToBackpack|canAddItemToUniform|canAddItemToVest|cancelSimpleTaskDestination|canFire|canMove|canSlingLoad|canStand|canSuspend|canTriggerDynamicSimulation|canUnloadInCombat|canVehicleCargo|captive|captiveNum|cbChecked|cbSetChecked|ceil|channelEnabled|cheatsEnabled|checkAIFeature|checkVisibility|civilian|className|clear3DENAttribute|clear3DENInventory|clearAllItemsFromBackpack|clearBackpackCargo|clearBackpackCargoGlobal|clearForcesRTD|clearGroupIcons|clearItemCargo|clearItemCargoGlobal|clearItemPool|clearMagazineCargo|clearMagazineCargoGlobal|clearMagazinePool|clearOverlay|clearRadio|clearVehicleInit|clearWeaponCargo|clearWeaponCargoGlobal|clearWeaponPool|clientOwner|closeDialog|closeDisplay|closeOverlay|collapseObjectTree|collect3DENHistory|collectiveRTD|combatMode|commandArtilleryFire|commandChat|commander|commandFire|commandFollow|commandFSM|commandGetOut|commandingMenu|commandMove|commandRadio|commandStop|commandSuppressiveFire|commandTarget|commandWatch|comment|commitOverlay|compile|compileFinal|completedFSM|composeText|configClasses|configFile|configHierarchy|configName|configNull|configProperties|configSourceAddonList|configSourceMod|configSourceModList|confirmSensorTarget|connectTerminalToUAV|controlNull|controlsGroupCtrl|copyFromClipboard|copyToClipboard|copyWaypoints|cos|count|countEnemy|countFriendly|countSide|countType|countUnknown|create3DENComposition|create3DENEntity|createAgent|createCenter|createDialog|createDiaryLink|createDiaryRecord|createDiarySubject|createDisplay|createGearDialog|createGroup|createGuardedPoint|createLocation|createMarker|createMarkerLocal|createMenu|createMine|createMissionDisplay|createMPCampaignDisplay|createSimpleObject|createSimpleTask|createSite|createSoundSource|createTask|createTeam|createTrigger|createUnit|createVehicle|createVehicleCrew|createVehicleLocal|crew|ctAddHeader|ctAddRow|ctClear|ctCurSel|ctData|ctFindHeaderRows|ctFindRowHeader|ctHeaderControls|ctHeaderCount|ctRemoveHeaders|ctRemoveRows|ctrlActivate|ctrlAddEventHandler|ctrlAngle|ctrlAutoScrollDelay|ctrlAutoScrollRewind|ctrlAutoScrollSpeed|ctrlChecked|ctrlClassName|ctrlCommit|ctrlCommitted|ctrlCreate|ctrlDelete|ctrlEnable|ctrlEnabled|ctrlFade|ctrlHTMLLoaded|ctrlIDC|ctrlIDD|ctrlMapAnimAdd|ctrlMapAnimClear|ctrlMapAnimCommit|ctrlMapAnimDone|ctrlMapCursor|ctrlMapMouseOver|ctrlMapScale|ctrlMapScreenToWorld|ctrlMapWorldToScreen|ctrlModel|ctrlModelDirAndUp|ctrlModelScale|ctrlParent|ctrlParentControlsGroup|ctrlPosition|ctrlRemoveAllEventHandlers|ctrlRemoveEventHandler|ctrlScale|ctrlSetActiveColor|ctrlSetAngle|ctrlSetAutoScrollDelay|ctrlSetAutoScrollRewind|ctrlSetAutoScrollSpeed|ctrlSetBackgroundColor|ctrlSetChecked|ctrlSetDisabledColor|ctrlSetEventHandler|ctrlSetFade|ctrlSetFocus|ctrlSetFont|ctrlSetFontH1|ctrlSetFontH1B|ctrlSetFontH2|ctrlSetFontH2B|ctrlSetFontH3|ctrlSetFontH3B|ctrlSetFontH4|ctrlSetFontH4B|ctrlSetFontH5|ctrlSetFontH5B|ctrlSetFontH6|ctrlSetFontH6B|ctrlSetFontHeight|ctrlSetFontHeightH1|ctrlSetFontHeightH2|ctrlSetFontHeightH3|ctrlSetFontHeightH4|ctrlSetFontHeightH5|ctrlSetFontHeightH6|ctrlSetFontHeightSecondary|ctrlSetFontP|ctrlSetFontPB|ctrlSetFontSecondary|ctrlSetForegroundColor|ctrlSetModel|ctrlSetModelDirAndUp|ctrlSetModelScale|ctrlSetPixelPrecision|ctrlSetPosition|ctrlSetScale|ctrlSetStructuredText|ctrlSetText|ctrlSetTextColor|ctrlSetTextColorSecondary|ctrlSetTextSecondary|ctrlSetTooltip|ctrlSetTooltipColorBox|ctrlSetTooltipColorShade|ctrlSetTooltipColorText|ctrlShow|ctrlShown|ctrlText|ctrlTextHeight|ctrlTextSecondary|ctrlTextWidth|ctrlType|ctrlVisible|ctRowControls|ctRowCount|ctSetCurSel|ctSetData|ctSetHeaderTemplate|ctSetRowTemplate|ctSetValue|ctValue|curatorAddons|curatorCamera|curatorCameraArea|curatorCameraAreaCeiling|curatorCoef|curatorEditableObjects|curatorEditingArea|curatorEditingAreaType|curatorMouseOver|curatorPoints|curatorRegisteredObjects|curatorSelected|curatorWaypointCost|current3DENOperation|currentChannel|currentCommand|currentMagazine|currentMagazineDetail|currentMagazineDetailTurret|currentMagazineTurret|currentMuzzle|currentNamespace|currentTask|currentTasks|currentThrowable|currentVisionMode|currentWaypoint|currentWeapon|currentWeaponMode|currentWeaponTurret|currentZeroing|cursorObject|cursorTarget|customChat|customRadio|cutFadeOut|cutObj|cutRsc|cutText|damage|date|dateToNumber|daytime|deActivateKey|debriefingText|debugFSM|debugLog|deg|delete3DENEntities|deleteAt|deleteCenter|deleteCollection|deleteEditorObject|deleteGroup|deleteGroupWhenEmpty|deleteIdentity|deleteLocation|deleteMarker|deleteMarkerLocal|deleteRange|deleteResources|deleteSite|deleteStatus|deleteTeam|deleteVehicle|deleteVehicleCrew|deleteWaypoint|detach|detectedMines|diag_activeMissionFSMs|diag_activeScripts|diag_activeSQFScripts|diag_activeSQSScripts|diag_captureFrame|diag_captureFrameToFile|diag_captureSlowFrame|diag_codePerformance|diag_drawMode|diag_dynamicSimulationEnd|diag_enable|diag_enabled|diag_fps|diag_fpsMin|diag_frameNo|diag_lightNewLoad|diag_list|diag_log|diag_logSlowFrame|diag_mergeConfigFile|diag_recordTurretLimits|diag_setLightNew|diag_tickTime|diag_toggle|dialog|diarySubjectExists|didJIP|didJIPOwner|difficulty|difficultyEnabled|difficultyEnabledRTD|difficultyOption|direction|directSay|disableAI|disableCollisionWith|disableConversation|disableDebriefingStats|disableMapIndicators|disableNVGEquipment|disableRemoteSensors|disableSerialization|disableTIEquipment|disableUAVConnectability|disableUserInput|displayAddEventHandler|displayCtrl|displayNull|displayParent|displayRemoveAllEventHandlers|displayRemoveEventHandler|displaySetEventHandler|dissolveTeam|distance|distance2D|distanceSqr|distributionRegion|do3DENAction|doArtilleryFire|doFire|doFollow|doFSM|doGetOut|doMove|doorPhase|doStop|doSuppressiveFire|doTarget|doWatch|drawArrow|drawEllipse|drawIcon|drawIcon3D|drawLine|drawLine3D|drawLink|drawLocation|drawPolygon|drawRectangle|drawTriangle|driver|drop|dynamicSimulationDistance|dynamicSimulationDistanceCoef|dynamicSimulationEnabled|dynamicSimulationSystemEnabled|east|edit3DENMissionAttributes|editObject|editorSetEventHandler|effectiveCommander|emptyPositions|enableAI|enableAIFeature|enableAimPrecision|enableAttack|enableAudioFeature|enableAutoStartUpRTD|enableAutoTrimRTD|enableCamShake|enableCaustics|enableChannel|enableCollisionWith|enableCopilot|enableDebriefingStats|enableDiagLegend|enableDynamicSimulation|enableDynamicSimulationSystem|enableEndDialog|enableEngineArtillery|enableEnvironment|enableFatigue|enableGunLights|enableInfoPanelComponent|enableIRLasers|enableMimics|enablePersonTurret|enableRadio|enableReload|enableRopeAttach|enableSatNormalOnDetail|enableSaving|enableSentences|enableSimulation|enableSimulationGlobal|enableStamina|enableStressDamage|enableTeamSwitch|enableTraffic|enableUAVConnectability|enableUAVWaypoints|enableVehicleCargo|enableVehicleSensor|enableWeaponDisassembly|endl|endLoadingScreen|endMission|engineOn|enginesIsOnRTD|enginesPowerRTD|enginesRpmRTD|enginesTorqueRTD|entities|environmentEnabled|estimatedEndServerTime|estimatedTimeLeft|evalObjectArgument|everyBackpack|everyContainer|exec|execEditorScript|exp|expectedDestination|exportJIPMessages|eyeDirection|eyePos|face|faction|fadeMusic|fadeRadio|fadeSound|fadeSpeech|failMission|fillWeaponsFromPool|find|findCover|findDisplay|findEditorObject|findEmptyPosition|findEmptyPositionReady|findIf|findNearestEnemy|finishMissionInit|finite|fire|fireAtTarget|firstBackpack|flag|flagAnimationPhase|flagOwner|flagSide|flagTexture|fleeing|floor|flyInHeight|flyInHeightASL|fog|fogForecast|fogParams|forceAddUniform|forceAtPositionRTD|forcedMap|forceEnd|forceFlagTexture|forceFollowRoad|forceGeneratorRTD|forceMap|forceRespawn|forceSpeed|forceWalk|forceWeaponFire|forceWeatherChange|forgetTarget|format|formation|formationDirection|formationLeader|formationMembers|formationPosition|formationTask|formatText|formLeader|freeLook|fromEditor|fuel|fullCrew|gearIDCAmmoCount|gearSlotAmmoCount|gearSlotData|get3DENActionState|get3DENAttribute|get3DENCamera|get3DENConnections|get3DENEntity|get3DENEntityID|get3DENGrid|get3DENIconsVisible|get3DENLayerEntities|get3DENLinesVisible|get3DENMissionAttribute|get3DENMouseOver|get3DENSelected|getAimingCoef|getAllEnvSoundControllers|getAllHitPointsDamage|getAllOwnedMines|getAllSoundControllers|getAmmoCargo|getAnimAimPrecision|getAnimSpeedCoef|getArray|getArtilleryAmmo|getArtilleryComputerSettings|getArtilleryETA|getAssignedCuratorLogic|getAssignedCuratorUnit|getBackpackCargo|getBleedingRemaining|getBurningValue|getCameraViewDirection|getCargoIndex|getCenterOfMass|getClientState|getClientStateNumber|getCompatiblePylonMagazines|getConnectedUAV|getContainerMaxLoad|getCursorObjectParams|getCustomAimCoef|getDammage|getDescription|getDir|getDirVisual|getDLCAssetsUsage|getDLCAssetsUsageByName|getDLCs|getDLCUsageTime|getEditorCamera|getEditorMode|getEditorObjectScope|getElevationOffset|getEngineTargetRpmRTD|getEnvSoundController|getFatigue|getFieldManualStartPage|getForcedFlagTexture|getFriend|getFSMVariable|getFuelCargo|getGroupIcon|getGroupIconParams|getGroupIcons|getHideFrom|getHit|getHitIndex|getHitPointDamage|getItemCargo|getMagazineCargo|getMarkerColor|getMarkerPos|getMarkerSize|getMarkerType|getMass|getMissionConfig|getMissionConfigValue|getMissionDLCs|getMissionLayerEntities|getMissionLayers|getModelInfo|getMousePosition|getMusicPlayedTime|getNumber|getObjectArgument|getObjectChildren|getObjectDLC|getObjectMaterials|getObjectProxy|getObjectTextures|getObjectType|getObjectViewDistance|getOxygenRemaining|getPersonUsedDLCs|getPilotCameraDirection|getPilotCameraPosition|getPilotCameraRotation|getPilotCameraTarget|getPlateNumber|getPlayerChannel|getPlayerScores|getPlayerUID|getPlayerUIDOld|getPos|getPosASL|getPosASLVisual|getPosASLW|getPosATL|getPosATLVisual|getPosVisual|getPosWorld|getPylonMagazines|getRelDir|getRelPos|getRemoteSensorsDisabled|getRepairCargo|getResolution|getRotorBrakeRTD|getShadowDistance|getShotParents|getSlingLoad|getSoundController|getSoundControllerResult|getSpeed|getStamina|getStatValue|getSuppression|getTerrainGrid|getTerrainHeightASL|getText|getTotalDLCUsageTime|getTrimOffsetRTD|getUnitLoadout|getUnitTrait|getUserMFDText|getUserMFDValue|getVariable|getVehicleCargo|getWeaponCargo|getWeaponSway|getWingsOrientationRTD|getWingsPositionRTD|getWPPos|glanceAt|globalChat|globalRadio|goggles|group|groupChat|groupFromNetId|groupIconSelectable|groupIconsVisible|groupId|groupOwner|groupRadio|groupSelectedUnits|groupSelectUnit|grpNull|gunner|gusts|halt|handgunItems|handgunMagazine|handgunWeapon|handsHit|hasInterface|hasPilotCamera|hasWeapon|hcAllGroups|hcGroupParams|hcLeader|hcRemoveAllGroups|hcRemoveGroup|hcSelected|hcSelectGroup|hcSetGroup|hcShowBar|hcShownBar|headgear|hideBody|hideObject|hideObjectGlobal|hideSelection|hint|hintC|hintCadet|hintSilent|hmd|hostMission|htmlLoad|HUDMovementLevels|humidity|image|importAllGroups|importance|in|inArea|inAreaArray|incapacitatedState|independent|inflame|inflamed|infoPanel|infoPanelComponentEnabled|infoPanelComponents|infoPanels|inGameUISetEventHandler|inheritsFrom|initAmbientLife|inPolygon|inputAction|inRangeOfArtillery|insertEditorObject|intersect|is3DEN|is3DENMultiplayer|isAbleToBreathe|isAgent|isAimPrecisionEnabled|isArray|isAutoHoverOn|isAutonomous|isAutoStartUpEnabledRTD|isAutotest|isAutoTrimOnRTD|isBleeding|isBurning|isClass|isCollisionLightOn|isCopilotEnabled|isDamageAllowed|isDedicated|isDLCAvailable|isEngineOn|isEqualTo|isEqualType|isEqualTypeAll|isEqualTypeAny|isEqualTypeArray|isEqualTypeParams|isFilePatchingEnabled|isFlashlightOn|isFlatEmpty|isForcedWalk|isFormationLeader|isGroupDeletedWhenEmpty|isHidden|isInRemainsCollector|isInstructorFigureEnabled|isIRLaserOn|isKeyActive|isKindOf|isLaserOn|isLightOn|isLocalized|isManualFire|isMarkedForCollection|isMultiplayer|isMultiplayerSolo|isNil|isNull|isNumber|isObjectHidden|isObjectRTD|isOnRoad|isPipEnabled|isPlayer|isRealTime|isRemoteExecuted|isRemoteExecutedJIP|isServer|isShowing3DIcons|isSimpleObject|isSprintAllowed|isStaminaEnabled|isSteamMission|isStreamFriendlyUIEnabled|isStressDamageEnabled|isText|isTouchingGround|isTurnedOut|isTutHintsEnabled|isUAVConnectable|isUAVConnected|isUIContext|isUniformAllowed|isVehicleCargo|isVehicleRadarOn|isVehicleSensorEnabled|isWalking|isWeaponDeployed|isWeaponRested|itemCargo|items|itemsWithMagazines|join|joinAs|joinAsSilent|joinSilent|joinString|kbAddDatabase|kbAddDatabaseTargets|kbAddTopic|kbHasTopic|kbReact|kbRemoveTopic|kbTell|kbWasSaid|keyImage|keyName|knowsAbout|land|landAt|landResult|language|laserTarget|lbAdd|lbClear|lbColor|lbColorRight|lbCurSel|lbData|lbDelete|lbIsSelected|lbPicture|lbPictureRight|lbSelection|lbSetColor|lbSetColorRight|lbSetCurSel|lbSetData|lbSetPicture|lbSetPictureColor|lbSetPictureColorDisabled|lbSetPictureColorSelected|lbSetPictureRight|lbSetPictureRightColor|lbSetPictureRightColorDisabled|lbSetPictureRightColorSelected|lbSetSelectColor|lbSetSelectColorRight|lbSetSelected|lbSetText|lbSetTextRight|lbSetTooltip|lbSetValue|lbSize|lbSort|lbSortByValue|lbText|lbTextRight|lbValue|leader|leaderboardDeInit|leaderboardGetRows|leaderboardInit|leaderboardRequestRowsFriends|leaderboardRequestRowsGlobal|leaderboardRequestRowsGlobalAroundUser|leaderboardsRequestUploadScore|leaderboardsRequestUploadScoreKeepBest|leaderboardState|leaveVehicle|libraryCredits|libraryDisclaimers|lifeState|lightAttachObject|lightDetachObject|lightIsOn|lightnings|limitSpeed|linearConversion|lineBreak|lineIntersects|lineIntersectsObjs|lineIntersectsSurfaces|lineIntersectsWith|linkItem|list|listObjects|listRemoteTargets|listVehicleSensors|ln|lnbAddArray|lnbAddColumn|lnbAddRow|lnbClear|lnbColor|lnbColorRight|lnbCurSelRow|lnbData|lnbDeleteColumn|lnbDeleteRow|lnbGetColumnsPosition|lnbPicture|lnbPictureRight|lnbSetColor|lnbSetColorRight|lnbSetColumnsPos|lnbSetCurSelRow|lnbSetData|lnbSetPicture|lnbSetPictureColor|lnbSetPictureColorRight|lnbSetPictureColorSelected|lnbSetPictureColorSelectedRight|lnbSetPictureRight|lnbSetText|lnbSetTextRight|lnbSetValue|lnbSize|lnbSort|lnbSortByValue|lnbText|lnbTextRight|lnbValue|load|loadAbs|loadBackpack|loadFile|loadGame|loadIdentity|loadMagazine|loadOverlay|loadStatus|loadUniform|loadVest|local|localize|locationNull|locationPosition|lock|lockCameraTo|lockCargo|lockDriver|locked|lockedCargo|lockedDriver|lockedTurret|lockIdentity|lockTurret|lockWP|log|logEntities|logNetwork|logNetworkTerminate|lookAt|lookAtPos|magazineCargo|magazines|magazinesAllTurrets|magazinesAmmo|magazinesAmmoCargo|magazinesAmmoFull|magazinesDetail|magazinesDetailBackpack|magazinesDetailUniform|magazinesDetailVest|magazinesTurret|magazineTurretAmmo|mapAnimAdd|mapAnimClear|mapAnimCommit|mapAnimDone|mapCenterOnCamera|mapGridPosition|markAsFinishedOnSteam|markerAlpha|markerBrush|markerColor|markerDir|markerPos|markerShape|markerSize|markerText|markerType|max|members|menuAction|menuAdd|menuChecked|menuClear|menuCollapse|menuData|menuDelete|menuEnable|menuEnabled|menuExpand|menuHover|menuPicture|menuSetAction|menuSetCheck|menuSetData|menuSetPicture|menuSetValue|menuShortcut|menuShortcutText|menuSize|menuSort|menuText|menuURL|menuValue|min|mineActive|mineDetectedBy|missionConfigFile|missionDifficulty|missionName|missionNamespace|missionStart|missionVersion|modelToWorld|modelToWorldVisual|modelToWorldVisualWorld|modelToWorldWorld|modParams|moonIntensity|moonPhase|morale|move|move3DENCamera|moveInAny|moveInCargo|moveInCommander|moveInDriver|moveInGunner|moveInTurret|moveObjectToEnd|moveOut|moveTime|moveTo|moveToCompleted|moveToFailed|musicVolume|name|nameSound|nearEntities|nearestBuilding|nearestLocation|nearestLocations|nearestLocationWithDubbing|nearestObject|nearestObjects|nearestTerrainObjects|nearObjects|nearObjectsReady|nearRoads|nearSupplies|nearTargets|needReload|netId|netObjNull|newOverlay|nextMenuItemIndex|nextWeatherChange|nMenuItems|numberOfEnginesRTD|numberToDate|objectCurators|objectFromNetId|objectParent|objNull|objStatus|onBriefingGear|onBriefingGroup|onBriefingNotes|onBriefingPlan|onBriefingTeamSwitch|onCommandModeChanged|onDoubleClick|onEachFrame|onGroupIconClick|onGroupIconOverEnter|onGroupIconOverLeave|onHCGroupSelectionChanged|onMapSingleClick|onPlayerConnected|onPlayerDisconnected|onPreloadFinished|onPreloadStarted|onShowNewObject|onTeamSwitch|openCuratorInterface|openDLCPage|openDSInterface|openMap|openSteamApp|openYoutubeVideo|opfor|orderGetIn|overcast|overcastForecast|owner|param|params|parseNumber|parseSimpleArray|parseText|parsingNamespace|particlesQuality|pi|pickWeaponPool|pitch|pixelGrid|pixelGridBase|pixelGridNoUIScale|pixelH|pixelW|playableSlotsNumber|playableUnits|playAction|playActionNow|player|playerRespawnTime|playerSide|playersNumber|playGesture|playMission|playMove|playMoveNow|playMusic|playScriptedMission|playSound|playSound3D|position|positionCameraToWorld|posScreenToWorld|posWorldToScreen|ppEffectAdjust|ppEffectCommit|ppEffectCommitted|ppEffectCreate|ppEffectDestroy|ppEffectEnable|ppEffectEnabled|ppEffectForceInNVG|precision|preloadCamera|preloadObject|preloadSound|preloadTitleObj|preloadTitleRsc|primaryWeapon|primaryWeaponItems|primaryWeaponMagazine|priority|processDiaryLink|processInitCommands|productVersion|profileName|profileNamespace|profileNameSteam|progressLoadingScreen|progressPosition|progressSetPosition|publicVariable|publicVariableClient|publicVariableServer|pushBack|pushBackUnique|putWeaponPool|queryItemsPool|queryMagazinePool|queryWeaponPool|rad|radioChannelAdd|radioChannelCreate|radioChannelRemove|radioChannelSetCallSign|radioChannelSetLabel|radioVolume|rain|rainbow|random|rank|rankId|rating|rectangular|registeredTasks|registerTask|reload|reloadEnabled|remoteControl|remoteExec|remoteExecCall|remoteExecutedOwner|remove3DENConnection|remove3DENEventHandler|remove3DENLayer|removeAction|removeAll3DENEventHandlers|removeAllActions|removeAllAssignedItems|removeAllContainers|removeAllCuratorAddons|removeAllCuratorCameraAreas|removeAllCuratorEditingAreas|removeAllEventHandlers|removeAllHandgunItems|removeAllItems|removeAllItemsWithMagazines|removeAllMissionEventHandlers|removeAllMPEventHandlers|removeAllMusicEventHandlers|removeAllOwnedMines|removeAllPrimaryWeaponItems|removeAllWeapons|removeBackpack|removeBackpackGlobal|removeCuratorAddons|removeCuratorCameraArea|removeCuratorEditableObjects|removeCuratorEditingArea|removeDrawIcon|removeDrawLinks|removeEventHandler|removeFromRemainsCollector|removeGoggles|removeGroupIcon|removeHandgunItem|removeHeadgear|removeItem|removeItemFromBackpack|removeItemFromUniform|removeItemFromVest|removeItems|removeMagazine|removeMagazineGlobal|removeMagazines|removeMagazinesTurret|removeMagazineTurret|removeMenuItem|removeMissionEventHandler|removeMPEventHandler|removeMusicEventHandler|removeOwnedMine|removePrimaryWeaponItem|removeSecondaryWeaponItem|removeSimpleTask|removeSwitchableUnit|removeTeamMember|removeUniform|removeVest|removeWeapon|removeWeaponAttachmentCargo|removeWeaponCargo|removeWeaponGlobal|removeWeaponTurret|reportRemoteTarget|requiredVersion|resetCamShake|resetSubgroupDirection|resistance|resize|resources|respawnVehicle|restartEditorCamera|reveal|revealMine|reverse|reversedMouseY|roadAt|roadsConnectedTo|roleDescription|ropeAttachedObjects|ropeAttachedTo|ropeAttachEnabled|ropeAttachTo|ropeCreate|ropeCut|ropeDestroy|ropeDetach|ropeEndPosition|ropeLength|ropes|ropeUnwind|ropeUnwound|rotorsForcesRTD|rotorsRpmRTD|round|runInitScript|safeZoneH|safeZoneW|safeZoneWAbs|safeZoneX|safeZoneXAbs|safeZoneY|save3DENInventory|saveGame|saveIdentity|saveJoysticks|saveOverlay|saveProfileNamespace|saveStatus|saveVar|savingEnabled|say|say2D|say3D|score|scoreSide|screenshot|screenToWorld|scriptDone|scriptName|scriptNull|scudState|secondaryWeapon|secondaryWeaponItems|secondaryWeaponMagazine|select|selectBestPlaces|selectDiarySubject|selectedEditorObjects|selectEditorObject|selectionNames|selectionPosition|selectLeader|selectMax|selectMin|selectNoPlayer|selectPlayer|selectRandom|selectRandomWeighted|selectWeapon|selectWeaponTurret|sendAUMessage|sendSimpleCommand|sendTask|sendTaskResult|sendUDPMessage|serverCommand|serverCommandAvailable|serverCommandExecutable|serverName|serverTime|set|set3DENAttribute|set3DENAttributes|set3DENGrid|set3DENIconsVisible|set3DENLayer|set3DENLinesVisible|set3DENLogicType|set3DENMissionAttribute|set3DENMissionAttributes|set3DENModelsVisible|set3DENObjectType|set3DENSelected|setAccTime|setActualCollectiveRTD|setAirplaneThrottle|setAirportSide|setAmmo|setAmmoCargo|setAmmoOnPylon|setAnimSpeedCoef|setAperture|setApertureNew|setArmoryPoints|setAttributes|setAutonomous|setBehaviour|setBleedingRemaining|setBrakesRTD|setCameraInterest|setCamShakeDefParams|setCamShakeParams|setCamUseTI|setCaptive|setCenterOfMass|setCollisionLight|setCombatMode|setCompassOscillation|setConvoySeparation|setCuratorCameraAreaCeiling|setCuratorCoef|setCuratorEditingAreaType|setCuratorWaypointCost|setCurrentChannel|setCurrentTask|setCurrentWaypoint|setCustomAimCoef|setCustomWeightRTD|setDamage|setDammage|setDate|setDebriefingText|setDefaultCamera|setDestination|setDetailMapBlendPars|setDir|setDirection|setDrawIcon|setDriveOnPath|setDropInterval|setDynamicSimulationDistance|setDynamicSimulationDistanceCoef|setEditorMode|setEditorObjectScope|setEffectCondition|setEngineRpmRTD|setFace|setFaceAnimation|setFatigue|setFeatureType|setFlagAnimationPhase|setFlagOwner|setFlagSide|setFlagTexture|setFog|setForceGeneratorRTD|setFormation|setFormationTask|setFormDir|setFriend|setFromEditor|setFSMVariable|setFuel|setFuelCargo|setGroupIcon|setGroupIconParams|setGroupIconsSelectable|setGroupIconsVisible|setGroupId|setGroupIdGlobal|setGroupOwner|setGusts|setHideBehind|setHit|setHitIndex|setHitPointDamage|setHorizonParallaxCoef|setHUDMovementLevels|setIdentity|setImportance|setInfoPanel|setLeader|setLightAmbient|setLightAttenuation|setLightBrightness|setLightColor|setLightDayLight|setLightFlareMaxDistance|setLightFlareSize|setLightIntensity|setLightnings|setLightUseFlare|setLocalWindParams|setMagazineTurretAmmo|setMarkerAlpha|setMarkerAlphaLocal|setMarkerBrush|setMarkerBrushLocal|setMarkerColor|setMarkerColorLocal|setMarkerDir|setMarkerDirLocal|setMarkerPos|setMarkerPosLocal|setMarkerShape|setMarkerShapeLocal|setMarkerSize|setMarkerSizeLocal|setMarkerText|setMarkerTextLocal|setMarkerType|setMarkerTypeLocal|setMass|setMimic|setMousePosition|setMusicEffect|setMusicEventHandler|setName|setNameSound|setObjectArguments|setObjectMaterial|setObjectMaterialGlobal|setObjectProxy|setObjectTexture|setObjectTextureGlobal|setObjectViewDistance|setOvercast|setOwner|setOxygenRemaining|setParticleCircle|setParticleClass|setParticleFire|setParticleParams|setParticleRandom|setPilotCameraDirection|setPilotCameraRotation|setPilotCameraTarget|setPilotLight|setPiPEffect|setPitch|setPlateNumber|setPlayable|setPlayerRespawnTime|setPos|setPosASL|setPosASL2|setPosASLW|setPosATL|setPosition|setPosWorld|setPylonLoadOut|setPylonsPriority|setRadioMsg|setRain|setRainbow|setRandomLip|setRank|setRectangular|setRepairCargo|setRotorBrakeRTD|setShadowDistance|setShotParents|setSide|setSimpleTaskAlwaysVisible|setSimpleTaskCustomData|setSimpleTaskDescription|setSimpleTaskDestination|setSimpleTaskTarget|setSimpleTaskType|setSimulWeatherLayers|setSize|setSkill|setSlingLoad|setSoundEffect|setSpeaker|setSpeech|setSpeedMode|setStamina|setStaminaScheme|setStatValue|setSuppression|setSystemOfUnits|setTargetAge|setTaskMarkerOffset|setTaskResult|setTaskState|setTerrainGrid|setText|setTimeMultiplier|setTitleEffect|setToneMapping|setToneMappingParams|setTrafficDensity|setTrafficDistance|setTrafficGap|setTrafficSpeed|setTriggerActivation|setTriggerArea|setTriggerStatements|setTriggerText|setTriggerTimeout|setTriggerType|setType|setUnconscious|setUnitAbility|setUnitLoadout|setUnitPos|setUnitPosWeak|setUnitRank|setUnitRecoilCoefficient|setUnitTrait|setUnloadInCombat|setUserActionText|setUserMFDText|setUserMFDValue|setVariable|setVectorDir|setVectorDirAndUp|setVectorUp|setVehicleAmmo|setVehicleAmmoDef|setVehicleArmor|setVehicleCargo|setVehicleId|setVehicleInit|setVehicleLock|setVehiclePosition|setVehicleRadar|setVehicleReceiveRemoteTargets|setVehicleReportOwnPosition|setVehicleReportRemoteTargets|setVehicleTIPars|setVehicleVarName|setVelocity|setVelocityModelSpace|setVelocityTransformation|setViewDistance|setVisibleIfTreeCollapsed|setWantedRpmRTD|setWaves|setWaypointBehaviour|setWaypointCombatMode|setWaypointCompletionRadius|setWaypointDescription|setWaypointForceBehaviour|setWaypointFormation|setWaypointHousePosition|setWaypointLoiterRadius|setWaypointLoiterType|setWaypointName|setWaypointPosition|setWaypointScript|setWaypointSpeed|setWaypointStatements|setWaypointTimeout|setWaypointType|setWaypointVisible|setWeaponReloadingTime|setWind|setWindDir|setWindForce|setWindStr|setWingForceScaleRTD|setWPPos|show3DIcons|showChat|showCinemaBorder|showCommandingMenu|showCompass|showCuratorCompass|showGPS|showHUD|showLegend|showMap|shownArtilleryComputer|shownChat|shownCompass|shownCuratorCompass|showNewEditorObject|shownGPS|shownHUD|shownMap|shownPad|shownRadio|shownScoretable|shownUAVFeed|shownWarrant|shownWatch|showPad|showRadio|showScoretable|showSubtitles|showUAVFeed|showWarrant|showWatch|showWaypoint|showWaypoints|side|sideAmbientLife|sideChat|sideEmpty|sideEnemy|sideFriendly|sideLogic|sideRadio|sideUnknown|simpleTasks|simulationEnabled|simulCloudDensity|simulCloudOcclusion|simulInClouds|simulWeatherSync|sin|size|sizeOf|skill|skillFinal|skipTime|sleep|sliderPosition|sliderRange|sliderSetPosition|sliderSetRange|sliderSetSpeed|sliderSpeed|slingLoadAssistantShown|soldierMagazines|someAmmo|sort|soundVolume|speaker|speed|speedMode|splitString|sqrt|squadParams|stance|startLoadingScreen|stop|stopEngineRTD|stopped|str|sunOrMoon|supportInfo|suppressFor|surfaceIsWater|surfaceNormal|surfaceType|swimInDepth|switchableUnits|switchAction|switchCamera|switchGesture|switchLight|switchMove|synchronizedObjects|synchronizedTriggers|synchronizedWaypoints|synchronizeObjectsAdd|synchronizeObjectsRemove|synchronizeTrigger|synchronizeWaypoint|systemChat|systemOfUnits|tan|targetKnowledge|targets|targetsAggregate|targetsQuery|taskAlwaysVisible|taskChildren|taskCompleted|taskCustomData|taskDescription|taskDestination|taskHint|taskMarkerOffset|taskNull|taskParent|taskResult|taskState|taskType|teamMember|teamMemberNull|teamName|teams|teamSwitch|teamSwitchEnabled|teamType|terminate|terrainIntersect|terrainIntersectASL|terrainIntersectAtASL|text|textLog|textLogFormat|tg|time|timeMultiplier|titleCut|titleFadeOut|titleObj|titleRsc|titleText|toArray|toFixed|toLower|toString|toUpper|triggerActivated|triggerActivation|triggerArea|triggerAttachedVehicle|triggerAttachObject|triggerAttachVehicle|triggerDynamicSimulation|triggerStatements|triggerText|triggerTimeout|triggerTimeoutCurrent|triggerType|turretLocal|turretOwner|turretUnit|tvAdd|tvClear|tvCollapse|tvCollapseAll|tvCount|tvCurSel|tvData|tvDelete|tvExpand|tvExpandAll|tvPicture|tvPictureRight|tvSetColor|tvSetCurSel|tvSetData|tvSetPicture|tvSetPictureColor|tvSetPictureColorDisabled|tvSetPictureColorSelected|tvSetPictureRight|tvSetPictureRightColor|tvSetPictureRightColorDisabled|tvSetPictureRightColorSelected|tvSetSelectColor|tvSetText|tvSetTooltip|tvSetValue|tvSort|tvSortByValue|tvText|tvTooltip|tvValue|type|typeName|typeOf|UAVControl|uiNamespace|uiSleep|unassignCurator|unassignItem|unassignTeam|unassignVehicle|underwater|uniform|uniformContainer|uniformItems|uniformMagazines|unitAddons|unitAimPosition|unitAimPositionVisual|unitBackpack|unitIsUAV|unitPos|unitReady|unitRecoilCoefficient|units|unitsBelowHeight|unlinkItem|unlockAchievement|unregisterTask|updateDrawIcon|updateMenuItem|updateObjectTree|useAIOperMapObstructionTest|useAISteeringComponent|useAudioTimeForMoves|userInputDisabled|vectorAdd|vectorCos|vectorCrossProduct|vectorDiff|vectorDir|vectorDirVisual|vectorDistance|vectorDistanceSqr|vectorDotProduct|vectorFromTo|vectorMagnitude|vectorMagnitudeSqr|vectorModelToWorld|vectorModelToWorldVisual|vectorMultiply|vectorNormalized|vectorUp|vectorUpVisual|vectorWorldToModel|vectorWorldToModelVisual|vehicle|vehicleCargoEnabled|vehicleChat|vehicleRadio|vehicleReceiveRemoteTargets|vehicleReportOwnPosition|vehicleReportRemoteTargets|vehicles|vehicleVarName|velocity|velocityModelSpace|verifySignature|vest|vestContainer|vestItems|vestMagazines|viewDistance|visibleCompass|visibleGPS|visibleMap|visiblePosition|visiblePositionASL|visibleScoretable|visibleWatch|waitUntil|waves|waypointAttachedObject|waypointAttachedVehicle|waypointAttachObject|waypointAttachVehicle|waypointBehaviour|waypointCombatMode|waypointCompletionRadius|waypointDescription|waypointForceBehaviour|waypointFormation|waypointHousePosition|waypointLoiterRadius|waypointLoiterType|waypointName|waypointPosition|waypoints|waypointScript|waypointsEnabledUAV|waypointShow|waypointSpeed|waypointStatements|waypointTimeout|waypointTimeoutCurrent|waypointType|waypointVisible|weaponAccessories|weaponAccessoriesCargo|weaponCargo|weaponDirection|weaponInertia|weaponLowered|weapons|weaponsItems|weaponsItemsCargo|weaponState|weaponsTurret|weightRTD|west|WFSideText|wind|windDir|windRTD|windStr|wingsForcesRTD|worldName|worldSize|worldToModel|worldToModelVisual|worldToScreen)\\b/i,number:/(?:\\$|\\b0x)[\\da-f]+\\b|(?:\\B\\.\\d+|\\b\\d+(?:\\.\\d+)?)(?:e[+-]?\\d+)?\\b/i,operator:/##|>>|&&|\\|\\||[!=<>]=?|[-+*/%#^]|\\b(?:and|mod|not|or)\\b/i,\"magic-variable\":{pattern:/\\b(?:this|thisList|thisTrigger|_exception|_fnc_scriptName|_fnc_scriptNameParent|_forEachIndex|_this|_thisEventHandler|_thisFSM|_thisScript|_x)\\b/i,alias:\"keyword\"},constant:/\\bDIK(?:_[a-z\\d]+)+\\b/i}),Prism.languages.insertBefore(\"sqf\",\"string\",{macro:{pattern:/(^[ \\t]*)#[a-z](?:[^\\r\\n\\\\]|\\\\(?:\\r\\n|[\\s\\S]))*/im,lookbehind:!0,greedy:!0,alias:\"property\",inside:{directive:{pattern:/#[a-z]+\\b/i,alias:\"keyword\"},comment:Prism.languages.sqf.comment}}}),delete Prism.languages.sqf[\"class-name\"];/components/prism-tsx.js\u0002(function (Prism) {\n\tvar typescript = Prism.util.clone(Prism.languages.typescript);\n\tPrism.languages.tsx = Prism.languages.extend('jsx', typescript);\n\n\t// doesn't work with TS because TS is too complex\n\tdelete Prism.languages.tsx['parameter'];\n\tdelete Prism.languages.tsx['literal-property'];\n\n\t// This will prevent collisions between TSX tags and TS generic types.\n\t// Idea by https://github.com/karlhorky\n\t// Discussion: https://github.com/PrismJS/prism/issues/2594#issuecomment-710666928\n\tvar tag = Prism.languages.tsx.tag;\n\ttag.pattern = RegExp(/(^|[^\\w$]|(?=<\\/))/.source + '(?:' + tag.pattern.source + ')', tag.pattern.flags);\n\ttag.lookbehind = true;\n}(Prism));\n$/components/prism-applescript.min.js\u0006Prism.languages.applescript={comment:[/\\(\\*(?:\\(\\*(?:[^*]|\\*(?!\\)))*\\*\\)|(?!\\(\\*)[\\s\\S])*?\\*\\)/,/--.+/,/#.+/],string:/\"(?:\\\\.|[^\"\\\\\\r\\n])*\"/,number:/(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:e-?\\d+)?\\b/i,operator:[/[&=≠≤≥*+\\-\\/÷^]|[<>]=?/,/\\b(?:(?:begin|end|start)s? with|(?:contains?|(?:does not|doesn't) contain)|(?:is|isn't|is not) (?:contained by|in)|(?:(?:is|isn't|is not) )?(?:greater|less) than(?: or equal)?(?: to)?|(?:comes|(?:does not|doesn't) come) (?:after|before)|(?:is|isn't|is not) equal(?: to)?|(?:(?:does not|doesn't) equal|equal to|equals|is not|isn't)|(?:a )?(?:ref(?: to)?|reference to)|(?:and|as|div|mod|not|or))\\b/],keyword:/\\b(?:about|above|after|against|apart from|around|aside from|at|back|before|beginning|behind|below|beneath|beside|between|but|by|considering|continue|copy|does|eighth|else|end|equal|error|every|exit|false|fifth|first|for|fourth|from|front|get|given|global|if|ignoring|in|instead of|into|is|it|its|last|local|me|middle|my|ninth|of|on|onto|out of|over|prop|property|put|repeat|return|returning|second|set|seventh|since|sixth|some|tell|tenth|that|the|then|third|through|thru|timeout|times|to|transaction|true|try|until|where|while|whose|with|without)\\b/,\"class-name\":/\\b(?:POSIX file|RGB color|alias|application|boolean|centimeters|centimetres|class|constant|cubic centimeters|cubic centimetres|cubic feet|cubic inches|cubic meters|cubic metres|cubic yards|date|degrees Celsius|degrees Fahrenheit|degrees Kelvin|feet|file|gallons|grams|inches|integer|kilograms|kilometers|kilometres|list|liters|litres|meters|metres|miles|number|ounces|pounds|quarts|real|record|reference|script|square feet|square kilometers|square kilometres|square meters|square metres|square miles|square yards|text|yards)\\b/,punctuation:/[{}():,¬«»《》]/};/components/prism-sparql.js\u0003Prism.languages.sparql = Prism.languages.extend('turtle', {\n\t'boolean': /\\b(?:false|true)\\b/i,\n\t'variable': {\n\t\tpattern: /[?$]\\w+/,\n\t\tgreedy: true\n\t},\n}\n);\n\nPrism.languages.insertBefore('sparql', 'punctuation', {\n\t'keyword': [\n\t\t/\\b(?:A|ADD|ALL|AS|ASC|ASK|BNODE|BY|CLEAR|CONSTRUCT|COPY|CREATE|DATA|DEFAULT|DELETE|DESC|DESCRIBE|DISTINCT|DROP|EXISTS|FILTER|FROM|GROUP|HAVING|INSERT|INTO|LIMIT|LOAD|MINUS|MOVE|NAMED|NOT|NOW|OFFSET|OPTIONAL|ORDER|RAND|REDUCED|SELECT|SEPARATOR|SERVICE|SILENT|STRUUID|UNION|USING|UUID|VALUES|WHERE)\\b/i,\n\t\t/\\b(?:ABS|AVG|BIND|BOUND|CEIL|COALESCE|CONCAT|CONTAINS|COUNT|DATATYPE|DAY|ENCODE_FOR_URI|FLOOR|GROUP_CONCAT|HOURS|IF|IRI|isBLANK|isIRI|isLITERAL|isNUMERIC|isURI|LANG|LANGMATCHES|LCASE|MAX|MD5|MIN|MINUTES|MONTH|REGEX|REPLACE|ROUND|sameTerm|SAMPLE|SECONDS|SHA1|SHA256|SHA384|SHA512|STR|STRAFTER|STRBEFORE|STRDT|STRENDS|STRLANG|STRLEN|STRSTARTS|SUBSTR|SUM|TIMEZONE|TZ|UCASE|URI|YEAR)\\b(?=\\s*\\()/i,\n\t\t/\\b(?:BASE|GRAPH|PREFIX)\\b/i\n\t]\n});\n\nPrism.languages.rq = Prism.languages.sparql;\n/components/prism-vhdl.min.js\u0004<Prism.languages.vhdl={comment:/--.+/,\"vhdl-vectors\":{pattern:/\\b[oxb]\"[\\da-f_]+\"|\"[01uxzwlh-]+\"/i,alias:\"number\"},\"quoted-function\":{pattern:/\"\\S+?\"(?=\\()/,alias:\"function\"},string:/\"(?:[^\\\\\"\\r\\n]|\\\\(?:\\r\\n|[\\s\\S]))*\"/,attribute:{pattern:/\\b'\\w+/,alias:\"attr-name\"},keyword:/\\b(?:access|after|alias|all|architecture|array|assert|attribute|begin|block|body|buffer|bus|case|component|configuration|constant|disconnect|downto|else|elsif|end|entity|exit|file|for|function|generate|generic|group|guarded|if|impure|in|inertial|inout|is|label|library|linkage|literal|loop|map|new|next|null|of|on|open|others|out|package|port|postponed|private|procedure|process|pure|range|record|register|reject|report|return|select|severity|shared|signal|subtype|then|to|transport|type|unaffected|units|until|use|variable|view|wait|when|while|with)\\b/i,boolean:/\\b(?:false|true)\\b/i,function:/\\w+(?=\\()/,number:/'[01uxzwlh-]'|\\b(?:\\d+#[\\da-f_.]+#|\\d[\\d_.]*)(?:e[-+]?\\d+)?/i,operator:/[<>]=?|:=|[-+*/&=]|\\b(?:abs|and|mod|nand|nor|not|or|rem|rol|ror|sla|sll|sra|srl|xnor|xor)\\b/i,punctuation:/[{}[\\];(),.:]/};/components/prism-r.min.js\u0002\u000ePrism.languages.r={comment:/#.*/,string:{pattern:/(['\"])(?:\\\\.|(?!\\1)[^\\\\\\r\\n])*\\1/,greedy:!0},\"percent-operator\":{pattern:/%[^%\\s]*%/,alias:\"operator\"},boolean:/\\b(?:FALSE|TRUE)\\b/,ellipsis:/\\.\\.(?:\\.|\\d+)/,number:[/\\b(?:Inf|NaN)\\b/,/(?:\\b0x[\\dA-Fa-f]+(?:\\.\\d*)?|\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:[EePp][+-]?\\d+)?[iL]?/],keyword:/\\b(?:NA|NA_character_|NA_complex_|NA_integer_|NA_real_|NULL|break|else|for|function|if|in|next|repeat|while)\\b/,operator:/->?>?|<(?:=|<?-)?|[>=!]=?|::?|&&?|\\|\\|?|[+*\\/^$@~]/,punctuation:/[(){}\\[\\],;]/};/components/prism-tt2.js\u0005(function (Prism) {\n\n\tPrism.languages.tt2 = Prism.languages.extend('clike', {\n\t\t'comment': /#.*|\\[%#[\\s\\S]*?%\\]/,\n\t\t'keyword': /\\b(?:BLOCK|CALL|CASE|CATCH|CLEAR|DEBUG|DEFAULT|ELSE|ELSIF|END|FILTER|FINAL|FOREACH|GET|IF|IN|INCLUDE|INSERT|LAST|MACRO|META|NEXT|PERL|PROCESS|RAWPERL|RETURN|SET|STOP|SWITCH|TAGS|THROW|TRY|UNLESS|USE|WHILE|WRAPPER)\\b/,\n\t\t'punctuation': /[[\\]{},()]/\n\t});\n\n\tPrism.languages.insertBefore('tt2', 'number', {\n\t\t'operator': /=[>=]?|!=?|<=?|>=?|&&|\\|\\|?|\\b(?:and|not|or)\\b/,\n\t\t'variable': {\n\t\t\tpattern: /\\b[a-z]\\w*(?:\\s*\\.\\s*(?:\\d+|\\$?[a-z]\\w*))*\\b/i\n\t\t}\n\t});\n\n\tPrism.languages.insertBefore('tt2', 'keyword', {\n\t\t'delimiter': {\n\t\t\tpattern: /^(?:\\[%|%%)-?|-?%\\]$/,\n\t\t\talias: 'punctuation'\n\t\t}\n\t});\n\n\tPrism.languages.insertBefore('tt2', 'string', {\n\t\t'single-quoted-string': {\n\t\t\tpattern: /'[^\\\\']*(?:\\\\[\\s\\S][^\\\\']*)*'/,\n\t\t\tgreedy: true,\n\t\t\talias: 'string'\n\t\t},\n\t\t'double-quoted-string': {\n\t\t\tpattern: /\"[^\\\\\"]*(?:\\\\[\\s\\S][^\\\\\"]*)*\"/,\n\t\t\tgreedy: true,\n\t\t\talias: 'string',\n\t\t\tinside: {\n\t\t\t\t'variable': {\n\t\t\t\t\tpattern: /\\$(?:[a-z]\\w*(?:\\.(?:\\d+|\\$?[a-z]\\w*))*)/i\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\t// The different types of TT2 strings \"replace\" the C-like standard string\n\tdelete Prism.languages.tt2.string;\n\n\tPrism.hooks.add('before-tokenize', function (env) {\n\t\tvar tt2Pattern = /\\[%[\\s\\S]+?%\\]/g;\n\t\tPrism.languages['markup-templating'].buildPlaceholders(env, 'tt2', tt2Pattern);\n\t});\n\n\tPrism.hooks.add('after-tokenize', function (env) {\n\t\tPrism.languages['markup-templating'].tokenizePlaceholders(env, 'tt2');\n\t});\n\n}(Prism));\n/components/prism-cshtml.min.js\n\u001e!function(e){function s(e,s){for(var a=0;a<s;a++)e=e.replace(/<self>/g,(function(){return\"(?:\"+e+\")\"}));return e.replace(/<self>/g,\"[^\\\\s\\\\S]\").replace(/<str>/g,'(?:@(?!\")|\"(?:[^\\r\\n\\\\\\\\\"]|\\\\\\\\.)*\"|@\"(?:[^\\\\\\\\\"]|\"\"|\\\\\\\\[^])*\"(?!\")|\\'(?:(?:[^\\r\\n\\'\\\\\\\\]|\\\\\\\\.|\\\\\\\\[Uux][\\\\da-fA-F]{1,8})\\'|(?=[^\\\\\\\\](?!\\'))))').replace(/<comment>/g,\"(?:/(?![/*])|//.*[\\r\\n]|/\\\\*[^*]*(?:\\\\*(?!/)[^*]*)*\\\\*/)\")}var a=s(\"\\\\((?:[^()'\\\"@/]|<str>|<comment>|<self>)*\\\\)\",2),t=s(\"\\\\[(?:[^\\\\[\\\\]'\\\"@/]|<str>|<comment>|<self>)*\\\\]\",1),r=s(\"\\\\{(?:[^{}'\\\"@/]|<str>|<comment>|<self>)*\\\\}\",2),n=\"@(?:await\\\\b\\\\s*)?(?:(?!await\\\\b)\\\\w+\\\\b|\"+a+\")(?:[?!]?\\\\.\\\\w+\\\\b|(?:\"+s(\"<(?:[^<>'\\\"@/]|<comment>|<self>)*>\",1)+\")?\"+a+\"|\"+t+\")*(?![?!\\\\.(\\\\[]|<(?!/))\",l=\"(?:\\\"[^\\\"@]*\\\"|'[^'@]*'|[^\\\\s'\\\"@>=]+(?=[\\\\s>])|[\\\"'][^\\\"'@]*(?:(?:@(?![\\\\w()])|\"+n+\")[^\\\"'@]*)+[\\\"'])\",i=\"(?:\\\\s(?:\\\\s*[^\\\\s>/=]+(?:\\\\s*=\\\\s*<tagAttrValue>|(?=[\\\\s/>])))+)?\".replace(/<tagAttrValue>/,l),g=\"(?!\\\\d)[^\\\\s>/=$<%]+\"+i+\"\\\\s*/?>\",o=\"\\\\B@?(?:<([a-zA-Z][\\\\w:]*)\"+i+\"\\\\s*>(?:[^<]|</?(?!\\\\1\\\\b)\"+g+\"|\"+s(\"<\\\\1\"+i+\"\\\\s*>(?:[^<]|</?(?!\\\\1\\\\b)\"+g+\"|<self>)*</\\\\1\\\\s*>\",2)+\")*</\\\\1\\\\s*>|<\"+g+\")\";e.languages.cshtml=e.languages.extend(\"markup\",{});var c={pattern:/\\S[\\s\\S]*/,alias:\"language-csharp\",inside:e.languages.insertBefore(\"csharp\",\"string\",{html:{pattern:RegExp(o),greedy:!0,inside:e.languages.cshtml}},{csharp:e.languages.extend(\"csharp\",{})})},p={pattern:RegExp(\"(^|[^@])\"+n),lookbehind:!0,greedy:!0,alias:\"variable\",inside:{keyword:/^@/,csharp:c}};e.languages.cshtml.tag.pattern=RegExp(\"</?\"+g),e.languages.cshtml.tag.inside[\"attr-value\"].pattern=RegExp(\"=\\\\s*\"+l),e.languages.insertBefore(\"inside\",\"punctuation\",{value:p},e.languages.cshtml.tag.inside[\"attr-value\"]),e.languages.insertBefore(\"cshtml\",\"prolog\",{\"razor-comment\":{pattern:/@\\*[\\s\\S]*?\\*@/,greedy:!0,alias:\"comment\"},block:{pattern:RegExp(\"(^|[^@])@(?:\"+[r,\"(?:code|functions)\\\\s*\"+r,\"(?:for|foreach|lock|switch|using|while)\\\\s*\"+a+\"\\\\s*\"+r,\"do\\\\s*\"+r+\"\\\\s*while\\\\s*\"+a+\"(?:\\\\s*;)?\",\"try\\\\s*\"+r+\"\\\\s*catch\\\\s*\"+a+\"\\\\s*\"+r+\"\\\\s*finally\\\\s*\"+r,\"if\\\\s*\"+a+\"\\\\s*\"+r+\"(?:\\\\s*else(?:\\\\s+if\\\\s*\"+a+\")?\\\\s*\"+r+\")*\",\"helper\\\\s+\\\\w+\\\\s*\"+a+\"\\\\s*\"+r].join(\"|\")+\")\"),lookbehind:!0,greedy:!0,inside:{keyword:/^@\\w*/,csharp:c}},directive:{pattern:/^([ \\t]*)@(?:addTagHelper|attribute|implements|inherits|inject|layout|model|namespace|page|preservewhitespace|removeTagHelper|section|tagHelperPrefix|using)(?=\\s).*/m,lookbehind:!0,greedy:!0,inside:{keyword:/^@\\w+/,csharp:c}},value:p,\"delegate-operator\":{pattern:/(^|[^@])@(?=<)/,lookbehind:!0,alias:\"operator\"}}),e.languages.razor=e.languages.cshtml}(Prism);/components/prism-gn.min.js\u0004'Prism.languages.gn={comment:{pattern:/#.*/,greedy:!0},\"string-literal\":{pattern:/(^|[^\\\\\"])\"(?:[^\\r\\n\"\\\\]|\\\\.)*\"/,lookbehind:!0,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^\\\\])(?:\\\\{2})*)\\$(?:\\{[\\s\\S]*?\\}|[a-zA-Z_]\\w*|0x[a-fA-F0-9]{2})/,lookbehind:!0,inside:{number:/^\\$0x[\\s\\S]{2}$/,variable:/^\\$\\w+$/,\"interpolation-punctuation\":{pattern:/^\\$\\{|\\}$/,alias:\"punctuation\"},expression:{pattern:/[\\s\\S]+/,inside:null}}},string:/[\\s\\S]+/}},keyword:/\\b(?:else|if)\\b/,boolean:/\\b(?:false|true)\\b/,\"builtin-function\":{pattern:/\\b(?:assert|defined|foreach|import|pool|print|template|tool|toolchain)(?=\\s*\\()/i,alias:\"keyword\"},function:/\\b[a-z_]\\w*(?=\\s*\\()/i,constant:/\\b(?:current_cpu|current_os|current_toolchain|default_toolchain|host_cpu|host_os|root_build_dir|root_gen_dir|root_out_dir|target_cpu|target_gen_dir|target_os|target_out_dir)\\b/,number:/-?\\b\\d+\\b/,operator:/[-+!=<>]=?|&&|\\|\\|/,punctuation:/[(){}[\\],.]/},Prism.languages.gn[\"string-literal\"].inside.interpolation.inside.expression.inside=Prism.languages.gn,Prism.languages.gni=Prism.languages.gn;//plugins/diff-highlight/prism-diff-highlight.js\u000b6(function () {\n\n\tif (typeof Prism === 'undefined') {\n\t\treturn;\n\t}\n\n\n\tvar LANGUAGE_REGEX = /^diff-([\\w-]+)/i;\n\tvar HTML_TAG = /<\\/?(?!\\d)[^\\s>\\/=$<%]+(?:\\s(?:\\s*[^\\s>\\/=]+(?:\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))|(?=[\\s/>])))+)?\\s*\\/?>/g;\n\t//this will match a line plus the line break while ignoring the line breaks HTML tags may contain.\n\tvar HTML_LINE = RegExp(/(?:__|[^\\r\\n<])*(?:\\r\\n?|\\n|(?:__|[^\\r\\n<])(?![^\\r\\n]))/.source.replace(/__/g, function () { return HTML_TAG.source; }), 'gi');\n\n\tvar warningLogged = false;\n\n\tPrism.hooks.add('before-sanity-check', function (env) {\n\t\tvar lang = env.language;\n\t\tif (LANGUAGE_REGEX.test(lang) && !env.grammar) {\n\t\t\tenv.grammar = Prism.languages[lang] = Prism.languages.diff;\n\t\t}\n\t});\n\tPrism.hooks.add('before-tokenize', function (env) {\n\t\tif (!warningLogged && !Prism.languages.diff && !Prism.plugins.autoloader) {\n\t\t\twarningLogged = true;\n\t\t\tconsole.warn(\"Prism's Diff Highlight plugin requires the Diff language definition (prism-diff.js).\" +\n\t\t\t\t\"Make sure the language definition is loaded or use Prism's Autoloader plugin.\");\n\t\t}\n\n\t\tvar lang = env.language;\n\t\tif (LANGUAGE_REGEX.test(lang) && !Prism.languages[lang]) {\n\t\t\tPrism.languages[lang] = Prism.languages.diff;\n\t\t}\n\t});\n\n\tPrism.hooks.add('wrap', function (env) {\n\t\tvar diffLanguage; var diffGrammar;\n\n\t\tif (env.language !== 'diff') {\n\t\t\tvar langMatch = LANGUAGE_REGEX.exec(env.language);\n\t\t\tif (!langMatch) {\n\t\t\t\treturn; // not a language specific diff\n\t\t\t}\n\n\t\t\tdiffLanguage = langMatch[1];\n\t\t\tdiffGrammar = Prism.languages[diffLanguage];\n\t\t}\n\n\t\tvar PREFIXES = Prism.languages.diff && Prism.languages.diff.PREFIXES;\n\n\t\t// one of the diff tokens without any nested tokens\n\t\tif (PREFIXES && env.type in PREFIXES) {\n\t\t\t/** @type {string} */\n\t\t\tvar content = env.content.replace(HTML_TAG, ''); // remove all HTML tags\n\n\t\t\t/** @type {string} */\n\t\t\tvar decoded = content.replace(/&lt;/g, '<').replace(/&amp;/g, '&');\n\n\t\t\t// remove any one-character prefix\n\t\t\tvar code = decoded.replace(/(^|[\\r\\n])./g, '$1');\n\n\t\t\t// highlight, if possible\n\t\t\tvar highlighted;\n\t\t\tif (diffGrammar) {\n\t\t\t\thighlighted = Prism.highlight(code, diffGrammar, diffLanguage);\n\t\t\t} else {\n\t\t\t\thighlighted = Prism.util.encode(code);\n\t\t\t}\n\n\t\t\t// get the HTML source of the prefix token\n\t\t\tvar prefixToken = new Prism.Token('prefix', PREFIXES[env.type], [/\\w+/.exec(env.type)[0]]);\n\t\t\tvar prefix = Prism.Token.stringify(prefixToken, env.language);\n\n\t\t\t// add prefix\n\t\t\tvar lines = []; var m;\n\t\t\tHTML_LINE.lastIndex = 0;\n\t\t\twhile ((m = HTML_LINE.exec(highlighted))) {\n\t\t\t\tlines.push(prefix + m[0]);\n\t\t\t}\n\t\t\tif (/(?:^|[\\r\\n]).$/.test(decoded)) {\n\t\t\t\t// because both \"+a\\n+\" and \"+a\\n\" will map to \"a\\n\" after the line prefixes are removed\n\t\t\t\tlines.push(prefix);\n\t\t\t}\n\t\t\tenv.content = lines.join('');\n\n\t\t\tif (diffGrammar) {\n\t\t\t\tenv.classes.push('language-' + diffLanguage);\n\t\t\t}\n\t\t}\n\t});\n\n}());\n/components/prism-nix.min.js\u0004Prism.languages.nix={comment:{pattern:/\\/\\*[\\s\\S]*?\\*\\/|#.*/,greedy:!0},string:{pattern:/\"(?:[^\"\\\\]|\\\\[\\s\\S])*\"|''(?:(?!'')[\\s\\S]|''(?:'|\\\\|\\$\\{))*''/,greedy:!0,inside:{interpolation:{pattern:/(^|(?:^|(?!'').)[^\\\\])\\$\\{(?:[^{}]|\\{[^}]*\\})*\\}/,lookbehind:!0,inside:null}}},url:[/\\b(?:[a-z]{3,7}:\\/\\/)[\\w\\-+%~\\/.:#=?&]+/,{pattern:/([^\\/])(?:[\\w\\-+%~.:#=?&]*(?!\\/\\/)[\\w\\-+%~\\/.:#=?&])?(?!\\/\\/)\\/[\\w\\-+%~\\/.:#=?&]*/,lookbehind:!0}],antiquotation:{pattern:/\\$(?=\\{)/,alias:\"important\"},number:/\\b\\d+\\b/,keyword:/\\b(?:assert|builtins|else|if|in|inherit|let|null|or|then|with)\\b/,function:/\\b(?:abort|add|all|any|attrNames|attrValues|baseNameOf|compareVersions|concatLists|currentSystem|deepSeq|derivation|dirOf|div|elem(?:At)?|fetch(?:Tarball|url)|filter(?:Source)?|fromJSON|genList|getAttr|getEnv|hasAttr|hashString|head|import|intersectAttrs|is(?:Attrs|Bool|Function|Int|List|Null|String)|length|lessThan|listToAttrs|map|mul|parseDrvName|pathExists|read(?:Dir|File)|removeAttrs|replaceStrings|seq|sort|stringLength|sub(?:string)?|tail|throw|to(?:File|JSON|Path|String|XML)|trace|typeOf)\\b|\\bfoldl'\\B/,boolean:/\\b(?:false|true)\\b/,operator:/[=!<>]=?|\\+\\+?|\\|\\||&&|\\/\\/|->?|[?@]/,punctuation:/[{}()[\\].,:;]/},Prism.languages.nix.string.inside.interpolation.inside=Prism.languages.nix;!/components/prism-roboconf.min.js\u0001Prism.languages.roboconf={comment:/#.*/,keyword:{pattern:/(^|\\s)(?:(?:external|import)\\b|(?:facet|instance of)(?=[ \\t]+[\\w-]+[ \\t]*\\{))/,lookbehind:!0},component:{pattern:/[\\w-]+(?=[ \\t]*\\{)/,alias:\"variable\"},property:/[\\w.-]+(?=[ \\t]*:)/,value:{pattern:/(=[ \\t]*(?![ \\t]))[^,;]+/,lookbehind:!0,alias:\"attr-value\"},optional:{pattern:/\\(optional\\)/,alias:\"builtin\"},wildcard:{pattern:/(\\.)\\*/,lookbehind:!0,alias:\"operator\"},punctuation:/[{},.;:=]/};/components/prism-bsl.min.js\u0006Prism.languages.bsl={comment:/\\/\\/.*/,string:[{pattern:/\"(?:[^\"]|\"\")*\"(?!\")/,greedy:!0},{pattern:/'(?:[^'\\r\\n\\\\]|\\\\.)*'/}],keyword:[{pattern:/(^|[^\\w\\u0400-\\u0484\\u0487-\\u052f\\u1d2b\\u1d78\\u2de0-\\u2dff\\ua640-\\ua69f\\ufe2e\\ufe2f])(?:пока|для|новый|прервать|попытка|исключение|вызватьисключение|иначе|конецпопытки|неопределено|функция|перем|возврат|конецфункции|если|иначеесли|процедура|конецпроцедуры|тогда|знач|экспорт|конецесли|из|каждого|истина|ложь|по|цикл|конеццикла|выполнить)(?![\\w\\u0400-\\u0484\\u0487-\\u052f\\u1d2b\\u1d78\\u2de0-\\u2dff\\ua640-\\ua69f\\ufe2e\\ufe2f])/i,lookbehind:!0},{pattern:/\\b(?:break|do|each|else|elseif|enddo|endfunction|endif|endprocedure|endtry|except|execute|export|false|for|function|if|in|new|null|procedure|raise|return|then|to|true|try|undefined|val|var|while)\\b/i}],number:{pattern:/(^(?=\\d)|[^\\w\\u0400-\\u0484\\u0487-\\u052f\\u1d2b\\u1d78\\u2de0-\\u2dff\\ua640-\\ua69f\\ufe2e\\ufe2f])(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:E[+-]?\\d+)?/i,lookbehind:!0},operator:[/[<>+\\-*/]=?|[%=]/,{pattern:/(^|[^\\w\\u0400-\\u0484\\u0487-\\u052f\\u1d2b\\u1d78\\u2de0-\\u2dff\\ua640-\\ua69f\\ufe2e\\ufe2f])(?:и|или|не)(?![\\w\\u0400-\\u0484\\u0487-\\u052f\\u1d2b\\u1d78\\u2de0-\\u2dff\\ua640-\\ua69f\\ufe2e\\ufe2f])/i,lookbehind:!0},{pattern:/\\b(?:and|not|or)\\b/i}],punctuation:/\\(\\.|\\.\\)|[()\\[\\]:;,.]/,directive:[{pattern:/^([ \\t]*)&.*/m,lookbehind:!0,greedy:!0,alias:\"important\"},{pattern:/^([ \\t]*)#.*/gm,lookbehind:!0,greedy:!0,alias:\"important\"}]},Prism.languages.oscript=Prism.languages.bsl;/components/prism-q.min.js\u0006Prism.languages.q={string:/\"(?:\\\\.|[^\"\\\\\\r\\n])*\"/,comment:[{pattern:/([\\t )\\]}])\\/.*/,lookbehind:!0,greedy:!0},{pattern:/(^|\\r?\\n|\\r)\\/[\\t ]*(?:(?:\\r?\\n|\\r)(?:.*(?:\\r?\\n|\\r(?!\\n)))*?(?:\\\\(?=[\\t ]*(?:\\r?\\n|\\r))|$)|\\S.*)/,lookbehind:!0,greedy:!0},{pattern:/^\\\\[\\t ]*(?:\\r?\\n|\\r)[\\s\\S]+/m,greedy:!0},{pattern:/^#!.+/m,greedy:!0}],symbol:/`(?::\\S+|[\\w.]*)/,datetime:{pattern:/0N[mdzuvt]|0W[dtz]|\\d{4}\\.\\d\\d(?:m|\\.\\d\\d(?:T(?:\\d\\d(?::\\d\\d(?::\\d\\d(?:[.:]\\d\\d\\d)?)?)?)?)?[dz]?)|\\d\\d:\\d\\d(?::\\d\\d(?:[.:]\\d\\d\\d)?)?[uvt]?/,alias:\"number\"},number:/\\b(?![01]:)(?:0N[hje]?|0W[hj]?|0[wn]|0x[\\da-fA-F]+|\\d+(?:\\.\\d*)?(?:e[+-]?\\d+)?[hjfeb]?)/,keyword:/\\\\\\w+\\b|\\b(?:abs|acos|aj0?|all|and|any|asc|asin|asof|atan|attr|avgs?|binr?|by|ceiling|cols|cor|cos|count|cov|cross|csv|cut|delete|deltas|desc|dev|differ|distinct|div|do|dsave|ej|enlist|eval|except|exec|exit|exp|fby|fills|first|fkeys|flip|floor|from|get|getenv|group|gtime|hclose|hcount|hdel|hopen|hsym|iasc|identity|idesc|if|ij|in|insert|inter|inv|keys?|last|like|list|ljf?|load|log|lower|lsq|ltime|ltrim|mavg|maxs?|mcount|md5|mdev|med|meta|mins?|mmax|mmin|mmu|mod|msum|neg|next|not|null|or|over|parse|peach|pj|plist|prds?|prev|prior|rand|rank|ratios|raze|read0|read1|reciprocal|reval|reverse|rload|rotate|rsave|rtrim|save|scan|scov|sdev|select|set|setenv|show|signum|sin|sqrt|ssr?|string|sublist|sums?|sv|svar|system|tables|tan|til|trim|txf|type|uj|ungroup|union|update|upper|upsert|value|var|views?|vs|wavg|where|while|within|wj1?|wsum|ww|xasc|xbar|xcols?|xdesc|xexp|xgroup|xkey|xlog|xprev|xrank)\\b/,adverb:{pattern:/['\\/\\\\]:?|\\beach\\b/,alias:\"function\"},verb:{pattern:/(?:\\B\\.\\B|\\b[01]:|<[=>]?|>=?|[:+\\-*%,!?~=|$&#@^]):?|\\b_\\b:?/,alias:\"operator\"},punctuation:/[(){}\\[\\];.]/};/themes/prism-coy.css\u000f/**\n * prism.js Coy theme for JavaScript, CoffeeScript, CSS and HTML\n * Based on https://github.com/tshedor/workshop-wp-theme (Example: http://workshop.kansan.com/category/sessions/basics or http://workshop.timshedor.com/category/sessions/basics);\n * @author Tim  Shedor\n */\n\ncode[class*=\"language-\"],\npre[class*=\"language-\"] {\n\tcolor: black;\n\tbackground: none;\n\tfont-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;\n\tfont-size: 1em;\n\ttext-align: left;\n\twhite-space: pre;\n\tword-spacing: normal;\n\tword-break: normal;\n\tword-wrap: normal;\n\tline-height: 1.5;\n\n\t-moz-tab-size: 4;\n\t-o-tab-size: 4;\n\ttab-size: 4;\n\n\t-webkit-hyphens: none;\n\t-moz-hyphens: none;\n\t-ms-hyphens: none;\n\thyphens: none;\n}\n\n/* Code blocks */\npre[class*=\"language-\"] {\n\tposition: relative;\n\tmargin: .5em 0;\n\toverflow: visible;\n\tpadding: 1px;\n}\n\npre[class*=\"language-\"] > code {\n\tposition: relative;\n\tz-index: 1;\n\tborder-left: 10px solid #358ccb;\n\tbox-shadow: -1px 0px 0px 0px #358ccb, 0px 0px 0px 1px #dfdfdf;\n\tbackground-color: #fdfdfd;\n\tbackground-image: linear-gradient(transparent 50%, rgba(69, 142, 209, 0.04) 50%);\n\tbackground-size: 3em 3em;\n\tbackground-origin: content-box;\n\tbackground-attachment: local;\n}\n\ncode[class*=\"language-\"] {\n\tmax-height: inherit;\n\theight: inherit;\n\tpadding: 0 1em;\n\tdisplay: block;\n\toverflow: auto;\n}\n\n/* Margin bottom to accommodate shadow */\n:not(pre) > code[class*=\"language-\"],\npre[class*=\"language-\"] {\n\tbackground-color: #fdfdfd;\n\t-webkit-box-sizing: border-box;\n\t-moz-box-sizing: border-box;\n\tbox-sizing: border-box;\n\tmargin-bottom: 1em;\n}\n\n/* Inline code */\n:not(pre) > code[class*=\"language-\"] {\n\tposition: relative;\n\tpadding: .2em;\n\tborder-radius: 0.3em;\n\tcolor: #c92c2c;\n\tborder: 1px solid rgba(0, 0, 0, 0.1);\n\tdisplay: inline;\n\twhite-space: normal;\n}\n\npre[class*=\"language-\"]:before,\npre[class*=\"language-\"]:after {\n\tcontent: '';\n\tdisplay: block;\n\tposition: absolute;\n\tbottom: 0.75em;\n\tleft: 0.18em;\n\twidth: 40%;\n\theight: 20%;\n\tmax-height: 13em;\n\tbox-shadow: 0px 13px 8px #979797;\n\t-webkit-transform: rotate(-2deg);\n\t-moz-transform: rotate(-2deg);\n\t-ms-transform: rotate(-2deg);\n\t-o-transform: rotate(-2deg);\n\ttransform: rotate(-2deg);\n}\n\npre[class*=\"language-\"]:after {\n\tright: 0.75em;\n\tleft: auto;\n\t-webkit-transform: rotate(2deg);\n\t-moz-transform: rotate(2deg);\n\t-ms-transform: rotate(2deg);\n\t-o-transform: rotate(2deg);\n\ttransform: rotate(2deg);\n}\n\n.token.comment,\n.token.block-comment,\n.token.prolog,\n.token.doctype,\n.token.cdata {\n\tcolor: #7D8B99;\n}\n\n.token.punctuation {\n\tcolor: #5F6364;\n}\n\n.token.property,\n.token.tag,\n.token.boolean,\n.token.number,\n.token.function-name,\n.token.constant,\n.token.symbol,\n.token.deleted {\n\tcolor: #c92c2c;\n}\n\n.token.selector,\n.token.attr-name,\n.token.string,\n.token.char,\n.token.function,\n.token.builtin,\n.token.inserted {\n\tcolor: #2f9c0a;\n}\n\n.token.operator,\n.token.entity,\n.token.url,\n.token.variable {\n\tcolor: #a67f59;\n\tbackground: rgba(255, 255, 255, 0.5);\n}\n\n.token.atrule,\n.token.attr-value,\n.token.keyword,\n.token.class-name {\n\tcolor: #1990b8;\n}\n\n.token.regex,\n.token.important {\n\tcolor: #e90;\n}\n\n.language-css .token.string,\n.style .token.string {\n\tcolor: #a67f59;\n\tbackground: rgba(255, 255, 255, 0.5);\n}\n\n.token.important {\n\tfont-weight: normal;\n}\n\n.token.bold {\n\tfont-weight: bold;\n}\n.token.italic {\n\tfont-style: italic;\n}\n\n.token.entity {\n\tcursor: help;\n}\n\n.token.namespace {\n\topacity: .7;\n}\n\n@media screen and (max-width: 767px) {\n\tpre[class*=\"language-\"]:before,\n\tpre[class*=\"language-\"]:after {\n\t\tbottom: 14px;\n\t\tbox-shadow: none;\n\t}\n\n}\n\n/* Plugin styles: Line Numbers */\npre[class*=\"language-\"].line-numbers.line-numbers {\n\tpadding-left: 0;\n}\n\npre[class*=\"language-\"].line-numbers.line-numbers code {\n\tpadding-left: 3.8em;\n}\n\npre[class*=\"language-\"].line-numbers.line-numbers .line-numbers-rows {\n\tleft: 0;\n}\n\n/* Plugin styles: Line Highlight */\npre[class*=\"language-\"][data-line] {\n\tpadding-top: 0;\n\tpadding-bottom: 0;\n\tpadding-left: 0;\n}\npre[data-line] code {\n\tposition: relative;\n\tpadding-left: 4em;\n}\npre .line-highlight {\n\tmargin-top: 0;\n}\n%/components/prism-editorconfig.min.js\u0001\\Prism.languages.editorconfig={comment:/[;#].*/,section:{pattern:/(^[ \\t]*)\\[.+\\]/m,lookbehind:!0,alias:\"selector\",inside:{regex:/\\\\\\\\[\\[\\]{},!?.*]/,operator:/[!?]|\\.\\.|\\*{1,2}/,punctuation:/[\\[\\]{},]/}},key:{pattern:/(^[ \\t]*)[^\\s=]+(?=[ \\t]*=)/m,lookbehind:!0,alias:\"attr-name\"},value:{pattern:/=.*/,alias:\"attr-value\",inside:{punctuation:/^=/}}};+/plugins/inline-color/prism-inline-color.js\u000b(function () {\n\n\tif (typeof Prism === 'undefined' || typeof document === 'undefined') {\n\t\treturn;\n\t}\n\n\t// Copied from the markup language definition\n\tvar HTML_TAG = /<\\/?(?!\\d)[^\\s>\\/=$<%]+(?:\\s(?:\\s*[^\\s>\\/=]+(?:\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))|(?=[\\s/>])))+)?\\s*\\/?>/g;\n\n\t// a regex to validate hexadecimal colors\n\tvar HEX_COLOR = /^#?((?:[\\da-f]){3,4}|(?:[\\da-f]{2}){3,4})$/i;\n\n\t/**\n\t * Parses the given hexadecimal representation and returns the parsed RGBA color.\n\t *\n\t * If the format of the given string is invalid, `undefined` will be returned.\n\t * Valid formats are: `RGB`, `RGBA`, `RRGGBB`, and `RRGGBBAA`.\n\t *\n\t * Hexadecimal colors are parsed because they are not fully supported by older browsers, so converting them to\n\t * `rgba` functions improves browser compatibility.\n\t *\n\t * @param {string} hex\n\t * @returns {string | undefined}\n\t */\n\tfunction parseHexColor(hex) {\n\t\tvar match = HEX_COLOR.exec(hex);\n\t\tif (!match) {\n\t\t\treturn undefined;\n\t\t}\n\t\thex = match[1]; // removes the leading \"#\"\n\n\t\t// the width and number of channels\n\t\tvar channelWidth = hex.length >= 6 ? 2 : 1;\n\t\tvar channelCount = hex.length / channelWidth;\n\n\t\t// the scale used to normalize 4bit and 8bit values\n\t\tvar scale = channelWidth == 1 ? 1 / 15 : 1 / 255;\n\n\t\t// normalized RGBA channels\n\t\tvar channels = [];\n\t\tfor (var i = 0; i < channelCount; i++) {\n\t\t\tvar int = parseInt(hex.substr(i * channelWidth, channelWidth), 16);\n\t\t\tchannels.push(int * scale);\n\t\t}\n\t\tif (channelCount == 3) {\n\t\t\tchannels.push(1); // add alpha of 100%\n\t\t}\n\n\t\t// output\n\t\tvar rgb = channels.slice(0, 3).map(function (x) {\n\t\t\treturn String(Math.round(x * 255));\n\t\t}).join(',');\n\t\tvar alpha = String(Number(channels[3].toFixed(3))); // easy way to round 3 decimal places\n\n\t\treturn 'rgba(' + rgb + ',' + alpha + ')';\n\t}\n\n\t/**\n\t * Validates the given Color using the current browser's internal implementation.\n\t *\n\t * @param {string} color\n\t * @returns {string | undefined}\n\t */\n\tfunction validateColor(color) {\n\t\tvar s = new Option().style;\n\t\ts.color = color;\n\t\treturn s.color ? color : undefined;\n\t}\n\n\t/**\n\t * An array of function which parse a given string representation of a color.\n\t *\n\t * These parser serve as validators and as a layer of compatibility to support color formats which the browser\n\t * might not support natively.\n\t *\n\t * @type {((value: string) => (string|undefined))[]}\n\t */\n\tvar parsers = [\n\t\tparseHexColor,\n\t\tvalidateColor\n\t];\n\n\n\tPrism.hooks.add('wrap', function (env) {\n\t\tif (env.type === 'color' || env.classes.indexOf('color') >= 0) {\n\t\t\tvar content = env.content;\n\n\t\t\t// remove all HTML tags inside\n\t\t\tvar rawText = content.split(HTML_TAG).join('');\n\n\t\t\tvar color;\n\t\t\tfor (var i = 0, l = parsers.length; i < l && !color; i++) {\n\t\t\t\tcolor = parsers[i](rawText);\n\t\t\t}\n\n\t\t\tif (!color) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar previewElement = '<span class=\"inline-color-wrapper\"><span class=\"inline-color\" style=\"background-color:' + color + ';\"></span></span>';\n\t\t\tenv.content = previewElement + content;\n\t\t}\n\t});\n\n}());\n/components/prism-wgsl.js\u000ePrism.languages.wgsl = {\n\t'comment': {\n\t\tpattern: /\\/\\/.*|\\/\\*[\\s\\S]*?(?:\\*\\/|$)/,\n\t\tgreedy: true,\n\t},\n\t'builtin-attribute': {\n\t\tpattern: /(@)builtin\\(.*?\\)/,\n\t\tlookbehind: true,\n\t\tinside: {\n\t\t\t'attribute': {\n\t\t\t\tpattern: /^builtin/,\n\t\t\t\talias: 'attr-name',\n\t\t\t},\n\t\t\t'punctuation': /[(),]/,\n\t\t\t'built-in-values': {\n\t\t\t\tpattern: /\\b(?:frag_depth|front_facing|global_invocation_id|instance_index|local_invocation_id|local_invocation_index|num_workgroups|position|sample_index|sample_mask|vertex_index|workgroup_id)\\b/,\n\t\t\t\talias: 'attr-value',\n\t\t\t},\n\t\t},\n\t},\n\t'attributes': {\n\t\tpattern: /(@)(?:align|binding|compute|const|fragment|group|id|interpolate|invariant|location|size|vertex|workgroup_size)/i,\n\t\tlookbehind: true,\n\t\talias: 'attr-name',\n\t},\n\t'functions': {\n\t\tpattern: /\\b(fn\\s+)[_a-zA-Z]\\w*(?=[(<])/,\n\t\tlookbehind: true,\n\t\talias: 'function',\n\t},\n\t'keyword': /\\b(?:bitcast|break|case|const|continue|continuing|default|discard|else|enable|fallthrough|fn|for|function|if|let|loop|private|return|storage|struct|switch|type|uniform|var|while|workgroup)\\b/,\n\t'builtin': /\\b(?:abs|acos|acosh|all|any|array|asin|asinh|atan|atan2|atanh|atomic|atomicAdd|atomicAnd|atomicCompareExchangeWeak|atomicExchange|atomicLoad|atomicMax|atomicMin|atomicOr|atomicStore|atomicSub|atomicXor|bool|ceil|clamp|cos|cosh|countLeadingZeros|countOneBits|countTrailingZeros|cross|degrees|determinant|distance|dot|dpdx|dpdxCoarse|dpdxFine|dpdy|dpdyCoarse|dpdyFine|exp|exp2|extractBits|f32|f64|faceForward|firstLeadingBit|floor|fma|fract|frexp|fwidth|fwidthCoarse|fwidthFine|i32|i64|insertBits|inverseSqrt|ldexp|length|log|log2|mat[2-4]x[2-4]|max|min|mix|modf|normalize|override|pack2x16float|pack2x16snorm|pack2x16unorm|pack4x8snorm|pack4x8unorm|pow|ptr|quantizeToF16|radians|reflect|refract|reverseBits|round|sampler|sampler_comparison|select|shiftLeft|shiftRight|sign|sin|sinh|smoothstep|sqrt|staticAssert|step|storageBarrier|tan|tanh|textureDimensions|textureGather|textureGatherCompare|textureLoad|textureNumLayers|textureNumLevels|textureNumSamples|textureSample|textureSampleBias|textureSampleCompare|textureSampleCompareLevel|textureSampleGrad|textureSampleLevel|textureStore|texture_1d|texture_2d|texture_2d_array|texture_3d|texture_cube|texture_cube_array|texture_depth_2d|texture_depth_2d_array|texture_depth_cube|texture_depth_cube_array|texture_depth_multisampled_2d|texture_multisampled_2d|texture_storage_1d|texture_storage_2d|texture_storage_2d_array|texture_storage_3d|transpose|trunc|u32|u64|unpack2x16float|unpack2x16snorm|unpack2x16unorm|unpack4x8snorm|unpack4x8unorm|vec[2-4]|workgroupBarrier)\\b/,\n\t'function-calls': {\n\t\tpattern: /\\b[_a-z]\\w*(?=\\()/i,\n\t\talias: 'function',\n\t},\n\t'class-name': /\\b(?:[A-Z][A-Za-z0-9]*)\\b/,\n\t'bool-literal': {\n\t\tpattern: /\\b(?:false|true)\\b/,\n\t\talias: 'boolean',\n\t},\n\t'hex-int-literal': {\n\t\tpattern: /\\b0[xX][0-9a-fA-F]+[iu]?\\b(?![.pP])/,\n\t\talias: 'number',\n\t},\n\t'hex-float-literal': {\n\t\tpattern: /\\b0[xX][0-9a-fA-F]*(?:\\.[0-9a-fA-F]*)?(?:[pP][+-]?\\d+[fh]?)?/, alias: 'number'\n\t},\n\t'decimal-float-literal': [\n\t\t{ pattern: /\\d*\\.\\d+(?:[eE](?:\\+|-)?\\d+)?[fh]?/, alias: 'number' },\n\t\t{ pattern: /\\d+\\.\\d*(?:[eE](?:\\+|-)?\\d+)?[fh]?/, alias: 'number' },\n\t\t{ pattern: /\\d+[eE](?:\\+|-)?\\d+[fh]?/, alias: 'number' },\n\t\t{ pattern: /\\b\\d+[fh]\\b/, alias: 'number' },\n\t],\n\t'int-literal': {\n\t\tpattern: /\\b\\d+[iu]?\\b/,\n\t\talias: 'number',\n\t},\n\t'operator': [\n\t\t{ pattern: /(?:\\^|~|\\|(?!\\|)|\\|\\||&&|<<|>>|!)(?!=)/ },\n\t\t{ pattern: /&(?![&=])/ },\n\t\t{ pattern: /(?:\\+=|-=|\\*=|\\/=|%=|\\^=|&=|\\|=|<<=|>>=)/ },\n\t\t{ pattern: /(^|[^<>=!])=(?![=>])/, lookbehind: true },\n\t\t{ pattern: /(?:==|!=|<=|\\+\\+|--|(^|[^=])>=)/, lookbehind: true },\n\t\t{ pattern: /(?:(?:[+%]|(?:\\*(?!\\w)))(?!=))|(?:-(?!>))|(?:\\/(?!\\/))/ },\n\t\t{ pattern: /->/ },\n\t],\n\t'punctuation': /[@(){}[\\],;<>:.]/,\n};\n/components/prism-wiki.js\u0006Prism.languages.wiki = Prism.languages.extend('markup', {\n\t'block-comment': {\n\t\tpattern: /(^|[^\\\\])\\/\\*[\\s\\S]*?\\*\\//,\n\t\tlookbehind: true,\n\t\talias: 'comment'\n\t},\n\t'heading': {\n\t\tpattern: /^(=+)[^=\\r\\n].*?\\1/m,\n\t\tinside: {\n\t\t\t'punctuation': /^=+|=+$/,\n\t\t\t'important': /.+/\n\t\t}\n\t},\n\t'emphasis': {\n\t\t// TODO Multi-line\n\t\tpattern: /('{2,5}).+?\\1/,\n\t\tinside: {\n\t\t\t'bold-italic': {\n\t\t\t\tpattern: /(''''').+?(?=\\1)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: ['bold', 'italic']\n\t\t\t},\n\t\t\t'bold': {\n\t\t\t\tpattern: /(''')[^'](?:.*?[^'])?(?=\\1)/,\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\t'italic': {\n\t\t\t\tpattern: /('')[^'](?:.*?[^'])?(?=\\1)/,\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\t'punctuation': /^''+|''+$/\n\t\t}\n\t},\n\t'hr': {\n\t\tpattern: /^-{4,}/m,\n\t\talias: 'punctuation'\n\t},\n\t'url': [\n\t\t/ISBN +(?:97[89][ -]?)?(?:\\d[ -]?){9}[\\dx]\\b|(?:PMID|RFC) +\\d+/i,\n\t\t/\\[\\[.+?\\]\\]|\\[.+?\\]/\n\t],\n\t'variable': [\n\t\t/__[A-Z]+__/,\n\t\t// FIXME Nested structures should be handled\n\t\t// {{formatnum:{{#expr:{{{3}}}}}}}\n\t\t/\\{{3}.+?\\}{3}/,\n\t\t/\\{\\{.+?\\}\\}/\n\t],\n\t'symbol': [\n\t\t/^#redirect/im,\n\t\t/~{3,5}/\n\t],\n\t// Handle table attrs:\n\t// {|\n\t// ! style=\"text-align:left;\"| Item\n\t// |}\n\t'table-tag': {\n\t\tpattern: /((?:^|[|!])[|!])[^|\\r\\n]+\\|(?!\\|)/m,\n\t\tlookbehind: true,\n\t\tinside: {\n\t\t\t'table-bar': {\n\t\t\t\tpattern: /\\|$/,\n\t\t\t\talias: 'punctuation'\n\t\t\t},\n\t\t\trest: Prism.languages.markup['tag'].inside\n\t\t}\n\t},\n\t'punctuation': /^(?:\\{\\||\\|\\}|\\|-|[*#:;!|])|\\|\\||!!/m\n});\n\nPrism.languages.insertBefore('wiki', 'tag', {\n\t// Prevent highlighting inside <nowiki>, <source> and <pre> tags\n\t'nowiki': {\n\t\tpattern: /<(nowiki|pre|source)\\b[^>]*>[\\s\\S]*?<\\/\\1>/i,\n\t\tinside: {\n\t\t\t'tag': {\n\t\t\t\tpattern: /<(?:nowiki|pre|source)\\b[^>]*>|<\\/(?:nowiki|pre|source)>/i,\n\t\t\t\tinside: Prism.languages.markup['tag'].inside\n\t\t\t}\n\t\t}\n\t}\n});\n\"/components/prism-pascaligo.min.js\u00053!function(e){var n=\"(?:\\\\b\\\\w+(?:<braces>)?|<braces>)\".replace(/<braces>/g,(function(){return\"\\\\((?:[^()]|\\\\((?:[^()]|\\\\([^()]*\\\\))*\\\\))*\\\\)\"})),t=e.languages.pascaligo={comment:/\\(\\*[\\s\\S]+?\\*\\)|\\/\\/.*/,string:{pattern:/([\"'`])(?:\\\\[\\s\\S]|(?!\\1)[^\\\\])*\\1|\\^[a-z]/i,greedy:!0},\"class-name\":[{pattern:RegExp(\"(\\\\btype\\\\s+\\\\w+\\\\s+is\\\\s+)<type>\".replace(/<type>/g,(function(){return n})),\"i\"),lookbehind:!0,inside:null},{pattern:RegExp(\"<type>(?=\\\\s+is\\\\b)\".replace(/<type>/g,(function(){return n})),\"i\"),inside:null},{pattern:RegExp(\"(:\\\\s*)<type>\".replace(/<type>/g,(function(){return n}))),lookbehind:!0,inside:null}],keyword:{pattern:/(^|[^&])\\b(?:begin|block|case|const|else|end|fail|for|from|function|if|is|nil|of|remove|return|skip|then|type|var|while|with)\\b/i,lookbehind:!0},boolean:{pattern:/(^|[^&])\\b(?:False|True)\\b/i,lookbehind:!0},builtin:{pattern:/(^|[^&])\\b(?:bool|int|list|map|nat|record|string|unit)\\b/i,lookbehind:!0},function:/\\b\\w+(?=\\s*\\()/,number:[/%[01]+|&[0-7]+|\\$[a-f\\d]+/i,/\\b\\d+(?:\\.\\d+)?(?:e[+-]?\\d+)?(?:mtz|n)?/i],operator:/->|=\\/=|\\.\\.|\\*\\*|:=|<[<=>]?|>[>=]?|[+\\-*\\/]=?|[@^=|]|\\b(?:and|mod|or)\\b/,punctuation:/\\(\\.|\\.\\)|[()\\[\\]:;,.{}]/},i=[\"comment\",\"keyword\",\"builtin\",\"operator\",\"punctuation\"].reduce((function(e,n){return e[n]=t[n],e}),{});t[\"class-name\"].forEach((function(e){e.inside=i}))}(Prism);/components/prism-tsx.min.js\u00011!function(e){var a=e.util.clone(e.languages.typescript);e.languages.tsx=e.languages.extend(\"jsx\",a),delete e.languages.tsx.parameter,delete e.languages.tsx[\"literal-property\"];var t=e.languages.tsx.tag;t.pattern=RegExp(\"(^|[^\\\\w$]|(?=</))(?:\"+t.pattern.source+\")\",t.pattern.flags),t.lookbehind=!0}(Prism);/components/prism-hsts.min.jsĐPrism.languages.hsts={directive:{pattern:/\\b(?:includeSubDomains|max-age|preload)(?=[\\s;=]|$)/i,alias:\"property\"},operator:/=/,punctuation:/;/};/components/prism-scss.js\t:Prism.languages.scss = Prism.languages.extend('css', {\n\t'comment': {\n\t\tpattern: /(^|[^\\\\])(?:\\/\\*[\\s\\S]*?\\*\\/|\\/\\/.*)/,\n\t\tlookbehind: true\n\t},\n\t'atrule': {\n\t\tpattern: /@[\\w-](?:\\([^()]+\\)|[^()\\s]|\\s+(?!\\s))*?(?=\\s+[{;])/,\n\t\tinside: {\n\t\t\t'rule': /@[\\w-]+/\n\t\t\t// See rest below\n\t\t}\n\t},\n\t// url, compassified\n\t'url': /(?:[-a-z]+-)?url(?=\\()/i,\n\t// CSS selector regex is not appropriate for Sass\n\t// since there can be lot more things (var, @ directive, nesting..)\n\t// a selector must start at the end of a property or after a brace (end of other rules or nesting)\n\t// it can contain some characters that aren't used for defining rules or end of selector, & (parent selector), or interpolated variable\n\t// the end of a selector is found when there is no rules in it ( {} or {\\s}) or if there is a property (because an interpolated var\n\t// can \"pass\" as a selector- e.g: proper#{$erty})\n\t// this one was hard to do, so please be careful if you edit this one :)\n\t'selector': {\n\t\t// Initial look-ahead is used to prevent matching of blank selectors\n\t\tpattern: /(?=\\S)[^@;{}()]?(?:[^@;{}()\\s]|\\s+(?!\\s)|#\\{\\$[-\\w]+\\})+(?=\\s*\\{(?:\\}|\\s|[^}][^:{}]*[:{][^}]))/,\n\t\tinside: {\n\t\t\t'parent': {\n\t\t\t\tpattern: /&/,\n\t\t\t\talias: 'important'\n\t\t\t},\n\t\t\t'placeholder': /%[-\\w]+/,\n\t\t\t'variable': /\\$[-\\w]+|#\\{\\$[-\\w]+\\}/\n\t\t}\n\t},\n\t'property': {\n\t\tpattern: /(?:[-\\w]|\\$[-\\w]|#\\{\\$[-\\w]+\\})+(?=\\s*:)/,\n\t\tinside: {\n\t\t\t'variable': /\\$[-\\w]+|#\\{\\$[-\\w]+\\}/\n\t\t}\n\t}\n});\n\nPrism.languages.insertBefore('scss', 'atrule', {\n\t'keyword': [\n\t\t/@(?:content|debug|each|else(?: if)?|extend|for|forward|function|if|import|include|mixin|return|use|warn|while)\\b/i,\n\t\t{\n\t\t\tpattern: /( )(?:from|through)(?= )/,\n\t\t\tlookbehind: true\n\t\t}\n\t]\n});\n\nPrism.languages.insertBefore('scss', 'important', {\n\t// var and interpolated vars\n\t'variable': /\\$[-\\w]+|#\\{\\$[-\\w]+\\}/\n});\n\nPrism.languages.insertBefore('scss', 'function', {\n\t'module-modifier': {\n\t\tpattern: /\\b(?:as|hide|show|with)\\b/i,\n\t\talias: 'keyword'\n\t},\n\t'placeholder': {\n\t\tpattern: /%[-\\w]+/,\n\t\talias: 'selector'\n\t},\n\t'statement': {\n\t\tpattern: /\\B!(?:default|optional)\\b/i,\n\t\talias: 'keyword'\n\t},\n\t'boolean': /\\b(?:false|true)\\b/,\n\t'null': {\n\t\tpattern: /\\bnull\\b/,\n\t\talias: 'keyword'\n\t},\n\t'operator': {\n\t\tpattern: /(\\s)(?:[-+*\\/%]|[=!]=|<=?|>=?|and|not|or)(?=\\s)/,\n\t\tlookbehind: true\n\t}\n});\n\nPrism.languages.scss['atrule'].inside.rest = Prism.languages.scss;\n/components/prism-psl.js\fPrism.languages.psl = {\n\t'comment': {\n\t\tpattern: /#.*/,\n\t\tgreedy: true\n\t},\n\t'string': {\n\t\tpattern: /\"(?:\\\\.|[^\\\\\"])*\"/,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'symbol': /\\\\[ntrbA-Z\"\\\\]/\n\t\t}\n\t},\n\t'heredoc-string': {\n\t\tpattern: /<<<([a-zA-Z_]\\w*)[\\r\\n](?:.*[\\r\\n])*?\\1\\b/,\n\t\talias: 'string',\n\t\tgreedy: true\n\t},\n\t'keyword': /\\b(?:__multi|__single|case|default|do|else|elsif|exit|export|for|foreach|function|if|last|line|local|next|requires|return|switch|until|while|word)\\b/,\n\t'constant': /\\b(?:ALARM|CHART_ADD_GRAPH|CHART_DELETE_GRAPH|CHART_DESTROY|CHART_LOAD|CHART_PRINT|EOF|OFFLINE|OK|PSL_PROF_LOG|R_CHECK_HORIZ|R_CHECK_VERT|R_CLICKER|R_COLUMN|R_FRAME|R_ICON|R_LABEL|R_LABEL_CENTER|R_LIST_MULTIPLE|R_LIST_MULTIPLE_ND|R_LIST_SINGLE|R_LIST_SINGLE_ND|R_MENU|R_POPUP|R_POPUP_SCROLLED|R_RADIO_HORIZ|R_RADIO_VERT|R_ROW|R_SCALE_HORIZ|R_SCALE_VERT|R_SEP_HORIZ|R_SEP_VERT|R_SPINNER|R_TEXT_FIELD|R_TEXT_FIELD_LABEL|R_TOGGLE|TRIM_LEADING|TRIM_LEADING_AND_TRAILING|TRIM_REDUNDANT|TRIM_TRAILING|VOID|WARN)\\b/,\n\t'boolean': /\\b(?:FALSE|False|NO|No|TRUE|True|YES|Yes|false|no|true|yes)\\b/,\n\t'variable': /\\b(?:PslDebug|errno|exit_status)\\b/,\n\t'builtin': {\n\t\tpattern: /\\b(?:PslExecute|PslFunctionCall|PslFunctionExists|PslSetOptions|_snmp_debug|acos|add_diary|annotate|annotate_get|ascii_to_ebcdic|asctime|asin|atan|atexit|batch_set|blackout|cat|ceil|chan_exists|change_state|close|code_cvt|cond_signal|cond_wait|console_type|convert_base|convert_date|convert_locale_date|cos|cosh|create|date|dcget_text|destroy|destroy_lock|dget_text|difference|dump_hist|ebcdic_to_ascii|encrypt|event_archive|event_catalog_get|event_check|event_query|event_range_manage|event_range_query|event_report|event_schedule|event_trigger|event_trigger2|execute|exists|exp|fabs|file|floor|fmod|fopen|fseek|ftell|full_discovery|get|get_chan_info|get_ranges|get_text|get_vars|getenv|gethostinfo|getpid|getpname|grep|history|history_get_retention|in_transition|index|int|internal|intersection|is_var|isnumber|join|kill|length|lines|lock|lock_info|log|log10|loge|matchline|msg_check|msg_get_format|msg_get_severity|msg_printf|msg_sprintf|ntharg|nthargf|nthline|nthlinef|num_bytes|num_consoles|pconfig|popen|poplines|pow|print|printf|proc_exists|process|random|read|readln|refresh_parameters|remote_check|remote_close|remote_event_query|remote_event_trigger|remote_file_send|remote_open|remove|replace|rindex|sec_check_priv|sec_store_get|sec_store_set|set|set_alarm_ranges|set_locale|share|sin|sinh|sleep|snmp_agent_config|snmp_agent_start|snmp_agent_stop|snmp_close|snmp_config|snmp_get|snmp_get_next|snmp_h_get|snmp_h_get_next|snmp_h_set|snmp_open|snmp_set|snmp_trap_ignore|snmp_trap_listen|snmp_trap_raise_std_trap|snmp_trap_receive|snmp_trap_register_im|snmp_trap_send|snmp_walk|sopen|sort|splitline|sprintf|sqrt|srandom|str_repeat|strcasecmp|subset|substr|system|tail|tan|tanh|text_domain|time|tmpnam|tolower|toupper|trace_psl_process|trim|union|unique|unlock|unset|va_arg|va_start|write)\\b/,\n\t\talias: 'builtin-function'\n\t},\n\t'foreach-variable': {\n\t\tpattern: /(\\bforeach\\s+(?:(?:\\w+\\b|\"(?:\\\\.|[^\\\\\"])*\")\\s+){0,2})[_a-zA-Z]\\w*(?=\\s*\\()/,\n\t\tlookbehind: true,\n\t\tgreedy: true\n\t},\n\t'function': /\\b[_a-z]\\w*\\b(?=\\s*\\()/i,\n\t'number': /\\b(?:0x[0-9a-f]+|\\d+(?:\\.\\d+)?)\\b/i,\n\t'operator': /--|\\+\\+|&&=?|\\|\\|=?|<<=?|>>=?|[=!]~|[-+*/%&|^!=<>]=?|\\.|[:?]/,\n\t'punctuation': /[(){}\\[\\];,]/\n};\n$/components/prism-nand2tetris-hdl.js\u0001+Prism.languages['nand2tetris-hdl'] = {\n\t'comment': /\\/\\/.*|\\/\\*[\\s\\S]*?(?:\\*\\/|$)/,\n\t'keyword': /\\b(?:BUILTIN|CHIP|CLOCKED|IN|OUT|PARTS)\\b/,\n\t'boolean': /\\b(?:false|true)\\b/,\n\t'function': /\\b[A-Za-z][A-Za-z0-9]*(?=\\()/,\n\t'number': /\\b\\d+\\b/,\n\t'operator': /=|\\.\\./,\n\t'punctuation': /[{}[\\];(),:]/\n};\n/components/prism-yang.min.js\u00010Prism.languages.yang={comment:/\\/\\*[\\s\\S]*?\\*\\/|\\/\\/.*/,string:{pattern:/\"(?:[^\\\\\"]|\\\\.)*\"|'[^']*'/,greedy:!0},keyword:{pattern:/(^|[{};\\r\\n][ \\t]*)[a-z_][\\w.-]*/i,lookbehind:!0},namespace:{pattern:/(\\s)[a-z_][\\w.-]*(?=:)/i,lookbehind:!0},boolean:/\\b(?:false|true)\\b/,operator:/\\+/,punctuation:/[{};:]/};/components/prism-vala.min.js\u0007Prism.languages.vala=Prism.languages.extend(\"clike\",{\"class-name\":[{pattern:/\\b[A-Z]\\w*(?:\\.\\w+)*\\b(?=(?:\\?\\s+|\\*?\\s+\\*?)\\w)/,inside:{punctuation:/\\./}},{pattern:/(\\[)[A-Z]\\w*(?:\\.\\w+)*\\b/,lookbehind:!0,inside:{punctuation:/\\./}},{pattern:/(\\b(?:class|interface)\\s+[A-Z]\\w*(?:\\.\\w+)*\\s*:\\s*)[A-Z]\\w*(?:\\.\\w+)*\\b/,lookbehind:!0,inside:{punctuation:/\\./}},{pattern:/((?:\\b(?:class|enum|interface|new|struct)\\s+)|(?:catch\\s+\\())[A-Z]\\w*(?:\\.\\w+)*\\b/,lookbehind:!0,inside:{punctuation:/\\./}}],keyword:/\\b(?:abstract|as|assert|async|base|bool|break|case|catch|char|class|const|construct|continue|default|delegate|delete|do|double|dynamic|else|ensures|enum|errordomain|extern|finally|float|for|foreach|get|if|in|inline|int|int16|int32|int64|int8|interface|internal|is|lock|long|namespace|new|null|out|override|owned|params|private|protected|public|ref|requires|return|set|short|signal|sizeof|size_t|ssize_t|static|string|struct|switch|this|throw|throws|try|typeof|uchar|uint|uint16|uint32|uint64|uint8|ulong|unichar|unowned|ushort|using|value|var|virtual|void|volatile|weak|while|yield)\\b/i,function:/\\b\\w+(?=\\s*\\()/,number:/(?:\\b0x[\\da-f]+\\b|(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:e[+-]?\\d+)?)(?:f|u?l?)?/i,operator:/\\+\\+|--|&&|\\|\\||<<=?|>>=?|=>|->|~|[+\\-*\\/%&^|=!<>]=?|\\?\\??|\\.\\.\\./,punctuation:/[{}[\\];(),.:]/,constant:/\\b[A-Z0-9_]+\\b/}),Prism.languages.insertBefore(\"vala\",\"string\",{\"raw-string\":{pattern:/\"\"\"[\\s\\S]*?\"\"\"/,greedy:!0,alias:\"string\"},\"template-string\":{pattern:/@\"[\\s\\S]*?\"/,greedy:!0,inside:{interpolation:{pattern:/\\$(?:\\([^)]*\\)|[a-zA-Z]\\w*)/,inside:{delimiter:{pattern:/^\\$\\(?|\\)$/,alias:\"punctuation\"},rest:Prism.languages.vala}},string:/[\\s\\S]+/}}}),Prism.languages.insertBefore(\"vala\",\"keyword\",{regex:{pattern:/\\/(?:\\[(?:[^\\]\\\\\\r\\n]|\\\\.)*\\]|\\\\.|[^/\\\\\\[\\r\\n])+\\/[imsx]{0,4}(?=\\s*(?:$|[\\r\\n,.;})\\]]))/,greedy:!0,inside:{\"regex-source\":{pattern:/^(\\/)[\\s\\S]+(?=\\/[a-z]*$)/,lookbehind:!0,alias:\"language-regex\",inside:Prism.languages.regex},\"regex-delimiter\":/^\\//,\"regex-flags\":/^[a-z]+$/}}});/components/prism-dhall.min.js\u0004Prism.languages.dhall={comment:/--.*|\\{-(?:[^-{]|-(?!\\})|\\{(?!-)|\\{-(?:[^-{]|-(?!\\})|\\{(?!-))*-\\})*-\\}/,string:{pattern:/\"(?:[^\"\\\\]|\\\\.)*\"|''(?:[^']|'(?!')|'''|''\\$\\{)*''(?!'|\\$)/,greedy:!0,inside:{interpolation:{pattern:/\\$\\{[^{}]*\\}/,inside:{expression:{pattern:/(^\\$\\{)[\\s\\S]+(?=\\}$)/,lookbehind:!0,alias:\"language-dhall\",inside:null},punctuation:/\\$\\{|\\}/}}}},label:{pattern:/`[^`]*`/,greedy:!0},url:{pattern:/\\bhttps?:\\/\\/[\\w.:%!$&'*+;=@~-]+(?:\\/[\\w.:%!$&'*+;=@~-]*)*(?:\\?[/?\\w.:%!$&'*+;=@~-]*)?/,greedy:!0},env:{pattern:/\\benv:(?:(?!\\d)\\w+|\"(?:[^\"\\\\=]|\\\\.)*\")/,greedy:!0,inside:{function:/^env/,operator:/^:/,variable:/[\\s\\S]+/}},hash:{pattern:/\\bsha256:[\\da-fA-F]{64}\\b/,inside:{function:/sha256/,operator:/:/,number:/[\\da-fA-F]{64}/}},keyword:/\\b(?:as|assert|else|forall|if|in|let|merge|missing|then|toMap|using|with)\\b|\\u2200/,builtin:/\\b(?:None|Some)\\b/,boolean:/\\b(?:False|True)\\b/,number:/\\bNaN\\b|-?\\bInfinity\\b|[+-]?\\b(?:0x[\\da-fA-F]+|\\d+(?:\\.\\d+)?(?:e[+-]?\\d+)?)\\b/,operator:/\\/\\\\|\\/\\/\\\\\\\\|&&|\\|\\||===|[!=]=|\\/\\/|->|\\+\\+|::|[+*#@=:?<>|\\\\\\u2227\\u2a53\\u2261\\u2afd\\u03bb\\u2192]/,punctuation:/\\.\\.|[{}\\[\\](),./]/,\"class-name\":/\\b[A-Z]\\w*\\b/},Prism.languages.dhall.string.inside.interpolation.inside.expression.inside=Prism.languages.dhall;/components/prism-git.min.jsPrism.languages.git={comment:/^#.*/m,deleted:/^[-–].*/m,inserted:/^\\+.*/m,string:/(\"|')(?:\\\\.|(?!\\1)[^\\\\\\r\\n])*\\1/,command:{pattern:/^.*\\$ git .*$/m,inside:{parameter:/\\s--?\\w+/}},coord:/^@@.*@@$/m,\"commit-sha1\":/^commit \\w{40}$/m};$/components/prism-javadoclike.min.js\u0003S!function(a){var e=a.languages.javadoclike={parameter:{pattern:/(^[\\t ]*(?:\\/{3}|\\*|\\/\\*\\*)\\s*@(?:arg|arguments|param)\\s+)\\w+/m,lookbehind:!0},keyword:{pattern:/(^[\\t ]*(?:\\/{3}|\\*|\\/\\*\\*)\\s*|\\{)@[a-z][a-zA-Z-]+\\b/m,lookbehind:!0},punctuation:/[{}]/};Object.defineProperty(e,\"addSupport\",{value:function(e,n){\"string\"==typeof e&&(e=[e]),e.forEach((function(e){!function(e,n){var t=\"doc-comment\",r=a.languages[e];if(r){var o=r[t];if(o||(o=(r=a.languages.insertBefore(e,\"comment\",{\"doc-comment\":{pattern:/(^|[^\\\\])\\/\\*\\*[^/][\\s\\S]*?(?:\\*\\/|$)/,lookbehind:!0,alias:\"comment\"}}))[t]),o instanceof RegExp&&(o=r[t]={pattern:o}),Array.isArray(o))for(var i=0,s=o.length;i<s;i++)o[i]instanceof RegExp&&(o[i]={pattern:o[i]}),n(o[i]);else n(o)}}(e,(function(a){a.inside||(a.inside={}),a.inside.rest=n}))}))}}),e.addSupport([\"java\",\"javascript\",\"php\"],e)}(Prism);/components/prism-renpy.min.js\u0010Prism.languages.renpy={comment:{pattern:/(^|[^\\\\])#.+/,lookbehind:!0},string:{pattern:/(\"\"\"|''')[\\s\\S]+?\\1|(\"|')(?:\\\\.|(?!\\2)[^\\\\])*\\2|(?:^#?(?:(?:[0-9a-fA-F]){3}|[0-9a-fA-F]{6})$)/m,greedy:!0},function:/\\b[a-z_]\\w*(?=\\()/i,property:/\\b(?:Update|UpdateVersion|action|activate_sound|adv_nvl_transition|after_load_transition|align|alpha|alt|anchor|antialias|area|auto|background|bar_invert|bar_resizing|bar_vertical|black_color|bold|bottom_bar|bottom_gutter|bottom_margin|bottom_padding|box_reverse|box_wrap|can_update|caret|child|color|crop|default_afm_enable|default_afm_time|default_fullscreen|default_text_cps|developer|directory_name|drag_handle|drag_joined|drag_name|drag_raise|draggable|dragged|drop_shadow|drop_shadow_color|droppable|dropped|easein|easeout|edgescroll|end_game_transition|end_splash_transition|enter_replay_transition|enter_sound|enter_transition|enter_yesno_transition|executable_name|exit_replay_transition|exit_sound|exit_transition|exit_yesno_transition|fadein|fadeout|first_indent|first_spacing|fit_first|focus|focus_mask|font|foreground|game_main_transition|get_installed_packages|google_play_key|google_play_salt|ground|has_music|has_sound|has_voice|height|help|hinting|hover|hover_background|hover_color|hover_sound|hovered|hyperlink_functions|idle|idle_color|image_style|include_update|insensitive|insensitive_background|insensitive_color|inside|intra_transition|italic|justify|kerning|keyboard_focus|language|layer_clipping|layers|layout|left_bar|left_gutter|left_margin|left_padding|length|line_leading|line_overlap_split|line_spacing|linear|main_game_transition|main_menu_music|maximum|min_width|minimum|minwidth|modal|mouse|mousewheel|name|narrator_menu|newline_indent|nvl_adv_transition|offset|order_reverse|outlines|overlay_functions|pos|position|prefix|radius|range|rest_indent|right_bar|right_gutter|right_margin|right_padding|rotate|rotate_pad|ruby_style|sample_sound|save_directory|say_attribute_transition|screen_height|screen_width|scrollbars|selected_hover|selected_hover_color|selected_idle|selected_idle_color|selected_insensitive|show_side_image|show_two_window|side_spacing|side_xpos|side_ypos|size|size_group|slow_cps|slow_cps_multiplier|spacing|strikethrough|subpixel|text_align|text_style|text_xpos|text_y_fudge|text_ypos|thumb|thumb_offset|thumb_shadow|thumbnail_height|thumbnail_width|time|top_bar|top_gutter|top_margin|top_padding|translations|underline|unscrollable|update|value|version|version_name|version_tuple|vertical|width|window_hide_transition|window_icon|window_left_padding|window_show_transition|window_title|windows_icon|xadjustment|xalign|xanchor|xanchoraround|xaround|xcenter|xfill|xinitial|xmargin|xmaximum|xminimum|xoffset|xofsset|xpadding|xpos|xsize|xzoom|yadjustment|yalign|yanchor|yanchoraround|yaround|ycenter|yfill|yinitial|ymargin|ymaximum|yminimum|yoffset|ypadding|ypos|ysize|ysizexysize|yzoom|zoom|zorder)\\b/,tag:/\\b(?:bar|block|button|buttoscreenn|drag|draggroup|fixed|frame|grid|[hv]box|hotbar|hotspot|image|imagebutton|imagemap|input|key|label|menu|mm_menu_frame|mousearea|nvl|parallel|screen|self|side|tag|text|textbutton|timer|vbar|viewport|window)\\b|\\$/,keyword:/\\b(?:None|add|adjustment|alignaround|allow|angle|animation|around|as|assert|behind|box_layout|break|build|cache|call|center|changed|child_size|choice|circles|class|clear|clicked|clipping|clockwise|config|contains|continue|corner1|corner2|counterclockwise|def|default|define|del|delay|disabled|disabled_text|dissolve|elif|else|event|except|exclude|exec|expression|fade|finally|for|from|function|global|gm_root|has|hide|id|if|import|in|init|is|jump|knot|lambda|left|less_rounded|mm_root|movie|music|null|on|onlayer|pass|pause|persistent|play|print|python|queue|raise|random|renpy|repeat|return|right|rounded_window|scene|scope|set|show|slow|slow_abortable|slow_done|sound|stop|store|style|style_group|substitute|suffix|theme|transform|transform_anchor|transpose|try|ui|unhovered|updater|use|voice|while|widget|widget_hover|widget_selected|widget_text|yield)\\b/,boolean:/\\b(?:[Ff]alse|[Tt]rue)\\b/,number:/(?:\\b(?:0[bo])?(?:(?:\\d|0x[\\da-f])[\\da-f]*(?:\\.\\d*)?)|\\B\\.\\d+)(?:e[+-]?\\d+)?j?/i,operator:/[-+%=]=?|!=|\\*\\*?=?|\\/\\/?=?|<[<=>]?|>[=>]?|[&|^~]|\\b(?:and|at|not|or|with)\\b/,punctuation:/[{}[\\];(),.:]/},Prism.languages.rpy=Prism.languages.renpy;/components/prism-docker.min.js\u0005!function(e){var n=\"(?:[ \\t]+(?![ \\t])(?:<SP_BS>)?|<SP_BS>)\".replace(/<SP_BS>/g,(function(){return\"\\\\\\\\[\\r\\n](?:\\\\s|\\\\\\\\[\\r\\n]|#.*(?!.))*(?![\\\\s#]|\\\\\\\\[\\r\\n])\"})),r=\"\\\"(?:[^\\\"\\\\\\\\\\r\\n]|\\\\\\\\(?:\\r\\n|[^]))*\\\"|'(?:[^'\\\\\\\\\\r\\n]|\\\\\\\\(?:\\r\\n|[^]))*'\",t=\"--[\\\\w-]+=(?:<STR>|(?![\\\"'])(?:[^\\\\s\\\\\\\\]|\\\\\\\\.)+)\".replace(/<STR>/g,(function(){return r})),o={pattern:RegExp(r),greedy:!0},i={pattern:/(^[ \\t]*)#.*/m,lookbehind:!0,greedy:!0};function a(e,r){return e=e.replace(/<OPT>/g,(function(){return t})).replace(/<SP>/g,(function(){return n})),RegExp(e,r)}e.languages.docker={instruction:{pattern:/(^[ \\t]*)(?:ADD|ARG|CMD|COPY|ENTRYPOINT|ENV|EXPOSE|FROM|HEALTHCHECK|LABEL|MAINTAINER|ONBUILD|RUN|SHELL|STOPSIGNAL|USER|VOLUME|WORKDIR)(?=\\s)(?:\\\\.|[^\\r\\n\\\\])*(?:\\\\$(?:\\s|#.*$)*(?![\\s#])(?:\\\\.|[^\\r\\n\\\\])*)*/im,lookbehind:!0,greedy:!0,inside:{options:{pattern:a(\"(^(?:ONBUILD<SP>)?\\\\w+<SP>)<OPT>(?:<SP><OPT>)*\",\"i\"),lookbehind:!0,greedy:!0,inside:{property:{pattern:/(^|\\s)--[\\w-]+/,lookbehind:!0},string:[o,{pattern:/(=)(?![\"'])(?:[^\\s\\\\]|\\\\.)+/,lookbehind:!0}],operator:/\\\\$/m,punctuation:/=/}},keyword:[{pattern:a(\"(^(?:ONBUILD<SP>)?HEALTHCHECK<SP>(?:<OPT><SP>)*)(?:CMD|NONE)\\\\b\",\"i\"),lookbehind:!0,greedy:!0},{pattern:a(\"(^(?:ONBUILD<SP>)?FROM<SP>(?:<OPT><SP>)*(?!--)[^ \\t\\\\\\\\]+<SP>)AS\",\"i\"),lookbehind:!0,greedy:!0},{pattern:a(\"(^ONBUILD<SP>)\\\\w+\",\"i\"),lookbehind:!0,greedy:!0},{pattern:/^\\w+/,greedy:!0}],comment:i,string:o,variable:/\\$(?:\\w+|\\{[^{}\"'\\\\]*\\})/,operator:/\\\\$/m}},comment:i},e.languages.dockerfile=e.languages.docker}(Prism);/components/prism-go.js\u0004Prism.languages.go = Prism.languages.extend('clike', {\n\t'string': {\n\t\tpattern: /(^|[^\\\\])\"(?:\\\\.|[^\"\\\\\\r\\n])*\"|`[^`]*`/,\n\t\tlookbehind: true,\n\t\tgreedy: true\n\t},\n\t'keyword': /\\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\\b/,\n\t'boolean': /\\b(?:_|false|iota|nil|true)\\b/,\n\t'number': [\n\t\t// binary and octal integers\n\t\t/\\b0(?:b[01_]+|o[0-7_]+)i?\\b/i,\n\t\t// hexadecimal integers and floats\n\t\t/\\b0x(?:[a-f\\d_]+(?:\\.[a-f\\d_]*)?|\\.[a-f\\d_]+)(?:p[+-]?\\d+(?:_\\d+)*)?i?(?!\\w)/i,\n\t\t// decimal integers and floats\n\t\t/(?:\\b\\d[\\d_]*(?:\\.[\\d_]*)?|\\B\\.\\d[\\d_]*)(?:e[+-]?[\\d_]+)?i?(?!\\w)/i\n\t],\n\t'operator': /[*\\/%^!=]=?|\\+[=+]?|-[=-]?|\\|[=|]?|&(?:=|&|\\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\\.\\.\\./,\n\t'builtin': /\\b(?:append|bool|byte|cap|close|complex|complex(?:64|128)|copy|delete|error|float(?:32|64)|u?int(?:8|16|32|64)?|imag|len|make|new|panic|print(?:ln)?|real|recover|rune|string|uintptr)\\b/\n});\n\nPrism.languages.insertBefore('go', 'string', {\n\t'char': {\n\t\tpattern: /'(?:\\\\.|[^'\\\\\\r\\n]){0,10}'/,\n\t\tgreedy: true\n\t}\n});\n\ndelete Prism.languages.go['class-name'];\n/components/prism-eiffel.js\u0005\tPrism.languages.eiffel = {\n\t'comment': /--.*/,\n\t'string': [\n\t\t// Aligned-verbatim-strings\n\t\t{\n\t\t\tpattern: /\"([^[]*)\\[[\\s\\S]*?\\]\\1\"/,\n\t\t\tgreedy: true\n\t\t},\n\t\t// Non-aligned-verbatim-strings\n\t\t{\n\t\t\tpattern: /\"([^{]*)\\{[\\s\\S]*?\\}\\1\"/,\n\t\t\tgreedy: true\n\t\t},\n\t\t// Single-line string\n\t\t{\n\t\t\tpattern: /\"(?:%(?:(?!\\n)\\s)*\\n\\s*%|%\\S|[^%\"\\r\\n])*\"/,\n\t\t\tgreedy: true\n\t\t}\n\t],\n\t// normal char | special char | char code\n\t'char': /'(?:%.|[^%'\\r\\n])+'/,\n\t'keyword': /\\b(?:across|agent|alias|all|and|as|assign|attached|attribute|check|class|convert|create|Current|debug|deferred|detachable|do|else|elseif|end|ensure|expanded|export|external|feature|from|frozen|if|implies|inherit|inspect|invariant|like|local|loop|not|note|obsolete|old|once|or|Precursor|redefine|rename|require|rescue|Result|retry|select|separate|some|then|undefine|until|variant|Void|when|xor)\\b/i,\n\t'boolean': /\\b(?:False|True)\\b/i,\n\t// Convention: class-names are always all upper-case characters\n\t'class-name': /\\b[A-Z][\\dA-Z_]*\\b/,\n\t'number': [\n\t\t// hexa | octal | bin\n\t\t/\\b0[xcb][\\da-f](?:_*[\\da-f])*\\b/i,\n\t\t// Decimal\n\t\t/(?:\\b\\d(?:_*\\d)*)?\\.(?:(?:\\d(?:_*\\d)*)?e[+-]?)?\\d(?:_*\\d)*\\b|\\b\\d(?:_*\\d)*\\b\\.?/i\n\t],\n\t'punctuation': /:=|<<|>>|\\(\\||\\|\\)|->|\\.(?=\\w)|[{}[\\];(),:?]/,\n\t'operator': /\\\\\\\\|\\|\\.\\.\\||\\.\\.|\\/[~\\/=]?|[><]=?|[-+*^=~]/\n};\n/components/prism-parigp.min.js\u0003PPrism.languages.parigp={comment:/\\/\\*[\\s\\S]*?\\*\\/|\\\\\\\\.*/,string:{pattern:/\"(?:[^\"\\\\\\r\\n]|\\\\.)*\"/,greedy:!0},keyword:function(){var r=[\"breakpoint\",\"break\",\"dbg_down\",\"dbg_err\",\"dbg_up\",\"dbg_x\",\"forcomposite\",\"fordiv\",\"forell\",\"forpart\",\"forprime\",\"forstep\",\"forsubgroup\",\"forvec\",\"for\",\"iferr\",\"if\",\"local\",\"my\",\"next\",\"return\",\"until\",\"while\"];return r=r.map((function(r){return r.split(\"\").join(\" *\")})).join(\"|\"),RegExp(\"\\\\b(?:\"+r+\")\\\\b\")}(),function:/\\b\\w(?:[\\w ]*\\w)?(?= *\\()/,number:{pattern:/((?:\\. *\\. *)?)(?:\\b\\d(?: *\\d)*(?: *(?!\\. *\\.)\\.(?: *\\d)*)?|\\. *\\d(?: *\\d)*)(?: *e *(?:[+-] *)?\\d(?: *\\d)*)?/i,lookbehind:!0},operator:/\\. *\\.|[*\\/!](?: *=)?|%(?: *=|(?: *#)?(?: *')*)?|\\+(?: *[+=])?|-(?: *[-=>])?|<(?: *>|(?: *<)?(?: *=)?)?|>(?: *>)?(?: *=)?|=(?: *=){0,2}|\\\\(?: *\\/)?(?: *=)?|&(?: *&)?|\\| *\\||['#~^]/,punctuation:/[\\[\\]{}().,:;|]/};%/components/prism-brightscript.min.js\u0004<Prism.languages.brightscript={comment:/(?:\\brem|').*/i,\"directive-statement\":{pattern:/(^[\\t ]*)#(?:const|else(?:[\\t ]+if)?|end[\\t ]+if|error|if).*/im,lookbehind:!0,alias:\"property\",inside:{\"error-message\":{pattern:/(^#error).+/,lookbehind:!0},directive:{pattern:/^#(?:const|else(?:[\\t ]+if)?|end[\\t ]+if|error|if)/,alias:\"keyword\"},expression:{pattern:/[\\s\\S]+/,inside:null}}},property:{pattern:/([\\r\\n{,][\\t ]*)(?:(?!\\d)\\w+|\"(?:[^\"\\r\\n]|\"\")*\"(?!\"))(?=[ \\t]*:)/,lookbehind:!0,greedy:!0},string:{pattern:/\"(?:[^\"\\r\\n]|\"\")*\"(?!\")/,greedy:!0},\"class-name\":{pattern:/(\\bAs[\\t ]+)\\w+/i,lookbehind:!0},keyword:/\\b(?:As|Dim|Each|Else|Elseif|End|Exit|For|Function|Goto|If|In|Print|Return|Step|Stop|Sub|Then|To|While)\\b/i,boolean:/\\b(?:false|true)\\b/i,function:/\\b(?!\\d)\\w+(?=[\\t ]*\\()/,number:/(?:\\b\\d+(?:\\.\\d+)?(?:[ed][+-]\\d+)?|&h[a-f\\d]+)\\b[%&!#]?/i,operator:/--|\\+\\+|>>=?|<<=?|<>|[-+*/\\\\<>]=?|[:^=?]|\\b(?:and|mod|not|or)\\b/i,punctuation:/[.,;()[\\]{}]/,constant:/\\b(?:LINE_NUM)\\b/i},Prism.languages.brightscript[\"directive-statement\"].inside.expression.inside=Prism.languages.brightscript;/components/prism-c.js\n=Prism.languages.c = Prism.languages.extend('clike', {\n\t'comment': {\n\t\tpattern: /\\/\\/(?:[^\\r\\n\\\\]|\\\\(?:\\r\\n?|\\n|(?![\\r\\n])))*|\\/\\*[\\s\\S]*?(?:\\*\\/|$)/,\n\t\tgreedy: true\n\t},\n\t'string': {\n\t\t// https://en.cppreference.com/w/c/language/string_literal\n\t\tpattern: /\"(?:\\\\(?:\\r\\n|[\\s\\S])|[^\"\\\\\\r\\n])*\"/,\n\t\tgreedy: true\n\t},\n\t'class-name': {\n\t\tpattern: /(\\b(?:enum|struct)\\s+(?:__attribute__\\s*\\(\\([\\s\\S]*?\\)\\)\\s*)?)\\w+|\\b[a-z]\\w*_t\\b/,\n\t\tlookbehind: true\n\t},\n\t'keyword': /\\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\\b/,\n\t'function': /\\b[a-z_]\\w*(?=\\s*\\()/i,\n\t'number': /(?:\\b0x(?:[\\da-f]+(?:\\.[\\da-f]*)?|\\.[\\da-f]+)(?:p[+-]?\\d+)?|(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:e[+-]?\\d+)?)[ful]{0,4}/i,\n\t'operator': />>=?|<<=?|->|([-+&|:])\\1|[?:~]|[-+*/%&|^!=<>]=?/\n});\n\nPrism.languages.insertBefore('c', 'string', {\n\t'char': {\n\t\t// https://en.cppreference.com/w/c/language/character_constant\n\t\tpattern: /'(?:\\\\(?:\\r\\n|[\\s\\S])|[^'\\\\\\r\\n]){0,32}'/,\n\t\tgreedy: true\n\t}\n});\n\nPrism.languages.insertBefore('c', 'string', {\n\t'macro': {\n\t\t// allow for multiline macro definitions\n\t\t// spaces after the # character compile fine with gcc\n\t\tpattern: /(^[\\t ]*)#\\s*[a-z](?:[^\\r\\n\\\\/]|\\/(?!\\*)|\\/\\*(?:[^*]|\\*(?!\\/))*\\*\\/|\\\\(?:\\r\\n|[\\s\\S]))*/im,\n\t\tlookbehind: true,\n\t\tgreedy: true,\n\t\talias: 'property',\n\t\tinside: {\n\t\t\t'string': [\n\t\t\t\t{\n\t\t\t\t\t// highlight the path of the include statement as a string\n\t\t\t\t\tpattern: /^(#\\s*include\\s*)<[^>]+>/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t},\n\t\t\t\tPrism.languages.c['string']\n\t\t\t],\n\t\t\t'char': Prism.languages.c['char'],\n\t\t\t'comment': Prism.languages.c['comment'],\n\t\t\t'macro-name': [\n\t\t\t\t{\n\t\t\t\t\tpattern: /(^#\\s*define\\s+)\\w+\\b(?!\\()/i,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tpattern: /(^#\\s*define\\s+)\\w+\\b(?=\\()/i,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\talias: 'function'\n\t\t\t\t}\n\t\t\t],\n\t\t\t// highlight macro directives as keywords\n\t\t\t'directive': {\n\t\t\t\tpattern: /^(#\\s*)[a-z]+/,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'keyword'\n\t\t\t},\n\t\t\t'directive-hash': /^#/,\n\t\t\t'punctuation': /##|\\\\(?=[\\r\\n])/,\n\t\t\t'expression': {\n\t\t\t\tpattern: /\\S[\\s\\S]*/,\n\t\t\t\tinside: Prism.languages.c\n\t\t\t}\n\t\t}\n\t}\n});\n\nPrism.languages.insertBefore('c', 'function', {\n\t// highlight predefined macros as constants\n\t'constant': /\\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\\b/\n});\n\ndelete Prism.languages.c['boolean'];\n/themes/prism-twilight.css\u000e$/**\n * prism.js Twilight theme\n * Based (more or less) on the Twilight theme originally of Textmate fame.\n * @author Remy Bach\n */\ncode[class*=\"language-\"],\npre[class*=\"language-\"] {\n\tcolor: white;\n\tbackground: none;\n\tfont-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;\n\tfont-size: 1em;\n\ttext-align: left;\n\ttext-shadow: 0 -.1em .2em black;\n\twhite-space: pre;\n\tword-spacing: normal;\n\tword-break: normal;\n\tword-wrap: normal;\n\tline-height: 1.5;\n\n\t-moz-tab-size: 4;\n\t-o-tab-size: 4;\n\ttab-size: 4;\n\n\t-webkit-hyphens: none;\n\t-moz-hyphens: none;\n\t-ms-hyphens: none;\n\thyphens: none;\n}\n\npre[class*=\"language-\"],\n:not(pre) > code[class*=\"language-\"] {\n\tbackground: hsl(0, 0%, 8%); /* #141414 */\n}\n\n/* Code blocks */\npre[class*=\"language-\"] {\n\tborder-radius: .5em;\n\tborder: .3em solid hsl(0, 0%, 33%); /* #282A2B */\n\tbox-shadow: 1px 1px .5em black inset;\n\tmargin: .5em 0;\n\toverflow: auto;\n\tpadding: 1em;\n}\n\npre[class*=\"language-\"]::-moz-selection {\n\t/* Firefox */\n\tbackground: hsl(200, 4%, 16%); /* #282A2B */\n}\n\npre[class*=\"language-\"]::selection {\n\t/* Safari */\n\tbackground: hsl(200, 4%, 16%); /* #282A2B */\n}\n\n/* Text Selection colour */\npre[class*=\"language-\"]::-moz-selection, pre[class*=\"language-\"] ::-moz-selection,\ncode[class*=\"language-\"]::-moz-selection, code[class*=\"language-\"] ::-moz-selection {\n\ttext-shadow: none;\n\tbackground: hsla(0, 0%, 93%, 0.15); /* #EDEDED */\n}\n\npre[class*=\"language-\"]::selection, pre[class*=\"language-\"] ::selection,\ncode[class*=\"language-\"]::selection, code[class*=\"language-\"] ::selection {\n\ttext-shadow: none;\n\tbackground: hsla(0, 0%, 93%, 0.15); /* #EDEDED */\n}\n\n/* Inline code */\n:not(pre) > code[class*=\"language-\"] {\n\tborder-radius: .3em;\n\tborder: .13em solid hsl(0, 0%, 33%); /* #545454 */\n\tbox-shadow: 1px 1px .3em -.1em black inset;\n\tpadding: .15em .2em .05em;\n\twhite-space: normal;\n}\n\n.token.comment,\n.token.prolog,\n.token.doctype,\n.token.cdata {\n\tcolor: hsl(0, 0%, 47%); /* #777777 */\n}\n\n.token.punctuation {\n\topacity: .7;\n}\n\n.token.namespace {\n\topacity: .7;\n}\n\n.token.tag,\n.token.boolean,\n.token.number,\n.token.deleted {\n\tcolor: hsl(14, 58%, 55%); /* #CF6A4C */\n}\n\n.token.keyword,\n.token.property,\n.token.selector,\n.token.constant,\n.token.symbol,\n.token.builtin {\n\tcolor: hsl(53, 89%, 79%); /* #F9EE98 */\n}\n\n.token.attr-name,\n.token.attr-value,\n.token.string,\n.token.char,\n.token.operator,\n.token.entity,\n.token.url,\n.language-css .token.string,\n.style .token.string,\n.token.variable,\n.token.inserted {\n\tcolor: hsl(76, 21%, 52%); /* #8F9D6A */\n}\n\n.token.atrule {\n\tcolor: hsl(218, 22%, 55%); /* #7587A6 */\n}\n\n.token.regex,\n.token.important {\n\tcolor: hsl(42, 75%, 65%); /* #E9C062 */\n}\n\n.token.important,\n.token.bold {\n\tfont-weight: bold;\n}\n.token.italic {\n\tfont-style: italic;\n}\n\n.token.entity {\n\tcursor: help;\n}\n\n/* Markup */\n.language-markup .token.tag,\n.language-markup .token.attr-name,\n.language-markup .token.punctuation {\n\tcolor: hsl(33, 33%, 52%); /* #AC885B */\n}\n\n/* Make the tokens sit above the line highlight so the colours don't look faded. */\n.token {\n\tposition: relative;\n\tz-index: 1;\n}\n\n.line-highlight.line-highlight {\n\tbackground: hsla(0, 0%, 33%, 0.25); /* #545454 */\n\tbackground: linear-gradient(to right, hsla(0, 0%, 33%, .1) 70%, hsla(0, 0%, 33%, 0)); /* #545454 */\n\tborder-bottom: 1px dashed hsl(0, 0%, 33%); /* #545454 */\n\tborder-top: 1px dashed hsl(0, 0%, 33%); /* #545454 */\n\tmargin-top: 0.75em; /* Same as .prism’s padding-top */\n\tz-index: 0;\n}\n\n.line-highlight.line-highlight:before,\n.line-highlight.line-highlight[data-end]:after {\n\tbackground-color: hsl(215, 15%, 59%); /* #8794A6 */\n\tcolor: hsl(24, 20%, 95%); /* #F5F2F0 */\n}\n/components/prism-protobuf.js\u0004(function (Prism) {\n\n\tvar builtinTypes = /\\b(?:bool|bytes|double|s?fixed(?:32|64)|float|[su]?int(?:32|64)|string)\\b/;\n\n\tPrism.languages.protobuf = Prism.languages.extend('clike', {\n\t\t'class-name': [\n\t\t\t{\n\t\t\t\tpattern: /(\\b(?:enum|extend|message|service)\\s+)[A-Za-z_]\\w*(?=\\s*\\{)/,\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /(\\b(?:rpc\\s+\\w+|returns)\\s*\\(\\s*(?:stream\\s+)?)\\.?[A-Za-z_]\\w*(?:\\.[A-Za-z_]\\w*)*(?=\\s*\\))/,\n\t\t\t\tlookbehind: true\n\t\t\t}\n\t\t],\n\t\t'keyword': /\\b(?:enum|extend|extensions|import|message|oneof|option|optional|package|public|repeated|required|reserved|returns|rpc(?=\\s+\\w)|service|stream|syntax|to)\\b(?!\\s*=\\s*\\d)/,\n\t\t'function': /\\b[a-z_]\\w*(?=\\s*\\()/i\n\t});\n\n\tPrism.languages.insertBefore('protobuf', 'operator', {\n\t\t'map': {\n\t\t\tpattern: /\\bmap<\\s*[\\w.]+\\s*,\\s*[\\w.]+\\s*>(?=\\s+[a-z_]\\w*\\s*[=;])/i,\n\t\t\talias: 'class-name',\n\t\t\tinside: {\n\t\t\t\t'punctuation': /[<>.,]/,\n\t\t\t\t'builtin': builtinTypes\n\t\t\t}\n\t\t},\n\t\t'builtin': builtinTypes,\n\t\t'positional-class-name': {\n\t\t\tpattern: /(?:\\b|\\B\\.)[a-z_]\\w*(?:\\.[a-z_]\\w*)*(?=\\s+[a-z_]\\w*\\s*[=;])/i,\n\t\t\talias: 'class-name',\n\t\t\tinside: {\n\t\t\t\t'punctuation': /\\./\n\t\t\t}\n\t\t},\n\t\t'annotation': {\n\t\t\tpattern: /(\\[\\s*)[a-z_]\\w*(?=\\s*=)/i,\n\t\t\tlookbehind: true\n\t\t}\n\t});\n\n}(Prism));\n/components/prism-false.min.js\u0001m!function(a){a.languages.false={comment:{pattern:/\\{[^}]*\\}/},string:{pattern:/\"[^\"]*\"/,greedy:!0},\"character-code\":{pattern:/'(?:[^\\r]|\\r\\n?)/,alias:\"number\"},\"assembler-code\":{pattern:/\\d+`/,alias:\"important\"},number:/\\d+/,operator:/[-!#$%&'*+,./:;=>?@\\\\^_`|~ßø]/,punctuation:/\\[|\\]/,variable:/[a-z]/,\"non-standard\":{pattern:/[()<BDO®]/,alias:\"bold\"}}}(Prism);/components/prism-swift.min.js\u000b{Prism.languages.swift={comment:{pattern:/(^|[^\\\\:])(?:\\/\\/.*|\\/\\*(?:[^/*]|\\/(?!\\*)|\\*(?!\\/)|\\/\\*(?:[^*]|\\*(?!\\/))*\\*\\/)*\\*\\/)/,lookbehind:!0,greedy:!0},\"string-literal\":[{pattern:RegExp('(^|[^\"#])(?:\"(?:\\\\\\\\(?:\\\\((?:[^()]|\\\\([^()]*\\\\))*\\\\)|\\r\\n|[^(])|[^\\\\\\\\\\r\\n\"])*\"|\"\"\"(?:\\\\\\\\(?:\\\\((?:[^()]|\\\\([^()]*\\\\))*\\\\)|[^(])|[^\\\\\\\\\"]|\"(?!\"\"))*\"\"\")(?![\"#])'),lookbehind:!0,greedy:!0,inside:{interpolation:{pattern:/(\\\\\\()(?:[^()]|\\([^()]*\\))*(?=\\))/,lookbehind:!0,inside:null},\"interpolation-punctuation\":{pattern:/^\\)|\\\\\\($/,alias:\"punctuation\"},punctuation:/\\\\(?=[\\r\\n])/,string:/[\\s\\S]+/}},{pattern:RegExp('(^|[^\"#])(#+)(?:\"(?:\\\\\\\\(?:#+\\\\((?:[^()]|\\\\([^()]*\\\\))*\\\\)|\\r\\n|[^#])|[^\\\\\\\\\\r\\n])*?\"|\"\"\"(?:\\\\\\\\(?:#+\\\\((?:[^()]|\\\\([^()]*\\\\))*\\\\)|[^#])|[^\\\\\\\\])*?\"\"\")\\\\2'),lookbehind:!0,greedy:!0,inside:{interpolation:{pattern:/(\\\\#+\\()(?:[^()]|\\([^()]*\\))*(?=\\))/,lookbehind:!0,inside:null},\"interpolation-punctuation\":{pattern:/^\\)|\\\\#+\\($/,alias:\"punctuation\"},string:/[\\s\\S]+/}}],directive:{pattern:RegExp(\"#(?:(?:elseif|if)\\\\b(?:[ \\t]*(?:![ \\t]*)?(?:\\\\b\\\\w+\\\\b(?:[ \\t]*\\\\((?:[^()]|\\\\([^()]*\\\\))*\\\\))?|\\\\((?:[^()]|\\\\([^()]*\\\\))*\\\\))(?:[ \\t]*(?:&&|\\\\|\\\\|))?)+|(?:else|endif)\\\\b)\"),alias:\"property\",inside:{\"directive-name\":/^#\\w+/,boolean:/\\b(?:false|true)\\b/,number:/\\b\\d+(?:\\.\\d+)*\\b/,operator:/!|&&|\\|\\||[<>]=?/,punctuation:/[(),]/}},literal:{pattern:/#(?:colorLiteral|column|dsohandle|file(?:ID|Literal|Path)?|function|imageLiteral|line)\\b/,alias:\"constant\"},\"other-directive\":{pattern:/#\\w+\\b/,alias:\"property\"},attribute:{pattern:/@\\w+/,alias:\"atrule\"},\"function-definition\":{pattern:/(\\bfunc\\s+)\\w+/,lookbehind:!0,alias:\"function\"},label:{pattern:/\\b(break|continue)\\s+\\w+|\\b[a-zA-Z_]\\w*(?=\\s*:\\s*(?:for|repeat|while)\\b)/,lookbehind:!0,alias:\"important\"},keyword:/\\b(?:Any|Protocol|Self|Type|actor|as|assignment|associatedtype|associativity|async|await|break|case|catch|class|continue|convenience|default|defer|deinit|didSet|do|dynamic|else|enum|extension|fallthrough|fileprivate|final|for|func|get|guard|higherThan|if|import|in|indirect|infix|init|inout|internal|is|isolated|lazy|left|let|lowerThan|mutating|none|nonisolated|nonmutating|open|operator|optional|override|postfix|precedencegroup|prefix|private|protocol|public|repeat|required|rethrows|return|right|safe|self|set|some|static|struct|subscript|super|switch|throw|throws|try|typealias|unowned|unsafe|var|weak|where|while|willSet)\\b/,boolean:/\\b(?:false|true)\\b/,nil:{pattern:/\\bnil\\b/,alias:\"constant\"},\"short-argument\":/\\$\\d+\\b/,omit:{pattern:/\\b_\\b/,alias:\"keyword\"},number:/\\b(?:[\\d_]+(?:\\.[\\de_]+)?|0x[a-f0-9_]+(?:\\.[a-f0-9p_]+)?|0b[01_]+|0o[0-7_]+)\\b/i,\"class-name\":/\\b[A-Z](?:[A-Z_\\d]*[a-z]\\w*)?\\b/,function:/\\b[a-z_]\\w*(?=\\s*\\()/i,constant:/\\b(?:[A-Z_]{2,}|k[A-Z][A-Za-z_]+)\\b/,operator:/[-+*/%=!<>&|^~?]+|\\.[.\\-+*/%=!<>&|^~?]+/,punctuation:/[{}[\\]();,.:\\\\]/},Prism.languages.swift[\"string-literal\"].forEach((function(e){e.inside.interpolation.inside=Prism.languages.swift})); /components/prism-applescript.js\u0007BPrism.languages.applescript = {\n\t'comment': [\n\t\t// Allow one level of nesting\n\t\t/\\(\\*(?:\\(\\*(?:[^*]|\\*(?!\\)))*\\*\\)|(?!\\(\\*)[\\s\\S])*?\\*\\)/,\n\t\t/--.+/,\n\t\t/#.+/\n\t],\n\t'string': /\"(?:\\\\.|[^\"\\\\\\r\\n])*\"/,\n\t'number': /(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:e-?\\d+)?\\b/i,\n\t'operator': [\n\t\t/[&=≠≤≥*+\\-\\/÷^]|[<>]=?/,\n\t\t/\\b(?:(?:begin|end|start)s? with|(?:contains?|(?:does not|doesn't) contain)|(?:is|isn't|is not) (?:contained by|in)|(?:(?:is|isn't|is not) )?(?:greater|less) than(?: or equal)?(?: to)?|(?:comes|(?:does not|doesn't) come) (?:after|before)|(?:is|isn't|is not) equal(?: to)?|(?:(?:does not|doesn't) equal|equal to|equals|is not|isn't)|(?:a )?(?:ref(?: to)?|reference to)|(?:and|as|div|mod|not|or))\\b/\n\t],\n\t'keyword': /\\b(?:about|above|after|against|apart from|around|aside from|at|back|before|beginning|behind|below|beneath|beside|between|but|by|considering|continue|copy|does|eighth|else|end|equal|error|every|exit|false|fifth|first|for|fourth|from|front|get|given|global|if|ignoring|in|instead of|into|is|it|its|last|local|me|middle|my|ninth|of|on|onto|out of|over|prop|property|put|repeat|return|returning|second|set|seventh|since|sixth|some|tell|tenth|that|the|then|third|through|thru|timeout|times|to|transaction|true|try|until|where|while|whose|with|without)\\b/,\n\t'class-name': /\\b(?:POSIX file|RGB color|alias|application|boolean|centimeters|centimetres|class|constant|cubic centimeters|cubic centimetres|cubic feet|cubic inches|cubic meters|cubic metres|cubic yards|date|degrees Celsius|degrees Fahrenheit|degrees Kelvin|feet|file|gallons|grams|inches|integer|kilograms|kilometers|kilometres|list|liters|litres|meters|metres|miles|number|ounces|pounds|quarts|real|record|reference|script|square feet|square kilometers|square kilometres|square meters|square metres|square miles|square yards|text|yards)\\b/,\n\t'punctuation': /[{}():,¬«»《》]/\n};\n/components/prism-nasm.js\u0003\u0019Prism.languages.nasm = {\n\t'comment': /;.*$/m,\n\t'string': /([\"'`])(?:\\\\.|(?!\\1)[^\\\\\\r\\n])*\\1/,\n\t'label': {\n\t\tpattern: /(^\\s*)[A-Za-z._?$][\\w.?$@~#]*:/m,\n\t\tlookbehind: true,\n\t\talias: 'function'\n\t},\n\t'keyword': [\n\t\t/\\[?BITS (?:16|32|64)\\]?/,\n\t\t{\n\t\t\tpattern: /(^\\s*)section\\s*[a-z.]+:?/im,\n\t\t\tlookbehind: true\n\t\t},\n\t\t/(?:extern|global)[^;\\r\\n]*/i,\n\t\t/(?:CPU|DEFAULT|FLOAT).*$/m\n\t],\n\t'register': {\n\t\tpattern: /\\b(?:st\\d|[xyz]mm\\d\\d?|[cdt]r\\d|r\\d\\d?[bwd]?|[er]?[abcd]x|[abcd][hl]|[er]?(?:bp|di|si|sp)|[cdefgs]s)\\b/i,\n\t\talias: 'variable'\n\t},\n\t'number': /(?:\\b|(?=\\$))(?:0[hx](?:\\.[\\da-f]+|[\\da-f]+(?:\\.[\\da-f]+)?)(?:p[+-]?\\d+)?|\\d[\\da-f]+[hx]|\\$\\d[\\da-f]*|0[oq][0-7]+|[0-7]+[oq]|0[by][01]+|[01]+[by]|0[dt]\\d+|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:\\.?e[+-]?\\d+)?[dt]?)\\b/i,\n\t'operator': /[\\[\\]*+\\-\\/%<>=&|$!]/\n};\n/components/prism-jexl.min.js\u0002\u0017Prism.languages.jexl={string:/([\"'])(?:\\\\[\\s\\S]|(?!\\1)[^\\\\])*\\1/,transform:{pattern:/(\\|\\s*)[a-zA-Zа-яА-Я_\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u00FF$][\\wа-яА-Я\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u00FF$]*/,alias:\"function\",lookbehind:!0},function:/[a-zA-Zа-яА-Я_\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u00FF$][\\wа-яА-Я\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u00FF$]*\\s*(?=\\()/,number:/\\b\\d+(?:\\.\\d+)?\\b|\\B\\.\\d+\\b/,operator:/[<>!]=?|-|\\+|&&|==|\\|\\|?|\\/\\/?|[?:*^%]/,boolean:/\\b(?:false|true)\\b/,keyword:/\\bin\\b/,punctuation:/[{}[\\](),.]/};3/plugins/unescaped-markup/prism-unescaped-markup.js\u0007W(function () {\n\n\tif (typeof Prism === 'undefined' || typeof document === 'undefined') {\n\t\treturn;\n\t}\n\n\t// https://developer.mozilla.org/en-US/docs/Web/API/Element/matches#Polyfill\n\tif (!Element.prototype.matches) {\n\t\tElement.prototype.matches = Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector;\n\t}\n\n\n\tPrism.plugins.UnescapedMarkup = true;\n\n\tPrism.hooks.add('before-highlightall', function (env) {\n\t\tenv.selector += ', [class*=\"lang-\"] script[type=\"text/plain\"]'\n\t\t\t+ ', [class*=\"language-\"] script[type=\"text/plain\"]'\n\t\t\t+ ', script[type=\"text/plain\"][class*=\"lang-\"]'\n\t\t\t+ ', script[type=\"text/plain\"][class*=\"language-\"]';\n\t});\n\n\tPrism.hooks.add('before-sanity-check', function (env) {\n\t\t/** @type {HTMLElement} */\n\t\tvar element = env.element;\n\n\t\tif (element.matches('script[type=\"text/plain\"]')) {\n\t\t\t// found a <script type=\"text/plain\" ...> element\n\t\t\t// we convert this element to a regular <pre><code> code block\n\n\t\t\tvar code = document.createElement('code');\n\t\t\tvar pre = document.createElement('pre');\n\n\t\t\t// copy class name\n\t\t\tpre.className = code.className = element.className;\n\n\t\t\t// copy all \"data-\" attributes\n\t\t\tvar dataset = element.dataset;\n\t\t\tObject.keys(dataset || {}).forEach(function (key) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(dataset, key)) {\n\t\t\t\t\tpre.dataset[key] = dataset[key];\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tcode.textContent = env.code = env.code.replace(/&lt;\\/script(?:>|&gt;)/gi, '</scri' + 'pt>');\n\n\t\t\t// change DOM\n\t\t\tpre.appendChild(code);\n\t\t\telement.parentNode.replaceChild(pre, element);\n\t\t\tenv.element = code;\n\t\t\treturn;\n\t\t}\n\n\t\tif (!env.code) {\n\t\t\t// no code\n\t\t\tvar childNodes = element.childNodes;\n\t\t\tif (childNodes.length === 1 && childNodes[0].nodeName == '#comment') {\n\t\t\t\t// the only child is a comment -> use the comment's text\n\t\t\t\telement.textContent = env.code = childNodes[0].textContent;\n\t\t\t}\n\t\t}\n\t});\n}());\n/components/prism-puppet.min.js\t!function(e){e.languages.puppet={heredoc:[{pattern:/(@\\(\"([^\"\\r\\n\\/):]+)\"(?:\\/[nrts$uL]*)?\\).*(?:\\r?\\n|\\r))(?:.*(?:\\r?\\n|\\r(?!\\n)))*?[ \\t]*(?:\\|[ \\t]*)?(?:-[ \\t]*)?\\2/,lookbehind:!0,alias:\"string\",inside:{punctuation:/(?=\\S).*\\S(?= *$)/}},{pattern:/(@\\(([^\"\\r\\n\\/):]+)(?:\\/[nrts$uL]*)?\\).*(?:\\r?\\n|\\r))(?:.*(?:\\r?\\n|\\r(?!\\n)))*?[ \\t]*(?:\\|[ \\t]*)?(?:-[ \\t]*)?\\2/,lookbehind:!0,greedy:!0,alias:\"string\",inside:{punctuation:/(?=\\S).*\\S(?= *$)/}},{pattern:/@\\(\"?(?:[^\"\\r\\n\\/):]+)\"?(?:\\/[nrts$uL]*)?\\)/,alias:\"string\",inside:{punctuation:{pattern:/(\\().+?(?=\\))/,lookbehind:!0}}}],\"multiline-comment\":{pattern:/(^|[^\\\\])\\/\\*[\\s\\S]*?\\*\\//,lookbehind:!0,greedy:!0,alias:\"comment\"},regex:{pattern:/((?:\\bnode\\s+|[~=\\(\\[\\{,]\\s*|[=+]>\\s*|^\\s*))\\/(?:[^\\/\\\\]|\\\\[\\s\\S])+\\/(?:[imx]+\\b|\\B)/,lookbehind:!0,greedy:!0,inside:{\"extended-regex\":{pattern:/^\\/(?:[^\\/\\\\]|\\\\[\\s\\S])+\\/[im]*x[im]*$/,inside:{comment:/#.*/}}}},comment:{pattern:/(^|[^\\\\])#.*/,lookbehind:!0,greedy:!0},string:{pattern:/([\"'])(?:\\$\\{(?:[^'\"}]|([\"'])(?:(?!\\2)[^\\\\]|\\\\[\\s\\S])*\\2)+\\}|\\$(?!\\{)|(?!\\1)[^\\\\$]|\\\\[\\s\\S])*\\1/,greedy:!0,inside:{\"double-quoted\":{pattern:/^\"[\\s\\S]*\"$/,inside:{}}}},variable:{pattern:/\\$(?:::)?\\w+(?:::\\w+)*/,inside:{punctuation:/::/}},\"attr-name\":/(?:\\b\\w+|\\*)(?=\\s*=>)/,function:[{pattern:/(\\.)(?!\\d)\\w+/,lookbehind:!0},/\\b(?:contain|debug|err|fail|include|info|notice|realize|require|tag|warning)\\b|\\b(?!\\d)\\w+(?=\\()/],number:/\\b(?:0x[a-f\\d]+|\\d+(?:\\.\\d+)?(?:e-?\\d+)?)\\b/i,boolean:/\\b(?:false|true)\\b/,keyword:/\\b(?:application|attr|case|class|consumes|default|define|else|elsif|function|if|import|inherits|node|private|produces|type|undef|unless)\\b/,datatype:{pattern:/\\b(?:Any|Array|Boolean|Callable|Catalogentry|Class|Collection|Data|Default|Enum|Float|Hash|Integer|NotUndef|Numeric|Optional|Pattern|Regexp|Resource|Runtime|Scalar|String|Struct|Tuple|Type|Undef|Variant)\\b/,alias:\"symbol\"},operator:/=[=~>]?|![=~]?|<(?:<\\|?|[=~|-])?|>[>=]?|->?|~>|\\|>?>?|[*\\/%+?]|\\b(?:and|in|or)\\b/,punctuation:/[\\[\\]{}().,;]|:+/};var n=[{pattern:/(^|[^\\\\])\\$\\{(?:[^'\"{}]|\\{[^}]*\\}|([\"'])(?:(?!\\2)[^\\\\]|\\\\[\\s\\S])*\\2)+\\}/,lookbehind:!0,inside:{\"short-variable\":{pattern:/(^\\$\\{)(?!\\w+\\()(?:::)?\\w+(?:::\\w+)*/,lookbehind:!0,alias:\"variable\",inside:{punctuation:/::/}},delimiter:{pattern:/^\\$/,alias:\"variable\"},rest:e.languages.puppet}},{pattern:/(^|[^\\\\])\\$(?:::)?\\w+(?:::\\w+)*/,lookbehind:!0,alias:\"variable\",inside:{punctuation:/::/}}];e.languages.puppet.heredoc[0].inside.interpolation=n,e.languages.puppet.string.inside[\"double-quoted\"].inside.interpolation=n}(Prism);/components/prism-elixir.min.js\u00076Prism.languages.elixir={doc:{pattern:/@(?:doc|moduledoc)\\s+(?:(\"\"\"|''')[\\s\\S]*?\\1|(\"|')(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\2)[^\\\\\\r\\n])*\\2)/,inside:{attribute:/^@\\w+/,string:/['\"][\\s\\S]+/}},comment:{pattern:/#.*/,greedy:!0},regex:{pattern:/~[rR](?:(\"\"\"|''')(?:\\\\[\\s\\S]|(?!\\1)[^\\\\])+\\1|([\\/|\"'])(?:\\\\.|(?!\\2)[^\\\\\\r\\n])+\\2|\\((?:\\\\.|[^\\\\)\\r\\n])+\\)|\\[(?:\\\\.|[^\\\\\\]\\r\\n])+\\]|\\{(?:\\\\.|[^\\\\}\\r\\n])+\\}|<(?:\\\\.|[^\\\\>\\r\\n])+>)[uismxfr]*/,greedy:!0},string:[{pattern:/~[cCsSwW](?:(\"\"\"|''')(?:\\\\[\\s\\S]|(?!\\1)[^\\\\])+\\1|([\\/|\"'])(?:\\\\.|(?!\\2)[^\\\\\\r\\n])+\\2|\\((?:\\\\.|[^\\\\)\\r\\n])+\\)|\\[(?:\\\\.|[^\\\\\\]\\r\\n])+\\]|\\{(?:\\\\.|#\\{[^}]+\\}|#(?!\\{)|[^#\\\\}\\r\\n])+\\}|<(?:\\\\.|[^\\\\>\\r\\n])+>)[csa]?/,greedy:!0,inside:{}},{pattern:/(\"\"\"|''')[\\s\\S]*?\\1/,greedy:!0,inside:{}},{pattern:/(\"|')(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1/,greedy:!0,inside:{}}],atom:{pattern:/(^|[^:]):\\w+/,lookbehind:!0,alias:\"symbol\"},module:{pattern:/\\b[A-Z]\\w*\\b/,alias:\"class-name\"},\"attr-name\":/\\b\\w+\\??:(?!:)/,argument:{pattern:/(^|[^&])&\\d+/,lookbehind:!0,alias:\"variable\"},attribute:{pattern:/@\\w+/,alias:\"variable\"},function:/\\b[_a-zA-Z]\\w*[?!]?(?:(?=\\s*(?:\\.\\s*)?\\()|(?=\\/\\d))/,number:/\\b(?:0[box][a-f\\d_]+|\\d[\\d_]*)(?:\\.[\\d_]+)?(?:e[+-]?[\\d_]+)?\\b/i,keyword:/\\b(?:after|alias|and|case|catch|cond|def(?:callback|delegate|exception|impl|macro|module|n|np|p|protocol|struct)?|do|else|end|fn|for|if|import|not|or|quote|raise|require|rescue|try|unless|unquote|use|when)\\b/,boolean:/\\b(?:false|nil|true)\\b/,operator:[/\\bin\\b|&&?|\\|[|>]?|\\\\\\\\|::|\\.\\.\\.?|\\+\\+?|-[->]?|<[-=>]|>=|!==?|\\B!|=(?:==?|[>~])?|[*\\/^]/,{pattern:/([^<])<(?!<)/,lookbehind:!0},{pattern:/([^>])>(?!>)/,lookbehind:!0}],punctuation:/<<|>>|[.,%\\[\\]{}()]/},Prism.languages.elixir.string.forEach((function(e){e.inside={interpolation:{pattern:/#\\{[^}]+\\}/,inside:{delimiter:{pattern:/^#\\{|\\}$/,alias:\"punctuation\"},rest:Prism.languages.elixir}}}}));)/plugins/keep-markup/prism-keep-markup.js\r\u001f(function () {\n\n\tif (typeof Prism === 'undefined' || typeof document === 'undefined' || !document.createRange) {\n\t\treturn;\n\t}\n\n\tPrism.plugins.KeepMarkup = true;\n\n\tPrism.hooks.add('before-highlight', function (env) {\n\t\tif (!env.element.children.length) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!Prism.util.isActive(env.element, 'keep-markup', true)) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar dropTokens = Prism.util.isActive(env.element, 'drop-tokens', false);\n\t\t/**\n\t\t * Returns whether the given element should be kept.\n\t\t *\n\t\t * @param {HTMLElement} element\n\t\t * @returns {boolean}\n\t\t */\n\t\tfunction shouldKeep(element) {\n\t\t\tif (dropTokens && element.nodeName.toLowerCase() === 'span' && element.classList.contains('token')) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\tvar pos = 0;\n\t\tvar data = [];\n\t\tfunction processElement(element) {\n\t\t\tif (!shouldKeep(element)) {\n\t\t\t\t// don't keep this element and just process its children\n\t\t\t\tprocessChildren(element);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar o = {\n\t\t\t\t// Store original element so we can restore it after highlighting\n\t\t\t\telement: element,\n\t\t\t\tposOpen: pos\n\t\t\t};\n\t\t\tdata.push(o);\n\n\t\t\tprocessChildren(element);\n\n\t\t\to.posClose = pos;\n\t\t}\n\t\tfunction processChildren(element) {\n\t\t\tfor (var i = 0, l = element.childNodes.length; i < l; i++) {\n\t\t\t\tvar child = element.childNodes[i];\n\t\t\t\tif (child.nodeType === 1) { // element\n\t\t\t\t\tprocessElement(child);\n\t\t\t\t} else if (child.nodeType === 3) { // text\n\t\t\t\t\tpos += child.data.length;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tprocessChildren(env.element);\n\n\t\tif (data.length) {\n\t\t\t// data is an array of all existing tags\n\t\t\tenv.keepMarkup = data;\n\t\t}\n\t});\n\n\tPrism.hooks.add('after-highlight', function (env) {\n\t\tif (env.keepMarkup && env.keepMarkup.length) {\n\n\t\t\tvar walk = function (elt, nodeState) {\n\t\t\t\tfor (var i = 0, l = elt.childNodes.length; i < l; i++) {\n\n\t\t\t\t\tvar child = elt.childNodes[i];\n\n\t\t\t\t\tif (child.nodeType === 1) { // element\n\t\t\t\t\t\tif (!walk(child, nodeState)) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else if (child.nodeType === 3) { // text\n\t\t\t\t\t\tif (!nodeState.nodeStart && nodeState.pos + child.data.length > nodeState.node.posOpen) {\n\t\t\t\t\t\t\t// We found the start position\n\t\t\t\t\t\t\tnodeState.nodeStart = child;\n\t\t\t\t\t\t\tnodeState.nodeStartPos = nodeState.node.posOpen - nodeState.pos;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (nodeState.nodeStart && nodeState.pos + child.data.length >= nodeState.node.posClose) {\n\t\t\t\t\t\t\t// We found the end position\n\t\t\t\t\t\t\tnodeState.nodeEnd = child;\n\t\t\t\t\t\t\tnodeState.nodeEndPos = nodeState.node.posClose - nodeState.pos;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tnodeState.pos += child.data.length;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (nodeState.nodeStart && nodeState.nodeEnd) {\n\t\t\t\t\t\t// Select the range and wrap it with the element\n\t\t\t\t\t\tvar range = document.createRange();\n\t\t\t\t\t\trange.setStart(nodeState.nodeStart, nodeState.nodeStartPos);\n\t\t\t\t\t\trange.setEnd(nodeState.nodeEnd, nodeState.nodeEndPos);\n\t\t\t\t\t\tnodeState.node.element.innerHTML = '';\n\t\t\t\t\t\tnodeState.node.element.appendChild(range.extractContents());\n\t\t\t\t\t\trange.insertNode(nodeState.node.element);\n\t\t\t\t\t\trange.detach();\n\n\t\t\t\t\t\t// Process is over\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t};\n\n\t\t\t// For each tag, we walk the DOM to reinsert it\n\t\t\tenv.keepMarkup.forEach(function (node) {\n\t\t\t\twalk(env.element, {\n\t\t\t\t\tnode: node,\n\t\t\t\t\tpos: 0\n\t\t\t\t});\n\t\t\t});\n\t\t\t// Store new highlightedCode for later hooks calls\n\t\t\tenv.highlightedCode = env.element.innerHTML;\n\t\t}\n\t});\n}());\n/components/prism-log.js\f// This is a language definition for generic log files.\n// Since there is no one log format, this language definition has to support all formats to some degree.\n//\n// Based on https://github.com/MTDL9/vim-log-highlighting\n\nPrism.languages.log = {\n\t'string': {\n\t\t// Single-quoted strings must not be confused with plain text. E.g. Can't isn't Susan's Chris' toy\n\t\tpattern: /\"(?:[^\"\\\\\\r\\n]|\\\\.)*\"|'(?![st] | \\w)(?:[^'\\\\\\r\\n]|\\\\.)*'/,\n\t\tgreedy: true,\n\t},\n\n\t'exception': {\n\t\tpattern: /(^|[^\\w.])[a-z][\\w.]*(?:Error|Exception):.*(?:(?:\\r\\n?|\\n)[ \\t]*(?:at[ \\t].+|\\.{3}.*|Caused by:.*))+(?:(?:\\r\\n?|\\n)[ \\t]*\\.\\.\\. .*)?/,\n\t\tlookbehind: true,\n\t\tgreedy: true,\n\t\talias: ['javastacktrace', 'language-javastacktrace'],\n\t\tinside: Prism.languages['javastacktrace'] || {\n\t\t\t'keyword': /\\bat\\b/,\n\t\t\t'function': /[a-z_][\\w$]*(?=\\()/,\n\t\t\t'punctuation': /[.:()]/\n\t\t}\n\t},\n\n\t'level': [\n\t\t{\n\t\t\tpattern: /\\b(?:ALERT|CRIT|CRITICAL|EMERG|EMERGENCY|ERR|ERROR|FAILURE|FATAL|SEVERE)\\b/,\n\t\t\talias: ['error', 'important']\n\t\t},\n\t\t{\n\t\t\tpattern: /\\b(?:WARN|WARNING|WRN)\\b/,\n\t\t\talias: ['warning', 'important']\n\t\t},\n\t\t{\n\t\t\tpattern: /\\b(?:DISPLAY|INF|INFO|NOTICE|STATUS)\\b/,\n\t\t\talias: ['info', 'keyword']\n\t\t},\n\t\t{\n\t\t\tpattern: /\\b(?:DBG|DEBUG|FINE)\\b/,\n\t\t\talias: ['debug', 'keyword']\n\t\t},\n\t\t{\n\t\t\tpattern: /\\b(?:FINER|FINEST|TRACE|TRC|VERBOSE|VRB)\\b/,\n\t\t\talias: ['trace', 'comment']\n\t\t}\n\t],\n\n\t'property': {\n\t\tpattern: /((?:^|[\\]|])[ \\t]*)[a-z_](?:[\\w-]|\\b\\/\\b)*(?:[. ]\\(?\\w(?:[\\w-]|\\b\\/\\b)*\\)?)*:(?=\\s)/im,\n\t\tlookbehind: true\n\t},\n\n\t'separator': {\n\t\tpattern: /(^|[^-+])-{3,}|={3,}|\\*{3,}|- - /m,\n\t\tlookbehind: true,\n\t\talias: 'comment'\n\t},\n\n\t'url': /\\b(?:file|ftp|https?):\\/\\/[^\\s|,;'\"]*[^\\s|,;'\">.]/,\n\t'email': {\n\t\tpattern: /(^|\\s)[-\\w+.]+@[a-z][a-z0-9-]*(?:\\.[a-z][a-z0-9-]*)+(?=\\s)/,\n\t\tlookbehind: true,\n\t\talias: 'url'\n\t},\n\n\t'ip-address': {\n\t\tpattern: /\\b(?:\\d{1,3}(?:\\.\\d{1,3}){3})\\b/,\n\t\talias: 'constant'\n\t},\n\t'mac-address': {\n\t\tpattern: /\\b[a-f0-9]{2}(?::[a-f0-9]{2}){5}\\b/i,\n\t\talias: 'constant'\n\t},\n\t'domain': {\n\t\tpattern: /(^|\\s)[a-z][a-z0-9-]*(?:\\.[a-z][a-z0-9-]*)*\\.[a-z][a-z0-9-]+(?=\\s)/,\n\t\tlookbehind: true,\n\t\talias: 'constant'\n\t},\n\n\t'uuid': {\n\t\tpattern: /\\b[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\\b/i,\n\t\talias: 'constant'\n\t},\n\t'hash': {\n\t\tpattern: /\\b(?:[a-f0-9]{32}){1,2}\\b/i,\n\t\talias: 'constant'\n\t},\n\n\t'file-path': {\n\t\tpattern: /\\b[a-z]:[\\\\/][^\\s|,;:(){}\\[\\]\"']+|(^|[\\s:\\[\\](>|])\\.{0,2}\\/\\w[^\\s|,;:(){}\\[\\]\"']*/i,\n\t\tlookbehind: true,\n\t\tgreedy: true,\n\t\talias: 'string'\n\t},\n\n\t'date': {\n\t\tpattern: RegExp(\n\t\t\t/\\b\\d{4}[-/]\\d{2}[-/]\\d{2}(?:T(?=\\d{1,2}:)|(?=\\s\\d{1,2}:))/.source +\n\t\t\t'|' +\n\t\t\t/\\b\\d{1,4}[-/ ](?:\\d{1,2}|Apr|Aug|Dec|Feb|Jan|Jul|Jun|Mar|May|Nov|Oct|Sep)[-/ ]\\d{2,4}T?\\b/.source +\n\t\t\t'|' +\n\t\t\t/\\b(?:(?:Fri|Mon|Sat|Sun|Thu|Tue|Wed)(?:\\s{1,2}(?:Apr|Aug|Dec|Feb|Jan|Jul|Jun|Mar|May|Nov|Oct|Sep))?|Apr|Aug|Dec|Feb|Jan|Jul|Jun|Mar|May|Nov|Oct|Sep)\\s{1,2}\\d{1,2}\\b/.source,\n\t\t\t'i'\n\t\t),\n\t\talias: 'number'\n\t},\n\t'time': {\n\t\tpattern: /\\b\\d{1,2}:\\d{1,2}:\\d{1,2}(?:[.,:]\\d+)?(?:\\s?[+-]\\d{2}:?\\d{2}|Z)?\\b/,\n\t\talias: 'number'\n\t},\n\n\t'boolean': /\\b(?:false|null|true)\\b/i,\n\t'number': {\n\t\tpattern: /(^|[^.\\w])(?:0x[a-f0-9]+|0o[0-7]+|0b[01]+|v?\\d[\\da-f]*(?:\\.\\d+)*(?:e[+-]?\\d+)?[a-z]{0,3}\\b)\\b(?!\\.\\w)/i,\n\t\tlookbehind: true\n\t},\n\n\t'operator': /[;:?<=>~/@!$%&+\\-|^(){}*#]/,\n\t'punctuation': /[\\[\\].,]/\n};\n/components/prism-hpkp.js\u00015/**\n * Original by Scott Helme.\n *\n * Reference: https://scotthelme.co.uk/hpkp-cheat-sheet/\n */\n\nPrism.languages.hpkp = {\n\t'directive': {\n\t\tpattern: /\\b(?:includeSubDomains|max-age|pin-sha256|preload|report-to|report-uri|strict)(?=[\\s;=]|$)/i,\n\t\talias: 'property'\n\t},\n\t'operator': /=/,\n\t'punctuation': /;/\n};\n/components/prism-hcl.min.js\u0005pPrism.languages.hcl={comment:/(?:\\/\\/|#).*|\\/\\*[\\s\\S]*?(?:\\*\\/|$)/,heredoc:{pattern:/<<-?(\\w+\\b)[\\s\\S]*?^[ \\t]*\\1/m,greedy:!0,alias:\"string\"},keyword:[{pattern:/(?:data|resource)\\s+(?:\"(?:\\\\[\\s\\S]|[^\\\\\"])*\")(?=\\s+\"[\\w-]+\"\\s+\\{)/i,inside:{type:{pattern:/(resource|data|\\s+)(?:\"(?:\\\\[\\s\\S]|[^\\\\\"])*\")/i,lookbehind:!0,alias:\"variable\"}}},{pattern:/(?:backend|module|output|provider|provisioner|variable)\\s+(?:[\\w-]+|\"(?:\\\\[\\s\\S]|[^\\\\\"])*\")\\s+(?=\\{)/i,inside:{type:{pattern:/(backend|module|output|provider|provisioner|variable)\\s+(?:[\\w-]+|\"(?:\\\\[\\s\\S]|[^\\\\\"])*\")\\s+/i,lookbehind:!0,alias:\"variable\"}}},/[\\w-]+(?=\\s+\\{)/],property:[/[-\\w\\.]+(?=\\s*=(?!=))/,/\"(?:\\\\[\\s\\S]|[^\\\\\"])+\"(?=\\s*[:=])/],string:{pattern:/\"(?:[^\\\\$\"]|\\\\[\\s\\S]|\\$(?:(?=\")|\\$+(?!\\$)|[^\"${])|\\$\\{(?:[^{}\"]|\"(?:[^\\\\\"]|\\\\[\\s\\S])*\")*\\})*\"/,greedy:!0,inside:{interpolation:{pattern:/(^|[^$])\\$\\{(?:[^{}\"]|\"(?:[^\\\\\"]|\\\\[\\s\\S])*\")*\\}/,lookbehind:!0,inside:{type:{pattern:/(\\b(?:count|data|local|module|path|self|terraform|var)\\b\\.)[\\w\\*]+/i,lookbehind:!0,alias:\"variable\"},keyword:/\\b(?:count|data|local|module|path|self|terraform|var)\\b/i,function:/\\w+(?=\\()/,string:{pattern:/\"(?:\\\\[\\s\\S]|[^\\\\\"])*\"/,greedy:!0},number:/\\b0x[\\da-f]+\\b|\\b\\d+(?:\\.\\d*)?(?:e[+-]?\\d+)?/i,punctuation:/[!\\$#%&'()*+,.\\/;<=>@\\[\\\\\\]^`{|}~?:]/}}}},number:/\\b0x[\\da-f]+\\b|\\b\\d+(?:\\.\\d*)?(?:e[+-]?\\d+)?/i,boolean:/\\b(?:false|true)\\b/i,punctuation:/[=\\[\\]{}]/};/components/prism-hcl.js\u0006Prism.languages.hcl = {\n\t'comment': /(?:\\/\\/|#).*|\\/\\*[\\s\\S]*?(?:\\*\\/|$)/,\n\t'heredoc': {\n\t\tpattern: /<<-?(\\w+\\b)[\\s\\S]*?^[ \\t]*\\1/m,\n\t\tgreedy: true,\n\t\talias: 'string'\n\t},\n\t'keyword': [\n\t\t{\n\t\t\tpattern: /(?:data|resource)\\s+(?:\"(?:\\\\[\\s\\S]|[^\\\\\"])*\")(?=\\s+\"[\\w-]+\"\\s+\\{)/i,\n\t\t\tinside: {\n\t\t\t\t'type': {\n\t\t\t\t\tpattern: /(resource|data|\\s+)(?:\"(?:\\\\[\\s\\S]|[^\\\\\"])*\")/i,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\talias: 'variable'\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tpattern: /(?:backend|module|output|provider|provisioner|variable)\\s+(?:[\\w-]+|\"(?:\\\\[\\s\\S]|[^\\\\\"])*\")\\s+(?=\\{)/i,\n\t\t\tinside: {\n\t\t\t\t'type': {\n\t\t\t\t\tpattern: /(backend|module|output|provider|provisioner|variable)\\s+(?:[\\w-]+|\"(?:\\\\[\\s\\S]|[^\\\\\"])*\")\\s+/i,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\talias: 'variable'\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t/[\\w-]+(?=\\s+\\{)/\n\t],\n\t'property': [\n\t\t/[-\\w\\.]+(?=\\s*=(?!=))/,\n\t\t/\"(?:\\\\[\\s\\S]|[^\\\\\"])+\"(?=\\s*[:=])/,\n\t],\n\t'string': {\n\t\tpattern: /\"(?:[^\\\\$\"]|\\\\[\\s\\S]|\\$(?:(?=\")|\\$+(?!\\$)|[^\"${])|\\$\\{(?:[^{}\"]|\"(?:[^\\\\\"]|\\\\[\\s\\S])*\")*\\})*\"/,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'interpolation': {\n\t\t\t\tpattern: /(^|[^$])\\$\\{(?:[^{}\"]|\"(?:[^\\\\\"]|\\\\[\\s\\S])*\")*\\}/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'type': {\n\t\t\t\t\t\tpattern: /(\\b(?:count|data|local|module|path|self|terraform|var)\\b\\.)[\\w\\*]+/i,\n\t\t\t\t\t\tlookbehind: true,\n\t\t\t\t\t\talias: 'variable'\n\t\t\t\t\t},\n\t\t\t\t\t'keyword': /\\b(?:count|data|local|module|path|self|terraform|var)\\b/i,\n\t\t\t\t\t'function': /\\w+(?=\\()/,\n\t\t\t\t\t'string': {\n\t\t\t\t\t\tpattern: /\"(?:\\\\[\\s\\S]|[^\\\\\"])*\"/,\n\t\t\t\t\t\tgreedy: true,\n\t\t\t\t\t},\n\t\t\t\t\t'number': /\\b0x[\\da-f]+\\b|\\b\\d+(?:\\.\\d*)?(?:e[+-]?\\d+)?/i,\n\t\t\t\t\t'punctuation': /[!\\$#%&'()*+,.\\/;<=>@\\[\\\\\\]^`{|}~?:]/,\n\t\t\t\t}\n\t\t\t},\n\t\t}\n\t},\n\t'number': /\\b0x[\\da-f]+\\b|\\b\\d+(?:\\.\\d*)?(?:e[+-]?\\d+)?/i,\n\t'boolean': /\\b(?:false|true)\\b/i,\n\t'punctuation': /[=\\[\\]{}]/,\n};\n /components/prism-javadoc.min.js\u0005v!function(a){var e=/(^(?:[\\t ]*(?:\\*\\s*)*))[^*\\s].*$/m,n=\"(?:\\\\b[a-zA-Z]\\\\w+\\\\s*\\\\.\\\\s*)*\\\\b[A-Z]\\\\w*(?:\\\\s*<mem>)?|<mem>\".replace(/<mem>/g,(function(){return\"#\\\\s*\\\\w+(?:\\\\s*\\\\([^()]*\\\\))?\"}));a.languages.javadoc=a.languages.extend(\"javadoclike\",{}),a.languages.insertBefore(\"javadoc\",\"keyword\",{reference:{pattern:RegExp(\"(@(?:exception|link|linkplain|see|throws|value)\\\\s+(?:\\\\*\\\\s*)?)(?:\"+n+\")\"),lookbehind:!0,inside:{function:{pattern:/(#\\s*)\\w+(?=\\s*\\()/,lookbehind:!0},field:{pattern:/(#\\s*)\\w+/,lookbehind:!0},namespace:{pattern:/\\b(?:[a-z]\\w*\\s*\\.\\s*)+/,inside:{punctuation:/\\./}},\"class-name\":/\\b[A-Z]\\w*/,keyword:a.languages.java.keyword,punctuation:/[#()[\\],.]/}},\"class-name\":{pattern:/(@param\\s+)<[A-Z]\\w*>/,lookbehind:!0,inside:{punctuation:/[.<>]/}},\"code-section\":[{pattern:/(\\{@code\\s+(?!\\s))(?:[^\\s{}]|\\s+(?![\\s}])|\\{(?:[^{}]|\\{(?:[^{}]|\\{(?:[^{}]|\\{[^{}]*\\})*\\})*\\})*\\})+(?=\\s*\\})/,lookbehind:!0,inside:{code:{pattern:e,lookbehind:!0,inside:a.languages.java,alias:\"language-java\"}}},{pattern:/(<(code|pre|tt)>(?!<code>)\\s*)\\S(?:\\S|\\s+\\S)*?(?=\\s*<\\/\\2>)/,lookbehind:!0,inside:{line:{pattern:e,lookbehind:!0,inside:{tag:a.languages.markup.tag,entity:a.languages.markup.entity,code:{pattern:/.+/,inside:a.languages.java,alias:\"language-java\"}}}}}],tag:a.languages.markup.tag,entity:a.languages.markup.entity}),a.languages.javadoclike.addSupport(\"java\",a.languages.javadoc)}(Prism);7/plugins/unescaped-markup/prism-unescaped-markup.min.js\u00046\"undefined\"!=typeof Prism&&\"undefined\"!=typeof document&&(Element.prototype.matches||(Element.prototype.matches=Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector),Prism.plugins.UnescapedMarkup=!0,Prism.hooks.add(\"before-highlightall\",(function(e){e.selector+=', [class*=\"lang-\"] script[type=\"text/plain\"], [class*=\"language-\"] script[type=\"text/plain\"], script[type=\"text/plain\"][class*=\"lang-\"], script[type=\"text/plain\"][class*=\"language-\"]'})),Prism.hooks.add(\"before-sanity-check\",(function(e){var t=e.element;if(t.matches('script[type=\"text/plain\"]')){var a=document.createElement(\"code\"),c=document.createElement(\"pre\");c.className=a.className=t.className;var n=t.dataset;return Object.keys(n||{}).forEach((function(e){Object.prototype.hasOwnProperty.call(n,e)&&(c.dataset[e]=n[e])})),a.textContent=e.code=e.code.replace(/&lt;\\/script(?:>|&gt;)/gi,\"<\\/script>\"),c.appendChild(a),t.parentNode.replaceChild(c,t),void(e.element=a)}if(!e.code){var o=t.childNodes;1===o.length&&\"#comment\"==o[0].nodeName&&(t.textContent=e.code=o[0].textContent)}})));/components/prism-ebnf.min.js\u0001xPrism.languages.ebnf={comment:/\\(\\*[\\s\\S]*?\\*\\)/,string:{pattern:/\"[^\"\\r\\n]*\"|'[^'\\r\\n]*'/,greedy:!0},special:{pattern:/\\?[^?\\r\\n]*\\?/,greedy:!0,alias:\"class-name\"},definition:{pattern:/^([\\t ]*)[a-z]\\w*(?:[ \\t]+[a-z]\\w*)*(?=\\s*=)/im,lookbehind:!0,alias:[\"rule\",\"keyword\"]},rule:/\\b[a-z]\\w*(?:[ \\t]+[a-z]\\w*)*\\b/i,punctuation:/\\([:/]|[:/]\\)|[.,;()[\\]{}]/,operator:/[-=|*/!]/};/components/prism-wren.js\n,// https://wren.io/\n\nPrism.languages.wren = {\n\t// Multiline comments in Wren can have nested multiline comments\n\t// Comments: // and /* */\n\t'comment': [\n\t\t{\n\t\t\t// support 3 levels of nesting\n\t\t\t// regex: \\/\\*(?:[^*/]|\\*(?!\\/)|\\/(?!\\*)|<self>)*\\*\\/\n\t\t\tpattern: /\\/\\*(?:[^*/]|\\*(?!\\/)|\\/(?!\\*)|\\/\\*(?:[^*/]|\\*(?!\\/)|\\/(?!\\*)|\\/\\*(?:[^*/]|\\*(?!\\/)|\\/(?!\\*))*\\*\\/)*\\*\\/)*\\*\\//,\n\t\t\tgreedy: true\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^\\\\:])\\/\\/.*/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true\n\t\t}\n\t],\n\n\t// Triple quoted strings are multiline but cannot have interpolation (raw strings)\n\t// Based on prism-python.js\n\t'triple-quoted-string': {\n\t\tpattern: /\"\"\"[\\s\\S]*?\"\"\"/,\n\t\tgreedy: true,\n\t\talias: 'string'\n\t},\n\n\t// see below\n\t'string-literal': null,\n\n\t// #!/usr/bin/env wren on the first line\n\t'hashbang': {\n\t\tpattern: /^#!\\/.+/,\n\t\tgreedy: true,\n\t\talias: 'comment'\n\t},\n\n\t// Attributes are special keywords to add meta data to classes\n\t'attribute': {\n\t\t// #! attributes are stored in class properties\n\t\t// #!myvar = true\n\t\t// #attributes are not stored and dismissed at compilation\n\t\tpattern: /#!?[ \\t\\u3000]*\\w+/,\n\t\talias: 'keyword'\n\t},\n\t'class-name': [\n\t\t{\n\t\t\t// class definition\n\t\t\t// class Meta {}\n\t\t\tpattern: /(\\bclass\\s+)\\w+/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t// A class must always start with an uppercase.\n\t\t// File.read\n\t\t/\\b[A-Z][a-z\\d_]*\\b/,\n\t],\n\n\t// A constant can be a variable, class, property or method. Just named in all uppercase letters\n\t'constant': /\\b[A-Z][A-Z\\d_]*\\b/,\n\n\t'null': {\n\t\tpattern: /\\bnull\\b/,\n\t\talias: 'keyword'\n\t},\n\t'keyword': /\\b(?:as|break|class|construct|continue|else|for|foreign|if|import|in|is|return|static|super|this|var|while)\\b/,\n\t'boolean': /\\b(?:false|true)\\b/,\n\t'number': /\\b(?:0x[\\da-f]+|\\d+(?:\\.\\d+)?(?:e[+-]?\\d+)?)\\b/i,\n\n\t// Functions can be Class.method()\n\t'function': /\\b[a-z_]\\w*(?=\\s*[({])/i,\n\n\t'operator': /<<|>>|[=!<>]=?|&&|\\|\\||[-+*/%~^&|?:]|\\.{2,3}/,\n\t'punctuation': /[\\[\\](){}.,;]/,\n};\n\nPrism.languages.wren['string-literal'] = {\n\t// A single quote string is multiline and can have interpolation (similar to JS backticks ``)\n\tpattern: /(^|[^\\\\\"])\"(?:[^\\\\\"%]|\\\\[\\s\\S]|%(?!\\()|%\\((?:[^()]|\\((?:[^()]|\\([^)]*\\))*\\))*\\))*\"/,\n\tlookbehind: true,\n\tgreedy: true,\n\tinside: {\n\t\t'interpolation': {\n\t\t\t// \"%(interpolation)\"\n\t\t\tpattern: /((?:^|[^\\\\])(?:\\\\{2})*)%\\((?:[^()]|\\((?:[^()]|\\([^)]*\\))*\\))*\\)/,\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'expression': {\n\t\t\t\t\tpattern: /^(%\\()[\\s\\S]+(?=\\)$)/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tinside: Prism.languages.wren\n\t\t\t\t},\n\t\t\t\t'interpolation-punctuation': {\n\t\t\t\t\tpattern: /^%\\(|\\)$/,\n\t\t\t\t\talias: 'punctuation'\n\t\t\t\t},\n\t\t\t}\n\t\t},\n\t\t'string': /[\\s\\S]+/\n\t}\n};\n/components/prism-al.js\u000b'// based on https://github.com/microsoft/AL/blob/master/grammar/alsyntax.tmlanguage\n\nPrism.languages.al = {\n\t'comment': /\\/\\/.*|\\/\\*[\\s\\S]*?\\*\\//,\n\t'string': {\n\t\tpattern: /'(?:''|[^'\\r\\n])*'(?!')|\"(?:\"\"|[^\"\\r\\n])*\"(?!\")/,\n\t\tgreedy: true\n\t},\n\t'function': {\n\t\tpattern: /(\\b(?:event|procedure|trigger)\\s+|(?:^|[^.])\\.\\s*)[a-z_]\\w*(?=\\s*\\()/i,\n\t\tlookbehind: true\n\t},\n\t'keyword': [\n\t\t// keywords\n\t\t/\\b(?:array|asserterror|begin|break|case|do|downto|else|end|event|exit|for|foreach|function|if|implements|in|indataset|interface|internal|local|of|procedure|program|protected|repeat|runonclient|securityfiltering|suppressdispose|temporary|then|to|trigger|until|var|while|with|withevents)\\b/i,\n\t\t// objects and metadata that are used like keywords\n\t\t/\\b(?:action|actions|addafter|addbefore|addfirst|addlast|area|assembly|chartpart|codeunit|column|controladdin|cuegroup|customizes|dataitem|dataset|dotnet|elements|enum|enumextension|extends|field|fieldattribute|fieldelement|fieldgroup|fieldgroups|fields|filter|fixed|grid|group|key|keys|label|labels|layout|modify|moveafter|movebefore|movefirst|movelast|page|pagecustomization|pageextension|part|profile|query|repeater|report|requestpage|schema|separator|systempart|table|tableelement|tableextension|textattribute|textelement|type|usercontrol|value|xmlport)\\b/i\n\t],\n\t'number': /\\b(?:0x[\\da-f]+|(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?)(?:F|LL?|U(?:LL?)?)?\\b/i,\n\t'boolean': /\\b(?:false|true)\\b/i,\n\t'variable': /\\b(?:Curr(?:FieldNo|Page|Report)|x?Rec|RequestOptionsPage)\\b/,\n\t'class-name': /\\b(?:automation|biginteger|bigtext|blob|boolean|byte|char|clienttype|code|completiontriggererrorlevel|connectiontype|database|dataclassification|datascope|date|dateformula|datetime|decimal|defaultlayout|dialog|dictionary|dotnetassembly|dotnettypedeclaration|duration|errorinfo|errortype|executioncontext|executionmode|fieldclass|fieldref|fieldtype|file|filterpagebuilder|guid|httpclient|httpcontent|httpheaders|httprequestmessage|httpresponsemessage|instream|integer|joker|jsonarray|jsonobject|jsontoken|jsonvalue|keyref|list|moduledependencyinfo|moduleinfo|none|notification|notificationscope|objecttype|option|outstream|pageresult|record|recordid|recordref|reportformat|securityfilter|sessionsettings|tableconnectiontype|tablefilter|testaction|testfield|testfilterfield|testpage|testpermissions|testrequestpage|text|textbuilder|textconst|textencoding|time|transactionmodel|transactiontype|variant|verbosity|version|view|views|webserviceactioncontext|webserviceactionresultcode|xmlattribute|xmlattributecollection|xmlcdata|xmlcomment|xmldeclaration|xmldocument|xmldocumenttype|xmlelement|xmlnamespacemanager|xmlnametable|xmlnode|xmlnodelist|xmlprocessinginstruction|xmlreadoptions|xmltext|xmlwriteoptions)\\b/i,\n\t'operator': /\\.\\.|:[=:]|[-+*/]=?|<>|[<>]=?|=|\\b(?:and|div|mod|not|or|xor)\\b/i,\n\t'punctuation': /[()\\[\\]{}:.;,]/\n};\n%/components/prism-coffeescript.min.js\u0005!function(e){var t=/#(?!\\{).+/,n={pattern:/#\\{[^}]+\\}/,alias:\"variable\"};e.languages.coffeescript=e.languages.extend(\"javascript\",{comment:t,string:[{pattern:/'(?:\\\\[\\s\\S]|[^\\\\'])*'/,greedy:!0},{pattern:/\"(?:\\\\[\\s\\S]|[^\\\\\"])*\"/,greedy:!0,inside:{interpolation:n}}],keyword:/\\b(?:and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\\b/,\"class-member\":{pattern:/@(?!\\d)\\w+/,alias:\"variable\"}}),e.languages.insertBefore(\"coffeescript\",\"comment\",{\"multiline-comment\":{pattern:/###[\\s\\S]+?###/,alias:\"comment\"},\"block-regex\":{pattern:/\\/{3}[\\s\\S]*?\\/{3}/,alias:\"regex\",inside:{comment:t,interpolation:n}}}),e.languages.insertBefore(\"coffeescript\",\"string\",{\"inline-javascript\":{pattern:/`(?:\\\\[\\s\\S]|[^\\\\`])*`/,inside:{delimiter:{pattern:/^`|`$/,alias:\"punctuation\"},script:{pattern:/[\\s\\S]+/,alias:\"language-javascript\",inside:e.languages.javascript}}},\"multiline-string\":[{pattern:/'''[\\s\\S]*?'''/,greedy:!0,alias:\"string\"},{pattern:/\"\"\"[\\s\\S]*?\"\"\"/,greedy:!0,alias:\"string\",inside:{interpolation:n}}]}),e.languages.insertBefore(\"coffeescript\",\"keyword\",{property:/(?!\\d)\\w+(?=\\s*:(?!:))/}),delete e.languages.coffeescript[\"template-string\"],e.languages.coffee=e.languages.coffeescript}(Prism);/components/prism-t4-vb.jsOPrism.languages['t4-vb'] = Prism.languages['t4-templating'].createT4('vbnet');\n/components/prism-bbj.js\u0003(function (Prism) {\n\tPrism.languages.bbj = {\n\t\t'comment': {\n\t\t\tpattern: /(^|[^\\\\:])rem\\s+.*/i,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true\n\t\t},\n\t\t'string': {\n\t\t\tpattern: /(['\"])(?:(?!\\1|\\\\).|\\\\.)*\\1/,\n\t\t\tgreedy: true\n\t\t},\n\t\t'number': /(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:E[+-]?\\d+)?/i,\n\t\t'keyword': /\\b(?:abstract|all|argc|begin|bye|callback|case|chn|class|classend|ctl|day|declare|delete|dim|dom|dread|dsz|else|end|endif|err|exitto|extends|fi|field|for|from|gosub|goto|if|implements|interface|interfaceend|iol|iolist|let|list|load|method|methodend|methodret|on|opts|pfx|print|private|process_events|protected|psz|public|read|read_resource|release|remove_callback|repeat|restore|return|rev|seterr|setesc|sqlchn|sqlunt|ssn|start|static|swend|switch|sys|then|tim|unt|until|use|void|wend|where|while)\\b/i,\n\t\t'function': /\\b\\w+(?=\\()/,\n\t\t'boolean': /\\b(?:BBjAPI\\.TRUE|BBjAPI\\.FALSE)\\b/i,\n\t\t'operator': /<[=>]?|>=?|[+\\-*\\/^=&]|\\b(?:and|not|or|xor)\\b/i,\n\t\t'punctuation': /[.,;:()]/\n\t};\n}(Prism));\n/components/prism-jolie.js\u0006kPrism.languages.jolie = Prism.languages.extend('clike', {\n\t'string': {\n\t\tpattern: /(^|[^\\\\])\"(?:\\\\[\\s\\S]|[^\"\\\\])*\"/,\n\t\tlookbehind: true,\n\t\tgreedy: true\n\t},\n\t'class-name': {\n\t\tpattern: /((?:\\b(?:as|courier|embed|in|inputPort|outputPort|service)\\b|@)[ \\t]*)\\w+/,\n\t\tlookbehind: true\n\t},\n\t'keyword': /\\b(?:as|cH|comp|concurrent|constants|courier|cset|csets|default|define|else|embed|embedded|execution|exit|extender|for|foreach|forward|from|global|if|import|in|include|init|inputPort|install|instanceof|interface|is_defined|linkIn|linkOut|main|new|nullProcess|outputPort|over|private|provide|public|scope|sequential|service|single|spawn|synchronized|this|throw|throws|type|undef|until|while|with)\\b/,\n\t'function': /\\b[a-z_]\\w*(?=[ \\t]*[@(])/i,\n\t'number': /(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:e[+-]?\\d+)?l?/i,\n\t'operator': /-[-=>]?|\\+[+=]?|<[<=]?|[>=*!]=?|&&|\\|\\||[?\\/%^@|]/,\n\t'punctuation': /[()[\\]{},;.:]/,\n\t'builtin': /\\b(?:Byte|any|bool|char|double|enum|float|int|length|long|ranges|regex|string|undefined|void)\\b/\n});\n\nPrism.languages.insertBefore('jolie', 'keyword', {\n\t'aggregates': {\n\t\tpattern: /(\\bAggregates\\s*:\\s*)(?:\\w+(?:\\s+with\\s+\\w+)?\\s*,\\s*)*\\w+(?:\\s+with\\s+\\w+)?/,\n\t\tlookbehind: true,\n\t\tinside: {\n\t\t\t'keyword': /\\bwith\\b/,\n\t\t\t'class-name': /\\w+/,\n\t\t\t'punctuation': /,/\n\t\t}\n\t},\n\t'redirects': {\n\t\tpattern: /(\\bRedirects\\s*:\\s*)(?:\\w+\\s*=>\\s*\\w+\\s*,\\s*)*(?:\\w+\\s*=>\\s*\\w+)/,\n\t\tlookbehind: true,\n\t\tinside: {\n\t\t\t'punctuation': /,/,\n\t\t\t'class-name': /\\w+/,\n\t\t\t'operator': /=>/\n\t\t}\n\t},\n\t'property': {\n\t\tpattern: /\\b(?:Aggregates|[Ii]nterfaces|Java|Javascript|Jolie|[Ll]ocation|OneWay|[Pp]rotocol|Redirects|RequestResponse)\\b(?=[ \\t]*:)/\n\t}\n});\n/components/prism-toml.js\u00051(function (Prism) {\n\n\tvar key = /(?:[\\w-]+|'[^'\\n\\r]*'|\"(?:\\\\.|[^\\\\\"\\r\\n])*\")/.source;\n\n\t/**\n\t * @param {string} pattern\n\t */\n\tfunction insertKey(pattern) {\n\t\treturn pattern.replace(/__/g, function () { return key; });\n\t}\n\n\tPrism.languages.toml = {\n\t\t'comment': {\n\t\t\tpattern: /#.*/,\n\t\t\tgreedy: true\n\t\t},\n\t\t'table': {\n\t\t\tpattern: RegExp(insertKey(/(^[\\t ]*\\[\\s*(?:\\[\\s*)?)__(?:\\s*\\.\\s*__)*(?=\\s*\\])/.source), 'm'),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\talias: 'class-name'\n\t\t},\n\t\t'key': {\n\t\t\tpattern: RegExp(insertKey(/(^[\\t ]*|[{,]\\s*)__(?:\\s*\\.\\s*__)*(?=\\s*=)/.source), 'm'),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\talias: 'property'\n\t\t},\n\t\t'string': {\n\t\t\tpattern: /\"\"\"(?:\\\\[\\s\\S]|[^\\\\])*?\"\"\"|'''[\\s\\S]*?'''|'[^'\\n\\r]*'|\"(?:\\\\.|[^\\\\\"\\r\\n])*\"/,\n\t\t\tgreedy: true\n\t\t},\n\t\t'date': [\n\t\t\t{\n\t\t\t\t// Offset Date-Time, Local Date-Time, Local Date\n\t\t\t\tpattern: /\\b\\d{4}-\\d{2}-\\d{2}(?:[T\\s]\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|[+-]\\d{2}:\\d{2})?)?\\b/i,\n\t\t\t\talias: 'number'\n\t\t\t},\n\t\t\t{\n\t\t\t\t// Local Time\n\t\t\t\tpattern: /\\b\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?\\b/,\n\t\t\t\talias: 'number'\n\t\t\t}\n\t\t],\n\t\t'number': /(?:\\b0(?:x[\\da-zA-Z]+(?:_[\\da-zA-Z]+)*|o[0-7]+(?:_[0-7]+)*|b[10]+(?:_[10]+)*))\\b|[-+]?\\b\\d+(?:_\\d+)*(?:\\.\\d+(?:_\\d+)*)?(?:[eE][+-]?\\d+(?:_\\d+)*)?\\b|[-+]?\\b(?:inf|nan)\\b/,\n\t\t'boolean': /\\b(?:false|true)\\b/,\n\t\t'punctuation': /[.,=[\\]{}]/\n\t};\n}(Prism));\n#/components/prism-javascript.min.js\u0012\u0003Prism.languages.javascript=Prism.languages.extend(\"clike\",{\"class-name\":[Prism.languages.clike[\"class-name\"],{pattern:/(^|[^$\\w\\xA0-\\uFFFF])(?!\\s)[_$A-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\\})\\s*)catch\\b/,lookbehind:!0},{pattern:/(^|[^.]|\\.\\.\\.\\s*)\\b(?:as|assert(?=\\s*\\{)|async(?=\\s*(?:function\\b|\\(|[$\\w\\xA0-\\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\\s*(?:\\{|$))|for|from(?=\\s*(?:['\"]|$))|function|(?:get|set)(?=\\s*(?:[#\\[$\\w\\xA0-\\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\\b/,lookbehind:!0}],function:/#?(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*(?:\\.\\s*(?:apply|bind|call)\\s*)?\\()/,number:{pattern:RegExp(\"(^|[^\\\\w$])(?:NaN|Infinity|0[bB][01]+(?:_[01]+)*n?|0[oO][0-7]+(?:_[0-7]+)*n?|0[xX][\\\\dA-Fa-f]+(?:_[\\\\dA-Fa-f]+)*n?|\\\\d+(?:_\\\\d+)*n|(?:\\\\d+(?:_\\\\d+)*(?:\\\\.(?:\\\\d+(?:_\\\\d+)*)?)?|\\\\.\\\\d+(?:_\\\\d+)*)(?:[Ee][+-]?\\\\d+(?:_\\\\d+)*)?)(?![\\\\w$])\"),lookbehind:!0},operator:/--|\\+\\+|\\*\\*=?|=>|&&=?|\\|\\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\\.{3}|\\?\\?=?|\\?\\.?|[~:]/}),Prism.languages.javascript[\"class-name\"][0].pattern=/(\\b(?:class|extends|implements|instanceof|interface|new)\\s+)[\\w.\\\\]+/,Prism.languages.insertBefore(\"javascript\",\"keyword\",{regex:{pattern:RegExp(\"((?:^|[^$\\\\w\\\\xA0-\\\\uFFFF.\\\"'\\\\])\\\\s]|\\\\b(?:return|yield))\\\\s*)/(?:(?:\\\\[(?:[^\\\\]\\\\\\\\\\r\\n]|\\\\\\\\.)*\\\\]|\\\\\\\\.|[^/\\\\\\\\\\\\[\\r\\n])+/[dgimyus]{0,7}|(?:\\\\[(?:[^[\\\\]\\\\\\\\\\r\\n]|\\\\\\\\.|\\\\[(?:[^[\\\\]\\\\\\\\\\r\\n]|\\\\\\\\.|\\\\[(?:[^[\\\\]\\\\\\\\\\r\\n]|\\\\\\\\.)*\\\\])*\\\\])*\\\\]|\\\\\\\\.|[^/\\\\\\\\\\\\[\\r\\n])+/[dgimyus]{0,7}v[dgimyus]{0,7})(?=(?:\\\\s|/\\\\*(?:[^*]|\\\\*(?!/))*\\\\*/)*(?:$|[\\r\\n,.;:})\\\\]]|//))\"),lookbehind:!0,greedy:!0,inside:{\"regex-source\":{pattern:/^(\\/)[\\s\\S]+(?=\\/[a-z]*$)/,lookbehind:!0,alias:\"language-regex\",inside:Prism.languages.regex},\"regex-delimiter\":/^\\/|\\/$/,\"regex-flags\":/^[a-z]+$/}},\"function-variable\":{pattern:/#?(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*[=:]\\s*(?:async\\s*)?(?:\\bfunction\\b|(?:\\((?:[^()]|\\([^()]*\\))*\\)|(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*)\\s*=>))/,alias:\"function\"},parameter:[{pattern:/(function(?:\\s+(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*)?\\s*\\(\\s*)(?!\\s)(?:[^()\\s]|\\s+(?![\\s)])|\\([^()]*\\))+(?=\\s*\\))/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/(^|[^$\\w\\xA0-\\uFFFF])(?!\\s)[_$a-z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*=>)/i,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/(\\(\\s*)(?!\\s)(?:[^()\\s]|\\s+(?![\\s)])|\\([^()]*\\))+(?=\\s*\\)\\s*=>)/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/((?:\\b|\\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\\w\\xA0-\\uFFFF]))(?:(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*\\s*)\\(\\s*|\\]\\s*\\(\\s*)(?!\\s)(?:[^()\\s]|\\s+(?![\\s)])|\\([^()]*\\))+(?=\\s*\\)\\s*\\{)/,lookbehind:!0,inside:Prism.languages.javascript}],constant:/\\b[A-Z](?:[A-Z_]|\\dx?)*\\b/}),Prism.languages.insertBefore(\"javascript\",\"string\",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:\"comment\"},\"template-string\":{pattern:/`(?:\\\\[\\s\\S]|\\$\\{(?:[^{}]|\\{(?:[^{}]|\\{[^}]*\\})*\\})+\\}|(?!\\$\\{)[^\\\\`])*`/,greedy:!0,inside:{\"template-punctuation\":{pattern:/^`|`$/,alias:\"string\"},interpolation:{pattern:/((?:^|[^\\\\])(?:\\\\{2})*)\\$\\{(?:[^{}]|\\{(?:[^{}]|\\{[^}]*\\})*\\})+\\}/,lookbehind:!0,inside:{\"interpolation-punctuation\":{pattern:/^\\$\\{|\\}$/,alias:\"punctuation\"},rest:Prism.languages.javascript}},string:/[\\s\\S]+/}},\"string-property\":{pattern:/((?:^|[,{])[ \\t]*)([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\2)[^\\\\\\r\\n])*\\2(?=\\s*:)/m,lookbehind:!0,greedy:!0,alias:\"property\"}}),Prism.languages.insertBefore(\"javascript\",\"operator\",{\"literal-property\":{pattern:/((?:^|[,{])[ \\t]*)(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*:)/m,lookbehind:!0,alias:\"property\"}}),Prism.languages.markup&&(Prism.languages.markup.tag.addInlined(\"script\",\"javascript\"),Prism.languages.markup.tag.addAttribute(\"on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)\",\"javascript\")),Prism.languages.js=Prism.languages.javascript;/components/prism-antlr4.js\u0006,Prism.languages.antlr4 = {\n\t'comment': /\\/\\/.*|\\/\\*[\\s\\S]*?(?:\\*\\/|$)/,\n\t'string': {\n\t\tpattern: /'(?:\\\\.|[^\\\\'\\r\\n])*'/,\n\t\tgreedy: true\n\t},\n\t'character-class': {\n\t\tpattern: /\\[(?:\\\\.|[^\\\\\\]\\r\\n])*\\]/,\n\t\tgreedy: true,\n\t\talias: 'regex',\n\t\tinside: {\n\t\t\t'range': {\n\t\t\t\tpattern: /([^[]|(?:^|[^\\\\])(?:\\\\\\\\)*\\\\\\[)-(?!\\])/,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'punctuation'\n\t\t\t},\n\t\t\t'escape': /\\\\(?:u(?:[a-fA-F\\d]{4}|\\{[a-fA-F\\d]+\\})|[pP]\\{[=\\w-]+\\}|[^\\r\\nupP])/,\n\t\t\t'punctuation': /[\\[\\]]/\n\t\t}\n\t},\n\t'action': {\n\t\tpattern: /\\{(?:[^{}]|\\{(?:[^{}]|\\{(?:[^{}]|\\{[^{}]*\\})*\\})*\\})*\\}/,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'content': {\n\t\t\t\t// this might be C, C++, Python, Java, C#, or any other language ANTLR4 compiles to\n\t\t\t\tpattern: /(\\{)[\\s\\S]+(?=\\})/,\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\t'punctuation': /[{}]/\n\t\t}\n\t},\n\t'command': {\n\t\tpattern: /(->\\s*(?!\\s))(?:\\s*(?:,\\s*)?\\b[a-z]\\w*(?:\\s*\\([^()\\r\\n]*\\))?)+(?=\\s*;)/i,\n\t\tlookbehind: true,\n\t\tinside: {\n\t\t\t'function': /\\b\\w+(?=\\s*(?:[,(]|$))/,\n\t\t\t'punctuation': /[,()]/\n\t\t}\n\t},\n\t'annotation': {\n\t\tpattern: /@\\w+(?:::\\w+)*/,\n\t\talias: 'keyword'\n\t},\n\t'label': {\n\t\tpattern: /#[ \\t]*\\w+/,\n\t\talias: 'punctuation'\n\t},\n\t'keyword': /\\b(?:catch|channels|finally|fragment|grammar|import|lexer|locals|mode|options|parser|returns|throws|tokens)\\b/,\n\t'definition': [\n\t\t{\n\t\t\tpattern: /\\b[a-z]\\w*(?=\\s*:)/,\n\t\t\talias: ['rule', 'class-name']\n\t\t},\n\t\t{\n\t\t\tpattern: /\\b[A-Z]\\w*(?=\\s*:)/,\n\t\t\talias: ['token', 'constant']\n\t\t},\n\t],\n\t'constant': /\\b[A-Z][A-Z_]*\\b/,\n\t'operator': /\\.\\.|->|[|~]|[*+?]\\??/,\n\t'punctuation': /[;:()=]/\n};\n\nPrism.languages.g4 = Prism.languages.antlr4;\n/components/prism-dart.min.js\u00060!function(e){var a=[/\\b(?:async|sync|yield)\\*/,/\\b(?:abstract|assert|async|await|break|case|catch|class|const|continue|covariant|default|deferred|do|dynamic|else|enum|export|extends|extension|external|factory|final|finally|for|get|hide|if|implements|import|in|interface|library|mixin|new|null|on|operator|part|rethrow|return|set|show|static|super|switch|sync|this|throw|try|typedef|var|void|while|with|yield)\\b/],n=\"(^|[^\\\\w.])(?:[a-z]\\\\w*\\\\s*\\\\.\\\\s*)*(?:[A-Z]\\\\w*\\\\s*\\\\.\\\\s*)*\",s={pattern:RegExp(n+\"[A-Z](?:[\\\\d_A-Z]*[a-z]\\\\w*)?\\\\b\"),lookbehind:!0,inside:{namespace:{pattern:/^[a-z]\\w*(?:\\s*\\.\\s*[a-z]\\w*)*(?:\\s*\\.)?/,inside:{punctuation:/\\./}}}};e.languages.dart=e.languages.extend(\"clike\",{\"class-name\":[s,{pattern:RegExp(n+\"[A-Z]\\\\w*(?=\\\\s+\\\\w+\\\\s*[;,=()])\"),lookbehind:!0,inside:s.inside}],keyword:a,operator:/\\bis!|\\b(?:as|is)\\b|\\+\\+|--|&&|\\|\\||<<=?|>>=?|~(?:\\/=?)?|[+\\-*\\/%&^|=!<>]=?|\\?/}),e.languages.insertBefore(\"dart\",\"string\",{\"string-literal\":{pattern:/r?(?:(\"\"\"|''')[\\s\\S]*?\\1|([\"'])(?:\\\\.|(?!\\2)[^\\\\\\r\\n])*\\2(?!\\2))/,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^\\\\])(?:\\\\{2})*)\\$(?:\\w+|\\{(?:[^{}]|\\{[^{}]*\\})*\\})/,lookbehind:!0,inside:{punctuation:/^\\$\\{?|\\}$/,expression:{pattern:/[\\s\\S]+/,inside:e.languages.dart}}},string:/[\\s\\S]+/}},string:void 0}),e.languages.insertBefore(\"dart\",\"class-name\",{metadata:{pattern:/@\\w+/,alias:\"function\"}}),e.languages.insertBefore(\"dart\",\"class-name\",{generics:{pattern:/<(?:[\\w\\s,.&?]|<(?:[\\w\\s,.&?]|<(?:[\\w\\s,.&?]|<[\\w\\s,.&?]*>)*>)*>)*>/,inside:{\"class-name\":s,keyword:a,punctuation:/[<>(),.:]/,operator:/[?&|]/}}})}(Prism);/components/prism-powershell.js\f[(function (Prism) {\n\n\tvar powershell = Prism.languages.powershell = {\n\t\t'comment': [\n\t\t\t{\n\t\t\t\tpattern: /(^|[^`])<#[\\s\\S]*?#>/,\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /(^|[^`])#.*/,\n\t\t\t\tlookbehind: true\n\t\t\t}\n\t\t],\n\t\t'string': [\n\t\t\t{\n\t\t\t\tpattern: /\"(?:`[\\s\\S]|[^`\"])*\"/,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: null // see below\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /'(?:[^']|'')*'/,\n\t\t\t\tgreedy: true\n\t\t\t}\n\t\t],\n\t\t// Matches name spaces as well as casts, attribute decorators. Force starting with letter to avoid matching array indices\n\t\t// Supports two levels of nested brackets (e.g. `[OutputType([System.Collections.Generic.List[int]])]`)\n\t\t'namespace': /\\[[a-z](?:\\[(?:\\[[^\\]]*\\]|[^\\[\\]])*\\]|[^\\[\\]])*\\]/i,\n\t\t'boolean': /\\$(?:false|true)\\b/i,\n\t\t'variable': /\\$\\w+\\b/,\n\t\t// Cmdlets and aliases. Aliases should come last, otherwise \"write\" gets preferred over \"write-host\" for example\n\t\t// Get-Command | ?{ $_.ModuleName -match \"Microsoft.PowerShell.(Util|Core|Management)\" }\n\t\t// Get-Alias | ?{ $_.ReferencedCommand.Module.Name -match \"Microsoft.PowerShell.(Util|Core|Management)\" }\n\t\t'function': [\n\t\t\t/\\b(?:Add|Approve|Assert|Backup|Block|Checkpoint|Clear|Close|Compare|Complete|Compress|Confirm|Connect|Convert|ConvertFrom|ConvertTo|Copy|Debug|Deny|Disable|Disconnect|Dismount|Edit|Enable|Enter|Exit|Expand|Export|Find|ForEach|Format|Get|Grant|Group|Hide|Import|Initialize|Install|Invoke|Join|Limit|Lock|Measure|Merge|Move|New|Open|Optimize|Out|Ping|Pop|Protect|Publish|Push|Read|Receive|Redo|Register|Remove|Rename|Repair|Request|Reset|Resize|Resolve|Restart|Restore|Resume|Revoke|Save|Search|Select|Send|Set|Show|Skip|Sort|Split|Start|Step|Stop|Submit|Suspend|Switch|Sync|Tee|Test|Trace|Unblock|Undo|Uninstall|Unlock|Unprotect|Unpublish|Unregister|Update|Use|Wait|Watch|Where|Write)-[a-z]+\\b/i,\n\t\t\t/\\b(?:ac|cat|chdir|clc|cli|clp|clv|compare|copy|cp|cpi|cpp|cvpa|dbp|del|diff|dir|ebp|echo|epal|epcsv|epsn|erase|fc|fl|ft|fw|gal|gbp|gc|gci|gcs|gdr|gi|gl|gm|gp|gps|group|gsv|gu|gv|gwmi|iex|ii|ipal|ipcsv|ipsn|irm|iwmi|iwr|kill|lp|ls|measure|mi|mount|move|mp|mv|nal|ndr|ni|nv|ogv|popd|ps|pushd|pwd|rbp|rd|rdr|ren|ri|rm|rmdir|rni|rnp|rp|rv|rvpa|rwmi|sal|saps|sasv|sbp|sc|select|set|shcm|si|sl|sleep|sls|sort|sp|spps|spsv|start|sv|swmi|tee|trcm|type|write)\\b/i\n\t\t],\n\t\t// per http://technet.microsoft.com/en-us/library/hh847744.aspx\n\t\t'keyword': /\\b(?:Begin|Break|Catch|Class|Continue|Data|Define|Do|DynamicParam|Else|ElseIf|End|Exit|Filter|Finally|For|ForEach|From|Function|If|InlineScript|Parallel|Param|Process|Return|Sequence|Switch|Throw|Trap|Try|Until|Using|Var|While|Workflow)\\b/i,\n\t\t'operator': {\n\t\t\tpattern: /(^|\\W)(?:!|-(?:b?(?:and|x?or)|as|(?:Not)?(?:Contains|In|Like|Match)|eq|ge|gt|is(?:Not)?|Join|le|lt|ne|not|Replace|sh[lr])\\b|-[-=]?|\\+[+=]?|[*\\/%]=?)/i,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'punctuation': /[|{}[\\];(),.]/\n\t};\n\n\t// Variable interpolation inside strings, and nested expressions\n\tpowershell.string[0].inside = {\n\t\t'function': {\n\t\t\t// Allow for one level of nesting\n\t\t\tpattern: /(^|[^`])\\$\\((?:\\$\\([^\\r\\n()]*\\)|(?!\\$\\()[^\\r\\n)])*\\)/,\n\t\t\tlookbehind: true,\n\t\t\tinside: powershell\n\t\t},\n\t\t'boolean': powershell.boolean,\n\t\t'variable': powershell.variable,\n\t};\n\n}(Prism));\n/components/prism-sml.min.js\u0005!function(e){var n=/\\b(?:abstype|and|andalso|as|case|datatype|do|else|end|eqtype|exception|fn|fun|functor|handle|if|in|include|infix|infixr|let|local|nonfix|of|op|open|orelse|raise|rec|sharing|sig|signature|struct|structure|then|type|val|where|while|with|withtype)\\b/i;e.languages.sml={comment:/\\(\\*(?:[^*(]|\\*(?!\\))|\\((?!\\*)|\\(\\*(?:[^*(]|\\*(?!\\))|\\((?!\\*))*\\*\\))*\\*\\)/,string:{pattern:/#?\"(?:[^\"\\\\]|\\\\.)*\"/,greedy:!0},\"class-name\":[{pattern:RegExp(\"((?:^|[^:]):\\\\s*)<TERMINAL>(?:\\\\s*(?:(?:\\\\*|->)\\\\s*<TERMINAL>|,\\\\s*<TERMINAL>(?:(?=<NOT-LAST>)|(?!<NOT-LAST>)\\\\s+<LONG-ID>)))*\".replace(/<NOT-LAST>/g,(function(){return\"\\\\s*(?:[*,]|->)\"})).replace(/<TERMINAL>/g,(function(){return\"(?:'[\\\\w']*|<LONG-ID>|\\\\((?:[^()]|\\\\([^()]*\\\\))*\\\\)|\\\\{(?:[^{}]|\\\\{[^{}]*\\\\})*\\\\})(?:\\\\s+<LONG-ID>)*\"})).replace(/<LONG-ID>/g,(function(){return\"(?!<KEYWORD>)[a-z\\\\d_][\\\\w'.]*\"})).replace(/<KEYWORD>/g,(function(){return n.source})),\"i\"),lookbehind:!0,greedy:!0,inside:null},{pattern:/((?:^|[^\\w'])(?:datatype|exception|functor|signature|structure|type)\\s+)[a-z_][\\w'.]*/i,lookbehind:!0}],function:{pattern:/((?:^|[^\\w'])fun\\s+)[a-z_][\\w'.]*/i,lookbehind:!0},keyword:n,variable:{pattern:/(^|[^\\w'])'[\\w']*/,lookbehind:!0},number:/~?\\b(?:\\d+(?:\\.\\d+)?(?:e~?\\d+)?|0x[\\da-f]+)\\b/i,word:{pattern:/\\b0w(?:\\d+|x[\\da-f]+)\\b/i,alias:\"constant\"},boolean:/\\b(?:false|true)\\b/i,operator:/\\.\\.\\.|:[>=:]|=>?|->|[<>]=?|[!+\\-*/^#|@~]/,punctuation:/[(){}\\[\\].:,;]/},e.languages.sml[\"class-name\"][0].inside=e.languages.sml,e.languages.smlnj=e.languages.sml}(Prism);//plugins/custom-class/prism-custom-class.min.js\u0001!function(){if(\"undefined\"!=typeof Prism){var n,s,a=\"\";Prism.plugins.customClass={add:function(s){n=s},map:function(n){s=\"function\"==typeof n?n:function(s){return n[s]||s}},prefix:function(n){a=n||\"\"},apply:t},Prism.hooks.add(\"wrap\",(function(e){if(n){var u=n({content:e.content,type:e.type,language:e.language});Array.isArray(u)?e.classes.push.apply(e.classes,u):u&&e.classes.push(u)}(s||a)&&(e.classes=e.classes.map((function(n){return t(n,e.language)})))}))}function t(n,t){return a+(s?s(n,t):n)}}();4/plugins/diff-highlight/prism-diff-highlight.min.css\u0001Ppre.diff-highlight>code .token.deleted:not(.prefix),pre>code.diff-highlight .token.deleted:not(.prefix){background-color:rgba(255,0,0,.1);color:inherit;display:block}pre.diff-highlight>code .token.inserted:not(.prefix),pre>code.diff-highlight .token.inserted:not(.prefix){background-color:rgba(0,255,128,.1);color:inherit;display:block}/components/prism-autoit.min.js\u0003>Prism.languages.autoit={comment:[/;.*/,{pattern:/(^[\\t ]*)#(?:comments-start|cs)[\\s\\S]*?^[ \\t]*#(?:ce|comments-end)/m,lookbehind:!0}],url:{pattern:/(^[\\t ]*#include\\s+)(?:<[^\\r\\n>]+>|\"[^\\r\\n\"]+\")/m,lookbehind:!0},string:{pattern:/([\"'])(?:\\1\\1|(?!\\1)[^\\r\\n])*\\1/,greedy:!0,inside:{variable:/([%$@])\\w+\\1/}},directive:{pattern:/(^[\\t ]*)#[\\w-]+/m,lookbehind:!0,alias:\"keyword\"},function:/\\b\\w+(?=\\()/,variable:/[$@]\\w+/,keyword:/\\b(?:Case|Const|Continue(?:Case|Loop)|Default|Dim|Do|Else(?:If)?|End(?:Func|If|Select|Switch|With)|Enum|Exit(?:Loop)?|For|Func|Global|If|In|Local|Next|Null|ReDim|Select|Static|Step|Switch|Then|To|Until|Volatile|WEnd|While|With)\\b/i,number:/\\b(?:0x[\\da-f]+|\\d+(?:\\.\\d+)?(?:e[+-]?\\d+)?)\\b/i,boolean:/\\b(?:False|True)\\b/i,operator:/<[=>]?|[-+*\\/=&>]=?|[?^]|\\b(?:And|Not|Or)\\b/i,punctuation:/[\\[\\]().,:]/};/components/prism-haml.js\u000e7/* TODO\n\tHandle multiline code after tag\n\t    %foo= some |\n\t\t\tmultiline |\n\t\t\tcode |\n*/\n\n(function (Prism) {\n\n\tPrism.languages.haml = {\n\t\t// Multiline stuff should appear before the rest\n\n\t\t'multiline-comment': {\n\t\t\tpattern: /((?:^|\\r?\\n|\\r)([\\t ]*))(?:\\/|-#).*(?:(?:\\r?\\n|\\r)\\2[\\t ].+)*/,\n\t\t\tlookbehind: true,\n\t\t\talias: 'comment'\n\t\t},\n\n\t\t'multiline-code': [\n\t\t\t{\n\t\t\t\tpattern: /((?:^|\\r?\\n|\\r)([\\t ]*)(?:[~-]|[&!]?=)).*,[\\t ]*(?:(?:\\r?\\n|\\r)\\2[\\t ].*,[\\t ]*)*(?:(?:\\r?\\n|\\r)\\2[\\t ].+)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: Prism.languages.ruby\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /((?:^|\\r?\\n|\\r)([\\t ]*)(?:[~-]|[&!]?=)).*\\|[\\t ]*(?:(?:\\r?\\n|\\r)\\2[\\t ].*\\|[\\t ]*)*/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: Prism.languages.ruby\n\t\t\t}\n\t\t],\n\n\t\t// See at the end of the file for known filters\n\t\t'filter': {\n\t\t\tpattern: /((?:^|\\r?\\n|\\r)([\\t ]*)):[\\w-]+(?:(?:\\r?\\n|\\r)(?:\\2[\\t ].+|\\s*?(?=\\r?\\n|\\r)))+/,\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'filter-name': {\n\t\t\t\t\tpattern: /^:[\\w-]+/,\n\t\t\t\t\talias: 'symbol'\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t'markup': {\n\t\t\tpattern: /((?:^|\\r?\\n|\\r)[\\t ]*)<.+/,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.markup\n\t\t},\n\t\t'doctype': {\n\t\t\tpattern: /((?:^|\\r?\\n|\\r)[\\t ]*)!!!(?: .+)?/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'tag': {\n\t\t\t// Allows for one nested group of braces\n\t\t\tpattern: /((?:^|\\r?\\n|\\r)[\\t ]*)[%.#][\\w\\-#.]*[\\w\\-](?:\\([^)]+\\)|\\{(?:\\{[^}]+\\}|[^{}])+\\}|\\[[^\\]]+\\])*[\\/<>]*/,\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'attributes': [\n\t\t\t\t\t{\n\t\t\t\t\t\t// Lookbehind tries to prevent interpolations from breaking it all\n\t\t\t\t\t\t// Allows for one nested group of braces\n\t\t\t\t\t\tpattern: /(^|[^#])\\{(?:\\{[^}]+\\}|[^{}])+\\}/,\n\t\t\t\t\t\tlookbehind: true,\n\t\t\t\t\t\tinside: Prism.languages.ruby\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tpattern: /\\([^)]+\\)/,\n\t\t\t\t\t\tinside: {\n\t\t\t\t\t\t\t'attr-value': {\n\t\t\t\t\t\t\t\tpattern: /(=\\s*)(?:\"(?:\\\\.|[^\\\\\"\\r\\n])*\"|[^)\\s]+)/,\n\t\t\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t'attr-name': /[\\w:-]+(?=\\s*!?=|\\s*[,)])/,\n\t\t\t\t\t\t\t'punctuation': /[=(),]/\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tpattern: /\\[[^\\]]+\\]/,\n\t\t\t\t\t\tinside: Prism.languages.ruby\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t'punctuation': /[<>]/\n\t\t\t}\n\t\t},\n\t\t'code': {\n\t\t\tpattern: /((?:^|\\r?\\n|\\r)[\\t ]*(?:[~-]|[&!]?=)).+/,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.ruby\n\t\t},\n\t\t// Interpolations in plain text\n\t\t'interpolation': {\n\t\t\tpattern: /#\\{[^}]+\\}/,\n\t\t\tinside: {\n\t\t\t\t'delimiter': {\n\t\t\t\t\tpattern: /^#\\{|\\}$/,\n\t\t\t\t\talias: 'punctuation'\n\t\t\t\t},\n\t\t\t\t'ruby': {\n\t\t\t\t\tpattern: /[\\s\\S]+/,\n\t\t\t\t\tinside: Prism.languages.ruby\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t'punctuation': {\n\t\t\tpattern: /((?:^|\\r?\\n|\\r)[\\t ]*)[~=\\-&!]+/,\n\t\t\tlookbehind: true\n\t\t}\n\t};\n\n\tvar filter_pattern = '((?:^|\\\\r?\\\\n|\\\\r)([\\\\t ]*)):{{filter_name}}(?:(?:\\\\r?\\\\n|\\\\r)(?:\\\\2[\\\\t ].+|\\\\s*?(?=\\\\r?\\\\n|\\\\r)))+';\n\n\t// Non exhaustive list of available filters and associated languages\n\tvar filters = [\n\t\t'css',\n\t\t{ filter: 'coffee', language: 'coffeescript' },\n\t\t'erb',\n\t\t'javascript',\n\t\t'less',\n\t\t'markdown',\n\t\t'ruby',\n\t\t'scss',\n\t\t'textile'\n\t];\n\tvar all_filters = {};\n\tfor (var i = 0, l = filters.length; i < l; i++) {\n\t\tvar filter = filters[i];\n\t\tfilter = typeof filter === 'string' ? { filter: filter, language: filter } : filter;\n\t\tif (Prism.languages[filter.language]) {\n\t\t\tall_filters['filter-' + filter.filter] = {\n\t\t\t\tpattern: RegExp(filter_pattern.replace('{{filter_name}}', function () { return filter.filter; })),\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'filter-name': {\n\t\t\t\t\t\tpattern: /^:[\\w-]+/,\n\t\t\t\t\t\talias: 'symbol'\n\t\t\t\t\t},\n\t\t\t\t\t'text': {\n\t\t\t\t\t\tpattern: /[\\s\\S]+/,\n\t\t\t\t\t\talias: [filter.language, 'language-' + filter.language],\n\t\t\t\t\t\tinside: Prism.languages[filter.language]\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t}\n\n\tPrism.languages.insertBefore('haml', 'filter', all_filters);\n\n}(Prism));\n/components/prism-monkey.js\u0003Prism.languages.monkey = {\n\t'comment': {\n\t\tpattern: /^#Rem\\s[\\s\\S]*?^#End|'.+/im,\n\t\tgreedy: true\n\t},\n\t'string': {\n\t\tpattern: /\"[^\"\\r\\n]*\"/,\n\t\tgreedy: true,\n\t},\n\t'preprocessor': {\n\t\tpattern: /(^[ \\t]*)#.+/m,\n\t\tlookbehind: true,\n\t\tgreedy: true,\n\t\talias: 'property'\n\t},\n\n\t'function': /\\b\\w+(?=\\()/,\n\t'type-char': {\n\t\tpattern: /\\b[?%#$]/,\n\t\talias: 'class-name'\n\t},\n\t'number': {\n\t\tpattern: /((?:\\.\\.)?)(?:(?:\\b|\\B-\\.?|\\B\\.)\\d+(?:(?!\\.\\.)\\.\\d*)?|\\$[\\da-f]+)/i,\n\t\tlookbehind: true\n\t},\n\t'keyword': /\\b(?:Abstract|Array|Bool|Case|Catch|Class|Const|Continue|Default|Eachin|Else|ElseIf|End|EndIf|Exit|Extends|Extern|False|Field|Final|Float|For|Forever|Function|Global|If|Implements|Import|Inline|Int|Interface|Local|Method|Module|New|Next|Null|Object|Private|Property|Public|Repeat|Return|Select|Self|Step|Strict|String|Super|Then|Throw|To|True|Try|Until|Void|Wend|While)\\b/i,\n\t'operator': /\\.\\.|<[=>]?|>=?|:?=|(?:[+\\-*\\/&~|]|\\b(?:Mod|Shl|Shr)\\b)=?|\\b(?:And|Not|Or)\\b/i,\n\t'punctuation': /[.,:;()\\[\\]]/\n};\n//plugins/line-highlight/prism-line-highlight.js((function () {\n\n\tif (typeof Prism === 'undefined' || typeof document === 'undefined' || !document.querySelector) {\n\t\treturn;\n\t}\n\n\tvar LINE_NUMBERS_CLASS = 'line-numbers';\n\tvar LINKABLE_LINE_NUMBERS_CLASS = 'linkable-line-numbers';\n\tvar NEW_LINE_EXP = /\\n(?!$)/g;\n\n\t/**\n\t * @param {string} selector\n\t * @param {ParentNode} [container]\n\t * @returns {HTMLElement[]}\n\t */\n\tfunction $$(selector, container) {\n\t\treturn Array.prototype.slice.call((container || document).querySelectorAll(selector));\n\t}\n\n\t/**\n\t * Returns whether the given element has the given class.\n\t *\n\t * @param {Element} element\n\t * @param {string} className\n\t * @returns {boolean}\n\t */\n\tfunction hasClass(element, className) {\n\t\treturn element.classList.contains(className);\n\t}\n\n\t/**\n\t * Calls the given function.\n\t *\n\t * @param {() => any} func\n\t * @returns {void}\n\t */\n\tfunction callFunction(func) {\n\t\tfunc();\n\t}\n\n\t// Some browsers round the line-height, others don't.\n\t// We need to test for it to position the elements properly.\n\tvar isLineHeightRounded = (function () {\n\t\tvar res;\n\t\treturn function () {\n\t\t\tif (typeof res === 'undefined') {\n\t\t\t\tvar d = document.createElement('div');\n\t\t\t\td.style.fontSize = '13px';\n\t\t\t\td.style.lineHeight = '1.5';\n\t\t\t\td.style.padding = '0';\n\t\t\t\td.style.border = '0';\n\t\t\t\td.innerHTML = '&nbsp;<br />&nbsp;';\n\t\t\t\tdocument.body.appendChild(d);\n\t\t\t\t// Browsers that round the line-height should have offsetHeight === 38\n\t\t\t\t// The others should have 39.\n\t\t\t\tres = d.offsetHeight === 38;\n\t\t\t\tdocument.body.removeChild(d);\n\t\t\t}\n\t\t\treturn res;\n\t\t};\n\t}());\n\n\t/**\n\t * Returns the top offset of the content box of the given parent and the content box of one of its children.\n\t *\n\t * @param {HTMLElement} parent\n\t * @param {HTMLElement} child\n\t */\n\tfunction getContentBoxTopOffset(parent, child) {\n\t\tvar parentStyle = getComputedStyle(parent);\n\t\tvar childStyle = getComputedStyle(child);\n\n\t\t/**\n\t\t * Returns the numeric value of the given pixel value.\n\t\t *\n\t\t * @param {string} px\n\t\t */\n\t\tfunction pxToNumber(px) {\n\t\t\treturn +px.substr(0, px.length - 2);\n\t\t}\n\n\t\treturn child.offsetTop\n\t\t\t+ pxToNumber(childStyle.borderTopWidth)\n\t\t\t+ pxToNumber(childStyle.paddingTop)\n\t\t\t- pxToNumber(parentStyle.paddingTop);\n\t}\n\n\t/**\n\t * Returns whether the Line Highlight plugin is active for the given element.\n\t *\n\t * If this function returns `false`, do not call `highlightLines` for the given element.\n\t *\n\t * @param {HTMLElement | null | undefined} pre\n\t * @returns {boolean}\n\t */\n\tfunction isActiveFor(pre) {\n\t\tif (!pre || !/pre/i.test(pre.nodeName)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (pre.hasAttribute('data-line')) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (pre.id && Prism.util.isActive(pre, LINKABLE_LINE_NUMBERS_CLASS)) {\n\t\t\t// Technically, the line numbers plugin is also necessary but this plugin doesn't control the classes of\n\t\t\t// the line numbers plugin, so we can't assume that they are present.\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tvar scrollIntoView = true;\n\n\tPrism.plugins.lineHighlight = {\n\t\t/**\n\t\t * Highlights the lines of the given pre.\n\t\t *\n\t\t * This function is split into a DOM measuring and mutate phase to improve performance.\n\t\t * The returned function mutates the DOM when called.\n\t\t *\n\t\t * @param {HTMLElement} pre\n\t\t * @param {string | null} [lines]\n\t\t * @param {string} [classes='']\n\t\t * @returns {() => void}\n\t\t */\n\t\thighlightLines: function highlightLines(pre, lines, classes) {\n\t\t\tlines = typeof lines === 'string' ? lines : (pre.getAttribute('data-line') || '');\n\n\t\t\tvar ranges = lines.replace(/\\s+/g, '').split(',').filter(Boolean);\n\t\t\tvar offset = +pre.getAttribute('data-line-offset') || 0;\n\n\t\t\tvar parseMethod = isLineHeightRounded() ? parseInt : parseFloat;\n\t\t\tvar lineHeight = parseMethod(getComputedStyle(pre).lineHeight);\n\t\t\tvar hasLineNumbers = Prism.util.isActive(pre, LINE_NUMBERS_CLASS);\n\t\t\tvar codeElement = pre.querySelector('code');\n\t\t\tvar parentElement = hasLineNumbers ? pre : codeElement || pre;\n\t\t\tvar mutateActions = /** @type {(() => void)[]} */ ([]);\n\t\t\tvar lineBreakMatch = codeElement.textContent.match(NEW_LINE_EXP);\n\t\t\tvar numberOfLines = lineBreakMatch ? lineBreakMatch.length + 1 : 1;\n\t\t\t/**\n\t\t\t * The top offset between the content box of the <code> element and the content box of the parent element of\n\t\t\t * the line highlight element (either `<pre>` or `<code>`).\n\t\t\t *\n\t\t\t * This offset might not be zero for some themes where the <code> element has a top margin. Some plugins\n\t\t\t * (or users) might also add element above the <code> element. Because the line highlight is aligned relative\n\t\t\t * to the <pre> element, we have to take this into account.\n\t\t\t *\n\t\t\t * This offset will be 0 if the parent element of the line highlight element is the `<code>` element.\n\t\t\t */\n\t\t\tvar codePreOffset = !codeElement || parentElement == codeElement ? 0 : getContentBoxTopOffset(pre, codeElement);\n\n\t\t\tranges.forEach(function (currentRange) {\n\t\t\t\tvar range = currentRange.split('-');\n\n\t\t\t\tvar start = +range[0];\n\t\t\t\tvar end = +range[1] || start;\n\t\t\t\tend = Math.min(numberOfLines + offset, end);\n\n\t\t\t\tif (end < start) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t/** @type {HTMLElement} */\n\t\t\t\tvar line = pre.querySelector('.line-highlight[data-range=\"' + currentRange + '\"]') || document.createElement('div');\n\n\t\t\t\tmutateActions.push(function () {\n\t\t\t\t\tline.setAttribute('aria-hidden', 'true');\n\t\t\t\t\tline.setAttribute('data-range', currentRange);\n\t\t\t\t\tline.className = (classes || '') + ' line-highlight';\n\t\t\t\t});\n\n\t\t\t\t// if the line-numbers plugin is enabled, then there is no reason for this plugin to display the line numbers\n\t\t\t\tif (hasLineNumbers && Prism.plugins.lineNumbers) {\n\t\t\t\t\tvar startNode = Prism.plugins.lineNumbers.getLine(pre, start);\n\t\t\t\t\tvar endNode = Prism.plugins.lineNumbers.getLine(pre, end);\n\n\t\t\t\t\tif (startNode) {\n\t\t\t\t\t\tvar top = startNode.offsetTop + codePreOffset + 'px';\n\t\t\t\t\t\tmutateActions.push(function () {\n\t\t\t\t\t\t\tline.style.top = top;\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tif (endNode) {\n\t\t\t\t\t\tvar height = (endNode.offsetTop - startNode.offsetTop) + endNode.offsetHeight + 'px';\n\t\t\t\t\t\tmutateActions.push(function () {\n\t\t\t\t\t\t\tline.style.height = height;\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tmutateActions.push(function () {\n\t\t\t\t\t\tline.setAttribute('data-start', String(start));\n\n\t\t\t\t\t\tif (end > start) {\n\t\t\t\t\t\t\tline.setAttribute('data-end', String(end));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tline.style.top = (start - offset - 1) * lineHeight + codePreOffset + 'px';\n\n\t\t\t\t\t\tline.textContent = new Array(end - start + 2).join(' \\n');\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tmutateActions.push(function () {\n\t\t\t\t\tline.style.width = pre.scrollWidth + 'px';\n\t\t\t\t});\n\n\t\t\t\tmutateActions.push(function () {\n\t\t\t\t\t// allow this to play nicely with the line-numbers plugin\n\t\t\t\t\t// need to attack to pre as when line-numbers is enabled, the code tag is relatively which screws up the positioning\n\t\t\t\t\tparentElement.appendChild(line);\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tvar id = pre.id;\n\t\t\tif (hasLineNumbers && Prism.util.isActive(pre, LINKABLE_LINE_NUMBERS_CLASS) && id) {\n\t\t\t\t// This implements linkable line numbers. Linkable line numbers use Line Highlight to create a link to a\n\t\t\t\t// specific line. For this to work, the pre element has to:\n\t\t\t\t//  1) have line numbers,\n\t\t\t\t//  2) have the `linkable-line-numbers` class or an ascendant that has that class, and\n\t\t\t\t//  3) have an id.\n\n\t\t\t\tif (!hasClass(pre, LINKABLE_LINE_NUMBERS_CLASS)) {\n\t\t\t\t\t// add class to pre\n\t\t\t\t\tmutateActions.push(function () {\n\t\t\t\t\t\tpre.classList.add(LINKABLE_LINE_NUMBERS_CLASS);\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tvar start = parseInt(pre.getAttribute('data-start') || '1');\n\n\t\t\t\t// iterate all line number spans\n\t\t\t\t$$('.line-numbers-rows > span', pre).forEach(function (lineSpan, i) {\n\t\t\t\t\tvar lineNumber = i + start;\n\t\t\t\t\tlineSpan.onclick = function () {\n\t\t\t\t\t\tvar hash = id + '.' + lineNumber;\n\n\t\t\t\t\t\t// this will prevent scrolling since the span is obviously in view\n\t\t\t\t\t\tscrollIntoView = false;\n\t\t\t\t\t\tlocation.hash = hash;\n\t\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t\tscrollIntoView = true;\n\t\t\t\t\t\t}, 1);\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn function () {\n\t\t\t\tmutateActions.forEach(callFunction);\n\t\t\t};\n\t\t}\n\t};\n\n\n\tfunction applyHash() {\n\t\tvar hash = location.hash.slice(1);\n\n\t\t// Remove pre-existing temporary lines\n\t\t$$('.temporary.line-highlight').forEach(function (line) {\n\t\t\tline.parentNode.removeChild(line);\n\t\t});\n\n\t\tvar range = (hash.match(/\\.([\\d,-]+)$/) || [, ''])[1];\n\n\t\tif (!range || document.getElementById(hash)) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar id = hash.slice(0, hash.lastIndexOf('.'));\n\t\tvar pre = document.getElementById(id);\n\n\t\tif (!pre) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!pre.hasAttribute('data-line')) {\n\t\t\tpre.setAttribute('data-line', '');\n\t\t}\n\n\t\tvar mutateDom = Prism.plugins.lineHighlight.highlightLines(pre, range, 'temporary ');\n\t\tmutateDom();\n\n\t\tif (scrollIntoView) {\n\t\t\tdocument.querySelector('.temporary.line-highlight').scrollIntoView();\n\t\t}\n\t}\n\n\tvar fakeTimer = 0; // Hack to limit the number of times applyHash() runs\n\n\tPrism.hooks.add('before-sanity-check', function (env) {\n\t\tvar pre = env.element.parentElement;\n\t\tif (!isActiveFor(pre)) {\n\t\t\treturn;\n\t\t}\n\n\t\t/*\n\t\t * Cleanup for other plugins (e.g. autoloader).\n\t\t *\n\t\t * Sometimes <code> blocks are highlighted multiple times. It is necessary\n\t\t * to cleanup any left-over tags, because the whitespace inside of the <div>\n\t\t * tags change the content of the <code> tag.\n\t\t */\n\t\tvar num = 0;\n\t\t$$('.line-highlight', pre).forEach(function (line) {\n\t\t\tnum += line.textContent.length;\n\t\t\tline.parentNode.removeChild(line);\n\t\t});\n\t\t// Remove extra whitespace\n\t\tif (num && /^(?: \\n)+$/.test(env.code.slice(-num))) {\n\t\t\tenv.code = env.code.slice(0, -num);\n\t\t}\n\t});\n\n\tPrism.hooks.add('complete', function completeHook(env) {\n\t\tvar pre = env.element.parentElement;\n\t\tif (!isActiveFor(pre)) {\n\t\t\treturn;\n\t\t}\n\n\t\tclearTimeout(fakeTimer);\n\n\t\tvar hasLineNumbers = Prism.plugins.lineNumbers;\n\t\tvar isLineNumbersLoaded = env.plugins && env.plugins.lineNumbers;\n\n\t\tif (hasClass(pre, LINE_NUMBERS_CLASS) && hasLineNumbers && !isLineNumbersLoaded) {\n\t\t\tPrism.hooks.add('line-numbers', completeHook);\n\t\t} else {\n\t\t\tvar mutateDom = Prism.plugins.lineHighlight.highlightLines(pre);\n\t\t\tmutateDom();\n\t\t\tfakeTimer = setTimeout(applyHash, 1);\n\t\t}\n\t});\n\n\twindow.addEventListener('hashchange', applyHash);\n\twindow.addEventListener('resize', function () {\n\t\tvar actions = $$('pre')\n\t\t\t.filter(isActiveFor)\n\t\t\t.map(function (pre) {\n\t\t\t\treturn Prism.plugins.lineHighlight.highlightLines(pre);\n\t\t\t});\n\t\tactions.forEach(callFunction);\n\t});\n\n}());\n0/plugins/match-braces/prism-match-braces.min.css\u0002.token.punctuation.brace-hover,.token.punctuation.brace-selected{outline:solid 1px}.rainbow-braces .token.punctuation.brace-level-1,.rainbow-braces .token.punctuation.brace-level-5,.rainbow-braces .token.punctuation.brace-level-9{color:#e50;opacity:1}.rainbow-braces .token.punctuation.brace-level-10,.rainbow-braces .token.punctuation.brace-level-2,.rainbow-braces .token.punctuation.brace-level-6{color:#0b3;opacity:1}.rainbow-braces .token.punctuation.brace-level-11,.rainbow-braces .token.punctuation.brace-level-3,.rainbow-braces .token.punctuation.brace-level-7{color:#26f;opacity:1}.rainbow-braces .token.punctuation.brace-level-12,.rainbow-braces .token.punctuation.brace-level-4,.rainbow-braces .token.punctuation.brace-level-8{color:#e0e;opacity:1}/components/prism-arff.min.jsPrism.languages.arff={comment:/%.*/,string:{pattern:/([\"'])(?:\\\\.|(?!\\1)[^\\\\\\r\\n])*\\1/,greedy:!0},keyword:/@(?:attribute|data|end|relation)\\b/i,number:/\\b\\d+(?:\\.\\d+)?\\b/,punctuation:/[{},]/};/components/prism-ignore.min.js\u0001T!function(n){n.languages.ignore={comment:/^#.*/m,entry:{pattern:/\\S(?:.*(?:(?:\\\\ )|\\S))?/,alias:\"string\",inside:{operator:/^!|\\*\\*?|\\?/,regex:{pattern:/(^|[^\\\\])\\[[^\\[\\]]*\\]/,lookbehind:!0},punctuation:/\\//}}},n.languages.gitignore=n.languages.ignore,n.languages.hgignore=n.languages.ignore,n.languages.npmignore=n.languages.ignore}(Prism);/components/prism-liquid.min.js\b/Prism.languages.liquid={comment:{pattern:/(^\\{%\\s*comment\\s*%\\})[\\s\\S]+(?=\\{%\\s*endcomment\\s*%\\}$)/,lookbehind:!0},delimiter:{pattern:/^\\{(?:\\{\\{|[%\\{])-?|-?(?:\\}\\}|[%\\}])\\}$/,alias:\"punctuation\"},string:{pattern:/\"[^\"]*\"|'[^']*'/,greedy:!0},keyword:/\\b(?:as|assign|break|(?:end)?(?:capture|case|comment|for|form|if|paginate|raw|style|tablerow|unless)|continue|cycle|decrement|echo|else|elsif|in|include|increment|limit|liquid|offset|range|render|reversed|section|when|with)\\b/,object:/\\b(?:address|all_country_option_tags|article|block|blog|cart|checkout|collection|color|country|country_option_tags|currency|current_page|current_tags|customer|customer_address|date|discount_allocation|discount_application|external_video|filter|filter_value|font|forloop|fulfillment|generic_file|gift_card|group|handle|image|line_item|link|linklist|localization|location|measurement|media|metafield|model|model_source|order|page|page_description|page_image|page_title|part|policy|product|product_option|recommendations|request|robots|routes|rule|script|search|selling_plan|selling_plan_allocation|selling_plan_group|shipping_method|shop|shop_locale|sitemap|store_availability|tax_line|template|theme|transaction|unit_price_measurement|user_agent|variant|video|video_source)\\b/,function:[{pattern:/(\\|\\s*)\\w+/,lookbehind:!0,alias:\"filter\"},{pattern:/(\\.\\s*)(?:first|last|size)/,lookbehind:!0}],boolean:/\\b(?:false|nil|true)\\b/,range:{pattern:/\\.\\./,alias:\"operator\"},number:/\\b\\d+(?:\\.\\d+)?\\b/,operator:/[!=]=|<>|[<>]=?|[|?:=-]|\\b(?:and|contains(?=\\s)|or)\\b/,punctuation:/[.,\\[\\]()]/,empty:{pattern:/\\bempty\\b/,alias:\"keyword\"}},Prism.hooks.add(\"before-tokenize\",(function(e){var t=!1;Prism.languages[\"markup-templating\"].buildPlaceholders(e,\"liquid\",/\\{%\\s*comment\\s*%\\}[\\s\\S]*?\\{%\\s*endcomment\\s*%\\}|\\{(?:%[\\s\\S]*?%|\\{\\{[\\s\\S]*?\\}\\}|\\{[\\s\\S]*?\\})\\}/g,(function(e){var n=/^\\{%-?\\s*(\\w+)/.exec(e);if(n){var i=n[1];if(\"raw\"===i&&!t)return t=!0,!0;if(\"endraw\"===i)return t=!1,!0}return!t}))})),Prism.hooks.add(\"after-tokenize\",(function(e){Prism.languages[\"markup-templating\"].tokenizePlaceholders(e,\"liquid\")}));/components/prism-n4js.min.js\u0002APrism.languages.n4js=Prism.languages.extend(\"javascript\",{keyword:/\\b(?:Array|any|boolean|break|case|catch|class|const|constructor|continue|debugger|declare|default|delete|do|else|enum|export|extends|false|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|module|new|null|number|package|private|protected|public|return|set|static|string|super|switch|this|throw|true|try|typeof|var|void|while|with|yield)\\b/}),Prism.languages.insertBefore(\"n4js\",\"constant\",{annotation:{pattern:/@+\\w+/,alias:\"operator\"}}),Prism.languages.n4jsd=Prism.languages.n4js;/components/prism-aspnet.js\u0005Prism.languages.aspnet = Prism.languages.extend('markup', {\n\t'page-directive': {\n\t\tpattern: /<%\\s*@.*%>/,\n\t\talias: 'tag',\n\t\tinside: {\n\t\t\t'page-directive': {\n\t\t\t\tpattern: /<%\\s*@\\s*(?:Assembly|Control|Implements|Import|Master(?:Type)?|OutputCache|Page|PreviousPageType|Reference|Register)?|%>/i,\n\t\t\t\talias: 'tag'\n\t\t\t},\n\t\t\trest: Prism.languages.markup.tag.inside\n\t\t}\n\t},\n\t'directive': {\n\t\tpattern: /<%.*%>/,\n\t\talias: 'tag',\n\t\tinside: {\n\t\t\t'directive': {\n\t\t\t\tpattern: /<%\\s*?[$=%#:]{0,2}|%>/,\n\t\t\t\talias: 'tag'\n\t\t\t},\n\t\t\trest: Prism.languages.csharp\n\t\t}\n\t}\n});\n// Regexp copied from prism-markup, with a negative look-ahead added\nPrism.languages.aspnet.tag.pattern = /<(?!%)\\/?[^\\s>\\/]+(?:\\s+[^\\s>\\/=]+(?:=(?:(\"|')(?:\\\\[\\s\\S]|(?!\\1)[^\\\\])*\\1|[^\\s'\">=]+))?)*\\s*\\/?>/;\n\n// match directives of attribute value foo=\"<% Bar %>\"\nPrism.languages.insertBefore('inside', 'punctuation', {\n\t'directive': Prism.languages.aspnet['directive']\n}, Prism.languages.aspnet.tag.inside['attr-value']);\n\nPrism.languages.insertBefore('aspnet', 'comment', {\n\t'asp-comment': {\n\t\tpattern: /<%--[\\s\\S]*?--%>/,\n\t\talias: ['asp', 'comment']\n\t}\n});\n\n// script runat=\"server\" contains csharp, not javascript\nPrism.languages.insertBefore('aspnet', Prism.languages.javascript ? 'script' : 'tag', {\n\t'asp-script': {\n\t\tpattern: /(<script(?=.*runat=['\"]?server\\b)[^>]*>)[\\s\\S]*?(?=<\\/script>)/i,\n\t\tlookbehind: true,\n\t\talias: ['asp', 'script'],\n\t\tinside: Prism.languages.csharp || {}\n\t}\n});\n%/plugins/toolbar/prism-toolbar.min.js\u0006!function(){if(\"undefined\"!=typeof Prism&&\"undefined\"!=typeof document){var e=[],t={},n=function(){};Prism.plugins.toolbar={};var a=Prism.plugins.toolbar.registerButton=function(n,a){var r;r=\"function\"==typeof a?a:function(e){var t;return\"function\"==typeof a.onClick?((t=document.createElement(\"button\")).type=\"button\",t.addEventListener(\"click\",(function(){a.onClick.call(this,e)}))):\"string\"==typeof a.url?(t=document.createElement(\"a\")).href=a.url:t=document.createElement(\"span\"),a.className&&t.classList.add(a.className),t.textContent=a.text,t},n in t?console.warn('There is a button with the key \"'+n+'\" registered already.'):e.push(t[n]=r)},r=Prism.plugins.toolbar.hook=function(a){var r=a.element.parentNode;if(r&&/pre/i.test(r.nodeName)&&!r.parentNode.classList.contains(\"code-toolbar\")){var o=document.createElement(\"div\");o.classList.add(\"code-toolbar\"),r.parentNode.insertBefore(o,r),o.appendChild(r);var i=document.createElement(\"div\");i.classList.add(\"toolbar\");var l=e,d=function(e){for(;e;){var t=e.getAttribute(\"data-toolbar-order\");if(null!=t)return(t=t.trim()).length?t.split(/\\s*,\\s*/g):[];e=e.parentElement}}(a.element);d&&(l=d.map((function(e){return t[e]||n}))),l.forEach((function(e){var t=e(a);if(t){var n=document.createElement(\"div\");n.classList.add(\"toolbar-item\"),n.appendChild(t),i.appendChild(n)}})),o.appendChild(i)}};a(\"label\",(function(e){var t=e.element.parentNode;if(t&&/pre/i.test(t.nodeName)&&t.hasAttribute(\"data-label\")){var n,a,r=t.getAttribute(\"data-label\");try{a=document.querySelector(\"template#\"+r)}catch(e){}return a?n=a.content:(t.hasAttribute(\"data-url\")?(n=document.createElement(\"a\")).href=t.getAttribute(\"data-url\"):n=document.createElement(\"span\"),n.textContent=r),n}})),Prism.hooks.add(\"complete\",r)}}();/components/prism-cmake.min.js(Prism.languages.cmake={comment:/#.*/,string:{pattern:/\"(?:[^\\\\\"]|\\\\.)*\"/,greedy:!0,inside:{interpolation:{pattern:/\\$\\{(?:[^{}$]|\\$\\{[^{}$]*\\})*\\}/,inside:{punctuation:/\\$\\{|\\}/,variable:/\\w+/}}}},variable:/\\b(?:CMAKE_\\w+|\\w+_(?:(?:BINARY|SOURCE)_DIR|DESCRIPTION|HOMEPAGE_URL|ROOT|VERSION(?:_MAJOR|_MINOR|_PATCH|_TWEAK)?)|(?:ANDROID|APPLE|BORLAND|BUILD_SHARED_LIBS|CACHE|CPACK_(?:ABSOLUTE_DESTINATION_FILES|COMPONENT_INCLUDE_TOPLEVEL_DIRECTORY|ERROR_ON_ABSOLUTE_INSTALL_DESTINATION|INCLUDE_TOPLEVEL_DIRECTORY|INSTALL_DEFAULT_DIRECTORY_PERMISSIONS|INSTALL_SCRIPT|PACKAGING_INSTALL_PREFIX|SET_DESTDIR|WARN_ON_ABSOLUTE_INSTALL_DESTINATION)|CTEST_(?:BINARY_DIRECTORY|BUILD_COMMAND|BUILD_NAME|BZR_COMMAND|BZR_UPDATE_OPTIONS|CHANGE_ID|CHECKOUT_COMMAND|CONFIGURATION_TYPE|CONFIGURE_COMMAND|COVERAGE_COMMAND|COVERAGE_EXTRA_FLAGS|CURL_OPTIONS|CUSTOM_(?:COVERAGE_EXCLUDE|ERROR_EXCEPTION|ERROR_MATCH|ERROR_POST_CONTEXT|ERROR_PRE_CONTEXT|MAXIMUM_FAILED_TEST_OUTPUT_SIZE|MAXIMUM_NUMBER_OF_(?:ERRORS|WARNINGS)|MAXIMUM_PASSED_TEST_OUTPUT_SIZE|MEMCHECK_IGNORE|POST_MEMCHECK|POST_TEST|PRE_MEMCHECK|PRE_TEST|TESTS_IGNORE|WARNING_EXCEPTION|WARNING_MATCH)|CVS_CHECKOUT|CVS_COMMAND|CVS_UPDATE_OPTIONS|DROP_LOCATION|DROP_METHOD|DROP_SITE|DROP_SITE_CDASH|DROP_SITE_PASSWORD|DROP_SITE_USER|EXTRA_COVERAGE_GLOB|GIT_COMMAND|GIT_INIT_SUBMODULES|GIT_UPDATE_CUSTOM|GIT_UPDATE_OPTIONS|HG_COMMAND|HG_UPDATE_OPTIONS|LABELS_FOR_SUBPROJECTS|MEMORYCHECK_(?:COMMAND|COMMAND_OPTIONS|SANITIZER_OPTIONS|SUPPRESSIONS_FILE|TYPE)|NIGHTLY_START_TIME|P4_CLIENT|P4_COMMAND|P4_OPTIONS|P4_UPDATE_OPTIONS|RUN_CURRENT_SCRIPT|SCP_COMMAND|SITE|SOURCE_DIRECTORY|SUBMIT_URL|SVN_COMMAND|SVN_OPTIONS|SVN_UPDATE_OPTIONS|TEST_LOAD|TEST_TIMEOUT|TRIGGER_SITE|UPDATE_COMMAND|UPDATE_OPTIONS|UPDATE_VERSION_ONLY|USE_LAUNCHERS)|CYGWIN|ENV|EXECUTABLE_OUTPUT_PATH|GHS-MULTI|IOS|LIBRARY_OUTPUT_PATH|MINGW|MSVC(?:10|11|12|14|60|70|71|80|90|_IDE|_TOOLSET_VERSION|_VERSION)?|MSYS|PROJECT_NAME|UNIX|WIN32|WINCE|WINDOWS_PHONE|WINDOWS_STORE|XCODE))\\b/,property:/\\b(?:cxx_\\w+|(?:ARCHIVE_OUTPUT_(?:DIRECTORY|NAME)|COMPILE_DEFINITIONS|COMPILE_PDB_NAME|COMPILE_PDB_OUTPUT_DIRECTORY|EXCLUDE_FROM_DEFAULT_BUILD|IMPORTED_(?:IMPLIB|LIBNAME|LINK_DEPENDENT_LIBRARIES|LINK_INTERFACE_LANGUAGES|LINK_INTERFACE_LIBRARIES|LINK_INTERFACE_MULTIPLICITY|LOCATION|NO_SONAME|OBJECTS|SONAME)|INTERPROCEDURAL_OPTIMIZATION|LIBRARY_OUTPUT_DIRECTORY|LIBRARY_OUTPUT_NAME|LINK_FLAGS|LINK_INTERFACE_LIBRARIES|LINK_INTERFACE_MULTIPLICITY|LOCATION|MAP_IMPORTED_CONFIG|OSX_ARCHITECTURES|OUTPUT_NAME|PDB_NAME|PDB_OUTPUT_DIRECTORY|RUNTIME_OUTPUT_DIRECTORY|RUNTIME_OUTPUT_NAME|STATIC_LIBRARY_FLAGS|VS_CSHARP|VS_DOTNET_REFERENCEPROP|VS_DOTNET_REFERENCE|VS_GLOBAL_SECTION_POST|VS_GLOBAL_SECTION_PRE|VS_GLOBAL|XCODE_ATTRIBUTE)_\\w+|\\w+_(?:CLANG_TIDY|COMPILER_LAUNCHER|CPPCHECK|CPPLINT|INCLUDE_WHAT_YOU_USE|OUTPUT_NAME|POSTFIX|VISIBILITY_PRESET)|ABSTRACT|ADDITIONAL_MAKE_CLEAN_FILES|ADVANCED|ALIASED_TARGET|ALLOW_DUPLICATE_CUSTOM_TARGETS|ANDROID_(?:ANT_ADDITIONAL_OPTIONS|API|API_MIN|ARCH|ASSETS_DIRECTORIES|GUI|JAR_DEPENDENCIES|NATIVE_LIB_DEPENDENCIES|NATIVE_LIB_DIRECTORIES|PROCESS_MAX|PROGUARD|PROGUARD_CONFIG_PATH|SECURE_PROPS_PATH|SKIP_ANT_STEP|STL_TYPE)|ARCHIVE_OUTPUT_DIRECTORY|ATTACHED_FILES|ATTACHED_FILES_ON_FAIL|AUTOGEN_(?:BUILD_DIR|ORIGIN_DEPENDS|PARALLEL|SOURCE_GROUP|TARGETS_FOLDER|TARGET_DEPENDS)|AUTOMOC|AUTOMOC_(?:COMPILER_PREDEFINES|DEPEND_FILTERS|EXECUTABLE|MACRO_NAMES|MOC_OPTIONS|SOURCE_GROUP|TARGETS_FOLDER)|AUTORCC|AUTORCC_EXECUTABLE|AUTORCC_OPTIONS|AUTORCC_SOURCE_GROUP|AUTOUIC|AUTOUIC_EXECUTABLE|AUTOUIC_OPTIONS|AUTOUIC_SEARCH_PATHS|BINARY_DIR|BUILDSYSTEM_TARGETS|BUILD_RPATH|BUILD_RPATH_USE_ORIGIN|BUILD_WITH_INSTALL_NAME_DIR|BUILD_WITH_INSTALL_RPATH|BUNDLE|BUNDLE_EXTENSION|CACHE_VARIABLES|CLEAN_NO_CUSTOM|COMMON_LANGUAGE_RUNTIME|COMPATIBLE_INTERFACE_(?:BOOL|NUMBER_MAX|NUMBER_MIN|STRING)|COMPILE_(?:DEFINITIONS|FEATURES|FLAGS|OPTIONS|PDB_NAME|PDB_OUTPUT_DIRECTORY)|COST|CPACK_DESKTOP_SHORTCUTS|CPACK_NEVER_OVERWRITE|CPACK_PERMANENT|CPACK_STARTUP_SHORTCUTS|CPACK_START_MENU_SHORTCUTS|CPACK_WIX_ACL|CROSSCOMPILING_EMULATOR|CUDA_EXTENSIONS|CUDA_PTX_COMPILATION|CUDA_RESOLVE_DEVICE_SYMBOLS|CUDA_SEPARABLE_COMPILATION|CUDA_STANDARD|CUDA_STANDARD_REQUIRED|CXX_EXTENSIONS|CXX_STANDARD|CXX_STANDARD_REQUIRED|C_EXTENSIONS|C_STANDARD|C_STANDARD_REQUIRED|DEBUG_CONFIGURATIONS|DEFINE_SYMBOL|DEFINITIONS|DEPENDS|DEPLOYMENT_ADDITIONAL_FILES|DEPLOYMENT_REMOTE_DIRECTORY|DISABLED|DISABLED_FEATURES|ECLIPSE_EXTRA_CPROJECT_CONTENTS|ECLIPSE_EXTRA_NATURES|ENABLED_FEATURES|ENABLED_LANGUAGES|ENABLE_EXPORTS|ENVIRONMENT|EXCLUDE_FROM_ALL|EXCLUDE_FROM_DEFAULT_BUILD|EXPORT_NAME|EXPORT_PROPERTIES|EXTERNAL_OBJECT|EchoString|FAIL_REGULAR_EXPRESSION|FIND_LIBRARY_USE_LIB32_PATHS|FIND_LIBRARY_USE_LIB64_PATHS|FIND_LIBRARY_USE_LIBX32_PATHS|FIND_LIBRARY_USE_OPENBSD_VERSIONING|FIXTURES_CLEANUP|FIXTURES_REQUIRED|FIXTURES_SETUP|FOLDER|FRAMEWORK|Fortran_FORMAT|Fortran_MODULE_DIRECTORY|GENERATED|GENERATOR_FILE_NAME|GENERATOR_IS_MULTI_CONFIG|GHS_INTEGRITY_APP|GHS_NO_SOURCE_GROUP_FILE|GLOBAL_DEPENDS_DEBUG_MODE|GLOBAL_DEPENDS_NO_CYCLES|GNUtoMS|HAS_CXX|HEADER_FILE_ONLY|HELPSTRING|IMPLICIT_DEPENDS_INCLUDE_TRANSFORM|IMPORTED|IMPORTED_(?:COMMON_LANGUAGE_RUNTIME|CONFIGURATIONS|GLOBAL|IMPLIB|LIBNAME|LINK_DEPENDENT_LIBRARIES|LINK_INTERFACE_(?:LANGUAGES|LIBRARIES|MULTIPLICITY)|LOCATION|NO_SONAME|OBJECTS|SONAME)|IMPORT_PREFIX|IMPORT_SUFFIX|INCLUDE_DIRECTORIES|INCLUDE_REGULAR_EXPRESSION|INSTALL_NAME_DIR|INSTALL_RPATH|INSTALL_RPATH_USE_LINK_PATH|INTERFACE_(?:AUTOUIC_OPTIONS|COMPILE_DEFINITIONS|COMPILE_FEATURES|COMPILE_OPTIONS|INCLUDE_DIRECTORIES|LINK_DEPENDS|LINK_DIRECTORIES|LINK_LIBRARIES|LINK_OPTIONS|POSITION_INDEPENDENT_CODE|SOURCES|SYSTEM_INCLUDE_DIRECTORIES)|INTERPROCEDURAL_OPTIMIZATION|IN_TRY_COMPILE|IOS_INSTALL_COMBINED|JOB_POOLS|JOB_POOL_COMPILE|JOB_POOL_LINK|KEEP_EXTENSION|LABELS|LANGUAGE|LIBRARY_OUTPUT_DIRECTORY|LINKER_LANGUAGE|LINK_(?:DEPENDS|DEPENDS_NO_SHARED|DIRECTORIES|FLAGS|INTERFACE_LIBRARIES|INTERFACE_MULTIPLICITY|LIBRARIES|OPTIONS|SEARCH_END_STATIC|SEARCH_START_STATIC|WHAT_YOU_USE)|LISTFILE_STACK|LOCATION|MACOSX_BUNDLE|MACOSX_BUNDLE_INFO_PLIST|MACOSX_FRAMEWORK_INFO_PLIST|MACOSX_PACKAGE_LOCATION|MACOSX_RPATH|MACROS|MANUALLY_ADDED_DEPENDENCIES|MEASUREMENT|MODIFIED|NAME|NO_SONAME|NO_SYSTEM_FROM_IMPORTED|OBJECT_DEPENDS|OBJECT_OUTPUTS|OSX_ARCHITECTURES|OUTPUT_NAME|PACKAGES_FOUND|PACKAGES_NOT_FOUND|PARENT_DIRECTORY|PASS_REGULAR_EXPRESSION|PDB_NAME|PDB_OUTPUT_DIRECTORY|POSITION_INDEPENDENT_CODE|POST_INSTALL_SCRIPT|PREDEFINED_TARGETS_FOLDER|PREFIX|PRE_INSTALL_SCRIPT|PRIVATE_HEADER|PROCESSORS|PROCESSOR_AFFINITY|PROJECT_LABEL|PUBLIC_HEADER|REPORT_UNDEFINED_PROPERTIES|REQUIRED_FILES|RESOURCE|RESOURCE_LOCK|RULE_LAUNCH_COMPILE|RULE_LAUNCH_CUSTOM|RULE_LAUNCH_LINK|RULE_MESSAGES|RUNTIME_OUTPUT_DIRECTORY|RUN_SERIAL|SKIP_AUTOGEN|SKIP_AUTOMOC|SKIP_AUTORCC|SKIP_AUTOUIC|SKIP_BUILD_RPATH|SKIP_RETURN_CODE|SOURCES|SOURCE_DIR|SOVERSION|STATIC_LIBRARY_FLAGS|STATIC_LIBRARY_OPTIONS|STRINGS|SUBDIRECTORIES|SUFFIX|SYMBOLIC|TARGET_ARCHIVES_MAY_BE_SHARED_LIBS|TARGET_MESSAGES|TARGET_SUPPORTS_SHARED_LIBS|TESTS|TEST_INCLUDE_FILE|TEST_INCLUDE_FILES|TIMEOUT|TIMEOUT_AFTER_MATCH|TYPE|USE_FOLDERS|VALUE|VARIABLES|VERSION|VISIBILITY_INLINES_HIDDEN|VS_(?:CONFIGURATION_TYPE|COPY_TO_OUT_DIR|DEBUGGER_(?:COMMAND|COMMAND_ARGUMENTS|ENVIRONMENT|WORKING_DIRECTORY)|DEPLOYMENT_CONTENT|DEPLOYMENT_LOCATION|DOTNET_REFERENCES|DOTNET_REFERENCES_COPY_LOCAL|INCLUDE_IN_VSIX|IOT_STARTUP_TASK|KEYWORD|RESOURCE_GENERATOR|SCC_AUXPATH|SCC_LOCALPATH|SCC_PROJECTNAME|SCC_PROVIDER|SDK_REFERENCES|SHADER_(?:DISABLE_OPTIMIZATIONS|ENABLE_DEBUG|ENTRYPOINT|FLAGS|MODEL|OBJECT_FILE_NAME|OUTPUT_HEADER_FILE|TYPE|VARIABLE_NAME)|STARTUP_PROJECT|TOOL_OVERRIDE|USER_PROPS|WINRT_COMPONENT|WINRT_EXTENSIONS|WINRT_REFERENCES|XAML_TYPE)|WILL_FAIL|WIN32_EXECUTABLE|WINDOWS_EXPORT_ALL_SYMBOLS|WORKING_DIRECTORY|WRAP_EXCLUDE|XCODE_(?:EMIT_EFFECTIVE_PLATFORM_NAME|EXPLICIT_FILE_TYPE|FILE_ATTRIBUTES|LAST_KNOWN_FILE_TYPE|PRODUCT_TYPE|SCHEME_(?:ADDRESS_SANITIZER|ADDRESS_SANITIZER_USE_AFTER_RETURN|ARGUMENTS|DISABLE_MAIN_THREAD_CHECKER|DYNAMIC_LIBRARY_LOADS|DYNAMIC_LINKER_API_USAGE|ENVIRONMENT|EXECUTABLE|GUARD_MALLOC|MAIN_THREAD_CHECKER_STOP|MALLOC_GUARD_EDGES|MALLOC_SCRIBBLE|MALLOC_STACK|THREAD_SANITIZER(?:_STOP)?|UNDEFINED_BEHAVIOUR_SANITIZER(?:_STOP)?|ZOMBIE_OBJECTS))|XCTEST)\\b/,keyword:/\\b(?:add_compile_definitions|add_compile_options|add_custom_command|add_custom_target|add_definitions|add_dependencies|add_executable|add_library|add_link_options|add_subdirectory|add_test|aux_source_directory|break|build_command|build_name|cmake_host_system_information|cmake_minimum_required|cmake_parse_arguments|cmake_policy|configure_file|continue|create_test_sourcelist|ctest_build|ctest_configure|ctest_coverage|ctest_empty_binary_directory|ctest_memcheck|ctest_read_custom_files|ctest_run_script|ctest_sleep|ctest_start|ctest_submit|ctest_test|ctest_update|ctest_upload|define_property|else|elseif|enable_language|enable_testing|endforeach|endfunction|endif|endmacro|endwhile|exec_program|execute_process|export|export_library_dependencies|file|find_file|find_library|find_package|find_path|find_program|fltk_wrap_ui|foreach|function|get_cmake_property|get_directory_property|get_filename_component|get_property|get_source_file_property|get_target_property|get_test_property|if|include|include_directories|include_external_msproject|include_guard|include_regular_expression|install|install_files|install_programs|install_targets|link_directories|link_libraries|list|load_cache|load_command|macro|make_directory|mark_as_advanced|math|message|option|output_required_files|project|qt_wrap_cpp|qt_wrap_ui|remove|remove_definitions|return|separate_arguments|set|set_directory_properties|set_property|set_source_files_properties|set_target_properties|set_tests_properties|site_name|source_group|string|subdir_depends|subdirs|target_compile_definitions|target_compile_features|target_compile_options|target_include_directories|target_link_directories|target_link_libraries|target_link_options|target_sources|try_compile|try_run|unset|use_mangled_mesa|utility_source|variable_requires|variable_watch|while|write_file)(?=\\s*\\()\\b/,boolean:/\\b(?:FALSE|OFF|ON|TRUE)\\b/,namespace:/\\b(?:INTERFACE|PRIVATE|PROPERTIES|PUBLIC|SHARED|STATIC|TARGET_OBJECTS)\\b/,operator:/\\b(?:AND|DEFINED|EQUAL|GREATER|LESS|MATCHES|NOT|OR|STREQUAL|STRGREATER|STRLESS|VERSION_EQUAL|VERSION_GREATER|VERSION_LESS)\\b/,inserted:{pattern:/\\b\\w+::\\w+\\b/,alias:\"class-name\"},number:/\\b\\d+(?:\\.\\d+)*\\b/,function:/\\b[a-z_]\\w*(?=\\s*\\()\\b/i,punctuation:/[()>}]|\\$[<{]/};+/plugins/previewers/prism-previewers.min.js)\\!function(){if(\"undefined\"!=typeof Prism&&\"undefined\"!=typeof document&&Function.prototype.bind){var e,s,t={gradient:{create:(e={},s=function(s){if(e[s])return e[s];var t=s.match(/^(\\b|\\B-[a-z]{1,10}-)((?:repeating-)?(?:linear|radial)-gradient)/),i=t&&t[1],a=t&&t[2],n=s.replace(/^(?:\\b|\\B-[a-z]{1,10}-)(?:repeating-)?(?:linear|radial)-gradient\\(|\\)$/g,\"\").split(/\\s*,\\s*/);return a.indexOf(\"linear\")>=0?e[s]=function(e,s,t){var i=\"180deg\";return/^(?:-?(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:deg|rad)|to\\b|top|right|bottom|left)/.test(t[0])&&(i=t.shift()).indexOf(\"to \")<0&&(i.indexOf(\"top\")>=0?i=i.indexOf(\"left\")>=0?\"to bottom right\":i.indexOf(\"right\")>=0?\"to bottom left\":\"to bottom\":i.indexOf(\"bottom\")>=0?i=i.indexOf(\"left\")>=0?\"to top right\":i.indexOf(\"right\")>=0?\"to top left\":\"to top\":i.indexOf(\"left\")>=0?i=\"to right\":i.indexOf(\"right\")>=0?i=\"to left\":e&&(i.indexOf(\"deg\")>=0?i=90-parseFloat(i)+\"deg\":i.indexOf(\"rad\")>=0&&(i=Math.PI/2-parseFloat(i)+\"rad\"))),s+\"(\"+i+\",\"+t.join(\",\")+\")\"}(i,a,n):a.indexOf(\"radial\")>=0?e[s]=function(e,s,t){if(t[0].indexOf(\"at\")<0){var i=\"center\",a=\"ellipse\",n=\"farthest-corner\";if(/\\b(?:bottom|center|left|right|top)\\b|^\\d+/.test(t[0])&&(i=t.shift().replace(/\\s*-?\\d+(?:deg|rad)\\s*/,\"\")),/\\b(?:circle|closest|contain|cover|ellipse|farthest)\\b/.test(t[0])){var r=t.shift().split(/\\s+/);!r[0]||\"circle\"!==r[0]&&\"ellipse\"!==r[0]||(a=r.shift()),r[0]&&(n=r.shift()),\"cover\"===n?n=\"farthest-corner\":\"contain\"===n&&(n=\"clothest-side\")}return s+\"(\"+a+\" \"+n+\" at \"+i+\",\"+t.join(\",\")+\")\"}return s+\"(\"+t.join(\",\")+\")\"}(0,a,n):e[s]=a+\"(\"+n.join(\",\")+\")\"},function(){new Prism.plugins.Previewer(\"gradient\",(function(e){return this.firstChild.style.backgroundImage=\"\",this.firstChild.style.backgroundImage=s(e),!!this.firstChild.style.backgroundImage}),\"*\",(function(){this._elt.innerHTML=\"<div></div>\"}))}),tokens:{gradient:{pattern:/(?:\\b|\\B-[a-z]{1,10}-)(?:repeating-)?(?:linear|radial)-gradient\\((?:(?:hsl|rgb)a?\\(.+?\\)|[^\\)])+\\)/gi,inside:{function:/[\\w-]+(?=\\()/,punctuation:/[(),]/}}},languages:{css:!0,less:!0,sass:[{lang:\"sass\",before:\"punctuation\",inside:\"inside\",root:Prism.languages.sass&&Prism.languages.sass[\"variable-line\"]},{lang:\"sass\",before:\"punctuation\",inside:\"inside\",root:Prism.languages.sass&&Prism.languages.sass[\"property-line\"]}],scss:!0,stylus:[{lang:\"stylus\",before:\"func\",inside:\"rest\",root:Prism.languages.stylus&&Prism.languages.stylus[\"property-declaration\"].inside},{lang:\"stylus\",before:\"func\",inside:\"rest\",root:Prism.languages.stylus&&Prism.languages.stylus[\"variable-declaration\"].inside}]}},angle:{create:function(){new Prism.plugins.Previewer(\"angle\",(function(e){var s,t,i=parseFloat(e),a=e.match(/[a-z]+$/i);if(!i||!a)return!1;switch(a=a[0]){case\"deg\":s=360;break;case\"grad\":s=400;break;case\"rad\":s=2*Math.PI;break;case\"turn\":s=1}return t=100*i/s,t%=100,this[(i<0?\"set\":\"remove\")+\"Attribute\"](\"data-negative\",\"\"),this.querySelector(\"circle\").style.strokeDasharray=Math.abs(t)+\",500\",!0}),\"*\",(function(){this._elt.innerHTML='<svg viewBox=\"0 0 64 64\"><circle r=\"16\" cy=\"32\" cx=\"32\"></circle></svg>'}))},tokens:{angle:/(?:\\b|\\B-|(?=\\B\\.))(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:deg|g?rad|turn)\\b/i},languages:{css:!0,less:!0,markup:{lang:\"markup\",before:\"punctuation\",inside:\"inside\",root:Prism.languages.markup&&Prism.languages.markup.tag.inside[\"attr-value\"]},sass:[{lang:\"sass\",inside:\"inside\",root:Prism.languages.sass&&Prism.languages.sass[\"property-line\"]},{lang:\"sass\",before:\"operator\",inside:\"inside\",root:Prism.languages.sass&&Prism.languages.sass[\"variable-line\"]}],scss:!0,stylus:[{lang:\"stylus\",before:\"func\",inside:\"rest\",root:Prism.languages.stylus&&Prism.languages.stylus[\"property-declaration\"].inside},{lang:\"stylus\",before:\"func\",inside:\"rest\",root:Prism.languages.stylus&&Prism.languages.stylus[\"variable-declaration\"].inside}]}},color:{create:function(){new Prism.plugins.Previewer(\"color\",(function(e){return this.style.backgroundColor=\"\",this.style.backgroundColor=e,!!this.style.backgroundColor}))},tokens:{color:[Prism.languages.css.hexcode].concat(Prism.languages.css.color)},languages:{css:!1,less:!0,markup:{lang:\"markup\",before:\"punctuation\",inside:\"inside\",root:Prism.languages.markup&&Prism.languages.markup.tag.inside[\"attr-value\"]},sass:[{lang:\"sass\",before:\"punctuation\",inside:\"inside\",root:Prism.languages.sass&&Prism.languages.sass[\"variable-line\"]},{lang:\"sass\",inside:\"inside\",root:Prism.languages.sass&&Prism.languages.sass[\"property-line\"]}],scss:!1,stylus:[{lang:\"stylus\",before:\"hexcode\",inside:\"rest\",root:Prism.languages.stylus&&Prism.languages.stylus[\"property-declaration\"].inside},{lang:\"stylus\",before:\"hexcode\",inside:\"rest\",root:Prism.languages.stylus&&Prism.languages.stylus[\"variable-declaration\"].inside}]}},easing:{create:function(){new Prism.plugins.Previewer(\"easing\",(function(e){var s=(e={linear:\"0,0,1,1\",ease:\".25,.1,.25,1\",\"ease-in\":\".42,0,1,1\",\"ease-out\":\"0,0,.58,1\",\"ease-in-out\":\".42,0,.58,1\"}[e]||e).match(/-?(?:\\d+(?:\\.\\d+)?|\\.\\d+)/g);if(4===s.length){s=s.map((function(e,s){return 100*(s%2?1-e:e)})),this.querySelector(\"path\").setAttribute(\"d\",\"M0,100 C\"+s[0]+\",\"+s[1]+\", \"+s[2]+\",\"+s[3]+\", 100,0\");var t=this.querySelectorAll(\"line\");return t[0].setAttribute(\"x2\",s[0]),t[0].setAttribute(\"y2\",s[1]),t[1].setAttribute(\"x2\",s[2]),t[1].setAttribute(\"y2\",s[3]),!0}return!1}),\"*\",(function(){this._elt.innerHTML='<svg viewBox=\"-20 -20 140 140\" width=\"100\" height=\"100\"><defs><marker id=\"prism-previewer-easing-marker\" viewBox=\"0 0 4 4\" refX=\"2\" refY=\"2\" markerUnits=\"strokeWidth\"><circle cx=\"2\" cy=\"2\" r=\"1.5\" /></marker></defs><path d=\"M0,100 C20,50, 40,30, 100,0\" /><line x1=\"0\" y1=\"100\" x2=\"20\" y2=\"50\" marker-start=\"url(#prism-previewer-easing-marker)\" marker-end=\"url(#prism-previewer-easing-marker)\" /><line x1=\"100\" y1=\"0\" x2=\"40\" y2=\"30\" marker-start=\"url(#prism-previewer-easing-marker)\" marker-end=\"url(#prism-previewer-easing-marker)\" /></svg>'}))},tokens:{easing:{pattern:/\\bcubic-bezier\\((?:-?(?:\\d+(?:\\.\\d+)?|\\.\\d+),\\s*){3}-?(?:\\d+(?:\\.\\d+)?|\\.\\d+)\\)\\B|\\b(?:ease(?:-in)?(?:-out)?|linear)(?=\\s|[;}]|$)/i,inside:{function:/[\\w-]+(?=\\()/,punctuation:/[(),]/}}},languages:{css:!0,less:!0,sass:[{lang:\"sass\",inside:\"inside\",before:\"punctuation\",root:Prism.languages.sass&&Prism.languages.sass[\"variable-line\"]},{lang:\"sass\",inside:\"inside\",root:Prism.languages.sass&&Prism.languages.sass[\"property-line\"]}],scss:!0,stylus:[{lang:\"stylus\",before:\"hexcode\",inside:\"rest\",root:Prism.languages.stylus&&Prism.languages.stylus[\"property-declaration\"].inside},{lang:\"stylus\",before:\"hexcode\",inside:\"rest\",root:Prism.languages.stylus&&Prism.languages.stylus[\"variable-declaration\"].inside}]}},time:{create:function(){new Prism.plugins.Previewer(\"time\",(function(e){var s=parseFloat(e),t=e.match(/[a-z]+$/i);return!(!s||!t||(t=t[0],this.querySelector(\"circle\").style.animationDuration=2*s+t,0))}),\"*\",(function(){this._elt.innerHTML='<svg viewBox=\"0 0 64 64\"><circle r=\"16\" cy=\"32\" cx=\"32\"></circle></svg>'}))},tokens:{time:/(?:\\b|\\B-|(?=\\B\\.))(?:\\d+(?:\\.\\d+)?|\\.\\d+)m?s\\b/i},languages:{css:!0,less:!0,markup:{lang:\"markup\",before:\"punctuation\",inside:\"inside\",root:Prism.languages.markup&&Prism.languages.markup.tag.inside[\"attr-value\"]},sass:[{lang:\"sass\",inside:\"inside\",root:Prism.languages.sass&&Prism.languages.sass[\"property-line\"]},{lang:\"sass\",before:\"operator\",inside:\"inside\",root:Prism.languages.sass&&Prism.languages.sass[\"variable-line\"]}],scss:!0,stylus:[{lang:\"stylus\",before:\"hexcode\",inside:\"rest\",root:Prism.languages.stylus&&Prism.languages.stylus[\"property-declaration\"].inside},{lang:\"stylus\",before:\"hexcode\",inside:\"rest\",root:Prism.languages.stylus&&Prism.languages.stylus[\"variable-declaration\"].inside}]}}},i=\"token\",a=\"active\",n=\"flipped\",r=function(e,s,t,i){this._elt=null,this._type=e,this._token=null,this.updater=s,this._mouseout=this.mouseout.bind(this),this.initializer=i;var a=this;t||(t=[\"*\"]),Array.isArray(t)||(t=[t]),t.forEach((function(e){\"string\"!=typeof e&&(e=e.lang),r.byLanguages[e]||(r.byLanguages[e]=[]),r.byLanguages[e].indexOf(a)<0&&r.byLanguages[e].push(a)})),r.byType[e]=this};for(var o in r.prototype.init=function(){this._elt||(this._elt=document.createElement(\"div\"),this._elt.className=\"prism-previewer prism-previewer-\"+this._type,document.body.appendChild(this._elt),this.initializer&&this.initializer())},r.prototype.isDisabled=function(e){do{if(e.hasAttribute&&e.hasAttribute(\"data-previewers\"))return-1===(e.getAttribute(\"data-previewers\")||\"\").split(/\\s+/).indexOf(this._type)}while(e=e.parentNode);return!1},r.prototype.check=function(e){if(!e.classList.contains(i)||!this.isDisabled(e)){do{if(e.classList&&e.classList.contains(i)&&e.classList.contains(this._type))break}while(e=e.parentNode);e&&e!==this._token&&(this._token=e,this.show())}},r.prototype.mouseout=function(){this._token.removeEventListener(\"mouseout\",this._mouseout,!1),this._token=null,this.hide()},r.prototype.show=function(){var e,s,t,i;if(this._elt||this.init(),this._token)if(this.updater.call(this._elt,this._token.textContent)){this._token.addEventListener(\"mouseout\",this._mouseout,!1);var r=(s=(e=this._token.getBoundingClientRect()).left,t=e.top,s-=(i=document.documentElement.getBoundingClientRect()).left,{top:t-=i.top,right:innerWidth-s-e.width,bottom:innerHeight-t-e.height,left:s,width:e.width,height:e.height});this._elt.classList.add(a),r.top-this._elt.offsetHeight>0?(this._elt.classList.remove(n),this._elt.style.top=r.top+\"px\",this._elt.style.bottom=\"\"):(this._elt.classList.add(n),this._elt.style.bottom=r.bottom+\"px\",this._elt.style.top=\"\"),this._elt.style.left=r.left+Math.min(200,r.width/2)+\"px\"}else this.hide()},r.prototype.hide=function(){this._elt.classList.remove(a)},r.byLanguages={},r.byType={},r.initEvents=function(e,s){var t=[];r.byLanguages[s]&&(t=t.concat(r.byLanguages[s])),r.byLanguages[\"*\"]&&(t=t.concat(r.byLanguages[\"*\"])),e.addEventListener(\"mouseover\",(function(e){var s=e.target;t.forEach((function(e){e.check(s)}))}),!1)},Prism.plugins.Previewer=r,Prism.hooks.add(\"before-highlight\",(function(e){for(var s in t){var i=t[s].languages;if(e.language&&i[e.language]&&!i[e.language].initialized){var a=i[e.language];Array.isArray(a)||(a=[a]),a.forEach((function(a){var n,r,o,l;!0===a?(n=\"important\",r=e.language,a=e.language):(n=a.before||\"important\",r=a.inside||a.lang,o=a.root||Prism.languages,l=a.skip,a=e.language),!l&&Prism.languages[a]&&(Prism.languages.insertBefore(r,n,t[s].tokens,o),e.grammar=Prism.languages[a],i[e.language]={initialized:!0})}))}}})),Prism.hooks.add(\"after-highlight\",(function(e){(r.byLanguages[\"*\"]||r.byLanguages[e.language])&&r.initEvents(e.element,e.language)})),t)t[o].create()}}();/components/prism-nginx.js\u0004K(function (Prism) {\n\n\tvar variable = /\\$(?:\\w[a-z\\d]*(?:_[^\\x00-\\x1F\\s\"'\\\\()$]*)?|\\{[^}\\s\"'\\\\]+\\})/i;\n\n\tPrism.languages.nginx = {\n\t\t'comment': {\n\t\t\tpattern: /(^|[\\s{};])#.*/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true\n\t\t},\n\t\t'directive': {\n\t\t\tpattern: /(^|\\s)\\w(?:[^;{}\"'\\\\\\s]|\\\\.|\"(?:[^\"\\\\]|\\\\.)*\"|'(?:[^'\\\\]|\\\\.)*'|\\s+(?:#.*(?!.)|(?![#\\s])))*?(?=\\s*[;{])/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'string': {\n\t\t\t\t\tpattern: /((?:^|[^\\\\])(?:\\\\\\\\)*)(?:\"(?:[^\"\\\\]|\\\\.)*\"|'(?:[^'\\\\]|\\\\.)*')/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tgreedy: true,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'escape': {\n\t\t\t\t\t\t\tpattern: /\\\\[\"'\\\\nrt]/,\n\t\t\t\t\t\t\talias: 'entity'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'variable': variable\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t'comment': {\n\t\t\t\t\tpattern: /(\\s)#.*/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tgreedy: true\n\t\t\t\t},\n\t\t\t\t'keyword': {\n\t\t\t\t\tpattern: /^\\S+/,\n\t\t\t\t\tgreedy: true\n\t\t\t\t},\n\n\t\t\t\t// other patterns\n\n\t\t\t\t'boolean': {\n\t\t\t\t\tpattern: /(\\s)(?:off|on)(?!\\S)/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t},\n\t\t\t\t'number': {\n\t\t\t\t\tpattern: /(\\s)\\d+[a-z]*(?!\\S)/i,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t},\n\t\t\t\t'variable': variable\n\t\t\t}\n\t\t},\n\t\t'punctuation': /[{};]/\n\t};\n\n}(Prism));\n/themes/prism-tomorrow.min.css\u0005!code[class*=language-],pre[class*=language-]{color:#ccc;background:0 0;font-family:Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#2d2d2d}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.block-comment,.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#999}.token.punctuation{color:#ccc}.token.attr-name,.token.deleted,.token.namespace,.token.tag{color:#e2777a}.token.function-name{color:#6196cc}.token.boolean,.token.function,.token.number{color:#f08d49}.token.class-name,.token.constant,.token.property,.token.symbol{color:#f8c555}.token.atrule,.token.builtin,.token.important,.token.keyword,.token.selector{color:#cc99cd}.token.attr-value,.token.char,.token.regex,.token.string,.token.variable{color:#7ec699}.token.entity,.token.operator,.token.url{color:#67cdcc}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.token.inserted{color:green}/components/prism-perl.js\u000f(function (Prism) {\n\n\tvar brackets = /(?:\\((?:[^()\\\\]|\\\\[\\s\\S])*\\)|\\{(?:[^{}\\\\]|\\\\[\\s\\S])*\\}|\\[(?:[^[\\]\\\\]|\\\\[\\s\\S])*\\]|<(?:[^<>\\\\]|\\\\[\\s\\S])*>)/.source;\n\n\tPrism.languages.perl = {\n\t\t'comment': [\n\t\t\t{\n\t\t\t\t// POD\n\t\t\t\tpattern: /(^\\s*)=\\w[\\s\\S]*?=cut.*/m,\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /(^|[^\\\\$])#.*/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true\n\t\t\t}\n\t\t],\n\t\t// TODO Could be nice to handle Heredoc too.\n\t\t'string': [\n\t\t\t{\n\t\t\t\tpattern: RegExp(\n\t\t\t\t\t/\\b(?:q|qq|qw|qx)(?![a-zA-Z0-9])\\s*/.source +\n\t\t\t\t\t'(?:' +\n\t\t\t\t\t[\n\t\t\t\t\t\t// q/.../\n\t\t\t\t\t\t/([^a-zA-Z0-9\\s{(\\[<])(?:(?!\\1)[^\\\\]|\\\\[\\s\\S])*\\1/.source,\n\n\t\t\t\t\t\t// q a...a\n\t\t\t\t\t\t// eslint-disable-next-line regexp/strict\n\t\t\t\t\t\t/([a-zA-Z0-9])(?:(?!\\2)[^\\\\]|\\\\[\\s\\S])*\\2/.source,\n\n\t\t\t\t\t\t// q(...)\n\t\t\t\t\t\t// q{...}\n\t\t\t\t\t\t// q[...]\n\t\t\t\t\t\t// q<...>\n\t\t\t\t\t\tbrackets,\n\t\t\t\t\t].join('|') +\n\t\t\t\t\t')'\n\t\t\t\t),\n\t\t\t\tgreedy: true\n\t\t\t},\n\n\t\t\t// \"...\", `...`\n\t\t\t{\n\t\t\t\tpattern: /(\"|`)(?:(?!\\1)[^\\\\]|\\\\[\\s\\S])*\\1/,\n\t\t\t\tgreedy: true\n\t\t\t},\n\n\t\t\t// '...'\n\t\t\t// FIXME Multi-line single-quoted strings are not supported as they would break variables containing '\n\t\t\t{\n\t\t\t\tpattern: /'(?:[^'\\\\\\r\\n]|\\\\.)*'/,\n\t\t\t\tgreedy: true\n\t\t\t}\n\t\t],\n\t\t'regex': [\n\t\t\t{\n\t\t\t\tpattern: RegExp(\n\t\t\t\t\t/\\b(?:m|qr)(?![a-zA-Z0-9])\\s*/.source +\n\t\t\t\t\t'(?:' +\n\t\t\t\t\t[\n\t\t\t\t\t\t// m/.../\n\t\t\t\t\t\t/([^a-zA-Z0-9\\s{(\\[<])(?:(?!\\1)[^\\\\]|\\\\[\\s\\S])*\\1/.source,\n\n\t\t\t\t\t\t// m a...a\n\t\t\t\t\t\t// eslint-disable-next-line regexp/strict\n\t\t\t\t\t\t/([a-zA-Z0-9])(?:(?!\\2)[^\\\\]|\\\\[\\s\\S])*\\2/.source,\n\n\t\t\t\t\t\t// m(...)\n\t\t\t\t\t\t// m{...}\n\t\t\t\t\t\t// m[...]\n\t\t\t\t\t\t// m<...>\n\t\t\t\t\t\tbrackets,\n\t\t\t\t\t].join('|') +\n\t\t\t\t\t')' +\n\t\t\t\t\t/[msixpodualngc]*/.source\n\t\t\t\t),\n\t\t\t\tgreedy: true\n\t\t\t},\n\n\t\t\t// The lookbehinds prevent -s from breaking\n\t\t\t{\n\t\t\t\tpattern: RegExp(\n\t\t\t\t\t/(^|[^-])\\b(?:s|tr|y)(?![a-zA-Z0-9])\\s*/.source +\n\t\t\t\t\t'(?:' +\n\t\t\t\t\t[\n\t\t\t\t\t\t// s/.../.../\n\t\t\t\t\t\t// eslint-disable-next-line regexp/strict\n\t\t\t\t\t\t/([^a-zA-Z0-9\\s{(\\[<])(?:(?!\\2)[^\\\\]|\\\\[\\s\\S])*\\2(?:(?!\\2)[^\\\\]|\\\\[\\s\\S])*\\2/.source,\n\n\t\t\t\t\t\t// s a...a...a\n\t\t\t\t\t\t// eslint-disable-next-line regexp/strict\n\t\t\t\t\t\t/([a-zA-Z0-9])(?:(?!\\3)[^\\\\]|\\\\[\\s\\S])*\\3(?:(?!\\3)[^\\\\]|\\\\[\\s\\S])*\\3/.source,\n\n\t\t\t\t\t\t// s(...)(...)\n\t\t\t\t\t\t// s{...}{...}\n\t\t\t\t\t\t// s[...][...]\n\t\t\t\t\t\t// s<...><...>\n\t\t\t\t\t\t// s(...)[...]\n\t\t\t\t\t\tbrackets + /\\s*/.source + brackets,\n\t\t\t\t\t].join('|') +\n\t\t\t\t\t')' +\n\t\t\t\t\t/[msixpodualngcer]*/.source\n\t\t\t\t),\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true\n\t\t\t},\n\n\t\t\t// /.../\n\t\t\t// The look-ahead tries to prevent two divisions on\n\t\t\t// the same line from being highlighted as regex.\n\t\t\t// This does not support multi-line regex.\n\t\t\t{\n\t\t\t\tpattern: /\\/(?:[^\\/\\\\\\r\\n]|\\\\.)*\\/[msixpodualngc]*(?=\\s*(?:$|[\\r\\n,.;})&|\\-+*~<>!?^]|(?:and|cmp|eq|ge|gt|le|lt|ne|not|or|x|xor)\\b))/,\n\t\t\t\tgreedy: true\n\t\t\t}\n\t\t],\n\n\t\t// FIXME Not sure about the handling of ::, ', and #\n\t\t'variable': [\n\t\t\t// ${^POSTMATCH}\n\t\t\t/[&*$@%]\\{\\^[A-Z]+\\}/,\n\t\t\t// $^V\n\t\t\t/[&*$@%]\\^[A-Z_]/,\n\t\t\t// ${...}\n\t\t\t/[&*$@%]#?(?=\\{)/,\n\t\t\t// $foo\n\t\t\t/[&*$@%]#?(?:(?:::)*'?(?!\\d)[\\w$]+(?![\\w$]))+(?:::)*/,\n\t\t\t// $1\n\t\t\t/[&*$@%]\\d+/,\n\t\t\t// $_, @_, %!\n\t\t\t// The negative lookahead prevents from breaking the %= operator\n\t\t\t/(?!%=)[$@%][!\"#$%&'()*+,\\-.\\/:;<=>?@[\\\\\\]^_`{|}~]/\n\t\t],\n\t\t'filehandle': {\n\t\t\t// <>, <FOO>, _\n\t\t\tpattern: /<(?![<=])\\S*?>|\\b_\\b/,\n\t\t\talias: 'symbol'\n\t\t},\n\t\t'v-string': {\n\t\t\t// v1.2, 1.2.3\n\t\t\tpattern: /v\\d+(?:\\.\\d+)*|\\d+(?:\\.\\d+){2,}/,\n\t\t\talias: 'string'\n\t\t},\n\t\t'function': {\n\t\t\tpattern: /(\\bsub[ \\t]+)\\w+/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'keyword': /\\b(?:any|break|continue|default|delete|die|do|else|elsif|eval|for|foreach|given|goto|if|last|local|my|next|our|package|print|redo|require|return|say|state|sub|switch|undef|unless|until|use|when|while)\\b/,\n\t\t'number': /\\b(?:0x[\\dA-Fa-f](?:_?[\\dA-Fa-f])*|0b[01](?:_?[01])*|(?:(?:\\d(?:_?\\d)*)?\\.)?\\d(?:_?\\d)*(?:[Ee][+-]?\\d+)?)\\b/,\n\t\t'operator': /-[rwxoRWXOezsfdlpSbctugkTBMAC]\\b|\\+[+=]?|-[-=>]?|\\*\\*?=?|\\/\\/?=?|=[=~>]?|~[~=]?|\\|\\|?=?|&&?=?|<(?:=>?|<=?)?|>>?=?|![~=]?|[%^]=?|\\.(?:=|\\.\\.?)?|[\\\\?]|\\bx(?:=|\\b)|\\b(?:and|cmp|eq|ge|gt|le|lt|ne|not|or|xor)\\b/,\n\t\t'punctuation': /[{}[\\];(),:]/\n\t};\n\n}(Prism));\n/components/prism-typescript.js\u0007(function (Prism) {\n\n\tPrism.languages.typescript = Prism.languages.extend('javascript', {\n\t\t'class-name': {\n\t\t\tpattern: /(\\b(?:class|extends|implements|instanceof|interface|new|type)\\s+)(?!keyof\\b)(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?:\\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: null // see below\n\t\t},\n\t\t'builtin': /\\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\\b/,\n\t});\n\n\t// The keywords TypeScript adds to JavaScript\n\tPrism.languages.typescript.keyword.push(\n\t\t/\\b(?:abstract|declare|is|keyof|readonly|require)\\b/,\n\t\t// keywords that have to be followed by an identifier\n\t\t/\\b(?:asserts|infer|interface|module|namespace|type)\\b(?=\\s*(?:[{_$a-zA-Z\\xA0-\\uFFFF]|$))/,\n\t\t// This is for `import type *, {}`\n\t\t/\\btype\\b(?=\\s*(?:[\\{*]|$))/\n\t);\n\n\t// doesn't work with TS because TS is too complex\n\tdelete Prism.languages.typescript['parameter'];\n\tdelete Prism.languages.typescript['literal-property'];\n\n\t// a version of typescript specifically for highlighting types\n\tvar typeInside = Prism.languages.extend('typescript', {});\n\tdelete typeInside['class-name'];\n\n\tPrism.languages.typescript['class-name'].inside = typeInside;\n\n\tPrism.languages.insertBefore('typescript', 'function', {\n\t\t'decorator': {\n\t\t\tpattern: /@[$\\w\\xA0-\\uFFFF]+/,\n\t\t\tinside: {\n\t\t\t\t'at': {\n\t\t\t\t\tpattern: /^@/,\n\t\t\t\t\talias: 'operator'\n\t\t\t\t},\n\t\t\t\t'function': /^[\\s\\S]+/\n\t\t\t}\n\t\t},\n\t\t'generic-function': {\n\t\t\t// e.g. foo<T extends \"bar\" | \"baz\">( ...\n\t\t\tpattern: /#?(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*\\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\\s*\\()/,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'function': /^#?(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*/,\n\t\t\t\t'generic': {\n\t\t\t\t\tpattern: /<[\\s\\S]+/, // everything after the first <\n\t\t\t\t\talias: 'class-name',\n\t\t\t\t\tinside: typeInside\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\tPrism.languages.ts = Prism.languages.typescript;\n\n}(Prism));\n/components/prism-cobol.min.js\u0013Prism.languages.cobol={comment:{pattern:/\\*>.*|(^[ \\t]*)\\*.*/m,lookbehind:!0,greedy:!0},string:{pattern:/[xzgn]?(?:\"(?:[^\\r\\n\"]|\"\")*\"(?!\")|'(?:[^\\r\\n']|'')*'(?!'))/i,greedy:!0},level:{pattern:/(^[ \\t]*)\\d+\\b/m,lookbehind:!0,greedy:!0,alias:\"number\"},\"class-name\":{pattern:/(\\bpic(?:ture)?\\s+)(?:(?:[-\\w$/,:*+<>]|\\.(?!\\s|$))(?:\\(\\d+\\))?)+/i,lookbehind:!0,inside:{number:{pattern:/(\\()\\d+/,lookbehind:!0},punctuation:/[()]/}},keyword:{pattern:/(^|[^\\w-])(?:ABORT|ACCEPT|ACCESS|ADD|ADDRESS|ADVANCING|AFTER|ALIGNED|ALL|ALPHABET|ALPHABETIC|ALPHABETIC-LOWER|ALPHABETIC-UPPER|ALPHANUMERIC|ALPHANUMERIC-EDITED|ALSO|ALTER|ALTERNATE|ANY|ARE|AREA|AREAS|AS|ASCENDING|ASCII|ASSIGN|ASSOCIATED-DATA|ASSOCIATED-DATA-LENGTH|AT|ATTRIBUTE|AUTHOR|AUTO|AUTO-SKIP|BACKGROUND-COLOR|BACKGROUND-COLOUR|BASIS|BEEP|BEFORE|BEGINNING|BELL|BINARY|BIT|BLANK|BLINK|BLOCK|BOTTOM|BOUNDS|BY|BYFUNCTION|BYTITLE|CALL|CANCEL|CAPABLE|CCSVERSION|CD|CF|CH|CHAINING|CHANGED|CHANNEL|CHARACTER|CHARACTERS|CLASS|CLASS-ID|CLOCK-UNITS|CLOSE|CLOSE-DISPOSITION|COBOL|CODE|CODE-SET|COL|COLLATING|COLUMN|COM-REG|COMMA|COMMITMENT|COMMON|COMMUNICATION|COMP|COMP-1|COMP-2|COMP-3|COMP-4|COMP-5|COMPUTATIONAL|COMPUTATIONAL-1|COMPUTATIONAL-2|COMPUTATIONAL-3|COMPUTATIONAL-4|COMPUTATIONAL-5|COMPUTE|CONFIGURATION|CONTAINS|CONTENT|CONTINUE|CONTROL|CONTROL-POINT|CONTROLS|CONVENTION|CONVERTING|COPY|CORR|CORRESPONDING|COUNT|CRUNCH|CURRENCY|CURSOR|DATA|DATA-BASE|DATE|DATE-COMPILED|DATE-WRITTEN|DAY|DAY-OF-WEEK|DBCS|DE|DEBUG-CONTENTS|DEBUG-ITEM|DEBUG-LINE|DEBUG-NAME|DEBUG-SUB-1|DEBUG-SUB-2|DEBUG-SUB-3|DEBUGGING|DECIMAL-POINT|DECLARATIVES|DEFAULT|DEFAULT-DISPLAY|DEFINITION|DELETE|DELIMITED|DELIMITER|DEPENDING|DESCENDING|DESTINATION|DETAIL|DFHRESP|DFHVALUE|DISABLE|DISK|DISPLAY|DISPLAY-1|DIVIDE|DIVISION|DONTCARE|DOUBLE|DOWN|DUPLICATES|DYNAMIC|EBCDIC|EGCS|EGI|ELSE|EMI|EMPTY-CHECK|ENABLE|END|END-ACCEPT|END-ADD|END-CALL|END-COMPUTE|END-DELETE|END-DIVIDE|END-EVALUATE|END-IF|END-MULTIPLY|END-OF-PAGE|END-PERFORM|END-READ|END-RECEIVE|END-RETURN|END-REWRITE|END-SEARCH|END-START|END-STRING|END-SUBTRACT|END-UNSTRING|END-WRITE|ENDING|ENTER|ENTRY|ENTRY-PROCEDURE|ENVIRONMENT|EOL|EOP|EOS|ERASE|ERROR|ESCAPE|ESI|EVALUATE|EVENT|EVERY|EXCEPTION|EXCLUSIVE|EXHIBIT|EXIT|EXPORT|EXTEND|EXTENDED|EXTERNAL|FD|FILE|FILE-CONTROL|FILLER|FINAL|FIRST|FOOTING|FOR|FOREGROUND-COLOR|FOREGROUND-COLOUR|FROM|FULL|FUNCTION|FUNCTION-POINTER|FUNCTIONNAME|GENERATE|GIVING|GLOBAL|GO|GOBACK|GRID|GROUP|HEADING|HIGH-VALUE|HIGH-VALUES|HIGHLIGHT|I-O|I-O-CONTROL|ID|IDENTIFICATION|IF|IMPLICIT|IMPORT|IN|INDEX|INDEXED|INDICATE|INITIAL|INITIALIZE|INITIATE|INPUT|INPUT-OUTPUT|INSPECT|INSTALLATION|INTEGER|INTO|INVALID|INVOKE|IS|JUST|JUSTIFIED|KANJI|KEPT|KEY|KEYBOARD|LABEL|LANGUAGE|LAST|LB|LD|LEADING|LEFT|LEFTLINE|LENGTH|LENGTH-CHECK|LIBACCESS|LIBPARAMETER|LIBRARY|LIMIT|LIMITS|LINAGE|LINAGE-COUNTER|LINE|LINE-COUNTER|LINES|LINKAGE|LIST|LOCAL|LOCAL-STORAGE|LOCK|LONG-DATE|LONG-TIME|LOW-VALUE|LOW-VALUES|LOWER|LOWLIGHT|MEMORY|MERGE|MESSAGE|MMDDYYYY|MODE|MODULES|MORE-LABELS|MOVE|MULTIPLE|MULTIPLY|NAMED|NATIONAL|NATIONAL-EDITED|NATIVE|NEGATIVE|NETWORK|NEXT|NO|NO-ECHO|NULL|NULLS|NUMBER|NUMERIC|NUMERIC-DATE|NUMERIC-EDITED|NUMERIC-TIME|OBJECT-COMPUTER|OCCURS|ODT|OF|OFF|OMITTED|ON|OPEN|OPTIONAL|ORDER|ORDERLY|ORGANIZATION|OTHER|OUTPUT|OVERFLOW|OVERLINE|OWN|PACKED-DECIMAL|PADDING|PAGE|PAGE-COUNTER|PASSWORD|PERFORM|PF|PH|PIC|PICTURE|PLUS|POINTER|PORT|POSITION|POSITIVE|PRINTER|PRINTING|PRIVATE|PROCEDURE|PROCEDURE-POINTER|PROCEDURES|PROCEED|PROCESS|PROGRAM|PROGRAM-ID|PROGRAM-LIBRARY|PROMPT|PURGE|QUEUE|QUOTE|QUOTES|RANDOM|RD|READ|READER|REAL|RECEIVE|RECEIVED|RECORD|RECORDING|RECORDS|RECURSIVE|REDEFINES|REEL|REF|REFERENCE|REFERENCES|RELATIVE|RELEASE|REMAINDER|REMARKS|REMOTE|REMOVAL|REMOVE|RENAMES|REPLACE|REPLACING|REPORT|REPORTING|REPORTS|REQUIRED|RERUN|RESERVE|RESET|RETURN|RETURN-CODE|RETURNING|REVERSE-VIDEO|REVERSED|REWIND|REWRITE|RF|RH|RIGHT|ROUNDED|RUN|SAME|SAVE|SCREEN|SD|SEARCH|SECTION|SECURE|SECURITY|SEGMENT|SEGMENT-LIMIT|SELECT|SEND|SENTENCE|SEPARATE|SEQUENCE|SEQUENTIAL|SET|SHARED|SHAREDBYALL|SHAREDBYRUNUNIT|SHARING|SHIFT-IN|SHIFT-OUT|SHORT-DATE|SIGN|SIZE|SORT|SORT-CONTROL|SORT-CORE-SIZE|SORT-FILE-SIZE|SORT-MERGE|SORT-MESSAGE|SORT-MODE-SIZE|SORT-RETURN|SOURCE|SOURCE-COMPUTER|SPACE|SPACES|SPECIAL-NAMES|STANDARD|STANDARD-1|STANDARD-2|START|STATUS|STOP|STRING|SUB-QUEUE-1|SUB-QUEUE-2|SUB-QUEUE-3|SUBTRACT|SUM|SUPPRESS|SYMBOL|SYMBOLIC|SYNC|SYNCHRONIZED|TABLE|TALLY|TALLYING|TAPE|TASK|TERMINAL|TERMINATE|TEST|TEXT|THEN|THREAD|THREAD-LOCAL|THROUGH|THRU|TIME|TIMER|TIMES|TITLE|TO|TODAYS-DATE|TODAYS-NAME|TOP|TRAILING|TRUNCATED|TYPE|TYPEDEF|UNDERLINE|UNIT|UNSTRING|UNTIL|UP|UPON|USAGE|USE|USING|VALUE|VALUES|VARYING|VIRTUAL|WAIT|WHEN|WHEN-COMPILED|WITH|WORDS|WORKING-STORAGE|WRITE|YEAR|YYYYDDD|YYYYMMDD|ZERO-FILL|ZEROES|ZEROS)(?![\\w-])/i,lookbehind:!0},boolean:{pattern:/(^|[^\\w-])(?:false|true)(?![\\w-])/i,lookbehind:!0},number:{pattern:/(^|[^\\w-])(?:[+-]?(?:(?:\\d+(?:[.,]\\d+)?|[.,]\\d+)(?:e[+-]?\\d+)?|zero))(?![\\w-])/i,lookbehind:!0},operator:[/<>|[<>]=?|[=+*/&]/,{pattern:/(^|[^\\w-])(?:-|and|equal|greater|less|not|or|than)(?![\\w-])/i,lookbehind:!0}],punctuation:/[.:,()]/};/components/prism-uri.js\u0007C// https://tools.ietf.org/html/rfc3986#appendix-A\n\nPrism.languages.uri = {\n\t'scheme': {\n\t\tpattern: /^[a-z][a-z0-9+.-]*:/im,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'scheme-delimiter': /:$/\n\t\t}\n\t},\n\t'fragment': {\n\t\tpattern: /#[\\w\\-.~!$&'()*+,;=%:@/?]*/,\n\t\tinside: {\n\t\t\t'fragment-delimiter': /^#/\n\t\t}\n\t},\n\t'query': {\n\t\tpattern: /\\?[\\w\\-.~!$&'()*+,;=%:@/?]*/,\n\t\tinside: {\n\t\t\t'query-delimiter': {\n\t\t\t\tpattern: /^\\?/,\n\t\t\t\tgreedy: true\n\t\t\t},\n\t\t\t'pair-delimiter': /[&;]/,\n\t\t\t'pair': {\n\t\t\t\tpattern: /^[^=][\\s\\S]*/,\n\t\t\t\tinside: {\n\t\t\t\t\t'key': /^[^=]+/,\n\t\t\t\t\t'value': {\n\t\t\t\t\t\tpattern: /(^=)[\\s\\S]+/,\n\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\t'authority': {\n\t\tpattern: RegExp(\n\t\t\t/^\\/\\//.source\n\t\t\t// [ userinfo \"@\" ]\n\t\t\t+ /(?:[\\w\\-.~!$&'()*+,;=%:]*@)?/.source\n\t\t\t// host\n\t\t\t+ (\n\t\t\t\t'(?:'\n\t\t\t\t// IP-literal\n\t\t\t\t+ /\\[(?:[0-9a-fA-F:.]{2,48}|v[0-9a-fA-F]+\\.[\\w\\-.~!$&'()*+,;=]+)\\]/.source\n\t\t\t\t+ '|'\n\t\t\t\t// IPv4address or registered name\n\t\t\t\t+ /[\\w\\-.~!$&'()*+,;=%]*/.source\n\t\t\t\t+ ')'\n\t\t\t)\n\t\t\t// [ \":\" port ]\n\t\t\t+ /(?::\\d*)?/.source,\n\t\t\t'm'\n\t\t),\n\t\tinside: {\n\t\t\t'authority-delimiter': /^\\/\\//,\n\t\t\t'user-info-segment': {\n\t\t\t\tpattern: /^[\\w\\-.~!$&'()*+,;=%:]*@/,\n\t\t\t\tinside: {\n\t\t\t\t\t'user-info-delimiter': /@$/,\n\t\t\t\t\t'user-info': /^[\\w\\-.~!$&'()*+,;=%:]+/\n\t\t\t\t}\n\t\t\t},\n\t\t\t'port-segment': {\n\t\t\t\tpattern: /:\\d*$/,\n\t\t\t\tinside: {\n\t\t\t\t\t'port-delimiter': /^:/,\n\t\t\t\t\t'port': /^\\d+/\n\t\t\t\t}\n\t\t\t},\n\t\t\t'host': {\n\t\t\t\tpattern: /[\\s\\S]+/,\n\t\t\t\tinside: {\n\t\t\t\t\t'ip-literal': {\n\t\t\t\t\t\tpattern: /^\\[[\\s\\S]+\\]$/,\n\t\t\t\t\t\tinside: {\n\t\t\t\t\t\t\t'ip-literal-delimiter': /^\\[|\\]$/,\n\t\t\t\t\t\t\t'ipv-future': /^v[\\s\\S]+/,\n\t\t\t\t\t\t\t'ipv6-address': /^[\\s\\S]+/\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t'ipv4-address': /^(?:(?:[03-9]\\d?|[12]\\d{0,2})\\.){3}(?:[03-9]\\d?|[12]\\d{0,2})$/\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\t'path': {\n\t\tpattern: /^[\\w\\-.~!$&'()*+,;=%:@/]+/m,\n\t\tinside: {\n\t\t\t'path-separator': /\\//\n\t\t}\n\t}\n};\n\nPrism.languages.url = Prism.languages.uri;\n/components/prism-markdown.js)(function (Prism) {\n\n\t// Allow only one line break\n\tvar inner = /(?:\\\\.|[^\\\\\\n\\r]|(?:\\n|\\r\\n?)(?![\\r\\n]))/.source;\n\n\t/**\n\t * This function is intended for the creation of the bold or italic pattern.\n\t *\n\t * This also adds a lookbehind group to the given pattern to ensure that the pattern is not backslash-escaped.\n\t *\n\t * _Note:_ Keep in mind that this adds a capturing group.\n\t *\n\t * @param {string} pattern\n\t * @returns {RegExp}\n\t */\n\tfunction createInline(pattern) {\n\t\tpattern = pattern.replace(/<inner>/g, function () { return inner; });\n\t\treturn RegExp(/((?:^|[^\\\\])(?:\\\\{2})*)/.source + '(?:' + pattern + ')');\n\t}\n\n\n\tvar tableCell = /(?:\\\\.|``(?:[^`\\r\\n]|`(?!`))+``|`[^`\\r\\n]+`|[^\\\\|\\r\\n`])+/.source;\n\tvar tableRow = /\\|?__(?:\\|__)+\\|?(?:(?:\\n|\\r\\n?)|(?![\\s\\S]))/.source.replace(/__/g, function () { return tableCell; });\n\tvar tableLine = /\\|?[ \\t]*:?-{3,}:?[ \\t]*(?:\\|[ \\t]*:?-{3,}:?[ \\t]*)+\\|?(?:\\n|\\r\\n?)/.source;\n\n\n\tPrism.languages.markdown = Prism.languages.extend('markup', {});\n\tPrism.languages.insertBefore('markdown', 'prolog', {\n\t\t'front-matter-block': {\n\t\t\tpattern: /(^(?:\\s*[\\r\\n])?)---(?!.)[\\s\\S]*?[\\r\\n]---(?!.)/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'punctuation': /^---|---$/,\n\t\t\t\t'front-matter': {\n\t\t\t\t\tpattern: /\\S+(?:\\s+\\S+)*/,\n\t\t\t\t\talias: ['yaml', 'language-yaml'],\n\t\t\t\t\tinside: Prism.languages.yaml\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t'blockquote': {\n\t\t\t// > ...\n\t\t\tpattern: /^>(?:[\\t ]*>)*/m,\n\t\t\talias: 'punctuation'\n\t\t},\n\t\t'table': {\n\t\t\tpattern: RegExp('^' + tableRow + tableLine + '(?:' + tableRow + ')*', 'm'),\n\t\t\tinside: {\n\t\t\t\t'table-data-rows': {\n\t\t\t\t\tpattern: RegExp('^(' + tableRow + tableLine + ')(?:' + tableRow + ')*$'),\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'table-data': {\n\t\t\t\t\t\t\tpattern: RegExp(tableCell),\n\t\t\t\t\t\t\tinside: Prism.languages.markdown\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'punctuation': /\\|/\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t'table-line': {\n\t\t\t\t\tpattern: RegExp('^(' + tableRow + ')' + tableLine + '$'),\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'punctuation': /\\||:?-{3,}:?/\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t'table-header-row': {\n\t\t\t\t\tpattern: RegExp('^' + tableRow + '$'),\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'table-header': {\n\t\t\t\t\t\t\tpattern: RegExp(tableCell),\n\t\t\t\t\t\t\talias: 'important',\n\t\t\t\t\t\t\tinside: Prism.languages.markdown\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'punctuation': /\\|/\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t'code': [\n\t\t\t{\n\t\t\t\t// Prefixed by 4 spaces or 1 tab and preceded by an empty line\n\t\t\t\tpattern: /((?:^|\\n)[ \\t]*\\n|(?:^|\\r\\n?)[ \\t]*\\r\\n?)(?: {4}|\\t).+(?:(?:\\n|\\r\\n?)(?: {4}|\\t).+)*/,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'keyword'\n\t\t\t},\n\t\t\t{\n\t\t\t\t// ```optional language\n\t\t\t\t// code block\n\t\t\t\t// ```\n\t\t\t\tpattern: /^```[\\s\\S]*?^```$/m,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'code-block': {\n\t\t\t\t\t\tpattern: /^(```.*(?:\\n|\\r\\n?))[\\s\\S]+?(?=(?:\\n|\\r\\n?)^```$)/m,\n\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t},\n\t\t\t\t\t'code-language': {\n\t\t\t\t\t\tpattern: /^(```).+/,\n\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t},\n\t\t\t\t\t'punctuation': /```/\n\t\t\t\t}\n\t\t\t}\n\t\t],\n\t\t'title': [\n\t\t\t{\n\t\t\t\t// title 1\n\t\t\t\t// =======\n\n\t\t\t\t// title 2\n\t\t\t\t// -------\n\t\t\t\tpattern: /\\S.*(?:\\n|\\r\\n?)(?:==+|--+)(?=[ \\t]*$)/m,\n\t\t\t\talias: 'important',\n\t\t\t\tinside: {\n\t\t\t\t\tpunctuation: /==+$|--+$/\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\t// # title 1\n\t\t\t\t// ###### title 6\n\t\t\t\tpattern: /(^\\s*)#.+/m,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'important',\n\t\t\t\tinside: {\n\t\t\t\t\tpunctuation: /^#+|#+$/\n\t\t\t\t}\n\t\t\t}\n\t\t],\n\t\t'hr': {\n\t\t\t// ***\n\t\t\t// ---\n\t\t\t// * * *\n\t\t\t// -----------\n\t\t\tpattern: /(^\\s*)([*-])(?:[\\t ]*\\2){2,}(?=\\s*$)/m,\n\t\t\tlookbehind: true,\n\t\t\talias: 'punctuation'\n\t\t},\n\t\t'list': {\n\t\t\t// * item\n\t\t\t// + item\n\t\t\t// - item\n\t\t\t// 1. item\n\t\t\tpattern: /(^\\s*)(?:[*+-]|\\d+\\.)(?=[\\t ].)/m,\n\t\t\tlookbehind: true,\n\t\t\talias: 'punctuation'\n\t\t},\n\t\t'url-reference': {\n\t\t\t// [id]: http://example.com \"Optional title\"\n\t\t\t// [id]: http://example.com 'Optional title'\n\t\t\t// [id]: http://example.com (Optional title)\n\t\t\t// [id]: <http://example.com> \"Optional title\"\n\t\t\tpattern: /!?\\[[^\\]]+\\]:[\\t ]+(?:\\S+|<(?:\\\\.|[^>\\\\])+>)(?:[\\t ]+(?:\"(?:\\\\.|[^\"\\\\])*\"|'(?:\\\\.|[^'\\\\])*'|\\((?:\\\\.|[^)\\\\])*\\)))?/,\n\t\t\tinside: {\n\t\t\t\t'variable': {\n\t\t\t\t\tpattern: /^(!?\\[)[^\\]]+/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t},\n\t\t\t\t'string': /(?:\"(?:\\\\.|[^\"\\\\])*\"|'(?:\\\\.|[^'\\\\])*'|\\((?:\\\\.|[^)\\\\])*\\))$/,\n\t\t\t\t'punctuation': /^[\\[\\]!:]|[<>]/\n\t\t\t},\n\t\t\talias: 'url'\n\t\t},\n\t\t'bold': {\n\t\t\t// **strong**\n\t\t\t// __strong__\n\n\t\t\t// allow one nested instance of italic text using the same delimiter\n\t\t\tpattern: createInline(/\\b__(?:(?!_)<inner>|_(?:(?!_)<inner>)+_)+__\\b|\\*\\*(?:(?!\\*)<inner>|\\*(?:(?!\\*)<inner>)+\\*)+\\*\\*/.source),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'content': {\n\t\t\t\t\tpattern: /(^..)[\\s\\S]+(?=..$)/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tinside: {} // see below\n\t\t\t\t},\n\t\t\t\t'punctuation': /\\*\\*|__/\n\t\t\t}\n\t\t},\n\t\t'italic': {\n\t\t\t// *em*\n\t\t\t// _em_\n\n\t\t\t// allow one nested instance of bold text using the same delimiter\n\t\t\tpattern: createInline(/\\b_(?:(?!_)<inner>|__(?:(?!_)<inner>)+__)+_\\b|\\*(?:(?!\\*)<inner>|\\*\\*(?:(?!\\*)<inner>)+\\*\\*)+\\*/.source),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'content': {\n\t\t\t\t\tpattern: /(^.)[\\s\\S]+(?=.$)/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tinside: {} // see below\n\t\t\t\t},\n\t\t\t\t'punctuation': /[*_]/\n\t\t\t}\n\t\t},\n\t\t'strike': {\n\t\t\t// ~~strike through~~\n\t\t\t// ~strike~\n\t\t\t// eslint-disable-next-line regexp/strict\n\t\t\tpattern: createInline(/(~~?)(?:(?!~)<inner>)+\\2/.source),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'content': {\n\t\t\t\t\tpattern: /(^~~?)[\\s\\S]+(?=\\1$)/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tinside: {} // see below\n\t\t\t\t},\n\t\t\t\t'punctuation': /~~?/\n\t\t\t}\n\t\t},\n\t\t'code-snippet': {\n\t\t\t// `code`\n\t\t\t// ``code``\n\t\t\tpattern: /(^|[^\\\\`])(?:``[^`\\r\\n]+(?:`[^`\\r\\n]+)*``(?!`)|`[^`\\r\\n]+`(?!`))/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\talias: ['code', 'keyword']\n\t\t},\n\t\t'url': {\n\t\t\t// [example](http://example.com \"Optional title\")\n\t\t\t// [example][id]\n\t\t\t// [example] [id]\n\t\t\tpattern: createInline(/!?\\[(?:(?!\\])<inner>)+\\](?:\\([^\\s)]+(?:[\\t ]+\"(?:\\\\.|[^\"\\\\])*\")?\\)|[ \\t]?\\[(?:(?!\\])<inner>)+\\])/.source),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'operator': /^!/,\n\t\t\t\t'content': {\n\t\t\t\t\tpattern: /(^\\[)[^\\]]+(?=\\])/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tinside: {} // see below\n\t\t\t\t},\n\t\t\t\t'variable': {\n\t\t\t\t\tpattern: /(^\\][ \\t]?\\[)[^\\]]+(?=\\]$)/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t},\n\t\t\t\t'url': {\n\t\t\t\t\tpattern: /(^\\]\\()[^\\s)]+/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t},\n\t\t\t\t'string': {\n\t\t\t\t\tpattern: /(^[ \\t]+)\"(?:\\\\.|[^\"\\\\])*\"(?=\\)$)/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\t['url', 'bold', 'italic', 'strike'].forEach(function (token) {\n\t\t['url', 'bold', 'italic', 'strike', 'code-snippet'].forEach(function (inside) {\n\t\t\tif (token !== inside) {\n\t\t\t\tPrism.languages.markdown[token].inside.content.inside[inside] = Prism.languages.markdown[inside];\n\t\t\t}\n\t\t});\n\t});\n\n\tPrism.hooks.add('after-tokenize', function (env) {\n\t\tif (env.language !== 'markdown' && env.language !== 'md') {\n\t\t\treturn;\n\t\t}\n\n\t\tfunction walkTokens(tokens) {\n\t\t\tif (!tokens || typeof tokens === 'string') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfor (var i = 0, l = tokens.length; i < l; i++) {\n\t\t\t\tvar token = tokens[i];\n\n\t\t\t\tif (token.type !== 'code') {\n\t\t\t\t\twalkTokens(token.content);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t/*\n\t\t\t\t * Add the correct `language-xxxx` class to this code block. Keep in mind that the `code-language` token\n\t\t\t\t * is optional. But the grammar is defined so that there is only one case we have to handle:\n\t\t\t\t *\n\t\t\t\t * token.content = [\n\t\t\t\t *     <span class=\"punctuation\">```</span>,\n\t\t\t\t *     <span class=\"code-language\">xxxx</span>,\n\t\t\t\t *     '\\n', // exactly one new lines (\\r or \\n or \\r\\n)\n\t\t\t\t *     <span class=\"code-block\">...</span>,\n\t\t\t\t *     '\\n', // exactly one new lines again\n\t\t\t\t *     <span class=\"punctuation\">```</span>\n\t\t\t\t * ];\n\t\t\t\t */\n\n\t\t\t\tvar codeLang = token.content[1];\n\t\t\t\tvar codeBlock = token.content[3];\n\n\t\t\t\tif (codeLang && codeBlock &&\n\t\t\t\t\tcodeLang.type === 'code-language' && codeBlock.type === 'code-block' &&\n\t\t\t\t\ttypeof codeLang.content === 'string') {\n\n\t\t\t\t\t// this might be a language that Prism does not support\n\n\t\t\t\t\t// do some replacements to support C++, C#, and F#\n\t\t\t\t\tvar lang = codeLang.content.replace(/\\b#/g, 'sharp').replace(/\\b\\+\\+/g, 'pp');\n\t\t\t\t\t// only use the first word\n\t\t\t\t\tlang = (/[a-z][\\w-]*/i.exec(lang) || [''])[0].toLowerCase();\n\t\t\t\t\tvar alias = 'language-' + lang;\n\n\t\t\t\t\t// add alias\n\t\t\t\t\tif (!codeBlock.alias) {\n\t\t\t\t\t\tcodeBlock.alias = [alias];\n\t\t\t\t\t} else if (typeof codeBlock.alias === 'string') {\n\t\t\t\t\t\tcodeBlock.alias = [codeBlock.alias, alias];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcodeBlock.alias.push(alias);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\twalkTokens(env.tokens);\n\t});\n\n\tPrism.hooks.add('wrap', function (env) {\n\t\tif (env.type !== 'code-block') {\n\t\t\treturn;\n\t\t}\n\n\t\tvar codeLang = '';\n\t\tfor (var i = 0, l = env.classes.length; i < l; i++) {\n\t\t\tvar cls = env.classes[i];\n\t\t\tvar match = /language-(.+)/.exec(cls);\n\t\t\tif (match) {\n\t\t\t\tcodeLang = match[1];\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tvar grammar = Prism.languages[codeLang];\n\n\t\tif (!grammar) {\n\t\t\tif (codeLang && codeLang !== 'none' && Prism.plugins.autoloader) {\n\t\t\t\tvar id = 'md-' + new Date().valueOf() + '-' + Math.floor(Math.random() * 1e16);\n\t\t\t\tenv.attributes['id'] = id;\n\n\t\t\t\tPrism.plugins.autoloader.loadLanguages(codeLang, function () {\n\t\t\t\t\tvar ele = document.getElementById(id);\n\t\t\t\t\tif (ele) {\n\t\t\t\t\t\tele.innerHTML = Prism.highlight(ele.textContent, Prism.languages[codeLang], codeLang);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\tenv.content = Prism.highlight(textContent(env.content), grammar, codeLang);\n\t\t}\n\t});\n\n\tvar tagPattern = RegExp(Prism.languages.markup.tag.pattern.source, 'gi');\n\n\t/**\n\t * A list of known entity names.\n\t *\n\t * This will always be incomplete to save space. The current list is the one used by lowdash's unescape function.\n\t *\n\t * @see {@link https://github.com/lodash/lodash/blob/2da024c3b4f9947a48517639de7560457cd4ec6c/unescape.js#L2}\n\t */\n\tvar KNOWN_ENTITY_NAMES = {\n\t\t'amp': '&',\n\t\t'lt': '<',\n\t\t'gt': '>',\n\t\t'quot': '\"',\n\t};\n\n\t// IE 11 doesn't support `String.fromCodePoint`\n\tvar fromCodePoint = String.fromCodePoint || String.fromCharCode;\n\n\t/**\n\t * Returns the text content of a given HTML source code string.\n\t *\n\t * @param {string} html\n\t * @returns {string}\n\t */\n\tfunction textContent(html) {\n\t\t// remove all tags\n\t\tvar text = html.replace(tagPattern, '');\n\n\t\t// decode known entities\n\t\ttext = text.replace(/&(\\w{1,8}|#x?[\\da-f]{1,8});/gi, function (m, code) {\n\t\t\tcode = code.toLowerCase();\n\n\t\t\tif (code[0] === '#') {\n\t\t\t\tvar value;\n\t\t\t\tif (code[1] === 'x') {\n\t\t\t\t\tvalue = parseInt(code.slice(2), 16);\n\t\t\t\t} else {\n\t\t\t\t\tvalue = Number(code.slice(1));\n\t\t\t\t}\n\n\t\t\t\treturn fromCodePoint(value);\n\t\t\t} else {\n\t\t\t\tvar known = KNOWN_ENTITY_NAMES[code];\n\t\t\t\tif (known) {\n\t\t\t\t\treturn known;\n\t\t\t\t}\n\n\t\t\t\t// unable to decode\n\t\t\t\treturn m;\n\t\t\t}\n\t\t});\n\n\t\treturn text;\n\t}\n\n\tPrism.languages.md = Prism.languages.markdown;\n\n}(Prism));\n/components/prism-rust.min.js\t!function(e){for(var a=\"/\\\\*(?:[^*/]|\\\\*(?!/)|/(?!\\\\*)|<self>)*\\\\*/\",t=0;t<2;t++)a=a.replace(/<self>/g,(function(){return a}));a=a.replace(/<self>/g,(function(){return\"[^\\\\s\\\\S]\"})),e.languages.rust={comment:[{pattern:RegExp(\"(^|[^\\\\\\\\])\"+a),lookbehind:!0,greedy:!0},{pattern:/(^|[^\\\\:])\\/\\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/b?\"(?:\\\\[\\s\\S]|[^\\\\\"])*\"|b?r(#*)\"(?:[^\"]|\"(?!\\1))*\"\\1/,greedy:!0},char:{pattern:/b?'(?:\\\\(?:x[0-7][\\da-fA-F]|u\\{(?:[\\da-fA-F]_*){1,6}\\}|.)|[^\\\\\\r\\n\\t'])'/,greedy:!0},attribute:{pattern:/#!?\\[(?:[^\\[\\]\"]|\"(?:\\\\[\\s\\S]|[^\\\\\"])*\")*\\]/,greedy:!0,alias:\"attr-name\",inside:{string:null}},\"closure-params\":{pattern:/([=(,:]\\s*|\\bmove\\s*)\\|[^|]*\\||\\|[^|]*\\|(?=\\s*(?:\\{|->))/,lookbehind:!0,greedy:!0,inside:{\"closure-punctuation\":{pattern:/^\\||\\|$/,alias:\"punctuation\"},rest:null}},\"lifetime-annotation\":{pattern:/'\\w+/,alias:\"symbol\"},\"fragment-specifier\":{pattern:/(\\$\\w+:)[a-z]+/,lookbehind:!0,alias:\"punctuation\"},variable:/\\$\\w+/,\"function-definition\":{pattern:/(\\bfn\\s+)\\w+/,lookbehind:!0,alias:\"function\"},\"type-definition\":{pattern:/(\\b(?:enum|struct|trait|type|union)\\s+)\\w+/,lookbehind:!0,alias:\"class-name\"},\"module-declaration\":[{pattern:/(\\b(?:crate|mod)\\s+)[a-z][a-z_\\d]*/,lookbehind:!0,alias:\"namespace\"},{pattern:/(\\b(?:crate|self|super)\\s*)::\\s*[a-z][a-z_\\d]*\\b(?:\\s*::(?:\\s*[a-z][a-z_\\d]*\\s*::)*)?/,lookbehind:!0,alias:\"namespace\",inside:{punctuation:/::/}}],keyword:[/\\b(?:Self|abstract|as|async|await|become|box|break|const|continue|crate|do|dyn|else|enum|extern|final|fn|for|if|impl|in|let|loop|macro|match|mod|move|mut|override|priv|pub|ref|return|self|static|struct|super|trait|try|type|typeof|union|unsafe|unsized|use|virtual|where|while|yield)\\b/,/\\b(?:bool|char|f(?:32|64)|[ui](?:8|16|32|64|128|size)|str)\\b/],function:/\\b[a-z_]\\w*(?=\\s*(?:::\\s*<|\\())/,macro:{pattern:/\\b\\w+!/,alias:\"property\"},constant:/\\b[A-Z_][A-Z_\\d]+\\b/,\"class-name\":/\\b[A-Z]\\w*\\b/,namespace:{pattern:/(?:\\b[a-z][a-z_\\d]*\\s*::\\s*)*\\b[a-z][a-z_\\d]*\\s*::(?!\\s*<)/,inside:{punctuation:/::/}},number:/\\b(?:0x[\\dA-Fa-f](?:_?[\\dA-Fa-f])*|0o[0-7](?:_?[0-7])*|0b[01](?:_?[01])*|(?:(?:\\d(?:_?\\d)*)?\\.)?\\d(?:_?\\d)*(?:[Ee][+-]?\\d+)?)(?:_?(?:f32|f64|[iu](?:8|16|32|64|size)?))?\\b/,boolean:/\\b(?:false|true)\\b/,punctuation:/->|\\.\\.=|\\.{1,3}|::|[{}[\\];(),:]/,operator:/[-+*\\/%!^]=?|=[=>]?|&[&=]?|\\|[|=]?|<<?=?|>>?=?|[@?]/},e.languages.rust[\"closure-params\"].inside.rest=e.languages.rust,e.languages.rust.attribute.inside.string=e.languages.rust.string}(Prism);\"/components/prism-t4-templating.js\u0004p(function (Prism) {\n\n\tfunction createBlock(prefix, inside, contentAlias) {\n\t\treturn {\n\t\t\tpattern: RegExp('<#' + prefix + '[\\\\s\\\\S]*?#>'),\n\t\t\talias: 'block',\n\t\t\tinside: {\n\t\t\t\t'delimiter': {\n\t\t\t\t\tpattern: RegExp('^<#' + prefix + '|#>$'),\n\t\t\t\t\talias: 'important'\n\t\t\t\t},\n\t\t\t\t'content': {\n\t\t\t\t\tpattern: /[\\s\\S]+/,\n\t\t\t\t\tinside: inside,\n\t\t\t\t\talias: contentAlias\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n\n\tfunction createT4(insideLang) {\n\t\tvar grammar = Prism.languages[insideLang];\n\t\tvar className = 'language-' + insideLang;\n\n\t\treturn {\n\t\t\t'block': {\n\t\t\t\tpattern: /<#[\\s\\S]+?#>/,\n\t\t\t\tinside: {\n\t\t\t\t\t'directive': createBlock('@', {\n\t\t\t\t\t\t'attr-value': {\n\t\t\t\t\t\t\tpattern: /=(?:(\"|')(?:\\\\[\\s\\S]|(?!\\1)[^\\\\])*\\1|[^\\s'\">=]+)/,\n\t\t\t\t\t\t\tinside: {\n\t\t\t\t\t\t\t\t'punctuation': /^=|^[\"']|[\"']$/\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'keyword': /\\b\\w+(?=\\s)/,\n\t\t\t\t\t\t'attr-name': /\\b\\w+/\n\t\t\t\t\t}),\n\t\t\t\t\t'expression': createBlock('=', grammar, className),\n\t\t\t\t\t'class-feature': createBlock('\\\\+', grammar, className),\n\t\t\t\t\t'standard': createBlock('', grammar, className)\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n\n\tPrism.languages['t4-templating'] = Object.defineProperty({}, 'createT4', { value: createT4 });\n\n}(Prism));\n/components/prism-gcode.min.jsPrism.languages.gcode={comment:/;.*|\\B\\(.*?\\)\\B/,string:{pattern:/\"(?:\"\"|[^\"])*\"/,greedy:!0},keyword:/\\b[GM]\\d+(?:\\.\\d+)?\\b/,property:/\\b[A-Z]/,checksum:{pattern:/(\\*)\\d+/,lookbehind:!0,alias:\"number\"},punctuation:/[:*]/};%/components/prism-visual-basic.min.js\u0007lPrism.languages[\"visual-basic\"]={comment:{pattern:/(?:['‘’]|REM\\b)(?:[^\\r\\n_]|_(?:\\r\\n?|\\n)?)*/i,inside:{keyword:/^REM/i}},directive:{pattern:/#(?:Const|Else|ElseIf|End|ExternalChecksum|ExternalSource|If|Region)(?:\\b_[ \\t]*(?:\\r\\n?|\\n)|.)+/i,alias:\"property\",greedy:!0},string:{pattern:/\\$?[\"“”](?:[\"“”]{2}|[^\"“”])*[\"“”]C?/i,greedy:!0},date:{pattern:/#[ \\t]*(?:\\d+([/-])\\d+\\1\\d+(?:[ \\t]+(?:\\d+[ \\t]*(?:AM|PM)|\\d+:\\d+(?::\\d+)?(?:[ \\t]*(?:AM|PM))?))?|\\d+[ \\t]*(?:AM|PM)|\\d+:\\d+(?::\\d+)?(?:[ \\t]*(?:AM|PM))?)[ \\t]*#/i,alias:\"number\"},number:/(?:(?:\\b\\d+(?:\\.\\d+)?|\\.\\d+)(?:E[+-]?\\d+)?|&[HO][\\dA-F]+)(?:[FRD]|U?[ILS])?/i,boolean:/\\b(?:False|Nothing|True)\\b/i,keyword:/\\b(?:AddHandler|AddressOf|Alias|And(?:Also)?|As|Boolean|ByRef|Byte|ByVal|Call|Case|Catch|C(?:Bool|Byte|Char|Date|Dbl|Dec|Int|Lng|Obj|SByte|Short|Sng|Str|Type|UInt|ULng|UShort)|Char|Class|Const|Continue|Currency|Date|Decimal|Declare|Default|Delegate|Dim|DirectCast|Do|Double|Each|Else(?:If)?|End(?:If)?|Enum|Erase|Error|Event|Exit|Finally|For|Friend|Function|Get(?:Type|XMLNamespace)?|Global|GoSub|GoTo|Handles|If|Implements|Imports|In|Inherits|Integer|Interface|Is|IsNot|Let|Lib|Like|Long|Loop|Me|Mod|Module|Must(?:Inherit|Override)|My(?:Base|Class)|Namespace|Narrowing|New|Next|Not(?:Inheritable|Overridable)?|Object|Of|On|Operator|Option(?:al)?|Or(?:Else)?|Out|Overloads|Overridable|Overrides|ParamArray|Partial|Private|Property|Protected|Public|RaiseEvent|ReadOnly|ReDim|RemoveHandler|Resume|Return|SByte|Select|Set|Shadows|Shared|short|Single|Static|Step|Stop|String|Structure|Sub|SyncLock|Then|Throw|To|Try|TryCast|Type|TypeOf|U(?:Integer|Long|Short)|Until|Using|Variant|Wend|When|While|Widening|With(?:Events)?|WriteOnly|Xor)\\b/i,operator:/[+\\-*/\\\\^<=>&#@$%!]|\\b_(?=[ \\t]*[\\r\\n])/,punctuation:/[{}().,:?]/},Prism.languages.vb=Prism.languages[\"visual-basic\"],Prism.languages.vba=Prism.languages[\"visual-basic\"];/components/prism-psl.min.js\fkPrism.languages.psl={comment:{pattern:/#.*/,greedy:!0},string:{pattern:/\"(?:\\\\.|[^\\\\\"])*\"/,greedy:!0,inside:{symbol:/\\\\[ntrbA-Z\"\\\\]/}},\"heredoc-string\":{pattern:/<<<([a-zA-Z_]\\w*)[\\r\\n](?:.*[\\r\\n])*?\\1\\b/,alias:\"string\",greedy:!0},keyword:/\\b(?:__multi|__single|case|default|do|else|elsif|exit|export|for|foreach|function|if|last|line|local|next|requires|return|switch|until|while|word)\\b/,constant:/\\b(?:ALARM|CHART_ADD_GRAPH|CHART_DELETE_GRAPH|CHART_DESTROY|CHART_LOAD|CHART_PRINT|EOF|OFFLINE|OK|PSL_PROF_LOG|R_CHECK_HORIZ|R_CHECK_VERT|R_CLICKER|R_COLUMN|R_FRAME|R_ICON|R_LABEL|R_LABEL_CENTER|R_LIST_MULTIPLE|R_LIST_MULTIPLE_ND|R_LIST_SINGLE|R_LIST_SINGLE_ND|R_MENU|R_POPUP|R_POPUP_SCROLLED|R_RADIO_HORIZ|R_RADIO_VERT|R_ROW|R_SCALE_HORIZ|R_SCALE_VERT|R_SEP_HORIZ|R_SEP_VERT|R_SPINNER|R_TEXT_FIELD|R_TEXT_FIELD_LABEL|R_TOGGLE|TRIM_LEADING|TRIM_LEADING_AND_TRAILING|TRIM_REDUNDANT|TRIM_TRAILING|VOID|WARN)\\b/,boolean:/\\b(?:FALSE|False|NO|No|TRUE|True|YES|Yes|false|no|true|yes)\\b/,variable:/\\b(?:PslDebug|errno|exit_status)\\b/,builtin:{pattern:/\\b(?:PslExecute|PslFunctionCall|PslFunctionExists|PslSetOptions|_snmp_debug|acos|add_diary|annotate|annotate_get|ascii_to_ebcdic|asctime|asin|atan|atexit|batch_set|blackout|cat|ceil|chan_exists|change_state|close|code_cvt|cond_signal|cond_wait|console_type|convert_base|convert_date|convert_locale_date|cos|cosh|create|date|dcget_text|destroy|destroy_lock|dget_text|difference|dump_hist|ebcdic_to_ascii|encrypt|event_archive|event_catalog_get|event_check|event_query|event_range_manage|event_range_query|event_report|event_schedule|event_trigger|event_trigger2|execute|exists|exp|fabs|file|floor|fmod|fopen|fseek|ftell|full_discovery|get|get_chan_info|get_ranges|get_text|get_vars|getenv|gethostinfo|getpid|getpname|grep|history|history_get_retention|in_transition|index|int|internal|intersection|is_var|isnumber|join|kill|length|lines|lock|lock_info|log|log10|loge|matchline|msg_check|msg_get_format|msg_get_severity|msg_printf|msg_sprintf|ntharg|nthargf|nthline|nthlinef|num_bytes|num_consoles|pconfig|popen|poplines|pow|print|printf|proc_exists|process|random|read|readln|refresh_parameters|remote_check|remote_close|remote_event_query|remote_event_trigger|remote_file_send|remote_open|remove|replace|rindex|sec_check_priv|sec_store_get|sec_store_set|set|set_alarm_ranges|set_locale|share|sin|sinh|sleep|snmp_agent_config|snmp_agent_start|snmp_agent_stop|snmp_close|snmp_config|snmp_get|snmp_get_next|snmp_h_get|snmp_h_get_next|snmp_h_set|snmp_open|snmp_set|snmp_trap_ignore|snmp_trap_listen|snmp_trap_raise_std_trap|snmp_trap_receive|snmp_trap_register_im|snmp_trap_send|snmp_walk|sopen|sort|splitline|sprintf|sqrt|srandom|str_repeat|strcasecmp|subset|substr|system|tail|tan|tanh|text_domain|time|tmpnam|tolower|toupper|trace_psl_process|trim|union|unique|unlock|unset|va_arg|va_start|write)\\b/,alias:\"builtin-function\"},\"foreach-variable\":{pattern:/(\\bforeach\\s+(?:(?:\\w+\\b|\"(?:\\\\.|[^\\\\\"])*\")\\s+){0,2})[_a-zA-Z]\\w*(?=\\s*\\()/,lookbehind:!0,greedy:!0},function:/\\b[_a-z]\\w*\\b(?=\\s*\\()/i,number:/\\b(?:0x[0-9a-f]+|\\d+(?:\\.\\d+)?)\\b/i,operator:/--|\\+\\+|&&=?|\\|\\|=?|<<=?|>>=?|[=!]~|[-+*/%&|^!=<>]=?|\\.|[:?]/,punctuation:/[(){}\\[\\];,]/};#/components/prism-keepalived.min.js\u0016&Prism.languages.keepalived={comment:{pattern:/[#!].*/,greedy:!0},string:{pattern:/(^|[^\\\\])(?:\"(?:\\\\(?:\\r\\n|[\\s\\S])|[^\"\\\\\\r\\n])*\"|'(?:\\\\(?:\\r\\n|[\\s\\S])|[^'\\\\\\r\\n])*')/,lookbehind:!0,greedy:!0},ip:{pattern:RegExp(\"\\\\b(?:(?:(?:[\\\\da-f]{1,4}:){7}[\\\\da-f]{1,4}|(?:[\\\\da-f]{1,4}:){6}:[\\\\da-f]{1,4}|(?:[\\\\da-f]{1,4}:){5}:(?:[\\\\da-f]{1,4}:)?[\\\\da-f]{1,4}|(?:[\\\\da-f]{1,4}:){4}:(?:[\\\\da-f]{1,4}:){0,2}[\\\\da-f]{1,4}|(?:[\\\\da-f]{1,4}:){3}:(?:[\\\\da-f]{1,4}:){0,3}[\\\\da-f]{1,4}|(?:[\\\\da-f]{1,4}:){2}:(?:[\\\\da-f]{1,4}:){0,4}[\\\\da-f]{1,4}|(?:[\\\\da-f]{1,4}:){6}<ipv4>|(?:[\\\\da-f]{1,4}:){0,5}:<ipv4>|::(?:[\\\\da-f]{1,4}:){0,5}<ipv4>|[\\\\da-f]{1,4}::(?:[\\\\da-f]{1,4}:){0,5}[\\\\da-f]{1,4}|::(?:[\\\\da-f]{1,4}:){0,6}[\\\\da-f]{1,4}|(?:[\\\\da-f]{1,4}:){1,7}:)(?:/\\\\d{1,3})?|<ipv4>(?:/\\\\d{1,2})?)\\\\b\".replace(/<ipv4>/g,(function(){return\"(?:(?:(?:25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]\\\\d|\\\\d)\\\\.){3}(?:25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]\\\\d|\\\\d))\"})),\"i\"),alias:\"number\"},path:{pattern:/(\\s)\\/(?:[^\\/\\s]+\\/)*[^\\/\\s]*|\\b[a-zA-Z]:\\\\(?:[^\\\\\\s]+\\\\)*[^\\\\\\s]*/,lookbehind:!0,alias:\"string\"},variable:/\\$\\{?\\w+\\}?/,email:{pattern:/[\\w-]+@[\\w-]+(?:\\.[\\w-]{2,3}){1,2}/,alias:\"string\"},\"conditional-configuration\":{pattern:/@\\^?[\\w-]+/,alias:\"variable\"},operator:/=/,property:/\\b(?:BFD_CHECK|DNS_CHECK|FILE_CHECK|HTTP_GET|MISC_CHECK|NAME|PING_CHECK|SCRIPTS|SMTP_CHECK|SSL|SSL_GET|TCP_CHECK|UDP_CHECK|accept|advert_int|alpha|auth_pass|auth_type|authentication|bfd_cpu_affinity|bfd_instance|bfd_no_swap|bfd_priority|bfd_process_name|bfd_rlimit_rttime|bfd_rt_priority|bind_if|bind_port|bindto|ca|certificate|check_unicast_src|checker|checker_cpu_affinity|checker_log_all_failures|checker_no_swap|checker_priority|checker_rlimit_rttime|checker_rt_priority|child_wait_time|connect_ip|connect_port|connect_timeout|dbus_service_name|debug|default_interface|delay|delay_before_retry|delay_loop|digest|dont_track_primary|dynamic|dynamic_interfaces|enable_(?:dbus|script_security|sni|snmp_checker|snmp_rfc|snmp_rfcv2|snmp_rfcv3|snmp_vrrp|traps)|end|fall|fast_recovery|file|flag-[123]|fork_delay|full_command|fwmark|garp_group|garp_interval|garp_lower_prio_delay|garp_lower_prio_repeat|garp_master_delay|garp_master_refresh|garp_master_refresh_repeat|garp_master_repeat|global_defs|global_tracking|gna_interval|group|ha_suspend|hashed|helo_name|higher_prio_send_advert|hoplimit|http_protocol|hysteresis|idle_tx|include|inhibit_on_failure|init_fail|init_file|instance|interface|interfaces|interval|ip_family|ipvs_process_name|keepalived.conf|kernel_rx_buf_size|key|linkbeat_interfaces|linkbeat_use_polling|log_all_failures|log_unknown_vrids|lower_prio_no_advert|lthreshold|lvs_flush|lvs_flush_onstop|lvs_method|lvs_netlink_cmd_rcv_bufs|lvs_netlink_cmd_rcv_bufs_force|lvs_netlink_monitor_rcv_bufs|lvs_netlink_monitor_rcv_bufs_force|lvs_notify_fifo|lvs_notify_fifo_script|lvs_sched|lvs_sync_daemon|max_auto_priority|max_hops|mcast_src_ip|mh-fallback|mh-port|min_auto_priority_delay|min_rx|min_tx|misc_dynamic|misc_path|misc_timeout|multiplier|name|namespace_with_ipsets|native_ipv6|neighbor_ip|net_namespace|net_namespace_ipvs|nftables|nftables_counters|nftables_ifindex|nftables_priority|no_accept|no_checker_emails|no_email_faults|nopreempt|notification_email|notification_email_from|notify|notify_backup|notify_deleted|notify_down|notify_fault|notify_fifo|notify_fifo_script|notify_master|notify_master_rx_lower_pri|notify_priority_changes|notify_stop|notify_up|old_unicast_checksum|omega|ops|param_match|passive|password|path|persistence_engine|persistence_granularity|persistence_timeout|preempt|preempt_delay|priority|process|process_monitor_rcv_bufs|process_monitor_rcv_bufs_force|process_name|process_names|promote_secondaries|protocol|proxy_arp|proxy_arp_pvlan|quorum|quorum_down|quorum_max|quorum_up|random_seed|real_server|regex|regex_max_offset|regex_min_offset|regex_no_match|regex_options|regex_stack|reload_repeat|reload_time_file|require_reply|retry|rise|router_id|rs_init_notifies|script|script_user|sh-fallback|sh-port|shutdown_script|shutdown_script_timeout|skip_check_adv_addr|smtp_alert|smtp_alert_checker|smtp_alert_vrrp|smtp_connect_timeout|smtp_helo_name|smtp_server|snmp_socket|sorry_server|sorry_server_inhibit|sorry_server_lvs_method|source_ip|start|startup_script|startup_script_timeout|state|static_ipaddress|static_routes|static_rules|status_code|step|strict_mode|sync_group_tracking_weight|terminate_delay|timeout|track_bfd|track_file|track_group|track_interface|track_process|track_script|track_src_ip|ttl|type|umask|unicast_peer|unicast_src_ip|unicast_ttl|url|use_ipvlan|use_pid_dir|use_vmac|user|uthreshold|val[123]|version|virtual_ipaddress|virtual_ipaddress_excluded|virtual_router_id|virtual_routes|virtual_rules|virtual_server|virtual_server_group|virtualhost|vmac_xmit_base|vrrp|vrrp_(?:check_unicast_src|cpu_affinity|garp_interval|garp_lower_prio_delay|garp_lower_prio_repeat|garp_master_delay|garp_master_refresh|garp_master_refresh_repeat|garp_master_repeat|gna_interval|higher_prio_send_advert|instance|ipsets|iptables|lower_prio_no_advert|mcast_group4|mcast_group6|min_garp|netlink_cmd_rcv_bufs|netlink_cmd_rcv_bufs_force|netlink_monitor_rcv_bufs|netlink_monitor_rcv_bufs_force|no_swap|notify_fifo|notify_fifo_script|notify_priority_changes|priority|process_name|rlimit_rttime|rt_priority|rx_bufs_multiplier|rx_bufs_policy|script|skip_check_adv_addr|startup_delay|strict|sync_group|track_process|version)|warmup|weight)\\b/,constant:/\\b(?:A|AAAA|AH|BACKUP|CNAME|DR|MASTER|MX|NAT|NS|PASS|SCTP|SOA|TCP|TUN|TXT|UDP|dh|fo|lblc|lblcr|lc|mh|nq|ovf|rr|sed|sh|wlc|wrr)\\b/,number:{pattern:/(^|[^\\w.-])-?\\d+(?:\\.\\d+)?/,lookbehind:!0},boolean:/\\b(?:false|no|off|on|true|yes)\\b/,punctuation:/[\\{\\}]/};/components/prism-pug.min.js\u000b\u0006!function(e){e.languages.pug={comment:{pattern:/(^([\\t ]*))\\/\\/.*(?:(?:\\r?\\n|\\r)\\2[\\t ].+)*/m,lookbehind:!0},\"multiline-script\":{pattern:/(^([\\t ]*)script\\b.*\\.[\\t ]*)(?:(?:\\r?\\n|\\r(?!\\n))(?:\\2[\\t ].+|\\s*?(?=\\r?\\n|\\r)))+/m,lookbehind:!0,inside:e.languages.javascript},filter:{pattern:/(^([\\t ]*)):.+(?:(?:\\r?\\n|\\r(?!\\n))(?:\\2[\\t ].+|\\s*?(?=\\r?\\n|\\r)))+/m,lookbehind:!0,inside:{\"filter-name\":{pattern:/^:[\\w-]+/,alias:\"variable\"},text:/\\S[\\s\\S]*/}},\"multiline-plain-text\":{pattern:/(^([\\t ]*)[\\w\\-#.]+\\.[\\t ]*)(?:(?:\\r?\\n|\\r(?!\\n))(?:\\2[\\t ].+|\\s*?(?=\\r?\\n|\\r)))+/m,lookbehind:!0},markup:{pattern:/(^[\\t ]*)<.+/m,lookbehind:!0,inside:e.languages.markup},doctype:{pattern:/((?:^|\\n)[\\t ]*)doctype(?: .+)?/,lookbehind:!0},\"flow-control\":{pattern:/(^[\\t ]*)(?:case|default|each|else|if|unless|when|while)\\b(?: .+)?/m,lookbehind:!0,inside:{each:{pattern:/^each .+? in\\b/,inside:{keyword:/\\b(?:each|in)\\b/,punctuation:/,/}},branch:{pattern:/^(?:case|default|else|if|unless|when|while)\\b/,alias:\"keyword\"},rest:e.languages.javascript}},keyword:{pattern:/(^[\\t ]*)(?:append|block|extends|include|prepend)\\b.+/m,lookbehind:!0},mixin:[{pattern:/(^[\\t ]*)mixin .+/m,lookbehind:!0,inside:{keyword:/^mixin/,function:/\\w+(?=\\s*\\(|\\s*$)/,punctuation:/[(),.]/}},{pattern:/(^[\\t ]*)\\+.+/m,lookbehind:!0,inside:{name:{pattern:/^\\+\\w+/,alias:\"function\"},rest:e.languages.javascript}}],script:{pattern:/(^[\\t ]*script(?:(?:&[^(]+)?\\([^)]+\\))*[\\t ]).+/m,lookbehind:!0,inside:e.languages.javascript},\"plain-text\":{pattern:/(^[\\t ]*(?!-)[\\w\\-#.]*[\\w\\-](?:(?:&[^(]+)?\\([^)]+\\))*\\/?[\\t ]).+/m,lookbehind:!0},tag:{pattern:/(^[\\t ]*)(?!-)[\\w\\-#.]*[\\w\\-](?:(?:&[^(]+)?\\([^)]+\\))*\\/?:?/m,lookbehind:!0,inside:{attributes:[{pattern:/&[^(]+\\([^)]+\\)/,inside:e.languages.javascript},{pattern:/\\([^)]+\\)/,inside:{\"attr-value\":{pattern:/(=\\s*(?!\\s))(?:\\{[^}]*\\}|[^,)\\r\\n]+)/,lookbehind:!0,inside:e.languages.javascript},\"attr-name\":/[\\w-]+(?=\\s*!?=|\\s*[,)])/,punctuation:/[!=(),]+/}}],punctuation:/:/,\"attr-id\":/#[\\w\\-]+/,\"attr-class\":/\\.[\\w\\-]+/}},code:[{pattern:/(^[\\t ]*(?:-|!?=)).+/m,lookbehind:!0,inside:e.languages.javascript}],punctuation:/[.\\-!=|]+/};for(var t=[{filter:\"atpl\",language:\"twig\"},{filter:\"coffee\",language:\"coffeescript\"},\"ejs\",\"handlebars\",\"less\",\"livescript\",\"markdown\",{filter:\"sass\",language:\"scss\"},\"stylus\"],n={},a=0,i=t.length;a<i;a++){var r=t[a];r=\"string\"==typeof r?{filter:r,language:r}:r,e.languages[r.language]&&(n[\"filter-\"+r.filter]={pattern:RegExp(\"(^([\\t ]*)):<filter_name>(?:(?:\\r?\\n|\\r(?!\\n))(?:\\\\2[\\t ].+|\\\\s*?(?=\\r?\\n|\\r)))+\".replace(\"<filter_name>\",(function(){return r.filter})),\"m\"),lookbehind:!0,inside:{\"filter-name\":{pattern:/^:[\\w-]+/,alias:\"variable\"},text:{pattern:/\\S[\\s\\S]*/,alias:[r.language,\"language-\"+r.language],inside:e.languages[r.language]}}})}e.languages.insertBefore(\"pug\",\"filter\",n)}(Prism);/components/prism-bnf.js\u0001Prism.languages.bnf = {\n\t'string': {\n\t\tpattern: /\"[^\\r\\n\"]*\"|'[^\\r\\n']*'/\n\t},\n\t'definition': {\n\t\tpattern: /<[^<>\\r\\n\\t]+>(?=\\s*::=)/,\n\t\talias: ['rule', 'keyword'],\n\t\tinside: {\n\t\t\t'punctuation': /^<|>$/\n\t\t}\n\t},\n\t'rule': {\n\t\tpattern: /<[^<>\\r\\n\\t]+>/,\n\t\tinside: {\n\t\t\t'punctuation': /^<|>$/\n\t\t}\n\t},\n\t'operator': /::=|[|()[\\]{}*+?]|\\.{3}/\n};\n\nPrism.languages.rbnf = Prism.languages.bnf;\n/components/prism-processing.js\u0002~Prism.languages.processing = Prism.languages.extend('clike', {\n\t'keyword': /\\b(?:break|case|catch|class|continue|default|else|extends|final|for|if|implements|import|new|null|private|public|return|static|super|switch|this|try|void|while)\\b/,\n\t// Spaces are allowed between function name and parenthesis\n\t'function': /\\b\\w+(?=\\s*\\()/,\n\t'operator': /<[<=]?|>[>=]?|&&?|\\|\\|?|[%?]|[!=+\\-*\\/]=?/\n});\n\nPrism.languages.insertBefore('processing', 'number', {\n\t// Special case: XML is a type\n\t'constant': /\\b(?!XML\\b)[A-Z][A-Z\\d_]+\\b/,\n\t'type': {\n\t\tpattern: /\\b(?:boolean|byte|char|color|double|float|int|[A-Z]\\w*)\\b/,\n\t\talias: 'class-name'\n\t}\n});\n/components/prism-erlang.min.js\u0002Prism.languages.erlang={comment:/%.+/,string:{pattern:/\"(?:\\\\.|[^\\\\\"\\r\\n])*\"/,greedy:!0},\"quoted-function\":{pattern:/'(?:\\\\.|[^\\\\'\\r\\n])+'(?=\\()/,alias:\"function\"},\"quoted-atom\":{pattern:/'(?:\\\\.|[^\\\\'\\r\\n])+'/,alias:\"atom\"},boolean:/\\b(?:false|true)\\b/,keyword:/\\b(?:after|begin|case|catch|end|fun|if|of|receive|try|when)\\b/,number:[/\\$\\\\?./,/\\b\\d+#[a-z0-9]+/i,/(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:e[+-]?\\d+)?/i],function:/\\b[a-z][\\w@]*(?=\\()/,variable:{pattern:/(^|[^@])(?:\\b|\\?)[A-Z_][\\w@]*/,lookbehind:!0},operator:[/[=\\/<>:]=|=[:\\/]=|\\+\\+?|--?|[=*\\/!]|\\b(?:and|andalso|band|bnot|bor|bsl|bsr|bxor|div|not|or|orelse|rem|xor)\\b/,{pattern:/(^|[^<])<(?!<)/,lookbehind:!0},{pattern:/(^|[^>])>(?!>)/,lookbehind:!0}],atom:/\\b[a-z][\\w@]*/,punctuation:/[()[\\]{}:;,.#|]|<<|>>/};/components/prism-t4-vb.min.jsLPrism.languages[\"t4-vb\"]=Prism.languages[\"t4-templating\"].createT4(\"vbnet\");/components/prism-lolcode.js\u0005tPrism.languages.lolcode = {\n\t'comment': [\n\t\t/\\bOBTW\\s[\\s\\S]*?\\sTLDR\\b/,\n\t\t/\\bBTW.+/\n\t],\n\t'string': {\n\t\tpattern: /\"(?::.|[^\":])*\"/,\n\t\tinside: {\n\t\t\t'variable': /:\\{[^}]+\\}/,\n\t\t\t'symbol': [\n\t\t\t\t/:\\([a-f\\d]+\\)/i,\n\t\t\t\t/:\\[[^\\]]+\\]/,\n\t\t\t\t/:[)>o\":]/\n\t\t\t]\n\t\t},\n\t\tgreedy: true\n\t},\n\t'number': /(?:\\B-)?(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)/,\n\t'symbol': {\n\t\tpattern: /(^|\\s)(?:A )?(?:BUKKIT|NOOB|NUMBAR|NUMBR|TROOF|YARN)(?=\\s|,|$)/,\n\t\tlookbehind: true,\n\t\tinside: {\n\t\t\t'keyword': /A(?=\\s)/\n\t\t}\n\t},\n\t'label': {\n\t\tpattern: /((?:^|\\s)(?:IM IN YR|IM OUTTA YR) )[a-zA-Z]\\w*/,\n\t\tlookbehind: true,\n\t\talias: 'string'\n\t},\n\t'function': {\n\t\tpattern: /((?:^|\\s)(?:HOW IZ I|I IZ|IZ) )[a-zA-Z]\\w*/,\n\t\tlookbehind: true\n\t},\n\t'keyword': [\n\t\t{\n\t\t\tpattern: /(^|\\s)(?:AN|FOUND YR|GIMMEH|GTFO|HAI|HAS A|HOW IZ I|I HAS A|I IZ|IF U SAY SO|IM IN YR|IM OUTTA YR|IS NOW(?: A)?|ITZ(?: A)?|IZ|KTHX|KTHXBYE|LIEK(?: A)?|MAEK|MEBBE|MKAY|NERFIN|NO WAI|O HAI IM|O RLY\\?|OIC|OMG|OMGWTF|R|SMOOSH|SRS|TIL|UPPIN|VISIBLE|WILE|WTF\\?|YA RLY|YR)(?=\\s|,|$)/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t/'Z(?=\\s|,|$)/\n\t],\n\t'boolean': {\n\t\tpattern: /(^|\\s)(?:FAIL|WIN)(?=\\s|,|$)/,\n\t\tlookbehind: true\n\t},\n\t'variable': {\n\t\tpattern: /(^|\\s)IT(?=\\s|,|$)/,\n\t\tlookbehind: true\n\t},\n\t'operator': {\n\t\tpattern: /(^|\\s)(?:NOT|BOTH SAEM|DIFFRINT|(?:ALL|ANY|BIGGR|BOTH|DIFF|EITHER|MOD|PRODUKT|QUOSHUNT|SMALLR|SUM|WON) OF)(?=\\s|,|$)/,\n\t\tlookbehind: true\n\t},\n\t'punctuation': /\\.{3}|…|,|!/\n};\n/components/prism-markup.js\u0012Prism.languages.markup = {\n\t'comment': {\n\t\tpattern: /<!--(?:(?!<!--)[\\s\\S])*?-->/,\n\t\tgreedy: true\n\t},\n\t'prolog': {\n\t\tpattern: /<\\?[\\s\\S]+?\\?>/,\n\t\tgreedy: true\n\t},\n\t'doctype': {\n\t\t// https://www.w3.org/TR/xml/#NT-doctypedecl\n\t\tpattern: /<!DOCTYPE(?:[^>\"'[\\]]|\"[^\"]*\"|'[^']*')+(?:\\[(?:[^<\"'\\]]|\"[^\"]*\"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\\]\\s*)?>/i,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'internal-subset': {\n\t\t\t\tpattern: /(^[^\\[]*\\[)[\\s\\S]+(?=\\]>$)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: null // see below\n\t\t\t},\n\t\t\t'string': {\n\t\t\t\tpattern: /\"[^\"]*\"|'[^']*'/,\n\t\t\t\tgreedy: true\n\t\t\t},\n\t\t\t'punctuation': /^<!|>$|[[\\]]/,\n\t\t\t'doctype-tag': /^DOCTYPE/i,\n\t\t\t'name': /[^\\s<>'\"]+/\n\t\t}\n\t},\n\t'cdata': {\n\t\tpattern: /<!\\[CDATA\\[[\\s\\S]*?\\]\\]>/i,\n\t\tgreedy: true\n\t},\n\t'tag': {\n\t\tpattern: /<\\/?(?!\\d)[^\\s>\\/=$<%]+(?:\\s(?:\\s*[^\\s>\\/=]+(?:\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))|(?=[\\s/>])))+)?\\s*\\/?>/,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'tag': {\n\t\t\t\tpattern: /^<\\/?[^\\s>\\/]+/,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': /^<\\/?/,\n\t\t\t\t\t'namespace': /^[^\\s>\\/:]+:/\n\t\t\t\t}\n\t\t\t},\n\t\t\t'special-attr': [],\n\t\t\t'attr-value': {\n\t\t\t\tpattern: /=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+)/,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpattern: /^=/,\n\t\t\t\t\t\t\talias: 'attr-equals'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpattern: /^(\\s*)[\"']|[\"']$/,\n\t\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t'punctuation': /\\/?>/,\n\t\t\t'attr-name': {\n\t\t\t\tpattern: /[^\\s>\\/]+/,\n\t\t\t\tinside: {\n\t\t\t\t\t'namespace': /^[^\\s>\\/:]+:/\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t},\n\t'entity': [\n\t\t{\n\t\t\tpattern: /&[\\da-z]{1,8};/i,\n\t\t\talias: 'named-entity'\n\t\t},\n\t\t/&#x?[\\da-f]{1,8};/i\n\t]\n};\n\nPrism.languages.markup['tag'].inside['attr-value'].inside['entity'] =\n\tPrism.languages.markup['entity'];\nPrism.languages.markup['doctype'].inside['internal-subset'].inside = Prism.languages.markup;\n\n// Plugin to make entity title show the real entity, idea by Roman Komarov\nPrism.hooks.add('wrap', function (env) {\n\n\tif (env.type === 'entity') {\n\t\tenv.attributes['title'] = env.content.replace(/&amp;/, '&');\n\t}\n});\n\nObject.defineProperty(Prism.languages.markup.tag, 'addInlined', {\n\t/**\n\t * Adds an inlined language to markup.\n\t *\n\t * An example of an inlined language is CSS with `<style>` tags.\n\t *\n\t * @param {string} tagName The name of the tag that contains the inlined language. This name will be treated as\n\t * case insensitive.\n\t * @param {string} lang The language key.\n\t * @example\n\t * addInlined('style', 'css');\n\t */\n\tvalue: function addInlined(tagName, lang) {\n\t\tvar includedCdataInside = {};\n\t\tincludedCdataInside['language-' + lang] = {\n\t\t\tpattern: /(^<!\\[CDATA\\[)[\\s\\S]+?(?=\\]\\]>$)/i,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages[lang]\n\t\t};\n\t\tincludedCdataInside['cdata'] = /^<!\\[CDATA\\[|\\]\\]>$/i;\n\n\t\tvar inside = {\n\t\t\t'included-cdata': {\n\t\t\t\tpattern: /<!\\[CDATA\\[[\\s\\S]*?\\]\\]>/i,\n\t\t\t\tinside: includedCdataInside\n\t\t\t}\n\t\t};\n\t\tinside['language-' + lang] = {\n\t\t\tpattern: /[\\s\\S]+/,\n\t\t\tinside: Prism.languages[lang]\n\t\t};\n\n\t\tvar def = {};\n\t\tdef[tagName] = {\n\t\t\tpattern: RegExp(/(<__[^>]*>)(?:<!\\[CDATA\\[(?:[^\\]]|\\](?!\\]>))*\\]\\]>|(?!<!\\[CDATA\\[)[\\s\\S])*?(?=<\\/__>)/.source.replace(/__/g, function () { return tagName; }), 'i'),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: inside\n\t\t};\n\n\t\tPrism.languages.insertBefore('markup', 'cdata', def);\n\t}\n});\nObject.defineProperty(Prism.languages.markup.tag, 'addAttribute', {\n\t/**\n\t * Adds an pattern to highlight languages embedded in HTML attributes.\n\t *\n\t * An example of an inlined language is CSS with `style` attributes.\n\t *\n\t * @param {string} attrName The name of the tag that contains the inlined language. This name will be treated as\n\t * case insensitive.\n\t * @param {string} lang The language key.\n\t * @example\n\t * addAttribute('style', 'css');\n\t */\n\tvalue: function (attrName, lang) {\n\t\tPrism.languages.markup.tag.inside['special-attr'].push({\n\t\t\tpattern: RegExp(\n\t\t\t\t/(^|[\"'\\s])/.source + '(?:' + attrName + ')' + /\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))/.source,\n\t\t\t\t'i'\n\t\t\t),\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'attr-name': /^[^\\s=]+/,\n\t\t\t\t'attr-value': {\n\t\t\t\t\tpattern: /=[\\s\\S]+/,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'value': {\n\t\t\t\t\t\t\tpattern: /(^=\\s*([\"']|(?![\"'])))\\S[\\s\\S]*(?=\\2$)/,\n\t\t\t\t\t\t\tlookbehind: true,\n\t\t\t\t\t\t\talias: [lang, 'language-' + lang],\n\t\t\t\t\t\t\tinside: Prism.languages[lang]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'punctuation': [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tpattern: /^=/,\n\t\t\t\t\t\t\t\talias: 'attr-equals'\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t/\"|'/\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n});\n\nPrism.languages.html = Prism.languages.markup;\nPrism.languages.mathml = Prism.languages.markup;\nPrism.languages.svg = Prism.languages.markup;\n\nPrism.languages.xml = Prism.languages.extend('markup', {});\nPrism.languages.ssml = Prism.languages.xml;\nPrism.languages.atom = Prism.languages.xml;\nPrism.languages.rss = Prism.languages.xml;\n&/components/prism-excel-formula.min.js\u0003Prism.languages[\"excel-formula\"]={comment:{pattern:/(\\bN\\(\\s*)\"(?:[^\"]|\"\")*\"(?=\\s*\\))/i,lookbehind:!0,greedy:!0},string:{pattern:/\"(?:[^\"]|\"\")*\"(?!\")/,greedy:!0},reference:{pattern:/(?:'[^']*'|(?:[^\\s()[\\]{}<>*?\"';,$&]*\\[[^^\\s()[\\]{}<>*?\"']+\\])?\\w+)!/,greedy:!0,alias:\"string\",inside:{operator:/!$/,punctuation:/'/,sheet:{pattern:/[^[\\]]+$/,alias:\"function\"},file:{pattern:/\\[[^[\\]]+\\]$/,inside:{punctuation:/[[\\]]/}},path:/[\\s\\S]+/}},\"function-name\":{pattern:/\\b[A-Z]\\w*(?=\\()/i,alias:\"builtin\"},range:{pattern:/\\$?\\b(?:[A-Z]+\\$?\\d+:\\$?[A-Z]+\\$?\\d+|[A-Z]+:\\$?[A-Z]+|\\d+:\\$?\\d+)\\b/i,alias:\"selector\",inside:{operator:/:/,cell:/\\$?[A-Z]+\\$?\\d+/i,column:/\\$?[A-Z]+/i,row:/\\$?\\d+/}},cell:{pattern:/\\b[A-Z]+\\d+\\b|\\$[A-Za-z]+\\$?\\d+\\b|\\b[A-Za-z]+\\$\\d+\\b/,alias:\"selector\"},number:/(?:\\b\\d+(?:\\.\\d+)?|\\B\\.\\d+)(?:e[+-]?\\d+)?\\b/i,boolean:/\\b(?:FALSE|TRUE)\\b/i,operator:/[-+*/^%=&,]|<[=>]?|>=?/,punctuation:/[[\\]();{}|]/},Prism.languages.xlsx=Prism.languages.xls=Prism.languages[\"excel-formula\"];/components/prism-neon.min.js\u0003Prism.languages.neon={comment:{pattern:/#.*/,greedy:!0},datetime:{pattern:/(^|[[{(=:,\\s])\\d\\d\\d\\d-\\d\\d?-\\d\\d?(?:(?:[Tt]| +)\\d\\d?:\\d\\d:\\d\\d(?:\\.\\d*)? *(?:Z|[-+]\\d\\d?(?::?\\d\\d)?)?)?(?=$|[\\]}),\\s])/,lookbehind:!0,alias:\"number\"},key:{pattern:/(^|[[{(,\\s])[^,:=[\\]{}()'\"\\s]+(?=\\s*:(?:$|[\\]}),\\s])|\\s*=)/,lookbehind:!0,alias:\"property\"},number:{pattern:/(^|[[{(=:,\\s])[+-]?(?:0x[\\da-fA-F]+|0o[0-7]+|0b[01]+|(?:\\d+(?:\\.\\d*)?|\\.?\\d+)(?:[eE][+-]?\\d+)?)(?=$|[\\]}),:=\\s])/,lookbehind:!0},boolean:{pattern:/(^|[[{(=:,\\s])(?:false|no|true|yes)(?=$|[\\]}),:=\\s])/i,lookbehind:!0},null:{pattern:/(^|[[{(=:,\\s])(?:null)(?=$|[\\]}),:=\\s])/i,lookbehind:!0,alias:\"keyword\"},string:{pattern:/(^|[[{(=:,\\s])(?:('''|\"\"\")\\r?\\n(?:(?:[^\\r\\n]|\\r?\\n(?![\\t ]*\\2))*\\r?\\n)?[\\t ]*\\2|'[^'\\r\\n]*'|\"(?:\\\\.|[^\\\\\"\\r\\n])*\")/,lookbehind:!0,greedy:!0},literal:{pattern:/(^|[[{(=:,\\s])(?:[^#\"',:=[\\]{}()\\s`-]|[:-][^\"',=[\\]{}()\\s])(?:[^,:=\\]})(\\s]|:(?![\\s,\\]})]|$)|[ \\t]+[^#,:=\\]})(\\s])*/,lookbehind:!0,alias:\"string\"},punctuation:/[,:=[\\]{}()-]/};&/components/prism-linker-script.min.js\u0001Prism.languages[\"linker-script\"]={comment:{pattern:/(^|\\s)\\/\\*[\\s\\S]*?(?:$|\\*\\/)/,lookbehind:!0,greedy:!0},identifier:{pattern:/\"[^\"\\r\\n]*\"/,greedy:!0},\"location-counter\":{pattern:/\\B\\.\\B/,alias:\"important\"},section:{pattern:/(^|[^\\w*])\\.\\w+\\b/,lookbehind:!0,alias:\"keyword\"},function:/\\b[A-Z][A-Z_]*(?=\\s*\\()/,number:/\\b(?:0[xX][a-fA-F0-9]+|\\d+)[KM]?\\b/,operator:/>>=?|<<=?|->|\\+\\+|--|&&|\\|\\||::|[?:~]|[-+*/%&|^!=<>]=?/,punctuation:/[(){},;]/},Prism.languages.ld=Prism.languages[\"linker-script\"];/components/prism-scala.min.js\u0005XPrism.languages.scala=Prism.languages.extend(\"java\",{\"triple-quoted-string\":{pattern:/\"\"\"[\\s\\S]*?\"\"\"/,greedy:!0,alias:\"string\"},string:{pattern:/(\"|')(?:\\\\.|(?!\\1)[^\\\\\\r\\n])*\\1/,greedy:!0},keyword:/<-|=>|\\b(?:abstract|case|catch|class|def|derives|do|else|enum|extends|extension|final|finally|for|forSome|given|if|implicit|import|infix|inline|lazy|match|new|null|object|opaque|open|override|package|private|protected|return|sealed|self|super|this|throw|trait|transparent|try|type|using|val|var|while|with|yield)\\b/,number:/\\b0x(?:[\\da-f]*\\.)?[\\da-f]+|(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:e\\d+)?[dfl]?/i,builtin:/\\b(?:Any|AnyRef|AnyVal|Boolean|Byte|Char|Double|Float|Int|Long|Nothing|Short|String|Unit)\\b/,symbol:/'[^\\d\\s\\\\]\\w*/}),Prism.languages.insertBefore(\"scala\",\"triple-quoted-string\",{\"string-interpolation\":{pattern:/\\b[a-z]\\w*(?:\"\"\"(?:[^$]|\\$(?:[^{]|\\{(?:[^{}]|\\{[^{}]*\\})*\\}))*?\"\"\"|\"(?:[^$\"\\r\\n]|\\$(?:[^{]|\\{(?:[^{}]|\\{[^{}]*\\})*\\}))*\")/i,greedy:!0,inside:{id:{pattern:/^\\w+/,greedy:!0,alias:\"function\"},escape:{pattern:/\\\\\\$\"|\\$[$\"]/,greedy:!0,alias:\"symbol\"},interpolation:{pattern:/\\$(?:\\w+|\\{(?:[^{}]|\\{[^{}]*\\})*\\})/,greedy:!0,inside:{punctuation:/^\\$\\{?|\\}$/,expression:{pattern:/[\\s\\S]+/,inside:Prism.languages.scala}}},string:/[\\s\\S]+/}}}),delete Prism.languages.scala[\"class-name\"],delete Prism.languages.scala.function,delete Prism.languages.scala.constant;'/components/prism-robotframework.min.js\u0005!function(t){var n={pattern:/(^[ \\t]*| {2}|\\t)#.*/m,lookbehind:!0,greedy:!0},e={pattern:/((?:^|[^\\\\])(?:\\\\{2})*)[$@&%]\\{(?:[^{}\\r\\n]|\\{[^{}\\r\\n]*\\})*\\}/,lookbehind:!0,inside:{punctuation:/^[$@&%]\\{|\\}$/}};function a(t,a){var r={\"section-header\":{pattern:/^ ?\\*{3}.+?\\*{3}/,alias:\"keyword\"}};for(var o in a)r[o]=a[o];return r.tag={pattern:/([\\r\\n](?: {2}|\\t)[ \\t]*)\\[[-\\w]+\\]/,lookbehind:!0,inside:{punctuation:/\\[|\\]/}},r.variable=e,r.comment=n,{pattern:RegExp(\"^ ?\\\\*{3}[ \\t]*<name>[ \\t]*\\\\*{3}(?:.|[\\r\\n](?!\\\\*{3}))*\".replace(/<name>/g,(function(){return t})),\"im\"),alias:\"section\",inside:r}}var r={pattern:/(\\[Documentation\\](?: {2}|\\t)[ \\t]*)(?![ \\t]|#)(?:.|(?:\\r\\n?|\\n)[ \\t]*\\.{3})+/,lookbehind:!0,alias:\"string\"},o={pattern:/([\\r\\n] ?)(?!#)(?:\\S(?:[ \\t]\\S)*)+/,lookbehind:!0,alias:\"function\",inside:{variable:e}},i={pattern:/([\\r\\n](?: {2}|\\t)[ \\t]*)(?!\\[|\\.{3}|#)(?:\\S(?:[ \\t]\\S)*)+/,lookbehind:!0,inside:{variable:e}};t.languages.robotframework={settings:a(\"Settings\",{documentation:{pattern:/([\\r\\n] ?Documentation(?: {2}|\\t)[ \\t]*)(?![ \\t]|#)(?:.|(?:\\r\\n?|\\n)[ \\t]*\\.{3})+/,lookbehind:!0,alias:\"string\"},property:{pattern:/([\\r\\n] ?)(?!\\.{3}|#)(?:\\S(?:[ \\t]\\S)*)+/,lookbehind:!0}}),variables:a(\"Variables\"),\"test-cases\":a(\"Test Cases\",{\"test-name\":o,documentation:r,property:i}),keywords:a(\"Keywords\",{\"keyword-name\":o,documentation:r,property:i}),tasks:a(\"Tasks\",{\"task-name\":o,documentation:r,property:i}),comment:n},t.languages.robot=t.languages.robotframework}(Prism); /components/prism-javadoclike.js\b(function (Prism) {\n\n\tvar javaDocLike = Prism.languages.javadoclike = {\n\t\t'parameter': {\n\t\t\tpattern: /(^[\\t ]*(?:\\/{3}|\\*|\\/\\*\\*)\\s*@(?:arg|arguments|param)\\s+)\\w+/m,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'keyword': {\n\t\t\t// keywords are the first word in a line preceded be an `@` or surrounded by curly braces.\n\t\t\t// @word, {@word}\n\t\t\tpattern: /(^[\\t ]*(?:\\/{3}|\\*|\\/\\*\\*)\\s*|\\{)@[a-z][a-zA-Z-]+\\b/m,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'punctuation': /[{}]/\n\t};\n\n\n\t/**\n\t * Adds doc comment support to the given language and calls a given callback on each doc comment pattern.\n\t *\n\t * @param {string} lang the language add doc comment support to.\n\t * @param {(pattern: {inside: {rest: undefined}}) => void} callback the function called with each doc comment pattern as argument.\n\t */\n\tfunction docCommentSupport(lang, callback) {\n\t\tvar tokenName = 'doc-comment';\n\n\t\tvar grammar = Prism.languages[lang];\n\t\tif (!grammar) {\n\t\t\treturn;\n\t\t}\n\t\tvar token = grammar[tokenName];\n\n\t\tif (!token) {\n\t\t\t// add doc comment: /** */\n\t\t\tvar definition = {};\n\t\t\tdefinition[tokenName] = {\n\t\t\t\tpattern: /(^|[^\\\\])\\/\\*\\*[^/][\\s\\S]*?(?:\\*\\/|$)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'comment'\n\t\t\t};\n\n\t\t\tgrammar = Prism.languages.insertBefore(lang, 'comment', definition);\n\t\t\ttoken = grammar[tokenName];\n\t\t}\n\n\t\tif (token instanceof RegExp) { // convert regex to object\n\t\t\ttoken = grammar[tokenName] = { pattern: token };\n\t\t}\n\n\t\tif (Array.isArray(token)) {\n\t\t\tfor (var i = 0, l = token.length; i < l; i++) {\n\t\t\t\tif (token[i] instanceof RegExp) {\n\t\t\t\t\ttoken[i] = { pattern: token[i] };\n\t\t\t\t}\n\t\t\t\tcallback(token[i]);\n\t\t\t}\n\t\t} else {\n\t\t\tcallback(token);\n\t\t}\n\t}\n\n\t/**\n\t * Adds doc-comment support to the given languages for the given documentation language.\n\t *\n\t * @param {string[]|string} languages\n\t * @param {Object} docLanguage\n\t */\n\tfunction addSupport(languages, docLanguage) {\n\t\tif (typeof languages === 'string') {\n\t\t\tlanguages = [languages];\n\t\t}\n\n\t\tlanguages.forEach(function (lang) {\n\t\t\tdocCommentSupport(lang, function (pattern) {\n\t\t\t\tif (!pattern.inside) {\n\t\t\t\t\tpattern.inside = {};\n\t\t\t\t}\n\t\t\t\tpattern.inside.rest = docLanguage;\n\t\t\t});\n\t\t});\n\t}\n\n\tObject.defineProperty(javaDocLike, 'addSupport', { value: addSupport });\n\n\tjavaDocLike.addSupport(['java', 'javascript', 'php'], javaDocLike);\n\n}(Prism));\n!/components/prism-avro-idl.min.js\u0003Prism.languages[\"avro-idl\"]={comment:{pattern:/\\/\\/.*|\\/\\*[\\s\\S]*?\\*\\//,greedy:!0},string:{pattern:/(^|[^\\\\])\"(?:[^\\r\\n\"\\\\]|\\\\.)*\"/,lookbehind:!0,greedy:!0},annotation:{pattern:/@(?:[$\\w.-]|`[^\\r\\n`]+`)+/,greedy:!0,alias:\"function\"},\"function-identifier\":{pattern:/`[^\\r\\n`]+`(?=\\s*\\()/,greedy:!0,alias:\"function\"},identifier:{pattern:/`[^\\r\\n`]+`/,greedy:!0},\"class-name\":{pattern:/(\\b(?:enum|error|protocol|record|throws)\\b\\s+)[$\\w]+/,lookbehind:!0,greedy:!0},keyword:/\\b(?:array|boolean|bytes|date|decimal|double|enum|error|false|fixed|float|idl|import|int|local_timestamp_ms|long|map|null|oneway|protocol|record|schema|string|throws|time_ms|timestamp_ms|true|union|uuid|void)\\b/,function:/\\b[a-z_]\\w*(?=\\s*\\()/i,number:[{pattern:/(^|[^\\w.])-?(?:(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?|0x(?:[a-f0-9]+(?:\\.[a-f0-9]*)?|\\.[a-f0-9]+)(?:p[+-]?\\d+)?)[dfl]?(?![\\w.])/i,lookbehind:!0},/-?\\b(?:Infinity|NaN)\\b/],operator:/=/,punctuation:/[()\\[\\]{}<>.:,;-]/},Prism.languages.avdl=Prism.languages[\"avro-idl\"];/components/prism-rip.js\u0003Prism.languages.rip = {\n\t'comment': {\n\t\tpattern: /#.*/,\n\t\tgreedy: true\n\t},\n\n\t'char': {\n\t\tpattern: /\\B`[^\\s`'\",.:;#\\/\\\\()<>\\[\\]{}]\\b/,\n\t\tgreedy: true\n\t},\n\t'string': {\n\t\tpattern: /(\"|')(?:\\\\.|(?!\\1)[^\\\\\\r\\n])*\\1/,\n\t\tgreedy: true\n\t},\n\n\t'regex': {\n\t\tpattern: /(^|[^/])\\/(?!\\/)(?:\\[[^\\n\\r\\]]*\\]|\\\\.|[^/\\\\\\r\\n\\[])+\\/(?=\\s*(?:$|[\\r\\n,.;})]))/,\n\t\tlookbehind: true,\n\t\tgreedy: true\n\t},\n\n\t'keyword': /(?:=>|->)|\\b(?:case|catch|class|else|exit|finally|if|raise|return|switch|try)\\b/,\n\n\t'builtin': /@|\\bSystem\\b/,\n\n\t'boolean': /\\b(?:false|true)\\b/,\n\n\t'date': /\\b\\d{4}-\\d{2}-\\d{2}\\b/,\n\t'time': /\\b\\d{2}:\\d{2}:\\d{2}\\b/,\n\t'datetime': /\\b\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\b/,\n\n\t'symbol': /:[^\\d\\s`'\",.:;#\\/\\\\()<>\\[\\]{}][^\\s`'\",.:;#\\/\\\\()<>\\[\\]{}]*/,\n\t'number': /[+-]?\\b(?:\\d+\\.\\d+|\\d+)\\b/,\n\n\t'punctuation': /(?:\\.{2,3})|[`,.:;=\\/\\\\()<>\\[\\]{}]/,\n\n\t'reference': /[^\\d\\s`'\",.:;#\\/\\\\()<>\\[\\]{}][^\\s`'\",.:;#\\/\\\\()<>\\[\\]{}]*/\n};\n/components/prism-io.min.js\u0006Prism.languages.io={comment:{pattern:/(^|[^\\\\])(?:\\/\\*[\\s\\S]*?(?:\\*\\/|$)|\\/\\/.*|#.*)/,lookbehind:!0,greedy:!0},\"triple-quoted-string\":{pattern:/\"\"\"(?:\\\\[\\s\\S]|(?!\"\"\")[^\\\\])*\"\"\"/,greedy:!0,alias:\"string\"},string:{pattern:/\"(?:\\\\.|[^\\\\\\r\\n\"])*\"/,greedy:!0},keyword:/\\b(?:activate|activeCoroCount|asString|block|break|call|catch|clone|collectGarbage|compileString|continue|do|doFile|doMessage|doString|else|elseif|exit|for|foreach|forward|getEnvironmentVariable|getSlot|hasSlot|if|ifFalse|ifNil|ifNilEval|ifTrue|isActive|isNil|isResumable|list|message|method|parent|pass|pause|perform|performWithArgList|print|println|proto|raise|raiseResumable|removeSlot|resend|resume|schedulerSleepSeconds|self|sender|setSchedulerSleepSeconds|setSlot|shallowCopy|slotNames|super|system|then|thisBlock|thisContext|try|type|uniqueId|updateSlot|wait|while|write|yield)\\b/,builtin:/\\b(?:Array|AudioDevice|AudioMixer|BigNum|Block|Box|Buffer|CFunction|CGI|Color|Curses|DBM|DNSResolver|DOConnection|DOProxy|DOServer|Date|Directory|Duration|DynLib|Error|Exception|FFT|File|Fnmatch|Font|Future|GL|GLE|GLScissor|GLU|GLUCylinder|GLUQuadric|GLUSphere|GLUT|Host|Image|Importer|LinkList|List|Lobby|Locals|MD5|MP3Decoder|MP3Encoder|Map|Message|Movie|Notification|Number|Object|OpenGL|Point|Protos|Random|Regex|SGML|SGMLElement|SGMLParser|SQLite|Sequence|Server|ShowMessage|SleepyCat|SleepyCatCursor|Socket|SocketManager|Sound|Soup|Store|String|Tree|UDPSender|UPDReceiver|URL|User|Warning|WeakLink)\\b/,boolean:/\\b(?:false|nil|true)\\b/,number:/\\b0x[\\da-f]+\\b|(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:e-?\\d+)?/i,operator:/[=!*/%+\\-^&|]=|>>?=?|<<?=?|:?:?=|\\+\\+?|--?|\\*\\*?|\\/\\/?|%|\\|\\|?|&&?|\\b(?:and|not|or|return)\\b|@@?|\\?\\??|\\.\\./,punctuation:/[{}[\\];(),.:]/};/components/prism-flow.min.js\u0003!function(a){a.languages.flow=a.languages.extend(\"javascript\",{}),a.languages.insertBefore(\"flow\",\"keyword\",{type:[{pattern:/\\b(?:[Bb]oolean|Function|[Nn]umber|[Ss]tring|[Ss]ymbol|any|mixed|null|void)\\b/,alias:\"class-name\"}]}),a.languages.flow[\"function-variable\"].pattern=/(?!\\s)[_$a-z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*=\\s*(?:function\\b|(?:\\([^()]*\\)(?:\\s*:\\s*\\w+)?|(?!\\s)[_$a-z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*)\\s*=>))/i,delete a.languages.flow.parameter,a.languages.insertBefore(\"flow\",\"operator\",{\"flow-punctuation\":{pattern:/\\{\\||\\|\\}/,alias:\"punctuation\"}}),Array.isArray(a.languages.flow.keyword)||(a.languages.flow.keyword=[a.languages.flow.keyword]),a.languages.flow.keyword.unshift({pattern:/(^|[^$]\\b)(?:Class|declare|opaque|type)\\b(?!\\$)/,lookbehind:!0},{pattern:/(^|[^$]\\B)\\$(?:Diff|Enum|Exact|Keys|ObjMap|PropertyType|Record|Shape|Subtype|Supertype|await)\\b(?!\\$)/,lookbehind:!0})}(Prism);8/plugins/unescaped-markup/prism-unescaped-markup.min.css[class*=lang-] script[type='text/plain'],[class*=language-] script[type='text/plain'],script[type='text/plain'][class*=lang-],script[type='text/plain'][class*=language-]{display:block;font:100% Consolas,Monaco,monospace;white-space:pre;overflow:auto}/components/prism-vim.js7Prism.languages.vim = {\n\t'string': /\"(?:[^\"\\\\\\r\\n]|\\\\.)*\"|'(?:[^'\\r\\n]|'')*'/,\n\t'comment': /\".*/,\n\t'function': /\\b\\w+(?=\\()/,\n\t'keyword': /\\b(?:N|Next|P|Print|X|XMLent|XMLns|ab|abbreviate|abc|abclear|abo|aboveleft|al|all|ar|arga|argadd|argd|argdelete|argdo|arge|argedit|argg|argglobal|argl|arglocal|args|argu|argument|as|ascii|b|bN|bNext|ba|bad|badd|ball|bd|bdelete|be|bel|belowright|bf|bfirst|bl|blast|bm|bmodified|bn|bnext|bo|botright|bp|bprevious|br|brea|break|breaka|breakadd|breakd|breakdel|breakl|breaklist|brewind|bro|browse|bufdo|buffer|buffers|bun|bunload|bw|bwipeout|c|cN|cNext|cNfcNfile|ca|cabbrev|cabc|cabclear|cad|caddb|caddbuffer|caddexpr|caddf|caddfile|cal|call|cat|catch|cb|cbuffer|cc|ccl|cclose|cd|ce|center|cex|cexpr|cf|cfile|cfir|cfirst|cg|cgetb|cgetbuffer|cgete|cgetexpr|cgetfile|change|changes|chd|chdir|che|checkpath|checkt|checktime|cl|cla|clast|clist|clo|close|cmapc|cmapclear|cn|cnew|cnewer|cnext|cnf|cnfile|cnorea|cnoreabbrev|co|col|colder|colo|colorscheme|comc|comclear|comp|compiler|con|conf|confirm|continue|cope|copen|copy|cp|cpf|cpfile|cprevious|cq|cquit|cr|crewind|cu|cuna|cunabbrev|cunmap|cw|cwindow|d|debugg|debuggreedy|delc|delcommand|delete|delf|delfunction|delm|delmarks|di|diffg|diffget|diffoff|diffpatch|diffpu|diffput|diffsplit|diffthis|diffu|diffupdate|dig|digraphs|display|dj|djump|dl|dlist|dr|drop|ds|dsearch|dsp|dsplit|e|earlier|echoe|echoerr|echom|echomsg|echon|edit|el|else|elsei|elseif|em|emenu|en|endf|endfo|endfor|endfun|endfunction|endif|endt|endtry|endw|endwhile|ene|enew|ex|exi|exit|exu|exusage|f|file|files|filetype|fin|fina|finally|find|fini|finish|fir|first|fix|fixdel|fo|fold|foldc|foldclose|foldd|folddoc|folddoclosed|folddoopen|foldo|foldopen|for|fu|fun|function|go|goto|gr|grep|grepa|grepadd|h|ha|hardcopy|help|helpf|helpfind|helpg|helpgrep|helpt|helptags|hid|hide|his|history|ia|iabbrev|iabc|iabclear|if|ij|ijump|il|ilist|imapc|imapclear|in|inorea|inoreabbrev|isearch|isp|isplit|iu|iuna|iunabbrev|iunmap|j|join|ju|jumps|k|kee|keepalt|keepj|keepjumps|keepmarks|l|lN|lNext|lNf|lNfile|la|lad|laddb|laddbuffer|laddexpr|laddf|laddfile|lan|language|last|later|lb|lbuffer|lc|lcd|lch|lchdir|lcl|lclose|left|lefta|leftabove|let|lex|lexpr|lf|lfile|lfir|lfirst|lg|lgetb|lgetbuffer|lgete|lgetexpr|lgetfile|lgr|lgrep|lgrepa|lgrepadd|lh|lhelpgrep|list|ll|lla|llast|lli|llist|lm|lmak|lmake|lmap|lmapc|lmapclear|ln|lne|lnew|lnewer|lnext|lnf|lnfile|lnoremap|lo|loadview|loc|lockmarks|lockv|lockvar|lol|lolder|lop|lopen|lp|lpf|lpfile|lprevious|lr|lrewind|ls|lt|ltag|lu|lunmap|lv|lvimgrep|lvimgrepa|lvimgrepadd|lw|lwindow|m|ma|mak|make|mark|marks|mat|match|menut|menutranslate|mk|mkexrc|mks|mksession|mksp|mkspell|mkv|mkvie|mkview|mkvimrc|mod|mode|move|mz|mzf|mzfile|mzscheme|n|nbkey|new|next|nmapc|nmapclear|noh|nohlsearch|norea|noreabbrev|nu|number|nun|nunmap|o|omapc|omapclear|on|only|open|opt|options|ou|ounmap|p|pc|pclose|pe|ped|pedit|perl|perld|perldo|po|pop|popu|popup|pp|ppop|pre|preserve|prev|previous|print|prof|profd|profdel|profile|promptf|promptfind|promptr|promptrepl|ps|psearch|ptN|ptNext|pta|ptag|ptf|ptfirst|ptj|ptjump|ptl|ptlast|ptn|ptnext|ptp|ptprevious|ptr|ptrewind|pts|ptselect|pu|put|pw|pwd|py|pyf|pyfile|python|q|qa|qall|quit|quita|quitall|r|read|rec|recover|red|redi|redir|redo|redr|redraw|redraws|redrawstatus|reg|registers|res|resize|ret|retab|retu|return|rew|rewind|ri|right|rightb|rightbelow|ru|rub|ruby|rubyd|rubydo|rubyf|rubyfile|runtime|rv|rviminfo|sN|sNext|sa|sal|sall|san|sandbox|sargument|sav|saveas|sb|sbN|sbNext|sba|sball|sbf|sbfirst|sbl|sblast|sbm|sbmodified|sbn|sbnext|sbp|sbprevious|sbr|sbrewind|sbuffer|scrip|scripte|scriptencoding|scriptnames|se|set|setf|setfiletype|setg|setglobal|setl|setlocal|sf|sfind|sfir|sfirst|sh|shell|sign|sil|silent|sim|simalt|sl|sla|slast|sleep|sm|smagic|smap|smapc|smapclear|sme|smenu|sn|snext|sni|sniff|sno|snomagic|snor|snoremap|snoreme|snoremenu|so|sor|sort|source|sp|spe|spelld|spelldump|spellgood|spelli|spellinfo|spellr|spellrepall|spellu|spellundo|spellw|spellwrong|split|spr|sprevious|sre|srewind|st|sta|stag|star|startg|startgreplace|startinsert|startr|startreplace|stj|stjump|stop|stopi|stopinsert|sts|stselect|sun|sunhide|sunm|sunmap|sus|suspend|sv|sview|syncbind|t|tN|tNext|ta|tab|tabN|tabNext|tabc|tabclose|tabd|tabdo|tabe|tabedit|tabf|tabfind|tabfir|tabfirst|tabl|tablast|tabm|tabmove|tabn|tabnew|tabnext|tabo|tabonly|tabp|tabprevious|tabr|tabrewind|tabs|tag|tags|tc|tcl|tcld|tcldo|tclf|tclfile|te|tearoff|tf|tfirst|th|throw|tj|tjump|tl|tlast|tm|tmenu|tn|tnext|to|topleft|tp|tprevious|tr|trewind|try|ts|tselect|tu|tunmenu|u|una|unabbreviate|undo|undoj|undojoin|undol|undolist|unh|unhide|unlet|unlo|unlockvar|unm|unmap|up|update|ve|verb|verbose|version|vert|vertical|vi|vie|view|vim|vimgrep|vimgrepa|vimgrepadd|visual|viu|viusage|vmapc|vmapclear|vne|vnew|vs|vsplit|vu|vunmap|w|wN|wNext|wa|wall|wh|while|win|winc|wincmd|windo|winp|winpos|winsize|wn|wnext|wp|wprevious|wq|wqa|wqall|write|ws|wsverb|wv|wviminfo|x|xa|xall|xit|xm|xmap|xmapc|xmapclear|xme|xmenu|xn|xnoremap|xnoreme|xnoremenu|xu|xunmap|y|yank)\\b/,\n\t'builtin': /\\b(?:acd|ai|akm|aleph|allowrevins|altkeymap|ambiwidth|ambw|anti|antialias|arab|arabic|arabicshape|ari|arshape|autochdir|autocmd|autoindent|autoread|autowrite|autowriteall|aw|awa|background|backspace|backup|backupcopy|backupdir|backupext|backupskip|balloondelay|ballooneval|balloonexpr|bdir|bdlay|beval|bex|bexpr|bg|bh|bin|binary|biosk|bioskey|bk|bkc|bomb|breakat|brk|browsedir|bs|bsdir|bsk|bt|bufhidden|buflisted|buftype|casemap|ccv|cdpath|cedit|cfu|ch|charconvert|ci|cin|cindent|cink|cinkeys|cino|cinoptions|cinw|cinwords|clipboard|cmdheight|cmdwinheight|cmp|cms|columns|com|comments|commentstring|compatible|complete|completefunc|completeopt|consk|conskey|copyindent|cot|cpo|cpoptions|cpt|cscopepathcomp|cscopeprg|cscopequickfix|cscopetag|cscopetagorder|cscopeverbose|cspc|csprg|csqf|cst|csto|csverb|cuc|cul|cursorcolumn|cursorline|cwh|debug|deco|def|define|delcombine|dex|dg|dict|dictionary|diff|diffexpr|diffopt|digraph|dip|dir|directory|dy|ea|ead|eadirection|eb|ed|edcompatible|ef|efm|ei|ek|enc|encoding|endofline|eol|ep|equalalways|equalprg|errorbells|errorfile|errorformat|esckeys|et|eventignore|expandtab|exrc|fcl|fcs|fdc|fde|fdi|fdl|fdls|fdm|fdn|fdo|fdt|fen|fenc|fencs|fex|ff|ffs|fileencoding|fileencodings|fileformat|fileformats|fillchars|fk|fkmap|flp|fml|fmr|foldcolumn|foldenable|foldexpr|foldignore|foldlevel|foldlevelstart|foldmarker|foldmethod|foldminlines|foldnestmax|foldtext|formatexpr|formatlistpat|formatoptions|formatprg|fp|fs|fsync|ft|gcr|gd|gdefault|gfm|gfn|gfs|gfw|ghr|gp|grepformat|grepprg|gtl|gtt|guicursor|guifont|guifontset|guifontwide|guiheadroom|guioptions|guipty|guitablabel|guitabtooltip|helpfile|helpheight|helplang|hf|hh|hi|hidden|highlight|hk|hkmap|hkmapp|hkp|hl|hlg|hls|hlsearch|ic|icon|iconstring|ignorecase|im|imactivatekey|imak|imc|imcmdline|imd|imdisable|imi|iminsert|ims|imsearch|inc|include|includeexpr|incsearch|inde|indentexpr|indentkeys|indk|inex|inf|infercase|insertmode|invacd|invai|invakm|invallowrevins|invaltkeymap|invanti|invantialias|invar|invarab|invarabic|invarabicshape|invari|invarshape|invautochdir|invautoindent|invautoread|invautowrite|invautowriteall|invaw|invawa|invbackup|invballooneval|invbeval|invbin|invbinary|invbiosk|invbioskey|invbk|invbl|invbomb|invbuflisted|invcf|invci|invcin|invcindent|invcompatible|invconfirm|invconsk|invconskey|invcopyindent|invcp|invcscopetag|invcscopeverbose|invcst|invcsverb|invcuc|invcul|invcursorcolumn|invcursorline|invdeco|invdelcombine|invdg|invdiff|invdigraph|invdisable|invea|inveb|inved|invedcompatible|invek|invendofline|inveol|invequalalways|inverrorbells|invesckeys|invet|invex|invexpandtab|invexrc|invfen|invfk|invfkmap|invfoldenable|invgd|invgdefault|invguipty|invhid|invhidden|invhk|invhkmap|invhkmapp|invhkp|invhls|invhlsearch|invic|invicon|invignorecase|invim|invimc|invimcmdline|invimd|invincsearch|invinf|invinfercase|invinsertmode|invis|invjoinspaces|invjs|invlazyredraw|invlbr|invlinebreak|invlisp|invlist|invloadplugins|invlpl|invlz|invma|invmacatsui|invmagic|invmh|invml|invmod|invmodeline|invmodifiable|invmodified|invmore|invmousef|invmousefocus|invmousehide|invnu|invnumber|invodev|invopendevice|invpaste|invpi|invpreserveindent|invpreviewwindow|invprompt|invpvw|invreadonly|invremap|invrestorescreen|invrevins|invri|invrightleft|invrightleftcmd|invrl|invrlc|invro|invrs|invru|invruler|invsb|invsc|invscb|invscrollbind|invscs|invsecure|invsft|invshellslash|invshelltemp|invshiftround|invshortname|invshowcmd|invshowfulltag|invshowmatch|invshowmode|invsi|invsm|invsmartcase|invsmartindent|invsmarttab|invsmd|invsn|invsol|invspell|invsplitbelow|invsplitright|invspr|invsr|invssl|invsta|invstartofline|invstmp|invswapfile|invswf|invta|invtagbsearch|invtagrelative|invtagstack|invtbi|invtbidi|invtbs|invtermbidi|invterse|invtextauto|invtextmode|invtf|invtgst|invtildeop|invtimeout|invtitle|invto|invtop|invtr|invttimeout|invttybuiltin|invttyfast|invtx|invvb|invvisualbell|invwa|invwarn|invwb|invweirdinvert|invwfh|invwfw|invwildmenu|invwinfixheight|invwinfixwidth|invwiv|invwmnu|invwrap|invwrapscan|invwrite|invwriteany|invwritebackup|invws|isf|isfname|isi|isident|isk|iskeyword|isprint|joinspaces|js|key|keymap|keymodel|keywordprg|km|kmp|kp|langmap|langmenu|laststatus|lazyredraw|lbr|lcs|linebreak|lines|linespace|lisp|lispwords|listchars|loadplugins|lpl|lsp|lz|macatsui|magic|makeef|makeprg|matchpairs|matchtime|maxcombine|maxfuncdepth|maxmapdepth|maxmem|maxmempattern|maxmemtot|mco|mef|menuitems|mfd|mh|mis|mkspellmem|ml|mls|mm|mmd|mmp|mmt|modeline|modelines|modifiable|modified|more|mouse|mousef|mousefocus|mousehide|mousem|mousemodel|mouses|mouseshape|mouset|mousetime|mp|mps|msm|mzq|mzquantum|nf|noacd|noai|noakm|noallowrevins|noaltkeymap|noanti|noantialias|noar|noarab|noarabic|noarabicshape|noari|noarshape|noautochdir|noautoindent|noautoread|noautowrite|noautowriteall|noaw|noawa|nobackup|noballooneval|nobeval|nobin|nobinary|nobiosk|nobioskey|nobk|nobl|nobomb|nobuflisted|nocf|noci|nocin|nocindent|nocompatible|noconfirm|noconsk|noconskey|nocopyindent|nocp|nocscopetag|nocscopeverbose|nocst|nocsverb|nocuc|nocul|nocursorcolumn|nocursorline|nodeco|nodelcombine|nodg|nodiff|nodigraph|nodisable|noea|noeb|noed|noedcompatible|noek|noendofline|noeol|noequalalways|noerrorbells|noesckeys|noet|noex|noexpandtab|noexrc|nofen|nofk|nofkmap|nofoldenable|nogd|nogdefault|noguipty|nohid|nohidden|nohk|nohkmap|nohkmapp|nohkp|nohls|noic|noicon|noignorecase|noim|noimc|noimcmdline|noimd|noincsearch|noinf|noinfercase|noinsertmode|nois|nojoinspaces|nojs|nolazyredraw|nolbr|nolinebreak|nolisp|nolist|noloadplugins|nolpl|nolz|noma|nomacatsui|nomagic|nomh|noml|nomod|nomodeline|nomodifiable|nomodified|nomore|nomousef|nomousefocus|nomousehide|nonu|nonumber|noodev|noopendevice|nopaste|nopi|nopreserveindent|nopreviewwindow|noprompt|nopvw|noreadonly|noremap|norestorescreen|norevins|nori|norightleft|norightleftcmd|norl|norlc|noro|nors|noru|noruler|nosb|nosc|noscb|noscrollbind|noscs|nosecure|nosft|noshellslash|noshelltemp|noshiftround|noshortname|noshowcmd|noshowfulltag|noshowmatch|noshowmode|nosi|nosm|nosmartcase|nosmartindent|nosmarttab|nosmd|nosn|nosol|nospell|nosplitbelow|nosplitright|nospr|nosr|nossl|nosta|nostartofline|nostmp|noswapfile|noswf|nota|notagbsearch|notagrelative|notagstack|notbi|notbidi|notbs|notermbidi|noterse|notextauto|notextmode|notf|notgst|notildeop|notimeout|notitle|noto|notop|notr|nottimeout|nottybuiltin|nottyfast|notx|novb|novisualbell|nowa|nowarn|nowb|noweirdinvert|nowfh|nowfw|nowildmenu|nowinfixheight|nowinfixwidth|nowiv|nowmnu|nowrap|nowrapscan|nowrite|nowriteany|nowritebackup|nows|nrformats|numberwidth|nuw|odev|oft|ofu|omnifunc|opendevice|operatorfunc|opfunc|osfiletype|pa|para|paragraphs|paste|pastetoggle|patchexpr|patchmode|path|pdev|penc|pex|pexpr|pfn|ph|pheader|pi|pm|pmbcs|pmbfn|popt|preserveindent|previewheight|previewwindow|printdevice|printencoding|printexpr|printfont|printheader|printmbcharset|printmbfont|printoptions|prompt|pt|pumheight|pvh|pvw|qe|quoteescape|readonly|remap|report|restorescreen|revins|rightleft|rightleftcmd|rl|rlc|ro|rs|rtp|ruf|ruler|rulerformat|runtimepath|sbo|sc|scb|scr|scroll|scrollbind|scrolljump|scrolloff|scrollopt|scs|sect|sections|secure|sel|selection|selectmode|sessionoptions|sft|shcf|shellcmdflag|shellpipe|shellquote|shellredir|shellslash|shelltemp|shelltype|shellxquote|shiftround|shiftwidth|shm|shortmess|shortname|showbreak|showcmd|showfulltag|showmatch|showmode|showtabline|shq|si|sidescroll|sidescrolloff|siso|sj|slm|smartcase|smartindent|smarttab|smc|smd|softtabstop|sol|spc|spell|spellcapcheck|spellfile|spelllang|spellsuggest|spf|spl|splitbelow|splitright|sps|sr|srr|ss|ssl|ssop|stal|startofline|statusline|stl|stmp|su|sua|suffixes|suffixesadd|sw|swapfile|swapsync|swb|swf|switchbuf|sws|sxq|syn|synmaxcol|syntax|t_AB|t_AF|t_AL|t_CS|t_CV|t_Ce|t_Co|t_Cs|t_DL|t_EI|t_F1|t_F2|t_F3|t_F4|t_F5|t_F6|t_F7|t_F8|t_F9|t_IE|t_IS|t_K1|t_K3|t_K4|t_K5|t_K6|t_K7|t_K8|t_K9|t_KA|t_KB|t_KC|t_KD|t_KE|t_KF|t_KG|t_KH|t_KI|t_KJ|t_KK|t_KL|t_RI|t_RV|t_SI|t_Sb|t_Sf|t_WP|t_WS|t_ZH|t_ZR|t_al|t_bc|t_cd|t_ce|t_cl|t_cm|t_cs|t_da|t_db|t_dl|t_fs|t_k1|t_k2|t_k3|t_k4|t_k5|t_k6|t_k7|t_k8|t_k9|t_kB|t_kD|t_kI|t_kN|t_kP|t_kb|t_kd|t_ke|t_kh|t_kl|t_kr|t_ks|t_ku|t_le|t_mb|t_md|t_me|t_mr|t_ms|t_nd|t_op|t_se|t_so|t_sr|t_te|t_ti|t_ts|t_ue|t_us|t_ut|t_vb|t_ve|t_vi|t_vs|t_xs|tabline|tabpagemax|tabstop|tagbsearch|taglength|tagrelative|tagstack|tal|tb|tbi|tbidi|tbis|tbs|tenc|term|termbidi|termencoding|terse|textauto|textmode|textwidth|tgst|thesaurus|tildeop|timeout|timeoutlen|title|titlelen|titleold|titlestring|toolbar|toolbariconsize|top|tpm|tsl|tsr|ttimeout|ttimeoutlen|ttm|tty|ttybuiltin|ttyfast|ttym|ttymouse|ttyscroll|ttytype|tw|tx|uc|ul|undolevels|updatecount|updatetime|ut|vb|vbs|vdir|verbosefile|vfile|viewdir|viewoptions|viminfo|virtualedit|visualbell|vop|wak|warn|wb|wc|wcm|wd|weirdinvert|wfh|wfw|whichwrap|wi|wig|wildchar|wildcharm|wildignore|wildmenu|wildmode|wildoptions|wim|winaltkeys|window|winfixheight|winfixwidth|winheight|winminheight|winminwidth|winwidth|wiv|wiw|wm|wmh|wmnu|wmw|wop|wrap|wrapmargin|wrapscan|writeany|writebackup|writedelay|ww)\\b/,\n\t'number': /\\b(?:0x[\\da-f]+|\\d+(?:\\.\\d+)?)\\b/i,\n\t'operator': /\\|\\||&&|[-+.]=?|[=!](?:[=~][#?]?)?|[<>]=?[#?]?|[*\\/%?]|\\b(?:is(?:not)?)\\b/,\n\t'punctuation': /[{}[\\](),;:]/\n};\n#/components/prism-moonscript.min.js\b\u0001Prism.languages.moonscript={comment:/--.*/,string:[{pattern:/'[^']*'|\\[(=*)\\[[\\s\\S]*?\\]\\1\\]/,greedy:!0},{pattern:/\"[^\"]*\"/,greedy:!0,inside:{interpolation:{pattern:/#\\{[^{}]*\\}/,inside:{moonscript:{pattern:/(^#\\{)[\\s\\S]+(?=\\})/,lookbehind:!0,inside:null},\"interpolation-punctuation\":{pattern:/#\\{|\\}/,alias:\"punctuation\"}}}}}],\"class-name\":[{pattern:/(\\b(?:class|extends)[ \\t]+)\\w+/,lookbehind:!0},/\\b[A-Z]\\w*/],keyword:/\\b(?:class|continue|do|else|elseif|export|extends|for|from|if|import|in|local|nil|return|self|super|switch|then|unless|using|when|while|with)\\b/,variable:/@@?\\w*/,property:{pattern:/\\b(?!\\d)\\w+(?=:)|(:)(?!\\d)\\w+/,lookbehind:!0},function:{pattern:/\\b(?:_G|_VERSION|assert|collectgarbage|coroutine\\.(?:create|resume|running|status|wrap|yield)|debug\\.(?:debug|getfenv|gethook|getinfo|getlocal|getmetatable|getregistry|getupvalue|setfenv|sethook|setlocal|setmetatable|setupvalue|traceback)|dofile|error|getfenv|getmetatable|io\\.(?:close|flush|input|lines|open|output|popen|read|stderr|stdin|stdout|tmpfile|type|write)|ipairs|load|loadfile|loadstring|math\\.(?:abs|acos|asin|atan|atan2|ceil|cos|cosh|deg|exp|floor|fmod|frexp|ldexp|log|log10|max|min|modf|pi|pow|rad|random|randomseed|sin|sinh|sqrt|tan|tanh)|module|next|os\\.(?:clock|date|difftime|execute|exit|getenv|remove|rename|setlocale|time|tmpname)|package\\.(?:cpath|loaded|loadlib|path|preload|seeall)|pairs|pcall|print|rawequal|rawget|rawset|require|select|setfenv|setmetatable|string\\.(?:byte|char|dump|find|format|gmatch|gsub|len|lower|match|rep|reverse|sub|upper)|table\\.(?:concat|insert|maxn|remove|sort)|tonumber|tostring|type|unpack|xpcall)\\b/,inside:{punctuation:/\\./}},boolean:/\\b(?:false|true)\\b/,number:/(?:\\B\\.\\d+|\\b\\d+\\.\\d+|\\b\\d+(?=[eE]))(?:[eE][-+]?\\d+)?\\b|\\b(?:0x[a-fA-F\\d]+|\\d+)(?:U?LL)?\\b/,operator:/\\.{3}|[-=]>|~=|(?:[-+*/%<>!=]|\\.\\.)=?|[:#^]|\\b(?:and|or)\\b=?|\\b(?:not)\\b/,punctuation:/[.,()[\\]{}\\\\]/},Prism.languages.moonscript.string[1].inside.interpolation.inside.moonscript.inside=Prism.languages.moonscript,Prism.languages.moon=Prism.languages.moonscript;/prism.jsV\n/* **********************************************\n     Begin prism-core.js\n********************************************** */\n\n/// <reference lib=\"WebWorker\"/>\n\nvar _self = (typeof window !== 'undefined')\n\t? window   // if in browser\n\t: (\n\t\t(typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope)\n\t\t\t? self // if in worker\n\t\t\t: {}   // if in node js\n\t);\n\n/**\n * Prism: Lightweight, robust, elegant syntax highlighting\n *\n * @license MIT <https://opensource.org/licenses/MIT>\n * @author Lea Verou <https://lea.verou.me>\n * @namespace\n * @public\n */\nvar Prism = (function (_self) {\n\n\t// Private helper vars\n\tvar lang = /(?:^|\\s)lang(?:uage)?-([\\w-]+)(?=\\s|$)/i;\n\tvar uniqueId = 0;\n\n\t// The grammar object for plaintext\n\tvar plainTextGrammar = {};\n\n\n\tvar _ = {\n\t\t/**\n\t\t * By default, Prism will attempt to highlight all code elements (by calling {@link Prism.highlightAll}) on the\n\t\t * current page after the page finished loading. This might be a problem if e.g. you wanted to asynchronously load\n\t\t * additional languages or plugins yourself.\n\t\t *\n\t\t * By setting this value to `true`, Prism will not automatically highlight all code elements on the page.\n\t\t *\n\t\t * You obviously have to change this value before the automatic highlighting started. To do this, you can add an\n\t\t * empty Prism object into the global scope before loading the Prism script like this:\n\t\t *\n\t\t * ```js\n\t\t * window.Prism = window.Prism || {};\n\t\t * Prism.manual = true;\n\t\t * // add a new <script> to load Prism's script\n\t\t * ```\n\t\t *\n\t\t * @default false\n\t\t * @type {boolean}\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\tmanual: _self.Prism && _self.Prism.manual,\n\t\t/**\n\t\t * By default, if Prism is in a web worker, it assumes that it is in a worker it created itself, so it uses\n\t\t * `addEventListener` to communicate with its parent instance. However, if you're using Prism manually in your\n\t\t * own worker, you don't want it to do this.\n\t\t *\n\t\t * By setting this value to `true`, Prism will not add its own listeners to the worker.\n\t\t *\n\t\t * You obviously have to change this value before Prism executes. To do this, you can add an\n\t\t * empty Prism object into the global scope before loading the Prism script like this:\n\t\t *\n\t\t * ```js\n\t\t * window.Prism = window.Prism || {};\n\t\t * Prism.disableWorkerMessageHandler = true;\n\t\t * // Load Prism's script\n\t\t * ```\n\t\t *\n\t\t * @default false\n\t\t * @type {boolean}\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\tdisableWorkerMessageHandler: _self.Prism && _self.Prism.disableWorkerMessageHandler,\n\n\t\t/**\n\t\t * A namespace for utility methods.\n\t\t *\n\t\t * All function in this namespace that are not explicitly marked as _public_ are for __internal use only__ and may\n\t\t * change or disappear at any time.\n\t\t *\n\t\t * @namespace\n\t\t * @memberof Prism\n\t\t */\n\t\tutil: {\n\t\t\tencode: function encode(tokens) {\n\t\t\t\tif (tokens instanceof Token) {\n\t\t\t\t\treturn new Token(tokens.type, encode(tokens.content), tokens.alias);\n\t\t\t\t} else if (Array.isArray(tokens)) {\n\t\t\t\t\treturn tokens.map(encode);\n\t\t\t\t} else {\n\t\t\t\t\treturn tokens.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/\\u00a0/g, ' ');\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns the name of the type of the given value.\n\t\t\t *\n\t\t\t * @param {any} o\n\t\t\t * @returns {string}\n\t\t\t * @example\n\t\t\t * type(null)      === 'Null'\n\t\t\t * type(undefined) === 'Undefined'\n\t\t\t * type(123)       === 'Number'\n\t\t\t * type('foo')     === 'String'\n\t\t\t * type(true)      === 'Boolean'\n\t\t\t * type([1, 2])    === 'Array'\n\t\t\t * type({})        === 'Object'\n\t\t\t * type(String)    === 'Function'\n\t\t\t * type(/abc+/)    === 'RegExp'\n\t\t\t */\n\t\t\ttype: function (o) {\n\t\t\t\treturn Object.prototype.toString.call(o).slice(8, -1);\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns a unique number for the given object. Later calls will still return the same number.\n\t\t\t *\n\t\t\t * @param {Object} obj\n\t\t\t * @returns {number}\n\t\t\t */\n\t\t\tobjId: function (obj) {\n\t\t\t\tif (!obj['__id']) {\n\t\t\t\t\tObject.defineProperty(obj, '__id', { value: ++uniqueId });\n\t\t\t\t}\n\t\t\t\treturn obj['__id'];\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Creates a deep clone of the given object.\n\t\t\t *\n\t\t\t * The main intended use of this function is to clone language definitions.\n\t\t\t *\n\t\t\t * @param {T} o\n\t\t\t * @param {Record<number, any>} [visited]\n\t\t\t * @returns {T}\n\t\t\t * @template T\n\t\t\t */\n\t\t\tclone: function deepClone(o, visited) {\n\t\t\t\tvisited = visited || {};\n\n\t\t\t\tvar clone; var id;\n\t\t\t\tswitch (_.util.type(o)) {\n\t\t\t\t\tcase 'Object':\n\t\t\t\t\t\tid = _.util.objId(o);\n\t\t\t\t\t\tif (visited[id]) {\n\t\t\t\t\t\t\treturn visited[id];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tclone = /** @type {Record<string, any>} */ ({});\n\t\t\t\t\t\tvisited[id] = clone;\n\n\t\t\t\t\t\tfor (var key in o) {\n\t\t\t\t\t\t\tif (o.hasOwnProperty(key)) {\n\t\t\t\t\t\t\t\tclone[key] = deepClone(o[key], visited);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn /** @type {any} */ (clone);\n\n\t\t\t\t\tcase 'Array':\n\t\t\t\t\t\tid = _.util.objId(o);\n\t\t\t\t\t\tif (visited[id]) {\n\t\t\t\t\t\t\treturn visited[id];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t\tvisited[id] = clone;\n\n\t\t\t\t\t\t(/** @type {Array} */(/** @type {any} */(o))).forEach(function (v, i) {\n\t\t\t\t\t\t\tclone[i] = deepClone(v, visited);\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\treturn /** @type {any} */ (clone);\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn o;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns the Prism language of the given element set by a `language-xxxx` or `lang-xxxx` class.\n\t\t\t *\n\t\t\t * If no language is set for the element or the element is `null` or `undefined`, `none` will be returned.\n\t\t\t *\n\t\t\t * @param {Element} element\n\t\t\t * @returns {string}\n\t\t\t */\n\t\t\tgetLanguage: function (element) {\n\t\t\t\twhile (element) {\n\t\t\t\t\tvar m = lang.exec(element.className);\n\t\t\t\t\tif (m) {\n\t\t\t\t\t\treturn m[1].toLowerCase();\n\t\t\t\t\t}\n\t\t\t\t\telement = element.parentElement;\n\t\t\t\t}\n\t\t\t\treturn 'none';\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Sets the Prism `language-xxxx` class of the given element.\n\t\t\t *\n\t\t\t * @param {Element} element\n\t\t\t * @param {string} language\n\t\t\t * @returns {void}\n\t\t\t */\n\t\t\tsetLanguage: function (element, language) {\n\t\t\t\t// remove all `language-xxxx` classes\n\t\t\t\t// (this might leave behind a leading space)\n\t\t\t\telement.className = element.className.replace(RegExp(lang, 'gi'), '');\n\n\t\t\t\t// add the new `language-xxxx` class\n\t\t\t\t// (using `classList` will automatically clean up spaces for us)\n\t\t\t\telement.classList.add('language-' + language);\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns the script element that is currently executing.\n\t\t\t *\n\t\t\t * This does __not__ work for line script element.\n\t\t\t *\n\t\t\t * @returns {HTMLScriptElement | null}\n\t\t\t */\n\t\t\tcurrentScript: function () {\n\t\t\t\tif (typeof document === 'undefined') {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\tif ('currentScript' in document && 1 < 2 /* hack to trip TS' flow analysis */) {\n\t\t\t\t\treturn /** @type {any} */ (document.currentScript);\n\t\t\t\t}\n\n\t\t\t\t// IE11 workaround\n\t\t\t\t// we'll get the src of the current script by parsing IE11's error stack trace\n\t\t\t\t// this will not work for inline scripts\n\n\t\t\t\ttry {\n\t\t\t\t\tthrow new Error();\n\t\t\t\t} catch (err) {\n\t\t\t\t\t// Get file src url from stack. Specifically works with the format of stack traces in IE.\n\t\t\t\t\t// A stack will look like this:\n\t\t\t\t\t//\n\t\t\t\t\t// Error\n\t\t\t\t\t//    at _.util.currentScript (http://localhost/components/prism-core.js:119:5)\n\t\t\t\t\t//    at Global code (http://localhost/components/prism-core.js:606:1)\n\n\t\t\t\t\tvar src = (/at [^(\\r\\n]*\\((.*):[^:]+:[^:]+\\)$/i.exec(err.stack) || [])[1];\n\t\t\t\t\tif (src) {\n\t\t\t\t\t\tvar scripts = document.getElementsByTagName('script');\n\t\t\t\t\t\tfor (var i in scripts) {\n\t\t\t\t\t\t\tif (scripts[i].src == src) {\n\t\t\t\t\t\t\t\treturn scripts[i];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns whether a given class is active for `element`.\n\t\t\t *\n\t\t\t * The class can be activated if `element` or one of its ancestors has the given class and it can be deactivated\n\t\t\t * if `element` or one of its ancestors has the negated version of the given class. The _negated version_ of the\n\t\t\t * given class is just the given class with a `no-` prefix.\n\t\t\t *\n\t\t\t * Whether the class is active is determined by the closest ancestor of `element` (where `element` itself is\n\t\t\t * closest ancestor) that has the given class or the negated version of it. If neither `element` nor any of its\n\t\t\t * ancestors have the given class or the negated version of it, then the default activation will be returned.\n\t\t\t *\n\t\t\t * In the paradoxical situation where the closest ancestor contains __both__ the given class and the negated\n\t\t\t * version of it, the class is considered active.\n\t\t\t *\n\t\t\t * @param {Element} element\n\t\t\t * @param {string} className\n\t\t\t * @param {boolean} [defaultActivation=false]\n\t\t\t * @returns {boolean}\n\t\t\t */\n\t\t\tisActive: function (element, className, defaultActivation) {\n\t\t\t\tvar no = 'no-' + className;\n\n\t\t\t\twhile (element) {\n\t\t\t\t\tvar classList = element.classList;\n\t\t\t\t\tif (classList.contains(className)) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\tif (classList.contains(no)) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\telement = element.parentElement;\n\t\t\t\t}\n\t\t\t\treturn !!defaultActivation;\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * This namespace contains all currently loaded languages and the some helper functions to create and modify languages.\n\t\t *\n\t\t * @namespace\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\tlanguages: {\n\t\t\t/**\n\t\t\t * The grammar for plain, unformatted text.\n\t\t\t */\n\t\t\tplain: plainTextGrammar,\n\t\t\tplaintext: plainTextGrammar,\n\t\t\ttext: plainTextGrammar,\n\t\t\ttxt: plainTextGrammar,\n\n\t\t\t/**\n\t\t\t * Creates a deep copy of the language with the given id and appends the given tokens.\n\t\t\t *\n\t\t\t * If a token in `redef` also appears in the copied language, then the existing token in the copied language\n\t\t\t * will be overwritten at its original position.\n\t\t\t *\n\t\t\t * ## Best practices\n\t\t\t *\n\t\t\t * Since the position of overwriting tokens (token in `redef` that overwrite tokens in the copied language)\n\t\t\t * doesn't matter, they can technically be in any order. However, this can be confusing to others that trying to\n\t\t\t * understand the language definition because, normally, the order of tokens matters in Prism grammars.\n\t\t\t *\n\t\t\t * Therefore, it is encouraged to order overwriting tokens according to the positions of the overwritten tokens.\n\t\t\t * Furthermore, all non-overwriting tokens should be placed after the overwriting ones.\n\t\t\t *\n\t\t\t * @param {string} id The id of the language to extend. This has to be a key in `Prism.languages`.\n\t\t\t * @param {Grammar} redef The new tokens to append.\n\t\t\t * @returns {Grammar} The new language created.\n\t\t\t * @public\n\t\t\t * @example\n\t\t\t * Prism.languages['css-with-colors'] = Prism.languages.extend('css', {\n\t\t\t *     // Prism.languages.css already has a 'comment' token, so this token will overwrite CSS' 'comment' token\n\t\t\t *     // at its original position\n\t\t\t *     'comment': { ... },\n\t\t\t *     // CSS doesn't have a 'color' token, so this token will be appended\n\t\t\t *     'color': /\\b(?:red|green|blue)\\b/\n\t\t\t * });\n\t\t\t */\n\t\t\textend: function (id, redef) {\n\t\t\t\tvar lang = _.util.clone(_.languages[id]);\n\n\t\t\t\tfor (var key in redef) {\n\t\t\t\t\tlang[key] = redef[key];\n\t\t\t\t}\n\n\t\t\t\treturn lang;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Inserts tokens _before_ another token in a language definition or any other grammar.\n\t\t\t *\n\t\t\t * ## Usage\n\t\t\t *\n\t\t\t * This helper method makes it easy to modify existing languages. For example, the CSS language definition\n\t\t\t * not only defines CSS highlighting for CSS documents, but also needs to define highlighting for CSS embedded\n\t\t\t * in HTML through `<style>` elements. To do this, it needs to modify `Prism.languages.markup` and add the\n\t\t\t * appropriate tokens. However, `Prism.languages.markup` is a regular JavaScript object literal, so if you do\n\t\t\t * this:\n\t\t\t *\n\t\t\t * ```js\n\t\t\t * Prism.languages.markup.style = {\n\t\t\t *     // token\n\t\t\t * };\n\t\t\t * ```\n\t\t\t *\n\t\t\t * then the `style` token will be added (and processed) at the end. `insertBefore` allows you to insert tokens\n\t\t\t * before existing tokens. For the CSS example above, you would use it like this:\n\t\t\t *\n\t\t\t * ```js\n\t\t\t * Prism.languages.insertBefore('markup', 'cdata', {\n\t\t\t *     'style': {\n\t\t\t *         // token\n\t\t\t *     }\n\t\t\t * });\n\t\t\t * ```\n\t\t\t *\n\t\t\t * ## Special cases\n\t\t\t *\n\t\t\t * If the grammars of `inside` and `insert` have tokens with the same name, the tokens in `inside`'s grammar\n\t\t\t * will be ignored.\n\t\t\t *\n\t\t\t * This behavior can be used to insert tokens after `before`:\n\t\t\t *\n\t\t\t * ```js\n\t\t\t * Prism.languages.insertBefore('markup', 'comment', {\n\t\t\t *     'comment': Prism.languages.markup.comment,\n\t\t\t *     // tokens after 'comment'\n\t\t\t * });\n\t\t\t * ```\n\t\t\t *\n\t\t\t * ## Limitations\n\t\t\t *\n\t\t\t * The main problem `insertBefore` has to solve is iteration order. Since ES2015, the iteration order for object\n\t\t\t * properties is guaranteed to be the insertion order (except for integer keys) but some browsers behave\n\t\t\t * differently when keys are deleted and re-inserted. So `insertBefore` can't be implemented by temporarily\n\t\t\t * deleting properties which is necessary to insert at arbitrary positions.\n\t\t\t *\n\t\t\t * To solve this problem, `insertBefore` doesn't actually insert the given tokens into the target object.\n\t\t\t * Instead, it will create a new object and replace all references to the target object with the new one. This\n\t\t\t * can be done without temporarily deleting properties, so the iteration order is well-defined.\n\t\t\t *\n\t\t\t * However, only references that can be reached from `Prism.languages` or `insert` will be replaced. I.e. if\n\t\t\t * you hold the target object in a variable, then the value of the variable will not change.\n\t\t\t *\n\t\t\t * ```js\n\t\t\t * var oldMarkup = Prism.languages.markup;\n\t\t\t * var newMarkup = Prism.languages.insertBefore('markup', 'comment', { ... });\n\t\t\t *\n\t\t\t * assert(oldMarkup !== Prism.languages.markup);\n\t\t\t * assert(newMarkup === Prism.languages.markup);\n\t\t\t * ```\n\t\t\t *\n\t\t\t * @param {string} inside The property of `root` (e.g. a language id in `Prism.languages`) that contains the\n\t\t\t * object to be modified.\n\t\t\t * @param {string} before The key to insert before.\n\t\t\t * @param {Grammar} insert An object containing the key-value pairs to be inserted.\n\t\t\t * @param {Object<string, any>} [root] The object containing `inside`, i.e. the object that contains the\n\t\t\t * object to be modified.\n\t\t\t *\n\t\t\t * Defaults to `Prism.languages`.\n\t\t\t * @returns {Grammar} The new grammar object.\n\t\t\t * @public\n\t\t\t */\n\t\t\tinsertBefore: function (inside, before, insert, root) {\n\t\t\t\troot = root || /** @type {any} */ (_.languages);\n\t\t\t\tvar grammar = root[inside];\n\t\t\t\t/** @type {Grammar} */\n\t\t\t\tvar ret = {};\n\n\t\t\t\tfor (var token in grammar) {\n\t\t\t\t\tif (grammar.hasOwnProperty(token)) {\n\n\t\t\t\t\t\tif (token == before) {\n\t\t\t\t\t\t\tfor (var newToken in insert) {\n\t\t\t\t\t\t\t\tif (insert.hasOwnProperty(newToken)) {\n\t\t\t\t\t\t\t\t\tret[newToken] = insert[newToken];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Do not insert token which also occur in insert. See #1525\n\t\t\t\t\t\tif (!insert.hasOwnProperty(token)) {\n\t\t\t\t\t\t\tret[token] = grammar[token];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tvar old = root[inside];\n\t\t\t\troot[inside] = ret;\n\n\t\t\t\t// Update references in other language definitions\n\t\t\t\t_.languages.DFS(_.languages, function (key, value) {\n\t\t\t\t\tif (value === old && key != inside) {\n\t\t\t\t\t\tthis[key] = ret;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\treturn ret;\n\t\t\t},\n\n\t\t\t// Traverse a language definition with Depth First Search\n\t\t\tDFS: function DFS(o, callback, type, visited) {\n\t\t\t\tvisited = visited || {};\n\n\t\t\t\tvar objId = _.util.objId;\n\n\t\t\t\tfor (var i in o) {\n\t\t\t\t\tif (o.hasOwnProperty(i)) {\n\t\t\t\t\t\tcallback.call(o, i, o[i], type || i);\n\n\t\t\t\t\t\tvar property = o[i];\n\t\t\t\t\t\tvar propertyType = _.util.type(property);\n\n\t\t\t\t\t\tif (propertyType === 'Object' && !visited[objId(property)]) {\n\t\t\t\t\t\t\tvisited[objId(property)] = true;\n\t\t\t\t\t\t\tDFS(property, callback, null, visited);\n\t\t\t\t\t\t} else if (propertyType === 'Array' && !visited[objId(property)]) {\n\t\t\t\t\t\t\tvisited[objId(property)] = true;\n\t\t\t\t\t\t\tDFS(property, callback, i, visited);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tplugins: {},\n\n\t\t/**\n\t\t * This is the most high-level function in Prism’s API.\n\t\t * It fetches all the elements that have a `.language-xxxx` class and then calls {@link Prism.highlightElement} on\n\t\t * each one of them.\n\t\t *\n\t\t * This is equivalent to `Prism.highlightAllUnder(document, async, callback)`.\n\t\t *\n\t\t * @param {boolean} [async=false] Same as in {@link Prism.highlightAllUnder}.\n\t\t * @param {HighlightCallback} [callback] Same as in {@link Prism.highlightAllUnder}.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\thighlightAll: function (async, callback) {\n\t\t\t_.highlightAllUnder(document, async, callback);\n\t\t},\n\n\t\t/**\n\t\t * Fetches all the descendants of `container` that have a `.language-xxxx` class and then calls\n\t\t * {@link Prism.highlightElement} on each one of them.\n\t\t *\n\t\t * The following hooks will be run:\n\t\t * 1. `before-highlightall`\n\t\t * 2. `before-all-elements-highlight`\n\t\t * 3. All hooks of {@link Prism.highlightElement} for each element.\n\t\t *\n\t\t * @param {ParentNode} container The root element, whose descendants that have a `.language-xxxx` class will be highlighted.\n\t\t * @param {boolean} [async=false] Whether each element is to be highlighted asynchronously using Web Workers.\n\t\t * @param {HighlightCallback} [callback] An optional callback to be invoked on each element after its highlighting is done.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\thighlightAllUnder: function (container, async, callback) {\n\t\t\tvar env = {\n\t\t\t\tcallback: callback,\n\t\t\t\tcontainer: container,\n\t\t\t\tselector: 'code[class*=\"language-\"], [class*=\"language-\"] code, code[class*=\"lang-\"], [class*=\"lang-\"] code'\n\t\t\t};\n\n\t\t\t_.hooks.run('before-highlightall', env);\n\n\t\t\tenv.elements = Array.prototype.slice.apply(env.container.querySelectorAll(env.selector));\n\n\t\t\t_.hooks.run('before-all-elements-highlight', env);\n\n\t\t\tfor (var i = 0, element; (element = env.elements[i++]);) {\n\t\t\t\t_.highlightElement(element, async === true, env.callback);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Highlights the code inside a single element.\n\t\t *\n\t\t * The following hooks will be run:\n\t\t * 1. `before-sanity-check`\n\t\t * 2. `before-highlight`\n\t\t * 3. All hooks of {@link Prism.highlight}. These hooks will be run by an asynchronous worker if `async` is `true`.\n\t\t * 4. `before-insert`\n\t\t * 5. `after-highlight`\n\t\t * 6. `complete`\n\t\t *\n\t\t * Some the above hooks will be skipped if the element doesn't contain any text or there is no grammar loaded for\n\t\t * the element's language.\n\t\t *\n\t\t * @param {Element} element The element containing the code.\n\t\t * It must have a class of `language-xxxx` to be processed, where `xxxx` is a valid language identifier.\n\t\t * @param {boolean} [async=false] Whether the element is to be highlighted asynchronously using Web Workers\n\t\t * to improve performance and avoid blocking the UI when highlighting very large chunks of code. This option is\n\t\t * [disabled by default](https://prismjs.com/faq.html#why-is-asynchronous-highlighting-disabled-by-default).\n\t\t *\n\t\t * Note: All language definitions required to highlight the code must be included in the main `prism.js` file for\n\t\t * asynchronous highlighting to work. You can build your own bundle on the\n\t\t * [Download page](https://prismjs.com/download.html).\n\t\t * @param {HighlightCallback} [callback] An optional callback to be invoked after the highlighting is done.\n\t\t * Mostly useful when `async` is `true`, since in that case, the highlighting is done asynchronously.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\thighlightElement: function (element, async, callback) {\n\t\t\t// Find language\n\t\t\tvar language = _.util.getLanguage(element);\n\t\t\tvar grammar = _.languages[language];\n\n\t\t\t// Set language on the element, if not present\n\t\t\t_.util.setLanguage(element, language);\n\n\t\t\t// Set language on the parent, for styling\n\t\t\tvar parent = element.parentElement;\n\t\t\tif (parent && parent.nodeName.toLowerCase() === 'pre') {\n\t\t\t\t_.util.setLanguage(parent, language);\n\t\t\t}\n\n\t\t\tvar code = element.textContent;\n\n\t\t\tvar env = {\n\t\t\t\telement: element,\n\t\t\t\tlanguage: language,\n\t\t\t\tgrammar: grammar,\n\t\t\t\tcode: code\n\t\t\t};\n\n\t\t\tfunction insertHighlightedCode(highlightedCode) {\n\t\t\t\tenv.highlightedCode = highlightedCode;\n\n\t\t\t\t_.hooks.run('before-insert', env);\n\n\t\t\t\tenv.element.innerHTML = env.highlightedCode;\n\n\t\t\t\t_.hooks.run('after-highlight', env);\n\t\t\t\t_.hooks.run('complete', env);\n\t\t\t\tcallback && callback.call(env.element);\n\t\t\t}\n\n\t\t\t_.hooks.run('before-sanity-check', env);\n\n\t\t\t// plugins may change/add the parent/element\n\t\t\tparent = env.element.parentElement;\n\t\t\tif (parent && parent.nodeName.toLowerCase() === 'pre' && !parent.hasAttribute('tabindex')) {\n\t\t\t\tparent.setAttribute('tabindex', '0');\n\t\t\t}\n\n\t\t\tif (!env.code) {\n\t\t\t\t_.hooks.run('complete', env);\n\t\t\t\tcallback && callback.call(env.element);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t_.hooks.run('before-highlight', env);\n\n\t\t\tif (!env.grammar) {\n\t\t\t\tinsertHighlightedCode(_.util.encode(env.code));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (async && _self.Worker) {\n\t\t\t\tvar worker = new Worker(_.filename);\n\n\t\t\t\tworker.onmessage = function (evt) {\n\t\t\t\t\tinsertHighlightedCode(evt.data);\n\t\t\t\t};\n\n\t\t\t\tworker.postMessage(JSON.stringify({\n\t\t\t\t\tlanguage: env.language,\n\t\t\t\t\tcode: env.code,\n\t\t\t\t\timmediateClose: true\n\t\t\t\t}));\n\t\t\t} else {\n\t\t\t\tinsertHighlightedCode(_.highlight(env.code, env.grammar, env.language));\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Low-level function, only use if you know what you’re doing. It accepts a string of text as input\n\t\t * and the language definitions to use, and returns a string with the HTML produced.\n\t\t *\n\t\t * The following hooks will be run:\n\t\t * 1. `before-tokenize`\n\t\t * 2. `after-tokenize`\n\t\t * 3. `wrap`: On each {@link Token}.\n\t\t *\n\t\t * @param {string} text A string with the code to be highlighted.\n\t\t * @param {Grammar} grammar An object containing the tokens to use.\n\t\t *\n\t\t * Usually a language definition like `Prism.languages.markup`.\n\t\t * @param {string} language The name of the language definition passed to `grammar`.\n\t\t * @returns {string} The highlighted HTML.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t * @example\n\t\t * Prism.highlight('var foo = true;', Prism.languages.javascript, 'javascript');\n\t\t */\n\t\thighlight: function (text, grammar, language) {\n\t\t\tvar env = {\n\t\t\t\tcode: text,\n\t\t\t\tgrammar: grammar,\n\t\t\t\tlanguage: language\n\t\t\t};\n\t\t\t_.hooks.run('before-tokenize', env);\n\t\t\tif (!env.grammar) {\n\t\t\t\tthrow new Error('The language \"' + env.language + '\" has no grammar.');\n\t\t\t}\n\t\t\tenv.tokens = _.tokenize(env.code, env.grammar);\n\t\t\t_.hooks.run('after-tokenize', env);\n\t\t\treturn Token.stringify(_.util.encode(env.tokens), env.language);\n\t\t},\n\n\t\t/**\n\t\t * This is the heart of Prism, and the most low-level function you can use. It accepts a string of text as input\n\t\t * and the language definitions to use, and returns an array with the tokenized code.\n\t\t *\n\t\t * When the language definition includes nested tokens, the function is called recursively on each of these tokens.\n\t\t *\n\t\t * This method could be useful in other contexts as well, as a very crude parser.\n\t\t *\n\t\t * @param {string} text A string with the code to be highlighted.\n\t\t * @param {Grammar} grammar An object containing the tokens to use.\n\t\t *\n\t\t * Usually a language definition like `Prism.languages.markup`.\n\t\t * @returns {TokenStream} An array of strings and tokens, a token stream.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t * @example\n\t\t * let code = `var foo = 0;`;\n\t\t * let tokens = Prism.tokenize(code, Prism.languages.javascript);\n\t\t * tokens.forEach(token => {\n\t\t *     if (token instanceof Prism.Token && token.type === 'number') {\n\t\t *         console.log(`Found numeric literal: ${token.content}`);\n\t\t *     }\n\t\t * });\n\t\t */\n\t\ttokenize: function (text, grammar) {\n\t\t\tvar rest = grammar.rest;\n\t\t\tif (rest) {\n\t\t\t\tfor (var token in rest) {\n\t\t\t\t\tgrammar[token] = rest[token];\n\t\t\t\t}\n\n\t\t\t\tdelete grammar.rest;\n\t\t\t}\n\n\t\t\tvar tokenList = new LinkedList();\n\t\t\taddAfter(tokenList, tokenList.head, text);\n\n\t\t\tmatchGrammar(text, tokenList, grammar, tokenList.head, 0);\n\n\t\t\treturn toArray(tokenList);\n\t\t},\n\n\t\t/**\n\t\t * @namespace\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\thooks: {\n\t\t\tall: {},\n\n\t\t\t/**\n\t\t\t * Adds the given callback to the list of callbacks for the given hook.\n\t\t\t *\n\t\t\t * The callback will be invoked when the hook it is registered for is run.\n\t\t\t * Hooks are usually directly run by a highlight function but you can also run hooks yourself.\n\t\t\t *\n\t\t\t * One callback function can be registered to multiple hooks and the same hook multiple times.\n\t\t\t *\n\t\t\t * @param {string} name The name of the hook.\n\t\t\t * @param {HookCallback} callback The callback function which is given environment variables.\n\t\t\t * @public\n\t\t\t */\n\t\t\tadd: function (name, callback) {\n\t\t\t\tvar hooks = _.hooks.all;\n\n\t\t\t\thooks[name] = hooks[name] || [];\n\n\t\t\t\thooks[name].push(callback);\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Runs a hook invoking all registered callbacks with the given environment variables.\n\t\t\t *\n\t\t\t * Callbacks will be invoked synchronously and in the order in which they were registered.\n\t\t\t *\n\t\t\t * @param {string} name The name of the hook.\n\t\t\t * @param {Object<string, any>} env The environment variables of the hook passed to all callbacks registered.\n\t\t\t * @public\n\t\t\t */\n\t\t\trun: function (name, env) {\n\t\t\t\tvar callbacks = _.hooks.all[name];\n\n\t\t\t\tif (!callbacks || !callbacks.length) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tfor (var i = 0, callback; (callback = callbacks[i++]);) {\n\t\t\t\t\tcallback(env);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tToken: Token\n\t};\n\t_self.Prism = _;\n\n\n\t// Typescript note:\n\t// The following can be used to import the Token type in JSDoc:\n\t//\n\t//   @typedef {InstanceType<import(\"./prism-core\")[\"Token\"]>} Token\n\n\t/**\n\t * Creates a new token.\n\t *\n\t * @param {string} type See {@link Token#type type}\n\t * @param {string | TokenStream} content See {@link Token#content content}\n\t * @param {string|string[]} [alias] The alias(es) of the token.\n\t * @param {string} [matchedStr=\"\"] A copy of the full string this token was created from.\n\t * @class\n\t * @global\n\t * @public\n\t */\n\tfunction Token(type, content, alias, matchedStr) {\n\t\t/**\n\t\t * The type of the token.\n\t\t *\n\t\t * This is usually the key of a pattern in a {@link Grammar}.\n\t\t *\n\t\t * @type {string}\n\t\t * @see GrammarToken\n\t\t * @public\n\t\t */\n\t\tthis.type = type;\n\t\t/**\n\t\t * The strings or tokens contained by this token.\n\t\t *\n\t\t * This will be a token stream if the pattern matched also defined an `inside` grammar.\n\t\t *\n\t\t * @type {string | TokenStream}\n\t\t * @public\n\t\t */\n\t\tthis.content = content;\n\t\t/**\n\t\t * The alias(es) of the token.\n\t\t *\n\t\t * @type {string|string[]}\n\t\t * @see GrammarToken\n\t\t * @public\n\t\t */\n\t\tthis.alias = alias;\n\t\t// Copy of the full string this token was created from\n\t\tthis.length = (matchedStr || '').length | 0;\n\t}\n\n\t/**\n\t * A token stream is an array of strings and {@link Token Token} objects.\n\t *\n\t * Token streams have to fulfill a few properties that are assumed by most functions (mostly internal ones) that process\n\t * them.\n\t *\n\t * 1. No adjacent strings.\n\t * 2. No empty strings.\n\t *\n\t *    The only exception here is the token stream that only contains the empty string and nothing else.\n\t *\n\t * @typedef {Array<string | Token>} TokenStream\n\t * @global\n\t * @public\n\t */\n\n\t/**\n\t * Converts the given token or token stream to an HTML representation.\n\t *\n\t * The following hooks will be run:\n\t * 1. `wrap`: On each {@link Token}.\n\t *\n\t * @param {string | Token | TokenStream} o The token or token stream to be converted.\n\t * @param {string} language The name of current language.\n\t * @returns {string} The HTML representation of the token or token stream.\n\t * @memberof Token\n\t * @static\n\t */\n\tToken.stringify = function stringify(o, language) {\n\t\tif (typeof o == 'string') {\n\t\t\treturn o;\n\t\t}\n\t\tif (Array.isArray(o)) {\n\t\t\tvar s = '';\n\t\t\to.forEach(function (e) {\n\t\t\t\ts += stringify(e, language);\n\t\t\t});\n\t\t\treturn s;\n\t\t}\n\n\t\tvar env = {\n\t\t\ttype: o.type,\n\t\t\tcontent: stringify(o.content, language),\n\t\t\ttag: 'span',\n\t\t\tclasses: ['token', o.type],\n\t\t\tattributes: {},\n\t\t\tlanguage: language\n\t\t};\n\n\t\tvar aliases = o.alias;\n\t\tif (aliases) {\n\t\t\tif (Array.isArray(aliases)) {\n\t\t\t\tArray.prototype.push.apply(env.classes, aliases);\n\t\t\t} else {\n\t\t\t\tenv.classes.push(aliases);\n\t\t\t}\n\t\t}\n\n\t\t_.hooks.run('wrap', env);\n\n\t\tvar attributes = '';\n\t\tfor (var name in env.attributes) {\n\t\t\tattributes += ' ' + name + '=\"' + (env.attributes[name] || '').replace(/\"/g, '&quot;') + '\"';\n\t\t}\n\n\t\treturn '<' + env.tag + ' class=\"' + env.classes.join(' ') + '\"' + attributes + '>' + env.content + '</' + env.tag + '>';\n\t};\n\n\t/**\n\t * @param {RegExp} pattern\n\t * @param {number} pos\n\t * @param {string} text\n\t * @param {boolean} lookbehind\n\t * @returns {RegExpExecArray | null}\n\t */\n\tfunction matchPattern(pattern, pos, text, lookbehind) {\n\t\tpattern.lastIndex = pos;\n\t\tvar match = pattern.exec(text);\n\t\tif (match && lookbehind && match[1]) {\n\t\t\t// change the match to remove the text matched by the Prism lookbehind group\n\t\t\tvar lookbehindLength = match[1].length;\n\t\t\tmatch.index += lookbehindLength;\n\t\t\tmatch[0] = match[0].slice(lookbehindLength);\n\t\t}\n\t\treturn match;\n\t}\n\n\t/**\n\t * @param {string} text\n\t * @param {LinkedList<string | Token>} tokenList\n\t * @param {any} grammar\n\t * @param {LinkedListNode<string | Token>} startNode\n\t * @param {number} startPos\n\t * @param {RematchOptions} [rematch]\n\t * @returns {void}\n\t * @private\n\t *\n\t * @typedef RematchOptions\n\t * @property {string} cause\n\t * @property {number} reach\n\t */\n\tfunction matchGrammar(text, tokenList, grammar, startNode, startPos, rematch) {\n\t\tfor (var token in grammar) {\n\t\t\tif (!grammar.hasOwnProperty(token) || !grammar[token]) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tvar patterns = grammar[token];\n\t\t\tpatterns = Array.isArray(patterns) ? patterns : [patterns];\n\n\t\t\tfor (var j = 0; j < patterns.length; ++j) {\n\t\t\t\tif (rematch && rematch.cause == token + ',' + j) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar patternObj = patterns[j];\n\t\t\t\tvar inside = patternObj.inside;\n\t\t\t\tvar lookbehind = !!patternObj.lookbehind;\n\t\t\t\tvar greedy = !!patternObj.greedy;\n\t\t\t\tvar alias = patternObj.alias;\n\n\t\t\t\tif (greedy && !patternObj.pattern.global) {\n\t\t\t\t\t// Without the global flag, lastIndex won't work\n\t\t\t\t\tvar flags = patternObj.pattern.toString().match(/[imsuy]*$/)[0];\n\t\t\t\t\tpatternObj.pattern = RegExp(patternObj.pattern.source, flags + 'g');\n\t\t\t\t}\n\n\t\t\t\t/** @type {RegExp} */\n\t\t\t\tvar pattern = patternObj.pattern || patternObj;\n\n\t\t\t\tfor ( // iterate the token list and keep track of the current token/string position\n\t\t\t\t\tvar currentNode = startNode.next, pos = startPos;\n\t\t\t\t\tcurrentNode !== tokenList.tail;\n\t\t\t\t\tpos += currentNode.value.length, currentNode = currentNode.next\n\t\t\t\t) {\n\n\t\t\t\t\tif (rematch && pos >= rematch.reach) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar str = currentNode.value;\n\n\t\t\t\t\tif (tokenList.length > text.length) {\n\t\t\t\t\t\t// Something went terribly wrong, ABORT, ABORT!\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (str instanceof Token) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar removeCount = 1; // this is the to parameter of removeBetween\n\t\t\t\t\tvar match;\n\n\t\t\t\t\tif (greedy) {\n\t\t\t\t\t\tmatch = matchPattern(pattern, pos, text, lookbehind);\n\t\t\t\t\t\tif (!match || match.index >= text.length) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar from = match.index;\n\t\t\t\t\t\tvar to = match.index + match[0].length;\n\t\t\t\t\t\tvar p = pos;\n\n\t\t\t\t\t\t// find the node that contains the match\n\t\t\t\t\t\tp += currentNode.value.length;\n\t\t\t\t\t\twhile (from >= p) {\n\t\t\t\t\t\t\tcurrentNode = currentNode.next;\n\t\t\t\t\t\t\tp += currentNode.value.length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// adjust pos (and p)\n\t\t\t\t\t\tp -= currentNode.value.length;\n\t\t\t\t\t\tpos = p;\n\n\t\t\t\t\t\t// the current node is a Token, then the match starts inside another Token, which is invalid\n\t\t\t\t\t\tif (currentNode.value instanceof Token) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// find the last node which is affected by this match\n\t\t\t\t\t\tfor (\n\t\t\t\t\t\t\tvar k = currentNode;\n\t\t\t\t\t\t\tk !== tokenList.tail && (p < to || typeof k.value === 'string');\n\t\t\t\t\t\t\tk = k.next\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tremoveCount++;\n\t\t\t\t\t\t\tp += k.value.length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tremoveCount--;\n\n\t\t\t\t\t\t// replace with the new match\n\t\t\t\t\t\tstr = text.slice(pos, p);\n\t\t\t\t\t\tmatch.index -= pos;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmatch = matchPattern(pattern, 0, str, lookbehind);\n\t\t\t\t\t\tif (!match) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// eslint-disable-next-line no-redeclare\n\t\t\t\t\tvar from = match.index;\n\t\t\t\t\tvar matchStr = match[0];\n\t\t\t\t\tvar before = str.slice(0, from);\n\t\t\t\t\tvar after = str.slice(from + matchStr.length);\n\n\t\t\t\t\tvar reach = pos + str.length;\n\t\t\t\t\tif (rematch && reach > rematch.reach) {\n\t\t\t\t\t\trematch.reach = reach;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar removeFrom = currentNode.prev;\n\n\t\t\t\t\tif (before) {\n\t\t\t\t\t\tremoveFrom = addAfter(tokenList, removeFrom, before);\n\t\t\t\t\t\tpos += before.length;\n\t\t\t\t\t}\n\n\t\t\t\t\tremoveRange(tokenList, removeFrom, removeCount);\n\n\t\t\t\t\tvar wrapped = new Token(token, inside ? _.tokenize(matchStr, inside) : matchStr, alias, matchStr);\n\t\t\t\t\tcurrentNode = addAfter(tokenList, removeFrom, wrapped);\n\n\t\t\t\t\tif (after) {\n\t\t\t\t\t\taddAfter(tokenList, currentNode, after);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (removeCount > 1) {\n\t\t\t\t\t\t// at least one Token object was removed, so we have to do some rematching\n\t\t\t\t\t\t// this can only happen if the current pattern is greedy\n\n\t\t\t\t\t\t/** @type {RematchOptions} */\n\t\t\t\t\t\tvar nestedRematch = {\n\t\t\t\t\t\t\tcause: token + ',' + j,\n\t\t\t\t\t\t\treach: reach\n\t\t\t\t\t\t};\n\t\t\t\t\t\tmatchGrammar(text, tokenList, grammar, currentNode.prev, pos, nestedRematch);\n\n\t\t\t\t\t\t// the reach might have been extended because of the rematching\n\t\t\t\t\t\tif (rematch && nestedRematch.reach > rematch.reach) {\n\t\t\t\t\t\t\trematch.reach = nestedRematch.reach;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @typedef LinkedListNode\n\t * @property {T} value\n\t * @property {LinkedListNode<T> | null} prev The previous node.\n\t * @property {LinkedListNode<T> | null} next The next node.\n\t * @template T\n\t * @private\n\t */\n\n\t/**\n\t * @template T\n\t * @private\n\t */\n\tfunction LinkedList() {\n\t\t/** @type {LinkedListNode<T>} */\n\t\tvar head = { value: null, prev: null, next: null };\n\t\t/** @type {LinkedListNode<T>} */\n\t\tvar tail = { value: null, prev: head, next: null };\n\t\thead.next = tail;\n\n\t\t/** @type {LinkedListNode<T>} */\n\t\tthis.head = head;\n\t\t/** @type {LinkedListNode<T>} */\n\t\tthis.tail = tail;\n\t\tthis.length = 0;\n\t}\n\n\t/**\n\t * Adds a new node with the given value to the list.\n\t *\n\t * @param {LinkedList<T>} list\n\t * @param {LinkedListNode<T>} node\n\t * @param {T} value\n\t * @returns {LinkedListNode<T>} The added node.\n\t * @template T\n\t */\n\tfunction addAfter(list, node, value) {\n\t\t// assumes that node != list.tail && values.length >= 0\n\t\tvar next = node.next;\n\n\t\tvar newNode = { value: value, prev: node, next: next };\n\t\tnode.next = newNode;\n\t\tnext.prev = newNode;\n\t\tlist.length++;\n\n\t\treturn newNode;\n\t}\n\t/**\n\t * Removes `count` nodes after the given node. The given node will not be removed.\n\t *\n\t * @param {LinkedList<T>} list\n\t * @param {LinkedListNode<T>} node\n\t * @param {number} count\n\t * @template T\n\t */\n\tfunction removeRange(list, node, count) {\n\t\tvar next = node.next;\n\t\tfor (var i = 0; i < count && next !== list.tail; i++) {\n\t\t\tnext = next.next;\n\t\t}\n\t\tnode.next = next;\n\t\tnext.prev = node;\n\t\tlist.length -= i;\n\t}\n\t/**\n\t * @param {LinkedList<T>} list\n\t * @returns {T[]}\n\t * @template T\n\t */\n\tfunction toArray(list) {\n\t\tvar array = [];\n\t\tvar node = list.head.next;\n\t\twhile (node !== list.tail) {\n\t\t\tarray.push(node.value);\n\t\t\tnode = node.next;\n\t\t}\n\t\treturn array;\n\t}\n\n\n\tif (!_self.document) {\n\t\tif (!_self.addEventListener) {\n\t\t\t// in Node.js\n\t\t\treturn _;\n\t\t}\n\n\t\tif (!_.disableWorkerMessageHandler) {\n\t\t\t// In worker\n\t\t\t_self.addEventListener('message', function (evt) {\n\t\t\t\tvar message = JSON.parse(evt.data);\n\t\t\t\tvar lang = message.language;\n\t\t\t\tvar code = message.code;\n\t\t\t\tvar immediateClose = message.immediateClose;\n\n\t\t\t\t_self.postMessage(_.highlight(code, _.languages[lang], lang));\n\t\t\t\tif (immediateClose) {\n\t\t\t\t\t_self.close();\n\t\t\t\t}\n\t\t\t}, false);\n\t\t}\n\n\t\treturn _;\n\t}\n\n\t// Get current script and highlight\n\tvar script = _.util.currentScript();\n\n\tif (script) {\n\t\t_.filename = script.src;\n\n\t\tif (script.hasAttribute('data-manual')) {\n\t\t\t_.manual = true;\n\t\t}\n\t}\n\n\tfunction highlightAutomaticallyCallback() {\n\t\tif (!_.manual) {\n\t\t\t_.highlightAll();\n\t\t}\n\t}\n\n\tif (!_.manual) {\n\t\t// If the document state is \"loading\", then we'll use DOMContentLoaded.\n\t\t// If the document state is \"interactive\" and the prism.js script is deferred, then we'll also use the\n\t\t// DOMContentLoaded event because there might be some plugins or languages which have also been deferred and they\n\t\t// might take longer one animation frame to execute which can create a race condition where only some plugins have\n\t\t// been loaded when Prism.highlightAll() is executed, depending on how fast resources are loaded.\n\t\t// See https://github.com/PrismJS/prism/issues/2102\n\t\tvar readyState = document.readyState;\n\t\tif (readyState === 'loading' || readyState === 'interactive' && script && script.defer) {\n\t\t\tdocument.addEventListener('DOMContentLoaded', highlightAutomaticallyCallback);\n\t\t} else {\n\t\t\tif (window.requestAnimationFrame) {\n\t\t\t\twindow.requestAnimationFrame(highlightAutomaticallyCallback);\n\t\t\t} else {\n\t\t\t\twindow.setTimeout(highlightAutomaticallyCallback, 16);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn _;\n\n}(_self));\n\nif (typeof module !== 'undefined' && module.exports) {\n\tmodule.exports = Prism;\n}\n\n// hack for components to work correctly in node.js\nif (typeof global !== 'undefined') {\n\tglobal.Prism = Prism;\n}\n\n// some additional documentation/types\n\n/**\n * The expansion of a simple `RegExp` literal to support additional properties.\n *\n * @typedef GrammarToken\n * @property {RegExp} pattern The regular expression of the token.\n * @property {boolean} [lookbehind=false] If `true`, then the first capturing group of `pattern` will (effectively)\n * behave as a lookbehind group meaning that the captured text will not be part of the matched text of the new token.\n * @property {boolean} [greedy=false] Whether the token is greedy.\n * @property {string|string[]} [alias] An optional alias or list of aliases.\n * @property {Grammar} [inside] The nested grammar of this token.\n *\n * The `inside` grammar will be used to tokenize the text value of each token of this kind.\n *\n * This can be used to make nested and even recursive language definitions.\n *\n * Note: This can cause infinite recursion. Be careful when you embed different languages or even the same language into\n * each another.\n * @global\n * @public\n */\n\n/**\n * @typedef Grammar\n * @type {Object<string, RegExp | GrammarToken | Array<RegExp | GrammarToken>>}\n * @property {Grammar} [rest] An optional grammar object that will be appended to this grammar.\n * @global\n * @public\n */\n\n/**\n * A function which will invoked after an element was successfully highlighted.\n *\n * @callback HighlightCallback\n * @param {Element} element The element successfully highlighted.\n * @returns {void}\n * @global\n * @public\n */\n\n/**\n * @callback HookCallback\n * @param {Object<string, any>} env The environment variables of the hook.\n * @returns {void}\n * @global\n * @public\n */\n\n\n/* **********************************************\n     Begin prism-markup.js\n********************************************** */\n\nPrism.languages.markup = {\n\t'comment': {\n\t\tpattern: /<!--(?:(?!<!--)[\\s\\S])*?-->/,\n\t\tgreedy: true\n\t},\n\t'prolog': {\n\t\tpattern: /<\\?[\\s\\S]+?\\?>/,\n\t\tgreedy: true\n\t},\n\t'doctype': {\n\t\t// https://www.w3.org/TR/xml/#NT-doctypedecl\n\t\tpattern: /<!DOCTYPE(?:[^>\"'[\\]]|\"[^\"]*\"|'[^']*')+(?:\\[(?:[^<\"'\\]]|\"[^\"]*\"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\\]\\s*)?>/i,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'internal-subset': {\n\t\t\t\tpattern: /(^[^\\[]*\\[)[\\s\\S]+(?=\\]>$)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: null // see below\n\t\t\t},\n\t\t\t'string': {\n\t\t\t\tpattern: /\"[^\"]*\"|'[^']*'/,\n\t\t\t\tgreedy: true\n\t\t\t},\n\t\t\t'punctuation': /^<!|>$|[[\\]]/,\n\t\t\t'doctype-tag': /^DOCTYPE/i,\n\t\t\t'name': /[^\\s<>'\"]+/\n\t\t}\n\t},\n\t'cdata': {\n\t\tpattern: /<!\\[CDATA\\[[\\s\\S]*?\\]\\]>/i,\n\t\tgreedy: true\n\t},\n\t'tag': {\n\t\tpattern: /<\\/?(?!\\d)[^\\s>\\/=$<%]+(?:\\s(?:\\s*[^\\s>\\/=]+(?:\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))|(?=[\\s/>])))+)?\\s*\\/?>/,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'tag': {\n\t\t\t\tpattern: /^<\\/?[^\\s>\\/]+/,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': /^<\\/?/,\n\t\t\t\t\t'namespace': /^[^\\s>\\/:]+:/\n\t\t\t\t}\n\t\t\t},\n\t\t\t'special-attr': [],\n\t\t\t'attr-value': {\n\t\t\t\tpattern: /=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+)/,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpattern: /^=/,\n\t\t\t\t\t\t\talias: 'attr-equals'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpattern: /^(\\s*)[\"']|[\"']$/,\n\t\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t'punctuation': /\\/?>/,\n\t\t\t'attr-name': {\n\t\t\t\tpattern: /[^\\s>\\/]+/,\n\t\t\t\tinside: {\n\t\t\t\t\t'namespace': /^[^\\s>\\/:]+:/\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t},\n\t'entity': [\n\t\t{\n\t\t\tpattern: /&[\\da-z]{1,8};/i,\n\t\t\talias: 'named-entity'\n\t\t},\n\t\t/&#x?[\\da-f]{1,8};/i\n\t]\n};\n\nPrism.languages.markup['tag'].inside['attr-value'].inside['entity'] =\n\tPrism.languages.markup['entity'];\nPrism.languages.markup['doctype'].inside['internal-subset'].inside = Prism.languages.markup;\n\n// Plugin to make entity title show the real entity, idea by Roman Komarov\nPrism.hooks.add('wrap', function (env) {\n\n\tif (env.type === 'entity') {\n\t\tenv.attributes['title'] = env.content.replace(/&amp;/, '&');\n\t}\n});\n\nObject.defineProperty(Prism.languages.markup.tag, 'addInlined', {\n\t/**\n\t * Adds an inlined language to markup.\n\t *\n\t * An example of an inlined language is CSS with `<style>` tags.\n\t *\n\t * @param {string} tagName The name of the tag that contains the inlined language. This name will be treated as\n\t * case insensitive.\n\t * @param {string} lang The language key.\n\t * @example\n\t * addInlined('style', 'css');\n\t */\n\tvalue: function addInlined(tagName, lang) {\n\t\tvar includedCdataInside = {};\n\t\tincludedCdataInside['language-' + lang] = {\n\t\t\tpattern: /(^<!\\[CDATA\\[)[\\s\\S]+?(?=\\]\\]>$)/i,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages[lang]\n\t\t};\n\t\tincludedCdataInside['cdata'] = /^<!\\[CDATA\\[|\\]\\]>$/i;\n\n\t\tvar inside = {\n\t\t\t'included-cdata': {\n\t\t\t\tpattern: /<!\\[CDATA\\[[\\s\\S]*?\\]\\]>/i,\n\t\t\t\tinside: includedCdataInside\n\t\t\t}\n\t\t};\n\t\tinside['language-' + lang] = {\n\t\t\tpattern: /[\\s\\S]+/,\n\t\t\tinside: Prism.languages[lang]\n\t\t};\n\n\t\tvar def = {};\n\t\tdef[tagName] = {\n\t\t\tpattern: RegExp(/(<__[^>]*>)(?:<!\\[CDATA\\[(?:[^\\]]|\\](?!\\]>))*\\]\\]>|(?!<!\\[CDATA\\[)[\\s\\S])*?(?=<\\/__>)/.source.replace(/__/g, function () { return tagName; }), 'i'),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: inside\n\t\t};\n\n\t\tPrism.languages.insertBefore('markup', 'cdata', def);\n\t}\n});\nObject.defineProperty(Prism.languages.markup.tag, 'addAttribute', {\n\t/**\n\t * Adds an pattern to highlight languages embedded in HTML attributes.\n\t *\n\t * An example of an inlined language is CSS with `style` attributes.\n\t *\n\t * @param {string} attrName The name of the tag that contains the inlined language. This name will be treated as\n\t * case insensitive.\n\t * @param {string} lang The language key.\n\t * @example\n\t * addAttribute('style', 'css');\n\t */\n\tvalue: function (attrName, lang) {\n\t\tPrism.languages.markup.tag.inside['special-attr'].push({\n\t\t\tpattern: RegExp(\n\t\t\t\t/(^|[\"'\\s])/.source + '(?:' + attrName + ')' + /\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))/.source,\n\t\t\t\t'i'\n\t\t\t),\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'attr-name': /^[^\\s=]+/,\n\t\t\t\t'attr-value': {\n\t\t\t\t\tpattern: /=[\\s\\S]+/,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'value': {\n\t\t\t\t\t\t\tpattern: /(^=\\s*([\"']|(?![\"'])))\\S[\\s\\S]*(?=\\2$)/,\n\t\t\t\t\t\t\tlookbehind: true,\n\t\t\t\t\t\t\talias: [lang, 'language-' + lang],\n\t\t\t\t\t\t\tinside: Prism.languages[lang]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'punctuation': [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tpattern: /^=/,\n\t\t\t\t\t\t\t\talias: 'attr-equals'\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t/\"|'/\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n});\n\nPrism.languages.html = Prism.languages.markup;\nPrism.languages.mathml = Prism.languages.markup;\nPrism.languages.svg = Prism.languages.markup;\n\nPrism.languages.xml = Prism.languages.extend('markup', {});\nPrism.languages.ssml = Prism.languages.xml;\nPrism.languages.atom = Prism.languages.xml;\nPrism.languages.rss = Prism.languages.xml;\n\n\n/* **********************************************\n     Begin prism-css.js\n********************************************** */\n\n(function (Prism) {\n\n\tvar string = /(?:\"(?:\\\\(?:\\r\\n|[\\s\\S])|[^\"\\\\\\r\\n])*\"|'(?:\\\\(?:\\r\\n|[\\s\\S])|[^'\\\\\\r\\n])*')/;\n\n\tPrism.languages.css = {\n\t\t'comment': /\\/\\*[\\s\\S]*?\\*\\//,\n\t\t'atrule': {\n\t\t\tpattern: RegExp('@[\\\\w-](?:' + /[^;{\\s\"']|\\s+(?!\\s)/.source + '|' + string.source + ')*?' + /(?:;|(?=\\s*\\{))/.source),\n\t\t\tinside: {\n\t\t\t\t'rule': /^@[\\w-]+/,\n\t\t\t\t'selector-function-argument': {\n\t\t\t\t\tpattern: /(\\bselector\\s*\\(\\s*(?![\\s)]))(?:[^()\\s]|\\s+(?![\\s)])|\\((?:[^()]|\\([^()]*\\))*\\))+(?=\\s*\\))/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\talias: 'selector'\n\t\t\t\t},\n\t\t\t\t'keyword': {\n\t\t\t\t\tpattern: /(^|[^\\w-])(?:and|not|only|or)(?![\\w-])/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t}\n\t\t\t\t// See rest below\n\t\t\t}\n\t\t},\n\t\t'url': {\n\t\t\t// https://drafts.csswg.org/css-values-3/#urls\n\t\t\tpattern: RegExp('\\\\burl\\\\((?:' + string.source + '|' + /(?:[^\\\\\\r\\n()\"']|\\\\[\\s\\S])*/.source + ')\\\\)', 'i'),\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'function': /^url/i,\n\t\t\t\t'punctuation': /^\\(|\\)$/,\n\t\t\t\t'string': {\n\t\t\t\t\tpattern: RegExp('^' + string.source + '$'),\n\t\t\t\t\talias: 'url'\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t'selector': {\n\t\t\tpattern: RegExp('(^|[{}\\\\s])[^{}\\\\s](?:[^{};\"\\'\\\\s]|\\\\s+(?![\\\\s{])|' + string.source + ')*(?=\\\\s*\\\\{)'),\n\t\t\tlookbehind: true\n\t\t},\n\t\t'string': {\n\t\t\tpattern: string,\n\t\t\tgreedy: true\n\t\t},\n\t\t'property': {\n\t\t\tpattern: /(^|[^-\\w\\xA0-\\uFFFF])(?!\\s)[-_a-z\\xA0-\\uFFFF](?:(?!\\s)[-\\w\\xA0-\\uFFFF])*(?=\\s*:)/i,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'important': /!important\\b/i,\n\t\t'function': {\n\t\t\tpattern: /(^|[^-a-z0-9])[-a-z0-9]+(?=\\()/i,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'punctuation': /[(){};:,]/\n\t};\n\n\tPrism.languages.css['atrule'].inside.rest = Prism.languages.css;\n\n\tvar markup = Prism.languages.markup;\n\tif (markup) {\n\t\tmarkup.tag.addInlined('style', 'css');\n\t\tmarkup.tag.addAttribute('style', 'css');\n\t}\n\n}(Prism));\n\n\n/* **********************************************\n     Begin prism-clike.js\n********************************************** */\n\nPrism.languages.clike = {\n\t'comment': [\n\t\t{\n\t\t\tpattern: /(^|[^\\\\])\\/\\*[\\s\\S]*?(?:\\*\\/|$)/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^\\\\:])\\/\\/.*/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true\n\t\t}\n\t],\n\t'string': {\n\t\tpattern: /([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1/,\n\t\tgreedy: true\n\t},\n\t'class-name': {\n\t\tpattern: /(\\b(?:class|extends|implements|instanceof|interface|new|trait)\\s+|\\bcatch\\s+\\()[\\w.\\\\]+/i,\n\t\tlookbehind: true,\n\t\tinside: {\n\t\t\t'punctuation': /[.\\\\]/\n\t\t}\n\t},\n\t'keyword': /\\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\\b/,\n\t'boolean': /\\b(?:false|true)\\b/,\n\t'function': /\\b\\w+(?=\\()/,\n\t'number': /\\b0x[\\da-f]+\\b|(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:e[+-]?\\d+)?/i,\n\t'operator': /[<>]=?|[!=]=?=?|--?|\\+\\+?|&&?|\\|\\|?|[?*/~^%]/,\n\t'punctuation': /[{}[\\];(),.:]/\n};\n\n\n/* **********************************************\n     Begin prism-javascript.js\n********************************************** */\n\nPrism.languages.javascript = Prism.languages.extend('clike', {\n\t'class-name': [\n\t\tPrism.languages.clike['class-name'],\n\t\t{\n\t\t\tpattern: /(^|[^$\\w\\xA0-\\uFFFF])(?!\\s)[_$A-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\.(?:constructor|prototype))/,\n\t\t\tlookbehind: true\n\t\t}\n\t],\n\t'keyword': [\n\t\t{\n\t\t\tpattern: /((?:^|\\})\\s*)catch\\b/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^.]|\\.\\.\\.\\s*)\\b(?:as|assert(?=\\s*\\{)|async(?=\\s*(?:function\\b|\\(|[$\\w\\xA0-\\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\\s*(?:\\{|$))|for|from(?=\\s*(?:['\"]|$))|function|(?:get|set)(?=\\s*(?:[#\\[$\\w\\xA0-\\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\\b/,\n\t\t\tlookbehind: true\n\t\t},\n\t],\n\t// Allow for all non-ASCII characters (See http://stackoverflow.com/a/2008444)\n\t'function': /#?(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*(?:\\.\\s*(?:apply|bind|call)\\s*)?\\()/,\n\t'number': {\n\t\tpattern: RegExp(\n\t\t\t/(^|[^\\w$])/.source +\n\t\t\t'(?:' +\n\t\t\t(\n\t\t\t\t// constant\n\t\t\t\t/NaN|Infinity/.source +\n\t\t\t\t'|' +\n\t\t\t\t// binary integer\n\t\t\t\t/0[bB][01]+(?:_[01]+)*n?/.source +\n\t\t\t\t'|' +\n\t\t\t\t// octal integer\n\t\t\t\t/0[oO][0-7]+(?:_[0-7]+)*n?/.source +\n\t\t\t\t'|' +\n\t\t\t\t// hexadecimal integer\n\t\t\t\t/0[xX][\\dA-Fa-f]+(?:_[\\dA-Fa-f]+)*n?/.source +\n\t\t\t\t'|' +\n\t\t\t\t// decimal bigint\n\t\t\t\t/\\d+(?:_\\d+)*n/.source +\n\t\t\t\t'|' +\n\t\t\t\t// decimal number (integer or float) but no bigint\n\t\t\t\t/(?:\\d+(?:_\\d+)*(?:\\.(?:\\d+(?:_\\d+)*)?)?|\\.\\d+(?:_\\d+)*)(?:[Ee][+-]?\\d+(?:_\\d+)*)?/.source\n\t\t\t) +\n\t\t\t')' +\n\t\t\t/(?![\\w$])/.source\n\t\t),\n\t\tlookbehind: true\n\t},\n\t'operator': /--|\\+\\+|\\*\\*=?|=>|&&=?|\\|\\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\\.{3}|\\?\\?=?|\\?\\.?|[~:]/\n});\n\nPrism.languages.javascript['class-name'][0].pattern = /(\\b(?:class|extends|implements|instanceof|interface|new)\\s+)[\\w.\\\\]+/;\n\nPrism.languages.insertBefore('javascript', 'keyword', {\n\t'regex': {\n\t\tpattern: RegExp(\n\t\t\t// lookbehind\n\t\t\t// eslint-disable-next-line regexp/no-dupe-characters-character-class\n\t\t\t/((?:^|[^$\\w\\xA0-\\uFFFF.\"'\\])\\s]|\\b(?:return|yield))\\s*)/.source +\n\t\t\t// Regex pattern:\n\t\t\t// There are 2 regex patterns here. The RegExp set notation proposal added support for nested character\n\t\t\t// classes if the `v` flag is present. Unfortunately, nested CCs are both context-free and incompatible\n\t\t\t// with the only syntax, so we have to define 2 different regex patterns.\n\t\t\t/\\//.source +\n\t\t\t'(?:' +\n\t\t\t/(?:\\[(?:[^\\]\\\\\\r\\n]|\\\\.)*\\]|\\\\.|[^/\\\\\\[\\r\\n])+\\/[dgimyus]{0,7}/.source +\n\t\t\t'|' +\n\t\t\t// `v` flag syntax. This supports 3 levels of nested character classes.\n\t\t\t/(?:\\[(?:[^[\\]\\\\\\r\\n]|\\\\.|\\[(?:[^[\\]\\\\\\r\\n]|\\\\.|\\[(?:[^[\\]\\\\\\r\\n]|\\\\.)*\\])*\\])*\\]|\\\\.|[^/\\\\\\[\\r\\n])+\\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source +\n\t\t\t')' +\n\t\t\t// lookahead\n\t\t\t/(?=(?:\\s|\\/\\*(?:[^*]|\\*(?!\\/))*\\*\\/)*(?:$|[\\r\\n,.;:})\\]]|\\/\\/))/.source\n\t\t),\n\t\tlookbehind: true,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'regex-source': {\n\t\t\t\tpattern: /^(\\/)[\\s\\S]+(?=\\/[a-z]*$)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'language-regex',\n\t\t\t\tinside: Prism.languages.regex\n\t\t\t},\n\t\t\t'regex-delimiter': /^\\/|\\/$/,\n\t\t\t'regex-flags': /^[a-z]+$/,\n\t\t}\n\t},\n\t// This must be declared before keyword because we use \"function\" inside the look-forward\n\t'function-variable': {\n\t\tpattern: /#?(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*[=:]\\s*(?:async\\s*)?(?:\\bfunction\\b|(?:\\((?:[^()]|\\([^()]*\\))*\\)|(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*)\\s*=>))/,\n\t\talias: 'function'\n\t},\n\t'parameter': [\n\t\t{\n\t\t\tpattern: /(function(?:\\s+(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*)?\\s*\\(\\s*)(?!\\s)(?:[^()\\s]|\\s+(?![\\s)])|\\([^()]*\\))+(?=\\s*\\))/,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^$\\w\\xA0-\\uFFFF])(?!\\s)[_$a-z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*=>)/i,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t},\n\t\t{\n\t\t\tpattern: /(\\(\\s*)(?!\\s)(?:[^()\\s]|\\s+(?![\\s)])|\\([^()]*\\))+(?=\\s*\\)\\s*=>)/,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t},\n\t\t{\n\t\t\tpattern: /((?:\\b|\\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\\w\\xA0-\\uFFFF]))(?:(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*\\s*)\\(\\s*|\\]\\s*\\(\\s*)(?!\\s)(?:[^()\\s]|\\s+(?![\\s)])|\\([^()]*\\))+(?=\\s*\\)\\s*\\{)/,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t}\n\t],\n\t'constant': /\\b[A-Z](?:[A-Z_]|\\dx?)*\\b/\n});\n\nPrism.languages.insertBefore('javascript', 'string', {\n\t'hashbang': {\n\t\tpattern: /^#!.*/,\n\t\tgreedy: true,\n\t\talias: 'comment'\n\t},\n\t'template-string': {\n\t\tpattern: /`(?:\\\\[\\s\\S]|\\$\\{(?:[^{}]|\\{(?:[^{}]|\\{[^}]*\\})*\\})+\\}|(?!\\$\\{)[^\\\\`])*`/,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'template-punctuation': {\n\t\t\t\tpattern: /^`|`$/,\n\t\t\t\talias: 'string'\n\t\t\t},\n\t\t\t'interpolation': {\n\t\t\t\tpattern: /((?:^|[^\\\\])(?:\\\\{2})*)\\$\\{(?:[^{}]|\\{(?:[^{}]|\\{[^}]*\\})*\\})+\\}/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'interpolation-punctuation': {\n\t\t\t\t\t\tpattern: /^\\$\\{|\\}$/,\n\t\t\t\t\t\talias: 'punctuation'\n\t\t\t\t\t},\n\t\t\t\t\trest: Prism.languages.javascript\n\t\t\t\t}\n\t\t\t},\n\t\t\t'string': /[\\s\\S]+/\n\t\t}\n\t},\n\t'string-property': {\n\t\tpattern: /((?:^|[,{])[ \\t]*)([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\2)[^\\\\\\r\\n])*\\2(?=\\s*:)/m,\n\t\tlookbehind: true,\n\t\tgreedy: true,\n\t\talias: 'property'\n\t}\n});\n\nPrism.languages.insertBefore('javascript', 'operator', {\n\t'literal-property': {\n\t\tpattern: /((?:^|[,{])[ \\t]*)(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*:)/m,\n\t\tlookbehind: true,\n\t\talias: 'property'\n\t},\n});\n\nif (Prism.languages.markup) {\n\tPrism.languages.markup.tag.addInlined('script', 'javascript');\n\n\t// add attribute support for all DOM events.\n\t// https://developer.mozilla.org/en-US/docs/Web/Events#Standard_events\n\tPrism.languages.markup.tag.addAttribute(\n\t\t/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,\n\t\t'javascript'\n\t);\n}\n\nPrism.languages.js = Prism.languages.javascript;\n\n\n/* **********************************************\n     Begin prism-file-highlight.js\n********************************************** */\n\n(function () {\n\n\tif (typeof Prism === 'undefined' || typeof document === 'undefined') {\n\t\treturn;\n\t}\n\n\t// https://developer.mozilla.org/en-US/docs/Web/API/Element/matches#Polyfill\n\tif (!Element.prototype.matches) {\n\t\tElement.prototype.matches = Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector;\n\t}\n\n\tvar LOADING_MESSAGE = 'Loading…';\n\tvar FAILURE_MESSAGE = function (status, message) {\n\t\treturn '✖ Error ' + status + ' while fetching file: ' + message;\n\t};\n\tvar FAILURE_EMPTY_MESSAGE = '✖ Error: File does not exist or is empty';\n\n\tvar EXTENSIONS = {\n\t\t'js': 'javascript',\n\t\t'py': 'python',\n\t\t'rb': 'ruby',\n\t\t'ps1': 'powershell',\n\t\t'psm1': 'powershell',\n\t\t'sh': 'bash',\n\t\t'bat': 'batch',\n\t\t'h': 'c',\n\t\t'tex': 'latex'\n\t};\n\n\tvar STATUS_ATTR = 'data-src-status';\n\tvar STATUS_LOADING = 'loading';\n\tvar STATUS_LOADED = 'loaded';\n\tvar STATUS_FAILED = 'failed';\n\n\tvar SELECTOR = 'pre[data-src]:not([' + STATUS_ATTR + '=\"' + STATUS_LOADED + '\"])'\n\t\t+ ':not([' + STATUS_ATTR + '=\"' + STATUS_LOADING + '\"])';\n\n\t/**\n\t * Loads the given file.\n\t *\n\t * @param {string} src The URL or path of the source file to load.\n\t * @param {(result: string) => void} success\n\t * @param {(reason: string) => void} error\n\t */\n\tfunction loadFile(src, success, error) {\n\t\tvar xhr = new XMLHttpRequest();\n\t\txhr.open('GET', src, true);\n\t\txhr.onreadystatechange = function () {\n\t\t\tif (xhr.readyState == 4) {\n\t\t\t\tif (xhr.status < 400 && xhr.responseText) {\n\t\t\t\t\tsuccess(xhr.responseText);\n\t\t\t\t} else {\n\t\t\t\t\tif (xhr.status >= 400) {\n\t\t\t\t\t\terror(FAILURE_MESSAGE(xhr.status, xhr.statusText));\n\t\t\t\t\t} else {\n\t\t\t\t\t\terror(FAILURE_EMPTY_MESSAGE);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\txhr.send(null);\n\t}\n\n\t/**\n\t * Parses the given range.\n\t *\n\t * This returns a range with inclusive ends.\n\t *\n\t * @param {string | null | undefined} range\n\t * @returns {[number, number | undefined] | undefined}\n\t */\n\tfunction parseRange(range) {\n\t\tvar m = /^\\s*(\\d+)\\s*(?:(,)\\s*(?:(\\d+)\\s*)?)?$/.exec(range || '');\n\t\tif (m) {\n\t\t\tvar start = Number(m[1]);\n\t\t\tvar comma = m[2];\n\t\t\tvar end = m[3];\n\n\t\t\tif (!comma) {\n\t\t\t\treturn [start, start];\n\t\t\t}\n\t\t\tif (!end) {\n\t\t\t\treturn [start, undefined];\n\t\t\t}\n\t\t\treturn [start, Number(end)];\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tPrism.hooks.add('before-highlightall', function (env) {\n\t\tenv.selector += ', ' + SELECTOR;\n\t});\n\n\tPrism.hooks.add('before-sanity-check', function (env) {\n\t\tvar pre = /** @type {HTMLPreElement} */ (env.element);\n\t\tif (pre.matches(SELECTOR)) {\n\t\t\tenv.code = ''; // fast-path the whole thing and go to complete\n\n\t\t\tpre.setAttribute(STATUS_ATTR, STATUS_LOADING); // mark as loading\n\n\t\t\t// add code element with loading message\n\t\t\tvar code = pre.appendChild(document.createElement('CODE'));\n\t\t\tcode.textContent = LOADING_MESSAGE;\n\n\t\t\tvar src = pre.getAttribute('data-src');\n\n\t\t\tvar language = env.language;\n\t\t\tif (language === 'none') {\n\t\t\t\t// the language might be 'none' because there is no language set;\n\t\t\t\t// in this case, we want to use the extension as the language\n\t\t\t\tvar extension = (/\\.(\\w+)$/.exec(src) || [, 'none'])[1];\n\t\t\t\tlanguage = EXTENSIONS[extension] || extension;\n\t\t\t}\n\n\t\t\t// set language classes\n\t\t\tPrism.util.setLanguage(code, language);\n\t\t\tPrism.util.setLanguage(pre, language);\n\n\t\t\t// preload the language\n\t\t\tvar autoloader = Prism.plugins.autoloader;\n\t\t\tif (autoloader) {\n\t\t\t\tautoloader.loadLanguages(language);\n\t\t\t}\n\n\t\t\t// load file\n\t\t\tloadFile(\n\t\t\t\tsrc,\n\t\t\t\tfunction (text) {\n\t\t\t\t\t// mark as loaded\n\t\t\t\t\tpre.setAttribute(STATUS_ATTR, STATUS_LOADED);\n\n\t\t\t\t\t// handle data-range\n\t\t\t\t\tvar range = parseRange(pre.getAttribute('data-range'));\n\t\t\t\t\tif (range) {\n\t\t\t\t\t\tvar lines = text.split(/\\r\\n?|\\n/g);\n\n\t\t\t\t\t\t// the range is one-based and inclusive on both ends\n\t\t\t\t\t\tvar start = range[0];\n\t\t\t\t\t\tvar end = range[1] == null ? lines.length : range[1];\n\n\t\t\t\t\t\tif (start < 0) { start += lines.length; }\n\t\t\t\t\t\tstart = Math.max(0, Math.min(start - 1, lines.length));\n\t\t\t\t\t\tif (end < 0) { end += lines.length; }\n\t\t\t\t\t\tend = Math.max(0, Math.min(end, lines.length));\n\n\t\t\t\t\t\ttext = lines.slice(start, end).join('\\n');\n\n\t\t\t\t\t\t// add data-start for line numbers\n\t\t\t\t\t\tif (!pre.hasAttribute('data-start')) {\n\t\t\t\t\t\t\tpre.setAttribute('data-start', String(start + 1));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// highlight code\n\t\t\t\t\tcode.textContent = text;\n\t\t\t\t\tPrism.highlightElement(code);\n\t\t\t\t},\n\t\t\t\tfunction (error) {\n\t\t\t\t\t// mark as failed\n\t\t\t\t\tpre.setAttribute(STATUS_ATTR, STATUS_FAILED);\n\n\t\t\t\t\tcode.textContent = error;\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t});\n\n\tPrism.plugins.fileHighlight = {\n\t\t/**\n\t\t * Executes the File Highlight plugin for all matching `pre` elements under the given container.\n\t\t *\n\t\t * Note: Elements which are already loaded or currently loading will not be touched by this method.\n\t\t *\n\t\t * @param {ParentNode} [container=document]\n\t\t */\n\t\thighlight: function highlight(container) {\n\t\t\tvar elements = (container || document).querySelectorAll(SELECTOR);\n\n\t\t\tfor (var i = 0, element; (element = elements[i++]);) {\n\t\t\t\tPrism.highlightElement(element);\n\t\t\t}\n\t\t}\n\t};\n\n\tvar logged = false;\n\t/** @deprecated Use `Prism.plugins.fileHighlight.highlight` instead. */\n\tPrism.fileHighlight = function () {\n\t\tif (!logged) {\n\t\t\tconsole.warn('Prism.fileHighlight is deprecated. Use `Prism.plugins.fileHighlight.highlight` instead.');\n\t\t\tlogged = true;\n\t\t}\n\t\tPrism.plugins.fileHighlight.highlight.apply(this, arguments);\n\t};\n\n}());\n/components/prism-cobol.js\u0015)Prism.languages.cobol = {\n\t'comment': {\n\t\tpattern: /\\*>.*|(^[ \\t]*)\\*.*/m,\n\t\tlookbehind: true,\n\t\tgreedy: true\n\t},\n\t'string': {\n\t\tpattern: /[xzgn]?(?:\"(?:[^\\r\\n\"]|\"\")*\"(?!\")|'(?:[^\\r\\n']|'')*'(?!'))/i,\n\t\tgreedy: true\n\t},\n\n\t'level': {\n\t\tpattern: /(^[ \\t]*)\\d+\\b/m,\n\t\tlookbehind: true,\n\t\tgreedy: true,\n\t\talias: 'number'\n\t},\n\n\t'class-name': {\n\t\t// https://github.com/antlr/grammars-v4/blob/42edd5b687d183b5fa679e858a82297bd27141e7/cobol85/Cobol85.g4#L1015\n\t\tpattern: /(\\bpic(?:ture)?\\s+)(?:(?:[-\\w$/,:*+<>]|\\.(?!\\s|$))(?:\\(\\d+\\))?)+/i,\n\t\tlookbehind: true,\n\t\tinside: {\n\t\t\t'number': {\n\t\t\t\tpattern: /(\\()\\d+/,\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\t'punctuation': /[()]/\n\t\t}\n\t},\n\n\t'keyword': {\n\t\tpattern: /(^|[^\\w-])(?:ABORT|ACCEPT|ACCESS|ADD|ADDRESS|ADVANCING|AFTER|ALIGNED|ALL|ALPHABET|ALPHABETIC|ALPHABETIC-LOWER|ALPHABETIC-UPPER|ALPHANUMERIC|ALPHANUMERIC-EDITED|ALSO|ALTER|ALTERNATE|ANY|ARE|AREA|AREAS|AS|ASCENDING|ASCII|ASSIGN|ASSOCIATED-DATA|ASSOCIATED-DATA-LENGTH|AT|ATTRIBUTE|AUTHOR|AUTO|AUTO-SKIP|BACKGROUND-COLOR|BACKGROUND-COLOUR|BASIS|BEEP|BEFORE|BEGINNING|BELL|BINARY|BIT|BLANK|BLINK|BLOCK|BOTTOM|BOUNDS|BY|BYFUNCTION|BYTITLE|CALL|CANCEL|CAPABLE|CCSVERSION|CD|CF|CH|CHAINING|CHANGED|CHANNEL|CHARACTER|CHARACTERS|CLASS|CLASS-ID|CLOCK-UNITS|CLOSE|CLOSE-DISPOSITION|COBOL|CODE|CODE-SET|COL|COLLATING|COLUMN|COM-REG|COMMA|COMMITMENT|COMMON|COMMUNICATION|COMP|COMP-1|COMP-2|COMP-3|COMP-4|COMP-5|COMPUTATIONAL|COMPUTATIONAL-1|COMPUTATIONAL-2|COMPUTATIONAL-3|COMPUTATIONAL-4|COMPUTATIONAL-5|COMPUTE|CONFIGURATION|CONTAINS|CONTENT|CONTINUE|CONTROL|CONTROL-POINT|CONTROLS|CONVENTION|CONVERTING|COPY|CORR|CORRESPONDING|COUNT|CRUNCH|CURRENCY|CURSOR|DATA|DATA-BASE|DATE|DATE-COMPILED|DATE-WRITTEN|DAY|DAY-OF-WEEK|DBCS|DE|DEBUG-CONTENTS|DEBUG-ITEM|DEBUG-LINE|DEBUG-NAME|DEBUG-SUB-1|DEBUG-SUB-2|DEBUG-SUB-3|DEBUGGING|DECIMAL-POINT|DECLARATIVES|DEFAULT|DEFAULT-DISPLAY|DEFINITION|DELETE|DELIMITED|DELIMITER|DEPENDING|DESCENDING|DESTINATION|DETAIL|DFHRESP|DFHVALUE|DISABLE|DISK|DISPLAY|DISPLAY-1|DIVIDE|DIVISION|DONTCARE|DOUBLE|DOWN|DUPLICATES|DYNAMIC|EBCDIC|EGCS|EGI|ELSE|EMI|EMPTY-CHECK|ENABLE|END|END-ACCEPT|END-ADD|END-CALL|END-COMPUTE|END-DELETE|END-DIVIDE|END-EVALUATE|END-IF|END-MULTIPLY|END-OF-PAGE|END-PERFORM|END-READ|END-RECEIVE|END-RETURN|END-REWRITE|END-SEARCH|END-START|END-STRING|END-SUBTRACT|END-UNSTRING|END-WRITE|ENDING|ENTER|ENTRY|ENTRY-PROCEDURE|ENVIRONMENT|EOL|EOP|EOS|ERASE|ERROR|ESCAPE|ESI|EVALUATE|EVENT|EVERY|EXCEPTION|EXCLUSIVE|EXHIBIT|EXIT|EXPORT|EXTEND|EXTENDED|EXTERNAL|FD|FILE|FILE-CONTROL|FILLER|FINAL|FIRST|FOOTING|FOR|FOREGROUND-COLOR|FOREGROUND-COLOUR|FROM|FULL|FUNCTION|FUNCTION-POINTER|FUNCTIONNAME|GENERATE|GIVING|GLOBAL|GO|GOBACK|GRID|GROUP|HEADING|HIGH-VALUE|HIGH-VALUES|HIGHLIGHT|I-O|I-O-CONTROL|ID|IDENTIFICATION|IF|IMPLICIT|IMPORT|IN|INDEX|INDEXED|INDICATE|INITIAL|INITIALIZE|INITIATE|INPUT|INPUT-OUTPUT|INSPECT|INSTALLATION|INTEGER|INTO|INVALID|INVOKE|IS|JUST|JUSTIFIED|KANJI|KEPT|KEY|KEYBOARD|LABEL|LANGUAGE|LAST|LB|LD|LEADING|LEFT|LEFTLINE|LENGTH|LENGTH-CHECK|LIBACCESS|LIBPARAMETER|LIBRARY|LIMIT|LIMITS|LINAGE|LINAGE-COUNTER|LINE|LINE-COUNTER|LINES|LINKAGE|LIST|LOCAL|LOCAL-STORAGE|LOCK|LONG-DATE|LONG-TIME|LOW-VALUE|LOW-VALUES|LOWER|LOWLIGHT|MEMORY|MERGE|MESSAGE|MMDDYYYY|MODE|MODULES|MORE-LABELS|MOVE|MULTIPLE|MULTIPLY|NAMED|NATIONAL|NATIONAL-EDITED|NATIVE|NEGATIVE|NETWORK|NEXT|NO|NO-ECHO|NULL|NULLS|NUMBER|NUMERIC|NUMERIC-DATE|NUMERIC-EDITED|NUMERIC-TIME|OBJECT-COMPUTER|OCCURS|ODT|OF|OFF|OMITTED|ON|OPEN|OPTIONAL|ORDER|ORDERLY|ORGANIZATION|OTHER|OUTPUT|OVERFLOW|OVERLINE|OWN|PACKED-DECIMAL|PADDING|PAGE|PAGE-COUNTER|PASSWORD|PERFORM|PF|PH|PIC|PICTURE|PLUS|POINTER|PORT|POSITION|POSITIVE|PRINTER|PRINTING|PRIVATE|PROCEDURE|PROCEDURE-POINTER|PROCEDURES|PROCEED|PROCESS|PROGRAM|PROGRAM-ID|PROGRAM-LIBRARY|PROMPT|PURGE|QUEUE|QUOTE|QUOTES|RANDOM|RD|READ|READER|REAL|RECEIVE|RECEIVED|RECORD|RECORDING|RECORDS|RECURSIVE|REDEFINES|REEL|REF|REFERENCE|REFERENCES|RELATIVE|RELEASE|REMAINDER|REMARKS|REMOTE|REMOVAL|REMOVE|RENAMES|REPLACE|REPLACING|REPORT|REPORTING|REPORTS|REQUIRED|RERUN|RESERVE|RESET|RETURN|RETURN-CODE|RETURNING|REVERSE-VIDEO|REVERSED|REWIND|REWRITE|RF|RH|RIGHT|ROUNDED|RUN|SAME|SAVE|SCREEN|SD|SEARCH|SECTION|SECURE|SECURITY|SEGMENT|SEGMENT-LIMIT|SELECT|SEND|SENTENCE|SEPARATE|SEQUENCE|SEQUENTIAL|SET|SHARED|SHAREDBYALL|SHAREDBYRUNUNIT|SHARING|SHIFT-IN|SHIFT-OUT|SHORT-DATE|SIGN|SIZE|SORT|SORT-CONTROL|SORT-CORE-SIZE|SORT-FILE-SIZE|SORT-MERGE|SORT-MESSAGE|SORT-MODE-SIZE|SORT-RETURN|SOURCE|SOURCE-COMPUTER|SPACE|SPACES|SPECIAL-NAMES|STANDARD|STANDARD-1|STANDARD-2|START|STATUS|STOP|STRING|SUB-QUEUE-1|SUB-QUEUE-2|SUB-QUEUE-3|SUBTRACT|SUM|SUPPRESS|SYMBOL|SYMBOLIC|SYNC|SYNCHRONIZED|TABLE|TALLY|TALLYING|TAPE|TASK|TERMINAL|TERMINATE|TEST|TEXT|THEN|THREAD|THREAD-LOCAL|THROUGH|THRU|TIME|TIMER|TIMES|TITLE|TO|TODAYS-DATE|TODAYS-NAME|TOP|TRAILING|TRUNCATED|TYPE|TYPEDEF|UNDERLINE|UNIT|UNSTRING|UNTIL|UP|UPON|USAGE|USE|USING|VALUE|VALUES|VARYING|VIRTUAL|WAIT|WHEN|WHEN-COMPILED|WITH|WORDS|WORKING-STORAGE|WRITE|YEAR|YYYYDDD|YYYYMMDD|ZERO-FILL|ZEROES|ZEROS)(?![\\w-])/i,\n\t\tlookbehind: true\n\t},\n\n\t'boolean': {\n\t\tpattern: /(^|[^\\w-])(?:false|true)(?![\\w-])/i,\n\t\tlookbehind: true\n\t},\n\t'number': {\n\t\tpattern: /(^|[^\\w-])(?:[+-]?(?:(?:\\d+(?:[.,]\\d+)?|[.,]\\d+)(?:e[+-]?\\d+)?|zero))(?![\\w-])/i,\n\t\tlookbehind: true\n\t},\n\t'operator': [\n\t\t/<>|[<>]=?|[=+*/&]/,\n\t\t{\n\t\t\tpattern: /(^|[^\\w-])(?:-|and|equal|greater|less|not|or|than)(?![\\w-])/i,\n\t\t\tlookbehind: true\n\t\t}\n\t],\n\t'punctuation': /[.:,()]/\n};\n!/components/prism-asciidoc.min.js\u0011W!function(t){var n={pattern:/(^[ \\t]*)\\[(?!\\[)(?:([\"'$`])(?:(?!\\2)[^\\\\]|\\\\.)*\\2|\\[(?:[^\\[\\]\\\\]|\\\\.)*\\]|[^\\[\\]\\\\\"'$`]|\\\\.)*\\]/m,lookbehind:!0,inside:{quoted:{pattern:/([$`])(?:(?!\\1)[^\\\\]|\\\\.)*\\1/,inside:{punctuation:/^[$`]|[$`]$/}},interpreted:{pattern:/'(?:[^'\\\\]|\\\\.)*'/,inside:{punctuation:/^'|'$/}},string:/\"(?:[^\"\\\\]|\\\\.)*\"/,variable:/\\w+(?==)/,punctuation:/^\\[|\\]$|,/,operator:/=/,\"attr-value\":/(?!^\\s+$).+/}},i=t.languages.asciidoc={\"comment-block\":{pattern:/^(\\/{4,})$[\\s\\S]*?^\\1/m,alias:\"comment\"},table:{pattern:/^\\|={3,}(?:(?:\\r?\\n|\\r(?!\\n)).*)*?(?:\\r?\\n|\\r)\\|={3,}$/m,inside:{specifiers:{pattern:/(?:(?:(?:\\d+(?:\\.\\d+)?|\\.\\d+)[+*](?:[<^>](?:\\.[<^>])?|\\.[<^>])?|[<^>](?:\\.[<^>])?|\\.[<^>])[a-z]*|[a-z]+)(?=\\|)/,alias:\"attr-value\"},punctuation:{pattern:/(^|[^\\\\])[|!]=*/,lookbehind:!0}}},\"passthrough-block\":{pattern:/^(\\+{4,})$[\\s\\S]*?^\\1$/m,inside:{punctuation:/^\\++|\\++$/}},\"literal-block\":{pattern:/^(-{4,}|\\.{4,})$[\\s\\S]*?^\\1$/m,inside:{punctuation:/^(?:-+|\\.+)|(?:-+|\\.+)$/}},\"other-block\":{pattern:/^(--|\\*{4,}|_{4,}|={4,})$[\\s\\S]*?^\\1$/m,inside:{punctuation:/^(?:-+|\\*+|_+|=+)|(?:-+|\\*+|_+|=+)$/}},\"list-punctuation\":{pattern:/(^[ \\t]*)(?:-|\\*{1,5}|\\.{1,5}|(?:[a-z]|\\d+)\\.|[xvi]+\\))(?= )/im,lookbehind:!0,alias:\"punctuation\"},\"list-label\":{pattern:/(^[ \\t]*)[a-z\\d].+(?::{2,4}|;;)(?=\\s)/im,lookbehind:!0,alias:\"symbol\"},\"indented-block\":{pattern:/((\\r?\\n|\\r)\\2)([ \\t]+)\\S.*(?:(?:\\r?\\n|\\r)\\3.+)*(?=\\2{2}|$)/,lookbehind:!0},comment:/^\\/\\/.*/m,title:{pattern:/^.+(?:\\r?\\n|\\r)(?:={3,}|-{3,}|~{3,}|\\^{3,}|\\+{3,})$|^={1,5} .+|^\\.(?![\\s.]).*/m,alias:\"important\",inside:{punctuation:/^(?:\\.|=+)|(?:=+|-+|~+|\\^+|\\++)$/}},\"attribute-entry\":{pattern:/^:[^:\\r\\n]+:(?: .*?(?: \\+(?:\\r?\\n|\\r).*?)*)?$/m,alias:\"tag\"},attributes:n,hr:{pattern:/^'{3,}$/m,alias:\"punctuation\"},\"page-break\":{pattern:/^<{3,}$/m,alias:\"punctuation\"},admonition:{pattern:/^(?:CAUTION|IMPORTANT|NOTE|TIP|WARNING):/m,alias:\"keyword\"},callout:[{pattern:/(^[ \\t]*)<?\\d*>/m,lookbehind:!0,alias:\"symbol\"},{pattern:/<\\d+>/,alias:\"symbol\"}],macro:{pattern:/\\b[a-z\\d][a-z\\d-]*::?(?:[^\\s\\[\\]]*\\[(?:[^\\]\\\\\"']|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*\\1|\\\\.)*\\])/,inside:{function:/^[a-z\\d-]+(?=:)/,punctuation:/^::?/,attributes:{pattern:/(?:\\[(?:[^\\]\\\\\"']|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*\\1|\\\\.)*\\])/,inside:n.inside}}},inline:{pattern:/(^|[^\\\\])(?:(?:\\B\\[(?:[^\\]\\\\\"']|([\"'])(?:(?!\\2)[^\\\\]|\\\\.)*\\2|\\\\.)*\\])?(?:\\b_(?!\\s)(?: _|[^_\\\\\\r\\n]|\\\\.)+(?:(?:\\r?\\n|\\r)(?: _|[^_\\\\\\r\\n]|\\\\.)+)*_\\b|\\B``(?!\\s).+?(?:(?:\\r?\\n|\\r).+?)*''\\B|\\B`(?!\\s)(?:[^`'\\s]|\\s+\\S)+['`]\\B|\\B(['*+#])(?!\\s)(?: \\3|(?!\\3)[^\\\\\\r\\n]|\\\\.)+(?:(?:\\r?\\n|\\r)(?: \\3|(?!\\3)[^\\\\\\r\\n]|\\\\.)+)*\\3\\B)|(?:\\[(?:[^\\]\\\\\"']|([\"'])(?:(?!\\4)[^\\\\]|\\\\.)*\\4|\\\\.)*\\])?(?:(__|\\*\\*|\\+\\+\\+?|##|\\$\\$|[~^]).+?(?:(?:\\r?\\n|\\r).+?)*\\5|\\{[^}\\r\\n]+\\}|\\[\\[\\[?.+?(?:(?:\\r?\\n|\\r).+?)*\\]?\\]\\]|<<.+?(?:(?:\\r?\\n|\\r).+?)*>>|\\(\\(\\(?.+?(?:(?:\\r?\\n|\\r).+?)*\\)?\\)\\)))/m,lookbehind:!0,inside:{attributes:n,url:{pattern:/^(?:\\[\\[\\[?.+?\\]?\\]\\]|<<.+?>>)$/,inside:{punctuation:/^(?:\\[\\[\\[?|<<)|(?:\\]\\]\\]?|>>)$/}},\"attribute-ref\":{pattern:/^\\{.+\\}$/,inside:{variable:{pattern:/(^\\{)[a-z\\d,+_-]+/,lookbehind:!0},operator:/^[=?!#%@$]|!(?=[:}])/,punctuation:/^\\{|\\}$|::?/}},italic:{pattern:/^(['_])[\\s\\S]+\\1$/,inside:{punctuation:/^(?:''?|__?)|(?:''?|__?)$/}},bold:{pattern:/^\\*[\\s\\S]+\\*$/,inside:{punctuation:/^\\*\\*?|\\*\\*?$/}},punctuation:/^(?:``?|\\+{1,3}|##?|\\$\\$|[~^]|\\(\\(\\(?)|(?:''?|\\+{1,3}|##?|\\$\\$|[~^`]|\\)?\\)\\))$/}},replacement:{pattern:/\\((?:C|R|TM)\\)/,alias:\"builtin\"},entity:/&#?[\\da-z]{1,8};/i,\"line-continuation\":{pattern:/(^| )\\+$/m,lookbehind:!0,alias:\"punctuation\"}};function e(t){for(var n={},e=0,a=(t=t.split(\" \")).length;e<a;e++)n[t[e]]=i[t[e]];return n}n.inside.interpreted.inside.rest=e(\"macro inline replacement entity\"),i[\"passthrough-block\"].inside.rest=e(\"macro\"),i[\"literal-block\"].inside.rest=e(\"callout\"),i.table.inside.rest=e(\"comment-block passthrough-block literal-block other-block list-punctuation indented-block comment title attribute-entry attributes hr page-break admonition list-label callout macro inline replacement entity line-continuation\"),i[\"other-block\"].inside.rest=e(\"table list-punctuation indented-block comment attribute-entry attributes hr page-break admonition list-label macro inline replacement entity line-continuation\"),i.title.inside.rest=e(\"macro inline replacement entity\"),t.hooks.add(\"wrap\",(function(t){\"entity\"===t.type&&(t.attributes.title=t.content.replace(/&amp;/,\"&\"))})),t.languages.adoc=t.languages.asciidoc}(Prism);/components/prism-kotlin.min.js\u0007!function(n){n.languages.kotlin=n.languages.extend(\"clike\",{keyword:{pattern:/(^|[^.])\\b(?:abstract|actual|annotation|as|break|by|catch|class|companion|const|constructor|continue|crossinline|data|do|dynamic|else|enum|expect|external|final|finally|for|fun|get|if|import|in|infix|init|inline|inner|interface|internal|is|lateinit|noinline|null|object|open|operator|out|override|package|private|protected|public|reified|return|sealed|set|super|suspend|tailrec|this|throw|to|try|typealias|val|var|vararg|when|where|while)\\b/,lookbehind:!0},function:[{pattern:/(?:`[^\\r\\n`]+`|\\b\\w+)(?=\\s*\\()/,greedy:!0},{pattern:/(\\.)(?:`[^\\r\\n`]+`|\\w+)(?=\\s*\\{)/,lookbehind:!0,greedy:!0}],number:/\\b(?:0[xX][\\da-fA-F]+(?:_[\\da-fA-F]+)*|0[bB][01]+(?:_[01]+)*|\\d+(?:_\\d+)*(?:\\.\\d+(?:_\\d+)*)?(?:[eE][+-]?\\d+(?:_\\d+)*)?[fFL]?)\\b/,operator:/\\+[+=]?|-[-=>]?|==?=?|!(?:!|==?)?|[\\/*%<>]=?|[?:]:?|\\.\\.|&&|\\|\\||\\b(?:and|inv|or|shl|shr|ushr|xor)\\b/}),delete n.languages.kotlin[\"class-name\"];var e={\"interpolation-punctuation\":{pattern:/^\\$\\{?|\\}$/,alias:\"punctuation\"},expression:{pattern:/[\\s\\S]+/,inside:n.languages.kotlin}};n.languages.insertBefore(\"kotlin\",\"string\",{\"string-literal\":[{pattern:/\"\"\"(?:[^$]|\\$(?:(?!\\{)|\\{[^{}]*\\}))*?\"\"\"/,alias:\"multiline\",inside:{interpolation:{pattern:/\\$(?:[a-z_]\\w*|\\{[^{}]*\\})/i,inside:e},string:/[\\s\\S]+/}},{pattern:/\"(?:[^\"\\\\\\r\\n$]|\\\\.|\\$(?:(?!\\{)|\\{[^{}]*\\}))*\"/,alias:\"singleline\",inside:{interpolation:{pattern:/((?:^|[^\\\\])(?:\\\\{2})*)\\$(?:[a-z_]\\w*|\\{[^{}]*\\})/i,lookbehind:!0,inside:e},string:/[\\s\\S]+/}}],char:{pattern:/'(?:[^'\\\\\\r\\n]|\\\\(?:.|u[a-fA-F0-9]{0,4}))'/,greedy:!0}}),delete n.languages.kotlin.string,n.languages.insertBefore(\"kotlin\",\"keyword\",{annotation:{pattern:/\\B@(?:\\w+:)?(?:[A-Z]\\w*|\\[[^\\]]+\\])/,alias:\"builtin\"}}),n.languages.insertBefore(\"kotlin\",\"function\",{label:{pattern:/\\b\\w+@|@\\w+\\b/,alias:\"symbol\"}}),n.languages.kt=n.languages.kotlin,n.languages.kts=n.languages.kotlin}(Prism);/components/prism-vbnet.min.js\u0006Prism.languages.vbnet=Prism.languages.extend(\"basic\",{comment:[{pattern:/(?:!|REM\\b).+/i,inside:{keyword:/^REM/i}},{pattern:/(^|[^\\\\:])'.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(^|[^\"])\"(?:\"\"|[^\"])*\"(?!\")/,lookbehind:!0,greedy:!0},keyword:/(?:\\b(?:ADDHANDLER|ADDRESSOF|ALIAS|AND|ANDALSO|AS|BEEP|BLOAD|BOOLEAN|BSAVE|BYREF|BYTE|BYVAL|CALL(?: ABSOLUTE)?|CASE|CATCH|CBOOL|CBYTE|CCHAR|CDATE|CDBL|CDEC|CHAIN|CHAR|CHDIR|CINT|CLASS|CLEAR|CLNG|CLOSE|CLS|COBJ|COM|COMMON|CONST|CONTINUE|CSBYTE|CSHORT|CSNG|CSTR|CTYPE|CUINT|CULNG|CUSHORT|DATA|DATE|DECIMAL|DECLARE|DEF(?: FN| SEG|DBL|INT|LNG|SNG|STR)|DEFAULT|DELEGATE|DIM|DIRECTCAST|DO|DOUBLE|ELSE|ELSEIF|END|ENUM|ENVIRON|ERASE|ERROR|EVENT|EXIT|FALSE|FIELD|FILES|FINALLY|FOR(?: EACH)?|FRIEND|FUNCTION|GET|GETTYPE|GETXMLNAMESPACE|GLOBAL|GOSUB|GOTO|HANDLES|IF|IMPLEMENTS|IMPORTS|IN|INHERITS|INPUT|INTEGER|INTERFACE|IOCTL|IS|ISNOT|KEY|KILL|LET|LIB|LIKE|LINE INPUT|LOCATE|LOCK|LONG|LOOP|LSET|ME|MKDIR|MOD|MODULE|MUSTINHERIT|MUSTOVERRIDE|MYBASE|MYCLASS|NAME|NAMESPACE|NARROWING|NEW|NEXT|NOT|NOTHING|NOTINHERITABLE|NOTOVERRIDABLE|OBJECT|OF|OFF|ON(?: COM| ERROR| KEY| TIMER)?|OPEN|OPERATOR|OPTION(?: BASE)?|OPTIONAL|OR|ORELSE|OUT|OVERLOADS|OVERRIDABLE|OVERRIDES|PARAMARRAY|PARTIAL|POKE|PRIVATE|PROPERTY|PROTECTED|PUBLIC|PUT|RAISEEVENT|READ|READONLY|REDIM|REM|REMOVEHANDLER|RESTORE|RESUME|RETURN|RMDIR|RSET|RUN|SBYTE|SELECT(?: CASE)?|SET|SHADOWS|SHARED|SHELL|SHORT|SINGLE|SLEEP|STATIC|STEP|STOP|STRING|STRUCTURE|SUB|SWAP|SYNCLOCK|SYSTEM|THEN|THROW|TIMER|TO|TROFF|TRON|TRUE|TRY|TRYCAST|TYPE|TYPEOF|UINTEGER|ULONG|UNLOCK|UNTIL|USHORT|USING|VIEW PRINT|WAIT|WEND|WHEN|WHILE|WIDENING|WITH|WITHEVENTS|WRITE|WRITEONLY|XOR)|\\B(?:#CONST|#ELSE|#ELSEIF|#END|#IF))(?:\\$|\\b)/i,punctuation:/[,;:(){}]/});/components/prism-haxe.js\b\u001aPrism.languages.haxe = Prism.languages.extend('clike', {\n\t'string': {\n\t\t// Strings can be multi-line\n\t\tpattern: /\"(?:[^\"\\\\]|\\\\[\\s\\S])*\"/,\n\t\tgreedy: true\n\t},\n\t'class-name': [\n\t\t{\n\t\t\tpattern: /(\\b(?:abstract|class|enum|extends|implements|interface|new|typedef)\\s+)[A-Z_]\\w*/,\n\t\t\tlookbehind: true,\n\t\t},\n\t\t// based on naming convention\n\t\t/\\b[A-Z]\\w*/\n\t],\n\t// The final look-ahead prevents highlighting of keywords if expressions such as \"haxe.macro.Expr\"\n\t'keyword': /\\bthis\\b|\\b(?:abstract|as|break|case|cast|catch|class|continue|default|do|dynamic|else|enum|extends|extern|final|for|from|function|if|implements|import|in|inline|interface|macro|new|null|operator|overload|override|package|private|public|return|static|super|switch|throw|to|try|typedef|untyped|using|var|while)(?!\\.)\\b/,\n\t'function': {\n\t\tpattern: /\\b[a-z_]\\w*(?=\\s*(?:<[^<>]*>\\s*)?\\()/i,\n\t\tgreedy: true\n\t},\n\t'operator': /\\.{3}|\\+\\+|--|&&|\\|\\||->|=>|(?:<<?|>{1,3}|[-+*/%!=&|^])=?|[?:~]/\n});\n\nPrism.languages.insertBefore('haxe', 'string', {\n\t'string-interpolation': {\n\t\tpattern: /'(?:[^'\\\\]|\\\\[\\s\\S])*'/,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'interpolation': {\n\t\t\t\tpattern: /(^|[^\\\\])\\$(?:\\w+|\\{[^{}]+\\})/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'interpolation-punctuation': {\n\t\t\t\t\t\tpattern: /^\\$\\{?|\\}$/,\n\t\t\t\t\t\talias: 'punctuation'\n\t\t\t\t\t},\n\t\t\t\t\t'expression': {\n\t\t\t\t\t\tpattern: /[\\s\\S]+/,\n\t\t\t\t\t\tinside: Prism.languages.haxe\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t},\n\t\t\t'string': /[\\s\\S]+/\n\t\t}\n\t}\n});\n\nPrism.languages.insertBefore('haxe', 'class-name', {\n\t'regex': {\n\t\tpattern: /~\\/(?:[^\\/\\\\\\r\\n]|\\\\.)+\\/[a-z]*/,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'regex-flags': /\\b[a-z]+$/,\n\t\t\t'regex-source': {\n\t\t\t\tpattern: /^(~\\/)[\\s\\S]+(?=\\/$)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'language-regex',\n\t\t\t\tinside: Prism.languages.regex\n\t\t\t},\n\t\t\t'regex-delimiter': /^~\\/|\\/$/,\n\t\t}\n\t}\n});\n\nPrism.languages.insertBefore('haxe', 'keyword', {\n\t'preprocessor': {\n\t\tpattern: /#(?:else|elseif|end|if)\\b.*/,\n\t\talias: 'property'\n\t},\n\t'metadata': {\n\t\tpattern: /@:?[\\w.]+/,\n\t\talias: 'symbol'\n\t},\n\t'reification': {\n\t\tpattern: /\\$(?:\\w+|(?=\\{))/,\n\t\talias: 'important'\n\t}\n});\n/components/prism-textile.js\u001f|(function (Prism) {\n\t// We don't allow for pipes inside parentheses\n\t// to not break table pattern |(. foo |). bar |\n\tvar modifierRegex = /\\([^|()\\n]+\\)|\\[[^\\]\\n]+\\]|\\{[^}\\n]+\\}/.source;\n\t// Opening and closing parentheses which are not a modifier\n\t// This pattern is necessary to prevent exponential backtracking\n\tvar parenthesesRegex = /\\)|\\((?![^|()\\n]+\\))/.source;\n\t/**\n\t * @param {string} source\n\t * @param {string} [flags]\n\t */\n\tfunction withModifier(source, flags) {\n\t\treturn RegExp(\n\t\t\tsource\n\t\t\t\t.replace(/<MOD>/g, function () { return '(?:' + modifierRegex + ')'; })\n\t\t\t\t.replace(/<PAR>/g, function () { return '(?:' + parenthesesRegex + ')'; }),\n\t\t\tflags || '');\n\t}\n\n\tvar modifierTokens = {\n\t\t'css': {\n\t\t\tpattern: /\\{[^{}]+\\}/,\n\t\t\tinside: {\n\t\t\t\trest: Prism.languages.css\n\t\t\t}\n\t\t},\n\t\t'class-id': {\n\t\t\tpattern: /(\\()[^()]+(?=\\))/,\n\t\t\tlookbehind: true,\n\t\t\talias: 'attr-value'\n\t\t},\n\t\t'lang': {\n\t\t\tpattern: /(\\[)[^\\[\\]]+(?=\\])/,\n\t\t\tlookbehind: true,\n\t\t\talias: 'attr-value'\n\t\t},\n\t\t// Anything else is punctuation (the first pattern is for row/col spans inside tables)\n\t\t'punctuation': /[\\\\\\/]\\d+|\\S/\n\t};\n\n\n\tvar textile = Prism.languages.textile = Prism.languages.extend('markup', {\n\t\t'phrase': {\n\t\t\tpattern: /(^|\\r|\\n)\\S[\\s\\S]*?(?=$|\\r?\\n\\r?\\n|\\r\\r)/,\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\n\t\t\t\t// h1. Header 1\n\t\t\t\t'block-tag': {\n\t\t\t\t\tpattern: withModifier(/^[a-z]\\w*(?:<MOD>|<PAR>|[<>=])*\\./.source),\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'modifier': {\n\t\t\t\t\t\t\tpattern: withModifier(/(^[a-z]\\w*)(?:<MOD>|<PAR>|[<>=])+(?=\\.)/.source),\n\t\t\t\t\t\t\tlookbehind: true,\n\t\t\t\t\t\t\tinside: modifierTokens\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'tag': /^[a-z]\\w*/,\n\t\t\t\t\t\t'punctuation': /\\.$/\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\t// # List item\n\t\t\t\t// * List item\n\t\t\t\t'list': {\n\t\t\t\t\tpattern: withModifier(/^[*#]+<MOD>*\\s+\\S.*/.source, 'm'),\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'modifier': {\n\t\t\t\t\t\t\tpattern: withModifier(/(^[*#]+)<MOD>+/.source),\n\t\t\t\t\t\t\tlookbehind: true,\n\t\t\t\t\t\t\tinside: modifierTokens\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'punctuation': /^[*#]+/\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\t// | cell | cell | cell |\n\t\t\t\t'table': {\n\t\t\t\t\t// Modifiers can be applied to the row: {color:red}.|1|2|3|\n\t\t\t\t\t// or the cell: |{color:red}.1|2|3|\n\t\t\t\t\tpattern: withModifier(/^(?:(?:<MOD>|<PAR>|[<>=^~])+\\.\\s*)?(?:\\|(?:(?:<MOD>|<PAR>|[<>=^~_]|[\\\\/]\\d+)+\\.|(?!(?:<MOD>|<PAR>|[<>=^~_]|[\\\\/]\\d+)+\\.))[^|]*)+\\|/.source, 'm'),\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'modifier': {\n\t\t\t\t\t\t\t// Modifiers for rows after the first one are\n\t\t\t\t\t\t\t// preceded by a pipe and a line feed\n\t\t\t\t\t\t\tpattern: withModifier(/(^|\\|(?:\\r?\\n|\\r)?)(?:<MOD>|<PAR>|[<>=^~_]|[\\\\/]\\d+)+(?=\\.)/.source),\n\t\t\t\t\t\t\tlookbehind: true,\n\t\t\t\t\t\t\tinside: modifierTokens\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'punctuation': /\\||^\\./\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\t'inline': {\n\t\t\t\t\t// eslint-disable-next-line regexp/no-super-linear-backtracking\n\t\t\t\t\tpattern: withModifier(/(^|[^a-zA-Z\\d])(\\*\\*|__|\\?\\?|[*_%@+\\-^~])<MOD>*.+?\\2(?![a-zA-Z\\d])/.source),\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t// Note: superscripts and subscripts are not handled specifically\n\n\t\t\t\t\t\t// *bold*, **bold**\n\t\t\t\t\t\t'bold': {\n\t\t\t\t\t\t\t// eslint-disable-next-line regexp/no-super-linear-backtracking\n\t\t\t\t\t\t\tpattern: withModifier(/(^(\\*\\*?)<MOD>*).+?(?=\\2)/.source),\n\t\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t\t},\n\n\t\t\t\t\t\t// _italic_, __italic__\n\t\t\t\t\t\t'italic': {\n\t\t\t\t\t\t\t// eslint-disable-next-line regexp/no-super-linear-backtracking\n\t\t\t\t\t\t\tpattern: withModifier(/(^(__?)<MOD>*).+?(?=\\2)/.source),\n\t\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t\t},\n\n\t\t\t\t\t\t// ??cite??\n\t\t\t\t\t\t'cite': {\n\t\t\t\t\t\t\t// eslint-disable-next-line regexp/no-super-linear-backtracking\n\t\t\t\t\t\t\tpattern: withModifier(/(^\\?\\?<MOD>*).+?(?=\\?\\?)/.source),\n\t\t\t\t\t\t\tlookbehind: true,\n\t\t\t\t\t\t\talias: 'string'\n\t\t\t\t\t\t},\n\n\t\t\t\t\t\t// @code@\n\t\t\t\t\t\t'code': {\n\t\t\t\t\t\t\t// eslint-disable-next-line regexp/no-super-linear-backtracking\n\t\t\t\t\t\t\tpattern: withModifier(/(^@<MOD>*).+?(?=@)/.source),\n\t\t\t\t\t\t\tlookbehind: true,\n\t\t\t\t\t\t\talias: 'keyword'\n\t\t\t\t\t\t},\n\n\t\t\t\t\t\t// +inserted+\n\t\t\t\t\t\t'inserted': {\n\t\t\t\t\t\t\t// eslint-disable-next-line regexp/no-super-linear-backtracking\n\t\t\t\t\t\t\tpattern: withModifier(/(^\\+<MOD>*).+?(?=\\+)/.source),\n\t\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t\t},\n\n\t\t\t\t\t\t// -deleted-\n\t\t\t\t\t\t'deleted': {\n\t\t\t\t\t\t\t// eslint-disable-next-line regexp/no-super-linear-backtracking\n\t\t\t\t\t\t\tpattern: withModifier(/(^-<MOD>*).+?(?=-)/.source),\n\t\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t\t},\n\n\t\t\t\t\t\t// %span%\n\t\t\t\t\t\t'span': {\n\t\t\t\t\t\t\t// eslint-disable-next-line regexp/no-super-linear-backtracking\n\t\t\t\t\t\t\tpattern: withModifier(/(^%<MOD>*).+?(?=%)/.source),\n\t\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t\t},\n\n\t\t\t\t\t\t'modifier': {\n\t\t\t\t\t\t\tpattern: withModifier(/(^\\*\\*|__|\\?\\?|[*_%@+\\-^~])<MOD>+/.source),\n\t\t\t\t\t\t\tlookbehind: true,\n\t\t\t\t\t\t\tinside: modifierTokens\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'punctuation': /[*_%?@+\\-^~]+/\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\t// [alias]http://example.com\n\t\t\t\t'link-ref': {\n\t\t\t\t\tpattern: /^\\[[^\\]]+\\]\\S+$/m,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'string': {\n\t\t\t\t\t\t\tpattern: /(^\\[)[^\\]]+(?=\\])/,\n\t\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'url': {\n\t\t\t\t\t\t\tpattern: /(^\\])\\S+$/,\n\t\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'punctuation': /[\\[\\]]/\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\t// \"text\":http://example.com\n\t\t\t\t// \"text\":link-ref\n\t\t\t\t'link': {\n\t\t\t\t\t// eslint-disable-next-line regexp/no-super-linear-backtracking\n\t\t\t\t\tpattern: withModifier(/\"<MOD>*[^\"]+\":.+?(?=[^\\w/]?(?:\\s|$))/.source),\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'text': {\n\t\t\t\t\t\t\t// eslint-disable-next-line regexp/no-super-linear-backtracking\n\t\t\t\t\t\t\tpattern: withModifier(/(^\"<MOD>*)[^\"]+(?=\")/.source),\n\t\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'modifier': {\n\t\t\t\t\t\t\tpattern: withModifier(/(^\")<MOD>+/.source),\n\t\t\t\t\t\t\tlookbehind: true,\n\t\t\t\t\t\t\tinside: modifierTokens\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'url': {\n\t\t\t\t\t\t\tpattern: /(:).+/,\n\t\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'punctuation': /[\":]/\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\t// !image.jpg!\n\t\t\t\t// !image.jpg(Title)!:http://example.com\n\t\t\t\t'image': {\n\t\t\t\t\tpattern: withModifier(/!(?:<MOD>|<PAR>|[<>=])*(?![<>=])[^!\\s()]+(?:\\([^)]+\\))?!(?::.+?(?=[^\\w/]?(?:\\s|$)))?/.source),\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'source': {\n\t\t\t\t\t\t\tpattern: withModifier(/(^!(?:<MOD>|<PAR>|[<>=])*)(?![<>=])[^!\\s()]+(?:\\([^)]+\\))?(?=!)/.source),\n\t\t\t\t\t\t\tlookbehind: true,\n\t\t\t\t\t\t\talias: 'url'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'modifier': {\n\t\t\t\t\t\t\tpattern: withModifier(/(^!)(?:<MOD>|<PAR>|[<>=])+/.source),\n\t\t\t\t\t\t\tlookbehind: true,\n\t\t\t\t\t\t\tinside: modifierTokens\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'url': {\n\t\t\t\t\t\t\tpattern: /(:).+/,\n\t\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'punctuation': /[!:]/\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\t// Footnote[1]\n\t\t\t\t'footnote': {\n\t\t\t\t\tpattern: /\\b\\[\\d+\\]/,\n\t\t\t\t\talias: 'comment',\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'punctuation': /\\[|\\]/\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\t// CSS(Cascading Style Sheet)\n\t\t\t\t'acronym': {\n\t\t\t\t\tpattern: /\\b[A-Z\\d]+\\([^)]+\\)/,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'comment': {\n\t\t\t\t\t\t\tpattern: /(\\()[^()]+(?=\\))/,\n\t\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'punctuation': /[()]/\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\t// Prism(C)\n\t\t\t\t'mark': {\n\t\t\t\t\tpattern: /\\b\\((?:C|R|TM)\\)/,\n\t\t\t\t\talias: 'comment',\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'punctuation': /[()]/\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\tvar phraseInside = textile['phrase'].inside;\n\tvar nestedPatterns = {\n\t\t'inline': phraseInside['inline'],\n\t\t'link': phraseInside['link'],\n\t\t'image': phraseInside['image'],\n\t\t'footnote': phraseInside['footnote'],\n\t\t'acronym': phraseInside['acronym'],\n\t\t'mark': phraseInside['mark']\n\t};\n\n\t// Only allow alpha-numeric HTML tags, not XML tags\n\ttextile.tag.pattern = /<\\/?(?!\\d)[a-z0-9]+(?:\\s+[^\\s>\\/=]+(?:=(?:(\"|')(?:\\\\[\\s\\S]|(?!\\1)[^\\\\])*\\1|[^\\s'\">=]+))?)*\\s*\\/?>/i;\n\n\t// Allow some nesting\n\tvar phraseInlineInside = phraseInside['inline'].inside;\n\tphraseInlineInside['bold'].inside = nestedPatterns;\n\tphraseInlineInside['italic'].inside = nestedPatterns;\n\tphraseInlineInside['inserted'].inside = nestedPatterns;\n\tphraseInlineInside['deleted'].inside = nestedPatterns;\n\tphraseInlineInside['span'].inside = nestedPatterns;\n\n\t// Allow some styles inside table cells\n\tvar phraseTableInside = phraseInside['table'].inside;\n\tphraseTableInside['inline'] = nestedPatterns['inline'];\n\tphraseTableInside['link'] = nestedPatterns['link'];\n\tphraseTableInside['image'] = nestedPatterns['image'];\n\tphraseTableInside['footnote'] = nestedPatterns['footnote'];\n\tphraseTableInside['acronym'] = nestedPatterns['acronym'];\n\tphraseTableInside['mark'] = nestedPatterns['mark'];\n\n}(Prism));\n1/components/prism-firestore-security-rules.min.js\u0003\u0006Prism.languages[\"firestore-security-rules\"]=Prism.languages.extend(\"clike\",{comment:/\\/\\/.*/,keyword:/\\b(?:allow|function|if|match|null|return|rules_version|service)\\b/,operator:/&&|\\|\\||[<>!=]=?|[-+*/%]|\\b(?:in|is)\\b/}),delete Prism.languages[\"firestore-security-rules\"][\"class-name\"],Prism.languages.insertBefore(\"firestore-security-rules\",\"keyword\",{path:{pattern:/(^|[\\s(),])(?:\\/(?:[\\w\\xA0-\\uFFFF]+|\\{[\\w\\xA0-\\uFFFF]+(?:=\\*\\*)?\\}|\\$\\([\\w\\xA0-\\uFFFF.]+\\)))+/,lookbehind:!0,greedy:!0,inside:{variable:{pattern:/\\{[\\w\\xA0-\\uFFFF]+(?:=\\*\\*)?\\}|\\$\\([\\w\\xA0-\\uFFFF.]+\\)/,inside:{operator:/=/,keyword:/\\*\\*/,punctuation:/[.$(){}]/}},punctuation:/\\//}},method:{pattern:/(\\ballow\\s+)[a-z]+(?:\\s*,\\s*[a-z]+)*(?=\\s*[:;])/,lookbehind:!0,alias:\"builtin\",inside:{punctuation:/,/}}});;/plugins/highlight-keywords/prism-highlight-keywords.min.js{\"undefined\"!=typeof Prism&&Prism.hooks.add(\"wrap\",(function(e){\"keyword\"===e.type&&e.classes.push(\"keyword-\"+e.content)}));/components/prism-fsharp.min.js\bFPrism.languages.fsharp=Prism.languages.extend(\"clike\",{comment:[{pattern:/(^|[^\\\\])\\(\\*(?!\\))[\\s\\S]*?\\*\\)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\\\:])\\/\\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(?:\"\"\"[\\s\\S]*?\"\"\"|@\"(?:\"\"|[^\"])*\"|\"(?:\\\\[\\s\\S]|[^\\\\\"])*\")B?/,greedy:!0},\"class-name\":{pattern:/(\\b(?:exception|inherit|interface|new|of|type)\\s+|\\w\\s*:\\s*|\\s:\\??>\\s*)[.\\w]+\\b(?:\\s*(?:->|\\*)\\s*[.\\w]+\\b)*(?!\\s*[:.])/,lookbehind:!0,inside:{operator:/->|\\*/,punctuation:/\\./}},keyword:/\\b(?:let|return|use|yield)(?:!\\B|\\b)|\\b(?:abstract|and|as|asr|assert|atomic|base|begin|break|checked|class|component|const|constraint|constructor|continue|default|delegate|do|done|downcast|downto|eager|elif|else|end|event|exception|extern|external|false|finally|fixed|for|fun|function|functor|global|if|in|include|inherit|inline|interface|internal|land|lazy|lor|lsl|lsr|lxor|match|member|method|mixin|mod|module|mutable|namespace|new|not|null|object|of|open|or|override|parallel|private|process|protected|public|pure|rec|sealed|select|sig|static|struct|tailcall|then|to|trait|true|try|type|upcast|val|virtual|void|volatile|when|while|with)\\b/,number:[/\\b0x[\\da-fA-F]+(?:LF|lf|un)?\\b/,/\\b0b[01]+(?:uy|y)?\\b/,/(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:[fm]|e[+-]?\\d+)?\\b/i,/\\b\\d+(?:[IlLsy]|UL|u[lsy]?)?\\b/],operator:/([<>~&^])\\1\\1|([*.:<>&])\\2|<-|->|[!=:]=|<?\\|{1,3}>?|\\??(?:<=|>=|<>|[-+*/%=<>])\\??|[!?^&]|~[+~-]|:>|:\\?>?/}),Prism.languages.insertBefore(\"fsharp\",\"keyword\",{preprocessor:{pattern:/(^[\\t ]*)#.*/m,lookbehind:!0,alias:\"property\",inside:{directive:{pattern:/(^#)\\b(?:else|endif|if|light|line|nowarn)\\b/,lookbehind:!0,alias:\"keyword\"}}}}),Prism.languages.insertBefore(\"fsharp\",\"punctuation\",{\"computation-expression\":{pattern:/\\b[_a-z]\\w*(?=\\s*\\{)/i,alias:\"keyword\"}}),Prism.languages.insertBefore(\"fsharp\",\"string\",{annotation:{pattern:/\\[<.+?>\\]/,greedy:!0,inside:{punctuation:/^\\[<|>\\]$/,\"class-name\":{pattern:/^\\w+$|(^|;\\s*)[A-Z]\\w*(?=\\()/,lookbehind:!0},\"annotation-content\":{pattern:/[\\s\\S]+/,inside:Prism.languages.fsharp}}},char:{pattern:/'(?:[^\\\\']|\\\\(?:.|\\d{3}|x[a-fA-F\\d]{2}|u[a-fA-F\\d]{4}|U[a-fA-F\\d]{8}))'B?/,greedy:!0}});/components/prism-d.min.js\b|Prism.languages.d=Prism.languages.extend(\"clike\",{comment:[{pattern:/^\\s*#!.+/,greedy:!0},{pattern:RegExp(\"(^|[^\\\\\\\\])(?:\"+[\"/\\\\+(?:/\\\\+(?:[^+]|\\\\+(?!/))*\\\\+/|(?!/\\\\+)[^])*?\\\\+/\",\"//.*\",\"/\\\\*[^]*?\\\\*/\"].join(\"|\")+\")\"),lookbehind:!0,greedy:!0}],string:[{pattern:RegExp(['\\\\b[rx]\"(?:\\\\\\\\[^]|[^\\\\\\\\\"])*\"[cwd]?','\\\\bq\"(?:\\\\[[^]*?\\\\]|\\\\([^]*?\\\\)|<[^]*?>|\\\\{[^]*?\\\\})\"','\\\\bq\"((?!\\\\d)\\\\w+)$[^]*?^\\\\1\"','\\\\bq\"(.)[^]*?\\\\2\"','([\"`])(?:\\\\\\\\[^]|(?!\\\\3)[^\\\\\\\\])*\\\\3[cwd]?'].join(\"|\"),\"m\"),greedy:!0},{pattern:/\\bq\\{(?:\\{[^{}]*\\}|[^{}])*\\}/,greedy:!0,alias:\"token-string\"}],keyword:/\\$|\\b(?:__(?:(?:DATE|EOF|FILE|FUNCTION|LINE|MODULE|PRETTY_FUNCTION|TIMESTAMP|TIME|VENDOR|VERSION)__|gshared|parameters|traits|vector)|abstract|alias|align|asm|assert|auto|body|bool|break|byte|case|cast|catch|cdouble|cent|cfloat|char|class|const|continue|creal|dchar|debug|default|delegate|delete|deprecated|do|double|dstring|else|enum|export|extern|false|final|finally|float|for|foreach|foreach_reverse|function|goto|idouble|if|ifloat|immutable|import|inout|int|interface|invariant|ireal|lazy|long|macro|mixin|module|new|nothrow|null|out|override|package|pragma|private|protected|ptrdiff_t|public|pure|real|ref|return|scope|shared|short|size_t|static|string|struct|super|switch|synchronized|template|this|throw|true|try|typedef|typeid|typeof|ubyte|ucent|uint|ulong|union|unittest|ushort|version|void|volatile|wchar|while|with|wstring)\\b/,number:[/\\b0x\\.?[a-f\\d_]+(?:(?!\\.\\.)\\.[a-f\\d_]*)?(?:p[+-]?[a-f\\d_]+)?[ulfi]{0,4}/i,{pattern:/((?:\\.\\.)?)(?:\\b0b\\.?|\\b|\\.)\\d[\\d_]*(?:(?!\\.\\.)\\.[\\d_]*)?(?:e[+-]?\\d[\\d_]*)?[ulfi]{0,4}/i,lookbehind:!0}],operator:/\\|[|=]?|&[&=]?|\\+[+=]?|-[-=]?|\\.?\\.\\.|=[>=]?|!(?:i[ns]\\b|<>?=?|>=?|=)?|\\bi[ns]\\b|(?:<[<>]?|>>?>?|\\^\\^|[*\\/%^~])=?/}),Prism.languages.insertBefore(\"d\",\"string\",{char:/'(?:\\\\(?:\\W|\\w+)|[^\\\\])'/}),Prism.languages.insertBefore(\"d\",\"keyword\",{property:/\\B@\\w*/}),Prism.languages.insertBefore(\"d\",\"function\",{register:{pattern:/\\b(?:[ABCD][LHX]|E?(?:BP|DI|SI|SP)|[BS]PL|[ECSDGF]S|CR[0234]|[DS]IL|DR[012367]|E[ABCD]X|X?MM[0-7]|R(?:1[0-5]|[89])[BWD]?|R[ABCD]X|R[BS]P|R[DS]I|TR[3-7]|XMM(?:1[0-5]|[89])|YMM(?:1[0-5]|\\d))\\b|\\bST(?:\\([0-7]\\)|\\b)/,alias:\"variable\"}});/components/prism-tap.min.js\u0001~Prism.languages.tap={fail:/not ok[^#{\\n\\r]*/,pass:/ok[^#{\\n\\r]*/,pragma:/pragma [+-][a-z]+/,bailout:/bail out!.*/i,version:/TAP version \\d+/i,plan:/\\b\\d+\\.\\.\\d+(?: +#.*)?/,subtest:{pattern:/# Subtest(?:: .*)?/,greedy:!0},punctuation:/[{}]/,directive:/#.*/,yamlish:{pattern:/(^[ \\t]*)---[\\s\\S]*?[\\r\\n][ \\t]*\\.\\.\\.$/m,lookbehind:!0,inside:Prism.languages.yaml,alias:\"language-yaml\"}};0/plugins/diff-highlight/prism-diff-highlight.css\u0001{pre.diff-highlight > code .token.deleted:not(.prefix),\npre > code.diff-highlight .token.deleted:not(.prefix) {\n\tbackground-color: rgba(255, 0, 0, .1);\n\tcolor: inherit;\n\tdisplay: block;\n}\n\npre.diff-highlight > code .token.inserted:not(.prefix),\npre > code.diff-highlight .token.inserted:not(.prefix) {\n\tbackground-color: rgba(0, 255, 128, .1);\n\tcolor: inherit;\n\tdisplay: block;\n}\n/components/prism-wasm.js\u0005:Prism.languages.wasm = {\n\t'comment': [\n\t\t/\\(;[\\s\\S]*?;\\)/,\n\t\t{\n\t\t\tpattern: /;;.*/,\n\t\t\tgreedy: true\n\t\t}\n\t],\n\t'string': {\n\t\tpattern: /\"(?:\\\\[\\s\\S]|[^\"\\\\])*\"/,\n\t\tgreedy: true\n\t},\n\t'keyword': [\n\t\t{\n\t\t\tpattern: /\\b(?:align|offset)=/,\n\t\t\tinside: {\n\t\t\t\t'operator': /=/\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tpattern: /\\b(?:(?:f32|f64|i32|i64)(?:\\.(?:abs|add|and|ceil|clz|const|convert_[su]\\/i(?:32|64)|copysign|ctz|demote\\/f64|div(?:_[su])?|eqz?|extend_[su]\\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|neg?|nearest|or|popcnt|promote\\/f32|reinterpret\\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|sqrt|store(?:8|16|32)?|sub|trunc(?:_[su]\\/f(?:32|64))?|wrap\\/i64|xor))?|memory\\.(?:grow|size))\\b/,\n\t\t\tinside: {\n\t\t\t\t'punctuation': /\\./\n\t\t\t}\n\t\t},\n\t\t/\\b(?:anyfunc|block|br(?:_if|_table)?|call(?:_indirect)?|data|drop|elem|else|end|export|func|get_(?:global|local)|global|if|import|local|loop|memory|module|mut|nop|offset|param|result|return|select|set_(?:global|local)|start|table|tee_local|then|type|unreachable)\\b/\n\t],\n\t'variable': /\\$[\\w!#$%&'*+\\-./:<=>?@\\\\^`|~]+/,\n\t'number': /[+-]?\\b(?:\\d(?:_?\\d)*(?:\\.\\d(?:_?\\d)*)?(?:[eE][+-]?\\d(?:_?\\d)*)?|0x[\\da-fA-F](?:_?[\\da-fA-F])*(?:\\.[\\da-fA-F](?:_?[\\da-fA-D])*)?(?:[pP][+-]?\\d(?:_?\\d)*)?)\\b|\\binf\\b|\\bnan(?::0x[\\da-fA-F](?:_?[\\da-fA-D])*)?\\b/,\n\t'punctuation': /[()]/\n};\n5/plugins/jsonp-highlight/prism-jsonp-highlight.min.js\u000b!function(){if(\"undefined\"!=typeof Prism&&\"undefined\"!=typeof document){var t=[];o((function(t){if(t&&t.meta&&t.data){if(t.meta.status&&t.meta.status>=400)return\"Error: \"+(t.data.message||t.meta.status);if(\"string\"==typeof t.data.content)return\"function\"==typeof atob?atob(t.data.content.replace(/\\s/g,\"\")):\"Your browser cannot decode base64\"}return null}),\"github\"),o((function(t,e){if(t&&t.meta&&t.data&&t.data.files){if(t.meta.status&&t.meta.status>=400)return\"Error: \"+(t.data.message||t.meta.status);var n=t.data.files,a=e.getAttribute(\"data-filename\");if(null==a)for(var r in n)if(n.hasOwnProperty(r)){a=r;break}return void 0!==n[a]?n[a].content:\"Error: unknown or missing gist file \"+a}return null}),\"gist\"),o((function(t){return t&&t.node&&\"string\"==typeof t.data?t.data:null}),\"bitbucket\");var e=0,n=\"data-jsonp-status\",a=\"failed\",r='pre[data-jsonp]:not([data-jsonp-status=\"loaded\"]):not([data-jsonp-status=\"loading\"])';Prism.hooks.add(\"before-highlightall\",(function(t){t.selector+=\", \"+r})),Prism.hooks.add(\"before-sanity-check\",(function(o){var i,u=o.element;if(u.matches(r)){o.code=\"\",u.setAttribute(n,\"loading\");var s=u.appendChild(document.createElement(\"CODE\"));s.textContent=\"Loading…\";var d=o.language;s.className=\"language-\"+d;var f=Prism.plugins.autoloader;f&&f.loadLanguages(d);var l=u.getAttribute(\"data-adapter\"),c=null;if(l){if(\"function\"!=typeof window[l])return u.setAttribute(n,a),void(s.textContent=(i=l,'✖ Error: JSONP adapter function \"'+i+\"\\\" doesn't exist\"));c=window[l]}var p=u.getAttribute(\"data-jsonp\");!function(r,o,i,d){var f=\"prismjsonp\"+e++,l=document.createElement(\"a\");l.href=r,l.href+=(l.search?\"&\":\"?\")+(o||\"callback\")+\"=\"+f;var p=document.createElement(\"script\");p.src=l.href,p.onerror=function(){g(),d()};var m=setTimeout((function(){g(),d()}),Prism.plugins.jsonphighlight.timeout);function g(){clearTimeout(m),document.head.removeChild(p),delete window[f]}window[f]=function(e){g(),function(e){var r=null;if(c)r=c(e,u);else for(var o=0,i=t.length;o<i&&null===(r=t[o].adapter(e,u));o++);null===r?(u.setAttribute(n,a),s.textContent=\"✖ Error: Cannot parse response (perhaps you need an adapter function?)\"):(u.setAttribute(n,\"loaded\"),s.textContent=r,Prism.highlightElement(s))}(e)},document.head.appendChild(p)}(p,u.getAttribute(\"data-callback\"),0,(function(){u.setAttribute(n,a),s.textContent=\"✖ Error: Timeout loading \"+p}))}})),Prism.plugins.jsonphighlight={timeout:5e3,registerAdapter:o,removeAdapter:function(e){if(\"string\"==typeof e&&(e=i(e)),\"function\"==typeof e){var n=t.findIndex((function(t){return t.adapter===e}));n>=0&&t.splice(n,1)}},highlight:function(t){for(var e,n=(t||document).querySelectorAll(r),a=0;e=n[a++];)Prism.highlightElement(e)}}}function o(e,n){n=n||e.name,\"function\"!=typeof e||i(e)||i(n)||t.push({adapter:e,name:n})}function i(e){if(\"function\"==typeof e){for(var n=0;a=t[n++];)if(a.adapter.valueOf()===e.valueOf())return a.adapter}else if(\"string\"==typeof e){var a;for(n=0;a=t[n++];)if(a.name===e)return a.adapter}return null}}(); /components/prism-wolfram.min.js\u0003aPrism.languages.wolfram={comment:/\\(\\*(?:\\(\\*(?:[^*]|\\*(?!\\)))*\\*\\)|(?!\\(\\*)[\\s\\S])*?\\*\\)/,string:{pattern:/\"(?:\\\\.|[^\"\\\\\\r\\n])*\"/,greedy:!0},keyword:/\\b(?:Abs|AbsArg|Accuracy|Block|Do|For|Function|If|Manipulate|Module|Nest|NestList|None|Return|Switch|Table|Which|While)\\b/,context:{pattern:/\\b\\w+`+\\w*/,alias:\"class-name\"},blank:{pattern:/\\b\\w+_\\b/,alias:\"regex\"},\"global-variable\":{pattern:/\\$\\w+/,alias:\"variable\"},boolean:/\\b(?:False|True)\\b/,number:/(?:\\b(?=\\d)|\\B(?=\\.))(?:0[bo])?(?:(?:\\d|0x[\\da-f])[\\da-f]*(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?j?\\b/i,operator:/\\/\\.|;|=\\.|\\^=|\\^:=|:=|<<|>>|<\\||\\|>|:>|\\|->|->|<-|@@@|@@|@|\\/@|=!=|===|==|=|\\+|-|\\[\\/-+%=\\]=?|!=|\\*\\*?=?|\\/\\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\\];(),.:]/},Prism.languages.mathematica=Prism.languages.wolfram,Prism.languages.wl=Prism.languages.wolfram,Prism.languages.nb=Prism.languages.wolfram;/components/prism-powerquery.js\b// https://docs.microsoft.com/en-us/powerquery-m/power-query-m-language-specification\n\nPrism.languages.powerquery = {\n\t'comment': {\n\t\tpattern: /(^|[^\\\\])(?:\\/\\*[\\s\\S]*?\\*\\/|\\/\\/.*)/,\n\t\tlookbehind: true,\n\t\tgreedy: true\n\t},\n\t'quoted-identifier': {\n\t\tpattern: /#\"(?:[^\"\\r\\n]|\"\")*\"(?!\")/,\n\t\tgreedy: true\n\t},\n\t'string': {\n\t\tpattern: /(?:#!)?\"(?:[^\"\\r\\n]|\"\")*\"(?!\")/,\n\t\tgreedy: true\n\t},\n\t'constant': [\n\t\t/\\bDay\\.(?:Friday|Monday|Saturday|Sunday|Thursday|Tuesday|Wednesday)\\b/,\n\t\t/\\bTraceLevel\\.(?:Critical|Error|Information|Verbose|Warning)\\b/,\n\t\t/\\bOccurrence\\.(?:All|First|Last)\\b/,\n\t\t/\\bOrder\\.(?:Ascending|Descending)\\b/,\n\t\t/\\bRoundingMode\\.(?:AwayFromZero|Down|ToEven|TowardZero|Up)\\b/,\n\t\t/\\bMissingField\\.(?:Error|Ignore|UseNull)\\b/,\n\t\t/\\bQuoteStyle\\.(?:Csv|None)\\b/,\n\t\t/\\bJoinKind\\.(?:FullOuter|Inner|LeftAnti|LeftOuter|RightAnti|RightOuter)\\b/,\n\t\t/\\bGroupKind\\.(?:Global|Local)\\b/,\n\t\t/\\bExtraValues\\.(?:Error|Ignore|List)\\b/,\n\t\t/\\bJoinAlgorithm\\.(?:Dynamic|LeftHash|LeftIndex|PairwiseHash|RightHash|RightIndex|SortMerge)\\b/,\n\t\t/\\bJoinSide\\.(?:Left|Right)\\b/,\n\t\t/\\bPrecision\\.(?:Decimal|Double)\\b/,\n\t\t/\\bRelativePosition\\.From(?:End|Start)\\b/,\n\t\t/\\bTextEncoding\\.(?:Ascii|BigEndianUnicode|Unicode|Utf16|Utf8|Windows)\\b/,\n\t\t/\\b(?:Any|Binary|Date|DateTime|DateTimeZone|Duration|Function|Int16|Int32|Int64|Int8|List|Logical|None|Number|Record|Table|Text|Time)\\.Type\\b/,\n\t\t/\\bnull\\b/\n\t],\n\t'boolean': /\\b(?:false|true)\\b/,\n\t'keyword': /\\b(?:and|as|each|else|error|if|in|is|let|meta|not|nullable|optional|or|otherwise|section|shared|then|try|type)\\b|#(?:binary|date|datetime|datetimezone|duration|infinity|nan|sections|shared|table|time)\\b/,\n\t'function': {\n\t\tpattern: /(^|[^#\\w.])[a-z_][\\w.]*(?=\\s*\\()/i,\n\t\tlookbehind: true\n\t},\n\t'data-type': {\n\t\tpattern: /\\b(?:any|anynonnull|binary|date|datetime|datetimezone|duration|function|list|logical|none|number|record|table|text|time)\\b/,\n\t\talias: 'class-name'\n\t},\n\t'number': {\n\t\tpattern: /\\b0x[\\da-f]+\\b|(?:[+-]?(?:\\b\\d+\\.)?\\b\\d+|[+-]\\.\\d+|(^|[^.])\\B\\.\\d+)(?:e[+-]?\\d+)?\\b/i,\n\t\tlookbehind: true\n\t},\n\t'operator': /[-+*\\/&?@^]|<(?:=>?|>)?|>=?|=>?|\\.\\.\\.?/,\n\t'punctuation': /[,;\\[\\](){}]/\n};\n\nPrism.languages.pq = Prism.languages['powerquery'];\nPrism.languages.mscript = Prism.languages['powerquery'];\n/components/prism-rest.js\u0012Prism.languages.rest = {\n\t'table': [\n\t\t{\n\t\t\tpattern: /(^[\\t ]*)(?:\\+[=-]+)+\\+(?:\\r?\\n|\\r)(?:\\1[+|].+[+|](?:\\r?\\n|\\r))+\\1(?:\\+[=-]+)+\\+/m,\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'punctuation': /\\||(?:\\+[=-]+)+\\+/\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tpattern: /(^[\\t ]*)=+ [ =]*=(?:(?:\\r?\\n|\\r)\\1.+)+(?:\\r?\\n|\\r)\\1=+ [ =]*=(?=(?:\\r?\\n|\\r){2}|\\s*$)/m,\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'punctuation': /[=-]+/\n\t\t\t}\n\t\t}\n\t],\n\n\t// Directive-like patterns\n\n\t'substitution-def': {\n\t\tpattern: /(^[\\t ]*\\.\\. )\\|(?:[^|\\s](?:[^|]*[^|\\s])?)\\| [^:]+::/m,\n\t\tlookbehind: true,\n\t\tinside: {\n\t\t\t'substitution': {\n\t\t\t\tpattern: /^\\|(?:[^|\\s]|[^|\\s][^|]*[^|\\s])\\|/,\n\t\t\t\talias: 'attr-value',\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': /^\\||\\|$/\n\t\t\t\t}\n\t\t\t},\n\t\t\t'directive': {\n\t\t\t\tpattern: /( )(?! )[^:]+::/,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'function',\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': /::$/\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\t'link-target': [\n\t\t{\n\t\t\tpattern: /(^[\\t ]*\\.\\. )\\[[^\\]]+\\]/m,\n\t\t\tlookbehind: true,\n\t\t\talias: 'string',\n\t\t\tinside: {\n\t\t\t\t'punctuation': /^\\[|\\]$/\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tpattern: /(^[\\t ]*\\.\\. )_(?:`[^`]+`|(?:[^:\\\\]|\\\\.)+):/m,\n\t\t\tlookbehind: true,\n\t\t\talias: 'string',\n\t\t\tinside: {\n\t\t\t\t'punctuation': /^_|:$/\n\t\t\t}\n\t\t}\n\t],\n\t'directive': {\n\t\tpattern: /(^[\\t ]*\\.\\. )[^:]+::/m,\n\t\tlookbehind: true,\n\t\talias: 'function',\n\t\tinside: {\n\t\t\t'punctuation': /::$/\n\t\t}\n\t},\n\t'comment': {\n\t\t// The two alternatives try to prevent highlighting of blank comments\n\t\tpattern: /(^[\\t ]*\\.\\.)(?:(?: .+)?(?:(?:\\r?\\n|\\r).+)+| .+)(?=(?:\\r?\\n|\\r){2}|$)/m,\n\t\tlookbehind: true\n\t},\n\n\t'title': [\n\t\t// Overlined and underlined\n\t\t{\n\t\t\tpattern: /^(([!\"#$%&'()*+,\\-.\\/:;<=>?@\\[\\\\\\]^_`{|}~])\\2+)(?:\\r?\\n|\\r).+(?:\\r?\\n|\\r)\\1$/m,\n\t\t\tinside: {\n\t\t\t\t'punctuation': /^[!\"#$%&'()*+,\\-.\\/:;<=>?@\\[\\\\\\]^_`{|}~]+|[!\"#$%&'()*+,\\-.\\/:;<=>?@\\[\\\\\\]^_`{|}~]+$/,\n\t\t\t\t'important': /.+/\n\t\t\t}\n\t\t},\n\n\t\t// Underlined only\n\t\t{\n\t\t\tpattern: /(^|(?:\\r?\\n|\\r){2}).+(?:\\r?\\n|\\r)([!\"#$%&'()*+,\\-.\\/:;<=>?@\\[\\\\\\]^_`{|}~])\\2+(?=\\r?\\n|\\r|$)/,\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'punctuation': /[!\"#$%&'()*+,\\-.\\/:;<=>?@\\[\\\\\\]^_`{|}~]+$/,\n\t\t\t\t'important': /.+/\n\t\t\t}\n\t\t}\n\t],\n\t'hr': {\n\t\tpattern: /((?:\\r?\\n|\\r){2})([!\"#$%&'()*+,\\-.\\/:;<=>?@\\[\\\\\\]^_`{|}~])\\2{3,}(?=(?:\\r?\\n|\\r){2})/,\n\t\tlookbehind: true,\n\t\talias: 'punctuation'\n\t},\n\t'field': {\n\t\tpattern: /(^[\\t ]*):[^:\\r\\n]+:(?= )/m,\n\t\tlookbehind: true,\n\t\talias: 'attr-name'\n\t},\n\t'command-line-option': {\n\t\tpattern: /(^[\\t ]*)(?:[+-][a-z\\d]|(?:--|\\/)[a-z\\d-]+)(?:[ =](?:[a-z][\\w-]*|<[^<>]+>))?(?:, (?:[+-][a-z\\d]|(?:--|\\/)[a-z\\d-]+)(?:[ =](?:[a-z][\\w-]*|<[^<>]+>))?)*(?=(?:\\r?\\n|\\r)? {2,}\\S)/im,\n\t\tlookbehind: true,\n\t\talias: 'symbol'\n\t},\n\t'literal-block': {\n\t\tpattern: /::(?:\\r?\\n|\\r){2}([ \\t]+)(?![ \\t]).+(?:(?:\\r?\\n|\\r)\\1.+)*/,\n\t\tinside: {\n\t\t\t'literal-block-punctuation': {\n\t\t\t\tpattern: /^::/,\n\t\t\t\talias: 'punctuation'\n\t\t\t}\n\t\t}\n\t},\n\t'quoted-literal-block': {\n\t\tpattern: /::(?:\\r?\\n|\\r){2}([!\"#$%&'()*+,\\-.\\/:;<=>?@\\[\\\\\\]^_`{|}~]).*(?:(?:\\r?\\n|\\r)\\1.*)*/,\n\t\tinside: {\n\t\t\t'literal-block-punctuation': {\n\t\t\t\tpattern: /^(?:::|([!\"#$%&'()*+,\\-.\\/:;<=>?@\\[\\\\\\]^_`{|}~])\\1*)/m,\n\t\t\t\talias: 'punctuation'\n\t\t\t}\n\t\t}\n\t},\n\t'list-bullet': {\n\t\tpattern: /(^[\\t ]*)(?:[*+\\-•‣⁃]|\\(?(?:\\d+|[a-z]|[ivxdclm]+)\\)|(?:\\d+|[a-z]|[ivxdclm]+)\\.)(?= )/im,\n\t\tlookbehind: true,\n\t\talias: 'punctuation'\n\t},\n\t'doctest-block': {\n\t\tpattern: /(^[\\t ]*)>>> .+(?:(?:\\r?\\n|\\r).+)*/m,\n\t\tlookbehind: true,\n\t\tinside: {\n\t\t\t'punctuation': /^>>>/\n\t\t}\n\t},\n\n\t'inline': [\n\t\t{\n\t\t\tpattern: /(^|[\\s\\-:\\/'\"<(\\[{])(?::[^:]+:`.*?`|`.*?`:[^:]+:|(\\*\\*?|``?|\\|)(?!\\s)(?:(?!\\2).)*\\S\\2(?=[\\s\\-.,:;!?\\\\\\/'\")\\]}]|$))/m,\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'bold': {\n\t\t\t\t\tpattern: /(^\\*\\*).+(?=\\*\\*$)/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t},\n\t\t\t\t'italic': {\n\t\t\t\t\tpattern: /(^\\*).+(?=\\*$)/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t},\n\t\t\t\t'inline-literal': {\n\t\t\t\t\tpattern: /(^``).+(?=``$)/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\talias: 'symbol'\n\t\t\t\t},\n\t\t\t\t'role': {\n\t\t\t\t\tpattern: /^:[^:]+:|:[^:]+:$/,\n\t\t\t\t\talias: 'function',\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'punctuation': /^:|:$/\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t'interpreted-text': {\n\t\t\t\t\tpattern: /(^`).+(?=`$)/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\talias: 'attr-value'\n\t\t\t\t},\n\t\t\t\t'substitution': {\n\t\t\t\t\tpattern: /(^\\|).+(?=\\|$)/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\talias: 'attr-value'\n\t\t\t\t},\n\t\t\t\t'punctuation': /\\*\\*?|``?|\\|/\n\t\t\t}\n\t\t}\n\t],\n\n\t'link': [\n\t\t{\n\t\t\tpattern: /\\[[^\\[\\]]+\\]_(?=[\\s\\-.,:;!?\\\\\\/'\")\\]}]|$)/,\n\t\t\talias: 'string',\n\t\t\tinside: {\n\t\t\t\t'punctuation': /^\\[|\\]_$/\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tpattern: /(?:\\b[a-z\\d]+(?:[_.:+][a-z\\d]+)*_?_|`[^`]+`_?_|_`[^`]+`)(?=[\\s\\-.,:;!?\\\\\\/'\")\\]}]|$)/i,\n\t\t\talias: 'string',\n\t\t\tinside: {\n\t\t\t\t'punctuation': /^_?`|`$|`?_?_$/\n\t\t\t}\n\t\t}\n\t],\n\n\t// Line block start,\n\t// quote attribution,\n\t// explicit markup start,\n\t// and anonymous hyperlink target shortcut (__)\n\t'punctuation': {\n\t\tpattern: /(^[\\t ]*)(?:\\|(?= |$)|(?:---?|—|\\.\\.|__)(?= )|\\.\\.$)/m,\n\t\tlookbehind: true\n\t}\n};\n,/plugins/previewers/prism-previewers.min.css\u0010.prism-previewer,.prism-previewer:after,.prism-previewer:before{position:absolute;pointer-events:none}.prism-previewer,.prism-previewer:after{left:50%}.prism-previewer{margin-top:-48px;width:32px;height:32px;margin-left:-16px;z-index:10;opacity:0;-webkit-transition:opacity .25s;-o-transition:opacity .25s;transition:opacity .25s}.prism-previewer.flipped{margin-top:0;margin-bottom:-48px}.prism-previewer:after,.prism-previewer:before{content:'';position:absolute;pointer-events:none}.prism-previewer:before{top:-5px;right:-5px;left:-5px;bottom:-5px;border-radius:10px;border:5px solid #fff;box-shadow:0 0 3px rgba(0,0,0,.5) inset,0 0 10px rgba(0,0,0,.75)}.prism-previewer:after{top:100%;width:0;height:0;margin:5px 0 0 -7px;border:7px solid transparent;border-color:rgba(255,0,0,0);border-top-color:#fff}.prism-previewer.flipped:after{top:auto;bottom:100%;margin-top:0;margin-bottom:5px;border-top-color:rgba(255,0,0,0);border-bottom-color:#fff}.prism-previewer.active{opacity:1}.prism-previewer-angle:before{border-radius:50%;background:#fff}.prism-previewer-angle:after{margin-top:4px}.prism-previewer-angle svg{width:32px;height:32px;-webkit-transform:rotate(-90deg);-moz-transform:rotate(-90deg);-ms-transform:rotate(-90deg);-o-transform:rotate(-90deg);transform:rotate(-90deg)}.prism-previewer-angle[data-negative] svg{-webkit-transform:scaleX(-1) rotate(-90deg);-moz-transform:scaleX(-1) rotate(-90deg);-ms-transform:scaleX(-1) rotate(-90deg);-o-transform:scaleX(-1) rotate(-90deg);transform:scaleX(-1) rotate(-90deg)}.prism-previewer-angle circle{fill:transparent;stroke:#2d3438;stroke-opacity:.9;stroke-width:32;stroke-dasharray:0,500}.prism-previewer-gradient{background-image:linear-gradient(45deg,#bbb 25%,transparent 25%,transparent 75%,#bbb 75%,#bbb),linear-gradient(45deg,#bbb 25%,#eee 25%,#eee 75%,#bbb 75%,#bbb);background-size:10px 10px;background-position:0 0,5px 5px;width:64px;margin-left:-32px}.prism-previewer-gradient:before{content:none}.prism-previewer-gradient div{position:absolute;top:-5px;left:-5px;right:-5px;bottom:-5px;border-radius:10px;border:5px solid #fff;box-shadow:0 0 3px rgba(0,0,0,.5) inset,0 0 10px rgba(0,0,0,.75)}.prism-previewer-color{background-image:linear-gradient(45deg,#bbb 25%,transparent 25%,transparent 75%,#bbb 75%,#bbb),linear-gradient(45deg,#bbb 25%,#eee 25%,#eee 75%,#bbb 75%,#bbb);background-size:10px 10px;background-position:0 0,5px 5px}.prism-previewer-color:before{background-color:inherit;background-clip:padding-box}.prism-previewer-easing{margin-top:-76px;margin-left:-30px;width:60px;height:60px;background:#333}.prism-previewer-easing.flipped{margin-bottom:-116px}.prism-previewer-easing svg{width:60px;height:60px}.prism-previewer-easing circle{fill:#2d3438;stroke:#fff}.prism-previewer-easing path{fill:none;stroke:#fff;stroke-linecap:round;stroke-width:4}.prism-previewer-easing line{stroke:#fff;stroke-opacity:.5;stroke-width:2}@-webkit-keyframes prism-previewer-time{0%{stroke-dasharray:0,500;stroke-dashoffset:0}50%{stroke-dasharray:100,500;stroke-dashoffset:0}100%{stroke-dasharray:0,500;stroke-dashoffset:-100}}@-o-keyframes prism-previewer-time{0%{stroke-dasharray:0,500;stroke-dashoffset:0}50%{stroke-dasharray:100,500;stroke-dashoffset:0}100%{stroke-dasharray:0,500;stroke-dashoffset:-100}}@-moz-keyframes prism-previewer-time{0%{stroke-dasharray:0,500;stroke-dashoffset:0}50%{stroke-dasharray:100,500;stroke-dashoffset:0}100%{stroke-dasharray:0,500;stroke-dashoffset:-100}}@keyframes prism-previewer-time{0%{stroke-dasharray:0,500;stroke-dashoffset:0}50%{stroke-dasharray:100,500;stroke-dashoffset:0}100%{stroke-dasharray:0,500;stroke-dashoffset:-100}}.prism-previewer-time:before{border-radius:50%;background:#fff}.prism-previewer-time:after{margin-top:4px}.prism-previewer-time svg{width:32px;height:32px;-webkit-transform:rotate(-90deg);-moz-transform:rotate(-90deg);-ms-transform:rotate(-90deg);-o-transform:rotate(-90deg);transform:rotate(-90deg)}.prism-previewer-time circle{fill:transparent;stroke:#2d3438;stroke-opacity:.9;stroke-width:32;stroke-dasharray:0,500;stroke-dashoffset:0;-webkit-animation:prism-previewer-time linear infinite 3s;-moz-animation:prism-previewer-time linear infinite 3s;-o-animation:prism-previewer-time linear infinite 3s;animation:prism-previewer-time linear infinite 3s} /components/prism-haskell.min.js\u000bPrism.languages.haskell={comment:{pattern:/(^|[^-!#$%*+=?&@|~.:<>^\\\\\\/])(?:--(?:(?=.)[^-!#$%*+=?&@|~.:<>^\\\\\\/].*|$)|\\{-[\\s\\S]*?-\\})/m,lookbehind:!0},char:{pattern:/'(?:[^\\\\']|\\\\(?:[abfnrtv\\\\\"'&]|\\^[A-Z@[\\]^_]|ACK|BEL|BS|CAN|CR|DC1|DC2|DC3|DC4|DEL|DLE|EM|ENQ|EOT|ESC|ETB|ETX|FF|FS|GS|HT|LF|NAK|NUL|RS|SI|SO|SOH|SP|STX|SUB|SYN|US|VT|\\d+|o[0-7]+|x[0-9a-fA-F]+))'/,alias:\"string\"},string:{pattern:/\"(?:[^\\\\\"]|\\\\(?:\\S|\\s+\\\\))*\"/,greedy:!0},keyword:/\\b(?:case|class|data|deriving|do|else|if|in|infixl|infixr|instance|let|module|newtype|of|primitive|then|type|where)\\b/,\"import-statement\":{pattern:/(^[\\t ]*)import\\s+(?:qualified\\s+)?(?:[A-Z][\\w']*)(?:\\.[A-Z][\\w']*)*(?:\\s+as\\s+(?:[A-Z][\\w']*)(?:\\.[A-Z][\\w']*)*)?(?:\\s+hiding\\b)?/m,lookbehind:!0,inside:{keyword:/\\b(?:as|hiding|import|qualified)\\b/,punctuation:/\\./}},builtin:/\\b(?:abs|acos|acosh|all|and|any|appendFile|approxRational|asTypeOf|asin|asinh|atan|atan2|atanh|basicIORun|break|catch|ceiling|chr|compare|concat|concatMap|const|cos|cosh|curry|cycle|decodeFloat|denominator|digitToInt|div|divMod|drop|dropWhile|either|elem|encodeFloat|enumFrom|enumFromThen|enumFromThenTo|enumFromTo|error|even|exp|exponent|fail|filter|flip|floatDigits|floatRadix|floatRange|floor|fmap|foldl|foldl1|foldr|foldr1|fromDouble|fromEnum|fromInt|fromInteger|fromIntegral|fromRational|fst|gcd|getChar|getContents|getLine|group|head|id|inRange|index|init|intToDigit|interact|ioError|isAlpha|isAlphaNum|isAscii|isControl|isDenormalized|isDigit|isHexDigit|isIEEE|isInfinite|isLower|isNaN|isNegativeZero|isOctDigit|isPrint|isSpace|isUpper|iterate|last|lcm|length|lex|lexDigits|lexLitChar|lines|log|logBase|lookup|map|mapM|mapM_|max|maxBound|maximum|maybe|min|minBound|minimum|mod|negate|not|notElem|null|numerator|odd|or|ord|otherwise|pack|pi|pred|primExitWith|print|product|properFraction|putChar|putStr|putStrLn|quot|quotRem|range|rangeSize|read|readDec|readFile|readFloat|readHex|readIO|readInt|readList|readLitChar|readLn|readOct|readParen|readSigned|reads|readsPrec|realToFrac|recip|rem|repeat|replicate|return|reverse|round|scaleFloat|scanl|scanl1|scanr|scanr1|seq|sequence|sequence_|show|showChar|showInt|showList|showLitChar|showParen|showSigned|showString|shows|showsPrec|significand|signum|sin|sinh|snd|sort|span|splitAt|sqrt|subtract|succ|sum|tail|take|takeWhile|tan|tanh|threadToIOResult|toEnum|toInt|toInteger|toLower|toRational|toUpper|truncate|uncurry|undefined|unlines|until|unwords|unzip|unzip3|userError|words|writeFile|zip|zip3|zipWith|zipWith3)\\b/,number:/\\b(?:\\d+(?:\\.\\d+)?(?:e[+-]?\\d+)?|0o[0-7]+|0x[0-9a-f]+)\\b/i,operator:[{pattern:/`(?:[A-Z][\\w']*\\.)*[_a-z][\\w']*`/,greedy:!0},{pattern:/(\\s)\\.(?=\\s)/,lookbehind:!0},/[-!#$%*+=?&@|~:<>^\\\\\\/][-!#$%*+=?&@|~.:<>^\\\\\\/]*|\\.[-!#$%*+=?&@|~.:<>^\\\\\\/]+/],hvariable:{pattern:/\\b(?:[A-Z][\\w']*\\.)*[_a-z][\\w']*/,inside:{punctuation:/\\./}},constant:{pattern:/\\b(?:[A-Z][\\w']*\\.)*[A-Z][\\w']*/,inside:{punctuation:/\\./}},punctuation:/[{}[\\];(),.:]/},Prism.languages.hs=Prism.languages.haskell;/components/prism-arturo.min.js\f2!function(e){var a=function(a,t){return{pattern:RegExp(\"\\\\{!(?:\"+(t||a)+\")$[^]*\\\\}\",\"m\"),greedy:!0,inside:{embedded:{pattern:/(^\\{!\\w+\\b)[\\s\\S]+(?=\\}$)/,lookbehind:!0,alias:\"language-\"+a,inside:e.languages[a]},string:/[\\s\\S]+/}}};e.languages.arturo={comment:{pattern:/;.*/,greedy:!0},character:{pattern:/`.`/,alias:\"char\",greedy:!0},number:{pattern:/\\b\\d+(?:\\.\\d+(?:\\.\\d+(?:-[\\w+-]+)?)?)?\\b/},string:{pattern:/\"(?:[^\"\\\\\\r\\n]|\\\\.)*\"/,greedy:!0},regex:{pattern:/\\{\\/.*?\\/\\}/,greedy:!0},\"html-string\":a(\"html\"),\"css-string\":a(\"css\"),\"js-string\":a(\"js\"),\"md-string\":a(\"md\"),\"sql-string\":a(\"sql\"),\"sh-string\":a(\"shell\",\"sh\"),multistring:{pattern:/».*|\\{:[\\s\\S]*?:\\}|\\{[\\s\\S]*?\\}|^-{6}$[\\s\\S]*/m,alias:\"string\",greedy:!0},label:{pattern:/\\w+\\b\\??:/,alias:\"property\"},literal:{pattern:/'(?:\\w+\\b\\??:?)/,alias:\"constant\"},type:{pattern:/:(?:\\w+\\b\\??:?)/,alias:\"class-name\"},color:/#\\w+/,predicate:{pattern:/\\b(?:all|and|any|ascii|attr|attribute|attributeLabel|binary|block|char|contains|database|date|dictionary|empty|equal|even|every|exists|false|floating|function|greater|greaterOrEqual|if|in|inline|integer|is|key|label|leap|less|lessOrEqual|literal|logical|lower|nand|negative|nor|not|notEqual|null|numeric|odd|or|path|pathLabel|positive|prefix|prime|regex|same|set|some|sorted|standalone|string|subset|suffix|superset|symbol|symbolLiteral|true|try|type|unless|upper|when|whitespace|word|xnor|xor|zero)\\?/,alias:\"keyword\"},\"builtin-function\":{pattern:/\\b(?:abs|acos|acosh|acsec|acsech|actan|actanh|add|after|alert|alias|and|angle|append|arg|args|arity|array|as|asec|asech|asin|asinh|atan|atan2|atanh|attr|attrs|average|before|benchmark|blend|break|call|capitalize|case|ceil|chop|clear|clip|close|color|combine|conj|continue|copy|cos|cosh|crc|csec|csech|ctan|ctanh|cursor|darken|dec|decode|define|delete|desaturate|deviation|dialog|dictionary|difference|digest|digits|div|do|download|drop|dup|e|else|empty|encode|ensure|env|escape|execute|exit|exp|extend|extract|factors|fdiv|filter|first|flatten|floor|fold|from|function|gamma|gcd|get|goto|hash|hypot|if|inc|indent|index|infinity|info|input|insert|inspect|intersection|invert|jaro|join|keys|kurtosis|last|let|levenshtein|lighten|list|ln|log|loop|lower|mail|map|match|max|median|min|mod|module|mul|nand|neg|new|nor|normalize|not|now|null|open|or|outdent|pad|palette|panic|path|pause|permissions|permutate|pi|pop|popup|pow|powerset|powmod|prefix|print|prints|process|product|query|random|range|read|relative|remove|rename|render|repeat|replace|request|return|reverse|round|sample|saturate|script|sec|sech|select|serve|set|shl|shr|shuffle|sin|sinh|size|skewness|slice|sort|spin|split|sqrt|squeeze|stack|strip|sub|suffix|sum|switch|symbols|symlink|sys|take|tan|tanh|terminal|terminate|to|truncate|try|type|unclip|union|unique|unless|until|unzip|upper|values|var|variance|volume|webview|while|with|wordwrap|write|xnor|xor|zip)\\b/,alias:\"keyword\"},sugar:{pattern:/->|=>|\\||::/,alias:\"operator\"},punctuation:/[()[\\],]/,symbol:{pattern:/<:|-:|ø|@|#|\\+|\\||\\*|\\$|---|-|%|\\/|\\.\\.|\\^|~|=|<|>|\\\\/},boolean:{pattern:/\\b(?:false|maybe|true)\\b/}},e.languages.art=e.languages.arturo}(Prism);/components/prism-stata.js\b\u0005// https://www.stata.com/manuals/u.pdf\n// https://www.stata.com/manuals/p.pdf\n\nPrism.languages.stata = {\n\t'comment': [\n\t\t{\n\t\t\tpattern: /(^[ \\t]*)\\*.*/m,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|\\s)\\/\\/.*|\\/\\*[\\s\\S]*?\\*\\//,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true\n\t\t}\n\t],\n\t'string-literal': {\n\t\tpattern: /\"[^\"\\r\\n]*\"|[‘`']\".*?\"[’`']/,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'interpolation': {\n\t\t\t\tpattern: /\\$\\{[^{}]*\\}|[‘`']\\w[^’`'\\r\\n]*[’`']/,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': /^\\$\\{|\\}$/,\n\t\t\t\t\t'expression': {\n\t\t\t\t\t\tpattern: /[\\s\\S]+/,\n\t\t\t\t\t\tinside: null // see below\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t'string': /[\\s\\S]+/\n\t\t}\n\t},\n\n\t'mata': {\n\t\tpattern: /(^[ \\t]*mata[ \\t]*:)[\\s\\S]+?(?=^end\\b)/m,\n\t\tlookbehind: true,\n\t\tgreedy: true,\n\t\talias: 'language-mata',\n\t\tinside: Prism.languages.mata\n\t},\n\t'java': {\n\t\tpattern: /(^[ \\t]*java[ \\t]*:)[\\s\\S]+?(?=^end\\b)/m,\n\t\tlookbehind: true,\n\t\tgreedy: true,\n\t\talias: 'language-java',\n\t\tinside: Prism.languages.java\n\t},\n\t'python': {\n\t\tpattern: /(^[ \\t]*python[ \\t]*:)[\\s\\S]+?(?=^end\\b)/m,\n\t\tlookbehind: true,\n\t\tgreedy: true,\n\t\talias: 'language-python',\n\t\tinside: Prism.languages.python\n\t},\n\n\n\t'command': {\n\t\tpattern: /(^[ \\t]*(?:\\.[ \\t]+)?(?:(?:bayes|bootstrap|by|bysort|capture|collect|fmm|fp|frame|jackknife|mfp|mi|nestreg|noisily|permute|quietly|rolling|simulate|statsby|stepwise|svy|version|xi)\\b[^:\\r\\n]*:[ \\t]*|(?:capture|noisily|quietly|version)[ \\t]+)?)[a-zA-Z]\\w*/m,\n\t\tlookbehind: true,\n\t\tgreedy: true,\n\t\talias: 'keyword'\n\t},\n\t'variable': /\\$\\w+|[‘`']\\w[^’`'\\r\\n]*[’`']/,\n\t'keyword': /\\b(?:bayes|bootstrap|by|bysort|capture|clear|collect|fmm|fp|frame|if|in|jackknife|mi[ \\t]+estimate|mfp|nestreg|noisily|of|permute|quietly|rolling|simulate|sort|statsby|stepwise|svy|varlist|version|xi)\\b/,\n\n\n\t'boolean': /\\b(?:off|on)\\b/,\n\t'number': /\\b\\d+(?:\\.\\d+)?\\b|\\B\\.\\d+/,\n\t'function': /\\b[a-z_]\\w*(?=\\()/i,\n\n\t'operator': /\\+\\+|--|##?|[<>!=~]=?|[+\\-*^&|/]/,\n\t'punctuation': /[(){}[\\],:]/\n};\n\nPrism.languages.stata['string-literal'].inside.interpolation.inside.expression.inside = Prism.languages.stata;\n/components/prism-cilkcpp.js\u0001(Prism.languages.cilkcpp = Prism.languages.insertBefore('cpp', 'function', {\n\t'parallel-keyword': {\n\t\tpattern: /\\bcilk_(?:for|reducer|s(?:cope|pawn|ync))\\b/,\n\t\talias: 'keyword'\n\t}\n});\n\nPrism.languages['cilk-cpp'] = Prism.languages['cilkcpp'];\nPrism.languages['cilk'] = Prism.languages['cilkcpp'];\n!/components/prism-avisynth.min.js\u0013!function(e){function a(e,a,r){return RegExp(function(e,a){return e.replace(/<<(\\d+)>>/g,(function(e,r){return a[+r]}))}(e,a),r||\"\")}var r=\"bool|clip|float|int|string|val\",t=[[\"is(?:bool|clip|float|int|string)|defined|(?:(?:internal)?function|var)?exists?\",\"apply|assert|default|eval|import|nop|select|undefined\",\"opt_(?:allowfloataudio|avipadscanlines|dwchannelmask|enable_(?:b64a|planartopackedrgb|v210|y3_10_10|y3_10_16)|usewaveextensible|vdubplanarhack)|set(?:cachemode|maxcpu|memorymax|planarlegacyalignment|workingdir)\",\"hex(?:value)?|value\",\"abs|ceil|continued(?:denominator|numerator)?|exp|floor|fmod|frac|log(?:10)?|max|min|muldiv|pi|pow|rand|round|sign|spline|sqrt\",\"a?sinh?|a?cosh?|a?tan[2h]?\",\"(?:bit(?:and|not|x?or|[lr]?shift[aslu]?|sh[lr]|sa[lr]|[lr]rotatel?|ro[rl]|te?st|set(?:count)?|cl(?:ea)?r|ch(?:an)?ge?))\",\"average(?:[bgr]|chroma[uv]|luma)|(?:[rgb]|chroma[uv]|luma|rgb|[yuv](?=difference(?:fromprevious|tonext)))difference(?:fromprevious|tonext)?|[yuvrgb]plane(?:median|min|max|minmaxdifference)\",\"getprocessinfo|logmsg|script(?:dir(?:utf8)?|file(?:utf8)?|name(?:utf8)?)|setlogparams\",\"chr|(?:fill|find|left|mid|replace|rev|right)str|format|[lu]case|ord|str(?:cmpi?|fromutf8|len|toutf8)|time|trim(?:all|left|right)\",\"isversionorgreater|version(?:number|string)\",\"buildpixeltype|colorspacenametopixeltype\",\"addautoloaddir|on(?:cpu|cuda)|prefetch|setfiltermtmode\"].join(\"|\"),[\"has(?:audio|video)\",\"height|width\",\"frame(?:count|rate)|framerate(?:denominator|numerator)\",\"getparity|is(?:field|frame)based\",\"bitspercomponent|componentsize|hasalpha|is(?:planar(?:rgba?)?|interleaved|rgb(?:24|32|48|64)?|y(?:8|u(?:va?|y2))?|yv(?:12|16|24|411)|420|422|444|packedrgb)|numcomponents|pixeltype\",\"audio(?:bits|channels|duration|length(?:[fs]|hi|lo)?|rate)|isaudio(?:float|int)\"].join(\"|\"),[\"avi(?:file)?source|directshowsource|image(?:reader|source|sourceanim)|opendmlsource|segmented(?:avisource|directshowsource)|wavsource\",\"coloryuv|convertbacktoyuy2|convertto(?:RGB(?:24|32|48|64)|(?:planar)?RGBA?|Y8?|YV(?:12|16|24|411)|YUVA?(?:411|420|422|444)|YUY2)|fixluminance|gr[ae]yscale|invert|levels|limiter|mergea?rgb|merge(?:chroma|luma)|rgbadjust|show(?:alpha|blue|green|red)|swapuv|tweak|[uv]toy8?|ytouv\",\"(?:colorkey|reset)mask|layer|mask(?:hs)?|merge|overlay|subtract\",\"addborders|(?:bicubic|bilinear|blackman|gauss|lanczos4|lanczos|point|sinc|spline(?:16|36|64))resize|crop(?:bottom)?|flip(?:horizontal|vertical)|(?:horizontal|vertical)?reduceby2|letterbox|skewrows|turn(?:180|left|right)\",\"blur|fixbrokenchromaupsampling|generalconvolution|(?:spatial|temporal)soften|sharpen\",\"trim|(?:un)?alignedsplice|(?:assume|assumescaled|change|convert)FPS|(?:delete|duplicate)frame|dissolve|fade(?:in|io|out)[02]?|freezeframe|interleave|loop|reverse|select(?:even|odd|(?:range)?every)\",\"assume[bt]ff|assume(?:field|frame)based|bob|complementparity|doubleweave|peculiarblend|pulldown|separate(?:columns|fields|rows)|swapfields|weave(?:columns|rows)?\",\"amplify(?:db)?|assumesamplerate|audiodub(?:ex)?|audiotrim|convertaudioto(?:(?:8|16|24|32)bit|float)|converttomono|delayaudio|ensurevbrmp3sync|get(?:left|right)?channel|kill(?:audio|video)|mergechannels|mixaudio|monotostereo|normalize|resampleaudio|ssrc|supereq|timestretch\",\"animate|applyrange|conditional(?:filter|reader|select)|frameevaluate|scriptclip|tcp(?:server|source)|writefile(?:end|if|start)?\",\"imagewriter\",\"blackness|blankclip|colorbars(?:hd)?|compare|dumpfiltergraph|echo|histogram|info|messageclip|preroll|setgraphanalysis|show(?:framenumber|smpte|time)|showfiveversions|stack(?:horizontal|vertical)|subtitle|tone|version\"].join(\"|\")].join(\"|\");e.languages.avisynth={comment:[{pattern:/(^|[^\\\\])\\[\\*(?:[^\\[*]|\\[(?!\\*)|\\*(?!\\])|\\[\\*(?:[^\\[*]|\\[(?!\\*)|\\*(?!\\]))*\\*\\])*\\*\\]/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\\\])\\/\\*[\\s\\S]*?(?:\\*\\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\\\$])#.*/,lookbehind:!0,greedy:!0}],argument:{pattern:a('\\\\b(?:<<0>>)\\\\s+(\"?)\\\\w+\\\\1',[r],\"i\"),inside:{keyword:/^\\w+/}},\"argument-label\":{pattern:/([,(][\\s\\\\]*)\\w+\\s*=(?!=)/,lookbehind:!0,inside:{\"argument-name\":{pattern:/^\\w+/,alias:\"punctuation\"},punctuation:/=$/}},string:[{pattern:/\"\"\"[\\s\\S]*?\"\"\"/,greedy:!0},{pattern:/\"(?:\\\\(?:\\r\\n|[\\s\\S])|[^\"\\\\\\r\\n])*\"/,greedy:!0,inside:{constant:{pattern:/\\b(?:DEFAULT_MT_MODE|(?:MAINSCRIPT|PROGRAM|SCRIPT)DIR|(?:MACHINE|USER)_(?:CLASSIC|PLUS)_PLUGINS)\\b/}}}],variable:/\\b(?:last)\\b/i,boolean:/\\b(?:false|no|true|yes)\\b/i,keyword:/\\b(?:catch|else|for|function|global|if|return|try|while|__END__)\\b/i,constant:/\\bMT_(?:MULTI_INSTANCE|NICE_FILTER|SERIALIZED|SPECIAL_MT)\\b/,\"builtin-function\":{pattern:a(\"\\\\b(?:<<0>>)\\\\b\",[t],\"i\"),alias:\"function\"},\"type-cast\":{pattern:a(\"\\\\b(?:<<0>>)(?=\\\\s*\\\\()\",[r],\"i\"),alias:\"keyword\"},function:{pattern:/\\b[a-z_]\\w*(?=\\s*\\()|(\\.)[a-z_]\\w*\\b/i,lookbehind:!0},\"line-continuation\":{pattern:/(^[ \\t]*)\\\\|\\\\(?=[ \\t]*$)/m,lookbehind:!0,alias:\"punctuation\"},number:/\\B\\$(?:[\\da-f]{6}|[\\da-f]{8})\\b|(?:(?:\\b|\\B-)\\d+(?:\\.\\d*)?\\b|\\B\\.\\d+\\b)/i,operator:/\\+\\+?|[!=<>]=?|&&|\\|\\||[?:*/%-]/,punctuation:/[{}\\[\\]();,.]/},e.languages.avs=e.languages.avisynth}(Prism);\"/components/prism-brainfuck.min.jsPrism.languages.brainfuck={pointer:{pattern:/<|>/,alias:\"keyword\"},increment:{pattern:/\\+/,alias:\"inserted\"},decrement:{pattern:/-/,alias:\"deleted\"},branching:{pattern:/\\[|\\]/,alias:\"important\"},operator:/[.,]/,comment:/\\S+/};/components/prism-julia.js\u0007<Prism.languages.julia = {\n\t'comment': {\n\t\t// support one level of nested comments\n\t\t// https://github.com/JuliaLang/julia/pull/6128\n\t\tpattern: /(^|[^\\\\])(?:#=(?:[^#=]|=(?!#)|#(?!=)|#=(?:[^#=]|=(?!#)|#(?!=))*=#)*=#|#.*)/,\n\t\tlookbehind: true\n\t},\n\t'regex': {\n\t\t// https://docs.julialang.org/en/v1/manual/strings/#Regular-Expressions-1\n\t\tpattern: /r\"(?:\\\\.|[^\"\\\\\\r\\n])*\"[imsx]{0,4}/,\n\t\tgreedy: true\n\t},\n\t'string': {\n\t\t// https://docs.julialang.org/en/v1/manual/strings/#String-Basics-1\n\t\t// https://docs.julialang.org/en/v1/manual/strings/#non-standard-string-literals-1\n\t\t// https://docs.julialang.org/en/v1/manual/running-external-programs/#Running-External-Programs-1\n\t\tpattern: /\"\"\"[\\s\\S]+?\"\"\"|(?:\\b\\w+)?\"(?:\\\\.|[^\"\\\\\\r\\n])*\"|`(?:[^\\\\`\\r\\n]|\\\\.)*`/,\n\t\tgreedy: true\n\t},\n\t'char': {\n\t\t// https://docs.julialang.org/en/v1/manual/strings/#man-characters-1\n\t\tpattern: /(^|[^\\w'])'(?:\\\\[^\\r\\n][^'\\r\\n]*|[^\\\\\\r\\n])'/,\n\t\tlookbehind: true,\n\t\tgreedy: true\n\t},\n\t'keyword': /\\b(?:abstract|baremodule|begin|bitstype|break|catch|ccall|const|continue|do|else|elseif|end|export|finally|for|function|global|if|immutable|import|importall|in|let|local|macro|module|print|println|quote|return|struct|try|type|typealias|using|while)\\b/,\n\t'boolean': /\\b(?:false|true)\\b/,\n\t'number': /(?:\\b(?=\\d)|\\B(?=\\.))(?:0[box])?(?:[\\da-f]+(?:_[\\da-f]+)*(?:\\.(?:\\d+(?:_\\d+)*)?)?|\\.\\d+(?:_\\d+)*)(?:[efp][+-]?\\d+(?:_\\d+)*)?j?/i,\n\t// https://docs.julialang.org/en/v1/manual/mathematical-operations/\n\t// https://docs.julialang.org/en/v1/manual/mathematical-operations/#Operator-Precedence-and-Associativity-1\n\t'operator': /&&|\\|\\||[-+*^%÷⊻&$\\\\]=?|\\/[\\/=]?|!=?=?|\\|[=>]?|<(?:<=?|[=:|])?|>(?:=|>>?=?)?|==?=?|[~≠≤≥'√∛]/,\n\t'punctuation': /::?|[{}[\\]();,.?]/,\n\t// https://docs.julialang.org/en/v1/base/numbers/#Base.im\n\t'constant': /\\b(?:(?:Inf|NaN)(?:16|32|64)?|im|pi)\\b|[πℯ]/\n};\n/components/prism-erb.min.js\u0001!function(e){e.languages.erb={delimiter:{pattern:/^(\\s*)<%=?|%>(?=\\s*$)/,lookbehind:!0,alias:\"punctuation\"},ruby:{pattern:/\\s*\\S[\\s\\S]*/,alias:\"language-ruby\",inside:e.languages.ruby}},e.hooks.add(\"before-tokenize\",(function(n){e.languages[\"markup-templating\"].buildPlaceholders(n,\"erb\",/<%=?(?:[^\\r\\n]|[\\r\\n](?!=begin)|[\\r\\n]=begin\\s(?:[^\\r\\n]|[\\r\\n](?!=end))*[\\r\\n]=end)+?%>/g)})),e.hooks.add(\"after-tokenize\",(function(n){e.languages[\"markup-templating\"].tokenizePlaceholders(n,\"erb\")}))}(Prism);/components/prism-pascaligo.js\u0007}(function (Prism) {\n\n\t// Pascaligo is a layer 2 smart contract language for the tezos blockchain\n\n\tvar braces = /\\((?:[^()]|\\((?:[^()]|\\([^()]*\\))*\\))*\\)/.source;\n\tvar type = /(?:\\b\\w+(?:<braces>)?|<braces>)/.source.replace(/<braces>/g, function () { return braces; });\n\n\tvar pascaligo = Prism.languages.pascaligo = {\n\t\t'comment': /\\(\\*[\\s\\S]+?\\*\\)|\\/\\/.*/,\n\t\t'string': {\n\t\t\tpattern: /([\"'`])(?:\\\\[\\s\\S]|(?!\\1)[^\\\\])*\\1|\\^[a-z]/i,\n\t\t\tgreedy: true\n\t\t},\n\t\t'class-name': [\n\t\t\t{\n\t\t\t\tpattern: RegExp(/(\\btype\\s+\\w+\\s+is\\s+)<type>/.source.replace(/<type>/g, function () { return type; }), 'i'),\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: null // see below\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: RegExp(/<type>(?=\\s+is\\b)/.source.replace(/<type>/g, function () { return type; }), 'i'),\n\t\t\t\tinside: null // see below\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: RegExp(/(:\\s*)<type>/.source.replace(/<type>/g, function () { return type; })),\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: null // see below\n\t\t\t}\n\t\t],\n\t\t'keyword': {\n\t\t\tpattern: /(^|[^&])\\b(?:begin|block|case|const|else|end|fail|for|from|function|if|is|nil|of|remove|return|skip|then|type|var|while|with)\\b/i,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'boolean': {\n\t\t\tpattern: /(^|[^&])\\b(?:False|True)\\b/i,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'builtin': {\n\t\t\tpattern: /(^|[^&])\\b(?:bool|int|list|map|nat|record|string|unit)\\b/i,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'function': /\\b\\w+(?=\\s*\\()/,\n\t\t'number': [\n\t\t\t// Hexadecimal, octal and binary\n\t\t\t/%[01]+|&[0-7]+|\\$[a-f\\d]+/i,\n\t\t\t// Decimal\n\t\t\t/\\b\\d+(?:\\.\\d+)?(?:e[+-]?\\d+)?(?:mtz|n)?/i\n\t\t],\n\t\t'operator': /->|=\\/=|\\.\\.|\\*\\*|:=|<[<=>]?|>[>=]?|[+\\-*\\/]=?|[@^=|]|\\b(?:and|mod|or)\\b/,\n\t\t'punctuation': /\\(\\.|\\.\\)|[()\\[\\]:;,.{}]/\n\t};\n\n\tvar classNameInside = ['comment', 'keyword', 'builtin', 'operator', 'punctuation'].reduce(function (accum, key) {\n\t\taccum[key] = pascaligo[key];\n\t\treturn accum;\n\t}, {});\n\n\tpascaligo['class-name'].forEach(function (p) {\n\t\tp.inside = classNameInside;\n\t});\n\n}(Prism));\n/components/prism-plsql.js\u000bPrism.languages.plsql = Prism.languages.extend('sql', {\n\t'comment': {\n\t\tpattern: /\\/\\*[\\s\\S]*?\\*\\/|--.*/,\n\t\tgreedy: true\n\t},\n\t// https://docs.oracle.com/en/database/oracle/oracle-database/21/lnpls/plsql-reserved-words-keywords.html\n\t'keyword': /\\b(?:A|ACCESSIBLE|ADD|AGENT|AGGREGATE|ALL|ALTER|AND|ANY|ARRAY|AS|ASC|AT|ATTRIBUTE|AUTHID|AVG|BEGIN|BETWEEN|BFILE_BASE|BINARY|BLOB_BASE|BLOCK|BODY|BOTH|BOUND|BULK|BY|BYTE|C|CALL|CALLING|CASCADE|CASE|CHAR|CHARACTER|CHARSET|CHARSETFORM|CHARSETID|CHAR_BASE|CHECK|CLOB_BASE|CLONE|CLOSE|CLUSTER|CLUSTERS|COLAUTH|COLLECT|COLUMNS|COMMENT|COMMIT|COMMITTED|COMPILED|COMPRESS|CONNECT|CONSTANT|CONSTRUCTOR|CONTEXT|CONTINUE|CONVERT|COUNT|CRASH|CREATE|CREDENTIAL|CURRENT|CURSOR|CUSTOMDATUM|DANGLING|DATA|DATE|DATE_BASE|DAY|DECLARE|DEFAULT|DEFINE|DELETE|DESC|DETERMINISTIC|DIRECTORY|DISTINCT|DOUBLE|DROP|DURATION|ELEMENT|ELSE|ELSIF|EMPTY|END|ESCAPE|EXCEPT|EXCEPTION|EXCEPTIONS|EXCLUSIVE|EXECUTE|EXISTS|EXIT|EXTERNAL|FETCH|FINAL|FIRST|FIXED|FLOAT|FOR|FORALL|FORCE|FROM|FUNCTION|GENERAL|GOTO|GRANT|GROUP|HASH|HAVING|HEAP|HIDDEN|HOUR|IDENTIFIED|IF|IMMEDIATE|IMMUTABLE|IN|INCLUDING|INDEX|INDEXES|INDICATOR|INDICES|INFINITE|INSERT|INSTANTIABLE|INT|INTERFACE|INTERSECT|INTERVAL|INTO|INVALIDATE|IS|ISOLATION|JAVA|LANGUAGE|LARGE|LEADING|LENGTH|LEVEL|LIBRARY|LIKE|LIKE2|LIKE4|LIKEC|LIMIT|LIMITED|LOCAL|LOCK|LONG|LOOP|MAP|MAX|MAXLEN|MEMBER|MERGE|MIN|MINUS|MINUTE|MOD|MODE|MODIFY|MONTH|MULTISET|MUTABLE|NAME|NAN|NATIONAL|NATIVE|NCHAR|NEW|NOCOMPRESS|NOCOPY|NOT|NOWAIT|NULL|NUMBER_BASE|OBJECT|OCICOLL|OCIDATE|OCIDATETIME|OCIDURATION|OCIINTERVAL|OCILOBLOCATOR|OCINUMBER|OCIRAW|OCIREF|OCIREFCURSOR|OCIROWID|OCISTRING|OCITYPE|OF|OLD|ON|ONLY|OPAQUE|OPEN|OPERATOR|OPTION|OR|ORACLE|ORADATA|ORDER|ORGANIZATION|ORLANY|ORLVARY|OTHERS|OUT|OVERLAPS|OVERRIDING|PACKAGE|PARALLEL_ENABLE|PARAMETER|PARAMETERS|PARENT|PARTITION|PASCAL|PERSISTABLE|PIPE|PIPELINED|PLUGGABLE|POLYMORPHIC|PRAGMA|PRECISION|PRIOR|PRIVATE|PROCEDURE|PUBLIC|RAISE|RANGE|RAW|READ|RECORD|REF|REFERENCE|RELIES_ON|REM|REMAINDER|RENAME|RESOURCE|RESULT|RESULT_CACHE|RETURN|RETURNING|REVERSE|REVOKE|ROLLBACK|ROW|SAMPLE|SAVE|SAVEPOINT|SB1|SB2|SB4|SECOND|SEGMENT|SELECT|SELF|SEPARATE|SEQUENCE|SERIALIZABLE|SET|SHARE|SHORT|SIZE|SIZE_T|SOME|SPARSE|SQL|SQLCODE|SQLDATA|SQLNAME|SQLSTATE|STANDARD|START|STATIC|STDDEV|STORED|STRING|STRUCT|STYLE|SUBMULTISET|SUBPARTITION|SUBSTITUTABLE|SUBTYPE|SUM|SYNONYM|TABAUTH|TABLE|TDO|THE|THEN|TIME|TIMESTAMP|TIMEZONE_ABBR|TIMEZONE_HOUR|TIMEZONE_MINUTE|TIMEZONE_REGION|TO|TRAILING|TRANSACTION|TRANSACTIONAL|TRUSTED|TYPE|UB1|UB2|UB4|UNDER|UNION|UNIQUE|UNPLUG|UNSIGNED|UNTRUSTED|UPDATE|USE|USING|VALIST|VALUE|VALUES|VARIABLE|VARIANCE|VARRAY|VARYING|VIEW|VIEWS|VOID|WHEN|WHERE|WHILE|WITH|WORK|WRAPPED|WRITE|YEAR|ZONE)\\b/i,\n\t// https://docs.oracle.com/en/database/oracle/oracle-database/21/lnpls/plsql-language-fundamentals.html#GUID-96A42F7C-7A71-4B90-8255-CA9C8BD9722E\n\t'operator': /:=?|=>|[<>^~!]=|\\.\\.|\\|\\||\\*\\*|[-+*/%<>=@]/\n});\n\nPrism.languages.insertBefore('plsql', 'operator', {\n\t'label': {\n\t\tpattern: /<<\\s*\\w+\\s*>>/,\n\t\talias: 'symbol'\n\t},\n});\n/components/prism-mongodb.js\u0010(function (Prism) {\n\n\tvar operators = [\n\t\t// query and projection\n\t\t'$eq', '$gt', '$gte', '$in', '$lt', '$lte', '$ne', '$nin', '$and', '$not', '$nor', '$or',\n\t\t'$exists', '$type', '$expr', '$jsonSchema', '$mod', '$regex', '$text', '$where', '$geoIntersects',\n\t\t'$geoWithin', '$near', '$nearSphere', '$all', '$elemMatch', '$size', '$bitsAllClear', '$bitsAllSet',\n\t\t'$bitsAnyClear', '$bitsAnySet', '$comment', '$elemMatch', '$meta', '$slice',\n\n\t\t// update\n\t\t'$currentDate', '$inc', '$min', '$max', '$mul', '$rename', '$set', '$setOnInsert', '$unset',\n\t\t'$addToSet', '$pop', '$pull', '$push', '$pullAll', '$each', '$position', '$slice', '$sort', '$bit',\n\n\t\t// aggregation pipeline stages\n\t\t'$addFields', '$bucket', '$bucketAuto', '$collStats', '$count', '$currentOp', '$facet', '$geoNear',\n\t\t'$graphLookup', '$group', '$indexStats', '$limit', '$listLocalSessions', '$listSessions', '$lookup',\n\t\t'$match', '$merge', '$out', '$planCacheStats', '$project', '$redact', '$replaceRoot', '$replaceWith',\n\t\t'$sample', '$set', '$skip', '$sort', '$sortByCount', '$unionWith', '$unset', '$unwind', '$setWindowFields',\n\n\t\t// aggregation pipeline operators\n\t\t'$abs', '$accumulator', '$acos', '$acosh', '$add', '$addToSet', '$allElementsTrue', '$and',\n\t\t'$anyElementTrue', '$arrayElemAt', '$arrayToObject', '$asin', '$asinh', '$atan', '$atan2',\n\t\t'$atanh', '$avg', '$binarySize', '$bsonSize', '$ceil', '$cmp', '$concat', '$concatArrays', '$cond',\n\t\t'$convert', '$cos', '$dateFromParts', '$dateToParts', '$dateFromString', '$dateToString', '$dayOfMonth',\n\t\t'$dayOfWeek', '$dayOfYear', '$degreesToRadians', '$divide', '$eq', '$exp', '$filter', '$first',\n\t\t'$floor', '$function', '$gt', '$gte', '$hour', '$ifNull', '$in', '$indexOfArray', '$indexOfBytes',\n\t\t'$indexOfCP', '$isArray', '$isNumber', '$isoDayOfWeek', '$isoWeek', '$isoWeekYear', '$last',\n\t\t'$last', '$let', '$literal', '$ln', '$log', '$log10', '$lt', '$lte', '$ltrim', '$map', '$max',\n\t\t'$mergeObjects', '$meta', '$min', '$millisecond', '$minute', '$mod', '$month', '$multiply', '$ne',\n\t\t'$not', '$objectToArray', '$or', '$pow', '$push', '$radiansToDegrees', '$range', '$reduce',\n\t\t'$regexFind', '$regexFindAll', '$regexMatch', '$replaceOne', '$replaceAll', '$reverseArray', '$round',\n\t\t'$rtrim', '$second', '$setDifference', '$setEquals', '$setIntersection', '$setIsSubset', '$setUnion',\n\t\t'$size', '$sin', '$slice', '$split', '$sqrt', '$stdDevPop', '$stdDevSamp', '$strcasecmp', '$strLenBytes',\n\t\t'$strLenCP', '$substr', '$substrBytes', '$substrCP', '$subtract', '$sum', '$switch', '$tan',\n\t\t'$toBool', '$toDate', '$toDecimal', '$toDouble', '$toInt', '$toLong', '$toObjectId', '$toString',\n\t\t'$toLower', '$toUpper', '$trim', '$trunc', '$type', '$week', '$year', '$zip', '$count', '$dateAdd',\n\t\t'$dateDiff', '$dateSubtract', '$dateTrunc', '$getField', '$rand', '$sampleRate', '$setField', '$unsetField',\n\n\t\t// aggregation pipeline query modifiers\n\t\t'$comment', '$explain', '$hint', '$max', '$maxTimeMS', '$min', '$orderby', '$query',\n\t\t'$returnKey', '$showDiskLoc', '$natural',\n\t];\n\n\tvar builtinFunctions = [\n\t\t'ObjectId',\n\t\t'Code',\n\t\t'BinData',\n\t\t'DBRef',\n\t\t'Timestamp',\n\t\t'NumberLong',\n\t\t'NumberDecimal',\n\t\t'MaxKey',\n\t\t'MinKey',\n\t\t'RegExp',\n\t\t'ISODate',\n\t\t'UUID',\n\t];\n\n\toperators = operators.map(function (operator) {\n\t\treturn operator.replace('$', '\\\\$');\n\t});\n\n\tvar operatorsSource = '(?:' + operators.join('|') + ')\\\\b';\n\n\tPrism.languages.mongodb = Prism.languages.extend('javascript', {});\n\n\tPrism.languages.insertBefore('mongodb', 'string', {\n\t\t'property': {\n\t\t\tpattern: /(?:([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1|(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*)(?=\\s*:)/,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'keyword': RegExp('^([\\'\"])?' + operatorsSource + '(?:\\\\1)?$')\n\t\t\t}\n\t\t}\n\t});\n\n\tPrism.languages.mongodb.string.inside = {\n\t\turl: {\n\t\t\t// url pattern\n\t\t\tpattern: /https?:\\/\\/[-\\w@:%.+~#=]{1,256}\\.[a-z0-9()]{1,6}\\b[-\\w()@:%+.~#?&/=]*/i,\n\t\t\tgreedy: true\n\t\t},\n\t\tentity: {\n\t\t\t// ipv4\n\t\t\tpattern: /\\b(?:(?:[01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.){3}(?:[01]?\\d\\d?|2[0-4]\\d|25[0-5])\\b/,\n\t\t\tgreedy: true\n\t\t}\n\t};\n\n\tPrism.languages.insertBefore('mongodb', 'constant', {\n\t\t'builtin': {\n\t\t\tpattern: RegExp('\\\\b(?:' + builtinFunctions.join('|') + ')\\\\b'),\n\t\t\talias: 'keyword'\n\t\t}\n\t});\n\n}(Prism));\n/components/prism-cil.js\bPrism.languages.cil = {\n\t'comment': /\\/\\/.*/,\n\n\t'string': {\n\t\tpattern: /([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1/,\n\t\tgreedy: true\n\t},\n\n\t'directive': {\n\t\tpattern: /(^|\\W)\\.[a-z]+(?=\\s)/,\n\t\tlookbehind: true,\n\t\talias: 'class-name'\n\t},\n\n\t// Actually an assembly reference\n\t'variable': /\\[[\\w\\.]+\\]/,\n\n\n\t'keyword': /\\b(?:abstract|ansi|assembly|auto|autochar|beforefieldinit|bool|bstr|byvalstr|catch|char|cil|class|currency|date|decimal|default|enum|error|explicit|extends|extern|famandassem|family|famorassem|final(?:ly)?|float32|float64|hidebysig|u?int(?:8|16|32|64)?|iant|idispatch|implements|import|initonly|instance|interface|iunknown|literal|lpstr|lpstruct|lptstr|lpwstr|managed|method|native(?:Type)?|nested|newslot|object(?:ref)?|pinvokeimpl|private|privatescope|public|reqsecobj|rtspecialname|runtime|sealed|sequential|serializable|specialname|static|string|struct|syschar|tbstr|unicode|unmanagedexp|unsigned|value(?:type)?|variant|virtual|void)\\b/,\n\n\t'function': /\\b(?:(?:constrained|no|readonly|tail|unaligned|volatile)\\.)?(?:conv\\.(?:[iu][1248]?|ovf\\.[iu][1248]?(?:\\.un)?|r\\.un|r4|r8)|ldc\\.(?:i4(?:\\.\\d+|\\.[mM]1|\\.s)?|i8|r4|r8)|ldelem(?:\\.[iu][1248]?|\\.r[48]|\\.ref|a)?|ldind\\.(?:[iu][1248]?|r[48]|ref)|stelem\\.?(?:i[1248]?|r[48]|ref)?|stind\\.(?:i[1248]?|r[48]|ref)?|end(?:fault|filter|finally)|ldarg(?:\\.[0-3s]|a(?:\\.s)?)?|ldloc(?:\\.\\d+|\\.s)?|sub(?:\\.ovf(?:\\.un)?)?|mul(?:\\.ovf(?:\\.un)?)?|add(?:\\.ovf(?:\\.un)?)?|stloc(?:\\.[0-3s])?|refany(?:type|val)|blt(?:\\.un)?(?:\\.s)?|ble(?:\\.un)?(?:\\.s)?|bgt(?:\\.un)?(?:\\.s)?|bge(?:\\.un)?(?:\\.s)?|unbox(?:\\.any)?|init(?:blk|obj)|call(?:i|virt)?|brfalse(?:\\.s)?|bne\\.un(?:\\.s)?|ldloca(?:\\.s)?|brzero(?:\\.s)?|brtrue(?:\\.s)?|brnull(?:\\.s)?|brinst(?:\\.s)?|starg(?:\\.s)?|leave(?:\\.s)?|shr(?:\\.un)?|rem(?:\\.un)?|div(?:\\.un)?|clt(?:\\.un)?|alignment|castclass|ldvirtftn|beq(?:\\.s)?|ckfinite|ldsflda|ldtoken|localloc|mkrefany|rethrow|cgt\\.un|arglist|switch|stsfld|sizeof|newobj|newarr|ldsfld|ldnull|ldflda|isinst|throw|stobj|stfld|ldstr|ldobj|ldlen|ldftn|ldfld|cpobj|cpblk|break|br\\.s|xor|shl|ret|pop|not|nop|neg|jmp|dup|cgt|ceq|box|and|or|br)\\b/,\n\n\t'boolean': /\\b(?:false|true)\\b/,\n\t'number': /\\b-?(?:0x[0-9a-f]+|\\d+)(?:\\.[0-9a-f]+)?\\b/i,\n\n\t'punctuation': /[{}[\\];(),:=]|IL_[0-9A-Za-z]+/\n};\n/components/prism-sql.js\r{Prism.languages.sql = {\n\t'comment': {\n\t\tpattern: /(^|[^\\\\])(?:\\/\\*[\\s\\S]*?\\*\\/|(?:--|\\/\\/|#).*)/,\n\t\tlookbehind: true\n\t},\n\t'variable': [\n\t\t{\n\t\t\tpattern: /@([\"'`])(?:\\\\[\\s\\S]|(?!\\1)[^\\\\])+\\1/,\n\t\t\tgreedy: true\n\t\t},\n\t\t/@[\\w.$]+/\n\t],\n\t'string': {\n\t\tpattern: /(^|[^@\\\\])(\"|')(?:\\\\[\\s\\S]|(?!\\2)[^\\\\]|\\2\\2)*\\2/,\n\t\tgreedy: true,\n\t\tlookbehind: true\n\t},\n\t'identifier': {\n\t\tpattern: /(^|[^@\\\\])`(?:\\\\[\\s\\S]|[^`\\\\]|``)*`/,\n\t\tgreedy: true,\n\t\tlookbehind: true,\n\t\tinside: {\n\t\t\t'punctuation': /^`|`$/\n\t\t}\n\t},\n\t'function': /\\b(?:AVG|COUNT|FIRST|FORMAT|LAST|LCASE|LEN|MAX|MID|MIN|MOD|NOW|ROUND|SUM|UCASE)(?=\\s*\\()/i, // Should we highlight user defined functions too?\n\t'keyword': /\\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR(?:ACTER|SET)?|CHECK(?:POINT)?|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMNS?|COMMENT|COMMIT(?:TED)?|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS(?:TABLE)?|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|CYCLE|DATA(?:BASES?)?|DATE(?:TIME)?|DAY|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITERS?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE|ELSE(?:IF)?|ENABLE|ENCLOSED|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPED?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|HOUR|IDENTITY(?:COL|_INSERT)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|INVOKER|ISOLATION|ITERATE|JOIN|KEYS?|KILL|LANGUAGE|LAST|LEAVE|LEFT|LEVEL|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|LOOP|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MINUTE|MODE|MODIFIES|MODIFY|MONTH|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL|NATURAL|NCHAR|NEXT|NO|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREPARE|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READS?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEAT(?:ABLE)?|REPLACE|REPLICATION|REQUIRE|RESIGNAL|RESTORE|RESTRICT|RETURN(?:ING|S)?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SECOND|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|SQL|START(?:ING)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED|TEXT(?:SIZE)?|THEN|TIME(?:STAMP)?|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNLOCK|UNPIVOT|UNSIGNED|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?|YEAR)\\b/i,\n\t'boolean': /\\b(?:FALSE|NULL|TRUE)\\b/i,\n\t'number': /\\b0x[\\da-f]+\\b|\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+\\b/i,\n\t'operator': /[-+*\\/=%^~]|&&?|\\|\\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\\b/i,\n\t'punctuation': /[;[\\]()`,.]/\n};\n/components/prism-pcaxis.js\u0004FPrism.languages.pcaxis = {\n\t'string': /\"[^\"]*\"/,\n\t'keyword': {\n\t\tpattern: /((?:^|;)\\s*)[-A-Z\\d]+(?:\\s*\\[[-\\w]+\\])?(?:\\s*\\(\"[^\"]*\"(?:,\\s*\"[^\"]*\")*\\))?(?=\\s*=)/,\n\t\tlookbehind: true,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'keyword': /^[-A-Z\\d]+/,\n\t\t\t'language': {\n\t\t\t\tpattern: /^(\\s*)\\[[-\\w]+\\]/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': /^\\[|\\]$/,\n\t\t\t\t\t'property': /[-\\w]+/\n\t\t\t\t}\n\t\t\t},\n\t\t\t'sub-key': {\n\t\t\t\tpattern: /^(\\s*)\\S[\\s\\S]*/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'parameter': {\n\t\t\t\t\t\tpattern: /\"[^\"]*\"/,\n\t\t\t\t\t\talias: 'property'\n\t\t\t\t\t},\n\t\t\t\t\t'punctuation': /^\\(|\\)$|,/\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\t'operator': /=/,\n\t'tlist': {\n\t\tpattern: /TLIST\\s*\\(\\s*\\w+(?:(?:\\s*,\\s*\"[^\"]*\")+|\\s*,\\s*\"[^\"]*\"-\"[^\"]*\")?\\s*\\)/,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'function': /^TLIST/,\n\t\t\t'property': {\n\t\t\t\tpattern: /^(\\s*\\(\\s*)\\w+/,\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\t'string': /\"[^\"]*\"/,\n\t\t\t'punctuation': /[(),]/,\n\t\t\t'operator': /-/\n\t\t}\n\t},\n\t'punctuation': /[;,]/,\n\t'number': {\n\t\tpattern: /(^|\\s)\\d+(?:\\.\\d+)?(?!\\S)/,\n\t\tlookbehind: true\n\t},\n\t'boolean': /NO|YES/,\n};\n\nPrism.languages.px = Prism.languages.pcaxis;\n/components/prism-dataweave.js\u0004.(function (Prism) {\n\tPrism.languages.dataweave = {\n\t\t'url': /\\b[A-Za-z]+:\\/\\/[\\w/:.?=&-]+|\\burn:[\\w:.?=&-]+/,\n\t\t'property': {\n\t\t\tpattern: /(?:\\b\\w+#)?(?:\"(?:\\\\.|[^\\\\\"\\r\\n])*\"|\\b\\w+)(?=\\s*[:@])/,\n\t\t\tgreedy: true\n\t\t},\n\t\t'string': {\n\t\t\tpattern: /([\"'`])(?:\\\\[\\s\\S]|(?!\\1)[^\\\\])*\\1/,\n\t\t\tgreedy: true\n\t\t},\n\t\t'mime-type': /\\b(?:application|audio|image|multipart|text|video)\\/[\\w+-]+/,\n\t\t'date': {\n\t\t\tpattern: /\\|[\\w:+-]+\\|/,\n\t\t\tgreedy: true\n\t\t},\n\t\t'comment': [\n\t\t\t{\n\t\t\t\tpattern: /(^|[^\\\\])\\/\\*[\\s\\S]*?(?:\\*\\/|$)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /(^|[^\\\\:])\\/\\/.*/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true\n\t\t\t}\n\t\t],\n\t\t'regex': {\n\t\t\tpattern: /\\/(?:[^\\\\\\/\\r\\n]|\\\\[^\\r\\n])+\\//,\n\t\t\tgreedy: true\n\t\t},\n\t\t'keyword': /\\b(?:and|as|at|case|do|else|fun|if|input|is|match|not|ns|null|or|output|type|unless|update|using|var)\\b/,\n\t\t'function': /\\b[A-Z_]\\w*(?=\\s*\\()/i,\n\t\t'number': /-?\\b\\d+(?:\\.\\d+)?(?:e[+-]?\\d+)?\\b/i,\n\t\t'punctuation': /[{}[\\];(),.:@]/,\n\t\t'operator': /<<|>>|->|[<>~=]=?|!=|--?-?|\\+\\+?|!|\\?/,\n\t\t'boolean': /\\b(?:false|true)\\b/,\n\t};\n\n}(Prism));\n\"/components/prism-linker-script.js\u0002^Prism.languages['linker-script'] = {\n\t'comment': {\n\t\tpattern: /(^|\\s)\\/\\*[\\s\\S]*?(?:$|\\*\\/)/,\n\t\tlookbehind: true,\n\t\tgreedy: true\n\t},\n\t'identifier': {\n\t\tpattern: /\"[^\"\\r\\n]*\"/,\n\t\tgreedy: true\n\t},\n\n\t'location-counter': {\n\t\tpattern: /\\B\\.\\B/,\n\t\talias: 'important'\n\t},\n\n\t'section': {\n\t\tpattern: /(^|[^\\w*])\\.\\w+\\b/,\n\t\tlookbehind: true,\n\t\talias: 'keyword'\n\t},\n\t'function': /\\b[A-Z][A-Z_]*(?=\\s*\\()/,\n\n\t'number': /\\b(?:0[xX][a-fA-F0-9]+|\\d+)[KM]?\\b/,\n\n\t'operator': />>=?|<<=?|->|\\+\\+|--|&&|\\|\\||::|[?:~]|[-+*/%&|^!=<>]=?/,\n\t'punctuation': /[(){},;]/\n};\n\nPrism.languages['ld'] = Prism.languages['linker-script'];\n!/components/prism-lilypond.min.js\u0004!function(e){for(var n='\\\\((?:[^();\"#\\\\\\\\]|\\\\\\\\[^]|;.*(?!.)|\"(?:[^\"\\\\\\\\]|\\\\\\\\.)*\"|#(?:\\\\{(?:(?!#\\\\})[^])*#\\\\}|[^{])|<expr>)*\\\\)',i=0;i<5;i++)n=n.replace(/<expr>/g,(function(){return n}));n=n.replace(/<expr>/g,\"[^\\\\s\\\\S]\");var d=e.languages.lilypond={comment:/%(?:(?!\\{).*|\\{[\\s\\S]*?%\\})/,\"embedded-scheme\":{pattern:RegExp('(^|[=\\\\s])#(?:\"(?:[^\"\\\\\\\\]|\\\\\\\\.)*\"|[^\\\\s()\"]*(?:[^\\\\s()]|<expr>))'.replace(/<expr>/g,(function(){return n})),\"m\"),lookbehind:!0,greedy:!0,inside:{scheme:{pattern:/^(#)[\\s\\S]+$/,lookbehind:!0,alias:\"language-scheme\",inside:{\"embedded-lilypond\":{pattern:/#\\{[\\s\\S]*?#\\}/,greedy:!0,inside:{punctuation:/^#\\{|#\\}$/,lilypond:{pattern:/[\\s\\S]+/,alias:\"language-lilypond\",inside:null}}},rest:e.languages.scheme}},punctuation:/#/}},string:{pattern:/\"(?:[^\"\\\\]|\\\\.)*\"/,greedy:!0},\"class-name\":{pattern:/(\\\\new\\s+)[\\w-]+/,lookbehind:!0},keyword:{pattern:/\\\\[a-z][-\\w]*/i,inside:{punctuation:/^\\\\/}},operator:/[=|]|<<|>>/,punctuation:{pattern:/(^|[a-z\\d])(?:'+|,+|[_^]?-[_^]?(?:[-+^!>._]|(?=\\d))|[_^]\\.?|[.!])|[{}()[\\]<>^~]|\\\\[()[\\]<>\\\\!]|--|__/,lookbehind:!0},number:/\\b\\d+(?:\\/\\d+)?\\b/};d[\"embedded-scheme\"].inside.scheme.inside[\"embedded-lilypond\"].inside.lilypond.inside=d,e.languages.ly=d}(Prism);/components/prism-opencl.js,(function (Prism) {\n\t/* OpenCL kernel language */\n\tPrism.languages.opencl = Prism.languages.extend('c', {\n\t\t// Extracted from the official specs (2.0) and http://streamcomputing.eu/downloads/?opencl.lang (opencl-keywords, opencl-types) and http://sourceforge.net/tracker/?func=detail&aid=2957794&group_id=95717&atid=612384 (Words2, partly Words3)\n\t\t'keyword': /\\b(?:(?:__)?(?:constant|global|kernel|local|private|read_only|read_write|write_only)|__attribute__|auto|(?:bool|u?(?:char|int|long|short)|half|quad)(?:2|3|4|8|16)?|break|case|complex|const|continue|(?:double|float)(?:16(?:x(?:1|2|4|8|16))?|1x(?:1|2|4|8|16)|2(?:x(?:1|2|4|8|16))?|3|4(?:x(?:1|2|4|8|16))?|8(?:x(?:1|2|4|8|16))?)?|default|do|else|enum|extern|for|goto|if|imaginary|inline|packed|pipe|register|restrict|return|signed|sizeof|static|struct|switch|typedef|uniform|union|unsigned|void|volatile|while)\\b/,\n\t\t// Extracted from http://streamcomputing.eu/downloads/?opencl.lang (opencl-const)\n\t\t// Math Constants: https://www.khronos.org/registry/OpenCL/sdk/2.1/docs/man/xhtml/mathConstants.html\n\t\t// Macros and Limits: https://www.khronos.org/registry/OpenCL/sdk/2.1/docs/man/xhtml/macroLimits.html\n\t\t'number': /(?:\\b0x(?:[\\da-f]+(?:\\.[\\da-f]*)?|\\.[\\da-f]+)(?:p[+-]?\\d+)?|(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:e[+-]?\\d+)?)[fuhl]{0,4}/i,\n\t\t'boolean': /\\b(?:false|true)\\b/,\n\t\t'constant-opencl-kernel': {\n\t\t\tpattern: /\\b(?:CHAR_(?:BIT|MAX|MIN)|CLK_(?:ADDRESS_(?:CLAMP(?:_TO_EDGE)?|NONE|REPEAT)|FILTER_(?:LINEAR|NEAREST)|(?:GLOBAL|LOCAL)_MEM_FENCE|NORMALIZED_COORDS_(?:FALSE|TRUE))|CL_(?:BGRA|(?:HALF_)?FLOAT|INTENSITY|LUMINANCE|A?R?G?B?[Ax]?|(?:(?:UN)?SIGNED|[US]NORM)_(?:INT(?:8|16|32))|UNORM_(?:INT_101010|SHORT_(?:555|565)))|(?:DBL|FLT|HALF)_(?:DIG|EPSILON|(?:MAX|MIN)(?:(?:_10)?_EXP)?|MANT_DIG)|FLT_RADIX|HUGE_VALF?|(?:INT|LONG|SCHAR|SHRT)_(?:MAX|MIN)|INFINITY|MAXFLOAT|M_(?:[12]_PI|2_SQRTPI|E|LN(?:2|10)|LOG(?:2|10)E?|PI(?:_[24])?|SQRT(?:1_2|2))(?:_F|_H)?|NAN|(?:UCHAR|UINT|ULONG|USHRT)_MAX)\\b/,\n\t\t\talias: 'constant'\n\t\t}\n\t});\n\n\tPrism.languages.insertBefore('opencl', 'class-name', {\n\t\t// https://www.khronos.org/registry/OpenCL/sdk/2.1/docs/man/xhtml/scalarDataTypes.html\n\t\t// https://www.khronos.org/registry/OpenCL/sdk/2.1/docs/man/xhtml/otherDataTypes.html\n\t\t'builtin-type': {\n\t\t\tpattern: /\\b(?:_cl_(?:command_queue|context|device_id|event|kernel|mem|platform_id|program|sampler)|cl_(?:image_format|mem_fence_flags)|clk_event_t|event_t|image(?:1d_(?:array_|buffer_)?t|2d_(?:array_(?:depth_|msaa_depth_|msaa_)?|depth_|msaa_depth_|msaa_)?t|3d_t)|intptr_t|ndrange_t|ptrdiff_t|queue_t|reserve_id_t|sampler_t|size_t|uintptr_t)\\b/,\n\t\t\talias: 'keyword'\n\t\t}\n\t});\n\n\tvar attributes = {\n\t\t// Extracted from http://streamcomputing.eu/downloads/?opencl_host.lang (opencl-types and opencl-host)\n\t\t'type-opencl-host': {\n\t\t\tpattern: /\\b(?:cl_(?:GLenum|GLint|GLuin|addressing_mode|bitfield|bool|buffer_create_type|build_status|channel_(?:order|type)|(?:u?(?:char|int|long|short)|double|float)(?:2|3|4|8|16)?|command_(?:queue(?:_info|_properties)?|type)|context(?:_info|_properties)?|device_(?:exec_capabilities|fp_config|id|info|local_mem_type|mem_cache_type|type)|(?:event|sampler)(?:_info)?|filter_mode|half|image_info|kernel(?:_info|_work_group_info)?|map_flags|mem(?:_flags|_info|_object_type)?|platform_(?:id|info)|profiling_info|program(?:_build_info|_info)?))\\b/,\n\t\t\talias: 'keyword'\n\t\t},\n\t\t'boolean-opencl-host': {\n\t\t\tpattern: /\\bCL_(?:FALSE|TRUE)\\b/,\n\t\t\talias: 'boolean'\n\t\t},\n\t\t// Extracted from cl.h (2.0) and http://streamcomputing.eu/downloads/?opencl_host.lang (opencl-const)\n\t\t'constant-opencl-host': {\n\t\t\tpattern: /\\bCL_(?:A|ABGR|ADDRESS_(?:CLAMP(?:_TO_EDGE)?|MIRRORED_REPEAT|NONE|REPEAT)|ARGB|BGRA|BLOCKING|BUFFER_CREATE_TYPE_REGION|BUILD_(?:ERROR|IN_PROGRESS|NONE|PROGRAM_FAILURE|SUCCESS)|COMMAND_(?:ACQUIRE_GL_OBJECTS|BARRIER|COPY_(?:BUFFER(?:_RECT|_TO_IMAGE)?|IMAGE(?:_TO_BUFFER)?)|FILL_(?:BUFFER|IMAGE)|MAP(?:_BUFFER|_IMAGE)|MARKER|MIGRATE(?:_SVM)?_MEM_OBJECTS|NATIVE_KERNEL|NDRANGE_KERNEL|READ_(?:BUFFER(?:_RECT)?|IMAGE)|RELEASE_GL_OBJECTS|SVM_(?:FREE|MAP|MEMCPY|MEMFILL|UNMAP)|TASK|UNMAP_MEM_OBJECT|USER|WRITE_(?:BUFFER(?:_RECT)?|IMAGE))|COMPILER_NOT_AVAILABLE|COMPILE_PROGRAM_FAILURE|COMPLETE|CONTEXT_(?:DEVICES|INTEROP_USER_SYNC|NUM_DEVICES|PLATFORM|PROPERTIES|REFERENCE_COUNT)|DEPTH(?:_STENCIL)?|DEVICE_(?:ADDRESS_BITS|AFFINITY_DOMAIN_(?:L[1-4]_CACHE|NEXT_PARTITIONABLE|NUMA)|AVAILABLE|BUILT_IN_KERNELS|COMPILER_AVAILABLE|DOUBLE_FP_CONFIG|ENDIAN_LITTLE|ERROR_CORRECTION_SUPPORT|EXECUTION_CAPABILITIES|EXTENSIONS|GLOBAL_(?:MEM_(?:CACHELINE_SIZE|CACHE_SIZE|CACHE_TYPE|SIZE)|VARIABLE_PREFERRED_TOTAL_SIZE)|HOST_UNIFIED_MEMORY|IL_VERSION|IMAGE(?:2D_MAX_(?:HEIGHT|WIDTH)|3D_MAX_(?:DEPTH|HEIGHT|WIDTH)|_BASE_ADDRESS_ALIGNMENT|_MAX_ARRAY_SIZE|_MAX_BUFFER_SIZE|_PITCH_ALIGNMENT|_SUPPORT)|LINKER_AVAILABLE|LOCAL_MEM_SIZE|LOCAL_MEM_TYPE|MAX_(?:CLOCK_FREQUENCY|COMPUTE_UNITS|CONSTANT_ARGS|CONSTANT_BUFFER_SIZE|GLOBAL_VARIABLE_SIZE|MEM_ALLOC_SIZE|NUM_SUB_GROUPS|ON_DEVICE_(?:EVENTS|QUEUES)|PARAMETER_SIZE|PIPE_ARGS|READ_IMAGE_ARGS|READ_WRITE_IMAGE_ARGS|SAMPLERS|WORK_GROUP_SIZE|WORK_ITEM_DIMENSIONS|WORK_ITEM_SIZES|WRITE_IMAGE_ARGS)|MEM_BASE_ADDR_ALIGN|MIN_DATA_TYPE_ALIGN_SIZE|NAME|NATIVE_VECTOR_WIDTH_(?:CHAR|DOUBLE|FLOAT|HALF|INT|LONG|SHORT)|NOT_(?:AVAILABLE|FOUND)|OPENCL_C_VERSION|PARENT_DEVICE|PARTITION_(?:AFFINITY_DOMAIN|BY_AFFINITY_DOMAIN|BY_COUNTS|BY_COUNTS_LIST_END|EQUALLY|FAILED|MAX_SUB_DEVICES|PROPERTIES|TYPE)|PIPE_MAX_(?:ACTIVE_RESERVATIONS|PACKET_SIZE)|PLATFORM|PREFERRED_(?:GLOBAL_ATOMIC_ALIGNMENT|INTEROP_USER_SYNC|LOCAL_ATOMIC_ALIGNMENT|PLATFORM_ATOMIC_ALIGNMENT|VECTOR_WIDTH_(?:CHAR|DOUBLE|FLOAT|HALF|INT|LONG|SHORT))|PRINTF_BUFFER_SIZE|PROFILE|PROFILING_TIMER_RESOLUTION|QUEUE_(?:ON_(?:DEVICE_(?:MAX_SIZE|PREFERRED_SIZE|PROPERTIES)|HOST_PROPERTIES)|PROPERTIES)|REFERENCE_COUNT|SINGLE_FP_CONFIG|SUB_GROUP_INDEPENDENT_FORWARD_PROGRESS|SVM_(?:ATOMICS|CAPABILITIES|COARSE_GRAIN_BUFFER|FINE_GRAIN_BUFFER|FINE_GRAIN_SYSTEM)|TYPE(?:_ACCELERATOR|_ALL|_CPU|_CUSTOM|_DEFAULT|_GPU)?|VENDOR(?:_ID)?|VERSION)|DRIVER_VERSION|EVENT_(?:COMMAND_(?:EXECUTION_STATUS|QUEUE|TYPE)|CONTEXT|REFERENCE_COUNT)|EXEC_(?:KERNEL|NATIVE_KERNEL|STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST)|FILTER_(?:LINEAR|NEAREST)|FLOAT|FP_(?:CORRECTLY_ROUNDED_DIVIDE_SQRT|DENORM|FMA|INF_NAN|ROUND_TO_INF|ROUND_TO_NEAREST|ROUND_TO_ZERO|SOFT_FLOAT)|GLOBAL|HALF_FLOAT|IMAGE_(?:ARRAY_SIZE|BUFFER|DEPTH|ELEMENT_SIZE|FORMAT|FORMAT_MISMATCH|FORMAT_NOT_SUPPORTED|HEIGHT|NUM_MIP_LEVELS|NUM_SAMPLES|ROW_PITCH|SLICE_PITCH|WIDTH)|INTENSITY|INVALID_(?:ARG_INDEX|ARG_SIZE|ARG_VALUE|BINARY|BUFFER_SIZE|BUILD_OPTIONS|COMMAND_QUEUE|COMPILER_OPTIONS|CONTEXT|DEVICE|DEVICE_PARTITION_COUNT|DEVICE_QUEUE|DEVICE_TYPE|EVENT|EVENT_WAIT_LIST|GLOBAL_OFFSET|GLOBAL_WORK_SIZE|GL_OBJECT|HOST_PTR|IMAGE_DESCRIPTOR|IMAGE_FORMAT_DESCRIPTOR|IMAGE_SIZE|KERNEL|KERNEL_ARGS|KERNEL_DEFINITION|KERNEL_NAME|LINKER_OPTIONS|MEM_OBJECT|MIP_LEVEL|OPERATION|PIPE_SIZE|PLATFORM|PROGRAM|PROGRAM_EXECUTABLE|PROPERTY|QUEUE_PROPERTIES|SAMPLER|VALUE|WORK_DIMENSION|WORK_GROUP_SIZE|WORK_ITEM_SIZE)|KERNEL_(?:ARG_(?:ACCESS_(?:NONE|QUALIFIER|READ_ONLY|READ_WRITE|WRITE_ONLY)|ADDRESS_(?:CONSTANT|GLOBAL|LOCAL|PRIVATE|QUALIFIER)|INFO_NOT_AVAILABLE|NAME|TYPE_(?:CONST|NAME|NONE|PIPE|QUALIFIER|RESTRICT|VOLATILE))|ATTRIBUTES|COMPILE_NUM_SUB_GROUPS|COMPILE_WORK_GROUP_SIZE|CONTEXT|EXEC_INFO_SVM_FINE_GRAIN_SYSTEM|EXEC_INFO_SVM_PTRS|FUNCTION_NAME|GLOBAL_WORK_SIZE|LOCAL_MEM_SIZE|LOCAL_SIZE_FOR_SUB_GROUP_COUNT|MAX_NUM_SUB_GROUPS|MAX_SUB_GROUP_SIZE_FOR_NDRANGE|NUM_ARGS|PREFERRED_WORK_GROUP_SIZE_MULTIPLE|PRIVATE_MEM_SIZE|PROGRAM|REFERENCE_COUNT|SUB_GROUP_COUNT_FOR_NDRANGE|WORK_GROUP_SIZE)|LINKER_NOT_AVAILABLE|LINK_PROGRAM_FAILURE|LOCAL|LUMINANCE|MAP_(?:FAILURE|READ|WRITE|WRITE_INVALIDATE_REGION)|MEM_(?:ALLOC_HOST_PTR|ASSOCIATED_MEMOBJECT|CONTEXT|COPY_HOST_PTR|COPY_OVERLAP|FLAGS|HOST_NO_ACCESS|HOST_PTR|HOST_READ_ONLY|HOST_WRITE_ONLY|KERNEL_READ_AND_WRITE|MAP_COUNT|OBJECT_(?:ALLOCATION_FAILURE|BUFFER|IMAGE1D|IMAGE1D_ARRAY|IMAGE1D_BUFFER|IMAGE2D|IMAGE2D_ARRAY|IMAGE3D|PIPE)|OFFSET|READ_ONLY|READ_WRITE|REFERENCE_COUNT|SIZE|SVM_ATOMICS|SVM_FINE_GRAIN_BUFFER|TYPE|USES_SVM_POINTER|USE_HOST_PTR|WRITE_ONLY)|MIGRATE_MEM_OBJECT_(?:CONTENT_UNDEFINED|HOST)|MISALIGNED_SUB_BUFFER_OFFSET|NONE|NON_BLOCKING|OUT_OF_(?:HOST_MEMORY|RESOURCES)|PIPE_(?:MAX_PACKETS|PACKET_SIZE)|PLATFORM_(?:EXTENSIONS|HOST_TIMER_RESOLUTION|NAME|PROFILE|VENDOR|VERSION)|PROFILING_(?:COMMAND_(?:COMPLETE|END|QUEUED|START|SUBMIT)|INFO_NOT_AVAILABLE)|PROGRAM_(?:BINARIES|BINARY_SIZES|BINARY_TYPE(?:_COMPILED_OBJECT|_EXECUTABLE|_LIBRARY|_NONE)?|BUILD_(?:GLOBAL_VARIABLE_TOTAL_SIZE|LOG|OPTIONS|STATUS)|CONTEXT|DEVICES|IL|KERNEL_NAMES|NUM_DEVICES|NUM_KERNELS|REFERENCE_COUNT|SOURCE)|QUEUED|QUEUE_(?:CONTEXT|DEVICE|DEVICE_DEFAULT|ON_DEVICE|ON_DEVICE_DEFAULT|OUT_OF_ORDER_EXEC_MODE_ENABLE|PROFILING_ENABLE|PROPERTIES|REFERENCE_COUNT|SIZE)|R|RA|READ_(?:ONLY|WRITE)_CACHE|RG|RGB|RGBA|RGBx|RGx|RUNNING|Rx|SAMPLER_(?:ADDRESSING_MODE|CONTEXT|FILTER_MODE|LOD_MAX|LOD_MIN|MIP_FILTER_MODE|NORMALIZED_COORDS|REFERENCE_COUNT)|(?:UN)?SIGNED_INT(?:8|16|32)|SNORM_INT(?:8|16)|SUBMITTED|SUCCESS|UNORM_INT(?:8|16|24|_101010|_101010_2)|UNORM_SHORT_(?:555|565)|VERSION_(?:1_0|1_1|1_2|2_0|2_1)|sBGRA|sRGB|sRGBA|sRGBx)\\b/,\n\t\t\talias: 'constant'\n\t\t},\n\t\t// Extracted from cl.h (2.0) and http://streamcomputing.eu/downloads/?opencl_host.lang (opencl-host)\n\t\t'function-opencl-host': {\n\t\t\tpattern: /\\bcl(?:BuildProgram|CloneKernel|CompileProgram|Create(?:Buffer|CommandQueue(?:WithProperties)?|Context|ContextFromType|Image|Image2D|Image3D|Kernel|KernelsInProgram|Pipe|ProgramWith(?:Binary|BuiltInKernels|IL|Source)|Sampler|SamplerWithProperties|SubBuffer|SubDevices|UserEvent)|Enqueue(?:(?:Barrier|Marker)(?:WithWaitList)?|Copy(?:Buffer(?:Rect|ToImage)?|Image(?:ToBuffer)?)|(?:Fill|Map)(?:Buffer|Image)|MigrateMemObjects|NDRangeKernel|NativeKernel|(?:Read|Write)(?:Buffer(?:Rect)?|Image)|SVM(?:Free|Map|MemFill|Memcpy|MigrateMem|Unmap)|Task|UnmapMemObject|WaitForEvents)|Finish|Flush|Get(?:CommandQueueInfo|ContextInfo|Device(?:AndHostTimer|IDs|Info)|Event(?:Profiling)?Info|ExtensionFunctionAddress(?:ForPlatform)?|HostTimer|ImageInfo|Kernel(?:ArgInfo|Info|SubGroupInfo|WorkGroupInfo)|MemObjectInfo|PipeInfo|Platform(?:IDs|Info)|Program(?:Build)?Info|SamplerInfo|SupportedImageFormats)|LinkProgram|(?:Release|Retain)(?:CommandQueue|Context|Device|Event|Kernel|MemObject|Program|Sampler)|SVM(?:Alloc|Free)|Set(?:CommandQueueProperty|DefaultDeviceCommandQueue|EventCallback|Kernel|Kernel(?:Arg(?:SVMPointer)?|ExecInfo)|MemObjectDestructorCallback|UserEventStatus)|Unload(?:Platform)?Compiler|WaitForEvents)\\b/,\n\t\t\talias: 'function'\n\t\t}\n\t};\n\n\t/* OpenCL host API */\n\tPrism.languages.insertBefore('c', 'keyword', attributes);\n\n\t// C++ includes everything from the OpenCL C host API plus the classes defined in cl2.h\n\tif (Prism.languages.cpp) {\n\t\t// Extracted from doxygen class list http://github.khronos.org/OpenCL-CLHPP/annotated.html\n\t\tattributes['type-opencl-host-cpp'] = {\n\t\t\tpattern: /\\b(?:Buffer|BufferGL|BufferRenderGL|CommandQueue|Context|Device|DeviceCommandQueue|EnqueueArgs|Event|Image|Image1D|Image1DArray|Image1DBuffer|Image2D|Image2DArray|Image2DGL|Image3D|Image3DGL|ImageFormat|ImageGL|Kernel|KernelFunctor|LocalSpaceArg|Memory|NDRange|Pipe|Platform|Program|SVMAllocator|SVMTraitAtomic|SVMTraitCoarse|SVMTraitFine|SVMTraitReadOnly|SVMTraitReadWrite|SVMTraitWriteOnly|Sampler|UserEvent)\\b/,\n\t\t\talias: 'keyword'\n\t\t};\n\n\t\tPrism.languages.insertBefore('cpp', 'keyword', attributes);\n\t}\n}(Prism));\n/components/prism-cue.min.js\u0006\u0013!function(e){var n=\"(?:\"+\"\\\"\\\"\\\"(?:[^\\\\\\\\\\\"]|\\\"(?!\\\"\\\"\\\\2)|<esc>)*\\\"\\\"\\\"|'''(?:[^\\\\\\\\']|'(?!''\\\\2)|<esc>)*'''|\\\"(?:[^\\\\\\\\\\r\\n\\\"]|\\\"(?!\\\\2)|<esc>)*\\\"|'(?:[^\\\\\\\\\\r\\n']|'(?!\\\\2)|<esc>)*'\".replace(/<esc>/g,\"\\\\\\\\(?:(?!\\\\2)|\\\\2(?:[^()\\r\\n]|\\\\([^()]*\\\\)))\")+\")\";e.languages.cue={comment:{pattern:/\\/\\/.*/,greedy:!0},\"string-literal\":{pattern:RegExp(\"(^|[^#\\\"'\\\\\\\\])(#*)\"+n+\"(?![\\\"'])\\\\2\"),lookbehind:!0,greedy:!0,inside:{escape:{pattern:/(?=[\\s\\S]*[\"'](#*)$)\\\\\\1(?:U[a-fA-F0-9]{1,8}|u[a-fA-F0-9]{1,4}|x[a-fA-F0-9]{1,2}|\\d{2,3}|[^(])/,greedy:!0,alias:\"string\"},interpolation:{pattern:/(?=[\\s\\S]*[\"'](#*)$)\\\\\\1\\([^()]*\\)/,greedy:!0,inside:{punctuation:/^\\\\#*\\(|\\)$/,expression:{pattern:/[\\s\\S]+/,inside:null}}},string:/[\\s\\S]+/}},keyword:{pattern:/(^|[^\\w$])(?:for|if|import|in|let|null|package)(?![\\w$])/,lookbehind:!0},boolean:{pattern:/(^|[^\\w$])(?:false|true)(?![\\w$])/,lookbehind:!0},builtin:{pattern:/(^|[^\\w$])(?:bool|bytes|float|float(?:32|64)|u?int(?:8|16|32|64|128)?|number|rune|string)(?![\\w$])/,lookbehind:!0},attribute:{pattern:/@[\\w$]+(?=\\s*\\()/,alias:\"function\"},function:{pattern:/(^|[^\\w$])[a-z_$][\\w$]*(?=\\s*\\()/i,lookbehind:!0},number:{pattern:/(^|[^\\w$.])(?:0b[01]+(?:_[01]+)*|0o[0-7]+(?:_[0-7]+)*|0[xX][0-9A-Fa-f]+(?:_[0-9A-Fa-f]+)*|(?:\\d+(?:_\\d+)*(?:\\.(?:\\d+(?:_\\d+)*)?)?|\\.\\d+(?:_\\d+)*)(?:[eE][+-]?\\d+(?:_\\d+)*)?(?:[KMGTP]i?)?)(?![\\w$])/,lookbehind:!0},operator:/\\.{3}|_\\|_|&&?|\\|\\|?|[=!]~|[<>=!]=?|[+\\-*/?]/,punctuation:/[()[\\]{},.:]/},e.languages.cue[\"string-literal\"].inside.interpolation.inside.expression.inside=e.languages.cue}(Prism);3/plugins/diff-highlight/prism-diff-highlight.min.js\u0005!function(){if(\"undefined\"!=typeof Prism){var e=/^diff-([\\w-]+)/i,i=/<\\/?(?!\\d)[^\\s>\\/=$<%]+(?:\\s(?:\\s*[^\\s>\\/=]+(?:\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))|(?=[\\s/>])))+)?\\s*\\/?>/g,a=RegExp(\"(?:__|[^\\r\\n<])*(?:\\r\\n?|\\n|(?:__|[^\\r\\n<])(?![^\\r\\n]))\".replace(/__/g,(function(){return i.source})),\"gi\"),s=!1;Prism.hooks.add(\"before-sanity-check\",(function(i){var a=i.language;e.test(a)&&!i.grammar&&(i.grammar=Prism.languages[a]=Prism.languages.diff)})),Prism.hooks.add(\"before-tokenize\",(function(i){s||Prism.languages.diff||Prism.plugins.autoloader||(s=!0,console.warn(\"Prism's Diff Highlight plugin requires the Diff language definition (prism-diff.js).Make sure the language definition is loaded or use Prism's Autoloader plugin.\"));var a=i.language;e.test(a)&&!Prism.languages[a]&&(Prism.languages[a]=Prism.languages.diff)})),Prism.hooks.add(\"wrap\",(function(s){var r,n;if(\"diff\"!==s.language){var g=e.exec(s.language);if(!g)return;r=g[1],n=Prism.languages[r]}var f=Prism.languages.diff&&Prism.languages.diff.PREFIXES;if(f&&s.type in f){var u,l=s.content.replace(i,\"\").replace(/&lt;/g,\"<\").replace(/&amp;/g,\"&\"),t=l.replace(/(^|[\\r\\n])./g,\"$1\");u=n?Prism.highlight(t,n,r):Prism.util.encode(t);var o,m=new Prism.Token(\"prefix\",f[s.type],[/\\w+/.exec(s.type)[0]]),d=Prism.Token.stringify(m,s.language),c=[];for(a.lastIndex=0;o=a.exec(u);)c.push(d+o[0]);/(?:^|[\\r\\n]).$/.test(l)&&c.push(d),s.content=c.join(\"\"),n&&s.classes.push(\"language-\"+r)}}))}}();/components/prism-log.min.js\tPrism.languages.log={string:{pattern:/\"(?:[^\"\\\\\\r\\n]|\\\\.)*\"|'(?![st] | \\w)(?:[^'\\\\\\r\\n]|\\\\.)*'/,greedy:!0},exception:{pattern:/(^|[^\\w.])[a-z][\\w.]*(?:Error|Exception):.*(?:(?:\\r\\n?|\\n)[ \\t]*(?:at[ \\t].+|\\.{3}.*|Caused by:.*))+(?:(?:\\r\\n?|\\n)[ \\t]*\\.\\.\\. .*)?/,lookbehind:!0,greedy:!0,alias:[\"javastacktrace\",\"language-javastacktrace\"],inside:Prism.languages.javastacktrace||{keyword:/\\bat\\b/,function:/[a-z_][\\w$]*(?=\\()/,punctuation:/[.:()]/}},level:[{pattern:/\\b(?:ALERT|CRIT|CRITICAL|EMERG|EMERGENCY|ERR|ERROR|FAILURE|FATAL|SEVERE)\\b/,alias:[\"error\",\"important\"]},{pattern:/\\b(?:WARN|WARNING|WRN)\\b/,alias:[\"warning\",\"important\"]},{pattern:/\\b(?:DISPLAY|INF|INFO|NOTICE|STATUS)\\b/,alias:[\"info\",\"keyword\"]},{pattern:/\\b(?:DBG|DEBUG|FINE)\\b/,alias:[\"debug\",\"keyword\"]},{pattern:/\\b(?:FINER|FINEST|TRACE|TRC|VERBOSE|VRB)\\b/,alias:[\"trace\",\"comment\"]}],property:{pattern:/((?:^|[\\]|])[ \\t]*)[a-z_](?:[\\w-]|\\b\\/\\b)*(?:[. ]\\(?\\w(?:[\\w-]|\\b\\/\\b)*\\)?)*:(?=\\s)/im,lookbehind:!0},separator:{pattern:/(^|[^-+])-{3,}|={3,}|\\*{3,}|- - /m,lookbehind:!0,alias:\"comment\"},url:/\\b(?:file|ftp|https?):\\/\\/[^\\s|,;'\"]*[^\\s|,;'\">.]/,email:{pattern:/(^|\\s)[-\\w+.]+@[a-z][a-z0-9-]*(?:\\.[a-z][a-z0-9-]*)+(?=\\s)/,lookbehind:!0,alias:\"url\"},\"ip-address\":{pattern:/\\b(?:\\d{1,3}(?:\\.\\d{1,3}){3})\\b/,alias:\"constant\"},\"mac-address\":{pattern:/\\b[a-f0-9]{2}(?::[a-f0-9]{2}){5}\\b/i,alias:\"constant\"},domain:{pattern:/(^|\\s)[a-z][a-z0-9-]*(?:\\.[a-z][a-z0-9-]*)*\\.[a-z][a-z0-9-]+(?=\\s)/,lookbehind:!0,alias:\"constant\"},uuid:{pattern:/\\b[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\\b/i,alias:\"constant\"},hash:{pattern:/\\b(?:[a-f0-9]{32}){1,2}\\b/i,alias:\"constant\"},\"file-path\":{pattern:/\\b[a-z]:[\\\\/][^\\s|,;:(){}\\[\\]\"']+|(^|[\\s:\\[\\](>|])\\.{0,2}\\/\\w[^\\s|,;:(){}\\[\\]\"']*/i,lookbehind:!0,greedy:!0,alias:\"string\"},date:{pattern:RegExp(\"\\\\b\\\\d{4}[-/]\\\\d{2}[-/]\\\\d{2}(?:T(?=\\\\d{1,2}:)|(?=\\\\s\\\\d{1,2}:))|\\\\b\\\\d{1,4}[-/ ](?:\\\\d{1,2}|Apr|Aug|Dec|Feb|Jan|Jul|Jun|Mar|May|Nov|Oct|Sep)[-/ ]\\\\d{2,4}T?\\\\b|\\\\b(?:(?:Fri|Mon|Sat|Sun|Thu|Tue|Wed)(?:\\\\s{1,2}(?:Apr|Aug|Dec|Feb|Jan|Jul|Jun|Mar|May|Nov|Oct|Sep))?|Apr|Aug|Dec|Feb|Jan|Jul|Jun|Mar|May|Nov|Oct|Sep)\\\\s{1,2}\\\\d{1,2}\\\\b\",\"i\"),alias:\"number\"},time:{pattern:/\\b\\d{1,2}:\\d{1,2}:\\d{1,2}(?:[.,:]\\d+)?(?:\\s?[+-]\\d{2}:?\\d{2}|Z)?\\b/,alias:\"number\"},boolean:/\\b(?:false|null|true)\\b/i,number:{pattern:/(^|[^.\\w])(?:0x[a-f0-9]+|0o[0-7]+|0b[01]+|v?\\d[\\da-f]*(?:\\.\\d+)*(?:e[+-]?\\d+)?[a-z]{0,3}\\b)\\b(?!\\.\\w)/i,lookbehind:!0},operator:/[;:?<=>~/@!$%&+\\-|^(){}*#]/,punctuation:/[\\[\\].,]/};/components/prism-gcode.js\u0001'Prism.languages.gcode = {\n\t'comment': /;.*|\\B\\(.*?\\)\\B/,\n\t'string': {\n\t\tpattern: /\"(?:\"\"|[^\"])*\"/,\n\t\tgreedy: true\n\t},\n\t'keyword': /\\b[GM]\\d+(?:\\.\\d+)?\\b/,\n\t'property': /\\b[A-Z]/,\n\t'checksum': {\n\t\tpattern: /(\\*)\\d+/,\n\t\tlookbehind: true,\n\t\talias: 'number'\n\t},\n\t// T0:0:0\n\t'punctuation': /[:*]/\n};\n/components/prism-puppet.js\u000f(function (Prism) {\n\tPrism.languages.puppet = {\n\t\t'heredoc': [\n\t\t\t// Matches the content of a quoted heredoc string (subject to interpolation)\n\t\t\t{\n\t\t\t\tpattern: /(@\\(\"([^\"\\r\\n\\/):]+)\"(?:\\/[nrts$uL]*)?\\).*(?:\\r?\\n|\\r))(?:.*(?:\\r?\\n|\\r(?!\\n)))*?[ \\t]*(?:\\|[ \\t]*)?(?:-[ \\t]*)?\\2/,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'string',\n\t\t\t\tinside: {\n\t\t\t\t\t// Matches the end tag\n\t\t\t\t\t'punctuation': /(?=\\S).*\\S(?= *$)/\n\t\t\t\t\t// See interpolation below\n\t\t\t\t}\n\t\t\t},\n\t\t\t// Matches the content of an unquoted heredoc string (no interpolation)\n\t\t\t{\n\t\t\t\tpattern: /(@\\(([^\"\\r\\n\\/):]+)(?:\\/[nrts$uL]*)?\\).*(?:\\r?\\n|\\r))(?:.*(?:\\r?\\n|\\r(?!\\n)))*?[ \\t]*(?:\\|[ \\t]*)?(?:-[ \\t]*)?\\2/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true,\n\t\t\t\talias: 'string',\n\t\t\t\tinside: {\n\t\t\t\t\t// Matches the end tag\n\t\t\t\t\t'punctuation': /(?=\\S).*\\S(?= *$)/\n\t\t\t\t}\n\t\t\t},\n\t\t\t// Matches the start tag of heredoc strings\n\t\t\t{\n\t\t\t\tpattern: /@\\(\"?(?:[^\"\\r\\n\\/):]+)\"?(?:\\/[nrts$uL]*)?\\)/,\n\t\t\t\talias: 'string',\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': {\n\t\t\t\t\t\tpattern: /(\\().+?(?=\\))/,\n\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t],\n\t\t'multiline-comment': {\n\t\t\tpattern: /(^|[^\\\\])\\/\\*[\\s\\S]*?\\*\\//,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\talias: 'comment'\n\t\t},\n\t\t'regex': {\n\t\t\t// Must be prefixed with the keyword \"node\" or a non-word char\n\t\t\tpattern: /((?:\\bnode\\s+|[~=\\(\\[\\{,]\\s*|[=+]>\\s*|^\\s*))\\/(?:[^\\/\\\\]|\\\\[\\s\\S])+\\/(?:[imx]+\\b|\\B)/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t// Extended regexes must have the x flag. They can contain single-line comments.\n\t\t\t\t'extended-regex': {\n\t\t\t\t\tpattern: /^\\/(?:[^\\/\\\\]|\\\\[\\s\\S])+\\/[im]*x[im]*$/,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'comment': /#.*/\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t'comment': {\n\t\t\tpattern: /(^|[^\\\\])#.*/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t},\n\t\t'string': {\n\t\t\t// Allow for one nested level of double quotes inside interpolation\n\t\t\tpattern: /([\"'])(?:\\$\\{(?:[^'\"}]|([\"'])(?:(?!\\2)[^\\\\]|\\\\[\\s\\S])*\\2)+\\}|\\$(?!\\{)|(?!\\1)[^\\\\$]|\\\\[\\s\\S])*\\1/,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'double-quoted': {\n\t\t\t\t\tpattern: /^\"[\\s\\S]*\"$/,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t// See interpolation below\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t'variable': {\n\t\t\tpattern: /\\$(?:::)?\\w+(?:::\\w+)*/,\n\t\t\tinside: {\n\t\t\t\t'punctuation': /::/\n\t\t\t}\n\t\t},\n\t\t'attr-name': /(?:\\b\\w+|\\*)(?=\\s*=>)/,\n\t\t'function': [\n\t\t\t{\n\t\t\t\tpattern: /(\\.)(?!\\d)\\w+/,\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\t/\\b(?:contain|debug|err|fail|include|info|notice|realize|require|tag|warning)\\b|\\b(?!\\d)\\w+(?=\\()/\n\t\t],\n\t\t'number': /\\b(?:0x[a-f\\d]+|\\d+(?:\\.\\d+)?(?:e-?\\d+)?)\\b/i,\n\t\t'boolean': /\\b(?:false|true)\\b/,\n\t\t// Includes words reserved for future use\n\t\t'keyword': /\\b(?:application|attr|case|class|consumes|default|define|else|elsif|function|if|import|inherits|node|private|produces|type|undef|unless)\\b/,\n\t\t'datatype': {\n\t\t\tpattern: /\\b(?:Any|Array|Boolean|Callable|Catalogentry|Class|Collection|Data|Default|Enum|Float|Hash|Integer|NotUndef|Numeric|Optional|Pattern|Regexp|Resource|Runtime|Scalar|String|Struct|Tuple|Type|Undef|Variant)\\b/,\n\t\t\talias: 'symbol'\n\t\t},\n\t\t'operator': /=[=~>]?|![=~]?|<(?:<\\|?|[=~|-])?|>[>=]?|->?|~>|\\|>?>?|[*\\/%+?]|\\b(?:and|in|or)\\b/,\n\t\t'punctuation': /[\\[\\]{}().,;]|:+/\n\t};\n\n\tvar interpolation = [\n\t\t{\n\t\t\t// Allow for one nested level of braces inside interpolation\n\t\t\tpattern: /(^|[^\\\\])\\$\\{(?:[^'\"{}]|\\{[^}]*\\}|([\"'])(?:(?!\\2)[^\\\\]|\\\\[\\s\\S])*\\2)+\\}/,\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'short-variable': {\n\t\t\t\t\t// Negative look-ahead prevent wrong highlighting of functions\n\t\t\t\t\tpattern: /(^\\$\\{)(?!\\w+\\()(?:::)?\\w+(?:::\\w+)*/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\talias: 'variable',\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'punctuation': /::/\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t'delimiter': {\n\t\t\t\t\tpattern: /^\\$/,\n\t\t\t\t\talias: 'variable'\n\t\t\t\t},\n\t\t\t\trest: Prism.languages.puppet\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^\\\\])\\$(?:::)?\\w+(?:::\\w+)*/,\n\t\t\tlookbehind: true,\n\t\t\talias: 'variable',\n\t\t\tinside: {\n\t\t\t\t'punctuation': /::/\n\t\t\t}\n\t\t}\n\t];\n\tPrism.languages.puppet['heredoc'][0].inside.interpolation = interpolation;\n\tPrism.languages.puppet['string'].inside['double-quoted'].inside.interpolation = interpolation;\n}(Prism));\n/components/prism-keyman.min.js\u0003Prism.languages.keyman={comment:{pattern:/\\bc .*/i,greedy:!0},string:{pattern:/\"[^\"\\r\\n]*\"|'[^'\\r\\n]*'/,greedy:!0},\"virtual-key\":{pattern:/\\[\\s*(?:(?:ALT|CAPS|CTRL|LALT|LCTRL|NCAPS|RALT|RCTRL|SHIFT)\\s+)*(?:[TKU]_[\\w?]+|[A-E]\\d\\d?|\"[^\"\\r\\n]*\"|'[^'\\r\\n]*')\\s*\\]/i,greedy:!0,alias:\"function\"},\"header-keyword\":{pattern:/&\\w+/,alias:\"bold\"},\"header-statement\":{pattern:/\\b(?:bitmap|bitmaps|caps always off|caps on only|copyright|hotkey|language|layout|message|name|shift frees caps|version)\\b/i,alias:\"bold\"},\"rule-keyword\":{pattern:/\\b(?:any|baselayout|beep|call|context|deadkey|dk|if|index|layer|notany|nul|outs|platform|reset|return|save|set|store|use)\\b/i,alias:\"keyword\"},\"structural-keyword\":{pattern:/\\b(?:ansi|begin|group|match|newcontext|nomatch|postkeystroke|readonly|unicode|using keys)\\b/i,alias:\"keyword\"},\"compile-target\":{pattern:/\\$(?:keyman|keymanonly|keymanweb|kmfl|weaver):/i,alias:\"property\"},number:/\\b(?:U\\+[\\dA-F]+|d\\d+|x[\\da-f]+|\\d+)\\b/i,operator:/[+>\\\\$]|\\.\\./,punctuation:/[()=,]/};/components/prism-ftl.js\n}(function (Prism) {\n\n\t// https://freemarker.apache.org/docs/dgui_template_exp.html\n\n\t// FTL expression with 4 levels of nesting supported\n\tvar FTL_EXPR = /[^<()\"']|\\((?:<expr>)*\\)|<(?!#--)|<#--(?:[^-]|-(?!->))*-->|\"(?:[^\\\\\"]|\\\\.)*\"|'(?:[^\\\\']|\\\\.)*'/.source;\n\tfor (var i = 0; i < 2; i++) {\n\t\tFTL_EXPR = FTL_EXPR.replace(/<expr>/g, function () { return FTL_EXPR; });\n\t}\n\tFTL_EXPR = FTL_EXPR.replace(/<expr>/g, /[^\\s\\S]/.source);\n\n\tvar ftl = {\n\t\t'comment': /<#--[\\s\\S]*?-->/,\n\t\t'string': [\n\t\t\t{\n\t\t\t\t// raw string\n\t\t\t\tpattern: /\\br(\"|')(?:(?!\\1)[^\\\\]|\\\\.)*\\1/,\n\t\t\t\tgreedy: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: RegExp(/(\"|')(?:(?!\\1|\\$\\{)[^\\\\]|\\\\.|\\$\\{(?:(?!\\})(?:<expr>))*\\})*\\1/.source.replace(/<expr>/g, function () { return FTL_EXPR; })),\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'interpolation': {\n\t\t\t\t\t\tpattern: RegExp(/((?:^|[^\\\\])(?:\\\\\\\\)*)\\$\\{(?:(?!\\})(?:<expr>))*\\}/.source.replace(/<expr>/g, function () { return FTL_EXPR; })),\n\t\t\t\t\t\tlookbehind: true,\n\t\t\t\t\t\tinside: {\n\t\t\t\t\t\t\t'interpolation-punctuation': {\n\t\t\t\t\t\t\t\tpattern: /^\\$\\{|\\}$/,\n\t\t\t\t\t\t\t\talias: 'punctuation'\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\trest: null\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t],\n\t\t'keyword': /\\b(?:as)\\b/,\n\t\t'boolean': /\\b(?:false|true)\\b/,\n\t\t'builtin-function': {\n\t\t\tpattern: /((?:^|[^?])\\?\\s*)\\w+/,\n\t\t\tlookbehind: true,\n\t\t\talias: 'function'\n\t\t},\n\t\t'function': /\\b\\w+(?=\\s*\\()/,\n\t\t'number': /\\b\\d+(?:\\.\\d+)?\\b/,\n\t\t'operator': /\\.\\.[<*!]?|->|--|\\+\\+|&&|\\|\\||\\?{1,2}|[-+*/%!=<>]=?|\\b(?:gt|gte|lt|lte)\\b/,\n\t\t'punctuation': /[,;.:()[\\]{}]/\n\t};\n\n\tftl.string[1].inside.interpolation.inside.rest = ftl;\n\n\tPrism.languages.ftl = {\n\t\t'ftl-comment': {\n\t\t\t// the pattern is shortened to be more efficient\n\t\t\tpattern: /^<#--[\\s\\S]*/,\n\t\t\talias: 'comment'\n\t\t},\n\t\t'ftl-directive': {\n\t\t\tpattern: /^<[\\s\\S]+>$/,\n\t\t\tinside: {\n\t\t\t\t'directive': {\n\t\t\t\t\tpattern: /(^<\\/?)[#@][a-z]\\w*/i,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\talias: 'keyword'\n\t\t\t\t},\n\t\t\t\t'punctuation': /^<\\/?|\\/?>$/,\n\t\t\t\t'content': {\n\t\t\t\t\tpattern: /\\s*\\S[\\s\\S]*/,\n\t\t\t\t\talias: 'ftl',\n\t\t\t\t\tinside: ftl\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t'ftl-interpolation': {\n\t\t\tpattern: /^\\$\\{[\\s\\S]*\\}$/,\n\t\t\tinside: {\n\t\t\t\t'punctuation': /^\\$\\{|\\}$/,\n\t\t\t\t'content': {\n\t\t\t\t\tpattern: /\\s*\\S[\\s\\S]*/,\n\t\t\t\t\talias: 'ftl',\n\t\t\t\t\tinside: ftl\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\tPrism.hooks.add('before-tokenize', function (env) {\n\t\t// eslint-disable-next-line regexp/no-useless-lazy\n\t\tvar pattern = RegExp(/<#--[\\s\\S]*?-->|<\\/?[#@][a-zA-Z](?:<expr>)*?>|\\$\\{(?:<expr>)*?\\}/.source.replace(/<expr>/g, function () { return FTL_EXPR; }), 'gi');\n\t\tPrism.languages['markup-templating'].buildPlaceholders(env, 'ftl', pattern);\n\t});\n\n\tPrism.hooks.add('after-tokenize', function (env) {\n\t\tPrism.languages['markup-templating'].tokenizePlaceholders(env, 'ftl');\n\t});\n\n}(Prism));\n/components/prism-hsts.js\u0001\u000e/**\n * Original by Scott Helme.\n *\n * Reference: https://scotthelme.co.uk/hsts-cheat-sheet/\n */\n\nPrism.languages.hsts = {\n\t'directive': {\n\t\tpattern: /\\b(?:includeSubDomains|max-age|preload)(?=[\\s;=]|$)/i,\n\t\talias: 'property'\n\t},\n\t'operator': /=/,\n\t'punctuation': /;/\n};\n/components/prism-racket.min.js\u0001\u001cPrism.languages.racket=Prism.languages.extend(\"scheme\",{\"lambda-parameter\":{pattern:/([(\\[]lambda\\s+[(\\[])[^()\\[\\]'\\s]+/,lookbehind:!0}}),Prism.languages.insertBefore(\"racket\",\"string\",{lang:{pattern:/^#lang.+/m,greedy:!0,alias:\"keyword\"}}),Prism.languages.rkt=Prism.languages.racket;/components/prism-soy.js\t(function (Prism) {\n\tvar stringPattern = /([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1/;\n\tvar numberPattern = /\\b\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?\\b|\\b0x[\\dA-F]+\\b/;\n\n\tPrism.languages.soy = {\n\t\t'comment': [\n\t\t\t/\\/\\*[\\s\\S]*?\\*\\//,\n\t\t\t{\n\t\t\t\tpattern: /(\\s)\\/\\/.*/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true\n\t\t\t}\n\t\t],\n\t\t'command-arg': {\n\t\t\tpattern: /(\\{+\\/?\\s*(?:alias|call|delcall|delpackage|deltemplate|namespace|template)\\s+)\\.?[\\w.]+/,\n\t\t\tlookbehind: true,\n\t\t\talias: 'string',\n\t\t\tinside: {\n\t\t\t\t'punctuation': /\\./\n\t\t\t}\n\t\t},\n\t\t'parameter': {\n\t\t\tpattern: /(\\{+\\/?\\s*@?param\\??\\s+)\\.?[\\w.]+/,\n\t\t\tlookbehind: true,\n\t\t\talias: 'variable'\n\t\t},\n\t\t'keyword': [\n\t\t\t{\n\t\t\t\tpattern: /(\\{+\\/?[^\\S\\r\\n]*)(?:\\\\[nrt]|alias|call|case|css|default|delcall|delpackage|deltemplate|else(?:if)?|fallbackmsg|for(?:each)?|if(?:empty)?|lb|let|literal|msg|namespace|nil|@?param\\??|rb|sp|switch|template|xid)/,\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\t/\\b(?:any|as|attributes|bool|css|float|html|in|int|js|list|map|null|number|string|uri)\\b/\n\t\t],\n\t\t'delimiter': {\n\t\t\tpattern: /^\\{+\\/?|\\/?\\}+$/,\n\t\t\talias: 'punctuation'\n\t\t},\n\t\t'property': /\\w+(?==)/,\n\t\t'variable': {\n\t\t\tpattern: /\\$[^\\W\\d]\\w*(?:\\??(?:\\.\\w+|\\[[^\\]]+\\]))*/,\n\t\t\tinside: {\n\t\t\t\t'string': {\n\t\t\t\t\tpattern: stringPattern,\n\t\t\t\t\tgreedy: true\n\t\t\t\t},\n\t\t\t\t'number': numberPattern,\n\t\t\t\t'punctuation': /[\\[\\].?]/\n\t\t\t}\n\t\t},\n\t\t'string': {\n\t\t\tpattern: stringPattern,\n\t\t\tgreedy: true\n\t\t},\n\t\t'function': [\n\t\t\t/\\w+(?=\\()/,\n\t\t\t{\n\t\t\t\tpattern: /(\\|[^\\S\\r\\n]*)\\w+/,\n\t\t\t\tlookbehind: true\n\t\t\t}\n\t\t],\n\t\t'boolean': /\\b(?:false|true)\\b/,\n\t\t'number': numberPattern,\n\t\t'operator': /\\?:?|<=?|>=?|==?|!=|[+*/%-]|\\b(?:and|not|or)\\b/,\n\t\t'punctuation': /[{}()\\[\\]|.,:]/\n\t};\n\n\t// Tokenize all inline Soy expressions\n\tPrism.hooks.add('before-tokenize', function (env) {\n\t\tvar soyPattern = /\\{\\{.+?\\}\\}|\\{.+?\\}|\\s\\/\\/.*|\\/\\*[\\s\\S]*?\\*\\//g;\n\t\tvar soyLitteralStart = '{literal}';\n\t\tvar soyLitteralEnd = '{/literal}';\n\t\tvar soyLitteralMode = false;\n\n\t\tPrism.languages['markup-templating'].buildPlaceholders(env, 'soy', soyPattern, function (match) {\n\t\t\t// Soy tags inside {literal} block are ignored\n\t\t\tif (match === soyLitteralEnd) {\n\t\t\t\tsoyLitteralMode = false;\n\t\t\t}\n\n\t\t\tif (!soyLitteralMode) {\n\t\t\t\tif (match === soyLitteralStart) {\n\t\t\t\t\tsoyLitteralMode = true;\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t});\n\t});\n\n\t// Re-insert the tokens after tokenizing\n\tPrism.hooks.add('after-tokenize', function (env) {\n\t\tPrism.languages['markup-templating'].tokenizePlaceholders(env, 'soy');\n\t});\n\n}(Prism));\n1/plugins/download-button/prism-download-button.js\u0002](function () {\n\n\tif (typeof Prism === 'undefined' || typeof document === 'undefined' || !document.querySelector) {\n\t\treturn;\n\t}\n\n\tPrism.plugins.toolbar.registerButton('download-file', function (env) {\n\t\tvar pre = env.element.parentNode;\n\t\tif (!pre || !/pre/i.test(pre.nodeName) || !pre.hasAttribute('data-src') || !pre.hasAttribute('data-download-link')) {\n\t\t\treturn;\n\t\t}\n\t\tvar src = pre.getAttribute('data-src');\n\t\tvar a = document.createElement('a');\n\t\ta.textContent = pre.getAttribute('data-download-link-label') || 'Download';\n\t\ta.setAttribute('download', '');\n\t\ta.href = src;\n\t\treturn a;\n\t});\n\n}());\n/components/prism-tremor.js\b-(function (Prism) {\n\n\tPrism.languages.tremor = {\n\t\t'comment': {\n\t\t\tpattern: /(^|[^\\\\])(?:\\/\\*[\\s\\S]*?\\*\\/|(?:--|\\/\\/|#).*)/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'interpolated-string': null, // see below\n\t\t'extractor': {\n\t\t\tpattern: /\\b[a-z_]\\w*\\|(?:[^\\r\\n\\\\|]|\\\\(?:\\r\\n|[\\s\\S]))*\\|/i,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'regex': {\n\t\t\t\t\tpattern: /(^re)\\|[\\s\\S]+/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t},\n\t\t\t\t'function': /^\\w+/,\n\t\t\t\t'value': /\\|[\\s\\S]+/\n\t\t\t}\n\t\t},\n\t\t'identifier': {\n\t\t\tpattern: /`[^`]*`/,\n\t\t\tgreedy: true\n\t\t},\n\n\t\t'function': /\\b[a-z_]\\w*(?=\\s*(?:::\\s*<|\\())\\b/,\n\n\t\t'keyword': /\\b(?:args|as|by|case|config|connect|connector|const|copy|create|default|define|deploy|drop|each|emit|end|erase|event|flow|fn|for|from|group|having|insert|into|intrinsic|let|links|match|merge|mod|move|of|operator|patch|pipeline|recur|script|select|set|sliding|state|stream|to|tumbling|update|use|when|where|window|with)\\b/,\n\t\t'boolean': /\\b(?:false|null|true)\\b/i,\n\n\t\t'number': /\\b(?:0b[01_]*|0x[0-9a-fA-F_]*|\\d[\\d_]*(?:\\.\\d[\\d_]*)?(?:[Ee][+-]?[\\d_]+)?)\\b/,\n\n\t\t'pattern-punctuation': {\n\t\t\tpattern: /%(?=[({[])/,\n\t\t\talias: 'punctuation'\n\t\t},\n\t\t'operator': /[-+*\\/%~!^]=?|=[=>]?|&[&=]?|\\|[|=]?|<<?=?|>>?>?=?|(?:absent|and|not|or|present|xor)\\b/,\n\t\t'punctuation': /::|[;\\[\\]()\\{\\},.:]/,\n\t};\n\n\tvar interpolationPattern = /#\\{(?:[^\"{}]|\\{[^{}]*\\}|\"(?:[^\"\\\\\\r\\n]|\\\\(?:\\r\\n|[\\s\\S]))*\")*\\}/.source;\n\n\tPrism.languages.tremor['interpolated-string'] = {\n\t\tpattern: RegExp(\n\t\t\t/(^|[^\\\\])/.source +\n\t\t\t'(?:' +\n\t\t\t'\"\"\"(?:' + /[^\"\\\\#]|\\\\[\\s\\S]|\"(?!\"\")|#(?!\\{)/.source + '|' + interpolationPattern + ')*\"\"\"' +\n\t\t\t'|' +\n\t\t\t'\"(?:' + /[^\"\\\\\\r\\n#]|\\\\(?:\\r\\n|[\\s\\S])|#(?!\\{)/.source + '|' + interpolationPattern + ')*\"' +\n\t\t\t')'\n\t\t),\n\t\tlookbehind: true,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'interpolation': {\n\t\t\t\tpattern: RegExp(interpolationPattern),\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': /^#\\{|\\}$/,\n\t\t\t\t\t'expression': {\n\t\t\t\t\t\tpattern: /[\\s\\S]+/,\n\t\t\t\t\t\tinside: Prism.languages.tremor\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t'string': /[\\s\\S]+/\n\t\t}\n\t};\n\n\tPrism.languages.troy = Prism.languages['tremor'];\n\tPrism.languages.trickle = Prism.languages['tremor'];\n\n}(Prism));\n/components/prism-xojo.min.js\u0004aPrism.languages.xojo={comment:{pattern:/(?:'|\\/\\/|Rem\\b).+/i,greedy:!0},string:{pattern:/\"(?:\"\"|[^\"])*\"/,greedy:!0},number:[/(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:E[+-]?\\d+)?/i,/&[bchou][a-z\\d]+/i],directive:{pattern:/#(?:Else|ElseIf|Endif|If|Pragma)\\b/i,alias:\"property\"},keyword:/\\b(?:AddHandler|App|Array|As(?:signs)?|Auto|Boolean|Break|By(?:Ref|Val)|Byte|Call|Case|Catch|CFStringRef|CGFloat|Class|Color|Const|Continue|CString|Currency|CurrentMethodName|Declare|Delegate|Dim|Do(?:uble|wnTo)?|Each|Else(?:If)?|End|Enumeration|Event|Exception|Exit|Extends|False|Finally|For|Function|Get|GetTypeInfo|Global|GOTO|If|Implements|In|Inherits|Int(?:8|16|32|64|eger|erface)?|Lib|Loop|Me|Module|Next|Nil|Object|Optional|OSType|ParamArray|Private|Property|Protected|PString|Ptr|Raise(?:Event)?|ReDim|RemoveHandler|Return|Select(?:or)?|Self|Set|Shared|Short|Single|Soft|Static|Step|String|Sub|Super|Text|Then|To|True|Try|Ubound|UInt(?:8|16|32|64|eger)?|Until|Using|Var(?:iant)?|Wend|While|WindowPtr|WString)\\b/i,operator:/<[=>]?|>=?|[+\\-*\\/\\\\^=]|\\b(?:AddressOf|And|Ctype|IsA?|Mod|New|Not|Or|WeakAddressOf|Xor)\\b/i,punctuation:/[.,;:()]/};/components/prism-css.min.js\u0004!function(s){var e=/(?:\"(?:\\\\(?:\\r\\n|[\\s\\S])|[^\"\\\\\\r\\n])*\"|'(?:\\\\(?:\\r\\n|[\\s\\S])|[^'\\\\\\r\\n])*')/;s.languages.css={comment:/\\/\\*[\\s\\S]*?\\*\\//,atrule:{pattern:RegExp(\"@[\\\\w-](?:[^;{\\\\s\\\"']|\\\\s+(?!\\\\s)|\"+e.source+\")*?(?:;|(?=\\\\s*\\\\{))\"),inside:{rule:/^@[\\w-]+/,\"selector-function-argument\":{pattern:/(\\bselector\\s*\\(\\s*(?![\\s)]))(?:[^()\\s]|\\s+(?![\\s)])|\\((?:[^()]|\\([^()]*\\))*\\))+(?=\\s*\\))/,lookbehind:!0,alias:\"selector\"},keyword:{pattern:/(^|[^\\w-])(?:and|not|only|or)(?![\\w-])/,lookbehind:!0}}},url:{pattern:RegExp(\"\\\\burl\\\\((?:\"+e.source+\"|(?:[^\\\\\\\\\\r\\n()\\\"']|\\\\\\\\[^])*)\\\\)\",\"i\"),greedy:!0,inside:{function:/^url/i,punctuation:/^\\(|\\)$/,string:{pattern:RegExp(\"^\"+e.source+\"$\"),alias:\"url\"}}},selector:{pattern:RegExp(\"(^|[{}\\\\s])[^{}\\\\s](?:[^{};\\\"'\\\\s]|\\\\s+(?![\\\\s{])|\"+e.source+\")*(?=\\\\s*\\\\{)\"),lookbehind:!0},string:{pattern:e,greedy:!0},property:{pattern:/(^|[^-\\w\\xA0-\\uFFFF])(?!\\s)[-_a-z\\xA0-\\uFFFF](?:(?!\\s)[-\\w\\xA0-\\uFFFF])*(?=\\s*:)/i,lookbehind:!0},important:/!important\\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\\()/i,lookbehind:!0},punctuation:/[(){};:,]/},s.languages.css.atrule.inside.rest=s.languages.css;var t=s.languages.markup;t&&(t.tag.addInlined(\"style\",\"css\"),t.tag.addAttribute(\"style\",\"css\"))}(Prism);//plugins/inline-color/prism-inline-color.min.js\u0003!function(){if(\"undefined\"!=typeof Prism&&\"undefined\"!=typeof document){var n=/<\\/?(?!\\d)[^\\s>\\/=$<%]+(?:\\s(?:\\s*[^\\s>\\/=]+(?:\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))|(?=[\\s/>])))+)?\\s*\\/?>/g,r=/^#?((?:[\\da-f]){3,4}|(?:[\\da-f]{2}){3,4})$/i,o=[function(n){var o=r.exec(n);if(o){for(var s=(n=o[1]).length>=6?2:1,e=n.length/s,t=1==s?1/15:1/255,i=[],a=0;a<e;a++){var c=parseInt(n.substr(a*s,s),16);i.push(c*t)}return 3==e&&i.push(1),\"rgba(\"+i.slice(0,3).map((function(n){return String(Math.round(255*n))})).join(\",\")+\",\"+String(Number(i[3].toFixed(3)))+\")\"}},function(n){var r=(new Option).style;return r.color=n,r.color?n:void 0}];Prism.hooks.add(\"wrap\",(function(r){if(\"color\"===r.type||r.classes.indexOf(\"color\")>=0){for(var s,e=r.content,t=e.split(n).join(\"\"),i=0,a=o.length;i<a&&!s;i++)s=o[i](t);if(!s)return;var c='<span class=\"inline-color-wrapper\"><span class=\"inline-color\" style=\"background-color:'+s+';\"></span></span>';r.content=c+e}}))}}(); /components/prism-gettext.min.js\u0002\u0015Prism.languages.gettext={comment:[{pattern:/# .*/,greedy:!0,alias:\"translator-comment\"},{pattern:/#\\..*/,greedy:!0,alias:\"extracted-comment\"},{pattern:/#:.*/,greedy:!0,alias:\"reference-comment\"},{pattern:/#,.*/,greedy:!0,alias:\"flag-comment\"},{pattern:/#\\|.*/,greedy:!0,alias:\"previously-untranslated-comment\"},{pattern:/#.*/,greedy:!0}],string:{pattern:/(^|[^\\\\])\"(?:[^\"\\\\]|\\\\.)*\"/,lookbehind:!0,greedy:!0},keyword:/^msg(?:ctxt|id|id_plural|str)\\b/m,number:/\\b\\d+\\b/,punctuation:/[\\[\\]]/},Prism.languages.po=Prism.languages.gettext;!/plugins/toolbar/prism-toolbar.js\u0010g(function () {\n\n\tif (typeof Prism === 'undefined' || typeof document === 'undefined') {\n\t\treturn;\n\t}\n\n\tvar callbacks = [];\n\tvar map = {};\n\tvar noop = function () {};\n\n\tPrism.plugins.toolbar = {};\n\n\t/**\n\t * @typedef ButtonOptions\n\t * @property {string} text The text displayed.\n\t * @property {string} [url] The URL of the link which will be created.\n\t * @property {Function} [onClick] The event listener for the `click` event of the created button.\n\t * @property {string} [className] The class attribute to include with element.\n\t */\n\n\t/**\n\t * Register a button callback with the toolbar.\n\t *\n\t * @param {string} key\n\t * @param {ButtonOptions|Function} opts\n\t */\n\tvar registerButton = Prism.plugins.toolbar.registerButton = function (key, opts) {\n\t\tvar callback;\n\n\t\tif (typeof opts === 'function') {\n\t\t\tcallback = opts;\n\t\t} else {\n\t\t\tcallback = function (env) {\n\t\t\t\tvar element;\n\n\t\t\t\tif (typeof opts.onClick === 'function') {\n\t\t\t\t\telement = document.createElement('button');\n\t\t\t\t\telement.type = 'button';\n\t\t\t\t\telement.addEventListener('click', function () {\n\t\t\t\t\t\topts.onClick.call(this, env);\n\t\t\t\t\t});\n\t\t\t\t} else if (typeof opts.url === 'string') {\n\t\t\t\t\telement = document.createElement('a');\n\t\t\t\t\telement.href = opts.url;\n\t\t\t\t} else {\n\t\t\t\t\telement = document.createElement('span');\n\t\t\t\t}\n\n\t\t\t\tif (opts.className) {\n\t\t\t\t\telement.classList.add(opts.className);\n\t\t\t\t}\n\n\t\t\t\telement.textContent = opts.text;\n\n\t\t\t\treturn element;\n\t\t\t};\n\t\t}\n\n\t\tif (key in map) {\n\t\t\tconsole.warn('There is a button with the key \"' + key + '\" registered already.');\n\t\t\treturn;\n\t\t}\n\n\t\tcallbacks.push(map[key] = callback);\n\t};\n\n\t/**\n\t * Returns the callback order of the given element.\n\t *\n\t * @param {HTMLElement} element\n\t * @returns {string[] | undefined}\n\t */\n\tfunction getOrder(element) {\n\t\twhile (element) {\n\t\t\tvar order = element.getAttribute('data-toolbar-order');\n\t\t\tif (order != null) {\n\t\t\t\torder = order.trim();\n\t\t\t\tif (order.length) {\n\t\t\t\t\treturn order.split(/\\s*,\\s*/g);\n\t\t\t\t} else {\n\t\t\t\t\treturn [];\n\t\t\t\t}\n\t\t\t}\n\t\t\telement = element.parentElement;\n\t\t}\n\t}\n\n\t/**\n\t * Post-highlight Prism hook callback.\n\t *\n\t * @param env\n\t */\n\tvar hook = Prism.plugins.toolbar.hook = function (env) {\n\t\t// Check if inline or actual code block (credit to line-numbers plugin)\n\t\tvar pre = env.element.parentNode;\n\t\tif (!pre || !/pre/i.test(pre.nodeName)) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Autoloader rehighlights, so only do this once.\n\t\tif (pre.parentNode.classList.contains('code-toolbar')) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Create wrapper for <pre> to prevent scrolling toolbar with content\n\t\tvar wrapper = document.createElement('div');\n\t\twrapper.classList.add('code-toolbar');\n\t\tpre.parentNode.insertBefore(wrapper, pre);\n\t\twrapper.appendChild(pre);\n\n\t\t// Setup the toolbar\n\t\tvar toolbar = document.createElement('div');\n\t\ttoolbar.classList.add('toolbar');\n\n\t\t// order callbacks\n\t\tvar elementCallbacks = callbacks;\n\t\tvar order = getOrder(env.element);\n\t\tif (order) {\n\t\t\telementCallbacks = order.map(function (key) {\n\t\t\t\treturn map[key] || noop;\n\t\t\t});\n\t\t}\n\n\t\telementCallbacks.forEach(function (callback) {\n\t\t\tvar element = callback(env);\n\n\t\t\tif (!element) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar item = document.createElement('div');\n\t\t\titem.classList.add('toolbar-item');\n\n\t\t\titem.appendChild(element);\n\t\t\ttoolbar.appendChild(item);\n\t\t});\n\n\t\t// Add our toolbar to the currently created wrapper of <pre> tag\n\t\twrapper.appendChild(toolbar);\n\t};\n\n\tregisterButton('label', function (env) {\n\t\tvar pre = env.element.parentNode;\n\t\tif (!pre || !/pre/i.test(pre.nodeName)) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!pre.hasAttribute('data-label')) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar element; var template;\n\t\tvar text = pre.getAttribute('data-label');\n\t\ttry {\n\t\t\t// Any normal text will blow up this selector.\n\t\t\ttemplate = document.querySelector('template#' + text);\n\t\t} catch (e) { /* noop */ }\n\n\t\tif (template) {\n\t\t\telement = template.content;\n\t\t} else {\n\t\t\tif (pre.hasAttribute('data-url')) {\n\t\t\t\telement = document.createElement('a');\n\t\t\t\telement.href = pre.getAttribute('data-url');\n\t\t\t} else {\n\t\t\t\telement = document.createElement('span');\n\t\t\t}\n\n\t\t\telement.textContent = text;\n\t\t}\n\n\t\treturn element;\n\t});\n\n\t/**\n\t * Register the toolbar with Prism.\n\t */\n\tPrism.hooks.add('complete', hook);\n}());\n-/plugins/keep-markup/prism-keep-markup.min.js\u0005\"undefined\"!=typeof Prism&&\"undefined\"!=typeof document&&document.createRange&&(Prism.plugins.KeepMarkup=!0,Prism.hooks.add(\"before-highlight\",(function(e){if(e.element.children.length&&Prism.util.isActive(e.element,\"keep-markup\",!0)){var n=Prism.util.isActive(e.element,\"drop-tokens\",!1),t=0,o=[];r(e.element),o.length&&(e.keepMarkup=o)}function d(e){if(function(e){return!n||\"span\"!==e.nodeName.toLowerCase()||!e.classList.contains(\"token\")}(e)){var d={element:e,posOpen:t};o.push(d),r(e),d.posClose=t}else r(e)}function r(e){for(var n=0,o=e.childNodes.length;n<o;n++){var r=e.childNodes[n];1===r.nodeType?d(r):3===r.nodeType&&(t+=r.data.length)}}})),Prism.hooks.add(\"after-highlight\",(function(e){if(e.keepMarkup&&e.keepMarkup.length){var n=function(e,t){for(var o=0,d=e.childNodes.length;o<d;o++){var r=e.childNodes[o];if(1===r.nodeType){if(!n(r,t))return!1}else 3===r.nodeType&&(!t.nodeStart&&t.pos+r.data.length>t.node.posOpen&&(t.nodeStart=r,t.nodeStartPos=t.node.posOpen-t.pos),t.nodeStart&&t.pos+r.data.length>=t.node.posClose&&(t.nodeEnd=r,t.nodeEndPos=t.node.posClose-t.pos),t.pos+=r.data.length);if(t.nodeStart&&t.nodeEnd){var s=document.createRange();return s.setStart(t.nodeStart,t.nodeStartPos),s.setEnd(t.nodeEnd,t.nodeEndPos),t.node.element.innerHTML=\"\",t.node.element.appendChild(s.extractContents()),s.insertNode(t.node.element),s.detach(),!1}}return!0};e.keepMarkup.forEach((function(t){n(e.element,{node:t,pos:0})})),e.highlightedCode=e.element.innerHTML}})));/components/prism-uorazor.js\n\u0011Prism.languages.uorazor = {\n\t'comment-hash': {\n\t\tpattern: /#.*/,\n\t\talias: 'comment',\n\t\tgreedy: true\n\t},\n\t'comment-slash': {\n\t\tpattern: /\\/\\/.*/,\n\t\talias: 'comment',\n\t\tgreedy: true\n\t},\n\t'string': {\n\t\tpattern: /(\"|')(?:\\\\.|(?!\\1)[^\\\\\\r\\n])*\\1/,\n\t\tinside: {\n\t\t\t'punctuation': /^['\"]|['\"]$/\n\t\t},\n\t\tgreedy: true\n\t},\n\t'source-layers': {\n\t\tpattern: /\\b(?:arms|backpack|blue|bracelet|cancel|clear|cloak|criminal|earrings|enemy|facialhair|friend|friendly|gloves|gray|grey|ground|hair|head|innerlegs|innertorso|innocent|lefthand|middletorso|murderer|neck|nonfriendly|onehandedsecondary|outerlegs|outertorso|pants|red|righthand|ring|self|shirt|shoes|talisman|waist)\\b/i,\n\t\talias: 'function'\n\t},\n\t'source-commands': {\n\t\tpattern: /\\b(?:alliance|attack|cast|clearall|clearignore|clearjournal|clearlist|clearsysmsg|createlist|createtimer|dclick|dclicktype|dclickvar|dress|dressconfig|drop|droprelloc|emote|getlabel|guild|gumpclose|gumpresponse|hotkey|ignore|lasttarget|lift|lifttype|menu|menuresponse|msg|org|organize|organizer|overhead|pause|poplist|potion|promptresponse|pushlist|removelist|removetimer|rename|restock|say|scav|scavenger|script|setability|setlasttarget|setskill|settimer|setvar|sysmsg|target|targetloc|targetrelloc|targettype|undress|unignore|unsetvar|useobject|useonce|useskill|usetype|virtue|wait|waitforgump|waitformenu|waitforprompt|waitforstat|waitforsysmsg|waitfortarget|walk|wfsysmsg|wft|whisper|yell)\\b/,\n\t\talias: 'function'\n\t},\n\t'tag-name': {\n\t\tpattern: /(^\\{%-?\\s*)\\w+/,\n\t\tlookbehind: true,\n\t\talias: 'keyword'\n\t},\n\t'delimiter': {\n\t\tpattern: /^\\{[{%]-?|-?[%}]\\}$/,\n\t\talias: 'punctuation'\n\t},\n\t'function': /\\b(?:atlist|close|closest|count|counter|counttype|dead|dex|diffhits|diffmana|diffstam|diffweight|find|findbuff|finddebuff|findlayer|findtype|findtypelist|followers|gumpexists|hidden|hits|hp|hue|human|humanoid|ingump|inlist|insysmessage|insysmsg|int|invul|lhandempty|list|listexists|mana|maxhits|maxhp|maxmana|maxstam|maxweight|monster|mounted|name|next|noto|paralyzed|poisoned|position|prev|previous|queued|rand|random|rhandempty|skill|stam|str|targetexists|timer|timerexists|varexist|warmode|weight)\\b/,\n\t'keyword': /\\b(?:and|as|break|continue|else|elseif|endfor|endif|endwhile|for|if|loop|not|or|replay|stop|while)\\b/,\n\t'boolean': /\\b(?:false|null|true)\\b/,\n\t'number': /\\b0x[\\dA-Fa-f]+|(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:[Ee][-+]?\\d+)?/,\n\t'operator': [\n\t\t{\n\t\t\tpattern: /(\\s)(?:and|b-and|b-or|b-xor|ends with|in|is|matches|not|or|same as|starts with)(?=\\s)/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t/[=<>]=?|!=|\\*\\*?|\\/\\/?|\\?:?|[-+~%|]/\n\t],\n\t'punctuation': /[()\\[\\]{}:.,]/\n};\n/README.md\u000e# [Prism](https://prismjs.com/)\n\n[![Build Status](https://github.com/PrismJS/prism/workflows/CI/badge.svg)](https://github.com/PrismJS/prism/actions)\n[![npm](https://img.shields.io/npm/dw/prismjs.svg)](https://www.npmjs.com/package/prismjs)\n\nPrism is a lightweight, robust, and elegant syntax highlighting library. It's a spin-off project from [Dabblet](https://dabblet.com/).\n\nYou can learn more on [prismjs.com](https://prismjs.com/).\n\n[Why another syntax highlighter?](https://lea.verou.me/2012/07/introducing-prism-an-awesome-new-syntax-highlighter/#more-1841)\n\n[More themes for Prism!](https://github.com/PrismJS/prism-themes)\n\n## Contribute to Prism!\n\n### **Important Notice**\n\nWe are currently working on [Prism v2](https://github.com/PrismJS/prism/discussions/3531) and will only accept security-relevant PRs for the time being.\n\nOnce work on Prism v2 is sufficiently advanced, we will accept PRs again. This will be announced on our [Discussion](https://github.com/PrismJS/prism/discussions) page and mentioned in the [roadmap discussion](https://github.com/PrismJS/prism/discussions/3531).\n\n<details>\n<summary>Prism v1 contributing notes</summary>\n\nPrism depends on community contributions to expand and cover a wider array of use cases. If you like it, consider giving back by sending a pull request. Here are a few tips:\n\n- Read the [documentation](https://prismjs.com/extending.html). Prism was designed to be extensible.\n- Do not edit `prism.js`, it’s just the version of Prism used by the Prism website and is built automatically. Limit your changes to the unminified files in the `components/` folder. `prism.js` and all minified files are generated by our build system (see below).\n- Use `npm ci` to install Prism's dependencies. Do not use `npm install` because it will cause non-deterministic builds.\n- The build system uses [gulp](https://github.com/gulpjs/gulp) to minify the files and build `prism.js`. With all of Prism's dependencies installed, you just need to run the command `npm run build`.\n- Please follow the code conventions used in the files already. For example, I use [tabs for indentation and spaces for alignment](http://lea.verou.me/2012/01/why-tabs-are-clearly-superior/). Opening braces are on the same line, closing braces on their own line regardless of construct. There is a space before the opening brace. etc etc.\n- Please try to err towards more smaller PRs rather than a few huge PRs. If a PR includes changes that I want to merge and also changes that I don't, handling it becomes difficult.\n- My time is very limited these days, so it might take a long time to review bigger PRs (small ones are usually merged very quickly), especially those modifying the Prism Core. This doesn't mean your PR is rejected.\n- If you contribute a new language definition, you will be responsible for handling bug reports about that language definition.\n- If you [add a new language definition](https://prismjs.com/extending.html#creating-a-new-language-definition) or plugin, you need to add it to `components.json` as well and rebuild Prism by running `npm run build`, so that it becomes available to the download build page. For new languages, please also add a few [tests](https://prismjs.com/test-suite.html) and an example in the `examples/` folder.\n- Go to [prism-themes](https://github.com/PrismJS/prism-themes) if you want to add a new theme.\n\nThank you so much for contributing!!\n\n### Software requirements\n\nPrism will run on [almost any browser](https://prismjs.com/#features-full) and Node.js version but you need the following software to contribute:\n\n- Node.js >= 10.x\n- npm >= 6.x\n\n</details>\n\n## Translations\n\n* [简体中文](https://www.awesomes.cn/repo/PrismJS/prism) (if unavailable, see [here](https://deepmind.t-salon.cc/article/113))\n/plugins/wpd/prism-wpd.min.js\fU!function(){if(\"undefined\"!=typeof Prism){if(Prism.languages.css&&(Prism.languages.css.selector.pattern?(Prism.languages.css.selector.inside[\"pseudo-class\"]=/:[\\w-]+/,Prism.languages.css.selector.inside[\"pseudo-element\"]=/::[\\w-]+/):Prism.languages.css.selector={pattern:Prism.languages.css.selector,inside:{\"pseudo-class\":/:[\\w-]+/,\"pseudo-element\":/::[\\w-]+/}}),Prism.languages.markup){Prism.languages.markup.tag.inside.tag.inside[\"tag-id\"]=/[\\w-]+/;var e={HTML:{a:1,abbr:1,acronym:1,b:1,basefont:1,bdo:1,big:1,blink:1,cite:1,code:1,dfn:1,em:1,kbd:1,i:1,rp:1,rt:1,ruby:1,s:1,samp:1,small:1,spacer:1,strike:1,strong:1,sub:1,sup:1,time:1,tt:1,u:1,var:1,wbr:1,noframes:1,summary:1,command:1,dt:1,dd:1,figure:1,figcaption:1,center:1,section:1,nav:1,article:1,aside:1,hgroup:1,header:1,footer:1,address:1,noscript:1,isIndex:1,main:1,mark:1,marquee:1,meter:1,menu:1},SVG:{animateColor:1,animateMotion:1,animateTransform:1,glyph:1,feBlend:1,feColorMatrix:1,feComponentTransfer:1,feFuncR:1,feFuncG:1,feFuncB:1,feFuncA:1,feComposite:1,feConvolveMatrix:1,feDiffuseLighting:1,feDisplacementMap:1,feFlood:1,feGaussianBlur:1,feImage:1,feMerge:1,feMergeNode:1,feMorphology:1,feOffset:1,feSpecularLighting:1,feTile:1,feTurbulence:1,feDistantLight:1,fePointLight:1,feSpotLight:1,linearGradient:1,radialGradient:1,altGlyph:1,textPath:1,tref:1,altglyph:1,textpath:1,altglyphdef:1,altglyphitem:1,clipPath:1,\"color-profile\":1,cursor:1,\"font-face\":1,\"font-face-format\":1,\"font-face-name\":1,\"font-face-src\":1,\"font-face-uri\":1,foreignObject:1,glyphRef:1,hkern:1,vkern:1},MathML:{}}}var t;Prism.hooks.add(\"wrap\",(function(n){if((\"tag-id\"==n.type||\"property\"==n.type&&0!=n.content.indexOf(\"-\")||\"rule\"==n.type&&0!=n.content.indexOf(\"@-\")||\"pseudo-class\"==n.type&&0!=n.content.indexOf(\":-\")||\"pseudo-element\"==n.type&&0!=n.content.indexOf(\"::-\")||\"attr-name\"==n.type&&0!=n.content.indexOf(\"data-\"))&&-1===n.content.indexOf(\"<\")&&(\"css\"==n.language||\"scss\"==n.language||\"markup\"==n.language)){var a=\"https://webplatform.github.io/docs/\",s=n.content;if(\"css\"==n.language||\"scss\"==n.language)a+=\"css/\",\"property\"==n.type?a+=\"properties/\":\"rule\"==n.type?(a+=\"atrules/\",s=s.substring(1)):\"pseudo-class\"==n.type?(a+=\"selectors/pseudo-classes/\",s=s.substring(1)):\"pseudo-element\"==n.type&&(a+=\"selectors/pseudo-elements/\",s=s.substring(2));else if(\"markup\"==n.language)if(\"tag-id\"==n.type){if(!(t=function(t){var n=t.toLowerCase();if(e.HTML[n])return\"html\";if(e.SVG[t])return\"svg\";if(e.MathML[t])return\"mathml\";if(0!==e.HTML[n]&&\"undefined\"!=typeof document){var a=(document.createElement(t).toString().match(/\\[object HTML(.+)Element\\]/)||[])[1];if(a&&\"Unknown\"!=a)return e.HTML[n]=1,\"html\"}if(e.HTML[n]=0,0!==e.SVG[t]&&\"undefined\"!=typeof document){var s=(document.createElementNS(\"http://www.w3.org/2000/svg\",t).toString().match(/\\[object SVG(.+)Element\\]/)||[])[1];if(s&&\"Unknown\"!=s)return e.SVG[t]=1,\"svg\"}return e.SVG[t]=0,0!==e.MathML[t]&&0===t.indexOf(\"m\")?(e.MathML[t]=1,\"mathml\"):(e.MathML[t]=0,null)}(n.content)||t))return;a+=t+\"/elements/\"}else if(\"attr-name\"==n.type){if(!t)return;a+=t+\"/attributes/\"}a+=s,n.tag=\"a\",n.attributes.href=a,n.attributes.target=\"_blank\"}}))}}();9/plugins/copy-to-clipboard/prism-copy-to-clipboard.min.js\u0006\u0016!function(){function t(t){var e=document.createElement(\"textarea\");e.value=t.getText(),e.style.top=\"0\",e.style.left=\"0\",e.style.position=\"fixed\",document.body.appendChild(e),e.focus(),e.select();try{var o=document.execCommand(\"copy\");setTimeout((function(){o?t.success():t.error()}),1)}catch(e){setTimeout((function(){t.error(e)}),1)}document.body.removeChild(e)}\"undefined\"!=typeof Prism&&\"undefined\"!=typeof document&&(Prism.plugins.toolbar?Prism.plugins.toolbar.registerButton(\"copy-to-clipboard\",(function(e){var o=e.element,n=function(t){var e={copy:\"Copy\",\"copy-error\":\"Press Ctrl+C to copy\",\"copy-success\":\"Copied!\",\"copy-timeout\":5e3};for(var o in e){for(var n=\"data-prismjs-\"+o,c=t;c&&!c.hasAttribute(n);)c=c.parentElement;c&&(e[o]=c.getAttribute(n))}return e}(o),c=document.createElement(\"button\");c.className=\"copy-to-clipboard-button\",c.setAttribute(\"type\",\"button\");var r=document.createElement(\"span\");return c.appendChild(r),u(\"copy\"),function(e,o){e.addEventListener(\"click\",(function(){!function(e){navigator.clipboard?navigator.clipboard.writeText(e.getText()).then(e.success,(function(){t(e)})):t(e)}(o)}))}(c,{getText:function(){return o.textContent},success:function(){u(\"copy-success\"),i()},error:function(){u(\"copy-error\"),setTimeout((function(){!function(t){window.getSelection().selectAllChildren(t)}(o)}),1),i()}}),c;function i(){setTimeout((function(){u(\"copy\")}),n[\"copy-timeout\"])}function u(t){r.textContent=n[t],c.setAttribute(\"data-copy-state\",t)}})):console.warn(\"Copy to Clipboard plugin loaded before Toolbar plugin.\"))}();/components/prism-dot.js\u0007\u001c// https://www.graphviz.org/doc/info/lang.html\n\n(function (Prism) {\n\n\tvar ID = '(?:' + [\n\t\t// an identifier\n\t\t/[a-zA-Z_\\x80-\\uFFFF][\\w\\x80-\\uFFFF]*/.source,\n\t\t// a number\n\t\t/-?(?:\\.\\d+|\\d+(?:\\.\\d*)?)/.source,\n\t\t// a double-quoted string\n\t\t/\"[^\"\\\\]*(?:\\\\[\\s\\S][^\"\\\\]*)*\"/.source,\n\t\t// HTML-like string\n\t\t/<(?:[^<>]|(?!<!--)<(?:[^<>\"']|\"[^\"]*\"|'[^']*')+>|<!--(?:[^-]|-(?!->))*-->)*>/.source\n\t].join('|') + ')';\n\n\tvar IDInside = {\n\t\t'markup': {\n\t\t\tpattern: /(^<)[\\s\\S]+(?=>$)/,\n\t\t\tlookbehind: true,\n\t\t\talias: ['language-markup', 'language-html', 'language-xml'],\n\t\t\tinside: Prism.languages.markup\n\t\t}\n\t};\n\n\t/**\n\t * @param {string} source\n\t * @param {string} flags\n\t * @returns {RegExp}\n\t */\n\tfunction withID(source, flags) {\n\t\treturn RegExp(source.replace(/<ID>/g, function () { return ID; }), flags);\n\t}\n\n\tPrism.languages.dot = {\n\t\t'comment': {\n\t\t\tpattern: /\\/\\/.*|\\/\\*[\\s\\S]*?\\*\\/|^#.*/m,\n\t\t\tgreedy: true\n\t\t},\n\t\t'graph-name': {\n\t\t\tpattern: withID(/(\\b(?:digraph|graph|subgraph)[ \\t\\r\\n]+)<ID>/.source, 'i'),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\talias: 'class-name',\n\t\t\tinside: IDInside\n\t\t},\n\t\t'attr-value': {\n\t\t\tpattern: withID(/(=[ \\t\\r\\n]*)<ID>/.source),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: IDInside\n\t\t},\n\t\t'attr-name': {\n\t\t\tpattern: withID(/([\\[;, \\t\\r\\n])<ID>(?=[ \\t\\r\\n]*=)/.source),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: IDInside\n\t\t},\n\t\t'keyword': /\\b(?:digraph|edge|graph|node|strict|subgraph)\\b/i,\n\t\t'compass-point': {\n\t\t\tpattern: /(:[ \\t\\r\\n]*)(?:[ewc_]|[ns][ew]?)(?![\\w\\x80-\\uFFFF])/,\n\t\t\tlookbehind: true,\n\t\t\talias: 'builtin'\n\t\t},\n\t\t'node': {\n\t\t\tpattern: withID(/(^|[^-.\\w\\x80-\\uFFFF\\\\])<ID>/.source),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: IDInside\n\t\t},\n\t\t'operator': /[=:]|-[->]/,\n\t\t'punctuation': /[\\[\\]{};,]/\n\t};\n\n\tPrism.languages.gv = Prism.languages.dot;\n\n}(Prism));\n /components/prism-inform7.min.js\r\u0013Prism.languages.inform7={string:{pattern:/\"[^\"]*\"/,inside:{substitution:{pattern:/\\[[^\\[\\]]+\\]/,inside:{delimiter:{pattern:/\\[|\\]/,alias:\"punctuation\"}}}}},comment:{pattern:/\\[[^\\[\\]]+\\]/,greedy:!0},title:{pattern:/^[ \\t]*(?:book|chapter|part(?! of)|section|table|volume)\\b.+/im,alias:\"important\"},number:{pattern:/(^|[^-])(?:\\b\\d+(?:\\.\\d+)?(?:\\^\\d+)?(?:(?!\\d)\\w+)?|\\b(?:eight|eleven|five|four|nine|one|seven|six|ten|three|twelve|two))\\b(?!-)/i,lookbehind:!0},verb:{pattern:/(^|[^-])\\b(?:answering|applying to|are|asking|attacking|be(?:ing)?|burning|buying|called|carries|carry(?! out)|carrying|climbing|closing|conceal(?:ing|s)?|consulting|contain(?:ing|s)?|cutting|drinking|dropping|eating|enclos(?:es?|ing)|entering|examining|exiting|getting|giving|going|ha(?:s|ve|ving)|hold(?:ing|s)?|impl(?:ies|y)|incorporat(?:es?|ing)|inserting|is|jumping|kissing|listening|locking|looking|mean(?:ing|s)?|opening|provid(?:es?|ing)|pulling|pushing|putting|relat(?:es?|ing)|removing|searching|see(?:ing|s)?|setting|showing|singing|sleeping|smelling|squeezing|support(?:ing|s)?|swearing|switching|taking|tasting|telling|thinking|throwing|touching|turning|tying|unlock(?:ing|s)?|var(?:ies|y|ying)|waiting|waking|waving|wear(?:ing|s)?)\\b(?!-)/i,lookbehind:!0,alias:\"operator\"},keyword:{pattern:/(^|[^-])\\b(?:after|before|carry out|check|continue the action|definition(?= *:)|do nothing|else|end (?:if|the story|unless)|every turn|if|include|instead(?: of)?|let|move|no|now|otherwise|repeat|report|resume the story|rule for|running through|say(?:ing)?|stop the action|test|try(?:ing)?|understand|unless|use|when|while|yes)\\b(?!-)/i,lookbehind:!0},property:{pattern:/(^|[^-])\\b(?:adjacent(?! to)|carried|closed|concealed|contained|dark|described|edible|empty|enclosed|enterable|even|female|fixed in place|full|handled|held|improper-named|incorporated|inedible|invisible|lighted|lit|lock(?:able|ed)|male|marked for listing|mentioned|negative|neuter|non-(?:empty|full|recurring)|odd|opaque|open(?:able)?|plural-named|portable|positive|privately-named|proper-named|provided|publically-named|pushable between rooms|recurring|related|rubbing|scenery|seen|singular-named|supported|swinging|switch(?:able|ed(?: off| on)?)|touch(?:able|ed)|transparent|unconcealed|undescribed|unlit|unlocked|unmarked for listing|unmentioned|unopenable|untouchable|unvisited|variable|visible|visited|wearable|worn)\\b(?!-)/i,lookbehind:!0,alias:\"symbol\"},position:{pattern:/(^|[^-])\\b(?:above|adjacent to|back side of|below|between|down|east|everywhere|front side|here|in|inside(?: from)?|north(?:east|west)?|nowhere|on(?: top of)?|other side|outside(?: from)?|parts? of|regionally in|south(?:east|west)?|through|up|west|within)\\b(?!-)/i,lookbehind:!0,alias:\"keyword\"},type:{pattern:/(^|[^-])\\b(?:actions?|activit(?:ies|y)|actors?|animals?|backdrops?|containers?|devices?|directions?|doors?|holders?|kinds?|lists?|m[ae]n|nobody|nothing|nouns?|numbers?|objects?|people|persons?|player(?:'s holdall)?|regions?|relations?|rooms?|rule(?:book)?s?|scenes?|someone|something|supporters?|tables?|texts?|things?|time|vehicles?|wom[ae]n)\\b(?!-)/i,lookbehind:!0,alias:\"variable\"},punctuation:/[.,:;(){}]/},Prism.languages.inform7.string.inside.substitution.inside.rest=Prism.languages.inform7,Prism.languages.inform7.string.inside.substitution.inside.rest.text={pattern:/\\S(?:\\s*\\S)*/,alias:\"comment\"};/components/prism-keepalived.js\u0017\u0018Prism.languages.keepalived = {\n\t'comment': {\n\t\tpattern: /[#!].*/,\n\t\tgreedy: true\n\t},\n\t'string': {\n\t\tpattern: /(^|[^\\\\])(?:\"(?:\\\\(?:\\r\\n|[\\s\\S])|[^\"\\\\\\r\\n])*\"|'(?:\\\\(?:\\r\\n|[\\s\\S])|[^'\\\\\\r\\n])*')/,\n\t\tlookbehind: true,\n\t\tgreedy: true\n\t},\n\n\t// support IPv4, IPv6, subnet mask\n\t'ip': {\n\t\tpattern: RegExp(\n\t\t\t/\\b(?:(?:(?:[\\da-f]{1,4}:){7}[\\da-f]{1,4}|(?:[\\da-f]{1,4}:){6}:[\\da-f]{1,4}|(?:[\\da-f]{1,4}:){5}:(?:[\\da-f]{1,4}:)?[\\da-f]{1,4}|(?:[\\da-f]{1,4}:){4}:(?:[\\da-f]{1,4}:){0,2}[\\da-f]{1,4}|(?:[\\da-f]{1,4}:){3}:(?:[\\da-f]{1,4}:){0,3}[\\da-f]{1,4}|(?:[\\da-f]{1,4}:){2}:(?:[\\da-f]{1,4}:){0,4}[\\da-f]{1,4}|(?:[\\da-f]{1,4}:){6}<ipv4>|(?:[\\da-f]{1,4}:){0,5}:<ipv4>|::(?:[\\da-f]{1,4}:){0,5}<ipv4>|[\\da-f]{1,4}::(?:[\\da-f]{1,4}:){0,5}[\\da-f]{1,4}|::(?:[\\da-f]{1,4}:){0,6}[\\da-f]{1,4}|(?:[\\da-f]{1,4}:){1,7}:)(?:\\/\\d{1,3})?|<ipv4>(?:\\/\\d{1,2})?)\\b/.source\n\t\t\t\t.replace(/<ipv4>/g, function () { return /(?:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d))/.source; }),\n\t\t\t'i'\n\t\t),\n\t\talias: 'number'\n\t},\n\n\t// support *nix / Windows, directory / file\n\t'path': {\n\t\tpattern: /(\\s)\\/(?:[^\\/\\s]+\\/)*[^\\/\\s]*|\\b[a-zA-Z]:\\\\(?:[^\\\\\\s]+\\\\)*[^\\\\\\s]*/,\n\t\tlookbehind: true,\n\t\talias: 'string',\n\t},\n\t'variable': /\\$\\{?\\w+\\}?/,\n\t'email': {\n\t\tpattern: /[\\w-]+@[\\w-]+(?:\\.[\\w-]{2,3}){1,2}/,\n\t\talias: 'string',\n\t},\n\t'conditional-configuration': {\n\t\tpattern: /@\\^?[\\w-]+/,\n\t\talias: 'variable'\n\t},\n\t'operator': /=/,\n\n\t'property': /\\b(?:BFD_CHECK|DNS_CHECK|FILE_CHECK|HTTP_GET|MISC_CHECK|NAME|PING_CHECK|SCRIPTS|SMTP_CHECK|SSL|SSL_GET|TCP_CHECK|UDP_CHECK|accept|advert_int|alpha|auth_pass|auth_type|authentication|bfd_cpu_affinity|bfd_instance|bfd_no_swap|bfd_priority|bfd_process_name|bfd_rlimit_rttime|bfd_rt_priority|bind_if|bind_port|bindto|ca|certificate|check_unicast_src|checker|checker_cpu_affinity|checker_log_all_failures|checker_no_swap|checker_priority|checker_rlimit_rttime|checker_rt_priority|child_wait_time|connect_ip|connect_port|connect_timeout|dbus_service_name|debug|default_interface|delay|delay_before_retry|delay_loop|digest|dont_track_primary|dynamic|dynamic_interfaces|enable_(?:dbus|script_security|sni|snmp_checker|snmp_rfc|snmp_rfcv2|snmp_rfcv3|snmp_vrrp|traps)|end|fall|fast_recovery|file|flag-[123]|fork_delay|full_command|fwmark|garp_group|garp_interval|garp_lower_prio_delay|garp_lower_prio_repeat|garp_master_delay|garp_master_refresh|garp_master_refresh_repeat|garp_master_repeat|global_defs|global_tracking|gna_interval|group|ha_suspend|hashed|helo_name|higher_prio_send_advert|hoplimit|http_protocol|hysteresis|idle_tx|include|inhibit_on_failure|init_fail|init_file|instance|interface|interfaces|interval|ip_family|ipvs_process_name|keepalived.conf|kernel_rx_buf_size|key|linkbeat_interfaces|linkbeat_use_polling|log_all_failures|log_unknown_vrids|lower_prio_no_advert|lthreshold|lvs_flush|lvs_flush_onstop|lvs_method|lvs_netlink_cmd_rcv_bufs|lvs_netlink_cmd_rcv_bufs_force|lvs_netlink_monitor_rcv_bufs|lvs_netlink_monitor_rcv_bufs_force|lvs_notify_fifo|lvs_notify_fifo_script|lvs_sched|lvs_sync_daemon|max_auto_priority|max_hops|mcast_src_ip|mh-fallback|mh-port|min_auto_priority_delay|min_rx|min_tx|misc_dynamic|misc_path|misc_timeout|multiplier|name|namespace_with_ipsets|native_ipv6|neighbor_ip|net_namespace|net_namespace_ipvs|nftables|nftables_counters|nftables_ifindex|nftables_priority|no_accept|no_checker_emails|no_email_faults|nopreempt|notification_email|notification_email_from|notify|notify_backup|notify_deleted|notify_down|notify_fault|notify_fifo|notify_fifo_script|notify_master|notify_master_rx_lower_pri|notify_priority_changes|notify_stop|notify_up|old_unicast_checksum|omega|ops|param_match|passive|password|path|persistence_engine|persistence_granularity|persistence_timeout|preempt|preempt_delay|priority|process|process_monitor_rcv_bufs|process_monitor_rcv_bufs_force|process_name|process_names|promote_secondaries|protocol|proxy_arp|proxy_arp_pvlan|quorum|quorum_down|quorum_max|quorum_up|random_seed|real_server|regex|regex_max_offset|regex_min_offset|regex_no_match|regex_options|regex_stack|reload_repeat|reload_time_file|require_reply|retry|rise|router_id|rs_init_notifies|script|script_user|sh-fallback|sh-port|shutdown_script|shutdown_script_timeout|skip_check_adv_addr|smtp_alert|smtp_alert_checker|smtp_alert_vrrp|smtp_connect_timeout|smtp_helo_name|smtp_server|snmp_socket|sorry_server|sorry_server_inhibit|sorry_server_lvs_method|source_ip|start|startup_script|startup_script_timeout|state|static_ipaddress|static_routes|static_rules|status_code|step|strict_mode|sync_group_tracking_weight|terminate_delay|timeout|track_bfd|track_file|track_group|track_interface|track_process|track_script|track_src_ip|ttl|type|umask|unicast_peer|unicast_src_ip|unicast_ttl|url|use_ipvlan|use_pid_dir|use_vmac|user|uthreshold|val[123]|version|virtual_ipaddress|virtual_ipaddress_excluded|virtual_router_id|virtual_routes|virtual_rules|virtual_server|virtual_server_group|virtualhost|vmac_xmit_base|vrrp|vrrp_(?:check_unicast_src|cpu_affinity|garp_interval|garp_lower_prio_delay|garp_lower_prio_repeat|garp_master_delay|garp_master_refresh|garp_master_refresh_repeat|garp_master_repeat|gna_interval|higher_prio_send_advert|instance|ipsets|iptables|lower_prio_no_advert|mcast_group4|mcast_group6|min_garp|netlink_cmd_rcv_bufs|netlink_cmd_rcv_bufs_force|netlink_monitor_rcv_bufs|netlink_monitor_rcv_bufs_force|no_swap|notify_fifo|notify_fifo_script|notify_priority_changes|priority|process_name|rlimit_rttime|rt_priority|rx_bufs_multiplier|rx_bufs_policy|script|skip_check_adv_addr|startup_delay|strict|sync_group|track_process|version)|warmup|weight)\\b/,\n\n\t'constant': /\\b(?:A|AAAA|AH|BACKUP|CNAME|DR|MASTER|MX|NAT|NS|PASS|SCTP|SOA|TCP|TUN|TXT|UDP|dh|fo|lblc|lblcr|lc|mh|nq|ovf|rr|sed|sh|wlc|wrr)\\b/,\n\n\t'number': {\n\t\tpattern: /(^|[^\\w.-])-?\\d+(?:\\.\\d+)?/,\n\t\tlookbehind: true\n\t},\n\n\t'boolean': /\\b(?:false|no|off|on|true|yes)\\b/,\n\n\t'punctuation': /[\\{\\}]/\n};\n /components/prism-gherkin.min.js&\\!function(a){var n=\"(?:\\r?\\n|\\r)[ \\t]*\\\\|.+\\\\|(?:(?!\\\\|).)*\";a.languages.gherkin={pystring:{pattern:/(\"\"\"|''')[\\s\\S]+?\\1/,alias:\"string\"},comment:{pattern:/(^[ \\t]*)#.*/m,lookbehind:!0},tag:{pattern:/(^[ \\t]*)@\\S*/m,lookbehind:!0},feature:{pattern:/((?:^|\\r?\\n|\\r)[ \\t]*)(?:Ability|Ahoy matey!|Arwedd|Aspekt|Besigheid Behoefte|Business Need|Caracteristica|Característica|Egenskab|Egenskap|Eiginleiki|Feature|Fīča|Fitur|Fonctionnalité|Fonksyonalite|Funcionalidade|Funcionalitat|Functionalitate|Funcţionalitate|Funcționalitate|Functionaliteit|Fungsi|Funkcia|Funkcija|Funkcionalitāte|Funkcionalnost|Funkcja|Funksie|Funktionalität|Funktionalitéit|Funzionalità|Hwaet|Hwæt|Jellemző|Karakteristik|Lastnost|Mak|Mogucnost|laH|Mogućnost|Moznosti|Možnosti|OH HAI|Omadus|Ominaisuus|Osobina|Özellik|Potrzeba biznesowa|perbogh|poQbogh malja'|Požadavek|Požiadavka|Pretty much|Qap|Qu'meH 'ut|Savybė|Tính năng|Trajto|Vermoë|Vlastnosť|Właściwość|Značilnost|Δυνατότητα|Λειτουργία|Могућност|Мөмкинлек|Особина|Свойство|Үзенчәлеклелек|Функционал|Функционалност|Функция|Функціонал|תכונה|خاصية|خصوصیت|صلاحیت|کاروبار کی ضرورت|وِیژگی|रूप लेख|ਖਾਸੀਅਤ|ਨਕਸ਼ ਨੁਹਾਰ|ਮੁਹਾਂਦਰਾ|గుణము|ಹೆಚ್ಚಳ|ความต้องการทางธุรกิจ|ความสามารถ|โครงหลัก|기능|フィーチャ|功能|機能):(?:[^:\\r\\n]+(?:\\r?\\n|\\r|$))*/,lookbehind:!0,inside:{important:{pattern:/(:)[^\\r\\n]+/,lookbehind:!0},keyword:/[^:\\r\\n]+:/}},scenario:{pattern:/(^[ \\t]*)(?:Abstract Scenario|Abstrakt Scenario|Achtergrond|Aer|Ær|Agtergrond|All y'all|Antecedentes|Antecedents|Atburðarás|Atburðarásir|Awww, look mate|B4|Background|Baggrund|Bakgrund|Bakgrunn|Bakgrunnur|Beispiele|Beispiller|Bối cảnh|Cefndir|Cenario|Cenário|Cenario de Fundo|Cenário de Fundo|Cenarios|Cenários|Contesto|Context|Contexte|Contexto|Conto|Contoh|Contone|Dæmi|Dasar|Dead men tell no tales|Delineacao do Cenario|Delineação do Cenário|Dis is what went down|Dữ liệu|Dyagram Senaryo|Dyagram senaryo|Egzanp|Ejemplos|Eksempler|Ekzemploj|Enghreifftiau|Esbozo do escenario|Escenari|Escenario|Esempi|Esquema de l'escenari|Esquema del escenario|Esquema do Cenario|Esquema do Cenário|EXAMPLZ|Examples|Exempel|Exemple|Exemples|Exemplos|First off|Fono|Forgatókönyv|Forgatókönyv vázlat|Fundo|Geçmiş|Grundlage|Hannergrond|ghantoH|Háttér|Heave to|Istorik|Juhtumid|Keadaan|Khung kịch bản|Khung tình huống|Kịch bản|Koncept|Konsep skenario|Kontèks|Kontekst|Kontekstas|Konteksts|Kontext|Konturo de la scenaro|Latar Belakang|lut chovnatlh|lut|lutmey|Lýsing Atburðarásar|Lýsing Dæma|MISHUN SRSLY|MISHUN|Menggariskan Senario|mo'|Náčrt Scenára|Náčrt Scénáře|Náčrt Scenáru|Oris scenarija|Örnekler|Osnova|Osnova Scenára|Osnova scénáře|Osnutek|Ozadje|Paraugs|Pavyzdžiai|Példák|Piemēri|Plan du scénario|Plan du Scénario|Plan Senaryo|Plan senaryo|Plang vum Szenario|Pozadí|Pozadie|Pozadina|Príklady|Příklady|Primer|Primeri|Primjeri|Przykłady|Raamstsenaarium|Reckon it's like|Rerefons|Scenár|Scénář|Scenarie|Scenarij|Scenarijai|Scenarijaus šablonas|Scenariji|Scenārijs|Scenārijs pēc parauga|Scenarijus|Scenario|Scénario|Scenario Amlinellol|Scenario Outline|Scenario Template|Scenariomal|Scenariomall|Scenarios|Scenariu|Scenariusz|Scenaro|Schema dello scenario|Se ðe|Se the|Se þe|Senario|Senaryo Deskripsyon|Senaryo deskripsyon|Senaryo|Senaryo taslağı|Shiver me timbers|Situācija|Situai|Situasie Uiteensetting|Situasie|Skenario konsep|Skenario|Skica|Structura scenariu|Structură scenariu|Struktura scenarija|Stsenaarium|Swa hwaer swa|Swa|Swa hwær swa|Szablon scenariusza|Szenario|Szenariogrundriss|Tapaukset|Tapaus|Tapausaihio|Taust|Tausta|Template Keadaan|Template Senario|Template Situai|The thing of it is|Tình huống|Variantai|Voorbeelde|Voorbeelden|Wharrimean is|Yo-ho-ho|You'll wanna|Założenia|Παραδείγματα|Περιγραφή Σεναρίου|Σενάρια|Σενάριο|Υπόβαθρο|Кереш|Контекст|Концепт|Мисаллар|Мисоллар|Основа|Передумова|Позадина|Предистория|Предыстория|Приклади|Пример|Примери|Примеры|Рамка на сценарий|Скица|Структура сценарија|Структура сценария|Структура сценарію|Сценарий|Сценарий структураси|Сценарийның төзелеше|Сценарији|Сценарио|Сценарій|Тарих|Үрнәкләр|דוגמאות|רקע|תבנית תרחיש|תרחיש|الخلفية|الگوی سناریو|امثلة|پس منظر|زمینه|سناریو|سيناريو|سيناريو مخطط|مثالیں|منظر نامے کا خاکہ|منظرنامہ|نمونه ها|उदाहरण|परिदृश्य|परिदृश्य रूपरेखा|पृष्ठभूमि|ਉਦਾਹਰਨਾਂ|ਪਟਕਥਾ|ਪਟਕਥਾ ਢਾਂਚਾ|ਪਟਕਥਾ ਰੂਪ ਰੇਖਾ|ਪਿਛੋਕੜ|ఉదాహరణలు|కథనం|నేపథ్యం|సన్నివేశం|ಉದಾಹರಣೆಗಳು|ಕಥಾಸಾರಾಂಶ|ವಿವರಣೆ|ಹಿನ್ನೆಲೆ|โครงสร้างของเหตุการณ์|ชุดของตัวอย่าง|ชุดของเหตุการณ์|แนวคิด|สรุปเหตุการณ์|เหตุการณ์|배경|시나리오|시나리오 개요|예|サンプル|シナリオ|シナリオアウトライン|シナリオテンプレ|シナリオテンプレート|テンプレ|例|例子|剧本|剧本大纲|劇本|劇本大綱|场景|场景大纲|場景|場景大綱|背景):[^:\\r\\n]*/m,lookbehind:!0,inside:{important:{pattern:/(:)[^\\r\\n]*/,lookbehind:!0},keyword:/[^:\\r\\n]+:/}},\"table-body\":{pattern:RegExp(\"(\"+n+\")(?:\"+n+\")+\"),lookbehind:!0,inside:{outline:{pattern:/<[^>]+>/,alias:\"variable\"},td:{pattern:/\\s*[^\\s|][^|]*/,alias:\"string\"},punctuation:/\\|/}},\"table-head\":{pattern:RegExp(n),inside:{th:{pattern:/\\s*[^\\s|][^|]*/,alias:\"variable\"},punctuation:/\\|/}},atrule:{pattern:/(^[ \\t]+)(?:'a|'ach|'ej|7|a|A také|A taktiež|A tiež|A zároveň|Aber|Ac|Adott|Akkor|Ak|Aleshores|Ale|Ali|Allora|Alors|Als|Ama|Amennyiben|Amikor|Ampak|an|AN|Ananging|And y'all|And|Angenommen|Anrhegedig a|An|Apabila|Atès|Atesa|Atunci|Avast!|Aye|A|awer|Bagi|Banjur|Bet|Biết|Blimey!|Buh|But at the end of the day I reckon|But y'all|But|BUT|Cal|Când|Cand|Cando|Ce|Cuando|Če|Ða ðe|Ða|Dadas|Dada|Dados|Dado|DaH ghu' bejlu'|dann|Dann|Dano|Dan|Dar|Dat fiind|Data|Date fiind|Date|Dati fiind|Dati|Daţi fiind|Dați fiind|DEN|Dato|De|Den youse gotta|Dengan|Diberi|Diyelim ki|Donada|Donat|Donitaĵo|Do|Dun|Duota|Ðurh|Eeldades|Ef|Eğer ki|Entao|Então|Entón|E|En|Entonces|Epi|És|Etant donnée|Etant donné|Et|Étant données|Étant donnée|Étant donné|Etant données|Etant donnés|Étant donnés|Fakat|Gangway!|Gdy|Gegeben seien|Gegeben sei|Gegeven|Gegewe|ghu' noblu'|Gitt|Given y'all|Given|Givet|Givun|Ha|Cho|I CAN HAZ|In|Ir|It's just unbelievable|I|Ja|Jeśli|Jeżeli|Kad|Kada|Kadar|Kai|Kaj|Když|Keď|Kemudian|Ketika|Khi|Kiedy|Ko|Kuid|Kui|Kun|Lan|latlh|Le sa a|Let go and haul|Le|Lè sa a|Lè|Logo|Lorsqu'<|Lorsque|mä|Maar|Mais|Mając|Ma|Majd|Maka|Manawa|Mas|Men|Menawa|Mutta|Nalika|Nalikaning|Nanging|Når|När|Nato|Nhưng|Niin|Njuk|O zaman|Och|Og|Oletetaan|Ond|Onda|Oraz|Pak|Pero|Però|Podano|Pokiaľ|Pokud|Potem|Potom|Privzeto|Pryd|Quan|Quand|Quando|qaSDI'|Så|Sed|Se|Siis|Sipoze ke|Sipoze Ke|Sipoze|Si|Şi|Și|Soit|Stel|Tada|Tad|Takrat|Tak|Tapi|Ter|Tetapi|Tha the|Tha|Then y'all|Then|Thì|Thurh|Toda|Too right|Un|Und|ugeholl|Và|vaj|Vendar|Ve|wann|Wanneer|WEN|Wenn|When y'all|When|Wtedy|Wun|Y'know|Yeah nah|Yna|Youse know like when|Youse know when youse got|Y|Za predpokladu|Za předpokladu|Zadan|Zadani|Zadano|Zadate|Zadato|Zakładając|Zaradi|Zatati|Þa þe|Þa|Þá|Þegar|Þurh|Αλλά|Δεδομένου|Και|Όταν|Τότε|А також|Агар|Але|Али|Аммо|А|Әгәр|Әйтик|Әмма|Бирок|Ва|Вә|Дадено|Дано|Допустим|Если|Задате|Задати|Задато|И|І|К тому же|Када|Кад|Когато|Когда|Коли|Ләкин|Лекин|Нәтиҗәдә|Нехай|Но|Онда|Припустимо, що|Припустимо|Пусть|Также|Та|Тогда|Тоді|То|Унда|Һәм|Якщо|אבל|אזי|אז|בהינתן|וגם|כאשר|آنگاه|اذاً|اگر|اما|اور|با فرض|بالفرض|بفرض|پھر|تب|ثم|جب|عندما|فرض کیا|لكن|لیکن|متى|هنگامی|و|अगर|और|कदा|किन्तु|चूंकि|जब|तथा|तदा|तब|परन्तु|पर|यदि|ਅਤੇ|ਜਦੋਂ|ਜਿਵੇਂ ਕਿ|ਜੇਕਰ|ਤਦ|ਪਰ|అప్పుడు|ఈ పరిస్థితిలో|కాని|చెప్పబడినది|మరియు|ಆದರೆ|ನಂತರ|ನೀಡಿದ|ಮತ್ತು|ಸ್ಥಿತಿಯನ್ನು|กำหนดให้|ดังนั้น|แต่|เมื่อ|และ|그러면<|그리고<|단<|만약<|만일<|먼저<|조건<|하지만<|かつ<|しかし<|ただし<|ならば<|もし<|並且<|但し<|但是<|假如<|假定<|假設<|假设<|前提<|同时<|同時<|并且<|当<|當<|而且<|那么<|那麼<)(?=[ \\t])/m,lookbehind:!0},string:{pattern:/\"(?:\\\\.|[^\"\\\\\\r\\n])*\"|'(?:\\\\.|[^'\\\\\\r\\n])*'/,inside:{outline:{pattern:/<[^>]+>/,alias:\"variable\"}}},outline:{pattern:/<[^>]+>/,alias:\"variable\"}}}(Prism);/themes/prism-dark.css\b\u0016/**\n * prism.js Dark theme for JavaScript, CSS and HTML\n * Based on the slides of the talk “/Reg(exp){2}lained/”\n * @author Lea Verou\n */\n\ncode[class*=\"language-\"],\npre[class*=\"language-\"] {\n\tcolor: white;\n\tbackground: none;\n\ttext-shadow: 0 -.1em .2em black;\n\tfont-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;\n\tfont-size: 1em;\n\ttext-align: left;\n\twhite-space: pre;\n\tword-spacing: normal;\n\tword-break: normal;\n\tword-wrap: normal;\n\tline-height: 1.5;\n\n\t-moz-tab-size: 4;\n\t-o-tab-size: 4;\n\ttab-size: 4;\n\n\t-webkit-hyphens: none;\n\t-moz-hyphens: none;\n\t-ms-hyphens: none;\n\thyphens: none;\n}\n\n@media print {\n\tcode[class*=\"language-\"],\n\tpre[class*=\"language-\"] {\n\t\ttext-shadow: none;\n\t}\n}\n\npre[class*=\"language-\"],\n:not(pre) > code[class*=\"language-\"] {\n\tbackground: hsl(30, 20%, 25%);\n}\n\n/* Code blocks */\npre[class*=\"language-\"] {\n\tpadding: 1em;\n\tmargin: .5em 0;\n\toverflow: auto;\n\tborder: .3em solid hsl(30, 20%, 40%);\n\tborder-radius: .5em;\n\tbox-shadow: 1px 1px .5em black inset;\n}\n\n/* Inline code */\n:not(pre) > code[class*=\"language-\"] {\n\tpadding: .15em .2em .05em;\n\tborder-radius: .3em;\n\tborder: .13em solid hsl(30, 20%, 40%);\n\tbox-shadow: 1px 1px .3em -.1em black inset;\n\twhite-space: normal;\n}\n\n.token.comment,\n.token.prolog,\n.token.doctype,\n.token.cdata {\n\tcolor: hsl(30, 20%, 50%);\n}\n\n.token.punctuation {\n\topacity: .7;\n}\n\n.token.namespace {\n\topacity: .7;\n}\n\n.token.property,\n.token.tag,\n.token.boolean,\n.token.number,\n.token.constant,\n.token.symbol {\n\tcolor: hsl(350, 40%, 70%);\n}\n\n.token.selector,\n.token.attr-name,\n.token.string,\n.token.char,\n.token.builtin,\n.token.inserted {\n\tcolor: hsl(75, 70%, 60%);\n}\n\n.token.operator,\n.token.entity,\n.token.url,\n.language-css .token.string,\n.style .token.string,\n.token.variable {\n\tcolor: hsl(40, 90%, 60%);\n}\n\n.token.atrule,\n.token.attr-value,\n.token.keyword {\n\tcolor: hsl(350, 40%, 70%);\n}\n\n.token.regex,\n.token.important {\n\tcolor: #e90;\n}\n\n.token.important,\n.token.bold {\n\tfont-weight: bold;\n}\n.token.italic {\n\tfont-style: italic;\n}\n\n.token.entity {\n\tcursor: help;\n}\n\n.token.deleted {\n\tcolor: red;\n}\n/components/prism-pcaxis.min.js\u0003&Prism.languages.pcaxis={string:/\"[^\"]*\"/,keyword:{pattern:/((?:^|;)\\s*)[-A-Z\\d]+(?:\\s*\\[[-\\w]+\\])?(?:\\s*\\(\"[^\"]*\"(?:,\\s*\"[^\"]*\")*\\))?(?=\\s*=)/,lookbehind:!0,greedy:!0,inside:{keyword:/^[-A-Z\\d]+/,language:{pattern:/^(\\s*)\\[[-\\w]+\\]/,lookbehind:!0,inside:{punctuation:/^\\[|\\]$/,property:/[-\\w]+/}},\"sub-key\":{pattern:/^(\\s*)\\S[\\s\\S]*/,lookbehind:!0,inside:{parameter:{pattern:/\"[^\"]*\"/,alias:\"property\"},punctuation:/^\\(|\\)$|,/}}}},operator:/=/,tlist:{pattern:/TLIST\\s*\\(\\s*\\w+(?:(?:\\s*,\\s*\"[^\"]*\")+|\\s*,\\s*\"[^\"]*\"-\"[^\"]*\")?\\s*\\)/,greedy:!0,inside:{function:/^TLIST/,property:{pattern:/^(\\s*\\(\\s*)\\w+/,lookbehind:!0},string:/\"[^\"]*\"/,punctuation:/[(),]/,operator:/-/}},punctuation:/[;,]/,number:{pattern:/(^|\\s)\\d+(?:\\.\\d+)?(?!\\S)/,lookbehind:!0},boolean:/NO|YES/},Prism.languages.px=Prism.languages.pcaxis;4/plugins/unescaped-markup/prism-unescaped-markup.css\u0001g/* Fallback, in case JS does not run, to ensure the code is at least visible */\n[class*='lang-'] script[type='text/plain'],\n[class*='language-'] script[type='text/plain'],\nscript[type='text/plain'][class*='lang-'],\nscript[type='text/plain'][class*='language-'] {\n\tdisplay: block;\n\tfont: 100% Consolas, Monaco, monospace;\n\twhite-space: pre;\n\toverflow: auto;\n}\n#/components/prism-typoscript.min.js\u0005b!function(E){var n=/\\b(?:ACT|ACTIFSUB|CARRAY|CASE|CLEARGIF|COA|COA_INT|CONSTANTS|CONTENT|CUR|EDITPANEL|EFFECT|EXT|FILE|FLUIDTEMPLATE|FORM|FRAME|FRAMESET|GIFBUILDER|GMENU|GMENU_FOLDOUT|GMENU_LAYERS|GP|HMENU|HRULER|HTML|IENV|IFSUB|IMAGE|IMGMENU|IMGMENUITEM|IMGTEXT|IMG_RESOURCE|INCLUDE_TYPOSCRIPT|JSMENU|JSMENUITEM|LLL|LOAD_REGISTER|NO|PAGE|RECORDS|RESTORE_REGISTER|TEMPLATE|TEXT|TMENU|TMENUITEM|TMENU_LAYERS|USER|USER_INT|_GIFBUILDER|global|globalString|globalVar)\\b/;E.languages.typoscript={comment:[{pattern:/(^|[^\\\\])\\/\\*[\\s\\S]*?(?:\\*\\/|$)/,lookbehind:!0},{pattern:/(^|[^\\\\:= \\t]|(?:^|[^= \\t])[ \\t]+)\\/\\/.*/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\"'])#.*/,lookbehind:!0,greedy:!0}],function:[{pattern:/<INCLUDE_TYPOSCRIPT:\\s*source\\s*=\\s*(?:\"[^\"\\r\\n]*\"|'[^'\\r\\n]*')\\s*>/,inside:{string:{pattern:/\"[^\"\\r\\n]*\"|'[^'\\r\\n]*'/,inside:{keyword:n}},keyword:{pattern:/INCLUDE_TYPOSCRIPT/}}},{pattern:/@import\\s*(?:\"[^\"\\r\\n]*\"|'[^'\\r\\n]*')/,inside:{string:/\"[^\"\\r\\n]*\"|'[^'\\r\\n]*'/}}],string:{pattern:/^([^=]*=[< ]?)(?:(?!\\]\\n).)*/,lookbehind:!0,inside:{function:/\\{\\$.*\\}/,keyword:n,number:/^\\d+$/,punctuation:/[,|:]/}},keyword:n,number:{pattern:/\\b\\d+\\s*[.{=]/,inside:{operator:/[.{=]/}},tag:{pattern:/\\.?[-\\w\\\\]+\\.?/,inside:{punctuation:/\\./}},punctuation:/[{}[\\];(),.:|]/,operator:/[<>]=?|[!=]=?=?|--?|\\+\\+?|&&?|\\|\\|?|[?*/~^%]/},E.languages.tsconfig=E.languages.typoscript}(Prism);//plugins/file-highlight/prism-file-highlight.js\u0014(function () {\n\n\tif (typeof Prism === 'undefined' || typeof document === 'undefined') {\n\t\treturn;\n\t}\n\n\t// https://developer.mozilla.org/en-US/docs/Web/API/Element/matches#Polyfill\n\tif (!Element.prototype.matches) {\n\t\tElement.prototype.matches = Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector;\n\t}\n\n\tvar LOADING_MESSAGE = 'Loading…';\n\tvar FAILURE_MESSAGE = function (status, message) {\n\t\treturn '✖ Error ' + status + ' while fetching file: ' + message;\n\t};\n\tvar FAILURE_EMPTY_MESSAGE = '✖ Error: File does not exist or is empty';\n\n\tvar EXTENSIONS = {\n\t\t'js': 'javascript',\n\t\t'py': 'python',\n\t\t'rb': 'ruby',\n\t\t'ps1': 'powershell',\n\t\t'psm1': 'powershell',\n\t\t'sh': 'bash',\n\t\t'bat': 'batch',\n\t\t'h': 'c',\n\t\t'tex': 'latex'\n\t};\n\n\tvar STATUS_ATTR = 'data-src-status';\n\tvar STATUS_LOADING = 'loading';\n\tvar STATUS_LOADED = 'loaded';\n\tvar STATUS_FAILED = 'failed';\n\n\tvar SELECTOR = 'pre[data-src]:not([' + STATUS_ATTR + '=\"' + STATUS_LOADED + '\"])'\n\t\t+ ':not([' + STATUS_ATTR + '=\"' + STATUS_LOADING + '\"])';\n\n\t/**\n\t * Loads the given file.\n\t *\n\t * @param {string} src The URL or path of the source file to load.\n\t * @param {(result: string) => void} success\n\t * @param {(reason: string) => void} error\n\t */\n\tfunction loadFile(src, success, error) {\n\t\tvar xhr = new XMLHttpRequest();\n\t\txhr.open('GET', src, true);\n\t\txhr.onreadystatechange = function () {\n\t\t\tif (xhr.readyState == 4) {\n\t\t\t\tif (xhr.status < 400 && xhr.responseText) {\n\t\t\t\t\tsuccess(xhr.responseText);\n\t\t\t\t} else {\n\t\t\t\t\tif (xhr.status >= 400) {\n\t\t\t\t\t\terror(FAILURE_MESSAGE(xhr.status, xhr.statusText));\n\t\t\t\t\t} else {\n\t\t\t\t\t\terror(FAILURE_EMPTY_MESSAGE);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\txhr.send(null);\n\t}\n\n\t/**\n\t * Parses the given range.\n\t *\n\t * This returns a range with inclusive ends.\n\t *\n\t * @param {string | null | undefined} range\n\t * @returns {[number, number | undefined] | undefined}\n\t */\n\tfunction parseRange(range) {\n\t\tvar m = /^\\s*(\\d+)\\s*(?:(,)\\s*(?:(\\d+)\\s*)?)?$/.exec(range || '');\n\t\tif (m) {\n\t\t\tvar start = Number(m[1]);\n\t\t\tvar comma = m[2];\n\t\t\tvar end = m[3];\n\n\t\t\tif (!comma) {\n\t\t\t\treturn [start, start];\n\t\t\t}\n\t\t\tif (!end) {\n\t\t\t\treturn [start, undefined];\n\t\t\t}\n\t\t\treturn [start, Number(end)];\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tPrism.hooks.add('before-highlightall', function (env) {\n\t\tenv.selector += ', ' + SELECTOR;\n\t});\n\n\tPrism.hooks.add('before-sanity-check', function (env) {\n\t\tvar pre = /** @type {HTMLPreElement} */ (env.element);\n\t\tif (pre.matches(SELECTOR)) {\n\t\t\tenv.code = ''; // fast-path the whole thing and go to complete\n\n\t\t\tpre.setAttribute(STATUS_ATTR, STATUS_LOADING); // mark as loading\n\n\t\t\t// add code element with loading message\n\t\t\tvar code = pre.appendChild(document.createElement('CODE'));\n\t\t\tcode.textContent = LOADING_MESSAGE;\n\n\t\t\tvar src = pre.getAttribute('data-src');\n\n\t\t\tvar language = env.language;\n\t\t\tif (language === 'none') {\n\t\t\t\t// the language might be 'none' because there is no language set;\n\t\t\t\t// in this case, we want to use the extension as the language\n\t\t\t\tvar extension = (/\\.(\\w+)$/.exec(src) || [, 'none'])[1];\n\t\t\t\tlanguage = EXTENSIONS[extension] || extension;\n\t\t\t}\n\n\t\t\t// set language classes\n\t\t\tPrism.util.setLanguage(code, language);\n\t\t\tPrism.util.setLanguage(pre, language);\n\n\t\t\t// preload the language\n\t\t\tvar autoloader = Prism.plugins.autoloader;\n\t\t\tif (autoloader) {\n\t\t\t\tautoloader.loadLanguages(language);\n\t\t\t}\n\n\t\t\t// load file\n\t\t\tloadFile(\n\t\t\t\tsrc,\n\t\t\t\tfunction (text) {\n\t\t\t\t\t// mark as loaded\n\t\t\t\t\tpre.setAttribute(STATUS_ATTR, STATUS_LOADED);\n\n\t\t\t\t\t// handle data-range\n\t\t\t\t\tvar range = parseRange(pre.getAttribute('data-range'));\n\t\t\t\t\tif (range) {\n\t\t\t\t\t\tvar lines = text.split(/\\r\\n?|\\n/g);\n\n\t\t\t\t\t\t// the range is one-based and inclusive on both ends\n\t\t\t\t\t\tvar start = range[0];\n\t\t\t\t\t\tvar end = range[1] == null ? lines.length : range[1];\n\n\t\t\t\t\t\tif (start < 0) { start += lines.length; }\n\t\t\t\t\t\tstart = Math.max(0, Math.min(start - 1, lines.length));\n\t\t\t\t\t\tif (end < 0) { end += lines.length; }\n\t\t\t\t\t\tend = Math.max(0, Math.min(end, lines.length));\n\n\t\t\t\t\t\ttext = lines.slice(start, end).join('\\n');\n\n\t\t\t\t\t\t// add data-start for line numbers\n\t\t\t\t\t\tif (!pre.hasAttribute('data-start')) {\n\t\t\t\t\t\t\tpre.setAttribute('data-start', String(start + 1));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// highlight code\n\t\t\t\t\tcode.textContent = text;\n\t\t\t\t\tPrism.highlightElement(code);\n\t\t\t\t},\n\t\t\t\tfunction (error) {\n\t\t\t\t\t// mark as failed\n\t\t\t\t\tpre.setAttribute(STATUS_ATTR, STATUS_FAILED);\n\n\t\t\t\t\tcode.textContent = error;\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t});\n\n\tPrism.plugins.fileHighlight = {\n\t\t/**\n\t\t * Executes the File Highlight plugin for all matching `pre` elements under the given container.\n\t\t *\n\t\t * Note: Elements which are already loaded or currently loading will not be touched by this method.\n\t\t *\n\t\t * @param {ParentNode} [container=document]\n\t\t */\n\t\thighlight: function highlight(container) {\n\t\t\tvar elements = (container || document).querySelectorAll(SELECTOR);\n\n\t\t\tfor (var i = 0, element; (element = elements[i++]);) {\n\t\t\t\tPrism.highlightElement(element);\n\t\t\t}\n\t\t}\n\t};\n\n\tvar logged = false;\n\t/** @deprecated Use `Prism.plugins.fileHighlight.highlight` instead. */\n\tPrism.fileHighlight = function () {\n\t\tif (!logged) {\n\t\t\tconsole.warn('Prism.fileHighlight is deprecated. Use `Prism.plugins.fileHighlight.highlight` instead.');\n\t\t\tlogged = true;\n\t\t}\n\t\tPrism.plugins.fileHighlight.highlight.apply(this, arguments);\n\t};\n\n}());\n/components/prism-apex.js\n[(function (Prism) {\n\n\tvar keywords = /\\b(?:(?:after|before)(?=\\s+[a-z])|abstract|activate|and|any|array|as|asc|autonomous|begin|bigdecimal|blob|boolean|break|bulk|by|byte|case|cast|catch|char|class|collect|commit|const|continue|currency|date|datetime|decimal|default|delete|desc|do|double|else|end|enum|exception|exit|export|extends|final|finally|float|for|from|get(?=\\s*[{};])|global|goto|group|having|hint|if|implements|import|in|inner|insert|instanceof|int|integer|interface|into|join|like|limit|list|long|loop|map|merge|new|not|null|nulls|number|object|of|on|or|outer|override|package|parallel|pragma|private|protected|public|retrieve|return|rollback|select|set|short|sObject|sort|static|string|super|switch|synchronized|system|testmethod|then|this|throw|time|transaction|transient|trigger|try|undelete|update|upsert|using|virtual|void|webservice|when|where|while|(?:inherited|with|without)\\s+sharing)\\b/i;\n\n\tvar className = /\\b(?:(?=[a-z_]\\w*\\s*[<\\[])|(?!<keyword>))[A-Z_]\\w*(?:\\s*\\.\\s*[A-Z_]\\w*)*\\b(?:\\s*(?:\\[\\s*\\]|<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>))*/.source\n\t\t.replace(/<keyword>/g, function () { return keywords.source; });\n\t/** @param {string} pattern */\n\tfunction insertClassName(pattern) {\n\t\treturn RegExp(pattern.replace(/<CLASS-NAME>/g, function () { return className; }), 'i');\n\t}\n\n\tvar classNameInside = {\n\t\t'keyword': keywords,\n\t\t'punctuation': /[()\\[\\]{};,:.<>]/\n\t};\n\n\tPrism.languages.apex = {\n\t\t'comment': Prism.languages.clike.comment,\n\t\t'string': Prism.languages.clike.string,\n\t\t'sql': {\n\t\t\tpattern: /((?:[=,({:]|\\breturn)\\s*)\\[[^\\[\\]]*\\]/i,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\talias: 'language-sql',\n\t\t\tinside: Prism.languages.sql\n\t\t},\n\n\t\t'annotation': {\n\t\t\tpattern: /@\\w+\\b/,\n\t\t\talias: 'punctuation'\n\t\t},\n\t\t'class-name': [\n\t\t\t{\n\t\t\t\tpattern: insertClassName(/(\\b(?:class|enum|extends|implements|instanceof|interface|new|trigger\\s+\\w+\\s+on)\\s+)<CLASS-NAME>/.source),\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: classNameInside\n\t\t\t},\n\t\t\t{\n\t\t\t\t// cast\n\t\t\t\tpattern: insertClassName(/(\\(\\s*)<CLASS-NAME>(?=\\s*\\)\\s*[\\w(])/.source),\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: classNameInside\n\t\t\t},\n\t\t\t{\n\t\t\t\t// variable/parameter declaration and return types\n\t\t\t\tpattern: insertClassName(/<CLASS-NAME>(?=\\s*\\w+\\s*[;=,(){:])/.source),\n\t\t\t\tinside: classNameInside\n\t\t\t}\n\t\t],\n\t\t'trigger': {\n\t\t\tpattern: /(\\btrigger\\s+)\\w+\\b/i,\n\t\t\tlookbehind: true,\n\t\t\talias: 'class-name'\n\t\t},\n\t\t'keyword': keywords,\n\t\t'function': /\\b[a-z_]\\w*(?=\\s*\\()/i,\n\n\t\t'boolean': /\\b(?:false|true)\\b/i,\n\n\t\t'number': /(?:\\B\\.\\d+|\\b\\d+(?:\\.\\d+|L)?)\\b/i,\n\t\t'operator': /[!=](?:==?)?|\\?\\.?|&&|\\|\\||--|\\+\\+|[-+*/^&|]=?|:|<<?=?|>{1,3}=?/,\n\t\t'punctuation': /[()\\[\\]{};,.]/\n\t};\n\n}(Prism));\n/components/prism-wiki.min.js\u0004Prism.languages.wiki=Prism.languages.extend(\"markup\",{\"block-comment\":{pattern:/(^|[^\\\\])\\/\\*[\\s\\S]*?\\*\\//,lookbehind:!0,alias:\"comment\"},heading:{pattern:/^(=+)[^=\\r\\n].*?\\1/m,inside:{punctuation:/^=+|=+$/,important:/.+/}},emphasis:{pattern:/('{2,5}).+?\\1/,inside:{\"bold-italic\":{pattern:/(''''').+?(?=\\1)/,lookbehind:!0,alias:[\"bold\",\"italic\"]},bold:{pattern:/(''')[^'](?:.*?[^'])?(?=\\1)/,lookbehind:!0},italic:{pattern:/('')[^'](?:.*?[^'])?(?=\\1)/,lookbehind:!0},punctuation:/^''+|''+$/}},hr:{pattern:/^-{4,}/m,alias:\"punctuation\"},url:[/ISBN +(?:97[89][ -]?)?(?:\\d[ -]?){9}[\\dx]\\b|(?:PMID|RFC) +\\d+/i,/\\[\\[.+?\\]\\]|\\[.+?\\]/],variable:[/__[A-Z]+__/,/\\{{3}.+?\\}{3}/,/\\{\\{.+?\\}\\}/],symbol:[/^#redirect/im,/~{3,5}/],\"table-tag\":{pattern:/((?:^|[|!])[|!])[^|\\r\\n]+\\|(?!\\|)/m,lookbehind:!0,inside:{\"table-bar\":{pattern:/\\|$/,alias:\"punctuation\"},rest:Prism.languages.markup.tag.inside}},punctuation:/^(?:\\{\\||\\|\\}|\\|-|[*#:;!|])|\\|\\||!!/m}),Prism.languages.insertBefore(\"wiki\",\"tag\",{nowiki:{pattern:/<(nowiki|pre|source)\\b[^>]*>[\\s\\S]*?<\\/\\1>/i,inside:{tag:{pattern:/<(?:nowiki|pre|source)\\b[^>]*>|<\\/(?:nowiki|pre|source)>/i,inside:Prism.languages.markup.tag.inside}}}});/components/prism-sas.js((function (Prism) {\n\n\tvar stringPattern = /(?:\"(?:\"\"|[^\"])*\"(?!\")|'(?:''|[^'])*'(?!'))/.source;\n\n\tvar number = /\\b(?:\\d[\\da-f]*x|\\d+(?:\\.\\d+)?(?:e[+-]?\\d+)?)\\b/i;\n\tvar numericConstant = {\n\t\tpattern: RegExp(stringPattern + '[bx]'),\n\t\talias: 'number'\n\t};\n\n\tvar macroVariable = {\n\t\tpattern: /&[a-z_]\\w*/i\n\t};\n\n\tvar macroKeyword = {\n\t\tpattern: /((?:^|\\s|=|\\())%(?:ABORT|BY|CMS|COPY|DISPLAY|DO|ELSE|END|EVAL|GLOBAL|GO|GOTO|IF|INC|INCLUDE|INDEX|INPUT|KTRIM|LENGTH|LET|LIST|LOCAL|PUT|QKTRIM|QSCAN|QSUBSTR|QSYSFUNC|QUPCASE|RETURN|RUN|SCAN|SUBSTR|SUPERQ|SYMDEL|SYMEXIST|SYMGLOBL|SYMLOCAL|SYSCALL|SYSEVALF|SYSEXEC|SYSFUNC|SYSGET|SYSRPUT|THEN|TO|TSO|UNQUOTE|UNTIL|UPCASE|WHILE|WINDOW)\\b/i,\n\t\tlookbehind: true,\n\t\talias: 'keyword'\n\t};\n\n\tvar step = {\n\t\tpattern: /(^|\\s)(?:proc\\s+\\w+|data(?!=)|quit|run)\\b/i,\n\t\talias: 'keyword',\n\t\tlookbehind: true\n\t};\n\n\tvar comment = [\n\t\t/\\/\\*[\\s\\S]*?\\*\\//,\n\t\t{\n\t\t\tpattern: /(^[ \\t]*|;\\s*)\\*[^;]*;/m,\n\t\t\tlookbehind: true\n\t\t}\n\t];\n\n\tvar string = {\n\t\tpattern: RegExp(stringPattern),\n\t\tgreedy: true\n\t};\n\n\tvar punctuation = /[$%@.(){}\\[\\];,\\\\]/;\n\n\tvar func = {\n\t\tpattern: /%?\\b\\w+(?=\\()/,\n\t\talias: 'keyword'\n\t};\n\n\tvar args = {\n\t\t'function': func,\n\t\t'arg-value': {\n\t\t\tpattern: /(=\\s*)[A-Z\\.]+/i,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'operator': /=/,\n\t\t'macro-variable': macroVariable,\n\t\t'arg': {\n\t\t\tpattern: /[A-Z]+/i,\n\t\t\talias: 'keyword'\n\t\t},\n\t\t'number': number,\n\t\t'numeric-constant': numericConstant,\n\t\t'punctuation': punctuation,\n\t\t'string': string\n\t};\n\n\tvar format = {\n\t\tpattern: /\\b(?:format|put)\\b=?[\\w'$.]+/i,\n\t\tinside: {\n\t\t\t'keyword': /^(?:format|put)(?==)/i,\n\t\t\t'equals': /=/,\n\t\t\t'format': {\n\t\t\t\tpattern: /(?:\\w|\\$\\d)+\\.\\d?/,\n\t\t\t\talias: 'number'\n\t\t\t}\n\t\t}\n\t};\n\n\tvar altformat = {\n\t\tpattern: /\\b(?:format|put)\\s+[\\w']+(?:\\s+[$.\\w]+)+(?=;)/i,\n\t\tinside: {\n\t\t\t'keyword': /^(?:format|put)/i,\n\t\t\t'format': {\n\t\t\t\tpattern: /[\\w$]+\\.\\d?/,\n\t\t\t\talias: 'number'\n\t\t\t}\n\t\t}\n\t};\n\n\tvar globalStatements = {\n\t\tpattern: /((?:^|\\s)=?)(?:catname|checkpoint execute_always|dm|endsas|filename|footnote|%include|libname|%list|lock|missing|options|page|resetline|%run|sasfile|skip|sysecho|title\\d?)\\b/i,\n\t\tlookbehind: true,\n\t\talias: 'keyword'\n\t};\n\n\tvar submitStatement = {\n\t\tpattern: /(^|\\s)(?:submit(?:\\s+(?:load|norun|parseonly))?|endsubmit)\\b/i,\n\t\tlookbehind: true,\n\t\talias: 'keyword'\n\t};\n\n\tvar actionSets = /aStore|accessControl|aggregation|audio|autotune|bayesianNetClassifier|bioMedImage|boolRule|builtins|cardinality|cdm|clustering|conditionalRandomFields|configuration|copula|countreg|dataDiscovery|dataPreprocess|dataSciencePilot|dataStep|decisionTree|deduplication|deepLearn|deepNeural|deepRnn|ds2|ecm|entityRes|espCluster|explainModel|factmac|fastKnn|fcmpact|fedSql|freqTab|gVarCluster|gam|gleam|graphSemiSupLearn|hiddenMarkovModel|hyperGroup|ica|image|iml|kernalPca|langModel|ldaTopic|loadStreams|mbc|mixed|mlTools|modelPublishing|network|neuralNet|nmf|nonParametricBayes|nonlinear|optNetwork|optimization|panel|pca|percentile|phreg|pls|qkb|qlim|quantreg|recommend|regression|reinforcementLearn|robustPca|ruleMining|sampling|sandwich|sccasl|search(?:Analytics)?|sentimentAnalysis|sequence|session(?:Prop)?|severity|simSystem|simple|smartData|sparkEmbeddedProcess|sparseML|spatialreg|spc|stabilityMonitoring|svDataDescription|svm|table|text(?:Filters|Frequency|Mining|Parse|Rule(?:Develop|Score)|Topic|Util)|timeData|transpose|tsInfo|tsReconcile|uniTimeSeries|varReduce/.source;\n\n\tvar casActions = {\n\t\tpattern: RegExp(/(^|\\s)(?:action\\s+)?(?:<act>)\\.[a-z]+\\b[^;]+/.source.replace(/<act>/g, function () { return actionSets; }), 'i'),\n\t\tlookbehind: true,\n\t\tinside: {\n\t\t\t'keyword': RegExp(/(?:<act>)\\.[a-z]+\\b/.source.replace(/<act>/g, function () { return actionSets; }), 'i'),\n\t\t\t'action': {\n\t\t\t\tpattern: /(?:action)/i,\n\t\t\t\talias: 'keyword'\n\t\t\t},\n\t\t\t'comment': comment,\n\t\t\t'function': func,\n\t\t\t'arg-value': args['arg-value'],\n\t\t\t'operator': args.operator,\n\t\t\t'argument': args.arg,\n\t\t\t'number': number,\n\t\t\t'numeric-constant': numericConstant,\n\t\t\t'punctuation': punctuation,\n\t\t\t'string': string\n\t\t}\n\t};\n\n\tvar keywords = {\n\t\tpattern: /((?:^|\\s)=?)(?:after|analysis|and|array|barchart|barwidth|begingraph|by|call|cas|cbarline|cfill|class(?:lev)?|close|column|computed?|contains|continue|data(?==)|define|delete|describe|document|do\\s+over|do|dol|drop|dul|else|end(?:comp|source)?|entryTitle|eval(?:uate)?|exec(?:ute)?|exit|file(?:name)?|fill(?:attrs)?|flist|fnc|function(?:list)?|global|goto|group(?:by)?|headline|headskip|histogram|if|infile|keep|keylabel|keyword|label|layout|leave|legendlabel|length|libname|loadactionset|merge|midpoints|_?null_|name|noobs|nowd|ods|options|or|otherwise|out(?:put)?|over(?:lay)?|plot|print|put|raise|ranexp|rannor|rbreak|retain|return|select|session|sessref|set|source|statgraph|sum|summarize|table|temp|terminate|then\\s+do|then|title\\d?|to|var|when|where|xaxisopts|y2axisopts|yaxisopts)\\b/i,\n\t\tlookbehind: true,\n\t};\n\n\tPrism.languages.sas = {\n\t\t'datalines': {\n\t\t\tpattern: /^([ \\t]*)(?:cards|(?:data)?lines);[\\s\\S]+?^[ \\t]*;/im,\n\t\t\tlookbehind: true,\n\t\t\talias: 'string',\n\t\t\tinside: {\n\t\t\t\t'keyword': {\n\t\t\t\t\tpattern: /^(?:cards|(?:data)?lines)/i\n\t\t\t\t},\n\t\t\t\t'punctuation': /;/\n\t\t\t}\n\t\t},\n\n\t\t'proc-sql': {\n\t\t\tpattern: /(^proc\\s+(?:fed)?sql(?:\\s+[\\w|=]+)?;)[\\s\\S]+?(?=^(?:proc\\s+\\w+|data|quit|run);|(?![\\s\\S]))/im,\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'sql': {\n\t\t\t\t\tpattern: RegExp(/^[ \\t]*(?:select|alter\\s+table|(?:create|describe|drop)\\s+(?:index|table(?:\\s+constraints)?|view)|create\\s+unique\\s+index|insert\\s+into|update)(?:<str>|[^;\"'])+;/.source.replace(/<str>/g, function () { return stringPattern; }), 'im'),\n\t\t\t\t\talias: 'language-sql',\n\t\t\t\t\tinside: Prism.languages.sql\n\t\t\t\t},\n\t\t\t\t'global-statements': globalStatements,\n\t\t\t\t'sql-statements': {\n\t\t\t\t\tpattern: /(^|\\s)(?:disconnect\\s+from|begin|commit|exec(?:ute)?|reset|rollback|validate)\\b/i,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\talias: 'keyword'\n\t\t\t\t},\n\t\t\t\t'number': number,\n\t\t\t\t'numeric-constant': numericConstant,\n\t\t\t\t'punctuation': punctuation,\n\t\t\t\t'string': string\n\t\t\t}\n\t\t},\n\n\t\t'proc-groovy': {\n\t\t\tpattern: /(^proc\\s+groovy(?:\\s+[\\w|=]+)?;)[\\s\\S]+?(?=^(?:proc\\s+\\w+|data|quit|run);|(?![\\s\\S]))/im,\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'comment': comment,\n\t\t\t\t'groovy': {\n\t\t\t\t\tpattern: RegExp(/(^[ \\t]*submit(?:\\s+(?:load|norun|parseonly))?)(?:<str>|[^\"'])+?(?=endsubmit;)/.source.replace(/<str>/g, function () { return stringPattern; }), 'im'),\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\talias: 'language-groovy',\n\t\t\t\t\tinside: Prism.languages.groovy\n\t\t\t\t},\n\t\t\t\t'keyword': keywords,\n\t\t\t\t'submit-statement': submitStatement,\n\t\t\t\t'global-statements': globalStatements,\n\t\t\t\t'number': number,\n\t\t\t\t'numeric-constant': numericConstant,\n\t\t\t\t'punctuation': punctuation,\n\t\t\t\t'string': string\n\t\t\t}\n\t\t},\n\n\t\t'proc-lua': {\n\t\t\tpattern: /(^proc\\s+lua(?:\\s+[\\w|=]+)?;)[\\s\\S]+?(?=^(?:proc\\s+\\w+|data|quit|run);|(?![\\s\\S]))/im,\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'comment': comment,\n\t\t\t\t'lua': {\n\t\t\t\t\tpattern: RegExp(/(^[ \\t]*submit(?:\\s+(?:load|norun|parseonly))?)(?:<str>|[^\"'])+?(?=endsubmit;)/.source.replace(/<str>/g, function () { return stringPattern; }), 'im'),\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\talias: 'language-lua',\n\t\t\t\t\tinside: Prism.languages.lua\n\t\t\t\t},\n\t\t\t\t'keyword': keywords,\n\t\t\t\t'submit-statement': submitStatement,\n\t\t\t\t'global-statements': globalStatements,\n\t\t\t\t'number': number,\n\t\t\t\t'numeric-constant': numericConstant,\n\t\t\t\t'punctuation': punctuation,\n\t\t\t\t'string': string\n\t\t\t}\n\t\t},\n\n\t\t'proc-cas': {\n\t\t\tpattern: /(^proc\\s+cas(?:\\s+[\\w|=]+)?;)[\\s\\S]+?(?=^(?:proc\\s+\\w+|quit|data);|(?![\\s\\S]))/im,\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'comment': comment,\n\t\t\t\t'statement-var': {\n\t\t\t\t\tpattern: /((?:^|\\s)=?)saveresult\\s[^;]+/im,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tinside: {\n\n\t\t\t\t\t\t'statement': {\n\t\t\t\t\t\t\tpattern: /^saveresult\\s+\\S+/i,\n\t\t\t\t\t\t\tinside: {\n\t\t\t\t\t\t\t\tkeyword: /^(?:saveresult)/i\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\trest: args\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t'cas-actions': casActions,\n\t\t\t\t'statement': {\n\t\t\t\t\tpattern: /((?:^|\\s)=?)(?:default|(?:un)?set|on|output|upload)[^;]+/im,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tinside: args\n\t\t\t\t},\n\t\t\t\t'step': step,\n\t\t\t\t'keyword': keywords,\n\t\t\t\t'function': func,\n\t\t\t\t'format': format,\n\t\t\t\t'altformat': altformat,\n\t\t\t\t'global-statements': globalStatements,\n\t\t\t\t'number': number,\n\t\t\t\t'numeric-constant': numericConstant,\n\t\t\t\t'punctuation': punctuation,\n\t\t\t\t'string': string\n\t\t\t}\n\t\t},\n\n\t\t'proc-args': {\n\t\t\tpattern: RegExp(/(^proc\\s+\\w+\\s+)(?!\\s)(?:[^;\"']|<str>)+;/.source.replace(/<str>/g, function () { return stringPattern; }), 'im'),\n\t\t\tlookbehind: true,\n\t\t\tinside: args\n\t\t},\n\t\t/*Special keywords within macros*/\n\t\t'macro-keyword': macroKeyword,\n\t\t'macro-variable': macroVariable,\n\t\t'macro-string-functions': {\n\t\t\tpattern: /((?:^|\\s|=))%(?:BQUOTE|NRBQUOTE|NRQUOTE|NRSTR|QUOTE|STR)\\(.*?(?:[^%]\\))/i,\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'function': {\n\t\t\t\t\tpattern: /%(?:BQUOTE|NRBQUOTE|NRQUOTE|NRSTR|QUOTE|STR)/i,\n\t\t\t\t\talias: 'keyword'\n\t\t\t\t},\n\t\t\t\t'macro-keyword': macroKeyword,\n\t\t\t\t'macro-variable': macroVariable,\n\t\t\t\t'escaped-char': {\n\t\t\t\t\tpattern: /%['\"()<>=¬^~;,#]/,\n\t\t\t\t},\n\t\t\t\t'punctuation': punctuation\n\t\t\t}\n\t\t},\n\t\t'macro-declaration': {\n\t\t\tpattern: /^%macro[^;]+(?=;)/im,\n\t\t\tinside: {\n\t\t\t\t'keyword': /%macro/i,\n\t\t\t}\n\t\t},\n\t\t'macro-end': {\n\t\t\tpattern: /^%mend[^;]+(?=;)/im,\n\t\t\tinside: {\n\t\t\t\t'keyword': /%mend/i,\n\t\t\t}\n\t\t},\n\t\t/*%_zscore(headcir, _lhc, _mhc, _shc, headcz, headcpct, _Fheadcz); */\n\t\t'macro': {\n\t\t\tpattern: /%_\\w+(?=\\()/,\n\t\t\talias: 'keyword'\n\t\t},\n\t\t'input': {\n\t\t\tpattern: /\\binput\\s[-\\w\\s/*.$&]+;/i,\n\t\t\tinside: {\n\t\t\t\t'input': {\n\t\t\t\t\talias: 'keyword',\n\t\t\t\t\tpattern: /^input/i,\n\t\t\t\t},\n\t\t\t\t'comment': comment,\n\t\t\t\t'number': number,\n\t\t\t\t'numeric-constant': numericConstant\n\t\t\t}\n\t\t},\n\t\t'options-args': {\n\t\t\tpattern: /(^options)[-'\"|/\\\\<>*+=:()\\w\\s]*(?=;)/im,\n\t\t\tlookbehind: true,\n\t\t\tinside: args\n\t\t},\n\t\t'cas-actions': casActions,\n\t\t'comment': comment,\n\t\t'function': func,\n\t\t'format': format,\n\t\t'altformat': altformat,\n\t\t'numeric-constant': numericConstant,\n\t\t'datetime': {\n\t\t\t// '1jan2013'd, '9:25:19pm't, '18jan2003:9:27:05am'dt\n\t\t\tpattern: RegExp(stringPattern + '(?:dt?|t)'),\n\t\t\talias: 'number'\n\t\t},\n\t\t'string': string,\n\t\t'step': step,\n\t\t'keyword': keywords,\n\t\t// In SAS Studio syntax highlighting, these operators are styled like keywords\n\t\t'operator-keyword': {\n\t\t\tpattern: /\\b(?:eq|ge|gt|in|le|lt|ne|not)\\b/i,\n\t\t\talias: 'operator'\n\t\t},\n\t\t// Decimal (1.2e23), hexadecimal (0c1x)\n\t\t'number': number,\n\t\t'operator': /\\*\\*?|\\|\\|?|!!?|¦¦?|<[>=]?|>[<=]?|[-+\\/=&]|[~¬^]=?/,\n\t\t'punctuation': punctuation\n\t};\n\n}(Prism));\n/components/prism-pure.min.js\rf!function(e){e.languages.pure={comment:[{pattern:/(^|[^\\\\])\\/\\*[\\s\\S]*?\\*\\//,lookbehind:!0},{pattern:/(^|[^\\\\:])\\/\\/.*/,lookbehind:!0},/#!.+/],\"inline-lang\":{pattern:/%<[\\s\\S]+?%>/,greedy:!0,inside:{lang:{pattern:/(^%< *)-\\*-.+?-\\*-/,lookbehind:!0,alias:\"comment\"},delimiter:{pattern:/^%<.*|%>$/,alias:\"punctuation\"}}},string:{pattern:/\"(?:\\\\.|[^\"\\\\\\r\\n])*\"/,greedy:!0},number:{pattern:/((?:\\.\\.)?)(?:\\b(?:inf|nan)\\b|\\b0x[\\da-f]+|(?:\\b(?:0b)?\\d+(?:\\.\\d+)?|\\B\\.\\d+)(?:e[+-]?\\d+)?L?)/i,lookbehind:!0},keyword:/\\b(?:NULL|ans|break|bt|case|catch|cd|clear|const|def|del|dump|else|end|exit|extern|false|force|help|if|infix[lr]?|interface|let|ls|mem|namespace|nonfix|of|otherwise|outfix|override|postfix|prefix|private|public|pwd|quit|run|save|show|stats|then|throw|trace|true|type|underride|using|when|with)\\b/,function:/\\b(?:abs|add_(?:addr|constdef|(?:fundef|interface|macdef|typedef)(?:_at)?|vardef)|all|any|applp?|arity|bigintp?|blob(?:_crc|_size|p)?|boolp?|byte_c?string(?:_pointer)?|byte_(?:matrix|pointer)|calloc|cat|catmap|ceil|char[ps]?|check_ptrtag|chr|clear_sentry|clearsym|closurep?|cmatrixp?|cols?|colcat(?:map)?|colmap|colrev|colvector(?:p|seq)?|complex(?:_float_(?:matrix|pointer)|_matrix(?:_view)?|_pointer|p)?|conj|cookedp?|cst|cstring(?:_(?:dup|list|vector))?|curry3?|cyclen?|del_(?:constdef|fundef|interface|macdef|typedef|vardef)|delete|diag(?:mat)?|dim|dmatrixp?|do|double(?:_matrix(?:_view)?|_pointer|p)?|dowith3?|drop|dropwhile|eval(?:cmd)?|exactp|filter|fix|fixity|flip|float(?:_matrix|_pointer)|floor|fold[lr]1?|frac|free|funp?|functionp?|gcd|get(?:_(?:byte|constdef|double|float|fundef|int(?:64)?|interface(?:_typedef)?|long|macdef|pointer|ptrtag|sentry|short|string|typedef|vardef))?|globsym|hash|head|id|im|imatrixp?|index|inexactp|infp|init|insert|int(?:_matrix(?:_view)?|_pointer|p)?|int64_(?:matrix|pointer)|integerp?|iteraten?|iterwhile|join|keys?|lambdap?|last(?:err(?:pos)?)?|lcd|list[2p]?|listmap|make_ptrtag|malloc|map|matcat|matrixp?|max|member|min|nanp|nargs|nmatrixp?|null|numberp?|ord|pack(?:ed)?|pointer(?:_cast|_tag|_type|p)?|pow|pred|ptrtag|put(?:_(?:byte|double|float|int(?:64)?|long|pointer|short|string))?|rationalp?|re|realp?|realloc|recordp?|redim|reduce(?:_with)?|refp?|repeatn?|reverse|rlistp?|round|rows?|rowcat(?:map)?|rowmap|rowrev|rowvector(?:p|seq)?|same|scan[lr]1?|sentry|sgn|short_(?:matrix|pointer)|slice|smatrixp?|sort|split|str|strcat|stream|stride|string(?:_(?:dup|list|vector)|p)?|subdiag(?:mat)?|submat|subseq2?|substr|succ|supdiag(?:mat)?|symbolp?|tail|take|takewhile|thunkp?|transpose|trunc|tuplep?|typep|ubyte|uint(?:64)?|ulong|uncurry3?|unref|unzip3?|update|ushort|vals?|varp?|vector(?:p|seq)?|void|zip3?|zipwith3?)\\b/,special:{pattern:/\\b__[a-z]+__\\b/i,alias:\"builtin\"},operator:/(?:[!\"#$%&'*+,\\-.\\/:<=>?@\\\\^`|~\\u00a1-\\u00bf\\u00d7-\\u00f7\\u20d0-\\u2bff]|\\b_+\\b)+|\\b(?:and|div|mod|not|or)\\b/,punctuation:/[(){}\\[\\];,|]/},[\"c\",{lang:\"c++\",alias:\"cpp\"},\"fortran\"].forEach((function(t){var a=t;if(\"string\"!=typeof t&&(a=t.alias,t=t.lang),e.languages[a]){var r={};r[\"inline-lang-\"+a]={pattern:RegExp(\"%< *-\\\\*- *<lang>\\\\d* *-\\\\*-[^]+?%>\".replace(\"<lang>\",t.replace(/([.+*?\\/\\\\(){}\\[\\]])/g,\"\\\\$1\")),\"i\"),inside:e.util.clone(e.languages.pure[\"inline-lang\"].inside)},r[\"inline-lang-\"+a].inside.rest=e.util.clone(e.languages[a]),e.languages.insertBefore(\"pure\",\"inline-lang\",r)}})),e.languages.c&&(e.languages.pure[\"inline-lang\"].inside.rest=e.util.clone(e.languages.c))}(Prism);/components/prism-avisynth.js\u001c?// http://avisynth.nl/index.php/The_full_AviSynth_grammar\n(function (Prism) {\n\n\tfunction replace(pattern, replacements) {\n\t\treturn pattern.replace(/<<(\\d+)>>/g, function (m, index) {\n\t\t\treturn replacements[+index];\n\t\t});\n\t}\n\n\tfunction re(pattern, replacements, flags) {\n\t\treturn RegExp(replace(pattern, replacements), flags || '');\n\t}\n\n\tvar types = /bool|clip|float|int|string|val/.source;\n\tvar internals = [\n\t\t// bools\n\t\t/is(?:bool|clip|float|int|string)|defined|(?:(?:internal)?function|var)?exists?/.source,\n\t\t// control\n\t\t/apply|assert|default|eval|import|nop|select|undefined/.source,\n\t\t// global\n\t\t/opt_(?:allowfloataudio|avipadscanlines|dwchannelmask|enable_(?:b64a|planartopackedrgb|v210|y3_10_10|y3_10_16)|usewaveextensible|vdubplanarhack)|set(?:cachemode|maxcpu|memorymax|planarlegacyalignment|workingdir)/.source,\n\t\t// conv\n\t\t/hex(?:value)?|value/.source,\n\t\t// numeric\n\t\t/abs|ceil|continued(?:denominator|numerator)?|exp|floor|fmod|frac|log(?:10)?|max|min|muldiv|pi|pow|rand|round|sign|spline|sqrt/.source,\n\t\t// trig\n\t\t/a?sinh?|a?cosh?|a?tan[2h]?/.source,\n\t\t// bit\n\t\t/(?:bit(?:and|not|x?or|[lr]?shift[aslu]?|sh[lr]|sa[lr]|[lr]rotatel?|ro[rl]|te?st|set(?:count)?|cl(?:ea)?r|ch(?:an)?ge?))/.source,\n\t\t// runtime\n\t\t/average(?:[bgr]|chroma[uv]|luma)|(?:[rgb]|chroma[uv]|luma|rgb|[yuv](?=difference(?:fromprevious|tonext)))difference(?:fromprevious|tonext)?|[yuvrgb]plane(?:median|min|max|minmaxdifference)/.source,\n\t\t// script\n\t\t/getprocessinfo|logmsg|script(?:dir(?:utf8)?|file(?:utf8)?|name(?:utf8)?)|setlogparams/.source,\n\t\t// string\n\t\t/chr|(?:fill|find|left|mid|replace|rev|right)str|format|[lu]case|ord|str(?:cmpi?|fromutf8|len|toutf8)|time|trim(?:all|left|right)/.source,\n\t\t// version\n\t\t/isversionorgreater|version(?:number|string)/.source,\n\t\t// helper\n\t\t/buildpixeltype|colorspacenametopixeltype/.source,\n\t\t// avsplus\n\t\t/addautoloaddir|on(?:cpu|cuda)|prefetch|setfiltermtmode/.source\n\t].join('|');\n\tvar properties = [\n\t\t// content\n\t\t/has(?:audio|video)/.source,\n\t\t// resolution\n\t\t/height|width/.source,\n\t\t// framerate\n\t\t/frame(?:count|rate)|framerate(?:denominator|numerator)/.source,\n\t\t// interlacing\n\t\t/getparity|is(?:field|frame)based/.source,\n\t\t// color format\n\t\t/bitspercomponent|componentsize|hasalpha|is(?:planar(?:rgba?)?|interleaved|rgb(?:24|32|48|64)?|y(?:8|u(?:va?|y2))?|yv(?:12|16|24|411)|420|422|444|packedrgb)|numcomponents|pixeltype/.source,\n\t\t// audio\n\t\t/audio(?:bits|channels|duration|length(?:[fs]|hi|lo)?|rate)|isaudio(?:float|int)/.source\n\t].join('|');\n\tvar filters = [\n\t\t// source\n\t\t/avi(?:file)?source|directshowsource|image(?:reader|source|sourceanim)|opendmlsource|segmented(?:avisource|directshowsource)|wavsource/.source,\n\t\t// color\n\t\t/coloryuv|convertbacktoyuy2|convertto(?:RGB(?:24|32|48|64)|(?:planar)?RGBA?|Y8?|YV(?:12|16|24|411)|YUVA?(?:411|420|422|444)|YUY2)|fixluminance|gr[ae]yscale|invert|levels|limiter|mergea?rgb|merge(?:chroma|luma)|rgbadjust|show(?:alpha|blue|green|red)|swapuv|tweak|[uv]toy8?|ytouv/.source,\n\t\t// overlay\n\t\t/(?:colorkey|reset)mask|layer|mask(?:hs)?|merge|overlay|subtract/.source,\n\t\t// geometry\n\t\t/addborders|(?:bicubic|bilinear|blackman|gauss|lanczos4|lanczos|point|sinc|spline(?:16|36|64))resize|crop(?:bottom)?|flip(?:horizontal|vertical)|(?:horizontal|vertical)?reduceby2|letterbox|skewrows|turn(?:180|left|right)/.source,\n\t\t// pixel\n\t\t/blur|fixbrokenchromaupsampling|generalconvolution|(?:spatial|temporal)soften|sharpen/.source,\n\t\t// timeline\n\t\t/trim|(?:un)?alignedsplice|(?:assume|assumescaled|change|convert)FPS|(?:delete|duplicate)frame|dissolve|fade(?:in|io|out)[02]?|freezeframe|interleave|loop|reverse|select(?:even|odd|(?:range)?every)/.source,\n\t\t// interlace\n\t\t/assume[bt]ff|assume(?:field|frame)based|bob|complementparity|doubleweave|peculiarblend|pulldown|separate(?:columns|fields|rows)|swapfields|weave(?:columns|rows)?/.source,\n\t\t// audio\n\t\t/amplify(?:db)?|assumesamplerate|audiodub(?:ex)?|audiotrim|convertaudioto(?:(?:8|16|24|32)bit|float)|converttomono|delayaudio|ensurevbrmp3sync|get(?:left|right)?channel|kill(?:audio|video)|mergechannels|mixaudio|monotostereo|normalize|resampleaudio|ssrc|supereq|timestretch/.source,\n\t\t// conditional\n\t\t/animate|applyrange|conditional(?:filter|reader|select)|frameevaluate|scriptclip|tcp(?:server|source)|writefile(?:end|if|start)?/.source,\n\t\t// export\n\t\t/imagewriter/.source,\n\t\t// debug\n\t\t/blackness|blankclip|colorbars(?:hd)?|compare|dumpfiltergraph|echo|histogram|info|messageclip|preroll|setgraphanalysis|show(?:framenumber|smpte|time)|showfiveversions|stack(?:horizontal|vertical)|subtitle|tone|version/.source\n\t].join('|');\n\tvar allinternals = [internals, properties, filters].join('|');\n\n\tPrism.languages.avisynth = {\n\t\t'comment': [\n\t\t\t{\n\t\t\t\t// Matches [* *] nestable block comments, but only supports 1 level of nested comments\n\t\t\t\t// /\\[\\*(?:[^\\[*]|\\[(?!\\*)|\\*(?!\\])|<self>)*\\*\\]/\n\t\t\t\tpattern: /(^|[^\\\\])\\[\\*(?:[^\\[*]|\\[(?!\\*)|\\*(?!\\])|\\[\\*(?:[^\\[*]|\\[(?!\\*)|\\*(?!\\]))*\\*\\])*\\*\\]/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true\n\t\t\t},\n\t\t\t{\n\t\t\t\t// Matches /* */ block comments\n\t\t\t\tpattern: /(^|[^\\\\])\\/\\*[\\s\\S]*?(?:\\*\\/|$)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true\n\t\t\t},\n\t\t\t{\n\t\t\t\t// Matches # comments\n\t\t\t\tpattern: /(^|[^\\\\$])#.*/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true\n\t\t\t}\n\t\t],\n\n\t\t// Handle before strings because optional arguments are surrounded by double quotes\n\t\t'argument': {\n\t\t\tpattern: re(/\\b(?:<<0>>)\\s+(\"?)\\w+\\1/.source, [types], 'i'),\n\t\t\tinside: {\n\t\t\t\t'keyword': /^\\w+/\n\t\t\t}\n\t\t},\n\n\t\t// Optional argument assignment\n\t\t'argument-label': {\n\t\t\tpattern: /([,(][\\s\\\\]*)\\w+\\s*=(?!=)/,\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'argument-name': {\n\t\t\t\t\tpattern: /^\\w+/,\n\t\t\t\t\talias: 'punctuation'\n\t\t\t\t},\n\t\t\t\t'punctuation': /=$/\n\t\t\t}\n\t\t},\n\n\t\t'string': [\n\t\t\t{\n\t\t\t\t// triple double-quoted\n\t\t\t\tpattern: /\"\"\"[\\s\\S]*?\"\"\"/,\n\t\t\t\tgreedy: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\t// single double-quoted\n\t\t\t\tpattern: /\"(?:\\\\(?:\\r\\n|[\\s\\S])|[^\"\\\\\\r\\n])*\"/,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'constant': {\n\t\t\t\t\t\t// These *are* case-sensitive!\n\t\t\t\t\t\tpattern: /\\b(?:DEFAULT_MT_MODE|(?:MAINSCRIPT|PROGRAM|SCRIPT)DIR|(?:MACHINE|USER)_(?:CLASSIC|PLUS)_PLUGINS)\\b/\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t],\n\n\t\t// The special \"last\" variable that takes the value of the last implicitly returned clip\n\t\t'variable': /\\b(?:last)\\b/i,\n\n\t\t'boolean': /\\b(?:false|no|true|yes)\\b/i,\n\n\t\t'keyword': /\\b(?:catch|else|for|function|global|if|return|try|while|__END__)\\b/i,\n\n\t\t'constant': /\\bMT_(?:MULTI_INSTANCE|NICE_FILTER|SERIALIZED|SPECIAL_MT)\\b/,\n\n\t\t// AviSynth's internal functions, filters, and properties\n\t\t'builtin-function': {\n\t\t\tpattern: re(/\\b(?:<<0>>)\\b/.source, [allinternals], 'i'),\n\t\t\talias: 'function'\n\t\t},\n\n\t\t'type-cast': {\n\t\t\tpattern: re(/\\b(?:<<0>>)(?=\\s*\\()/.source, [types], 'i'),\n\t\t\talias: 'keyword'\n\t\t},\n\n\t\t// External/user-defined filters\n\t\t'function': {\n\t\t\tpattern: /\\b[a-z_]\\w*(?=\\s*\\()|(\\.)[a-z_]\\w*\\b/i,\n\t\t\tlookbehind: true\n\t\t},\n\n\t\t// Matches a \\ as the first or last character on a line\n\t\t'line-continuation': {\n\t\t\tpattern: /(^[ \\t]*)\\\\|\\\\(?=[ \\t]*$)/m,\n\t\t\tlookbehind: true,\n\t\t\talias: 'punctuation'\n\t\t},\n\n\t\t'number': /\\B\\$(?:[\\da-f]{6}|[\\da-f]{8})\\b|(?:(?:\\b|\\B-)\\d+(?:\\.\\d*)?\\b|\\B\\.\\d+\\b)/i,\n\n\t\t'operator': /\\+\\+?|[!=<>]=?|&&|\\|\\||[?:*/%-]/,\n\n\t\t'punctuation': /[{}\\[\\]();,.]/\n\t};\n\n\tPrism.languages.avs = Prism.languages.avisynth;\n\n}(Prism));\n/components/prism-rego.min.js\u0002GPrism.languages.rego={comment:/#.*/,property:{pattern:/(^|[^\\\\.])(?:\"(?:\\\\.|[^\\\\\"\\r\\n])*\"|`[^`]*`|\\b[a-z_]\\w*\\b)(?=\\s*:(?!=))/i,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\\\])\"(?:\\\\.|[^\\\\\"\\r\\n])*\"|`[^`]*`/,lookbehind:!0,greedy:!0},keyword:/\\b(?:as|default|else|import|not|null|package|set(?=\\s*\\()|some|with)\\b/,boolean:/\\b(?:false|true)\\b/,function:{pattern:/\\b[a-z_]\\w*\\b(?:\\s*\\.\\s*\\b[a-z_]\\w*\\b)*(?=\\s*\\()/i,inside:{namespace:/\\b\\w+\\b(?=\\s*\\.)/,punctuation:/\\./}},number:/-?\\b\\d+(?:\\.\\d+)?(?:e[+-]?\\d+)?\\b/i,operator:/[-+*/%|&]|[<>:=]=?|!=|\\b_\\b/,punctuation:/[,;.\\[\\]{}()]/};/themes/prism.min.css\u0006code[class*=language-],pre[class*=language-]{color:#000;background:0 0;text-shadow:0 1px #fff;font-family:Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}code[class*=language-] ::-moz-selection,code[class*=language-]::-moz-selection,pre[class*=language-] ::-moz-selection,pre[class*=language-]::-moz-selection{text-shadow:none;background:#b3d4fc}code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection,pre[class*=language-]::selection{text-shadow:none;background:#b3d4fc}@media print{code[class*=language-],pre[class*=language-]{text-shadow:none}}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#f5f2f0}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#708090}.token.punctuation{color:#999}.token.namespace{opacity:.7}.token.boolean,.token.constant,.token.deleted,.token.number,.token.property,.token.symbol,.token.tag{color:#905}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color:#690}.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url{color:#9a6e3a;background:hsla(0,0%,100%,.5)}.token.atrule,.token.attr-value,.token.keyword{color:#07a}.token.class-name,.token.function{color:#dd4a68}.token.important,.token.regex,.token.variable{color:#e90}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}/components/prism-maxscript.js\b(function (Prism) {\n\n\tvar keywords = /\\b(?:about|and|animate|as|at|attributes|by|case|catch|collect|continue|coordsys|do|else|exit|fn|for|from|function|global|if|in|local|macroscript|mapped|max|not|of|off|on|or|parameters|persistent|plugin|rcmenu|return|rollout|set|struct|then|throw|to|tool|try|undo|utility|when|where|while|with)\\b/i;\n\n\n\tPrism.languages.maxscript = {\n\t\t'comment': {\n\t\t\tpattern: /\\/\\*[\\s\\S]*?(?:\\*\\/|$)|--.*/,\n\t\t\tgreedy: true\n\t\t},\n\t\t'string': {\n\t\t\tpattern: /(^|[^\"\\\\@])(?:\"(?:[^\"\\\\]|\\\\[\\s\\S])*\"|@\"[^\"]*\")/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true\n\t\t},\n\t\t'path': {\n\t\t\tpattern: /\\$(?:[\\w/\\\\.*?]|'[^']*')*/,\n\t\t\tgreedy: true,\n\t\t\talias: 'string'\n\t\t},\n\n\t\t'function-call': {\n\t\t\tpattern: RegExp(\n\t\t\t\t'((?:' + (\n\t\t\t\t\t// start of line\n\t\t\t\t\t/^/.source +\n\t\t\t\t\t'|' +\n\t\t\t\t\t// operators and other language constructs\n\t\t\t\t\t/[;=<>+\\-*/^({\\[]/.source +\n\t\t\t\t\t'|' +\n\t\t\t\t\t// keywords as part of statements\n\t\t\t\t\t/\\b(?:and|by|case|catch|collect|do|else|if|in|not|or|return|then|to|try|where|while|with)\\b/.source\n\t\t\t\t) + ')[ \\t]*)' +\n\n\t\t\t\t'(?!' + keywords.source + ')' + /[a-z_]\\w*\\b/.source +\n\n\t\t\t\t'(?=[ \\t]*(?:' + (\n\t\t\t\t\t// variable\n\t\t\t\t\t'(?!' + keywords.source + ')' + /[a-z_]/.source +\n\t\t\t\t\t'|' +\n\t\t\t\t\t// number\n\t\t\t\t\t/\\d|-\\.?\\d/.source +\n\t\t\t\t\t'|' +\n\t\t\t\t\t// other expressions or literals\n\t\t\t\t\t/[({'\"$@#?]/.source\n\t\t\t\t) + '))',\n\t\t\t\t'im'\n\t\t\t),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\talias: 'function'\n\t\t},\n\n\t\t'function-definition': {\n\t\t\tpattern: /(\\b(?:fn|function)\\s+)\\w+\\b/i,\n\t\t\tlookbehind: true,\n\t\t\talias: 'function'\n\t\t},\n\n\t\t'argument': {\n\t\t\tpattern: /\\b[a-z_]\\w*(?=:)/i,\n\t\t\talias: 'attr-name'\n\t\t},\n\n\t\t'keyword': keywords,\n\t\t'boolean': /\\b(?:false|true)\\b/,\n\n\t\t'time': {\n\t\t\tpattern: /(^|[^\\w.])(?:(?:(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:[eEdD][+-]\\d+|[LP])?[msft])+|\\d+:\\d+(?:\\.\\d*)?)(?![\\w.:])/,\n\t\t\tlookbehind: true,\n\t\t\talias: 'number'\n\t\t},\n\t\t'number': [\n\t\t\t{\n\t\t\t\tpattern: /(^|[^\\w.])(?:(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:[eEdD][+-]\\d+|[LP])?|0x[a-fA-F0-9]+)(?![\\w.:])/,\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\t/\\b(?:e|pi)\\b/\n\t\t],\n\n\t\t'constant': /\\b(?:dontcollect|ok|silentValue|undefined|unsupplied)\\b/,\n\t\t'color': {\n\t\t\tpattern: /\\b(?:black|blue|brown|gray|green|orange|red|white|yellow)\\b/i,\n\t\t\talias: 'constant'\n\t\t},\n\n\t\t'operator': /[-+*/<>=!]=?|[&^?]|#(?!\\()/,\n\t\t'punctuation': /[()\\[\\]{}.:,;]|#(?=\\()|\\\\$/m\n\t};\n\n}(Prism));\n/components/prism-mata.js\u0005// https://www.stata.com/manuals/m.pdf\n\n(function (Prism) {\n\n\tvar orgType = /\\b(?:(?:col|row)?vector|matrix|scalar)\\b/.source;\n\tvar type = /\\bvoid\\b|<org>|\\b(?:complex|numeric|pointer(?:\\s*\\([^()]*\\))?|real|string|(?:class|struct)\\s+\\w+|transmorphic)(?:\\s*<org>)?/.source\n\t\t.replace(/<org>/g, orgType);\n\n\tPrism.languages.mata = {\n\t\t'comment': {\n\t\t\tpattern: /\\/\\/.*|\\/\\*(?:[^*/]|\\*(?!\\/)|\\/(?!\\*)|\\/\\*(?:[^*]|\\*(?!\\/))*\\*\\/)*\\*\\//,\n\t\t\tgreedy: true\n\t\t},\n\t\t'string': {\n\t\t\tpattern: /\"[^\"\\r\\n]*\"|[‘`']\".*?\"[’`']/,\n\t\t\tgreedy: true\n\t\t},\n\n\t\t'class-name': {\n\t\t\tpattern: /(\\b(?:class|extends|struct)\\s+)\\w+(?=\\s*(?:\\{|\\bextends\\b))/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'type': {\n\t\t\tpattern: RegExp(type),\n\t\t\talias: 'class-name',\n\t\t\tinside: {\n\t\t\t\t'punctuation': /[()]/,\n\t\t\t\t'keyword': /\\b(?:class|function|struct|void)\\b/\n\t\t\t}\n\t\t},\n\t\t'keyword': /\\b(?:break|class|continue|do|else|end|extends|external|final|for|function|goto|if|pragma|private|protected|public|return|static|struct|unset|unused|version|virtual|while)\\b/,\n\t\t'constant': /\\bNULL\\b/,\n\n\t\t'number': {\n\t\t\tpattern: /(^|[^\\w.])(?:\\d+(?:\\.\\d+)?(?:e[+-]?\\d+)?|\\d[a-f0-9]*(?:\\.[a-f0-9]+)?x[+-]?\\d+)i?(?![\\w.])/i,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'missing': {\n\t\t\tpattern: /(^|[^\\w.])(?:\\.[a-z]?)(?![\\w.])/,\n\t\t\tlookbehind: true,\n\t\t\talias: 'symbol'\n\t\t},\n\n\t\t'function': /\\b[a-z_]\\w*(?=\\s*\\()/i,\n\n\t\t'operator': /\\.\\.|\\+\\+|--|&&|\\|\\||:?(?:[!=<>]=|[+\\-*/^<>&|:])|[!?=\\\\#’`']/,\n\t\t'punctuation': /[()[\\]{},;.]/\n\t};\n\n}(Prism));\n/components/prism-agda.js\u0003\\(function (Prism) {\n\n\tPrism.languages.agda = {\n\t\t'comment': /\\{-[\\s\\S]*?(?:-\\}|$)|--.*/,\n\t\t'string': {\n\t\t\tpattern: /\"(?:\\\\(?:\\r\\n|[\\s\\S])|[^\\\\\\r\\n\"])*\"/,\n\t\t\tgreedy: true,\n\t\t},\n\t\t'punctuation': /[(){}⦃⦄.;@]/,\n\t\t'class-name': {\n\t\t\tpattern: /((?:data|record) +)\\S+/,\n\t\t\tlookbehind: true,\n\t\t},\n\t\t'function': {\n\t\t\tpattern: /(^[ \\t]*)(?!\\s)[^:\\r\\n]+(?=:)/m,\n\t\t\tlookbehind: true,\n\t\t},\n\t\t'operator': {\n\t\t\tpattern: /(^\\s*|\\s)(?:[=|:∀→λ\\\\?_]|->)(?=\\s)/,\n\t\t\tlookbehind: true,\n\t\t},\n\t\t'keyword': /\\b(?:Set|abstract|constructor|data|eta-equality|field|forall|hiding|import|in|inductive|infix|infixl|infixr|instance|let|macro|module|mutual|no-eta-equality|open|overlap|pattern|postulate|primitive|private|public|quote|quoteContext|quoteGoal|quoteTerm|record|renaming|rewrite|syntax|tactic|unquote|unquoteDecl|unquoteDef|using|variable|where|with)\\b/,\n\t};\n}(Prism));\n/components.jsf[var components = {\"core\":{\"meta\":{\"path\":\"components/prism-core.js\",\"option\":\"mandatory\"},\"core\":\"Core\"},\"themes\":{\"meta\":{\"path\":\"themes/{id}.css\",\"link\":\"index.html?theme={id}\",\"exclusive\":true},\"prism\":{\"title\":\"Default\",\"option\":\"default\"},\"prism-dark\":\"Dark\",\"prism-funky\":\"Funky\",\"prism-okaidia\":{\"title\":\"Okaidia\",\"owner\":\"ocodia\"},\"prism-twilight\":{\"title\":\"Twilight\",\"owner\":\"remybach\"},\"prism-coy\":{\"title\":\"Coy\",\"owner\":\"tshedor\"},\"prism-solarizedlight\":{\"title\":\"Solarized Light\",\"owner\":\"hectormatos2011 \"},\"prism-tomorrow\":{\"title\":\"Tomorrow Night\",\"owner\":\"Rosey\"}},\"languages\":{\"meta\":{\"path\":\"components/prism-{id}\",\"noCSS\":true,\"examplesPath\":\"examples/prism-{id}\",\"addCheckAll\":true},\"markup\":{\"title\":\"Markup\",\"alias\":[\"html\",\"xml\",\"svg\",\"mathml\",\"ssml\",\"atom\",\"rss\"],\"aliasTitles\":{\"html\":\"HTML\",\"xml\":\"XML\",\"svg\":\"SVG\",\"mathml\":\"MathML\",\"ssml\":\"SSML\",\"atom\":\"Atom\",\"rss\":\"RSS\"},\"option\":\"default\"},\"css\":{\"title\":\"CSS\",\"option\":\"default\",\"modify\":\"markup\"},\"clike\":{\"title\":\"C-like\",\"option\":\"default\"},\"javascript\":{\"title\":\"JavaScript\",\"require\":\"clike\",\"modify\":\"markup\",\"optional\":\"regex\",\"alias\":\"js\",\"option\":\"default\"},\"abap\":{\"title\":\"ABAP\",\"owner\":\"dellagustin\"},\"abnf\":{\"title\":\"ABNF\",\"owner\":\"RunDevelopment\"},\"actionscript\":{\"title\":\"ActionScript\",\"require\":\"javascript\",\"modify\":\"markup\",\"owner\":\"Golmote\"},\"ada\":{\"title\":\"Ada\",\"owner\":\"Lucretia\"},\"agda\":{\"title\":\"Agda\",\"owner\":\"xy-ren\"},\"al\":{\"title\":\"AL\",\"owner\":\"RunDevelopment\"},\"antlr4\":{\"title\":\"ANTLR4\",\"alias\":\"g4\",\"owner\":\"RunDevelopment\"},\"apacheconf\":{\"title\":\"Apache Configuration\",\"owner\":\"GuiTeK\"},\"apex\":{\"title\":\"Apex\",\"require\":[\"clike\",\"sql\"],\"owner\":\"RunDevelopment\"},\"apl\":{\"title\":\"APL\",\"owner\":\"ngn\"},\"applescript\":{\"title\":\"AppleScript\",\"owner\":\"Golmote\"},\"aql\":{\"title\":\"AQL\",\"owner\":\"RunDevelopment\"},\"arduino\":{\"title\":\"Arduino\",\"require\":\"cpp\",\"alias\":\"ino\",\"owner\":\"dkern\"},\"arff\":{\"title\":\"ARFF\",\"owner\":\"Golmote\"},\"armasm\":{\"title\":\"ARM Assembly\",\"alias\":\"arm-asm\",\"owner\":\"RunDevelopment\"},\"arturo\":{\"title\":\"Arturo\",\"alias\":\"art\",\"optional\":[\"bash\",\"css\",\"javascript\",\"markup\",\"markdown\",\"sql\"],\"owner\":\"drkameleon\"},\"asciidoc\":{\"alias\":\"adoc\",\"title\":\"AsciiDoc\",\"owner\":\"Golmote\"},\"aspnet\":{\"title\":\"ASP.NET (C#)\",\"require\":[\"markup\",\"csharp\"],\"owner\":\"nauzilus\"},\"asm6502\":{\"title\":\"6502 Assembly\",\"owner\":\"kzurawel\"},\"asmatmel\":{\"title\":\"Atmel AVR Assembly\",\"owner\":\"cerkit\"},\"autohotkey\":{\"title\":\"AutoHotkey\",\"owner\":\"aviaryan\"},\"autoit\":{\"title\":\"AutoIt\",\"owner\":\"Golmote\"},\"avisynth\":{\"title\":\"AviSynth\",\"alias\":\"avs\",\"owner\":\"Zinfidel\"},\"avro-idl\":{\"title\":\"Avro IDL\",\"alias\":\"avdl\",\"owner\":\"RunDevelopment\"},\"awk\":{\"title\":\"AWK\",\"alias\":\"gawk\",\"aliasTitles\":{\"gawk\":\"GAWK\"},\"owner\":\"RunDevelopment\"},\"bash\":{\"title\":\"Bash\",\"alias\":[\"sh\",\"shell\"],\"aliasTitles\":{\"sh\":\"Shell\",\"shell\":\"Shell\"},\"owner\":\"zeitgeist87\"},\"basic\":{\"title\":\"BASIC\",\"owner\":\"Golmote\"},\"batch\":{\"title\":\"Batch\",\"owner\":\"Golmote\"},\"bbcode\":{\"title\":\"BBcode\",\"alias\":\"shortcode\",\"aliasTitles\":{\"shortcode\":\"Shortcode\"},\"owner\":\"RunDevelopment\"},\"bbj\":{\"title\":\"BBj\",\"owner\":\"hyyan\"},\"bicep\":{\"title\":\"Bicep\",\"owner\":\"johnnyreilly\"},\"birb\":{\"title\":\"Birb\",\"require\":\"clike\",\"owner\":\"Calamity210\"},\"bison\":{\"title\":\"Bison\",\"require\":\"c\",\"owner\":\"Golmote\"},\"bnf\":{\"title\":\"BNF\",\"alias\":\"rbnf\",\"aliasTitles\":{\"rbnf\":\"RBNF\"},\"owner\":\"RunDevelopment\"},\"bqn\":{\"title\":\"BQN\",\"owner\":\"yewscion\"},\"brainfuck\":{\"title\":\"Brainfuck\",\"owner\":\"Golmote\"},\"brightscript\":{\"title\":\"BrightScript\",\"owner\":\"RunDevelopment\"},\"bro\":{\"title\":\"Bro\",\"owner\":\"wayward710\"},\"bsl\":{\"title\":\"BSL (1C:Enterprise)\",\"alias\":\"oscript\",\"aliasTitles\":{\"oscript\":\"OneScript\"},\"owner\":\"Diversus23\"},\"c\":{\"title\":\"C\",\"require\":\"clike\",\"owner\":\"zeitgeist87\"},\"csharp\":{\"title\":\"C#\",\"require\":\"clike\",\"alias\":[\"cs\",\"dotnet\"],\"owner\":\"mvalipour\"},\"cpp\":{\"title\":\"C++\",\"require\":\"c\",\"owner\":\"zeitgeist87\"},\"cfscript\":{\"title\":\"CFScript\",\"require\":\"clike\",\"alias\":\"cfc\",\"owner\":\"mjclemente\"},\"chaiscript\":{\"title\":\"ChaiScript\",\"require\":[\"clike\",\"cpp\"],\"owner\":\"RunDevelopment\"},\"cil\":{\"title\":\"CIL\",\"owner\":\"sbrl\"},\"cilkc\":{\"title\":\"Cilk/C\",\"require\":\"c\",\"alias\":\"cilk-c\",\"owner\":\"OpenCilk\"},\"cilkcpp\":{\"title\":\"Cilk/C++\",\"require\":\"cpp\",\"alias\":[\"cilk-cpp\",\"cilk\"],\"owner\":\"OpenCilk\"},\"clojure\":{\"title\":\"Clojure\",\"owner\":\"troglotit\"},\"cmake\":{\"title\":\"CMake\",\"owner\":\"mjrogozinski\"},\"cobol\":{\"title\":\"COBOL\",\"owner\":\"RunDevelopment\"},\"coffeescript\":{\"title\":\"CoffeeScript\",\"require\":\"javascript\",\"alias\":\"coffee\",\"owner\":\"R-osey\"},\"concurnas\":{\"title\":\"Concurnas\",\"alias\":\"conc\",\"owner\":\"jasontatton\"},\"csp\":{\"title\":\"Content-Security-Policy\",\"owner\":\"ScottHelme\"},\"cooklang\":{\"title\":\"Cooklang\",\"owner\":\"ahue\"},\"coq\":{\"title\":\"Coq\",\"owner\":\"RunDevelopment\"},\"crystal\":{\"title\":\"Crystal\",\"require\":\"ruby\",\"owner\":\"MakeNowJust\"},\"css-extras\":{\"title\":\"CSS Extras\",\"require\":\"css\",\"modify\":\"css\",\"owner\":\"milesj\"},\"csv\":{\"title\":\"CSV\",\"owner\":\"RunDevelopment\"},\"cue\":{\"title\":\"CUE\",\"owner\":\"RunDevelopment\"},\"cypher\":{\"title\":\"Cypher\",\"owner\":\"RunDevelopment\"},\"d\":{\"title\":\"D\",\"require\":\"clike\",\"owner\":\"Golmote\"},\"dart\":{\"title\":\"Dart\",\"require\":\"clike\",\"owner\":\"Golmote\"},\"dataweave\":{\"title\":\"DataWeave\",\"owner\":\"machaval\"},\"dax\":{\"title\":\"DAX\",\"owner\":\"peterbud\"},\"dhall\":{\"title\":\"Dhall\",\"owner\":\"RunDevelopment\"},\"diff\":{\"title\":\"Diff\",\"owner\":\"uranusjr\"},\"django\":{\"title\":\"Django/Jinja2\",\"require\":\"markup-templating\",\"alias\":\"jinja2\",\"owner\":\"romanvm\"},\"dns-zone-file\":{\"title\":\"DNS zone file\",\"owner\":\"RunDevelopment\",\"alias\":\"dns-zone\"},\"docker\":{\"title\":\"Docker\",\"alias\":\"dockerfile\",\"owner\":\"JustinBeckwith\"},\"dot\":{\"title\":\"DOT (Graphviz)\",\"alias\":\"gv\",\"optional\":\"markup\",\"owner\":\"RunDevelopment\"},\"ebnf\":{\"title\":\"EBNF\",\"owner\":\"RunDevelopment\"},\"editorconfig\":{\"title\":\"EditorConfig\",\"owner\":\"osipxd\"},\"eiffel\":{\"title\":\"Eiffel\",\"owner\":\"Conaclos\"},\"ejs\":{\"title\":\"EJS\",\"require\":[\"javascript\",\"markup-templating\"],\"owner\":\"RunDevelopment\",\"alias\":\"eta\",\"aliasTitles\":{\"eta\":\"Eta\"}},\"elixir\":{\"title\":\"Elixir\",\"owner\":\"Golmote\"},\"elm\":{\"title\":\"Elm\",\"owner\":\"zwilias\"},\"etlua\":{\"title\":\"Embedded Lua templating\",\"require\":[\"lua\",\"markup-templating\"],\"owner\":\"RunDevelopment\"},\"erb\":{\"title\":\"ERB\",\"require\":[\"ruby\",\"markup-templating\"],\"owner\":\"Golmote\"},\"erlang\":{\"title\":\"Erlang\",\"owner\":\"Golmote\"},\"excel-formula\":{\"title\":\"Excel Formula\",\"alias\":[\"xlsx\",\"xls\"],\"owner\":\"RunDevelopment\"},\"fsharp\":{\"title\":\"F#\",\"require\":\"clike\",\"owner\":\"simonreynolds7\"},\"factor\":{\"title\":\"Factor\",\"owner\":\"catb0t\"},\"false\":{\"title\":\"False\",\"owner\":\"edukisto\"},\"firestore-security-rules\":{\"title\":\"Firestore security rules\",\"require\":\"clike\",\"owner\":\"RunDevelopment\"},\"flow\":{\"title\":\"Flow\",\"require\":\"javascript\",\"owner\":\"Golmote\"},\"fortran\":{\"title\":\"Fortran\",\"owner\":\"Golmote\"},\"ftl\":{\"title\":\"FreeMarker Template Language\",\"require\":\"markup-templating\",\"owner\":\"RunDevelopment\"},\"gml\":{\"title\":\"GameMaker Language\",\"alias\":\"gamemakerlanguage\",\"require\":\"clike\",\"owner\":\"LiarOnce\"},\"gap\":{\"title\":\"GAP (CAS)\",\"owner\":\"RunDevelopment\"},\"gcode\":{\"title\":\"G-code\",\"owner\":\"RunDevelopment\"},\"gdscript\":{\"title\":\"GDScript\",\"owner\":\"RunDevelopment\"},\"gedcom\":{\"title\":\"GEDCOM\",\"owner\":\"Golmote\"},\"gettext\":{\"title\":\"gettext\",\"alias\":\"po\",\"owner\":\"RunDevelopment\"},\"gherkin\":{\"title\":\"Gherkin\",\"owner\":\"hason\"},\"git\":{\"title\":\"Git\",\"owner\":\"lgiraudel\"},\"glsl\":{\"title\":\"GLSL\",\"require\":\"c\",\"owner\":\"Golmote\"},\"gn\":{\"title\":\"GN\",\"alias\":\"gni\",\"owner\":\"RunDevelopment\"},\"linker-script\":{\"title\":\"GNU Linker Script\",\"alias\":\"ld\",\"owner\":\"RunDevelopment\"},\"go\":{\"title\":\"Go\",\"require\":\"clike\",\"owner\":\"arnehormann\"},\"go-module\":{\"title\":\"Go module\",\"alias\":\"go-mod\",\"owner\":\"RunDevelopment\"},\"gradle\":{\"title\":\"Gradle\",\"require\":\"clike\",\"owner\":\"zeabdelkhalek-badido18\"},\"graphql\":{\"title\":\"GraphQL\",\"optional\":\"markdown\",\"owner\":\"Golmote\"},\"groovy\":{\"title\":\"Groovy\",\"require\":\"clike\",\"owner\":\"robfletcher\"},\"haml\":{\"title\":\"Haml\",\"require\":\"ruby\",\"optional\":[\"css\",\"css-extras\",\"coffeescript\",\"erb\",\"javascript\",\"less\",\"markdown\",\"scss\",\"textile\"],\"owner\":\"Golmote\"},\"handlebars\":{\"title\":\"Handlebars\",\"require\":\"markup-templating\",\"alias\":[\"hbs\",\"mustache\"],\"aliasTitles\":{\"mustache\":\"Mustache\"},\"owner\":\"Golmote\"},\"haskell\":{\"title\":\"Haskell\",\"alias\":\"hs\",\"owner\":\"bholst\"},\"haxe\":{\"title\":\"Haxe\",\"require\":\"clike\",\"optional\":\"regex\",\"owner\":\"Golmote\"},\"hcl\":{\"title\":\"HCL\",\"owner\":\"outsideris\"},\"hlsl\":{\"title\":\"HLSL\",\"require\":\"c\",\"owner\":\"RunDevelopment\"},\"hoon\":{\"title\":\"Hoon\",\"owner\":\"matildepark\"},\"http\":{\"title\":\"HTTP\",\"optional\":[\"csp\",\"css\",\"hpkp\",\"hsts\",\"javascript\",\"json\",\"markup\",\"uri\"],\"owner\":\"danielgtaylor\"},\"hpkp\":{\"title\":\"HTTP Public-Key-Pins\",\"owner\":\"ScottHelme\"},\"hsts\":{\"title\":\"HTTP Strict-Transport-Security\",\"owner\":\"ScottHelme\"},\"ichigojam\":{\"title\":\"IchigoJam\",\"owner\":\"BlueCocoa\"},\"icon\":{\"title\":\"Icon\",\"owner\":\"Golmote\"},\"icu-message-format\":{\"title\":\"ICU Message Format\",\"owner\":\"RunDevelopment\"},\"idris\":{\"title\":\"Idris\",\"alias\":\"idr\",\"owner\":\"KeenS\",\"require\":\"haskell\"},\"ignore\":{\"title\":\".ignore\",\"owner\":\"osipxd\",\"alias\":[\"gitignore\",\"hgignore\",\"npmignore\"],\"aliasTitles\":{\"gitignore\":\".gitignore\",\"hgignore\":\".hgignore\",\"npmignore\":\".npmignore\"}},\"inform7\":{\"title\":\"Inform 7\",\"owner\":\"Golmote\"},\"ini\":{\"title\":\"Ini\",\"owner\":\"aviaryan\"},\"io\":{\"title\":\"Io\",\"owner\":\"AlesTsurko\"},\"j\":{\"title\":\"J\",\"owner\":\"Golmote\"},\"java\":{\"title\":\"Java\",\"require\":\"clike\",\"owner\":\"sherblot\"},\"javadoc\":{\"title\":\"JavaDoc\",\"require\":[\"markup\",\"java\",\"javadoclike\"],\"modify\":\"java\",\"optional\":\"scala\",\"owner\":\"RunDevelopment\"},\"javadoclike\":{\"title\":\"JavaDoc-like\",\"modify\":[\"java\",\"javascript\",\"php\"],\"owner\":\"RunDevelopment\"},\"javastacktrace\":{\"title\":\"Java stack trace\",\"owner\":\"RunDevelopment\"},\"jexl\":{\"title\":\"Jexl\",\"owner\":\"czosel\"},\"jolie\":{\"title\":\"Jolie\",\"require\":\"clike\",\"owner\":\"thesave\"},\"jq\":{\"title\":\"JQ\",\"owner\":\"RunDevelopment\"},\"jsdoc\":{\"title\":\"JSDoc\",\"require\":[\"javascript\",\"javadoclike\",\"typescript\"],\"modify\":\"javascript\",\"optional\":[\"actionscript\",\"coffeescript\"],\"owner\":\"RunDevelopment\"},\"js-extras\":{\"title\":\"JS Extras\",\"require\":\"javascript\",\"modify\":\"javascript\",\"optional\":[\"actionscript\",\"coffeescript\",\"flow\",\"n4js\",\"typescript\"],\"owner\":\"RunDevelopment\"},\"json\":{\"title\":\"JSON\",\"alias\":\"webmanifest\",\"aliasTitles\":{\"webmanifest\":\"Web App Manifest\"},\"owner\":\"CupOfTea696\"},\"json5\":{\"title\":\"JSON5\",\"require\":\"json\",\"owner\":\"RunDevelopment\"},\"jsonp\":{\"title\":\"JSONP\",\"require\":\"json\",\"owner\":\"RunDevelopment\"},\"jsstacktrace\":{\"title\":\"JS stack trace\",\"owner\":\"sbrl\"},\"js-templates\":{\"title\":\"JS Templates\",\"require\":\"javascript\",\"modify\":\"javascript\",\"optional\":[\"css\",\"css-extras\",\"graphql\",\"markdown\",\"markup\",\"sql\"],\"owner\":\"RunDevelopment\"},\"julia\":{\"title\":\"Julia\",\"owner\":\"cdagnino\"},\"keepalived\":{\"title\":\"Keepalived Configure\",\"owner\":\"dev-itsheng\"},\"keyman\":{\"title\":\"Keyman\",\"owner\":\"mcdurdin\"},\"kotlin\":{\"title\":\"Kotlin\",\"alias\":[\"kt\",\"kts\"],\"aliasTitles\":{\"kts\":\"Kotlin Script\"},\"require\":\"clike\",\"owner\":\"Golmote\"},\"kumir\":{\"title\":\"KuMir (КуМир)\",\"alias\":\"kum\",\"owner\":\"edukisto\"},\"kusto\":{\"title\":\"Kusto\",\"owner\":\"RunDevelopment\"},\"latex\":{\"title\":\"LaTeX\",\"alias\":[\"tex\",\"context\"],\"aliasTitles\":{\"tex\":\"TeX\",\"context\":\"ConTeXt\"},\"owner\":\"japborst\"},\"latte\":{\"title\":\"Latte\",\"require\":[\"clike\",\"markup-templating\",\"php\"],\"owner\":\"nette\"},\"less\":{\"title\":\"Less\",\"require\":\"css\",\"optional\":\"css-extras\",\"owner\":\"Golmote\"},\"lilypond\":{\"title\":\"LilyPond\",\"require\":\"scheme\",\"alias\":\"ly\",\"owner\":\"RunDevelopment\"},\"liquid\":{\"title\":\"Liquid\",\"require\":\"markup-templating\",\"owner\":\"cinhtau\"},\"lisp\":{\"title\":\"Lisp\",\"alias\":[\"emacs\",\"elisp\",\"emacs-lisp\"],\"owner\":\"JuanCaicedo\"},\"livescript\":{\"title\":\"LiveScript\",\"owner\":\"Golmote\"},\"llvm\":{\"title\":\"LLVM IR\",\"owner\":\"porglezomp\"},\"log\":{\"title\":\"Log file\",\"optional\":\"javastacktrace\",\"owner\":\"RunDevelopment\"},\"lolcode\":{\"title\":\"LOLCODE\",\"owner\":\"Golmote\"},\"lua\":{\"title\":\"Lua\",\"owner\":\"Golmote\"},\"magma\":{\"title\":\"Magma (CAS)\",\"owner\":\"RunDevelopment\"},\"makefile\":{\"title\":\"Makefile\",\"owner\":\"Golmote\"},\"markdown\":{\"title\":\"Markdown\",\"require\":\"markup\",\"optional\":\"yaml\",\"alias\":\"md\",\"owner\":\"Golmote\"},\"markup-templating\":{\"title\":\"Markup templating\",\"require\":\"markup\",\"owner\":\"Golmote\"},\"mata\":{\"title\":\"Mata\",\"owner\":\"RunDevelopment\"},\"matlab\":{\"title\":\"MATLAB\",\"owner\":\"Golmote\"},\"maxscript\":{\"title\":\"MAXScript\",\"owner\":\"RunDevelopment\"},\"mel\":{\"title\":\"MEL\",\"owner\":\"Golmote\"},\"mermaid\":{\"title\":\"Mermaid\",\"owner\":\"RunDevelopment\"},\"metafont\":{\"title\":\"METAFONT\",\"owner\":\"LaeriExNihilo\"},\"mizar\":{\"title\":\"Mizar\",\"owner\":\"Golmote\"},\"mongodb\":{\"title\":\"MongoDB\",\"owner\":\"airs0urce\",\"require\":\"javascript\"},\"monkey\":{\"title\":\"Monkey\",\"owner\":\"Golmote\"},\"moonscript\":{\"title\":\"MoonScript\",\"alias\":\"moon\",\"owner\":\"RunDevelopment\"},\"n1ql\":{\"title\":\"N1QL\",\"owner\":\"TMWilds\"},\"n4js\":{\"title\":\"N4JS\",\"require\":\"javascript\",\"optional\":\"jsdoc\",\"alias\":\"n4jsd\",\"owner\":\"bsmith-n4\"},\"nand2tetris-hdl\":{\"title\":\"Nand To Tetris HDL\",\"owner\":\"stephanmax\"},\"naniscript\":{\"title\":\"Naninovel Script\",\"owner\":\"Elringus\",\"alias\":\"nani\"},\"nasm\":{\"title\":\"NASM\",\"owner\":\"rbmj\"},\"neon\":{\"title\":\"NEON\",\"owner\":\"nette\"},\"nevod\":{\"title\":\"Nevod\",\"owner\":\"nezaboodka\"},\"nginx\":{\"title\":\"nginx\",\"owner\":\"volado\"},\"nim\":{\"title\":\"Nim\",\"owner\":\"Golmote\"},\"nix\":{\"title\":\"Nix\",\"owner\":\"Golmote\"},\"nsis\":{\"title\":\"NSIS\",\"owner\":\"idleberg\"},\"objectivec\":{\"title\":\"Objective-C\",\"require\":\"c\",\"alias\":\"objc\",\"owner\":\"uranusjr\"},\"ocaml\":{\"title\":\"OCaml\",\"owner\":\"Golmote\"},\"odin\":{\"title\":\"Odin\",\"owner\":\"edukisto\"},\"opencl\":{\"title\":\"OpenCL\",\"require\":\"c\",\"modify\":[\"c\",\"cpp\"],\"owner\":\"Milania1\"},\"openqasm\":{\"title\":\"OpenQasm\",\"alias\":\"qasm\",\"owner\":\"RunDevelopment\"},\"oz\":{\"title\":\"Oz\",\"owner\":\"Golmote\"},\"parigp\":{\"title\":\"PARI/GP\",\"owner\":\"Golmote\"},\"parser\":{\"title\":\"Parser\",\"require\":\"markup\",\"owner\":\"Golmote\"},\"pascal\":{\"title\":\"Pascal\",\"alias\":\"objectpascal\",\"aliasTitles\":{\"objectpascal\":\"Object Pascal\"},\"owner\":\"Golmote\"},\"pascaligo\":{\"title\":\"Pascaligo\",\"owner\":\"DefinitelyNotAGoat\"},\"psl\":{\"title\":\"PATROL Scripting Language\",\"owner\":\"bertysentry\"},\"pcaxis\":{\"title\":\"PC-Axis\",\"alias\":\"px\",\"owner\":\"RunDevelopment\"},\"peoplecode\":{\"title\":\"PeopleCode\",\"alias\":\"pcode\",\"owner\":\"RunDevelopment\"},\"perl\":{\"title\":\"Perl\",\"owner\":\"Golmote\"},\"php\":{\"title\":\"PHP\",\"require\":\"markup-templating\",\"owner\":\"milesj\"},\"phpdoc\":{\"title\":\"PHPDoc\",\"require\":[\"php\",\"javadoclike\"],\"modify\":\"php\",\"owner\":\"RunDevelopment\"},\"php-extras\":{\"title\":\"PHP Extras\",\"require\":\"php\",\"modify\":\"php\",\"owner\":\"milesj\"},\"plant-uml\":{\"title\":\"PlantUML\",\"alias\":\"plantuml\",\"owner\":\"RunDevelopment\"},\"plsql\":{\"title\":\"PL/SQL\",\"require\":\"sql\",\"owner\":\"Golmote\"},\"powerquery\":{\"title\":\"PowerQuery\",\"alias\":[\"pq\",\"mscript\"],\"owner\":\"peterbud\"},\"powershell\":{\"title\":\"PowerShell\",\"owner\":\"nauzilus\"},\"processing\":{\"title\":\"Processing\",\"require\":\"clike\",\"owner\":\"Golmote\"},\"prolog\":{\"title\":\"Prolog\",\"owner\":\"Golmote\"},\"promql\":{\"title\":\"PromQL\",\"owner\":\"arendjr\"},\"properties\":{\"title\":\".properties\",\"owner\":\"Golmote\"},\"protobuf\":{\"title\":\"Protocol Buffers\",\"require\":\"clike\",\"owner\":\"just-boris\"},\"pug\":{\"title\":\"Pug\",\"require\":[\"markup\",\"javascript\"],\"optional\":[\"coffeescript\",\"ejs\",\"handlebars\",\"less\",\"livescript\",\"markdown\",\"scss\",\"stylus\",\"twig\"],\"owner\":\"Golmote\"},\"puppet\":{\"title\":\"Puppet\",\"owner\":\"Golmote\"},\"pure\":{\"title\":\"Pure\",\"optional\":[\"c\",\"cpp\",\"fortran\"],\"owner\":\"Golmote\"},\"purebasic\":{\"title\":\"PureBasic\",\"require\":\"clike\",\"alias\":\"pbfasm\",\"owner\":\"HeX0R101\"},\"purescript\":{\"title\":\"PureScript\",\"require\":\"haskell\",\"alias\":\"purs\",\"owner\":\"sriharshachilakapati\"},\"python\":{\"title\":\"Python\",\"alias\":\"py\",\"owner\":\"multipetros\"},\"qsharp\":{\"title\":\"Q#\",\"require\":\"clike\",\"alias\":\"qs\",\"owner\":\"fedonman\"},\"q\":{\"title\":\"Q (kdb+ database)\",\"owner\":\"Golmote\"},\"qml\":{\"title\":\"QML\",\"require\":\"javascript\",\"owner\":\"RunDevelopment\"},\"qore\":{\"title\":\"Qore\",\"require\":\"clike\",\"owner\":\"temnroegg\"},\"r\":{\"title\":\"R\",\"owner\":\"Golmote\"},\"racket\":{\"title\":\"Racket\",\"require\":\"scheme\",\"alias\":\"rkt\",\"owner\":\"RunDevelopment\"},\"cshtml\":{\"title\":\"Razor C#\",\"alias\":\"razor\",\"require\":[\"markup\",\"csharp\"],\"optional\":[\"css\",\"css-extras\",\"javascript\",\"js-extras\"],\"owner\":\"RunDevelopment\"},\"jsx\":{\"title\":\"React JSX\",\"require\":[\"markup\",\"javascript\"],\"optional\":[\"jsdoc\",\"js-extras\",\"js-templates\"],\"owner\":\"vkbansal\"},\"tsx\":{\"title\":\"React TSX\",\"require\":[\"jsx\",\"typescript\"]},\"reason\":{\"title\":\"Reason\",\"require\":\"clike\",\"owner\":\"Golmote\"},\"regex\":{\"title\":\"Regex\",\"owner\":\"RunDevelopment\"},\"rego\":{\"title\":\"Rego\",\"owner\":\"JordanSh\"},\"renpy\":{\"title\":\"Ren'py\",\"alias\":\"rpy\",\"owner\":\"HyuchiaDiego\"},\"rescript\":{\"title\":\"ReScript\",\"alias\":\"res\",\"owner\":\"vmarcosp\"},\"rest\":{\"title\":\"reST (reStructuredText)\",\"owner\":\"Golmote\"},\"rip\":{\"title\":\"Rip\",\"owner\":\"ravinggenius\"},\"roboconf\":{\"title\":\"Roboconf\",\"owner\":\"Golmote\"},\"robotframework\":{\"title\":\"Robot Framework\",\"alias\":\"robot\",\"owner\":\"RunDevelopment\"},\"ruby\":{\"title\":\"Ruby\",\"require\":\"clike\",\"alias\":\"rb\",\"owner\":\"samflores\"},\"rust\":{\"title\":\"Rust\",\"owner\":\"Golmote\"},\"sas\":{\"title\":\"SAS\",\"optional\":[\"groovy\",\"lua\",\"sql\"],\"owner\":\"Golmote\"},\"sass\":{\"title\":\"Sass (Sass)\",\"require\":\"css\",\"optional\":\"css-extras\",\"owner\":\"Golmote\"},\"scss\":{\"title\":\"Sass (SCSS)\",\"require\":\"css\",\"optional\":\"css-extras\",\"owner\":\"MoOx\"},\"scala\":{\"title\":\"Scala\",\"require\":\"java\",\"owner\":\"jozic\"},\"scheme\":{\"title\":\"Scheme\",\"owner\":\"bacchus123\"},\"shell-session\":{\"title\":\"Shell session\",\"require\":\"bash\",\"alias\":[\"sh-session\",\"shellsession\"],\"owner\":\"RunDevelopment\"},\"smali\":{\"title\":\"Smali\",\"owner\":\"RunDevelopment\"},\"smalltalk\":{\"title\":\"Smalltalk\",\"owner\":\"Golmote\"},\"smarty\":{\"title\":\"Smarty\",\"require\":\"markup-templating\",\"optional\":\"php\",\"owner\":\"Golmote\"},\"sml\":{\"title\":\"SML\",\"alias\":\"smlnj\",\"aliasTitles\":{\"smlnj\":\"SML/NJ\"},\"owner\":\"RunDevelopment\"},\"solidity\":{\"title\":\"Solidity (Ethereum)\",\"alias\":\"sol\",\"require\":\"clike\",\"owner\":\"glachaud\"},\"solution-file\":{\"title\":\"Solution file\",\"alias\":\"sln\",\"owner\":\"RunDevelopment\"},\"soy\":{\"title\":\"Soy (Closure Template)\",\"require\":\"markup-templating\",\"owner\":\"Golmote\"},\"sparql\":{\"title\":\"SPARQL\",\"require\":\"turtle\",\"owner\":\"Triply-Dev\",\"alias\":\"rq\"},\"splunk-spl\":{\"title\":\"Splunk SPL\",\"owner\":\"RunDevelopment\"},\"sqf\":{\"title\":\"SQF: Status Quo Function (Arma 3)\",\"require\":\"clike\",\"owner\":\"RunDevelopment\"},\"sql\":{\"title\":\"SQL\",\"owner\":\"multipetros\"},\"squirrel\":{\"title\":\"Squirrel\",\"require\":\"clike\",\"owner\":\"RunDevelopment\"},\"stan\":{\"title\":\"Stan\",\"owner\":\"RunDevelopment\"},\"stata\":{\"title\":\"Stata Ado\",\"require\":[\"mata\",\"java\",\"python\"],\"owner\":\"RunDevelopment\"},\"iecst\":{\"title\":\"Structured Text (IEC 61131-3)\",\"owner\":\"serhioromano\"},\"stylus\":{\"title\":\"Stylus\",\"owner\":\"vkbansal\"},\"supercollider\":{\"title\":\"SuperCollider\",\"alias\":\"sclang\",\"owner\":\"RunDevelopment\"},\"swift\":{\"title\":\"Swift\",\"owner\":\"chrischares\"},\"systemd\":{\"title\":\"Systemd configuration file\",\"owner\":\"RunDevelopment\"},\"t4-templating\":{\"title\":\"T4 templating\",\"owner\":\"RunDevelopment\"},\"t4-cs\":{\"title\":\"T4 Text Templates (C#)\",\"require\":[\"t4-templating\",\"csharp\"],\"alias\":\"t4\",\"owner\":\"RunDevelopment\"},\"t4-vb\":{\"title\":\"T4 Text Templates (VB)\",\"require\":[\"t4-templating\",\"vbnet\"],\"owner\":\"RunDevelopment\"},\"tap\":{\"title\":\"TAP\",\"owner\":\"isaacs\",\"require\":\"yaml\"},\"tcl\":{\"title\":\"Tcl\",\"owner\":\"PeterChaplin\"},\"tt2\":{\"title\":\"Template Toolkit 2\",\"require\":[\"clike\",\"markup-templating\"],\"owner\":\"gflohr\"},\"textile\":{\"title\":\"Textile\",\"require\":\"markup\",\"optional\":\"css\",\"owner\":\"Golmote\"},\"toml\":{\"title\":\"TOML\",\"owner\":\"RunDevelopment\"},\"tremor\":{\"title\":\"Tremor\",\"alias\":[\"trickle\",\"troy\"],\"owner\":\"darach\",\"aliasTitles\":{\"trickle\":\"trickle\",\"troy\":\"troy\"}},\"turtle\":{\"title\":\"Turtle\",\"alias\":\"trig\",\"aliasTitles\":{\"trig\":\"TriG\"},\"owner\":\"jakubklimek\"},\"twig\":{\"title\":\"Twig\",\"require\":\"markup-templating\",\"owner\":\"brandonkelly\"},\"typescript\":{\"title\":\"TypeScript\",\"require\":\"javascript\",\"optional\":\"js-templates\",\"alias\":\"ts\",\"owner\":\"vkbansal\"},\"typoscript\":{\"title\":\"TypoScript\",\"alias\":\"tsconfig\",\"aliasTitles\":{\"tsconfig\":\"TSConfig\"},\"owner\":\"dkern\"},\"unrealscript\":{\"title\":\"UnrealScript\",\"alias\":[\"uscript\",\"uc\"],\"owner\":\"RunDevelopment\"},\"uorazor\":{\"title\":\"UO Razor Script\",\"owner\":\"jaseowns\"},\"uri\":{\"title\":\"URI\",\"alias\":\"url\",\"aliasTitles\":{\"url\":\"URL\"},\"owner\":\"RunDevelopment\"},\"v\":{\"title\":\"V\",\"require\":\"clike\",\"owner\":\"taggon\"},\"vala\":{\"title\":\"Vala\",\"require\":\"clike\",\"optional\":\"regex\",\"owner\":\"TemplarVolk\"},\"vbnet\":{\"title\":\"VB.Net\",\"require\":\"basic\",\"owner\":\"Bigsby\"},\"velocity\":{\"title\":\"Velocity\",\"require\":\"markup\",\"owner\":\"Golmote\"},\"verilog\":{\"title\":\"Verilog\",\"owner\":\"a-rey\"},\"vhdl\":{\"title\":\"VHDL\",\"owner\":\"a-rey\"},\"vim\":{\"title\":\"vim\",\"owner\":\"westonganger\"},\"visual-basic\":{\"title\":\"Visual Basic\",\"alias\":[\"vb\",\"vba\"],\"aliasTitles\":{\"vba\":\"VBA\"},\"owner\":\"Golmote\"},\"warpscript\":{\"title\":\"WarpScript\",\"owner\":\"RunDevelopment\"},\"wasm\":{\"title\":\"WebAssembly\",\"owner\":\"Golmote\"},\"web-idl\":{\"title\":\"Web IDL\",\"alias\":\"webidl\",\"owner\":\"RunDevelopment\"},\"wgsl\":{\"title\":\"WGSL\",\"owner\":\"Dr4gonthree\"},\"wiki\":{\"title\":\"Wiki markup\",\"require\":\"markup\",\"owner\":\"Golmote\"},\"wolfram\":{\"title\":\"Wolfram language\",\"alias\":[\"mathematica\",\"nb\",\"wl\"],\"aliasTitles\":{\"mathematica\":\"Mathematica\",\"nb\":\"Mathematica Notebook\"},\"owner\":\"msollami\"},\"wren\":{\"title\":\"Wren\",\"owner\":\"clsource\"},\"xeora\":{\"title\":\"Xeora\",\"require\":\"markup\",\"alias\":\"xeoracube\",\"aliasTitles\":{\"xeoracube\":\"XeoraCube\"},\"owner\":\"freakmaxi\"},\"xml-doc\":{\"title\":\"XML doc (.net)\",\"require\":\"markup\",\"modify\":[\"csharp\",\"fsharp\",\"vbnet\"],\"owner\":\"RunDevelopment\"},\"xojo\":{\"title\":\"Xojo (REALbasic)\",\"owner\":\"Golmote\"},\"xquery\":{\"title\":\"XQuery\",\"require\":\"markup\",\"owner\":\"Golmote\"},\"yaml\":{\"title\":\"YAML\",\"alias\":\"yml\",\"owner\":\"hason\"},\"yang\":{\"title\":\"YANG\",\"owner\":\"RunDevelopment\"},\"zig\":{\"title\":\"Zig\",\"owner\":\"RunDevelopment\"}},\"plugins\":{\"meta\":{\"path\":\"plugins/{id}/prism-{id}\",\"link\":\"plugins/{id}/\"},\"line-highlight\":{\"title\":\"Line Highlight\",\"description\":\"Highlights specific lines and/or line ranges.\"},\"line-numbers\":{\"title\":\"Line Numbers\",\"description\":\"Line number at the beginning of code lines.\",\"owner\":\"kuba-kubula\"},\"show-invisibles\":{\"title\":\"Show Invisibles\",\"description\":\"Show hidden characters such as tabs and line breaks.\",\"optional\":[\"autolinker\",\"data-uri-highlight\"]},\"autolinker\":{\"title\":\"Autolinker\",\"description\":\"Converts URLs and emails in code to clickable links. Parses Markdown links in comments.\"},\"wpd\":{\"title\":\"WebPlatform Docs\",\"description\":\"Makes tokens link to <a href=\\\"https://webplatform.github.io/docs/\\\">WebPlatform.org documentation</a>. The links open in a new tab.\"},\"custom-class\":{\"title\":\"Custom Class\",\"description\":\"This plugin allows you to prefix Prism's default classes (<code>.comment</code> can become <code>.namespace--comment</code>) or replace them with your defined ones (like <code>.editor__comment</code>). You can even add new classes.\",\"owner\":\"dvkndn\",\"noCSS\":true},\"file-highlight\":{\"title\":\"File Highlight\",\"description\":\"Fetch external files and highlight them with Prism. Used on the Prism website itself.\",\"noCSS\":true},\"show-language\":{\"title\":\"Show Language\",\"description\":\"Display the highlighted language in code blocks (inline code does not show the label).\",\"owner\":\"nauzilus\",\"noCSS\":true,\"require\":\"toolbar\"},\"jsonp-highlight\":{\"title\":\"JSONP Highlight\",\"description\":\"Fetch content with JSONP and highlight some interesting content (e.g. GitHub/Gists or Bitbucket API).\",\"noCSS\":true,\"owner\":\"nauzilus\"},\"highlight-keywords\":{\"title\":\"Highlight Keywords\",\"description\":\"Adds special CSS classes for each keyword for fine-grained highlighting.\",\"owner\":\"vkbansal\",\"noCSS\":true},\"remove-initial-line-feed\":{\"title\":\"Remove initial line feed\",\"description\":\"Removes the initial line feed in code blocks.\",\"owner\":\"Golmote\",\"noCSS\":true},\"inline-color\":{\"title\":\"Inline color\",\"description\":\"Adds a small inline preview for colors in style sheets.\",\"require\":\"css-extras\",\"owner\":\"RunDevelopment\"},\"previewers\":{\"title\":\"Previewers\",\"description\":\"Previewers for angles, colors, gradients, easing and time.\",\"require\":\"css-extras\",\"owner\":\"Golmote\"},\"autoloader\":{\"title\":\"Autoloader\",\"description\":\"Automatically loads the needed languages to highlight the code blocks.\",\"owner\":\"Golmote\",\"noCSS\":true},\"keep-markup\":{\"title\":\"Keep Markup\",\"description\":\"Prevents custom markup from being dropped out during highlighting.\",\"owner\":\"Golmote\",\"optional\":\"normalize-whitespace\",\"noCSS\":true},\"command-line\":{\"title\":\"Command Line\",\"description\":\"Display a command line with a prompt and, optionally, the output/response from the commands.\",\"owner\":\"chriswells0\"},\"unescaped-markup\":{\"title\":\"Unescaped Markup\",\"description\":\"Write markup without having to escape anything.\"},\"normalize-whitespace\":{\"title\":\"Normalize Whitespace\",\"description\":\"Supports multiple operations to normalize whitespace in code blocks.\",\"owner\":\"zeitgeist87\",\"optional\":\"unescaped-markup\",\"noCSS\":true},\"data-uri-highlight\":{\"title\":\"Data-URI Highlight\",\"description\":\"Highlights data-URI contents.\",\"owner\":\"Golmote\",\"noCSS\":true},\"toolbar\":{\"title\":\"Toolbar\",\"description\":\"Attach a toolbar for plugins to easily register buttons on the top of a code block.\",\"owner\":\"mAAdhaTTah\"},\"copy-to-clipboard\":{\"title\":\"Copy to Clipboard Button\",\"description\":\"Add a button that copies the code block to the clipboard when clicked.\",\"owner\":\"mAAdhaTTah\",\"require\":\"toolbar\",\"noCSS\":true},\"download-button\":{\"title\":\"Download Button\",\"description\":\"A button in the toolbar of a code block adding a convenient way to download a code file.\",\"owner\":\"Golmote\",\"require\":\"toolbar\",\"noCSS\":true},\"match-braces\":{\"title\":\"Match braces\",\"description\":\"Highlights matching braces.\",\"owner\":\"RunDevelopment\"},\"diff-highlight\":{\"title\":\"Diff Highlight\",\"description\":\"Highlights the code inside diff blocks.\",\"owner\":\"RunDevelopment\",\"require\":\"diff\"},\"filter-highlight-all\":{\"title\":\"Filter highlightAll\",\"description\":\"Filters the elements the <code>highlightAll</code> and <code>highlightAllUnder</code> methods actually highlight.\",\"owner\":\"RunDevelopment\",\"noCSS\":true},\"treeview\":{\"title\":\"Treeview\",\"description\":\"A language with special styles to highlight file system tree structures.\",\"owner\":\"Golmote\"}}};\nif (typeof module !== 'undefined' && module.exports) { module.exports = components; }/components/prism-ftl.min.js\u0007&!function(e){for(var t=\"[^<()\\\"']|\\\\((?:<expr>)*\\\\)|<(?!#--)|<#--(?:[^-]|-(?!->))*--\\x3e|\\\"(?:[^\\\\\\\\\\\"]|\\\\\\\\.)*\\\"|'(?:[^\\\\\\\\']|\\\\\\\\.)*'\",n=0;n<2;n++)t=t.replace(/<expr>/g,(function(){return t}));t=t.replace(/<expr>/g,\"[^\\\\s\\\\S]\");var i={comment:/<#--[\\s\\S]*?-->/,string:[{pattern:/\\br(\"|')(?:(?!\\1)[^\\\\]|\\\\.)*\\1/,greedy:!0},{pattern:RegExp(\"(\\\"|')(?:(?!\\\\1|\\\\$\\\\{)[^\\\\\\\\]|\\\\\\\\.|\\\\$\\\\{(?:(?!\\\\})(?:<expr>))*\\\\})*\\\\1\".replace(/<expr>/g,(function(){return t}))),greedy:!0,inside:{interpolation:{pattern:RegExp(\"((?:^|[^\\\\\\\\])(?:\\\\\\\\\\\\\\\\)*)\\\\$\\\\{(?:(?!\\\\})(?:<expr>))*\\\\}\".replace(/<expr>/g,(function(){return t}))),lookbehind:!0,inside:{\"interpolation-punctuation\":{pattern:/^\\$\\{|\\}$/,alias:\"punctuation\"},rest:null}}}}],keyword:/\\b(?:as)\\b/,boolean:/\\b(?:false|true)\\b/,\"builtin-function\":{pattern:/((?:^|[^?])\\?\\s*)\\w+/,lookbehind:!0,alias:\"function\"},function:/\\b\\w+(?=\\s*\\()/,number:/\\b\\d+(?:\\.\\d+)?\\b/,operator:/\\.\\.[<*!]?|->|--|\\+\\+|&&|\\|\\||\\?{1,2}|[-+*/%!=<>]=?|\\b(?:gt|gte|lt|lte)\\b/,punctuation:/[,;.:()[\\]{}]/};i.string[1].inside.interpolation.inside.rest=i,e.languages.ftl={\"ftl-comment\":{pattern:/^<#--[\\s\\S]*/,alias:\"comment\"},\"ftl-directive\":{pattern:/^<[\\s\\S]+>$/,inside:{directive:{pattern:/(^<\\/?)[#@][a-z]\\w*/i,lookbehind:!0,alias:\"keyword\"},punctuation:/^<\\/?|\\/?>$/,content:{pattern:/\\s*\\S[\\s\\S]*/,alias:\"ftl\",inside:i}}},\"ftl-interpolation\":{pattern:/^\\$\\{[\\s\\S]*\\}$/,inside:{punctuation:/^\\$\\{|\\}$/,content:{pattern:/\\s*\\S[\\s\\S]*/,alias:\"ftl\",inside:i}}}},e.hooks.add(\"before-tokenize\",(function(n){var i=RegExp(\"<#--[^]*?--\\x3e|</?[#@][a-zA-Z](?:<expr>)*?>|\\\\$\\\\{(?:<expr>)*?\\\\}\".replace(/<expr>/g,(function(){return t})),\"gi\");e.languages[\"markup-templating\"].buildPlaceholders(n,\"ftl\",i)})),e.hooks.add(\"after-tokenize\",(function(t){e.languages[\"markup-templating\"].tokenizePlaceholders(t,\"ftl\")}))}(Prism);/components/prism-kumir.js\fr/* eslint-disable regexp/no-dupe-characters-character-class */\n(function (Prism) {\n\n\t/**\n\t * Regular expression for characters that are not allowed in identifiers.\n\t *\n\t * @type {string}\n\t */\n\tvar nonId = /\\s\\x00-\\x1f\\x22-\\x2f\\x3a-\\x3f\\x5b-\\x5e\\x60\\x7b-\\x7e/.source;\n\n\t/**\n\t * Surround a regular expression for IDs with patterns for non-ID sequences.\n\t *\n\t * @param {string} pattern A regular expression for identifiers.\n\t * @param {string} [flags] The regular expression flags.\n\t * @returns {RegExp} A wrapped regular expression for identifiers.\n\t */\n\tfunction wrapId(pattern, flags) {\n\t\treturn RegExp(pattern.replace(/<nonId>/g, nonId), flags);\n\t}\n\n\tPrism.languages.kumir = {\n\t\t'comment': {\n\t\t\tpattern: /\\|.*/\n\t\t},\n\n\t\t'prolog': {\n\t\t\tpattern: /#.*/,\n\t\t\tgreedy: true\n\t\t},\n\n\t\t'string': {\n\t\t\tpattern: /\"[^\\n\\r\"]*\"|'[^\\n\\r']*'/,\n\t\t\tgreedy: true\n\t\t},\n\n\t\t'boolean': {\n\t\t\tpattern: wrapId(/(^|[<nonId>])(?:да|нет)(?=[<nonId>]|$)/.source),\n\t\t\tlookbehind: true\n\t\t},\n\n\t\t'operator-word': {\n\t\t\tpattern: wrapId(/(^|[<nonId>])(?:и|или|не)(?=[<nonId>]|$)/.source),\n\t\t\tlookbehind: true,\n\t\t\talias: 'keyword'\n\t\t},\n\n\t\t'system-variable': {\n\t\t\tpattern: wrapId(/(^|[<nonId>])знач(?=[<nonId>]|$)/.source),\n\t\t\tlookbehind: true,\n\t\t\talias: 'keyword'\n\t\t},\n\n\t\t'type': [\n\t\t\t{\n\t\t\t\tpattern: wrapId(/(^|[<nonId>])(?:вещ|лит|лог|сим|цел)(?:\\x20*таб)?(?=[<nonId>]|$)/.source),\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'builtin'\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: wrapId(/(^|[<nonId>])(?:компл|сканкод|файл|цвет)(?=[<nonId>]|$)/.source),\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'important'\n\t\t\t}\n\t\t],\n\n\t\t/**\n\t\t * Should be performed after searching for type names because of \"таб\".\n\t\t * \"таб\" is a reserved word, but never used without a preceding type name.\n\t\t * \"НАЗНАЧИТЬ\", \"Фввод\", and \"Фвывод\" are not reserved words.\n\t\t */\n\t\t'keyword': {\n\t\t\tpattern: wrapId(/(^|[<nonId>])(?:алг|арг(?:\\x20*рез)?|ввод|ВКЛЮЧИТЬ|вс[её]|выбор|вывод|выход|дано|для|до|дс|если|иначе|исп|использовать|кон(?:(?:\\x20+|_)исп)?|кц(?:(?:\\x20+|_)при)?|надо|нач|нс|нц|от|пауза|пока|при|раза?|рез|стоп|таб|то|утв|шаг)(?=[<nonId>]|$)/.source),\n\t\t\tlookbehind: true\n\t\t},\n\n\t\t/** Should be performed after searching for reserved words. */\n\t\t'name': {\n\t\t\t// eslint-disable-next-line regexp/no-super-linear-backtracking\n\t\t\tpattern: wrapId(/(^|[<nonId>])[^\\d<nonId>][^<nonId>]*(?:\\x20+[^<nonId>]+)*(?=[<nonId>]|$)/.source),\n\t\t\tlookbehind: true\n\t\t},\n\n\t\t/** Should be performed after searching for names. */\n\t\t'number': {\n\t\t\tpattern: wrapId(/(^|[<nonId>])(?:\\B\\$[\\da-f]+\\b|(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:e[+-]?\\d+)?)(?=[<nonId>]|$)/.source, 'i'),\n\t\t\tlookbehind: true\n\t\t},\n\n\t\t/** Should be performed after searching for words. */\n\t\t'punctuation': /:=|[(),:;\\[\\]]/,\n\n\t\t/**\n\t\t * Should be performed after searching for\n\t\t * - numeric constants (because of \"+\" and \"-\");\n\t\t * - punctuation marks (because of \":=\" and \"=\").\n\t\t */\n\t\t'operator-char': {\n\t\t\tpattern: /\\*\\*?|<[=>]?|>=?|[-+/=]/,\n\t\t\talias: 'operator'\n\t\t}\n\t};\n\n\tPrism.languages.kum = Prism.languages.kumir;\n\n}(Prism));\n/components/prism-web-idl.js\u000b(function (Prism) {\n\n\tvar id = /(?:\\B-|\\b_|\\b)[A-Za-z][\\w-]*(?![\\w-])/.source;\n\tvar type =\n\t\t'(?:' +\n\t\t/\\b(?:unsigned\\s+)?long\\s+long(?![\\w-])/.source +\n\t\t'|' +\n\t\t/\\b(?:unrestricted|unsigned)\\s+[a-z]+(?![\\w-])/.source +\n\t\t'|' +\n\t\t/(?!(?:unrestricted|unsigned)\\b)/.source + id + /(?:\\s*<(?:[^<>]|<[^<>]*>)*>)?/.source +\n\t\t')' + /(?:\\s*\\?)?/.source;\n\n\tvar typeInside = {};\n\n\tPrism.languages['web-idl'] = {\n\t\t'comment': {\n\t\t\tpattern: /\\/\\/.*|\\/\\*[\\s\\S]*?\\*\\//,\n\t\t\tgreedy: true\n\t\t},\n\t\t'string': {\n\t\t\tpattern: /\"[^\"]*\"/,\n\t\t\tgreedy: true\n\t\t},\n\n\t\t'namespace': {\n\t\t\tpattern: RegExp(/(\\bnamespace\\s+)/.source + id),\n\t\t\tlookbehind: true,\n\t\t},\n\t\t'class-name': [\n\t\t\t{\n\t\t\t\tpattern: /(^|[^\\w-])(?:iterable|maplike|setlike)\\s*<(?:[^<>]|<[^<>]*>)*>/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: typeInside\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: RegExp(/(\\b(?:attribute|const|deleter|getter|optional|setter)\\s+)/.source + type),\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: typeInside\n\t\t\t},\n\t\t\t{\n\t\t\t\t// callback return type\n\t\t\t\tpattern: RegExp('(' + /\\bcallback\\s+/.source + id + /\\s*=\\s*/.source + ')' + type),\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: typeInside\n\t\t\t},\n\t\t\t{\n\t\t\t\t// typedef\n\t\t\t\tpattern: RegExp(/(\\btypedef\\b\\s*)/.source + type),\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: typeInside\n\t\t\t},\n\n\t\t\t{\n\t\t\t\tpattern: RegExp(/(\\b(?:callback|dictionary|enum|interface(?:\\s+mixin)?)\\s+)(?!(?:interface|mixin)\\b)/.source + id),\n\t\t\t\tlookbehind: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\t// inheritance\n\t\t\t\tpattern: RegExp(/(:\\s*)/.source + id),\n\t\t\t\tlookbehind: true,\n\t\t\t},\n\n\t\t\t// includes and implements\n\t\t\tRegExp(id + /(?=\\s+(?:implements|includes)\\b)/.source),\n\t\t\t{\n\t\t\t\tpattern: RegExp(/(\\b(?:implements|includes)\\s+)/.source + id),\n\t\t\t\tlookbehind: true,\n\t\t\t},\n\n\t\t\t{\n\t\t\t\t// function return type, parameter types, and dictionary members\n\t\t\t\tpattern: RegExp(type + '(?=' + /\\s*(?:\\.{3}\\s*)?/.source + id + /\\s*[(),;=]/.source + ')'),\n\t\t\t\tinside: typeInside\n\t\t\t},\n\t\t],\n\n\t\t'builtin': /\\b(?:ArrayBuffer|BigInt64Array|BigUint64Array|ByteString|DOMString|DataView|Float32Array|Float64Array|FrozenArray|Int16Array|Int32Array|Int8Array|ObservableArray|Promise|USVString|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray)\\b/,\n\t\t'keyword': [\n\t\t\t/\\b(?:async|attribute|callback|const|constructor|deleter|dictionary|enum|getter|implements|includes|inherit|interface|mixin|namespace|null|optional|or|partial|readonly|required|setter|static|stringifier|typedef|unrestricted)\\b/,\n\t\t\t// type keywords\n\t\t\t/\\b(?:any|bigint|boolean|byte|double|float|iterable|long|maplike|object|octet|record|sequence|setlike|short|symbol|undefined|unsigned|void)\\b/\n\t\t],\n\t\t'boolean': /\\b(?:false|true)\\b/,\n\n\t\t'number': {\n\t\t\tpattern: /(^|[^\\w-])-?(?:0x[0-9a-f]+|(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?|NaN|Infinity)(?![\\w-])/i,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'operator': /\\.{3}|[=:?<>-]/,\n\t\t'punctuation': /[(){}[\\].,;]/\n\t};\n\n\tfor (var key in Prism.languages['web-idl']) {\n\t\tif (key !== 'class-name') {\n\t\t\ttypeInside[key] = Prism.languages['web-idl'][key];\n\t\t}\n\t}\n\n\tPrism.languages['webidl'] = Prism.languages['web-idl'];\n\n}(Prism));\n/components/prism-liquid.js\nAPrism.languages.liquid = {\n\t'comment': {\n\t\tpattern: /(^\\{%\\s*comment\\s*%\\})[\\s\\S]+(?=\\{%\\s*endcomment\\s*%\\}$)/,\n\t\tlookbehind: true\n\t},\n\t'delimiter': {\n\t\tpattern: /^\\{(?:\\{\\{|[%\\{])-?|-?(?:\\}\\}|[%\\}])\\}$/,\n\t\talias: 'punctuation'\n\t},\n\t'string': {\n\t\tpattern: /\"[^\"]*\"|'[^']*'/,\n\t\tgreedy: true\n\t},\n\t'keyword': /\\b(?:as|assign|break|(?:end)?(?:capture|case|comment|for|form|if|paginate|raw|style|tablerow|unless)|continue|cycle|decrement|echo|else|elsif|in|include|increment|limit|liquid|offset|range|render|reversed|section|when|with)\\b/,\n\t'object': /\\b(?:address|all_country_option_tags|article|block|blog|cart|checkout|collection|color|country|country_option_tags|currency|current_page|current_tags|customer|customer_address|date|discount_allocation|discount_application|external_video|filter|filter_value|font|forloop|fulfillment|generic_file|gift_card|group|handle|image|line_item|link|linklist|localization|location|measurement|media|metafield|model|model_source|order|page|page_description|page_image|page_title|part|policy|product|product_option|recommendations|request|robots|routes|rule|script|search|selling_plan|selling_plan_allocation|selling_plan_group|shipping_method|shop|shop_locale|sitemap|store_availability|tax_line|template|theme|transaction|unit_price_measurement|user_agent|variant|video|video_source)\\b/,\n\t'function': [\n\t\t{\n\t\t\tpattern: /(\\|\\s*)\\w+/,\n\t\t\tlookbehind: true,\n\t\t\talias: 'filter'\n\t\t},\n\t\t{\n\t\t\t// array functions\n\t\t\tpattern: /(\\.\\s*)(?:first|last|size)/,\n\t\t\tlookbehind: true\n\t\t}\n\t],\n\t'boolean': /\\b(?:false|nil|true)\\b/,\n\t'range': {\n\t\tpattern: /\\.\\./,\n\t\talias: 'operator'\n\t},\n\t// https://github.com/Shopify/liquid/blob/698f5e0d967423e013f6169d9111bd969bd78337/lib/liquid/lexer.rb#L21\n\t'number': /\\b\\d+(?:\\.\\d+)?\\b/,\n\t'operator': /[!=]=|<>|[<>]=?|[|?:=-]|\\b(?:and|contains(?=\\s)|or)\\b/,\n\t'punctuation': /[.,\\[\\]()]/,\n\t'empty': {\n\t\tpattern: /\\bempty\\b/,\n\t\talias: 'keyword'\n\t},\n};\n\nPrism.hooks.add('before-tokenize', function (env) {\n\tvar liquidPattern = /\\{%\\s*comment\\s*%\\}[\\s\\S]*?\\{%\\s*endcomment\\s*%\\}|\\{(?:%[\\s\\S]*?%|\\{\\{[\\s\\S]*?\\}\\}|\\{[\\s\\S]*?\\})\\}/g;\n\tvar insideRaw = false;\n\n\tPrism.languages['markup-templating'].buildPlaceholders(env, 'liquid', liquidPattern, function (match) {\n\t\tvar tagMatch = /^\\{%-?\\s*(\\w+)/.exec(match);\n\t\tif (tagMatch) {\n\t\t\tvar tag = tagMatch[1];\n\t\t\tif (tag === 'raw' && !insideRaw) {\n\t\t\t\tinsideRaw = true;\n\t\t\t\treturn true;\n\t\t\t} else if (tag === 'endraw') {\n\t\t\t\tinsideRaw = false;\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn !insideRaw;\n\t});\n});\n\nPrism.hooks.add('after-tokenize', function (env) {\n\tPrism.languages['markup-templating'].tokenizePlaceholders(env, 'liquid');\n});\n/components/prism-kotlin.js\nj(function (Prism) {\n\tPrism.languages.kotlin = Prism.languages.extend('clike', {\n\t\t'keyword': {\n\t\t\t// The lookbehind prevents wrong highlighting of e.g. kotlin.properties.get\n\t\t\tpattern: /(^|[^.])\\b(?:abstract|actual|annotation|as|break|by|catch|class|companion|const|constructor|continue|crossinline|data|do|dynamic|else|enum|expect|external|final|finally|for|fun|get|if|import|in|infix|init|inline|inner|interface|internal|is|lateinit|noinline|null|object|open|operator|out|override|package|private|protected|public|reified|return|sealed|set|super|suspend|tailrec|this|throw|to|try|typealias|val|var|vararg|when|where|while)\\b/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'function': [\n\t\t\t{\n\t\t\t\tpattern: /(?:`[^\\r\\n`]+`|\\b\\w+)(?=\\s*\\()/,\n\t\t\t\tgreedy: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /(\\.)(?:`[^\\r\\n`]+`|\\w+)(?=\\s*\\{)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true\n\t\t\t}\n\t\t],\n\t\t'number': /\\b(?:0[xX][\\da-fA-F]+(?:_[\\da-fA-F]+)*|0[bB][01]+(?:_[01]+)*|\\d+(?:_\\d+)*(?:\\.\\d+(?:_\\d+)*)?(?:[eE][+-]?\\d+(?:_\\d+)*)?[fFL]?)\\b/,\n\t\t'operator': /\\+[+=]?|-[-=>]?|==?=?|!(?:!|==?)?|[\\/*%<>]=?|[?:]:?|\\.\\.|&&|\\|\\||\\b(?:and|inv|or|shl|shr|ushr|xor)\\b/\n\t});\n\n\tdelete Prism.languages.kotlin['class-name'];\n\n\tvar interpolationInside = {\n\t\t'interpolation-punctuation': {\n\t\t\tpattern: /^\\$\\{?|\\}$/,\n\t\t\talias: 'punctuation'\n\t\t},\n\t\t'expression': {\n\t\t\tpattern: /[\\s\\S]+/,\n\t\t\tinside: Prism.languages.kotlin\n\t\t}\n\t};\n\n\tPrism.languages.insertBefore('kotlin', 'string', {\n\t\t// https://kotlinlang.org/spec/expressions.html#string-interpolation-expressions\n\t\t'string-literal': [\n\t\t\t{\n\t\t\t\tpattern: /\"\"\"(?:[^$]|\\$(?:(?!\\{)|\\{[^{}]*\\}))*?\"\"\"/,\n\t\t\t\talias: 'multiline',\n\t\t\t\tinside: {\n\t\t\t\t\t'interpolation': {\n\t\t\t\t\t\tpattern: /\\$(?:[a-z_]\\w*|\\{[^{}]*\\})/i,\n\t\t\t\t\t\tinside: interpolationInside\n\t\t\t\t\t},\n\t\t\t\t\t'string': /[\\s\\S]+/\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /\"(?:[^\"\\\\\\r\\n$]|\\\\.|\\$(?:(?!\\{)|\\{[^{}]*\\}))*\"/,\n\t\t\t\talias: 'singleline',\n\t\t\t\tinside: {\n\t\t\t\t\t'interpolation': {\n\t\t\t\t\t\tpattern: /((?:^|[^\\\\])(?:\\\\{2})*)\\$(?:[a-z_]\\w*|\\{[^{}]*\\})/i,\n\t\t\t\t\t\tlookbehind: true,\n\t\t\t\t\t\tinside: interpolationInside\n\t\t\t\t\t},\n\t\t\t\t\t'string': /[\\s\\S]+/\n\t\t\t\t}\n\t\t\t}\n\t\t],\n\t\t'char': {\n\t\t\t// https://kotlinlang.org/spec/expressions.html#character-literals\n\t\t\tpattern: /'(?:[^'\\\\\\r\\n]|\\\\(?:.|u[a-fA-F0-9]{0,4}))'/,\n\t\t\tgreedy: true\n\t\t}\n\t});\n\n\tdelete Prism.languages.kotlin['string'];\n\n\tPrism.languages.insertBefore('kotlin', 'keyword', {\n\t\t'annotation': {\n\t\t\tpattern: /\\B@(?:\\w+:)?(?:[A-Z]\\w*|\\[[^\\]]+\\])/,\n\t\t\talias: 'builtin'\n\t\t}\n\t});\n\n\tPrism.languages.insertBefore('kotlin', 'function', {\n\t\t'label': {\n\t\t\tpattern: /\\b\\w+@|@\\w+\\b/,\n\t\t\talias: 'symbol'\n\t\t}\n\t});\n\n\tPrism.languages.kt = Prism.languages.kotlin;\n\tPrism.languages.kts = Prism.languages.kotlin;\n}(Prism));\n/components/prism-glsl.js\u0004SPrism.languages.glsl = Prism.languages.extend('c', {\n\t'keyword': /\\b(?:active|asm|atomic_uint|attribute|[ibdu]?vec[234]|bool|break|buffer|case|cast|centroid|class|coherent|common|const|continue|d?mat[234](?:x[234])?|default|discard|do|double|else|enum|extern|external|false|filter|fixed|flat|float|for|fvec[234]|goto|half|highp|hvec[234]|[iu]?sampler2DMS(?:Array)?|[iu]?sampler2DRect|[iu]?samplerBuffer|[iu]?samplerCube|[iu]?samplerCubeArray|[iu]?sampler[123]D|[iu]?sampler[12]DArray|[iu]?image2DMS(?:Array)?|[iu]?image2DRect|[iu]?imageBuffer|[iu]?imageCube|[iu]?imageCubeArray|[iu]?image[123]D|[iu]?image[12]DArray|if|in|inline|inout|input|int|interface|invariant|layout|long|lowp|mediump|namespace|noinline|noperspective|out|output|partition|patch|precise|precision|public|readonly|resource|restrict|return|sample|sampler[12]DArrayShadow|sampler[12]DShadow|sampler2DRectShadow|sampler3DRect|samplerCubeArrayShadow|samplerCubeShadow|shared|short|sizeof|smooth|static|struct|subroutine|superp|switch|template|this|true|typedef|uint|uniform|union|unsigned|using|varying|void|volatile|while|writeonly)\\b/\n});\n/components/prism-scheme.min.js\u000fz!function(e){e.languages.scheme={comment:/;.*|#;\\s*(?:\\((?:[^()]|\\([^()]*\\))*\\)|\\[(?:[^\\[\\]]|\\[[^\\[\\]]*\\])*\\])|#\\|(?:[^#|]|#(?!\\|)|\\|(?!#)|#\\|(?:[^#|]|#(?!\\|)|\\|(?!#))*\\|#)*\\|#/,string:{pattern:/\"(?:[^\"\\\\]|\\\\.)*\"/,greedy:!0},symbol:{pattern:/'[^()\\[\\]#'\\s]+/,greedy:!0},char:{pattern:/#\\\\(?:[ux][a-fA-F\\d]+\\b|[-a-zA-Z]+\\b|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|\\S)/,greedy:!0},\"lambda-parameter\":[{pattern:/((?:^|[^'`#])[(\\[]lambda\\s+)(?:[^|()\\[\\]'\\s]+|\\|(?:[^\\\\|]|\\\\.)*\\|)/,lookbehind:!0},{pattern:/((?:^|[^'`#])[(\\[]lambda\\s+[(\\[])[^()\\[\\]']+/,lookbehind:!0}],keyword:{pattern:/((?:^|[^'`#])[(\\[])(?:begin|case(?:-lambda)?|cond(?:-expand)?|define(?:-library|-macro|-record-type|-syntax|-values)?|defmacro|delay(?:-force)?|do|else|except|export|guard|if|import|include(?:-ci|-library-declarations)?|lambda|let(?:rec)?(?:-syntax|-values|\\*)?|let\\*-values|only|parameterize|prefix|(?:quasi-?)?quote|rename|set!|syntax-(?:case|rules)|unless|unquote(?:-splicing)?|when)(?=[()\\[\\]\\s]|$)/,lookbehind:!0},builtin:{pattern:/((?:^|[^'`#])[(\\[])(?:abs|and|append|apply|assoc|ass[qv]|binary-port\\?|boolean=?\\?|bytevector(?:-append|-copy|-copy!|-length|-u8-ref|-u8-set!|\\?)?|caar|cadr|call-with-(?:current-continuation|port|values)|call\\/cc|car|cdar|cddr|cdr|ceiling|char(?:->integer|-ready\\?|\\?|<\\?|<=\\?|=\\?|>\\?|>=\\?)|close-(?:input-port|output-port|port)|complex\\?|cons|current-(?:error|input|output)-port|denominator|dynamic-wind|eof-object\\??|eq\\?|equal\\?|eqv\\?|error|error-object(?:-irritants|-message|\\?)|eval|even\\?|exact(?:-integer-sqrt|-integer\\?|\\?)?|expt|features|file-error\\?|floor(?:-quotient|-remainder|\\/)?|flush-output-port|for-each|gcd|get-output-(?:bytevector|string)|inexact\\??|input-port(?:-open\\?|\\?)|integer(?:->char|\\?)|lcm|length|list(?:->string|->vector|-copy|-ref|-set!|-tail|\\?)?|make-(?:bytevector|list|parameter|string|vector)|map|max|member|memq|memv|min|modulo|negative\\?|newline|not|null\\?|number(?:->string|\\?)|numerator|odd\\?|open-(?:input|output)-(?:bytevector|string)|or|output-port(?:-open\\?|\\?)|pair\\?|peek-char|peek-u8|port\\?|positive\\?|procedure\\?|quotient|raise|raise-continuable|rational\\?|rationalize|read-(?:bytevector|bytevector!|char|error\\?|line|string|u8)|real\\?|remainder|reverse|round|set-c[ad]r!|square|string(?:->list|->number|->symbol|->utf8|->vector|-append|-copy|-copy!|-fill!|-for-each|-length|-map|-ref|-set!|\\?|<\\?|<=\\?|=\\?|>\\?|>=\\?)?|substring|symbol(?:->string|\\?|=\\?)|syntax-error|textual-port\\?|truncate(?:-quotient|-remainder|\\/)?|u8-ready\\?|utf8->string|values|vector(?:->list|->string|-append|-copy|-copy!|-fill!|-for-each|-length|-map|-ref|-set!|\\?)?|with-exception-handler|write-(?:bytevector|char|string|u8)|zero\\?)(?=[()\\[\\]\\s]|$)/,lookbehind:!0},operator:{pattern:/((?:^|[^'`#])[(\\[])(?:[-+*%/]|[<>]=?|=>?)(?=[()\\[\\]\\s]|$)/,lookbehind:!0},number:{pattern:RegExp(function(e){for(var r in e)e[r]=e[r].replace(/<[\\w\\s]+>/g,(function(r){return\"(?:\"+e[r].trim()+\")\"}));return e[r]}({\"<ureal dec>\":\"\\\\d+(?:/\\\\d+)|(?:\\\\d+(?:\\\\.\\\\d*)?|\\\\.\\\\d+)(?:[esfdl][+-]?\\\\d+)?\",\"<real dec>\":\"[+-]?<ureal dec>|[+-](?:inf|nan)\\\\.0\",\"<imaginary dec>\":\"[+-](?:<ureal dec>|(?:inf|nan)\\\\.0)?i\",\"<complex dec>\":\"<real dec>(?:@<real dec>|<imaginary dec>)?|<imaginary dec>\",\"<num dec>\":\"(?:#d(?:#[ei])?|#[ei](?:#d)?)?<complex dec>\",\"<ureal box>\":\"[0-9a-f]+(?:/[0-9a-f]+)?\",\"<real box>\":\"[+-]?<ureal box>|[+-](?:inf|nan)\\\\.0\",\"<imaginary box>\":\"[+-](?:<ureal box>|(?:inf|nan)\\\\.0)?i\",\"<complex box>\":\"<real box>(?:@<real box>|<imaginary box>)?|<imaginary box>\",\"<num box>\":\"#[box](?:#[ei])?|(?:#[ei])?#[box]<complex box>\",\"<number>\":\"(^|[()\\\\[\\\\]\\\\s])(?:<num dec>|<num box>)(?=[()\\\\[\\\\]\\\\s]|$)\"}),\"i\"),lookbehind:!0},boolean:{pattern:/(^|[()\\[\\]\\s])#(?:[ft]|false|true)(?=[()\\[\\]\\s]|$)/,lookbehind:!0},function:{pattern:/((?:^|[^'`#])[(\\[])(?:[^|()\\[\\]'\\s]+|\\|(?:[^\\\\|]|\\\\.)*\\|)(?=[()\\[\\]\\s]|$)/,lookbehind:!0},identifier:{pattern:/(^|[()\\[\\]\\s])\\|(?:[^\\\\|]|\\\\.)*\\|(?=[()\\[\\]\\s]|$)/,lookbehind:!0,greedy:!0},punctuation:/[()\\[\\]']/}}(Prism);/components/prism-http.js\u000f(function (Prism) {\n\n\t/**\n\t * @param {string} name\n\t * @returns {RegExp}\n\t */\n\tfunction headerValueOf(name) {\n\t\treturn RegExp('(^(?:' + name + '):[ \\t]*(?![ \\t]))[^]+', 'i');\n\t}\n\n\tPrism.languages.http = {\n\t\t'request-line': {\n\t\t\tpattern: /^(?:CONNECT|DELETE|GET|HEAD|OPTIONS|PATCH|POST|PRI|PUT|SEARCH|TRACE)\\s(?:https?:\\/\\/|\\/)\\S*\\sHTTP\\/[\\d.]+/m,\n\t\t\tinside: {\n\t\t\t\t// HTTP Method\n\t\t\t\t'method': {\n\t\t\t\t\tpattern: /^[A-Z]+\\b/,\n\t\t\t\t\talias: 'property'\n\t\t\t\t},\n\t\t\t\t// Request Target e.g. http://example.com, /path/to/file\n\t\t\t\t'request-target': {\n\t\t\t\t\tpattern: /^(\\s)(?:https?:\\/\\/|\\/)\\S*(?=\\s)/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\talias: 'url',\n\t\t\t\t\tinside: Prism.languages.uri\n\t\t\t\t},\n\t\t\t\t// HTTP Version\n\t\t\t\t'http-version': {\n\t\t\t\t\tpattern: /^(\\s)HTTP\\/[\\d.]+/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\talias: 'property'\n\t\t\t\t},\n\t\t\t}\n\t\t},\n\t\t'response-status': {\n\t\t\tpattern: /^HTTP\\/[\\d.]+ \\d+ .+/m,\n\t\t\tinside: {\n\t\t\t\t// HTTP Version\n\t\t\t\t'http-version': {\n\t\t\t\t\tpattern: /^HTTP\\/[\\d.]+/,\n\t\t\t\t\talias: 'property'\n\t\t\t\t},\n\t\t\t\t// Status Code\n\t\t\t\t'status-code': {\n\t\t\t\t\tpattern: /^(\\s)\\d+(?=\\s)/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\talias: 'number'\n\t\t\t\t},\n\t\t\t\t// Reason Phrase\n\t\t\t\t'reason-phrase': {\n\t\t\t\t\tpattern: /^(\\s).+/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\talias: 'string'\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t'header': {\n\t\t\tpattern: /^[\\w-]+:.+(?:(?:\\r\\n?|\\n)[ \\t].+)*/m,\n\t\t\tinside: {\n\t\t\t\t'header-value': [\n\t\t\t\t\t{\n\t\t\t\t\t\tpattern: headerValueOf(/Content-Security-Policy/.source),\n\t\t\t\t\t\tlookbehind: true,\n\t\t\t\t\t\talias: ['csp', 'languages-csp'],\n\t\t\t\t\t\tinside: Prism.languages.csp\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tpattern: headerValueOf(/Public-Key-Pins(?:-Report-Only)?/.source),\n\t\t\t\t\t\tlookbehind: true,\n\t\t\t\t\t\talias: ['hpkp', 'languages-hpkp'],\n\t\t\t\t\t\tinside: Prism.languages.hpkp\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tpattern: headerValueOf(/Strict-Transport-Security/.source),\n\t\t\t\t\t\tlookbehind: true,\n\t\t\t\t\t\talias: ['hsts', 'languages-hsts'],\n\t\t\t\t\t\tinside: Prism.languages.hsts\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tpattern: headerValueOf(/[^:]+/.source),\n\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t'header-name': {\n\t\t\t\t\tpattern: /^[^:]+/,\n\t\t\t\t\talias: 'keyword'\n\t\t\t\t},\n\t\t\t\t'punctuation': /^:/\n\t\t\t}\n\t\t}\n\t};\n\n\t// Create a mapping of Content-Type headers to language definitions\n\tvar langs = Prism.languages;\n\tvar httpLanguages = {\n\t\t'application/javascript': langs.javascript,\n\t\t'application/json': langs.json || langs.javascript,\n\t\t'application/xml': langs.xml,\n\t\t'text/xml': langs.xml,\n\t\t'text/html': langs.html,\n\t\t'text/css': langs.css,\n\t\t'text/plain': langs.plain\n\t};\n\n\t// Declare which types can also be suffixes\n\tvar suffixTypes = {\n\t\t'application/json': true,\n\t\t'application/xml': true\n\t};\n\n\t/**\n\t * Returns a pattern for the given content type which matches it and any type which has it as a suffix.\n\t *\n\t * @param {string} contentType\n\t * @returns {string}\n\t */\n\tfunction getSuffixPattern(contentType) {\n\t\tvar suffix = contentType.replace(/^[a-z]+\\//, '');\n\t\tvar suffixPattern = '\\\\w+/(?:[\\\\w.-]+\\\\+)+' + suffix + '(?![+\\\\w.-])';\n\t\treturn '(?:' + contentType + '|' + suffixPattern + ')';\n\t}\n\n\t// Insert each content type parser that has its associated language\n\t// currently loaded.\n\tvar options;\n\tfor (var contentType in httpLanguages) {\n\t\tif (httpLanguages[contentType]) {\n\t\t\toptions = options || {};\n\n\t\t\tvar pattern = suffixTypes[contentType] ? getSuffixPattern(contentType) : contentType;\n\t\t\toptions[contentType.replace(/\\//g, '-')] = {\n\t\t\t\tpattern: RegExp(\n\t\t\t\t\t'(' + /content-type:\\s*/.source + pattern + /(?:(?:\\r\\n?|\\n)[\\w-].*)*(?:\\r(?:\\n|(?!\\n))|\\n)/.source + ')' +\n\t\t\t\t\t// This is a little interesting:\n\t\t\t\t\t// The HTTP format spec required 1 empty line before the body to make everything unambiguous.\n\t\t\t\t\t// However, when writing code by hand (e.g. to display on a website) people can forget about this,\n\t\t\t\t\t// so we want to be liberal here. We will allow the empty line to be omitted if the first line of\n\t\t\t\t\t// the body does not start with a [\\w-] character (as headers do).\n\t\t\t\t\t/[^ \\t\\w-][\\s\\S]*/.source,\n\t\t\t\t\t'i'\n\t\t\t\t),\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: httpLanguages[contentType]\n\t\t\t};\n\t\t}\n\t}\n\tif (options) {\n\t\tPrism.languages.insertBefore('http', 'header', options);\n\t}\n\n}(Prism));\n/themes/prism-funky.css\t/**\n * prism.js Funky theme\n * Based on “Polyfilling the gaps” talk slides http://lea.verou.me/polyfilling-the-gaps/\n * @author Lea Verou\n */\n\ncode[class*=\"language-\"],\npre[class*=\"language-\"] {\n\tfont-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;\n\tfont-size: 1em;\n\ttext-align: left;\n\twhite-space: pre;\n\tword-spacing: normal;\n\tword-break: normal;\n\tword-wrap: normal;\n\tline-height: 1.5;\n\n\t-moz-tab-size: 4;\n\t-o-tab-size: 4;\n\ttab-size: 4;\n\n\t-webkit-hyphens: none;\n\t-moz-hyphens: none;\n\t-ms-hyphens: none;\n\thyphens: none;\n}\n\n/* Code blocks */\npre[class*=\"language-\"] {\n\tpadding: .4em .8em;\n\tmargin: .5em 0;\n\toverflow: auto;\n\tbackground: url('data:image/svg+xml;charset=utf-8,<svg%20version%3D\"1.1\"%20xmlns%3D\"http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg\"%20width%3D\"100\"%20height%3D\"100\"%20fill%3D\"rgba(0%2C0%2C0%2C.2)\">%0D%0A<polygon%20points%3D\"0%2C50%2050%2C0%200%2C0\"%20%2F>%0D%0A<polygon%20points%3D\"0%2C100%2050%2C100%20100%2C50%20100%2C0\"%20%2F>%0D%0A<%2Fsvg>');\n\tbackground-size: 1em 1em;\n}\n\ncode[class*=\"language-\"] {\n\tbackground: black;\n\tcolor: white;\n\tbox-shadow: -.3em 0 0 .3em black, .3em 0 0 .3em black;\n}\n\n/* Inline code */\n:not(pre) > code[class*=\"language-\"] {\n\tpadding: .2em;\n\tborder-radius: .3em;\n\tbox-shadow: none;\n\twhite-space: normal;\n}\n\n.token.comment,\n.token.prolog,\n.token.doctype,\n.token.cdata {\n\tcolor: #aaa;\n}\n\n.token.punctuation {\n\tcolor: #999;\n}\n\n.token.namespace {\n\topacity: .7;\n}\n\n.token.property,\n.token.tag,\n.token.boolean,\n.token.number,\n.token.constant,\n.token.symbol {\n\tcolor: #0cf;\n}\n\n.token.selector,\n.token.attr-name,\n.token.string,\n.token.char,\n.token.builtin {\n\tcolor: yellow;\n}\n\n.token.operator,\n.token.entity,\n.token.url,\n.language-css .token.string,\n.token.variable,\n.token.inserted {\n\tcolor: yellowgreen;\n}\n\n.token.atrule,\n.token.attr-value,\n.token.keyword {\n\tcolor: deeppink;\n}\n\n.token.regex,\n.token.important {\n\tcolor: orange;\n}\n\n.token.important,\n.token.bold {\n\tfont-weight: bold;\n}\n.token.italic {\n\tfont-style: italic;\n}\n\n.token.entity {\n\tcursor: help;\n}\n\n.token.deleted {\n\tcolor: red;\n}\n\n/* Plugin styles: Diff Highlight */\npre.diff-highlight.diff-highlight > code .token.deleted:not(.prefix),\npre > code.diff-highlight.diff-highlight .token.deleted:not(.prefix) {\n\tbackground-color: rgba(255, 0, 0, .3);\n\tdisplay: inline;\n}\n\npre.diff-highlight.diff-highlight > code .token.inserted:not(.prefix),\npre > code.diff-highlight.diff-highlight .token.inserted:not(.prefix) {\n\tbackground-color: rgba(0, 255, 128, .3);\n\tdisplay: inline;\n}\n/components/prism-bbcode.js\u0002aPrism.languages.bbcode = {\n\t'tag': {\n\t\tpattern: /\\[\\/?[^\\s=\\]]+(?:\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\"\\]=]+))?(?:\\s+[^\\s=\\]]+\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\"\\]=]+))*\\s*\\]/,\n\t\tinside: {\n\t\t\t'tag': {\n\t\t\t\tpattern: /^\\[\\/?[^\\s=\\]]+/,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': /^\\[\\/?/\n\t\t\t\t}\n\t\t\t},\n\t\t\t'attr-value': {\n\t\t\t\tpattern: /=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\"\\]=]+)/,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': [\n\t\t\t\t\t\t/^=/,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpattern: /^(\\s*)[\"']|[\"']$/,\n\t\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t'punctuation': /\\]/,\n\t\t\t'attr-name': /[^\\s=\\]]+/\n\t\t}\n\t}\n};\n\nPrism.languages.shortcode = Prism.languages.bbcode;\n/components/prism-smarty.js\f0(function (Prism) {\n\n\tPrism.languages.smarty = {\n\t\t'comment': {\n\t\t\tpattern: /^\\{\\*[\\s\\S]*?\\*\\}/,\n\t\t\tgreedy: true\n\t\t},\n\t\t'embedded-php': {\n\t\t\tpattern: /^\\{php\\}[\\s\\S]*?\\{\\/php\\}/,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'smarty': {\n\t\t\t\t\tpattern: /^\\{php\\}|\\{\\/php\\}$/,\n\t\t\t\t\tinside: null // see below\n\t\t\t\t},\n\t\t\t\t'php': {\n\t\t\t\t\tpattern: /[\\s\\S]+/,\n\t\t\t\t\talias: 'language-php',\n\t\t\t\t\tinside: Prism.languages.php\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t'string': [\n\t\t\t{\n\t\t\t\tpattern: /\"(?:\\\\.|[^\"\\\\\\r\\n])*\"/,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'interpolation': {\n\t\t\t\t\t\tpattern: /\\{[^{}]*\\}|`[^`]*`/,\n\t\t\t\t\t\tinside: {\n\t\t\t\t\t\t\t'interpolation-punctuation': {\n\t\t\t\t\t\t\t\tpattern: /^[{`]|[`}]$/,\n\t\t\t\t\t\t\t\talias: 'punctuation'\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t'expression': {\n\t\t\t\t\t\t\t\tpattern: /[\\s\\S]+/,\n\t\t\t\t\t\t\t\tinside: null // see below\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t'variable': /\\$\\w+/\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /'(?:\\\\.|[^'\\\\\\r\\n])*'/,\n\t\t\t\tgreedy: true\n\t\t\t},\n\t\t],\n\t\t'keyword': {\n\t\t\tpattern: /(^\\{\\/?)[a-z_]\\w*\\b(?!\\()/i,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true\n\t\t},\n\t\t'delimiter': {\n\t\t\tpattern: /^\\{\\/?|\\}$/,\n\t\t\tgreedy: true,\n\t\t\talias: 'punctuation'\n\t\t},\n\t\t'number': /\\b0x[\\dA-Fa-f]+|(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:[Ee][-+]?\\d+)?/,\n\t\t'variable': [\n\t\t\t/\\$(?!\\d)\\w+/,\n\t\t\t/#(?!\\d)\\w+#/,\n\t\t\t{\n\t\t\t\tpattern: /(\\.|->|\\w\\s*=)(?!\\d)\\w+\\b(?!\\()/,\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /(\\[)(?!\\d)\\w+(?=\\])/,\n\t\t\t\tlookbehind: true\n\t\t\t}\n\t\t],\n\t\t'function': {\n\t\t\tpattern: /(\\|\\s*)@?[a-z_]\\w*|\\b[a-z_]\\w*(?=\\()/i,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'attr-name': /\\b[a-z_]\\w*(?=\\s*=)/i,\n\t\t'boolean': /\\b(?:false|no|off|on|true|yes)\\b/,\n\t\t'punctuation': /[\\[\\](){}.,:`]|->/,\n\t\t'operator': [\n\t\t\t/[+\\-*\\/%]|==?=?|[!<>]=?|&&|\\|\\|?/,\n\t\t\t/\\bis\\s+(?:not\\s+)?(?:div|even|odd)(?:\\s+by)?\\b/,\n\t\t\t/\\b(?:and|eq|gt?e|gt|lt?e|lt|mod|neq?|not|or)\\b/\n\t\t]\n\t};\n\n\tPrism.languages.smarty['embedded-php'].inside.smarty.inside = Prism.languages.smarty;\n\tPrism.languages.smarty.string[0].inside.interpolation.inside.expression.inside = Prism.languages.smarty;\n\n\tvar string = /\"(?:\\\\.|[^\"\\\\\\r\\n])*\"|'(?:\\\\.|[^'\\\\\\r\\n])*'/;\n\tvar smartyPattern = RegExp(\n\t\t// comments\n\t\t/\\{\\*[\\s\\S]*?\\*\\}/.source +\n\t\t'|' +\n\t\t// php tags\n\t\t/\\{php\\}[\\s\\S]*?\\{\\/php\\}/.source +\n\t\t'|' +\n\t\t// smarty blocks\n\t\t/\\{(?:[^{}\"']|<str>|\\{(?:[^{}\"']|<str>|\\{(?:[^{}\"']|<str>)*\\})*\\})*\\}/.source\n\t\t\t.replace(/<str>/g, function () { return string.source; }),\n\t\t'g'\n\t);\n\n\t// Tokenize all inline Smarty expressions\n\tPrism.hooks.add('before-tokenize', function (env) {\n\t\tvar smartyLiteralStart = '{literal}';\n\t\tvar smartyLiteralEnd = '{/literal}';\n\t\tvar smartyLiteralMode = false;\n\n\t\tPrism.languages['markup-templating'].buildPlaceholders(env, 'smarty', smartyPattern, function (match) {\n\t\t\t// Smarty tags inside {literal} block are ignored\n\t\t\tif (match === smartyLiteralEnd) {\n\t\t\t\tsmartyLiteralMode = false;\n\t\t\t}\n\n\t\t\tif (!smartyLiteralMode) {\n\t\t\t\tif (match === smartyLiteralStart) {\n\t\t\t\t\tsmartyLiteralMode = true;\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t});\n\t});\n\n\t// Re-insert the tokens after tokenizing\n\tPrism.hooks.add('after-tokenize', function (env) {\n\t\tPrism.languages['markup-templating'].tokenizePlaceholders(env, 'smarty');\n\t});\n\n}(Prism));\n/components/prism-systemd.js\u0006// https://www.freedesktop.org/software/systemd/man/systemd.syntax.html\n\n(function (Prism) {\n\n\tvar comment = {\n\t\tpattern: /^[;#].*/m,\n\t\tgreedy: true\n\t};\n\n\tvar quotesSource = /\"(?:[^\\r\\n\"\\\\]|\\\\(?:[^\\r]|\\r\\n?))*\"(?!\\S)/.source;\n\n\tPrism.languages.systemd = {\n\t\t'comment': comment,\n\n\t\t'section': {\n\t\t\tpattern: /^\\[[^\\n\\r\\[\\]]*\\](?=[ \\t]*$)/m,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'punctuation': /^\\[|\\]$/,\n\t\t\t\t'section-name': {\n\t\t\t\t\tpattern: /[\\s\\S]+/,\n\t\t\t\t\talias: 'selector'\n\t\t\t\t},\n\t\t\t}\n\t\t},\n\n\t\t'key': {\n\t\t\tpattern: /^[^\\s=]+(?=[ \\t]*=)/m,\n\t\t\tgreedy: true,\n\t\t\talias: 'attr-name'\n\t\t},\n\t\t'value': {\n\t\t\t// This pattern is quite complex because of two properties:\n\t\t\t//  1) Quotes (strings) must be preceded by a space. Since we can't use lookbehinds, we have to \"resolve\"\n\t\t\t//     the lookbehind. You will see this in the main loop where spaces are handled separately.\n\t\t\t//  2) Line continuations.\n\t\t\t//     After line continuations, empty lines and comments are ignored so we have to consume them.\n\t\t\tpattern: RegExp(\n\t\t\t\t/(=[ \\t]*(?!\\s))/.source +\n\t\t\t\t// the value either starts with quotes or not\n\t\t\t\t'(?:' + quotesSource + '|(?=[^\"\\r\\n]))' +\n\t\t\t\t// main loop\n\t\t\t\t'(?:' + (\n\t\t\t\t\t/[^\\s\\\\]/.source +\n\t\t\t\t\t// handle spaces separately because of quotes\n\t\t\t\t\t'|' + '[ \\t]+(?:(?![ \\t\"])|' + quotesSource + ')' +\n\t\t\t\t\t// line continuation\n\t\t\t\t\t'|' + /\\\\[\\r\\n]+(?:[#;].*[\\r\\n]+)*(?![#;])/.source\n\t\t\t\t) +\n\t\t\t\t')*'\n\t\t\t),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\talias: 'attr-value',\n\t\t\tinside: {\n\t\t\t\t'comment': comment,\n\t\t\t\t'quoted': {\n\t\t\t\t\tpattern: RegExp(/(^|\\s)/.source + quotesSource),\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tgreedy: true,\n\t\t\t\t},\n\t\t\t\t'punctuation': /\\\\$/m,\n\n\t\t\t\t'boolean': {\n\t\t\t\t\tpattern: /^(?:false|no|off|on|true|yes)$/,\n\t\t\t\t\tgreedy: true\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t'punctuation': /=/\n\t};\n\n}(Prism));\n/components/prism-phpdoc.js\u00038(function (Prism) {\n\n\tvar typeExpression = /(?:\\b[a-zA-Z]\\w*|[|\\\\[\\]])+/.source;\n\n\tPrism.languages.phpdoc = Prism.languages.extend('javadoclike', {\n\t\t'parameter': {\n\t\t\tpattern: RegExp('(@(?:global|param|property(?:-read|-write)?|var)\\\\s+(?:' + typeExpression + '\\\\s+)?)\\\\$\\\\w+'),\n\t\t\tlookbehind: true\n\t\t}\n\t});\n\n\tPrism.languages.insertBefore('phpdoc', 'keyword', {\n\t\t'class-name': [\n\t\t\t{\n\t\t\t\tpattern: RegExp('(@(?:global|package|param|property(?:-read|-write)?|return|subpackage|throws|var)\\\\s+)' + typeExpression),\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'keyword': /\\b(?:array|bool|boolean|callback|double|false|float|int|integer|mixed|null|object|resource|self|string|true|void)\\b/,\n\t\t\t\t\t'punctuation': /[|\\\\[\\]()]/\n\t\t\t\t}\n\t\t\t}\n\t\t],\n\t});\n\n\tPrism.languages.javadoclike.addSupport('php', Prism.languages.phpdoc);\n\n}(Prism));\n/components/prism-cypher.js\u0005RPrism.languages.cypher = {\n\t// https://neo4j.com/docs/cypher-manual/current/syntax/comments/\n\t'comment': /\\/\\/.*/,\n\t'string': {\n\t\tpattern: /\"(?:[^\"\\\\\\r\\n]|\\\\.)*\"|'(?:[^'\\\\\\r\\n]|\\\\.)*'/,\n\t\tgreedy: true\n\t},\n\t'class-name': {\n\t\tpattern: /(:\\s*)(?:\\w+|`(?:[^`\\\\\\r\\n])*`)(?=\\s*[{):])/,\n\t\tlookbehind: true,\n\t\tgreedy: true\n\t},\n\t'relationship': {\n\t\tpattern: /(-\\[\\s*(?:\\w+\\s*|`(?:[^`\\\\\\r\\n])*`\\s*)?:\\s*|\\|\\s*:\\s*)(?:\\w+|`(?:[^`\\\\\\r\\n])*`)/,\n\t\tlookbehind: true,\n\t\tgreedy: true,\n\t\talias: 'property'\n\t},\n\t'identifier': {\n\t\tpattern: /`(?:[^`\\\\\\r\\n])*`/,\n\t\tgreedy: true\n\t},\n\n\t'variable': /\\$\\w+/,\n\n\t// https://neo4j.com/docs/cypher-manual/current/syntax/reserved/\n\t'keyword': /\\b(?:ADD|ALL|AND|AS|ASC|ASCENDING|ASSERT|BY|CALL|CASE|COMMIT|CONSTRAINT|CONTAINS|CREATE|CSV|DELETE|DESC|DESCENDING|DETACH|DISTINCT|DO|DROP|ELSE|END|ENDS|EXISTS|FOR|FOREACH|IN|INDEX|IS|JOIN|KEY|LIMIT|LOAD|MANDATORY|MATCH|MERGE|NODE|NOT|OF|ON|OPTIONAL|OR|ORDER(?=\\s+BY)|PERIODIC|REMOVE|REQUIRE|RETURN|SCALAR|SCAN|SET|SKIP|START|STARTS|THEN|UNION|UNIQUE|UNWIND|USING|WHEN|WHERE|WITH|XOR|YIELD)\\b/i,\n\n\t'function': /\\b\\w+\\b(?=\\s*\\()/,\n\n\t'boolean': /\\b(?:false|null|true)\\b/i,\n\t'number': /\\b(?:0x[\\da-fA-F]+|\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?)\\b/,\n\t// https://neo4j.com/docs/cypher-manual/current/syntax/operators/\n\t'operator': /:|<--?|--?>?|<>|=~?|[<>]=?|[+*/%^|]|\\.\\.\\.?/,\n\t'punctuation': /[()[\\]{},;.]/\n};\n/components/prism-elm.js\b\u0016Prism.languages.elm = {\n\t'comment': /--.*|\\{-[\\s\\S]*?-\\}/,\n\t'char': {\n\t\tpattern: /'(?:[^\\\\'\\r\\n]|\\\\(?:[abfnrtv\\\\']|\\d+|x[0-9a-fA-F]+|u\\{[0-9a-fA-F]+\\}))'/,\n\t\tgreedy: true\n\t},\n\t'string': [\n\t\t{\n\t\t\t// Multiline strings are wrapped in triple \". Quotes may appear unescaped.\n\t\t\tpattern: /\"\"\"[\\s\\S]*?\"\"\"/,\n\t\t\tgreedy: true\n\t\t},\n\t\t{\n\t\t\tpattern: /\"(?:[^\\\\\"\\r\\n]|\\\\.)*\"/,\n\t\t\tgreedy: true\n\t\t}\n\t],\n\t'import-statement': {\n\t\t// The imported or hidden names are not included in this import\n\t\t// statement. This is because we want to highlight those exactly like\n\t\t// we do for the names in the program.\n\t\tpattern: /(^[\\t ]*)import\\s+[A-Z]\\w*(?:\\.[A-Z]\\w*)*(?:\\s+as\\s+(?:[A-Z]\\w*)(?:\\.[A-Z]\\w*)*)?(?:\\s+exposing\\s+)?/m,\n\t\tlookbehind: true,\n\t\tinside: {\n\t\t\t'keyword': /\\b(?:as|exposing|import)\\b/\n\t\t}\n\t},\n\t'keyword': /\\b(?:alias|as|case|else|exposing|if|in|infixl|infixr|let|module|of|then|type)\\b/,\n\t// These are builtin variables only. Constructors are highlighted later as a constant.\n\t'builtin': /\\b(?:abs|acos|always|asin|atan|atan2|ceiling|clamp|compare|cos|curry|degrees|e|flip|floor|fromPolar|identity|isInfinite|isNaN|logBase|max|min|negate|never|not|pi|radians|rem|round|sin|sqrt|tan|toFloat|toPolar|toString|truncate|turns|uncurry|xor)\\b/,\n\t// decimal integers and floating point numbers | hexadecimal integers\n\t'number': /\\b(?:\\d+(?:\\.\\d+)?(?:e[+-]?\\d+)?|0x[0-9a-f]+)\\b/i,\n\t// Most of this is needed because of the meaning of a single '.'.\n\t// If it stands alone freely, it is the function composition.\n\t// It may also be a separator between a module name and an identifier => no\n\t// operator. If it comes together with other special characters it is an\n\t// operator too.\n\t// Valid operator characters in 0.18: +-/*=.$<>:&|^?%#@~!\n\t// Ref: https://groups.google.com/forum/#!msg/elm-dev/0AHSnDdkSkQ/E0SVU70JEQAJ\n\t'operator': /\\s\\.\\s|[+\\-/*=.$<>:&|^?%#@~!]{2,}|[+\\-/*=$<>:&|^?%#@~!]/,\n\t// In Elm, nearly everything is a variable, do not highlight these.\n\t'hvariable': /\\b(?:[A-Z]\\w*\\.)*[a-z]\\w*\\b/,\n\t'constant': /\\b(?:[A-Z]\\w*\\.)*[A-Z]\\w*\\b/,\n\t'punctuation': /[{}[\\]|(),.:]/\n};\n#/plugins/treeview/prism-treeview.js\u0005(function () {\n\n\tif (typeof Prism === 'undefined') {\n\t\treturn;\n\t}\n\n\tPrism.languages.treeview = {\n\t\t'treeview-part': {\n\t\t\tpattern: /^.+/m,\n\t\t\tinside: {\n\t\t\t\t'entry-line': [\n\t\t\t\t\t{\n\t\t\t\t\t\tpattern: /\\|-- |├── /,\n\t\t\t\t\t\talias: 'line-h'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tpattern: /\\| {3}|│ {3}/,\n\t\t\t\t\t\talias: 'line-v'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tpattern: /`-- |└── /,\n\t\t\t\t\t\talias: 'line-v-last'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tpattern: / {4}/,\n\t\t\t\t\t\talias: 'line-v-gap'\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t'entry-name': {\n\t\t\t\t\tpattern: /.*\\S.*/,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t// symlink\n\t\t\t\t\t\t'operator': / -> /,\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\tPrism.hooks.add('wrap', function (env) {\n\t\tif (env.language === 'treeview' && env.type === 'entry-name') {\n\t\t\tvar classes = env.classes;\n\n\t\t\tvar folderPattern = /(^|[^\\\\])\\/\\s*$/;\n\t\t\tif (folderPattern.test(env.content)) {\n\t\t\t\t// folder\n\n\t\t\t\t// remove trailing /\n\t\t\t\tenv.content = env.content.replace(folderPattern, '$1');\n\t\t\t\tclasses.push('dir');\n\t\t\t} else {\n\t\t\t\t// file\n\n\t\t\t\t// remove trailing file marker\n\t\t\t\tenv.content = env.content.replace(/(^|[^\\\\])[=*|]\\s*$/, '$1');\n\n\t\t\t\tvar parts = env.content.toLowerCase().replace(/\\s+/g, '').split('.');\n\t\t\t\twhile (parts.length > 1) {\n\t\t\t\t\tparts.shift();\n\t\t\t\t\t// Ex. 'foo.min.js' would become '<span class=\"token keyword ext-min-js ext-js\">foo.min.js</span>'\n\t\t\t\t\tclasses.push('ext-' + parts.join('-'));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (env.content[0] === '.') {\n\t\t\t\tclasses.push('dotfile');\n\t\t\t}\n\t\t}\n\t});\n}());\n!/components/prism-makefile.min.js\u0003Prism.languages.makefile={comment:{pattern:/(^|[^\\\\])#(?:\\\\(?:\\r\\n|[\\s\\S])|[^\\\\\\r\\n])*/,lookbehind:!0},string:{pattern:/([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1/,greedy:!0},\"builtin-target\":{pattern:/\\.[A-Z][^:#=\\s]+(?=\\s*:(?!=))/,alias:\"builtin\"},target:{pattern:/^(?:[^:=\\s]|[ \\t]+(?![\\s:]))+(?=\\s*:(?!=))/m,alias:\"symbol\",inside:{variable:/\\$+(?:(?!\\$)[^(){}:#=\\s]+|(?=[({]))/}},variable:/\\$+(?:(?!\\$)[^(){}:#=\\s]+|\\([@*%<^+?][DF]\\)|(?=[({]))/,keyword:/-include\\b|\\b(?:define|else|endef|endif|export|ifn?def|ifn?eq|include|override|private|sinclude|undefine|unexport|vpath)\\b/,function:{pattern:/(\\()(?:abspath|addsuffix|and|basename|call|dir|error|eval|file|filter(?:-out)?|findstring|firstword|flavor|foreach|guile|if|info|join|lastword|load|notdir|or|origin|patsubst|realpath|shell|sort|strip|subst|suffix|value|warning|wildcard|word(?:list|s)?)(?=[ \\t])/,lookbehind:!0},operator:/(?:::|[?:+!])?=|[|@]/,punctuation:/[:;(){}]/};&/components/prism-t4-templating.min.js\u0002u!function(e){function t(e,t,a){return{pattern:RegExp(\"<#\"+e+\"[\\\\s\\\\S]*?#>\"),alias:\"block\",inside:{delimiter:{pattern:RegExp(\"^<#\"+e+\"|#>$\"),alias:\"important\"},content:{pattern:/[\\s\\S]+/,inside:t,alias:a}}}}e.languages[\"t4-templating\"]=Object.defineProperty({},\"createT4\",{value:function(a){var n=e.languages[a],i=\"language-\"+a;return{block:{pattern:/<#[\\s\\S]+?#>/,inside:{directive:t(\"@\",{\"attr-value\":{pattern:/=(?:(\"|')(?:\\\\[\\s\\S]|(?!\\1)[^\\\\])*\\1|[^\\s'\">=]+)/,inside:{punctuation:/^=|^[\"']|[\"']$/}},keyword:/\\b\\w+(?=\\s)/,\"attr-name\":/\\b\\w+/}),expression:t(\"=\",n,i),\"class-feature\":t(\"\\\\+\",n,i),standard:t(\"\",n,i)}}}}})}(Prism);/components/prism-markup.min.js\u000b\"Prism.languages.markup={comment:{pattern:/<!--(?:(?!<!--)[\\s\\S])*?-->/,greedy:!0},prolog:{pattern:/<\\?[\\s\\S]+?\\?>/,greedy:!0},doctype:{pattern:/<!DOCTYPE(?:[^>\"'[\\]]|\"[^\"]*\"|'[^']*')+(?:\\[(?:[^<\"'\\]]|\"[^\"]*\"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\\]\\s*)?>/i,greedy:!0,inside:{\"internal-subset\":{pattern:/(^[^\\[]*\\[)[\\s\\S]+(?=\\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/\"[^\"]*\"|'[^']*'/,greedy:!0},punctuation:/^<!|>$|[[\\]]/,\"doctype-tag\":/^DOCTYPE/i,name:/[^\\s<>'\"]+/}},cdata:{pattern:/<!\\[CDATA\\[[\\s\\S]*?\\]\\]>/i,greedy:!0},tag:{pattern:/<\\/?(?!\\d)[^\\s>\\/=$<%]+(?:\\s(?:\\s*[^\\s>\\/=]+(?:\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))|(?=[\\s/>])))+)?\\s*\\/?>/,greedy:!0,inside:{tag:{pattern:/^<\\/?[^\\s>\\/]+/,inside:{punctuation:/^<\\/?/,namespace:/^[^\\s>\\/:]+:/}},\"special-attr\":[],\"attr-value\":{pattern:/=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:\"attr-equals\"},{pattern:/^(\\s*)[\"']|[\"']$/,lookbehind:!0}]}},punctuation:/\\/?>/,\"attr-name\":{pattern:/[^\\s>\\/]+/,inside:{namespace:/^[^\\s>\\/:]+:/}}}},entity:[{pattern:/&[\\da-z]{1,8};/i,alias:\"named-entity\"},/&#x?[\\da-f]{1,8};/i]},Prism.languages.markup.tag.inside[\"attr-value\"].inside.entity=Prism.languages.markup.entity,Prism.languages.markup.doctype.inside[\"internal-subset\"].inside=Prism.languages.markup,Prism.hooks.add(\"wrap\",(function(a){\"entity\"===a.type&&(a.attributes.title=a.content.replace(/&amp;/,\"&\"))})),Object.defineProperty(Prism.languages.markup.tag,\"addInlined\",{value:function(a,e){var s={};s[\"language-\"+e]={pattern:/(^<!\\[CDATA\\[)[\\s\\S]+?(?=\\]\\]>$)/i,lookbehind:!0,inside:Prism.languages[e]},s.cdata=/^<!\\[CDATA\\[|\\]\\]>$/i;var t={\"included-cdata\":{pattern:/<!\\[CDATA\\[[\\s\\S]*?\\]\\]>/i,inside:s}};t[\"language-\"+e]={pattern:/[\\s\\S]+/,inside:Prism.languages[e]};var n={};n[a]={pattern:RegExp(\"(<__[^>]*>)(?:<!\\\\[CDATA\\\\[(?:[^\\\\]]|\\\\](?!\\\\]>))*\\\\]\\\\]>|(?!<!\\\\[CDATA\\\\[)[^])*?(?=</__>)\".replace(/__/g,(function(){return a})),\"i\"),lookbehind:!0,greedy:!0,inside:t},Prism.languages.insertBefore(\"markup\",\"cdata\",n)}}),Object.defineProperty(Prism.languages.markup.tag,\"addAttribute\",{value:function(a,e){Prism.languages.markup.tag.inside[\"special-attr\"].push({pattern:RegExp(\"(^|[\\\"'\\\\s])(?:\"+a+\")\\\\s*=\\\\s*(?:\\\"[^\\\"]*\\\"|'[^']*'|[^\\\\s'\\\">=]+(?=[\\\\s>]))\",\"i\"),lookbehind:!0,inside:{\"attr-name\":/^[^\\s=]+/,\"attr-value\":{pattern:/=[\\s\\S]+/,inside:{value:{pattern:/(^=\\s*([\"']|(?![\"'])))\\S[\\s\\S]*(?=\\2$)/,lookbehind:!0,alias:[e,\"language-\"+e],inside:Prism.languages[e]},punctuation:[{pattern:/^=/,alias:\"attr-equals\"},/\"|'/]}}}})}}),Prism.languages.html=Prism.languages.markup,Prism.languages.mathml=Prism.languages.markup,Prism.languages.svg=Prism.languages.markup,Prism.languages.xml=Prism.languages.extend(\"markup\",{}),Prism.languages.ssml=Prism.languages.xml,Prism.languages.atom=Prism.languages.xml,Prism.languages.rss=Prism.languages.xml;/components/prism-neon.js\u0004Prism.languages.neon = {\n\t'comment': {\n\t\tpattern: /#.*/,\n\t\tgreedy: true\n\t},\n\t'datetime': {\n\t\tpattern: /(^|[[{(=:,\\s])\\d\\d\\d\\d-\\d\\d?-\\d\\d?(?:(?:[Tt]| +)\\d\\d?:\\d\\d:\\d\\d(?:\\.\\d*)? *(?:Z|[-+]\\d\\d?(?::?\\d\\d)?)?)?(?=$|[\\]}),\\s])/,\n\t\tlookbehind: true,\n\t\talias: 'number'\n\t},\n\t'key': {\n\t\tpattern: /(^|[[{(,\\s])[^,:=[\\]{}()'\"\\s]+(?=\\s*:(?:$|[\\]}),\\s])|\\s*=)/,\n\t\tlookbehind: true,\n\t\talias: 'property'\n\t},\n\t'number': {\n\t\tpattern: /(^|[[{(=:,\\s])[+-]?(?:0x[\\da-fA-F]+|0o[0-7]+|0b[01]+|(?:\\d+(?:\\.\\d*)?|\\.?\\d+)(?:[eE][+-]?\\d+)?)(?=$|[\\]}),:=\\s])/,\n\t\tlookbehind: true\n\t},\n\t'boolean': {\n\t\tpattern: /(^|[[{(=:,\\s])(?:false|no|true|yes)(?=$|[\\]}),:=\\s])/i,\n\t\tlookbehind: true\n\t},\n\t'null': {\n\t\tpattern: /(^|[[{(=:,\\s])(?:null)(?=$|[\\]}),:=\\s])/i,\n\t\tlookbehind: true,\n\t\talias: 'keyword'\n\t},\n\t'string': {\n\t\tpattern: /(^|[[{(=:,\\s])(?:('''|\"\"\")\\r?\\n(?:(?:[^\\r\\n]|\\r?\\n(?![\\t ]*\\2))*\\r?\\n)?[\\t ]*\\2|'[^'\\r\\n]*'|\"(?:\\\\.|[^\\\\\"\\r\\n])*\")/,\n\t\tlookbehind: true,\n\t\tgreedy: true\n\t},\n\t'literal': {\n\t\tpattern: /(^|[[{(=:,\\s])(?:[^#\"',:=[\\]{}()\\s`-]|[:-][^\"',=[\\]{}()\\s])(?:[^,:=\\]})(\\s]|:(?![\\s,\\]})]|$)|[ \\t]+[^#,:=\\]})(\\s])*/,\n\t\tlookbehind: true,\n\t\talias: 'string',\n\t},\n\t'punctuation': /[,:=[\\]{}()-]/,\n};\n!/components/prism-cooklang.min.js\u00065!function(e){var a=\"(?:(?!\\\\s)[\\\\d$+<=a-zA-Z\\\\x80-\\\\uFFFF])+\",t=\"[^{}@#]+\\\\{[^}#@]*\\\\}\";e.languages.cooklang={comment:{pattern:/\\[-[\\s\\S]*?-\\]|--.*/,greedy:!0},meta:{pattern:/>>.*:.*/,inside:{property:{pattern:/(>>\\s*)[^\\s:](?:[^:]*[^\\s:])?/,lookbehind:!0}}},\"cookware-group\":{pattern:new RegExp(\"#(?:\"+t+\"|\"+a+\")\"),inside:{cookware:{pattern:new RegExp(\"(^#)(?:[^{}@#]+)\"),lookbehind:!0,alias:\"variable\"},\"cookware-keyword\":{pattern:/^#/,alias:\"keyword\"},\"quantity-group\":{pattern:new RegExp(/\\{[^{}@#]*\\}/),inside:{quantity:{pattern:new RegExp(\"(^\\\\{)[^{}@#]+\"),lookbehind:!0,alias:\"number\"},punctuation:/[{}]/}}}},\"ingredient-group\":{pattern:new RegExp(\"@(?:\"+t+\"|\"+a+\")\"),inside:{ingredient:{pattern:new RegExp(\"(^@)(?:[^{}@#]+)\"),lookbehind:!0,alias:\"variable\"},\"ingredient-keyword\":{pattern:/^@/,alias:\"keyword\"},\"amount-group\":{pattern:/\\{[^{}]*\\}/,inside:{amount:{pattern:/([\\{|])[^{}|*%]+/,lookbehind:!0,alias:\"number\"},unit:{pattern:/(%)[^}]+/,lookbehind:!0,alias:\"symbol\"},\"servings-scaler\":{pattern:/\\*/,alias:\"operator\"},\"servings-alternative-separator\":{pattern:/\\|/,alias:\"operator\"},\"unit-separator\":{pattern:/(?:%|(\\*)%)/,lookbehind:!0,alias:\"operator\"},punctuation:/[{}]/}}}},\"timer-group\":{pattern:/~(?!\\s)[^@#~{}]*\\{[^{}]*\\}/,inside:{timer:{pattern:/(^~)[^{]+/,lookbehind:!0,alias:\"variable\"},\"duration-group\":{pattern:/\\{[^{}]*\\}/,inside:{punctuation:/[{}]/,unit:{pattern:new RegExp(\"(%\\\\s*)(?:h|hours|hrs|m|min|minutes)\\\\b\"),lookbehind:!0,alias:\"symbol\"},operator:/%/,duration:{pattern:/\\d+/,alias:\"number\"}}},\"timer-keyword\":{pattern:/^~/,alias:\"keyword\"}}}}}(Prism);5/plugins/download-button/prism-download-button.min.js\u0001\"undefined\"!=typeof Prism&&\"undefined\"!=typeof document&&document.querySelector&&Prism.plugins.toolbar.registerButton(\"download-file\",(function(t){var e=t.element.parentNode;if(e&&/pre/i.test(e.nodeName)&&e.hasAttribute(\"data-src\")&&e.hasAttribute(\"data-download-link\")){var n=e.getAttribute(\"data-src\"),a=document.createElement(\"a\");return a.textContent=e.getAttribute(\"data-download-link-label\")||\"Download\",a.setAttribute(\"download\",\"\"),a.href=n,a}}));/components/prism-r.js\u0002Prism.languages.r = {\n\t'comment': /#.*/,\n\t'string': {\n\t\tpattern: /(['\"])(?:\\\\.|(?!\\1)[^\\\\\\r\\n])*\\1/,\n\t\tgreedy: true\n\t},\n\t'percent-operator': {\n\t\t// Includes user-defined operators\n\t\t// and %%, %*%, %/%, %in%, %o%, %x%\n\t\tpattern: /%[^%\\s]*%/,\n\t\talias: 'operator'\n\t},\n\t'boolean': /\\b(?:FALSE|TRUE)\\b/,\n\t'ellipsis': /\\.\\.(?:\\.|\\d+)/,\n\t'number': [\n\t\t/\\b(?:Inf|NaN)\\b/,\n\t\t/(?:\\b0x[\\dA-Fa-f]+(?:\\.\\d*)?|\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:[EePp][+-]?\\d+)?[iL]?/\n\t],\n\t'keyword': /\\b(?:NA|NA_character_|NA_complex_|NA_integer_|NA_real_|NULL|break|else|for|function|if|in|next|repeat|while)\\b/,\n\t'operator': /->?>?|<(?:=|<?-)?|[>=!]=?|::?|&&?|\\|\\|?|[+*\\/^$@~]/,\n\t'punctuation': /[(){}\\[\\],;]/\n};\n/components/prism-autohotkey.js#F// NOTES - follows first-first highlight method, block is locked after highlight, different from SyntaxHl\nPrism.languages.autohotkey = {\n\t'comment': [\n\t\t{\n\t\t\tpattern: /(^|\\s);.*/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t{\n\t\t\tpattern: /(^[\\t ]*)\\/\\*(?:[\\r\\n](?![ \\t]*\\*\\/)|[^\\r\\n])*(?:[\\r\\n][ \\t]*\\*\\/)?/m,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true\n\t\t}\n\t],\n\t'tag': {\n\t\t// labels\n\t\tpattern: /^([ \\t]*)[^\\s,`\":]+(?=:[ \\t]*$)/m,\n\t\tlookbehind: true\n\t},\n\t'string': /\"(?:[^\"\\n\\r]|\"\")*\"/,\n\t'variable': /%\\w+%/,\n\t'number': /\\b0x[\\dA-Fa-f]+\\b|(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:[Ee]-?\\d+)?/,\n\t'operator': /\\?|\\/\\/?=?|:=|\\|[=|]?|&[=&]?|\\+[=+]?|-[=-]?|\\*[=*]?|<(?:<=?|>|=)?|>>?=?|[.^!=~]=?|\\b(?:AND|NOT|OR)\\b/,\n\t'boolean': /\\b(?:false|true)\\b/,\n\n\t'command': {\n\t\tpattern: /\\b(?:AutoTrim|BlockInput|Break|Click|ClipWait|Continue|Control|ControlClick|ControlFocus|ControlGet|ControlGetFocus|ControlGetPos|ControlGetText|ControlMove|ControlSend|ControlSendRaw|ControlSetText|CoordMode|Critical|DetectHiddenText|DetectHiddenWindows|Drive|DriveGet|DriveSpaceFree|EnvAdd|EnvDiv|EnvGet|EnvMult|EnvSet|EnvSub|EnvUpdate|Exit|ExitApp|FileAppend|FileCopy|FileCopyDir|FileCreateDir|FileCreateShortcut|FileDelete|FileEncoding|FileGetAttrib|FileGetShortcut|FileGetSize|FileGetTime|FileGetVersion|FileInstall|FileMove|FileMoveDir|FileRead|FileReadLine|FileRecycle|FileRecycleEmpty|FileRemoveDir|FileSelectFile|FileSelectFolder|FileSetAttrib|FileSetTime|FormatTime|GetKeyState|Gosub|Goto|GroupActivate|GroupAdd|GroupClose|GroupDeactivate|Gui|GuiControl|GuiControlGet|Hotkey|ImageSearch|IniDelete|IniRead|IniWrite|Input|InputBox|KeyWait|ListHotkeys|ListLines|ListVars|Loop|Menu|MouseClick|MouseClickDrag|MouseGetPos|MouseMove|MsgBox|OnExit|OutputDebug|Pause|PixelGetColor|PixelSearch|PostMessage|Process|Progress|Random|RegDelete|RegRead|RegWrite|Reload|Repeat|Return|Run|RunAs|RunWait|Send|SendEvent|SendInput|SendMessage|SendMode|SendPlay|SendRaw|SetBatchLines|SetCapslockState|SetControlDelay|SetDefaultMouseSpeed|SetEnv|SetFormat|SetKeyDelay|SetMouseDelay|SetNumlockState|SetRegView|SetScrollLockState|SetStoreCapslockMode|SetTimer|SetTitleMatchMode|SetWinDelay|SetWorkingDir|Shutdown|Sleep|Sort|SoundBeep|SoundGet|SoundGetWaveVolume|SoundPlay|SoundSet|SoundSetWaveVolume|SplashImage|SplashTextOff|SplashTextOn|SplitPath|StatusBarGetText|StatusBarWait|StringCaseSense|StringGetPos|StringLeft|StringLen|StringLower|StringMid|StringReplace|StringRight|StringSplit|StringTrimLeft|StringTrimRight|StringUpper|Suspend|SysGet|Thread|ToolTip|Transform|TrayTip|URLDownloadToFile|WinActivate|WinActivateBottom|WinClose|WinGet|WinGetActiveStats|WinGetActiveTitle|WinGetClass|WinGetPos|WinGetText|WinGetTitle|WinHide|WinKill|WinMaximize|WinMenuSelectItem|WinMinimize|WinMinimizeAll|WinMinimizeAllUndo|WinMove|WinRestore|WinSet|WinSetTitle|WinShow|WinWait|WinWaitActive|WinWaitClose|WinWaitNotActive)\\b/i,\n\t\talias: 'selector'\n\t},\n\n\t'constant': /\\b(?:a_ahkpath|a_ahkversion|a_appdata|a_appdatacommon|a_autotrim|a_batchlines|a_caretx|a_carety|a_computername|a_controldelay|a_cursor|a_dd|a_ddd|a_dddd|a_defaultmousespeed|a_desktop|a_desktopcommon|a_detecthiddentext|a_detecthiddenwindows|a_endchar|a_eventinfo|a_exitreason|a_fileencoding|a_formatfloat|a_formatinteger|a_gui|a_guicontrol|a_guicontrolevent|a_guievent|a_guiheight|a_guiwidth|a_guix|a_guiy|a_hour|a_iconfile|a_iconhidden|a_iconnumber|a_icontip|a_index|a_ipaddress1|a_ipaddress2|a_ipaddress3|a_ipaddress4|a_is64bitos|a_isadmin|a_iscompiled|a_iscritical|a_ispaused|a_issuspended|a_isunicode|a_keydelay|a_language|a_lasterror|a_linefile|a_linenumber|a_loopfield|a_loopfileattrib|a_loopfiledir|a_loopfileext|a_loopfilefullpath|a_loopfilelongpath|a_loopfilename|a_loopfileshortname|a_loopfileshortpath|a_loopfilesize|a_loopfilesizekb|a_loopfilesizemb|a_loopfiletimeaccessed|a_loopfiletimecreated|a_loopfiletimemodified|a_loopreadline|a_loopregkey|a_loopregname|a_loopregsubkey|a_loopregtimemodified|a_loopregtype|a_mday|a_min|a_mm|a_mmm|a_mmmm|a_mon|a_mousedelay|a_msec|a_mydocuments|a_now|a_nowutc|a_numbatchlines|a_ostype|a_osversion|a_priorhotkey|a_priorkey|a_programfiles|a_programs|a_programscommon|a_ptrsize|a_regview|a_screendpi|a_screenheight|a_screenwidth|a_scriptdir|a_scriptfullpath|a_scripthwnd|a_scriptname|a_sec|a_space|a_startmenu|a_startmenucommon|a_startup|a_startupcommon|a_stringcasesense|a_tab|a_temp|a_thisfunc|a_thishotkey|a_thislabel|a_thismenu|a_thismenuitem|a_thismenuitempos|a_tickcount|a_timeidle|a_timeidlephysical|a_timesincepriorhotkey|a_timesincethishotkey|a_titlematchmode|a_titlematchmodespeed|a_username|a_wday|a_windelay|a_windir|a_workingdir|a_yday|a_year|a_yweek|a_yyyy|clipboard|clipboardall|comspec|errorlevel|programfiles)\\b/i,\n\n\t'builtin': /\\b(?:abs|acos|asc|asin|atan|ceil|chr|class|comobjactive|comobjarray|comobjconnect|comobjcreate|comobjerror|comobjflags|comobjget|comobjquery|comobjtype|comobjvalue|cos|dllcall|exp|fileexist|Fileopen|floor|format|il_add|il_create|il_destroy|instr|isfunc|islabel|IsObject|ln|log|ltrim|lv_add|lv_delete|lv_deletecol|lv_getcount|lv_getnext|lv_gettext|lv_insert|lv_insertcol|lv_modify|lv_modifycol|lv_setimagelist|mod|numget|numput|onmessage|regexmatch|regexreplace|registercallback|round|rtrim|sb_seticon|sb_setparts|sb_settext|sin|sqrt|strlen|strreplace|strsplit|substr|tan|tv_add|tv_delete|tv_get|tv_getchild|tv_getcount|tv_getnext|tv_getparent|tv_getprev|tv_getselection|tv_gettext|tv_modify|varsetcapacity|winactive|winexist|__Call|__Get|__New|__Set)\\b/i,\n\n\t'symbol': /\\b(?:alt|altdown|altup|appskey|backspace|browser_back|browser_favorites|browser_forward|browser_home|browser_refresh|browser_search|browser_stop|bs|capslock|ctrl|ctrlbreak|ctrldown|ctrlup|del|delete|down|end|enter|esc|escape|f1|f10|f11|f12|f13|f14|f15|f16|f17|f18|f19|f2|f20|f21|f22|f23|f24|f3|f4|f5|f6|f7|f8|f9|home|ins|insert|joy1|joy10|joy11|joy12|joy13|joy14|joy15|joy16|joy17|joy18|joy19|joy2|joy20|joy21|joy22|joy23|joy24|joy25|joy26|joy27|joy28|joy29|joy3|joy30|joy31|joy32|joy4|joy5|joy6|joy7|joy8|joy9|joyaxes|joybuttons|joyinfo|joyname|joypov|joyr|joyu|joyv|joyx|joyy|joyz|lalt|launch_app1|launch_app2|launch_mail|launch_media|lbutton|lcontrol|lctrl|left|lshift|lwin|lwindown|lwinup|mbutton|media_next|media_play_pause|media_prev|media_stop|numlock|numpad0|numpad1|numpad2|numpad3|numpad4|numpad5|numpad6|numpad7|numpad8|numpad9|numpadadd|numpadclear|numpaddel|numpaddiv|numpaddot|numpaddown|numpadend|numpadenter|numpadhome|numpadins|numpadleft|numpadmult|numpadpgdn|numpadpgup|numpadright|numpadsub|numpadup|pgdn|pgup|printscreen|ralt|rbutton|rcontrol|rctrl|right|rshift|rwin|rwindown|rwinup|scrolllock|shift|shiftdown|shiftup|space|tab|up|volume_down|volume_mute|volume_up|wheeldown|wheelleft|wheelright|wheelup|xbutton1|xbutton2)\\b/i,\n\n\t'directive': {\n\t\tpattern: /#[a-z]+\\b/i,\n\t\talias: 'important'\n\t},\n\n\t'keyword': /\\b(?:Abort|AboveNormal|Add|ahk_class|ahk_exe|ahk_group|ahk_id|ahk_pid|All|Alnum|Alpha|AltSubmit|AltTab|AltTabAndMenu|AltTabMenu|AltTabMenuDismiss|AlwaysOnTop|AutoSize|Background|BackgroundTrans|BelowNormal|between|BitAnd|BitNot|BitOr|BitShiftLeft|BitShiftRight|BitXOr|Bold|Border|Button|ByRef|Catch|Checkbox|Checked|CheckedGray|Choose|ChooseString|Close|Color|ComboBox|Contains|ControlList|Count|Date|DateTime|Days|DDL|Default|DeleteAll|Delimiter|Deref|Destroy|Digit|Disable|Disabled|DropDownList|Edit|Eject|Else|Enable|Enabled|Error|Exist|Expand|ExStyle|FileSystem|Finally|First|Flash|Float|FloatFast|Focus|Font|for|global|Grid|Group|GroupBox|GuiClose|GuiContextMenu|GuiDropFiles|GuiEscape|GuiSize|Hdr|Hidden|Hide|High|HKCC|HKCR|HKCU|HKEY_CLASSES_ROOT|HKEY_CURRENT_CONFIG|HKEY_CURRENT_USER|HKEY_LOCAL_MACHINE|HKEY_USERS|HKLM|HKU|Hours|HScroll|Icon|IconSmall|ID|IDLast|If|IfEqual|IfExist|IfGreater|IfGreaterOrEqual|IfInString|IfLess|IfLessOrEqual|IfMsgBox|IfNotEqual|IfNotExist|IfNotInString|IfWinActive|IfWinExist|IfWinNotActive|IfWinNotExist|Ignore|ImageList|in|Integer|IntegerFast|Interrupt|is|italic|Join|Label|LastFound|LastFoundExist|Limit|Lines|List|ListBox|ListView|local|Lock|Logoff|Low|Lower|Lowercase|MainWindow|Margin|Maximize|MaximizeBox|MaxSize|Minimize|MinimizeBox|MinMax|MinSize|Minutes|MonthCal|Mouse|Move|Multi|NA|No|NoActivate|NoDefault|NoHide|NoIcon|NoMainWindow|norm|Normal|NoSort|NoSortHdr|NoStandard|Not|NoTab|NoTimers|Number|Off|Ok|On|OwnDialogs|Owner|Parse|Password|Picture|Pixel|Pos|Pow|Priority|ProcessName|Radio|Range|Read|ReadOnly|Realtime|Redraw|Region|REG_BINARY|REG_DWORD|REG_EXPAND_SZ|REG_MULTI_SZ|REG_SZ|Relative|Rename|Report|Resize|Restore|Retry|RGB|Screen|Seconds|Section|Serial|SetLabel|ShiftAltTab|Show|Single|Slider|SortDesc|Standard|static|Status|StatusBar|StatusCD|strike|Style|Submit|SysMenu|Tab2|TabStop|Text|Theme|Throw|Tile|ToggleCheck|ToggleEnable|ToolWindow|Top|Topmost|TransColor|Transparent|Tray|TreeView|Try|TryAgain|Type|UnCheck|underline|Unicode|Unlock|Until|UpDown|Upper|Uppercase|UseErrorLevel|Vis|VisFirst|Visible|VScroll|Wait|WaitClose|WantCtrlA|WantF2|WantReturn|While|Wrap|Xdigit|xm|xp|xs|Yes|ym|yp|ys)\\b/i,\n\t'function': /[^(); \\t,\\n+*\\-=?>:\\\\\\/<&%\\[\\]]+(?=\\()/,\n\t'punctuation': /[{}[\\]():,]/\n};\n/components/prism-pug.js\u0012m(function (Prism) {\n\t// TODO:\n\t// - Add CSS highlighting inside <style> tags\n\t// - Add support for multi-line code blocks\n\t// - Add support for interpolation #{} and !{}\n\t// - Add support for tag interpolation #[]\n\t// - Add explicit support for plain text using |\n\t// - Add support for markup embedded in plain text\n\n\tPrism.languages.pug = {\n\n\t\t// Multiline stuff should appear before the rest\n\n\t\t// This handles both single-line and multi-line comments\n\t\t'comment': {\n\t\t\tpattern: /(^([\\t ]*))\\/\\/.*(?:(?:\\r?\\n|\\r)\\2[\\t ].+)*/m,\n\t\t\tlookbehind: true\n\t\t},\n\n\t\t// All the tag-related part is in lookbehind\n\t\t// so that it can be highlighted by the \"tag\" pattern\n\t\t'multiline-script': {\n\t\t\tpattern: /(^([\\t ]*)script\\b.*\\.[\\t ]*)(?:(?:\\r?\\n|\\r(?!\\n))(?:\\2[\\t ].+|\\s*?(?=\\r?\\n|\\r)))+/m,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t},\n\n\t\t// See at the end of the file for known filters\n\t\t'filter': {\n\t\t\tpattern: /(^([\\t ]*)):.+(?:(?:\\r?\\n|\\r(?!\\n))(?:\\2[\\t ].+|\\s*?(?=\\r?\\n|\\r)))+/m,\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'filter-name': {\n\t\t\t\t\tpattern: /^:[\\w-]+/,\n\t\t\t\t\talias: 'variable'\n\t\t\t\t},\n\t\t\t\t'text': /\\S[\\s\\S]*/,\n\t\t\t}\n\t\t},\n\n\t\t'multiline-plain-text': {\n\t\t\tpattern: /(^([\\t ]*)[\\w\\-#.]+\\.[\\t ]*)(?:(?:\\r?\\n|\\r(?!\\n))(?:\\2[\\t ].+|\\s*?(?=\\r?\\n|\\r)))+/m,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'markup': {\n\t\t\tpattern: /(^[\\t ]*)<.+/m,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.markup\n\t\t},\n\t\t'doctype': {\n\t\t\tpattern: /((?:^|\\n)[\\t ]*)doctype(?: .+)?/,\n\t\t\tlookbehind: true\n\t\t},\n\n\t\t// This handle all conditional and loop keywords\n\t\t'flow-control': {\n\t\t\tpattern: /(^[\\t ]*)(?:case|default|each|else|if|unless|when|while)\\b(?: .+)?/m,\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'each': {\n\t\t\t\t\tpattern: /^each .+? in\\b/,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'keyword': /\\b(?:each|in)\\b/,\n\t\t\t\t\t\t'punctuation': /,/\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t'branch': {\n\t\t\t\t\tpattern: /^(?:case|default|else|if|unless|when|while)\\b/,\n\t\t\t\t\talias: 'keyword'\n\t\t\t\t},\n\t\t\t\trest: Prism.languages.javascript\n\t\t\t}\n\t\t},\n\t\t'keyword': {\n\t\t\tpattern: /(^[\\t ]*)(?:append|block|extends|include|prepend)\\b.+/m,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'mixin': [\n\t\t\t// Declaration\n\t\t\t{\n\t\t\t\tpattern: /(^[\\t ]*)mixin .+/m,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'keyword': /^mixin/,\n\t\t\t\t\t'function': /\\w+(?=\\s*\\(|\\s*$)/,\n\t\t\t\t\t'punctuation': /[(),.]/\n\t\t\t\t}\n\t\t\t},\n\t\t\t// Usage\n\t\t\t{\n\t\t\t\tpattern: /(^[\\t ]*)\\+.+/m,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'name': {\n\t\t\t\t\t\tpattern: /^\\+\\w+/,\n\t\t\t\t\t\talias: 'function'\n\t\t\t\t\t},\n\t\t\t\t\trest: Prism.languages.javascript\n\t\t\t\t}\n\t\t\t}\n\t\t],\n\t\t'script': {\n\t\t\tpattern: /(^[\\t ]*script(?:(?:&[^(]+)?\\([^)]+\\))*[\\t ]).+/m,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t},\n\n\t\t'plain-text': {\n\t\t\tpattern: /(^[\\t ]*(?!-)[\\w\\-#.]*[\\w\\-](?:(?:&[^(]+)?\\([^)]+\\))*\\/?[\\t ]).+/m,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'tag': {\n\t\t\tpattern: /(^[\\t ]*)(?!-)[\\w\\-#.]*[\\w\\-](?:(?:&[^(]+)?\\([^)]+\\))*\\/?:?/m,\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'attributes': [\n\t\t\t\t\t{\n\t\t\t\t\t\tpattern: /&[^(]+\\([^)]+\\)/,\n\t\t\t\t\t\tinside: Prism.languages.javascript\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tpattern: /\\([^)]+\\)/,\n\t\t\t\t\t\tinside: {\n\t\t\t\t\t\t\t'attr-value': {\n\t\t\t\t\t\t\t\tpattern: /(=\\s*(?!\\s))(?:\\{[^}]*\\}|[^,)\\r\\n]+)/,\n\t\t\t\t\t\t\t\tlookbehind: true,\n\t\t\t\t\t\t\t\tinside: Prism.languages.javascript\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t'attr-name': /[\\w-]+(?=\\s*!?=|\\s*[,)])/,\n\t\t\t\t\t\t\t'punctuation': /[!=(),]+/\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t'punctuation': /:/,\n\t\t\t\t'attr-id': /#[\\w\\-]+/,\n\t\t\t\t'attr-class': /\\.[\\w\\-]+/\n\t\t\t}\n\t\t},\n\t\t'code': [\n\t\t\t{\n\t\t\t\tpattern: /(^[\\t ]*(?:-|!?=)).+/m,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: Prism.languages.javascript\n\t\t\t}\n\t\t],\n\t\t'punctuation': /[.\\-!=|]+/\n\t};\n\n\tvar filter_pattern = /(^([\\t ]*)):<filter_name>(?:(?:\\r?\\n|\\r(?!\\n))(?:\\2[\\t ].+|\\s*?(?=\\r?\\n|\\r)))+/.source;\n\n\t// Non exhaustive list of available filters and associated languages\n\tvar filters = [\n\t\t{ filter: 'atpl', language: 'twig' },\n\t\t{ filter: 'coffee', language: 'coffeescript' },\n\t\t'ejs',\n\t\t'handlebars',\n\t\t'less',\n\t\t'livescript',\n\t\t'markdown',\n\t\t{ filter: 'sass', language: 'scss' },\n\t\t'stylus'\n\t];\n\tvar all_filters = {};\n\tfor (var i = 0, l = filters.length; i < l; i++) {\n\t\tvar filter = filters[i];\n\t\tfilter = typeof filter === 'string' ? { filter: filter, language: filter } : filter;\n\t\tif (Prism.languages[filter.language]) {\n\t\t\tall_filters['filter-' + filter.filter] = {\n\t\t\t\tpattern: RegExp(filter_pattern.replace('<filter_name>', function () { return filter.filter; }), 'm'),\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'filter-name': {\n\t\t\t\t\t\tpattern: /^:[\\w-]+/,\n\t\t\t\t\t\talias: 'variable'\n\t\t\t\t\t},\n\t\t\t\t\t'text': {\n\t\t\t\t\t\tpattern: /\\S[\\s\\S]*/,\n\t\t\t\t\t\talias: [filter.language, 'language-' + filter.language],\n\t\t\t\t\t\tinside: Prism.languages[filter.language]\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t}\n\n\tPrism.languages.insertBefore('pug', 'filter', all_filters);\n\n}(Prism));\n!/components/prism-gdscript.min.js\u0003Prism.languages.gdscript={comment:/#.*/,string:{pattern:/@?(?:(\"|')(?:(?!\\1)[^\\n\\\\]|\\\\[\\s\\S])*\\1(?!\"|')|\"\"\"(?:[^\\\\]|\\\\[\\s\\S])*?\"\"\")/,greedy:!0},\"class-name\":{pattern:/(^(?:class|class_name|extends)[ \\t]+|^export\\([ \\t]*|\\bas[ \\t]+|(?:\\b(?:const|var)[ \\t]|[,(])[ \\t]*\\w+[ \\t]*:[ \\t]*|->[ \\t]*)[a-zA-Z_]\\w*/m,lookbehind:!0},keyword:/\\b(?:and|as|assert|break|breakpoint|class|class_name|const|continue|elif|else|enum|export|extends|for|func|if|in|is|master|mastersync|match|not|null|onready|or|pass|preload|puppet|puppetsync|remote|remotesync|return|self|setget|signal|static|tool|var|while|yield)\\b/,function:/\\b[a-z_]\\w*(?=[ \\t]*\\()/i,variable:/\\$\\w+/,number:[/\\b0b[01_]+\\b|\\b0x[\\da-fA-F_]+\\b|(?:\\b\\d[\\d_]*(?:\\.[\\d_]*)?|\\B\\.[\\d_]+)(?:e[+-]?[\\d_]+)?\\b/,/\\b(?:INF|NAN|PI|TAU)\\b/],constant:/\\b[A-Z][A-Z_\\d]*\\b/,boolean:/\\b(?:false|true)\\b/,operator:/->|:=|&&|\\|\\||<<|>>|[-+*/%&|!<>=]=?|[~^]/,punctuation:/[.:,;()[\\]{}]/};/components/prism-splunk-spl.js\u0007tPrism.languages['splunk-spl'] = {\n\t'comment': /`comment\\(\"(?:\\\\.|[^\\\\\"])*\"\\)`/,\n\t'string': {\n\t\tpattern: /\"(?:\\\\.|[^\\\\\"])*\"/,\n\t\tgreedy: true\n\t},\n\t// https://docs.splunk.com/Documentation/Splunk/7.3.0/SearchReference/ListOfSearchCommands\n\t'keyword': /\\b(?:abstract|accum|addcoltotals|addinfo|addtotals|analyzefields|anomalies|anomalousvalue|anomalydetection|append|appendcols|appendcsv|appendlookup|appendpipe|arules|associate|audit|autoregress|bin|bucket|bucketdir|chart|cluster|cofilter|collect|concurrency|contingency|convert|correlate|datamodel|dbinspect|dedup|delete|delta|diff|erex|eval|eventcount|eventstats|extract|fieldformat|fields|fieldsummary|filldown|fillnull|findtypes|folderize|foreach|format|from|gauge|gentimes|geom|geomfilter|geostats|head|highlight|history|iconify|input|inputcsv|inputlookup|iplocation|join|kmeans|kv|kvform|loadjob|localize|localop|lookup|makecontinuous|makemv|makeresults|map|mcollect|metadata|metasearch|meventcollect|mstats|multikv|multisearch|mvcombine|mvexpand|nomv|outlier|outputcsv|outputlookup|outputtext|overlap|pivot|predict|rangemap|rare|regex|relevancy|reltime|rename|replace|rest|return|reverse|rex|rtorder|run|savedsearch|script|scrub|search|searchtxn|selfjoin|sendemail|set|setfields|sichart|sirare|sistats|sitimechart|sitop|sort|spath|stats|strcat|streamstats|table|tags|tail|timechart|timewrap|top|transaction|transpose|trendline|tscollect|tstats|typeahead|typelearner|typer|union|uniq|untable|where|x11|xmlkv|xmlunescape|xpath|xyseries)\\b/i,\n\t'operator-word': {\n\t\tpattern: /\\b(?:and|as|by|not|or|xor)\\b/i,\n\t\talias: 'operator'\n\t},\n\t'function': /\\b\\w+(?=\\s*\\()/,\n\t'property': /\\b\\w+(?=\\s*=(?!=))/,\n\t'date': {\n\t\t// MM/DD/YYYY(:HH:MM:SS)?\n\t\tpattern: /\\b\\d{1,2}\\/\\d{1,2}\\/\\d{1,4}(?:(?::\\d{1,2}){3})?\\b/,\n\t\talias: 'number'\n\t},\n\t'number': /\\b\\d+(?:\\.\\d+)?\\b/,\n\t'boolean': /\\b(?:f|false|t|true)\\b/i,\n\t'operator': /[<>=]=?|[-+*/%|]/,\n\t'punctuation': /[()[\\],]/\n};\n /components/prism-verilog.min.js\b0Prism.languages.verilog={comment:{pattern:/\\/\\/.*|\\/\\*[\\s\\S]*?\\*\\//,greedy:!0},string:{pattern:/\"(?:\\\\(?:\\r\\n|[\\s\\S])|[^\"\\\\\\r\\n])*\"/,greedy:!0},\"kernel-function\":{pattern:/\\B\\$\\w+\\b/,alias:\"property\"},constant:/\\B`\\w+\\b/,function:/\\b\\w+(?=\\()/,keyword:/\\b(?:alias|and|assert|assign|assume|automatic|before|begin|bind|bins|binsof|bit|break|buf|bufif0|bufif1|byte|case|casex|casez|cell|chandle|class|clocking|cmos|config|const|constraint|context|continue|cover|covergroup|coverpoint|cross|deassign|default|defparam|design|disable|dist|do|edge|else|end|endcase|endclass|endclocking|endconfig|endfunction|endgenerate|endgroup|endinterface|endmodule|endpackage|endprimitive|endprogram|endproperty|endsequence|endspecify|endtable|endtask|enum|event|expect|export|extends|extern|final|first_match|for|force|foreach|forever|fork|forkjoin|function|generate|genvar|highz0|highz1|if|iff|ifnone|ignore_bins|illegal_bins|import|incdir|include|initial|inout|input|inside|instance|int|integer|interface|intersect|join|join_any|join_none|large|liblist|library|local|localparam|logic|longint|macromodule|matches|medium|modport|module|nand|negedge|new|nmos|nor|noshowcancelled|not|notif0|notif1|null|or|output|package|packed|parameter|pmos|posedge|primitive|priority|program|property|protected|pull0|pull1|pulldown|pullup|pulsestyle_ondetect|pulsestyle_onevent|pure|rand|randc|randcase|randsequence|rcmos|real|realtime|ref|reg|release|repeat|return|rnmos|rpmos|rtran|rtranif0|rtranif1|scalared|sequence|shortint|shortreal|showcancelled|signed|small|solve|specify|specparam|static|string|strong0|strong1|struct|super|supply0|supply1|table|tagged|task|this|throughout|time|timeprecision|timeunit|tran|tranif0|tranif1|tri|tri0|tri1|triand|trior|trireg|type|typedef|union|unique|unsigned|use|uwire|var|vectored|virtual|void|wait|wait_order|wand|weak0|weak1|while|wildcard|wire|with|within|wor|xnor|xor)\\b/,important:/\\b(?:always|always_comb|always_ff|always_latch)\\b(?: *@)?/,number:/\\B##?\\d+|(?:\\b\\d+)?'[odbh] ?[\\da-fzx_?]+|\\b(?:\\d*[._])?\\d+(?:e[-+]?\\d+)?/i,operator:/[-+{}^~%*\\/?=!<>&|]+/,punctuation:/[[\\];(),.:]/};(/components/prism-nand2tetris-hdl.min.js\u0001\u0004Prism.languages[\"nand2tetris-hdl\"]={comment:/\\/\\/.*|\\/\\*[\\s\\S]*?(?:\\*\\/|$)/,keyword:/\\b(?:BUILTIN|CHIP|CLOCKED|IN|OUT|PARTS)\\b/,boolean:/\\b(?:false|true)\\b/,function:/\\b[A-Za-z][A-Za-z0-9]*(?=\\()/,number:/\\b\\d+\\b/,operator:/=|\\.\\./,punctuation:/[{}[\\];(),:]/};/components/prism-hpkp.min.jsķPrism.languages.hpkp={directive:{pattern:/\\b(?:includeSubDomains|max-age|pin-sha256|preload|report-to|report-uri|strict)(?=[\\s;=]|$)/i,alias:\"property\"},operator:/=/,punctuation:/;/};/components/prism-cooklang.js\u000b(function (Prism) {\n\n\t// see https://github.com/cooklang/spec/blob/main/EBNF.md\n\n\tvar single_token_suffix = /(?:(?!\\s)[\\d$+<=a-zA-Z\\x80-\\uFFFF])+/.source;\n\tvar multi_token_infix = /[^{}@#]+/.source;\n\tvar multi_token_suffix = /\\{[^}#@]*\\}/.source;\n\n\tvar multi_token = multi_token_infix + multi_token_suffix;\n\n\tvar timer_units = /(?:h|hours|hrs|m|min|minutes)/.source;\n\n\tvar amount_group_impl = {\n\t\tpattern: /\\{[^{}]*\\}/,\n\t\tinside: {\n\t\t\t'amount': {\n\t\t\t\tpattern: /([\\{|])[^{}|*%]+/,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'number',\n\t\t\t},\n\t\t\t'unit': {\n\t\t\t\tpattern: /(%)[^}]+/,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'symbol',\n\t\t\t},\n\t\t\t'servings-scaler': {\n\t\t\t\tpattern: /\\*/,\n\t\t\t\talias: 'operator',\n\t\t\t},\n\t\t\t'servings-alternative-separator': {\n\t\t\t\tpattern: /\\|/,\n\t\t\t\talias: 'operator',\n\t\t\t},\n\t\t\t'unit-separator': {\n\t\t\t\tpattern: /(?:%|(\\*)%)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'operator',\n\t\t\t},\n\t\t\t'punctuation': /[{}]/,\n\t\t}\n\t};\n\n\n\tPrism.languages.cooklang = {\n\t\t'comment': {\n\t\t\t// [- comment -]\n\t\t\t// -- comment\n\t\t\tpattern: /\\[-[\\s\\S]*?-\\]|--.*/,\n\t\t\tgreedy: true,\n\t\t},\n\t\t'meta': { // >> key: value\n\t\t\tpattern: />>.*:.*/,\n\t\t\tinside: {\n\t\t\t\t'property': { // key:\n\t\t\t\t\tpattern: /(>>\\s*)[^\\s:](?:[^:]*[^\\s:])?/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t'cookware-group': { // #...{...}, #...\n\t\t\tpattern: new RegExp('#(?:'\n\t\t\t\t+ multi_token\n\t\t\t\t+ '|'\n\t\t\t\t+ single_token_suffix\n\t\t\t\t+ ')'\n\t\t\t),\n\t\t\tinside: {\n\t\t\t\t'cookware': {\n\t\t\t\t\tpattern: new RegExp('(^#)(?:'\n\t\t\t\t\t\t+ multi_token_infix\n\t\t\t\t\t\t+ ')'\n\t\t\t\t\t),\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\talias: 'variable',\n\t\t\t\t},\n\t\t\t\t'cookware-keyword': {\n\t\t\t\t\tpattern: /^#/,\n\t\t\t\t\talias: 'keyword',\n\t\t\t\t},\n\t\t\t\t'quantity-group': {\n\t\t\t\t\tpattern: new RegExp(/\\{[^{}@#]*\\}/),\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'quantity': {\n\t\t\t\t\t\t\tpattern: new RegExp(/(^\\{)/.source + multi_token_infix),\n\t\t\t\t\t\t\tlookbehind: true,\n\t\t\t\t\t\t\talias: 'number',\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'punctuation': /[{}]/,\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t\t'ingredient-group': { // @...{...}, @...\n\t\t\tpattern: new RegExp('@(?:'\n\t\t\t\t+ multi_token\n\t\t\t\t+ '|'\n\t\t\t\t+ single_token_suffix\n\t\t\t\t+ ')'),\n\t\t\tinside: {\n\t\t\t\t'ingredient': {\n\t\t\t\t\tpattern: new RegExp('(^@)(?:'\n\t\t\t\t\t\t+ multi_token_infix\n\t\t\t\t\t\t+ ')'),\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\talias: 'variable',\n\t\t\t\t},\n\t\t\t\t'ingredient-keyword': {\n\t\t\t\t\tpattern: /^@/,\n\t\t\t\t\talias: 'keyword',\n\t\t\t\t},\n\t\t\t\t'amount-group': amount_group_impl,\n\t\t\t}\n\t\t},\n\t\t'timer-group': { // ~timer{...}\n\t\t\t// eslint-disable-next-line regexp/sort-alternatives\n\t\t\tpattern: /~(?!\\s)[^@#~{}]*\\{[^{}]*\\}/,\n\t\t\tinside: {\n\t\t\t\t'timer': {\n\t\t\t\t\tpattern: /(^~)[^{]+/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\talias: 'variable',\n\t\t\t\t},\n\t\t\t\t'duration-group': { // {...}\n\t\t\t\t\tpattern: /\\{[^{}]*\\}/,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'punctuation': /[{}]/,\n\t\t\t\t\t\t'unit': {\n\t\t\t\t\t\t\tpattern: new RegExp(/(%\\s*)/.source + timer_units + /\\b/.source),\n\t\t\t\t\t\t\tlookbehind: true,\n\t\t\t\t\t\t\talias: 'symbol',\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'operator': /%/,\n\t\t\t\t\t\t'duration': {\n\t\t\t\t\t\t\tpattern: /\\d+/,\n\t\t\t\t\t\t\talias: 'number',\n\t\t\t\t\t\t},\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t'timer-keyword': {\n\t\t\t\t\tpattern: /^~/,\n\t\t\t\t\talias: 'keyword',\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\t};\n}(Prism));\n/components/prism-livescript.js\u000bPrism.languages.livescript = {\n\t'comment': [\n\t\t{\n\t\t\tpattern: /(^|[^\\\\])\\/\\*[\\s\\S]*?\\*\\//,\n\t\t\tlookbehind: true\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^\\\\])#.*/,\n\t\t\tlookbehind: true\n\t\t}\n\t],\n\t'interpolated-string': {\n\t\t/* Look-behind and look-ahead prevents wrong behavior of the greedy pattern\n\t\t* forcing it to match \"\"\"-quoted string when it would otherwise match \"-quoted first. */\n\t\tpattern: /(^|[^\"])(\"\"\"|\")(?:\\\\[\\s\\S]|(?!\\2)[^\\\\])*\\2(?!\")/,\n\t\tlookbehind: true,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'variable': {\n\t\t\t\tpattern: /(^|[^\\\\])#[a-z_](?:-?[a-z]|[\\d_])*/m,\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\t'interpolation': {\n\t\t\t\tpattern: /(^|[^\\\\])#\\{[^}]+\\}/m,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'interpolation-punctuation': {\n\t\t\t\t\t\tpattern: /^#\\{|\\}$/,\n\t\t\t\t\t\talias: 'variable'\n\t\t\t\t\t}\n\t\t\t\t\t// See rest below\n\t\t\t\t}\n\t\t\t},\n\t\t\t'string': /[\\s\\S]+/\n\t\t}\n\t},\n\t'string': [\n\t\t{\n\t\t\tpattern: /('''|')(?:\\\\[\\s\\S]|(?!\\1)[^\\\\])*\\1/,\n\t\t\tgreedy: true\n\t\t},\n\t\t{\n\t\t\tpattern: /<\\[[\\s\\S]*?\\]>/,\n\t\t\tgreedy: true\n\t\t},\n\t\t/\\\\[^\\s,;\\])}]+/\n\t],\n\t'regex': [\n\t\t{\n\t\t\tpattern: /\\/\\/(?:\\[[^\\r\\n\\]]*\\]|\\\\.|(?!\\/\\/)[^\\\\\\[])+\\/\\/[gimyu]{0,5}/,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'comment': {\n\t\t\t\t\tpattern: /(^|[^\\\\])#.*/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tpattern: /\\/(?:\\[[^\\r\\n\\]]*\\]|\\\\.|[^/\\\\\\r\\n\\[])+\\/[gimyu]{0,5}/,\n\t\t\tgreedy: true\n\t\t}\n\t],\n\t'keyword': {\n\t\tpattern: /(^|(?!-).)\\b(?:break|case|catch|class|const|continue|default|do|else|extends|fallthrough|finally|for(?: ever)?|function|if|implements|it|let|loop|new|null|otherwise|own|return|super|switch|that|then|this|throw|try|unless|until|var|void|when|while|yield)(?!-)\\b/m,\n\t\tlookbehind: true\n\t},\n\t'keyword-operator': {\n\t\tpattern: /(^|[^-])\\b(?:(?:delete|require|typeof)!|(?:and|by|delete|export|from|import(?: all)?|in|instanceof|is(?: not|nt)?|not|of|or|til|to|typeof|with|xor)(?!-)\\b)/m,\n\t\tlookbehind: true,\n\t\talias: 'operator'\n\t},\n\t'boolean': {\n\t\tpattern: /(^|[^-])\\b(?:false|no|off|on|true|yes)(?!-)\\b/m,\n\t\tlookbehind: true\n\t},\n\t'argument': {\n\t\t// Don't match .&. nor &&\n\t\tpattern: /(^|(?!\\.&\\.)[^&])&(?!&)\\d*/m,\n\t\tlookbehind: true,\n\t\talias: 'variable'\n\t},\n\t'number': /\\b(?:\\d+~[\\da-z]+|\\d[\\d_]*(?:\\.\\d[\\d_]*)?(?:[a-z]\\w*)?)/i,\n\t'identifier': /[a-z_](?:-?[a-z]|[\\d_])*/i,\n\t'operator': [\n\t\t// Spaced .\n\t\t{\n\t\t\tpattern: /( )\\.(?= )/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t// Full list, in order:\n\t\t// .= .~ .. ...\n\t\t// .&. .^. .<<. .>>. .>>>.\n\t\t// := :: ::=\n\t\t// &&\n\t\t// || |>\n\t\t// < << <<< <<<<\n\t\t// <- <-- <-! <--!\n\t\t// <~ <~~ <~! <~~!\n\t\t// <| <= <?\n\t\t// > >> >= >?\n\t\t// - -- -> -->\n\t\t// + ++\n\t\t// @ @@\n\t\t// % %%\n\t\t// * **\n\t\t// ! != !~=\n\t\t// !~> !~~>\n\t\t// !-> !-->\n\t\t// ~ ~> ~~> ~=\n\t\t// = ==\n\t\t// ^ ^^\n\t\t// / ?\n\t\t/\\.(?:[=~]|\\.\\.?)|\\.(?:[&|^]|<<|>>>?)\\.|:(?:=|:=?)|&&|\\|[|>]|<(?:<<?<?|--?!?|~~?!?|[|=?])?|>[>=?]?|-(?:->?|>)?|\\+\\+?|@@?|%%?|\\*\\*?|!(?:~?=|--?>|~?~>)?|~(?:~?>|=)?|==?|\\^\\^?|[\\/?]/\n\t],\n\t'punctuation': /[(){}\\[\\]|.,:;`]/\n};\n\nPrism.languages.livescript['interpolated-string'].inside['interpolation'].inside.rest = Prism.languages.livescript;\n!/components/prism-markdown.min.js\u0014\u0012!function(n){function e(n){return n=n.replace(/<inner>/g,(function(){return\"(?:\\\\\\\\.|[^\\\\\\\\\\n\\r]|(?:\\n|\\r\\n?)(?![\\r\\n]))\"})),RegExp(\"((?:^|[^\\\\\\\\])(?:\\\\\\\\{2})*)(?:\"+n+\")\")}var t=\"(?:\\\\\\\\.|``(?:[^`\\r\\n]|`(?!`))+``|`[^`\\r\\n]+`|[^\\\\\\\\|\\r\\n`])+\",a=\"\\\\|?__(?:\\\\|__)+\\\\|?(?:(?:\\n|\\r\\n?)|(?![^]))\".replace(/__/g,(function(){return t})),i=\"\\\\|?[ \\t]*:?-{3,}:?[ \\t]*(?:\\\\|[ \\t]*:?-{3,}:?[ \\t]*)+\\\\|?(?:\\n|\\r\\n?)\";n.languages.markdown=n.languages.extend(\"markup\",{}),n.languages.insertBefore(\"markdown\",\"prolog\",{\"front-matter-block\":{pattern:/(^(?:\\s*[\\r\\n])?)---(?!.)[\\s\\S]*?[\\r\\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,\"front-matter\":{pattern:/\\S+(?:\\s+\\S+)*/,alias:[\"yaml\",\"language-yaml\"],inside:n.languages.yaml}}},blockquote:{pattern:/^>(?:[\\t ]*>)*/m,alias:\"punctuation\"},table:{pattern:RegExp(\"^\"+a+i+\"(?:\"+a+\")*\",\"m\"),inside:{\"table-data-rows\":{pattern:RegExp(\"^(\"+a+i+\")(?:\"+a+\")*$\"),lookbehind:!0,inside:{\"table-data\":{pattern:RegExp(t),inside:n.languages.markdown},punctuation:/\\|/}},\"table-line\":{pattern:RegExp(\"^(\"+a+\")\"+i+\"$\"),lookbehind:!0,inside:{punctuation:/\\||:?-{3,}:?/}},\"table-header-row\":{pattern:RegExp(\"^\"+a+\"$\"),inside:{\"table-header\":{pattern:RegExp(t),alias:\"important\",inside:n.languages.markdown},punctuation:/\\|/}}}},code:[{pattern:/((?:^|\\n)[ \\t]*\\n|(?:^|\\r\\n?)[ \\t]*\\r\\n?)(?: {4}|\\t).+(?:(?:\\n|\\r\\n?)(?: {4}|\\t).+)*/,lookbehind:!0,alias:\"keyword\"},{pattern:/^```[\\s\\S]*?^```$/m,greedy:!0,inside:{\"code-block\":{pattern:/^(```.*(?:\\n|\\r\\n?))[\\s\\S]+?(?=(?:\\n|\\r\\n?)^```$)/m,lookbehind:!0},\"code-language\":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\\S.*(?:\\n|\\r\\n?)(?:==+|--+)(?=[ \\t]*$)/m,alias:\"important\",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\\s*)#.+/m,lookbehind:!0,alias:\"important\",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\\s*)([*-])(?:[\\t ]*\\2){2,}(?=\\s*$)/m,lookbehind:!0,alias:\"punctuation\"},list:{pattern:/(^\\s*)(?:[*+-]|\\d+\\.)(?=[\\t ].)/m,lookbehind:!0,alias:\"punctuation\"},\"url-reference\":{pattern:/!?\\[[^\\]]+\\]:[\\t ]+(?:\\S+|<(?:\\\\.|[^>\\\\])+>)(?:[\\t ]+(?:\"(?:\\\\.|[^\"\\\\])*\"|'(?:\\\\.|[^'\\\\])*'|\\((?:\\\\.|[^)\\\\])*\\)))?/,inside:{variable:{pattern:/^(!?\\[)[^\\]]+/,lookbehind:!0},string:/(?:\"(?:\\\\.|[^\"\\\\])*\"|'(?:\\\\.|[^'\\\\])*'|\\((?:\\\\.|[^)\\\\])*\\))$/,punctuation:/^[\\[\\]!:]|[<>]/},alias:\"url\"},bold:{pattern:e(\"\\\\b__(?:(?!_)<inner>|_(?:(?!_)<inner>)+_)+__\\\\b|\\\\*\\\\*(?:(?!\\\\*)<inner>|\\\\*(?:(?!\\\\*)<inner>)+\\\\*)+\\\\*\\\\*\"),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\\s\\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\\*\\*|__/}},italic:{pattern:e(\"\\\\b_(?:(?!_)<inner>|__(?:(?!_)<inner>)+__)+_\\\\b|\\\\*(?:(?!\\\\*)<inner>|\\\\*\\\\*(?:(?!\\\\*)<inner>)+\\\\*\\\\*)+\\\\*\"),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\\s\\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:e(\"(~~?)(?:(?!~)<inner>)+\\\\2\"),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\\s\\S]+(?=\\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},\"code-snippet\":{pattern:/(^|[^\\\\`])(?:``[^`\\r\\n]+(?:`[^`\\r\\n]+)*``(?!`)|`[^`\\r\\n]+`(?!`))/,lookbehind:!0,greedy:!0,alias:[\"code\",\"keyword\"]},url:{pattern:e('!?\\\\[(?:(?!\\\\])<inner>)+\\\\](?:\\\\([^\\\\s)]+(?:[\\t ]+\"(?:\\\\\\\\.|[^\"\\\\\\\\])*\")?\\\\)|[ \\t]?\\\\[(?:(?!\\\\])<inner>)+\\\\])'),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\\[)[^\\]]+(?=\\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\\][ \\t]?\\[)[^\\]]+(?=\\]$)/,lookbehind:!0},url:{pattern:/(^\\]\\()[^\\s)]+/,lookbehind:!0},string:{pattern:/(^[ \\t]+)\"(?:\\\\.|[^\"\\\\])*\"(?=\\)$)/,lookbehind:!0}}}}),[\"url\",\"bold\",\"italic\",\"strike\"].forEach((function(e){[\"url\",\"bold\",\"italic\",\"strike\",\"code-snippet\"].forEach((function(t){e!==t&&(n.languages.markdown[e].inside.content.inside[t]=n.languages.markdown[t])}))})),n.hooks.add(\"after-tokenize\",(function(n){\"markdown\"!==n.language&&\"md\"!==n.language||function n(e){if(e&&\"string\"!=typeof e)for(var t=0,a=e.length;t<a;t++){var i=e[t];if(\"code\"===i.type){var r=i.content[1],o=i.content[3];if(r&&o&&\"code-language\"===r.type&&\"code-block\"===o.type&&\"string\"==typeof r.content){var l=r.content.replace(/\\b#/g,\"sharp\").replace(/\\b\\+\\+/g,\"pp\"),s=\"language-\"+(l=(/[a-z][\\w-]*/i.exec(l)||[\"\"])[0].toLowerCase());o.alias?\"string\"==typeof o.alias?o.alias=[o.alias,s]:o.alias.push(s):o.alias=[s]}}else n(i.content)}}(n.tokens)})),n.hooks.add(\"wrap\",(function(e){if(\"code-block\"===e.type){for(var t=\"\",a=0,i=e.classes.length;a<i;a++){var s=e.classes[a],d=/language-(.+)/.exec(s);if(d){t=d[1];break}}var p=n.languages[t];if(p)e.content=n.highlight(e.content.replace(r,\"\").replace(/&(\\w{1,8}|#x?[\\da-f]{1,8});/gi,(function(n,e){var t;return\"#\"===(e=e.toLowerCase())[0]?(t=\"x\"===e[1]?parseInt(e.slice(2),16):Number(e.slice(1)),l(t)):o[e]||n})),p,t);else if(t&&\"none\"!==t&&n.plugins.autoloader){var u=\"md-\"+(new Date).valueOf()+\"-\"+Math.floor(1e16*Math.random());e.attributes.id=u,n.plugins.autoloader.loadLanguages(t,(function(){var e=document.getElementById(u);e&&(e.innerHTML=n.highlight(e.textContent,n.languages[t],t))}))}}}));var r=RegExp(n.languages.markup.tag.pattern.source,\"gi\"),o={amp:\"&\",lt:\"<\",gt:\">\",quot:'\"'},l=String.fromCodePoint||String.fromCharCode;n.languages.md=n.languages.markdown}(Prism);+/plugins/autolinker/prism-autolinker.min.js\u0004?!function(){if(\"undefined\"!=typeof Prism){var i=/\\b([a-z]{3,7}:\\/\\/|tel:)[\\w\\-+%~/.:=&!$'()*,;@]+(?:\\?[\\w\\-+%~/.:=?&!$'()*,;@]*)?(?:#[\\w\\-+%~/.:#=?&!$'()*,;@]*)?/,n=/\\b\\S+@[\\w.]+[a-z]{2}/,t=/\\[([^\\]]+)\\]\\(([^)]+)\\)/,e=[\"comment\",\"url\",\"attr-value\",\"string\"];Prism.plugins.autolinker={processGrammar:function(r){r&&!r[\"url-link\"]&&(Prism.languages.DFS(r,(function(r,a,l){e.indexOf(l)>-1&&!Array.isArray(a)&&(a.pattern||(a=this[r]={pattern:a}),a.inside=a.inside||{},\"comment\"==l&&(a.inside[\"md-link\"]=t),\"attr-value\"==l?Prism.languages.insertBefore(\"inside\",\"punctuation\",{\"url-link\":i},a):a.inside[\"url-link\"]=i,a.inside[\"email-link\"]=n)})),r[\"url-link\"]=i,r[\"email-link\"]=n)}},Prism.hooks.add(\"before-highlight\",(function(i){Prism.plugins.autolinker.processGrammar(i.grammar)})),Prism.hooks.add(\"wrap\",(function(i){if(/-link$/.test(i.type)){i.tag=\"a\";var n=i.content;if(\"email-link\"==i.type&&0!=n.indexOf(\"mailto:\"))n=\"mailto:\"+n;else if(\"md-link\"==i.type){var e=i.content.match(t);n=e[2],i.content=e[1]}i.attributes.href=n;try{i.content=decodeURIComponent(i.content)}catch(i){}}}))}}();/components/prism-gml.js \bPrism.languages.gamemakerlanguage = Prism.languages.gml = Prism.languages.extend('clike', {\n\t'keyword': /\\b(?:break|case|continue|default|do|else|enum|exit|for|globalvar|if|repeat|return|switch|until|var|while)\\b/,\n\t'number': /(?:\\b0x[\\da-f]+|(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:e[+-]?\\d+)?)[ulf]{0,4}/i,\n\t'operator': /--|\\+\\+|[-+%/=]=?|!=|\\*\\*?=?|<[<=>]?|>[=>]?|&&?|\\^\\^?|\\|\\|?|~|\\b(?:and|at|not|or|with|xor)\\b/,\n\t'constant': /\\b(?:GM_build_date|GM_version|action_(?:continue|restart|reverse|stop)|all|gamespeed_(?:fps|microseconds)|global|local|noone|other|pi|pointer_(?:invalid|null)|self|timezone_(?:local|utc)|undefined|ev_(?:create|destroy|step|alarm|keyboard|mouse|collision|other|draw|draw_(?:begin|end|post|pre)|keypress|keyrelease|trigger|(?:left|middle|no|right)_button|(?:left|middle|right)_press|(?:left|middle|right)_release|mouse_(?:enter|leave|wheel_down|wheel_up)|global_(?:left|middle|right)_button|global_(?:left|middle|right)_press|global_(?:left|middle|right)_release|joystick(?:1|2)_(?:button1|button2|button3|button4|button5|button6|button7|button8|down|left|right|up)|outside|boundary|game_start|game_end|room_start|room_end|no_more_lives|animation_end|end_of_path|no_more_health|user\\d|gui|gui_begin|gui_end|step_(?:begin|end|normal))|vk_(?:alt|anykey|backspace|control|delete|down|end|enter|escape|home|insert|left|nokey|pagedown|pageup|pause|printscreen|return|right|shift|space|tab|up|f\\d|numpad\\d|add|decimal|divide|lalt|lcontrol|lshift|multiply|ralt|rcontrol|rshift|subtract)|achievement_(?:filter_(?:all_players|favorites_only|friends_only)|friends_info|info|leaderboard_info|our_info|pic_loaded|show_(?:achievement|bank|friend_picker|leaderboard|profile|purchase_prompt|ui)|type_challenge|type_score_challenge)|asset_(?:font|object|path|room|script|shader|sound|sprite|tiles|timeline|unknown)|audio_(?:3d|falloff_(?:exponent_distance|exponent_distance_clamped|inverse_distance|inverse_distance_clamped|linear_distance|linear_distance_clamped|none)|mono|new_system|old_system|stereo)|bm_(?:add|complex|dest_alpha|dest_color|dest_colour|inv_dest_alpha|inv_dest_color|inv_dest_colour|inv_src_alpha|inv_src_color|inv_src_colour|max|normal|one|src_alpha|src_alpha_sat|src_color|src_colour|subtract|zero)|browser_(?:chrome|firefox|ie|ie_mobile|not_a_browser|opera|safari|safari_mobile|tizen|unknown|windows_store)|buffer_(?:bool|f16|f32|f64|fast|fixed|generalerror|grow|invalidtype|network|outofbounds|outofspace|s16|s32|s8|seek_end|seek_relative|seek_start|string|text|u16|u32|u64|u8|vbuffer|wrap)|c_(?:aqua|black|blue|dkgray|fuchsia|gray|green|lime|ltgray|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow)|cmpfunc_(?:always|equal|greater|greaterequal|less|lessequal|never|notequal)|cr_(?:appstart|arrow|beam|cross|default|drag|handpoint|hourglass|none|size_all|size_nesw|size_ns|size_nwse|size_we|uparrow)|cull_(?:clockwise|counterclockwise|noculling)|device_(?:emulator|tablet)|device_ios_(?:ipad|ipad_retina|iphone|iphone5|iphone6|iphone6plus|iphone_retina|unknown)|display_(?:landscape|landscape_flipped|portrait|portrait_flipped)|dll_(?:cdecl|cdel|stdcall)|ds_type_(?:grid|list|map|priority|queue|stack)|ef_(?:cloud|ellipse|explosion|firework|flare|rain|ring|smoke|smokeup|snow|spark|star)|fa_(?:archive|bottom|center|directory|hidden|left|middle|readonly|right|sysfile|top|volumeid)|fb_login_(?:default|fallback_to_webview|forcing_safari|forcing_webview|no_fallback_to_webview|use_system_account)|iap_(?:available|canceled|ev_consume|ev_product|ev_purchase|ev_restore|ev_storeload|failed|purchased|refunded|status_available|status_loading|status_processing|status_restoring|status_unavailable|status_uninitialised|storeload_failed|storeload_ok|unavailable)|leaderboard_type_(?:number|time_mins_secs)|lighttype_(?:dir|point)|matrix_(?:projection|view|world)|mb_(?:any|left|middle|none|right)|network_(?:config_(?:connect_timeout|disable_reliable_udp|enable_reliable_udp|use_non_blocking_socket)|socket_(?:bluetooth|tcp|udp)|type_(?:connect|data|disconnect|non_blocking_connect))|of_challenge_(?:lose|tie|win)|os_(?:android|ios|linux|macosx|ps3|ps4|psvita|unknown|uwp|win32|win8native|windows|winphone|xboxone)|phy_debug_render_(?:aabb|collision_pairs|coms|core_shapes|joints|obb|shapes)|phy_joint_(?:anchor_1_x|anchor_1_y|anchor_2_x|anchor_2_y|angle|angle_limits|damping_ratio|frequency|length_1|length_2|lower_angle_limit|max_force|max_length|max_motor_force|max_motor_torque|max_torque|motor_force|motor_speed|motor_torque|reaction_force_x|reaction_force_y|reaction_torque|speed|translation|upper_angle_limit)|phy_particle_data_flag_(?:category|color|colour|position|typeflags|velocity)|phy_particle_flag_(?:colormixing|colourmixing|elastic|powder|spring|tensile|viscous|wall|water|zombie)|phy_particle_group_flag_(?:rigid|solid)|pr_(?:linelist|linestrip|pointlist|trianglefan|trianglelist|trianglestrip)|ps_(?:distr|shape)_(?:diamond|ellipse|gaussian|invgaussian|line|linear|rectangle)|pt_shape_(?:circle|cloud|disk|explosion|flare|line|pixel|ring|smoke|snow|spark|sphere|square|star)|ty_(?:real|string)|gp_(?:face\\d|axislh|axislv|axisrh|axisrv|padd|padl|padr|padu|select|shoulderl|shoulderlb|shoulderr|shoulderrb|start|stickl|stickr)|lb_disp_(?:none|numeric|time_ms|time_sec)|lb_sort_(?:ascending|descending|none)|ov_(?:achievements|community|friends|gamegroup|players|settings)|ugc_(?:filetype_(?:community|microtrans)|list_(?:Favorited|Followed|Published|Subscribed|UsedOrPlayed|VotedDown|VotedOn|VotedUp|WillVoteLater)|match_(?:AllGuides|Artwork|Collections|ControllerBindings|IntegratedGuides|Items|Items_Mtx|Items_ReadyToUse|Screenshots|UsableInGame|Videos|WebGuides)|query_(?:AcceptedForGameRankedByAcceptanceDate|CreatedByFriendsRankedByPublicationDate|FavoritedByFriendsRankedByPublicationDate|NotYetRated)|query_RankedBy(?:NumTimesReported|PublicationDate|TextSearch|TotalVotesAsc|Trend|Vote|VotesUp)|result_success|sortorder_CreationOrder(?:Asc|Desc)|sortorder_(?:ForModeration|LastUpdatedDesc|SubscriptionDateDesc|TitleAsc|VoteScoreDesc)|visibility_(?:friends_only|private|public))|vertex_usage_(?:binormal|blendindices|blendweight|color|colour|depth|fog|normal|position|psize|sample|tangent|texcoord|textcoord)|vertex_type_(?:float\\d|color|colour|ubyte4)|input_type|layerelementtype_(?:background|instance|oldtilemap|particlesystem|sprite|tile|tilemap|undefined)|se_(?:chorus|compressor|echo|equalizer|flanger|gargle|none|reverb)|text_type|tile_(?:flip|index_mask|mirror|rotate)|(?:obj|rm|scr|spr)\\w+)\\b/,\n\t'variable': /\\b(?:alarm|application_surface|async_load|background_(?:alpha|blend|color|colour|foreground|height|hspeed|htiled|index|showcolor|showcolour|visible|vspeed|vtiled|width|x|xscale|y|yscale)|bbox_(?:bottom|left|right|top)|browser_(?:height|width)|caption_(?:health|lives|score)|current_(?:day|hour|minute|month|second|time|weekday|year)|cursor_sprite|debug_mode|delta_time|direction|display_aa|error_(?:last|occurred)|event_(?:action|number|object|type)|fps|fps_real|friction|game_(?:display|project|save)_(?:id|name)|gamemaker_(?:pro|registered|version)|gravity|gravity_direction|(?:h|v)speed|health|iap_data|id|image_(?:alpha|angle|blend|depth|index|number|speed|xscale|yscale)|instance_(?:count|id)|keyboard_(?:key|lastchar|lastkey|string)|layer|lives|mask_index|mouse_(?:button|lastbutton|x|y)|object_index|os_(?:browser|device|type|version)|path_(?:endaction|index|orientation|position|positionprevious|scale|speed)|persistent|phy_(?:rotation|(?:col_normal|collision|com|linear_velocity|position|speed)_(?:x|y)|angular_(?:damping|velocity)|position_(?:x|y)previous|speed|linear_damping|bullet|fixed_rotation|active|mass|inertia|dynamic|kinematic|sleeping|collision_points)|pointer_(?:invalid|null)|room|room_(?:caption|first|height|last|persistent|speed|width)|score|secure_mode|show_(?:health|lives|score)|solid|speed|sprite_(?:height|index|width|xoffset|yoffset)|temp_directory|timeline_(?:index|loop|position|running|speed)|transition_(?:color|kind|steps)|undefined|view_(?:angle|current|enabled|(?:h|v)(?:border|speed)|(?:h|w|x|y)port|(?:h|w|x|y)view|object|surface_id|visible)|visible|webgl_enabled|working_directory|(?:x|y)(?:previous|start)|x|y|argument(?:_relitive|_count|\\d)|argument|global|local|other|self)\\b/\n});\n/components/prism-haxe.min.js\u0006+Prism.languages.haxe=Prism.languages.extend(\"clike\",{string:{pattern:/\"(?:[^\"\\\\]|\\\\[\\s\\S])*\"/,greedy:!0},\"class-name\":[{pattern:/(\\b(?:abstract|class|enum|extends|implements|interface|new|typedef)\\s+)[A-Z_]\\w*/,lookbehind:!0},/\\b[A-Z]\\w*/],keyword:/\\bthis\\b|\\b(?:abstract|as|break|case|cast|catch|class|continue|default|do|dynamic|else|enum|extends|extern|final|for|from|function|if|implements|import|in|inline|interface|macro|new|null|operator|overload|override|package|private|public|return|static|super|switch|throw|to|try|typedef|untyped|using|var|while)(?!\\.)\\b/,function:{pattern:/\\b[a-z_]\\w*(?=\\s*(?:<[^<>]*>\\s*)?\\()/i,greedy:!0},operator:/\\.{3}|\\+\\+|--|&&|\\|\\||->|=>|(?:<<?|>{1,3}|[-+*/%!=&|^])=?|[?:~]/}),Prism.languages.insertBefore(\"haxe\",\"string\",{\"string-interpolation\":{pattern:/'(?:[^'\\\\]|\\\\[\\s\\S])*'/,greedy:!0,inside:{interpolation:{pattern:/(^|[^\\\\])\\$(?:\\w+|\\{[^{}]+\\})/,lookbehind:!0,inside:{\"interpolation-punctuation\":{pattern:/^\\$\\{?|\\}$/,alias:\"punctuation\"},expression:{pattern:/[\\s\\S]+/,inside:Prism.languages.haxe}}},string:/[\\s\\S]+/}}}),Prism.languages.insertBefore(\"haxe\",\"class-name\",{regex:{pattern:/~\\/(?:[^\\/\\\\\\r\\n]|\\\\.)+\\/[a-z]*/,greedy:!0,inside:{\"regex-flags\":/\\b[a-z]+$/,\"regex-source\":{pattern:/^(~\\/)[\\s\\S]+(?=\\/$)/,lookbehind:!0,alias:\"language-regex\",inside:Prism.languages.regex},\"regex-delimiter\":/^~\\/|\\/$/}}}),Prism.languages.insertBefore(\"haxe\",\"keyword\",{preprocessor:{pattern:/#(?:else|elseif|end|if)\\b.*/,alias:\"property\"},metadata:{pattern:/@:?[\\w.]+/,alias:\"symbol\"},reification:{pattern:/\\$(?:\\w+|(?=\\{))/,alias:\"important\"}});/components/prism-gap.js\u0005]// https://www.gap-system.org/Manuals/doc/ref/chap4.html\n// https://www.gap-system.org/Manuals/doc/ref/chap27.html\n\nPrism.languages.gap = {\n\t'shell': {\n\t\tpattern: /^gap>[\\s\\S]*?(?=^gap>|$(?![\\s\\S]))/m,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'gap': {\n\t\t\t\tpattern: /^(gap>).+(?:(?:\\r(?:\\n|(?!\\n))|\\n)>.*)*/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: null // see below\n\t\t\t},\n\t\t\t'punctuation': /^gap>/\n\t\t}\n\t},\n\n\t'comment': {\n\t\tpattern: /#.*/,\n\t\tgreedy: true\n\t},\n\t'string': {\n\t\tpattern: /(^|[^\\\\'\"])(?:'(?:[^\\r\\n\\\\']|\\\\.){1,10}'|\"(?:[^\\r\\n\\\\\"]|\\\\.)*\"(?!\")|\"\"\"[\\s\\S]*?\"\"\")/,\n\t\tlookbehind: true,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'continuation': {\n\t\t\t\tpattern: /([\\r\\n])>/,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'punctuation'\n\t\t\t}\n\t\t}\n\t},\n\n\t'keyword': /\\b(?:Assert|Info|IsBound|QUIT|TryNextMethod|Unbind|and|atomic|break|continue|do|elif|else|end|fi|for|function|if|in|local|mod|not|od|or|quit|readonly|readwrite|rec|repeat|return|then|until|while)\\b/,\n\t'boolean': /\\b(?:false|true)\\b/,\n\n\t'function': /\\b[a-z_]\\w*(?=\\s*\\()/i,\n\n\t'number': {\n\t\tpattern: /(^|[^\\w.]|\\.\\.)(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+)?(?:_[a-z]?)?(?=$|[^\\w.]|\\.\\.)/,\n\t\tlookbehind: true\n\t},\n\n\t'continuation': {\n\t\tpattern: /([\\r\\n])>/,\n\t\tlookbehind: true,\n\t\talias: 'punctuation'\n\t},\n\t'operator': /->|[-+*/^~=!]|<>|[<>]=?|:=|\\.\\./,\n\t'punctuation': /[()[\\]{},;.:]/\n};\n\nPrism.languages.gap.shell.inside.gap.inside = Prism.languages.gap;\n\"/components/prism-ichigojam.min.js\u0002Prism.languages.ichigojam={comment:/(?:\\B'|REM)(?:[^\\n\\r]*)/i,string:{pattern:/\"(?:\"\"|[!#$%&'()*,\\/:;<=>?^\\w +\\-.])*\"/,greedy:!0},number:/\\B#[0-9A-F]+|\\B`[01]+|(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:E[+-]?\\d+)?/i,keyword:/\\b(?:BEEP|BPS|CASE|CLEAR|CLK|CLO|CLP|CLS|CLT|CLV|CONT|COPY|ELSE|END|FILE|FILES|FOR|GOSUB|GOTO|GSB|IF|INPUT|KBD|LED|LET|LIST|LOAD|LOCATE|LRUN|NEW|NEXT|OUT|PLAY|POKE|PRINT|PWM|REM|RENUM|RESET|RETURN|RIGHT|RTN|RUN|SAVE|SCROLL|SLEEP|SRND|STEP|STOP|SUB|TEMPO|THEN|TO|UART|VIDEO|WAIT)(?:\\$|\\b)/i,function:/\\b(?:ABS|ANA|ASC|BIN|BTN|DEC|END|FREE|HELP|HEX|I2CR|I2CW|IN|INKEY|LEN|LINE|PEEK|RND|SCR|SOUND|STR|TICK|USR|VER|VPEEK|ZER)(?:\\$|\\b)/i,label:/(?:\\B@\\S+)/,operator:/<[=>]?|>=?|\\|\\||&&|[+\\-*\\/=|&^~!]|\\b(?:AND|NOT|OR)\\b/i,punctuation:/[\\[,;:()\\]]/};/dependencies.js.3'use strict';\n\n/**\n * @typedef {Object<string, ComponentCategory>} Components\n * @typedef {Object<string, ComponentEntry | string>} ComponentCategory\n *\n * @typedef ComponentEntry\n * @property {string} [title] The title of the component.\n * @property {string} [owner] The GitHub user name of the owner.\n * @property {boolean} [noCSS=false] Whether the component doesn't have style sheets which should also be loaded.\n * @property {string | string[]} [alias] An optional list of aliases for the id of the component.\n * @property {Object<string, string>} [aliasTitles] An optional map from an alias to its title.\n *\n * Aliases which are not in this map will the get title of the component.\n * @property {string | string[]} [optional]\n * @property {string | string[]} [require]\n * @property {string | string[]} [modify]\n */\n\nvar getLoader = (function () {\n\n\t/**\n\t * A function which does absolutely nothing.\n\t *\n\t * @type {any}\n\t */\n\tvar noop = function () { };\n\n\t/**\n\t * Invokes the given callback for all elements of the given value.\n\t *\n\t * If the given value is an array, the callback will be invokes for all elements. If the given value is `null` or\n\t * `undefined`, the callback will not be invoked. In all other cases, the callback will be invoked with the given\n\t * value as parameter.\n\t *\n\t * @param {null | undefined | T | T[]} value\n\t * @param {(value: T, index: number) => void} callbackFn\n\t * @returns {void}\n\t * @template T\n\t */\n\tfunction forEach(value, callbackFn) {\n\t\tif (Array.isArray(value)) {\n\t\t\tvalue.forEach(callbackFn);\n\t\t} else if (value != null) {\n\t\t\tcallbackFn(value, 0);\n\t\t}\n\t}\n\n\t/**\n\t * Returns a new set for the given string array.\n\t *\n\t * @param {string[]} array\n\t * @returns {StringSet}\n\t *\n\t * @typedef {Object<string, true>} StringSet\n\t */\n\tfunction toSet(array) {\n\t\t/** @type {StringSet} */\n\t\tvar set = {};\n\t\tfor (var i = 0, l = array.length; i < l; i++) {\n\t\t\tset[array[i]] = true;\n\t\t}\n\t\treturn set;\n\t}\n\n\t/**\n\t * Creates a map of every components id to its entry.\n\t *\n\t * @param {Components} components\n\t * @returns {EntryMap}\n\t *\n\t * @typedef {{ readonly [id: string]: Readonly<ComponentEntry> | undefined }} EntryMap\n\t */\n\tfunction createEntryMap(components) {\n\t\t/** @type {Object<string, Readonly<ComponentEntry>>} */\n\t\tvar map = {};\n\n\t\tfor (var categoryName in components) {\n\t\t\tvar category = components[categoryName];\n\t\t\tfor (var id in category) {\n\t\t\t\tif (id != 'meta') {\n\t\t\t\t\t/** @type {ComponentEntry | string} */\n\t\t\t\t\tvar entry = category[id];\n\t\t\t\t\tmap[id] = typeof entry == 'string' ? { title: entry } : entry;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn map;\n\t}\n\n\t/**\n\t * Creates a full dependencies map which includes all types of dependencies and their transitive dependencies.\n\t *\n\t * @param {EntryMap} entryMap\n\t * @returns {DependencyResolver}\n\t *\n\t * @typedef {(id: string) => StringSet} DependencyResolver\n\t */\n\tfunction createDependencyResolver(entryMap) {\n\t\t/** @type {Object<string, StringSet>} */\n\t\tvar map = {};\n\t\tvar _stackArray = [];\n\n\t\t/**\n\t\t * Adds the dependencies of the given component to the dependency map.\n\t\t *\n\t\t * @param {string} id\n\t\t * @param {string[]} stack\n\t\t */\n\t\tfunction addToMap(id, stack) {\n\t\t\tif (id in map) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tstack.push(id);\n\n\t\t\t// check for circular dependencies\n\t\t\tvar firstIndex = stack.indexOf(id);\n\t\t\tif (firstIndex < stack.length - 1) {\n\t\t\t\tthrow new Error('Circular dependency: ' + stack.slice(firstIndex).join(' -> '));\n\t\t\t}\n\n\t\t\t/** @type {StringSet} */\n\t\t\tvar dependencies = {};\n\n\t\t\tvar entry = entryMap[id];\n\t\t\tif (entry) {\n\t\t\t\t/**\n\t\t\t\t * This will add the direct dependency and all of its transitive dependencies to the set of\n\t\t\t\t * dependencies of `entry`.\n\t\t\t\t *\n\t\t\t\t * @param {string} depId\n\t\t\t\t * @returns {void}\n\t\t\t\t */\n\t\t\t\tfunction handleDirectDependency(depId) {\n\t\t\t\t\tif (!(depId in entryMap)) {\n\t\t\t\t\t\tthrow new Error(id + ' depends on an unknown component ' + depId);\n\t\t\t\t\t}\n\t\t\t\t\tif (depId in dependencies) {\n\t\t\t\t\t\t// if the given dependency is already in the set of deps, then so are its transitive deps\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\taddToMap(depId, stack);\n\t\t\t\t\tdependencies[depId] = true;\n\t\t\t\t\tfor (var transitiveDepId in map[depId]) {\n\t\t\t\t\t\tdependencies[transitiveDepId] = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tforEach(entry.require, handleDirectDependency);\n\t\t\t\tforEach(entry.optional, handleDirectDependency);\n\t\t\t\tforEach(entry.modify, handleDirectDependency);\n\t\t\t}\n\n\t\t\tmap[id] = dependencies;\n\n\t\t\tstack.pop();\n\t\t}\n\n\t\treturn function (id) {\n\t\t\tvar deps = map[id];\n\t\t\tif (!deps) {\n\t\t\t\taddToMap(id, _stackArray);\n\t\t\t\tdeps = map[id];\n\t\t\t}\n\t\t\treturn deps;\n\t\t};\n\t}\n\n\t/**\n\t * Returns a function which resolves the aliases of its given id of alias.\n\t *\n\t * @param {EntryMap} entryMap\n\t * @returns {(idOrAlias: string) => string}\n\t */\n\tfunction createAliasResolver(entryMap) {\n\t\t/** @type {Object<string, string> | undefined} */\n\t\tvar map;\n\n\t\treturn function (idOrAlias) {\n\t\t\tif (idOrAlias in entryMap) {\n\t\t\t\treturn idOrAlias;\n\t\t\t} else {\n\t\t\t\t// only create the alias map if necessary\n\t\t\t\tif (!map) {\n\t\t\t\t\tmap = {};\n\n\t\t\t\t\tfor (var id in entryMap) {\n\t\t\t\t\t\tvar entry = entryMap[id];\n\t\t\t\t\t\tforEach(entry && entry.alias, function (alias) {\n\t\t\t\t\t\t\tif (alias in map) {\n\t\t\t\t\t\t\t\tthrow new Error(alias + ' cannot be alias for both ' + id + ' and ' + map[alias]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (alias in entryMap) {\n\t\t\t\t\t\t\t\tthrow new Error(alias + ' cannot be alias of ' + id + ' because it is a component.');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tmap[alias] = id;\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn map[idOrAlias] || idOrAlias;\n\t\t\t}\n\t\t};\n\t}\n\n\t/**\n\t * @typedef LoadChainer\n\t * @property {(before: T, after: () => T) => T} series\n\t * @property {(values: T[]) => T} parallel\n\t * @template T\n\t */\n\n\t/**\n\t * Creates an implicit DAG from the given components and dependencies and call the given `loadComponent` for each\n\t * component in topological order.\n\t *\n\t * @param {DependencyResolver} dependencyResolver\n\t * @param {StringSet} ids\n\t * @param {(id: string) => T} loadComponent\n\t * @param {LoadChainer<T>} [chainer]\n\t * @returns {T}\n\t * @template T\n\t */\n\tfunction loadComponentsInOrder(dependencyResolver, ids, loadComponent, chainer) {\n\t\tvar series = chainer ? chainer.series : undefined;\n\t\tvar parallel = chainer ? chainer.parallel : noop;\n\n\t\t/** @type {Object<string, T>} */\n\t\tvar cache = {};\n\n\t\t/**\n\t\t * A set of ids of nodes which are not depended upon by any other node in the graph.\n\t\t *\n\t\t * @type {StringSet}\n\t\t */\n\t\tvar ends = {};\n\n\t\t/**\n\t\t * Loads the given component and its dependencies or returns the cached value.\n\t\t *\n\t\t * @param {string} id\n\t\t * @returns {T}\n\t\t */\n\t\tfunction handleId(id) {\n\t\t\tif (id in cache) {\n\t\t\t\treturn cache[id];\n\t\t\t}\n\n\t\t\t// assume that it's an end\n\t\t\t// if it isn't, it will be removed later\n\t\t\tends[id] = true;\n\n\t\t\t// all dependencies of the component in the given ids\n\t\t\tvar dependsOn = [];\n\t\t\tfor (var depId in dependencyResolver(id)) {\n\t\t\t\tif (depId in ids) {\n\t\t\t\t\tdependsOn.push(depId);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * The value to be returned.\n\t\t\t *\n\t\t\t * @type {T}\n\t\t\t */\n\t\t\tvar value;\n\n\t\t\tif (dependsOn.length === 0) {\n\t\t\t\tvalue = loadComponent(id);\n\t\t\t} else {\n\t\t\t\tvar depsValue = parallel(dependsOn.map(function (depId) {\n\t\t\t\t\tvar value = handleId(depId);\n\t\t\t\t\t// none of the dependencies can be ends\n\t\t\t\t\tdelete ends[depId];\n\t\t\t\t\treturn value;\n\t\t\t\t}));\n\t\t\t\tif (series) {\n\t\t\t\t\t// the chainer will be responsibly for calling the function calling loadComponent\n\t\t\t\t\tvalue = series(depsValue, function () { return loadComponent(id); });\n\t\t\t\t} else {\n\t\t\t\t\t// we don't have a chainer, so we call loadComponent ourselves\n\t\t\t\t\tloadComponent(id);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// cache and return\n\t\t\treturn cache[id] = value;\n\t\t}\n\n\t\tfor (var id in ids) {\n\t\t\thandleId(id);\n\t\t}\n\n\t\t/** @type {T[]} */\n\t\tvar endValues = [];\n\t\tfor (var endId in ends) {\n\t\t\tendValues.push(cache[endId]);\n\t\t}\n\t\treturn parallel(endValues);\n\t}\n\n\t/**\n\t * Returns whether the given object has any keys.\n\t *\n\t * @param {object} obj\n\t */\n\tfunction hasKeys(obj) {\n\t\tfor (var key in obj) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t * Returns an object which provides methods to get the ids of the components which have to be loaded (`getIds`) and\n\t * a way to efficiently load them in synchronously and asynchronous contexts (`load`).\n\t *\n\t * The set of ids to be loaded is a superset of `load`. If some of these ids are in `loaded`, the corresponding\n\t * components will have to reloaded.\n\t *\n\t * The ids in `load` and `loaded` may be in any order and can contain duplicates.\n\t *\n\t * @param {Components} components\n\t * @param {string[]} load\n\t * @param {string[]} [loaded=[]] A list of already loaded components.\n\t *\n\t * If a component is in this list, then all of its requirements will also be assumed to be in the list.\n\t * @returns {Loader}\n\t *\n\t * @typedef Loader\n\t * @property {() => string[]} getIds A function to get all ids of the components to load.\n\t *\n\t * The returned ids will be duplicate-free, alias-free and in load order.\n\t * @property {LoadFunction} load A functional interface to load components.\n\t *\n\t * @typedef {<T> (loadComponent: (id: string) => T, chainer?: LoadChainer<T>) => T} LoadFunction\n\t * A functional interface to load components.\n\t *\n\t * The `loadComponent` function will be called for every component in the order in which they have to be loaded.\n\t *\n\t * The `chainer` is useful for asynchronous loading and its `series` and `parallel` functions can be thought of as\n\t * `Promise#then` and `Promise.all`.\n\t *\n\t * @example\n\t * load(id => { loadComponent(id); }); // returns undefined\n\t *\n\t * await load(\n\t *     id => loadComponentAsync(id), // returns a Promise for each id\n\t *     {\n\t *         series: async (before, after) => {\n\t *             await before;\n\t *             await after();\n\t *         },\n\t *         parallel: async (values) => {\n\t *             await Promise.all(values);\n\t *         }\n\t *     }\n\t * );\n\t */\n\tfunction getLoader(components, load, loaded) {\n\t\tvar entryMap = createEntryMap(components);\n\t\tvar resolveAlias = createAliasResolver(entryMap);\n\n\t\tload = load.map(resolveAlias);\n\t\tloaded = (loaded || []).map(resolveAlias);\n\n\t\tvar loadSet = toSet(load);\n\t\tvar loadedSet = toSet(loaded);\n\n\t\t// add requirements\n\n\t\tload.forEach(addRequirements);\n\t\tfunction addRequirements(id) {\n\t\t\tvar entry = entryMap[id];\n\t\t\tforEach(entry && entry.require, function (reqId) {\n\t\t\t\tif (!(reqId in loadedSet)) {\n\t\t\t\t\tloadSet[reqId] = true;\n\t\t\t\t\taddRequirements(reqId);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t// add components to reload\n\n\t\t// A component x in `loaded` has to be reloaded if\n\t\t//  1) a component in `load` modifies x.\n\t\t//  2) x depends on a component in `load`.\n\t\t// The above two condition have to be applied until nothing changes anymore.\n\n\t\tvar dependencyResolver = createDependencyResolver(entryMap);\n\n\t\t/** @type {StringSet} */\n\t\tvar loadAdditions = loadSet;\n\t\t/** @type {StringSet} */\n\t\tvar newIds;\n\t\twhile (hasKeys(loadAdditions)) {\n\t\t\tnewIds = {};\n\n\t\t\t// condition 1)\n\t\t\tfor (var loadId in loadAdditions) {\n\t\t\t\tvar entry = entryMap[loadId];\n\t\t\t\tforEach(entry && entry.modify, function (modId) {\n\t\t\t\t\tif (modId in loadedSet) {\n\t\t\t\t\t\tnewIds[modId] = true;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// condition 2)\n\t\t\tfor (var loadedId in loadedSet) {\n\t\t\t\tif (!(loadedId in loadSet)) {\n\t\t\t\t\tfor (var depId in dependencyResolver(loadedId)) {\n\t\t\t\t\t\tif (depId in loadSet) {\n\t\t\t\t\t\t\tnewIds[loadedId] = true;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tloadAdditions = newIds;\n\t\t\tfor (var newId in loadAdditions) {\n\t\t\t\tloadSet[newId] = true;\n\t\t\t}\n\t\t}\n\n\t\t/** @type {Loader} */\n\t\tvar loader = {\n\t\t\tgetIds: function () {\n\t\t\t\tvar ids = [];\n\t\t\t\tloader.load(function (id) {\n\t\t\t\t\tids.push(id);\n\t\t\t\t});\n\t\t\t\treturn ids;\n\t\t\t},\n\t\t\tload: function (loadComponent, chainer) {\n\t\t\t\treturn loadComponentsInOrder(dependencyResolver, loadSet, loadComponent, chainer);\n\t\t\t}\n\t\t};\n\n\t\treturn loader;\n\t}\n\n\treturn getLoader;\n\n}());\n\nif (typeof module !== 'undefined') {\n\tmodule.exports = getLoader;\n}\n/components/prism-ada.js\u0003Prism.languages.ada = {\n\t'comment': /--.*/,\n\t'string': /\"(?:\"\"|[^\"\\r\\f\\n])*\"/,\n\t'number': [\n\t\t{\n\t\t\tpattern: /\\b\\d(?:_?\\d)*#[\\dA-F](?:_?[\\dA-F])*(?:\\.[\\dA-F](?:_?[\\dA-F])*)?#(?:E[+-]?\\d(?:_?\\d)*)?/i\n\t\t},\n\t\t{\n\t\t\tpattern: /\\b\\d(?:_?\\d)*(?:\\.\\d(?:_?\\d)*)?(?:E[+-]?\\d(?:_?\\d)*)?\\b/i\n\t\t}\n\t],\n\t'attribute': {\n\t\tpattern: /\\b'\\w+/,\n\t\talias: 'attr-name'\n\t},\n\t'keyword': /\\b(?:abort|abs|abstract|accept|access|aliased|all|and|array|at|begin|body|case|constant|declare|delay|delta|digits|do|else|elsif|end|entry|exception|exit|for|function|generic|goto|if|in|interface|is|limited|loop|mod|new|not|null|of|or|others|out|overriding|package|pragma|private|procedure|protected|raise|range|record|rem|renames|requeue|return|reverse|select|separate|some|subtype|synchronized|tagged|task|terminate|then|type|until|use|when|while|with|xor)\\b/i,\n\t'boolean': /\\b(?:false|true)\\b/i,\n\t'operator': /<[=>]?|>=?|=>?|:=|\\/=?|\\*\\*?|[&+-]/,\n\t'punctuation': /\\.\\.?|[,;():]/,\n\t'char': /'.'/,\n\t'variable': /\\b[a-z](?:\\w)*\\b/i\n};\n/components/prism-abnf.min.js\u0003!function(n){var i=\"(?:ALPHA|BIT|CHAR|CR|CRLF|CTL|DIGIT|DQUOTE|HEXDIG|HTAB|LF|LWSP|OCTET|SP|VCHAR|WSP)\";n.languages.abnf={comment:/;.*/,string:{pattern:/(?:%[is])?\"[^\"\\n\\r]*\"/,greedy:!0,inside:{punctuation:/^%[is]/}},range:{pattern:/%(?:b[01]+-[01]+|d\\d+-\\d+|x[A-F\\d]+-[A-F\\d]+)/i,alias:\"number\"},terminal:{pattern:/%(?:b[01]+(?:\\.[01]+)*|d\\d+(?:\\.\\d+)*|x[A-F\\d]+(?:\\.[A-F\\d]+)*)/i,alias:\"number\"},repetition:{pattern:/(^|[^\\w-])(?:\\d*\\*\\d*|\\d+)/,lookbehind:!0,alias:\"operator\"},definition:{pattern:/(^[ \\t]*)(?:[a-z][\\w-]*|<[^<>\\r\\n]*>)(?=\\s*=)/m,lookbehind:!0,alias:\"keyword\",inside:{punctuation:/<|>/}},\"core-rule\":{pattern:RegExp(\"(?:(^|[^<\\\\w-])\"+i+\"|<\"+i+\">)(?![\\\\w-])\",\"i\"),lookbehind:!0,alias:[\"rule\",\"constant\"],inside:{punctuation:/<|>/}},rule:{pattern:/(^|[^<\\w-])[a-z][\\w-]*|<[^<>\\r\\n]*>/i,lookbehind:!0,inside:{punctuation:/<|>/}},operator:/=\\/?|\\//,punctuation:/[()\\[\\]]/}}(Prism);/components/prism-regex.js\tR(function (Prism) {\n\n\tvar specialEscape = {\n\t\tpattern: /\\\\[\\\\(){}[\\]^$+*?|.]/,\n\t\talias: 'escape'\n\t};\n\tvar escape = /\\\\(?:x[\\da-fA-F]{2}|u[\\da-fA-F]{4}|u\\{[\\da-fA-F]+\\}|0[0-7]{0,2}|[123][0-7]{2}|c[a-zA-Z]|.)/;\n\tvar charSet = {\n\t\tpattern: /\\.|\\\\[wsd]|\\\\p\\{[^{}]+\\}/i,\n\t\talias: 'class-name'\n\t};\n\tvar charSetWithoutDot = {\n\t\tpattern: /\\\\[wsd]|\\\\p\\{[^{}]+\\}/i,\n\t\talias: 'class-name'\n\t};\n\n\tvar rangeChar = '(?:[^\\\\\\\\-]|' + escape.source + ')';\n\tvar range = RegExp(rangeChar + '-' + rangeChar);\n\n\t// the name of a capturing group\n\tvar groupName = {\n\t\tpattern: /(<|')[^<>']+(?=[>']$)/,\n\t\tlookbehind: true,\n\t\talias: 'variable'\n\t};\n\n\tPrism.languages.regex = {\n\t\t'char-class': {\n\t\t\tpattern: /((?:^|[^\\\\])(?:\\\\\\\\)*)\\[(?:[^\\\\\\]]|\\\\[\\s\\S])*\\]/,\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'char-class-negation': {\n\t\t\t\t\tpattern: /(^\\[)\\^/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\talias: 'operator'\n\t\t\t\t},\n\t\t\t\t'char-class-punctuation': {\n\t\t\t\t\tpattern: /^\\[|\\]$/,\n\t\t\t\t\talias: 'punctuation'\n\t\t\t\t},\n\t\t\t\t'range': {\n\t\t\t\t\tpattern: range,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'escape': escape,\n\t\t\t\t\t\t'range-punctuation': {\n\t\t\t\t\t\t\tpattern: /-/,\n\t\t\t\t\t\t\talias: 'operator'\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t'special-escape': specialEscape,\n\t\t\t\t'char-set': charSetWithoutDot,\n\t\t\t\t'escape': escape\n\t\t\t}\n\t\t},\n\t\t'special-escape': specialEscape,\n\t\t'char-set': charSet,\n\t\t'backreference': [\n\t\t\t{\n\t\t\t\t// a backreference which is not an octal escape\n\t\t\t\tpattern: /\\\\(?![123][0-7]{2})[1-9]/,\n\t\t\t\talias: 'keyword'\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /\\\\k<[^<>']+>/,\n\t\t\t\talias: 'keyword',\n\t\t\t\tinside: {\n\t\t\t\t\t'group-name': groupName\n\t\t\t\t}\n\t\t\t}\n\t\t],\n\t\t'anchor': {\n\t\t\tpattern: /[$^]|\\\\[ABbGZz]/,\n\t\t\talias: 'function'\n\t\t},\n\t\t'escape': escape,\n\t\t'group': [\n\t\t\t{\n\t\t\t\t// https://docs.oracle.com/javase/10/docs/api/java/util/regex/Pattern.html\n\t\t\t\t// https://docs.microsoft.com/en-us/dotnet/standard/base-types/regular-expression-language-quick-reference?view=netframework-4.7.2#grouping-constructs\n\n\t\t\t\t// (), (?<name>), (?'name'), (?>), (?:), (?=), (?!), (?<=), (?<!), (?is-m), (?i-m:)\n\t\t\t\tpattern: /\\((?:\\?(?:<[^<>']+>|'[^<>']+'|[>:]|<?[=!]|[idmnsuxU]+(?:-[idmnsuxU]+)?:?))?/,\n\t\t\t\talias: 'punctuation',\n\t\t\t\tinside: {\n\t\t\t\t\t'group-name': groupName\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /\\)/,\n\t\t\t\talias: 'punctuation'\n\t\t\t}\n\t\t],\n\t\t'quantifier': {\n\t\t\tpattern: /(?:[+*?]|\\{\\d+(?:,\\d*)?\\})[?+]?/,\n\t\t\talias: 'number'\n\t\t},\n\t\t'alternation': {\n\t\t\tpattern: /\\|/,\n\t\t\talias: 'keyword'\n\t\t}\n\t};\n\n}(Prism));\n/components/prism-xeora.min.js\u0007b!function(n){n.languages.xeora=n.languages.extend(\"markup\",{constant:{pattern:/\\$(?:DomainContents|PageRenderDuration)\\$/,inside:{punctuation:{pattern:/\\$/}}},variable:{pattern:/\\$@?(?:#+|[-+*~=^])?[\\w.]+\\$/,inside:{punctuation:{pattern:/[$.]/},operator:{pattern:/#+|[-+*~=^@]/}}},\"function-inline\":{pattern:/\\$F:[-\\w.]+\\?[-\\w.]+(?:,(?:(?:@[-#]*\\w+\\.[\\w+.]\\.*)*\\|)*(?:(?:[\\w+]|[-#*.~^]+[\\w+]|=\\S)(?:[^$=]|=+[^=])*=*|(?:@[-#]*\\w+\\.[\\w+.]\\.*)+(?:(?:[\\w+]|[-#*~^][-#*.~^]*[\\w+]|=\\S)(?:[^$=]|=+[^=])*=*)?)?)?\\$/,inside:{variable:{pattern:/(?:[,|])@?(?:#+|[-+*~=^])?[\\w.]+/,inside:{punctuation:{pattern:/[,.|]/},operator:{pattern:/#+|[-+*~=^@]/}}},punctuation:{pattern:/\\$\\w:|[$:?.,|]/}},alias:\"function\"},\"function-block\":{pattern:/\\$XF:\\{[-\\w.]+\\?[-\\w.]+(?:,(?:(?:@[-#]*\\w+\\.[\\w+.]\\.*)*\\|)*(?:(?:[\\w+]|[-#*.~^]+[\\w+]|=\\S)(?:[^$=]|=+[^=])*=*|(?:@[-#]*\\w+\\.[\\w+.]\\.*)+(?:(?:[\\w+]|[-#*~^][-#*.~^]*[\\w+]|=\\S)(?:[^$=]|=+[^=])*=*)?)?)?\\}:XF\\$/,inside:{punctuation:{pattern:/[$:{}?.,|]/}},alias:\"function\"},\"directive-inline\":{pattern:/\\$\\w(?:#\\d+\\+?)?(?:\\[[-\\w.]+\\])?:[-\\/\\w.]+\\$/,inside:{punctuation:{pattern:/\\$(?:\\w:|C(?:\\[|#\\d))?|[:{[\\]]/,inside:{tag:{pattern:/#\\d/}}}},alias:\"function\"},\"directive-block-open\":{pattern:/\\$\\w+:\\{|\\$\\w(?:#\\d+\\+?)?(?:\\[[-\\w.]+\\])?:[-\\w.]+:\\{(?:![A-Z]+)?/,inside:{punctuation:{pattern:/\\$(?:\\w:|C(?:\\[|#\\d))?|[:{[\\]]/,inside:{tag:{pattern:/#\\d/}}},attribute:{pattern:/![A-Z]+$/,inside:{punctuation:{pattern:/!/}},alias:\"keyword\"}},alias:\"function\"},\"directive-block-separator\":{pattern:/\\}:[-\\w.]+:\\{/,inside:{punctuation:{pattern:/[:{}]/}},alias:\"function\"},\"directive-block-close\":{pattern:/\\}:[-\\w.]+\\$/,inside:{punctuation:{pattern:/[:{}$]/}},alias:\"function\"}}),n.languages.insertBefore(\"inside\",\"punctuation\",{variable:n.languages.xeora[\"function-inline\"].inside.variable},n.languages.xeora[\"function-block\"]),n.languages.xeoracube=n.languages.xeora}(Prism);/themes/prism.css\t\u001f/**\n * prism.js default theme for JavaScript, CSS and HTML\n * Based on dabblet (http://dabblet.com)\n * @author Lea Verou\n */\n\ncode[class*=\"language-\"],\npre[class*=\"language-\"] {\n\tcolor: black;\n\tbackground: none;\n\ttext-shadow: 0 1px white;\n\tfont-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;\n\tfont-size: 1em;\n\ttext-align: left;\n\twhite-space: pre;\n\tword-spacing: normal;\n\tword-break: normal;\n\tword-wrap: normal;\n\tline-height: 1.5;\n\n\t-moz-tab-size: 4;\n\t-o-tab-size: 4;\n\ttab-size: 4;\n\n\t-webkit-hyphens: none;\n\t-moz-hyphens: none;\n\t-ms-hyphens: none;\n\thyphens: none;\n}\n\npre[class*=\"language-\"]::-moz-selection, pre[class*=\"language-\"] ::-moz-selection,\ncode[class*=\"language-\"]::-moz-selection, code[class*=\"language-\"] ::-moz-selection {\n\ttext-shadow: none;\n\tbackground: #b3d4fc;\n}\n\npre[class*=\"language-\"]::selection, pre[class*=\"language-\"] ::selection,\ncode[class*=\"language-\"]::selection, code[class*=\"language-\"] ::selection {\n\ttext-shadow: none;\n\tbackground: #b3d4fc;\n}\n\n@media print {\n\tcode[class*=\"language-\"],\n\tpre[class*=\"language-\"] {\n\t\ttext-shadow: none;\n\t}\n}\n\n/* Code blocks */\npre[class*=\"language-\"] {\n\tpadding: 1em;\n\tmargin: .5em 0;\n\toverflow: auto;\n}\n\n:not(pre) > code[class*=\"language-\"],\npre[class*=\"language-\"] {\n\tbackground: #f5f2f0;\n}\n\n/* Inline code */\n:not(pre) > code[class*=\"language-\"] {\n\tpadding: .1em;\n\tborder-radius: .3em;\n\twhite-space: normal;\n}\n\n.token.comment,\n.token.prolog,\n.token.doctype,\n.token.cdata {\n\tcolor: slategray;\n}\n\n.token.punctuation {\n\tcolor: #999;\n}\n\n.token.namespace {\n\topacity: .7;\n}\n\n.token.property,\n.token.tag,\n.token.boolean,\n.token.number,\n.token.constant,\n.token.symbol,\n.token.deleted {\n\tcolor: #905;\n}\n\n.token.selector,\n.token.attr-name,\n.token.string,\n.token.char,\n.token.builtin,\n.token.inserted {\n\tcolor: #690;\n}\n\n.token.operator,\n.token.entity,\n.token.url,\n.language-css .token.string,\n.style .token.string {\n\tcolor: #9a6e3a;\n\t/* This background color was intended by the author of this theme. */\n\tbackground: hsla(0, 0%, 100%, .5);\n}\n\n.token.atrule,\n.token.attr-value,\n.token.keyword {\n\tcolor: #07a;\n}\n\n.token.function,\n.token.class-name {\n\tcolor: #DD4A68;\n}\n\n.token.regex,\n.token.important,\n.token.variable {\n\tcolor: #e90;\n}\n\n.token.important,\n.token.bold {\n\tfont-weight: bold;\n}\n.token.italic {\n\tfont-style: italic;\n}\n\n.token.entity {\n\tcursor: help;\n}\n/components/prism-oz.min.js\u00038Prism.languages.oz={comment:{pattern:/\\/\\*[\\s\\S]*?\\*\\/|%.*/,greedy:!0},string:{pattern:/\"(?:[^\"\\\\]|\\\\[\\s\\S])*\"/,greedy:!0},atom:{pattern:/'(?:[^'\\\\]|\\\\[\\s\\S])*'/,greedy:!0,alias:\"builtin\"},keyword:/\\$|\\[\\]|\\b(?:_|at|attr|case|catch|choice|class|cond|declare|define|dis|else(?:case|if)?|end|export|fail|false|feat|finally|from|fun|functor|if|import|in|local|lock|meth|nil|not|of|or|prepare|proc|prop|raise|require|self|skip|then|thread|true|try|unit)\\b/,function:[/\\b[a-z][A-Za-z\\d]*(?=\\()/,{pattern:/(\\{)[A-Z][A-Za-z\\d]*\\b/,lookbehind:!0}],number:/\\b(?:0[bx][\\da-f]+|\\d+(?:\\.\\d*)?(?:e~?\\d+)?)\\b|&(?:[^\\\\]|\\\\(?:\\d{3}|.))/i,variable:/`(?:[^`\\\\]|\\\\.)+`/,\"attr-name\":/\\b\\w+(?=[ \\t]*:(?![:=]))/,operator:/:(?:=|::?)|<[-:=]?|=(?:=|<?:?)|>=?:?|\\\\=:?|!!?|[|#+\\-*\\/,~^@]|\\b(?:andthen|div|mod|orelse)\\b/,punctuation:/[\\[\\](){}.:;?]/};/components/prism-n4js.js\u0003\u001ePrism.languages.n4js = Prism.languages.extend('javascript', {\n\t// Keywords from N4JS language spec: https://numberfour.github.io/n4js/spec/N4JSSpec.html\n\t'keyword': /\\b(?:Array|any|boolean|break|case|catch|class|const|constructor|continue|debugger|declare|default|delete|do|else|enum|export|extends|false|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|module|new|null|number|package|private|protected|public|return|set|static|string|super|switch|this|throw|true|try|typeof|var|void|while|with|yield)\\b/\n});\n\nPrism.languages.insertBefore('n4js', 'constant', {\n\t// Annotations in N4JS spec: https://numberfour.github.io/n4js/spec/N4JSSpec.html#_annotations\n\t'annotation': {\n\t\tpattern: /@+\\w+/,\n\t\talias: 'operator'\n\t}\n});\n\nPrism.languages.n4jsd = Prism.languages.n4js;\n\"/components/prism-dataweave.min.js\u0003Q!function(e){e.languages.dataweave={url:/\\b[A-Za-z]+:\\/\\/[\\w/:.?=&-]+|\\burn:[\\w:.?=&-]+/,property:{pattern:/(?:\\b\\w+#)?(?:\"(?:\\\\.|[^\\\\\"\\r\\n])*\"|\\b\\w+)(?=\\s*[:@])/,greedy:!0},string:{pattern:/([\"'`])(?:\\\\[\\s\\S]|(?!\\1)[^\\\\])*\\1/,greedy:!0},\"mime-type\":/\\b(?:application|audio|image|multipart|text|video)\\/[\\w+-]+/,date:{pattern:/\\|[\\w:+-]+\\|/,greedy:!0},comment:[{pattern:/(^|[^\\\\])\\/\\*[\\s\\S]*?(?:\\*\\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\\\:])\\/\\/.*/,lookbehind:!0,greedy:!0}],regex:{pattern:/\\/(?:[^\\\\\\/\\r\\n]|\\\\[^\\r\\n])+\\//,greedy:!0},keyword:/\\b(?:and|as|at|case|do|else|fun|if|input|is|match|not|ns|null|or|output|type|unless|update|using|var)\\b/,function:/\\b[A-Z_]\\w*(?=\\s*\\()/i,number:/-?\\b\\d+(?:\\.\\d+)?(?:e[+-]?\\d+)?\\b/i,punctuation:/[{}[\\];(),.:@]/,operator:/<<|>>|->|[<>~=]=?|!=|--?-?|\\+\\+?|!|\\?/,boolean:/\\b(?:false|true)\\b/}}(Prism);/components/prism-squirrel.js\u0004Prism.languages.squirrel = Prism.languages.extend('clike', {\n\t'comment': [\n\t\tPrism.languages.clike['comment'][0],\n\t\t{\n\t\t\tpattern: /(^|[^\\\\:])(?:\\/\\/|#).*/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true\n\t\t}\n\t],\n\t'string': {\n\t\tpattern: /(^|[^\\\\\"'@])(?:@\"(?:[^\"]|\"\")*\"(?!\")|\"(?:[^\\\\\\r\\n\"]|\\\\.)*\")/,\n\t\tlookbehind: true,\n\t\tgreedy: true\n\t},\n\n\t'class-name': {\n\t\tpattern: /(\\b(?:class|enum|extends|instanceof)\\s+)\\w+(?:\\.\\w+)*/,\n\t\tlookbehind: true,\n\t\tinside: {\n\t\t\t'punctuation': /\\./\n\t\t}\n\t},\n\t'keyword': /\\b(?:__FILE__|__LINE__|base|break|case|catch|class|clone|const|constructor|continue|default|delete|else|enum|extends|for|foreach|function|if|in|instanceof|local|null|resume|return|static|switch|this|throw|try|typeof|while|yield)\\b/,\n\n\t'number': /\\b(?:0x[0-9a-fA-F]+|\\d+(?:\\.(?:\\d+|[eE][+-]?\\d+))?)\\b/,\n\t'operator': /\\+\\+|--|<=>|<[-<]|>>>?|&&?|\\|\\|?|[-+*/%!=<>]=?|[~^]|::?/,\n\t'punctuation': /[(){}\\[\\],;.]/\n});\n\nPrism.languages.insertBefore('squirrel', 'string', {\n\t'char': {\n\t\tpattern: /(^|[^\\\\\"'])'(?:[^\\\\']|\\\\(?:[xuU][0-9a-fA-F]{0,8}|[\\s\\S]))'/,\n\t\tlookbehind: true,\n\t\tgreedy: true\n\t}\n});\n\nPrism.languages.insertBefore('squirrel', 'operator', {\n\t'attribute-punctuation': {\n\t\tpattern: /<\\/|\\/>/,\n\t\talias: 'important'\n\t},\n\t'lambda': {\n\t\tpattern: /@(?=\\()/,\n\t\talias: 'operator'\n\t}\n});\n/components/prism-erlang.js\u0004*Prism.languages.erlang = {\n\t'comment': /%.+/,\n\t'string': {\n\t\tpattern: /\"(?:\\\\.|[^\\\\\"\\r\\n])*\"/,\n\t\tgreedy: true\n\t},\n\t'quoted-function': {\n\t\tpattern: /'(?:\\\\.|[^\\\\'\\r\\n])+'(?=\\()/,\n\t\talias: 'function'\n\t},\n\t'quoted-atom': {\n\t\tpattern: /'(?:\\\\.|[^\\\\'\\r\\n])+'/,\n\t\talias: 'atom'\n\t},\n\t'boolean': /\\b(?:false|true)\\b/,\n\t'keyword': /\\b(?:after|begin|case|catch|end|fun|if|of|receive|try|when)\\b/,\n\t'number': [\n\t\t/\\$\\\\?./,\n\t\t/\\b\\d+#[a-z0-9]+/i,\n\t\t/(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:e[+-]?\\d+)?/i\n\t],\n\t'function': /\\b[a-z][\\w@]*(?=\\()/,\n\t'variable': {\n\t\t// Look-behind is used to prevent wrong highlighting of atoms containing \"@\"\n\t\tpattern: /(^|[^@])(?:\\b|\\?)[A-Z_][\\w@]*/,\n\t\tlookbehind: true\n\t},\n\t'operator': [\n\t\t/[=\\/<>:]=|=[:\\/]=|\\+\\+?|--?|[=*\\/!]|\\b(?:and|andalso|band|bnot|bor|bsl|bsr|bxor|div|not|or|orelse|rem|xor)\\b/,\n\t\t{\n\t\t\t// We don't want to match <<\n\t\t\tpattern: /(^|[^<])<(?!<)/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t{\n\t\t\t// We don't want to match >>\n\t\t\tpattern: /(^|[^>])>(?!>)/,\n\t\t\tlookbehind: true\n\t\t}\n\t],\n\t'atom': /\\b[a-z][\\w@]*/,\n\t'punctuation': /[()[\\]{}:;,.#|]|<<|>>/\n\n};\n/components/prism-batch.js\t(function (Prism) {\n\tvar variable = /%%?[~:\\w]+%?|!\\S+!/;\n\tvar parameter = {\n\t\tpattern: /\\/[a-z?]+(?=[ :]|$):?|-[a-z]\\b|--[a-z-]+\\b/im,\n\t\talias: 'attr-name',\n\t\tinside: {\n\t\t\t'punctuation': /:/\n\t\t}\n\t};\n\tvar string = /\"(?:[\\\\\"]\"|[^\"])*\"(?!\")/;\n\tvar number = /(?:\\b|-)\\d+\\b/;\n\n\tPrism.languages.batch = {\n\t\t'comment': [\n\t\t\t/^::.*/m,\n\t\t\t{\n\t\t\t\tpattern: /((?:^|[&(])[ \\t]*)rem\\b(?:[^^&)\\r\\n]|\\^(?:\\r\\n|[\\s\\S]))*/im,\n\t\t\t\tlookbehind: true\n\t\t\t}\n\t\t],\n\t\t'label': {\n\t\t\tpattern: /^:.*/m,\n\t\t\talias: 'property'\n\t\t},\n\t\t'command': [\n\t\t\t{\n\t\t\t\t// FOR command\n\t\t\t\tpattern: /((?:^|[&(])[ \\t]*)for(?: \\/[a-z?](?:[ :](?:\"[^\"]*\"|[^\\s\"/]\\S*))?)* \\S+ in \\([^)]+\\) do/im,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'keyword': /\\b(?:do|in)\\b|^for\\b/i,\n\t\t\t\t\t'string': string,\n\t\t\t\t\t'parameter': parameter,\n\t\t\t\t\t'variable': variable,\n\t\t\t\t\t'number': number,\n\t\t\t\t\t'punctuation': /[()',]/\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\t// IF command\n\t\t\t\tpattern: /((?:^|[&(])[ \\t]*)if(?: \\/[a-z?](?:[ :](?:\"[^\"]*\"|[^\\s\"/]\\S*))?)* (?:not )?(?:cmdextversion \\d+|defined \\w+|errorlevel \\d+|exist \\S+|(?:\"[^\"]*\"|(?!\")(?:(?!==)\\S)+)?(?:==| (?:equ|geq|gtr|leq|lss|neq) )(?:\"[^\"]*\"|[^\\s\"]\\S*))/im,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'keyword': /\\b(?:cmdextversion|defined|errorlevel|exist|not)\\b|^if\\b/i,\n\t\t\t\t\t'string': string,\n\t\t\t\t\t'parameter': parameter,\n\t\t\t\t\t'variable': variable,\n\t\t\t\t\t'number': number,\n\t\t\t\t\t'operator': /\\^|==|\\b(?:equ|geq|gtr|leq|lss|neq)\\b/i\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\t// ELSE command\n\t\t\t\tpattern: /((?:^|[&()])[ \\t]*)else\\b/im,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'keyword': /^else\\b/i\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\t// SET command\n\t\t\t\tpattern: /((?:^|[&(])[ \\t]*)set(?: \\/[a-z](?:[ :](?:\"[^\"]*\"|[^\\s\"/]\\S*))?)* (?:[^^&)\\r\\n]|\\^(?:\\r\\n|[\\s\\S]))*/im,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'keyword': /^set\\b/i,\n\t\t\t\t\t'string': string,\n\t\t\t\t\t'parameter': parameter,\n\t\t\t\t\t'variable': [\n\t\t\t\t\t\tvariable,\n\t\t\t\t\t\t/\\w+(?=(?:[*\\/%+\\-&^|]|<<|>>)?=)/\n\t\t\t\t\t],\n\t\t\t\t\t'number': number,\n\t\t\t\t\t'operator': /[*\\/%+\\-&^|]=?|<<=?|>>=?|[!~_=]/,\n\t\t\t\t\t'punctuation': /[()',]/\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\t// Other commands\n\t\t\t\tpattern: /((?:^|[&(])[ \\t]*@?)\\w+\\b(?:\"(?:[\\\\\"]\"|[^\"])*\"(?!\")|[^\"^&)\\r\\n]|\\^(?:\\r\\n|[\\s\\S]))*/m,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'keyword': /^\\w+\\b/,\n\t\t\t\t\t'string': string,\n\t\t\t\t\t'parameter': parameter,\n\t\t\t\t\t'label': {\n\t\t\t\t\t\tpattern: /(^\\s*):\\S+/m,\n\t\t\t\t\t\tlookbehind: true,\n\t\t\t\t\t\talias: 'property'\n\t\t\t\t\t},\n\t\t\t\t\t'variable': variable,\n\t\t\t\t\t'number': number,\n\t\t\t\t\t'operator': /\\^/\n\t\t\t\t}\n\t\t\t}\n\t\t],\n\t\t'operator': /[&@]/,\n\t\t'punctuation': /[()']/\n\t};\n}(Prism));\n/components/prism-fsharp.js\tPrism.languages.fsharp = Prism.languages.extend('clike', {\n\t'comment': [\n\t\t{\n\t\t\tpattern: /(^|[^\\\\])\\(\\*(?!\\))[\\s\\S]*?\\*\\)/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^\\\\:])\\/\\/.*/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true\n\t\t}\n\t],\n\t'string': {\n\t\tpattern: /(?:\"\"\"[\\s\\S]*?\"\"\"|@\"(?:\"\"|[^\"])*\"|\"(?:\\\\[\\s\\S]|[^\\\\\"])*\")B?/,\n\t\tgreedy: true\n\t},\n\t'class-name': {\n\t\tpattern: /(\\b(?:exception|inherit|interface|new|of|type)\\s+|\\w\\s*:\\s*|\\s:\\??>\\s*)[.\\w]+\\b(?:\\s*(?:->|\\*)\\s*[.\\w]+\\b)*(?!\\s*[:.])/,\n\t\tlookbehind: true,\n\t\tinside: {\n\t\t\t'operator': /->|\\*/,\n\t\t\t'punctuation': /\\./\n\t\t}\n\t},\n\t'keyword': /\\b(?:let|return|use|yield)(?:!\\B|\\b)|\\b(?:abstract|and|as|asr|assert|atomic|base|begin|break|checked|class|component|const|constraint|constructor|continue|default|delegate|do|done|downcast|downto|eager|elif|else|end|event|exception|extern|external|false|finally|fixed|for|fun|function|functor|global|if|in|include|inherit|inline|interface|internal|land|lazy|lor|lsl|lsr|lxor|match|member|method|mixin|mod|module|mutable|namespace|new|not|null|object|of|open|or|override|parallel|private|process|protected|public|pure|rec|sealed|select|sig|static|struct|tailcall|then|to|trait|true|try|type|upcast|val|virtual|void|volatile|when|while|with)\\b/,\n\t'number': [\n\t\t/\\b0x[\\da-fA-F]+(?:LF|lf|un)?\\b/,\n\t\t/\\b0b[01]+(?:uy|y)?\\b/,\n\t\t/(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:[fm]|e[+-]?\\d+)?\\b/i,\n\t\t/\\b\\d+(?:[IlLsy]|UL|u[lsy]?)?\\b/\n\t],\n\t'operator': /([<>~&^])\\1\\1|([*.:<>&])\\2|<-|->|[!=:]=|<?\\|{1,3}>?|\\??(?:<=|>=|<>|[-+*/%=<>])\\??|[!?^&]|~[+~-]|:>|:\\?>?/\n});\nPrism.languages.insertBefore('fsharp', 'keyword', {\n\t'preprocessor': {\n\t\tpattern: /(^[\\t ]*)#.*/m,\n\t\tlookbehind: true,\n\t\talias: 'property',\n\t\tinside: {\n\t\t\t'directive': {\n\t\t\t\tpattern: /(^#)\\b(?:else|endif|if|light|line|nowarn)\\b/,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'keyword'\n\t\t\t}\n\t\t}\n\t}\n});\nPrism.languages.insertBefore('fsharp', 'punctuation', {\n\t'computation-expression': {\n\t\tpattern: /\\b[_a-z]\\w*(?=\\s*\\{)/i,\n\t\talias: 'keyword'\n\t}\n});\nPrism.languages.insertBefore('fsharp', 'string', {\n\t'annotation': {\n\t\tpattern: /\\[<.+?>\\]/,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'punctuation': /^\\[<|>\\]$/,\n\t\t\t'class-name': {\n\t\t\t\tpattern: /^\\w+$|(^|;\\s*)[A-Z]\\w*(?=\\()/,\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\t'annotation-content': {\n\t\t\t\tpattern: /[\\s\\S]+/,\n\t\t\t\tinside: Prism.languages.fsharp\n\t\t\t}\n\t\t}\n\t},\n\t'char': {\n\t\tpattern: /'(?:[^\\\\']|\\\\(?:.|\\d{3}|x[a-fA-F\\d]{2}|u[a-fA-F\\d]{4}|U[a-fA-F\\d]{8}))'B?/,\n\t\tgreedy: true\n\t}\n});\n#/components/prism-javastacktrace.js\u0010// Specification:\n// https://docs.oracle.com/en/java/javase/13/docs/api/java.base/java/lang/Throwable.html#printStackTrace()\n\nPrism.languages.javastacktrace = {\n\n\t// java.sql.SQLException: Violation of unique constraint MY_ENTITY_UK_1: duplicate value(s) for column(s) MY_COLUMN in statement [...]\n\t// Caused by: java.sql.SQLException: Violation of unique constraint MY_ENTITY_UK_1: duplicate value(s) for column(s) MY_COLUMN in statement [...]\n\t// Caused by: com.example.myproject.MyProjectServletException\n\t// Caused by: MidLevelException: LowLevelException\n\t// Suppressed: Resource$CloseFailException: Resource ID = 0\n\t'summary': {\n\t\tpattern: /^([\\t ]*)(?:(?:Caused by:|Suppressed:|Exception in thread \"[^\"]*\")[\\t ]+)?[\\w$.]+(?::.*)?$/m,\n\t\tlookbehind: true,\n\t\tinside: {\n\t\t\t'keyword': {\n\t\t\t\tpattern: /^([\\t ]*)(?:(?:Caused by|Suppressed)(?=:)|Exception in thread)/m,\n\t\t\t\tlookbehind: true\n\t\t\t},\n\n\t\t\t// the current thread if the summary starts with 'Exception in thread'\n\t\t\t'string': {\n\t\t\t\tpattern: /^(\\s*)\"[^\"]*\"/,\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\t'exceptions': {\n\t\t\t\tpattern: /^(:?\\s*)[\\w$.]+(?=:|$)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'class-name': /[\\w$]+$/,\n\t\t\t\t\t'namespace': /\\b[a-z]\\w*\\b/,\n\t\t\t\t\t'punctuation': /\\./\n\t\t\t\t}\n\t\t\t},\n\t\t\t'message': {\n\t\t\t\tpattern: /(:\\s*)\\S.*/,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'string'\n\t\t\t},\n\t\t\t'punctuation': /:/\n\t\t}\n\t},\n\n\t// at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)\n\t// at org.hsqldb.jdbc.Util.throwError(Unknown Source) here could be some notes\n\t// at java.base/java.lang.Class.forName0(Native Method)\n\t// at Util.<init>(Unknown Source)\n\t// at com.foo.loader/foo@9.0/com.foo.Main.run(Main.java:101)\n\t// at com.foo.loader//com.foo.bar.App.run(App.java:12)\n\t// at acme@2.1/org.acme.Lib.test(Lib.java:80)\n\t// at MyClass.mash(MyClass.java:9)\n\t//\n\t// More information:\n\t// https://docs.oracle.com/en/java/javase/13/docs/api/java.base/java/lang/StackTraceElement.html#toString()\n\t//\n\t// A valid Java module name is defined as:\n\t//   \"A module name consists of one or more Java identifiers (§3.8) separated by \".\" tokens.\"\n\t// https://docs.oracle.com/javase/specs/jls/se9/html/jls-6.html#jls-ModuleName\n\t//\n\t// A Java module version is defined by this class:\n\t// https://docs.oracle.com/javase/9/docs/api/java/lang/module/ModuleDescriptor.Version.html\n\t// This is the implementation of the `parse` method in JDK13:\n\t// https://github.com/matcdac/jdk/blob/2305df71d1b7710266ae0956d73927a225132c0f/src/java.base/share/classes/java/lang/module/ModuleDescriptor.java#L1108\n\t// However, to keep this simple, a version will be matched by the pattern /@[\\w$.+-]*/.\n\t'stack-frame': {\n\t\tpattern: /^([\\t ]*)at (?:[\\w$./]|@[\\w$.+-]*\\/)+(?:<init>)?\\([^()]*\\)/m,\n\t\tlookbehind: true,\n\t\tinside: {\n\t\t\t'keyword': {\n\t\t\t\tpattern: /^(\\s*)at(?= )/,\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\t'source': [\n\t\t\t\t// (Main.java:15)\n\t\t\t\t// (Main.scala:15)\n\t\t\t\t{\n\t\t\t\t\tpattern: /(\\()\\w+\\.\\w+:\\d+(?=\\))/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'file': /^\\w+\\.\\w+/,\n\t\t\t\t\t\t'punctuation': /:/,\n\t\t\t\t\t\t'line-number': {\n\t\t\t\t\t\t\tpattern: /\\b\\d+\\b/,\n\t\t\t\t\t\t\talias: 'number'\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// (Unknown Source)\n\t\t\t\t// (Native Method)\n\t\t\t\t// (...something...)\n\t\t\t\t{\n\t\t\t\t\tpattern: /(\\()[^()]*(?=\\))/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'keyword': /^(?:Native Method|Unknown Source)$/\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t],\n\t\t\t'class-name': /[\\w$]+(?=\\.(?:<init>|[\\w$]+)\\()/,\n\t\t\t'function': /(?:<init>|[\\w$]+)(?=\\()/,\n\t\t\t'class-loader': {\n\t\t\t\tpattern: /(\\s)[a-z]\\w*(?:\\.[a-z]\\w*)*(?=\\/[\\w@$.]*\\/)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'namespace',\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': /\\./\n\t\t\t\t}\n\t\t\t},\n\t\t\t'module': {\n\t\t\t\tpattern: /([\\s/])[a-z]\\w*(?:\\.[a-z]\\w*)*(?:@[\\w$.+-]*)?(?=\\/)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'version': {\n\t\t\t\t\t\tpattern: /(@)[\\s\\S]+/,\n\t\t\t\t\t\tlookbehind: true,\n\t\t\t\t\t\talias: 'number'\n\t\t\t\t\t},\n\t\t\t\t\t'punctuation': /[@.]/\n\t\t\t\t}\n\t\t\t},\n\t\t\t'namespace': {\n\t\t\t\tpattern: /(?:\\b[a-z]\\w*\\.)+/,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': /\\./\n\t\t\t\t}\n\t\t\t},\n\t\t\t'punctuation': /[()/.]/\n\t\t}\n\t},\n\n\t// ... 32 more\n\t// ... 32 common frames omitted\n\t'more': {\n\t\tpattern: /^([\\t ]*)\\.{3} \\d+ [a-z]+(?: [a-z]+)*/m,\n\t\tlookbehind: true,\n\t\tinside: {\n\t\t\t'punctuation': /\\.{3}/,\n\t\t\t'number': /\\d+/,\n\t\t\t'keyword': /\\b[a-z]+(?: [a-z]+)*\\b/\n\t\t}\n\t}\n\n};\n/components/prism-purebasic.js\f8/*\nOriginal Code by Bas Groothedde\n!!MANY THANKS!! I never would have made this, regex and me will never be best friends ;)\n==> https://codepen.io/ImagineProgramming/details/JYydBy/\nslightly changed to pass all tests\n*/\n\n\n// PureBasic support, steal stuff from ansi-c\nPrism.languages.purebasic = Prism.languages.extend('clike', {\n\t'comment': /;.*/,\n\t'keyword': /\\b(?:align|and|as|break|calldebugger|case|compilercase|compilerdefault|compilerelse|compilerelseif|compilerendif|compilerendselect|compilererror|compilerif|compilerselect|continue|data|datasection|debug|debuglevel|declare|declarec|declarecdll|declaredll|declaremodule|default|define|dim|disableasm|disabledebugger|disableexplicit|else|elseif|enableasm|enabledebugger|enableexplicit|end|enddatasection|enddeclaremodule|endenumeration|endif|endimport|endinterface|endmacro|endmodule|endprocedure|endselect|endstructure|endstructureunion|endwith|enumeration|extends|fakereturn|for|foreach|forever|global|gosub|goto|if|import|importc|includebinary|includefile|includepath|interface|macro|module|newlist|newmap|next|not|or|procedure|procedurec|procedurecdll|proceduredll|procedurereturn|protected|prototype|prototypec|read|redim|repeat|restore|return|runtime|select|shared|static|step|structure|structureunion|swap|threaded|to|until|wend|while|with|xincludefile|xor)\\b/i,\n\t'function': /\\b\\w+(?:\\.\\w+)?\\s*(?=\\()/,\n\t'number': /(?:\\$[\\da-f]+|\\b-?(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:e[+-]?\\d+)?)\\b/i,\n\t'operator': /(?:@\\*?|\\?|\\*)\\w+\\$?|-[>-]?|\\+\\+?|!=?|<<?=?|>>?=?|==?|&&?|\\|?\\||[~^%?*/@]/\n});\n\nPrism.languages.insertBefore('purebasic', 'keyword', {\n\t'tag': /#\\w+\\$?/,\n\t'asm': {\n\t\tpattern: /(^[\\t ]*)!.*/m,\n\t\tlookbehind: true,\n\t\talias: 'tag',\n\t\tinside: {\n\t\t\t'comment': /;.*/,\n\t\t\t'string': {\n\t\t\t\tpattern: /([\"'`])(?:\\\\.|(?!\\1)[^\\\\\\r\\n])*\\1/,\n\t\t\t\tgreedy: true\n\t\t\t},\n\t\t\t// Anonymous label references, i.e.: jmp @b\n\t\t\t'label-reference-anonymous': {\n\t\t\t\tpattern: /(!\\s*j[a-z]+\\s+)@[fb]/i,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'fasm-label'\n\t\t\t},\n\t\t\t// Named label reference, i.e.: jne label1\n\t\t\t'label-reference-addressed': {\n\t\t\t\tpattern: /(!\\s*j[a-z]+\\s+)[A-Z._?$@][\\w.?$@~#]*/i,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'fasm-label'\n\t\t\t},\n\t\t\t'keyword': [\n\t\t\t\t/\\b(?:extern|global)\\b[^;\\r\\n]*/i,\n\t\t\t\t/\\b(?:CPU|DEFAULT|FLOAT)\\b.*/\n\t\t\t],\n\t\t\t'function': {\n\t\t\t\tpattern: /^([\\t ]*!\\s*)[\\da-z]+(?=\\s|$)/im,\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\t'function-inline': {\n\t\t\t\tpattern: /(:\\s*)[\\da-z]+(?=\\s)/i,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'function'\n\t\t\t},\n\t\t\t'label': {\n\t\t\t\tpattern: /^([\\t ]*!\\s*)[A-Za-z._?$@][\\w.?$@~#]*(?=:)/m,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'fasm-label'\n\t\t\t},\n\t\t\t'register': /\\b(?:st\\d|[xyz]mm\\d\\d?|[cdt]r\\d|r\\d\\d?[bwd]?|[er]?[abcd]x|[abcd][hl]|[er]?(?:bp|di|si|sp)|[cdefgs]s|mm\\d+)\\b/i,\n\t\t\t'number': /(?:\\b|-|(?=\\$))(?:0[hx](?:[\\da-f]*\\.)?[\\da-f]+(?:p[+-]?\\d+)?|\\d[\\da-f]+[hx]|\\$\\d[\\da-f]*|0[oq][0-7]+|[0-7]+[oq]|0[by][01]+|[01]+[by]|0[dt]\\d+|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:\\.?e[+-]?\\d+)?[dt]?)\\b/i,\n\t\t\t'operator': /[\\[\\]*+\\-/%<>=&|$!,.:]/\n\t\t}\n\t}\n});\n\ndelete Prism.languages.purebasic['class-name'];\ndelete Prism.languages.purebasic['boolean'];\n\nPrism.languages.pbfasm = Prism.languages['purebasic'];\n/components/prism-gradle.js\u0006(function (Prism) {\n\tvar interpolation = {\n\t\tpattern: /((?:^|[^\\\\$])(?:\\\\{2})*)\\$(?:\\w+|\\{[^{}]*\\})/,\n\t\tlookbehind: true,\n\t\tinside: {\n\t\t\t'interpolation-punctuation': {\n\t\t\t\tpattern: /^\\$\\{?|\\}$/,\n\t\t\t\talias: 'punctuation',\n\t\t\t},\n\t\t\t'expression': {\n\t\t\t\tpattern: /[\\s\\S]+/,\n\t\t\t\tinside: null,\n\t\t\t},\n\t\t},\n\t};\n\n\tPrism.languages.gradle = Prism.languages.extend('clike', {\n\t\t'string': {\n\t\t\tpattern: /'''(?:[^\\\\]|\\\\[\\s\\S])*?'''|'(?:\\\\.|[^\\\\'\\r\\n])*'/,\n\t\t\tgreedy: true,\n\t\t},\n\t\t'keyword':\n\t\t\t/\\b(?:apply|def|dependencies|else|if|implementation|import|plugin|plugins|project|repositories|repository|sourceSets|tasks|val)\\b/,\n\t\t'number': /\\b(?:0b[01_]+|0x[\\da-f_]+(?:\\.[\\da-f_p\\-]+)?|[\\d_]+(?:\\.[\\d_]+)?(?:e[+-]?\\d+)?)[glidf]?\\b/i,\n\t\t'operator': {\n\t\t\tpattern:\n\t\t\t\t/(^|[^.])(?:~|==?~?|\\?[.:]?|\\*(?:[.=]|\\*=?)?|\\.[@&]|\\.\\.<|\\.\\.(?!\\.)|-[-=>]?|\\+[+=]?|!=?|<(?:<=?|=>?)?|>(?:>>?=?|=)?|&[&=]?|\\|[|=]?|\\/=?|\\^=?|%=?)/,\n\t\t\tlookbehind: true,\n\t\t},\n\t\t'punctuation': /\\.+|[{}[\\];(),:$]/,\n\t});\n\n\tPrism.languages.insertBefore('gradle', 'string', {\n\t\t'shebang': {\n\t\t\tpattern: /#!.+/,\n\t\t\talias: 'comment',\n\t\t\tgreedy: true,\n\t\t},\n\t\t'interpolation-string': {\n\t\t\tpattern:\n\t\t\t\t/\"\"\"(?:[^\\\\]|\\\\[\\s\\S])*?\"\"\"|([\"/])(?:\\\\.|(?!\\1)[^\\\\\\r\\n])*\\1|\\$\\/(?:[^/$]|\\$(?:[/$]|(?![/$]))|\\/(?!\\$))*\\/\\$/,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'interpolation': interpolation,\n\t\t\t\t'string': /[\\s\\S]+/,\n\t\t\t},\n\t\t},\n\t});\n\n\tPrism.languages.insertBefore('gradle', 'punctuation', {\n\t\t'spock-block': /\\b(?:and|cleanup|expect|given|setup|then|when|where):/,\n\t});\n\n\tPrism.languages.insertBefore('gradle', 'function', {\n\t\t'annotation': {\n\t\t\tpattern: /(^|[^.])@\\w+/,\n\t\t\tlookbehind: true,\n\t\t\talias: 'punctuation',\n\t\t},\n\t});\n\n\tinterpolation.inside.expression.inside = Prism.languages.gradle;\n}(Prism));\n\"/components/prism-smalltalk.min.js\u0002Prism.languages.smalltalk={comment:{pattern:/\"(?:\"\"|[^\"])*\"/,greedy:!0},char:{pattern:/\\$./,greedy:!0},string:{pattern:/'(?:''|[^'])*'/,greedy:!0},symbol:/#[\\da-z]+|#(?:-|([+\\/\\\\*~<>=@%|&?!])\\1?)|#(?=\\()/i,\"block-arguments\":{pattern:/(\\[\\s*):[^\\[|]*\\|/,lookbehind:!0,inside:{variable:/:[\\da-z]+/i,punctuation:/\\|/}},\"temporary-variables\":{pattern:/\\|[^|]+\\|/,inside:{variable:/[\\da-z]+/i,punctuation:/\\|/}},keyword:/\\b(?:new|nil|self|super)\\b/,boolean:/\\b(?:false|true)\\b/,number:[/\\d+r-?[\\dA-Z]+(?:\\.[\\dA-Z]+)?(?:e-?\\d+)?/,/\\b\\d+(?:\\.\\d+)?(?:e-?\\d+)?/],operator:/[<=]=?|:=|~[~=]|\\/\\/?|\\\\\\\\|>[>=]?|[!^+\\-*&|,@]/,punctuation:/[.;:?\\[\\](){}]/};/components/prism-factor.jsA\u0019(function (Prism) {\n\n\tvar comment_inside = {\n\t\t'function': /\\b(?:BUGS?|FIX(?:MES?)?|NOTES?|TODOS?|XX+|HACKS?|WARN(?:ING)?|\\?{2,}|!{2,})\\b/\n\t};\n\tvar string_inside = {\n\t\t'number': /\\\\[^\\s']|%\\w/\n\t};\n\n\tvar factor = {\n\t\t'comment': [\n\t\t\t{\n\t\t\t\t// ! single-line exclamation point comments with whitespace after/around the !\n\t\t\t\tpattern: /(^|\\s)(?:! .*|!$)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: comment_inside\n\t\t\t},\n\n\t\t\t/* from basis/multiline: */\n\t\t\t{\n\t\t\t\t// /* comment */, /* comment*/\n\t\t\t\tpattern: /(^|\\s)\\/\\*\\s[\\s\\S]*?\\*\\/(?=\\s|$)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: comment_inside\n\t\t\t},\n\t\t\t{\n\t\t\t\t// ![[ comment ]] , ![===[ comment]===]\n\t\t\t\tpattern: /(^|\\s)!\\[(={0,6})\\[\\s[\\s\\S]*?\\]\\2\\](?=\\s|$)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: comment_inside\n\t\t\t}\n\t\t],\n\n\t\t'number': [\n\t\t\t{\n\t\t\t\t// basic base 10 integers 9, -9\n\t\t\t\tpattern: /(^|\\s)[+-]?\\d+(?=\\s|$)/,\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\t{\n\t\t\t\t// base prefix integers 0b010 0o70 0xad 0d10 0XAD -0xa9\n\t\t\t\tpattern: /(^|\\s)[+-]?0(?:b[01]+|o[0-7]+|d\\d+|x[\\dA-F]+)(?=\\s|$)/i,\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\t{\n\t\t\t\t// fractional ratios 1/5 -1/5 and the literal float approximations 1/5. -1/5.\n\t\t\t\tpattern: /(^|\\s)[+-]?\\d+\\/\\d+\\.?(?=\\s|$)/,\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\t{\n\t\t\t\t// positive mixed numbers 23+1/5 +23+1/5\n\t\t\t\tpattern: /(^|\\s)\\+?\\d+\\+\\d+\\/\\d+(?=\\s|$)/,\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\t{\n\t\t\t\t// negative mixed numbers -23-1/5\n\t\t\t\tpattern: /(^|\\s)-\\d+-\\d+\\/\\d+(?=\\s|$)/,\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\t{\n\t\t\t\t// basic decimal floats -0.01 0. .0 .1 -.1 -1. -12.13 +12.13\n\t\t\t\t// and scientific notation with base 10 exponents 3e4 3e-4 .3e-4\n\t\t\t\tpattern: /(^|\\s)[+-]?(?:\\d*\\.\\d+|\\d+\\.\\d*|\\d+)(?:e[+-]?\\d+)?(?=\\s|$)/i,\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\t{\n\t\t\t\t// NAN literal syntax NAN: 80000deadbeef, NAN: a\n\t\t\t\tpattern: /(^|\\s)NAN:\\s+[\\da-fA-F]+(?=\\s|$)/,\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\t{\n\t\t\t\t/*\n\t\t\t\t\tbase prefix floats 0x1.0p3 (8.0) 0b1.010p2 (5.0) 0x1.p1 0b1.11111111p11111...\n\t\t\t\t\t\"The normalized hex form ±0x1.MMMMMMMMMMMMM[pP]±EEEE allows any floating-point number to be specified precisely.\n\t\t\t\t\tThe values of MMMMMMMMMMMMM and EEEE map directly to the mantissa and exponent fields of the binary IEEE 754 representation.\"\n\t\t\t\t\t<https://docs.factorcode.org/content/article-syntax-floats.html>\n\t\t\t\t*/\n\t\t\t\tpattern: /(^|\\s)[+-]?0(?:b1\\.[01]*|o1\\.[0-7]*|d1\\.\\d*|x1\\.[\\dA-F]*)p\\d+(?=\\s|$)/i,\n\t\t\t\tlookbehind: true\n\t\t\t}\n\t\t],\n\n\t\t// R/ regexp?\\/\\\\/\n\t\t'regexp': {\n\t\t\tpattern: /(^|\\s)R\\/\\s(?:\\\\\\S|[^\\\\/])*\\/(?:[idmsr]*|[idmsr]+-[idmsr]+)(?=\\s|$)/,\n\t\t\tlookbehind: true,\n\t\t\talias: 'number',\n\t\t\tinside: {\n\t\t\t\t'variable': /\\\\\\S/,\n\t\t\t\t'keyword': /[+?*\\[\\]^$(){}.|]/,\n\t\t\t\t'operator': {\n\t\t\t\t\tpattern: /(\\/)[idmsr]+(?:-[idmsr]+)?/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t'boolean': {\n\t\t\tpattern: /(^|\\s)[tf](?=\\s|$)/,\n\t\t\tlookbehind: true\n\t\t},\n\n\t\t// SBUF\" asd\", URL\" ://...\", P\" /etc/\"\n\t\t'custom-string': {\n\t\t\tpattern: /(^|\\s)[A-Z0-9\\-]+\"\\s(?:\\\\\\S|[^\"\\\\])*\"/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\talias: 'string',\n\t\t\tinside: {\n\t\t\t\t'number': /\\\\\\S|%\\w|\\//\n\t\t\t}\n\t\t},\n\n\t\t'multiline-string': [\n\t\t\t{\n\t\t\t\t// STRING: name \\n content \\n ; -> CONSTANT: name \"content\" (symbol)\n\t\t\t\tpattern: /(^|\\s)STRING:\\s+\\S+(?:\\n|\\r\\n).*(?:\\n|\\r\\n)\\s*;(?=\\s|$)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true,\n\t\t\t\talias: 'string',\n\t\t\t\tinside: {\n\t\t\t\t\t'number': string_inside.number,\n\t\t\t\t\t// trailing semicolon on its own line\n\t\t\t\t\t'semicolon-or-setlocal': {\n\t\t\t\t\t\tpattern: /([\\r\\n][ \\t]*);(?=\\s|$)/,\n\t\t\t\t\t\tlookbehind: true,\n\t\t\t\t\t\talias: 'function'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\t// HEREDOC: marker \\n content \\n marker ; -> \"content\" (immediate)\n\t\t\t\tpattern: /(^|\\s)HEREDOC:\\s+\\S+(?:\\n|\\r\\n).*(?:\\n|\\r\\n)\\s*\\S+(?=\\s|$)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true,\n\t\t\t\talias: 'string',\n\t\t\t\tinside: string_inside\n\t\t\t},\n\t\t\t{\n\t\t\t\t// [[ string ]], [==[ string]==]\n\t\t\t\tpattern: /(^|\\s)\\[(={0,6})\\[\\s[\\s\\S]*?\\]\\2\\](?=\\s|$)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true,\n\t\t\t\talias: 'string',\n\t\t\t\tinside: string_inside\n\t\t\t}\n\t\t],\n\n\t\t'special-using': {\n\t\t\tpattern: /(^|\\s)USING:(?:\\s\\S+)*(?=\\s+;(?:\\s|$))/,\n\t\t\tlookbehind: true,\n\t\t\talias: 'function',\n\t\t\tinside: {\n\t\t\t\t// this is essentially a regex for vocab names, which i don't want to specify\n\t\t\t\t// but the USING: gets picked up as a vocab name\n\t\t\t\t'string': {\n\t\t\t\t\tpattern: /(\\s)[^:\\s]+/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t/* this description of stack effect literal syntax is not complete and not as specific as theoretically possible\n\t\t\ttrying to do better is more work and regex-computation-time than it's worth though.\n\t\t\t- we'd like to have the \"delimiter\" parts of the stack effect [ (, --, and ) ] be a different (less-important or comment-like) colour to the stack effect contents\n\t\t\t- we'd like if nested stack effects were treated as such rather than just appearing flat (with `inside`)\n\t\t\t- we'd like if the following variable name conventions were recognised specifically:\n\t\t\t\tspecial row variables = ..a b..\n\t\t\t\ttype and stack effect annotations end with a colon = ( quot: ( a: ( -- ) -- b ) -- x ), ( x: number -- )\n\t\t\t\tword throws unconditional error = *\n\t\t\t\tany other word-like variable name = a ? q' etc\n\n\t\t\thttps://docs.factorcode.org/content/article-effects.html\n\n\t\t\tthese are pretty complicated to highlight properly without a real parser, and therefore out of scope\n\t\t\tthe old pattern, which may be later useful, was: (^|\\s)(?:call|execute|eval)?\\((?:\\s+[^\"\\r\\n\\t ]\\S*)*?\\s+--(?:\\s+[^\"\\n\\t ]\\S*)*?\\s+\\)(?=\\s|$)\n\t\t*/\n\n\t\t// current solution is not great\n\t\t'stack-effect-delimiter': [\n\t\t\t{\n\t\t\t\t// opening parenthesis\n\t\t\t\tpattern: /(^|\\s)(?:call|eval|execute)?\\((?=\\s)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'operator'\n\t\t\t},\n\t\t\t{\n\t\t\t\t// middle --\n\t\t\t\tpattern: /(\\s)--(?=\\s)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'operator'\n\t\t\t},\n\t\t\t{\n\t\t\t\t// closing parenthesis\n\t\t\t\tpattern: /(\\s)\\)(?=\\s|$)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'operator'\n\t\t\t}\n\t\t],\n\n\t\t'combinators': {\n\t\t\tpattern: null,\n\t\t\tlookbehind: true,\n\t\t\talias: 'keyword'\n\t\t},\n\n\t\t'kernel-builtin': {\n\t\t\tpattern: null,\n\t\t\tlookbehind: true,\n\t\t\talias: 'variable'\n\t\t},\n\n\t\t'sequences-builtin': {\n\t\t\tpattern: null,\n\t\t\tlookbehind: true,\n\t\t\talias: 'variable'\n\t\t},\n\n\t\t'math-builtin': {\n\t\t\tpattern: null,\n\t\t\tlookbehind: true,\n\t\t\talias: 'variable'\n\t\t},\n\n\t\t'constructor-word': {\n\t\t\t// <array> but not <=>\n\t\t\tpattern: /(^|\\s)<(?!=+>|-+>)\\S+>(?=\\s|$)/,\n\t\t\tlookbehind: true,\n\t\t\talias: 'keyword'\n\t\t},\n\n\t\t'other-builtin-syntax': {\n\t\t\tpattern: null,\n\t\t\tlookbehind: true,\n\t\t\talias: 'operator'\n\t\t},\n\n\t\t/*\n\t\t\tfull list of supported word naming conventions: (the convention appears outside of the [brackets])\n\t\t\t\tset-[x]\n\t\t\t\tchange-[x]\n\t\t\t\twith-[x]\n\t\t\t\tnew-[x]\n\t\t\t\t>[string]\n\t\t\t\t[base]>\n\t\t\t\t[string]>[number]\n\t\t\t\t+[symbol]+\n\t\t\t\t[boolean-word]?\n\t\t\t\t?[of]\n\t\t\t\t[slot-reader]>>\n\t\t\t\t>>[slot-setter]\n\t\t\t\t[slot-writer]<<\n\t\t\t\t([implementation-detail])\n\t\t\t\t[mutater]!\n\t\t\t\t[variant]*\n\t\t\t\t[prettyprint].\n\t\t\t\t$[help-markup]\n\n\t\t\t<constructors>, SYNTAX:, etc are supported by their own patterns.\n\n\t\t\t`with` and `new` from `kernel` are their own builtins.\n\n\t\t\tsee <https://docs.factorcode.org/content/article-conventions.html>\n\t\t*/\n\t\t'conventionally-named-word': {\n\t\t\tpattern: /(^|\\s)(?!\")(?:(?:change|new|set|with)-\\S+|\\$\\S+|>[^>\\s]+|[^:>\\s]+>|[^>\\s]+>[^>\\s]+|\\+[^+\\s]+\\+|[^?\\s]+\\?|\\?[^?\\s]+|[^>\\s]+>>|>>[^>\\s]+|[^<\\s]+<<|\\([^()\\s]+\\)|[^!\\s]+!|[^*\\s]\\S*\\*|[^.\\s]\\S*\\.)(?=\\s|$)/,\n\t\t\tlookbehind: true,\n\t\t\talias: 'keyword'\n\t\t},\n\n\t\t'colon-syntax': {\n\t\t\tpattern: /(^|\\s)(?:[A-Z0-9\\-]+#?)?:{1,2}\\s+(?:;\\S+|(?!;)\\S+)(?=\\s|$)/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\talias: 'function'\n\t\t},\n\n\t\t'semicolon-or-setlocal': {\n\t\t\tpattern: /(\\s)(?:;|:>)(?=\\s|$)/,\n\t\t\tlookbehind: true,\n\t\t\talias: 'function'\n\t\t},\n\n\t\t// do not highlight leading } or trailing X{ at the begin/end of the file as it's invalid syntax\n\t\t'curly-brace-literal-delimiter': [\n\t\t\t{\n\t\t\t\t// opening\n\t\t\t\tpattern: /(^|\\s)[a-z]*\\{(?=\\s)/i,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'operator'\n\t\t\t},\n\t\t\t{\n\t\t\t\t// closing\n\t\t\t\tpattern: /(\\s)\\}(?=\\s|$)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'operator'\n\t\t\t},\n\n\t\t],\n\n\t\t// do not highlight leading ] or trailing [ at the begin/end of the file as it's invalid syntax\n\t\t'quotation-delimiter': [\n\t\t\t{\n\t\t\t\t// opening\n\t\t\t\tpattern: /(^|\\s)\\[(?=\\s)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'operator'\n\t\t\t},\n\t\t\t{\n\t\t\t\t// closing\n\t\t\t\tpattern: /(\\s)\\](?=\\s|$)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'operator'\n\t\t\t},\n\t\t],\n\n\t\t'normal-word': {\n\t\t\tpattern: /(^|\\s)[^\"\\s]\\S*(?=\\s|$)/,\n\t\t\tlookbehind: true\n\t\t},\n\n\t\t/*\n\t\t\tbasic first-class string \"a\"\n\t\t\t\twith escaped double-quote \"a\\\"\"\n\t\t\t\tescaped backslash \"\\\\\"\n\t\t\t\tand general escapes since Factor has so many \"\\N\"\n\n\t\t\tsyntax that works in the reference implementation that isn't fully\n\t\t\tsupported because it's an implementation detail:\n\t\t\t\t\"string 1\"\"string 2\" -> 2 strings (works anyway)\n\t\t\t\t\"string\"5 -> string, 5\n\t\t\t\t\"string\"[ ] -> string, quotation\n\t\t\t\t{ \"a\"} -> array<string>\n\n\t\t\tthe rest of those examples all properly recognise the string, but not\n\t\t\t\tthe other object (number, quotation, etc)\n\t\t\tthis is fine for a regex-only implementation.\n\t\t*/\n\t\t'string': {\n\t\t\tpattern: /\"(?:\\\\\\S|[^\"\\\\])*\"/,\n\t\t\tgreedy: true,\n\t\t\tinside: string_inside\n\t\t}\n\t};\n\n\tvar escape = function (str) {\n\t\treturn (str + '').replace(/([.?*+\\^$\\[\\]\\\\(){}|\\-])/g, '\\\\$1');\n\t};\n\n\tvar arrToWordsRegExp = function (arr) {\n\t\treturn new RegExp(\n\t\t\t'(^|\\\\s)(?:' + arr.map(escape).join('|') + ')(?=\\\\s|$)'\n\t\t);\n\t};\n\n\tvar builtins = {\n\t\t'kernel-builtin': [\n\t\t\t'or', '2nipd', '4drop', 'tuck', 'wrapper', 'nip', 'wrapper?', 'callstack>array', 'die', 'dupd', 'callstack', 'callstack?', '3dup', 'hashcode', 'pick', '4nip', 'build', '>boolean', 'nipd', 'clone', '5nip', 'eq?', '?', '=', 'swapd', '2over', 'clear', '2dup', 'get-retainstack', 'not', 'tuple?', 'dup', '3nipd', 'call', '-rotd', 'object', 'drop', 'assert=', 'assert?', '-rot', 'execute', 'boa', 'get-callstack', 'curried?', '3drop', 'pickd', 'overd', 'over', 'roll', '3nip', 'swap', 'and', '2nip', 'rotd', 'throw', '(clone)', 'hashcode*', 'spin', 'reach', '4dup', 'equal?', 'get-datastack', 'assert', '2drop', '<wrapper>', 'boolean?', 'identity-hashcode', 'identity-tuple?', 'null', 'composed?', 'new', '5drop', 'rot', '-roll', 'xor', 'identity-tuple', 'boolean'\n\t\t],\n\t\t'other-builtin-syntax': [\n\t\t\t// syntax\n\t\t\t'=======', 'recursive', 'flushable', '>>', '<<<<<<', 'M\\\\', 'B', 'PRIVATE>', '\\\\', '======', 'final', 'inline', 'delimiter', 'deprecated', '<PRIVATE', '>>>>>>', '<<<<<<<', 'parse-complex', 'malformed-complex', 'read-only', '>>>>>>>', 'call-next-method', '<<', 'foldable',\n\t\t\t// literals\n\t\t\t'$', '$[', '${'\n\t\t],\n\t\t'sequences-builtin': [\n\t\t\t'member-eq?', 'mismatch', 'append', 'assert-sequence=', 'longer', 'repetition', 'clone-like', '3sequence', 'assert-sequence?', 'last-index-from', 'reversed', 'index-from', 'cut*', 'pad-tail', 'join-as', 'remove-eq!', 'concat-as', 'but-last', 'snip', 'nths', 'nth', 'sequence', 'longest', 'slice?', '<slice>', 'remove-nth', 'tail-slice', 'empty?', 'tail*', 'member?', 'virtual-sequence?', 'set-length', 'drop-prefix', 'iota', 'unclip', 'bounds-error?', 'unclip-last-slice', 'non-negative-integer-expected', 'non-negative-integer-expected?', 'midpoint@', 'longer?', '?set-nth', '?first', 'rest-slice', 'prepend-as', 'prepend', 'fourth', 'sift', 'subseq-start', 'new-sequence', '?last', 'like', 'first4', '1sequence', 'reverse', 'slice', 'virtual@', 'repetition?', 'set-last', 'index', '4sequence', 'max-length', 'set-second', 'immutable-sequence', 'first2', 'first3', 'supremum', 'unclip-slice', 'suffix!', 'insert-nth', 'tail', '3append', 'short', 'suffix', 'concat', 'flip', 'immutable?', 'reverse!', '2sequence', 'sum', 'delete-all', 'indices', 'snip-slice', '<iota>', 'check-slice', 'sequence?', 'head', 'append-as', 'halves', 'sequence=', 'collapse-slice', '?second', 'slice-error?', 'product', 'bounds-check?', 'bounds-check', 'immutable', 'virtual-exemplar', 'harvest', 'remove', 'pad-head', 'last', 'set-fourth', 'cartesian-product', 'remove-eq', 'shorten', 'shorter', 'reversed?', 'shorter?', 'shortest', 'head-slice', 'pop*', 'tail-slice*', 'but-last-slice', 'iota?', 'append!', 'cut-slice', 'new-resizable', 'head-slice*', 'sequence-hashcode', 'pop', 'set-nth', '?nth', 'second', 'join', 'immutable-sequence?', '<reversed>', '3append-as', 'virtual-sequence', 'subseq?', 'remove-nth!', 'length', 'last-index', 'lengthen', 'assert-sequence', 'copy', 'move', 'third', 'first', 'tail?', 'set-first', 'prefix', 'bounds-error', '<repetition>', 'exchange', 'surround', 'cut', 'min-length', 'set-third', 'push-all', 'head?', 'subseq-start-from', 'delete-slice', 'rest', 'sum-lengths', 'head*', 'infimum', 'remove!', 'glue', 'slice-error', 'subseq', 'push', 'replace-slice', 'subseq-as', 'unclip-last'\n\t\t],\n\t\t'math-builtin': [\n\t\t\t'number=', 'next-power-of-2', '?1+', 'fp-special?', 'imaginary-part', 'float>bits', 'number?', 'fp-infinity?', 'bignum?', 'fp-snan?', 'denominator', 'gcd', '*', '+', 'fp-bitwise=', '-', 'u>=', '/', '>=', 'bitand', 'power-of-2?', 'log2-expects-positive', 'neg?', '<', 'log2', '>', 'integer?', 'number', 'bits>double', '2/', 'zero?', 'bits>float', 'float?', 'shift', 'ratio?', 'rect>', 'even?', 'ratio', 'fp-sign', 'bitnot', '>fixnum', 'complex?', '/i', 'integer>fixnum', '/f', 'sgn', '>bignum', 'next-float', 'u<', 'u>', 'mod', 'recip', 'rational', '>float', '2^', 'integer', 'fixnum?', 'neg', 'fixnum', 'sq', 'bignum', '>rect', 'bit?', 'fp-qnan?', 'simple-gcd', 'complex', '<fp-nan>', 'real', '>fraction', 'double>bits', 'bitor', 'rem', 'fp-nan-payload', 'real-part', 'log2-expects-positive?', 'prev-float', 'align', 'unordered?', 'float', 'fp-nan?', 'abs', 'bitxor', 'integer>fixnum-strict', 'u<=', 'odd?', '<=', '/mod', '>integer', 'real?', 'rational?', 'numerator'\n\t\t]\n\t\t// that's all for now\n\t};\n\n\tObject.keys(builtins).forEach(function (k) {\n\t\tfactor[k].pattern = arrToWordsRegExp(builtins[k]);\n\t});\n\n\tvar combinators = [\n\t\t// kernel\n\t\t'2bi', 'while', '2tri', 'bi*', '4dip', 'both?', 'same?', 'tri@', 'curry', 'prepose', '3bi', '?if', 'tri*', '2keep', '3keep', 'curried', '2keepd', 'when', '2bi*', '2tri*', '4keep', 'bi@', 'keepdd', 'do', 'unless*', 'tri-curry', 'if*', 'loop', 'bi-curry*', 'when*', '2bi@', '2tri@', 'with', '2with', 'either?', 'bi', 'until', '3dip', '3curry', 'tri-curry*', 'tri-curry@', 'bi-curry', 'keepd', 'compose', '2dip', 'if', '3tri', 'unless', 'tuple', 'keep', '2curry', 'tri', 'most', 'while*', 'dip', 'composed', 'bi-curry@',\n\t\t// sequences\n\t\t'find-last-from', 'trim-head-slice', 'map-as', 'each-from', 'none?', 'trim-tail', 'partition', 'if-empty', 'accumulate*', 'reject!', 'find-from', 'accumulate-as', 'collector-for-as', 'reject', 'map', 'map-sum', 'accumulate!', '2each-from', 'follow', 'supremum-by', 'map!', 'unless-empty', 'collector', 'padding', 'reduce-index', 'replicate-as', 'infimum-by', 'trim-tail-slice', 'count', 'find-index', 'filter', 'accumulate*!', 'reject-as', 'map-integers', 'map-find', 'reduce', 'selector', 'interleave', '2map', 'filter-as', 'binary-reduce', 'map-index-as', 'find', 'produce', 'filter!', 'replicate', 'cartesian-map', 'cartesian-each', 'find-index-from', 'map-find-last', '3map-as', '3map', 'find-last', 'selector-as', '2map-as', '2map-reduce', 'accumulate', 'each', 'each-index', 'accumulate*-as', 'when-empty', 'all?', 'collector-as', 'push-either', 'new-like', 'collector-for', '2selector', 'push-if', '2all?', 'map-reduce', '3each', 'any?', 'trim-slice', '2reduce', 'change-nth', 'produce-as', '2each', 'trim', 'trim-head', 'cartesian-find', 'map-index',\n\t\t// math\n\t\t'if-zero', 'each-integer', 'unless-zero', '(find-integer)', 'when-zero', 'find-last-integer', '(all-integers?)', 'times', '(each-integer)', 'find-integer', 'all-integers?',\n\t\t// math.combinators\n\t\t'unless-negative', 'if-positive', 'when-positive', 'when-negative', 'unless-positive', 'if-negative',\n\t\t// combinators\n\t\t'case', '2cleave', 'cond>quot', 'case>quot', '3cleave', 'wrong-values', 'to-fixed-point', 'alist>quot', 'cond', 'cleave', 'call-effect', 'recursive-hashcode', 'spread', 'deep-spread>quot',\n\t\t// combinators.short-circuit\n\t\t'2||', '0||', 'n||', '0&&', '2&&', '3||', '1||', '1&&', 'n&&', '3&&',\n\t\t// combinators.smart\n\t\t'smart-unless*', 'keep-inputs', 'reduce-outputs', 'smart-when*', 'cleave>array', 'smart-with', 'smart-apply', 'smart-if', 'inputs/outputs', 'output>sequence-n', 'map-outputs', 'map-reduce-outputs', 'dropping', 'output>array', 'smart-map-reduce', 'smart-2map-reduce', 'output>array-n', 'nullary', 'input<sequence', 'append-outputs', 'drop-inputs', 'inputs', 'smart-2reduce', 'drop-outputs', 'smart-reduce', 'preserving', 'smart-when', 'outputs', 'append-outputs-as', 'smart-unless', 'smart-if*', 'sum-outputs', 'input<sequence-unsafe', 'output>sequence',\n\t\t// tafn\n\t];\n\n\tfactor.combinators.pattern = arrToWordsRegExp(combinators);\n\n\tPrism.languages.factor = factor;\n\n}(Prism));\n?/plugins/normalize-whitespace/prism-normalize-whitespace.min.js\u000bP!function(){if(\"undefined\"!=typeof Prism){var e=Object.assign||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n]);return e},t={\"remove-trailing\":\"boolean\",\"remove-indent\":\"boolean\",\"left-trim\":\"boolean\",\"right-trim\":\"boolean\",\"break-lines\":\"number\",indent:\"number\",\"remove-initial-line-feed\":\"boolean\",\"tabs-to-spaces\":\"number\",\"spaces-to-tabs\":\"number\"};n.prototype={setDefaults:function(t){this.defaults=e(this.defaults,t)},normalize:function(t,n){for(var r in n=e(this.defaults,n)){var i=r.replace(/-(\\w)/g,(function(e,t){return t.toUpperCase()}));\"normalize\"!==r&&\"setDefaults\"!==i&&n[r]&&this[i]&&(t=this[i].call(this,t,n[r]))}return t},leftTrim:function(e){return e.replace(/^\\s+/,\"\")},rightTrim:function(e){return e.replace(/\\s+$/,\"\")},tabsToSpaces:function(e,t){return t=0|t||4,e.replace(/\\t/g,new Array(++t).join(\" \"))},spacesToTabs:function(e,t){return t=0|t||4,e.replace(RegExp(\" {\"+t+\"}\",\"g\"),\"\\t\")},removeTrailing:function(e){return e.replace(/\\s*?$/gm,\"\")},removeInitialLineFeed:function(e){return e.replace(/^(?:\\r?\\n|\\r)/,\"\")},removeIndent:function(e){var t=e.match(/^[^\\S\\n\\r]*(?=\\S)/gm);return t&&t[0].length?(t.sort((function(e,t){return e.length-t.length})),t[0].length?e.replace(RegExp(\"^\"+t[0],\"gm\"),\"\"):e):e},indent:function(e,t){return e.replace(/^[^\\S\\n\\r]*(?=\\S)/gm,new Array(++t).join(\"\\t\")+\"$&\")},breakLines:function(e,t){t=!0===t?80:0|t||80;for(var n=e.split(\"\\n\"),i=0;i<n.length;++i)if(!(r(n[i])<=t)){for(var o=n[i].split(/(\\s+)/g),a=0,l=0;l<o.length;++l){var s=r(o[l]);(a+=s)>t&&(o[l]=\"\\n\"+o[l],a=s)}n[i]=o.join(\"\")}return n.join(\"\\n\")}},\"undefined\"!=typeof module&&module.exports&&(module.exports=n),Prism.plugins.NormalizeWhitespace=new n({\"remove-trailing\":!0,\"remove-indent\":!0,\"left-trim\":!0,\"right-trim\":!0}),Prism.hooks.add(\"before-sanity-check\",(function(e){var n=Prism.plugins.NormalizeWhitespace;if((!e.settings||!1!==e.settings[\"whitespace-normalization\"])&&Prism.util.isActive(e.element,\"whitespace-normalization\",!0))if(e.element&&e.element.parentNode||!e.code){var r=e.element.parentNode;if(e.code&&r&&\"pre\"===r.nodeName.toLowerCase()){for(var i in null==e.settings&&(e.settings={}),t)if(Object.hasOwnProperty.call(t,i)){var o=t[i];if(r.hasAttribute(\"data-\"+i))try{var a=JSON.parse(r.getAttribute(\"data-\"+i)||\"true\");typeof a===o&&(e.settings[i]=a)}catch(e){}}for(var l=r.childNodes,s=\"\",c=\"\",u=!1,m=0;m<l.length;++m){var f=l[m];f==e.element?u=!0:\"#text\"===f.nodeName&&(u?c+=f.nodeValue:s+=f.nodeValue,r.removeChild(f),--m)}if(e.element.children.length&&Prism.plugins.KeepMarkup){var d=s+e.element.innerHTML+c;e.element.innerHTML=n.normalize(d,e.settings),e.code=e.element.textContent}else e.code=s+e.code+c,e.code=n.normalize(e.code,e.settings)}}else e.code=n.normalize(e.code,e.settings)}))}function n(t){this.defaults=e({},t)}function r(e){for(var t=0,n=0;n<e.length;++n)e.charCodeAt(n)==\"\\t\".charCodeAt(0)&&(t+=3);return e.length+t}}();/components/prism-pascal.js\t/// Based on Free Pascal\n\n/* TODO\n\tSupport inline asm ?\n*/\n\nPrism.languages.pascal = {\n\t'directive': {\n\t\tpattern: /\\{\\$[\\s\\S]*?\\}/,\n\t\tgreedy: true,\n\t\talias: ['marco', 'property']\n\t},\n\t'comment': {\n\t\tpattern: /\\(\\*[\\s\\S]*?\\*\\)|\\{[\\s\\S]*?\\}|\\/\\/.*/,\n\t\tgreedy: true\n\t},\n\t'string': {\n\t\tpattern: /(?:'(?:''|[^'\\r\\n])*'(?!')|#[&$%]?[a-f\\d]+)+|\\^[a-z]/i,\n\t\tgreedy: true\n\t},\n\t'asm': {\n\t\tpattern: /(\\basm\\b)[\\s\\S]+?(?=\\bend\\s*[;[])/i,\n\t\tlookbehind: true,\n\t\tgreedy: true,\n\t\tinside: null // see below\n\t},\n\t'keyword': [\n\t\t{\n\t\t\t// Turbo Pascal\n\t\t\tpattern: /(^|[^&])\\b(?:absolute|array|asm|begin|case|const|constructor|destructor|do|downto|else|end|file|for|function|goto|if|implementation|inherited|inline|interface|label|nil|object|of|operator|packed|procedure|program|record|reintroduce|repeat|self|set|string|then|to|type|unit|until|uses|var|while|with)\\b/i,\n\t\t\tlookbehind: true\n\t\t},\n\t\t{\n\t\t\t// Free Pascal\n\t\t\tpattern: /(^|[^&])\\b(?:dispose|exit|false|new|true)\\b/i,\n\t\t\tlookbehind: true\n\t\t},\n\t\t{\n\t\t\t// Object Pascal\n\t\t\tpattern: /(^|[^&])\\b(?:class|dispinterface|except|exports|finalization|finally|initialization|inline|library|on|out|packed|property|raise|resourcestring|threadvar|try)\\b/i,\n\t\t\tlookbehind: true\n\t\t},\n\t\t{\n\t\t\t// Modifiers\n\t\t\tpattern: /(^|[^&])\\b(?:absolute|abstract|alias|assembler|bitpacked|break|cdecl|continue|cppdecl|cvar|default|deprecated|dynamic|enumerator|experimental|export|external|far|far16|forward|generic|helper|implements|index|interrupt|iochecks|local|message|name|near|nodefault|noreturn|nostackframe|oldfpccall|otherwise|overload|override|pascal|platform|private|protected|public|published|read|register|reintroduce|result|safecall|saveregisters|softfloat|specialize|static|stdcall|stored|strict|unaligned|unimplemented|varargs|virtual|write)\\b/i,\n\t\t\tlookbehind: true\n\t\t}\n\t],\n\t'number': [\n\t\t// Hexadecimal, octal and binary\n\t\t/(?:[&%]\\d+|\\$[a-f\\d]+)/i,\n\t\t// Decimal\n\t\t/\\b\\d+(?:\\.\\d+)?(?:e[+-]?\\d+)?/i\n\t],\n\t'operator': [\n\t\t/\\.\\.|\\*\\*|:=|<[<=>]?|>[>=]?|[+\\-*\\/]=?|[@^=]/,\n\t\t{\n\t\t\tpattern: /(^|[^&])\\b(?:and|as|div|exclude|in|include|is|mod|not|or|shl|shr|xor)\\b/,\n\t\t\tlookbehind: true\n\t\t}\n\t],\n\t'punctuation': /\\(\\.|\\.\\)|[()\\[\\]:;,.]/\n};\n\nPrism.languages.pascal.asm.inside = Prism.languages.extend('pascal', {\n\t'asm': undefined,\n\t'keyword': undefined,\n\t'operator': undefined\n});\n\nPrism.languages.objectpascal = Prism.languages.pascal;\n/components/prism-nsis.js\u000f/**\n * Original by Jan T. Sott (http://github.com/idleberg)\n *\n * Includes all commands and plug-ins shipped with NSIS 3.08\n */\nPrism.languages.nsis = {\n\t'comment': {\n\t\tpattern: /(^|[^\\\\])(?:\\/\\*[\\s\\S]*?\\*\\/|[#;].*)/,\n\t\tlookbehind: true,\n\t\tgreedy: true\n\t},\n\t'string': {\n\t\tpattern: /(\"|')(?:\\\\.|(?!\\1)[^\\\\\\r\\n])*\\1/,\n\t\tgreedy: true\n\t},\n\t'keyword': {\n\t\tpattern: /(^[\\t ]*)(?:Abort|Add(?:BrandingImage|Size)|AdvSplash|Allow(?:RootDirInstall|SkipFiles)|AutoCloseWindow|BG(?:Font|Gradient|Image)|Banner|BrandingText|BringToFront|CRCCheck|Call(?:InstDLL)?|Caption|ChangeUI|CheckBitmap|ClearErrors|CompletedText|ComponentText|CopyFiles|Create(?:Directory|Font|ShortCut)|Delete(?:INISec|INIStr|RegKey|RegValue)?|Detail(?:Print|sButtonText)|Dialer|Dir(?:Text|Var|Verify)|EnableWindow|Enum(?:RegKey|RegValue)|Exch|Exec(?:Shell(?:Wait)?|Wait)?|ExpandEnvStrings|File(?:BufSize|Close|ErrorText|Open|Read|ReadByte|ReadUTF16LE|ReadWord|Seek|Write|WriteByte|WriteUTF16LE|WriteWord)?|Find(?:Close|First|Next|Window)|FlushINI|Get(?:CurInstType|CurrentAddress|DLLVersion(?:Local)?|DlgItem|ErrorLevel|FileTime(?:Local)?|FullPathName|Function(?:Address|End)?|InstDirError|KnownFolderPath|LabelAddress|TempFileName|WinVer)|Goto|HideWindow|Icon|If(?:Abort|Errors|FileExists|RebootFlag|RtlLanguage|ShellVarContextAll|Silent)|InitPluginsDir|InstProgressFlags|Inst(?:Type(?:GetText|SetText)?)|Install(?:ButtonText|Colors|Dir(?:RegKey)?)|Int(?:64|Ptr)?CmpU?|Int(?:64)?Fmt|Int(?:Ptr)?Op|IsWindow|Lang(?:DLL|String)|License(?:BkColor|Data|ForceSelection|LangString|Text)|LoadLanguageFile|LockWindow|Log(?:Set|Text)|Manifest(?:DPIAware|SupportedOS)|Math|MessageBox|MiscButtonText|NSISdl|Name|Nop|OutFile|PE(?:DllCharacteristics|SubsysVer)|Page(?:Callbacks)?|Pop|Push|Quit|RMDir|Read(?:EnvStr|INIStr|RegDWORD|RegStr)|Reboot|RegDLL|Rename|RequestExecutionLevel|ReserveFile|Return|SearchPath|Section(?:End|GetFlags|GetInstTypes|GetSize|GetText|Group|In|SetFlags|SetInstTypes|SetSize|SetText)?|SendMessage|Set(?:AutoClose|BrandingImage|Compress|Compressor(?:DictSize)?|CtlColors|CurInstType|DatablockOptimize|DateSave|Details(?:Print|View)|ErrorLevel|Errors|FileAttributes|Font|OutPath|Overwrite|PluginUnload|RebootFlag|RegView|ShellVarContext|Silent)|Show(?:InstDetails|UninstDetails|Window)|Silent(?:Install|UnInstall)|Sleep|SpaceTexts|Splash|StartMenu|Str(?:CmpS?|Cpy|Len)|SubCaption|System|Target|UnRegDLL|Unicode|UninstPage|Uninstall(?:ButtonText|Caption|Icon|SubCaption|Text)|UserInfo|VI(?:AddVersionKey|FileVersion|ProductVersion)|VPatch|Var|WindowIcon|Write(?:INIStr|Reg(?:Bin|DWORD|ExpandStr|MultiStr|None|Str)|Uninstaller)|XPStyle|ns(?:Dialogs|Exec))\\b/m,\n\t\tlookbehind: true\n\t},\n\t'property': /\\b(?:ARCHIVE|FILE_(?:ATTRIBUTE_ARCHIVE|ATTRIBUTE_NORMAL|ATTRIBUTE_OFFLINE|ATTRIBUTE_READONLY|ATTRIBUTE_SYSTEM|ATTRIBUTE_TEMPORARY)|HK(?:(?:CR|CU|LM)(?:32|64)?|DD|PD|U)|HKEY_(?:CLASSES_ROOT|CURRENT_CONFIG|CURRENT_USER|DYN_DATA|LOCAL_MACHINE|PERFORMANCE_DATA|USERS)|ID(?:ABORT|CANCEL|IGNORE|NO|OK|RETRY|YES)|MB_(?:ABORTRETRYIGNORE|DEFBUTTON1|DEFBUTTON2|DEFBUTTON3|DEFBUTTON4|ICONEXCLAMATION|ICONINFORMATION|ICONQUESTION|ICONSTOP|OK|OKCANCEL|RETRYCANCEL|RIGHT|RTLREADING|SETFOREGROUND|TOPMOST|USERICON|YESNO)|NORMAL|OFFLINE|READONLY|SHCTX|SHELL_CONTEXT|SYSTEM|TEMPORARY|admin|all|auto|both|colored|false|force|hide|highest|lastused|leave|listonly|none|normal|notset|off|on|open|print|show|silent|silentlog|smooth|textonly|true|user)\\b/,\n\t'constant': /\\$\\{[!\\w\\.:\\^-]+\\}|\\$\\([!\\w\\.:\\^-]+\\)/,\n\t'variable': /\\$\\w[\\w\\.]*/,\n\t'number': /\\b0x[\\dA-Fa-f]+\\b|(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:[Ee]-?\\d+)?/,\n\t'operator': /--?|\\+\\+?|<=?|>=?|==?=?|&&?|\\|\\|?|[?*\\/~^%]/,\n\t'punctuation': /[{}[\\];(),.:]/,\n\t'important': {\n\t\tpattern: /(^[\\t ]*)!(?:addincludedir|addplugindir|appendfile|cd|define|delfile|echo|else|endif|error|execute|finalize|getdllversion|gettlbversion|if|ifdef|ifmacrodef|ifmacrondef|ifndef|include|insertmacro|macro|macroend|makensis|packhdr|pragma|searchparse|searchreplace|system|tempfile|undef|verbose|warning)\\b/im,\n\t\tlookbehind: true\n\t}\n};\n/components/prism-q.js\nPrism.languages.q = {\n\t'string': /\"(?:\\\\.|[^\"\\\\\\r\\n])*\"/,\n\t'comment': [\n\t\t// From http://code.kx.com/wiki/Reference/Slash:\n\t\t// When / is following a space (or a right parenthesis, bracket, or brace), it is ignored with the rest of the line.\n\t\t{\n\n\t\t\tpattern: /([\\t )\\]}])\\/.*/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true\n\t\t},\n\t\t// From http://code.kx.com/wiki/Reference/Slash:\n\t\t// A line which has / as its first character and contains at least one other non-whitespace character is a whole-line comment and is ignored entirely.\n\t\t// A / on a line by itself begins a multiline comment which is terminated by the next \\ on a line by itself.\n\t\t// If a / is not matched by a \\, the multiline comment is unterminated and continues to end of file.\n\t\t// The / and \\ must be the first char on the line, but may be followed by any amount of whitespace.\n\t\t{\n\t\t\tpattern: /(^|\\r?\\n|\\r)\\/[\\t ]*(?:(?:\\r?\\n|\\r)(?:.*(?:\\r?\\n|\\r(?!\\n)))*?(?:\\\\(?=[\\t ]*(?:\\r?\\n|\\r))|$)|\\S.*)/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true\n\t\t},\n\t\t// From http://code.kx.com/wiki/Reference/Slash:\n\t\t// A \\ on a line by itself with no preceding matching / will comment to end of file.\n\t\t{\n\t\t\tpattern: /^\\\\[\\t ]*(?:\\r?\\n|\\r)[\\s\\S]+/m,\n\t\t\tgreedy: true\n\t\t},\n\t\t{\n\t\t\tpattern: /^#!.+/m,\n\t\t\tgreedy: true\n\t\t}\n\t],\n\t'symbol': /`(?::\\S+|[\\w.]*)/,\n\t'datetime': {\n\t\tpattern: /0N[mdzuvt]|0W[dtz]|\\d{4}\\.\\d\\d(?:m|\\.\\d\\d(?:T(?:\\d\\d(?::\\d\\d(?::\\d\\d(?:[.:]\\d\\d\\d)?)?)?)?)?[dz]?)|\\d\\d:\\d\\d(?::\\d\\d(?:[.:]\\d\\d\\d)?)?[uvt]?/,\n\t\talias: 'number'\n\t},\n\t// The negative look-ahead prevents bad highlighting\n\t// of verbs 0: and 1:\n\t'number': /\\b(?![01]:)(?:0N[hje]?|0W[hj]?|0[wn]|0x[\\da-fA-F]+|\\d+(?:\\.\\d*)?(?:e[+-]?\\d+)?[hjfeb]?)/,\n\t'keyword': /\\\\\\w+\\b|\\b(?:abs|acos|aj0?|all|and|any|asc|asin|asof|atan|attr|avgs?|binr?|by|ceiling|cols|cor|cos|count|cov|cross|csv|cut|delete|deltas|desc|dev|differ|distinct|div|do|dsave|ej|enlist|eval|except|exec|exit|exp|fby|fills|first|fkeys|flip|floor|from|get|getenv|group|gtime|hclose|hcount|hdel|hopen|hsym|iasc|identity|idesc|if|ij|in|insert|inter|inv|keys?|last|like|list|ljf?|load|log|lower|lsq|ltime|ltrim|mavg|maxs?|mcount|md5|mdev|med|meta|mins?|mmax|mmin|mmu|mod|msum|neg|next|not|null|or|over|parse|peach|pj|plist|prds?|prev|prior|rand|rank|ratios|raze|read0|read1|reciprocal|reval|reverse|rload|rotate|rsave|rtrim|save|scan|scov|sdev|select|set|setenv|show|signum|sin|sqrt|ssr?|string|sublist|sums?|sv|svar|system|tables|tan|til|trim|txf|type|uj|ungroup|union|update|upper|upsert|value|var|views?|vs|wavg|where|while|within|wj1?|wsum|ww|xasc|xbar|xcols?|xdesc|xexp|xgroup|xkey|xlog|xprev|xrank)\\b/,\n\t'adverb': {\n\t\tpattern: /['\\/\\\\]:?|\\beach\\b/,\n\t\talias: 'function'\n\t},\n\t'verb': {\n\t\tpattern: /(?:\\B\\.\\B|\\b[01]:|<[=>]?|>=?|[:+\\-*%,!?~=|$&#@^]):?|\\b_\\b:?/,\n\t\talias: 'operator'\n\t},\n\t'punctuation': /[(){}\\[\\];.]/\n};\n/components/prism-diff.js\u0005U(function (Prism) {\n\n\tPrism.languages.diff = {\n\t\t'coord': [\n\t\t\t// Match all kinds of coord lines (prefixed by \"+++\", \"---\" or \"***\").\n\t\t\t/^(?:\\*{3}|-{3}|\\+{3}).*$/m,\n\t\t\t// Match \"@@ ... @@\" coord lines in unified diff.\n\t\t\t/^@@.*@@$/m,\n\t\t\t// Match coord lines in normal diff (starts with a number).\n\t\t\t/^\\d.*$/m\n\t\t]\n\n\t\t// deleted, inserted, unchanged, diff\n\t};\n\n\t/**\n\t * A map from the name of a block to its line prefix.\n\t *\n\t * @type {Object<string, string>}\n\t */\n\tvar PREFIXES = {\n\t\t'deleted-sign': '-',\n\t\t'deleted-arrow': '<',\n\t\t'inserted-sign': '+',\n\t\t'inserted-arrow': '>',\n\t\t'unchanged': ' ',\n\t\t'diff': '!',\n\t};\n\n\t// add a token for each prefix\n\tObject.keys(PREFIXES).forEach(function (name) {\n\t\tvar prefix = PREFIXES[name];\n\n\t\tvar alias = [];\n\t\tif (!/^\\w+$/.test(name)) { // \"deleted-sign\" -> \"deleted\"\n\t\t\talias.push(/\\w+/.exec(name)[0]);\n\t\t}\n\t\tif (name === 'diff') {\n\t\t\talias.push('bold');\n\t\t}\n\n\t\tPrism.languages.diff[name] = {\n\t\t\tpattern: RegExp('^(?:[' + prefix + '].*(?:\\r\\n?|\\n|(?![\\\\s\\\\S])))+', 'm'),\n\t\t\talias: alias,\n\t\t\tinside: {\n\t\t\t\t'line': {\n\t\t\t\t\tpattern: /(.)(?=[\\s\\S]).*(?:\\r\\n?|\\n)?/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t},\n\t\t\t\t'prefix': {\n\t\t\t\t\tpattern: /[\\s\\S]/,\n\t\t\t\t\talias: /\\w+/.exec(name)[0]\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t});\n\n\t// make prefixes available to Diff plugin\n\tObject.defineProperty(Prism.languages.diff, 'PREFIXES', {\n\t\tvalue: PREFIXES\n\t});\n\n}(Prism));\n/components/prism-ignore.js\u0002\u0005(function (Prism) {\n\tPrism.languages.ignore = {\n\t\t// https://git-scm.com/docs/gitignore\n\t\t'comment': /^#.*/m,\n\t\t'entry': {\n\t\t\tpattern: /\\S(?:.*(?:(?:\\\\ )|\\S))?/,\n\t\t\talias: 'string',\n\t\t\tinside: {\n\t\t\t\t'operator': /^!|\\*\\*?|\\?/,\n\t\t\t\t'regex': {\n\t\t\t\t\tpattern: /(^|[^\\\\])\\[[^\\[\\]]*\\]/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t},\n\t\t\t\t'punctuation': /\\//\n\t\t\t}\n\t\t}\n\t};\n\n\tPrism.languages.gitignore = Prism.languages.ignore;\n\tPrism.languages.hgignore = Prism.languages.ignore;\n\tPrism.languages.npmignore = Prism.languages.ignore;\n\n}(Prism));\n/components/prism-apl.min.js\u0003\u0006Prism.languages.apl={comment:/(?:⍝|#[! ]).*$/m,string:{pattern:/'(?:[^'\\r\\n]|'')*'/,greedy:!0},number:/¯?(?:\\d*\\.?\\b\\d+(?:e[+¯]?\\d+)?|¯|∞)(?:j¯?(?:(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:e[+¯]?\\d+)?|¯|∞))?/i,statement:/:[A-Z][a-z][A-Za-z]*\\b/,\"system-function\":{pattern:/⎕[A-Z]+/i,alias:\"function\"},constant:/[⍬⌾#⎕⍞]/,function:/[-+×÷⌈⌊∣|⍳⍸?*⍟○!⌹<≤=>≥≠≡≢∊⍷∪∩~∨∧⍱⍲⍴,⍪⌽⊖⍉↑↓⊂⊃⊆⊇⌷⍋⍒⊤⊥⍕⍎⊣⊢⍁⍂≈⍯↗¤→]/,\"monadic-operator\":{pattern:/[\\\\\\/⌿⍀¨⍨⌶&∥]/,alias:\"operator\"},\"dyadic-operator\":{pattern:/[.⍣⍠⍤∘⌸@⌺⍥]/,alias:\"operator\"},assignment:{pattern:/←/,alias:\"keyword\"},punctuation:/[\\[;\\]()◇⋄]/,dfn:{pattern:/[{}⍺⍵⍶⍹∇⍫:]/,alias:\"builtin\"}};#/components/prism-splunk-spl.min.js\u0006Prism.languages[\"splunk-spl\"]={comment:/`comment\\(\"(?:\\\\.|[^\\\\\"])*\"\\)`/,string:{pattern:/\"(?:\\\\.|[^\\\\\"])*\"/,greedy:!0},keyword:/\\b(?:abstract|accum|addcoltotals|addinfo|addtotals|analyzefields|anomalies|anomalousvalue|anomalydetection|append|appendcols|appendcsv|appendlookup|appendpipe|arules|associate|audit|autoregress|bin|bucket|bucketdir|chart|cluster|cofilter|collect|concurrency|contingency|convert|correlate|datamodel|dbinspect|dedup|delete|delta|diff|erex|eval|eventcount|eventstats|extract|fieldformat|fields|fieldsummary|filldown|fillnull|findtypes|folderize|foreach|format|from|gauge|gentimes|geom|geomfilter|geostats|head|highlight|history|iconify|input|inputcsv|inputlookup|iplocation|join|kmeans|kv|kvform|loadjob|localize|localop|lookup|makecontinuous|makemv|makeresults|map|mcollect|metadata|metasearch|meventcollect|mstats|multikv|multisearch|mvcombine|mvexpand|nomv|outlier|outputcsv|outputlookup|outputtext|overlap|pivot|predict|rangemap|rare|regex|relevancy|reltime|rename|replace|rest|return|reverse|rex|rtorder|run|savedsearch|script|scrub|search|searchtxn|selfjoin|sendemail|set|setfields|sichart|sirare|sistats|sitimechart|sitop|sort|spath|stats|strcat|streamstats|table|tags|tail|timechart|timewrap|top|transaction|transpose|trendline|tscollect|tstats|typeahead|typelearner|typer|union|uniq|untable|where|x11|xmlkv|xmlunescape|xpath|xyseries)\\b/i,\"operator-word\":{pattern:/\\b(?:and|as|by|not|or|xor)\\b/i,alias:\"operator\"},function:/\\b\\w+(?=\\s*\\()/,property:/\\b\\w+(?=\\s*=(?!=))/,date:{pattern:/\\b\\d{1,2}\\/\\d{1,2}\\/\\d{1,4}(?:(?::\\d{1,2}){3})?\\b/,alias:\"number\"},number:/\\b\\d+(?:\\.\\d+)?\\b/,boolean:/\\b(?:f|false|t|true)\\b/i,operator:/[<>=]=?|[-+*/%|]/,punctuation:/[()[\\],]/};!/components/prism-openqasm.min.js\u0003\u001bPrism.languages.openqasm={comment:/\\/\\*[\\s\\S]*?\\*\\/|\\/\\/.*/,string:{pattern:/\"[^\"\\r\\n\\t]*\"|'[^'\\r\\n\\t]*'/,greedy:!0},keyword:/\\b(?:CX|OPENQASM|U|barrier|boxas|boxto|break|const|continue|ctrl|def|defcal|defcalgrammar|delay|else|end|for|gate|gphase|if|in|include|inv|kernel|lengthof|let|measure|pow|reset|return|rotary|stretchinf|while)\\b|#pragma\\b/,\"class-name\":/\\b(?:angle|bit|bool|creg|fixed|float|int|length|qreg|qubit|stretch|uint)\\b/,function:/\\b(?:cos|exp|ln|popcount|rotl|rotr|sin|sqrt|tan)\\b(?=\\s*\\()/,constant:/\\b(?:euler|pi|tau)\\b|π|𝜏|ℇ/,number:{pattern:/(^|[^.\\w$])(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?(?:dt|ns|us|µs|ms|s)?/i,lookbehind:!0},operator:/->|>>=?|<<=?|&&|\\|\\||\\+\\+|--|[!=<>&|~^+\\-*/%]=?|@/,punctuation:/[(){}\\[\\];,:.]/},Prism.languages.qasm=Prism.languages.openqasm;/components/prism-zig.js\u000e(function (Prism) {\n\n\tfunction literal(str) {\n\t\treturn function () { return str; };\n\t}\n\n\tvar keyword = /\\b(?:align|allowzero|and|anyframe|anytype|asm|async|await|break|cancel|catch|comptime|const|continue|defer|else|enum|errdefer|error|export|extern|fn|for|if|inline|linksection|nakedcc|noalias|nosuspend|null|or|orelse|packed|promise|pub|resume|return|stdcallcc|struct|suspend|switch|test|threadlocal|try|undefined|union|unreachable|usingnamespace|var|volatile|while)\\b/;\n\n\tvar IDENTIFIER = '\\\\b(?!' + keyword.source + ')(?!\\\\d)\\\\w+\\\\b';\n\tvar ALIGN = /align\\s*\\((?:[^()]|\\([^()]*\\))*\\)/.source;\n\tvar PREFIX_TYPE_OP = /(?:\\?|\\bpromise->|(?:\\[[^[\\]]*\\]|\\*(?!\\*)|\\*\\*)(?:\\s*<ALIGN>|\\s*const\\b|\\s*volatile\\b|\\s*allowzero\\b)*)/.source.replace(/<ALIGN>/g, literal(ALIGN));\n\tvar SUFFIX_EXPR = /(?:\\bpromise\\b|(?:\\berror\\.)?<ID>(?:\\.<ID>)*(?!\\s+<ID>))/.source.replace(/<ID>/g, literal(IDENTIFIER));\n\tvar TYPE = '(?!\\\\s)(?:!?\\\\s*(?:' + PREFIX_TYPE_OP + '\\\\s*)*' + SUFFIX_EXPR + ')+';\n\n\t/*\n\t * A simplified grammar for Zig compile time type literals:\n\t *\n\t * TypeExpr = ( \"!\"? PREFIX_TYPE_OP* SUFFIX_EXPR )+\n\t *\n\t * SUFFIX_EXPR = ( \\b \"promise\" \\b | ( \\b \"error\" \".\" )? IDENTIFIER ( \".\" IDENTIFIER )* (?! \\s+ IDENTIFIER ) )\n\t *\n\t * PREFIX_TYPE_OP = \"?\"\n\t *                | \\b \"promise\" \"->\"\n\t *                | ( \"[\" [^\\[\\]]* \"]\" | \"*\" | \"**\" ) ( ALIGN | \"const\" \\b | \"volatile\" \\b | \"allowzero\" \\b )*\n\t *\n\t * ALIGN = \"align\" \"(\" ( [^()] | \"(\" [^()]* \")\" )* \")\"\n\t *\n\t * IDENTIFIER = \\b (?! KEYWORD ) [a-zA-Z_] \\w* \\b\n\t *\n\t*/\n\n\tPrism.languages.zig = {\n\t\t'comment': [\n\t\t\t{\n\t\t\t\tpattern: /\\/\\/[/!].*/,\n\t\t\t\talias: 'doc-comment'\n\t\t\t},\n\t\t\t/\\/{2}.*/\n\t\t],\n\t\t'string': [\n\t\t\t{\n\t\t\t\t// \"string\" and c\"string\"\n\t\t\t\tpattern: /(^|[^\\\\@])c?\"(?:[^\"\\\\\\r\\n]|\\\\.)*\"/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true\n\t\t\t},\n\t\t\t{\n\t\t\t\t// multiline strings and c-strings\n\t\t\t\tpattern: /([\\r\\n])([ \\t]+c?\\\\{2}).*(?:(?:\\r\\n?|\\n)\\2.*)*/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true\n\t\t\t}\n\t\t],\n\t\t'char': {\n\t\t\t// characters 'a', '\\n', '\\xFF', '\\u{10FFFF}'\n\t\t\tpattern: /(^|[^\\\\])'(?:[^'\\\\\\r\\n]|[\\uD800-\\uDFFF]{2}|\\\\(?:.|x[a-fA-F\\d]{2}|u\\{[a-fA-F\\d]{1,6}\\}))'/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true\n\t\t},\n\t\t'builtin': /\\B@(?!\\d)\\w+(?=\\s*\\()/,\n\t\t'label': {\n\t\t\tpattern: /(\\b(?:break|continue)\\s*:\\s*)\\w+\\b|\\b(?!\\d)\\w+\\b(?=\\s*:\\s*(?:\\{|while\\b))/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'class-name': [\n\t\t\t// const Foo = struct {};\n\t\t\t/\\b(?!\\d)\\w+(?=\\s*=\\s*(?:(?:extern|packed)\\s+)?(?:enum|struct|union)\\s*[({])/,\n\t\t\t{\n\t\t\t\t// const x: i32 = 9;\n\t\t\t\t// var x: Bar;\n\t\t\t\t// fn foo(x: bool, y: f32) void {}\n\t\t\t\tpattern: RegExp(/(:\\s*)<TYPE>(?=\\s*(?:<ALIGN>\\s*)?[=;,)])|<TYPE>(?=\\s*(?:<ALIGN>\\s*)?\\{)/.source.replace(/<TYPE>/g, literal(TYPE)).replace(/<ALIGN>/g, literal(ALIGN))),\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: null // see below\n\t\t\t},\n\t\t\t{\n\t\t\t\t// extern fn foo(x: f64) f64; (optional alignment)\n\t\t\t\tpattern: RegExp(/(\\)\\s*)<TYPE>(?=\\s*(?:<ALIGN>\\s*)?;)/.source.replace(/<TYPE>/g, literal(TYPE)).replace(/<ALIGN>/g, literal(ALIGN))),\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: null // see below\n\t\t\t}\n\t\t],\n\t\t'builtin-type': {\n\t\t\tpattern: /\\b(?:anyerror|bool|c_u?(?:int|long|longlong|short)|c_longdouble|c_void|comptime_(?:float|int)|f(?:16|32|64|128)|[iu](?:8|16|32|64|128|size)|noreturn|type|void)\\b/,\n\t\t\talias: 'keyword'\n\t\t},\n\t\t'keyword': keyword,\n\t\t'function': /\\b(?!\\d)\\w+(?=\\s*\\()/,\n\t\t'number': /\\b(?:0b[01]+|0o[0-7]+|0x[a-fA-F\\d]+(?:\\.[a-fA-F\\d]*)?(?:[pP][+-]?[a-fA-F\\d]+)?|\\d+(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)\\b/,\n\t\t'boolean': /\\b(?:false|true)\\b/,\n\t\t'operator': /\\.[*?]|\\.{2,3}|[-=]>|\\*\\*|\\+\\+|\\|\\||(?:<<|>>|[-+*]%|[-+*/%^&|<>!=])=?|[?~]/,\n\t\t'punctuation': /[.:,;(){}[\\]]/\n\t};\n\n\tPrism.languages.zig['class-name'].forEach(function (obj) {\n\t\tif (obj.inside === null) {\n\t\t\tobj.inside = Prism.languages.zig;\n\t\t}\n\t});\n\n}(Prism));\n/components/prism-pure.js\u0011\r(function (Prism) {\n\t// https://agraef.github.io/pure-docs/pure.html#lexical-matters\n\n\tPrism.languages.pure = {\n\t\t'comment': [\n\t\t\t{\n\t\t\t\tpattern: /(^|[^\\\\])\\/\\*[\\s\\S]*?\\*\\//,\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /(^|[^\\\\:])\\/\\/.*/,\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\t/#!.+/\n\t\t],\n\t\t'inline-lang': {\n\t\t\tpattern: /%<[\\s\\S]+?%>/,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'lang': {\n\t\t\t\t\tpattern: /(^%< *)-\\*-.+?-\\*-/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\talias: 'comment'\n\t\t\t\t},\n\t\t\t\t'delimiter': {\n\t\t\t\t\tpattern: /^%<.*|%>$/,\n\t\t\t\t\talias: 'punctuation'\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t'string': {\n\t\t\tpattern: /\"(?:\\\\.|[^\"\\\\\\r\\n])*\"/,\n\t\t\tgreedy: true\n\t\t},\n\t\t'number': {\n\t\t\t// The look-behind prevents wrong highlighting of the .. operator\n\t\t\tpattern: /((?:\\.\\.)?)(?:\\b(?:inf|nan)\\b|\\b0x[\\da-f]+|(?:\\b(?:0b)?\\d+(?:\\.\\d+)?|\\B\\.\\d+)(?:e[+-]?\\d+)?L?)/i,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'keyword': /\\b(?:NULL|ans|break|bt|case|catch|cd|clear|const|def|del|dump|else|end|exit|extern|false|force|help|if|infix[lr]?|interface|let|ls|mem|namespace|nonfix|of|otherwise|outfix|override|postfix|prefix|private|public|pwd|quit|run|save|show|stats|then|throw|trace|true|type|underride|using|when|with)\\b/,\n\t\t'function': /\\b(?:abs|add_(?:addr|constdef|(?:fundef|interface|macdef|typedef)(?:_at)?|vardef)|all|any|applp?|arity|bigintp?|blob(?:_crc|_size|p)?|boolp?|byte_c?string(?:_pointer)?|byte_(?:matrix|pointer)|calloc|cat|catmap|ceil|char[ps]?|check_ptrtag|chr|clear_sentry|clearsym|closurep?|cmatrixp?|cols?|colcat(?:map)?|colmap|colrev|colvector(?:p|seq)?|complex(?:_float_(?:matrix|pointer)|_matrix(?:_view)?|_pointer|p)?|conj|cookedp?|cst|cstring(?:_(?:dup|list|vector))?|curry3?|cyclen?|del_(?:constdef|fundef|interface|macdef|typedef|vardef)|delete|diag(?:mat)?|dim|dmatrixp?|do|double(?:_matrix(?:_view)?|_pointer|p)?|dowith3?|drop|dropwhile|eval(?:cmd)?|exactp|filter|fix|fixity|flip|float(?:_matrix|_pointer)|floor|fold[lr]1?|frac|free|funp?|functionp?|gcd|get(?:_(?:byte|constdef|double|float|fundef|int(?:64)?|interface(?:_typedef)?|long|macdef|pointer|ptrtag|sentry|short|string|typedef|vardef))?|globsym|hash|head|id|im|imatrixp?|index|inexactp|infp|init|insert|int(?:_matrix(?:_view)?|_pointer|p)?|int64_(?:matrix|pointer)|integerp?|iteraten?|iterwhile|join|keys?|lambdap?|last(?:err(?:pos)?)?|lcd|list[2p]?|listmap|make_ptrtag|malloc|map|matcat|matrixp?|max|member|min|nanp|nargs|nmatrixp?|null|numberp?|ord|pack(?:ed)?|pointer(?:_cast|_tag|_type|p)?|pow|pred|ptrtag|put(?:_(?:byte|double|float|int(?:64)?|long|pointer|short|string))?|rationalp?|re|realp?|realloc|recordp?|redim|reduce(?:_with)?|refp?|repeatn?|reverse|rlistp?|round|rows?|rowcat(?:map)?|rowmap|rowrev|rowvector(?:p|seq)?|same|scan[lr]1?|sentry|sgn|short_(?:matrix|pointer)|slice|smatrixp?|sort|split|str|strcat|stream|stride|string(?:_(?:dup|list|vector)|p)?|subdiag(?:mat)?|submat|subseq2?|substr|succ|supdiag(?:mat)?|symbolp?|tail|take|takewhile|thunkp?|transpose|trunc|tuplep?|typep|ubyte|uint(?:64)?|ulong|uncurry3?|unref|unzip3?|update|ushort|vals?|varp?|vector(?:p|seq)?|void|zip3?|zipwith3?)\\b/,\n\t\t'special': {\n\t\t\tpattern: /\\b__[a-z]+__\\b/i,\n\t\t\talias: 'builtin'\n\t\t},\n\t\t// Any combination of operator chars can be an operator\n\t\t// eslint-disable-next-line no-misleading-character-class\n\t\t'operator': /(?:[!\"#$%&'*+,\\-.\\/:<=>?@\\\\^`|~\\u00a1-\\u00bf\\u00d7-\\u00f7\\u20d0-\\u2bff]|\\b_+\\b)+|\\b(?:and|div|mod|not|or)\\b/,\n\t\t// FIXME: How can we prevent | and , to be highlighted as operator when they are used alone?\n\t\t'punctuation': /[(){}\\[\\];,|]/\n\t};\n\n\tvar inlineLanguages = [\n\t\t'c',\n\t\t{ lang: 'c++', alias: 'cpp' },\n\t\t'fortran'\n\t];\n\tvar inlineLanguageRe = /%< *-\\*- *<lang>\\d* *-\\*-[\\s\\S]+?%>/.source;\n\n\tinlineLanguages.forEach(function (lang) {\n\t\tvar alias = lang;\n\t\tif (typeof lang !== 'string') {\n\t\t\talias = lang.alias;\n\t\t\tlang = lang.lang;\n\t\t}\n\t\tif (Prism.languages[alias]) {\n\t\t\tvar o = {};\n\t\t\to['inline-lang-' + alias] = {\n\t\t\t\tpattern: RegExp(inlineLanguageRe.replace('<lang>', lang.replace(/([.+*?\\/\\\\(){}\\[\\]])/g, '\\\\$1')), 'i'),\n\t\t\t\tinside: Prism.util.clone(Prism.languages.pure['inline-lang'].inside)\n\t\t\t};\n\t\t\to['inline-lang-' + alias].inside.rest = Prism.util.clone(Prism.languages[alias]);\n\t\t\tPrism.languages.insertBefore('pure', 'inline-lang', o);\n\t\t}\n\t});\n\n\t// C is the default inline language\n\tif (Prism.languages.c) {\n\t\tPrism.languages.pure['inline-lang'].inside.rest = Prism.util.clone(Prism.languages.c);\n\t}\n\n}(Prism));\n/components/prism-yang.js\u0001Prism.languages.yang = {\n\t// https://tools.ietf.org/html/rfc6020#page-34\n\t// http://www.yang-central.org/twiki/bin/view/Main/YangExamples\n\t'comment': /\\/\\*[\\s\\S]*?\\*\\/|\\/\\/.*/,\n\t'string': {\n\t\tpattern: /\"(?:[^\\\\\"]|\\\\.)*\"|'[^']*'/,\n\t\tgreedy: true\n\t},\n\t'keyword': {\n\t\tpattern: /(^|[{};\\r\\n][ \\t]*)[a-z_][\\w.-]*/i,\n\t\tlookbehind: true\n\t},\n\t'namespace': {\n\t\tpattern: /(\\s)[a-z_][\\w.-]*(?=:)/i,\n\t\tlookbehind: true\n\t},\n\t'boolean': /\\b(?:false|true)\\b/,\n\t'operator': /\\+/,\n\t'punctuation': /[{};:]/\n};\n/components/prism-mel.js\u00047Prism.languages.mel = {\n\t'comment': {\n\t\tpattern: /\\/\\/.*|\\/\\*[\\s\\S]*?\\*\\//,\n\t\tgreedy: true\n\t},\n\t'code': {\n\t\tpattern: /`(?:\\\\.|[^\\\\`])*`/,\n\t\tgreedy: true,\n\t\talias: 'italic',\n\t\tinside: {\n\t\t\t'delimiter': {\n\t\t\t\tpattern: /^`|`$/,\n\t\t\t\talias: 'punctuation'\n\t\t\t},\n\t\t\t'statement': {\n\t\t\t\tpattern: /[\\s\\S]+/,\n\t\t\t\tinside: null // see below\n\t\t\t}\n\t\t}\n\t},\n\t'string': {\n\t\tpattern: /\"(?:\\\\.|[^\\\\\"\\r\\n])*\"/,\n\t\tgreedy: true\n\t},\n\t'variable': /\\$\\w+/,\n\t'number': /\\b0x[\\da-fA-F]+\\b|\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+/,\n\t'flag': {\n\t\tpattern: /-[^\\d\\W]\\w*/,\n\t\talias: 'operator'\n\t},\n\t'keyword': /\\b(?:break|case|continue|default|do|else|float|for|global|if|in|int|matrix|proc|return|string|switch|vector|while)\\b/,\n\t'function': {\n\t\tpattern: /((?:^|[{;])[ \\t]*)[a-z_]\\w*\\b(?!\\s*(?:\\.(?!\\.)|[[{=]))|\\b[a-z_]\\w*(?=[ \\t]*\\()/im,\n\t\tlookbehind: true,\n\t\tgreedy: true\n\t},\n\n\t'tensor-punctuation': {\n\t\tpattern: /<<|>>/,\n\t\talias: 'punctuation'\n\t},\n\t'operator': /\\+[+=]?|-[-=]?|&&|\\|\\||[<>]=?|[*\\/!=]=?|[%^]/,\n\t'punctuation': /[.,:;?\\[\\](){}]/\n};\n\nPrism.languages.mel['code'].inside['statement'].inside = Prism.languages.mel;\n/components/prism-apex.min.js\b\u001f!function(e){var t=/\\b(?:(?:after|before)(?=\\s+[a-z])|abstract|activate|and|any|array|as|asc|autonomous|begin|bigdecimal|blob|boolean|break|bulk|by|byte|case|cast|catch|char|class|collect|commit|const|continue|currency|date|datetime|decimal|default|delete|desc|do|double|else|end|enum|exception|exit|export|extends|final|finally|float|for|from|get(?=\\s*[{};])|global|goto|group|having|hint|if|implements|import|in|inner|insert|instanceof|int|integer|interface|into|join|like|limit|list|long|loop|map|merge|new|not|null|nulls|number|object|of|on|or|outer|override|package|parallel|pragma|private|protected|public|retrieve|return|rollback|select|set|short|sObject|sort|static|string|super|switch|synchronized|system|testmethod|then|this|throw|time|transaction|transient|trigger|try|undelete|update|upsert|using|virtual|void|webservice|when|where|while|(?:inherited|with|without)\\s+sharing)\\b/i,n=\"\\\\b(?:(?=[a-z_]\\\\w*\\\\s*[<\\\\[])|(?!<keyword>))[A-Z_]\\\\w*(?:\\\\s*\\\\.\\\\s*[A-Z_]\\\\w*)*\\\\b(?:\\\\s*(?:\\\\[\\\\s*\\\\]|<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>))*\".replace(/<keyword>/g,(function(){return t.source}));function i(e){return RegExp(e.replace(/<CLASS-NAME>/g,(function(){return n})),\"i\")}var a={keyword:t,punctuation:/[()\\[\\]{};,:.<>]/};e.languages.apex={comment:e.languages.clike.comment,string:e.languages.clike.string,sql:{pattern:/((?:[=,({:]|\\breturn)\\s*)\\[[^\\[\\]]*\\]/i,lookbehind:!0,greedy:!0,alias:\"language-sql\",inside:e.languages.sql},annotation:{pattern:/@\\w+\\b/,alias:\"punctuation\"},\"class-name\":[{pattern:i(\"(\\\\b(?:class|enum|extends|implements|instanceof|interface|new|trigger\\\\s+\\\\w+\\\\s+on)\\\\s+)<CLASS-NAME>\"),lookbehind:!0,inside:a},{pattern:i(\"(\\\\(\\\\s*)<CLASS-NAME>(?=\\\\s*\\\\)\\\\s*[\\\\w(])\"),lookbehind:!0,inside:a},{pattern:i(\"<CLASS-NAME>(?=\\\\s*\\\\w+\\\\s*[;=,(){:])\"),inside:a}],trigger:{pattern:/(\\btrigger\\s+)\\w+\\b/i,lookbehind:!0,alias:\"class-name\"},keyword:t,function:/\\b[a-z_]\\w*(?=\\s*\\()/i,boolean:/\\b(?:false|true)\\b/i,number:/(?:\\B\\.\\d+|\\b\\d+(?:\\.\\d+|L)?)\\b/i,operator:/[!=](?:==?)?|\\?\\.?|&&|\\|\\||--|\\+\\+|[-+*/^&|]=?|:|<<?=?|>{1,3}=?/,punctuation:/[()\\[\\]{};,.]/}}(Prism);/components/prism-velocity.js\u0006(function (Prism) {\n\tPrism.languages.velocity = Prism.languages.extend('markup', {});\n\n\tvar velocity = {\n\t\t'variable': {\n\t\t\tpattern: /(^|[^\\\\](?:\\\\\\\\)*)\\$!?(?:[a-z][\\w-]*(?:\\([^)]*\\))?(?:\\.[a-z][\\w-]*(?:\\([^)]*\\))?|\\[[^\\]]+\\])*|\\{[^}]+\\})/i,\n\t\t\tlookbehind: true,\n\t\t\tinside: {} // See below\n\t\t},\n\t\t'string': {\n\t\t\tpattern: /\"[^\"]*\"|'[^']*'/,\n\t\t\tgreedy: true\n\t\t},\n\t\t'number': /\\b\\d+\\b/,\n\t\t'boolean': /\\b(?:false|true)\\b/,\n\t\t'operator': /[=!<>]=?|[+*/%-]|&&|\\|\\||\\.\\.|\\b(?:eq|g[et]|l[et]|n(?:e|ot))\\b/,\n\t\t'punctuation': /[(){}[\\]:,.]/\n\t};\n\n\tvelocity.variable.inside = {\n\t\t'string': velocity['string'],\n\t\t'function': {\n\t\t\tpattern: /([^\\w-])[a-z][\\w-]*(?=\\()/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'number': velocity['number'],\n\t\t'boolean': velocity['boolean'],\n\t\t'punctuation': velocity['punctuation']\n\t};\n\n\tPrism.languages.insertBefore('velocity', 'comment', {\n\t\t'unparsed': {\n\t\t\tpattern: /(^|[^\\\\])#\\[\\[[\\s\\S]*?\\]\\]#/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'punctuation': /^#\\[\\[|\\]\\]#$/\n\t\t\t}\n\t\t},\n\t\t'velocity-comment': [\n\t\t\t{\n\t\t\t\tpattern: /(^|[^\\\\])#\\*[\\s\\S]*?\\*#/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true,\n\t\t\t\talias: 'comment'\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /(^|[^\\\\])##.*/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true,\n\t\t\t\talias: 'comment'\n\t\t\t}\n\t\t],\n\t\t'directive': {\n\t\t\tpattern: /(^|[^\\\\](?:\\\\\\\\)*)#@?(?:[a-z][\\w-]*|\\{[a-z][\\w-]*\\})(?:\\s*\\((?:[^()]|\\([^()]*\\))*\\))?/i,\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'keyword': {\n\t\t\t\t\tpattern: /^#@?(?:[a-z][\\w-]*|\\{[a-z][\\w-]*\\})|\\bin\\b/,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'punctuation': /[{}]/\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\trest: velocity\n\t\t\t}\n\t\t},\n\t\t'variable': velocity['variable']\n\t});\n\n\tPrism.languages.velocity['tag'].inside['attr-value'].inside.rest = Prism.languages.velocity;\n\n}(Prism));\n/components/prism-gn.js\u0005// https://gn.googlesource.com/gn/+/refs/heads/main/docs/reference.md#grammar\n\nPrism.languages.gn = {\n\t'comment': {\n\t\tpattern: /#.*/,\n\t\tgreedy: true\n\t},\n\t'string-literal': {\n\t\tpattern: /(^|[^\\\\\"])\"(?:[^\\r\\n\"\\\\]|\\\\.)*\"/,\n\t\tlookbehind: true,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'interpolation': {\n\t\t\t\tpattern: /((?:^|[^\\\\])(?:\\\\{2})*)\\$(?:\\{[\\s\\S]*?\\}|[a-zA-Z_]\\w*|0x[a-fA-F0-9]{2})/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'number': /^\\$0x[\\s\\S]{2}$/,\n\t\t\t\t\t'variable': /^\\$\\w+$/,\n\t\t\t\t\t'interpolation-punctuation': {\n\t\t\t\t\t\tpattern: /^\\$\\{|\\}$/,\n\t\t\t\t\t\talias: 'punctuation'\n\t\t\t\t\t},\n\t\t\t\t\t'expression': {\n\t\t\t\t\t\tpattern: /[\\s\\S]+/,\n\t\t\t\t\t\tinside: null // see below\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t'string': /[\\s\\S]+/\n\t\t}\n\t},\n\n\t'keyword': /\\b(?:else|if)\\b/,\n\t'boolean': /\\b(?:false|true)\\b/,\n\t'builtin-function': {\n\t\t// a few functions get special highlighting to improve readability\n\t\tpattern: /\\b(?:assert|defined|foreach|import|pool|print|template|tool|toolchain)(?=\\s*\\()/i,\n\t\talias: 'keyword'\n\t},\n\t'function': /\\b[a-z_]\\w*(?=\\s*\\()/i,\n\t'constant': /\\b(?:current_cpu|current_os|current_toolchain|default_toolchain|host_cpu|host_os|root_build_dir|root_gen_dir|root_out_dir|target_cpu|target_gen_dir|target_os|target_out_dir)\\b/,\n\n\t'number': /-?\\b\\d+\\b/,\n\n\t'operator': /[-+!=<>]=?|&&|\\|\\|/,\n\t'punctuation': /[(){}[\\],.]/\n};\n\nPrism.languages.gn['string-literal'].inside['interpolation'].inside['expression'].inside = Prism.languages.gn;\n\nPrism.languages.gni = Prism.languages.gn;\n/components/prism-core.jsŖ\t/// <reference lib=\"WebWorker\"/>\n\nvar _self = (typeof window !== 'undefined')\n\t? window   // if in browser\n\t: (\n\t\t(typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope)\n\t\t\t? self // if in worker\n\t\t\t: {}   // if in node js\n\t);\n\n/**\n * Prism: Lightweight, robust, elegant syntax highlighting\n *\n * @license MIT <https://opensource.org/licenses/MIT>\n * @author Lea Verou <https://lea.verou.me>\n * @namespace\n * @public\n */\nvar Prism = (function (_self) {\n\n\t// Private helper vars\n\tvar lang = /(?:^|\\s)lang(?:uage)?-([\\w-]+)(?=\\s|$)/i;\n\tvar uniqueId = 0;\n\n\t// The grammar object for plaintext\n\tvar plainTextGrammar = {};\n\n\n\tvar _ = {\n\t\t/**\n\t\t * By default, Prism will attempt to highlight all code elements (by calling {@link Prism.highlightAll}) on the\n\t\t * current page after the page finished loading. This might be a problem if e.g. you wanted to asynchronously load\n\t\t * additional languages or plugins yourself.\n\t\t *\n\t\t * By setting this value to `true`, Prism will not automatically highlight all code elements on the page.\n\t\t *\n\t\t * You obviously have to change this value before the automatic highlighting started. To do this, you can add an\n\t\t * empty Prism object into the global scope before loading the Prism script like this:\n\t\t *\n\t\t * ```js\n\t\t * window.Prism = window.Prism || {};\n\t\t * Prism.manual = true;\n\t\t * // add a new <script> to load Prism's script\n\t\t * ```\n\t\t *\n\t\t * @default false\n\t\t * @type {boolean}\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\tmanual: _self.Prism && _self.Prism.manual,\n\t\t/**\n\t\t * By default, if Prism is in a web worker, it assumes that it is in a worker it created itself, so it uses\n\t\t * `addEventListener` to communicate with its parent instance. However, if you're using Prism manually in your\n\t\t * own worker, you don't want it to do this.\n\t\t *\n\t\t * By setting this value to `true`, Prism will not add its own listeners to the worker.\n\t\t *\n\t\t * You obviously have to change this value before Prism executes. To do this, you can add an\n\t\t * empty Prism object into the global scope before loading the Prism script like this:\n\t\t *\n\t\t * ```js\n\t\t * window.Prism = window.Prism || {};\n\t\t * Prism.disableWorkerMessageHandler = true;\n\t\t * // Load Prism's script\n\t\t * ```\n\t\t *\n\t\t * @default false\n\t\t * @type {boolean}\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\tdisableWorkerMessageHandler: _self.Prism && _self.Prism.disableWorkerMessageHandler,\n\n\t\t/**\n\t\t * A namespace for utility methods.\n\t\t *\n\t\t * All function in this namespace that are not explicitly marked as _public_ are for __internal use only__ and may\n\t\t * change or disappear at any time.\n\t\t *\n\t\t * @namespace\n\t\t * @memberof Prism\n\t\t */\n\t\tutil: {\n\t\t\tencode: function encode(tokens) {\n\t\t\t\tif (tokens instanceof Token) {\n\t\t\t\t\treturn new Token(tokens.type, encode(tokens.content), tokens.alias);\n\t\t\t\t} else if (Array.isArray(tokens)) {\n\t\t\t\t\treturn tokens.map(encode);\n\t\t\t\t} else {\n\t\t\t\t\treturn tokens.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/\\u00a0/g, ' ');\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns the name of the type of the given value.\n\t\t\t *\n\t\t\t * @param {any} o\n\t\t\t * @returns {string}\n\t\t\t * @example\n\t\t\t * type(null)      === 'Null'\n\t\t\t * type(undefined) === 'Undefined'\n\t\t\t * type(123)       === 'Number'\n\t\t\t * type('foo')     === 'String'\n\t\t\t * type(true)      === 'Boolean'\n\t\t\t * type([1, 2])    === 'Array'\n\t\t\t * type({})        === 'Object'\n\t\t\t * type(String)    === 'Function'\n\t\t\t * type(/abc+/)    === 'RegExp'\n\t\t\t */\n\t\t\ttype: function (o) {\n\t\t\t\treturn Object.prototype.toString.call(o).slice(8, -1);\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns a unique number for the given object. Later calls will still return the same number.\n\t\t\t *\n\t\t\t * @param {Object} obj\n\t\t\t * @returns {number}\n\t\t\t */\n\t\t\tobjId: function (obj) {\n\t\t\t\tif (!obj['__id']) {\n\t\t\t\t\tObject.defineProperty(obj, '__id', { value: ++uniqueId });\n\t\t\t\t}\n\t\t\t\treturn obj['__id'];\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Creates a deep clone of the given object.\n\t\t\t *\n\t\t\t * The main intended use of this function is to clone language definitions.\n\t\t\t *\n\t\t\t * @param {T} o\n\t\t\t * @param {Record<number, any>} [visited]\n\t\t\t * @returns {T}\n\t\t\t * @template T\n\t\t\t */\n\t\t\tclone: function deepClone(o, visited) {\n\t\t\t\tvisited = visited || {};\n\n\t\t\t\tvar clone; var id;\n\t\t\t\tswitch (_.util.type(o)) {\n\t\t\t\t\tcase 'Object':\n\t\t\t\t\t\tid = _.util.objId(o);\n\t\t\t\t\t\tif (visited[id]) {\n\t\t\t\t\t\t\treturn visited[id];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tclone = /** @type {Record<string, any>} */ ({});\n\t\t\t\t\t\tvisited[id] = clone;\n\n\t\t\t\t\t\tfor (var key in o) {\n\t\t\t\t\t\t\tif (o.hasOwnProperty(key)) {\n\t\t\t\t\t\t\t\tclone[key] = deepClone(o[key], visited);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn /** @type {any} */ (clone);\n\n\t\t\t\t\tcase 'Array':\n\t\t\t\t\t\tid = _.util.objId(o);\n\t\t\t\t\t\tif (visited[id]) {\n\t\t\t\t\t\t\treturn visited[id];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t\tvisited[id] = clone;\n\n\t\t\t\t\t\t(/** @type {Array} */(/** @type {any} */(o))).forEach(function (v, i) {\n\t\t\t\t\t\t\tclone[i] = deepClone(v, visited);\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\treturn /** @type {any} */ (clone);\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn o;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns the Prism language of the given element set by a `language-xxxx` or `lang-xxxx` class.\n\t\t\t *\n\t\t\t * If no language is set for the element or the element is `null` or `undefined`, `none` will be returned.\n\t\t\t *\n\t\t\t * @param {Element} element\n\t\t\t * @returns {string}\n\t\t\t */\n\t\t\tgetLanguage: function (element) {\n\t\t\t\twhile (element) {\n\t\t\t\t\tvar m = lang.exec(element.className);\n\t\t\t\t\tif (m) {\n\t\t\t\t\t\treturn m[1].toLowerCase();\n\t\t\t\t\t}\n\t\t\t\t\telement = element.parentElement;\n\t\t\t\t}\n\t\t\t\treturn 'none';\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Sets the Prism `language-xxxx` class of the given element.\n\t\t\t *\n\t\t\t * @param {Element} element\n\t\t\t * @param {string} language\n\t\t\t * @returns {void}\n\t\t\t */\n\t\t\tsetLanguage: function (element, language) {\n\t\t\t\t// remove all `language-xxxx` classes\n\t\t\t\t// (this might leave behind a leading space)\n\t\t\t\telement.className = element.className.replace(RegExp(lang, 'gi'), '');\n\n\t\t\t\t// add the new `language-xxxx` class\n\t\t\t\t// (using `classList` will automatically clean up spaces for us)\n\t\t\t\telement.classList.add('language-' + language);\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns the script element that is currently executing.\n\t\t\t *\n\t\t\t * This does __not__ work for line script element.\n\t\t\t *\n\t\t\t * @returns {HTMLScriptElement | null}\n\t\t\t */\n\t\t\tcurrentScript: function () {\n\t\t\t\tif (typeof document === 'undefined') {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\tif ('currentScript' in document && 1 < 2 /* hack to trip TS' flow analysis */) {\n\t\t\t\t\treturn /** @type {any} */ (document.currentScript);\n\t\t\t\t}\n\n\t\t\t\t// IE11 workaround\n\t\t\t\t// we'll get the src of the current script by parsing IE11's error stack trace\n\t\t\t\t// this will not work for inline scripts\n\n\t\t\t\ttry {\n\t\t\t\t\tthrow new Error();\n\t\t\t\t} catch (err) {\n\t\t\t\t\t// Get file src url from stack. Specifically works with the format of stack traces in IE.\n\t\t\t\t\t// A stack will look like this:\n\t\t\t\t\t//\n\t\t\t\t\t// Error\n\t\t\t\t\t//    at _.util.currentScript (http://localhost/components/prism-core.js:119:5)\n\t\t\t\t\t//    at Global code (http://localhost/components/prism-core.js:606:1)\n\n\t\t\t\t\tvar src = (/at [^(\\r\\n]*\\((.*):[^:]+:[^:]+\\)$/i.exec(err.stack) || [])[1];\n\t\t\t\t\tif (src) {\n\t\t\t\t\t\tvar scripts = document.getElementsByTagName('script');\n\t\t\t\t\t\tfor (var i in scripts) {\n\t\t\t\t\t\t\tif (scripts[i].src == src) {\n\t\t\t\t\t\t\t\treturn scripts[i];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns whether a given class is active for `element`.\n\t\t\t *\n\t\t\t * The class can be activated if `element` or one of its ancestors has the given class and it can be deactivated\n\t\t\t * if `element` or one of its ancestors has the negated version of the given class. The _negated version_ of the\n\t\t\t * given class is just the given class with a `no-` prefix.\n\t\t\t *\n\t\t\t * Whether the class is active is determined by the closest ancestor of `element` (where `element` itself is\n\t\t\t * closest ancestor) that has the given class or the negated version of it. If neither `element` nor any of its\n\t\t\t * ancestors have the given class or the negated version of it, then the default activation will be returned.\n\t\t\t *\n\t\t\t * In the paradoxical situation where the closest ancestor contains __both__ the given class and the negated\n\t\t\t * version of it, the class is considered active.\n\t\t\t *\n\t\t\t * @param {Element} element\n\t\t\t * @param {string} className\n\t\t\t * @param {boolean} [defaultActivation=false]\n\t\t\t * @returns {boolean}\n\t\t\t */\n\t\t\tisActive: function (element, className, defaultActivation) {\n\t\t\t\tvar no = 'no-' + className;\n\n\t\t\t\twhile (element) {\n\t\t\t\t\tvar classList = element.classList;\n\t\t\t\t\tif (classList.contains(className)) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\tif (classList.contains(no)) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\telement = element.parentElement;\n\t\t\t\t}\n\t\t\t\treturn !!defaultActivation;\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * This namespace contains all currently loaded languages and the some helper functions to create and modify languages.\n\t\t *\n\t\t * @namespace\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\tlanguages: {\n\t\t\t/**\n\t\t\t * The grammar for plain, unformatted text.\n\t\t\t */\n\t\t\tplain: plainTextGrammar,\n\t\t\tplaintext: plainTextGrammar,\n\t\t\ttext: plainTextGrammar,\n\t\t\ttxt: plainTextGrammar,\n\n\t\t\t/**\n\t\t\t * Creates a deep copy of the language with the given id and appends the given tokens.\n\t\t\t *\n\t\t\t * If a token in `redef` also appears in the copied language, then the existing token in the copied language\n\t\t\t * will be overwritten at its original position.\n\t\t\t *\n\t\t\t * ## Best practices\n\t\t\t *\n\t\t\t * Since the position of overwriting tokens (token in `redef` that overwrite tokens in the copied language)\n\t\t\t * doesn't matter, they can technically be in any order. However, this can be confusing to others that trying to\n\t\t\t * understand the language definition because, normally, the order of tokens matters in Prism grammars.\n\t\t\t *\n\t\t\t * Therefore, it is encouraged to order overwriting tokens according to the positions of the overwritten tokens.\n\t\t\t * Furthermore, all non-overwriting tokens should be placed after the overwriting ones.\n\t\t\t *\n\t\t\t * @param {string} id The id of the language to extend. This has to be a key in `Prism.languages`.\n\t\t\t * @param {Grammar} redef The new tokens to append.\n\t\t\t * @returns {Grammar} The new language created.\n\t\t\t * @public\n\t\t\t * @example\n\t\t\t * Prism.languages['css-with-colors'] = Prism.languages.extend('css', {\n\t\t\t *     // Prism.languages.css already has a 'comment' token, so this token will overwrite CSS' 'comment' token\n\t\t\t *     // at its original position\n\t\t\t *     'comment': { ... },\n\t\t\t *     // CSS doesn't have a 'color' token, so this token will be appended\n\t\t\t *     'color': /\\b(?:red|green|blue)\\b/\n\t\t\t * });\n\t\t\t */\n\t\t\textend: function (id, redef) {\n\t\t\t\tvar lang = _.util.clone(_.languages[id]);\n\n\t\t\t\tfor (var key in redef) {\n\t\t\t\t\tlang[key] = redef[key];\n\t\t\t\t}\n\n\t\t\t\treturn lang;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Inserts tokens _before_ another token in a language definition or any other grammar.\n\t\t\t *\n\t\t\t * ## Usage\n\t\t\t *\n\t\t\t * This helper method makes it easy to modify existing languages. For example, the CSS language definition\n\t\t\t * not only defines CSS highlighting for CSS documents, but also needs to define highlighting for CSS embedded\n\t\t\t * in HTML through `<style>` elements. To do this, it needs to modify `Prism.languages.markup` and add the\n\t\t\t * appropriate tokens. However, `Prism.languages.markup` is a regular JavaScript object literal, so if you do\n\t\t\t * this:\n\t\t\t *\n\t\t\t * ```js\n\t\t\t * Prism.languages.markup.style = {\n\t\t\t *     // token\n\t\t\t * };\n\t\t\t * ```\n\t\t\t *\n\t\t\t * then the `style` token will be added (and processed) at the end. `insertBefore` allows you to insert tokens\n\t\t\t * before existing tokens. For the CSS example above, you would use it like this:\n\t\t\t *\n\t\t\t * ```js\n\t\t\t * Prism.languages.insertBefore('markup', 'cdata', {\n\t\t\t *     'style': {\n\t\t\t *         // token\n\t\t\t *     }\n\t\t\t * });\n\t\t\t * ```\n\t\t\t *\n\t\t\t * ## Special cases\n\t\t\t *\n\t\t\t * If the grammars of `inside` and `insert` have tokens with the same name, the tokens in `inside`'s grammar\n\t\t\t * will be ignored.\n\t\t\t *\n\t\t\t * This behavior can be used to insert tokens after `before`:\n\t\t\t *\n\t\t\t * ```js\n\t\t\t * Prism.languages.insertBefore('markup', 'comment', {\n\t\t\t *     'comment': Prism.languages.markup.comment,\n\t\t\t *     // tokens after 'comment'\n\t\t\t * });\n\t\t\t * ```\n\t\t\t *\n\t\t\t * ## Limitations\n\t\t\t *\n\t\t\t * The main problem `insertBefore` has to solve is iteration order. Since ES2015, the iteration order for object\n\t\t\t * properties is guaranteed to be the insertion order (except for integer keys) but some browsers behave\n\t\t\t * differently when keys are deleted and re-inserted. So `insertBefore` can't be implemented by temporarily\n\t\t\t * deleting properties which is necessary to insert at arbitrary positions.\n\t\t\t *\n\t\t\t * To solve this problem, `insertBefore` doesn't actually insert the given tokens into the target object.\n\t\t\t * Instead, it will create a new object and replace all references to the target object with the new one. This\n\t\t\t * can be done without temporarily deleting properties, so the iteration order is well-defined.\n\t\t\t *\n\t\t\t * However, only references that can be reached from `Prism.languages` or `insert` will be replaced. I.e. if\n\t\t\t * you hold the target object in a variable, then the value of the variable will not change.\n\t\t\t *\n\t\t\t * ```js\n\t\t\t * var oldMarkup = Prism.languages.markup;\n\t\t\t * var newMarkup = Prism.languages.insertBefore('markup', 'comment', { ... });\n\t\t\t *\n\t\t\t * assert(oldMarkup !== Prism.languages.markup);\n\t\t\t * assert(newMarkup === Prism.languages.markup);\n\t\t\t * ```\n\t\t\t *\n\t\t\t * @param {string} inside The property of `root` (e.g. a language id in `Prism.languages`) that contains the\n\t\t\t * object to be modified.\n\t\t\t * @param {string} before The key to insert before.\n\t\t\t * @param {Grammar} insert An object containing the key-value pairs to be inserted.\n\t\t\t * @param {Object<string, any>} [root] The object containing `inside`, i.e. the object that contains the\n\t\t\t * object to be modified.\n\t\t\t *\n\t\t\t * Defaults to `Prism.languages`.\n\t\t\t * @returns {Grammar} The new grammar object.\n\t\t\t * @public\n\t\t\t */\n\t\t\tinsertBefore: function (inside, before, insert, root) {\n\t\t\t\troot = root || /** @type {any} */ (_.languages);\n\t\t\t\tvar grammar = root[inside];\n\t\t\t\t/** @type {Grammar} */\n\t\t\t\tvar ret = {};\n\n\t\t\t\tfor (var token in grammar) {\n\t\t\t\t\tif (grammar.hasOwnProperty(token)) {\n\n\t\t\t\t\t\tif (token == before) {\n\t\t\t\t\t\t\tfor (var newToken in insert) {\n\t\t\t\t\t\t\t\tif (insert.hasOwnProperty(newToken)) {\n\t\t\t\t\t\t\t\t\tret[newToken] = insert[newToken];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Do not insert token which also occur in insert. See #1525\n\t\t\t\t\t\tif (!insert.hasOwnProperty(token)) {\n\t\t\t\t\t\t\tret[token] = grammar[token];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tvar old = root[inside];\n\t\t\t\troot[inside] = ret;\n\n\t\t\t\t// Update references in other language definitions\n\t\t\t\t_.languages.DFS(_.languages, function (key, value) {\n\t\t\t\t\tif (value === old && key != inside) {\n\t\t\t\t\t\tthis[key] = ret;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\treturn ret;\n\t\t\t},\n\n\t\t\t// Traverse a language definition with Depth First Search\n\t\t\tDFS: function DFS(o, callback, type, visited) {\n\t\t\t\tvisited = visited || {};\n\n\t\t\t\tvar objId = _.util.objId;\n\n\t\t\t\tfor (var i in o) {\n\t\t\t\t\tif (o.hasOwnProperty(i)) {\n\t\t\t\t\t\tcallback.call(o, i, o[i], type || i);\n\n\t\t\t\t\t\tvar property = o[i];\n\t\t\t\t\t\tvar propertyType = _.util.type(property);\n\n\t\t\t\t\t\tif (propertyType === 'Object' && !visited[objId(property)]) {\n\t\t\t\t\t\t\tvisited[objId(property)] = true;\n\t\t\t\t\t\t\tDFS(property, callback, null, visited);\n\t\t\t\t\t\t} else if (propertyType === 'Array' && !visited[objId(property)]) {\n\t\t\t\t\t\t\tvisited[objId(property)] = true;\n\t\t\t\t\t\t\tDFS(property, callback, i, visited);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tplugins: {},\n\n\t\t/**\n\t\t * This is the most high-level function in Prism’s API.\n\t\t * It fetches all the elements that have a `.language-xxxx` class and then calls {@link Prism.highlightElement} on\n\t\t * each one of them.\n\t\t *\n\t\t * This is equivalent to `Prism.highlightAllUnder(document, async, callback)`.\n\t\t *\n\t\t * @param {boolean} [async=false] Same as in {@link Prism.highlightAllUnder}.\n\t\t * @param {HighlightCallback} [callback] Same as in {@link Prism.highlightAllUnder}.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\thighlightAll: function (async, callback) {\n\t\t\t_.highlightAllUnder(document, async, callback);\n\t\t},\n\n\t\t/**\n\t\t * Fetches all the descendants of `container` that have a `.language-xxxx` class and then calls\n\t\t * {@link Prism.highlightElement} on each one of them.\n\t\t *\n\t\t * The following hooks will be run:\n\t\t * 1. `before-highlightall`\n\t\t * 2. `before-all-elements-highlight`\n\t\t * 3. All hooks of {@link Prism.highlightElement} for each element.\n\t\t *\n\t\t * @param {ParentNode} container The root element, whose descendants that have a `.language-xxxx` class will be highlighted.\n\t\t * @param {boolean} [async=false] Whether each element is to be highlighted asynchronously using Web Workers.\n\t\t * @param {HighlightCallback} [callback] An optional callback to be invoked on each element after its highlighting is done.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\thighlightAllUnder: function (container, async, callback) {\n\t\t\tvar env = {\n\t\t\t\tcallback: callback,\n\t\t\t\tcontainer: container,\n\t\t\t\tselector: 'code[class*=\"language-\"], [class*=\"language-\"] code, code[class*=\"lang-\"], [class*=\"lang-\"] code'\n\t\t\t};\n\n\t\t\t_.hooks.run('before-highlightall', env);\n\n\t\t\tenv.elements = Array.prototype.slice.apply(env.container.querySelectorAll(env.selector));\n\n\t\t\t_.hooks.run('before-all-elements-highlight', env);\n\n\t\t\tfor (var i = 0, element; (element = env.elements[i++]);) {\n\t\t\t\t_.highlightElement(element, async === true, env.callback);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Highlights the code inside a single element.\n\t\t *\n\t\t * The following hooks will be run:\n\t\t * 1. `before-sanity-check`\n\t\t * 2. `before-highlight`\n\t\t * 3. All hooks of {@link Prism.highlight}. These hooks will be run by an asynchronous worker if `async` is `true`.\n\t\t * 4. `before-insert`\n\t\t * 5. `after-highlight`\n\t\t * 6. `complete`\n\t\t *\n\t\t * Some the above hooks will be skipped if the element doesn't contain any text or there is no grammar loaded for\n\t\t * the element's language.\n\t\t *\n\t\t * @param {Element} element The element containing the code.\n\t\t * It must have a class of `language-xxxx` to be processed, where `xxxx` is a valid language identifier.\n\t\t * @param {boolean} [async=false] Whether the element is to be highlighted asynchronously using Web Workers\n\t\t * to improve performance and avoid blocking the UI when highlighting very large chunks of code. This option is\n\t\t * [disabled by default](https://prismjs.com/faq.html#why-is-asynchronous-highlighting-disabled-by-default).\n\t\t *\n\t\t * Note: All language definitions required to highlight the code must be included in the main `prism.js` file for\n\t\t * asynchronous highlighting to work. You can build your own bundle on the\n\t\t * [Download page](https://prismjs.com/download.html).\n\t\t * @param {HighlightCallback} [callback] An optional callback to be invoked after the highlighting is done.\n\t\t * Mostly useful when `async` is `true`, since in that case, the highlighting is done asynchronously.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\thighlightElement: function (element, async, callback) {\n\t\t\t// Find language\n\t\t\tvar language = _.util.getLanguage(element);\n\t\t\tvar grammar = _.languages[language];\n\n\t\t\t// Set language on the element, if not present\n\t\t\t_.util.setLanguage(element, language);\n\n\t\t\t// Set language on the parent, for styling\n\t\t\tvar parent = element.parentElement;\n\t\t\tif (parent && parent.nodeName.toLowerCase() === 'pre') {\n\t\t\t\t_.util.setLanguage(parent, language);\n\t\t\t}\n\n\t\t\tvar code = element.textContent;\n\n\t\t\tvar env = {\n\t\t\t\telement: element,\n\t\t\t\tlanguage: language,\n\t\t\t\tgrammar: grammar,\n\t\t\t\tcode: code\n\t\t\t};\n\n\t\t\tfunction insertHighlightedCode(highlightedCode) {\n\t\t\t\tenv.highlightedCode = highlightedCode;\n\n\t\t\t\t_.hooks.run('before-insert', env);\n\n\t\t\t\tenv.element.innerHTML = env.highlightedCode;\n\n\t\t\t\t_.hooks.run('after-highlight', env);\n\t\t\t\t_.hooks.run('complete', env);\n\t\t\t\tcallback && callback.call(env.element);\n\t\t\t}\n\n\t\t\t_.hooks.run('before-sanity-check', env);\n\n\t\t\t// plugins may change/add the parent/element\n\t\t\tparent = env.element.parentElement;\n\t\t\tif (parent && parent.nodeName.toLowerCase() === 'pre' && !parent.hasAttribute('tabindex')) {\n\t\t\t\tparent.setAttribute('tabindex', '0');\n\t\t\t}\n\n\t\t\tif (!env.code) {\n\t\t\t\t_.hooks.run('complete', env);\n\t\t\t\tcallback && callback.call(env.element);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t_.hooks.run('before-highlight', env);\n\n\t\t\tif (!env.grammar) {\n\t\t\t\tinsertHighlightedCode(_.util.encode(env.code));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (async && _self.Worker) {\n\t\t\t\tvar worker = new Worker(_.filename);\n\n\t\t\t\tworker.onmessage = function (evt) {\n\t\t\t\t\tinsertHighlightedCode(evt.data);\n\t\t\t\t};\n\n\t\t\t\tworker.postMessage(JSON.stringify({\n\t\t\t\t\tlanguage: env.language,\n\t\t\t\t\tcode: env.code,\n\t\t\t\t\timmediateClose: true\n\t\t\t\t}));\n\t\t\t} else {\n\t\t\t\tinsertHighlightedCode(_.highlight(env.code, env.grammar, env.language));\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Low-level function, only use if you know what you’re doing. It accepts a string of text as input\n\t\t * and the language definitions to use, and returns a string with the HTML produced.\n\t\t *\n\t\t * The following hooks will be run:\n\t\t * 1. `before-tokenize`\n\t\t * 2. `after-tokenize`\n\t\t * 3. `wrap`: On each {@link Token}.\n\t\t *\n\t\t * @param {string} text A string with the code to be highlighted.\n\t\t * @param {Grammar} grammar An object containing the tokens to use.\n\t\t *\n\t\t * Usually a language definition like `Prism.languages.markup`.\n\t\t * @param {string} language The name of the language definition passed to `grammar`.\n\t\t * @returns {string} The highlighted HTML.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t * @example\n\t\t * Prism.highlight('var foo = true;', Prism.languages.javascript, 'javascript');\n\t\t */\n\t\thighlight: function (text, grammar, language) {\n\t\t\tvar env = {\n\t\t\t\tcode: text,\n\t\t\t\tgrammar: grammar,\n\t\t\t\tlanguage: language\n\t\t\t};\n\t\t\t_.hooks.run('before-tokenize', env);\n\t\t\tif (!env.grammar) {\n\t\t\t\tthrow new Error('The language \"' + env.language + '\" has no grammar.');\n\t\t\t}\n\t\t\tenv.tokens = _.tokenize(env.code, env.grammar);\n\t\t\t_.hooks.run('after-tokenize', env);\n\t\t\treturn Token.stringify(_.util.encode(env.tokens), env.language);\n\t\t},\n\n\t\t/**\n\t\t * This is the heart of Prism, and the most low-level function you can use. It accepts a string of text as input\n\t\t * and the language definitions to use, and returns an array with the tokenized code.\n\t\t *\n\t\t * When the language definition includes nested tokens, the function is called recursively on each of these tokens.\n\t\t *\n\t\t * This method could be useful in other contexts as well, as a very crude parser.\n\t\t *\n\t\t * @param {string} text A string with the code to be highlighted.\n\t\t * @param {Grammar} grammar An object containing the tokens to use.\n\t\t *\n\t\t * Usually a language definition like `Prism.languages.markup`.\n\t\t * @returns {TokenStream} An array of strings and tokens, a token stream.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t * @example\n\t\t * let code = `var foo = 0;`;\n\t\t * let tokens = Prism.tokenize(code, Prism.languages.javascript);\n\t\t * tokens.forEach(token => {\n\t\t *     if (token instanceof Prism.Token && token.type === 'number') {\n\t\t *         console.log(`Found numeric literal: ${token.content}`);\n\t\t *     }\n\t\t * });\n\t\t */\n\t\ttokenize: function (text, grammar) {\n\t\t\tvar rest = grammar.rest;\n\t\t\tif (rest) {\n\t\t\t\tfor (var token in rest) {\n\t\t\t\t\tgrammar[token] = rest[token];\n\t\t\t\t}\n\n\t\t\t\tdelete grammar.rest;\n\t\t\t}\n\n\t\t\tvar tokenList = new LinkedList();\n\t\t\taddAfter(tokenList, tokenList.head, text);\n\n\t\t\tmatchGrammar(text, tokenList, grammar, tokenList.head, 0);\n\n\t\t\treturn toArray(tokenList);\n\t\t},\n\n\t\t/**\n\t\t * @namespace\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\thooks: {\n\t\t\tall: {},\n\n\t\t\t/**\n\t\t\t * Adds the given callback to the list of callbacks for the given hook.\n\t\t\t *\n\t\t\t * The callback will be invoked when the hook it is registered for is run.\n\t\t\t * Hooks are usually directly run by a highlight function but you can also run hooks yourself.\n\t\t\t *\n\t\t\t * One callback function can be registered to multiple hooks and the same hook multiple times.\n\t\t\t *\n\t\t\t * @param {string} name The name of the hook.\n\t\t\t * @param {HookCallback} callback The callback function which is given environment variables.\n\t\t\t * @public\n\t\t\t */\n\t\t\tadd: function (name, callback) {\n\t\t\t\tvar hooks = _.hooks.all;\n\n\t\t\t\thooks[name] = hooks[name] || [];\n\n\t\t\t\thooks[name].push(callback);\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Runs a hook invoking all registered callbacks with the given environment variables.\n\t\t\t *\n\t\t\t * Callbacks will be invoked synchronously and in the order in which they were registered.\n\t\t\t *\n\t\t\t * @param {string} name The name of the hook.\n\t\t\t * @param {Object<string, any>} env The environment variables of the hook passed to all callbacks registered.\n\t\t\t * @public\n\t\t\t */\n\t\t\trun: function (name, env) {\n\t\t\t\tvar callbacks = _.hooks.all[name];\n\n\t\t\t\tif (!callbacks || !callbacks.length) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tfor (var i = 0, callback; (callback = callbacks[i++]);) {\n\t\t\t\t\tcallback(env);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tToken: Token\n\t};\n\t_self.Prism = _;\n\n\n\t// Typescript note:\n\t// The following can be used to import the Token type in JSDoc:\n\t//\n\t//   @typedef {InstanceType<import(\"./prism-core\")[\"Token\"]>} Token\n\n\t/**\n\t * Creates a new token.\n\t *\n\t * @param {string} type See {@link Token#type type}\n\t * @param {string | TokenStream} content See {@link Token#content content}\n\t * @param {string|string[]} [alias] The alias(es) of the token.\n\t * @param {string} [matchedStr=\"\"] A copy of the full string this token was created from.\n\t * @class\n\t * @global\n\t * @public\n\t */\n\tfunction Token(type, content, alias, matchedStr) {\n\t\t/**\n\t\t * The type of the token.\n\t\t *\n\t\t * This is usually the key of a pattern in a {@link Grammar}.\n\t\t *\n\t\t * @type {string}\n\t\t * @see GrammarToken\n\t\t * @public\n\t\t */\n\t\tthis.type = type;\n\t\t/**\n\t\t * The strings or tokens contained by this token.\n\t\t *\n\t\t * This will be a token stream if the pattern matched also defined an `inside` grammar.\n\t\t *\n\t\t * @type {string | TokenStream}\n\t\t * @public\n\t\t */\n\t\tthis.content = content;\n\t\t/**\n\t\t * The alias(es) of the token.\n\t\t *\n\t\t * @type {string|string[]}\n\t\t * @see GrammarToken\n\t\t * @public\n\t\t */\n\t\tthis.alias = alias;\n\t\t// Copy of the full string this token was created from\n\t\tthis.length = (matchedStr || '').length | 0;\n\t}\n\n\t/**\n\t * A token stream is an array of strings and {@link Token Token} objects.\n\t *\n\t * Token streams have to fulfill a few properties that are assumed by most functions (mostly internal ones) that process\n\t * them.\n\t *\n\t * 1. No adjacent strings.\n\t * 2. No empty strings.\n\t *\n\t *    The only exception here is the token stream that only contains the empty string and nothing else.\n\t *\n\t * @typedef {Array<string | Token>} TokenStream\n\t * @global\n\t * @public\n\t */\n\n\t/**\n\t * Converts the given token or token stream to an HTML representation.\n\t *\n\t * The following hooks will be run:\n\t * 1. `wrap`: On each {@link Token}.\n\t *\n\t * @param {string | Token | TokenStream} o The token or token stream to be converted.\n\t * @param {string} language The name of current language.\n\t * @returns {string} The HTML representation of the token or token stream.\n\t * @memberof Token\n\t * @static\n\t */\n\tToken.stringify = function stringify(o, language) {\n\t\tif (typeof o == 'string') {\n\t\t\treturn o;\n\t\t}\n\t\tif (Array.isArray(o)) {\n\t\t\tvar s = '';\n\t\t\to.forEach(function (e) {\n\t\t\t\ts += stringify(e, language);\n\t\t\t});\n\t\t\treturn s;\n\t\t}\n\n\t\tvar env = {\n\t\t\ttype: o.type,\n\t\t\tcontent: stringify(o.content, language),\n\t\t\ttag: 'span',\n\t\t\tclasses: ['token', o.type],\n\t\t\tattributes: {},\n\t\t\tlanguage: language\n\t\t};\n\n\t\tvar aliases = o.alias;\n\t\tif (aliases) {\n\t\t\tif (Array.isArray(aliases)) {\n\t\t\t\tArray.prototype.push.apply(env.classes, aliases);\n\t\t\t} else {\n\t\t\t\tenv.classes.push(aliases);\n\t\t\t}\n\t\t}\n\n\t\t_.hooks.run('wrap', env);\n\n\t\tvar attributes = '';\n\t\tfor (var name in env.attributes) {\n\t\t\tattributes += ' ' + name + '=\"' + (env.attributes[name] || '').replace(/\"/g, '&quot;') + '\"';\n\t\t}\n\n\t\treturn '<' + env.tag + ' class=\"' + env.classes.join(' ') + '\"' + attributes + '>' + env.content + '</' + env.tag + '>';\n\t};\n\n\t/**\n\t * @param {RegExp} pattern\n\t * @param {number} pos\n\t * @param {string} text\n\t * @param {boolean} lookbehind\n\t * @returns {RegExpExecArray | null}\n\t */\n\tfunction matchPattern(pattern, pos, text, lookbehind) {\n\t\tpattern.lastIndex = pos;\n\t\tvar match = pattern.exec(text);\n\t\tif (match && lookbehind && match[1]) {\n\t\t\t// change the match to remove the text matched by the Prism lookbehind group\n\t\t\tvar lookbehindLength = match[1].length;\n\t\t\tmatch.index += lookbehindLength;\n\t\t\tmatch[0] = match[0].slice(lookbehindLength);\n\t\t}\n\t\treturn match;\n\t}\n\n\t/**\n\t * @param {string} text\n\t * @param {LinkedList<string | Token>} tokenList\n\t * @param {any} grammar\n\t * @param {LinkedListNode<string | Token>} startNode\n\t * @param {number} startPos\n\t * @param {RematchOptions} [rematch]\n\t * @returns {void}\n\t * @private\n\t *\n\t * @typedef RematchOptions\n\t * @property {string} cause\n\t * @property {number} reach\n\t */\n\tfunction matchGrammar(text, tokenList, grammar, startNode, startPos, rematch) {\n\t\tfor (var token in grammar) {\n\t\t\tif (!grammar.hasOwnProperty(token) || !grammar[token]) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tvar patterns = grammar[token];\n\t\t\tpatterns = Array.isArray(patterns) ? patterns : [patterns];\n\n\t\t\tfor (var j = 0; j < patterns.length; ++j) {\n\t\t\t\tif (rematch && rematch.cause == token + ',' + j) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar patternObj = patterns[j];\n\t\t\t\tvar inside = patternObj.inside;\n\t\t\t\tvar lookbehind = !!patternObj.lookbehind;\n\t\t\t\tvar greedy = !!patternObj.greedy;\n\t\t\t\tvar alias = patternObj.alias;\n\n\t\t\t\tif (greedy && !patternObj.pattern.global) {\n\t\t\t\t\t// Without the global flag, lastIndex won't work\n\t\t\t\t\tvar flags = patternObj.pattern.toString().match(/[imsuy]*$/)[0];\n\t\t\t\t\tpatternObj.pattern = RegExp(patternObj.pattern.source, flags + 'g');\n\t\t\t\t}\n\n\t\t\t\t/** @type {RegExp} */\n\t\t\t\tvar pattern = patternObj.pattern || patternObj;\n\n\t\t\t\tfor ( // iterate the token list and keep track of the current token/string position\n\t\t\t\t\tvar currentNode = startNode.next, pos = startPos;\n\t\t\t\t\tcurrentNode !== tokenList.tail;\n\t\t\t\t\tpos += currentNode.value.length, currentNode = currentNode.next\n\t\t\t\t) {\n\n\t\t\t\t\tif (rematch && pos >= rematch.reach) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar str = currentNode.value;\n\n\t\t\t\t\tif (tokenList.length > text.length) {\n\t\t\t\t\t\t// Something went terribly wrong, ABORT, ABORT!\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (str instanceof Token) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar removeCount = 1; // this is the to parameter of removeBetween\n\t\t\t\t\tvar match;\n\n\t\t\t\t\tif (greedy) {\n\t\t\t\t\t\tmatch = matchPattern(pattern, pos, text, lookbehind);\n\t\t\t\t\t\tif (!match || match.index >= text.length) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar from = match.index;\n\t\t\t\t\t\tvar to = match.index + match[0].length;\n\t\t\t\t\t\tvar p = pos;\n\n\t\t\t\t\t\t// find the node that contains the match\n\t\t\t\t\t\tp += currentNode.value.length;\n\t\t\t\t\t\twhile (from >= p) {\n\t\t\t\t\t\t\tcurrentNode = currentNode.next;\n\t\t\t\t\t\t\tp += currentNode.value.length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// adjust pos (and p)\n\t\t\t\t\t\tp -= currentNode.value.length;\n\t\t\t\t\t\tpos = p;\n\n\t\t\t\t\t\t// the current node is a Token, then the match starts inside another Token, which is invalid\n\t\t\t\t\t\tif (currentNode.value instanceof Token) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// find the last node which is affected by this match\n\t\t\t\t\t\tfor (\n\t\t\t\t\t\t\tvar k = currentNode;\n\t\t\t\t\t\t\tk !== tokenList.tail && (p < to || typeof k.value === 'string');\n\t\t\t\t\t\t\tk = k.next\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tremoveCount++;\n\t\t\t\t\t\t\tp += k.value.length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tremoveCount--;\n\n\t\t\t\t\t\t// replace with the new match\n\t\t\t\t\t\tstr = text.slice(pos, p);\n\t\t\t\t\t\tmatch.index -= pos;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmatch = matchPattern(pattern, 0, str, lookbehind);\n\t\t\t\t\t\tif (!match) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// eslint-disable-next-line no-redeclare\n\t\t\t\t\tvar from = match.index;\n\t\t\t\t\tvar matchStr = match[0];\n\t\t\t\t\tvar before = str.slice(0, from);\n\t\t\t\t\tvar after = str.slice(from + matchStr.length);\n\n\t\t\t\t\tvar reach = pos + str.length;\n\t\t\t\t\tif (rematch && reach > rematch.reach) {\n\t\t\t\t\t\trematch.reach = reach;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar removeFrom = currentNode.prev;\n\n\t\t\t\t\tif (before) {\n\t\t\t\t\t\tremoveFrom = addAfter(tokenList, removeFrom, before);\n\t\t\t\t\t\tpos += before.length;\n\t\t\t\t\t}\n\n\t\t\t\t\tremoveRange(tokenList, removeFrom, removeCount);\n\n\t\t\t\t\tvar wrapped = new Token(token, inside ? _.tokenize(matchStr, inside) : matchStr, alias, matchStr);\n\t\t\t\t\tcurrentNode = addAfter(tokenList, removeFrom, wrapped);\n\n\t\t\t\t\tif (after) {\n\t\t\t\t\t\taddAfter(tokenList, currentNode, after);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (removeCount > 1) {\n\t\t\t\t\t\t// at least one Token object was removed, so we have to do some rematching\n\t\t\t\t\t\t// this can only happen if the current pattern is greedy\n\n\t\t\t\t\t\t/** @type {RematchOptions} */\n\t\t\t\t\t\tvar nestedRematch = {\n\t\t\t\t\t\t\tcause: token + ',' + j,\n\t\t\t\t\t\t\treach: reach\n\t\t\t\t\t\t};\n\t\t\t\t\t\tmatchGrammar(text, tokenList, grammar, currentNode.prev, pos, nestedRematch);\n\n\t\t\t\t\t\t// the reach might have been extended because of the rematching\n\t\t\t\t\t\tif (rematch && nestedRematch.reach > rematch.reach) {\n\t\t\t\t\t\t\trematch.reach = nestedRematch.reach;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @typedef LinkedListNode\n\t * @property {T} value\n\t * @property {LinkedListNode<T> | null} prev The previous node.\n\t * @property {LinkedListNode<T> | null} next The next node.\n\t * @template T\n\t * @private\n\t */\n\n\t/**\n\t * @template T\n\t * @private\n\t */\n\tfunction LinkedList() {\n\t\t/** @type {LinkedListNode<T>} */\n\t\tvar head = { value: null, prev: null, next: null };\n\t\t/** @type {LinkedListNode<T>} */\n\t\tvar tail = { value: null, prev: head, next: null };\n\t\thead.next = tail;\n\n\t\t/** @type {LinkedListNode<T>} */\n\t\tthis.head = head;\n\t\t/** @type {LinkedListNode<T>} */\n\t\tthis.tail = tail;\n\t\tthis.length = 0;\n\t}\n\n\t/**\n\t * Adds a new node with the given value to the list.\n\t *\n\t * @param {LinkedList<T>} list\n\t * @param {LinkedListNode<T>} node\n\t * @param {T} value\n\t * @returns {LinkedListNode<T>} The added node.\n\t * @template T\n\t */\n\tfunction addAfter(list, node, value) {\n\t\t// assumes that node != list.tail && values.length >= 0\n\t\tvar next = node.next;\n\n\t\tvar newNode = { value: value, prev: node, next: next };\n\t\tnode.next = newNode;\n\t\tnext.prev = newNode;\n\t\tlist.length++;\n\n\t\treturn newNode;\n\t}\n\t/**\n\t * Removes `count` nodes after the given node. The given node will not be removed.\n\t *\n\t * @param {LinkedList<T>} list\n\t * @param {LinkedListNode<T>} node\n\t * @param {number} count\n\t * @template T\n\t */\n\tfunction removeRange(list, node, count) {\n\t\tvar next = node.next;\n\t\tfor (var i = 0; i < count && next !== list.tail; i++) {\n\t\t\tnext = next.next;\n\t\t}\n\t\tnode.next = next;\n\t\tnext.prev = node;\n\t\tlist.length -= i;\n\t}\n\t/**\n\t * @param {LinkedList<T>} list\n\t * @returns {T[]}\n\t * @template T\n\t */\n\tfunction toArray(list) {\n\t\tvar array = [];\n\t\tvar node = list.head.next;\n\t\twhile (node !== list.tail) {\n\t\t\tarray.push(node.value);\n\t\t\tnode = node.next;\n\t\t}\n\t\treturn array;\n\t}\n\n\n\tif (!_self.document) {\n\t\tif (!_self.addEventListener) {\n\t\t\t// in Node.js\n\t\t\treturn _;\n\t\t}\n\n\t\tif (!_.disableWorkerMessageHandler) {\n\t\t\t// In worker\n\t\t\t_self.addEventListener('message', function (evt) {\n\t\t\t\tvar message = JSON.parse(evt.data);\n\t\t\t\tvar lang = message.language;\n\t\t\t\tvar code = message.code;\n\t\t\t\tvar immediateClose = message.immediateClose;\n\n\t\t\t\t_self.postMessage(_.highlight(code, _.languages[lang], lang));\n\t\t\t\tif (immediateClose) {\n\t\t\t\t\t_self.close();\n\t\t\t\t}\n\t\t\t}, false);\n\t\t}\n\n\t\treturn _;\n\t}\n\n\t// Get current script and highlight\n\tvar script = _.util.currentScript();\n\n\tif (script) {\n\t\t_.filename = script.src;\n\n\t\tif (script.hasAttribute('data-manual')) {\n\t\t\t_.manual = true;\n\t\t}\n\t}\n\n\tfunction highlightAutomaticallyCallback() {\n\t\tif (!_.manual) {\n\t\t\t_.highlightAll();\n\t\t}\n\t}\n\n\tif (!_.manual) {\n\t\t// If the document state is \"loading\", then we'll use DOMContentLoaded.\n\t\t// If the document state is \"interactive\" and the prism.js script is deferred, then we'll also use the\n\t\t// DOMContentLoaded event because there might be some plugins or languages which have also been deferred and they\n\t\t// might take longer one animation frame to execute which can create a race condition where only some plugins have\n\t\t// been loaded when Prism.highlightAll() is executed, depending on how fast resources are loaded.\n\t\t// See https://github.com/PrismJS/prism/issues/2102\n\t\tvar readyState = document.readyState;\n\t\tif (readyState === 'loading' || readyState === 'interactive' && script && script.defer) {\n\t\t\tdocument.addEventListener('DOMContentLoaded', highlightAutomaticallyCallback);\n\t\t} else {\n\t\t\tif (window.requestAnimationFrame) {\n\t\t\t\twindow.requestAnimationFrame(highlightAutomaticallyCallback);\n\t\t\t} else {\n\t\t\t\twindow.setTimeout(highlightAutomaticallyCallback, 16);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn _;\n\n}(_self));\n\nif (typeof module !== 'undefined' && module.exports) {\n\tmodule.exports = Prism;\n}\n\n// hack for components to work correctly in node.js\nif (typeof global !== 'undefined') {\n\tglobal.Prism = Prism;\n}\n\n// some additional documentation/types\n\n/**\n * The expansion of a simple `RegExp` literal to support additional properties.\n *\n * @typedef GrammarToken\n * @property {RegExp} pattern The regular expression of the token.\n * @property {boolean} [lookbehind=false] If `true`, then the first capturing group of `pattern` will (effectively)\n * behave as a lookbehind group meaning that the captured text will not be part of the matched text of the new token.\n * @property {boolean} [greedy=false] Whether the token is greedy.\n * @property {string|string[]} [alias] An optional alias or list of aliases.\n * @property {Grammar} [inside] The nested grammar of this token.\n *\n * The `inside` grammar will be used to tokenize the text value of each token of this kind.\n *\n * This can be used to make nested and even recursive language definitions.\n *\n * Note: This can cause infinite recursion. Be careful when you embed different languages or even the same language into\n * each another.\n * @global\n * @public\n */\n\n/**\n * @typedef Grammar\n * @type {Object<string, RegExp | GrammarToken | Array<RegExp | GrammarToken>>}\n * @property {Grammar} [rest] An optional grammar object that will be appended to this grammar.\n * @global\n * @public\n */\n\n/**\n * A function which will invoked after an element was successfully highlighted.\n *\n * @callback HighlightCallback\n * @param {Element} element The element successfully highlighted.\n * @returns {void}\n * @global\n * @public\n */\n\n/**\n * @callback HookCallback\n * @param {Object<string, any>} env The environment variables of the hook.\n * @returns {void}\n * @global\n * @public\n */\n/components/prism-python.min.js\bAPrism.languages.python={comment:{pattern:/(^|[^\\\\])#.*/,lookbehind:!0,greedy:!0},\"string-interpolation\":{pattern:/(?:f|fr|rf)(?:(\"\"\"|''')[\\s\\S]*?\\1|(\"|')(?:\\\\.|(?!\\2)[^\\\\\\r\\n])*\\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\\{\\{)*)\\{(?!\\{)(?:[^{}]|\\{(?!\\{)(?:[^{}]|\\{(?!\\{)(?:[^{}])+\\})+\\})+\\}/,lookbehind:!0,inside:{\"format-spec\":{pattern:/(:)[^:(){}]+(?=\\}$)/,lookbehind:!0},\"conversion-option\":{pattern:/![sra](?=[:}]$)/,alias:\"punctuation\"},rest:null}},string:/[\\s\\S]+/}},\"triple-quoted-string\":{pattern:/(?:[rub]|br|rb)?(\"\"\"|''')[\\s\\S]*?\\1/i,greedy:!0,alias:\"string\"},string:{pattern:/(?:[rub]|br|rb)?(\"|')(?:\\\\.|(?!\\1)[^\\\\\\r\\n])*\\1/i,greedy:!0},function:{pattern:/((?:^|\\s)def[ \\t]+)[a-zA-Z_]\\w*(?=\\s*\\()/g,lookbehind:!0},\"class-name\":{pattern:/(\\bclass\\s+)\\w+/i,lookbehind:!0},decorator:{pattern:/(^[\\t ]*)@\\w+(?:\\.\\w+)*/m,lookbehind:!0,alias:[\"annotation\",\"punctuation\"],inside:{punctuation:/\\./}},keyword:/\\b(?:_(?=\\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\\b/,builtin:/\\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\\b/,boolean:/\\b(?:False|None|True)\\b/,number:/\\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\\b|(?:\\b\\d+(?:_\\d+)*(?:\\.(?:\\d+(?:_\\d+)*)?)?|\\B\\.\\d+(?:_\\d+)*)(?:e[+-]?\\d+(?:_\\d+)*)?j?(?!\\w)/i,operator:/[-+%=]=?|!=|:=|\\*\\*?=?|\\/\\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\\];(),.:]/},Prism.languages.python[\"string-interpolation\"].inside.interpolation.inside.rest=Prism.languages.python,Prism.languages.py=Prism.languages.python;/components/prism-smarty.min.js\u0007!function(e){e.languages.smarty={comment:{pattern:/^\\{\\*[\\s\\S]*?\\*\\}/,greedy:!0},\"embedded-php\":{pattern:/^\\{php\\}[\\s\\S]*?\\{\\/php\\}/,greedy:!0,inside:{smarty:{pattern:/^\\{php\\}|\\{\\/php\\}$/,inside:null},php:{pattern:/[\\s\\S]+/,alias:\"language-php\",inside:e.languages.php}}},string:[{pattern:/\"(?:\\\\.|[^\"\\\\\\r\\n])*\"/,greedy:!0,inside:{interpolation:{pattern:/\\{[^{}]*\\}|`[^`]*`/,inside:{\"interpolation-punctuation\":{pattern:/^[{`]|[`}]$/,alias:\"punctuation\"},expression:{pattern:/[\\s\\S]+/,inside:null}}},variable:/\\$\\w+/}},{pattern:/'(?:\\\\.|[^'\\\\\\r\\n])*'/,greedy:!0}],keyword:{pattern:/(^\\{\\/?)[a-z_]\\w*\\b(?!\\()/i,lookbehind:!0,greedy:!0},delimiter:{pattern:/^\\{\\/?|\\}$/,greedy:!0,alias:\"punctuation\"},number:/\\b0x[\\dA-Fa-f]+|(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:[Ee][-+]?\\d+)?/,variable:[/\\$(?!\\d)\\w+/,/#(?!\\d)\\w+#/,{pattern:/(\\.|->|\\w\\s*=)(?!\\d)\\w+\\b(?!\\()/,lookbehind:!0},{pattern:/(\\[)(?!\\d)\\w+(?=\\])/,lookbehind:!0}],function:{pattern:/(\\|\\s*)@?[a-z_]\\w*|\\b[a-z_]\\w*(?=\\()/i,lookbehind:!0},\"attr-name\":/\\b[a-z_]\\w*(?=\\s*=)/i,boolean:/\\b(?:false|no|off|on|true|yes)\\b/,punctuation:/[\\[\\](){}.,:`]|->/,operator:[/[+\\-*\\/%]|==?=?|[!<>]=?|&&|\\|\\|?/,/\\bis\\s+(?:not\\s+)?(?:div|even|odd)(?:\\s+by)?\\b/,/\\b(?:and|eq|gt?e|gt|lt?e|lt|mod|neq?|not|or)\\b/]},e.languages.smarty[\"embedded-php\"].inside.smarty.inside=e.languages.smarty,e.languages.smarty.string[0].inside.interpolation.inside.expression.inside=e.languages.smarty;var n=/\"(?:\\\\.|[^\"\\\\\\r\\n])*\"|'(?:\\\\.|[^'\\\\\\r\\n])*'/,t=RegExp(\"\\\\{\\\\*[^]*?\\\\*\\\\}|\\\\{php\\\\}[^]*?\\\\{/php\\\\}|\"+\"\\\\{(?:[^{}\\\"']|<str>|\\\\{(?:[^{}\\\"']|<str>|\\\\{(?:[^{}\\\"']|<str>)*\\\\})*\\\\})*\\\\}\".replace(/<str>/g,(function(){return n.source})),\"g\");e.hooks.add(\"before-tokenize\",(function(n){var a=!1;e.languages[\"markup-templating\"].buildPlaceholders(n,\"smarty\",t,(function(e){return\"{/literal}\"===e&&(a=!1),!a&&(\"{literal}\"===e&&(a=!0),!0)}))})),e.hooks.add(\"after-tokenize\",(function(n){e.languages[\"markup-templating\"].tokenizePlaceholders(n,\"smarty\")}))}(Prism);/components/prism-arff.jsPrism.languages.arff = {\n\t'comment': /%.*/,\n\t'string': {\n\t\tpattern: /([\"'])(?:\\\\.|(?!\\1)[^\\\\\\r\\n])*\\1/,\n\t\tgreedy: true\n\t},\n\t'keyword': /@(?:attribute|data|end|relation)\\b/i,\n\t'number': /\\b\\d+(?:\\.\\d+)?\\b/,\n\t'punctuation': /[{},]/\n};\n/components/index.js\u0006\u0001const components = require('../components.js');\nconst getLoader = require('../dependencies');\n\n\n/**\n * The set of all languages which have been loaded using the below function.\n *\n * @type {Set<string>}\n */\nconst loadedLanguages = new Set();\n\n/**\n * Loads the given languages and adds them to the current Prism instance.\n *\n * If no languages are provided, __all__ Prism languages will be loaded.\n *\n * @param {string|string[]} [languages]\n * @returns {void}\n */\nfunction loadLanguages(languages) {\n\tif (languages === undefined) {\n\t\tlanguages = Object.keys(components.languages).filter(l => l != 'meta');\n\t} else if (!Array.isArray(languages)) {\n\t\tlanguages = [languages];\n\t}\n\n\t// the user might have loaded languages via some other way or used `prism.js` which already includes some\n\t// we don't need to validate the ids because `getLoader` will ignore invalid ones\n\tconst loaded = [...loadedLanguages, ...Object.keys(Prism.languages)];\n\n\tgetLoader(components, languages, loaded).load(lang => {\n\t\tif (!(lang in components.languages)) {\n\t\t\tif (!loadLanguages.silent) {\n\t\t\t\tconsole.warn('Language does not exist: ' + lang);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tconst pathToLanguage = './prism-' + lang;\n\n\t\t// remove from require cache and from Prism\n\t\tdelete require.cache[require.resolve(pathToLanguage)];\n\t\tdelete Prism.languages[lang];\n\n\t\trequire(pathToLanguage);\n\n\t\tloadedLanguages.add(lang);\n\t});\n}\n\n/**\n * Set this to `true` to prevent all warning messages `loadLanguages` logs.\n */\nloadLanguages.silent = false;\n\nmodule.exports = loadLanguages;\n%/components/prism-js-templates.min.js\n\u0017!function(e){var t=e.languages.javascript[\"template-string\"],n=t.pattern.source,r=t.inside.interpolation,a=r.inside[\"interpolation-punctuation\"],i=r.pattern.source;function o(t,r){if(e.languages[t])return{pattern:RegExp(\"((?:\"+r+\")\\\\s*)\"+n),lookbehind:!0,greedy:!0,inside:{\"template-punctuation\":{pattern:/^`|`$/,alias:\"string\"},\"embedded-code\":{pattern:/[\\s\\S]+/,alias:t}}}}function s(e,t){return\"___\"+t.toUpperCase()+\"_\"+e+\"___\"}function p(t,n,r){var a={code:t,grammar:n,language:r};return e.hooks.run(\"before-tokenize\",a),a.tokens=e.tokenize(a.code,a.grammar),e.hooks.run(\"after-tokenize\",a),a.tokens}function l(t){var n={};n[\"interpolation-punctuation\"]=a;var i=e.tokenize(t,n);if(3===i.length){var o=[1,1];o.push.apply(o,p(i[1],e.languages.javascript,\"javascript\")),i.splice.apply(i,o)}return new e.Token(\"interpolation\",i,r.alias,t)}function g(t,n,r){var a=e.tokenize(t,{interpolation:{pattern:RegExp(i),lookbehind:!0}}),o=0,g={},u=p(a.map((function(e){if(\"string\"==typeof e)return e;for(var n,a=e.content;-1!==t.indexOf(n=s(o++,r)););return g[n]=a,n})).join(\"\"),n,r),c=Object.keys(g);return o=0,function e(t){for(var n=0;n<t.length;n++){if(o>=c.length)return;var r=t[n];if(\"string\"==typeof r||\"string\"==typeof r.content){var a=c[o],i=\"string\"==typeof r?r:r.content,s=i.indexOf(a);if(-1!==s){++o;var p=i.substring(0,s),u=l(g[a]),f=i.substring(s+a.length),y=[];if(p&&y.push(p),y.push(u),f){var v=[f];e(v),y.push.apply(y,v)}\"string\"==typeof r?(t.splice.apply(t,[n,1].concat(y)),n+=y.length-1):r.content=y}}else{var d=r.content;Array.isArray(d)?e(d):e([d])}}}(u),new e.Token(r,u,\"language-\"+r,t)}e.languages.javascript[\"template-string\"]=[o(\"css\",\"\\\\b(?:styled(?:\\\\([^)]*\\\\))?(?:\\\\s*\\\\.\\\\s*\\\\w+(?:\\\\([^)]*\\\\))*)*|css(?:\\\\s*\\\\.\\\\s*(?:global|resolve))?|createGlobalStyle|keyframes)\"),o(\"html\",\"\\\\bhtml|\\\\.\\\\s*(?:inner|outer)HTML\\\\s*\\\\+?=\"),o(\"svg\",\"\\\\bsvg\"),o(\"markdown\",\"\\\\b(?:markdown|md)\"),o(\"graphql\",\"\\\\b(?:gql|graphql(?:\\\\s*\\\\.\\\\s*experimental)?)\"),o(\"sql\",\"\\\\bsql\"),t].filter(Boolean);var u={javascript:!0,js:!0,typescript:!0,ts:!0,jsx:!0,tsx:!0};function c(e){return\"string\"==typeof e?e:Array.isArray(e)?e.map(c).join(\"\"):c(e.content)}e.hooks.add(\"after-tokenize\",(function(t){t.language in u&&function t(n){for(var r=0,a=n.length;r<a;r++){var i=n[r];if(\"string\"!=typeof i){var o=i.content;if(Array.isArray(o))if(\"template-string\"===i.type){var s=o[1];if(3===o.length&&\"string\"!=typeof s&&\"embedded-code\"===s.type){var p=c(s),l=s.alias,u=Array.isArray(l)?l[0]:l,f=e.languages[u];if(!f)continue;o[1]=g(p,f,u)}}else t(o);else\"string\"!=typeof o&&t([o])}}}(t.tokens)}))}(Prism);/components/prism-factor.min.js'H!function(e){var t={function:/\\b(?:BUGS?|FIX(?:MES?)?|NOTES?|TODOS?|XX+|HACKS?|WARN(?:ING)?|\\?{2,}|!{2,})\\b/},s={number:/\\\\[^\\s']|%\\w/},i={comment:[{pattern:/(^|\\s)(?:! .*|!$)/,lookbehind:!0,inside:t},{pattern:/(^|\\s)\\/\\*\\s[\\s\\S]*?\\*\\/(?=\\s|$)/,lookbehind:!0,greedy:!0,inside:t},{pattern:/(^|\\s)!\\[(={0,6})\\[\\s[\\s\\S]*?\\]\\2\\](?=\\s|$)/,lookbehind:!0,greedy:!0,inside:t}],number:[{pattern:/(^|\\s)[+-]?\\d+(?=\\s|$)/,lookbehind:!0},{pattern:/(^|\\s)[+-]?0(?:b[01]+|o[0-7]+|d\\d+|x[\\dA-F]+)(?=\\s|$)/i,lookbehind:!0},{pattern:/(^|\\s)[+-]?\\d+\\/\\d+\\.?(?=\\s|$)/,lookbehind:!0},{pattern:/(^|\\s)\\+?\\d+\\+\\d+\\/\\d+(?=\\s|$)/,lookbehind:!0},{pattern:/(^|\\s)-\\d+-\\d+\\/\\d+(?=\\s|$)/,lookbehind:!0},{pattern:/(^|\\s)[+-]?(?:\\d*\\.\\d+|\\d+\\.\\d*|\\d+)(?:e[+-]?\\d+)?(?=\\s|$)/i,lookbehind:!0},{pattern:/(^|\\s)NAN:\\s+[\\da-fA-F]+(?=\\s|$)/,lookbehind:!0},{pattern:/(^|\\s)[+-]?0(?:b1\\.[01]*|o1\\.[0-7]*|d1\\.\\d*|x1\\.[\\dA-F]*)p\\d+(?=\\s|$)/i,lookbehind:!0}],regexp:{pattern:/(^|\\s)R\\/\\s(?:\\\\\\S|[^\\\\/])*\\/(?:[idmsr]*|[idmsr]+-[idmsr]+)(?=\\s|$)/,lookbehind:!0,alias:\"number\",inside:{variable:/\\\\\\S/,keyword:/[+?*\\[\\]^$(){}.|]/,operator:{pattern:/(\\/)[idmsr]+(?:-[idmsr]+)?/,lookbehind:!0}}},boolean:{pattern:/(^|\\s)[tf](?=\\s|$)/,lookbehind:!0},\"custom-string\":{pattern:/(^|\\s)[A-Z0-9\\-]+\"\\s(?:\\\\\\S|[^\"\\\\])*\"/,lookbehind:!0,greedy:!0,alias:\"string\",inside:{number:/\\\\\\S|%\\w|\\//}},\"multiline-string\":[{pattern:/(^|\\s)STRING:\\s+\\S+(?:\\n|\\r\\n).*(?:\\n|\\r\\n)\\s*;(?=\\s|$)/,lookbehind:!0,greedy:!0,alias:\"string\",inside:{number:s.number,\"semicolon-or-setlocal\":{pattern:/([\\r\\n][ \\t]*);(?=\\s|$)/,lookbehind:!0,alias:\"function\"}}},{pattern:/(^|\\s)HEREDOC:\\s+\\S+(?:\\n|\\r\\n).*(?:\\n|\\r\\n)\\s*\\S+(?=\\s|$)/,lookbehind:!0,greedy:!0,alias:\"string\",inside:s},{pattern:/(^|\\s)\\[(={0,6})\\[\\s[\\s\\S]*?\\]\\2\\](?=\\s|$)/,lookbehind:!0,greedy:!0,alias:\"string\",inside:s}],\"special-using\":{pattern:/(^|\\s)USING:(?:\\s\\S+)*(?=\\s+;(?:\\s|$))/,lookbehind:!0,alias:\"function\",inside:{string:{pattern:/(\\s)[^:\\s]+/,lookbehind:!0}}},\"stack-effect-delimiter\":[{pattern:/(^|\\s)(?:call|eval|execute)?\\((?=\\s)/,lookbehind:!0,alias:\"operator\"},{pattern:/(\\s)--(?=\\s)/,lookbehind:!0,alias:\"operator\"},{pattern:/(\\s)\\)(?=\\s|$)/,lookbehind:!0,alias:\"operator\"}],combinators:{pattern:null,lookbehind:!0,alias:\"keyword\"},\"kernel-builtin\":{pattern:null,lookbehind:!0,alias:\"variable\"},\"sequences-builtin\":{pattern:null,lookbehind:!0,alias:\"variable\"},\"math-builtin\":{pattern:null,lookbehind:!0,alias:\"variable\"},\"constructor-word\":{pattern:/(^|\\s)<(?!=+>|-+>)\\S+>(?=\\s|$)/,lookbehind:!0,alias:\"keyword\"},\"other-builtin-syntax\":{pattern:null,lookbehind:!0,alias:\"operator\"},\"conventionally-named-word\":{pattern:/(^|\\s)(?!\")(?:(?:change|new|set|with)-\\S+|\\$\\S+|>[^>\\s]+|[^:>\\s]+>|[^>\\s]+>[^>\\s]+|\\+[^+\\s]+\\+|[^?\\s]+\\?|\\?[^?\\s]+|[^>\\s]+>>|>>[^>\\s]+|[^<\\s]+<<|\\([^()\\s]+\\)|[^!\\s]+!|[^*\\s]\\S*\\*|[^.\\s]\\S*\\.)(?=\\s|$)/,lookbehind:!0,alias:\"keyword\"},\"colon-syntax\":{pattern:/(^|\\s)(?:[A-Z0-9\\-]+#?)?:{1,2}\\s+(?:;\\S+|(?!;)\\S+)(?=\\s|$)/,lookbehind:!0,greedy:!0,alias:\"function\"},\"semicolon-or-setlocal\":{pattern:/(\\s)(?:;|:>)(?=\\s|$)/,lookbehind:!0,alias:\"function\"},\"curly-brace-literal-delimiter\":[{pattern:/(^|\\s)[a-z]*\\{(?=\\s)/i,lookbehind:!0,alias:\"operator\"},{pattern:/(\\s)\\}(?=\\s|$)/,lookbehind:!0,alias:\"operator\"}],\"quotation-delimiter\":[{pattern:/(^|\\s)\\[(?=\\s)/,lookbehind:!0,alias:\"operator\"},{pattern:/(\\s)\\](?=\\s|$)/,lookbehind:!0,alias:\"operator\"}],\"normal-word\":{pattern:/(^|\\s)[^\"\\s]\\S*(?=\\s|$)/,lookbehind:!0},string:{pattern:/\"(?:\\\\\\S|[^\"\\\\])*\"/,greedy:!0,inside:s}},n=function(e){return(e+\"\").replace(/([.?*+\\^$\\[\\]\\\\(){}|\\-])/g,\"\\\\$1\")},r=function(e){return new RegExp(\"(^|\\\\s)(?:\"+e.map(n).join(\"|\")+\")(?=\\\\s|$)\")},a={\"kernel-builtin\":[\"or\",\"2nipd\",\"4drop\",\"tuck\",\"wrapper\",\"nip\",\"wrapper?\",\"callstack>array\",\"die\",\"dupd\",\"callstack\",\"callstack?\",\"3dup\",\"hashcode\",\"pick\",\"4nip\",\"build\",\">boolean\",\"nipd\",\"clone\",\"5nip\",\"eq?\",\"?\",\"=\",\"swapd\",\"2over\",\"clear\",\"2dup\",\"get-retainstack\",\"not\",\"tuple?\",\"dup\",\"3nipd\",\"call\",\"-rotd\",\"object\",\"drop\",\"assert=\",\"assert?\",\"-rot\",\"execute\",\"boa\",\"get-callstack\",\"curried?\",\"3drop\",\"pickd\",\"overd\",\"over\",\"roll\",\"3nip\",\"swap\",\"and\",\"2nip\",\"rotd\",\"throw\",\"(clone)\",\"hashcode*\",\"spin\",\"reach\",\"4dup\",\"equal?\",\"get-datastack\",\"assert\",\"2drop\",\"<wrapper>\",\"boolean?\",\"identity-hashcode\",\"identity-tuple?\",\"null\",\"composed?\",\"new\",\"5drop\",\"rot\",\"-roll\",\"xor\",\"identity-tuple\",\"boolean\"],\"other-builtin-syntax\":[\"=======\",\"recursive\",\"flushable\",\">>\",\"<<<<<<\",\"M\\\\\",\"B\",\"PRIVATE>\",\"\\\\\",\"======\",\"final\",\"inline\",\"delimiter\",\"deprecated\",\"<PRIVATE\",\">>>>>>\",\"<<<<<<<\",\"parse-complex\",\"malformed-complex\",\"read-only\",\">>>>>>>\",\"call-next-method\",\"<<\",\"foldable\",\"$\",\"$[\",\"${\"],\"sequences-builtin\":[\"member-eq?\",\"mismatch\",\"append\",\"assert-sequence=\",\"longer\",\"repetition\",\"clone-like\",\"3sequence\",\"assert-sequence?\",\"last-index-from\",\"reversed\",\"index-from\",\"cut*\",\"pad-tail\",\"join-as\",\"remove-eq!\",\"concat-as\",\"but-last\",\"snip\",\"nths\",\"nth\",\"sequence\",\"longest\",\"slice?\",\"<slice>\",\"remove-nth\",\"tail-slice\",\"empty?\",\"tail*\",\"member?\",\"virtual-sequence?\",\"set-length\",\"drop-prefix\",\"iota\",\"unclip\",\"bounds-error?\",\"unclip-last-slice\",\"non-negative-integer-expected\",\"non-negative-integer-expected?\",\"midpoint@\",\"longer?\",\"?set-nth\",\"?first\",\"rest-slice\",\"prepend-as\",\"prepend\",\"fourth\",\"sift\",\"subseq-start\",\"new-sequence\",\"?last\",\"like\",\"first4\",\"1sequence\",\"reverse\",\"slice\",\"virtual@\",\"repetition?\",\"set-last\",\"index\",\"4sequence\",\"max-length\",\"set-second\",\"immutable-sequence\",\"first2\",\"first3\",\"supremum\",\"unclip-slice\",\"suffix!\",\"insert-nth\",\"tail\",\"3append\",\"short\",\"suffix\",\"concat\",\"flip\",\"immutable?\",\"reverse!\",\"2sequence\",\"sum\",\"delete-all\",\"indices\",\"snip-slice\",\"<iota>\",\"check-slice\",\"sequence?\",\"head\",\"append-as\",\"halves\",\"sequence=\",\"collapse-slice\",\"?second\",\"slice-error?\",\"product\",\"bounds-check?\",\"bounds-check\",\"immutable\",\"virtual-exemplar\",\"harvest\",\"remove\",\"pad-head\",\"last\",\"set-fourth\",\"cartesian-product\",\"remove-eq\",\"shorten\",\"shorter\",\"reversed?\",\"shorter?\",\"shortest\",\"head-slice\",\"pop*\",\"tail-slice*\",\"but-last-slice\",\"iota?\",\"append!\",\"cut-slice\",\"new-resizable\",\"head-slice*\",\"sequence-hashcode\",\"pop\",\"set-nth\",\"?nth\",\"second\",\"join\",\"immutable-sequence?\",\"<reversed>\",\"3append-as\",\"virtual-sequence\",\"subseq?\",\"remove-nth!\",\"length\",\"last-index\",\"lengthen\",\"assert-sequence\",\"copy\",\"move\",\"third\",\"first\",\"tail?\",\"set-first\",\"prefix\",\"bounds-error\",\"<repetition>\",\"exchange\",\"surround\",\"cut\",\"min-length\",\"set-third\",\"push-all\",\"head?\",\"subseq-start-from\",\"delete-slice\",\"rest\",\"sum-lengths\",\"head*\",\"infimum\",\"remove!\",\"glue\",\"slice-error\",\"subseq\",\"push\",\"replace-slice\",\"subseq-as\",\"unclip-last\"],\"math-builtin\":[\"number=\",\"next-power-of-2\",\"?1+\",\"fp-special?\",\"imaginary-part\",\"float>bits\",\"number?\",\"fp-infinity?\",\"bignum?\",\"fp-snan?\",\"denominator\",\"gcd\",\"*\",\"+\",\"fp-bitwise=\",\"-\",\"u>=\",\"/\",\">=\",\"bitand\",\"power-of-2?\",\"log2-expects-positive\",\"neg?\",\"<\",\"log2\",\">\",\"integer?\",\"number\",\"bits>double\",\"2/\",\"zero?\",\"bits>float\",\"float?\",\"shift\",\"ratio?\",\"rect>\",\"even?\",\"ratio\",\"fp-sign\",\"bitnot\",\">fixnum\",\"complex?\",\"/i\",\"integer>fixnum\",\"/f\",\"sgn\",\">bignum\",\"next-float\",\"u<\",\"u>\",\"mod\",\"recip\",\"rational\",\">float\",\"2^\",\"integer\",\"fixnum?\",\"neg\",\"fixnum\",\"sq\",\"bignum\",\">rect\",\"bit?\",\"fp-qnan?\",\"simple-gcd\",\"complex\",\"<fp-nan>\",\"real\",\">fraction\",\"double>bits\",\"bitor\",\"rem\",\"fp-nan-payload\",\"real-part\",\"log2-expects-positive?\",\"prev-float\",\"align\",\"unordered?\",\"float\",\"fp-nan?\",\"abs\",\"bitxor\",\"integer>fixnum-strict\",\"u<=\",\"odd?\",\"<=\",\"/mod\",\">integer\",\"real?\",\"rational?\",\"numerator\"]};Object.keys(a).forEach((function(e){i[e].pattern=r(a[e])})),i.combinators.pattern=r([\"2bi\",\"while\",\"2tri\",\"bi*\",\"4dip\",\"both?\",\"same?\",\"tri@\",\"curry\",\"prepose\",\"3bi\",\"?if\",\"tri*\",\"2keep\",\"3keep\",\"curried\",\"2keepd\",\"when\",\"2bi*\",\"2tri*\",\"4keep\",\"bi@\",\"keepdd\",\"do\",\"unless*\",\"tri-curry\",\"if*\",\"loop\",\"bi-curry*\",\"when*\",\"2bi@\",\"2tri@\",\"with\",\"2with\",\"either?\",\"bi\",\"until\",\"3dip\",\"3curry\",\"tri-curry*\",\"tri-curry@\",\"bi-curry\",\"keepd\",\"compose\",\"2dip\",\"if\",\"3tri\",\"unless\",\"tuple\",\"keep\",\"2curry\",\"tri\",\"most\",\"while*\",\"dip\",\"composed\",\"bi-curry@\",\"find-last-from\",\"trim-head-slice\",\"map-as\",\"each-from\",\"none?\",\"trim-tail\",\"partition\",\"if-empty\",\"accumulate*\",\"reject!\",\"find-from\",\"accumulate-as\",\"collector-for-as\",\"reject\",\"map\",\"map-sum\",\"accumulate!\",\"2each-from\",\"follow\",\"supremum-by\",\"map!\",\"unless-empty\",\"collector\",\"padding\",\"reduce-index\",\"replicate-as\",\"infimum-by\",\"trim-tail-slice\",\"count\",\"find-index\",\"filter\",\"accumulate*!\",\"reject-as\",\"map-integers\",\"map-find\",\"reduce\",\"selector\",\"interleave\",\"2map\",\"filter-as\",\"binary-reduce\",\"map-index-as\",\"find\",\"produce\",\"filter!\",\"replicate\",\"cartesian-map\",\"cartesian-each\",\"find-index-from\",\"map-find-last\",\"3map-as\",\"3map\",\"find-last\",\"selector-as\",\"2map-as\",\"2map-reduce\",\"accumulate\",\"each\",\"each-index\",\"accumulate*-as\",\"when-empty\",\"all?\",\"collector-as\",\"push-either\",\"new-like\",\"collector-for\",\"2selector\",\"push-if\",\"2all?\",\"map-reduce\",\"3each\",\"any?\",\"trim-slice\",\"2reduce\",\"change-nth\",\"produce-as\",\"2each\",\"trim\",\"trim-head\",\"cartesian-find\",\"map-index\",\"if-zero\",\"each-integer\",\"unless-zero\",\"(find-integer)\",\"when-zero\",\"find-last-integer\",\"(all-integers?)\",\"times\",\"(each-integer)\",\"find-integer\",\"all-integers?\",\"unless-negative\",\"if-positive\",\"when-positive\",\"when-negative\",\"unless-positive\",\"if-negative\",\"case\",\"2cleave\",\"cond>quot\",\"case>quot\",\"3cleave\",\"wrong-values\",\"to-fixed-point\",\"alist>quot\",\"cond\",\"cleave\",\"call-effect\",\"recursive-hashcode\",\"spread\",\"deep-spread>quot\",\"2||\",\"0||\",\"n||\",\"0&&\",\"2&&\",\"3||\",\"1||\",\"1&&\",\"n&&\",\"3&&\",\"smart-unless*\",\"keep-inputs\",\"reduce-outputs\",\"smart-when*\",\"cleave>array\",\"smart-with\",\"smart-apply\",\"smart-if\",\"inputs/outputs\",\"output>sequence-n\",\"map-outputs\",\"map-reduce-outputs\",\"dropping\",\"output>array\",\"smart-map-reduce\",\"smart-2map-reduce\",\"output>array-n\",\"nullary\",\"input<sequence\",\"append-outputs\",\"drop-inputs\",\"inputs\",\"smart-2reduce\",\"drop-outputs\",\"smart-reduce\",\"preserving\",\"smart-when\",\"outputs\",\"append-outputs-as\",\"smart-unless\",\"smart-if*\",\"sum-outputs\",\"input<sequence-unsafe\",\"output>sequence\"]),e.languages.factor=i}(Prism);0/plugins/command-line/prism-command-line.min.css\u0002.command-line-prompt{border-right:1px solid #999;display:block;float:left;font-size:100%;letter-spacing:-1px;margin-right:1em;pointer-events:none;text-align:right;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.command-line-prompt>span:before{opacity:.7;content:' ';display:block;padding-right:.8em}.command-line-prompt>span[data-user]:before{content:\"[\" attr(data-user) \"@\" attr(data-host) \"] $\"}.command-line-prompt>span[data-user=root]:before{content:\"[\" attr(data-user) \"@\" attr(data-host) \"] #\"}.command-line-prompt>span[data-prompt]:before{content:attr(data-prompt)}.command-line-prompt>span[data-continuation-prompt]:before{content:attr(data-continuation-prompt)}.command-line span.token.output{opacity:.7}/themes/prism-funky.min.css\u0007code[class*=language-],pre[class*=language-]{font-family:Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}pre[class*=language-]{padding:.4em .8em;margin:.5em 0;overflow:auto;background:url('data:image/svg+xml;charset=utf-8,<svg%20version%3D\"1.1\"%20xmlns%3D\"http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg\"%20width%3D\"100\"%20height%3D\"100\"%20fill%3D\"rgba(0%2C0%2C0%2C.2)\">%0D%0A<polygon%20points%3D\"0%2C50%2050%2C0%200%2C0\"%20%2F>%0D%0A<polygon%20points%3D\"0%2C100%2050%2C100%20100%2C50%20100%2C0\"%20%2F>%0D%0A<%2Fsvg>');background-size:1em 1em}code[class*=language-]{background:#000;color:#fff;box-shadow:-.3em 0 0 .3em #000,.3em 0 0 .3em #000}:not(pre)>code[class*=language-]{padding:.2em;border-radius:.3em;box-shadow:none;white-space:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#aaa}.token.punctuation{color:#999}.token.namespace{opacity:.7}.token.boolean,.token.constant,.token.number,.token.property,.token.symbol,.token.tag{color:#0cf}.token.attr-name,.token.builtin,.token.char,.token.selector,.token.string{color:#ff0}.language-css .token.string,.token.entity,.token.inserted,.token.operator,.token.url,.token.variable{color:#9acd32}.token.atrule,.token.attr-value,.token.keyword{color:#ff1493}.token.important,.token.regex{color:orange}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.token.deleted{color:red}pre.diff-highlight.diff-highlight>code .token.deleted:not(.prefix),pre>code.diff-highlight.diff-highlight .token.deleted:not(.prefix){background-color:rgba(255,0,0,.3);display:inline}pre.diff-highlight.diff-highlight>code .token.inserted:not(.prefix),pre>code.diff-highlight.diff-highlight .token.inserted:not(.prefix){background-color:rgba(0,255,128,.3);display:inline}/components/prism-kusto.min.js\u0005Prism.languages.kusto={comment:{pattern:/\\/\\/.*/,greedy:!0},string:{pattern:/```[\\s\\S]*?```|[hH]?(?:\"(?:[^\\r\\n\\\\\"]|\\\\.)*\"|'(?:[^\\r\\n\\\\']|\\\\.)*'|@(?:\"[^\\r\\n\"]*\"|'[^\\r\\n']*'))/,greedy:!0},verb:{pattern:/(\\|\\s*)[a-z][\\w-]*/i,lookbehind:!0,alias:\"keyword\"},command:{pattern:/\\.[a-z][a-z\\d-]*\\b/,alias:\"keyword\"},\"class-name\":/\\b(?:bool|datetime|decimal|dynamic|guid|int|long|real|string|timespan)\\b/,keyword:/\\b(?:access|alias|and|anti|as|asc|auto|between|by|(?:contains|(?:ends|starts)with|has(?:perfix|suffix)?)(?:_cs)?|database|declare|desc|external|from|fullouter|has_all|in|ingestion|inline|inner|innerunique|into|(?:left|right)(?:anti(?:semi)?|inner|outer|semi)?|let|like|local|not|of|on|or|pattern|print|query_parameters|range|restrict|schema|set|step|table|tables|to|view|where|with|matches\\s+regex|nulls\\s+(?:first|last))(?![\\w-])/,boolean:/\\b(?:false|null|true)\\b/,function:/\\b[a-z_]\\w*(?=\\s*\\()/,datetime:[{pattern:/\\b(?:(?:Fri|Friday|Mon|Monday|Sat|Saturday|Sun|Sunday|Thu|Thursday|Tue|Tuesday|Wed|Wednesday)\\s*,\\s*)?\\d{1,2}(?:\\s+|-)(?:Apr|Aug|Dec|Feb|Jan|Jul|Jun|Mar|May|Nov|Oct|Sep)(?:\\s+|-)\\d{2}\\s+\\d{2}:\\d{2}(?::\\d{2})?(?:\\s*(?:\\b(?:[A-Z]|(?:[ECMT][DS]|GM|U)T)|[+-]\\d{4}))?\\b/,alias:\"number\"},{pattern:/[+-]?\\b(?:\\d{4}-\\d{2}-\\d{2}(?:[ T]\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d+)?)?)?|\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d+)?)?)Z?/,alias:\"number\"}],number:/\\b(?:0x[0-9A-Fa-f]+|\\d+(?:\\.\\d+)?(?:[Ee][+-]?\\d+)?)(?:(?:min|sec|[mnµ]s|[dhms]|microsecond|tick)\\b)?|[+-]?\\binf\\b/,operator:/=>|[!=]~|[!=<>]=?|[-+*/%|]|\\.\\./,punctuation:/[()\\[\\]{},;.:]/};,/plugins/line-numbers/prism-line-numbers.css\u0003\u000epre[class*=\"language-\"].line-numbers {\n\tposition: relative;\n\tpadding-left: 3.8em;\n\tcounter-reset: linenumber;\n}\n\npre[class*=\"language-\"].line-numbers > code {\n\tposition: relative;\n\twhite-space: inherit;\n}\n\n.line-numbers .line-numbers-rows {\n\tposition: absolute;\n\tpointer-events: none;\n\ttop: 0;\n\tfont-size: 100%;\n\tleft: -3.8em;\n\twidth: 3em; /* works for line-numbers below 1000 lines */\n\tletter-spacing: -1px;\n\tborder-right: 1px solid #999;\n\n\t-webkit-user-select: none;\n\t-moz-user-select: none;\n\t-ms-user-select: none;\n\tuser-select: none;\n\n}\n\n\t.line-numbers-rows > span {\n\t\tdisplay: block;\n\t\tcounter-increment: linenumber;\n\t}\n\n\t\t.line-numbers-rows > span:before {\n\t\t\tcontent: counter(linenumber);\n\t\t\tcolor: #999;\n\t\t\tdisplay: block;\n\t\t\tpadding-right: 0.8em;\n\t\t\ttext-align: right;\n\t\t}\n*/components/prism-markup-templating.min.js\u0004&!function(e){function n(e,n){return\"___\"+e.toUpperCase()+n+\"___\"}Object.defineProperties(e.languages[\"markup-templating\"]={},{buildPlaceholders:{value:function(t,a,r,o){if(t.language===a){var c=t.tokenStack=[];t.code=t.code.replace(r,(function(e){if(\"function\"==typeof o&&!o(e))return e;for(var r,i=c.length;-1!==t.code.indexOf(r=n(a,i));)++i;return c[i]=e,r})),t.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(t,a){if(t.language===a&&t.tokenStack){t.grammar=e.languages[a];var r=0,o=Object.keys(t.tokenStack);!function c(i){for(var u=0;u<i.length&&!(r>=o.length);u++){var g=i[u];if(\"string\"==typeof g||g.content&&\"string\"==typeof g.content){var l=o[r],s=t.tokenStack[l],f=\"string\"==typeof g?g:g.content,p=n(a,l),k=f.indexOf(p);if(k>-1){++r;var m=f.substring(0,k),d=new e.Token(a,e.tokenize(s,t.grammar),\"language-\"+a,s),h=f.substring(k+p.length),v=[];m&&v.push.apply(v,c([m])),v.push(d),h&&v.push.apply(v,c([h])),\"string\"==typeof g?i.splice.apply(i,[u,1].concat(v)):g.content=v}}else g.content&&c(g.content)}return i}(t.tokens)}}}})}(Prism);/components/prism-elixir.js\u000b<Prism.languages.elixir = {\n\t'doc': {\n\t\tpattern: /@(?:doc|moduledoc)\\s+(?:(\"\"\"|''')[\\s\\S]*?\\1|(\"|')(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\2)[^\\\\\\r\\n])*\\2)/,\n\t\tinside: {\n\t\t\t'attribute': /^@\\w+/,\n\t\t\t'string': /['\"][\\s\\S]+/\n\t\t}\n\t},\n\t'comment': {\n\t\tpattern: /#.*/,\n\t\tgreedy: true\n\t},\n\t// ~r\"\"\"foo\"\"\" (multi-line), ~r'''foo''' (multi-line), ~r/foo/, ~r|foo|, ~r\"foo\", ~r'foo', ~r(foo), ~r[foo], ~r{foo}, ~r<foo>\n\t'regex': {\n\t\tpattern: /~[rR](?:(\"\"\"|''')(?:\\\\[\\s\\S]|(?!\\1)[^\\\\])+\\1|([\\/|\"'])(?:\\\\.|(?!\\2)[^\\\\\\r\\n])+\\2|\\((?:\\\\.|[^\\\\)\\r\\n])+\\)|\\[(?:\\\\.|[^\\\\\\]\\r\\n])+\\]|\\{(?:\\\\.|[^\\\\}\\r\\n])+\\}|<(?:\\\\.|[^\\\\>\\r\\n])+>)[uismxfr]*/,\n\t\tgreedy: true\n\t},\n\t'string': [\n\t\t{\n\t\t\t// ~s\"\"\"foo\"\"\" (multi-line), ~s'''foo''' (multi-line), ~s/foo/, ~s|foo|, ~s\"foo\", ~s'foo', ~s(foo), ~s[foo], ~s{foo} (with interpolation care), ~s<foo>\n\t\t\tpattern: /~[cCsSwW](?:(\"\"\"|''')(?:\\\\[\\s\\S]|(?!\\1)[^\\\\])+\\1|([\\/|\"'])(?:\\\\.|(?!\\2)[^\\\\\\r\\n])+\\2|\\((?:\\\\.|[^\\\\)\\r\\n])+\\)|\\[(?:\\\\.|[^\\\\\\]\\r\\n])+\\]|\\{(?:\\\\.|#\\{[^}]+\\}|#(?!\\{)|[^#\\\\}\\r\\n])+\\}|<(?:\\\\.|[^\\\\>\\r\\n])+>)[csa]?/,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t// See interpolation below\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tpattern: /(\"\"\"|''')[\\s\\S]*?\\1/,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t// See interpolation below\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t// Multi-line strings are allowed\n\t\t\tpattern: /(\"|')(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1/,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t// See interpolation below\n\t\t\t}\n\t\t}\n\t],\n\t'atom': {\n\t\t// Look-behind prevents bad highlighting of the :: operator\n\t\tpattern: /(^|[^:]):\\w+/,\n\t\tlookbehind: true,\n\t\talias: 'symbol'\n\t},\n\t'module': {\n\t\tpattern: /\\b[A-Z]\\w*\\b/,\n\t\talias: 'class-name'\n\t},\n\t// Look-ahead prevents bad highlighting of the :: operator\n\t'attr-name': /\\b\\w+\\??:(?!:)/,\n\t'argument': {\n\t\t// Look-behind prevents bad highlighting of the && operator\n\t\tpattern: /(^|[^&])&\\d+/,\n\t\tlookbehind: true,\n\t\talias: 'variable'\n\t},\n\t'attribute': {\n\t\tpattern: /@\\w+/,\n\t\talias: 'variable'\n\t},\n\t'function': /\\b[_a-zA-Z]\\w*[?!]?(?:(?=\\s*(?:\\.\\s*)?\\()|(?=\\/\\d))/,\n\t'number': /\\b(?:0[box][a-f\\d_]+|\\d[\\d_]*)(?:\\.[\\d_]+)?(?:e[+-]?[\\d_]+)?\\b/i,\n\t'keyword': /\\b(?:after|alias|and|case|catch|cond|def(?:callback|delegate|exception|impl|macro|module|n|np|p|protocol|struct)?|do|else|end|fn|for|if|import|not|or|quote|raise|require|rescue|try|unless|unquote|use|when)\\b/,\n\t'boolean': /\\b(?:false|nil|true)\\b/,\n\t'operator': [\n\t\t/\\bin\\b|&&?|\\|[|>]?|\\\\\\\\|::|\\.\\.\\.?|\\+\\+?|-[->]?|<[-=>]|>=|!==?|\\B!|=(?:==?|[>~])?|[*\\/^]/,\n\t\t{\n\t\t\t// We don't want to match <<\n\t\t\tpattern: /([^<])<(?!<)/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t{\n\t\t\t// We don't want to match >>\n\t\t\tpattern: /([^>])>(?!>)/,\n\t\t\tlookbehind: true\n\t\t}\n\t],\n\t'punctuation': /<<|>>|[.,%\\[\\]{}()]/\n};\n\nPrism.languages.elixir.string.forEach(function (o) {\n\to.inside = {\n\t\t'interpolation': {\n\t\t\tpattern: /#\\{[^}]+\\}/,\n\t\t\tinside: {\n\t\t\t\t'delimiter': {\n\t\t\t\t\tpattern: /^#\\{|\\}$/,\n\t\t\t\t\talias: 'punctuation'\n\t\t\t\t},\n\t\t\t\trest: Prism.languages.elixir\n\t\t\t}\n\t\t}\n\t};\n});\n/components/prism-graphql.js\u0015\u001fPrism.languages.graphql = {\n\t'comment': /#.*/,\n\t'description': {\n\t\tpattern: /(?:\"\"\"(?:[^\"]|(?!\"\"\")\")*\"\"\"|\"(?:\\\\.|[^\\\\\"\\r\\n])*\")(?=\\s*[a-z_])/i,\n\t\tgreedy: true,\n\t\talias: 'string',\n\t\tinside: {\n\t\t\t'language-markdown': {\n\t\t\t\tpattern: /(^\"(?:\"\")?)(?!\\1)[\\s\\S]+(?=\\1$)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: Prism.languages.markdown\n\t\t\t}\n\t\t}\n\t},\n\t'string': {\n\t\tpattern: /\"\"\"(?:[^\"]|(?!\"\"\")\")*\"\"\"|\"(?:\\\\.|[^\\\\\"\\r\\n])*\"/,\n\t\tgreedy: true\n\t},\n\t'number': /(?:\\B-|\\b)\\d+(?:\\.\\d+)?(?:e[+-]?\\d+)?\\b/i,\n\t'boolean': /\\b(?:false|true)\\b/,\n\t'variable': /\\$[a-z_]\\w*/i,\n\t'directive': {\n\t\tpattern: /@[a-z_]\\w*/i,\n\t\talias: 'function'\n\t},\n\t'attr-name': {\n\t\tpattern: /\\b[a-z_]\\w*(?=\\s*(?:\\((?:[^()\"]|\"(?:\\\\.|[^\\\\\"\\r\\n])*\")*\\))?:)/i,\n\t\tgreedy: true\n\t},\n\t'atom-input': {\n\t\tpattern: /\\b[A-Z]\\w*Input\\b/,\n\t\talias: 'class-name'\n\t},\n\t'scalar': /\\b(?:Boolean|Float|ID|Int|String)\\b/,\n\t'constant': /\\b[A-Z][A-Z_\\d]*\\b/,\n\t'class-name': {\n\t\tpattern: /(\\b(?:enum|implements|interface|on|scalar|type|union)\\s+|&\\s*|:\\s*|\\[)[A-Z_]\\w*/,\n\t\tlookbehind: true\n\t},\n\t'fragment': {\n\t\tpattern: /(\\bfragment\\s+|\\.{3}\\s*(?!on\\b))[a-zA-Z_]\\w*/,\n\t\tlookbehind: true,\n\t\talias: 'function'\n\t},\n\t'definition-mutation': {\n\t\tpattern: /(\\bmutation\\s+)[a-zA-Z_]\\w*/,\n\t\tlookbehind: true,\n\t\talias: 'function'\n\t},\n\t'definition-query': {\n\t\tpattern: /(\\bquery\\s+)[a-zA-Z_]\\w*/,\n\t\tlookbehind: true,\n\t\talias: 'function'\n\t},\n\t'keyword': /\\b(?:directive|enum|extend|fragment|implements|input|interface|mutation|on|query|repeatable|scalar|schema|subscription|type|union)\\b/,\n\t'operator': /[!=|&]|\\.{3}/,\n\t'property-query': /\\w+(?=\\s*\\()/,\n\t'object': /\\w+(?=\\s*\\{)/,\n\t'punctuation': /[!(){}\\[\\]:=,]/,\n\t'property': /\\w+/\n};\n\nPrism.hooks.add('after-tokenize', function afterTokenizeGraphql(env) {\n\tif (env.language !== 'graphql') {\n\t\treturn;\n\t}\n\n\t/**\n\t * get the graphql token stream that we want to customize\n\t *\n\t * @typedef {InstanceType<import(\"./prism-core\")[\"Token\"]>} Token\n\t * @type {Token[]}\n\t */\n\tvar validTokens = env.tokens.filter(function (token) {\n\t\treturn typeof token !== 'string' && token.type !== 'comment' && token.type !== 'scalar';\n\t});\n\n\tvar currentIndex = 0;\n\n\t/**\n\t * Returns whether the token relative to the current index has the given type.\n\t *\n\t * @param {number} offset\n\t * @returns {Token | undefined}\n\t */\n\tfunction getToken(offset) {\n\t\treturn validTokens[currentIndex + offset];\n\t}\n\n\t/**\n\t * Returns whether the token relative to the current index has the given type.\n\t *\n\t * @param {readonly string[]} types\n\t * @param {number} [offset=0]\n\t * @returns {boolean}\n\t */\n\tfunction isTokenType(types, offset) {\n\t\toffset = offset || 0;\n\t\tfor (var i = 0; i < types.length; i++) {\n\t\t\tvar token = getToken(i + offset);\n\t\t\tif (!token || token.type !== types[i]) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\t/**\n\t * Returns the index of the closing bracket to an opening bracket.\n\t *\n\t * It is assumed that `token[currentIndex - 1]` is an opening bracket.\n\t *\n\t * If no closing bracket could be found, `-1` will be returned.\n\t *\n\t * @param {RegExp} open\n\t * @param {RegExp} close\n\t * @returns {number}\n\t */\n\tfunction findClosingBracket(open, close) {\n\t\tvar stackHeight = 1;\n\n\t\tfor (var i = currentIndex; i < validTokens.length; i++) {\n\t\t\tvar token = validTokens[i];\n\t\t\tvar content = token.content;\n\n\t\t\tif (token.type === 'punctuation' && typeof content === 'string') {\n\t\t\t\tif (open.test(content)) {\n\t\t\t\t\tstackHeight++;\n\t\t\t\t} else if (close.test(content)) {\n\t\t\t\t\tstackHeight--;\n\n\t\t\t\t\tif (stackHeight === 0) {\n\t\t\t\t\t\treturn i;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn -1;\n\t}\n\n\t/**\n\t * Adds an alias to the given token.\n\t *\n\t * @param {Token} token\n\t * @param {string} alias\n\t * @returns {void}\n\t */\n\tfunction addAlias(token, alias) {\n\t\tvar aliases = token.alias;\n\t\tif (!aliases) {\n\t\t\ttoken.alias = aliases = [];\n\t\t} else if (!Array.isArray(aliases)) {\n\t\t\ttoken.alias = aliases = [aliases];\n\t\t}\n\t\taliases.push(alias);\n\t}\n\n\tfor (; currentIndex < validTokens.length;) {\n\t\tvar startToken = validTokens[currentIndex++];\n\n\t\t// add special aliases for mutation tokens\n\t\tif (startToken.type === 'keyword' && startToken.content === 'mutation') {\n\t\t\t// any array of the names of all input variables (if any)\n\t\t\tvar inputVariables = [];\n\n\t\t\tif (isTokenType(['definition-mutation', 'punctuation']) && getToken(1).content === '(') {\n\t\t\t\t// definition\n\n\t\t\t\tcurrentIndex += 2; // skip 'definition-mutation' and 'punctuation'\n\n\t\t\t\tvar definitionEnd = findClosingBracket(/^\\($/, /^\\)$/);\n\t\t\t\tif (definitionEnd === -1) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// find all input variables\n\t\t\t\tfor (; currentIndex < definitionEnd; currentIndex++) {\n\t\t\t\t\tvar t = getToken(0);\n\t\t\t\t\tif (t.type === 'variable') {\n\t\t\t\t\t\taddAlias(t, 'variable-input');\n\t\t\t\t\t\tinputVariables.push(t.content);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcurrentIndex = definitionEnd + 1;\n\t\t\t}\n\n\t\t\tif (isTokenType(['punctuation', 'property-query']) && getToken(0).content === '{') {\n\t\t\t\tcurrentIndex++; // skip opening bracket\n\n\t\t\t\taddAlias(getToken(0), 'property-mutation');\n\n\t\t\t\tif (inputVariables.length > 0) {\n\t\t\t\t\tvar mutationEnd = findClosingBracket(/^\\{$/, /^\\}$/);\n\t\t\t\t\tif (mutationEnd === -1) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\t// give references to input variables a special alias\n\t\t\t\t\tfor (var i = currentIndex; i < mutationEnd; i++) {\n\t\t\t\t\t\tvar varToken = validTokens[i];\n\t\t\t\t\t\tif (varToken.type === 'variable' && inputVariables.indexOf(varToken.content) >= 0) {\n\t\t\t\t\t\t\taddAlias(varToken, 'variable-input');\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n});\nC/plugins/remove-initial-line-feed/prism-remove-initial-line-feed.js\u0002&(function () {\n\n\tif (typeof Prism === 'undefined' || typeof document === 'undefined') {\n\t\treturn;\n\t}\n\n\tPrism.hooks.add('before-sanity-check', function (env) {\n\t\tif (env.code) {\n\t\t\tvar pre = env.element.parentNode;\n\t\t\tvar clsReg = /(?:^|\\s)keep-initial-line-feed(?:\\s|$)/;\n\t\t\tif (\n\t\t\t\tpre && pre.nodeName.toLowerCase() === 'pre' &&\n\t\t\t\t// Apply only if nor the <pre> or the <code> have the class\n\t\t\t\t(!clsReg.test(pre.className) && !clsReg.test(env.element.className))\n\t\t\t) {\n\t\t\t\tenv.code = env.code.replace(/^(?:\\r?\\n|\\r)/, '');\n\t\t\t}\n\t\t}\n\t});\n\n}());\n/components/prism-julia.min.js\u0003Prism.languages.julia={comment:{pattern:/(^|[^\\\\])(?:#=(?:[^#=]|=(?!#)|#(?!=)|#=(?:[^#=]|=(?!#)|#(?!=))*=#)*=#|#.*)/,lookbehind:!0},regex:{pattern:/r\"(?:\\\\.|[^\"\\\\\\r\\n])*\"[imsx]{0,4}/,greedy:!0},string:{pattern:/\"\"\"[\\s\\S]+?\"\"\"|(?:\\b\\w+)?\"(?:\\\\.|[^\"\\\\\\r\\n])*\"|`(?:[^\\\\`\\r\\n]|\\\\.)*`/,greedy:!0},char:{pattern:/(^|[^\\w'])'(?:\\\\[^\\r\\n][^'\\r\\n]*|[^\\\\\\r\\n])'/,lookbehind:!0,greedy:!0},keyword:/\\b(?:abstract|baremodule|begin|bitstype|break|catch|ccall|const|continue|do|else|elseif|end|export|finally|for|function|global|if|immutable|import|importall|in|let|local|macro|module|print|println|quote|return|struct|try|type|typealias|using|while)\\b/,boolean:/\\b(?:false|true)\\b/,number:/(?:\\b(?=\\d)|\\B(?=\\.))(?:0[box])?(?:[\\da-f]+(?:_[\\da-f]+)*(?:\\.(?:\\d+(?:_\\d+)*)?)?|\\.\\d+(?:_\\d+)*)(?:[efp][+-]?\\d+(?:_\\d+)*)?j?/i,operator:/&&|\\|\\||[-+*^%÷⊻&$\\\\]=?|\\/[\\/=]?|!=?=?|\\|[=>]?|<(?:<=?|[=:|])?|>(?:=|>>?=?)?|==?=?|[~≠≤≥'√∛]/,punctuation:/::?|[{}[\\]();,.?]/,constant:/\\b(?:(?:Inf|NaN)(?:16|32|64)?|im|pi)\\b|[πℯ]/};/components/prism-batch.min.js\u0006!function(e){var r=/%%?[~:\\w]+%?|!\\S+!/,t={pattern:/\\/[a-z?]+(?=[ :]|$):?|-[a-z]\\b|--[a-z-]+\\b/im,alias:\"attr-name\",inside:{punctuation:/:/}},n=/\"(?:[\\\\\"]\"|[^\"])*\"(?!\")/,i=/(?:\\b|-)\\d+\\b/;e.languages.batch={comment:[/^::.*/m,{pattern:/((?:^|[&(])[ \\t]*)rem\\b(?:[^^&)\\r\\n]|\\^(?:\\r\\n|[\\s\\S]))*/im,lookbehind:!0}],label:{pattern:/^:.*/m,alias:\"property\"},command:[{pattern:/((?:^|[&(])[ \\t]*)for(?: \\/[a-z?](?:[ :](?:\"[^\"]*\"|[^\\s\"/]\\S*))?)* \\S+ in \\([^)]+\\) do/im,lookbehind:!0,inside:{keyword:/\\b(?:do|in)\\b|^for\\b/i,string:n,parameter:t,variable:r,number:i,punctuation:/[()',]/}},{pattern:/((?:^|[&(])[ \\t]*)if(?: \\/[a-z?](?:[ :](?:\"[^\"]*\"|[^\\s\"/]\\S*))?)* (?:not )?(?:cmdextversion \\d+|defined \\w+|errorlevel \\d+|exist \\S+|(?:\"[^\"]*\"|(?!\")(?:(?!==)\\S)+)?(?:==| (?:equ|geq|gtr|leq|lss|neq) )(?:\"[^\"]*\"|[^\\s\"]\\S*))/im,lookbehind:!0,inside:{keyword:/\\b(?:cmdextversion|defined|errorlevel|exist|not)\\b|^if\\b/i,string:n,parameter:t,variable:r,number:i,operator:/\\^|==|\\b(?:equ|geq|gtr|leq|lss|neq)\\b/i}},{pattern:/((?:^|[&()])[ \\t]*)else\\b/im,lookbehind:!0,inside:{keyword:/^else\\b/i}},{pattern:/((?:^|[&(])[ \\t]*)set(?: \\/[a-z](?:[ :](?:\"[^\"]*\"|[^\\s\"/]\\S*))?)* (?:[^^&)\\r\\n]|\\^(?:\\r\\n|[\\s\\S]))*/im,lookbehind:!0,inside:{keyword:/^set\\b/i,string:n,parameter:t,variable:[r,/\\w+(?=(?:[*\\/%+\\-&^|]|<<|>>)?=)/],number:i,operator:/[*\\/%+\\-&^|]=?|<<=?|>>=?|[!~_=]/,punctuation:/[()',]/}},{pattern:/((?:^|[&(])[ \\t]*@?)\\w+\\b(?:\"(?:[\\\\\"]\"|[^\"])*\"(?!\")|[^\"^&)\\r\\n]|\\^(?:\\r\\n|[\\s\\S]))*/m,lookbehind:!0,inside:{keyword:/^\\w+\\b/,string:n,parameter:t,label:{pattern:/(^\\s*):\\S+/m,lookbehind:!0,alias:\"property\"},variable:r,number:i,operator:/\\^/}}],operator:/[&@]/,punctuation:/[()']/}}(Prism);/components/prism-erb.js\u0002(function (Prism) {\n\n\tPrism.languages.erb = {\n\t\t'delimiter': {\n\t\t\tpattern: /^(\\s*)<%=?|%>(?=\\s*$)/,\n\t\t\tlookbehind: true,\n\t\t\talias: 'punctuation'\n\t\t},\n\t\t'ruby': {\n\t\t\tpattern: /\\s*\\S[\\s\\S]*/,\n\t\t\talias: 'language-ruby',\n\t\t\tinside: Prism.languages.ruby\n\t\t}\n\t};\n\n\tPrism.hooks.add('before-tokenize', function (env) {\n\t\tvar erbPattern = /<%=?(?:[^\\r\\n]|[\\r\\n](?!=begin)|[\\r\\n]=begin\\s(?:[^\\r\\n]|[\\r\\n](?!=end))*[\\r\\n]=end)+?%>/g;\n\t\tPrism.languages['markup-templating'].buildPlaceholders(env, 'erb', erbPattern);\n\t});\n\n\tPrism.hooks.add('after-tokenize', function (env) {\n\t\tPrism.languages['markup-templating'].tokenizePlaceholders(env, 'erb');\n\t});\n\n}(Prism));\n/components/prism-jsdoc.js\b\u001d(function (Prism) {\n\n\tvar javascript = Prism.languages.javascript;\n\n\tvar type = /\\{(?:[^{}]|\\{(?:[^{}]|\\{[^{}]*\\})*\\})+\\}/.source;\n\tvar parameterPrefix = '(@(?:arg|argument|param|property)\\\\s+(?:' + type + '\\\\s+)?)';\n\n\tPrism.languages.jsdoc = Prism.languages.extend('javadoclike', {\n\t\t'parameter': {\n\t\t\t// @param {string} foo - foo bar\n\t\t\tpattern: RegExp(parameterPrefix + /(?:(?!\\s)[$\\w\\xA0-\\uFFFF.])+(?=\\s|$)/.source),\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'punctuation': /\\./\n\t\t\t}\n\t\t}\n\t});\n\n\tPrism.languages.insertBefore('jsdoc', 'keyword', {\n\t\t'optional-parameter': {\n\t\t\t// @param {string} [baz.foo=\"bar\"] foo bar\n\t\t\tpattern: RegExp(parameterPrefix + /\\[(?:(?!\\s)[$\\w\\xA0-\\uFFFF.])+(?:=[^[\\]]+)?\\](?=\\s|$)/.source),\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'parameter': {\n\t\t\t\t\tpattern: /(^\\[)[$\\w\\xA0-\\uFFFF\\.]+/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'punctuation': /\\./\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t'code': {\n\t\t\t\t\tpattern: /(=)[\\s\\S]*(?=\\]$)/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tinside: javascript,\n\t\t\t\t\talias: 'language-javascript'\n\t\t\t\t},\n\t\t\t\t'punctuation': /[=[\\]]/\n\t\t\t}\n\t\t},\n\t\t'class-name': [\n\t\t\t{\n\t\t\t\tpattern: RegExp(/(@(?:augments|class|extends|interface|memberof!?|template|this|typedef)\\s+(?:<TYPE>\\s+)?)[A-Z]\\w*(?:\\.[A-Z]\\w*)*/.source.replace(/<TYPE>/g, function () { return type; })),\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': /\\./\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: RegExp('(@[a-z]+\\\\s+)' + type),\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'string': javascript.string,\n\t\t\t\t\t'number': javascript.number,\n\t\t\t\t\t'boolean': javascript.boolean,\n\t\t\t\t\t'keyword': Prism.languages.typescript.keyword,\n\t\t\t\t\t'operator': /=>|\\.\\.\\.|[&|?:*]/,\n\t\t\t\t\t'punctuation': /[.,;=<>{}()[\\]]/\n\t\t\t\t}\n\t\t\t}\n\t\t],\n\t\t'example': {\n\t\t\tpattern: /(@example\\s+(?!\\s))(?:[^@\\s]|\\s+(?!\\s))+?(?=\\s*(?:\\*\\s*)?(?:@\\w|\\*\\/))/,\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'code': {\n\t\t\t\t\tpattern: /^([\\t ]*(?:\\*\\s*)?)\\S.*$/m,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tinside: javascript,\n\t\t\t\t\talias: 'language-javascript'\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\tPrism.languages.javadoclike.addSupport('javascript', Prism.languages.jsdoc);\n\n}(Prism));\n/components/prism-xeora.js\n\t(function (Prism) {\n\tPrism.languages.xeora = Prism.languages.extend('markup', {\n\t\t'constant': {\n\t\t\tpattern: /\\$(?:DomainContents|PageRenderDuration)\\$/,\n\t\t\tinside: {\n\t\t\t\t'punctuation': {\n\t\t\t\t\tpattern: /\\$/\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t'variable': {\n\t\t\tpattern: /\\$@?(?:#+|[-+*~=^])?[\\w.]+\\$/,\n\t\t\tinside: {\n\t\t\t\t'punctuation': {\n\t\t\t\t\tpattern: /[$.]/\n\t\t\t\t},\n\t\t\t\t'operator': {\n\t\t\t\t\tpattern: /#+|[-+*~=^@]/\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t'function-inline': {\n\t\t\tpattern: /\\$F:[-\\w.]+\\?[-\\w.]+(?:,(?:(?:@[-#]*\\w+\\.[\\w+.]\\.*)*\\|)*(?:(?:[\\w+]|[-#*.~^]+[\\w+]|=\\S)(?:[^$=]|=+[^=])*=*|(?:@[-#]*\\w+\\.[\\w+.]\\.*)+(?:(?:[\\w+]|[-#*~^][-#*.~^]*[\\w+]|=\\S)(?:[^$=]|=+[^=])*=*)?)?)?\\$/,\n\t\t\tinside: {\n\t\t\t\t'variable': {\n\t\t\t\t\tpattern: /(?:[,|])@?(?:#+|[-+*~=^])?[\\w.]+/,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'punctuation': {\n\t\t\t\t\t\t\tpattern: /[,.|]/\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'operator': {\n\t\t\t\t\t\t\tpattern: /#+|[-+*~=^@]/\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t'punctuation': {\n\t\t\t\t\tpattern: /\\$\\w:|[$:?.,|]/\n\t\t\t\t}\n\t\t\t},\n\t\t\talias: 'function'\n\t\t},\n\t\t'function-block': {\n\t\t\tpattern: /\\$XF:\\{[-\\w.]+\\?[-\\w.]+(?:,(?:(?:@[-#]*\\w+\\.[\\w+.]\\.*)*\\|)*(?:(?:[\\w+]|[-#*.~^]+[\\w+]|=\\S)(?:[^$=]|=+[^=])*=*|(?:@[-#]*\\w+\\.[\\w+.]\\.*)+(?:(?:[\\w+]|[-#*~^][-#*.~^]*[\\w+]|=\\S)(?:[^$=]|=+[^=])*=*)?)?)?\\}:XF\\$/,\n\t\t\tinside: {\n\t\t\t\t'punctuation': {\n\t\t\t\t\tpattern: /[$:{}?.,|]/\n\t\t\t\t}\n\t\t\t},\n\t\t\talias: 'function'\n\t\t},\n\t\t'directive-inline': {\n\t\t\tpattern: /\\$\\w(?:#\\d+\\+?)?(?:\\[[-\\w.]+\\])?:[-\\/\\w.]+\\$/,\n\t\t\tinside: {\n\t\t\t\t'punctuation': {\n\t\t\t\t\tpattern: /\\$(?:\\w:|C(?:\\[|#\\d))?|[:{[\\]]/,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'tag': {\n\t\t\t\t\t\t\tpattern: /#\\d/\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\talias: 'function'\n\t\t},\n\t\t'directive-block-open': {\n\t\t\tpattern: /\\$\\w+:\\{|\\$\\w(?:#\\d+\\+?)?(?:\\[[-\\w.]+\\])?:[-\\w.]+:\\{(?:![A-Z]+)?/,\n\t\t\tinside: {\n\t\t\t\t'punctuation': {\n\t\t\t\t\tpattern: /\\$(?:\\w:|C(?:\\[|#\\d))?|[:{[\\]]/,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'tag': {\n\t\t\t\t\t\t\tpattern: /#\\d/\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t'attribute': {\n\t\t\t\t\tpattern: /![A-Z]+$/,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'punctuation': {\n\t\t\t\t\t\t\tpattern: /!/\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\talias: 'keyword'\n\t\t\t\t}\n\t\t\t},\n\t\t\talias: 'function'\n\t\t},\n\t\t'directive-block-separator': {\n\t\t\tpattern: /\\}:[-\\w.]+:\\{/,\n\t\t\tinside: {\n\t\t\t\t'punctuation': {\n\t\t\t\t\tpattern: /[:{}]/\n\t\t\t\t}\n\t\t\t},\n\t\t\talias: 'function'\n\t\t},\n\t\t'directive-block-close': {\n\t\t\tpattern: /\\}:[-\\w.]+\\$/,\n\t\t\tinside: {\n\t\t\t\t'punctuation': {\n\t\t\t\t\tpattern: /[:{}$]/\n\t\t\t\t}\n\t\t\t},\n\t\t\talias: 'function'\n\t\t}\n\t});\n\n\tPrism.languages.insertBefore('inside', 'punctuation', {\n\t\t'variable': Prism.languages.xeora['function-inline'].inside['variable']\n\t}, Prism.languages.xeora['function-block']);\n\n\tPrism.languages.xeoracube = Prism.languages.xeora;\n\n}(Prism));\n/components/prism-idris.js\u0002Prism.languages.idris = Prism.languages.extend('haskell', {\n\t'comment': {\n\t\tpattern: /(?:(?:--|\\|\\|\\|).*$|\\{-[\\s\\S]*?-\\})/m,\n\t},\n\t'keyword': /\\b(?:Type|case|class|codata|constructor|corecord|data|do|dsl|else|export|if|implementation|implicit|import|impossible|in|infix|infixl|infixr|instance|interface|let|module|mutual|namespace|of|parameters|partial|postulate|private|proof|public|quoteGoal|record|rewrite|syntax|then|total|using|where|with)\\b/,\n\t'builtin': undefined\n});\n\nPrism.languages.insertBefore('idris', 'keyword', {\n\t'import-statement': {\n\t\tpattern: /(^\\s*import\\s+)(?:[A-Z][\\w']*)(?:\\.[A-Z][\\w']*)*/m,\n\t\tlookbehind: true,\n\t\tinside: {\n\t\t\t'punctuation': /\\./\n\t\t}\n\t}\n});\n\nPrism.languages.idr = Prism.languages.idris;\n /components/prism-mermaid.min.js\b Prism.languages.mermaid={comment:{pattern:/%%.*/,greedy:!0},style:{pattern:/^([ \\t]*(?:classDef|linkStyle|style)[ \\t]+[\\w$-]+[ \\t]+)\\w.*[^\\s;]/m,lookbehind:!0,inside:{property:/\\b\\w[\\w-]*(?=[ \\t]*:)/,operator:/:/,punctuation:/,/}},\"inter-arrow-label\":{pattern:/([^<>ox.=-])(?:-[-.]|==)(?![<>ox.=-])[ \\t]*(?:\"[^\"\\r\\n]*\"|[^\\s\".=-](?:[^\\r\\n.=-]*[^\\s.=-])?)[ \\t]*(?:\\.+->?|--+[->]|==+[=>])(?![<>ox.=-])/,lookbehind:!0,greedy:!0,inside:{arrow:{pattern:/(?:\\.+->?|--+[->]|==+[=>])$/,alias:\"operator\"},label:{pattern:/^([\\s\\S]{2}[ \\t]*)\\S(?:[\\s\\S]*\\S)?/,lookbehind:!0,alias:\"property\"},\"arrow-head\":{pattern:/^\\S+/,alias:[\"arrow\",\"operator\"]}}},arrow:[{pattern:/(^|[^{}|o.-])[|}][|o](?:--|\\.\\.)[|o][|{](?![{}|o.-])/,lookbehind:!0,alias:\"operator\"},{pattern:/(^|[^<>ox.=-])(?:[<ox](?:==+|--+|-\\.*-)[>ox]?|(?:==+|--+|-\\.*-)[>ox]|===+|---+|-\\.+-)(?![<>ox.=-])/,lookbehind:!0,alias:\"operator\"},{pattern:/(^|[^<>()x-])(?:--?(?:>>|[x>)])(?![<>()x])|(?:<<|[x<(])--?(?!-))/,lookbehind:!0,alias:\"operator\"},{pattern:/(^|[^<>|*o.-])(?:[*o]--|--[*o]|<\\|?(?:--|\\.\\.)|(?:--|\\.\\.)\\|?>|--|\\.\\.)(?![<>|*o.-])/,lookbehind:!0,alias:\"operator\"}],label:{pattern:/(^|[^|<])\\|(?:[^\\r\\n\"|]|\"[^\"\\r\\n]*\")+\\|/,lookbehind:!0,greedy:!0,alias:\"property\"},text:{pattern:/(?:[(\\[{]+|\\b>)(?:[^\\r\\n\"()\\[\\]{}]|\"[^\"\\r\\n]*\")+(?:[)\\]}]+|>)/,alias:\"string\"},string:{pattern:/\"[^\"\\r\\n]*\"/,greedy:!0},annotation:{pattern:/<<(?:abstract|choice|enumeration|fork|interface|join|service)>>|\\[\\[(?:choice|fork|join)\\]\\]/i,alias:\"important\"},keyword:[{pattern:/(^[ \\t]*)(?:action|callback|class|classDef|classDiagram|click|direction|erDiagram|flowchart|gantt|gitGraph|graph|journey|link|linkStyle|pie|requirementDiagram|sequenceDiagram|stateDiagram|stateDiagram-v2|style|subgraph)(?![\\w$-])/m,lookbehind:!0,greedy:!0},{pattern:/(^[ \\t]*)(?:activate|alt|and|as|autonumber|deactivate|else|end(?:[ \\t]+note)?|loop|opt|par|participant|rect|state|note[ \\t]+(?:over|(?:left|right)[ \\t]+of))(?![\\w$-])/im,lookbehind:!0,greedy:!0}],entity:/#[a-z0-9]+;/,operator:{pattern:/(\\w[ \\t]*)&(?=[ \\t]*\\w)|:::|:/,lookbehind:!0},punctuation:/[(){};]/};/components/prism-ini.js\u0003Prism.languages.ini = {\n\n\t/**\n\t * The component mimics the behavior of the Win32 API parser.\n\t *\n\t * @see {@link https://github.com/PrismJS/prism/issues/2775#issuecomment-787477723}\n\t */\n\n\t'comment': {\n\t\tpattern: /(^[ \\f\\t\\v]*)[#;][^\\n\\r]*/m,\n\t\tlookbehind: true\n\t},\n\t'section': {\n\t\tpattern: /(^[ \\f\\t\\v]*)\\[[^\\n\\r\\]]*\\]?/m,\n\t\tlookbehind: true,\n\t\tinside: {\n\t\t\t'section-name': {\n\t\t\t\tpattern: /(^\\[[ \\f\\t\\v]*)[^ \\f\\t\\v\\]]+(?:[ \\f\\t\\v]+[^ \\f\\t\\v\\]]+)*/,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'selector'\n\t\t\t},\n\t\t\t'punctuation': /\\[|\\]/\n\t\t}\n\t},\n\t'key': {\n\t\tpattern: /(^[ \\f\\t\\v]*)[^ \\f\\n\\r\\t\\v=]+(?:[ \\f\\t\\v]+[^ \\f\\n\\r\\t\\v=]+)*(?=[ \\f\\t\\v]*=)/m,\n\t\tlookbehind: true,\n\t\talias: 'attr-name'\n\t},\n\t'value': {\n\t\tpattern: /(=[ \\f\\t\\v]*)[^ \\f\\n\\r\\t\\v]+(?:[ \\f\\t\\v]+[^ \\f\\n\\r\\t\\v]+)*/,\n\t\tlookbehind: true,\n\t\talias: 'attr-value',\n\t\tinside: {\n\t\t\t'inner-value': {\n\t\t\t\tpattern: /^(\"|').+(?=\\1$)/,\n\t\t\t\tlookbehind: true\n\t\t\t}\n\t\t}\n\t},\n\t'punctuation': /=/\n};\n/components/prism-csp.min.js\u0004u!function(e){function n(e){return RegExp(\"([ \\t])(?:\"+e+\")(?=[\\\\s;]|$)\",\"i\")}e.languages.csp={directive:{pattern:/(^|[\\s;])(?:base-uri|block-all-mixed-content|(?:child|connect|default|font|frame|img|manifest|media|object|prefetch|script|style|worker)-src|disown-opener|form-action|frame-(?:ancestors|options)|input-protection(?:-(?:clip|selectors))?|navigate-to|plugin-types|policy-uri|referrer|reflected-xss|report-(?:to|uri)|require-sri-for|sandbox|(?:script|style)-src-(?:attr|elem)|upgrade-insecure-requests)(?=[\\s;]|$)/i,lookbehind:!0,alias:\"property\"},scheme:{pattern:n(\"[a-z][a-z0-9.+-]*:\"),lookbehind:!0},none:{pattern:n(\"'none'\"),lookbehind:!0,alias:\"keyword\"},nonce:{pattern:n(\"'nonce-[-+/\\\\w=]+'\"),lookbehind:!0,alias:\"number\"},hash:{pattern:n(\"'sha(?:256|384|512)-[-+/\\\\w=]+'\"),lookbehind:!0,alias:\"number\"},host:{pattern:n(\"[a-z][a-z0-9.+-]*://[^\\\\s;,']*|\\\\*[^\\\\s;,']*|[a-z0-9-]+(?:\\\\.[a-z0-9-]+)+(?::[\\\\d*]+)?(?:/[^\\\\s;,']*)?\"),lookbehind:!0,alias:\"url\",inside:{important:/\\*/}},keyword:[{pattern:n(\"'unsafe-[a-z-]+'\"),lookbehind:!0,alias:\"unsafe\"},{pattern:n(\"'[a-z-]+'\"),lookbehind:!0,alias:\"safe\"}],punctuation:/;/}}(Prism);/components/prism-qml.js\u0007p(function (Prism) {\n\n\tvar jsString = /\"(?:\\\\.|[^\\\\\"\\r\\n])*\"|'(?:\\\\.|[^\\\\'\\r\\n])*'/.source;\n\tvar jsComment = /\\/\\/.*(?!.)|\\/\\*(?:[^*]|\\*(?!\\/))*\\*\\//.source;\n\n\tvar jsExpr = /(?:[^\\\\()[\\]{}\"'/]|<string>|\\/(?![*/])|<comment>|\\(<expr>*\\)|\\[<expr>*\\]|\\{<expr>*\\}|\\\\[\\s\\S])/\n\t\t.source.replace(/<string>/g, function () { return jsString; }).replace(/<comment>/g, function () { return jsComment; });\n\n\t// the pattern will blow up, so only a few iterations\n\tfor (var i = 0; i < 2; i++) {\n\t\tjsExpr = jsExpr.replace(/<expr>/g, function () { return jsExpr; });\n\t}\n\tjsExpr = jsExpr.replace(/<expr>/g, '[^\\\\s\\\\S]');\n\n\n\tPrism.languages.qml = {\n\t\t'comment': {\n\t\t\tpattern: /\\/\\/.*|\\/\\*[\\s\\S]*?\\*\\//,\n\t\t\tgreedy: true\n\t\t},\n\t\t'javascript-function': {\n\t\t\tpattern: RegExp(/((?:^|;)[ \\t]*)function\\s+(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*\\s*\\(<js>*\\)\\s*\\{<js>*\\}/.source.replace(/<js>/g, function () { return jsExpr; }), 'm'),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\talias: 'language-javascript',\n\t\t\tinside: Prism.languages.javascript\n\t\t},\n\t\t'class-name': {\n\t\t\tpattern: /((?:^|[:;])[ \\t]*)(?!\\d)\\w+(?=[ \\t]*\\{|[ \\t]+on\\b)/m,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'property': [\n\t\t\t{\n\t\t\t\tpattern: /((?:^|[;{])[ \\t]*)(?!\\d)\\w+(?:\\.\\w+)*(?=[ \\t]*:)/m,\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /((?:^|[;{])[ \\t]*)property[ \\t]+(?!\\d)\\w+(?:\\.\\w+)*[ \\t]+(?!\\d)\\w+(?:\\.\\w+)*(?=[ \\t]*:)/m,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'keyword': /^property/,\n\t\t\t\t\t'property': /\\w+(?:\\.\\w+)*/\n\t\t\t\t}\n\t\t\t}\n\t\t],\n\t\t'javascript-expression': {\n\t\t\tpattern: RegExp(/(:[ \\t]*)(?![\\s;}[])(?:(?!$|[;}])<js>)+/.source.replace(/<js>/g, function () { return jsExpr; }), 'm'),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\talias: 'language-javascript',\n\t\t\tinside: Prism.languages.javascript\n\t\t},\n\t\t'string': {\n\t\t\tpattern: /\"(?:\\\\.|[^\\\\\"\\r\\n])*\"/,\n\t\t\tgreedy: true\n\t\t},\n\t\t'keyword': /\\b(?:as|import|on)\\b/,\n\t\t'punctuation': /[{}[\\]:;,]/\n\t};\n\n}(Prism));\n/components/prism-awk.min.js\u0002Prism.languages.awk={hashbang:{pattern:/^#!.*/,greedy:!0,alias:\"comment\"},comment:{pattern:/#.*/,greedy:!0},string:{pattern:/(^|[^\\\\])\"(?:[^\\\\\"\\r\\n]|\\\\.)*\"/,lookbehind:!0,greedy:!0},regex:{pattern:/((?:^|[^\\w\\s)])\\s*)\\/(?:[^\\/\\\\\\r\\n]|\\\\.)*\\//,lookbehind:!0,greedy:!0},variable:/\\$\\w+/,keyword:/\\b(?:BEGIN|BEGINFILE|END|ENDFILE|break|case|continue|default|delete|do|else|exit|for|function|getline|if|in|next|nextfile|printf?|return|switch|while)\\b|@(?:include|load)\\b/,function:/\\b[a-z_]\\w*(?=\\s*\\()/i,number:/\\b(?:\\d+(?:\\.\\d+)?(?:e[+-]?\\d+)?|0x[a-fA-F0-9]+)\\b/,operator:/--|\\+\\+|!?~|>&|>>|<<|(?:\\*\\*|[<>!=+\\-*/%^])=?|&&|\\|[|&]|[?:]/,punctuation:/[()[\\]{},;]/},Prism.languages.gawk=Prism.languages.awk;!/components/prism-asmatmel.min.js\u0006Prism.languages.asmatmel={comment:{pattern:/;.*/,greedy:!0},string:{pattern:/([\"'`])(?:\\\\.|(?!\\1)[^\\\\\\r\\n])*\\1/,greedy:!0},constant:/\\b(?:PORT[A-Z]|DDR[A-Z]|(?:DD|P)[A-Z](?:\\d|[0-2]\\d|3[01]))\\b/,directive:{pattern:/\\.\\w+(?= )/,alias:\"property\"},\"r-register\":{pattern:/\\br(?:\\d|[12]\\d|3[01])\\b/,alias:\"variable\"},\"op-code\":{pattern:/\\b(?:ADC|ADD|ADIW|AND|ANDI|ASR|BCLR|BLD|BRBC|BRBS|BRCC|BRCS|BREAK|BREQ|BRGE|BRHC|BRHS|BRID|BRIE|BRLO|BRLT|BRMI|BRNE|BRPL|BRSH|BRTC|BRTS|BRVC|BRVS|BSET|BST|CALL|CBI|CBR|CLC|CLH|CLI|CLN|CLR|CLS|CLT|CLV|CLZ|COM|CP|CPC|CPI|CPSE|DEC|DES|EICALL|EIJMP|ELPM|EOR|FMUL|FMULS|FMULSU|ICALL|IJMP|IN|INC|JMP|LAC|LAS|LAT|LD|LD[A-Za-z0-9]|LPM|LSL|LSR|MOV|MOVW|MUL|MULS|MULSU|NEG|NOP|OR|ORI|OUT|POP|PUSH|RCALL|RET|RETI|RJMP|ROL|ROR|SBC|SBCI|SBI|SBIC|SBIS|SBIW|SBR|SBRC|SBRS|SEC|SEH|SEI|SEN|SER|SES|SET|SEV|SEZ|SLEEP|SPM|ST|ST[A-Z0-9]|SUB|SUBI|SWAP|TST|WDR|XCH|adc|add|adiw|and|andi|asr|bclr|bld|brbc|brbs|brcc|brcs|break|breq|brge|brhc|brhs|brid|brie|brlo|brlt|brmi|brne|brpl|brsh|brtc|brts|brvc|brvs|bset|bst|call|cbi|cbr|clc|clh|cli|cln|clr|cls|clt|clv|clz|com|cp|cpc|cpi|cpse|dec|des|eicall|eijmp|elpm|eor|fmul|fmuls|fmulsu|icall|ijmp|in|inc|jmp|lac|las|lat|ld|ld[a-z0-9]|lpm|lsl|lsr|mov|movw|mul|muls|mulsu|neg|nop|or|ori|out|pop|push|rcall|ret|reti|rjmp|rol|ror|sbc|sbci|sbi|sbic|sbis|sbiw|sbr|sbrc|sbrs|sec|seh|sei|sen|ser|ses|set|sev|sez|sleep|spm|st|st[a-zA-Z0-9]|sub|subi|swap|tst|wdr|xch)\\b/,alias:\"keyword\"},\"hex-number\":{pattern:/#?\\$[\\da-f]{2,4}\\b/i,alias:\"number\"},\"binary-number\":{pattern:/#?%[01]+\\b/,alias:\"number\"},\"decimal-number\":{pattern:/#?\\b\\d+\\b/,alias:\"number\"},register:{pattern:/\\b[acznvshtixy]\\b/i,alias:\"variable\"},operator:/>>=?|<<=?|&[&=]?|\\|[\\|=]?|[-+*/%^!=<>?]=?/,punctuation:/[(),:]/};/components/prism-fortran.js\u0005Prism.languages.fortran = {\n\t'quoted-number': {\n\t\tpattern: /[BOZ](['\"])[A-F0-9]+\\1/i,\n\t\talias: 'number'\n\t},\n\t'string': {\n\t\tpattern: /(?:\\b\\w+_)?(['\"])(?:\\1\\1|&(?:\\r\\n?|\\n)(?:[ \\t]*!.*(?:\\r\\n?|\\n)|(?![ \\t]*!))|(?!\\1).)*(?:\\1|&)/,\n\t\tinside: {\n\t\t\t'comment': {\n\t\t\t\tpattern: /(&(?:\\r\\n?|\\n)\\s*)!.*/,\n\t\t\t\tlookbehind: true\n\t\t\t}\n\t\t}\n\t},\n\t'comment': {\n\t\tpattern: /!.*/,\n\t\tgreedy: true\n\t},\n\t'boolean': /\\.(?:FALSE|TRUE)\\.(?:_\\w+)?/i,\n\t'number': /(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:[ED][+-]?\\d+)?(?:_\\w+)?/i,\n\t'keyword': [\n\t\t// Types\n\t\t/\\b(?:CHARACTER|COMPLEX|DOUBLE ?PRECISION|INTEGER|LOGICAL|REAL)\\b/i,\n\t\t// END statements\n\t\t/\\b(?:END ?)?(?:BLOCK ?DATA|DO|FILE|FORALL|FUNCTION|IF|INTERFACE|MODULE(?! PROCEDURE)|PROGRAM|SELECT|SUBROUTINE|TYPE|WHERE)\\b/i,\n\t\t// Statements\n\t\t/\\b(?:ALLOCATABLE|ALLOCATE|BACKSPACE|CALL|CASE|CLOSE|COMMON|CONTAINS|CONTINUE|CYCLE|DATA|DEALLOCATE|DIMENSION|DO|END|EQUIVALENCE|EXIT|EXTERNAL|FORMAT|GO ?TO|IMPLICIT(?: NONE)?|INQUIRE|INTENT|INTRINSIC|MODULE PROCEDURE|NAMELIST|NULLIFY|OPEN|OPTIONAL|PARAMETER|POINTER|PRINT|PRIVATE|PUBLIC|READ|RETURN|REWIND|SAVE|SELECT|STOP|TARGET|WHILE|WRITE)\\b/i,\n\t\t// Others\n\t\t/\\b(?:ASSIGNMENT|DEFAULT|ELEMENTAL|ELSE|ELSEIF|ELSEWHERE|ENTRY|IN|INCLUDE|INOUT|KIND|NULL|ONLY|OPERATOR|OUT|PURE|RECURSIVE|RESULT|SEQUENCE|STAT|THEN|USE)\\b/i\n\t],\n\t'operator': [\n\t\t/\\*\\*|\\/\\/|=>|[=\\/]=|[<>]=?|::|[+\\-*=%]|\\.[A-Z]+\\./i,\n\t\t{\n\t\t\t// Use lookbehind to prevent confusion with (/ /)\n\t\t\tpattern: /(^|(?!\\().)\\/(?!\\))/,\n\t\t\tlookbehind: true\n\t\t}\n\t],\n\t'punctuation': /\\(\\/|\\/\\)|[(),;:&]/\n};\n /components/prism-web-idl.min.js\bA!function(e){var n=\"(?:\\\\B-|\\\\b_|\\\\b)[A-Za-z][\\\\w-]*(?![\\\\w-])\",t=\"(?:\\\\b(?:unsigned\\\\s+)?long\\\\s+long(?![\\\\w-])|\\\\b(?:unrestricted|unsigned)\\\\s+[a-z]+(?![\\\\w-])|(?!(?:unrestricted|unsigned)\\\\b)\"+n+\"(?:\\\\s*<(?:[^<>]|<[^<>]*>)*>)?)(?:\\\\s*\\\\?)?\",i={};for(var r in e.languages[\"web-idl\"]={comment:{pattern:/\\/\\/.*|\\/\\*[\\s\\S]*?\\*\\//,greedy:!0},string:{pattern:/\"[^\"]*\"/,greedy:!0},namespace:{pattern:RegExp(\"(\\\\bnamespace\\\\s+)\"+n),lookbehind:!0},\"class-name\":[{pattern:/(^|[^\\w-])(?:iterable|maplike|setlike)\\s*<(?:[^<>]|<[^<>]*>)*>/,lookbehind:!0,inside:i},{pattern:RegExp(\"(\\\\b(?:attribute|const|deleter|getter|optional|setter)\\\\s+)\"+t),lookbehind:!0,inside:i},{pattern:RegExp(\"(\\\\bcallback\\\\s+\"+n+\"\\\\s*=\\\\s*)\"+t),lookbehind:!0,inside:i},{pattern:RegExp(\"(\\\\btypedef\\\\b\\\\s*)\"+t),lookbehind:!0,inside:i},{pattern:RegExp(\"(\\\\b(?:callback|dictionary|enum|interface(?:\\\\s+mixin)?)\\\\s+)(?!(?:interface|mixin)\\\\b)\"+n),lookbehind:!0},{pattern:RegExp(\"(:\\\\s*)\"+n),lookbehind:!0},RegExp(n+\"(?=\\\\s+(?:implements|includes)\\\\b)\"),{pattern:RegExp(\"(\\\\b(?:implements|includes)\\\\s+)\"+n),lookbehind:!0},{pattern:RegExp(t+\"(?=\\\\s*(?:\\\\.{3}\\\\s*)?\"+n+\"\\\\s*[(),;=])\"),inside:i}],builtin:/\\b(?:ArrayBuffer|BigInt64Array|BigUint64Array|ByteString|DOMString|DataView|Float32Array|Float64Array|FrozenArray|Int16Array|Int32Array|Int8Array|ObservableArray|Promise|USVString|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray)\\b/,keyword:[/\\b(?:async|attribute|callback|const|constructor|deleter|dictionary|enum|getter|implements|includes|inherit|interface|mixin|namespace|null|optional|or|partial|readonly|required|setter|static|stringifier|typedef|unrestricted)\\b/,/\\b(?:any|bigint|boolean|byte|double|float|iterable|long|maplike|object|octet|record|sequence|setlike|short|symbol|undefined|unsigned|void)\\b/],boolean:/\\b(?:false|true)\\b/,number:{pattern:/(^|[^\\w-])-?(?:0x[0-9a-f]+|(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?|NaN|Infinity)(?![\\w-])/i,lookbehind:!0},operator:/\\.{3}|[=:?<>-]/,punctuation:/[(){}[\\].,;]/},e.languages[\"web-idl\"])\"class-name\"!==r&&(i[r]=e.languages[\"web-idl\"][r]);e.languages.webidl=e.languages[\"web-idl\"]}(Prism);/components/prism-antlr4.min.js\u0004Prism.languages.antlr4={comment:/\\/\\/.*|\\/\\*[\\s\\S]*?(?:\\*\\/|$)/,string:{pattern:/'(?:\\\\.|[^\\\\'\\r\\n])*'/,greedy:!0},\"character-class\":{pattern:/\\[(?:\\\\.|[^\\\\\\]\\r\\n])*\\]/,greedy:!0,alias:\"regex\",inside:{range:{pattern:/([^[]|(?:^|[^\\\\])(?:\\\\\\\\)*\\\\\\[)-(?!\\])/,lookbehind:!0,alias:\"punctuation\"},escape:/\\\\(?:u(?:[a-fA-F\\d]{4}|\\{[a-fA-F\\d]+\\})|[pP]\\{[=\\w-]+\\}|[^\\r\\nupP])/,punctuation:/[\\[\\]]/}},action:{pattern:/\\{(?:[^{}]|\\{(?:[^{}]|\\{(?:[^{}]|\\{[^{}]*\\})*\\})*\\})*\\}/,greedy:!0,inside:{content:{pattern:/(\\{)[\\s\\S]+(?=\\})/,lookbehind:!0},punctuation:/[{}]/}},command:{pattern:/(->\\s*(?!\\s))(?:\\s*(?:,\\s*)?\\b[a-z]\\w*(?:\\s*\\([^()\\r\\n]*\\))?)+(?=\\s*;)/i,lookbehind:!0,inside:{function:/\\b\\w+(?=\\s*(?:[,(]|$))/,punctuation:/[,()]/}},annotation:{pattern:/@\\w+(?:::\\w+)*/,alias:\"keyword\"},label:{pattern:/#[ \\t]*\\w+/,alias:\"punctuation\"},keyword:/\\b(?:catch|channels|finally|fragment|grammar|import|lexer|locals|mode|options|parser|returns|throws|tokens)\\b/,definition:[{pattern:/\\b[a-z]\\w*(?=\\s*:)/,alias:[\"rule\",\"class-name\"]},{pattern:/\\b[A-Z]\\w*(?=\\s*:)/,alias:[\"token\",\"constant\"]}],constant:/\\b[A-Z][A-Z_]*\\b/,operator:/\\.\\.|->|[|~]|[*+?]\\??/,punctuation:/[;:()=]/},Prism.languages.g4=Prism.languages.antlr4;/components/prism-cypher.min.js\u0004\tPrism.languages.cypher={comment:/\\/\\/.*/,string:{pattern:/\"(?:[^\"\\\\\\r\\n]|\\\\.)*\"|'(?:[^'\\\\\\r\\n]|\\\\.)*'/,greedy:!0},\"class-name\":{pattern:/(:\\s*)(?:\\w+|`(?:[^`\\\\\\r\\n])*`)(?=\\s*[{):])/,lookbehind:!0,greedy:!0},relationship:{pattern:/(-\\[\\s*(?:\\w+\\s*|`(?:[^`\\\\\\r\\n])*`\\s*)?:\\s*|\\|\\s*:\\s*)(?:\\w+|`(?:[^`\\\\\\r\\n])*`)/,lookbehind:!0,greedy:!0,alias:\"property\"},identifier:{pattern:/`(?:[^`\\\\\\r\\n])*`/,greedy:!0},variable:/\\$\\w+/,keyword:/\\b(?:ADD|ALL|AND|AS|ASC|ASCENDING|ASSERT|BY|CALL|CASE|COMMIT|CONSTRAINT|CONTAINS|CREATE|CSV|DELETE|DESC|DESCENDING|DETACH|DISTINCT|DO|DROP|ELSE|END|ENDS|EXISTS|FOR|FOREACH|IN|INDEX|IS|JOIN|KEY|LIMIT|LOAD|MANDATORY|MATCH|MERGE|NODE|NOT|OF|ON|OPTIONAL|OR|ORDER(?=\\s+BY)|PERIODIC|REMOVE|REQUIRE|RETURN|SCALAR|SCAN|SET|SKIP|START|STARTS|THEN|UNION|UNIQUE|UNWIND|USING|WHEN|WHERE|WITH|XOR|YIELD)\\b/i,function:/\\b\\w+\\b(?=\\s*\\()/,boolean:/\\b(?:false|null|true)\\b/i,number:/\\b(?:0x[\\da-fA-F]+|\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?)\\b/,operator:/:|<--?|--?>?|<>|=~?|[<>]=?|[+*/%^|]|\\.\\.\\.?/,punctuation:/[()[\\]{},;.]/};1/plugins/jsonp-highlight/prism-jsonp-highlight.js!(function () {\n\n\tif (typeof Prism === 'undefined' || typeof document === 'undefined') {\n\t\treturn;\n\t}\n\n\t/**\n\t * @callback Adapter\n\t * @param {any} response\n\t * @param {HTMLPreElement} [pre]\n\t * @returns {string | null}\n\t */\n\n\t/**\n\t * The list of adapter which will be used if `data-adapter` is not specified.\n\t *\n\t * @type {Array<{adapter: Adapter, name: string}>}\n\t */\n\tvar adapters = [];\n\n\t/**\n\t * Adds a new function to the list of adapters.\n\t *\n\t * If the given adapter is already registered or not a function or there is an adapter with the given name already,\n\t * nothing will happen.\n\t *\n\t * @param {Adapter} adapter The adapter to be registered.\n\t * @param {string} [name] The name of the adapter. Defaults to the function name of `adapter`.\n\t */\n\tfunction registerAdapter(adapter, name) {\n\t\tname = name || adapter.name;\n\t\tif (typeof adapter === 'function' && !getAdapter(adapter) && !getAdapter(name)) {\n\t\t\tadapters.push({ adapter: adapter, name: name });\n\t\t}\n\t}\n\t/**\n\t * Returns the given adapter itself, if registered, or a registered adapter with the given name.\n\t *\n\t * If no fitting adapter is registered, `null` will be returned.\n\t *\n\t * @param {string|Function} adapter The adapter itself or the name of an adapter.\n\t * @returns {Adapter} A registered adapter or `null`.\n\t */\n\tfunction getAdapter(adapter) {\n\t\tif (typeof adapter === 'function') {\n\t\t\tfor (var i = 0, item; (item = adapters[i++]);) {\n\t\t\t\tif (item.adapter.valueOf() === adapter.valueOf()) {\n\t\t\t\t\treturn item.adapter;\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (typeof adapter === 'string') {\n\t\t\t// eslint-disable-next-line no-redeclare\n\t\t\tfor (var i = 0, item; (item = adapters[i++]);) {\n\t\t\t\tif (item.name === adapter) {\n\t\t\t\t\treturn item.adapter;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\t/**\n\t * Remove the given adapter or the first registered adapter with the given name from the list of\n\t * registered adapters.\n\t *\n\t * @param {string|Function} adapter The adapter itself or the name of an adapter.\n\t */\n\tfunction removeAdapter(adapter) {\n\t\tif (typeof adapter === 'string') {\n\t\t\tadapter = getAdapter(adapter);\n\t\t}\n\t\tif (typeof adapter === 'function') {\n\t\t\tvar index = adapters.findIndex(function (item) {\n\t\t\t\treturn item.adapter === adapter;\n\t\t\t});\n\t\t\tif (index >= 0) {\n\t\t\t\tadapters.splice(index, 1);\n\t\t\t}\n\t\t}\n\t}\n\n\tregisterAdapter(function github(rsp) {\n\t\tif (rsp && rsp.meta && rsp.data) {\n\t\t\tif (rsp.meta.status && rsp.meta.status >= 400) {\n\t\t\t\treturn 'Error: ' + (rsp.data.message || rsp.meta.status);\n\t\t\t} else if (typeof (rsp.data.content) === 'string') {\n\t\t\t\treturn typeof (atob) === 'function'\n\t\t\t\t\t? atob(rsp.data.content.replace(/\\s/g, ''))\n\t\t\t\t\t: 'Your browser cannot decode base64';\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}, 'github');\n\tregisterAdapter(function gist(rsp, el) {\n\t\tif (rsp && rsp.meta && rsp.data && rsp.data.files) {\n\t\t\tif (rsp.meta.status && rsp.meta.status >= 400) {\n\t\t\t\treturn 'Error: ' + (rsp.data.message || rsp.meta.status);\n\t\t\t}\n\n\t\t\tvar files = rsp.data.files;\n\t\t\tvar filename = el.getAttribute('data-filename');\n\t\t\tif (filename == null) {\n\t\t\t\t// Maybe in the future we can somehow render all files\n\t\t\t\t// But the standard <script> include for gists does that nicely already,\n\t\t\t\t// so that might be getting beyond the scope of this plugin\n\t\t\t\tfor (var key in files) {\n\t\t\t\t\tif (files.hasOwnProperty(key)) {\n\t\t\t\t\t\tfilename = key;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (files[filename] !== undefined) {\n\t\t\t\treturn files[filename].content;\n\t\t\t}\n\t\t\treturn 'Error: unknown or missing gist file ' + filename;\n\t\t}\n\t\treturn null;\n\t}, 'gist');\n\tregisterAdapter(function bitbucket(rsp) {\n\t\tif (rsp && rsp.node && typeof (rsp.data) === 'string') {\n\t\t\treturn rsp.data;\n\t\t}\n\t\treturn null;\n\t}, 'bitbucket');\n\n\n\tvar jsonpCallbackCounter = 0;\n\t/**\n\t * Makes a JSONP request.\n\t *\n\t * @param {string} src The URL of the resource to request.\n\t * @param {string | undefined | null} callbackParameter The name of the callback parameter. If falsy, `\"callback\"`\n\t * will be used.\n\t * @param {(data: unknown) => void} onSuccess\n\t * @param {(reason: \"timeout\" | \"network\") => void} onError\n\t * @returns {void}\n\t */\n\tfunction jsonp(src, callbackParameter, onSuccess, onError) {\n\t\tvar callbackName = 'prismjsonp' + jsonpCallbackCounter++;\n\n\t\tvar uri = document.createElement('a');\n\t\turi.href = src;\n\t\turi.href += (uri.search ? '&' : '?') + (callbackParameter || 'callback') + '=' + callbackName;\n\n\t\tvar script = document.createElement('script');\n\t\tscript.src = uri.href;\n\t\tscript.onerror = function () {\n\t\t\tcleanup();\n\t\t\tonError('network');\n\t\t};\n\n\t\tvar timeoutId = setTimeout(function () {\n\t\t\tcleanup();\n\t\t\tonError('timeout');\n\t\t}, Prism.plugins.jsonphighlight.timeout);\n\n\t\tfunction cleanup() {\n\t\t\tclearTimeout(timeoutId);\n\t\t\tdocument.head.removeChild(script);\n\t\t\tdelete window[callbackName];\n\t\t}\n\n\t\t// the JSONP callback function\n\t\twindow[callbackName] = function (response) {\n\t\t\tcleanup();\n\t\t\tonSuccess(response);\n\t\t};\n\n\t\tdocument.head.appendChild(script);\n\t}\n\n\tvar LOADING_MESSAGE = 'Loading…';\n\tvar MISSING_ADAPTER_MESSAGE = function (name) {\n\t\treturn '✖ Error: JSONP adapter function \"' + name + '\" doesn\\'t exist';\n\t};\n\tvar TIMEOUT_MESSAGE = function (url) {\n\t\treturn '✖ Error: Timeout loading ' + url;\n\t};\n\tvar UNKNOWN_FAILURE_MESSAGE = '✖ Error: Cannot parse response (perhaps you need an adapter function?)';\n\n\tvar STATUS_ATTR = 'data-jsonp-status';\n\tvar STATUS_LOADING = 'loading';\n\tvar STATUS_LOADED = 'loaded';\n\tvar STATUS_FAILED = 'failed';\n\n\tvar SELECTOR = 'pre[data-jsonp]:not([' + STATUS_ATTR + '=\"' + STATUS_LOADED + '\"])'\n\t\t+ ':not([' + STATUS_ATTR + '=\"' + STATUS_LOADING + '\"])';\n\n\n\tPrism.hooks.add('before-highlightall', function (env) {\n\t\tenv.selector += ', ' + SELECTOR;\n\t});\n\n\tPrism.hooks.add('before-sanity-check', function (env) {\n\t\tvar pre = /** @type {HTMLPreElement} */ (env.element);\n\t\tif (pre.matches(SELECTOR)) {\n\t\t\tenv.code = ''; // fast-path the whole thing and go to complete\n\n\t\t\t// mark as loading\n\t\t\tpre.setAttribute(STATUS_ATTR, STATUS_LOADING);\n\n\t\t\t// add code element with loading message\n\t\t\tvar code = pre.appendChild(document.createElement('CODE'));\n\t\t\tcode.textContent = LOADING_MESSAGE;\n\n\t\t\t// set language\n\t\t\tvar language = env.language;\n\t\t\tcode.className = 'language-' + language;\n\n\t\t\t// preload the language\n\t\t\tvar autoloader = Prism.plugins.autoloader;\n\t\t\tif (autoloader) {\n\t\t\t\tautoloader.loadLanguages(language);\n\t\t\t}\n\n\t\t\tvar adapterName = pre.getAttribute('data-adapter');\n\t\t\tvar adapter = null;\n\t\t\tif (adapterName) {\n\t\t\t\tif (typeof window[adapterName] === 'function') {\n\t\t\t\t\tadapter = window[adapterName];\n\t\t\t\t} else {\n\t\t\t\t\t// mark as failed\n\t\t\t\t\tpre.setAttribute(STATUS_ATTR, STATUS_FAILED);\n\n\t\t\t\t\tcode.textContent = MISSING_ADAPTER_MESSAGE(adapterName);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar src = pre.getAttribute('data-jsonp');\n\n\t\t\tjsonp(\n\t\t\t\tsrc,\n\t\t\t\tpre.getAttribute('data-callback'),\n\t\t\t\tfunction (response) {\n\t\t\t\t\t// interpret the received data using the adapter(s)\n\t\t\t\t\tvar data = null;\n\t\t\t\t\tif (adapter) {\n\t\t\t\t\t\tdata = adapter(response, pre);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfor (var i = 0, l = adapters.length; i < l; i++) {\n\t\t\t\t\t\t\tdata = adapters[i].adapter(response, pre);\n\t\t\t\t\t\t\tif (data !== null) {\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (data === null) {\n\t\t\t\t\t\t// mark as failed\n\t\t\t\t\t\tpre.setAttribute(STATUS_ATTR, STATUS_FAILED);\n\n\t\t\t\t\t\tcode.textContent = UNKNOWN_FAILURE_MESSAGE;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// mark as loaded\n\t\t\t\t\t\tpre.setAttribute(STATUS_ATTR, STATUS_LOADED);\n\n\t\t\t\t\t\tcode.textContent = data;\n\t\t\t\t\t\tPrism.highlightElement(code);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tfunction () {\n\t\t\t\t\t// mark as failed\n\t\t\t\t\tpre.setAttribute(STATUS_ATTR, STATUS_FAILED);\n\n\t\t\t\t\tcode.textContent = TIMEOUT_MESSAGE(src);\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t});\n\n\n\tPrism.plugins.jsonphighlight = {\n\t\t/**\n\t\t * The timeout after which an error message will be displayed.\n\t\t *\n\t\t * __Note:__ If the request succeeds after the timeout, it will still be processed and will override any\n\t\t * displayed error messages.\n\t\t */\n\t\ttimeout: 5000,\n\t\tregisterAdapter: registerAdapter,\n\t\tremoveAdapter: removeAdapter,\n\n\t\t/**\n\t\t * Highlights all `pre` elements under the given container with a `data-jsonp` attribute by requesting the\n\t\t * specified JSON and using the specified adapter or a registered adapter to extract the code to highlight\n\t\t * from the response. The highlighted code will be inserted into the `pre` element.\n\t\t *\n\t\t * Note: Elements which are already loaded or currently loading will not be touched by this method.\n\t\t *\n\t\t * @param {Element | Document} [container=document]\n\t\t */\n\t\thighlight: function (container) {\n\t\t\tvar elements = (container || document).querySelectorAll(SELECTOR);\n\n\t\t\tfor (var i = 0, element; (element = elements[i++]);) {\n\t\t\t\tPrism.highlightElement(element);\n\t\t\t}\n\t\t}\n\t};\n\n}());\n/components/prism-handlebars.js\u0004(function (Prism) {\n\n\tPrism.languages.handlebars = {\n\t\t'comment': /\\{\\{![\\s\\S]*?\\}\\}/,\n\t\t'delimiter': {\n\t\t\tpattern: /^\\{\\{\\{?|\\}\\}\\}?$/,\n\t\t\talias: 'punctuation'\n\t\t},\n\t\t'string': /([\"'])(?:\\\\.|(?!\\1)[^\\\\\\r\\n])*\\1/,\n\t\t'number': /\\b0x[\\dA-Fa-f]+\\b|(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:[Ee][+-]?\\d+)?/,\n\t\t'boolean': /\\b(?:false|true)\\b/,\n\t\t'block': {\n\t\t\tpattern: /^(\\s*(?:~\\s*)?)[#\\/]\\S+?(?=\\s*(?:~\\s*)?$|\\s)/,\n\t\t\tlookbehind: true,\n\t\t\talias: 'keyword'\n\t\t},\n\t\t'brackets': {\n\t\t\tpattern: /\\[[^\\]]+\\]/,\n\t\t\tinside: {\n\t\t\t\tpunctuation: /\\[|\\]/,\n\t\t\t\tvariable: /[\\s\\S]+/\n\t\t\t}\n\t\t},\n\t\t'punctuation': /[!\"#%&':()*+,.\\/;<=>@\\[\\\\\\]^`{|}~]/,\n\t\t'variable': /[^!\"#%&'()*+,\\/;<=>@\\[\\\\\\]^`{|}~\\s]+/\n\t};\n\n\tPrism.hooks.add('before-tokenize', function (env) {\n\t\tvar handlebarsPattern = /\\{\\{\\{[\\s\\S]+?\\}\\}\\}|\\{\\{[\\s\\S]+?\\}\\}/g;\n\t\tPrism.languages['markup-templating'].buildPlaceholders(env, 'handlebars', handlebarsPattern);\n\t});\n\n\tPrism.hooks.add('after-tokenize', function (env) {\n\t\tPrism.languages['markup-templating'].tokenizePlaceholders(env, 'handlebars');\n\t});\n\n\tPrism.languages.hbs = Prism.languages.handlebars;\n\tPrism.languages.mustache = Prism.languages.handlebars;\n\n}(Prism));\n\"/components/prism-concurnas.min.js\u0007fPrism.languages.concurnas={comment:{pattern:/(^|[^\\\\])(?:\\/\\*[\\s\\S]*?(?:\\*\\/|$)|\\/\\/.*)/,lookbehind:!0,greedy:!0},langext:{pattern:/\\b\\w+\\s*\\|\\|[\\s\\S]+?\\|\\|/,greedy:!0,inside:{\"class-name\":/^\\w+/,string:{pattern:/(^\\s*\\|\\|)[\\s\\S]+(?=\\|\\|$)/,lookbehind:!0},punctuation:/\\|\\|/}},function:{pattern:/((?:^|\\s)def[ \\t]+)[a-zA-Z_]\\w*(?=\\s*\\()/,lookbehind:!0},keyword:/\\b(?:abstract|actor|also|annotation|assert|async|await|bool|boolean|break|byte|case|catch|changed|char|class|closed|constant|continue|def|default|del|double|elif|else|enum|every|extends|false|finally|float|for|from|global|gpudef|gpukernel|if|import|in|init|inject|int|lambda|local|long|loop|match|new|nodefault|null|of|onchange|open|out|override|package|parfor|parforsync|post|pre|private|protected|provide|provider|public|return|shared|short|single|size_t|sizeof|super|sync|this|throw|trait|trans|transient|true|try|typedef|unchecked|using|val|var|void|while|with)\\b/,boolean:/\\b(?:false|true)\\b/,number:/\\b0b[01][01_]*L?\\b|\\b0x(?:[\\da-f_]*\\.)?[\\da-f_p+-]+\\b|(?:\\b\\d[\\d_]*(?:\\.[\\d_]*)?|\\B\\.\\d[\\d_]*)(?:e[+-]?\\d[\\d_]*)?[dfls]?/i,punctuation:/[{}[\\];(),.:]/,operator:/<==|>==|=>|->|<-|<>|&==|&<>|\\?:?|\\.\\?|\\+\\+|--|[-+*/=<>]=?|[!^~]|\\b(?:and|as|band|bor|bxor|comp|is|isnot|mod|or)\\b=?/,annotation:{pattern:/@(?:\\w+:)?(?:\\w+|\\[[^\\]]+\\])?/,alias:\"builtin\"}},Prism.languages.insertBefore(\"concurnas\",\"langext\",{\"regex-literal\":{pattern:/\\br(\"|')(?:\\\\.|(?!\\1)[^\\\\\\r\\n])*\\1/,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^\\\\])(?:\\\\{2})*)\\{(?:[^{}]|\\{(?:[^{}]|\\{[^}]*\\})*\\})+\\}/,lookbehind:!0,inside:Prism.languages.concurnas},regex:/[\\s\\S]+/}},\"string-literal\":{pattern:/(?:\\B|\\bs)(\"|')(?:\\\\.|(?!\\1)[^\\\\\\r\\n])*\\1/,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^\\\\])(?:\\\\{2})*)\\{(?:[^{}]|\\{(?:[^{}]|\\{[^}]*\\})*\\})+\\}/,lookbehind:!0,inside:Prism.languages.concurnas},string:/[\\s\\S]+/}}}),Prism.languages.conc=Prism.languages.concurnas;/components/prism-gap.min.js\u0004\u0004Prism.languages.gap={shell:{pattern:/^gap>[\\s\\S]*?(?=^gap>|$(?![\\s\\S]))/m,greedy:!0,inside:{gap:{pattern:/^(gap>).+(?:(?:\\r(?:\\n|(?!\\n))|\\n)>.*)*/,lookbehind:!0,inside:null},punctuation:/^gap>/}},comment:{pattern:/#.*/,greedy:!0},string:{pattern:/(^|[^\\\\'\"])(?:'(?:[^\\r\\n\\\\']|\\\\.){1,10}'|\"(?:[^\\r\\n\\\\\"]|\\\\.)*\"(?!\")|\"\"\"[\\s\\S]*?\"\"\")/,lookbehind:!0,greedy:!0,inside:{continuation:{pattern:/([\\r\\n])>/,lookbehind:!0,alias:\"punctuation\"}}},keyword:/\\b(?:Assert|Info|IsBound|QUIT|TryNextMethod|Unbind|and|atomic|break|continue|do|elif|else|end|fi|for|function|if|in|local|mod|not|od|or|quit|readonly|readwrite|rec|repeat|return|then|until|while)\\b/,boolean:/\\b(?:false|true)\\b/,function:/\\b[a-z_]\\w*(?=\\s*\\()/i,number:{pattern:/(^|[^\\w.]|\\.\\.)(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+)?(?:_[a-z]?)?(?=$|[^\\w.]|\\.\\.)/,lookbehind:!0},continuation:{pattern:/([\\r\\n])>/,lookbehind:!0,alias:\"punctuation\"},operator:/->|[-+*/^~=!]|<>|[<>]=?|:=|\\.\\./,punctuation:/[()[\\]{},;.:]/},Prism.languages.gap.shell.inside.gap.inside=Prism.languages.gap;/components/prism-latex.min.js\u0003!function(a){var e=/\\\\(?:[^a-z()[\\]]|[a-z*]+)/i,n={\"equation-command\":{pattern:e,alias:\"regex\"}};a.languages.latex={comment:/%.*/,cdata:{pattern:/(\\\\begin\\{((?:lstlisting|verbatim)\\*?)\\})[\\s\\S]*?(?=\\\\end\\{\\2\\})/,lookbehind:!0},equation:[{pattern:/\\$\\$(?:\\\\[\\s\\S]|[^\\\\$])+\\$\\$|\\$(?:\\\\[\\s\\S]|[^\\\\$])+\\$|\\\\\\([\\s\\S]*?\\\\\\)|\\\\\\[[\\s\\S]*?\\\\\\]/,inside:n,alias:\"string\"},{pattern:/(\\\\begin\\{((?:align|eqnarray|equation|gather|math|multline)\\*?)\\})[\\s\\S]*?(?=\\\\end\\{\\2\\})/,lookbehind:!0,inside:n,alias:\"string\"}],keyword:{pattern:/(\\\\(?:begin|cite|documentclass|end|label|ref|usepackage)(?:\\[[^\\]]+\\])?\\{)[^}]+(?=\\})/,lookbehind:!0},url:{pattern:/(\\\\url\\{)[^}]+(?=\\})/,lookbehind:!0},headline:{pattern:/(\\\\(?:chapter|frametitle|paragraph|part|section|subparagraph|subsection|subsubparagraph|subsubsection|subsubsubparagraph)\\*?(?:\\[[^\\]]+\\])?\\{)[^}]+(?=\\})/,lookbehind:!0,alias:\"class-name\"},function:{pattern:e,alias:\"selector\"},punctuation:/[[\\]{}&]/},a.languages.tex=a.languages.latex,a.languages.context=a.languages.latex}(Prism);/components/prism-gdscript.js\u0004Prism.languages.gdscript = {\n\t'comment': /#.*/,\n\t'string': {\n\t\tpattern: /@?(?:(\"|')(?:(?!\\1)[^\\n\\\\]|\\\\[\\s\\S])*\\1(?!\"|')|\"\"\"(?:[^\\\\]|\\\\[\\s\\S])*?\"\"\")/,\n\t\tgreedy: true\n\t},\n\t'class-name': {\n\t\t// class_name Foo, extends Bar, class InnerClass\n\t\t// export(int) var baz, export(int, 0) var i\n\t\t// as Node\n\t\t// const FOO: int = 9, var bar: bool = true\n\t\t// func add(reference: Item, amount: int) -> Item:\n\t\tpattern: /(^(?:class|class_name|extends)[ \\t]+|^export\\([ \\t]*|\\bas[ \\t]+|(?:\\b(?:const|var)[ \\t]|[,(])[ \\t]*\\w+[ \\t]*:[ \\t]*|->[ \\t]*)[a-zA-Z_]\\w*/m,\n\t\tlookbehind: true\n\t},\n\t'keyword': /\\b(?:and|as|assert|break|breakpoint|class|class_name|const|continue|elif|else|enum|export|extends|for|func|if|in|is|master|mastersync|match|not|null|onready|or|pass|preload|puppet|puppetsync|remote|remotesync|return|self|setget|signal|static|tool|var|while|yield)\\b/,\n\t'function': /\\b[a-z_]\\w*(?=[ \\t]*\\()/i,\n\t'variable': /\\$\\w+/,\n\t'number': [\n\t\t/\\b0b[01_]+\\b|\\b0x[\\da-fA-F_]+\\b|(?:\\b\\d[\\d_]*(?:\\.[\\d_]*)?|\\B\\.[\\d_]+)(?:e[+-]?[\\d_]+)?\\b/,\n\t\t/\\b(?:INF|NAN|PI|TAU)\\b/\n\t],\n\t'constant': /\\b[A-Z][A-Z_\\d]*\\b/,\n\t'boolean': /\\b(?:false|true)\\b/,\n\t'operator': /->|:=|&&|\\|\\||<<|>>|[-+*/%&|!<>=]=?|[~^]/,\n\t'punctuation': /[.:,;()[\\]{}]/\n};\n5/plugins/copy-to-clipboard/prism-copy-to-clipboard.js\u000fX(function () {\n\n\tif (typeof Prism === 'undefined' || typeof document === 'undefined') {\n\t\treturn;\n\t}\n\n\tif (!Prism.plugins.toolbar) {\n\t\tconsole.warn('Copy to Clipboard plugin loaded before Toolbar plugin.');\n\n\t\treturn;\n\t}\n\n\t/**\n\t * When the given elements is clicked by the user, the given text will be copied to clipboard.\n\t *\n\t * @param {HTMLElement} element\n\t * @param {CopyInfo} copyInfo\n\t *\n\t * @typedef CopyInfo\n\t * @property {() => string} getText\n\t * @property {() => void} success\n\t * @property {(reason: unknown) => void} error\n\t */\n\tfunction registerClipboard(element, copyInfo) {\n\t\telement.addEventListener('click', function () {\n\t\t\tcopyTextToClipboard(copyInfo);\n\t\t});\n\t}\n\n\t// https://stackoverflow.com/a/30810322/7595472\n\n\t/** @param {CopyInfo} copyInfo */\n\tfunction fallbackCopyTextToClipboard(copyInfo) {\n\t\tvar textArea = document.createElement('textarea');\n\t\ttextArea.value = copyInfo.getText();\n\n\t\t// Avoid scrolling to bottom\n\t\ttextArea.style.top = '0';\n\t\ttextArea.style.left = '0';\n\t\ttextArea.style.position = 'fixed';\n\n\t\tdocument.body.appendChild(textArea);\n\t\ttextArea.focus();\n\t\ttextArea.select();\n\n\t\ttry {\n\t\t\tvar successful = document.execCommand('copy');\n\t\t\tsetTimeout(function () {\n\t\t\t\tif (successful) {\n\t\t\t\t\tcopyInfo.success();\n\t\t\t\t} else {\n\t\t\t\t\tcopyInfo.error();\n\t\t\t\t}\n\t\t\t}, 1);\n\t\t} catch (err) {\n\t\t\tsetTimeout(function () {\n\t\t\t\tcopyInfo.error(err);\n\t\t\t}, 1);\n\t\t}\n\n\t\tdocument.body.removeChild(textArea);\n\t}\n\t/** @param {CopyInfo} copyInfo */\n\tfunction copyTextToClipboard(copyInfo) {\n\t\tif (navigator.clipboard) {\n\t\t\tnavigator.clipboard.writeText(copyInfo.getText()).then(copyInfo.success, function () {\n\t\t\t\t// try the fallback in case `writeText` didn't work\n\t\t\t\tfallbackCopyTextToClipboard(copyInfo);\n\t\t\t});\n\t\t} else {\n\t\t\tfallbackCopyTextToClipboard(copyInfo);\n\t\t}\n\t}\n\n\t/**\n\t * Selects the text content of the given element.\n\t *\n\t * @param {Element} element\n\t */\n\tfunction selectElementText(element) {\n\t\t// https://stackoverflow.com/a/20079910/7595472\n\t\twindow.getSelection().selectAllChildren(element);\n\t}\n\n\t/**\n\t * Traverses up the DOM tree to find data attributes that override the default plugin settings.\n\t *\n\t * @param {Element} startElement An element to start from.\n\t * @returns {Settings} The plugin settings.\n\t * @typedef {Record<\"copy\" | \"copy-error\" | \"copy-success\" | \"copy-timeout\", string | number>} Settings\n\t */\n\tfunction getSettings(startElement) {\n\t\t/** @type {Settings} */\n\t\tvar settings = {\n\t\t\t'copy': 'Copy',\n\t\t\t'copy-error': 'Press Ctrl+C to copy',\n\t\t\t'copy-success': 'Copied!',\n\t\t\t'copy-timeout': 5000\n\t\t};\n\n\t\tvar prefix = 'data-prismjs-';\n\t\tfor (var key in settings) {\n\t\t\tvar attr = prefix + key;\n\t\t\tvar element = startElement;\n\t\t\twhile (element && !element.hasAttribute(attr)) {\n\t\t\t\telement = element.parentElement;\n\t\t\t}\n\t\t\tif (element) {\n\t\t\t\tsettings[key] = element.getAttribute(attr);\n\t\t\t}\n\t\t}\n\t\treturn settings;\n\t}\n\n\tPrism.plugins.toolbar.registerButton('copy-to-clipboard', function (env) {\n\t\tvar element = env.element;\n\n\t\tvar settings = getSettings(element);\n\n\t\tvar linkCopy = document.createElement('button');\n\t\tlinkCopy.className = 'copy-to-clipboard-button';\n\t\tlinkCopy.setAttribute('type', 'button');\n\t\tvar linkSpan = document.createElement('span');\n\t\tlinkCopy.appendChild(linkSpan);\n\n\t\tsetState('copy');\n\n\t\tregisterClipboard(linkCopy, {\n\t\t\tgetText: function () {\n\t\t\t\treturn element.textContent;\n\t\t\t},\n\t\t\tsuccess: function () {\n\t\t\t\tsetState('copy-success');\n\n\t\t\t\tresetText();\n\t\t\t},\n\t\t\terror: function () {\n\t\t\t\tsetState('copy-error');\n\n\t\t\t\tsetTimeout(function () {\n\t\t\t\t\tselectElementText(element);\n\t\t\t\t}, 1);\n\n\t\t\t\tresetText();\n\t\t\t}\n\t\t});\n\n\t\treturn linkCopy;\n\n\t\tfunction resetText() {\n\t\t\tsetTimeout(function () { setState('copy'); }, settings['copy-timeout']);\n\t\t}\n\n\t\t/** @param {\"copy\" | \"copy-error\" | \"copy-success\"} state */\n\t\tfunction setState(state) {\n\t\t\tlinkSpan.textContent = settings[state];\n\t\t\tlinkCopy.setAttribute('data-copy-state', state);\n\t\t}\n\t});\n}());\n/components/prism-monkey.min.js\u0003mPrism.languages.monkey={comment:{pattern:/^#Rem\\s[\\s\\S]*?^#End|'.+/im,greedy:!0},string:{pattern:/\"[^\"\\r\\n]*\"/,greedy:!0},preprocessor:{pattern:/(^[ \\t]*)#.+/m,lookbehind:!0,greedy:!0,alias:\"property\"},function:/\\b\\w+(?=\\()/,\"type-char\":{pattern:/\\b[?%#$]/,alias:\"class-name\"},number:{pattern:/((?:\\.\\.)?)(?:(?:\\b|\\B-\\.?|\\B\\.)\\d+(?:(?!\\.\\.)\\.\\d*)?|\\$[\\da-f]+)/i,lookbehind:!0},keyword:/\\b(?:Abstract|Array|Bool|Case|Catch|Class|Const|Continue|Default|Eachin|Else|ElseIf|End|EndIf|Exit|Extends|Extern|False|Field|Final|Float|For|Forever|Function|Global|If|Implements|Import|Inline|Int|Interface|Local|Method|Module|New|Next|Null|Object|Private|Property|Public|Repeat|Return|Select|Self|Step|Strict|String|Super|Then|Throw|To|True|Try|Until|Void|Wend|While)\\b/i,operator:/\\.\\.|<[=>]?|>=?|:?=|(?:[+\\-*\\/&~|]|\\b(?:Mod|Shl|Shr)\\b)=?|\\b(?:And|Not|Or)\\b/i,punctuation:/[.,:;()\\[\\]]/};/components/prism-clike.min.js\u0002Prism.languages.clike={comment:[{pattern:/(^|[^\\\\])\\/\\*[\\s\\S]*?(?:\\*\\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\\\:])\\/\\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1/,greedy:!0},\"class-name\":{pattern:/(\\b(?:class|extends|implements|instanceof|interface|new|trait)\\s+|\\bcatch\\s+\\()[\\w.\\\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\\\]/}},keyword:/\\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\\b/,boolean:/\\b(?:false|true)\\b/,function:/\\b\\w+(?=\\()/,number:/\\b0x[\\da-f]+\\b|(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:e[+-]?\\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\\+\\+?|&&?|\\|\\|?|[?*/~^%]/,punctuation:/[{}[\\];(),.:]/};/components/prism-toml.min.js\u0003!function(e){function n(e){return e.replace(/__/g,(function(){return\"(?:[\\\\w-]+|'[^'\\n\\r]*'|\\\"(?:\\\\\\\\.|[^\\\\\\\\\\\"\\r\\n])*\\\")\"}))}e.languages.toml={comment:{pattern:/#.*/,greedy:!0},table:{pattern:RegExp(n(\"(^[\\t ]*\\\\[\\\\s*(?:\\\\[\\\\s*)?)__(?:\\\\s*\\\\.\\\\s*__)*(?=\\\\s*\\\\])\"),\"m\"),lookbehind:!0,greedy:!0,alias:\"class-name\"},key:{pattern:RegExp(n(\"(^[\\t ]*|[{,]\\\\s*)__(?:\\\\s*\\\\.\\\\s*__)*(?=\\\\s*=)\"),\"m\"),lookbehind:!0,greedy:!0,alias:\"property\"},string:{pattern:/\"\"\"(?:\\\\[\\s\\S]|[^\\\\])*?\"\"\"|'''[\\s\\S]*?'''|'[^'\\n\\r]*'|\"(?:\\\\.|[^\\\\\"\\r\\n])*\"/,greedy:!0},date:[{pattern:/\\b\\d{4}-\\d{2}-\\d{2}(?:[T\\s]\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|[+-]\\d{2}:\\d{2})?)?\\b/i,alias:\"number\"},{pattern:/\\b\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?\\b/,alias:\"number\"}],number:/(?:\\b0(?:x[\\da-zA-Z]+(?:_[\\da-zA-Z]+)*|o[0-7]+(?:_[0-7]+)*|b[10]+(?:_[10]+)*))\\b|[-+]?\\b\\d+(?:_\\d+)*(?:\\.\\d+(?:_\\d+)*)?(?:[eE][+-]?\\d+(?:_\\d+)*)?\\b|[-+]?\\b(?:inf|nan)\\b/,boolean:/\\b(?:false|true)\\b/,punctuation:/[.,=[\\]{}]/}}(Prism);#/components/prism-purescript.min.js\t\u0002Prism.languages.purescript=Prism.languages.extend(\"haskell\",{keyword:/\\b(?:ado|case|class|data|derive|do|else|forall|if|in|infixl|infixr|instance|let|module|newtype|of|primitive|then|type|where)\\b|∀/,\"import-statement\":{pattern:/(^[\\t ]*)import\\s+[A-Z][\\w']*(?:\\.[A-Z][\\w']*)*(?:\\s+as\\s+[A-Z][\\w']*(?:\\.[A-Z][\\w']*)*)?(?:\\s+hiding\\b)?/m,lookbehind:!0,inside:{keyword:/\\b(?:as|hiding|import)\\b/,punctuation:/\\./}},builtin:/\\b(?:absurd|add|ap|append|apply|between|bind|bottom|clamp|compare|comparing|compose|conj|const|degree|discard|disj|div|eq|flap|flip|gcd|identity|ifM|join|lcm|liftA1|liftM1|map|max|mempty|min|mod|mul|negate|not|notEq|one|otherwise|recip|show|sub|top|unit|unless|unlessM|void|when|whenM|zero)\\b/,operator:[Prism.languages.haskell.operator[0],Prism.languages.haskell.operator[2],/[\\xa2-\\xa6\\xa8\\xa9\\xac\\xae-\\xb1\\xb4\\xb8\\xd7\\xf7\\u02c2-\\u02c5\\u02d2-\\u02df\\u02e5-\\u02eb\\u02ed\\u02ef-\\u02ff\\u0375\\u0384\\u0385\\u03f6\\u0482\\u058d-\\u058f\\u0606-\\u0608\\u060b\\u060e\\u060f\\u06de\\u06e9\\u06fd\\u06fe\\u07f6\\u07fe\\u07ff\\u09f2\\u09f3\\u09fa\\u09fb\\u0af1\\u0b70\\u0bf3-\\u0bfa\\u0c7f\\u0d4f\\u0d79\\u0e3f\\u0f01-\\u0f03\\u0f13\\u0f15-\\u0f17\\u0f1a-\\u0f1f\\u0f34\\u0f36\\u0f38\\u0fbe-\\u0fc5\\u0fc7-\\u0fcc\\u0fce\\u0fcf\\u0fd5-\\u0fd8\\u109e\\u109f\\u1390-\\u1399\\u166d\\u17db\\u1940\\u19de-\\u19ff\\u1b61-\\u1b6a\\u1b74-\\u1b7c\\u1fbd\\u1fbf-\\u1fc1\\u1fcd-\\u1fcf\\u1fdd-\\u1fdf\\u1fed-\\u1fef\\u1ffd\\u1ffe\\u2044\\u2052\\u207a-\\u207c\\u208a-\\u208c\\u20a0-\\u20bf\\u2100\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211e-\\u2123\\u2125\\u2127\\u2129\\u212e\\u213a\\u213b\\u2140-\\u2144\\u214a-\\u214d\\u214f\\u218a\\u218b\\u2190-\\u2307\\u230c-\\u2328\\u232b-\\u2426\\u2440-\\u244a\\u249c-\\u24e9\\u2500-\\u2767\\u2794-\\u27c4\\u27c7-\\u27e5\\u27f0-\\u2982\\u2999-\\u29d7\\u29dc-\\u29fb\\u29fe-\\u2b73\\u2b76-\\u2b95\\u2b97-\\u2bff\\u2ce5-\\u2cea\\u2e50\\u2e51\\u2e80-\\u2e99\\u2e9b-\\u2ef3\\u2f00-\\u2fd5\\u2ff0-\\u2ffb\\u3004\\u3012\\u3013\\u3020\\u3036\\u3037\\u303e\\u303f\\u309b\\u309c\\u3190\\u3191\\u3196-\\u319f\\u31c0-\\u31e3\\u3200-\\u321e\\u322a-\\u3247\\u3250\\u3260-\\u327f\\u328a-\\u32b0\\u32c0-\\u33ff\\u4dc0-\\u4dff\\ua490-\\ua4c6\\ua700-\\ua716\\ua720\\ua721\\ua789\\ua78a\\ua828-\\ua82b\\ua836-\\ua839\\uaa77-\\uaa79\\uab5b\\uab6a\\uab6b\\ufb29\\ufbb2-\\ufbc1\\ufdfc\\ufdfd\\ufe62\\ufe64-\\ufe66\\ufe69\\uff04\\uff0b\\uff1c-\\uff1e\\uff3e\\uff40\\uff5c\\uff5e\\uffe0-\\uffe6\\uffe8-\\uffee\\ufffc\\ufffd]/]}),Prism.languages.purs=Prism.languages.purescript;/components/prism-bsl.js\t/* eslint-disable no-misleading-character-class */\n\n// 1C:Enterprise\n// https://github.com/Diversus23/\n//\nPrism.languages.bsl = {\n\t'comment': /\\/\\/.*/,\n\t'string': [\n\t\t// Строки\n\t\t// Strings\n\t\t{\n\t\t\tpattern: /\"(?:[^\"]|\"\")*\"(?!\")/,\n\t\t\tgreedy: true\n\t\t},\n\t\t// Дата и время\n\t\t// Date & time\n\t\t{\n\t\t\tpattern: /'(?:[^'\\r\\n\\\\]|\\\\.)*'/\n\t\t}\n\t],\n\t'keyword': [\n\t\t{\n\t\t\t// RU\n\t\t\tpattern: /(^|[^\\w\\u0400-\\u0484\\u0487-\\u052f\\u1d2b\\u1d78\\u2de0-\\u2dff\\ua640-\\ua69f\\ufe2e\\ufe2f])(?:пока|для|новый|прервать|попытка|исключение|вызватьисключение|иначе|конецпопытки|неопределено|функция|перем|возврат|конецфункции|если|иначеесли|процедура|конецпроцедуры|тогда|знач|экспорт|конецесли|из|каждого|истина|ложь|по|цикл|конеццикла|выполнить)(?![\\w\\u0400-\\u0484\\u0487-\\u052f\\u1d2b\\u1d78\\u2de0-\\u2dff\\ua640-\\ua69f\\ufe2e\\ufe2f])/i,\n\t\t\tlookbehind: true\n\t\t},\n\t\t{\n\t\t\t// EN\n\t\t\tpattern: /\\b(?:break|do|each|else|elseif|enddo|endfunction|endif|endprocedure|endtry|except|execute|export|false|for|function|if|in|new|null|procedure|raise|return|then|to|true|try|undefined|val|var|while)\\b/i\n\t\t}\n\t],\n\t'number': {\n\t\tpattern: /(^(?=\\d)|[^\\w\\u0400-\\u0484\\u0487-\\u052f\\u1d2b\\u1d78\\u2de0-\\u2dff\\ua640-\\ua69f\\ufe2e\\ufe2f])(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:E[+-]?\\d+)?/i,\n\t\tlookbehind: true\n\t},\n\t'operator': [\n\t\t/[<>+\\-*/]=?|[%=]/,\n\t\t// RU\n\t\t{\n\t\t\tpattern: /(^|[^\\w\\u0400-\\u0484\\u0487-\\u052f\\u1d2b\\u1d78\\u2de0-\\u2dff\\ua640-\\ua69f\\ufe2e\\ufe2f])(?:и|или|не)(?![\\w\\u0400-\\u0484\\u0487-\\u052f\\u1d2b\\u1d78\\u2de0-\\u2dff\\ua640-\\ua69f\\ufe2e\\ufe2f])/i,\n\t\t\tlookbehind: true\n\t\t},\n\t\t// EN\n\t\t{\n\t\t\tpattern: /\\b(?:and|not|or)\\b/i\n\t\t}\n\t],\n\t'punctuation': /\\(\\.|\\.\\)|[()\\[\\]:;,.]/,\n\t'directive': [\n\t\t// Теги препроцессора вида &Клиент, &Сервер, ...\n\t\t// Preprocessor tags of the type &Client, &Server, ...\n\t\t{\n\t\t\tpattern: /^([ \\t]*)&.*/m,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\talias: 'important'\n\t\t},\n\t\t// Инструкции препроцессора вида:\n\t\t// #Если Сервер Тогда\n\t\t// ...\n\t\t// #КонецЕсли\n\t\t// Preprocessor instructions of the form:\n\t\t// #If Server Then\n\t\t// ...\n\t\t// #EndIf\n\t\t{\n\t\t\tpattern: /^([ \\t]*)#.*/gm,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\talias: 'important'\n\t\t}\n\t]\n};\n\nPrism.languages.oscript = Prism.languages['bsl'];\n/components/prism-n1ql.js\b+// https://docs.couchbase.com/server/current/n1ql/n1ql-language-reference/index.html\n\nPrism.languages.n1ql = {\n\t'comment': {\n\t\tpattern: /\\/\\*[\\s\\S]*?(?:$|\\*\\/)|--.*/,\n\t\tgreedy: true,\n\t},\n\t'string': {\n\t\tpattern: /([\"'])(?:\\\\[\\s\\S]|(?!\\1)[^\\\\]|\\1\\1)*\\1/,\n\t\tgreedy: true,\n\t},\n\t'identifier': {\n\t\tpattern: /`(?:\\\\[\\s\\S]|[^\\\\`]|``)*`/,\n\t\tgreedy: true,\n\t},\n\t'parameter': /\\$[\\w.]+/,\n\t// https://docs.couchbase.com/server/current/n1ql/n1ql-language-reference/reservedwords.html#n1ql-reserved-words\n\t'keyword': /\\b(?:ADVISE|ALL|ALTER|ANALYZE|AS|ASC|AT|BEGIN|BINARY|BOOLEAN|BREAK|BUCKET|BUILD|BY|CALL|CAST|CLUSTER|COLLATE|COLLECTION|COMMIT|COMMITTED|CONNECT|CONTINUE|CORRELATE|CORRELATED|COVER|CREATE|CURRENT|DATABASE|DATASET|DATASTORE|DECLARE|DECREMENT|DELETE|DERIVED|DESC|DESCRIBE|DISTINCT|DO|DROP|EACH|ELEMENT|EXCEPT|EXCLUDE|EXECUTE|EXPLAIN|FETCH|FILTER|FLATTEN|FLUSH|FOLLOWING|FOR|FORCE|FROM|FTS|FUNCTION|GOLANG|GRANT|GROUP|GROUPS|GSI|HASH|HAVING|IF|IGNORE|ILIKE|INCLUDE|INCREMENT|INDEX|INFER|INLINE|INNER|INSERT|INTERSECT|INTO|IS|ISOLATION|JAVASCRIPT|JOIN|KEY|KEYS|KEYSPACE|KNOWN|LANGUAGE|LAST|LEFT|LET|LETTING|LEVEL|LIMIT|LSM|MAP|MAPPING|MATCHED|MATERIALIZED|MERGE|MINUS|MISSING|NAMESPACE|NEST|NL|NO|NTH_VALUE|NULL|NULLS|NUMBER|OBJECT|OFFSET|ON|OPTION|OPTIONS|ORDER|OTHERS|OUTER|OVER|PARSE|PARTITION|PASSWORD|PATH|POOL|PRECEDING|PREPARE|PRIMARY|PRIVATE|PRIVILEGE|PROBE|PROCEDURE|PUBLIC|RANGE|RAW|REALM|REDUCE|RENAME|RESPECT|RETURN|RETURNING|REVOKE|RIGHT|ROLE|ROLLBACK|ROW|ROWS|SATISFIES|SAVEPOINT|SCHEMA|SCOPE|SELECT|SELF|SEMI|SET|SHOW|SOME|START|STATISTICS|STRING|SYSTEM|TIES|TO|TRAN|TRANSACTION|TRIGGER|TRUNCATE|UNBOUNDED|UNDER|UNION|UNIQUE|UNKNOWN|UNNEST|UNSET|UPDATE|UPSERT|USE|USER|USING|VALIDATE|VALUE|VALUES|VIA|VIEW|WHERE|WHILE|WINDOW|WITH|WORK|XOR)\\b/i,\n\t'function': /\\b[a-z_]\\w*(?=\\s*\\()/i,\n\t'boolean': /\\b(?:FALSE|TRUE)\\b/i,\n\t'number': /(?:\\b\\d+\\.|\\B\\.)\\d+e[+\\-]?\\d+\\b|\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+\\b/i,\n\t'operator': /[-+*\\/%]|!=|==?|\\|\\||<[>=]?|>=?|\\b(?:AND|ANY|ARRAY|BETWEEN|CASE|ELSE|END|EVERY|EXISTS|FIRST|IN|LIKE|NOT|OR|THEN|VALUED|WHEN|WITHIN)\\b/i,\n\t'punctuation': /[;[\\](),.{}:]/\n};\n#/components/prism-chaiscript.min.js\u0004Prism.languages.chaiscript=Prism.languages.extend(\"clike\",{string:{pattern:/(^|[^\\\\])'(?:[^'\\\\]|\\\\[\\s\\S])*'/,lookbehind:!0,greedy:!0},\"class-name\":[{pattern:/(\\bclass\\s+)\\w+/,lookbehind:!0},{pattern:/(\\b(?:attr|def)\\s+)\\w+(?=\\s*::)/,lookbehind:!0}],keyword:/\\b(?:attr|auto|break|case|catch|class|continue|def|default|else|finally|for|fun|global|if|return|switch|this|try|var|while)\\b/,number:[Prism.languages.cpp.number,/\\b(?:Infinity|NaN)\\b/],operator:/>>=?|<<=?|\\|\\||&&|:[:=]?|--|\\+\\+|[=!<>+\\-*/%|&^]=?|[?~]|`[^`\\r\\n]{1,4}`/}),Prism.languages.insertBefore(\"chaiscript\",\"operator\",{\"parameter-type\":{pattern:/([,(]\\s*)\\w+(?=\\s+\\w)/,lookbehind:!0,alias:\"class-name\"}}),Prism.languages.insertBefore(\"chaiscript\",\"string\",{\"string-interpolation\":{pattern:/(^|[^\\\\])\"(?:[^\"$\\\\]|\\\\[\\s\\S]|\\$(?!\\{)|\\$\\{(?:[^{}]|\\{(?:[^{}]|\\{[^{}]*\\})*\\})*\\})*\"/,lookbehind:!0,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^\\\\])(?:\\\\{2})*)\\$\\{(?:[^{}]|\\{(?:[^{}]|\\{[^{}]*\\})*\\})*\\}/,lookbehind:!0,inside:{\"interpolation-expression\":{pattern:/(^\\$\\{)[\\s\\S]+(?=\\}$)/,lookbehind:!0,inside:Prism.languages.chaiscript},\"interpolation-punctuation\":{pattern:/^\\$\\{|\\}$/,alias:\"punctuation\"}}},string:/[\\s\\S]+/}}});/components/prism-sql.min.js\fPrism.languages.sql={comment:{pattern:/(^|[^\\\\])(?:\\/\\*[\\s\\S]*?\\*\\/|(?:--|\\/\\/|#).*)/,lookbehind:!0},variable:[{pattern:/@([\"'`])(?:\\\\[\\s\\S]|(?!\\1)[^\\\\])+\\1/,greedy:!0},/@[\\w.$]+/],string:{pattern:/(^|[^@\\\\])(\"|')(?:\\\\[\\s\\S]|(?!\\2)[^\\\\]|\\2\\2)*\\2/,greedy:!0,lookbehind:!0},identifier:{pattern:/(^|[^@\\\\])`(?:\\\\[\\s\\S]|[^`\\\\]|``)*`/,greedy:!0,lookbehind:!0,inside:{punctuation:/^`|`$/}},function:/\\b(?:AVG|COUNT|FIRST|FORMAT|LAST|LCASE|LEN|MAX|MID|MIN|MOD|NOW|ROUND|SUM|UCASE)(?=\\s*\\()/i,keyword:/\\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR(?:ACTER|SET)?|CHECK(?:POINT)?|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMNS?|COMMENT|COMMIT(?:TED)?|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS(?:TABLE)?|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|CYCLE|DATA(?:BASES?)?|DATE(?:TIME)?|DAY|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITERS?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE|ELSE(?:IF)?|ENABLE|ENCLOSED|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPED?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|HOUR|IDENTITY(?:COL|_INSERT)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|INVOKER|ISOLATION|ITERATE|JOIN|KEYS?|KILL|LANGUAGE|LAST|LEAVE|LEFT|LEVEL|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|LOOP|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MINUTE|MODE|MODIFIES|MODIFY|MONTH|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL|NATURAL|NCHAR|NEXT|NO|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREPARE|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READS?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEAT(?:ABLE)?|REPLACE|REPLICATION|REQUIRE|RESIGNAL|RESTORE|RESTRICT|RETURN(?:ING|S)?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SECOND|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|SQL|START(?:ING)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED|TEXT(?:SIZE)?|THEN|TIME(?:STAMP)?|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNLOCK|UNPIVOT|UNSIGNED|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?|YEAR)\\b/i,boolean:/\\b(?:FALSE|NULL|TRUE)\\b/i,number:/\\b0x[\\da-f]+\\b|\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+\\b/i,operator:/[-+*\\/=%^~]|&&?|\\|\\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\\b/i,punctuation:/[;[\\]()`,.]/};,/plugins/autolinker/prism-autolinker.min.css\u0017.token a{color:inherit}/components/prism-aql.min.js\u0004\u0018Prism.languages.aql={comment:/\\/\\/.*|\\/\\*[\\s\\S]*?\\*\\//,property:{pattern:/([{,]\\s*)(?:(?!\\d)\\w+|([\"'´`])(?:(?!\\2)[^\\\\\\r\\n]|\\\\.)*\\2)(?=\\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/([\"'])(?:(?!\\1)[^\\\\\\r\\n]|\\\\.)*\\1/,greedy:!0},identifier:{pattern:/([´`])(?:(?!\\1)[^\\\\\\r\\n]|\\\\.)*\\1/,greedy:!0},variable:/@@?\\w+/,keyword:[{pattern:/(\\bWITH\\s+)COUNT(?=\\s+INTO\\b)/i,lookbehind:!0},/\\b(?:AGGREGATE|ALL|AND|ANY|ASC|COLLECT|DESC|DISTINCT|FILTER|FOR|GRAPH|IN|INBOUND|INSERT|INTO|K_PATHS|K_SHORTEST_PATHS|LET|LIKE|LIMIT|NONE|NOT|NULL|OR|OUTBOUND|REMOVE|REPLACE|RETURN|SHORTEST_PATH|SORT|UPDATE|UPSERT|WINDOW|WITH)\\b/i,{pattern:/(^|[^\\w.[])(?:KEEP|PRUNE|SEARCH|TO)\\b/i,lookbehind:!0},{pattern:/(^|[^\\w.[])(?:CURRENT|NEW|OLD)\\b/,lookbehind:!0},{pattern:/\\bOPTIONS(?=\\s*\\{)/i}],function:/\\b(?!\\d)\\w+(?=\\s*\\()/,boolean:/\\b(?:false|true)\\b/i,range:{pattern:/\\.\\./,alias:\"operator\"},number:[/\\b0b[01]+/i,/\\b0x[0-9a-f]+/i,/(?:\\B\\.\\d+|\\b(?:0|[1-9]\\d*)(?:\\.\\d+)?)(?:e[+-]?\\d+)?/i],operator:/\\*{2,}|[=!]~|[!=<>]=?|&&|\\|\\||[-+*/%]/,punctuation:/::|[?.:,;()[\\]{}]/};'/plugins/treeview/prism-treeview.min.js\u0002\"undefined\"!=typeof Prism&&(Prism.languages.treeview={\"treeview-part\":{pattern:/^.+/m,inside:{\"entry-line\":[{pattern:/\\|-- |├── /,alias:\"line-h\"},{pattern:/\\| {3}|│ {3}/,alias:\"line-v\"},{pattern:/`-- |└── /,alias:\"line-v-last\"},{pattern:/ {4}/,alias:\"line-v-gap\"}],\"entry-name\":{pattern:/.*\\S.*/,inside:{operator:/ -> /}}}}},Prism.hooks.add(\"wrap\",(function(e){if(\"treeview\"===e.language&&\"entry-name\"===e.type){var t=e.classes,n=/(^|[^\\\\])\\/\\s*$/;if(n.test(e.content))e.content=e.content.replace(n,\"$1\"),t.push(\"dir\");else{e.content=e.content.replace(/(^|[^\\\\])[=*|]\\s*$/,\"$1\");for(var a=e.content.toLowerCase().replace(/\\s+/g,\"\").split(\".\");a.length>1;)a.shift(),t.push(\"ext-\"+a.join(\"-\"))}\".\"===e.content[0]&&t.push(\"dotfile\")}})));$/plugins/treeview/prism-treeview.css\u001f.token.treeview-part .entry-line {\n\tposition: relative;\n\ttext-indent: -99em;\n\tdisplay: inline-block;\n\tvertical-align: top;\n\twidth: 1.2em;\n}\n.token.treeview-part .entry-line:before,\n.token.treeview-part .line-h:after {\n\tcontent: \"\";\n\tposition: absolute;\n\ttop: 0;\n\tleft: 50%;\n\twidth: 50%;\n\theight: 100%;\n}\n.token.treeview-part .line-h:before,\n.token.treeview-part .line-v:before {\n\tborder-left: 1px solid #ccc;\n}\n.token.treeview-part .line-v-last:before {\n\theight: 50%;\n\tborder-left: 1px solid #ccc;\n\tborder-bottom: 1px solid #ccc;\n}\n.token.treeview-part .line-h:after {\n\theight: 50%;\n\tborder-bottom: 1px solid #ccc;\n}\n.token.treeview-part .entry-name {\n\tposition: relative;\n\tdisplay: inline-block;\n\tvertical-align: top;\n}\n.token.treeview-part .entry-name.dotfile {\n\topacity: 0.5;\n}\n\n/* @GENERATED-FONT */\n@font-face {\n\tfont-family: \"PrismTreeview\";\n\t/**\n\t * This font is generated from the .svg files in the `icons` folder. See the `treeviewIconFont` function in\n\t * `gulpfile.js/index.js` for more information.\n\t *\n\t * Use the following escape sequences to refer to a specific icon:\n\t *\n\t * - \\ea01 file\n\t * - \\ea02 folder\n\t * - \\ea03 image\n\t * - \\ea04 audio\n\t * - \\ea05 video\n\t * - \\ea06 text\n\t * - \\ea07 code\n\t * - \\ea08 archive\n\t * - \\ea09 pdf\n\t * - \\ea0a excel\n\t * - \\ea0b powerpoint\n\t * - \\ea0c word\n\t */\n\tsrc: url(\"data:application/font-woff;base64,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\")\n\t\tformat(\"woff\");\n}\n\n.token.treeview-part .entry-name:before {\n\tcontent: \"\\ea01\";\n\tfont-family: \"PrismTreeview\";\n\tfont-size: inherit;\n\tfont-style: normal;\n\t-webkit-font-smoothing: antialiased;\n\t-moz-osx-font-smoothing: grayscale;\n\twidth: 2.5ex;\n\tdisplay: inline-block;\n}\n\n.token.treeview-part .entry-name.dir:before {\n\tcontent: \"\\ea02\";\n}\n.token.treeview-part .entry-name.ext-bmp:before,\n.token.treeview-part .entry-name.ext-eps:before,\n.token.treeview-part .entry-name.ext-gif:before,\n.token.treeview-part .entry-name.ext-jpe:before,\n.token.treeview-part .entry-name.ext-jpg:before,\n.token.treeview-part .entry-name.ext-jpeg:before,\n.token.treeview-part .entry-name.ext-png:before,\n.token.treeview-part .entry-name.ext-svg:before,\n.token.treeview-part .entry-name.ext-tiff:before {\n\tcontent: \"\\ea03\";\n}\n.token.treeview-part .entry-name.ext-cfg:before,\n.token.treeview-part .entry-name.ext-conf:before,\n.token.treeview-part .entry-name.ext-config:before,\n.token.treeview-part .entry-name.ext-csv:before,\n.token.treeview-part .entry-name.ext-ini:before,\n.token.treeview-part .entry-name.ext-log:before,\n.token.treeview-part .entry-name.ext-md:before,\n.token.treeview-part .entry-name.ext-nfo:before,\n.token.treeview-part .entry-name.ext-txt:before {\n\tcontent: \"\\ea06\";\n}\n.token.treeview-part .entry-name.ext-asp:before,\n.token.treeview-part .entry-name.ext-aspx:before,\n.token.treeview-part .entry-name.ext-c:before,\n.token.treeview-part .entry-name.ext-cc:before,\n.token.treeview-part .entry-name.ext-cpp:before,\n.token.treeview-part .entry-name.ext-cs:before,\n.token.treeview-part .entry-name.ext-css:before,\n.token.treeview-part .entry-name.ext-h:before,\n.token.treeview-part .entry-name.ext-hh:before,\n.token.treeview-part .entry-name.ext-htm:before,\n.token.treeview-part .entry-name.ext-html:before,\n.token.treeview-part .entry-name.ext-jav:before,\n.token.treeview-part .entry-name.ext-java:before,\n.token.treeview-part .entry-name.ext-js:before,\n.token.treeview-part .entry-name.ext-php:before,\n.token.treeview-part .entry-name.ext-rb:before,\n.token.treeview-part .entry-name.ext-xml:before {\n\tcontent: \"\\ea07\";\n}\n.token.treeview-part .entry-name.ext-7z:before,\n.token.treeview-part .entry-name.ext-bz:before,\n.token.treeview-part .entry-name.ext-bz2:before,\n.token.treeview-part .entry-name.ext-gz:before,\n.token.treeview-part .entry-name.ext-rar:before,\n.token.treeview-part .entry-name.ext-tar:before,\n.token.treeview-part .entry-name.ext-tgz:before,\n.token.treeview-part .entry-name.ext-zip:before {\n\tcontent: \"\\ea08\";\n}\n.token.treeview-part .entry-name.ext-aac:before,\n.token.treeview-part .entry-name.ext-au:before,\n.token.treeview-part .entry-name.ext-cda:before,\n.token.treeview-part .entry-name.ext-flac:before,\n.token.treeview-part .entry-name.ext-mp3:before,\n.token.treeview-part .entry-name.ext-oga:before,\n.token.treeview-part .entry-name.ext-ogg:before,\n.token.treeview-part .entry-name.ext-wav:before,\n.token.treeview-part .entry-name.ext-wma:before {\n\tcontent: \"\\ea04\";\n}\n.token.treeview-part .entry-name.ext-avi:before,\n.token.treeview-part .entry-name.ext-flv:before,\n.token.treeview-part .entry-name.ext-mkv:before,\n.token.treeview-part .entry-name.ext-mov:before,\n.token.treeview-part .entry-name.ext-mp4:before,\n.token.treeview-part .entry-name.ext-mpeg:before,\n.token.treeview-part .entry-name.ext-mpg:before,\n.token.treeview-part .entry-name.ext-ogv:before,\n.token.treeview-part .entry-name.ext-webm:before {\n\tcontent: \"\\ea05\";\n}\n.token.treeview-part .entry-name.ext-pdf:before {\n\tcontent: \"\\ea09\";\n}\n.token.treeview-part .entry-name.ext-xls:before,\n.token.treeview-part .entry-name.ext-xlsx:before {\n\tcontent: \"\\ea0a\";\n}\n.token.treeview-part .entry-name.ext-doc:before,\n.token.treeview-part .entry-name.ext-docm:before,\n.token.treeview-part .entry-name.ext-docx:before {\n\tcontent: \"\\ea0c\";\n}\n.token.treeview-part .entry-name.ext-pps:before,\n.token.treeview-part .entry-name.ext-ppt:before,\n.token.treeview-part .entry-name.ext-pptx:before {\n\tcontent: \"\\ea0b\";\n}\n/components/prism-django.js\u0006// Django/Jinja2 syntax definition for Prism.js <http://prismjs.com> syntax highlighter.\n// Mostly it works OK but can paint code incorrectly on complex html/template tag combinations.\n\n(function (Prism) {\n\n\tPrism.languages.django = {\n\t\t'comment': /^\\{#[\\s\\S]*?#\\}$/,\n\t\t'tag': {\n\t\t\tpattern: /(^\\{%[+-]?\\s*)\\w+/,\n\t\t\tlookbehind: true,\n\t\t\talias: 'keyword'\n\t\t},\n\t\t'delimiter': {\n\t\t\tpattern: /^\\{[{%][+-]?|[+-]?[}%]\\}$/,\n\t\t\talias: 'punctuation'\n\t\t},\n\t\t'string': {\n\t\t\tpattern: /(\"|')(?:\\\\.|(?!\\1)[^\\\\\\r\\n])*\\1/,\n\t\t\tgreedy: true\n\t\t},\n\t\t'filter': {\n\t\t\tpattern: /(\\|)\\w+/,\n\t\t\tlookbehind: true,\n\t\t\talias: 'function'\n\t\t},\n\t\t'test': {\n\t\t\tpattern: /(\\bis\\s+(?:not\\s+)?)(?!not\\b)\\w+/,\n\t\t\tlookbehind: true,\n\t\t\talias: 'function'\n\t\t},\n\t\t'function': /\\b[a-z_]\\w+(?=\\s*\\()/i,\n\t\t'keyword': /\\b(?:and|as|by|else|for|if|import|in|is|loop|not|or|recursive|with|without)\\b/,\n\t\t'operator': /[-+%=]=?|!=|\\*\\*?=?|\\/\\/?=?|<[<=>]?|>[=>]?|[&|^~]/,\n\t\t'number': /\\b\\d+(?:\\.\\d+)?\\b/,\n\t\t'boolean': /[Ff]alse|[Nn]one|[Tt]rue/,\n\t\t'variable': /\\b\\w+\\b/,\n\t\t'punctuation': /[{}[\\](),.:;]/\n\t};\n\n\n\tvar pattern = /\\{\\{[\\s\\S]*?\\}\\}|\\{%[\\s\\S]*?%\\}|\\{#[\\s\\S]*?#\\}/g;\n\tvar markupTemplating = Prism.languages['markup-templating'];\n\n\tPrism.hooks.add('before-tokenize', function (env) {\n\t\tmarkupTemplating.buildPlaceholders(env, 'django', pattern);\n\t});\n\tPrism.hooks.add('after-tokenize', function (env) {\n\t\tmarkupTemplating.tokenizePlaceholders(env, 'django');\n\t});\n\n\t// Add an Jinja2 alias\n\tPrism.languages.jinja2 = Prism.languages.django;\n\tPrism.hooks.add('before-tokenize', function (env) {\n\t\tmarkupTemplating.buildPlaceholders(env, 'jinja2', pattern);\n\t});\n\tPrism.hooks.add('after-tokenize', function (env) {\n\t\tmarkupTemplating.tokenizePlaceholders(env, 'jinja2');\n\t});\n\n}(Prism));\n#/components/prism-properties.min.js\u00012Prism.languages.properties={comment:/^[ \\t]*[#!].*$/m,value:{pattern:/(^[ \\t]*(?:\\\\(?:\\r\\n|[\\s\\S])|[^\\\\\\s:=])+(?: *[=:] *(?! )| ))(?:\\\\(?:\\r\\n|[\\s\\S])|[^\\\\\\r\\n])+/m,lookbehind:!0,alias:\"attr-value\"},key:{pattern:/^[ \\t]*(?:\\\\(?:\\r\\n|[\\s\\S])|[^\\\\\\s:=])+(?= *[=:]| )/m,alias:\"attr-name\"},punctuation:/[=:]/};/components/prism-yaml.min.js\u0007!function(e){var n=/[*&][^\\s[\\]{},]+/,r=/!(?:<[\\w\\-%#;/?:@&=+$,.!~*'()[\\]]+>|(?:[a-zA-Z\\d-]*!)?[\\w\\-%#;/?:@&=+$.~*'()]+)?/,t=\"(?:\"+r.source+\"(?:[ \\t]+\"+n.source+\")?|\"+n.source+\"(?:[ \\t]+\"+r.source+\")?)\",a=\"(?:[^\\\\s\\\\x00-\\\\x08\\\\x0e-\\\\x1f!\\\"#%&'*,\\\\-:>?@[\\\\]`{|}\\\\x7f-\\\\x84\\\\x86-\\\\x9f\\\\ud800-\\\\udfff\\\\ufffe\\\\uffff]|[?:-]<PLAIN>)(?:[ \\t]*(?:(?![#:])<PLAIN>|:<PLAIN>))*\".replace(/<PLAIN>/g,(function(){return\"[^\\\\s\\\\x00-\\\\x08\\\\x0e-\\\\x1f,[\\\\]{}\\\\x7f-\\\\x84\\\\x86-\\\\x9f\\\\ud800-\\\\udfff\\\\ufffe\\\\uffff]\"})),d=\"\\\"(?:[^\\\"\\\\\\\\\\r\\n]|\\\\\\\\.)*\\\"|'(?:[^'\\\\\\\\\\r\\n]|\\\\\\\\.)*'\";function o(e,n){n=(n||\"\").replace(/m/g,\"\")+\"m\";var r=\"([:\\\\-,[{]\\\\s*(?:\\\\s<<prop>>[ \\t]+)?)(?:<<value>>)(?=[ \\t]*(?:$|,|\\\\]|\\\\}|(?:[\\r\\n]\\\\s*)?#))\".replace(/<<prop>>/g,(function(){return t})).replace(/<<value>>/g,(function(){return e}));return RegExp(r,n)}e.languages.yaml={scalar:{pattern:RegExp(\"([\\\\-:]\\\\s*(?:\\\\s<<prop>>[ \\t]+)?[|>])[ \\t]*(?:((?:\\r?\\n|\\r)[ \\t]+)\\\\S[^\\r\\n]*(?:\\\\2[^\\r\\n]+)*)\".replace(/<<prop>>/g,(function(){return t}))),lookbehind:!0,alias:\"string\"},comment:/#.*/,key:{pattern:RegExp(\"((?:^|[:\\\\-,[{\\r\\n?])[ \\t]*(?:<<prop>>[ \\t]+)?)<<key>>(?=\\\\s*:\\\\s)\".replace(/<<prop>>/g,(function(){return t})).replace(/<<key>>/g,(function(){return\"(?:\"+a+\"|\"+d+\")\"}))),lookbehind:!0,greedy:!0,alias:\"atrule\"},directive:{pattern:/(^[ \\t]*)%.+/m,lookbehind:!0,alias:\"important\"},datetime:{pattern:o(\"\\\\d{4}-\\\\d\\\\d?-\\\\d\\\\d?(?:[tT]|[ \\t]+)\\\\d\\\\d?:\\\\d{2}:\\\\d{2}(?:\\\\.\\\\d*)?(?:[ \\t]*(?:Z|[-+]\\\\d\\\\d?(?::\\\\d{2})?))?|\\\\d{4}-\\\\d{2}-\\\\d{2}|\\\\d\\\\d?:\\\\d{2}(?::\\\\d{2}(?:\\\\.\\\\d*)?)?\"),lookbehind:!0,alias:\"number\"},boolean:{pattern:o(\"false|true\",\"i\"),lookbehind:!0,alias:\"important\"},null:{pattern:o(\"null|~\",\"i\"),lookbehind:!0,alias:\"important\"},string:{pattern:o(d),lookbehind:!0,greedy:!0},number:{pattern:o(\"[+-]?(?:0x[\\\\da-f]+|0o[0-7]+|(?:\\\\d+(?:\\\\.\\\\d*)?|\\\\.\\\\d+)(?:e[+-]?\\\\d+)?|\\\\.inf|\\\\.nan)\",\"i\"),lookbehind:!0},tag:r,important:n,punctuation:/---|[:[\\]{}\\-,|>?]|\\.\\.\\./},e.languages.yml=e.languages.yaml}(Prism);/components/prism-cilkc.min.jsPrism.languages.cilkc=Prism.languages.insertBefore(\"c\",\"function\",{\"parallel-keyword\":{pattern:/\\bcilk_(?:for|reducer|s(?:cope|pawn|ync))\\b/,alias:\"keyword\"}}),Prism.languages[\"cilk-c\"]=Prism.languages.cilkc;/components/prism-gedcom.js\u0002Prism.languages.gedcom = {\n\t'line-value': {\n\t\t// Preceded by level, optional pointer, and tag\n\t\tpattern: /(^[\\t ]*\\d+ +(?:@\\w[\\w!\"$%&'()*+,\\-./:;<=>?[\\\\\\]^`{|}~\\x80-\\xfe #]*@ +)?\\w+ ).+/m,\n\t\tlookbehind: true,\n\t\tinside: {\n\t\t\t'pointer': {\n\t\t\t\tpattern: /^@\\w[\\w!\"$%&'()*+,\\-./:;<=>?[\\\\\\]^`{|}~\\x80-\\xfe #]*@$/,\n\t\t\t\talias: 'variable'\n\t\t\t}\n\t\t}\n\t},\n\t'record': {\n\t\t// Preceded by level and optional pointer\n\t\tpattern: /(^[\\t ]*\\d+ +(?:@\\w[\\w!\"$%&'()*+,\\-./:;<=>?[\\\\\\]^`{|}~\\x80-\\xfe #]*@ +)?)\\w+/m,\n\t\tlookbehind: true,\n\t\talias: 'tag'\n\t},\n\t'level': {\n\t\tpattern: /(^[\\t ]*)\\d+/m,\n\t\tlookbehind: true,\n\t\talias: 'number'\n\t},\n\t'pointer': {\n\t\tpattern: /@\\w[\\w!\"$%&'()*+,\\-./:;<=>?[\\\\\\]^`{|}~\\x80-\\xfe #]*@/,\n\t\talias: 'variable'\n\t}\n};\n/components/prism-groovy.min.js\u0006K!function(e){var n={pattern:/((?:^|[^\\\\$])(?:\\\\{2})*)\\$(?:\\w+|\\{[^{}]*\\})/,lookbehind:!0,inside:{\"interpolation-punctuation\":{pattern:/^\\$\\{?|\\}$/,alias:\"punctuation\"},expression:{pattern:/[\\s\\S]+/,inside:null}}};e.languages.groovy=e.languages.extend(\"clike\",{string:{pattern:/'''(?:[^\\\\]|\\\\[\\s\\S])*?'''|'(?:\\\\.|[^\\\\'\\r\\n])*'/,greedy:!0},keyword:/\\b(?:abstract|as|assert|boolean|break|byte|case|catch|char|class|const|continue|def|default|do|double|else|enum|extends|final|finally|float|for|goto|if|implements|import|in|instanceof|int|interface|long|native|new|package|private|protected|public|return|short|static|strictfp|super|switch|synchronized|this|throw|throws|trait|transient|try|void|volatile|while)\\b/,number:/\\b(?:0b[01_]+|0x[\\da-f_]+(?:\\.[\\da-f_p\\-]+)?|[\\d_]+(?:\\.[\\d_]+)?(?:e[+-]?\\d+)?)[glidf]?\\b/i,operator:{pattern:/(^|[^.])(?:~|==?~?|\\?[.:]?|\\*(?:[.=]|\\*=?)?|\\.[@&]|\\.\\.<|\\.\\.(?!\\.)|-[-=>]?|\\+[+=]?|!=?|<(?:<=?|=>?)?|>(?:>>?=?|=)?|&[&=]?|\\|[|=]?|\\/=?|\\^=?|%=?)/,lookbehind:!0},punctuation:/\\.+|[{}[\\];(),:$]/}),e.languages.insertBefore(\"groovy\",\"string\",{shebang:{pattern:/#!.+/,alias:\"comment\",greedy:!0},\"interpolation-string\":{pattern:/\"\"\"(?:[^\\\\]|\\\\[\\s\\S])*?\"\"\"|([\"/])(?:\\\\.|(?!\\1)[^\\\\\\r\\n])*\\1|\\$\\/(?:[^/$]|\\$(?:[/$]|(?![/$]))|\\/(?!\\$))*\\/\\$/,greedy:!0,inside:{interpolation:n,string:/[\\s\\S]+/}}}),e.languages.insertBefore(\"groovy\",\"punctuation\",{\"spock-block\":/\\b(?:and|cleanup|expect|given|setup|then|when|where):/}),e.languages.insertBefore(\"groovy\",\"function\",{annotation:{pattern:/(^|[^.])@\\w+/,lookbehind:!0,alias:\"punctuation\"}}),n.inside.expression.inside=e.languages.groovy}(Prism);/components/prism-json.min.js\u0001Prism.languages.json={property:{pattern:/(^|[^\\\\])\"(?:\\\\.|[^\\\\\"\\r\\n])*\"(?=\\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\\\])\"(?:\\\\.|[^\\\\\"\\r\\n])*\"(?!\\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\\/\\/.*|\\/\\*[\\s\\S]*?(?:\\*\\/|$)/,greedy:!0},number:/-?\\b\\d+(?:\\.\\d+)?(?:e[+-]?\\d+)?\\b/i,punctuation:/[{}[\\],]/,operator:/:/,boolean:/\\b(?:false|true)\\b/,null:{pattern:/\\bnull\\b/,alias:\"keyword\"}},Prism.languages.webmanifest=Prism.languages.json;/components/prism-reason.js\u0004PPrism.languages.reason = Prism.languages.extend('clike', {\n\t'string': {\n\t\tpattern: /\"(?:\\\\(?:\\r\\n|[\\s\\S])|[^\\\\\\r\\n\"])*\"/,\n\t\tgreedy: true\n\t},\n\t// 'class-name' must be matched *after* 'constructor' defined below\n\t'class-name': /\\b[A-Z]\\w*/,\n\t'keyword': /\\b(?:and|as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|method|module|mutable|new|nonrec|object|of|open|or|private|rec|sig|struct|switch|then|to|try|type|val|virtual|when|while|with)\\b/,\n\t'operator': /\\.{3}|:[:=]|\\|>|->|=(?:==?|>)?|<=?|>=?|[|^?'#!~`]|[+\\-*\\/]\\.?|\\b(?:asr|land|lor|lsl|lsr|lxor|mod)\\b/\n});\nPrism.languages.insertBefore('reason', 'class-name', {\n\t'char': {\n\t\tpattern: /'(?:\\\\x[\\da-f]{2}|\\\\o[0-3][0-7][0-7]|\\\\\\d{3}|\\\\.|[^'\\\\\\r\\n])'/,\n\t\tgreedy: true\n\t},\n\t// Negative look-ahead prevents from matching things like String.capitalize\n\t'constructor': /\\b[A-Z]\\w*\\b(?!\\s*\\.)/,\n\t'label': {\n\t\tpattern: /\\b[a-z]\\w*(?=::)/,\n\t\talias: 'symbol'\n\t}\n});\n\n// We can't match functions property, so let's not even try.\ndelete Prism.languages.reason.function;\n/components/prism-bqn.js\u0006\rPrism.languages.bqn = {\n\t'shebang': {\n\t\tpattern: /^#![ \\t]*\\/.*/,\n\t\talias: 'important',\n\t\tgreedy: true\n\t},\n\t'comment': {\n\t\tpattern: /#.*/,\n\t\tgreedy: true\n\t},\n\t'string-literal': {\n\t\tpattern: /\"(?:[^\"]|\"\")*\"/,\n\t\tgreedy: true,\n\t\talias: 'string'\n\t},\n\t'character-literal': {\n\t\tpattern: /'(?:[\\s\\S]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF])'/,\n\t\tgreedy: true,\n\t\talias: 'char'\n\t},\n\t'function': /•[\\w¯.∞π]+[\\w¯.∞π]*/,\n\t'dot-notation-on-brackets': {\n\t\tpattern: /\\{(?=.*\\}\\.)|\\}\\./,\n\t\talias: 'namespace'\n\t},\n\t'special-name': {\n\t\tpattern: /(?:𝕨|𝕩|𝕗|𝕘|𝕤|𝕣|𝕎|𝕏|𝔽|𝔾|𝕊|_𝕣_|_𝕣)/,\n\t\talias: 'keyword'\n\t},\n\t'dot-notation-on-name': {\n\t\tpattern: /[A-Za-z_][\\w¯∞π]*\\./,\n\t\talias: 'namespace'\n\t},\n\t'word-number-scientific': {\n\t\tpattern: /\\d+(?:\\.\\d+)?[eE]¯?\\d+/,\n\t\talias: 'number'\n\t},\n\t'word-name': {\n\t\tpattern: /[A-Za-z_][\\w¯∞π]*/,\n\t\talias: 'symbol'\n\t},\n\t'word-number': {\n\t\tpattern: /[¯∞π]?(?:\\d*\\.?\\b\\d+(?:e[+¯]?\\d+|E[+¯]?\\d+)?|¯|∞|π)(?:j¯?(?:(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:e[+¯]?\\d+|E[+¯]?\\d+)?|¯|∞|π))?/,\n\t\talias: 'number'\n\t},\n\t'null-literal': {\n\t\tpattern: /@/,\n\t\talias: 'char'\n\t},\n\t'primitive-functions': {\n\t\tpattern: /[-+×÷⋆√⌊⌈|¬∧∨<>≠=≤≥≡≢⊣⊢⥊∾≍⋈↑↓↕«»⌽⍉/⍋⍒⊏⊑⊐⊒∊⍷⊔!]/,\n\t\talias: 'operator'\n\t},\n\t'primitive-1-operators': {\n\t\tpattern: /[`˜˘¨⁼⌜´˝˙]/,\n\t\talias: 'operator'\n\t},\n\t'primitive-2-operators': {\n\t\tpattern: /[∘⊸⟜○⌾⎉⚇⍟⊘◶⎊]/,\n\t\talias: 'operator'\n\t},\n\t'punctuation': /[←⇐↩(){}⟨⟩[\\]‿·⋄,.;:?]/\n};\n#/components/prism-livescript.min.js\u0007Prism.languages.livescript={comment:[{pattern:/(^|[^\\\\])\\/\\*[\\s\\S]*?\\*\\//,lookbehind:!0},{pattern:/(^|[^\\\\])#.*/,lookbehind:!0}],\"interpolated-string\":{pattern:/(^|[^\"])(\"\"\"|\")(?:\\\\[\\s\\S]|(?!\\2)[^\\\\])*\\2(?!\")/,lookbehind:!0,greedy:!0,inside:{variable:{pattern:/(^|[^\\\\])#[a-z_](?:-?[a-z]|[\\d_])*/m,lookbehind:!0},interpolation:{pattern:/(^|[^\\\\])#\\{[^}]+\\}/m,lookbehind:!0,inside:{\"interpolation-punctuation\":{pattern:/^#\\{|\\}$/,alias:\"variable\"}}},string:/[\\s\\S]+/}},string:[{pattern:/('''|')(?:\\\\[\\s\\S]|(?!\\1)[^\\\\])*\\1/,greedy:!0},{pattern:/<\\[[\\s\\S]*?\\]>/,greedy:!0},/\\\\[^\\s,;\\])}]+/],regex:[{pattern:/\\/\\/(?:\\[[^\\r\\n\\]]*\\]|\\\\.|(?!\\/\\/)[^\\\\\\[])+\\/\\/[gimyu]{0,5}/,greedy:!0,inside:{comment:{pattern:/(^|[^\\\\])#.*/,lookbehind:!0}}},{pattern:/\\/(?:\\[[^\\r\\n\\]]*\\]|\\\\.|[^/\\\\\\r\\n\\[])+\\/[gimyu]{0,5}/,greedy:!0}],keyword:{pattern:/(^|(?!-).)\\b(?:break|case|catch|class|const|continue|default|do|else|extends|fallthrough|finally|for(?: ever)?|function|if|implements|it|let|loop|new|null|otherwise|own|return|super|switch|that|then|this|throw|try|unless|until|var|void|when|while|yield)(?!-)\\b/m,lookbehind:!0},\"keyword-operator\":{pattern:/(^|[^-])\\b(?:(?:delete|require|typeof)!|(?:and|by|delete|export|from|import(?: all)?|in|instanceof|is(?: not|nt)?|not|of|or|til|to|typeof|with|xor)(?!-)\\b)/m,lookbehind:!0,alias:\"operator\"},boolean:{pattern:/(^|[^-])\\b(?:false|no|off|on|true|yes)(?!-)\\b/m,lookbehind:!0},argument:{pattern:/(^|(?!\\.&\\.)[^&])&(?!&)\\d*/m,lookbehind:!0,alias:\"variable\"},number:/\\b(?:\\d+~[\\da-z]+|\\d[\\d_]*(?:\\.\\d[\\d_]*)?(?:[a-z]\\w*)?)/i,identifier:/[a-z_](?:-?[a-z]|[\\d_])*/i,operator:[{pattern:/( )\\.(?= )/,lookbehind:!0},/\\.(?:[=~]|\\.\\.?)|\\.(?:[&|^]|<<|>>>?)\\.|:(?:=|:=?)|&&|\\|[|>]|<(?:<<?<?|--?!?|~~?!?|[|=?])?|>[>=?]?|-(?:->?|>)?|\\+\\+?|@@?|%%?|\\*\\*?|!(?:~?=|--?>|~?~>)?|~(?:~?>|=)?|==?|\\^\\^?|[\\/?]/],punctuation:/[(){}\\[\\]|.,:;`]/},Prism.languages.livescript[\"interpolated-string\"].inside.interpolation.inside.rest=Prism.languages.livescript; /components/prism-arduino.min.js\u000fTPrism.languages.arduino=Prism.languages.extend(\"cpp\",{keyword:/\\b(?:String|array|bool|boolean|break|byte|case|catch|continue|default|do|double|else|finally|for|function|goto|if|in|instanceof|int|integer|long|loop|new|null|return|setup|string|switch|throw|try|void|while|word)\\b/,constant:/\\b(?:ANALOG_MESSAGE|DEFAULT|DIGITAL_MESSAGE|EXTERNAL|FIRMATA_STRING|HIGH|INPUT|INPUT_PULLUP|INTERNAL|INTERNAL1V1|INTERNAL2V56|LED_BUILTIN|LOW|OUTPUT|REPORT_ANALOG|REPORT_DIGITAL|SET_PIN_MODE|SYSEX_START|SYSTEM_RESET)\\b/,builtin:/\\b(?:Audio|BSSID|Bridge|Client|Console|EEPROM|Esplora|EsploraTFT|Ethernet|EthernetClient|EthernetServer|EthernetUDP|File|FileIO|FileSystem|Firmata|GPRS|GSM|GSMBand|GSMClient|GSMModem|GSMPIN|GSMScanner|GSMServer|GSMVoiceCall|GSM_SMS|HttpClient|IPAddress|IRread|Keyboard|KeyboardController|LiquidCrystal|LiquidCrystal_I2C|Mailbox|Mouse|MouseController|PImage|Process|RSSI|RobotControl|RobotMotor|SD|SPI|SSID|Scheduler|Serial|Server|Servo|SoftwareSerial|Stepper|Stream|TFT|Task|USBHost|WiFi|WiFiClient|WiFiServer|WiFiUDP|Wire|YunClient|YunServer|abs|addParameter|analogRead|analogReadResolution|analogReference|analogWrite|analogWriteResolution|answerCall|attach|attachGPRS|attachInterrupt|attached|autoscroll|available|background|beep|begin|beginPacket|beginSD|beginSMS|beginSpeaker|beginTFT|beginTransmission|beginWrite|bit|bitClear|bitRead|bitSet|bitWrite|blink|blinkVersion|buffer|changePIN|checkPIN|checkPUK|checkReg|circle|cityNameRead|cityNameWrite|clear|clearScreen|click|close|compassRead|config|connect|connected|constrain|cos|countryNameRead|countryNameWrite|createChar|cursor|debugPrint|delay|delayMicroseconds|detach|detachInterrupt|digitalRead|digitalWrite|disconnect|display|displayLogos|drawBMP|drawCompass|encryptionType|end|endPacket|endSMS|endTransmission|endWrite|exists|exitValue|fill|find|findUntil|flush|gatewayIP|get|getAsynchronously|getBand|getButton|getCurrentCarrier|getIMEI|getKey|getModifiers|getOemKey|getPINUsed|getResult|getSignalStrength|getSocket|getVoiceCallStatus|getXChange|getYChange|hangCall|height|highByte|home|image|interrupts|isActionDone|isDirectory|isListening|isPIN|isPressed|isValid|keyPressed|keyReleased|keyboardRead|knobRead|leftToRight|line|lineFollowConfig|listen|listenOnLocalhost|loadImage|localIP|lowByte|macAddress|maintain|map|max|messageAvailable|micros|millis|min|mkdir|motorsStop|motorsWrite|mouseDragged|mouseMoved|mousePressed|mouseReleased|move|noAutoscroll|noBlink|noBuffer|noCursor|noDisplay|noFill|noInterrupts|noListenOnLocalhost|noStroke|noTone|onReceive|onRequest|open|openNextFile|overflow|parseCommand|parseFloat|parseInt|parsePacket|pauseMode|peek|pinMode|playFile|playMelody|point|pointTo|position|pow|prepare|press|print|printFirmwareVersion|printVersion|println|process|processInput|pulseIn|put|random|randomSeed|read|readAccelerometer|readBlue|readButton|readBytes|readBytesUntil|readGreen|readJoystickButton|readJoystickSwitch|readJoystickX|readJoystickY|readLightSensor|readMessage|readMicrophone|readNetworks|readRed|readSlider|readString|readStringUntil|readTemperature|ready|rect|release|releaseAll|remoteIP|remoteNumber|remotePort|remove|requestFrom|retrieveCallingNumber|rewindDirectory|rightToLeft|rmdir|robotNameRead|robotNameWrite|run|runAsynchronously|runShellCommand|runShellCommandAsynchronously|running|scanNetworks|scrollDisplayLeft|scrollDisplayRight|seek|sendAnalog|sendDigitalPortPair|sendDigitalPorts|sendString|sendSysex|serialEvent|setBand|setBitOrder|setClockDivider|setCursor|setDNS|setDataMode|setFirmwareVersion|setMode|setPINUsed|setSpeed|setTextSize|setTimeout|shiftIn|shiftOut|shutdown|sin|size|sqrt|startLoop|step|stop|stroke|subnetMask|switchPIN|tan|tempoWrite|text|tone|transfer|tuneWrite|turn|updateIR|userNameRead|userNameWrite|voiceCall|waitContinue|width|write|writeBlue|writeGreen|writeJSON|writeMessage|writeMicroseconds|writeRGB|writeRed|yield)\\b/}),Prism.languages.ino=Prism.languages.arduino;%/components/prism-jsstacktrace.min.js\u0002Prism.languages.jsstacktrace={\"error-message\":{pattern:/^\\S.*/m,alias:\"string\"},\"stack-frame\":{pattern:/(^[ \\t]+)at[ \\t].*/m,lookbehind:!0,inside:{\"not-my-code\":{pattern:/^at[ \\t]+(?!\\s)(?:node\\.js|<unknown>|.*(?:node_modules|\\(<anonymous>\\)|\\(<unknown>|<anonymous>$|\\(internal\\/|\\(node\\.js)).*/m,alias:\"comment\"},filename:{pattern:/(\\bat\\s+(?!\\s)|\\()(?:[a-zA-Z]:)?[^():]+(?=:)/,lookbehind:!0,alias:\"url\"},function:{pattern:/(\\bat\\s+(?:new\\s+)?)(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF<][.$\\w\\xA0-\\uFFFF<>]*/,lookbehind:!0,inside:{punctuation:/\\./}},punctuation:/[()]/,keyword:/\\b(?:at|new)\\b/,alias:{pattern:/\\[(?:as\\s+)?(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF][$\\w\\xA0-\\uFFFF]*\\]/,alias:\"variable\"},\"line-number\":{pattern:/:\\d+(?::\\d+)?\\b/,alias:\"number\",inside:{punctuation:/:/}}}}};"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/cHJvY2Vzc0AwLjExLjEw",
    "content": "/index.js`// for now just expose the builtin process global from node.js\nmodule.exports = global.process;\n/.eslintrc\u0001{\nextends: \"eslint:recommended\",\n  \"env\": {\n    \"node\": true,\n    \"browser\": true,\n    \"es6\" : true,\n    \"mocha\": true\n  },\n  \"rules\": {\n    \"indent\": [2, 4],\n    \"brace-style\": [2, \"1tbs\"],\n    \"quotes\": [2, \"single\"],\n    \"no-console\": 0,\n    \"no-shadow\": 0,\n    \"no-use-before-define\": [2, \"nofunc\"],\n    \"no-underscore-dangle\": 0,\n    \"no-constant-condition\": 0,\n    \"space-after-function-name\": 0,\n   \"consistent-return\": 0\n  }\n}\n/test.js\u0018var assert = require('assert');\nvar ourProcess = require('./browser');\ndescribe('test against our process', function () {\n    test(ourProcess);\n});\nif (!process.browser) {\n  describe('test against node', function () {\n    test(process);\n  });\n  vmtest();\n}\nfunction test (ourProcess) {\n    describe('test arguments', function () {\n        it ('works', function (done) {\n          var order = 0;\n\n\n          ourProcess.nextTick(function (num) {\n              assert.equal(num, order++, 'first one works');\n              ourProcess.nextTick(function (num) {\n                assert.equal(num, order++, 'recursive one is 4th');\n              }, 3);\n          }, 0);\n          ourProcess.nextTick(function (num) {\n              assert.equal(num, order++, 'second one starts');\n              ourProcess.nextTick(function (num) {\n                assert.equal(num, order++, 'this is third');\n                ourProcess.nextTick(function (num) {\n                    assert.equal(num, order++, 'this is last');\n                    done();\n                }, 5);\n            }, 4);\n          }, 1);\n          ourProcess.nextTick(function (num) {\n\n              assert.equal(num, order++, '3rd schedualed happens after the error');\n          }, 2);\n        });\n    });\nif (!process.browser) {\n    describe('test errors', function (t) {\n        it ('works', function (done) {\n        var order = 0;\n        process.removeAllListeners('uncaughtException');\n        process.once('uncaughtException', function(err) {\n            assert.equal(2, order++, 'error is third');\n            ourProcess.nextTick(function () {\n                assert.equal(5, order++, 'schedualed in error is last');\n                done();\n            });\n        });\n        ourProcess.nextTick(function () {\n            assert.equal(0, order++, 'first one works');\n            ourProcess.nextTick(function () {\n            assert.equal(4, order++, 'recursive one is 4th');\n            });\n        });\n        ourProcess.nextTick(function () {\n            assert.equal(1, order++, 'second one starts');\n            throw(new Error('an error is thrown'));\n        });\n        ourProcess.nextTick(function () {\n            assert.equal(3, order++, '3rd schedualed happens after the error');\n        });\n        });\n    });\n}\n    describe('rename globals', function (t) {\n      var oldTimeout = setTimeout;\n      var oldClear = clearTimeout;\n\n      it('clearTimeout', function (done){\n\n        var ok = true;\n        clearTimeout = function () {\n          ok = false;\n        }\n        var ran = false;\n        function cleanup() {\n          clearTimeout = oldClear;\n          var err;\n          try {\n            assert.ok(ok, 'fake clearTimeout ran');\n            assert.ok(ran, 'should have run');\n          } catch (e) {\n            err = e;\n          }\n          done(err);\n        }\n        setTimeout(cleanup, 1000);\n        ourProcess.nextTick(function () {\n          ran = true;\n        });\n      });\n      it('just setTimeout', function (done){\n\n\n        setTimeout = function () {\n          setTimeout = oldTimeout;\n          try {\n            assert.ok(false, 'fake setTimeout called')\n          } catch (e) {\n            done(e);\n          }\n\n        }\n\n        ourProcess.nextTick(function () {\n          setTimeout = oldTimeout;\n          done();\n        });\n      });\n    });\n}\nfunction vmtest() {\n  var vm = require('vm');\n  var fs = require('fs');\n  var process =  fs.readFileSync('./browser.js', {encoding: 'utf8'});\n\n\n  describe('should work in vm in strict mode with no globals', function () {\n    it('should parse', function (done) {\n      var str = '\"use strict\";var module = {exports:{}};';\n      str += process;\n      str += 'this.works = process.browser;';\n      var script = new vm.Script(str);\n      var context = {\n        works: false\n      };\n      script.runInNewContext(context);\n      assert.ok(context.works);\n      done();\n    });\n    it('setTimeout throws error', function (done) {\n      var str = '\"use strict\";var module = {exports:{}};';\n      str += process;\n      str += 'try {process.nextTick(function () {})} catch (e){this.works = e;}';\n      var script = new vm.Script(str);\n      var context = {\n        works: false\n      };\n      script.runInNewContext(context);\n      assert.ok(context.works);\n      done();\n    });\n    it('should generally work', function (done) {\n      var str = '\"use strict\";var module = {exports:{}};';\n      str += process;\n      str += 'process.nextTick(function () {assert.ok(true);done();})';\n      var script = new vm.Script(str);\n      var context = {\n        clearTimeout: clearTimeout,\n        setTimeout: setTimeout,\n        done: done,\n        assert: assert\n      };\n      script.runInNewContext(context);\n    });\n    it('late defs setTimeout', function (done) {\n      var str = '\"use strict\";var module = {exports:{}};';\n      str += process;\n      str += 'var setTimeout = hiddenSetTimeout;process.nextTick(function () {assert.ok(true);done();})';\n      var script = new vm.Script(str);\n      var context = {\n        clearTimeout: clearTimeout,\n        hiddenSetTimeout: setTimeout,\n        done: done,\n        assert: assert\n      };\n      script.runInNewContext(context);\n    });\n    it('late defs clearTimeout', function (done) {\n      var str = '\"use strict\";var module = {exports:{}};';\n      str += process;\n      str += 'var clearTimeout = hiddenClearTimeout;process.nextTick(function () {assert.ok(true);done();})';\n      var script = new vm.Script(str);\n      var context = {\n        hiddenClearTimeout: clearTimeout,\n        setTimeout: setTimeout,\n        done: done,\n        assert: assert\n      };\n      script.runInNewContext(context);\n    });\n    it('late defs setTimeout and then redefine', function (done) {\n      var str = '\"use strict\";var module = {exports:{}};';\n      str += process;\n      str += 'var setTimeout = hiddenSetTimeout;process.nextTick(function () {setTimeout = function (){throw new Error(\"foo\")};hiddenSetTimeout(function(){process.nextTick(function (){assert.ok(true);done();});});});';\n      var script = new vm.Script(str);\n      var context = {\n        clearTimeout: clearTimeout,\n        hiddenSetTimeout: setTimeout,\n        done: done,\n        assert: assert\n      };\n      script.runInNewContext(context);\n    });\n  });\n}\n/browser.js\u0015*// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things.  But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals.  It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n    throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n    throw new Error('clearTimeout has not been defined');\n}\n(function () {\n    try {\n        if (typeof setTimeout === 'function') {\n            cachedSetTimeout = setTimeout;\n        } else {\n            cachedSetTimeout = defaultSetTimout;\n        }\n    } catch (e) {\n        cachedSetTimeout = defaultSetTimout;\n    }\n    try {\n        if (typeof clearTimeout === 'function') {\n            cachedClearTimeout = clearTimeout;\n        } else {\n            cachedClearTimeout = defaultClearTimeout;\n        }\n    } catch (e) {\n        cachedClearTimeout = defaultClearTimeout;\n    }\n} ())\nfunction runTimeout(fun) {\n    if (cachedSetTimeout === setTimeout) {\n        //normal enviroments in sane situations\n        return setTimeout(fun, 0);\n    }\n    // if setTimeout wasn't available but was latter defined\n    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n        cachedSetTimeout = setTimeout;\n        return setTimeout(fun, 0);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedSetTimeout(fun, 0);\n    } catch(e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n            return cachedSetTimeout.call(null, fun, 0);\n        } catch(e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n            return cachedSetTimeout.call(this, fun, 0);\n        }\n    }\n\n\n}\nfunction runClearTimeout(marker) {\n    if (cachedClearTimeout === clearTimeout) {\n        //normal enviroments in sane situations\n        return clearTimeout(marker);\n    }\n    // if clearTimeout wasn't available but was latter defined\n    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n        cachedClearTimeout = clearTimeout;\n        return clearTimeout(marker);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedClearTimeout(marker);\n    } catch (e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n            return cachedClearTimeout.call(null, marker);\n        } catch (e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n            return cachedClearTimeout.call(this, marker);\n        }\n    }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n    if (!draining || !currentQueue) {\n        return;\n    }\n    draining = false;\n    if (currentQueue.length) {\n        queue = currentQueue.concat(queue);\n    } else {\n        queueIndex = -1;\n    }\n    if (queue.length) {\n        drainQueue();\n    }\n}\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    var timeout = runTimeout(cleanUpNextTick);\n    draining = true;\n\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        while (++queueIndex < len) {\n            if (currentQueue) {\n                currentQueue[queueIndex].run();\n            }\n        }\n        queueIndex = -1;\n        len = queue.length;\n    }\n    currentQueue = null;\n    draining = false;\n    runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n    var args = new Array(arguments.length - 1);\n    if (arguments.length > 1) {\n        for (var i = 1; i < arguments.length; i++) {\n            args[i - 1] = arguments[i];\n        }\n    }\n    queue.push(new Item(fun, args));\n    if (queue.length === 1 && !draining) {\n        runTimeout(drainQueue);\n    }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n    this.fun = fun;\n    this.array = array;\n}\nItem.prototype.run = function () {\n    this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n/README.md\u0005O# process\n\n```require('process');``` just like any other module.\n\nWorks in node.js and browsers via the browser.js shim provided with the module.\n\n## browser implementation\n\nThe goal of this module is not to be a full-fledged alternative to the builtin process module. This module mostly exists to provide the nextTick functionality and little more. We keep this module lean because it will often be included by default by tools like browserify when it detects a module has used the `process` global.\n\nIt also exposes a \"browser\" member (i.e. `process.browser`) which is `true` in this implementation but `undefined` in node. This can be used in isomorphic code that adjusts it's behavior depending on which environment it's running in. \n\nIf you are looking to provide other process methods, I suggest you monkey patch them onto the process global in your app. A list of user created patches is below.\n\n* [hrtime](https://github.com/kumavis/browser-process-hrtime)\n* [stdout](https://github.com/kumavis/browser-stdout)\n\n## package manager notes\n\nIf you are writing a bundler to package modules for client side use, make sure you use the ```browser``` field hint in package.json.\n\nSee https://gist.github.com/4339901 for details.\n\nThe [browserify](https://github.com/substack/node-browserify) module will properly handle this field when bundling your files.\n\n\n/LICENSE\u0004J(The MIT License)\n\nCopyright (c) 2013 Roman Shtylman <shtylman@gmail.com>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n/package.json\u0002a{\n  \"author\": \"Roman Shtylman <shtylman@gmail.com>\",\n  \"name\": \"process\",\n  \"description\": \"process information for node.js and browsers\",\n  \"keywords\": [\n    \"process\"\n  ],\n  \"scripts\": {\n    \"test\": \"mocha test.js\",\n    \"browser\": \"zuul --no-coverage --ui mocha-bdd --local 8080 -- test.js\"\n  },\n  \"version\": \"0.11.10\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git://github.com/shtylman/node-process.git\"\n  },\n  \"license\": \"MIT\",\n  \"browser\": \"./browser.js\",\n  \"main\": \"./index.js\",\n  \"engines\": {\n    \"node\": \">= 0.6.0\"\n  },\n  \"devDependencies\": {\n    \"mocha\": \"2.2.1\",\n    \"zuul\": \"^3.10.3\"\n  }\n}\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/cHJvY2Vzcy13YXJuaW5nQDIuMS4w",
    "content": "/test/index.test.js\t'use strict'\n\nconst test = require('tap').test\nconst build = require('..')\n\nprocess.removeAllListeners('warning')\n\ntest('Create warning with zero parameter', t => {\n  t.plan(3)\n\n  const { create } = build()\n  const buildWarnOpts = create('FastifyWarning', 'CODE', 'Not available')\n  const opts = buildWarnOpts()\n  t.equal(opts.name, 'FastifyWarning')\n  t.equal(opts.message, 'Not available')\n  t.equal(opts.code, 'CODE')\n})\n\ntest('Create error with 1 parameter', t => {\n  t.plan(3)\n\n  const { create } = build()\n  const buildWarningOpts = create('FastifyWarning', 'CODE', 'hey %s')\n  const opts = buildWarningOpts('alice')\n  t.equal(opts.name, 'FastifyWarning')\n  t.equal(opts.message, 'hey alice')\n  t.equal(opts.code, 'CODE')\n})\n\ntest('Create error with 2 parameters', t => {\n  t.plan(3)\n\n  const { create } = build()\n  const buildWarnOpts = create('FastifyWarning', 'CODE', 'hey %s, I like your %s')\n  const opts = buildWarnOpts('alice', 'attitude')\n  t.equal(opts.name, 'FastifyWarning')\n  t.equal(opts.message, 'hey alice, I like your attitude')\n  t.equal(opts.code, 'CODE')\n})\n\ntest('Create error with 3 parameters', t => {\n  t.plan(3)\n\n  const { create } = build()\n  const buildWarnOpts = create('FastifyWarning', 'CODE', 'hey %s, I like your %s %s')\n  const opts = buildWarnOpts('alice', 'attitude', 'see you')\n  t.equal(opts.name, 'FastifyWarning')\n  t.equal(opts.message, 'hey alice, I like your attitude see you')\n  t.equal(opts.code, 'CODE')\n})\n\ntest('Should throw when error code has no fastify name', t => {\n  t.plan(1)\n\n  const { create } = build()\n\n  t.throws(() => create(), new Error('Warning name must not be empty'))\n})\n\ntest('Should throw when error has no code', t => {\n  t.plan(1)\n\n  const { create } = build()\n\n  t.throws(() => create('name'), new Error('Warning code must not be empty'))\n})\n\ntest('Should throw when error has no message', t => {\n  t.plan(1)\n\n  const { create } = build()\n\n  t.throws(() => create('name', 'code'), new Error('Warning message must not be empty'))\n})\n\ntest('Should throw if emit is called with unknown code ', t => {\n  t.plan(1)\n\n  const { emit } = build()\n\n  t.throws(() => emit('CODE'), new Error('The code \\'CODE\\' does not exist'))\n})\n\ntest('Cannot reuse the same code more than once', t => {\n  t.plan(1)\n\n  const { create } = build()\n  create('FastifyWarning', 'CODE', 'Not available')\n\n  t.throws(() => create('FastifyWarning', 'CODE', 'Not available'), new Error(\"The code 'CODE' already exist\"))\n})\n/.github/workflows/ci.yml\u0001\u0010name: CI\n\non:\n  push:\n    paths-ignore:\n      - 'docs/**'\n      - '*.md'\n  pull_request:\n    paths-ignore:\n      - 'docs/**'\n      - '*.md'\n\njobs:\n  test:\n    uses: fastify/workflows/.github/workflows/plugins-ci.yml@v3\n    with:\n      license-check: true\n      lint: true\n/types/index.d.ts\u0002type ProcessWarning = () => processWarning.Warning\n\ndeclare namespace processWarning {\n  export interface Warning {\n    create(name: string, code: string, message: string): BuildWarnOptsFn,\n    emit(cod: string, a?: any, b?: any, c?: any): void,\n    emitted: Map<string, boolean>\n  }\n\n  export type BuildWarnOptsFn = (a?: any, b?: any, c?: any) => WarnOpts\n\n  export interface WarnOpts {\n    code: string;\n    name: string;\n    message: string;\n  }\n\n  export const processWarning: ProcessWarning\n  export { processWarning as default }\n}\n\ndeclare function processWarning(...params: Parameters<ProcessWarning>): ReturnType<ProcessWarning>\nexport = processWarning\n/test/jest.test.js\u0002\u0005/* global test, expect */\n'use strict'\n\nconst build = require('..')\n\ntest('works with jest', done => {\n  const { create, emit, emitted } = build()\n\n  create('FastifyDeprecation', 'CODE', 'Hello %s')\n  emit('CODE', 'world')\n\n  // we cannot actually listen to process warning event\n  // because jest messes with it (that's the point of this test)\n  // we can only test it was emitted indirectly\n  // and test no exception is raised\n  setImmediate(() => {\n    expect(emitted.get('CODE')).toBeTruthy()\n    done()\n  })\n})\n/README.md\n# process-warning\n\n![CI](https://github.com/fastify/process-warning/workflows/CI/badge.svg)\n[![NPM version](https://img.shields.io/npm/v/process-warning.svg?style=flat)](https://www.npmjs.com/package/process-warning)\n[![js-standard-style](https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat)](https://standardjs.com/)\n\nA small utility for generating consistent warning objects across your codebase.\nIt also exposes a utility for emitting those warnings, guaranteeing that they are issued only once.\n\nThis module is used by the [Fastify](https://fastify.io) framework and it was called `fastify-warning` prior to version 1.0.0.\n\n### Install\n\n```\nnpm i process-warning\n```\n\n### Usage\n\nThe module exports a builder function that returns a utility for creating warnings and emitting them.\n\n```js\nconst warning = require('process-warning')()\n```\n\n#### Methods\n\n```\nwarning.create(name, code, message)\n```\n\n- `name` (`string`, required) - The error name, you can access it later with `error.name`. For consistency, we recommend prefixing module error names with `{YourModule}Warning`\n- `code` (`string`, required) - The warning code, you can access it later with `error.code`. For consistency, we recommend prefixing plugin error codes with `{ThreeLetterModuleName}_`, e.g. `FST_`. NOTE: codes should be all uppercase.\n- `message` (`string`, required) - The warning message. You can also use interpolated strings for formatting the message.\n\nThe utility also contains an `emit` function that you can use for emitting the warnings you have previously created by passing their respective code. A warning is guaranteed to be emitted only once.\n\n```\nwarning.emit(code [, a [, b [, c]]])\n```\n\n- `code` (`string`, required) - The warning code you intend to emit.\n- `[, a [, b [, c]]]` (`any`, optional) - Parameters for string interpolation.\n\n```js\nconst warning = require('process-warning')()\nwarning.create('FastifyWarning', 'FST_ERROR_CODE', 'message')\nwarning.emit('FST_ERROR_CODE')\n```\n\nHow to use an interpolated string:\n```js\nconst warning = require('process-warning')()\nwarning.create('FastifyWarning', 'FST_ERROR_CODE', 'Hello %s')\nwarning.emit('FST_ERROR_CODE', 'world')\n```\n\nThe module also exports an `warning.emitted` [Map](https://developer.mozilla.org/it/docs/Web/JavaScript/Reference/Global_Objects/Map), which contains all the warnings already emitted. Useful for testing.\n```js\nconst warning = require('process-warning')()\nwarning.create('FastifyWarning', 'FST_ERROR_CODE', 'Hello %s')\nconsole.log(warning.emitted.get('FST_ERROR_CODE')) // false\nwarning.emit('FST_ERROR_CODE', 'world')\nconsole.log(warning.emitted.get('FST_ERROR_CODE')) // true\n```\n\n## License\n\nLicensed under [MIT](./LICENSE).\n/.taprc$files:\n  - test/**/*[!jest].test.js\n/types/index.test-d.ts\u0001import { expectType } from 'tsd'\nimport Warinig, { BuildWarnOptsFn, WarnOpts } from '..'\n\nconst warning = Warinig()\nconst buildWarnOpts = warning.create('FastifyWarning', 'CODE', 'message')\nexpectType<BuildWarnOptsFn>(buildWarnOpts)\nconst opts = buildWarnOpts()\nexpectType<WarnOpts>(opts)\nexpectType<string>(opts.code)\nexpectType<string>(opts.message)\nexpectType<string>(opts.name)\n\nexpectType<void>(warning.emit('CODE'))\nexpectType<Map<string, boolean>>(warning.emitted)\n/LICENSE\u0004#MIT License\n\nCopyright (c) Fastify\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n/index.js\u0005'use strict'\n\nconst { format } = require('util')\n\nfunction processWarning () {\n  const codes = {}\n  const emitted = new Map()\n\n  function create (name, code, message) {\n    if (!name) throw new Error('Warning name must not be empty')\n    if (!code) throw new Error('Warning code must not be empty')\n    if (!message) throw new Error('Warning message must not be empty')\n\n    code = code.toUpperCase()\n\n    if (codes[code] !== undefined) {\n      throw new Error(`The code '${code}' already exist`)\n    }\n\n    function buildWarnOpts (a, b, c) {\n      // more performant than spread (...) operator\n      let formatted\n      if (a && b && c) {\n        formatted = format(message, a, b, c)\n      } else if (a && b) {\n        formatted = format(message, a, b)\n      } else if (a) {\n        formatted = format(message, a)\n      } else {\n        formatted = message\n      }\n\n      return {\n        code,\n        name,\n        message: formatted\n      }\n    }\n\n    emitted.set(code, false)\n    codes[code] = buildWarnOpts\n\n    return codes[code]\n  }\n\n  function emit (code, a, b, c) {\n    if (emitted.get(code) === true) return\n    if (codes[code] === undefined) throw new Error(`The code '${code}' does not exist`)\n    emitted.set(code, true)\n\n    const warning = codes[code](a, b, c)\n    process.emitWarning(warning.message, warning.name, warning.code)\n  }\n\n  return {\n    create,\n    emit,\n    emitted\n  }\n}\n\nmodule.exports = processWarning\nmodule.exports.default = processWarning\nmodule.exports.processWarning = processWarning\n/package.json\u0003{\n  \"name\": \"process-warning\",\n  \"version\": \"2.1.0\",\n  \"description\": \"A small utility for creating warnings and emitting them.\",\n  \"main\": \"index.js\",\n  \"types\": \"types/index.d.ts\",\n  \"scripts\": {\n    \"lint\": \"standard\",\n    \"test\": \"npm run test:unit && npm run test:jest && npm run test:typescript\",\n    \"test:jest\": \"jest jest.test.js\",\n    \"test:unit\": \"tap\",\n    \"test:typescript\": \"tsd\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/fastify/process-warning.git\"\n  },\n  \"keywords\": [\n    \"fastify\",\n    \"error\",\n    \"warning\",\n    \"utility\",\n    \"plugin\",\n    \"emit\",\n    \"once\"\n  ],\n  \"author\": \"Tomas Della Vedova\",\n  \"license\": \"MIT\",\n  \"bugs\": {\n    \"url\": \"https://github.com/fastify/fastify-warning/issues\"\n  },\n  \"homepage\": \"https://github.com/fastify/fastify-warning#readme\",\n  \"devDependencies\": {\n    \"benchmark\": \"^2.1.4\",\n    \"jest\": \"^29.0.1\",\n    \"standard\": \"^17.0.0\",\n    \"tap\": \"^16.3.0\",\n    \"tsd\": \"^0.24.1\"\n  }\n}\n/test/emit-once-only.test.js\u0002R'use strict'\n\nconst test = require('tap').test\nconst build = require('..')\n\ntest('emit should emit a given code only once', t => {\n  t.plan(4)\n\n  const { create, emit, emitted } = build()\n\n  process.on('warning', onWarning)\n  function onWarning (warning) {\n    t.equal(warning.name, 'FastifyDeprecation')\n    t.equal(warning.code, 'CODE')\n    t.equal(warning.message, 'Hello world')\n    t.ok(emitted.get('CODE'))\n  }\n\n  create('FastifyDeprecation', 'CODE', 'Hello world')\n  emit('CODE')\n  emit('CODE')\n  setImmediate(() => {\n    process.removeListener('warning', onWarning)\n    t.end()\n  })\n})\n&/test/emit-interpolated-string.test.js\u0002W'use strict'\n\nconst test = require('tap').test\nconst build = require('..')\n\ntest('emit with interpolated string', t => {\n  t.plan(4)\n  const { create, emit, emitted } = build()\n\n  process.on('warning', onWarning)\n  function onWarning (warning) {\n    t.equal(warning.name, 'FastifyDeprecation')\n    t.equal(warning.code, 'CODE')\n    t.equal(warning.message, 'Hello world')\n    t.ok(emitted.get('CODE'))\n  }\n\n  create('FastifyDeprecation', 'CODE', 'Hello %s')\n  emit('CODE', 'world')\n  emit('CODE', 'world')\n\n  setImmediate(() => {\n    process.removeListener('warning', onWarning)\n    t.end()\n  })\n})\n/.github/dependabot.yml\u0001\u0011version: 2\nupdates:\n  - package-ecosystem: \"github-actions\"\n    directory: \"/\"\n    schedule:\n      interval: \"monthly\"\n    open-pull-requests-limit: 10\n\n  - package-ecosystem: \"npm\"\n    directory: \"/\"\n    schedule:\n      interval: \"weekly\"\n    open-pull-requests-limit: 10\n/benchmarks/warn.js\u0001'use strict'\n\nconst { Suite } = require('benchmark')\nconst warning = require('..')()\n\nwarning.create('FastifyWarning', 'FST_ERROR_CODE_1', 'message')\nwarning.create('FastifyWarning', 'FST_ERROR_CODE_2', 'message')\nwarning.create('FastifyWarning', 'FST_ERROR_CODE_3', 'message')\nnew Suite()\n  .add('warn', function () {\n    warning.emit('FST_ERROR_CODE_1')\n    warning.emit('FST_ERROR_CODE_3')\n  })\n  .on('cycle', function (event) {\n    console.log(String(event.target))\n  })\n  .run()\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/cHJveHktYWRkckAyLjAuNw==",
    "content": "/package.json\u0004{\n  \"name\": \"proxy-addr\",\n  \"description\": \"Determine address of proxied request\",\n  \"version\": \"2.0.7\",\n  \"author\": \"Douglas Christopher Wilson <doug@somethingdoug.com>\",\n  \"license\": \"MIT\",\n  \"keywords\": [\n    \"ip\",\n    \"proxy\",\n    \"x-forwarded-for\"\n  ],\n  \"repository\": \"jshttp/proxy-addr\",\n  \"dependencies\": {\n    \"forwarded\": \"0.2.0\",\n    \"ipaddr.js\": \"1.9.1\"\n  },\n  \"devDependencies\": {\n    \"benchmark\": \"2.1.4\",\n    \"beautify-benchmark\": \"0.2.4\",\n    \"deep-equal\": \"1.0.1\",\n    \"eslint\": \"7.26.0\",\n    \"eslint-config-standard\": \"14.1.1\",\n    \"eslint-plugin-import\": \"2.23.4\",\n    \"eslint-plugin-markdown\": \"2.2.0\",\n    \"eslint-plugin-node\": \"11.1.0\",\n    \"eslint-plugin-promise\": \"4.3.1\",\n    \"eslint-plugin-standard\": \"4.1.0\",\n    \"mocha\": \"8.4.0\",\n    \"nyc\": \"15.1.0\"\n  },\n  \"files\": [\n    \"LICENSE\",\n    \"HISTORY.md\",\n    \"README.md\",\n    \"index.js\"\n  ],\n  \"engines\": {\n    \"node\": \">= 0.10\"\n  },\n  \"scripts\": {\n    \"bench\": \"node benchmark/index.js\",\n    \"lint\": \"eslint .\",\n    \"test\": \"mocha --reporter spec --bail --check-leaks test/\",\n    \"test-ci\": \"nyc --reporter=lcov --reporter=text npm test\",\n    \"test-cov\": \"nyc --reporter=html --reporter=text npm test\"\n  }\n}\n/HISTORY.md\u000b2.0.7 / 2021-05-31\n==================\n\n  * deps: forwarded@0.2.0\n    - Use `req.socket` over deprecated `req.connection`\n\n2.0.6 / 2020-02-24\n==================\n\n  * deps: ipaddr.js@1.9.1\n\n2.0.5 / 2019-04-16\n==================\n\n  * deps: ipaddr.js@1.9.0\n\n2.0.4 / 2018-07-26\n==================\n\n  * deps: ipaddr.js@1.8.0\n\n2.0.3 / 2018-02-19\n==================\n\n  * deps: ipaddr.js@1.6.0\n\n2.0.2 / 2017-09-24\n==================\n\n  * deps: forwarded@~0.1.2\n    - perf: improve header parsing\n    - perf: reduce overhead when no `X-Forwarded-For` header\n\n2.0.1 / 2017-09-10\n==================\n\n  * deps: forwarded@~0.1.1\n    - Fix trimming leading / trailing OWS\n    - perf: hoist regular expression\n  * deps: ipaddr.js@1.5.2\n\n2.0.0 / 2017-08-08\n==================\n\n  * Drop support for Node.js below 0.10\n\n1.1.5 / 2017-07-25\n==================\n\n  * Fix array argument being altered\n  * deps: ipaddr.js@1.4.0\n\n1.1.4 / 2017-03-24\n==================\n\n  * deps: ipaddr.js@1.3.0\n\n1.1.3 / 2017-01-14\n==================\n\n  * deps: ipaddr.js@1.2.0\n\n1.1.2 / 2016-05-29\n==================\n\n  * deps: ipaddr.js@1.1.1\n    - Fix IPv6-mapped IPv4 validation edge cases\n\n1.1.1 / 2016-05-03\n==================\n\n  * Fix regression matching mixed versions against multiple subnets\n\n1.1.0 / 2016-05-01\n==================\n\n  * Fix accepting various invalid netmasks\n    - IPv4 netmasks must be contingous\n    - IPv6 addresses cannot be used as a netmask\n  * deps: ipaddr.js@1.1.0\n\n1.0.10 / 2015-12-09\n===================\n\n  * deps: ipaddr.js@1.0.5\n    - Fix regression in `isValid` with non-string arguments\n\n1.0.9 / 2015-12-01\n==================\n\n  * deps: ipaddr.js@1.0.4\n    - Fix accepting some invalid IPv6 addresses\n    - Reject CIDRs with negative or overlong masks\n  * perf: enable strict mode\n\n1.0.8 / 2015-05-10\n==================\n\n  * deps: ipaddr.js@1.0.1\n\n1.0.7 / 2015-03-16\n==================\n\n  * deps: ipaddr.js@0.1.9\n    - Fix OOM on certain inputs to `isValid`\n\n1.0.6 / 2015-02-01\n==================\n\n  * deps: ipaddr.js@0.1.8\n\n1.0.5 / 2015-01-08\n==================\n\n  * deps: ipaddr.js@0.1.6\n\n1.0.4 / 2014-11-23\n==================\n\n  * deps: ipaddr.js@0.1.5\n    - Fix edge cases with `isValid`\n\n1.0.3 / 2014-09-21\n==================\n\n  * Use `forwarded` npm module\n\n1.0.2 / 2014-09-18\n==================\n\n  * Fix a global leak when multiple subnets are trusted\n  * Support Node.js 0.6\n  * deps: ipaddr.js@0.1.3\n\n1.0.1 / 2014-06-03\n==================\n\n  * Fix links in npm package\n\n1.0.0 / 2014-05-08\n==================\n\n  * Add `trust` argument to determine proxy trust on\n    * Accepts custom function\n    * Accepts IPv4/IPv6 address(es)\n    * Accepts subnets\n    * Accepts pre-defined names\n  * Add optional `trust` argument to `proxyaddr.all` to\n    stop at first untrusted\n  * Add `proxyaddr.compile` to pre-compile `trust` function\n    to make subsequent calls faster\n\n0.0.1 / 2014-05-04\n==================\n\n  * Fix bad npm publish\n\n0.0.0 / 2014-05-04\n==================\n\n  * Initial release\n/LICENSE\u0004F(The MIT License)\n\nCopyright (c) 2014-2016 Douglas Christopher Wilson\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n/README.md\u0010## proxy-addr\n\n[![NPM Version][npm-version-image]][npm-url]\n[![NPM Downloads][npm-downloads-image]][npm-url]\n[![Node.js Version][node-image]][node-url]\n[![Build Status][ci-image]][ci-url]\n[![Test Coverage][coveralls-image]][coveralls-url]\n\nDetermine address of proxied request\n\n## Install\n\nThis is a [Node.js](https://nodejs.org/en/) module available through the\n[npm registry](https://www.npmjs.com/). Installation is done using the\n[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally):\n\n```sh\n$ npm install proxy-addr\n```\n\n## API\n\n```js\nvar proxyaddr = require('proxy-addr')\n```\n\n### proxyaddr(req, trust)\n\nReturn the address of the request, using the given `trust` parameter.\n\nThe `trust` argument is a function that returns `true` if you trust\nthe address, `false` if you don't. The closest untrusted address is\nreturned.\n\n```js\nproxyaddr(req, function (addr) { return addr === '127.0.0.1' })\nproxyaddr(req, function (addr, i) { return i < 1 })\n```\n\nThe `trust` arugment may also be a single IP address string or an\narray of trusted addresses, as plain IP addresses, CIDR-formatted\nstrings, or IP/netmask strings.\n\n```js\nproxyaddr(req, '127.0.0.1')\nproxyaddr(req, ['127.0.0.0/8', '10.0.0.0/8'])\nproxyaddr(req, ['127.0.0.0/255.0.0.0', '192.168.0.0/255.255.0.0'])\n```\n\nThis module also supports IPv6. Your IPv6 addresses will be normalized\nautomatically (i.e. `fe80::00ed:1` equals `fe80:0:0:0:0:0:ed:1`).\n\n```js\nproxyaddr(req, '::1')\nproxyaddr(req, ['::1/128', 'fe80::/10'])\n```\n\nThis module will automatically work with IPv4-mapped IPv6 addresses\nas well to support node.js in IPv6-only mode. This means that you do\nnot have to specify both `::ffff:a00:1` and `10.0.0.1`.\n\nAs a convenience, this module also takes certain pre-defined names\nin addition to IP addresses, which expand into IP addresses:\n\n```js\nproxyaddr(req, 'loopback')\nproxyaddr(req, ['loopback', 'fc00:ac:1ab5:fff::1/64'])\n```\n\n  * `loopback`: IPv4 and IPv6 loopback addresses (like `::1` and\n    `127.0.0.1`).\n  * `linklocal`: IPv4 and IPv6 link-local addresses (like\n    `fe80::1:1:1:1` and `169.254.0.1`).\n  * `uniquelocal`: IPv4 private addresses and IPv6 unique-local\n    addresses (like `fc00:ac:1ab5:fff::1` and `192.168.0.1`).\n\nWhen `trust` is specified as a function, it will be called for each\naddress to determine if it is a trusted address. The function is\ngiven two arguments: `addr` and `i`, where `addr` is a string of\nthe address to check and `i` is a number that represents the distance\nfrom the socket address.\n\n### proxyaddr.all(req, [trust])\n\nReturn all the addresses of the request, optionally stopping at the\nfirst untrusted. This array is ordered from closest to furthest\n(i.e. `arr[0] === req.connection.remoteAddress`).\n\n```js\nproxyaddr.all(req)\n```\n\nThe optional `trust` argument takes the same arguments as `trust`\ndoes in `proxyaddr(req, trust)`.\n\n```js\nproxyaddr.all(req, 'loopback')\n```\n\n### proxyaddr.compile(val)\n\nCompiles argument `val` into a `trust` function. This function takes\nthe same arguments as `trust` does in `proxyaddr(req, trust)` and\nreturns a function suitable for `proxyaddr(req, trust)`.\n\n```js\nvar trust = proxyaddr.compile('loopback')\nvar addr = proxyaddr(req, trust)\n```\n\nThis function is meant to be optimized for use against every request.\nIt is recommend to compile a trust function up-front for the trusted\nconfiguration and pass that to `proxyaddr(req, trust)` for each request.\n\n## Testing\n\n```sh\n$ npm test\n```\n\n## Benchmarks\n\n```sh\n$ npm run-script bench\n```\n\n## License\n\n[MIT](LICENSE)\n\n[ci-image]: https://badgen.net/github/checks/jshttp/proxy-addr/master?label=ci\n[ci-url]: https://github.com/jshttp/proxy-addr/actions?query=workflow%3Aci\n[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/proxy-addr/master\n[coveralls-url]: https://coveralls.io/r/jshttp/proxy-addr?branch=master\n[node-image]: https://badgen.net/npm/node/proxy-addr\n[node-url]: https://nodejs.org/en/download\n[npm-downloads-image]: https://badgen.net/npm/dm/proxy-addr\n[npm-url]: https://npmjs.org/package/proxy-addr\n[npm-version-image]: https://badgen.net/npm/v/proxy-addr\n/index.js\u0017p/*!\n * proxy-addr\n * Copyright(c) 2014-2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = proxyaddr\nmodule.exports.all = alladdrs\nmodule.exports.compile = compile\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar forwarded = require('forwarded')\nvar ipaddr = require('ipaddr.js')\n\n/**\n * Variables.\n * @private\n */\n\nvar DIGIT_REGEXP = /^[0-9]+$/\nvar isip = ipaddr.isValid\nvar parseip = ipaddr.parse\n\n/**\n * Pre-defined IP ranges.\n * @private\n */\n\nvar IP_RANGES = {\n  linklocal: ['169.254.0.0/16', 'fe80::/10'],\n  loopback: ['127.0.0.1/8', '::1/128'],\n  uniquelocal: ['10.0.0.0/8', '172.16.0.0/12', '192.168.0.0/16', 'fc00::/7']\n}\n\n/**\n * Get all addresses in the request, optionally stopping\n * at the first untrusted.\n *\n * @param {Object} request\n * @param {Function|Array|String} [trust]\n * @public\n */\n\nfunction alladdrs (req, trust) {\n  // get addresses\n  var addrs = forwarded(req)\n\n  if (!trust) {\n    // Return all addresses\n    return addrs\n  }\n\n  if (typeof trust !== 'function') {\n    trust = compile(trust)\n  }\n\n  for (var i = 0; i < addrs.length - 1; i++) {\n    if (trust(addrs[i], i)) continue\n\n    addrs.length = i + 1\n  }\n\n  return addrs\n}\n\n/**\n * Compile argument into trust function.\n *\n * @param {Array|String} val\n * @private\n */\n\nfunction compile (val) {\n  if (!val) {\n    throw new TypeError('argument is required')\n  }\n\n  var trust\n\n  if (typeof val === 'string') {\n    trust = [val]\n  } else if (Array.isArray(val)) {\n    trust = val.slice()\n  } else {\n    throw new TypeError('unsupported trust argument')\n  }\n\n  for (var i = 0; i < trust.length; i++) {\n    val = trust[i]\n\n    if (!Object.prototype.hasOwnProperty.call(IP_RANGES, val)) {\n      continue\n    }\n\n    // Splice in pre-defined range\n    val = IP_RANGES[val]\n    trust.splice.apply(trust, [i, 1].concat(val))\n    i += val.length - 1\n  }\n\n  return compileTrust(compileRangeSubnets(trust))\n}\n\n/**\n * Compile `arr` elements into range subnets.\n *\n * @param {Array} arr\n * @private\n */\n\nfunction compileRangeSubnets (arr) {\n  var rangeSubnets = new Array(arr.length)\n\n  for (var i = 0; i < arr.length; i++) {\n    rangeSubnets[i] = parseipNotation(arr[i])\n  }\n\n  return rangeSubnets\n}\n\n/**\n * Compile range subnet array into trust function.\n *\n * @param {Array} rangeSubnets\n * @private\n */\n\nfunction compileTrust (rangeSubnets) {\n  // Return optimized function based on length\n  var len = rangeSubnets.length\n  return len === 0\n    ? trustNone\n    : len === 1\n      ? trustSingle(rangeSubnets[0])\n      : trustMulti(rangeSubnets)\n}\n\n/**\n * Parse IP notation string into range subnet.\n *\n * @param {String} note\n * @private\n */\n\nfunction parseipNotation (note) {\n  var pos = note.lastIndexOf('/')\n  var str = pos !== -1\n    ? note.substring(0, pos)\n    : note\n\n  if (!isip(str)) {\n    throw new TypeError('invalid IP address: ' + str)\n  }\n\n  var ip = parseip(str)\n\n  if (pos === -1 && ip.kind() === 'ipv6' && ip.isIPv4MappedAddress()) {\n    // Store as IPv4\n    ip = ip.toIPv4Address()\n  }\n\n  var max = ip.kind() === 'ipv6'\n    ? 128\n    : 32\n\n  var range = pos !== -1\n    ? note.substring(pos + 1, note.length)\n    : null\n\n  if (range === null) {\n    range = max\n  } else if (DIGIT_REGEXP.test(range)) {\n    range = parseInt(range, 10)\n  } else if (ip.kind() === 'ipv4' && isip(range)) {\n    range = parseNetmask(range)\n  } else {\n    range = null\n  }\n\n  if (range <= 0 || range > max) {\n    throw new TypeError('invalid range on address: ' + note)\n  }\n\n  return [ip, range]\n}\n\n/**\n * Parse netmask string into CIDR range.\n *\n * @param {String} netmask\n * @private\n */\n\nfunction parseNetmask (netmask) {\n  var ip = parseip(netmask)\n  var kind = ip.kind()\n\n  return kind === 'ipv4'\n    ? ip.prefixLengthFromSubnetMask()\n    : null\n}\n\n/**\n * Determine address of proxied request.\n *\n * @param {Object} request\n * @param {Function|Array|String} trust\n * @public\n */\n\nfunction proxyaddr (req, trust) {\n  if (!req) {\n    throw new TypeError('req argument is required')\n  }\n\n  if (!trust) {\n    throw new TypeError('trust argument is required')\n  }\n\n  var addrs = alladdrs(req, trust)\n  var addr = addrs[addrs.length - 1]\n\n  return addr\n}\n\n/**\n * Static trust function to trust nothing.\n *\n * @private\n */\n\nfunction trustNone () {\n  return false\n}\n\n/**\n * Compile trust function for multiple subnets.\n *\n * @param {Array} subnets\n * @private\n */\n\nfunction trustMulti (subnets) {\n  return function trust (addr) {\n    if (!isip(addr)) return false\n\n    var ip = parseip(addr)\n    var ipconv\n    var kind = ip.kind()\n\n    for (var i = 0; i < subnets.length; i++) {\n      var subnet = subnets[i]\n      var subnetip = subnet[0]\n      var subnetkind = subnetip.kind()\n      var subnetrange = subnet[1]\n      var trusted = ip\n\n      if (kind !== subnetkind) {\n        if (subnetkind === 'ipv4' && !ip.isIPv4MappedAddress()) {\n          // Incompatible IP addresses\n          continue\n        }\n\n        if (!ipconv) {\n          // Convert IP to match subnet IP kind\n          ipconv = subnetkind === 'ipv4'\n            ? ip.toIPv4Address()\n            : ip.toIPv4MappedAddress()\n        }\n\n        trusted = ipconv\n      }\n\n      if (trusted.match(subnetip, subnetrange)) {\n        return true\n      }\n    }\n\n    return false\n  }\n}\n\n/**\n * Compile trust function for single subnet.\n *\n * @param {Object} subnet\n * @private\n */\n\nfunction trustSingle (subnet) {\n  var subnetip = subnet[0]\n  var subnetkind = subnetip.kind()\n  var subnetisipv4 = subnetkind === 'ipv4'\n  var subnetrange = subnet[1]\n\n  return function trust (addr) {\n    if (!isip(addr)) return false\n\n    var ip = parseip(addr)\n    var kind = ip.kind()\n\n    if (kind !== subnetkind) {\n      if (subnetisipv4 && !ip.isIPv4MappedAddress()) {\n        // Incompatible IP addresses\n        return false\n      }\n\n      // Convert IP to match subnet IP kind\n      ip = subnetisipv4\n        ? ip.toIPv4Address()\n        : ip.toIPv4MappedAddress()\n    }\n\n    return ip.match(subnetip, subnetrange)\n  }\n}\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/cHVueWNvZGVAMi4zLjA=",
    "content": "/punycode.es6.js1'use strict';\n\n/** Highest positive signed 32-bit float value */\nconst maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1\n\n/** Bootstring parameters */\nconst base = 36;\nconst tMin = 1;\nconst tMax = 26;\nconst skew = 38;\nconst damp = 700;\nconst initialBias = 72;\nconst initialN = 128; // 0x80\nconst delimiter = '-'; // '\\x2D'\n\n/** Regular expressions */\nconst regexPunycode = /^xn--/;\nconst regexNonASCII = /[^\\0-\\x7F]/; // Note: U+007F DEL is excluded too.\nconst regexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g; // RFC 3490 separators\n\n/** Error messages */\nconst errors = {\n\t'overflow': 'Overflow: input needs wider integers to process',\n\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t'invalid-input': 'Invalid input'\n};\n\n/** Convenience shortcuts */\nconst baseMinusTMin = base - tMin;\nconst floor = Math.floor;\nconst stringFromCharCode = String.fromCharCode;\n\n/*--------------------------------------------------------------------------*/\n\n/**\n * A generic error utility function.\n * @private\n * @param {String} type The error type.\n * @returns {Error} Throws a `RangeError` with the applicable error message.\n */\nfunction error(type) {\n\tthrow new RangeError(errors[type]);\n}\n\n/**\n * A generic `Array#map` utility function.\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} callback The function that gets called for every array\n * item.\n * @returns {Array} A new array of values returned by the callback function.\n */\nfunction map(array, callback) {\n\tconst result = [];\n\tlet length = array.length;\n\twhile (length--) {\n\t\tresult[length] = callback(array[length]);\n\t}\n\treturn result;\n}\n\n/**\n * A simple `Array#map`-like wrapper to work with domain name strings or email\n * addresses.\n * @private\n * @param {String} domain The domain name or email address.\n * @param {Function} callback The function that gets called for every\n * character.\n * @returns {String} A new string of characters returned by the callback\n * function.\n */\nfunction mapDomain(domain, callback) {\n\tconst parts = domain.split('@');\n\tlet result = '';\n\tif (parts.length > 1) {\n\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t// the local part (i.e. everything up to `@`) intact.\n\t\tresult = parts[0] + '@';\n\t\tdomain = parts[1];\n\t}\n\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\tdomain = domain.replace(regexSeparators, '\\x2E');\n\tconst labels = domain.split('.');\n\tconst encoded = map(labels, callback).join('.');\n\treturn result + encoded;\n}\n\n/**\n * Creates an array containing the numeric code points of each Unicode\n * character in the string. While JavaScript uses UCS-2 internally,\n * this function will convert a pair of surrogate halves (each of which\n * UCS-2 exposes as separate characters) into a single code point,\n * matching UTF-16.\n * @see `punycode.ucs2.encode`\n * @see <https://mathiasbynens.be/notes/javascript-encoding>\n * @memberOf punycode.ucs2\n * @name decode\n * @param {String} string The Unicode input string (UCS-2).\n * @returns {Array} The new array of code points.\n */\nfunction ucs2decode(string) {\n\tconst output = [];\n\tlet counter = 0;\n\tconst length = string.length;\n\twhile (counter < length) {\n\t\tconst value = string.charCodeAt(counter++);\n\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t// It's a high surrogate, and there is a next character.\n\t\t\tconst extra = string.charCodeAt(counter++);\n\t\t\tif ((extra & 0xFC00) == 0xDC00) { // Low surrogate.\n\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t} else {\n\t\t\t\t// It's an unmatched surrogate; only append this code unit, in case the\n\t\t\t\t// next code unit is the high surrogate of a surrogate pair.\n\t\t\t\toutput.push(value);\n\t\t\t\tcounter--;\n\t\t\t}\n\t\t} else {\n\t\t\toutput.push(value);\n\t\t}\n\t}\n\treturn output;\n}\n\n/**\n * Creates a string based on an array of numeric code points.\n * @see `punycode.ucs2.decode`\n * @memberOf punycode.ucs2\n * @name encode\n * @param {Array} codePoints The array of numeric code points.\n * @returns {String} The new Unicode string (UCS-2).\n */\nconst ucs2encode = codePoints => String.fromCodePoint(...codePoints);\n\n/**\n * Converts a basic code point into a digit/integer.\n * @see `digitToBasic()`\n * @private\n * @param {Number} codePoint The basic numeric code point value.\n * @returns {Number} The numeric value of a basic code point (for use in\n * representing integers) in the range `0` to `base - 1`, or `base` if\n * the code point does not represent a value.\n */\nconst basicToDigit = function(codePoint) {\n\tif (codePoint >= 0x30 && codePoint < 0x3A) {\n\t\treturn 26 + (codePoint - 0x30);\n\t}\n\tif (codePoint >= 0x41 && codePoint < 0x5B) {\n\t\treturn codePoint - 0x41;\n\t}\n\tif (codePoint >= 0x61 && codePoint < 0x7B) {\n\t\treturn codePoint - 0x61;\n\t}\n\treturn base;\n};\n\n/**\n * Converts a digit/integer into a basic code point.\n * @see `basicToDigit()`\n * @private\n * @param {Number} digit The numeric value of a basic code point.\n * @returns {Number} The basic code point whose value (when used for\n * representing integers) is `digit`, which needs to be in the range\n * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n * used; else, the lowercase form is used. The behavior is undefined\n * if `flag` is non-zero and `digit` has no uppercase form.\n */\nconst digitToBasic = function(digit, flag) {\n\t//  0..25 map to ASCII a..z or A..Z\n\t// 26..35 map to ASCII 0..9\n\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n};\n\n/**\n * Bias adaptation function as per section 3.4 of RFC 3492.\n * https://tools.ietf.org/html/rfc3492#section-3.4\n * @private\n */\nconst adapt = function(delta, numPoints, firstTime) {\n\tlet k = 0;\n\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\tdelta += floor(delta / numPoints);\n\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\tdelta = floor(delta / baseMinusTMin);\n\t}\n\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n};\n\n/**\n * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n * symbols.\n * @memberOf punycode\n * @param {String} input The Punycode string of ASCII-only symbols.\n * @returns {String} The resulting string of Unicode symbols.\n */\nconst decode = function(input) {\n\t// Don't use UCS-2.\n\tconst output = [];\n\tconst inputLength = input.length;\n\tlet i = 0;\n\tlet n = initialN;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points: let `basic` be the number of input code\n\t// points before the last delimiter, or `0` if there is none, then copy\n\t// the first basic code points to the output.\n\n\tlet basic = input.lastIndexOf(delimiter);\n\tif (basic < 0) {\n\t\tbasic = 0;\n\t}\n\n\tfor (let j = 0; j < basic; ++j) {\n\t\t// if it's not a basic code point\n\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\terror('not-basic');\n\t\t}\n\t\toutput.push(input.charCodeAt(j));\n\t}\n\n\t// Main decoding loop: start just after the last delimiter if any basic code\n\t// points were copied; start at the beginning otherwise.\n\n\tfor (let index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t// `index` is the index of the next character to be consumed.\n\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t// which gets added to `i`. The overflow checking is easier\n\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t// value at the end to obtain `delta`.\n\t\tconst oldi = i;\n\t\tfor (let w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\tif (index >= inputLength) {\n\t\t\t\terror('invalid-input');\n\t\t\t}\n\n\t\t\tconst digit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\tif (digit >= base) {\n\t\t\t\terror('invalid-input');\n\t\t\t}\n\t\t\tif (digit > floor((maxInt - i) / w)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\ti += digit * w;\n\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\tif (digit < t) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tconst baseMinusT = base - t;\n\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tw *= baseMinusT;\n\n\t\t}\n\n\t\tconst out = output.length + 1;\n\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t// incrementing `n` each time, so we'll fix that now:\n\t\tif (floor(i / out) > maxInt - n) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tn += floor(i / out);\n\t\ti %= out;\n\n\t\t// Insert `n` at position `i` of the output.\n\t\toutput.splice(i++, 0, n);\n\n\t}\n\n\treturn String.fromCodePoint(...output);\n};\n\n/**\n * Converts a string of Unicode symbols (e.g. a domain name label) to a\n * Punycode string of ASCII-only symbols.\n * @memberOf punycode\n * @param {String} input The string of Unicode symbols.\n * @returns {String} The resulting Punycode string of ASCII-only symbols.\n */\nconst encode = function(input) {\n\tconst output = [];\n\n\t// Convert the input in UCS-2 to an array of Unicode code points.\n\tinput = ucs2decode(input);\n\n\t// Cache the length.\n\tconst inputLength = input.length;\n\n\t// Initialize the state.\n\tlet n = initialN;\n\tlet delta = 0;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points.\n\tfor (const currentValue of input) {\n\t\tif (currentValue < 0x80) {\n\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t}\n\t}\n\n\tconst basicLength = output.length;\n\tlet handledCPCount = basicLength;\n\n\t// `handledCPCount` is the number of code points that have been handled;\n\t// `basicLength` is the number of basic code points.\n\n\t// Finish the basic string with a delimiter unless it's empty.\n\tif (basicLength) {\n\t\toutput.push(delimiter);\n\t}\n\n\t// Main encoding loop:\n\twhile (handledCPCount < inputLength) {\n\n\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t// larger one:\n\t\tlet m = maxInt;\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\tm = currentValue;\n\t\t\t}\n\t\t}\n\n\t\t// Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,\n\t\t// but guard against overflow.\n\t\tconst handledCPCountPlusOne = handledCPCount + 1;\n\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\tn = m;\n\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\t\t\tif (currentValue === n) {\n\t\t\t\t// Represent delta as a generalized variable-length integer.\n\t\t\t\tlet q = delta;\n\t\t\t\tfor (let k = base; /* no condition */; k += base) {\n\t\t\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tconst qMinusT = q - t;\n\t\t\t\t\tconst baseMinusT = base - t;\n\t\t\t\t\toutput.push(\n\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t);\n\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t}\n\n\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount === basicLength);\n\t\t\t\tdelta = 0;\n\t\t\t\t++handledCPCount;\n\t\t\t}\n\t\t}\n\n\t\t++delta;\n\t\t++n;\n\n\t}\n\treturn output.join('');\n};\n\n/**\n * Converts a Punycode string representing a domain name or an email address\n * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n * it doesn't matter if you call it on a string that has already been\n * converted to Unicode.\n * @memberOf punycode\n * @param {String} input The Punycoded domain name or email address to\n * convert to Unicode.\n * @returns {String} The Unicode representation of the given Punycode\n * string.\n */\nconst toUnicode = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexPunycode.test(string)\n\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t: string;\n\t});\n};\n\n/**\n * Converts a Unicode string representing a domain name or an email address to\n * Punycode. Only the non-ASCII parts of the domain name will be converted,\n * i.e. it doesn't matter if you call it with a domain that's already in\n * ASCII.\n * @memberOf punycode\n * @param {String} input The domain name or email address to convert, as a\n * Unicode string.\n * @returns {String} The Punycode representation of the given domain name or\n * email address.\n */\nconst toASCII = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexNonASCII.test(string)\n\t\t\t? 'xn--' + encode(string)\n\t\t\t: string;\n\t});\n};\n\n/*--------------------------------------------------------------------------*/\n\n/** Define the public API */\nconst punycode = {\n\t/**\n\t * A string representing the current Punycode.js version number.\n\t * @memberOf punycode\n\t * @type String\n\t */\n\t'version': '2.1.0',\n\t/**\n\t * An object of methods to convert from JavaScript's internal character\n\t * representation (UCS-2) to Unicode code points, and back.\n\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t * @memberOf punycode\n\t * @type Object\n\t */\n\t'ucs2': {\n\t\t'decode': ucs2decode,\n\t\t'encode': ucs2encode\n\t},\n\t'decode': decode,\n\t'encode': encode,\n\t'toASCII': toASCII,\n\t'toUnicode': toUnicode\n};\n\nexport { ucs2decode, ucs2encode, decode, encode, toASCII, toUnicode };\nexport default punycode;\n/README.md\u0014\f# Punycode.js [![punycode on npm](https://img.shields.io/npm/v/punycode)](https://www.npmjs.com/package/emoji-test-regex-pattern) [![](https://data.jsdelivr.com/v1/package/npm/punycode/badge)](https://www.jsdelivr.com/package/npm/punycode)\n\nPunycode.js is a robust Punycode converter that fully complies to [RFC 3492](https://tools.ietf.org/html/rfc3492) and [RFC 5891](https://tools.ietf.org/html/rfc5891).\n\nThis JavaScript library is the result of comparing, optimizing and documenting different open-source implementations of the Punycode algorithm:\n\n* [The C example code from RFC 3492](https://tools.ietf.org/html/rfc3492#appendix-C)\n* [`punycode.c` by _Markus W. Scherer_ (IBM)](http://opensource.apple.com/source/ICU/ICU-400.42/icuSources/common/punycode.c)\n* [`punycode.c` by _Ben Noordhuis_](https://github.com/bnoordhuis/punycode/blob/master/punycode.c)\n* [JavaScript implementation by _some_](http://stackoverflow.com/questions/183485/can-anyone-recommend-a-good-free-javascript-for-punycode-to-unicode-conversion/301287#301287)\n* [`punycode.js` by _Ben Noordhuis_](https://github.com/joyent/node/blob/426298c8c1c0d5b5224ac3658c41e7c2a3fe9377/lib/punycode.js) (note: [not fully compliant](https://github.com/joyent/node/issues/2072))\n\nThis project was [bundled](https://github.com/joyent/node/blob/master/lib/punycode.js) with Node.js from [v0.6.2+](https://github.com/joyent/node/compare/975f1930b1...61e796decc) until [v7](https://github.com/nodejs/node/pull/7941) (soft-deprecated).\n\nThis project provides a CommonJS module that uses ES2015+ features and JavaScript module, which work in modern Node.js versions and browsers. For the old Punycode.js version that offers the same functionality in a UMD build with support for older pre-ES2015 runtimes, including Rhino, Ringo, and Narwhal, see [v1.4.1](https://github.com/mathiasbynens/punycode.js/releases/tag/v1.4.1).\n\n## Installation\n\nVia [npm](https://www.npmjs.com/):\n\n```bash\nnpm install punycode --save\n```\n\nIn [Node.js](https://nodejs.org/):\n\n> ⚠️ Note that userland modules don't hide core modules.\n> For example, `require('punycode')` still imports the deprecated core module even if you executed `npm install punycode`.\n> Use `require('punycode/')` to import userland modules rather than core modules.\n\n```js\nconst punycode = require('punycode/');\n```\n\n## API\n\n### `punycode.decode(string)`\n\nConverts a Punycode string of ASCII symbols to a string of Unicode symbols.\n\n```js\n// decode domain name parts\npunycode.decode('maana-pta'); // 'mañana'\npunycode.decode('--dqo34k'); // '☃-⌘'\n```\n\n### `punycode.encode(string)`\n\nConverts a string of Unicode symbols to a Punycode string of ASCII symbols.\n\n```js\n// encode domain name parts\npunycode.encode('mañana'); // 'maana-pta'\npunycode.encode('☃-⌘'); // '--dqo34k'\n```\n\n### `punycode.toUnicode(input)`\n\nConverts a Punycode string representing a domain name or an email address to Unicode. Only the Punycoded parts of the input will be converted, i.e. it doesn’t matter if you call it on a string that has already been converted to Unicode.\n\n```js\n// decode domain names\npunycode.toUnicode('xn--maana-pta.com');\n// → 'mañana.com'\npunycode.toUnicode('xn----dqo34k.com');\n// → '☃-⌘.com'\n\n// decode email addresses\npunycode.toUnicode('джумла@xn--p-8sbkgc5ag7bhce.xn--ba-lmcq');\n// → 'джумла@джpумлатест.bрфa'\n```\n\n### `punycode.toASCII(input)`\n\nConverts a lowercased Unicode string representing a domain name or an email address to Punycode. Only the non-ASCII parts of the input will be converted, i.e. it doesn’t matter if you call it with a domain that’s already in ASCII.\n\n```js\n// encode domain names\npunycode.toASCII('mañana.com');\n// → 'xn--maana-pta.com'\npunycode.toASCII('☃-⌘.com');\n// → 'xn----dqo34k.com'\n\n// encode email addresses\npunycode.toASCII('джумла@джpумлатест.bрфa');\n// → 'джумла@xn--p-8sbkgc5ag7bhce.xn--ba-lmcq'\n```\n\n### `punycode.ucs2`\n\n#### `punycode.ucs2.decode(string)`\n\nCreates an array containing the numeric code point values of each Unicode symbol in the string. While [JavaScript uses UCS-2 internally](https://mathiasbynens.be/notes/javascript-encoding), this function will convert a pair of surrogate halves (each of which UCS-2 exposes as separate characters) into a single code point, matching UTF-16.\n\n```js\npunycode.ucs2.decode('abc');\n// → [0x61, 0x62, 0x63]\n// surrogate pair for U+1D306 TETRAGRAM FOR CENTRE:\npunycode.ucs2.decode('\\uD834\\uDF06');\n// → [0x1D306]\n```\n\n#### `punycode.ucs2.encode(codePoints)`\n\nCreates a string based on an array of numeric code point values.\n\n```js\npunycode.ucs2.encode([0x61, 0x62, 0x63]);\n// → 'abc'\npunycode.ucs2.encode([0x1D306]);\n// → '\\uD834\\uDF06'\n```\n\n### `punycode.version`\n\nA string representing the current Punycode.js version number.\n\n## Author\n\n| [![twitter/mathias](https://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](https://twitter.com/mathias \"Follow @mathias on Twitter\") |\n|---|\n| [Mathias Bynens](https://mathiasbynens.be/) |\n\n## License\n\nPunycode.js is available under the [MIT](https://mths.be/mit) license.\n/package.json\u0004{\n  \"name\": \"punycode\",\n  \"version\": \"2.3.0\",\n  \"description\": \"A robust Punycode converter that fully complies to RFC 3492 and RFC 5891, and works on nearly all JavaScript platforms.\",\n  \"homepage\": \"https://mths.be/punycode\",\n  \"main\": \"punycode.js\",\n  \"jsnext:main\": \"punycode.es6.js\",\n  \"module\": \"punycode.es6.js\",\n  \"engines\": {\n    \"node\": \">=6\"\n  },\n  \"keywords\": [\n    \"punycode\",\n    \"unicode\",\n    \"idn\",\n    \"idna\",\n    \"dns\",\n    \"url\",\n    \"domain\"\n  ],\n  \"license\": \"MIT\",\n  \"author\": {\n    \"name\": \"Mathias Bynens\",\n    \"url\": \"https://mathiasbynens.be/\"\n  },\n  \"contributors\": [\n    {\n      \"name\": \"Mathias Bynens\",\n      \"url\": \"https://mathiasbynens.be/\"\n    }\n  ],\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/mathiasbynens/punycode.js.git\"\n  },\n  \"bugs\": \"https://github.com/mathiasbynens/punycode.js/issues\",\n  \"files\": [\n    \"LICENSE-MIT.txt\",\n    \"punycode.js\",\n    \"punycode.es6.js\"\n  ],\n  \"scripts\": {\n    \"test\": \"mocha tests\",\n    \"build\": \"node scripts/prepublish.js\"\n  },\n  \"devDependencies\": {\n    \"codecov\": \"^1.0.1\",\n    \"istanbul\": \"^0.4.1\",\n    \"mocha\": \"^10.2.0\"\n  },\n  \"jspm\": {\n    \"map\": {\n      \"./punycode.js\": {\n        \"node\": \"@node/punycode\"\n      }\n    }\n  }\n}\n/LICENSE-MIT.txt\u00045Copyright Mathias Bynens <https://mathiasbynens.be/>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n/punycode.js1'use strict';\n\n/** Highest positive signed 32-bit float value */\nconst maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1\n\n/** Bootstring parameters */\nconst base = 36;\nconst tMin = 1;\nconst tMax = 26;\nconst skew = 38;\nconst damp = 700;\nconst initialBias = 72;\nconst initialN = 128; // 0x80\nconst delimiter = '-'; // '\\x2D'\n\n/** Regular expressions */\nconst regexPunycode = /^xn--/;\nconst regexNonASCII = /[^\\0-\\x7F]/; // Note: U+007F DEL is excluded too.\nconst regexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g; // RFC 3490 separators\n\n/** Error messages */\nconst errors = {\n\t'overflow': 'Overflow: input needs wider integers to process',\n\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t'invalid-input': 'Invalid input'\n};\n\n/** Convenience shortcuts */\nconst baseMinusTMin = base - tMin;\nconst floor = Math.floor;\nconst stringFromCharCode = String.fromCharCode;\n\n/*--------------------------------------------------------------------------*/\n\n/**\n * A generic error utility function.\n * @private\n * @param {String} type The error type.\n * @returns {Error} Throws a `RangeError` with the applicable error message.\n */\nfunction error(type) {\n\tthrow new RangeError(errors[type]);\n}\n\n/**\n * A generic `Array#map` utility function.\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} callback The function that gets called for every array\n * item.\n * @returns {Array} A new array of values returned by the callback function.\n */\nfunction map(array, callback) {\n\tconst result = [];\n\tlet length = array.length;\n\twhile (length--) {\n\t\tresult[length] = callback(array[length]);\n\t}\n\treturn result;\n}\n\n/**\n * A simple `Array#map`-like wrapper to work with domain name strings or email\n * addresses.\n * @private\n * @param {String} domain The domain name or email address.\n * @param {Function} callback The function that gets called for every\n * character.\n * @returns {String} A new string of characters returned by the callback\n * function.\n */\nfunction mapDomain(domain, callback) {\n\tconst parts = domain.split('@');\n\tlet result = '';\n\tif (parts.length > 1) {\n\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t// the local part (i.e. everything up to `@`) intact.\n\t\tresult = parts[0] + '@';\n\t\tdomain = parts[1];\n\t}\n\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\tdomain = domain.replace(regexSeparators, '\\x2E');\n\tconst labels = domain.split('.');\n\tconst encoded = map(labels, callback).join('.');\n\treturn result + encoded;\n}\n\n/**\n * Creates an array containing the numeric code points of each Unicode\n * character in the string. While JavaScript uses UCS-2 internally,\n * this function will convert a pair of surrogate halves (each of which\n * UCS-2 exposes as separate characters) into a single code point,\n * matching UTF-16.\n * @see `punycode.ucs2.encode`\n * @see <https://mathiasbynens.be/notes/javascript-encoding>\n * @memberOf punycode.ucs2\n * @name decode\n * @param {String} string The Unicode input string (UCS-2).\n * @returns {Array} The new array of code points.\n */\nfunction ucs2decode(string) {\n\tconst output = [];\n\tlet counter = 0;\n\tconst length = string.length;\n\twhile (counter < length) {\n\t\tconst value = string.charCodeAt(counter++);\n\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t// It's a high surrogate, and there is a next character.\n\t\t\tconst extra = string.charCodeAt(counter++);\n\t\t\tif ((extra & 0xFC00) == 0xDC00) { // Low surrogate.\n\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t} else {\n\t\t\t\t// It's an unmatched surrogate; only append this code unit, in case the\n\t\t\t\t// next code unit is the high surrogate of a surrogate pair.\n\t\t\t\toutput.push(value);\n\t\t\t\tcounter--;\n\t\t\t}\n\t\t} else {\n\t\t\toutput.push(value);\n\t\t}\n\t}\n\treturn output;\n}\n\n/**\n * Creates a string based on an array of numeric code points.\n * @see `punycode.ucs2.decode`\n * @memberOf punycode.ucs2\n * @name encode\n * @param {Array} codePoints The array of numeric code points.\n * @returns {String} The new Unicode string (UCS-2).\n */\nconst ucs2encode = codePoints => String.fromCodePoint(...codePoints);\n\n/**\n * Converts a basic code point into a digit/integer.\n * @see `digitToBasic()`\n * @private\n * @param {Number} codePoint The basic numeric code point value.\n * @returns {Number} The numeric value of a basic code point (for use in\n * representing integers) in the range `0` to `base - 1`, or `base` if\n * the code point does not represent a value.\n */\nconst basicToDigit = function(codePoint) {\n\tif (codePoint >= 0x30 && codePoint < 0x3A) {\n\t\treturn 26 + (codePoint - 0x30);\n\t}\n\tif (codePoint >= 0x41 && codePoint < 0x5B) {\n\t\treturn codePoint - 0x41;\n\t}\n\tif (codePoint >= 0x61 && codePoint < 0x7B) {\n\t\treturn codePoint - 0x61;\n\t}\n\treturn base;\n};\n\n/**\n * Converts a digit/integer into a basic code point.\n * @see `basicToDigit()`\n * @private\n * @param {Number} digit The numeric value of a basic code point.\n * @returns {Number} The basic code point whose value (when used for\n * representing integers) is `digit`, which needs to be in the range\n * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n * used; else, the lowercase form is used. The behavior is undefined\n * if `flag` is non-zero and `digit` has no uppercase form.\n */\nconst digitToBasic = function(digit, flag) {\n\t//  0..25 map to ASCII a..z or A..Z\n\t// 26..35 map to ASCII 0..9\n\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n};\n\n/**\n * Bias adaptation function as per section 3.4 of RFC 3492.\n * https://tools.ietf.org/html/rfc3492#section-3.4\n * @private\n */\nconst adapt = function(delta, numPoints, firstTime) {\n\tlet k = 0;\n\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\tdelta += floor(delta / numPoints);\n\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\tdelta = floor(delta / baseMinusTMin);\n\t}\n\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n};\n\n/**\n * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n * symbols.\n * @memberOf punycode\n * @param {String} input The Punycode string of ASCII-only symbols.\n * @returns {String} The resulting string of Unicode symbols.\n */\nconst decode = function(input) {\n\t// Don't use UCS-2.\n\tconst output = [];\n\tconst inputLength = input.length;\n\tlet i = 0;\n\tlet n = initialN;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points: let `basic` be the number of input code\n\t// points before the last delimiter, or `0` if there is none, then copy\n\t// the first basic code points to the output.\n\n\tlet basic = input.lastIndexOf(delimiter);\n\tif (basic < 0) {\n\t\tbasic = 0;\n\t}\n\n\tfor (let j = 0; j < basic; ++j) {\n\t\t// if it's not a basic code point\n\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\terror('not-basic');\n\t\t}\n\t\toutput.push(input.charCodeAt(j));\n\t}\n\n\t// Main decoding loop: start just after the last delimiter if any basic code\n\t// points were copied; start at the beginning otherwise.\n\n\tfor (let index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t// `index` is the index of the next character to be consumed.\n\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t// which gets added to `i`. The overflow checking is easier\n\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t// value at the end to obtain `delta`.\n\t\tconst oldi = i;\n\t\tfor (let w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\tif (index >= inputLength) {\n\t\t\t\terror('invalid-input');\n\t\t\t}\n\n\t\t\tconst digit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\tif (digit >= base) {\n\t\t\t\terror('invalid-input');\n\t\t\t}\n\t\t\tif (digit > floor((maxInt - i) / w)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\ti += digit * w;\n\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\tif (digit < t) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tconst baseMinusT = base - t;\n\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tw *= baseMinusT;\n\n\t\t}\n\n\t\tconst out = output.length + 1;\n\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t// incrementing `n` each time, so we'll fix that now:\n\t\tif (floor(i / out) > maxInt - n) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tn += floor(i / out);\n\t\ti %= out;\n\n\t\t// Insert `n` at position `i` of the output.\n\t\toutput.splice(i++, 0, n);\n\n\t}\n\n\treturn String.fromCodePoint(...output);\n};\n\n/**\n * Converts a string of Unicode symbols (e.g. a domain name label) to a\n * Punycode string of ASCII-only symbols.\n * @memberOf punycode\n * @param {String} input The string of Unicode symbols.\n * @returns {String} The resulting Punycode string of ASCII-only symbols.\n */\nconst encode = function(input) {\n\tconst output = [];\n\n\t// Convert the input in UCS-2 to an array of Unicode code points.\n\tinput = ucs2decode(input);\n\n\t// Cache the length.\n\tconst inputLength = input.length;\n\n\t// Initialize the state.\n\tlet n = initialN;\n\tlet delta = 0;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points.\n\tfor (const currentValue of input) {\n\t\tif (currentValue < 0x80) {\n\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t}\n\t}\n\n\tconst basicLength = output.length;\n\tlet handledCPCount = basicLength;\n\n\t// `handledCPCount` is the number of code points that have been handled;\n\t// `basicLength` is the number of basic code points.\n\n\t// Finish the basic string with a delimiter unless it's empty.\n\tif (basicLength) {\n\t\toutput.push(delimiter);\n\t}\n\n\t// Main encoding loop:\n\twhile (handledCPCount < inputLength) {\n\n\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t// larger one:\n\t\tlet m = maxInt;\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\tm = currentValue;\n\t\t\t}\n\t\t}\n\n\t\t// Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,\n\t\t// but guard against overflow.\n\t\tconst handledCPCountPlusOne = handledCPCount + 1;\n\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\tn = m;\n\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\t\t\tif (currentValue === n) {\n\t\t\t\t// Represent delta as a generalized variable-length integer.\n\t\t\t\tlet q = delta;\n\t\t\t\tfor (let k = base; /* no condition */; k += base) {\n\t\t\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tconst qMinusT = q - t;\n\t\t\t\t\tconst baseMinusT = base - t;\n\t\t\t\t\toutput.push(\n\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t);\n\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t}\n\n\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount === basicLength);\n\t\t\t\tdelta = 0;\n\t\t\t\t++handledCPCount;\n\t\t\t}\n\t\t}\n\n\t\t++delta;\n\t\t++n;\n\n\t}\n\treturn output.join('');\n};\n\n/**\n * Converts a Punycode string representing a domain name or an email address\n * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n * it doesn't matter if you call it on a string that has already been\n * converted to Unicode.\n * @memberOf punycode\n * @param {String} input The Punycoded domain name or email address to\n * convert to Unicode.\n * @returns {String} The Unicode representation of the given Punycode\n * string.\n */\nconst toUnicode = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexPunycode.test(string)\n\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t: string;\n\t});\n};\n\n/**\n * Converts a Unicode string representing a domain name or an email address to\n * Punycode. Only the non-ASCII parts of the domain name will be converted,\n * i.e. it doesn't matter if you call it with a domain that's already in\n * ASCII.\n * @memberOf punycode\n * @param {String} input The domain name or email address to convert, as a\n * Unicode string.\n * @returns {String} The Punycode representation of the given domain name or\n * email address.\n */\nconst toASCII = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexNonASCII.test(string)\n\t\t\t? 'xn--' + encode(string)\n\t\t\t: string;\n\t});\n};\n\n/*--------------------------------------------------------------------------*/\n\n/** Define the public API */\nconst punycode = {\n\t/**\n\t * A string representing the current Punycode.js version number.\n\t * @memberOf punycode\n\t * @type String\n\t */\n\t'version': '2.1.0',\n\t/**\n\t * An object of methods to convert from JavaScript's internal character\n\t * representation (UCS-2) to Unicode code points, and back.\n\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t * @memberOf punycode\n\t * @type Object\n\t */\n\t'ucs2': {\n\t\t'decode': ucs2decode,\n\t\t'encode': ucs2encode\n\t},\n\t'decode': decode,\n\t'encode': encode,\n\t'toASCII': toASCII,\n\t'toUnicode': toUnicode\n};\n\nmodule.exports = punycode;\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/cXVldWUtbWljcm90YXNrQDEuMi4z",
    "content": "/package.json\u0004{\n  \"name\": \"queue-microtask\",\n  \"description\": \"fast, tiny `queueMicrotask` shim for modern engines\",\n  \"version\": \"1.2.3\",\n  \"author\": {\n    \"name\": \"Feross Aboukhadijeh\",\n    \"email\": \"feross@feross.org\",\n    \"url\": \"https://feross.org\"\n  },\n  \"bugs\": {\n    \"url\": \"https://github.com/feross/queue-microtask/issues\"\n  },\n  \"devDependencies\": {\n    \"standard\": \"*\",\n    \"tape\": \"^5.2.2\"\n  },\n  \"funding\": [\n    {\n      \"type\": \"github\",\n      \"url\": \"https://github.com/sponsors/feross\"\n    },\n    {\n      \"type\": \"patreon\",\n      \"url\": \"https://www.patreon.com/feross\"\n    },\n    {\n      \"type\": \"consulting\",\n      \"url\": \"https://feross.org/support\"\n    }\n  ],\n  \"homepage\": \"https://github.com/feross/queue-microtask\",\n  \"keywords\": [\n    \"asap\",\n    \"immediate\",\n    \"micro task\",\n    \"microtask\",\n    \"nextTick\",\n    \"process.nextTick\",\n    \"queue micro task\",\n    \"queue microtask\",\n    \"queue-microtask\",\n    \"queueMicrotask\",\n    \"setImmediate\",\n    \"task\"\n  ],\n  \"license\": \"MIT\",\n  \"main\": \"index.js\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git://github.com/feross/queue-microtask.git\"\n  },\n  \"scripts\": {\n    \"test\": \"standard && tape test/*.js\"\n  }\n}\n/LICENSE\u00049The MIT License (MIT)\n\nCopyright (c) Feross Aboukhadijeh\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n/index.d.tsOdeclare const queueMicrotask: (cb: () => void) => void\nexport = queueMicrotask\n/README.md\u0015# queue-microtask [![ci][ci-image]][ci-url] [![npm][npm-image]][npm-url] [![downloads][downloads-image]][downloads-url] [![javascript style guide][standard-image]][standard-url]\n\n[ci-image]: https://img.shields.io/github/workflow/status/feross/queue-microtask/ci/master\n[ci-url]: https://github.com/feross/queue-microtask/actions\n[npm-image]: https://img.shields.io/npm/v/queue-microtask.svg\n[npm-url]: https://npmjs.org/package/queue-microtask\n[downloads-image]: https://img.shields.io/npm/dm/queue-microtask.svg\n[downloads-url]: https://npmjs.org/package/queue-microtask\n[standard-image]: https://img.shields.io/badge/code_style-standard-brightgreen.svg\n[standard-url]: https://standardjs.com\n\n### fast, tiny [`queueMicrotask`](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/queueMicrotask) shim for modern engines\n\n- Use [`queueMicrotask`](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/queueMicrotask) in all modern JS engines.\n- No dependencies. Less than 10 lines. No shims or complicated fallbacks.\n- Optimal performance in all modern environments\n  - Uses `queueMicrotask` in modern environments\n  - Fallback to `Promise.resolve().then(fn)` in Node.js 10 and earlier, and old browsers (same performance as `queueMicrotask`)\n\n## install\n\n```\nnpm install queue-microtask\n```\n\n## usage\n\n```js\nconst queueMicrotask = require('queue-microtask')\n\nqueueMicrotask(() => { /* this will run soon */ })\n```\n\n## What is `queueMicrotask` and why would one use it?\n\nThe `queueMicrotask` function is a WHATWG standard. It queues a microtask to be executed prior to control returning to the event loop.\n\nA microtask is a short function which will run after the current task has completed its work and when there is no other code waiting to be run before control of the execution context is returned to the event loop.\n\nThe code `queueMicrotask(fn)` is equivalent to the code `Promise.resolve().then(fn)`. It is also very similar to [`process.nextTick(fn)`](https://nodejs.org/api/process.html#process_process_nexttick_callback_args) in Node.\n\nUsing microtasks lets code run without interfering with any other, potentially higher priority, code that is pending, but before the JS engine regains control over the execution context.\n\nSee the [spec](https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#microtask-queuing) or [Node documentation](https://nodejs.org/api/globals.html#globals_queuemicrotask_callback) for more information.\n\n## Who is this package for?\n\nThis package allows you to use `queueMicrotask` safely in all modern JS engines. Use it if you prioritize small JS bundle size over support for old browsers.\n\nIf you just need to support Node 12 and later, use `queueMicrotask` directly. If you need to support all versions of Node, use this package.\n\n## Why not use `process.nextTick`?\n\nIn Node, `queueMicrotask` and `process.nextTick` are [essentially equivalent](https://nodejs.org/api/globals.html#globals_queuemicrotask_callback), though there are [subtle differences](https://github.com/YuzuJS/setImmediate#macrotasks-and-microtasks) that don't matter in most situations.\n\nYou can think of `queueMicrotask` as a standardized version of `process.nextTick` that works in the browser. No need to rely on your browser bundler to shim `process` for the browser environment.\n\n## Why not use `setTimeout(fn, 0)`?\n\nThis approach is the most compatible, but it has problems. Modern browsers throttle timers severely, so `setTimeout(…, 0)` usually takes at least 4ms to run. Furthermore, the throttling gets even worse if the page is backgrounded. If you have many `setTimeout` calls, then this can severely limit the performance of your program.\n\n## Why not use a microtask library like [`immediate`](https://www.npmjs.com/package/immediate) or [`asap`](https://www.npmjs.com/package/asap)?\n\nThese packages are great! However, if you prioritize small JS bundle size over optimal performance in old browsers then you may want to consider this package.\n\nThis package (`queue-microtask`) is four times smaller than `immediate`, twice as small as `asap`, and twice as small as using `process.nextTick` and letting the browser bundler shim it automatically.\n\nNote: This package throws an exception in JS environments which lack `Promise` support -- which are usually very old browsers and Node.js versions.\n\nSince the `queueMicrotask` API is supported in Node.js, Chrome, Firefox, Safari, Opera, and Edge, **the vast majority of users will get optimal performance**. Any JS environment with `Promise`, which is almost all of them, also get optimal performance. If you need support for JS environments which lack `Promise` support, use one of the alternative packages.\n\n## What is a shim?\n\n> In computer programming, a shim is a library that transparently intercepts API calls and changes the arguments passed, handles the operation itself or redirects the operation elsewhere. – [Wikipedia](https://en.wikipedia.org/wiki/Shim_(computing))\n\nThis package could also be described as a \"ponyfill\".\n\n> A ponyfill is almost the same as a polyfill, but not quite. Instead of patching functionality for older browsers, a ponyfill provides that functionality as a standalone module you can use. – [PonyFoo](https://ponyfoo.com/articles/polyfills-or-ponyfills)\n\n## API\n\n### `queueMicrotask(fn)`\n\nThe `queueMicrotask()` method queues a microtask.\n\nThe `fn` argument is a function to be executed after all pending tasks have completed but before yielding control to the browser's event loop.\n\n## license\n\nMIT. Copyright (c) [Feross Aboukhadijeh](https://feross.org).\n/index.js\u0001/*! queue-microtask. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\nlet promise\n\nmodule.exports = typeof queueMicrotask === 'function'\n  ? queueMicrotask.bind(typeof window !== 'undefined' ? window : global)\n  // reuse resolved promise, and allocate it lazily\n  : cb => (promise || (promise = Promise.resolve()))\n    .then(cb)\n    .catch(err => setTimeout(() => { throw err }, 0))\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/cXVpY2stZm9ybWF0LXVuZXNjYXBlZEA0LjAuNA==",
    "content": "/LICENSE\u0004CThe MIT License (MIT)\n\nCopyright (c) 2016-2019 David Mark Clements\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n/index.js\ne'use strict'\nfunction tryStringify (o) {\n  try { return JSON.stringify(o) } catch(e) { return '\"[Circular]\"' }\n}\n\nmodule.exports = format\n\nfunction format(f, args, opts) {\n  var ss = (opts && opts.stringify) || tryStringify\n  var offset = 1\n  if (typeof f === 'object' && f !== null) {\n    var len = args.length + offset\n    if (len === 1) return f\n    var objects = new Array(len)\n    objects[0] = ss(f)\n    for (var index = 1; index < len; index++) {\n      objects[index] = ss(args[index])\n    }\n    return objects.join(' ')\n  }\n  if (typeof f !== 'string') {\n    return f\n  }\n  var argLen = args.length\n  if (argLen === 0) return f\n  var str = ''\n  var a = 1 - offset\n  var lastPos = -1\n  var flen = (f && f.length) || 0\n  for (var i = 0; i < flen;) {\n    if (f.charCodeAt(i) === 37 && i + 1 < flen) {\n      lastPos = lastPos > -1 ? lastPos : 0\n      switch (f.charCodeAt(i + 1)) {\n        case 100: // 'd'\n        case 102: // 'f'\n          if (a >= argLen)\n            break\n          if (args[a] == null)  break\n          if (lastPos < i)\n            str += f.slice(lastPos, i)\n          str += Number(args[a])\n          lastPos = i + 2\n          i++\n          break\n        case 105: // 'i'\n          if (a >= argLen)\n            break\n          if (args[a] == null)  break\n          if (lastPos < i)\n            str += f.slice(lastPos, i)\n          str += Math.floor(Number(args[a]))\n          lastPos = i + 2\n          i++\n          break\n        case 79: // 'O'\n        case 111: // 'o'\n        case 106: // 'j'\n          if (a >= argLen)\n            break\n          if (args[a] === undefined) break\n          if (lastPos < i)\n            str += f.slice(lastPos, i)\n          var type = typeof args[a]\n          if (type === 'string') {\n            str += '\\'' + args[a] + '\\''\n            lastPos = i + 2\n            i++\n            break\n          }\n          if (type === 'function') {\n            str += args[a].name || '<anonymous>'\n            lastPos = i + 2\n            i++\n            break\n          }\n          str += ss(args[a])\n          lastPos = i + 2\n          i++\n          break\n        case 115: // 's'\n          if (a >= argLen)\n            break\n          if (lastPos < i)\n            str += f.slice(lastPos, i)\n          str += String(args[a])\n          lastPos = i + 2\n          i++\n          break\n        case 37: // '%'\n          if (lastPos < i)\n            str += f.slice(lastPos, i)\n          str += '%'\n          lastPos = i + 2\n          i++\n          a--\n          break\n      }\n      ++a\n    }\n    ++i\n  }\n  if (lastPos === -1)\n    return f\n  else if (lastPos < flen) {\n    str += f.slice(lastPos)\n  }\n\n  return str\n}\n/.github/workflows/ci.yml\u0001rname: CI Tests\n\non:\n  - pull_request\n\njobs:\n  build:\n\n    runs-on: ubuntu-latest\n\n    strategy:\n      matrix:\n        node-version: [10.x, 12.x, 13.x]\n\n    steps:\n    - uses: actions/checkout@v2\n    - name: Use Node.js ${{ matrix.node-version }}\n      uses: actions/setup-node@v1\n      with:\n        node-version: ${{ matrix.node-version }}\n    - run: npm i && npm test\n/test/index.js\u0016\u001f'use strict';\nconst assert = require('assert');\nconst format = require('../');\n\n// assert.equal(format([]), '');\n// assert.equal(format(['']), '');\n// assert.equal(format([[]]), '[]');\n// assert.equal(format([{}]), '{}');\n// assert.equal(format([null]), 'null');\n// assert.equal(format([true]), 'true');\n// assert.equal(format([false]), 'false');\n// assert.equal(format(['test']), 'test');\n\n// // // CHECKME this is for console.log() compatibility - but is it *right*?\n// assert.equal(format(['foo', 'bar', 'baz']), 'foo bar baz');\n\nconst emptyObj = {}\nassert.equal(format(emptyObj, []), emptyObj)\nassert.equal(format(emptyObj, ['a', 'b', 'c']), '{} \"b\" \"c\" ')\nassert.equal(format('', ['a']), '')\n\n// ES6 Symbol handling\nconst symbol = Symbol('foo')\nassert.equal(format(null, [symbol]), null);\nassert.equal(format('foo', [symbol]), 'foo');\nassert.equal(format('%s', [symbol]), 'Symbol(foo)');\nassert.equal(format('%j', [symbol]), 'undefined');\nassert.throws(function() {\n  format('%d', [symbol]);\n}, TypeError);\n\nassert.equal(format('%d', [42.0]), '42');\nassert.equal(format('%d', [42]), '42');\nassert.equal(format('%f', [42.99]), '42.99');\nassert.equal(format('%i', [42.99]), '42');\nassert.equal(format('%s', [42]), '42');\nassert.equal(format('%j', [42]), '42');\n\nassert.equal(format('%d', [undefined]), '%d');\nassert.equal(format('%s', [undefined]), 'undefined');\nassert.equal(format('%j', [undefined]), '%j');\n\n\nassert.equal(format('%d', [null]), '%d');\nassert.equal(format('%i', [null]), '%i');\nassert.equal(format('%s', [null]), 'null');\nassert.equal(format('%j', [null]), 'null');\n\n\nassert.equal(format('%d', ['42.0']), '42');\nassert.equal(format('%d', ['42']), '42');\nassert.equal(format('%i', ['42']), '42');\nassert.equal(format('%i', ['42.99']), '42');\nassert.equal(format('%s %i', ['foo', 42.99]), 'foo 42');\nassert.equal(format('%d %d', ['42']), '42 %d');\nassert.equal(format('%i %i', ['42']), '42 %i');\nassert.equal(format('%i %i', ['42.99']), '42 %i');\nassert.equal(format('foo %d', ['42']), 'foo 42');\nassert.equal(format('%s', ['42']), '42');\n// assert.equal(format('%j', ['42']), '\"42\"');\n\n// assert.equal(format('%%s%s', ['foo']), '%sfoo');\n\nassert.equal(format('%s', []), '%s');\nassert.equal(format('%s', [undefined]), 'undefined');\nassert.equal(format('%s', ['foo']), 'foo');\nassert.equal(format('%s', ['\\\"quoted\\\"']), '\\\"quoted\\\"');\nassert.equal(format('%j', [{ s: '\\\"quoted\\\"' }]), '{\\\"s\\\":\\\"\\\\\"quoted\\\\\"\\\"}');\nassert.equal(format('%s:%s', []), '%s:%s');\nassert.equal(format('%s:%s', [undefined]), 'undefined:%s');\nassert.equal(format('%s:%s', ['foo']), 'foo:%s');\nassert.equal(format('%s:%s', ['foo', 'bar']), 'foo:bar');\nassert.equal(format('%s:%s', ['foo', 'bar', 'baz']), 'foo:bar');\nassert.equal(format('%s%s', []), '%s%s');\nassert.equal(format('%s%s', [undefined]), 'undefined%s');\nassert.equal(format('%s%s', ['foo']), 'foo%s');\nassert.equal(format('%s%s', ['foo', 'bar']), 'foobar');\nassert.equal(format('%s%s', ['foo', 'bar', 'baz']), 'foobar');\n\nassert.equal(format('foo %s', ['foo']), 'foo foo')\n\nassert.equal(format('foo %o', [{foo: 'foo'}]), 'foo {\"foo\":\"foo\"}')\nassert.equal(format('foo %O', [{foo: 'foo'}]), 'foo {\"foo\":\"foo\"}')\nassert.equal(format('foo %j', [{foo: 'foo'}]), 'foo {\"foo\":\"foo\"}')\nassert.equal(format('foo %j %j', [{foo: 'foo'}]), 'foo {\"foo\":\"foo\"} %j')\nassert.equal(format('foo %j', ['foo']), 'foo \\'foo\\'') // TODO: isn't this wrong?\nassert.equal(format('foo %j', [function foo () {}]), 'foo foo')\nassert.equal(format('foo %j', [function () {}]), 'foo <anonymous>')\nassert.equal(format('foo %j', [{foo: 'foo'}, 'not-printed']), 'foo {\"foo\":\"foo\"}')\nassert.equal(\n  format('foo %j', [{ foo: 'foo' }], { stringify () { return 'REPLACED' } }),\n  'foo REPLACED'\n)\nconst circularObject = {}\ncircularObject.foo = circularObject\nassert.equal(format('foo %j', [circularObject]), 'foo \"[Circular]\"')\n\n// // assert.equal(format(['%%%s%%', 'hi']), '%hi%');\n// // assert.equal(format(['%%%s%%%%', 'hi']), '%hi%%');\n\n// (function() {\n//   var o = {};\n//   o.o = o;\n//   assert.equal(format(['%j', o]), '[Circular]');\n// })();\n\nassert.equal(format('%%', ['foo']), '%')\nassert.equal(format('foo %%', ['foo']), 'foo %')\nassert.equal(format('foo %% %s', ['bar']), 'foo % bar')\n\nassert.equal(format('%s - %d', ['foo', undefined]), 'foo - %d')\nassert.equal(format('%s - %f', ['foo', undefined]), 'foo - %f')\nassert.equal(format('%s - %i', ['foo', undefined]), 'foo - %i')\nassert.equal(format('%s - %O', ['foo', undefined]), 'foo - %O')\nassert.equal(format('%s - %o', ['foo', undefined]), 'foo - %o')\nassert.equal(format('%s - %j', ['foo', undefined]), 'foo - %j')\nassert.equal(format('%s - %s', ['foo', undefined]), 'foo - undefined')\nassert.equal(format('%s - %%', ['foo', undefined]), 'foo - %')\n\nassert.equal(format('%s - %d', ['foo', null]), 'foo - %d')\nassert.equal(format('%s - %f', ['foo', null]), 'foo - %f')\nassert.equal(format('%s - %i', ['foo', null]), 'foo - %i')\nassert.equal(format('%s - %O', ['foo', null]), 'foo - null')\nassert.equal(format('%s - %o', ['foo', null]), 'foo - null')\nassert.equal(format('%s - %j', ['foo', null]), 'foo - null')\nassert.equal(format('%s - %s', ['foo', null]), 'foo - null')\nassert.equal(format('%s - %%', ['foo', null]), 'foo - %')\n\nassert.equal(format('%d%d', [11, 22]), '1122')\nassert.equal(format('%d%s', [11, 22]), '1122')\nassert.equal(format('%d%o', [11, { aa: 22 }]), '11{\"aa\":22}')\nassert.equal(format('%d%d%d', [11, 22, 33]), '112233')\nassert.equal(format('%d%d%s', [11, 22, 33]), '112233')\nassert.equal(format('%d%o%d%s', [11, { aa: 22 }, 33, 'sss']), '11{\"aa\":22}33sss')\nassert.equal(format('%d%%%d', [11, 22]), '11%22')\nassert.equal(format('%d%%%s', [11, 22]), '11%22')\n/readme.md\u0006# quick-format-unescaped\n\n## unescaped ?\n\nSometimes you want to embed the results of quick-format into another string, \nand then escape the whole string. \n\n## usage\n\n```js\nvar format = require('quick-format-unescaped')\nformat('hello %s %j %d', ['world', [{obj: true}, 4, {another: 'obj'}]])\n```\n\n## format(fmt, parameters, [options])\n\n### fmt\n\nA `printf`-like format string. Example: `'hello %s %j %d'`\n\n### parameters\n\nArray of values to be inserted into the `format` string. Example: `['world', {obj:true}]`\n\n### options.stringify\n\nPassing an options object as the third parameter with a `stringify` will mean \nany objects will be passed to the supplied function instead of an the \ninternal `tryStringify` function. This can be useful when using augmented\ncapability serializers such as [`fast-safe-stringify`](http://github.com/davidmarkclements/fast-safe-stringify) or [`fast-redact`](http://github.com/davidmarkclements/fast-redact).  \n\n## caveats\n\nBy default `quick-format-unescaped` uses  `JSON.stringify` instead of `util.inspect`, this means functions *will not be serialized*.\n\n## Benchmarks\n\n### Node 8.11.2\n\n```\nutil*100000: 350.325ms\nquick*100000: 268.141ms\nutilWithTailObj*100000: 586.387ms\nquickWithTailObj*100000: 280.200ms\nutil*100000: 325.735ms\nquick*100000: 270.251ms\nutilWithTailObj*100000: 492.270ms\nquickWithTailObj*100000: 261.797ms\n```\n\n### Node 10.4.0\n\n```\nutil*100000: 301.035ms\nquick*100000: 217.005ms\nutilWithTailObj*100000: 404.778ms\nquickWithTailObj*100000: 236.176ms\nutil*100000: 286.349ms\nquick*100000: 214.646ms\nutilWithTailObj*100000: 388.574ms\nquickWithTailObj*100000: 226.036ms\n```\n\n## Acknowledgements\n\nSponsored by [nearForm](http://www.nearform.com)\n/benchmark.js\u0002rvar bench = require('fastbench')\nvar utilFormat = require('util').format\nvar quickFormat = require('./')\n\nvar run = bench([\n  function util(cb) {\n    utilFormat('%s %j %d', 'a', {a: {x: 1}}, 1)\n    setImmediate(cb)\n  },\n  function quick(cb) {\n    quickFormat('%s %j %d', 'a', [{a: {x: 1}}, 1], null)\n    setImmediate(cb)\n  },\n  function utilWithTailObj(cb) {\n    utilFormat('hello %s %j %d', 'world', {obj: true}, 4, {another: 'obj'})\n    setImmediate(cb)\n  },\n  function quickWithTailObj(cb) {\n    quickFormat('hello %s %j %d', 'world', [{obj: true}, 4, {another: 'obj'}], null)\n    setImmediate(cb)\n  }\n], 100000)\n\nrun(run)\n/package.json\u0002{\n  \"name\": \"quick-format-unescaped\",\n  \"version\": \"4.0.4\",\n  \"description\": \"Solves a problem with util.format\",\n  \"main\": \"index.js\",\n  \"directories\": {\n    \"test\": \"test\"\n  },\n  \"scripts\": {\n    \"test\": \"nyc -- node test\",\n    \"test:html\": \"nyc --reporter=html -- node test\"\n  },\n  \"author\": \"David Mark Clements\",\n  \"devDependencies\": {\n    \"fastbench\": \"^1.0.1\",\n    \"nyc\": \"^15.0.0\"\n  },\n  \"dependencies\": {},\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/davidmarkclements/quick-format.git\"\n  },\n  \"keywords\": [],\n  \"license\": \"MIT\",\n  \"bugs\": {\n    \"url\": \"https://github.com/davidmarkclements/quick-format/issues\"\n  },\n  \"homepage\": \"https://github.com/davidmarkclements/quick-format#readme\"\n}\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/cmF3LWJvZHlAMi41LjE=",
    "content": "/index.d.ts\bimport { Readable } from 'stream';\n\ndeclare namespace getRawBody {\n  export type Encoding = string | true;\n\n  export interface Options {\n    /**\n     * The expected length of the stream.\n     */\n    length?: number | string | null;\n    /**\n     * The byte limit of the body. This is the number of bytes or any string\n     * format supported by `bytes`, for example `1000`, `'500kb'` or `'3mb'`.\n     */\n    limit?: number | string | null;\n    /**\n     * The encoding to use to decode the body into a string. By default, a\n     * `Buffer` instance will be returned when no encoding is specified. Most\n     * likely, you want `utf-8`, so setting encoding to `true` will decode as\n     * `utf-8`. You can use any type of encoding supported by `iconv-lite`.\n     */\n    encoding?: Encoding | null;\n  }\n\n  export interface RawBodyError extends Error {\n    /**\n     * The limit in bytes.\n     */\n    limit?: number;\n    /**\n     * The expected length of the stream.\n     */\n    length?: number;\n    expected?: number;\n    /**\n     * The received bytes.\n     */\n    received?: number;\n    /**\n     * The encoding.\n     */\n    encoding?: string;\n    /**\n     * The corresponding status code for the error.\n     */\n    status: number;\n    statusCode: number;\n    /**\n     * The error type.\n     */\n    type: string;\n  }\n}\n\n/**\n * Gets the entire buffer of a stream either as a `Buffer` or a string.\n * Validates the stream's length against an expected length and maximum\n * limit. Ideal for parsing request bodies.\n */\ndeclare function getRawBody(\n  stream: Readable,\n  callback: (err: getRawBody.RawBodyError, body: Buffer) => void\n): void;\n\ndeclare function getRawBody(\n  stream: Readable,\n  options: (getRawBody.Options & { encoding: getRawBody.Encoding }) | getRawBody.Encoding,\n  callback: (err: getRawBody.RawBodyError, body: string) => void\n): void;\n\ndeclare function getRawBody(\n  stream: Readable,\n  options: getRawBody.Options,\n  callback: (err: getRawBody.RawBodyError, body: Buffer) => void\n): void;\n\ndeclare function getRawBody(\n  stream: Readable,\n  options: (getRawBody.Options & { encoding: getRawBody.Encoding }) | getRawBody.Encoding\n): Promise<string>;\n\ndeclare function getRawBody(\n  stream: Readable,\n  options?: getRawBody.Options\n): Promise<Buffer>;\n\nexport = getRawBody;\n/README.md\u0019# raw-body\n\n[![NPM Version][npm-image]][npm-url]\n[![NPM Downloads][downloads-image]][downloads-url]\n[![Node.js Version][node-version-image]][node-version-url]\n[![Build status][github-actions-ci-image]][github-actions-ci-url]\n[![Test coverage][coveralls-image]][coveralls-url]\n\nGets the entire buffer of a stream either as a `Buffer` or a string.\nValidates the stream's length against an expected length and maximum limit.\nIdeal for parsing request bodies.\n\n## Install\n\nThis is a [Node.js](https://nodejs.org/en/) module available through the\n[npm registry](https://www.npmjs.com/). Installation is done using the\n[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally):\n\n```sh\n$ npm install raw-body\n```\n\n### TypeScript\n\nThis module includes a [TypeScript](https://www.typescriptlang.org/)\ndeclaration file to enable auto complete in compatible editors and type\ninformation for TypeScript projects. This module depends on the Node.js\ntypes, so install `@types/node`:\n\n```sh\n$ npm install @types/node\n```\n\n## API\n\n```js\nvar getRawBody = require('raw-body')\n```\n\n### getRawBody(stream, [options], [callback])\n\n**Returns a promise if no callback specified and global `Promise` exists.**\n\nOptions:\n\n- `length` - The length of the stream.\n  If the contents of the stream do not add up to this length,\n  an `400` error code is returned.\n- `limit` - The byte limit of the body.\n  This is the number of bytes or any string format supported by\n  [bytes](https://www.npmjs.com/package/bytes),\n  for example `1000`, `'500kb'` or `'3mb'`.\n  If the body ends up being larger than this limit,\n  a `413` error code is returned.\n- `encoding` - The encoding to use to decode the body into a string.\n  By default, a `Buffer` instance will be returned when no encoding is specified.\n  Most likely, you want `utf-8`, so setting `encoding` to `true` will decode as `utf-8`.\n  You can use any type of encoding supported by [iconv-lite](https://www.npmjs.org/package/iconv-lite#readme).\n\nYou can also pass a string in place of options to just specify the encoding.\n\nIf an error occurs, the stream will be paused, everything unpiped,\nand you are responsible for correctly disposing the stream.\nFor HTTP requests, you may need to finish consuming the stream if\nyou want to keep the socket open for future requests. For streams\nthat use file descriptors, you should `stream.destroy()` or\n`stream.close()` to prevent leaks.\n\n## Errors\n\nThis module creates errors depending on the error condition during reading.\nThe error may be an error from the underlying Node.js implementation, but is\notherwise an error created by this module, which has the following attributes:\n\n  * `limit` - the limit in bytes\n  * `length` and `expected` - the expected length of the stream\n  * `received` - the received bytes\n  * `encoding` - the invalid encoding\n  * `status` and `statusCode` - the corresponding status code for the error\n  * `type` - the error type\n\n### Types\n\nThe errors from this module have a `type` property which allows for the programmatic\ndetermination of the type of error returned.\n\n#### encoding.unsupported\n\nThis error will occur when the `encoding` option is specified, but the value does\nnot map to an encoding supported by the [iconv-lite](https://www.npmjs.org/package/iconv-lite#readme)\nmodule.\n\n#### entity.too.large\n\nThis error will occur when the `limit` option is specified, but the stream has\nan entity that is larger.\n\n#### request.aborted\n\nThis error will occur when the request stream is aborted by the client before\nreading the body has finished.\n\n#### request.size.invalid\n\nThis error will occur when the `length` option is specified, but the stream has\nemitted more bytes.\n\n#### stream.encoding.set\n\nThis error will occur when the given stream has an encoding set on it, making it\na decoded stream. The stream should not have an encoding set and is expected to\nemit `Buffer` objects.\n\n#### stream.not.readable\n\nThis error will occur when the given stream is not readable.\n\n## Examples\n\n### Simple Express example\n\n```js\nvar contentType = require('content-type')\nvar express = require('express')\nvar getRawBody = require('raw-body')\n\nvar app = express()\n\napp.use(function (req, res, next) {\n  getRawBody(req, {\n    length: req.headers['content-length'],\n    limit: '1mb',\n    encoding: contentType.parse(req).parameters.charset\n  }, function (err, string) {\n    if (err) return next(err)\n    req.text = string\n    next()\n  })\n})\n\n// now access req.text\n```\n\n### Simple Koa example\n\n```js\nvar contentType = require('content-type')\nvar getRawBody = require('raw-body')\nvar koa = require('koa')\n\nvar app = koa()\n\napp.use(function * (next) {\n  this.text = yield getRawBody(this.req, {\n    length: this.req.headers['content-length'],\n    limit: '1mb',\n    encoding: contentType.parse(this.req).parameters.charset\n  })\n  yield next\n})\n\n// now access this.text\n```\n\n### Using as a promise\n\nTo use this library as a promise, simply omit the `callback` and a promise is\nreturned, provided that a global `Promise` is defined.\n\n```js\nvar getRawBody = require('raw-body')\nvar http = require('http')\n\nvar server = http.createServer(function (req, res) {\n  getRawBody(req)\n    .then(function (buf) {\n      res.statusCode = 200\n      res.end(buf.length + ' bytes submitted')\n    })\n    .catch(function (err) {\n      res.statusCode = 500\n      res.end(err.message)\n    })\n})\n\nserver.listen(3000)\n```\n\n### Using with TypeScript\n\n```ts\nimport * as getRawBody from 'raw-body';\nimport * as http from 'http';\n\nconst server = http.createServer((req, res) => {\n  getRawBody(req)\n  .then((buf) => {\n    res.statusCode = 200;\n    res.end(buf.length + ' bytes submitted');\n  })\n  .catch((err) => {\n    res.statusCode = err.statusCode;\n    res.end(err.message);\n  });\n});\n\nserver.listen(3000);\n```\n\n## License\n\n[MIT](LICENSE)\n\n[npm-image]: https://img.shields.io/npm/v/raw-body.svg\n[npm-url]: https://npmjs.org/package/raw-body\n[node-version-image]: https://img.shields.io/node/v/raw-body.svg\n[node-version-url]: https://nodejs.org/en/download/\n[coveralls-image]: https://img.shields.io/coveralls/stream-utils/raw-body/master.svg\n[coveralls-url]: https://coveralls.io/r/stream-utils/raw-body?branch=master\n[downloads-image]: https://img.shields.io/npm/dm/raw-body.svg\n[downloads-url]: https://npmjs.org/package/raw-body\n[github-actions-ci-image]: https://img.shields.io/github/workflow/status/stream-utils/raw-body/ci/master?label=ci\n[github-actions-ci-url]: https://github.com/jshttp/stream-utils/raw-body?query=workflow%3Aci\n/HISTORY.md\u0017J2.5.1 / 2022-02-28\n==================\n\n  * Fix error on early async hooks implementations\n\n2.5.0 / 2022-02-21\n==================\n\n  * Prevent loss of async hooks context\n  * Prevent hanging when stream is not readable\n  * deps: http-errors@2.0.0\n    - deps: depd@2.0.0\n    - deps: statuses@2.0.1\n\n2.4.3 / 2022-02-14\n==================\n\n  * deps: bytes@3.1.2\n\n2.4.2 / 2021-11-16\n==================\n\n  * deps: bytes@3.1.1\n  * deps: http-errors@1.8.1\n    - deps: setprototypeof@1.2.0\n    - deps: toidentifier@1.0.1\n\n2.4.1 / 2019-06-25\n==================\n\n  * deps: http-errors@1.7.3\n    - deps: inherits@2.0.4\n\n2.4.0 / 2019-04-17\n==================\n\n  * deps: bytes@3.1.0\n    - Add petabyte (`pb`) support\n  * deps: http-errors@1.7.2\n    - Set constructor name when possible\n    - deps: setprototypeof@1.1.1\n    - deps: statuses@'>= 1.5.0 < 2'\n  * deps: iconv-lite@0.4.24\n    - Added encoding MIK\n\n2.3.3 / 2018-05-08\n==================\n\n  * deps: http-errors@1.6.3\n    - deps: depd@~1.1.2\n    - deps: setprototypeof@1.1.0\n    - deps: statuses@'>= 1.3.1 < 2'\n  * deps: iconv-lite@0.4.23\n    - Fix loading encoding with year appended\n    - Fix deprecation warnings on Node.js 10+\n\n2.3.2 / 2017-09-09\n==================\n\n  * deps: iconv-lite@0.4.19\n    - Fix ISO-8859-1 regression\n    - Update Windows-1255\n\n2.3.1 / 2017-09-07\n==================\n\n  * deps: bytes@3.0.0\n  * deps: http-errors@1.6.2\n    - deps: depd@1.1.1\n  * perf: skip buffer decoding on overage chunk\n\n2.3.0 / 2017-08-04\n==================\n\n  * Add TypeScript definitions\n  * Use `http-errors` for standard emitted errors\n  * deps: bytes@2.5.0\n  * deps: iconv-lite@0.4.18\n    - Add support for React Native\n    - Add a warning if not loaded as utf-8\n    - Fix CESU-8 decoding in Node.js 8\n    - Improve speed of ISO-8859-1 encoding\n\n2.2.0 / 2017-01-02\n==================\n\n  * deps: iconv-lite@0.4.15\n    - Added encoding MS-31J\n    - Added encoding MS-932\n    - Added encoding MS-936\n    - Added encoding MS-949\n    - Added encoding MS-950\n    - Fix GBK/GB18030 handling of Euro character\n\n2.1.7 / 2016-06-19\n==================\n\n  * deps: bytes@2.4.0\n  * perf: remove double-cleanup on happy path\n\n2.1.6 / 2016-03-07\n==================\n\n  * deps: bytes@2.3.0\n    - Drop partial bytes on all parsed units\n    - Fix parsing byte string that looks like hex\n\n2.1.5 / 2015-11-30\n==================\n\n  * deps: bytes@2.2.0\n  * deps: iconv-lite@0.4.13\n\n2.1.4 / 2015-09-27\n==================\n\n  * Fix masking critical errors from `iconv-lite`\n  * deps: iconv-lite@0.4.12\n    - Fix CESU-8 decoding in Node.js 4.x\n\n2.1.3 / 2015-09-12\n==================\n\n  * Fix sync callback when attaching data listener causes sync read\n    - Node.js 0.10 compatibility issue\n\n2.1.2 / 2015-07-05\n==================\n\n  * Fix error stack traces to skip `makeError`\n  * deps: iconv-lite@0.4.11\n    - Add encoding CESU-8\n\n2.1.1 / 2015-06-14\n==================\n\n  * Use `unpipe` module for unpiping requests\n\n2.1.0 / 2015-05-28\n==================\n\n  * deps: iconv-lite@0.4.10\n    - Improved UTF-16 endianness detection\n    - Leading BOM is now removed when decoding\n    - The encoding UTF-16 without BOM now defaults to UTF-16LE when detection fails\n\n2.0.2 / 2015-05-21\n==================\n\n  * deps: bytes@2.1.0\n    - Slight optimizations\n\n2.0.1 / 2015-05-10\n==================\n\n  * Fix a false-positive when unpiping in Node.js 0.8\n\n2.0.0 / 2015-05-08\n==================\n\n  * Return a promise without callback instead of thunk\n  * deps: bytes@2.0.1\n    - units no longer case sensitive when parsing\n\n1.3.4 / 2015-04-15\n==================\n\n  * Fix hanging callback if request aborts during read\n  * deps: iconv-lite@0.4.8\n    - Add encoding alias UNICODE-1-1-UTF-7\n\n1.3.3 / 2015-02-08\n==================\n\n  * deps: iconv-lite@0.4.7\n    - Gracefully support enumerables on `Object.prototype`\n\n1.3.2 / 2015-01-20\n==================\n\n  * deps: iconv-lite@0.4.6\n    - Fix rare aliases of single-byte encodings\n\n1.3.1 / 2014-11-21\n==================\n\n  * deps: iconv-lite@0.4.5\n    - Fix Windows-31J and X-SJIS encoding support\n\n1.3.0 / 2014-07-20\n==================\n\n  * Fully unpipe the stream on error\n    - Fixes `Cannot switch to old mode now` error on Node.js 0.10+\n\n1.2.3 / 2014-07-20\n==================\n\n  * deps: iconv-lite@0.4.4\n    - Added encoding UTF-7\n\n1.2.2 / 2014-06-19\n==================\n\n  * Send invalid encoding error to callback\n\n1.2.1 / 2014-06-15\n==================\n\n  * deps: iconv-lite@0.4.3\n    - Added encodings UTF-16BE and UTF-16 with BOM\n\n1.2.0 / 2014-06-13\n==================\n\n  * Passing string as `options` interpreted as encoding\n  * Support all encodings from `iconv-lite`\n\n1.1.7 / 2014-06-12\n==================\n\n  * use `string_decoder` module from npm\n\n1.1.6 / 2014-05-27\n==================\n\n  * check encoding for old streams1\n  * support node.js < 0.10.6\n\n1.1.5 / 2014-05-14\n==================\n\n  * bump bytes\n\n1.1.4 / 2014-04-19\n==================\n\n  * allow true as an option\n  * bump bytes\n\n1.1.3 / 2014-03-02\n==================\n\n  * fix case when length=null\n\n1.1.2 / 2013-12-01\n==================\n\n  * be less strict on state.encoding check\n\n1.1.1 / 2013-11-27\n==================\n\n  * add engines\n\n1.1.0 / 2013-11-27\n==================\n\n  * add err.statusCode and err.type\n  * allow for encoding option to be true\n  * pause the stream instead of dumping on error\n  * throw if the stream's encoding is set\n\n1.0.1 / 2013-11-19\n==================\n\n  * dont support streams1, throw if dev set encoding\n\n1.0.0 / 2013-11-17\n==================\n\n  * rename `expected` option to `length`\n\n0.2.0 / 2013-11-15\n==================\n\n  * republish\n\n0.1.1 / 2013-11-15\n==================\n\n  * use bytes\n\n0.1.0 / 2013-11-11\n==================\n\n  * generator support\n\n0.0.3 / 2013-10-10\n==================\n\n  * update repo\n\n0.0.2 / 2013-09-14\n==================\n\n  * dump stream on bad headers\n  * listen to events after defining received and buffers\n\n0.0.1 / 2013-09-14\n==================\n\n  * Initial release\n/SECURITY.md\u0004# Security Policies and Procedures\n\n## Reporting a Bug\n\nThe `raw-body` team and community take all security bugs seriously. Thank you\nfor improving the security of Express. We appreciate your efforts and\nresponsible disclosure and will make every effort to acknowledge your\ncontributions.\n\nReport security bugs by emailing the current owners of `raw-body`. This information\ncan be found in the npm registry using the command `npm owner ls raw-body`.\nIf unsure or unable to get the information from the above, open an issue\nin the [project issue tracker](https://github.com/stream-utils/raw-body/issues)\nasking for the current contact information.\n\nTo ensure the timely response to your report, please ensure that the entirety\nof the report is contained within the email body and not solely behind a web\nlink or an attachment.\n\nAt least one owner will acknowledge your email within 48 hours, and will send a\nmore detailed response within 48 hours indicating the next steps in handling\nyour report. After the initial reply to your report, the owners will\nendeavor to keep you informed of the progress towards a fix and full\nannouncement, and may ask for additional information or guidance.\n/index.js\u001a/*!\n * raw-body\n * Copyright(c) 2013-2014 Jonathan Ong\n * Copyright(c) 2014-2022 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar asyncHooks = tryRequireAsyncHooks()\nvar bytes = require('bytes')\nvar createError = require('http-errors')\nvar iconv = require('iconv-lite')\nvar unpipe = require('unpipe')\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = getRawBody\n\n/**\n * Module variables.\n * @private\n */\n\nvar ICONV_ENCODING_MESSAGE_REGEXP = /^Encoding not recognized: /\n\n/**\n * Get the decoder for a given encoding.\n *\n * @param {string} encoding\n * @private\n */\n\nfunction getDecoder (encoding) {\n  if (!encoding) return null\n\n  try {\n    return iconv.getDecoder(encoding)\n  } catch (e) {\n    // error getting decoder\n    if (!ICONV_ENCODING_MESSAGE_REGEXP.test(e.message)) throw e\n\n    // the encoding was not found\n    throw createError(415, 'specified encoding unsupported', {\n      encoding: encoding,\n      type: 'encoding.unsupported'\n    })\n  }\n}\n\n/**\n * Get the raw body of a stream (typically HTTP).\n *\n * @param {object} stream\n * @param {object|string|function} [options]\n * @param {function} [callback]\n * @public\n */\n\nfunction getRawBody (stream, options, callback) {\n  var done = callback\n  var opts = options || {}\n\n  if (options === true || typeof options === 'string') {\n    // short cut for encoding\n    opts = {\n      encoding: options\n    }\n  }\n\n  if (typeof options === 'function') {\n    done = options\n    opts = {}\n  }\n\n  // validate callback is a function, if provided\n  if (done !== undefined && typeof done !== 'function') {\n    throw new TypeError('argument callback must be a function')\n  }\n\n  // require the callback without promises\n  if (!done && !global.Promise) {\n    throw new TypeError('argument callback is required')\n  }\n\n  // get encoding\n  var encoding = opts.encoding !== true\n    ? opts.encoding\n    : 'utf-8'\n\n  // convert the limit to an integer\n  var limit = bytes.parse(opts.limit)\n\n  // convert the expected length to an integer\n  var length = opts.length != null && !isNaN(opts.length)\n    ? parseInt(opts.length, 10)\n    : null\n\n  if (done) {\n    // classic callback style\n    return readStream(stream, encoding, length, limit, wrap(done))\n  }\n\n  return new Promise(function executor (resolve, reject) {\n    readStream(stream, encoding, length, limit, function onRead (err, buf) {\n      if (err) return reject(err)\n      resolve(buf)\n    })\n  })\n}\n\n/**\n * Halt a stream.\n *\n * @param {Object} stream\n * @private\n */\n\nfunction halt (stream) {\n  // unpipe everything from the stream\n  unpipe(stream)\n\n  // pause stream\n  if (typeof stream.pause === 'function') {\n    stream.pause()\n  }\n}\n\n/**\n * Read the data from the stream.\n *\n * @param {object} stream\n * @param {string} encoding\n * @param {number} length\n * @param {number} limit\n * @param {function} callback\n * @public\n */\n\nfunction readStream (stream, encoding, length, limit, callback) {\n  var complete = false\n  var sync = true\n\n  // check the length and limit options.\n  // note: we intentionally leave the stream paused,\n  // so users should handle the stream themselves.\n  if (limit !== null && length !== null && length > limit) {\n    return done(createError(413, 'request entity too large', {\n      expected: length,\n      length: length,\n      limit: limit,\n      type: 'entity.too.large'\n    }))\n  }\n\n  // streams1: assert request encoding is buffer.\n  // streams2+: assert the stream encoding is buffer.\n  //   stream._decoder: streams1\n  //   state.encoding: streams2\n  //   state.decoder: streams2, specifically < 0.10.6\n  var state = stream._readableState\n  if (stream._decoder || (state && (state.encoding || state.decoder))) {\n    // developer error\n    return done(createError(500, 'stream encoding should not be set', {\n      type: 'stream.encoding.set'\n    }))\n  }\n\n  if (typeof stream.readable !== 'undefined' && !stream.readable) {\n    return done(createError(500, 'stream is not readable', {\n      type: 'stream.not.readable'\n    }))\n  }\n\n  var received = 0\n  var decoder\n\n  try {\n    decoder = getDecoder(encoding)\n  } catch (err) {\n    return done(err)\n  }\n\n  var buffer = decoder\n    ? ''\n    : []\n\n  // attach listeners\n  stream.on('aborted', onAborted)\n  stream.on('close', cleanup)\n  stream.on('data', onData)\n  stream.on('end', onEnd)\n  stream.on('error', onEnd)\n\n  // mark sync section complete\n  sync = false\n\n  function done () {\n    var args = new Array(arguments.length)\n\n    // copy arguments\n    for (var i = 0; i < args.length; i++) {\n      args[i] = arguments[i]\n    }\n\n    // mark complete\n    complete = true\n\n    if (sync) {\n      process.nextTick(invokeCallback)\n    } else {\n      invokeCallback()\n    }\n\n    function invokeCallback () {\n      cleanup()\n\n      if (args[0]) {\n        // halt the stream on error\n        halt(stream)\n      }\n\n      callback.apply(null, args)\n    }\n  }\n\n  function onAborted () {\n    if (complete) return\n\n    done(createError(400, 'request aborted', {\n      code: 'ECONNABORTED',\n      expected: length,\n      length: length,\n      received: received,\n      type: 'request.aborted'\n    }))\n  }\n\n  function onData (chunk) {\n    if (complete) return\n\n    received += chunk.length\n\n    if (limit !== null && received > limit) {\n      done(createError(413, 'request entity too large', {\n        limit: limit,\n        received: received,\n        type: 'entity.too.large'\n      }))\n    } else if (decoder) {\n      buffer += decoder.write(chunk)\n    } else {\n      buffer.push(chunk)\n    }\n  }\n\n  function onEnd (err) {\n    if (complete) return\n    if (err) return done(err)\n\n    if (length !== null && received !== length) {\n      done(createError(400, 'request size did not match content length', {\n        expected: length,\n        length: length,\n        received: received,\n        type: 'request.size.invalid'\n      }))\n    } else {\n      var string = decoder\n        ? buffer + (decoder.end() || '')\n        : Buffer.concat(buffer)\n      done(null, string)\n    }\n  }\n\n  function cleanup () {\n    buffer = null\n\n    stream.removeListener('aborted', onAborted)\n    stream.removeListener('data', onData)\n    stream.removeListener('end', onEnd)\n    stream.removeListener('error', onEnd)\n    stream.removeListener('close', cleanup)\n  }\n}\n\n/**\n * Try to require async_hooks\n * @private\n */\n\nfunction tryRequireAsyncHooks () {\n  try {\n    return require('async_hooks')\n  } catch (e) {\n    return {}\n  }\n}\n\n/**\n * Wrap function with async resource, if possible.\n * AsyncResource.bind static method backported.\n * @private\n */\n\nfunction wrap (fn) {\n  var res\n\n  // create anonymous resource\n  if (asyncHooks.AsyncResource) {\n    res = new asyncHooks.AsyncResource(fn.name || 'bound-anonymous-fn')\n  }\n\n  // incompatible node.js\n  if (!res || !res.runInAsyncScope) {\n    return fn\n  }\n\n  // return bound function\n  return res.runInAsyncScope.bind(res, fn, null)\n}\n/package.json\u0005,{\n  \"name\": \"raw-body\",\n  \"description\": \"Get and validate the raw body of a readable stream.\",\n  \"version\": \"2.5.1\",\n  \"author\": \"Jonathan Ong <me@jongleberry.com> (http://jongleberry.com)\",\n  \"contributors\": [\n    \"Douglas Christopher Wilson <doug@somethingdoug.com>\",\n    \"Raynos <raynos2@gmail.com>\"\n  ],\n  \"license\": \"MIT\",\n  \"repository\": \"stream-utils/raw-body\",\n  \"dependencies\": {\n    \"bytes\": \"3.1.2\",\n    \"http-errors\": \"2.0.0\",\n    \"iconv-lite\": \"0.4.24\",\n    \"unpipe\": \"1.0.0\"\n  },\n  \"devDependencies\": {\n    \"bluebird\": \"3.7.2\",\n    \"eslint\": \"7.32.0\",\n    \"eslint-config-standard\": \"14.1.1\",\n    \"eslint-plugin-import\": \"2.25.4\",\n    \"eslint-plugin-markdown\": \"2.2.1\",\n    \"eslint-plugin-node\": \"11.1.0\",\n    \"eslint-plugin-promise\": \"5.2.0\",\n    \"eslint-plugin-standard\": \"4.1.0\",\n    \"mocha\": \"9.2.1\",\n    \"nyc\": \"15.1.0\",\n    \"readable-stream\": \"2.3.7\",\n    \"safe-buffer\": \"5.2.1\"\n  },\n  \"engines\": {\n    \"node\": \">= 0.8\"\n  },\n  \"files\": [\n    \"HISTORY.md\",\n    \"LICENSE\",\n    \"README.md\",\n    \"SECURITY.md\",\n    \"index.d.ts\",\n    \"index.js\"\n  ],\n  \"scripts\": {\n    \"lint\": \"eslint .\",\n    \"test\": \"mocha --trace-deprecation --reporter spec --bail --check-leaks test/\",\n    \"test-ci\": \"nyc --reporter=lcovonly --reporter=text npm test\",\n    \"test-cov\": \"nyc --reporter=html --reporter=text npm test\"\n  }\n}\n/LICENSE\u0004The MIT License (MIT)\n\nCopyright (c) 2013-2014 Jonathan Ong <me@jongleberry.com>\nCopyright (c) 2014-2022 Douglas Christopher Wilson <doug@somethingdoug.com>\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/cmF3LWJvZHlAMi41LjI=",
    "content": "/README.md\u0019# raw-body\n\n[![NPM Version][npm-image]][npm-url]\n[![NPM Downloads][downloads-image]][downloads-url]\n[![Node.js Version][node-version-image]][node-version-url]\n[![Build status][github-actions-ci-image]][github-actions-ci-url]\n[![Test coverage][coveralls-image]][coveralls-url]\n\nGets the entire buffer of a stream either as a `Buffer` or a string.\nValidates the stream's length against an expected length and maximum limit.\nIdeal for parsing request bodies.\n\n## Install\n\nThis is a [Node.js](https://nodejs.org/en/) module available through the\n[npm registry](https://www.npmjs.com/). Installation is done using the\n[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally):\n\n```sh\n$ npm install raw-body\n```\n\n### TypeScript\n\nThis module includes a [TypeScript](https://www.typescriptlang.org/)\ndeclaration file to enable auto complete in compatible editors and type\ninformation for TypeScript projects. This module depends on the Node.js\ntypes, so install `@types/node`:\n\n```sh\n$ npm install @types/node\n```\n\n## API\n\n```js\nvar getRawBody = require('raw-body')\n```\n\n### getRawBody(stream, [options], [callback])\n\n**Returns a promise if no callback specified and global `Promise` exists.**\n\nOptions:\n\n- `length` - The length of the stream.\n  If the contents of the stream do not add up to this length,\n  an `400` error code is returned.\n- `limit` - The byte limit of the body.\n  This is the number of bytes or any string format supported by\n  [bytes](https://www.npmjs.com/package/bytes),\n  for example `1000`, `'500kb'` or `'3mb'`.\n  If the body ends up being larger than this limit,\n  a `413` error code is returned.\n- `encoding` - The encoding to use to decode the body into a string.\n  By default, a `Buffer` instance will be returned when no encoding is specified.\n  Most likely, you want `utf-8`, so setting `encoding` to `true` will decode as `utf-8`.\n  You can use any type of encoding supported by [iconv-lite](https://www.npmjs.org/package/iconv-lite#readme).\n\nYou can also pass a string in place of options to just specify the encoding.\n\nIf an error occurs, the stream will be paused, everything unpiped,\nand you are responsible for correctly disposing the stream.\nFor HTTP requests, you may need to finish consuming the stream if\nyou want to keep the socket open for future requests. For streams\nthat use file descriptors, you should `stream.destroy()` or\n`stream.close()` to prevent leaks.\n\n## Errors\n\nThis module creates errors depending on the error condition during reading.\nThe error may be an error from the underlying Node.js implementation, but is\notherwise an error created by this module, which has the following attributes:\n\n  * `limit` - the limit in bytes\n  * `length` and `expected` - the expected length of the stream\n  * `received` - the received bytes\n  * `encoding` - the invalid encoding\n  * `status` and `statusCode` - the corresponding status code for the error\n  * `type` - the error type\n\n### Types\n\nThe errors from this module have a `type` property which allows for the programmatic\ndetermination of the type of error returned.\n\n#### encoding.unsupported\n\nThis error will occur when the `encoding` option is specified, but the value does\nnot map to an encoding supported by the [iconv-lite](https://www.npmjs.org/package/iconv-lite#readme)\nmodule.\n\n#### entity.too.large\n\nThis error will occur when the `limit` option is specified, but the stream has\nan entity that is larger.\n\n#### request.aborted\n\nThis error will occur when the request stream is aborted by the client before\nreading the body has finished.\n\n#### request.size.invalid\n\nThis error will occur when the `length` option is specified, but the stream has\nemitted more bytes.\n\n#### stream.encoding.set\n\nThis error will occur when the given stream has an encoding set on it, making it\na decoded stream. The stream should not have an encoding set and is expected to\nemit `Buffer` objects.\n\n#### stream.not.readable\n\nThis error will occur when the given stream is not readable.\n\n## Examples\n\n### Simple Express example\n\n```js\nvar contentType = require('content-type')\nvar express = require('express')\nvar getRawBody = require('raw-body')\n\nvar app = express()\n\napp.use(function (req, res, next) {\n  getRawBody(req, {\n    length: req.headers['content-length'],\n    limit: '1mb',\n    encoding: contentType.parse(req).parameters.charset\n  }, function (err, string) {\n    if (err) return next(err)\n    req.text = string\n    next()\n  })\n})\n\n// now access req.text\n```\n\n### Simple Koa example\n\n```js\nvar contentType = require('content-type')\nvar getRawBody = require('raw-body')\nvar koa = require('koa')\n\nvar app = koa()\n\napp.use(function * (next) {\n  this.text = yield getRawBody(this.req, {\n    length: this.req.headers['content-length'],\n    limit: '1mb',\n    encoding: contentType.parse(this.req).parameters.charset\n  })\n  yield next\n})\n\n// now access this.text\n```\n\n### Using as a promise\n\nTo use this library as a promise, simply omit the `callback` and a promise is\nreturned, provided that a global `Promise` is defined.\n\n```js\nvar getRawBody = require('raw-body')\nvar http = require('http')\n\nvar server = http.createServer(function (req, res) {\n  getRawBody(req)\n    .then(function (buf) {\n      res.statusCode = 200\n      res.end(buf.length + ' bytes submitted')\n    })\n    .catch(function (err) {\n      res.statusCode = 500\n      res.end(err.message)\n    })\n})\n\nserver.listen(3000)\n```\n\n### Using with TypeScript\n\n```ts\nimport * as getRawBody from 'raw-body';\nimport * as http from 'http';\n\nconst server = http.createServer((req, res) => {\n  getRawBody(req)\n  .then((buf) => {\n    res.statusCode = 200;\n    res.end(buf.length + ' bytes submitted');\n  })\n  .catch((err) => {\n    res.statusCode = err.statusCode;\n    res.end(err.message);\n  });\n});\n\nserver.listen(3000);\n```\n\n## License\n\n[MIT](LICENSE)\n\n[npm-image]: https://img.shields.io/npm/v/raw-body.svg\n[npm-url]: https://npmjs.org/package/raw-body\n[node-version-image]: https://img.shields.io/node/v/raw-body.svg\n[node-version-url]: https://nodejs.org/en/download/\n[coveralls-image]: https://img.shields.io/coveralls/stream-utils/raw-body/master.svg\n[coveralls-url]: https://coveralls.io/r/stream-utils/raw-body?branch=master\n[downloads-image]: https://img.shields.io/npm/dm/raw-body.svg\n[downloads-url]: https://npmjs.org/package/raw-body\n[github-actions-ci-image]: https://img.shields.io/github/actions/workflow/status/stream-utils/raw-body/ci.yml?branch=master&label=ci\n[github-actions-ci-url]: https://github.com/jshttp/stream-utils/raw-body?query=workflow%3Aci\n/index.js\u001c\u0003/*!\n * raw-body\n * Copyright(c) 2013-2014 Jonathan Ong\n * Copyright(c) 2014-2022 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar asyncHooks = tryRequireAsyncHooks()\nvar bytes = require('bytes')\nvar createError = require('http-errors')\nvar iconv = require('iconv-lite')\nvar unpipe = require('unpipe')\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = getRawBody\n\n/**\n * Module variables.\n * @private\n */\n\nvar ICONV_ENCODING_MESSAGE_REGEXP = /^Encoding not recognized: /\n\n/**\n * Get the decoder for a given encoding.\n *\n * @param {string} encoding\n * @private\n */\n\nfunction getDecoder (encoding) {\n  if (!encoding) return null\n\n  try {\n    return iconv.getDecoder(encoding)\n  } catch (e) {\n    // error getting decoder\n    if (!ICONV_ENCODING_MESSAGE_REGEXP.test(e.message)) throw e\n\n    // the encoding was not found\n    throw createError(415, 'specified encoding unsupported', {\n      encoding: encoding,\n      type: 'encoding.unsupported'\n    })\n  }\n}\n\n/**\n * Get the raw body of a stream (typically HTTP).\n *\n * @param {object} stream\n * @param {object|string|function} [options]\n * @param {function} [callback]\n * @public\n */\n\nfunction getRawBody (stream, options, callback) {\n  var done = callback\n  var opts = options || {}\n\n  // light validation\n  if (stream === undefined) {\n    throw new TypeError('argument stream is required')\n  } else if (typeof stream !== 'object' || stream === null || typeof stream.on !== 'function') {\n    throw new TypeError('argument stream must be a stream')\n  }\n\n  if (options === true || typeof options === 'string') {\n    // short cut for encoding\n    opts = {\n      encoding: options\n    }\n  }\n\n  if (typeof options === 'function') {\n    done = options\n    opts = {}\n  }\n\n  // validate callback is a function, if provided\n  if (done !== undefined && typeof done !== 'function') {\n    throw new TypeError('argument callback must be a function')\n  }\n\n  // require the callback without promises\n  if (!done && !global.Promise) {\n    throw new TypeError('argument callback is required')\n  }\n\n  // get encoding\n  var encoding = opts.encoding !== true\n    ? opts.encoding\n    : 'utf-8'\n\n  // convert the limit to an integer\n  var limit = bytes.parse(opts.limit)\n\n  // convert the expected length to an integer\n  var length = opts.length != null && !isNaN(opts.length)\n    ? parseInt(opts.length, 10)\n    : null\n\n  if (done) {\n    // classic callback style\n    return readStream(stream, encoding, length, limit, wrap(done))\n  }\n\n  return new Promise(function executor (resolve, reject) {\n    readStream(stream, encoding, length, limit, function onRead (err, buf) {\n      if (err) return reject(err)\n      resolve(buf)\n    })\n  })\n}\n\n/**\n * Halt a stream.\n *\n * @param {Object} stream\n * @private\n */\n\nfunction halt (stream) {\n  // unpipe everything from the stream\n  unpipe(stream)\n\n  // pause stream\n  if (typeof stream.pause === 'function') {\n    stream.pause()\n  }\n}\n\n/**\n * Read the data from the stream.\n *\n * @param {object} stream\n * @param {string} encoding\n * @param {number} length\n * @param {number} limit\n * @param {function} callback\n * @public\n */\n\nfunction readStream (stream, encoding, length, limit, callback) {\n  var complete = false\n  var sync = true\n\n  // check the length and limit options.\n  // note: we intentionally leave the stream paused,\n  // so users should handle the stream themselves.\n  if (limit !== null && length !== null && length > limit) {\n    return done(createError(413, 'request entity too large', {\n      expected: length,\n      length: length,\n      limit: limit,\n      type: 'entity.too.large'\n    }))\n  }\n\n  // streams1: assert request encoding is buffer.\n  // streams2+: assert the stream encoding is buffer.\n  //   stream._decoder: streams1\n  //   state.encoding: streams2\n  //   state.decoder: streams2, specifically < 0.10.6\n  var state = stream._readableState\n  if (stream._decoder || (state && (state.encoding || state.decoder))) {\n    // developer error\n    return done(createError(500, 'stream encoding should not be set', {\n      type: 'stream.encoding.set'\n    }))\n  }\n\n  if (typeof stream.readable !== 'undefined' && !stream.readable) {\n    return done(createError(500, 'stream is not readable', {\n      type: 'stream.not.readable'\n    }))\n  }\n\n  var received = 0\n  var decoder\n\n  try {\n    decoder = getDecoder(encoding)\n  } catch (err) {\n    return done(err)\n  }\n\n  var buffer = decoder\n    ? ''\n    : []\n\n  // attach listeners\n  stream.on('aborted', onAborted)\n  stream.on('close', cleanup)\n  stream.on('data', onData)\n  stream.on('end', onEnd)\n  stream.on('error', onEnd)\n\n  // mark sync section complete\n  sync = false\n\n  function done () {\n    var args = new Array(arguments.length)\n\n    // copy arguments\n    for (var i = 0; i < args.length; i++) {\n      args[i] = arguments[i]\n    }\n\n    // mark complete\n    complete = true\n\n    if (sync) {\n      process.nextTick(invokeCallback)\n    } else {\n      invokeCallback()\n    }\n\n    function invokeCallback () {\n      cleanup()\n\n      if (args[0]) {\n        // halt the stream on error\n        halt(stream)\n      }\n\n      callback.apply(null, args)\n    }\n  }\n\n  function onAborted () {\n    if (complete) return\n\n    done(createError(400, 'request aborted', {\n      code: 'ECONNABORTED',\n      expected: length,\n      length: length,\n      received: received,\n      type: 'request.aborted'\n    }))\n  }\n\n  function onData (chunk) {\n    if (complete) return\n\n    received += chunk.length\n\n    if (limit !== null && received > limit) {\n      done(createError(413, 'request entity too large', {\n        limit: limit,\n        received: received,\n        type: 'entity.too.large'\n      }))\n    } else if (decoder) {\n      buffer += decoder.write(chunk)\n    } else {\n      buffer.push(chunk)\n    }\n  }\n\n  function onEnd (err) {\n    if (complete) return\n    if (err) return done(err)\n\n    if (length !== null && received !== length) {\n      done(createError(400, 'request size did not match content length', {\n        expected: length,\n        length: length,\n        received: received,\n        type: 'request.size.invalid'\n      }))\n    } else {\n      var string = decoder\n        ? buffer + (decoder.end() || '')\n        : Buffer.concat(buffer)\n      done(null, string)\n    }\n  }\n\n  function cleanup () {\n    buffer = null\n\n    stream.removeListener('aborted', onAborted)\n    stream.removeListener('data', onData)\n    stream.removeListener('end', onEnd)\n    stream.removeListener('error', onEnd)\n    stream.removeListener('close', cleanup)\n  }\n}\n\n/**\n * Try to require async_hooks\n * @private\n */\n\nfunction tryRequireAsyncHooks () {\n  try {\n    return require('async_hooks')\n  } catch (e) {\n    return {}\n  }\n}\n\n/**\n * Wrap function with async resource, if possible.\n * AsyncResource.bind static method backported.\n * @private\n */\n\nfunction wrap (fn) {\n  var res\n\n  // create anonymous resource\n  if (asyncHooks.AsyncResource) {\n    res = new asyncHooks.AsyncResource(fn.name || 'bound-anonymous-fn')\n  }\n\n  // incompatible node.js\n  if (!res || !res.runInAsyncScope) {\n    return fn\n  }\n\n  // return bound function\n  return res.runInAsyncScope.bind(res, fn, null)\n}\n/LICENSE\u0004The MIT License (MIT)\n\nCopyright (c) 2013-2014 Jonathan Ong <me@jongleberry.com>\nCopyright (c) 2014-2022 Douglas Christopher Wilson <doug@somethingdoug.com>\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n/package.json\u0005-{\n  \"name\": \"raw-body\",\n  \"description\": \"Get and validate the raw body of a readable stream.\",\n  \"version\": \"2.5.2\",\n  \"author\": \"Jonathan Ong <me@jongleberry.com> (http://jongleberry.com)\",\n  \"contributors\": [\n    \"Douglas Christopher Wilson <doug@somethingdoug.com>\",\n    \"Raynos <raynos2@gmail.com>\"\n  ],\n  \"license\": \"MIT\",\n  \"repository\": \"stream-utils/raw-body\",\n  \"dependencies\": {\n    \"bytes\": \"3.1.2\",\n    \"http-errors\": \"2.0.0\",\n    \"iconv-lite\": \"0.4.24\",\n    \"unpipe\": \"1.0.0\"\n  },\n  \"devDependencies\": {\n    \"bluebird\": \"3.7.2\",\n    \"eslint\": \"8.34.0\",\n    \"eslint-config-standard\": \"15.0.1\",\n    \"eslint-plugin-import\": \"2.27.5\",\n    \"eslint-plugin-markdown\": \"3.0.0\",\n    \"eslint-plugin-node\": \"11.1.0\",\n    \"eslint-plugin-promise\": \"6.1.1\",\n    \"eslint-plugin-standard\": \"4.1.0\",\n    \"mocha\": \"10.2.0\",\n    \"nyc\": \"15.1.0\",\n    \"readable-stream\": \"2.3.7\",\n    \"safe-buffer\": \"5.2.1\"\n  },\n  \"engines\": {\n    \"node\": \">= 0.8\"\n  },\n  \"files\": [\n    \"HISTORY.md\",\n    \"LICENSE\",\n    \"README.md\",\n    \"SECURITY.md\",\n    \"index.d.ts\",\n    \"index.js\"\n  ],\n  \"scripts\": {\n    \"lint\": \"eslint .\",\n    \"test\": \"mocha --trace-deprecation --reporter spec --bail --check-leaks test/\",\n    \"test-ci\": \"nyc --reporter=lcovonly --reporter=text npm test\",\n    \"test-cov\": \"nyc --reporter=html --reporter=text npm test\"\n  }\n}\n/HISTORY.md\u00172.5.2 / 2023-02-21\n==================\n\n  * Fix error message for non-stream argument\n\n2.5.1 / 2022-02-28\n==================\n\n  * Fix error on early async hooks implementations\n\n2.5.0 / 2022-02-21\n==================\n\n  * Prevent loss of async hooks context\n  * Prevent hanging when stream is not readable\n  * deps: http-errors@2.0.0\n    - deps: depd@2.0.0\n    - deps: statuses@2.0.1\n\n2.4.3 / 2022-02-14\n==================\n\n  * deps: bytes@3.1.2\n\n2.4.2 / 2021-11-16\n==================\n\n  * deps: bytes@3.1.1\n  * deps: http-errors@1.8.1\n    - deps: setprototypeof@1.2.0\n    - deps: toidentifier@1.0.1\n\n2.4.1 / 2019-06-25\n==================\n\n  * deps: http-errors@1.7.3\n    - deps: inherits@2.0.4\n\n2.4.0 / 2019-04-17\n==================\n\n  * deps: bytes@3.1.0\n    - Add petabyte (`pb`) support\n  * deps: http-errors@1.7.2\n    - Set constructor name when possible\n    - deps: setprototypeof@1.1.1\n    - deps: statuses@'>= 1.5.0 < 2'\n  * deps: iconv-lite@0.4.24\n    - Added encoding MIK\n\n2.3.3 / 2018-05-08\n==================\n\n  * deps: http-errors@1.6.3\n    - deps: depd@~1.1.2\n    - deps: setprototypeof@1.1.0\n    - deps: statuses@'>= 1.3.1 < 2'\n  * deps: iconv-lite@0.4.23\n    - Fix loading encoding with year appended\n    - Fix deprecation warnings on Node.js 10+\n\n2.3.2 / 2017-09-09\n==================\n\n  * deps: iconv-lite@0.4.19\n    - Fix ISO-8859-1 regression\n    - Update Windows-1255\n\n2.3.1 / 2017-09-07\n==================\n\n  * deps: bytes@3.0.0\n  * deps: http-errors@1.6.2\n    - deps: depd@1.1.1\n  * perf: skip buffer decoding on overage chunk\n\n2.3.0 / 2017-08-04\n==================\n\n  * Add TypeScript definitions\n  * Use `http-errors` for standard emitted errors\n  * deps: bytes@2.5.0\n  * deps: iconv-lite@0.4.18\n    - Add support for React Native\n    - Add a warning if not loaded as utf-8\n    - Fix CESU-8 decoding in Node.js 8\n    - Improve speed of ISO-8859-1 encoding\n\n2.2.0 / 2017-01-02\n==================\n\n  * deps: iconv-lite@0.4.15\n    - Added encoding MS-31J\n    - Added encoding MS-932\n    - Added encoding MS-936\n    - Added encoding MS-949\n    - Added encoding MS-950\n    - Fix GBK/GB18030 handling of Euro character\n\n2.1.7 / 2016-06-19\n==================\n\n  * deps: bytes@2.4.0\n  * perf: remove double-cleanup on happy path\n\n2.1.6 / 2016-03-07\n==================\n\n  * deps: bytes@2.3.0\n    - Drop partial bytes on all parsed units\n    - Fix parsing byte string that looks like hex\n\n2.1.5 / 2015-11-30\n==================\n\n  * deps: bytes@2.2.0\n  * deps: iconv-lite@0.4.13\n\n2.1.4 / 2015-09-27\n==================\n\n  * Fix masking critical errors from `iconv-lite`\n  * deps: iconv-lite@0.4.12\n    - Fix CESU-8 decoding in Node.js 4.x\n\n2.1.3 / 2015-09-12\n==================\n\n  * Fix sync callback when attaching data listener causes sync read\n    - Node.js 0.10 compatibility issue\n\n2.1.2 / 2015-07-05\n==================\n\n  * Fix error stack traces to skip `makeError`\n  * deps: iconv-lite@0.4.11\n    - Add encoding CESU-8\n\n2.1.1 / 2015-06-14\n==================\n\n  * Use `unpipe` module for unpiping requests\n\n2.1.0 / 2015-05-28\n==================\n\n  * deps: iconv-lite@0.4.10\n    - Improved UTF-16 endianness detection\n    - Leading BOM is now removed when decoding\n    - The encoding UTF-16 without BOM now defaults to UTF-16LE when detection fails\n\n2.0.2 / 2015-05-21\n==================\n\n  * deps: bytes@2.1.0\n    - Slight optimizations\n\n2.0.1 / 2015-05-10\n==================\n\n  * Fix a false-positive when unpiping in Node.js 0.8\n\n2.0.0 / 2015-05-08\n==================\n\n  * Return a promise without callback instead of thunk\n  * deps: bytes@2.0.1\n    - units no longer case sensitive when parsing\n\n1.3.4 / 2015-04-15\n==================\n\n  * Fix hanging callback if request aborts during read\n  * deps: iconv-lite@0.4.8\n    - Add encoding alias UNICODE-1-1-UTF-7\n\n1.3.3 / 2015-02-08\n==================\n\n  * deps: iconv-lite@0.4.7\n    - Gracefully support enumerables on `Object.prototype`\n\n1.3.2 / 2015-01-20\n==================\n\n  * deps: iconv-lite@0.4.6\n    - Fix rare aliases of single-byte encodings\n\n1.3.1 / 2014-11-21\n==================\n\n  * deps: iconv-lite@0.4.5\n    - Fix Windows-31J and X-SJIS encoding support\n\n1.3.0 / 2014-07-20\n==================\n\n  * Fully unpipe the stream on error\n    - Fixes `Cannot switch to old mode now` error on Node.js 0.10+\n\n1.2.3 / 2014-07-20\n==================\n\n  * deps: iconv-lite@0.4.4\n    - Added encoding UTF-7\n\n1.2.2 / 2014-06-19\n==================\n\n  * Send invalid encoding error to callback\n\n1.2.1 / 2014-06-15\n==================\n\n  * deps: iconv-lite@0.4.3\n    - Added encodings UTF-16BE and UTF-16 with BOM\n\n1.2.0 / 2014-06-13\n==================\n\n  * Passing string as `options` interpreted as encoding\n  * Support all encodings from `iconv-lite`\n\n1.1.7 / 2014-06-12\n==================\n\n  * use `string_decoder` module from npm\n\n1.1.6 / 2014-05-27\n==================\n\n  * check encoding for old streams1\n  * support node.js < 0.10.6\n\n1.1.5 / 2014-05-14\n==================\n\n  * bump bytes\n\n1.1.4 / 2014-04-19\n==================\n\n  * allow true as an option\n  * bump bytes\n\n1.1.3 / 2014-03-02\n==================\n\n  * fix case when length=null\n\n1.1.2 / 2013-12-01\n==================\n\n  * be less strict on state.encoding check\n\n1.1.1 / 2013-11-27\n==================\n\n  * add engines\n\n1.1.0 / 2013-11-27\n==================\n\n  * add err.statusCode and err.type\n  * allow for encoding option to be true\n  * pause the stream instead of dumping on error\n  * throw if the stream's encoding is set\n\n1.0.1 / 2013-11-19\n==================\n\n  * dont support streams1, throw if dev set encoding\n\n1.0.0 / 2013-11-17\n==================\n\n  * rename `expected` option to `length`\n\n0.2.0 / 2013-11-15\n==================\n\n  * republish\n\n0.1.1 / 2013-11-15\n==================\n\n  * use bytes\n\n0.1.0 / 2013-11-11\n==================\n\n  * generator support\n\n0.0.3 / 2013-10-10\n==================\n\n  * update repo\n\n0.0.2 / 2013-09-14\n==================\n\n  * dump stream on bad headers\n  * listen to events after defining received and buffers\n\n0.0.1 / 2013-09-14\n==================\n\n  * Initial release\n/index.d.ts\bimport { Readable } from 'stream';\n\ndeclare namespace getRawBody {\n  export type Encoding = string | true;\n\n  export interface Options {\n    /**\n     * The expected length of the stream.\n     */\n    length?: number | string | null;\n    /**\n     * The byte limit of the body. This is the number of bytes or any string\n     * format supported by `bytes`, for example `1000`, `'500kb'` or `'3mb'`.\n     */\n    limit?: number | string | null;\n    /**\n     * The encoding to use to decode the body into a string. By default, a\n     * `Buffer` instance will be returned when no encoding is specified. Most\n     * likely, you want `utf-8`, so setting encoding to `true` will decode as\n     * `utf-8`. You can use any type of encoding supported by `iconv-lite`.\n     */\n    encoding?: Encoding | null;\n  }\n\n  export interface RawBodyError extends Error {\n    /**\n     * The limit in bytes.\n     */\n    limit?: number;\n    /**\n     * The expected length of the stream.\n     */\n    length?: number;\n    expected?: number;\n    /**\n     * The received bytes.\n     */\n    received?: number;\n    /**\n     * The encoding.\n     */\n    encoding?: string;\n    /**\n     * The corresponding status code for the error.\n     */\n    status: number;\n    statusCode: number;\n    /**\n     * The error type.\n     */\n    type: string;\n  }\n}\n\n/**\n * Gets the entire buffer of a stream either as a `Buffer` or a string.\n * Validates the stream's length against an expected length and maximum\n * limit. Ideal for parsing request bodies.\n */\ndeclare function getRawBody(\n  stream: Readable,\n  callback: (err: getRawBody.RawBodyError, body: Buffer) => void\n): void;\n\ndeclare function getRawBody(\n  stream: Readable,\n  options: (getRawBody.Options & { encoding: getRawBody.Encoding }) | getRawBody.Encoding,\n  callback: (err: getRawBody.RawBodyError, body: string) => void\n): void;\n\ndeclare function getRawBody(\n  stream: Readable,\n  options: getRawBody.Options,\n  callback: (err: getRawBody.RawBodyError, body: Buffer) => void\n): void;\n\ndeclare function getRawBody(\n  stream: Readable,\n  options: (getRawBody.Options & { encoding: getRawBody.Encoding }) | getRawBody.Encoding\n): Promise<string>;\n\ndeclare function getRawBody(\n  stream: Readable,\n  options?: getRawBody.Options\n): Promise<Buffer>;\n\nexport = getRawBody;\n/SECURITY.md\u0004# Security Policies and Procedures\n\n## Reporting a Bug\n\nThe `raw-body` team and community take all security bugs seriously. Thank you\nfor improving the security of Express. We appreciate your efforts and\nresponsible disclosure and will make every effort to acknowledge your\ncontributions.\n\nReport security bugs by emailing the current owners of `raw-body`. This information\ncan be found in the npm registry using the command `npm owner ls raw-body`.\nIf unsure or unable to get the information from the above, open an issue\nin the [project issue tracker](https://github.com/stream-utils/raw-body/issues)\nasking for the current contact information.\n\nTo ensure the timely response to your report, please ensure that the entirety\nof the report is contained within the email body and not solely behind a web\nlink or an attachment.\n\nAt least one owner will acknowledge your email within 48 hours, and will send a\nmore detailed response within 48 hours indicating the next steps in handling\nyour report. After the initial reply to your report, the owners will\nendeavor to keep you informed of the progress towards a fix and full\nannouncement, and may ask for additional information or guidance.\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/cmFuZ2UtcGFyc2VyQDEuMi4x",
    "content": "/package.json\u0004{\n  \"name\": \"range-parser\",\n  \"author\": \"TJ Holowaychuk <tj@vision-media.ca> (http://tjholowaychuk.com)\",\n  \"description\": \"Range header field string parser\",\n  \"version\": \"1.2.1\",\n  \"contributors\": [\n    \"Douglas Christopher Wilson <doug@somethingdoug.com>\",\n    \"James Wyatt Cready <wyatt.cready@lanetix.com>\",\n    \"Jonathan Ong <me@jongleberry.com> (http://jongleberry.com)\"\n  ],\n  \"license\": \"MIT\",\n  \"keywords\": [\n    \"range\",\n    \"parser\",\n    \"http\"\n  ],\n  \"repository\": \"jshttp/range-parser\",\n  \"devDependencies\": {\n    \"deep-equal\": \"1.0.1\",\n    \"eslint\": \"5.16.0\",\n    \"eslint-config-standard\": \"12.0.0\",\n    \"eslint-plugin-markdown\": \"1.0.0\",\n    \"eslint-plugin-import\": \"2.17.2\",\n    \"eslint-plugin-node\": \"8.0.1\",\n    \"eslint-plugin-promise\": \"4.1.1\",\n    \"eslint-plugin-standard\": \"4.0.0\",\n    \"mocha\": \"6.1.4\",\n    \"nyc\": \"14.1.1\"\n  },\n  \"files\": [\n    \"HISTORY.md\",\n    \"LICENSE\",\n    \"index.js\"\n  ],\n  \"engines\": {\n    \"node\": \">= 0.6\"\n  },\n  \"scripts\": {\n    \"lint\": \"eslint --plugin markdown --ext js,md .\",\n    \"test\": \"mocha --reporter spec\",\n    \"test-cov\": \"nyc --reporter=html --reporter=text npm test\",\n    \"test-travis\": \"nyc --reporter=text npm test\"\n  }\n}\n/HISTORY.md\u00031.2.1 / 2019-05-10\n==================\n\n  * Improve error when `str` is not a string\n\n1.2.0 / 2016-06-01\n==================\n\n  * Add `combine` option to combine overlapping ranges\n\n1.1.0 / 2016-05-13\n==================\n\n  * Fix incorrectly returning -1 when there is at least one valid range\n  * perf: remove internal function\n\n1.0.3 / 2015-10-29\n==================\n\n  * perf: enable strict mode\n\n1.0.2 / 2014-09-08\n==================\n\n  * Support Node.js 0.6\n\n1.0.1 / 2014-09-07\n==================\n\n  * Move repository to jshttp\n\n1.0.0 / 2013-12-11\n==================\n\n  * Add repository to package.json\n  * Add MIT license\n\n0.0.4 / 2012-06-17\n==================\n\n  * Change ret -1 for unsatisfiable and -2 when invalid\n\n0.0.3 / 2012-06-17\n==================\n\n  * Fix last-byte-pos default to len - 1\n\n0.0.2 / 2012-06-14\n==================\n\n  * Add `.type`\n\n0.0.1 / 2012-06-11\n==================\n\n  * Initial release\n/README.md\b# range-parser\n\n[![NPM Version][npm-version-image]][npm-url]\n[![NPM Downloads][npm-downloads-image]][npm-url]\n[![Node.js Version][node-image]][node-url]\n[![Build Status][travis-image]][travis-url]\n[![Test Coverage][coveralls-image]][coveralls-url]\n\nRange header field parser.\n\n## Installation\n\nThis is a [Node.js](https://nodejs.org/en/) module available through the\n[npm registry](https://www.npmjs.com/). Installation is done using the\n[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally):\n\n```sh\n$ npm install range-parser\n```\n\n## API\n\n<!-- eslint-disable no-unused-vars -->\n\n```js\nvar parseRange = require('range-parser')\n```\n\n### parseRange(size, header, options)\n\nParse the given `header` string where `size` is the maximum size of the resource.\nAn array of ranges will be returned or negative numbers indicating an error parsing.\n\n  * `-2` signals a malformed header string\n  * `-1` signals an unsatisfiable range\n\n<!-- eslint-disable no-undef -->\n\n```js\n// parse header from request\nvar range = parseRange(size, req.headers.range)\n\n// the type of the range\nif (range.type === 'bytes') {\n  // the ranges\n  range.forEach(function (r) {\n    // do something with r.start and r.end\n  })\n}\n```\n\n#### Options\n\nThese properties are accepted in the options object.\n\n##### combine\n\nSpecifies if overlapping & adjacent ranges should be combined, defaults to `false`.\nWhen `true`, ranges will be combined and returned as if they were specified that\nway in the header.\n\n<!-- eslint-disable no-undef -->\n\n```js\nparseRange(100, 'bytes=50-55,0-10,5-10,56-60', { combine: true })\n// => [\n//      { start: 0,  end: 10 },\n//      { start: 50, end: 60 }\n//    ]\n```\n\n## License\n\n[MIT](LICENSE)\n\n[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/range-parser/master\n[coveralls-url]: https://coveralls.io/r/jshttp/range-parser?branch=master\n[node-image]: https://badgen.net/npm/node/range-parser\n[node-url]: https://nodejs.org/en/download\n[npm-downloads-image]: https://badgen.net/npm/dm/range-parser\n[npm-url]: https://npmjs.org/package/range-parser\n[npm-version-image]: https://badgen.net/npm/v/range-parser\n[travis-image]: https://badgen.net/travis/jshttp/range-parser/master\n[travis-url]: https://travis-ci.org/jshttp/range-parser\n/LICENSE\u0004(The MIT License)\n\nCopyright (c) 2012-2014 TJ Holowaychuk <tj@vision-media.ca>\nCopyright (c) 2015-2016 Douglas Christopher Wilson <doug@somethingdoug.com\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n/index.js\u000bT/*!\n * range-parser\n * Copyright(c) 2012-2014 TJ Holowaychuk\n * Copyright(c) 2015-2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = rangeParser\n\n/**\n * Parse \"Range\" header `str` relative to the given file `size`.\n *\n * @param {Number} size\n * @param {String} str\n * @param {Object} [options]\n * @return {Array}\n * @public\n */\n\nfunction rangeParser (size, str, options) {\n  if (typeof str !== 'string') {\n    throw new TypeError('argument str must be a string')\n  }\n\n  var index = str.indexOf('=')\n\n  if (index === -1) {\n    return -2\n  }\n\n  // split the range string\n  var arr = str.slice(index + 1).split(',')\n  var ranges = []\n\n  // add ranges type\n  ranges.type = str.slice(0, index)\n\n  // parse all ranges\n  for (var i = 0; i < arr.length; i++) {\n    var range = arr[i].split('-')\n    var start = parseInt(range[0], 10)\n    var end = parseInt(range[1], 10)\n\n    // -nnn\n    if (isNaN(start)) {\n      start = size - end\n      end = size - 1\n    // nnn-\n    } else if (isNaN(end)) {\n      end = size - 1\n    }\n\n    // limit last-byte-pos to current length\n    if (end > size - 1) {\n      end = size - 1\n    }\n\n    // invalid or unsatisifiable\n    if (isNaN(start) || isNaN(end) || start > end || start < 0) {\n      continue\n    }\n\n    // add range\n    ranges.push({\n      start: start,\n      end: end\n    })\n  }\n\n  if (ranges.length < 1) {\n    // unsatisifiable\n    return -1\n  }\n\n  return options && options.combine\n    ? combineRanges(ranges)\n    : ranges\n}\n\n/**\n * Combine overlapping & adjacent ranges.\n * @private\n */\n\nfunction combineRanges (ranges) {\n  var ordered = ranges.map(mapWithIndex).sort(sortByRangeStart)\n\n  for (var j = 0, i = 1; i < ordered.length; i++) {\n    var range = ordered[i]\n    var current = ordered[j]\n\n    if (range.start > current.end + 1) {\n      // next range\n      ordered[++j] = range\n    } else if (range.end > current.end) {\n      // extend range\n      current.end = range.end\n      current.index = Math.min(current.index, range.index)\n    }\n  }\n\n  // trim ordered array\n  ordered.length = j + 1\n\n  // generate combined range\n  var combined = ordered.sort(sortByRangeIndex).map(mapWithoutIndex)\n\n  // copy ranges type\n  combined.type = ranges.type\n\n  return combined\n}\n\n/**\n * Map function to add index value to ranges.\n * @private\n */\n\nfunction mapWithIndex (range, index) {\n  return {\n    start: range.start,\n    end: range.end,\n    index: index\n  }\n}\n\n/**\n * Map function to remove index value from ranges.\n * @private\n */\n\nfunction mapWithoutIndex (range) {\n  return {\n    start: range.start,\n    end: range.end\n  }\n}\n\n/**\n * Sort function to sort ranges by index.\n * @private\n */\n\nfunction sortByRangeIndex (a, b) {\n  return a.index - b.index\n}\n\n/**\n * Sort function to sort ranges by start position.\n * @private\n */\n\nfunction sortByRangeStart (a, b) {\n  return a.start - b.start\n}\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/cmV0QDAuMi4y",
    "content": "/lib/sets.js\u0006const types = require('./types');\n\nconst INTS = () => [{ type: types.RANGE , from: 48, to: 57 }];\n\nconst WORDS = () => {\n  return [\n    { type: types.CHAR, value: 95 },\n    { type: types.RANGE, from: 97, to: 122 },\n    { type: types.RANGE, from: 65, to: 90 }\n  ].concat(INTS());\n};\n\nconst WHITESPACE = () => {\n  return [\n    { type: types.CHAR, value: 9 },\n    { type: types.CHAR, value: 10 },\n    { type: types.CHAR, value: 11 },\n    { type: types.CHAR, value: 12 },\n    { type: types.CHAR, value: 13 },\n    { type: types.CHAR, value: 32 },\n    { type: types.CHAR, value: 160 },\n    { type: types.CHAR, value: 5760 },\n    { type: types.RANGE, from: 8192, to: 8202 },\n    { type: types.CHAR, value: 8232 },\n    { type: types.CHAR, value: 8233 },\n    { type: types.CHAR, value: 8239 },\n    { type: types.CHAR, value: 8287 },\n    { type: types.CHAR, value: 12288 },\n    { type: types.CHAR, value: 65279 }\n  ];\n};\n\nconst NOTANYCHAR = () => {\n  return [\n    { type: types.CHAR, value: 10 },\n    { type: types.CHAR, value: 13 },\n    { type: types.CHAR, value: 8232 },\n    { type: types.CHAR, value: 8233 },\n  ];\n};\n\n// Predefined class objects.\nexports.words = () => ({ type: types.SET, set: WORDS(), not: false });\nexports.notWords = () => ({ type: types.SET, set: WORDS(), not: true });\nexports.ints = () => ({ type: types.SET, set: INTS(), not: false });\nexports.notInts = () => ({ type: types.SET, set: INTS(), not: true });\nexports.whitespace = () => ({ type: types.SET, set: WHITESPACE(), not: false });\nexports.notWhitespace = () => ({ type: types.SET, set: WHITESPACE(), not: true });\nexports.anyChar = () => ({ type: types.SET, set: NOTANYCHAR(), not: true });\n/lib/positions.js\u0001)const types = require('./types');\nexports.wordBoundary = () => ({ type: types.POSITION, value: 'b' });\nexports.nonWordBoundary = () => ({ type: types.POSITION, value: 'B' });\nexports.begin = () => ({ type: types.POSITION, value: '^' });\nexports.end = () => ({ type: types.POSITION, value: '$' });\n/lib/util.js\tconst types = require('./types');\nconst sets  = require('./sets');\n\n\nconst CTRL = '@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^ ?';\nconst SLSH = { '0': 0, 't': 9, 'n': 10, 'v': 11, 'f': 12, 'r': 13 };\n\n/**\n * Finds character representations in str and convert all to\n * their respective characters\n *\n * @param {String} str\n * @return {String}\n */\nexports.strToChars = function(str) {\n  /* jshint maxlen: false */\n  var chars_regex = /(\\[\\\\b\\])|(\\\\)?\\\\(?:u([A-F0-9]{4})|x([A-F0-9]{2})|(0?[0-7]{2})|c([@A-Z[\\\\\\]^?])|([0tnvfr]))/g;\n  str = str.replace(chars_regex, function(s, b, lbs, a16, b16, c8, dctrl, eslsh) {\n    if (lbs) {\n      return s;\n    }\n\n    var code = b ? 8 :\n      a16   ? parseInt(a16, 16) :\n      b16   ? parseInt(b16, 16) :\n      c8    ? parseInt(c8,   8) :\n      dctrl ? CTRL.indexOf(dctrl) :\n      SLSH[eslsh];\n\n    var c = String.fromCharCode(code);\n\n    // Escape special regex characters.\n    if (/[[\\]{}^$.|?*+()]/.test(c)) {\n      c = '\\\\' + c;\n    }\n\n    return c;\n  });\n\n  return str;\n};\n\n\n/**\n * turns class into tokens\n * reads str until it encounters a ] not preceeded by a \\\n *\n * @param {String} str\n * @param {String} regexpStr\n * @return {Array.<Array.<Object>, Number>}\n */\nexports.tokenizeClass = (str, regexpStr) => {\n  /* jshint maxlen: false */\n  var tokens = [];\n  var regexp = /\\\\(?:(w)|(d)|(s)|(W)|(D)|(S))|((?:(?:\\\\)(.)|([^\\]\\\\]))-(?:\\\\)?([^\\]]))|(\\])|(?:\\\\)?([^])/g;\n  var rs, c;\n\n\n  while ((rs = regexp.exec(str)) != null) {\n    if (rs[1]) {\n      tokens.push(sets.words());\n\n    } else if (rs[2]) {\n      tokens.push(sets.ints());\n\n    } else if (rs[3]) {\n      tokens.push(sets.whitespace());\n\n    } else if (rs[4]) {\n      tokens.push(sets.notWords());\n\n    } else if (rs[5]) {\n      tokens.push(sets.notInts());\n\n    } else if (rs[6]) {\n      tokens.push(sets.notWhitespace());\n\n    } else if (rs[7]) {\n      tokens.push({\n        type: types.RANGE,\n        from: (rs[8] || rs[9]).charCodeAt(0),\n        to: rs[10].charCodeAt(0),\n      });\n\n    } else if ((c = rs[12])) {\n      tokens.push({\n        type: types.CHAR,\n        value: c.charCodeAt(0),\n      });\n\n    } else {\n      return [tokens, regexp.lastIndex];\n    }\n  }\n\n  exports.error(regexpStr, 'Unterminated character class');\n};\n\n\n/**\n * Shortcut to throw errors.\n *\n * @param {String} regexp\n * @param {String} msg\n */\nexports.error = (regexp, msg) => {\n  throw new SyntaxError('Invalid regular expression: /' + regexp + '/: ' + msg);\n};\n/lib/types.jsĦmodule.exports = {\n  ROOT       : 0,\n  GROUP      : 1,\n  POSITION   : 2,\n  SET        : 3,\n  RANGE      : 4,\n  REPETITION : 5,\n  REFERENCE  : 6,\n  CHAR       : 7,\n};\n/LICENSE\u0004)MIT License\n\nCopyright (C) 2011 by fent\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE. \n/package.json\u0002{\n  \"name\": \"ret\",\n  \"description\": \"Tokenizes a string that represents a regular expression.\",\n  \"keywords\": [\n    \"regex\",\n    \"regexp\",\n    \"regular expression\",\n    \"parser\",\n    \"tokenizer\"\n  ],\n  \"version\": \"0.2.2\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git://github.com/fent/ret.js.git\"\n  },\n  \"author\": \"fent (https://github.com/fent)\",\n  \"main\": \"./lib/index.js\",\n  \"files\": [\n    \"lib\"\n  ],\n  \"scripts\": {\n    \"test\": \"istanbul cover vows -- --spec test/*-test.js\"\n  },\n  \"directories\": {\n    \"lib\": \"./lib\"\n  },\n  \"devDependencies\": {\n    \"istanbul\": \"^0.4.5\",\n    \"vows\": \"^0.8.1\"\n  },\n  \"engines\": {\n    \"node\": \">=4\"\n  },\n  \"license\": \"MIT\"\n}\n/lib/index.js\u0019rconst util      = require('./util');\nconst types     = require('./types');\nconst sets      = require('./sets');\nconst positions = require('./positions');\n\n\nmodule.exports = (regexpStr) => {\n  var i = 0, l, c,\n    start = { type: types.ROOT, stack: []},\n\n    // Keep track of last clause/group and stack.\n    lastGroup = start,\n    last = start.stack,\n    groupStack = [];\n\n\n  var repeatErr = (i) => {\n    util.error(regexpStr, `Nothing to repeat at column ${i - 1}`);\n  };\n\n  // Decode a few escaped characters.\n  var str = util.strToChars(regexpStr);\n  l = str.length;\n\n  // Iterate through each character in string.\n  while (i < l) {\n    c = str[i++];\n\n    switch (c) {\n      // Handle escaped characters, inclues a few sets.\n      case '\\\\':\n        c = str[i++];\n\n        switch (c) {\n          case 'b':\n            last.push(positions.wordBoundary());\n            break;\n\n          case 'B':\n            last.push(positions.nonWordBoundary());\n            break;\n\n          case 'w':\n            last.push(sets.words());\n            break;\n\n          case 'W':\n            last.push(sets.notWords());\n            break;\n\n          case 'd':\n            last.push(sets.ints());\n            break;\n\n          case 'D':\n            last.push(sets.notInts());\n            break;\n\n          case 's':\n            last.push(sets.whitespace());\n            break;\n\n          case 'S':\n            last.push(sets.notWhitespace());\n            break;\n\n          default:\n            // Check if c is integer.\n            // In which case it's a reference.\n            if (/\\d/.test(c)) {\n              last.push({ type: types.REFERENCE, value: parseInt(c, 10) });\n\n            // Escaped character.\n            } else {\n              last.push({ type: types.CHAR, value: c.charCodeAt(0) });\n            }\n        }\n\n        break;\n\n\n      // Positionals.\n      case '^':\n        last.push(positions.begin());\n        break;\n\n      case '$':\n        last.push(positions.end());\n        break;\n\n\n      // Handle custom sets.\n      case '[':\n        // Check if this class is 'anti' i.e. [^abc].\n        var not;\n        if (str[i] === '^') {\n          not = true;\n          i++;\n        } else {\n          not = false;\n        }\n\n        // Get all the characters in class.\n        var classTokens = util.tokenizeClass(str.slice(i), regexpStr);\n\n        // Increase index by length of class.\n        i += classTokens[1];\n        last.push({\n          type: types.SET,\n          set: classTokens[0],\n          not,\n        });\n\n        break;\n\n\n      // Class of any character except \\n.\n      case '.':\n        last.push(sets.anyChar());\n        break;\n\n\n      // Push group onto stack.\n      case '(':\n        // Create group.\n        var group = {\n          type: types.GROUP,\n          stack: [],\n          remember: true,\n        };\n\n        c = str[i];\n\n        // If if this is a special kind of group.\n        if (c === '?') {\n          c = str[i + 1];\n          i += 2;\n\n          // Match if followed by.\n          if (c === '=') {\n            group.followedBy = true;\n\n          // Match if not followed by.\n          } else if (c === '!') {\n            group.notFollowedBy = true;\n\n          } else if (c !== ':') {\n            util.error(regexpStr,\n              `Invalid group, character '${c}'` +\n              ` after '?' at column ${i - 1}`);\n          }\n\n          group.remember = false;\n        }\n\n        // Insert subgroup into current group stack.\n        last.push(group);\n\n        // Remember the current group for when the group closes.\n        groupStack.push(lastGroup);\n\n        // Make this new group the current group.\n        lastGroup = group;\n        last = group.stack;\n        break;\n\n\n      // Pop group out of stack.\n      case ')':\n        if (groupStack.length === 0) {\n          util.error(regexpStr, `Unmatched ) at column ${i - 1}`);\n        }\n        lastGroup = groupStack.pop();\n\n        // Check if this group has a PIPE.\n        // To get back the correct last stack.\n        last = lastGroup.options ?\n          lastGroup.options[lastGroup.options.length - 1] : lastGroup.stack;\n        break;\n\n\n      // Use pipe character to give more choices.\n      case '|':\n        // Create array where options are if this is the first PIPE\n        // in this clause.\n        if (!lastGroup.options) {\n          lastGroup.options = [lastGroup.stack];\n          delete lastGroup.stack;\n        }\n\n        // Create a new stack and add to options for rest of clause.\n        var stack = [];\n        lastGroup.options.push(stack);\n        last = stack;\n        break;\n\n\n      // Repetition.\n      // For every repetition, remove last element from last stack\n      // then insert back a RANGE object.\n      // This design is chosen because there could be more than\n      // one repetition symbols in a regex i.e. `a?+{2,3}`.\n      case '{':\n        var rs = /^(\\d+)(,(\\d+)?)?\\}/.exec(str.slice(i)), min, max;\n        if (rs !== null) {\n          if (last.length === 0) {\n            repeatErr(i);\n          }\n          min = parseInt(rs[1], 10);\n          max = rs[2] ? rs[3] ? parseInt(rs[3], 10) : Infinity : min;\n          i += rs[0].length;\n\n          last.push({\n            type: types.REPETITION,\n            min,\n            max,\n            value: last.pop(),\n          });\n        } else {\n          last.push({\n            type: types.CHAR,\n            value: 123,\n          });\n        }\n        break;\n\n      case '?':\n        if (last.length === 0) {\n          repeatErr(i);\n        }\n        last.push({\n          type: types.REPETITION,\n          min: 0,\n          max: 1,\n          value: last.pop(),\n        });\n        break;\n\n      case '+':\n        if (last.length === 0) {\n          repeatErr(i);\n        }\n        last.push({\n          type: types.REPETITION,\n          min: 1,\n          max: Infinity,\n          value: last.pop(),\n        });\n        break;\n\n      case '*':\n        if (last.length === 0) {\n          repeatErr(i);\n        }\n        last.push({\n          type: types.REPETITION,\n          min: 0,\n          max: Infinity,\n          value: last.pop(),\n        });\n        break;\n\n\n      // Default is a character that is not `\\[](){}?+*^$`.\n      default:\n        last.push({\n          type: types.CHAR,\n          value: c.charCodeAt(0),\n        });\n    }\n\n  }\n\n  // Check if any groups have not been closed.\n  if (groupStack.length !== 0) {\n    util.error(regexpStr, 'Unterminated group');\n  }\n\n  return start;\n};\n\nmodule.exports.types = types;\n/README.md\u0010# Regular Expression Tokenizer\n\nTokenizes strings that represent a regular expressions.\n\n[![Build Status](https://secure.travis-ci.org/fent/ret.js.svg)](http://travis-ci.org/fent/ret.js)\n[![Dependency Status](https://david-dm.org/fent/ret.js.svg)](https://david-dm.org/fent/ret.js)\n[![codecov](https://codecov.io/gh/fent/ret.js/branch/master/graph/badge.svg)](https://codecov.io/gh/fent/ret.js)\n\n# Usage\n\n```js\nconst ret = require('ret');\n\nvar tokens = ret(/foo|bar/.source);\n```\n\n`tokens` will contain the following object\n\n```js\n{\n  \"type\": ret.types.ROOT\n  \"options\": [\n    [ { \"type\": ret.types.CHAR, \"value\", 102 },\n      { \"type\": ret.types.CHAR, \"value\", 111 },\n      { \"type\": ret.types.CHAR, \"value\", 111 } ],\n    [ { \"type\": ret.types.CHAR, \"value\",  98 },\n      { \"type\": ret.types.CHAR, \"value\",  97 },\n      { \"type\": ret.types.CHAR, \"value\", 114 } ]\n  ]\n}\n```\n\n# Token Types\n\n`ret.types` is a collection of the various token types exported by ret.\n\n### ROOT\n\nOnly used in the root of the regexp. This is needed due to the posibility of the root containing a pipe `|` character. In that case, the token will have an `options` key that will be an array of arrays of tokens. If not, it will contain a `stack` key that is an array of tokens.\n\n```js\n{\n  \"type\": ret.types.ROOT,\n  \"stack\": [token1, token2...],\n}\n```\n\n```js\n{\n  \"type\": ret.types.ROOT,\n  \"options\" [\n    [token1, token2...],\n    [othertoken1, othertoken2...]\n    ...\n  ],\n}\n```\n\n### GROUP\n\nGroups contain tokens that are inside of a parenthesis. If the group begins with `?` followed by another character, it's a special type of group. A ':' tells the group not to be remembered when `exec` is used. '=' means the previous token matches only if followed by this group, and '!' means the previous token matches only if NOT followed.\n\nLike root, it can contain an `options` key instead of `stack` if there is a pipe.\n\n```js\n{\n  \"type\": ret.types.GROUP,\n  \"remember\" true,\n  \"followedBy\": false,\n  \"notFollowedBy\": false,\n  \"stack\": [token1, token2...],\n}\n```\n\n```js\n{\n  \"type\": ret.types.GROUP,\n  \"remember\" true,\n  \"followedBy\": false,\n  \"notFollowedBy\": false,\n  \"options\" [\n    [token1, token2...],\n    [othertoken1, othertoken2...]\n    ...\n  ],\n}\n```\n\n### POSITION\n\n`\\b`, `\\B`, `^`, and `$` specify positions in the regexp.\n\n```js\n{\n  \"type\": ret.types.POSITION,\n  \"value\": \"^\",\n}\n```\n\n### SET\n\nContains a key `set` specifying what tokens are allowed and a key `not` specifying if the set should be negated. A set can contain other sets, ranges, and characters.\n\n```js\n{\n  \"type\": ret.types.SET,\n  \"set\": [token1, token2...],\n  \"not\": false,\n}\n```\n\n### RANGE\n\nUsed in set tokens to specify a character range. `from` and `to` are character codes.\n\n```js\n{\n  \"type\": ret.types.RANGE,\n  \"from\": 97,\n  \"to\": 122,\n}\n```\n\n### REPETITION\n\n```js\n{\n  \"type\": ret.types.REPETITION,\n  \"min\": 0,\n  \"max\": Infinity,\n  \"value\": token,\n}\n```\n\n### REFERENCE\n\nReferences a group token. `value` is 1-9.\n\n```js\n{\n  \"type\": ret.types.REFERENCE,\n  \"value\": 1,\n}\n```\n\n### CHAR\n\nRepresents a single character token. `value` is the character code. This might seem a bit cluttering instead of concatenating characters together. But since repetition tokens only repeat the last token and not the last clause like the pipe, it's simpler to do it this way.\n\n```js\n{\n  \"type\": ret.types.CHAR,\n  \"value\": 123,\n}\n```\n\n## Errors\n\nret.js will throw errors if given a string with an invalid regular expression. All possible errors are\n\n* Invalid group. When a group with an immediate `?` character is followed by an invalid character. It can only be followed by `!`, `=`, or `:`. Example: `/(?_abc)/`\n* Nothing to repeat. Thrown when a repetitional token is used as the first token in the current clause, as in right in the beginning of the regexp or group, or right after a pipe. Example: `/foo|?bar/`, `/{1,3}foo|bar/`, `/foo(+bar)/`\n* Unmatched ). A group was not opened, but was closed. Example: `/hello)2u/`\n* Unterminated group. A group was not closed. Example: `/(1(23)4/`\n* Unterminated character class. A custom character set was not closed. Example: `/[abc/`\n\n\n# Install\n\n    npm install ret\n\n\n# Tests\n\nTests are written with [vows](http://vowsjs.org/)\n\n```bash\nnpm test\n```\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/cmV0cnlAMC4xMy4x",
    "content": "/lib/retry_operation.js\u000efunction RetryOperation(timeouts, options) {\n  // Compatibility for the old (timeouts, retryForever) signature\n  if (typeof options === 'boolean') {\n    options = { forever: options };\n  }\n\n  this._originalTimeouts = JSON.parse(JSON.stringify(timeouts));\n  this._timeouts = timeouts;\n  this._options = options || {};\n  this._maxRetryTime = options && options.maxRetryTime || Infinity;\n  this._fn = null;\n  this._errors = [];\n  this._attempts = 1;\n  this._operationTimeout = null;\n  this._operationTimeoutCb = null;\n  this._timeout = null;\n  this._operationStart = null;\n  this._timer = null;\n\n  if (this._options.forever) {\n    this._cachedTimeouts = this._timeouts.slice(0);\n  }\n}\nmodule.exports = RetryOperation;\n\nRetryOperation.prototype.reset = function() {\n  this._attempts = 1;\n  this._timeouts = this._originalTimeouts.slice(0);\n}\n\nRetryOperation.prototype.stop = function() {\n  if (this._timeout) {\n    clearTimeout(this._timeout);\n  }\n  if (this._timer) {\n    clearTimeout(this._timer);\n  }\n\n  this._timeouts       = [];\n  this._cachedTimeouts = null;\n};\n\nRetryOperation.prototype.retry = function(err) {\n  if (this._timeout) {\n    clearTimeout(this._timeout);\n  }\n\n  if (!err) {\n    return false;\n  }\n  var currentTime = new Date().getTime();\n  if (err && currentTime - this._operationStart >= this._maxRetryTime) {\n    this._errors.push(err);\n    this._errors.unshift(new Error('RetryOperation timeout occurred'));\n    return false;\n  }\n\n  this._errors.push(err);\n\n  var timeout = this._timeouts.shift();\n  if (timeout === undefined) {\n    if (this._cachedTimeouts) {\n      // retry forever, only keep last error\n      this._errors.splice(0, this._errors.length - 1);\n      timeout = this._cachedTimeouts.slice(-1);\n    } else {\n      return false;\n    }\n  }\n\n  var self = this;\n  this._timer = setTimeout(function() {\n    self._attempts++;\n\n    if (self._operationTimeoutCb) {\n      self._timeout = setTimeout(function() {\n        self._operationTimeoutCb(self._attempts);\n      }, self._operationTimeout);\n\n      if (self._options.unref) {\n          self._timeout.unref();\n      }\n    }\n\n    self._fn(self._attempts);\n  }, timeout);\n\n  if (this._options.unref) {\n      this._timer.unref();\n  }\n\n  return true;\n};\n\nRetryOperation.prototype.attempt = function(fn, timeoutOps) {\n  this._fn = fn;\n\n  if (timeoutOps) {\n    if (timeoutOps.timeout) {\n      this._operationTimeout = timeoutOps.timeout;\n    }\n    if (timeoutOps.cb) {\n      this._operationTimeoutCb = timeoutOps.cb;\n    }\n  }\n\n  var self = this;\n  if (this._operationTimeoutCb) {\n    this._timeout = setTimeout(function() {\n      self._operationTimeoutCb();\n    }, self._operationTimeout);\n  }\n\n  this._operationStart = new Date().getTime();\n\n  this._fn(this._attempts);\n};\n\nRetryOperation.prototype.try = function(fn) {\n  console.log('Using RetryOperation.try() is deprecated');\n  this.attempt(fn);\n};\n\nRetryOperation.prototype.start = function(fn) {\n  console.log('Using RetryOperation.start() is deprecated');\n  this.attempt(fn);\n};\n\nRetryOperation.prototype.start = RetryOperation.prototype.try;\n\nRetryOperation.prototype.errors = function() {\n  return this._errors;\n};\n\nRetryOperation.prototype.attempts = function() {\n  return this._attempts;\n};\n\nRetryOperation.prototype.mainError = function() {\n  if (this._errors.length === 0) {\n    return null;\n  }\n\n  var counts = {};\n  var mainError = null;\n  var mainErrorCount = 0;\n\n  for (var i = 0; i < this._errors.length; i++) {\n    var error = this._errors[i];\n    var message = error.message;\n    var count = (counts[message] || 0) + 1;\n\n    counts[message] = count;\n\n    if (count >= mainErrorCount) {\n      mainError = error;\n      mainErrorCount = count;\n    }\n  }\n\n  return mainError;\n};\n/README.md#\t<!-- badges/ -->\n[![Build Status](https://secure.travis-ci.org/tim-kos/node-retry.svg?branch=master)](http://travis-ci.org/tim-kos/node-retry \"Check this project's build status on TravisCI\")\n[![codecov](https://codecov.io/gh/tim-kos/node-retry/branch/master/graph/badge.svg)](https://codecov.io/gh/tim-kos/node-retry)\n<!-- /badges -->\n\n# retry\n\nAbstraction for exponential and custom retry strategies for failed operations.\n\n## Installation\n\n    npm install retry\n\n## Current Status\n\nThis module has been tested and is ready to be used.\n\n## Tutorial\n\nThe example below will retry a potentially failing `dns.resolve` operation\n`10` times using an exponential backoff strategy. With the default settings, this\nmeans the last attempt is made after `17 minutes and 3 seconds`.\n\n``` javascript\nvar dns = require('dns');\nvar retry = require('retry');\n\nfunction faultTolerantResolve(address, cb) {\n  var operation = retry.operation();\n\n  operation.attempt(function(currentAttempt) {\n    dns.resolve(address, function(err, addresses) {\n      if (operation.retry(err)) {\n        return;\n      }\n\n      cb(err ? operation.mainError() : null, addresses);\n    });\n  });\n}\n\nfaultTolerantResolve('nodejs.org', function(err, addresses) {\n  console.log(err, addresses);\n});\n```\n\nOf course you can also configure the factors that go into the exponential\nbackoff. See the API documentation below for all available settings.\ncurrentAttempt is an int representing the number of attempts so far.\n\n``` javascript\nvar operation = retry.operation({\n  retries: 5,\n  factor: 3,\n  minTimeout: 1 * 1000,\n  maxTimeout: 60 * 1000,\n  randomize: true,\n});\n```\n\n## API\n\n### retry.operation([options])\n\nCreates a new `RetryOperation` object. `options` is the same as `retry.timeouts()`'s `options`, with three additions:\n\n* `forever`: Whether to retry forever, defaults to `false`.\n* `unref`: Whether to [unref](https://nodejs.org/api/timers.html#timers_unref) the setTimeout's, defaults to `false`.\n* `maxRetryTime`: The maximum time (in milliseconds) that the retried operation is allowed to run. Default is `Infinity`.  \n\n### retry.timeouts([options])\n\nReturns an array of timeouts. All time `options` and return values are in\nmilliseconds. If `options` is an array, a copy of that array is returned.\n\n`options` is a JS object that can contain any of the following keys:\n\n* `retries`: The maximum amount of times to retry the operation. Default is `10`. Seting this to `1` means `do it once, then retry it once`.\n* `factor`: The exponential factor to use. Default is `2`.\n* `minTimeout`: The number of milliseconds before starting the first retry. Default is `1000`.\n* `maxTimeout`: The maximum number of milliseconds between two retries. Default is `Infinity`.\n* `randomize`: Randomizes the timeouts by multiplying with a factor between `1` to `2`. Default is `false`.\n\nThe formula used to calculate the individual timeouts is:\n\n```\nMath.min(random * minTimeout * Math.pow(factor, attempt), maxTimeout)\n```\n\nHave a look at [this article][article] for a better explanation of approach.\n\nIf you want to tune your `factor` / `times` settings to attempt the last retry\nafter a certain amount of time, you can use wolfram alpha. For example in order\nto tune for `10` attempts in `5 minutes`, you can use this equation:\n\n![screenshot](https://github.com/tim-kos/node-retry/raw/master/equation.gif)\n\nExplaining the various values from left to right:\n\n* `k = 0 ... 9`:  The `retries` value (10)\n* `1000`: The `minTimeout` value in ms (1000)\n* `x^k`: No need to change this, `x` will be your resulting factor\n* `5 * 60 * 1000`: The desired total amount of time for retrying in ms (5 minutes)\n\nTo make this a little easier for you, use wolfram alpha to do the calculations:\n\n<http://www.wolframalpha.com/input/?i=Sum%5B1000*x^k%2C+{k%2C+0%2C+9}%5D+%3D+5+*+60+*+1000>\n\n[article]: http://dthain.blogspot.com/2009/02/exponential-backoff-in-distributed.html\n\n### retry.createTimeout(attempt, opts)\n\nReturns a new `timeout` (integer in milliseconds) based on the given parameters.\n\n`attempt` is an integer representing for which retry the timeout should be calculated. If your retry operation was executed 4 times you had one attempt and 3 retries. If you then want to calculate a new timeout, you should set `attempt` to 4 (attempts are zero-indexed).\n\n`opts` can include `factor`, `minTimeout`, `randomize` (boolean) and `maxTimeout`. They are documented above.\n\n`retry.createTimeout()` is used internally by `retry.timeouts()` and is public for you to be able to create your own timeouts for reinserting an item, see [issue #13](https://github.com/tim-kos/node-retry/issues/13).\n\n### retry.wrap(obj, [options], [methodNames])\n\nWrap all functions of the `obj` with retry. Optionally you can pass operation options and\nan array of method names which need to be wrapped.\n\n```\nretry.wrap(obj)\n\nretry.wrap(obj, ['method1', 'method2'])\n\nretry.wrap(obj, {retries: 3})\n\nretry.wrap(obj, {retries: 3}, ['method1', 'method2'])\n```\nThe `options` object can take any options that the usual call to `retry.operation` can take.\n\n### new RetryOperation(timeouts, [options])\n\nCreates a new `RetryOperation` where `timeouts` is an array where each value is\na timeout given in milliseconds.\n\nAvailable options:\n* `forever`: Whether to retry forever, defaults to `false`.\n* `unref`: Wether to [unref](https://nodejs.org/api/timers.html#timers_unref) the setTimeout's, defaults to `false`.\n\nIf `forever` is true, the following changes happen:\n* `RetryOperation.errors()` will only output an array of one item: the last error.\n* `RetryOperation` will repeatedly use the `timeouts` array. Once all of its timeouts have been used up, it restarts with the first timeout, then uses the second and so on.\n\n#### retryOperation.errors()\n\nReturns an array of all errors that have been passed to `retryOperation.retry()` so far. The\nreturning array has the errors ordered chronologically based on when they were passed to\n`retryOperation.retry()`, which means the first passed error is at index zero and the last is\nat the last index.\n\n#### retryOperation.mainError()\n\nA reference to the error object that occured most frequently. Errors are\ncompared using the `error.message` property.\n\nIf multiple error messages occured the same amount of time, the last error\nobject with that message is returned.\n\nIf no errors occured so far, the value is `null`.\n\n#### retryOperation.attempt(fn, timeoutOps)\n\nDefines the function `fn` that is to be retried and executes it for the first\ntime right away. The `fn` function can receive an optional `currentAttempt` callback that represents the number of attempts to execute `fn` so far.\n\nOptionally defines `timeoutOps` which is an object having a property `timeout` in miliseconds and a property `cb` callback function.\nWhenever your retry operation takes longer than `timeout` to execute, the timeout callback function `cb` is called.\n\n\n#### retryOperation.try(fn)\n\nThis is an alias for `retryOperation.attempt(fn)`. This is deprecated. Please use `retryOperation.attempt(fn)` instead.\n\n#### retryOperation.start(fn)\n\nThis is an alias for `retryOperation.attempt(fn)`. This is deprecated. Please use `retryOperation.attempt(fn)` instead.\n\n#### retryOperation.retry(error)\n\nReturns `false` when no `error` value is given, or the maximum amount of retries\nhas been reached.\n\nOtherwise it returns `true`, and retries the operation after the timeout for\nthe current attempt number.\n\n#### retryOperation.stop()\n\nAllows you to stop the operation being retried. Useful for aborting the operation on a fatal error etc.\n\n#### retryOperation.reset()\n\nResets the internal state of the operation object, so that you can call `attempt()` again as if this was a new operation object.\n\n#### retryOperation.attempts()\n\nReturns an int representing the number of attempts it took to call `fn` before it was successful.\n\n## License\n\nretry is licensed under the MIT license.\n\n\n# Changelog\n\n0.10.0 Adding `stop` functionality, thanks to @maxnachlinger.\n\n0.9.0 Adding `unref` functionality, thanks to @satazor.\n\n0.8.0 Implementing retry.wrap.\n\n0.7.0 Some bug fixes and made retry.createTimeout() public. Fixed issues [#10](https://github.com/tim-kos/node-retry/issues/10), [#12](https://github.com/tim-kos/node-retry/issues/12), and [#13](https://github.com/tim-kos/node-retry/issues/13).\n\n0.6.0 Introduced optional timeOps parameter for the attempt() function which is an object having a property timeout in milliseconds and a property cb callback function. Whenever your retry operation takes longer than timeout to execute, the timeout callback function cb is called.\n\n0.5.0 Some minor refactoring.\n\n0.4.0 Changed retryOperation.try() to retryOperation.attempt(). Deprecated the aliases start() and try() for it.\n\n0.3.0 Added retryOperation.start() which is an alias for retryOperation.try().\n\n0.2.0 Added attempts() function and parameter to retryOperation.try() representing the number of attempts it took to call fn().\n/lib/retry.js\t)var RetryOperation = require('./retry_operation');\n\nexports.operation = function(options) {\n  var timeouts = exports.timeouts(options);\n  return new RetryOperation(timeouts, {\n      forever: options && (options.forever || options.retries === Infinity),\n      unref: options && options.unref,\n      maxRetryTime: options && options.maxRetryTime\n  });\n};\n\nexports.timeouts = function(options) {\n  if (options instanceof Array) {\n    return [].concat(options);\n  }\n\n  var opts = {\n    retries: 10,\n    factor: 2,\n    minTimeout: 1 * 1000,\n    maxTimeout: Infinity,\n    randomize: false\n  };\n  for (var key in options) {\n    opts[key] = options[key];\n  }\n\n  if (opts.minTimeout > opts.maxTimeout) {\n    throw new Error('minTimeout is greater than maxTimeout');\n  }\n\n  var timeouts = [];\n  for (var i = 0; i < opts.retries; i++) {\n    timeouts.push(this.createTimeout(i, opts));\n  }\n\n  if (options && options.forever && !timeouts.length) {\n    timeouts.push(this.createTimeout(i, opts));\n  }\n\n  // sort the array numerically ascending\n  timeouts.sort(function(a,b) {\n    return a - b;\n  });\n\n  return timeouts;\n};\n\nexports.createTimeout = function(attempt, opts) {\n  var random = (opts.randomize)\n    ? (Math.random() + 1)\n    : 1;\n\n  var timeout = Math.round(random * Math.max(opts.minTimeout, 1) * Math.pow(opts.factor, attempt));\n  timeout = Math.min(timeout, opts.maxTimeout);\n\n  return timeout;\n};\n\nexports.wrap = function(obj, options, methods) {\n  if (options instanceof Array) {\n    methods = options;\n    options = null;\n  }\n\n  if (!methods) {\n    methods = [];\n    for (var key in obj) {\n      if (typeof obj[key] === 'function') {\n        methods.push(key);\n      }\n    }\n  }\n\n  for (var i = 0; i < methods.length; i++) {\n    var method   = methods[i];\n    var original = obj[method];\n\n    obj[method] = function retryWrapper(original) {\n      var op       = exports.operation(options);\n      var args     = Array.prototype.slice.call(arguments, 1);\n      var callback = args.pop();\n\n      args.push(function(err) {\n        if (op.retry(err)) {\n          return;\n        }\n        if (err) {\n          arguments[0] = op.mainError();\n        }\n        callback.apply(this, arguments);\n      });\n\n      op.attempt(function() {\n        original.apply(obj, args);\n      });\n    }.bind(obj, original);\n    obj[method].options = options;\n  }\n};\n/index.js(module.exports = require('./lib/retry');/package.json\u0004,{\n  \"author\": \"Tim Koschützki <tim@debuggable.com> (http://debuggable.com/)\",\n  \"name\": \"retry\",\n  \"description\": \"Abstraction for exponential and custom retry strategies for failed operations.\",\n  \"license\": \"MIT\",\n  \"version\": \"0.13.1\",\n  \"homepage\": \"https://github.com/tim-kos/node-retry\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git://github.com/tim-kos/node-retry.git\"\n  },\n  \"files\": [\n    \"lib\",\n    \"example\"\n  ],\n  \"directories\": {\n    \"lib\": \"./lib\"\n  },\n  \"main\": \"index.js\",\n  \"engines\": {\n    \"node\": \">= 4\"\n  },\n  \"dependencies\": {},\n  \"devDependencies\": {\n    \"fake\": \"0.2.0\",\n    \"istanbul\": \"^0.4.5\",\n    \"tape\": \"^4.8.0\"\n  },\n  \"scripts\": {\n    \"test\": \"./node_modules/.bin/istanbul cover ./node_modules/tape/bin/tape ./test/integration/*.js\",\n    \"release:major\": \"env SEMANTIC=major npm run release\",\n    \"release:minor\": \"env SEMANTIC=minor npm run release\",\n    \"release:patch\": \"env SEMANTIC=patch npm run release\",\n    \"release\": \"npm version ${SEMANTIC:-patch} -m \\\"Release %s\\\" && git push && git push --tags && npm publish\"\n  }\n}\n/example/dns.js\u0002var dns = require('dns');\nvar retry = require('../lib/retry');\n\nfunction faultTolerantResolve(address, cb) {\n  var opts = {\n    retries: 2,\n    factor: 2,\n    minTimeout: 1 * 1000,\n    maxTimeout: 2 * 1000,\n    randomize: true\n  };\n  var operation = retry.operation(opts);\n\n  operation.attempt(function(currentAttempt) {\n    dns.resolve(address, function(err, addresses) {\n      if (operation.retry(err)) {\n        return;\n      }\n\n      cb(operation.mainError(), operation.errors(), addresses);\n    });\n  });\n}\n\nfaultTolerantResolve('nodejs.org', function(err, errors, addresses) {\n  console.warn('err:');\n  console.log(err);\n\n  console.warn('addresses:');\n  console.log(addresses);\n});/License\u0004sCopyright (c) 2011:\nTim Koschützki (tim@debuggable.com)\nFelix Geisendörfer (felix@debuggable.com)\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in\n all copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n/example/stop.js\u0003xvar retry = require('../lib/retry');\n\nfunction attemptAsyncOperation(someInput, cb) {\n  var opts = {\n    retries: 2,\n    factor: 2,\n    minTimeout: 1 * 1000,\n    maxTimeout: 2 * 1000,\n    randomize: true\n  };\n  var operation = retry.operation(opts);\n\n  operation.attempt(function(currentAttempt) {\n    failingAsyncOperation(someInput, function(err, result) {\n\n      if (err && err.message === 'A fatal error') {\n        operation.stop();\n        return cb(err);\n      }\n\n      if (operation.retry(err)) {\n        return;\n      }\n\n      cb(operation.mainError(), operation.errors(), result);\n    });\n  });\n}\n\nattemptAsyncOperation('test input', function(err, errors, result) {\n  console.warn('err:');\n  console.log(err);\n\n  console.warn('result:');\n  console.log(result);\n});\n\nfunction failingAsyncOperation(input, cb) {\n  return setImmediate(cb.bind(null, new Error('A fatal error')));\n}\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/cmV1c2lmeUAxLjAuNA==",
    "content": "/README.md\u000e1# reusify\n\n[![npm version][npm-badge]][npm-url]\n[![Build Status][travis-badge]][travis-url]\n[![Coverage Status][coveralls-badge]][coveralls-url]\n\nReuse your objects and functions for maximum speed. This technique will\nmake any function run ~10% faster. You call your functions a\nlot, and it adds up quickly in hot code paths.\n\n```\n$ node benchmarks/createNoCodeFunction.js\nTotal time 53133\nTotal iterations 100000000\nIteration/s 1882069.5236482036\n\n$ node benchmarks/reuseNoCodeFunction.js\nTotal time 50617\nTotal iterations 100000000\nIteration/s 1975620.838848608\n```\n\nThe above benchmark uses fibonacci to simulate a real high-cpu load.\nThe actual numbers might differ for your use case, but the difference\nshould not.\n\nThe benchmark was taken using Node v6.10.0.\n\nThis library was extracted from\n[fastparallel](http://npm.im/fastparallel).\n\n## Example\n\n```js\nvar reusify = require('reusify')\nvar fib = require('reusify/benchmarks/fib')\nvar instance = reusify(MyObject)\n\n// get an object from the cache,\n// or creates a new one when cache is empty\nvar obj = instance.get()\n\n// set the state\nobj.num = 100\nobj.func()\n\n// reset the state.\n// if the state contains any external object\n// do not use delete operator (it is slow)\n// prefer set them to null\nobj.num = 0\n\n// store an object in the cache\ninstance.release(obj)\n\nfunction MyObject () {\n  // you need to define this property\n  // so V8 can compile MyObject into an\n  // hidden class\n  this.next = null\n  this.num = 0\n\n  var that = this\n\n  // this function is never reallocated,\n  // so it can be optimized by V8\n  this.func = function () {\n    if (null) {\n      // do nothing\n    } else {\n      // calculates fibonacci\n      fib(that.num)\n    }\n  }\n}\n```\n\nThe above example was intended for synchronous code, let's see async:\n```js\nvar reusify = require('reusify')\nvar instance = reusify(MyObject)\n\nfor (var i = 0; i < 100; i++) {\n  getData(i, console.log)\n}\n\nfunction getData (value, cb) {\n  var obj = instance.get()\n\n  obj.value = value\n  obj.cb = cb\n  obj.run()\n}\n\nfunction MyObject () {\n  this.next = null\n  this.value = null\n\n  var that = this\n\n  this.run = function () {\n    asyncOperation(that.value, that.handle)\n  }\n\n  this.handle = function (err, result) {\n    that.cb(err, result)\n    that.value = null\n    that.cb = null\n    instance.release(that)\n  }\n}\n```\n\nAlso note how in the above examples, the code, that consumes an istance of `MyObject`,\nreset the state to initial condition, just before storing it in the cache.\nThat's needed so that every subsequent request for an instance from the cache,\ncould get a clean instance.\n\n## Why\n\nIt is faster because V8 doesn't have to collect all the functions you\ncreate. On a short-lived benchmark, it is as fast as creating the\nnested function, but on a longer time frame it creates less\npressure on the garbage collector.\n\n## Other examples\nIf you want to see some complex example, checkout [middie](https://github.com/fastify/middie) and [steed](https://github.com/mcollina/steed).\n\n## Acknowledgements\n\nThanks to [Trevor Norris](https://github.com/trevnorris) for\ngetting me down the rabbit hole of performance, and thanks to [Mathias\nBuss](http://github.com/mafintosh) for suggesting me to share this\ntrick.\n\n## License\n\nMIT\n\n[npm-badge]: https://badge.fury.io/js/reusify.svg\n[npm-url]: https://badge.fury.io/js/reusify\n[travis-badge]: https://api.travis-ci.org/mcollina/reusify.svg\n[travis-url]: https://travis-ci.org/mcollina/reusify\n[coveralls-badge]: https://coveralls.io/repos/mcollina/reusify/badge.svg?branch=master&service=github\n[coveralls-url]:  https://coveralls.io/github/mcollina/reusify?branch=master\n/reusify.js\u0001'use strict'\n\nfunction reusify (Constructor) {\n  var head = new Constructor()\n  var tail = head\n\n  function get () {\n    var current = head\n\n    if (current.next) {\n      head = current.next\n    } else {\n      head = new Constructor()\n      tail = head\n    }\n\n    current.next = null\n\n    return current\n  }\n\n  function release (obj) {\n    tail.next = obj\n    tail = obj\n  }\n\n  return {\n    get: get,\n    release: release\n  }\n}\n\nmodule.exports = reusify\n\"/benchmarks/reuseNoCodeFunction.js\u0002'use strict'\n\nvar reusify = require('../')\nvar fib = require('./fib')\nvar instance = reusify(MyObject)\nvar max = 100000000\nvar start = Date.now()\n\nfunction reuseNoCodeFunction () {\n  var obj = instance.get()\n  obj.num = 100\n  obj.func()\n  obj.num = 0\n  instance.release(obj)\n}\n\nfunction MyObject () {\n  this.next = null\n  var that = this\n  this.num = 0\n  this.func = function () {\n    /* eslint no-constant-condition: \"off\" */\n    if (null) {\n      // do nothing\n    } else {\n      fib(that.num)\n    }\n  }\n}\n\nfor (var i = 0; i < max; i++) {\n  reuseNoCodeFunction()\n}\n\nvar time = Date.now() - start\nconsole.log('Total time', time)\nconsole.log('Total iterations', max)\nconsole.log('Iteration/s', max / time * 1000)\n/benchmarks/fib.jsı'use strict'\n\nfunction fib (num) {\n  var fib = []\n\n  fib[0] = 0\n  fib[1] = 1\n  for (var i = 2; i <= num; i++) {\n    fib[i] = fib[i - 2] + fib[i - 1]\n  }\n}\n\nmodule.exports = fib\n/.travis.yml\u0001\u001clanguage: node_js\nsudo: false\n\nnode_js:\n  - 9\n  - 8\n  - 7\n  - 6\n  - 5\n  - 4\n  - 4.0\n  - iojs-v3\n  - iojs-v2\n  - iojs-v1\n  - 0.12\n  - 0.10\n\ncache:\n  directories:\n    - node_modules\n\nafter_script:\n- npm run coverage\n\nnotifications:\n  email:\n    on_success: never\n    on_failure: always\n/test.js\u0005'use strict'\n\nvar test = require('tape')\nvar reusify = require('./')\n\ntest('reuse objects', function (t) {\n  t.plan(6)\n\n  function MyObject () {\n    t.pass('constructor called')\n    this.next = null\n  }\n\n  var instance = reusify(MyObject)\n  var obj = instance.get()\n\n  t.notEqual(obj, instance.get(), 'two instance created')\n  t.notOk(obj.next, 'next must be null')\n\n  instance.release(obj)\n\n  // the internals keeps a hot copy ready for reuse\n  // putting this one back in the queue\n  instance.release(instance.get())\n\n  // comparing the old one with the one we got\n  // never do this in real code, after release you\n  // should never reuse that instance\n  t.equal(obj, instance.get(), 'instance must be reused')\n})\n\ntest('reuse more than 2 objects', function (t) {\n  function MyObject () {\n    t.pass('constructor called')\n    this.next = null\n  }\n\n  var instance = reusify(MyObject)\n  var obj = instance.get()\n  var obj2 = instance.get()\n  var obj3 = instance.get()\n\n  t.notOk(obj.next, 'next must be null')\n  t.notOk(obj2.next, 'next must be null')\n  t.notOk(obj3.next, 'next must be null')\n\n  t.notEqual(obj, obj2)\n  t.notEqual(obj, obj3)\n  t.notEqual(obj3, obj2)\n\n  instance.release(obj)\n  instance.release(obj2)\n  instance.release(obj3)\n\n  // skip one\n  instance.get()\n\n  var obj4 = instance.get()\n  var obj5 = instance.get()\n  var obj6 = instance.get()\n\n  t.equal(obj4, obj)\n  t.equal(obj5, obj2)\n  t.equal(obj6, obj3)\n  t.end()\n})\n#/benchmarks/createNoCodeFunction.js\u0002N'use strict'\n\nvar fib = require('./fib')\nvar max = 100000000\nvar start = Date.now()\n\n// create a funcion with the typical error\n// pattern, that delegates the heavy load\n// to something else\nfunction createNoCodeFunction () {\n  /* eslint no-constant-condition: \"off\" */\n  var num = 100\n\n  ;(function () {\n    if (null) {\n      // do nothing\n    } else {\n      fib(num)\n    }\n  })()\n}\n\nfor (var i = 0; i < max; i++) {\n  createNoCodeFunction()\n}\n\nvar time = Date.now() - start\nconsole.log('Total time', time)\nconsole.log('Total iterations', max)\nconsole.log('Iteration/s', max / time * 1000)\n/.coveralls.yml.repo_token: yIxhFqtaaz5iGVYfie9mODehFYogm8S8L\n/LICENSE\u0004:The MIT License (MIT)\n\nCopyright (c) 2015 Matteo Collina\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n/package.json\u0003{\n  \"name\": \"reusify\",\n  \"version\": \"1.0.4\",\n  \"description\": \"Reuse objects and functions with style\",\n  \"main\": \"reusify.js\",\n  \"scripts\": {\n    \"lint\": \"standard\",\n    \"test\": \"tape test.js | faucet\",\n    \"istanbul\": \"istanbul cover tape test.js\",\n    \"coverage\": \"npm run istanbul; cat coverage/lcov.info | coveralls\"\n  },\n  \"pre-commit\": [\n    \"lint\",\n    \"test\"\n  ],\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/mcollina/reusify.git\"\n  },\n  \"keywords\": [\n    \"reuse\",\n    \"object\",\n    \"performance\",\n    \"function\",\n    \"fast\"\n  ],\n  \"author\": \"Matteo Collina <hello@matteocollina.com>\",\n  \"license\": \"MIT\",\n  \"bugs\": {\n    \"url\": \"https://github.com/mcollina/reusify/issues\"\n  },\n  \"homepage\": \"https://github.com/mcollina/reusify#readme\",\n  \"engines\": {\n    \"node\": \">=0.10.0\",\n    \"iojs\": \">=1.0.0\"\n  },\n  \"devDependencies\": {\n    \"coveralls\": \"^2.13.3\",\n    \"faucet\": \"0.0.1\",\n    \"istanbul\": \"^0.4.5\",\n    \"pre-commit\": \"^1.2.2\",\n    \"standard\": \"^10.0.3\",\n    \"tape\": \"^4.8.0\"\n  }\n}\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/cmVhY3QtcmVmcmVzaEAwLjE0LjA=",
    "content": "*/cjs/react-refresh-babel.production.min.js\u001f/**\n * @license React\n * react-refresh-babel.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';module.exports=function(r){function t(a,b){var c=a.scope.generateUidIdentifier(\"c\");l.has(a)||l.set(a,[]);l.get(a).push({handle:c,persistentID:b});return c}function u(a){return\"string\"===typeof a&&\"A\"<=a[0]&&\"Z\">=a[0]}function m(a,b,c){var d=b.node;switch(d.type){case \"Identifier\":if(!u(d.name))break;c(a,d,null);return!0;case \"FunctionDeclaration\":return c(a,d.id,null),!0;case \"ArrowFunctionExpression\":if(\"ArrowFunctionExpression\"===d.body.type)break;c(a,d,b);return!0;case \"FunctionExpression\":return c(a,\nd,b),!0;case \"CallExpression\":var e=b.get(\"arguments\");if(void 0===e||0===e.length)break;var g=b.get(\"callee\");switch(g.node.type){case \"MemberExpression\":case \"Identifier\":g=g.getSource();if(!m(a+\"$\"+g,e[0],c))return!1;c(a,d,b);return!0;default:return!1}case \"VariableDeclarator\":if(e=d.init,null!==e&&(g=d.id.name,u(g))){switch(e.type){case \"ArrowFunctionExpression\":case \"FunctionExpression\":break;case \"CallExpression\":d=e.callee;var f=d.type;if(\"Import\"===f||\"Identifier\"===f&&(0===d.name.indexOf(\"require\")||\n0===d.name.indexOf(\"import\")))return!1;break;case \"TaggedTemplateExpression\":break;default:return!1}d=b.get(\"init\");if(m(a,d,c))return!0;g=b.scope.getBinding(g);if(void 0===g)return;b=!1;g=g.referencePaths;for(f=0;f<g.length;f++){var h=g[f];if(!h.node||\"JSXIdentifier\"===h.node.type||\"Identifier\"===h.node.type){h=h.parent;if(\"JSXOpeningElement\"===h.type)b=!0;else if(\"CallExpression\"===h.type){h=h.callee;var v=void 0;switch(h.type){case \"Identifier\":v=h.name;break;case \"MemberExpression\":v=h.property.name}switch(v){case \"createElement\":case \"jsx\":case \"jsxDEV\":case \"jsxs\":b=\n!0}}if(b)return c(a,e,d),!0}}}}return!1}function x(a){a=n.get(a);return void 0===a?null:{key:a.map(function(a){return a.name+\"{\"+a.key+\"}\"}).join(\"\\n\"),customHooks:a.filter(function(a){a:switch(a.name){case \"useState\":case \"React.useState\":case \"useReducer\":case \"React.useReducer\":case \"useEffect\":case \"React.useEffect\":case \"useLayoutEffect\":case \"React.useLayoutEffect\":case \"useMemo\":case \"React.useMemo\":case \"useCallback\":case \"React.useCallback\":case \"useRef\":case \"React.useRef\":case \"useContext\":case \"React.useContext\":case \"useImperativeHandle\":case \"React.useImperativeHandle\":case \"useDebugValue\":case \"React.useDebugValue\":a=\n!0;break a;default:a=!1}return!a}).map(function(a){return f.cloneDeep(a.callee)})}}function C(a){a=a.hub.file;var b=y.get(a);if(void 0!==b)return b;b=!1;for(var c=a.ast.comments,d=0;d<c.length;d++)if(-1!==c[d].value.indexOf(\"@refresh reset\")){b=!0;break}y.set(a,b);return b}function w(a,b,c){var d=b.key;b=b.customHooks;var e=C(c.path),g=[];b.forEach(function(a){switch(a.type){case \"MemberExpression\":if(\"Identifier\"===a.object.type)var b=a.object.name;break;case \"Identifier\":b=a.name}c.hasBinding(b)?\ng.push(a):e=!0});b=d;\"function\"!==typeof require||p.emitFullSignatures||(b=require(\"crypto\").createHash(\"sha1\").update(d).digest(\"base64\"));a=[a,f.stringLiteral(b)];(e||0<g.length)&&a.push(f.booleanLiteral(e));0<g.length&&a.push(f.functionExpression(null,[],f.blockStatement([f.returnStatement(f.arrayExpression(g))])));return a}function D(a){for(var b=[];;){if(!a)return b;var c=a.parentPath;if(!c)return b;if(\"AssignmentExpression\"===c.node.type&&a.node===c.node.right)a=c;else if(\"CallExpression\"===\nc.node.type&&a.node!==c.node.callee)b.push(c),a=c;else return b}}var p=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{};if(\"function\"===typeof r.env){var z=r.env();if(\"development\"!==z&&!p.skipEnvCheck)throw Error('React Refresh Babel transform should only be enabled in development environment. Instead, the environment is: \"'+z+'\". If you want to override this check, pass {skipEnvCheck: true} as plugin options.');}var f=r.types,E=f.identifier(p.refreshReg||\"$RefreshReg$\"),A=f.identifier(p.refreshSig||\n\"$RefreshSig$\"),l=new Map,y=new WeakMap,k=new WeakSet,q=new WeakSet,B=new WeakSet,n=new WeakMap,F={CallExpression:function(a){var b=a.node.callee,c=null;switch(b.type){case \"Identifier\":c=b.name;break;case \"MemberExpression\":c=b.property.name}if(null!==c&&/^use[A-Z]/.test(c)&&(b=a.scope.getFunctionParent(),null!==b)){b=b.block;n.has(b)||n.set(b,[]);b=n.get(b);var d=\"\";\"VariableDeclarator\"===a.parent.type&&(d=a.parentPath.get(\"id\").getSource());var e=a.get(\"arguments\");\"useState\"===c&&0<e.length?d+=\n\"(\"+e[0].getSource()+\")\":\"useReducer\"===c&&1<e.length&&(d+=\"(\"+e[1].getSource()+\")\");b.push({callee:a.node.callee,name:c,key:d})}}};return{visitor:{ExportDefaultDeclaration:function(a){var b=a.node,c=b.declaration,d=a.get(\"declaration\");if(\"CallExpression\"===c.type&&!k.has(b)){k.add(b);var e=a.parentPath;m(\"%default%\",d,function(a,b,d){null!==d&&(a=t(e,a),d.replaceWith(f.assignmentExpression(\"=\",a,b)))})}},FunctionDeclaration:{enter:function(a){var b=a.node,c=\"\";switch(a.parent.type){case \"Program\":var d=\na;var e=a.parentPath;break;case \"TSModuleBlock\":d=a;e=d.parentPath.parentPath;break;case \"ExportNamedDeclaration\":d=a.parentPath;e=d.parentPath;break;case \"ExportDefaultDeclaration\":d=a.parentPath;e=d.parentPath;break;default:return}if(\"TSModuleBlock\"===a.parent.type||\"ExportNamedDeclaration\"===a.parent.type)for(;\"Program\"!==e.type;){if(\"TSModuleDeclaration\"===e.type){if(\"Program\"!==e.parentPath.type&&\"ExportNamedDeclaration\"!==e.parentPath.type)return;c=e.node.id.name+\"$\"+c}e=e.parentPath}var g=\nb.id;null!==g&&(g=g.name,u(g)&&!k.has(b)&&(k.add(b),m(c+g,a,function(a,b){a=t(e,a);d.insertAfter(f.expressionStatement(f.assignmentExpression(\"=\",a,b)))})))},exit:function(a){var b=a.node,c=b.id;if(null!==c){var d=x(b);if(null!==d&&!q.has(b)){q.add(b);b=a.scope.generateUidIdentifier(\"_s\");a.scope.parent.push({id:b,init:f.callExpression(A,[])});a.get(\"body\").unshiftContainer(\"body\",f.expressionStatement(f.callExpression(b,[])));var e=null;a.find(function(a){if(a.parentPath.isBlock())return e=a,!0});\nnull!==e&&e.insertAfter(f.expressionStatement(f.callExpression(b,w(c,d,e.scope))))}}}},\"ArrowFunctionExpression|FunctionExpression\":{exit:function(a){var b=a.node,c=x(b);if(null!==c&&!q.has(b)){q.add(b);var d=a.scope.generateUidIdentifier(\"_s\");a.scope.parent.push({id:d,init:f.callExpression(A,[])});\"BlockStatement\"!==a.node.body.type&&(a.node.body=f.blockStatement([f.returnStatement(a.node.body)]));a.get(\"body\").unshiftContainer(\"body\",f.expressionStatement(f.callExpression(d,[])));if(\"VariableDeclarator\"===\na.parent.type){var e=null;a.find(function(a){if(a.parentPath.isBlock())return e=a,!0});null!==e&&e.insertAfter(f.expressionStatement(f.callExpression(d,w(a.parent.id,c,e.scope))))}else[a].concat(D(a)).forEach(function(a){a.replaceWith(f.callExpression(d,w(a.node,c,a.scope)))})}}},VariableDeclaration:function(a){var b=a.node,c=\"\";switch(a.parent.type){case \"Program\":var d=a;var e=a.parentPath;break;case \"TSModuleBlock\":d=a;e=d.parentPath.parentPath;break;case \"ExportNamedDeclaration\":d=a.parentPath;\ne=d.parentPath;break;case \"ExportDefaultDeclaration\":d=a.parentPath;e=d.parentPath;break;default:return}if(\"TSModuleBlock\"===a.parent.type||\"ExportNamedDeclaration\"===a.parent.type)for(;\"Program\"!==e.type;){if(\"TSModuleDeclaration\"===e.type){if(\"Program\"!==e.parentPath.type&&\"ExportNamedDeclaration\"!==e.parentPath.type)return;c=e.node.id.name+\"$\"+c}e=e.parentPath}if(!k.has(b)&&(k.add(b),a=a.get(\"declarations\"),1===a.length)){var g=a[0];m(c+g.node.id.name,g,function(a,b,c){null!==c&&(a=t(e,a),\"VariableDeclarator\"===\nc.parent.type?d.insertAfter(f.expressionStatement(f.assignmentExpression(\"=\",a,g.node.id))):c.replaceWith(f.assignmentExpression(\"=\",a,b)))})}},Program:{enter:function(a){a.traverse(F)},exit:function(a){var b=l.get(a);if(void 0!==b){var c=a.node;if(!B.has(c)){B.add(c);l.delete(a);var d=[];a.pushContainer(\"body\",f.variableDeclaration(\"var\",d));b.forEach(function(b){var c=b.handle;a.pushContainer(\"body\",f.expressionStatement(f.callExpression(E,[c,f.stringLiteral(b.persistentID)])));d.push(f.variableDeclarator(c))})}}}}}}};\n'/cjs/react-refresh-babel.development.jsh/**\n * @license React\n * react-refresh-babel.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nif (process.env.NODE_ENV !== \"production\") {\n  (function() {\n'use strict';\n\nfunction ReactFreshBabelPlugin (babel) {\n  var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  if (typeof babel.env === 'function') {\n    // Only available in Babel 7.\n    var env = babel.env();\n\n    if (env !== 'development' && !opts.skipEnvCheck) {\n      throw new Error('React Refresh Babel transform should only be enabled in development environment. ' + 'Instead, the environment is: \"' + env + '\". If you want to override this check, pass {skipEnvCheck: true} as plugin options.');\n    }\n  }\n\n  var t = babel.types;\n  var refreshReg = t.identifier(opts.refreshReg || '$RefreshReg$');\n  var refreshSig = t.identifier(opts.refreshSig || '$RefreshSig$');\n  var registrationsByProgramPath = new Map();\n\n  function createRegistration(programPath, persistentID) {\n    var handle = programPath.scope.generateUidIdentifier('c');\n\n    if (!registrationsByProgramPath.has(programPath)) {\n      registrationsByProgramPath.set(programPath, []);\n    }\n\n    var registrations = registrationsByProgramPath.get(programPath);\n    registrations.push({\n      handle: handle,\n      persistentID: persistentID\n    });\n    return handle;\n  }\n\n  function isComponentishName(name) {\n    return typeof name === 'string' && name[0] >= 'A' && name[0] <= 'Z';\n  }\n\n  function findInnerComponents(inferredName, path, callback) {\n    var node = path.node;\n\n    switch (node.type) {\n      case 'Identifier':\n        {\n          if (!isComponentishName(node.name)) {\n            return false;\n          } // export default hoc(Foo)\n          // const X = hoc(Foo)\n\n\n          callback(inferredName, node, null);\n          return true;\n        }\n\n      case 'FunctionDeclaration':\n        {\n          // function Foo() {}\n          // export function Foo() {}\n          // export default function Foo() {}\n          callback(inferredName, node.id, null);\n          return true;\n        }\n\n      case 'ArrowFunctionExpression':\n        {\n          if (node.body.type === 'ArrowFunctionExpression') {\n            return false;\n          } // let Foo = () => {}\n          // export default hoc1(hoc2(() => {}))\n\n\n          callback(inferredName, node, path);\n          return true;\n        }\n\n      case 'FunctionExpression':\n        {\n          // let Foo = function() {}\n          // const Foo = hoc1(forwardRef(function renderFoo() {}))\n          // export default memo(function() {})\n          callback(inferredName, node, path);\n          return true;\n        }\n\n      case 'CallExpression':\n        {\n          var argsPath = path.get('arguments');\n\n          if (argsPath === undefined || argsPath.length === 0) {\n            return false;\n          }\n\n          var calleePath = path.get('callee');\n\n          switch (calleePath.node.type) {\n            case 'MemberExpression':\n            case 'Identifier':\n              {\n                var calleeSource = calleePath.getSource();\n                var firstArgPath = argsPath[0];\n                var innerName = inferredName + '$' + calleeSource;\n                var foundInside = findInnerComponents(innerName, firstArgPath, callback);\n\n                if (!foundInside) {\n                  return false;\n                } // const Foo = hoc1(hoc2(() => {}))\n                // export default memo(React.forwardRef(function() {}))\n\n\n                callback(inferredName, node, path);\n                return true;\n              }\n\n            default:\n              {\n                return false;\n              }\n          }\n        }\n\n      case 'VariableDeclarator':\n        {\n          var init = node.init;\n\n          if (init === null) {\n            return false;\n          }\n\n          var name = node.id.name;\n\n          if (!isComponentishName(name)) {\n            return false;\n          }\n\n          switch (init.type) {\n            case 'ArrowFunctionExpression':\n            case 'FunctionExpression':\n              // Likely component definitions.\n              break;\n\n            case 'CallExpression':\n              {\n                // Maybe a HOC.\n                // Try to determine if this is some form of import.\n                var callee = init.callee;\n                var calleeType = callee.type;\n\n                if (calleeType === 'Import') {\n                  return false;\n                } else if (calleeType === 'Identifier') {\n                  if (callee.name.indexOf('require') === 0) {\n                    return false;\n                  } else if (callee.name.indexOf('import') === 0) {\n                    return false;\n                  } // Neither require nor import. Might be a HOC.\n                  // Pass through.\n\n                }\n\n                break;\n              }\n\n            case 'TaggedTemplateExpression':\n              // Maybe something like styled.div`...`\n              break;\n\n            default:\n              return false;\n          }\n\n          var initPath = path.get('init');\n\n          var _foundInside = findInnerComponents(inferredName, initPath, callback);\n\n          if (_foundInside) {\n            return true;\n          } // See if this identifier is used in JSX. Then it's a component.\n\n\n          var binding = path.scope.getBinding(name);\n\n          if (binding === undefined) {\n            return;\n          }\n\n          var isLikelyUsedAsType = false;\n          var referencePaths = binding.referencePaths;\n\n          for (var i = 0; i < referencePaths.length; i++) {\n            var ref = referencePaths[i];\n\n            if (ref.node && ref.node.type !== 'JSXIdentifier' && ref.node.type !== 'Identifier') {\n              continue;\n            }\n\n            var refParent = ref.parent;\n\n            if (refParent.type === 'JSXOpeningElement') {\n              isLikelyUsedAsType = true;\n            } else if (refParent.type === 'CallExpression') {\n              var _callee = refParent.callee;\n              var fnName = void 0;\n\n              switch (_callee.type) {\n                case 'Identifier':\n                  fnName = _callee.name;\n                  break;\n\n                case 'MemberExpression':\n                  fnName = _callee.property.name;\n                  break;\n              }\n\n              switch (fnName) {\n                case 'createElement':\n                case 'jsx':\n                case 'jsxDEV':\n                case 'jsxs':\n                  isLikelyUsedAsType = true;\n                  break;\n              }\n            }\n\n            if (isLikelyUsedAsType) {\n              // const X = ... + later <X />\n              callback(inferredName, init, initPath);\n              return true;\n            }\n          }\n        }\n    }\n\n    return false;\n  }\n\n  function isBuiltinHook(hookName) {\n    switch (hookName) {\n      case 'useState':\n      case 'React.useState':\n      case 'useReducer':\n      case 'React.useReducer':\n      case 'useEffect':\n      case 'React.useEffect':\n      case 'useLayoutEffect':\n      case 'React.useLayoutEffect':\n      case 'useMemo':\n      case 'React.useMemo':\n      case 'useCallback':\n      case 'React.useCallback':\n      case 'useRef':\n      case 'React.useRef':\n      case 'useContext':\n      case 'React.useContext':\n      case 'useImperativeHandle':\n      case 'React.useImperativeHandle':\n      case 'useDebugValue':\n      case 'React.useDebugValue':\n        return true;\n\n      default:\n        return false;\n    }\n  }\n\n  function getHookCallsSignature(functionNode) {\n    var fnHookCalls = hookCalls.get(functionNode);\n\n    if (fnHookCalls === undefined) {\n      return null;\n    }\n\n    return {\n      key: fnHookCalls.map(function (call) {\n        return call.name + '{' + call.key + '}';\n      }).join('\\n'),\n      customHooks: fnHookCalls.filter(function (call) {\n        return !isBuiltinHook(call.name);\n      }).map(function (call) {\n        return t.cloneDeep(call.callee);\n      })\n    };\n  }\n\n  var hasForceResetCommentByFile = new WeakMap(); // We let user do /* @refresh reset */ to reset state in the whole file.\n\n  function hasForceResetComment(path) {\n    var file = path.hub.file;\n    var hasForceReset = hasForceResetCommentByFile.get(file);\n\n    if (hasForceReset !== undefined) {\n      return hasForceReset;\n    }\n\n    hasForceReset = false;\n    var comments = file.ast.comments;\n\n    for (var i = 0; i < comments.length; i++) {\n      var cmt = comments[i];\n\n      if (cmt.value.indexOf('@refresh reset') !== -1) {\n        hasForceReset = true;\n        break;\n      }\n    }\n\n    hasForceResetCommentByFile.set(file, hasForceReset);\n    return hasForceReset;\n  }\n\n  function createArgumentsForSignature(node, signature, scope) {\n    var key = signature.key,\n        customHooks = signature.customHooks;\n    var forceReset = hasForceResetComment(scope.path);\n    var customHooksInScope = [];\n    customHooks.forEach(function (callee) {\n      // Check if a corresponding binding exists where we emit the signature.\n      var bindingName;\n\n      switch (callee.type) {\n        case 'MemberExpression':\n          if (callee.object.type === 'Identifier') {\n            bindingName = callee.object.name;\n          }\n\n          break;\n\n        case 'Identifier':\n          bindingName = callee.name;\n          break;\n      }\n\n      if (scope.hasBinding(bindingName)) {\n        customHooksInScope.push(callee);\n      } else {\n        // We don't have anything to put in the array because Hook is out of scope.\n        // Since it could potentially have been edited, remount the component.\n        forceReset = true;\n      }\n    });\n    var finalKey = key;\n\n    if (typeof require === 'function' && !opts.emitFullSignatures) {\n      // Prefer to hash when we can (e.g. outside of ASTExplorer).\n      // This makes it deterministically compact, even if there's\n      // e.g. a useState initializer with some code inside.\n      // We also need it for www that has transforms like cx()\n      // that don't understand if something is part of a string.\n      finalKey = require('crypto').createHash('sha1').update(key).digest('base64');\n    }\n\n    var args = [node, t.stringLiteral(finalKey)];\n\n    if (forceReset || customHooksInScope.length > 0) {\n      args.push(t.booleanLiteral(forceReset));\n    }\n\n    if (customHooksInScope.length > 0) {\n      args.push( // TODO: We could use an arrow here to be more compact.\n      // However, don't do it until AMA can run them natively.\n      t.functionExpression(null, [], t.blockStatement([t.returnStatement(t.arrayExpression(customHooksInScope))])));\n    }\n\n    return args;\n  }\n\n  function findHOCCallPathsAbove(path) {\n    var calls = [];\n\n    while (true) {\n      if (!path) {\n        return calls;\n      }\n\n      var parentPath = path.parentPath;\n\n      if (!parentPath) {\n        return calls;\n      }\n\n      if ( // hoc(_c = function() { })\n      parentPath.node.type === 'AssignmentExpression' && path.node === parentPath.node.right) {\n        // Ignore registrations.\n        path = parentPath;\n        continue;\n      }\n\n      if ( // hoc1(hoc2(...))\n      parentPath.node.type === 'CallExpression' && path.node !== parentPath.node.callee) {\n        calls.push(parentPath);\n        path = parentPath;\n        continue;\n      }\n\n      return calls; // Stop at other types.\n    }\n  }\n\n  var seenForRegistration = new WeakSet();\n  var seenForSignature = new WeakSet();\n  var seenForOutro = new WeakSet();\n  var hookCalls = new WeakMap();\n  var HookCallsVisitor = {\n    CallExpression: function (path) {\n      var node = path.node;\n      var callee = node.callee; // Note: this visitor MUST NOT mutate the tree in any way.\n      // It runs early in a separate traversal and should be very fast.\n\n      var name = null;\n\n      switch (callee.type) {\n        case 'Identifier':\n          name = callee.name;\n          break;\n\n        case 'MemberExpression':\n          name = callee.property.name;\n          break;\n      }\n\n      if (name === null || !/^use[A-Z]/.test(name)) {\n        return;\n      }\n\n      var fnScope = path.scope.getFunctionParent();\n\n      if (fnScope === null) {\n        return;\n      } // This is a Hook call. Record it.\n\n\n      var fnNode = fnScope.block;\n\n      if (!hookCalls.has(fnNode)) {\n        hookCalls.set(fnNode, []);\n      }\n\n      var hookCallsForFn = hookCalls.get(fnNode);\n      var key = '';\n\n      if (path.parent.type === 'VariableDeclarator') {\n        // TODO: if there is no LHS, consider some other heuristic.\n        key = path.parentPath.get('id').getSource();\n      } // Some built-in Hooks reset on edits to arguments.\n\n\n      var args = path.get('arguments');\n\n      if (name === 'useState' && args.length > 0) {\n        // useState second argument is initial state.\n        key += '(' + args[0].getSource() + ')';\n      } else if (name === 'useReducer' && args.length > 1) {\n        // useReducer second argument is initial state.\n        key += '(' + args[1].getSource() + ')';\n      }\n\n      hookCallsForFn.push({\n        callee: path.node.callee,\n        name: name,\n        key: key\n      });\n    }\n  };\n  return {\n    visitor: {\n      ExportDefaultDeclaration: function (path) {\n        var node = path.node;\n        var decl = node.declaration;\n        var declPath = path.get('declaration');\n\n        if (decl.type !== 'CallExpression') {\n          // For now, we only support possible HOC calls here.\n          // Named function declarations are handled in FunctionDeclaration.\n          // Anonymous direct exports like export default function() {}\n          // are currently ignored.\n          return;\n        } // Make sure we're not mutating the same tree twice.\n        // This can happen if another Babel plugin replaces parents.\n\n\n        if (seenForRegistration.has(node)) {\n          return;\n        }\n\n        seenForRegistration.add(node); // Don't mutate the tree above this point.\n        // This code path handles nested cases like:\n        // export default memo(() => {})\n        // In those cases it is more plausible people will omit names\n        // so they're worth handling despite possible false positives.\n        // More importantly, it handles the named case:\n        // export default memo(function Named() {})\n\n        var inferredName = '%default%';\n        var programPath = path.parentPath;\n        findInnerComponents(inferredName, declPath, function (persistentID, targetExpr, targetPath) {\n          if (targetPath === null) {\n            // For case like:\n            // export default hoc(Foo)\n            // we don't want to wrap Foo inside the call.\n            // Instead we assume it's registered at definition.\n            return;\n          }\n\n          var handle = createRegistration(programPath, persistentID);\n          targetPath.replaceWith(t.assignmentExpression('=', handle, targetExpr));\n        });\n      },\n      FunctionDeclaration: {\n        enter: function (path) {\n          var node = path.node;\n          var programPath;\n          var insertAfterPath;\n          var modulePrefix = '';\n\n          switch (path.parent.type) {\n            case 'Program':\n              insertAfterPath = path;\n              programPath = path.parentPath;\n              break;\n\n            case 'TSModuleBlock':\n              insertAfterPath = path;\n              programPath = insertAfterPath.parentPath.parentPath;\n              break;\n\n            case 'ExportNamedDeclaration':\n              insertAfterPath = path.parentPath;\n              programPath = insertAfterPath.parentPath;\n              break;\n\n            case 'ExportDefaultDeclaration':\n              insertAfterPath = path.parentPath;\n              programPath = insertAfterPath.parentPath;\n              break;\n\n            default:\n              return;\n          } // These types can be nested in typescript namespace\n          // We need to find the export chain\n          // Or return if it stays local\n\n\n          if (path.parent.type === 'TSModuleBlock' || path.parent.type === 'ExportNamedDeclaration') {\n            while (programPath.type !== 'Program') {\n              if (programPath.type === 'TSModuleDeclaration') {\n                if (programPath.parentPath.type !== 'Program' && programPath.parentPath.type !== 'ExportNamedDeclaration') {\n                  return;\n                }\n\n                modulePrefix = programPath.node.id.name + '$' + modulePrefix;\n              }\n\n              programPath = programPath.parentPath;\n            }\n          }\n\n          var id = node.id;\n\n          if (id === null) {\n            // We don't currently handle anonymous default exports.\n            return;\n          }\n\n          var inferredName = id.name;\n\n          if (!isComponentishName(inferredName)) {\n            return;\n          } // Make sure we're not mutating the same tree twice.\n          // This can happen if another Babel plugin replaces parents.\n\n\n          if (seenForRegistration.has(node)) {\n            return;\n          }\n\n          seenForRegistration.add(node); // Don't mutate the tree above this point.\n\n          var innerName = modulePrefix + inferredName; // export function Named() {}\n          // function Named() {}\n\n          findInnerComponents(innerName, path, function (persistentID, targetExpr) {\n            var handle = createRegistration(programPath, persistentID);\n            insertAfterPath.insertAfter(t.expressionStatement(t.assignmentExpression('=', handle, targetExpr)));\n          });\n        },\n        exit: function (path) {\n          var node = path.node;\n          var id = node.id;\n\n          if (id === null) {\n            return;\n          }\n\n          var signature = getHookCallsSignature(node);\n\n          if (signature === null) {\n            return;\n          } // Make sure we're not mutating the same tree twice.\n          // This can happen if another Babel plugin replaces parents.\n\n\n          if (seenForSignature.has(node)) {\n            return;\n          }\n\n          seenForSignature.add(node); // Don't mutate the tree above this point.\n\n          var sigCallID = path.scope.generateUidIdentifier('_s');\n          path.scope.parent.push({\n            id: sigCallID,\n            init: t.callExpression(refreshSig, [])\n          }); // The signature call is split in two parts. One part is called inside the function.\n          // This is used to signal when first render happens.\n\n          path.get('body').unshiftContainer('body', t.expressionStatement(t.callExpression(sigCallID, []))); // The second call is around the function itself.\n          // This is used to associate a type with a signature.\n          // Unlike with $RefreshReg$, this needs to work for nested\n          // declarations too. So we need to search for a path where\n          // we can insert a statement rather than hard coding it.\n\n          var insertAfterPath = null;\n          path.find(function (p) {\n            if (p.parentPath.isBlock()) {\n              insertAfterPath = p;\n              return true;\n            }\n          });\n\n          if (insertAfterPath === null) {\n            return;\n          }\n\n          insertAfterPath.insertAfter(t.expressionStatement(t.callExpression(sigCallID, createArgumentsForSignature(id, signature, insertAfterPath.scope))));\n        }\n      },\n      'ArrowFunctionExpression|FunctionExpression': {\n        exit: function (path) {\n          var node = path.node;\n          var signature = getHookCallsSignature(node);\n\n          if (signature === null) {\n            return;\n          } // Make sure we're not mutating the same tree twice.\n          // This can happen if another Babel plugin replaces parents.\n\n\n          if (seenForSignature.has(node)) {\n            return;\n          }\n\n          seenForSignature.add(node); // Don't mutate the tree above this point.\n\n          var sigCallID = path.scope.generateUidIdentifier('_s');\n          path.scope.parent.push({\n            id: sigCallID,\n            init: t.callExpression(refreshSig, [])\n          }); // The signature call is split in two parts. One part is called inside the function.\n          // This is used to signal when first render happens.\n\n          if (path.node.body.type !== 'BlockStatement') {\n            path.node.body = t.blockStatement([t.returnStatement(path.node.body)]);\n          }\n\n          path.get('body').unshiftContainer('body', t.expressionStatement(t.callExpression(sigCallID, []))); // The second call is around the function itself.\n          // This is used to associate a type with a signature.\n\n          if (path.parent.type === 'VariableDeclarator') {\n            var insertAfterPath = null;\n            path.find(function (p) {\n              if (p.parentPath.isBlock()) {\n                insertAfterPath = p;\n                return true;\n              }\n            });\n\n            if (insertAfterPath === null) {\n              return;\n            } // Special case when a function would get an inferred name:\n            // let Foo = () => {}\n            // let Foo = function() {}\n            // We'll add signature it on next line so that\n            // we don't mess up the inferred 'Foo' function name.\n\n\n            insertAfterPath.insertAfter(t.expressionStatement(t.callExpression(sigCallID, createArgumentsForSignature(path.parent.id, signature, insertAfterPath.scope)))); // Result: let Foo = () => {}; __signature(Foo, ...);\n          } else {\n            // let Foo = hoc(() => {})\n            var paths = [path].concat(findHOCCallPathsAbove(path));\n            paths.forEach(function (p) {\n              p.replaceWith(t.callExpression(sigCallID, createArgumentsForSignature(p.node, signature, p.scope)));\n            }); // Result: let Foo = __signature(hoc(__signature(() => {}, ...)), ...)\n          }\n        }\n      },\n      VariableDeclaration: function (path) {\n        var node = path.node;\n        var programPath;\n        var insertAfterPath;\n        var modulePrefix = '';\n\n        switch (path.parent.type) {\n          case 'Program':\n            insertAfterPath = path;\n            programPath = path.parentPath;\n            break;\n\n          case 'TSModuleBlock':\n            insertAfterPath = path;\n            programPath = insertAfterPath.parentPath.parentPath;\n            break;\n\n          case 'ExportNamedDeclaration':\n            insertAfterPath = path.parentPath;\n            programPath = insertAfterPath.parentPath;\n            break;\n\n          case 'ExportDefaultDeclaration':\n            insertAfterPath = path.parentPath;\n            programPath = insertAfterPath.parentPath;\n            break;\n\n          default:\n            return;\n        } // These types can be nested in typescript namespace\n        // We need to find the export chain\n        // Or return if it stays local\n\n\n        if (path.parent.type === 'TSModuleBlock' || path.parent.type === 'ExportNamedDeclaration') {\n          while (programPath.type !== 'Program') {\n            if (programPath.type === 'TSModuleDeclaration') {\n              if (programPath.parentPath.type !== 'Program' && programPath.parentPath.type !== 'ExportNamedDeclaration') {\n                return;\n              }\n\n              modulePrefix = programPath.node.id.name + '$' + modulePrefix;\n            }\n\n            programPath = programPath.parentPath;\n          }\n        } // Make sure we're not mutating the same tree twice.\n        // This can happen if another Babel plugin replaces parents.\n\n\n        if (seenForRegistration.has(node)) {\n          return;\n        }\n\n        seenForRegistration.add(node); // Don't mutate the tree above this point.\n\n        var declPaths = path.get('declarations');\n\n        if (declPaths.length !== 1) {\n          return;\n        }\n\n        var declPath = declPaths[0];\n        var inferredName = declPath.node.id.name;\n        var innerName = modulePrefix + inferredName;\n        findInnerComponents(innerName, declPath, function (persistentID, targetExpr, targetPath) {\n          if (targetPath === null) {\n            // For case like:\n            // export const Something = hoc(Foo)\n            // we don't want to wrap Foo inside the call.\n            // Instead we assume it's registered at definition.\n            return;\n          }\n\n          var handle = createRegistration(programPath, persistentID);\n\n          if (targetPath.parent.type === 'VariableDeclarator') {\n            // Special case when a variable would get an inferred name:\n            // let Foo = () => {}\n            // let Foo = function() {}\n            // let Foo = styled.div``;\n            // We'll register it on next line so that\n            // we don't mess up the inferred 'Foo' function name.\n            // (eg: with @babel/plugin-transform-react-display-name or\n            // babel-plugin-styled-components)\n            insertAfterPath.insertAfter(t.expressionStatement(t.assignmentExpression('=', handle, declPath.node.id))); // Result: let Foo = () => {}; _c1 = Foo;\n          } else {\n            // let Foo = hoc(() => {})\n            targetPath.replaceWith(t.assignmentExpression('=', handle, targetExpr)); // Result: let Foo = hoc(_c1 = () => {})\n          }\n        });\n      },\n      Program: {\n        enter: function (path) {\n          // This is a separate early visitor because we need to collect Hook calls\n          // and \"const [foo, setFoo] = ...\" signatures before the destructuring\n          // transform mangles them. This extra traversal is not ideal for perf,\n          // but it's the best we can do until we stop transpiling destructuring.\n          path.traverse(HookCallsVisitor);\n        },\n        exit: function (path) {\n          var registrations = registrationsByProgramPath.get(path);\n\n          if (registrations === undefined) {\n            return;\n          } // Make sure we're not mutating the same tree twice.\n          // This can happen if another Babel plugin replaces parents.\n\n\n          var node = path.node;\n\n          if (seenForOutro.has(node)) {\n            return;\n          }\n\n          seenForOutro.add(node); // Don't mutate the tree above this point.\n\n          registrationsByProgramPath.delete(path);\n          var declarators = [];\n          path.pushContainer('body', t.variableDeclaration('var', declarators));\n          registrations.forEach(function (_ref) {\n            var handle = _ref.handle,\n                persistentID = _ref.persistentID;\n            path.pushContainer('body', t.expressionStatement(t.callExpression(refreshReg, [handle, t.stringLiteral(persistentID)])));\n            declarators.push(t.variableDeclarator(handle));\n          });\n        }\n      }\n    }\n  };\n}\n\nmodule.exports = ReactFreshBabelPlugin;\n  })();\n}\n/babel.js'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react-refresh-babel.production.min.js');\n} else {\n  module.exports = require('./cjs/react-refresh-babel.development.js');\n}\n,/cjs/react-refresh-runtime.production.min.js\u0001a/**\n * @license React\n * react-refresh-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';throw Error(\"React Refresh runtime should not be included in the production bundle.\");\n/runtime.js'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react-refresh-runtime.production.min.js');\n} else {\n  module.exports = require('./cjs/react-refresh-runtime.development.js');\n}\n/LICENSE\u0004>MIT License\n\nCopyright (c) Facebook, Inc. and its affiliates.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n/package.json\u0003r{\n  \"name\": \"react-refresh\",\n  \"description\": \"React is a JavaScript library for building user interfaces.\",\n  \"keywords\": [\n    \"react\"\n  ],\n  \"version\": \"0.14.0\",\n  \"homepage\": \"https://reactjs.org/\",\n  \"bugs\": \"https://github.com/facebook/react/issues\",\n  \"license\": \"MIT\",\n  \"files\": [\n    \"LICENSE\",\n    \"README.md\",\n    \"babel.js\",\n    \"runtime.js\",\n    \"cjs/\",\n    \"umd/\"\n  ],\n  \"main\": \"runtime.js\",\n  \"exports\": {\n    \".\": \"./runtime.js\",\n    \"./runtime\": \"./runtime.js\",\n    \"./babel\": \"./babel.js\",\n    \"./package.json\": \"./package.json\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/facebook/react.git\",\n    \"directory\": \"packages/react\"\n  },\n  \"engines\": {\n    \"node\": \">=0.10.0\"\n  },\n  \"devDependencies\": {\n    \"react-16-8\": \"npm:react@16.8.0\",\n    \"react-dom-16-8\": \"npm:react-dom@16.8.0\",\n    \"scheduler-0-13\": \"npm:scheduler@0.13.0\"\n  }\n}/README.md\u0002H# react-refresh\n\nThis package implements the wiring necessary to integrate Fast Refresh into bundlers. Fast Refresh is a feature that lets you edit React components in a running application without losing their state. It is similar to an old feature known as \"hot reloading\", but Fast Refresh is more reliable and officially supported by React.\n\nThis package is primarily aimed at developers of bundler plugins. If you’re working on one, here is a [rough guide](https://github.com/facebook/react/issues/16604#issuecomment-528663101) for Fast Refresh integration using this package.\n)/cjs/react-refresh-runtime.development.jsO/**\n * @license React\n * react-refresh-runtime.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nif (process.env.NODE_ENV !== \"production\") {\n  (function() {\n'use strict';\n\n// ATTENTION\nvar REACT_FORWARD_REF_TYPE = Symbol.for('react.forward_ref');\nvar REACT_MEMO_TYPE = Symbol.for('react.memo');\n\nvar PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map; // We never remove these associations.\n// It's OK to reference families, but use WeakMap/Set for types.\n\nvar allFamiliesByID = new Map();\nvar allFamiliesByType = new PossiblyWeakMap();\nvar allSignaturesByType = new PossiblyWeakMap(); // This WeakMap is read by React, so we only put families\n// that have actually been edited here. This keeps checks fast.\n// $FlowIssue\n\nvar updatedFamiliesByType = new PossiblyWeakMap(); // This is cleared on every performReactRefresh() call.\n// It is an array of [Family, NextType] tuples.\n\nvar pendingUpdates = []; // This is injected by the renderer via DevTools global hook.\n\nvar helpersByRendererID = new Map();\nvar helpersByRoot = new Map(); // We keep track of mounted roots so we can schedule updates.\n\nvar mountedRoots = new Set(); // If a root captures an error, we remember it so we can retry on edit.\n\nvar failedRoots = new Set(); // In environments that support WeakMap, we also remember the last element for every root.\n// It needs to be weak because we do this even for roots that failed to mount.\n// If there is no WeakMap, we won't attempt to do retrying.\n// $FlowIssue\n\nvar rootElements = // $FlowIssue\ntypeof WeakMap === 'function' ? new WeakMap() : null;\nvar isPerformingRefresh = false;\n\nfunction computeFullKey(signature) {\n  if (signature.fullKey !== null) {\n    return signature.fullKey;\n  }\n\n  var fullKey = signature.ownKey;\n  var hooks;\n\n  try {\n    hooks = signature.getCustomHooks();\n  } catch (err) {\n    // This can happen in an edge case, e.g. if expression like Foo.useSomething\n    // depends on Foo which is lazily initialized during rendering.\n    // In that case just assume we'll have to remount.\n    signature.forceReset = true;\n    signature.fullKey = fullKey;\n    return fullKey;\n  }\n\n  for (var i = 0; i < hooks.length; i++) {\n    var hook = hooks[i];\n\n    if (typeof hook !== 'function') {\n      // Something's wrong. Assume we need to remount.\n      signature.forceReset = true;\n      signature.fullKey = fullKey;\n      return fullKey;\n    }\n\n    var nestedHookSignature = allSignaturesByType.get(hook);\n\n    if (nestedHookSignature === undefined) {\n      // No signature means Hook wasn't in the source code, e.g. in a library.\n      // We'll skip it because we can assume it won't change during this session.\n      continue;\n    }\n\n    var nestedHookKey = computeFullKey(nestedHookSignature);\n\n    if (nestedHookSignature.forceReset) {\n      signature.forceReset = true;\n    }\n\n    fullKey += '\\n---\\n' + nestedHookKey;\n  }\n\n  signature.fullKey = fullKey;\n  return fullKey;\n}\n\nfunction haveEqualSignatures(prevType, nextType) {\n  var prevSignature = allSignaturesByType.get(prevType);\n  var nextSignature = allSignaturesByType.get(nextType);\n\n  if (prevSignature === undefined && nextSignature === undefined) {\n    return true;\n  }\n\n  if (prevSignature === undefined || nextSignature === undefined) {\n    return false;\n  }\n\n  if (computeFullKey(prevSignature) !== computeFullKey(nextSignature)) {\n    return false;\n  }\n\n  if (nextSignature.forceReset) {\n    return false;\n  }\n\n  return true;\n}\n\nfunction isReactClass(type) {\n  return type.prototype && type.prototype.isReactComponent;\n}\n\nfunction canPreserveStateBetween(prevType, nextType) {\n  if (isReactClass(prevType) || isReactClass(nextType)) {\n    return false;\n  }\n\n  if (haveEqualSignatures(prevType, nextType)) {\n    return true;\n  }\n\n  return false;\n}\n\nfunction resolveFamily(type) {\n  // Only check updated types to keep lookups fast.\n  return updatedFamiliesByType.get(type);\n} // If we didn't care about IE11, we could use new Map/Set(iterable).\n\n\nfunction cloneMap(map) {\n  var clone = new Map();\n  map.forEach(function (value, key) {\n    clone.set(key, value);\n  });\n  return clone;\n}\n\nfunction cloneSet(set) {\n  var clone = new Set();\n  set.forEach(function (value) {\n    clone.add(value);\n  });\n  return clone;\n} // This is a safety mechanism to protect against rogue getters and Proxies.\n\n\nfunction getProperty(object, property) {\n  try {\n    return object[property];\n  } catch (err) {\n    // Intentionally ignore.\n    return undefined;\n  }\n}\n\nfunction performReactRefresh() {\n\n  if (pendingUpdates.length === 0) {\n    return null;\n  }\n\n  if (isPerformingRefresh) {\n    return null;\n  }\n\n  isPerformingRefresh = true;\n\n  try {\n    var staleFamilies = new Set();\n    var updatedFamilies = new Set();\n    var updates = pendingUpdates;\n    pendingUpdates = [];\n    updates.forEach(function (_ref) {\n      var family = _ref[0],\n          nextType = _ref[1];\n      // Now that we got a real edit, we can create associations\n      // that will be read by the React reconciler.\n      var prevType = family.current;\n      updatedFamiliesByType.set(prevType, family);\n      updatedFamiliesByType.set(nextType, family);\n      family.current = nextType; // Determine whether this should be a re-render or a re-mount.\n\n      if (canPreserveStateBetween(prevType, nextType)) {\n        updatedFamilies.add(family);\n      } else {\n        staleFamilies.add(family);\n      }\n    }); // TODO: rename these fields to something more meaningful.\n\n    var update = {\n      updatedFamilies: updatedFamilies,\n      // Families that will re-render preserving state\n      staleFamilies: staleFamilies // Families that will be remounted\n\n    };\n    helpersByRendererID.forEach(function (helpers) {\n      // Even if there are no roots, set the handler on first update.\n      // This ensures that if *new* roots are mounted, they'll use the resolve handler.\n      helpers.setRefreshHandler(resolveFamily);\n    });\n    var didError = false;\n    var firstError = null; // We snapshot maps and sets that are mutated during commits.\n    // If we don't do this, there is a risk they will be mutated while\n    // we iterate over them. For example, trying to recover a failed root\n    // may cause another root to be added to the failed list -- an infinite loop.\n\n    var failedRootsSnapshot = cloneSet(failedRoots);\n    var mountedRootsSnapshot = cloneSet(mountedRoots);\n    var helpersByRootSnapshot = cloneMap(helpersByRoot);\n    failedRootsSnapshot.forEach(function (root) {\n      var helpers = helpersByRootSnapshot.get(root);\n\n      if (helpers === undefined) {\n        throw new Error('Could not find helpers for a root. This is a bug in React Refresh.');\n      }\n\n      if (!failedRoots.has(root)) {// No longer failed.\n      }\n\n      if (rootElements === null) {\n        return;\n      }\n\n      if (!rootElements.has(root)) {\n        return;\n      }\n\n      var element = rootElements.get(root);\n\n      try {\n        helpers.scheduleRoot(root, element);\n      } catch (err) {\n        if (!didError) {\n          didError = true;\n          firstError = err;\n        } // Keep trying other roots.\n\n      }\n    });\n    mountedRootsSnapshot.forEach(function (root) {\n      var helpers = helpersByRootSnapshot.get(root);\n\n      if (helpers === undefined) {\n        throw new Error('Could not find helpers for a root. This is a bug in React Refresh.');\n      }\n\n      if (!mountedRoots.has(root)) {// No longer mounted.\n      }\n\n      try {\n        helpers.scheduleRefresh(root, update);\n      } catch (err) {\n        if (!didError) {\n          didError = true;\n          firstError = err;\n        } // Keep trying other roots.\n\n      }\n    });\n\n    if (didError) {\n      throw firstError;\n    }\n\n    return update;\n  } finally {\n    isPerformingRefresh = false;\n  }\n}\nfunction register(type, id) {\n  {\n    if (type === null) {\n      return;\n    }\n\n    if (typeof type !== 'function' && typeof type !== 'object') {\n      return;\n    } // This can happen in an edge case, e.g. if we register\n    // return value of a HOC but it returns a cached component.\n    // Ignore anything but the first registration for each type.\n\n\n    if (allFamiliesByType.has(type)) {\n      return;\n    } // Create family or remember to update it.\n    // None of this bookkeeping affects reconciliation\n    // until the first performReactRefresh() call above.\n\n\n    var family = allFamiliesByID.get(id);\n\n    if (family === undefined) {\n      family = {\n        current: type\n      };\n      allFamiliesByID.set(id, family);\n    } else {\n      pendingUpdates.push([family, type]);\n    }\n\n    allFamiliesByType.set(type, family); // Visit inner types because we might not have registered them.\n\n    if (typeof type === 'object' && type !== null) {\n      switch (getProperty(type, '$$typeof')) {\n        case REACT_FORWARD_REF_TYPE:\n          register(type.render, id + '$render');\n          break;\n\n        case REACT_MEMO_TYPE:\n          register(type.type, id + '$type');\n          break;\n      }\n    }\n  }\n}\nfunction setSignature(type, key) {\n  var forceReset = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n  var getCustomHooks = arguments.length > 3 ? arguments[3] : undefined;\n\n  {\n    if (!allSignaturesByType.has(type)) {\n      allSignaturesByType.set(type, {\n        forceReset: forceReset,\n        ownKey: key,\n        fullKey: null,\n        getCustomHooks: getCustomHooks || function () {\n          return [];\n        }\n      });\n    } // Visit inner types because we might not have signed them.\n\n\n    if (typeof type === 'object' && type !== null) {\n      switch (getProperty(type, '$$typeof')) {\n        case REACT_FORWARD_REF_TYPE:\n          setSignature(type.render, key, forceReset, getCustomHooks);\n          break;\n\n        case REACT_MEMO_TYPE:\n          setSignature(type.type, key, forceReset, getCustomHooks);\n          break;\n      }\n    }\n  }\n} // This is lazily called during first render for a type.\n// It captures Hook list at that time so inline requires don't break comparisons.\n\nfunction collectCustomHooksForSignature(type) {\n  {\n    var signature = allSignaturesByType.get(type);\n\n    if (signature !== undefined) {\n      computeFullKey(signature);\n    }\n  }\n}\nfunction getFamilyByID(id) {\n  {\n    return allFamiliesByID.get(id);\n  }\n}\nfunction getFamilyByType(type) {\n  {\n    return allFamiliesByType.get(type);\n  }\n}\nfunction findAffectedHostInstances(families) {\n  {\n    var affectedInstances = new Set();\n    mountedRoots.forEach(function (root) {\n      var helpers = helpersByRoot.get(root);\n\n      if (helpers === undefined) {\n        throw new Error('Could not find helpers for a root. This is a bug in React Refresh.');\n      }\n\n      var instancesForRoot = helpers.findHostInstancesForRefresh(root, families);\n      instancesForRoot.forEach(function (inst) {\n        affectedInstances.add(inst);\n      });\n    });\n    return affectedInstances;\n  }\n}\nfunction injectIntoGlobalHook(globalObject) {\n  {\n    // For React Native, the global hook will be set up by require('react-devtools-core').\n    // That code will run before us. So we need to monkeypatch functions on existing hook.\n    // For React Web, the global hook will be set up by the extension.\n    // This will also run before us.\n    var hook = globalObject.__REACT_DEVTOOLS_GLOBAL_HOOK__;\n\n    if (hook === undefined) {\n      // However, if there is no DevTools extension, we'll need to set up the global hook ourselves.\n      // Note that in this case it's important that renderer code runs *after* this method call.\n      // Otherwise, the renderer will think that there is no global hook, and won't do the injection.\n      var nextID = 0;\n      globalObject.__REACT_DEVTOOLS_GLOBAL_HOOK__ = hook = {\n        renderers: new Map(),\n        supportsFiber: true,\n        inject: function (injected) {\n          return nextID++;\n        },\n        onScheduleFiberRoot: function (id, root, children) {},\n        onCommitFiberRoot: function (id, root, maybePriorityLevel, didError) {},\n        onCommitFiberUnmount: function () {}\n      };\n    }\n\n    if (hook.isDisabled) {\n      // This isn't a real property on the hook, but it can be set to opt out\n      // of DevTools integration and associated warnings and logs.\n      // Using console['warn'] to evade Babel and ESLint\n      console['warn']('Something has shimmed the React DevTools global hook (__REACT_DEVTOOLS_GLOBAL_HOOK__). ' + 'Fast Refresh is not compatible with this shim and will be disabled.');\n      return;\n    } // Here, we just want to get a reference to scheduleRefresh.\n\n\n    var oldInject = hook.inject;\n\n    hook.inject = function (injected) {\n      var id = oldInject.apply(this, arguments);\n\n      if (typeof injected.scheduleRefresh === 'function' && typeof injected.setRefreshHandler === 'function') {\n        // This version supports React Refresh.\n        helpersByRendererID.set(id, injected);\n      }\n\n      return id;\n    }; // Do the same for any already injected roots.\n    // This is useful if ReactDOM has already been initialized.\n    // https://github.com/facebook/react/issues/17626\n\n\n    hook.renderers.forEach(function (injected, id) {\n      if (typeof injected.scheduleRefresh === 'function' && typeof injected.setRefreshHandler === 'function') {\n        // This version supports React Refresh.\n        helpersByRendererID.set(id, injected);\n      }\n    }); // We also want to track currently mounted roots.\n\n    var oldOnCommitFiberRoot = hook.onCommitFiberRoot;\n\n    var oldOnScheduleFiberRoot = hook.onScheduleFiberRoot || function () {};\n\n    hook.onScheduleFiberRoot = function (id, root, children) {\n      if (!isPerformingRefresh) {\n        // If it was intentionally scheduled, don't attempt to restore.\n        // This includes intentionally scheduled unmounts.\n        failedRoots.delete(root);\n\n        if (rootElements !== null) {\n          rootElements.set(root, children);\n        }\n      }\n\n      return oldOnScheduleFiberRoot.apply(this, arguments);\n    };\n\n    hook.onCommitFiberRoot = function (id, root, maybePriorityLevel, didError) {\n      var helpers = helpersByRendererID.get(id);\n\n      if (helpers !== undefined) {\n        helpersByRoot.set(root, helpers);\n        var current = root.current;\n        var alternate = current.alternate; // We need to determine whether this root has just (un)mounted.\n        // This logic is copy-pasted from similar logic in the DevTools backend.\n        // If this breaks with some refactoring, you'll want to update DevTools too.\n\n        if (alternate !== null) {\n          var wasMounted = alternate.memoizedState != null && alternate.memoizedState.element != null && mountedRoots.has(root);\n          var isMounted = current.memoizedState != null && current.memoizedState.element != null;\n\n          if (!wasMounted && isMounted) {\n            // Mount a new root.\n            mountedRoots.add(root);\n            failedRoots.delete(root);\n          } else if (wasMounted && isMounted) ; else if (wasMounted && !isMounted) {\n            // Unmount an existing root.\n            mountedRoots.delete(root);\n\n            if (didError) {\n              // We'll remount it on future edits.\n              failedRoots.add(root);\n            } else {\n              helpersByRoot.delete(root);\n            }\n          } else if (!wasMounted && !isMounted) {\n            if (didError) {\n              // We'll remount it on future edits.\n              failedRoots.add(root);\n            }\n          }\n        } else {\n          // Mount a new root.\n          mountedRoots.add(root);\n        }\n      } // Always call the decorated DevTools hook.\n\n\n      return oldOnCommitFiberRoot.apply(this, arguments);\n    };\n  }\n}\nfunction hasUnrecoverableErrors() {\n  // TODO: delete this after removing dependency in RN.\n  return false;\n} // Exposed for testing.\n\nfunction _getMountedRootCount() {\n  {\n    return mountedRoots.size;\n  }\n} // This is a wrapper over more primitive functions for setting signature.\n// Signatures let us decide whether the Hook order has changed on refresh.\n//\n// This function is intended to be used as a transform target, e.g.:\n// var _s = createSignatureFunctionForTransform()\n//\n// function Hello() {\n//   const [foo, setFoo] = useState(0);\n//   const value = useCustomHook();\n//   _s(); /* Call without arguments triggers collecting the custom Hook list.\n//          * This doesn't happen during the module evaluation because we\n//          * don't want to change the module order with inline requires.\n//          * Next calls are noops. */\n//   return <h1>Hi</h1>;\n// }\n//\n// /* Call with arguments attaches the signature to the type: */\n// _s(\n//   Hello,\n//   'useState{[foo, setFoo]}(0)',\n//   () => [useCustomHook], /* Lazy to avoid triggering inline requires */\n// );\n\nfunction createSignatureFunctionForTransform() {\n  {\n    var savedType;\n    var hasCustomHooks;\n    var didCollectHooks = false;\n    return function (type, key, forceReset, getCustomHooks) {\n      if (typeof key === 'string') {\n        // We're in the initial phase that associates signatures\n        // with the functions. Note this may be called multiple times\n        // in HOC chains like _s(hoc1(_s(hoc2(_s(actualFunction))))).\n        if (!savedType) {\n          // We're in the innermost call, so this is the actual type.\n          savedType = type;\n          hasCustomHooks = typeof getCustomHooks === 'function';\n        } // Set the signature for all types (even wrappers!) in case\n        // they have no signatures of their own. This is to prevent\n        // problems like https://github.com/facebook/react/issues/20417.\n\n\n        if (type != null && (typeof type === 'function' || typeof type === 'object')) {\n          setSignature(type, key, forceReset, getCustomHooks);\n        }\n\n        return type;\n      } else {\n        // We're in the _s() call without arguments, which means\n        // this is the time to collect custom Hook signatures.\n        // Only do this once. This path is hot and runs *inside* every render!\n        if (!didCollectHooks && hasCustomHooks) {\n          didCollectHooks = true;\n          collectCustomHooksForSignature(savedType);\n        }\n      }\n    };\n  }\n}\nfunction isLikelyComponentType(type) {\n  {\n    switch (typeof type) {\n      case 'function':\n        {\n          // First, deal with classes.\n          if (type.prototype != null) {\n            if (type.prototype.isReactComponent) {\n              // React class.\n              return true;\n            }\n\n            var ownNames = Object.getOwnPropertyNames(type.prototype);\n\n            if (ownNames.length > 1 || ownNames[0] !== 'constructor') {\n              // This looks like a class.\n              return false;\n            } // eslint-disable-next-line no-proto\n\n\n            if (type.prototype.__proto__ !== Object.prototype) {\n              // It has a superclass.\n              return false;\n            } // Pass through.\n            // This looks like a regular function with empty prototype.\n\n          } // For plain functions and arrows, use name as a heuristic.\n\n\n          var name = type.name || type.displayName;\n          return typeof name === 'string' && /^[A-Z]/.test(name);\n        }\n\n      case 'object':\n        {\n          if (type != null) {\n            switch (getProperty(type, '$$typeof')) {\n              case REACT_FORWARD_REF_TYPE:\n              case REACT_MEMO_TYPE:\n                // Definitely React components.\n                return true;\n\n              default:\n                return false;\n            }\n          }\n\n          return false;\n        }\n\n      default:\n        {\n          return false;\n        }\n    }\n  }\n}\n\nexports._getMountedRootCount = _getMountedRootCount;\nexports.collectCustomHooksForSignature = collectCustomHooksForSignature;\nexports.createSignatureFunctionForTransform = createSignatureFunctionForTransform;\nexports.findAffectedHostInstances = findAffectedHostInstances;\nexports.getFamilyByID = getFamilyByID;\nexports.getFamilyByType = getFamilyByType;\nexports.hasUnrecoverableErrors = hasUnrecoverableErrors;\nexports.injectIntoGlobalHook = injectIntoGlobalHook;\nexports.isLikelyComponentType = isLikelyComponentType;\nexports.performReactRefresh = performReactRefresh;\nexports.register = register;\nexports.setSignature = setSignature;\n  })();\n}\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/cmVhZGRpcnBAMy42LjA=",
    "content": "/index.d.ts\u0003// TypeScript Version: 3.2\n\n/// <reference types=\"node\" lib=\"esnext\" />\n\nimport * as fs from 'fs';\nimport { Readable } from 'stream';\n\ndeclare namespace readdir {\n  interface EntryInfo {\n    path: string;\n    fullPath: string;\n    basename: string;\n    stats?: fs.Stats;\n    dirent?: fs.Dirent;\n  }\n\n  interface ReaddirpOptions {\n    root?: string;\n    fileFilter?: string | string[] | ((entry: EntryInfo) => boolean);\n    directoryFilter?: string | string[] | ((entry: EntryInfo) => boolean);\n    type?: 'files' | 'directories' | 'files_directories' | 'all';\n    lstat?: boolean;\n    depth?: number;\n    alwaysStat?: boolean;\n  }\n\n  interface ReaddirpStream extends Readable, AsyncIterable<EntryInfo> {\n    read(): EntryInfo;\n    [Symbol.asyncIterator](): AsyncIterableIterator<EntryInfo>;\n  }\n\n  function promise(\n    root: string,\n    options?: ReaddirpOptions\n  ): Promise<EntryInfo[]>;\n}\n\ndeclare function readdir(\n  root: string,\n  options?: readdir.ReaddirpOptions\n): readdir.ReaddirpStream;\n\nexport = readdir;\n/index.js\"'use strict';\n\nconst fs = require('fs');\nconst { Readable } = require('stream');\nconst sysPath = require('path');\nconst { promisify } = require('util');\nconst picomatch = require('picomatch');\n\nconst readdir = promisify(fs.readdir);\nconst stat = promisify(fs.stat);\nconst lstat = promisify(fs.lstat);\nconst realpath = promisify(fs.realpath);\n\n/**\n * @typedef {Object} EntryInfo\n * @property {String} path\n * @property {String} fullPath\n * @property {fs.Stats=} stats\n * @property {fs.Dirent=} dirent\n * @property {String} basename\n */\n\nconst BANG = '!';\nconst RECURSIVE_ERROR_CODE = 'READDIRP_RECURSIVE_ERROR';\nconst NORMAL_FLOW_ERRORS = new Set(['ENOENT', 'EPERM', 'EACCES', 'ELOOP', RECURSIVE_ERROR_CODE]);\nconst FILE_TYPE = 'files';\nconst DIR_TYPE = 'directories';\nconst FILE_DIR_TYPE = 'files_directories';\nconst EVERYTHING_TYPE = 'all';\nconst ALL_TYPES = [FILE_TYPE, DIR_TYPE, FILE_DIR_TYPE, EVERYTHING_TYPE];\n\nconst isNormalFlowError = error => NORMAL_FLOW_ERRORS.has(error.code);\nconst [maj, min] = process.versions.node.split('.').slice(0, 2).map(n => Number.parseInt(n, 10));\nconst wantBigintFsStats = process.platform === 'win32' && (maj > 10 || (maj === 10 && min >= 5));\n\nconst normalizeFilter = filter => {\n  if (filter === undefined) return;\n  if (typeof filter === 'function') return filter;\n\n  if (typeof filter === 'string') {\n    const glob = picomatch(filter.trim());\n    return entry => glob(entry.basename);\n  }\n\n  if (Array.isArray(filter)) {\n    const positive = [];\n    const negative = [];\n    for (const item of filter) {\n      const trimmed = item.trim();\n      if (trimmed.charAt(0) === BANG) {\n        negative.push(picomatch(trimmed.slice(1)));\n      } else {\n        positive.push(picomatch(trimmed));\n      }\n    }\n\n    if (negative.length > 0) {\n      if (positive.length > 0) {\n        return entry =>\n          positive.some(f => f(entry.basename)) && !negative.some(f => f(entry.basename));\n      }\n      return entry => !negative.some(f => f(entry.basename));\n    }\n    return entry => positive.some(f => f(entry.basename));\n  }\n};\n\nclass ReaddirpStream extends Readable {\n  static get defaultOptions() {\n    return {\n      root: '.',\n      /* eslint-disable no-unused-vars */\n      fileFilter: (path) => true,\n      directoryFilter: (path) => true,\n      /* eslint-enable no-unused-vars */\n      type: FILE_TYPE,\n      lstat: false,\n      depth: 2147483648,\n      alwaysStat: false\n    };\n  }\n\n  constructor(options = {}) {\n    super({\n      objectMode: true,\n      autoDestroy: true,\n      highWaterMark: options.highWaterMark || 4096\n    });\n    const opts = { ...ReaddirpStream.defaultOptions, ...options };\n    const { root, type } = opts;\n\n    this._fileFilter = normalizeFilter(opts.fileFilter);\n    this._directoryFilter = normalizeFilter(opts.directoryFilter);\n\n    const statMethod = opts.lstat ? lstat : stat;\n    // Use bigint stats if it's windows and stat() supports options (node 10+).\n    if (wantBigintFsStats) {\n      this._stat = path => statMethod(path, { bigint: true });\n    } else {\n      this._stat = statMethod;\n    }\n\n    this._maxDepth = opts.depth;\n    this._wantsDir = [DIR_TYPE, FILE_DIR_TYPE, EVERYTHING_TYPE].includes(type);\n    this._wantsFile = [FILE_TYPE, FILE_DIR_TYPE, EVERYTHING_TYPE].includes(type);\n    this._wantsEverything = type === EVERYTHING_TYPE;\n    this._root = sysPath.resolve(root);\n    this._isDirent = ('Dirent' in fs) && !opts.alwaysStat;\n    this._statsProp = this._isDirent ? 'dirent' : 'stats';\n    this._rdOptions = { encoding: 'utf8', withFileTypes: this._isDirent };\n\n    // Launch stream with one parent, the root dir.\n    this.parents = [this._exploreDir(root, 1)];\n    this.reading = false;\n    this.parent = undefined;\n  }\n\n  async _read(batch) {\n    if (this.reading) return;\n    this.reading = true;\n\n    try {\n      while (!this.destroyed && batch > 0) {\n        const { path, depth, files = [] } = this.parent || {};\n\n        if (files.length > 0) {\n          const slice = files.splice(0, batch).map(dirent => this._formatEntry(dirent, path));\n          for (const entry of await Promise.all(slice)) {\n            if (this.destroyed) return;\n\n            const entryType = await this._getEntryType(entry);\n            if (entryType === 'directory' && this._directoryFilter(entry)) {\n              if (depth <= this._maxDepth) {\n                this.parents.push(this._exploreDir(entry.fullPath, depth + 1));\n              }\n\n              if (this._wantsDir) {\n                this.push(entry);\n                batch--;\n              }\n            } else if ((entryType === 'file' || this._includeAsFile(entry)) && this._fileFilter(entry)) {\n              if (this._wantsFile) {\n                this.push(entry);\n                batch--;\n              }\n            }\n          }\n        } else {\n          const parent = this.parents.pop();\n          if (!parent) {\n            this.push(null);\n            break;\n          }\n          this.parent = await parent;\n          if (this.destroyed) return;\n        }\n      }\n    } catch (error) {\n      this.destroy(error);\n    } finally {\n      this.reading = false;\n    }\n  }\n\n  async _exploreDir(path, depth) {\n    let files;\n    try {\n      files = await readdir(path, this._rdOptions);\n    } catch (error) {\n      this._onError(error);\n    }\n    return { files, depth, path };\n  }\n\n  async _formatEntry(dirent, path) {\n    let entry;\n    try {\n      const basename = this._isDirent ? dirent.name : dirent;\n      const fullPath = sysPath.resolve(sysPath.join(path, basename));\n      entry = { path: sysPath.relative(this._root, fullPath), fullPath, basename };\n      entry[this._statsProp] = this._isDirent ? dirent : await this._stat(fullPath);\n    } catch (err) {\n      this._onError(err);\n    }\n    return entry;\n  }\n\n  _onError(err) {\n    if (isNormalFlowError(err) && !this.destroyed) {\n      this.emit('warn', err);\n    } else {\n      this.destroy(err);\n    }\n  }\n\n  async _getEntryType(entry) {\n    // entry may be undefined, because a warning or an error were emitted\n    // and the statsProp is undefined\n    const stats = entry && entry[this._statsProp];\n    if (!stats) {\n      return;\n    }\n    if (stats.isFile()) {\n      return 'file';\n    }\n    if (stats.isDirectory()) {\n      return 'directory';\n    }\n    if (stats && stats.isSymbolicLink()) {\n      const full = entry.fullPath;\n      try {\n        const entryRealPath = await realpath(full);\n        const entryRealPathStats = await lstat(entryRealPath);\n        if (entryRealPathStats.isFile()) {\n          return 'file';\n        }\n        if (entryRealPathStats.isDirectory()) {\n          const len = entryRealPath.length;\n          if (full.startsWith(entryRealPath) && full.substr(len, 1) === sysPath.sep) {\n            const recursiveError = new Error(\n              `Circular symlink detected: \"${full}\" points to \"${entryRealPath}\"`\n            );\n            recursiveError.code = RECURSIVE_ERROR_CODE;\n            return this._onError(recursiveError);\n          }\n          return 'directory';\n        }\n      } catch (error) {\n        this._onError(error);\n      }\n    }\n  }\n\n  _includeAsFile(entry) {\n    const stats = entry && entry[this._statsProp];\n\n    return stats && this._wantsEverything && !stats.isDirectory();\n  }\n}\n\n/**\n * @typedef {Object} ReaddirpArguments\n * @property {Function=} fileFilter\n * @property {Function=} directoryFilter\n * @property {String=} type\n * @property {Number=} depth\n * @property {String=} root\n * @property {Boolean=} lstat\n * @property {Boolean=} bigint\n */\n\n/**\n * Main function which ends up calling readdirRec and reads all files and directories in given root recursively.\n * @param {String} root Root directory\n * @param {ReaddirpArguments=} options Options to specify root (start directory), filters and recursion depth\n */\nconst readdirp = (root, options = {}) => {\n  let type = options.entryType || options.type;\n  if (type === 'both') type = FILE_DIR_TYPE; // backwards-compatibility\n  if (type) options.type = type;\n  if (!root) {\n    throw new Error('readdirp: root argument is required. Usage: readdirp(root, options)');\n  } else if (typeof root !== 'string') {\n    throw new TypeError('readdirp: root argument must be a string. Usage: readdirp(root, options)');\n  } else if (type && !ALL_TYPES.includes(type)) {\n    throw new Error(`readdirp: Invalid type passed. Use one of ${ALL_TYPES.join(', ')}`);\n  }\n\n  options.root = root;\n  return new ReaddirpStream(options);\n};\n\nconst readdirpPromise = (root, options = {}) => {\n  return new Promise((resolve, reject) => {\n    const files = [];\n    readdirp(root, options)\n      .on('data', entry => files.push(entry))\n      .on('end', () => resolve(files))\n      .on('error', error => reject(error));\n  });\n};\n\nreaddirp.promise = readdirpPromise;\nreaddirp.ReaddirpStream = ReaddirpStream;\nreaddirp.default = readdirp;\n\nmodule.exports = readdirp;\n/package.json\t{\n  \"name\": \"readdirp\",\n  \"description\": \"Recursive version of fs.readdir with streaming API.\",\n  \"version\": \"3.6.0\",\n  \"homepage\": \"https://github.com/paulmillr/readdirp\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git://github.com/paulmillr/readdirp.git\"\n  },\n  \"license\": \"MIT\",\n  \"bugs\": {\n    \"url\": \"https://github.com/paulmillr/readdirp/issues\"\n  },\n  \"author\": \"Thorsten Lorenz <thlorenz@gmx.de> (thlorenz.com)\",\n  \"contributors\": [\n    \"Thorsten Lorenz <thlorenz@gmx.de> (thlorenz.com)\",\n    \"Paul Miller (https://paulmillr.com)\"\n  ],\n  \"main\": \"index.js\",\n  \"engines\": {\n    \"node\": \">=8.10.0\"\n  },\n  \"files\": [\n    \"index.js\",\n    \"index.d.ts\"\n  ],\n  \"keywords\": [\n    \"recursive\",\n    \"fs\",\n    \"stream\",\n    \"streams\",\n    \"readdir\",\n    \"filesystem\",\n    \"find\",\n    \"filter\"\n  ],\n  \"scripts\": {\n    \"dtslint\": \"dtslint\",\n    \"nyc\": \"nyc\",\n    \"mocha\": \"mocha --exit\",\n    \"lint\": \"eslint --report-unused-disable-directives --ignore-path .gitignore .\",\n    \"test\": \"npm run lint && nyc npm run mocha\"\n  },\n  \"dependencies\": {\n    \"picomatch\": \"^2.2.1\"\n  },\n  \"devDependencies\": {\n    \"@types/node\": \"^14\",\n    \"chai\": \"^4.2\",\n    \"chai-subset\": \"^1.6\",\n    \"dtslint\": \"^3.3.0\",\n    \"eslint\": \"^7.0.0\",\n    \"mocha\": \"^7.1.1\",\n    \"nyc\": \"^15.0.0\",\n    \"rimraf\": \"^3.0.0\",\n    \"typescript\": \"^4.0.3\"\n  },\n  \"nyc\": {\n    \"reporter\": [\n      \"html\",\n      \"text\"\n    ]\n  },\n  \"eslintConfig\": {\n    \"root\": true,\n    \"extends\": \"eslint:recommended\",\n    \"parserOptions\": {\n      \"ecmaVersion\": 9,\n      \"sourceType\": \"script\"\n    },\n    \"env\": {\n      \"node\": true,\n      \"es6\": true\n    },\n    \"rules\": {\n      \"array-callback-return\": \"error\",\n      \"no-empty\": [\n        \"error\",\n        {\n          \"allowEmptyCatch\": true\n        }\n      ],\n      \"no-else-return\": [\n        \"error\",\n        {\n          \"allowElseIf\": false\n        }\n      ],\n      \"no-lonely-if\": \"error\",\n      \"no-var\": \"error\",\n      \"object-shorthand\": \"error\",\n      \"prefer-arrow-callback\": [\n        \"error\",\n        {\n          \"allowNamedFunctions\": true\n        }\n      ],\n      \"prefer-const\": [\n        \"error\",\n        {\n          \"ignoreReadBeforeAssign\": true\n        }\n      ],\n      \"prefer-destructuring\": [\n        \"error\",\n        {\n          \"object\": true,\n          \"array\": false\n        }\n      ],\n      \"prefer-spread\": \"error\",\n      \"prefer-template\": \"error\",\n      \"radix\": \"error\",\n      \"semi\": \"error\",\n      \"strict\": \"error\",\n      \"quotes\": [\n        \"error\",\n        \"single\"\n      ]\n    }\n  }\n}\n/README.md\u001b\u001e# readdirp [![Weekly downloads](https://img.shields.io/npm/dw/readdirp.svg)](https://github.com/paulmillr/readdirp)\n\nRecursive version of [fs.readdir](https://nodejs.org/api/fs.html#fs_fs_readdir_path_options_callback). Exposes a **stream API** and a **promise API**.\n\n\n```sh\nnpm install readdirp\n```\n\n```javascript\nconst readdirp = require('readdirp');\n\n// Use streams to achieve small RAM & CPU footprint.\n// 1) Streams example with for-await.\nfor await (const entry of readdirp('.')) {\n  const {path} = entry;\n  console.log(`${JSON.stringify({path})}`);\n}\n\n// 2) Streams example, non for-await.\n// Print out all JS files along with their size within the current folder & subfolders.\nreaddirp('.', {fileFilter: '*.js', alwaysStat: true})\n  .on('data', (entry) => {\n    const {path, stats: {size}} = entry;\n    console.log(`${JSON.stringify({path, size})}`);\n  })\n  // Optionally call stream.destroy() in `warn()` in order to abort and cause 'close' to be emitted\n  .on('warn', error => console.error('non-fatal error', error))\n  .on('error', error => console.error('fatal error', error))\n  .on('end', () => console.log('done'));\n\n// 3) Promise example. More RAM and CPU than streams / for-await.\nconst files = await readdirp.promise('.');\nconsole.log(files.map(file => file.path));\n\n// Other options.\nreaddirp('test', {\n  fileFilter: '*.js',\n  directoryFilter: ['!.git', '!*modules']\n  // directoryFilter: (di) => di.basename.length === 9\n  type: 'files_directories',\n  depth: 1\n});\n```\n\nFor more examples, check out `examples` directory.\n\n## API\n\n`const stream = readdirp(root[, options])` — **Stream API**\n\n- Reads given root recursively and returns a `stream` of [entry infos](#entryinfo)\n- Optionally can be used like `for await (const entry of stream)` with node.js 10+ (`asyncIterator`).\n- `on('data', (entry) => {})` [entry info](#entryinfo) for every file / dir.\n- `on('warn', (error) => {})` non-fatal `Error` that prevents a file / dir from being processed. Example: inaccessible to the user.\n- `on('error', (error) => {})` fatal `Error` which also ends the stream. Example: illegal options where passed.\n- `on('end')` — we are done. Called when all entries were found and no more will be emitted.\n- `on('close')` — stream is destroyed via `stream.destroy()`.\n  Could be useful if you want to manually abort even on a non fatal error.\n  At that point the stream is no longer `readable` and no more entries, warning or errors are emitted\n- To learn more about streams, consult the very detailed [nodejs streams documentation](https://nodejs.org/api/stream.html)\n  or the [stream-handbook](https://github.com/substack/stream-handbook)\n\n`const entries = await readdirp.promise(root[, options])` — **Promise API**. Returns a list of [entry infos](#entryinfo).\n\nFirst argument is awalys `root`, path in which to start reading and recursing into subdirectories.\n\n### options\n\n- `fileFilter: [\"*.js\"]`: filter to include or exclude files. A `Function`, Glob string or Array of glob strings.\n    - **Function**: a function that takes an entry info as a parameter and returns true to include or false to exclude the entry\n    - **Glob string**: a string (e.g., `*.js`) which is matched using [picomatch](https://github.com/micromatch/picomatch), so go there for more\n        information. Globstars (`**`) are not supported since specifying a recursive pattern for an already recursive function doesn't make sense. Negated globs (as explained in the minimatch documentation) are allowed, e.g., `!*.txt` matches everything but text files.\n    - **Array of glob strings**: either need to be all inclusive or all exclusive (negated) patterns otherwise an error is thrown.\n        `['*.json', '*.js']` includes all JavaScript and Json files.\n        `['!.git', '!node_modules']` includes all directories except the '.git' and 'node_modules'.\n    - Directories that do not pass a filter will not be recursed into.\n- `directoryFilter: ['!.git']`: filter to include/exclude directories found and to recurse into. Directories that do not pass a filter will not be recursed into.\n- `depth: 5`: depth at which to stop recursing even if more subdirectories are found\n- `type: 'files'`: determines if data events on the stream should be emitted for `'files'` (default), `'directories'`, `'files_directories'`, or `'all'`. Setting to `'all'` will also include entries for other types of file descriptors like character devices, unix sockets and named pipes.\n- `alwaysStat: false`: always return `stats` property for every file. Default is `false`, readdirp will return `Dirent` entries. Setting it to `true` can double readdir execution time - use it only when you need file `size`, `mtime` etc. Cannot be enabled on node <10.10.0.\n- `lstat: false`: include symlink entries in the stream along with files. When `true`, `fs.lstat` would be used instead of `fs.stat`\n\n### `EntryInfo`\n\nHas the following properties:\n\n- `path: 'assets/javascripts/react.js'`: path to the file/directory (relative to given root)\n- `fullPath: '/Users/dev/projects/app/assets/javascripts/react.js'`: full path to the file/directory found\n- `basename: 'react.js'`: name of the file/directory\n- `dirent: fs.Dirent`: built-in [dir entry object](https://nodejs.org/api/fs.html#fs_class_fs_dirent) - only with `alwaysStat: false`\n- `stats: fs.Stats`: built in [stat object](https://nodejs.org/api/fs.html#fs_class_fs_stats) - only with `alwaysStat: true`\n\n## Changelog\n\n- 3.5 (Oct 13, 2020) disallows recursive directory-based symlinks.\n  Before, it could have entered infinite loop.\n- 3.4 (Mar 19, 2020) adds support for directory-based symlinks.\n- 3.3 (Dec 6, 2019) stabilizes RAM consumption and enables perf management with `highWaterMark` option. Fixes race conditions related to `for-await` looping.\n- 3.2 (Oct 14, 2019) improves performance by 250% and makes streams implementation more idiomatic.\n- 3.1 (Jul 7, 2019) brings `bigint` support to `stat` output on Windows. This is backwards-incompatible for some cases. Be careful. It you use it incorrectly, you'll see \"TypeError: Cannot mix BigInt and other types, use explicit conversions\".\n- 3.0 brings huge performance improvements and stream backpressure support.\n- Upgrading 2.x to 3.x:\n    - Signature changed from `readdirp(options)` to `readdirp(root, options)`\n    - Replaced callback API with promise API.\n    - Renamed `entryType` option to `type`\n    - Renamed `entryType: 'both'` to `'files_directories'`\n    - `EntryInfo`\n        - Renamed `stat` to `stats`\n            - Emitted only when `alwaysStat: true`\n            - `dirent` is emitted instead of `stats` by default with `alwaysStat: false`\n        - Renamed `name` to `basename`\n        - Removed `parentDir` and `fullParentDir` properties\n- Supported node.js versions:\n    - 3.x: node 8+\n    - 2.x: node 0.6+\n\n## License\n\nCopyright (c) 2012-2019 Thorsten Lorenz, Paul Miller (<https://paulmillr.com>)\n\nMIT License, see [LICENSE](LICENSE) file.\n/LICENSE\u0004ZMIT License\n\nCopyright (c) 2012-2019 Thorsten Lorenz, Paul Miller (https://paulmillr.com)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/cmVhbC1yZXF1aXJlQDAuMi4w",
    "content": "/package.json\u0006={\n  \"name\": \"real-require\",\n  \"version\": \"0.2.0\",\n  \"description\": \"Keep require and import consistent after bundling or transpiling\",\n  \"author\": \"Paolo Insogna <shogun@cowtech.it>\",\n  \"homepage\": \"https://github.com/pinojs/real-require\",\n  \"contributors\": [\n    {\n      \"name\": \"Paolo Insogna\",\n      \"url\": \"https://github.com/ShogunPanda\"\n    }\n  ],\n  \"license\": \"MIT\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/pinojs/real-require.git\"\n  },\n  \"bugs\": {\n    \"url\": \"https://github.com/pinojs/real-require/issues\"\n  },\n  \"main\": \"src/index.js\",\n  \"files\": [\n    \"src\"\n  ],\n  \"scripts\": {\n    \"format\": \"prettier -w src test\",\n    \"lint\": \"eslint src test\",\n    \"test\": \"c8 --reporter=text --reporter=html tap --reporter=spec --no-coverage test/*.test.js\",\n    \"test:watch\": \"tap --watch --reporter=spec --no-browser --coverage-report=text --coverage-report=html test/*.test.js\",\n    \"test:ci\": \"c8 --reporter=text --reporter=json --check-coverage --branches 90 --functions 90 --lines 90 --statements 90 tap --no-color --no-coverage test/*.test.js\",\n    \"ci\": \"npm run lint && npm run test:ci\",\n    \"prepublishOnly\": \"npm run ci\",\n    \"postpublish\": \"git push origin && git push origin -f --tags\"\n  },\n  \"devDependencies\": {\n    \"eslint\": \"^7.12.0\",\n    \"eslint-config-standard\": \"^16.0.3\",\n    \"eslint-plugin-import\": \"^2.25.2\",\n    \"eslint-plugin-node\": \"^11.1.0\",\n    \"eslint-plugin-promise\": \"^5.1.1\",\n    \"eslint-plugin-standard\": \"^5.0.0\",\n    \"c8\": \"^7.10.0\",\n    \"prettier\": \"^2.4.1\",\n    \"tap\": \"^16.0.0\"\n  },\n  \"engines\": {\n    \"node\": \">= 12.13.0\"\n  }\n}\n/src/index.js\u0001}/* eslint-disable no-new-func, camelcase */\n/* globals __non_webpack__require__ */\n\nconst realImport = new Function('modulePath', 'return import(modulePath)')\n\nfunction realRequire(modulePath) {\n  if (typeof __non_webpack__require__ === 'function') {\n    return __non_webpack__require__(modulePath)\n  }\n\n  return require(modulePath)\n}\n\nmodule.exports = { realImport, realRequire }\n/LICENSE.md\u0004ZThe MIT License (MIT)\n\nCopyright (c) 2021 Paolo Insogna and the real-require contributors\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n/README.md\u0006# real-require\n\n[![Package Version](https://img.shields.io/npm/v/real-require.svg)](https://npm.im/real-require)\n[![Dependency Status](https://img.shields.io/librariesio/release/npm/real-require)](https://libraries.io/npm/real-require)\n[![Build](https://github.com/pinojs/real-require/workflows/CI/badge.svg)](https://github.com/pinojs/real-require/actions?query=workflow%3ACI)\n\nKeep require and import consistent after bundling or transpiling.\n\n## Installation\n\nJust run:\n\n```bash\nnpm install real-require\n```\n\n## Usage\n\nThe package provides two drop-ins functions, `realRequire` and `realImport`, which can be used in scenarios where tools like transpilers or bundlers change the native `require` or `await import` calls.\n\nThe current `realRequire` functions only handles webpack at the moment, wrapping the `__non_webpack__require__` implementation that webpack provides for the final bundle.\n\n### Example\n\n```js\n// After bundling, real-require will be embedded in the bundle\nconst { realImport, realRequire } = require('real-require')\n\n/*\n  By using realRequire, at build time the module will not be embedded and at runtime it will try to load path from the local filesytem.\n  This is useful in situations where the build tool does not support skipping modules to embed.\n*/\nconst { join } = realRequire('path')\n\nasync function main() {\n  // Similarly, this make sure the import call is not modified by the build tools\n  const localFunction = await realImport('./source.js')\n\n  localFunction()\n}\n\nmain().catch(console.error)\n```\n\n## Contributing\n\nSee [CONTRIBUTING.md](./CONTRIBUTING.md)\n\n## License\n\nCopyright Paolo Insogna and real-require contributors 2021. Licensed under the [MIT License](http://www.apache.org/licenses/MIT).\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/cmVnZXhwcEAzLjIuMA==",
    "content": "/index.mjs.map{\"version\":3,\"file\":\"index.mjs.map\",\"sources\":[\".temp/unicode/src/unicode/ids.ts\",\".temp/unicode/src/unicode/properties.ts\",\".temp/unicode/src/unicode/index.ts\",\".temp/src/reader.ts\",\".temp/src/regexp-syntax-error.ts\",\".temp/src/validator.ts\",\".temp/src/parser.ts\",\".temp/src/visitor.ts\",\".temp/src/index.ts\"],\"sourcesContent\":[{\"errno\":-4058,\"code\":\"ENOENT\",\"syscall\":\"open\",\"path\":\"C:\\\\Users\\\\t-nagashima.MSS\\\\dev\\\\regexpp\\\\.temp\\\\unicode\\\\src\\\\unicode\\\\ids.ts\"},{\"errno\":-4058,\"code\":\"ENOENT\",\"syscall\":\"open\",\"path\":\"C:\\\\Users\\\\t-nagashima.MSS\\\\dev\\\\regexpp\\\\.temp\\\\unicode\\\\src\\\\unicode\\\\properties.ts\"},{\"errno\":-4058,\"code\":\"ENOENT\",\"syscall\":\"open\",\"path\":\"C:\\\\Users\\\\t-nagashima.MSS\\\\dev\\\\regexpp\\\\.temp\\\\unicode\\\\src\\\\unicode\\\\index.ts\"},{\"errno\":-4058,\"code\":\"ENOENT\",\"syscall\":\"open\",\"path\":\"C:\\\\Users\\\\t-nagashima.MSS\\\\dev\\\\regexpp\\\\.temp\\\\src\\\\reader.ts\"},{\"errno\":-4058,\"code\":\"ENOENT\",\"syscall\":\"open\",\"path\":\"C:\\\\Users\\\\t-nagashima.MSS\\\\dev\\\\regexpp\\\\.temp\\\\src\\\\regexp-syntax-error.ts\"},{\"errno\":-4058,\"code\":\"ENOENT\",\"syscall\":\"open\",\"path\":\"C:\\\\Users\\\\t-nagashima.MSS\\\\dev\\\\regexpp\\\\.temp\\\\src\\\\validator.ts\"},{\"errno\":-4058,\"code\":\"ENOENT\",\"syscall\":\"open\",\"path\":\"C:\\\\Users\\\\t-nagashima.MSS\\\\dev\\\\regexpp\\\\.temp\\\\src\\\\parser.ts\"},{\"errno\":-4058,\"code\":\"ENOENT\",\"syscall\":\"open\",\"path\":\"C:\\\\Users\\\\t-nagashima.MSS\\\\dev\\\\regexpp\\\\.temp\\\\src\\\\visitor.ts\"},{\"errno\":-4058,\"code\":\"ENOENT\",\"syscall\":\"open\",\"path\":\"C:\\\\Users\\\\t-nagashima.MSS\\\\dev\\\\regexpp\\\\.temp\\\\src\\\\index.ts\"}],\"names\":[],\"mappings\":\"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\"}/LICENSE\u0004/MIT License\n\nCopyright (c) 2018 Toru Nagashima\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n/package.json\n7{\n  \"name\": \"regexpp\",\n  \"version\": \"3.2.0\",\n  \"description\": \"Regular expression parser for ECMAScript.\",\n  \"engines\": {\n    \"node\": \">=8\"\n  },\n  \"main\": \"index\",\n  \"files\": [\n    \"index.*\"\n  ],\n  \"exports\": {\n    \".\": {\n      \"import\": \"./index.mjs\",\n      \"default\": \"./index.js\"\n    },\n    \"./package.json\": \"./package.json\"\n  },\n  \"dependencies\": {},\n  \"devDependencies\": {\n    \"@mysticatea/eslint-plugin\": \"^11.0.0\",\n    \"@types/eslint\": \"^4.16.2\",\n    \"@types/jsdom\": \"^12.2.4\",\n    \"@types/mocha\": \"^5.2.2\",\n    \"@types/node\": \"^12.6.8\",\n    \"codecov\": \"^3.5.0\",\n    \"dts-bundle\": \"^0.7.3\",\n    \"eslint\": \"^6.1.0\",\n    \"jsdom\": \"^15.1.1\",\n    \"mocha\": \"^6.2.0\",\n    \"npm-run-all\": \"^4.1.5\",\n    \"nyc\": \"^14.1.1\",\n    \"rimraf\": \"^2.6.2\",\n    \"rollup\": \"^1.17.0\",\n    \"rollup-plugin-node-resolve\": \"^5.2.0\",\n    \"rollup-plugin-sourcemaps\": \"^0.4.2\",\n    \"ts-node\": \"^8.3.0\",\n    \"typescript\": \"^3.5.3\"\n  },\n  \"scripts\": {\n    \"prebuild\": \"npm run -s clean\",\n    \"build\": \"run-s build:*\",\n    \"build:tsc\": \"tsc --module es2015\",\n    \"build:rollup\": \"rollup -c\",\n    \"build:dts\": \"dts-bundle --name regexpp --main .temp/index.d.ts --out ../index.d.ts\",\n    \"clean\": \"rimraf .temp index.*\",\n    \"codecov\": \"nyc report -r lcovonly && codecov -t ${CODECOV_TOKEN} --disable=gcov\",\n    \"lint\": \"eslint scripts src test --ext .ts\",\n    \"pretest\": \"run-s build lint\",\n    \"test\": \"nyc _mocha \\\"test/*.ts\\\" --reporter dot --timeout 10000\",\n    \"update:test\": \"ts-node scripts/update-fixtures.ts\",\n    \"update:unicode\": \"run-s update:unicode:*\",\n    \"update:unicode:ids\": \"ts-node scripts/update-unicode-ids.ts\",\n    \"update:unicode:props\": \"ts-node scripts/update-unicode-properties.ts\",\n    \"preversion\": \"npm test\",\n    \"version\": \"npm run -s build\",\n    \"postversion\": \"git push && git push --tags\",\n    \"prewatch\": \"npm run -s clean\",\n    \"watch\": \"_mocha \\\"test/*.ts\\\" --require ts-node/register --reporter dot --timeout 10000 --watch-extensions ts --watch --growl\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/mysticatea/regexpp.git\"\n  },\n  \"keywords\": [\n    \"regexp\",\n    \"regular\",\n    \"expression\",\n    \"parser\",\n    \"validator\",\n    \"ast\",\n    \"abstract\",\n    \"syntax\",\n    \"tree\",\n    \"ecmascript\",\n    \"es2015\",\n    \"es2016\",\n    \"es2017\",\n    \"es2018\",\n    \"es2019\",\n    \"es2020\",\n    \"annexB\"\n  ],\n  \"author\": \"Toru Nagashima (https://github.com/mysticatea)\",\n  \"license\": \"MIT\",\n  \"bugs\": {\n    \"url\": \"https://github.com/mysticatea/regexpp/issues\"\n  },\n  \"homepage\": \"https://github.com/mysticatea/regexpp#readme\",\n  \"funding\": \"https://github.com/sponsors/mysticatea\"\n}\n/index.d.ts+// Generated by dts-bundle v0.7.3\r\n\r\ndeclare module 'regexpp' {\r\n    import * as AST from \"regexpp/ast\";\r\n    import { RegExpParser } from \"regexpp/parser\";\r\n    import { RegExpValidator } from \"regexpp/validator\";\r\n    import { RegExpVisitor } from \"regexpp/visitor\";\r\n    export { AST, RegExpParser, RegExpValidator };\r\n    export function parseRegExpLiteral(source: string | RegExp, options?: RegExpParser.Options): AST.RegExpLiteral;\r\n    export function validateRegExpLiteral(source: string, options?: RegExpValidator.Options): void;\r\n    export function visitRegExpAST(node: AST.Node, handlers: RegExpVisitor.Handlers): void;\r\n}\r\n\r\ndeclare module 'regexpp/ast' {\r\n    export type Node = BranchNode | LeafNode;\r\n    export type BranchNode = RegExpLiteral | Pattern | Alternative | Group | CapturingGroup | Quantifier | CharacterClass | LookaroundAssertion | CharacterClassRange;\r\n    export type LeafNode = BoundaryAssertion | CharacterSet | Character | Backreference | Flags;\r\n    export type Element = Assertion | Quantifier | QuantifiableElement;\r\n    export type QuantifiableElement = Group | CapturingGroup | CharacterClass | CharacterSet | Character | Backreference | LookaheadAssertion;\r\n    export type CharacterClassElement = EscapeCharacterSet | UnicodePropertyCharacterSet | Character | CharacterClassRange;\r\n    export interface NodeBase {\r\n        type: Node[\"type\"];\r\n        parent: Node[\"parent\"];\r\n        start: number;\r\n        end: number;\r\n        raw: string;\r\n    }\r\n    export interface RegExpLiteral extends NodeBase {\r\n        type: \"RegExpLiteral\";\r\n        parent: null;\r\n        pattern: Pattern;\r\n        flags: Flags;\r\n    }\r\n    export interface Pattern extends NodeBase {\r\n        type: \"Pattern\";\r\n        parent: RegExpLiteral | null;\r\n        alternatives: Alternative[];\r\n    }\r\n    export interface Alternative extends NodeBase {\r\n        type: \"Alternative\";\r\n        parent: Pattern | Group | CapturingGroup | LookaroundAssertion;\r\n        elements: Element[];\r\n    }\r\n    export interface Group extends NodeBase {\r\n        type: \"Group\";\r\n        parent: Alternative | Quantifier;\r\n        alternatives: Alternative[];\r\n    }\r\n    export interface CapturingGroup extends NodeBase {\r\n        type: \"CapturingGroup\";\r\n        parent: Alternative | Quantifier;\r\n        name: string | null;\r\n        alternatives: Alternative[];\r\n        references: Backreference[];\r\n    }\r\n    export type LookaroundAssertion = LookaheadAssertion | LookbehindAssertion;\r\n    export interface LookaheadAssertion extends NodeBase {\r\n        type: \"Assertion\";\r\n        parent: Alternative | Quantifier;\r\n        kind: \"lookahead\";\r\n        negate: boolean;\r\n        alternatives: Alternative[];\r\n    }\r\n    export interface LookbehindAssertion extends NodeBase {\r\n        type: \"Assertion\";\r\n        parent: Alternative;\r\n        kind: \"lookbehind\";\r\n        negate: boolean;\r\n        alternatives: Alternative[];\r\n    }\r\n    export interface Quantifier extends NodeBase {\r\n        type: \"Quantifier\";\r\n        parent: Alternative;\r\n        min: number;\r\n        max: number;\r\n        greedy: boolean;\r\n        element: QuantifiableElement;\r\n    }\r\n    export interface CharacterClass extends NodeBase {\r\n        type: \"CharacterClass\";\r\n        parent: Alternative | Quantifier;\r\n        negate: boolean;\r\n        elements: CharacterClassElement[];\r\n    }\r\n    export interface CharacterClassRange extends NodeBase {\r\n        type: \"CharacterClassRange\";\r\n        parent: CharacterClass;\r\n        min: Character;\r\n        max: Character;\r\n    }\r\n    export type Assertion = BoundaryAssertion | LookaroundAssertion;\r\n    export type BoundaryAssertion = EdgeAssertion | WordBoundaryAssertion;\r\n    export interface EdgeAssertion extends NodeBase {\r\n        type: \"Assertion\";\r\n        parent: Alternative | Quantifier;\r\n        kind: \"start\" | \"end\";\r\n    }\r\n    export interface WordBoundaryAssertion extends NodeBase {\r\n        type: \"Assertion\";\r\n        parent: Alternative | Quantifier;\r\n        kind: \"word\";\r\n        negate: boolean;\r\n    }\r\n    export type CharacterSet = AnyCharacterSet | EscapeCharacterSet | UnicodePropertyCharacterSet;\r\n    export interface AnyCharacterSet extends NodeBase {\r\n        type: \"CharacterSet\";\r\n        parent: Alternative | Quantifier;\r\n        kind: \"any\";\r\n    }\r\n    export interface EscapeCharacterSet extends NodeBase {\r\n        type: \"CharacterSet\";\r\n        parent: Alternative | Quantifier | CharacterClass;\r\n        kind: \"digit\" | \"space\" | \"word\";\r\n        negate: boolean;\r\n    }\r\n    export interface UnicodePropertyCharacterSet extends NodeBase {\r\n        type: \"CharacterSet\";\r\n        parent: Alternative | Quantifier | CharacterClass;\r\n        kind: \"property\";\r\n        key: string;\r\n        value: string | null;\r\n        negate: boolean;\r\n    }\r\n    export interface Character extends NodeBase {\r\n        type: \"Character\";\r\n        parent: Alternative | Quantifier | CharacterClass | CharacterClassRange;\r\n        value: number;\r\n    }\r\n    export interface Backreference extends NodeBase {\r\n        type: \"Backreference\";\r\n        parent: Alternative | Quantifier;\r\n        ref: number | string;\r\n        resolved: CapturingGroup;\r\n    }\r\n    export interface Flags extends NodeBase {\r\n        type: \"Flags\";\r\n        parent: RegExpLiteral | null;\r\n        dotAll: boolean;\r\n        global: boolean;\r\n        hasIndices: boolean;\r\n        ignoreCase: boolean;\r\n        multiline: boolean;\r\n        sticky: boolean;\r\n        unicode: boolean;\r\n    }\r\n}\r\n\r\ndeclare module 'regexpp/parser' {\r\n    import { Flags, RegExpLiteral, Pattern } from \"regexpp/ast\";\r\n    import { EcmaVersion } from \"regexpp/ecma-versions\";\r\n    export namespace RegExpParser {\r\n        interface Options {\r\n            strict?: boolean;\r\n            ecmaVersion?: EcmaVersion;\r\n        }\r\n    }\r\n    export class RegExpParser {\r\n        constructor(options?: RegExpParser.Options);\r\n        parseLiteral(source: string, start?: number, end?: number): RegExpLiteral;\r\n        parseFlags(source: string, start?: number, end?: number): Flags;\r\n        parsePattern(source: string, start?: number, end?: number, uFlag?: boolean): Pattern;\r\n    }\r\n}\r\n\r\ndeclare module 'regexpp/validator' {\r\n    import { EcmaVersion } from \"regexpp/ecma-versions\";\r\n    export namespace RegExpValidator {\r\n        interface Options {\r\n            strict?: boolean;\r\n            ecmaVersion?: EcmaVersion;\r\n            onLiteralEnter?(start: number): void;\r\n            onLiteralLeave?(start: number, end: number): void;\r\n            onFlags?(start: number, end: number, global: boolean, ignoreCase: boolean, multiline: boolean, unicode: boolean, sticky: boolean, dotAll: boolean, hasIndices: boolean): void;\r\n            onPatternEnter?(start: number): void;\r\n            onPatternLeave?(start: number, end: number): void;\r\n            onDisjunctionEnter?(start: number): void;\r\n            onDisjunctionLeave?(start: number, end: number): void;\r\n            onAlternativeEnter?(start: number, index: number): void;\r\n            onAlternativeLeave?(start: number, end: number, index: number): void;\r\n            onGroupEnter?(start: number): void;\r\n            onGroupLeave?(start: number, end: number): void;\r\n            onCapturingGroupEnter?(start: number, name: string | null): void;\r\n            onCapturingGroupLeave?(start: number, end: number, name: string | null): void;\r\n            onQuantifier?(start: number, end: number, min: number, max: number, greedy: boolean): void;\r\n            onLookaroundAssertionEnter?(start: number, kind: \"lookahead\" | \"lookbehind\", negate: boolean): void;\r\n            onLookaroundAssertionLeave?(start: number, end: number, kind: \"lookahead\" | \"lookbehind\", negate: boolean): void;\r\n            onEdgeAssertion?(start: number, end: number, kind: \"start\" | \"end\"): void;\r\n            onWordBoundaryAssertion?(start: number, end: number, kind: \"word\", negate: boolean): void;\r\n            onAnyCharacterSet?(start: number, end: number, kind: \"any\"): void;\r\n            onEscapeCharacterSet?(start: number, end: number, kind: \"digit\" | \"space\" | \"word\", negate: boolean): void;\r\n            onUnicodePropertyCharacterSet?(start: number, end: number, kind: \"property\", key: string, value: string | null, negate: boolean): void;\r\n            onCharacter?(start: number, end: number, value: number): void;\r\n            onBackreference?(start: number, end: number, ref: number | string): void;\r\n            onCharacterClassEnter?(start: number, negate: boolean): void;\r\n            onCharacterClassLeave?(start: number, end: number, negate: boolean): void;\r\n            onCharacterClassRange?(start: number, end: number, min: number, max: number): void;\r\n        }\r\n    }\r\n    export class RegExpValidator {\r\n        constructor(options?: RegExpValidator.Options);\r\n        validateLiteral(source: string, start?: number, end?: number): void;\r\n        validateFlags(source: string, start?: number, end?: number): void;\r\n        validatePattern(source: string, start?: number, end?: number, uFlag?: boolean): void;\r\n    }\r\n}\r\n\r\ndeclare module 'regexpp/visitor' {\r\n    import { Alternative, Assertion, Backreference, CapturingGroup, Character, CharacterClass, CharacterClassRange, CharacterSet, Flags, Group, Node, Pattern, Quantifier, RegExpLiteral } from \"regexpp/ast\";\r\n    export class RegExpVisitor {\r\n        constructor(handlers: RegExpVisitor.Handlers);\r\n        visit(node: Node): void;\r\n    }\r\n    export namespace RegExpVisitor {\r\n        interface Handlers {\r\n            onAlternativeEnter?(node: Alternative): void;\r\n            onAlternativeLeave?(node: Alternative): void;\r\n            onAssertionEnter?(node: Assertion): void;\r\n            onAssertionLeave?(node: Assertion): void;\r\n            onBackreferenceEnter?(node: Backreference): void;\r\n            onBackreferenceLeave?(node: Backreference): void;\r\n            onCapturingGroupEnter?(node: CapturingGroup): void;\r\n            onCapturingGroupLeave?(node: CapturingGroup): void;\r\n            onCharacterEnter?(node: Character): void;\r\n            onCharacterLeave?(node: Character): void;\r\n            onCharacterClassEnter?(node: CharacterClass): void;\r\n            onCharacterClassLeave?(node: CharacterClass): void;\r\n            onCharacterClassRangeEnter?(node: CharacterClassRange): void;\r\n            onCharacterClassRangeLeave?(node: CharacterClassRange): void;\r\n            onCharacterSetEnter?(node: CharacterSet): void;\r\n            onCharacterSetLeave?(node: CharacterSet): void;\r\n            onFlagsEnter?(node: Flags): void;\r\n            onFlagsLeave?(node: Flags): void;\r\n            onGroupEnter?(node: Group): void;\r\n            onGroupLeave?(node: Group): void;\r\n            onPatternEnter?(node: Pattern): void;\r\n            onPatternLeave?(node: Pattern): void;\r\n            onQuantifierEnter?(node: Quantifier): void;\r\n            onQuantifierLeave?(node: Quantifier): void;\r\n            onRegExpLiteralEnter?(node: RegExpLiteral): void;\r\n            onRegExpLiteralLeave?(node: RegExpLiteral): void;\r\n        }\r\n    }\r\n}\r\n\r\ndeclare module 'regexpp/ecma-versions' {\r\n    export type EcmaVersion = 5 | 2015 | 2016 | 2017 | 2018 | 2019 | 2020 | 2021 | 2022;\r\n}\r\n\r\n/index.js\u0000\u0001'/*! @author Toru Nagashima <https://github.com/mysticatea> */\n'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n\n\nvar ast = /*#__PURE__*/Object.freeze({\n\n});\n\nlet largeIdStartRanges = undefined;\nlet largeIdContinueRanges = undefined;\nfunction isIdStart(cp) {\n    if (cp < 0x41)\n        return false;\n    if (cp < 0x5b)\n        return true;\n    if (cp < 0x61)\n        return false;\n    if (cp < 0x7b)\n        return true;\n    return isLargeIdStart(cp);\n}\nfunction isIdContinue(cp) {\n    if (cp < 0x30)\n        return false;\n    if (cp < 0x3a)\n        return true;\n    if (cp < 0x41)\n        return false;\n    if (cp < 0x5b)\n        return true;\n    if (cp === 0x5f)\n        return true;\n    if (cp < 0x61)\n        return false;\n    if (cp < 0x7b)\n        return true;\n    return isLargeIdStart(cp) || isLargeIdContinue(cp);\n}\nfunction isLargeIdStart(cp) {\n    return isInRange(cp, largeIdStartRanges || (largeIdStartRanges = initLargeIdStartRanges()));\n}\nfunction isLargeIdContinue(cp) {\n    return isInRange(cp, largeIdContinueRanges ||\n        (largeIdContinueRanges = initLargeIdContinueRanges()));\n}\nfunction initLargeIdStartRanges() {\n    return restoreRanges(\"4q 0 b 0 5 0 6 m 2 u 2 cp 5 b f 4 8 0 2 0 3m 4 2 1 3 3 2 0 7 0 2 2 2 0 2 j 2 2a 2 3u 9 4l 2 11 3 0 7 14 20 q 5 3 1a 16 10 1 2 2q 2 0 g 1 8 1 b 2 3 0 h 0 2 t u 2g c 0 p w a 1 5 0 6 l 5 0 a 0 4 0 o o 8 a 1i k 2 h 1p 1h 4 0 j 0 8 9 g f 5 7 3 1 3 l 2 6 2 0 4 3 4 0 h 0 e 1 2 2 f 1 b 0 9 5 5 1 3 l 2 6 2 1 2 1 2 1 w 3 2 0 k 2 h 8 2 2 2 l 2 6 2 1 2 4 4 0 j 0 g 1 o 0 c 7 3 1 3 l 2 6 2 1 2 4 4 0 v 1 2 2 g 0 i 0 2 5 4 2 2 3 4 1 2 0 2 1 4 1 4 2 4 b n 0 1h 7 2 2 2 m 2 f 4 0 r 2 6 1 v 0 5 7 2 2 2 m 2 9 2 4 4 0 x 0 2 1 g 1 i 8 2 2 2 14 3 0 h 0 6 2 9 2 p 5 6 h 4 n 2 8 2 0 3 6 1n 1b 2 1 d 6 1n 1 2 0 2 4 2 n 2 0 2 9 2 1 a 0 3 4 2 0 m 3 x 0 1s 7 2 z s 4 38 16 l 0 h 5 5 3 4 0 4 1 8 2 5 c d 0 i 11 2 0 6 0 3 16 2 98 2 3 3 6 2 0 2 3 3 14 2 3 3 w 2 3 3 6 2 0 2 3 3 e 2 1k 2 3 3 1u 12 f h 2d 3 5 4 h7 3 g 2 p 6 22 4 a 8 c 2 3 f h f h f c 2 2 g 1f 10 0 5 0 1w 2g 8 14 2 0 6 1x b u 1e t 3 4 c 17 5 p 1j m a 1g 2b 0 2m 1a i 6 1k t e 1 b 17 r z 16 2 b z 3 8 8 16 3 2 16 3 2 5 2 1 4 0 6 5b 1t 7p 3 5 3 11 3 5 3 7 2 0 2 0 2 0 2 u 3 1g 2 6 2 0 4 2 2 6 4 3 3 5 5 c 6 2 2 6 39 0 e 0 h c 2u 0 5 0 3 9 2 0 3 5 7 0 2 0 2 0 2 f 3 3 6 4 5 0 i 14 22g 1a 2 1a 2 3o 7 3 4 1 d 11 2 0 6 0 3 1j 8 0 h m a 6 2 6 2 6 2 6 2 6 2 6 2 6 2 6 fb 2 q 8 8 4 3 4 5 2d 5 4 2 2h 2 3 6 16 2 2l i v 1d f e9 533 1t g70 4 wc 1w 19 3 7g 4 f b 1 l 1a h u 3 27 14 8 3 2u 3 1g 3 8 17 c 2 2 2 3 2 m u 1f f 1d 1r 5 4 0 2 1 c r b m q s 8 1a t 0 h 4 2 9 b 4 2 14 o 2 2 7 l m 4 0 4 1d 2 0 4 1 3 4 3 0 2 0 p 2 3 a 8 2 d 5 3 5 3 5 a 6 2 6 2 16 2 d 7 36 u 8mb d m 5 1c 6it a5 3 2x 13 6 d 4 6 0 2 9 2 c 2 4 2 0 2 1 2 1 2 2z y a2 j 1r 3 1h 15 b 39 4 2 3q 11 p 7 p c 2g 4 5 3 5 3 5 3 2 10 b 2 p 2 i 2 1 2 e 3 d z 3e 1y 1g 7g s 4 1c 1c v e t 6 11 b t 3 z 5 7 2 4 17 4d j z 5 z 5 13 9 1f 4d 8m a l b 7 49 5 3 0 2 17 2 1 4 0 3 m b m a u 1u i 2 1 b l b p 1z 1j 7 1 1t 0 g 3 2 2 2 s 17 s 4 s 10 7 2 r s 1h b l b i e h 33 20 1k 1e e 1e e z 9p 15 7 1 27 s b 0 9 l 2z k s m d 1g 24 18 x o r z u 0 3 0 9 y 4 0 d 1b f 3 m 0 2 0 10 h 2 o 2d 6 2 0 2 3 2 e 2 9 8 1a 13 7 3 1 3 l 2 6 2 1 2 4 4 0 j 0 d 4 4f 1g j 3 l 2 v 1b l 1 2 0 55 1a 16 3 11 1b l 0 1o 16 e 0 20 q 6e 17 39 1r w 7 3 0 3 7 2 1 2 n g 0 2 0 2n 7 3 12 h 0 2 0 t 0 b 13 8 0 m 0 c 19 k 0 z 1k 7c 8 2 10 i 0 1e t 35 6 2 1 2 11 m 0 q 5 2 1 2 v f 0 94 i 5a 0 28 pl 2v 32 i 5f 24d tq 34i g6 6nu fs 8 u 36 t j 1b h 3 w k 6 i j5 1r 3l 22 6 0 1v c 1t 1 2 0 t 4qf 9 yd 17 8 6wo 7y 1e 2 i 3 9 az 1s5 2y 6 c 4 8 8 9 4mf 2c 2 1y 2 1 3 0 3 1 3 3 2 b 2 0 2 6 2 1s 2 3 3 7 2 6 2 r 2 3 2 4 2 0 4 6 2 9f 3 o 2 o 2 u 2 o 2 u 2 o 2 u 2 o 2 u 2 o 2 7 1th 18 b 6 h 0 aa 17 105 5g 1o 1v 8 0 xh 3 2 q 2 1 2 0 3 0 2 9 2 3 2 0 2 0 7 0 5 0 2 0 2 0 2 2 2 1 2 0 3 0 2 0 2 0 2 0 2 0 2 1 2 0 3 3 2 6 2 3 2 3 2 0 2 9 2 g 6 2 2 4 2 g 3et wyl z 378 c 65 3 4g1 f 5rk 2e8 f1 15v 3t6\");\n}\nfunction initLargeIdContinueRanges() {\n    return restoreRanges(\"53 0 g9 33 o 0 70 4 7e 18 2 0 2 1 2 1 2 0 21 a 1d u 7 0 2u 6 3 5 3 1 2 3 3 9 o 0 v q 2k a g 9 y 8 a 0 p 3 2 8 2 2 2 4 18 2 3c e 2 w 1j 2 2 h 2 6 b 1 3 9 i 2 1l 0 2 6 3 1 3 2 a 0 b 1 3 9 f 0 3 2 1l 0 2 4 5 1 3 2 4 0 l b 4 0 c 2 1l 0 2 7 2 2 2 2 l 1 3 9 b 5 2 2 1l 0 2 6 3 1 3 2 8 2 b 1 3 9 j 0 1o 4 4 2 2 3 a 0 f 9 h 4 1m 6 2 2 2 3 8 1 c 1 3 9 i 2 1l 0 2 6 2 2 2 3 8 1 c 1 3 9 h 3 1k 1 2 6 2 2 2 3 a 0 b 1 3 9 i 2 1z 0 5 5 2 0 2 7 7 9 3 1 1q 0 3 6 d 7 2 9 2g 0 3 8 c 5 3 9 1r 1 7 9 c 0 2 0 2 0 5 1 1e j 2 1 6 a 2 z a 0 2t j 2 9 d 3 5 2 2 2 3 6 4 3 e b 2 e jk 2 a 8 pt 2 u 2 u 1 v 1 1t v a 0 3 9 y 2 3 9 40 0 3b b 5 b b 9 3l a 1p 4 1m 9 2 s 3 a 7 9 n d 2 1 1s 4 1c g c 9 i 8 d 2 v c 3 9 19 d 1d j 9 9 7 9 3b 2 2 k 5 0 7 0 3 2 5j 1l 2 4 g0 1 k 0 3g c 5 0 4 b 2db 2 3y 0 2p v ff 5 2y 1 n7q 9 1y 0 5 9 x 1 29 1 7l 0 4 0 5 0 o 4 5 0 2c 1 1f h b 9 7 h e a t 7 q c 19 3 1c d g 9 c 0 b 9 1c d d 0 9 1 3 9 y 2 1f 0 2 2 3 1 6 1 2 0 16 4 6 1 6l 7 2 1 3 9 fmt 0 ki f h f 4 1 p 2 5d 9 12 0 ji 0 6b 0 46 4 86 9 120 2 2 1 6 3 15 2 5 0 4m 1 fy 3 9 9 aa 1 4a a 4w 2 1i e w 9 g 3 1a a 1i 9 7 2 11 d 2 9 6 1 19 0 d 2 1d d 9 3 2 b 2b b 7 0 4h b 6 9 7 3 1k 1 2 6 3 1 3 2 a 0 b 1 3 6 4 4 5d h a 9 5 0 2a j d 9 5y 6 3 8 s 1 2b g g 9 2a c 9 9 2c e 5 9 6r e 4m 9 1z 5 2 1 3 3 2 0 2 1 d 9 3c 6 3 6 4 0 t 9 15 6 2 3 9 0 a a 1b f ba 7 2 7 h 9 1l l 2 d 3f 5 4 0 2 1 2 6 2 0 9 9 1d 4 2 1 2 4 9 9 96 3 ewa 9 3r 4 1o 6 q 9 s6 0 2 1i 8 3 2a 0 c 1 f58 1 43r 4 4 5 9 7 3 6 v 3 45 2 13e 1d e9 1i 5 1d 9 0 f 0 n 4 2 e 11t 6 2 g 3 6 2 1 2 4 7a 6 a 9 bn d 15j 6 32 6 6 9 3o7 9 gvt3 6n\");\n}\nfunction isInRange(cp, ranges) {\n    let l = 0, r = (ranges.length / 2) | 0, i = 0, min = 0, max = 0;\n    while (l < r) {\n        i = ((l + r) / 2) | 0;\n        min = ranges[2 * i];\n        max = ranges[2 * i + 1];\n        if (cp < min) {\n            r = i;\n        }\n        else if (cp > max) {\n            l = i + 1;\n        }\n        else {\n            return true;\n        }\n    }\n    return false;\n}\nfunction restoreRanges(data) {\n    let last = 0;\n    return data.split(\" \").map(s => (last += parseInt(s, 36) | 0));\n}\n\nclass DataSet {\n    constructor(raw2018, raw2019, raw2020, raw2021) {\n        this._raw2018 = raw2018;\n        this._raw2019 = raw2019;\n        this._raw2020 = raw2020;\n        this._raw2021 = raw2021;\n    }\n    get es2018() {\n        return (this._set2018 || (this._set2018 = new Set(this._raw2018.split(\" \"))));\n    }\n    get es2019() {\n        return (this._set2019 || (this._set2019 = new Set(this._raw2019.split(\" \"))));\n    }\n    get es2020() {\n        return (this._set2020 || (this._set2020 = new Set(this._raw2020.split(\" \"))));\n    }\n    get es2021() {\n        return (this._set2021 || (this._set2021 = new Set(this._raw2021.split(\" \"))));\n    }\n}\nconst gcNameSet = new Set([\"General_Category\", \"gc\"]);\nconst scNameSet = new Set([\"Script\", \"Script_Extensions\", \"sc\", \"scx\"]);\nconst gcValueSets = new DataSet(\"C Cased_Letter Cc Cf Close_Punctuation Cn Co Combining_Mark Connector_Punctuation Control Cs Currency_Symbol Dash_Punctuation Decimal_Number Enclosing_Mark Final_Punctuation Format Initial_Punctuation L LC Letter Letter_Number Line_Separator Ll Lm Lo Lowercase_Letter Lt Lu M Mark Math_Symbol Mc Me Mn Modifier_Letter Modifier_Symbol N Nd Nl No Nonspacing_Mark Number Open_Punctuation Other Other_Letter Other_Number Other_Punctuation Other_Symbol P Paragraph_Separator Pc Pd Pe Pf Pi Po Private_Use Ps Punctuation S Sc Separator Sk Sm So Space_Separator Spacing_Mark Surrogate Symbol Titlecase_Letter Unassigned Uppercase_Letter Z Zl Zp Zs cntrl digit punct\", \"\", \"\", \"\");\nconst scValueSets = new DataSet(\"Adlam Adlm Aghb Ahom Anatolian_Hieroglyphs Arab Arabic Armenian Armi Armn Avestan Avst Bali Balinese Bamu Bamum Bass Bassa_Vah Batak Batk Beng Bengali Bhaiksuki Bhks Bopo Bopomofo Brah Brahmi Brai Braille Bugi Buginese Buhd Buhid Cakm Canadian_Aboriginal Cans Cari Carian Caucasian_Albanian Chakma Cham Cher Cherokee Common Copt Coptic Cprt Cuneiform Cypriot Cyrillic Cyrl Deseret Deva Devanagari Dsrt Dupl Duployan Egyp Egyptian_Hieroglyphs Elba Elbasan Ethi Ethiopic Geor Georgian Glag Glagolitic Gonm Goth Gothic Gran Grantha Greek Grek Gujarati Gujr Gurmukhi Guru Han Hang Hangul Hani Hano Hanunoo Hatr Hatran Hebr Hebrew Hira Hiragana Hluw Hmng Hung Imperial_Aramaic Inherited Inscriptional_Pahlavi Inscriptional_Parthian Ital Java Javanese Kaithi Kali Kana Kannada Katakana Kayah_Li Khar Kharoshthi Khmer Khmr Khoj Khojki Khudawadi Knda Kthi Lana Lao Laoo Latin Latn Lepc Lepcha Limb Limbu Lina Linb Linear_A Linear_B Lisu Lyci Lycian Lydi Lydian Mahajani Mahj Malayalam Mand Mandaic Mani Manichaean Marc Marchen Masaram_Gondi Meetei_Mayek Mend Mende_Kikakui Merc Mero Meroitic_Cursive Meroitic_Hieroglyphs Miao Mlym Modi Mong Mongolian Mro Mroo Mtei Mult Multani Myanmar Mymr Nabataean Narb Nbat New_Tai_Lue Newa Nko Nkoo Nshu Nushu Ogam Ogham Ol_Chiki Olck Old_Hungarian Old_Italic Old_North_Arabian Old_Permic Old_Persian Old_South_Arabian Old_Turkic Oriya Orkh Orya Osage Osge Osma Osmanya Pahawh_Hmong Palm Palmyrene Pau_Cin_Hau Pauc Perm Phag Phags_Pa Phli Phlp Phnx Phoenician Plrd Prti Psalter_Pahlavi Qaac Qaai Rejang Rjng Runic Runr Samaritan Samr Sarb Saur Saurashtra Sgnw Sharada Shavian Shaw Shrd Sidd Siddham SignWriting Sind Sinh Sinhala Sora Sora_Sompeng Soyo Soyombo Sund Sundanese Sylo Syloti_Nagri Syrc Syriac Tagalog Tagb Tagbanwa Tai_Le Tai_Tham Tai_Viet Takr Takri Tale Talu Tamil Taml Tang Tangut Tavt Telu Telugu Tfng Tglg Thaa Thaana Thai Tibetan Tibt Tifinagh Tirh Tirhuta Ugar Ugaritic Vai Vaii Wara Warang_Citi Xpeo Xsux Yi Yiii Zanabazar_Square Zanb Zinh Zyyy\", \"Dogr Dogra Gong Gunjala_Gondi Hanifi_Rohingya Maka Makasar Medefaidrin Medf Old_Sogdian Rohg Sogd Sogdian Sogo\", \"Elym Elymaic Hmnp Nand Nandinagari Nyiakeng_Puachue_Hmong Wancho Wcho\", \"Chorasmian Chrs Diak Dives_Akuru Khitan_Small_Script Kits Yezi Yezidi\");\nconst binPropertySets = new DataSet(\"AHex ASCII ASCII_Hex_Digit Alpha Alphabetic Any Assigned Bidi_C Bidi_Control Bidi_M Bidi_Mirrored CI CWCF CWCM CWKCF CWL CWT CWU Case_Ignorable Cased Changes_When_Casefolded Changes_When_Casemapped Changes_When_Lowercased Changes_When_NFKC_Casefolded Changes_When_Titlecased Changes_When_Uppercased DI Dash Default_Ignorable_Code_Point Dep Deprecated Dia Diacritic Emoji Emoji_Component Emoji_Modifier Emoji_Modifier_Base Emoji_Presentation Ext Extender Gr_Base Gr_Ext Grapheme_Base Grapheme_Extend Hex Hex_Digit IDC IDS IDSB IDST IDS_Binary_Operator IDS_Trinary_Operator ID_Continue ID_Start Ideo Ideographic Join_C Join_Control LOE Logical_Order_Exception Lower Lowercase Math NChar Noncharacter_Code_Point Pat_Syn Pat_WS Pattern_Syntax Pattern_White_Space QMark Quotation_Mark RI Radical Regional_Indicator SD STerm Sentence_Terminal Soft_Dotted Term Terminal_Punctuation UIdeo Unified_Ideograph Upper Uppercase VS Variation_Selector White_Space XIDC XIDS XID_Continue XID_Start space\", \"Extended_Pictographic\", \"\", \"EBase EComp EMod EPres ExtPict\");\nfunction isValidUnicodeProperty(version, name, value) {\n    if (gcNameSet.has(name)) {\n        return version >= 2018 && gcValueSets.es2018.has(value);\n    }\n    if (scNameSet.has(name)) {\n        return ((version >= 2018 && scValueSets.es2018.has(value)) ||\n            (version >= 2019 && scValueSets.es2019.has(value)) ||\n            (version >= 2020 && scValueSets.es2020.has(value)) ||\n            (version >= 2021 && scValueSets.es2021.has(value)));\n    }\n    return false;\n}\nfunction isValidLoneUnicodeProperty(version, value) {\n    return ((version >= 2018 && binPropertySets.es2018.has(value)) ||\n        (version >= 2019 && binPropertySets.es2019.has(value)) ||\n        (version >= 2021 && binPropertySets.es2021.has(value)));\n}\n\nconst Backspace = 0x08;\nconst CharacterTabulation = 0x09;\nconst LineFeed = 0x0a;\nconst LineTabulation = 0x0b;\nconst FormFeed = 0x0c;\nconst CarriageReturn = 0x0d;\nconst ExclamationMark = 0x21;\nconst DollarSign = 0x24;\nconst LeftParenthesis = 0x28;\nconst RightParenthesis = 0x29;\nconst Asterisk = 0x2a;\nconst PlusSign = 0x2b;\nconst Comma = 0x2c;\nconst HyphenMinus = 0x2d;\nconst FullStop = 0x2e;\nconst Solidus = 0x2f;\nconst DigitZero = 0x30;\nconst DigitOne = 0x31;\nconst DigitSeven = 0x37;\nconst DigitNine = 0x39;\nconst Colon = 0x3a;\nconst LessThanSign = 0x3c;\nconst EqualsSign = 0x3d;\nconst GreaterThanSign = 0x3e;\nconst QuestionMark = 0x3f;\nconst LatinCapitalLetterA = 0x41;\nconst LatinCapitalLetterB = 0x42;\nconst LatinCapitalLetterD = 0x44;\nconst LatinCapitalLetterF = 0x46;\nconst LatinCapitalLetterP = 0x50;\nconst LatinCapitalLetterS = 0x53;\nconst LatinCapitalLetterW = 0x57;\nconst LatinCapitalLetterZ = 0x5a;\nconst LowLine = 0x5f;\nconst LatinSmallLetterA = 0x61;\nconst LatinSmallLetterB = 0x62;\nconst LatinSmallLetterC = 0x63;\nconst LatinSmallLetterD = 0x64;\nconst LatinSmallLetterF = 0x66;\nconst LatinSmallLetterG = 0x67;\nconst LatinSmallLetterI = 0x69;\nconst LatinSmallLetterK = 0x6b;\nconst LatinSmallLetterM = 0x6d;\nconst LatinSmallLetterN = 0x6e;\nconst LatinSmallLetterP = 0x70;\nconst LatinSmallLetterR = 0x72;\nconst LatinSmallLetterS = 0x73;\nconst LatinSmallLetterT = 0x74;\nconst LatinSmallLetterU = 0x75;\nconst LatinSmallLetterV = 0x76;\nconst LatinSmallLetterW = 0x77;\nconst LatinSmallLetterX = 0x78;\nconst LatinSmallLetterY = 0x79;\nconst LatinSmallLetterZ = 0x7a;\nconst LeftSquareBracket = 0x5b;\nconst ReverseSolidus = 0x5c;\nconst RightSquareBracket = 0x5d;\nconst CircumflexAccent = 0x5e;\nconst LeftCurlyBracket = 0x7b;\nconst VerticalLine = 0x7c;\nconst RightCurlyBracket = 0x7d;\nconst ZeroWidthNonJoiner = 0x200c;\nconst ZeroWidthJoiner = 0x200d;\nconst LineSeparator = 0x2028;\nconst ParagraphSeparator = 0x2029;\nconst MinCodePoint = 0x00;\nconst MaxCodePoint = 0x10ffff;\nfunction isLatinLetter(code) {\n    return ((code >= LatinCapitalLetterA && code <= LatinCapitalLetterZ) ||\n        (code >= LatinSmallLetterA && code <= LatinSmallLetterZ));\n}\nfunction isDecimalDigit(code) {\n    return code >= DigitZero && code <= DigitNine;\n}\nfunction isOctalDigit(code) {\n    return code >= DigitZero && code <= DigitSeven;\n}\nfunction isHexDigit(code) {\n    return ((code >= DigitZero && code <= DigitNine) ||\n        (code >= LatinCapitalLetterA && code <= LatinCapitalLetterF) ||\n        (code >= LatinSmallLetterA && code <= LatinSmallLetterF));\n}\nfunction isLineTerminator(code) {\n    return (code === LineFeed ||\n        code === CarriageReturn ||\n        code === LineSeparator ||\n        code === ParagraphSeparator);\n}\nfunction isValidUnicode(code) {\n    return code >= MinCodePoint && code <= MaxCodePoint;\n}\nfunction digitToInt(code) {\n    if (code >= LatinSmallLetterA && code <= LatinSmallLetterF) {\n        return code - LatinSmallLetterA + 10;\n    }\n    if (code >= LatinCapitalLetterA && code <= LatinCapitalLetterF) {\n        return code - LatinCapitalLetterA + 10;\n    }\n    return code - DigitZero;\n}\nfunction isLeadSurrogate(code) {\n    return code >= 0xd800 && code <= 0xdbff;\n}\nfunction isTrailSurrogate(code) {\n    return code >= 0xdc00 && code <= 0xdfff;\n}\nfunction combineSurrogatePair(lead, trail) {\n    return (lead - 0xd800) * 0x400 + (trail - 0xdc00) + 0x10000;\n}\n\nconst legacyImpl = {\n    at(s, end, i) {\n        return i < end ? s.charCodeAt(i) : -1;\n    },\n    width(c) {\n        return 1;\n    },\n};\nconst unicodeImpl = {\n    at(s, end, i) {\n        return i < end ? s.codePointAt(i) : -1;\n    },\n    width(c) {\n        return c > 0xffff ? 2 : 1;\n    },\n};\nclass Reader {\n    constructor() {\n        this._impl = legacyImpl;\n        this._s = \"\";\n        this._i = 0;\n        this._end = 0;\n        this._cp1 = -1;\n        this._w1 = 1;\n        this._cp2 = -1;\n        this._w2 = 1;\n        this._cp3 = -1;\n        this._w3 = 1;\n        this._cp4 = -1;\n    }\n    get source() {\n        return this._s;\n    }\n    get index() {\n        return this._i;\n    }\n    get currentCodePoint() {\n        return this._cp1;\n    }\n    get nextCodePoint() {\n        return this._cp2;\n    }\n    get nextCodePoint2() {\n        return this._cp3;\n    }\n    get nextCodePoint3() {\n        return this._cp4;\n    }\n    reset(source, start, end, uFlag) {\n        this._impl = uFlag ? unicodeImpl : legacyImpl;\n        this._s = source;\n        this._end = end;\n        this.rewind(start);\n    }\n    rewind(index) {\n        const impl = this._impl;\n        this._i = index;\n        this._cp1 = impl.at(this._s, this._end, index);\n        this._w1 = impl.width(this._cp1);\n        this._cp2 = impl.at(this._s, this._end, index + this._w1);\n        this._w2 = impl.width(this._cp2);\n        this._cp3 = impl.at(this._s, this._end, index + this._w1 + this._w2);\n        this._w3 = impl.width(this._cp3);\n        this._cp4 = impl.at(this._s, this._end, index + this._w1 + this._w2 + this._w3);\n    }\n    advance() {\n        if (this._cp1 !== -1) {\n            const impl = this._impl;\n            this._i += this._w1;\n            this._cp1 = this._cp2;\n            this._w1 = this._w2;\n            this._cp2 = this._cp3;\n            this._w2 = impl.width(this._cp2);\n            this._cp3 = this._cp4;\n            this._w3 = impl.width(this._cp3);\n            this._cp4 = impl.at(this._s, this._end, this._i + this._w1 + this._w2 + this._w3);\n        }\n    }\n    eat(cp) {\n        if (this._cp1 === cp) {\n            this.advance();\n            return true;\n        }\n        return false;\n    }\n    eat2(cp1, cp2) {\n        if (this._cp1 === cp1 && this._cp2 === cp2) {\n            this.advance();\n            this.advance();\n            return true;\n        }\n        return false;\n    }\n    eat3(cp1, cp2, cp3) {\n        if (this._cp1 === cp1 && this._cp2 === cp2 && this._cp3 === cp3) {\n            this.advance();\n            this.advance();\n            this.advance();\n            return true;\n        }\n        return false;\n    }\n}\n\nclass RegExpSyntaxError extends SyntaxError {\n    constructor(source, uFlag, index, message) {\n        if (source) {\n            if (!source.startsWith(\"/\")) {\n                source = `/${source}/${uFlag ? \"u\" : \"\"}`;\n            }\n            source = `: ${source}`;\n        }\n        super(`Invalid regular expression${source}: ${message}`);\n        this.index = index;\n    }\n}\n\nfunction isSyntaxCharacter(cp) {\n    return (cp === CircumflexAccent ||\n        cp === DollarSign ||\n        cp === ReverseSolidus ||\n        cp === FullStop ||\n        cp === Asterisk ||\n        cp === PlusSign ||\n        cp === QuestionMark ||\n        cp === LeftParenthesis ||\n        cp === RightParenthesis ||\n        cp === LeftSquareBracket ||\n        cp === RightSquareBracket ||\n        cp === LeftCurlyBracket ||\n        cp === RightCurlyBracket ||\n        cp === VerticalLine);\n}\nfunction isRegExpIdentifierStart(cp) {\n    return isIdStart(cp) || cp === DollarSign || cp === LowLine;\n}\nfunction isRegExpIdentifierPart(cp) {\n    return (isIdContinue(cp) ||\n        cp === DollarSign ||\n        cp === LowLine ||\n        cp === ZeroWidthNonJoiner ||\n        cp === ZeroWidthJoiner);\n}\nfunction isUnicodePropertyNameCharacter(cp) {\n    return isLatinLetter(cp) || cp === LowLine;\n}\nfunction isUnicodePropertyValueCharacter(cp) {\n    return isUnicodePropertyNameCharacter(cp) || isDecimalDigit(cp);\n}\nclass RegExpValidator {\n    constructor(options) {\n        this._reader = new Reader();\n        this._uFlag = false;\n        this._nFlag = false;\n        this._lastIntValue = 0;\n        this._lastMinValue = 0;\n        this._lastMaxValue = 0;\n        this._lastStrValue = \"\";\n        this._lastKeyValue = \"\";\n        this._lastValValue = \"\";\n        this._lastAssertionIsQuantifiable = false;\n        this._numCapturingParens = 0;\n        this._groupNames = new Set();\n        this._backreferenceNames = new Set();\n        this._options = options || {};\n    }\n    validateLiteral(source, start = 0, end = source.length) {\n        this._uFlag = this._nFlag = false;\n        this.reset(source, start, end);\n        this.onLiteralEnter(start);\n        if (this.eat(Solidus) && this.eatRegExpBody() && this.eat(Solidus)) {\n            const flagStart = this.index;\n            const uFlag = source.includes(\"u\", flagStart);\n            this.validateFlags(source, flagStart, end);\n            this.validatePattern(source, start + 1, flagStart - 1, uFlag);\n        }\n        else if (start >= end) {\n            this.raise(\"Empty\");\n        }\n        else {\n            const c = String.fromCodePoint(this.currentCodePoint);\n            this.raise(`Unexpected character '${c}'`);\n        }\n        this.onLiteralLeave(start, end);\n    }\n    validateFlags(source, start = 0, end = source.length) {\n        const existingFlags = new Set();\n        let global = false;\n        let ignoreCase = false;\n        let multiline = false;\n        let sticky = false;\n        let unicode = false;\n        let dotAll = false;\n        let hasIndices = false;\n        for (let i = start; i < end; ++i) {\n            const flag = source.charCodeAt(i);\n            if (existingFlags.has(flag)) {\n                this.raise(`Duplicated flag '${source[i]}'`);\n            }\n            existingFlags.add(flag);\n            if (flag === LatinSmallLetterG) {\n                global = true;\n            }\n            else if (flag === LatinSmallLetterI) {\n                ignoreCase = true;\n            }\n            else if (flag === LatinSmallLetterM) {\n                multiline = true;\n            }\n            else if (flag === LatinSmallLetterU && this.ecmaVersion >= 2015) {\n                unicode = true;\n            }\n            else if (flag === LatinSmallLetterY && this.ecmaVersion >= 2015) {\n                sticky = true;\n            }\n            else if (flag === LatinSmallLetterS && this.ecmaVersion >= 2018) {\n                dotAll = true;\n            }\n            else if (flag === LatinSmallLetterD && this.ecmaVersion >= 2022) {\n                hasIndices = true;\n            }\n            else {\n                this.raise(`Invalid flag '${source[i]}'`);\n            }\n        }\n        this.onFlags(start, end, global, ignoreCase, multiline, unicode, sticky, dotAll, hasIndices);\n    }\n    validatePattern(source, start = 0, end = source.length, uFlag = false) {\n        this._uFlag = uFlag && this.ecmaVersion >= 2015;\n        this._nFlag = uFlag && this.ecmaVersion >= 2018;\n        this.reset(source, start, end);\n        this.consumePattern();\n        if (!this._nFlag &&\n            this.ecmaVersion >= 2018 &&\n            this._groupNames.size > 0) {\n            this._nFlag = true;\n            this.rewind(start);\n            this.consumePattern();\n        }\n    }\n    get strict() {\n        return Boolean(this._options.strict || this._uFlag);\n    }\n    get ecmaVersion() {\n        return this._options.ecmaVersion || 2022;\n    }\n    onLiteralEnter(start) {\n        if (this._options.onLiteralEnter) {\n            this._options.onLiteralEnter(start);\n        }\n    }\n    onLiteralLeave(start, end) {\n        if (this._options.onLiteralLeave) {\n            this._options.onLiteralLeave(start, end);\n        }\n    }\n    onFlags(start, end, global, ignoreCase, multiline, unicode, sticky, dotAll, hasIndices) {\n        if (this._options.onFlags) {\n            this._options.onFlags(start, end, global, ignoreCase, multiline, unicode, sticky, dotAll, hasIndices);\n        }\n    }\n    onPatternEnter(start) {\n        if (this._options.onPatternEnter) {\n            this._options.onPatternEnter(start);\n        }\n    }\n    onPatternLeave(start, end) {\n        if (this._options.onPatternLeave) {\n            this._options.onPatternLeave(start, end);\n        }\n    }\n    onDisjunctionEnter(start) {\n        if (this._options.onDisjunctionEnter) {\n            this._options.onDisjunctionEnter(start);\n        }\n    }\n    onDisjunctionLeave(start, end) {\n        if (this._options.onDisjunctionLeave) {\n            this._options.onDisjunctionLeave(start, end);\n        }\n    }\n    onAlternativeEnter(start, index) {\n        if (this._options.onAlternativeEnter) {\n            this._options.onAlternativeEnter(start, index);\n        }\n    }\n    onAlternativeLeave(start, end, index) {\n        if (this._options.onAlternativeLeave) {\n            this._options.onAlternativeLeave(start, end, index);\n        }\n    }\n    onGroupEnter(start) {\n        if (this._options.onGroupEnter) {\n            this._options.onGroupEnter(start);\n        }\n    }\n    onGroupLeave(start, end) {\n        if (this._options.onGroupLeave) {\n            this._options.onGroupLeave(start, end);\n        }\n    }\n    onCapturingGroupEnter(start, name) {\n        if (this._options.onCapturingGroupEnter) {\n            this._options.onCapturingGroupEnter(start, name);\n        }\n    }\n    onCapturingGroupLeave(start, end, name) {\n        if (this._options.onCapturingGroupLeave) {\n            this._options.onCapturingGroupLeave(start, end, name);\n        }\n    }\n    onQuantifier(start, end, min, max, greedy) {\n        if (this._options.onQuantifier) {\n            this._options.onQuantifier(start, end, min, max, greedy);\n        }\n    }\n    onLookaroundAssertionEnter(start, kind, negate) {\n        if (this._options.onLookaroundAssertionEnter) {\n            this._options.onLookaroundAssertionEnter(start, kind, negate);\n        }\n    }\n    onLookaroundAssertionLeave(start, end, kind, negate) {\n        if (this._options.onLookaroundAssertionLeave) {\n            this._options.onLookaroundAssertionLeave(start, end, kind, negate);\n        }\n    }\n    onEdgeAssertion(start, end, kind) {\n        if (this._options.onEdgeAssertion) {\n            this._options.onEdgeAssertion(start, end, kind);\n        }\n    }\n    onWordBoundaryAssertion(start, end, kind, negate) {\n        if (this._options.onWordBoundaryAssertion) {\n            this._options.onWordBoundaryAssertion(start, end, kind, negate);\n        }\n    }\n    onAnyCharacterSet(start, end, kind) {\n        if (this._options.onAnyCharacterSet) {\n            this._options.onAnyCharacterSet(start, end, kind);\n        }\n    }\n    onEscapeCharacterSet(start, end, kind, negate) {\n        if (this._options.onEscapeCharacterSet) {\n            this._options.onEscapeCharacterSet(start, end, kind, negate);\n        }\n    }\n    onUnicodePropertyCharacterSet(start, end, kind, key, value, negate) {\n        if (this._options.onUnicodePropertyCharacterSet) {\n            this._options.onUnicodePropertyCharacterSet(start, end, kind, key, value, negate);\n        }\n    }\n    onCharacter(start, end, value) {\n        if (this._options.onCharacter) {\n            this._options.onCharacter(start, end, value);\n        }\n    }\n    onBackreference(start, end, ref) {\n        if (this._options.onBackreference) {\n            this._options.onBackreference(start, end, ref);\n        }\n    }\n    onCharacterClassEnter(start, negate) {\n        if (this._options.onCharacterClassEnter) {\n            this._options.onCharacterClassEnter(start, negate);\n        }\n    }\n    onCharacterClassLeave(start, end, negate) {\n        if (this._options.onCharacterClassLeave) {\n            this._options.onCharacterClassLeave(start, end, negate);\n        }\n    }\n    onCharacterClassRange(start, end, min, max) {\n        if (this._options.onCharacterClassRange) {\n            this._options.onCharacterClassRange(start, end, min, max);\n        }\n    }\n    get source() {\n        return this._reader.source;\n    }\n    get index() {\n        return this._reader.index;\n    }\n    get currentCodePoint() {\n        return this._reader.currentCodePoint;\n    }\n    get nextCodePoint() {\n        return this._reader.nextCodePoint;\n    }\n    get nextCodePoint2() {\n        return this._reader.nextCodePoint2;\n    }\n    get nextCodePoint3() {\n        return this._reader.nextCodePoint3;\n    }\n    reset(source, start, end) {\n        this._reader.reset(source, start, end, this._uFlag);\n    }\n    rewind(index) {\n        this._reader.rewind(index);\n    }\n    advance() {\n        this._reader.advance();\n    }\n    eat(cp) {\n        return this._reader.eat(cp);\n    }\n    eat2(cp1, cp2) {\n        return this._reader.eat2(cp1, cp2);\n    }\n    eat3(cp1, cp2, cp3) {\n        return this._reader.eat3(cp1, cp2, cp3);\n    }\n    raise(message) {\n        throw new RegExpSyntaxError(this.source, this._uFlag, this.index, message);\n    }\n    eatRegExpBody() {\n        const start = this.index;\n        let inClass = false;\n        let escaped = false;\n        for (;;) {\n            const cp = this.currentCodePoint;\n            if (cp === -1 || isLineTerminator(cp)) {\n                const kind = inClass ? \"character class\" : \"regular expression\";\n                this.raise(`Unterminated ${kind}`);\n            }\n            if (escaped) {\n                escaped = false;\n            }\n            else if (cp === ReverseSolidus) {\n                escaped = true;\n            }\n            else if (cp === LeftSquareBracket) {\n                inClass = true;\n            }\n            else if (cp === RightSquareBracket) {\n                inClass = false;\n            }\n            else if ((cp === Solidus && !inClass) ||\n                (cp === Asterisk && this.index === start)) {\n                break;\n            }\n            this.advance();\n        }\n        return this.index !== start;\n    }\n    consumePattern() {\n        const start = this.index;\n        this._numCapturingParens = this.countCapturingParens();\n        this._groupNames.clear();\n        this._backreferenceNames.clear();\n        this.onPatternEnter(start);\n        this.consumeDisjunction();\n        const cp = this.currentCodePoint;\n        if (this.currentCodePoint !== -1) {\n            if (cp === RightParenthesis) {\n                this.raise(\"Unmatched ')'\");\n            }\n            if (cp === ReverseSolidus) {\n                this.raise(\"\\\\ at end of pattern\");\n            }\n            if (cp === RightSquareBracket || cp === RightCurlyBracket) {\n                this.raise(\"Lone quantifier brackets\");\n            }\n            const c = String.fromCodePoint(cp);\n            this.raise(`Unexpected character '${c}'`);\n        }\n        for (const name of this._backreferenceNames) {\n            if (!this._groupNames.has(name)) {\n                this.raise(\"Invalid named capture referenced\");\n            }\n        }\n        this.onPatternLeave(start, this.index);\n    }\n    countCapturingParens() {\n        const start = this.index;\n        let inClass = false;\n        let escaped = false;\n        let count = 0;\n        let cp = 0;\n        while ((cp = this.currentCodePoint) !== -1) {\n            if (escaped) {\n                escaped = false;\n            }\n            else if (cp === ReverseSolidus) {\n                escaped = true;\n            }\n            else if (cp === LeftSquareBracket) {\n                inClass = true;\n            }\n            else if (cp === RightSquareBracket) {\n                inClass = false;\n            }\n            else if (cp === LeftParenthesis &&\n                !inClass &&\n                (this.nextCodePoint !== QuestionMark ||\n                    (this.nextCodePoint2 === LessThanSign &&\n                        this.nextCodePoint3 !== EqualsSign &&\n                        this.nextCodePoint3 !== ExclamationMark))) {\n                count += 1;\n            }\n            this.advance();\n        }\n        this.rewind(start);\n        return count;\n    }\n    consumeDisjunction() {\n        const start = this.index;\n        let i = 0;\n        this.onDisjunctionEnter(start);\n        do {\n            this.consumeAlternative(i++);\n        } while (this.eat(VerticalLine));\n        if (this.consumeQuantifier(true)) {\n            this.raise(\"Nothing to repeat\");\n        }\n        if (this.eat(LeftCurlyBracket)) {\n            this.raise(\"Lone quantifier brackets\");\n        }\n        this.onDisjunctionLeave(start, this.index);\n    }\n    consumeAlternative(i) {\n        const start = this.index;\n        this.onAlternativeEnter(start, i);\n        while (this.currentCodePoint !== -1 && this.consumeTerm()) {\n        }\n        this.onAlternativeLeave(start, this.index, i);\n    }\n    consumeTerm() {\n        if (this._uFlag || this.strict) {\n            return (this.consumeAssertion() ||\n                (this.consumeAtom() && this.consumeOptionalQuantifier()));\n        }\n        return ((this.consumeAssertion() &&\n            (!this._lastAssertionIsQuantifiable ||\n                this.consumeOptionalQuantifier())) ||\n            (this.consumeExtendedAtom() && this.consumeOptionalQuantifier()));\n    }\n    consumeOptionalQuantifier() {\n        this.consumeQuantifier();\n        return true;\n    }\n    consumeAssertion() {\n        const start = this.index;\n        this._lastAssertionIsQuantifiable = false;\n        if (this.eat(CircumflexAccent)) {\n            this.onEdgeAssertion(start, this.index, \"start\");\n            return true;\n        }\n        if (this.eat(DollarSign)) {\n            this.onEdgeAssertion(start, this.index, \"end\");\n            return true;\n        }\n        if (this.eat2(ReverseSolidus, LatinCapitalLetterB)) {\n            this.onWordBoundaryAssertion(start, this.index, \"word\", true);\n            return true;\n        }\n        if (this.eat2(ReverseSolidus, LatinSmallLetterB)) {\n            this.onWordBoundaryAssertion(start, this.index, \"word\", false);\n            return true;\n        }\n        if (this.eat2(LeftParenthesis, QuestionMark)) {\n            const lookbehind = this.ecmaVersion >= 2018 && this.eat(LessThanSign);\n            let negate = false;\n            if (this.eat(EqualsSign) || (negate = this.eat(ExclamationMark))) {\n                const kind = lookbehind ? \"lookbehind\" : \"lookahead\";\n                this.onLookaroundAssertionEnter(start, kind, negate);\n                this.consumeDisjunction();\n                if (!this.eat(RightParenthesis)) {\n                    this.raise(\"Unterminated group\");\n                }\n                this._lastAssertionIsQuantifiable = !lookbehind && !this.strict;\n                this.onLookaroundAssertionLeave(start, this.index, kind, negate);\n                return true;\n            }\n            this.rewind(start);\n        }\n        return false;\n    }\n    consumeQuantifier(noConsume = false) {\n        const start = this.index;\n        let min = 0;\n        let max = 0;\n        let greedy = false;\n        if (this.eat(Asterisk)) {\n            min = 0;\n            max = Number.POSITIVE_INFINITY;\n        }\n        else if (this.eat(PlusSign)) {\n            min = 1;\n            max = Number.POSITIVE_INFINITY;\n        }\n        else if (this.eat(QuestionMark)) {\n            min = 0;\n            max = 1;\n        }\n        else if (this.eatBracedQuantifier(noConsume)) {\n            min = this._lastMinValue;\n            max = this._lastMaxValue;\n        }\n        else {\n            return false;\n        }\n        greedy = !this.eat(QuestionMark);\n        if (!noConsume) {\n            this.onQuantifier(start, this.index, min, max, greedy);\n        }\n        return true;\n    }\n    eatBracedQuantifier(noError) {\n        const start = this.index;\n        if (this.eat(LeftCurlyBracket)) {\n            this._lastMinValue = 0;\n            this._lastMaxValue = Number.POSITIVE_INFINITY;\n            if (this.eatDecimalDigits()) {\n                this._lastMinValue = this._lastMaxValue = this._lastIntValue;\n                if (this.eat(Comma)) {\n                    this._lastMaxValue = this.eatDecimalDigits()\n                        ? this._lastIntValue\n                        : Number.POSITIVE_INFINITY;\n                }\n                if (this.eat(RightCurlyBracket)) {\n                    if (!noError && this._lastMaxValue < this._lastMinValue) {\n                        this.raise(\"numbers out of order in {} quantifier\");\n                    }\n                    return true;\n                }\n            }\n            if (!noError && (this._uFlag || this.strict)) {\n                this.raise(\"Incomplete quantifier\");\n            }\n            this.rewind(start);\n        }\n        return false;\n    }\n    consumeAtom() {\n        return (this.consumePatternCharacter() ||\n            this.consumeDot() ||\n            this.consumeReverseSolidusAtomEscape() ||\n            this.consumeCharacterClass() ||\n            this.consumeUncapturingGroup() ||\n            this.consumeCapturingGroup());\n    }\n    consumeDot() {\n        if (this.eat(FullStop)) {\n            this.onAnyCharacterSet(this.index - 1, this.index, \"any\");\n            return true;\n        }\n        return false;\n    }\n    consumeReverseSolidusAtomEscape() {\n        const start = this.index;\n        if (this.eat(ReverseSolidus)) {\n            if (this.consumeAtomEscape()) {\n                return true;\n            }\n            this.rewind(start);\n        }\n        return false;\n    }\n    consumeUncapturingGroup() {\n        const start = this.index;\n        if (this.eat3(LeftParenthesis, QuestionMark, Colon)) {\n            this.onGroupEnter(start);\n            this.consumeDisjunction();\n            if (!this.eat(RightParenthesis)) {\n                this.raise(\"Unterminated group\");\n            }\n            this.onGroupLeave(start, this.index);\n            return true;\n        }\n        return false;\n    }\n    consumeCapturingGroup() {\n        const start = this.index;\n        if (this.eat(LeftParenthesis)) {\n            let name = null;\n            if (this.ecmaVersion >= 2018) {\n                if (this.consumeGroupSpecifier()) {\n                    name = this._lastStrValue;\n                }\n            }\n            else if (this.currentCodePoint === QuestionMark) {\n                this.raise(\"Invalid group\");\n            }\n            this.onCapturingGroupEnter(start, name);\n            this.consumeDisjunction();\n            if (!this.eat(RightParenthesis)) {\n                this.raise(\"Unterminated group\");\n            }\n            this.onCapturingGroupLeave(start, this.index, name);\n            return true;\n        }\n        return false;\n    }\n    consumeExtendedAtom() {\n        return (this.consumeDot() ||\n            this.consumeReverseSolidusAtomEscape() ||\n            this.consumeReverseSolidusFollowedByC() ||\n            this.consumeCharacterClass() ||\n            this.consumeUncapturingGroup() ||\n            this.consumeCapturingGroup() ||\n            this.consumeInvalidBracedQuantifier() ||\n            this.consumeExtendedPatternCharacter());\n    }\n    consumeReverseSolidusFollowedByC() {\n        const start = this.index;\n        if (this.currentCodePoint === ReverseSolidus &&\n            this.nextCodePoint === LatinSmallLetterC) {\n            this._lastIntValue = this.currentCodePoint;\n            this.advance();\n            this.onCharacter(start, this.index, ReverseSolidus);\n            return true;\n        }\n        return false;\n    }\n    consumeInvalidBracedQuantifier() {\n        if (this.eatBracedQuantifier(true)) {\n            this.raise(\"Nothing to repeat\");\n        }\n        return false;\n    }\n    consumePatternCharacter() {\n        const start = this.index;\n        const cp = this.currentCodePoint;\n        if (cp !== -1 && !isSyntaxCharacter(cp)) {\n            this.advance();\n            this.onCharacter(start, this.index, cp);\n            return true;\n        }\n        return false;\n    }\n    consumeExtendedPatternCharacter() {\n        const start = this.index;\n        const cp = this.currentCodePoint;\n        if (cp !== -1 &&\n            cp !== CircumflexAccent &&\n            cp !== DollarSign &&\n            cp !== ReverseSolidus &&\n            cp !== FullStop &&\n            cp !== Asterisk &&\n            cp !== PlusSign &&\n            cp !== QuestionMark &&\n            cp !== LeftParenthesis &&\n            cp !== RightParenthesis &&\n            cp !== LeftSquareBracket &&\n            cp !== VerticalLine) {\n            this.advance();\n            this.onCharacter(start, this.index, cp);\n            return true;\n        }\n        return false;\n    }\n    consumeGroupSpecifier() {\n        if (this.eat(QuestionMark)) {\n            if (this.eatGroupName()) {\n                if (!this._groupNames.has(this._lastStrValue)) {\n                    this._groupNames.add(this._lastStrValue);\n                    return true;\n                }\n                this.raise(\"Duplicate capture group name\");\n            }\n            this.raise(\"Invalid group\");\n        }\n        return false;\n    }\n    consumeAtomEscape() {\n        if (this.consumeBackreference() ||\n            this.consumeCharacterClassEscape() ||\n            this.consumeCharacterEscape() ||\n            (this._nFlag && this.consumeKGroupName())) {\n            return true;\n        }\n        if (this.strict || this._uFlag) {\n            this.raise(\"Invalid escape\");\n        }\n        return false;\n    }\n    consumeBackreference() {\n        const start = this.index;\n        if (this.eatDecimalEscape()) {\n            const n = this._lastIntValue;\n            if (n <= this._numCapturingParens) {\n                this.onBackreference(start - 1, this.index, n);\n                return true;\n            }\n            if (this.strict || this._uFlag) {\n                this.raise(\"Invalid escape\");\n            }\n            this.rewind(start);\n        }\n        return false;\n    }\n    consumeCharacterClassEscape() {\n        const start = this.index;\n        if (this.eat(LatinSmallLetterD)) {\n            this._lastIntValue = -1;\n            this.onEscapeCharacterSet(start - 1, this.index, \"digit\", false);\n            return true;\n        }\n        if (this.eat(LatinCapitalLetterD)) {\n            this._lastIntValue = -1;\n            this.onEscapeCharacterSet(start - 1, this.index, \"digit\", true);\n            return true;\n        }\n        if (this.eat(LatinSmallLetterS)) {\n            this._lastIntValue = -1;\n            this.onEscapeCharacterSet(start - 1, this.index, \"space\", false);\n            return true;\n        }\n        if (this.eat(LatinCapitalLetterS)) {\n            this._lastIntValue = -1;\n            this.onEscapeCharacterSet(start - 1, this.index, \"space\", true);\n            return true;\n        }\n        if (this.eat(LatinSmallLetterW)) {\n            this._lastIntValue = -1;\n            this.onEscapeCharacterSet(start - 1, this.index, \"word\", false);\n            return true;\n        }\n        if (this.eat(LatinCapitalLetterW)) {\n            this._lastIntValue = -1;\n            this.onEscapeCharacterSet(start - 1, this.index, \"word\", true);\n            return true;\n        }\n        let negate = false;\n        if (this._uFlag &&\n            this.ecmaVersion >= 2018 &&\n            (this.eat(LatinSmallLetterP) ||\n                (negate = this.eat(LatinCapitalLetterP)))) {\n            this._lastIntValue = -1;\n            if (this.eat(LeftCurlyBracket) &&\n                this.eatUnicodePropertyValueExpression() &&\n                this.eat(RightCurlyBracket)) {\n                this.onUnicodePropertyCharacterSet(start - 1, this.index, \"property\", this._lastKeyValue, this._lastValValue || null, negate);\n                return true;\n            }\n            this.raise(\"Invalid property name\");\n        }\n        return false;\n    }\n    consumeCharacterEscape() {\n        const start = this.index;\n        if (this.eatControlEscape() ||\n            this.eatCControlLetter() ||\n            this.eatZero() ||\n            this.eatHexEscapeSequence() ||\n            this.eatRegExpUnicodeEscapeSequence() ||\n            (!this.strict &&\n                !this._uFlag &&\n                this.eatLegacyOctalEscapeSequence()) ||\n            this.eatIdentityEscape()) {\n            this.onCharacter(start - 1, this.index, this._lastIntValue);\n            return true;\n        }\n        return false;\n    }\n    consumeKGroupName() {\n        const start = this.index;\n        if (this.eat(LatinSmallLetterK)) {\n            if (this.eatGroupName()) {\n                const groupName = this._lastStrValue;\n                this._backreferenceNames.add(groupName);\n                this.onBackreference(start - 1, this.index, groupName);\n                return true;\n            }\n            this.raise(\"Invalid named reference\");\n        }\n        return false;\n    }\n    consumeCharacterClass() {\n        const start = this.index;\n        if (this.eat(LeftSquareBracket)) {\n            const negate = this.eat(CircumflexAccent);\n            this.onCharacterClassEnter(start, negate);\n            this.consumeClassRanges();\n            if (!this.eat(RightSquareBracket)) {\n                this.raise(\"Unterminated character class\");\n            }\n            this.onCharacterClassLeave(start, this.index, negate);\n            return true;\n        }\n        return false;\n    }\n    consumeClassRanges() {\n        const strict = this.strict || this._uFlag;\n        for (;;) {\n            const rangeStart = this.index;\n            if (!this.consumeClassAtom()) {\n                break;\n            }\n            const min = this._lastIntValue;\n            if (!this.eat(HyphenMinus)) {\n                continue;\n            }\n            this.onCharacter(this.index - 1, this.index, HyphenMinus);\n            if (!this.consumeClassAtom()) {\n                break;\n            }\n            const max = this._lastIntValue;\n            if (min === -1 || max === -1) {\n                if (strict) {\n                    this.raise(\"Invalid character class\");\n                }\n                continue;\n            }\n            if (min > max) {\n                this.raise(\"Range out of order in character class\");\n            }\n            this.onCharacterClassRange(rangeStart, this.index, min, max);\n        }\n    }\n    consumeClassAtom() {\n        const start = this.index;\n        const cp = this.currentCodePoint;\n        if (cp !== -1 && cp !== ReverseSolidus && cp !== RightSquareBracket) {\n            this.advance();\n            this._lastIntValue = cp;\n            this.onCharacter(start, this.index, this._lastIntValue);\n            return true;\n        }\n        if (this.eat(ReverseSolidus)) {\n            if (this.consumeClassEscape()) {\n                return true;\n            }\n            if (!this.strict && this.currentCodePoint === LatinSmallLetterC) {\n                this._lastIntValue = ReverseSolidus;\n                this.onCharacter(start, this.index, this._lastIntValue);\n                return true;\n            }\n            if (this.strict || this._uFlag) {\n                this.raise(\"Invalid escape\");\n            }\n            this.rewind(start);\n        }\n        return false;\n    }\n    consumeClassEscape() {\n        const start = this.index;\n        if (this.eat(LatinSmallLetterB)) {\n            this._lastIntValue = Backspace;\n            this.onCharacter(start - 1, this.index, this._lastIntValue);\n            return true;\n        }\n        if (this._uFlag && this.eat(HyphenMinus)) {\n            this._lastIntValue = HyphenMinus;\n            this.onCharacter(start - 1, this.index, this._lastIntValue);\n            return true;\n        }\n        let cp = 0;\n        if (!this.strict &&\n            !this._uFlag &&\n            this.currentCodePoint === LatinSmallLetterC &&\n            (isDecimalDigit((cp = this.nextCodePoint)) || cp === LowLine)) {\n            this.advance();\n            this.advance();\n            this._lastIntValue = cp % 0x20;\n            this.onCharacter(start - 1, this.index, this._lastIntValue);\n            return true;\n        }\n        return (this.consumeCharacterClassEscape() || this.consumeCharacterEscape());\n    }\n    eatGroupName() {\n        if (this.eat(LessThanSign)) {\n            if (this.eatRegExpIdentifierName() && this.eat(GreaterThanSign)) {\n                return true;\n            }\n            this.raise(\"Invalid capture group name\");\n        }\n        return false;\n    }\n    eatRegExpIdentifierName() {\n        if (this.eatRegExpIdentifierStart()) {\n            this._lastStrValue = String.fromCodePoint(this._lastIntValue);\n            while (this.eatRegExpIdentifierPart()) {\n                this._lastStrValue += String.fromCodePoint(this._lastIntValue);\n            }\n            return true;\n        }\n        return false;\n    }\n    eatRegExpIdentifierStart() {\n        const start = this.index;\n        const forceUFlag = !this._uFlag && this.ecmaVersion >= 2020;\n        let cp = this.currentCodePoint;\n        this.advance();\n        if (cp === ReverseSolidus &&\n            this.eatRegExpUnicodeEscapeSequence(forceUFlag)) {\n            cp = this._lastIntValue;\n        }\n        else if (forceUFlag &&\n            isLeadSurrogate(cp) &&\n            isTrailSurrogate(this.currentCodePoint)) {\n            cp = combineSurrogatePair(cp, this.currentCodePoint);\n            this.advance();\n        }\n        if (isRegExpIdentifierStart(cp)) {\n            this._lastIntValue = cp;\n            return true;\n        }\n        if (this.index !== start) {\n            this.rewind(start);\n        }\n        return false;\n    }\n    eatRegExpIdentifierPart() {\n        const start = this.index;\n        const forceUFlag = !this._uFlag && this.ecmaVersion >= 2020;\n        let cp = this.currentCodePoint;\n        this.advance();\n        if (cp === ReverseSolidus &&\n            this.eatRegExpUnicodeEscapeSequence(forceUFlag)) {\n            cp = this._lastIntValue;\n        }\n        else if (forceUFlag &&\n            isLeadSurrogate(cp) &&\n            isTrailSurrogate(this.currentCodePoint)) {\n            cp = combineSurrogatePair(cp, this.currentCodePoint);\n            this.advance();\n        }\n        if (isRegExpIdentifierPart(cp)) {\n            this._lastIntValue = cp;\n            return true;\n        }\n        if (this.index !== start) {\n            this.rewind(start);\n        }\n        return false;\n    }\n    eatCControlLetter() {\n        const start = this.index;\n        if (this.eat(LatinSmallLetterC)) {\n            if (this.eatControlLetter()) {\n                return true;\n            }\n            this.rewind(start);\n        }\n        return false;\n    }\n    eatZero() {\n        if (this.currentCodePoint === DigitZero &&\n            !isDecimalDigit(this.nextCodePoint)) {\n            this._lastIntValue = 0;\n            this.advance();\n            return true;\n        }\n        return false;\n    }\n    eatControlEscape() {\n        if (this.eat(LatinSmallLetterF)) {\n            this._lastIntValue = FormFeed;\n            return true;\n        }\n        if (this.eat(LatinSmallLetterN)) {\n            this._lastIntValue = LineFeed;\n            return true;\n        }\n        if (this.eat(LatinSmallLetterR)) {\n            this._lastIntValue = CarriageReturn;\n            return true;\n        }\n        if (this.eat(LatinSmallLetterT)) {\n            this._lastIntValue = CharacterTabulation;\n            return true;\n        }\n        if (this.eat(LatinSmallLetterV)) {\n            this._lastIntValue = LineTabulation;\n            return true;\n        }\n        return false;\n    }\n    eatControlLetter() {\n        const cp = this.currentCodePoint;\n        if (isLatinLetter(cp)) {\n            this.advance();\n            this._lastIntValue = cp % 0x20;\n            return true;\n        }\n        return false;\n    }\n    eatRegExpUnicodeEscapeSequence(forceUFlag = false) {\n        const start = this.index;\n        const uFlag = forceUFlag || this._uFlag;\n        if (this.eat(LatinSmallLetterU)) {\n            if ((uFlag && this.eatRegExpUnicodeSurrogatePairEscape()) ||\n                this.eatFixedHexDigits(4) ||\n                (uFlag && this.eatRegExpUnicodeCodePointEscape())) {\n                return true;\n            }\n            if (this.strict || uFlag) {\n                this.raise(\"Invalid unicode escape\");\n            }\n            this.rewind(start);\n        }\n        return false;\n    }\n    eatRegExpUnicodeSurrogatePairEscape() {\n        const start = this.index;\n        if (this.eatFixedHexDigits(4)) {\n            const lead = this._lastIntValue;\n            if (isLeadSurrogate(lead) &&\n                this.eat(ReverseSolidus) &&\n                this.eat(LatinSmallLetterU) &&\n                this.eatFixedHexDigits(4)) {\n                const trail = this._lastIntValue;\n                if (isTrailSurrogate(trail)) {\n                    this._lastIntValue = combineSurrogatePair(lead, trail);\n                    return true;\n                }\n            }\n            this.rewind(start);\n        }\n        return false;\n    }\n    eatRegExpUnicodeCodePointEscape() {\n        const start = this.index;\n        if (this.eat(LeftCurlyBracket) &&\n            this.eatHexDigits() &&\n            this.eat(RightCurlyBracket) &&\n            isValidUnicode(this._lastIntValue)) {\n            return true;\n        }\n        this.rewind(start);\n        return false;\n    }\n    eatIdentityEscape() {\n        const cp = this.currentCodePoint;\n        if (this.isValidIdentityEscape(cp)) {\n            this._lastIntValue = cp;\n            this.advance();\n            return true;\n        }\n        return false;\n    }\n    isValidIdentityEscape(cp) {\n        if (cp === -1) {\n            return false;\n        }\n        if (this._uFlag) {\n            return isSyntaxCharacter(cp) || cp === Solidus;\n        }\n        if (this.strict) {\n            return !isIdContinue(cp);\n        }\n        if (this._nFlag) {\n            return !(cp === LatinSmallLetterC || cp === LatinSmallLetterK);\n        }\n        return cp !== LatinSmallLetterC;\n    }\n    eatDecimalEscape() {\n        this._lastIntValue = 0;\n        let cp = this.currentCodePoint;\n        if (cp >= DigitOne && cp <= DigitNine) {\n            do {\n                this._lastIntValue = 10 * this._lastIntValue + (cp - DigitZero);\n                this.advance();\n            } while ((cp = this.currentCodePoint) >= DigitZero &&\n                cp <= DigitNine);\n            return true;\n        }\n        return false;\n    }\n    eatUnicodePropertyValueExpression() {\n        const start = this.index;\n        if (this.eatUnicodePropertyName() && this.eat(EqualsSign)) {\n            this._lastKeyValue = this._lastStrValue;\n            if (this.eatUnicodePropertyValue()) {\n                this._lastValValue = this._lastStrValue;\n                if (isValidUnicodeProperty(this.ecmaVersion, this._lastKeyValue, this._lastValValue)) {\n                    return true;\n                }\n                this.raise(\"Invalid property name\");\n            }\n        }\n        this.rewind(start);\n        if (this.eatLoneUnicodePropertyNameOrValue()) {\n            const nameOrValue = this._lastStrValue;\n            if (isValidUnicodeProperty(this.ecmaVersion, \"General_Category\", nameOrValue)) {\n                this._lastKeyValue = \"General_Category\";\n                this._lastValValue = nameOrValue;\n                return true;\n            }\n            if (isValidLoneUnicodeProperty(this.ecmaVersion, nameOrValue)) {\n                this._lastKeyValue = nameOrValue;\n                this._lastValValue = \"\";\n                return true;\n            }\n            this.raise(\"Invalid property name\");\n        }\n        return false;\n    }\n    eatUnicodePropertyName() {\n        this._lastStrValue = \"\";\n        while (isUnicodePropertyNameCharacter(this.currentCodePoint)) {\n            this._lastStrValue += String.fromCodePoint(this.currentCodePoint);\n            this.advance();\n        }\n        return this._lastStrValue !== \"\";\n    }\n    eatUnicodePropertyValue() {\n        this._lastStrValue = \"\";\n        while (isUnicodePropertyValueCharacter(this.currentCodePoint)) {\n            this._lastStrValue += String.fromCodePoint(this.currentCodePoint);\n            this.advance();\n        }\n        return this._lastStrValue !== \"\";\n    }\n    eatLoneUnicodePropertyNameOrValue() {\n        return this.eatUnicodePropertyValue();\n    }\n    eatHexEscapeSequence() {\n        const start = this.index;\n        if (this.eat(LatinSmallLetterX)) {\n            if (this.eatFixedHexDigits(2)) {\n                return true;\n            }\n            if (this._uFlag || this.strict) {\n                this.raise(\"Invalid escape\");\n            }\n            this.rewind(start);\n        }\n        return false;\n    }\n    eatDecimalDigits() {\n        const start = this.index;\n        this._lastIntValue = 0;\n        while (isDecimalDigit(this.currentCodePoint)) {\n            this._lastIntValue =\n                10 * this._lastIntValue + digitToInt(this.currentCodePoint);\n            this.advance();\n        }\n        return this.index !== start;\n    }\n    eatHexDigits() {\n        const start = this.index;\n        this._lastIntValue = 0;\n        while (isHexDigit(this.currentCodePoint)) {\n            this._lastIntValue =\n                16 * this._lastIntValue + digitToInt(this.currentCodePoint);\n            this.advance();\n        }\n        return this.index !== start;\n    }\n    eatLegacyOctalEscapeSequence() {\n        if (this.eatOctalDigit()) {\n            const n1 = this._lastIntValue;\n            if (this.eatOctalDigit()) {\n                const n2 = this._lastIntValue;\n                if (n1 <= 3 && this.eatOctalDigit()) {\n                    this._lastIntValue = n1 * 64 + n2 * 8 + this._lastIntValue;\n                }\n                else {\n                    this._lastIntValue = n1 * 8 + n2;\n                }\n            }\n            else {\n                this._lastIntValue = n1;\n            }\n            return true;\n        }\n        return false;\n    }\n    eatOctalDigit() {\n        const cp = this.currentCodePoint;\n        if (isOctalDigit(cp)) {\n            this.advance();\n            this._lastIntValue = cp - DigitZero;\n            return true;\n        }\n        this._lastIntValue = 0;\n        return false;\n    }\n    eatFixedHexDigits(length) {\n        const start = this.index;\n        this._lastIntValue = 0;\n        for (let i = 0; i < length; ++i) {\n            const cp = this.currentCodePoint;\n            if (!isHexDigit(cp)) {\n                this.rewind(start);\n                return false;\n            }\n            this._lastIntValue = 16 * this._lastIntValue + digitToInt(cp);\n            this.advance();\n        }\n        return true;\n    }\n}\n\nconst DummyPattern = {};\nconst DummyFlags = {};\nconst DummyCapturingGroup = {};\nclass RegExpParserState {\n    constructor(options) {\n        this._node = DummyPattern;\n        this._flags = DummyFlags;\n        this._backreferences = [];\n        this._capturingGroups = [];\n        this.source = \"\";\n        this.strict = Boolean(options && options.strict);\n        this.ecmaVersion = (options && options.ecmaVersion) || 2022;\n    }\n    get pattern() {\n        if (this._node.type !== \"Pattern\") {\n            throw new Error(\"UnknownError\");\n        }\n        return this._node;\n    }\n    get flags() {\n        if (this._flags.type !== \"Flags\") {\n            throw new Error(\"UnknownError\");\n        }\n        return this._flags;\n    }\n    onFlags(start, end, global, ignoreCase, multiline, unicode, sticky, dotAll, hasIndices) {\n        this._flags = {\n            type: \"Flags\",\n            parent: null,\n            start,\n            end,\n            raw: this.source.slice(start, end),\n            global,\n            ignoreCase,\n            multiline,\n            unicode,\n            sticky,\n            dotAll,\n            hasIndices,\n        };\n    }\n    onPatternEnter(start) {\n        this._node = {\n            type: \"Pattern\",\n            parent: null,\n            start,\n            end: start,\n            raw: \"\",\n            alternatives: [],\n        };\n        this._backreferences.length = 0;\n        this._capturingGroups.length = 0;\n    }\n    onPatternLeave(start, end) {\n        this._node.end = end;\n        this._node.raw = this.source.slice(start, end);\n        for (const reference of this._backreferences) {\n            const ref = reference.ref;\n            const group = typeof ref === \"number\"\n                ? this._capturingGroups[ref - 1]\n                : this._capturingGroups.find(g => g.name === ref);\n            reference.resolved = group;\n            group.references.push(reference);\n        }\n    }\n    onAlternativeEnter(start) {\n        const parent = this._node;\n        if (parent.type !== \"Assertion\" &&\n            parent.type !== \"CapturingGroup\" &&\n            parent.type !== \"Group\" &&\n            parent.type !== \"Pattern\") {\n            throw new Error(\"UnknownError\");\n        }\n        this._node = {\n            type: \"Alternative\",\n            parent,\n            start,\n            end: start,\n            raw: \"\",\n            elements: [],\n        };\n        parent.alternatives.push(this._node);\n    }\n    onAlternativeLeave(start, end) {\n        const node = this._node;\n        if (node.type !== \"Alternative\") {\n            throw new Error(\"UnknownError\");\n        }\n        node.end = end;\n        node.raw = this.source.slice(start, end);\n        this._node = node.parent;\n    }\n    onGroupEnter(start) {\n        const parent = this._node;\n        if (parent.type !== \"Alternative\") {\n            throw new Error(\"UnknownError\");\n        }\n        this._node = {\n            type: \"Group\",\n            parent,\n            start,\n            end: start,\n            raw: \"\",\n            alternatives: [],\n        };\n        parent.elements.push(this._node);\n    }\n    onGroupLeave(start, end) {\n        const node = this._node;\n        if (node.type !== \"Group\" || node.parent.type !== \"Alternative\") {\n            throw new Error(\"UnknownError\");\n        }\n        node.end = end;\n        node.raw = this.source.slice(start, end);\n        this._node = node.parent;\n    }\n    onCapturingGroupEnter(start, name) {\n        const parent = this._node;\n        if (parent.type !== \"Alternative\") {\n            throw new Error(\"UnknownError\");\n        }\n        this._node = {\n            type: \"CapturingGroup\",\n            parent,\n            start,\n            end: start,\n            raw: \"\",\n            name,\n            alternatives: [],\n            references: [],\n        };\n        parent.elements.push(this._node);\n        this._capturingGroups.push(this._node);\n    }\n    onCapturingGroupLeave(start, end) {\n        const node = this._node;\n        if (node.type !== \"CapturingGroup\" ||\n            node.parent.type !== \"Alternative\") {\n            throw new Error(\"UnknownError\");\n        }\n        node.end = end;\n        node.raw = this.source.slice(start, end);\n        this._node = node.parent;\n    }\n    onQuantifier(start, end, min, max, greedy) {\n        const parent = this._node;\n        if (parent.type !== \"Alternative\") {\n            throw new Error(\"UnknownError\");\n        }\n        const element = parent.elements.pop();\n        if (element == null ||\n            element.type === \"Quantifier\" ||\n            (element.type === \"Assertion\" && element.kind !== \"lookahead\")) {\n            throw new Error(\"UnknownError\");\n        }\n        const node = {\n            type: \"Quantifier\",\n            parent,\n            start: element.start,\n            end,\n            raw: this.source.slice(element.start, end),\n            min,\n            max,\n            greedy,\n            element,\n        };\n        parent.elements.push(node);\n        element.parent = node;\n    }\n    onLookaroundAssertionEnter(start, kind, negate) {\n        const parent = this._node;\n        if (parent.type !== \"Alternative\") {\n            throw new Error(\"UnknownError\");\n        }\n        const node = (this._node = {\n            type: \"Assertion\",\n            parent,\n            start,\n            end: start,\n            raw: \"\",\n            kind,\n            negate,\n            alternatives: [],\n        });\n        parent.elements.push(node);\n    }\n    onLookaroundAssertionLeave(start, end) {\n        const node = this._node;\n        if (node.type !== \"Assertion\" || node.parent.type !== \"Alternative\") {\n            throw new Error(\"UnknownError\");\n        }\n        node.end = end;\n        node.raw = this.source.slice(start, end);\n        this._node = node.parent;\n    }\n    onEdgeAssertion(start, end, kind) {\n        const parent = this._node;\n        if (parent.type !== \"Alternative\") {\n            throw new Error(\"UnknownError\");\n        }\n        parent.elements.push({\n            type: \"Assertion\",\n            parent,\n            start,\n            end,\n            raw: this.source.slice(start, end),\n            kind,\n        });\n    }\n    onWordBoundaryAssertion(start, end, kind, negate) {\n        const parent = this._node;\n        if (parent.type !== \"Alternative\") {\n            throw new Error(\"UnknownError\");\n        }\n        parent.elements.push({\n            type: \"Assertion\",\n            parent,\n            start,\n            end,\n            raw: this.source.slice(start, end),\n            kind,\n            negate,\n        });\n    }\n    onAnyCharacterSet(start, end, kind) {\n        const parent = this._node;\n        if (parent.type !== \"Alternative\") {\n            throw new Error(\"UnknownError\");\n        }\n        parent.elements.push({\n            type: \"CharacterSet\",\n            parent,\n            start,\n            end,\n            raw: this.source.slice(start, end),\n            kind,\n        });\n    }\n    onEscapeCharacterSet(start, end, kind, negate) {\n        const parent = this._node;\n        if (parent.type !== \"Alternative\" && parent.type !== \"CharacterClass\") {\n            throw new Error(\"UnknownError\");\n        }\n        parent.elements.push({\n            type: \"CharacterSet\",\n            parent,\n            start,\n            end,\n            raw: this.source.slice(start, end),\n            kind,\n            negate,\n        });\n    }\n    onUnicodePropertyCharacterSet(start, end, kind, key, value, negate) {\n        const parent = this._node;\n        if (parent.type !== \"Alternative\" && parent.type !== \"CharacterClass\") {\n            throw new Error(\"UnknownError\");\n        }\n        parent.elements.push({\n            type: \"CharacterSet\",\n            parent,\n            start,\n            end,\n            raw: this.source.slice(start, end),\n            kind,\n            key,\n            value,\n            negate,\n        });\n    }\n    onCharacter(start, end, value) {\n        const parent = this._node;\n        if (parent.type !== \"Alternative\" && parent.type !== \"CharacterClass\") {\n            throw new Error(\"UnknownError\");\n        }\n        parent.elements.push({\n            type: \"Character\",\n            parent,\n            start,\n            end,\n            raw: this.source.slice(start, end),\n            value,\n        });\n    }\n    onBackreference(start, end, ref) {\n        const parent = this._node;\n        if (parent.type !== \"Alternative\") {\n            throw new Error(\"UnknownError\");\n        }\n        const node = {\n            type: \"Backreference\",\n            parent,\n            start,\n            end,\n            raw: this.source.slice(start, end),\n            ref,\n            resolved: DummyCapturingGroup,\n        };\n        parent.elements.push(node);\n        this._backreferences.push(node);\n    }\n    onCharacterClassEnter(start, negate) {\n        const parent = this._node;\n        if (parent.type !== \"Alternative\") {\n            throw new Error(\"UnknownError\");\n        }\n        this._node = {\n            type: \"CharacterClass\",\n            parent,\n            start,\n            end: start,\n            raw: \"\",\n            negate,\n            elements: [],\n        };\n        parent.elements.push(this._node);\n    }\n    onCharacterClassLeave(start, end) {\n        const node = this._node;\n        if (node.type !== \"CharacterClass\" ||\n            node.parent.type !== \"Alternative\") {\n            throw new Error(\"UnknownError\");\n        }\n        node.end = end;\n        node.raw = this.source.slice(start, end);\n        this._node = node.parent;\n    }\n    onCharacterClassRange(start, end) {\n        const parent = this._node;\n        if (parent.type !== \"CharacterClass\") {\n            throw new Error(\"UnknownError\");\n        }\n        const elements = parent.elements;\n        const max = elements.pop();\n        const hyphen = elements.pop();\n        const min = elements.pop();\n        if (!min ||\n            !max ||\n            !hyphen ||\n            min.type !== \"Character\" ||\n            max.type !== \"Character\" ||\n            hyphen.type !== \"Character\" ||\n            hyphen.value !== HyphenMinus) {\n            throw new Error(\"UnknownError\");\n        }\n        const node = {\n            type: \"CharacterClassRange\",\n            parent,\n            start,\n            end,\n            raw: this.source.slice(start, end),\n            min,\n            max,\n        };\n        min.parent = node;\n        max.parent = node;\n        elements.push(node);\n    }\n}\nclass RegExpParser {\n    constructor(options) {\n        this._state = new RegExpParserState(options);\n        this._validator = new RegExpValidator(this._state);\n    }\n    parseLiteral(source, start = 0, end = source.length) {\n        this._state.source = source;\n        this._validator.validateLiteral(source, start, end);\n        const pattern = this._state.pattern;\n        const flags = this._state.flags;\n        const literal = {\n            type: \"RegExpLiteral\",\n            parent: null,\n            start,\n            end,\n            raw: source,\n            pattern,\n            flags,\n        };\n        pattern.parent = literal;\n        flags.parent = literal;\n        return literal;\n    }\n    parseFlags(source, start = 0, end = source.length) {\n        this._state.source = source;\n        this._validator.validateFlags(source, start, end);\n        return this._state.flags;\n    }\n    parsePattern(source, start = 0, end = source.length, uFlag = false) {\n        this._state.source = source;\n        this._validator.validatePattern(source, start, end, uFlag);\n        return this._state.pattern;\n    }\n}\n\nclass RegExpVisitor {\n    constructor(handlers) {\n        this._handlers = handlers;\n    }\n    visit(node) {\n        switch (node.type) {\n            case \"Alternative\":\n                this.visitAlternative(node);\n                break;\n            case \"Assertion\":\n                this.visitAssertion(node);\n                break;\n            case \"Backreference\":\n                this.visitBackreference(node);\n                break;\n            case \"CapturingGroup\":\n                this.visitCapturingGroup(node);\n                break;\n            case \"Character\":\n                this.visitCharacter(node);\n                break;\n            case \"CharacterClass\":\n                this.visitCharacterClass(node);\n                break;\n            case \"CharacterClassRange\":\n                this.visitCharacterClassRange(node);\n                break;\n            case \"CharacterSet\":\n                this.visitCharacterSet(node);\n                break;\n            case \"Flags\":\n                this.visitFlags(node);\n                break;\n            case \"Group\":\n                this.visitGroup(node);\n                break;\n            case \"Pattern\":\n                this.visitPattern(node);\n                break;\n            case \"Quantifier\":\n                this.visitQuantifier(node);\n                break;\n            case \"RegExpLiteral\":\n                this.visitRegExpLiteral(node);\n                break;\n            default:\n                throw new Error(`Unknown type: ${node.type}`);\n        }\n    }\n    visitAlternative(node) {\n        if (this._handlers.onAlternativeEnter) {\n            this._handlers.onAlternativeEnter(node);\n        }\n        node.elements.forEach(this.visit, this);\n        if (this._handlers.onAlternativeLeave) {\n            this._handlers.onAlternativeLeave(node);\n        }\n    }\n    visitAssertion(node) {\n        if (this._handlers.onAssertionEnter) {\n            this._handlers.onAssertionEnter(node);\n        }\n        if (node.kind === \"lookahead\" || node.kind === \"lookbehind\") {\n            node.alternatives.forEach(this.visit, this);\n        }\n        if (this._handlers.onAssertionLeave) {\n            this._handlers.onAssertionLeave(node);\n        }\n    }\n    visitBackreference(node) {\n        if (this._handlers.onBackreferenceEnter) {\n            this._handlers.onBackreferenceEnter(node);\n        }\n        if (this._handlers.onBackreferenceLeave) {\n            this._handlers.onBackreferenceLeave(node);\n        }\n    }\n    visitCapturingGroup(node) {\n        if (this._handlers.onCapturingGroupEnter) {\n            this._handlers.onCapturingGroupEnter(node);\n        }\n        node.alternatives.forEach(this.visit, this);\n        if (this._handlers.onCapturingGroupLeave) {\n            this._handlers.onCapturingGroupLeave(node);\n        }\n    }\n    visitCharacter(node) {\n        if (this._handlers.onCharacterEnter) {\n            this._handlers.onCharacterEnter(node);\n        }\n        if (this._handlers.onCharacterLeave) {\n            this._handlers.onCharacterLeave(node);\n        }\n    }\n    visitCharacterClass(node) {\n        if (this._handlers.onCharacterClassEnter) {\n            this._handlers.onCharacterClassEnter(node);\n        }\n        node.elements.forEach(this.visit, this);\n        if (this._handlers.onCharacterClassLeave) {\n            this._handlers.onCharacterClassLeave(node);\n        }\n    }\n    visitCharacterClassRange(node) {\n        if (this._handlers.onCharacterClassRangeEnter) {\n            this._handlers.onCharacterClassRangeEnter(node);\n        }\n        this.visitCharacter(node.min);\n        this.visitCharacter(node.max);\n        if (this._handlers.onCharacterClassRangeLeave) {\n            this._handlers.onCharacterClassRangeLeave(node);\n        }\n    }\n    visitCharacterSet(node) {\n        if (this._handlers.onCharacterSetEnter) {\n            this._handlers.onCharacterSetEnter(node);\n        }\n        if (this._handlers.onCharacterSetLeave) {\n            this._handlers.onCharacterSetLeave(node);\n        }\n    }\n    visitFlags(node) {\n        if (this._handlers.onFlagsEnter) {\n            this._handlers.onFlagsEnter(node);\n        }\n        if (this._handlers.onFlagsLeave) {\n            this._handlers.onFlagsLeave(node);\n        }\n    }\n    visitGroup(node) {\n        if (this._handlers.onGroupEnter) {\n            this._handlers.onGroupEnter(node);\n        }\n        node.alternatives.forEach(this.visit, this);\n        if (this._handlers.onGroupLeave) {\n            this._handlers.onGroupLeave(node);\n        }\n    }\n    visitPattern(node) {\n        if (this._handlers.onPatternEnter) {\n            this._handlers.onPatternEnter(node);\n        }\n        node.alternatives.forEach(this.visit, this);\n        if (this._handlers.onPatternLeave) {\n            this._handlers.onPatternLeave(node);\n        }\n    }\n    visitQuantifier(node) {\n        if (this._handlers.onQuantifierEnter) {\n            this._handlers.onQuantifierEnter(node);\n        }\n        this.visit(node.element);\n        if (this._handlers.onQuantifierLeave) {\n            this._handlers.onQuantifierLeave(node);\n        }\n    }\n    visitRegExpLiteral(node) {\n        if (this._handlers.onRegExpLiteralEnter) {\n            this._handlers.onRegExpLiteralEnter(node);\n        }\n        this.visitPattern(node.pattern);\n        this.visitFlags(node.flags);\n        if (this._handlers.onRegExpLiteralLeave) {\n            this._handlers.onRegExpLiteralLeave(node);\n        }\n    }\n}\n\nfunction parseRegExpLiteral(source, options) {\n    return new RegExpParser(options).parseLiteral(String(source));\n}\nfunction validateRegExpLiteral(source, options) {\n    return new RegExpValidator(options).validateLiteral(source);\n}\nfunction visitRegExpAST(node, handlers) {\n    new RegExpVisitor(handlers).visit(node);\n}\n\nexports.AST = ast;\nexports.RegExpParser = RegExpParser;\nexports.RegExpValidator = RegExpValidator;\nexports.parseRegExpLiteral = parseRegExpLiteral;\nexports.validateRegExpLiteral = validateRegExpLiteral;\nexports.visitRegExpAST = visitRegExpAST;\n//# sourceMappingURL=index.js.map\n/README.md\u0015i# regexpp\n\n[![npm version](https://img.shields.io/npm/v/regexpp.svg)](https://www.npmjs.com/package/regexpp)\n[![Downloads/month](https://img.shields.io/npm/dm/regexpp.svg)](http://www.npmtrends.com/regexpp)\n[![Build Status](https://github.com/mysticatea/regexpp/workflows/CI/badge.svg)](https://github.com/mysticatea/regexpp/actions)\n[![codecov](https://codecov.io/gh/mysticatea/regexpp/branch/master/graph/badge.svg)](https://codecov.io/gh/mysticatea/regexpp)\n[![Dependency Status](https://david-dm.org/mysticatea/regexpp.svg)](https://david-dm.org/mysticatea/regexpp)\n\nA regular expression parser for ECMAScript.\n\n## 💿 Installation\n\n```bash\n$ npm install regexpp\n```\n\n- require Node.js 8 or newer.\n\n## 📖 Usage\n\n```ts\nimport {\n    AST,\n    RegExpParser,\n    RegExpValidator,\n    RegExpVisitor,\n    parseRegExpLiteral,\n    validateRegExpLiteral,\n    visitRegExpAST\n} from \"regexpp\"\n```\n\n### parseRegExpLiteral(source, options?)\n\nParse a given regular expression literal then make AST object.\n\nThis is equivalent to `new RegExpParser(options).parseLiteral(source)`.\n\n- **Parameters:**\n    - `source` (`string | RegExp`) The source code to parse.\n    - `options?` ([`RegExpParser.Options`]) The options to parse.\n- **Return:**\n    - The AST of the regular expression.\n\n### validateRegExpLiteral(source, options?)\n\nValidate a given regular expression literal.\n\nThis is equivalent to `new RegExpValidator(options).validateLiteral(source)`.\n\n- **Parameters:**\n    - `source` (`string`) The source code to validate.\n    - `options?` ([`RegExpValidator.Options`]) The options to validate.\n\n### visitRegExpAST(ast, handlers)\n\nVisit each node of a given AST.\n\nThis is equivalent to `new RegExpVisitor(handlers).visit(ast)`.\n\n- **Parameters:**\n    - `ast` ([`AST.Node`]) The AST to visit.\n    - `handlers` ([`RegExpVisitor.Handlers`]) The callbacks.\n\n### RegExpParser\n\n#### new RegExpParser(options?)\n\n- **Parameters:**\n    - `options?` ([`RegExpParser.Options`]) The options to parse.\n\n#### parser.parseLiteral(source, start?, end?)\n\nParse a regular expression literal.\n\n- **Parameters:**\n    - `source` (`string`) The source code to parse. E.g. `\"/abc/g\"`.\n    - `start?` (`number`) The start index in the source code. Default is `0`.\n    - `end?` (`number`) The end index in the source code. Default is `source.length`.\n- **Return:**\n    - The AST of the regular expression.\n\n#### parser.parsePattern(source, start?, end?, uFlag?)\n\nParse a regular expression pattern.\n\n- **Parameters:**\n    - `source` (`string`) The source code to parse. E.g. `\"abc\"`.\n    - `start?` (`number`) The start index in the source code. Default is `0`.\n    - `end?` (`number`) The end index in the source code. Default is `source.length`.\n    - `uFlag?` (`boolean`) The flag to enable Unicode mode.\n- **Return:**\n    - The AST of the regular expression pattern.\n\n#### parser.parseFlags(source, start?, end?)\n\nParse a regular expression flags.\n\n- **Parameters:**\n    - `source` (`string`) The source code to parse. E.g. `\"gim\"`.\n    - `start?` (`number`) The start index in the source code. Default is `0`.\n    - `end?` (`number`) The end index in the source code. Default is `source.length`.\n- **Return:**\n    - The AST of the regular expression flags.\n\n### RegExpValidator\n\n#### new RegExpValidator(options)\n\n- **Parameters:**\n    - `options` ([`RegExpValidator.Options`]) The options to validate.\n\n#### validator.validateLiteral(source, start, end)\n\nValidate a regular expression literal.\n\n- **Parameters:**\n    - `source` (`string`) The source code to validate.\n    - `start?` (`number`) The start index in the source code. Default is `0`.\n    - `end?` (`number`) The end index in the source code. Default is `source.length`.\n\n#### validator.validatePattern(source, start, end, uFlag)\n\nValidate a regular expression pattern.\n\n- **Parameters:**\n    - `source` (`string`) The source code to validate.\n    - `start?` (`number`) The start index in the source code. Default is `0`.\n    - `end?` (`number`) The end index in the source code. Default is `source.length`.\n    - `uFlag?` (`boolean`) The flag to enable Unicode mode.\n\n#### validator.validateFlags(source, start, end)\n\nValidate a regular expression flags.\n\n- **Parameters:**\n    - `source` (`string`) The source code to validate.\n    - `start?` (`number`) The start index in the source code. Default is `0`.\n    - `end?` (`number`) The end index in the source code. Default is `source.length`.\n\n### RegExpVisitor\n\n#### new RegExpVisitor(handlers)\n\n- **Parameters:**\n    - `handlers` ([`RegExpVisitor.Handlers`]) The callbacks.\n\n#### visitor.visit(ast)\n\nValidate a regular expression literal.\n\n- **Parameters:**\n    - `ast` ([`AST.Node`]) The AST to visit.\n\n## 📰 Changelog\n\n- [GitHub Releases](https://github.com/mysticatea/regexpp/releases)\n\n## 🍻 Contributing\n\nWelcome contributing!\n\nPlease use GitHub's Issues/PRs.\n\n### Development Tools\n\n- `npm test` runs tests and measures coverage.\n- `npm run build` compiles TypeScript source code to `index.js`, `index.js.map`, and `index.d.ts`.\n- `npm run clean` removes the temporary files which are created by `npm test` and `npm run build`.\n- `npm run lint` runs ESLint.\n- `npm run update:test` updates test fixtures.\n- `npm run update:ids` updates `src/unicode/ids.ts`.\n- `npm run watch` runs tests with `--watch` option.\n\n[`AST.Node`]: src/ast.ts#L4\n[`RegExpParser.Options`]: src/parser.ts#L539\n[`RegExpValidator.Options`]: src/validator.ts#L127\n[`RegExpVisitor.Handlers`]: src/visitor.ts#L204\n/index.mjs\u0000\u0001&/*! @author Toru Nagashima <https://github.com/mysticatea> */\n\n\nvar ast = /*#__PURE__*/Object.freeze({\n\n});\n\nlet largeIdStartRanges = undefined;\nlet largeIdContinueRanges = undefined;\nfunction isIdStart(cp) {\n    if (cp < 0x41)\n        return false;\n    if (cp < 0x5b)\n        return true;\n    if (cp < 0x61)\n        return false;\n    if (cp < 0x7b)\n        return true;\n    return isLargeIdStart(cp);\n}\nfunction isIdContinue(cp) {\n    if (cp < 0x30)\n        return false;\n    if (cp < 0x3a)\n        return true;\n    if (cp < 0x41)\n        return false;\n    if (cp < 0x5b)\n        return true;\n    if (cp === 0x5f)\n        return true;\n    if (cp < 0x61)\n        return false;\n    if (cp < 0x7b)\n        return true;\n    return isLargeIdStart(cp) || isLargeIdContinue(cp);\n}\nfunction isLargeIdStart(cp) {\n    return isInRange(cp, largeIdStartRanges || (largeIdStartRanges = initLargeIdStartRanges()));\n}\nfunction isLargeIdContinue(cp) {\n    return isInRange(cp, largeIdContinueRanges ||\n        (largeIdContinueRanges = initLargeIdContinueRanges()));\n}\nfunction initLargeIdStartRanges() {\n    return restoreRanges(\"4q 0 b 0 5 0 6 m 2 u 2 cp 5 b f 4 8 0 2 0 3m 4 2 1 3 3 2 0 7 0 2 2 2 0 2 j 2 2a 2 3u 9 4l 2 11 3 0 7 14 20 q 5 3 1a 16 10 1 2 2q 2 0 g 1 8 1 b 2 3 0 h 0 2 t u 2g c 0 p w a 1 5 0 6 l 5 0 a 0 4 0 o o 8 a 1i k 2 h 1p 1h 4 0 j 0 8 9 g f 5 7 3 1 3 l 2 6 2 0 4 3 4 0 h 0 e 1 2 2 f 1 b 0 9 5 5 1 3 l 2 6 2 1 2 1 2 1 w 3 2 0 k 2 h 8 2 2 2 l 2 6 2 1 2 4 4 0 j 0 g 1 o 0 c 7 3 1 3 l 2 6 2 1 2 4 4 0 v 1 2 2 g 0 i 0 2 5 4 2 2 3 4 1 2 0 2 1 4 1 4 2 4 b n 0 1h 7 2 2 2 m 2 f 4 0 r 2 6 1 v 0 5 7 2 2 2 m 2 9 2 4 4 0 x 0 2 1 g 1 i 8 2 2 2 14 3 0 h 0 6 2 9 2 p 5 6 h 4 n 2 8 2 0 3 6 1n 1b 2 1 d 6 1n 1 2 0 2 4 2 n 2 0 2 9 2 1 a 0 3 4 2 0 m 3 x 0 1s 7 2 z s 4 38 16 l 0 h 5 5 3 4 0 4 1 8 2 5 c d 0 i 11 2 0 6 0 3 16 2 98 2 3 3 6 2 0 2 3 3 14 2 3 3 w 2 3 3 6 2 0 2 3 3 e 2 1k 2 3 3 1u 12 f h 2d 3 5 4 h7 3 g 2 p 6 22 4 a 8 c 2 3 f h f h f c 2 2 g 1f 10 0 5 0 1w 2g 8 14 2 0 6 1x b u 1e t 3 4 c 17 5 p 1j m a 1g 2b 0 2m 1a i 6 1k t e 1 b 17 r z 16 2 b z 3 8 8 16 3 2 16 3 2 5 2 1 4 0 6 5b 1t 7p 3 5 3 11 3 5 3 7 2 0 2 0 2 0 2 u 3 1g 2 6 2 0 4 2 2 6 4 3 3 5 5 c 6 2 2 6 39 0 e 0 h c 2u 0 5 0 3 9 2 0 3 5 7 0 2 0 2 0 2 f 3 3 6 4 5 0 i 14 22g 1a 2 1a 2 3o 7 3 4 1 d 11 2 0 6 0 3 1j 8 0 h m a 6 2 6 2 6 2 6 2 6 2 6 2 6 2 6 fb 2 q 8 8 4 3 4 5 2d 5 4 2 2h 2 3 6 16 2 2l i v 1d f e9 533 1t g70 4 wc 1w 19 3 7g 4 f b 1 l 1a h u 3 27 14 8 3 2u 3 1g 3 8 17 c 2 2 2 3 2 m u 1f f 1d 1r 5 4 0 2 1 c r b m q s 8 1a t 0 h 4 2 9 b 4 2 14 o 2 2 7 l m 4 0 4 1d 2 0 4 1 3 4 3 0 2 0 p 2 3 a 8 2 d 5 3 5 3 5 a 6 2 6 2 16 2 d 7 36 u 8mb d m 5 1c 6it a5 3 2x 13 6 d 4 6 0 2 9 2 c 2 4 2 0 2 1 2 1 2 2z y a2 j 1r 3 1h 15 b 39 4 2 3q 11 p 7 p c 2g 4 5 3 5 3 5 3 2 10 b 2 p 2 i 2 1 2 e 3 d z 3e 1y 1g 7g s 4 1c 1c v e t 6 11 b t 3 z 5 7 2 4 17 4d j z 5 z 5 13 9 1f 4d 8m a l b 7 49 5 3 0 2 17 2 1 4 0 3 m b m a u 1u i 2 1 b l b p 1z 1j 7 1 1t 0 g 3 2 2 2 s 17 s 4 s 10 7 2 r s 1h b l b i e h 33 20 1k 1e e 1e e z 9p 15 7 1 27 s b 0 9 l 2z k s m d 1g 24 18 x o r z u 0 3 0 9 y 4 0 d 1b f 3 m 0 2 0 10 h 2 o 2d 6 2 0 2 3 2 e 2 9 8 1a 13 7 3 1 3 l 2 6 2 1 2 4 4 0 j 0 d 4 4f 1g j 3 l 2 v 1b l 1 2 0 55 1a 16 3 11 1b l 0 1o 16 e 0 20 q 6e 17 39 1r w 7 3 0 3 7 2 1 2 n g 0 2 0 2n 7 3 12 h 0 2 0 t 0 b 13 8 0 m 0 c 19 k 0 z 1k 7c 8 2 10 i 0 1e t 35 6 2 1 2 11 m 0 q 5 2 1 2 v f 0 94 i 5a 0 28 pl 2v 32 i 5f 24d tq 34i g6 6nu fs 8 u 36 t j 1b h 3 w k 6 i j5 1r 3l 22 6 0 1v c 1t 1 2 0 t 4qf 9 yd 17 8 6wo 7y 1e 2 i 3 9 az 1s5 2y 6 c 4 8 8 9 4mf 2c 2 1y 2 1 3 0 3 1 3 3 2 b 2 0 2 6 2 1s 2 3 3 7 2 6 2 r 2 3 2 4 2 0 4 6 2 9f 3 o 2 o 2 u 2 o 2 u 2 o 2 u 2 o 2 u 2 o 2 7 1th 18 b 6 h 0 aa 17 105 5g 1o 1v 8 0 xh 3 2 q 2 1 2 0 3 0 2 9 2 3 2 0 2 0 7 0 5 0 2 0 2 0 2 2 2 1 2 0 3 0 2 0 2 0 2 0 2 0 2 1 2 0 3 3 2 6 2 3 2 3 2 0 2 9 2 g 6 2 2 4 2 g 3et wyl z 378 c 65 3 4g1 f 5rk 2e8 f1 15v 3t6\");\n}\nfunction initLargeIdContinueRanges() {\n    return restoreRanges(\"53 0 g9 33 o 0 70 4 7e 18 2 0 2 1 2 1 2 0 21 a 1d u 7 0 2u 6 3 5 3 1 2 3 3 9 o 0 v q 2k a g 9 y 8 a 0 p 3 2 8 2 2 2 4 18 2 3c e 2 w 1j 2 2 h 2 6 b 1 3 9 i 2 1l 0 2 6 3 1 3 2 a 0 b 1 3 9 f 0 3 2 1l 0 2 4 5 1 3 2 4 0 l b 4 0 c 2 1l 0 2 7 2 2 2 2 l 1 3 9 b 5 2 2 1l 0 2 6 3 1 3 2 8 2 b 1 3 9 j 0 1o 4 4 2 2 3 a 0 f 9 h 4 1m 6 2 2 2 3 8 1 c 1 3 9 i 2 1l 0 2 6 2 2 2 3 8 1 c 1 3 9 h 3 1k 1 2 6 2 2 2 3 a 0 b 1 3 9 i 2 1z 0 5 5 2 0 2 7 7 9 3 1 1q 0 3 6 d 7 2 9 2g 0 3 8 c 5 3 9 1r 1 7 9 c 0 2 0 2 0 5 1 1e j 2 1 6 a 2 z a 0 2t j 2 9 d 3 5 2 2 2 3 6 4 3 e b 2 e jk 2 a 8 pt 2 u 2 u 1 v 1 1t v a 0 3 9 y 2 3 9 40 0 3b b 5 b b 9 3l a 1p 4 1m 9 2 s 3 a 7 9 n d 2 1 1s 4 1c g c 9 i 8 d 2 v c 3 9 19 d 1d j 9 9 7 9 3b 2 2 k 5 0 7 0 3 2 5j 1l 2 4 g0 1 k 0 3g c 5 0 4 b 2db 2 3y 0 2p v ff 5 2y 1 n7q 9 1y 0 5 9 x 1 29 1 7l 0 4 0 5 0 o 4 5 0 2c 1 1f h b 9 7 h e a t 7 q c 19 3 1c d g 9 c 0 b 9 1c d d 0 9 1 3 9 y 2 1f 0 2 2 3 1 6 1 2 0 16 4 6 1 6l 7 2 1 3 9 fmt 0 ki f h f 4 1 p 2 5d 9 12 0 ji 0 6b 0 46 4 86 9 120 2 2 1 6 3 15 2 5 0 4m 1 fy 3 9 9 aa 1 4a a 4w 2 1i e w 9 g 3 1a a 1i 9 7 2 11 d 2 9 6 1 19 0 d 2 1d d 9 3 2 b 2b b 7 0 4h b 6 9 7 3 1k 1 2 6 3 1 3 2 a 0 b 1 3 6 4 4 5d h a 9 5 0 2a j d 9 5y 6 3 8 s 1 2b g g 9 2a c 9 9 2c e 5 9 6r e 4m 9 1z 5 2 1 3 3 2 0 2 1 d 9 3c 6 3 6 4 0 t 9 15 6 2 3 9 0 a a 1b f ba 7 2 7 h 9 1l l 2 d 3f 5 4 0 2 1 2 6 2 0 9 9 1d 4 2 1 2 4 9 9 96 3 ewa 9 3r 4 1o 6 q 9 s6 0 2 1i 8 3 2a 0 c 1 f58 1 43r 4 4 5 9 7 3 6 v 3 45 2 13e 1d e9 1i 5 1d 9 0 f 0 n 4 2 e 11t 6 2 g 3 6 2 1 2 4 7a 6 a 9 bn d 15j 6 32 6 6 9 3o7 9 gvt3 6n\");\n}\nfunction isInRange(cp, ranges) {\n    let l = 0, r = (ranges.length / 2) | 0, i = 0, min = 0, max = 0;\n    while (l < r) {\n        i = ((l + r) / 2) | 0;\n        min = ranges[2 * i];\n        max = ranges[2 * i + 1];\n        if (cp < min) {\n            r = i;\n        }\n        else if (cp > max) {\n            l = i + 1;\n        }\n        else {\n            return true;\n        }\n    }\n    return false;\n}\nfunction restoreRanges(data) {\n    let last = 0;\n    return data.split(\" \").map(s => (last += parseInt(s, 36) | 0));\n}\n\nclass DataSet {\n    constructor(raw2018, raw2019, raw2020, raw2021) {\n        this._raw2018 = raw2018;\n        this._raw2019 = raw2019;\n        this._raw2020 = raw2020;\n        this._raw2021 = raw2021;\n    }\n    get es2018() {\n        return (this._set2018 || (this._set2018 = new Set(this._raw2018.split(\" \"))));\n    }\n    get es2019() {\n        return (this._set2019 || (this._set2019 = new Set(this._raw2019.split(\" \"))));\n    }\n    get es2020() {\n        return (this._set2020 || (this._set2020 = new Set(this._raw2020.split(\" \"))));\n    }\n    get es2021() {\n        return (this._set2021 || (this._set2021 = new Set(this._raw2021.split(\" \"))));\n    }\n}\nconst gcNameSet = new Set([\"General_Category\", \"gc\"]);\nconst scNameSet = new Set([\"Script\", \"Script_Extensions\", \"sc\", \"scx\"]);\nconst gcValueSets = new DataSet(\"C Cased_Letter Cc Cf Close_Punctuation Cn Co Combining_Mark Connector_Punctuation Control Cs Currency_Symbol Dash_Punctuation Decimal_Number Enclosing_Mark Final_Punctuation Format Initial_Punctuation L LC Letter Letter_Number Line_Separator Ll Lm Lo Lowercase_Letter Lt Lu M Mark Math_Symbol Mc Me Mn Modifier_Letter Modifier_Symbol N Nd Nl No Nonspacing_Mark Number Open_Punctuation Other Other_Letter Other_Number Other_Punctuation Other_Symbol P Paragraph_Separator Pc Pd Pe Pf Pi Po Private_Use Ps Punctuation S Sc Separator Sk Sm So Space_Separator Spacing_Mark Surrogate Symbol Titlecase_Letter Unassigned Uppercase_Letter Z Zl Zp Zs cntrl digit punct\", \"\", \"\", \"\");\nconst scValueSets = new DataSet(\"Adlam Adlm Aghb Ahom Anatolian_Hieroglyphs Arab Arabic Armenian Armi Armn Avestan Avst Bali Balinese Bamu Bamum Bass Bassa_Vah Batak Batk Beng Bengali Bhaiksuki Bhks Bopo Bopomofo Brah Brahmi Brai Braille Bugi Buginese Buhd Buhid Cakm Canadian_Aboriginal Cans Cari Carian Caucasian_Albanian Chakma Cham Cher Cherokee Common Copt Coptic Cprt Cuneiform Cypriot Cyrillic Cyrl Deseret Deva Devanagari Dsrt Dupl Duployan Egyp Egyptian_Hieroglyphs Elba Elbasan Ethi Ethiopic Geor Georgian Glag Glagolitic Gonm Goth Gothic Gran Grantha Greek Grek Gujarati Gujr Gurmukhi Guru Han Hang Hangul Hani Hano Hanunoo Hatr Hatran Hebr Hebrew Hira Hiragana Hluw Hmng Hung Imperial_Aramaic Inherited Inscriptional_Pahlavi Inscriptional_Parthian Ital Java Javanese Kaithi Kali Kana Kannada Katakana Kayah_Li Khar Kharoshthi Khmer Khmr Khoj Khojki Khudawadi Knda Kthi Lana Lao Laoo Latin Latn Lepc Lepcha Limb Limbu Lina Linb Linear_A Linear_B Lisu Lyci Lycian Lydi Lydian Mahajani Mahj Malayalam Mand Mandaic Mani Manichaean Marc Marchen Masaram_Gondi Meetei_Mayek Mend Mende_Kikakui Merc Mero Meroitic_Cursive Meroitic_Hieroglyphs Miao Mlym Modi Mong Mongolian Mro Mroo Mtei Mult Multani Myanmar Mymr Nabataean Narb Nbat New_Tai_Lue Newa Nko Nkoo Nshu Nushu Ogam Ogham Ol_Chiki Olck Old_Hungarian Old_Italic Old_North_Arabian Old_Permic Old_Persian Old_South_Arabian Old_Turkic Oriya Orkh Orya Osage Osge Osma Osmanya Pahawh_Hmong Palm Palmyrene Pau_Cin_Hau Pauc Perm Phag Phags_Pa Phli Phlp Phnx Phoenician Plrd Prti Psalter_Pahlavi Qaac Qaai Rejang Rjng Runic Runr Samaritan Samr Sarb Saur Saurashtra Sgnw Sharada Shavian Shaw Shrd Sidd Siddham SignWriting Sind Sinh Sinhala Sora Sora_Sompeng Soyo Soyombo Sund Sundanese Sylo Syloti_Nagri Syrc Syriac Tagalog Tagb Tagbanwa Tai_Le Tai_Tham Tai_Viet Takr Takri Tale Talu Tamil Taml Tang Tangut Tavt Telu Telugu Tfng Tglg Thaa Thaana Thai Tibetan Tibt Tifinagh Tirh Tirhuta Ugar Ugaritic Vai Vaii Wara Warang_Citi Xpeo Xsux Yi Yiii Zanabazar_Square Zanb Zinh Zyyy\", \"Dogr Dogra Gong Gunjala_Gondi Hanifi_Rohingya Maka Makasar Medefaidrin Medf Old_Sogdian Rohg Sogd Sogdian Sogo\", \"Elym Elymaic Hmnp Nand Nandinagari Nyiakeng_Puachue_Hmong Wancho Wcho\", \"Chorasmian Chrs Diak Dives_Akuru Khitan_Small_Script Kits Yezi Yezidi\");\nconst binPropertySets = new DataSet(\"AHex ASCII ASCII_Hex_Digit Alpha Alphabetic Any Assigned Bidi_C Bidi_Control Bidi_M Bidi_Mirrored CI CWCF CWCM CWKCF CWL CWT CWU Case_Ignorable Cased Changes_When_Casefolded Changes_When_Casemapped Changes_When_Lowercased Changes_When_NFKC_Casefolded Changes_When_Titlecased Changes_When_Uppercased DI Dash Default_Ignorable_Code_Point Dep Deprecated Dia Diacritic Emoji Emoji_Component Emoji_Modifier Emoji_Modifier_Base Emoji_Presentation Ext Extender Gr_Base Gr_Ext Grapheme_Base Grapheme_Extend Hex Hex_Digit IDC IDS IDSB IDST IDS_Binary_Operator IDS_Trinary_Operator ID_Continue ID_Start Ideo Ideographic Join_C Join_Control LOE Logical_Order_Exception Lower Lowercase Math NChar Noncharacter_Code_Point Pat_Syn Pat_WS Pattern_Syntax Pattern_White_Space QMark Quotation_Mark RI Radical Regional_Indicator SD STerm Sentence_Terminal Soft_Dotted Term Terminal_Punctuation UIdeo Unified_Ideograph Upper Uppercase VS Variation_Selector White_Space XIDC XIDS XID_Continue XID_Start space\", \"Extended_Pictographic\", \"\", \"EBase EComp EMod EPres ExtPict\");\nfunction isValidUnicodeProperty(version, name, value) {\n    if (gcNameSet.has(name)) {\n        return version >= 2018 && gcValueSets.es2018.has(value);\n    }\n    if (scNameSet.has(name)) {\n        return ((version >= 2018 && scValueSets.es2018.has(value)) ||\n            (version >= 2019 && scValueSets.es2019.has(value)) ||\n            (version >= 2020 && scValueSets.es2020.has(value)) ||\n            (version >= 2021 && scValueSets.es2021.has(value)));\n    }\n    return false;\n}\nfunction isValidLoneUnicodeProperty(version, value) {\n    return ((version >= 2018 && binPropertySets.es2018.has(value)) ||\n        (version >= 2019 && binPropertySets.es2019.has(value)) ||\n        (version >= 2021 && binPropertySets.es2021.has(value)));\n}\n\nconst Backspace = 0x08;\nconst CharacterTabulation = 0x09;\nconst LineFeed = 0x0a;\nconst LineTabulation = 0x0b;\nconst FormFeed = 0x0c;\nconst CarriageReturn = 0x0d;\nconst ExclamationMark = 0x21;\nconst DollarSign = 0x24;\nconst LeftParenthesis = 0x28;\nconst RightParenthesis = 0x29;\nconst Asterisk = 0x2a;\nconst PlusSign = 0x2b;\nconst Comma = 0x2c;\nconst HyphenMinus = 0x2d;\nconst FullStop = 0x2e;\nconst Solidus = 0x2f;\nconst DigitZero = 0x30;\nconst DigitOne = 0x31;\nconst DigitSeven = 0x37;\nconst DigitNine = 0x39;\nconst Colon = 0x3a;\nconst LessThanSign = 0x3c;\nconst EqualsSign = 0x3d;\nconst GreaterThanSign = 0x3e;\nconst QuestionMark = 0x3f;\nconst LatinCapitalLetterA = 0x41;\nconst LatinCapitalLetterB = 0x42;\nconst LatinCapitalLetterD = 0x44;\nconst LatinCapitalLetterF = 0x46;\nconst LatinCapitalLetterP = 0x50;\nconst LatinCapitalLetterS = 0x53;\nconst LatinCapitalLetterW = 0x57;\nconst LatinCapitalLetterZ = 0x5a;\nconst LowLine = 0x5f;\nconst LatinSmallLetterA = 0x61;\nconst LatinSmallLetterB = 0x62;\nconst LatinSmallLetterC = 0x63;\nconst LatinSmallLetterD = 0x64;\nconst LatinSmallLetterF = 0x66;\nconst LatinSmallLetterG = 0x67;\nconst LatinSmallLetterI = 0x69;\nconst LatinSmallLetterK = 0x6b;\nconst LatinSmallLetterM = 0x6d;\nconst LatinSmallLetterN = 0x6e;\nconst LatinSmallLetterP = 0x70;\nconst LatinSmallLetterR = 0x72;\nconst LatinSmallLetterS = 0x73;\nconst LatinSmallLetterT = 0x74;\nconst LatinSmallLetterU = 0x75;\nconst LatinSmallLetterV = 0x76;\nconst LatinSmallLetterW = 0x77;\nconst LatinSmallLetterX = 0x78;\nconst LatinSmallLetterY = 0x79;\nconst LatinSmallLetterZ = 0x7a;\nconst LeftSquareBracket = 0x5b;\nconst ReverseSolidus = 0x5c;\nconst RightSquareBracket = 0x5d;\nconst CircumflexAccent = 0x5e;\nconst LeftCurlyBracket = 0x7b;\nconst VerticalLine = 0x7c;\nconst RightCurlyBracket = 0x7d;\nconst ZeroWidthNonJoiner = 0x200c;\nconst ZeroWidthJoiner = 0x200d;\nconst LineSeparator = 0x2028;\nconst ParagraphSeparator = 0x2029;\nconst MinCodePoint = 0x00;\nconst MaxCodePoint = 0x10ffff;\nfunction isLatinLetter(code) {\n    return ((code >= LatinCapitalLetterA && code <= LatinCapitalLetterZ) ||\n        (code >= LatinSmallLetterA && code <= LatinSmallLetterZ));\n}\nfunction isDecimalDigit(code) {\n    return code >= DigitZero && code <= DigitNine;\n}\nfunction isOctalDigit(code) {\n    return code >= DigitZero && code <= DigitSeven;\n}\nfunction isHexDigit(code) {\n    return ((code >= DigitZero && code <= DigitNine) ||\n        (code >= LatinCapitalLetterA && code <= LatinCapitalLetterF) ||\n        (code >= LatinSmallLetterA && code <= LatinSmallLetterF));\n}\nfunction isLineTerminator(code) {\n    return (code === LineFeed ||\n        code === CarriageReturn ||\n        code === LineSeparator ||\n        code === ParagraphSeparator);\n}\nfunction isValidUnicode(code) {\n    return code >= MinCodePoint && code <= MaxCodePoint;\n}\nfunction digitToInt(code) {\n    if (code >= LatinSmallLetterA && code <= LatinSmallLetterF) {\n        return code - LatinSmallLetterA + 10;\n    }\n    if (code >= LatinCapitalLetterA && code <= LatinCapitalLetterF) {\n        return code - LatinCapitalLetterA + 10;\n    }\n    return code - DigitZero;\n}\nfunction isLeadSurrogate(code) {\n    return code >= 0xd800 && code <= 0xdbff;\n}\nfunction isTrailSurrogate(code) {\n    return code >= 0xdc00 && code <= 0xdfff;\n}\nfunction combineSurrogatePair(lead, trail) {\n    return (lead - 0xd800) * 0x400 + (trail - 0xdc00) + 0x10000;\n}\n\nconst legacyImpl = {\n    at(s, end, i) {\n        return i < end ? s.charCodeAt(i) : -1;\n    },\n    width(c) {\n        return 1;\n    },\n};\nconst unicodeImpl = {\n    at(s, end, i) {\n        return i < end ? s.codePointAt(i) : -1;\n    },\n    width(c) {\n        return c > 0xffff ? 2 : 1;\n    },\n};\nclass Reader {\n    constructor() {\n        this._impl = legacyImpl;\n        this._s = \"\";\n        this._i = 0;\n        this._end = 0;\n        this._cp1 = -1;\n        this._w1 = 1;\n        this._cp2 = -1;\n        this._w2 = 1;\n        this._cp3 = -1;\n        this._w3 = 1;\n        this._cp4 = -1;\n    }\n    get source() {\n        return this._s;\n    }\n    get index() {\n        return this._i;\n    }\n    get currentCodePoint() {\n        return this._cp1;\n    }\n    get nextCodePoint() {\n        return this._cp2;\n    }\n    get nextCodePoint2() {\n        return this._cp3;\n    }\n    get nextCodePoint3() {\n        return this._cp4;\n    }\n    reset(source, start, end, uFlag) {\n        this._impl = uFlag ? unicodeImpl : legacyImpl;\n        this._s = source;\n        this._end = end;\n        this.rewind(start);\n    }\n    rewind(index) {\n        const impl = this._impl;\n        this._i = index;\n        this._cp1 = impl.at(this._s, this._end, index);\n        this._w1 = impl.width(this._cp1);\n        this._cp2 = impl.at(this._s, this._end, index + this._w1);\n        this._w2 = impl.width(this._cp2);\n        this._cp3 = impl.at(this._s, this._end, index + this._w1 + this._w2);\n        this._w3 = impl.width(this._cp3);\n        this._cp4 = impl.at(this._s, this._end, index + this._w1 + this._w2 + this._w3);\n    }\n    advance() {\n        if (this._cp1 !== -1) {\n            const impl = this._impl;\n            this._i += this._w1;\n            this._cp1 = this._cp2;\n            this._w1 = this._w2;\n            this._cp2 = this._cp3;\n            this._w2 = impl.width(this._cp2);\n            this._cp3 = this._cp4;\n            this._w3 = impl.width(this._cp3);\n            this._cp4 = impl.at(this._s, this._end, this._i + this._w1 + this._w2 + this._w3);\n        }\n    }\n    eat(cp) {\n        if (this._cp1 === cp) {\n            this.advance();\n            return true;\n        }\n        return false;\n    }\n    eat2(cp1, cp2) {\n        if (this._cp1 === cp1 && this._cp2 === cp2) {\n            this.advance();\n            this.advance();\n            return true;\n        }\n        return false;\n    }\n    eat3(cp1, cp2, cp3) {\n        if (this._cp1 === cp1 && this._cp2 === cp2 && this._cp3 === cp3) {\n            this.advance();\n            this.advance();\n            this.advance();\n            return true;\n        }\n        return false;\n    }\n}\n\nclass RegExpSyntaxError extends SyntaxError {\n    constructor(source, uFlag, index, message) {\n        if (source) {\n            if (!source.startsWith(\"/\")) {\n                source = `/${source}/${uFlag ? \"u\" : \"\"}`;\n            }\n            source = `: ${source}`;\n        }\n        super(`Invalid regular expression${source}: ${message}`);\n        this.index = index;\n    }\n}\n\nfunction isSyntaxCharacter(cp) {\n    return (cp === CircumflexAccent ||\n        cp === DollarSign ||\n        cp === ReverseSolidus ||\n        cp === FullStop ||\n        cp === Asterisk ||\n        cp === PlusSign ||\n        cp === QuestionMark ||\n        cp === LeftParenthesis ||\n        cp === RightParenthesis ||\n        cp === LeftSquareBracket ||\n        cp === RightSquareBracket ||\n        cp === LeftCurlyBracket ||\n        cp === RightCurlyBracket ||\n        cp === VerticalLine);\n}\nfunction isRegExpIdentifierStart(cp) {\n    return isIdStart(cp) || cp === DollarSign || cp === LowLine;\n}\nfunction isRegExpIdentifierPart(cp) {\n    return (isIdContinue(cp) ||\n        cp === DollarSign ||\n        cp === LowLine ||\n        cp === ZeroWidthNonJoiner ||\n        cp === ZeroWidthJoiner);\n}\nfunction isUnicodePropertyNameCharacter(cp) {\n    return isLatinLetter(cp) || cp === LowLine;\n}\nfunction isUnicodePropertyValueCharacter(cp) {\n    return isUnicodePropertyNameCharacter(cp) || isDecimalDigit(cp);\n}\nclass RegExpValidator {\n    constructor(options) {\n        this._reader = new Reader();\n        this._uFlag = false;\n        this._nFlag = false;\n        this._lastIntValue = 0;\n        this._lastMinValue = 0;\n        this._lastMaxValue = 0;\n        this._lastStrValue = \"\";\n        this._lastKeyValue = \"\";\n        this._lastValValue = \"\";\n        this._lastAssertionIsQuantifiable = false;\n        this._numCapturingParens = 0;\n        this._groupNames = new Set();\n        this._backreferenceNames = new Set();\n        this._options = options || {};\n    }\n    validateLiteral(source, start = 0, end = source.length) {\n        this._uFlag = this._nFlag = false;\n        this.reset(source, start, end);\n        this.onLiteralEnter(start);\n        if (this.eat(Solidus) && this.eatRegExpBody() && this.eat(Solidus)) {\n            const flagStart = this.index;\n            const uFlag = source.includes(\"u\", flagStart);\n            this.validateFlags(source, flagStart, end);\n            this.validatePattern(source, start + 1, flagStart - 1, uFlag);\n        }\n        else if (start >= end) {\n            this.raise(\"Empty\");\n        }\n        else {\n            const c = String.fromCodePoint(this.currentCodePoint);\n            this.raise(`Unexpected character '${c}'`);\n        }\n        this.onLiteralLeave(start, end);\n    }\n    validateFlags(source, start = 0, end = source.length) {\n        const existingFlags = new Set();\n        let global = false;\n        let ignoreCase = false;\n        let multiline = false;\n        let sticky = false;\n        let unicode = false;\n        let dotAll = false;\n        let hasIndices = false;\n        for (let i = start; i < end; ++i) {\n            const flag = source.charCodeAt(i);\n            if (existingFlags.has(flag)) {\n                this.raise(`Duplicated flag '${source[i]}'`);\n            }\n            existingFlags.add(flag);\n            if (flag === LatinSmallLetterG) {\n                global = true;\n            }\n            else if (flag === LatinSmallLetterI) {\n                ignoreCase = true;\n            }\n            else if (flag === LatinSmallLetterM) {\n                multiline = true;\n            }\n            else if (flag === LatinSmallLetterU && this.ecmaVersion >= 2015) {\n                unicode = true;\n            }\n            else if (flag === LatinSmallLetterY && this.ecmaVersion >= 2015) {\n                sticky = true;\n            }\n            else if (flag === LatinSmallLetterS && this.ecmaVersion >= 2018) {\n                dotAll = true;\n            }\n            else if (flag === LatinSmallLetterD && this.ecmaVersion >= 2022) {\n                hasIndices = true;\n            }\n            else {\n                this.raise(`Invalid flag '${source[i]}'`);\n            }\n        }\n        this.onFlags(start, end, global, ignoreCase, multiline, unicode, sticky, dotAll, hasIndices);\n    }\n    validatePattern(source, start = 0, end = source.length, uFlag = false) {\n        this._uFlag = uFlag && this.ecmaVersion >= 2015;\n        this._nFlag = uFlag && this.ecmaVersion >= 2018;\n        this.reset(source, start, end);\n        this.consumePattern();\n        if (!this._nFlag &&\n            this.ecmaVersion >= 2018 &&\n            this._groupNames.size > 0) {\n            this._nFlag = true;\n            this.rewind(start);\n            this.consumePattern();\n        }\n    }\n    get strict() {\n        return Boolean(this._options.strict || this._uFlag);\n    }\n    get ecmaVersion() {\n        return this._options.ecmaVersion || 2022;\n    }\n    onLiteralEnter(start) {\n        if (this._options.onLiteralEnter) {\n            this._options.onLiteralEnter(start);\n        }\n    }\n    onLiteralLeave(start, end) {\n        if (this._options.onLiteralLeave) {\n            this._options.onLiteralLeave(start, end);\n        }\n    }\n    onFlags(start, end, global, ignoreCase, multiline, unicode, sticky, dotAll, hasIndices) {\n        if (this._options.onFlags) {\n            this._options.onFlags(start, end, global, ignoreCase, multiline, unicode, sticky, dotAll, hasIndices);\n        }\n    }\n    onPatternEnter(start) {\n        if (this._options.onPatternEnter) {\n            this._options.onPatternEnter(start);\n        }\n    }\n    onPatternLeave(start, end) {\n        if (this._options.onPatternLeave) {\n            this._options.onPatternLeave(start, end);\n        }\n    }\n    onDisjunctionEnter(start) {\n        if (this._options.onDisjunctionEnter) {\n            this._options.onDisjunctionEnter(start);\n        }\n    }\n    onDisjunctionLeave(start, end) {\n        if (this._options.onDisjunctionLeave) {\n            this._options.onDisjunctionLeave(start, end);\n        }\n    }\n    onAlternativeEnter(start, index) {\n        if (this._options.onAlternativeEnter) {\n            this._options.onAlternativeEnter(start, index);\n        }\n    }\n    onAlternativeLeave(start, end, index) {\n        if (this._options.onAlternativeLeave) {\n            this._options.onAlternativeLeave(start, end, index);\n        }\n    }\n    onGroupEnter(start) {\n        if (this._options.onGroupEnter) {\n            this._options.onGroupEnter(start);\n        }\n    }\n    onGroupLeave(start, end) {\n        if (this._options.onGroupLeave) {\n            this._options.onGroupLeave(start, end);\n        }\n    }\n    onCapturingGroupEnter(start, name) {\n        if (this._options.onCapturingGroupEnter) {\n            this._options.onCapturingGroupEnter(start, name);\n        }\n    }\n    onCapturingGroupLeave(start, end, name) {\n        if (this._options.onCapturingGroupLeave) {\n            this._options.onCapturingGroupLeave(start, end, name);\n        }\n    }\n    onQuantifier(start, end, min, max, greedy) {\n        if (this._options.onQuantifier) {\n            this._options.onQuantifier(start, end, min, max, greedy);\n        }\n    }\n    onLookaroundAssertionEnter(start, kind, negate) {\n        if (this._options.onLookaroundAssertionEnter) {\n            this._options.onLookaroundAssertionEnter(start, kind, negate);\n        }\n    }\n    onLookaroundAssertionLeave(start, end, kind, negate) {\n        if (this._options.onLookaroundAssertionLeave) {\n            this._options.onLookaroundAssertionLeave(start, end, kind, negate);\n        }\n    }\n    onEdgeAssertion(start, end, kind) {\n        if (this._options.onEdgeAssertion) {\n            this._options.onEdgeAssertion(start, end, kind);\n        }\n    }\n    onWordBoundaryAssertion(start, end, kind, negate) {\n        if (this._options.onWordBoundaryAssertion) {\n            this._options.onWordBoundaryAssertion(start, end, kind, negate);\n        }\n    }\n    onAnyCharacterSet(start, end, kind) {\n        if (this._options.onAnyCharacterSet) {\n            this._options.onAnyCharacterSet(start, end, kind);\n        }\n    }\n    onEscapeCharacterSet(start, end, kind, negate) {\n        if (this._options.onEscapeCharacterSet) {\n            this._options.onEscapeCharacterSet(start, end, kind, negate);\n        }\n    }\n    onUnicodePropertyCharacterSet(start, end, kind, key, value, negate) {\n        if (this._options.onUnicodePropertyCharacterSet) {\n            this._options.onUnicodePropertyCharacterSet(start, end, kind, key, value, negate);\n        }\n    }\n    onCharacter(start, end, value) {\n        if (this._options.onCharacter) {\n            this._options.onCharacter(start, end, value);\n        }\n    }\n    onBackreference(start, end, ref) {\n        if (this._options.onBackreference) {\n            this._options.onBackreference(start, end, ref);\n        }\n    }\n    onCharacterClassEnter(start, negate) {\n        if (this._options.onCharacterClassEnter) {\n            this._options.onCharacterClassEnter(start, negate);\n        }\n    }\n    onCharacterClassLeave(start, end, negate) {\n        if (this._options.onCharacterClassLeave) {\n            this._options.onCharacterClassLeave(start, end, negate);\n        }\n    }\n    onCharacterClassRange(start, end, min, max) {\n        if (this._options.onCharacterClassRange) {\n            this._options.onCharacterClassRange(start, end, min, max);\n        }\n    }\n    get source() {\n        return this._reader.source;\n    }\n    get index() {\n        return this._reader.index;\n    }\n    get currentCodePoint() {\n        return this._reader.currentCodePoint;\n    }\n    get nextCodePoint() {\n        return this._reader.nextCodePoint;\n    }\n    get nextCodePoint2() {\n        return this._reader.nextCodePoint2;\n    }\n    get nextCodePoint3() {\n        return this._reader.nextCodePoint3;\n    }\n    reset(source, start, end) {\n        this._reader.reset(source, start, end, this._uFlag);\n    }\n    rewind(index) {\n        this._reader.rewind(index);\n    }\n    advance() {\n        this._reader.advance();\n    }\n    eat(cp) {\n        return this._reader.eat(cp);\n    }\n    eat2(cp1, cp2) {\n        return this._reader.eat2(cp1, cp2);\n    }\n    eat3(cp1, cp2, cp3) {\n        return this._reader.eat3(cp1, cp2, cp3);\n    }\n    raise(message) {\n        throw new RegExpSyntaxError(this.source, this._uFlag, this.index, message);\n    }\n    eatRegExpBody() {\n        const start = this.index;\n        let inClass = false;\n        let escaped = false;\n        for (;;) {\n            const cp = this.currentCodePoint;\n            if (cp === -1 || isLineTerminator(cp)) {\n                const kind = inClass ? \"character class\" : \"regular expression\";\n                this.raise(`Unterminated ${kind}`);\n            }\n            if (escaped) {\n                escaped = false;\n            }\n            else if (cp === ReverseSolidus) {\n                escaped = true;\n            }\n            else if (cp === LeftSquareBracket) {\n                inClass = true;\n            }\n            else if (cp === RightSquareBracket) {\n                inClass = false;\n            }\n            else if ((cp === Solidus && !inClass) ||\n                (cp === Asterisk && this.index === start)) {\n                break;\n            }\n            this.advance();\n        }\n        return this.index !== start;\n    }\n    consumePattern() {\n        const start = this.index;\n        this._numCapturingParens = this.countCapturingParens();\n        this._groupNames.clear();\n        this._backreferenceNames.clear();\n        this.onPatternEnter(start);\n        this.consumeDisjunction();\n        const cp = this.currentCodePoint;\n        if (this.currentCodePoint !== -1) {\n            if (cp === RightParenthesis) {\n                this.raise(\"Unmatched ')'\");\n            }\n            if (cp === ReverseSolidus) {\n                this.raise(\"\\\\ at end of pattern\");\n            }\n            if (cp === RightSquareBracket || cp === RightCurlyBracket) {\n                this.raise(\"Lone quantifier brackets\");\n            }\n            const c = String.fromCodePoint(cp);\n            this.raise(`Unexpected character '${c}'`);\n        }\n        for (const name of this._backreferenceNames) {\n            if (!this._groupNames.has(name)) {\n                this.raise(\"Invalid named capture referenced\");\n            }\n        }\n        this.onPatternLeave(start, this.index);\n    }\n    countCapturingParens() {\n        const start = this.index;\n        let inClass = false;\n        let escaped = false;\n        let count = 0;\n        let cp = 0;\n        while ((cp = this.currentCodePoint) !== -1) {\n            if (escaped) {\n                escaped = false;\n            }\n            else if (cp === ReverseSolidus) {\n                escaped = true;\n            }\n            else if (cp === LeftSquareBracket) {\n                inClass = true;\n            }\n            else if (cp === RightSquareBracket) {\n                inClass = false;\n            }\n            else if (cp === LeftParenthesis &&\n                !inClass &&\n                (this.nextCodePoint !== QuestionMark ||\n                    (this.nextCodePoint2 === LessThanSign &&\n                        this.nextCodePoint3 !== EqualsSign &&\n                        this.nextCodePoint3 !== ExclamationMark))) {\n                count += 1;\n            }\n            this.advance();\n        }\n        this.rewind(start);\n        return count;\n    }\n    consumeDisjunction() {\n        const start = this.index;\n        let i = 0;\n        this.onDisjunctionEnter(start);\n        do {\n            this.consumeAlternative(i++);\n        } while (this.eat(VerticalLine));\n        if (this.consumeQuantifier(true)) {\n            this.raise(\"Nothing to repeat\");\n        }\n        if (this.eat(LeftCurlyBracket)) {\n            this.raise(\"Lone quantifier brackets\");\n        }\n        this.onDisjunctionLeave(start, this.index);\n    }\n    consumeAlternative(i) {\n        const start = this.index;\n        this.onAlternativeEnter(start, i);\n        while (this.currentCodePoint !== -1 && this.consumeTerm()) {\n        }\n        this.onAlternativeLeave(start, this.index, i);\n    }\n    consumeTerm() {\n        if (this._uFlag || this.strict) {\n            return (this.consumeAssertion() ||\n                (this.consumeAtom() && this.consumeOptionalQuantifier()));\n        }\n        return ((this.consumeAssertion() &&\n            (!this._lastAssertionIsQuantifiable ||\n                this.consumeOptionalQuantifier())) ||\n            (this.consumeExtendedAtom() && this.consumeOptionalQuantifier()));\n    }\n    consumeOptionalQuantifier() {\n        this.consumeQuantifier();\n        return true;\n    }\n    consumeAssertion() {\n        const start = this.index;\n        this._lastAssertionIsQuantifiable = false;\n        if (this.eat(CircumflexAccent)) {\n            this.onEdgeAssertion(start, this.index, \"start\");\n            return true;\n        }\n        if (this.eat(DollarSign)) {\n            this.onEdgeAssertion(start, this.index, \"end\");\n            return true;\n        }\n        if (this.eat2(ReverseSolidus, LatinCapitalLetterB)) {\n            this.onWordBoundaryAssertion(start, this.index, \"word\", true);\n            return true;\n        }\n        if (this.eat2(ReverseSolidus, LatinSmallLetterB)) {\n            this.onWordBoundaryAssertion(start, this.index, \"word\", false);\n            return true;\n        }\n        if (this.eat2(LeftParenthesis, QuestionMark)) {\n            const lookbehind = this.ecmaVersion >= 2018 && this.eat(LessThanSign);\n            let negate = false;\n            if (this.eat(EqualsSign) || (negate = this.eat(ExclamationMark))) {\n                const kind = lookbehind ? \"lookbehind\" : \"lookahead\";\n                this.onLookaroundAssertionEnter(start, kind, negate);\n                this.consumeDisjunction();\n                if (!this.eat(RightParenthesis)) {\n                    this.raise(\"Unterminated group\");\n                }\n                this._lastAssertionIsQuantifiable = !lookbehind && !this.strict;\n                this.onLookaroundAssertionLeave(start, this.index, kind, negate);\n                return true;\n            }\n            this.rewind(start);\n        }\n        return false;\n    }\n    consumeQuantifier(noConsume = false) {\n        const start = this.index;\n        let min = 0;\n        let max = 0;\n        let greedy = false;\n        if (this.eat(Asterisk)) {\n            min = 0;\n            max = Number.POSITIVE_INFINITY;\n        }\n        else if (this.eat(PlusSign)) {\n            min = 1;\n            max = Number.POSITIVE_INFINITY;\n        }\n        else if (this.eat(QuestionMark)) {\n            min = 0;\n            max = 1;\n        }\n        else if (this.eatBracedQuantifier(noConsume)) {\n            min = this._lastMinValue;\n            max = this._lastMaxValue;\n        }\n        else {\n            return false;\n        }\n        greedy = !this.eat(QuestionMark);\n        if (!noConsume) {\n            this.onQuantifier(start, this.index, min, max, greedy);\n        }\n        return true;\n    }\n    eatBracedQuantifier(noError) {\n        const start = this.index;\n        if (this.eat(LeftCurlyBracket)) {\n            this._lastMinValue = 0;\n            this._lastMaxValue = Number.POSITIVE_INFINITY;\n            if (this.eatDecimalDigits()) {\n                this._lastMinValue = this._lastMaxValue = this._lastIntValue;\n                if (this.eat(Comma)) {\n                    this._lastMaxValue = this.eatDecimalDigits()\n                        ? this._lastIntValue\n                        : Number.POSITIVE_INFINITY;\n                }\n                if (this.eat(RightCurlyBracket)) {\n                    if (!noError && this._lastMaxValue < this._lastMinValue) {\n                        this.raise(\"numbers out of order in {} quantifier\");\n                    }\n                    return true;\n                }\n            }\n            if (!noError && (this._uFlag || this.strict)) {\n                this.raise(\"Incomplete quantifier\");\n            }\n            this.rewind(start);\n        }\n        return false;\n    }\n    consumeAtom() {\n        return (this.consumePatternCharacter() ||\n            this.consumeDot() ||\n            this.consumeReverseSolidusAtomEscape() ||\n            this.consumeCharacterClass() ||\n            this.consumeUncapturingGroup() ||\n            this.consumeCapturingGroup());\n    }\n    consumeDot() {\n        if (this.eat(FullStop)) {\n            this.onAnyCharacterSet(this.index - 1, this.index, \"any\");\n            return true;\n        }\n        return false;\n    }\n    consumeReverseSolidusAtomEscape() {\n        const start = this.index;\n        if (this.eat(ReverseSolidus)) {\n            if (this.consumeAtomEscape()) {\n                return true;\n            }\n            this.rewind(start);\n        }\n        return false;\n    }\n    consumeUncapturingGroup() {\n        const start = this.index;\n        if (this.eat3(LeftParenthesis, QuestionMark, Colon)) {\n            this.onGroupEnter(start);\n            this.consumeDisjunction();\n            if (!this.eat(RightParenthesis)) {\n                this.raise(\"Unterminated group\");\n            }\n            this.onGroupLeave(start, this.index);\n            return true;\n        }\n        return false;\n    }\n    consumeCapturingGroup() {\n        const start = this.index;\n        if (this.eat(LeftParenthesis)) {\n            let name = null;\n            if (this.ecmaVersion >= 2018) {\n                if (this.consumeGroupSpecifier()) {\n                    name = this._lastStrValue;\n                }\n            }\n            else if (this.currentCodePoint === QuestionMark) {\n                this.raise(\"Invalid group\");\n            }\n            this.onCapturingGroupEnter(start, name);\n            this.consumeDisjunction();\n            if (!this.eat(RightParenthesis)) {\n                this.raise(\"Unterminated group\");\n            }\n            this.onCapturingGroupLeave(start, this.index, name);\n            return true;\n        }\n        return false;\n    }\n    consumeExtendedAtom() {\n        return (this.consumeDot() ||\n            this.consumeReverseSolidusAtomEscape() ||\n            this.consumeReverseSolidusFollowedByC() ||\n            this.consumeCharacterClass() ||\n            this.consumeUncapturingGroup() ||\n            this.consumeCapturingGroup() ||\n            this.consumeInvalidBracedQuantifier() ||\n            this.consumeExtendedPatternCharacter());\n    }\n    consumeReverseSolidusFollowedByC() {\n        const start = this.index;\n        if (this.currentCodePoint === ReverseSolidus &&\n            this.nextCodePoint === LatinSmallLetterC) {\n            this._lastIntValue = this.currentCodePoint;\n            this.advance();\n            this.onCharacter(start, this.index, ReverseSolidus);\n            return true;\n        }\n        return false;\n    }\n    consumeInvalidBracedQuantifier() {\n        if (this.eatBracedQuantifier(true)) {\n            this.raise(\"Nothing to repeat\");\n        }\n        return false;\n    }\n    consumePatternCharacter() {\n        const start = this.index;\n        const cp = this.currentCodePoint;\n        if (cp !== -1 && !isSyntaxCharacter(cp)) {\n            this.advance();\n            this.onCharacter(start, this.index, cp);\n            return true;\n        }\n        return false;\n    }\n    consumeExtendedPatternCharacter() {\n        const start = this.index;\n        const cp = this.currentCodePoint;\n        if (cp !== -1 &&\n            cp !== CircumflexAccent &&\n            cp !== DollarSign &&\n            cp !== ReverseSolidus &&\n            cp !== FullStop &&\n            cp !== Asterisk &&\n            cp !== PlusSign &&\n            cp !== QuestionMark &&\n            cp !== LeftParenthesis &&\n            cp !== RightParenthesis &&\n            cp !== LeftSquareBracket &&\n            cp !== VerticalLine) {\n            this.advance();\n            this.onCharacter(start, this.index, cp);\n            return true;\n        }\n        return false;\n    }\n    consumeGroupSpecifier() {\n        if (this.eat(QuestionMark)) {\n            if (this.eatGroupName()) {\n                if (!this._groupNames.has(this._lastStrValue)) {\n                    this._groupNames.add(this._lastStrValue);\n                    return true;\n                }\n                this.raise(\"Duplicate capture group name\");\n            }\n            this.raise(\"Invalid group\");\n        }\n        return false;\n    }\n    consumeAtomEscape() {\n        if (this.consumeBackreference() ||\n            this.consumeCharacterClassEscape() ||\n            this.consumeCharacterEscape() ||\n            (this._nFlag && this.consumeKGroupName())) {\n            return true;\n        }\n        if (this.strict || this._uFlag) {\n            this.raise(\"Invalid escape\");\n        }\n        return false;\n    }\n    consumeBackreference() {\n        const start = this.index;\n        if (this.eatDecimalEscape()) {\n            const n = this._lastIntValue;\n            if (n <= this._numCapturingParens) {\n                this.onBackreference(start - 1, this.index, n);\n                return true;\n            }\n            if (this.strict || this._uFlag) {\n                this.raise(\"Invalid escape\");\n            }\n            this.rewind(start);\n        }\n        return false;\n    }\n    consumeCharacterClassEscape() {\n        const start = this.index;\n        if (this.eat(LatinSmallLetterD)) {\n            this._lastIntValue = -1;\n            this.onEscapeCharacterSet(start - 1, this.index, \"digit\", false);\n            return true;\n        }\n        if (this.eat(LatinCapitalLetterD)) {\n            this._lastIntValue = -1;\n            this.onEscapeCharacterSet(start - 1, this.index, \"digit\", true);\n            return true;\n        }\n        if (this.eat(LatinSmallLetterS)) {\n            this._lastIntValue = -1;\n            this.onEscapeCharacterSet(start - 1, this.index, \"space\", false);\n            return true;\n        }\n        if (this.eat(LatinCapitalLetterS)) {\n            this._lastIntValue = -1;\n            this.onEscapeCharacterSet(start - 1, this.index, \"space\", true);\n            return true;\n        }\n        if (this.eat(LatinSmallLetterW)) {\n            this._lastIntValue = -1;\n            this.onEscapeCharacterSet(start - 1, this.index, \"word\", false);\n            return true;\n        }\n        if (this.eat(LatinCapitalLetterW)) {\n            this._lastIntValue = -1;\n            this.onEscapeCharacterSet(start - 1, this.index, \"word\", true);\n            return true;\n        }\n        let negate = false;\n        if (this._uFlag &&\n            this.ecmaVersion >= 2018 &&\n            (this.eat(LatinSmallLetterP) ||\n                (negate = this.eat(LatinCapitalLetterP)))) {\n            this._lastIntValue = -1;\n            if (this.eat(LeftCurlyBracket) &&\n                this.eatUnicodePropertyValueExpression() &&\n                this.eat(RightCurlyBracket)) {\n                this.onUnicodePropertyCharacterSet(start - 1, this.index, \"property\", this._lastKeyValue, this._lastValValue || null, negate);\n                return true;\n            }\n            this.raise(\"Invalid property name\");\n        }\n        return false;\n    }\n    consumeCharacterEscape() {\n        const start = this.index;\n        if (this.eatControlEscape() ||\n            this.eatCControlLetter() ||\n            this.eatZero() ||\n            this.eatHexEscapeSequence() ||\n            this.eatRegExpUnicodeEscapeSequence() ||\n            (!this.strict &&\n                !this._uFlag &&\n                this.eatLegacyOctalEscapeSequence()) ||\n            this.eatIdentityEscape()) {\n            this.onCharacter(start - 1, this.index, this._lastIntValue);\n            return true;\n        }\n        return false;\n    }\n    consumeKGroupName() {\n        const start = this.index;\n        if (this.eat(LatinSmallLetterK)) {\n            if (this.eatGroupName()) {\n                const groupName = this._lastStrValue;\n                this._backreferenceNames.add(groupName);\n                this.onBackreference(start - 1, this.index, groupName);\n                return true;\n            }\n            this.raise(\"Invalid named reference\");\n        }\n        return false;\n    }\n    consumeCharacterClass() {\n        const start = this.index;\n        if (this.eat(LeftSquareBracket)) {\n            const negate = this.eat(CircumflexAccent);\n            this.onCharacterClassEnter(start, negate);\n            this.consumeClassRanges();\n            if (!this.eat(RightSquareBracket)) {\n                this.raise(\"Unterminated character class\");\n            }\n            this.onCharacterClassLeave(start, this.index, negate);\n            return true;\n        }\n        return false;\n    }\n    consumeClassRanges() {\n        const strict = this.strict || this._uFlag;\n        for (;;) {\n            const rangeStart = this.index;\n            if (!this.consumeClassAtom()) {\n                break;\n            }\n            const min = this._lastIntValue;\n            if (!this.eat(HyphenMinus)) {\n                continue;\n            }\n            this.onCharacter(this.index - 1, this.index, HyphenMinus);\n            if (!this.consumeClassAtom()) {\n                break;\n            }\n            const max = this._lastIntValue;\n            if (min === -1 || max === -1) {\n                if (strict) {\n                    this.raise(\"Invalid character class\");\n                }\n                continue;\n            }\n            if (min > max) {\n                this.raise(\"Range out of order in character class\");\n            }\n            this.onCharacterClassRange(rangeStart, this.index, min, max);\n        }\n    }\n    consumeClassAtom() {\n        const start = this.index;\n        const cp = this.currentCodePoint;\n        if (cp !== -1 && cp !== ReverseSolidus && cp !== RightSquareBracket) {\n            this.advance();\n            this._lastIntValue = cp;\n            this.onCharacter(start, this.index, this._lastIntValue);\n            return true;\n        }\n        if (this.eat(ReverseSolidus)) {\n            if (this.consumeClassEscape()) {\n                return true;\n            }\n            if (!this.strict && this.currentCodePoint === LatinSmallLetterC) {\n                this._lastIntValue = ReverseSolidus;\n                this.onCharacter(start, this.index, this._lastIntValue);\n                return true;\n            }\n            if (this.strict || this._uFlag) {\n                this.raise(\"Invalid escape\");\n            }\n            this.rewind(start);\n        }\n        return false;\n    }\n    consumeClassEscape() {\n        const start = this.index;\n        if (this.eat(LatinSmallLetterB)) {\n            this._lastIntValue = Backspace;\n            this.onCharacter(start - 1, this.index, this._lastIntValue);\n            return true;\n        }\n        if (this._uFlag && this.eat(HyphenMinus)) {\n            this._lastIntValue = HyphenMinus;\n            this.onCharacter(start - 1, this.index, this._lastIntValue);\n            return true;\n        }\n        let cp = 0;\n        if (!this.strict &&\n            !this._uFlag &&\n            this.currentCodePoint === LatinSmallLetterC &&\n            (isDecimalDigit((cp = this.nextCodePoint)) || cp === LowLine)) {\n            this.advance();\n            this.advance();\n            this._lastIntValue = cp % 0x20;\n            this.onCharacter(start - 1, this.index, this._lastIntValue);\n            return true;\n        }\n        return (this.consumeCharacterClassEscape() || this.consumeCharacterEscape());\n    }\n    eatGroupName() {\n        if (this.eat(LessThanSign)) {\n            if (this.eatRegExpIdentifierName() && this.eat(GreaterThanSign)) {\n                return true;\n            }\n            this.raise(\"Invalid capture group name\");\n        }\n        return false;\n    }\n    eatRegExpIdentifierName() {\n        if (this.eatRegExpIdentifierStart()) {\n            this._lastStrValue = String.fromCodePoint(this._lastIntValue);\n            while (this.eatRegExpIdentifierPart()) {\n                this._lastStrValue += String.fromCodePoint(this._lastIntValue);\n            }\n            return true;\n        }\n        return false;\n    }\n    eatRegExpIdentifierStart() {\n        const start = this.index;\n        const forceUFlag = !this._uFlag && this.ecmaVersion >= 2020;\n        let cp = this.currentCodePoint;\n        this.advance();\n        if (cp === ReverseSolidus &&\n            this.eatRegExpUnicodeEscapeSequence(forceUFlag)) {\n            cp = this._lastIntValue;\n        }\n        else if (forceUFlag &&\n            isLeadSurrogate(cp) &&\n            isTrailSurrogate(this.currentCodePoint)) {\n            cp = combineSurrogatePair(cp, this.currentCodePoint);\n            this.advance();\n        }\n        if (isRegExpIdentifierStart(cp)) {\n            this._lastIntValue = cp;\n            return true;\n        }\n        if (this.index !== start) {\n            this.rewind(start);\n        }\n        return false;\n    }\n    eatRegExpIdentifierPart() {\n        const start = this.index;\n        const forceUFlag = !this._uFlag && this.ecmaVersion >= 2020;\n        let cp = this.currentCodePoint;\n        this.advance();\n        if (cp === ReverseSolidus &&\n            this.eatRegExpUnicodeEscapeSequence(forceUFlag)) {\n            cp = this._lastIntValue;\n        }\n        else if (forceUFlag &&\n            isLeadSurrogate(cp) &&\n            isTrailSurrogate(this.currentCodePoint)) {\n            cp = combineSurrogatePair(cp, this.currentCodePoint);\n            this.advance();\n        }\n        if (isRegExpIdentifierPart(cp)) {\n            this._lastIntValue = cp;\n            return true;\n        }\n        if (this.index !== start) {\n            this.rewind(start);\n        }\n        return false;\n    }\n    eatCControlLetter() {\n        const start = this.index;\n        if (this.eat(LatinSmallLetterC)) {\n            if (this.eatControlLetter()) {\n                return true;\n            }\n            this.rewind(start);\n        }\n        return false;\n    }\n    eatZero() {\n        if (this.currentCodePoint === DigitZero &&\n            !isDecimalDigit(this.nextCodePoint)) {\n            this._lastIntValue = 0;\n            this.advance();\n            return true;\n        }\n        return false;\n    }\n    eatControlEscape() {\n        if (this.eat(LatinSmallLetterF)) {\n            this._lastIntValue = FormFeed;\n            return true;\n        }\n        if (this.eat(LatinSmallLetterN)) {\n            this._lastIntValue = LineFeed;\n            return true;\n        }\n        if (this.eat(LatinSmallLetterR)) {\n            this._lastIntValue = CarriageReturn;\n            return true;\n        }\n        if (this.eat(LatinSmallLetterT)) {\n            this._lastIntValue = CharacterTabulation;\n            return true;\n        }\n        if (this.eat(LatinSmallLetterV)) {\n            this._lastIntValue = LineTabulation;\n            return true;\n        }\n        return false;\n    }\n    eatControlLetter() {\n        const cp = this.currentCodePoint;\n        if (isLatinLetter(cp)) {\n            this.advance();\n            this._lastIntValue = cp % 0x20;\n            return true;\n        }\n        return false;\n    }\n    eatRegExpUnicodeEscapeSequence(forceUFlag = false) {\n        const start = this.index;\n        const uFlag = forceUFlag || this._uFlag;\n        if (this.eat(LatinSmallLetterU)) {\n            if ((uFlag && this.eatRegExpUnicodeSurrogatePairEscape()) ||\n                this.eatFixedHexDigits(4) ||\n                (uFlag && this.eatRegExpUnicodeCodePointEscape())) {\n                return true;\n            }\n            if (this.strict || uFlag) {\n                this.raise(\"Invalid unicode escape\");\n            }\n            this.rewind(start);\n        }\n        return false;\n    }\n    eatRegExpUnicodeSurrogatePairEscape() {\n        const start = this.index;\n        if (this.eatFixedHexDigits(4)) {\n            const lead = this._lastIntValue;\n            if (isLeadSurrogate(lead) &&\n                this.eat(ReverseSolidus) &&\n                this.eat(LatinSmallLetterU) &&\n                this.eatFixedHexDigits(4)) {\n                const trail = this._lastIntValue;\n                if (isTrailSurrogate(trail)) {\n                    this._lastIntValue = combineSurrogatePair(lead, trail);\n                    return true;\n                }\n            }\n            this.rewind(start);\n        }\n        return false;\n    }\n    eatRegExpUnicodeCodePointEscape() {\n        const start = this.index;\n        if (this.eat(LeftCurlyBracket) &&\n            this.eatHexDigits() &&\n            this.eat(RightCurlyBracket) &&\n            isValidUnicode(this._lastIntValue)) {\n            return true;\n        }\n        this.rewind(start);\n        return false;\n    }\n    eatIdentityEscape() {\n        const cp = this.currentCodePoint;\n        if (this.isValidIdentityEscape(cp)) {\n            this._lastIntValue = cp;\n            this.advance();\n            return true;\n        }\n        return false;\n    }\n    isValidIdentityEscape(cp) {\n        if (cp === -1) {\n            return false;\n        }\n        if (this._uFlag) {\n            return isSyntaxCharacter(cp) || cp === Solidus;\n        }\n        if (this.strict) {\n            return !isIdContinue(cp);\n        }\n        if (this._nFlag) {\n            return !(cp === LatinSmallLetterC || cp === LatinSmallLetterK);\n        }\n        return cp !== LatinSmallLetterC;\n    }\n    eatDecimalEscape() {\n        this._lastIntValue = 0;\n        let cp = this.currentCodePoint;\n        if (cp >= DigitOne && cp <= DigitNine) {\n            do {\n                this._lastIntValue = 10 * this._lastIntValue + (cp - DigitZero);\n                this.advance();\n            } while ((cp = this.currentCodePoint) >= DigitZero &&\n                cp <= DigitNine);\n            return true;\n        }\n        return false;\n    }\n    eatUnicodePropertyValueExpression() {\n        const start = this.index;\n        if (this.eatUnicodePropertyName() && this.eat(EqualsSign)) {\n            this._lastKeyValue = this._lastStrValue;\n            if (this.eatUnicodePropertyValue()) {\n                this._lastValValue = this._lastStrValue;\n                if (isValidUnicodeProperty(this.ecmaVersion, this._lastKeyValue, this._lastValValue)) {\n                    return true;\n                }\n                this.raise(\"Invalid property name\");\n            }\n        }\n        this.rewind(start);\n        if (this.eatLoneUnicodePropertyNameOrValue()) {\n            const nameOrValue = this._lastStrValue;\n            if (isValidUnicodeProperty(this.ecmaVersion, \"General_Category\", nameOrValue)) {\n                this._lastKeyValue = \"General_Category\";\n                this._lastValValue = nameOrValue;\n                return true;\n            }\n            if (isValidLoneUnicodeProperty(this.ecmaVersion, nameOrValue)) {\n                this._lastKeyValue = nameOrValue;\n                this._lastValValue = \"\";\n                return true;\n            }\n            this.raise(\"Invalid property name\");\n        }\n        return false;\n    }\n    eatUnicodePropertyName() {\n        this._lastStrValue = \"\";\n        while (isUnicodePropertyNameCharacter(this.currentCodePoint)) {\n            this._lastStrValue += String.fromCodePoint(this.currentCodePoint);\n            this.advance();\n        }\n        return this._lastStrValue !== \"\";\n    }\n    eatUnicodePropertyValue() {\n        this._lastStrValue = \"\";\n        while (isUnicodePropertyValueCharacter(this.currentCodePoint)) {\n            this._lastStrValue += String.fromCodePoint(this.currentCodePoint);\n            this.advance();\n        }\n        return this._lastStrValue !== \"\";\n    }\n    eatLoneUnicodePropertyNameOrValue() {\n        return this.eatUnicodePropertyValue();\n    }\n    eatHexEscapeSequence() {\n        const start = this.index;\n        if (this.eat(LatinSmallLetterX)) {\n            if (this.eatFixedHexDigits(2)) {\n                return true;\n            }\n            if (this._uFlag || this.strict) {\n                this.raise(\"Invalid escape\");\n            }\n            this.rewind(start);\n        }\n        return false;\n    }\n    eatDecimalDigits() {\n        const start = this.index;\n        this._lastIntValue = 0;\n        while (isDecimalDigit(this.currentCodePoint)) {\n            this._lastIntValue =\n                10 * this._lastIntValue + digitToInt(this.currentCodePoint);\n            this.advance();\n        }\n        return this.index !== start;\n    }\n    eatHexDigits() {\n        const start = this.index;\n        this._lastIntValue = 0;\n        while (isHexDigit(this.currentCodePoint)) {\n            this._lastIntValue =\n                16 * this._lastIntValue + digitToInt(this.currentCodePoint);\n            this.advance();\n        }\n        return this.index !== start;\n    }\n    eatLegacyOctalEscapeSequence() {\n        if (this.eatOctalDigit()) {\n            const n1 = this._lastIntValue;\n            if (this.eatOctalDigit()) {\n                const n2 = this._lastIntValue;\n                if (n1 <= 3 && this.eatOctalDigit()) {\n                    this._lastIntValue = n1 * 64 + n2 * 8 + this._lastIntValue;\n                }\n                else {\n                    this._lastIntValue = n1 * 8 + n2;\n                }\n            }\n            else {\n                this._lastIntValue = n1;\n            }\n            return true;\n        }\n        return false;\n    }\n    eatOctalDigit() {\n        const cp = this.currentCodePoint;\n        if (isOctalDigit(cp)) {\n            this.advance();\n            this._lastIntValue = cp - DigitZero;\n            return true;\n        }\n        this._lastIntValue = 0;\n        return false;\n    }\n    eatFixedHexDigits(length) {\n        const start = this.index;\n        this._lastIntValue = 0;\n        for (let i = 0; i < length; ++i) {\n            const cp = this.currentCodePoint;\n            if (!isHexDigit(cp)) {\n                this.rewind(start);\n                return false;\n            }\n            this._lastIntValue = 16 * this._lastIntValue + digitToInt(cp);\n            this.advance();\n        }\n        return true;\n    }\n}\n\nconst DummyPattern = {};\nconst DummyFlags = {};\nconst DummyCapturingGroup = {};\nclass RegExpParserState {\n    constructor(options) {\n        this._node = DummyPattern;\n        this._flags = DummyFlags;\n        this._backreferences = [];\n        this._capturingGroups = [];\n        this.source = \"\";\n        this.strict = Boolean(options && options.strict);\n        this.ecmaVersion = (options && options.ecmaVersion) || 2022;\n    }\n    get pattern() {\n        if (this._node.type !== \"Pattern\") {\n            throw new Error(\"UnknownError\");\n        }\n        return this._node;\n    }\n    get flags() {\n        if (this._flags.type !== \"Flags\") {\n            throw new Error(\"UnknownError\");\n        }\n        return this._flags;\n    }\n    onFlags(start, end, global, ignoreCase, multiline, unicode, sticky, dotAll, hasIndices) {\n        this._flags = {\n            type: \"Flags\",\n            parent: null,\n            start,\n            end,\n            raw: this.source.slice(start, end),\n            global,\n            ignoreCase,\n            multiline,\n            unicode,\n            sticky,\n            dotAll,\n            hasIndices,\n        };\n    }\n    onPatternEnter(start) {\n        this._node = {\n            type: \"Pattern\",\n            parent: null,\n            start,\n            end: start,\n            raw: \"\",\n            alternatives: [],\n        };\n        this._backreferences.length = 0;\n        this._capturingGroups.length = 0;\n    }\n    onPatternLeave(start, end) {\n        this._node.end = end;\n        this._node.raw = this.source.slice(start, end);\n        for (const reference of this._backreferences) {\n            const ref = reference.ref;\n            const group = typeof ref === \"number\"\n                ? this._capturingGroups[ref - 1]\n                : this._capturingGroups.find(g => g.name === ref);\n            reference.resolved = group;\n            group.references.push(reference);\n        }\n    }\n    onAlternativeEnter(start) {\n        const parent = this._node;\n        if (parent.type !== \"Assertion\" &&\n            parent.type !== \"CapturingGroup\" &&\n            parent.type !== \"Group\" &&\n            parent.type !== \"Pattern\") {\n            throw new Error(\"UnknownError\");\n        }\n        this._node = {\n            type: \"Alternative\",\n            parent,\n            start,\n            end: start,\n            raw: \"\",\n            elements: [],\n        };\n        parent.alternatives.push(this._node);\n    }\n    onAlternativeLeave(start, end) {\n        const node = this._node;\n        if (node.type !== \"Alternative\") {\n            throw new Error(\"UnknownError\");\n        }\n        node.end = end;\n        node.raw = this.source.slice(start, end);\n        this._node = node.parent;\n    }\n    onGroupEnter(start) {\n        const parent = this._node;\n        if (parent.type !== \"Alternative\") {\n            throw new Error(\"UnknownError\");\n        }\n        this._node = {\n            type: \"Group\",\n            parent,\n            start,\n            end: start,\n            raw: \"\",\n            alternatives: [],\n        };\n        parent.elements.push(this._node);\n    }\n    onGroupLeave(start, end) {\n        const node = this._node;\n        if (node.type !== \"Group\" || node.parent.type !== \"Alternative\") {\n            throw new Error(\"UnknownError\");\n        }\n        node.end = end;\n        node.raw = this.source.slice(start, end);\n        this._node = node.parent;\n    }\n    onCapturingGroupEnter(start, name) {\n        const parent = this._node;\n        if (parent.type !== \"Alternative\") {\n            throw new Error(\"UnknownError\");\n        }\n        this._node = {\n            type: \"CapturingGroup\",\n            parent,\n            start,\n            end: start,\n            raw: \"\",\n            name,\n            alternatives: [],\n            references: [],\n        };\n        parent.elements.push(this._node);\n        this._capturingGroups.push(this._node);\n    }\n    onCapturingGroupLeave(start, end) {\n        const node = this._node;\n        if (node.type !== \"CapturingGroup\" ||\n            node.parent.type !== \"Alternative\") {\n            throw new Error(\"UnknownError\");\n        }\n        node.end = end;\n        node.raw = this.source.slice(start, end);\n        this._node = node.parent;\n    }\n    onQuantifier(start, end, min, max, greedy) {\n        const parent = this._node;\n        if (parent.type !== \"Alternative\") {\n            throw new Error(\"UnknownError\");\n        }\n        const element = parent.elements.pop();\n        if (element == null ||\n            element.type === \"Quantifier\" ||\n            (element.type === \"Assertion\" && element.kind !== \"lookahead\")) {\n            throw new Error(\"UnknownError\");\n        }\n        const node = {\n            type: \"Quantifier\",\n            parent,\n            start: element.start,\n            end,\n            raw: this.source.slice(element.start, end),\n            min,\n            max,\n            greedy,\n            element,\n        };\n        parent.elements.push(node);\n        element.parent = node;\n    }\n    onLookaroundAssertionEnter(start, kind, negate) {\n        const parent = this._node;\n        if (parent.type !== \"Alternative\") {\n            throw new Error(\"UnknownError\");\n        }\n        const node = (this._node = {\n            type: \"Assertion\",\n            parent,\n            start,\n            end: start,\n            raw: \"\",\n            kind,\n            negate,\n            alternatives: [],\n        });\n        parent.elements.push(node);\n    }\n    onLookaroundAssertionLeave(start, end) {\n        const node = this._node;\n        if (node.type !== \"Assertion\" || node.parent.type !== \"Alternative\") {\n            throw new Error(\"UnknownError\");\n        }\n        node.end = end;\n        node.raw = this.source.slice(start, end);\n        this._node = node.parent;\n    }\n    onEdgeAssertion(start, end, kind) {\n        const parent = this._node;\n        if (parent.type !== \"Alternative\") {\n            throw new Error(\"UnknownError\");\n        }\n        parent.elements.push({\n            type: \"Assertion\",\n            parent,\n            start,\n            end,\n            raw: this.source.slice(start, end),\n            kind,\n        });\n    }\n    onWordBoundaryAssertion(start, end, kind, negate) {\n        const parent = this._node;\n        if (parent.type !== \"Alternative\") {\n            throw new Error(\"UnknownError\");\n        }\n        parent.elements.push({\n            type: \"Assertion\",\n            parent,\n            start,\n            end,\n            raw: this.source.slice(start, end),\n            kind,\n            negate,\n        });\n    }\n    onAnyCharacterSet(start, end, kind) {\n        const parent = this._node;\n        if (parent.type !== \"Alternative\") {\n            throw new Error(\"UnknownError\");\n        }\n        parent.elements.push({\n            type: \"CharacterSet\",\n            parent,\n            start,\n            end,\n            raw: this.source.slice(start, end),\n            kind,\n        });\n    }\n    onEscapeCharacterSet(start, end, kind, negate) {\n        const parent = this._node;\n        if (parent.type !== \"Alternative\" && parent.type !== \"CharacterClass\") {\n            throw new Error(\"UnknownError\");\n        }\n        parent.elements.push({\n            type: \"CharacterSet\",\n            parent,\n            start,\n            end,\n            raw: this.source.slice(start, end),\n            kind,\n            negate,\n        });\n    }\n    onUnicodePropertyCharacterSet(start, end, kind, key, value, negate) {\n        const parent = this._node;\n        if (parent.type !== \"Alternative\" && parent.type !== \"CharacterClass\") {\n            throw new Error(\"UnknownError\");\n        }\n        parent.elements.push({\n            type: \"CharacterSet\",\n            parent,\n            start,\n            end,\n            raw: this.source.slice(start, end),\n            kind,\n            key,\n            value,\n            negate,\n        });\n    }\n    onCharacter(start, end, value) {\n        const parent = this._node;\n        if (parent.type !== \"Alternative\" && parent.type !== \"CharacterClass\") {\n            throw new Error(\"UnknownError\");\n        }\n        parent.elements.push({\n            type: \"Character\",\n            parent,\n            start,\n            end,\n            raw: this.source.slice(start, end),\n            value,\n        });\n    }\n    onBackreference(start, end, ref) {\n        const parent = this._node;\n        if (parent.type !== \"Alternative\") {\n            throw new Error(\"UnknownError\");\n        }\n        const node = {\n            type: \"Backreference\",\n            parent,\n            start,\n            end,\n            raw: this.source.slice(start, end),\n            ref,\n            resolved: DummyCapturingGroup,\n        };\n        parent.elements.push(node);\n        this._backreferences.push(node);\n    }\n    onCharacterClassEnter(start, negate) {\n        const parent = this._node;\n        if (parent.type !== \"Alternative\") {\n            throw new Error(\"UnknownError\");\n        }\n        this._node = {\n            type: \"CharacterClass\",\n            parent,\n            start,\n            end: start,\n            raw: \"\",\n            negate,\n            elements: [],\n        };\n        parent.elements.push(this._node);\n    }\n    onCharacterClassLeave(start, end) {\n        const node = this._node;\n        if (node.type !== \"CharacterClass\" ||\n            node.parent.type !== \"Alternative\") {\n            throw new Error(\"UnknownError\");\n        }\n        node.end = end;\n        node.raw = this.source.slice(start, end);\n        this._node = node.parent;\n    }\n    onCharacterClassRange(start, end) {\n        const parent = this._node;\n        if (parent.type !== \"CharacterClass\") {\n            throw new Error(\"UnknownError\");\n        }\n        const elements = parent.elements;\n        const max = elements.pop();\n        const hyphen = elements.pop();\n        const min = elements.pop();\n        if (!min ||\n            !max ||\n            !hyphen ||\n            min.type !== \"Character\" ||\n            max.type !== \"Character\" ||\n            hyphen.type !== \"Character\" ||\n            hyphen.value !== HyphenMinus) {\n            throw new Error(\"UnknownError\");\n        }\n        const node = {\n            type: \"CharacterClassRange\",\n            parent,\n            start,\n            end,\n            raw: this.source.slice(start, end),\n            min,\n            max,\n        };\n        min.parent = node;\n        max.parent = node;\n        elements.push(node);\n    }\n}\nclass RegExpParser {\n    constructor(options) {\n        this._state = new RegExpParserState(options);\n        this._validator = new RegExpValidator(this._state);\n    }\n    parseLiteral(source, start = 0, end = source.length) {\n        this._state.source = source;\n        this._validator.validateLiteral(source, start, end);\n        const pattern = this._state.pattern;\n        const flags = this._state.flags;\n        const literal = {\n            type: \"RegExpLiteral\",\n            parent: null,\n            start,\n            end,\n            raw: source,\n            pattern,\n            flags,\n        };\n        pattern.parent = literal;\n        flags.parent = literal;\n        return literal;\n    }\n    parseFlags(source, start = 0, end = source.length) {\n        this._state.source = source;\n        this._validator.validateFlags(source, start, end);\n        return this._state.flags;\n    }\n    parsePattern(source, start = 0, end = source.length, uFlag = false) {\n        this._state.source = source;\n        this._validator.validatePattern(source, start, end, uFlag);\n        return this._state.pattern;\n    }\n}\n\nclass RegExpVisitor {\n    constructor(handlers) {\n        this._handlers = handlers;\n    }\n    visit(node) {\n        switch (node.type) {\n            case \"Alternative\":\n                this.visitAlternative(node);\n                break;\n            case \"Assertion\":\n                this.visitAssertion(node);\n                break;\n            case \"Backreference\":\n                this.visitBackreference(node);\n                break;\n            case \"CapturingGroup\":\n                this.visitCapturingGroup(node);\n                break;\n            case \"Character\":\n                this.visitCharacter(node);\n                break;\n            case \"CharacterClass\":\n                this.visitCharacterClass(node);\n                break;\n            case \"CharacterClassRange\":\n                this.visitCharacterClassRange(node);\n                break;\n            case \"CharacterSet\":\n                this.visitCharacterSet(node);\n                break;\n            case \"Flags\":\n                this.visitFlags(node);\n                break;\n            case \"Group\":\n                this.visitGroup(node);\n                break;\n            case \"Pattern\":\n                this.visitPattern(node);\n                break;\n            case \"Quantifier\":\n                this.visitQuantifier(node);\n                break;\n            case \"RegExpLiteral\":\n                this.visitRegExpLiteral(node);\n                break;\n            default:\n                throw new Error(`Unknown type: ${node.type}`);\n        }\n    }\n    visitAlternative(node) {\n        if (this._handlers.onAlternativeEnter) {\n            this._handlers.onAlternativeEnter(node);\n        }\n        node.elements.forEach(this.visit, this);\n        if (this._handlers.onAlternativeLeave) {\n            this._handlers.onAlternativeLeave(node);\n        }\n    }\n    visitAssertion(node) {\n        if (this._handlers.onAssertionEnter) {\n            this._handlers.onAssertionEnter(node);\n        }\n        if (node.kind === \"lookahead\" || node.kind === \"lookbehind\") {\n            node.alternatives.forEach(this.visit, this);\n        }\n        if (this._handlers.onAssertionLeave) {\n            this._handlers.onAssertionLeave(node);\n        }\n    }\n    visitBackreference(node) {\n        if (this._handlers.onBackreferenceEnter) {\n            this._handlers.onBackreferenceEnter(node);\n        }\n        if (this._handlers.onBackreferenceLeave) {\n            this._handlers.onBackreferenceLeave(node);\n        }\n    }\n    visitCapturingGroup(node) {\n        if (this._handlers.onCapturingGroupEnter) {\n            this._handlers.onCapturingGroupEnter(node);\n        }\n        node.alternatives.forEach(this.visit, this);\n        if (this._handlers.onCapturingGroupLeave) {\n            this._handlers.onCapturingGroupLeave(node);\n        }\n    }\n    visitCharacter(node) {\n        if (this._handlers.onCharacterEnter) {\n            this._handlers.onCharacterEnter(node);\n        }\n        if (this._handlers.onCharacterLeave) {\n            this._handlers.onCharacterLeave(node);\n        }\n    }\n    visitCharacterClass(node) {\n        if (this._handlers.onCharacterClassEnter) {\n            this._handlers.onCharacterClassEnter(node);\n        }\n        node.elements.forEach(this.visit, this);\n        if (this._handlers.onCharacterClassLeave) {\n            this._handlers.onCharacterClassLeave(node);\n        }\n    }\n    visitCharacterClassRange(node) {\n        if (this._handlers.onCharacterClassRangeEnter) {\n            this._handlers.onCharacterClassRangeEnter(node);\n        }\n        this.visitCharacter(node.min);\n        this.visitCharacter(node.max);\n        if (this._handlers.onCharacterClassRangeLeave) {\n            this._handlers.onCharacterClassRangeLeave(node);\n        }\n    }\n    visitCharacterSet(node) {\n        if (this._handlers.onCharacterSetEnter) {\n            this._handlers.onCharacterSetEnter(node);\n        }\n        if (this._handlers.onCharacterSetLeave) {\n            this._handlers.onCharacterSetLeave(node);\n        }\n    }\n    visitFlags(node) {\n        if (this._handlers.onFlagsEnter) {\n            this._handlers.onFlagsEnter(node);\n        }\n        if (this._handlers.onFlagsLeave) {\n            this._handlers.onFlagsLeave(node);\n        }\n    }\n    visitGroup(node) {\n        if (this._handlers.onGroupEnter) {\n            this._handlers.onGroupEnter(node);\n        }\n        node.alternatives.forEach(this.visit, this);\n        if (this._handlers.onGroupLeave) {\n            this._handlers.onGroupLeave(node);\n        }\n    }\n    visitPattern(node) {\n        if (this._handlers.onPatternEnter) {\n            this._handlers.onPatternEnter(node);\n        }\n        node.alternatives.forEach(this.visit, this);\n        if (this._handlers.onPatternLeave) {\n            this._handlers.onPatternLeave(node);\n        }\n    }\n    visitQuantifier(node) {\n        if (this._handlers.onQuantifierEnter) {\n            this._handlers.onQuantifierEnter(node);\n        }\n        this.visit(node.element);\n        if (this._handlers.onQuantifierLeave) {\n            this._handlers.onQuantifierLeave(node);\n        }\n    }\n    visitRegExpLiteral(node) {\n        if (this._handlers.onRegExpLiteralEnter) {\n            this._handlers.onRegExpLiteralEnter(node);\n        }\n        this.visitPattern(node.pattern);\n        this.visitFlags(node.flags);\n        if (this._handlers.onRegExpLiteralLeave) {\n            this._handlers.onRegExpLiteralLeave(node);\n        }\n    }\n}\n\nfunction parseRegExpLiteral(source, options) {\n    return new RegExpParser(options).parseLiteral(String(source));\n}\nfunction validateRegExpLiteral(source, options) {\n    return new RegExpValidator(options).validateLiteral(source);\n}\nfunction visitRegExpAST(node, handlers) {\n    new RegExpVisitor(handlers).visit(node);\n}\n\nexport { ast as AST, RegExpParser, RegExpValidator, parseRegExpLiteral, validateRegExpLiteral, visitRegExpAST };\n//# sourceMappingURL=index.mjs.map\n/index.js.map{\"version\":3,\"file\":\"index.js.map\",\"sources\":[\".temp/unicode/src/unicode/ids.ts\",\".temp/unicode/src/unicode/properties.ts\",\".temp/unicode/src/unicode/index.ts\",\".temp/src/reader.ts\",\".temp/src/regexp-syntax-error.ts\",\".temp/src/validator.ts\",\".temp/src/parser.ts\",\".temp/src/visitor.ts\",\".temp/src/index.ts\"],\"sourcesContent\":[{\"errno\":-4058,\"code\":\"ENOENT\",\"syscall\":\"open\",\"path\":\"C:\\\\Users\\\\t-nagashima.MSS\\\\dev\\\\regexpp\\\\.temp\\\\unicode\\\\src\\\\unicode\\\\ids.ts\"},{\"errno\":-4058,\"code\":\"ENOENT\",\"syscall\":\"open\",\"path\":\"C:\\\\Users\\\\t-nagashima.MSS\\\\dev\\\\regexpp\\\\.temp\\\\unicode\\\\src\\\\unicode\\\\properties.ts\"},{\"errno\":-4058,\"code\":\"ENOENT\",\"syscall\":\"open\",\"path\":\"C:\\\\Users\\\\t-nagashima.MSS\\\\dev\\\\regexpp\\\\.temp\\\\unicode\\\\src\\\\unicode\\\\index.ts\"},{\"errno\":-4058,\"code\":\"ENOENT\",\"syscall\":\"open\",\"path\":\"C:\\\\Users\\\\t-nagashima.MSS\\\\dev\\\\regexpp\\\\.temp\\\\src\\\\reader.ts\"},{\"errno\":-4058,\"code\":\"ENOENT\",\"syscall\":\"open\",\"path\":\"C:\\\\Users\\\\t-nagashima.MSS\\\\dev\\\\regexpp\\\\.temp\\\\src\\\\regexp-syntax-error.ts\"},{\"errno\":-4058,\"code\":\"ENOENT\",\"syscall\":\"open\",\"path\":\"C:\\\\Users\\\\t-nagashima.MSS\\\\dev\\\\regexpp\\\\.temp\\\\src\\\\validator.ts\"},{\"errno\":-4058,\"code\":\"ENOENT\",\"syscall\":\"open\",\"path\":\"C:\\\\Users\\\\t-nagashima.MSS\\\\dev\\\\regexpp\\\\.temp\\\\src\\\\parser.ts\"},{\"errno\":-4058,\"code\":\"ENOENT\",\"syscall\":\"open\",\"path\":\"C:\\\\Users\\\\t-nagashima.MSS\\\\dev\\\\regexpp\\\\.temp\\\\src\\\\visitor.ts\"},{\"errno\":-4058,\"code\":\"ENOENT\",\"syscall\":\"open\",\"path\":\"C:\\\\Users\\\\t-nagashima.MSS\\\\dev\\\\regexpp\\\\.temp\\\\src\\\\index.ts\"}],\"names\":[],\"mappings\":\"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\"}"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/cmVxdWlyZS1mcm9tLXN0cmluZ0AyLjAuMg==",
    "content": "/package.json\u0001{\n  \"name\": \"require-from-string\",\n  \"version\": \"2.0.2\",\n  \"description\": \"Require module from string\",\n  \"license\": \"MIT\",\n  \"repository\": \"floatdrop/require-from-string\",\n  \"author\": {\n    \"name\": \"Vsevolod Strukchinsky\",\n    \"email\": \"floatdrop@gmail.com\",\n    \"url\": \"github.com/floatdrop\"\n  },\n  \"engines\": {\n    \"node\": \">=0.10.0\"\n  },\n  \"scripts\": {\n    \"test\": \"mocha\"\n  },\n  \"files\": [\n    \"index.js\"\n  ],\n  \"keywords\": [\n    \"\"\n  ],\n  \"dependencies\": {},\n  \"devDependencies\": {\n    \"mocha\": \"*\"\n  }\n}\n/index.js\u0003b'use strict';\n\nvar Module = require('module');\nvar path = require('path');\n\nmodule.exports = function requireFromString(code, filename, opts) {\n\tif (typeof filename === 'object') {\n\t\topts = filename;\n\t\tfilename = undefined;\n\t}\n\n\topts = opts || {};\n\tfilename = filename || '';\n\n\topts.appendPaths = opts.appendPaths || [];\n\topts.prependPaths = opts.prependPaths || [];\n\n\tif (typeof code !== 'string') {\n\t\tthrow new Error('code must be a string, not ' + typeof code);\n\t}\n\n\tvar paths = Module._nodeModulePaths(path.dirname(filename));\n\n\tvar parent = module.parent;\n\tvar m = new Module(filename, parent);\n\tm.filename = filename;\n\tm.paths = [].concat(opts.prependPaths).concat(paths).concat(opts.appendPaths);\n\tm._compile(code, filename);\n\n\tvar exports = m.exports;\n\tparent && parent.children && parent.children.splice(parent.children.indexOf(m), 1);\n\n\treturn exports;\n};\n/readme.md\u0003# require-from-string [![Build Status](https://travis-ci.org/floatdrop/require-from-string.svg?branch=master)](https://travis-ci.org/floatdrop/require-from-string)\n\nLoad module from string in Node.\n\n## Install\n\n```\n$ npm install --save require-from-string\n```\n\n\n## Usage\n\n```js\nvar requireFromString = require('require-from-string');\n\nrequireFromString('module.exports = 1');\n//=> 1\n```\n\n\n## API\n\n### requireFromString(code, [filename], [options])\n\n#### code\n\n*Required*  \nType: `string`\n\nModule code.\n\n#### filename\nType: `string`  \nDefault: `''`\n\nOptional filename.\n\n\n#### options\nType: `object`\n\n##### appendPaths\nType: `Array`\n\nList of `paths`, that will be appended to module `paths`. Useful, when you want\nto be able require modules from these paths.\n\n##### prependPaths\nType: `Array`\n\nSame as `appendPaths`, but paths will be prepended.\n\n## License\n\nMIT © [Vsevolod Strukchinsky](http://github.com/floatdrop)\n/license\u0004hThe MIT License (MIT)\n\nCopyright (c) Vsevolod Strukchinsky <floatdrop@gmail.com> (github.com/floatdrop)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/cmVzb2x2ZS1mcm9tQDQuMC4w",
    "content": "/index.js\u0004e'use strict';\nconst path = require('path');\nconst Module = require('module');\nconst fs = require('fs');\n\nconst resolveFrom = (fromDir, moduleId, silent) => {\n\tif (typeof fromDir !== 'string') {\n\t\tthrow new TypeError(`Expected \\`fromDir\\` to be of type \\`string\\`, got \\`${typeof fromDir}\\``);\n\t}\n\n\tif (typeof moduleId !== 'string') {\n\t\tthrow new TypeError(`Expected \\`moduleId\\` to be of type \\`string\\`, got \\`${typeof moduleId}\\``);\n\t}\n\n\ttry {\n\t\tfromDir = fs.realpathSync(fromDir);\n\t} catch (err) {\n\t\tif (err.code === 'ENOENT') {\n\t\t\tfromDir = path.resolve(fromDir);\n\t\t} else if (silent) {\n\t\t\treturn null;\n\t\t} else {\n\t\t\tthrow err;\n\t\t}\n\t}\n\n\tconst fromFile = path.join(fromDir, 'noop.js');\n\n\tconst resolveFileName = () => Module._resolveFilename(moduleId, {\n\t\tid: fromFile,\n\t\tfilename: fromFile,\n\t\tpaths: Module._nodeModulePaths(fromDir)\n\t});\n\n\tif (silent) {\n\t\ttry {\n\t\t\treturn resolveFileName();\n\t\t} catch (err) {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\treturn resolveFileName();\n};\n\nmodule.exports = (fromDir, moduleId) => resolveFrom(fromDir, moduleId);\nmodule.exports.silent = (fromDir, moduleId) => resolveFrom(fromDir, moduleId, true);\n/readme.md\u0007.# resolve-from [![Build Status](https://travis-ci.org/sindresorhus/resolve-from.svg?branch=master)](https://travis-ci.org/sindresorhus/resolve-from)\n\n> Resolve the path of a module like [`require.resolve()`](https://nodejs.org/api/globals.html#globals_require_resolve) but from a given path\n\n\n## Install\n\n```\n$ npm install resolve-from\n```\n\n\n## Usage\n\n```js\nconst resolveFrom = require('resolve-from');\n\n// There is a file at `./foo/bar.js`\n\nresolveFrom('foo', './bar');\n//=> '/Users/sindresorhus/dev/test/foo/bar.js'\n```\n\n\n## API\n\n### resolveFrom(fromDir, moduleId)\n\nLike `require()`, throws when the module can't be found.\n\n### resolveFrom.silent(fromDir, moduleId)\n\nReturns `null` instead of throwing when the module can't be found.\n\n#### fromDir\n\nType: `string`\n\nDirectory to resolve from.\n\n#### moduleId\n\nType: `string`\n\nWhat you would use in `require()`.\n\n\n## Tip\n\nCreate a partial using a bound function if you want to resolve from the same `fromDir` multiple times:\n\n```js\nconst resolveFromFoo = resolveFrom.bind(null, 'foo');\n\nresolveFromFoo('./bar');\nresolveFromFoo('./baz');\n```\n\n\n## Related\n\n- [resolve-cwd](https://github.com/sindresorhus/resolve-cwd) - Resolve the path of a module from the current working directory\n- [import-from](https://github.com/sindresorhus/import-from) - Import a module from a given path\n- [import-cwd](https://github.com/sindresorhus/import-cwd) - Import a module from the current working directory\n- [resolve-pkg](https://github.com/sindresorhus/resolve-pkg) - Resolve the path of a package regardless of it having an entry point\n- [import-lazy](https://github.com/sindresorhus/import-lazy) - Import a module lazily\n- [resolve-global](https://github.com/sindresorhus/resolve-global) - Resolve the path of a globally installed module\n\n\n## License\n\nMIT © [Sindre Sorhus](https://sindresorhus.com)\n/package.json\u00029{\n\t\"name\": \"resolve-from\",\n\t\"version\": \"4.0.0\",\n\t\"description\": \"Resolve the path of a module like `require.resolve()` but from a given path\",\n\t\"license\": \"MIT\",\n\t\"repository\": \"sindresorhus/resolve-from\",\n\t\"author\": {\n\t\t\"name\": \"Sindre Sorhus\",\n\t\t\"email\": \"sindresorhus@gmail.com\",\n\t\t\"url\": \"sindresorhus.com\"\n\t},\n\t\"engines\": {\n\t\t\"node\": \">=4\"\n\t},\n\t\"scripts\": {\n\t\t\"test\": \"xo && ava\"\n\t},\n\t\"files\": [\n\t\t\"index.js\"\n\t],\n\t\"keywords\": [\n\t\t\"require\",\n\t\t\"resolve\",\n\t\t\"path\",\n\t\t\"module\",\n\t\t\"from\",\n\t\t\"like\",\n\t\t\"import\"\n\t],\n\t\"devDependencies\": {\n\t\t\"ava\": \"*\",\n\t\t\"xo\": \"*\"\n\t}\n}\n/license\u0004UMIT License\n\nCopyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)\n\nPermission 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:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE 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.\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/cmVzdG9yZS1jdXJzb3JANC4wLjA=",
    "content": "/readme.md\u0002# restore-cursor\n\n> Gracefully restore the CLI cursor on exit\n\nPrevent the cursor you've hidden interactively from remaining hidden if the process crashes.\n\n## Install\n\n```\n$ npm install restore-cursor\n```\n\n## Usage\n\n```js\nimport restoreCursor from 'restore-cursor';\n\nrestoreCursor();\n```\n\n---\n\n<div align=\"center\">\n\t<b>\n\t\t<a href=\"https://tidelift.com/subscription/pkg/npm-restore-cursor?utm_source=npm-restore-cursor&utm_medium=referral&utm_campaign=readme\">Get professional support for this package with a Tidelift subscription</a>\n\t</b>\n\t<br>\n\t<sub>\n\t\tTidelift helps make open source sustainable for maintainers while giving companies<br>assurances about security, maintenance, and licensing for their dependencies.\n\t</sub>\n</div>\n/index.js\u0001\u0007import process from 'node:process';\nimport onetime from 'onetime';\nimport signalExit from 'signal-exit';\n\nconst restoreCursor = onetime(() => {\n\tsignalExit(() => {\n\t\tprocess.stderr.write('\\u001B[?25h');\n\t}, {alwaysLast: true});\n});\n\nexport default restoreCursor;\n/license\u0004]MIT License\n\nCopyright (c) Sindre Sorhus <sindresorhus@gmail.com> (https://sindresorhus.com)\n\nPermission 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:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE 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.\n/index.d.tsı/**\nGracefully restore the CLI cursor on exit.\n\n@example\n```\nimport restoreCursor from 'restore-cursor';\n\nrestoreCursor();\n```\n*/\nexport default function restoreCursor(): void;\n/package.json\u0003{\n\t\"name\": \"restore-cursor\",\n\t\"version\": \"4.0.0\",\n\t\"description\": \"Gracefully restore the CLI cursor on exit\",\n\t\"license\": \"MIT\",\n\t\"repository\": \"sindresorhus/restore-cursor\",\n\t\"funding\": \"https://github.com/sponsors/sindresorhus\",\n\t\"author\": {\n\t\t\"name\": \"Sindre Sorhus\",\n\t\t\"email\": \"sindresorhus@gmail.com\",\n\t\t\"url\": \"https://sindresorhus.com\"\n\t},\n\t\"type\": \"module\",\n\t\"exports\": \"./index.js\",\n\t\"engines\": {\n\t\t\"node\": \"^12.20.0 || ^14.13.1 || >=16.0.0\"\n\t},\n\t\"scripts\": {\n\t\t\"test\": \"xo && tsd\"\n\t},\n\t\"files\": [\n\t\t\"index.js\",\n\t\t\"index.d.ts\"\n\t],\n\t\"keywords\": [\n\t\t\"exit\",\n\t\t\"quit\",\n\t\t\"process\",\n\t\t\"graceful\",\n\t\t\"shutdown\",\n\t\t\"sigterm\",\n\t\t\"sigint\",\n\t\t\"terminate\",\n\t\t\"kill\",\n\t\t\"stop\",\n\t\t\"cli\",\n\t\t\"cursor\",\n\t\t\"ansi\",\n\t\t\"show\",\n\t\t\"term\",\n\t\t\"terminal\",\n\t\t\"console\",\n\t\t\"tty\",\n\t\t\"shell\",\n\t\t\"command-line\"\n\t],\n\t\"dependencies\": {\n\t\t\"onetime\": \"^5.1.0\",\n\t\t\"signal-exit\": \"^3.0.2\"\n\t},\n\t\"devDependencies\": {\n\t\t\"tsd\": \"^0.7.2\",\n\t\t\"xo\": \"^0.24.0\"\n\t}\n}\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/cmZkY0AxLjMuMA==",
    "content": "/index.test-d.tsĮimport { expectType } from 'tsd';\nimport rfdc = require('.');\n\nconst clone = rfdc();\n\nexpectType<number>(clone(5));\nexpectType<{ lorem: string }>(clone({ lorem: \"ipsum\" }));\n/.github/workflows/ci.yml\u0001name: CI\n\non: [push, pull_request]\n\njobs:\n  test:\n    runs-on: ${{ matrix.os }}\n\n    strategy:\n      matrix:\n        os: [ubuntu-latest, windows-latest, macos-latest]\n        node-version: [8.x, 10.x, 12.x, 14.x]\n\n    steps:\n    - uses: actions/checkout@v2\n    - name: Use Node.js ${{ matrix.node-version }}\n      uses: actions/setup-node@v1\n      with:\n        node-version: ${{ matrix.node-version }}\n    - run: npm install\n    - run: npm run ci\n/test/index.js,'use strict'\n\nconst { test } = require('tap')\nconst rfdc = require('..')\nconst cloneDefault = require('../default')\nconst clone = rfdc()\nconst cloneProto = rfdc({ proto: true })\nconst cloneCircles = rfdc({ circles: true })\nconst cloneCirclesProto = rfdc({ circles: true, proto: true })\n\nconst rnd = (max) => Math.round(Math.random() * max)\n\ntypes(clone, 'default')\ntypes(cloneProto, 'proto option')\ntypes(cloneCircles, 'circles option')\ntypes(cloneCirclesProto, 'circles and proto option')\n\ntest('default – does not copy proto properties', async ({ is }) => {\n  is(clone(Object.create({ a: 1 })).a, undefined, 'value not copied')\n})\ntest('default – shorthand import', async ({ same }) => {\n  same(\n    clone(Object.create({ a: 1 })),\n    cloneDefault(Object.create({ a: 1 })),\n    'import equals clone with default options'\n  )\n})\ntest('proto option – copies enumerable proto properties', async ({ is }) => {\n  is(cloneProto(Object.create({ a: 1 })).a, 1, 'value copied')\n})\ntest('circles option - circular object', async ({ same, is, isNot }) => {\n  const o = { nest: { a: 1, b: 2 } }\n  o.circular = o\n  same(cloneCircles(o), o, 'same values')\n  isNot(cloneCircles(o), o, 'different objects')\n  isNot(cloneCircles(o).nest, o.nest, 'different nested objects')\n  const c = cloneCircles(o)\n  is(c.circular, c, 'circular references point to copied parent')\n  isNot(c.circular, o, 'circular references do not point to original parent')\n})\ntest('circles option – deep circular object', async ({ same, is, isNot }) => {\n  const o = { nest: { a: 1, b: 2 } }\n  o.nest.circular = o\n  same(cloneCircles(o), o, 'same values')\n  isNot(cloneCircles(o), o, 'different objects')\n  isNot(cloneCircles(o).nest, o.nest, 'different nested objects')\n  const c = cloneCircles(o)\n  is(c.nest.circular, c, 'circular references point to copied parent')\n  isNot(\n    c.nest.circular,\n    o,\n    'circular references do not point to original parent'\n  )\n})\ntest('circles option alone – does not copy proto properties', async ({\n  is\n}) => {\n  is(cloneCircles(Object.create({ a: 1 })).a, undefined, 'value not copied')\n})\ntest('circles and proto option – copies enumerable proto properties', async ({\n  is\n}) => {\n  is(cloneCirclesProto(Object.create({ a: 1 })).a, 1, 'value copied')\n})\ntest('circles and proto option - circular object', async ({\n  same,\n  is,\n  isNot\n}) => {\n  const o = { nest: { a: 1, b: 2 } }\n  o.circular = o\n  same(cloneCirclesProto(o), o, 'same values')\n  isNot(cloneCirclesProto(o), o, 'different objects')\n  isNot(cloneCirclesProto(o).nest, o.nest, 'different nested objects')\n  const c = cloneCirclesProto(o)\n  is(c.circular, c, 'circular references point to copied parent')\n  isNot(c.circular, o, 'circular references do not point to original parent')\n})\ntest('circles and proto option – deep circular object', async ({\n  same,\n  is,\n  isNot\n}) => {\n  const o = { nest: { a: 1, b: 2 } }\n  o.nest.circular = o\n  same(cloneCirclesProto(o), o, 'same values')\n  isNot(cloneCirclesProto(o), o, 'different objects')\n  isNot(cloneCirclesProto(o).nest, o.nest, 'different nested objects')\n  const c = cloneCirclesProto(o)\n  is(c.nest.circular, c, 'circular references point to copied parent')\n  isNot(\n    c.nest.circular,\n    o,\n    'circular references do not point to original parent'\n  )\n})\ntest('circles and proto option – deep circular array', async ({\n  same,\n  is,\n  isNot\n}) => {\n  const o = { nest: [1, 2] }\n  o.nest.push(o)\n  same(cloneCirclesProto(o), o, 'same values')\n  isNot(cloneCirclesProto(o), o, 'different objects')\n  isNot(cloneCirclesProto(o).nest, o.nest, 'different nested objects')\n  const c = cloneCirclesProto(o)\n  is(c.nest[2], c, 'circular references point to copied parent')\n  isNot(c.nest[2], o, 'circular references do not point to original parent')\n})\n\nfunction types (clone, label) {\n  test(label + ' – number', async ({ is }) => {\n    is(clone(42), 42, 'same value')\n  })\n  test(label + ' – string', async ({ is }) => {\n    is(clone('str'), 'str', 'same value')\n  })\n  test(label + ' – boolean', async ({ is }) => {\n    is(clone(true), true, 'same value')\n  })\n  test(label + ' – function', async ({ is }) => {\n    const fn = () => {}\n    is(clone(fn), fn, 'same function')\n  })\n  test(label + ' – async function', async ({ is }) => {\n    const fn = async () => {}\n    is(clone(fn), fn, 'same function')\n  })\n  test(label + ' – generator function', async ({ is }) => {\n    const fn = function * () {}\n    is(clone(fn), fn, 'same function')\n  })\n  test(label + ' – date', async ({ is, isNot }) => {\n    const date = new Date()\n    is(+clone(date), +date, 'same value')\n    isNot(clone(date), date, 'different object')\n  })\n  test(label + ' – null', async ({ is }) => {\n    is(clone(null), null, 'same value')\n  })\n  test(label + ' – shallow object', async ({ same, isNot }) => {\n    const o = { a: 1, b: 2 }\n    same(clone(o), o, 'same values')\n    isNot(clone(o), o, 'different object')\n  })\n  test(label + ' – shallow array', async ({ same, isNot }) => {\n    const o = [1, 2]\n    same(clone(o), o, 'same values')\n    isNot(clone(o), o, 'different arrays')\n  })\n  test(label + ' – deep object', async ({ same, isNot }) => {\n    const o = { nest: { a: 1, b: 2 } }\n    same(clone(o), o, 'same values')\n    isNot(clone(o), o, 'different objects')\n    isNot(clone(o).nest, o.nest, 'different nested objects')\n  })\n  test(label + ' – deep array', async ({ same, isNot }) => {\n    const o = [{ a: 1, b: 2 }, [3]]\n    same(clone(o), o, 'same values')\n    isNot(clone(o), o, 'different arrays')\n    isNot(clone(o)[0], o[0], 'different array elements')\n    isNot(clone(o)[1], o[1], 'different array elements')\n  })\n  test(label + ' – nested number', async ({ is }) => {\n    is(clone({ a: 1 }).a, 1, 'same value')\n  })\n  test(label + ' – nested string', async ({ is }) => {\n    is(clone({ s: 'str' }).s, 'str', 'same value')\n  })\n  test(label + ' – nested boolean', async ({ is }) => {\n    is(clone({ b: true }).b, true, 'same value')\n  })\n  test(label + ' – nested function', async ({ is }) => {\n    const fn = () => {}\n    is(clone({ fn }).fn, fn, 'same function')\n  })\n  test(label + ' – nested async function', async ({ is }) => {\n    const fn = async () => {}\n    is(clone({ fn }).fn, fn, 'same function')\n  })\n  test(label + ' – nested generator function', async ({ is }) => {\n    const fn = function * () {}\n    is(clone({ fn }).fn, fn, 'same function')\n  })\n  test(label + ' – nested date', async ({ is, isNot }) => {\n    const date = new Date()\n    is(+clone({ d: date }).d, +date, 'same value')\n    isNot(clone({ d: date }).d, date, 'different object')\n  })\n  test(label + ' – nested date in array', async ({ is, isNot }) => {\n    const date = new Date()\n    is(+clone({ d: [date] }).d[0], +date, 'same value')\n    isNot(clone({ d: [date] }).d[0], date, 'different object')\n    is(+cloneCircles({ d: [date] }).d[0], +date, 'same value')\n    isNot(cloneCircles({ d: [date] }).d, date, 'different object')\n  })\n  test(label + ' – nested null', async ({ is }) => {\n    is(clone({ n: null }).n, null, 'same value')\n  })\n  test(label + ' – arguments', async ({ isNot, same }) => {\n    function fn (...args) {\n      same(clone(arguments), args, 'same values')\n      isNot(clone(arguments), arguments, 'different object')\n    }\n    fn(1, 2, 3)\n  })\n  test(`${label} copies buffers from object correctly`, async ({ ok, is, isNot }) => {\n    const input = Date.now().toString(36)\n    const inputBuffer = Buffer.from(input)\n    const clonedBuffer = clone({ a: inputBuffer }).a\n    ok(Buffer.isBuffer(clonedBuffer), 'cloned value is buffer')\n    isNot(clonedBuffer, inputBuffer, 'cloned buffer is not same as input buffer')\n    is(clonedBuffer.toString(), input, 'cloned buffer content is correct')\n  })\n  test(`${label} copies buffers from arrays correctly`, async ({ ok, is, isNot }) => {\n    const input = Date.now().toString(36)\n    const inputBuffer = Buffer.from(input)\n    const [clonedBuffer] = clone([inputBuffer])\n    ok(Buffer.isBuffer(clonedBuffer), 'cloned value is buffer')\n    isNot(clonedBuffer, inputBuffer, 'cloned buffer is not same as input buffer')\n    is(clonedBuffer.toString(), input, 'cloned buffer content is correct')\n  })\n  test(`${label} copies TypedArrays from object correctly`, async ({ ok, is, isNot }) => {\n    const [input1, input2] = [rnd(10), rnd(10)]\n    var buffer = new ArrayBuffer(8)\n    const int32View = new Int32Array(buffer)\n    int32View[0] = input1\n    int32View[1] = input2\n    const cloned = clone({ a: int32View }).a\n    ok(cloned instanceof Int32Array, 'cloned value is instance of class')\n    isNot(cloned, int32View, 'cloned value is not same as input value')\n    is(cloned[0], input1, 'cloned value content is correct')\n    is(cloned[1], input2, 'cloned value content is correct')\n  })\n  test(`${label} copies TypedArrays from array correctly`, async ({ ok, is, isNot }) => {\n    const [input1, input2] = [rnd(10), rnd(10)]\n    var buffer = new ArrayBuffer(16)\n    const int32View = new Int32Array(buffer)\n    int32View[0] = input1\n    int32View[1] = input2\n    const [cloned] = clone([int32View])\n    ok(cloned instanceof Int32Array, 'cloned value is instance of class')\n    isNot(cloned, int32View, 'cloned value is not same as input value')\n    is(cloned[0], input1, 'cloned value content is correct')\n    is(cloned[1], input2, 'cloned value content is correct')\n  })\n  test(`${label} copies complex TypedArrays`, async ({ ok, deepEqual, is, isNot }) => {\n    const [input1, input2, input3] = [rnd(10), rnd(10), rnd(10)]\n    var buffer = new ArrayBuffer(4)\n    const view1 = new Int8Array(buffer, 0, 2)\n    const view2 = new Int8Array(buffer, 2, 2)\n    const view3 = new Int8Array(buffer)\n    view1[0] = input1\n    view2[0] = input2\n    view3[3] = input3\n    const cloned = clone({ view1, view2, view3 })\n    ok(cloned.view1 instanceof Int8Array, 'cloned value is instance of class')\n    ok(cloned.view2 instanceof Int8Array, 'cloned value is instance of class')\n    ok(cloned.view3 instanceof Int8Array, 'cloned value is instance of class')\n    isNot(cloned.view1, view1, 'cloned value is not same as input value')\n    isNot(cloned.view2, view2, 'cloned value is not same as input value')\n    isNot(cloned.view3, view3, 'cloned value is not same as input value')\n    deepEqual(Array.from(cloned.view1), [input1, 0], 'cloned value content is correct')\n    deepEqual(Array.from(cloned.view2), [input2, input3], 'cloned value content is correct')\n    deepEqual(Array.from(cloned.view3), [input1, 0, input2, input3], 'cloned value content is correct')\n  })\n  test(`${label} - maps`, async ({ same, isNot }) => {\n    const map = new Map([['a', 1]])\n    same(Array.from(clone(map)), [['a', 1]], 'same value')\n    isNot(clone(map), map, 'different object')\n  })\n  test(`${label} - sets`, async ({ same, isNot }) => {\n    const set = new Set([1])\n    same(Array.from(clone(set)), [1])\n    isNot(clone(set), set, 'different object')\n  })\n  test(`${label} - nested maps`, async ({ same, isNot }) => {\n    const data = { m: new Map([['a', 1]]) }\n    same(Array.from(clone(data).m), [['a', 1]], 'same value')\n    isNot(clone(data).m, data.m, 'different object')\n  })\n  test(`${label} - nested sets`, async ({ same, isNot }) => {\n    const data = { s: new Set([1]) }\n    same(Array.from(clone(data).s), [1], 'same value')\n    isNot(clone(data).s, data.s, 'different object')\n  })\n}\n/default.js7'use strict'\n\nmodule.exports = require('./index.js')()\n/LICENSE\u0004MCopyright 2019 \"David Mark Clements <david.mark.clements@gmail.com>\"\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated \ndocumentation files (the \"Software\"), to deal in the Software without restriction, including without limitation \nthe rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and \nto permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions \nof the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED \nTO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL \nTHE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF \nCONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS \nIN THE SOFTWARE.\n/package.json\u0006\u0005{\n  \"name\": \"rfdc\",\n  \"version\": \"1.3.0\",\n  \"description\": \"Really Fast Deep Clone\",\n  \"main\": \"index.js\",\n  \"exports\": {\n    \".\": \"./index.js\",\n    \"./default\": \"./default.js\"\n  },\n  \"scripts\": {\n    \"test\": \"tap -R min test && npm run lint && tsd\",\n    \"bench\": \"node benchmark\",\n    \"lint\": \"standard --fix\",\n    \"cov\": \"tap --100 test\",\n    \"cov-ui\": \"tap --coverage-report=html test\",\n    \"ci\": \"standard && tap --100 --coverage-report=text-lcov test | codecov --pipe\"\n  },\n  \"keywords\": [\n    \"object\",\n    \"obj\",\n    \"properties\",\n    \"clone\",\n    \"copy\",\n    \"deep\",\n    \"recursive\",\n    \"key\",\n    \"keys\",\n    \"values\",\n    \"prop\",\n    \"deep-clone\",\n    \"deepclone\",\n    \"deep-copy\",\n    \"deepcopy\",\n    \"fast\",\n    \"performance\",\n    \"performant\",\n    \"fastclone\",\n    \"fastcopy\",\n    \"fast-clone\",\n    \"fast-deep-clone\",\n    \"fast-copy\",\n    \"fast-deep-copy\"\n  ],\n  \"author\": \"David Mark Clements <david.clements@nearform.com>\",\n  \"license\": \"MIT\",\n  \"devDependencies\": {\n    \"clone-deep\": \"^4.0.1\",\n    \"codecov\": \"^3.4.0\",\n    \"deep-copy\": \"^1.4.2\",\n    \"fast-copy\": \"^1.2.1\",\n    \"fastbench\": \"^1.0.1\",\n    \"lodash.clonedeep\": \"^4.5.0\",\n    \"standard\": \"^11.0.1\",\n    \"tap\": \"^12.0.1\",\n    \"tsd\": \"^0.7.4\"\n  },\n  \"directories\": {\n    \"test\": \"test\"\n  },\n  \"dependencies\": {},\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/davidmarkclements/rfdc.git\"\n  },\n  \"bugs\": {\n    \"url\": \"https://github.com/davidmarkclements/rfdc/issues\"\n  },\n  \"homepage\": \"https://github.com/davidmarkclements/rfdc#readme\"\n}\n/readme.md\r# rfdc\n\nReally Fast Deep Clone\n\n\n[![build status](https://img.shields.io/travis/davidmarkclements/rfdc.svg)](https://travis-ci.org/davidmarkclements/rfdc)\n[![coverage](https://img.shields.io/codecov/c/github/davidmarkclements/rfdc.svg)](https://codecov.io/gh/davidmarkclements/rfdc)\n[![js-standard-style](https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat)](http://standardjs.com/)\n\n\n## Usage\n\n```js\nconst clone = require('rfdc')()\nclone({a: 1, b: {c: 2}}) // => {a: 1, b: {c: 2}}\n```\n\n## API\n\n### `require('rfdc')(opts = { proto: false, circles: false }) => clone(obj) => obj2`\n\n#### `proto` option\n\nCopy prototype properties as well as own properties into the new object.\n\nIt's marginally faster to allow enumerable properties on the prototype\nto be copied into the cloned object (not onto it's prototype, directly onto the object).\n\nTo explain by way of code:\n\n```js\nrequire('rfdc')({ proto: false })(Object.create({a: 1})) // => {}\nrequire('rfdc')({ proto: true })(Object.create({a: 1})) // => {a: 1}\n```\n\nSetting `proto` to `true` will provide an additional 2% performance boost.\n\n#### `circles` option\n\nKeeping track of circular references will slow down performance with an\nadditional 25% overhead. Even if an object doesn't have any circular references,\nthe tracking overhead is the cost. By default if an object with a circular\nreference is passed to `rfdc`, it will throw (similar to how `JSON.stringify` \\\nwould throw).\n\nUse the `circles` option to detect and preserve circular references in the\nobject. If performance is important, try removing the circular reference from\nthe object (set to `undefined`) and then add it back manually after cloning\ninstead of using this option.\n\n### `default` import\nIt is also possible to directly import the clone function with all options set\nto their default:\n\n```js\nconst clone = require(\"rfdc/default\")\nclone({a: 1, b: {c: 2}}) // => {a: 1, b: {c: 2}}\n```\n\n### Types\n\n`rfdc` clones all JSON types:\n\n* `Object`\n* `Array`\n* `Number`\n* `String`\n* `null`\n\nWith additional support for:\n\n* `Date` (copied)\n* `undefined` (copied)\n* `Buffer` (copied)\n* `TypedArray` (copied)\n* `Map` (copied)\n* `Set` (copied)\n* `Function` (referenced)\n* `AsyncFunction` (referenced)\n* `GeneratorFunction` (referenced)\n* `arguments` (copied to a normal object)\n\nAll other types have output values that match the output\nof `JSON.parse(JSON.stringify(o))`.\n\nFor instance:\n\n```js\nconst rfdc = require('rfdc')()\nconst err = Error()\nerr.code = 1\nJSON.parse(JSON.stringify(e)) // {code: 1}\nrfdc(e) // {code: 1}\n\nJSON.parse(JSON.stringify({rx: /foo/})) // {rx: {}}\nrfdc({rx: /foo/}) // {rx: {}}\n```\n\n## Benchmarks\n\n```sh\nnpm run bench\n```\n\n```\nbenchDeepCopy*100: 457.568ms\nbenchLodashCloneDeep*100: 1230.773ms\nbenchCloneDeep*100: 655.208ms\nbenchFastCopy*100: 747.017ms\nbenchRfdc*100: 281.018ms\nbenchRfdcProto*100: 277.265ms\nbenchRfdcCircles*100: 328.148ms\nbenchRfdcCirclesProto*100: 323.004ms\n```\n\n## Tests\n\n```sh\nnpm test\n```\n\n```\n169 passing (342.514ms)\n```\n\n### Coverage\n\n```sh\nnpm run cov\n```\n\n```\n----------|----------|----------|----------|----------|-------------------|\nFile      |  % Stmts | % Branch |  % Funcs |  % Lines | Uncovered Line #s |\n----------|----------|----------|----------|----------|-------------------|\nAll files |      100 |      100 |      100 |      100 |                   |\n index.js |      100 |      100 |      100 |      100 |                   |\n----------|----------|----------|----------|----------|-------------------|\n```\n\n## License\n\nMIT\n/index.js\u0015'use strict'\nmodule.exports = rfdc\n\nfunction copyBuffer (cur) {\n  if (cur instanceof Buffer) {\n    return Buffer.from(cur)\n  }\n\n  return new cur.constructor(cur.buffer.slice(), cur.byteOffset, cur.length)\n}\n\nfunction rfdc (opts) {\n  opts = opts || {}\n\n  if (opts.circles) return rfdcCircles(opts)\n  return opts.proto ? cloneProto : clone\n\n  function cloneArray (a, fn) {\n    var keys = Object.keys(a)\n    var a2 = new Array(keys.length)\n    for (var i = 0; i < keys.length; i++) {\n      var k = keys[i]\n      var cur = a[k]\n      if (typeof cur !== 'object' || cur === null) {\n        a2[k] = cur\n      } else if (cur instanceof Date) {\n        a2[k] = new Date(cur)\n      } else if (ArrayBuffer.isView(cur)) {\n        a2[k] = copyBuffer(cur)\n      } else {\n        a2[k] = fn(cur)\n      }\n    }\n    return a2\n  }\n\n  function clone (o) {\n    if (typeof o !== 'object' || o === null) return o\n    if (o instanceof Date) return new Date(o)\n    if (Array.isArray(o)) return cloneArray(o, clone)\n    if (o instanceof Map) return new Map(cloneArray(Array.from(o), clone))\n    if (o instanceof Set) return new Set(cloneArray(Array.from(o), clone))\n    var o2 = {}\n    for (var k in o) {\n      if (Object.hasOwnProperty.call(o, k) === false) continue\n      var cur = o[k]\n      if (typeof cur !== 'object' || cur === null) {\n        o2[k] = cur\n      } else if (cur instanceof Date) {\n        o2[k] = new Date(cur)\n      } else if (cur instanceof Map) {\n        o2[k] = new Map(cloneArray(Array.from(cur), clone))\n      } else if (cur instanceof Set) {\n        o2[k] = new Set(cloneArray(Array.from(cur), clone))\n      } else if (ArrayBuffer.isView(cur)) {\n        o2[k] = copyBuffer(cur)\n      } else {\n        o2[k] = clone(cur)\n      }\n    }\n    return o2\n  }\n\n  function cloneProto (o) {\n    if (typeof o !== 'object' || o === null) return o\n    if (o instanceof Date) return new Date(o)\n    if (Array.isArray(o)) return cloneArray(o, cloneProto)\n    if (o instanceof Map) return new Map(cloneArray(Array.from(o), cloneProto))\n    if (o instanceof Set) return new Set(cloneArray(Array.from(o), cloneProto))\n    var o2 = {}\n    for (var k in o) {\n      var cur = o[k]\n      if (typeof cur !== 'object' || cur === null) {\n        o2[k] = cur\n      } else if (cur instanceof Date) {\n        o2[k] = new Date(cur)\n      } else if (cur instanceof Map) {\n        o2[k] = new Map(cloneArray(Array.from(cur), cloneProto))\n      } else if (cur instanceof Set) {\n        o2[k] = new Set(cloneArray(Array.from(cur), cloneProto))\n      } else if (ArrayBuffer.isView(cur)) {\n        o2[k] = copyBuffer(cur)\n      } else {\n        o2[k] = cloneProto(cur)\n      }\n    }\n    return o2\n  }\n}\n\nfunction rfdcCircles (opts) {\n  var refs = []\n  var refsNew = []\n\n  return opts.proto ? cloneProto : clone\n\n  function cloneArray (a, fn) {\n    var keys = Object.keys(a)\n    var a2 = new Array(keys.length)\n    for (var i = 0; i < keys.length; i++) {\n      var k = keys[i]\n      var cur = a[k]\n      if (typeof cur !== 'object' || cur === null) {\n        a2[k] = cur\n      } else if (cur instanceof Date) {\n        a2[k] = new Date(cur)\n      } else if (ArrayBuffer.isView(cur)) {\n        a2[k] = copyBuffer(cur)\n      } else {\n        var index = refs.indexOf(cur)\n        if (index !== -1) {\n          a2[k] = refsNew[index]\n        } else {\n          a2[k] = fn(cur)\n        }\n      }\n    }\n    return a2\n  }\n\n  function clone (o) {\n    if (typeof o !== 'object' || o === null) return o\n    if (o instanceof Date) return new Date(o)\n    if (Array.isArray(o)) return cloneArray(o, clone)\n    if (o instanceof Map) return new Map(cloneArray(Array.from(o), clone))\n    if (o instanceof Set) return new Set(cloneArray(Array.from(o), clone))\n    var o2 = {}\n    refs.push(o)\n    refsNew.push(o2)\n    for (var k in o) {\n      if (Object.hasOwnProperty.call(o, k) === false) continue\n      var cur = o[k]\n      if (typeof cur !== 'object' || cur === null) {\n        o2[k] = cur\n      } else if (cur instanceof Date) {\n        o2[k] = new Date(cur)\n      } else if (cur instanceof Map) {\n        o2[k] = new Map(cloneArray(Array.from(cur), clone))\n      } else if (cur instanceof Set) {\n        o2[k] = new Set(cloneArray(Array.from(cur), clone))\n      } else if (ArrayBuffer.isView(cur)) {\n        o2[k] = copyBuffer(cur)\n      } else {\n        var i = refs.indexOf(cur)\n        if (i !== -1) {\n          o2[k] = refsNew[i]\n        } else {\n          o2[k] = clone(cur)\n        }\n      }\n    }\n    refs.pop()\n    refsNew.pop()\n    return o2\n  }\n\n  function cloneProto (o) {\n    if (typeof o !== 'object' || o === null) return o\n    if (o instanceof Date) return new Date(o)\n    if (Array.isArray(o)) return cloneArray(o, cloneProto)\n    if (o instanceof Map) return new Map(cloneArray(Array.from(o), cloneProto))\n    if (o instanceof Set) return new Set(cloneArray(Array.from(o), cloneProto))\n    var o2 = {}\n    refs.push(o)\n    refsNew.push(o2)\n    for (var k in o) {\n      var cur = o[k]\n      if (typeof cur !== 'object' || cur === null) {\n        o2[k] = cur\n      } else if (cur instanceof Date) {\n        o2[k] = new Date(cur)\n      } else if (cur instanceof Map) {\n        o2[k] = new Map(cloneArray(Array.from(cur), cloneProto))\n      } else if (cur instanceof Set) {\n        o2[k] = new Set(cloneArray(Array.from(cur), cloneProto))\n      } else if (ArrayBuffer.isView(cur)) {\n        o2[k] = copyBuffer(cur)\n      } else {\n        var i = refs.indexOf(cur)\n        if (i !== -1) {\n          o2[k] = refsNew[i]\n        } else {\n          o2[k] = cloneProto(cur)\n        }\n      }\n    }\n    refs.pop()\n    refsNew.pop()\n    return o2\n  }\n}\n/index.d.tsĵdeclare namespace rfdc {\n  interface Options {\n    proto?: boolean;\n    circles?: boolean;\n  }\n}\n\ndeclare function rfdc(options?: rfdc.Options): <T>(input: T) => T;\n\nexport = rfdc;\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/cmltcmFmQDMuMC4y",
    "content": "/CHANGELOG.md\u0005# v3.0\n\n- Add `--preserve-root` option to executable (default true)\n- Drop support for Node.js below version 6\n\n# v2.7\n\n- Make `glob` an optional dependency\n\n# 2.6\n\n- Retry on EBUSY on non-windows platforms as well\n- Make `rimraf.sync` 10000% more reliable on Windows\n\n# 2.5\n\n- Handle Windows EPERM when lstat-ing read-only dirs\n- Add glob option to pass options to glob\n\n# 2.4\n\n- Add EPERM to delay/retry loop\n- Add `disableGlob` option\n\n# 2.3\n\n- Make maxBusyTries and emfileWait configurable\n- Handle weird SunOS unlink-dir issue\n- Glob the CLI arg for better Windows support\n\n# 2.2\n\n- Handle ENOENT properly on Windows\n- Allow overriding fs methods\n- Treat EPERM as indicative of non-empty dir\n- Remove optional graceful-fs dep\n- Consistently return null error instead of undefined on success\n- win32: Treat ENOTEMPTY the same as EBUSY\n- Add `rimraf` binary\n\n# 2.1\n\n- Fix SunOS error code for a non-empty directory\n- Try rmdir before readdir\n- Treat EISDIR like EPERM\n- Remove chmod\n- Remove lstat polyfill, node 0.7 is not supported\n\n# 2.0\n\n- Fix myGid call to check process.getgid\n- Simplify the EBUSY backoff logic.\n- Use fs.lstat in node >= 0.7.9\n- Remove gently option\n- remove fiber implementation\n- Delete files that are marked read-only\n\n# 1.0\n\n- Allow ENOENT in sync method\n- Throw when no callback is provided\n- Make opts.gently an absolute path\n- use 'stat' if 'lstat' is not available\n- Consistent error naming, and rethrow non-ENOENT stat errors\n- add fiber implementation\n/bin.js\u0007V#!/usr/bin/env node\n\nconst rimraf = require('./')\n\nconst path = require('path')\n\nconst isRoot = arg => /^(\\/|[a-zA-Z]:\\\\)$/.test(path.resolve(arg))\nconst filterOutRoot = arg => {\n  const ok = preserveRoot === false || !isRoot(arg)\n  if (!ok) {\n    console.error(`refusing to remove ${arg}`)\n    console.error('Set --no-preserve-root to allow this')\n  }\n  return ok\n}\n\nlet help = false\nlet dashdash = false\nlet noglob = false\nlet preserveRoot = true\nconst args = process.argv.slice(2).filter(arg => {\n  if (dashdash)\n    return !!arg\n  else if (arg === '--')\n    dashdash = true\n  else if (arg === '--no-glob' || arg === '-G')\n    noglob = true\n  else if (arg === '--glob' || arg === '-g')\n    noglob = false\n  else if (arg.match(/^(-+|\\/)(h(elp)?|\\?)$/))\n    help = true\n  else if (arg === '--preserve-root')\n    preserveRoot = true\n  else if (arg === '--no-preserve-root')\n    preserveRoot = false\n  else\n    return !!arg\n}).filter(arg => !preserveRoot || filterOutRoot(arg))\n\nconst go = n => {\n  if (n >= args.length)\n    return\n  const options = noglob ? { glob: false } : {}\n  rimraf(args[n], options, er => {\n    if (er)\n      throw er\n    go(n+1)\n  })\n}\n\nif (help || args.length === 0) {\n  // If they didn't ask for help, then this is not a \"success\"\n  const log = help ? console.log : console.error\n  log('Usage: rimraf <path> [<path> ...]')\n  log('')\n  log('  Deletes all files and folders at \"path\" recursively.')\n  log('')\n  log('Options:')\n  log('')\n  log('  -h, --help          Display this usage info')\n  log('  -G, --no-glob       Do not expand glob patterns in arguments')\n  log('  -g, --glob          Expand glob patterns in arguments (default)')\n  log('  --preserve-root     Do not remove \\'/\\' (default)')\n  log('  --no-preserve-root  Do not treat \\'/\\' specially')\n  log('  --                  Stop parsing flags')\n  process.exit(help ? 0 : 1)\n} else\n  go(0)\n/rimraf.js\"const assert = require(\"assert\")\nconst path = require(\"path\")\nconst fs = require(\"fs\")\nlet glob = undefined\ntry {\n  glob = require(\"glob\")\n} catch (_err) {\n  // treat glob as optional.\n}\n\nconst defaultGlobOpts = {\n  nosort: true,\n  silent: true\n}\n\n// for EMFILE handling\nlet timeout = 0\n\nconst isWindows = (process.platform === \"win32\")\n\nconst defaults = options => {\n  const methods = [\n    'unlink',\n    'chmod',\n    'stat',\n    'lstat',\n    'rmdir',\n    'readdir'\n  ]\n  methods.forEach(m => {\n    options[m] = options[m] || fs[m]\n    m = m + 'Sync'\n    options[m] = options[m] || fs[m]\n  })\n\n  options.maxBusyTries = options.maxBusyTries || 3\n  options.emfileWait = options.emfileWait || 1000\n  if (options.glob === false) {\n    options.disableGlob = true\n  }\n  if (options.disableGlob !== true && glob === undefined) {\n    throw Error('glob dependency not found, set `options.disableGlob = true` if intentional')\n  }\n  options.disableGlob = options.disableGlob || false\n  options.glob = options.glob || defaultGlobOpts\n}\n\nconst rimraf = (p, options, cb) => {\n  if (typeof options === 'function') {\n    cb = options\n    options = {}\n  }\n\n  assert(p, 'rimraf: missing path')\n  assert.equal(typeof p, 'string', 'rimraf: path should be a string')\n  assert.equal(typeof cb, 'function', 'rimraf: callback function required')\n  assert(options, 'rimraf: invalid options argument provided')\n  assert.equal(typeof options, 'object', 'rimraf: options should be object')\n\n  defaults(options)\n\n  let busyTries = 0\n  let errState = null\n  let n = 0\n\n  const next = (er) => {\n    errState = errState || er\n    if (--n === 0)\n      cb(errState)\n  }\n\n  const afterGlob = (er, results) => {\n    if (er)\n      return cb(er)\n\n    n = results.length\n    if (n === 0)\n      return cb()\n\n    results.forEach(p => {\n      const CB = (er) => {\n        if (er) {\n          if ((er.code === \"EBUSY\" || er.code === \"ENOTEMPTY\" || er.code === \"EPERM\") &&\n              busyTries < options.maxBusyTries) {\n            busyTries ++\n            // try again, with the same exact callback as this one.\n            return setTimeout(() => rimraf_(p, options, CB), busyTries * 100)\n          }\n\n          // this one won't happen if graceful-fs is used.\n          if (er.code === \"EMFILE\" && timeout < options.emfileWait) {\n            return setTimeout(() => rimraf_(p, options, CB), timeout ++)\n          }\n\n          // already gone\n          if (er.code === \"ENOENT\") er = null\n        }\n\n        timeout = 0\n        next(er)\n      }\n      rimraf_(p, options, CB)\n    })\n  }\n\n  if (options.disableGlob || !glob.hasMagic(p))\n    return afterGlob(null, [p])\n\n  options.lstat(p, (er, stat) => {\n    if (!er)\n      return afterGlob(null, [p])\n\n    glob(p, options.glob, afterGlob)\n  })\n\n}\n\n// Two possible strategies.\n// 1. Assume it's a file.  unlink it, then do the dir stuff on EPERM or EISDIR\n// 2. Assume it's a directory.  readdir, then do the file stuff on ENOTDIR\n//\n// Both result in an extra syscall when you guess wrong.  However, there\n// are likely far more normal files in the world than directories.  This\n// is based on the assumption that a the average number of files per\n// directory is >= 1.\n//\n// If anyone ever complains about this, then I guess the strategy could\n// be made configurable somehow.  But until then, YAGNI.\nconst rimraf_ = (p, options, cb) => {\n  assert(p)\n  assert(options)\n  assert(typeof cb === 'function')\n\n  // sunos lets the root user unlink directories, which is... weird.\n  // so we have to lstat here and make sure it's not a dir.\n  options.lstat(p, (er, st) => {\n    if (er && er.code === \"ENOENT\")\n      return cb(null)\n\n    // Windows can EPERM on stat.  Life is suffering.\n    if (er && er.code === \"EPERM\" && isWindows)\n      fixWinEPERM(p, options, er, cb)\n\n    if (st && st.isDirectory())\n      return rmdir(p, options, er, cb)\n\n    options.unlink(p, er => {\n      if (er) {\n        if (er.code === \"ENOENT\")\n          return cb(null)\n        if (er.code === \"EPERM\")\n          return (isWindows)\n            ? fixWinEPERM(p, options, er, cb)\n            : rmdir(p, options, er, cb)\n        if (er.code === \"EISDIR\")\n          return rmdir(p, options, er, cb)\n      }\n      return cb(er)\n    })\n  })\n}\n\nconst fixWinEPERM = (p, options, er, cb) => {\n  assert(p)\n  assert(options)\n  assert(typeof cb === 'function')\n\n  options.chmod(p, 0o666, er2 => {\n    if (er2)\n      cb(er2.code === \"ENOENT\" ? null : er)\n    else\n      options.stat(p, (er3, stats) => {\n        if (er3)\n          cb(er3.code === \"ENOENT\" ? null : er)\n        else if (stats.isDirectory())\n          rmdir(p, options, er, cb)\n        else\n          options.unlink(p, cb)\n      })\n  })\n}\n\nconst fixWinEPERMSync = (p, options, er) => {\n  assert(p)\n  assert(options)\n\n  try {\n    options.chmodSync(p, 0o666)\n  } catch (er2) {\n    if (er2.code === \"ENOENT\")\n      return\n    else\n      throw er\n  }\n\n  let stats\n  try {\n    stats = options.statSync(p)\n  } catch (er3) {\n    if (er3.code === \"ENOENT\")\n      return\n    else\n      throw er\n  }\n\n  if (stats.isDirectory())\n    rmdirSync(p, options, er)\n  else\n    options.unlinkSync(p)\n}\n\nconst rmdir = (p, options, originalEr, cb) => {\n  assert(p)\n  assert(options)\n  assert(typeof cb === 'function')\n\n  // try to rmdir first, and only readdir on ENOTEMPTY or EEXIST (SunOS)\n  // if we guessed wrong, and it's not a directory, then\n  // raise the original error.\n  options.rmdir(p, er => {\n    if (er && (er.code === \"ENOTEMPTY\" || er.code === \"EEXIST\" || er.code === \"EPERM\"))\n      rmkids(p, options, cb)\n    else if (er && er.code === \"ENOTDIR\")\n      cb(originalEr)\n    else\n      cb(er)\n  })\n}\n\nconst rmkids = (p, options, cb) => {\n  assert(p)\n  assert(options)\n  assert(typeof cb === 'function')\n\n  options.readdir(p, (er, files) => {\n    if (er)\n      return cb(er)\n    let n = files.length\n    if (n === 0)\n      return options.rmdir(p, cb)\n    let errState\n    files.forEach(f => {\n      rimraf(path.join(p, f), options, er => {\n        if (errState)\n          return\n        if (er)\n          return cb(errState = er)\n        if (--n === 0)\n          options.rmdir(p, cb)\n      })\n    })\n  })\n}\n\n// this looks simpler, and is strictly *faster*, but will\n// tie up the JavaScript thread and fail on excessively\n// deep directory trees.\nconst rimrafSync = (p, options) => {\n  options = options || {}\n  defaults(options)\n\n  assert(p, 'rimraf: missing path')\n  assert.equal(typeof p, 'string', 'rimraf: path should be a string')\n  assert(options, 'rimraf: missing options')\n  assert.equal(typeof options, 'object', 'rimraf: options should be object')\n\n  let results\n\n  if (options.disableGlob || !glob.hasMagic(p)) {\n    results = [p]\n  } else {\n    try {\n      options.lstatSync(p)\n      results = [p]\n    } catch (er) {\n      results = glob.sync(p, options.glob)\n    }\n  }\n\n  if (!results.length)\n    return\n\n  for (let i = 0; i < results.length; i++) {\n    const p = results[i]\n\n    let st\n    try {\n      st = options.lstatSync(p)\n    } catch (er) {\n      if (er.code === \"ENOENT\")\n        return\n\n      // Windows can EPERM on stat.  Life is suffering.\n      if (er.code === \"EPERM\" && isWindows)\n        fixWinEPERMSync(p, options, er)\n    }\n\n    try {\n      // sunos lets the root user unlink directories, which is... weird.\n      if (st && st.isDirectory())\n        rmdirSync(p, options, null)\n      else\n        options.unlinkSync(p)\n    } catch (er) {\n      if (er.code === \"ENOENT\")\n        return\n      if (er.code === \"EPERM\")\n        return isWindows ? fixWinEPERMSync(p, options, er) : rmdirSync(p, options, er)\n      if (er.code !== \"EISDIR\")\n        throw er\n\n      rmdirSync(p, options, er)\n    }\n  }\n}\n\nconst rmdirSync = (p, options, originalEr) => {\n  assert(p)\n  assert(options)\n\n  try {\n    options.rmdirSync(p)\n  } catch (er) {\n    if (er.code === \"ENOENT\")\n      return\n    if (er.code === \"ENOTDIR\")\n      throw originalEr\n    if (er.code === \"ENOTEMPTY\" || er.code === \"EEXIST\" || er.code === \"EPERM\")\n      rmkidsSync(p, options)\n  }\n}\n\nconst rmkidsSync = (p, options) => {\n  assert(p)\n  assert(options)\n  options.readdirSync(p).forEach(f => rimrafSync(path.join(p, f), options))\n\n  // We only end up here once we got ENOTEMPTY at least once, and\n  // at this point, we are guaranteed to have removed all the kids.\n  // So, we know that it won't be ENOENT or ENOTDIR or anything else.\n  // try really hard to delete stuff on windows, because it has a\n  // PROFOUNDLY annoying habit of not closing handles promptly when\n  // files are deleted, resulting in spurious ENOTEMPTY errors.\n  const retries = isWindows ? 100 : 1\n  let i = 0\n  do {\n    let threw = true\n    try {\n      const ret = options.rmdirSync(p, options)\n      threw = false\n      return ret\n    } finally {\n      if (++i < retries && threw)\n        continue\n    }\n  } while (true)\n}\n\nmodule.exports = rimraf\nrimraf.sync = rimrafSync\n/package.json\u0002{\n  \"name\": \"rimraf\",\n  \"version\": \"3.0.2\",\n  \"main\": \"rimraf.js\",\n  \"description\": \"A deep deletion module for node (like `rm -rf`)\",\n  \"author\": \"Isaac Z. Schlueter <i@izs.me> (http://blog.izs.me/)\",\n  \"license\": \"ISC\",\n  \"repository\": \"git://github.com/isaacs/rimraf.git\",\n  \"scripts\": {\n    \"preversion\": \"npm test\",\n    \"postversion\": \"npm publish\",\n    \"postpublish\": \"git push origin --follow-tags\",\n    \"test\": \"tap test/*.js\"\n  },\n  \"bin\": \"./bin.js\",\n  \"dependencies\": {\n    \"glob\": \"^7.1.3\"\n  },\n  \"files\": [\n    \"LICENSE\",\n    \"README.md\",\n    \"bin.js\",\n    \"rimraf.js\"\n  ],\n  \"devDependencies\": {\n    \"mkdirp\": \"^0.5.1\",\n    \"tap\": \"^12.1.1\"\n  },\n  \"funding\": {\n    \"url\": \"https://github.com/sponsors/isaacs\"\n  }\n}\n/LICENSE\u0002The ISC License\n\nCopyright (c) Isaac Z. Schlueter and Contributors\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted, provided that the above\ncopyright notice and this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\nWITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\nANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\nACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR\nIN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n/README.md\u000e\u0010[![Build Status](https://travis-ci.org/isaacs/rimraf.svg?branch=master)](https://travis-ci.org/isaacs/rimraf) [![Dependency Status](https://david-dm.org/isaacs/rimraf.svg)](https://david-dm.org/isaacs/rimraf) [![devDependency Status](https://david-dm.org/isaacs/rimraf/dev-status.svg)](https://david-dm.org/isaacs/rimraf#info=devDependencies)\n\nThe [UNIX command](http://en.wikipedia.org/wiki/Rm_(Unix)) `rm -rf` for node.\n\nInstall with `npm install rimraf`, or just drop rimraf.js somewhere.\n\n## API\n\n`rimraf(f, [opts], callback)`\n\nThe first parameter will be interpreted as a globbing pattern for files. If you\nwant to disable globbing you can do so with `opts.disableGlob` (defaults to\n`false`). This might be handy, for instance, if you have filenames that contain\nglobbing wildcard characters.\n\nThe callback will be called with an error if there is one.  Certain\nerrors are handled for you:\n\n* Windows: `EBUSY` and `ENOTEMPTY` - rimraf will back off a maximum of\n  `opts.maxBusyTries` times before giving up, adding 100ms of wait\n  between each attempt.  The default `maxBusyTries` is 3.\n* `ENOENT` - If the file doesn't exist, rimraf will return\n  successfully, since your desired outcome is already the case.\n* `EMFILE` - Since `readdir` requires opening a file descriptor, it's\n  possible to hit `EMFILE` if too many file descriptors are in use.\n  In the sync case, there's nothing to be done for this.  But in the\n  async case, rimraf will gradually back off with timeouts up to\n  `opts.emfileWait` ms, which defaults to 1000.\n\n## options\n\n* unlink, chmod, stat, lstat, rmdir, readdir,\n  unlinkSync, chmodSync, statSync, lstatSync, rmdirSync, readdirSync\n\n    In order to use a custom file system library, you can override\n    specific fs functions on the options object.\n\n    If any of these functions are present on the options object, then\n    the supplied function will be used instead of the default fs\n    method.\n\n    Sync methods are only relevant for `rimraf.sync()`, of course.\n\n    For example:\n\n    ```javascript\n    var myCustomFS = require('some-custom-fs')\n\n    rimraf('some-thing', myCustomFS, callback)\n    ```\n\n* maxBusyTries\n\n    If an `EBUSY`, `ENOTEMPTY`, or `EPERM` error code is encountered\n    on Windows systems, then rimraf will retry with a linear backoff\n    wait of 100ms longer on each try.  The default maxBusyTries is 3.\n\n    Only relevant for async usage.\n\n* emfileWait\n\n    If an `EMFILE` error is encountered, then rimraf will retry\n    repeatedly with a linear backoff of 1ms longer on each try, until\n    the timeout counter hits this max.  The default limit is 1000.\n\n    If you repeatedly encounter `EMFILE` errors, then consider using\n    [graceful-fs](http://npm.im/graceful-fs) in your program.\n\n    Only relevant for async usage.\n\n* glob\n\n    Set to `false` to disable [glob](http://npm.im/glob) pattern\n    matching.\n\n    Set to an object to pass options to the glob module.  The default\n    glob options are `{ nosort: true, silent: true }`.\n\n    Glob version 6 is used in this module.\n\n    Relevant for both sync and async usage.\n\n* disableGlob\n\n    Set to any non-falsey value to disable globbing entirely.\n    (Equivalent to setting `glob: false`.)\n\n## rimraf.sync\n\nIt can remove stuff synchronously, too.  But that's not so good.  Use\nthe async API.  It's better.\n\n## CLI\n\nIf installed with `npm install rimraf -g` it can be used as a global\ncommand `rimraf <path> [<path> ...]` which is useful for cross platform support.\n\n## mkdirp\n\nIf you need to create a directory recursively, check out\n[mkdirp](https://github.com/substack/node-mkdirp).\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/cnVuLXBhcmFsbGVsQDEuMi4w",
    "content": "/README.md\fU# run-parallel [![travis][travis-image]][travis-url] [![npm][npm-image]][npm-url] [![downloads][downloads-image]][downloads-url] [![javascript style guide][standard-image]][standard-url]\n\n[travis-image]: https://img.shields.io/travis/feross/run-parallel/master.svg\n[travis-url]: https://travis-ci.org/feross/run-parallel\n[npm-image]: https://img.shields.io/npm/v/run-parallel.svg\n[npm-url]: https://npmjs.org/package/run-parallel\n[downloads-image]: https://img.shields.io/npm/dm/run-parallel.svg\n[downloads-url]: https://npmjs.org/package/run-parallel\n[standard-image]: https://img.shields.io/badge/code_style-standard-brightgreen.svg\n[standard-url]: https://standardjs.com\n\n### Run an array of functions in parallel\n\n![parallel](https://raw.githubusercontent.com/feross/run-parallel/master/img.png) [![Sauce Test Status](https://saucelabs.com/browser-matrix/run-parallel.svg)](https://saucelabs.com/u/run-parallel)\n\n### install\n\n```\nnpm install run-parallel\n```\n\n### usage\n\n#### parallel(tasks, [callback])\n\nRun the `tasks` array of functions in parallel, without waiting until the previous\nfunction has completed. If any of the functions pass an error to its callback, the main\n`callback` is immediately called with the value of the error. Once the `tasks` have\ncompleted, the results are passed to the final `callback` as an array.\n\nIt is also possible to use an object instead of an array. Each property will be run as a\nfunction and the results will be passed to the final `callback` as an object instead of\nan array. This can be a more readable way of handling the results.\n\n##### arguments\n\n- `tasks` - An array or object containing functions to run. Each function is passed a\n`callback(err, result)` which it must call on completion with an error `err` (which can\nbe `null`) and an optional `result` value.\n- `callback(err, results)` - An optional callback to run once all the functions have\ncompleted. This function gets a results array (or object) containing all the result\narguments passed to the task callbacks.\n\n##### example\n\n```js\nvar parallel = require('run-parallel')\n\nparallel([\n  function (callback) {\n    setTimeout(function () {\n      callback(null, 'one')\n    }, 200)\n  },\n  function (callback) {\n    setTimeout(function () {\n      callback(null, 'two')\n    }, 100)\n  }\n],\n// optional callback\nfunction (err, results) {\n  // the results array will equal ['one','two'] even though\n  // the second function had a shorter timeout.\n})\n```\n\nThis module is basically equavalent to\n[`async.parallel`](https://github.com/caolan/async#paralleltasks-callback), but it's\nhandy to just have the one function you need instead of the kitchen sink. Modularity!\nEspecially handy if you're serving to the browser and need to reduce your javascript\nbundle size.\n\nWorks great in the browser with [browserify](http://browserify.org/)!\n\n### see also\n\n- [run-auto](https://github.com/feross/run-auto)\n- [run-parallel-limit](https://github.com/feross/run-parallel-limit)\n- [run-series](https://github.com/feross/run-series)\n- [run-waterfall](https://github.com/feross/run-waterfall)\n\n### license\n\nMIT. Copyright (c) [Feross Aboukhadijeh](http://feross.org).\n/index.js\u0004\n/*! run-parallel. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\nmodule.exports = runParallel\n\nconst queueMicrotask = require('queue-microtask')\n\nfunction runParallel (tasks, cb) {\n  let results, pending, keys\n  let isSync = true\n\n  if (Array.isArray(tasks)) {\n    results = []\n    pending = tasks.length\n  } else {\n    keys = Object.keys(tasks)\n    results = {}\n    pending = keys.length\n  }\n\n  function done (err) {\n    function end () {\n      if (cb) cb(err, results)\n      cb = null\n    }\n    if (isSync) queueMicrotask(end)\n    else end()\n  }\n\n  function each (i, err, result) {\n    results[i] = result\n    if (--pending === 0 || err) {\n      done(err)\n    }\n  }\n\n  if (!pending) {\n    // empty\n    done(null)\n  } else if (keys) {\n    // object\n    keys.forEach(function (key) {\n      tasks[key](function (err, result) { each(key, err, result) })\n    })\n  } else {\n    // array\n    tasks.forEach(function (task, i) {\n      task(function (err, result) { each(i, err, result) })\n    })\n  }\n\n  isSync = false\n}\n/LICENSE\u00049The MIT License (MIT)\n\nCopyright (c) Feross Aboukhadijeh\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n/package.json\u0005\u000b{\n  \"name\": \"run-parallel\",\n  \"description\": \"Run an array of functions in parallel\",\n  \"version\": \"1.2.0\",\n  \"author\": {\n    \"name\": \"Feross Aboukhadijeh\",\n    \"email\": \"feross@feross.org\",\n    \"url\": \"https://feross.org\"\n  },\n  \"bugs\": {\n    \"url\": \"https://github.com/feross/run-parallel/issues\"\n  },\n  \"dependencies\": {\n    \"queue-microtask\": \"^1.2.2\"\n  },\n  \"devDependencies\": {\n    \"airtap\": \"^3.0.0\",\n    \"standard\": \"*\",\n    \"tape\": \"^5.0.1\"\n  },\n  \"homepage\": \"https://github.com/feross/run-parallel\",\n  \"keywords\": [\n    \"parallel\",\n    \"async\",\n    \"function\",\n    \"callback\",\n    \"asynchronous\",\n    \"run\",\n    \"array\",\n    \"run parallel\"\n  ],\n  \"license\": \"MIT\",\n  \"main\": \"index.js\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git://github.com/feross/run-parallel.git\"\n  },\n  \"scripts\": {\n    \"test\": \"standard && npm run test-node && npm run test-browser\",\n    \"test-browser\": \"airtap -- test/*.js\",\n    \"test-browser-local\": \"airtap --local -- test/*.js\",\n    \"test-node\": \"tape test/*.js\"\n  },\n  \"funding\": [\n    {\n      \"type\": \"github\",\n      \"url\": \"https://github.com/sponsors/feross\"\n    },\n    {\n      \"type\": \"patreon\",\n      \"url\": \"https://www.patreon.com/feross\"\n    },\n    {\n      \"type\": \"consulting\",\n      \"url\": \"https://feross.org/support\"\n    }\n  ]\n}\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/d29yZC13cmFwQDEuMi4z",
    "content": "/index.js\u0004./*!\n * word-wrap <https://github.com/jonschlinkert/word-wrap>\n *\n * Copyright (c) 2014-2017, Jon Schlinkert.\n * Released under the MIT License.\n */\n\nmodule.exports = function(str, options) {\n  options = options || {};\n  if (str == null) {\n    return str;\n  }\n\n  var width = options.width || 50;\n  var indent = (typeof options.indent === 'string')\n    ? options.indent\n    : '  ';\n\n  var newline = options.newline || '\\n' + indent;\n  var escape = typeof options.escape === 'function'\n    ? options.escape\n    : identity;\n\n  var regexString = '.{1,' + width + '}';\n  if (options.cut !== true) {\n    regexString += '([\\\\s\\u200B]+|$)|[^\\\\s\\u200B]+?([\\\\s\\u200B]+|$)';\n  }\n\n  var re = new RegExp(regexString, 'g');\n  var lines = str.match(re) || [];\n  var result = indent + lines.map(function(line) {\n    if (line.slice(-1) === '\\n') {\n      line = line.slice(0, line.length - 1);\n    }\n    return escape(line);\n  }).join(newline);\n\n  if (options.trim === true) {\n    result = result.replace(/[ \\t]*$/gm, '');\n  }\n  return result;\n};\n\nfunction identity(str) {\n  return str;\n}\n/package.json\u0006{\n  \"name\": \"word-wrap\",\n  \"description\": \"Wrap words to a specified length.\",\n  \"version\": \"1.2.3\",\n  \"homepage\": \"https://github.com/jonschlinkert/word-wrap\",\n  \"author\": \"Jon Schlinkert (https://github.com/jonschlinkert)\",\n  \"contributors\": [\n    \"Danilo Sampaio <danilo.sampaio@gmail.com> (localhost:8080)\",\n    \"Fede Ramirez <i@2fd.me> (https://2fd.github.io)\",\n    \"Joe Hildebrand <joe-github@cursive.net> (https://twitter.com/hildjj)\",\n    \"Jon Schlinkert <jon.schlinkert@sellside.com> (http://twitter.com/jonschlinkert)\",\n    \"Todd Kennedy (https://tck.io)\",\n    \"Waldemar Reusch (https://github.com/lordvlad)\",\n    \"Wolfgang Faust (http://www.linestarve.com)\",\n    \"Zach Hale <zachhale@gmail.com> (http://zachhale.com)\"\n  ],\n  \"repository\": \"jonschlinkert/word-wrap\",\n  \"bugs\": {\n    \"url\": \"https://github.com/jonschlinkert/word-wrap/issues\"\n  },\n  \"license\": \"MIT\",\n  \"files\": [\n    \"index.js\",\n    \"index.d.ts\"\n  ],\n  \"main\": \"index.js\",\n  \"engines\": {\n    \"node\": \">=0.10.0\"\n  },\n  \"scripts\": {\n    \"test\": \"mocha\"\n  },\n  \"devDependencies\": {\n    \"gulp-format-md\": \"^0.1.11\",\n    \"mocha\": \"^3.2.0\"\n  },\n  \"keywords\": [\n    \"break\",\n    \"carriage\",\n    \"line\",\n    \"new-line\",\n    \"newline\",\n    \"return\",\n    \"soft\",\n    \"text\",\n    \"word\",\n    \"word-wrap\",\n    \"words\",\n    \"wrap\"\n  ],\n  \"typings\": \"index.d.ts\",\n  \"verb\": {\n    \"toc\": false,\n    \"layout\": \"default\",\n    \"tasks\": [\n      \"readme\"\n    ],\n    \"plugins\": [\n      \"gulp-format-md\"\n    ],\n    \"lint\": {\n      \"reflinks\": true\n    },\n    \"related\": {\n      \"list\": [\n        \"common-words\",\n        \"shuffle-words\",\n        \"unique-words\",\n        \"wordcount\"\n      ]\n    },\n    \"reflinks\": [\n      \"verb\",\n      \"verb-generate-readme\"\n    ]\n  }\n}\n/index.d.ts\u0004/**\n * Wrap words to a specified length.\n */\nexport = wrap;\n\ndeclare function wrap(str: string, options?: wrap.IOptions): string;\n\ndeclare namespace wrap {\n    export interface IOptions {\n\n        /**\n         * The width of the text before wrapping to a new line.\n         * @default ´50´\n         */\n        width?: number;\n\n        /**\n         * The string to use at the beginning of each line.\n         * @default ´  ´ (two spaces)\n         */\n        indent?: string;\n\n        /**\n         * The string to use at the end of each line.\n         * @default ´\\n´\n         */\n        newline?: string;\n\n        /**\n         * An escape function to run on each line after splitting them.\n         * @default (str: string) => string;\n         */\n        escape?: (str: string) => string;\n\n        /**\n         * Trim trailing whitespace from the returned string.\n         * This option is included since .trim() would also strip\n         * the leading indentation from the first line.\n         * @default true\n         */\n        trim?: boolean;\n\n        /**\n         * Break a word between any two letters when the word is longer\n         * than the specified width.\n         * @default false\n         */\n        cut?: boolean;\n    }\n}/README.md\u0015U# word-wrap [![NPM version](https://img.shields.io/npm/v/word-wrap.svg?style=flat)](https://www.npmjs.com/package/word-wrap) [![NPM monthly downloads](https://img.shields.io/npm/dm/word-wrap.svg?style=flat)](https://npmjs.org/package/word-wrap) [![NPM total downloads](https://img.shields.io/npm/dt/word-wrap.svg?style=flat)](https://npmjs.org/package/word-wrap) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/word-wrap.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/word-wrap)\n\n> Wrap words to a specified length.\n\n## Install\n\nInstall with [npm](https://www.npmjs.com/):\n\n```sh\n$ npm install --save word-wrap\n```\n\n## Usage\n\n```js\nvar wrap = require('word-wrap');\n\nwrap('Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.');\n```\n\nResults in:\n\n```\n  Lorem ipsum dolor sit amet, consectetur adipiscing\n  elit, sed do eiusmod tempor incididunt ut labore\n  et dolore magna aliqua. Ut enim ad minim veniam,\n  quis nostrud exercitation ullamco laboris nisi ut\n  aliquip ex ea commodo consequat.\n```\n\n## Options\n\n![image](https://cloud.githubusercontent.com/assets/383994/6543728/7a381c08-c4f6-11e4-8b7d-b6ba197569c9.png)\n\n### options.width\n\nType: `Number`\n\nDefault: `50`\n\nThe width of the text before wrapping to a new line.\n\n**Example:**\n\n```js\nwrap(str, {width: 60});\n```\n\n### options.indent\n\nType: `String`\n\nDefault: `` (two spaces)\n\nThe string to use at the beginning of each line.\n\n**Example:**\n\n```js\nwrap(str, {indent: '      '});\n```\n\n### options.newline\n\nType: `String`\n\nDefault: `\\n`\n\nThe string to use at the end of each line.\n\n**Example:**\n\n```js\nwrap(str, {newline: '\\n\\n'});\n```\n\n### options.escape\n\nType: `function`\n\nDefault: `function(str){return str;}`\n\nAn escape function to run on each line after splitting them.\n\n**Example:**\n\n```js\nvar xmlescape = require('xml-escape');\nwrap(str, {\n  escape: function(string){\n    return xmlescape(string);\n  }\n});\n```\n\n### options.trim\n\nType: `Boolean`\n\nDefault: `false`\n\nTrim trailing whitespace from the returned string. This option is included since `.trim()` would also strip the leading indentation from the first line.\n\n**Example:**\n\n```js\nwrap(str, {trim: true});\n```\n\n### options.cut\n\nType: `Boolean`\n\nDefault: `false`\n\nBreak a word between any two letters when the word is longer than the specified width.\n\n**Example:**\n\n```js\nwrap(str, {cut: true});\n```\n\n## About\n\n### Related projects\n\n* [common-words](https://www.npmjs.com/package/common-words): Updated list (JSON) of the 100 most common words in the English language. Useful for… [more](https://github.com/jonschlinkert/common-words) | [homepage](https://github.com/jonschlinkert/common-words \"Updated list (JSON) of the 100 most common words in the English language. Useful for excluding these words from arrays.\")\n* [shuffle-words](https://www.npmjs.com/package/shuffle-words): Shuffle the words in a string and optionally the letters in each word using the… [more](https://github.com/jonschlinkert/shuffle-words) | [homepage](https://github.com/jonschlinkert/shuffle-words \"Shuffle the words in a string and optionally the letters in each word using the Fisher-Yates algorithm. Useful for creating test fixtures, benchmarking samples, etc.\")\n* [unique-words](https://www.npmjs.com/package/unique-words): Return the unique words in a string or array. | [homepage](https://github.com/jonschlinkert/unique-words \"Return the unique words in a string or array.\")\n* [wordcount](https://www.npmjs.com/package/wordcount): Count the words in a string. Support for english, CJK and Cyrillic. | [homepage](https://github.com/jonschlinkert/wordcount \"Count the words in a string. Support for english, CJK and Cyrillic.\")\n\n### Contributing\n\nPull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).\n\n### Contributors\n\n| **Commits** | **Contributor** | \n| --- | --- |\n| 43 | [jonschlinkert](https://github.com/jonschlinkert) |\n| 2 | [lordvlad](https://github.com/lordvlad) |\n| 2 | [hildjj](https://github.com/hildjj) |\n| 1 | [danilosampaio](https://github.com/danilosampaio) |\n| 1 | [2fd](https://github.com/2fd) |\n| 1 | [toddself](https://github.com/toddself) |\n| 1 | [wolfgang42](https://github.com/wolfgang42) |\n| 1 | [zachhale](https://github.com/zachhale) |\n\n### Building docs\n\n_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_\n\nTo generate the readme, run the following command:\n\n```sh\n$ npm install -g verbose/verb#dev verb-generate-readme && verb\n```\n\n### Running tests\n\nRunning and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:\n\n```sh\n$ npm install && npm test\n```\n\n### Author\n\n**Jon Schlinkert**\n\n* [github/jonschlinkert](https://github.com/jonschlinkert)\n* [twitter/jonschlinkert](https://twitter.com/jonschlinkert)\n\n### License\n\nCopyright © 2017, [Jon Schlinkert](https://github.com/jonschlinkert).\nReleased under the [MIT License](LICENSE).\n\n***\n\n_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.6.0, on June 02, 2017._/LICENSE\u0004?The MIT License (MIT)\n\nCopyright (c) 2014-2017, Jon Schlinkert\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/d2N3aWR0aEAxLjAuMQ==",
    "content": "/docs/index.md\f### Javascript porting of Markus Kuhn's wcwidth() implementation\n\nThe following explanation comes from the original C implementation:\n\nThis is an implementation of wcwidth() and wcswidth() (defined in\nIEEE Std 1002.1-2001) for Unicode.\n\nhttp://www.opengroup.org/onlinepubs/007904975/functions/wcwidth.html\nhttp://www.opengroup.org/onlinepubs/007904975/functions/wcswidth.html\n\nIn fixed-width output devices, Latin characters all occupy a single\n\"cell\" position of equal width, whereas ideographic CJK characters\noccupy two such cells. Interoperability between terminal-line\napplications and (teletype-style) character terminals using the\nUTF-8 encoding requires agreement on which character should advance\nthe cursor by how many cell positions. No established formal\nstandards exist at present on which Unicode character shall occupy\nhow many cell positions on character terminals. These routines are\na first attempt of defining such behavior based on simple rules\napplied to data provided by the Unicode Consortium.\n\nFor some graphical characters, the Unicode standard explicitly\ndefines a character-cell width via the definition of the East Asian\nFullWidth (F), Wide (W), Half-width (H), and Narrow (Na) classes.\nIn all these cases, there is no ambiguity about which width a\nterminal shall use. For characters in the East Asian Ambiguous (A)\nclass, the width choice depends purely on a preference of backward\ncompatibility with either historic CJK or Western practice.\nChoosing single-width for these characters is easy to justify as\nthe appropriate long-term solution, as the CJK practice of\ndisplaying these characters as double-width comes from historic\nimplementation simplicity (8-bit encoded characters were displayed\nsingle-width and 16-bit ones double-width, even for Greek,\nCyrillic, etc.) and not any typographic considerations.\n\nMuch less clear is the choice of width for the Not East Asian\n(Neutral) class. Existing practice does not dictate a width for any\nof these characters. It would nevertheless make sense\ntypographically to allocate two character cells to characters such\nas for instance EM SPACE or VOLUME INTEGRAL, which cannot be\nrepresented adequately with a single-width glyph. The following\nroutines at present merely assign a single-cell width to all\nneutral characters, in the interest of simplicity. This is not\nentirely satisfactory and should be reconsidered before\nestablishing a formal standard in this area. At the moment, the\ndecision which Not East Asian (Neutral) characters should be\nrepresented by double-width glyphs cannot yet be answered by\napplying a simple rule from the Unicode database content. Setting\nup a proper standard for the behavior of UTF-8 character terminals\nwill require a careful analysis not only of each Unicode character,\nbut also of each presentation form, something the author of these\nroutines has avoided to do so far.\n\nhttp://www.unicode.org/unicode/reports/tr11/\n\nMarkus Kuhn -- 2007-05-26 (Unicode 5.0)\n\nPermission to use, copy, modify, and distribute this software\nfor any purpose and without fee is hereby granted. The author\ndisclaims all warranties with regard to this software.\n\nLatest version: http://www.cl.cam.ac.uk/~mgk25/ucs/wcwidth.c\n\n\n\n/index.js\fE\"use strict\"\n\nvar defaults = require('defaults')\nvar combining = require('./combining')\n\nvar DEFAULTS = {\n  nul: 0,\n  control: 0\n}\n\nmodule.exports = function wcwidth(str) {\n  return wcswidth(str, DEFAULTS)\n}\n\nmodule.exports.config = function(opts) {\n  opts = defaults(opts || {}, DEFAULTS)\n  return function wcwidth(str) {\n    return wcswidth(str, opts)\n  }\n}\n\n/*\n *  The following functions define the column width of an ISO 10646\n *  character as follows:\n *  - The null character (U+0000) has a column width of 0.\n *  - Other C0/C1 control characters and DEL will lead to a return value\n *    of -1.\n *  - Non-spacing and enclosing combining characters (general category\n *    code Mn or Me in the\n *    Unicode database) have a column width of 0.\n *  - SOFT HYPHEN (U+00AD) has a column width of 1.\n *  - Other format characters (general category code Cf in the Unicode\n *    database) and ZERO WIDTH\n *    SPACE (U+200B) have a column width of 0.\n *  - Hangul Jamo medial vowels and final consonants (U+1160-U+11FF)\n *    have a column width of 0.\n *  - Spacing characters in the East Asian Wide (W) or East Asian\n *    Full-width (F) category as\n *    defined in Unicode Technical Report #11 have a column width of 2.\n *  - All remaining characters (including all printable ISO 8859-1 and\n *    WGL4 characters, Unicode control characters, etc.) have a column\n *    width of 1.\n *  This implementation assumes that characters are encoded in ISO 10646.\n*/\n\nfunction wcswidth(str, opts) {\n  if (typeof str !== 'string') return wcwidth(str, opts)\n\n  var s = 0\n  for (var i = 0; i < str.length; i++) {\n    var n = wcwidth(str.charCodeAt(i), opts)\n    if (n < 0) return -1\n    s += n\n  }\n\n  return s\n}\n\nfunction wcwidth(ucs, opts) {\n  // test for 8-bit control characters\n  if (ucs === 0) return opts.nul\n  if (ucs < 32 || (ucs >= 0x7f && ucs < 0xa0)) return opts.control\n\n  // binary search in table of non-spacing characters\n  if (bisearch(ucs)) return 0\n\n  // if we arrive here, ucs is not a combining or C0/C1 control character\n  return 1 +\n      (ucs >= 0x1100 &&\n       (ucs <= 0x115f ||                       // Hangul Jamo init. consonants\n        ucs == 0x2329 || ucs == 0x232a ||\n        (ucs >= 0x2e80 && ucs <= 0xa4cf &&\n         ucs != 0x303f) ||                     // CJK ... Yi\n        (ucs >= 0xac00 && ucs <= 0xd7a3) ||    // Hangul Syllables\n        (ucs >= 0xf900 && ucs <= 0xfaff) ||    // CJK Compatibility Ideographs\n        (ucs >= 0xfe10 && ucs <= 0xfe19) ||    // Vertical forms\n        (ucs >= 0xfe30 && ucs <= 0xfe6f) ||    // CJK Compatibility Forms\n        (ucs >= 0xff00 && ucs <= 0xff60) ||    // Fullwidth Forms\n        (ucs >= 0xffe0 && ucs <= 0xffe6) ||\n        (ucs >= 0x20000 && ucs <= 0x2fffd) ||\n        (ucs >= 0x30000 && ucs <= 0x3fffd)));\n}\n\nfunction bisearch(ucs) {\n  var min = 0\n  var max = combining.length - 1\n  var mid\n\n  if (ucs < combining[0][0] || ucs > combining[max][1]) return false\n\n  while (max >= min) {\n    mid = Math.floor((min + max) / 2)\n    if (ucs > combining[mid][1]) min = mid + 1\n    else if (ucs < combining[mid][0]) max = mid - 1\n    else return true\n  }\n\n  return false\n}\n/.npmignore\rnode_modules\n/combining.js\f\u0006module.exports = [\n    [ 0x0300, 0x036F ], [ 0x0483, 0x0486 ], [ 0x0488, 0x0489 ],\n    [ 0x0591, 0x05BD ], [ 0x05BF, 0x05BF ], [ 0x05C1, 0x05C2 ],\n    [ 0x05C4, 0x05C5 ], [ 0x05C7, 0x05C7 ], [ 0x0600, 0x0603 ],\n    [ 0x0610, 0x0615 ], [ 0x064B, 0x065E ], [ 0x0670, 0x0670 ],\n    [ 0x06D6, 0x06E4 ], [ 0x06E7, 0x06E8 ], [ 0x06EA, 0x06ED ],\n    [ 0x070F, 0x070F ], [ 0x0711, 0x0711 ], [ 0x0730, 0x074A ],\n    [ 0x07A6, 0x07B0 ], [ 0x07EB, 0x07F3 ], [ 0x0901, 0x0902 ],\n    [ 0x093C, 0x093C ], [ 0x0941, 0x0948 ], [ 0x094D, 0x094D ],\n    [ 0x0951, 0x0954 ], [ 0x0962, 0x0963 ], [ 0x0981, 0x0981 ],\n    [ 0x09BC, 0x09BC ], [ 0x09C1, 0x09C4 ], [ 0x09CD, 0x09CD ],\n    [ 0x09E2, 0x09E3 ], [ 0x0A01, 0x0A02 ], [ 0x0A3C, 0x0A3C ],\n    [ 0x0A41, 0x0A42 ], [ 0x0A47, 0x0A48 ], [ 0x0A4B, 0x0A4D ],\n    [ 0x0A70, 0x0A71 ], [ 0x0A81, 0x0A82 ], [ 0x0ABC, 0x0ABC ],\n    [ 0x0AC1, 0x0AC5 ], [ 0x0AC7, 0x0AC8 ], [ 0x0ACD, 0x0ACD ],\n    [ 0x0AE2, 0x0AE3 ], [ 0x0B01, 0x0B01 ], [ 0x0B3C, 0x0B3C ],\n    [ 0x0B3F, 0x0B3F ], [ 0x0B41, 0x0B43 ], [ 0x0B4D, 0x0B4D ],\n    [ 0x0B56, 0x0B56 ], [ 0x0B82, 0x0B82 ], [ 0x0BC0, 0x0BC0 ],\n    [ 0x0BCD, 0x0BCD ], [ 0x0C3E, 0x0C40 ], [ 0x0C46, 0x0C48 ],\n    [ 0x0C4A, 0x0C4D ], [ 0x0C55, 0x0C56 ], [ 0x0CBC, 0x0CBC ],\n    [ 0x0CBF, 0x0CBF ], [ 0x0CC6, 0x0CC6 ], [ 0x0CCC, 0x0CCD ],\n    [ 0x0CE2, 0x0CE3 ], [ 0x0D41, 0x0D43 ], [ 0x0D4D, 0x0D4D ],\n    [ 0x0DCA, 0x0DCA ], [ 0x0DD2, 0x0DD4 ], [ 0x0DD6, 0x0DD6 ],\n    [ 0x0E31, 0x0E31 ], [ 0x0E34, 0x0E3A ], [ 0x0E47, 0x0E4E ],\n    [ 0x0EB1, 0x0EB1 ], [ 0x0EB4, 0x0EB9 ], [ 0x0EBB, 0x0EBC ],\n    [ 0x0EC8, 0x0ECD ], [ 0x0F18, 0x0F19 ], [ 0x0F35, 0x0F35 ],\n    [ 0x0F37, 0x0F37 ], [ 0x0F39, 0x0F39 ], [ 0x0F71, 0x0F7E ],\n    [ 0x0F80, 0x0F84 ], [ 0x0F86, 0x0F87 ], [ 0x0F90, 0x0F97 ],\n    [ 0x0F99, 0x0FBC ], [ 0x0FC6, 0x0FC6 ], [ 0x102D, 0x1030 ],\n    [ 0x1032, 0x1032 ], [ 0x1036, 0x1037 ], [ 0x1039, 0x1039 ],\n    [ 0x1058, 0x1059 ], [ 0x1160, 0x11FF ], [ 0x135F, 0x135F ],\n    [ 0x1712, 0x1714 ], [ 0x1732, 0x1734 ], [ 0x1752, 0x1753 ],\n    [ 0x1772, 0x1773 ], [ 0x17B4, 0x17B5 ], [ 0x17B7, 0x17BD ],\n    [ 0x17C6, 0x17C6 ], [ 0x17C9, 0x17D3 ], [ 0x17DD, 0x17DD ],\n    [ 0x180B, 0x180D ], [ 0x18A9, 0x18A9 ], [ 0x1920, 0x1922 ],\n    [ 0x1927, 0x1928 ], [ 0x1932, 0x1932 ], [ 0x1939, 0x193B ],\n    [ 0x1A17, 0x1A18 ], [ 0x1B00, 0x1B03 ], [ 0x1B34, 0x1B34 ],\n    [ 0x1B36, 0x1B3A ], [ 0x1B3C, 0x1B3C ], [ 0x1B42, 0x1B42 ],\n    [ 0x1B6B, 0x1B73 ], [ 0x1DC0, 0x1DCA ], [ 0x1DFE, 0x1DFF ],\n    [ 0x200B, 0x200F ], [ 0x202A, 0x202E ], [ 0x2060, 0x2063 ],\n    [ 0x206A, 0x206F ], [ 0x20D0, 0x20EF ], [ 0x302A, 0x302F ],\n    [ 0x3099, 0x309A ], [ 0xA806, 0xA806 ], [ 0xA80B, 0xA80B ],\n    [ 0xA825, 0xA826 ], [ 0xFB1E, 0xFB1E ], [ 0xFE00, 0xFE0F ],\n    [ 0xFE20, 0xFE23 ], [ 0xFEFF, 0xFEFF ], [ 0xFFF9, 0xFFFB ],\n    [ 0x10A01, 0x10A03 ], [ 0x10A05, 0x10A06 ], [ 0x10A0C, 0x10A0F ],\n    [ 0x10A38, 0x10A3A ], [ 0x10A3F, 0x10A3F ], [ 0x1D167, 0x1D169 ],\n    [ 0x1D173, 0x1D182 ], [ 0x1D185, 0x1D18B ], [ 0x1D1AA, 0x1D1AD ],\n    [ 0x1D242, 0x1D244 ], [ 0xE0001, 0xE0001 ], [ 0xE0020, 0xE007F ],\n    [ 0xE0100, 0xE01EF ]\n]\n/LICENSE\u0006-wcwidth.js: JavaScript Portng of Markus Kuhn's wcwidth() Implementation\n=======================================================================\n\nCopyright (C) 2012 by Jun Woong.\n\nThis package is a JavaScript porting of `wcwidth()` implementation\n[by Markus Kuhn](http://www.cl.cam.ac.uk/~mgk25/ucs/wcwidth.c).\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\nof the Software, and to permit persons to whom the Software is furnished to do\nso, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\n\nTHIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,\nINCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR\nOR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\nEXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\nPROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR\nBUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER\nIN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n\n/package.json\u0003T{\n  \"name\": \"wcwidth\",\n  \"version\": \"1.0.1\",\n  \"description\": \"Port of C's wcwidth() and wcswidth()\",\n  \"author\": \"Tim Oxley\",\n  \"contributors\": [\n    \"Woong Jun <woong.jun@gmail.com> (http://code.woong.org/)\"\n  ],\n  \"main\": \"index.js\",\n  \"dependencies\": {\n    \"defaults\": \"^1.0.3\"\n  },\n  \"devDependencies\": {\n    \"tape\": \"^4.5.1\"\n  },\n  \"license\": \"MIT\",\n  \"keywords\": [\n    \"wide character\",\n    \"wc\",\n    \"wide character string\",\n    \"wcs\",\n    \"terminal\",\n    \"width\",\n    \"wcwidth\",\n    \"wcswidth\"\n  ],\n  \"directories\": {\n    \"doc\": \"docs\",\n    \"test\": \"test\"\n  },\n  \"scripts\": {\n    \"test\": \"tape test/*.js\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/timoxley/wcwidth.git\"\n  },\n  \"bugs\": {\n    \"url\": \"https://github.com/timoxley/wcwidth/issues\"\n  },\n  \"homepage\": \"https://github.com/timoxley/wcwidth#readme\"\n}\n/Readme.md\u0003w# wcwidth\n\nDetermine columns needed for a fixed-size wide-character string\n\n----\n\nwcwidth is a simple JavaScript port of [wcwidth](http://man7.org/linux/man-pages/man3/wcswidth.3.html) implemented in C by Markus Kuhn.\n\nJavaScript port [originally](https://github.com/mycoboco/wcwidth.js) written by Woong Jun <woong.jun@gmail.com> (http://code.woong.org/)\n\n## Example\n\n```js\n'한'.length    // => 1\nwcwidth('한');   // => 2\n\n'한글'.length    // => 2\nwcwidth('한글'); // => 4\n```\n\n`wcwidth()` and its string version, `wcswidth()` are defined by IEEE Std\n1002.1-2001, a.k.a. POSIX.1-2001, and return the number of columns used\nto represent the given wide character and string.\n\nMarkus's implementation assumes the wide character given to those\nfunctions to be encoded in ISO 10646, which is almost true for\nJavaScript's characters.\n\n[Further explaination here](docs)\n\n## License\n\nMIT\n/test/index.js\u0005\"use strict\"\n\nvar wcwidth = require('../')\nvar test = require('tape')\n\ntest('handles regular strings', function(t) {\n  t.strictEqual(wcwidth('abc'), 3)\n  t.end()\n})\n\ntest('handles multibyte strings', function(t) {\n  t.strictEqual(wcwidth('字的模块'), 8)\n  t.end()\n})\n\ntest('handles multibyte characters mixed with regular characters', function(t) {\n  t.strictEqual(wcwidth('abc 字的模块'), 12)\n  t.end()\n})\n\ntest('ignores control characters e.g. \\\\n', function(t) {\n  t.strictEqual(wcwidth('abc\\n字的模块\\ndef'), 14)\n  t.end()\n})\n\ntest('ignores bad input', function(t) {\n  t.strictEqual(wcwidth(''), 0)\n  t.strictEqual(wcwidth(3), 0)\n  t.strictEqual(wcwidth({}), 0)\n  t.strictEqual(wcwidth([]), 0)\n  t.strictEqual(wcwidth(), 0)\n  t.end()\n})\n\ntest('ignores nul (charcode 0)', function(t) {\n  t.strictEqual(wcwidth(String.fromCharCode(0)), 0)\n  t.end()\n})\n\ntest('ignores nul mixed with chars', function(t) {\n  t.strictEqual(wcwidth('a' + String.fromCharCode(0) + '\\n字的'), 5)\n  t.end()\n})\n\ntest('can have custom value for nul', function(t) {\n  t.strictEqual(wcwidth.config({\n    nul: 10\n  })(String.fromCharCode(0) + 'a字的'), 15)\n  t.end()\n})\n\ntest('can have custom control char value', function(t) {\n  t.strictEqual(wcwidth.config({\n    control: 1\n  })('abc\\n字的模块\\ndef'), 16)\n  t.end()\n})\n\ntest('negative custom control chars == -1', function(t) {\n  t.strictEqual(wcwidth.config({\n    control: -1\n  })('abc\\n字的模块\\ndef'), -1)\n  t.end()\n})\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/d2ViaWRsLWNvbnZlcnNpb25zQDMuMC4x",
    "content": "/README.md\u0015h# WebIDL Type Conversions on JavaScript Values\n\nThis package implements, in JavaScript, the algorithms to convert a given JavaScript value according to a given [WebIDL](http://heycam.github.io/webidl/) [type](http://heycam.github.io/webidl/#idl-types).\n\nThe goal is that you should be able to write code like\n\n```js\nconst conversions = require(\"webidl-conversions\");\n\nfunction doStuff(x, y) {\n    x = conversions[\"boolean\"](x);\n    y = conversions[\"unsigned long\"](y);\n    // actual algorithm code here\n}\n```\n\nand your function `doStuff` will behave the same as a WebIDL operation declared as\n\n```webidl\nvoid doStuff(boolean x, unsigned long y);\n```\n\n## API\n\nThis package's main module's default export is an object with a variety of methods, each corresponding to a different WebIDL type. Each method, when invoked on a JavaScript value, will give back the new JavaScript value that results after passing through the WebIDL conversion rules. (See below for more details on what that means.) Alternately, the method could throw an error, if the WebIDL algorithm is specified to do so: for example `conversions[\"float\"](NaN)` [will throw a `TypeError`](http://heycam.github.io/webidl/#es-float).\n\n## Status\n\nAll of the numeric types are implemented (float being implemented as double) and some others are as well - check the source for all of them. This list will grow over time in service of the [HTML as Custom Elements](https://github.com/dglazkov/html-as-custom-elements) project, but in the meantime, pull requests welcome!\n\nI'm not sure yet what the strategy will be for modifiers, e.g. [`[Clamp]`](http://heycam.github.io/webidl/#Clamp). Maybe something like `conversions[\"unsigned long\"](x, { clamp: true })`? We'll see.\n\nWe might also want to extend the API to give better error messages, e.g. \"Argument 1 of HTMLMediaElement.fastSeek is not a finite floating-point value\" instead of \"Argument is not a finite floating-point value.\" This would require passing in more information to the conversion functions than we currently do.\n\n## Background\n\nWhat's actually going on here, conceptually, is pretty weird. Let's try to explain.\n\nWebIDL, as part of its madness-inducing design, has its own type system. When people write algorithms in web platform specs, they usually operate on WebIDL values, i.e. instances of WebIDL types. For example, if they were specifying the algorithm for our `doStuff` operation above, they would treat `x` as a WebIDL value of [WebIDL type `boolean`](http://heycam.github.io/webidl/#idl-boolean). Crucially, they would _not_ treat `x` as a JavaScript variable whose value is either the JavaScript `true` or `false`. They're instead working in a different type system altogether, with its own rules.\n\nSeparately from its type system, WebIDL defines a [\"binding\"](http://heycam.github.io/webidl/#ecmascript-binding) of the type system into JavaScript. This contains rules like: when you pass a JavaScript value to the JavaScript method that manifests a given WebIDL operation, how does that get converted into a WebIDL value? For example, a JavaScript `true` passed in the position of a WebIDL `boolean` argument becomes a WebIDL `true`. But, a JavaScript `true` passed in the position of a [WebIDL `unsigned long`](http://heycam.github.io/webidl/#idl-unsigned-long) becomes a WebIDL `1`. And so on.\n\nFinally, we have the actual implementation code. This is usually C++, although these days [some smart people are using Rust](https://github.com/servo/servo). The implementation, of course, has its own type system. So when they implement the WebIDL algorithms, they don't actually use WebIDL values, since those aren't \"real\" outside of specs. Instead, implementations apply the WebIDL binding rules in such a way as to convert incoming JavaScript values into C++ values. For example, if code in the browser called `doStuff(true, true)`, then the implementation code would eventually receive a C++ `bool` containing `true` and a C++ `uint32_t` containing `1`.\n\nThe upside of all this is that implementations can abstract all the conversion logic away, letting WebIDL handle it, and focus on implementing the relevant methods in C++ with values of the correct type already provided. That is payoff of WebIDL, in a nutshell.\n\nAnd getting to that payoff is the goal of _this_ project—but for JavaScript implementations, instead of C++ ones. That is, this library is designed to make it easier for JavaScript developers to write functions that behave like a given WebIDL operation. So conceptually, the conversion pipeline, which in its general form is JavaScript values ↦ WebIDL values ↦ implementation-language values, in this case becomes JavaScript values ↦ WebIDL values ↦ JavaScript values. And that intermediate step is where all the logic is performed: a JavaScript `true` becomes a WebIDL `1` in an unsigned long context, which then becomes a JavaScript `1`.\n\n## Don't Use This\n\nSeriously, why would you ever use this? You really shouldn't. WebIDL is … not great, and you shouldn't be emulating its semantics. If you're looking for a generic argument-processing library, you should find one with better rules than those from WebIDL. In general, your JavaScript should not be trying to become more like WebIDL; if anything, we should fix WebIDL to make it more like JavaScript.\n\nThe _only_ people who should use this are those trying to create faithful implementations (or polyfills) of web platform interfaces defined in WebIDL.\n/lib/index.js\u0013\"use strict\";\n\nvar conversions = {};\nmodule.exports = conversions;\n\nfunction sign(x) {\n    return x < 0 ? -1 : 1;\n}\n\nfunction evenRound(x) {\n    // Round x to the nearest integer, choosing the even integer if it lies halfway between two.\n    if ((x % 1) === 0.5 && (x & 1) === 0) { // [even number].5; round down (i.e. floor)\n        return Math.floor(x);\n    } else {\n        return Math.round(x);\n    }\n}\n\nfunction createNumberConversion(bitLength, typeOpts) {\n    if (!typeOpts.unsigned) {\n        --bitLength;\n    }\n    const lowerBound = typeOpts.unsigned ? 0 : -Math.pow(2, bitLength);\n    const upperBound = Math.pow(2, bitLength) - 1;\n\n    const moduloVal = typeOpts.moduloBitLength ? Math.pow(2, typeOpts.moduloBitLength) : Math.pow(2, bitLength);\n    const moduloBound = typeOpts.moduloBitLength ? Math.pow(2, typeOpts.moduloBitLength - 1) : Math.pow(2, bitLength - 1);\n\n    return function(V, opts) {\n        if (!opts) opts = {};\n\n        let x = +V;\n\n        if (opts.enforceRange) {\n            if (!Number.isFinite(x)) {\n                throw new TypeError(\"Argument is not a finite number\");\n            }\n\n            x = sign(x) * Math.floor(Math.abs(x));\n            if (x < lowerBound || x > upperBound) {\n                throw new TypeError(\"Argument is not in byte range\");\n            }\n\n            return x;\n        }\n\n        if (!isNaN(x) && opts.clamp) {\n            x = evenRound(x);\n\n            if (x < lowerBound) x = lowerBound;\n            if (x > upperBound) x = upperBound;\n            return x;\n        }\n\n        if (!Number.isFinite(x) || x === 0) {\n            return 0;\n        }\n\n        x = sign(x) * Math.floor(Math.abs(x));\n        x = x % moduloVal;\n\n        if (!typeOpts.unsigned && x >= moduloBound) {\n            return x - moduloVal;\n        } else if (typeOpts.unsigned) {\n            if (x < 0) {\n              x += moduloVal;\n            } else if (x === -0) { // don't return negative zero\n              return 0;\n            }\n        }\n\n        return x;\n    }\n}\n\nconversions[\"void\"] = function () {\n    return undefined;\n};\n\nconversions[\"boolean\"] = function (val) {\n    return !!val;\n};\n\nconversions[\"byte\"] = createNumberConversion(8, { unsigned: false });\nconversions[\"octet\"] = createNumberConversion(8, { unsigned: true });\n\nconversions[\"short\"] = createNumberConversion(16, { unsigned: false });\nconversions[\"unsigned short\"] = createNumberConversion(16, { unsigned: true });\n\nconversions[\"long\"] = createNumberConversion(32, { unsigned: false });\nconversions[\"unsigned long\"] = createNumberConversion(32, { unsigned: true });\n\nconversions[\"long long\"] = createNumberConversion(32, { unsigned: false, moduloBitLength: 64 });\nconversions[\"unsigned long long\"] = createNumberConversion(32, { unsigned: true, moduloBitLength: 64 });\n\nconversions[\"double\"] = function (V) {\n    const x = +V;\n\n    if (!Number.isFinite(x)) {\n        throw new TypeError(\"Argument is not a finite floating-point value\");\n    }\n\n    return x;\n};\n\nconversions[\"unrestricted double\"] = function (V) {\n    const x = +V;\n\n    if (isNaN(x)) {\n        throw new TypeError(\"Argument is NaN\");\n    }\n\n    return x;\n};\n\n// not quite valid, but good enough for JS\nconversions[\"float\"] = conversions[\"double\"];\nconversions[\"unrestricted float\"] = conversions[\"unrestricted double\"];\n\nconversions[\"DOMString\"] = function (V, opts) {\n    if (!opts) opts = {};\n\n    if (opts.treatNullAsEmptyString && V === null) {\n        return \"\";\n    }\n\n    return String(V);\n};\n\nconversions[\"ByteString\"] = function (V, opts) {\n    const x = String(V);\n    let c = undefined;\n    for (let i = 0; (c = x.codePointAt(i)) !== undefined; ++i) {\n        if (c > 255) {\n            throw new TypeError(\"Argument is not a valid bytestring\");\n        }\n    }\n\n    return x;\n};\n\nconversions[\"USVString\"] = function (V) {\n    const S = String(V);\n    const n = S.length;\n    const U = [];\n    for (let i = 0; i < n; ++i) {\n        const c = S.charCodeAt(i);\n        if (c < 0xD800 || c > 0xDFFF) {\n            U.push(String.fromCodePoint(c));\n        } else if (0xDC00 <= c && c <= 0xDFFF) {\n            U.push(String.fromCodePoint(0xFFFD));\n        } else {\n            if (i === n - 1) {\n                U.push(String.fromCodePoint(0xFFFD));\n            } else {\n                const d = S.charCodeAt(i + 1);\n                if (0xDC00 <= d && d <= 0xDFFF) {\n                    const a = c & 0x3FF;\n                    const b = d & 0x3FF;\n                    U.push(String.fromCodePoint((2 << 15) + (2 << 9) * a + b));\n                    ++i;\n                } else {\n                    U.push(String.fromCodePoint(0xFFFD));\n                }\n            }\n        }\n    }\n\n    return U.join('');\n};\n\nconversions[\"Date\"] = function (V, opts) {\n    if (!(V instanceof Date)) {\n        throw new TypeError(\"Argument is not a Date object\");\n    }\n    if (isNaN(V)) {\n        return undefined;\n    }\n\n    return V;\n};\n\nconversions[\"RegExp\"] = function (V, opts) {\n    if (!(V instanceof RegExp)) {\n        V = new RegExp(V);\n    }\n\n    return V;\n};\n/package.json\u0001{\n  \"name\": \"webidl-conversions\",\n  \"version\": \"3.0.1\",\n  \"description\": \"Implements the WebIDL algorithms for converting to and from JavaScript values\",\n  \"main\": \"lib/index.js\",\n  \"scripts\": {\n    \"test\": \"mocha test/*.js\"\n  },\n  \"repository\": \"jsdom/webidl-conversions\",\n  \"keywords\": [\n    \"webidl\",\n    \"web\",\n    \"types\"\n  ],\n  \"files\": [\n    \"lib/\"\n  ],\n  \"author\": \"Domenic Denicola <d@domenic.me> (https://domenic.me/)\",\n  \"license\": \"BSD-2-Clause\",\n  \"devDependencies\": {\n    \"mocha\": \"^1.21.4\"\n  }\n}\n/LICENSE.md\u0005+# The BSD 2-Clause License\n\nCopyright (c) 2014, Domenic Denicola\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\n\n1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/d2hhdHdnLW1pbWV0eXBlQDMuMC4w",
    "content": "/lib/serializer.js\u0002X\"use strict\";\nconst { solelyContainsHTTPTokenCodePoints } = require(\"./utils.js\");\n\nmodule.exports = mimeType => {\n  let serialization = `${mimeType.type}/${mimeType.subtype}`;\n\n  if (mimeType.parameters.size === 0) {\n    return serialization;\n  }\n\n  for (let [name, value] of mimeType.parameters) {\n    serialization += \";\";\n    serialization += name;\n    serialization += \"=\";\n\n    if (!solelyContainsHTTPTokenCodePoints(value) || value.length === 0) {\n      value = value.replace(/([\"\\\\])/ug, \"\\\\$1\");\n      value = `\"${value}\"`;\n    }\n\n    serialization += value;\n  }\n\n  return serialization;\n};\n/lib/parser.js\t\"use strict\";\nconst {\n  removeLeadingAndTrailingHTTPWhitespace,\n  removeTrailingHTTPWhitespace,\n  isHTTPWhitespaceChar,\n  solelyContainsHTTPTokenCodePoints,\n  soleyContainsHTTPQuotedStringTokenCodePoints,\n  asciiLowercase,\n  collectAnHTTPQuotedString\n} = require(\"./utils.js\");\n\nmodule.exports = input => {\n  input = removeLeadingAndTrailingHTTPWhitespace(input);\n\n  let position = 0;\n  let type = \"\";\n  while (position < input.length && input[position] !== \"/\") {\n    type += input[position];\n    ++position;\n  }\n\n  if (type.length === 0 || !solelyContainsHTTPTokenCodePoints(type)) {\n    return null;\n  }\n\n  if (position >= input.length) {\n    return null;\n  }\n\n  // Skips past \"/\"\n  ++position;\n\n  let subtype = \"\";\n  while (position < input.length && input[position] !== \";\") {\n    subtype += input[position];\n    ++position;\n  }\n\n  subtype = removeTrailingHTTPWhitespace(subtype);\n\n  if (subtype.length === 0 || !solelyContainsHTTPTokenCodePoints(subtype)) {\n    return null;\n  }\n\n  const mimeType = {\n    type: asciiLowercase(type),\n    subtype: asciiLowercase(subtype),\n    parameters: new Map()\n  };\n\n  while (position < input.length) {\n    // Skip past \";\"\n    ++position;\n\n    while (isHTTPWhitespaceChar(input[position])) {\n      ++position;\n    }\n\n    let parameterName = \"\";\n    while (position < input.length && input[position] !== \";\" && input[position] !== \"=\") {\n      parameterName += input[position];\n      ++position;\n    }\n    parameterName = asciiLowercase(parameterName);\n\n    if (position < input.length) {\n      if (input[position] === \";\") {\n        continue;\n      }\n\n      // Skip past \"=\"\n      ++position;\n    }\n\n    let parameterValue = null;\n    if (input[position] === \"\\\"\") {\n      [parameterValue, position] = collectAnHTTPQuotedString(input, position);\n\n      while (position < input.length && input[position] !== \";\") {\n        ++position;\n      }\n    } else {\n      parameterValue = \"\";\n      while (position < input.length && input[position] !== \";\") {\n        parameterValue += input[position];\n        ++position;\n      }\n\n      parameterValue = removeTrailingHTTPWhitespace(parameterValue);\n\n      if (parameterValue === \"\") {\n        continue;\n      }\n    }\n\n    if (parameterName.length > 0 &&\n        solelyContainsHTTPTokenCodePoints(parameterName) &&\n        soleyContainsHTTPQuotedStringTokenCodePoints(parameterValue) &&\n        !mimeType.parameters.has(parameterName)) {\n      mimeType.parameters.set(parameterName, parameterValue);\n    }\n  }\n\n  return mimeType;\n};\n/lib/utils.js\u0005~\"use strict\";\n\nexports.removeLeadingAndTrailingHTTPWhitespace = string => {\n  return string.replace(/^[ \\t\\n\\r]+/u, \"\").replace(/[ \\t\\n\\r]+$/u, \"\");\n};\n\nexports.removeTrailingHTTPWhitespace = string => {\n  return string.replace(/[ \\t\\n\\r]+$/u, \"\");\n};\n\nexports.isHTTPWhitespaceChar = char => {\n  return char === \" \" || char === \"\\t\" || char === \"\\n\" || char === \"\\r\";\n};\n\nexports.solelyContainsHTTPTokenCodePoints = string => {\n  return /^[-!#$%&'*+.^_`|~A-Za-z0-9]*$/u.test(string);\n};\n\nexports.soleyContainsHTTPQuotedStringTokenCodePoints = string => {\n  return /^[\\t\\u0020-\\u007E\\u0080-\\u00FF]*$/u.test(string);\n};\n\nexports.asciiLowercase = string => {\n  return string.replace(/[A-Z]/ug, l => l.toLowerCase());\n};\n\n// This variant only implements it with the extract-value flag set.\nexports.collectAnHTTPQuotedString = (input, position) => {\n  let value = \"\";\n\n  position++;\n\n  while (true) {\n    while (position < input.length && input[position] !== \"\\\"\" && input[position] !== \"\\\\\") {\n      value += input[position];\n      ++position;\n    }\n\n    if (position >= input.length) {\n      break;\n    }\n\n    const quoteOrBackslash = input[position];\n    ++position;\n\n    if (quoteOrBackslash === \"\\\\\") {\n      if (position >= input.length) {\n        value += \"\\\\\";\n        break;\n      }\n\n      value += input[position];\n      ++position;\n    } else {\n      break;\n    }\n  }\n\n  return [value, position];\n};\n/lib/mime-type-parameters.js\u0005\"use strict\";\nconst {\n  asciiLowercase,\n  solelyContainsHTTPTokenCodePoints,\n  soleyContainsHTTPQuotedStringTokenCodePoints\n} = require(\"./utils.js\");\n\nmodule.exports = class MIMETypeParameters {\n  constructor(map) {\n    this._map = map;\n  }\n\n  get size() {\n    return this._map.size;\n  }\n\n  get(name) {\n    name = asciiLowercase(String(name));\n    return this._map.get(name);\n  }\n\n  has(name) {\n    name = asciiLowercase(String(name));\n    return this._map.has(name);\n  }\n\n  set(name, value) {\n    name = asciiLowercase(String(name));\n    value = String(value);\n\n    if (!solelyContainsHTTPTokenCodePoints(name)) {\n      throw new Error(`Invalid MIME type parameter name \"${name}\": only HTTP token code points are valid.`);\n    }\n    if (!soleyContainsHTTPQuotedStringTokenCodePoints(value)) {\n      throw new Error(`Invalid MIME type parameter value \"${value}\": only HTTP quoted-string token code points are ` +\n                      `valid.`);\n    }\n\n    return this._map.set(name, value);\n  }\n\n  clear() {\n    this._map.clear();\n  }\n\n  delete(name) {\n    name = asciiLowercase(String(name));\n    return this._map.delete(name);\n  }\n\n  forEach(callbackFn, thisArg) {\n    this._map.forEach(callbackFn, thisArg);\n  }\n\n  keys() {\n    return this._map.keys();\n  }\n\n  values() {\n    return this._map.values();\n  }\n\n  entries() {\n    return this._map.entries();\n  }\n\n  [Symbol.iterator]() {\n    return this._map[Symbol.iterator]();\n  }\n};\n/LICENSE.txt\u0004-Copyright © Domenic Denicola <d@domenic.me>\n\nPermission 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:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE 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.\n/README.md\u0015# Parse, serialize, and manipulate MIME types\n\nThis package will parse [MIME types](https://mimesniff.spec.whatwg.org/#understanding-mime-types) into a structured format, which can then be manipulated and serialized:\n\n```js\nconst MIMEType = require(\"whatwg-mimetype\");\n\nconst mimeType = new MIMEType(`Text/HTML;Charset=\"utf-8\"`);\n\nconsole.assert(mimeType.toString() === \"text/html;charset=utf-8\");\n\nconsole.assert(mimeType.type === \"text\");\nconsole.assert(mimeType.subtype === \"html\");\nconsole.assert(mimeType.essence === \"text/html\");\nconsole.assert(mimeType.parameters.get(\"charset\") === \"utf-8\");\n\nmimeType.parameters.set(\"charset\", \"windows-1252\");\nconsole.assert(mimeType.parameters.get(\"charset\") === \"windows-1252\");\nconsole.assert(mimeType.toString() === \"text/html;charset=windows-1252\");\n\nconsole.assert(mimeType.isHTML() === true);\nconsole.assert(mimeType.isXML() === false);\n```\n\nParsing is a fairly complex process; see [the specification](https://mimesniff.spec.whatwg.org/#parsing-a-mime-type) for details (and similarly [for serialization](https://mimesniff.spec.whatwg.org/#serializing-a-mime-type)).\n\nThis package's algorithms conform to those of the WHATWG [MIME Sniffing Standard](https://mimesniff.spec.whatwg.org/), and is aligned up to commit [8e9a7dd](https://github.com/whatwg/mimesniff/commit/8e9a7dd90717c595a4e4d982cd216e4411d33736).\n\n## `MIMEType` API\n\nThis package's main module's default export is a class, `MIMEType`. Its constructor takes a string which it will attempt to parse into a MIME type; if parsing fails, an `Error` will be thrown.\n\n### The `parse()` static factory method\n\nAs an alternative to the constructor, you can use `MIMEType.parse(string)`. The only difference is that `parse()` will return `null` on failed parsing, whereas the constructor will throw. It thus makes the most sense to use the constructor in cases where unparseable MIME types would be exceptional, and use `parse()` when dealing with input from some unconstrained source.\n\n### Properties\n\n- `type`: the MIME type's [type](https://mimesniff.spec.whatwg.org/#mime-type-type), e.g. `\"text\"`\n- `subtype`: the MIME type's [subtype](https://mimesniff.spec.whatwg.org/#mime-type-subtype), e.g. `\"html\"`\n- `essence`: the MIME type's [essence](https://mimesniff.spec.whatwg.org/#mime-type-essence), e.g. `\"text/html\"`\n- `parameters`: an instance of `MIMETypeParameters`, containing this MIME type's [parameters](https://mimesniff.spec.whatwg.org/#mime-type-parameters)\n\n`type` and `subtype` can be changed. They will be validated to be non-empty and only contain [HTTP token code points](https://mimesniff.spec.whatwg.org/#http-token-code-point).\n\n`essence` is only a getter, and cannot be changed.\n\n`parameters` is also a getter, but the contents of the `MIMETypeParameters` object are mutable, as described below.\n\n### Methods\n\n- `toString()` serializes the MIME type to a string\n- `isHTML()`: returns true if this instance represents [a HTML MIME type](https://mimesniff.spec.whatwg.org/#html-mime-type)\n- `isXML()`: returns true if this instance represents [an XML MIME type](https://mimesniff.spec.whatwg.org/#xml-mime-type)\n- `isJavaScript({ prohibitParameters })`: returns true if this instance represents [a JavaScript MIME type](https://html.spec.whatwg.org/multipage/scripting.html#javascript-mime-type). `prohibitParameters` can be set to true to disallow any parameters, i.e. to test if the MIME type's serialization is a [JavaScript MIME type essence match](https://mimesniff.spec.whatwg.org/#javascript-mime-type-essence-match).\n\n_Note: the `isHTML()`, `isXML()`, and `isJavaScript()` methods are speculative, and may be removed or changed in future major versions. See [whatwg/mimesniff#48](https://github.com/whatwg/mimesniff/issues/48) for brainstorming in this area. Currently we implement these mainly because they are useful in jsdom._\n\n## `MIMETypeParameters` API\n\nThe `MIMETypeParameters` class, instances of which are returned by `mimeType.parameters`, has equivalent surface API to a [JavaScript `Map`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map).\n\nHowever, `MIMETypeParameters` methods will always interpret their arguments as appropriate for MIME types, so e.g. parameter names will be lowercased, and attempting to set invalid characters will throw.\n\nSome examples:\n\n```js\nconst mimeType = new MIMEType(`x/x;a=b;c=D;E=\"F\"`);\n\n// Logs:\n// a b\n// c D\n// e F\nfor (const [name, value] of mimeType.parameters) {\n  console.log(name, value);\n}\n\nconsole.assert(mimeType.parameters.has(\"a\"));\nconsole.assert(mimeType.parameters.has(\"A\"));\nconsole.assert(mimeType.parameters.get(\"A\") === \"b\");\n\nmimeType.parameters.set(\"Q\", \"X\");\nconsole.assert(mimeType.parameters.get(\"q\") === \"X\");\nconsole.assert(mimeType.toString() === \"x/x;a=b;c=d;e=F;q=X\");\n\n// Throws:\nmimeType.parameters.set(\"@\", \"x\");\n```\n\n## Raw parsing/serialization APIs\n\nIf you want primitives on which to build your own API, you can get direct access to the parsing and serialization algorithms as follows:\n\n```js\nconst parse = require(\"whatwg-mimetype/parser\");\nconst serialize = require(\"whatwg-mimetype/serialize\");\n```\n\n`parse(string)` returns an object containing the `type` and `subtype` strings, plus `parameters`, which is a `Map`. This is roughly our equivalent of the spec's [MIME type record](https://mimesniff.spec.whatwg.org/#mime-type). If parsing fails, it instead returns `null`.\n\n`serialize(record)` operates on the such an object, giving back a string according to the serialization algorithm.\n/lib/mime-type.js\fW\"use strict\";\nconst MIMETypeParameters = require(\"./mime-type-parameters.js\");\nconst parse = require(\"./parser.js\");\nconst serialize = require(\"./serializer.js\");\nconst {\n  asciiLowercase,\n  solelyContainsHTTPTokenCodePoints\n} = require(\"./utils.js\");\n\nmodule.exports = class MIMEType {\n  constructor(string) {\n    string = String(string);\n    const result = parse(string);\n    if (result === null) {\n      throw new Error(`Could not parse MIME type string \"${string}\"`);\n    }\n\n    this._type = result.type;\n    this._subtype = result.subtype;\n    this._parameters = new MIMETypeParameters(result.parameters);\n  }\n\n  static parse(string) {\n    try {\n      return new this(string);\n    } catch (e) {\n      return null;\n    }\n  }\n\n  get essence() {\n    return `${this.type}/${this.subtype}`;\n  }\n\n  get type() {\n    return this._type;\n  }\n\n  set type(value) {\n    value = asciiLowercase(String(value));\n\n    if (value.length === 0) {\n      throw new Error(\"Invalid type: must be a non-empty string\");\n    }\n    if (!solelyContainsHTTPTokenCodePoints(value)) {\n      throw new Error(`Invalid type ${value}: must contain only HTTP token code points`);\n    }\n\n    this._type = value;\n  }\n\n  get subtype() {\n    return this._subtype;\n  }\n\n  set subtype(value) {\n    value = asciiLowercase(String(value));\n\n    if (value.length === 0) {\n      throw new Error(\"Invalid subtype: must be a non-empty string\");\n    }\n    if (!solelyContainsHTTPTokenCodePoints(value)) {\n      throw new Error(`Invalid subtype ${value}: must contain only HTTP token code points`);\n    }\n\n    this._subtype = value;\n  }\n\n  get parameters() {\n    return this._parameters;\n  }\n\n  toString() {\n    // The serialize function works on both \"MIME type records\" (i.e. the results of parse) and on this class, since\n    // this class's interface is identical.\n    return serialize(this);\n  }\n\n  isJavaScript({ prohibitParameters = false } = {}) {\n    switch (this._type) {\n      case \"text\": {\n        switch (this._subtype) {\n          case \"ecmascript\":\n          case \"javascript\":\n          case \"javascript1.0\":\n          case \"javascript1.1\":\n          case \"javascript1.2\":\n          case \"javascript1.3\":\n          case \"javascript1.4\":\n          case \"javascript1.5\":\n          case \"jscript\":\n          case \"livescript\":\n          case \"x-ecmascript\":\n          case \"x-javascript\": {\n            return !prohibitParameters || this._parameters.size === 0;\n          }\n          default: {\n            return false;\n          }\n        }\n      }\n      case \"application\": {\n        switch (this._subtype) {\n          case \"ecmascript\":\n          case \"javascript\":\n          case \"x-ecmascript\":\n          case \"x-javascript\": {\n            return !prohibitParameters || this._parameters.size === 0;\n          }\n          default: {\n            return false;\n          }\n        }\n      }\n      default: {\n        return false;\n      }\n    }\n  }\n  isXML() {\n    return (this._subtype === \"xml\" && (this._type === \"text\" || this._type === \"application\")) ||\n           this._subtype.endsWith(\"+xml\");\n  }\n  isHTML() {\n    return this._subtype === \"html\" && this._type === \"text\";\n  }\n};\n/package.json\u00047{\n  \"name\": \"whatwg-mimetype\",\n  \"description\": \"Parses, serializes, and manipulates MIME types, according to the WHATWG MIME Sniffing Standard\",\n  \"keywords\": [\n    \"content-type\",\n    \"mime type\",\n    \"mimesniff\",\n    \"http\",\n    \"whatwg\"\n  ],\n  \"version\": \"3.0.0\",\n  \"author\": \"Domenic Denicola <d@domenic.me> (https://domenic.me/)\",\n  \"license\": \"MIT\",\n  \"repository\": \"jsdom/whatwg-mimetype\",\n  \"main\": \"lib/mime-type.js\",\n  \"files\": [\n    \"lib/\"\n  ],\n  \"scripts\": {\n    \"test\": \"jest\",\n    \"coverage\": \"jest --coverage\",\n    \"lint\": \"eslint .\",\n    \"pretest\": \"node scripts/get-latest-platform-tests.js\"\n  },\n  \"devDependencies\": {\n    \"@domenic/eslint-config\": \"^1.4.0\",\n    \"eslint\": \"^7.32.0\",\n    \"jest\": \"^27.2.0\",\n    \"minipass-fetch\": \"^1.4.1\",\n    \"printable-string\": \"^0.3.0\",\n    \"whatwg-encoding\": \"^2.0.0\"\n  },\n  \"engines\": {\n    \"node\": \">=12\"\n  },\n  \"jest\": {\n    \"coverageDirectory\": \"coverage\",\n    \"coverageReporters\": [\n      \"lcov\",\n      \"text-summary\"\n    ],\n    \"testEnvironment\": \"node\",\n    \"testMatch\": [\n      \"<rootDir>/test/**/*.js\"\n    ]\n  }\n}\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/d2hhdHdnLXVybEA1LjAuMA==",
    "content": "/lib/url-state-machine.jsŃ%\"use strict\";\r\nconst punycode = require(\"punycode\");\r\nconst tr46 = require(\"tr46\");\r\n\r\nconst specialSchemes = {\r\n  ftp: 21,\r\n  file: null,\r\n  gopher: 70,\r\n  http: 80,\r\n  https: 443,\r\n  ws: 80,\r\n  wss: 443\r\n};\r\n\r\nconst failure = Symbol(\"failure\");\r\n\r\nfunction countSymbols(str) {\r\n  return punycode.ucs2.decode(str).length;\r\n}\r\n\r\nfunction at(input, idx) {\r\n  const c = input[idx];\r\n  return isNaN(c) ? undefined : String.fromCodePoint(c);\r\n}\r\n\r\nfunction isASCIIDigit(c) {\r\n  return c >= 0x30 && c <= 0x39;\r\n}\r\n\r\nfunction isASCIIAlpha(c) {\r\n  return (c >= 0x41 && c <= 0x5A) || (c >= 0x61 && c <= 0x7A);\r\n}\r\n\r\nfunction isASCIIAlphanumeric(c) {\r\n  return isASCIIAlpha(c) || isASCIIDigit(c);\r\n}\r\n\r\nfunction isASCIIHex(c) {\r\n  return isASCIIDigit(c) || (c >= 0x41 && c <= 0x46) || (c >= 0x61 && c <= 0x66);\r\n}\r\n\r\nfunction isSingleDot(buffer) {\r\n  return buffer === \".\" || buffer.toLowerCase() === \"%2e\";\r\n}\r\n\r\nfunction isDoubleDot(buffer) {\r\n  buffer = buffer.toLowerCase();\r\n  return buffer === \"..\" || buffer === \"%2e.\" || buffer === \".%2e\" || buffer === \"%2e%2e\";\r\n}\r\n\r\nfunction isWindowsDriveLetterCodePoints(cp1, cp2) {\r\n  return isASCIIAlpha(cp1) && (cp2 === 58 || cp2 === 124);\r\n}\r\n\r\nfunction isWindowsDriveLetterString(string) {\r\n  return string.length === 2 && isASCIIAlpha(string.codePointAt(0)) && (string[1] === \":\" || string[1] === \"|\");\r\n}\r\n\r\nfunction isNormalizedWindowsDriveLetterString(string) {\r\n  return string.length === 2 && isASCIIAlpha(string.codePointAt(0)) && string[1] === \":\";\r\n}\r\n\r\nfunction containsForbiddenHostCodePoint(string) {\r\n  return string.search(/\\u0000|\\u0009|\\u000A|\\u000D|\\u0020|#|%|\\/|:|\\?|@|\\[|\\\\|\\]/) !== -1;\r\n}\r\n\r\nfunction containsForbiddenHostCodePointExcludingPercent(string) {\r\n  return string.search(/\\u0000|\\u0009|\\u000A|\\u000D|\\u0020|#|\\/|:|\\?|@|\\[|\\\\|\\]/) !== -1;\r\n}\r\n\r\nfunction isSpecialScheme(scheme) {\r\n  return specialSchemes[scheme] !== undefined;\r\n}\r\n\r\nfunction isSpecial(url) {\r\n  return isSpecialScheme(url.scheme);\r\n}\r\n\r\nfunction defaultPort(scheme) {\r\n  return specialSchemes[scheme];\r\n}\r\n\r\nfunction percentEncode(c) {\r\n  let hex = c.toString(16).toUpperCase();\r\n  if (hex.length === 1) {\r\n    hex = \"0\" + hex;\r\n  }\r\n\r\n  return \"%\" + hex;\r\n}\r\n\r\nfunction utf8PercentEncode(c) {\r\n  const buf = new Buffer(c);\r\n\r\n  let str = \"\";\r\n\r\n  for (let i = 0; i < buf.length; ++i) {\r\n    str += percentEncode(buf[i]);\r\n  }\r\n\r\n  return str;\r\n}\r\n\r\nfunction utf8PercentDecode(str) {\r\n  const input = new Buffer(str);\r\n  const output = [];\r\n  for (let i = 0; i < input.length; ++i) {\r\n    if (input[i] !== 37) {\r\n      output.push(input[i]);\r\n    } else if (input[i] === 37 && isASCIIHex(input[i + 1]) && isASCIIHex(input[i + 2])) {\r\n      output.push(parseInt(input.slice(i + 1, i + 3).toString(), 16));\r\n      i += 2;\r\n    } else {\r\n      output.push(input[i]);\r\n    }\r\n  }\r\n  return new Buffer(output).toString();\r\n}\r\n\r\nfunction isC0ControlPercentEncode(c) {\r\n  return c <= 0x1F || c > 0x7E;\r\n}\r\n\r\nconst extraPathPercentEncodeSet = new Set([32, 34, 35, 60, 62, 63, 96, 123, 125]);\r\nfunction isPathPercentEncode(c) {\r\n  return isC0ControlPercentEncode(c) || extraPathPercentEncodeSet.has(c);\r\n}\r\n\r\nconst extraUserinfoPercentEncodeSet =\r\n  new Set([47, 58, 59, 61, 64, 91, 92, 93, 94, 124]);\r\nfunction isUserinfoPercentEncode(c) {\r\n  return isPathPercentEncode(c) || extraUserinfoPercentEncodeSet.has(c);\r\n}\r\n\r\nfunction percentEncodeChar(c, encodeSetPredicate) {\r\n  const cStr = String.fromCodePoint(c);\r\n\r\n  if (encodeSetPredicate(c)) {\r\n    return utf8PercentEncode(cStr);\r\n  }\r\n\r\n  return cStr;\r\n}\r\n\r\nfunction parseIPv4Number(input) {\r\n  let R = 10;\r\n\r\n  if (input.length >= 2 && input.charAt(0) === \"0\" && input.charAt(1).toLowerCase() === \"x\") {\r\n    input = input.substring(2);\r\n    R = 16;\r\n  } else if (input.length >= 2 && input.charAt(0) === \"0\") {\r\n    input = input.substring(1);\r\n    R = 8;\r\n  }\r\n\r\n  if (input === \"\") {\r\n    return 0;\r\n  }\r\n\r\n  const regex = R === 10 ? /[^0-9]/ : (R === 16 ? /[^0-9A-Fa-f]/ : /[^0-7]/);\r\n  if (regex.test(input)) {\r\n    return failure;\r\n  }\r\n\r\n  return parseInt(input, R);\r\n}\r\n\r\nfunction parseIPv4(input) {\r\n  const parts = input.split(\".\");\r\n  if (parts[parts.length - 1] === \"\") {\r\n    if (parts.length > 1) {\r\n      parts.pop();\r\n    }\r\n  }\r\n\r\n  if (parts.length > 4) {\r\n    return input;\r\n  }\r\n\r\n  const numbers = [];\r\n  for (const part of parts) {\r\n    if (part === \"\") {\r\n      return input;\r\n    }\r\n    const n = parseIPv4Number(part);\r\n    if (n === failure) {\r\n      return input;\r\n    }\r\n\r\n    numbers.push(n);\r\n  }\r\n\r\n  for (let i = 0; i < numbers.length - 1; ++i) {\r\n    if (numbers[i] > 255) {\r\n      return failure;\r\n    }\r\n  }\r\n  if (numbers[numbers.length - 1] >= Math.pow(256, 5 - numbers.length)) {\r\n    return failure;\r\n  }\r\n\r\n  let ipv4 = numbers.pop();\r\n  let counter = 0;\r\n\r\n  for (const n of numbers) {\r\n    ipv4 += n * Math.pow(256, 3 - counter);\r\n    ++counter;\r\n  }\r\n\r\n  return ipv4;\r\n}\r\n\r\nfunction serializeIPv4(address) {\r\n  let output = \"\";\r\n  let n = address;\r\n\r\n  for (let i = 1; i <= 4; ++i) {\r\n    output = String(n % 256) + output;\r\n    if (i !== 4) {\r\n      output = \".\" + output;\r\n    }\r\n    n = Math.floor(n / 256);\r\n  }\r\n\r\n  return output;\r\n}\r\n\r\nfunction parseIPv6(input) {\r\n  const address = [0, 0, 0, 0, 0, 0, 0, 0];\r\n  let pieceIndex = 0;\r\n  let compress = null;\r\n  let pointer = 0;\r\n\r\n  input = punycode.ucs2.decode(input);\r\n\r\n  if (input[pointer] === 58) {\r\n    if (input[pointer + 1] !== 58) {\r\n      return failure;\r\n    }\r\n\r\n    pointer += 2;\r\n    ++pieceIndex;\r\n    compress = pieceIndex;\r\n  }\r\n\r\n  while (pointer < input.length) {\r\n    if (pieceIndex === 8) {\r\n      return failure;\r\n    }\r\n\r\n    if (input[pointer] === 58) {\r\n      if (compress !== null) {\r\n        return failure;\r\n      }\r\n      ++pointer;\r\n      ++pieceIndex;\r\n      compress = pieceIndex;\r\n      continue;\r\n    }\r\n\r\n    let value = 0;\r\n    let length = 0;\r\n\r\n    while (length < 4 && isASCIIHex(input[pointer])) {\r\n      value = value * 0x10 + parseInt(at(input, pointer), 16);\r\n      ++pointer;\r\n      ++length;\r\n    }\r\n\r\n    if (input[pointer] === 46) {\r\n      if (length === 0) {\r\n        return failure;\r\n      }\r\n\r\n      pointer -= length;\r\n\r\n      if (pieceIndex > 6) {\r\n        return failure;\r\n      }\r\n\r\n      let numbersSeen = 0;\r\n\r\n      while (input[pointer] !== undefined) {\r\n        let ipv4Piece = null;\r\n\r\n        if (numbersSeen > 0) {\r\n          if (input[pointer] === 46 && numbersSeen < 4) {\r\n            ++pointer;\r\n          } else {\r\n            return failure;\r\n          }\r\n        }\r\n\r\n        if (!isASCIIDigit(input[pointer])) {\r\n          return failure;\r\n        }\r\n\r\n        while (isASCIIDigit(input[pointer])) {\r\n          const number = parseInt(at(input, pointer));\r\n          if (ipv4Piece === null) {\r\n            ipv4Piece = number;\r\n          } else if (ipv4Piece === 0) {\r\n            return failure;\r\n          } else {\r\n            ipv4Piece = ipv4Piece * 10 + number;\r\n          }\r\n          if (ipv4Piece > 255) {\r\n            return failure;\r\n          }\r\n          ++pointer;\r\n        }\r\n\r\n        address[pieceIndex] = address[pieceIndex] * 0x100 + ipv4Piece;\r\n\r\n        ++numbersSeen;\r\n\r\n        if (numbersSeen === 2 || numbersSeen === 4) {\r\n          ++pieceIndex;\r\n        }\r\n      }\r\n\r\n      if (numbersSeen !== 4) {\r\n        return failure;\r\n      }\r\n\r\n      break;\r\n    } else if (input[pointer] === 58) {\r\n      ++pointer;\r\n      if (input[pointer] === undefined) {\r\n        return failure;\r\n      }\r\n    } else if (input[pointer] !== undefined) {\r\n      return failure;\r\n    }\r\n\r\n    address[pieceIndex] = value;\r\n    ++pieceIndex;\r\n  }\r\n\r\n  if (compress !== null) {\r\n    let swaps = pieceIndex - compress;\r\n    pieceIndex = 7;\r\n    while (pieceIndex !== 0 && swaps > 0) {\r\n      const temp = address[compress + swaps - 1];\r\n      address[compress + swaps - 1] = address[pieceIndex];\r\n      address[pieceIndex] = temp;\r\n      --pieceIndex;\r\n      --swaps;\r\n    }\r\n  } else if (compress === null && pieceIndex !== 8) {\r\n    return failure;\r\n  }\r\n\r\n  return address;\r\n}\r\n\r\nfunction serializeIPv6(address) {\r\n  let output = \"\";\r\n  const seqResult = findLongestZeroSequence(address);\r\n  const compress = seqResult.idx;\r\n  let ignore0 = false;\r\n\r\n  for (let pieceIndex = 0; pieceIndex <= 7; ++pieceIndex) {\r\n    if (ignore0 && address[pieceIndex] === 0) {\r\n      continue;\r\n    } else if (ignore0) {\r\n      ignore0 = false;\r\n    }\r\n\r\n    if (compress === pieceIndex) {\r\n      const separator = pieceIndex === 0 ? \"::\" : \":\";\r\n      output += separator;\r\n      ignore0 = true;\r\n      continue;\r\n    }\r\n\r\n    output += address[pieceIndex].toString(16);\r\n\r\n    if (pieceIndex !== 7) {\r\n      output += \":\";\r\n    }\r\n  }\r\n\r\n  return output;\r\n}\r\n\r\nfunction parseHost(input, isSpecialArg) {\r\n  if (input[0] === \"[\") {\r\n    if (input[input.length - 1] !== \"]\") {\r\n      return failure;\r\n    }\r\n\r\n    return parseIPv6(input.substring(1, input.length - 1));\r\n  }\r\n\r\n  if (!isSpecialArg) {\r\n    return parseOpaqueHost(input);\r\n  }\r\n\r\n  const domain = utf8PercentDecode(input);\r\n  const asciiDomain = tr46.toASCII(domain, false, tr46.PROCESSING_OPTIONS.NONTRANSITIONAL, false);\r\n  if (asciiDomain === null) {\r\n    return failure;\r\n  }\r\n\r\n  if (containsForbiddenHostCodePoint(asciiDomain)) {\r\n    return failure;\r\n  }\r\n\r\n  const ipv4Host = parseIPv4(asciiDomain);\r\n  if (typeof ipv4Host === \"number\" || ipv4Host === failure) {\r\n    return ipv4Host;\r\n  }\r\n\r\n  return asciiDomain;\r\n}\r\n\r\nfunction parseOpaqueHost(input) {\r\n  if (containsForbiddenHostCodePointExcludingPercent(input)) {\r\n    return failure;\r\n  }\r\n\r\n  let output = \"\";\r\n  const decoded = punycode.ucs2.decode(input);\r\n  for (let i = 0; i < decoded.length; ++i) {\r\n    output += percentEncodeChar(decoded[i], isC0ControlPercentEncode);\r\n  }\r\n  return output;\r\n}\r\n\r\nfunction findLongestZeroSequence(arr) {\r\n  let maxIdx = null;\r\n  let maxLen = 1; // only find elements > 1\r\n  let currStart = null;\r\n  let currLen = 0;\r\n\r\n  for (let i = 0; i < arr.length; ++i) {\r\n    if (arr[i] !== 0) {\r\n      if (currLen > maxLen) {\r\n        maxIdx = currStart;\r\n        maxLen = currLen;\r\n      }\r\n\r\n      currStart = null;\r\n      currLen = 0;\r\n    } else {\r\n      if (currStart === null) {\r\n        currStart = i;\r\n      }\r\n      ++currLen;\r\n    }\r\n  }\r\n\r\n  // if trailing zeros\r\n  if (currLen > maxLen) {\r\n    maxIdx = currStart;\r\n    maxLen = currLen;\r\n  }\r\n\r\n  return {\r\n    idx: maxIdx,\r\n    len: maxLen\r\n  };\r\n}\r\n\r\nfunction serializeHost(host) {\r\n  if (typeof host === \"number\") {\r\n    return serializeIPv4(host);\r\n  }\r\n\r\n  // IPv6 serializer\r\n  if (host instanceof Array) {\r\n    return \"[\" + serializeIPv6(host) + \"]\";\r\n  }\r\n\r\n  return host;\r\n}\r\n\r\nfunction trimControlChars(url) {\r\n  return url.replace(/^[\\u0000-\\u001F\\u0020]+|[\\u0000-\\u001F\\u0020]+$/g, \"\");\r\n}\r\n\r\nfunction trimTabAndNewline(url) {\r\n  return url.replace(/\\u0009|\\u000A|\\u000D/g, \"\");\r\n}\r\n\r\nfunction shortenPath(url) {\r\n  const path = url.path;\r\n  if (path.length === 0) {\r\n    return;\r\n  }\r\n  if (url.scheme === \"file\" && path.length === 1 && isNormalizedWindowsDriveLetter(path[0])) {\r\n    return;\r\n  }\r\n\r\n  path.pop();\r\n}\r\n\r\nfunction includesCredentials(url) {\r\n  return url.username !== \"\" || url.password !== \"\";\r\n}\r\n\r\nfunction cannotHaveAUsernamePasswordPort(url) {\r\n  return url.host === null || url.host === \"\" || url.cannotBeABaseURL || url.scheme === \"file\";\r\n}\r\n\r\nfunction isNormalizedWindowsDriveLetter(string) {\r\n  return /^[A-Za-z]:$/.test(string);\r\n}\r\n\r\nfunction URLStateMachine(input, base, encodingOverride, url, stateOverride) {\r\n  this.pointer = 0;\r\n  this.input = input;\r\n  this.base = base || null;\r\n  this.encodingOverride = encodingOverride || \"utf-8\";\r\n  this.stateOverride = stateOverride;\r\n  this.url = url;\r\n  this.failure = false;\r\n  this.parseError = false;\r\n\r\n  if (!this.url) {\r\n    this.url = {\r\n      scheme: \"\",\r\n      username: \"\",\r\n      password: \"\",\r\n      host: null,\r\n      port: null,\r\n      path: [],\r\n      query: null,\r\n      fragment: null,\r\n\r\n      cannotBeABaseURL: false\r\n    };\r\n\r\n    const res = trimControlChars(this.input);\r\n    if (res !== this.input) {\r\n      this.parseError = true;\r\n    }\r\n    this.input = res;\r\n  }\r\n\r\n  const res = trimTabAndNewline(this.input);\r\n  if (res !== this.input) {\r\n    this.parseError = true;\r\n  }\r\n  this.input = res;\r\n\r\n  this.state = stateOverride || \"scheme start\";\r\n\r\n  this.buffer = \"\";\r\n  this.atFlag = false;\r\n  this.arrFlag = false;\r\n  this.passwordTokenSeenFlag = false;\r\n\r\n  this.input = punycode.ucs2.decode(this.input);\r\n\r\n  for (; this.pointer <= this.input.length; ++this.pointer) {\r\n    const c = this.input[this.pointer];\r\n    const cStr = isNaN(c) ? undefined : String.fromCodePoint(c);\r\n\r\n    // exec state machine\r\n    const ret = this[\"parse \" + this.state](c, cStr);\r\n    if (!ret) {\r\n      break; // terminate algorithm\r\n    } else if (ret === failure) {\r\n      this.failure = true;\r\n      break;\r\n    }\r\n  }\r\n}\r\n\r\nURLStateMachine.prototype[\"parse scheme start\"] = function parseSchemeStart(c, cStr) {\r\n  if (isASCIIAlpha(c)) {\r\n    this.buffer += cStr.toLowerCase();\r\n    this.state = \"scheme\";\r\n  } else if (!this.stateOverride) {\r\n    this.state = \"no scheme\";\r\n    --this.pointer;\r\n  } else {\r\n    this.parseError = true;\r\n    return failure;\r\n  }\r\n\r\n  return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse scheme\"] = function parseScheme(c, cStr) {\r\n  if (isASCIIAlphanumeric(c) || c === 43 || c === 45 || c === 46) {\r\n    this.buffer += cStr.toLowerCase();\r\n  } else if (c === 58) {\r\n    if (this.stateOverride) {\r\n      if (isSpecial(this.url) && !isSpecialScheme(this.buffer)) {\r\n        return false;\r\n      }\r\n\r\n      if (!isSpecial(this.url) && isSpecialScheme(this.buffer)) {\r\n        return false;\r\n      }\r\n\r\n      if ((includesCredentials(this.url) || this.url.port !== null) && this.buffer === \"file\") {\r\n        return false;\r\n      }\r\n\r\n      if (this.url.scheme === \"file\" && (this.url.host === \"\" || this.url.host === null)) {\r\n        return false;\r\n      }\r\n    }\r\n    this.url.scheme = this.buffer;\r\n    this.buffer = \"\";\r\n    if (this.stateOverride) {\r\n      return false;\r\n    }\r\n    if (this.url.scheme === \"file\") {\r\n      if (this.input[this.pointer + 1] !== 47 || this.input[this.pointer + 2] !== 47) {\r\n        this.parseError = true;\r\n      }\r\n      this.state = \"file\";\r\n    } else if (isSpecial(this.url) && this.base !== null && this.base.scheme === this.url.scheme) {\r\n      this.state = \"special relative or authority\";\r\n    } else if (isSpecial(this.url)) {\r\n      this.state = \"special authority slashes\";\r\n    } else if (this.input[this.pointer + 1] === 47) {\r\n      this.state = \"path or authority\";\r\n      ++this.pointer;\r\n    } else {\r\n      this.url.cannotBeABaseURL = true;\r\n      this.url.path.push(\"\");\r\n      this.state = \"cannot-be-a-base-URL path\";\r\n    }\r\n  } else if (!this.stateOverride) {\r\n    this.buffer = \"\";\r\n    this.state = \"no scheme\";\r\n    this.pointer = -1;\r\n  } else {\r\n    this.parseError = true;\r\n    return failure;\r\n  }\r\n\r\n  return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse no scheme\"] = function parseNoScheme(c) {\r\n  if (this.base === null || (this.base.cannotBeABaseURL && c !== 35)) {\r\n    return failure;\r\n  } else if (this.base.cannotBeABaseURL && c === 35) {\r\n    this.url.scheme = this.base.scheme;\r\n    this.url.path = this.base.path.slice();\r\n    this.url.query = this.base.query;\r\n    this.url.fragment = \"\";\r\n    this.url.cannotBeABaseURL = true;\r\n    this.state = \"fragment\";\r\n  } else if (this.base.scheme === \"file\") {\r\n    this.state = \"file\";\r\n    --this.pointer;\r\n  } else {\r\n    this.state = \"relative\";\r\n    --this.pointer;\r\n  }\r\n\r\n  return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse special relative or authority\"] = function parseSpecialRelativeOrAuthority(c) {\r\n  if (c === 47 && this.input[this.pointer + 1] === 47) {\r\n    this.state = \"special authority ignore slashes\";\r\n    ++this.pointer;\r\n  } else {\r\n    this.parseError = true;\r\n    this.state = \"relative\";\r\n    --this.pointer;\r\n  }\r\n\r\n  return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse path or authority\"] = function parsePathOrAuthority(c) {\r\n  if (c === 47) {\r\n    this.state = \"authority\";\r\n  } else {\r\n    this.state = \"path\";\r\n    --this.pointer;\r\n  }\r\n\r\n  return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse relative\"] = function parseRelative(c) {\r\n  this.url.scheme = this.base.scheme;\r\n  if (isNaN(c)) {\r\n    this.url.username = this.base.username;\r\n    this.url.password = this.base.password;\r\n    this.url.host = this.base.host;\r\n    this.url.port = this.base.port;\r\n    this.url.path = this.base.path.slice();\r\n    this.url.query = this.base.query;\r\n  } else if (c === 47) {\r\n    this.state = \"relative slash\";\r\n  } else if (c === 63) {\r\n    this.url.username = this.base.username;\r\n    this.url.password = this.base.password;\r\n    this.url.host = this.base.host;\r\n    this.url.port = this.base.port;\r\n    this.url.path = this.base.path.slice();\r\n    this.url.query = \"\";\r\n    this.state = \"query\";\r\n  } else if (c === 35) {\r\n    this.url.username = this.base.username;\r\n    this.url.password = this.base.password;\r\n    this.url.host = this.base.host;\r\n    this.url.port = this.base.port;\r\n    this.url.path = this.base.path.slice();\r\n    this.url.query = this.base.query;\r\n    this.url.fragment = \"\";\r\n    this.state = \"fragment\";\r\n  } else if (isSpecial(this.url) && c === 92) {\r\n    this.parseError = true;\r\n    this.state = \"relative slash\";\r\n  } else {\r\n    this.url.username = this.base.username;\r\n    this.url.password = this.base.password;\r\n    this.url.host = this.base.host;\r\n    this.url.port = this.base.port;\r\n    this.url.path = this.base.path.slice(0, this.base.path.length - 1);\r\n\r\n    this.state = \"path\";\r\n    --this.pointer;\r\n  }\r\n\r\n  return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse relative slash\"] = function parseRelativeSlash(c) {\r\n  if (isSpecial(this.url) && (c === 47 || c === 92)) {\r\n    if (c === 92) {\r\n      this.parseError = true;\r\n    }\r\n    this.state = \"special authority ignore slashes\";\r\n  } else if (c === 47) {\r\n    this.state = \"authority\";\r\n  } else {\r\n    this.url.username = this.base.username;\r\n    this.url.password = this.base.password;\r\n    this.url.host = this.base.host;\r\n    this.url.port = this.base.port;\r\n    this.state = \"path\";\r\n    --this.pointer;\r\n  }\r\n\r\n  return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse special authority slashes\"] = function parseSpecialAuthoritySlashes(c) {\r\n  if (c === 47 && this.input[this.pointer + 1] === 47) {\r\n    this.state = \"special authority ignore slashes\";\r\n    ++this.pointer;\r\n  } else {\r\n    this.parseError = true;\r\n    this.state = \"special authority ignore slashes\";\r\n    --this.pointer;\r\n  }\r\n\r\n  return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse special authority ignore slashes\"] = function parseSpecialAuthorityIgnoreSlashes(c) {\r\n  if (c !== 47 && c !== 92) {\r\n    this.state = \"authority\";\r\n    --this.pointer;\r\n  } else {\r\n    this.parseError = true;\r\n  }\r\n\r\n  return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse authority\"] = function parseAuthority(c, cStr) {\r\n  if (c === 64) {\r\n    this.parseError = true;\r\n    if (this.atFlag) {\r\n      this.buffer = \"%40\" + this.buffer;\r\n    }\r\n    this.atFlag = true;\r\n\r\n    // careful, this is based on buffer and has its own pointer (this.pointer != pointer) and inner chars\r\n    const len = countSymbols(this.buffer);\r\n    for (let pointer = 0; pointer < len; ++pointer) {\r\n      const codePoint = this.buffer.codePointAt(pointer);\r\n\r\n      if (codePoint === 58 && !this.passwordTokenSeenFlag) {\r\n        this.passwordTokenSeenFlag = true;\r\n        continue;\r\n      }\r\n      const encodedCodePoints = percentEncodeChar(codePoint, isUserinfoPercentEncode);\r\n      if (this.passwordTokenSeenFlag) {\r\n        this.url.password += encodedCodePoints;\r\n      } else {\r\n        this.url.username += encodedCodePoints;\r\n      }\r\n    }\r\n    this.buffer = \"\";\r\n  } else if (isNaN(c) || c === 47 || c === 63 || c === 35 ||\r\n             (isSpecial(this.url) && c === 92)) {\r\n    if (this.atFlag && this.buffer === \"\") {\r\n      this.parseError = true;\r\n      return failure;\r\n    }\r\n    this.pointer -= countSymbols(this.buffer) + 1;\r\n    this.buffer = \"\";\r\n    this.state = \"host\";\r\n  } else {\r\n    this.buffer += cStr;\r\n  }\r\n\r\n  return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse hostname\"] =\r\nURLStateMachine.prototype[\"parse host\"] = function parseHostName(c, cStr) {\r\n  if (this.stateOverride && this.url.scheme === \"file\") {\r\n    --this.pointer;\r\n    this.state = \"file host\";\r\n  } else if (c === 58 && !this.arrFlag) {\r\n    if (this.buffer === \"\") {\r\n      this.parseError = true;\r\n      return failure;\r\n    }\r\n\r\n    const host = parseHost(this.buffer, isSpecial(this.url));\r\n    if (host === failure) {\r\n      return failure;\r\n    }\r\n\r\n    this.url.host = host;\r\n    this.buffer = \"\";\r\n    this.state = \"port\";\r\n    if (this.stateOverride === \"hostname\") {\r\n      return false;\r\n    }\r\n  } else if (isNaN(c) || c === 47 || c === 63 || c === 35 ||\r\n             (isSpecial(this.url) && c === 92)) {\r\n    --this.pointer;\r\n    if (isSpecial(this.url) && this.buffer === \"\") {\r\n      this.parseError = true;\r\n      return failure;\r\n    } else if (this.stateOverride && this.buffer === \"\" &&\r\n               (includesCredentials(this.url) || this.url.port !== null)) {\r\n      this.parseError = true;\r\n      return false;\r\n    }\r\n\r\n    const host = parseHost(this.buffer, isSpecial(this.url));\r\n    if (host === failure) {\r\n      return failure;\r\n    }\r\n\r\n    this.url.host = host;\r\n    this.buffer = \"\";\r\n    this.state = \"path start\";\r\n    if (this.stateOverride) {\r\n      return false;\r\n    }\r\n  } else {\r\n    if (c === 91) {\r\n      this.arrFlag = true;\r\n    } else if (c === 93) {\r\n      this.arrFlag = false;\r\n    }\r\n    this.buffer += cStr;\r\n  }\r\n\r\n  return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse port\"] = function parsePort(c, cStr) {\r\n  if (isASCIIDigit(c)) {\r\n    this.buffer += cStr;\r\n  } else if (isNaN(c) || c === 47 || c === 63 || c === 35 ||\r\n             (isSpecial(this.url) && c === 92) ||\r\n             this.stateOverride) {\r\n    if (this.buffer !== \"\") {\r\n      const port = parseInt(this.buffer);\r\n      if (port > Math.pow(2, 16) - 1) {\r\n        this.parseError = true;\r\n        return failure;\r\n      }\r\n      this.url.port = port === defaultPort(this.url.scheme) ? null : port;\r\n      this.buffer = \"\";\r\n    }\r\n    if (this.stateOverride) {\r\n      return false;\r\n    }\r\n    this.state = \"path start\";\r\n    --this.pointer;\r\n  } else {\r\n    this.parseError = true;\r\n    return failure;\r\n  }\r\n\r\n  return true;\r\n};\r\n\r\nconst fileOtherwiseCodePoints = new Set([47, 92, 63, 35]);\r\n\r\nURLStateMachine.prototype[\"parse file\"] = function parseFile(c) {\r\n  this.url.scheme = \"file\";\r\n\r\n  if (c === 47 || c === 92) {\r\n    if (c === 92) {\r\n      this.parseError = true;\r\n    }\r\n    this.state = \"file slash\";\r\n  } else if (this.base !== null && this.base.scheme === \"file\") {\r\n    if (isNaN(c)) {\r\n      this.url.host = this.base.host;\r\n      this.url.path = this.base.path.slice();\r\n      this.url.query = this.base.query;\r\n    } else if (c === 63) {\r\n      this.url.host = this.base.host;\r\n      this.url.path = this.base.path.slice();\r\n      this.url.query = \"\";\r\n      this.state = \"query\";\r\n    } else if (c === 35) {\r\n      this.url.host = this.base.host;\r\n      this.url.path = this.base.path.slice();\r\n      this.url.query = this.base.query;\r\n      this.url.fragment = \"\";\r\n      this.state = \"fragment\";\r\n    } else {\r\n      if (this.input.length - this.pointer - 1 === 0 || // remaining consists of 0 code points\r\n          !isWindowsDriveLetterCodePoints(c, this.input[this.pointer + 1]) ||\r\n          (this.input.length - this.pointer - 1 >= 2 && // remaining has at least 2 code points\r\n           !fileOtherwiseCodePoints.has(this.input[this.pointer + 2]))) {\r\n        this.url.host = this.base.host;\r\n        this.url.path = this.base.path.slice();\r\n        shortenPath(this.url);\r\n      } else {\r\n        this.parseError = true;\r\n      }\r\n\r\n      this.state = \"path\";\r\n      --this.pointer;\r\n    }\r\n  } else {\r\n    this.state = \"path\";\r\n    --this.pointer;\r\n  }\r\n\r\n  return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse file slash\"] = function parseFileSlash(c) {\r\n  if (c === 47 || c === 92) {\r\n    if (c === 92) {\r\n      this.parseError = true;\r\n    }\r\n    this.state = \"file host\";\r\n  } else {\r\n    if (this.base !== null && this.base.scheme === \"file\") {\r\n      if (isNormalizedWindowsDriveLetterString(this.base.path[0])) {\r\n        this.url.path.push(this.base.path[0]);\r\n      } else {\r\n        this.url.host = this.base.host;\r\n      }\r\n    }\r\n    this.state = \"path\";\r\n    --this.pointer;\r\n  }\r\n\r\n  return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse file host\"] = function parseFileHost(c, cStr) {\r\n  if (isNaN(c) || c === 47 || c === 92 || c === 63 || c === 35) {\r\n    --this.pointer;\r\n    if (!this.stateOverride && isWindowsDriveLetterString(this.buffer)) {\r\n      this.parseError = true;\r\n      this.state = \"path\";\r\n    } else if (this.buffer === \"\") {\r\n      this.url.host = \"\";\r\n      if (this.stateOverride) {\r\n        return false;\r\n      }\r\n      this.state = \"path start\";\r\n    } else {\r\n      let host = parseHost(this.buffer, isSpecial(this.url));\r\n      if (host === failure) {\r\n        return failure;\r\n      }\r\n      if (host === \"localhost\") {\r\n        host = \"\";\r\n      }\r\n      this.url.host = host;\r\n\r\n      if (this.stateOverride) {\r\n        return false;\r\n      }\r\n\r\n      this.buffer = \"\";\r\n      this.state = \"path start\";\r\n    }\r\n  } else {\r\n    this.buffer += cStr;\r\n  }\r\n\r\n  return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse path start\"] = function parsePathStart(c) {\r\n  if (isSpecial(this.url)) {\r\n    if (c === 92) {\r\n      this.parseError = true;\r\n    }\r\n    this.state = \"path\";\r\n\r\n    if (c !== 47 && c !== 92) {\r\n      --this.pointer;\r\n    }\r\n  } else if (!this.stateOverride && c === 63) {\r\n    this.url.query = \"\";\r\n    this.state = \"query\";\r\n  } else if (!this.stateOverride && c === 35) {\r\n    this.url.fragment = \"\";\r\n    this.state = \"fragment\";\r\n  } else if (c !== undefined) {\r\n    this.state = \"path\";\r\n    if (c !== 47) {\r\n      --this.pointer;\r\n    }\r\n  }\r\n\r\n  return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse path\"] = function parsePath(c) {\r\n  if (isNaN(c) || c === 47 || (isSpecial(this.url) && c === 92) ||\r\n      (!this.stateOverride && (c === 63 || c === 35))) {\r\n    if (isSpecial(this.url) && c === 92) {\r\n      this.parseError = true;\r\n    }\r\n\r\n    if (isDoubleDot(this.buffer)) {\r\n      shortenPath(this.url);\r\n      if (c !== 47 && !(isSpecial(this.url) && c === 92)) {\r\n        this.url.path.push(\"\");\r\n      }\r\n    } else if (isSingleDot(this.buffer) && c !== 47 &&\r\n               !(isSpecial(this.url) && c === 92)) {\r\n      this.url.path.push(\"\");\r\n    } else if (!isSingleDot(this.buffer)) {\r\n      if (this.url.scheme === \"file\" && this.url.path.length === 0 && isWindowsDriveLetterString(this.buffer)) {\r\n        if (this.url.host !== \"\" && this.url.host !== null) {\r\n          this.parseError = true;\r\n          this.url.host = \"\";\r\n        }\r\n        this.buffer = this.buffer[0] + \":\";\r\n      }\r\n      this.url.path.push(this.buffer);\r\n    }\r\n    this.buffer = \"\";\r\n    if (this.url.scheme === \"file\" && (c === undefined || c === 63 || c === 35)) {\r\n      while (this.url.path.length > 1 && this.url.path[0] === \"\") {\r\n        this.parseError = true;\r\n        this.url.path.shift();\r\n      }\r\n    }\r\n    if (c === 63) {\r\n      this.url.query = \"\";\r\n      this.state = \"query\";\r\n    }\r\n    if (c === 35) {\r\n      this.url.fragment = \"\";\r\n      this.state = \"fragment\";\r\n    }\r\n  } else {\r\n    // TODO: If c is not a URL code point and not \"%\", parse error.\r\n\r\n    if (c === 37 &&\r\n      (!isASCIIHex(this.input[this.pointer + 1]) ||\r\n        !isASCIIHex(this.input[this.pointer + 2]))) {\r\n      this.parseError = true;\r\n    }\r\n\r\n    this.buffer += percentEncodeChar(c, isPathPercentEncode);\r\n  }\r\n\r\n  return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse cannot-be-a-base-URL path\"] = function parseCannotBeABaseURLPath(c) {\r\n  if (c === 63) {\r\n    this.url.query = \"\";\r\n    this.state = \"query\";\r\n  } else if (c === 35) {\r\n    this.url.fragment = \"\";\r\n    this.state = \"fragment\";\r\n  } else {\r\n    // TODO: Add: not a URL code point\r\n    if (!isNaN(c) && c !== 37) {\r\n      this.parseError = true;\r\n    }\r\n\r\n    if (c === 37 &&\r\n        (!isASCIIHex(this.input[this.pointer + 1]) ||\r\n         !isASCIIHex(this.input[this.pointer + 2]))) {\r\n      this.parseError = true;\r\n    }\r\n\r\n    if (!isNaN(c)) {\r\n      this.url.path[0] = this.url.path[0] + percentEncodeChar(c, isC0ControlPercentEncode);\r\n    }\r\n  }\r\n\r\n  return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse query\"] = function parseQuery(c, cStr) {\r\n  if (isNaN(c) || (!this.stateOverride && c === 35)) {\r\n    if (!isSpecial(this.url) || this.url.scheme === \"ws\" || this.url.scheme === \"wss\") {\r\n      this.encodingOverride = \"utf-8\";\r\n    }\r\n\r\n    const buffer = new Buffer(this.buffer); // TODO: Use encoding override instead\r\n    for (let i = 0; i < buffer.length; ++i) {\r\n      if (buffer[i] < 0x21 || buffer[i] > 0x7E || buffer[i] === 0x22 || buffer[i] === 0x23 ||\r\n          buffer[i] === 0x3C || buffer[i] === 0x3E) {\r\n        this.url.query += percentEncode(buffer[i]);\r\n      } else {\r\n        this.url.query += String.fromCodePoint(buffer[i]);\r\n      }\r\n    }\r\n\r\n    this.buffer = \"\";\r\n    if (c === 35) {\r\n      this.url.fragment = \"\";\r\n      this.state = \"fragment\";\r\n    }\r\n  } else {\r\n    // TODO: If c is not a URL code point and not \"%\", parse error.\r\n    if (c === 37 &&\r\n      (!isASCIIHex(this.input[this.pointer + 1]) ||\r\n        !isASCIIHex(this.input[this.pointer + 2]))) {\r\n      this.parseError = true;\r\n    }\r\n\r\n    this.buffer += cStr;\r\n  }\r\n\r\n  return true;\r\n};\r\n\r\nURLStateMachine.prototype[\"parse fragment\"] = function parseFragment(c) {\r\n  if (isNaN(c)) { // do nothing\r\n  } else if (c === 0x0) {\r\n    this.parseError = true;\r\n  } else {\r\n    // TODO: If c is not a URL code point and not \"%\", parse error.\r\n    if (c === 37 &&\r\n      (!isASCIIHex(this.input[this.pointer + 1]) ||\r\n        !isASCIIHex(this.input[this.pointer + 2]))) {\r\n      this.parseError = true;\r\n    }\r\n\r\n    this.url.fragment += percentEncodeChar(c, isC0ControlPercentEncode);\r\n  }\r\n\r\n  return true;\r\n};\r\n\r\nfunction serializeURL(url, excludeFragment) {\r\n  let output = url.scheme + \":\";\r\n  if (url.host !== null) {\r\n    output += \"//\";\r\n\r\n    if (url.username !== \"\" || url.password !== \"\") {\r\n      output += url.username;\r\n      if (url.password !== \"\") {\r\n        output += \":\" + url.password;\r\n      }\r\n      output += \"@\";\r\n    }\r\n\r\n    output += serializeHost(url.host);\r\n\r\n    if (url.port !== null) {\r\n      output += \":\" + url.port;\r\n    }\r\n  } else if (url.host === null && url.scheme === \"file\") {\r\n    output += \"//\";\r\n  }\r\n\r\n  if (url.cannotBeABaseURL) {\r\n    output += url.path[0];\r\n  } else {\r\n    for (const string of url.path) {\r\n      output += \"/\" + string;\r\n    }\r\n  }\r\n\r\n  if (url.query !== null) {\r\n    output += \"?\" + url.query;\r\n  }\r\n\r\n  if (!excludeFragment && url.fragment !== null) {\r\n    output += \"#\" + url.fragment;\r\n  }\r\n\r\n  return output;\r\n}\r\n\r\nfunction serializeOrigin(tuple) {\r\n  let result = tuple.scheme + \"://\";\r\n  result += serializeHost(tuple.host);\r\n\r\n  if (tuple.port !== null) {\r\n    result += \":\" + tuple.port;\r\n  }\r\n\r\n  return result;\r\n}\r\n\r\nmodule.exports.serializeURL = serializeURL;\r\n\r\nmodule.exports.serializeURLOrigin = function (url) {\r\n  // https://url.spec.whatwg.org/#concept-url-origin\r\n  switch (url.scheme) {\r\n    case \"blob\":\r\n      try {\r\n        return module.exports.serializeURLOrigin(module.exports.parseURL(url.path[0]));\r\n      } catch (e) {\r\n        // serializing an opaque origin returns \"null\"\r\n        return \"null\";\r\n      }\r\n    case \"ftp\":\r\n    case \"gopher\":\r\n    case \"http\":\r\n    case \"https\":\r\n    case \"ws\":\r\n    case \"wss\":\r\n      return serializeOrigin({\r\n        scheme: url.scheme,\r\n        host: url.host,\r\n        port: url.port\r\n      });\r\n    case \"file\":\r\n      // spec says \"exercise to the reader\", chrome says \"file://\"\r\n      return \"file://\";\r\n    default:\r\n      // serializing an opaque origin returns \"null\"\r\n      return \"null\";\r\n  }\r\n};\r\n\r\nmodule.exports.basicURLParse = function (input, options) {\r\n  if (options === undefined) {\r\n    options = {};\r\n  }\r\n\r\n  const usm = new URLStateMachine(input, options.baseURL, options.encodingOverride, options.url, options.stateOverride);\r\n  if (usm.failure) {\r\n    return \"failure\";\r\n  }\r\n\r\n  return usm.url;\r\n};\r\n\r\nmodule.exports.setTheUsername = function (url, username) {\r\n  url.username = \"\";\r\n  const decoded = punycode.ucs2.decode(username);\r\n  for (let i = 0; i < decoded.length; ++i) {\r\n    url.username += percentEncodeChar(decoded[i], isUserinfoPercentEncode);\r\n  }\r\n};\r\n\r\nmodule.exports.setThePassword = function (url, password) {\r\n  url.password = \"\";\r\n  const decoded = punycode.ucs2.decode(password);\r\n  for (let i = 0; i < decoded.length; ++i) {\r\n    url.password += percentEncodeChar(decoded[i], isUserinfoPercentEncode);\r\n  }\r\n};\r\n\r\nmodule.exports.serializeHost = serializeHost;\r\n\r\nmodule.exports.cannotHaveAUsernamePasswordPort = cannotHaveAUsernamePasswordPort;\r\n\r\nmodule.exports.serializeInteger = function (integer) {\r\n  return String(integer);\r\n};\r\n\r\nmodule.exports.parseURL = function (input, options) {\r\n  if (options === undefined) {\r\n    options = {};\r\n  }\r\n\r\n  // We don't handle blobs, so this just delegates:\r\n  return module.exports.basicURLParse(input, { baseURL: options.baseURL, encodingOverride: options.encodingOverride });\r\n};\r\n/README.md\u0014\u0010﻿# whatwg-url\n\nwhatwg-url is a full implementation of the WHATWG [URL Standard](https://url.spec.whatwg.org/). It can be used standalone, but it also exposes a lot of the internal algorithms that are useful for integrating a URL parser into a project like [jsdom](https://github.com/tmpvar/jsdom).\n\n## Current Status\n\nwhatwg-url is currently up to date with the URL spec up to commit [a62223](https://github.com/whatwg/url/commit/a622235308342c9adc7fc2fd1659ff059f7d5e2a).\n\n## API\n\n### The `URL` Constructor\n\nThe main API is the [`URL`](https://url.spec.whatwg.org/#url) export, which follows the spec's behavior in all ways (including e.g. `USVString` conversion). Most consumers of this library will want to use this.\n\n### Low-level URL Standard API\n\nThe following methods are exported for use by places like jsdom that need to implement things like [`HTMLHyperlinkElementUtils`](https://html.spec.whatwg.org/#htmlhyperlinkelementutils). They operate on or return an \"internal URL\" or [\"URL record\"](https://url.spec.whatwg.org/#concept-url) type.\n\n- [URL parser](https://url.spec.whatwg.org/#concept-url-parser): `parseURL(input, { baseURL, encodingOverride })`\n- [Basic URL parser](https://url.spec.whatwg.org/#concept-basic-url-parser): `basicURLParse(input, { baseURL, encodingOverride, url, stateOverride })`\n- [URL serializer](https://url.spec.whatwg.org/#concept-url-serializer): `serializeURL(urlRecord, excludeFragment)`\n- [Host serializer](https://url.spec.whatwg.org/#concept-host-serializer): `serializeHost(hostFromURLRecord)`\n- [Serialize an integer](https://url.spec.whatwg.org/#serialize-an-integer): `serializeInteger(number)`\n- [Origin](https://url.spec.whatwg.org/#concept-url-origin) [serializer](https://html.spec.whatwg.org/multipage/browsers.html#serialization-of-an-origin): `serializeURLOrigin(urlRecord)`\n- [Set the username](https://url.spec.whatwg.org/#set-the-username): `setTheUsername(urlRecord, usernameString)`\n- [Set the password](https://url.spec.whatwg.org/#set-the-password): `setThePassword(urlRecord, passwordString)`\n- [Cannot have a username/password/port](https://url.spec.whatwg.org/#cannot-have-a-username-password-port): `cannotHaveAUsernamePasswordPort(urlRecord)`\n\nThe `stateOverride` parameter is one of the following strings:\n\n- [`\"scheme start\"`](https://url.spec.whatwg.org/#scheme-start-state)\n- [`\"scheme\"`](https://url.spec.whatwg.org/#scheme-state)\n- [`\"no scheme\"`](https://url.spec.whatwg.org/#no-scheme-state)\n- [`\"special relative or authority\"`](https://url.spec.whatwg.org/#special-relative-or-authority-state)\n- [`\"path or authority\"`](https://url.spec.whatwg.org/#path-or-authority-state)\n- [`\"relative\"`](https://url.spec.whatwg.org/#relative-state)\n- [`\"relative slash\"`](https://url.spec.whatwg.org/#relative-slash-state)\n- [`\"special authority slashes\"`](https://url.spec.whatwg.org/#special-authority-slashes-state)\n- [`\"special authority ignore slashes\"`](https://url.spec.whatwg.org/#special-authority-ignore-slashes-state)\n- [`\"authority\"`](https://url.spec.whatwg.org/#authority-state)\n- [`\"host\"`](https://url.spec.whatwg.org/#host-state)\n- [`\"hostname\"`](https://url.spec.whatwg.org/#hostname-state)\n- [`\"port\"`](https://url.spec.whatwg.org/#port-state)\n- [`\"file\"`](https://url.spec.whatwg.org/#file-state)\n- [`\"file slash\"`](https://url.spec.whatwg.org/#file-slash-state)\n- [`\"file host\"`](https://url.spec.whatwg.org/#file-host-state)\n- [`\"path start\"`](https://url.spec.whatwg.org/#path-start-state)\n- [`\"path\"`](https://url.spec.whatwg.org/#path-state)\n- [`\"cannot-be-a-base-URL path\"`](https://url.spec.whatwg.org/#cannot-be-a-base-url-path-state)\n- [`\"query\"`](https://url.spec.whatwg.org/#query-state)\n- [`\"fragment\"`](https://url.spec.whatwg.org/#fragment-state)\n\nThe URL record type has the following API:\n\n- [`scheme`](https://url.spec.whatwg.org/#concept-url-scheme)\n- [`username`](https://url.spec.whatwg.org/#concept-url-username)\n- [`password`](https://url.spec.whatwg.org/#concept-url-password)\n- [`host`](https://url.spec.whatwg.org/#concept-url-host)\n- [`port`](https://url.spec.whatwg.org/#concept-url-port)\n- [`path`](https://url.spec.whatwg.org/#concept-url-path) (as an array)\n- [`query`](https://url.spec.whatwg.org/#concept-url-query)\n- [`fragment`](https://url.spec.whatwg.org/#concept-url-fragment)\n- [`cannotBeABaseURL`](https://url.spec.whatwg.org/#url-cannot-be-a-base-url-flag) (as a boolean)\n\nThese properties should be treated with care, as in general changing them will cause the URL record to be in an inconsistent state until the appropriate invocation of `basicURLParse` is used to fix it up. You can see examples of this in the URL Standard, where there are many step sequences like \"4. Set context object’s url’s fragment to the empty string. 5. Basic URL parse _input_ with context object’s url as _url_ and fragment state as _state override_.\" In between those two steps, a URL record is in an unusable state.\n\nThe return value of \"failure\" in the spec is represented by the string `\"failure\"`. That is, functions like `parseURL` and `basicURLParse` can return _either_ a URL record _or_ the string `\"failure\"`.\n/lib/utils.js\u00022\"use strict\";\n\nmodule.exports.mixin = function mixin(target, source) {\n  const keys = Object.getOwnPropertyNames(source);\n  for (let i = 0; i < keys.length; ++i) {\n    Object.defineProperty(target, keys[i], Object.getOwnPropertyDescriptor(source, keys[i]));\n  }\n};\n\nmodule.exports.wrapperSymbol = Symbol(\"wrapper\");\nmodule.exports.implSymbol = Symbol(\"impl\");\n\nmodule.exports.wrapperForImpl = function (impl) {\n  return impl[module.exports.wrapperSymbol];\n};\n\nmodule.exports.implForWrapper = function (wrapper) {\n  return wrapper[module.exports.implSymbol];\n};\n\n/lib/URL-impl.js\u000e\"use strict\";\nconst usm = require(\"./url-state-machine\");\n\nexports.implementation = class URLImpl {\n  constructor(constructorArgs) {\n    const url = constructorArgs[0];\n    const base = constructorArgs[1];\n\n    let parsedBase = null;\n    if (base !== undefined) {\n      parsedBase = usm.basicURLParse(base);\n      if (parsedBase === \"failure\") {\n        throw new TypeError(\"Invalid base URL\");\n      }\n    }\n\n    const parsedURL = usm.basicURLParse(url, { baseURL: parsedBase });\n    if (parsedURL === \"failure\") {\n      throw new TypeError(\"Invalid URL\");\n    }\n\n    this._url = parsedURL;\n\n    // TODO: query stuff\n  }\n\n  get href() {\n    return usm.serializeURL(this._url);\n  }\n\n  set href(v) {\n    const parsedURL = usm.basicURLParse(v);\n    if (parsedURL === \"failure\") {\n      throw new TypeError(\"Invalid URL\");\n    }\n\n    this._url = parsedURL;\n  }\n\n  get origin() {\n    return usm.serializeURLOrigin(this._url);\n  }\n\n  get protocol() {\n    return this._url.scheme + \":\";\n  }\n\n  set protocol(v) {\n    usm.basicURLParse(v + \":\", { url: this._url, stateOverride: \"scheme start\" });\n  }\n\n  get username() {\n    return this._url.username;\n  }\n\n  set username(v) {\n    if (usm.cannotHaveAUsernamePasswordPort(this._url)) {\n      return;\n    }\n\n    usm.setTheUsername(this._url, v);\n  }\n\n  get password() {\n    return this._url.password;\n  }\n\n  set password(v) {\n    if (usm.cannotHaveAUsernamePasswordPort(this._url)) {\n      return;\n    }\n\n    usm.setThePassword(this._url, v);\n  }\n\n  get host() {\n    const url = this._url;\n\n    if (url.host === null) {\n      return \"\";\n    }\n\n    if (url.port === null) {\n      return usm.serializeHost(url.host);\n    }\n\n    return usm.serializeHost(url.host) + \":\" + usm.serializeInteger(url.port);\n  }\n\n  set host(v) {\n    if (this._url.cannotBeABaseURL) {\n      return;\n    }\n\n    usm.basicURLParse(v, { url: this._url, stateOverride: \"host\" });\n  }\n\n  get hostname() {\n    if (this._url.host === null) {\n      return \"\";\n    }\n\n    return usm.serializeHost(this._url.host);\n  }\n\n  set hostname(v) {\n    if (this._url.cannotBeABaseURL) {\n      return;\n    }\n\n    usm.basicURLParse(v, { url: this._url, stateOverride: \"hostname\" });\n  }\n\n  get port() {\n    if (this._url.port === null) {\n      return \"\";\n    }\n\n    return usm.serializeInteger(this._url.port);\n  }\n\n  set port(v) {\n    if (usm.cannotHaveAUsernamePasswordPort(this._url)) {\n      return;\n    }\n\n    if (v === \"\") {\n      this._url.port = null;\n    } else {\n      usm.basicURLParse(v, { url: this._url, stateOverride: \"port\" });\n    }\n  }\n\n  get pathname() {\n    if (this._url.cannotBeABaseURL) {\n      return this._url.path[0];\n    }\n\n    if (this._url.path.length === 0) {\n      return \"\";\n    }\n\n    return \"/\" + this._url.path.join(\"/\");\n  }\n\n  set pathname(v) {\n    if (this._url.cannotBeABaseURL) {\n      return;\n    }\n\n    this._url.path = [];\n    usm.basicURLParse(v, { url: this._url, stateOverride: \"path start\" });\n  }\n\n  get search() {\n    if (this._url.query === null || this._url.query === \"\") {\n      return \"\";\n    }\n\n    return \"?\" + this._url.query;\n  }\n\n  set search(v) {\n    // TODO: query stuff\n\n    const url = this._url;\n\n    if (v === \"\") {\n      url.query = null;\n      return;\n    }\n\n    const input = v[0] === \"?\" ? v.substring(1) : v;\n    url.query = \"\";\n    usm.basicURLParse(input, { url, stateOverride: \"query\" });\n  }\n\n  get hash() {\n    if (this._url.fragment === null || this._url.fragment === \"\") {\n      return \"\";\n    }\n\n    return \"#\" + this._url.fragment;\n  }\n\n  set hash(v) {\n    if (v === \"\") {\n      this._url.fragment = null;\n      return;\n    }\n\n    const input = v[0] === \"#\" ? v.substring(1) : v;\n    this._url.fragment = \"\";\n    usm.basicURLParse(input, { url: this._url, stateOverride: \"fragment\" });\n  }\n\n  toJSON() {\n    return this.href;\n  }\n};\n/LICENSE.txt\u0004@The MIT License (MIT)\n\nCopyright (c) 2015–2016 Sebastian Mayr\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n/package.json\u0003v{\n  \"name\": \"whatwg-url\",\n  \"version\": \"5.0.0\",\n  \"description\": \"An implementation of the WHATWG URL Standard's URL API and parsing machinery\",\n  \"main\": \"lib/public-api.js\",\n  \"files\": [\n    \"lib/\"\n  ],\n  \"author\": \"Sebastian Mayr <github@smayr.name>\",\n  \"license\": \"MIT\",\n  \"repository\": \"jsdom/whatwg-url\",\n  \"dependencies\": {\n    \"tr46\": \"~0.0.3\",\n    \"webidl-conversions\": \"^3.0.0\"\n  },\n  \"devDependencies\": {\n    \"eslint\": \"^2.6.0\",\n    \"istanbul\": \"~0.4.3\",\n    \"mocha\": \"^2.2.4\",\n    \"recast\": \"~0.10.29\",\n    \"request\": \"^2.55.0\",\n    \"webidl2js\": \"^3.0.2\"\n  },\n  \"scripts\": {\n    \"build\": \"node scripts/transform.js && node scripts/convert-idl.js\",\n    \"coverage\": \"istanbul cover node_modules/mocha/bin/_mocha\",\n    \"lint\": \"eslint .\",\n    \"prepublish\": \"npm run build\",\n    \"pretest\": \"node scripts/get-latest-platform-tests.js && npm run build\",\n    \"test\": \"mocha\"\n  }\n}\n/lib/URL.js\u0010t\"use strict\";\n\nconst conversions = require(\"webidl-conversions\");\nconst utils = require(\"./utils.js\");\nconst Impl = require(\".//URL-impl.js\");\n\nconst impl = utils.implSymbol;\n\nfunction URL(url) {\n  if (!this || this[impl] || !(this instanceof URL)) {\n    throw new TypeError(\"Failed to construct 'URL': Please use the 'new' operator, this DOM object constructor cannot be called as a function.\");\n  }\n  if (arguments.length < 1) {\n    throw new TypeError(\"Failed to construct 'URL': 1 argument required, but only \" + arguments.length + \" present.\");\n  }\n  const args = [];\n  for (let i = 0; i < arguments.length && i < 2; ++i) {\n    args[i] = arguments[i];\n  }\n  args[0] = conversions[\"USVString\"](args[0]);\n  if (args[1] !== undefined) {\n  args[1] = conversions[\"USVString\"](args[1]);\n  }\n\n  module.exports.setup(this, args);\n}\n\nURL.prototype.toJSON = function toJSON() {\n  if (!this || !module.exports.is(this)) {\n    throw new TypeError(\"Illegal invocation\");\n  }\n  const args = [];\n  for (let i = 0; i < arguments.length && i < 0; ++i) {\n    args[i] = arguments[i];\n  }\n  return this[impl].toJSON.apply(this[impl], args);\n};\nObject.defineProperty(URL.prototype, \"href\", {\n  get() {\n    return this[impl].href;\n  },\n  set(V) {\n    V = conversions[\"USVString\"](V);\n    this[impl].href = V;\n  },\n  enumerable: true,\n  configurable: true\n});\n\nURL.prototype.toString = function () {\n  if (!this || !module.exports.is(this)) {\n    throw new TypeError(\"Illegal invocation\");\n  }\n  return this.href;\n};\n\nObject.defineProperty(URL.prototype, \"origin\", {\n  get() {\n    return this[impl].origin;\n  },\n  enumerable: true,\n  configurable: true\n});\n\nObject.defineProperty(URL.prototype, \"protocol\", {\n  get() {\n    return this[impl].protocol;\n  },\n  set(V) {\n    V = conversions[\"USVString\"](V);\n    this[impl].protocol = V;\n  },\n  enumerable: true,\n  configurable: true\n});\n\nObject.defineProperty(URL.prototype, \"username\", {\n  get() {\n    return this[impl].username;\n  },\n  set(V) {\n    V = conversions[\"USVString\"](V);\n    this[impl].username = V;\n  },\n  enumerable: true,\n  configurable: true\n});\n\nObject.defineProperty(URL.prototype, \"password\", {\n  get() {\n    return this[impl].password;\n  },\n  set(V) {\n    V = conversions[\"USVString\"](V);\n    this[impl].password = V;\n  },\n  enumerable: true,\n  configurable: true\n});\n\nObject.defineProperty(URL.prototype, \"host\", {\n  get() {\n    return this[impl].host;\n  },\n  set(V) {\n    V = conversions[\"USVString\"](V);\n    this[impl].host = V;\n  },\n  enumerable: true,\n  configurable: true\n});\n\nObject.defineProperty(URL.prototype, \"hostname\", {\n  get() {\n    return this[impl].hostname;\n  },\n  set(V) {\n    V = conversions[\"USVString\"](V);\n    this[impl].hostname = V;\n  },\n  enumerable: true,\n  configurable: true\n});\n\nObject.defineProperty(URL.prototype, \"port\", {\n  get() {\n    return this[impl].port;\n  },\n  set(V) {\n    V = conversions[\"USVString\"](V);\n    this[impl].port = V;\n  },\n  enumerable: true,\n  configurable: true\n});\n\nObject.defineProperty(URL.prototype, \"pathname\", {\n  get() {\n    return this[impl].pathname;\n  },\n  set(V) {\n    V = conversions[\"USVString\"](V);\n    this[impl].pathname = V;\n  },\n  enumerable: true,\n  configurable: true\n});\n\nObject.defineProperty(URL.prototype, \"search\", {\n  get() {\n    return this[impl].search;\n  },\n  set(V) {\n    V = conversions[\"USVString\"](V);\n    this[impl].search = V;\n  },\n  enumerable: true,\n  configurable: true\n});\n\nObject.defineProperty(URL.prototype, \"hash\", {\n  get() {\n    return this[impl].hash;\n  },\n  set(V) {\n    V = conversions[\"USVString\"](V);\n    this[impl].hash = V;\n  },\n  enumerable: true,\n  configurable: true\n});\n\n\nmodule.exports = {\n  is(obj) {\n    return !!obj && obj[impl] instanceof Impl.implementation;\n  },\n  create(constructorArgs, privateData) {\n    let obj = Object.create(URL.prototype);\n    this.setup(obj, constructorArgs, privateData);\n    return obj;\n  },\n  setup(obj, constructorArgs, privateData) {\n    if (!privateData) privateData = {};\n    privateData.wrapper = obj;\n\n    obj[impl] = new Impl.implementation(constructorArgs, privateData);\n    obj[impl][utils.wrapperSymbol] = obj;\n  },\n  interface: URL,\n  expose: {\n    Window: { URL: URL },\n    Worker: { URL: URL }\n  }\n};\n\n/lib/public-api.js\u0002q\"use strict\";\n\nexports.URL = require(\"./URL\").interface;\nexports.serializeURL = require(\"./url-state-machine\").serializeURL;\nexports.serializeURLOrigin = require(\"./url-state-machine\").serializeURLOrigin;\nexports.basicURLParse = require(\"./url-state-machine\").basicURLParse;\nexports.setTheUsername = require(\"./url-state-machine\").setTheUsername;\nexports.setThePassword = require(\"./url-state-machine\").setThePassword;\nexports.serializeHost = require(\"./url-state-machine\").serializeHost;\nexports.serializeInteger = require(\"./url-state-machine\").serializeInteger;\nexports.parseURL = require(\"./url-state-machine\").parseURL;\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/d2hpY2hAMi4wLjI=",
    "content": "/which.js\f[const isWindows = process.platform === 'win32' ||\n    process.env.OSTYPE === 'cygwin' ||\n    process.env.OSTYPE === 'msys'\n\nconst path = require('path')\nconst COLON = isWindows ? ';' : ':'\nconst isexe = require('isexe')\n\nconst getNotFoundError = (cmd) =>\n  Object.assign(new Error(`not found: ${cmd}`), { code: 'ENOENT' })\n\nconst getPathInfo = (cmd, opt) => {\n  const colon = opt.colon || COLON\n\n  // If it has a slash, then we don't bother searching the pathenv.\n  // just check the file itself, and that's it.\n  const pathEnv = cmd.match(/\\//) || isWindows && cmd.match(/\\\\/) ? ['']\n    : (\n      [\n        // windows always checks the cwd first\n        ...(isWindows ? [process.cwd()] : []),\n        ...(opt.path || process.env.PATH ||\n          /* istanbul ignore next: very unusual */ '').split(colon),\n      ]\n    )\n  const pathExtExe = isWindows\n    ? opt.pathExt || process.env.PATHEXT || '.EXE;.CMD;.BAT;.COM'\n    : ''\n  const pathExt = isWindows ? pathExtExe.split(colon) : ['']\n\n  if (isWindows) {\n    if (cmd.indexOf('.') !== -1 && pathExt[0] !== '')\n      pathExt.unshift('')\n  }\n\n  return {\n    pathEnv,\n    pathExt,\n    pathExtExe,\n  }\n}\n\nconst which = (cmd, opt, cb) => {\n  if (typeof opt === 'function') {\n    cb = opt\n    opt = {}\n  }\n  if (!opt)\n    opt = {}\n\n  const { pathEnv, pathExt, pathExtExe } = getPathInfo(cmd, opt)\n  const found = []\n\n  const step = i => new Promise((resolve, reject) => {\n    if (i === pathEnv.length)\n      return opt.all && found.length ? resolve(found)\n        : reject(getNotFoundError(cmd))\n\n    const ppRaw = pathEnv[i]\n    const pathPart = /^\".*\"$/.test(ppRaw) ? ppRaw.slice(1, -1) : ppRaw\n\n    const pCmd = path.join(pathPart, cmd)\n    const p = !pathPart && /^\\.[\\\\\\/]/.test(cmd) ? cmd.slice(0, 2) + pCmd\n      : pCmd\n\n    resolve(subStep(p, i, 0))\n  })\n\n  const subStep = (p, i, ii) => new Promise((resolve, reject) => {\n    if (ii === pathExt.length)\n      return resolve(step(i + 1))\n    const ext = pathExt[ii]\n    isexe(p + ext, { pathExt: pathExtExe }, (er, is) => {\n      if (!er && is) {\n        if (opt.all)\n          found.push(p + ext)\n        else\n          return resolve(p + ext)\n      }\n      return resolve(subStep(p, i, ii + 1))\n    })\n  })\n\n  return cb ? step(0).then(res => cb(null, res), cb) : step(0)\n}\n\nconst whichSync = (cmd, opt) => {\n  opt = opt || {}\n\n  const { pathEnv, pathExt, pathExtExe } = getPathInfo(cmd, opt)\n  const found = []\n\n  for (let i = 0; i < pathEnv.length; i ++) {\n    const ppRaw = pathEnv[i]\n    const pathPart = /^\".*\"$/.test(ppRaw) ? ppRaw.slice(1, -1) : ppRaw\n\n    const pCmd = path.join(pathPart, cmd)\n    const p = !pathPart && /^\\.[\\\\\\/]/.test(cmd) ? cmd.slice(0, 2) + pCmd\n      : pCmd\n\n    for (let j = 0; j < pathExt.length; j ++) {\n      const cur = p + pathExt[j]\n      try {\n        const is = isexe.sync(cur, { pathExt: pathExtExe })\n        if (is) {\n          if (opt.all)\n            found.push(cur)\n          else\n            return cur\n        }\n      } catch (ex) {}\n    }\n  }\n\n  if (opt.all && found.length)\n    return found\n\n  if (opt.nothrow)\n    return null\n\n  throw getNotFoundError(cmd)\n}\n\nmodule.exports = which\nwhich.sync = whichSync\n/package.json\u0004\u0013{\n  \"author\": \"Isaac Z. Schlueter <i@izs.me> (http://blog.izs.me)\",\n  \"name\": \"which\",\n  \"description\": \"Like which(1) unix command. Find the first instance of an executable in the PATH.\",\n  \"version\": \"2.0.2\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git://github.com/isaacs/node-which.git\"\n  },\n  \"main\": \"which.js\",\n  \"bin\": {\n    \"node-which\": \"./bin/node-which\"\n  },\n  \"license\": \"ISC\",\n  \"dependencies\": {\n    \"isexe\": \"^2.0.0\"\n  },\n  \"devDependencies\": {\n    \"mkdirp\": \"^0.5.0\",\n    \"rimraf\": \"^2.6.2\",\n    \"tap\": \"^14.6.9\"\n  },\n  \"scripts\": {\n    \"test\": \"tap\",\n    \"preversion\": \"npm test\",\n    \"postversion\": \"npm publish\",\n    \"prepublish\": \"npm run changelog\",\n    \"prechangelog\": \"bash gen-changelog.sh\",\n    \"changelog\": \"git add CHANGELOG.md\",\n    \"postchangelog\": \"git commit -m 'update changelog - '${npm_package_version}\",\n    \"postpublish\": \"git push origin --follow-tags\"\n  },\n  \"files\": [\n    \"which.js\",\n    \"bin/node-which\"\n  ],\n  \"tap\": {\n    \"check-coverage\": true\n  },\n  \"engines\": {\n    \"node\": \">= 8\"\n  }\n}\n/bin/node-which\u0003#!/usr/bin/env node\nvar which = require(\"../\")\nif (process.argv.length < 3)\n  usage()\n\nfunction usage () {\n  console.error('usage: which [-as] program ...')\n  process.exit(1)\n}\n\nvar all = false\nvar silent = false\nvar dashdash = false\nvar args = process.argv.slice(2).filter(function (arg) {\n  if (dashdash || !/^-/.test(arg))\n    return true\n\n  if (arg === '--') {\n    dashdash = true\n    return false\n  }\n\n  var flags = arg.substr(1).split('')\n  for (var f = 0; f < flags.length; f++) {\n    var flag = flags[f]\n    switch (flag) {\n      case 's':\n        silent = true\n        break\n      case 'a':\n        all = true\n        break\n      default:\n        console.error('which: illegal option -- ' + flag)\n        usage()\n    }\n  }\n  return false\n})\n\nprocess.exit(args.reduce(function (pv, current) {\n  try {\n    var f = which.sync(current, { all: all })\n    if (all)\n      f = f.join('\\n')\n    if (!silent)\n      console.log(f)\n    return pv;\n  } catch (e) {\n    return 1;\n  }\n}, 0))\n/LICENSE\u0002The ISC License\n\nCopyright (c) Isaac Z. Schlueter and Contributors\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted, provided that the above\ncopyright notice and this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\nWITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\nANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\nACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR\nIN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n/CHANGELOG.md\nk# Changes\n\n\n## 2.0.2\n\n* Rename bin to `node-which`\n\n## 2.0.1\n\n* generate changelog and publish on version bump\n* enforce 100% test coverage\n* Promise interface\n\n## 2.0.0\n\n* Parallel tests, modern JavaScript, and drop support for node < 8\n\n## 1.3.1\n\n* update deps\n* update travis\n\n## v1.3.0\n\n* Add nothrow option to which.sync\n* update tap\n\n## v1.2.14\n\n* appveyor: drop node 5 and 0.x\n* travis-ci: add node 6, drop 0.x\n\n## v1.2.13\n\n* test: Pass missing option to pass on windows\n* update tap\n* update isexe to 2.0.0\n* neveragain.tech pledge request\n\n## v1.2.12\n\n* Removed unused require\n\n## v1.2.11\n\n* Prevent changelog script from being included in package\n\n## v1.2.10\n\n* Use env.PATH only, not env.Path\n\n## v1.2.9\n\n* fix for paths starting with ../\n* Remove unused `is-absolute` module\n\n## v1.2.8\n\n* bullet items in changelog that contain (but don't start with) #\n\n## v1.2.7\n\n* strip 'update changelog' changelog entries out of changelog\n\n## v1.2.6\n\n* make the changelog bulleted\n\n## v1.2.5\n\n* make a changelog, and keep it up to date\n* don't include tests in package\n* Properly handle relative-path executables\n* appveyor\n* Attach error code to Not Found error\n* Make tests pass on Windows\n\n## v1.2.4\n\n* Fix typo\n\n## v1.2.3\n\n* update isexe, fix regression in pathExt handling\n\n## v1.2.2\n\n* update deps, use isexe module, test windows\n\n## v1.2.1\n\n* Sometimes windows PATH entries are quoted\n* Fixed a bug in the check for group and user mode bits. This bug was introduced during refactoring for supporting strict mode.\n* doc cli\n\n## v1.2.0\n\n* Add support for opt.all and -as cli flags\n* test the bin\n* update travis\n* Allow checking for multiple programs in bin/which\n* tap 2\n\n## v1.1.2\n\n* travis\n* Refactored and fixed undefined error on Windows\n* Support strict mode\n\n## v1.1.1\n\n* test +g exes against secondary groups, if available\n* Use windows exe semantics on cygwin & msys\n* cwd should be first in path on win32, not last\n* Handle lower-case 'env.Path' on Windows\n* Update docs\n* use single-quotes\n\n## v1.1.0\n\n* Add tests, depend on is-absolute\n\n## v1.0.9\n\n* which.js: root is allowed to execute files owned by anyone\n\n## v1.0.8\n\n* don't use graceful-fs\n\n## v1.0.7\n\n* add license to package.json\n\n## v1.0.6\n\n* isc license\n\n## 1.0.5\n\n* Awful typo\n\n## 1.0.4\n\n* Test for path absoluteness properly\n* win: Allow '' as a pathext if cmd has a . in it\n\n## 1.0.3\n\n* Remove references to execPath\n* Make `which.sync()` work on Windows by honoring the PATHEXT variable.\n* Make `isExe()` always return true on Windows.\n* MIT\n\n## 1.0.2\n\n* Only files can be exes\n\n## 1.0.1\n\n* Respect the PATHEXT env for win32 support\n* should 0755 the bin\n* binary\n* guts\n* package\n* 1st\n/README.md\u0005H# which\n\nLike the unix `which` utility.\n\nFinds the first instance of a specified executable in the PATH\nenvironment variable.  Does not cache the results, so `hash -r` is not\nneeded when the PATH changes.\n\n## USAGE\n\n```javascript\nvar which = require('which')\n\n// async usage\nwhich('node', function (er, resolvedPath) {\n  // er is returned if no \"node\" is found on the PATH\n  // if it is found, then the absolute path to the exec is returned\n})\n\n// or promise\nwhich('node').then(resolvedPath => { ... }).catch(er => { ... not found ... })\n\n// sync usage\n// throws if not found\nvar resolved = which.sync('node')\n\n// if nothrow option is used, returns null if not found\nresolved = which.sync('node', {nothrow: true})\n\n// Pass options to override the PATH and PATHEXT environment vars.\nwhich('node', { path: someOtherPath }, function (er, resolved) {\n  if (er)\n    throw er\n  console.log('found at %j', resolved)\n})\n```\n\n## CLI USAGE\n\nSame as the BSD `which(1)` binary.\n\n```\nusage: which [-as] program ...\n```\n\n## OPTIONS\n\nYou may pass an options object as the second argument.\n\n- `path`: Use instead of the `PATH` environment variable.\n- `pathExt`: Use instead of the `PATHEXT` environment variable.\n- `all`: Return all matches, instead of just the first one.  Note that\n  this means the function returns an array of strings instead of a\n  single string.\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/d3JhcHB5QDEuMC4y",
    "content": "/package.json\u0002^{\n  \"name\": \"wrappy\",\n  \"version\": \"1.0.2\",\n  \"description\": \"Callback wrapping utility\",\n  \"main\": \"wrappy.js\",\n  \"files\": [\n    \"wrappy.js\"\n  ],\n  \"directories\": {\n    \"test\": \"test\"\n  },\n  \"dependencies\": {},\n  \"devDependencies\": {\n    \"tap\": \"^2.3.1\"\n  },\n  \"scripts\": {\n    \"test\": \"tap --coverage test/*.js\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/npm/wrappy\"\n  },\n  \"author\": \"Isaac Z. Schlueter <i@izs.me> (http://blog.izs.me/)\",\n  \"license\": \"ISC\",\n  \"bugs\": {\n    \"url\": \"https://github.com/npm/wrappy/issues\"\n  },\n  \"homepage\": \"https://github.com/npm/wrappy\"\n}\n/README.md\u0002# wrappy\n\nCallback wrapping utility\n\n## USAGE\n\n```javascript\nvar wrappy = require(\"wrappy\")\n\n// var wrapper = wrappy(wrapperFunction)\n\n// make sure a cb is called only once\n// See also: http://npm.im/once for this specific use case\nvar once = wrappy(function (cb) {\n  var called = false\n  return function () {\n    if (called) return\n    called = true\n    return cb.apply(this, arguments)\n  }\n})\n\nfunction printBoo () {\n  console.log('boo')\n}\n// has some rando property\nprintBoo.iAmBooPrinter = true\n\nvar onlyPrintOnce = once(printBoo)\n\nonlyPrintOnce() // prints 'boo'\nonlyPrintOnce() // does nothing\n\n// random property is retained!\nassert.equal(onlyPrintOnce.iAmBooPrinter, true)\n```\n/wrappy.js\u0003// Returns a wrapper function that returns a wrapped callback\n// The wrapper function should do some stuff, and return a\n// presumably different callback function.\n// This makes sure that own properties are retained, so that\n// decorations and such are not lost along the way.\nmodule.exports = wrappy\nfunction wrappy (fn, cb) {\n  if (fn && cb) return wrappy(fn)(cb)\n\n  if (typeof fn !== 'function')\n    throw new TypeError('need wrapper function')\n\n  Object.keys(fn).forEach(function (k) {\n    wrapper[k] = fn[k]\n  })\n\n  return wrapper\n\n  function wrapper() {\n    var args = new Array(arguments.length)\n    for (var i = 0; i < args.length; i++) {\n      args[i] = arguments[i]\n    }\n    var ret = fn.apply(this, args)\n    var cb = args[args.length-1]\n    if (typeof ret === 'function' && ret !== cb) {\n      Object.keys(cb).forEach(function (k) {\n        ret[k] = cb[k]\n      })\n    }\n    return ret\n  }\n}\n/LICENSE\u0002The ISC License\n\nCopyright (c) Isaac Z. Schlueter and Contributors\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted, provided that the above\ncopyright notice and this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\nWITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\nANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\nACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR\nIN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/dG8tZmFzdC1wcm9wZXJ0aWVzQDIuMC4w",
    "content": "/readme.md\u0002# to-fast-properties [![Build Status](https://travis-ci.org/sindresorhus/to-fast-properties.svg?branch=master)](https://travis-ci.org/sindresorhus/to-fast-properties)\n\n> Force V8 to use fast properties for an object\n\n[Read more.](http://stackoverflow.com/questions/24987896/)\n\nUse `%HasFastProperties(object)` and `--allow-natives-syntax` to check whether an object already has fast properties.\n\n\n## Install\n\n```\n$ npm install --save to-fast-properties\n```\n\n\n## Usage\n\n```js\nconst toFastProperties = require('to-fast-properties');\n\nconst obj = {\n\tfoo: true,\n\tbar: true\n};\n\ndelete obj.foo;\n// `obj` now has slow properties\n\ntoFastProperties(obj);\n// `obj` now has fast properties\n```\n\n\n## License\n\nMIT © Petka Antonov, John-David Dalton, Sindre Sorhus\n/package.json\u0002{\n  \"name\": \"to-fast-properties\",\n  \"version\": \"2.0.0\",\n  \"description\": \"Force V8 to use fast properties for an object\",\n  \"license\": \"MIT\",\n  \"repository\": \"sindresorhus/to-fast-properties\",\n  \"author\": {\n    \"name\": \"Sindre Sorhus\",\n    \"email\": \"sindresorhus@gmail.com\",\n    \"url\": \"sindresorhus.com\"\n  },\n  \"engines\": {\n    \"node\": \">=4\"\n  },\n  \"scripts\": {\n    \"test\": \"node --allow-natives-syntax test.js\"\n  },\n  \"files\": [\n    \"index.js\"\n  ],\n  \"keywords\": [\n    \"object\",\n    \"obj\",\n    \"properties\",\n    \"props\",\n    \"v8\",\n    \"optimize\",\n    \"fast\",\n    \"convert\",\n    \"mode\"\n  ],\n  \"devDependencies\": {\n    \"ava\": \"0.0.4\"\n  }\n}\n/index.js\u0003'use strict';\n\nlet fastProto = null;\n\n// Creates an object with permanently fast properties in V8. See Toon Verwaest's\n// post https://medium.com/@tverwaes/setting-up-prototypes-in-v8-ec9c9491dfe2#5f62\n// for more details. Use %HasFastProperties(object) and the Node.js flag\n// --allow-natives-syntax to check whether an object has fast properties.\nfunction FastObject(o) {\n\t// A prototype object will have \"fast properties\" enabled once it is checked\n\t// against the inline property cache of a function, e.g. fastProto.property:\n\t// https://github.com/v8/v8/blob/6.0.122/test/mjsunit/fast-prototype.js#L48-L63\n\tif (fastProto !== null && typeof fastProto.property) {\n\t\tconst result = fastProto;\n\t\tfastProto = FastObject.prototype = null;\n\t\treturn result;\n\t}\n\tfastProto = FastObject.prototype = o == null ? Object.create(null) : o;\n\treturn new FastObject;\n}\n\n// Initialize the inline property cache of FastObject\nFastObject();\n\nmodule.exports = function toFastproperties(o) {\n\treturn FastObject(o);\n};\n/license\u0004OMIT License\n\nCopyright (c) 2014 Petka Antonov\n              2015 Sindre Sorhus\n\nPermission 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:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE 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.\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/dG8tcmVnZXgtcmFuZ2VANS4wLjE=",
    "content": "/LICENSE\u0004CThe MIT License (MIT)\n\nCopyright (c) 2015-present, Jon Schlinkert.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n/package.json\u0006{\n  \"name\": \"to-regex-range\",\n  \"description\": \"Pass two numbers, get a regex-compatible source string for matching ranges. Validated against more than 2.78 million test assertions.\",\n  \"version\": \"5.0.1\",\n  \"homepage\": \"https://github.com/micromatch/to-regex-range\",\n  \"author\": \"Jon Schlinkert (https://github.com/jonschlinkert)\",\n  \"contributors\": [\n    \"Jon Schlinkert (http://twitter.com/jonschlinkert)\",\n    \"Rouven Weßling (www.rouvenwessling.de)\"\n  ],\n  \"repository\": \"micromatch/to-regex-range\",\n  \"bugs\": {\n    \"url\": \"https://github.com/micromatch/to-regex-range/issues\"\n  },\n  \"license\": \"MIT\",\n  \"files\": [\n    \"index.js\"\n  ],\n  \"main\": \"index.js\",\n  \"engines\": {\n    \"node\": \">=8.0\"\n  },\n  \"scripts\": {\n    \"test\": \"mocha\"\n  },\n  \"dependencies\": {\n    \"is-number\": \"^7.0.0\"\n  },\n  \"devDependencies\": {\n    \"fill-range\": \"^6.0.0\",\n    \"gulp-format-md\": \"^2.0.0\",\n    \"mocha\": \"^6.0.2\",\n    \"text-table\": \"^0.2.0\",\n    \"time-diff\": \"^0.3.1\"\n  },\n  \"keywords\": [\n    \"bash\",\n    \"date\",\n    \"expand\",\n    \"expansion\",\n    \"expression\",\n    \"glob\",\n    \"match\",\n    \"match date\",\n    \"match number\",\n    \"match numbers\",\n    \"match year\",\n    \"matches\",\n    \"matching\",\n    \"number\",\n    \"numbers\",\n    \"numerical\",\n    \"range\",\n    \"ranges\",\n    \"regex\",\n    \"regexp\",\n    \"regular\",\n    \"regular expression\",\n    \"sequence\"\n  ],\n  \"verb\": {\n    \"layout\": \"default\",\n    \"toc\": false,\n    \"tasks\": [\n      \"readme\"\n    ],\n    \"plugins\": [\n      \"gulp-format-md\"\n    ],\n    \"lint\": {\n      \"reflinks\": true\n    },\n    \"helpers\": {\n      \"examples\": {\n        \"displayName\": \"examples\"\n      }\n    },\n    \"related\": {\n      \"list\": [\n        \"expand-range\",\n        \"fill-range\",\n        \"micromatch\",\n        \"repeat-element\",\n        \"repeat-string\"\n      ]\n    }\n  }\n}\n/index.js\u0019Q/*!\n * to-regex-range <https://github.com/micromatch/to-regex-range>\n *\n * Copyright (c) 2015-present, Jon Schlinkert.\n * Released under the MIT License.\n */\n\n'use strict';\n\nconst isNumber = require('is-number');\n\nconst toRegexRange = (min, max, options) => {\n  if (isNumber(min) === false) {\n    throw new TypeError('toRegexRange: expected the first argument to be a number');\n  }\n\n  if (max === void 0 || min === max) {\n    return String(min);\n  }\n\n  if (isNumber(max) === false) {\n    throw new TypeError('toRegexRange: expected the second argument to be a number.');\n  }\n\n  let opts = { relaxZeros: true, ...options };\n  if (typeof opts.strictZeros === 'boolean') {\n    opts.relaxZeros = opts.strictZeros === false;\n  }\n\n  let relax = String(opts.relaxZeros);\n  let shorthand = String(opts.shorthand);\n  let capture = String(opts.capture);\n  let wrap = String(opts.wrap);\n  let cacheKey = min + ':' + max + '=' + relax + shorthand + capture + wrap;\n\n  if (toRegexRange.cache.hasOwnProperty(cacheKey)) {\n    return toRegexRange.cache[cacheKey].result;\n  }\n\n  let a = Math.min(min, max);\n  let b = Math.max(min, max);\n\n  if (Math.abs(a - b) === 1) {\n    let result = min + '|' + max;\n    if (opts.capture) {\n      return `(${result})`;\n    }\n    if (opts.wrap === false) {\n      return result;\n    }\n    return `(?:${result})`;\n  }\n\n  let isPadded = hasPadding(min) || hasPadding(max);\n  let state = { min, max, a, b };\n  let positives = [];\n  let negatives = [];\n\n  if (isPadded) {\n    state.isPadded = isPadded;\n    state.maxLen = String(state.max).length;\n  }\n\n  if (a < 0) {\n    let newMin = b < 0 ? Math.abs(b) : 1;\n    negatives = splitToPatterns(newMin, Math.abs(a), state, opts);\n    a = state.a = 0;\n  }\n\n  if (b >= 0) {\n    positives = splitToPatterns(a, b, state, opts);\n  }\n\n  state.negatives = negatives;\n  state.positives = positives;\n  state.result = collatePatterns(negatives, positives, opts);\n\n  if (opts.capture === true) {\n    state.result = `(${state.result})`;\n  } else if (opts.wrap !== false && (positives.length + negatives.length) > 1) {\n    state.result = `(?:${state.result})`;\n  }\n\n  toRegexRange.cache[cacheKey] = state;\n  return state.result;\n};\n\nfunction collatePatterns(neg, pos, options) {\n  let onlyNegative = filterPatterns(neg, pos, '-', false, options) || [];\n  let onlyPositive = filterPatterns(pos, neg, '', false, options) || [];\n  let intersected = filterPatterns(neg, pos, '-?', true, options) || [];\n  let subpatterns = onlyNegative.concat(intersected).concat(onlyPositive);\n  return subpatterns.join('|');\n}\n\nfunction splitToRanges(min, max) {\n  let nines = 1;\n  let zeros = 1;\n\n  let stop = countNines(min, nines);\n  let stops = new Set([max]);\n\n  while (min <= stop && stop <= max) {\n    stops.add(stop);\n    nines += 1;\n    stop = countNines(min, nines);\n  }\n\n  stop = countZeros(max + 1, zeros) - 1;\n\n  while (min < stop && stop <= max) {\n    stops.add(stop);\n    zeros += 1;\n    stop = countZeros(max + 1, zeros) - 1;\n  }\n\n  stops = [...stops];\n  stops.sort(compare);\n  return stops;\n}\n\n/**\n * Convert a range to a regex pattern\n * @param {Number} `start`\n * @param {Number} `stop`\n * @return {String}\n */\n\nfunction rangeToPattern(start, stop, options) {\n  if (start === stop) {\n    return { pattern: start, count: [], digits: 0 };\n  }\n\n  let zipped = zip(start, stop);\n  let digits = zipped.length;\n  let pattern = '';\n  let count = 0;\n\n  for (let i = 0; i < digits; i++) {\n    let [startDigit, stopDigit] = zipped[i];\n\n    if (startDigit === stopDigit) {\n      pattern += startDigit;\n\n    } else if (startDigit !== '0' || stopDigit !== '9') {\n      pattern += toCharacterClass(startDigit, stopDigit, options);\n\n    } else {\n      count++;\n    }\n  }\n\n  if (count) {\n    pattern += options.shorthand === true ? '\\\\d' : '[0-9]';\n  }\n\n  return { pattern, count: [count], digits };\n}\n\nfunction splitToPatterns(min, max, tok, options) {\n  let ranges = splitToRanges(min, max);\n  let tokens = [];\n  let start = min;\n  let prev;\n\n  for (let i = 0; i < ranges.length; i++) {\n    let max = ranges[i];\n    let obj = rangeToPattern(String(start), String(max), options);\n    let zeros = '';\n\n    if (!tok.isPadded && prev && prev.pattern === obj.pattern) {\n      if (prev.count.length > 1) {\n        prev.count.pop();\n      }\n\n      prev.count.push(obj.count[0]);\n      prev.string = prev.pattern + toQuantifier(prev.count);\n      start = max + 1;\n      continue;\n    }\n\n    if (tok.isPadded) {\n      zeros = padZeros(max, tok, options);\n    }\n\n    obj.string = zeros + obj.pattern + toQuantifier(obj.count);\n    tokens.push(obj);\n    start = max + 1;\n    prev = obj;\n  }\n\n  return tokens;\n}\n\nfunction filterPatterns(arr, comparison, prefix, intersection, options) {\n  let result = [];\n\n  for (let ele of arr) {\n    let { string } = ele;\n\n    // only push if _both_ are negative...\n    if (!intersection && !contains(comparison, 'string', string)) {\n      result.push(prefix + string);\n    }\n\n    // or _both_ are positive\n    if (intersection && contains(comparison, 'string', string)) {\n      result.push(prefix + string);\n    }\n  }\n  return result;\n}\n\n/**\n * Zip strings\n */\n\nfunction zip(a, b) {\n  let arr = [];\n  for (let i = 0; i < a.length; i++) arr.push([a[i], b[i]]);\n  return arr;\n}\n\nfunction compare(a, b) {\n  return a > b ? 1 : b > a ? -1 : 0;\n}\n\nfunction contains(arr, key, val) {\n  return arr.some(ele => ele[key] === val);\n}\n\nfunction countNines(min, len) {\n  return Number(String(min).slice(0, -len) + '9'.repeat(len));\n}\n\nfunction countZeros(integer, zeros) {\n  return integer - (integer % Math.pow(10, zeros));\n}\n\nfunction toQuantifier(digits) {\n  let [start = 0, stop = ''] = digits;\n  if (stop || start > 1) {\n    return `{${start + (stop ? ',' + stop : '')}}`;\n  }\n  return '';\n}\n\nfunction toCharacterClass(a, b, options) {\n  return `[${a}${(b - a === 1) ? '' : '-'}${b}]`;\n}\n\nfunction hasPadding(str) {\n  return /^-?(0+)\\d/.test(str);\n}\n\nfunction padZeros(value, tok, options) {\n  if (!tok.isPadded) {\n    return value;\n  }\n\n  let diff = Math.abs(tok.maxLen - String(value).length);\n  let relax = options.relaxZeros !== false;\n\n  switch (diff) {\n    case 0:\n      return '';\n    case 1:\n      return relax ? '0?' : '0';\n    case 2:\n      return relax ? '0{0,2}' : '00';\n    default: {\n      return relax ? `0{0,${diff}}` : `0{${diff}}`;\n    }\n  }\n}\n\n/**\n * Cache\n */\n\ntoRegexRange.cache = {};\ntoRegexRange.clearCache = () => (toRegexRange.cache = {});\n\n/**\n * Expose `toRegexRange`\n */\n\nmodule.exports = toRegexRange;\n/README.md5\u0011# to-regex-range [![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=W8YFZ425KND68) [![NPM version](https://img.shields.io/npm/v/to-regex-range.svg?style=flat)](https://www.npmjs.com/package/to-regex-range) [![NPM monthly downloads](https://img.shields.io/npm/dm/to-regex-range.svg?style=flat)](https://npmjs.org/package/to-regex-range) [![NPM total downloads](https://img.shields.io/npm/dt/to-regex-range.svg?style=flat)](https://npmjs.org/package/to-regex-range) [![Linux Build Status](https://img.shields.io/travis/micromatch/to-regex-range.svg?style=flat&label=Travis)](https://travis-ci.org/micromatch/to-regex-range)\n\n> Pass two numbers, get a regex-compatible source string for matching ranges. Validated against more than 2.78 million test assertions.\n\nPlease consider following this project's author, [Jon Schlinkert](https://github.com/jonschlinkert), and consider starring the project to show your :heart: and support.\n\n## Install\n\nInstall with [npm](https://www.npmjs.com/):\n\n```sh\n$ npm install --save to-regex-range\n```\n\n<details>\n<summary><strong>What does this do?</strong></summary>\n\n<br>\n\nThis libary generates the `source` string to be passed to `new RegExp()` for matching a range of numbers.\n\n**Example**\n\n```js\nconst toRegexRange = require('to-regex-range');\nconst regex = new RegExp(toRegexRange('15', '95'));\n```\n\nA string is returned so that you can do whatever you need with it before passing it to `new RegExp()` (like adding `^` or `$` boundaries, defining flags, or combining it another string).\n\n<br>\n\n</details>\n\n<details>\n<summary><strong>Why use this library?</strong></summary>\n\n<br>\n\n### Convenience\n\nCreating regular expressions for matching numbers gets deceptively complicated pretty fast.\n\nFor example, let's say you need a validation regex for matching part of a user-id, postal code, social security number, tax id, etc:\n\n* regex for matching `1` => `/1/` (easy enough)\n* regex for matching `1` through `5` => `/[1-5]/` (not bad...)\n* regex for matching `1` or `5` => `/(1|5)/` (still easy...)\n* regex for matching `1` through `50` => `/([1-9]|[1-4][0-9]|50)/` (uh-oh...)\n* regex for matching `1` through `55` => `/([1-9]|[1-4][0-9]|5[0-5])/` (no prob, I can do this...)\n* regex for matching `1` through `555` => `/([1-9]|[1-9][0-9]|[1-4][0-9]{2}|5[0-4][0-9]|55[0-5])/` (maybe not...)\n* regex for matching `0001` through `5555` => `/(0{3}[1-9]|0{2}[1-9][0-9]|0[1-9][0-9]{2}|[1-4][0-9]{3}|5[0-4][0-9]{2}|55[0-4][0-9]|555[0-5])/` (okay, I get the point!)\n\nThe numbers are contrived, but they're also really basic. In the real world you might need to generate a regex on-the-fly for validation.\n\n**Learn more**\n\nIf you're interested in learning more about [character classes](http://www.regular-expressions.info/charclass.html) and other regex features, I personally have always found [regular-expressions.info](http://www.regular-expressions.info/charclass.html) to be pretty useful.\n\n### Heavily tested\n\nAs of April 07, 2019, this library runs [>1m test assertions](./test/test.js) against generated regex-ranges to provide brute-force verification that results are correct.\n\nTests run in ~280ms on my MacBook Pro, 2.5 GHz Intel Core i7.\n\n### Optimized\n\nGenerated regular expressions are optimized:\n\n* duplicate sequences and character classes are reduced using quantifiers\n* smart enough to use `?` conditionals when number(s) or range(s) can be positive or negative\n* uses fragment caching to avoid processing the same exact string more than once\n\n<br>\n\n</details>\n\n## Usage\n\nAdd this library to your javascript application with the following line of code\n\n```js\nconst toRegexRange = require('to-regex-range');\n```\n\nThe main export is a function that takes two integers: the `min` value and `max` value (formatted as strings or numbers).\n\n```js\nconst source = toRegexRange('15', '95');\n//=> 1[5-9]|[2-8][0-9]|9[0-5]\n\nconst regex = new RegExp(`^${source}$`);\nconsole.log(regex.test('14')); //=> false\nconsole.log(regex.test('50')); //=> true\nconsole.log(regex.test('94')); //=> true\nconsole.log(regex.test('96')); //=> false\n```\n\n## Options\n\n### options.capture\n\n**Type**: `boolean`\n\n**Deafault**: `undefined`\n\nWrap the returned value in parentheses when there is more than one regex condition. Useful when you're dynamically generating ranges.\n\n```js\nconsole.log(toRegexRange('-10', '10'));\n//=> -[1-9]|-?10|[0-9]\n\nconsole.log(toRegexRange('-10', '10', { capture: true }));\n//=> (-[1-9]|-?10|[0-9])\n```\n\n### options.shorthand\n\n**Type**: `boolean`\n\n**Deafault**: `undefined`\n\nUse the regex shorthand for `[0-9]`:\n\n```js\nconsole.log(toRegexRange('0', '999999'));\n//=> [0-9]|[1-9][0-9]{1,5}\n\nconsole.log(toRegexRange('0', '999999', { shorthand: true }));\n//=> \\d|[1-9]\\d{1,5}\n```\n\n### options.relaxZeros\n\n**Type**: `boolean`\n\n**Default**: `true`\n\nThis option relaxes matching for leading zeros when when ranges are zero-padded.\n\n```js\nconst source = toRegexRange('-0010', '0010');\nconst regex = new RegExp(`^${source}$`);\nconsole.log(regex.test('-10')); //=> true\nconsole.log(regex.test('-010')); //=> true\nconsole.log(regex.test('-0010')); //=> true\nconsole.log(regex.test('10')); //=> true\nconsole.log(regex.test('010')); //=> true\nconsole.log(regex.test('0010')); //=> true\n```\n\nWhen `relaxZeros` is false, matching is strict:\n\n```js\nconst source = toRegexRange('-0010', '0010', { relaxZeros: false });\nconst regex = new RegExp(`^${source}$`);\nconsole.log(regex.test('-10')); //=> false\nconsole.log(regex.test('-010')); //=> false\nconsole.log(regex.test('-0010')); //=> true\nconsole.log(regex.test('10')); //=> false\nconsole.log(regex.test('010')); //=> false\nconsole.log(regex.test('0010')); //=> true\n```\n\n## Examples\n\n| **Range**                   | **Result**                                                                      | **Compile time** |\n| ---                         | ---                                                                             | ---              |\n| `toRegexRange(-10, 10)`     | `-[1-9]\\|-?10\\|[0-9]`                                                           | _132μs_          |\n| `toRegexRange(-100, -10)`   | `-1[0-9]\\|-[2-9][0-9]\\|-100`                                                    | _50μs_           |\n| `toRegexRange(-100, 100)`   | `-[1-9]\\|-?[1-9][0-9]\\|-?100\\|[0-9]`                                            | _42μs_           |\n| `toRegexRange(001, 100)`    | `0{0,2}[1-9]\\|0?[1-9][0-9]\\|100`                                                | _109μs_          |\n| `toRegexRange(001, 555)`    | `0{0,2}[1-9]\\|0?[1-9][0-9]\\|[1-4][0-9]{2}\\|5[0-4][0-9]\\|55[0-5]`                | _51μs_           |\n| `toRegexRange(0010, 1000)`  | `0{0,2}1[0-9]\\|0{0,2}[2-9][0-9]\\|0?[1-9][0-9]{2}\\|1000`                         | _31μs_           |\n| `toRegexRange(1, 50)`       | `[1-9]\\|[1-4][0-9]\\|50`                                                         | _24μs_           |\n| `toRegexRange(1, 55)`       | `[1-9]\\|[1-4][0-9]\\|5[0-5]`                                                     | _23μs_           |\n| `toRegexRange(1, 555)`      | `[1-9]\\|[1-9][0-9]\\|[1-4][0-9]{2}\\|5[0-4][0-9]\\|55[0-5]`                        | _30μs_           |\n| `toRegexRange(1, 5555)`     | `[1-9]\\|[1-9][0-9]{1,2}\\|[1-4][0-9]{3}\\|5[0-4][0-9]{2}\\|55[0-4][0-9]\\|555[0-5]` | _43μs_           |\n| `toRegexRange(111, 555)`    | `11[1-9]\\|1[2-9][0-9]\\|[2-4][0-9]{2}\\|5[0-4][0-9]\\|55[0-5]`                     | _38μs_           |\n| `toRegexRange(29, 51)`      | `29\\|[34][0-9]\\|5[01]`                                                          | _24μs_           |\n| `toRegexRange(31, 877)`     | `3[1-9]\\|[4-9][0-9]\\|[1-7][0-9]{2}\\|8[0-6][0-9]\\|87[0-7]`                       | _32μs_           |\n| `toRegexRange(5, 5)`        | `5`                                                                             | _8μs_            |\n| `toRegexRange(5, 6)`        | `5\\|6`                                                                          | _11μs_           |\n| `toRegexRange(1, 2)`        | `1\\|2`                                                                          | _6μs_            |\n| `toRegexRange(1, 5)`        | `[1-5]`                                                                         | _15μs_           |\n| `toRegexRange(1, 10)`       | `[1-9]\\|10`                                                                     | _22μs_           |\n| `toRegexRange(1, 100)`      | `[1-9]\\|[1-9][0-9]\\|100`                                                        | _25μs_           |\n| `toRegexRange(1, 1000)`     | `[1-9]\\|[1-9][0-9]{1,2}\\|1000`                                                  | _31μs_           |\n| `toRegexRange(1, 10000)`    | `[1-9]\\|[1-9][0-9]{1,3}\\|10000`                                                 | _34μs_           |\n| `toRegexRange(1, 100000)`   | `[1-9]\\|[1-9][0-9]{1,4}\\|100000`                                                | _36μs_           |\n| `toRegexRange(1, 1000000)`  | `[1-9]\\|[1-9][0-9]{1,5}\\|1000000`                                               | _42μs_           |\n| `toRegexRange(1, 10000000)` | `[1-9]\\|[1-9][0-9]{1,6}\\|10000000`                                              | _42μs_           |\n\n## Heads up!\n\n**Order of arguments**\n\nWhen the `min` is larger than the `max`, values will be flipped to create a valid range:\n\n```js\ntoRegexRange('51', '29');\n```\n\nIs effectively flipped to:\n\n```js\ntoRegexRange('29', '51');\n//=> 29|[3-4][0-9]|5[0-1]\n```\n\n**Steps / increments**\n\nThis library does not support steps (increments). A pr to add support would be welcome.\n\n## History\n\n### v2.0.0 - 2017-04-21\n\n**New features**\n\nAdds support for zero-padding!\n\n### v1.0.0\n\n**Optimizations**\n\nRepeating ranges are now grouped using quantifiers. rocessing time is roughly the same, but the generated regex is much smaller, which should result in faster matching.\n\n## Attribution\n\nInspired by the python library [range-regex](https://github.com/dimka665/range-regex).\n\n## About\n\n<details>\n<summary><strong>Contributing</strong></summary>\n\nPull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).\n\n</details>\n\n<details>\n<summary><strong>Running Tests</strong></summary>\n\nRunning and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:\n\n```sh\n$ npm install && npm test\n```\n\n</details>\n\n<details>\n<summary><strong>Building docs</strong></summary>\n\n_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_\n\nTo generate the readme, run the following command:\n\n```sh\n$ npm install -g verbose/verb#dev verb-generate-readme && verb\n```\n\n</details>\n\n### Related projects\n\nYou might also be interested in these projects:\n\n* [expand-range](https://www.npmjs.com/package/expand-range): Fast, bash-like range expansion. Expand a range of numbers or letters, uppercase or lowercase. Used… [more](https://github.com/jonschlinkert/expand-range) | [homepage](https://github.com/jonschlinkert/expand-range \"Fast, bash-like range expansion. Expand a range of numbers or letters, uppercase or lowercase. Used by micromatch.\")\n* [fill-range](https://www.npmjs.com/package/fill-range): Fill in a range of numbers or letters, optionally passing an increment or `step` to… [more](https://github.com/jonschlinkert/fill-range) | [homepage](https://github.com/jonschlinkert/fill-range \"Fill in a range of numbers or letters, optionally passing an increment or `step` to use, or create a regex-compatible range with `options.toRegex`\")\n* [micromatch](https://www.npmjs.com/package/micromatch): Glob matching for javascript/node.js. A drop-in replacement and faster alternative to minimatch and multimatch. | [homepage](https://github.com/micromatch/micromatch \"Glob matching for javascript/node.js. A drop-in replacement and faster alternative to minimatch and multimatch.\")\n* [repeat-element](https://www.npmjs.com/package/repeat-element): Create an array by repeating the given value n times. | [homepage](https://github.com/jonschlinkert/repeat-element \"Create an array by repeating the given value n times.\")\n* [repeat-string](https://www.npmjs.com/package/repeat-string): Repeat the given string n times. Fastest implementation for repeating a string. | [homepage](https://github.com/jonschlinkert/repeat-string \"Repeat the given string n times. Fastest implementation for repeating a string.\")\n\n### Contributors\n\n| **Commits** | **Contributor** |  \n| --- | --- |  \n| 63 | [jonschlinkert](https://github.com/jonschlinkert) |  \n| 3  | [doowb](https://github.com/doowb) |  \n| 2  | [realityking](https://github.com/realityking) |  \n\n### Author\n\n**Jon Schlinkert**\n\n* [GitHub Profile](https://github.com/jonschlinkert)\n* [Twitter Profile](https://twitter.com/jonschlinkert)\n* [LinkedIn Profile](https://linkedin.com/in/jonschlinkert)\n\nPlease consider supporting me on Patreon, or [start your own Patreon page](https://patreon.com/invite/bxpbvm)!\n\n<a href=\"https://www.patreon.com/jonschlinkert\">\n<img src=\"https://c5.patreon.com/external/logo/become_a_patron_button@2x.png\" height=\"50\">\n</a>\n\n### License\n\nCopyright © 2019, [Jon Schlinkert](https://github.com/jonschlinkert).\nReleased under the [MIT License](LICENSE).\n\n***\n\n_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.8.0, on April 07, 2019._"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/dG9pZGVudGlmaWVyQDEuMC4x",
    "content": "/README.md\u0007\u000b# toidentifier\n\n[![NPM Version][npm-image]][npm-url]\n[![NPM Downloads][downloads-image]][downloads-url]\n[![Build Status][github-actions-ci-image]][github-actions-ci-url]\n[![Test Coverage][codecov-image]][codecov-url]\n\n> Convert a string of words to a JavaScript identifier\n\n## Install\n\nThis is a [Node.js](https://nodejs.org/en/) module available through the\n[npm registry](https://www.npmjs.com/). Installation is done using the\n[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally):\n\n```bash\n$ npm install toidentifier\n```\n\n## Example\n\n```js\nvar toIdentifier = require('toidentifier')\n\nconsole.log(toIdentifier('Bad Request'))\n// => \"BadRequest\"\n```\n\n## API\n\nThis CommonJS module exports a single default function: `toIdentifier`.\n\n### toIdentifier(string)\n\nGiven a string as the argument, it will be transformed according to\nthe following rules and the new string will be returned:\n\n1. Split into words separated by space characters (`0x20`).\n2. Upper case the first character of each word.\n3. Join the words together with no separator.\n4. Remove all non-word (`[0-9a-z_]`) characters.\n\n## License\n\n[MIT](LICENSE)\n\n[codecov-image]: https://img.shields.io/codecov/c/github/component/toidentifier.svg\n[codecov-url]: https://codecov.io/gh/component/toidentifier\n[downloads-image]: https://img.shields.io/npm/dm/toidentifier.svg\n[downloads-url]: https://npmjs.org/package/toidentifier\n[github-actions-ci-image]: https://img.shields.io/github/workflow/status/component/toidentifier/ci/master?label=ci\n[github-actions-ci-url]: https://github.com/component/toidentifier?query=workflow%3Aci\n[npm-image]: https://img.shields.io/npm/v/toidentifier.svg\n[npm-url]: https://npmjs.org/package/toidentifier\n\n\n##\n\n[npm]: https://www.npmjs.com/\n\n[yarn]: https://yarnpkg.com/\n/package.json\u0004v{\n  \"name\": \"toidentifier\",\n  \"description\": \"Convert a string of words to a JavaScript identifier\",\n  \"version\": \"1.0.1\",\n  \"author\": \"Douglas Christopher Wilson <doug@somethingdoug.com>\",\n  \"contributors\": [\n    \"Douglas Christopher Wilson <doug@somethingdoug.com>\",\n    \"Nick Baugh <niftylettuce@gmail.com> (http://niftylettuce.com/)\"\n  ],\n  \"repository\": \"component/toidentifier\",\n  \"devDependencies\": {\n    \"eslint\": \"7.32.0\",\n    \"eslint-config-standard\": \"14.1.1\",\n    \"eslint-plugin-import\": \"2.25.3\",\n    \"eslint-plugin-markdown\": \"2.2.1\",\n    \"eslint-plugin-node\": \"11.1.0\",\n    \"eslint-plugin-promise\": \"4.3.1\",\n    \"eslint-plugin-standard\": \"4.1.0\",\n    \"mocha\": \"9.1.3\",\n    \"nyc\": \"15.1.0\"\n  },\n  \"engines\": {\n    \"node\": \">=0.6\"\n  },\n  \"license\": \"MIT\",\n  \"files\": [\n    \"HISTORY.md\",\n    \"LICENSE\",\n    \"index.js\"\n  ],\n  \"scripts\": {\n    \"lint\": \"eslint .\",\n    \"test\": \"mocha --reporter spec --bail --check-leaks test/\",\n    \"test-ci\": \"nyc --reporter=lcov --reporter=text npm test\",\n    \"test-cov\": \"nyc --reporter=html --reporter=text npm test\",\n    \"version\": \"node scripts/version-history.js && git add HISTORY.md\"\n  }\n}\n/index.js\u0001/*!\n * toidentifier\n * Copyright(c) 2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = toIdentifier\n\n/**\n * Trasform the given string into a JavaScript identifier\n *\n * @param {string} str\n * @returns {string}\n * @public\n */\n\nfunction toIdentifier (str) {\n  return str\n    .split(' ')\n    .map(function (token) {\n      return token.slice(0, 1).toUpperCase() + token.slice(1)\n    })\n    .join('')\n    .replace(/[^ _0-9a-z]/gi, '')\n}\n/HISTORY.mdĀ1.0.1 / 2021-11-14\n==================\n\n  * pref: enable strict mode\n\n1.0.0 / 2018-07-09\n==================\n\n  * Initial release\n/LICENSE\u0004TMIT License\n\nCopyright (c) 2016 Douglas Christopher Wilson <doug@somethingdoug.com>\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/dGlueS1scnVAMTAuMi4y",
    "content": "/README.md\u000bl# Tiny LRU\r\n\r\nLeast Recently Used cache for Client or Server.\r\n\r\n```javascript\r\nimport {lru} from \"tiny-lru\";\r\nconst cache = lru(max, ttl = 0, resetTtl = false);\r\n```\r\n\r\nLodash provides a `memoize` function with a cache that can be swapped out as long as it implements the right interface.\r\nSee the [lodash docs](https://lodash.com/docs#memoize) for more on `memoize`.\r\n\r\n#### Example\r\n```javascript\r\n_.memoize.Cache = lru().constructor;\r\nconst memoized = _.memoize(myFunc);\r\nmemoized.cache.max = 10;\r\n```\r\n\r\n## clear\r\n### Method\r\n\r\nClears the contents of the cache\r\n\r\n\treturn {Object} LRU instance\r\n\r\n**Example**\r\n\r\n```javascript\r\ncache.clear();\r\n```\r\n\r\n## delete\r\n### Method\r\n\r\nRemoves item from cache\r\n\r\n\tparam  {String} key Item key\r\n\treturn {Object}     LRU instance\r\n\r\n**Example**\r\n\r\n```javascript\r\ncache.delete(\"myKey\");\r\n```\r\n\r\n## evict\r\n### Method\r\n\r\nEvicts the least recently used item from cache\r\n\r\n\treturn {Object} LRU instance\r\n\r\n**Example**\r\n\r\n```javascript\r\ncache.evict();\r\n```\r\n\r\n## expiresAt\r\n### Method\r\n\r\nGets expiration time for cached item\r\n\r\n\tparam  {String} key Item key\r\n\treturn {Mixed}      Undefined or number (epoch time)\r\n\r\n**Example**\r\n\r\n```javascript\r\nconst item = cache.expiresAt(\"myKey\");\r\n```\r\n\r\n## first\r\n### Property\r\n\r\nItem in \"first\" or \"bottom\" position\r\n\r\n**Example**\r\n\r\n```javascript\r\nconst cache = lru();\r\n\r\ncache.first; // null - it's a new cache!\r\n```\r\n\r\n## get\r\n### Method\r\n\r\nGets cached item and moves it to the front\r\n\r\n\tparam  {String} key Item key\r\n\treturn {Mixed}      Undefined or Item value\r\n\r\n**Example**\r\n\r\n```javascript\r\nconst item = cache.get(\"myKey\");\r\n```\r\n\r\n## keys\r\n### Method\r\n\r\nReturns an `Array` of cache item keys.\r\n\r\n\treturn {Array} Array of keys\r\n\r\n**Example**\r\n\r\n```javascript\r\nconsole.log(cache.keys());\r\n```\r\n\r\n## max\r\n### Property\r\n\r\nMax items to hold in cache (1000)\r\n\r\n**Example**\r\n\r\n```javascript\r\nconst cache = lru(500);\r\n\r\ncache.max; // 500\r\n```\r\n\r\n## last\r\n### Property\r\n\r\nItem in \"last\" or \"top\" position\r\n\r\n**Example**\r\n\r\n```javascript\r\nconst cache = lru();\r\n\r\ncache.last; // null - it's a new cache!\r\n```\r\n\r\n## resetTtl\r\n### Property\r\n\r\nResets `item.expiry` with each `set()` if `true` (false)\r\n\r\n**Example**\r\n\r\n```javascript\r\nconst cache = lru();\r\n\r\ncache.resetTtl; // false\r\n```\r\n\r\n## set\r\n### Method\r\n\r\nSets item in cache as `first`\r\n\r\n\tparam  {String} key   Item key\r\n\tparam  {Mixed}  value Item value\r\n\treturn {Object}       LRU instance\r\n\r\n**Example**\r\n\r\n```javascript\r\ncache.set(\"myKey\", {prop: true});\r\n```\r\n\r\n## size\r\n### Property\r\n\r\nNumber of items in cache\r\n\r\n**Example**\r\n\r\n```javascript\r\nconst cache = lru();\r\n\r\ncache.size; // 0 - it's a new cache!\r\n```\r\n\r\n## ttl\r\n### Property\r\n\r\nMilliseconds an item will remain in cache; lazy expiration upon next `get()` of an item\r\n\r\n**Example**\r\n\r\n```javascript\r\nconst cache = lru();\r\n\r\ncache.ttl = 3e4;\r\n```\r\n\r\n## License\r\nCopyright (c) 2023 Jason Mulligan\r\nLicensed under the BSD-3 license.\r\n/dist/tiny-lru.min.js.map\u0019{\"version\":3,\"file\":\"tiny-lru.min.js\",\"sources\":[\"../src/lru.js\"],\"sourcesContent\":[\"class LRU {\\r\\n\\tconstructor (max = 0, ttl = 0, resetTtl = false) {\\r\\n\\t\\tthis.first = null;\\r\\n\\t\\tthis.items = Object.create(null);\\r\\n\\t\\tthis.last = null;\\r\\n\\t\\tthis.max = max;\\r\\n\\t\\tthis.resetTtl = resetTtl;\\r\\n\\t\\tthis.size = 0;\\r\\n\\t\\tthis.ttl = ttl;\\r\\n\\t}\\r\\n\\r\\n\\t#has (key) {\\r\\n\\t\\treturn key in this.items;\\r\\n\\t}\\r\\n\\r\\n\\tclear () {\\r\\n\\t\\tthis.first = null;\\r\\n\\t\\tthis.items = Object.create(null);\\r\\n\\t\\tthis.last = null;\\r\\n\\t\\tthis.size = 0;\\r\\n\\r\\n\\t\\treturn this;\\r\\n\\t}\\r\\n\\r\\n\\tdelete (key) {\\r\\n\\t\\tif (this.#has(key)) {\\r\\n\\t\\t\\tconst item = this.items[key];\\r\\n\\r\\n\\t\\t\\tdelete this.items[key];\\r\\n\\t\\t\\tthis.size--;\\r\\n\\r\\n\\t\\t\\tif (item.prev !== null) {\\r\\n\\t\\t\\t\\titem.prev.next = item.next;\\r\\n\\t\\t\\t}\\r\\n\\r\\n\\t\\t\\tif (item.next !== null) {\\r\\n\\t\\t\\t\\titem.next.prev = item.prev;\\r\\n\\t\\t\\t}\\r\\n\\r\\n\\t\\t\\tif (this.first === item) {\\r\\n\\t\\t\\t\\tthis.first = item.next;\\r\\n\\t\\t\\t}\\r\\n\\r\\n\\t\\t\\tif (this.last === item) {\\r\\n\\t\\t\\t\\tthis.last = item.prev;\\r\\n\\t\\t\\t}\\r\\n\\t\\t}\\r\\n\\r\\n\\t\\treturn this;\\r\\n\\t}\\r\\n\\r\\n\\tevict (bypass = false) {\\r\\n\\t\\tif (bypass || this.size > 0) {\\r\\n\\t\\t\\tconst item = this.first;\\r\\n\\r\\n\\t\\t\\tdelete this.items[item.key];\\r\\n\\t\\t\\tthis.size--;\\r\\n\\r\\n\\t\\t\\tif (this.size === 0) {\\r\\n\\t\\t\\t\\tthis.first = null;\\r\\n\\t\\t\\t\\tthis.last = null;\\r\\n\\t\\t\\t} else {\\r\\n\\t\\t\\t\\tthis.first = item.next;\\r\\n\\t\\t\\t\\tthis.first.prev = null;\\r\\n\\t\\t\\t}\\r\\n\\t\\t}\\r\\n\\r\\n\\t\\treturn this;\\r\\n\\t}\\r\\n\\r\\n\\tget (key) {\\r\\n\\t\\tlet result;\\r\\n\\r\\n\\t\\tif (this.#has(key)) {\\r\\n\\t\\t\\tconst item = this.items[key];\\r\\n\\r\\n\\t\\t\\tif (this.ttl > 0 && item.expiry <= Date.now()) {\\r\\n\\t\\t\\t\\tthis.delete(key);\\r\\n\\t\\t\\t} else {\\r\\n\\t\\t\\t\\tresult = item.value;\\r\\n\\t\\t\\t\\tthis.set(key, result, true);\\r\\n\\t\\t\\t}\\r\\n\\t\\t}\\r\\n\\r\\n\\t\\treturn result;\\r\\n\\t}\\r\\n\\r\\n\\texpiresAt (key) {\\r\\n\\t\\tlet result;\\r\\n\\r\\n\\t\\tif (this.#has(key)) {\\r\\n\\t\\t\\tresult = this.items[key].expiry;\\r\\n\\t\\t}\\r\\n\\r\\n\\t\\treturn result;\\r\\n\\t}\\r\\n\\r\\n\\tkeys () {\\r\\n\\t\\treturn Object.keys(this.items);\\r\\n\\t}\\r\\n\\r\\n\\tset (key, value, bypass = false, resetTtl = this.resetTtl) {\\r\\n\\t\\tlet item;\\r\\n\\r\\n\\t\\tif (bypass || this.#has(key)) {\\r\\n\\t\\t\\titem = this.items[key];\\r\\n\\t\\t\\titem.value = value;\\r\\n\\r\\n\\t\\t\\tif (resetTtl) {\\r\\n\\t\\t\\t\\titem.expiry = this.ttl > 0 ? Date.now() + this.ttl : this.ttl;\\r\\n\\t\\t\\t}\\r\\n\\r\\n\\t\\t\\tif (this.last !== item) {\\r\\n\\t\\t\\t\\tconst last = this.last,\\r\\n\\t\\t\\t\\t\\tnext = item.next,\\r\\n\\t\\t\\t\\t\\tprev = item.prev;\\r\\n\\r\\n\\t\\t\\t\\tif (this.first === item) {\\r\\n\\t\\t\\t\\t\\tthis.first = item.next;\\r\\n\\t\\t\\t\\t}\\r\\n\\r\\n\\t\\t\\t\\titem.next = null;\\r\\n\\t\\t\\t\\titem.prev = this.last;\\r\\n\\t\\t\\t\\tlast.next = item;\\r\\n\\r\\n\\t\\t\\t\\tif (prev !== null) {\\r\\n\\t\\t\\t\\t\\tprev.next = next;\\r\\n\\t\\t\\t\\t}\\r\\n\\r\\n\\t\\t\\t\\tif (next !== null) {\\r\\n\\t\\t\\t\\t\\tnext.prev = prev;\\r\\n\\t\\t\\t\\t}\\r\\n\\t\\t\\t}\\r\\n\\t\\t} else {\\r\\n\\t\\t\\tif (this.max > 0 && this.size === this.max) {\\r\\n\\t\\t\\t\\tthis.evict(true);\\r\\n\\t\\t\\t}\\r\\n\\r\\n\\t\\t\\titem = this.items[key] = {\\r\\n\\t\\t\\t\\texpiry: this.ttl > 0 ? Date.now() + this.ttl : this.ttl,\\r\\n\\t\\t\\t\\tkey: key,\\r\\n\\t\\t\\t\\tprev: this.last,\\r\\n\\t\\t\\t\\tnext: null,\\r\\n\\t\\t\\t\\tvalue\\r\\n\\t\\t\\t};\\r\\n\\r\\n\\t\\t\\tif (++this.size === 1) {\\r\\n\\t\\t\\t\\tthis.first = item;\\r\\n\\t\\t\\t} else {\\r\\n\\t\\t\\t\\tthis.last.next = item;\\r\\n\\t\\t\\t}\\r\\n\\t\\t}\\r\\n\\r\\n\\t\\tthis.last = item;\\r\\n\\r\\n\\t\\treturn this;\\r\\n\\t}\\r\\n}\\r\\n\\r\\nexport function lru (max = 1000, ttl = 0, resetTtl = false) {\\r\\n\\tif (isNaN(max) || max < 0) {\\r\\n\\t\\tthrow new TypeError(\\\"Invalid max value\\\");\\r\\n\\t}\\r\\n\\r\\n\\tif (isNaN(ttl) || ttl < 0) {\\r\\n\\t\\tthrow new TypeError(\\\"Invalid ttl value\\\");\\r\\n\\t}\\r\\n\\r\\n\\tif (typeof resetTtl !== \\\"boolean\\\") {\\r\\n\\t\\tthrow new TypeError(\\\"Invalid resetTtl value\\\");\\r\\n\\t}\\r\\n\\r\\n\\treturn new LRU(max, ttl, resetTtl);\\r\\n}\\r\\n\"],\"names\":[\"g\",\"f\",\"exports\",\"module\",\"define\",\"amd\",\"globalThis\",\"self\",\"lru\",\"this\",\"LRU\",\"constructor\",\"max\",\"ttl\",\"resetTtl\",\"first\",\"items\",\"Object\",\"create\",\"last\",\"size\",\"has\",\"key\",\"clear\",\"delete\",\"item\",\"prev\",\"next\",\"evict\",\"bypass\",\"get\",\"result\",\"expiry\",\"Date\",\"now\",\"value\",\"set\",\"expiresAt\",\"keys\",\"isNaN\",\"TypeError\"],\"mappings\":\"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\"}/dist/tiny-lru.js\rv/**\n * tiny-lru\n *\n * @copyright 2023 Jason Mulligan <jason.mulligan@avoidwork.com>\n * @license BSD-3-Clause\n * @version 10.2.2\n */\n(function(g,f){typeof exports==='object'&&typeof module!=='undefined'?f(exports):typeof define==='function'&&define.amd?define(['exports'],f):(g=typeof globalThis!=='undefined'?globalThis:g||self,f(g.lru={}));})(this,(function(exports){'use strict';class LRU {\r\n\tconstructor (max = 0, ttl = 0, resetTtl = false) {\r\n\t\tthis.first = null;\r\n\t\tthis.items = Object.create(null);\r\n\t\tthis.last = null;\r\n\t\tthis.max = max;\r\n\t\tthis.resetTtl = resetTtl;\r\n\t\tthis.size = 0;\r\n\t\tthis.ttl = ttl;\r\n\t}\r\n\r\n\t#has (key) {\r\n\t\treturn key in this.items;\r\n\t}\r\n\r\n\tclear () {\r\n\t\tthis.first = null;\r\n\t\tthis.items = Object.create(null);\r\n\t\tthis.last = null;\r\n\t\tthis.size = 0;\r\n\r\n\t\treturn this;\r\n\t}\r\n\r\n\tdelete (key) {\r\n\t\tif (this.#has(key)) {\r\n\t\t\tconst item = this.items[key];\r\n\r\n\t\t\tdelete this.items[key];\r\n\t\t\tthis.size--;\r\n\r\n\t\t\tif (item.prev !== null) {\r\n\t\t\t\titem.prev.next = item.next;\r\n\t\t\t}\r\n\r\n\t\t\tif (item.next !== null) {\r\n\t\t\t\titem.next.prev = item.prev;\r\n\t\t\t}\r\n\r\n\t\t\tif (this.first === item) {\r\n\t\t\t\tthis.first = item.next;\r\n\t\t\t}\r\n\r\n\t\t\tif (this.last === item) {\r\n\t\t\t\tthis.last = item.prev;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t}\r\n\r\n\tevict (bypass = false) {\r\n\t\tif (bypass || this.size > 0) {\r\n\t\t\tconst item = this.first;\r\n\r\n\t\t\tdelete this.items[item.key];\r\n\t\t\tthis.size--;\r\n\r\n\t\t\tif (this.size === 0) {\r\n\t\t\t\tthis.first = null;\r\n\t\t\t\tthis.last = null;\r\n\t\t\t} else {\r\n\t\t\t\tthis.first = item.next;\r\n\t\t\t\tthis.first.prev = null;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t}\r\n\r\n\tget (key) {\r\n\t\tlet result;\r\n\r\n\t\tif (this.#has(key)) {\r\n\t\t\tconst item = this.items[key];\r\n\r\n\t\t\tif (this.ttl > 0 && item.expiry <= Date.now()) {\r\n\t\t\t\tthis.delete(key);\r\n\t\t\t} else {\r\n\t\t\t\tresult = item.value;\r\n\t\t\t\tthis.set(key, result, true);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\texpiresAt (key) {\r\n\t\tlet result;\r\n\r\n\t\tif (this.#has(key)) {\r\n\t\t\tresult = this.items[key].expiry;\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tkeys () {\r\n\t\treturn Object.keys(this.items);\r\n\t}\r\n\r\n\tset (key, value, bypass = false, resetTtl = this.resetTtl) {\r\n\t\tlet item;\r\n\r\n\t\tif (bypass || this.#has(key)) {\r\n\t\t\titem = this.items[key];\r\n\t\t\titem.value = value;\r\n\r\n\t\t\tif (resetTtl) {\r\n\t\t\t\titem.expiry = this.ttl > 0 ? Date.now() + this.ttl : this.ttl;\r\n\t\t\t}\r\n\r\n\t\t\tif (this.last !== item) {\r\n\t\t\t\tconst last = this.last,\r\n\t\t\t\t\tnext = item.next,\r\n\t\t\t\t\tprev = item.prev;\r\n\r\n\t\t\t\tif (this.first === item) {\r\n\t\t\t\t\tthis.first = item.next;\r\n\t\t\t\t}\r\n\r\n\t\t\t\titem.next = null;\r\n\t\t\t\titem.prev = this.last;\r\n\t\t\t\tlast.next = item;\r\n\r\n\t\t\t\tif (prev !== null) {\r\n\t\t\t\t\tprev.next = next;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (next !== null) {\r\n\t\t\t\t\tnext.prev = prev;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tif (this.max > 0 && this.size === this.max) {\r\n\t\t\t\tthis.evict(true);\r\n\t\t\t}\r\n\r\n\t\t\titem = this.items[key] = {\r\n\t\t\t\texpiry: this.ttl > 0 ? Date.now() + this.ttl : this.ttl,\r\n\t\t\t\tkey: key,\r\n\t\t\t\tprev: this.last,\r\n\t\t\t\tnext: null,\r\n\t\t\t\tvalue\r\n\t\t\t};\r\n\r\n\t\t\tif (++this.size === 1) {\r\n\t\t\t\tthis.first = item;\r\n\t\t\t} else {\r\n\t\t\t\tthis.last.next = item;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.last = item;\r\n\r\n\t\treturn this;\r\n\t}\r\n}\r\n\r\nfunction lru (max = 1000, ttl = 0, resetTtl = false) {\r\n\tif (isNaN(max) || max < 0) {\r\n\t\tthrow new TypeError(\"Invalid max value\");\r\n\t}\r\n\r\n\tif (isNaN(ttl) || ttl < 0) {\r\n\t\tthrow new TypeError(\"Invalid ttl value\");\r\n\t}\r\n\r\n\tif (typeof resetTtl !== \"boolean\") {\r\n\t\tthrow new TypeError(\"Invalid resetTtl value\");\r\n\t}\r\n\r\n\treturn new LRU(max, ttl, resetTtl);\r\n}exports.lru=lru;}));/LICENSE\u0005Copyright (c) 2023, Jason Mulligan\r\nAll rights reserved.\r\n\r\nRedistribution and use in source and binary forms, with or without\r\nmodification, are permitted provided that the following conditions are met:\r\n\r\n* Redistributions of source code must retain the above copyright notice, this\r\n  list of conditions and the following disclaimer.\r\n\r\n* Redistributions in binary form must reproduce the above copyright notice,\r\n  this list of conditions and the following disclaimer in the documentation\r\n  and/or other materials provided with the distribution.\r\n\r\n* Neither the name of tiny-lru nor the names of its\r\n  contributors may be used to endorse or promote products derived from\r\n  this software without specific prior written permission.\r\n\r\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\nSERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\nOR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n/dist/tiny-lru.min.js\b\u0006/*!\n 2023 Jason Mulligan <jason.mulligan@avoidwork.com>\n @version 10.2.2\n*/\n!function(t,s){\"object\"==typeof exports&&\"undefined\"!=typeof module?s(exports):\"function\"==typeof define&&define.amd?define([\"exports\"],s):s((t=\"undefined\"!=typeof globalThis?globalThis:t||self).lru={})}(this,(function(t){\"use strict\";class s{constructor(t=0,s=0,e=!1){this.first=null,this.items=Object.create(null),this.last=null,this.max=t,this.resetTtl=e,this.size=0,this.ttl=s}#t(t){return t in this.items}clear(){return this.first=null,this.items=Object.create(null),this.last=null,this.size=0,this}delete(t){if(this.#t(t)){const s=this.items[t];delete this.items[t],this.size--,null!==s.prev&&(s.prev.next=s.next),null!==s.next&&(s.next.prev=s.prev),this.first===s&&(this.first=s.next),this.last===s&&(this.last=s.prev)}return this}evict(t=!1){if(t||this.size>0){const t=this.first;delete this.items[t.key],this.size--,0===this.size?(this.first=null,this.last=null):(this.first=t.next,this.first.prev=null)}return this}get(t){let s;if(this.#t(t)){const e=this.items[t];this.ttl>0&&e.expiry<=Date.now()?this.delete(t):(s=e.value,this.set(t,s,!0))}return s}expiresAt(t){let s;return this.#t(t)&&(s=this.items[t].expiry),s}keys(){return Object.keys(this.items)}set(t,s,e=!1,i=this.resetTtl){let l;if(e||this.#t(t)){if(l=this.items[t],l.value=s,i&&(l.expiry=this.ttl>0?Date.now()+this.ttl:this.ttl),this.last!==l){const t=this.last,s=l.next,e=l.prev;this.first===l&&(this.first=l.next),l.next=null,l.prev=this.last,t.next=l,null!==e&&(e.next=s),null!==s&&(s.prev=e)}}else this.max>0&&this.size===this.max&&this.evict(!0),l=this.items[t]={expiry:this.ttl>0?Date.now()+this.ttl:this.ttl,key:t,prev:this.last,next:null,value:s},1==++this.size?this.first=l:this.last.next=l;return this.last=l,this}}t.lru=function(t=1e3,e=0,i=!1){if(isNaN(t)||t<0)throw new TypeError(\"Invalid max value\");if(isNaN(e)||e<0)throw new TypeError(\"Invalid ttl value\");if(\"boolean\"!=typeof i)throw new TypeError(\"Invalid resetTtl value\");return new s(t,e,i)}}));//# sourceMappingURL=tiny-lru.min.js.map\n/lru.d.ts\u0002\u0007export function lru<T = any>(max?: number, ttl?: number, resetTtl?: boolean): LRU<T>;\r\nexport interface LRU<T> {\r\n    first: T | null;\r\n    last: T | null;\r\n    max: number;\r\n    resetTtl: boolean;\r\n    size: number;\r\n    ttl: number;\r\n\r\n    clear(): this;\r\n    delete(key: any): this;\r\n    evict(bypass?: boolean): this;\r\n    expiresAt(key: any): number | undefined;\r\n    get(key: any): T | undefined;\r\n    keys(): string[];\r\n    set(key: any, value: T, bypass?: boolean, resetTtl?: boolean): this;\r\n}\r\nexport { };\r\n\r\n/dist/tiny-lru.esm.js\fu/**\n * tiny-lru\n *\n * @copyright 2023 Jason Mulligan <jason.mulligan@avoidwork.com>\n * @license BSD-3-Clause\n * @version 10.2.2\n */\nclass LRU {\r\n\tconstructor (max = 0, ttl = 0, resetTtl = false) {\r\n\t\tthis.first = null;\r\n\t\tthis.items = Object.create(null);\r\n\t\tthis.last = null;\r\n\t\tthis.max = max;\r\n\t\tthis.resetTtl = resetTtl;\r\n\t\tthis.size = 0;\r\n\t\tthis.ttl = ttl;\r\n\t}\r\n\r\n\t#has (key) {\r\n\t\treturn key in this.items;\r\n\t}\r\n\r\n\tclear () {\r\n\t\tthis.first = null;\r\n\t\tthis.items = Object.create(null);\r\n\t\tthis.last = null;\r\n\t\tthis.size = 0;\r\n\r\n\t\treturn this;\r\n\t}\r\n\r\n\tdelete (key) {\r\n\t\tif (this.#has(key)) {\r\n\t\t\tconst item = this.items[key];\r\n\r\n\t\t\tdelete this.items[key];\r\n\t\t\tthis.size--;\r\n\r\n\t\t\tif (item.prev !== null) {\r\n\t\t\t\titem.prev.next = item.next;\r\n\t\t\t}\r\n\r\n\t\t\tif (item.next !== null) {\r\n\t\t\t\titem.next.prev = item.prev;\r\n\t\t\t}\r\n\r\n\t\t\tif (this.first === item) {\r\n\t\t\t\tthis.first = item.next;\r\n\t\t\t}\r\n\r\n\t\t\tif (this.last === item) {\r\n\t\t\t\tthis.last = item.prev;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t}\r\n\r\n\tevict (bypass = false) {\r\n\t\tif (bypass || this.size > 0) {\r\n\t\t\tconst item = this.first;\r\n\r\n\t\t\tdelete this.items[item.key];\r\n\t\t\tthis.size--;\r\n\r\n\t\t\tif (this.size === 0) {\r\n\t\t\t\tthis.first = null;\r\n\t\t\t\tthis.last = null;\r\n\t\t\t} else {\r\n\t\t\t\tthis.first = item.next;\r\n\t\t\t\tthis.first.prev = null;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t}\r\n\r\n\tget (key) {\r\n\t\tlet result;\r\n\r\n\t\tif (this.#has(key)) {\r\n\t\t\tconst item = this.items[key];\r\n\r\n\t\t\tif (this.ttl > 0 && item.expiry <= Date.now()) {\r\n\t\t\t\tthis.delete(key);\r\n\t\t\t} else {\r\n\t\t\t\tresult = item.value;\r\n\t\t\t\tthis.set(key, result, true);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\texpiresAt (key) {\r\n\t\tlet result;\r\n\r\n\t\tif (this.#has(key)) {\r\n\t\t\tresult = this.items[key].expiry;\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tkeys () {\r\n\t\treturn Object.keys(this.items);\r\n\t}\r\n\r\n\tset (key, value, bypass = false, resetTtl = this.resetTtl) {\r\n\t\tlet item;\r\n\r\n\t\tif (bypass || this.#has(key)) {\r\n\t\t\titem = this.items[key];\r\n\t\t\titem.value = value;\r\n\r\n\t\t\tif (resetTtl) {\r\n\t\t\t\titem.expiry = this.ttl > 0 ? Date.now() + this.ttl : this.ttl;\r\n\t\t\t}\r\n\r\n\t\t\tif (this.last !== item) {\r\n\t\t\t\tconst last = this.last,\r\n\t\t\t\t\tnext = item.next,\r\n\t\t\t\t\tprev = item.prev;\r\n\r\n\t\t\t\tif (this.first === item) {\r\n\t\t\t\t\tthis.first = item.next;\r\n\t\t\t\t}\r\n\r\n\t\t\t\titem.next = null;\r\n\t\t\t\titem.prev = this.last;\r\n\t\t\t\tlast.next = item;\r\n\r\n\t\t\t\tif (prev !== null) {\r\n\t\t\t\t\tprev.next = next;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (next !== null) {\r\n\t\t\t\t\tnext.prev = prev;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tif (this.max > 0 && this.size === this.max) {\r\n\t\t\t\tthis.evict(true);\r\n\t\t\t}\r\n\r\n\t\t\titem = this.items[key] = {\r\n\t\t\t\texpiry: this.ttl > 0 ? Date.now() + this.ttl : this.ttl,\r\n\t\t\t\tkey: key,\r\n\t\t\t\tprev: this.last,\r\n\t\t\t\tnext: null,\r\n\t\t\t\tvalue\r\n\t\t\t};\r\n\r\n\t\t\tif (++this.size === 1) {\r\n\t\t\t\tthis.first = item;\r\n\t\t\t} else {\r\n\t\t\t\tthis.last.next = item;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.last = item;\r\n\r\n\t\treturn this;\r\n\t}\r\n}\r\n\r\nfunction lru (max = 1000, ttl = 0, resetTtl = false) {\r\n\tif (isNaN(max) || max < 0) {\r\n\t\tthrow new TypeError(\"Invalid max value\");\r\n\t}\r\n\r\n\tif (isNaN(ttl) || ttl < 0) {\r\n\t\tthrow new TypeError(\"Invalid ttl value\");\r\n\t}\r\n\r\n\tif (typeof resetTtl !== \"boolean\") {\r\n\t\tthrow new TypeError(\"Invalid resetTtl value\");\r\n\t}\r\n\r\n\treturn new LRU(max, ttl, resetTtl);\r\n}export{lru};/dist/tiny-lru.esm.min.js.map\u0018{\"version\":3,\"file\":\"tiny-lru.esm.min.js\",\"sources\":[\"../src/lru.js\"],\"sourcesContent\":[\"class LRU {\\r\\n\\tconstructor (max = 0, ttl = 0, resetTtl = false) {\\r\\n\\t\\tthis.first = null;\\r\\n\\t\\tthis.items = Object.create(null);\\r\\n\\t\\tthis.last = null;\\r\\n\\t\\tthis.max = max;\\r\\n\\t\\tthis.resetTtl = resetTtl;\\r\\n\\t\\tthis.size = 0;\\r\\n\\t\\tthis.ttl = ttl;\\r\\n\\t}\\r\\n\\r\\n\\t#has (key) {\\r\\n\\t\\treturn key in this.items;\\r\\n\\t}\\r\\n\\r\\n\\tclear () {\\r\\n\\t\\tthis.first = null;\\r\\n\\t\\tthis.items = Object.create(null);\\r\\n\\t\\tthis.last = null;\\r\\n\\t\\tthis.size = 0;\\r\\n\\r\\n\\t\\treturn this;\\r\\n\\t}\\r\\n\\r\\n\\tdelete (key) {\\r\\n\\t\\tif (this.#has(key)) {\\r\\n\\t\\t\\tconst item = this.items[key];\\r\\n\\r\\n\\t\\t\\tdelete this.items[key];\\r\\n\\t\\t\\tthis.size--;\\r\\n\\r\\n\\t\\t\\tif (item.prev !== null) {\\r\\n\\t\\t\\t\\titem.prev.next = item.next;\\r\\n\\t\\t\\t}\\r\\n\\r\\n\\t\\t\\tif (item.next !== null) {\\r\\n\\t\\t\\t\\titem.next.prev = item.prev;\\r\\n\\t\\t\\t}\\r\\n\\r\\n\\t\\t\\tif (this.first === item) {\\r\\n\\t\\t\\t\\tthis.first = item.next;\\r\\n\\t\\t\\t}\\r\\n\\r\\n\\t\\t\\tif (this.last === item) {\\r\\n\\t\\t\\t\\tthis.last = item.prev;\\r\\n\\t\\t\\t}\\r\\n\\t\\t}\\r\\n\\r\\n\\t\\treturn this;\\r\\n\\t}\\r\\n\\r\\n\\tevict (bypass = false) {\\r\\n\\t\\tif (bypass || this.size > 0) {\\r\\n\\t\\t\\tconst item = this.first;\\r\\n\\r\\n\\t\\t\\tdelete this.items[item.key];\\r\\n\\t\\t\\tthis.size--;\\r\\n\\r\\n\\t\\t\\tif (this.size === 0) {\\r\\n\\t\\t\\t\\tthis.first = null;\\r\\n\\t\\t\\t\\tthis.last = null;\\r\\n\\t\\t\\t} else {\\r\\n\\t\\t\\t\\tthis.first = item.next;\\r\\n\\t\\t\\t\\tthis.first.prev = null;\\r\\n\\t\\t\\t}\\r\\n\\t\\t}\\r\\n\\r\\n\\t\\treturn this;\\r\\n\\t}\\r\\n\\r\\n\\tget (key) {\\r\\n\\t\\tlet result;\\r\\n\\r\\n\\t\\tif (this.#has(key)) {\\r\\n\\t\\t\\tconst item = this.items[key];\\r\\n\\r\\n\\t\\t\\tif (this.ttl > 0 && item.expiry <= Date.now()) {\\r\\n\\t\\t\\t\\tthis.delete(key);\\r\\n\\t\\t\\t} else {\\r\\n\\t\\t\\t\\tresult = item.value;\\r\\n\\t\\t\\t\\tthis.set(key, result, true);\\r\\n\\t\\t\\t}\\r\\n\\t\\t}\\r\\n\\r\\n\\t\\treturn result;\\r\\n\\t}\\r\\n\\r\\n\\texpiresAt (key) {\\r\\n\\t\\tlet result;\\r\\n\\r\\n\\t\\tif (this.#has(key)) {\\r\\n\\t\\t\\tresult = this.items[key].expiry;\\r\\n\\t\\t}\\r\\n\\r\\n\\t\\treturn result;\\r\\n\\t}\\r\\n\\r\\n\\tkeys () {\\r\\n\\t\\treturn Object.keys(this.items);\\r\\n\\t}\\r\\n\\r\\n\\tset (key, value, bypass = false, resetTtl = this.resetTtl) {\\r\\n\\t\\tlet item;\\r\\n\\r\\n\\t\\tif (bypass || this.#has(key)) {\\r\\n\\t\\t\\titem = this.items[key];\\r\\n\\t\\t\\titem.value = value;\\r\\n\\r\\n\\t\\t\\tif (resetTtl) {\\r\\n\\t\\t\\t\\titem.expiry = this.ttl > 0 ? Date.now() + this.ttl : this.ttl;\\r\\n\\t\\t\\t}\\r\\n\\r\\n\\t\\t\\tif (this.last !== item) {\\r\\n\\t\\t\\t\\tconst last = this.last,\\r\\n\\t\\t\\t\\t\\tnext = item.next,\\r\\n\\t\\t\\t\\t\\tprev = item.prev;\\r\\n\\r\\n\\t\\t\\t\\tif (this.first === item) {\\r\\n\\t\\t\\t\\t\\tthis.first = item.next;\\r\\n\\t\\t\\t\\t}\\r\\n\\r\\n\\t\\t\\t\\titem.next = null;\\r\\n\\t\\t\\t\\titem.prev = this.last;\\r\\n\\t\\t\\t\\tlast.next = item;\\r\\n\\r\\n\\t\\t\\t\\tif (prev !== null) {\\r\\n\\t\\t\\t\\t\\tprev.next = next;\\r\\n\\t\\t\\t\\t}\\r\\n\\r\\n\\t\\t\\t\\tif (next !== null) {\\r\\n\\t\\t\\t\\t\\tnext.prev = prev;\\r\\n\\t\\t\\t\\t}\\r\\n\\t\\t\\t}\\r\\n\\t\\t} else {\\r\\n\\t\\t\\tif (this.max > 0 && this.size === this.max) {\\r\\n\\t\\t\\t\\tthis.evict(true);\\r\\n\\t\\t\\t}\\r\\n\\r\\n\\t\\t\\titem = this.items[key] = {\\r\\n\\t\\t\\t\\texpiry: this.ttl > 0 ? Date.now() + this.ttl : this.ttl,\\r\\n\\t\\t\\t\\tkey: key,\\r\\n\\t\\t\\t\\tprev: this.last,\\r\\n\\t\\t\\t\\tnext: null,\\r\\n\\t\\t\\t\\tvalue\\r\\n\\t\\t\\t};\\r\\n\\r\\n\\t\\t\\tif (++this.size === 1) {\\r\\n\\t\\t\\t\\tthis.first = item;\\r\\n\\t\\t\\t} else {\\r\\n\\t\\t\\t\\tthis.last.next = item;\\r\\n\\t\\t\\t}\\r\\n\\t\\t}\\r\\n\\r\\n\\t\\tthis.last = item;\\r\\n\\r\\n\\t\\treturn this;\\r\\n\\t}\\r\\n}\\r\\n\\r\\nexport function lru (max = 1000, ttl = 0, resetTtl = false) {\\r\\n\\tif (isNaN(max) || max < 0) {\\r\\n\\t\\tthrow new TypeError(\\\"Invalid max value\\\");\\r\\n\\t}\\r\\n\\r\\n\\tif (isNaN(ttl) || ttl < 0) {\\r\\n\\t\\tthrow new TypeError(\\\"Invalid ttl value\\\");\\r\\n\\t}\\r\\n\\r\\n\\tif (typeof resetTtl !== \\\"boolean\\\") {\\r\\n\\t\\tthrow new TypeError(\\\"Invalid resetTtl value\\\");\\r\\n\\t}\\r\\n\\r\\n\\treturn new LRU(max, ttl, resetTtl);\\r\\n}\\r\\n\"],\"names\":[\"LRU\",\"constructor\",\"max\",\"ttl\",\"resetTtl\",\"this\",\"first\",\"items\",\"Object\",\"create\",\"last\",\"size\",\"has\",\"key\",\"clear\",\"delete\",\"item\",\"prev\",\"next\",\"evict\",\"bypass\",\"get\",\"result\",\"expiry\",\"Date\",\"now\",\"value\",\"set\",\"expiresAt\",\"keys\",\"lru\",\"isNaN\",\"TypeError\"],\"mappings\":\"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\"}/package.json\u0005{\r\n  \"name\": \"tiny-lru\",\r\n  \"description\": \"Tiny LRU cache for Client or Server\",\r\n  \"version\": \"10.2.2\",\r\n  \"homepage\": \"https://github.com/avoidwork/tiny-lru\",\r\n  \"author\": \"Jason Mulligan <jason.mulligan@avoidwork.com>\",\r\n  \"repository\": {\r\n    \"type\": \"git\",\r\n    \"url\": \"git://github.com/avoidwork/tiny-lru.git\"\r\n  },\r\n  \"bugs\": {\r\n    \"url\": \"https://github.com/avoidwork/tiny-lru/issues\"\r\n  },\r\n  \"files\": [\r\n    \"dist\",\r\n    \"*.d.ts\"\r\n  ],\r\n  \"license\": \"BSD-3-Clause\",\r\n  \"source\": \"src/lru.js\",\r\n  \"main\": \"dist/tiny-lru.cjs\",\r\n  \"module\": \"dist/tiny-lru.esm.js\",\r\n  \"type\": \"module\",\r\n  \"sourceType\": \"module\",\r\n  \"types\": \"lru.d.ts\",\r\n  \"engines\": {\r\n    \"node\": \">=12\"\r\n  },\r\n  \"engineStrict\": true,\r\n  \"scripts\": {\r\n    \"build\": \"npm run lint && rm -rf dist/* && npm run rollup && npm run mocha\",\r\n    \"benchmark\": \"node benchmark.js\",\r\n    \"changelog\": \"auto-changelog -p\",\r\n    \"lint\": \"eslint *.js src/*.js test/*.js\",\r\n    \"mocha\": \"mocha test/*.js\",\r\n    \"rollup\": \"rollup --config\",\r\n    \"test\": \"npm run lint && npm run mocha\",\r\n    \"types\": \"npx -p typescript tsc src/lru.js --declaration --allowJs --emitDeclarationOnly --outDir .\"\r\n  },\r\n  \"devDependencies\": {\r\n    \"@rollup/plugin-terser\": \"^0.4.0\",\r\n    \"auto-changelog\": \"^2.4.0\",\r\n    \"eslint\": \"^8.36.0\",\r\n    \"mocha\": \"^10.2.0\",\r\n    \"precise\": \"^2.0.1\",\r\n    \"rollup\": \"^3.19.1\",\r\n    \"typescript\": \"^5.0.2\"\r\n  },\r\n  \"keywords\": [\r\n    \"LRU\",\r\n    \"cache\",\r\n    \"tiny\",\r\n    \"client\",\r\n    \"server\",\r\n    \"least\",\r\n    \"recently\",\r\n    \"used\"\r\n  ]\r\n}\r\n/dist/tiny-lru.esm.min.js\u0007(/*!\n 2023 Jason Mulligan <jason.mulligan@avoidwork.com>\n @version 10.2.2\n*/\nclass t{constructor(t=0,s=0,e=!1){this.first=null,this.items=Object.create(null),this.last=null,this.max=t,this.resetTtl=e,this.size=0,this.ttl=s}#t(t){return t in this.items}clear(){return this.first=null,this.items=Object.create(null),this.last=null,this.size=0,this}delete(t){if(this.#t(t)){const s=this.items[t];delete this.items[t],this.size--,null!==s.prev&&(s.prev.next=s.next),null!==s.next&&(s.next.prev=s.prev),this.first===s&&(this.first=s.next),this.last===s&&(this.last=s.prev)}return this}evict(t=!1){if(t||this.size>0){const t=this.first;delete this.items[t.key],this.size--,0===this.size?(this.first=null,this.last=null):(this.first=t.next,this.first.prev=null)}return this}get(t){let s;if(this.#t(t)){const e=this.items[t];this.ttl>0&&e.expiry<=Date.now()?this.delete(t):(s=e.value,this.set(t,s,!0))}return s}expiresAt(t){let s;return this.#t(t)&&(s=this.items[t].expiry),s}keys(){return Object.keys(this.items)}set(t,s,e=!1,i=this.resetTtl){let h;if(e||this.#t(t)){if(h=this.items[t],h.value=s,i&&(h.expiry=this.ttl>0?Date.now()+this.ttl:this.ttl),this.last!==h){const t=this.last,s=h.next,e=h.prev;this.first===h&&(this.first=h.next),h.next=null,h.prev=this.last,t.next=h,null!==e&&(e.next=s),null!==s&&(s.prev=e)}}else this.max>0&&this.size===this.max&&this.evict(!0),h=this.items[t]={expiry:this.ttl>0?Date.now()+this.ttl:this.ttl,key:t,prev:this.last,next:null,value:s},1==++this.size?this.first=h:this.last.next=h;return this.last=h,this}}function s(s=1e3,e=0,i=!1){if(isNaN(s)||s<0)throw new TypeError(\"Invalid max value\");if(isNaN(e)||e<0)throw new TypeError(\"Invalid ttl value\");if(\"boolean\"!=typeof i)throw new TypeError(\"Invalid resetTtl value\");return new t(s,e,i)}export{s as lru};//# sourceMappingURL=tiny-lru.esm.min.js.map\n/dist/tiny-lru.cjs\f/**\n * tiny-lru\n *\n * @copyright 2023 Jason Mulligan <jason.mulligan@avoidwork.com>\n * @license BSD-3-Clause\n * @version 10.2.2\n */\n'use strict';\n\nclass LRU {\r\n\tconstructor (max = 0, ttl = 0, resetTtl = false) {\r\n\t\tthis.first = null;\r\n\t\tthis.items = Object.create(null);\r\n\t\tthis.last = null;\r\n\t\tthis.max = max;\r\n\t\tthis.resetTtl = resetTtl;\r\n\t\tthis.size = 0;\r\n\t\tthis.ttl = ttl;\r\n\t}\r\n\r\n\t#has (key) {\r\n\t\treturn key in this.items;\r\n\t}\r\n\r\n\tclear () {\r\n\t\tthis.first = null;\r\n\t\tthis.items = Object.create(null);\r\n\t\tthis.last = null;\r\n\t\tthis.size = 0;\r\n\r\n\t\treturn this;\r\n\t}\r\n\r\n\tdelete (key) {\r\n\t\tif (this.#has(key)) {\r\n\t\t\tconst item = this.items[key];\r\n\r\n\t\t\tdelete this.items[key];\r\n\t\t\tthis.size--;\r\n\r\n\t\t\tif (item.prev !== null) {\r\n\t\t\t\titem.prev.next = item.next;\r\n\t\t\t}\r\n\r\n\t\t\tif (item.next !== null) {\r\n\t\t\t\titem.next.prev = item.prev;\r\n\t\t\t}\r\n\r\n\t\t\tif (this.first === item) {\r\n\t\t\t\tthis.first = item.next;\r\n\t\t\t}\r\n\r\n\t\t\tif (this.last === item) {\r\n\t\t\t\tthis.last = item.prev;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t}\r\n\r\n\tevict (bypass = false) {\r\n\t\tif (bypass || this.size > 0) {\r\n\t\t\tconst item = this.first;\r\n\r\n\t\t\tdelete this.items[item.key];\r\n\t\t\tthis.size--;\r\n\r\n\t\t\tif (this.size === 0) {\r\n\t\t\t\tthis.first = null;\r\n\t\t\t\tthis.last = null;\r\n\t\t\t} else {\r\n\t\t\t\tthis.first = item.next;\r\n\t\t\t\tthis.first.prev = null;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t}\r\n\r\n\tget (key) {\r\n\t\tlet result;\r\n\r\n\t\tif (this.#has(key)) {\r\n\t\t\tconst item = this.items[key];\r\n\r\n\t\t\tif (this.ttl > 0 && item.expiry <= Date.now()) {\r\n\t\t\t\tthis.delete(key);\r\n\t\t\t} else {\r\n\t\t\t\tresult = item.value;\r\n\t\t\t\tthis.set(key, result, true);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\texpiresAt (key) {\r\n\t\tlet result;\r\n\r\n\t\tif (this.#has(key)) {\r\n\t\t\tresult = this.items[key].expiry;\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tkeys () {\r\n\t\treturn Object.keys(this.items);\r\n\t}\r\n\r\n\tset (key, value, bypass = false, resetTtl = this.resetTtl) {\r\n\t\tlet item;\r\n\r\n\t\tif (bypass || this.#has(key)) {\r\n\t\t\titem = this.items[key];\r\n\t\t\titem.value = value;\r\n\r\n\t\t\tif (resetTtl) {\r\n\t\t\t\titem.expiry = this.ttl > 0 ? Date.now() + this.ttl : this.ttl;\r\n\t\t\t}\r\n\r\n\t\t\tif (this.last !== item) {\r\n\t\t\t\tconst last = this.last,\r\n\t\t\t\t\tnext = item.next,\r\n\t\t\t\t\tprev = item.prev;\r\n\r\n\t\t\t\tif (this.first === item) {\r\n\t\t\t\t\tthis.first = item.next;\r\n\t\t\t\t}\r\n\r\n\t\t\t\titem.next = null;\r\n\t\t\t\titem.prev = this.last;\r\n\t\t\t\tlast.next = item;\r\n\r\n\t\t\t\tif (prev !== null) {\r\n\t\t\t\t\tprev.next = next;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (next !== null) {\r\n\t\t\t\t\tnext.prev = prev;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tif (this.max > 0 && this.size === this.max) {\r\n\t\t\t\tthis.evict(true);\r\n\t\t\t}\r\n\r\n\t\t\titem = this.items[key] = {\r\n\t\t\t\texpiry: this.ttl > 0 ? Date.now() + this.ttl : this.ttl,\r\n\t\t\t\tkey: key,\r\n\t\t\t\tprev: this.last,\r\n\t\t\t\tnext: null,\r\n\t\t\t\tvalue\r\n\t\t\t};\r\n\r\n\t\t\tif (++this.size === 1) {\r\n\t\t\t\tthis.first = item;\r\n\t\t\t} else {\r\n\t\t\t\tthis.last.next = item;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.last = item;\r\n\r\n\t\treturn this;\r\n\t}\r\n}\r\n\r\nfunction lru (max = 1000, ttl = 0, resetTtl = false) {\r\n\tif (isNaN(max) || max < 0) {\r\n\t\tthrow new TypeError(\"Invalid max value\");\r\n\t}\r\n\r\n\tif (isNaN(ttl) || ttl < 0) {\r\n\t\tthrow new TypeError(\"Invalid ttl value\");\r\n\t}\r\n\r\n\tif (typeof resetTtl !== \"boolean\") {\r\n\t\tthrow new TypeError(\"Invalid resetTtl value\");\r\n\t}\r\n\r\n\treturn new LRU(max, ttl, resetTtl);\r\n}\n\nexports.lru = lru;\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/dHI0NkAwLjAuMw==",
    "content": "/.npmignore(scripts/\ntest/\n\n!lib/mapping_table.json\n/index.js\u001d\"use strict\";\n\nvar punycode = require(\"punycode\");\nvar mappingTable = require(\"./lib/mappingTable.json\");\n\nvar PROCESSING_OPTIONS = {\n  TRANSITIONAL: 0,\n  NONTRANSITIONAL: 1\n};\n\nfunction normalize(str) { // fix bug in v8\n  return str.split('\\u0000').map(function (s) { return s.normalize('NFC'); }).join('\\u0000');\n}\n\nfunction findStatus(val) {\n  var start = 0;\n  var end = mappingTable.length - 1;\n\n  while (start <= end) {\n    var mid = Math.floor((start + end) / 2);\n\n    var target = mappingTable[mid];\n    if (target[0][0] <= val && target[0][1] >= val) {\n      return target;\n    } else if (target[0][0] > val) {\n      end = mid - 1;\n    } else {\n      start = mid + 1;\n    }\n  }\n\n  return null;\n}\n\nvar regexAstralSymbols = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\n\nfunction countSymbols(string) {\n  return string\n    // replace every surrogate pair with a BMP symbol\n    .replace(regexAstralSymbols, '_')\n    // then get the length\n    .length;\n}\n\nfunction mapChars(domain_name, useSTD3, processing_option) {\n  var hasError = false;\n  var processed = \"\";\n\n  var len = countSymbols(domain_name);\n  for (var i = 0; i < len; ++i) {\n    var codePoint = domain_name.codePointAt(i);\n    var status = findStatus(codePoint);\n\n    switch (status[1]) {\n      case \"disallowed\":\n        hasError = true;\n        processed += String.fromCodePoint(codePoint);\n        break;\n      case \"ignored\":\n        break;\n      case \"mapped\":\n        processed += String.fromCodePoint.apply(String, status[2]);\n        break;\n      case \"deviation\":\n        if (processing_option === PROCESSING_OPTIONS.TRANSITIONAL) {\n          processed += String.fromCodePoint.apply(String, status[2]);\n        } else {\n          processed += String.fromCodePoint(codePoint);\n        }\n        break;\n      case \"valid\":\n        processed += String.fromCodePoint(codePoint);\n        break;\n      case \"disallowed_STD3_mapped\":\n        if (useSTD3) {\n          hasError = true;\n          processed += String.fromCodePoint(codePoint);\n        } else {\n          processed += String.fromCodePoint.apply(String, status[2]);\n        }\n        break;\n      case \"disallowed_STD3_valid\":\n        if (useSTD3) {\n          hasError = true;\n        }\n\n        processed += String.fromCodePoint(codePoint);\n        break;\n    }\n  }\n\n  return {\n    string: processed,\n    error: hasError\n  };\n}\n\nvar combiningMarksRegex = /[\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0610-\\u061A\\u064B-\\u065F\\u0670\\u06D6-\\u06DC\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u08E4-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C03\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0D01-\\u0D03\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D82\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EB9\\u0EBB\\u0EBC\\u0EC8-\\u0ECD\\u0F18\\u0F19\\u0F35\\u0F37\\u0F39\\u0F3E\\u0F3F\\u0F71-\\u0F84\\u0F86\\u0F87\\u0F8D-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u102B-\\u103E\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F\\u109A-\\u109D\\u135D-\\u135F\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180D\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u19B0-\\u19C0\\u19C8\\u19C9\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ABE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF2-\\u1CF4\\u1CF8\\u1CF9\\u1DC0-\\u1DF5\\u1DFC-\\u1DFF\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA880\\uA881\\uA8B4-\\uA8C4\\uA8E0-\\uA8F1\\uA926-\\uA92D\\uA947-\\uA953\\uA980-\\uA983\\uA9B3-\\uA9C0\\uA9E5\\uAA29-\\uAA36\\uAA43\\uAA4C\\uAA4D\\uAA7B-\\uAA7D\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAEB-\\uAAEF\\uAAF5\\uAAF6\\uABE3-\\uABEA\\uABEC\\uABED\\uFB1E\\uFE00-\\uFE0F\\uFE20-\\uFE2D]|\\uD800[\\uDDFD\\uDEE0\\uDF76-\\uDF7A]|\\uD802[\\uDE01-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE0F\\uDE38-\\uDE3A\\uDE3F\\uDEE5\\uDEE6]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC46\\uDC7F-\\uDC82\\uDCB0-\\uDCBA\\uDD00-\\uDD02\\uDD27-\\uDD34\\uDD73\\uDD80-\\uDD82\\uDDB3-\\uDDC0\\uDE2C-\\uDE37\\uDEDF-\\uDEEA\\uDF01-\\uDF03\\uDF3C\\uDF3E-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF62\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDCB0-\\uDCC3\\uDDAF-\\uDDB5\\uDDB8-\\uDDC0\\uDE30-\\uDE40\\uDEAB-\\uDEB7]|\\uD81A[\\uDEF0-\\uDEF4\\uDF30-\\uDF36]|\\uD81B[\\uDF51-\\uDF7E\\uDF8F-\\uDF92]|\\uD82F[\\uDC9D\\uDC9E]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD72\\uDD7B-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD83A[\\uDCD0-\\uDCD6]|\\uDB40[\\uDD00-\\uDDEF]/;\n\nfunction validateLabel(label, processing_option) {\n  if (label.substr(0, 4) === \"xn--\") {\n    label = punycode.toUnicode(label);\n    processing_option = PROCESSING_OPTIONS.NONTRANSITIONAL;\n  }\n\n  var error = false;\n\n  if (normalize(label) !== label ||\n      (label[3] === \"-\" && label[4] === \"-\") ||\n      label[0] === \"-\" || label[label.length - 1] === \"-\" ||\n      label.indexOf(\".\") !== -1 ||\n      label.search(combiningMarksRegex) === 0) {\n    error = true;\n  }\n\n  var len = countSymbols(label);\n  for (var i = 0; i < len; ++i) {\n    var status = findStatus(label.codePointAt(i));\n    if ((processing === PROCESSING_OPTIONS.TRANSITIONAL && status[1] !== \"valid\") ||\n        (processing === PROCESSING_OPTIONS.NONTRANSITIONAL &&\n         status[1] !== \"valid\" && status[1] !== \"deviation\")) {\n      error = true;\n      break;\n    }\n  }\n\n  return {\n    label: label,\n    error: error\n  };\n}\n\nfunction processing(domain_name, useSTD3, processing_option) {\n  var result = mapChars(domain_name, useSTD3, processing_option);\n  result.string = normalize(result.string);\n\n  var labels = result.string.split(\".\");\n  for (var i = 0; i < labels.length; ++i) {\n    try {\n      var validation = validateLabel(labels[i]);\n      labels[i] = validation.label;\n      result.error = result.error || validation.error;\n    } catch(e) {\n      result.error = true;\n    }\n  }\n\n  return {\n    string: labels.join(\".\"),\n    error: result.error\n  };\n}\n\nmodule.exports.toASCII = function(domain_name, useSTD3, processing_option, verifyDnsLength) {\n  var result = processing(domain_name, useSTD3, processing_option);\n  var labels = result.string.split(\".\");\n  labels = labels.map(function(l) {\n    try {\n      return punycode.toASCII(l);\n    } catch(e) {\n      result.error = true;\n      return l;\n    }\n  });\n\n  if (verifyDnsLength) {\n    var total = labels.slice(0, labels.length - 1).join(\".\").length;\n    if (total.length > 253 || total.length === 0) {\n      result.error = true;\n    }\n\n    for (var i=0; i < labels.length; ++i) {\n      if (labels.length > 63 || labels.length === 0) {\n        result.error = true;\n        break;\n      }\n    }\n  }\n\n  if (result.error) return null;\n  return labels.join(\".\");\n};\n\nmodule.exports.toUnicode = function(domain_name, useSTD3) {\n  var result = processing(domain_name, useSTD3, PROCESSING_OPTIONS.NONTRANSITIONAL);\n\n  return {\n    domain: result.string,\n    error: result.error\n  };\n};\n\nmodule.exports.PROCESSING_OPTIONS = PROCESSING_OPTIONS;\n/package.json\u0002{\n  \"name\": \"tr46\",\n  \"version\": \"0.0.3\",\n  \"description\": \"An implementation of the Unicode TR46 spec\",\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"test\": \"mocha\",\n    \"pretest\": \"node scripts/getLatestUnicodeTests.js\",\n    \"prepublish\": \"node scripts/generateMappingTable.js\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/Sebmaster/tr46.js.git\"\n  },\n  \"keywords\": [\n    \"unicode\",\n    \"tr46\",\n    \"url\",\n    \"whatwg\"\n  ],\n  \"author\": \"Sebastian Mayr <npm@smayr.name>\",\n  \"license\": \"MIT\",\n  \"bugs\": {\n    \"url\": \"https://github.com/Sebmaster/tr46.js/issues\"\n  },\n  \"homepage\": \"https://github.com/Sebmaster/tr46.js#readme\",\n  \"devDependencies\": {\n    \"mocha\": \"^2.2.5\",\n    \"request\": \"^2.57.0\"\n  }\n}\n/lib/.gitkeep\u0000/lib/mappingTable.json\u0000\u0003[[[0,44],\"disallowed_STD3_valid\"],[[45,46],\"valid\"],[[47,47],\"disallowed_STD3_valid\"],[[48,57],\"valid\"],[[58,64],\"disallowed_STD3_valid\"],[[65,65],\"mapped\",[97]],[[66,66],\"mapped\",[98]],[[67,67],\"mapped\",[99]],[[68,68],\"mapped\",[100]],[[69,69],\"mapped\",[101]],[[70,70],\"mapped\",[102]],[[71,71],\"mapped\",[103]],[[72,72],\"mapped\",[104]],[[73,73],\"mapped\",[105]],[[74,74],\"mapped\",[106]],[[75,75],\"mapped\",[107]],[[76,76],\"mapped\",[108]],[[77,77],\"mapped\",[109]],[[78,78],\"mapped\",[110]],[[79,79],\"mapped\",[111]],[[80,80],\"mapped\",[112]],[[81,81],\"mapped\",[113]],[[82,82],\"mapped\",[114]],[[83,83],\"mapped\",[115]],[[84,84],\"mapped\",[116]],[[85,85],\"mapped\",[117]],[[86,86],\"mapped\",[118]],[[87,87],\"mapped\",[119]],[[88,88],\"mapped\",[120]],[[89,89],\"mapped\",[121]],[[90,90],\"mapped\",[122]],[[91,96],\"disallowed_STD3_valid\"],[[97,122],\"valid\"],[[123,127],\"disallowed_STD3_valid\"],[[128,159],\"disallowed\"],[[160,160],\"disallowed_STD3_mapped\",[32]],[[161,167],\"valid\",[],\"NV8\"],[[168,168],\"disallowed_STD3_mapped\",[32,776]],[[169,169],\"valid\",[],\"NV8\"],[[170,170],\"mapped\",[97]],[[171,172],\"valid\",[],\"NV8\"],[[173,173],\"ignored\"],[[174,174],\"valid\",[],\"NV8\"],[[175,175],\"disallowed_STD3_mapped\",[32,772]],[[176,177],\"valid\",[],\"NV8\"],[[178,178],\"mapped\",[50]],[[179,179],\"mapped\",[51]],[[180,180],\"disallowed_STD3_mapped\",[32,769]],[[181,181],\"mapped\",[956]],[[182,182],\"valid\",[],\"NV8\"],[[183,183],\"valid\"],[[184,184],\"disallowed_STD3_mapped\",[32,807]],[[185,185],\"mapped\",[49]],[[186,186],\"mapped\",[111]],[[187,187],\"valid\",[],\"NV8\"],[[188,188],\"mapped\",[49,8260,52]],[[189,189],\"mapped\",[49,8260,50]],[[190,190],\"mapped\",[51,8260,52]],[[191,191],\"valid\",[],\"NV8\"],[[192,192],\"mapped\",[224]],[[193,193],\"mapped\",[225]],[[194,194],\"mapped\",[226]],[[195,195],\"mapped\",[227]],[[196,196],\"mapped\",[228]],[[197,197],\"mapped\",[229]],[[198,198],\"mapped\",[230]],[[199,199],\"mapped\",[231]],[[200,200],\"mapped\",[232]],[[201,201],\"mapped\",[233]],[[202,202],\"mapped\",[234]],[[203,203],\"mapped\",[235]],[[204,204],\"mapped\",[236]],[[205,205],\"mapped\",[237]],[[206,206],\"mapped\",[238]],[[207,207],\"mapped\",[239]],[[208,208],\"mapped\",[240]],[[209,209],\"mapped\",[241]],[[210,210],\"mapped\",[242]],[[211,211],\"mapped\",[243]],[[212,212],\"mapped\",[244]],[[213,213],\"mapped\",[245]],[[214,214],\"mapped\",[246]],[[215,215],\"valid\",[],\"NV8\"],[[216,216],\"mapped\",[248]],[[217,217],\"mapped\",[249]],[[218,218],\"mapped\",[250]],[[219,219],\"mapped\",[251]],[[220,220],\"mapped\",[252]],[[221,221],\"mapped\",[253]],[[222,222],\"mapped\",[254]],[[223,223],\"deviation\",[115,115]],[[224,246],\"valid\"],[[247,247],\"valid\",[],\"NV8\"],[[248,255],\"valid\"],[[256,256],\"mapped\",[257]],[[257,257],\"valid\"],[[258,258],\"mapped\",[259]],[[259,259],\"valid\"],[[260,260],\"mapped\",[261]],[[261,261],\"valid\"],[[262,262],\"mapped\",[263]],[[263,263],\"valid\"],[[264,264],\"mapped\",[265]],[[265,265],\"valid\"],[[266,266],\"mapped\",[267]],[[267,267],\"valid\"],[[268,268],\"mapped\",[269]],[[269,269],\"valid\"],[[270,270],\"mapped\",[271]],[[271,271],\"valid\"],[[272,272],\"mapped\",[273]],[[273,273],\"valid\"],[[274,274],\"mapped\",[275]],[[275,275],\"valid\"],[[276,276],\"mapped\",[277]],[[277,277],\"valid\"],[[278,278],\"mapped\",[279]],[[279,279],\"valid\"],[[280,280],\"mapped\",[281]],[[281,281],\"valid\"],[[282,282],\"mapped\",[283]],[[283,283],\"valid\"],[[284,284],\"mapped\",[285]],[[285,285],\"valid\"],[[286,286],\"mapped\",[287]],[[287,287],\"valid\"],[[288,288],\"mapped\",[289]],[[289,289],\"valid\"],[[290,290],\"mapped\",[291]],[[291,291],\"valid\"],[[292,292],\"mapped\",[293]],[[293,293],\"valid\"],[[294,294],\"mapped\",[295]],[[295,295],\"valid\"],[[296,296],\"mapped\",[297]],[[297,297],\"valid\"],[[298,298],\"mapped\",[299]],[[299,299],\"valid\"],[[300,300],\"mapped\",[301]],[[301,301],\"valid\"],[[302,302],\"mapped\",[303]],[[303,303],\"valid\"],[[304,304],\"mapped\",[105,775]],[[305,305],\"valid\"],[[306,307],\"mapped\",[105,106]],[[308,308],\"mapped\",[309]],[[309,309],\"valid\"],[[310,310],\"mapped\",[311]],[[311,312],\"valid\"],[[313,313],\"mapped\",[314]],[[314,314],\"valid\"],[[315,315],\"mapped\",[316]],[[316,316],\"valid\"],[[317,317],\"mapped\",[318]],[[318,318],\"valid\"],[[319,320],\"mapped\",[108,183]],[[321,321],\"mapped\",[322]],[[322,322],\"valid\"],[[323,323],\"mapped\",[324]],[[324,324],\"valid\"],[[325,325],\"mapped\",[326]],[[326,326],\"valid\"],[[327,327],\"mapped\",[328]],[[328,328],\"valid\"],[[329,329],\"mapped\",[700,110]],[[330,330],\"mapped\",[331]],[[331,331],\"valid\"],[[332,332],\"mapped\",[333]],[[333,333],\"valid\"],[[334,334],\"mapped\",[335]],[[335,335],\"valid\"],[[336,336],\"mapped\",[337]],[[337,337],\"valid\"],[[338,338],\"mapped\",[339]],[[339,339],\"valid\"],[[340,340],\"mapped\",[341]],[[341,341],\"valid\"],[[342,342],\"mapped\",[343]],[[343,343],\"valid\"],[[344,344],\"mapped\",[345]],[[345,345],\"valid\"],[[346,346],\"mapped\",[347]],[[347,347],\"valid\"],[[348,348],\"mapped\",[349]],[[349,349],\"valid\"],[[350,350],\"mapped\",[351]],[[351,351],\"valid\"],[[352,352],\"mapped\",[353]],[[353,353],\"valid\"],[[354,354],\"mapped\",[355]],[[355,355],\"valid\"],[[356,356],\"mapped\",[357]],[[357,357],\"valid\"],[[358,358],\"mapped\",[359]],[[359,359],\"valid\"],[[360,360],\"mapped\",[361]],[[361,361],\"valid\"],[[362,362],\"mapped\",[363]],[[363,363],\"valid\"],[[364,364],\"mapped\",[365]],[[365,365],\"valid\"],[[366,366],\"mapped\",[367]],[[367,367],\"valid\"],[[368,368],\"mapped\",[369]],[[369,369],\"valid\"],[[370,370],\"mapped\",[371]],[[371,371],\"valid\"],[[372,372],\"mapped\",[373]],[[373,373],\"valid\"],[[374,374],\"mapped\",[375]],[[375,375],\"valid\"],[[376,376],\"mapped\",[255]],[[377,377],\"mapped\",[378]],[[378,378],\"valid\"],[[379,379],\"mapped\",[380]],[[380,380],\"valid\"],[[381,381],\"mapped\",[382]],[[382,382],\"valid\"],[[383,383],\"mapped\",[115]],[[384,384],\"valid\"],[[385,385],\"mapped\",[595]],[[386,386],\"mapped\",[387]],[[387,387],\"valid\"],[[388,388],\"mapped\",[389]],[[389,389],\"valid\"],[[390,390],\"mapped\",[596]],[[391,391],\"mapped\",[392]],[[392,392],\"valid\"],[[393,393],\"mapped\",[598]],[[394,394],\"mapped\",[599]],[[395,395],\"mapped\",[396]],[[396,397],\"valid\"],[[398,398],\"mapped\",[477]],[[399,399],\"mapped\",[601]],[[400,400],\"mapped\",[603]],[[401,401],\"mapped\",[402]],[[402,402],\"valid\"],[[403,403],\"mapped\",[608]],[[404,404],\"mapped\",[611]],[[405,405],\"valid\"],[[406,406],\"mapped\",[617]],[[407,407],\"mapped\",[616]],[[408,408],\"mapped\",[409]],[[409,411],\"valid\"],[[412,412],\"mapped\",[623]],[[413,413],\"mapped\",[626]],[[414,414],\"valid\"],[[415,415],\"mapped\",[629]],[[416,416],\"mapped\",[417]],[[417,417],\"valid\"],[[418,418],\"mapped\",[419]],[[419,419],\"valid\"],[[420,420],\"mapped\",[421]],[[421,421],\"valid\"],[[422,422],\"mapped\",[640]],[[423,423],\"mapped\",[424]],[[424,424],\"valid\"],[[425,425],\"mapped\",[643]],[[426,427],\"valid\"],[[428,428],\"mapped\",[429]],[[429,429],\"valid\"],[[430,430],\"mapped\",[648]],[[431,431],\"mapped\",[432]],[[432,432],\"valid\"],[[433,433],\"mapped\",[650]],[[434,434],\"mapped\",[651]],[[435,435],\"mapped\",[436]],[[436,436],\"valid\"],[[437,437],\"mapped\",[438]],[[438,438],\"valid\"],[[439,439],\"mapped\",[658]],[[440,440],\"mapped\",[441]],[[441,443],\"valid\"],[[444,444],\"mapped\",[445]],[[445,451],\"valid\"],[[452,454],\"mapped\",[100,382]],[[455,457],\"mapped\",[108,106]],[[458,460],\"mapped\",[110,106]],[[461,461],\"mapped\",[462]],[[462,462],\"valid\"],[[463,463],\"mapped\",[464]],[[464,464],\"valid\"],[[465,465],\"mapped\",[466]],[[466,466],\"valid\"],[[467,467],\"mapped\",[468]],[[468,468],\"valid\"],[[469,469],\"mapped\",[470]],[[470,470],\"valid\"],[[471,471],\"mapped\",[472]],[[472,472],\"valid\"],[[473,473],\"mapped\",[474]],[[474,474],\"valid\"],[[475,475],\"mapped\",[476]],[[476,477],\"valid\"],[[478,478],\"mapped\",[479]],[[479,479],\"valid\"],[[480,480],\"mapped\",[481]],[[481,481],\"valid\"],[[482,482],\"mapped\",[483]],[[483,483],\"valid\"],[[484,484],\"mapped\",[485]],[[485,485],\"valid\"],[[486,486],\"mapped\",[487]],[[487,487],\"valid\"],[[488,488],\"mapped\",[489]],[[489,489],\"valid\"],[[490,490],\"mapped\",[491]],[[491,491],\"valid\"],[[492,492],\"mapped\",[493]],[[493,493],\"valid\"],[[494,494],\"mapped\",[495]],[[495,496],\"valid\"],[[497,499],\"mapped\",[100,122]],[[500,500],\"mapped\",[501]],[[501,501],\"valid\"],[[502,502],\"mapped\",[405]],[[503,503],\"mapped\",[447]],[[504,504],\"mapped\",[505]],[[505,505],\"valid\"],[[506,506],\"mapped\",[507]],[[507,507],\"valid\"],[[508,508],\"mapped\",[509]],[[509,509],\"valid\"],[[510,510],\"mapped\",[511]],[[511,511],\"valid\"],[[512,512],\"mapped\",[513]],[[513,513],\"valid\"],[[514,514],\"mapped\",[515]],[[515,515],\"valid\"],[[516,516],\"mapped\",[517]],[[517,517],\"valid\"],[[518,518],\"mapped\",[519]],[[519,519],\"valid\"],[[520,520],\"mapped\",[521]],[[521,521],\"valid\"],[[522,522],\"mapped\",[523]],[[523,523],\"valid\"],[[524,524],\"mapped\",[525]],[[525,525],\"valid\"],[[526,526],\"mapped\",[527]],[[527,527],\"valid\"],[[528,528],\"mapped\",[529]],[[529,529],\"valid\"],[[530,530],\"mapped\",[531]],[[531,531],\"valid\"],[[532,532],\"mapped\",[533]],[[533,533],\"valid\"],[[534,534],\"mapped\",[535]],[[535,535],\"valid\"],[[536,536],\"mapped\",[537]],[[537,537],\"valid\"],[[538,538],\"mapped\",[539]],[[539,539],\"valid\"],[[540,540],\"mapped\",[541]],[[541,541],\"valid\"],[[542,542],\"mapped\",[543]],[[543,543],\"valid\"],[[544,544],\"mapped\",[414]],[[545,545],\"valid\"],[[546,546],\"mapped\",[547]],[[547,547],\"valid\"],[[548,548],\"mapped\",[549]],[[549,549],\"valid\"],[[550,550],\"mapped\",[551]],[[551,551],\"valid\"],[[552,552],\"mapped\",[553]],[[553,553],\"valid\"],[[554,554],\"mapped\",[555]],[[555,555],\"valid\"],[[556,556],\"mapped\",[557]],[[557,557],\"valid\"],[[558,558],\"mapped\",[559]],[[559,559],\"valid\"],[[560,560],\"mapped\",[561]],[[561,561],\"valid\"],[[562,562],\"mapped\",[563]],[[563,563],\"valid\"],[[564,566],\"valid\"],[[567,569],\"valid\"],[[570,570],\"mapped\",[11365]],[[571,571],\"mapped\",[572]],[[572,572],\"valid\"],[[573,573],\"mapped\",[410]],[[574,574],\"mapped\",[11366]],[[575,576],\"valid\"],[[577,577],\"mapped\",[578]],[[578,578],\"valid\"],[[579,579],\"mapped\",[384]],[[580,580],\"mapped\",[649]],[[581,581],\"mapped\",[652]],[[582,582],\"mapped\",[583]],[[583,583],\"valid\"],[[584,584],\"mapped\",[585]],[[585,585],\"valid\"],[[586,586],\"mapped\",[587]],[[587,587],\"valid\"],[[588,588],\"mapped\",[589]],[[589,589],\"valid\"],[[590,590],\"mapped\",[591]],[[591,591],\"valid\"],[[592,680],\"valid\"],[[681,685],\"valid\"],[[686,687],\"valid\"],[[688,688],\"mapped\",[104]],[[689,689],\"mapped\",[614]],[[690,690],\"mapped\",[106]],[[691,691],\"mapped\",[114]],[[692,692],\"mapped\",[633]],[[693,693],\"mapped\",[635]],[[694,694],\"mapped\",[641]],[[695,695],\"mapped\",[119]],[[696,696],\"mapped\",[121]],[[697,705],\"valid\"],[[706,709],\"valid\",[],\"NV8\"],[[710,721],\"valid\"],[[722,727],\"valid\",[],\"NV8\"],[[728,728],\"disallowed_STD3_mapped\",[32,774]],[[729,729],\"disallowed_STD3_mapped\",[32,775]],[[730,730],\"disallowed_STD3_mapped\",[32,778]],[[731,731],\"disallowed_STD3_mapped\",[32,808]],[[732,732],\"disallowed_STD3_mapped\",[32,771]],[[733,733],\"disallowed_STD3_mapped\",[32,779]],[[734,734],\"valid\",[],\"NV8\"],[[735,735],\"valid\",[],\"NV8\"],[[736,736],\"mapped\",[611]],[[737,737],\"mapped\",[108]],[[738,738],\"mapped\",[115]],[[739,739],\"mapped\",[120]],[[740,740],\"mapped\",[661]],[[741,745],\"valid\",[],\"NV8\"],[[746,747],\"valid\",[],\"NV8\"],[[748,748],\"valid\"],[[749,749],\"valid\",[],\"NV8\"],[[750,750],\"valid\"],[[751,767],\"valid\",[],\"NV8\"],[[768,831],\"valid\"],[[832,832],\"mapped\",[768]],[[833,833],\"mapped\",[769]],[[834,834],\"valid\"],[[835,835],\"mapped\",[787]],[[836,836],\"mapped\",[776,769]],[[837,837],\"mapped\",[953]],[[838,846],\"valid\"],[[847,847],\"ignored\"],[[848,855],\"valid\"],[[856,860],\"valid\"],[[861,863],\"valid\"],[[864,865],\"valid\"],[[866,866],\"valid\"],[[867,879],\"valid\"],[[880,880],\"mapped\",[881]],[[881,881],\"valid\"],[[882,882],\"mapped\",[883]],[[883,883],\"valid\"],[[884,884],\"mapped\",[697]],[[885,885],\"valid\"],[[886,886],\"mapped\",[887]],[[887,887],\"valid\"],[[888,889],\"disallowed\"],[[890,890],\"disallowed_STD3_mapped\",[32,953]],[[891,893],\"valid\"],[[894,894],\"disallowed_STD3_mapped\",[59]],[[895,895],\"mapped\",[1011]],[[896,899],\"disallowed\"],[[900,900],\"disallowed_STD3_mapped\",[32,769]],[[901,901],\"disallowed_STD3_mapped\",[32,776,769]],[[902,902],\"mapped\",[940]],[[903,903],\"mapped\",[183]],[[904,904],\"mapped\",[941]],[[905,905],\"mapped\",[942]],[[906,906],\"mapped\",[943]],[[907,907],\"disallowed\"],[[908,908],\"mapped\",[972]],[[909,909],\"disallowed\"],[[910,910],\"mapped\",[973]],[[911,911],\"mapped\",[974]],[[912,912],\"valid\"],[[913,913],\"mapped\",[945]],[[914,914],\"mapped\",[946]],[[915,915],\"mapped\",[947]],[[916,916],\"mapped\",[948]],[[917,917],\"mapped\",[949]],[[918,918],\"mapped\",[950]],[[919,919],\"mapped\",[951]],[[920,920],\"mapped\",[952]],[[921,921],\"mapped\",[953]],[[922,922],\"mapped\",[954]],[[923,923],\"mapped\",[955]],[[924,924],\"mapped\",[956]],[[925,925],\"mapped\",[957]],[[926,926],\"mapped\",[958]],[[927,927],\"mapped\",[959]],[[928,928],\"mapped\",[960]],[[929,929],\"mapped\",[961]],[[930,930],\"disallowed\"],[[931,931],\"mapped\",[963]],[[932,932],\"mapped\",[964]],[[933,933],\"mapped\",[965]],[[934,934],\"mapped\",[966]],[[935,935],\"mapped\",[967]],[[936,936],\"mapped\",[968]],[[937,937],\"mapped\",[969]],[[938,938],\"mapped\",[970]],[[939,939],\"mapped\",[971]],[[940,961],\"valid\"],[[962,962],\"deviation\",[963]],[[963,974],\"valid\"],[[975,975],\"mapped\",[983]],[[976,976],\"mapped\",[946]],[[977,977],\"mapped\",[952]],[[978,978],\"mapped\",[965]],[[979,979],\"mapped\",[973]],[[980,980],\"mapped\",[971]],[[981,981],\"mapped\",[966]],[[982,982],\"mapped\",[960]],[[983,983],\"valid\"],[[984,984],\"mapped\",[985]],[[985,985],\"valid\"],[[986,986],\"mapped\",[987]],[[987,987],\"valid\"],[[988,988],\"mapped\",[989]],[[989,989],\"valid\"],[[990,990],\"mapped\",[991]],[[991,991],\"valid\"],[[992,992],\"mapped\",[993]],[[993,993],\"valid\"],[[994,994],\"mapped\",[995]],[[995,995],\"valid\"],[[996,996],\"mapped\",[997]],[[997,997],\"valid\"],[[998,998],\"mapped\",[999]],[[999,999],\"valid\"],[[1000,1000],\"mapped\",[1001]],[[1001,1001],\"valid\"],[[1002,1002],\"mapped\",[1003]],[[1003,1003],\"valid\"],[[1004,1004],\"mapped\",[1005]],[[1005,1005],\"valid\"],[[1006,1006],\"mapped\",[1007]],[[1007,1007],\"valid\"],[[1008,1008],\"mapped\",[954]],[[1009,1009],\"mapped\",[961]],[[1010,1010],\"mapped\",[963]],[[1011,1011],\"valid\"],[[1012,1012],\"mapped\",[952]],[[1013,1013],\"mapped\",[949]],[[1014,1014],\"valid\",[],\"NV8\"],[[1015,1015],\"mapped\",[1016]],[[1016,1016],\"valid\"],[[1017,1017],\"mapped\",[963]],[[1018,1018],\"mapped\",[1019]],[[1019,1019],\"valid\"],[[1020,1020],\"valid\"],[[1021,1021],\"mapped\",[891]],[[1022,1022],\"mapped\",[892]],[[1023,1023],\"mapped\",[893]],[[1024,1024],\"mapped\",[1104]],[[1025,1025],\"mapped\",[1105]],[[1026,1026],\"mapped\",[1106]],[[1027,1027],\"mapped\",[1107]],[[1028,1028],\"mapped\",[1108]],[[1029,1029],\"mapped\",[1109]],[[1030,1030],\"mapped\",[1110]],[[1031,1031],\"mapped\",[1111]],[[1032,1032],\"mapped\",[1112]],[[1033,1033],\"mapped\",[1113]],[[1034,1034],\"mapped\",[1114]],[[1035,1035],\"mapped\",[1115]],[[1036,1036],\"mapped\",[1116]],[[1037,1037],\"mapped\",[1117]],[[1038,1038],\"mapped\",[1118]],[[1039,1039],\"mapped\",[1119]],[[1040,1040],\"mapped\",[1072]],[[1041,1041],\"mapped\",[1073]],[[1042,1042],\"mapped\",[1074]],[[1043,1043],\"mapped\",[1075]],[[1044,1044],\"mapped\",[1076]],[[1045,1045],\"mapped\",[1077]],[[1046,1046],\"mapped\",[1078]],[[1047,1047],\"mapped\",[1079]],[[1048,1048],\"mapped\",[1080]],[[1049,1049],\"mapped\",[1081]],[[1050,1050],\"mapped\",[1082]],[[1051,1051],\"mapped\",[1083]],[[1052,1052],\"mapped\",[1084]],[[1053,1053],\"mapped\",[1085]],[[1054,1054],\"mapped\",[1086]],[[1055,1055],\"mapped\",[1087]],[[1056,1056],\"mapped\",[1088]],[[1057,1057],\"mapped\",[1089]],[[1058,1058],\"mapped\",[1090]],[[1059,1059],\"mapped\",[1091]],[[1060,1060],\"mapped\",[1092]],[[1061,1061],\"mapped\",[1093]],[[1062,1062],\"mapped\",[1094]],[[1063,1063],\"mapped\",[1095]],[[1064,1064],\"mapped\",[1096]],[[1065,1065],\"mapped\",[1097]],[[1066,1066],\"mapped\",[1098]],[[1067,1067],\"mapped\",[1099]],[[1068,1068],\"mapped\",[1100]],[[1069,1069],\"mapped\",[1101]],[[1070,1070],\"mapped\",[1102]],[[1071,1071],\"mapped\",[1103]],[[1072,1103],\"valid\"],[[1104,1104],\"valid\"],[[1105,1116],\"valid\"],[[1117,1117],\"valid\"],[[1118,1119],\"valid\"],[[1120,1120],\"mapped\",[1121]],[[1121,1121],\"valid\"],[[1122,1122],\"mapped\",[1123]],[[1123,1123],\"valid\"],[[1124,1124],\"mapped\",[1125]],[[1125,1125],\"valid\"],[[1126,1126],\"mapped\",[1127]],[[1127,1127],\"valid\"],[[1128,1128],\"mapped\",[1129]],[[1129,1129],\"valid\"],[[1130,1130],\"mapped\",[1131]],[[1131,1131],\"valid\"],[[1132,1132],\"mapped\",[1133]],[[1133,1133],\"valid\"],[[1134,1134],\"mapped\",[1135]],[[1135,1135],\"valid\"],[[1136,1136],\"mapped\",[1137]],[[1137,1137],\"valid\"],[[1138,1138],\"mapped\",[1139]],[[1139,1139],\"valid\"],[[1140,1140],\"mapped\",[1141]],[[1141,1141],\"valid\"],[[1142,1142],\"mapped\",[1143]],[[1143,1143],\"valid\"],[[1144,1144],\"mapped\",[1145]],[[1145,1145],\"valid\"],[[1146,1146],\"mapped\",[1147]],[[1147,1147],\"valid\"],[[1148,1148],\"mapped\",[1149]],[[1149,1149],\"valid\"],[[1150,1150],\"mapped\",[1151]],[[1151,1151],\"valid\"],[[1152,1152],\"mapped\",[1153]],[[1153,1153],\"valid\"],[[1154,1154],\"valid\",[],\"NV8\"],[[1155,1158],\"valid\"],[[1159,1159],\"valid\"],[[1160,1161],\"valid\",[],\"NV8\"],[[1162,1162],\"mapped\",[1163]],[[1163,1163],\"valid\"],[[1164,1164],\"mapped\",[1165]],[[1165,1165],\"valid\"],[[1166,1166],\"mapped\",[1167]],[[1167,1167],\"valid\"],[[1168,1168],\"mapped\",[1169]],[[1169,1169],\"valid\"],[[1170,1170],\"mapped\",[1171]],[[1171,1171],\"valid\"],[[1172,1172],\"mapped\",[1173]],[[1173,1173],\"valid\"],[[1174,1174],\"mapped\",[1175]],[[1175,1175],\"valid\"],[[1176,1176],\"mapped\",[1177]],[[1177,1177],\"valid\"],[[1178,1178],\"mapped\",[1179]],[[1179,1179],\"valid\"],[[1180,1180],\"mapped\",[1181]],[[1181,1181],\"valid\"],[[1182,1182],\"mapped\",[1183]],[[1183,1183],\"valid\"],[[1184,1184],\"mapped\",[1185]],[[1185,1185],\"valid\"],[[1186,1186],\"mapped\",[1187]],[[1187,1187],\"valid\"],[[1188,1188],\"mapped\",[1189]],[[1189,1189],\"valid\"],[[1190,1190],\"mapped\",[1191]],[[1191,1191],\"valid\"],[[1192,1192],\"mapped\",[1193]],[[1193,1193],\"valid\"],[[1194,1194],\"mapped\",[1195]],[[1195,1195],\"valid\"],[[1196,1196],\"mapped\",[1197]],[[1197,1197],\"valid\"],[[1198,1198],\"mapped\",[1199]],[[1199,1199],\"valid\"],[[1200,1200],\"mapped\",[1201]],[[1201,1201],\"valid\"],[[1202,1202],\"mapped\",[1203]],[[1203,1203],\"valid\"],[[1204,1204],\"mapped\",[1205]],[[1205,1205],\"valid\"],[[1206,1206],\"mapped\",[1207]],[[1207,1207],\"valid\"],[[1208,1208],\"mapped\",[1209]],[[1209,1209],\"valid\"],[[1210,1210],\"mapped\",[1211]],[[1211,1211],\"valid\"],[[1212,1212],\"mapped\",[1213]],[[1213,1213],\"valid\"],[[1214,1214],\"mapped\",[1215]],[[1215,1215],\"valid\"],[[1216,1216],\"disallowed\"],[[1217,1217],\"mapped\",[1218]],[[1218,1218],\"valid\"],[[1219,1219],\"mapped\",[1220]],[[1220,1220],\"valid\"],[[1221,1221],\"mapped\",[1222]],[[1222,1222],\"valid\"],[[1223,1223],\"mapped\",[1224]],[[1224,1224],\"valid\"],[[1225,1225],\"mapped\",[1226]],[[1226,1226],\"valid\"],[[1227,1227],\"mapped\",[1228]],[[1228,1228],\"valid\"],[[1229,1229],\"mapped\",[1230]],[[1230,1230],\"valid\"],[[1231,1231],\"valid\"],[[1232,1232],\"mapped\",[1233]],[[1233,1233],\"valid\"],[[1234,1234],\"mapped\",[1235]],[[1235,1235],\"valid\"],[[1236,1236],\"mapped\",[1237]],[[1237,1237],\"valid\"],[[1238,1238],\"mapped\",[1239]],[[1239,1239],\"valid\"],[[1240,1240],\"mapped\",[1241]],[[1241,1241],\"valid\"],[[1242,1242],\"mapped\",[1243]],[[1243,1243],\"valid\"],[[1244,1244],\"mapped\",[1245]],[[1245,1245],\"valid\"],[[1246,1246],\"mapped\",[1247]],[[1247,1247],\"valid\"],[[1248,1248],\"mapped\",[1249]],[[1249,1249],\"valid\"],[[1250,1250],\"mapped\",[1251]],[[1251,1251],\"valid\"],[[1252,1252],\"mapped\",[1253]],[[1253,1253],\"valid\"],[[1254,1254],\"mapped\",[1255]],[[1255,1255],\"valid\"],[[1256,1256],\"mapped\",[1257]],[[1257,1257],\"valid\"],[[1258,1258],\"mapped\",[1259]],[[1259,1259],\"valid\"],[[1260,1260],\"mapped\",[1261]],[[1261,1261],\"valid\"],[[1262,1262],\"mapped\",[1263]],[[1263,1263],\"valid\"],[[1264,1264],\"mapped\",[1265]],[[1265,1265],\"valid\"],[[1266,1266],\"mapped\",[1267]],[[1267,1267],\"valid\"],[[1268,1268],\"mapped\",[1269]],[[1269,1269],\"valid\"],[[1270,1270],\"mapped\",[1271]],[[1271,1271],\"valid\"],[[1272,1272],\"mapped\",[1273]],[[1273,1273],\"valid\"],[[1274,1274],\"mapped\",[1275]],[[1275,1275],\"valid\"],[[1276,1276],\"mapped\",[1277]],[[1277,1277],\"valid\"],[[1278,1278],\"mapped\",[1279]],[[1279,1279],\"valid\"],[[1280,1280],\"mapped\",[1281]],[[1281,1281],\"valid\"],[[1282,1282],\"mapped\",[1283]],[[1283,1283],\"valid\"],[[1284,1284],\"mapped\",[1285]],[[1285,1285],\"valid\"],[[1286,1286],\"mapped\",[1287]],[[1287,1287],\"valid\"],[[1288,1288],\"mapped\",[1289]],[[1289,1289],\"valid\"],[[1290,1290],\"mapped\",[1291]],[[1291,1291],\"valid\"],[[1292,1292],\"mapped\",[1293]],[[1293,1293],\"valid\"],[[1294,1294],\"mapped\",[1295]],[[1295,1295],\"valid\"],[[1296,1296],\"mapped\",[1297]],[[1297,1297],\"valid\"],[[1298,1298],\"mapped\",[1299]],[[1299,1299],\"valid\"],[[1300,1300],\"mapped\",[1301]],[[1301,1301],\"valid\"],[[1302,1302],\"mapped\",[1303]],[[1303,1303],\"valid\"],[[1304,1304],\"mapped\",[1305]],[[1305,1305],\"valid\"],[[1306,1306],\"mapped\",[1307]],[[1307,1307],\"valid\"],[[1308,1308],\"mapped\",[1309]],[[1309,1309],\"valid\"],[[1310,1310],\"mapped\",[1311]],[[1311,1311],\"valid\"],[[1312,1312],\"mapped\",[1313]],[[1313,1313],\"valid\"],[[1314,1314],\"mapped\",[1315]],[[1315,1315],\"valid\"],[[1316,1316],\"mapped\",[1317]],[[1317,1317],\"valid\"],[[1318,1318],\"mapped\",[1319]],[[1319,1319],\"valid\"],[[1320,1320],\"mapped\",[1321]],[[1321,1321],\"valid\"],[[1322,1322],\"mapped\",[1323]],[[1323,1323],\"valid\"],[[1324,1324],\"mapped\",[1325]],[[1325,1325],\"valid\"],[[1326,1326],\"mapped\",[1327]],[[1327,1327],\"valid\"],[[1328,1328],\"disallowed\"],[[1329,1329],\"mapped\",[1377]],[[1330,1330],\"mapped\",[1378]],[[1331,1331],\"mapped\",[1379]],[[1332,1332],\"mapped\",[1380]],[[1333,1333],\"mapped\",[1381]],[[1334,1334],\"mapped\",[1382]],[[1335,1335],\"mapped\",[1383]],[[1336,1336],\"mapped\",[1384]],[[1337,1337],\"mapped\",[1385]],[[1338,1338],\"mapped\",[1386]],[[1339,1339],\"mapped\",[1387]],[[1340,1340],\"mapped\",[1388]],[[1341,1341],\"mapped\",[1389]],[[1342,1342],\"mapped\",[1390]],[[1343,1343],\"mapped\",[1391]],[[1344,1344],\"mapped\",[1392]],[[1345,1345],\"mapped\",[1393]],[[1346,1346],\"mapped\",[1394]],[[1347,1347],\"mapped\",[1395]],[[1348,1348],\"mapped\",[1396]],[[1349,1349],\"mapped\",[1397]],[[1350,1350],\"mapped\",[1398]],[[1351,1351],\"mapped\",[1399]],[[1352,1352],\"mapped\",[1400]],[[1353,1353],\"mapped\",[1401]],[[1354,1354],\"mapped\",[1402]],[[1355,1355],\"mapped\",[1403]],[[1356,1356],\"mapped\",[1404]],[[1357,1357],\"mapped\",[1405]],[[1358,1358],\"mapped\",[1406]],[[1359,1359],\"mapped\",[1407]],[[1360,1360],\"mapped\",[1408]],[[1361,1361],\"mapped\",[1409]],[[1362,1362],\"mapped\",[1410]],[[1363,1363],\"mapped\",[1411]],[[1364,1364],\"mapped\",[1412]],[[1365,1365],\"mapped\",[1413]],[[1366,1366],\"mapped\",[1414]],[[1367,1368],\"disallowed\"],[[1369,1369],\"valid\"],[[1370,1375],\"valid\",[],\"NV8\"],[[1376,1376],\"disallowed\"],[[1377,1414],\"valid\"],[[1415,1415],\"mapped\",[1381,1410]],[[1416,1416],\"disallowed\"],[[1417,1417],\"valid\",[],\"NV8\"],[[1418,1418],\"valid\",[],\"NV8\"],[[1419,1420],\"disallowed\"],[[1421,1422],\"valid\",[],\"NV8\"],[[1423,1423],\"valid\",[],\"NV8\"],[[1424,1424],\"disallowed\"],[[1425,1441],\"valid\"],[[1442,1442],\"valid\"],[[1443,1455],\"valid\"],[[1456,1465],\"valid\"],[[1466,1466],\"valid\"],[[1467,1469],\"valid\"],[[1470,1470],\"valid\",[],\"NV8\"],[[1471,1471],\"valid\"],[[1472,1472],\"valid\",[],\"NV8\"],[[1473,1474],\"valid\"],[[1475,1475],\"valid\",[],\"NV8\"],[[1476,1476],\"valid\"],[[1477,1477],\"valid\"],[[1478,1478],\"valid\",[],\"NV8\"],[[1479,1479],\"valid\"],[[1480,1487],\"disallowed\"],[[1488,1514],\"valid\"],[[1515,1519],\"disallowed\"],[[1520,1524],\"valid\"],[[1525,1535],\"disallowed\"],[[1536,1539],\"disallowed\"],[[1540,1540],\"disallowed\"],[[1541,1541],\"disallowed\"],[[1542,1546],\"valid\",[],\"NV8\"],[[1547,1547],\"valid\",[],\"NV8\"],[[1548,1548],\"valid\",[],\"NV8\"],[[1549,1551],\"valid\",[],\"NV8\"],[[1552,1557],\"valid\"],[[1558,1562],\"valid\"],[[1563,1563],\"valid\",[],\"NV8\"],[[1564,1564],\"disallowed\"],[[1565,1565],\"disallowed\"],[[1566,1566],\"valid\",[],\"NV8\"],[[1567,1567],\"valid\",[],\"NV8\"],[[1568,1568],\"valid\"],[[1569,1594],\"valid\"],[[1595,1599],\"valid\"],[[1600,1600],\"valid\",[],\"NV8\"],[[1601,1618],\"valid\"],[[1619,1621],\"valid\"],[[1622,1624],\"valid\"],[[1625,1630],\"valid\"],[[1631,1631],\"valid\"],[[1632,1641],\"valid\"],[[1642,1645],\"valid\",[],\"NV8\"],[[1646,1647],\"valid\"],[[1648,1652],\"valid\"],[[1653,1653],\"mapped\",[1575,1652]],[[1654,1654],\"mapped\",[1608,1652]],[[1655,1655],\"mapped\",[1735,1652]],[[1656,1656],\"mapped\",[1610,1652]],[[1657,1719],\"valid\"],[[1720,1721],\"valid\"],[[1722,1726],\"valid\"],[[1727,1727],\"valid\"],[[1728,1742],\"valid\"],[[1743,1743],\"valid\"],[[1744,1747],\"valid\"],[[1748,1748],\"valid\",[],\"NV8\"],[[1749,1756],\"valid\"],[[1757,1757],\"disallowed\"],[[1758,1758],\"valid\",[],\"NV8\"],[[1759,1768],\"valid\"],[[1769,1769],\"valid\",[],\"NV8\"],[[1770,1773],\"valid\"],[[1774,1775],\"valid\"],[[1776,1785],\"valid\"],[[1786,1790],\"valid\"],[[1791,1791],\"valid\"],[[1792,1805],\"valid\",[],\"NV8\"],[[1806,1806],\"disallowed\"],[[1807,1807],\"disallowed\"],[[1808,1836],\"valid\"],[[1837,1839],\"valid\"],[[1840,1866],\"valid\"],[[1867,1868],\"disallowed\"],[[1869,1871],\"valid\"],[[1872,1901],\"valid\"],[[1902,1919],\"valid\"],[[1920,1968],\"valid\"],[[1969,1969],\"valid\"],[[1970,1983],\"disallowed\"],[[1984,2037],\"valid\"],[[2038,2042],\"valid\",[],\"NV8\"],[[2043,2047],\"disallowed\"],[[2048,2093],\"valid\"],[[2094,2095],\"disallowed\"],[[2096,2110],\"valid\",[],\"NV8\"],[[2111,2111],\"disallowed\"],[[2112,2139],\"valid\"],[[2140,2141],\"disallowed\"],[[2142,2142],\"valid\",[],\"NV8\"],[[2143,2207],\"disallowed\"],[[2208,2208],\"valid\"],[[2209,2209],\"valid\"],[[2210,2220],\"valid\"],[[2221,2226],\"valid\"],[[2227,2228],\"valid\"],[[2229,2274],\"disallowed\"],[[2275,2275],\"valid\"],[[2276,2302],\"valid\"],[[2303,2303],\"valid\"],[[2304,2304],\"valid\"],[[2305,2307],\"valid\"],[[2308,2308],\"valid\"],[[2309,2361],\"valid\"],[[2362,2363],\"valid\"],[[2364,2381],\"valid\"],[[2382,2382],\"valid\"],[[2383,2383],\"valid\"],[[2384,2388],\"valid\"],[[2389,2389],\"valid\"],[[2390,2391],\"valid\"],[[2392,2392],\"mapped\",[2325,2364]],[[2393,2393],\"mapped\",[2326,2364]],[[2394,2394],\"mapped\",[2327,2364]],[[2395,2395],\"mapped\",[2332,2364]],[[2396,2396],\"mapped\",[2337,2364]],[[2397,2397],\"mapped\",[2338,2364]],[[2398,2398],\"mapped\",[2347,2364]],[[2399,2399],\"mapped\",[2351,2364]],[[2400,2403],\"valid\"],[[2404,2405],\"valid\",[],\"NV8\"],[[2406,2415],\"valid\"],[[2416,2416],\"valid\",[],\"NV8\"],[[2417,2418],\"valid\"],[[2419,2423],\"valid\"],[[2424,2424],\"valid\"],[[2425,2426],\"valid\"],[[2427,2428],\"valid\"],[[2429,2429],\"valid\"],[[2430,2431],\"valid\"],[[2432,2432],\"valid\"],[[2433,2435],\"valid\"],[[2436,2436],\"disallowed\"],[[2437,2444],\"valid\"],[[2445,2446],\"disallowed\"],[[2447,2448],\"valid\"],[[2449,2450],\"disallowed\"],[[2451,2472],\"valid\"],[[2473,2473],\"disallowed\"],[[2474,2480],\"valid\"],[[2481,2481],\"disallowed\"],[[2482,2482],\"valid\"],[[2483,2485],\"disallowed\"],[[2486,2489],\"valid\"],[[2490,2491],\"disallowed\"],[[2492,2492],\"valid\"],[[2493,2493],\"valid\"],[[2494,2500],\"valid\"],[[2501,2502],\"disallowed\"],[[2503,2504],\"valid\"],[[2505,2506],\"disallowed\"],[[2507,2509],\"valid\"],[[2510,2510],\"valid\"],[[2511,2518],\"disallowed\"],[[2519,2519],\"valid\"],[[2520,2523],\"disallowed\"],[[2524,2524],\"mapped\",[2465,2492]],[[2525,2525],\"mapped\",[2466,2492]],[[2526,2526],\"disallowed\"],[[2527,2527],\"mapped\",[2479,2492]],[[2528,2531],\"valid\"],[[2532,2533],\"disallowed\"],[[2534,2545],\"valid\"],[[2546,2554],\"valid\",[],\"NV8\"],[[2555,2555],\"valid\",[],\"NV8\"],[[2556,2560],\"disallowed\"],[[2561,2561],\"valid\"],[[2562,2562],\"valid\"],[[2563,2563],\"valid\"],[[2564,2564],\"disallowed\"],[[2565,2570],\"valid\"],[[2571,2574],\"disallowed\"],[[2575,2576],\"valid\"],[[2577,2578],\"disallowed\"],[[2579,2600],\"valid\"],[[2601,2601],\"disallowed\"],[[2602,2608],\"valid\"],[[2609,2609],\"disallowed\"],[[2610,2610],\"valid\"],[[2611,2611],\"mapped\",[2610,2620]],[[2612,2612],\"disallowed\"],[[2613,2613],\"valid\"],[[2614,2614],\"mapped\",[2616,2620]],[[2615,2615],\"disallowed\"],[[2616,2617],\"valid\"],[[2618,2619],\"disallowed\"],[[2620,2620],\"valid\"],[[2621,2621],\"disallowed\"],[[2622,2626],\"valid\"],[[2627,2630],\"disallowed\"],[[2631,2632],\"valid\"],[[2633,2634],\"disallowed\"],[[2635,2637],\"valid\"],[[2638,2640],\"disallowed\"],[[2641,2641],\"valid\"],[[2642,2648],\"disallowed\"],[[2649,2649],\"mapped\",[2582,2620]],[[2650,2650],\"mapped\",[2583,2620]],[[2651,2651],\"mapped\",[2588,2620]],[[2652,2652],\"valid\"],[[2653,2653],\"disallowed\"],[[2654,2654],\"mapped\",[2603,2620]],[[2655,2661],\"disallowed\"],[[2662,2676],\"valid\"],[[2677,2677],\"valid\"],[[2678,2688],\"disallowed\"],[[2689,2691],\"valid\"],[[2692,2692],\"disallowed\"],[[2693,2699],\"valid\"],[[2700,2700],\"valid\"],[[2701,2701],\"valid\"],[[2702,2702],\"disallowed\"],[[2703,2705],\"valid\"],[[2706,2706],\"disallowed\"],[[2707,2728],\"valid\"],[[2729,2729],\"disallowed\"],[[2730,2736],\"valid\"],[[2737,2737],\"disallowed\"],[[2738,2739],\"valid\"],[[2740,2740],\"disallowed\"],[[2741,2745],\"valid\"],[[2746,2747],\"disallowed\"],[[2748,2757],\"valid\"],[[2758,2758],\"disallowed\"],[[2759,2761],\"valid\"],[[2762,2762],\"disallowed\"],[[2763,2765],\"valid\"],[[2766,2767],\"disallowed\"],[[2768,2768],\"valid\"],[[2769,2783],\"disallowed\"],[[2784,2784],\"valid\"],[[2785,2787],\"valid\"],[[2788,2789],\"disallowed\"],[[2790,2799],\"valid\"],[[2800,2800],\"valid\",[],\"NV8\"],[[2801,2801],\"valid\",[],\"NV8\"],[[2802,2808],\"disallowed\"],[[2809,2809],\"valid\"],[[2810,2816],\"disallowed\"],[[2817,2819],\"valid\"],[[2820,2820],\"disallowed\"],[[2821,2828],\"valid\"],[[2829,2830],\"disallowed\"],[[2831,2832],\"valid\"],[[2833,2834],\"disallowed\"],[[2835,2856],\"valid\"],[[2857,2857],\"disallowed\"],[[2858,2864],\"valid\"],[[2865,2865],\"disallowed\"],[[2866,2867],\"valid\"],[[2868,2868],\"disallowed\"],[[2869,2869],\"valid\"],[[2870,2873],\"valid\"],[[2874,2875],\"disallowed\"],[[2876,2883],\"valid\"],[[2884,2884],\"valid\"],[[2885,2886],\"disallowed\"],[[2887,2888],\"valid\"],[[2889,2890],\"disallowed\"],[[2891,2893],\"valid\"],[[2894,2901],\"disallowed\"],[[2902,2903],\"valid\"],[[2904,2907],\"disallowed\"],[[2908,2908],\"mapped\",[2849,2876]],[[2909,2909],\"mapped\",[2850,2876]],[[2910,2910],\"disallowed\"],[[2911,2913],\"valid\"],[[2914,2915],\"valid\"],[[2916,2917],\"disallowed\"],[[2918,2927],\"valid\"],[[2928,2928],\"valid\",[],\"NV8\"],[[2929,2929],\"valid\"],[[2930,2935],\"valid\",[],\"NV8\"],[[2936,2945],\"disallowed\"],[[2946,2947],\"valid\"],[[2948,2948],\"disallowed\"],[[2949,2954],\"valid\"],[[2955,2957],\"disallowed\"],[[2958,2960],\"valid\"],[[2961,2961],\"disallowed\"],[[2962,2965],\"valid\"],[[2966,2968],\"disallowed\"],[[2969,2970],\"valid\"],[[2971,2971],\"disallowed\"],[[2972,2972],\"valid\"],[[2973,2973],\"disallowed\"],[[2974,2975],\"valid\"],[[2976,2978],\"disallowed\"],[[2979,2980],\"valid\"],[[2981,2983],\"disallowed\"],[[2984,2986],\"valid\"],[[2987,2989],\"disallowed\"],[[2990,2997],\"valid\"],[[2998,2998],\"valid\"],[[2999,3001],\"valid\"],[[3002,3005],\"disallowed\"],[[3006,3010],\"valid\"],[[3011,3013],\"disallowed\"],[[3014,3016],\"valid\"],[[3017,3017],\"disallowed\"],[[3018,3021],\"valid\"],[[3022,3023],\"disallowed\"],[[3024,3024],\"valid\"],[[3025,3030],\"disallowed\"],[[3031,3031],\"valid\"],[[3032,3045],\"disallowed\"],[[3046,3046],\"valid\"],[[3047,3055],\"valid\"],[[3056,3058],\"valid\",[],\"NV8\"],[[3059,3066],\"valid\",[],\"NV8\"],[[3067,3071],\"disallowed\"],[[3072,3072],\"valid\"],[[3073,3075],\"valid\"],[[3076,3076],\"disallowed\"],[[3077,3084],\"valid\"],[[3085,3085],\"disallowed\"],[[3086,3088],\"valid\"],[[3089,3089],\"disallowed\"],[[3090,3112],\"valid\"],[[3113,3113],\"disallowed\"],[[3114,3123],\"valid\"],[[3124,3124],\"valid\"],[[3125,3129],\"valid\"],[[3130,3132],\"disallowed\"],[[3133,3133],\"valid\"],[[3134,3140],\"valid\"],[[3141,3141],\"disallowed\"],[[3142,3144],\"valid\"],[[3145,3145],\"disallowed\"],[[3146,3149],\"valid\"],[[3150,3156],\"disallowed\"],[[3157,3158],\"valid\"],[[3159,3159],\"disallowed\"],[[3160,3161],\"valid\"],[[3162,3162],\"valid\"],[[3163,3167],\"disallowed\"],[[3168,3169],\"valid\"],[[3170,3171],\"valid\"],[[3172,3173],\"disallowed\"],[[3174,3183],\"valid\"],[[3184,3191],\"disallowed\"],[[3192,3199],\"valid\",[],\"NV8\"],[[3200,3200],\"disallowed\"],[[3201,3201],\"valid\"],[[3202,3203],\"valid\"],[[3204,3204],\"disallowed\"],[[3205,3212],\"valid\"],[[3213,3213],\"disallowed\"],[[3214,3216],\"valid\"],[[3217,3217],\"disallowed\"],[[3218,3240],\"valid\"],[[3241,3241],\"disallowed\"],[[3242,3251],\"valid\"],[[3252,3252],\"disallowed\"],[[3253,3257],\"valid\"],[[3258,3259],\"disallowed\"],[[3260,3261],\"valid\"],[[3262,3268],\"valid\"],[[3269,3269],\"disallowed\"],[[3270,3272],\"valid\"],[[3273,3273],\"disallowed\"],[[3274,3277],\"valid\"],[[3278,3284],\"disallowed\"],[[3285,3286],\"valid\"],[[3287,3293],\"disallowed\"],[[3294,3294],\"valid\"],[[3295,3295],\"disallowed\"],[[3296,3297],\"valid\"],[[3298,3299],\"valid\"],[[3300,3301],\"disallowed\"],[[3302,3311],\"valid\"],[[3312,3312],\"disallowed\"],[[3313,3314],\"valid\"],[[3315,3328],\"disallowed\"],[[3329,3329],\"valid\"],[[3330,3331],\"valid\"],[[3332,3332],\"disallowed\"],[[3333,3340],\"valid\"],[[3341,3341],\"disallowed\"],[[3342,3344],\"valid\"],[[3345,3345],\"disallowed\"],[[3346,3368],\"valid\"],[[3369,3369],\"valid\"],[[3370,3385],\"valid\"],[[3386,3386],\"valid\"],[[3387,3388],\"disallowed\"],[[3389,3389],\"valid\"],[[3390,3395],\"valid\"],[[3396,3396],\"valid\"],[[3397,3397],\"disallowed\"],[[3398,3400],\"valid\"],[[3401,3401],\"disallowed\"],[[3402,3405],\"valid\"],[[3406,3406],\"valid\"],[[3407,3414],\"disallowed\"],[[3415,3415],\"valid\"],[[3416,3422],\"disallowed\"],[[3423,3423],\"valid\"],[[3424,3425],\"valid\"],[[3426,3427],\"valid\"],[[3428,3429],\"disallowed\"],[[3430,3439],\"valid\"],[[3440,3445],\"valid\",[],\"NV8\"],[[3446,3448],\"disallowed\"],[[3449,3449],\"valid\",[],\"NV8\"],[[3450,3455],\"valid\"],[[3456,3457],\"disallowed\"],[[3458,3459],\"valid\"],[[3460,3460],\"disallowed\"],[[3461,3478],\"valid\"],[[3479,3481],\"disallowed\"],[[3482,3505],\"valid\"],[[3506,3506],\"disallowed\"],[[3507,3515],\"valid\"],[[3516,3516],\"disallowed\"],[[3517,3517],\"valid\"],[[3518,3519],\"disallowed\"],[[3520,3526],\"valid\"],[[3527,3529],\"disallowed\"],[[3530,3530],\"valid\"],[[3531,3534],\"disallowed\"],[[3535,3540],\"valid\"],[[3541,3541],\"disallowed\"],[[3542,3542],\"valid\"],[[3543,3543],\"disallowed\"],[[3544,3551],\"valid\"],[[3552,3557],\"disallowed\"],[[3558,3567],\"valid\"],[[3568,3569],\"disallowed\"],[[3570,3571],\"valid\"],[[3572,3572],\"valid\",[],\"NV8\"],[[3573,3584],\"disallowed\"],[[3585,3634],\"valid\"],[[3635,3635],\"mapped\",[3661,3634]],[[3636,3642],\"valid\"],[[3643,3646],\"disallowed\"],[[3647,3647],\"valid\",[],\"NV8\"],[[3648,3662],\"valid\"],[[3663,3663],\"valid\",[],\"NV8\"],[[3664,3673],\"valid\"],[[3674,3675],\"valid\",[],\"NV8\"],[[3676,3712],\"disallowed\"],[[3713,3714],\"valid\"],[[3715,3715],\"disallowed\"],[[3716,3716],\"valid\"],[[3717,3718],\"disallowed\"],[[3719,3720],\"valid\"],[[3721,3721],\"disallowed\"],[[3722,3722],\"valid\"],[[3723,3724],\"disallowed\"],[[3725,3725],\"valid\"],[[3726,3731],\"disallowed\"],[[3732,3735],\"valid\"],[[3736,3736],\"disallowed\"],[[3737,3743],\"valid\"],[[3744,3744],\"disallowed\"],[[3745,3747],\"valid\"],[[3748,3748],\"disallowed\"],[[3749,3749],\"valid\"],[[3750,3750],\"disallowed\"],[[3751,3751],\"valid\"],[[3752,3753],\"disallowed\"],[[3754,3755],\"valid\"],[[3756,3756],\"disallowed\"],[[3757,3762],\"valid\"],[[3763,3763],\"mapped\",[3789,3762]],[[3764,3769],\"valid\"],[[3770,3770],\"disallowed\"],[[3771,3773],\"valid\"],[[3774,3775],\"disallowed\"],[[3776,3780],\"valid\"],[[3781,3781],\"disallowed\"],[[3782,3782],\"valid\"],[[3783,3783],\"disallowed\"],[[3784,3789],\"valid\"],[[3790,3791],\"disallowed\"],[[3792,3801],\"valid\"],[[3802,3803],\"disallowed\"],[[3804,3804],\"mapped\",[3755,3737]],[[3805,3805],\"mapped\",[3755,3745]],[[3806,3807],\"valid\"],[[3808,3839],\"disallowed\"],[[3840,3840],\"valid\"],[[3841,3850],\"valid\",[],\"NV8\"],[[3851,3851],\"valid\"],[[3852,3852],\"mapped\",[3851]],[[3853,3863],\"valid\",[],\"NV8\"],[[3864,3865],\"valid\"],[[3866,3871],\"valid\",[],\"NV8\"],[[3872,3881],\"valid\"],[[3882,3892],\"valid\",[],\"NV8\"],[[3893,3893],\"valid\"],[[3894,3894],\"valid\",[],\"NV8\"],[[3895,3895],\"valid\"],[[3896,3896],\"valid\",[],\"NV8\"],[[3897,3897],\"valid\"],[[3898,3901],\"valid\",[],\"NV8\"],[[3902,3906],\"valid\"],[[3907,3907],\"mapped\",[3906,4023]],[[3908,3911],\"valid\"],[[3912,3912],\"disallowed\"],[[3913,3916],\"valid\"],[[3917,3917],\"mapped\",[3916,4023]],[[3918,3921],\"valid\"],[[3922,3922],\"mapped\",[3921,4023]],[[3923,3926],\"valid\"],[[3927,3927],\"mapped\",[3926,4023]],[[3928,3931],\"valid\"],[[3932,3932],\"mapped\",[3931,4023]],[[3933,3944],\"valid\"],[[3945,3945],\"mapped\",[3904,4021]],[[3946,3946],\"valid\"],[[3947,3948],\"valid\"],[[3949,3952],\"disallowed\"],[[3953,3954],\"valid\"],[[3955,3955],\"mapped\",[3953,3954]],[[3956,3956],\"valid\"],[[3957,3957],\"mapped\",[3953,3956]],[[3958,3958],\"mapped\",[4018,3968]],[[3959,3959],\"mapped\",[4018,3953,3968]],[[3960,3960],\"mapped\",[4019,3968]],[[3961,3961],\"mapped\",[4019,3953,3968]],[[3962,3968],\"valid\"],[[3969,3969],\"mapped\",[3953,3968]],[[3970,3972],\"valid\"],[[3973,3973],\"valid\",[],\"NV8\"],[[3974,3979],\"valid\"],[[3980,3983],\"valid\"],[[3984,3986],\"valid\"],[[3987,3987],\"mapped\",[3986,4023]],[[3988,3989],\"valid\"],[[3990,3990],\"valid\"],[[3991,3991],\"valid\"],[[3992,3992],\"disallowed\"],[[3993,3996],\"valid\"],[[3997,3997],\"mapped\",[3996,4023]],[[3998,4001],\"valid\"],[[4002,4002],\"mapped\",[4001,4023]],[[4003,4006],\"valid\"],[[4007,4007],\"mapped\",[4006,4023]],[[4008,4011],\"valid\"],[[4012,4012],\"mapped\",[4011,4023]],[[4013,4013],\"valid\"],[[4014,4016],\"valid\"],[[4017,4023],\"valid\"],[[4024,4024],\"valid\"],[[4025,4025],\"mapped\",[3984,4021]],[[4026,4028],\"valid\"],[[4029,4029],\"disallowed\"],[[4030,4037],\"valid\",[],\"NV8\"],[[4038,4038],\"valid\"],[[4039,4044],\"valid\",[],\"NV8\"],[[4045,4045],\"disallowed\"],[[4046,4046],\"valid\",[],\"NV8\"],[[4047,4047],\"valid\",[],\"NV8\"],[[4048,4049],\"valid\",[],\"NV8\"],[[4050,4052],\"valid\",[],\"NV8\"],[[4053,4056],\"valid\",[],\"NV8\"],[[4057,4058],\"valid\",[],\"NV8\"],[[4059,4095],\"disallowed\"],[[4096,4129],\"valid\"],[[4130,4130],\"valid\"],[[4131,4135],\"valid\"],[[4136,4136],\"valid\"],[[4137,4138],\"valid\"],[[4139,4139],\"valid\"],[[4140,4146],\"valid\"],[[4147,4149],\"valid\"],[[4150,4153],\"valid\"],[[4154,4159],\"valid\"],[[4160,4169],\"valid\"],[[4170,4175],\"valid\",[],\"NV8\"],[[4176,4185],\"valid\"],[[4186,4249],\"valid\"],[[4250,4253],\"valid\"],[[4254,4255],\"valid\",[],\"NV8\"],[[4256,4293],\"disallowed\"],[[4294,4294],\"disallowed\"],[[4295,4295],\"mapped\",[11559]],[[4296,4300],\"disallowed\"],[[4301,4301],\"mapped\",[11565]],[[4302,4303],\"disallowed\"],[[4304,4342],\"valid\"],[[4343,4344],\"valid\"],[[4345,4346],\"valid\"],[[4347,4347],\"valid\",[],\"NV8\"],[[4348,4348],\"mapped\",[4316]],[[4349,4351],\"valid\"],[[4352,4441],\"valid\",[],\"NV8\"],[[4442,4446],\"valid\",[],\"NV8\"],[[4447,4448],\"disallowed\"],[[4449,4514],\"valid\",[],\"NV8\"],[[4515,4519],\"valid\",[],\"NV8\"],[[4520,4601],\"valid\",[],\"NV8\"],[[4602,4607],\"valid\",[],\"NV8\"],[[4608,4614],\"valid\"],[[4615,4615],\"valid\"],[[4616,4678],\"valid\"],[[4679,4679],\"valid\"],[[4680,4680],\"valid\"],[[4681,4681],\"disallowed\"],[[4682,4685],\"valid\"],[[4686,4687],\"disallowed\"],[[4688,4694],\"valid\"],[[4695,4695],\"disallowed\"],[[4696,4696],\"valid\"],[[4697,4697],\"disallowed\"],[[4698,4701],\"valid\"],[[4702,4703],\"disallowed\"],[[4704,4742],\"valid\"],[[4743,4743],\"valid\"],[[4744,4744],\"valid\"],[[4745,4745],\"disallowed\"],[[4746,4749],\"valid\"],[[4750,4751],\"disallowed\"],[[4752,4782],\"valid\"],[[4783,4783],\"valid\"],[[4784,4784],\"valid\"],[[4785,4785],\"disallowed\"],[[4786,4789],\"valid\"],[[4790,4791],\"disallowed\"],[[4792,4798],\"valid\"],[[4799,4799],\"disallowed\"],[[4800,4800],\"valid\"],[[4801,4801],\"disallowed\"],[[4802,4805],\"valid\"],[[4806,4807],\"disallowed\"],[[4808,4814],\"valid\"],[[4815,4815],\"valid\"],[[4816,4822],\"valid\"],[[4823,4823],\"disallowed\"],[[4824,4846],\"valid\"],[[4847,4847],\"valid\"],[[4848,4878],\"valid\"],[[4879,4879],\"valid\"],[[4880,4880],\"valid\"],[[4881,4881],\"disallowed\"],[[4882,4885],\"valid\"],[[4886,4887],\"disallowed\"],[[4888,4894],\"valid\"],[[4895,4895],\"valid\"],[[4896,4934],\"valid\"],[[4935,4935],\"valid\"],[[4936,4954],\"valid\"],[[4955,4956],\"disallowed\"],[[4957,4958],\"valid\"],[[4959,4959],\"valid\"],[[4960,4960],\"valid\",[],\"NV8\"],[[4961,4988],\"valid\",[],\"NV8\"],[[4989,4991],\"disallowed\"],[[4992,5007],\"valid\"],[[5008,5017],\"valid\",[],\"NV8\"],[[5018,5023],\"disallowed\"],[[5024,5108],\"valid\"],[[5109,5109],\"valid\"],[[5110,5111],\"disallowed\"],[[5112,5112],\"mapped\",[5104]],[[5113,5113],\"mapped\",[5105]],[[5114,5114],\"mapped\",[5106]],[[5115,5115],\"mapped\",[5107]],[[5116,5116],\"mapped\",[5108]],[[5117,5117],\"mapped\",[5109]],[[5118,5119],\"disallowed\"],[[5120,5120],\"valid\",[],\"NV8\"],[[5121,5740],\"valid\"],[[5741,5742],\"valid\",[],\"NV8\"],[[5743,5750],\"valid\"],[[5751,5759],\"valid\"],[[5760,5760],\"disallowed\"],[[5761,5786],\"valid\"],[[5787,5788],\"valid\",[],\"NV8\"],[[5789,5791],\"disallowed\"],[[5792,5866],\"valid\"],[[5867,5872],\"valid\",[],\"NV8\"],[[5873,5880],\"valid\"],[[5881,5887],\"disallowed\"],[[5888,5900],\"valid\"],[[5901,5901],\"disallowed\"],[[5902,5908],\"valid\"],[[5909,5919],\"disallowed\"],[[5920,5940],\"valid\"],[[5941,5942],\"valid\",[],\"NV8\"],[[5943,5951],\"disallowed\"],[[5952,5971],\"valid\"],[[5972,5983],\"disallowed\"],[[5984,5996],\"valid\"],[[5997,5997],\"disallowed\"],[[5998,6000],\"valid\"],[[6001,6001],\"disallowed\"],[[6002,6003],\"valid\"],[[6004,6015],\"disallowed\"],[[6016,6067],\"valid\"],[[6068,6069],\"disallowed\"],[[6070,6099],\"valid\"],[[6100,6102],\"valid\",[],\"NV8\"],[[6103,6103],\"valid\"],[[6104,6107],\"valid\",[],\"NV8\"],[[6108,6108],\"valid\"],[[6109,6109],\"valid\"],[[6110,6111],\"disallowed\"],[[6112,6121],\"valid\"],[[6122,6127],\"disallowed\"],[[6128,6137],\"valid\",[],\"NV8\"],[[6138,6143],\"disallowed\"],[[6144,6149],\"valid\",[],\"NV8\"],[[6150,6150],\"disallowed\"],[[6151,6154],\"valid\",[],\"NV8\"],[[6155,6157],\"ignored\"],[[6158,6158],\"disallowed\"],[[6159,6159],\"disallowed\"],[[6160,6169],\"valid\"],[[6170,6175],\"disallowed\"],[[6176,6263],\"valid\"],[[6264,6271],\"disallowed\"],[[6272,6313],\"valid\"],[[6314,6314],\"valid\"],[[6315,6319],\"disallowed\"],[[6320,6389],\"valid\"],[[6390,6399],\"disallowed\"],[[6400,6428],\"valid\"],[[6429,6430],\"valid\"],[[6431,6431],\"disallowed\"],[[6432,6443],\"valid\"],[[6444,6447],\"disallowed\"],[[6448,6459],\"valid\"],[[6460,6463],\"disallowed\"],[[6464,6464],\"valid\",[],\"NV8\"],[[6465,6467],\"disallowed\"],[[6468,6469],\"valid\",[],\"NV8\"],[[6470,6509],\"valid\"],[[6510,6511],\"disallowed\"],[[6512,6516],\"valid\"],[[6517,6527],\"disallowed\"],[[6528,6569],\"valid\"],[[6570,6571],\"valid\"],[[6572,6575],\"disallowed\"],[[6576,6601],\"valid\"],[[6602,6607],\"disallowed\"],[[6608,6617],\"valid\"],[[6618,6618],\"valid\",[],\"XV8\"],[[6619,6621],\"disallowed\"],[[6622,6623],\"valid\",[],\"NV8\"],[[6624,6655],\"valid\",[],\"NV8\"],[[6656,6683],\"valid\"],[[6684,6685],\"disallowed\"],[[6686,6687],\"valid\",[],\"NV8\"],[[6688,6750],\"valid\"],[[6751,6751],\"disallowed\"],[[6752,6780],\"valid\"],[[6781,6782],\"disallowed\"],[[6783,6793],\"valid\"],[[6794,6799],\"disallowed\"],[[6800,6809],\"valid\"],[[6810,6815],\"disallowed\"],[[6816,6822],\"valid\",[],\"NV8\"],[[6823,6823],\"valid\"],[[6824,6829],\"valid\",[],\"NV8\"],[[6830,6831],\"disallowed\"],[[6832,6845],\"valid\"],[[6846,6846],\"valid\",[],\"NV8\"],[[6847,6911],\"disallowed\"],[[6912,6987],\"valid\"],[[6988,6991],\"disallowed\"],[[6992,7001],\"valid\"],[[7002,7018],\"valid\",[],\"NV8\"],[[7019,7027],\"valid\"],[[7028,7036],\"valid\",[],\"NV8\"],[[7037,7039],\"disallowed\"],[[7040,7082],\"valid\"],[[7083,7085],\"valid\"],[[7086,7097],\"valid\"],[[7098,7103],\"valid\"],[[7104,7155],\"valid\"],[[7156,7163],\"disallowed\"],[[7164,7167],\"valid\",[],\"NV8\"],[[7168,7223],\"valid\"],[[7224,7226],\"disallowed\"],[[7227,7231],\"valid\",[],\"NV8\"],[[7232,7241],\"valid\"],[[7242,7244],\"disallowed\"],[[7245,7293],\"valid\"],[[7294,7295],\"valid\",[],\"NV8\"],[[7296,7359],\"disallowed\"],[[7360,7367],\"valid\",[],\"NV8\"],[[7368,7375],\"disallowed\"],[[7376,7378],\"valid\"],[[7379,7379],\"valid\",[],\"NV8\"],[[7380,7410],\"valid\"],[[7411,7414],\"valid\"],[[7415,7415],\"disallowed\"],[[7416,7417],\"valid\"],[[7418,7423],\"disallowed\"],[[7424,7467],\"valid\"],[[7468,7468],\"mapped\",[97]],[[7469,7469],\"mapped\",[230]],[[7470,7470],\"mapped\",[98]],[[7471,7471],\"valid\"],[[7472,7472],\"mapped\",[100]],[[7473,7473],\"mapped\",[101]],[[7474,7474],\"mapped\",[477]],[[7475,7475],\"mapped\",[103]],[[7476,7476],\"mapped\",[104]],[[7477,7477],\"mapped\",[105]],[[7478,7478],\"mapped\",[106]],[[7479,7479],\"mapped\",[107]],[[7480,7480],\"mapped\",[108]],[[7481,7481],\"mapped\",[109]],[[7482,7482],\"mapped\",[110]],[[7483,7483],\"valid\"],[[7484,7484],\"mapped\",[111]],[[7485,7485],\"mapped\",[547]],[[7486,7486],\"mapped\",[112]],[[7487,7487],\"mapped\",[114]],[[7488,7488],\"mapped\",[116]],[[7489,7489],\"mapped\",[117]],[[7490,7490],\"mapped\",[119]],[[7491,7491],\"mapped\",[97]],[[7492,7492],\"mapped\",[592]],[[7493,7493],\"mapped\",[593]],[[7494,7494],\"mapped\",[7426]],[[7495,7495],\"mapped\",[98]],[[7496,7496],\"mapped\",[100]],[[7497,7497],\"mapped\",[101]],[[7498,7498],\"mapped\",[601]],[[7499,7499],\"mapped\",[603]],[[7500,7500],\"mapped\",[604]],[[7501,7501],\"mapped\",[103]],[[7502,7502],\"valid\"],[[7503,7503],\"mapped\",[107]],[[7504,7504],\"mapped\",[109]],[[7505,7505],\"mapped\",[331]],[[7506,7506],\"mapped\",[111]],[[7507,7507],\"mapped\",[596]],[[7508,7508],\"mapped\",[7446]],[[7509,7509],\"mapped\",[7447]],[[7510,7510],\"mapped\",[112]],[[7511,7511],\"mapped\",[116]],[[7512,7512],\"mapped\",[117]],[[7513,7513],\"mapped\",[7453]],[[7514,7514],\"mapped\",[623]],[[7515,7515],\"mapped\",[118]],[[7516,7516],\"mapped\",[7461]],[[7517,7517],\"mapped\",[946]],[[7518,7518],\"mapped\",[947]],[[7519,7519],\"mapped\",[948]],[[7520,7520],\"mapped\",[966]],[[7521,7521],\"mapped\",[967]],[[7522,7522],\"mapped\",[105]],[[7523,7523],\"mapped\",[114]],[[7524,7524],\"mapped\",[117]],[[7525,7525],\"mapped\",[118]],[[7526,7526],\"mapped\",[946]],[[7527,7527],\"mapped\",[947]],[[7528,7528],\"mapped\",[961]],[[7529,7529],\"mapped\",[966]],[[7530,7530],\"mapped\",[967]],[[7531,7531],\"valid\"],[[7532,7543],\"valid\"],[[7544,7544],\"mapped\",[1085]],[[7545,7578],\"valid\"],[[7579,7579],\"mapped\",[594]],[[7580,7580],\"mapped\",[99]],[[7581,7581],\"mapped\",[597]],[[7582,7582],\"mapped\",[240]],[[7583,7583],\"mapped\",[604]],[[7584,7584],\"mapped\",[102]],[[7585,7585],\"mapped\",[607]],[[7586,7586],\"mapped\",[609]],[[7587,7587],\"mapped\",[613]],[[7588,7588],\"mapped\",[616]],[[7589,7589],\"mapped\",[617]],[[7590,7590],\"mapped\",[618]],[[7591,7591],\"mapped\",[7547]],[[7592,7592],\"mapped\",[669]],[[7593,7593],\"mapped\",[621]],[[7594,7594],\"mapped\",[7557]],[[7595,7595],\"mapped\",[671]],[[7596,7596],\"mapped\",[625]],[[7597,7597],\"mapped\",[624]],[[7598,7598],\"mapped\",[626]],[[7599,7599],\"mapped\",[627]],[[7600,7600],\"mapped\",[628]],[[7601,7601],\"mapped\",[629]],[[7602,7602],\"mapped\",[632]],[[7603,7603],\"mapped\",[642]],[[7604,7604],\"mapped\",[643]],[[7605,7605],\"mapped\",[427]],[[7606,7606],\"mapped\",[649]],[[7607,7607],\"mapped\",[650]],[[7608,7608],\"mapped\",[7452]],[[7609,7609],\"mapped\",[651]],[[7610,7610],\"mapped\",[652]],[[7611,7611],\"mapped\",[122]],[[7612,7612],\"mapped\",[656]],[[7613,7613],\"mapped\",[657]],[[7614,7614],\"mapped\",[658]],[[7615,7615],\"mapped\",[952]],[[7616,7619],\"valid\"],[[7620,7626],\"valid\"],[[7627,7654],\"valid\"],[[7655,7669],\"valid\"],[[7670,7675],\"disallowed\"],[[7676,7676],\"valid\"],[[7677,7677],\"valid\"],[[7678,7679],\"valid\"],[[7680,7680],\"mapped\",[7681]],[[7681,7681],\"valid\"],[[7682,7682],\"mapped\",[7683]],[[7683,7683],\"valid\"],[[7684,7684],\"mapped\",[7685]],[[7685,7685],\"valid\"],[[7686,7686],\"mapped\",[7687]],[[7687,7687],\"valid\"],[[7688,7688],\"mapped\",[7689]],[[7689,7689],\"valid\"],[[7690,7690],\"mapped\",[7691]],[[7691,7691],\"valid\"],[[7692,7692],\"mapped\",[7693]],[[7693,7693],\"valid\"],[[7694,7694],\"mapped\",[7695]],[[7695,7695],\"valid\"],[[7696,7696],\"mapped\",[7697]],[[7697,7697],\"valid\"],[[7698,7698],\"mapped\",[7699]],[[7699,7699],\"valid\"],[[7700,7700],\"mapped\",[7701]],[[7701,7701],\"valid\"],[[7702,7702],\"mapped\",[7703]],[[7703,7703],\"valid\"],[[7704,7704],\"mapped\",[7705]],[[7705,7705],\"valid\"],[[7706,7706],\"mapped\",[7707]],[[7707,7707],\"valid\"],[[7708,7708],\"mapped\",[7709]],[[7709,7709],\"valid\"],[[7710,7710],\"mapped\",[7711]],[[7711,7711],\"valid\"],[[7712,7712],\"mapped\",[7713]],[[7713,7713],\"valid\"],[[7714,7714],\"mapped\",[7715]],[[7715,7715],\"valid\"],[[7716,7716],\"mapped\",[7717]],[[7717,7717],\"valid\"],[[7718,7718],\"mapped\",[7719]],[[7719,7719],\"valid\"],[[7720,7720],\"mapped\",[7721]],[[7721,7721],\"valid\"],[[7722,7722],\"mapped\",[7723]],[[7723,7723],\"valid\"],[[7724,7724],\"mapped\",[7725]],[[7725,7725],\"valid\"],[[7726,7726],\"mapped\",[7727]],[[7727,7727],\"valid\"],[[7728,7728],\"mapped\",[7729]],[[7729,7729],\"valid\"],[[7730,7730],\"mapped\",[7731]],[[7731,7731],\"valid\"],[[7732,7732],\"mapped\",[7733]],[[7733,7733],\"valid\"],[[7734,7734],\"mapped\",[7735]],[[7735,7735],\"valid\"],[[7736,7736],\"mapped\",[7737]],[[7737,7737],\"valid\"],[[7738,7738],\"mapped\",[7739]],[[7739,7739],\"valid\"],[[7740,7740],\"mapped\",[7741]],[[7741,7741],\"valid\"],[[7742,7742],\"mapped\",[7743]],[[7743,7743],\"valid\"],[[7744,7744],\"mapped\",[7745]],[[7745,7745],\"valid\"],[[7746,7746],\"mapped\",[7747]],[[7747,7747],\"valid\"],[[7748,7748],\"mapped\",[7749]],[[7749,7749],\"valid\"],[[7750,7750],\"mapped\",[7751]],[[7751,7751],\"valid\"],[[7752,7752],\"mapped\",[7753]],[[7753,7753],\"valid\"],[[7754,7754],\"mapped\",[7755]],[[7755,7755],\"valid\"],[[7756,7756],\"mapped\",[7757]],[[7757,7757],\"valid\"],[[7758,7758],\"mapped\",[7759]],[[7759,7759],\"valid\"],[[7760,7760],\"mapped\",[7761]],[[7761,7761],\"valid\"],[[7762,7762],\"mapped\",[7763]],[[7763,7763],\"valid\"],[[7764,7764],\"mapped\",[7765]],[[7765,7765],\"valid\"],[[7766,7766],\"mapped\",[7767]],[[7767,7767],\"valid\"],[[7768,7768],\"mapped\",[7769]],[[7769,7769],\"valid\"],[[7770,7770],\"mapped\",[7771]],[[7771,7771],\"valid\"],[[7772,7772],\"mapped\",[7773]],[[7773,7773],\"valid\"],[[7774,7774],\"mapped\",[7775]],[[7775,7775],\"valid\"],[[7776,7776],\"mapped\",[7777]],[[7777,7777],\"valid\"],[[7778,7778],\"mapped\",[7779]],[[7779,7779],\"valid\"],[[7780,7780],\"mapped\",[7781]],[[7781,7781],\"valid\"],[[7782,7782],\"mapped\",[7783]],[[7783,7783],\"valid\"],[[7784,7784],\"mapped\",[7785]],[[7785,7785],\"valid\"],[[7786,7786],\"mapped\",[7787]],[[7787,7787],\"valid\"],[[7788,7788],\"mapped\",[7789]],[[7789,7789],\"valid\"],[[7790,7790],\"mapped\",[7791]],[[7791,7791],\"valid\"],[[7792,7792],\"mapped\",[7793]],[[7793,7793],\"valid\"],[[7794,7794],\"mapped\",[7795]],[[7795,7795],\"valid\"],[[7796,7796],\"mapped\",[7797]],[[7797,7797],\"valid\"],[[7798,7798],\"mapped\",[7799]],[[7799,7799],\"valid\"],[[7800,7800],\"mapped\",[7801]],[[7801,7801],\"valid\"],[[7802,7802],\"mapped\",[7803]],[[7803,7803],\"valid\"],[[7804,7804],\"mapped\",[7805]],[[7805,7805],\"valid\"],[[7806,7806],\"mapped\",[7807]],[[7807,7807],\"valid\"],[[7808,7808],\"mapped\",[7809]],[[7809,7809],\"valid\"],[[7810,7810],\"mapped\",[7811]],[[7811,7811],\"valid\"],[[7812,7812],\"mapped\",[7813]],[[7813,7813],\"valid\"],[[7814,7814],\"mapped\",[7815]],[[7815,7815],\"valid\"],[[7816,7816],\"mapped\",[7817]],[[7817,7817],\"valid\"],[[7818,7818],\"mapped\",[7819]],[[7819,7819],\"valid\"],[[7820,7820],\"mapped\",[7821]],[[7821,7821],\"valid\"],[[7822,7822],\"mapped\",[7823]],[[7823,7823],\"valid\"],[[7824,7824],\"mapped\",[7825]],[[7825,7825],\"valid\"],[[7826,7826],\"mapped\",[7827]],[[7827,7827],\"valid\"],[[7828,7828],\"mapped\",[7829]],[[7829,7833],\"valid\"],[[7834,7834],\"mapped\",[97,702]],[[7835,7835],\"mapped\",[7777]],[[7836,7837],\"valid\"],[[7838,7838],\"mapped\",[115,115]],[[7839,7839],\"valid\"],[[7840,7840],\"mapped\",[7841]],[[7841,7841],\"valid\"],[[7842,7842],\"mapped\",[7843]],[[7843,7843],\"valid\"],[[7844,7844],\"mapped\",[7845]],[[7845,7845],\"valid\"],[[7846,7846],\"mapped\",[7847]],[[7847,7847],\"valid\"],[[7848,7848],\"mapped\",[7849]],[[7849,7849],\"valid\"],[[7850,7850],\"mapped\",[7851]],[[7851,7851],\"valid\"],[[7852,7852],\"mapped\",[7853]],[[7853,7853],\"valid\"],[[7854,7854],\"mapped\",[7855]],[[7855,7855],\"valid\"],[[7856,7856],\"mapped\",[7857]],[[7857,7857],\"valid\"],[[7858,7858],\"mapped\",[7859]],[[7859,7859],\"valid\"],[[7860,7860],\"mapped\",[7861]],[[7861,7861],\"valid\"],[[7862,7862],\"mapped\",[7863]],[[7863,7863],\"valid\"],[[7864,7864],\"mapped\",[7865]],[[7865,7865],\"valid\"],[[7866,7866],\"mapped\",[7867]],[[7867,7867],\"valid\"],[[7868,7868],\"mapped\",[7869]],[[7869,7869],\"valid\"],[[7870,7870],\"mapped\",[7871]],[[7871,7871],\"valid\"],[[7872,7872],\"mapped\",[7873]],[[7873,7873],\"valid\"],[[7874,7874],\"mapped\",[7875]],[[7875,7875],\"valid\"],[[7876,7876],\"mapped\",[7877]],[[7877,7877],\"valid\"],[[7878,7878],\"mapped\",[7879]],[[7879,7879],\"valid\"],[[7880,7880],\"mapped\",[7881]],[[7881,7881],\"valid\"],[[7882,7882],\"mapped\",[7883]],[[7883,7883],\"valid\"],[[7884,7884],\"mapped\",[7885]],[[7885,7885],\"valid\"],[[7886,7886],\"mapped\",[7887]],[[7887,7887],\"valid\"],[[7888,7888],\"mapped\",[7889]],[[7889,7889],\"valid\"],[[7890,7890],\"mapped\",[7891]],[[7891,7891],\"valid\"],[[7892,7892],\"mapped\",[7893]],[[7893,7893],\"valid\"],[[7894,7894],\"mapped\",[7895]],[[7895,7895],\"valid\"],[[7896,7896],\"mapped\",[7897]],[[7897,7897],\"valid\"],[[7898,7898],\"mapped\",[7899]],[[7899,7899],\"valid\"],[[7900,7900],\"mapped\",[7901]],[[7901,7901],\"valid\"],[[7902,7902],\"mapped\",[7903]],[[7903,7903],\"valid\"],[[7904,7904],\"mapped\",[7905]],[[7905,7905],\"valid\"],[[7906,7906],\"mapped\",[7907]],[[7907,7907],\"valid\"],[[7908,7908],\"mapped\",[7909]],[[7909,7909],\"valid\"],[[7910,7910],\"mapped\",[7911]],[[7911,7911],\"valid\"],[[7912,7912],\"mapped\",[7913]],[[7913,7913],\"valid\"],[[7914,7914],\"mapped\",[7915]],[[7915,7915],\"valid\"],[[7916,7916],\"mapped\",[7917]],[[7917,7917],\"valid\"],[[7918,7918],\"mapped\",[7919]],[[7919,7919],\"valid\"],[[7920,7920],\"mapped\",[7921]],[[7921,7921],\"valid\"],[[7922,7922],\"mapped\",[7923]],[[7923,7923],\"valid\"],[[7924,7924],\"mapped\",[7925]],[[7925,7925],\"valid\"],[[7926,7926],\"mapped\",[7927]],[[7927,7927],\"valid\"],[[7928,7928],\"mapped\",[7929]],[[7929,7929],\"valid\"],[[7930,7930],\"mapped\",[7931]],[[7931,7931],\"valid\"],[[7932,7932],\"mapped\",[7933]],[[7933,7933],\"valid\"],[[7934,7934],\"mapped\",[7935]],[[7935,7935],\"valid\"],[[7936,7943],\"valid\"],[[7944,7944],\"mapped\",[7936]],[[7945,7945],\"mapped\",[7937]],[[7946,7946],\"mapped\",[7938]],[[7947,7947],\"mapped\",[7939]],[[7948,7948],\"mapped\",[7940]],[[7949,7949],\"mapped\",[7941]],[[7950,7950],\"mapped\",[7942]],[[7951,7951],\"mapped\",[7943]],[[7952,7957],\"valid\"],[[7958,7959],\"disallowed\"],[[7960,7960],\"mapped\",[7952]],[[7961,7961],\"mapped\",[7953]],[[7962,7962],\"mapped\",[7954]],[[7963,7963],\"mapped\",[7955]],[[7964,7964],\"mapped\",[7956]],[[7965,7965],\"mapped\",[7957]],[[7966,7967],\"disallowed\"],[[7968,7975],\"valid\"],[[7976,7976],\"mapped\",[7968]],[[7977,7977],\"mapped\",[7969]],[[7978,7978],\"mapped\",[7970]],[[7979,7979],\"mapped\",[7971]],[[7980,7980],\"mapped\",[7972]],[[7981,7981],\"mapped\",[7973]],[[7982,7982],\"mapped\",[7974]],[[7983,7983],\"mapped\",[7975]],[[7984,7991],\"valid\"],[[7992,7992],\"mapped\",[7984]],[[7993,7993],\"mapped\",[7985]],[[7994,7994],\"mapped\",[7986]],[[7995,7995],\"mapped\",[7987]],[[7996,7996],\"mapped\",[7988]],[[7997,7997],\"mapped\",[7989]],[[7998,7998],\"mapped\",[7990]],[[7999,7999],\"mapped\",[7991]],[[8000,8005],\"valid\"],[[8006,8007],\"disallowed\"],[[8008,8008],\"mapped\",[8000]],[[8009,8009],\"mapped\",[8001]],[[8010,8010],\"mapped\",[8002]],[[8011,8011],\"mapped\",[8003]],[[8012,8012],\"mapped\",[8004]],[[8013,8013],\"mapped\",[8005]],[[8014,8015],\"disallowed\"],[[8016,8023],\"valid\"],[[8024,8024],\"disallowed\"],[[8025,8025],\"mapped\",[8017]],[[8026,8026],\"disallowed\"],[[8027,8027],\"mapped\",[8019]],[[8028,8028],\"disallowed\"],[[8029,8029],\"mapped\",[8021]],[[8030,8030],\"disallowed\"],[[8031,8031],\"mapped\",[8023]],[[8032,8039],\"valid\"],[[8040,8040],\"mapped\",[8032]],[[8041,8041],\"mapped\",[8033]],[[8042,8042],\"mapped\",[8034]],[[8043,8043],\"mapped\",[8035]],[[8044,8044],\"mapped\",[8036]],[[8045,8045],\"mapped\",[8037]],[[8046,8046],\"mapped\",[8038]],[[8047,8047],\"mapped\",[8039]],[[8048,8048],\"valid\"],[[8049,8049],\"mapped\",[940]],[[8050,8050],\"valid\"],[[8051,8051],\"mapped\",[941]],[[8052,8052],\"valid\"],[[8053,8053],\"mapped\",[942]],[[8054,8054],\"valid\"],[[8055,8055],\"mapped\",[943]],[[8056,8056],\"valid\"],[[8057,8057],\"mapped\",[972]],[[8058,8058],\"valid\"],[[8059,8059],\"mapped\",[973]],[[8060,8060],\"valid\"],[[8061,8061],\"mapped\",[974]],[[8062,8063],\"disallowed\"],[[8064,8064],\"mapped\",[7936,953]],[[8065,8065],\"mapped\",[7937,953]],[[8066,8066],\"mapped\",[7938,953]],[[8067,8067],\"mapped\",[7939,953]],[[8068,8068],\"mapped\",[7940,953]],[[8069,8069],\"mapped\",[7941,953]],[[8070,8070],\"mapped\",[7942,953]],[[8071,8071],\"mapped\",[7943,953]],[[8072,8072],\"mapped\",[7936,953]],[[8073,8073],\"mapped\",[7937,953]],[[8074,8074],\"mapped\",[7938,953]],[[8075,8075],\"mapped\",[7939,953]],[[8076,8076],\"mapped\",[7940,953]],[[8077,8077],\"mapped\",[7941,953]],[[8078,8078],\"mapped\",[7942,953]],[[8079,8079],\"mapped\",[7943,953]],[[8080,8080],\"mapped\",[7968,953]],[[8081,8081],\"mapped\",[7969,953]],[[8082,8082],\"mapped\",[7970,953]],[[8083,8083],\"mapped\",[7971,953]],[[8084,8084],\"mapped\",[7972,953]],[[8085,8085],\"mapped\",[7973,953]],[[8086,8086],\"mapped\",[7974,953]],[[8087,8087],\"mapped\",[7975,953]],[[8088,8088],\"mapped\",[7968,953]],[[8089,8089],\"mapped\",[7969,953]],[[8090,8090],\"mapped\",[7970,953]],[[8091,8091],\"mapped\",[7971,953]],[[8092,8092],\"mapped\",[7972,953]],[[8093,8093],\"mapped\",[7973,953]],[[8094,8094],\"mapped\",[7974,953]],[[8095,8095],\"mapped\",[7975,953]],[[8096,8096],\"mapped\",[8032,953]],[[8097,8097],\"mapped\",[8033,953]],[[8098,8098],\"mapped\",[8034,953]],[[8099,8099],\"mapped\",[8035,953]],[[8100,8100],\"mapped\",[8036,953]],[[8101,8101],\"mapped\",[8037,953]],[[8102,8102],\"mapped\",[8038,953]],[[8103,8103],\"mapped\",[8039,953]],[[8104,8104],\"mapped\",[8032,953]],[[8105,8105],\"mapped\",[8033,953]],[[8106,8106],\"mapped\",[8034,953]],[[8107,8107],\"mapped\",[8035,953]],[[8108,8108],\"mapped\",[8036,953]],[[8109,8109],\"mapped\",[8037,953]],[[8110,8110],\"mapped\",[8038,953]],[[8111,8111],\"mapped\",[8039,953]],[[8112,8113],\"valid\"],[[8114,8114],\"mapped\",[8048,953]],[[8115,8115],\"mapped\",[945,953]],[[8116,8116],\"mapped\",[940,953]],[[8117,8117],\"disallowed\"],[[8118,8118],\"valid\"],[[8119,8119],\"mapped\",[8118,953]],[[8120,8120],\"mapped\",[8112]],[[8121,8121],\"mapped\",[8113]],[[8122,8122],\"mapped\",[8048]],[[8123,8123],\"mapped\",[940]],[[8124,8124],\"mapped\",[945,953]],[[8125,8125],\"disallowed_STD3_mapped\",[32,787]],[[8126,8126],\"mapped\",[953]],[[8127,8127],\"disallowed_STD3_mapped\",[32,787]],[[8128,8128],\"disallowed_STD3_mapped\",[32,834]],[[8129,8129],\"disallowed_STD3_mapped\",[32,776,834]],[[8130,8130],\"mapped\",[8052,953]],[[8131,8131],\"mapped\",[951,953]],[[8132,8132],\"mapped\",[942,953]],[[8133,8133],\"disallowed\"],[[8134,8134],\"valid\"],[[8135,8135],\"mapped\",[8134,953]],[[8136,8136],\"mapped\",[8050]],[[8137,8137],\"mapped\",[941]],[[8138,8138],\"mapped\",[8052]],[[8139,8139],\"mapped\",[942]],[[8140,8140],\"mapped\",[951,953]],[[8141,8141],\"disallowed_STD3_mapped\",[32,787,768]],[[8142,8142],\"disallowed_STD3_mapped\",[32,787,769]],[[8143,8143],\"disallowed_STD3_mapped\",[32,787,834]],[[8144,8146],\"valid\"],[[8147,8147],\"mapped\",[912]],[[8148,8149],\"disallowed\"],[[8150,8151],\"valid\"],[[8152,8152],\"mapped\",[8144]],[[8153,8153],\"mapped\",[8145]],[[8154,8154],\"mapped\",[8054]],[[8155,8155],\"mapped\",[943]],[[8156,8156],\"disallowed\"],[[8157,8157],\"disallowed_STD3_mapped\",[32,788,768]],[[8158,8158],\"disallowed_STD3_mapped\",[32,788,769]],[[8159,8159],\"disallowed_STD3_mapped\",[32,788,834]],[[8160,8162],\"valid\"],[[8163,8163],\"mapped\",[944]],[[8164,8167],\"valid\"],[[8168,8168],\"mapped\",[8160]],[[8169,8169],\"mapped\",[8161]],[[8170,8170],\"mapped\",[8058]],[[8171,8171],\"mapped\",[973]],[[8172,8172],\"mapped\",[8165]],[[8173,8173],\"disallowed_STD3_mapped\",[32,776,768]],[[8174,8174],\"disallowed_STD3_mapped\",[32,776,769]],[[8175,8175],\"disallowed_STD3_mapped\",[96]],[[8176,8177],\"disallowed\"],[[8178,8178],\"mapped\",[8060,953]],[[8179,8179],\"mapped\",[969,953]],[[8180,8180],\"mapped\",[974,953]],[[8181,8181],\"disallowed\"],[[8182,8182],\"valid\"],[[8183,8183],\"mapped\",[8182,953]],[[8184,8184],\"mapped\",[8056]],[[8185,8185],\"mapped\",[972]],[[8186,8186],\"mapped\",[8060]],[[8187,8187],\"mapped\",[974]],[[8188,8188],\"mapped\",[969,953]],[[8189,8189],\"disallowed_STD3_mapped\",[32,769]],[[8190,8190],\"disallowed_STD3_mapped\",[32,788]],[[8191,8191],\"disallowed\"],[[8192,8202],\"disallowed_STD3_mapped\",[32]],[[8203,8203],\"ignored\"],[[8204,8205],\"deviation\",[]],[[8206,8207],\"disallowed\"],[[8208,8208],\"valid\",[],\"NV8\"],[[8209,8209],\"mapped\",[8208]],[[8210,8214],\"valid\",[],\"NV8\"],[[8215,8215],\"disallowed_STD3_mapped\",[32,819]],[[8216,8227],\"valid\",[],\"NV8\"],[[8228,8230],\"disallowed\"],[[8231,8231],\"valid\",[],\"NV8\"],[[8232,8238],\"disallowed\"],[[8239,8239],\"disallowed_STD3_mapped\",[32]],[[8240,8242],\"valid\",[],\"NV8\"],[[8243,8243],\"mapped\",[8242,8242]],[[8244,8244],\"mapped\",[8242,8242,8242]],[[8245,8245],\"valid\",[],\"NV8\"],[[8246,8246],\"mapped\",[8245,8245]],[[8247,8247],\"mapped\",[8245,8245,8245]],[[8248,8251],\"valid\",[],\"NV8\"],[[8252,8252],\"disallowed_STD3_mapped\",[33,33]],[[8253,8253],\"valid\",[],\"NV8\"],[[8254,8254],\"disallowed_STD3_mapped\",[32,773]],[[8255,8262],\"valid\",[],\"NV8\"],[[8263,8263],\"disallowed_STD3_mapped\",[63,63]],[[8264,8264],\"disallowed_STD3_mapped\",[63,33]],[[8265,8265],\"disallowed_STD3_mapped\",[33,63]],[[8266,8269],\"valid\",[],\"NV8\"],[[8270,8274],\"valid\",[],\"NV8\"],[[8275,8276],\"valid\",[],\"NV8\"],[[8277,8278],\"valid\",[],\"NV8\"],[[8279,8279],\"mapped\",[8242,8242,8242,8242]],[[8280,8286],\"valid\",[],\"NV8\"],[[8287,8287],\"disallowed_STD3_mapped\",[32]],[[8288,8288],\"ignored\"],[[8289,8291],\"disallowed\"],[[8292,8292],\"ignored\"],[[8293,8293],\"disallowed\"],[[8294,8297],\"disallowed\"],[[8298,8303],\"disallowed\"],[[8304,8304],\"mapped\",[48]],[[8305,8305],\"mapped\",[105]],[[8306,8307],\"disallowed\"],[[8308,8308],\"mapped\",[52]],[[8309,8309],\"mapped\",[53]],[[8310,8310],\"mapped\",[54]],[[8311,8311],\"mapped\",[55]],[[8312,8312],\"mapped\",[56]],[[8313,8313],\"mapped\",[57]],[[8314,8314],\"disallowed_STD3_mapped\",[43]],[[8315,8315],\"mapped\",[8722]],[[8316,8316],\"disallowed_STD3_mapped\",[61]],[[8317,8317],\"disallowed_STD3_mapped\",[40]],[[8318,8318],\"disallowed_STD3_mapped\",[41]],[[8319,8319],\"mapped\",[110]],[[8320,8320],\"mapped\",[48]],[[8321,8321],\"mapped\",[49]],[[8322,8322],\"mapped\",[50]],[[8323,8323],\"mapped\",[51]],[[8324,8324],\"mapped\",[52]],[[8325,8325],\"mapped\",[53]],[[8326,8326],\"mapped\",[54]],[[8327,8327],\"mapped\",[55]],[[8328,8328],\"mapped\",[56]],[[8329,8329],\"mapped\",[57]],[[8330,8330],\"disallowed_STD3_mapped\",[43]],[[8331,8331],\"mapped\",[8722]],[[8332,8332],\"disallowed_STD3_mapped\",[61]],[[8333,8333],\"disallowed_STD3_mapped\",[40]],[[8334,8334],\"disallowed_STD3_mapped\",[41]],[[8335,8335],\"disallowed\"],[[8336,8336],\"mapped\",[97]],[[8337,8337],\"mapped\",[101]],[[8338,8338],\"mapped\",[111]],[[8339,8339],\"mapped\",[120]],[[8340,8340],\"mapped\",[601]],[[8341,8341],\"mapped\",[104]],[[8342,8342],\"mapped\",[107]],[[8343,8343],\"mapped\",[108]],[[8344,8344],\"mapped\",[109]],[[8345,8345],\"mapped\",[110]],[[8346,8346],\"mapped\",[112]],[[8347,8347],\"mapped\",[115]],[[8348,8348],\"mapped\",[116]],[[8349,8351],\"disallowed\"],[[8352,8359],\"valid\",[],\"NV8\"],[[8360,8360],\"mapped\",[114,115]],[[8361,8362],\"valid\",[],\"NV8\"],[[8363,8363],\"valid\",[],\"NV8\"],[[8364,8364],\"valid\",[],\"NV8\"],[[8365,8367],\"valid\",[],\"NV8\"],[[8368,8369],\"valid\",[],\"NV8\"],[[8370,8373],\"valid\",[],\"NV8\"],[[8374,8376],\"valid\",[],\"NV8\"],[[8377,8377],\"valid\",[],\"NV8\"],[[8378,8378],\"valid\",[],\"NV8\"],[[8379,8381],\"valid\",[],\"NV8\"],[[8382,8382],\"valid\",[],\"NV8\"],[[8383,8399],\"disallowed\"],[[8400,8417],\"valid\",[],\"NV8\"],[[8418,8419],\"valid\",[],\"NV8\"],[[8420,8426],\"valid\",[],\"NV8\"],[[8427,8427],\"valid\",[],\"NV8\"],[[8428,8431],\"valid\",[],\"NV8\"],[[8432,8432],\"valid\",[],\"NV8\"],[[8433,8447],\"disallowed\"],[[8448,8448],\"disallowed_STD3_mapped\",[97,47,99]],[[8449,8449],\"disallowed_STD3_mapped\",[97,47,115]],[[8450,8450],\"mapped\",[99]],[[8451,8451],\"mapped\",[176,99]],[[8452,8452],\"valid\",[],\"NV8\"],[[8453,8453],\"disallowed_STD3_mapped\",[99,47,111]],[[8454,8454],\"disallowed_STD3_mapped\",[99,47,117]],[[8455,8455],\"mapped\",[603]],[[8456,8456],\"valid\",[],\"NV8\"],[[8457,8457],\"mapped\",[176,102]],[[8458,8458],\"mapped\",[103]],[[8459,8462],\"mapped\",[104]],[[8463,8463],\"mapped\",[295]],[[8464,8465],\"mapped\",[105]],[[8466,8467],\"mapped\",[108]],[[8468,8468],\"valid\",[],\"NV8\"],[[8469,8469],\"mapped\",[110]],[[8470,8470],\"mapped\",[110,111]],[[8471,8472],\"valid\",[],\"NV8\"],[[8473,8473],\"mapped\",[112]],[[8474,8474],\"mapped\",[113]],[[8475,8477],\"mapped\",[114]],[[8478,8479],\"valid\",[],\"NV8\"],[[8480,8480],\"mapped\",[115,109]],[[8481,8481],\"mapped\",[116,101,108]],[[8482,8482],\"mapped\",[116,109]],[[8483,8483],\"valid\",[],\"NV8\"],[[8484,8484],\"mapped\",[122]],[[8485,8485],\"valid\",[],\"NV8\"],[[8486,8486],\"mapped\",[969]],[[8487,8487],\"valid\",[],\"NV8\"],[[8488,8488],\"mapped\",[122]],[[8489,8489],\"valid\",[],\"NV8\"],[[8490,8490],\"mapped\",[107]],[[8491,8491],\"mapped\",[229]],[[8492,8492],\"mapped\",[98]],[[8493,8493],\"mapped\",[99]],[[8494,8494],\"valid\",[],\"NV8\"],[[8495,8496],\"mapped\",[101]],[[8497,8497],\"mapped\",[102]],[[8498,8498],\"disallowed\"],[[8499,8499],\"mapped\",[109]],[[8500,8500],\"mapped\",[111]],[[8501,8501],\"mapped\",[1488]],[[8502,8502],\"mapped\",[1489]],[[8503,8503],\"mapped\",[1490]],[[8504,8504],\"mapped\",[1491]],[[8505,8505],\"mapped\",[105]],[[8506,8506],\"valid\",[],\"NV8\"],[[8507,8507],\"mapped\",[102,97,120]],[[8508,8508],\"mapped\",[960]],[[8509,8510],\"mapped\",[947]],[[8511,8511],\"mapped\",[960]],[[8512,8512],\"mapped\",[8721]],[[8513,8516],\"valid\",[],\"NV8\"],[[8517,8518],\"mapped\",[100]],[[8519,8519],\"mapped\",[101]],[[8520,8520],\"mapped\",[105]],[[8521,8521],\"mapped\",[106]],[[8522,8523],\"valid\",[],\"NV8\"],[[8524,8524],\"valid\",[],\"NV8\"],[[8525,8525],\"valid\",[],\"NV8\"],[[8526,8526],\"valid\"],[[8527,8527],\"valid\",[],\"NV8\"],[[8528,8528],\"mapped\",[49,8260,55]],[[8529,8529],\"mapped\",[49,8260,57]],[[8530,8530],\"mapped\",[49,8260,49,48]],[[8531,8531],\"mapped\",[49,8260,51]],[[8532,8532],\"mapped\",[50,8260,51]],[[8533,8533],\"mapped\",[49,8260,53]],[[8534,8534],\"mapped\",[50,8260,53]],[[8535,8535],\"mapped\",[51,8260,53]],[[8536,8536],\"mapped\",[52,8260,53]],[[8537,8537],\"mapped\",[49,8260,54]],[[8538,8538],\"mapped\",[53,8260,54]],[[8539,8539],\"mapped\",[49,8260,56]],[[8540,8540],\"mapped\",[51,8260,56]],[[8541,8541],\"mapped\",[53,8260,56]],[[8542,8542],\"mapped\",[55,8260,56]],[[8543,8543],\"mapped\",[49,8260]],[[8544,8544],\"mapped\",[105]],[[8545,8545],\"mapped\",[105,105]],[[8546,8546],\"mapped\",[105,105,105]],[[8547,8547],\"mapped\",[105,118]],[[8548,8548],\"mapped\",[118]],[[8549,8549],\"mapped\",[118,105]],[[8550,8550],\"mapped\",[118,105,105]],[[8551,8551],\"mapped\",[118,105,105,105]],[[8552,8552],\"mapped\",[105,120]],[[8553,8553],\"mapped\",[120]],[[8554,8554],\"mapped\",[120,105]],[[8555,8555],\"mapped\",[120,105,105]],[[8556,8556],\"mapped\",[108]],[[8557,8557],\"mapped\",[99]],[[8558,8558],\"mapped\",[100]],[[8559,8559],\"mapped\",[109]],[[8560,8560],\"mapped\",[105]],[[8561,8561],\"mapped\",[105,105]],[[8562,8562],\"mapped\",[105,105,105]],[[8563,8563],\"mapped\",[105,118]],[[8564,8564],\"mapped\",[118]],[[8565,8565],\"mapped\",[118,105]],[[8566,8566],\"mapped\",[118,105,105]],[[8567,8567],\"mapped\",[118,105,105,105]],[[8568,8568],\"mapped\",[105,120]],[[8569,8569],\"mapped\",[120]],[[8570,8570],\"mapped\",[120,105]],[[8571,8571],\"mapped\",[120,105,105]],[[8572,8572],\"mapped\",[108]],[[8573,8573],\"mapped\",[99]],[[8574,8574],\"mapped\",[100]],[[8575,8575],\"mapped\",[109]],[[8576,8578],\"valid\",[],\"NV8\"],[[8579,8579],\"disallowed\"],[[8580,8580],\"valid\"],[[8581,8584],\"valid\",[],\"NV8\"],[[8585,8585],\"mapped\",[48,8260,51]],[[8586,8587],\"valid\",[],\"NV8\"],[[8588,8591],\"disallowed\"],[[8592,8682],\"valid\",[],\"NV8\"],[[8683,8691],\"valid\",[],\"NV8\"],[[8692,8703],\"valid\",[],\"NV8\"],[[8704,8747],\"valid\",[],\"NV8\"],[[8748,8748],\"mapped\",[8747,8747]],[[8749,8749],\"mapped\",[8747,8747,8747]],[[8750,8750],\"valid\",[],\"NV8\"],[[8751,8751],\"mapped\",[8750,8750]],[[8752,8752],\"mapped\",[8750,8750,8750]],[[8753,8799],\"valid\",[],\"NV8\"],[[8800,8800],\"disallowed_STD3_valid\"],[[8801,8813],\"valid\",[],\"NV8\"],[[8814,8815],\"disallowed_STD3_valid\"],[[8816,8945],\"valid\",[],\"NV8\"],[[8946,8959],\"valid\",[],\"NV8\"],[[8960,8960],\"valid\",[],\"NV8\"],[[8961,8961],\"valid\",[],\"NV8\"],[[8962,9000],\"valid\",[],\"NV8\"],[[9001,9001],\"mapped\",[12296]],[[9002,9002],\"mapped\",[12297]],[[9003,9082],\"valid\",[],\"NV8\"],[[9083,9083],\"valid\",[],\"NV8\"],[[9084,9084],\"valid\",[],\"NV8\"],[[9085,9114],\"valid\",[],\"NV8\"],[[9115,9166],\"valid\",[],\"NV8\"],[[9167,9168],\"valid\",[],\"NV8\"],[[9169,9179],\"valid\",[],\"NV8\"],[[9180,9191],\"valid\",[],\"NV8\"],[[9192,9192],\"valid\",[],\"NV8\"],[[9193,9203],\"valid\",[],\"NV8\"],[[9204,9210],\"valid\",[],\"NV8\"],[[9211,9215],\"disallowed\"],[[9216,9252],\"valid\",[],\"NV8\"],[[9253,9254],\"valid\",[],\"NV8\"],[[9255,9279],\"disallowed\"],[[9280,9290],\"valid\",[],\"NV8\"],[[9291,9311],\"disallowed\"],[[9312,9312],\"mapped\",[49]],[[9313,9313],\"mapped\",[50]],[[9314,9314],\"mapped\",[51]],[[9315,9315],\"mapped\",[52]],[[9316,9316],\"mapped\",[53]],[[9317,9317],\"mapped\",[54]],[[9318,9318],\"mapped\",[55]],[[9319,9319],\"mapped\",[56]],[[9320,9320],\"mapped\",[57]],[[9321,9321],\"mapped\",[49,48]],[[9322,9322],\"mapped\",[49,49]],[[9323,9323],\"mapped\",[49,50]],[[9324,9324],\"mapped\",[49,51]],[[9325,9325],\"mapped\",[49,52]],[[9326,9326],\"mapped\",[49,53]],[[9327,9327],\"mapped\",[49,54]],[[9328,9328],\"mapped\",[49,55]],[[9329,9329],\"mapped\",[49,56]],[[9330,9330],\"mapped\",[49,57]],[[9331,9331],\"mapped\",[50,48]],[[9332,9332],\"disallowed_STD3_mapped\",[40,49,41]],[[9333,9333],\"disallowed_STD3_mapped\",[40,50,41]],[[9334,9334],\"disallowed_STD3_mapped\",[40,51,41]],[[9335,9335],\"disallowed_STD3_mapped\",[40,52,41]],[[9336,9336],\"disallowed_STD3_mapped\",[40,53,41]],[[9337,9337],\"disallowed_STD3_mapped\",[40,54,41]],[[9338,9338],\"disallowed_STD3_mapped\",[40,55,41]],[[9339,9339],\"disallowed_STD3_mapped\",[40,56,41]],[[9340,9340],\"disallowed_STD3_mapped\",[40,57,41]],[[9341,9341],\"disallowed_STD3_mapped\",[40,49,48,41]],[[9342,9342],\"disallowed_STD3_mapped\",[40,49,49,41]],[[9343,9343],\"disallowed_STD3_mapped\",[40,49,50,41]],[[9344,9344],\"disallowed_STD3_mapped\",[40,49,51,41]],[[9345,9345],\"disallowed_STD3_mapped\",[40,49,52,41]],[[9346,9346],\"disallowed_STD3_mapped\",[40,49,53,41]],[[9347,9347],\"disallowed_STD3_mapped\",[40,49,54,41]],[[9348,9348],\"disallowed_STD3_mapped\",[40,49,55,41]],[[9349,9349],\"disallowed_STD3_mapped\",[40,49,56,41]],[[9350,9350],\"disallowed_STD3_mapped\",[40,49,57,41]],[[9351,9351],\"disallowed_STD3_mapped\",[40,50,48,41]],[[9352,9371],\"disallowed\"],[[9372,9372],\"disallowed_STD3_mapped\",[40,97,41]],[[9373,9373],\"disallowed_STD3_mapped\",[40,98,41]],[[9374,9374],\"disallowed_STD3_mapped\",[40,99,41]],[[9375,9375],\"disallowed_STD3_mapped\",[40,100,41]],[[9376,9376],\"disallowed_STD3_mapped\",[40,101,41]],[[9377,9377],\"disallowed_STD3_mapped\",[40,102,41]],[[9378,9378],\"disallowed_STD3_mapped\",[40,103,41]],[[9379,9379],\"disallowed_STD3_mapped\",[40,104,41]],[[9380,9380],\"disallowed_STD3_mapped\",[40,105,41]],[[9381,9381],\"disallowed_STD3_mapped\",[40,106,41]],[[9382,9382],\"disallowed_STD3_mapped\",[40,107,41]],[[9383,9383],\"disallowed_STD3_mapped\",[40,108,41]],[[9384,9384],\"disallowed_STD3_mapped\",[40,109,41]],[[9385,9385],\"disallowed_STD3_mapped\",[40,110,41]],[[9386,9386],\"disallowed_STD3_mapped\",[40,111,41]],[[9387,9387],\"disallowed_STD3_mapped\",[40,112,41]],[[9388,9388],\"disallowed_STD3_mapped\",[40,113,41]],[[9389,9389],\"disallowed_STD3_mapped\",[40,114,41]],[[9390,9390],\"disallowed_STD3_mapped\",[40,115,41]],[[9391,9391],\"disallowed_STD3_mapped\",[40,116,41]],[[9392,9392],\"disallowed_STD3_mapped\",[40,117,41]],[[9393,9393],\"disallowed_STD3_mapped\",[40,118,41]],[[9394,9394],\"disallowed_STD3_mapped\",[40,119,41]],[[9395,9395],\"disallowed_STD3_mapped\",[40,120,41]],[[9396,9396],\"disallowed_STD3_mapped\",[40,121,41]],[[9397,9397],\"disallowed_STD3_mapped\",[40,122,41]],[[9398,9398],\"mapped\",[97]],[[9399,9399],\"mapped\",[98]],[[9400,9400],\"mapped\",[99]],[[9401,9401],\"mapped\",[100]],[[9402,9402],\"mapped\",[101]],[[9403,9403],\"mapped\",[102]],[[9404,9404],\"mapped\",[103]],[[9405,9405],\"mapped\",[104]],[[9406,9406],\"mapped\",[105]],[[9407,9407],\"mapped\",[106]],[[9408,9408],\"mapped\",[107]],[[9409,9409],\"mapped\",[108]],[[9410,9410],\"mapped\",[109]],[[9411,9411],\"mapped\",[110]],[[9412,9412],\"mapped\",[111]],[[9413,9413],\"mapped\",[112]],[[9414,9414],\"mapped\",[113]],[[9415,9415],\"mapped\",[114]],[[9416,9416],\"mapped\",[115]],[[9417,9417],\"mapped\",[116]],[[9418,9418],\"mapped\",[117]],[[9419,9419],\"mapped\",[118]],[[9420,9420],\"mapped\",[119]],[[9421,9421],\"mapped\",[120]],[[9422,9422],\"mapped\",[121]],[[9423,9423],\"mapped\",[122]],[[9424,9424],\"mapped\",[97]],[[9425,9425],\"mapped\",[98]],[[9426,9426],\"mapped\",[99]],[[9427,9427],\"mapped\",[100]],[[9428,9428],\"mapped\",[101]],[[9429,9429],\"mapped\",[102]],[[9430,9430],\"mapped\",[103]],[[9431,9431],\"mapped\",[104]],[[9432,9432],\"mapped\",[105]],[[9433,9433],\"mapped\",[106]],[[9434,9434],\"mapped\",[107]],[[9435,9435],\"mapped\",[108]],[[9436,9436],\"mapped\",[109]],[[9437,9437],\"mapped\",[110]],[[9438,9438],\"mapped\",[111]],[[9439,9439],\"mapped\",[112]],[[9440,9440],\"mapped\",[113]],[[9441,9441],\"mapped\",[114]],[[9442,9442],\"mapped\",[115]],[[9443,9443],\"mapped\",[116]],[[9444,9444],\"mapped\",[117]],[[9445,9445],\"mapped\",[118]],[[9446,9446],\"mapped\",[119]],[[9447,9447],\"mapped\",[120]],[[9448,9448],\"mapped\",[121]],[[9449,9449],\"mapped\",[122]],[[9450,9450],\"mapped\",[48]],[[9451,9470],\"valid\",[],\"NV8\"],[[9471,9471],\"valid\",[],\"NV8\"],[[9472,9621],\"valid\",[],\"NV8\"],[[9622,9631],\"valid\",[],\"NV8\"],[[9632,9711],\"valid\",[],\"NV8\"],[[9712,9719],\"valid\",[],\"NV8\"],[[9720,9727],\"valid\",[],\"NV8\"],[[9728,9747],\"valid\",[],\"NV8\"],[[9748,9749],\"valid\",[],\"NV8\"],[[9750,9751],\"valid\",[],\"NV8\"],[[9752,9752],\"valid\",[],\"NV8\"],[[9753,9753],\"valid\",[],\"NV8\"],[[9754,9839],\"valid\",[],\"NV8\"],[[9840,9841],\"valid\",[],\"NV8\"],[[9842,9853],\"valid\",[],\"NV8\"],[[9854,9855],\"valid\",[],\"NV8\"],[[9856,9865],\"valid\",[],\"NV8\"],[[9866,9873],\"valid\",[],\"NV8\"],[[9874,9884],\"valid\",[],\"NV8\"],[[9885,9885],\"valid\",[],\"NV8\"],[[9886,9887],\"valid\",[],\"NV8\"],[[9888,9889],\"valid\",[],\"NV8\"],[[9890,9905],\"valid\",[],\"NV8\"],[[9906,9906],\"valid\",[],\"NV8\"],[[9907,9916],\"valid\",[],\"NV8\"],[[9917,9919],\"valid\",[],\"NV8\"],[[9920,9923],\"valid\",[],\"NV8\"],[[9924,9933],\"valid\",[],\"NV8\"],[[9934,9934],\"valid\",[],\"NV8\"],[[9935,9953],\"valid\",[],\"NV8\"],[[9954,9954],\"valid\",[],\"NV8\"],[[9955,9955],\"valid\",[],\"NV8\"],[[9956,9959],\"valid\",[],\"NV8\"],[[9960,9983],\"valid\",[],\"NV8\"],[[9984,9984],\"valid\",[],\"NV8\"],[[9985,9988],\"valid\",[],\"NV8\"],[[9989,9989],\"valid\",[],\"NV8\"],[[9990,9993],\"valid\",[],\"NV8\"],[[9994,9995],\"valid\",[],\"NV8\"],[[9996,10023],\"valid\",[],\"NV8\"],[[10024,10024],\"valid\",[],\"NV8\"],[[10025,10059],\"valid\",[],\"NV8\"],[[10060,10060],\"valid\",[],\"NV8\"],[[10061,10061],\"valid\",[],\"NV8\"],[[10062,10062],\"valid\",[],\"NV8\"],[[10063,10066],\"valid\",[],\"NV8\"],[[10067,10069],\"valid\",[],\"NV8\"],[[10070,10070],\"valid\",[],\"NV8\"],[[10071,10071],\"valid\",[],\"NV8\"],[[10072,10078],\"valid\",[],\"NV8\"],[[10079,10080],\"valid\",[],\"NV8\"],[[10081,10087],\"valid\",[],\"NV8\"],[[10088,10101],\"valid\",[],\"NV8\"],[[10102,10132],\"valid\",[],\"NV8\"],[[10133,10135],\"valid\",[],\"NV8\"],[[10136,10159],\"valid\",[],\"NV8\"],[[10160,10160],\"valid\",[],\"NV8\"],[[10161,10174],\"valid\",[],\"NV8\"],[[10175,10175],\"valid\",[],\"NV8\"],[[10176,10182],\"valid\",[],\"NV8\"],[[10183,10186],\"valid\",[],\"NV8\"],[[10187,10187],\"valid\",[],\"NV8\"],[[10188,10188],\"valid\",[],\"NV8\"],[[10189,10189],\"valid\",[],\"NV8\"],[[10190,10191],\"valid\",[],\"NV8\"],[[10192,10219],\"valid\",[],\"NV8\"],[[10220,10223],\"valid\",[],\"NV8\"],[[10224,10239],\"valid\",[],\"NV8\"],[[10240,10495],\"valid\",[],\"NV8\"],[[10496,10763],\"valid\",[],\"NV8\"],[[10764,10764],\"mapped\",[8747,8747,8747,8747]],[[10765,10867],\"valid\",[],\"NV8\"],[[10868,10868],\"disallowed_STD3_mapped\",[58,58,61]],[[10869,10869],\"disallowed_STD3_mapped\",[61,61]],[[10870,10870],\"disallowed_STD3_mapped\",[61,61,61]],[[10871,10971],\"valid\",[],\"NV8\"],[[10972,10972],\"mapped\",[10973,824]],[[10973,11007],\"valid\",[],\"NV8\"],[[11008,11021],\"valid\",[],\"NV8\"],[[11022,11027],\"valid\",[],\"NV8\"],[[11028,11034],\"valid\",[],\"NV8\"],[[11035,11039],\"valid\",[],\"NV8\"],[[11040,11043],\"valid\",[],\"NV8\"],[[11044,11084],\"valid\",[],\"NV8\"],[[11085,11087],\"valid\",[],\"NV8\"],[[11088,11092],\"valid\",[],\"NV8\"],[[11093,11097],\"valid\",[],\"NV8\"],[[11098,11123],\"valid\",[],\"NV8\"],[[11124,11125],\"disallowed\"],[[11126,11157],\"valid\",[],\"NV8\"],[[11158,11159],\"disallowed\"],[[11160,11193],\"valid\",[],\"NV8\"],[[11194,11196],\"disallowed\"],[[11197,11208],\"valid\",[],\"NV8\"],[[11209,11209],\"disallowed\"],[[11210,11217],\"valid\",[],\"NV8\"],[[11218,11243],\"disallowed\"],[[11244,11247],\"valid\",[],\"NV8\"],[[11248,11263],\"disallowed\"],[[11264,11264],\"mapped\",[11312]],[[11265,11265],\"mapped\",[11313]],[[11266,11266],\"mapped\",[11314]],[[11267,11267],\"mapped\",[11315]],[[11268,11268],\"mapped\",[11316]],[[11269,11269],\"mapped\",[11317]],[[11270,11270],\"mapped\",[11318]],[[11271,11271],\"mapped\",[11319]],[[11272,11272],\"mapped\",[11320]],[[11273,11273],\"mapped\",[11321]],[[11274,11274],\"mapped\",[11322]],[[11275,11275],\"mapped\",[11323]],[[11276,11276],\"mapped\",[11324]],[[11277,11277],\"mapped\",[11325]],[[11278,11278],\"mapped\",[11326]],[[11279,11279],\"mapped\",[11327]],[[11280,11280],\"mapped\",[11328]],[[11281,11281],\"mapped\",[11329]],[[11282,11282],\"mapped\",[11330]],[[11283,11283],\"mapped\",[11331]],[[11284,11284],\"mapped\",[11332]],[[11285,11285],\"mapped\",[11333]],[[11286,11286],\"mapped\",[11334]],[[11287,11287],\"mapped\",[11335]],[[11288,11288],\"mapped\",[11336]],[[11289,11289],\"mapped\",[11337]],[[11290,11290],\"mapped\",[11338]],[[11291,11291],\"mapped\",[11339]],[[11292,11292],\"mapped\",[11340]],[[11293,11293],\"mapped\",[11341]],[[11294,11294],\"mapped\",[11342]],[[11295,11295],\"mapped\",[11343]],[[11296,11296],\"mapped\",[11344]],[[11297,11297],\"mapped\",[11345]],[[11298,11298],\"mapped\",[11346]],[[11299,11299],\"mapped\",[11347]],[[11300,11300],\"mapped\",[11348]],[[11301,11301],\"mapped\",[11349]],[[11302,11302],\"mapped\",[11350]],[[11303,11303],\"mapped\",[11351]],[[11304,11304],\"mapped\",[11352]],[[11305,11305],\"mapped\",[11353]],[[11306,11306],\"mapped\",[11354]],[[11307,11307],\"mapped\",[11355]],[[11308,11308],\"mapped\",[11356]],[[11309,11309],\"mapped\",[11357]],[[11310,11310],\"mapped\",[11358]],[[11311,11311],\"disallowed\"],[[11312,11358],\"valid\"],[[11359,11359],\"disallowed\"],[[11360,11360],\"mapped\",[11361]],[[11361,11361],\"valid\"],[[11362,11362],\"mapped\",[619]],[[11363,11363],\"mapped\",[7549]],[[11364,11364],\"mapped\",[637]],[[11365,11366],\"valid\"],[[11367,11367],\"mapped\",[11368]],[[11368,11368],\"valid\"],[[11369,11369],\"mapped\",[11370]],[[11370,11370],\"valid\"],[[11371,11371],\"mapped\",[11372]],[[11372,11372],\"valid\"],[[11373,11373],\"mapped\",[593]],[[11374,11374],\"mapped\",[625]],[[11375,11375],\"mapped\",[592]],[[11376,11376],\"mapped\",[594]],[[11377,11377],\"valid\"],[[11378,11378],\"mapped\",[11379]],[[11379,11379],\"valid\"],[[11380,11380],\"valid\"],[[11381,11381],\"mapped\",[11382]],[[11382,11383],\"valid\"],[[11384,11387],\"valid\"],[[11388,11388],\"mapped\",[106]],[[11389,11389],\"mapped\",[118]],[[11390,11390],\"mapped\",[575]],[[11391,11391],\"mapped\",[576]],[[11392,11392],\"mapped\",[11393]],[[11393,11393],\"valid\"],[[11394,11394],\"mapped\",[11395]],[[11395,11395],\"valid\"],[[11396,11396],\"mapped\",[11397]],[[11397,11397],\"valid\"],[[11398,11398],\"mapped\",[11399]],[[11399,11399],\"valid\"],[[11400,11400],\"mapped\",[11401]],[[11401,11401],\"valid\"],[[11402,11402],\"mapped\",[11403]],[[11403,11403],\"valid\"],[[11404,11404],\"mapped\",[11405]],[[11405,11405],\"valid\"],[[11406,11406],\"mapped\",[11407]],[[11407,11407],\"valid\"],[[11408,11408],\"mapped\",[11409]],[[11409,11409],\"valid\"],[[11410,11410],\"mapped\",[11411]],[[11411,11411],\"valid\"],[[11412,11412],\"mapped\",[11413]],[[11413,11413],\"valid\"],[[11414,11414],\"mapped\",[11415]],[[11415,11415],\"valid\"],[[11416,11416],\"mapped\",[11417]],[[11417,11417],\"valid\"],[[11418,11418],\"mapped\",[11419]],[[11419,11419],\"valid\"],[[11420,11420],\"mapped\",[11421]],[[11421,11421],\"valid\"],[[11422,11422],\"mapped\",[11423]],[[11423,11423],\"valid\"],[[11424,11424],\"mapped\",[11425]],[[11425,11425],\"valid\"],[[11426,11426],\"mapped\",[11427]],[[11427,11427],\"valid\"],[[11428,11428],\"mapped\",[11429]],[[11429,11429],\"valid\"],[[11430,11430],\"mapped\",[11431]],[[11431,11431],\"valid\"],[[11432,11432],\"mapped\",[11433]],[[11433,11433],\"valid\"],[[11434,11434],\"mapped\",[11435]],[[11435,11435],\"valid\"],[[11436,11436],\"mapped\",[11437]],[[11437,11437],\"valid\"],[[11438,11438],\"mapped\",[11439]],[[11439,11439],\"valid\"],[[11440,11440],\"mapped\",[11441]],[[11441,11441],\"valid\"],[[11442,11442],\"mapped\",[11443]],[[11443,11443],\"valid\"],[[11444,11444],\"mapped\",[11445]],[[11445,11445],\"valid\"],[[11446,11446],\"mapped\",[11447]],[[11447,11447],\"valid\"],[[11448,11448],\"mapped\",[11449]],[[11449,11449],\"valid\"],[[11450,11450],\"mapped\",[11451]],[[11451,11451],\"valid\"],[[11452,11452],\"mapped\",[11453]],[[11453,11453],\"valid\"],[[11454,11454],\"mapped\",[11455]],[[11455,11455],\"valid\"],[[11456,11456],\"mapped\",[11457]],[[11457,11457],\"valid\"],[[11458,11458],\"mapped\",[11459]],[[11459,11459],\"valid\"],[[11460,11460],\"mapped\",[11461]],[[11461,11461],\"valid\"],[[11462,11462],\"mapped\",[11463]],[[11463,11463],\"valid\"],[[11464,11464],\"mapped\",[11465]],[[11465,11465],\"valid\"],[[11466,11466],\"mapped\",[11467]],[[11467,11467],\"valid\"],[[11468,11468],\"mapped\",[11469]],[[11469,11469],\"valid\"],[[11470,11470],\"mapped\",[11471]],[[11471,11471],\"valid\"],[[11472,11472],\"mapped\",[11473]],[[11473,11473],\"valid\"],[[11474,11474],\"mapped\",[11475]],[[11475,11475],\"valid\"],[[11476,11476],\"mapped\",[11477]],[[11477,11477],\"valid\"],[[11478,11478],\"mapped\",[11479]],[[11479,11479],\"valid\"],[[11480,11480],\"mapped\",[11481]],[[11481,11481],\"valid\"],[[11482,11482],\"mapped\",[11483]],[[11483,11483],\"valid\"],[[11484,11484],\"mapped\",[11485]],[[11485,11485],\"valid\"],[[11486,11486],\"mapped\",[11487]],[[11487,11487],\"valid\"],[[11488,11488],\"mapped\",[11489]],[[11489,11489],\"valid\"],[[11490,11490],\"mapped\",[11491]],[[11491,11492],\"valid\"],[[11493,11498],\"valid\",[],\"NV8\"],[[11499,11499],\"mapped\",[11500]],[[11500,11500],\"valid\"],[[11501,11501],\"mapped\",[11502]],[[11502,11505],\"valid\"],[[11506,11506],\"mapped\",[11507]],[[11507,11507],\"valid\"],[[11508,11512],\"disallowed\"],[[11513,11519],\"valid\",[],\"NV8\"],[[11520,11557],\"valid\"],[[11558,11558],\"disallowed\"],[[11559,11559],\"valid\"],[[11560,11564],\"disallowed\"],[[11565,11565],\"valid\"],[[11566,11567],\"disallowed\"],[[11568,11621],\"valid\"],[[11622,11623],\"valid\"],[[11624,11630],\"disallowed\"],[[11631,11631],\"mapped\",[11617]],[[11632,11632],\"valid\",[],\"NV8\"],[[11633,11646],\"disallowed\"],[[11647,11647],\"valid\"],[[11648,11670],\"valid\"],[[11671,11679],\"disallowed\"],[[11680,11686],\"valid\"],[[11687,11687],\"disallowed\"],[[11688,11694],\"valid\"],[[11695,11695],\"disallowed\"],[[11696,11702],\"valid\"],[[11703,11703],\"disallowed\"],[[11704,11710],\"valid\"],[[11711,11711],\"disallowed\"],[[11712,11718],\"valid\"],[[11719,11719],\"disallowed\"],[[11720,11726],\"valid\"],[[11727,11727],\"disallowed\"],[[11728,11734],\"valid\"],[[11735,11735],\"disallowed\"],[[11736,11742],\"valid\"],[[11743,11743],\"disallowed\"],[[11744,11775],\"valid\"],[[11776,11799],\"valid\",[],\"NV8\"],[[11800,11803],\"valid\",[],\"NV8\"],[[11804,11805],\"valid\",[],\"NV8\"],[[11806,11822],\"valid\",[],\"NV8\"],[[11823,11823],\"valid\"],[[11824,11824],\"valid\",[],\"NV8\"],[[11825,11825],\"valid\",[],\"NV8\"],[[11826,11835],\"valid\",[],\"NV8\"],[[11836,11842],\"valid\",[],\"NV8\"],[[11843,11903],\"disallowed\"],[[11904,11929],\"valid\",[],\"NV8\"],[[11930,11930],\"disallowed\"],[[11931,11934],\"valid\",[],\"NV8\"],[[11935,11935],\"mapped\",[27597]],[[11936,12018],\"valid\",[],\"NV8\"],[[12019,12019],\"mapped\",[40863]],[[12020,12031],\"disallowed\"],[[12032,12032],\"mapped\",[19968]],[[12033,12033],\"mapped\",[20008]],[[12034,12034],\"mapped\",[20022]],[[12035,12035],\"mapped\",[20031]],[[12036,12036],\"mapped\",[20057]],[[12037,12037],\"mapped\",[20101]],[[12038,12038],\"mapped\",[20108]],[[12039,12039],\"mapped\",[20128]],[[12040,12040],\"mapped\",[20154]],[[12041,12041],\"mapped\",[20799]],[[12042,12042],\"mapped\",[20837]],[[12043,12043],\"mapped\",[20843]],[[12044,12044],\"mapped\",[20866]],[[12045,12045],\"mapped\",[20886]],[[12046,12046],\"mapped\",[20907]],[[12047,12047],\"mapped\",[20960]],[[12048,12048],\"mapped\",[20981]],[[12049,12049],\"mapped\",[20992]],[[12050,12050],\"mapped\",[21147]],[[12051,12051],\"mapped\",[21241]],[[12052,12052],\"mapped\",[21269]],[[12053,12053],\"mapped\",[21274]],[[12054,12054],\"mapped\",[21304]],[[12055,12055],\"mapped\",[21313]],[[12056,12056],\"mapped\",[21340]],[[12057,12057],\"mapped\",[21353]],[[12058,12058],\"mapped\",[21378]],[[12059,12059],\"mapped\",[21430]],[[12060,12060],\"mapped\",[21448]],[[12061,12061],\"mapped\",[21475]],[[12062,12062],\"mapped\",[22231]],[[12063,12063],\"mapped\",[22303]],[[12064,12064],\"mapped\",[22763]],[[12065,12065],\"mapped\",[22786]],[[12066,12066],\"mapped\",[22794]],[[12067,12067],\"mapped\",[22805]],[[12068,12068],\"mapped\",[22823]],[[12069,12069],\"mapped\",[22899]],[[12070,12070],\"mapped\",[23376]],[[12071,12071],\"mapped\",[23424]],[[12072,12072],\"mapped\",[23544]],[[12073,12073],\"mapped\",[23567]],[[12074,12074],\"mapped\",[23586]],[[12075,12075],\"mapped\",[23608]],[[12076,12076],\"mapped\",[23662]],[[12077,12077],\"mapped\",[23665]],[[12078,12078],\"mapped\",[24027]],[[12079,12079],\"mapped\",[24037]],[[12080,12080],\"mapped\",[24049]],[[12081,12081],\"mapped\",[24062]],[[12082,12082],\"mapped\",[24178]],[[12083,12083],\"mapped\",[24186]],[[12084,12084],\"mapped\",[24191]],[[12085,12085],\"mapped\",[24308]],[[12086,12086],\"mapped\",[24318]],[[12087,12087],\"mapped\",[24331]],[[12088,12088],\"mapped\",[24339]],[[12089,12089],\"mapped\",[24400]],[[12090,12090],\"mapped\",[24417]],[[12091,12091],\"mapped\",[24435]],[[12092,12092],\"mapped\",[24515]],[[12093,12093],\"mapped\",[25096]],[[12094,12094],\"mapped\",[25142]],[[12095,12095],\"mapped\",[25163]],[[12096,12096],\"mapped\",[25903]],[[12097,12097],\"mapped\",[25908]],[[12098,12098],\"mapped\",[25991]],[[12099,12099],\"mapped\",[26007]],[[12100,12100],\"mapped\",[26020]],[[12101,12101],\"mapped\",[26041]],[[12102,12102],\"mapped\",[26080]],[[12103,12103],\"mapped\",[26085]],[[12104,12104],\"mapped\",[26352]],[[12105,12105],\"mapped\",[26376]],[[12106,12106],\"mapped\",[26408]],[[12107,12107],\"mapped\",[27424]],[[12108,12108],\"mapped\",[27490]],[[12109,12109],\"mapped\",[27513]],[[12110,12110],\"mapped\",[27571]],[[12111,12111],\"mapped\",[27595]],[[12112,12112],\"mapped\",[27604]],[[12113,12113],\"mapped\",[27611]],[[12114,12114],\"mapped\",[27663]],[[12115,12115],\"mapped\",[27668]],[[12116,12116],\"mapped\",[27700]],[[12117,12117],\"mapped\",[28779]],[[12118,12118],\"mapped\",[29226]],[[12119,12119],\"mapped\",[29238]],[[12120,12120],\"mapped\",[29243]],[[12121,12121],\"mapped\",[29247]],[[12122,12122],\"mapped\",[29255]],[[12123,12123],\"mapped\",[29273]],[[12124,12124],\"mapped\",[29275]],[[12125,12125],\"mapped\",[29356]],[[12126,12126],\"mapped\",[29572]],[[12127,12127],\"mapped\",[29577]],[[12128,12128],\"mapped\",[29916]],[[12129,12129],\"mapped\",[29926]],[[12130,12130],\"mapped\",[29976]],[[12131,12131],\"mapped\",[29983]],[[12132,12132],\"mapped\",[29992]],[[12133,12133],\"mapped\",[30000]],[[12134,12134],\"mapped\",[30091]],[[12135,12135],\"mapped\",[30098]],[[12136,12136],\"mapped\",[30326]],[[12137,12137],\"mapped\",[30333]],[[12138,12138],\"mapped\",[30382]],[[12139,12139],\"mapped\",[30399]],[[12140,12140],\"mapped\",[30446]],[[12141,12141],\"mapped\",[30683]],[[12142,12142],\"mapped\",[30690]],[[12143,12143],\"mapped\",[30707]],[[12144,12144],\"mapped\",[31034]],[[12145,12145],\"mapped\",[31160]],[[12146,12146],\"mapped\",[31166]],[[12147,12147],\"mapped\",[31348]],[[12148,12148],\"mapped\",[31435]],[[12149,12149],\"mapped\",[31481]],[[12150,12150],\"mapped\",[31859]],[[12151,12151],\"mapped\",[31992]],[[12152,12152],\"mapped\",[32566]],[[12153,12153],\"mapped\",[32593]],[[12154,12154],\"mapped\",[32650]],[[12155,12155],\"mapped\",[32701]],[[12156,12156],\"mapped\",[32769]],[[12157,12157],\"mapped\",[32780]],[[12158,12158],\"mapped\",[32786]],[[12159,12159],\"mapped\",[32819]],[[12160,12160],\"mapped\",[32895]],[[12161,12161],\"mapped\",[32905]],[[12162,12162],\"mapped\",[33251]],[[12163,12163],\"mapped\",[33258]],[[12164,12164],\"mapped\",[33267]],[[12165,12165],\"mapped\",[33276]],[[12166,12166],\"mapped\",[33292]],[[12167,12167],\"mapped\",[33307]],[[12168,12168],\"mapped\",[33311]],[[12169,12169],\"mapped\",[33390]],[[12170,12170],\"mapped\",[33394]],[[12171,12171],\"mapped\",[33400]],[[12172,12172],\"mapped\",[34381]],[[12173,12173],\"mapped\",[34411]],[[12174,12174],\"mapped\",[34880]],[[12175,12175],\"mapped\",[34892]],[[12176,12176],\"mapped\",[34915]],[[12177,12177],\"mapped\",[35198]],[[12178,12178],\"mapped\",[35211]],[[12179,12179],\"mapped\",[35282]],[[12180,12180],\"mapped\",[35328]],[[12181,12181],\"mapped\",[35895]],[[12182,12182],\"mapped\",[35910]],[[12183,12183],\"mapped\",[35925]],[[12184,12184],\"mapped\",[35960]],[[12185,12185],\"mapped\",[35997]],[[12186,12186],\"mapped\",[36196]],[[12187,12187],\"mapped\",[36208]],[[12188,12188],\"mapped\",[36275]],[[12189,12189],\"mapped\",[36523]],[[12190,12190],\"mapped\",[36554]],[[12191,12191],\"mapped\",[36763]],[[12192,12192],\"mapped\",[36784]],[[12193,12193],\"mapped\",[36789]],[[12194,12194],\"mapped\",[37009]],[[12195,12195],\"mapped\",[37193]],[[12196,12196],\"mapped\",[37318]],[[12197,12197],\"mapped\",[37324]],[[12198,12198],\"mapped\",[37329]],[[12199,12199],\"mapped\",[38263]],[[12200,12200],\"mapped\",[38272]],[[12201,12201],\"mapped\",[38428]],[[12202,12202],\"mapped\",[38582]],[[12203,12203],\"mapped\",[38585]],[[12204,12204],\"mapped\",[38632]],[[12205,12205],\"mapped\",[38737]],[[12206,12206],\"mapped\",[38750]],[[12207,12207],\"mapped\",[38754]],[[12208,12208],\"mapped\",[38761]],[[12209,12209],\"mapped\",[38859]],[[12210,12210],\"mapped\",[38893]],[[12211,12211],\"mapped\",[38899]],[[12212,12212],\"mapped\",[38913]],[[12213,12213],\"mapped\",[39080]],[[12214,12214],\"mapped\",[39131]],[[12215,12215],\"mapped\",[39135]],[[12216,12216],\"mapped\",[39318]],[[12217,12217],\"mapped\",[39321]],[[12218,12218],\"mapped\",[39340]],[[12219,12219],\"mapped\",[39592]],[[12220,12220],\"mapped\",[39640]],[[12221,12221],\"mapped\",[39647]],[[12222,12222],\"mapped\",[39717]],[[12223,12223],\"mapped\",[39727]],[[12224,12224],\"mapped\",[39730]],[[12225,12225],\"mapped\",[39740]],[[12226,12226],\"mapped\",[39770]],[[12227,12227],\"mapped\",[40165]],[[12228,12228],\"mapped\",[40565]],[[12229,12229],\"mapped\",[40575]],[[12230,12230],\"mapped\",[40613]],[[12231,12231],\"mapped\",[40635]],[[12232,12232],\"mapped\",[40643]],[[12233,12233],\"mapped\",[40653]],[[12234,12234],\"mapped\",[40657]],[[12235,12235],\"mapped\",[40697]],[[12236,12236],\"mapped\",[40701]],[[12237,12237],\"mapped\",[40718]],[[12238,12238],\"mapped\",[40723]],[[12239,12239],\"mapped\",[40736]],[[12240,12240],\"mapped\",[40763]],[[12241,12241],\"mapped\",[40778]],[[12242,12242],\"mapped\",[40786]],[[12243,12243],\"mapped\",[40845]],[[12244,12244],\"mapped\",[40860]],[[12245,12245],\"mapped\",[40864]],[[12246,12271],\"disallowed\"],[[12272,12283],\"disallowed\"],[[12284,12287],\"disallowed\"],[[12288,12288],\"disallowed_STD3_mapped\",[32]],[[12289,12289],\"valid\",[],\"NV8\"],[[12290,12290],\"mapped\",[46]],[[12291,12292],\"valid\",[],\"NV8\"],[[12293,12295],\"valid\"],[[12296,12329],\"valid\",[],\"NV8\"],[[12330,12333],\"valid\"],[[12334,12341],\"valid\",[],\"NV8\"],[[12342,12342],\"mapped\",[12306]],[[12343,12343],\"valid\",[],\"NV8\"],[[12344,12344],\"mapped\",[21313]],[[12345,12345],\"mapped\",[21316]],[[12346,12346],\"mapped\",[21317]],[[12347,12347],\"valid\",[],\"NV8\"],[[12348,12348],\"valid\"],[[12349,12349],\"valid\",[],\"NV8\"],[[12350,12350],\"valid\",[],\"NV8\"],[[12351,12351],\"valid\",[],\"NV8\"],[[12352,12352],\"disallowed\"],[[12353,12436],\"valid\"],[[12437,12438],\"valid\"],[[12439,12440],\"disallowed\"],[[12441,12442],\"valid\"],[[12443,12443],\"disallowed_STD3_mapped\",[32,12441]],[[12444,12444],\"disallowed_STD3_mapped\",[32,12442]],[[12445,12446],\"valid\"],[[12447,12447],\"mapped\",[12424,12426]],[[12448,12448],\"valid\",[],\"NV8\"],[[12449,12542],\"valid\"],[[12543,12543],\"mapped\",[12467,12488]],[[12544,12548],\"disallowed\"],[[12549,12588],\"valid\"],[[12589,12589],\"valid\"],[[12590,12592],\"disallowed\"],[[12593,12593],\"mapped\",[4352]],[[12594,12594],\"mapped\",[4353]],[[12595,12595],\"mapped\",[4522]],[[12596,12596],\"mapped\",[4354]],[[12597,12597],\"mapped\",[4524]],[[12598,12598],\"mapped\",[4525]],[[12599,12599],\"mapped\",[4355]],[[12600,12600],\"mapped\",[4356]],[[12601,12601],\"mapped\",[4357]],[[12602,12602],\"mapped\",[4528]],[[12603,12603],\"mapped\",[4529]],[[12604,12604],\"mapped\",[4530]],[[12605,12605],\"mapped\",[4531]],[[12606,12606],\"mapped\",[4532]],[[12607,12607],\"mapped\",[4533]],[[12608,12608],\"mapped\",[4378]],[[12609,12609],\"mapped\",[4358]],[[12610,12610],\"mapped\",[4359]],[[12611,12611],\"mapped\",[4360]],[[12612,12612],\"mapped\",[4385]],[[12613,12613],\"mapped\",[4361]],[[12614,12614],\"mapped\",[4362]],[[12615,12615],\"mapped\",[4363]],[[12616,12616],\"mapped\",[4364]],[[12617,12617],\"mapped\",[4365]],[[12618,12618],\"mapped\",[4366]],[[12619,12619],\"mapped\",[4367]],[[12620,12620],\"mapped\",[4368]],[[12621,12621],\"mapped\",[4369]],[[12622,12622],\"mapped\",[4370]],[[12623,12623],\"mapped\",[4449]],[[12624,12624],\"mapped\",[4450]],[[12625,12625],\"mapped\",[4451]],[[12626,12626],\"mapped\",[4452]],[[12627,12627],\"mapped\",[4453]],[[12628,12628],\"mapped\",[4454]],[[12629,12629],\"mapped\",[4455]],[[12630,12630],\"mapped\",[4456]],[[12631,12631],\"mapped\",[4457]],[[12632,12632],\"mapped\",[4458]],[[12633,12633],\"mapped\",[4459]],[[12634,12634],\"mapped\",[4460]],[[12635,12635],\"mapped\",[4461]],[[12636,12636],\"mapped\",[4462]],[[12637,12637],\"mapped\",[4463]],[[12638,12638],\"mapped\",[4464]],[[12639,12639],\"mapped\",[4465]],[[12640,12640],\"mapped\",[4466]],[[12641,12641],\"mapped\",[4467]],[[12642,12642],\"mapped\",[4468]],[[12643,12643],\"mapped\",[4469]],[[12644,12644],\"disallowed\"],[[12645,12645],\"mapped\",[4372]],[[12646,12646],\"mapped\",[4373]],[[12647,12647],\"mapped\",[4551]],[[12648,12648],\"mapped\",[4552]],[[12649,12649],\"mapped\",[4556]],[[12650,12650],\"mapped\",[4558]],[[12651,12651],\"mapped\",[4563]],[[12652,12652],\"mapped\",[4567]],[[12653,12653],\"mapped\",[4569]],[[12654,12654],\"mapped\",[4380]],[[12655,12655],\"mapped\",[4573]],[[12656,12656],\"mapped\",[4575]],[[12657,12657],\"mapped\",[4381]],[[12658,12658],\"mapped\",[4382]],[[12659,12659],\"mapped\",[4384]],[[12660,12660],\"mapped\",[4386]],[[12661,12661],\"mapped\",[4387]],[[12662,12662],\"mapped\",[4391]],[[12663,12663],\"mapped\",[4393]],[[12664,12664],\"mapped\",[4395]],[[12665,12665],\"mapped\",[4396]],[[12666,12666],\"mapped\",[4397]],[[12667,12667],\"mapped\",[4398]],[[12668,12668],\"mapped\",[4399]],[[12669,12669],\"mapped\",[4402]],[[12670,12670],\"mapped\",[4406]],[[12671,12671],\"mapped\",[4416]],[[12672,12672],\"mapped\",[4423]],[[12673,12673],\"mapped\",[4428]],[[12674,12674],\"mapped\",[4593]],[[12675,12675],\"mapped\",[4594]],[[12676,12676],\"mapped\",[4439]],[[12677,12677],\"mapped\",[4440]],[[12678,12678],\"mapped\",[4441]],[[12679,12679],\"mapped\",[4484]],[[12680,12680],\"mapped\",[4485]],[[12681,12681],\"mapped\",[4488]],[[12682,12682],\"mapped\",[4497]],[[12683,12683],\"mapped\",[4498]],[[12684,12684],\"mapped\",[4500]],[[12685,12685],\"mapped\",[4510]],[[12686,12686],\"mapped\",[4513]],[[12687,12687],\"disallowed\"],[[12688,12689],\"valid\",[],\"NV8\"],[[12690,12690],\"mapped\",[19968]],[[12691,12691],\"mapped\",[20108]],[[12692,12692],\"mapped\",[19977]],[[12693,12693],\"mapped\",[22235]],[[12694,12694],\"mapped\",[19978]],[[12695,12695],\"mapped\",[20013]],[[12696,12696],\"mapped\",[19979]],[[12697,12697],\"mapped\",[30002]],[[12698,12698],\"mapped\",[20057]],[[12699,12699],\"mapped\",[19993]],[[12700,12700],\"mapped\",[19969]],[[12701,12701],\"mapped\",[22825]],[[12702,12702],\"mapped\",[22320]],[[12703,12703],\"mapped\",[20154]],[[12704,12727],\"valid\"],[[12728,12730],\"valid\"],[[12731,12735],\"disallowed\"],[[12736,12751],\"valid\",[],\"NV8\"],[[12752,12771],\"valid\",[],\"NV8\"],[[12772,12783],\"disallowed\"],[[12784,12799],\"valid\"],[[12800,12800],\"disallowed_STD3_mapped\",[40,4352,41]],[[12801,12801],\"disallowed_STD3_mapped\",[40,4354,41]],[[12802,12802],\"disallowed_STD3_mapped\",[40,4355,41]],[[12803,12803],\"disallowed_STD3_mapped\",[40,4357,41]],[[12804,12804],\"disallowed_STD3_mapped\",[40,4358,41]],[[12805,12805],\"disallowed_STD3_mapped\",[40,4359,41]],[[12806,12806],\"disallowed_STD3_mapped\",[40,4361,41]],[[12807,12807],\"disallowed_STD3_mapped\",[40,4363,41]],[[12808,12808],\"disallowed_STD3_mapped\",[40,4364,41]],[[12809,12809],\"disallowed_STD3_mapped\",[40,4366,41]],[[12810,12810],\"disallowed_STD3_mapped\",[40,4367,41]],[[12811,12811],\"disallowed_STD3_mapped\",[40,4368,41]],[[12812,12812],\"disallowed_STD3_mapped\",[40,4369,41]],[[12813,12813],\"disallowed_STD3_mapped\",[40,4370,41]],[[12814,12814],\"disallowed_STD3_mapped\",[40,44032,41]],[[12815,12815],\"disallowed_STD3_mapped\",[40,45208,41]],[[12816,12816],\"disallowed_STD3_mapped\",[40,45796,41]],[[12817,12817],\"disallowed_STD3_mapped\",[40,46972,41]],[[12818,12818],\"disallowed_STD3_mapped\",[40,47560,41]],[[12819,12819],\"disallowed_STD3_mapped\",[40,48148,41]],[[12820,12820],\"disallowed_STD3_mapped\",[40,49324,41]],[[12821,12821],\"disallowed_STD3_mapped\",[40,50500,41]],[[12822,12822],\"disallowed_STD3_mapped\",[40,51088,41]],[[12823,12823],\"disallowed_STD3_mapped\",[40,52264,41]],[[12824,12824],\"disallowed_STD3_mapped\",[40,52852,41]],[[12825,12825],\"disallowed_STD3_mapped\",[40,53440,41]],[[12826,12826],\"disallowed_STD3_mapped\",[40,54028,41]],[[12827,12827],\"disallowed_STD3_mapped\",[40,54616,41]],[[12828,12828],\"disallowed_STD3_mapped\",[40,51452,41]],[[12829,12829],\"disallowed_STD3_mapped\",[40,50724,51204,41]],[[12830,12830],\"disallowed_STD3_mapped\",[40,50724,54980,41]],[[12831,12831],\"disallowed\"],[[12832,12832],\"disallowed_STD3_mapped\",[40,19968,41]],[[12833,12833],\"disallowed_STD3_mapped\",[40,20108,41]],[[12834,12834],\"disallowed_STD3_mapped\",[40,19977,41]],[[12835,12835],\"disallowed_STD3_mapped\",[40,22235,41]],[[12836,12836],\"disallowed_STD3_mapped\",[40,20116,41]],[[12837,12837],\"disallowed_STD3_mapped\",[40,20845,41]],[[12838,12838],\"disallowed_STD3_mapped\",[40,19971,41]],[[12839,12839],\"disallowed_STD3_mapped\",[40,20843,41]],[[12840,12840],\"disallowed_STD3_mapped\",[40,20061,41]],[[12841,12841],\"disallowed_STD3_mapped\",[40,21313,41]],[[12842,12842],\"disallowed_STD3_mapped\",[40,26376,41]],[[12843,12843],\"disallowed_STD3_mapped\",[40,28779,41]],[[12844,12844],\"disallowed_STD3_mapped\",[40,27700,41]],[[12845,12845],\"disallowed_STD3_mapped\",[40,26408,41]],[[12846,12846],\"disallowed_STD3_mapped\",[40,37329,41]],[[12847,12847],\"disallowed_STD3_mapped\",[40,22303,41]],[[12848,12848],\"disallowed_STD3_mapped\",[40,26085,41]],[[12849,12849],\"disallowed_STD3_mapped\",[40,26666,41]],[[12850,12850],\"disallowed_STD3_mapped\",[40,26377,41]],[[12851,12851],\"disallowed_STD3_mapped\",[40,31038,41]],[[12852,12852],\"disallowed_STD3_mapped\",[40,21517,41]],[[12853,12853],\"disallowed_STD3_mapped\",[40,29305,41]],[[12854,12854],\"disallowed_STD3_mapped\",[40,36001,41]],[[12855,12855],\"disallowed_STD3_mapped\",[40,31069,41]],[[12856,12856],\"disallowed_STD3_mapped\",[40,21172,41]],[[12857,12857],\"disallowed_STD3_mapped\",[40,20195,41]],[[12858,12858],\"disallowed_STD3_mapped\",[40,21628,41]],[[12859,12859],\"disallowed_STD3_mapped\",[40,23398,41]],[[12860,12860],\"disallowed_STD3_mapped\",[40,30435,41]],[[12861,12861],\"disallowed_STD3_mapped\",[40,20225,41]],[[12862,12862],\"disallowed_STD3_mapped\",[40,36039,41]],[[12863,12863],\"disallowed_STD3_mapped\",[40,21332,41]],[[12864,12864],\"disallowed_STD3_mapped\",[40,31085,41]],[[12865,12865],\"disallowed_STD3_mapped\",[40,20241,41]],[[12866,12866],\"disallowed_STD3_mapped\",[40,33258,41]],[[12867,12867],\"disallowed_STD3_mapped\",[40,33267,41]],[[12868,12868],\"mapped\",[21839]],[[12869,12869],\"mapped\",[24188]],[[12870,12870],\"mapped\",[25991]],[[12871,12871],\"mapped\",[31631]],[[12872,12879],\"valid\",[],\"NV8\"],[[12880,12880],\"mapped\",[112,116,101]],[[12881,12881],\"mapped\",[50,49]],[[12882,12882],\"mapped\",[50,50]],[[12883,12883],\"mapped\",[50,51]],[[12884,12884],\"mapped\",[50,52]],[[12885,12885],\"mapped\",[50,53]],[[12886,12886],\"mapped\",[50,54]],[[12887,12887],\"mapped\",[50,55]],[[12888,12888],\"mapped\",[50,56]],[[12889,12889],\"mapped\",[50,57]],[[12890,12890],\"mapped\",[51,48]],[[12891,12891],\"mapped\",[51,49]],[[12892,12892],\"mapped\",[51,50]],[[12893,12893],\"mapped\",[51,51]],[[12894,12894],\"mapped\",[51,52]],[[12895,12895],\"mapped\",[51,53]],[[12896,12896],\"mapped\",[4352]],[[12897,12897],\"mapped\",[4354]],[[12898,12898],\"mapped\",[4355]],[[12899,12899],\"mapped\",[4357]],[[12900,12900],\"mapped\",[4358]],[[12901,12901],\"mapped\",[4359]],[[12902,12902],\"mapped\",[4361]],[[12903,12903],\"mapped\",[4363]],[[12904,12904],\"mapped\",[4364]],[[12905,12905],\"mapped\",[4366]],[[12906,12906],\"mapped\",[4367]],[[12907,12907],\"mapped\",[4368]],[[12908,12908],\"mapped\",[4369]],[[12909,12909],\"mapped\",[4370]],[[12910,12910],\"mapped\",[44032]],[[12911,12911],\"mapped\",[45208]],[[12912,12912],\"mapped\",[45796]],[[12913,12913],\"mapped\",[46972]],[[12914,12914],\"mapped\",[47560]],[[12915,12915],\"mapped\",[48148]],[[12916,12916],\"mapped\",[49324]],[[12917,12917],\"mapped\",[50500]],[[12918,12918],\"mapped\",[51088]],[[12919,12919],\"mapped\",[52264]],[[12920,12920],\"mapped\",[52852]],[[12921,12921],\"mapped\",[53440]],[[12922,12922],\"mapped\",[54028]],[[12923,12923],\"mapped\",[54616]],[[12924,12924],\"mapped\",[52280,44256]],[[12925,12925],\"mapped\",[51452,51032]],[[12926,12926],\"mapped\",[50864]],[[12927,12927],\"valid\",[],\"NV8\"],[[12928,12928],\"mapped\",[19968]],[[12929,12929],\"mapped\",[20108]],[[12930,12930],\"mapped\",[19977]],[[12931,12931],\"mapped\",[22235]],[[12932,12932],\"mapped\",[20116]],[[12933,12933],\"mapped\",[20845]],[[12934,12934],\"mapped\",[19971]],[[12935,12935],\"mapped\",[20843]],[[12936,12936],\"mapped\",[20061]],[[12937,12937],\"mapped\",[21313]],[[12938,12938],\"mapped\",[26376]],[[12939,12939],\"mapped\",[28779]],[[12940,12940],\"mapped\",[27700]],[[12941,12941],\"mapped\",[26408]],[[12942,12942],\"mapped\",[37329]],[[12943,12943],\"mapped\",[22303]],[[12944,12944],\"mapped\",[26085]],[[12945,12945],\"mapped\",[26666]],[[12946,12946],\"mapped\",[26377]],[[12947,12947],\"mapped\",[31038]],[[12948,12948],\"mapped\",[21517]],[[12949,12949],\"mapped\",[29305]],[[12950,12950],\"mapped\",[36001]],[[12951,12951],\"mapped\",[31069]],[[12952,12952],\"mapped\",[21172]],[[12953,12953],\"mapped\",[31192]],[[12954,12954],\"mapped\",[30007]],[[12955,12955],\"mapped\",[22899]],[[12956,12956],\"mapped\",[36969]],[[12957,12957],\"mapped\",[20778]],[[12958,12958],\"mapped\",[21360]],[[12959,12959],\"mapped\",[27880]],[[12960,12960],\"mapped\",[38917]],[[12961,12961],\"mapped\",[20241]],[[12962,12962],\"mapped\",[20889]],[[12963,12963],\"mapped\",[27491]],[[12964,12964],\"mapped\",[19978]],[[12965,12965],\"mapped\",[20013]],[[12966,12966],\"mapped\",[19979]],[[12967,12967],\"mapped\",[24038]],[[12968,12968],\"mapped\",[21491]],[[12969,12969],\"mapped\",[21307]],[[12970,12970],\"mapped\",[23447]],[[12971,12971],\"mapped\",[23398]],[[12972,12972],\"mapped\",[30435]],[[12973,12973],\"mapped\",[20225]],[[12974,12974],\"mapped\",[36039]],[[12975,12975],\"mapped\",[21332]],[[12976,12976],\"mapped\",[22812]],[[12977,12977],\"mapped\",[51,54]],[[12978,12978],\"mapped\",[51,55]],[[12979,12979],\"mapped\",[51,56]],[[12980,12980],\"mapped\",[51,57]],[[12981,12981],\"mapped\",[52,48]],[[12982,12982],\"mapped\",[52,49]],[[12983,12983],\"mapped\",[52,50]],[[12984,12984],\"mapped\",[52,51]],[[12985,12985],\"mapped\",[52,52]],[[12986,12986],\"mapped\",[52,53]],[[12987,12987],\"mapped\",[52,54]],[[12988,12988],\"mapped\",[52,55]],[[12989,12989],\"mapped\",[52,56]],[[12990,12990],\"mapped\",[52,57]],[[12991,12991],\"mapped\",[53,48]],[[12992,12992],\"mapped\",[49,26376]],[[12993,12993],\"mapped\",[50,26376]],[[12994,12994],\"mapped\",[51,26376]],[[12995,12995],\"mapped\",[52,26376]],[[12996,12996],\"mapped\",[53,26376]],[[12997,12997],\"mapped\",[54,26376]],[[12998,12998],\"mapped\",[55,26376]],[[12999,12999],\"mapped\",[56,26376]],[[13000,13000],\"mapped\",[57,26376]],[[13001,13001],\"mapped\",[49,48,26376]],[[13002,13002],\"mapped\",[49,49,26376]],[[13003,13003],\"mapped\",[49,50,26376]],[[13004,13004],\"mapped\",[104,103]],[[13005,13005],\"mapped\",[101,114,103]],[[13006,13006],\"mapped\",[101,118]],[[13007,13007],\"mapped\",[108,116,100]],[[13008,13008],\"mapped\",[12450]],[[13009,13009],\"mapped\",[12452]],[[13010,13010],\"mapped\",[12454]],[[13011,13011],\"mapped\",[12456]],[[13012,13012],\"mapped\",[12458]],[[13013,13013],\"mapped\",[12459]],[[13014,13014],\"mapped\",[12461]],[[13015,13015],\"mapped\",[12463]],[[13016,13016],\"mapped\",[12465]],[[13017,13017],\"mapped\",[12467]],[[13018,13018],\"mapped\",[12469]],[[13019,13019],\"mapped\",[12471]],[[13020,13020],\"mapped\",[12473]],[[13021,13021],\"mapped\",[12475]],[[13022,13022],\"mapped\",[12477]],[[13023,13023],\"mapped\",[12479]],[[13024,13024],\"mapped\",[12481]],[[13025,13025],\"mapped\",[12484]],[[13026,13026],\"mapped\",[12486]],[[13027,13027],\"mapped\",[12488]],[[13028,13028],\"mapped\",[12490]],[[13029,13029],\"mapped\",[12491]],[[13030,13030],\"mapped\",[12492]],[[13031,13031],\"mapped\",[12493]],[[13032,13032],\"mapped\",[12494]],[[13033,13033],\"mapped\",[12495]],[[13034,13034],\"mapped\",[12498]],[[13035,13035],\"mapped\",[12501]],[[13036,13036],\"mapped\",[12504]],[[13037,13037],\"mapped\",[12507]],[[13038,13038],\"mapped\",[12510]],[[13039,13039],\"mapped\",[12511]],[[13040,13040],\"mapped\",[12512]],[[13041,13041],\"mapped\",[12513]],[[13042,13042],\"mapped\",[12514]],[[13043,13043],\"mapped\",[12516]],[[13044,13044],\"mapped\",[12518]],[[13045,13045],\"mapped\",[12520]],[[13046,13046],\"mapped\",[12521]],[[13047,13047],\"mapped\",[12522]],[[13048,13048],\"mapped\",[12523]],[[13049,13049],\"mapped\",[12524]],[[13050,13050],\"mapped\",[12525]],[[13051,13051],\"mapped\",[12527]],[[13052,13052],\"mapped\",[12528]],[[13053,13053],\"mapped\",[12529]],[[13054,13054],\"mapped\",[12530]],[[13055,13055],\"disallowed\"],[[13056,13056],\"mapped\",[12450,12497,12540,12488]],[[13057,13057],\"mapped\",[12450,12523,12501,12449]],[[13058,13058],\"mapped\",[12450,12531,12506,12450]],[[13059,13059],\"mapped\",[12450,12540,12523]],[[13060,13060],\"mapped\",[12452,12491,12531,12464]],[[13061,13061],\"mapped\",[12452,12531,12481]],[[13062,13062],\"mapped\",[12454,12457,12531]],[[13063,13063],\"mapped\",[12456,12473,12463,12540,12489]],[[13064,13064],\"mapped\",[12456,12540,12459,12540]],[[13065,13065],\"mapped\",[12458,12531,12473]],[[13066,13066],\"mapped\",[12458,12540,12512]],[[13067,13067],\"mapped\",[12459,12452,12522]],[[13068,13068],\"mapped\",[12459,12521,12483,12488]],[[13069,13069],\"mapped\",[12459,12525,12522,12540]],[[13070,13070],\"mapped\",[12460,12525,12531]],[[13071,13071],\"mapped\",[12460,12531,12510]],[[13072,13072],\"mapped\",[12462,12460]],[[13073,13073],\"mapped\",[12462,12491,12540]],[[13074,13074],\"mapped\",[12461,12517,12522,12540]],[[13075,13075],\"mapped\",[12462,12523,12480,12540]],[[13076,13076],\"mapped\",[12461,12525]],[[13077,13077],\"mapped\",[12461,12525,12464,12521,12512]],[[13078,13078],\"mapped\",[12461,12525,12513,12540,12488,12523]],[[13079,13079],\"mapped\",[12461,12525,12527,12483,12488]],[[13080,13080],\"mapped\",[12464,12521,12512]],[[13081,13081],\"mapped\",[12464,12521,12512,12488,12531]],[[13082,13082],\"mapped\",[12463,12523,12476,12452,12525]],[[13083,13083],\"mapped\",[12463,12525,12540,12493]],[[13084,13084],\"mapped\",[12465,12540,12473]],[[13085,13085],\"mapped\",[12467,12523,12490]],[[13086,13086],\"mapped\",[12467,12540,12509]],[[13087,13087],\"mapped\",[12469,12452,12463,12523]],[[13088,13088],\"mapped\",[12469,12531,12481,12540,12512]],[[13089,13089],\"mapped\",[12471,12522,12531,12464]],[[13090,13090],\"mapped\",[12475,12531,12481]],[[13091,13091],\"mapped\",[12475,12531,12488]],[[13092,13092],\"mapped\",[12480,12540,12473]],[[13093,13093],\"mapped\",[12487,12471]],[[13094,13094],\"mapped\",[12489,12523]],[[13095,13095],\"mapped\",[12488,12531]],[[13096,13096],\"mapped\",[12490,12494]],[[13097,13097],\"mapped\",[12494,12483,12488]],[[13098,13098],\"mapped\",[12495,12452,12484]],[[13099,13099],\"mapped\",[12497,12540,12475,12531,12488]],[[13100,13100],\"mapped\",[12497,12540,12484]],[[13101,13101],\"mapped\",[12496,12540,12524,12523]],[[13102,13102],\"mapped\",[12500,12450,12473,12488,12523]],[[13103,13103],\"mapped\",[12500,12463,12523]],[[13104,13104],\"mapped\",[12500,12467]],[[13105,13105],\"mapped\",[12499,12523]],[[13106,13106],\"mapped\",[12501,12449,12521,12483,12489]],[[13107,13107],\"mapped\",[12501,12451,12540,12488]],[[13108,13108],\"mapped\",[12502,12483,12471,12455,12523]],[[13109,13109],\"mapped\",[12501,12521,12531]],[[13110,13110],\"mapped\",[12504,12463,12479,12540,12523]],[[13111,13111],\"mapped\",[12506,12477]],[[13112,13112],\"mapped\",[12506,12491,12498]],[[13113,13113],\"mapped\",[12504,12523,12484]],[[13114,13114],\"mapped\",[12506,12531,12473]],[[13115,13115],\"mapped\",[12506,12540,12472]],[[13116,13116],\"mapped\",[12505,12540,12479]],[[13117,13117],\"mapped\",[12509,12452,12531,12488]],[[13118,13118],\"mapped\",[12508,12523,12488]],[[13119,13119],\"mapped\",[12507,12531]],[[13120,13120],\"mapped\",[12509,12531,12489]],[[13121,13121],\"mapped\",[12507,12540,12523]],[[13122,13122],\"mapped\",[12507,12540,12531]],[[13123,13123],\"mapped\",[12510,12452,12463,12525]],[[13124,13124],\"mapped\",[12510,12452,12523]],[[13125,13125],\"mapped\",[12510,12483,12495]],[[13126,13126],\"mapped\",[12510,12523,12463]],[[13127,13127],\"mapped\",[12510,12531,12471,12519,12531]],[[13128,13128],\"mapped\",[12511,12463,12525,12531]],[[13129,13129],\"mapped\",[12511,12522]],[[13130,13130],\"mapped\",[12511,12522,12496,12540,12523]],[[13131,13131],\"mapped\",[12513,12460]],[[13132,13132],\"mapped\",[12513,12460,12488,12531]],[[13133,13133],\"mapped\",[12513,12540,12488,12523]],[[13134,13134],\"mapped\",[12516,12540,12489]],[[13135,13135],\"mapped\",[12516,12540,12523]],[[13136,13136],\"mapped\",[12518,12450,12531]],[[13137,13137],\"mapped\",[12522,12483,12488,12523]],[[13138,13138],\"mapped\",[12522,12521]],[[13139,13139],\"mapped\",[12523,12500,12540]],[[13140,13140],\"mapped\",[12523,12540,12502,12523]],[[13141,13141],\"mapped\",[12524,12512]],[[13142,13142],\"mapped\",[12524,12531,12488,12466,12531]],[[13143,13143],\"mapped\",[12527,12483,12488]],[[13144,13144],\"mapped\",[48,28857]],[[13145,13145],\"mapped\",[49,28857]],[[13146,13146],\"mapped\",[50,28857]],[[13147,13147],\"mapped\",[51,28857]],[[13148,13148],\"mapped\",[52,28857]],[[13149,13149],\"mapped\",[53,28857]],[[13150,13150],\"mapped\",[54,28857]],[[13151,13151],\"mapped\",[55,28857]],[[13152,13152],\"mapped\",[56,28857]],[[13153,13153],\"mapped\",[57,28857]],[[13154,13154],\"mapped\",[49,48,28857]],[[13155,13155],\"mapped\",[49,49,28857]],[[13156,13156],\"mapped\",[49,50,28857]],[[13157,13157],\"mapped\",[49,51,28857]],[[13158,13158],\"mapped\",[49,52,28857]],[[13159,13159],\"mapped\",[49,53,28857]],[[13160,13160],\"mapped\",[49,54,28857]],[[13161,13161],\"mapped\",[49,55,28857]],[[13162,13162],\"mapped\",[49,56,28857]],[[13163,13163],\"mapped\",[49,57,28857]],[[13164,13164],\"mapped\",[50,48,28857]],[[13165,13165],\"mapped\",[50,49,28857]],[[13166,13166],\"mapped\",[50,50,28857]],[[13167,13167],\"mapped\",[50,51,28857]],[[13168,13168],\"mapped\",[50,52,28857]],[[13169,13169],\"mapped\",[104,112,97]],[[13170,13170],\"mapped\",[100,97]],[[13171,13171],\"mapped\",[97,117]],[[13172,13172],\"mapped\",[98,97,114]],[[13173,13173],\"mapped\",[111,118]],[[13174,13174],\"mapped\",[112,99]],[[13175,13175],\"mapped\",[100,109]],[[13176,13176],\"mapped\",[100,109,50]],[[13177,13177],\"mapped\",[100,109,51]],[[13178,13178],\"mapped\",[105,117]],[[13179,13179],\"mapped\",[24179,25104]],[[13180,13180],\"mapped\",[26157,21644]],[[13181,13181],\"mapped\",[22823,27491]],[[13182,13182],\"mapped\",[26126,27835]],[[13183,13183],\"mapped\",[26666,24335,20250,31038]],[[13184,13184],\"mapped\",[112,97]],[[13185,13185],\"mapped\",[110,97]],[[13186,13186],\"mapped\",[956,97]],[[13187,13187],\"mapped\",[109,97]],[[13188,13188],\"mapped\",[107,97]],[[13189,13189],\"mapped\",[107,98]],[[13190,13190],\"mapped\",[109,98]],[[13191,13191],\"mapped\",[103,98]],[[13192,13192],\"mapped\",[99,97,108]],[[13193,13193],\"mapped\",[107,99,97,108]],[[13194,13194],\"mapped\",[112,102]],[[13195,13195],\"mapped\",[110,102]],[[13196,13196],\"mapped\",[956,102]],[[13197,13197],\"mapped\",[956,103]],[[13198,13198],\"mapped\",[109,103]],[[13199,13199],\"mapped\",[107,103]],[[13200,13200],\"mapped\",[104,122]],[[13201,13201],\"mapped\",[107,104,122]],[[13202,13202],\"mapped\",[109,104,122]],[[13203,13203],\"mapped\",[103,104,122]],[[13204,13204],\"mapped\",[116,104,122]],[[13205,13205],\"mapped\",[956,108]],[[13206,13206],\"mapped\",[109,108]],[[13207,13207],\"mapped\",[100,108]],[[13208,13208],\"mapped\",[107,108]],[[13209,13209],\"mapped\",[102,109]],[[13210,13210],\"mapped\",[110,109]],[[13211,13211],\"mapped\",[956,109]],[[13212,13212],\"mapped\",[109,109]],[[13213,13213],\"mapped\",[99,109]],[[13214,13214],\"mapped\",[107,109]],[[13215,13215],\"mapped\",[109,109,50]],[[13216,13216],\"mapped\",[99,109,50]],[[13217,13217],\"mapped\",[109,50]],[[13218,13218],\"mapped\",[107,109,50]],[[13219,13219],\"mapped\",[109,109,51]],[[13220,13220],\"mapped\",[99,109,51]],[[13221,13221],\"mapped\",[109,51]],[[13222,13222],\"mapped\",[107,109,51]],[[13223,13223],\"mapped\",[109,8725,115]],[[13224,13224],\"mapped\",[109,8725,115,50]],[[13225,13225],\"mapped\",[112,97]],[[13226,13226],\"mapped\",[107,112,97]],[[13227,13227],\"mapped\",[109,112,97]],[[13228,13228],\"mapped\",[103,112,97]],[[13229,13229],\"mapped\",[114,97,100]],[[13230,13230],\"mapped\",[114,97,100,8725,115]],[[13231,13231],\"mapped\",[114,97,100,8725,115,50]],[[13232,13232],\"mapped\",[112,115]],[[13233,13233],\"mapped\",[110,115]],[[13234,13234],\"mapped\",[956,115]],[[13235,13235],\"mapped\",[109,115]],[[13236,13236],\"mapped\",[112,118]],[[13237,13237],\"mapped\",[110,118]],[[13238,13238],\"mapped\",[956,118]],[[13239,13239],\"mapped\",[109,118]],[[13240,13240],\"mapped\",[107,118]],[[13241,13241],\"mapped\",[109,118]],[[13242,13242],\"mapped\",[112,119]],[[13243,13243],\"mapped\",[110,119]],[[13244,13244],\"mapped\",[956,119]],[[13245,13245],\"mapped\",[109,119]],[[13246,13246],\"mapped\",[107,119]],[[13247,13247],\"mapped\",[109,119]],[[13248,13248],\"mapped\",[107,969]],[[13249,13249],\"mapped\",[109,969]],[[13250,13250],\"disallowed\"],[[13251,13251],\"mapped\",[98,113]],[[13252,13252],\"mapped\",[99,99]],[[13253,13253],\"mapped\",[99,100]],[[13254,13254],\"mapped\",[99,8725,107,103]],[[13255,13255],\"disallowed\"],[[13256,13256],\"mapped\",[100,98]],[[13257,13257],\"mapped\",[103,121]],[[13258,13258],\"mapped\",[104,97]],[[13259,13259],\"mapped\",[104,112]],[[13260,13260],\"mapped\",[105,110]],[[13261,13261],\"mapped\",[107,107]],[[13262,13262],\"mapped\",[107,109]],[[13263,13263],\"mapped\",[107,116]],[[13264,13264],\"mapped\",[108,109]],[[13265,13265],\"mapped\",[108,110]],[[13266,13266],\"mapped\",[108,111,103]],[[13267,13267],\"mapped\",[108,120]],[[13268,13268],\"mapped\",[109,98]],[[13269,13269],\"mapped\",[109,105,108]],[[13270,13270],\"mapped\",[109,111,108]],[[13271,13271],\"mapped\",[112,104]],[[13272,13272],\"disallowed\"],[[13273,13273],\"mapped\",[112,112,109]],[[13274,13274],\"mapped\",[112,114]],[[13275,13275],\"mapped\",[115,114]],[[13276,13276],\"mapped\",[115,118]],[[13277,13277],\"mapped\",[119,98]],[[13278,13278],\"mapped\",[118,8725,109]],[[13279,13279],\"mapped\",[97,8725,109]],[[13280,13280],\"mapped\",[49,26085]],[[13281,13281],\"mapped\",[50,26085]],[[13282,13282],\"mapped\",[51,26085]],[[13283,13283],\"mapped\",[52,26085]],[[13284,13284],\"mapped\",[53,26085]],[[13285,13285],\"mapped\",[54,26085]],[[13286,13286],\"mapped\",[55,26085]],[[13287,13287],\"mapped\",[56,26085]],[[13288,13288],\"mapped\",[57,26085]],[[13289,13289],\"mapped\",[49,48,26085]],[[13290,13290],\"mapped\",[49,49,26085]],[[13291,13291],\"mapped\",[49,50,26085]],[[13292,13292],\"mapped\",[49,51,26085]],[[13293,13293],\"mapped\",[49,52,26085]],[[13294,13294],\"mapped\",[49,53,26085]],[[13295,13295],\"mapped\",[49,54,26085]],[[13296,13296],\"mapped\",[49,55,26085]],[[13297,13297],\"mapped\",[49,56,26085]],[[13298,13298],\"mapped\",[49,57,26085]],[[13299,13299],\"mapped\",[50,48,26085]],[[13300,13300],\"mapped\",[50,49,26085]],[[13301,13301],\"mapped\",[50,50,26085]],[[13302,13302],\"mapped\",[50,51,26085]],[[13303,13303],\"mapped\",[50,52,26085]],[[13304,13304],\"mapped\",[50,53,26085]],[[13305,13305],\"mapped\",[50,54,26085]],[[13306,13306],\"mapped\",[50,55,26085]],[[13307,13307],\"mapped\",[50,56,26085]],[[13308,13308],\"mapped\",[50,57,26085]],[[13309,13309],\"mapped\",[51,48,26085]],[[13310,13310],\"mapped\",[51,49,26085]],[[13311,13311],\"mapped\",[103,97,108]],[[13312,19893],\"valid\"],[[19894,19903],\"disallowed\"],[[19904,19967],\"valid\",[],\"NV8\"],[[19968,40869],\"valid\"],[[40870,40891],\"valid\"],[[40892,40899],\"valid\"],[[40900,40907],\"valid\"],[[40908,40908],\"valid\"],[[40909,40917],\"valid\"],[[40918,40959],\"disallowed\"],[[40960,42124],\"valid\"],[[42125,42127],\"disallowed\"],[[42128,42145],\"valid\",[],\"NV8\"],[[42146,42147],\"valid\",[],\"NV8\"],[[42148,42163],\"valid\",[],\"NV8\"],[[42164,42164],\"valid\",[],\"NV8\"],[[42165,42176],\"valid\",[],\"NV8\"],[[42177,42177],\"valid\",[],\"NV8\"],[[42178,42180],\"valid\",[],\"NV8\"],[[42181,42181],\"valid\",[],\"NV8\"],[[42182,42182],\"valid\",[],\"NV8\"],[[42183,42191],\"disallowed\"],[[42192,42237],\"valid\"],[[42238,42239],\"valid\",[],\"NV8\"],[[42240,42508],\"valid\"],[[42509,42511],\"valid\",[],\"NV8\"],[[42512,42539],\"valid\"],[[42540,42559],\"disallowed\"],[[42560,42560],\"mapped\",[42561]],[[42561,42561],\"valid\"],[[42562,42562],\"mapped\",[42563]],[[42563,42563],\"valid\"],[[42564,42564],\"mapped\",[42565]],[[42565,42565],\"valid\"],[[42566,42566],\"mapped\",[42567]],[[42567,42567],\"valid\"],[[42568,42568],\"mapped\",[42569]],[[42569,42569],\"valid\"],[[42570,42570],\"mapped\",[42571]],[[42571,42571],\"valid\"],[[42572,42572],\"mapped\",[42573]],[[42573,42573],\"valid\"],[[42574,42574],\"mapped\",[42575]],[[42575,42575],\"valid\"],[[42576,42576],\"mapped\",[42577]],[[42577,42577],\"valid\"],[[42578,42578],\"mapped\",[42579]],[[42579,42579],\"valid\"],[[42580,42580],\"mapped\",[42581]],[[42581,42581],\"valid\"],[[42582,42582],\"mapped\",[42583]],[[42583,42583],\"valid\"],[[42584,42584],\"mapped\",[42585]],[[42585,42585],\"valid\"],[[42586,42586],\"mapped\",[42587]],[[42587,42587],\"valid\"],[[42588,42588],\"mapped\",[42589]],[[42589,42589],\"valid\"],[[42590,42590],\"mapped\",[42591]],[[42591,42591],\"valid\"],[[42592,42592],\"mapped\",[42593]],[[42593,42593],\"valid\"],[[42594,42594],\"mapped\",[42595]],[[42595,42595],\"valid\"],[[42596,42596],\"mapped\",[42597]],[[42597,42597],\"valid\"],[[42598,42598],\"mapped\",[42599]],[[42599,42599],\"valid\"],[[42600,42600],\"mapped\",[42601]],[[42601,42601],\"valid\"],[[42602,42602],\"mapped\",[42603]],[[42603,42603],\"valid\"],[[42604,42604],\"mapped\",[42605]],[[42605,42607],\"valid\"],[[42608,42611],\"valid\",[],\"NV8\"],[[42612,42619],\"valid\"],[[42620,42621],\"valid\"],[[42622,42622],\"valid\",[],\"NV8\"],[[42623,42623],\"valid\"],[[42624,42624],\"mapped\",[42625]],[[42625,42625],\"valid\"],[[42626,42626],\"mapped\",[42627]],[[42627,42627],\"valid\"],[[42628,42628],\"mapped\",[42629]],[[42629,42629],\"valid\"],[[42630,42630],\"mapped\",[42631]],[[42631,42631],\"valid\"],[[42632,42632],\"mapped\",[42633]],[[42633,42633],\"valid\"],[[42634,42634],\"mapped\",[42635]],[[42635,42635],\"valid\"],[[42636,42636],\"mapped\",[42637]],[[42637,42637],\"valid\"],[[42638,42638],\"mapped\",[42639]],[[42639,42639],\"valid\"],[[42640,42640],\"mapped\",[42641]],[[42641,42641],\"valid\"],[[42642,42642],\"mapped\",[42643]],[[42643,42643],\"valid\"],[[42644,42644],\"mapped\",[42645]],[[42645,42645],\"valid\"],[[42646,42646],\"mapped\",[42647]],[[42647,42647],\"valid\"],[[42648,42648],\"mapped\",[42649]],[[42649,42649],\"valid\"],[[42650,42650],\"mapped\",[42651]],[[42651,42651],\"valid\"],[[42652,42652],\"mapped\",[1098]],[[42653,42653],\"mapped\",[1100]],[[42654,42654],\"valid\"],[[42655,42655],\"valid\"],[[42656,42725],\"valid\"],[[42726,42735],\"valid\",[],\"NV8\"],[[42736,42737],\"valid\"],[[42738,42743],\"valid\",[],\"NV8\"],[[42744,42751],\"disallowed\"],[[42752,42774],\"valid\",[],\"NV8\"],[[42775,42778],\"valid\"],[[42779,42783],\"valid\"],[[42784,42785],\"valid\",[],\"NV8\"],[[42786,42786],\"mapped\",[42787]],[[42787,42787],\"valid\"],[[42788,42788],\"mapped\",[42789]],[[42789,42789],\"valid\"],[[42790,42790],\"mapped\",[42791]],[[42791,42791],\"valid\"],[[42792,42792],\"mapped\",[42793]],[[42793,42793],\"valid\"],[[42794,42794],\"mapped\",[42795]],[[42795,42795],\"valid\"],[[42796,42796],\"mapped\",[42797]],[[42797,42797],\"valid\"],[[42798,42798],\"mapped\",[42799]],[[42799,42801],\"valid\"],[[42802,42802],\"mapped\",[42803]],[[42803,42803],\"valid\"],[[42804,42804],\"mapped\",[42805]],[[42805,42805],\"valid\"],[[42806,42806],\"mapped\",[42807]],[[42807,42807],\"valid\"],[[42808,42808],\"mapped\",[42809]],[[42809,42809],\"valid\"],[[42810,42810],\"mapped\",[42811]],[[42811,42811],\"valid\"],[[42812,42812],\"mapped\",[42813]],[[42813,42813],\"valid\"],[[42814,42814],\"mapped\",[42815]],[[42815,42815],\"valid\"],[[42816,42816],\"mapped\",[42817]],[[42817,42817],\"valid\"],[[42818,42818],\"mapped\",[42819]],[[42819,42819],\"valid\"],[[42820,42820],\"mapped\",[42821]],[[42821,42821],\"valid\"],[[42822,42822],\"mapped\",[42823]],[[42823,42823],\"valid\"],[[42824,42824],\"mapped\",[42825]],[[42825,42825],\"valid\"],[[42826,42826],\"mapped\",[42827]],[[42827,42827],\"valid\"],[[42828,42828],\"mapped\",[42829]],[[42829,42829],\"valid\"],[[42830,42830],\"mapped\",[42831]],[[42831,42831],\"valid\"],[[42832,42832],\"mapped\",[42833]],[[42833,42833],\"valid\"],[[42834,42834],\"mapped\",[42835]],[[42835,42835],\"valid\"],[[42836,42836],\"mapped\",[42837]],[[42837,42837],\"valid\"],[[42838,42838],\"mapped\",[42839]],[[42839,42839],\"valid\"],[[42840,42840],\"mapped\",[42841]],[[42841,42841],\"valid\"],[[42842,42842],\"mapped\",[42843]],[[42843,42843],\"valid\"],[[42844,42844],\"mapped\",[42845]],[[42845,42845],\"valid\"],[[42846,42846],\"mapped\",[42847]],[[42847,42847],\"valid\"],[[42848,42848],\"mapped\",[42849]],[[42849,42849],\"valid\"],[[42850,42850],\"mapped\",[42851]],[[42851,42851],\"valid\"],[[42852,42852],\"mapped\",[42853]],[[42853,42853],\"valid\"],[[42854,42854],\"mapped\",[42855]],[[42855,42855],\"valid\"],[[42856,42856],\"mapped\",[42857]],[[42857,42857],\"valid\"],[[42858,42858],\"mapped\",[42859]],[[42859,42859],\"valid\"],[[42860,42860],\"mapped\",[42861]],[[42861,42861],\"valid\"],[[42862,42862],\"mapped\",[42863]],[[42863,42863],\"valid\"],[[42864,42864],\"mapped\",[42863]],[[42865,42872],\"valid\"],[[42873,42873],\"mapped\",[42874]],[[42874,42874],\"valid\"],[[42875,42875],\"mapped\",[42876]],[[42876,42876],\"valid\"],[[42877,42877],\"mapped\",[7545]],[[42878,42878],\"mapped\",[42879]],[[42879,42879],\"valid\"],[[42880,42880],\"mapped\",[42881]],[[42881,42881],\"valid\"],[[42882,42882],\"mapped\",[42883]],[[42883,42883],\"valid\"],[[42884,42884],\"mapped\",[42885]],[[42885,42885],\"valid\"],[[42886,42886],\"mapped\",[42887]],[[42887,42888],\"valid\"],[[42889,42890],\"valid\",[],\"NV8\"],[[42891,42891],\"mapped\",[42892]],[[42892,42892],\"valid\"],[[42893,42893],\"mapped\",[613]],[[42894,42894],\"valid\"],[[42895,42895],\"valid\"],[[42896,42896],\"mapped\",[42897]],[[42897,42897],\"valid\"],[[42898,42898],\"mapped\",[42899]],[[42899,42899],\"valid\"],[[42900,42901],\"valid\"],[[42902,42902],\"mapped\",[42903]],[[42903,42903],\"valid\"],[[42904,42904],\"mapped\",[42905]],[[42905,42905],\"valid\"],[[42906,42906],\"mapped\",[42907]],[[42907,42907],\"valid\"],[[42908,42908],\"mapped\",[42909]],[[42909,42909],\"valid\"],[[42910,42910],\"mapped\",[42911]],[[42911,42911],\"valid\"],[[42912,42912],\"mapped\",[42913]],[[42913,42913],\"valid\"],[[42914,42914],\"mapped\",[42915]],[[42915,42915],\"valid\"],[[42916,42916],\"mapped\",[42917]],[[42917,42917],\"valid\"],[[42918,42918],\"mapped\",[42919]],[[42919,42919],\"valid\"],[[42920,42920],\"mapped\",[42921]],[[42921,42921],\"valid\"],[[42922,42922],\"mapped\",[614]],[[42923,42923],\"mapped\",[604]],[[42924,42924],\"mapped\",[609]],[[42925,42925],\"mapped\",[620]],[[42926,42927],\"disallowed\"],[[42928,42928],\"mapped\",[670]],[[42929,42929],\"mapped\",[647]],[[42930,42930],\"mapped\",[669]],[[42931,42931],\"mapped\",[43859]],[[42932,42932],\"mapped\",[42933]],[[42933,42933],\"valid\"],[[42934,42934],\"mapped\",[42935]],[[42935,42935],\"valid\"],[[42936,42998],\"disallowed\"],[[42999,42999],\"valid\"],[[43000,43000],\"mapped\",[295]],[[43001,43001],\"mapped\",[339]],[[43002,43002],\"valid\"],[[43003,43007],\"valid\"],[[43008,43047],\"valid\"],[[43048,43051],\"valid\",[],\"NV8\"],[[43052,43055],\"disallowed\"],[[43056,43065],\"valid\",[],\"NV8\"],[[43066,43071],\"disallowed\"],[[43072,43123],\"valid\"],[[43124,43127],\"valid\",[],\"NV8\"],[[43128,43135],\"disallowed\"],[[43136,43204],\"valid\"],[[43205,43213],\"disallowed\"],[[43214,43215],\"valid\",[],\"NV8\"],[[43216,43225],\"valid\"],[[43226,43231],\"disallowed\"],[[43232,43255],\"valid\"],[[43256,43258],\"valid\",[],\"NV8\"],[[43259,43259],\"valid\"],[[43260,43260],\"valid\",[],\"NV8\"],[[43261,43261],\"valid\"],[[43262,43263],\"disallowed\"],[[43264,43309],\"valid\"],[[43310,43311],\"valid\",[],\"NV8\"],[[43312,43347],\"valid\"],[[43348,43358],\"disallowed\"],[[43359,43359],\"valid\",[],\"NV8\"],[[43360,43388],\"valid\",[],\"NV8\"],[[43389,43391],\"disallowed\"],[[43392,43456],\"valid\"],[[43457,43469],\"valid\",[],\"NV8\"],[[43470,43470],\"disallowed\"],[[43471,43481],\"valid\"],[[43482,43485],\"disallowed\"],[[43486,43487],\"valid\",[],\"NV8\"],[[43488,43518],\"valid\"],[[43519,43519],\"disallowed\"],[[43520,43574],\"valid\"],[[43575,43583],\"disallowed\"],[[43584,43597],\"valid\"],[[43598,43599],\"disallowed\"],[[43600,43609],\"valid\"],[[43610,43611],\"disallowed\"],[[43612,43615],\"valid\",[],\"NV8\"],[[43616,43638],\"valid\"],[[43639,43641],\"valid\",[],\"NV8\"],[[43642,43643],\"valid\"],[[43644,43647],\"valid\"],[[43648,43714],\"valid\"],[[43715,43738],\"disallowed\"],[[43739,43741],\"valid\"],[[43742,43743],\"valid\",[],\"NV8\"],[[43744,43759],\"valid\"],[[43760,43761],\"valid\",[],\"NV8\"],[[43762,43766],\"valid\"],[[43767,43776],\"disallowed\"],[[43777,43782],\"valid\"],[[43783,43784],\"disallowed\"],[[43785,43790],\"valid\"],[[43791,43792],\"disallowed\"],[[43793,43798],\"valid\"],[[43799,43807],\"disallowed\"],[[43808,43814],\"valid\"],[[43815,43815],\"disallowed\"],[[43816,43822],\"valid\"],[[43823,43823],\"disallowed\"],[[43824,43866],\"valid\"],[[43867,43867],\"valid\",[],\"NV8\"],[[43868,43868],\"mapped\",[42791]],[[43869,43869],\"mapped\",[43831]],[[43870,43870],\"mapped\",[619]],[[43871,43871],\"mapped\",[43858]],[[43872,43875],\"valid\"],[[43876,43877],\"valid\"],[[43878,43887],\"disallowed\"],[[43888,43888],\"mapped\",[5024]],[[43889,43889],\"mapped\",[5025]],[[43890,43890],\"mapped\",[5026]],[[43891,43891],\"mapped\",[5027]],[[43892,43892],\"mapped\",[5028]],[[43893,43893],\"mapped\",[5029]],[[43894,43894],\"mapped\",[5030]],[[43895,43895],\"mapped\",[5031]],[[43896,43896],\"mapped\",[5032]],[[43897,43897],\"mapped\",[5033]],[[43898,43898],\"mapped\",[5034]],[[43899,43899],\"mapped\",[5035]],[[43900,43900],\"mapped\",[5036]],[[43901,43901],\"mapped\",[5037]],[[43902,43902],\"mapped\",[5038]],[[43903,43903],\"mapped\",[5039]],[[43904,43904],\"mapped\",[5040]],[[43905,43905],\"mapped\",[5041]],[[43906,43906],\"mapped\",[5042]],[[43907,43907],\"mapped\",[5043]],[[43908,43908],\"mapped\",[5044]],[[43909,43909],\"mapped\",[5045]],[[43910,43910],\"mapped\",[5046]],[[43911,43911],\"mapped\",[5047]],[[43912,43912],\"mapped\",[5048]],[[43913,43913],\"mapped\",[5049]],[[43914,43914],\"mapped\",[5050]],[[43915,43915],\"mapped\",[5051]],[[43916,43916],\"mapped\",[5052]],[[43917,43917],\"mapped\",[5053]],[[43918,43918],\"mapped\",[5054]],[[43919,43919],\"mapped\",[5055]],[[43920,43920],\"mapped\",[5056]],[[43921,43921],\"mapped\",[5057]],[[43922,43922],\"mapped\",[5058]],[[43923,43923],\"mapped\",[5059]],[[43924,43924],\"mapped\",[5060]],[[43925,43925],\"mapped\",[5061]],[[43926,43926],\"mapped\",[5062]],[[43927,43927],\"mapped\",[5063]],[[43928,43928],\"mapped\",[5064]],[[43929,43929],\"mapped\",[5065]],[[43930,43930],\"mapped\",[5066]],[[43931,43931],\"mapped\",[5067]],[[43932,43932],\"mapped\",[5068]],[[43933,43933],\"mapped\",[5069]],[[43934,43934],\"mapped\",[5070]],[[43935,43935],\"mapped\",[5071]],[[43936,43936],\"mapped\",[5072]],[[43937,43937],\"mapped\",[5073]],[[43938,43938],\"mapped\",[5074]],[[43939,43939],\"mapped\",[5075]],[[43940,43940],\"mapped\",[5076]],[[43941,43941],\"mapped\",[5077]],[[43942,43942],\"mapped\",[5078]],[[43943,43943],\"mapped\",[5079]],[[43944,43944],\"mapped\",[5080]],[[43945,43945],\"mapped\",[5081]],[[43946,43946],\"mapped\",[5082]],[[43947,43947],\"mapped\",[5083]],[[43948,43948],\"mapped\",[5084]],[[43949,43949],\"mapped\",[5085]],[[43950,43950],\"mapped\",[5086]],[[43951,43951],\"mapped\",[5087]],[[43952,43952],\"mapped\",[5088]],[[43953,43953],\"mapped\",[5089]],[[43954,43954],\"mapped\",[5090]],[[43955,43955],\"mapped\",[5091]],[[43956,43956],\"mapped\",[5092]],[[43957,43957],\"mapped\",[5093]],[[43958,43958],\"mapped\",[5094]],[[43959,43959],\"mapped\",[5095]],[[43960,43960],\"mapped\",[5096]],[[43961,43961],\"mapped\",[5097]],[[43962,43962],\"mapped\",[5098]],[[43963,43963],\"mapped\",[5099]],[[43964,43964],\"mapped\",[5100]],[[43965,43965],\"mapped\",[5101]],[[43966,43966],\"mapped\",[5102]],[[43967,43967],\"mapped\",[5103]],[[43968,44010],\"valid\"],[[44011,44011],\"valid\",[],\"NV8\"],[[44012,44013],\"valid\"],[[44014,44015],\"disallowed\"],[[44016,44025],\"valid\"],[[44026,44031],\"disallowed\"],[[44032,55203],\"valid\"],[[55204,55215],\"disallowed\"],[[55216,55238],\"valid\",[],\"NV8\"],[[55239,55242],\"disallowed\"],[[55243,55291],\"valid\",[],\"NV8\"],[[55292,55295],\"disallowed\"],[[55296,57343],\"disallowed\"],[[57344,63743],\"disallowed\"],[[63744,63744],\"mapped\",[35912]],[[63745,63745],\"mapped\",[26356]],[[63746,63746],\"mapped\",[36554]],[[63747,63747],\"mapped\",[36040]],[[63748,63748],\"mapped\",[28369]],[[63749,63749],\"mapped\",[20018]],[[63750,63750],\"mapped\",[21477]],[[63751,63752],\"mapped\",[40860]],[[63753,63753],\"mapped\",[22865]],[[63754,63754],\"mapped\",[37329]],[[63755,63755],\"mapped\",[21895]],[[63756,63756],\"mapped\",[22856]],[[63757,63757],\"mapped\",[25078]],[[63758,63758],\"mapped\",[30313]],[[63759,63759],\"mapped\",[32645]],[[63760,63760],\"mapped\",[34367]],[[63761,63761],\"mapped\",[34746]],[[63762,63762],\"mapped\",[35064]],[[63763,63763],\"mapped\",[37007]],[[63764,63764],\"mapped\",[27138]],[[63765,63765],\"mapped\",[27931]],[[63766,63766],\"mapped\",[28889]],[[63767,63767],\"mapped\",[29662]],[[63768,63768],\"mapped\",[33853]],[[63769,63769],\"mapped\",[37226]],[[63770,63770],\"mapped\",[39409]],[[63771,63771],\"mapped\",[20098]],[[63772,63772],\"mapped\",[21365]],[[63773,63773],\"mapped\",[27396]],[[63774,63774],\"mapped\",[29211]],[[63775,63775],\"mapped\",[34349]],[[63776,63776],\"mapped\",[40478]],[[63777,63777],\"mapped\",[23888]],[[63778,63778],\"mapped\",[28651]],[[63779,63779],\"mapped\",[34253]],[[63780,63780],\"mapped\",[35172]],[[63781,63781],\"mapped\",[25289]],[[63782,63782],\"mapped\",[33240]],[[63783,63783],\"mapped\",[34847]],[[63784,63784],\"mapped\",[24266]],[[63785,63785],\"mapped\",[26391]],[[63786,63786],\"mapped\",[28010]],[[63787,63787],\"mapped\",[29436]],[[63788,63788],\"mapped\",[37070]],[[63789,63789],\"mapped\",[20358]],[[63790,63790],\"mapped\",[20919]],[[63791,63791],\"mapped\",[21214]],[[63792,63792],\"mapped\",[25796]],[[63793,63793],\"mapped\",[27347]],[[63794,63794],\"mapped\",[29200]],[[63795,63795],\"mapped\",[30439]],[[63796,63796],\"mapped\",[32769]],[[63797,63797],\"mapped\",[34310]],[[63798,63798],\"mapped\",[34396]],[[63799,63799],\"mapped\",[36335]],[[63800,63800],\"mapped\",[38706]],[[63801,63801],\"mapped\",[39791]],[[63802,63802],\"mapped\",[40442]],[[63803,63803],\"mapped\",[30860]],[[63804,63804],\"mapped\",[31103]],[[63805,63805],\"mapped\",[32160]],[[63806,63806],\"mapped\",[33737]],[[63807,63807],\"mapped\",[37636]],[[63808,63808],\"mapped\",[40575]],[[63809,63809],\"mapped\",[35542]],[[63810,63810],\"mapped\",[22751]],[[63811,63811],\"mapped\",[24324]],[[63812,63812],\"mapped\",[31840]],[[63813,63813],\"mapped\",[32894]],[[63814,63814],\"mapped\",[29282]],[[63815,63815],\"mapped\",[30922]],[[63816,63816],\"mapped\",[36034]],[[63817,63817],\"mapped\",[38647]],[[63818,63818],\"mapped\",[22744]],[[63819,63819],\"mapped\",[23650]],[[63820,63820],\"mapped\",[27155]],[[63821,63821],\"mapped\",[28122]],[[63822,63822],\"mapped\",[28431]],[[63823,63823],\"mapped\",[32047]],[[63824,63824],\"mapped\",[32311]],[[63825,63825],\"mapped\",[38475]],[[63826,63826],\"mapped\",[21202]],[[63827,63827],\"mapped\",[32907]],[[63828,63828],\"mapped\",[20956]],[[63829,63829],\"mapped\",[20940]],[[63830,63830],\"mapped\",[31260]],[[63831,63831],\"mapped\",[32190]],[[63832,63832],\"mapped\",[33777]],[[63833,63833],\"mapped\",[38517]],[[63834,63834],\"mapped\",[35712]],[[63835,63835],\"mapped\",[25295]],[[63836,63836],\"mapped\",[27138]],[[63837,63837],\"mapped\",[35582]],[[63838,63838],\"mapped\",[20025]],[[63839,63839],\"mapped\",[23527]],[[63840,63840],\"mapped\",[24594]],[[63841,63841],\"mapped\",[29575]],[[63842,63842],\"mapped\",[30064]],[[63843,63843],\"mapped\",[21271]],[[63844,63844],\"mapped\",[30971]],[[63845,63845],\"mapped\",[20415]],[[63846,63846],\"mapped\",[24489]],[[63847,63847],\"mapped\",[19981]],[[63848,63848],\"mapped\",[27852]],[[63849,63849],\"mapped\",[25976]],[[63850,63850],\"mapped\",[32034]],[[63851,63851],\"mapped\",[21443]],[[63852,63852],\"mapped\",[22622]],[[63853,63853],\"mapped\",[30465]],[[63854,63854],\"mapped\",[33865]],[[63855,63855],\"mapped\",[35498]],[[63856,63856],\"mapped\",[27578]],[[63857,63857],\"mapped\",[36784]],[[63858,63858],\"mapped\",[27784]],[[63859,63859],\"mapped\",[25342]],[[63860,63860],\"mapped\",[33509]],[[63861,63861],\"mapped\",[25504]],[[63862,63862],\"mapped\",[30053]],[[63863,63863],\"mapped\",[20142]],[[63864,63864],\"mapped\",[20841]],[[63865,63865],\"mapped\",[20937]],[[63866,63866],\"mapped\",[26753]],[[63867,63867],\"mapped\",[31975]],[[63868,63868],\"mapped\",[33391]],[[63869,63869],\"mapped\",[35538]],[[63870,63870],\"mapped\",[37327]],[[63871,63871],\"mapped\",[21237]],[[63872,63872],\"mapped\",[21570]],[[63873,63873],\"mapped\",[22899]],[[63874,63874],\"mapped\",[24300]],[[63875,63875],\"mapped\",[26053]],[[63876,63876],\"mapped\",[28670]],[[63877,63877],\"mapped\",[31018]],[[63878,63878],\"mapped\",[38317]],[[63879,63879],\"mapped\",[39530]],[[63880,63880],\"mapped\",[40599]],[[63881,63881],\"mapped\",[40654]],[[63882,63882],\"mapped\",[21147]],[[63883,63883],\"mapped\",[26310]],[[63884,63884],\"mapped\",[27511]],[[63885,63885],\"mapped\",[36706]],[[63886,63886],\"mapped\",[24180]],[[63887,63887],\"mapped\",[24976]],[[63888,63888],\"mapped\",[25088]],[[63889,63889],\"mapped\",[25754]],[[63890,63890],\"mapped\",[28451]],[[63891,63891],\"mapped\",[29001]],[[63892,63892],\"mapped\",[29833]],[[63893,63893],\"mapped\",[31178]],[[63894,63894],\"mapped\",[32244]],[[63895,63895],\"mapped\",[32879]],[[63896,63896],\"mapped\",[36646]],[[63897,63897],\"mapped\",[34030]],[[63898,63898],\"mapped\",[36899]],[[63899,63899],\"mapped\",[37706]],[[63900,63900],\"mapped\",[21015]],[[63901,63901],\"mapped\",[21155]],[[63902,63902],\"mapped\",[21693]],[[63903,63903],\"mapped\",[28872]],[[63904,63904],\"mapped\",[35010]],[[63905,63905],\"mapped\",[35498]],[[63906,63906],\"mapped\",[24265]],[[63907,63907],\"mapped\",[24565]],[[63908,63908],\"mapped\",[25467]],[[63909,63909],\"mapped\",[27566]],[[63910,63910],\"mapped\",[31806]],[[63911,63911],\"mapped\",[29557]],[[63912,63912],\"mapped\",[20196]],[[63913,63913],\"mapped\",[22265]],[[63914,63914],\"mapped\",[23527]],[[63915,63915],\"mapped\",[23994]],[[63916,63916],\"mapped\",[24604]],[[63917,63917],\"mapped\",[29618]],[[63918,63918],\"mapped\",[29801]],[[63919,63919],\"mapped\",[32666]],[[63920,63920],\"mapped\",[32838]],[[63921,63921],\"mapped\",[37428]],[[63922,63922],\"mapped\",[38646]],[[63923,63923],\"mapped\",[38728]],[[63924,63924],\"mapped\",[38936]],[[63925,63925],\"mapped\",[20363]],[[63926,63926],\"mapped\",[31150]],[[63927,63927],\"mapped\",[37300]],[[63928,63928],\"mapped\",[38584]],[[63929,63929],\"mapped\",[24801]],[[63930,63930],\"mapped\",[20102]],[[63931,63931],\"mapped\",[20698]],[[63932,63932],\"mapped\",[23534]],[[63933,63933],\"mapped\",[23615]],[[63934,63934],\"mapped\",[26009]],[[63935,63935],\"mapped\",[27138]],[[63936,63936],\"mapped\",[29134]],[[63937,63937],\"mapped\",[30274]],[[63938,63938],\"mapped\",[34044]],[[63939,63939],\"mapped\",[36988]],[[63940,63940],\"mapped\",[40845]],[[63941,63941],\"mapped\",[26248]],[[63942,63942],\"mapped\",[38446]],[[63943,63943],\"mapped\",[21129]],[[63944,63944],\"mapped\",[26491]],[[63945,63945],\"mapped\",[26611]],[[63946,63946],\"mapped\",[27969]],[[63947,63947],\"mapped\",[28316]],[[63948,63948],\"mapped\",[29705]],[[63949,63949],\"mapped\",[30041]],[[63950,63950],\"mapped\",[30827]],[[63951,63951],\"mapped\",[32016]],[[63952,63952],\"mapped\",[39006]],[[63953,63953],\"mapped\",[20845]],[[63954,63954],\"mapped\",[25134]],[[63955,63955],\"mapped\",[38520]],[[63956,63956],\"mapped\",[20523]],[[63957,63957],\"mapped\",[23833]],[[63958,63958],\"mapped\",[28138]],[[63959,63959],\"mapped\",[36650]],[[63960,63960],\"mapped\",[24459]],[[63961,63961],\"mapped\",[24900]],[[63962,63962],\"mapped\",[26647]],[[63963,63963],\"mapped\",[29575]],[[63964,63964],\"mapped\",[38534]],[[63965,63965],\"mapped\",[21033]],[[63966,63966],\"mapped\",[21519]],[[63967,63967],\"mapped\",[23653]],[[63968,63968],\"mapped\",[26131]],[[63969,63969],\"mapped\",[26446]],[[63970,63970],\"mapped\",[26792]],[[63971,63971],\"mapped\",[27877]],[[63972,63972],\"mapped\",[29702]],[[63973,63973],\"mapped\",[30178]],[[63974,63974],\"mapped\",[32633]],[[63975,63975],\"mapped\",[35023]],[[63976,63976],\"mapped\",[35041]],[[63977,63977],\"mapped\",[37324]],[[63978,63978],\"mapped\",[38626]],[[63979,63979],\"mapped\",[21311]],[[63980,63980],\"mapped\",[28346]],[[63981,63981],\"mapped\",[21533]],[[63982,63982],\"mapped\",[29136]],[[63983,63983],\"mapped\",[29848]],[[63984,63984],\"mapped\",[34298]],[[63985,63985],\"mapped\",[38563]],[[63986,63986],\"mapped\",[40023]],[[63987,63987],\"mapped\",[40607]],[[63988,63988],\"mapped\",[26519]],[[63989,63989],\"mapped\",[28107]],[[63990,63990],\"mapped\",[33256]],[[63991,63991],\"mapped\",[31435]],[[63992,63992],\"mapped\",[31520]],[[63993,63993],\"mapped\",[31890]],[[63994,63994],\"mapped\",[29376]],[[63995,63995],\"mapped\",[28825]],[[63996,63996],\"mapped\",[35672]],[[63997,63997],\"mapped\",[20160]],[[63998,63998],\"mapped\",[33590]],[[63999,63999],\"mapped\",[21050]],[[64000,64000],\"mapped\",[20999]],[[64001,64001],\"mapped\",[24230]],[[64002,64002],\"mapped\",[25299]],[[64003,64003],\"mapped\",[31958]],[[64004,64004],\"mapped\",[23429]],[[64005,64005],\"mapped\",[27934]],[[64006,64006],\"mapped\",[26292]],[[64007,64007],\"mapped\",[36667]],[[64008,64008],\"mapped\",[34892]],[[64009,64009],\"mapped\",[38477]],[[64010,64010],\"mapped\",[35211]],[[64011,64011],\"mapped\",[24275]],[[64012,64012],\"mapped\",[20800]],[[64013,64013],\"mapped\",[21952]],[[64014,64015],\"valid\"],[[64016,64016],\"mapped\",[22618]],[[64017,64017],\"valid\"],[[64018,64018],\"mapped\",[26228]],[[64019,64020],\"valid\"],[[64021,64021],\"mapped\",[20958]],[[64022,64022],\"mapped\",[29482]],[[64023,64023],\"mapped\",[30410]],[[64024,64024],\"mapped\",[31036]],[[64025,64025],\"mapped\",[31070]],[[64026,64026],\"mapped\",[31077]],[[64027,64027],\"mapped\",[31119]],[[64028,64028],\"mapped\",[38742]],[[64029,64029],\"mapped\",[31934]],[[64030,64030],\"mapped\",[32701]],[[64031,64031],\"valid\"],[[64032,64032],\"mapped\",[34322]],[[64033,64033],\"valid\"],[[64034,64034],\"mapped\",[35576]],[[64035,64036],\"valid\"],[[64037,64037],\"mapped\",[36920]],[[64038,64038],\"mapped\",[37117]],[[64039,64041],\"valid\"],[[64042,64042],\"mapped\",[39151]],[[64043,64043],\"mapped\",[39164]],[[64044,64044],\"mapped\",[39208]],[[64045,64045],\"mapped\",[40372]],[[64046,64046],\"mapped\",[37086]],[[64047,64047],\"mapped\",[38583]],[[64048,64048],\"mapped\",[20398]],[[64049,64049],\"mapped\",[20711]],[[64050,64050],\"mapped\",[20813]],[[64051,64051],\"mapped\",[21193]],[[64052,64052],\"mapped\",[21220]],[[64053,64053],\"mapped\",[21329]],[[64054,64054],\"mapped\",[21917]],[[64055,64055],\"mapped\",[22022]],[[64056,64056],\"mapped\",[22120]],[[64057,64057],\"mapped\",[22592]],[[64058,64058],\"mapped\",[22696]],[[64059,64059],\"mapped\",[23652]],[[64060,64060],\"mapped\",[23662]],[[64061,64061],\"mapped\",[24724]],[[64062,64062],\"mapped\",[24936]],[[64063,64063],\"mapped\",[24974]],[[64064,64064],\"mapped\",[25074]],[[64065,64065],\"mapped\",[25935]],[[64066,64066],\"mapped\",[26082]],[[64067,64067],\"mapped\",[26257]],[[64068,64068],\"mapped\",[26757]],[[64069,64069],\"mapped\",[28023]],[[64070,64070],\"mapped\",[28186]],[[64071,64071],\"mapped\",[28450]],[[64072,64072],\"mapped\",[29038]],[[64073,64073],\"mapped\",[29227]],[[64074,64074],\"mapped\",[29730]],[[64075,64075],\"mapped\",[30865]],[[64076,64076],\"mapped\",[31038]],[[64077,64077],\"mapped\",[31049]],[[64078,64078],\"mapped\",[31048]],[[64079,64079],\"mapped\",[31056]],[[64080,64080],\"mapped\",[31062]],[[64081,64081],\"mapped\",[31069]],[[64082,64082],\"mapped\",[31117]],[[64083,64083],\"mapped\",[31118]],[[64084,64084],\"mapped\",[31296]],[[64085,64085],\"mapped\",[31361]],[[64086,64086],\"mapped\",[31680]],[[64087,64087],\"mapped\",[32244]],[[64088,64088],\"mapped\",[32265]],[[64089,64089],\"mapped\",[32321]],[[64090,64090],\"mapped\",[32626]],[[64091,64091],\"mapped\",[32773]],[[64092,64092],\"mapped\",[33261]],[[64093,64094],\"mapped\",[33401]],[[64095,64095],\"mapped\",[33879]],[[64096,64096],\"mapped\",[35088]],[[64097,64097],\"mapped\",[35222]],[[64098,64098],\"mapped\",[35585]],[[64099,64099],\"mapped\",[35641]],[[64100,64100],\"mapped\",[36051]],[[64101,64101],\"mapped\",[36104]],[[64102,64102],\"mapped\",[36790]],[[64103,64103],\"mapped\",[36920]],[[64104,64104],\"mapped\",[38627]],[[64105,64105],\"mapped\",[38911]],[[64106,64106],\"mapped\",[38971]],[[64107,64107],\"mapped\",[24693]],[[64108,64108],\"mapped\",[148206]],[[64109,64109],\"mapped\",[33304]],[[64110,64111],\"disallowed\"],[[64112,64112],\"mapped\",[20006]],[[64113,64113],\"mapped\",[20917]],[[64114,64114],\"mapped\",[20840]],[[64115,64115],\"mapped\",[20352]],[[64116,64116],\"mapped\",[20805]],[[64117,64117],\"mapped\",[20864]],[[64118,64118],\"mapped\",[21191]],[[64119,64119],\"mapped\",[21242]],[[64120,64120],\"mapped\",[21917]],[[64121,64121],\"mapped\",[21845]],[[64122,64122],\"mapped\",[21913]],[[64123,64123],\"mapped\",[21986]],[[64124,64124],\"mapped\",[22618]],[[64125,64125],\"mapped\",[22707]],[[64126,64126],\"mapped\",[22852]],[[64127,64127],\"mapped\",[22868]],[[64128,64128],\"mapped\",[23138]],[[64129,64129],\"mapped\",[23336]],[[64130,64130],\"mapped\",[24274]],[[64131,64131],\"mapped\",[24281]],[[64132,64132],\"mapped\",[24425]],[[64133,64133],\"mapped\",[24493]],[[64134,64134],\"mapped\",[24792]],[[64135,64135],\"mapped\",[24910]],[[64136,64136],\"mapped\",[24840]],[[64137,64137],\"mapped\",[24974]],[[64138,64138],\"mapped\",[24928]],[[64139,64139],\"mapped\",[25074]],[[64140,64140],\"mapped\",[25140]],[[64141,64141],\"mapped\",[25540]],[[64142,64142],\"mapped\",[25628]],[[64143,64143],\"mapped\",[25682]],[[64144,64144],\"mapped\",[25942]],[[64145,64145],\"mapped\",[26228]],[[64146,64146],\"mapped\",[26391]],[[64147,64147],\"mapped\",[26395]],[[64148,64148],\"mapped\",[26454]],[[64149,64149],\"mapped\",[27513]],[[64150,64150],\"mapped\",[27578]],[[64151,64151],\"mapped\",[27969]],[[64152,64152],\"mapped\",[28379]],[[64153,64153],\"mapped\",[28363]],[[64154,64154],\"mapped\",[28450]],[[64155,64155],\"mapped\",[28702]],[[64156,64156],\"mapped\",[29038]],[[64157,64157],\"mapped\",[30631]],[[64158,64158],\"mapped\",[29237]],[[64159,64159],\"mapped\",[29359]],[[64160,64160],\"mapped\",[29482]],[[64161,64161],\"mapped\",[29809]],[[64162,64162],\"mapped\",[29958]],[[64163,64163],\"mapped\",[30011]],[[64164,64164],\"mapped\",[30237]],[[64165,64165],\"mapped\",[30239]],[[64166,64166],\"mapped\",[30410]],[[64167,64167],\"mapped\",[30427]],[[64168,64168],\"mapped\",[30452]],[[64169,64169],\"mapped\",[30538]],[[64170,64170],\"mapped\",[30528]],[[64171,64171],\"mapped\",[30924]],[[64172,64172],\"mapped\",[31409]],[[64173,64173],\"mapped\",[31680]],[[64174,64174],\"mapped\",[31867]],[[64175,64175],\"mapped\",[32091]],[[64176,64176],\"mapped\",[32244]],[[64177,64177],\"mapped\",[32574]],[[64178,64178],\"mapped\",[32773]],[[64179,64179],\"mapped\",[33618]],[[64180,64180],\"mapped\",[33775]],[[64181,64181],\"mapped\",[34681]],[[64182,64182],\"mapped\",[35137]],[[64183,64183],\"mapped\",[35206]],[[64184,64184],\"mapped\",[35222]],[[64185,64185],\"mapped\",[35519]],[[64186,64186],\"mapped\",[35576]],[[64187,64187],\"mapped\",[35531]],[[64188,64188],\"mapped\",[35585]],[[64189,64189],\"mapped\",[35582]],[[64190,64190],\"mapped\",[35565]],[[64191,64191],\"mapped\",[35641]],[[64192,64192],\"mapped\",[35722]],[[64193,64193],\"mapped\",[36104]],[[64194,64194],\"mapped\",[36664]],[[64195,64195],\"mapped\",[36978]],[[64196,64196],\"mapped\",[37273]],[[64197,64197],\"mapped\",[37494]],[[64198,64198],\"mapped\",[38524]],[[64199,64199],\"mapped\",[38627]],[[64200,64200],\"mapped\",[38742]],[[64201,64201],\"mapped\",[38875]],[[64202,64202],\"mapped\",[38911]],[[64203,64203],\"mapped\",[38923]],[[64204,64204],\"mapped\",[38971]],[[64205,64205],\"mapped\",[39698]],[[64206,64206],\"mapped\",[40860]],[[64207,64207],\"mapped\",[141386]],[[64208,64208],\"mapped\",[141380]],[[64209,64209],\"mapped\",[144341]],[[64210,64210],\"mapped\",[15261]],[[64211,64211],\"mapped\",[16408]],[[64212,64212],\"mapped\",[16441]],[[64213,64213],\"mapped\",[152137]],[[64214,64214],\"mapped\",[154832]],[[64215,64215],\"mapped\",[163539]],[[64216,64216],\"mapped\",[40771]],[[64217,64217],\"mapped\",[40846]],[[64218,64255],\"disallowed\"],[[64256,64256],\"mapped\",[102,102]],[[64257,64257],\"mapped\",[102,105]],[[64258,64258],\"mapped\",[102,108]],[[64259,64259],\"mapped\",[102,102,105]],[[64260,64260],\"mapped\",[102,102,108]],[[64261,64262],\"mapped\",[115,116]],[[64263,64274],\"disallowed\"],[[64275,64275],\"mapped\",[1396,1398]],[[64276,64276],\"mapped\",[1396,1381]],[[64277,64277],\"mapped\",[1396,1387]],[[64278,64278],\"mapped\",[1406,1398]],[[64279,64279],\"mapped\",[1396,1389]],[[64280,64284],\"disallowed\"],[[64285,64285],\"mapped\",[1497,1460]],[[64286,64286],\"valid\"],[[64287,64287],\"mapped\",[1522,1463]],[[64288,64288],\"mapped\",[1506]],[[64289,64289],\"mapped\",[1488]],[[64290,64290],\"mapped\",[1491]],[[64291,64291],\"mapped\",[1492]],[[64292,64292],\"mapped\",[1499]],[[64293,64293],\"mapped\",[1500]],[[64294,64294],\"mapped\",[1501]],[[64295,64295],\"mapped\",[1512]],[[64296,64296],\"mapped\",[1514]],[[64297,64297],\"disallowed_STD3_mapped\",[43]],[[64298,64298],\"mapped\",[1513,1473]],[[64299,64299],\"mapped\",[1513,1474]],[[64300,64300],\"mapped\",[1513,1468,1473]],[[64301,64301],\"mapped\",[1513,1468,1474]],[[64302,64302],\"mapped\",[1488,1463]],[[64303,64303],\"mapped\",[1488,1464]],[[64304,64304],\"mapped\",[1488,1468]],[[64305,64305],\"mapped\",[1489,1468]],[[64306,64306],\"mapped\",[1490,1468]],[[64307,64307],\"mapped\",[1491,1468]],[[64308,64308],\"mapped\",[1492,1468]],[[64309,64309],\"mapped\",[1493,1468]],[[64310,64310],\"mapped\",[1494,1468]],[[64311,64311],\"disallowed\"],[[64312,64312],\"mapped\",[1496,1468]],[[64313,64313],\"mapped\",[1497,1468]],[[64314,64314],\"mapped\",[1498,1468]],[[64315,64315],\"mapped\",[1499,1468]],[[64316,64316],\"mapped\",[1500,1468]],[[64317,64317],\"disallowed\"],[[64318,64318],\"mapped\",[1502,1468]],[[64319,64319],\"disallowed\"],[[64320,64320],\"mapped\",[1504,1468]],[[64321,64321],\"mapped\",[1505,1468]],[[64322,64322],\"disallowed\"],[[64323,64323],\"mapped\",[1507,1468]],[[64324,64324],\"mapped\",[1508,1468]],[[64325,64325],\"disallowed\"],[[64326,64326],\"mapped\",[1510,1468]],[[64327,64327],\"mapped\",[1511,1468]],[[64328,64328],\"mapped\",[1512,1468]],[[64329,64329],\"mapped\",[1513,1468]],[[64330,64330],\"mapped\",[1514,1468]],[[64331,64331],\"mapped\",[1493,1465]],[[64332,64332],\"mapped\",[1489,1471]],[[64333,64333],\"mapped\",[1499,1471]],[[64334,64334],\"mapped\",[1508,1471]],[[64335,64335],\"mapped\",[1488,1500]],[[64336,64337],\"mapped\",[1649]],[[64338,64341],\"mapped\",[1659]],[[64342,64345],\"mapped\",[1662]],[[64346,64349],\"mapped\",[1664]],[[64350,64353],\"mapped\",[1658]],[[64354,64357],\"mapped\",[1663]],[[64358,64361],\"mapped\",[1657]],[[64362,64365],\"mapped\",[1700]],[[64366,64369],\"mapped\",[1702]],[[64370,64373],\"mapped\",[1668]],[[64374,64377],\"mapped\",[1667]],[[64378,64381],\"mapped\",[1670]],[[64382,64385],\"mapped\",[1671]],[[64386,64387],\"mapped\",[1677]],[[64388,64389],\"mapped\",[1676]],[[64390,64391],\"mapped\",[1678]],[[64392,64393],\"mapped\",[1672]],[[64394,64395],\"mapped\",[1688]],[[64396,64397],\"mapped\",[1681]],[[64398,64401],\"mapped\",[1705]],[[64402,64405],\"mapped\",[1711]],[[64406,64409],\"mapped\",[1715]],[[64410,64413],\"mapped\",[1713]],[[64414,64415],\"mapped\",[1722]],[[64416,64419],\"mapped\",[1723]],[[64420,64421],\"mapped\",[1728]],[[64422,64425],\"mapped\",[1729]],[[64426,64429],\"mapped\",[1726]],[[64430,64431],\"mapped\",[1746]],[[64432,64433],\"mapped\",[1747]],[[64434,64449],\"valid\",[],\"NV8\"],[[64450,64466],\"disallowed\"],[[64467,64470],\"mapped\",[1709]],[[64471,64472],\"mapped\",[1735]],[[64473,64474],\"mapped\",[1734]],[[64475,64476],\"mapped\",[1736]],[[64477,64477],\"mapped\",[1735,1652]],[[64478,64479],\"mapped\",[1739]],[[64480,64481],\"mapped\",[1733]],[[64482,64483],\"mapped\",[1737]],[[64484,64487],\"mapped\",[1744]],[[64488,64489],\"mapped\",[1609]],[[64490,64491],\"mapped\",[1574,1575]],[[64492,64493],\"mapped\",[1574,1749]],[[64494,64495],\"mapped\",[1574,1608]],[[64496,64497],\"mapped\",[1574,1735]],[[64498,64499],\"mapped\",[1574,1734]],[[64500,64501],\"mapped\",[1574,1736]],[[64502,64504],\"mapped\",[1574,1744]],[[64505,64507],\"mapped\",[1574,1609]],[[64508,64511],\"mapped\",[1740]],[[64512,64512],\"mapped\",[1574,1580]],[[64513,64513],\"mapped\",[1574,1581]],[[64514,64514],\"mapped\",[1574,1605]],[[64515,64515],\"mapped\",[1574,1609]],[[64516,64516],\"mapped\",[1574,1610]],[[64517,64517],\"mapped\",[1576,1580]],[[64518,64518],\"mapped\",[1576,1581]],[[64519,64519],\"mapped\",[1576,1582]],[[64520,64520],\"mapped\",[1576,1605]],[[64521,64521],\"mapped\",[1576,1609]],[[64522,64522],\"mapped\",[1576,1610]],[[64523,64523],\"mapped\",[1578,1580]],[[64524,64524],\"mapped\",[1578,1581]],[[64525,64525],\"mapped\",[1578,1582]],[[64526,64526],\"mapped\",[1578,1605]],[[64527,64527],\"mapped\",[1578,1609]],[[64528,64528],\"mapped\",[1578,1610]],[[64529,64529],\"mapped\",[1579,1580]],[[64530,64530],\"mapped\",[1579,1605]],[[64531,64531],\"mapped\",[1579,1609]],[[64532,64532],\"mapped\",[1579,1610]],[[64533,64533],\"mapped\",[1580,1581]],[[64534,64534],\"mapped\",[1580,1605]],[[64535,64535],\"mapped\",[1581,1580]],[[64536,64536],\"mapped\",[1581,1605]],[[64537,64537],\"mapped\",[1582,1580]],[[64538,64538],\"mapped\",[1582,1581]],[[64539,64539],\"mapped\",[1582,1605]],[[64540,64540],\"mapped\",[1587,1580]],[[64541,64541],\"mapped\",[1587,1581]],[[64542,64542],\"mapped\",[1587,1582]],[[64543,64543],\"mapped\",[1587,1605]],[[64544,64544],\"mapped\",[1589,1581]],[[64545,64545],\"mapped\",[1589,1605]],[[64546,64546],\"mapped\",[1590,1580]],[[64547,64547],\"mapped\",[1590,1581]],[[64548,64548],\"mapped\",[1590,1582]],[[64549,64549],\"mapped\",[1590,1605]],[[64550,64550],\"mapped\",[1591,1581]],[[64551,64551],\"mapped\",[1591,1605]],[[64552,64552],\"mapped\",[1592,1605]],[[64553,64553],\"mapped\",[1593,1580]],[[64554,64554],\"mapped\",[1593,1605]],[[64555,64555],\"mapped\",[1594,1580]],[[64556,64556],\"mapped\",[1594,1605]],[[64557,64557],\"mapped\",[1601,1580]],[[64558,64558],\"mapped\",[1601,1581]],[[64559,64559],\"mapped\",[1601,1582]],[[64560,64560],\"mapped\",[1601,1605]],[[64561,64561],\"mapped\",[1601,1609]],[[64562,64562],\"mapped\",[1601,1610]],[[64563,64563],\"mapped\",[1602,1581]],[[64564,64564],\"mapped\",[1602,1605]],[[64565,64565],\"mapped\",[1602,1609]],[[64566,64566],\"mapped\",[1602,1610]],[[64567,64567],\"mapped\",[1603,1575]],[[64568,64568],\"mapped\",[1603,1580]],[[64569,64569],\"mapped\",[1603,1581]],[[64570,64570],\"mapped\",[1603,1582]],[[64571,64571],\"mapped\",[1603,1604]],[[64572,64572],\"mapped\",[1603,1605]],[[64573,64573],\"mapped\",[1603,1609]],[[64574,64574],\"mapped\",[1603,1610]],[[64575,64575],\"mapped\",[1604,1580]],[[64576,64576],\"mapped\",[1604,1581]],[[64577,64577],\"mapped\",[1604,1582]],[[64578,64578],\"mapped\",[1604,1605]],[[64579,64579],\"mapped\",[1604,1609]],[[64580,64580],\"mapped\",[1604,1610]],[[64581,64581],\"mapped\",[1605,1580]],[[64582,64582],\"mapped\",[1605,1581]],[[64583,64583],\"mapped\",[1605,1582]],[[64584,64584],\"mapped\",[1605,1605]],[[64585,64585],\"mapped\",[1605,1609]],[[64586,64586],\"mapped\",[1605,1610]],[[64587,64587],\"mapped\",[1606,1580]],[[64588,64588],\"mapped\",[1606,1581]],[[64589,64589],\"mapped\",[1606,1582]],[[64590,64590],\"mapped\",[1606,1605]],[[64591,64591],\"mapped\",[1606,1609]],[[64592,64592],\"mapped\",[1606,1610]],[[64593,64593],\"mapped\",[1607,1580]],[[64594,64594],\"mapped\",[1607,1605]],[[64595,64595],\"mapped\",[1607,1609]],[[64596,64596],\"mapped\",[1607,1610]],[[64597,64597],\"mapped\",[1610,1580]],[[64598,64598],\"mapped\",[1610,1581]],[[64599,64599],\"mapped\",[1610,1582]],[[64600,64600],\"mapped\",[1610,1605]],[[64601,64601],\"mapped\",[1610,1609]],[[64602,64602],\"mapped\",[1610,1610]],[[64603,64603],\"mapped\",[1584,1648]],[[64604,64604],\"mapped\",[1585,1648]],[[64605,64605],\"mapped\",[1609,1648]],[[64606,64606],\"disallowed_STD3_mapped\",[32,1612,1617]],[[64607,64607],\"disallowed_STD3_mapped\",[32,1613,1617]],[[64608,64608],\"disallowed_STD3_mapped\",[32,1614,1617]],[[64609,64609],\"disallowed_STD3_mapped\",[32,1615,1617]],[[64610,64610],\"disallowed_STD3_mapped\",[32,1616,1617]],[[64611,64611],\"disallowed_STD3_mapped\",[32,1617,1648]],[[64612,64612],\"mapped\",[1574,1585]],[[64613,64613],\"mapped\",[1574,1586]],[[64614,64614],\"mapped\",[1574,1605]],[[64615,64615],\"mapped\",[1574,1606]],[[64616,64616],\"mapped\",[1574,1609]],[[64617,64617],\"mapped\",[1574,1610]],[[64618,64618],\"mapped\",[1576,1585]],[[64619,64619],\"mapped\",[1576,1586]],[[64620,64620],\"mapped\",[1576,1605]],[[64621,64621],\"mapped\",[1576,1606]],[[64622,64622],\"mapped\",[1576,1609]],[[64623,64623],\"mapped\",[1576,1610]],[[64624,64624],\"mapped\",[1578,1585]],[[64625,64625],\"mapped\",[1578,1586]],[[64626,64626],\"mapped\",[1578,1605]],[[64627,64627],\"mapped\",[1578,1606]],[[64628,64628],\"mapped\",[1578,1609]],[[64629,64629],\"mapped\",[1578,1610]],[[64630,64630],\"mapped\",[1579,1585]],[[64631,64631],\"mapped\",[1579,1586]],[[64632,64632],\"mapped\",[1579,1605]],[[64633,64633],\"mapped\",[1579,1606]],[[64634,64634],\"mapped\",[1579,1609]],[[64635,64635],\"mapped\",[1579,1610]],[[64636,64636],\"mapped\",[1601,1609]],[[64637,64637],\"mapped\",[1601,1610]],[[64638,64638],\"mapped\",[1602,1609]],[[64639,64639],\"mapped\",[1602,1610]],[[64640,64640],\"mapped\",[1603,1575]],[[64641,64641],\"mapped\",[1603,1604]],[[64642,64642],\"mapped\",[1603,1605]],[[64643,64643],\"mapped\",[1603,1609]],[[64644,64644],\"mapped\",[1603,1610]],[[64645,64645],\"mapped\",[1604,1605]],[[64646,64646],\"mapped\",[1604,1609]],[[64647,64647],\"mapped\",[1604,1610]],[[64648,64648],\"mapped\",[1605,1575]],[[64649,64649],\"mapped\",[1605,1605]],[[64650,64650],\"mapped\",[1606,1585]],[[64651,64651],\"mapped\",[1606,1586]],[[64652,64652],\"mapped\",[1606,1605]],[[64653,64653],\"mapped\",[1606,1606]],[[64654,64654],\"mapped\",[1606,1609]],[[64655,64655],\"mapped\",[1606,1610]],[[64656,64656],\"mapped\",[1609,1648]],[[64657,64657],\"mapped\",[1610,1585]],[[64658,64658],\"mapped\",[1610,1586]],[[64659,64659],\"mapped\",[1610,1605]],[[64660,64660],\"mapped\",[1610,1606]],[[64661,64661],\"mapped\",[1610,1609]],[[64662,64662],\"mapped\",[1610,1610]],[[64663,64663],\"mapped\",[1574,1580]],[[64664,64664],\"mapped\",[1574,1581]],[[64665,64665],\"mapped\",[1574,1582]],[[64666,64666],\"mapped\",[1574,1605]],[[64667,64667],\"mapped\",[1574,1607]],[[64668,64668],\"mapped\",[1576,1580]],[[64669,64669],\"mapped\",[1576,1581]],[[64670,64670],\"mapped\",[1576,1582]],[[64671,64671],\"mapped\",[1576,1605]],[[64672,64672],\"mapped\",[1576,1607]],[[64673,64673],\"mapped\",[1578,1580]],[[64674,64674],\"mapped\",[1578,1581]],[[64675,64675],\"mapped\",[1578,1582]],[[64676,64676],\"mapped\",[1578,1605]],[[64677,64677],\"mapped\",[1578,1607]],[[64678,64678],\"mapped\",[1579,1605]],[[64679,64679],\"mapped\",[1580,1581]],[[64680,64680],\"mapped\",[1580,1605]],[[64681,64681],\"mapped\",[1581,1580]],[[64682,64682],\"mapped\",[1581,1605]],[[64683,64683],\"mapped\",[1582,1580]],[[64684,64684],\"mapped\",[1582,1605]],[[64685,64685],\"mapped\",[1587,1580]],[[64686,64686],\"mapped\",[1587,1581]],[[64687,64687],\"mapped\",[1587,1582]],[[64688,64688],\"mapped\",[1587,1605]],[[64689,64689],\"mapped\",[1589,1581]],[[64690,64690],\"mapped\",[1589,1582]],[[64691,64691],\"mapped\",[1589,1605]],[[64692,64692],\"mapped\",[1590,1580]],[[64693,64693],\"mapped\",[1590,1581]],[[64694,64694],\"mapped\",[1590,1582]],[[64695,64695],\"mapped\",[1590,1605]],[[64696,64696],\"mapped\",[1591,1581]],[[64697,64697],\"mapped\",[1592,1605]],[[64698,64698],\"mapped\",[1593,1580]],[[64699,64699],\"mapped\",[1593,1605]],[[64700,64700],\"mapped\",[1594,1580]],[[64701,64701],\"mapped\",[1594,1605]],[[64702,64702],\"mapped\",[1601,1580]],[[64703,64703],\"mapped\",[1601,1581]],[[64704,64704],\"mapped\",[1601,1582]],[[64705,64705],\"mapped\",[1601,1605]],[[64706,64706],\"mapped\",[1602,1581]],[[64707,64707],\"mapped\",[1602,1605]],[[64708,64708],\"mapped\",[1603,1580]],[[64709,64709],\"mapped\",[1603,1581]],[[64710,64710],\"mapped\",[1603,1582]],[[64711,64711],\"mapped\",[1603,1604]],[[64712,64712],\"mapped\",[1603,1605]],[[64713,64713],\"mapped\",[1604,1580]],[[64714,64714],\"mapped\",[1604,1581]],[[64715,64715],\"mapped\",[1604,1582]],[[64716,64716],\"mapped\",[1604,1605]],[[64717,64717],\"mapped\",[1604,1607]],[[64718,64718],\"mapped\",[1605,1580]],[[64719,64719],\"mapped\",[1605,1581]],[[64720,64720],\"mapped\",[1605,1582]],[[64721,64721],\"mapped\",[1605,1605]],[[64722,64722],\"mapped\",[1606,1580]],[[64723,64723],\"mapped\",[1606,1581]],[[64724,64724],\"mapped\",[1606,1582]],[[64725,64725],\"mapped\",[1606,1605]],[[64726,64726],\"mapped\",[1606,1607]],[[64727,64727],\"mapped\",[1607,1580]],[[64728,64728],\"mapped\",[1607,1605]],[[64729,64729],\"mapped\",[1607,1648]],[[64730,64730],\"mapped\",[1610,1580]],[[64731,64731],\"mapped\",[1610,1581]],[[64732,64732],\"mapped\",[1610,1582]],[[64733,64733],\"mapped\",[1610,1605]],[[64734,64734],\"mapped\",[1610,1607]],[[64735,64735],\"mapped\",[1574,1605]],[[64736,64736],\"mapped\",[1574,1607]],[[64737,64737],\"mapped\",[1576,1605]],[[64738,64738],\"mapped\",[1576,1607]],[[64739,64739],\"mapped\",[1578,1605]],[[64740,64740],\"mapped\",[1578,1607]],[[64741,64741],\"mapped\",[1579,1605]],[[64742,64742],\"mapped\",[1579,1607]],[[64743,64743],\"mapped\",[1587,1605]],[[64744,64744],\"mapped\",[1587,1607]],[[64745,64745],\"mapped\",[1588,1605]],[[64746,64746],\"mapped\",[1588,1607]],[[64747,64747],\"mapped\",[1603,1604]],[[64748,64748],\"mapped\",[1603,1605]],[[64749,64749],\"mapped\",[1604,1605]],[[64750,64750],\"mapped\",[1606,1605]],[[64751,64751],\"mapped\",[1606,1607]],[[64752,64752],\"mapped\",[1610,1605]],[[64753,64753],\"mapped\",[1610,1607]],[[64754,64754],\"mapped\",[1600,1614,1617]],[[64755,64755],\"mapped\",[1600,1615,1617]],[[64756,64756],\"mapped\",[1600,1616,1617]],[[64757,64757],\"mapped\",[1591,1609]],[[64758,64758],\"mapped\",[1591,1610]],[[64759,64759],\"mapped\",[1593,1609]],[[64760,64760],\"mapped\",[1593,1610]],[[64761,64761],\"mapped\",[1594,1609]],[[64762,64762],\"mapped\",[1594,1610]],[[64763,64763],\"mapped\",[1587,1609]],[[64764,64764],\"mapped\",[1587,1610]],[[64765,64765],\"mapped\",[1588,1609]],[[64766,64766],\"mapped\",[1588,1610]],[[64767,64767],\"mapped\",[1581,1609]],[[64768,64768],\"mapped\",[1581,1610]],[[64769,64769],\"mapped\",[1580,1609]],[[64770,64770],\"mapped\",[1580,1610]],[[64771,64771],\"mapped\",[1582,1609]],[[64772,64772],\"mapped\",[1582,1610]],[[64773,64773],\"mapped\",[1589,1609]],[[64774,64774],\"mapped\",[1589,1610]],[[64775,64775],\"mapped\",[1590,1609]],[[64776,64776],\"mapped\",[1590,1610]],[[64777,64777],\"mapped\",[1588,1580]],[[64778,64778],\"mapped\",[1588,1581]],[[64779,64779],\"mapped\",[1588,1582]],[[64780,64780],\"mapped\",[1588,1605]],[[64781,64781],\"mapped\",[1588,1585]],[[64782,64782],\"mapped\",[1587,1585]],[[64783,64783],\"mapped\",[1589,1585]],[[64784,64784],\"mapped\",[1590,1585]],[[64785,64785],\"mapped\",[1591,1609]],[[64786,64786],\"mapped\",[1591,1610]],[[64787,64787],\"mapped\",[1593,1609]],[[64788,64788],\"mapped\",[1593,1610]],[[64789,64789],\"mapped\",[1594,1609]],[[64790,64790],\"mapped\",[1594,1610]],[[64791,64791],\"mapped\",[1587,1609]],[[64792,64792],\"mapped\",[1587,1610]],[[64793,64793],\"mapped\",[1588,1609]],[[64794,64794],\"mapped\",[1588,1610]],[[64795,64795],\"mapped\",[1581,1609]],[[64796,64796],\"mapped\",[1581,1610]],[[64797,64797],\"mapped\",[1580,1609]],[[64798,64798],\"mapped\",[1580,1610]],[[64799,64799],\"mapped\",[1582,1609]],[[64800,64800],\"mapped\",[1582,1610]],[[64801,64801],\"mapped\",[1589,1609]],[[64802,64802],\"mapped\",[1589,1610]],[[64803,64803],\"mapped\",[1590,1609]],[[64804,64804],\"mapped\",[1590,1610]],[[64805,64805],\"mapped\",[1588,1580]],[[64806,64806],\"mapped\",[1588,1581]],[[64807,64807],\"mapped\",[1588,1582]],[[64808,64808],\"mapped\",[1588,1605]],[[64809,64809],\"mapped\",[1588,1585]],[[64810,64810],\"mapped\",[1587,1585]],[[64811,64811],\"mapped\",[1589,1585]],[[64812,64812],\"mapped\",[1590,1585]],[[64813,64813],\"mapped\",[1588,1580]],[[64814,64814],\"mapped\",[1588,1581]],[[64815,64815],\"mapped\",[1588,1582]],[[64816,64816],\"mapped\",[1588,1605]],[[64817,64817],\"mapped\",[1587,1607]],[[64818,64818],\"mapped\",[1588,1607]],[[64819,64819],\"mapped\",[1591,1605]],[[64820,64820],\"mapped\",[1587,1580]],[[64821,64821],\"mapped\",[1587,1581]],[[64822,64822],\"mapped\",[1587,1582]],[[64823,64823],\"mapped\",[1588,1580]],[[64824,64824],\"mapped\",[1588,1581]],[[64825,64825],\"mapped\",[1588,1582]],[[64826,64826],\"mapped\",[1591,1605]],[[64827,64827],\"mapped\",[1592,1605]],[[64828,64829],\"mapped\",[1575,1611]],[[64830,64831],\"valid\",[],\"NV8\"],[[64832,64847],\"disallowed\"],[[64848,64848],\"mapped\",[1578,1580,1605]],[[64849,64850],\"mapped\",[1578,1581,1580]],[[64851,64851],\"mapped\",[1578,1581,1605]],[[64852,64852],\"mapped\",[1578,1582,1605]],[[64853,64853],\"mapped\",[1578,1605,1580]],[[64854,64854],\"mapped\",[1578,1605,1581]],[[64855,64855],\"mapped\",[1578,1605,1582]],[[64856,64857],\"mapped\",[1580,1605,1581]],[[64858,64858],\"mapped\",[1581,1605,1610]],[[64859,64859],\"mapped\",[1581,1605,1609]],[[64860,64860],\"mapped\",[1587,1581,1580]],[[64861,64861],\"mapped\",[1587,1580,1581]],[[64862,64862],\"mapped\",[1587,1580,1609]],[[64863,64864],\"mapped\",[1587,1605,1581]],[[64865,64865],\"mapped\",[1587,1605,1580]],[[64866,64867],\"mapped\",[1587,1605,1605]],[[64868,64869],\"mapped\",[1589,1581,1581]],[[64870,64870],\"mapped\",[1589,1605,1605]],[[64871,64872],\"mapped\",[1588,1581,1605]],[[64873,64873],\"mapped\",[1588,1580,1610]],[[64874,64875],\"mapped\",[1588,1605,1582]],[[64876,64877],\"mapped\",[1588,1605,1605]],[[64878,64878],\"mapped\",[1590,1581,1609]],[[64879,64880],\"mapped\",[1590,1582,1605]],[[64881,64882],\"mapped\",[1591,1605,1581]],[[64883,64883],\"mapped\",[1591,1605,1605]],[[64884,64884],\"mapped\",[1591,1605,1610]],[[64885,64885],\"mapped\",[1593,1580,1605]],[[64886,64887],\"mapped\",[1593,1605,1605]],[[64888,64888],\"mapped\",[1593,1605,1609]],[[64889,64889],\"mapped\",[1594,1605,1605]],[[64890,64890],\"mapped\",[1594,1605,1610]],[[64891,64891],\"mapped\",[1594,1605,1609]],[[64892,64893],\"mapped\",[1601,1582,1605]],[[64894,64894],\"mapped\",[1602,1605,1581]],[[64895,64895],\"mapped\",[1602,1605,1605]],[[64896,64896],\"mapped\",[1604,1581,1605]],[[64897,64897],\"mapped\",[1604,1581,1610]],[[64898,64898],\"mapped\",[1604,1581,1609]],[[64899,64900],\"mapped\",[1604,1580,1580]],[[64901,64902],\"mapped\",[1604,1582,1605]],[[64903,64904],\"mapped\",[1604,1605,1581]],[[64905,64905],\"mapped\",[1605,1581,1580]],[[64906,64906],\"mapped\",[1605,1581,1605]],[[64907,64907],\"mapped\",[1605,1581,1610]],[[64908,64908],\"mapped\",[1605,1580,1581]],[[64909,64909],\"mapped\",[1605,1580,1605]],[[64910,64910],\"mapped\",[1605,1582,1580]],[[64911,64911],\"mapped\",[1605,1582,1605]],[[64912,64913],\"disallowed\"],[[64914,64914],\"mapped\",[1605,1580,1582]],[[64915,64915],\"mapped\",[1607,1605,1580]],[[64916,64916],\"mapped\",[1607,1605,1605]],[[64917,64917],\"mapped\",[1606,1581,1605]],[[64918,64918],\"mapped\",[1606,1581,1609]],[[64919,64920],\"mapped\",[1606,1580,1605]],[[64921,64921],\"mapped\",[1606,1580,1609]],[[64922,64922],\"mapped\",[1606,1605,1610]],[[64923,64923],\"mapped\",[1606,1605,1609]],[[64924,64925],\"mapped\",[1610,1605,1605]],[[64926,64926],\"mapped\",[1576,1582,1610]],[[64927,64927],\"mapped\",[1578,1580,1610]],[[64928,64928],\"mapped\",[1578,1580,1609]],[[64929,64929],\"mapped\",[1578,1582,1610]],[[64930,64930],\"mapped\",[1578,1582,1609]],[[64931,64931],\"mapped\",[1578,1605,1610]],[[64932,64932],\"mapped\",[1578,1605,1609]],[[64933,64933],\"mapped\",[1580,1605,1610]],[[64934,64934],\"mapped\",[1580,1581,1609]],[[64935,64935],\"mapped\",[1580,1605,1609]],[[64936,64936],\"mapped\",[1587,1582,1609]],[[64937,64937],\"mapped\",[1589,1581,1610]],[[64938,64938],\"mapped\",[1588,1581,1610]],[[64939,64939],\"mapped\",[1590,1581,1610]],[[64940,64940],\"mapped\",[1604,1580,1610]],[[64941,64941],\"mapped\",[1604,1605,1610]],[[64942,64942],\"mapped\",[1610,1581,1610]],[[64943,64943],\"mapped\",[1610,1580,1610]],[[64944,64944],\"mapped\",[1610,1605,1610]],[[64945,64945],\"mapped\",[1605,1605,1610]],[[64946,64946],\"mapped\",[1602,1605,1610]],[[64947,64947],\"mapped\",[1606,1581,1610]],[[64948,64948],\"mapped\",[1602,1605,1581]],[[64949,64949],\"mapped\",[1604,1581,1605]],[[64950,64950],\"mapped\",[1593,1605,1610]],[[64951,64951],\"mapped\",[1603,1605,1610]],[[64952,64952],\"mapped\",[1606,1580,1581]],[[64953,64953],\"mapped\",[1605,1582,1610]],[[64954,64954],\"mapped\",[1604,1580,1605]],[[64955,64955],\"mapped\",[1603,1605,1605]],[[64956,64956],\"mapped\",[1604,1580,1605]],[[64957,64957],\"mapped\",[1606,1580,1581]],[[64958,64958],\"mapped\",[1580,1581,1610]],[[64959,64959],\"mapped\",[1581,1580,1610]],[[64960,64960],\"mapped\",[1605,1580,1610]],[[64961,64961],\"mapped\",[1601,1605,1610]],[[64962,64962],\"mapped\",[1576,1581,1610]],[[64963,64963],\"mapped\",[1603,1605,1605]],[[64964,64964],\"mapped\",[1593,1580,1605]],[[64965,64965],\"mapped\",[1589,1605,1605]],[[64966,64966],\"mapped\",[1587,1582,1610]],[[64967,64967],\"mapped\",[1606,1580,1610]],[[64968,64975],\"disallowed\"],[[64976,65007],\"disallowed\"],[[65008,65008],\"mapped\",[1589,1604,1746]],[[65009,65009],\"mapped\",[1602,1604,1746]],[[65010,65010],\"mapped\",[1575,1604,1604,1607]],[[65011,65011],\"mapped\",[1575,1603,1576,1585]],[[65012,65012],\"mapped\",[1605,1581,1605,1583]],[[65013,65013],\"mapped\",[1589,1604,1593,1605]],[[65014,65014],\"mapped\",[1585,1587,1608,1604]],[[65015,65015],\"mapped\",[1593,1604,1610,1607]],[[65016,65016],\"mapped\",[1608,1587,1604,1605]],[[65017,65017],\"mapped\",[1589,1604,1609]],[[65018,65018],\"disallowed_STD3_mapped\",[1589,1604,1609,32,1575,1604,1604,1607,32,1593,1604,1610,1607,32,1608,1587,1604,1605]],[[65019,65019],\"disallowed_STD3_mapped\",[1580,1604,32,1580,1604,1575,1604,1607]],[[65020,65020],\"mapped\",[1585,1740,1575,1604]],[[65021,65021],\"valid\",[],\"NV8\"],[[65022,65023],\"disallowed\"],[[65024,65039],\"ignored\"],[[65040,65040],\"disallowed_STD3_mapped\",[44]],[[65041,65041],\"mapped\",[12289]],[[65042,65042],\"disallowed\"],[[65043,65043],\"disallowed_STD3_mapped\",[58]],[[65044,65044],\"disallowed_STD3_mapped\",[59]],[[65045,65045],\"disallowed_STD3_mapped\",[33]],[[65046,65046],\"disallowed_STD3_mapped\",[63]],[[65047,65047],\"mapped\",[12310]],[[65048,65048],\"mapped\",[12311]],[[65049,65049],\"disallowed\"],[[65050,65055],\"disallowed\"],[[65056,65059],\"valid\"],[[65060,65062],\"valid\"],[[65063,65069],\"valid\"],[[65070,65071],\"valid\"],[[65072,65072],\"disallowed\"],[[65073,65073],\"mapped\",[8212]],[[65074,65074],\"mapped\",[8211]],[[65075,65076],\"disallowed_STD3_mapped\",[95]],[[65077,65077],\"disallowed_STD3_mapped\",[40]],[[65078,65078],\"disallowed_STD3_mapped\",[41]],[[65079,65079],\"disallowed_STD3_mapped\",[123]],[[65080,65080],\"disallowed_STD3_mapped\",[125]],[[65081,65081],\"mapped\",[12308]],[[65082,65082],\"mapped\",[12309]],[[65083,65083],\"mapped\",[12304]],[[65084,65084],\"mapped\",[12305]],[[65085,65085],\"mapped\",[12298]],[[65086,65086],\"mapped\",[12299]],[[65087,65087],\"mapped\",[12296]],[[65088,65088],\"mapped\",[12297]],[[65089,65089],\"mapped\",[12300]],[[65090,65090],\"mapped\",[12301]],[[65091,65091],\"mapped\",[12302]],[[65092,65092],\"mapped\",[12303]],[[65093,65094],\"valid\",[],\"NV8\"],[[65095,65095],\"disallowed_STD3_mapped\",[91]],[[65096,65096],\"disallowed_STD3_mapped\",[93]],[[65097,65100],\"disallowed_STD3_mapped\",[32,773]],[[65101,65103],\"disallowed_STD3_mapped\",[95]],[[65104,65104],\"disallowed_STD3_mapped\",[44]],[[65105,65105],\"mapped\",[12289]],[[65106,65106],\"disallowed\"],[[65107,65107],\"disallowed\"],[[65108,65108],\"disallowed_STD3_mapped\",[59]],[[65109,65109],\"disallowed_STD3_mapped\",[58]],[[65110,65110],\"disallowed_STD3_mapped\",[63]],[[65111,65111],\"disallowed_STD3_mapped\",[33]],[[65112,65112],\"mapped\",[8212]],[[65113,65113],\"disallowed_STD3_mapped\",[40]],[[65114,65114],\"disallowed_STD3_mapped\",[41]],[[65115,65115],\"disallowed_STD3_mapped\",[123]],[[65116,65116],\"disallowed_STD3_mapped\",[125]],[[65117,65117],\"mapped\",[12308]],[[65118,65118],\"mapped\",[12309]],[[65119,65119],\"disallowed_STD3_mapped\",[35]],[[65120,65120],\"disallowed_STD3_mapped\",[38]],[[65121,65121],\"disallowed_STD3_mapped\",[42]],[[65122,65122],\"disallowed_STD3_mapped\",[43]],[[65123,65123],\"mapped\",[45]],[[65124,65124],\"disallowed_STD3_mapped\",[60]],[[65125,65125],\"disallowed_STD3_mapped\",[62]],[[65126,65126],\"disallowed_STD3_mapped\",[61]],[[65127,65127],\"disallowed\"],[[65128,65128],\"disallowed_STD3_mapped\",[92]],[[65129,65129],\"disallowed_STD3_mapped\",[36]],[[65130,65130],\"disallowed_STD3_mapped\",[37]],[[65131,65131],\"disallowed_STD3_mapped\",[64]],[[65132,65135],\"disallowed\"],[[65136,65136],\"disallowed_STD3_mapped\",[32,1611]],[[65137,65137],\"mapped\",[1600,1611]],[[65138,65138],\"disallowed_STD3_mapped\",[32,1612]],[[65139,65139],\"valid\"],[[65140,65140],\"disallowed_STD3_mapped\",[32,1613]],[[65141,65141],\"disallowed\"],[[65142,65142],\"disallowed_STD3_mapped\",[32,1614]],[[65143,65143],\"mapped\",[1600,1614]],[[65144,65144],\"disallowed_STD3_mapped\",[32,1615]],[[65145,65145],\"mapped\",[1600,1615]],[[65146,65146],\"disallowed_STD3_mapped\",[32,1616]],[[65147,65147],\"mapped\",[1600,1616]],[[65148,65148],\"disallowed_STD3_mapped\",[32,1617]],[[65149,65149],\"mapped\",[1600,1617]],[[65150,65150],\"disallowed_STD3_mapped\",[32,1618]],[[65151,65151],\"mapped\",[1600,1618]],[[65152,65152],\"mapped\",[1569]],[[65153,65154],\"mapped\",[1570]],[[65155,65156],\"mapped\",[1571]],[[65157,65158],\"mapped\",[1572]],[[65159,65160],\"mapped\",[1573]],[[65161,65164],\"mapped\",[1574]],[[65165,65166],\"mapped\",[1575]],[[65167,65170],\"mapped\",[1576]],[[65171,65172],\"mapped\",[1577]],[[65173,65176],\"mapped\",[1578]],[[65177,65180],\"mapped\",[1579]],[[65181,65184],\"mapped\",[1580]],[[65185,65188],\"mapped\",[1581]],[[65189,65192],\"mapped\",[1582]],[[65193,65194],\"mapped\",[1583]],[[65195,65196],\"mapped\",[1584]],[[65197,65198],\"mapped\",[1585]],[[65199,65200],\"mapped\",[1586]],[[65201,65204],\"mapped\",[1587]],[[65205,65208],\"mapped\",[1588]],[[65209,65212],\"mapped\",[1589]],[[65213,65216],\"mapped\",[1590]],[[65217,65220],\"mapped\",[1591]],[[65221,65224],\"mapped\",[1592]],[[65225,65228],\"mapped\",[1593]],[[65229,65232],\"mapped\",[1594]],[[65233,65236],\"mapped\",[1601]],[[65237,65240],\"mapped\",[1602]],[[65241,65244],\"mapped\",[1603]],[[65245,65248],\"mapped\",[1604]],[[65249,65252],\"mapped\",[1605]],[[65253,65256],\"mapped\",[1606]],[[65257,65260],\"mapped\",[1607]],[[65261,65262],\"mapped\",[1608]],[[65263,65264],\"mapped\",[1609]],[[65265,65268],\"mapped\",[1610]],[[65269,65270],\"mapped\",[1604,1570]],[[65271,65272],\"mapped\",[1604,1571]],[[65273,65274],\"mapped\",[1604,1573]],[[65275,65276],\"mapped\",[1604,1575]],[[65277,65278],\"disallowed\"],[[65279,65279],\"ignored\"],[[65280,65280],\"disallowed\"],[[65281,65281],\"disallowed_STD3_mapped\",[33]],[[65282,65282],\"disallowed_STD3_mapped\",[34]],[[65283,65283],\"disallowed_STD3_mapped\",[35]],[[65284,65284],\"disallowed_STD3_mapped\",[36]],[[65285,65285],\"disallowed_STD3_mapped\",[37]],[[65286,65286],\"disallowed_STD3_mapped\",[38]],[[65287,65287],\"disallowed_STD3_mapped\",[39]],[[65288,65288],\"disallowed_STD3_mapped\",[40]],[[65289,65289],\"disallowed_STD3_mapped\",[41]],[[65290,65290],\"disallowed_STD3_mapped\",[42]],[[65291,65291],\"disallowed_STD3_mapped\",[43]],[[65292,65292],\"disallowed_STD3_mapped\",[44]],[[65293,65293],\"mapped\",[45]],[[65294,65294],\"mapped\",[46]],[[65295,65295],\"disallowed_STD3_mapped\",[47]],[[65296,65296],\"mapped\",[48]],[[65297,65297],\"mapped\",[49]],[[65298,65298],\"mapped\",[50]],[[65299,65299],\"mapped\",[51]],[[65300,65300],\"mapped\",[52]],[[65301,65301],\"mapped\",[53]],[[65302,65302],\"mapped\",[54]],[[65303,65303],\"mapped\",[55]],[[65304,65304],\"mapped\",[56]],[[65305,65305],\"mapped\",[57]],[[65306,65306],\"disallowed_STD3_mapped\",[58]],[[65307,65307],\"disallowed_STD3_mapped\",[59]],[[65308,65308],\"disallowed_STD3_mapped\",[60]],[[65309,65309],\"disallowed_STD3_mapped\",[61]],[[65310,65310],\"disallowed_STD3_mapped\",[62]],[[65311,65311],\"disallowed_STD3_mapped\",[63]],[[65312,65312],\"disallowed_STD3_mapped\",[64]],[[65313,65313],\"mapped\",[97]],[[65314,65314],\"mapped\",[98]],[[65315,65315],\"mapped\",[99]],[[65316,65316],\"mapped\",[100]],[[65317,65317],\"mapped\",[101]],[[65318,65318],\"mapped\",[102]],[[65319,65319],\"mapped\",[103]],[[65320,65320],\"mapped\",[104]],[[65321,65321],\"mapped\",[105]],[[65322,65322],\"mapped\",[106]],[[65323,65323],\"mapped\",[107]],[[65324,65324],\"mapped\",[108]],[[65325,65325],\"mapped\",[109]],[[65326,65326],\"mapped\",[110]],[[65327,65327],\"mapped\",[111]],[[65328,65328],\"mapped\",[112]],[[65329,65329],\"mapped\",[113]],[[65330,65330],\"mapped\",[114]],[[65331,65331],\"mapped\",[115]],[[65332,65332],\"mapped\",[116]],[[65333,65333],\"mapped\",[117]],[[65334,65334],\"mapped\",[118]],[[65335,65335],\"mapped\",[119]],[[65336,65336],\"mapped\",[120]],[[65337,65337],\"mapped\",[121]],[[65338,65338],\"mapped\",[122]],[[65339,65339],\"disallowed_STD3_mapped\",[91]],[[65340,65340],\"disallowed_STD3_mapped\",[92]],[[65341,65341],\"disallowed_STD3_mapped\",[93]],[[65342,65342],\"disallowed_STD3_mapped\",[94]],[[65343,65343],\"disallowed_STD3_mapped\",[95]],[[65344,65344],\"disallowed_STD3_mapped\",[96]],[[65345,65345],\"mapped\",[97]],[[65346,65346],\"mapped\",[98]],[[65347,65347],\"mapped\",[99]],[[65348,65348],\"mapped\",[100]],[[65349,65349],\"mapped\",[101]],[[65350,65350],\"mapped\",[102]],[[65351,65351],\"mapped\",[103]],[[65352,65352],\"mapped\",[104]],[[65353,65353],\"mapped\",[105]],[[65354,65354],\"mapped\",[106]],[[65355,65355],\"mapped\",[107]],[[65356,65356],\"mapped\",[108]],[[65357,65357],\"mapped\",[109]],[[65358,65358],\"mapped\",[110]],[[65359,65359],\"mapped\",[111]],[[65360,65360],\"mapped\",[112]],[[65361,65361],\"mapped\",[113]],[[65362,65362],\"mapped\",[114]],[[65363,65363],\"mapped\",[115]],[[65364,65364],\"mapped\",[116]],[[65365,65365],\"mapped\",[117]],[[65366,65366],\"mapped\",[118]],[[65367,65367],\"mapped\",[119]],[[65368,65368],\"mapped\",[120]],[[65369,65369],\"mapped\",[121]],[[65370,65370],\"mapped\",[122]],[[65371,65371],\"disallowed_STD3_mapped\",[123]],[[65372,65372],\"disallowed_STD3_mapped\",[124]],[[65373,65373],\"disallowed_STD3_mapped\",[125]],[[65374,65374],\"disallowed_STD3_mapped\",[126]],[[65375,65375],\"mapped\",[10629]],[[65376,65376],\"mapped\",[10630]],[[65377,65377],\"mapped\",[46]],[[65378,65378],\"mapped\",[12300]],[[65379,65379],\"mapped\",[12301]],[[65380,65380],\"mapped\",[12289]],[[65381,65381],\"mapped\",[12539]],[[65382,65382],\"mapped\",[12530]],[[65383,65383],\"mapped\",[12449]],[[65384,65384],\"mapped\",[12451]],[[65385,65385],\"mapped\",[12453]],[[65386,65386],\"mapped\",[12455]],[[65387,65387],\"mapped\",[12457]],[[65388,65388],\"mapped\",[12515]],[[65389,65389],\"mapped\",[12517]],[[65390,65390],\"mapped\",[12519]],[[65391,65391],\"mapped\",[12483]],[[65392,65392],\"mapped\",[12540]],[[65393,65393],\"mapped\",[12450]],[[65394,65394],\"mapped\",[12452]],[[65395,65395],\"mapped\",[12454]],[[65396,65396],\"mapped\",[12456]],[[65397,65397],\"mapped\",[12458]],[[65398,65398],\"mapped\",[12459]],[[65399,65399],\"mapped\",[12461]],[[65400,65400],\"mapped\",[12463]],[[65401,65401],\"mapped\",[12465]],[[65402,65402],\"mapped\",[12467]],[[65403,65403],\"mapped\",[12469]],[[65404,65404],\"mapped\",[12471]],[[65405,65405],\"mapped\",[12473]],[[65406,65406],\"mapped\",[12475]],[[65407,65407],\"mapped\",[12477]],[[65408,65408],\"mapped\",[12479]],[[65409,65409],\"mapped\",[12481]],[[65410,65410],\"mapped\",[12484]],[[65411,65411],\"mapped\",[12486]],[[65412,65412],\"mapped\",[12488]],[[65413,65413],\"mapped\",[12490]],[[65414,65414],\"mapped\",[12491]],[[65415,65415],\"mapped\",[12492]],[[65416,65416],\"mapped\",[12493]],[[65417,65417],\"mapped\",[12494]],[[65418,65418],\"mapped\",[12495]],[[65419,65419],\"mapped\",[12498]],[[65420,65420],\"mapped\",[12501]],[[65421,65421],\"mapped\",[12504]],[[65422,65422],\"mapped\",[12507]],[[65423,65423],\"mapped\",[12510]],[[65424,65424],\"mapped\",[12511]],[[65425,65425],\"mapped\",[12512]],[[65426,65426],\"mapped\",[12513]],[[65427,65427],\"mapped\",[12514]],[[65428,65428],\"mapped\",[12516]],[[65429,65429],\"mapped\",[12518]],[[65430,65430],\"mapped\",[12520]],[[65431,65431],\"mapped\",[12521]],[[65432,65432],\"mapped\",[12522]],[[65433,65433],\"mapped\",[12523]],[[65434,65434],\"mapped\",[12524]],[[65435,65435],\"mapped\",[12525]],[[65436,65436],\"mapped\",[12527]],[[65437,65437],\"mapped\",[12531]],[[65438,65438],\"mapped\",[12441]],[[65439,65439],\"mapped\",[12442]],[[65440,65440],\"disallowed\"],[[65441,65441],\"mapped\",[4352]],[[65442,65442],\"mapped\",[4353]],[[65443,65443],\"mapped\",[4522]],[[65444,65444],\"mapped\",[4354]],[[65445,65445],\"mapped\",[4524]],[[65446,65446],\"mapped\",[4525]],[[65447,65447],\"mapped\",[4355]],[[65448,65448],\"mapped\",[4356]],[[65449,65449],\"mapped\",[4357]],[[65450,65450],\"mapped\",[4528]],[[65451,65451],\"mapped\",[4529]],[[65452,65452],\"mapped\",[4530]],[[65453,65453],\"mapped\",[4531]],[[65454,65454],\"mapped\",[4532]],[[65455,65455],\"mapped\",[4533]],[[65456,65456],\"mapped\",[4378]],[[65457,65457],\"mapped\",[4358]],[[65458,65458],\"mapped\",[4359]],[[65459,65459],\"mapped\",[4360]],[[65460,65460],\"mapped\",[4385]],[[65461,65461],\"mapped\",[4361]],[[65462,65462],\"mapped\",[4362]],[[65463,65463],\"mapped\",[4363]],[[65464,65464],\"mapped\",[4364]],[[65465,65465],\"mapped\",[4365]],[[65466,65466],\"mapped\",[4366]],[[65467,65467],\"mapped\",[4367]],[[65468,65468],\"mapped\",[4368]],[[65469,65469],\"mapped\",[4369]],[[65470,65470],\"mapped\",[4370]],[[65471,65473],\"disallowed\"],[[65474,65474],\"mapped\",[4449]],[[65475,65475],\"mapped\",[4450]],[[65476,65476],\"mapped\",[4451]],[[65477,65477],\"mapped\",[4452]],[[65478,65478],\"mapped\",[4453]],[[65479,65479],\"mapped\",[4454]],[[65480,65481],\"disallowed\"],[[65482,65482],\"mapped\",[4455]],[[65483,65483],\"mapped\",[4456]],[[65484,65484],\"mapped\",[4457]],[[65485,65485],\"mapped\",[4458]],[[65486,65486],\"mapped\",[4459]],[[65487,65487],\"mapped\",[4460]],[[65488,65489],\"disallowed\"],[[65490,65490],\"mapped\",[4461]],[[65491,65491],\"mapped\",[4462]],[[65492,65492],\"mapped\",[4463]],[[65493,65493],\"mapped\",[4464]],[[65494,65494],\"mapped\",[4465]],[[65495,65495],\"mapped\",[4466]],[[65496,65497],\"disallowed\"],[[65498,65498],\"mapped\",[4467]],[[65499,65499],\"mapped\",[4468]],[[65500,65500],\"mapped\",[4469]],[[65501,65503],\"disallowed\"],[[65504,65504],\"mapped\",[162]],[[65505,65505],\"mapped\",[163]],[[65506,65506],\"mapped\",[172]],[[65507,65507],\"disallowed_STD3_mapped\",[32,772]],[[65508,65508],\"mapped\",[166]],[[65509,65509],\"mapped\",[165]],[[65510,65510],\"mapped\",[8361]],[[65511,65511],\"disallowed\"],[[65512,65512],\"mapped\",[9474]],[[65513,65513],\"mapped\",[8592]],[[65514,65514],\"mapped\",[8593]],[[65515,65515],\"mapped\",[8594]],[[65516,65516],\"mapped\",[8595]],[[65517,65517],\"mapped\",[9632]],[[65518,65518],\"mapped\",[9675]],[[65519,65528],\"disallowed\"],[[65529,65531],\"disallowed\"],[[65532,65532],\"disallowed\"],[[65533,65533],\"disallowed\"],[[65534,65535],\"disallowed\"],[[65536,65547],\"valid\"],[[65548,65548],\"disallowed\"],[[65549,65574],\"valid\"],[[65575,65575],\"disallowed\"],[[65576,65594],\"valid\"],[[65595,65595],\"disallowed\"],[[65596,65597],\"valid\"],[[65598,65598],\"disallowed\"],[[65599,65613],\"valid\"],[[65614,65615],\"disallowed\"],[[65616,65629],\"valid\"],[[65630,65663],\"disallowed\"],[[65664,65786],\"valid\"],[[65787,65791],\"disallowed\"],[[65792,65794],\"valid\",[],\"NV8\"],[[65795,65798],\"disallowed\"],[[65799,65843],\"valid\",[],\"NV8\"],[[65844,65846],\"disallowed\"],[[65847,65855],\"valid\",[],\"NV8\"],[[65856,65930],\"valid\",[],\"NV8\"],[[65931,65932],\"valid\",[],\"NV8\"],[[65933,65935],\"disallowed\"],[[65936,65947],\"valid\",[],\"NV8\"],[[65948,65951],\"disallowed\"],[[65952,65952],\"valid\",[],\"NV8\"],[[65953,65999],\"disallowed\"],[[66000,66044],\"valid\",[],\"NV8\"],[[66045,66045],\"valid\"],[[66046,66175],\"disallowed\"],[[66176,66204],\"valid\"],[[66205,66207],\"disallowed\"],[[66208,66256],\"valid\"],[[66257,66271],\"disallowed\"],[[66272,66272],\"valid\"],[[66273,66299],\"valid\",[],\"NV8\"],[[66300,66303],\"disallowed\"],[[66304,66334],\"valid\"],[[66335,66335],\"valid\"],[[66336,66339],\"valid\",[],\"NV8\"],[[66340,66351],\"disallowed\"],[[66352,66368],\"valid\"],[[66369,66369],\"valid\",[],\"NV8\"],[[66370,66377],\"valid\"],[[66378,66378],\"valid\",[],\"NV8\"],[[66379,66383],\"disallowed\"],[[66384,66426],\"valid\"],[[66427,66431],\"disallowed\"],[[66432,66461],\"valid\"],[[66462,66462],\"disallowed\"],[[66463,66463],\"valid\",[],\"NV8\"],[[66464,66499],\"valid\"],[[66500,66503],\"disallowed\"],[[66504,66511],\"valid\"],[[66512,66517],\"valid\",[],\"NV8\"],[[66518,66559],\"disallowed\"],[[66560,66560],\"mapped\",[66600]],[[66561,66561],\"mapped\",[66601]],[[66562,66562],\"mapped\",[66602]],[[66563,66563],\"mapped\",[66603]],[[66564,66564],\"mapped\",[66604]],[[66565,66565],\"mapped\",[66605]],[[66566,66566],\"mapped\",[66606]],[[66567,66567],\"mapped\",[66607]],[[66568,66568],\"mapped\",[66608]],[[66569,66569],\"mapped\",[66609]],[[66570,66570],\"mapped\",[66610]],[[66571,66571],\"mapped\",[66611]],[[66572,66572],\"mapped\",[66612]],[[66573,66573],\"mapped\",[66613]],[[66574,66574],\"mapped\",[66614]],[[66575,66575],\"mapped\",[66615]],[[66576,66576],\"mapped\",[66616]],[[66577,66577],\"mapped\",[66617]],[[66578,66578],\"mapped\",[66618]],[[66579,66579],\"mapped\",[66619]],[[66580,66580],\"mapped\",[66620]],[[66581,66581],\"mapped\",[66621]],[[66582,66582],\"mapped\",[66622]],[[66583,66583],\"mapped\",[66623]],[[66584,66584],\"mapped\",[66624]],[[66585,66585],\"mapped\",[66625]],[[66586,66586],\"mapped\",[66626]],[[66587,66587],\"mapped\",[66627]],[[66588,66588],\"mapped\",[66628]],[[66589,66589],\"mapped\",[66629]],[[66590,66590],\"mapped\",[66630]],[[66591,66591],\"mapped\",[66631]],[[66592,66592],\"mapped\",[66632]],[[66593,66593],\"mapped\",[66633]],[[66594,66594],\"mapped\",[66634]],[[66595,66595],\"mapped\",[66635]],[[66596,66596],\"mapped\",[66636]],[[66597,66597],\"mapped\",[66637]],[[66598,66598],\"mapped\",[66638]],[[66599,66599],\"mapped\",[66639]],[[66600,66637],\"valid\"],[[66638,66717],\"valid\"],[[66718,66719],\"disallowed\"],[[66720,66729],\"valid\"],[[66730,66815],\"disallowed\"],[[66816,66855],\"valid\"],[[66856,66863],\"disallowed\"],[[66864,66915],\"valid\"],[[66916,66926],\"disallowed\"],[[66927,66927],\"valid\",[],\"NV8\"],[[66928,67071],\"disallowed\"],[[67072,67382],\"valid\"],[[67383,67391],\"disallowed\"],[[67392,67413],\"valid\"],[[67414,67423],\"disallowed\"],[[67424,67431],\"valid\"],[[67432,67583],\"disallowed\"],[[67584,67589],\"valid\"],[[67590,67591],\"disallowed\"],[[67592,67592],\"valid\"],[[67593,67593],\"disallowed\"],[[67594,67637],\"valid\"],[[67638,67638],\"disallowed\"],[[67639,67640],\"valid\"],[[67641,67643],\"disallowed\"],[[67644,67644],\"valid\"],[[67645,67646],\"disallowed\"],[[67647,67647],\"valid\"],[[67648,67669],\"valid\"],[[67670,67670],\"disallowed\"],[[67671,67679],\"valid\",[],\"NV8\"],[[67680,67702],\"valid\"],[[67703,67711],\"valid\",[],\"NV8\"],[[67712,67742],\"valid\"],[[67743,67750],\"disallowed\"],[[67751,67759],\"valid\",[],\"NV8\"],[[67760,67807],\"disallowed\"],[[67808,67826],\"valid\"],[[67827,67827],\"disallowed\"],[[67828,67829],\"valid\"],[[67830,67834],\"disallowed\"],[[67835,67839],\"valid\",[],\"NV8\"],[[67840,67861],\"valid\"],[[67862,67865],\"valid\",[],\"NV8\"],[[67866,67867],\"valid\",[],\"NV8\"],[[67868,67870],\"disallowed\"],[[67871,67871],\"valid\",[],\"NV8\"],[[67872,67897],\"valid\"],[[67898,67902],\"disallowed\"],[[67903,67903],\"valid\",[],\"NV8\"],[[67904,67967],\"disallowed\"],[[67968,68023],\"valid\"],[[68024,68027],\"disallowed\"],[[68028,68029],\"valid\",[],\"NV8\"],[[68030,68031],\"valid\"],[[68032,68047],\"valid\",[],\"NV8\"],[[68048,68049],\"disallowed\"],[[68050,68095],\"valid\",[],\"NV8\"],[[68096,68099],\"valid\"],[[68100,68100],\"disallowed\"],[[68101,68102],\"valid\"],[[68103,68107],\"disallowed\"],[[68108,68115],\"valid\"],[[68116,68116],\"disallowed\"],[[68117,68119],\"valid\"],[[68120,68120],\"disallowed\"],[[68121,68147],\"valid\"],[[68148,68151],\"disallowed\"],[[68152,68154],\"valid\"],[[68155,68158],\"disallowed\"],[[68159,68159],\"valid\"],[[68160,68167],\"valid\",[],\"NV8\"],[[68168,68175],\"disallowed\"],[[68176,68184],\"valid\",[],\"NV8\"],[[68185,68191],\"disallowed\"],[[68192,68220],\"valid\"],[[68221,68223],\"valid\",[],\"NV8\"],[[68224,68252],\"valid\"],[[68253,68255],\"valid\",[],\"NV8\"],[[68256,68287],\"disallowed\"],[[68288,68295],\"valid\"],[[68296,68296],\"valid\",[],\"NV8\"],[[68297,68326],\"valid\"],[[68327,68330],\"disallowed\"],[[68331,68342],\"valid\",[],\"NV8\"],[[68343,68351],\"disallowed\"],[[68352,68405],\"valid\"],[[68406,68408],\"disallowed\"],[[68409,68415],\"valid\",[],\"NV8\"],[[68416,68437],\"valid\"],[[68438,68439],\"disallowed\"],[[68440,68447],\"valid\",[],\"NV8\"],[[68448,68466],\"valid\"],[[68467,68471],\"disallowed\"],[[68472,68479],\"valid\",[],\"NV8\"],[[68480,68497],\"valid\"],[[68498,68504],\"disallowed\"],[[68505,68508],\"valid\",[],\"NV8\"],[[68509,68520],\"disallowed\"],[[68521,68527],\"valid\",[],\"NV8\"],[[68528,68607],\"disallowed\"],[[68608,68680],\"valid\"],[[68681,68735],\"disallowed\"],[[68736,68736],\"mapped\",[68800]],[[68737,68737],\"mapped\",[68801]],[[68738,68738],\"mapped\",[68802]],[[68739,68739],\"mapped\",[68803]],[[68740,68740],\"mapped\",[68804]],[[68741,68741],\"mapped\",[68805]],[[68742,68742],\"mapped\",[68806]],[[68743,68743],\"mapped\",[68807]],[[68744,68744],\"mapped\",[68808]],[[68745,68745],\"mapped\",[68809]],[[68746,68746],\"mapped\",[68810]],[[68747,68747],\"mapped\",[68811]],[[68748,68748],\"mapped\",[68812]],[[68749,68749],\"mapped\",[68813]],[[68750,68750],\"mapped\",[68814]],[[68751,68751],\"mapped\",[68815]],[[68752,68752],\"mapped\",[68816]],[[68753,68753],\"mapped\",[68817]],[[68754,68754],\"mapped\",[68818]],[[68755,68755],\"mapped\",[68819]],[[68756,68756],\"mapped\",[68820]],[[68757,68757],\"mapped\",[68821]],[[68758,68758],\"mapped\",[68822]],[[68759,68759],\"mapped\",[68823]],[[68760,68760],\"mapped\",[68824]],[[68761,68761],\"mapped\",[68825]],[[68762,68762],\"mapped\",[68826]],[[68763,68763],\"mapped\",[68827]],[[68764,68764],\"mapped\",[68828]],[[68765,68765],\"mapped\",[68829]],[[68766,68766],\"mapped\",[68830]],[[68767,68767],\"mapped\",[68831]],[[68768,68768],\"mapped\",[68832]],[[68769,68769],\"mapped\",[68833]],[[68770,68770],\"mapped\",[68834]],[[68771,68771],\"mapped\",[68835]],[[68772,68772],\"mapped\",[68836]],[[68773,68773],\"mapped\",[68837]],[[68774,68774],\"mapped\",[68838]],[[68775,68775],\"mapped\",[68839]],[[68776,68776],\"mapped\",[68840]],[[68777,68777],\"mapped\",[68841]],[[68778,68778],\"mapped\",[68842]],[[68779,68779],\"mapped\",[68843]],[[68780,68780],\"mapped\",[68844]],[[68781,68781],\"mapped\",[68845]],[[68782,68782],\"mapped\",[68846]],[[68783,68783],\"mapped\",[68847]],[[68784,68784],\"mapped\",[68848]],[[68785,68785],\"mapped\",[68849]],[[68786,68786],\"mapped\",[68850]],[[68787,68799],\"disallowed\"],[[68800,68850],\"valid\"],[[68851,68857],\"disallowed\"],[[68858,68863],\"valid\",[],\"NV8\"],[[68864,69215],\"disallowed\"],[[69216,69246],\"valid\",[],\"NV8\"],[[69247,69631],\"disallowed\"],[[69632,69702],\"valid\"],[[69703,69709],\"valid\",[],\"NV8\"],[[69710,69713],\"disallowed\"],[[69714,69733],\"valid\",[],\"NV8\"],[[69734,69743],\"valid\"],[[69744,69758],\"disallowed\"],[[69759,69759],\"valid\"],[[69760,69818],\"valid\"],[[69819,69820],\"valid\",[],\"NV8\"],[[69821,69821],\"disallowed\"],[[69822,69825],\"valid\",[],\"NV8\"],[[69826,69839],\"disallowed\"],[[69840,69864],\"valid\"],[[69865,69871],\"disallowed\"],[[69872,69881],\"valid\"],[[69882,69887],\"disallowed\"],[[69888,69940],\"valid\"],[[69941,69941],\"disallowed\"],[[69942,69951],\"valid\"],[[69952,69955],\"valid\",[],\"NV8\"],[[69956,69967],\"disallowed\"],[[69968,70003],\"valid\"],[[70004,70005],\"valid\",[],\"NV8\"],[[70006,70006],\"valid\"],[[70007,70015],\"disallowed\"],[[70016,70084],\"valid\"],[[70085,70088],\"valid\",[],\"NV8\"],[[70089,70089],\"valid\",[],\"NV8\"],[[70090,70092],\"valid\"],[[70093,70093],\"valid\",[],\"NV8\"],[[70094,70095],\"disallowed\"],[[70096,70105],\"valid\"],[[70106,70106],\"valid\"],[[70107,70107],\"valid\",[],\"NV8\"],[[70108,70108],\"valid\"],[[70109,70111],\"valid\",[],\"NV8\"],[[70112,70112],\"disallowed\"],[[70113,70132],\"valid\",[],\"NV8\"],[[70133,70143],\"disallowed\"],[[70144,70161],\"valid\"],[[70162,70162],\"disallowed\"],[[70163,70199],\"valid\"],[[70200,70205],\"valid\",[],\"NV8\"],[[70206,70271],\"disallowed\"],[[70272,70278],\"valid\"],[[70279,70279],\"disallowed\"],[[70280,70280],\"valid\"],[[70281,70281],\"disallowed\"],[[70282,70285],\"valid\"],[[70286,70286],\"disallowed\"],[[70287,70301],\"valid\"],[[70302,70302],\"disallowed\"],[[70303,70312],\"valid\"],[[70313,70313],\"valid\",[],\"NV8\"],[[70314,70319],\"disallowed\"],[[70320,70378],\"valid\"],[[70379,70383],\"disallowed\"],[[70384,70393],\"valid\"],[[70394,70399],\"disallowed\"],[[70400,70400],\"valid\"],[[70401,70403],\"valid\"],[[70404,70404],\"disallowed\"],[[70405,70412],\"valid\"],[[70413,70414],\"disallowed\"],[[70415,70416],\"valid\"],[[70417,70418],\"disallowed\"],[[70419,70440],\"valid\"],[[70441,70441],\"disallowed\"],[[70442,70448],\"valid\"],[[70449,70449],\"disallowed\"],[[70450,70451],\"valid\"],[[70452,70452],\"disallowed\"],[[70453,70457],\"valid\"],[[70458,70459],\"disallowed\"],[[70460,70468],\"valid\"],[[70469,70470],\"disallowed\"],[[70471,70472],\"valid\"],[[70473,70474],\"disallowed\"],[[70475,70477],\"valid\"],[[70478,70479],\"disallowed\"],[[70480,70480],\"valid\"],[[70481,70486],\"disallowed\"],[[70487,70487],\"valid\"],[[70488,70492],\"disallowed\"],[[70493,70499],\"valid\"],[[70500,70501],\"disallowed\"],[[70502,70508],\"valid\"],[[70509,70511],\"disallowed\"],[[70512,70516],\"valid\"],[[70517,70783],\"disallowed\"],[[70784,70853],\"valid\"],[[70854,70854],\"valid\",[],\"NV8\"],[[70855,70855],\"valid\"],[[70856,70863],\"disallowed\"],[[70864,70873],\"valid\"],[[70874,71039],\"disallowed\"],[[71040,71093],\"valid\"],[[71094,71095],\"disallowed\"],[[71096,71104],\"valid\"],[[71105,71113],\"valid\",[],\"NV8\"],[[71114,71127],\"valid\",[],\"NV8\"],[[71128,71133],\"valid\"],[[71134,71167],\"disallowed\"],[[71168,71232],\"valid\"],[[71233,71235],\"valid\",[],\"NV8\"],[[71236,71236],\"valid\"],[[71237,71247],\"disallowed\"],[[71248,71257],\"valid\"],[[71258,71295],\"disallowed\"],[[71296,71351],\"valid\"],[[71352,71359],\"disallowed\"],[[71360,71369],\"valid\"],[[71370,71423],\"disallowed\"],[[71424,71449],\"valid\"],[[71450,71452],\"disallowed\"],[[71453,71467],\"valid\"],[[71468,71471],\"disallowed\"],[[71472,71481],\"valid\"],[[71482,71487],\"valid\",[],\"NV8\"],[[71488,71839],\"disallowed\"],[[71840,71840],\"mapped\",[71872]],[[71841,71841],\"mapped\",[71873]],[[71842,71842],\"mapped\",[71874]],[[71843,71843],\"mapped\",[71875]],[[71844,71844],\"mapped\",[71876]],[[71845,71845],\"mapped\",[71877]],[[71846,71846],\"mapped\",[71878]],[[71847,71847],\"mapped\",[71879]],[[71848,71848],\"mapped\",[71880]],[[71849,71849],\"mapped\",[71881]],[[71850,71850],\"mapped\",[71882]],[[71851,71851],\"mapped\",[71883]],[[71852,71852],\"mapped\",[71884]],[[71853,71853],\"mapped\",[71885]],[[71854,71854],\"mapped\",[71886]],[[71855,71855],\"mapped\",[71887]],[[71856,71856],\"mapped\",[71888]],[[71857,71857],\"mapped\",[71889]],[[71858,71858],\"mapped\",[71890]],[[71859,71859],\"mapped\",[71891]],[[71860,71860],\"mapped\",[71892]],[[71861,71861],\"mapped\",[71893]],[[71862,71862],\"mapped\",[71894]],[[71863,71863],\"mapped\",[71895]],[[71864,71864],\"mapped\",[71896]],[[71865,71865],\"mapped\",[71897]],[[71866,71866],\"mapped\",[71898]],[[71867,71867],\"mapped\",[71899]],[[71868,71868],\"mapped\",[71900]],[[71869,71869],\"mapped\",[71901]],[[71870,71870],\"mapped\",[71902]],[[71871,71871],\"mapped\",[71903]],[[71872,71913],\"valid\"],[[71914,71922],\"valid\",[],\"NV8\"],[[71923,71934],\"disallowed\"],[[71935,71935],\"valid\"],[[71936,72383],\"disallowed\"],[[72384,72440],\"valid\"],[[72441,73727],\"disallowed\"],[[73728,74606],\"valid\"],[[74607,74648],\"valid\"],[[74649,74649],\"valid\"],[[74650,74751],\"disallowed\"],[[74752,74850],\"valid\",[],\"NV8\"],[[74851,74862],\"valid\",[],\"NV8\"],[[74863,74863],\"disallowed\"],[[74864,74867],\"valid\",[],\"NV8\"],[[74868,74868],\"valid\",[],\"NV8\"],[[74869,74879],\"disallowed\"],[[74880,75075],\"valid\"],[[75076,77823],\"disallowed\"],[[77824,78894],\"valid\"],[[78895,82943],\"disallowed\"],[[82944,83526],\"valid\"],[[83527,92159],\"disallowed\"],[[92160,92728],\"valid\"],[[92729,92735],\"disallowed\"],[[92736,92766],\"valid\"],[[92767,92767],\"disallowed\"],[[92768,92777],\"valid\"],[[92778,92781],\"disallowed\"],[[92782,92783],\"valid\",[],\"NV8\"],[[92784,92879],\"disallowed\"],[[92880,92909],\"valid\"],[[92910,92911],\"disallowed\"],[[92912,92916],\"valid\"],[[92917,92917],\"valid\",[],\"NV8\"],[[92918,92927],\"disallowed\"],[[92928,92982],\"valid\"],[[92983,92991],\"valid\",[],\"NV8\"],[[92992,92995],\"valid\"],[[92996,92997],\"valid\",[],\"NV8\"],[[92998,93007],\"disallowed\"],[[93008,93017],\"valid\"],[[93018,93018],\"disallowed\"],[[93019,93025],\"valid\",[],\"NV8\"],[[93026,93026],\"disallowed\"],[[93027,93047],\"valid\"],[[93048,93052],\"disallowed\"],[[93053,93071],\"valid\"],[[93072,93951],\"disallowed\"],[[93952,94020],\"valid\"],[[94021,94031],\"disallowed\"],[[94032,94078],\"valid\"],[[94079,94094],\"disallowed\"],[[94095,94111],\"valid\"],[[94112,110591],\"disallowed\"],[[110592,110593],\"valid\"],[[110594,113663],\"disallowed\"],[[113664,113770],\"valid\"],[[113771,113775],\"disallowed\"],[[113776,113788],\"valid\"],[[113789,113791],\"disallowed\"],[[113792,113800],\"valid\"],[[113801,113807],\"disallowed\"],[[113808,113817],\"valid\"],[[113818,113819],\"disallowed\"],[[113820,113820],\"valid\",[],\"NV8\"],[[113821,113822],\"valid\"],[[113823,113823],\"valid\",[],\"NV8\"],[[113824,113827],\"ignored\"],[[113828,118783],\"disallowed\"],[[118784,119029],\"valid\",[],\"NV8\"],[[119030,119039],\"disallowed\"],[[119040,119078],\"valid\",[],\"NV8\"],[[119079,119080],\"disallowed\"],[[119081,119081],\"valid\",[],\"NV8\"],[[119082,119133],\"valid\",[],\"NV8\"],[[119134,119134],\"mapped\",[119127,119141]],[[119135,119135],\"mapped\",[119128,119141]],[[119136,119136],\"mapped\",[119128,119141,119150]],[[119137,119137],\"mapped\",[119128,119141,119151]],[[119138,119138],\"mapped\",[119128,119141,119152]],[[119139,119139],\"mapped\",[119128,119141,119153]],[[119140,119140],\"mapped\",[119128,119141,119154]],[[119141,119154],\"valid\",[],\"NV8\"],[[119155,119162],\"disallowed\"],[[119163,119226],\"valid\",[],\"NV8\"],[[119227,119227],\"mapped\",[119225,119141]],[[119228,119228],\"mapped\",[119226,119141]],[[119229,119229],\"mapped\",[119225,119141,119150]],[[119230,119230],\"mapped\",[119226,119141,119150]],[[119231,119231],\"mapped\",[119225,119141,119151]],[[119232,119232],\"mapped\",[119226,119141,119151]],[[119233,119261],\"valid\",[],\"NV8\"],[[119262,119272],\"valid\",[],\"NV8\"],[[119273,119295],\"disallowed\"],[[119296,119365],\"valid\",[],\"NV8\"],[[119366,119551],\"disallowed\"],[[119552,119638],\"valid\",[],\"NV8\"],[[119639,119647],\"disallowed\"],[[119648,119665],\"valid\",[],\"NV8\"],[[119666,119807],\"disallowed\"],[[119808,119808],\"mapped\",[97]],[[119809,119809],\"mapped\",[98]],[[119810,119810],\"mapped\",[99]],[[119811,119811],\"mapped\",[100]],[[119812,119812],\"mapped\",[101]],[[119813,119813],\"mapped\",[102]],[[119814,119814],\"mapped\",[103]],[[119815,119815],\"mapped\",[104]],[[119816,119816],\"mapped\",[105]],[[119817,119817],\"mapped\",[106]],[[119818,119818],\"mapped\",[107]],[[119819,119819],\"mapped\",[108]],[[119820,119820],\"mapped\",[109]],[[119821,119821],\"mapped\",[110]],[[119822,119822],\"mapped\",[111]],[[119823,119823],\"mapped\",[112]],[[119824,119824],\"mapped\",[113]],[[119825,119825],\"mapped\",[114]],[[119826,119826],\"mapped\",[115]],[[119827,119827],\"mapped\",[116]],[[119828,119828],\"mapped\",[117]],[[119829,119829],\"mapped\",[118]],[[119830,119830],\"mapped\",[119]],[[119831,119831],\"mapped\",[120]],[[119832,119832],\"mapped\",[121]],[[119833,119833],\"mapped\",[122]],[[119834,119834],\"mapped\",[97]],[[119835,119835],\"mapped\",[98]],[[119836,119836],\"mapped\",[99]],[[119837,119837],\"mapped\",[100]],[[119838,119838],\"mapped\",[101]],[[119839,119839],\"mapped\",[102]],[[119840,119840],\"mapped\",[103]],[[119841,119841],\"mapped\",[104]],[[119842,119842],\"mapped\",[105]],[[119843,119843],\"mapped\",[106]],[[119844,119844],\"mapped\",[107]],[[119845,119845],\"mapped\",[108]],[[119846,119846],\"mapped\",[109]],[[119847,119847],\"mapped\",[110]],[[119848,119848],\"mapped\",[111]],[[119849,119849],\"mapped\",[112]],[[119850,119850],\"mapped\",[113]],[[119851,119851],\"mapped\",[114]],[[119852,119852],\"mapped\",[115]],[[119853,119853],\"mapped\",[116]],[[119854,119854],\"mapped\",[117]],[[119855,119855],\"mapped\",[118]],[[119856,119856],\"mapped\",[119]],[[119857,119857],\"mapped\",[120]],[[119858,119858],\"mapped\",[121]],[[119859,119859],\"mapped\",[122]],[[119860,119860],\"mapped\",[97]],[[119861,119861],\"mapped\",[98]],[[119862,119862],\"mapped\",[99]],[[119863,119863],\"mapped\",[100]],[[119864,119864],\"mapped\",[101]],[[119865,119865],\"mapped\",[102]],[[119866,119866],\"mapped\",[103]],[[119867,119867],\"mapped\",[104]],[[119868,119868],\"mapped\",[105]],[[119869,119869],\"mapped\",[106]],[[119870,119870],\"mapped\",[107]],[[119871,119871],\"mapped\",[108]],[[119872,119872],\"mapped\",[109]],[[119873,119873],\"mapped\",[110]],[[119874,119874],\"mapped\",[111]],[[119875,119875],\"mapped\",[112]],[[119876,119876],\"mapped\",[113]],[[119877,119877],\"mapped\",[114]],[[119878,119878],\"mapped\",[115]],[[119879,119879],\"mapped\",[116]],[[119880,119880],\"mapped\",[117]],[[119881,119881],\"mapped\",[118]],[[119882,119882],\"mapped\",[119]],[[119883,119883],\"mapped\",[120]],[[119884,119884],\"mapped\",[121]],[[119885,119885],\"mapped\",[122]],[[119886,119886],\"mapped\",[97]],[[119887,119887],\"mapped\",[98]],[[119888,119888],\"mapped\",[99]],[[119889,119889],\"mapped\",[100]],[[119890,119890],\"mapped\",[101]],[[119891,119891],\"mapped\",[102]],[[119892,119892],\"mapped\",[103]],[[119893,119893],\"disallowed\"],[[119894,119894],\"mapped\",[105]],[[119895,119895],\"mapped\",[106]],[[119896,119896],\"mapped\",[107]],[[119897,119897],\"mapped\",[108]],[[119898,119898],\"mapped\",[109]],[[119899,119899],\"mapped\",[110]],[[119900,119900],\"mapped\",[111]],[[119901,119901],\"mapped\",[112]],[[119902,119902],\"mapped\",[113]],[[119903,119903],\"mapped\",[114]],[[119904,119904],\"mapped\",[115]],[[119905,119905],\"mapped\",[116]],[[119906,119906],\"mapped\",[117]],[[119907,119907],\"mapped\",[118]],[[119908,119908],\"mapped\",[119]],[[119909,119909],\"mapped\",[120]],[[119910,119910],\"mapped\",[121]],[[119911,119911],\"mapped\",[122]],[[119912,119912],\"mapped\",[97]],[[119913,119913],\"mapped\",[98]],[[119914,119914],\"mapped\",[99]],[[119915,119915],\"mapped\",[100]],[[119916,119916],\"mapped\",[101]],[[119917,119917],\"mapped\",[102]],[[119918,119918],\"mapped\",[103]],[[119919,119919],\"mapped\",[104]],[[119920,119920],\"mapped\",[105]],[[119921,119921],\"mapped\",[106]],[[119922,119922],\"mapped\",[107]],[[119923,119923],\"mapped\",[108]],[[119924,119924],\"mapped\",[109]],[[119925,119925],\"mapped\",[110]],[[119926,119926],\"mapped\",[111]],[[119927,119927],\"mapped\",[112]],[[119928,119928],\"mapped\",[113]],[[119929,119929],\"mapped\",[114]],[[119930,119930],\"mapped\",[115]],[[119931,119931],\"mapped\",[116]],[[119932,119932],\"mapped\",[117]],[[119933,119933],\"mapped\",[118]],[[119934,119934],\"mapped\",[119]],[[119935,119935],\"mapped\",[120]],[[119936,119936],\"mapped\",[121]],[[119937,119937],\"mapped\",[122]],[[119938,119938],\"mapped\",[97]],[[119939,119939],\"mapped\",[98]],[[119940,119940],\"mapped\",[99]],[[119941,119941],\"mapped\",[100]],[[119942,119942],\"mapped\",[101]],[[119943,119943],\"mapped\",[102]],[[119944,119944],\"mapped\",[103]],[[119945,119945],\"mapped\",[104]],[[119946,119946],\"mapped\",[105]],[[119947,119947],\"mapped\",[106]],[[119948,119948],\"mapped\",[107]],[[119949,119949],\"mapped\",[108]],[[119950,119950],\"mapped\",[109]],[[119951,119951],\"mapped\",[110]],[[119952,119952],\"mapped\",[111]],[[119953,119953],\"mapped\",[112]],[[119954,119954],\"mapped\",[113]],[[119955,119955],\"mapped\",[114]],[[119956,119956],\"mapped\",[115]],[[119957,119957],\"mapped\",[116]],[[119958,119958],\"mapped\",[117]],[[119959,119959],\"mapped\",[118]],[[119960,119960],\"mapped\",[119]],[[119961,119961],\"mapped\",[120]],[[119962,119962],\"mapped\",[121]],[[119963,119963],\"mapped\",[122]],[[119964,119964],\"mapped\",[97]],[[119965,119965],\"disallowed\"],[[119966,119966],\"mapped\",[99]],[[119967,119967],\"mapped\",[100]],[[119968,119969],\"disallowed\"],[[119970,119970],\"mapped\",[103]],[[119971,119972],\"disallowed\"],[[119973,119973],\"mapped\",[106]],[[119974,119974],\"mapped\",[107]],[[119975,119976],\"disallowed\"],[[119977,119977],\"mapped\",[110]],[[119978,119978],\"mapped\",[111]],[[119979,119979],\"mapped\",[112]],[[119980,119980],\"mapped\",[113]],[[119981,119981],\"disallowed\"],[[119982,119982],\"mapped\",[115]],[[119983,119983],\"mapped\",[116]],[[119984,119984],\"mapped\",[117]],[[119985,119985],\"mapped\",[118]],[[119986,119986],\"mapped\",[119]],[[119987,119987],\"mapped\",[120]],[[119988,119988],\"mapped\",[121]],[[119989,119989],\"mapped\",[122]],[[119990,119990],\"mapped\",[97]],[[119991,119991],\"mapped\",[98]],[[119992,119992],\"mapped\",[99]],[[119993,119993],\"mapped\",[100]],[[119994,119994],\"disallowed\"],[[119995,119995],\"mapped\",[102]],[[119996,119996],\"disallowed\"],[[119997,119997],\"mapped\",[104]],[[119998,119998],\"mapped\",[105]],[[119999,119999],\"mapped\",[106]],[[120000,120000],\"mapped\",[107]],[[120001,120001],\"mapped\",[108]],[[120002,120002],\"mapped\",[109]],[[120003,120003],\"mapped\",[110]],[[120004,120004],\"disallowed\"],[[120005,120005],\"mapped\",[112]],[[120006,120006],\"mapped\",[113]],[[120007,120007],\"mapped\",[114]],[[120008,120008],\"mapped\",[115]],[[120009,120009],\"mapped\",[116]],[[120010,120010],\"mapped\",[117]],[[120011,120011],\"mapped\",[118]],[[120012,120012],\"mapped\",[119]],[[120013,120013],\"mapped\",[120]],[[120014,120014],\"mapped\",[121]],[[120015,120015],\"mapped\",[122]],[[120016,120016],\"mapped\",[97]],[[120017,120017],\"mapped\",[98]],[[120018,120018],\"mapped\",[99]],[[120019,120019],\"mapped\",[100]],[[120020,120020],\"mapped\",[101]],[[120021,120021],\"mapped\",[102]],[[120022,120022],\"mapped\",[103]],[[120023,120023],\"mapped\",[104]],[[120024,120024],\"mapped\",[105]],[[120025,120025],\"mapped\",[106]],[[120026,120026],\"mapped\",[107]],[[120027,120027],\"mapped\",[108]],[[120028,120028],\"mapped\",[109]],[[120029,120029],\"mapped\",[110]],[[120030,120030],\"mapped\",[111]],[[120031,120031],\"mapped\",[112]],[[120032,120032],\"mapped\",[113]],[[120033,120033],\"mapped\",[114]],[[120034,120034],\"mapped\",[115]],[[120035,120035],\"mapped\",[116]],[[120036,120036],\"mapped\",[117]],[[120037,120037],\"mapped\",[118]],[[120038,120038],\"mapped\",[119]],[[120039,120039],\"mapped\",[120]],[[120040,120040],\"mapped\",[121]],[[120041,120041],\"mapped\",[122]],[[120042,120042],\"mapped\",[97]],[[120043,120043],\"mapped\",[98]],[[120044,120044],\"mapped\",[99]],[[120045,120045],\"mapped\",[100]],[[120046,120046],\"mapped\",[101]],[[120047,120047],\"mapped\",[102]],[[120048,120048],\"mapped\",[103]],[[120049,120049],\"mapped\",[104]],[[120050,120050],\"mapped\",[105]],[[120051,120051],\"mapped\",[106]],[[120052,120052],\"mapped\",[107]],[[120053,120053],\"mapped\",[108]],[[120054,120054],\"mapped\",[109]],[[120055,120055],\"mapped\",[110]],[[120056,120056],\"mapped\",[111]],[[120057,120057],\"mapped\",[112]],[[120058,120058],\"mapped\",[113]],[[120059,120059],\"mapped\",[114]],[[120060,120060],\"mapped\",[115]],[[120061,120061],\"mapped\",[116]],[[120062,120062],\"mapped\",[117]],[[120063,120063],\"mapped\",[118]],[[120064,120064],\"mapped\",[119]],[[120065,120065],\"mapped\",[120]],[[120066,120066],\"mapped\",[121]],[[120067,120067],\"mapped\",[122]],[[120068,120068],\"mapped\",[97]],[[120069,120069],\"mapped\",[98]],[[120070,120070],\"disallowed\"],[[120071,120071],\"mapped\",[100]],[[120072,120072],\"mapped\",[101]],[[120073,120073],\"mapped\",[102]],[[120074,120074],\"mapped\",[103]],[[120075,120076],\"disallowed\"],[[120077,120077],\"mapped\",[106]],[[120078,120078],\"mapped\",[107]],[[120079,120079],\"mapped\",[108]],[[120080,120080],\"mapped\",[109]],[[120081,120081],\"mapped\",[110]],[[120082,120082],\"mapped\",[111]],[[120083,120083],\"mapped\",[112]],[[120084,120084],\"mapped\",[113]],[[120085,120085],\"disallowed\"],[[120086,120086],\"mapped\",[115]],[[120087,120087],\"mapped\",[116]],[[120088,120088],\"mapped\",[117]],[[120089,120089],\"mapped\",[118]],[[120090,120090],\"mapped\",[119]],[[120091,120091],\"mapped\",[120]],[[120092,120092],\"mapped\",[121]],[[120093,120093],\"disallowed\"],[[120094,120094],\"mapped\",[97]],[[120095,120095],\"mapped\",[98]],[[120096,120096],\"mapped\",[99]],[[120097,120097],\"mapped\",[100]],[[120098,120098],\"mapped\",[101]],[[120099,120099],\"mapped\",[102]],[[120100,120100],\"mapped\",[103]],[[120101,120101],\"mapped\",[104]],[[120102,120102],\"mapped\",[105]],[[120103,120103],\"mapped\",[106]],[[120104,120104],\"mapped\",[107]],[[120105,120105],\"mapped\",[108]],[[120106,120106],\"mapped\",[109]],[[120107,120107],\"mapped\",[110]],[[120108,120108],\"mapped\",[111]],[[120109,120109],\"mapped\",[112]],[[120110,120110],\"mapped\",[113]],[[120111,120111],\"mapped\",[114]],[[120112,120112],\"mapped\",[115]],[[120113,120113],\"mapped\",[116]],[[120114,120114],\"mapped\",[117]],[[120115,120115],\"mapped\",[118]],[[120116,120116],\"mapped\",[119]],[[120117,120117],\"mapped\",[120]],[[120118,120118],\"mapped\",[121]],[[120119,120119],\"mapped\",[122]],[[120120,120120],\"mapped\",[97]],[[120121,120121],\"mapped\",[98]],[[120122,120122],\"disallowed\"],[[120123,120123],\"mapped\",[100]],[[120124,120124],\"mapped\",[101]],[[120125,120125],\"mapped\",[102]],[[120126,120126],\"mapped\",[103]],[[120127,120127],\"disallowed\"],[[120128,120128],\"mapped\",[105]],[[120129,120129],\"mapped\",[106]],[[120130,120130],\"mapped\",[107]],[[120131,120131],\"mapped\",[108]],[[120132,120132],\"mapped\",[109]],[[120133,120133],\"disallowed\"],[[120134,120134],\"mapped\",[111]],[[120135,120137],\"disallowed\"],[[120138,120138],\"mapped\",[115]],[[120139,120139],\"mapped\",[116]],[[120140,120140],\"mapped\",[117]],[[120141,120141],\"mapped\",[118]],[[120142,120142],\"mapped\",[119]],[[120143,120143],\"mapped\",[120]],[[120144,120144],\"mapped\",[121]],[[120145,120145],\"disallowed\"],[[120146,120146],\"mapped\",[97]],[[120147,120147],\"mapped\",[98]],[[120148,120148],\"mapped\",[99]],[[120149,120149],\"mapped\",[100]],[[120150,120150],\"mapped\",[101]],[[120151,120151],\"mapped\",[102]],[[120152,120152],\"mapped\",[103]],[[120153,120153],\"mapped\",[104]],[[120154,120154],\"mapped\",[105]],[[120155,120155],\"mapped\",[106]],[[120156,120156],\"mapped\",[107]],[[120157,120157],\"mapped\",[108]],[[120158,120158],\"mapped\",[109]],[[120159,120159],\"mapped\",[110]],[[120160,120160],\"mapped\",[111]],[[120161,120161],\"mapped\",[112]],[[120162,120162],\"mapped\",[113]],[[120163,120163],\"mapped\",[114]],[[120164,120164],\"mapped\",[115]],[[120165,120165],\"mapped\",[116]],[[120166,120166],\"mapped\",[117]],[[120167,120167],\"mapped\",[118]],[[120168,120168],\"mapped\",[119]],[[120169,120169],\"mapped\",[120]],[[120170,120170],\"mapped\",[121]],[[120171,120171],\"mapped\",[122]],[[120172,120172],\"mapped\",[97]],[[120173,120173],\"mapped\",[98]],[[120174,120174],\"mapped\",[99]],[[120175,120175],\"mapped\",[100]],[[120176,120176],\"mapped\",[101]],[[120177,120177],\"mapped\",[102]],[[120178,120178],\"mapped\",[103]],[[120179,120179],\"mapped\",[104]],[[120180,120180],\"mapped\",[105]],[[120181,120181],\"mapped\",[106]],[[120182,120182],\"mapped\",[107]],[[120183,120183],\"mapped\",[108]],[[120184,120184],\"mapped\",[109]],[[120185,120185],\"mapped\",[110]],[[120186,120186],\"mapped\",[111]],[[120187,120187],\"mapped\",[112]],[[120188,120188],\"mapped\",[113]],[[120189,120189],\"mapped\",[114]],[[120190,120190],\"mapped\",[115]],[[120191,120191],\"mapped\",[116]],[[120192,120192],\"mapped\",[117]],[[120193,120193],\"mapped\",[118]],[[120194,120194],\"mapped\",[119]],[[120195,120195],\"mapped\",[120]],[[120196,120196],\"mapped\",[121]],[[120197,120197],\"mapped\",[122]],[[120198,120198],\"mapped\",[97]],[[120199,120199],\"mapped\",[98]],[[120200,120200],\"mapped\",[99]],[[120201,120201],\"mapped\",[100]],[[120202,120202],\"mapped\",[101]],[[120203,120203],\"mapped\",[102]],[[120204,120204],\"mapped\",[103]],[[120205,120205],\"mapped\",[104]],[[120206,120206],\"mapped\",[105]],[[120207,120207],\"mapped\",[106]],[[120208,120208],\"mapped\",[107]],[[120209,120209],\"mapped\",[108]],[[120210,120210],\"mapped\",[109]],[[120211,120211],\"mapped\",[110]],[[120212,120212],\"mapped\",[111]],[[120213,120213],\"mapped\",[112]],[[120214,120214],\"mapped\",[113]],[[120215,120215],\"mapped\",[114]],[[120216,120216],\"mapped\",[115]],[[120217,120217],\"mapped\",[116]],[[120218,120218],\"mapped\",[117]],[[120219,120219],\"mapped\",[118]],[[120220,120220],\"mapped\",[119]],[[120221,120221],\"mapped\",[120]],[[120222,120222],\"mapped\",[121]],[[120223,120223],\"mapped\",[122]],[[120224,120224],\"mapped\",[97]],[[120225,120225],\"mapped\",[98]],[[120226,120226],\"mapped\",[99]],[[120227,120227],\"mapped\",[100]],[[120228,120228],\"mapped\",[101]],[[120229,120229],\"mapped\",[102]],[[120230,120230],\"mapped\",[103]],[[120231,120231],\"mapped\",[104]],[[120232,120232],\"mapped\",[105]],[[120233,120233],\"mapped\",[106]],[[120234,120234],\"mapped\",[107]],[[120235,120235],\"mapped\",[108]],[[120236,120236],\"mapped\",[109]],[[120237,120237],\"mapped\",[110]],[[120238,120238],\"mapped\",[111]],[[120239,120239],\"mapped\",[112]],[[120240,120240],\"mapped\",[113]],[[120241,120241],\"mapped\",[114]],[[120242,120242],\"mapped\",[115]],[[120243,120243],\"mapped\",[116]],[[120244,120244],\"mapped\",[117]],[[120245,120245],\"mapped\",[118]],[[120246,120246],\"mapped\",[119]],[[120247,120247],\"mapped\",[120]],[[120248,120248],\"mapped\",[121]],[[120249,120249],\"mapped\",[122]],[[120250,120250],\"mapped\",[97]],[[120251,120251],\"mapped\",[98]],[[120252,120252],\"mapped\",[99]],[[120253,120253],\"mapped\",[100]],[[120254,120254],\"mapped\",[101]],[[120255,120255],\"mapped\",[102]],[[120256,120256],\"mapped\",[103]],[[120257,120257],\"mapped\",[104]],[[120258,120258],\"mapped\",[105]],[[120259,120259],\"mapped\",[106]],[[120260,120260],\"mapped\",[107]],[[120261,120261],\"mapped\",[108]],[[120262,120262],\"mapped\",[109]],[[120263,120263],\"mapped\",[110]],[[120264,120264],\"mapped\",[111]],[[120265,120265],\"mapped\",[112]],[[120266,120266],\"mapped\",[113]],[[120267,120267],\"mapped\",[114]],[[120268,120268],\"mapped\",[115]],[[120269,120269],\"mapped\",[116]],[[120270,120270],\"mapped\",[117]],[[120271,120271],\"mapped\",[118]],[[120272,120272],\"mapped\",[119]],[[120273,120273],\"mapped\",[120]],[[120274,120274],\"mapped\",[121]],[[120275,120275],\"mapped\",[122]],[[120276,120276],\"mapped\",[97]],[[120277,120277],\"mapped\",[98]],[[120278,120278],\"mapped\",[99]],[[120279,120279],\"mapped\",[100]],[[120280,120280],\"mapped\",[101]],[[120281,120281],\"mapped\",[102]],[[120282,120282],\"mapped\",[103]],[[120283,120283],\"mapped\",[104]],[[120284,120284],\"mapped\",[105]],[[120285,120285],\"mapped\",[106]],[[120286,120286],\"mapped\",[107]],[[120287,120287],\"mapped\",[108]],[[120288,120288],\"mapped\",[109]],[[120289,120289],\"mapped\",[110]],[[120290,120290],\"mapped\",[111]],[[120291,120291],\"mapped\",[112]],[[120292,120292],\"mapped\",[113]],[[120293,120293],\"mapped\",[114]],[[120294,120294],\"mapped\",[115]],[[120295,120295],\"mapped\",[116]],[[120296,120296],\"mapped\",[117]],[[120297,120297],\"mapped\",[118]],[[120298,120298],\"mapped\",[119]],[[120299,120299],\"mapped\",[120]],[[120300,120300],\"mapped\",[121]],[[120301,120301],\"mapped\",[122]],[[120302,120302],\"mapped\",[97]],[[120303,120303],\"mapped\",[98]],[[120304,120304],\"mapped\",[99]],[[120305,120305],\"mapped\",[100]],[[120306,120306],\"mapped\",[101]],[[120307,120307],\"mapped\",[102]],[[120308,120308],\"mapped\",[103]],[[120309,120309],\"mapped\",[104]],[[120310,120310],\"mapped\",[105]],[[120311,120311],\"mapped\",[106]],[[120312,120312],\"mapped\",[107]],[[120313,120313],\"mapped\",[108]],[[120314,120314],\"mapped\",[109]],[[120315,120315],\"mapped\",[110]],[[120316,120316],\"mapped\",[111]],[[120317,120317],\"mapped\",[112]],[[120318,120318],\"mapped\",[113]],[[120319,120319],\"mapped\",[114]],[[120320,120320],\"mapped\",[115]],[[120321,120321],\"mapped\",[116]],[[120322,120322],\"mapped\",[117]],[[120323,120323],\"mapped\",[118]],[[120324,120324],\"mapped\",[119]],[[120325,120325],\"mapped\",[120]],[[120326,120326],\"mapped\",[121]],[[120327,120327],\"mapped\",[122]],[[120328,120328],\"mapped\",[97]],[[120329,120329],\"mapped\",[98]],[[120330,120330],\"mapped\",[99]],[[120331,120331],\"mapped\",[100]],[[120332,120332],\"mapped\",[101]],[[120333,120333],\"mapped\",[102]],[[120334,120334],\"mapped\",[103]],[[120335,120335],\"mapped\",[104]],[[120336,120336],\"mapped\",[105]],[[120337,120337],\"mapped\",[106]],[[120338,120338],\"mapped\",[107]],[[120339,120339],\"mapped\",[108]],[[120340,120340],\"mapped\",[109]],[[120341,120341],\"mapped\",[110]],[[120342,120342],\"mapped\",[111]],[[120343,120343],\"mapped\",[112]],[[120344,120344],\"mapped\",[113]],[[120345,120345],\"mapped\",[114]],[[120346,120346],\"mapped\",[115]],[[120347,120347],\"mapped\",[116]],[[120348,120348],\"mapped\",[117]],[[120349,120349],\"mapped\",[118]],[[120350,120350],\"mapped\",[119]],[[120351,120351],\"mapped\",[120]],[[120352,120352],\"mapped\",[121]],[[120353,120353],\"mapped\",[122]],[[120354,120354],\"mapped\",[97]],[[120355,120355],\"mapped\",[98]],[[120356,120356],\"mapped\",[99]],[[120357,120357],\"mapped\",[100]],[[120358,120358],\"mapped\",[101]],[[120359,120359],\"mapped\",[102]],[[120360,120360],\"mapped\",[103]],[[120361,120361],\"mapped\",[104]],[[120362,120362],\"mapped\",[105]],[[120363,120363],\"mapped\",[106]],[[120364,120364],\"mapped\",[107]],[[120365,120365],\"mapped\",[108]],[[120366,120366],\"mapped\",[109]],[[120367,120367],\"mapped\",[110]],[[120368,120368],\"mapped\",[111]],[[120369,120369],\"mapped\",[112]],[[120370,120370],\"mapped\",[113]],[[120371,120371],\"mapped\",[114]],[[120372,120372],\"mapped\",[115]],[[120373,120373],\"mapped\",[116]],[[120374,120374],\"mapped\",[117]],[[120375,120375],\"mapped\",[118]],[[120376,120376],\"mapped\",[119]],[[120377,120377],\"mapped\",[120]],[[120378,120378],\"mapped\",[121]],[[120379,120379],\"mapped\",[122]],[[120380,120380],\"mapped\",[97]],[[120381,120381],\"mapped\",[98]],[[120382,120382],\"mapped\",[99]],[[120383,120383],\"mapped\",[100]],[[120384,120384],\"mapped\",[101]],[[120385,120385],\"mapped\",[102]],[[120386,120386],\"mapped\",[103]],[[120387,120387],\"mapped\",[104]],[[120388,120388],\"mapped\",[105]],[[120389,120389],\"mapped\",[106]],[[120390,120390],\"mapped\",[107]],[[120391,120391],\"mapped\",[108]],[[120392,120392],\"mapped\",[109]],[[120393,120393],\"mapped\",[110]],[[120394,120394],\"mapped\",[111]],[[120395,120395],\"mapped\",[112]],[[120396,120396],\"mapped\",[113]],[[120397,120397],\"mapped\",[114]],[[120398,120398],\"mapped\",[115]],[[120399,120399],\"mapped\",[116]],[[120400,120400],\"mapped\",[117]],[[120401,120401],\"mapped\",[118]],[[120402,120402],\"mapped\",[119]],[[120403,120403],\"mapped\",[120]],[[120404,120404],\"mapped\",[121]],[[120405,120405],\"mapped\",[122]],[[120406,120406],\"mapped\",[97]],[[120407,120407],\"mapped\",[98]],[[120408,120408],\"mapped\",[99]],[[120409,120409],\"mapped\",[100]],[[120410,120410],\"mapped\",[101]],[[120411,120411],\"mapped\",[102]],[[120412,120412],\"mapped\",[103]],[[120413,120413],\"mapped\",[104]],[[120414,120414],\"mapped\",[105]],[[120415,120415],\"mapped\",[106]],[[120416,120416],\"mapped\",[107]],[[120417,120417],\"mapped\",[108]],[[120418,120418],\"mapped\",[109]],[[120419,120419],\"mapped\",[110]],[[120420,120420],\"mapped\",[111]],[[120421,120421],\"mapped\",[112]],[[120422,120422],\"mapped\",[113]],[[120423,120423],\"mapped\",[114]],[[120424,120424],\"mapped\",[115]],[[120425,120425],\"mapped\",[116]],[[120426,120426],\"mapped\",[117]],[[120427,120427],\"mapped\",[118]],[[120428,120428],\"mapped\",[119]],[[120429,120429],\"mapped\",[120]],[[120430,120430],\"mapped\",[121]],[[120431,120431],\"mapped\",[122]],[[120432,120432],\"mapped\",[97]],[[120433,120433],\"mapped\",[98]],[[120434,120434],\"mapped\",[99]],[[120435,120435],\"mapped\",[100]],[[120436,120436],\"mapped\",[101]],[[120437,120437],\"mapped\",[102]],[[120438,120438],\"mapped\",[103]],[[120439,120439],\"mapped\",[104]],[[120440,120440],\"mapped\",[105]],[[120441,120441],\"mapped\",[106]],[[120442,120442],\"mapped\",[107]],[[120443,120443],\"mapped\",[108]],[[120444,120444],\"mapped\",[109]],[[120445,120445],\"mapped\",[110]],[[120446,120446],\"mapped\",[111]],[[120447,120447],\"mapped\",[112]],[[120448,120448],\"mapped\",[113]],[[120449,120449],\"mapped\",[114]],[[120450,120450],\"mapped\",[115]],[[120451,120451],\"mapped\",[116]],[[120452,120452],\"mapped\",[117]],[[120453,120453],\"mapped\",[118]],[[120454,120454],\"mapped\",[119]],[[120455,120455],\"mapped\",[120]],[[120456,120456],\"mapped\",[121]],[[120457,120457],\"mapped\",[122]],[[120458,120458],\"mapped\",[97]],[[120459,120459],\"mapped\",[98]],[[120460,120460],\"mapped\",[99]],[[120461,120461],\"mapped\",[100]],[[120462,120462],\"mapped\",[101]],[[120463,120463],\"mapped\",[102]],[[120464,120464],\"mapped\",[103]],[[120465,120465],\"mapped\",[104]],[[120466,120466],\"mapped\",[105]],[[120467,120467],\"mapped\",[106]],[[120468,120468],\"mapped\",[107]],[[120469,120469],\"mapped\",[108]],[[120470,120470],\"mapped\",[109]],[[120471,120471],\"mapped\",[110]],[[120472,120472],\"mapped\",[111]],[[120473,120473],\"mapped\",[112]],[[120474,120474],\"mapped\",[113]],[[120475,120475],\"mapped\",[114]],[[120476,120476],\"mapped\",[115]],[[120477,120477],\"mapped\",[116]],[[120478,120478],\"mapped\",[117]],[[120479,120479],\"mapped\",[118]],[[120480,120480],\"mapped\",[119]],[[120481,120481],\"mapped\",[120]],[[120482,120482],\"mapped\",[121]],[[120483,120483],\"mapped\",[122]],[[120484,120484],\"mapped\",[305]],[[120485,120485],\"mapped\",[567]],[[120486,120487],\"disallowed\"],[[120488,120488],\"mapped\",[945]],[[120489,120489],\"mapped\",[946]],[[120490,120490],\"mapped\",[947]],[[120491,120491],\"mapped\",[948]],[[120492,120492],\"mapped\",[949]],[[120493,120493],\"mapped\",[950]],[[120494,120494],\"mapped\",[951]],[[120495,120495],\"mapped\",[952]],[[120496,120496],\"mapped\",[953]],[[120497,120497],\"mapped\",[954]],[[120498,120498],\"mapped\",[955]],[[120499,120499],\"mapped\",[956]],[[120500,120500],\"mapped\",[957]],[[120501,120501],\"mapped\",[958]],[[120502,120502],\"mapped\",[959]],[[120503,120503],\"mapped\",[960]],[[120504,120504],\"mapped\",[961]],[[120505,120505],\"mapped\",[952]],[[120506,120506],\"mapped\",[963]],[[120507,120507],\"mapped\",[964]],[[120508,120508],\"mapped\",[965]],[[120509,120509],\"mapped\",[966]],[[120510,120510],\"mapped\",[967]],[[120511,120511],\"mapped\",[968]],[[120512,120512],\"mapped\",[969]],[[120513,120513],\"mapped\",[8711]],[[120514,120514],\"mapped\",[945]],[[120515,120515],\"mapped\",[946]],[[120516,120516],\"mapped\",[947]],[[120517,120517],\"mapped\",[948]],[[120518,120518],\"mapped\",[949]],[[120519,120519],\"mapped\",[950]],[[120520,120520],\"mapped\",[951]],[[120521,120521],\"mapped\",[952]],[[120522,120522],\"mapped\",[953]],[[120523,120523],\"mapped\",[954]],[[120524,120524],\"mapped\",[955]],[[120525,120525],\"mapped\",[956]],[[120526,120526],\"mapped\",[957]],[[120527,120527],\"mapped\",[958]],[[120528,120528],\"mapped\",[959]],[[120529,120529],\"mapped\",[960]],[[120530,120530],\"mapped\",[961]],[[120531,120532],\"mapped\",[963]],[[120533,120533],\"mapped\",[964]],[[120534,120534],\"mapped\",[965]],[[120535,120535],\"mapped\",[966]],[[120536,120536],\"mapped\",[967]],[[120537,120537],\"mapped\",[968]],[[120538,120538],\"mapped\",[969]],[[120539,120539],\"mapped\",[8706]],[[120540,120540],\"mapped\",[949]],[[120541,120541],\"mapped\",[952]],[[120542,120542],\"mapped\",[954]],[[120543,120543],\"mapped\",[966]],[[120544,120544],\"mapped\",[961]],[[120545,120545],\"mapped\",[960]],[[120546,120546],\"mapped\",[945]],[[120547,120547],\"mapped\",[946]],[[120548,120548],\"mapped\",[947]],[[120549,120549],\"mapped\",[948]],[[120550,120550],\"mapped\",[949]],[[120551,120551],\"mapped\",[950]],[[120552,120552],\"mapped\",[951]],[[120553,120553],\"mapped\",[952]],[[120554,120554],\"mapped\",[953]],[[120555,120555],\"mapped\",[954]],[[120556,120556],\"mapped\",[955]],[[120557,120557],\"mapped\",[956]],[[120558,120558],\"mapped\",[957]],[[120559,120559],\"mapped\",[958]],[[120560,120560],\"mapped\",[959]],[[120561,120561],\"mapped\",[960]],[[120562,120562],\"mapped\",[961]],[[120563,120563],\"mapped\",[952]],[[120564,120564],\"mapped\",[963]],[[120565,120565],\"mapped\",[964]],[[120566,120566],\"mapped\",[965]],[[120567,120567],\"mapped\",[966]],[[120568,120568],\"mapped\",[967]],[[120569,120569],\"mapped\",[968]],[[120570,120570],\"mapped\",[969]],[[120571,120571],\"mapped\",[8711]],[[120572,120572],\"mapped\",[945]],[[120573,120573],\"mapped\",[946]],[[120574,120574],\"mapped\",[947]],[[120575,120575],\"mapped\",[948]],[[120576,120576],\"mapped\",[949]],[[120577,120577],\"mapped\",[950]],[[120578,120578],\"mapped\",[951]],[[120579,120579],\"mapped\",[952]],[[120580,120580],\"mapped\",[953]],[[120581,120581],\"mapped\",[954]],[[120582,120582],\"mapped\",[955]],[[120583,120583],\"mapped\",[956]],[[120584,120584],\"mapped\",[957]],[[120585,120585],\"mapped\",[958]],[[120586,120586],\"mapped\",[959]],[[120587,120587],\"mapped\",[960]],[[120588,120588],\"mapped\",[961]],[[120589,120590],\"mapped\",[963]],[[120591,120591],\"mapped\",[964]],[[120592,120592],\"mapped\",[965]],[[120593,120593],\"mapped\",[966]],[[120594,120594],\"mapped\",[967]],[[120595,120595],\"mapped\",[968]],[[120596,120596],\"mapped\",[969]],[[120597,120597],\"mapped\",[8706]],[[120598,120598],\"mapped\",[949]],[[120599,120599],\"mapped\",[952]],[[120600,120600],\"mapped\",[954]],[[120601,120601],\"mapped\",[966]],[[120602,120602],\"mapped\",[961]],[[120603,120603],\"mapped\",[960]],[[120604,120604],\"mapped\",[945]],[[120605,120605],\"mapped\",[946]],[[120606,120606],\"mapped\",[947]],[[120607,120607],\"mapped\",[948]],[[120608,120608],\"mapped\",[949]],[[120609,120609],\"mapped\",[950]],[[120610,120610],\"mapped\",[951]],[[120611,120611],\"mapped\",[952]],[[120612,120612],\"mapped\",[953]],[[120613,120613],\"mapped\",[954]],[[120614,120614],\"mapped\",[955]],[[120615,120615],\"mapped\",[956]],[[120616,120616],\"mapped\",[957]],[[120617,120617],\"mapped\",[958]],[[120618,120618],\"mapped\",[959]],[[120619,120619],\"mapped\",[960]],[[120620,120620],\"mapped\",[961]],[[120621,120621],\"mapped\",[952]],[[120622,120622],\"mapped\",[963]],[[120623,120623],\"mapped\",[964]],[[120624,120624],\"mapped\",[965]],[[120625,120625],\"mapped\",[966]],[[120626,120626],\"mapped\",[967]],[[120627,120627],\"mapped\",[968]],[[120628,120628],\"mapped\",[969]],[[120629,120629],\"mapped\",[8711]],[[120630,120630],\"mapped\",[945]],[[120631,120631],\"mapped\",[946]],[[120632,120632],\"mapped\",[947]],[[120633,120633],\"mapped\",[948]],[[120634,120634],\"mapped\",[949]],[[120635,120635],\"mapped\",[950]],[[120636,120636],\"mapped\",[951]],[[120637,120637],\"mapped\",[952]],[[120638,120638],\"mapped\",[953]],[[120639,120639],\"mapped\",[954]],[[120640,120640],\"mapped\",[955]],[[120641,120641],\"mapped\",[956]],[[120642,120642],\"mapped\",[957]],[[120643,120643],\"mapped\",[958]],[[120644,120644],\"mapped\",[959]],[[120645,120645],\"mapped\",[960]],[[120646,120646],\"mapped\",[961]],[[120647,120648],\"mapped\",[963]],[[120649,120649],\"mapped\",[964]],[[120650,120650],\"mapped\",[965]],[[120651,120651],\"mapped\",[966]],[[120652,120652],\"mapped\",[967]],[[120653,120653],\"mapped\",[968]],[[120654,120654],\"mapped\",[969]],[[120655,120655],\"mapped\",[8706]],[[120656,120656],\"mapped\",[949]],[[120657,120657],\"mapped\",[952]],[[120658,120658],\"mapped\",[954]],[[120659,120659],\"mapped\",[966]],[[120660,120660],\"mapped\",[961]],[[120661,120661],\"mapped\",[960]],[[120662,120662],\"mapped\",[945]],[[120663,120663],\"mapped\",[946]],[[120664,120664],\"mapped\",[947]],[[120665,120665],\"mapped\",[948]],[[120666,120666],\"mapped\",[949]],[[120667,120667],\"mapped\",[950]],[[120668,120668],\"mapped\",[951]],[[120669,120669],\"mapped\",[952]],[[120670,120670],\"mapped\",[953]],[[120671,120671],\"mapped\",[954]],[[120672,120672],\"mapped\",[955]],[[120673,120673],\"mapped\",[956]],[[120674,120674],\"mapped\",[957]],[[120675,120675],\"mapped\",[958]],[[120676,120676],\"mapped\",[959]],[[120677,120677],\"mapped\",[960]],[[120678,120678],\"mapped\",[961]],[[120679,120679],\"mapped\",[952]],[[120680,120680],\"mapped\",[963]],[[120681,120681],\"mapped\",[964]],[[120682,120682],\"mapped\",[965]],[[120683,120683],\"mapped\",[966]],[[120684,120684],\"mapped\",[967]],[[120685,120685],\"mapped\",[968]],[[120686,120686],\"mapped\",[969]],[[120687,120687],\"mapped\",[8711]],[[120688,120688],\"mapped\",[945]],[[120689,120689],\"mapped\",[946]],[[120690,120690],\"mapped\",[947]],[[120691,120691],\"mapped\",[948]],[[120692,120692],\"mapped\",[949]],[[120693,120693],\"mapped\",[950]],[[120694,120694],\"mapped\",[951]],[[120695,120695],\"mapped\",[952]],[[120696,120696],\"mapped\",[953]],[[120697,120697],\"mapped\",[954]],[[120698,120698],\"mapped\",[955]],[[120699,120699],\"mapped\",[956]],[[120700,120700],\"mapped\",[957]],[[120701,120701],\"mapped\",[958]],[[120702,120702],\"mapped\",[959]],[[120703,120703],\"mapped\",[960]],[[120704,120704],\"mapped\",[961]],[[120705,120706],\"mapped\",[963]],[[120707,120707],\"mapped\",[964]],[[120708,120708],\"mapped\",[965]],[[120709,120709],\"mapped\",[966]],[[120710,120710],\"mapped\",[967]],[[120711,120711],\"mapped\",[968]],[[120712,120712],\"mapped\",[969]],[[120713,120713],\"mapped\",[8706]],[[120714,120714],\"mapped\",[949]],[[120715,120715],\"mapped\",[952]],[[120716,120716],\"mapped\",[954]],[[120717,120717],\"mapped\",[966]],[[120718,120718],\"mapped\",[961]],[[120719,120719],\"mapped\",[960]],[[120720,120720],\"mapped\",[945]],[[120721,120721],\"mapped\",[946]],[[120722,120722],\"mapped\",[947]],[[120723,120723],\"mapped\",[948]],[[120724,120724],\"mapped\",[949]],[[120725,120725],\"mapped\",[950]],[[120726,120726],\"mapped\",[951]],[[120727,120727],\"mapped\",[952]],[[120728,120728],\"mapped\",[953]],[[120729,120729],\"mapped\",[954]],[[120730,120730],\"mapped\",[955]],[[120731,120731],\"mapped\",[956]],[[120732,120732],\"mapped\",[957]],[[120733,120733],\"mapped\",[958]],[[120734,120734],\"mapped\",[959]],[[120735,120735],\"mapped\",[960]],[[120736,120736],\"mapped\",[961]],[[120737,120737],\"mapped\",[952]],[[120738,120738],\"mapped\",[963]],[[120739,120739],\"mapped\",[964]],[[120740,120740],\"mapped\",[965]],[[120741,120741],\"mapped\",[966]],[[120742,120742],\"mapped\",[967]],[[120743,120743],\"mapped\",[968]],[[120744,120744],\"mapped\",[969]],[[120745,120745],\"mapped\",[8711]],[[120746,120746],\"mapped\",[945]],[[120747,120747],\"mapped\",[946]],[[120748,120748],\"mapped\",[947]],[[120749,120749],\"mapped\",[948]],[[120750,120750],\"mapped\",[949]],[[120751,120751],\"mapped\",[950]],[[120752,120752],\"mapped\",[951]],[[120753,120753],\"mapped\",[952]],[[120754,120754],\"mapped\",[953]],[[120755,120755],\"mapped\",[954]],[[120756,120756],\"mapped\",[955]],[[120757,120757],\"mapped\",[956]],[[120758,120758],\"mapped\",[957]],[[120759,120759],\"mapped\",[958]],[[120760,120760],\"mapped\",[959]],[[120761,120761],\"mapped\",[960]],[[120762,120762],\"mapped\",[961]],[[120763,120764],\"mapped\",[963]],[[120765,120765],\"mapped\",[964]],[[120766,120766],\"mapped\",[965]],[[120767,120767],\"mapped\",[966]],[[120768,120768],\"mapped\",[967]],[[120769,120769],\"mapped\",[968]],[[120770,120770],\"mapped\",[969]],[[120771,120771],\"mapped\",[8706]],[[120772,120772],\"mapped\",[949]],[[120773,120773],\"mapped\",[952]],[[120774,120774],\"mapped\",[954]],[[120775,120775],\"mapped\",[966]],[[120776,120776],\"mapped\",[961]],[[120777,120777],\"mapped\",[960]],[[120778,120779],\"mapped\",[989]],[[120780,120781],\"disallowed\"],[[120782,120782],\"mapped\",[48]],[[120783,120783],\"mapped\",[49]],[[120784,120784],\"mapped\",[50]],[[120785,120785],\"mapped\",[51]],[[120786,120786],\"mapped\",[52]],[[120787,120787],\"mapped\",[53]],[[120788,120788],\"mapped\",[54]],[[120789,120789],\"mapped\",[55]],[[120790,120790],\"mapped\",[56]],[[120791,120791],\"mapped\",[57]],[[120792,120792],\"mapped\",[48]],[[120793,120793],\"mapped\",[49]],[[120794,120794],\"mapped\",[50]],[[120795,120795],\"mapped\",[51]],[[120796,120796],\"mapped\",[52]],[[120797,120797],\"mapped\",[53]],[[120798,120798],\"mapped\",[54]],[[120799,120799],\"mapped\",[55]],[[120800,120800],\"mapped\",[56]],[[120801,120801],\"mapped\",[57]],[[120802,120802],\"mapped\",[48]],[[120803,120803],\"mapped\",[49]],[[120804,120804],\"mapped\",[50]],[[120805,120805],\"mapped\",[51]],[[120806,120806],\"mapped\",[52]],[[120807,120807],\"mapped\",[53]],[[120808,120808],\"mapped\",[54]],[[120809,120809],\"mapped\",[55]],[[120810,120810],\"mapped\",[56]],[[120811,120811],\"mapped\",[57]],[[120812,120812],\"mapped\",[48]],[[120813,120813],\"mapped\",[49]],[[120814,120814],\"mapped\",[50]],[[120815,120815],\"mapped\",[51]],[[120816,120816],\"mapped\",[52]],[[120817,120817],\"mapped\",[53]],[[120818,120818],\"mapped\",[54]],[[120819,120819],\"mapped\",[55]],[[120820,120820],\"mapped\",[56]],[[120821,120821],\"mapped\",[57]],[[120822,120822],\"mapped\",[48]],[[120823,120823],\"mapped\",[49]],[[120824,120824],\"mapped\",[50]],[[120825,120825],\"mapped\",[51]],[[120826,120826],\"mapped\",[52]],[[120827,120827],\"mapped\",[53]],[[120828,120828],\"mapped\",[54]],[[120829,120829],\"mapped\",[55]],[[120830,120830],\"mapped\",[56]],[[120831,120831],\"mapped\",[57]],[[120832,121343],\"valid\",[],\"NV8\"],[[121344,121398],\"valid\"],[[121399,121402],\"valid\",[],\"NV8\"],[[121403,121452],\"valid\"],[[121453,121460],\"valid\",[],\"NV8\"],[[121461,121461],\"valid\"],[[121462,121475],\"valid\",[],\"NV8\"],[[121476,121476],\"valid\"],[[121477,121483],\"valid\",[],\"NV8\"],[[121484,121498],\"disallowed\"],[[121499,121503],\"valid\"],[[121504,121504],\"disallowed\"],[[121505,121519],\"valid\"],[[121520,124927],\"disallowed\"],[[124928,125124],\"valid\"],[[125125,125126],\"disallowed\"],[[125127,125135],\"valid\",[],\"NV8\"],[[125136,125142],\"valid\"],[[125143,126463],\"disallowed\"],[[126464,126464],\"mapped\",[1575]],[[126465,126465],\"mapped\",[1576]],[[126466,126466],\"mapped\",[1580]],[[126467,126467],\"mapped\",[1583]],[[126468,126468],\"disallowed\"],[[126469,126469],\"mapped\",[1608]],[[126470,126470],\"mapped\",[1586]],[[126471,126471],\"mapped\",[1581]],[[126472,126472],\"mapped\",[1591]],[[126473,126473],\"mapped\",[1610]],[[126474,126474],\"mapped\",[1603]],[[126475,126475],\"mapped\",[1604]],[[126476,126476],\"mapped\",[1605]],[[126477,126477],\"mapped\",[1606]],[[126478,126478],\"mapped\",[1587]],[[126479,126479],\"mapped\",[1593]],[[126480,126480],\"mapped\",[1601]],[[126481,126481],\"mapped\",[1589]],[[126482,126482],\"mapped\",[1602]],[[126483,126483],\"mapped\",[1585]],[[126484,126484],\"mapped\",[1588]],[[126485,126485],\"mapped\",[1578]],[[126486,126486],\"mapped\",[1579]],[[126487,126487],\"mapped\",[1582]],[[126488,126488],\"mapped\",[1584]],[[126489,126489],\"mapped\",[1590]],[[126490,126490],\"mapped\",[1592]],[[126491,126491],\"mapped\",[1594]],[[126492,126492],\"mapped\",[1646]],[[126493,126493],\"mapped\",[1722]],[[126494,126494],\"mapped\",[1697]],[[126495,126495],\"mapped\",[1647]],[[126496,126496],\"disallowed\"],[[126497,126497],\"mapped\",[1576]],[[126498,126498],\"mapped\",[1580]],[[126499,126499],\"disallowed\"],[[126500,126500],\"mapped\",[1607]],[[126501,126502],\"disallowed\"],[[126503,126503],\"mapped\",[1581]],[[126504,126504],\"disallowed\"],[[126505,126505],\"mapped\",[1610]],[[126506,126506],\"mapped\",[1603]],[[126507,126507],\"mapped\",[1604]],[[126508,126508],\"mapped\",[1605]],[[126509,126509],\"mapped\",[1606]],[[126510,126510],\"mapped\",[1587]],[[126511,126511],\"mapped\",[1593]],[[126512,126512],\"mapped\",[1601]],[[126513,126513],\"mapped\",[1589]],[[126514,126514],\"mapped\",[1602]],[[126515,126515],\"disallowed\"],[[126516,126516],\"mapped\",[1588]],[[126517,126517],\"mapped\",[1578]],[[126518,126518],\"mapped\",[1579]],[[126519,126519],\"mapped\",[1582]],[[126520,126520],\"disallowed\"],[[126521,126521],\"mapped\",[1590]],[[126522,126522],\"disallowed\"],[[126523,126523],\"mapped\",[1594]],[[126524,126529],\"disallowed\"],[[126530,126530],\"mapped\",[1580]],[[126531,126534],\"disallowed\"],[[126535,126535],\"mapped\",[1581]],[[126536,126536],\"disallowed\"],[[126537,126537],\"mapped\",[1610]],[[126538,126538],\"disallowed\"],[[126539,126539],\"mapped\",[1604]],[[126540,126540],\"disallowed\"],[[126541,126541],\"mapped\",[1606]],[[126542,126542],\"mapped\",[1587]],[[126543,126543],\"mapped\",[1593]],[[126544,126544],\"disallowed\"],[[126545,126545],\"mapped\",[1589]],[[126546,126546],\"mapped\",[1602]],[[126547,126547],\"disallowed\"],[[126548,126548],\"mapped\",[1588]],[[126549,126550],\"disallowed\"],[[126551,126551],\"mapped\",[1582]],[[126552,126552],\"disallowed\"],[[126553,126553],\"mapped\",[1590]],[[126554,126554],\"disallowed\"],[[126555,126555],\"mapped\",[1594]],[[126556,126556],\"disallowed\"],[[126557,126557],\"mapped\",[1722]],[[126558,126558],\"disallowed\"],[[126559,126559],\"mapped\",[1647]],[[126560,126560],\"disallowed\"],[[126561,126561],\"mapped\",[1576]],[[126562,126562],\"mapped\",[1580]],[[126563,126563],\"disallowed\"],[[126564,126564],\"mapped\",[1607]],[[126565,126566],\"disallowed\"],[[126567,126567],\"mapped\",[1581]],[[126568,126568],\"mapped\",[1591]],[[126569,126569],\"mapped\",[1610]],[[126570,126570],\"mapped\",[1603]],[[126571,126571],\"disallowed\"],[[126572,126572],\"mapped\",[1605]],[[126573,126573],\"mapped\",[1606]],[[126574,126574],\"mapped\",[1587]],[[126575,126575],\"mapped\",[1593]],[[126576,126576],\"mapped\",[1601]],[[126577,126577],\"mapped\",[1589]],[[126578,126578],\"mapped\",[1602]],[[126579,126579],\"disallowed\"],[[126580,126580],\"mapped\",[1588]],[[126581,126581],\"mapped\",[1578]],[[126582,126582],\"mapped\",[1579]],[[126583,126583],\"mapped\",[1582]],[[126584,126584],\"disallowed\"],[[126585,126585],\"mapped\",[1590]],[[126586,126586],\"mapped\",[1592]],[[126587,126587],\"mapped\",[1594]],[[126588,126588],\"mapped\",[1646]],[[126589,126589],\"disallowed\"],[[126590,126590],\"mapped\",[1697]],[[126591,126591],\"disallowed\"],[[126592,126592],\"mapped\",[1575]],[[126593,126593],\"mapped\",[1576]],[[126594,126594],\"mapped\",[1580]],[[126595,126595],\"mapped\",[1583]],[[126596,126596],\"mapped\",[1607]],[[126597,126597],\"mapped\",[1608]],[[126598,126598],\"mapped\",[1586]],[[126599,126599],\"mapped\",[1581]],[[126600,126600],\"mapped\",[1591]],[[126601,126601],\"mapped\",[1610]],[[126602,126602],\"disallowed\"],[[126603,126603],\"mapped\",[1604]],[[126604,126604],\"mapped\",[1605]],[[126605,126605],\"mapped\",[1606]],[[126606,126606],\"mapped\",[1587]],[[126607,126607],\"mapped\",[1593]],[[126608,126608],\"mapped\",[1601]],[[126609,126609],\"mapped\",[1589]],[[126610,126610],\"mapped\",[1602]],[[126611,126611],\"mapped\",[1585]],[[126612,126612],\"mapped\",[1588]],[[126613,126613],\"mapped\",[1578]],[[126614,126614],\"mapped\",[1579]],[[126615,126615],\"mapped\",[1582]],[[126616,126616],\"mapped\",[1584]],[[126617,126617],\"mapped\",[1590]],[[126618,126618],\"mapped\",[1592]],[[126619,126619],\"mapped\",[1594]],[[126620,126624],\"disallowed\"],[[126625,126625],\"mapped\",[1576]],[[126626,126626],\"mapped\",[1580]],[[126627,126627],\"mapped\",[1583]],[[126628,126628],\"disallowed\"],[[126629,126629],\"mapped\",[1608]],[[126630,126630],\"mapped\",[1586]],[[126631,126631],\"mapped\",[1581]],[[126632,126632],\"mapped\",[1591]],[[126633,126633],\"mapped\",[1610]],[[126634,126634],\"disallowed\"],[[126635,126635],\"mapped\",[1604]],[[126636,126636],\"mapped\",[1605]],[[126637,126637],\"mapped\",[1606]],[[126638,126638],\"mapped\",[1587]],[[126639,126639],\"mapped\",[1593]],[[126640,126640],\"mapped\",[1601]],[[126641,126641],\"mapped\",[1589]],[[126642,126642],\"mapped\",[1602]],[[126643,126643],\"mapped\",[1585]],[[126644,126644],\"mapped\",[1588]],[[126645,126645],\"mapped\",[1578]],[[126646,126646],\"mapped\",[1579]],[[126647,126647],\"mapped\",[1582]],[[126648,126648],\"mapped\",[1584]],[[126649,126649],\"mapped\",[1590]],[[126650,126650],\"mapped\",[1592]],[[126651,126651],\"mapped\",[1594]],[[126652,126703],\"disallowed\"],[[126704,126705],\"valid\",[],\"NV8\"],[[126706,126975],\"disallowed\"],[[126976,127019],\"valid\",[],\"NV8\"],[[127020,127023],\"disallowed\"],[[127024,127123],\"valid\",[],\"NV8\"],[[127124,127135],\"disallowed\"],[[127136,127150],\"valid\",[],\"NV8\"],[[127151,127152],\"disallowed\"],[[127153,127166],\"valid\",[],\"NV8\"],[[127167,127167],\"valid\",[],\"NV8\"],[[127168,127168],\"disallowed\"],[[127169,127183],\"valid\",[],\"NV8\"],[[127184,127184],\"disallowed\"],[[127185,127199],\"valid\",[],\"NV8\"],[[127200,127221],\"valid\",[],\"NV8\"],[[127222,127231],\"disallowed\"],[[127232,127232],\"disallowed\"],[[127233,127233],\"disallowed_STD3_mapped\",[48,44]],[[127234,127234],\"disallowed_STD3_mapped\",[49,44]],[[127235,127235],\"disallowed_STD3_mapped\",[50,44]],[[127236,127236],\"disallowed_STD3_mapped\",[51,44]],[[127237,127237],\"disallowed_STD3_mapped\",[52,44]],[[127238,127238],\"disallowed_STD3_mapped\",[53,44]],[[127239,127239],\"disallowed_STD3_mapped\",[54,44]],[[127240,127240],\"disallowed_STD3_mapped\",[55,44]],[[127241,127241],\"disallowed_STD3_mapped\",[56,44]],[[127242,127242],\"disallowed_STD3_mapped\",[57,44]],[[127243,127244],\"valid\",[],\"NV8\"],[[127245,127247],\"disallowed\"],[[127248,127248],\"disallowed_STD3_mapped\",[40,97,41]],[[127249,127249],\"disallowed_STD3_mapped\",[40,98,41]],[[127250,127250],\"disallowed_STD3_mapped\",[40,99,41]],[[127251,127251],\"disallowed_STD3_mapped\",[40,100,41]],[[127252,127252],\"disallowed_STD3_mapped\",[40,101,41]],[[127253,127253],\"disallowed_STD3_mapped\",[40,102,41]],[[127254,127254],\"disallowed_STD3_mapped\",[40,103,41]],[[127255,127255],\"disallowed_STD3_mapped\",[40,104,41]],[[127256,127256],\"disallowed_STD3_mapped\",[40,105,41]],[[127257,127257],\"disallowed_STD3_mapped\",[40,106,41]],[[127258,127258],\"disallowed_STD3_mapped\",[40,107,41]],[[127259,127259],\"disallowed_STD3_mapped\",[40,108,41]],[[127260,127260],\"disallowed_STD3_mapped\",[40,109,41]],[[127261,127261],\"disallowed_STD3_mapped\",[40,110,41]],[[127262,127262],\"disallowed_STD3_mapped\",[40,111,41]],[[127263,127263],\"disallowed_STD3_mapped\",[40,112,41]],[[127264,127264],\"disallowed_STD3_mapped\",[40,113,41]],[[127265,127265],\"disallowed_STD3_mapped\",[40,114,41]],[[127266,127266],\"disallowed_STD3_mapped\",[40,115,41]],[[127267,127267],\"disallowed_STD3_mapped\",[40,116,41]],[[127268,127268],\"disallowed_STD3_mapped\",[40,117,41]],[[127269,127269],\"disallowed_STD3_mapped\",[40,118,41]],[[127270,127270],\"disallowed_STD3_mapped\",[40,119,41]],[[127271,127271],\"disallowed_STD3_mapped\",[40,120,41]],[[127272,127272],\"disallowed_STD3_mapped\",[40,121,41]],[[127273,127273],\"disallowed_STD3_mapped\",[40,122,41]],[[127274,127274],\"mapped\",[12308,115,12309]],[[127275,127275],\"mapped\",[99]],[[127276,127276],\"mapped\",[114]],[[127277,127277],\"mapped\",[99,100]],[[127278,127278],\"mapped\",[119,122]],[[127279,127279],\"disallowed\"],[[127280,127280],\"mapped\",[97]],[[127281,127281],\"mapped\",[98]],[[127282,127282],\"mapped\",[99]],[[127283,127283],\"mapped\",[100]],[[127284,127284],\"mapped\",[101]],[[127285,127285],\"mapped\",[102]],[[127286,127286],\"mapped\",[103]],[[127287,127287],\"mapped\",[104]],[[127288,127288],\"mapped\",[105]],[[127289,127289],\"mapped\",[106]],[[127290,127290],\"mapped\",[107]],[[127291,127291],\"mapped\",[108]],[[127292,127292],\"mapped\",[109]],[[127293,127293],\"mapped\",[110]],[[127294,127294],\"mapped\",[111]],[[127295,127295],\"mapped\",[112]],[[127296,127296],\"mapped\",[113]],[[127297,127297],\"mapped\",[114]],[[127298,127298],\"mapped\",[115]],[[127299,127299],\"mapped\",[116]],[[127300,127300],\"mapped\",[117]],[[127301,127301],\"mapped\",[118]],[[127302,127302],\"mapped\",[119]],[[127303,127303],\"mapped\",[120]],[[127304,127304],\"mapped\",[121]],[[127305,127305],\"mapped\",[122]],[[127306,127306],\"mapped\",[104,118]],[[127307,127307],\"mapped\",[109,118]],[[127308,127308],\"mapped\",[115,100]],[[127309,127309],\"mapped\",[115,115]],[[127310,127310],\"mapped\",[112,112,118]],[[127311,127311],\"mapped\",[119,99]],[[127312,127318],\"valid\",[],\"NV8\"],[[127319,127319],\"valid\",[],\"NV8\"],[[127320,127326],\"valid\",[],\"NV8\"],[[127327,127327],\"valid\",[],\"NV8\"],[[127328,127337],\"valid\",[],\"NV8\"],[[127338,127338],\"mapped\",[109,99]],[[127339,127339],\"mapped\",[109,100]],[[127340,127343],\"disallowed\"],[[127344,127352],\"valid\",[],\"NV8\"],[[127353,127353],\"valid\",[],\"NV8\"],[[127354,127354],\"valid\",[],\"NV8\"],[[127355,127356],\"valid\",[],\"NV8\"],[[127357,127358],\"valid\",[],\"NV8\"],[[127359,127359],\"valid\",[],\"NV8\"],[[127360,127369],\"valid\",[],\"NV8\"],[[127370,127373],\"valid\",[],\"NV8\"],[[127374,127375],\"valid\",[],\"NV8\"],[[127376,127376],\"mapped\",[100,106]],[[127377,127386],\"valid\",[],\"NV8\"],[[127387,127461],\"disallowed\"],[[127462,127487],\"valid\",[],\"NV8\"],[[127488,127488],\"mapped\",[12411,12363]],[[127489,127489],\"mapped\",[12467,12467]],[[127490,127490],\"mapped\",[12469]],[[127491,127503],\"disallowed\"],[[127504,127504],\"mapped\",[25163]],[[127505,127505],\"mapped\",[23383]],[[127506,127506],\"mapped\",[21452]],[[127507,127507],\"mapped\",[12487]],[[127508,127508],\"mapped\",[20108]],[[127509,127509],\"mapped\",[22810]],[[127510,127510],\"mapped\",[35299]],[[127511,127511],\"mapped\",[22825]],[[127512,127512],\"mapped\",[20132]],[[127513,127513],\"mapped\",[26144]],[[127514,127514],\"mapped\",[28961]],[[127515,127515],\"mapped\",[26009]],[[127516,127516],\"mapped\",[21069]],[[127517,127517],\"mapped\",[24460]],[[127518,127518],\"mapped\",[20877]],[[127519,127519],\"mapped\",[26032]],[[127520,127520],\"mapped\",[21021]],[[127521,127521],\"mapped\",[32066]],[[127522,127522],\"mapped\",[29983]],[[127523,127523],\"mapped\",[36009]],[[127524,127524],\"mapped\",[22768]],[[127525,127525],\"mapped\",[21561]],[[127526,127526],\"mapped\",[28436]],[[127527,127527],\"mapped\",[25237]],[[127528,127528],\"mapped\",[25429]],[[127529,127529],\"mapped\",[19968]],[[127530,127530],\"mapped\",[19977]],[[127531,127531],\"mapped\",[36938]],[[127532,127532],\"mapped\",[24038]],[[127533,127533],\"mapped\",[20013]],[[127534,127534],\"mapped\",[21491]],[[127535,127535],\"mapped\",[25351]],[[127536,127536],\"mapped\",[36208]],[[127537,127537],\"mapped\",[25171]],[[127538,127538],\"mapped\",[31105]],[[127539,127539],\"mapped\",[31354]],[[127540,127540],\"mapped\",[21512]],[[127541,127541],\"mapped\",[28288]],[[127542,127542],\"mapped\",[26377]],[[127543,127543],\"mapped\",[26376]],[[127544,127544],\"mapped\",[30003]],[[127545,127545],\"mapped\",[21106]],[[127546,127546],\"mapped\",[21942]],[[127547,127551],\"disallowed\"],[[127552,127552],\"mapped\",[12308,26412,12309]],[[127553,127553],\"mapped\",[12308,19977,12309]],[[127554,127554],\"mapped\",[12308,20108,12309]],[[127555,127555],\"mapped\",[12308,23433,12309]],[[127556,127556],\"mapped\",[12308,28857,12309]],[[127557,127557],\"mapped\",[12308,25171,12309]],[[127558,127558],\"mapped\",[12308,30423,12309]],[[127559,127559],\"mapped\",[12308,21213,12309]],[[127560,127560],\"mapped\",[12308,25943,12309]],[[127561,127567],\"disallowed\"],[[127568,127568],\"mapped\",[24471]],[[127569,127569],\"mapped\",[21487]],[[127570,127743],\"disallowed\"],[[127744,127776],\"valid\",[],\"NV8\"],[[127777,127788],\"valid\",[],\"NV8\"],[[127789,127791],\"valid\",[],\"NV8\"],[[127792,127797],\"valid\",[],\"NV8\"],[[127798,127798],\"valid\",[],\"NV8\"],[[127799,127868],\"valid\",[],\"NV8\"],[[127869,127869],\"valid\",[],\"NV8\"],[[127870,127871],\"valid\",[],\"NV8\"],[[127872,127891],\"valid\",[],\"NV8\"],[[127892,127903],\"valid\",[],\"NV8\"],[[127904,127940],\"valid\",[],\"NV8\"],[[127941,127941],\"valid\",[],\"NV8\"],[[127942,127946],\"valid\",[],\"NV8\"],[[127947,127950],\"valid\",[],\"NV8\"],[[127951,127955],\"valid\",[],\"NV8\"],[[127956,127967],\"valid\",[],\"NV8\"],[[127968,127984],\"valid\",[],\"NV8\"],[[127985,127991],\"valid\",[],\"NV8\"],[[127992,127999],\"valid\",[],\"NV8\"],[[128000,128062],\"valid\",[],\"NV8\"],[[128063,128063],\"valid\",[],\"NV8\"],[[128064,128064],\"valid\",[],\"NV8\"],[[128065,128065],\"valid\",[],\"NV8\"],[[128066,128247],\"valid\",[],\"NV8\"],[[128248,128248],\"valid\",[],\"NV8\"],[[128249,128252],\"valid\",[],\"NV8\"],[[128253,128254],\"valid\",[],\"NV8\"],[[128255,128255],\"valid\",[],\"NV8\"],[[128256,128317],\"valid\",[],\"NV8\"],[[128318,128319],\"valid\",[],\"NV8\"],[[128320,128323],\"valid\",[],\"NV8\"],[[128324,128330],\"valid\",[],\"NV8\"],[[128331,128335],\"valid\",[],\"NV8\"],[[128336,128359],\"valid\",[],\"NV8\"],[[128360,128377],\"valid\",[],\"NV8\"],[[128378,128378],\"disallowed\"],[[128379,128419],\"valid\",[],\"NV8\"],[[128420,128420],\"disallowed\"],[[128421,128506],\"valid\",[],\"NV8\"],[[128507,128511],\"valid\",[],\"NV8\"],[[128512,128512],\"valid\",[],\"NV8\"],[[128513,128528],\"valid\",[],\"NV8\"],[[128529,128529],\"valid\",[],\"NV8\"],[[128530,128532],\"valid\",[],\"NV8\"],[[128533,128533],\"valid\",[],\"NV8\"],[[128534,128534],\"valid\",[],\"NV8\"],[[128535,128535],\"valid\",[],\"NV8\"],[[128536,128536],\"valid\",[],\"NV8\"],[[128537,128537],\"valid\",[],\"NV8\"],[[128538,128538],\"valid\",[],\"NV8\"],[[128539,128539],\"valid\",[],\"NV8\"],[[128540,128542],\"valid\",[],\"NV8\"],[[128543,128543],\"valid\",[],\"NV8\"],[[128544,128549],\"valid\",[],\"NV8\"],[[128550,128551],\"valid\",[],\"NV8\"],[[128552,128555],\"valid\",[],\"NV8\"],[[128556,128556],\"valid\",[],\"NV8\"],[[128557,128557],\"valid\",[],\"NV8\"],[[128558,128559],\"valid\",[],\"NV8\"],[[128560,128563],\"valid\",[],\"NV8\"],[[128564,128564],\"valid\",[],\"NV8\"],[[128565,128576],\"valid\",[],\"NV8\"],[[128577,128578],\"valid\",[],\"NV8\"],[[128579,128580],\"valid\",[],\"NV8\"],[[128581,128591],\"valid\",[],\"NV8\"],[[128592,128639],\"valid\",[],\"NV8\"],[[128640,128709],\"valid\",[],\"NV8\"],[[128710,128719],\"valid\",[],\"NV8\"],[[128720,128720],\"valid\",[],\"NV8\"],[[128721,128735],\"disallowed\"],[[128736,128748],\"valid\",[],\"NV8\"],[[128749,128751],\"disallowed\"],[[128752,128755],\"valid\",[],\"NV8\"],[[128756,128767],\"disallowed\"],[[128768,128883],\"valid\",[],\"NV8\"],[[128884,128895],\"disallowed\"],[[128896,128980],\"valid\",[],\"NV8\"],[[128981,129023],\"disallowed\"],[[129024,129035],\"valid\",[],\"NV8\"],[[129036,129039],\"disallowed\"],[[129040,129095],\"valid\",[],\"NV8\"],[[129096,129103],\"disallowed\"],[[129104,129113],\"valid\",[],\"NV8\"],[[129114,129119],\"disallowed\"],[[129120,129159],\"valid\",[],\"NV8\"],[[129160,129167],\"disallowed\"],[[129168,129197],\"valid\",[],\"NV8\"],[[129198,129295],\"disallowed\"],[[129296,129304],\"valid\",[],\"NV8\"],[[129305,129407],\"disallowed\"],[[129408,129412],\"valid\",[],\"NV8\"],[[129413,129471],\"disallowed\"],[[129472,129472],\"valid\",[],\"NV8\"],[[129473,131069],\"disallowed\"],[[131070,131071],\"disallowed\"],[[131072,173782],\"valid\"],[[173783,173823],\"disallowed\"],[[173824,177972],\"valid\"],[[177973,177983],\"disallowed\"],[[177984,178205],\"valid\"],[[178206,178207],\"disallowed\"],[[178208,183969],\"valid\"],[[183970,194559],\"disallowed\"],[[194560,194560],\"mapped\",[20029]],[[194561,194561],\"mapped\",[20024]],[[194562,194562],\"mapped\",[20033]],[[194563,194563],\"mapped\",[131362]],[[194564,194564],\"mapped\",[20320]],[[194565,194565],\"mapped\",[20398]],[[194566,194566],\"mapped\",[20411]],[[194567,194567],\"mapped\",[20482]],[[194568,194568],\"mapped\",[20602]],[[194569,194569],\"mapped\",[20633]],[[194570,194570],\"mapped\",[20711]],[[194571,194571],\"mapped\",[20687]],[[194572,194572],\"mapped\",[13470]],[[194573,194573],\"mapped\",[132666]],[[194574,194574],\"mapped\",[20813]],[[194575,194575],\"mapped\",[20820]],[[194576,194576],\"mapped\",[20836]],[[194577,194577],\"mapped\",[20855]],[[194578,194578],\"mapped\",[132380]],[[194579,194579],\"mapped\",[13497]],[[194580,194580],\"mapped\",[20839]],[[194581,194581],\"mapped\",[20877]],[[194582,194582],\"mapped\",[132427]],[[194583,194583],\"mapped\",[20887]],[[194584,194584],\"mapped\",[20900]],[[194585,194585],\"mapped\",[20172]],[[194586,194586],\"mapped\",[20908]],[[194587,194587],\"mapped\",[20917]],[[194588,194588],\"mapped\",[168415]],[[194589,194589],\"mapped\",[20981]],[[194590,194590],\"mapped\",[20995]],[[194591,194591],\"mapped\",[13535]],[[194592,194592],\"mapped\",[21051]],[[194593,194593],\"mapped\",[21062]],[[194594,194594],\"mapped\",[21106]],[[194595,194595],\"mapped\",[21111]],[[194596,194596],\"mapped\",[13589]],[[194597,194597],\"mapped\",[21191]],[[194598,194598],\"mapped\",[21193]],[[194599,194599],\"mapped\",[21220]],[[194600,194600],\"mapped\",[21242]],[[194601,194601],\"mapped\",[21253]],[[194602,194602],\"mapped\",[21254]],[[194603,194603],\"mapped\",[21271]],[[194604,194604],\"mapped\",[21321]],[[194605,194605],\"mapped\",[21329]],[[194606,194606],\"mapped\",[21338]],[[194607,194607],\"mapped\",[21363]],[[194608,194608],\"mapped\",[21373]],[[194609,194611],\"mapped\",[21375]],[[194612,194612],\"mapped\",[133676]],[[194613,194613],\"mapped\",[28784]],[[194614,194614],\"mapped\",[21450]],[[194615,194615],\"mapped\",[21471]],[[194616,194616],\"mapped\",[133987]],[[194617,194617],\"mapped\",[21483]],[[194618,194618],\"mapped\",[21489]],[[194619,194619],\"mapped\",[21510]],[[194620,194620],\"mapped\",[21662]],[[194621,194621],\"mapped\",[21560]],[[194622,194622],\"mapped\",[21576]],[[194623,194623],\"mapped\",[21608]],[[194624,194624],\"mapped\",[21666]],[[194625,194625],\"mapped\",[21750]],[[194626,194626],\"mapped\",[21776]],[[194627,194627],\"mapped\",[21843]],[[194628,194628],\"mapped\",[21859]],[[194629,194630],\"mapped\",[21892]],[[194631,194631],\"mapped\",[21913]],[[194632,194632],\"mapped\",[21931]],[[194633,194633],\"mapped\",[21939]],[[194634,194634],\"mapped\",[21954]],[[194635,194635],\"mapped\",[22294]],[[194636,194636],\"mapped\",[22022]],[[194637,194637],\"mapped\",[22295]],[[194638,194638],\"mapped\",[22097]],[[194639,194639],\"mapped\",[22132]],[[194640,194640],\"mapped\",[20999]],[[194641,194641],\"mapped\",[22766]],[[194642,194642],\"mapped\",[22478]],[[194643,194643],\"mapped\",[22516]],[[194644,194644],\"mapped\",[22541]],[[194645,194645],\"mapped\",[22411]],[[194646,194646],\"mapped\",[22578]],[[194647,194647],\"mapped\",[22577]],[[194648,194648],\"mapped\",[22700]],[[194649,194649],\"mapped\",[136420]],[[194650,194650],\"mapped\",[22770]],[[194651,194651],\"mapped\",[22775]],[[194652,194652],\"mapped\",[22790]],[[194653,194653],\"mapped\",[22810]],[[194654,194654],\"mapped\",[22818]],[[194655,194655],\"mapped\",[22882]],[[194656,194656],\"mapped\",[136872]],[[194657,194657],\"mapped\",[136938]],[[194658,194658],\"mapped\",[23020]],[[194659,194659],\"mapped\",[23067]],[[194660,194660],\"mapped\",[23079]],[[194661,194661],\"mapped\",[23000]],[[194662,194662],\"mapped\",[23142]],[[194663,194663],\"mapped\",[14062]],[[194664,194664],\"disallowed\"],[[194665,194665],\"mapped\",[23304]],[[194666,194667],\"mapped\",[23358]],[[194668,194668],\"mapped\",[137672]],[[194669,194669],\"mapped\",[23491]],[[194670,194670],\"mapped\",[23512]],[[194671,194671],\"mapped\",[23527]],[[194672,194672],\"mapped\",[23539]],[[194673,194673],\"mapped\",[138008]],[[194674,194674],\"mapped\",[23551]],[[194675,194675],\"mapped\",[23558]],[[194676,194676],\"disallowed\"],[[194677,194677],\"mapped\",[23586]],[[194678,194678],\"mapped\",[14209]],[[194679,194679],\"mapped\",[23648]],[[194680,194680],\"mapped\",[23662]],[[194681,194681],\"mapped\",[23744]],[[194682,194682],\"mapped\",[23693]],[[194683,194683],\"mapped\",[138724]],[[194684,194684],\"mapped\",[23875]],[[194685,194685],\"mapped\",[138726]],[[194686,194686],\"mapped\",[23918]],[[194687,194687],\"mapped\",[23915]],[[194688,194688],\"mapped\",[23932]],[[194689,194689],\"mapped\",[24033]],[[194690,194690],\"mapped\",[24034]],[[194691,194691],\"mapped\",[14383]],[[194692,194692],\"mapped\",[24061]],[[194693,194693],\"mapped\",[24104]],[[194694,194694],\"mapped\",[24125]],[[194695,194695],\"mapped\",[24169]],[[194696,194696],\"mapped\",[14434]],[[194697,194697],\"mapped\",[139651]],[[194698,194698],\"mapped\",[14460]],[[194699,194699],\"mapped\",[24240]],[[194700,194700],\"mapped\",[24243]],[[194701,194701],\"mapped\",[24246]],[[194702,194702],\"mapped\",[24266]],[[194703,194703],\"mapped\",[172946]],[[194704,194704],\"mapped\",[24318]],[[194705,194706],\"mapped\",[140081]],[[194707,194707],\"mapped\",[33281]],[[194708,194709],\"mapped\",[24354]],[[194710,194710],\"mapped\",[14535]],[[194711,194711],\"mapped\",[144056]],[[194712,194712],\"mapped\",[156122]],[[194713,194713],\"mapped\",[24418]],[[194714,194714],\"mapped\",[24427]],[[194715,194715],\"mapped\",[14563]],[[194716,194716],\"mapped\",[24474]],[[194717,194717],\"mapped\",[24525]],[[194718,194718],\"mapped\",[24535]],[[194719,194719],\"mapped\",[24569]],[[194720,194720],\"mapped\",[24705]],[[194721,194721],\"mapped\",[14650]],[[194722,194722],\"mapped\",[14620]],[[194723,194723],\"mapped\",[24724]],[[194724,194724],\"mapped\",[141012]],[[194725,194725],\"mapped\",[24775]],[[194726,194726],\"mapped\",[24904]],[[194727,194727],\"mapped\",[24908]],[[194728,194728],\"mapped\",[24910]],[[194729,194729],\"mapped\",[24908]],[[194730,194730],\"mapped\",[24954]],[[194731,194731],\"mapped\",[24974]],[[194732,194732],\"mapped\",[25010]],[[194733,194733],\"mapped\",[24996]],[[194734,194734],\"mapped\",[25007]],[[194735,194735],\"mapped\",[25054]],[[194736,194736],\"mapped\",[25074]],[[194737,194737],\"mapped\",[25078]],[[194738,194738],\"mapped\",[25104]],[[194739,194739],\"mapped\",[25115]],[[194740,194740],\"mapped\",[25181]],[[194741,194741],\"mapped\",[25265]],[[194742,194742],\"mapped\",[25300]],[[194743,194743],\"mapped\",[25424]],[[194744,194744],\"mapped\",[142092]],[[194745,194745],\"mapped\",[25405]],[[194746,194746],\"mapped\",[25340]],[[194747,194747],\"mapped\",[25448]],[[194748,194748],\"mapped\",[25475]],[[194749,194749],\"mapped\",[25572]],[[194750,194750],\"mapped\",[142321]],[[194751,194751],\"mapped\",[25634]],[[194752,194752],\"mapped\",[25541]],[[194753,194753],\"mapped\",[25513]],[[194754,194754],\"mapped\",[14894]],[[194755,194755],\"mapped\",[25705]],[[194756,194756],\"mapped\",[25726]],[[194757,194757],\"mapped\",[25757]],[[194758,194758],\"mapped\",[25719]],[[194759,194759],\"mapped\",[14956]],[[194760,194760],\"mapped\",[25935]],[[194761,194761],\"mapped\",[25964]],[[194762,194762],\"mapped\",[143370]],[[194763,194763],\"mapped\",[26083]],[[194764,194764],\"mapped\",[26360]],[[194765,194765],\"mapped\",[26185]],[[194766,194766],\"mapped\",[15129]],[[194767,194767],\"mapped\",[26257]],[[194768,194768],\"mapped\",[15112]],[[194769,194769],\"mapped\",[15076]],[[194770,194770],\"mapped\",[20882]],[[194771,194771],\"mapped\",[20885]],[[194772,194772],\"mapped\",[26368]],[[194773,194773],\"mapped\",[26268]],[[194774,194774],\"mapped\",[32941]],[[194775,194775],\"mapped\",[17369]],[[194776,194776],\"mapped\",[26391]],[[194777,194777],\"mapped\",[26395]],[[194778,194778],\"mapped\",[26401]],[[194779,194779],\"mapped\",[26462]],[[194780,194780],\"mapped\",[26451]],[[194781,194781],\"mapped\",[144323]],[[194782,194782],\"mapped\",[15177]],[[194783,194783],\"mapped\",[26618]],[[194784,194784],\"mapped\",[26501]],[[194785,194785],\"mapped\",[26706]],[[194786,194786],\"mapped\",[26757]],[[194787,194787],\"mapped\",[144493]],[[194788,194788],\"mapped\",[26766]],[[194789,194789],\"mapped\",[26655]],[[194790,194790],\"mapped\",[26900]],[[194791,194791],\"mapped\",[15261]],[[194792,194792],\"mapped\",[26946]],[[194793,194793],\"mapped\",[27043]],[[194794,194794],\"mapped\",[27114]],[[194795,194795],\"mapped\",[27304]],[[194796,194796],\"mapped\",[145059]],[[194797,194797],\"mapped\",[27355]],[[194798,194798],\"mapped\",[15384]],[[194799,194799],\"mapped\",[27425]],[[194800,194800],\"mapped\",[145575]],[[194801,194801],\"mapped\",[27476]],[[194802,194802],\"mapped\",[15438]],[[194803,194803],\"mapped\",[27506]],[[194804,194804],\"mapped\",[27551]],[[194805,194805],\"mapped\",[27578]],[[194806,194806],\"mapped\",[27579]],[[194807,194807],\"mapped\",[146061]],[[194808,194808],\"mapped\",[138507]],[[194809,194809],\"mapped\",[146170]],[[194810,194810],\"mapped\",[27726]],[[194811,194811],\"mapped\",[146620]],[[194812,194812],\"mapped\",[27839]],[[194813,194813],\"mapped\",[27853]],[[194814,194814],\"mapped\",[27751]],[[194815,194815],\"mapped\",[27926]],[[194816,194816],\"mapped\",[27966]],[[194817,194817],\"mapped\",[28023]],[[194818,194818],\"mapped\",[27969]],[[194819,194819],\"mapped\",[28009]],[[194820,194820],\"mapped\",[28024]],[[194821,194821],\"mapped\",[28037]],[[194822,194822],\"mapped\",[146718]],[[194823,194823],\"mapped\",[27956]],[[194824,194824],\"mapped\",[28207]],[[194825,194825],\"mapped\",[28270]],[[194826,194826],\"mapped\",[15667]],[[194827,194827],\"mapped\",[28363]],[[194828,194828],\"mapped\",[28359]],[[194829,194829],\"mapped\",[147153]],[[194830,194830],\"mapped\",[28153]],[[194831,194831],\"mapped\",[28526]],[[194832,194832],\"mapped\",[147294]],[[194833,194833],\"mapped\",[147342]],[[194834,194834],\"mapped\",[28614]],[[194835,194835],\"mapped\",[28729]],[[194836,194836],\"mapped\",[28702]],[[194837,194837],\"mapped\",[28699]],[[194838,194838],\"mapped\",[15766]],[[194839,194839],\"mapped\",[28746]],[[194840,194840],\"mapped\",[28797]],[[194841,194841],\"mapped\",[28791]],[[194842,194842],\"mapped\",[28845]],[[194843,194843],\"mapped\",[132389]],[[194844,194844],\"mapped\",[28997]],[[194845,194845],\"mapped\",[148067]],[[194846,194846],\"mapped\",[29084]],[[194847,194847],\"disallowed\"],[[194848,194848],\"mapped\",[29224]],[[194849,194849],\"mapped\",[29237]],[[194850,194850],\"mapped\",[29264]],[[194851,194851],\"mapped\",[149000]],[[194852,194852],\"mapped\",[29312]],[[194853,194853],\"mapped\",[29333]],[[194854,194854],\"mapped\",[149301]],[[194855,194855],\"mapped\",[149524]],[[194856,194856],\"mapped\",[29562]],[[194857,194857],\"mapped\",[29579]],[[194858,194858],\"mapped\",[16044]],[[194859,194859],\"mapped\",[29605]],[[194860,194861],\"mapped\",[16056]],[[194862,194862],\"mapped\",[29767]],[[194863,194863],\"mapped\",[29788]],[[194864,194864],\"mapped\",[29809]],[[194865,194865],\"mapped\",[29829]],[[194866,194866],\"mapped\",[29898]],[[194867,194867],\"mapped\",[16155]],[[194868,194868],\"mapped\",[29988]],[[194869,194869],\"mapped\",[150582]],[[194870,194870],\"mapped\",[30014]],[[194871,194871],\"mapped\",[150674]],[[194872,194872],\"mapped\",[30064]],[[194873,194873],\"mapped\",[139679]],[[194874,194874],\"mapped\",[30224]],[[194875,194875],\"mapped\",[151457]],[[194876,194876],\"mapped\",[151480]],[[194877,194877],\"mapped\",[151620]],[[194878,194878],\"mapped\",[16380]],[[194879,194879],\"mapped\",[16392]],[[194880,194880],\"mapped\",[30452]],[[194881,194881],\"mapped\",[151795]],[[194882,194882],\"mapped\",[151794]],[[194883,194883],\"mapped\",[151833]],[[194884,194884],\"mapped\",[151859]],[[194885,194885],\"mapped\",[30494]],[[194886,194887],\"mapped\",[30495]],[[194888,194888],\"mapped\",[30538]],[[194889,194889],\"mapped\",[16441]],[[194890,194890],\"mapped\",[30603]],[[194891,194891],\"mapped\",[16454]],[[194892,194892],\"mapped\",[16534]],[[194893,194893],\"mapped\",[152605]],[[194894,194894],\"mapped\",[30798]],[[194895,194895],\"mapped\",[30860]],[[194896,194896],\"mapped\",[30924]],[[194897,194897],\"mapped\",[16611]],[[194898,194898],\"mapped\",[153126]],[[194899,194899],\"mapped\",[31062]],[[194900,194900],\"mapped\",[153242]],[[194901,194901],\"mapped\",[153285]],[[194902,194902],\"mapped\",[31119]],[[194903,194903],\"mapped\",[31211]],[[194904,194904],\"mapped\",[16687]],[[194905,194905],\"mapped\",[31296]],[[194906,194906],\"mapped\",[31306]],[[194907,194907],\"mapped\",[31311]],[[194908,194908],\"mapped\",[153980]],[[194909,194910],\"mapped\",[154279]],[[194911,194911],\"disallowed\"],[[194912,194912],\"mapped\",[16898]],[[194913,194913],\"mapped\",[154539]],[[194914,194914],\"mapped\",[31686]],[[194915,194915],\"mapped\",[31689]],[[194916,194916],\"mapped\",[16935]],[[194917,194917],\"mapped\",[154752]],[[194918,194918],\"mapped\",[31954]],[[194919,194919],\"mapped\",[17056]],[[194920,194920],\"mapped\",[31976]],[[194921,194921],\"mapped\",[31971]],[[194922,194922],\"mapped\",[32000]],[[194923,194923],\"mapped\",[155526]],[[194924,194924],\"mapped\",[32099]],[[194925,194925],\"mapped\",[17153]],[[194926,194926],\"mapped\",[32199]],[[194927,194927],\"mapped\",[32258]],[[194928,194928],\"mapped\",[32325]],[[194929,194929],\"mapped\",[17204]],[[194930,194930],\"mapped\",[156200]],[[194931,194931],\"mapped\",[156231]],[[194932,194932],\"mapped\",[17241]],[[194933,194933],\"mapped\",[156377]],[[194934,194934],\"mapped\",[32634]],[[194935,194935],\"mapped\",[156478]],[[194936,194936],\"mapped\",[32661]],[[194937,194937],\"mapped\",[32762]],[[194938,194938],\"mapped\",[32773]],[[194939,194939],\"mapped\",[156890]],[[194940,194940],\"mapped\",[156963]],[[194941,194941],\"mapped\",[32864]],[[194942,194942],\"mapped\",[157096]],[[194943,194943],\"mapped\",[32880]],[[194944,194944],\"mapped\",[144223]],[[194945,194945],\"mapped\",[17365]],[[194946,194946],\"mapped\",[32946]],[[194947,194947],\"mapped\",[33027]],[[194948,194948],\"mapped\",[17419]],[[194949,194949],\"mapped\",[33086]],[[194950,194950],\"mapped\",[23221]],[[194951,194951],\"mapped\",[157607]],[[194952,194952],\"mapped\",[157621]],[[194953,194953],\"mapped\",[144275]],[[194954,194954],\"mapped\",[144284]],[[194955,194955],\"mapped\",[33281]],[[194956,194956],\"mapped\",[33284]],[[194957,194957],\"mapped\",[36766]],[[194958,194958],\"mapped\",[17515]],[[194959,194959],\"mapped\",[33425]],[[194960,194960],\"mapped\",[33419]],[[194961,194961],\"mapped\",[33437]],[[194962,194962],\"mapped\",[21171]],[[194963,194963],\"mapped\",[33457]],[[194964,194964],\"mapped\",[33459]],[[194965,194965],\"mapped\",[33469]],[[194966,194966],\"mapped\",[33510]],[[194967,194967],\"mapped\",[158524]],[[194968,194968],\"mapped\",[33509]],[[194969,194969],\"mapped\",[33565]],[[194970,194970],\"mapped\",[33635]],[[194971,194971],\"mapped\",[33709]],[[194972,194972],\"mapped\",[33571]],[[194973,194973],\"mapped\",[33725]],[[194974,194974],\"mapped\",[33767]],[[194975,194975],\"mapped\",[33879]],[[194976,194976],\"mapped\",[33619]],[[194977,194977],\"mapped\",[33738]],[[194978,194978],\"mapped\",[33740]],[[194979,194979],\"mapped\",[33756]],[[194980,194980],\"mapped\",[158774]],[[194981,194981],\"mapped\",[159083]],[[194982,194982],\"mapped\",[158933]],[[194983,194983],\"mapped\",[17707]],[[194984,194984],\"mapped\",[34033]],[[194985,194985],\"mapped\",[34035]],[[194986,194986],\"mapped\",[34070]],[[194987,194987],\"mapped\",[160714]],[[194988,194988],\"mapped\",[34148]],[[194989,194989],\"mapped\",[159532]],[[194990,194990],\"mapped\",[17757]],[[194991,194991],\"mapped\",[17761]],[[194992,194992],\"mapped\",[159665]],[[194993,194993],\"mapped\",[159954]],[[194994,194994],\"mapped\",[17771]],[[194995,194995],\"mapped\",[34384]],[[194996,194996],\"mapped\",[34396]],[[194997,194997],\"mapped\",[34407]],[[194998,194998],\"mapped\",[34409]],[[194999,194999],\"mapped\",[34473]],[[195000,195000],\"mapped\",[34440]],[[195001,195001],\"mapped\",[34574]],[[195002,195002],\"mapped\",[34530]],[[195003,195003],\"mapped\",[34681]],[[195004,195004],\"mapped\",[34600]],[[195005,195005],\"mapped\",[34667]],[[195006,195006],\"mapped\",[34694]],[[195007,195007],\"disallowed\"],[[195008,195008],\"mapped\",[34785]],[[195009,195009],\"mapped\",[34817]],[[195010,195010],\"mapped\",[17913]],[[195011,195011],\"mapped\",[34912]],[[195012,195012],\"mapped\",[34915]],[[195013,195013],\"mapped\",[161383]],[[195014,195014],\"mapped\",[35031]],[[195015,195015],\"mapped\",[35038]],[[195016,195016],\"mapped\",[17973]],[[195017,195017],\"mapped\",[35066]],[[195018,195018],\"mapped\",[13499]],[[195019,195019],\"mapped\",[161966]],[[195020,195020],\"mapped\",[162150]],[[195021,195021],\"mapped\",[18110]],[[195022,195022],\"mapped\",[18119]],[[195023,195023],\"mapped\",[35488]],[[195024,195024],\"mapped\",[35565]],[[195025,195025],\"mapped\",[35722]],[[195026,195026],\"mapped\",[35925]],[[195027,195027],\"mapped\",[162984]],[[195028,195028],\"mapped\",[36011]],[[195029,195029],\"mapped\",[36033]],[[195030,195030],\"mapped\",[36123]],[[195031,195031],\"mapped\",[36215]],[[195032,195032],\"mapped\",[163631]],[[195033,195033],\"mapped\",[133124]],[[195034,195034],\"mapped\",[36299]],[[195035,195035],\"mapped\",[36284]],[[195036,195036],\"mapped\",[36336]],[[195037,195037],\"mapped\",[133342]],[[195038,195038],\"mapped\",[36564]],[[195039,195039],\"mapped\",[36664]],[[195040,195040],\"mapped\",[165330]],[[195041,195041],\"mapped\",[165357]],[[195042,195042],\"mapped\",[37012]],[[195043,195043],\"mapped\",[37105]],[[195044,195044],\"mapped\",[37137]],[[195045,195045],\"mapped\",[165678]],[[195046,195046],\"mapped\",[37147]],[[195047,195047],\"mapped\",[37432]],[[195048,195048],\"mapped\",[37591]],[[195049,195049],\"mapped\",[37592]],[[195050,195050],\"mapped\",[37500]],[[195051,195051],\"mapped\",[37881]],[[195052,195052],\"mapped\",[37909]],[[195053,195053],\"mapped\",[166906]],[[195054,195054],\"mapped\",[38283]],[[195055,195055],\"mapped\",[18837]],[[195056,195056],\"mapped\",[38327]],[[195057,195057],\"mapped\",[167287]],[[195058,195058],\"mapped\",[18918]],[[195059,195059],\"mapped\",[38595]],[[195060,195060],\"mapped\",[23986]],[[195061,195061],\"mapped\",[38691]],[[195062,195062],\"mapped\",[168261]],[[195063,195063],\"mapped\",[168474]],[[195064,195064],\"mapped\",[19054]],[[195065,195065],\"mapped\",[19062]],[[195066,195066],\"mapped\",[38880]],[[195067,195067],\"mapped\",[168970]],[[195068,195068],\"mapped\",[19122]],[[195069,195069],\"mapped\",[169110]],[[195070,195071],\"mapped\",[38923]],[[195072,195072],\"mapped\",[38953]],[[195073,195073],\"mapped\",[169398]],[[195074,195074],\"mapped\",[39138]],[[195075,195075],\"mapped\",[19251]],[[195076,195076],\"mapped\",[39209]],[[195077,195077],\"mapped\",[39335]],[[195078,195078],\"mapped\",[39362]],[[195079,195079],\"mapped\",[39422]],[[195080,195080],\"mapped\",[19406]],[[195081,195081],\"mapped\",[170800]],[[195082,195082],\"mapped\",[39698]],[[195083,195083],\"mapped\",[40000]],[[195084,195084],\"mapped\",[40189]],[[195085,195085],\"mapped\",[19662]],[[195086,195086],\"mapped\",[19693]],[[195087,195087],\"mapped\",[40295]],[[195088,195088],\"mapped\",[172238]],[[195089,195089],\"mapped\",[19704]],[[195090,195090],\"mapped\",[172293]],[[195091,195091],\"mapped\",[172558]],[[195092,195092],\"mapped\",[172689]],[[195093,195093],\"mapped\",[40635]],[[195094,195094],\"mapped\",[19798]],[[195095,195095],\"mapped\",[40697]],[[195096,195096],\"mapped\",[40702]],[[195097,195097],\"mapped\",[40709]],[[195098,195098],\"mapped\",[40719]],[[195099,195099],\"mapped\",[40726]],[[195100,195100],\"mapped\",[40763]],[[195101,195101],\"mapped\",[173568]],[[195102,196605],\"disallowed\"],[[196606,196607],\"disallowed\"],[[196608,262141],\"disallowed\"],[[262142,262143],\"disallowed\"],[[262144,327677],\"disallowed\"],[[327678,327679],\"disallowed\"],[[327680,393213],\"disallowed\"],[[393214,393215],\"disallowed\"],[[393216,458749],\"disallowed\"],[[458750,458751],\"disallowed\"],[[458752,524285],\"disallowed\"],[[524286,524287],\"disallowed\"],[[524288,589821],\"disallowed\"],[[589822,589823],\"disallowed\"],[[589824,655357],\"disallowed\"],[[655358,655359],\"disallowed\"],[[655360,720893],\"disallowed\"],[[720894,720895],\"disallowed\"],[[720896,786429],\"disallowed\"],[[786430,786431],\"disallowed\"],[[786432,851965],\"disallowed\"],[[851966,851967],\"disallowed\"],[[851968,917501],\"disallowed\"],[[917502,917503],\"disallowed\"],[[917504,917504],\"disallowed\"],[[917505,917505],\"disallowed\"],[[917506,917535],\"disallowed\"],[[917536,917631],\"disallowed\"],[[917632,917759],\"disallowed\"],[[917760,917999],\"ignored\"],[[918000,983037],\"disallowed\"],[[983038,983039],\"disallowed\"],[[983040,1048573],\"disallowed\"],[[1048574,1048575],\"disallowed\"],[[1048576,1114109],\"disallowed\"],[[1114110,1114111],\"disallowed\"]]"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/dHMtZGVib3VuY2VANC4wLjA=",
    "content": "/dist/src/index.umd.js\u0003!function(e,n){\"object\"==typeof exports&&\"undefined\"!=typeof module?n(exports):\"function\"==typeof define&&define.amd?define([\"exports\"],n):n((e=e||self).tsDebounce={})}(this,function(e){e.debounce=function(e,n,o){var t,i,r;void 0===n&&(n=50),void 0===o&&(o={});var u=null!=(t=o.isImmediate)&&t,c=null!=(i=o.callback)&&i,a=o.maxWait,f=Date.now(),l=[];function v(){if(void 0!==a){var e=Date.now()-f;if(e+n>=a)return a-e}return n}var d=function(){var n=[].slice.call(arguments),o=this;return new Promise(function(t,i){var a=u&&void 0===r;if(void 0!==r&&clearTimeout(r),r=setTimeout(function(){if(r=void 0,f=Date.now(),!u){var t=e.apply(o,n);c&&c(t),l.forEach(function(e){return(0,e.resolve)(t)}),l=[]}},v()),a){var d=e.apply(o,n);return c&&c(d),t(d)}l.push({resolve:t,reject:i})})};return d.cancel=function(e){void 0!==r&&clearTimeout(r),l.forEach(function(n){return(0,n.reject)(e)}),l=[]},d}});\n//# sourceMappingURL=index.umd.js.map\n/package.json\u0005{\n  \"name\": \"ts-debounce\",\n  \"version\": \"4.0.0\",\n  \"description\": \"TypeScript implementation of debounce\",\n  \"main\": \"dist/src/index.js\",\n  \"module\": \"dist/src/index.esm.js\",\n  \"types\": \"dist/src/index.d.ts\",\n  \"author\": {\n    \"name\": \"Jakub Chodorowicz\",\n    \"url\": \"https://github.com/chodorowicz\"\n  },\n  \"keywords\": [\n    \"TypeScript\",\n    \"ts\",\n    \"TS\",\n    \"std lib\",\n    \"function\",\n    \"debounce\",\n    \"wait\"\n  ],\n  \"files\": [\n    \"dist/**/*\"\n  ],\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/chodorowicz/ts-debounce\"\n  },\n  \"license\": \"MIT\",\n  \"devDependencies\": {\n    \"@types/jest\": \"^27.0.2\",\n    \"all-contributors-cli\": \"^6.20.0\",\n    \"jest\": \"^27.3.1\",\n    \"microbundle\": \"^0.12.4\",\n    \"np\": \"^7.5.0\",\n    \"prettier\": \"^2.4.1\",\n    \"ts-jest\": \"^27.0.7\",\n    \"tsd\": \"^0.18.0\",\n    \"typescript\": \"^4.4.4\"\n  },\n  \"scripts\": {\n    \"build\": \"microbundle && cp ./src/index.test-d.ts ./dist/src/\",\n    \"dev\": \"microbundle watch\",\n    \"prepublishOnly\": \"npm run build\",\n    \"test\": \"npm run test:code && npm run test:types\",\n    \"test:code\": \"jest\",\n    \"test:types\": \"tsc --noEmit && tsd\",\n    \"prettier:check\": \"prettier --check .\",\n    \"release\": \"np --no-yarn\"\n  },\n  \"jest\": {\n    \"transform\": {\n      \"^.+\\\\.tsx?$\": \"ts-jest\"\n    },\n    \"testRegex\": \"(src/__tests__/.*|(\\\\.|/)(test|spec))\\\\.ts$\",\n    \"moduleFileExtensions\": [\n      \"js\",\n      \"ts\"\n    ],\n    \"timers\": \"fake\"\n  },\n  \"tsd\": {\n    \"directory\": \"src\"\n  }\n}\n/dist/src/index.esm.js\u0002function r(r,e,n){var i,t,o;void 0===e&&(e=50),void 0===n&&(n={});var a=null!=(i=n.isImmediate)&&i,u=null!=(t=n.callback)&&t,c=n.maxWait,v=Date.now(),l=[];function f(){if(void 0!==c){var r=Date.now()-v;if(r+e>=c)return c-r}return e}var d=function(){var e=[].slice.call(arguments),n=this;return new Promise(function(i,t){var c=a&&void 0===o;if(void 0!==o&&clearTimeout(o),o=setTimeout(function(){if(o=void 0,v=Date.now(),!a){var i=r.apply(n,e);u&&u(i),l.forEach(function(r){return(0,r.resolve)(i)}),l=[]}},f()),c){var d=r.apply(n,e);return u&&u(d),i(d)}l.push({resolve:i,reject:t})})};return d.cancel=function(r){void 0!==o&&clearTimeout(o),l.forEach(function(e){return(0,e.reject)(r)}),l=[]},d}export{r as debounce};\n//# sourceMappingURL=index.esm.js.map\n/dist/src/index.umd.js.map\u000fV{\"version\":3,\"file\":\"index.umd.js\",\"sources\":[\"../../src/index.ts\"],\"sourcesContent\":[\"export type Options<Result> = {\\n  isImmediate?: boolean;\\n  maxWait?: number;\\n  callback?: (data: Result) => void;\\n};\\n\\nexport interface DebouncedFunction<\\n  Args extends any[],\\n  F extends (...args: Args) => any\\n> {\\n  (this: ThisParameterType<F>, ...args: Args): Promise<ReturnType<F>>;\\n  cancel: (reason?: any) => void;\\n}\\n\\ninterface DebouncedPromise<FunctionReturn> {\\n  resolve: (result: FunctionReturn) => void;\\n  reject: (reason?: any) => void;\\n}\\n\\nexport function debounce<Args extends any[], F extends (...args: Args) => any>(\\n  func: F,\\n  waitMilliseconds = 50,\\n  options: Options<ReturnType<F>> = {}\\n): {\\n  (this: ThisParameterType<F>, ...args: Parameters<F> & Args): Promise<\\n    ReturnType<F>\\n  >;\\n  cancel: (reason?: any) => void;\\n} {\\n  let timeoutId: ReturnType<typeof setTimeout> | undefined;\\n  const isImmediate = options.isImmediate ?? false;\\n  const callback = options.callback ?? false;\\n  const maxWait = options.maxWait;\\n  let lastInvokeTime = Date.now();\\n\\n  let promises: DebouncedPromise<ReturnType<F>>[] = [];\\n\\n  function nextInvokeTimeout() {\\n    if (maxWait !== undefined) {\\n      const timeSinceLastInvocation = Date.now() - lastInvokeTime;\\n\\n      if (timeSinceLastInvocation + waitMilliseconds >= maxWait) {\\n        return maxWait - timeSinceLastInvocation;\\n      }\\n    }\\n\\n    return waitMilliseconds;\\n  }\\n\\n  const debouncedFunction = function (\\n    this: ThisParameterType<F>,\\n    ...args: Parameters<F>\\n  ) {\\n    const context = this;\\n    return new Promise<ReturnType<F>>((resolve, reject) => {\\n      const invokeFunction = function () {\\n        timeoutId = undefined;\\n        lastInvokeTime = Date.now();\\n        if (!isImmediate) {\\n          const result = func.apply(context, args);\\n          callback && callback(result);\\n          promises.forEach(({ resolve }) => resolve(result));\\n          promises = [];\\n        }\\n      };\\n\\n      const shouldCallNow = isImmediate && timeoutId === undefined;\\n\\n      if (timeoutId !== undefined) {\\n        clearTimeout(timeoutId);\\n      }\\n\\n      timeoutId = setTimeout(invokeFunction, nextInvokeTimeout());\\n\\n      if (shouldCallNow) {\\n        const result = func.apply(context, args);\\n        callback && callback(result);\\n        return resolve(result);\\n      }\\n      promises.push({ resolve, reject });\\n    });\\n  };\\n\\n  debouncedFunction.cancel = function (reason?: any) {\\n    if (timeoutId !== undefined) {\\n      clearTimeout(timeoutId);\\n    }\\n    promises.forEach(({ reject }) => reject(reason));\\n    promises = [];\\n  };\\n\\n  return debouncedFunction;\\n}\\n\"],\"names\":[\"func\",\"waitMilliseconds\",\"options\",\"timeoutId\",\"isImmediate\",\"callback\",\"maxWait\",\"lastInvokeTime\",\"Date\",\"now\",\"promises\",\"nextInvokeTimeout\",\"undefined\",\"timeSinceLastInvocation\",\"debouncedFunction\",\"args\",\"context\",\"this\",\"Promise\",\"resolve\",\"reject\",\"shouldCallNow\",\"clearTimeout\",\"setTimeout\",\"result\",\"apply\",\"forEach\",\"push\",\"cancel\",\"reason\"],\"mappings\":\"8MAoBEA,EACAC,EACAC,WAOIC,WARJF,IAAAA,EAAmB,aACnBC,IAAAA,EAAkC,IAQlC,IAAME,WAAcF,EAAQE,gBACtBC,WAAWH,EAAQG,aACnBC,EAAUJ,EAAQI,QACpBC,EAAiBC,KAAKC,MAEtBC,EAA8C,GAElD,SAASC,IACP,QAAgBC,IAAZN,EAAuB,CACzB,IAAMO,EAA0BL,KAAKC,MAAQF,EAE7C,GAAIM,EAA0BZ,GAAoBK,EAChD,OAAOA,EAAUO,EAIrB,OAAOZ,EAGT,IAAMa,EAAoB,eAErBC,2BAEGC,EAAUC,KAChB,WAAWC,QAAuB,SAACC,EAASC,GAC1C,IAWMC,EAAgBjB,QAA6BQ,IAAdT,EAQrC,QANkBS,IAAdT,GACFmB,aAAanB,GAGfA,EAAYoB,WAjBW,WAGrB,GAFApB,OAAYS,EACZL,EAAiBC,KAAKC,OACjBL,EAAa,CAChB,IAAMoB,EAASxB,EAAKyB,MAAMT,EAASD,GACnCV,GAAYA,EAASmB,GACrBd,EAASgB,QAAQ,mBAAiBP,IAAdA,SAAsBK,KAC1Cd,EAAW,KAUwBC,KAEnCU,EAAe,CACjB,IAAMG,EAASxB,EAAKyB,MAAMT,EAASD,GAEnC,OADAV,GAAYA,EAASmB,GACdL,EAAQK,GAEjBd,EAASiB,KAAK,CAAER,QAAAA,EAASC,OAAAA,OAY7B,OARAN,EAAkBc,OAAS,SAAUC,QACjBjB,IAAdT,GACFmB,aAAanB,GAEfO,EAASgB,QAAQ,mBAAgBN,IAAbA,QAAoBS,KACxCnB,EAAW,IAGNI\"}/LICENSE\u00042MIT License\n\nCopyright (c) 2017 Jakub Chodorowicz\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n/README.md\u0017# TypeScript implementation of debounce function\n\n![Build Status](https://github.com/chodorowicz/ts-debounce//workflows/node-ci/badge.svg)\n[![npm](https://img.shields.io/npm/v/ts-debounce.svg)](https://www.npmjs.com/package/ts-debounce)\n[![npm bundle size (minified + gzip)](https://img.shields.io/bundlephobia/minzip/ts-debounce.svg)](https://www.npmjs.com/package/ts-debounce)\n[![npm type definitions](https://img.shields.io/npm/types/ts-debounce.svg)](https://www.npmjs.com/package/ts-debounce)\n\n<!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->\n\n[![All Contributors](https://img.shields.io/badge/all_contributors-6-orange.svg?style=flat-square)](#contributors-)\n\n<!-- ALL-CONTRIBUTORS-BADGE:END -->\n\n_Debounce_ creates a new function `g`, which when called will delay the invocation of the original function `f` until `n` milliseconds, BUT drop previous pending delayed emissions if a new invocation is made before `n` milliseconds.\n\nIt's very useful for scenarios when it's better to limit the number of times the function is called. E.g. think of search input which fetches data from API. It's enough display search results after user has stopped entering characters for some time.\n\n## Install\n\nYou can install this package using `npm` using the command below\n\n```bash\nnpm install ts-debounce\n```\n\nIf you prefer `yarn`, install using the command below\n\n```bash\nyarn add ts-debounce\n```\n\n## Function arguments\n\n```ts\nimport { debounce } from \"ts-debounce\";\n\nconst debouncedFunction = debounce(originalFunction, waitMilliseconds, options);\n```\n\n- `originalFunction`\n  - the function which we want to debounce\n- `waitMilliseconds`\n  - how many seconds must pass after most recent function call, for the original function to be called\n- `options`\n  - `isImmediate` (boolean)\n    - if set to `true` then `originalFunction` will be called immediately, but on subsequent calls of the debounced function original function won't be called, unless `waitMilliseconds` passed after last call\n  - `maxWait` (number)\n    - if defined it will call the `originalFunction` after `maxWait` time has passed, even if the debounced function is called in the meantime\n      - e.g. if `wait` is set to `100` and `maxWait` to `200`, then if the debounced function is called every 50ms, then the original function will be called after 200ms anyway\n  - `callback` (function)\n    - it is called when `originalFunction` is debounced and receives as first parameter returned data from `originalFunction`\n\n## Cancellation\n\nThe returned debounced function can be cancelled by calling `cancel()` on it.\n\n```ts\nconst debouncedFunction = debounce(originalFunction, waitMilliseconds, options);\n\ndebouncedFunction.cancel();\n```\n\n## Promises\n\nSince v3 `ts-debounce` has Promise support. Everytime you call debounced function a promise is returned which will be resolved when the original function will be finally called. This promise will be rejected, if the debounced function will be cancelled.\n\nYou can also debounce a function `f` which returns a promise. The returned promise(s) will resolve (unless cancelled) with the return value of the original function.\n\n```ts\nconst asyncFunction = async () => \"value\";\nconst g = debounce(asyncFunction);\nconst returnValue = await g();\nreturnValue === \"value\"; // true\n```\n\n## Credits & inspiration\n\nThis implementation is based upon following sources:\n\n- [JavaScript Debounce Function](https://davidwalsh.name/javascript-debounce-function) by David Walsh\n- [Lodash implementation](https://lodash.com/)\n- [p-debounce](https://github.com/sindresorhus/p-debounce)\n\n## Compability\n\n- version 3 - Promise must be available in the global namespace\n- version 2 - TypeScript 3.3\n- version 1 - TypeScript 2.0\n\n## Contributors ✨\n\nThanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):\n\n<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->\n<!-- prettier-ignore-start -->\n<!-- markdownlint-disable -->\n<table>\n  <tr>\n    <td align=\"center\"><a href=\"http://zacharysvoboda.com\"><img src=\"https://avatars3.githubusercontent.com/u/5839548?v=4?s=100\" width=\"100px;\" alt=\"\"/><br /><sub><b>Zac</b></sub></a><br /><a href=\"https://github.com/chodorowicz/ts-debounce/commits?author=zacnomore\" title=\"Code\">💻</a></td>\n    <td align=\"center\"><a href=\"https://github.com/karol-majewski\"><img src=\"https://avatars1.githubusercontent.com/u/20233319?v=4?s=100\" width=\"100px;\" alt=\"\"/><br /><sub><b>Karol Majewski</b></sub></a><br /><a href=\"https://github.com/chodorowicz/ts-debounce/commits?author=karol-majewski\" title=\"Code\">💻</a></td>\n    <td align=\"center\"><a href=\"https://github.com/Tuizi\"><img src=\"https://avatars2.githubusercontent.com/u/2027148?v=4?s=100\" width=\"100px;\" alt=\"\"/><br /><sub><b>Fabien Rogeret</b></sub></a><br /><a href=\"https://github.com/chodorowicz/ts-debounce/commits?author=Tuizi\" title=\"Code\">💻</a></td>\n    <td align=\"center\"><a href=\"https://github.com/iheidari\"><img src=\"https://avatars3.githubusercontent.com/u/1315090?v=4?s=100\" width=\"100px;\" alt=\"\"/><br /><sub><b>Iman</b></sub></a><br /><a href=\"https://github.com/chodorowicz/ts-debounce/commits?author=iheidari\" title=\"Code\">💻</a></td>\n    <td align=\"center\"><a href=\"https://github.com/juanmendes\"><img src=\"https://avatars.githubusercontent.com/u/549331?v=4?s=100\" width=\"100px;\" alt=\"\"/><br /><sub><b>juanmendes</b></sub></a><br /><a href=\"#ideas-juanmendes\" title=\"Ideas, Planning, & Feedback\">🤔</a></td>\n    <td align=\"center\"><a href=\"https://github.com/sanduluca\"><img src=\"https://avatars.githubusercontent.com/u/56228534?v=4?s=100\" width=\"100px;\" alt=\"\"/><br /><sub><b>sanduluca</b></sub></a><br /><a href=\"https://github.com/chodorowicz/ts-debounce/commits?author=sanduluca\" title=\"Code\">💻</a></td>\n  </tr>\n</table>\n\n<!-- markdownlint-restore -->\n<!-- prettier-ignore-end -->\n\n<!-- ALL-CONTRIBUTORS-LIST:END -->\n\nThis project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!\n/dist/src/index.esm.js.map\u000fg{\"version\":3,\"file\":\"index.esm.js\",\"sources\":[\"../../src/index.ts\"],\"sourcesContent\":[\"export type Options<Result> = {\\n  isImmediate?: boolean;\\n  maxWait?: number;\\n  callback?: (data: Result) => void;\\n};\\n\\nexport interface DebouncedFunction<\\n  Args extends any[],\\n  F extends (...args: Args) => any\\n> {\\n  (this: ThisParameterType<F>, ...args: Args): Promise<ReturnType<F>>;\\n  cancel: (reason?: any) => void;\\n}\\n\\ninterface DebouncedPromise<FunctionReturn> {\\n  resolve: (result: FunctionReturn) => void;\\n  reject: (reason?: any) => void;\\n}\\n\\nexport function debounce<Args extends any[], F extends (...args: Args) => any>(\\n  func: F,\\n  waitMilliseconds = 50,\\n  options: Options<ReturnType<F>> = {}\\n): {\\n  (this: ThisParameterType<F>, ...args: Parameters<F> & Args): Promise<\\n    ReturnType<F>\\n  >;\\n  cancel: (reason?: any) => void;\\n} {\\n  let timeoutId: ReturnType<typeof setTimeout> | undefined;\\n  const isImmediate = options.isImmediate ?? false;\\n  const callback = options.callback ?? false;\\n  const maxWait = options.maxWait;\\n  let lastInvokeTime = Date.now();\\n\\n  let promises: DebouncedPromise<ReturnType<F>>[] = [];\\n\\n  function nextInvokeTimeout() {\\n    if (maxWait !== undefined) {\\n      const timeSinceLastInvocation = Date.now() - lastInvokeTime;\\n\\n      if (timeSinceLastInvocation + waitMilliseconds >= maxWait) {\\n        return maxWait - timeSinceLastInvocation;\\n      }\\n    }\\n\\n    return waitMilliseconds;\\n  }\\n\\n  const debouncedFunction = function (\\n    this: ThisParameterType<F>,\\n    ...args: Parameters<F>\\n  ) {\\n    const context = this;\\n    return new Promise<ReturnType<F>>((resolve, reject) => {\\n      const invokeFunction = function () {\\n        timeoutId = undefined;\\n        lastInvokeTime = Date.now();\\n        if (!isImmediate) {\\n          const result = func.apply(context, args);\\n          callback && callback(result);\\n          promises.forEach(({ resolve }) => resolve(result));\\n          promises = [];\\n        }\\n      };\\n\\n      const shouldCallNow = isImmediate && timeoutId === undefined;\\n\\n      if (timeoutId !== undefined) {\\n        clearTimeout(timeoutId);\\n      }\\n\\n      timeoutId = setTimeout(invokeFunction, nextInvokeTimeout());\\n\\n      if (shouldCallNow) {\\n        const result = func.apply(context, args);\\n        callback && callback(result);\\n        return resolve(result);\\n      }\\n      promises.push({ resolve, reject });\\n    });\\n  };\\n\\n  debouncedFunction.cancel = function (reason?: any) {\\n    if (timeoutId !== undefined) {\\n      clearTimeout(timeoutId);\\n    }\\n    promises.forEach(({ reject }) => reject(reason));\\n    promises = [];\\n  };\\n\\n  return debouncedFunction;\\n}\\n\"],\"names\":[\"debounce\",\"func\",\"waitMilliseconds\",\"options\",\"timeoutId\",\"isImmediate\",\"callback\",\"maxWait\",\"lastInvokeTime\",\"Date\",\"now\",\"promises\",\"nextInvokeTimeout\",\"undefined\",\"timeSinceLastInvocation\",\"debouncedFunction\",\"args\",\"context\",\"this\",\"Promise\",\"resolve\",\"reject\",\"shouldCallNow\",\"clearTimeout\",\"setTimeout\",\"result\",\"apply\",\"forEach\",\"push\",\"cancel\",\"reason\"],\"mappings\":\"SAmBgBA,EACdC,EACAC,EACAC,WAOIC,WARJF,IAAAA,EAAmB,aACnBC,IAAAA,EAAkC,IAQlC,IAAME,WAAcF,EAAQE,gBACtBC,WAAWH,EAAQG,aACnBC,EAAUJ,EAAQI,QACpBC,EAAiBC,KAAKC,MAEtBC,EAA8C,GAElD,SAASC,IACP,QAAgBC,IAAZN,EAAuB,CACzB,IAAMO,EAA0BL,KAAKC,MAAQF,EAE7C,GAAIM,EAA0BZ,GAAoBK,EAChD,OAAOA,EAAUO,EAIrB,OAAOZ,EAGT,IAAMa,EAAoB,eAErBC,2BAEGC,EAAUC,KAChB,WAAWC,QAAuB,SAACC,EAASC,GAC1C,IAWMC,EAAgBjB,QAA6BQ,IAAdT,EAQrC,QANkBS,IAAdT,GACFmB,aAAanB,GAGfA,EAAYoB,WAjBW,WAGrB,GAFApB,OAAYS,EACZL,EAAiBC,KAAKC,OACjBL,EAAa,CAChB,IAAMoB,EAASxB,EAAKyB,MAAMT,EAASD,GACnCV,GAAYA,EAASmB,GACrBd,EAASgB,QAAQ,mBAAiBP,IAAdA,SAAsBK,KAC1Cd,EAAW,KAUwBC,KAEnCU,EAAe,CACjB,IAAMG,EAASxB,EAAKyB,MAAMT,EAASD,GAEnC,OADAV,GAAYA,EAASmB,GACdL,EAAQK,GAEjBd,EAASiB,KAAK,CAAER,QAAAA,EAASC,OAAAA,OAY7B,OARAN,EAAkBc,OAAS,SAAUC,QACjBjB,IAAdT,GACFmB,aAAanB,GAEfO,EAASgB,QAAQ,mBAAgBN,IAAbA,QAAoBS,KACxCnB,EAAW,IAGNI\"}/dist/src/index.d.ts\u0002zexport declare type Options<Result> = {\r\n    isImmediate?: boolean;\r\n    maxWait?: number;\r\n    callback?: (data: Result) => void;\r\n};\r\nexport interface DebouncedFunction<Args extends any[], F extends (...args: Args) => any> {\r\n    (this: ThisParameterType<F>, ...args: Args): Promise<ReturnType<F>>;\r\n    cancel: (reason?: any) => void;\r\n}\r\nexport declare function debounce<Args extends any[], F extends (...args: Args) => any>(func: F, waitMilliseconds?: number, options?: Options<ReturnType<F>>): {\r\n    (this: ThisParameterType<F>, ...args: Parameters<F> & Args): Promise<ReturnType<F>>;\r\n    cancel: (reason?: any) => void;\r\n};\r\n/dist/src/index.js.map\u000fR{\"version\":3,\"file\":\"index.js\",\"sources\":[\"../../src/index.ts\"],\"sourcesContent\":[\"export type Options<Result> = {\\n  isImmediate?: boolean;\\n  maxWait?: number;\\n  callback?: (data: Result) => void;\\n};\\n\\nexport interface DebouncedFunction<\\n  Args extends any[],\\n  F extends (...args: Args) => any\\n> {\\n  (this: ThisParameterType<F>, ...args: Args): Promise<ReturnType<F>>;\\n  cancel: (reason?: any) => void;\\n}\\n\\ninterface DebouncedPromise<FunctionReturn> {\\n  resolve: (result: FunctionReturn) => void;\\n  reject: (reason?: any) => void;\\n}\\n\\nexport function debounce<Args extends any[], F extends (...args: Args) => any>(\\n  func: F,\\n  waitMilliseconds = 50,\\n  options: Options<ReturnType<F>> = {}\\n): {\\n  (this: ThisParameterType<F>, ...args: Parameters<F> & Args): Promise<\\n    ReturnType<F>\\n  >;\\n  cancel: (reason?: any) => void;\\n} {\\n  let timeoutId: ReturnType<typeof setTimeout> | undefined;\\n  const isImmediate = options.isImmediate ?? false;\\n  const callback = options.callback ?? false;\\n  const maxWait = options.maxWait;\\n  let lastInvokeTime = Date.now();\\n\\n  let promises: DebouncedPromise<ReturnType<F>>[] = [];\\n\\n  function nextInvokeTimeout() {\\n    if (maxWait !== undefined) {\\n      const timeSinceLastInvocation = Date.now() - lastInvokeTime;\\n\\n      if (timeSinceLastInvocation + waitMilliseconds >= maxWait) {\\n        return maxWait - timeSinceLastInvocation;\\n      }\\n    }\\n\\n    return waitMilliseconds;\\n  }\\n\\n  const debouncedFunction = function (\\n    this: ThisParameterType<F>,\\n    ...args: Parameters<F>\\n  ) {\\n    const context = this;\\n    return new Promise<ReturnType<F>>((resolve, reject) => {\\n      const invokeFunction = function () {\\n        timeoutId = undefined;\\n        lastInvokeTime = Date.now();\\n        if (!isImmediate) {\\n          const result = func.apply(context, args);\\n          callback && callback(result);\\n          promises.forEach(({ resolve }) => resolve(result));\\n          promises = [];\\n        }\\n      };\\n\\n      const shouldCallNow = isImmediate && timeoutId === undefined;\\n\\n      if (timeoutId !== undefined) {\\n        clearTimeout(timeoutId);\\n      }\\n\\n      timeoutId = setTimeout(invokeFunction, nextInvokeTimeout());\\n\\n      if (shouldCallNow) {\\n        const result = func.apply(context, args);\\n        callback && callback(result);\\n        return resolve(result);\\n      }\\n      promises.push({ resolve, reject });\\n    });\\n  };\\n\\n  debouncedFunction.cancel = function (reason?: any) {\\n    if (timeoutId !== undefined) {\\n      clearTimeout(timeoutId);\\n    }\\n    promises.forEach(({ reject }) => reject(reason));\\n    promises = [];\\n  };\\n\\n  return debouncedFunction;\\n}\\n\"],\"names\":[\"func\",\"waitMilliseconds\",\"options\",\"timeoutId\",\"isImmediate\",\"callback\",\"maxWait\",\"lastInvokeTime\",\"Date\",\"now\",\"promises\",\"nextInvokeTimeout\",\"undefined\",\"timeSinceLastInvocation\",\"debouncedFunction\",\"args\",\"context\",\"this\",\"Promise\",\"resolve\",\"reject\",\"shouldCallNow\",\"clearTimeout\",\"setTimeout\",\"result\",\"apply\",\"forEach\",\"push\",\"cancel\",\"reason\"],\"mappings\":\"0BAoBEA,EACAC,EACAC,WAOIC,WARJF,IAAAA,EAAmB,aACnBC,IAAAA,EAAkC,IAQlC,IAAME,WAAcF,EAAQE,gBACtBC,WAAWH,EAAQG,aACnBC,EAAUJ,EAAQI,QACpBC,EAAiBC,KAAKC,MAEtBC,EAA8C,GAElD,SAASC,IACP,QAAgBC,IAAZN,EAAuB,CACzB,IAAMO,EAA0BL,KAAKC,MAAQF,EAE7C,GAAIM,EAA0BZ,GAAoBK,EAChD,OAAOA,EAAUO,EAIrB,OAAOZ,EAGT,IAAMa,EAAoB,eAErBC,2BAEGC,EAAUC,KAChB,WAAWC,QAAuB,SAACC,EAASC,GAC1C,IAWMC,EAAgBjB,QAA6BQ,IAAdT,EAQrC,QANkBS,IAAdT,GACFmB,aAAanB,GAGfA,EAAYoB,WAjBW,WAGrB,GAFApB,OAAYS,EACZL,EAAiBC,KAAKC,OACjBL,EAAa,CAChB,IAAMoB,EAASxB,EAAKyB,MAAMT,EAASD,GACnCV,GAAYA,EAASmB,GACrBd,EAASgB,QAAQ,mBAAiBP,IAAdA,SAAsBK,KAC1Cd,EAAW,KAUwBC,KAEnCU,EAAe,CACjB,IAAMG,EAASxB,EAAKyB,MAAMT,EAASD,GAEnC,OADAV,GAAYA,EAASmB,GACdL,EAAQK,GAEjBd,EAASiB,KAAK,CAAER,QAAAA,EAASC,OAAAA,OAY7B,OARAN,EAAkBc,OAAS,SAAUC,QACjBjB,IAAdT,GACFmB,aAAanB,GAEfO,EAASgB,QAAQ,mBAAgBN,IAAbA,QAAoBS,KACxCnB,EAAW,IAGNI\"}/dist/src/index.js\u0002exports.debounce=function(e,r,n){var i,o,t;void 0===r&&(r=50),void 0===n&&(n={});var a=null!=(i=n.isImmediate)&&i,u=null!=(o=n.callback)&&o,c=n.maxWait,v=Date.now(),l=[];function f(){if(void 0!==c){var e=Date.now()-v;if(e+r>=c)return c-e}return r}var d=function(){var r=[].slice.call(arguments),n=this;return new Promise(function(i,o){var c=a&&void 0===t;if(void 0!==t&&clearTimeout(t),t=setTimeout(function(){if(t=void 0,v=Date.now(),!a){var i=e.apply(n,r);u&&u(i),l.forEach(function(e){return(0,e.resolve)(i)}),l=[]}},f()),c){var d=e.apply(n,r);return u&&u(d),i(d)}l.push({resolve:i,reject:o})})};return d.cancel=function(e){void 0!==t&&clearTimeout(t),l.forEach(function(r){return(0,r.reject)(e)}),l=[]},d};\n//# sourceMappingURL=index.js.map\n/dist/src/index.modern.js\u0002function t(t,e=50,n={}){var o,c;let i;const r=null!=(o=n.isImmediate)&&o,a=null!=(c=n.callback)&&c,u=n.maxWait;let l=Date.now(),s=[];const f=function(...n){const o=this;return new Promise((c,f)=>{const v=r&&void 0===i;if(void 0!==i&&clearTimeout(i),i=setTimeout(function(){if(i=void 0,l=Date.now(),!r){const e=t.apply(o,n);a&&a(e),s.forEach(({resolve:t})=>t(e)),s=[]}},function(){if(void 0!==u){const t=Date.now()-l;if(t+e>=u)return u-t}return e}()),v){const e=t.apply(o,n);return a&&a(e),c(e)}s.push({resolve:c,reject:f})})};return f.cancel=function(t){void 0!==i&&clearTimeout(i),s.forEach(({reject:e})=>e(t)),s=[]},f}export{t as debounce};\n//# sourceMappingURL=index.modern.js.map\n/dist/src/index.test-d.ts\u0002import { expectType } from \"tsd\";\nimport { debounce } from \"./index\";\n\nconst f = debounce((value: string) => value, 1000);\n\nexpectType<Promise<string>>(f(\"foo\"));\n\n// @ts-expect-error\nf(1);\n\n// inferring debounced function argument types from  the function signature\n//  and the place where the debounced function is called\n\n// real world example with addEventListener\nconst inputs = document.querySelectorAll(\"input\");\ninputs[0].addEventListener(\n  \"input\",\n  debounce((event) => {\n    expectType<EventTarget | null>(event.target);\n  }, 0)\n);\n\n// simplifed use case\nfunction testInference(g: (a: number) => void): any {\n  g(1);\n}\n\ntestInference(\n  debounce((a) => {\n    expectType<number>(a);\n  })\n);\n/dist/src/index.modern.js.map\u000fl{\"version\":3,\"file\":\"index.modern.js\",\"sources\":[\"../../src/index.ts\"],\"sourcesContent\":[\"export type Options<Result> = {\\n  isImmediate?: boolean;\\n  maxWait?: number;\\n  callback?: (data: Result) => void;\\n};\\n\\nexport interface DebouncedFunction<\\n  Args extends any[],\\n  F extends (...args: Args) => any\\n> {\\n  (this: ThisParameterType<F>, ...args: Args): Promise<ReturnType<F>>;\\n  cancel: (reason?: any) => void;\\n}\\n\\ninterface DebouncedPromise<FunctionReturn> {\\n  resolve: (result: FunctionReturn) => void;\\n  reject: (reason?: any) => void;\\n}\\n\\nexport function debounce<Args extends any[], F extends (...args: Args) => any>(\\n  func: F,\\n  waitMilliseconds = 50,\\n  options: Options<ReturnType<F>> = {}\\n): {\\n  (this: ThisParameterType<F>, ...args: Parameters<F> & Args): Promise<\\n    ReturnType<F>\\n  >;\\n  cancel: (reason?: any) => void;\\n} {\\n  let timeoutId: ReturnType<typeof setTimeout> | undefined;\\n  const isImmediate = options.isImmediate ?? false;\\n  const callback = options.callback ?? false;\\n  const maxWait = options.maxWait;\\n  let lastInvokeTime = Date.now();\\n\\n  let promises: DebouncedPromise<ReturnType<F>>[] = [];\\n\\n  function nextInvokeTimeout() {\\n    if (maxWait !== undefined) {\\n      const timeSinceLastInvocation = Date.now() - lastInvokeTime;\\n\\n      if (timeSinceLastInvocation + waitMilliseconds >= maxWait) {\\n        return maxWait - timeSinceLastInvocation;\\n      }\\n    }\\n\\n    return waitMilliseconds;\\n  }\\n\\n  const debouncedFunction = function (\\n    this: ThisParameterType<F>,\\n    ...args: Parameters<F>\\n  ) {\\n    const context = this;\\n    return new Promise<ReturnType<F>>((resolve, reject) => {\\n      const invokeFunction = function () {\\n        timeoutId = undefined;\\n        lastInvokeTime = Date.now();\\n        if (!isImmediate) {\\n          const result = func.apply(context, args);\\n          callback && callback(result);\\n          promises.forEach(({ resolve }) => resolve(result));\\n          promises = [];\\n        }\\n      };\\n\\n      const shouldCallNow = isImmediate && timeoutId === undefined;\\n\\n      if (timeoutId !== undefined) {\\n        clearTimeout(timeoutId);\\n      }\\n\\n      timeoutId = setTimeout(invokeFunction, nextInvokeTimeout());\\n\\n      if (shouldCallNow) {\\n        const result = func.apply(context, args);\\n        callback && callback(result);\\n        return resolve(result);\\n      }\\n      promises.push({ resolve, reject });\\n    });\\n  };\\n\\n  debouncedFunction.cancel = function (reason?: any) {\\n    if (timeoutId !== undefined) {\\n      clearTimeout(timeoutId);\\n    }\\n    promises.forEach(({ reject }) => reject(reason));\\n    promises = [];\\n  };\\n\\n  return debouncedFunction;\\n}\\n\"],\"names\":[\"debounce\",\"func\",\"waitMilliseconds\",\"options\",\"timeoutId\",\"isImmediate\",\"callback\",\"maxWait\",\"lastInvokeTime\",\"Date\",\"now\",\"promises\",\"debouncedFunction\",\"args\",\"context\",\"this\",\"Promise\",\"resolve\",\"reject\",\"shouldCallNow\",\"undefined\",\"clearTimeout\",\"setTimeout\",\"result\",\"apply\",\"forEach\",\"timeSinceLastInvocation\",\"nextInvokeTimeout\",\"push\",\"cancel\",\"reason\"],\"mappings\":\"SAmBgBA,EACdC,EACAC,EAAmB,GACnBC,EAAkC,YAOlC,IAAIC,EACJ,MAAMC,WAAcF,EAAQE,gBACtBC,WAAWH,EAAQG,aACnBC,EAAUJ,EAAQI,QACxB,IAAIC,EAAiBC,KAAKC,MAEtBC,EAA8C,GAclD,MAAMC,EAAoB,YAErBC,GAEH,MAAMC,EAAUC,KAChB,WAAWC,QAAuB,CAACC,EAASC,KAC1C,MAWMC,EAAgBd,QAA6Be,IAAdhB,EAQrC,QANkBgB,IAAdhB,GACFiB,aAAajB,GAGfA,EAAYkB,WAjBW,WAGrB,GAFAlB,OAAYgB,EACZZ,EAAiBC,KAAKC,OACjBL,EAAa,CAChB,MAAMkB,EAAStB,EAAKuB,MAAMV,EAASD,GACnCP,GAAYA,EAASiB,GACrBZ,EAASc,QAAQ,EAAGR,QAAAA,KAAcA,EAAQM,IAC1CZ,EAAW,KAzBnB,WACE,QAAgBS,IAAZb,EAAuB,CACzB,MAAMmB,EAA0BjB,KAAKC,MAAQF,EAE7C,GAAIkB,EAA0BxB,GAAoBK,EAChD,OAAOA,EAAUmB,EAIrB,OAAOxB,EA0BkCyB,IAEnCR,EAAe,CACjB,MAAMI,EAAStB,EAAKuB,MAAMV,EAASD,GAEnC,OADAP,GAAYA,EAASiB,GACdN,EAAQM,GAEjBZ,EAASiB,KAAK,CAAEX,QAAAA,EAASC,OAAAA,OAY7B,OARAN,EAAkBiB,OAAS,SAAUC,QACjBV,IAAdhB,GACFiB,aAAajB,GAEfO,EAASc,QAAQ,EAAGP,OAAAA,KAAaA,EAAOY,IACxCnB,EAAW,IAGNC\"}"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/dHNsaWJAMi41LjA=",
    "content": "/tslib.html <script src=\"tslib.js\"></script>/README.md\u000f# tslib\r\n\r\nThis is a runtime library for [TypeScript](http://www.typescriptlang.org/) that contains all of the TypeScript helper functions.\r\n\r\nThis library is primarily used by the `--importHelpers` flag in TypeScript.\r\nWhen using `--importHelpers`, a module that uses helper functions like `__extends` and `__assign` in the following emitted file:\r\n\r\n```ts\r\nvar __assign = (this && this.__assign) || Object.assign || function(t) {\r\n    for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n        s = arguments[i];\r\n        for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n            t[p] = s[p];\r\n    }\r\n    return t;\r\n};\r\nexports.x = {};\r\nexports.y = __assign({}, exports.x);\r\n\r\n```\r\n\r\nwill instead be emitted as something like the following:\r\n\r\n```ts\r\nvar tslib_1 = require(\"tslib\");\r\nexports.x = {};\r\nexports.y = tslib_1.__assign({}, exports.x);\r\n```\r\n\r\nBecause this can avoid duplicate declarations of things like `__extends`, `__assign`, etc., this means delivering users smaller files on average, as well as less runtime overhead.\r\nFor optimized bundles with TypeScript, you should absolutely consider using `tslib` and `--importHelpers`.\r\n\r\n# Installing\r\n\r\nFor the latest stable version, run:\r\n\r\n## npm\r\n\r\n```sh\r\n# TypeScript 3.9.2 or later\r\nnpm install tslib\r\n\r\n# TypeScript 3.8.4 or earlier\r\nnpm install tslib@^1\r\n\r\n# TypeScript 2.3.2 or earlier\r\nnpm install tslib@1.6.1\r\n```\r\n\r\n## yarn\r\n\r\n```sh\r\n# TypeScript 3.9.2 or later\r\nyarn add tslib\r\n\r\n# TypeScript 3.8.4 or earlier\r\nyarn add tslib@^1\r\n\r\n# TypeScript 2.3.2 or earlier\r\nyarn add tslib@1.6.1\r\n```\r\n\r\n## bower\r\n\r\n```sh\r\n# TypeScript 3.9.2 or later\r\nbower install tslib\r\n\r\n# TypeScript 3.8.4 or earlier\r\nbower install tslib@^1\r\n\r\n# TypeScript 2.3.2 or earlier\r\nbower install tslib@1.6.1\r\n```\r\n\r\n## JSPM\r\n\r\n```sh\r\n# TypeScript 3.9.2 or later\r\njspm install tslib\r\n\r\n# TypeScript 3.8.4 or earlier\r\njspm install tslib@^1\r\n\r\n# TypeScript 2.3.2 or earlier\r\njspm install tslib@1.6.1\r\n```\r\n\r\n# Usage\r\n\r\nSet the `importHelpers` compiler option on the command line:\r\n\r\n```\r\ntsc --importHelpers file.ts\r\n```\r\n\r\nor in your tsconfig.json:\r\n\r\n```json\r\n{\r\n    \"compilerOptions\": {\r\n        \"importHelpers\": true\r\n    }\r\n}\r\n```\r\n\r\n#### For bower and JSPM users\r\n\r\nYou will need to add a `paths` mapping for `tslib`, e.g. For Bower users:\r\n\r\n```json\r\n{\r\n    \"compilerOptions\": {\r\n        \"module\": \"amd\",\r\n        \"importHelpers\": true,\r\n        \"baseUrl\": \"./\",\r\n        \"paths\": {\r\n            \"tslib\" : [\"bower_components/tslib/tslib.d.ts\"]\r\n        }\r\n    }\r\n}\r\n```\r\n\r\nFor JSPM users:\r\n\r\n```json\r\n{\r\n    \"compilerOptions\": {\r\n        \"module\": \"system\",\r\n        \"importHelpers\": true,\r\n        \"baseUrl\": \"./\",\r\n        \"paths\": {\r\n            \"tslib\" : [\"jspm_packages/npm/tslib@2.x.y/tslib.d.ts\"]\r\n        }\r\n    }\r\n}\r\n```\r\n\r\n## Deployment\r\n\r\n- Choose your new version number\r\n- Set it in `package.json` and `bower.json`\r\n- Create a tag: `git tag [version]`\r\n- Push the tag: `git push --tags`\r\n- Create a [release in GitHub](https://github.com/microsoft/tslib/releases)\r\n- Run the [publish to npm](https://github.com/microsoft/tslib/actions?query=workflow%3A%22Publish+to+NPM%22) workflow\r\n\r\nDone.\r\n\r\n# Contribute\r\n\r\nThere are many ways to [contribute](https://github.com/Microsoft/TypeScript/blob/master/CONTRIBUTING.md) to TypeScript.\r\n\r\n* [Submit bugs](https://github.com/Microsoft/TypeScript/issues) and help us verify fixes as they are checked in.\r\n* Review the [source code changes](https://github.com/Microsoft/TypeScript/pulls).\r\n* Engage with other TypeScript users and developers on [StackOverflow](http://stackoverflow.com/questions/tagged/typescript).\r\n* Join the [#typescript](http://twitter.com/#!/search/realtime/%23typescript) discussion on Twitter.\r\n* [Contribute bug fixes](https://github.com/Microsoft/TypeScript/blob/master/CONTRIBUTING.md).\r\n\r\n# Documentation\r\n\r\n* [Quick tutorial](http://www.typescriptlang.org/Tutorial)\r\n* [Programming handbook](http://www.typescriptlang.org/Handbook)\r\n* [Homepage](http://www.typescriptlang.org/)\r\n/tslib.jsG/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global global, define, System, Reflect, Promise */\r\nvar __extends;\r\nvar __assign;\r\nvar __rest;\r\nvar __decorate;\r\nvar __param;\r\nvar __esDecorate;\r\nvar __runInitializers;\r\nvar __propKey;\r\nvar __setFunctionName;\r\nvar __metadata;\r\nvar __awaiter;\r\nvar __generator;\r\nvar __exportStar;\r\nvar __values;\r\nvar __read;\r\nvar __spread;\r\nvar __spreadArrays;\r\nvar __spreadArray;\r\nvar __await;\r\nvar __asyncGenerator;\r\nvar __asyncDelegator;\r\nvar __asyncValues;\r\nvar __makeTemplateObject;\r\nvar __importStar;\r\nvar __importDefault;\r\nvar __classPrivateFieldGet;\r\nvar __classPrivateFieldSet;\r\nvar __classPrivateFieldIn;\r\nvar __createBinding;\r\n(function (factory) {\r\n    var root = typeof global === \"object\" ? global : typeof self === \"object\" ? self : typeof this === \"object\" ? this : {};\r\n    if (typeof define === \"function\" && define.amd) {\r\n        define(\"tslib\", [\"exports\"], function (exports) { factory(createExporter(root, createExporter(exports))); });\r\n    }\r\n    else if (typeof module === \"object\" && typeof module.exports === \"object\") {\r\n        factory(createExporter(root, createExporter(module.exports)));\r\n    }\r\n    else {\r\n        factory(createExporter(root));\r\n    }\r\n    function createExporter(exports, previous) {\r\n        if (exports !== root) {\r\n            if (typeof Object.create === \"function\") {\r\n                Object.defineProperty(exports, \"__esModule\", { value: true });\r\n            }\r\n            else {\r\n                exports.__esModule = true;\r\n            }\r\n        }\r\n        return function (id, v) { return exports[id] = previous ? previous(id, v) : v; };\r\n    }\r\n})\r\n(function (exporter) {\r\n    var extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n\r\n    __extends = function (d, b) {\r\n        if (typeof b !== \"function\" && b !== null)\r\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n        extendStatics(d, b);\r\n        function __() { this.constructor = d; }\r\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n    };\r\n\r\n    __assign = Object.assign || function (t) {\r\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n            s = arguments[i];\r\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n        }\r\n        return t;\r\n    };\r\n\r\n    __rest = function (s, e) {\r\n        var t = {};\r\n        for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n            t[p] = s[p];\r\n        if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n            for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n                if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n                    t[p[i]] = s[p[i]];\r\n            }\r\n        return t;\r\n    };\r\n\r\n    __decorate = function (decorators, target, key, desc) {\r\n        var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n        if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n        else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n        return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n    };\r\n\r\n    __param = function (paramIndex, decorator) {\r\n        return function (target, key) { decorator(target, key, paramIndex); }\r\n    };\r\n\r\n    __esDecorate = function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n        function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n        var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n        var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n        var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n        var _, done = false;\r\n        for (var i = decorators.length - 1; i >= 0; i--) {\r\n            var context = {};\r\n            for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n            for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n            context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n            var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n            if (kind === \"accessor\") {\r\n                if (result === void 0) continue;\r\n                if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n                if (_ = accept(result.get)) descriptor.get = _;\r\n                if (_ = accept(result.set)) descriptor.set = _;\r\n                if (_ = accept(result.init)) initializers.push(_);\r\n            }\r\n            else if (_ = accept(result)) {\r\n                if (kind === \"field\") initializers.push(_);\r\n                else descriptor[key] = _;\r\n            }\r\n        }\r\n        if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n        done = true;\r\n    };\r\n\r\n    __runInitializers = function (thisArg, initializers, value) {\r\n        var useValue = arguments.length > 2;\r\n        for (var i = 0; i < initializers.length; i++) {\r\n            value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n        }\r\n        return useValue ? value : void 0;\r\n    };\r\n\r\n    __propKey = function (x) {\r\n        return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n    };\r\n\r\n    __setFunctionName = function (f, name, prefix) {\r\n        if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n        return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n    };\r\n\r\n    __metadata = function (metadataKey, metadataValue) {\r\n        if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n    };\r\n\r\n    __awaiter = function (thisArg, _arguments, P, generator) {\r\n        function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n        return new (P || (P = Promise))(function (resolve, reject) {\r\n            function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n            function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n            function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n            step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n        });\r\n    };\r\n\r\n    __generator = function (thisArg, body) {\r\n        var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n        return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n        function verb(n) { return function (v) { return step([n, v]); }; }\r\n        function step(op) {\r\n            if (f) throw new TypeError(\"Generator is already executing.\");\r\n            while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n                if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n                if (y = 0, t) op = [op[0] & 2, t.value];\r\n                switch (op[0]) {\r\n                    case 0: case 1: t = op; break;\r\n                    case 4: _.label++; return { value: op[1], done: false };\r\n                    case 5: _.label++; y = op[1]; op = [0]; continue;\r\n                    case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n                    default:\r\n                        if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n                        if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n                        if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n                        if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n                        if (t[2]) _.ops.pop();\r\n                        _.trys.pop(); continue;\r\n                }\r\n                op = body.call(thisArg, _);\r\n            } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n            if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n        }\r\n    };\r\n\r\n    __exportStar = function(m, o) {\r\n        for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n    };\r\n\r\n    __createBinding = Object.create ? (function(o, m, k, k2) {\r\n        if (k2 === undefined) k2 = k;\r\n        var desc = Object.getOwnPropertyDescriptor(m, k);\r\n        if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n            desc = { enumerable: true, get: function() { return m[k]; } };\r\n        }\r\n        Object.defineProperty(o, k2, desc);\r\n    }) : (function(o, m, k, k2) {\r\n        if (k2 === undefined) k2 = k;\r\n        o[k2] = m[k];\r\n    });\r\n\r\n    __values = function (o) {\r\n        var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n        if (m) return m.call(o);\r\n        if (o && typeof o.length === \"number\") return {\r\n            next: function () {\r\n                if (o && i >= o.length) o = void 0;\r\n                return { value: o && o[i++], done: !o };\r\n            }\r\n        };\r\n        throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n    };\r\n\r\n    __read = function (o, n) {\r\n        var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n        if (!m) return o;\r\n        var i = m.call(o), r, ar = [], e;\r\n        try {\r\n            while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n        }\r\n        catch (error) { e = { error: error }; }\r\n        finally {\r\n            try {\r\n                if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n            }\r\n            finally { if (e) throw e.error; }\r\n        }\r\n        return ar;\r\n    };\r\n\r\n    /** @deprecated */\r\n    __spread = function () {\r\n        for (var ar = [], i = 0; i < arguments.length; i++)\r\n            ar = ar.concat(__read(arguments[i]));\r\n        return ar;\r\n    };\r\n\r\n    /** @deprecated */\r\n    __spreadArrays = function () {\r\n        for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n        for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n            for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n                r[k] = a[j];\r\n        return r;\r\n    };\r\n\r\n    __spreadArray = function (to, from, pack) {\r\n        if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n            if (ar || !(i in from)) {\r\n                if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n                ar[i] = from[i];\r\n            }\r\n        }\r\n        return to.concat(ar || Array.prototype.slice.call(from));\r\n    };\r\n\r\n    __await = function (v) {\r\n        return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n    };\r\n\r\n    __asyncGenerator = function (thisArg, _arguments, generator) {\r\n        if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n        var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n        return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n        function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n        function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n        function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r);  }\r\n        function fulfill(value) { resume(\"next\", value); }\r\n        function reject(value) { resume(\"throw\", value); }\r\n        function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n    };\r\n\r\n    __asyncDelegator = function (o) {\r\n        var i, p;\r\n        return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n        function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n    };\r\n\r\n    __asyncValues = function (o) {\r\n        if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n        var m = o[Symbol.asyncIterator], i;\r\n        return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n        function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n        function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n    };\r\n\r\n    __makeTemplateObject = function (cooked, raw) {\r\n        if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n        return cooked;\r\n    };\r\n\r\n    var __setModuleDefault = Object.create ? (function(o, v) {\r\n        Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n    }) : function(o, v) {\r\n        o[\"default\"] = v;\r\n    };\r\n\r\n    __importStar = function (mod) {\r\n        if (mod && mod.__esModule) return mod;\r\n        var result = {};\r\n        if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n        __setModuleDefault(result, mod);\r\n        return result;\r\n    };\r\n\r\n    __importDefault = function (mod) {\r\n        return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n    };\r\n\r\n    __classPrivateFieldGet = function (receiver, state, kind, f) {\r\n        if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n        if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n        return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n    };\r\n\r\n    __classPrivateFieldSet = function (receiver, state, value, kind, f) {\r\n        if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n        if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n        if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n        return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n    };\r\n\r\n    __classPrivateFieldIn = function (state, receiver) {\r\n        if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n        return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n    };\r\n\r\n    exporter(\"__extends\", __extends);\r\n    exporter(\"__assign\", __assign);\r\n    exporter(\"__rest\", __rest);\r\n    exporter(\"__decorate\", __decorate);\r\n    exporter(\"__param\", __param);\r\n    exporter(\"__esDecorate\", __esDecorate);\r\n    exporter(\"__runInitializers\", __runInitializers);\r\n    exporter(\"__propKey\", __propKey);\r\n    exporter(\"__setFunctionName\", __setFunctionName);\r\n    exporter(\"__metadata\", __metadata);\r\n    exporter(\"__awaiter\", __awaiter);\r\n    exporter(\"__generator\", __generator);\r\n    exporter(\"__exportStar\", __exportStar);\r\n    exporter(\"__createBinding\", __createBinding);\r\n    exporter(\"__values\", __values);\r\n    exporter(\"__read\", __read);\r\n    exporter(\"__spread\", __spread);\r\n    exporter(\"__spreadArrays\", __spreadArrays);\r\n    exporter(\"__spreadArray\", __spreadArray);\r\n    exporter(\"__await\", __await);\r\n    exporter(\"__asyncGenerator\", __asyncGenerator);\r\n    exporter(\"__asyncDelegator\", __asyncDelegator);\r\n    exporter(\"__asyncValues\", __asyncValues);\r\n    exporter(\"__makeTemplateObject\", __makeTemplateObject);\r\n    exporter(\"__importStar\", __importStar);\r\n    exporter(\"__importDefault\", __importDefault);\r\n    exporter(\"__classPrivateFieldGet\", __classPrivateFieldGet);\r\n    exporter(\"__classPrivateFieldSet\", __classPrivateFieldSet);\r\n    exporter(\"__classPrivateFieldIn\", __classPrivateFieldIn);\r\n});\r\n/modules/package.json\u001a{\r\n    \"type\": \"module\"\r\n}/tslib.es6.js9/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n    extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n    if (typeof b !== \"function\" && b !== null)\r\n        throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n    __assign = Object.assign || function __assign(t) {\r\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n            s = arguments[i];\r\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n        }\r\n        return t;\r\n    }\r\n    return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n    var t = {};\r\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n        t[p] = s[p];\r\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n                t[p[i]] = s[p[i]];\r\n        }\r\n    return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n    return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n    function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n    var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n    var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n    var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n    var _, done = false;\r\n    for (var i = decorators.length - 1; i >= 0; i--) {\r\n        var context = {};\r\n        for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n        for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n        context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n        var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n        if (kind === \"accessor\") {\r\n            if (result === void 0) continue;\r\n            if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n            if (_ = accept(result.get)) descriptor.get = _;\r\n            if (_ = accept(result.set)) descriptor.set = _;\r\n            if (_ = accept(result.init)) initializers.push(_);\r\n        }\r\n        else if (_ = accept(result)) {\r\n            if (kind === \"field\") initializers.push(_);\r\n            else descriptor[key] = _;\r\n        }\r\n    }\r\n    if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n    done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n    var useValue = arguments.length > 2;\r\n    for (var i = 0; i < initializers.length; i++) {\r\n        value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n    }\r\n    return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n    return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n    if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n    return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n    function verb(n) { return function (v) { return step([n, v]); }; }\r\n    function step(op) {\r\n        if (f) throw new TypeError(\"Generator is already executing.\");\r\n        while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n            if (y = 0, t) op = [op[0] & 2, t.value];\r\n            switch (op[0]) {\r\n                case 0: case 1: t = op; break;\r\n                case 4: _.label++; return { value: op[1], done: false };\r\n                case 5: _.label++; y = op[1]; op = [0]; continue;\r\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n                default:\r\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n                    if (t[2]) _.ops.pop();\r\n                    _.trys.pop(); continue;\r\n            }\r\n            op = body.call(thisArg, _);\r\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n    }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    var desc = Object.getOwnPropertyDescriptor(m, k);\r\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n        desc = { enumerable: true, get: function() { return m[k]; } };\r\n    }\r\n    Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n    if (m) return m.call(o);\r\n    if (o && typeof o.length === \"number\") return {\r\n        next: function () {\r\n            if (o && i >= o.length) o = void 0;\r\n            return { value: o && o[i++], done: !o };\r\n        }\r\n    };\r\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n    if (!m) return o;\r\n    var i = m.call(o), r, ar = [], e;\r\n    try {\r\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n    }\r\n    catch (error) { e = { error: error }; }\r\n    finally {\r\n        try {\r\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n        }\r\n        finally { if (e) throw e.error; }\r\n    }\r\n    return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n    for (var ar = [], i = 0; i < arguments.length; i++)\r\n        ar = ar.concat(__read(arguments[i]));\r\n    return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n    for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n    for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n        for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n            r[k] = a[j];\r\n    return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n        if (ar || !(i in from)) {\r\n            if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n            ar[i] = from[i];\r\n        }\r\n    }\r\n    return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n    return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n    return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n    function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n    function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n    function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n    function fulfill(value) { resume(\"next\", value); }\r\n    function reject(value) { resume(\"throw\", value); }\r\n    function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n    var i, p;\r\n    return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n    function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var m = o[Symbol.asyncIterator], i;\r\n    return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n    function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n    function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n    if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n    return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n    o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n    if (mod && mod.__esModule) return mod;\r\n    var result = {};\r\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n    __setModuleDefault(result, mod);\r\n    return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n    return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n    return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n    if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n    return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n    if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n    return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n/tslib.d.ts@\u001b/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n\r\n/**\r\n * Used to shim class extends.\r\n *\r\n * @param d The derived class.\r\n * @param b The base class.\r\n */\r\nexport declare function __extends(d: Function, b: Function): void;\r\n\r\n/**\r\n * Copy the values of all of the enumerable own properties from one or more source objects to a\r\n * target object. Returns the target object.\r\n *\r\n * @param t The target object to copy to.\r\n * @param sources One or more source objects from which to copy properties\r\n */\r\nexport declare function __assign(t: any, ...sources: any[]): any;\r\n\r\n/**\r\n * Performs a rest spread on an object.\r\n *\r\n * @param t The source value.\r\n * @param propertyNames The property names excluded from the rest spread.\r\n */\r\nexport declare function __rest(t: any, propertyNames: (string | symbol)[]): any;\r\n\r\n/**\r\n * Applies decorators to a target object\r\n *\r\n * @param decorators The set of decorators to apply.\r\n * @param target The target object.\r\n * @param key If specified, the own property to apply the decorators to.\r\n * @param desc The property descriptor, defaults to fetching the descriptor from the target object.\r\n * @experimental\r\n */\r\nexport declare function __decorate(decorators: Function[], target: any, key?: string | symbol, desc?: any): any;\r\n\r\n/**\r\n * Creates an observing function decorator from a parameter decorator.\r\n *\r\n * @param paramIndex The parameter index to apply the decorator to.\r\n * @param decorator The parameter decorator to apply. Note that the return value is ignored.\r\n * @experimental\r\n */\r\nexport declare function __param(paramIndex: number, decorator: Function): Function;\r\n\r\n/**\r\n * Applies decorators to a class or class member, following the native ECMAScript decorator specification.\r\n * @param ctor For non-field class members, the class constructor. Otherwise, `null`.\r\n * @param descriptorIn The `PropertyDescriptor` to use when unable to look up the property from `ctor`.\r\n * @param decorators The decorators to apply\r\n * @param contextIn The `DecoratorContext` to clone for each decorator application.\r\n * @param initializers An array of field initializer mutation functions into which new initializers are written.\r\n * @param extraInitializers An array of extra initializer functions into which new initializers are written.\r\n */\r\nexport declare function __esDecorate(ctor: Function | null, descriptorIn: object | null, decorators: Function[], contextIn: object, initializers: Function[] | null, extraInitializers: Function[]): void;\r\n\r\n/**\r\n * Runs field initializers or extra initializers generated by `__esDecorate`.\r\n * @param thisArg The `this` argument to use.\r\n * @param initializers The array of initializers to evaluate.\r\n * @param value The initial value to pass to the initializers.\r\n */\r\nexport declare function __runInitializers(thisArg: unknown, initializers: Function[], value?: any): any;\r\n\r\n/**\r\n * Converts a computed property name into a `string` or `symbol` value.\r\n */\r\nexport declare function __propKey(x: any): string | symbol;\r\n\r\n/**\r\n * Assigns the name of a function derived from the left-hand side of an assignment.\r\n * @param f The function to rename.\r\n * @param name The new name for the function.\r\n * @param prefix A prefix (such as `\"get\"` or `\"set\"`) to insert before the name.\r\n */\r\nexport declare function __setFunctionName(f: Function, name: string | symbol, prefix?: string): Function;\r\n\r\n/**\r\n * Creates a decorator that sets metadata.\r\n *\r\n * @param metadataKey The metadata key\r\n * @param metadataValue The metadata value\r\n * @experimental\r\n */\r\nexport declare function __metadata(metadataKey: any, metadataValue: any): Function;\r\n\r\n/**\r\n * Converts a generator function into a pseudo-async function, by treating each `yield` as an `await`.\r\n *\r\n * @param thisArg The reference to use as the `this` value in the generator function\r\n * @param _arguments The optional arguments array\r\n * @param P The optional promise constructor argument, defaults to the `Promise` property of the global object.\r\n * @param generator The generator function\r\n */\r\nexport declare function __awaiter(thisArg: any, _arguments: any, P: Function, generator: Function): any;\r\n\r\n/**\r\n * Creates an Iterator object using the body as the implementation.\r\n *\r\n * @param thisArg The reference to use as the `this` value in the function\r\n * @param body The generator state-machine based implementation.\r\n *\r\n * @see [./docs/generator.md]\r\n */\r\nexport declare function __generator(thisArg: any, body: Function): any;\r\n\r\n/**\r\n * Creates bindings for all enumerable properties of `m` on `exports`\r\n *\r\n * @param m The source object\r\n * @param exports The `exports` object.\r\n */\r\nexport declare function __exportStar(m: any, o: any): void;\r\n\r\n/**\r\n * Creates a value iterator from an `Iterable` or `ArrayLike` object.\r\n *\r\n * @param o The object.\r\n * @throws {TypeError} If `o` is neither `Iterable`, nor an `ArrayLike`.\r\n */\r\nexport declare function __values(o: any): any;\r\n\r\n/**\r\n * Reads values from an `Iterable` or `ArrayLike` object and returns the resulting array.\r\n *\r\n * @param o The object to read from.\r\n * @param n The maximum number of arguments to read, defaults to `Infinity`.\r\n */\r\nexport declare function __read(o: any, n?: number): any[];\r\n\r\n/**\r\n * Creates an array from iterable spread.\r\n *\r\n * @param args The Iterable objects to spread.\r\n * @deprecated since TypeScript 4.2 - Use `__spreadArray`\r\n */\r\nexport declare function __spread(...args: any[][]): any[];\r\n\r\n/**\r\n * Creates an array from array spread.\r\n *\r\n * @param args The ArrayLikes to spread into the resulting array.\r\n * @deprecated since TypeScript 4.2 - Use `__spreadArray`\r\n */\r\nexport declare function __spreadArrays(...args: any[][]): any[];\r\n\r\n/**\r\n * Spreads the `from` array into the `to` array.\r\n *\r\n * @param pack Replace empty elements with `undefined`.\r\n */\r\nexport declare function __spreadArray(to: any[], from: any[], pack?: boolean): any[];\r\n\r\n/**\r\n * Creates an object that signals to `__asyncGenerator` that it shouldn't be yielded,\r\n * and instead should be awaited and the resulting value passed back to the generator.\r\n *\r\n * @param v The value to await.\r\n */\r\nexport declare function __await(v: any): any;\r\n\r\n/**\r\n * Converts a generator function into an async generator function, by using `yield __await`\r\n * in place of normal `await`.\r\n *\r\n * @param thisArg The reference to use as the `this` value in the generator function\r\n * @param _arguments The optional arguments array\r\n * @param generator The generator function\r\n */\r\nexport declare function __asyncGenerator(thisArg: any, _arguments: any, generator: Function): any;\r\n\r\n/**\r\n * Used to wrap a potentially async iterator in such a way so that it wraps the result\r\n * of calling iterator methods of `o` in `__await` instances, and then yields the awaited values.\r\n *\r\n * @param o The potentially async iterator.\r\n * @returns A synchronous iterator yielding `__await` instances on every odd invocation\r\n *          and returning the awaited `IteratorResult` passed to `next` every even invocation.\r\n */\r\nexport declare function __asyncDelegator(o: any): any;\r\n\r\n/**\r\n * Creates a value async iterator from an `AsyncIterable`, `Iterable` or `ArrayLike` object.\r\n *\r\n * @param o The object.\r\n * @throws {TypeError} If `o` is neither `AsyncIterable`, `Iterable`, nor an `ArrayLike`.\r\n */\r\nexport declare function __asyncValues(o: any): any;\r\n\r\n/**\r\n * Creates a `TemplateStringsArray` frozen object from the `cooked` and `raw` arrays.\r\n *\r\n * @param cooked The cooked possibly-sparse array.\r\n * @param raw The raw string content.\r\n */\r\nexport declare function __makeTemplateObject(cooked: string[], raw: string[]): TemplateStringsArray;\r\n\r\n/**\r\n * Used to shim default and named imports in ECMAScript Modules transpiled to CommonJS.\r\n *\r\n * ```js\r\n * import Default, { Named, Other } from \"mod\";\r\n * // or\r\n * import { default as Default, Named, Other } from \"mod\";\r\n * ```\r\n *\r\n * @param mod The CommonJS module exports object.\r\n */\r\nexport declare function __importStar<T>(mod: T): T;\r\n\r\n/**\r\n * Used to shim default imports in ECMAScript Modules transpiled to CommonJS.\r\n *\r\n * ```js\r\n * import Default from \"mod\";\r\n * ```\r\n *\r\n * @param mod The CommonJS module exports object.\r\n */\r\nexport declare function __importDefault<T>(mod: T): T | { default: T };\r\n\r\n/**\r\n * Emulates reading a private instance field.\r\n *\r\n * @param receiver The instance from which to read the private field.\r\n * @param state A WeakMap containing the private field value for an instance.\r\n * @param kind Either `\"f\"` for a field, `\"a\"` for an accessor, or `\"m\"` for a method.\r\n *\r\n * @throws {TypeError} If `state` doesn't have an entry for `receiver`.\r\n */\r\nexport declare function __classPrivateFieldGet<T extends object, V>(\r\n    receiver: T,\r\n    state: { has(o: T): boolean, get(o: T): V | undefined },\r\n    kind?: \"f\"\r\n): V;\r\n\r\n/**\r\n * Emulates reading a private static field.\r\n *\r\n * @param receiver The object from which to read the private static field.\r\n * @param state The class constructor containing the definition of the static field.\r\n * @param kind Either `\"f\"` for a field, `\"a\"` for an accessor, or `\"m\"` for a method.\r\n * @param f The descriptor that holds the static field value.\r\n *\r\n * @throws {TypeError} If `receiver` is not `state`.\r\n */\r\nexport declare function __classPrivateFieldGet<T extends new (...args: any[]) => unknown, V>(\r\n    receiver: T,\r\n    state: T,\r\n    kind: \"f\",\r\n    f: { value: V }\r\n): V;\r\n\r\n/**\r\n * Emulates evaluating a private instance \"get\" accessor.\r\n *\r\n * @param receiver The instance on which to evaluate the private \"get\" accessor.\r\n * @param state A WeakSet used to verify an instance supports the private \"get\" accessor.\r\n * @param kind Either `\"f\"` for a field, `\"a\"` for an accessor, or `\"m\"` for a method.\r\n * @param f The \"get\" accessor function to evaluate.\r\n *\r\n * @throws {TypeError} If `state` doesn't have an entry for `receiver`.\r\n */\r\nexport declare function __classPrivateFieldGet<T extends object, V>(\r\n    receiver: T,\r\n    state: { has(o: T): boolean },\r\n    kind: \"a\",\r\n    f: () => V\r\n): V;\r\n\r\n/**\r\n * Emulates evaluating a private static \"get\" accessor.\r\n *\r\n * @param receiver The object on which to evaluate the private static \"get\" accessor.\r\n * @param state The class constructor containing the definition of the static \"get\" accessor.\r\n * @param kind Either `\"f\"` for a field, `\"a\"` for an accessor, or `\"m\"` for a method.\r\n * @param f The \"get\" accessor function to evaluate.\r\n *\r\n * @throws {TypeError} If `receiver` is not `state`.\r\n */\r\nexport declare function __classPrivateFieldGet<T extends new (...args: any[]) => unknown, V>(\r\n    receiver: T,\r\n    state: T,\r\n    kind: \"a\",\r\n    f: () => V\r\n): V;\r\n\r\n/**\r\n * Emulates reading a private instance method.\r\n *\r\n * @param receiver The instance from which to read a private method.\r\n * @param state A WeakSet used to verify an instance supports the private method.\r\n * @param kind Either `\"f\"` for a field, `\"a\"` for an accessor, or `\"m\"` for a method.\r\n * @param f The function to return as the private instance method.\r\n *\r\n * @throws {TypeError} If `state` doesn't have an entry for `receiver`.\r\n */\r\nexport declare function __classPrivateFieldGet<T extends object, V extends (...args: any[]) => unknown>(\r\n    receiver: T,\r\n    state: { has(o: T): boolean },\r\n    kind: \"m\",\r\n    f: V\r\n): V;\r\n\r\n/**\r\n * Emulates reading a private static method.\r\n *\r\n * @param receiver The object from which to read the private static method.\r\n * @param state The class constructor containing the definition of the static method.\r\n * @param kind Either `\"f\"` for a field, `\"a\"` for an accessor, or `\"m\"` for a method.\r\n * @param f The function to return as the private static method.\r\n *\r\n * @throws {TypeError} If `receiver` is not `state`.\r\n */\r\nexport declare function __classPrivateFieldGet<T extends new (...args: any[]) => unknown, V extends (...args: any[]) => unknown>(\r\n    receiver: T,\r\n    state: T,\r\n    kind: \"m\",\r\n    f: V\r\n): V;\r\n\r\n/**\r\n * Emulates writing to a private instance field.\r\n *\r\n * @param receiver The instance on which to set a private field value.\r\n * @param state A WeakMap used to store the private field value for an instance.\r\n * @param value The value to store in the private field.\r\n * @param kind Either `\"f\"` for a field, `\"a\"` for an accessor, or `\"m\"` for a method.\r\n *\r\n * @throws {TypeError} If `state` doesn't have an entry for `receiver`.\r\n */\r\nexport declare function __classPrivateFieldSet<T extends object, V>(\r\n    receiver: T,\r\n    state: { has(o: T): boolean, set(o: T, value: V): unknown },\r\n    value: V,\r\n    kind?: \"f\"\r\n): V;\r\n\r\n/**\r\n * Emulates writing to a private static field.\r\n *\r\n * @param receiver The object on which to set the private static field.\r\n * @param state The class constructor containing the definition of the private static field.\r\n * @param value The value to store in the private field.\r\n * @param kind Either `\"f\"` for a field, `\"a\"` for an accessor, or `\"m\"` for a method.\r\n * @param f The descriptor that holds the static field value.\r\n *\r\n * @throws {TypeError} If `receiver` is not `state`.\r\n */\r\nexport declare function __classPrivateFieldSet<T extends new (...args: any[]) => unknown, V>(\r\n    receiver: T,\r\n    state: T,\r\n    value: V,\r\n    kind: \"f\",\r\n    f: { value: V }\r\n): V;\r\n\r\n/**\r\n * Emulates writing to a private instance \"set\" accessor.\r\n *\r\n * @param receiver The instance on which to evaluate the private instance \"set\" accessor.\r\n * @param state A WeakSet used to verify an instance supports the private \"set\" accessor.\r\n * @param value The value to store in the private accessor.\r\n * @param kind Either `\"f\"` for a field, `\"a\"` for an accessor, or `\"m\"` for a method.\r\n * @param f The \"set\" accessor function to evaluate.\r\n *\r\n * @throws {TypeError} If `state` doesn't have an entry for `receiver`.\r\n */\r\nexport declare function __classPrivateFieldSet<T extends object, V>(\r\n    receiver: T,\r\n    state: { has(o: T): boolean },\r\n    value: V,\r\n    kind: \"a\",\r\n    f: (v: V) => void\r\n): V;\r\n\r\n/**\r\n * Emulates writing to a private static \"set\" accessor.\r\n *\r\n * @param receiver The object on which to evaluate the private static \"set\" accessor.\r\n * @param state The class constructor containing the definition of the static \"set\" accessor.\r\n * @param value The value to store in the private field.\r\n * @param kind Either `\"f\"` for a field, `\"a\"` for an accessor, or `\"m\"` for a method.\r\n * @param f The \"set\" accessor function to evaluate.\r\n *\r\n * @throws {TypeError} If `receiver` is not `state`.\r\n */\r\nexport declare function __classPrivateFieldSet<T extends new (...args: any[]) => unknown, V>(\r\n    receiver: T,\r\n    state: T,\r\n    value: V,\r\n    kind: \"a\",\r\n    f: (v: V) => void\r\n): V;\r\n\r\n/**\r\n * Checks for the existence of a private field/method/accessor.\r\n *\r\n * @param state The class constructor containing the static member, or the WeakMap or WeakSet associated with a private instance member.\r\n * @param receiver The object for which to test the presence of the private member.\r\n */\r\nexport declare function __classPrivateFieldIn(\r\n    state: (new (...args: any[]) => unknown) | { has(o: any): boolean },\r\n    receiver: unknown,\r\n): boolean;\r\n\r\n/**\r\n * Creates a re-export binding on `object` with key `objectKey` that references `target[key]`.\r\n *\r\n * @param object The local `exports` object.\r\n * @param target The object to re-export from.\r\n * @param key The property key of `target` to re-export.\r\n * @param objectKey The property key to re-export as. Defaults to `key`.\r\n */\r\nexport declare function __createBinding(object: object, target: object, key: PropertyKey, objectKey?: PropertyKey): void;\r\n/SECURITY.md\n<!-- BEGIN MICROSOFT SECURITY.MD V0.0.7 BLOCK -->\n\n## Security\n\nMicrosoft takes the security of our software products and services seriously, which includes all source code repositories managed through our GitHub organizations, which include [Microsoft](https://github.com/Microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet), [Xamarin](https://github.com/xamarin), and [our GitHub organizations](https://opensource.microsoft.com/).\n\nIf you believe you have found a security vulnerability in any Microsoft-owned repository that meets [Microsoft's definition of a security vulnerability](https://aka.ms/opensource/security/definition), please report it to us as described below.\n\n## Reporting Security Issues\n\n**Please do not report security vulnerabilities through public GitHub issues.**\n\nInstead, please report them to the Microsoft Security Response Center (MSRC) at [https://msrc.microsoft.com/create-report](https://aka.ms/opensource/security/create-report).\n\nIf you prefer to submit without logging in, send email to [secure@microsoft.com](mailto:secure@microsoft.com).  If possible, encrypt your message with our PGP key; please download it from the [Microsoft Security Response Center PGP Key page](https://aka.ms/opensource/security/pgpkey).\n\nYou should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your original message. Additional information can be found at [microsoft.com/msrc](https://aka.ms/opensource/security/msrc). \n\nPlease include the requested information listed below (as much as you can provide) to help us better understand the nature and scope of the possible issue:\n\n  * Type of issue (e.g. buffer overflow, SQL injection, cross-site scripting, etc.)\n  * Full paths of source file(s) related to the manifestation of the issue\n  * The location of the affected source code (tag/branch/commit or direct URL)\n  * Any special configuration required to reproduce the issue\n  * Step-by-step instructions to reproduce the issue\n  * Proof-of-concept or exploit code (if possible)\n  * Impact of the issue, including how an attacker might exploit the issue\n\nThis information will help us triage your report more quickly.\n\nIf you are reporting for a bug bounty, more complete reports can contribute to a higher bounty award. Please visit our [Microsoft Bug Bounty Program](https://aka.ms/opensource/security/bounty) page for more details about our active programs.\n\n## Preferred Languages\n\nWe prefer all communications to be in English.\n\n## Policy\n\nMicrosoft follows the principle of [Coordinated Vulnerability Disclosure](https://aka.ms/opensource/security/cvd).\n\n<!-- END MICROSOFT SECURITY.MD BLOCK -->\n/modules/index.js\u0004import tslib from '../tslib.js';\r\nconst {\r\n    __extends,\r\n    __assign,\r\n    __rest,\r\n    __decorate,\r\n    __param,\r\n    __esDecorate,\r\n    __runInitializers,\r\n    __propKey,\r\n    __setFunctionName,\r\n    __metadata,\r\n    __awaiter,\r\n    __generator,\r\n    __exportStar,\r\n    __createBinding,\r\n    __values,\r\n    __read,\r\n    __spread,\r\n    __spreadArrays,\r\n    __spreadArray,\r\n    __await,\r\n    __asyncGenerator,\r\n    __asyncDelegator,\r\n    __asyncValues,\r\n    __makeTemplateObject,\r\n    __importStar,\r\n    __importDefault,\r\n    __classPrivateFieldGet,\r\n    __classPrivateFieldSet,\r\n    __classPrivateFieldIn,\r\n} = tslib;\r\nexport {\r\n    __extends,\r\n    __assign,\r\n    __rest,\r\n    __decorate,\r\n    __param,\r\n    __esDecorate,\r\n    __runInitializers,\r\n    __propKey,\r\n    __setFunctionName,\r\n    __metadata,\r\n    __awaiter,\r\n    __generator,\r\n    __exportStar,\r\n    __createBinding,\r\n    __values,\r\n    __read,\r\n    __spread,\r\n    __spreadArrays,\r\n    __spreadArray,\r\n    __await,\r\n    __asyncGenerator,\r\n    __asyncDelegator,\r\n    __asyncValues,\r\n    __makeTemplateObject,\r\n    __importStar,\r\n    __importDefault,\r\n    __classPrivateFieldGet,\r\n    __classPrivateFieldSet,\r\n    __classPrivateFieldIn,\r\n};\r\n/package.json\u0003{\n    \"name\": \"tslib\",\n    \"author\": \"Microsoft Corp.\",\n    \"homepage\": \"https://www.typescriptlang.org/\",\n    \"version\": \"2.5.0\",\n    \"license\": \"0BSD\",\n    \"description\": \"Runtime library for TypeScript helper functions\",\n    \"keywords\": [\n        \"TypeScript\",\n        \"Microsoft\",\n        \"compiler\",\n        \"language\",\n        \"javascript\",\n        \"tslib\",\n        \"runtime\"\n    ],\n    \"bugs\": {\n        \"url\": \"https://github.com/Microsoft/TypeScript/issues\"\n    },\n    \"repository\": {\n        \"type\": \"git\",\n        \"url\": \"https://github.com/Microsoft/tslib.git\"\n    },\n    \"main\": \"tslib.js\",\n    \"module\": \"tslib.es6.js\",\n    \"jsnext:main\": \"tslib.es6.js\",\n    \"typings\": \"tslib.d.ts\",\n    \"sideEffects\": false,\n    \"exports\": {\n        \".\": {\n            \"module\": \"./tslib.es6.js\",\n            \"import\": \"./modules/index.js\",\n            \"default\": \"./tslib.js\"\n        },\n        \"./*\": \"./*\",\n        \"./\": \"./\"\n    }\n}\n/tslib.es6.html$<script src=\"tslib.es6.js\"></script>/CopyrightNotice.txt\u00036/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n\r\n/LICENSE.txt\u0002Copyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE."
  },
  {
    "path": "tests/cdn-proxy/v2/mod/dHlwZS1jaGVja0AwLjQuMA==",
    "content": "/lib/index.js\u0001// Generated by LiveScript 1.6.0\n(function(){\n  var VERSION, parseType, parsedTypeCheck, typeCheck;\n  VERSION = '0.4.0';\n  parseType = require('./parse-type');\n  parsedTypeCheck = require('./check');\n  typeCheck = function(type, input, options){\n    return parsedTypeCheck(parseType(type), input, options);\n  };\n  module.exports = {\n    VERSION: VERSION,\n    typeCheck: typeCheck,\n    parsedTypeCheck: parsedTypeCheck,\n    parseType: parseType\n  };\n}).call(this);\n/LICENSE\u0004\u001eCopyright (c) George Zahariev\n\nPermission is hereby granted, free of charge, to any person\nobtaining a copy of this software and associated documentation\nfiles (the \"Software\"), to deal in the Software without\nrestriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the\nSoftware is furnished to do so, subject to the following\nconditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\nOF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\nHOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\nWHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\nFROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\nOTHER DEALINGS IN THE SOFTWARE.\n/README.md'# type-check [![Build Status](https://travis-ci.org/gkz/type-check.png?branch=master)](https://travis-ci.org/gkz/type-check)\n\n<a name=\"type-check\" />\n\n`type-check` is a library which allows you to check the types of JavaScript values at runtime with a Haskell like type syntax. It is great for checking external input, for testing, or even for adding a bit of safety to your internal code. It is a major component of [levn](https://github.com/gkz/levn). MIT license. Version 0.4.0. Check out the [demo](http://gkz.github.io/type-check/).\n\nFor updates on `type-check`, [follow me on twitter](https://twitter.com/gkzahariev).\n\n    npm install type-check\n\n## Quick Examples\n\n```js\n// Basic types:\nvar typeCheck = require('type-check').typeCheck;\ntypeCheck('Number', 1);               // true\ntypeCheck('Number', 'str');           // false\ntypeCheck('Error', new Error);        // true\ntypeCheck('Undefined', undefined);    // true\n\n// Comment\ntypeCheck('count::Number', 1);        // true\n\n// One type OR another type:\ntypeCheck('Number | String', 2);      // true\ntypeCheck('Number | String', 'str');  // true\n\n// Wildcard, matches all types:\ntypeCheck('*', 2) // true\n\n// Array, all elements of a single type:\ntypeCheck('[Number]', [1, 2, 3]);                // true\ntypeCheck('[Number]', [1, 'str', 3]);            // false\n\n// Tuples, or fixed length arrays with elements of different types:\ntypeCheck('(String, Number)', ['str', 2]);       // true\ntypeCheck('(String, Number)', ['str']);          // false\ntypeCheck('(String, Number)', ['str', 2, 5]);    // false\n\n// Object properties:\ntypeCheck('{x: Number, y: Boolean}', {x: 2, y: false});             // true\ntypeCheck('{x: Number, y: Boolean}',       {x: 2});                 // false\ntypeCheck('{x: Number, y: Maybe Boolean}', {x: 2});                 // true\ntypeCheck('{x: Number, y: Boolean}',      {x: 2, y: false, z: 3});  // false\ntypeCheck('{x: Number, y: Boolean, ...}', {x: 2, y: false, z: 3});  // true\n\n// A particular type AND object properties:\ntypeCheck('RegExp{source: String, ...}', /re/i);          // true\ntypeCheck('RegExp{source: String, ...}', {source: 're'}); // false\n\n// Custom types:\nvar opt = {customTypes:\n  {Even: { typeOf: 'Number', validate: function(x) { return x % 2 === 0; }}}};\ntypeCheck('Even', 2, opt); // true\n\n// Nested:\nvar type = '{a: (String, [Number], {y: Array, ...}), b: Error{message: String, ...}}'\ntypeCheck(type, {a: ['hi', [1, 2, 3], {y: [1, 'ms']}], b: new Error('oh no')}); // true\n```\n\nCheck out the [type syntax format](#syntax) and [guide](#guide).\n\n## Usage\n\n`require('type-check');` returns an object that exposes four properties. `VERSION` is the current version of the library as a string. `typeCheck`, `parseType`, and `parsedTypeCheck` are functions.\n\n```js\n// typeCheck(type, input, options);\ntypeCheck('Number', 2);               // true\n\n// parseType(type);\nvar parsedType = parseType('Number'); // object\n\n// parsedTypeCheck(parsedType, input, options);\nparsedTypeCheck(parsedType, 2);       // true\n```\n\n### typeCheck(type, input, options)\n\n`typeCheck` checks a JavaScript value `input` against `type` written in the [type format](#type-format) (and taking account the optional `options`) and returns whether the `input` matches the `type`.\n\n##### arguments\n* type - `String` - the type written in the [type format](#type-format) which to check against\n* input - `*` - any JavaScript value, which is to be checked against the type\n* options - `Maybe Object` - an optional parameter specifying additional options, currently the only available option is specifying [custom types](#custom-types)\n\n##### returns\n`Boolean` - whether the input matches the type\n\n##### example\n```js\ntypeCheck('Number', 2); // true\n```\n\n### parseType(type)\n\n`parseType` parses string `type` written in the [type format](#type-format) into an object representing the parsed type.\n\n##### arguments\n* type - `String` - the type written in the [type format](#type-format) which to parse\n\n##### returns\n`Object` - an object in the parsed type format representing the parsed type\n\n##### example\n```js\nparseType('Number'); // [{type: 'Number'}]\n```\n### parsedTypeCheck(parsedType, input, options)\n\n`parsedTypeCheck` checks a JavaScript value `input` against parsed `type` in the parsed type format (and taking account the optional `options`) and returns whether the `input` matches the `type`. Use this in conjunction with `parseType` if you are going to use a type more than once.\n\n##### arguments\n* type - `Object` - the type in the parsed type format which to check against\n* input - `*` - any JavaScript value, which is to be checked against the type\n* options - `Maybe Object` - an optional parameter specifying additional options, currently the only available option is specifying [custom types](#custom-types)\n\n##### returns\n`Boolean` - whether the input matches the type\n\n##### example\n```js\nparsedTypeCheck([{type: 'Number'}], 2); // true\nvar parsedType = parseType('String');\nparsedTypeCheck(parsedType, 'str');     // true\n```\n\n<a name=\"type-format\" />\n## Type Format\n\n### Syntax\n\nWhite space is ignored. The root node is a __Types__.\n\n* __Identifier__ = `[\\$\\w]+` - a group of any lower or upper case letters, numbers, underscores, or dollar signs - eg. `String`\n* __Type__ = an `Identifier`, an `Identifier` followed by a `Structure`, just a `Structure`, or a wildcard `*` - eg. `String`, `Object{x: Number}`, `{x: Number}`, `Array{0: String, 1: Boolean, length: Number}`, `*`\n* __Types__ = optionally a comment (an `Identifier` followed by a `::`), optionally the identifier `Maybe`, one or more `Type`, separated by `|` - eg. `Number`, `String | Date`, `Maybe Number`, `Maybe Boolean | String`\n* __Structure__ = `Fields`, or a `Tuple`, or an `Array` - eg. `{x: Number}`, `(String, Number)`, `[Date]`\n* __Fields__ = a `{`, followed one or more `Field` separated by a comma `,` (trailing comma `,` is permitted), optionally an `...` (always preceded by a comma `,`), followed by a `}` - eg. `{x: Number, y: String}`, `{k: Function, ...}`\n* __Field__ = an `Identifier`, followed by a colon `:`, followed by `Types` - eg. `x: Date | String`, `y: Boolean`\n* __Tuple__ = a `(`, followed by one or more `Types` separated by a comma `,` (trailing comma `,` is permitted), followed by a `)` - eg `(Date)`, `(Number, Date)`\n* __Array__ = a `[` followed by exactly one `Types` followed by a `]` - eg. `[Boolean]`, `[Boolean | Null]`\n\n### Guide\n\n`type-check` uses `Object.toString` to find out the basic type of a value. Specifically,\n\n```js\n{}.toString.call(VALUE).slice(8, -1)\n{}.toString.call(true).slice(8, -1) // 'Boolean'\n```\nA basic type, eg. `Number`, uses this check. This is much more versatile than using `typeof` - for example, with `document`, `typeof` produces `'object'` which isn't that useful, and our technique produces `'HTMLDocument'`.\n\nYou may check for multiple types by separating types with a `|`. The checker proceeds from left to right, and passes if the value is any of the types - eg. `String | Boolean` first checks if the value is a string, and then if it is a boolean. If it is none of those, then it returns false.\n\nAdding a `Maybe` in front of a list of multiple types is the same as also checking for `Null` and `Undefined` - eg. `Maybe String` is equivalent to `Undefined | Null | String`.\n\nYou may add a comment to remind you of what the type is for by following an identifier with a `::` before a type (or multiple types). The comment is simply thrown out.\n\nThe wildcard `*` matches all types.\n\nThere are three types of structures for checking the contents of a value: 'fields', 'tuple', and 'array'.\n\nIf used by itself, a 'fields' structure will pass with any type of object as long as it is an instance of `Object` and the properties pass - this allows for duck typing - eg. `{x: Boolean}`.\n\nTo check if the properties pass, and the value is of a certain type, you can specify the type - eg. `Error{message: String}`.\n\nIf you want to make a field optional, you can simply use `Maybe` - eg. `{x: Boolean, y: Maybe String}` will still pass if `y` is undefined (or null).\n\nIf you don't care if the value has properties beyond what you have specified, you can use the 'etc' operator `...` - eg. `{x: Boolean, ...}` will match an object with an `x` property that is a boolean, and with zero or more other properties.\n\nFor an array, you must specify one or more types (separated by `|`) - it will pass for something of any length as long as each element passes the types provided - eg. `[Number]`, `[Number | String]`.\n\nA tuple checks for a fixed number of elements, each of a potentially different type. Each element is separated by a comma - eg. `(String, Number)`.\n\nAn array and tuple structure check that the value is of type `Array` by default, but if another type is specified, they will check for that instead - eg. `Int32Array[Number]`. You can use the wildcard `*` to search for any type at all.\n\nCheck out the [type precedence](https://github.com/zaboco/type-precedence) library for type-check.\n\n## Options\n\nOptions is an object. It is an optional parameter to the `typeCheck` and `parsedTypeCheck` functions. The only current option is `customTypes`.\n\n<a name=\"custom-types\" />\n### Custom Types\n\n__Example:__\n\n```js\nvar options = {\n  customTypes: {\n    Even: {\n      typeOf: 'Number',\n      validate: function(x) {\n        return x % 2 === 0;\n      }\n    }\n  }\n};\ntypeCheck('Even', 2, options); // true\ntypeCheck('Even', 3, options); // false\n```\n\n`customTypes` allows you to set up custom types for validation. The value of this is an object. The keys of the object are the types you will be matching. Each value of the object will be an object having a `typeOf` property - a string, and `validate` property - a function.\n\nThe `typeOf` property is the type the value should be (optional - if not set only `validate` will be used), and `validate` is a function which should return true if the value is of that type. `validate` receives one parameter, which is the value that we are checking.\n\n## Technical About\n\n`type-check` is written in [LiveScript](http://livescript.net/) - a language that compiles to JavaScript. It also uses the [prelude.ls](http://preludels.com/) library.\n/lib/parse-type.js\u0013// Generated by LiveScript 1.6.0\n(function(){\n  var identifierRegex, tokenRegex;\n  identifierRegex = /[\\$\\w]+/;\n  function peek(tokens){\n    var token;\n    token = tokens[0];\n    if (token == null) {\n      throw new Error('Unexpected end of input.');\n    }\n    return token;\n  }\n  function consumeIdent(tokens){\n    var token;\n    token = peek(tokens);\n    if (!identifierRegex.test(token)) {\n      throw new Error(\"Expected text, got '\" + token + \"' instead.\");\n    }\n    return tokens.shift();\n  }\n  function consumeOp(tokens, op){\n    var token;\n    token = peek(tokens);\n    if (token !== op) {\n      throw new Error(\"Expected '\" + op + \"', got '\" + token + \"' instead.\");\n    }\n    return tokens.shift();\n  }\n  function maybeConsumeOp(tokens, op){\n    var token;\n    token = tokens[0];\n    if (token === op) {\n      return tokens.shift();\n    } else {\n      return null;\n    }\n  }\n  function consumeArray(tokens){\n    var types;\n    consumeOp(tokens, '[');\n    if (peek(tokens) === ']') {\n      throw new Error(\"Must specify type of Array - eg. [Type], got [] instead.\");\n    }\n    types = consumeTypes(tokens);\n    consumeOp(tokens, ']');\n    return {\n      structure: 'array',\n      of: types\n    };\n  }\n  function consumeTuple(tokens){\n    var components;\n    components = [];\n    consumeOp(tokens, '(');\n    if (peek(tokens) === ')') {\n      throw new Error(\"Tuple must be of at least length 1 - eg. (Type), got () instead.\");\n    }\n    for (;;) {\n      components.push(consumeTypes(tokens));\n      maybeConsumeOp(tokens, ',');\n      if (')' === peek(tokens)) {\n        break;\n      }\n    }\n    consumeOp(tokens, ')');\n    return {\n      structure: 'tuple',\n      of: components\n    };\n  }\n  function consumeFields(tokens){\n    var fields, subset, ref$, key, types;\n    fields = {};\n    consumeOp(tokens, '{');\n    subset = false;\n    for (;;) {\n      if (maybeConsumeOp(tokens, '...')) {\n        subset = true;\n        break;\n      }\n      ref$ = consumeField(tokens), key = ref$[0], types = ref$[1];\n      fields[key] = types;\n      maybeConsumeOp(tokens, ',');\n      if ('}' === peek(tokens)) {\n        break;\n      }\n    }\n    consumeOp(tokens, '}');\n    return {\n      structure: 'fields',\n      of: fields,\n      subset: subset\n    };\n  }\n  function consumeField(tokens){\n    var key, types;\n    key = consumeIdent(tokens);\n    consumeOp(tokens, ':');\n    types = consumeTypes(tokens);\n    return [key, types];\n  }\n  function maybeConsumeStructure(tokens){\n    switch (tokens[0]) {\n    case '[':\n      return consumeArray(tokens);\n    case '(':\n      return consumeTuple(tokens);\n    case '{':\n      return consumeFields(tokens);\n    }\n  }\n  function consumeType(tokens){\n    var token, wildcard, type, structure;\n    token = peek(tokens);\n    wildcard = token === '*';\n    if (wildcard || identifierRegex.test(token)) {\n      type = wildcard\n        ? consumeOp(tokens, '*')\n        : consumeIdent(tokens);\n      structure = maybeConsumeStructure(tokens);\n      if (structure) {\n        return structure.type = type, structure;\n      } else {\n        return {\n          type: type\n        };\n      }\n    } else {\n      structure = maybeConsumeStructure(tokens);\n      if (!structure) {\n        throw new Error(\"Unexpected character: \" + token);\n      }\n      return structure;\n    }\n  }\n  function consumeTypes(tokens){\n    var lookahead, types, typesSoFar, typeObj, type, structure;\n    if ('::' === peek(tokens)) {\n      throw new Error(\"No comment before comment separator '::' found.\");\n    }\n    lookahead = tokens[1];\n    if (lookahead != null && lookahead === '::') {\n      tokens.shift();\n      tokens.shift();\n    }\n    types = [];\n    typesSoFar = {};\n    if ('Maybe' === peek(tokens)) {\n      tokens.shift();\n      types = [\n        {\n          type: 'Undefined'\n        }, {\n          type: 'Null'\n        }\n      ];\n      typesSoFar = {\n        Undefined: true,\n        Null: true\n      };\n    }\n    for (;;) {\n      typeObj = consumeType(tokens), type = typeObj.type, structure = typeObj.structure;\n      if (!typesSoFar[type]) {\n        types.push(typeObj);\n      }\n      if (structure == null) {\n        typesSoFar[type] = true;\n      }\n      if (!maybeConsumeOp(tokens, '|')) {\n        break;\n      }\n    }\n    return types;\n  }\n  tokenRegex = RegExp('\\\\.\\\\.\\\\.|::|->|' + identifierRegex.source + '|\\\\S', 'g');\n  module.exports = function(input){\n    var tokens, e;\n    if (!input.length) {\n      throw new Error('No type specified.');\n    }\n    tokens = input.match(tokenRegex) || [];\n    if (in$('->', tokens)) {\n      throw new Error(\"Function types are not supported.\\ To validate that something is a function, you may use 'Function'.\");\n    }\n    try {\n      return consumeTypes(tokens);\n    } catch (e$) {\n      e = e$;\n      throw new Error(e.message + \" - Remaining tokens: \" + JSON.stringify(tokens) + \" - Initial input: '\" + input + \"'\");\n    }\n  };\n  function in$(x, xs){\n    var i = -1, l = xs.length >>> 0;\n    while (++i < l) if (x === xs[i]) return true;\n    return false;\n  }\n}).call(this);\n/package.json\u0003O{\n  \"name\": \"type-check\",\n  \"version\": \"0.4.0\",\n  \"author\": \"George Zahariev <z@georgezahariev.com>\",\n  \"description\": \"type-check allows you to check the types of JavaScript values at runtime with a Haskell like type syntax.\",\n  \"homepage\": \"https://github.com/gkz/type-check\",\n  \"keywords\": [\n    \"type\",\n    \"check\",\n    \"checking\",\n    \"library\"\n  ],\n  \"files\": [\n    \"lib\",\n    \"README.md\",\n    \"LICENSE\"\n  ],\n  \"main\": \"./lib/\",\n  \"bugs\": \"https://github.com/gkz/type-check/issues\",\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"node\": \">= 0.8.0\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git://github.com/gkz/type-check.git\"\n  },\n  \"scripts\": {\n    \"test\": \"make test\"\n  },\n  \"dependencies\": {\n    \"prelude-ls\": \"^1.2.1\"\n  },\n  \"devDependencies\": {\n    \"livescript\": \"^1.6.0\",\n    \"mocha\": \"^7.1.1\",\n    \"browserify\": \"^16.5.1\"\n  }\n}\n/lib/check.js\r// Generated by LiveScript 1.6.0\n(function(){\n  var ref$, any, all, isItNaN, types, defaultType, toString$ = {}.toString;\n  ref$ = require('prelude-ls'), any = ref$.any, all = ref$.all, isItNaN = ref$.isItNaN;\n  types = {\n    Number: {\n      typeOf: 'Number',\n      validate: function(it){\n        return !isItNaN(it);\n      }\n    },\n    NaN: {\n      typeOf: 'Number',\n      validate: isItNaN\n    },\n    Int: {\n      typeOf: 'Number',\n      validate: function(it){\n        return !isItNaN(it) && it % 1 === 0;\n      }\n    },\n    Float: {\n      typeOf: 'Number',\n      validate: function(it){\n        return !isItNaN(it);\n      }\n    },\n    Date: {\n      typeOf: 'Date',\n      validate: function(it){\n        return !isItNaN(it.getTime());\n      }\n    }\n  };\n  defaultType = {\n    array: 'Array',\n    tuple: 'Array'\n  };\n  function checkArray(input, type, options){\n    return all(function(it){\n      return checkMultiple(it, type.of, options);\n    }, input);\n  }\n  function checkTuple(input, type, options){\n    var i, i$, ref$, len$, types;\n    i = 0;\n    for (i$ = 0, len$ = (ref$ = type.of).length; i$ < len$; ++i$) {\n      types = ref$[i$];\n      if (!checkMultiple(input[i], types, options)) {\n        return false;\n      }\n      i++;\n    }\n    return input.length <= i;\n  }\n  function checkFields(input, type, options){\n    var inputKeys, numInputKeys, k, numOfKeys, key, ref$, types;\n    inputKeys = {};\n    numInputKeys = 0;\n    for (k in input) {\n      inputKeys[k] = true;\n      numInputKeys++;\n    }\n    numOfKeys = 0;\n    for (key in ref$ = type.of) {\n      types = ref$[key];\n      if (!checkMultiple(input[key], types, options)) {\n        return false;\n      }\n      if (inputKeys[key]) {\n        numOfKeys++;\n      }\n    }\n    return type.subset || numInputKeys === numOfKeys;\n  }\n  function checkStructure(input, type, options){\n    if (!(input instanceof Object)) {\n      return false;\n    }\n    switch (type.structure) {\n    case 'fields':\n      return checkFields(input, type, options);\n    case 'array':\n      return checkArray(input, type, options);\n    case 'tuple':\n      return checkTuple(input, type, options);\n    }\n  }\n  function check(input, typeObj, options){\n    var type, structure, setting, that;\n    type = typeObj.type, structure = typeObj.structure;\n    if (type) {\n      if (type === '*') {\n        return true;\n      }\n      setting = options.customTypes[type] || types[type];\n      if (setting) {\n        return (setting.typeOf === void 8 || setting.typeOf === toString$.call(input).slice(8, -1)) && setting.validate(input);\n      } else {\n        return type === toString$.call(input).slice(8, -1) && (!structure || checkStructure(input, typeObj, options));\n      }\n    } else if (structure) {\n      if (that = defaultType[structure]) {\n        if (that !== toString$.call(input).slice(8, -1)) {\n          return false;\n        }\n      }\n      return checkStructure(input, typeObj, options);\n    } else {\n      throw new Error(\"No type defined. Input: \" + input + \".\");\n    }\n  }\n  function checkMultiple(input, types, options){\n    if (toString$.call(types).slice(8, -1) !== 'Array') {\n      throw new Error(\"Types must be in an array. Input: \" + input + \".\");\n    }\n    return any(function(it){\n      return check(input, it, options);\n    }, types);\n  }\n  module.exports = function(parsedType, input, options){\n    options == null && (options = {});\n    if (options.customTypes == null) {\n      options.customTypes = {};\n    }\n    return checkMultiple(input, parsedType, options);\n  };\n}).call(this);\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/dHlwZS1pc0AxLjYuMTg=",
    "content": "/LICENSE\u0004(The MIT License)\n\nCopyright (c) 2014 Jonathan Ong <me@jongleberry.com>\nCopyright (c) 2014-2015 Douglas Christopher Wilson <doug@somethingdoug.com>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n/package.json\u0004m{\n  \"name\": \"type-is\",\n  \"description\": \"Infer the content-type of a request.\",\n  \"version\": \"1.6.18\",\n  \"contributors\": [\n    \"Douglas Christopher Wilson <doug@somethingdoug.com>\",\n    \"Jonathan Ong <me@jongleberry.com> (http://jongleberry.com)\"\n  ],\n  \"license\": \"MIT\",\n  \"repository\": \"jshttp/type-is\",\n  \"dependencies\": {\n    \"media-typer\": \"0.3.0\",\n    \"mime-types\": \"~2.1.24\"\n  },\n  \"devDependencies\": {\n    \"eslint\": \"5.16.0\",\n    \"eslint-config-standard\": \"12.0.0\",\n    \"eslint-plugin-import\": \"2.17.2\",\n    \"eslint-plugin-markdown\": \"1.0.0\",\n    \"eslint-plugin-node\": \"8.0.1\",\n    \"eslint-plugin-promise\": \"4.1.1\",\n    \"eslint-plugin-standard\": \"4.0.0\",\n    \"mocha\": \"6.1.4\",\n    \"nyc\": \"14.0.0\"\n  },\n  \"engines\": {\n    \"node\": \">= 0.6\"\n  },\n  \"files\": [\n    \"LICENSE\",\n    \"HISTORY.md\",\n    \"index.js\"\n  ],\n  \"scripts\": {\n    \"lint\": \"eslint --plugin markdown --ext js,md .\",\n    \"test\": \"mocha --reporter spec --check-leaks --bail test/\",\n    \"test-cov\": \"nyc --reporter=html --reporter=text npm test\",\n    \"test-travis\": \"nyc --reporter=text npm test\"\n  },\n  \"keywords\": [\n    \"content\",\n    \"type\",\n    \"checking\"\n  ]\n}\n/README.md\u0014?# type-is\n\n[![NPM Version][npm-version-image]][npm-url]\n[![NPM Downloads][npm-downloads-image]][npm-url]\n[![Node.js Version][node-version-image]][node-version-url]\n[![Build Status][travis-image]][travis-url]\n[![Test Coverage][coveralls-image]][coveralls-url]\n\nInfer the content-type of a request.\n\n### Install\n\nThis is a [Node.js](https://nodejs.org/en/) module available through the\n[npm registry](https://www.npmjs.com/). Installation is done using the\n[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally):\n\n```sh\n$ npm install type-is\n```\n\n## API\n\n```js\nvar http = require('http')\nvar typeis = require('type-is')\n\nhttp.createServer(function (req, res) {\n  var istext = typeis(req, ['text/*'])\n  res.end('you ' + (istext ? 'sent' : 'did not send') + ' me text')\n})\n```\n\n### typeis(request, types)\n\nChecks if the `request` is one of the `types`. If the request has no body,\neven if there is a `Content-Type` header, then `null` is returned. If the\n`Content-Type` header is invalid or does not matches any of the `types`, then\n`false` is returned. Otherwise, a string of the type that matched is returned.\n\nThe `request` argument is expected to be a Node.js HTTP request. The `types`\nargument is an array of type strings.\n\nEach type in the `types` array can be one of the following:\n\n- A file extension name such as `json`. This name will be returned if matched.\n- A mime type such as `application/json`.\n- A mime type with a wildcard such as `*/*` or `*/json` or `application/*`.\n  The full mime type will be returned if matched.\n- A suffix such as `+json`. This can be combined with a wildcard such as\n  `*/vnd+json` or `application/*+json`. The full mime type will be returned\n  if matched.\n\nSome examples to illustrate the inputs and returned value:\n\n<!-- eslint-disable no-undef -->\n\n```js\n// req.headers.content-type = 'application/json'\n\ntypeis(req, ['json']) // => 'json'\ntypeis(req, ['html', 'json']) // => 'json'\ntypeis(req, ['application/*']) // => 'application/json'\ntypeis(req, ['application/json']) // => 'application/json'\n\ntypeis(req, ['html']) // => false\n```\n\n### typeis.hasBody(request)\n\nReturns a Boolean if the given `request` has a body, regardless of the\n`Content-Type` header.\n\nHaving a body has no relation to how large the body is (it may be 0 bytes).\nThis is similar to how file existence works. If a body does exist, then this\nindicates that there is data to read from the Node.js request stream.\n\n<!-- eslint-disable no-undef -->\n\n```js\nif (typeis.hasBody(req)) {\n  // read the body, since there is one\n\n  req.on('data', function (chunk) {\n    // ...\n  })\n}\n```\n\n### typeis.is(mediaType, types)\n\nChecks if the `mediaType` is one of the `types`. If the `mediaType` is invalid\nor does not matches any of the `types`, then `false` is returned. Otherwise, a\nstring of the type that matched is returned.\n\nThe `mediaType` argument is expected to be a\n[media type](https://tools.ietf.org/html/rfc6838) string. The `types` argument\nis an array of type strings.\n\nEach type in the `types` array can be one of the following:\n\n- A file extension name such as `json`. This name will be returned if matched.\n- A mime type such as `application/json`.\n- A mime type with a wildcard such as `*/*` or `*/json` or `application/*`.\n  The full mime type will be returned if matched.\n- A suffix such as `+json`. This can be combined with a wildcard such as\n  `*/vnd+json` or `application/*+json`. The full mime type will be returned\n  if matched.\n\nSome examples to illustrate the inputs and returned value:\n\n<!-- eslint-disable no-undef -->\n\n```js\nvar mediaType = 'application/json'\n\ntypeis.is(mediaType, ['json']) // => 'json'\ntypeis.is(mediaType, ['html', 'json']) // => 'json'\ntypeis.is(mediaType, ['application/*']) // => 'application/json'\ntypeis.is(mediaType, ['application/json']) // => 'application/json'\n\ntypeis.is(mediaType, ['html']) // => false\n```\n\n## Examples\n\n### Example body parser\n\n```js\nvar express = require('express')\nvar typeis = require('type-is')\n\nvar app = express()\n\napp.use(function bodyParser (req, res, next) {\n  if (!typeis.hasBody(req)) {\n    return next()\n  }\n\n  switch (typeis(req, ['urlencoded', 'json', 'multipart'])) {\n    case 'urlencoded':\n      // parse urlencoded body\n      throw new Error('implement urlencoded body parsing')\n    case 'json':\n      // parse json body\n      throw new Error('implement json body parsing')\n    case 'multipart':\n      // parse multipart body\n      throw new Error('implement multipart body parsing')\n    default:\n      // 415 error code\n      res.statusCode = 415\n      res.end()\n      break\n  }\n})\n```\n\n## License\n\n[MIT](LICENSE)\n\n[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/type-is/master\n[coveralls-url]: https://coveralls.io/r/jshttp/type-is?branch=master\n[node-version-image]: https://badgen.net/npm/node/type-is\n[node-version-url]: https://nodejs.org/en/download\n[npm-downloads-image]: https://badgen.net/npm/dm/type-is\n[npm-url]: https://npmjs.org/package/type-is\n[npm-version-image]: https://badgen.net/npm/v/type-is\n[travis-image]: https://badgen.net/travis/jshttp/type-is/master\n[travis-url]: https://travis-ci.org/jshttp/type-is\n/index.js\u0015/*!\n * type-is\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar typer = require('media-typer')\nvar mime = require('mime-types')\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = typeofrequest\nmodule.exports.is = typeis\nmodule.exports.hasBody = hasbody\nmodule.exports.normalize = normalize\nmodule.exports.match = mimeMatch\n\n/**\n * Compare a `value` content-type with `types`.\n * Each `type` can be an extension like `html`,\n * a special shortcut like `multipart` or `urlencoded`,\n * or a mime type.\n *\n * If no types match, `false` is returned.\n * Otherwise, the first `type` that matches is returned.\n *\n * @param {String} value\n * @param {Array} types\n * @public\n */\n\nfunction typeis (value, types_) {\n  var i\n  var types = types_\n\n  // remove parameters and normalize\n  var val = tryNormalizeType(value)\n\n  // no type or invalid\n  if (!val) {\n    return false\n  }\n\n  // support flattened arguments\n  if (types && !Array.isArray(types)) {\n    types = new Array(arguments.length - 1)\n    for (i = 0; i < types.length; i++) {\n      types[i] = arguments[i + 1]\n    }\n  }\n\n  // no types, return the content type\n  if (!types || !types.length) {\n    return val\n  }\n\n  var type\n  for (i = 0; i < types.length; i++) {\n    if (mimeMatch(normalize(type = types[i]), val)) {\n      return type[0] === '+' || type.indexOf('*') !== -1\n        ? val\n        : type\n    }\n  }\n\n  // no matches\n  return false\n}\n\n/**\n * Check if a request has a request body.\n * A request with a body __must__ either have `transfer-encoding`\n * or `content-length` headers set.\n * http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.3\n *\n * @param {Object} request\n * @return {Boolean}\n * @public\n */\n\nfunction hasbody (req) {\n  return req.headers['transfer-encoding'] !== undefined ||\n    !isNaN(req.headers['content-length'])\n}\n\n/**\n * Check if the incoming request contains the \"Content-Type\"\n * header field, and it contains any of the give mime `type`s.\n * If there is no request body, `null` is returned.\n * If there is no content type, `false` is returned.\n * Otherwise, it returns the first `type` that matches.\n *\n * Examples:\n *\n *     // With Content-Type: text/html; charset=utf-8\n *     this.is('html'); // => 'html'\n *     this.is('text/html'); // => 'text/html'\n *     this.is('text/*', 'application/json'); // => 'text/html'\n *\n *     // When Content-Type is application/json\n *     this.is('json', 'urlencoded'); // => 'json'\n *     this.is('application/json'); // => 'application/json'\n *     this.is('html', 'application/*'); // => 'application/json'\n *\n *     this.is('html'); // => false\n *\n * @param {String|Array} types...\n * @return {String|false|null}\n * @public\n */\n\nfunction typeofrequest (req, types_) {\n  var types = types_\n\n  // no body\n  if (!hasbody(req)) {\n    return null\n  }\n\n  // support flattened arguments\n  if (arguments.length > 2) {\n    types = new Array(arguments.length - 1)\n    for (var i = 0; i < types.length; i++) {\n      types[i] = arguments[i + 1]\n    }\n  }\n\n  // request content type\n  var value = req.headers['content-type']\n\n  return typeis(value, types)\n}\n\n/**\n * Normalize a mime type.\n * If it's a shorthand, expand it to a valid mime type.\n *\n * In general, you probably want:\n *\n *   var type = is(req, ['urlencoded', 'json', 'multipart']);\n *\n * Then use the appropriate body parsers.\n * These three are the most common request body types\n * and are thus ensured to work.\n *\n * @param {String} type\n * @private\n */\n\nfunction normalize (type) {\n  if (typeof type !== 'string') {\n    // invalid type\n    return false\n  }\n\n  switch (type) {\n    case 'urlencoded':\n      return 'application/x-www-form-urlencoded'\n    case 'multipart':\n      return 'multipart/*'\n  }\n\n  if (type[0] === '+') {\n    // \"+json\" -> \"*/*+json\" expando\n    return '*/*' + type\n  }\n\n  return type.indexOf('/') === -1\n    ? mime.lookup(type)\n    : type\n}\n\n/**\n * Check if `expected` mime type\n * matches `actual` mime type with\n * wildcard and +suffix support.\n *\n * @param {String} expected\n * @param {String} actual\n * @return {Boolean}\n * @private\n */\n\nfunction mimeMatch (expected, actual) {\n  // invalid type\n  if (expected === false) {\n    return false\n  }\n\n  // split types\n  var actualParts = actual.split('/')\n  var expectedParts = expected.split('/')\n\n  // invalid format\n  if (actualParts.length !== 2 || expectedParts.length !== 2) {\n    return false\n  }\n\n  // validate type\n  if (expectedParts[0] !== '*' && expectedParts[0] !== actualParts[0]) {\n    return false\n  }\n\n  // validate suffix wildcard\n  if (expectedParts[1].substr(0, 2) === '*+') {\n    return expectedParts[1].length <= actualParts[1].length + 1 &&\n      expectedParts[1].substr(1) === actualParts[1].substr(1 - expectedParts[1].length)\n  }\n\n  // validate subtype\n  if (expectedParts[1] !== '*' && expectedParts[1] !== actualParts[1]) {\n    return false\n  }\n\n  return true\n}\n\n/**\n * Normalize a type and remove parameters.\n *\n * @param {string} value\n * @return {string}\n * @private\n */\n\nfunction normalizeType (value) {\n  // parse the type\n  var type = typer.parse(value)\n\n  // remove the parameters\n  type.parameters = undefined\n\n  // reformat it\n  return typer.format(type)\n}\n\n/**\n * Try to normalize a type and remove parameters.\n *\n * @param {string} value\n * @return {string}\n * @private\n */\n\nfunction tryNormalizeType (value) {\n  if (!value) {\n    return null\n  }\n\n  try {\n    return normalizeType(value)\n  } catch (err) {\n    return null\n  }\n}\n/HISTORY.md\u0015G1.6.18 / 2019-04-26\n===================\n\n  * Fix regression passing request object to `typeis.is`\n\n1.6.17 / 2019-04-25\n===================\n\n  * deps: mime-types@~2.1.24\n    - Add Apple file extensions from IANA\n    - Add extension `.csl` to `application/vnd.citationstyles.style+xml`\n    - Add extension `.es` to `application/ecmascript`\n    - Add extension `.nq` to `application/n-quads`\n    - Add extension `.nt` to `application/n-triples`\n    - Add extension `.owl` to `application/rdf+xml`\n    - Add extensions `.siv` and `.sieve` to `application/sieve`\n    - Add extensions from IANA for `image/*` types\n    - Add extensions from IANA for `model/*` types\n    - Add extensions to HEIC image types\n    - Add new mime types\n    - Add `text/mdx` with extension `.mdx`\n  * perf: prevent internal `throw` on invalid type\n\n1.6.16 / 2018-02-16\n===================\n\n  * deps: mime-types@~2.1.18\n    - Add `application/raml+yaml` with extension `.raml`\n    - Add `application/wasm` with extension `.wasm`\n    - Add `text/shex` with extension `.shex`\n    - Add extensions for JPEG-2000 images\n    - Add extensions from IANA for `message/*` types\n    - Add extension `.mjs` to `application/javascript`\n    - Add extension `.wadl` to `application/vnd.sun.wadl+xml`\n    - Add extension `.gz` to `application/gzip`\n    - Add glTF types and extensions\n    - Add new mime types\n    - Update extensions `.md` and `.markdown` to be `text/markdown`\n    - Update font MIME types\n    - Update `text/hjson` to registered `application/hjson`\n\n1.6.15 / 2017-03-31\n===================\n\n  * deps: mime-types@~2.1.15\n    - Add new mime types\n\n1.6.14 / 2016-11-18\n===================\n\n  * deps: mime-types@~2.1.13\n    - Add new mime types\n\n1.6.13 / 2016-05-18\n===================\n\n  * deps: mime-types@~2.1.11\n    - Add new mime types\n\n1.6.12 / 2016-02-28\n===================\n\n  * deps: mime-types@~2.1.10\n    - Add new mime types\n    - Fix extension of `application/dash+xml`\n    - Update primary extension for `audio/mp4`\n\n1.6.11 / 2016-01-29\n===================\n\n  * deps: mime-types@~2.1.9\n    - Add new mime types\n\n1.6.10 / 2015-12-01\n===================\n\n  * deps: mime-types@~2.1.8\n    - Add new mime types\n\n1.6.9 / 2015-09-27\n==================\n\n  * deps: mime-types@~2.1.7\n    - Add new mime types\n\n1.6.8 / 2015-09-04\n==================\n\n  * deps: mime-types@~2.1.6\n    - Add new mime types\n\n1.6.7 / 2015-08-20\n==================\n\n  * Fix type error when given invalid type to match against\n  * deps: mime-types@~2.1.5\n    - Add new mime types\n\n1.6.6 / 2015-07-31\n==================\n\n  * deps: mime-types@~2.1.4\n    - Add new mime types\n\n1.6.5 / 2015-07-16\n==================\n\n  * deps: mime-types@~2.1.3\n    - Add new mime types\n\n1.6.4 / 2015-07-01\n==================\n\n  * deps: mime-types@~2.1.2\n    - Add new mime types\n  * perf: enable strict mode\n  * perf: remove argument reassignment\n\n1.6.3 / 2015-06-08\n==================\n\n  * deps: mime-types@~2.1.1\n    - Add new mime types\n  * perf: reduce try block size\n  * perf: remove bitwise operations\n\n1.6.2 / 2015-05-10\n==================\n\n  * deps: mime-types@~2.0.11\n    - Add new mime types\n\n1.6.1 / 2015-03-13\n==================\n\n  * deps: mime-types@~2.0.10\n    - Add new mime types\n\n1.6.0 / 2015-02-12\n==================\n\n  * fix false-positives in `hasBody` `Transfer-Encoding` check\n  * support wildcard for both type and subtype (`*/*`)\n\n1.5.7 / 2015-02-09\n==================\n\n  * fix argument reassignment\n  * deps: mime-types@~2.0.9\n    - Add new mime types\n\n1.5.6 / 2015-01-29\n==================\n\n  * deps: mime-types@~2.0.8\n    - Add new mime types\n\n1.5.5 / 2014-12-30\n==================\n\n  * deps: mime-types@~2.0.7\n    - Add new mime types\n    - Fix missing extensions\n    - Fix various invalid MIME type entries\n    - Remove example template MIME types\n    - deps: mime-db@~1.5.0\n\n1.5.4 / 2014-12-10\n==================\n\n  * deps: mime-types@~2.0.4\n    - Add new mime types\n    - deps: mime-db@~1.3.0\n\n1.5.3 / 2014-11-09\n==================\n\n  * deps: mime-types@~2.0.3\n    - Add new mime types\n    - deps: mime-db@~1.2.0\n\n1.5.2 / 2014-09-28\n==================\n\n  * deps: mime-types@~2.0.2\n    - Add new mime types\n    - deps: mime-db@~1.1.0\n\n1.5.1 / 2014-09-07\n==================\n\n  * Support Node.js 0.6\n  * deps: media-typer@0.3.0\n  * deps: mime-types@~2.0.1\n    - Support Node.js 0.6\n\n1.5.0 / 2014-09-05\n==================\n\n * fix `hasbody` to be true for `content-length: 0`\n\n1.4.0 / 2014-09-02\n==================\n\n * update mime-types\n\n1.3.2 / 2014-06-24\n==================\n\n * use `~` range on mime-types\n\n1.3.1 / 2014-06-19\n==================\n\n * fix global variable leak\n\n1.3.0 / 2014-06-19\n==================\n\n * improve type parsing\n\n   - invalid media type never matches\n   - media type not case-sensitive\n   - extra LWS does not affect results\n\n1.2.2 / 2014-06-19\n==================\n\n * fix behavior on unknown type argument\n\n1.2.1 / 2014-06-03\n==================\n\n * switch dependency from `mime` to `mime-types@1.0.0`\n\n1.2.0 / 2014-05-11\n==================\n\n * support suffix matching:\n\n   - `+json` matches `application/vnd+json`\n   - `*/vnd+json` matches `application/vnd+json`\n   - `application/*+json` matches `application/vnd+json`\n\n1.1.0 / 2014-04-12\n==================\n\n * add non-array values support\n * expose internal utilities:\n\n   - `.is()`\n   - `.hasBody()`\n   - `.normalize()`\n   - `.match()`\n\n1.0.1 / 2014-03-30\n==================\n\n * add `multipart` as a shorthand\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/dW5pdmVyc2FsaWZ5QDIuMC4w",
    "content": "/index.js\u0002'use strict'\n\nexports.fromCallback = function (fn) {\n  return Object.defineProperty(function (...args) {\n    if (typeof args[args.length - 1] === 'function') fn.apply(this, args)\n    else {\n      return new Promise((resolve, reject) => {\n        fn.call(\n          this,\n          ...args,\n          (err, res) => (err != null) ? reject(err) : resolve(res)\n        )\n      })\n    }\n  }, 'name', { value: fn.name })\n}\n\nexports.fromPromise = function (fn) {\n  return Object.defineProperty(function (...args) {\n    const cb = args[args.length - 1]\n    if (typeof cb !== 'function') return fn.apply(this, args)\n    else fn.apply(this, args.slice(0, -1)).then(r => cb(null, r), cb)\n  }, 'name', { value: fn.name })\n}\n/package.json\u00035{\n  \"name\": \"universalify\",\n  \"version\": \"2.0.0\",\n  \"description\": \"Make a callback- or promise-based function support both promises and callbacks.\",\n  \"keywords\": [\n    \"callback\",\n    \"native\",\n    \"promise\"\n  ],\n  \"homepage\": \"https://github.com/RyanZim/universalify#readme\",\n  \"bugs\": \"https://github.com/RyanZim/universalify/issues\",\n  \"license\": \"MIT\",\n  \"author\": \"Ryan Zimmerman <opensrc@ryanzim.com>\",\n  \"files\": [\n    \"index.js\"\n  ],\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/RyanZim/universalify.git\"\n  },\n  \"scripts\": {\n    \"test\": \"standard && nyc tape test/*.js | colortape\"\n  },\n  \"devDependencies\": {\n    \"colortape\": \"^0.1.2\",\n    \"coveralls\": \"^3.0.1\",\n    \"nyc\": \"^15.0.0\",\n    \"standard\": \"^14.3.1\",\n    \"tape\": \"^5.0.1\"\n  },\n  \"engines\": {\n    \"node\": \">= 10.0.0\"\n  }\n}\n/LICENSE\u0004L(The MIT License)\n\nCopyright (c) 2017, Ryan Zimmerman <opensrc@ryanzim.com>\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the 'Software'), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n/README.md\u0007# universalify\n\n[![Travis branch](https://img.shields.io/travis/RyanZim/universalify/master.svg)](https://travis-ci.org/RyanZim/universalify)\n![Coveralls github branch](https://img.shields.io/coveralls/github/RyanZim/universalify/master.svg)\n![npm](https://img.shields.io/npm/dm/universalify.svg)\n![npm](https://img.shields.io/npm/l/universalify.svg)\n\nMake a callback- or promise-based function support both promises and callbacks.\n\nUses the native promise implementation.\n\n## Installation\n\n```bash\nnpm install universalify\n```\n\n## API\n\n### `universalify.fromCallback(fn)`\n\nTakes a callback-based function to universalify, and returns the universalified  function.\n\nFunction must take a callback as the last parameter that will be called with the signature `(error, result)`. `universalify` does not support calling the callback with three or more arguments, and does not ensure that the callback is only called once.\n\n```js\nfunction callbackFn (n, cb) {\n  setTimeout(() => cb(null, n), 15)\n}\n\nconst fn = universalify.fromCallback(callbackFn)\n\n// Works with Promises:\nfn('Hello World!')\n.then(result => console.log(result)) // -> Hello World!\n.catch(error => console.error(error))\n\n// Works with Callbacks:\nfn('Hi!', (error, result) => {\n  if (error) return console.error(error)\n  console.log(result)\n  // -> Hi!\n})\n```\n\n### `universalify.fromPromise(fn)`\n\nTakes a promise-based function to universalify, and returns the universalified  function.\n\nFunction must return a valid JS promise. `universalify` does not ensure that a valid promise is returned.\n\n```js\nfunction promiseFn (n) {\n  return new Promise(resolve => {\n    setTimeout(() => resolve(n), 15)\n  })\n}\n\nconst fn = universalify.fromPromise(promiseFn)\n\n// Works with Promises:\nfn('Hello World!')\n.then(result => console.log(result)) // -> Hello World!\n.catch(error => console.error(error))\n\n// Works with Callbacks:\nfn('Hi!', (error, result) => {\n  if (error) return console.error(error)\n  console.log(result)\n  // -> Hi!\n})\n```\n\n## License\n\nMIT\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/dW5waXBlQDEuMC4w",
    "content": "/index.js\u0004^/*!\n * unpipe\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = unpipe\n\n/**\n * Determine if there are Node.js pipe-like data listeners.\n * @private\n */\n\nfunction hasPipeDataListeners(stream) {\n  var listeners = stream.listeners('data')\n\n  for (var i = 0; i < listeners.length; i++) {\n    if (listeners[i].name === 'ondata') {\n      return true\n    }\n  }\n\n  return false\n}\n\n/**\n * Unpipe a stream from all destinations.\n *\n * @param {object} stream\n * @public\n */\n\nfunction unpipe(stream) {\n  if (!stream) {\n    throw new TypeError('argument stream is required')\n  }\n\n  if (typeof stream.unpipe === 'function') {\n    // new-style\n    stream.unpipe()\n    return\n  }\n\n  // Node.js 0.8 hack\n  if (!hasPipeDataListeners(stream)) {\n    return\n  }\n\n  var listener\n  var listeners = stream.listeners('close')\n\n  for (var i = 0; i < listeners.length; i++) {\n    listener = listeners[i]\n\n    if (listener.name !== 'cleanup' && listener.name !== 'onclose') {\n      continue\n    }\n\n    // invoke the listener\n    listener.call(stream)\n  }\n}\n/LICENSE\u0004Z(The MIT License)\n\nCopyright (c) 2015 Douglas Christopher Wilson <doug@somethingdoug.com>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n/package.json\u0003\u0002{\n  \"name\": \"unpipe\",\n  \"description\": \"Unpipe a stream from all destinations\",\n  \"version\": \"1.0.0\",\n  \"author\": \"Douglas Christopher Wilson <doug@somethingdoug.com>\",\n  \"license\": \"MIT\",\n  \"repository\": \"stream-utils/unpipe\",\n  \"devDependencies\": {\n    \"istanbul\": \"0.3.15\",\n    \"mocha\": \"2.2.5\",\n    \"readable-stream\": \"1.1.13\"\n  },\n  \"files\": [\n    \"HISTORY.md\",\n    \"LICENSE\",\n    \"README.md\",\n    \"index.js\"\n  ],\n  \"engines\": {\n    \"node\": \">= 0.8\"\n  },\n  \"scripts\": {\n    \"test\": \"mocha --reporter spec --bail --check-leaks test/\",\n    \"test-cov\": \"istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/\",\n    \"test-travis\": \"istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/\"\n  }\n}\n/HISTORY.md;1.0.0 / 2015-06-14\n==================\n\n  * Initial release\n/README.md\u0004# unpipe\n\n[![NPM Version][npm-image]][npm-url]\n[![NPM Downloads][downloads-image]][downloads-url]\n[![Node.js Version][node-image]][node-url]\n[![Build Status][travis-image]][travis-url]\n[![Test Coverage][coveralls-image]][coveralls-url]\n\nUnpipe a stream from all destinations.\n\n## Installation\n\n```sh\n$ npm install unpipe\n```\n\n## API\n\n```js\nvar unpipe = require('unpipe')\n```\n\n### unpipe(stream)\n\nUnpipes all destinations from a given stream. With stream 2+, this is\nequivalent to `stream.unpipe()`. When used with streams 1 style streams\n(typically Node.js 0.8 and below), this module attempts to undo the\nactions done in `stream.pipe(dest)`.\n\n## License\n\n[MIT](LICENSE)\n\n[npm-image]: https://img.shields.io/npm/v/unpipe.svg\n[npm-url]: https://npmjs.org/package/unpipe\n[node-image]: https://img.shields.io/node/v/unpipe.svg\n[node-url]: http://nodejs.org/download/\n[travis-image]: https://img.shields.io/travis/stream-utils/unpipe.svg\n[travis-url]: https://travis-ci.org/stream-utils/unpipe\n[coveralls-image]: https://img.shields.io/coveralls/stream-utils/unpipe.svg\n[coveralls-url]: https://coveralls.io/r/stream-utils/unpipe?branch=master\n[downloads-image]: https://img.shields.io/npm/dm/unpipe.svg\n[downloads-url]: https://npmjs.org/package/unpipe\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/dWMubWljcm9AMS4wLjY=",
    "content": "/categories/Cc/regex.js#module.exports=/[\\0-\\x1F\\x7F-\\x9F]//categories/P/regex.js\u0007smodule.exports=/[!-#%-\\*,-\\/:;\\?@\\[-\\]_\\{\\}\\xA1\\xA7\\xAB\\xB6\\xB7\\xBB\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061E\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u09FD\\u0A76\\u0AF0\\u0C84\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166D\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E4E\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]|\\uD800[\\uDD00-\\uDD02\\uDF9F\\uDFD0]|\\uD801\\uDD6F|\\uD802[\\uDC57\\uDD1F\\uDD3F\\uDE50-\\uDE58\\uDE7F\\uDEF0-\\uDEF6\\uDF39-\\uDF3F\\uDF99-\\uDF9C]|\\uD803[\\uDF55-\\uDF59]|\\uD804[\\uDC47-\\uDC4D\\uDCBB\\uDCBC\\uDCBE-\\uDCC1\\uDD40-\\uDD43\\uDD74\\uDD75\\uDDC5-\\uDDC8\\uDDCD\\uDDDB\\uDDDD-\\uDDDF\\uDE38-\\uDE3D\\uDEA9]|\\uD805[\\uDC4B-\\uDC4F\\uDC5B\\uDC5D\\uDCC6\\uDDC1-\\uDDD7\\uDE41-\\uDE43\\uDE60-\\uDE6C\\uDF3C-\\uDF3E]|\\uD806[\\uDC3B\\uDE3F-\\uDE46\\uDE9A-\\uDE9C\\uDE9E-\\uDEA2]|\\uD807[\\uDC41-\\uDC45\\uDC70\\uDC71\\uDEF7\\uDEF8]|\\uD809[\\uDC70-\\uDC74]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37-\\uDF3B\\uDF44]|\\uD81B[\\uDE97-\\uDE9A]|\\uD82F\\uDC9F|\\uD836[\\uDE87-\\uDE8B]|\\uD83A[\\uDD5E\\uDD5F]//package.json\u0001{\n  \"name\": \"uc.micro\",\n  \"version\": \"1.0.6\",\n  \"description\": \"Micro subset of unicode data files for markdown-it projects.\",\n  \"repository\": \"markdown-it/uc.micro\",\n  \"license\": \"MIT\",\n  \"files\": [\n    \"categories/\",\n    \"properties/\",\n    \"index.js\"\n  ],\n  \"scripts\": {\n    \"test\": \"mocha\",\n    \"update\": \"node update.js && npm test\"\n  },\n  \"devDependencies\": {\n    \"mocha\": \"^5.0.0\",\n    \"shelljs\": \"^0.8.1\",\n    \"unicode-11.0.0\": \"^0.7.8\"\n  }\n}\n/categories/Z/regex.jsImodule.exports=/[ \\xA0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]//LICENSE.txt\u00045Copyright Mathias Bynens <https://mathiasbynens.be/>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n/categories/Cf/regex.jsmodule.exports=/[\\xAD\\u0600-\\u0605\\u061C\\u06DD\\u070F\\u08E2\\u180E\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\uFEFF\\uFFF9-\\uFFFB]|\\uD804[\\uDCBD\\uDCCD]|\\uD82F[\\uDCA0-\\uDCA3]|\\uD834[\\uDD73-\\uDD7A]|\\uDB40[\\uDC01\\uDC20-\\uDC7F]//CHANGELOG.md\u0003g1.0.6 / 2019-01-31\n------------------\n\n- Unicode update to 10.0.0.\n- Fixed `Z` content (added missed line and paragraph seperators), #10.\n\n\n1.0.5 / 2018-01-26\n------------------\n\n- Remove outdated license info from readme (missed in previous update).\n\n\n1.0.4 / 2018-01-26\n------------------\n\n- Unicode update to 10.0.0.\n- Clarified license, should be MIT, #6.\n\n\n1.0.3 / 2016-09-14\n------------------\n\n- Unicode update to 9.0.0.\n- Rewrite update script (use npm instead of Makefile).\n- Added integrity tests.\n\n\n1.0.2 / 2015-06-24\n------------------\n\n- License info clarify, #3.\n\n\n1.0.1 / 2015-05-30\n------------------\n\n- Update to Unicode 8.+.\n- Also automatically fix possible ReDOS in `Any`, if source used to generate\n  patterns like `(Any)+`.\n\n\n1.0.0 / 2015-03-10\n------------------\n\n- Export all in index.js.\n\n\n0.1.0 / 2015-02-22\n------------------\n\n- First release.\n/README.md\u0002# uc.micro\n\n[![Build Status](https://img.shields.io/travis/markdown-it/uc.micro/master.svg?style=flat)](https://travis-ci.org/markdown-it/uc.micro)\n[![NPM version](https://img.shields.io/npm/v/uc.micro.svg?style=flat)](https://www.npmjs.org/package/uc.micro)\n\n> Micro subset of unicode data files for [markdown-it](https://github.com/markdown-it) projects.\n\nContent of this repo is autogenerated from `unicode-<version>` package,\nmaintained by [Mathias Bynens](https://github.com/mathiasbynens).\n\nThat's just a proxy to reduce dependencies/install size.\n\n**This package content is ONLY for [markdown-it](https://github.com/markdown-it)\nprojects needs. Don't ask to extend it!**\n/index.js'use strict';\n\nexports.Any = require('./properties/Any/regex');\nexports.Cc  = require('./categories/Cc/regex');\nexports.Cf  = require('./categories/Cf/regex');\nexports.P   = require('./categories/P/regex');\nexports.Z   = require('./categories/Z/regex');\n/properties/Any/regex.jsđmodule.exports=/[\\0-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/dXBhdGhAMi4wLjE=",
    "content": "/package.json\u0005{\n  \"name\": \"upath\",\n  \"description\": \"A proxy to `path`, replacing `\\\\` with `/` for all results (supports UNC paths) & new methods to normalize & join keeping leading `./` and add, change, default, trim file extensions.\",\n  \"version\": \"2.0.1\",\n  \"homepage\": \"http://github.com/anodynos/upath/\",\n  \"author\": {\n    \"name\": \"Angelos Pikoulas\",\n    \"email\": \"agelos.pikoulas@gmail.com\"\n  },\n  \"license\": \"MIT\",\n  \"keywords\": [\n    \"path\",\n    \"unix\",\n    \"windows\",\n    \"extension\",\n    \"file extension\",\n    \"replace extension\",\n    \"change extension\",\n    \"trim extension\",\n    \"add extension\",\n    \"default extension\",\n    \"UNC paths\"\n  ],\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git://github.com/anodynos/upath\"\n  },\n  \"bugs\": {\n    \"url\": \"http://github.com/anodynos/upath/issues\",\n    \"email\": \"agelos.pikoulas@gmail.com\"\n  },\n  \"main\": \"./build/code/upath.js\",\n  \"types\": \"./upath.d.ts\",\n  \"preferGlobal\": false,\n  \"scripts\": {\n    \"test\": \"npx grunt\",\n    \"build\": \"npx grunt lib\"\n  },\n  \"directories\": {\n    \"doc\": \"./doc\",\n    \"dist\": \"./build\"\n  },\n  \"engines\": {\n    \"node\": \">=4\",\n    \"yarn\": \"*\"\n  },\n  \"devDependencies\": {\n    \"chai\": \"~4.0.2\",\n    \"coffee-script\": \"1.12.6\",\n    \"grunt\": \"0.4.5\",\n    \"grunt-contrib-watch\": \"^1.1.0\",\n    \"grunt-urequire\": \"0.7.x\",\n    \"lodash\": \"^4.17.20\",\n    \"mocha\": \"~3.4.2\",\n    \"uberscore\": \"0.0.19\",\n    \"underscore.string\": \"^3.3.5\",\n    \"urequire\": \"0.7.0-beta.33\",\n    \"urequire-ab-specrunner\": \"^0.2.5\",\n    \"urequire-rc-inject-version\": \"^0.1.6\"\n  }\n}\n/LICENSE\u0004DCopyright(c) 2014-2020 Angelos Pikoulas (agelos.pikoulas@gmail.com)\n\nPermission is hereby granted, free of charge, to any person\nobtaining a copy of this software and associated documentation\nfiles (the \"Software\"), to deal in the Software without\nrestriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the\nSoftware is furnished to do so, subject to the following\nconditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\nOF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\nHOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\nWHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\nFROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\nOTHER DEALINGS IN THE SOFTWARE.\n/upath.d.ts#\u001cdeclare module \"upath\" {\n\n  /**\n   * A parsed path object generated by path.parse() or consumed by path.format().\n   */\n  export interface ParsedPath {\n    /**\n     * The root of the path such as '/' or 'c:\\'\n     */\n    root: string;\n    /**\n     * The full directory path such as '/home/user/dir' or 'c:\\path\\dir'\n     */\n    dir: string;\n    /**\n     * The file name including extension (if any) such as 'index.html'\n     */\n    base: string;\n    /**\n     * The file extension (if any) such as '.html'\n     */\n    ext: string;\n    /**\n     * The file name without extension (if any) such as 'index'\n     */\n    name: string;\n  }\n\n  /**\n   * Version of the library\n   */\n  export var VERSION: string;\n\n  /**\n   * Just converts all `to/` and consolidates duplicates, without performing any normalization.\n   *\n   * @param p string path to convert to unix.\n   */\n  export function toUnix(p: string): string;\n\n  /**\n   * Exactly like path.normalize(path), but it keeps the first meaningful ./.\n   *\n   * Note that the unix / is returned everywhere, so windows \\ is always converted to unix /.\n   *\n   * @param p string path to normalize.\n   */\n  export function normalizeSafe(p: string): string;\n\n  /**\n   * Exactly like path.normalizeSafe(path), but it trims any useless ending /.\n   *\n   * @param p string path to normalize\n   */\n  export function normalizeTrim(p: string): string;\n\n  /**\n   * Exactly like path.join(), but it keeps the first meaningful ./.\n   *\n   * Note that the unix / is returned everywhere, so windows \\ is always converted to unix /.\n   *\n   * @param paths string paths to join\n   */\n  export function joinSafe(...p: any[]): string;\n\n  /**\n   * Adds .ext to filename, but only if it doesn't already have the exact extension.\n   *\n   * @param file string filename to add extension to\n   * @param ext string extension to add\n   */\n  export function addExt(file: string, ext: string): string;\n\n  /**\n   * Trims a filename's extension.\n   *\n   * Extensions are considered to be up to maxSize chars long, counting the dot (defaults to 7).\n   *\n   * An Array of ignoreExts (eg ['.min']) prevents these from being considered as extension, thus are not trimmed.\n   *\n   * @param filename string filename to trim it's extension\n   * @param ignoreExts array extensions to ignore\n   * @param maxSize number max length of the extension\n   */\n  export function trimExt(filename: string, ignoreExts?: string[], maxSize?: number): string;\n\n  /**\n   * Removes the specific ext extension from filename, if it has it. Otherwise it leaves it as is. As in all upath functions, it be .ext or ext.\n   *\n   * @param file string filename to remove extension to\n   * @param ext string extension to remove\n   */\n  export function removeExt(filename: string, ext: string): string;\n\n  /**\n   * Changes a filename's extension to ext. If it has no (valid) extension, it adds it.\n   *\n   * Valid extensions are considered to be up to maxSize chars long, counting the dot (defaults to 7).\n   *\n   * An Array of ignoreExts (eg ['.min']) prevents these from being considered as extension, thus are not changed - the new extension is added instead.\n   *\n   * @param filename string filename to change it's extension\n   * @param ext string extension to change to\n   * @param ignoreExts array extensions to ignore\n   * @param maxSize number max length of the extension\n   */\n  export function changeExt(filename: string, ext: string, ignoreExts?: string[], maxSize?: number): string;\n\n  /**\n   * Adds .ext to filename, only if it doesn't already have any old extension.\n   *\n   * (Old) extensions are considered to be up to maxSize chars long, counting the dot (defaults to 7).\n   *\n   * An Array of ignoreExts (eg ['.min']) will force adding default .ext even if one of these is present.\n   *\n   * @param filename string filename to default to it's extension\n   * @param ext string extension to default to\n   * @param ignoreExts array extensions to ignore\n   * @param maxSize number max length of the extension\n   */\n  export function defaultExt(filename: string, ext: string, ignoreExts?: string[], maxSize?: number): string;\n\n  /**\n   * Normalize a string path, reducing '..' and '.' parts.\n   * When multiple slashes are found, they're replaced by a single one; when the path contains a trailing slash, it is preserved. On Windows backslashes are used.\n   *\n   * @param p string path to normalize.\n   */\n  export function normalize(p: string): string;\n  /**\n   * Join all arguments together and normalize the resulting path.\n   * Arguments must be strings. In v0.8, non-string arguments were silently ignored. In v0.10 and up, an exception is thrown.\n   *\n   * @param paths string paths to join.\n   */\n  export function join(...paths: any[]): string;\n  /**\n   * Join all arguments together and normalize the resulting path.\n   * Arguments must be strings. In v0.8, non-string arguments were silently ignored. In v0.10 and up, an exception is thrown.\n   *\n   * @param paths string paths to join.\n   */\n  export function join(...paths: string[]): string;\n  /**\n   * The right-most parameter is considered {to}.  Other parameters are considered an array of {from}.\n   *\n   * Starting from leftmost {from} parameter, resolves {to} to an absolute path.\n   *\n   * If {to} isn't already absolute, {from} arguments are prepended in right to left order, until an absolute path is found. If after using all {from} paths still no absolute path is found, the current working directory is used as well. The resulting path is normalized, and trailing slashes are removed unless the path gets resolved to the root directory.\n   *\n   * @param pathSegments string paths to join.  Non-string arguments are ignored.\n   */\n  export function resolve(...pathSegments: any[]): string;\n  /**\n   * Determines whether {path} is an absolute path. An absolute path will always resolve to the same location, regardless of the working directory.\n   *\n   * @param path path to test.\n   */\n  export function isAbsolute(path: string): boolean;\n  /**\n   * Solve the relative path from {from} to {to}.\n   * At times we have two absolute paths, and we need to derive the relative path from one to the other. This is actually the reverse transform of path.resolve.\n   *\n   * @param from\n   * @param to\n   */\n  export function relative(from: string, to: string): string;\n  /**\n   * Return the directory name of a path. Similar to the Unix dirname command.\n   *\n   * @param p the path to evaluate.\n   */\n  export function dirname(p: string): string;\n  /**\n   * Return the last portion of a path. Similar to the Unix basename command.\n   * Often used to extract the file name from a fully qualified path.\n   *\n   * @param p the path to evaluate.\n   * @param ext optionally, an extension to remove from the result.\n   */\n  export function basename(p: string, ext?: string): string;\n  /**\n   * Return the extension of the path, from the last '.' to end of string in the last portion of the path.\n   * If there is no '.' in the last portion of the path or the first character of it is '.', then it returns an empty string\n   *\n   * @param p the path to evaluate.\n   */\n  export function extname(p: string): string;\n  /**\n   * The platform-specific file separator. '\\\\' or '/'.\n   */\n  export var sep: string;\n  /**\n   * The platform-specific file delimiter. ';' or ':'.\n   */\n  export var delimiter: string;\n  /**\n   * Returns an object from a path string - the opposite of format().\n   *\n   * @param pathString path to evaluate.\n   */\n  export function parse(pathString: string): ParsedPath;\n  /**\n   * Returns a path string from an object - the opposite of parse().\n   *\n   * @param pathString path to evaluate.\n   */\n  export function format(pathObject: ParsedPath): string;\n\n  export module posix {\n    export function normalize(p: string): string;\n    export function join(...paths: any[]): string;\n    export function resolve(...pathSegments: any[]): string;\n    export function isAbsolute(p: string): boolean;\n    export function relative(from: string, to: string): string;\n    export function dirname(p: string): string;\n    export function basename(p: string, ext?: string): string;\n    export function extname(p: string): string;\n    export var sep: string;\n    export var delimiter: string;\n    export function parse(p: string): ParsedPath;\n    export function format(pP: ParsedPath): string;\n  }\n\n  export module win32 {\n    export function normalize(p: string): string;\n    export function join(...paths: any[]): string;\n    export function resolve(...pathSegments: any[]): string;\n    export function isAbsolute(p: string): boolean;\n    export function relative(from: string, to: string): string;\n    export function dirname(p: string): string;\n    export function basename(p: string, ext?: string): string;\n    export function extname(p: string): string;\n    export var sep: string;\n    export var delimiter: string;\n    export function parse(p: string): ParsedPath;\n    export function format(pP: ParsedPath): string;\n  }\n}\n/build/code/upath.js\u0014\u001f/**\n* upath http://github.com/anodynos/upath/\n*\n* A proxy to `path`, replacing `\\` with `/` for all results (supports UNC paths) & new methods to normalize & join keeping leading `./` and add, change, default, trim file extensions.\n* Version 2.0.1 - Compiled on 2020-11-07 16:59:47\n* Repository git://github.com/anodynos/upath\n* Copyright(c) 2020 Angelos Pikoulas <agelos.pikoulas@gmail.com>\n* License MIT\n*/\n\n// Generated by uRequire v0.7.0-beta.33 target: 'lib' template: 'nodejs'\n\n\nvar VERSION = '2.0.1'; // injected by urequire-rc-inject-version\n\nvar extraFn, extraFunctions, isFunction, isString, isValidExt, name, path, propName, propValue, toUnix, upath, slice = [].slice, indexOf = [].indexOf || function (item) {\n    for (var i = 0, l = this.length; i < l; i++) {\n      if (i in this && this[i] === item)\n        return i;\n    }\n    return -1;\n  }, hasProp = {}.hasOwnProperty;\npath = require(\"path\");\nisFunction = function (val) {\n  return typeof val === \"function\";\n};\nisString = function (val) {\n  return typeof val === \"string\" || !!val && typeof val === \"object\" && Object.prototype.toString.call(val) === \"[object String]\";\n};\nupath = exports;\nupath.VERSION = typeof VERSION !== \"undefined\" && VERSION !== null ? VERSION : \"NO-VERSION\";\ntoUnix = function (p) {\n  p = p.replace(/\\\\/g, \"/\");\n  p = p.replace(/(?<!^)\\/+/g, \"/\");\n  return p;\n};\nfor (propName in path) {\n  propValue = path[propName];\n  if (isFunction(propValue)) {\n    upath[propName] = function (propName) {\n      return function () {\n        var args, result;\n        args = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n        args = args.map(function (p) {\n          if (isString(p)) {\n            return toUnix(p);\n          } else {\n            return p;\n          }\n        });\n        result = path[propName].apply(path, args);\n        if (isString(result)) {\n          return toUnix(result);\n        } else {\n          return result;\n        }\n      };\n    }(propName);\n  } else {\n    upath[propName] = propValue;\n  }\n}\nupath.sep = \"/\";\nextraFunctions = {\n  toUnix: toUnix,\n  normalizeSafe: function (p) {\n    var result;\n    p = toUnix(p);\n    result = upath.normalize(p);\n    if (p.startsWith(\"./\") && !result.startsWith(\"./\") && !result.startsWith(\"..\")) {\n      result = \"./\" + result;\n    } else if (p.startsWith(\"//\") && !result.startsWith(\"//\")) {\n      if (p.startsWith(\"//./\")) {\n        result = \"//.\" + result;\n      } else {\n        result = \"/\" + result;\n      }\n    }\n    return result;\n  },\n  normalizeTrim: function (p) {\n    p = upath.normalizeSafe(p);\n    if (p.endsWith(\"/\")) {\n      return p.slice(0, +(p.length - 2) + 1 || 9000000000);\n    } else {\n      return p;\n    }\n  },\n  joinSafe: function () {\n    var p, p0, result;\n    p = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n    result = upath.join.apply(null, p);\n    if (p.length > 0) {\n      p0 = toUnix(p[0]);\n      if (p0.startsWith(\"./\") && !result.startsWith(\"./\") && !result.startsWith(\"..\")) {\n        result = \"./\" + result;\n      } else if (p0.startsWith(\"//\") && !result.startsWith(\"//\")) {\n        if (p0.startsWith(\"//./\")) {\n          result = \"//.\" + result;\n        } else {\n          result = \"/\" + result;\n        }\n      }\n    }\n    return result;\n  },\n  addExt: function (file, ext) {\n    if (!ext) {\n      return file;\n    } else {\n      if (ext[0] !== \".\") {\n        ext = \".\" + ext;\n      }\n      return file + (file.endsWith(ext) ? \"\" : ext);\n    }\n  },\n  trimExt: function (filename, ignoreExts, maxSize) {\n    var oldExt;\n    if (maxSize == null) {\n      maxSize = 7;\n    }\n    oldExt = upath.extname(filename);\n    if (isValidExt(oldExt, ignoreExts, maxSize)) {\n      return filename.slice(0, +(filename.length - oldExt.length - 1) + 1 || 9000000000);\n    } else {\n      return filename;\n    }\n  },\n  removeExt: function (filename, ext) {\n    if (!ext) {\n      return filename;\n    } else {\n      ext = ext[0] === \".\" ? ext : \".\" + ext;\n      if (upath.extname(filename) === ext) {\n        return upath.trimExt(filename, [], ext.length);\n      } else {\n        return filename;\n      }\n    }\n  },\n  changeExt: function (filename, ext, ignoreExts, maxSize) {\n    if (maxSize == null) {\n      maxSize = 7;\n    }\n    return upath.trimExt(filename, ignoreExts, maxSize) + (!ext ? \"\" : ext[0] === \".\" ? ext : \".\" + ext);\n  },\n  defaultExt: function (filename, ext, ignoreExts, maxSize) {\n    var oldExt;\n    if (maxSize == null) {\n      maxSize = 7;\n    }\n    oldExt = upath.extname(filename);\n    if (isValidExt(oldExt, ignoreExts, maxSize)) {\n      return filename;\n    } else {\n      return upath.addExt(filename, ext);\n    }\n  }\n};\nisValidExt = function (ext, ignoreExts, maxSize) {\n  if (ignoreExts == null) {\n    ignoreExts = [];\n  }\n  return ext && ext.length <= maxSize && indexOf.call(ignoreExts.map(function (e) {\n    return (e && e[0] !== \".\" ? \".\" : \"\") + e;\n  }), ext) < 0;\n};\nfor (name in extraFunctions) {\n  if (!hasProp.call(extraFunctions, name))\n    continue;\n  extraFn = extraFunctions[name];\n  if (upath[name] !== void 0) {\n    throw new Error(\"path.\" + name + \" already exists.\");\n  } else {\n    upath[name] = extraFn;\n  }\n}\n\n;/readme.mdN\r# upath v2.0.1\n\n[![Build Status](https://travis-ci.org/anodynos/upath.svg?branch=master)](https://travis-ci.org/anodynos/upath)\n[![Up to date Status](https://david-dm.org/anodynos/upath.png)](https://david-dm.org/anodynos/upath)\n\nA drop-in replacement / proxy to nodejs's `path` that:\n\n  * Replaces the windows `\\` with the unix `/` in all string params & results. This has significant positives - see below.\n\n  * Adds **filename extensions** functions `addExt`, `trimExt`, `removeExt`, `changeExt`, and `defaultExt`.\n\n  * Add a `normalizeSafe` function to preserve any meaningful leading `./` & a `normalizeTrim` which additionally trims any useless ending `/`.\n\n  * Plus a helper `toUnix` that simply converts `\\` to `/` and consolidates duplicates.\n\n**Useful note: these docs are actually auto generated from [specs](https://github.com/anodynos/upath/blob/master/source/spec/upath-spec.coffee), running on Linux.**\n\nNotes:\n\n * `upath.sep` is set to `'/'` for seamless replacement (as of 1.0.3).\n\n * upath has no runtime dependencies, except built-in `path` (as of 1.0.4)\n\n * travis-ci tested in node versions 8 to 14 (on linux)\n\n * Also tested on Windows / node@12.18.0 (without CI)  \n\nHistory brief:\n\n * 1.x   : Initial release and various features / fixes\n\n * 2.0.0 : Adding UNC paths support - see https://github.com/anodynos/upath/pull/38\n\n## Why ?\n\nNormal `path` doesn't convert paths to a unified format (ie `/`) before calculating paths (`normalize`, `join`), which can lead to numerous problems.\nAlso path joining, normalization etc on the two formats is not consistent, depending on where it runs. Running `path` on Windows yields different results than when it runs on Linux / Mac.\n\nIn general, if you code your paths logic while developing on Unix/Mac and it runs on Windows, you may run into problems when using `path`.\n\nNote that using **Unix `/` on Windows** works perfectly inside nodejs (and other languages), so there's no reason to stick to the Windows legacy at all.\n\n##### Examples / specs\n        \n\nCheck out the different (improved) behavior to vanilla `path`:\n\n    `upath.normalize(path)`        --returns-->\n\n          ✓ `'c:/windows/nodejs/path'`         --->      `'c:/windows/nodejs/path'`  // equal to `path.normalize()`\n          ✓ `'c:/windows/../nodejs/path'`      --->              `'c:/nodejs/path'`  // equal to `path.normalize()`\n          ✓ `'c:\\\\windows\\\\nodejs\\\\path'`      --->      `'c:/windows/nodejs/path'`  // `path.normalize()` gives `'c:\\windows\\nodejs\\path'`\n          ✓ `'c:\\\\windows\\\\..\\\\nodejs\\\\path'`  --->              `'c:/nodejs/path'`  // `path.normalize()` gives `'c:\\windows\\..\\nodejs\\path'`\n          ✓ `'/windows\\\\unix/mixed'`           --->         `'/windows/unix/mixed'`  // `path.normalize()` gives `'/windows\\unix/mixed'`\n          ✓ `'\\\\windows//unix/mixed'`          --->         `'/windows/unix/mixed'`  // `path.normalize()` gives `'\\windows/unix/mixed'`\n          ✓ `'\\\\windows\\\\..\\\\unix/mixed/'`     --->                `'/unix/mixed/'`  // `path.normalize()` gives `'\\windows\\..\\unix/mixed/'`\n        \n\nJoining paths can also be a problem:\n\n    `upath.join(paths...)`        --returns-->\n\n          ✓ `'some/nodejs/deep', '../path'`       --->       `'some/nodejs/path'`  // equal to `path.join()`\n          ✓ `'some/nodejs\\\\windows', '../path'`   --->       `'some/nodejs/path'`  // `path.join()` gives `'some/path'`\n          ✓ `'some\\\\windows\\\\only', '..\\\\path'`   --->      `'some/windows/path'`  // `path.join()` gives `'some\\windows\\only/..\\path'`\n        \n\nParsing with `path.parse()` should also be consistent across OSes:\n\n  `upath.parse(path)`        --returns-->\n\n          ✓ `'c:\\Windows\\Directory\\somefile.ext'`      ---> `{ root: '', dir: 'c:/Windows/Directory', base: 'somefile.ext', ext: '.ext', name: 'somefile'\n}`\n                                    // `path.parse()` gives `'{ root: '', dir: '', base: 'c:\\\\Windows\\\\Directory\\\\somefile.ext', ext: '.ext', name: 'c:\\\\Windows\\\\Directory\\\\somefile'\n}'`\n          ✓ `'/root/of/unix/somefile.ext'`             ---> `{ root: '/', dir: '/root/of/unix', base: 'somefile.ext', ext: '.ext', name: 'somefile'\n}`  // equal to `path.parse()`\n    \n\n## Added functions\n      \n\n#### `upath.toUnix(path)`\n\nJust converts all `` to `/` and consolidates duplicates, without performing any normalization.\n\n##### Examples / specs\n\n    `upath.toUnix(path)`        --returns-->\n\n        ✓ `'.//windows\\//unix//mixed////'`      --->         `'./windows/unix/mixed/'`\n        ✓ `'..///windows\\..\\\\unix/mixed'`       --->      `'../windows/../unix/mixed'`\n      \n\n#### `upath.normalizeSafe(path)`\n\nExactly like `path.normalize(path)`, but it keeps the first meaningful `./` or `//`.\n\nNote that the unix `/` is returned everywhere, so windows `\\` is always converted to unix `/`.\n\n##### Examples / specs & how it differs from vanilla `path`\n\n    `upath.normalizeSafe(path)`        --returns-->\n\n        ✓ `''`                               --->                              `'.'`  // equal to `path.normalize()`\n        ✓ `'.'`                              --->                              `'.'`  // equal to `path.normalize()`\n        ✓ `'./'`                             --->                             `'./'`  // equal to `path.normalize()`\n        ✓ `'.//'`                            --->                             `'./'`  // equal to `path.normalize()`\n        ✓ `'.\\\\'`                            --->                             `'./'`  // `path.normalize()` gives `'.\\'`\n        ✓ `'.\\\\//'`                          --->                             `'./'`  // `path.normalize()` gives `'.\\/'`\n        ✓ `'./..'`                           --->                             `'..'`  // equal to `path.normalize()`\n        ✓ `'.//..'`                          --->                             `'..'`  // equal to `path.normalize()`\n        ✓ `'./../'`                          --->                            `'../'`  // equal to `path.normalize()`\n        ✓ `'.\\\\..\\\\'`                        --->                            `'../'`  // `path.normalize()` gives `'.\\..\\'`\n        ✓ `'./../dep'`                       --->                         `'../dep'`  // equal to `path.normalize()`\n        ✓ `'../dep'`                         --->                         `'../dep'`  // equal to `path.normalize()`\n        ✓ `'../path/dep'`                    --->                    `'../path/dep'`  // equal to `path.normalize()`\n        ✓ `'../path/../dep'`                 --->                         `'../dep'`  // equal to `path.normalize()`\n        ✓ `'dep'`                            --->                            `'dep'`  // equal to `path.normalize()`\n        ✓ `'path//dep'`                      --->                       `'path/dep'`  // equal to `path.normalize()`\n        ✓ `'./dep'`                          --->                          `'./dep'`  // `path.normalize()` gives `'dep'`\n        ✓ `'./path/dep'`                     --->                     `'./path/dep'`  // `path.normalize()` gives `'path/dep'`\n        ✓ `'./path/../dep'`                  --->                          `'./dep'`  // `path.normalize()` gives `'dep'`\n        ✓ `'.//windows\\\\unix/mixed/'`        --->          `'./windows/unix/mixed/'`  // `path.normalize()` gives `'windows\\unix/mixed/'`\n        ✓ `'..//windows\\\\unix/mixed'`        --->          `'../windows/unix/mixed'`  // `path.normalize()` gives `'../windows\\unix/mixed'`\n        ✓ `'windows\\\\unix/mixed/'`           --->            `'windows/unix/mixed/'`  // `path.normalize()` gives `'windows\\unix/mixed/'`\n        ✓ `'..//windows\\\\..\\\\unix/mixed'`    --->                  `'../unix/mixed'`  // `path.normalize()` gives `'../windows\\..\\unix/mixed'`\n        ✓ `'\\\\\\\\server\\\\share\\\\file'`        --->            `'//server/share/file'`  // `path.normalize()` gives `'\\\\server\\share\\file'`\n        ✓ `'//server/share/file'`            --->            `'//server/share/file'`  // `path.normalize()` gives `'/server/share/file'`\n        ✓ `'\\\\\\\\?\\\\UNC\\\\server\\\\share\\\\file'` --->      `'//?/UNC/server/share/file'`  // `path.normalize()` gives `'\\\\?\\UNC\\server\\share\\file'`\n        ✓ `'\\\\\\\\LOCALHOST\\\\c$\\\\temp\\\\file'`  --->       `'//LOCALHOST/c$/temp/file'`  // `path.normalize()` gives `'\\\\LOCALHOST\\c$\\temp\\file'`\n        ✓ `'\\\\\\\\?\\\\c:\\\\temp\\\\file'`          --->               `'//?/c:/temp/file'`  // `path.normalize()` gives `'\\\\?\\c:\\temp\\file'`\n        ✓ `'\\\\\\\\.\\\\c:\\\\temp\\\\file'`          --->               `'//./c:/temp/file'`  // `path.normalize()` gives `'\\\\.\\c:\\temp\\file'`\n        ✓ `'//./c:/temp/file'`               --->               `'//./c:/temp/file'`  // `path.normalize()` gives `'/c:/temp/file'`\n        ✓ `'////\\\\.\\\\c:/temp\\\\//file'`       --->               `'//./c:/temp/file'`  // `path.normalize()` gives `'/\\.\\c:/temp\\/file'`\n      \n\n#### `upath.normalizeTrim(path)`\n\nExactly like `path.normalizeSafe(path)`, but it trims any useless ending `/`.\n\n##### Examples / specs\n\n    `upath.normalizeTrim(path)`        --returns-->\n\n        ✓ `'./'`                          --->                         `'.'`  // `upath.normalizeSafe()` gives `'./'`\n        ✓ `'./../'`                       --->                        `'..'`  // `upath.normalizeSafe()` gives `'../'`\n        ✓ `'./../dep/'`                   --->                    `'../dep'`  // `upath.normalizeSafe()` gives `'../dep/'`\n        ✓ `'path//dep\\\\'`                 --->                  `'path/dep'`  // `upath.normalizeSafe()` gives `'path/dep/'`\n        ✓ `'.//windows\\\\unix/mixed/'`     --->      `'./windows/unix/mixed'`  // `upath.normalizeSafe()` gives `'./windows/unix/mixed/'`\n      \n\n#### `upath.joinSafe([path1][, path2][, ...])`\n\nExactly like `path.join()`, but it keeps the first meaningful `./` or `//`.\n\nNote that the unix `/` is returned everywhere, so windows `\\` is always converted to unix `/`.\n\n##### Examples / specs & how it differs from vanilla `path`\n\n    `upath.joinSafe(path)`        --returns-->\n\n        ✓ `'some/nodejs/deep', '../path'`                --->           `'some/nodejs/path'`  // equal to `path.join()`\n        ✓ `'./some/local/unix/', '../path'`              --->          `'./some/local/path'`  // `path.join()` gives `'some/local/path'`\n        ✓ `'./some\\\\current\\\\mixed', '..\\\\path'`         --->        `'./some/current/path'`  // `path.join()` gives `'some\\current\\mixed/..\\path'`\n        ✓ `'../some/relative/destination', '..\\\\path'`   --->      `'../some/relative/path'`  // `path.join()` gives `'../some/relative/destination/..\\path'`\n        ✓ `'\\\\\\\\server\\\\share\\\\file', '..\\\\path'`        --->        `'//server/share/path'`  // `path.join()` gives `'\\\\server\\share\\file/..\\path'`\n        ✓ `'\\\\\\\\.\\\\c:\\\\temp\\\\file', '..\\\\path'`          --->           `'//./c:/temp/path'`  // `path.join()` gives `'\\\\.\\c:\\temp\\file/..\\path'`\n        ✓ `'//server/share/file', '../path'`             --->        `'//server/share/path'`  // `path.join()` gives `'/server/share/path'`\n        ✓ `'//./c:/temp/file', '../path'`                --->           `'//./c:/temp/path'`  // `path.join()` gives `'/c:/temp/path'`\n    \n\n## Added functions for *filename extension* manipulation.\n\n**Happy notes:**\n\n  In all functions you can:\n\n  * use both `.ext` & `ext` - the dot `.` on the extension is always adjusted correctly.\n\n  * omit the `ext` param (pass null/undefined/empty string) and the common sense thing will happen.\n\n  * ignore specific extensions from being considered as valid ones (eg `.min`, `.dev` `.aLongExtIsNotAnExt` etc), hence no trimming or replacement takes place on them.\n\n       \n\n#### `upath.addExt(filename, [ext])`\n\nAdds `.ext` to `filename`, but only if it doesn't already have the exact extension.\n\n##### Examples / specs\n\n    `upath.addExt(filename, 'js')`     --returns-->\n\n        ✓ `'myfile/addExt'`           --->           `'myfile/addExt.js'`\n        ✓ `'myfile/addExt.txt'`       --->       `'myfile/addExt.txt.js'`\n        ✓ `'myfile/addExt.js'`        --->           `'myfile/addExt.js'`\n        ✓ `'myfile/addExt.min.'`      --->      `'myfile/addExt.min..js'`\n        \n\nIt adds nothing if no `ext` param is passed.\n\n    `upath.addExt(filename)`           --returns-->\n\n          ✓ `'myfile/addExt'`           --->              `'myfile/addExt'`\n          ✓ `'myfile/addExt.txt'`       --->          `'myfile/addExt.txt'`\n          ✓ `'myfile/addExt.js'`        --->           `'myfile/addExt.js'`\n          ✓ `'myfile/addExt.min.'`      --->         `'myfile/addExt.min.'`\n      \n\n#### `upath.trimExt(filename, [ignoreExts], [maxSize=7])`\n\nTrims a filename's extension.\n\n  * Extensions are considered to be up to `maxSize` chars long, counting the dot (defaults to 7).\n\n  * An `Array` of `ignoreExts` (eg `['.min']`) prevents these from being considered as extension, thus are not trimmed.\n\n##### Examples / specs\n\n    `upath.trimExt(filename)`          --returns-->\n\n        ✓ `'my/trimedExt.txt'`             --->                 `'my/trimedExt'`\n        ✓ `'my/trimedExt'`                 --->                 `'my/trimedExt'`\n        ✓ `'my/trimedExt.min'`             --->                 `'my/trimedExt'`\n        ✓ `'my/trimedExt.min.js'`          --->             `'my/trimedExt.min'`\n        ✓ `'../my/trimedExt.longExt'`      --->      `'../my/trimedExt.longExt'`\n        \n\nIt is ignoring `.min` & `.dev` as extensions, and considers exts with up to 8 chars.\n\n    `upath.trimExt(filename, ['min', '.dev'], 8)`          --returns-->\n\n          ✓ `'my/trimedExt.txt'`              --->                  `'my/trimedExt'`\n          ✓ `'my/trimedExt.min'`              --->              `'my/trimedExt.min'`\n          ✓ `'my/trimedExt.dev'`              --->              `'my/trimedExt.dev'`\n          ✓ `'../my/trimedExt.longExt'`       --->               `'../my/trimedExt'`\n          ✓ `'../my/trimedExt.longRExt'`      --->      `'../my/trimedExt.longRExt'`\n      \n\n#### `upath.removeExt(filename, ext)`\n\nRemoves the specific `ext` extension from filename, if it has it. Otherwise it leaves it as is.\nAs in all upath functions, it be `.ext` or `ext`.\n\n##### Examples / specs\n\n    `upath.removeExt(filename, '.js')`          --returns-->\n\n        ✓ `'removedExt.js'`          --->          `'removedExt'`\n        ✓ `'removedExt.txt.js'`      --->      `'removedExt.txt'`\n        ✓ `'notRemoved.txt'`         --->      `'notRemoved.txt'`\n      \n\nIt does not care about the length of exts.\n\n    `upath.removeExt(filename, '.longExt')`          --returns-->\n\n        ✓ `'removedExt.longExt'`          --->          `'removedExt'`\n        ✓ `'removedExt.txt.longExt'`      --->      `'removedExt.txt'`\n        ✓ `'notRemoved.txt'`              --->      `'notRemoved.txt'`\n      \n\n#### `upath.changeExt(filename, [ext], [ignoreExts], [maxSize=7])`\n\nChanges a filename's extension to `ext`. If it has no (valid) extension, it adds it.\n\n  * Valid extensions are considered to be up to `maxSize` chars long, counting the dot (defaults to 7).\n\n  * An `Array` of `ignoreExts` (eg `['.min']`) prevents these from being considered as extension, thus are not changed - the new extension is added instead.\n\n##### Examples / specs\n\n    `upath.changeExt(filename, '.js')`  --returns-->\n\n        ✓ `'my/module.min'`            --->                `'my/module.js'`\n        ✓ `'my/module.coffee'`         --->                `'my/module.js'`\n        ✓ `'my/module'`                --->                `'my/module.js'`\n        ✓ `'file/withDot.'`            --->             `'file/withDot.js'`\n        ✓ `'file/change.longExt'`      --->      `'file/change.longExt.js'`\n        \n\nIf no `ext` param is given, it trims the current extension (if any).\n\n    `upath.changeExt(filename)`        --returns-->\n\n          ✓ `'my/module.min'`            --->                   `'my/module'`\n          ✓ `'my/module.coffee'`         --->                   `'my/module'`\n          ✓ `'my/module'`                --->                   `'my/module'`\n          ✓ `'file/withDot.'`            --->                `'file/withDot'`\n          ✓ `'file/change.longExt'`      --->         `'file/change.longExt'`\n        \n\nIt is ignoring `.min` & `.dev` as extensions, and considers exts with up to 8 chars.\n\n    `upath.changeExt(filename, 'js', ['min', '.dev'], 8)`        --returns-->\n\n          ✓ `'my/module.coffee'`          --->                 `'my/module.js'`\n          ✓ `'file/notValidExt.min'`      --->      `'file/notValidExt.min.js'`\n          ✓ `'file/notValidExt.dev'`      --->      `'file/notValidExt.dev.js'`\n          ✓ `'file/change.longExt'`       --->               `'file/change.js'`\n          ✓ `'file/change.longRExt'`      --->      `'file/change.longRExt.js'`\n      \n\n#### `upath.defaultExt(filename, [ext], [ignoreExts], [maxSize=7])`\n\nAdds `.ext` to `filename`, only if it doesn't already have _any_ *old* extension.\n\n  * (Old) extensions are considered to be up to `maxSize` chars long, counting the dot (defaults to 7).\n\n  * An `Array` of `ignoreExts` (eg `['.min']`) will force adding default `.ext` even if one of these is present.\n\n##### Examples / specs\n\n    `upath.defaultExt(filename, 'js')`   --returns-->\n\n        ✓ `'fileWith/defaultExt'`              --->              `'fileWith/defaultExt.js'`\n        ✓ `'fileWith/defaultExt.js'`           --->              `'fileWith/defaultExt.js'`\n        ✓ `'fileWith/defaultExt.min'`          --->             `'fileWith/defaultExt.min'`\n        ✓ `'fileWith/defaultExt.longExt'`      --->      `'fileWith/defaultExt.longExt.js'`\n        \n\nIf no `ext` param is passed, it leaves filename intact.\n\n    `upath.defaultExt(filename)`       --returns-->\n\n          ✓ `'fileWith/defaultExt'`              --->                 `'fileWith/defaultExt'`\n          ✓ `'fileWith/defaultExt.js'`           --->              `'fileWith/defaultExt.js'`\n          ✓ `'fileWith/defaultExt.min'`          --->             `'fileWith/defaultExt.min'`\n          ✓ `'fileWith/defaultExt.longExt'`      --->         `'fileWith/defaultExt.longExt'`\n        \n\nIt is ignoring `.min` & `.dev` as extensions, and considers exts with up to 8 chars.\n\n    `upath.defaultExt(filename, 'js', ['min', '.dev'], 8)` --returns-->\n\n          ✓ `'fileWith/defaultExt'`               --->               `'fileWith/defaultExt.js'`\n          ✓ `'fileWith/defaultExt.min'`           --->           `'fileWith/defaultExt.min.js'`\n          ✓ `'fileWith/defaultExt.dev'`           --->           `'fileWith/defaultExt.dev.js'`\n          ✓ `'fileWith/defaultExt.longExt'`       --->          `'fileWith/defaultExt.longExt'`\n          ✓ `'fileWith/defaultExt.longRext'`      --->      `'fileWith/defaultExt.longRext.js'`\n\n  \nCopyright(c) 2014-2020 Angelos Pikoulas (agelos.pikoulas@gmail.com)\n\nPermission is hereby granted, free of charge, to any person\nobtaining a copy of this software and associated documentation\nfiles (the \"Software\"), to deal in the Software without\nrestriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the\nSoftware is furnished to do so, subject to the following\nconditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\nOF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\nHOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\nWHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\nFROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\nOTHER DEALINGS IN THE SOFTWARE.\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/dXBkYXRlLWJyb3dzZXJzbGlzdC1kYkAxLjAuMTA=",
    "content": "/utils.js\u0002const { EOL } = require('os')\n\nconst getFirstRegexpMatchOrDefault = (text, regexp, defaultValue) => {\n  regexp.lastIndex = 0 // https://stackoverflow.com/a/11477448/4536543\n  let match = regexp.exec(text)\n  if (match !== null) return match[1]\n  return defaultValue\n}\n\nconst DEFAULT_INDENT = '  '\nconst INDENT_REGEXP = /^([ \\t]+)[^\\s]/m\n\nmodule.exports.detectIndent = text =>\n  getFirstRegexpMatchOrDefault(text, INDENT_REGEXP, DEFAULT_INDENT)\nmodule.exports.DEFAULT_INDENT = DEFAULT_INDENT\n\nconst DEFAULT_EOL = EOL\nconst EOL_REGEXP = /(\\r\\n|\\n|\\r)/g\n\nmodule.exports.detectEOL = text =>\n  getFirstRegexpMatchOrDefault(text, EOL_REGEXP, DEFAULT_EOL)\nmodule.exports.DEFAULT_EOL = DEFAULT_EOL\n/cli.js\u0003#!/usr/bin/env node\n\nlet { readFileSync } = require('fs')\nlet { join } = require('path')\n\nrequire('./check-npm-version')\nlet updateDb = require('./')\n\nconst ROOT = __dirname\n\nfunction getPackage() {\n  return JSON.parse(readFileSync(join(ROOT, 'package.json')))\n}\n\nlet args = process.argv.slice(2)\n\nlet USAGE = 'Usage:\\n  npx update-browserslist-db\\n'\n\nfunction isArg(arg) {\n  return args.some(i => i === arg)\n}\n\nfunction error(msg) {\n  process.stderr.write('update-browserslist-db: ' + msg + '\\n')\n  process.exit(1)\n}\n\nif (isArg('--help') || isArg('-h')) {\n  process.stdout.write(getPackage().description + '.\\n\\n' + USAGE + '\\n')\n} else if (isArg('--version') || isArg('-v')) {\n  process.stdout.write('browserslist-lint ' + getPackage().version + '\\n')\n} else {\n  try {\n    updateDb()\n  } catch (e) {\n    if (e.name === 'BrowserslistUpdateError') {\n      error(e.message)\n    } else {\n      throw e\n    }\n  }\n}\n/index.d.tsď/**\n * Run update and print output to terminal.\n */\ndeclare function updateDb(print?: (str: string) => void): Promise<void>\n\nexport = updateDb\n/index.js\"Glet childProcess = require('child_process')\nlet escalade = require('escalade/sync')\nlet pico = require('picocolors')\nlet path = require('path')\nlet fs = require('fs')\n\nconst { detectIndent, detectEOL } = require('./utils')\n\nfunction BrowserslistUpdateError(message) {\n  this.name = 'BrowserslistUpdateError'\n  this.message = message\n  this.browserslist = true\n  if (Error.captureStackTrace) {\n    Error.captureStackTrace(this, BrowserslistUpdateError)\n  }\n}\n\nBrowserslistUpdateError.prototype = Error.prototype\n\n/* c8 ignore next 3 */\nfunction defaultPrint(str) {\n  process.stdout.write(str)\n}\n\nfunction detectLockfile() {\n  let packageDir = escalade('.', (dir, names) => {\n    return names.indexOf('package.json') !== -1 ? dir : ''\n  })\n\n  if (!packageDir) {\n    throw new BrowserslistUpdateError(\n      'Cannot find package.json. ' +\n        'Is this the right directory to run `npx update-browserslist-db` in?'\n    )\n  }\n\n  let lockfileNpm = path.join(packageDir, 'package-lock.json')\n  let lockfileShrinkwrap = path.join(packageDir, 'npm-shrinkwrap.json')\n  let lockfileYarn = path.join(packageDir, 'yarn.lock')\n  let lockfilePnpm = path.join(packageDir, 'pnpm-lock.yaml')\n\n  if (fs.existsSync(lockfilePnpm)) {\n    return { mode: 'pnpm', file: lockfilePnpm }\n  } else if (fs.existsSync(lockfileNpm)) {\n    return { mode: 'npm', file: lockfileNpm }\n  } else if (fs.existsSync(lockfileYarn)) {\n    let lock = { mode: 'yarn', file: lockfileYarn }\n    lock.content = fs.readFileSync(lock.file).toString()\n    lock.version = /# yarn lockfile v1/.test(lock.content) ? 1 : 2\n    return lock\n  } else if (fs.existsSync(lockfileShrinkwrap)) {\n    return { mode: 'npm', file: lockfileShrinkwrap }\n  }\n  throw new BrowserslistUpdateError(\n    'No lockfile found. Run \"npm install\", \"yarn install\" or \"pnpm install\"'\n  )\n}\n\nfunction getLatestInfo(lock) {\n  if (lock.mode === 'yarn') {\n    if (lock.version === 1) {\n      return JSON.parse(\n        childProcess.execSync('yarn info caniuse-lite --json').toString()\n      ).data\n    } else {\n      return JSON.parse(\n        childProcess.execSync('yarn npm info caniuse-lite --json').toString()\n      )\n    }\n  }\n  if (lock.mode === 'pnpm') {\n    return JSON.parse(\n      childProcess.execSync('pnpm info caniuse-lite --json').toString()\n    )\n  }\n  return JSON.parse(\n    childProcess.execSync('npm show caniuse-lite --json').toString()\n  )\n}\n\nfunction getBrowsers() {\n  let browserslist = require('browserslist')\n  return browserslist().reduce((result, entry) => {\n    if (!result[entry[0]]) {\n      result[entry[0]] = []\n    }\n    result[entry[0]].push(entry[1])\n    return result\n  }, {})\n}\n\nfunction diffBrowsers(old, current) {\n  let browsers = Object.keys(old).concat(\n    Object.keys(current).filter(browser => old[browser] === undefined)\n  )\n  return browsers\n    .map(browser => {\n      let oldVersions = old[browser] || []\n      let currentVersions = current[browser] || []\n      let common = oldVersions.filter(v => currentVersions.includes(v))\n      let added = currentVersions.filter(v => !common.includes(v))\n      let removed = oldVersions.filter(v => !common.includes(v))\n      return removed\n        .map(v => pico.red('- ' + browser + ' ' + v))\n        .concat(added.map(v => pico.green('+ ' + browser + ' ' + v)))\n    })\n    .reduce((result, array) => result.concat(array), [])\n    .join('\\n')\n}\n\nfunction updateNpmLockfile(lock, latest) {\n  let metadata = { latest, versions: [] }\n  let content = deletePackage(JSON.parse(lock.content), metadata)\n  metadata.content = JSON.stringify(content, null, detectIndent(lock.content))\n  return metadata\n}\n\nfunction deletePackage(node, metadata) {\n  if (node.dependencies) {\n    if (node.dependencies['caniuse-lite']) {\n      let version = node.dependencies['caniuse-lite'].version\n      metadata.versions[version] = true\n      delete node.dependencies['caniuse-lite']\n    }\n    for (let i in node.dependencies) {\n      node.dependencies[i] = deletePackage(node.dependencies[i], metadata)\n    }\n  }\n  return node\n}\n\nlet yarnVersionRe = /version \"(.*?)\"/\n\nfunction updateYarnLockfile(lock, latest) {\n  let blocks = lock.content.split(/(\\n{2,})/).map(block => {\n    return block.split('\\n')\n  })\n  let versions = {}\n  blocks.forEach(lines => {\n    if (lines[0].indexOf('caniuse-lite@') !== -1) {\n      let match = yarnVersionRe.exec(lines[1])\n      versions[match[1]] = true\n      if (match[1] !== latest.version) {\n        lines[1] = lines[1].replace(\n          /version \"[^\"]+\"/,\n          'version \"' + latest.version + '\"'\n        )\n        lines[2] = lines[2].replace(\n          /resolved \"[^\"]+\"/,\n          'resolved \"' + latest.dist.tarball + '\"'\n        )\n        if (lines.length === 4) {\n          lines[3] = latest.dist.integrity\n            ? lines[3].replace(\n                /integrity .+/,\n                'integrity ' + latest.dist.integrity\n              )\n            : ''\n        }\n      }\n    }\n  })\n  let content = blocks.map(lines => lines.join('\\n')).join('')\n  return { content, versions }\n}\n\nfunction updateLockfile(lock, latest) {\n  if (!lock.content) lock.content = fs.readFileSync(lock.file).toString()\n\n  let updatedLockFile\n  if (lock.mode === 'yarn') {\n    updatedLockFile = updateYarnLockfile(lock, latest)\n  } else {\n    updatedLockFile = updateNpmLockfile(lock, latest)\n  }\n  updatedLockFile.content = updatedLockFile.content.replace(\n    /\\n/g,\n    detectEOL(lock.content)\n  )\n  return updatedLockFile\n}\n\nfunction updatePackageManually(print, lock, latest) {\n  let lockfileData = updateLockfile(lock, latest)\n  let caniuseVersions = Object.keys(lockfileData.versions).sort()\n  if (caniuseVersions.length === 1 && caniuseVersions[0] === latest.version) {\n    print(\n      'Installed version:  ' +\n        pico.bold(pico.green(latest.version)) +\n        '\\n' +\n        pico.bold(pico.green('caniuse-lite is up to date')) +\n        '\\n'\n    )\n    return\n  }\n\n  if (caniuseVersions.length === 0) {\n    caniuseVersions[0] = 'none'\n  }\n  print(\n    'Installed version' +\n      (caniuseVersions.length === 1 ? ':  ' : 's: ') +\n      pico.bold(pico.red(caniuseVersions.join(', '))) +\n      '\\n' +\n      'Removing old caniuse-lite from lock file\\n'\n  )\n  fs.writeFileSync(lock.file, lockfileData.content)\n\n  let install = lock.mode === 'yarn' ? 'yarn add -W' : lock.mode + ' install'\n  print(\n    'Installing new caniuse-lite version\\n' +\n      pico.yellow('$ ' + install + ' caniuse-lite') +\n      '\\n'\n  )\n  try {\n    childProcess.execSync(install + ' caniuse-lite')\n  } catch (e) /* c8 ignore start */ {\n    print(\n      pico.red(\n        '\\n' +\n          e.stack +\n          '\\n\\n' +\n          'Problem with `' +\n          install +\n          ' caniuse-lite` call. ' +\n          'Run it manually.\\n'\n      )\n    )\n    process.exit(1)\n  } /* c8 ignore end */\n\n  let del = lock.mode === 'yarn' ? 'yarn remove -W' : lock.mode + ' uninstall'\n  print(\n    'Cleaning package.json dependencies from caniuse-lite\\n' +\n      pico.yellow('$ ' + del + ' caniuse-lite') +\n      '\\n'\n  )\n  childProcess.execSync(del + ' caniuse-lite')\n}\n\nfunction updateWith(print, cmd) {\n  print('Updating caniuse-lite version\\n' + pico.yellow('$ ' + cmd) + '\\n')\n  try {\n    childProcess.execSync(cmd)\n  } catch (e) /* c8 ignore start */ {\n    print(pico.red(e.stdout.toString()))\n    print(\n      pico.red(\n        '\\n' +\n          e.stack +\n          '\\n\\n' +\n          'Problem with `' +\n          cmd +\n          '` call. ' +\n          'Run it manually.\\n'\n      )\n    )\n    process.exit(1)\n  } /* c8 ignore end */\n}\n\nmodule.exports = function updateDB(print = defaultPrint) {\n  let lock = detectLockfile()\n  let latest = getLatestInfo(lock)\n\n  let listError\n  let oldList\n  try {\n    oldList = getBrowsers()\n  } catch (e) {\n    listError = e\n  }\n\n  print('Latest version:     ' + pico.bold(pico.green(latest.version)) + '\\n')\n\n  if (lock.mode === 'yarn' && lock.version !== 1) {\n    updateWith(print, 'yarn up -R caniuse-lite')\n  } else if (lock.mode === 'pnpm') {\n    updateWith(print, 'pnpm up caniuse-lite')\n  } else {\n    updatePackageManually(print, lock, latest)\n  }\n\n  print('caniuse-lite has been successfully updated\\n')\n\n  let newList\n  if (!listError) {\n    try {\n      newList = getBrowsers()\n    } catch (e) /* c8 ignore start */ {\n      listError = e\n    } /* c8 ignore end */\n  }\n\n  if (listError) {\n    print(\n      pico.red(\n        '\\n' +\n          listError.stack +\n          '\\n\\n' +\n          'Problem with browser list retrieval.\\n' +\n          'Target browser changes won’t be shown.\\n'\n      )\n    )\n  } else {\n    let changes = diffBrowsers(oldList, newList)\n    if (changes) {\n      print('\\nTarget browser changes:\\n')\n      print(changes + '\\n')\n    } else {\n      print('\\n' + pico.green('No target browser changes') + '\\n')\n    }\n  }\n}\n/check-npm-version.js\u0001dlet { execSync } = require('child_process')\nlet pico = require('picocolors')\n\ntry {\n  let version = parseInt(execSync('npm -v'))\n  if (version <= 6) {\n    process.stderr.write(\n      pico.red(\n        'Update npm or call ' +\n          pico.yellow('npx browserslist@latest --update-db') +\n          '\\n'\n      )\n    )\n    process.exit(1)\n  }\n} catch (e) {}\n/package.json\u0003a{\n  \"name\": \"update-browserslist-db\",\n  \"version\": \"1.0.10\",\n  \"description\": \"CLI tool to update caniuse-lite to refresh target browsers from Browserslist config\",\n  \"keywords\": [\n    \"caniuse\",\n    \"browsers\",\n    \"target\"\n  ],\n  \"funding\": [\n    {\n      \"type\": \"opencollective\",\n      \"url\": \"https://opencollective.com/browserslist\"\n    },\n    {\n      \"type\": \"tidelift\",\n      \"url\": \"https://tidelift.com/funding/github/npm/browserslist\"\n    }\n  ],\n  \"author\": \"Andrey Sitnik <andrey@sitnik.ru>\",\n  \"license\": \"MIT\",\n  \"repository\": \"browserslist/update-db\",\n  \"types\": \"./index.d.ts\",\n  \"exports\": {\n    \".\": \"./index.js\",\n    \"./package.json\": \"./package.json\"\n  },\n  \"dependencies\": {\n    \"escalade\": \"^3.1.1\",\n    \"picocolors\": \"^1.0.0\"\n  },\n  \"peerDependencies\": {\n    \"browserslist\": \">= 4.21.0\"\n  },\n  \"bin\": {\n    \"browserslist-lint\": \"cli.js\"\n  }\n}\n/LICENSE\u0004^The MIT License (MIT)\n\nCopyright 2022 Andrey Sitnik <andrey@sitnik.ru> and other contributors\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n/README.md\u0002# Update Browserslist DB\n\n<img width=\"120\" height=\"120\" alt=\"Browserslist logo by Anton Popov\"\n     src=\"https://browsersl.ist/logo.svg\" align=\"right\">\n\nCLI tool to update `caniuse-lite` with browsers DB\nfrom [Browserslist](https://github.com/browserslist/browserslist/) config.\n\nSome queries like `last 2 version` or `>1%` depends on actual data\nfrom `caniuse-lite`.\n\n```sh\nnpx update-browserslist-db@latest\n```\n\n<a href=\"https://evilmartians.com/?utm_source=update-browserslist-db\">\n  <img src=\"https://evilmartians.com/badges/sponsored-by-evil-martians.svg\"\n       alt=\"Sponsored by Evil Martians\" width=\"236\" height=\"54\">\n</a>\n\n\n## Docs\nRead **[full docs](https://github.com/browserslist/update-db#readme)** on GitHub.\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/dXRpbC1kZXByZWNhdGVAMS4wLjI=",
    "content": "/package.json\u0002{\n  \"name\": \"util-deprecate\",\n  \"version\": \"1.0.2\",\n  \"description\": \"The Node.js `util.deprecate()` function with browser support\",\n  \"main\": \"node.js\",\n  \"browser\": \"browser.js\",\n  \"scripts\": {\n    \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git://github.com/TooTallNate/util-deprecate.git\"\n  },\n  \"keywords\": [\n    \"util\",\n    \"deprecate\",\n    \"browserify\",\n    \"browser\",\n    \"node\"\n  ],\n  \"author\": \"Nathan Rajlich <nathan@tootallnate.net> (http://n8.io/)\",\n  \"license\": \"MIT\",\n  \"bugs\": {\n    \"url\": \"https://github.com/TooTallNate/util-deprecate/issues\"\n  },\n  \"homepage\": \"https://github.com/TooTallNate/util-deprecate\"\n}\n/node.js{\n/**\n * For Node.js, simply re-export the core `util.deprecate` function.\n */\n\nmodule.exports = require('util').deprecate;\n/LICENSE\u0004N(The MIT License)\n\nCopyright (c) 2014 Nathan Rajlich <nathan@tootallnate.net>\n\nPermission is hereby granted, free of charge, to any person\nobtaining a copy of this software and associated documentation\nfiles (the \"Software\"), to deal in the Software without\nrestriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the\nSoftware is furnished to do so, subject to the following\nconditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\nOF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\nHOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\nWHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\nFROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\nOTHER DEALINGS IN THE SOFTWARE.\n/History.md\u0001\u001a\n1.0.2 / 2015-10-07\n==================\n\n  * use try/catch when checking `localStorage` (#3, @kumavis)\n\n1.0.1 / 2014-11-25\n==================\n\n  * browser: use `console.warn()` for deprecation calls\n  * browser: more jsdocs\n\n1.0.0 / 2014-04-30\n==================\n\n  * initial commit\n/README.md\u0006util-deprecate\n==============\n### The Node.js `util.deprecate()` function with browser support\n\nIn Node.js, this module simply re-exports the `util.deprecate()` function.\n\nIn the web browser (i.e. via browserify), a browser-specific implementation\nof the `util.deprecate()` function is used.\n\n\n## API\n\nA `deprecate()` function is the only thing exposed by this module.\n\n``` javascript\n// setup:\nexports.foo = deprecate(foo, 'foo() is deprecated, use bar() instead');\n\n\n// users see:\nfoo();\n// foo() is deprecated, use bar() instead\nfoo();\nfoo();\n```\n\n\n## License\n\n(The MIT License)\n\nCopyright (c) 2014 Nathan Rajlich <nathan@tootallnate.net>\n\nPermission is hereby granted, free of charge, to any person\nobtaining a copy of this software and associated documentation\nfiles (the \"Software\"), to deal in the Software without\nrestriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the\nSoftware is furnished to do so, subject to the following\nconditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\nOF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\nHOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\nWHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\nFROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\nOTHER DEALINGS IN THE SOFTWARE.\n/browser.js\u0006N\n/**\n * Module exports.\n */\n\nmodule.exports = deprecate;\n\n/**\n * Mark that a method should not be used.\n * Returns a modified function which warns once by default.\n *\n * If `localStorage.noDeprecation = true` is set, then it is a no-op.\n *\n * If `localStorage.throwDeprecation = true` is set, then deprecated functions\n * will throw an Error when invoked.\n *\n * If `localStorage.traceDeprecation = true` is set, then deprecated functions\n * will invoke `console.trace()` instead of `console.error()`.\n *\n * @param {Function} fn - the function to deprecate\n * @param {String} msg - the string to print to the console when `fn` is invoked\n * @returns {Function} a new \"deprecated\" version of `fn`\n * @api public\n */\n\nfunction deprecate (fn, msg) {\n  if (config('noDeprecation')) {\n    return fn;\n  }\n\n  var warned = false;\n  function deprecated() {\n    if (!warned) {\n      if (config('throwDeprecation')) {\n        throw new Error(msg);\n      } else if (config('traceDeprecation')) {\n        console.trace(msg);\n      } else {\n        console.warn(msg);\n      }\n      warned = true;\n    }\n    return fn.apply(this, arguments);\n  }\n\n  return deprecated;\n}\n\n/**\n * Checks `localStorage` for boolean values for the given `name`.\n *\n * @param {String} name\n * @returns {Boolean}\n * @api private\n */\n\nfunction config (name) {\n  // accessing global.localStorage can trigger a DOMException in sandboxed iframes\n  try {\n    if (!global.localStorage) return false;\n  } catch (_) {\n    return false;\n  }\n  var val = global.localStorage[name];\n  if (null == val) return false;\n  return String(val).toLowerCase() === 'true';\n}\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/dXRpbHMtbWVyZ2VAMS4wLjE=",
    "content": "/LICENSE\u0004<The MIT License (MIT)\n\nCopyright (c) 2013-2017 Jared Hanson\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n/package.json\u0003Y{\n  \"name\": \"utils-merge\",\n  \"version\": \"1.0.1\",\n  \"description\": \"merge() utility function\",\n  \"keywords\": [\n    \"util\"\n  ],\n  \"author\": {\n    \"name\": \"Jared Hanson\",\n    \"email\": \"jaredhanson@gmail.com\",\n    \"url\": \"http://www.jaredhanson.net/\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git://github.com/jaredhanson/utils-merge.git\"\n  },\n  \"bugs\": {\n    \"url\": \"http://github.com/jaredhanson/utils-merge/issues\"\n  },\n  \"license\": \"MIT\",\n  \"licenses\": [\n    {\n      \"type\": \"MIT\",\n      \"url\": \"http://opensource.org/licenses/MIT\"\n    }\n  ],\n  \"main\": \"./index\",\n  \"dependencies\": {},\n  \"devDependencies\": {\n    \"make-node\": \"0.3.x\",\n    \"mocha\": \"1.x.x\",\n    \"chai\": \"1.x.x\"\n  },\n  \"engines\": {\n    \"node\": \">= 0.4.0\"\n  },\n  \"scripts\": {\n    \"test\": \"node_modules/.bin/mocha --reporter spec --require test/bootstrap/node test/*.test.js\"\n  }\n}\n/.npmignoreOCONTRIBUTING.md\nMakefile\ndocs/\nexamples/\nreports/\ntest/\n\n.jshintrc\n.travis.yml\n/index.js\u0001}/**\n * Merge object b with object a.\n *\n *     var a = { foo: 'bar' }\n *       , b = { bar: 'baz' };\n *\n *     merge(a, b);\n *     // => { foo: 'bar', bar: 'baz' }\n *\n * @param {Object} a\n * @param {Object} b\n * @return {Object}\n * @api public\n */\n\nexports = module.exports = function(a, b){\n  if (a && b) {\n    for (var key in b) {\n      a[key] = b[key];\n    }\n  }\n  return a;\n};\n/README.md\u0005'# utils-merge\n\n[![Version](https://img.shields.io/npm/v/utils-merge.svg?label=version)](https://www.npmjs.com/package/utils-merge)\n[![Build](https://img.shields.io/travis/jaredhanson/utils-merge.svg)](https://travis-ci.org/jaredhanson/utils-merge)\n[![Quality](https://img.shields.io/codeclimate/github/jaredhanson/utils-merge.svg?label=quality)](https://codeclimate.com/github/jaredhanson/utils-merge)\n[![Coverage](https://img.shields.io/coveralls/jaredhanson/utils-merge.svg)](https://coveralls.io/r/jaredhanson/utils-merge)\n[![Dependencies](https://img.shields.io/david/jaredhanson/utils-merge.svg)](https://david-dm.org/jaredhanson/utils-merge)\n\n\nMerges the properties from a source object into a destination object.\n\n## Install\n\n```bash\n$ npm install utils-merge\n```\n\n## Usage\n\n```javascript\nvar a = { foo: 'bar' }\n  , b = { bar: 'baz' };\n\nmerge(a, b);\n// => { foo: 'bar', bar: 'baz' }\n```\n\n## License\n\n[The MIT License](http://opensource.org/licenses/MIT)\n\nCopyright (c) 2013-2017 Jared Hanson <[http://jaredhanson.net/](http://jaredhanson.net/)>\n\n<a target='_blank' rel='nofollow' href='https://app.codesponsor.io/link/vK9dyjRnnWsMzzJTQ57fRJpH/jaredhanson/utils-merge'>  <img alt='Sponsor' width='888' height='68' src='https://app.codesponsor.io/embed/vK9dyjRnnWsMzzJTQ57fRJpH/jaredhanson/utils-merge.svg' /></a>\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/djgtY29tcGlsZS1jYWNoZUAyLjMuMA==",
    "content": "/package.json\u0003@{\n  \"name\": \"v8-compile-cache\",\n  \"version\": \"2.3.0\",\n  \"description\": \"Require hook for automatic V8 compile cache persistence\",\n  \"main\": \"v8-compile-cache.js\",\n  \"scripts\": {\n    \"bench\": \"bench/run.sh\",\n    \"eslint\": \"eslint --max-warnings=0 .\",\n    \"tap\": \"tap test/*-test.js\",\n    \"test\": \"npm run tap\",\n    \"posttest\": \"npm run eslint\"\n  },\n  \"author\": \"Andres Suarez <zertosh@gmail.com>\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/zertosh/v8-compile-cache.git\"\n  },\n  \"files\": [\n    \"v8-compile-cache.js\"\n  ],\n  \"license\": \"MIT\",\n  \"dependencies\": {},\n  \"devDependencies\": {\n    \"babel-core\": \"6.26.3\",\n    \"eslint\": \"^7.12.1\",\n    \"flow-parser\": \"0.136.0\",\n    \"rimraf\": \"^2.5.4\",\n    \"rxjs\": \"6.6.3\",\n    \"semver\": \"^5.3.0\",\n    \"tap\": \"^9.0.0\",\n    \"temp\": \"^0.8.3\",\n    \"yarn\": \"1.22.10\"\n  }\n}\n/CHANGELOG.md\u0007# `v8-module-cache` Changelog\n\n## 2021-03-05, Version 2.3.0\n\n* Fix use require.main instead of module.parent [#34](https://github.com/zertosh/v8-compile-cache/pull/34).\n\n## 2020-10-28, Version 2.2.0\n\n* Added `V8_COMPILE_CACHE_CACHE_DIR` option [#23](https://github.com/zertosh/v8-compile-cache/pull/23).\n\n## 2020-05-30, Version 2.1.1\n\n* Stop using process.umask() [#28](https://github.com/zertosh/v8-compile-cache/pull/28).\n\n## 2019-08-04, Version 2.1.0\n\n* Fix Electron by calling the module wrapper with `Buffer` [#10](https://github.com/zertosh/v8-compile-cache/pull/10).\n\n## 2019-05-10, Version 2.0.3\n\n* Add `LICENSE` file [#19](https://github.com/zertosh/v8-compile-cache/pull/19).\n* Add \"repository\" to `package.json` (see [eea336e](https://github.com/zertosh/v8-compile-cache/commit/eea336eaa8360f9ded9342b8aa928e56ac6a7529)).\n* Support `require.resolve.paths` (added in Node v8.9.0) [#20](https://github.com/zertosh/v8-compile-cache/pull/20)/[#22](https://github.com/zertosh/v8-compile-cache/pull/22).\n\n## 2018-08-06, Version 2.0.2\n\n* Re-publish.\n\n## 2018-08-06, Version 2.0.1\n\n* Support `require.resolve` options (added in Node v8.9.0).\n\n## 2018-04-30, Version 2.0.0\n\n* Use `Buffer.alloc` instead of `new Buffer()`.\n* Drop support for Node 5.x.\n\n## 2018-01-23, Version 1.1.2\n\n* Instead of checking for `process.versions.v8`, check that `script.cachedDataProduced` is `true` (rather than `null`/`undefined`) for support to be considered existent.\n\n## 2018-01-23, Version 1.1.1\n\n* Check for the existence of `process.versions.v8` before attaching hook (see [f8b0388](https://github.com/zertosh/v8-compile-cache/commit/f8b038848be94bc2c905880dd50447c73393f364)).\n\n## 2017-03-27, Version 1.1.0\n\n* Safer cache directory creation (see [bcb3b12](https://github.com/zertosh/v8-compile-cache/commit/bcb3b12c819ab0927ec4408e70f612a6d50a9617)).\n  - The cache is now suffixed with the user's uid on POSIX systems (i.e. `/path/to/tmp/v8-compile-cache-1234`).\n\n## 2017-02-21, Version 1.0.0\n\n* Initial release.\n/v8-compile-cache.js)'use strict';\n\nconst Module = require('module');\nconst crypto = require('crypto');\nconst fs = require('fs');\nconst path = require('path');\nconst vm = require('vm');\nconst os = require('os');\n\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\n\n//------------------------------------------------------------------------------\n// FileSystemBlobStore\n//------------------------------------------------------------------------------\n\nclass FileSystemBlobStore {\n  constructor(directory, prefix) {\n    const name = prefix ? slashEscape(prefix + '.') : '';\n    this._blobFilename = path.join(directory, name + 'BLOB');\n    this._mapFilename = path.join(directory, name + 'MAP');\n    this._lockFilename = path.join(directory, name + 'LOCK');\n    this._directory = directory;\n    this._load();\n  }\n\n  has(key, invalidationKey) {\n    if (hasOwnProperty.call(this._memoryBlobs, key)) {\n      return this._invalidationKeys[key] === invalidationKey;\n    } else if (hasOwnProperty.call(this._storedMap, key)) {\n      return this._storedMap[key][0] === invalidationKey;\n    }\n    return false;\n  }\n\n  get(key, invalidationKey) {\n    if (hasOwnProperty.call(this._memoryBlobs, key)) {\n      if (this._invalidationKeys[key] === invalidationKey) {\n        return this._memoryBlobs[key];\n      }\n    } else if (hasOwnProperty.call(this._storedMap, key)) {\n      const mapping = this._storedMap[key];\n      if (mapping[0] === invalidationKey) {\n        return this._storedBlob.slice(mapping[1], mapping[2]);\n      }\n    }\n  }\n\n  set(key, invalidationKey, buffer) {\n    this._invalidationKeys[key] = invalidationKey;\n    this._memoryBlobs[key] = buffer;\n    this._dirty = true;\n  }\n\n  delete(key) {\n    if (hasOwnProperty.call(this._memoryBlobs, key)) {\n      this._dirty = true;\n      delete this._memoryBlobs[key];\n    }\n    if (hasOwnProperty.call(this._invalidationKeys, key)) {\n      this._dirty = true;\n      delete this._invalidationKeys[key];\n    }\n    if (hasOwnProperty.call(this._storedMap, key)) {\n      this._dirty = true;\n      delete this._storedMap[key];\n    }\n  }\n\n  isDirty() {\n    return this._dirty;\n  }\n\n  save() {\n    const dump = this._getDump();\n    const blobToStore = Buffer.concat(dump[0]);\n    const mapToStore = JSON.stringify(dump[1]);\n\n    try {\n      mkdirpSync(this._directory);\n      fs.writeFileSync(this._lockFilename, 'LOCK', {flag: 'wx'});\n    } catch (error) {\n      // Swallow the exception if we fail to acquire the lock.\n      return false;\n    }\n\n    try {\n      fs.writeFileSync(this._blobFilename, blobToStore);\n      fs.writeFileSync(this._mapFilename, mapToStore);\n    } finally {\n      fs.unlinkSync(this._lockFilename);\n    }\n\n    return true;\n  }\n\n  _load() {\n    try {\n      this._storedBlob = fs.readFileSync(this._blobFilename);\n      this._storedMap = JSON.parse(fs.readFileSync(this._mapFilename));\n    } catch (e) {\n      this._storedBlob = Buffer.alloc(0);\n      this._storedMap = {};\n    }\n    this._dirty = false;\n    this._memoryBlobs = {};\n    this._invalidationKeys = {};\n  }\n\n  _getDump() {\n    const buffers = [];\n    const newMap = {};\n    let offset = 0;\n\n    function push(key, invalidationKey, buffer) {\n      buffers.push(buffer);\n      newMap[key] = [invalidationKey, offset, offset + buffer.length];\n      offset += buffer.length;\n    }\n\n    for (const key of Object.keys(this._memoryBlobs)) {\n      const buffer = this._memoryBlobs[key];\n      const invalidationKey = this._invalidationKeys[key];\n      push(key, invalidationKey, buffer);\n    }\n\n    for (const key of Object.keys(this._storedMap)) {\n      if (hasOwnProperty.call(newMap, key)) continue;\n      const mapping = this._storedMap[key];\n      const buffer = this._storedBlob.slice(mapping[1], mapping[2]);\n      push(key, mapping[0], buffer);\n    }\n\n    return [buffers, newMap];\n  }\n}\n\n//------------------------------------------------------------------------------\n// NativeCompileCache\n//------------------------------------------------------------------------------\n\nclass NativeCompileCache {\n  constructor() {\n    this._cacheStore = null;\n    this._previousModuleCompile = null;\n  }\n\n  setCacheStore(cacheStore) {\n    this._cacheStore = cacheStore;\n  }\n\n  install() {\n    const self = this;\n    const hasRequireResolvePaths = typeof require.resolve.paths === 'function';\n    this._previousModuleCompile = Module.prototype._compile;\n    Module.prototype._compile = function(content, filename) {\n      const mod = this;\n\n      function require(id) {\n        return mod.require(id);\n      }\n\n      // https://github.com/nodejs/node/blob/v10.15.3/lib/internal/modules/cjs/helpers.js#L28\n      function resolve(request, options) {\n        return Module._resolveFilename(request, mod, false, options);\n      }\n      require.resolve = resolve;\n\n      // https://github.com/nodejs/node/blob/v10.15.3/lib/internal/modules/cjs/helpers.js#L37\n      // resolve.resolve.paths was added in v8.9.0\n      if (hasRequireResolvePaths) {\n        resolve.paths = function paths(request) {\n          return Module._resolveLookupPaths(request, mod, true);\n        };\n      }\n\n      require.main = process.mainModule;\n\n      // Enable support to add extra extension types\n      require.extensions = Module._extensions;\n      require.cache = Module._cache;\n\n      const dirname = path.dirname(filename);\n\n      const compiledWrapper = self._moduleCompile(filename, content);\n\n      // We skip the debugger setup because by the time we run, node has already\n      // done that itself.\n\n      // `Buffer` is included for Electron.\n      // See https://github.com/zertosh/v8-compile-cache/pull/10#issuecomment-518042543\n      const args = [mod.exports, require, mod, filename, dirname, process, global, Buffer];\n      return compiledWrapper.apply(mod.exports, args);\n    };\n  }\n\n  uninstall() {\n    Module.prototype._compile = this._previousModuleCompile;\n  }\n\n  _moduleCompile(filename, content) {\n    // https://github.com/nodejs/node/blob/v7.5.0/lib/module.js#L511\n\n    // Remove shebang\n    var contLen = content.length;\n    if (contLen >= 2) {\n      if (content.charCodeAt(0) === 35/*#*/ &&\n          content.charCodeAt(1) === 33/*!*/) {\n        if (contLen === 2) {\n          // Exact match\n          content = '';\n        } else {\n          // Find end of shebang line and slice it off\n          var i = 2;\n          for (; i < contLen; ++i) {\n            var code = content.charCodeAt(i);\n            if (code === 10/*\\n*/ || code === 13/*\\r*/) break;\n          }\n          if (i === contLen) {\n            content = '';\n          } else {\n            // Note that this actually includes the newline character(s) in the\n            // new output. This duplicates the behavior of the regular\n            // expression that was previously used to replace the shebang line\n            content = content.slice(i);\n          }\n        }\n      }\n    }\n\n    // create wrapper function\n    var wrapper = Module.wrap(content);\n\n    var invalidationKey = crypto\n      .createHash('sha1')\n      .update(content, 'utf8')\n      .digest('hex');\n\n    var buffer = this._cacheStore.get(filename, invalidationKey);\n\n    var script = new vm.Script(wrapper, {\n      filename: filename,\n      lineOffset: 0,\n      displayErrors: true,\n      cachedData: buffer,\n      produceCachedData: true,\n    });\n\n    if (script.cachedDataProduced) {\n      this._cacheStore.set(filename, invalidationKey, script.cachedData);\n    } else if (script.cachedDataRejected) {\n      this._cacheStore.delete(filename);\n    }\n\n    var compiledWrapper = script.runInThisContext({\n      filename: filename,\n      lineOffset: 0,\n      columnOffset: 0,\n      displayErrors: true,\n    });\n\n    return compiledWrapper;\n  }\n}\n\n//------------------------------------------------------------------------------\n// utilities\n//\n// https://github.com/substack/node-mkdirp/blob/f2003bb/index.js#L55-L98\n// https://github.com/zertosh/slash-escape/blob/e7ebb99/slash-escape.js\n//------------------------------------------------------------------------------\n\nfunction mkdirpSync(p_) {\n  _mkdirpSync(path.resolve(p_), 0o777);\n}\n\nfunction _mkdirpSync(p, mode) {\n  try {\n    fs.mkdirSync(p, mode);\n  } catch (err0) {\n    if (err0.code === 'ENOENT') {\n      _mkdirpSync(path.dirname(p));\n      _mkdirpSync(p);\n    } else {\n      try {\n        const stat = fs.statSync(p);\n        if (!stat.isDirectory()) { throw err0; }\n      } catch (err1) {\n        throw err0;\n      }\n    }\n  }\n}\n\nfunction slashEscape(str) {\n  const ESCAPE_LOOKUP = {\n    '\\\\': 'zB',\n    ':': 'zC',\n    '/': 'zS',\n    '\\x00': 'z0',\n    'z': 'zZ',\n  };\n  const ESCAPE_REGEX = /[\\\\:/\\x00z]/g; // eslint-disable-line no-control-regex\n  return str.replace(ESCAPE_REGEX, match => ESCAPE_LOOKUP[match]);\n}\n\nfunction supportsCachedData() {\n  const script = new vm.Script('\"\"', {produceCachedData: true});\n  // chakracore, as of v1.7.1.0, returns `false`.\n  return script.cachedDataProduced === true;\n}\n\nfunction getCacheDir() {\n  const v8_compile_cache_cache_dir = process.env.V8_COMPILE_CACHE_CACHE_DIR;\n  if (v8_compile_cache_cache_dir) {\n    return v8_compile_cache_cache_dir;\n  }\n\n  // Avoid cache ownership issues on POSIX systems.\n  const dirname = typeof process.getuid === 'function'\n    ? 'v8-compile-cache-' + process.getuid()\n    : 'v8-compile-cache';\n  const version = typeof process.versions.v8 === 'string'\n    ? process.versions.v8\n    : typeof process.versions.chakracore === 'string'\n      ? 'chakracore-' + process.versions.chakracore\n      : 'node-' + process.version;\n  const cacheDir = path.join(os.tmpdir(), dirname, version);\n  return cacheDir;\n}\n\nfunction getMainName() {\n  // `require.main.filename` is undefined or null when:\n  //    * node -e 'require(\"v8-compile-cache\")'\n  //    * node -r 'v8-compile-cache'\n  //    * Or, requiring from the REPL.\n  const mainName = require.main && typeof require.main.filename === 'string'\n    ? require.main.filename\n    : process.cwd();\n  return mainName;\n}\n\n//------------------------------------------------------------------------------\n// main\n//------------------------------------------------------------------------------\n\nif (!process.env.DISABLE_V8_COMPILE_CACHE && supportsCachedData()) {\n  const cacheDir = getCacheDir();\n  const prefix = getMainName();\n  const blobStore = new FileSystemBlobStore(cacheDir, prefix);\n\n  const nativeCompileCache = new NativeCompileCache();\n  nativeCompileCache.setCacheStore(blobStore);\n  nativeCompileCache.install();\n\n  process.once('exit', () => {\n    if (blobStore.isDirty()) {\n      blobStore.save();\n    }\n    nativeCompileCache.uninstall();\n  });\n}\n\nmodule.exports.__TEST__ = {\n  FileSystemBlobStore,\n  NativeCompileCache,\n  mkdirpSync,\n  slashEscape,\n  supportsCachedData,\n  getCacheDir,\n  getMainName,\n};\n/LICENSE\u00048The MIT License (MIT)\n\nCopyright (c) 2019 Andres Suarez\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n/README.md\bp# v8-compile-cache\n\n[![Build Status](https://travis-ci.org/zertosh/v8-compile-cache.svg?branch=master)](https://travis-ci.org/zertosh/v8-compile-cache)\n\n`v8-compile-cache` attaches a `require` hook to use [V8's code cache](https://v8project.blogspot.com/2015/07/code-caching.html) to speed up instantiation time. The \"code cache\" is the work of parsing and compiling done by V8.\n\nThe ability to tap into V8 to produce/consume this cache was introduced in [Node v5.7.0](https://nodejs.org/en/blog/release/v5.7.0/).\n\n## Usage\n\n1. Add the dependency:\n\n  ```sh\n  $ npm install --save v8-compile-cache\n  ```\n\n2. Then, in your entry module add:\n\n  ```js\n  require('v8-compile-cache');\n  ```\n\n**Requiring `v8-compile-cache` in Node <5.7.0 is a noop – but you need at least Node 4.0.0 to support the ES2015 syntax used by `v8-compile-cache`.**\n\n## Options\n\nSet the environment variable `DISABLE_V8_COMPILE_CACHE=1` to disable the cache.\n\nCache directory is defined by environment variable `V8_COMPILE_CACHE_CACHE_DIR` or defaults to `<os.tmpdir()>/v8-compile-cache-<V8_VERSION>`.\n\n## Internals\n\nCache files are suffixed `.BLOB` and `.MAP` corresponding to the entry module that required `v8-compile-cache`. The cache is _entry module specific_ because it is faster to load the entire code cache into memory at once, than it is to read it from disk on a file-by-file basis.\n\n## Benchmarks\n\nSee https://github.com/zertosh/v8-compile-cache/tree/master/bench.\n\n**Load Times:**\n\n| Module           | Without Cache | With Cache |\n| ---------------- | -------------:| ----------:|\n| `babel-core`     | `218ms`       | `185ms`    |\n| `yarn`           | `153ms`       | `113ms`    |\n| `yarn` (bundled) | `228ms`       | `105ms`    |\n\n_^ Includes the overhead of loading the cache itself._\n\n## Acknowledgements\n\n* `FileSystemBlobStore` and `NativeCompileCache` are based on Atom's implementation of their v8 compile cache: \n  - https://github.com/atom/atom/blob/b0d7a8a/src/file-system-blob-store.js\n  - https://github.com/atom/atom/blob/b0d7a8a/src/native-compile-cache.js\n* `mkdirpSync` is based on:\n  - https://github.com/substack/node-mkdirp/blob/f2003bb/index.js#L55-L98\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/dmFsdWUtb3ItcHJvbWlzZUAxLjAuMTE=",
    "content": "/build/main/index.js\u0003l\"use strict\";\r\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    o[k2] = m[k];\r\n}));\r\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\r\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n__exportStar(require(\"./ValueOrPromise\"), exports);\r\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsbURBQWlDIn0=/build/module/index.jsexport * from './ValueOrPromise';\r\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxrQkFBa0IsQ0FBQyJ9/build/module/index.d.ts#export * from './ValueOrPromise';\r\n/README.md\u0012\u0015# value-or-promise\r\n\r\nA thenable to streamline a possibly sync / possibly async workflow.\r\n\r\n# Installation\r\n\r\n`yarn add value-or-promise` or `npm install value-or-promise`\r\n\r\n# Basic Motivation\r\n\r\nInstead of writing:\r\n\r\n```js\r\nfunction myFunction() {\r\n    const valueOrPromise = getValueOrPromise();\r\n\r\n    if (isPromise(valueOrPromise)) {\r\n        return valueOrPromise.then(v => onValue(v));\r\n    }\r\n    \r\n    return onValue(valueOrPromise);\r\n}\r\n```\r\n\r\n...write:\r\n\r\n```js\r\nfunction myFunction() {\r\n    return new ValueOrPromise(getValueOrPromise)\r\n        .then(v => onValue(v))\r\n        .resolve();\r\n}\r\n```\r\n\r\nWhen working with functions that may or may not return promises, we usually have to duplicate handlers in both the synchronous and asynchronous code paths. In the most basic scenario included above, using `value-or-promise` already provides some code savings, i.e. we only have to reference `doSomethingWithValue` once.\r\n\r\n# More Chaining\r\n\r\nThings start to get even more beneficial when we add more sync-or-async functions to the chain.\r\n\r\nInstead of writing:\r\n\r\n```js\r\nfunction myFunction() {\r\n    const valueOrPromise = getValueOrPromise();\r\n\r\n    if (isPromise(valueOrPromise)) {\r\n        return valueOrPromise\r\n            .then(v => first(v))\r\n            .then(v => second(v));\r\n    }\r\n\r\n    const nextValueOrPromise = first(ValueOrPromise)\r\n\r\n    if (isPromise(nextValueOrPromise)) {\r\n        return nextValueOrPromise.then(v => second(v));\r\n    }\r\n    \r\n    return second(nextValueOrPromise);\r\n}\r\n```\r\n\r\n...write:\r\n\r\n```js\r\nfunction myFunction() {\r\n    return new ValueOrPromise(getValueOrPromise)\r\n        .then(v => first(v))\r\n        .then(v => second(v))\r\n        .resolve();\r\n}\r\n```\r\n\r\n# Error Handling\r\n\r\nEven with shorter chains, `value-or-promise` comes in handy when managing errors.\r\n\r\nInstead of writing:\r\n\r\n```js\r\nfunction myFunction() {\r\n    try {\r\n        const valueOrPromise = getValueOrPromise();\r\n\r\n        if (isPromise(valueOrPromise)) {\r\n            return valueOrPromise\r\n                .then(v => onValue(v))\r\n                .catch(error => console.log(error));\r\n        }\r\n    \r\n        const nextValueOrPromise = onValue(valueOrPromise);\r\n\r\n        if (isPromise(nextValueOrPromise)) {\r\n            return nextValueOrPromise\r\n                .catch(error => console.log(error));\r\n        }\r\n\r\n        return nextValueOrPromise;\r\n    } catch (error) {\r\n        console.log(error);\r\n    }\r\n}\r\n```\r\n\r\n...write:\r\n\r\n```js\r\nfunction myFunction() {\r\n    return new ValueOrPromise(getValueOrPromise)\r\n        .then(v => onValue(v))\r\n        .catch(error => console.log(error))\r\n        .resolve();\r\n}\r\n```\r\n\r\n# Alternatives\r\n\r\nA simpler way of streamlining the above is to always return a promise.\r\n\r\nInstead of writing:\r\n\r\n```js\r\nfunction myFunction() {\r\n    const valueOrPromise = getValueOrPromise();\r\n\r\n    if (isPromise(valueOrPromise)) {\r\n        return valueOrPromise.then(v => onValue(v));\r\n    }\r\n    \r\n    return onValue(valueOrPromise);\r\n}\r\n```\r\n\r\n...or writing:\r\n\r\n```js\r\nfunction myFunction() {\r\n    return new ValueOrPromise(getValueOrPromise)\r\n        .then(v => onValue(v))\r\n        .resolve();\r\n}\r\n```\r\n\r\n...we could write:\r\n\r\n```js\r\nfunction myFunction() {\r\n    return Promise.resolve(getValueOrPromise)\r\n        .then(v => onValue(v));\r\n}\r\n```\r\n\r\n...but then we would always have to return a promise! If we are trying to avoid the event loop when possible, this will not suffice.\r\n\r\n# `ValueOrPromise.all(...)?`\r\n\r\nWe can use `ValueOrPromise.all(...)` analogous to `Promise.all(...)` to create a new `ValueOrPromise` object that will either resolve to an array of values, if none of the passed `ValueOrPromise` objects contain underlying promises, or to a new promise, if one or more of the `ValueOrPromise` objects contain an underlying promise, where the new promise will resolve when all of the potential promises have resolved.\r\n\r\nFor example:\r\n\r\n```js\r\nfunction myFunction() {\r\n    const first = new ValueOrPromise(getFirst);\r\n    const second = new ValueOrPromise(getSecond);\r\n    return ValueOrPromise.all([first, second]).then(\r\n        all => onAll(all)\r\n    ).resolve();\r\n}\r\n```\r\n\r\n`myFunction` with return a value if and only if `getFirst` and `getSecond` both return values. If either returns a promise, `myFunction` will return a promise. If both `getFirst` and `getSecond` return promises, the new promise returned by `myFunction` will resolve only after both promises resolve, just like with `Promise.all`. \r\n\r\n# Inspiration\r\n\r\nThe `value-to-promise` concept is by [Ivan Goncharov](https://github.com/IvanGoncharov).\r\n\r\nImplementation errors are my own./build/main/ValueOrPromise.js\u0017\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.ValueOrPromise = void 0;\r\nfunction isPromiseLike(object) {\r\n    return (object != null && typeof object.then === 'function');\r\n}\r\nconst defaultOnRejectedFn = (reason) => {\r\n    throw reason;\r\n};\r\nclass ValueOrPromise {\r\n    constructor(executor) {\r\n        let value;\r\n        try {\r\n            value = executor();\r\n        }\r\n        catch (reason) {\r\n            this.state = { status: 'rejected', value: reason };\r\n            return;\r\n        }\r\n        if (isPromiseLike(value)) {\r\n            this.state = { status: 'pending', value };\r\n            return;\r\n        }\r\n        this.state = { status: 'fulfilled', value };\r\n    }\r\n    then(onFulfilled, onRejected) {\r\n        const state = this.state;\r\n        if (state.status === 'pending') {\r\n            return new ValueOrPromise(() => state.value.then(onFulfilled, onRejected));\r\n        }\r\n        const onRejectedFn = typeof onRejected === 'function' ? onRejected : defaultOnRejectedFn;\r\n        if (state.status === 'rejected') {\r\n            return new ValueOrPromise(() => onRejectedFn(state.value));\r\n        }\r\n        try {\r\n            const onFulfilledFn = typeof onFulfilled === 'function' ? onFulfilled : undefined;\r\n            return onFulfilledFn === undefined\r\n                ? new ValueOrPromise(() => state.value)\r\n                : new ValueOrPromise(() => onFulfilledFn(state.value));\r\n        }\r\n        catch (e) {\r\n            return new ValueOrPromise(() => onRejectedFn(e));\r\n        }\r\n    }\r\n    catch(onRejected) {\r\n        return this.then(undefined, onRejected);\r\n    }\r\n    resolve() {\r\n        const state = this.state;\r\n        if (state.status === 'pending') {\r\n            return Promise.resolve(state.value);\r\n        }\r\n        if (state.status === 'rejected') {\r\n            throw state.value;\r\n        }\r\n        return state.value;\r\n    }\r\n    static all(valueOrPromises) {\r\n        let containsPromise = false;\r\n        const values = [];\r\n        for (const valueOrPromise of valueOrPromises) {\r\n            const state = valueOrPromise.state;\r\n            if (state.status === 'rejected') {\r\n                return new ValueOrPromise(() => {\r\n                    throw state.value;\r\n                });\r\n            }\r\n            if (state.status === 'pending') {\r\n                containsPromise = true;\r\n            }\r\n            values.push(state.value);\r\n        }\r\n        if (containsPromise) {\r\n            return new ValueOrPromise(() => Promise.all(values));\r\n        }\r\n        return new ValueOrPromise(() => values);\r\n    }\r\n}\r\nexports.ValueOrPromise = ValueOrPromise;\r\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVmFsdWVPclByb21pc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvVmFsdWVPclByb21pc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsU0FBUyxhQUFhLENBQUksTUFBZTtJQUN2QyxPQUFPLENBQ0wsTUFBTSxJQUFJLElBQUksSUFBSSxPQUFRLE1BQXlCLENBQUMsSUFBSSxLQUFLLFVBQVUsQ0FDeEUsQ0FBQztBQUNKLENBQUM7QUFtQkQsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLE1BQWUsRUFBRSxFQUFFO0lBQzlDLE1BQU0sTUFBTSxDQUFDO0FBQ2YsQ0FBQyxDQUFDO0FBRUYsTUFBYSxjQUFjO0lBR3pCLFlBQVksUUFBa0M7UUFDNUMsSUFBSSxLQUF5QixDQUFDO1FBRTlCLElBQUk7WUFDRixLQUFLLEdBQUcsUUFBUSxFQUFFLENBQUM7U0FDcEI7UUFBQyxPQUFPLE1BQU0sRUFBRTtZQUNmLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQztZQUNuRCxPQUFPO1NBQ1I7UUFFRCxJQUFJLGFBQWEsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUN4QixJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQztZQUMxQyxPQUFPO1NBQ1I7UUFFRCxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsQ0FBQztJQUM5QyxDQUFDO0lBRU0sSUFBSSxDQUNULFdBR1EsRUFDUixVQUdRO1FBRVIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUV6QixJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFO1lBQzlCLE9BQU8sSUFBSSxjQUFjLENBQUMsR0FBRyxFQUFFLENBQzdCLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxD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/CHANGELOG.md\u0004# value-or-promise\r\n\r\n## 1.0.11\r\n\r\n### Patch Changes\r\n\r\n- 81274d4: fix(ValueOrPromise.all): sync code should error first\r\n\r\n## 1.0.10\r\n\r\n### Patch Changes\r\n\r\n- 7219d1c: fix(types): implementation signature should also be callable\r\n\r\n## 1.0.9\r\n\r\n### Patch Changes\r\n\r\n- ade3f7d: fix(types): do not make results nullable\r\n\r\n## 1.0.8\r\n\r\n### Patch Changes\r\n\r\n- 1b378e8: chore(docs): correct typo\r\n\r\n## 1.0.7\r\n\r\n### Patch Changes\r\n\r\n- 8366d7e: fix(resolve): always resolve to actual Promise\r\n\r\n  Even though ValueOrPromise objects can be initialized with anything PromiseLike, it is helpful to have them always resolve to either values or to actual promises.\r\n\r\n## 1.0.6\r\n\r\n### Patch Changes\r\n\r\n- a246304: fix(dependencies): no dependencies, please\r\n\r\n## 1.0.5\r\n\r\n### Patch Changes\r\n\r\n- 4652893: fix published api\r\n\r\n## 1.0.4\r\n\r\n### Patch Changes\r\n\r\n- a4eff20: add missing catch\r\n\r\n## 1.0.3\r\n\r\n### Patch Changes\r\n\r\n- 817088d: exclude spec files from build\r\n\r\n## 1.0.2\r\n\r\n### Patch Changes\r\n\r\n- e712ab8: add missing function ValueOrPromise.all\r\n\r\n## 1.0.1\r\n\r\n### Patch Changes\r\n\r\n- 4e5e5f8: add resolve method to resolve the ValueOrPromise to either a value or promise\r\n/build/main/ValueOrPromise.d.ts\fexport declare class ValueOrPromise<T> {\r\n    private readonly state;\r\n    constructor(executor: () => T | PromiseLike<T>);\r\n    then<TResult1 = T, TResult2 = never>(onFulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onRejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | undefined | null): ValueOrPromise<TResult1 | TResult2>;\r\n    catch<TResult = never>(onRejected: ((reason: unknown) => TResult | PromiseLike<TResult>) | undefined | null): ValueOrPromise<TResult>;\r\n    resolve(): T | Promise<T>;\r\n    static all<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(valueOrPromises: readonly [\r\n        ValueOrPromise<T1>,\r\n        ValueOrPromise<T2>,\r\n        ValueOrPromise<T3>,\r\n        ValueOrPromise<T4>,\r\n        ValueOrPromise<T5>,\r\n        ValueOrPromise<T6>,\r\n        ValueOrPromise<T7>,\r\n        ValueOrPromise<T8>,\r\n        ValueOrPromise<T9>,\r\n        ValueOrPromise<T10>\r\n    ]): ValueOrPromise<[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]>;\r\n    static all<T1, T2, T3, T4, T5, T6, T7, T8, T9>(valueOrPromises: readonly [\r\n        ValueOrPromise<T1>,\r\n        ValueOrPromise<T2>,\r\n        ValueOrPromise<T3>,\r\n        ValueOrPromise<T4>,\r\n        ValueOrPromise<T5>,\r\n        ValueOrPromise<T6>,\r\n        ValueOrPromise<T7>,\r\n        ValueOrPromise<T8>,\r\n        ValueOrPromise<T9>\r\n    ]): ValueOrPromise<[T1, T2, T3, T4, T5, T6, T7, T8, T9]>;\r\n    static all<T1, T2, T3, T4, T5, T6, T7, T8>(valueOrPromises: readonly [\r\n        ValueOrPromise<T1>,\r\n        ValueOrPromise<T2>,\r\n        ValueOrPromise<T3>,\r\n        ValueOrPromise<T4>,\r\n        ValueOrPromise<T5>,\r\n        ValueOrPromise<T6>,\r\n        ValueOrPromise<T7>,\r\n        ValueOrPromise<T8>\r\n    ]): ValueOrPromise<[T1, T2, T3, T4, T5, T6, T7, T8]>;\r\n    static all<T1, T2, T3, T4, T5, T6, T7>(valueOrPromises: readonly [\r\n        ValueOrPromise<T1>,\r\n        ValueOrPromise<T2>,\r\n        ValueOrPromise<T3>,\r\n        ValueOrPromise<T4>,\r\n        ValueOrPromise<T5>,\r\n        ValueOrPromise<T6>,\r\n        ValueOrPromise<T7>\r\n    ]): ValueOrPromise<[T1, T2, T3, T4, T5, T6, T7]>;\r\n    static all<T1, T2, T3, T4, T5, T6>(valueOrPromises: readonly [\r\n        ValueOrPromise<T1>,\r\n        ValueOrPromise<T2>,\r\n        ValueOrPromise<T3>,\r\n        ValueOrPromise<T4>,\r\n        ValueOrPromise<T5>,\r\n        ValueOrPromise<T6>\r\n    ]): ValueOrPromise<[T1, T2, T3, T4, T5, T6]>;\r\n    static all<T1, T2, T3, T4, T5>(valueOrPromises: readonly [\r\n        ValueOrPromise<T1>,\r\n        ValueOrPromise<T2>,\r\n        ValueOrPromise<T3>,\r\n        ValueOrPromise<T4>,\r\n        ValueOrPromise<T5>\r\n    ]): ValueOrPromise<[T1, T2, T3, T4, T5]>;\r\n    static all<T1, T2, T3, T4>(valueOrPromises: readonly [\r\n        ValueOrPromise<T1>,\r\n        ValueOrPromise<T2>,\r\n        ValueOrPromise<T3>,\r\n        ValueOrPromise<T4>\r\n    ]): ValueOrPromise<[T1, T2, T3, T4]>;\r\n    static all<T1, T2, T3>(valueOrPromises: readonly [\r\n        ValueOrPromise<T1>,\r\n        ValueOrPromise<T2>,\r\n        ValueOrPromise<T3>\r\n    ]): ValueOrPromise<[T1, T2, T3]>;\r\n    static all<T1, T2>(valueOrPromises: readonly [ValueOrPromise<T1>, ValueOrPromise<T2>]): ValueOrPromise<[T1, T2]>;\r\n    static all<T>(valueOrPromises: ReadonlyArray<ValueOrPromise<T>>): ValueOrPromise<Array<T>>;\r\n}\r\n/build/module/ValueOrPromise.js\u00176function isPromiseLike(object) {\r\n    return (object != null && typeof object.then === 'function');\r\n}\r\nconst defaultOnRejectedFn = (reason) => {\r\n    throw reason;\r\n};\r\nexport class ValueOrPromise {\r\n    constructor(executor) {\r\n        let value;\r\n        try {\r\n            value = executor();\r\n        }\r\n        catch (reason) {\r\n            this.state = { status: 'rejected', value: reason };\r\n            return;\r\n        }\r\n        if (isPromiseLike(value)) {\r\n            this.state = { status: 'pending', value };\r\n            return;\r\n        }\r\n        this.state = { status: 'fulfilled', value };\r\n    }\r\n    then(onFulfilled, onRejected) {\r\n        const state = this.state;\r\n        if (state.status === 'pending') {\r\n            return new ValueOrPromise(() => state.value.then(onFulfilled, onRejected));\r\n        }\r\n        const onRejectedFn = typeof onRejected === 'function' ? onRejected : defaultOnRejectedFn;\r\n        if (state.status === 'rejected') {\r\n            return new ValueOrPromise(() => onRejectedFn(state.value));\r\n        }\r\n        try {\r\n            const onFulfilledFn = typeof onFulfilled === 'function' ? onFulfilled : undefined;\r\n            return onFulfilledFn === undefined\r\n                ? new ValueOrPromise(() => state.value)\r\n                : new ValueOrPromise(() => onFulfilledFn(state.value));\r\n        }\r\n        catch (e) {\r\n            return new ValueOrPromise(() => onRejectedFn(e));\r\n        }\r\n    }\r\n    catch(onRejected) {\r\n        return this.then(undefined, onRejected);\r\n    }\r\n    resolve() {\r\n        const state = this.state;\r\n        if (state.status === 'pending') {\r\n            return Promise.resolve(state.value);\r\n        }\r\n        if (state.status === 'rejected') {\r\n            throw state.value;\r\n        }\r\n        return state.value;\r\n    }\r\n    static all(valueOrPromises) {\r\n        let containsPromise = false;\r\n        const values = [];\r\n        for (const valueOrPromise of valueOrPromises) {\r\n            const state = valueOrPromise.state;\r\n            if (state.status === 'rejected') {\r\n                return new ValueOrPromise(() => {\r\n                    throw state.value;\r\n                });\r\n            }\r\n            if (state.status === 'pending') {\r\n                containsPromise = true;\r\n            }\r\n            values.push(state.value);\r\n        }\r\n        if (containsPromise) {\r\n            return new ValueOrPromise(() => Promise.all(values));\r\n        }\r\n        return new ValueOrPromise(() => values);\r\n    }\r\n}\r\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVmFsdWVPclByb21pc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvVmFsdWVPclByb21pc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUyxhQUFhLENBQUksTUFBZTtJQUN2QyxPQUFPLENBQ0wsTUFBTSxJQUFJLElBQUksSUFBSSxPQUFRLE1BQXlCLENBQUMsSUFBSSxLQUFLLFVBQVUsQ0FDeEUsQ0FBQztBQUNKLENBQUM7QUFtQkQsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLE1BQWUsRUFBRSxFQUFFO0lBQzlDLE1BQU0sTUFBTSxDQUFDO0FBQ2YsQ0FBQyxDQUFDO0FBRUYsTUFBTSxPQUFPLGNBQWM7SUFHekIsWUFBWSxRQUFrQztRQUM1QyxJQUFJLEtBQXlCLENBQUM7UUFFOUIsSUFBSTtZQUNGLEtBQUssR0FBRyxRQUFRLEVBQUUsQ0FBQztTQUNwQjtRQUFDLE9BQU8sTUFBTSxFQUFFO1lBQ2YsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDO1lBQ25ELE9BQU87U0FDUjtRQUVELElBQUksYUFBYSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3hCLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDO1lBQzFDLE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxDQUFDO0lBQzlDLENBQUM7SUFFTSxJQUFJLENBQ1QsV0FHUSxFQUNSLFVBR1E7UUFFUixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBRXpCLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxTQUFTLEVBQUU7WUFDOUIsT0FBTyxJQUFJLGNBQWMsQ0FBQyxHQUFHLEVBQUUsQ0FDN0IsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJ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!/build/module/ValueOrPromise.d.ts\fexport declare class ValueOrPromise<T> {\r\n    private readonly state;\r\n    constructor(executor: () => T | PromiseLike<T>);\r\n    then<TResult1 = T, TResult2 = never>(onFulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onRejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | undefined | null): ValueOrPromise<TResult1 | TResult2>;\r\n    catch<TResult = never>(onRejected: ((reason: unknown) => TResult | PromiseLike<TResult>) | undefined | null): ValueOrPromise<TResult>;\r\n    resolve(): T | Promise<T>;\r\n    static all<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(valueOrPromises: readonly [\r\n        ValueOrPromise<T1>,\r\n        ValueOrPromise<T2>,\r\n        ValueOrPromise<T3>,\r\n        ValueOrPromise<T4>,\r\n        ValueOrPromise<T5>,\r\n        ValueOrPromise<T6>,\r\n        ValueOrPromise<T7>,\r\n        ValueOrPromise<T8>,\r\n        ValueOrPromise<T9>,\r\n        ValueOrPromise<T10>\r\n    ]): ValueOrPromise<[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]>;\r\n    static all<T1, T2, T3, T4, T5, T6, T7, T8, T9>(valueOrPromises: readonly [\r\n        ValueOrPromise<T1>,\r\n        ValueOrPromise<T2>,\r\n        ValueOrPromise<T3>,\r\n        ValueOrPromise<T4>,\r\n        ValueOrPromise<T5>,\r\n        ValueOrPromise<T6>,\r\n        ValueOrPromise<T7>,\r\n        ValueOrPromise<T8>,\r\n        ValueOrPromise<T9>\r\n    ]): ValueOrPromise<[T1, T2, T3, T4, T5, T6, T7, T8, T9]>;\r\n    static all<T1, T2, T3, T4, T5, T6, T7, T8>(valueOrPromises: readonly [\r\n        ValueOrPromise<T1>,\r\n        ValueOrPromise<T2>,\r\n        ValueOrPromise<T3>,\r\n        ValueOrPromise<T4>,\r\n        ValueOrPromise<T5>,\r\n        ValueOrPromise<T6>,\r\n        ValueOrPromise<T7>,\r\n        ValueOrPromise<T8>\r\n    ]): ValueOrPromise<[T1, T2, T3, T4, T5, T6, T7, T8]>;\r\n    static all<T1, T2, T3, T4, T5, T6, T7>(valueOrPromises: readonly [\r\n        ValueOrPromise<T1>,\r\n        ValueOrPromise<T2>,\r\n        ValueOrPromise<T3>,\r\n        ValueOrPromise<T4>,\r\n        ValueOrPromise<T5>,\r\n        ValueOrPromise<T6>,\r\n        ValueOrPromise<T7>\r\n    ]): ValueOrPromise<[T1, T2, T3, T4, T5, T6, T7]>;\r\n    static all<T1, T2, T3, T4, T5, T6>(valueOrPromises: readonly [\r\n        ValueOrPromise<T1>,\r\n        ValueOrPromise<T2>,\r\n        ValueOrPromise<T3>,\r\n        ValueOrPromise<T4>,\r\n        ValueOrPromise<T5>,\r\n        ValueOrPromise<T6>\r\n    ]): ValueOrPromise<[T1, T2, T3, T4, T5, T6]>;\r\n    static all<T1, T2, T3, T4, T5>(valueOrPromises: readonly [\r\n        ValueOrPromise<T1>,\r\n        ValueOrPromise<T2>,\r\n        ValueOrPromise<T3>,\r\n        ValueOrPromise<T4>,\r\n        ValueOrPromise<T5>\r\n    ]): ValueOrPromise<[T1, T2, T3, T4, T5]>;\r\n    static all<T1, T2, T3, T4>(valueOrPromises: readonly [\r\n        ValueOrPromise<T1>,\r\n        ValueOrPromise<T2>,\r\n        ValueOrPromise<T3>,\r\n        ValueOrPromise<T4>\r\n    ]): ValueOrPromise<[T1, T2, T3, T4]>;\r\n    static all<T1, T2, T3>(valueOrPromises: readonly [\r\n        ValueOrPromise<T1>,\r\n        ValueOrPromise<T2>,\r\n        ValueOrPromise<T3>\r\n    ]): ValueOrPromise<[T1, T2, T3]>;\r\n    static all<T1, T2>(valueOrPromises: readonly [ValueOrPromise<T1>, ValueOrPromise<T2>]): ValueOrPromise<[T1, T2]>;\r\n    static all<T>(valueOrPromises: ReadonlyArray<ValueOrPromise<T>>): ValueOrPromise<Array<T>>;\r\n}\r\n/build/main/index.d.ts#export * from './ValueOrPromise';\r\n/package.json\u0007\u0016{\n  \"name\": \"value-or-promise\",\n  \"version\": \"1.0.11\",\n  \"description\": \"A thenable to streamline a possibly sync / possibly async workflow.\",\n  \"main\": \"build/main/index.js\",\n  \"typings\": \"build/main/index.d.ts\",\n  \"module\": \"build/module/index.js\",\n  \"repository\": \"https://github.com/yaacovCR/value-or-promise\",\n  \"license\": \"MIT\",\n  \"keywords\": [],\n  \"scripts\": {\n    \"build\": \"run-p build:*\",\n    \"build:main\": \"tsc -p tsconfig.json\",\n    \"build:module\": \"tsc -p tsconfig.module.json\",\n    \"fix\": \"run-s fix:*\",\n    \"fix:prettier\": \"prettier \\\"src/**/*.ts\\\" --write\",\n    \"fix:lint\": \"eslint src --ext .ts --fix\",\n    \"test\": \"run-s build test:*\",\n    \"test:lint\": \"eslint src --ext .ts\",\n    \"test:prettier\": \"prettier \\\"src/**/*.ts\\\" --list-different\",\n    \"test:mocha\": \"mocha --require ts-node/register \\\"src/**/*.spec.ts\\\"\",\n    \"watch:build\": \"tsc -p tsconfig.json -w\",\n    \"watch:test\": \"mocha --require ts-node/register --watch --watch-extensions ts --watch-files src \\\"src/**/*.spec.ts\\\" \"\n  },\n  \"engines\": {\n    \"node\": \">=12\"\n  },\n  \"devDependencies\": {\n    \"@changesets/cli\": \"^2.16.0\",\n    \"@types/mocha\": \"^8.2.2\",\n    \"@types/node\": \"^15.0.1\",\n    \"@typescript-eslint/eslint-plugin\": \"^4.22.0\",\n    \"@typescript-eslint/parser\": \"^4.22.0\",\n    \"eslint\": \"^7.25.0\",\n    \"eslint-config-prettier\": \"^8.3.0\",\n    \"eslint-plugin-eslint-comments\": \"^3.2.0\",\n    \"eslint-plugin-functional\": \"^3.2.1\",\n    \"eslint-plugin-import\": \"^2.22.1\",\n    \"expect\": \"^26.6.2\",\n    \"mocha\": \"^8.3.2\",\n    \"npm-run-all\": \"^4.1.5\",\n    \"prettier\": \"^2.2.1\",\n    \"ts-node\": \"^9.1.1\",\n    \"typescript\": \"^4.2.4\"\n  },\n  \"files\": [\n    \"build/main/**/*\",\n    \"build/module/**/*\",\n    \"!**/*.spec.*\",\n    \"!**/*.json\",\n    \"CHANGELOG.md\",\n    \"LICENSE\",\n    \"README.md\"\n  ],\n  \"prettier\": {\n    \"singleQuote\": true\n  }\n}\n/LICENSE\u0004GMIT License\r\n\r\nCopyright (c) 2019 Yaacov Rydzinski \r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/dmFyeUAxLjEuMg==",
    "content": "/LICENSE\u0004F(The MIT License)\n\nCopyright (c) 2014-2017 Douglas Christopher Wilson\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n/README.md\n# vary\n\n[![NPM Version][npm-image]][npm-url]\n[![NPM Downloads][downloads-image]][downloads-url]\n[![Node.js Version][node-version-image]][node-version-url]\n[![Build Status][travis-image]][travis-url]\n[![Test Coverage][coveralls-image]][coveralls-url]\n\nManipulate the HTTP Vary header\n\n## Installation\n\nThis is a [Node.js](https://nodejs.org/en/) module available through the\n[npm registry](https://www.npmjs.com/). Installation is done using the\n[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally): \n\n```sh\n$ npm install vary\n```\n\n## API\n\n<!-- eslint-disable no-unused-vars -->\n\n```js\nvar vary = require('vary')\n```\n\n### vary(res, field)\n\nAdds the given header `field` to the `Vary` response header of `res`.\nThis can be a string of a single field, a string of a valid `Vary`\nheader, or an array of multiple fields.\n\nThis will append the header if not already listed, otherwise leaves\nit listed in the current location.\n\n<!-- eslint-disable no-undef -->\n\n```js\n// Append \"Origin\" to the Vary header of the response\nvary(res, 'Origin')\n```\n\n### vary.append(header, field)\n\nAdds the given header `field` to the `Vary` response header string `header`.\nThis can be a string of a single field, a string of a valid `Vary` header,\nor an array of multiple fields.\n\nThis will append the header if not already listed, otherwise leaves\nit listed in the current location. The new header string is returned.\n\n<!-- eslint-disable no-undef -->\n\n```js\n// Get header string appending \"Origin\" to \"Accept, User-Agent\"\nvary.append('Accept, User-Agent', 'Origin')\n```\n\n## Examples\n\n### Updating the Vary header when content is based on it\n\n```js\nvar http = require('http')\nvar vary = require('vary')\n\nhttp.createServer(function onRequest (req, res) {\n  // about to user-agent sniff\n  vary(res, 'User-Agent')\n\n  var ua = req.headers['user-agent'] || ''\n  var isMobile = /mobi|android|touch|mini/i.test(ua)\n\n  // serve site, depending on isMobile\n  res.setHeader('Content-Type', 'text/html')\n  res.end('You are (probably) ' + (isMobile ? '' : 'not ') + 'a mobile user')\n})\n```\n\n## Testing\n\n```sh\n$ npm test\n```\n\n## License\n\n[MIT](LICENSE)\n\n[npm-image]: https://img.shields.io/npm/v/vary.svg\n[npm-url]: https://npmjs.org/package/vary\n[node-version-image]: https://img.shields.io/node/v/vary.svg\n[node-version-url]: https://nodejs.org/en/download\n[travis-image]: https://img.shields.io/travis/jshttp/vary/master.svg\n[travis-url]: https://travis-ci.org/jshttp/vary\n[coveralls-image]: https://img.shields.io/coveralls/jshttp/vary/master.svg\n[coveralls-url]: https://coveralls.io/r/jshttp/vary\n[downloads-image]: https://img.shields.io/npm/dm/vary.svg\n[downloads-url]: https://npmjs.org/package/vary\n/index.js\u000br/*!\n * vary\n * Copyright(c) 2014-2017 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n */\n\nmodule.exports = vary\nmodule.exports.append = append\n\n/**\n * RegExp to match field-name in RFC 7230 sec 3.2\n *\n * field-name    = token\n * token         = 1*tchar\n * tchar         = \"!\" / \"#\" / \"$\" / \"%\" / \"&\" / \"'\" / \"*\"\n *               / \"+\" / \"-\" / \".\" / \"^\" / \"_\" / \"`\" / \"|\" / \"~\"\n *               / DIGIT / ALPHA\n *               ; any VCHAR, except delimiters\n */\n\nvar FIELD_NAME_REGEXP = /^[!#$%&'*+\\-.^_`|~0-9A-Za-z]+$/\n\n/**\n * Append a field to a vary header.\n *\n * @param {String} header\n * @param {String|Array} field\n * @return {String}\n * @public\n */\n\nfunction append (header, field) {\n  if (typeof header !== 'string') {\n    throw new TypeError('header argument is required')\n  }\n\n  if (!field) {\n    throw new TypeError('field argument is required')\n  }\n\n  // get fields array\n  var fields = !Array.isArray(field)\n    ? parse(String(field))\n    : field\n\n  // assert on invalid field names\n  for (var j = 0; j < fields.length; j++) {\n    if (!FIELD_NAME_REGEXP.test(fields[j])) {\n      throw new TypeError('field argument contains an invalid header name')\n    }\n  }\n\n  // existing, unspecified vary\n  if (header === '*') {\n    return header\n  }\n\n  // enumerate current values\n  var val = header\n  var vals = parse(header.toLowerCase())\n\n  // unspecified vary\n  if (fields.indexOf('*') !== -1 || vals.indexOf('*') !== -1) {\n    return '*'\n  }\n\n  for (var i = 0; i < fields.length; i++) {\n    var fld = fields[i].toLowerCase()\n\n    // append value (case-preserving)\n    if (vals.indexOf(fld) === -1) {\n      vals.push(fld)\n      val = val\n        ? val + ', ' + fields[i]\n        : fields[i]\n    }\n  }\n\n  return val\n}\n\n/**\n * Parse a vary header into an array.\n *\n * @param {String} header\n * @return {Array}\n * @private\n */\n\nfunction parse (header) {\n  var end = 0\n  var list = []\n  var start = 0\n\n  // gather tokens\n  for (var i = 0, len = header.length; i < len; i++) {\n    switch (header.charCodeAt(i)) {\n      case 0x20: /*   */\n        if (start === end) {\n          start = end = i + 1\n        }\n        break\n      case 0x2c: /* , */\n        list.push(header.substring(start, end))\n        start = end = i + 1\n        break\n      default:\n        end = i + 1\n        break\n    }\n  }\n\n  // final token\n  list.push(header.substring(start, end))\n\n  return list\n}\n\n/**\n * Mark that a request is varied on a header field.\n *\n * @param {Object} res\n * @param {String|Array} field\n * @public\n */\n\nfunction vary (res, field) {\n  if (!res || !res.getHeader || !res.setHeader) {\n    // quack quack\n    throw new TypeError('res argument is required')\n  }\n\n  // get existing header\n  var val = res.getHeader('Vary') || ''\n  var header = Array.isArray(val)\n    ? val.join(', ')\n    : String(val)\n\n  // set new header\n  if ((val = append(header, field))) {\n    res.setHeader('Vary', val)\n  }\n}\n/HISTORY.md\u0003\u00181.1.2 / 2017-09-23\n==================\n\n  * perf: improve header token parsing speed\n\n1.1.1 / 2017-03-20\n==================\n\n  * perf: hoist regular expression\n\n1.1.0 / 2015-09-29\n==================\n\n  * Only accept valid field names in the `field` argument\n    - Ensures the resulting string is a valid HTTP header value\n\n1.0.1 / 2015-07-08\n==================\n\n  * Fix setting empty header from empty `field`\n  * perf: enable strict mode\n  * perf: remove argument reassignments\n\n1.0.0 / 2014-08-10\n==================\n\n  * Accept valid `Vary` header string as `field`\n  * Add `vary.append` for low-level string manipulation\n  * Move to `jshttp` orgainzation\n\n0.1.0 / 2014-06-05\n==================\n\n  * Support array of fields to set\n\n0.0.0 / 2014-06-04\n==================\n\n  * Initial release\n/package.json\u0004{\n  \"name\": \"vary\",\n  \"description\": \"Manipulate the HTTP Vary header\",\n  \"version\": \"1.1.2\",\n  \"author\": \"Douglas Christopher Wilson <doug@somethingdoug.com>\",\n  \"license\": \"MIT\",\n  \"keywords\": [\n    \"http\",\n    \"res\",\n    \"vary\"\n  ],\n  \"repository\": \"jshttp/vary\",\n  \"devDependencies\": {\n    \"beautify-benchmark\": \"0.2.4\",\n    \"benchmark\": \"2.1.4\",\n    \"eslint\": \"3.19.0\",\n    \"eslint-config-standard\": \"10.2.1\",\n    \"eslint-plugin-import\": \"2.7.0\",\n    \"eslint-plugin-markdown\": \"1.0.0-beta.6\",\n    \"eslint-plugin-node\": \"5.1.1\",\n    \"eslint-plugin-promise\": \"3.5.0\",\n    \"eslint-plugin-standard\": \"3.0.1\",\n    \"istanbul\": \"0.4.5\",\n    \"mocha\": \"2.5.3\",\n    \"supertest\": \"1.1.0\"\n  },\n  \"files\": [\n    \"HISTORY.md\",\n    \"LICENSE\",\n    \"README.md\",\n    \"index.js\"\n  ],\n  \"engines\": {\n    \"node\": \">= 0.8\"\n  },\n  \"scripts\": {\n    \"bench\": \"node benchmark/index.js\",\n    \"lint\": \"eslint --plugin markdown --ext js,md .\",\n    \"test\": \"mocha --reporter spec --bail --check-leaks test/\",\n    \"test-cov\": \"istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/\",\n    \"test-travis\": \"istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/\"\n  }\n}\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/dml0ZWZ1QDAuMi40",
    "content": "/src/index.js%import fs from 'node:fs/promises'\nimport fsSync from 'node:fs'\nimport path from 'node:path'\nimport {\n  isDepIncluded,\n  isDepExcluded,\n  isDepNoExternaled,\n  isDepExternaled\n} from './sync.cjs'\n\n/** @type {import('pnpapi')} */\nlet pnp\nif (process.versions.pnp) {\n  try {\n    const { createRequire } = (await import('module')).default\n    pnp = createRequire(import.meta.url)('pnpapi')\n  } catch {}\n}\n\nexport { isDepIncluded, isDepExcluded, isDepNoExternaled, isDepExternaled }\n\n/** @type {import('..').crawlFrameworkPkgs} */\nexport async function crawlFrameworkPkgs(options) {\n  const pkgJsonPath = await findClosestPkgJsonPath(options.root)\n  if (!pkgJsonPath) {\n    // @ts-expect-error don't throw in deno as package.json is not required\n    if (typeof Deno !== 'undefined') {\n      return {\n        optimizeDeps: { include: [], exclude: [] },\n        ssr: { noExternal: [], external: [] }\n      }\n    } else {\n      throw new Error(`Cannot find package.json from ${options.root}`)\n    }\n  }\n  const pkgJson = await readJson(pkgJsonPath).catch((e) => {\n    throw new Error(`Unable to read ${pkgJsonPath}`, { cause: e })\n  })\n\n  /** @type {string[]} */\n  let optimizeDepsInclude = []\n  /** @type {string[]} */\n  let optimizeDepsExclude = []\n  /** @type {string[]} */\n  let ssrNoExternal = []\n  /** @type {string[]} */\n  let ssrExternal = []\n\n  await crawl(pkgJsonPath, pkgJson)\n\n  // respect vite user config\n  if (options.viteUserConfig) {\n    // remove includes that are explicitly excluded in optimizeDeps\n    const _optimizeDepsExclude = options.viteUserConfig?.optimizeDeps?.exclude\n    if (_optimizeDepsExclude) {\n      optimizeDepsInclude = optimizeDepsInclude.filter(\n        (dep) => !isDepExcluded(dep, _optimizeDepsExclude)\n      )\n    }\n    // remove excludes that are explicitly included in optimizeDeps\n    const _optimizeDepsInclude = options.viteUserConfig?.optimizeDeps?.include\n    if (_optimizeDepsInclude) {\n      optimizeDepsExclude = optimizeDepsExclude.filter(\n        (dep) => !isDepIncluded(dep, _optimizeDepsInclude)\n      )\n    }\n    // remove noExternals that are explicitly externalized\n    const _ssrExternal = options.viteUserConfig?.ssr?.external\n    if (_ssrExternal) {\n      ssrNoExternal = ssrNoExternal.filter(\n        (dep) => !isDepExternaled(dep, _ssrExternal)\n      )\n    }\n    // remove externals that are explicitly noExternal\n    const _ssrNoExternal = options.viteUserConfig?.ssr?.noExternal\n    if (_ssrNoExternal) {\n      ssrExternal = ssrExternal.filter(\n        (dep) => !isDepNoExternaled(dep, _ssrNoExternal)\n      )\n    }\n  }\n\n  return {\n    optimizeDeps: {\n      include: optimizeDepsInclude,\n      exclude: optimizeDepsExclude\n    },\n    ssr: {\n      noExternal: ssrNoExternal,\n      external: ssrExternal\n    }\n  }\n\n  /**\n   * crawl the package.json dependencies for framework packages. rules:\n   * 1. a framework package should be `optimizeDeps.exclude` and `ssr.noExternal`.\n   * 2. the deps of the framework package should be `optimizeDeps.include` and `ssr.external`\n   *    unless the dep is also a framework package, in which case do no1 & no2 recursively.\n   * 3. any non-framework packages that aren't imported by a framework package can be skipped entirely.\n   * 4. a semi-framework package is like a framework package, except it isn't `optimizeDeps.exclude`,\n   *    but only applies `ssr.noExternal`.\n   * @param {string} pkgJsonPath\n   * @param {Record<string, any>} pkgJson\n   * @param {string[]} [parentDepNames]\n   */\n  async function crawl(pkgJsonPath, pkgJson, parentDepNames = []) {\n    const isRoot = parentDepNames.length === 0\n\n    /** @type {string[]} */\n    let deps = [\n      ...Object.keys(pkgJson.dependencies || {}),\n      ...(isRoot ? Object.keys(pkgJson.devDependencies || {}) : [])\n    ]\n\n    deps = deps.filter((dep) => {\n      // skip circular deps\n      if (parentDepNames.includes(dep)) {\n        return false\n      }\n\n      const isFrameworkPkg = options.isFrameworkPkgByName?.(dep)\n      const isSemiFrameworkPkg = options.isSemiFrameworkPkgByName?.(dep)\n      if (isFrameworkPkg) {\n        // framework packages should be excluded from optimization as esbuild can't handle them.\n        // otherwise it'll cause https://github.com/vitejs/vite/issues/3910\n        optimizeDepsExclude.push(dep)\n        // framework packages should be noExternal so that they go through vite's transformation\n        // pipeline, since nodejs can't support them.\n        ssrNoExternal.push(dep)\n      } else if (isSemiFrameworkPkg) {\n        // semi-framework packages should do the same except for optimization exclude as they\n        // aren't needed to work (they don't contain raw framework components)\n        ssrNoExternal.push(dep)\n      }\n\n      // only those that are explictly false can skip crawling since we don't need to do anything\n      // special for them\n      if (isFrameworkPkg === false || isSemiFrameworkPkg === false) {\n        return false\n      }\n      // if `true`, we need to crawl the nested deps to deep include and ssr externalize them in dev.\n      // if `undefined`, it's the same as \"i don't know\". we need to crawl and find the package.json\n      // to find out.\n      else {\n        return true\n      }\n    })\n\n    const promises = deps.map(async (dep) => {\n      const depPkgJsonPath = await findDepPkgJsonPath(dep, pkgJsonPath)\n      if (!depPkgJsonPath) return\n      const depPkgJson = await readJson(depPkgJsonPath).catch(() => {})\n      if (!depPkgJson) return\n\n      // fast path if this dep is already a framework dep based on the filter condition above\n      const cachedIsFrameworkPkg = ssrNoExternal.includes(dep)\n      if (cachedIsFrameworkPkg) {\n        return crawl(depPkgJsonPath, depPkgJson, parentDepNames.concat(dep))\n      }\n\n      // check if this dep is a framework dep, if so, track and crawl it\n      const isFrameworkPkg = options.isFrameworkPkgByJson?.(depPkgJson)\n      const isSemiFrameworkPkg = options.isSemiFrameworkPkgByJson?.(depPkgJson)\n      if (isFrameworkPkg || isSemiFrameworkPkg) {\n        // see explanation in filter condition above\n        if (isFrameworkPkg) {\n          optimizeDepsExclude.push(dep)\n          ssrNoExternal.push(dep)\n        } else if (isSemiFrameworkPkg) {\n          ssrNoExternal.push(dep)\n        }\n        return crawl(depPkgJsonPath, depPkgJson, parentDepNames.concat(dep))\n      }\n\n      // if we're crawling in a non-root state, the parent is 100% a framework package\n      // because of the above if block. in this case, if it's dep of a non-framework\n      // package, handle special cases for them.\n      if (!isRoot) {\n        // deep include it if it's a CJS package, so it becomes ESM and vite is happy.\n        if (await pkgNeedsOptimization(depPkgJson, depPkgJsonPath)) {\n          optimizeDepsInclude.push(parentDepNames.concat(dep).join(' > '))\n        }\n        // also externalize it in dev so it doesn't trip vite's SSR transformation.\n        // we do in dev only as build cannot access deep external packages in strict\n        // dependency installations, such as pnpm.\n        if (!options.isBuild && !ssrExternal.includes(dep)) {\n          ssrExternal.push(dep)\n        }\n      }\n    })\n\n    await Promise.all(promises)\n  }\n}\n\n/** @type {import('..').findDepPkgJsonPath} */\nexport async function findDepPkgJsonPath(dep, parent) {\n  if (pnp) {\n    const depRoot = pnp.resolveToUnqualified(dep, parent)\n    if (!depRoot) return undefined\n    return path.join(depRoot, 'package.json')\n  }\n\n  let root = await findClosestPkgJsonPath(parent)\n  if (!root) return undefined\n  root = path.dirname(root)\n  while (root) {\n    const pkg = path.join(root, 'node_modules', dep, 'package.json')\n    try {\n      await fs.access(pkg)\n      // use 'node:fs' version to match 'vite:resolve' and avoid realpath.native quirk\n      // https://github.com/sveltejs/vite-plugin-svelte/issues/525#issuecomment-1355551264\n      return fsSync.realpathSync(pkg)\n    } catch {}\n    const nextRoot = path.dirname(root)\n    if (nextRoot === root) break\n    root = nextRoot\n  }\n  return undefined\n}\n\n/** @type {import('..').findClosestPkgJsonPath} */\nexport async function findClosestPkgJsonPath(dir, predicate = undefined) {\n  if (dir.endsWith('package.json')) {\n    dir = path.dirname(dir)\n  }\n  while (dir) {\n    const pkg = path.join(dir, 'package.json')\n    try {\n      const stat = await fs.stat(pkg)\n      if (stat.isFile() && (!predicate || (await predicate(pkg)))) {\n        return pkg\n      }\n    } catch {}\n    const nextDir = path.dirname(dir)\n    if (nextDir === dir) break\n    dir = nextDir\n  }\n  return undefined\n}\n\n/** @type {import('..').pkgNeedsOptimization} */\nexport async function pkgNeedsOptimization(pkgJson, pkgJsonPath) {\n  // only optimize if is cjs, using the below as heuristic\n  // see https://github.com/sveltejs/vite-plugin-svelte/issues/162\n  if (pkgJson.module || pkgJson.exports) return false\n  // if have main, ensure entry is js so vite can prebundle it\n  // see https://github.com/sveltejs/vite-plugin-svelte/issues/233\n  if (pkgJson.main) {\n    const entryExt = path.extname(pkgJson.main)\n    return !entryExt || entryExt === '.js' || entryExt === '.cjs'\n  }\n  // check if has implicit index.js entrypoint to prebundle\n  // see https://github.com/sveltejs/vite-plugin-svelte/issues/281\n  // see https://github.com/solidjs/vite-plugin-solid/issues/70#issuecomment-1306488154\n  try {\n    await fs.access(path.join(path.dirname(pkgJsonPath), 'index.js'))\n    return true\n  } catch {\n    return false\n  }\n}\n\n/**\n * @param {string} findDepPkgJsonPath\n * @returns {Promise<Record<string, any>>}\n */\nasync function readJson(findDepPkgJsonPath) {\n  return JSON.parse(await fs.readFile(findDepPkgJsonPath, 'utf8'))\n}\n/index.d.ts\u0015import type { DepOptimizationOptions, SSROptions, UserConfig } from 'vite'\n\nexport interface CrawlFrameworkPkgsOptions {\n  /**\n   * Path to the root of the project that contains the `package.json`\n   */\n  root: string\n  /**\n   * Whether we're currently in a Vite build\n   */\n  isBuild: boolean\n  /**\n   * Optional. If a Vite user config is passed, the output Vite config will respect the\n   * set `optimizeDeps` and `ssr` options so it doesn't override it\n   */\n  viteUserConfig?: UserConfig\n  /**\n   * Whether this is a framework package by checking it's `package.json`.\n   * A framework package is one that exports special files that can't be processed\n   * by esbuild natively. For example, exporting `.framework` files.\n   *\n   * @example\n   * ```ts\n   * return pkgJson.keywords?.includes('my-framework')\n   * ```\n   */\n  isFrameworkPkgByJson?: (pkgJson: Record<string, any>) => boolean\n  /**\n   * Whether this is a framework package by checking it's name. This is\n   * usually used as a fast path. Return `true` or `false` if you know 100%\n   * if it's a framework package or not. Return `undefined` to fallback to\n   * `isFrameworkPkgByJson`.\n   *\n   * @example\n   * ```ts\n   * return SPECIAL_PACKAGES.includes(pkgName) || undefined\n   * ```\n   */\n  isFrameworkPkgByName?: (pkgName: string) => boolean | undefined\n  /**\n   * Whether this is a semi-framework package by checking it's `package.json`.\n   * A semi-framework package is one that **doesn't** export special files but\n   * consumes other APIs of the framework. For example, it only does\n   * `import { debounce } from 'my-framework/utils'`.\n   *\n   * @example\n   * ```ts\n   * return Object.keys(pkgJson.dependencies || {}).includes('my-framework')\n   * ```\n   */\n  isSemiFrameworkPkgByJson?: (pkgJson: Record<string, any>) => boolean\n  /**\n   * Whether this is a semi-framework package by checking it's name. This is\n   * usually used as a fast path. Return `true` or `false` if you know 100%\n   * if it's a semi-framework package or not. Return `undefined` to fallback to\n   * `isSemiFrameworkPkgByJson`.\n   *\n   * @example\n   * ```ts\n   * return SPECIAL_SEMI_PACKAGES.includes(pkgName) || undefined\n   * ```\n   */\n  isSemiFrameworkPkgByName?: (pkgName: string) => boolean | undefined\n}\n\nexport interface CrawlFrameworkPkgsResult {\n  optimizeDeps: {\n    include: string[]\n    exclude: string[]\n  }\n  ssr: {\n    noExternal: string[]\n    external: string[]\n  }\n}\n\n/**\n * Crawls for framework packages starting from `<root>/package.json` to build\n * out a partial Vite config. See the source code for details of how this is built.\n */\nexport declare function crawlFrameworkPkgs(\n  options: CrawlFrameworkPkgsOptions\n): Promise<CrawlFrameworkPkgsResult>\n\n/**\n * Find the `package.json` of a dep, starting from the parent, e.g. `process.cwd()`.\n * A simplified implementation of https://nodejs.org/api/esm.html#resolver-algorithm-specification\n * (PACKAGE_RESOLVE) for `package.json` specifically.\n */\nexport declare function findDepPkgJsonPath(\n  dep: string,\n  parent: string\n): Promise<string | undefined>\n\n/**\n * Find the closest `package.json` path by walking `dir` upwards.\n *\n * Pass a function to `predicate` to check if the current `package.json` is the\n * one you're looking for. For example, finding `package.json` that has the\n * `name` field only. Throwing inside the `predicate` is safe and acts the same\n *  as returning false.\n */\nexport declare function findClosestPkgJsonPath(\n  dir: string,\n  predicate?: (pkgJsonPath: string) => boolean | Promise<boolean>\n): Promise<string | undefined>\n\n/**\n * Check if a package needs to be optimized by Vite, aka if it's CJS-only\n */\nexport declare function pkgNeedsOptimization(\n  pkgJson: Record<string, any>,\n  pkgJsonPath: string\n): Promise<boolean>\n\n/**\n * Check if a dependency is part of an existing `optimizeDeps.exclude` config\n * @param dep Dependency to be included\n * @param optimizeDepsExclude Existing `optimizeDeps.exclude` config\n * @example\n * ```ts\n * optimizeDeps: {\n *   include: includesToAdd.filter((dep) => !isDepExcluded(dep, existingExclude))\n * }\n * ```\n */\nexport declare function isDepExcluded(\n  dep: string,\n  optimizeDepsExclude: NonNullable<DepOptimizationOptions['exclude']>\n): boolean\n\n/**\n * Check if a dependency is part of an existing `optimizeDeps.include` config\n * @param dep Dependency to be excluded\n * @param optimizeDepsInclude Existing `optimizeDeps.include` config\n * @example\n * ```ts\n * optimizeDeps: {\n *   exclude: excludesToAdd.filter((dep) => !isDepIncluded(dep, existingInclude))\n * }\n * ```\n */\nexport declare function isDepIncluded(\n  dep: string,\n  optimizeDepsInclude: NonNullable<DepOptimizationOptions['include']>\n): boolean\n\n/**\n * Check if a dependency is part of an existing `ssr.noExternal` config\n * @param dep Dependency to be excluded\n * @param ssrNoExternal Existing `ssr.noExternal` config\n * @example\n * ```ts\n * ssr: {\n *   external: externalsToAdd.filter((dep) => !isDepNoExternal(dep, existingNoExternal))\n * }\n * ```\n */\nexport declare function isDepNoExternaled(\n  dep: string,\n  ssrNoExternal: NonNullable<SSROptions['noExternal']>\n): boolean\n\n/**\n * Check if a dependency is part of an existing `ssr.external` config\n * @param dep Dependency to be noExternaled\n * @param ssrExternal Existing `ssr.external` config\n * @example\n * ```ts\n * ssr: {\n *   noExternal: noExternalsToAdd.filter((dep) => !isDepExternal(dep, existingExternal))\n * }\n * ```\n */\nexport declare function isDepExternaled(\n  dep: string,\n  ssrExternal: NonNullable<SSROptions['external']>\n): boolean\n/package.json\u0003Y{\n  \"name\": \"vitefu\",\n  \"description\": \"Utilities for building frameworks with Vite\",\n  \"version\": \"0.2.4\",\n  \"license\": \"MIT\",\n  \"type\": \"module\",\n  \"types\": \"./index.d.ts\",\n  \"exports\": {\n    \".\": {\n      \"types\": \"./index.d.ts\",\n      \"import\": \"./src/index.js\",\n      \"require\": \"./src/index.cjs\"\n    }\n  },\n  \"files\": [\n    \"src\",\n    \"index.d.ts\"\n  ],\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/svitejs/vitefu.git\"\n  },\n  \"bugs\": {\n    \"url\": \"https://github.com/svitejs/vitefu/issues\"\n  },\n  \"keywords\": [\n    \"vite\",\n    \"framework\",\n    \"utilities\"\n  ],\n  \"peerDependencies\": {\n    \"vite\": \"^3.0.0 || ^4.0.0\"\n  },\n  \"peerDependenciesMeta\": {\n    \"vite\": {\n      \"optional\": true\n    }\n  },\n  \"devDependencies\": {\n    \"uvu\": \"^0.5.6\",\n    \"vite\": \"^3.2.3\"\n  },\n  \"scripts\": {\n    \"test\": \"uvu tests \\\".*\\\\.test\\\\.js\\\"\"\n  }\n}/README.mds# vitefu\n\nUtilities for building frameworks with Vite.\n\n## Usage\n\nSee [index.d.ts](./index.d.ts).\n\n## License\n\nMIT\n/LICENSE\u00042MIT License\n\nCopyright (c) 2022 Bjorn and Dominik\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n/src/sync.cjs\u0005// contains synchronous API only so it can be exported as CJS and ESM\n\n/** @type {import('..').isDepIncluded} */\nfunction isDepIncluded(dep, optimizeDepsInclude) {\n  return optimizeDepsInclude.some((id) => parseIncludeStr(id) === dep)\n}\n\n/** @type {import('..').isDepExcluded} */\nfunction isDepExcluded(dep, optimizeDepsExclude) {\n  dep = parseIncludeStr(dep)\n  return optimizeDepsExclude.some(\n    (id) => id === dep || dep.startsWith(`${id}/`)\n  )\n}\n\n/** @type {import('..').isDepNoExternaled} */\nfunction isDepNoExternaled(dep, ssrNoExternal) {\n  if (ssrNoExternal === true) {\n    return true\n  } else {\n    return isMatch(dep, ssrNoExternal)\n  }\n}\n\n/** @type {import('..').isDepExternaled} */\nfunction isDepExternaled(dep, ssrExternal) {\n  return ssrExternal.includes(dep)\n}\n\n/**\n * @param {string} raw could be \"foo\" or \"foo > bar\" etc\n */\nfunction parseIncludeStr(raw) {\n  const lastArrow = raw.lastIndexOf('>')\n  return lastArrow === -1 ? raw : raw.slice(lastArrow + 1).trim()\n}\n\n/**\n * @param {string} target\n * @param {string | RegExp | (string | RegExp)[]} pattern\n */\nfunction isMatch(target, pattern) {\n  if (Array.isArray(pattern)) {\n    return pattern.some((p) => isMatch(target, p))\n  } else if (typeof pattern === 'string') {\n    return target === pattern\n  } else if (pattern instanceof RegExp) {\n    return pattern.test(target)\n  }\n}\n\nmodule.exports = {\n  isDepIncluded,\n  isDepExcluded,\n  isDepNoExternaled,\n  isDepExternaled\n}\n/src/index.cjs\u0001// CJS -> ESM proxy file\n// Reference: https://github.com/vitejs/vite/blob/9f268dad2e82c0f1276b1098c0a28f1cf245aa50/packages/vite/index.cjs\n\nmodule.exports = require('./sync.cjs')\n\n// redirect async functions to ESM\nconst asyncFunctions = [\n  'crawlFrameworkPkgs',\n  'findDepPkgJsonPath',\n  'findClosestPkgJsonPath',\n  'pkgNeedsOptimization'\n]\n\nfor (const fn of asyncFunctions) {\n  module.exports[fn] = function () {\n    return import('./index.js').then((mod) => mod[fn].apply(this, arguments))\n  }\n}\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/dnVlcHJlc3Mtdml0ZUAyLjAuMC1iZXRhLjUz",
    "content": "/package.json\u0004{\n  \"name\": \"vuepress-vite\",\n  \"version\": \"2.0.0-beta.53\",\n  \"description\": \"Vue-powered Static Site Generator\",\n  \"keywords\": [\n    \"documentation\",\n    \"generator\",\n    \"vue\",\n    \"vuepress\"\n  ],\n  \"homepage\": \"https://github.com/vuepress\",\n  \"bugs\": {\n    \"url\": \"https://github.com/vuepress/vuepress-next/issues\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/vuepress/vuepress-next.git\"\n  },\n  \"license\": \"MIT\",\n  \"author\": \"meteorlxy\",\n  \"type\": \"module\",\n  \"exports\": {\n    \".\": \"./lib/index.js\",\n    \"./bin\": \"./bin/vuepress.js\",\n    \"./package.json\": \"./package.json\"\n  },\n  \"main\": \"./lib/index.js\",\n  \"types\": \"./lib/index.d.ts\",\n  \"bin\": {\n    \"vuepress\": \"./bin/vuepress.js\",\n    \"vuepress-vite\": \"./bin/vuepress.js\"\n  },\n  \"files\": [\n    \"bin\",\n    \"lib\"\n  ],\n  \"dependencies\": {\n    \"@vuepress/bundler-vite\": \"2.0.0-beta.53\",\n    \"@vuepress/cli\": \"2.0.0-beta.53\",\n    \"@vuepress/core\": \"2.0.0-beta.53\",\n    \"@vuepress/theme-default\": \"2.0.0-beta.53\"\n  },\n  \"peerDependencies\": {\n    \"@vuepress/client\": \"^2.0.0-beta.50\",\n    \"vue\": \"^3.2.37\"\n  },\n  \"scripts\": {\n    \"build\": \"tsc -b tsconfig.build.json\",\n    \"clean\": \"rimraf lib *.tsbuildinfo\"\n  }\n}/lib/index.d.tsĐexport * from '@vuepress/bundler-vite';\nexport * from '@vuepress/cli';\nexport * from '@vuepress/core';\nexport * from '@vuepress/theme-default';\n/LICENSE\u0004CThe MIT License (MIT)\n\nCopyright (c) 2018-present, Yuxi (Evan) You\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n/lib/index.jsĐexport * from '@vuepress/bundler-vite';\nexport * from '@vuepress/cli';\nexport * from '@vuepress/core';\nexport * from '@vuepress/theme-default';\n/bin/vuepress.js#!/usr/bin/env node\n\nimport { viteBundler } from '@vuepress/bundler-vite'\nimport { cli } from '@vuepress/cli'\nimport { defaultTheme } from '@vuepress/theme-default'\n\n// set default bundler\ncli({ bundler: viteBundler(), theme: defaultTheme() })\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/dnVlcHJlc3NAMi4wLjAtYmV0YS41Mw==",
    "content": "/package.json\u0003{\n  \"name\": \"vuepress\",\n  \"version\": \"2.0.0-beta.53\",\n  \"description\": \"Vue-powered Static Site Generator\",\n  \"keywords\": [\n    \"documentation\",\n    \"generator\",\n    \"vue\",\n    \"vuepress\"\n  ],\n  \"homepage\": \"https://github.com/vuepress\",\n  \"bugs\": {\n    \"url\": \"https://github.com/vuepress/vuepress-next/issues\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/vuepress/vuepress-next.git\"\n  },\n  \"license\": \"MIT\",\n  \"author\": \"meteorlxy\",\n  \"type\": \"module\",\n  \"exports\": {\n    \".\": \"./lib/index.js\",\n    \"./bin\": \"./bin/vuepress.js\",\n    \"./package.json\": \"./package.json\"\n  },\n  \"main\": \"./lib/index.js\",\n  \"types\": \"./lib/index.d.ts\",\n  \"bin\": {\n    \"vuepress\": \"./bin/vuepress.js\"\n  },\n  \"files\": [\n    \"bin\",\n    \"lib\"\n  ],\n  \"dependencies\": {\n    \"vuepress-vite\": \"2.0.0-beta.53\"\n  },\n  \"scripts\": {\n    \"build\": \"tsc -b tsconfig.build.json\",\n    \"clean\": \"rimraf lib *.tsbuildinfo\"\n  }\n}/bin/vuepress.js0#!/usr/bin/env node\n\nimport 'vuepress-vite/bin'\n/lib/index.js\u001fexport * from 'vuepress-vite';\n/LICENSE\u0004CThe MIT License (MIT)\n\nCopyright (c) 2018-present, Yuxi (Evan) You\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n/lib/index.d.ts\u001fexport * from 'vuepress-vite';\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/eWFsbGlzdEA0LjAuMA==",
    "content": "/package.json\u0002{\n  \"name\": \"yallist\",\n  \"version\": \"4.0.0\",\n  \"description\": \"Yet Another Linked List\",\n  \"main\": \"yallist.js\",\n  \"directories\": {\n    \"test\": \"test\"\n  },\n  \"files\": [\n    \"yallist.js\",\n    \"iterator.js\"\n  ],\n  \"dependencies\": {},\n  \"devDependencies\": {\n    \"tap\": \"^12.1.0\"\n  },\n  \"scripts\": {\n    \"test\": \"tap test/*.js --100\",\n    \"preversion\": \"npm test\",\n    \"postversion\": \"npm publish\",\n    \"postpublish\": \"git push origin --all; git push origin --tags\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/isaacs/yallist.git\"\n  },\n  \"author\": \"Isaac Z. Schlueter <i@izs.me> (http://blog.izs.me/)\",\n  \"license\": \"ISC\"\n}\n/LICENSE\u0002The ISC License\n\nCopyright (c) Isaac Z. Schlueter and Contributors\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted, provided that the above\ncopyright notice and this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\nWITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\nANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\nACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR\nIN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n/README.md\u0012m# yallist\n\nYet Another Linked List\n\nThere are many doubly-linked list implementations like it, but this\none is mine.\n\nFor when an array would be too big, and a Map can't be iterated in\nreverse order.\n\n\n[![Build Status](https://travis-ci.org/isaacs/yallist.svg?branch=master)](https://travis-ci.org/isaacs/yallist) [![Coverage Status](https://coveralls.io/repos/isaacs/yallist/badge.svg?service=github)](https://coveralls.io/github/isaacs/yallist)\n\n## basic usage\n\n```javascript\nvar yallist = require('yallist')\nvar myList = yallist.create([1, 2, 3])\nmyList.push('foo')\nmyList.unshift('bar')\n// of course pop() and shift() are there, too\nconsole.log(myList.toArray()) // ['bar', 1, 2, 3, 'foo']\nmyList.forEach(function (k) {\n  // walk the list head to tail\n})\nmyList.forEachReverse(function (k, index, list) {\n  // walk the list tail to head\n})\nvar myDoubledList = myList.map(function (k) {\n  return k + k\n})\n// now myDoubledList contains ['barbar', 2, 4, 6, 'foofoo']\n// mapReverse is also a thing\nvar myDoubledListReverse = myList.mapReverse(function (k) {\n  return k + k\n}) // ['foofoo', 6, 4, 2, 'barbar']\n\nvar reduced = myList.reduce(function (set, entry) {\n  set += entry\n  return set\n}, 'start')\nconsole.log(reduced) // 'startfoo123bar'\n```\n\n## api\n\nThe whole API is considered \"public\".\n\nFunctions with the same name as an Array method work more or less the\nsame way.\n\nThere's reverse versions of most things because that's the point.\n\n### Yallist\n\nDefault export, the class that holds and manages a list.\n\nCall it with either a forEach-able (like an array) or a set of\narguments, to initialize the list.\n\nThe Array-ish methods all act like you'd expect.  No magic length,\nthough, so if you change that it won't automatically prune or add\nempty spots.\n\n### Yallist.create(..)\n\nAlias for Yallist function.  Some people like factories.\n\n#### yallist.head\n\nThe first node in the list\n\n#### yallist.tail\n\nThe last node in the list\n\n#### yallist.length\n\nThe number of nodes in the list.  (Change this at your peril.  It is\nnot magic like Array length.)\n\n#### yallist.toArray()\n\nConvert the list to an array.\n\n#### yallist.forEach(fn, [thisp])\n\nCall a function on each item in the list.\n\n#### yallist.forEachReverse(fn, [thisp])\n\nCall a function on each item in the list, in reverse order.\n\n#### yallist.get(n)\n\nGet the data at position `n` in the list.  If you use this a lot,\nprobably better off just using an Array.\n\n#### yallist.getReverse(n)\n\nGet the data at position `n`, counting from the tail.\n\n#### yallist.map(fn, thisp)\n\nCreate a new Yallist with the result of calling the function on each\nitem.\n\n#### yallist.mapReverse(fn, thisp)\n\nSame as `map`, but in reverse.\n\n#### yallist.pop()\n\nGet the data from the list tail, and remove the tail from the list.\n\n#### yallist.push(item, ...)\n\nInsert one or more items to the tail of the list.\n\n#### yallist.reduce(fn, initialValue)\n\nLike Array.reduce.\n\n#### yallist.reduceReverse\n\nLike Array.reduce, but in reverse.\n\n#### yallist.reverse\n\nReverse the list in place.\n\n#### yallist.shift()\n\nGet the data from the list head, and remove the head from the list.\n\n#### yallist.slice([from], [to])\n\nJust like Array.slice, but returns a new Yallist.\n\n#### yallist.sliceReverse([from], [to])\n\nJust like yallist.slice, but the result is returned in reverse.\n\n#### yallist.toArray()\n\nCreate an array representation of the list.\n\n#### yallist.toArrayReverse()\n\nCreate a reversed array representation of the list.\n\n#### yallist.unshift(item, ...)\n\nInsert one or more items to the head of the list.\n\n#### yallist.unshiftNode(node)\n\nMove a Node object to the front of the list.  (That is, pull it out of\nwherever it lives, and make it the new head.)\n\nIf the node belongs to a different list, then that list will remove it\nfirst.\n\n#### yallist.pushNode(node)\n\nMove a Node object to the end of the list.  (That is, pull it out of\nwherever it lives, and make it the new tail.)\n\nIf the node belongs to a list already, then that list will remove it\nfirst.\n\n#### yallist.removeNode(node)\n\nRemove a node from the list, preserving referential integrity of head\nand tail and other nodes.\n\nWill throw an error if you try to have a list remove a node that\ndoesn't belong to it.\n\n### Yallist.Node\n\nThe class that holds the data and is actually the list.\n\nCall with `var n = new Node(value, previousNode, nextNode)`\n\nNote that if you do direct operations on Nodes themselves, it's very\neasy to get into weird states where the list is broken.  Be careful :)\n\n#### node.next\n\nThe next node in the list.\n\n#### node.prev\n\nThe previous node in the list.\n\n#### node.value\n\nThe data the node contains.\n\n#### node.list\n\nThe list to which this node belongs.  (Null if it does not belong to\nany list.)\n/yallist.js 'use strict'\nmodule.exports = Yallist\n\nYallist.Node = Node\nYallist.create = Yallist\n\nfunction Yallist (list) {\n  var self = this\n  if (!(self instanceof Yallist)) {\n    self = new Yallist()\n  }\n\n  self.tail = null\n  self.head = null\n  self.length = 0\n\n  if (list && typeof list.forEach === 'function') {\n    list.forEach(function (item) {\n      self.push(item)\n    })\n  } else if (arguments.length > 0) {\n    for (var i = 0, l = arguments.length; i < l; i++) {\n      self.push(arguments[i])\n    }\n  }\n\n  return self\n}\n\nYallist.prototype.removeNode = function (node) {\n  if (node.list !== this) {\n    throw new Error('removing node which does not belong to this list')\n  }\n\n  var next = node.next\n  var prev = node.prev\n\n  if (next) {\n    next.prev = prev\n  }\n\n  if (prev) {\n    prev.next = next\n  }\n\n  if (node === this.head) {\n    this.head = next\n  }\n  if (node === this.tail) {\n    this.tail = prev\n  }\n\n  node.list.length--\n  node.next = null\n  node.prev = null\n  node.list = null\n\n  return next\n}\n\nYallist.prototype.unshiftNode = function (node) {\n  if (node === this.head) {\n    return\n  }\n\n  if (node.list) {\n    node.list.removeNode(node)\n  }\n\n  var head = this.head\n  node.list = this\n  node.next = head\n  if (head) {\n    head.prev = node\n  }\n\n  this.head = node\n  if (!this.tail) {\n    this.tail = node\n  }\n  this.length++\n}\n\nYallist.prototype.pushNode = function (node) {\n  if (node === this.tail) {\n    return\n  }\n\n  if (node.list) {\n    node.list.removeNode(node)\n  }\n\n  var tail = this.tail\n  node.list = this\n  node.prev = tail\n  if (tail) {\n    tail.next = node\n  }\n\n  this.tail = node\n  if (!this.head) {\n    this.head = node\n  }\n  this.length++\n}\n\nYallist.prototype.push = function () {\n  for (var i = 0, l = arguments.length; i < l; i++) {\n    push(this, arguments[i])\n  }\n  return this.length\n}\n\nYallist.prototype.unshift = function () {\n  for (var i = 0, l = arguments.length; i < l; i++) {\n    unshift(this, arguments[i])\n  }\n  return this.length\n}\n\nYallist.prototype.pop = function () {\n  if (!this.tail) {\n    return undefined\n  }\n\n  var res = this.tail.value\n  this.tail = this.tail.prev\n  if (this.tail) {\n    this.tail.next = null\n  } else {\n    this.head = null\n  }\n  this.length--\n  return res\n}\n\nYallist.prototype.shift = function () {\n  if (!this.head) {\n    return undefined\n  }\n\n  var res = this.head.value\n  this.head = this.head.next\n  if (this.head) {\n    this.head.prev = null\n  } else {\n    this.tail = null\n  }\n  this.length--\n  return res\n}\n\nYallist.prototype.forEach = function (fn, thisp) {\n  thisp = thisp || this\n  for (var walker = this.head, i = 0; walker !== null; i++) {\n    fn.call(thisp, walker.value, i, this)\n    walker = walker.next\n  }\n}\n\nYallist.prototype.forEachReverse = function (fn, thisp) {\n  thisp = thisp || this\n  for (var walker = this.tail, i = this.length - 1; walker !== null; i--) {\n    fn.call(thisp, walker.value, i, this)\n    walker = walker.prev\n  }\n}\n\nYallist.prototype.get = function (n) {\n  for (var i = 0, walker = this.head; walker !== null && i < n; i++) {\n    // abort out of the list early if we hit a cycle\n    walker = walker.next\n  }\n  if (i === n && walker !== null) {\n    return walker.value\n  }\n}\n\nYallist.prototype.getReverse = function (n) {\n  for (var i = 0, walker = this.tail; walker !== null && i < n; i++) {\n    // abort out of the list early if we hit a cycle\n    walker = walker.prev\n  }\n  if (i === n && walker !== null) {\n    return walker.value\n  }\n}\n\nYallist.prototype.map = function (fn, thisp) {\n  thisp = thisp || this\n  var res = new Yallist()\n  for (var walker = this.head; walker !== null;) {\n    res.push(fn.call(thisp, walker.value, this))\n    walker = walker.next\n  }\n  return res\n}\n\nYallist.prototype.mapReverse = function (fn, thisp) {\n  thisp = thisp || this\n  var res = new Yallist()\n  for (var walker = this.tail; walker !== null;) {\n    res.push(fn.call(thisp, walker.value, this))\n    walker = walker.prev\n  }\n  return res\n}\n\nYallist.prototype.reduce = function (fn, initial) {\n  var acc\n  var walker = this.head\n  if (arguments.length > 1) {\n    acc = initial\n  } else if (this.head) {\n    walker = this.head.next\n    acc = this.head.value\n  } else {\n    throw new TypeError('Reduce of empty list with no initial value')\n  }\n\n  for (var i = 0; walker !== null; i++) {\n    acc = fn(acc, walker.value, i)\n    walker = walker.next\n  }\n\n  return acc\n}\n\nYallist.prototype.reduceReverse = function (fn, initial) {\n  var acc\n  var walker = this.tail\n  if (arguments.length > 1) {\n    acc = initial\n  } else if (this.tail) {\n    walker = this.tail.prev\n    acc = this.tail.value\n  } else {\n    throw new TypeError('Reduce of empty list with no initial value')\n  }\n\n  for (var i = this.length - 1; walker !== null; i--) {\n    acc = fn(acc, walker.value, i)\n    walker = walker.prev\n  }\n\n  return acc\n}\n\nYallist.prototype.toArray = function () {\n  var arr = new Array(this.length)\n  for (var i = 0, walker = this.head; walker !== null; i++) {\n    arr[i] = walker.value\n    walker = walker.next\n  }\n  return arr\n}\n\nYallist.prototype.toArrayReverse = function () {\n  var arr = new Array(this.length)\n  for (var i = 0, walker = this.tail; walker !== null; i++) {\n    arr[i] = walker.value\n    walker = walker.prev\n  }\n  return arr\n}\n\nYallist.prototype.slice = function (from, to) {\n  to = to || this.length\n  if (to < 0) {\n    to += this.length\n  }\n  from = from || 0\n  if (from < 0) {\n    from += this.length\n  }\n  var ret = new Yallist()\n  if (to < from || to < 0) {\n    return ret\n  }\n  if (from < 0) {\n    from = 0\n  }\n  if (to > this.length) {\n    to = this.length\n  }\n  for (var i = 0, walker = this.head; walker !== null && i < from; i++) {\n    walker = walker.next\n  }\n  for (; walker !== null && i < to; i++, walker = walker.next) {\n    ret.push(walker.value)\n  }\n  return ret\n}\n\nYallist.prototype.sliceReverse = function (from, to) {\n  to = to || this.length\n  if (to < 0) {\n    to += this.length\n  }\n  from = from || 0\n  if (from < 0) {\n    from += this.length\n  }\n  var ret = new Yallist()\n  if (to < from || to < 0) {\n    return ret\n  }\n  if (from < 0) {\n    from = 0\n  }\n  if (to > this.length) {\n    to = this.length\n  }\n  for (var i = this.length, walker = this.tail; walker !== null && i > to; i--) {\n    walker = walker.prev\n  }\n  for (; walker !== null && i > from; i--, walker = walker.prev) {\n    ret.push(walker.value)\n  }\n  return ret\n}\n\nYallist.prototype.splice = function (start, deleteCount, ...nodes) {\n  if (start > this.length) {\n    start = this.length - 1\n  }\n  if (start < 0) {\n    start = this.length + start;\n  }\n\n  for (var i = 0, walker = this.head; walker !== null && i < start; i++) {\n    walker = walker.next\n  }\n\n  var ret = []\n  for (var i = 0; walker && i < deleteCount; i++) {\n    ret.push(walker.value)\n    walker = this.removeNode(walker)\n  }\n  if (walker === null) {\n    walker = this.tail\n  }\n\n  if (walker !== this.head && walker !== this.tail) {\n    walker = walker.prev\n  }\n\n  for (var i = 0; i < nodes.length; i++) {\n    walker = insert(this, walker, nodes[i])\n  }\n  return ret;\n}\n\nYallist.prototype.reverse = function () {\n  var head = this.head\n  var tail = this.tail\n  for (var walker = head; walker !== null; walker = walker.prev) {\n    var p = walker.prev\n    walker.prev = walker.next\n    walker.next = p\n  }\n  this.head = tail\n  this.tail = head\n  return this\n}\n\nfunction insert (self, node, value) {\n  var inserted = node === self.head ?\n    new Node(value, null, node, self) :\n    new Node(value, node, node.next, self)\n\n  if (inserted.next === null) {\n    self.tail = inserted\n  }\n  if (inserted.prev === null) {\n    self.head = inserted\n  }\n\n  self.length++\n\n  return inserted\n}\n\nfunction push (self, item) {\n  self.tail = new Node(item, self.tail, null, self)\n  if (!self.head) {\n    self.head = self.tail\n  }\n  self.length++\n}\n\nfunction unshift (self, item) {\n  self.head = new Node(item, null, self.head, self)\n  if (!self.tail) {\n    self.tail = self.head\n  }\n  self.length++\n}\n\nfunction Node (value, prev, next, list) {\n  if (!(this instanceof Node)) {\n    return new Node(value, prev, next, list)\n  }\n\n  this.list = list\n  this.value = value\n\n  if (prev) {\n    prev.next = this\n    this.prev = prev\n  } else {\n    this.prev = null\n  }\n\n  if (next) {\n    next.prev = this\n    this.next = next\n  } else {\n    this.next = null\n  }\n}\n\ntry {\n  // add if support for Symbol.iterator is present\n  require('./iterator.js')(Yallist)\n} catch (er) {}\n/iterator.js'use strict'\nmodule.exports = function (Yallist) {\n  Yallist.prototype[Symbol.iterator] = function* () {\n    for (let walker = this.head; walker; walker = walker.next) {\n      yield walker.value\n    }\n  }\n}\n"
  },
  {
    "path": "tests/cdn-proxy/v2/mod/eWFsbGlzdEAzLjEuMQ==",
    "content": "/LICENSE\u0002The ISC License\n\nCopyright (c) Isaac Z. Schlueter and Contributors\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted, provided that the above\ncopyright notice and this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\nWITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\nANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\nACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR\nIN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n/iterator.js'use strict'\nmodule.exports = function (Yallist) {\n  Yallist.prototype[Symbol.iterator] = function* () {\n    for (let walker = this.head; walker; walker = walker.next) {\n      yield walker.value\n    }\n  }\n}\n/package.json\u0002{\n  \"name\": \"yallist\",\n  \"version\": \"3.1.1\",\n  \"description\": \"Yet Another Linked List\",\n  \"main\": \"yallist.js\",\n  \"directories\": {\n    \"test\": \"test\"\n  },\n  \"files\": [\n    \"yallist.js\",\n    \"iterator.js\"\n  ],\n  \"dependencies\": {},\n  \"devDependencies\": {\n    \"tap\": \"^12.1.0\"\n  },\n  \"scripts\": {\n    \"test\": \"tap test/*.js --100\",\n    \"preversion\": \"npm test\",\n    \"postversion\": \"npm publish\",\n    \"postpublish\": \"git push origin --all; git push origin --tags\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/isaacs/yallist.git\"\n  },\n  \"author\": \"Isaac Z. Schlueter <i@izs.me> (http://blog.izs.me/)\",\n  \"license\": \"ISC\"\n}\n/README.md\u0012m# yallist\n\nYet Another Linked List\n\nThere are many doubly-linked list implementations like it, but this\none is mine.\n\nFor when an array would be too big, and a Map can't be iterated in\nreverse order.\n\n\n[![Build Status](https://travis-ci.org/isaacs/yallist.svg?branch=master)](https://travis-ci.org/isaacs/yallist) [![Coverage Status](https://coveralls.io/repos/isaacs/yallist/badge.svg?service=github)](https://coveralls.io/github/isaacs/yallist)\n\n## basic usage\n\n```javascript\nvar yallist = require('yallist')\nvar myList = yallist.create([1, 2, 3])\nmyList.push('foo')\nmyList.unshift('bar')\n// of course pop() and shift() are there, too\nconsole.log(myList.toArray()) // ['bar', 1, 2, 3, 'foo']\nmyList.forEach(function (k) {\n  // walk the list head to tail\n})\nmyList.forEachReverse(function (k, index, list) {\n  // walk the list tail to head\n})\nvar myDoubledList = myList.map(function (k) {\n  return k + k\n})\n// now myDoubledList contains ['barbar', 2, 4, 6, 'foofoo']\n// mapReverse is also a thing\nvar myDoubledListReverse = myList.mapReverse(function (k) {\n  return k + k\n}) // ['foofoo', 6, 4, 2, 'barbar']\n\nvar reduced = myList.reduce(function (set, entry) {\n  set += entry\n  return set\n}, 'start')\nconsole.log(reduced) // 'startfoo123bar'\n```\n\n## api\n\nThe whole API is considered \"public\".\n\nFunctions with the same name as an Array method work more or less the\nsame way.\n\nThere's reverse versions of most things because that's the point.\n\n### Yallist\n\nDefault export, the class that holds and manages a list.\n\nCall it with either a forEach-able (like an array) or a set of\narguments, to initialize the list.\n\nThe Array-ish methods all act like you'd expect.  No magic length,\nthough, so if you change that it won't automatically prune or add\nempty spots.\n\n### Yallist.create(..)\n\nAlias for Yallist function.  Some people like factories.\n\n#### yallist.head\n\nThe first node in the list\n\n#### yallist.tail\n\nThe last node in the list\n\n#### yallist.length\n\nThe number of nodes in the list.  (Change this at your peril.  It is\nnot magic like Array length.)\n\n#### yallist.toArray()\n\nConvert the list to an array.\n\n#### yallist.forEach(fn, [thisp])\n\nCall a function on each item in the list.\n\n#### yallist.forEachReverse(fn, [thisp])\n\nCall a function on each item in the list, in reverse order.\n\n#### yallist.get(n)\n\nGet the data at position `n` in the list.  If you use this a lot,\nprobably better off just using an Array.\n\n#### yallist.getReverse(n)\n\nGet the data at position `n`, counting from the tail.\n\n#### yallist.map(fn, thisp)\n\nCreate a new Yallist with the result of calling the function on each\nitem.\n\n#### yallist.mapReverse(fn, thisp)\n\nSame as `map`, but in reverse.\n\n#### yallist.pop()\n\nGet the data from the list tail, and remove the tail from the list.\n\n#### yallist.push(item, ...)\n\nInsert one or more items to the tail of the list.\n\n#### yallist.reduce(fn, initialValue)\n\nLike Array.reduce.\n\n#### yallist.reduceReverse\n\nLike Array.reduce, but in reverse.\n\n#### yallist.reverse\n\nReverse the list in place.\n\n#### yallist.shift()\n\nGet the data from the list head, and remove the head from the list.\n\n#### yallist.slice([from], [to])\n\nJust like Array.slice, but returns a new Yallist.\n\n#### yallist.sliceReverse([from], [to])\n\nJust like yallist.slice, but the result is returned in reverse.\n\n#### yallist.toArray()\n\nCreate an array representation of the list.\n\n#### yallist.toArrayReverse()\n\nCreate a reversed array representation of the list.\n\n#### yallist.unshift(item, ...)\n\nInsert one or more items to the head of the list.\n\n#### yallist.unshiftNode(node)\n\nMove a Node object to the front of the list.  (That is, pull it out of\nwherever it lives, and make it the new head.)\n\nIf the node belongs to a different list, then that list will remove it\nfirst.\n\n#### yallist.pushNode(node)\n\nMove a Node object to the end of the list.  (That is, pull it out of\nwherever it lives, and make it the new tail.)\n\nIf the node belongs to a list already, then that list will remove it\nfirst.\n\n#### yallist.removeNode(node)\n\nRemove a node from the list, preserving referential integrity of head\nand tail and other nodes.\n\nWill throw an error if you try to have a list remove a node that\ndoesn't belong to it.\n\n### Yallist.Node\n\nThe class that holds the data and is actually the list.\n\nCall with `var n = new Node(value, previousNode, nextNode)`\n\nNote that if you do direct operations on Nodes themselves, it's very\neasy to get into weird states where the list is broken.  Be careful :)\n\n#### node.next\n\nThe next node in the list.\n\n#### node.prev\n\nThe previous node in the list.\n\n#### node.value\n\nThe data the node contains.\n\n#### node.list\n\nThe list to which this node belongs.  (Null if it does not belong to\nany list.)\n/yallist.js 'use strict'\nmodule.exports = Yallist\n\nYallist.Node = Node\nYallist.create = Yallist\n\nfunction Yallist (list) {\n  var self = this\n  if (!(self instanceof Yallist)) {\n    self = new Yallist()\n  }\n\n  self.tail = null\n  self.head = null\n  self.length = 0\n\n  if (list && typeof list.forEach === 'function') {\n    list.forEach(function (item) {\n      self.push(item)\n    })\n  } else if (arguments.length > 0) {\n    for (var i = 0, l = arguments.length; i < l; i++) {\n      self.push(arguments[i])\n    }\n  }\n\n  return self\n}\n\nYallist.prototype.removeNode = function (node) {\n  if (node.list !== this) {\n    throw new Error('removing node which does not belong to this list')\n  }\n\n  var next = node.next\n  var prev = node.prev\n\n  if (next) {\n    next.prev = prev\n  }\n\n  if (prev) {\n    prev.next = next\n  }\n\n  if (node === this.head) {\n    this.head = next\n  }\n  if (node === this.tail) {\n    this.tail = prev\n  }\n\n  node.list.length--\n  node.next = null\n  node.prev = null\n  node.list = null\n\n  return next\n}\n\nYallist.prototype.unshiftNode = function (node) {\n  if (node === this.head) {\n    return\n  }\n\n  if (node.list) {\n    node.list.removeNode(node)\n  }\n\n  var head = this.head\n  node.list = this\n  node.next = head\n  if (head) {\n    head.prev = node\n  }\n\n  this.head = node\n  if (!this.tail) {\n    this.tail = node\n  }\n  this.length++\n}\n\nYallist.prototype.pushNode = function (node) {\n  if (node === this.tail) {\n    return\n  }\n\n  if (node.list) {\n    node.list.removeNode(node)\n  }\n\n  var tail = this.tail\n  node.list = this\n  node.prev = tail\n  if (tail) {\n    tail.next = node\n  }\n\n  this.tail = node\n  if (!this.head) {\n    this.head = node\n  }\n  this.length++\n}\n\nYallist.prototype.push = function () {\n  for (var i = 0, l = arguments.length; i < l; i++) {\n    push(this, arguments[i])\n  }\n  return this.length\n}\n\nYallist.prototype.unshift = function () {\n  for (var i = 0, l = arguments.length; i < l; i++) {\n    unshift(this, arguments[i])\n  }\n  return this.length\n}\n\nYallist.prototype.pop = function () {\n  if (!this.tail) {\n    return undefined\n  }\n\n  var res = this.tail.value\n  this.tail = this.tail.prev\n  if (this.tail) {\n    this.tail.next = null\n  } else {\n    this.head = null\n  }\n  this.length--\n  return res\n}\n\nYallist.prototype.shift = function () {\n  if (!this.head) {\n    return undefined\n  }\n\n  var res = this.head.value\n  this.head = this.head.next\n  if (this.head) {\n    this.head.prev = null\n  } else {\n    this.tail = null\n  }\n  this.length--\n  return res\n}\n\nYallist.prototype.forEach = function (fn, thisp) {\n  thisp = thisp || this\n  for (var walker = this.head, i = 0; walker !== null; i++) {\n    fn.call(thisp, walker.value, i, this)\n    walker = walker.next\n  }\n}\n\nYallist.prototype.forEachReverse = function (fn, thisp) {\n  thisp = thisp || this\n  for (var walker = this.tail, i = this.length - 1; walker !== null; i--) {\n    fn.call(thisp, walker.value, i, this)\n    walker = walker.prev\n  }\n}\n\nYallist.prototype.get = function (n) {\n  for (var i = 0, walker = this.head; walker !== null && i < n; i++) {\n    // abort out of the list early if we hit a cycle\n    walker = walker.next\n  }\n  if (i === n && walker !== null) {\n    return walker.value\n  }\n}\n\nYallist.prototype.getReverse = function (n) {\n  for (var i = 0, walker = this.tail; walker !== null && i < n; i++) {\n    // abort out of the list early if we hit a cycle\n    walker = walker.prev\n  }\n  if (i === n && walker !== null) {\n    return walker.value\n  }\n}\n\nYallist.prototype.map = function (fn, thisp) {\n  thisp = thisp || this\n  var res = new Yallist()\n  for (var walker = this.head; walker !== null;) {\n    res.push(fn.call(thisp, walker.value, this))\n    walker = walker.next\n  }\n  return res\n}\n\nYallist.prototype.mapReverse = function (fn, thisp) {\n  thisp = thisp || this\n  var res = new Yallist()\n  for (var walker = this.tail; walker !== null;) {\n    res.push(fn.call(thisp, walker.value, this))\n    walker = walker.prev\n  }\n  return res\n}\n\nYallist.prototype.reduce = function (fn, initial) {\n  var acc\n  var walker = this.head\n  if (arguments.length > 1) {\n    acc = initial\n  } else if (this.head) {\n    walker = this.head.next\n    acc = this.head.value\n  } else {\n    throw new TypeError('Reduce of empty list with no initial value')\n  }\n\n  for (var i = 0; walker !== null; i++) {\n    acc = fn(acc, walker.value, i)\n    walker = walker.next\n  }\n\n  return acc\n}\n\nYallist.prototype.reduceReverse = function (fn, initial) {\n  var acc\n  var walker = this.tail\n  if (arguments.length > 1) {\n    acc = initial\n  } else if (this.tail) {\n    walker = this.tail.prev\n    acc = this.tail.value\n  } else {\n    throw new TypeError('Reduce of empty list with no initial value')\n  }\n\n  for (var i = this.length - 1; walker !== null; i--) {\n    acc = fn(acc, walker.value, i)\n    walker = walker.prev\n  }\n\n  return acc\n}\n\nYallist.prototype.toArray = function () {\n  var arr = new Array(this.length)\n  for (var i = 0, walker = this.head; walker !== null; i++) {\n    arr[i] = walker.value\n    walker = walker.next\n  }\n  return arr\n}\n\nYallist.prototype.toArrayReverse = function () {\n  var arr = new Array(this.length)\n  for (var i = 0, walker = this.tail; walker !== null; i++) {\n    arr[i] = walker.value\n    walker = walker.prev\n  }\n  return arr\n}\n\nYallist.prototype.slice = function (from, to) {\n  to = to || this.length\n  if (to < 0) {\n    to += this.length\n  }\n  from = from || 0\n  if (from < 0) {\n    from += this.length\n  }\n  var ret = new Yallist()\n  if (to < from || to < 0) {\n    return ret\n  }\n  if (from < 0) {\n    from = 0\n  }\n  if (to > this.length) {\n    to = this.length\n  }\n  for (var i = 0, walker = this.head; walker !== null && i < from; i++) {\n    walker = walker.next\n  }\n  for (; walker !== null && i < to; i++, walker = walker.next) {\n    ret.push(walker.value)\n  }\n  return ret\n}\n\nYallist.prototype.sliceReverse = function (from, to) {\n  to = to || this.length\n  if (to < 0) {\n    to += this.length\n  }\n  from = from || 0\n  if (from < 0) {\n    from += this.length\n  }\n  var ret = new Yallist()\n  if (to < from || to < 0) {\n    return ret\n  }\n  if (from < 0) {\n    from = 0\n  }\n  if (to > this.length) {\n    to = this.length\n  }\n  for (var i = this.length, walker = this.tail; walker !== null && i > to; i--) {\n    walker = walker.prev\n  }\n  for (; walker !== null && i > from; i--, walker = walker.prev) {\n    ret.push(walker.value)\n  }\n  return ret\n}\n\nYallist.prototype.splice = function (start, deleteCount /*, ...nodes */) {\n  if (start > this.length) {\n    start = this.length - 1\n  }\n  if (start < 0) {\n    start = this.length + start;\n  }\n\n  for (var i = 0, walker = this.head; walker !== null && i < start; i++) {\n    walker = walker.next\n  }\n\n  var ret = []\n  for (var i = 0; walker && i < deleteCount; i++) {\n    ret.push(walker.value)\n    walker = this.removeNode(walker)\n  }\n  if (walker === null) {\n    walker = this.tail\n  }\n\n  if (walker !== this.head && walker !== this.tail) {\n    walker = walker.prev\n  }\n\n  for (var i = 2; i < arguments.length; i++) {\n    walker = insert(this, walker, arguments[i])\n  }\n  return ret;\n}\n\nYallist.prototype.reverse = function () {\n  var head = this.head\n  var tail = this.tail\n  for (var walker = head; walker !== null; walker = walker.prev) {\n    var p = walker.prev\n    walker.prev = walker.next\n    walker.next = p\n  }\n  this.head = tail\n  this.tail = head\n  return this\n}\n\nfunction insert (self, node, value) {\n  var inserted = node === self.head ?\n    new Node(value, null, node, self) :\n    new Node(value, node, node.next, self)\n\n  if (inserted.next === null) {\n    self.tail = inserted\n  }\n  if (inserted.prev === null) {\n    self.head = inserted\n  }\n\n  self.length++\n\n  return inserted\n}\n\nfunction push (self, item) {\n  self.tail = new Node(item, self.tail, null, self)\n  if (!self.head) {\n    self.head = self.tail\n  }\n  self.length++\n}\n\nfunction unshift (self, item) {\n  self.head = new Node(item, null, self.head, self)\n  if (!self.tail) {\n    self.tail = self.head\n  }\n  self.length++\n}\n\nfunction Node (value, prev, next, list) {\n  if (!(this instanceof Node)) {\n    return new Node(value, prev, next, list)\n  }\n\n  this.list = list\n  this.value = value\n\n  if (prev) {\n    prev.next = this\n    this.prev = prev\n  } else {\n    this.prev = null\n  }\n\n  if (next) {\n    next.prev = this\n    this.next = next\n  } else {\n    this.next = null\n  }\n}\n\ntry {\n  // add if support for Symbol.iterator is present\n  require('./iterator.js')(Yallist)\n} catch (er) {}\n"
  },
  {
    "path": "tests/compatibility/circular-esm.test.ts",
    "content": "import { test, expect } from 'tests';\nimport waitFor from 'wait-for-expect';\n\ntest('loads circular esm imports', async ({ runTestServer, emulatorUrl, page }) => {\n  await runTestServer();\n\n  const logs: Array<string> = [];\n  page.on('console', (message) => {\n    if (message.type() === 'log') {\n      const text = message.text();\n      if (text.includes('emulator')) {\n        return;\n      }\n      logs.push(text.trim());\n    }\n  });\n\n  await page.evaluate(async (emulatorUrl) => {\n    const { Nodebox } = window;\n\n    const emulator = new Nodebox({\n      runtimeUrl: emulatorUrl,\n      iframe: document.getElementById('frame') as HTMLIFrameElement,\n    });\n\n    await emulator.connect();\n    await emulator.fs.init({\n      '/index.mjs': `import { test, something } from './a.mjs';\n        export function blabla() {\n            return 'circular-dep-message';\n        }\n        await new Promise((resolve) => resolve('123'));\n        console.log(something());\n        export { test };\n        `,\n      '/a.mjs': `import { blabla } from './index.mjs';\n        export function something() {\n            return blabla();\n        }\n        export const test = 'abc';`,\n      '/package.json': JSON.stringify({\n        name: 'example',\n        dependencies: {},\n      }),\n    });\n\n    const shellProcess = emulator.shell.create();\n    shellProcess.stdout.on('data', (data) => {\n      // eslint-disable-next-line no-console\n      console.log(data);\n    });\n    await shellProcess.runCommand('node', ['index.mjs']);\n  }, emulatorUrl);\n\n  await waitFor(() => {\n    // Must print the message from \"index.js\" to the console.\n    expect(logs).toEqual(['circular-dep-message']);\n  });\n});\n"
  },
  {
    "path": "tests/compatibility/process.binding.test.ts",
    "content": "import { test, expect } from 'tests';\nimport waitFor from 'wait-for-expect';\n\ntest('executes code that uses \"process.binding()\"', async ({ runTestServer, emulatorUrl, page }) => {\n  await runTestServer();\n\n  const logs: Array<string> = [];\n  page.on('console', (message) => {\n    if (message.type() === 'log') {\n      logs.push(message.text());\n    }\n  });\n\n  await page.evaluate(async (emulatorUrl) => {\n    const { Nodebox } = window;\n\n    const emulator = new Nodebox({\n      runtimeUrl: emulatorUrl,\n      iframe: document.getElementById('frame') as HTMLIFrameElement,\n    });\n\n    await emulator.connect();\n    await emulator.fs.init({\n      'index.js': `\n// We resolve certain bindings against our patched modules.\nconst { URL } = process.binding('url')\nconst link = new URL('https://codesandbox.io')\nconsole.log(link.hostname)\n      `,\n    });\n\n    const shellProcess = emulator.shell.create();\n    shellProcess.stdout.on('data', (data) => {\n      // eslint-disable-next-line no-console\n      console.log(data.trim());\n    });\n    await shellProcess.runCommand('node', ['index.js']);\n  }, emulatorUrl);\n\n  await waitFor(() => {\n    // Must print the message from \"index.js\" to the console.\n    expect(logs).toEqual(expect.arrayContaining(['codesandbox.io']));\n  });\n});\n\ntest('warns on executing code that uses unsupported binding', async ({ runTestServer, emulatorUrl, page }) => {\n  await runTestServer();\n\n  const logs: Array<string> = [];\n  page.on('console', (message) => {\n    logs.push(message.text());\n  });\n\n  await page.evaluate(async (emulatorUrl) => {\n    const { Nodebox } = window;\n\n    const emulator = new Nodebox({\n      runtimeUrl: emulatorUrl,\n      iframe: document.getElementById('frame') as HTMLIFrameElement,\n    });\n\n    await emulator.connect();\n    await emulator.fs.init({\n      'index.js': `\nconst { foo } = process.binding('zlib')\nfoo('bar')\n      `,\n    });\n\n    const shellProcess = emulator.shell.create();\n    shellProcess.stderr.on('data', (data) => {\n      console.error(data.trim());\n    });\n    shellProcess.stdout.on('data', (data) => {\n      // eslint-disable-next-line no-console\n      console.log(data.trim());\n    });\n    await shellProcess.runCommand('node', ['index.js']);\n  }, emulatorUrl);\n\n  await waitFor(() => {\n    // Must print a warning whenever accessing a valid process binding\n    // that does not have a corresponding patched module on our side.\n    expect(logs).toContain(\n      `\"process.binding(\"zlib\")\" is not yet implemented. Please file an issue on GitHub if you rely on this feature.`\n    );\n  });\n});\n\ntest('throws an error when using an invalid binding', async ({ runTestServer, emulatorUrl, page }) => {\n  await runTestServer();\n\n  const errors: Array<string> = [];\n  page.on('console', (message) => {\n    if (message.type() === 'error') {\n      errors.push(message.text());\n    }\n  });\n\n  await page.evaluate(async (emulatorUrl) => {\n    const { Nodebox } = window;\n\n    const emulator = new Nodebox({\n      runtimeUrl: emulatorUrl,\n      iframe: document.getElementById('frame') as HTMLIFrameElement,\n    });\n\n    await emulator.connect();\n    await emulator.fs.init({\n      // Only a strict subset of modules is considered a valid binding in Node.js.\n      // We have that validation as well to improve Node.js compatibility.\n      'index.js': `\nprocess.binding('invalid-binding-module')\n      `,\n    });\n\n    const shellProcess = emulator.shell.create();\n    shellProcess.stderr.on('data', (data) => {\n      console.error(data.trim());\n    });\n    shellProcess.stdout.on('data', (data) => {\n      // eslint-disable-next-line no-console\n      console.log(data.trim());\n    });\n    await shellProcess.runCommand('node', ['index.js']);\n  }, emulatorUrl);\n\n  await waitFor(() => {\n    // Must print a warning whenever accessing a valid process binding\n    // that does not have a corresponding patched module on our side.\n    expect(errors).toEqual(expect.arrayContaining([expect.stringContaining('No such module: invalid-binding-module')]));\n  });\n});\n"
  },
  {
    "path": "tests/compatibility/uv.test.ts",
    "content": "import { test, expect } from 'tests';\nimport waitFor from 'wait-for-expect';\n\ntest('exposes a \"uv\" process binding', async ({ runTestServer, emulatorUrl, page }) => {\n  await runTestServer();\n\n  const logs: Array<string> = [];\n  page.on('console', (message) => {\n    if (message.type() === 'log') {\n      logs.push(message.text());\n    }\n  });\n\n  await page.evaluate(async (emulatorUrl) => {\n    const { Nodebox } = window;\n\n    const emulator = new Nodebox({\n      runtimeUrl: emulatorUrl,\n      iframe: document.getElementById('frame') as HTMLIFrameElement,\n    });\n\n    await emulator.connect();\n    await emulator.fs.init({\n      'index.js': `\nconst uv = process.binding('uv')\nconsole.log(uv.errname(-50))\n      `,\n    });\n\n    const shellProcess = emulator.shell.create();\n    shellProcess.stderr.on('data', (data) => {\n      console.error(data.trim());\n    });\n    shellProcess.stdout.on('data', (data) => {\n      // eslint-disable-next-line no-console\n      console.log(data.trim());\n    });\n    await shellProcess.runCommand('node', ['index.js']);\n  }, emulatorUrl);\n\n  await waitFor(() => {\n    expect(logs).toEqual(expect.arrayContaining(['ENETDOWN']));\n  });\n});\n"
  },
  {
    "path": "tests/examples/apollo-server.example.js",
    "content": "/**\n * @typedef { typeof import(\"../../packages/nodebox\").Nodebox } Nodebox\n * @type {Nodebox} */\nconst Nodebox = window.Nodebox;\n\n/**\n * @param {string} emulatorUrl\n */\nwindow.runExample = async function (emulatorUrl) {\n  const emulator = new Nodebox({\n    runtimeUrl: emulatorUrl,\n    iframe: document.getElementById('frame'),\n  });\n\n  await emulator.connect();\n\n  // Initialize the file system with a Vite project.\n  await emulator.fs.init({\n    '/package.json': JSON.stringify({\n      dependencies: {\n        '@apollo/server': '4.1.1',\n        graphql: '16.6.0',\n      },\n    }),\n    '/index.js': `import { ApolloServer } from \"@apollo/server\";\n      import { startStandaloneServer } from \"@apollo/server/standalone\";\n      \n      // The GraphQL schema\n      const typeDefs = \\`#graphql\n        type Query {\n          hello: String\n        }\n      \\`;\n      \n      // A map of functions which return data for the schema.\n      const resolvers = {\n        Query: {\n          hello: () => \"world\",\n        },\n      };\n      \n      const server = new ApolloServer({\n        typeDefs,\n        resolvers,\n      });\n        \n      const { url } = await startStandaloneServer(server, {\n        listen: { port: 3000 },\n      });\n        \n      console.log(\\`🚀 Server ready at \\${url}\\`);\n      `,\n  });\n\n  // Run the Vite app.\n  const shellProcess = emulator.shell.create();\n  const shellInfo = await shellProcess.runCommand('node', ['index.js']);\n  shellProcess.on('exit', (...data) => console.error('Process exited:', ...data));\n  return shellInfo;\n};\n"
  },
  {
    "path": "tests/examples/astro.example.js",
    "content": "/**\n * @typedef { typeof import(\"../../packages/nodebox\").Nodebox } Nodebox\n * @type {Nodebox} */\nconst Nodebox = window.Nodebox;\n\n/**\n * @param {string} emulatorUrl\n */\nwindow.runExample = async function (emulatorUrl) {\n  const emulator = new Nodebox({\n    runtimeUrl: emulatorUrl,\n    iframe: document.getElementById('frame'),\n  });\n\n  await emulator.connect();\n\n  await emulator.fs.init({\n    '/src/styles.css': `body {\n  font-family: sans-serif;\n  -webkit-font-smoothing: auto;\n  -moz-font-smoothing: auto;\n  -moz-osx-font-smoothing: grayscale;\n  font-smoothing: auto;\n  text-rendering: optimizeLegibility;\n  font-smooth: always;\n  -webkit-tap-highlight-color: transparent;\n  -webkit-touch-callout: none;\n}\nh1 {\n  font-size: 1.5rem;\n}`,\n    '/src/pages/index.astro': `---\nimport \"../styles.css\";\nconst data = \"world\";\n---\n\n<h1>Hello {data}</h1>\n\n<style>\n  h1 {\n    font-size: 1.5rem;\n  }\n</style>`,\n\n    '/package.json': JSON.stringify({\n      dependencies: {\n        astro: '^1.6.12',\n        'esbuild-wasm': '^0.15.16',\n      },\n      scripts: {\n        dev: 'astro dev',\n      },\n    }),\n  });\n\n  const shellProcess = emulator.shell.create();\n  const shellInfo = await shellProcess.runCommand('astro', ['dev'], {\n    env: { ASTRO_TELEMETRY_DISABLED: '1' },\n  });\n  shellProcess.on('exit', (...data) => console.error('Process exited:', ...data));\n  return shellInfo;\n};\n"
  },
  {
    "path": "tests/examples/console.example.js",
    "content": "/**\n * @typedef { typeof import(\"../../packages/nodebox\").Nodebox } Nodebox\n * @type {Nodebox} */\nconst Nodebox = window.Nodebox;\n\n/**\n * @param {string} emulatorUrl\n */\nwindow.runExample = async function (emulatorUrl) {\n  const foo = async () => {\n    const { Nodebox } = window;\n\n    const emulator = new Nodebox({\n      runtimeUrl: emulatorUrl,\n      iframe: document.getElementById('frame'),\n    });\n\n    await emulator.connect();\n    await emulator.fs.init({\n      'index.mjs': `console.group(\"a\", \"b\");\n      console.log(\"test\");\n      console.group(\"bla\");\n      console.warn(\"tada\");\n      console.groupEnd();\n      console.error(\"woops\");\n      console.groupEnd();\n      console.table({a: \"b\", nested: {aa: \"bbb\"}});\n      console.table([\"aaa\", \"bbb\"]);\n      console.table([\"aaa\", \"bbb\"], []);\n      console.table({a: \"b\", nested: {aa: \"bbb\", bb: \"aaa\"}}, [\"aa\"]);`,\n    });\n\n    const shellProcess = emulator.shell.create();\n    shellProcess.stdout.on('data', (data) => {\n      console.log(data);\n    });\n    shellProcess.stderr.on('data', (data) => {\n      console.error(data);\n    });\n    await shellProcess.runCommand('node', ['index.mjs']);\n  };\n\n  foo();\n};\n"
  },
  {
    "path": "tests/examples/eslint.example.js",
    "content": "/**\n * @typedef { typeof import(\"../../packages/nodebox\").Nodebox } Nodebox\n * @type {Nodebox} */\nconst Nodebox = window.Nodebox;\n\n/**\n * @param {string} emulatorUrl\n */\nwindow.runExample = async function (emulatorUrl) {\n  const emulator = new Nodebox({\n    runtimeUrl: emulatorUrl,\n    iframe: document.getElementById('frame'),\n  });\n\n  await emulator.connect();\n\n  await emulator.fs.init({\n    '/index.js': `const http = require('http');\nconst hostname = '127.0.0.1';\nconst port = 3000;\nconst server = http.createServer((req, res) => {\n  res.statusCode = 200;\n  res.setHeader('Content-Type', 'text/html');\n  res.end('Hello world');\n});\n\nconsole.log(\"foo\");\n\nserver.listen(port, hostname, () => {\n  console.log(\\`Server running at http://\\${hostname}:\\${port}/\\`);\n});`,\n\n    '/.eslintrc.js': `module.exports = {\n  env: {\n    browser: true,\n    es2021: true\n  },\n  parserOptions: {\n    ecmaVersion: 'latest',\n    sourceType: 'module'\n  },\n  rules: { \n    \"semi\": [\"error\", \"always\"],\n    \"no-console\": [\"error\", { allow: [\"warn\", \"error\"] }]\n  }\n}\n`,\n\n    '/package.json': JSON.stringify({\n      devDependencies: {\n        eslint: '^8.0.1',\n      },\n      scripts: { start: 'eslint index.js' },\n      main: 'index.js',\n    }),\n  });\n\n  const shellProcess = emulator.shell.create();\n\n  return new Promise(async (resolve) => {\n    shellProcess.stdout.on('data', (data) => {\n      return resolve(data);\n    });\n\n    return await shellProcess.runCommand('eslint', ['index.js']);\n  });\n};\n"
  },
  {
    "path": "tests/examples/exec.example.js",
    "content": "/**\n * @typedef { typeof import(\"../../packages/nodebox\").Nodebox } Nodebox\n * @type {Nodebox} */\nconst Nodebox = window.Nodebox;\n\n/**\n * @param {string} emulatorUrl\n */\nwindow.runExample = async function (emulatorUrl) {\n  const foo = async () => {\n    const { Nodebox } = window;\n\n    const emulator = new Nodebox({\n      runtimeUrl: emulatorUrl,\n      iframe: document.getElementById('frame'),\n    });\n\n    await emulator.connect();\n    await emulator.fs.init({\n      'foo.js': `process.stdout.write('Hello world');\nprocess.exit();`,\n\n      'index.js': `const { exec } = require('node:child_process');\n    \nexec(\"./foo\", { encoding: \"utf8\", timeout: 5_000 }, (err, stdout, stderr) => {\n  console.log(\"Exec output: \" + stdout)\n});`,\n    });\n\n    const shellProcess = emulator.shell.create();\n\n    return new Promise(async (resolve) => {\n      shellProcess.stdout.on('data', (data) => {\n        return resolve(data);\n      });\n\n      await shellProcess.runCommand('node', ['index.js']);\n    });\n  };\n\n  console.log(await foo());\n};\n"
  },
  {
    "path": "tests/examples/express.example.js",
    "content": "/**\n * @typedef { typeof import(\"../../packages/nodebox\").Nodebox } Nodebox\n * @type {Nodebox} */\nconst Nodebox = window.Nodebox;\n\n/**\n * @param {string} emulatorUrl\n */\nwindow.runExample = async function (emulatorUrl) {\n  const emulator = new Nodebox({\n    runtimeUrl: emulatorUrl,\n    iframe: document.getElementById('frame'),\n  });\n\n  await emulator.connect();\n\n  await emulator.fs.init({\n    'package.json': JSON.stringify({\n      dependencies: {\n        express: '4.18.2',\n      },\n    }),\n    'index.js': `const express = require('express')\nconst app = express()\nconst port = 3000\n\napp.get('/', (req, res) => {\n  res.send('Hello world')\n})\n\napp.listen(port, () => {\n  console.log(\\`Example app listening on port \\${port}\\`)\n})`,\n  });\n\n  const shellProcess = emulator.shell.create();\n  const shellInfo = await shellProcess.runCommand('node', ['index.js']);\n  shellProcess.on('exit', (...data) => console.error('Process exited:', ...data));\n  return shellInfo;\n};\n"
  },
  {
    "path": "tests/examples/fastify.example.js",
    "content": "/**\n * @typedef { typeof import(\"../../packages/nodebox\").Nodebox } Nodebox\n * @type {Nodebox} */\nconst Nodebox = window.Nodebox;\n\n/**\n * @param {string} emulatorUrl\n */\nwindow.runExample = async function (emulatorUrl) {\n  const emulator = new Nodebox({\n    runtimeUrl: emulatorUrl,\n    iframe: document.getElementById('frame'),\n  });\n\n  await emulator.connect();\n\n  await emulator.fs.init({\n    'package.json': JSON.stringify({\n      dependencies: {\n        fastify: 'latest',\n      },\n    }),\n    'index.js': `// Require the framework and instantiate it\nconst fastify = require('fastify')({ logger: true })\n\n// Declare a route\nfastify.get('/', async (request, reply) => {\n  return { hello: 'world' }\n})\n\n// Run the server!\nconst start = async () => {\n  try {\n    await fastify.listen({ port: 3000 })\n  } catch (err) {\n    fastify.log.error(err)\n    process.exit(1)\n  }\n}\nstart()`,\n  });\n\n  const shellProcess = emulator.shell.create();\n  const shellInfo = await shellProcess.runCommand('node', ['index.js']);\n  shellProcess.on('exit', (...data) => console.error('Process exited:', ...data));\n  return shellInfo;\n};\n"
  },
  {
    "path": "tests/examples/fs-symlinks.example.js",
    "content": "/**\n * @typedef { typeof import(\"../../packages/nodebox\").Nodebox } Nodebox\n * @type {Nodebox} */\nconst Nodebox = window.Nodebox;\n\n/**\n * @param {string} emulatorUrl\n */\nwindow.runExample = async function (emulatorUrl) {\n  const emulator = new Nodebox({\n    runtimeUrl: emulatorUrl,\n    iframe: document.getElementById('frame'),\n  });\n\n  await emulator.connect();\n\n  await emulator.fs.init({\n    'package.json': JSON.stringify({\n      dependencies: {\n        express: '4.18.2',\n      },\n    }),\n    'index.js': `const fs = require(\"fs\");\nconst path = require(\"path\");\n\nfs.mkdirSync(\"src\");\nfs.mkdirSync(\"src/something\");\nfs.mkdirSync(\"out\");\nfs.symlinkSync(path.join(__dirname, \"src/something\"), \"out/src\", \"dir\");\nfs.writeFileSync(\"out/src/info.txt\", \"hello world\", \"utf-8\");\nfs.mkdirSync(\"out/src/sub-dir\");\nfs.writeFileSync(\"out/src/sub-dir/blabla.txt\", \"blabla\", \"utf-8\");\nconsole.log(fs.readFileSync(\"out/src/info.txt\", \"utf-8\"));\nconsole.log(fs.readFileSync(\"out/src/sub-dir/blabla.txt\", \"utf-8\"));\nconsole.log(fs.readdirSync(\"out/src\"));\nconsole.log(fs.readdirSync(\"out/src/sub-dir\"));\n`,\n  });\n\n  await emulator.fs.mkdir('/a/b/c').catch(console.error);\n  await emulator.fs.mkdir('/a/b/c', { recursive: true });\n  await emulator.fs.writeFile('/a/b/c/index.js', 'hello world!');\n  await emulator.fs.writeFile('/a/b/c/d/e/index.js', 'Lorem ipsum...').catch(console.error);\n  await emulator.fs.writeFile('/a/b/c/d/e/index.js', 'Lorem ipsum...', { recursive: true });\n\n  console.log('READ DIR', await emulator.fs.readdir('/a/b/c'));\n  console.log('STAT FILE', await emulator.fs.stat('/a/b/c/d/e/index.js'));\n  console.log('STAT DIR', await emulator.fs.stat('/a/b/c/'));\n\n  const shellProcess = emulator.shell.create();\n  return await shellProcess.runCommand('node', ['index.js']);\n};\n"
  },
  {
    "path": "tests/examples/fs-watch-file.example.js",
    "content": "/**\n * @typedef { typeof import(\"../../packages/nodebox\").Nodebox } Nodebox\n * @type {Nodebox} */\nconst Nodebox = window.Nodebox;\n\n/**\n * @param {string} emulatorUrl\n */\nwindow.runExample = async function (emulatorUrl) {\n  const emulator = new Nodebox({\n    runtimeUrl: emulatorUrl,\n    iframe: document.getElementById('frame'),\n  });\n\n  await emulator.connect();\n\n  await emulator.fs.init({\n    'package.json': JSON.stringify({\n      dependencies: {},\n    }),\n    'index.js': `const fs = require(\"fs\");\n\n// start watching a file\nfs.watchFile(\"example_file.txt\", (curr, prev) => {\n  console.log(\"The file was edited\");\n  console.log(\"Previous Modified Time:\", prev.mtime);\n  console.log(\"Current Modified Time:\", curr.mtime);\n});\n\n// make changes to the file before it has been stopped watching\nsetTimeout(() => fs.writeFileSync(\"example_file.txt\", \"File Contents are Edited\"), 1000);\n\n// Stop watching the file\nsetTimeout(() => {\n  fs.unwatchFile(\"example_file.txt\");\n  console.log(\"File has been stopped watching\");\n}, 6000);\n\n// Make Changes to the file after it has stopped watching\nsetTimeout(() => {\n  fs.writeFileSync(\"example_file.txt\", \"File Contents are Edited Again\");\n  console.log(\"Edited file again after watcher stopped\");\n}, 7000);\n`,\n  });\n\n  const shellProcess = emulator.shell.create();\n  return await shellProcess.runCommand('node', ['index.js']);\n};\n"
  },
  {
    "path": "tests/examples/http-server.example.js",
    "content": "/**\n * @typedef { typeof import(\"../../packages/nodebox\").Nodebox } Nodebox\n * @type {Nodebox} */\nconst Nodebox = window.Nodebox;\n\n/**\n * @param {string} emulatorUrl\n */\nwindow.runExample = async function (emulatorUrl) {\n  const emulator = new Nodebox({\n    runtimeUrl: emulatorUrl,\n    iframe: document.getElementById('frame'),\n  });\n\n  await emulator.connect();\n\n  await emulator.fs.init({\n    'index.js': `const http = require('http');\n\nconst hostname = '127.0.0.1';\nconst port = 3000;\n\nconst server = http.createServer((req, res) => {\n  res.statusCode = 200;\n  res.setHeader('Content-Type', 'text/html');\n  res.end('Hello world');\n});\n\nserver.listen(port, hostname, () => {\n  console.log(\\`Server running at http://\\${hostname}:\\${port}/\\`);\n});`,\n  });\n\n  const shellProcess = emulator.shell.create();\n  const shellInfo = await shellProcess.runCommand('node', ['index.js']);\n  shellProcess.on('exit', (...data) => console.error('Process exited:', ...data));\n  return shellInfo;\n};\n"
  },
  {
    "path": "tests/examples/multiple.example.js",
    "content": "/**\n * @typedef {typeof import(\"../../packages/nodebox\").Nodebox} Nodebox\n * @type {Nodebox} */\nconst Nodebox = window.Nodebox;\n\n/**\n * @param {string} emulatorUrl\n */\nwindow.runExample = async function (emulatorUrl) {\n  const emulator = new Nodebox({\n    runtimeUrl: emulatorUrl,\n    iframe: document.getElementById('frame'),\n    /**\n     * @note Use a mock CDN to return non-existing dependencies.\n     */\n    cdnUrl: 'https://localhost:3080',\n  });\n\n  await emulator.connect();\n\n  // Initialize a project that uses multiple major versions\n  // of the same dependency at the same time.\n  await emulator.fs.init({\n    'package.json': JSON.stringify({\n      dependencies: {\n        'parent-a': '^1.0.0',\n        'parent-b': '^1.0.0',\n      },\n    }),\n    'index.js': `\nconst http = require('http');\nconst parentA = require('parent-a');\nconst parentB = require('parent-b');\n\nconst server = http.createServer((req, res) => {\n  res.statusCode = 200;\n  res.setHeader('Content-Type', 'text/html');\n  res.end(\\`\n<p id=\"parent-a\">\\${parentA.childVersion}</p>\n<p id=\"parent-b\">\\${parentB.childVersion}</p>\n  \\`)\n});\n\nserver.listen(3000, '127.0.0.1', () => {\n  console.log(\\`Server running at http://127.0.0.1:3000\\`);\n});`,\n  });\n\n  const shellProcess = emulator.shell.create();\n  const shellInfo = await shellProcess.runCommand('node', ['index.js']);\n  shellProcess.on('exit', (...data) => console.error('Process exited:', ...data));\n  return shellInfo;\n};\n"
  },
  {
    "path": "tests/examples/next-13-app-simple.example.js",
    "content": "/**\n * @typedef { typeof import(\"../../packages/nodebox\").Nodebox } Nodebox\n * @type {Nodebox} */\nconst Nodebox = window.Nodebox;\n\n/**\n * @param {string} emulatorUrl\n */\nwindow.runExample = async function (emulatorUrl) {\n  const emulator = new Nodebox({\n    runtimeUrl: emulatorUrl,\n    iframe: document.getElementById('frame'),\n  });\n\n  await emulator.connect();\n\n  await emulator.fs.init({\n    '/app/layout.jsx': `export default function RootLayout({ children }) {\n  return (\n    <html>\n      <head></head>\n      <body>{children}</body>\n    </html>\n  );\n}`,\n    '/app/page.jsx': `async function fetchData(params) {\n  const res = await fetch(\n    \\`https://jsonplaceholder.typicode.com/posts/\\${params.id}\\`,\n    { cache: \"no-store\" }\n  );\n  const data = await res.json();\n\n  return data;\n}\n\nexport default async function Page() {\n  const data = await fetchData({ id: 1 });\n\n  return (\n    <div>\n      <h1>{data.title}</h1>\n      <p>{data.body}</p>\n    </div>\n  );\n}`,\n    'next.config.js': `/** @type {import('next').NextConfig} */\nconst nextConfig = {\n  reactStrictMode: true,\n  swcMinify: true,\n  experimental: { appDir: true },\n};\nmodule.exports = nextConfig;`,\n    'package.json': JSON.stringify({\n      scripts: {\n        dev: 'next dev',\n      },\n      dependencies: {\n        next: '13.1.6',\n        react: '18.2.0',\n        'react-dom': '18.2.0',\n        '@next/swc-wasm-nodejs': '13.1.6',\n        '@swc/helpers': '0.4.14',\n      },\n    }),\n  });\n\n  // Run the Vite app.\n  const shellProcess = emulator.shell.create();\n  shellProcess.stderr.on('data', (data) => {\n    console.error(data);\n  });\n  shellProcess.stdout.on('data', (data) => {\n    // eslint-disable-next-line no-console\n    console.log(data);\n  });\n  return await shellProcess.runCommand('next', ['dev'], {\n    env: {\n      NEXT_IGNORE_INCORRECT_LOCKFILE: 'true',\n      NEXT_TELEMETRY_DISABLED: 'true',\n      __NEXT_DISABLE_MEMORY_WATCHER: 'true',\n    },\n  });\n};\n"
  },
  {
    "path": "tests/examples/next-13-app.example.js",
    "content": "/**\n * @typedef { typeof import(\"../../packages/nodebox\").Nodebox } Nodebox\n * @type {Nodebox} */\nconst Nodebox = window.Nodebox;\n\n/**\n * @param {string} emulatorUrl\n */\nwindow.runExample = async function (emulatorUrl) {\n  const emulator = new Nodebox({\n    runtimeUrl: emulatorUrl,\n    iframe: document.getElementById('frame'),\n  });\n\n  await emulator.connect();\n\n  await emulator.fs.init({\n    '/public/next.svg': `<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 394 80\"><path fill=\"#000\" d=\"M262 0h68.5v12.7h-27.2v66.6h-13.6V12.7H262V0ZM149 0v12.7H94v20.4h44.3v12.6H94v21h55v12.6H80.5V0h68.7zm34.3 0h-17.8l63.8 79.4h17.9l-32-39.7 32-39.6h-17.9l-23 28.6-23-28.6zm18.3 56.7-9-11-27.1 33.7h17.8l18.3-22.7z\"/><path fill=\"#000\" d=\"M81 79.3 17 0H0v79.3h13.6V17l50.2 62.3H81Zm252.6-.4c-1 0-1.8-.4-2.5-1s-1.1-1.6-1.1-2.6.3-1.8 1-2.5 1.6-1 2.6-1 1.8.3 2.5 1a3.4 3.4 0 0 1 .6 4.3 3.7 3.7 0 0 1-3 1.8zm23.2-33.5h6v23.3c0 2.1-.4 4-1.3 5.5a9.1 9.1 0 0 1-3.8 3.5c-1.6.8-3.5 1.3-5.7 1.3-2 0-3.7-.4-5.3-1s-2.8-1.8-3.7-3.2c-.9-1.3-1.4-3-1.4-5h6c.1.8.3 1.6.7 2.2s1 1.2 1.6 1.5c.7.4 1.5.5 2.4.5 1 0 1.8-.2 2.4-.6a4 4 0 0 0 1.6-1.8c.3-.8.5-1.8.5-3V45.5zm30.9 9.1a4.4 4.4 0 0 0-2-3.3 7.5 7.5 0 0 0-4.3-1.1c-1.3 0-2.4.2-3.3.5-.9.4-1.6 1-2 1.6a3.5 3.5 0 0 0-.3 4c.3.5.7.9 1.3 1.2l1.8 1 2 .5 3.2.8c1.3.3 2.5.7 3.7 1.2a13 13 0 0 1 3.2 1.8 8.1 8.1 0 0 1 3 6.5c0 2-.5 3.7-1.5 5.1a10 10 0 0 1-4.4 3.5c-1.8.8-4.1 1.2-6.8 1.2-2.6 0-4.9-.4-6.8-1.2-2-.8-3.4-2-4.5-3.5a10 10 0 0 1-1.7-5.6h6a5 5 0 0 0 3.5 4.6c1 .4 2.2.6 3.4.6 1.3 0 2.5-.2 3.5-.6 1-.4 1.8-1 2.4-1.7a4 4 0 0 0 .8-2.4c0-.9-.2-1.6-.7-2.2a11 11 0 0 0-2.1-1.4l-3.2-1-3.8-1c-2.8-.7-5-1.7-6.6-3.2a7.2 7.2 0 0 1-2.4-5.7 8 8 0 0 1 1.7-5 10 10 0 0 1 4.3-3.5c2-.8 4-1.2 6.4-1.2 2.3 0 4.4.4 6.2 1.2 1.8.8 3.2 2 4.3 3.4 1 1.4 1.5 3 1.5 5h-5.8z\"/></svg>`,\n    '/public/thirteen.svg': `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"31\" fill=\"none\"><g opacity=\".9\"><path fill=\"url(#a)\" d=\"M13 .4v29.3H7V6.3h-.2L0 10.5V5L7.2.4H13Z\"/><path fill=\"url(#b)\" d=\"M28.8 30.1c-2.2 0-4-.3-5.7-1-1.7-.8-3-1.8-4-3.1a7.7 7.7 0 0 1-1.4-4.6h6.2c0 .8.3 1.4.7 2 .4.5 1 .9 1.7 1.2.7.3 1.6.4 2.5.4 1 0 1.7-.2 2.5-.5.7-.3 1.3-.8 1.7-1.4.4-.6.6-1.2.6-2s-.2-1.5-.7-2.1c-.4-.6-1-1-1.8-1.4-.8-.4-1.8-.5-2.9-.5h-2.7v-4.6h2.7a6 6 0 0 0 2.5-.5 4 4 0 0 0 1.7-1.3c.4-.6.6-1.3.6-2a3.5 3.5 0 0 0-2-3.3 5.6 5.6 0 0 0-4.5 0 4 4 0 0 0-1.7 1.2c-.4.6-.6 1.2-.6 2h-6c0-1.7.6-3.2 1.5-4.5 1-1.3 2.2-2.3 3.8-3C25 .4 26.8 0 28.8 0s3.8.4 5.3 1.1c1.5.7 2.7 1.7 3.6 3a7.2 7.2 0 0 1 1.2 4.2c0 1.6-.5 3-1.5 4a7 7 0 0 1-4 2.2v.2c2.2.3 3.8 1 5 2.2a6.4 6.4 0 0 1 1.6 4.6c0 1.7-.5 3.1-1.4 4.4a9.7 9.7 0 0 1-4 3.1c-1.7.8-3.7 1.1-5.8 1.1Z\"/></g><defs><linearGradient id=\"a\" x1=\"20\" x2=\"20\" y1=\"0\" y2=\"30.1\" gradientUnits=\"userSpaceOnUse\"><stop/><stop offset=\"1\" stop-color=\"#3D3D3D\"/></linearGradient><linearGradient id=\"b\" x1=\"20\" x2=\"20\" y1=\"0\" y2=\"30.1\" gradientUnits=\"userSpaceOnUse\"><stop/><stop offset=\"1\" stop-color=\"#3D3D3D\"/></linearGradient></defs></svg>`,\n    '/public/vercel.svg': `<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 283 64\"><path fill=\"black\" d=\"M141 16c-11 0-19 7-19 18s9 18 20 18c7 0 13-3 16-7l-7-5c-2 3-6 4-9 4-5 0-9-3-10-7h28v-3c0-11-8-18-19-18zm-9 15c1-4 4-7 9-7s8 3 9 7h-18zm117-15c-11 0-19 7-19 18s9 18 20 18c6 0 12-3 16-7l-8-5c-2 3-5 4-8 4-5 0-9-3-11-7h28l1-3c0-11-8-18-19-18zm-10 15c2-4 5-7 10-7s8 3 9 7h-19zm-39 3c0 6 4 10 10 10 4 0 7-2 9-5l8 5c-3 5-9 8-17 8-11 0-19-7-19-18s8-18 19-18c8 0 14 3 17 8l-8 5c-2-3-5-5-9-5-6 0-10 4-10 10zm83-29v46h-9V5h9zM37 0l37 64H0L37 0zm92 5-27 48L74 5h10l18 30 17-30h10zm59 12v10l-3-1c-6 0-10 4-10 10v15h-9V17h9v9c0-5 6-9 13-9z\"/></svg>`,\n    '/src/app/globals.css': `:root {\n  --max-width: 1100px;\n  --border-radius: 12px;\n  --font-mono: ui-monospace, Menlo, Monaco, 'Cascadia Mono', 'Segoe UI Mono',\n    'Roboto Mono', 'Oxygen Mono', 'Ubuntu Monospace', 'Source Code Pro',\n    'Fira Mono', 'Droid Sans Mono', 'Courier New', monospace;\n\n  --foreground-rgb: 0, 0, 0;\n  --background-start-rgb: 214, 219, 220;\n  --background-end-rgb: 255, 255, 255;\n\n  --primary-glow: conic-gradient(\n    from 180deg at 50% 50%,\n    #16abff33 0deg,\n    #0885ff33 55deg,\n    #54d6ff33 120deg,\n    #0071ff33 160deg,\n    transparent 360deg\n  );\n  --secondary-glow: radial-gradient(\n    rgba(255, 255, 255, 1),\n    rgba(255, 255, 255, 0)\n  );\n\n  --tile-start-rgb: 239, 245, 249;\n  --tile-end-rgb: 228, 232, 233;\n  --tile-border: conic-gradient(\n    #00000080,\n    #00000040,\n    #00000030,\n    #00000020,\n    #00000010,\n    #00000010,\n    #00000080\n  );\n\n  --callout-rgb: 238, 240, 241;\n  --callout-border-rgb: 172, 175, 176;\n  --card-rgb: 180, 185, 188;\n  --card-border-rgb: 131, 134, 135;\n}\n\n@media (prefers-color-scheme: dark) {\n  :root {\n    --foreground-rgb: 255, 255, 255;\n    --background-start-rgb: 0, 0, 0;\n    --background-end-rgb: 0, 0, 0;\n\n    --primary-glow: radial-gradient(rgba(1, 65, 255, 0.4), rgba(1, 65, 255, 0));\n    --secondary-glow: linear-gradient(\n      to bottom right,\n      rgba(1, 65, 255, 0),\n      rgba(1, 65, 255, 0),\n      rgba(1, 65, 255, 0.3)\n    );\n\n    --tile-start-rgb: 2, 13, 46;\n    --tile-end-rgb: 2, 5, 19;\n    --tile-border: conic-gradient(\n      #ffffff80,\n      #ffffff40,\n      #ffffff30,\n      #ffffff20,\n      #ffffff10,\n      #ffffff10,\n      #ffffff80\n    );\n\n    --callout-rgb: 20, 20, 20;\n    --callout-border-rgb: 108, 108, 108;\n    --card-rgb: 100, 100, 100;\n    --card-border-rgb: 200, 200, 200;\n  }\n}\n\n* {\n  box-sizing: border-box;\n  padding: 0;\n  margin: 0;\n}\n\nhtml,\nbody {\n  max-width: 100vw;\n  overflow-x: hidden;\n}\n\nbody {\n  color: rgb(var(--foreground-rgb));\n  background: linear-gradient(\n      to bottom,\n      transparent,\n      rgb(var(--background-end-rgb))\n    )\n    rgb(var(--background-start-rgb));\n}\n\na {\n  color: inherit;\n  text-decoration: none;\n}\n\n@media (prefers-color-scheme: dark) {\n  html {\n    color-scheme: dark;\n  }\n}\n`,\n    '/src/app/head.tsx': `export default function Head() {\n  return (\n    <>\n      <title>Create Next App</title>\n      <meta content=\"width=device-width, initial-scale=1\" name=\"viewport\" />\n      <meta name=\"description\" content=\"Generated by create next app\" />\n      <link rel=\"icon\" href=\"/favicon.ico\" />\n    </>\n  )\n}\n`,\n    '/src/app/layout.tsx': `import './globals.css'\n\nexport default function RootLayout({\n  children,\n}: {\n  children: React.ReactNode\n}) {\n  return (\n    <html lang=\"en\">\n      {/*\n        <head /> will contain the components returned by the nearest parent\n        head.tsx. Find out more at https://beta.nextjs.org/docs/api-reference/file-conventions/head\n      */}\n      <head />\n      <body>{children}</body>\n    </html>\n  )\n}\n`,\n    '/src/app/page.module.css': `.main {\n  display: flex;\n  flex-direction: column;\n  justify-content: space-between;\n  align-items: center;\n  padding: 6rem;\n  min-height: 100vh;\n}\n\n.description {\n  display: inherit;\n  justify-content: inherit;\n  align-items: inherit;\n  font-size: 0.85rem;\n  max-width: var(--max-width);\n  width: 100%;\n  z-index: 2;\n  font-family: var(--font-mono);\n}\n\n.description a {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  gap: 0.5rem;\n}\n\n.description p {\n  position: relative;\n  margin: 0;\n  padding: 1rem;\n  background-color: rgba(var(--callout-rgb), 0.5);\n  border: 1px solid rgba(var(--callout-border-rgb), 0.3);\n  border-radius: var(--border-radius);\n}\n\n.code {\n  font-weight: 700;\n  font-family: var(--font-mono);\n}\n\n.grid {\n  display: grid;\n  grid-template-columns: repeat(3, minmax(33%, auto));\n  width: var(--max-width);\n  max-width: 100%;\n}\n\n.card {\n  padding: 1rem 1.2rem;\n  border-radius: var(--border-radius);\n  background: rgba(var(--card-rgb), 0);\n  border: 1px solid rgba(var(--card-border-rgb), 0);\n  transition: background 200ms, border 200ms;\n}\n\n.card span {\n  display: inline-block;\n  transition: transform 200ms;\n}\n\n.card h2 {\n  font-weight: 600;\n  margin-bottom: 0.7rem;\n}\n\n.card p {\n  margin: 0;\n  opacity: 0.6;\n  font-size: 0.9rem;\n  line-height: 1.5;\n  max-width: 34ch;\n}\n\n.center {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  position: relative;\n  padding: 4rem 0;\n}\n\n.center::before {\n  background: var(--secondary-glow);\n  border-radius: 50%;\n  width: 480px;\n  height: 360px;\n  margin-left: -400px;\n}\n\n.center::after {\n  background: var(--primary-glow);\n  width: 240px;\n  height: 180px;\n  z-index: -1;\n}\n\n.center::before,\n.center::after {\n  content: '';\n  left: 50%;\n  position: absolute;\n  filter: blur(45px);\n  transform: translateZ(0);\n}\n\n.logo,\n.thirteen {\n  position: relative;\n}\n\n.thirteen {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  width: 75px;\n  height: 75px;\n  padding: 25px 10px;\n  margin-left: 16px;\n  transform: translateZ(0);\n  border-radius: var(--border-radius);\n  overflow: hidden;\n  box-shadow: 0px 2px 8px -1px #0000001a;\n}\n\n.thirteen::before,\n.thirteen::after {\n  content: '';\n  position: absolute;\n  z-index: -1;\n}\n\n/* Conic Gradient Animation */\n.thirteen::before {\n  animation: 6s rotate linear infinite;\n  width: 200%;\n  height: 200%;\n  background: var(--tile-border);\n}\n\n/* Inner Square */\n.thirteen::after {\n  inset: 0;\n  padding: 1px;\n  border-radius: var(--border-radius);\n  background: linear-gradient(\n    to bottom right,\n    rgba(var(--tile-start-rgb), 1),\n    rgba(var(--tile-end-rgb), 1)\n  );\n  background-clip: content-box;\n}\n\n/* Enable hover only on non-touch devices */\n@media (hover: hover) and (pointer: fine) {\n  .card:hover {\n    background: rgba(var(--card-rgb), 0.1);\n    border: 1px solid rgba(var(--card-border-rgb), 0.15);\n  }\n\n  .card:hover span {\n    transform: translateX(4px);\n  }\n}\n\n@media (prefers-reduced-motion) {\n  .thirteen::before {\n    animation: none;\n  }\n\n  .card:hover span {\n    transform: none;\n  }\n}\n\n/* Mobile and Tablet */\n@media (max-width: 1023px) {\n  .content {\n    padding: 4rem;\n  }\n\n  .grid {\n    grid-template-columns: 1fr;\n    margin-bottom: 120px;\n    max-width: 320px;\n    text-align: center;\n  }\n\n  .card {\n    padding: 1rem 2.5rem;\n  }\n\n  .card h2 {\n    margin-bottom: 0.5rem;\n  }\n\n  .center {\n    padding: 8rem 0 6rem;\n  }\n\n  .center::before {\n    transform: none;\n    height: 300px;\n  }\n\n  .description {\n    font-size: 0.8rem;\n  }\n\n  .description a {\n    padding: 1rem;\n  }\n\n  .description p,\n  .description div {\n    display: flex;\n    justify-content: center;\n    position: fixed;\n    width: 100%;\n  }\n\n  .description p {\n    align-items: center;\n    inset: 0 0 auto;\n    padding: 2rem 1rem 1.4rem;\n    border-radius: 0;\n    border: none;\n    border-bottom: 1px solid rgba(var(--callout-border-rgb), 0.25);\n    background: linear-gradient(\n      to bottom,\n      rgba(var(--background-start-rgb), 1),\n      rgba(var(--callout-rgb), 0.5)\n    );\n    background-clip: padding-box;\n    backdrop-filter: blur(24px);\n  }\n\n  .description div {\n    align-items: flex-end;\n    pointer-events: none;\n    inset: auto 0 0;\n    padding: 2rem;\n    height: 200px;\n    background: linear-gradient(\n      to bottom,\n      transparent 0%,\n      rgb(var(--background-end-rgb)) 40%\n    );\n    z-index: 1;\n  }\n}\n\n@media (prefers-color-scheme: dark) {\n  .vercelLogo {\n    filter: invert(1);\n  }\n\n  .logo,\n  .thirteen img {\n    filter: invert(1) drop-shadow(0 0 0.3rem #ffffff70);\n  }\n}\n\n@keyframes rotate {\n  from {\n    transform: rotate(360deg);\n  }\n  to {\n    transform: rotate(0deg);\n  }\n}\n`,\n    '/src/app/page.tsx': `import Image from 'next/image'\nimport { Inter } from '@next/font/google'\nimport styles from './page.module.css'\n\nconst inter = Inter({ subsets: ['latin'] })\n\nexport default function Home() {\n  return (\n    <main className={styles.main}>\n      <div className={styles.description}>\n        <p>\n          Get started by editing&nbsp;\n          <code className={styles.code}>src/app/page.tsx</code>\n        </p>\n        <div>\n          <a\n            href=\"https://vercel.com?utm_source=create-next-app&utm_medium=appdir-template&utm_campaign=create-next-app\"\n            target=\"_blank\"\n            rel=\"noopener noreferrer\"\n          >\n            By{' '}\n            <Image\n              src=\"/vercel.svg\"\n              alt=\"Vercel Logo\"\n              className={styles.vercelLogo}\n              width={100}\n              height={24}\n              priority\n            />\n          </a>\n        </div>\n      </div>\n\n      <div className={styles.center}>\n        <Image\n          className={styles.logo}\n          src=\"/next.svg\"\n          alt=\"Next.js Logo\"\n          width={180}\n          height={37}\n          priority\n        />\n        <div className={styles.thirteen}>\n          <Image src=\"/thirteen.svg\" alt=\"13\" width={40} height={31} priority />\n        </div>\n      </div>\n\n      <div className={styles.grid}>\n        <a\n          href=\"https://beta.nextjs.org/docs?utm_source=create-next-app&utm_medium=appdir-template&utm_campaign=create-next-app\"\n          className={styles.card}\n          target=\"_blank\"\n          rel=\"noopener noreferrer\"\n        >\n          <h2 className={inter.className}>\n            Docs <span>-&gt;</span>\n          </h2>\n          <p className={inter.className}>\n            Find in-depth information about Next.js features and API.\n          </p>\n        </a>\n\n        <a\n          href=\"https://vercel.com/templates?framework=next.js&utm_source=create-next-app&utm_medium=appdir-template&utm_campaign=create-next-app\"\n          className={styles.card}\n          target=\"_blank\"\n          rel=\"noopener noreferrer\"\n        >\n          <h2 className={inter.className}>\n            Templates <span>-&gt;</span>\n          </h2>\n          <p className={inter.className}>Explore the Next.js 13 playground.</p>\n        </a>\n\n        <a\n          href=\"https://vercel.com/new?utm_source=create-next-app&utm_medium=appdir-template&utm_campaign=create-next-app\"\n          className={styles.card}\n          target=\"_blank\"\n          rel=\"noopener noreferrer\"\n        >\n          <h2 className={inter.className}>\n            Deploy <span>-&gt;</span>\n          </h2>\n          <p className={inter.className}>\n            Instantly deploy your Next.js site to a shareable URL with Vercel.\n          </p>\n        </a>\n      </div>\n    </main>\n  )\n}\n`,\n    '/src/pages/api/hello.ts': `// Next.js API route support: https://nextjs.org/docs/api-routes/introduction\nimport type { NextApiRequest, NextApiResponse } from 'next'\n\ntype Data = {\n  name: string\n}\n\nexport default function handler(\n  req: NextApiRequest,\n  res: NextApiResponse<Data>\n) {\n  res.status(200).json({ name: 'John Doe' })\n}\n`,\n    '/next-env.d.ts': `/// <reference types=\"next\" />\n/// <reference types=\"next/image-types/global\" />\n\n// NOTE: This file should not be edited\n// see https://nextjs.org/docs/basic-features/typescript for more information.\n`,\n    '/.env.development': `NEXT_TELEMETRY_DISABLED=1\n__NEXT_DISABLE_MEMORY_WATCHER=1\n`,\n    '/tsconfig.json': JSON.stringify({\n      compilerOptions: {\n        target: 'es5',\n        lib: ['dom', 'dom.iterable', 'esnext'],\n        allowJs: true,\n        skipLibCheck: true,\n        strict: true,\n        forceConsistentCasingInFileNames: true,\n        noEmit: true,\n        esModuleInterop: true,\n        module: 'esnext',\n        moduleResolution: 'node',\n        resolveJsonModule: true,\n        isolatedModules: true,\n        jsx: 'preserve',\n        incremental: true,\n        plugins: [\n          {\n            name: 'next',\n          },\n        ],\n        baseUrl: '.',\n        paths: {\n          '@/*': ['./src/*'],\n        },\n      },\n      include: ['next-env.d.ts', '**/*.ts', '**/*.tsx', '.next/types/**/*.ts'],\n      exclude: ['node_modules'],\n    }),\n    '/package.json': JSON.stringify({\n      name: 'next-13-app',\n      version: '0.1.0',\n      private: true,\n      scripts: {\n        dev: 'next dev',\n        build: 'next build',\n        start: 'next start',\n        lint: 'next lint',\n      },\n      dependencies: {\n        '@next/font': '13.1.6',\n        '@types/node': '18.11.18',\n        '@types/react': '18.0.27',\n        '@types/react-dom': '18.0.10',\n        next: '13.1.6',\n        '@next/swc-wasm-nodejs': '13.1.6',\n        react: '18.2.0',\n        'react-dom': '18.2.0',\n        typescript: '4.9.5',\n      },\n    }),\n  });\n\n  // Run the Vite app.\n  const shellProcess = emulator.shell.create();\n  return await shellProcess.runCommand('next', ['dev'], {\n    env: {\n      NEXT_IGNORE_INCORRECT_LOCKFILE: 'true',\n      NEXT_TELEMETRY_DISABLED: 'true',\n      __NEXT_DISABLE_MEMORY_WATCHER: 'true',\n    },\n  });\n};\n"
  },
  {
    "path": "tests/examples/next-13.example.js",
    "content": "/**\n * @typedef { typeof import(\"../../packages/nodebox\").Nodebox } Nodebox\n * @type {Nodebox} */\nconst Nodebox = window.Nodebox;\n\n/**\n * @param {string} emulatorUrl\n */\nwindow.runExample = async function (emulatorUrl) {\n  const emulator = new Nodebox({\n    runtimeUrl: emulatorUrl,\n    iframe: document.getElementById('frame'),\n  });\n\n  await emulator.connect();\n\n  await emulator.fs.init({\n    '/src/styles.css': `body {\n  font-family: sans-serif;\n  -webkit-font-smoothing: auto;\n  -moz-font-smoothing: auto;\n  -moz-osx-font-smoothing: grayscale;\n  font-smoothing: auto;\n  text-rendering: optimizeLegibility;\n  font-smooth: always;\n  -webkit-tap-highlight-color: transparent;\n  -webkit-touch-callout: none;\n}\n\nh1 {\n  font-size: 1.5rem;\n}\n`,\n    '/src/pages/_app.tsx': `import type { AppProps } from \"next/app\";\n\nexport default function App({ Component, pageProps }: AppProps) {\n  return <Component {...pageProps} />;\n}\n`,\n    '/src/pages/index.tsx': `import { GetServerSideProps } from \"next\";\n\ninterface Props {\n  framework: string;\n}\n\nexport default function Home({ framework }: Props) {\n  return (\n    <div>\n      <h1>Hello {framework}</h1>\n    </div>\n  );\n}\n\nexport const getServerSideProps: GetServerSideProps<Props> = async () => {\n  return {\n    props: { framework: \"Next.js\" },\n  };\n};\n`,\n    '/next.config.js': `/** @type {import('next').NextConfig} */\nconst nextConfig = {\n  reactStrictMode: true,\n  swcMinify: true,\n};\n\nmodule.exports = nextConfig;\n`,\n    '/.env.development': `NEXT_TELEMETRY_DISABLED=1`,\n    '/next-env.d.ts': `/// <reference types=\"next\" />\n/// <reference types=\"next/image-types/global\" />\n\n// NOTE: This file should not be edited\n// see https://nextjs.org/docs/basic-features/typescript for more information.\n`,\n    '/tsconfig.json': JSON.stringify({\n      compilerOptions: {\n        target: 'es5',\n        lib: ['dom', 'dom.iterable', 'esnext'],\n        allowJs: true,\n        skipLibCheck: true,\n        strict: true,\n        forceConsistentCasingInFileNames: true,\n        noEmit: true,\n        esModuleInterop: true,\n        module: 'esnext',\n        moduleResolution: 'node',\n        resolveJsonModule: true,\n        isolatedModules: true,\n        jsx: 'preserve',\n        incremental: true,\n      },\n      include: ['next-env.d.ts', '**/*.ts', '**/*.tsx'],\n      exclude: ['node_modules'],\n    }),\n    '/package.json': JSON.stringify({\n      name: 'my-app',\n      version: '0.1.0',\n      private: true,\n      scripts: {\n        dev: 'next dev',\n        build: 'next build',\n        start: 'next start',\n      },\n      dependencies: {\n        '@types/node': '18.11.9',\n        '@types/react': '18.0.25',\n        '@types/react-dom': '18.0.8',\n        next: '13.0.2',\n        react: '18.2.0',\n        'react-dom': '18.2.0',\n        typescript: '4.8.4',\n        '@next/swc-wasm-nodejs': '13.0.2',\n        '@swc/helpers': '0.4.12',\n      },\n    }),\n  });\n\n  // Run the Vite app.\n  const shellProcess = emulator.shell.create();\n  return await shellProcess.runCommand('next', ['dev'], {\n    env: {\n      NEXT_IGNORE_INCORRECT_LOCKFILE: 'true',\n      NEXT_TELEMETRY_DISABLED: 'true',\n      __NEXT_DISABLE_MEMORY_WATCHER: 'true',\n    },\n  });\n};\n"
  },
  {
    "path": "tests/examples/next-api.example.js",
    "content": "/**\n * @typedef { typeof import(\"../../packages/nodebox\").Nodebox } Nodebox\n * @type {Nodebox} */\nconst Nodebox = window.Nodebox;\n\n/**\n * @param {string} emulatorUrl\n */\nwindow.runExample = async function (emulatorUrl) {\n  const emulator = new Nodebox({\n    runtimeUrl: emulatorUrl,\n    iframe: document.getElementById('frame'),\n  });\n\n  await emulator.connect();\n\n  await emulator.fs.init({\n    '/pages/api/hello.js': `import { NextResponse } from 'next/server';\nexport const config = {\n  runtime: 'edge',\n};\n\nexport default (req) => {\n  return NextResponse.json({\n    name: 'Hello now an Edge Function!',\n  });\n};`,\n    '/pages/index.js': `import useSwr from 'swr';\n  const fetcher = (url) => fetch(url).then((res) => res.json());\n  export default function Index() {\n  const { data, error, isLoading } = useSwr('/api/hello', fetcher)\n\n  if (error) return <div>Failed to load</div>\n  if (isLoading) return <div>Loading...</div>\n  if (!data) return null\n\n  return (\n    <div>Got data</div>\n  )\n}`,\n\n    '/next.config.js': `/** @type {import('next').NextConfig} */\nconst nextConfig = {\n  reactStrictMode: true,\n  swcMinify: true,\n}\nmodule.exports = nextConfig\n`,\n\n    '/package.json': JSON.stringify({\n      name: 'my-app',\n      version: '0.1.0',\n      private: true,\n      dependencies: {\n        next: '13.2.3', // @todo: update to the latest version\n        react: '18.2.0',\n        'react-dom': '18.2.0',\n        '@next/swc-wasm-nodejs': '13.2.3',\n        swr: '2.1.0',\n      },\n    }),\n  });\n\n  const shellProcess = emulator.shell.create();\n  const shellInfo = await shellProcess.runCommand('next', ['dev'], {\n    env: {\n      NEXT_IGNORE_INCORRECT_LOCKFILE: 'true',\n      NEXT_TELEMETRY_DISABLED: 'true',\n      __NEXT_DISABLE_MEMORY_WATCHER: 'true',\n    },\n  });\n  shellProcess.on('exit', (...data) => console.error('Process exited:', ...data));\n  return shellInfo;\n};\n"
  },
  {
    "path": "tests/examples/next.example.js",
    "content": "/**\n * @typedef { typeof import(\"../../packages/nodebox\").Nodebox } Nodebox\n * @type {Nodebox} */\nconst Nodebox = window.Nodebox;\n\n/**\n * @param {string} emulatorUrl\n */\nwindow.runExample = async function (emulatorUrl) {\n  const emulator = new Nodebox({\n      runtimeUrl: emulatorUrl,\n      iframe: document.getElementById('frame'),\n    });\n\n  await emulator.connect();\n\n  await emulator.fs.init({\n    '/styles.css': `body {\n  font-family: sans-serif;\n  -webkit-font-smoothing: auto;\n  -moz-font-smoothing: auto;\n  -moz-osx-font-smoothing: grayscale;\n  font-smoothing: auto;\n  text-rendering: optimizeLegibility;\n  font-smooth: always;\n  -webkit-tap-highlight-color: transparent;\n  -webkit-touch-callout: none;\n}\nh1 {\n  font-size: 1.5rem;\n}`,\n    '/pages/_app.js': `import '../styles.css'\nexport default function MyApp({ Component, pageProps }) {\n  return <Component {...pageProps} />\n}`,\n    '/pages/index.js': `export default function Home({ data }) {\n  return (\n    <div>\n      <h1>Hello {data}</h1>\n    </div>\n  );\n}\n  \nexport function getServerSideProps() {\n  return {\n    props: { data: \"world\" },\n  }\n}\n`,\n\n    '/next.config.js': `/** @type {import('next').NextConfig} */\nconst nextConfig = {\n  reactStrictMode: true,\n  swcMinify: true,\n}\nmodule.exports = nextConfig\n`,\n\n    '/package.json': JSON.stringify({\n      name: 'my-app',\n      version: '0.1.0',\n      private: true,\n      scripts: {\n        dev: 'next dev',\n        build: 'next build',\n        start: 'next start',\n        lint: 'next lint',\n      },\n      dependencies: {\n        next: '12.1.6', // @todo: update to the latest version\n        react: '18.2.0',\n        'react-dom': '18.2.0',\n        '@next/swc-wasm-nodejs': '12.1.6',\n      },\n    }),\n  });\n\n  const shellProcess = emulator.shell.create();\n  const shellInfo = await shellProcess.runCommand('next', ['dev'], {\n    env: {\n      NEXT_IGNORE_INCORRECT_LOCKFILE: 'true',\n      NEXT_TELEMETRY_DISABLED: 'true',\n    },\n  });\n  shellProcess.on('exit', (...data) => console.error('Process exited:', ...data));\n  return shellInfo;\n};\n"
  },
  {
    "path": "tests/examples/nodemon.example.js",
    "content": "/**\n * @typedef { typeof import(\"../../packages/nodebox\").Nodebox } Nodebox\n * @type {Nodebox} */\nconst Nodebox = window.Nodebox;\n\n/**\n * @param {string} emulatorUrl\n */\nwindow.runExample = async function (emulatorUrl) {\n  const emulator = new Nodebox({\n    runtimeUrl: emulatorUrl,\n    iframe: document.getElementById('frame'),\n  });\n\n  await emulator.connect();\n\n  // Initialize the file system with a Vite project.\n  await emulator.fs.init({\n    '/index.js': `const http = require('http');\nconst hostname = '127.0.0.1';\nconst port = 3000;\nconst server = http.createServer((req, res) => {\n  res.statusCode = 200;\n  res.setHeader('Content-Type', 'text/html');\n  res.end('Hello world');\n});\nserver.listen(port, hostname, () => {\n  console.log(\\`Server running at http://\\${hostname}:\\${port}/\\`);\n});`,\n\n    '/package.json': JSON.stringify({\n      dependencies: { nodemon: '2.0.20' },\n      scripts: { start: 'nodemon index.js' },\n      main: 'index.js',\n    }),\n  });\n\n  const shellProcess = emulator.shell.create();\n  const shellInfo = await shellProcess.runCommand('nodemon', ['index.js']);\n  shellProcess.on('exit', (...data) => console.error('Process exited:', ...data));\n  return shellInfo;\n};\n"
  },
  {
    "path": "tests/examples/nuxt.example.js",
    "content": "/**\n * @typedef { typeof import(\"../../packages/nodebox\").Nodebox } Nodebox\n * @type {Nodebox} */\nconst Nodebox = window.Nodebox;\n\n/**\n * @param {string} emulatorUrl\n */\nwindow.runExample = async function (emulatorUrl) {\n  const emulator = new Nodebox({\n    runtimeUrl: emulatorUrl,\n    iframe: document.getElementById('frame'),\n  });\n\n  await emulator.connect();\n\n  await emulator.fs.init({\n    '/app.vue': `<template>\n  <div>\n    <h1>Hello world</h1>\n  </div>\n</template>`,\n    '/package.json': JSON.stringify({\n      scripts: { dev: 'nuxt dev' },\n      dependencies: { nuxt: '3.0.0', 'esbuild-wasm': '^0.15.16', 'enhanced-resolve': '4.1.1' },\n    }),\n  });\n\n  const shellProcess = emulator.shell.create();\n  const shellInfo = await shellProcess.runCommand('nuxt', ['dev'], { env: { NUXT_TELEMETRY_DISABLED: 1 } });\n  shellProcess.on('exit', (...data) => console.error('Process exited:', ...data));\n  return shellInfo;\n};\n"
  },
  {
    "path": "tests/examples/shell-output.example.js",
    "content": "/**\n * @typedef { typeof import(\"../../packages/nodebox\").Nodebox } Nodebox\n * @type {Nodebox} */\nconst Nodebox = window.Nodebox;\n\n/**\n * @param {string} emulatorUrl\n */\nwindow.runExample = async function (emulatorUrl) {\n  const emulator = new Nodebox({\n    runtimeUrl: emulatorUrl,\n    iframe: document.getElementById('frame'),\n  });\n\n  await emulator.connect();\n\n  await emulator.fs.init({\n    'package.json': JSON.stringify({\n      dependencies: { lodash: '*' },\n    }),\n    'index.js': [\n      // Feedback: The trailing \\n seems missing from the stdout stream, probably\n      // because you also forward it to the caller's console.log (which it'd be good\n      // to have a way to disable)\n      `console.log('testing stdout 1');\\n`,\n      // Feedback: It seems that process.stdout isn't caught\n      `process.stdout.write('testing stdout 2\\\\n');\\n`,\n\n      // Feedback: I didn't find how to retrieve stderr in shell.stderr\n      // Feedback:          ^ Why is \"fi\" in a separate font? 😁\n      `console.error('testing stderr 1\\\\n');\\n`,\n      `process.stderr.write('testing stderr 2\\\\n');\\n`,\n\n      `process.exit(0);`,\n    ].join(``),\n  });\n\n  // Feedback: It'd be nice if we could set an `env` object to use\n  // with all the binaries started by the shell\n  const shell = emulator.shell.create();\n\n  shell.on(`progress`, (status) => {\n    console.log(status);\n  });\n\n  shell.on(`exit`, (exitCode, error) => {\n    console.log(`exit`, exitCode, error);\n  });\n\n  shell.stdout.on(`data`, (chunk) => {\n    console.log(`stdout`, [chunk]);\n  });\n\n  shell.stderr.on(`data`, (chunk) => {\n    console.log(`stderr`, [chunk]);\n  });\n\n  const shellInfo = await shell.runCommand('node', ['index.js']);\n  shell.on('exit', (...data) => console.error('Process exited:', ...data));\n  return shellInfo;\n};\n"
  },
  {
    "path": "tests/examples/sveltekit.example.js",
    "content": "/**\n * @typedef { typeof import(\"../../packages/node-emulator\").Nodebox } Nodebox\n * @type {Nodebox} */\nconst Nodebox = window.Nodebox;\n\n/**\n * @param {string} emulatorUrl\n */\nwindow.runExample = async function (emulatorUrl) {\n  const emulator = new Nodebox({\n    runtimeUrl: emulatorUrl,\n    iframe: document.getElementById('frame'),\n  });\n\n  await emulator.connect();\n\n  await emulator.fs.init({\n    '/src/styles.css': `body {\n  font-family: sans-serif;\n  -webkit-font-smoothing: auto;\n  -moz-font-smoothing: auto;\n  -moz-osx-font-smoothing: grayscale;\n  font-smoothing: auto;\n  text-rendering: optimizeLegibility;\n  font-smooth: always;\n  -webkit-tap-highlight-color: transparent;\n  -webkit-touch-callout: none;\n}\n\nh1 {\n  font-size: 1.5rem;\n}`,\n\n    '/src/routes/+page.svelte': `<script>\n  import \"/src/style.css\";\n  let data = \"world\"\n</script>\n\n<h1>Hello {data}</h1>\n\n<style>\nh1 {\n  font-size: 1.5rem;\n}\n</style>`,\n\n    '/src/app.html': `<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-width\" />\n    %sveltekit.head%\n  </head>\n  <body data-sveltekit-preload-data=\"hover\">\n    <div style=\"display: contents\">%sveltekit.body%</div>\n  </body>\n</html>`,\n\n    'vite.config.js': `import { sveltekit } from '@sveltejs/kit/vite';\n\nconst config = {\n  plugins: [sveltekit()]\n};\n\nexport default config;\n`,\n\n    'svelte.config.js': `import adapter from '@sveltejs/adapter-auto';\n\n/** @type {import('@sveltejs/kit').Config} */\nconst config = {\n  kit: {\n    adapter: adapter()\n  }\n};\n\nexport default config;`,\n\n    '/package.json': JSON.stringify({\n      scripts: {\n        dev: 'vite',\n      },\n      devDependencies: {\n        '@sveltejs/adapter-auto': '^1.0.0',\n        '@sveltejs/kit': '^1.0.0',\n        svelte: '^3.54.0',\n        vite: '^4.0.0',\n        'esbuild-wasm': '0.15.12',\n      },\n      type: 'module',\n    }),\n  });\n\n  const shellProcess = emulator.shell.create();\n  const shellInfo = await shellProcess.runCommand('vite', ['dev', '--port', '3000']);\n  shellProcess.on('exit', (...data) => console.error('Process exited:', ...data));\n  return shellInfo;\n};\n"
  },
  {
    "path": "tests/examples/terminal.example.js",
    "content": "/**\n * @typedef { typeof import(\"../../packages/nodebox\").Nodebox } Nodebox\n * @type {Nodebox} */\nconst Nodebox = window.Nodebox;\n\n/**\n * @param {string} emulatorUrl\n */\nwindow.runExample = async function (emulatorUrl) {\n  const { Nodebox } = window;\n\n  const emulator = new Nodebox({\n    runtimeUrl: emulatorUrl,\n    iframe: document.getElementById('frame'),\n  });\n\n  await emulator.connect();\n  await emulator.fs.init({\n    'package.json': JSON.stringify({ dependencies: { '@clack/prompts': 'latest' } }),\n    'index.js': `import { text } from '@clack/prompts';\n\n(async () => {\n  const meaning = await text({\n    message: 'What is the meaning of life?',\n    placeholder: 'Not sure',\n    initialValue: '42',\n    validate(value) {\n      if (value.length === 0) return \\`Value is required!\\`;\n    },\n  });\n})();`,\n  });\n\n  const shellProcess = emulator.shell.create();\n\n  shellProcess.runCommand('node', ['index.js']);\n};\n"
  },
  {
    "path": "tests/examples/timers.example.js",
    "content": "/**\n * @typedef { typeof import(\"../../packages/nodebox\").Nodebox } Nodebox\n * @type {Nodebox} */\nconst Nodebox = window.Nodebox;\n\n/**\n * @param {string} emulatorUrl\n */\nwindow.runExample = async function (emulatorUrl) {\n  const foo = async () => {\n    const { Nodebox } = window;\n\n    const emulator = new Nodebox({\n      runtimeUrl: emulatorUrl,\n      iframe: document.getElementById('frame'),\n    });\n\n    await emulator.connect();\n    await emulator.fs.init({\n      'index.mjs': `import timers from \"timers/promises\";\n\nasync function run() {\n  console.log(\"Start timers\");\n  console.log(await timers.setTimeout(1500, \"test timeout\"));\n  console.log(await timers.setImmediate(\"immediate\"));\n\n  const interval = 100;\n  for await (const startTime of timers.setInterval(interval, Date.now())) {\n    const now = Date.now();\n    console.log(now);\n    if (now - startTime > 1000) {\n      break;\n    }\n  }\n}\n\nrun().catch(console.error);\n`,\n    });\n\n    const shellProcess = emulator.shell.create();\n\n    return new Promise(async (resolve) => {\n      shellProcess.stdout.on('data', (data) => {\n        return resolve(data);\n      });\n\n      await shellProcess.runCommand('node', ['index.mjs']);\n    });\n  };\n\n  console.log(await foo());\n};\n"
  },
  {
    "path": "tests/examples/vite-react.example.js",
    "content": "/**\n * @typedef { typeof import(\"../../packages/nodebox\").Nodebox } Nodebox\n * @type {Nodebox} */\nconst Nodebox = window.Nodebox;\n\n/**\n * @param {string} emulatorUrl\n */\nwindow.runExample = async function (emulatorUrl) {\n  const emulator = new Nodebox({\n    runtimeUrl: emulatorUrl,\n    iframe: document.getElementById('frame'),\n  });\n\n  await emulator.connect();\n\n  await emulator.fs.init({\n    '/styles.css': `body {\n  font-family: sans-serif;\n  -webkit-font-smoothing: auto;\n  -moz-font-smoothing: auto;\n  -moz-osx-font-smoothing: grayscale;\n  font-smoothing: auto;\n  text-rendering: optimizeLegibility;\n  font-smooth: always;\n  -webkit-tap-highlight-color: transparent;\n  -webkit-touch-callout: none;\n}\nh1 {\n  font-size: 1.5rem;\n}`,\n    '/App.jsx': `import React from \"react\"\nexport default function App() {\n  return <h1>Hello world</h1>\n}\n`,\n    '/index.jsx': `import React, { StrictMode } from \"react\";\nimport { createRoot } from \"react-dom/client\";\nimport \"./styles.css\";\nimport App from \"./App\";\nconst root = createRoot(document.getElementById(\"root\"));\nroot.render(\n  <StrictMode>\n    <App />\n  </StrictMode>\n);`,\n    '/index.html': `<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <title>Vite App</title>\n  </head>\n  <body>\n    <div id=\"root\"></div>\n    <script type=\"module\" src=\"/index.jsx\"></script>\n  </body>\n</html>`,\n    '/package.json': JSON.stringify({\n      scripts: { dev: 'vite' },\n      dependencies: {\n        react: '^18.2.0',\n        'react-dom': '^18.2.0',\n      },\n      devDependencies: {\n        vite: '4.2.0',\n        '@vitejs/plugin-react': '3.1.0',\n        'esbuild-wasm': '0.17.12',\n      },\n    }),\n    'vite.config.js': `import { defineConfig } from \"vite\";\nimport react from \"@vitejs/plugin-react\";\n\n// https://vitejs.dev/config/\nexport default defineConfig({\n  plugins: [react()],\n});`,\n  });\n\n  const shellProcess = emulator.shell.create();\n  const shellInfo = await shellProcess.runCommand('vite', [], {\n    env: undefined,\n  });\n  shellProcess.on('exit', (...data) => console.error('Process exited:', ...data));\n  return shellInfo;\n};\n"
  },
  {
    "path": "tests/examples/vite-solid.example.js",
    "content": "/**\n * @typedef { typeof import(\"../../packages/node-emulator\").Nodebox } Nodebox\n * @type {Nodebox} */\nconst Nodebox = window.Nodebox;\n\n/**\n * @param {string} emulatorUrl\n */\nwindow.runExample = async function (emulatorUrl) {\n  const emulator = new Nodebox({\n    runtimeUrl: emulatorUrl,\n    iframe: document.getElementById('frame'),\n  });\n\n  await emulator.connect();\n\n  await emulator.fs.init({\n    'index.html': `<html>\n<head>\n  <title>Vite Sandbox</title>\n  <meta charset=\"UTF-8\" />\n</head>\n\n<body>\n  <div id=\"app\"></div>\n\n  <script type=\"module\" src=\"./src/main.tsx\"></script>\n</body>\n</html>`,\n    'package.json': JSON.stringify({\n      scripts: {\n        start: 'vite',\n        build: 'vite build',\n      },\n      dependencies: {\n        'solid-js': '1.6.11',\n      },\n      devDependencies: {\n        vite: '4.2.0',\n        'esbuild-wasm': '0.17.12',\n        'vite-plugin-solid': '2.6.1',\n      },\n    }),\n    'src/main.tsx': `import { render } from \"solid-js/web\";\nimport { createSignal } from \"solid-js\";\n\nfunction Counter() {\n  const [count, setCount] = createSignal(1);\n  const increment = () => setCount(count() + 1);\n\n  return (\n    <button type=\"button\" onClick={increment}>\n      {count()}\n    </button>\n  );\n}\n\nrender(() => <Counter />, document.getElementById(\"app\")!);\n`,\n    'vite.config.ts': `import { defineConfig } from \"vite\";\nimport solidPlugin from \"vite-plugin-solid\";\n\nexport default defineConfig({\nplugins: [solidPlugin()],\nbuild: {\n  target: \"esnext\",\n  polyfillDynamicImport: false,\n},\n});`,\n  });\n\n  const shellProcess = emulator.shell.create();\n  const shellInfo = await shellProcess.runCommand('vite', ['dev', '--port', '3000']);\n  shellProcess.on('exit', (...data) => console.error('Process exited:', ...data));\n  return shellInfo;\n};\n"
  },
  {
    "path": "tests/examples/vite-svelte.example.js",
    "content": "/**\n * @typedef { typeof import(\"../../packages/node-emulator\").Nodebox } Nodebox\n * @type {Nodebox} */\nconst Nodebox = window.Nodebox;\n\n/**\n * @param {string} emulatorUrl\n */\nwindow.runExample = async function (emulatorUrl) {\n  const emulator = new Nodebox({\n    runtimeUrl: emulatorUrl,\n    iframe: document.getElementById('frame'),\n  });\n\n  await emulator.connect();\n\n  await emulator.fs.init({\n    '/src/styles.css': `body {\n  font-family: sans-serif;\n  -webkit-font-smoothing: auto;\n  -moz-font-smoothing: auto;\n  -moz-osx-font-smoothing: grayscale;\n  font-smoothing: auto;\n  text-rendering: optimizeLegibility;\n  font-smooth: always;\n  -webkit-tap-highlight-color: transparent;\n  -webkit-touch-callout: none;\n}\n\nh1 {\n  font-size: 1.5rem;\n}`,\n    '/src/main.js': `import \"./styles.css\";\nimport App from \"./App.svelte\";\n\nconst app = new App({\n  target: document.getElementById(\"app\"),\n});\n\nexport default app;`,\n    'src/App.svelte': `<script>\nconst data = \"world\";\n</script>\n\n<main>\n  <h1>Hello {data}</h1>\n</main>\n\n<style>\nh1 {\n  font-size: 1.5rem;\n}\n</style>`,\n    'index.html': `<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <title>Vite + Svelte</title>\n  </head>\n  <body>\n    <div id=\"app\"></div>\n    <script type=\"module\" src=\"/src/main.js\"></script>\n  </body>\n</html>`,\n    'vite.config.js': `import { defineConfig } from 'vite'\nimport { svelte } from '@sveltejs/vite-plugin-svelte'\n\n// https://vitejs.dev/config/\nexport default defineConfig({\n  plugins: [svelte()],\n})`,\n    'svelte.config.js': `import { vitePreprocess } from '@sveltejs/vite-plugin-svelte'\n\nexport default {\n  // Consult https://svelte.dev/docs#compile-time-svelte-preprocess\n  // for more information about preprocessors\n  preprocess: vitePreprocess(),\n}\n`,\n    'package.json': JSON.stringify({\n      name: 'vite-svelte-example',\n      type: 'module',\n      scripts: { dev: 'vite' },\n      devDependencies: {\n        '@sveltejs/vite-plugin-svelte': '2.0.3',\n        svelte: '3.57.0',\n        vite: '4.2.0',\n        'esbuild-wasm': '0.17.12',\n      },\n    }),\n  });\n\n  const shellProcess = emulator.shell.create();\n  const shellInfo = await shellProcess.runCommand('vite', ['dev', '--port', '3000']);\n  shellProcess.on('exit', (...data) => console.error('Process exited:', ...data));\n  return shellInfo;\n};\n"
  },
  {
    "path": "tests/examples/vite-vue.example.js",
    "content": "/**\n * @typedef { typeof import(\"../../packages/nodebox\").Nodebox } Nodebox\n * @type {Nodebox} */\nconst Nodebox = window.Nodebox;\n\n/**\n * @param {string} emulatorUrl\n */\nwindow.runExample = async function (emulatorUrl) {\n  const emulator = new Nodebox({\n    runtimeUrl: emulatorUrl,\n    iframe: document.getElementById('frame'),\n  });\n\n  await emulator.connect();\n\n  await emulator.fs.init({\n    '/src/styles.css': `body {\n  font-family: sans-serif;\n  -webkit-font-smoothing: auto;\n  -moz-font-smoothing: auto;\n  -moz-osx-font-smoothing: grayscale;\n  font-smoothing: auto;\n  text-rendering: optimizeLegibility;\n  font-smooth: always;\n  -webkit-tap-highlight-color: transparent;\n  -webkit-touch-callout: none;\n}\nh1 {\n  font-size: 1.5rem;\n}`,\n    '/src/App.vue': `<script setup>\nimport { ref } from \"vue\";\nconst msg = ref(\"world\");\n</script>\n\n<template>\n  <h1>Hello {{ msg }}</h1>\n</template>\n\n<style>\nh1 {\n  font-size: 1.5rem;\n}\n</style>`,\n    '/src/main.js': `import { createApp } from 'vue'\nimport App from './App.vue'\nimport \"./styles.css\"\n            \ncreateApp(App).mount('#app')            \n`,\n\n    '/index.html': `<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <title>Vite App</title>\n  </head>\n  <body>\n    <div id=\"app\"></div>\n    <script type=\"module\" src=\"/src/main.js\"></script>\n  </body>\n</html>\n`,\n\n    '/vite.config.js': `import { defineConfig } from 'vite'\nimport vue from '@vitejs/plugin-vue'\n// https://vitejs.dev/config/\nexport default defineConfig({\n  plugins: [vue()]\n})\n`,\n\n    '/package.json': JSON.stringify({\n      scripts: {\n        dev: 'vite',\n      },\n      dependencies: {\n        vue: 'latest',\n      },\n      devDependencies: {\n        vite: '4.2.0',\n        'esbuild-wasm': '0.17.12',\n        '@vitejs/plugin-vue': '4.1.0',\n      },\n    }),\n  });\n\n  const shellProcess = emulator.shell.create();\n  const shellInfo = await shellProcess.runCommand('vite', ['--port', '3000']);\n  shellProcess.on('exit', (...data) => console.error('Process exited:', ...data));\n  return shellInfo;\n};\n"
  },
  {
    "path": "tests/examples/vite.example.js",
    "content": "/**\n * @typedef { typeof import(\"../../packages/nodebox\").Nodebox } Nodebox\n * @type {Nodebox} */\nconst Nodebox = window.Nodebox;\n\n/**\n * @param {string} emulatorUrl\n */\nwindow.runExample = async function (emulatorUrl) {\n  const emulator = new Nodebox({\n    runtimeUrl: emulatorUrl,\n    iframe: document.getElementById('frame'),\n  });\n\n  await emulator.connect();\n\n  await emulator.fs.init({\n    '/styles.css': `body {\n  font-family: sans-serif;\n  -webkit-font-smoothing: auto;\n  -moz-font-smoothing: auto;\n  -moz-osx-font-smoothing: grayscale;\n  font-smoothing: auto;\n  text-rendering: optimizeLegibility;\n  font-smooth: always;\n  -webkit-tap-highlight-color: transparent;\n  -webkit-touch-callout: none;\n}\nh1 {\n  font-size: 1.5rem;\n}`,\n    '/index.js': `import \"./styles.css\";\ndocument.getElementById(\"app\").innerHTML = \\`\n<h1>Hello world</h1>\n\\`;\n`,\n\n    '/index.html': `<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <title>Vite App</title>\n  </head>\n  <body>\n    <div id=\"app\"></div>\n    <script type=\"module\" src=\"/index.js\"></script>\n  </body>\n</html>\n`,\n\n    '/package.json': JSON.stringify({\n      scripts: {\n        dev: 'vite',\n      },\n      devDependencies: {\n        vite: '4.2.0',\n        'esbuild-wasm': '0.17.12',\n      },\n    }),\n  });\n\n  const shellProcess = emulator.shell.create();\n  const shellInfo = await shellProcess.runCommand('vite', ['--port', '3000']);\n  shellProcess.on('exit', (...data) => console.error('Process exited:', ...data));\n  return shellInfo;\n};\n"
  },
  {
    "path": "tests/examples/vuepress.example.js",
    "content": "/**\n * @typedef { typeof import(\"../../packages/nodebox\").Nodebox } Nodebox\n * @type {Nodebox} */\nconst Nodebox = window.Nodebox;\n\n/**\n * @param {string} emulatorUrl\n */\nwindow.runExample = async function (emulatorUrl) {\n  const emulator = new Nodebox({\n    runtimeUrl: emulatorUrl,\n    iframe: document.getElementById('frame'),\n  });\n\n  await emulator.connect();\n\n  await emulator.fs.init({\n    '/README.md': `# Hello world`,\n    '/package.json': JSON.stringify({\n      dependencies: {\n        vuepress: '2.0.0-beta.53',\n        'esbuild-wasm': '0.15.12',\n      },\n      main: '/README.md',\n    }),\n  });\n\n  const shellProcess = emulator.shell.create();\n  const shellInfo = await shellProcess.runCommand('vuepress', ['dev']);\n  shellProcess.on('exit', (exitCode, error) => console.error('Process exited:', exitCode, error));\n  return shellInfo;\n};\n"
  },
  {
    "path": "tests/examples/yarn.example.js",
    "content": "/**\n * @typedef { typeof import(\"../../packages/nodebox\").Nodebox } Nodebox\n * @type {Nodebox} */\nconst Nodebox = window.Nodebox;\n\n/**\n * @param {string} emulatorUrl\n */\nwindow.runExample = async function (emulatorUrl) {\n  const emulator = new Nodebox({\n    runtimeUrl: emulatorUrl,\n    iframe: document.getElementById('frame'),\n  });\n\n  await emulator.connect();\n\n  const yarn = await fetch(`https://repo.yarnpkg.com/4.0.0-rc.39/packages/yarnpkg-cli/bin/yarn.js`).then((res) =>\n    res.text()\n  );\n\n  await emulator.fs.init({\n    'package.json': JSON.stringify({\n      dependencies: { lodash: '*' },\n    }),\n    'yarn.js': yarn.replace(/^(.*)\\n/, `$1\\nprocess.env.FORCE_COLOR = '3'; process.env.YARN_ENABLE_TELEMETRY = '0';\\n`),\n  });\n\n  // Feedback: It'd be nice if we could set an `env` object to use\n  // with all the binaries started by the shell\n  const shell = emulator.shell.create();\n\n  shell.on(`progress`, (status) => {\n    console.log(status);\n  });\n\n  shell.on(`exit`, (exitCode, error) => {\n    console.log(`exit`, exitCode, error);\n  });\n\n  shell.stdout.on(`data`, (chunk) => {\n    console.log(chunk);\n  });\n\n  shell.stderr.on(`data`, (chunk) => {\n    console.error(chunk);\n  });\n\n  const shellInfo = await shell.runCommand('node', ['yarn.js']);\n  shell.on('exit', (...data) => console.error('Process exited:', ...data));\n  return shellInfo;\n};\n"
  },
  {
    "path": "tests/features/child_process.test.ts",
    "content": "import { test, expect } from 'tests';\n\ntest('exec', async ({ runTestServer, emulatorUrl, page }) => {\n  await runTestServer();\n\n  const watchOutput = await page.evaluate(async (emulatorUrl) => {\n    const { Nodebox } = window;\n\n    const emulator = new Nodebox({\n      runtimeUrl: emulatorUrl,\n      iframe: document.getElementById('frame') as HTMLIFrameElement,\n    });\n\n    await emulator.connect();\n    await emulator.fs.init({\n      'foo.js': `process.stdout.write('Hello world');\nprocess.exit();`,\n\n      'index.js': `const { exec } = require('node:child_process');\n    \nexec(\"./foo\", { encoding: \"utf8\", timeout: 5_000 }, (err, stdout, stderr) => {\n  console.log(\"Exec output:\", stdout)\n});`,\n    });\n\n    const shellProcess = emulator.shell.create();\n\n    return new Promise<string>(async (resolve) => {\n      shellProcess.stdout.on('data', (data) => {\n        resolve(data);\n      });\n\n      await shellProcess.runCommand('node', ['index.js']);\n    });\n  }, emulatorUrl);\n\n  expect(watchOutput).toEqual('Exec output: Hello world\\n');\n});\n\ntest('run binary command', async ({ runTestServer, emulatorUrl, page }) => {\n  await runTestServer();\n\n  const watchOutput = await page.evaluate(async (emulatorUrl) => {\n    const { Nodebox } = window;\n\n    const emulator = new Nodebox({\n      runtimeUrl: emulatorUrl,\n      iframe: document.getElementById('frame') as HTMLIFrameElement,\n    });\n\n    await emulator.connect();\n    await emulator.fs.init({\n      'index.js': `const { spawn } = require('node:child_process');\n      const p = spawn(\"test\");\n      p.stdout.on('data', (data) => {\n        console.log(\\`stdout: $\\{data\\}\\`);\n      });\n      p.on('close', (code) => {\n        console.log(\"Closed output streams\");\n      });\n      p.on('exit', (code) => {\n        console.log(\\`Exited with code: $\\{code\\}\\`);\n      });`,\n      '/node_modules/.bin/test': `process.stdout.write('test');process.exit(0);`,\n    });\n\n    const shellProcess = emulator.shell.create();\n\n    const expectedMessages = 3;\n    const messages: string[] = [];\n    return new Promise<string[]>(async (resolve) => {\n      shellProcess.stdout.on('data', (data) => {\n        messages.push(data);\n        if (messages.length === expectedMessages) {\n          resolve(messages);\n        }\n      });\n\n      await shellProcess.runCommand('node', ['index.js']);\n    });\n  }, emulatorUrl);\n\n  expect(watchOutput).toEqual(['stdout: test\\n', 'Exited with code: 0\\n', 'Closed output streams\\n']);\n});\n"
  },
  {
    "path": "tests/features/console.test.ts",
    "content": "import { test, expect } from 'tests';\nimport waitFor from 'wait-for-expect';\n\ntest('console#time', async ({ runTestServer, emulatorUrl, page }) => {\n  await runTestServer();\n\n  const stdout: Array<string> = [];\n  const stderr: Array<string> = [];\n  page.on('console', (msg) => {\n    if (msg.type() === 'log') {\n      stdout.push(msg.text());\n    } else if (msg.type() === 'error') {\n      stderr.push(msg.text());\n    }\n  });\n\n  await page.evaluate(async (emulatorUrl) => {\n    const { Nodebox } = window;\n\n    const emulator = new Nodebox({\n      runtimeUrl: emulatorUrl,\n      iframe: document.getElementById('frame') as HTMLIFrameElement,\n    });\n\n    await emulator.connect();\n    await emulator.fs.init({\n      'main.js': `console.time();\n      console.time('aaa');\n      console.time('bbb');\n      console.timeEnd();\n      setTimeout(() => {\n        console.timeEnd('aaa');\n        console.timeLog('bbb');\n      }, 50);\n      setTimeout(() => {\n        console.timeEnd('bbb');\n        console.timeLog('aaa');\n      }, 1000);`,\n    });\n\n    const shell = emulator.shell.create();\n    shell.stderr.on('data', (data) => {\n      console.error(data.trim());\n    });\n    shell.stdout.on('data', (data) => {\n      // eslint-disable-next-line no-console\n      console.log(data.trim());\n    });\n    await shell.runCommand('node', ['main.js']);\n  }, emulatorUrl);\n\n  await waitFor(() => {\n    expect(stdout[0]).toMatch(/^default: \\dms$/);\n    expect(stdout[1]).toMatch(/^aaa: \\d+ms$/);\n    expect(stdout[2]).toMatch(/^bbb: \\d+ms$/);\n    expect(stdout[3]).toMatch(/^bbb: 1\\.\\d{3}s$/);\n\n    expect(stderr[0]).toEqual(`Timer 'aaa' does not exist`);\n  });\n});\n\ntest('console#dir', async ({ runTestServer, emulatorUrl, page }) => {\n  await runTestServer();\n\n  const stdout: Array<string> = [];\n  const stderr: Array<string> = [];\n  page.on('console', (msg) => {\n    if (msg.type() === 'log') {\n      stdout.push(msg.text());\n    } else if (msg.type() === 'error') {\n      stderr.push(msg.text());\n    }\n  });\n\n  await page.evaluate(async (emulatorUrl) => {\n    const { Nodebox } = window;\n\n    const emulator = new Nodebox({\n      runtimeUrl: emulatorUrl,\n      iframe: document.getElementById('frame') as HTMLIFrameElement,\n    });\n\n    await emulator.connect();\n    await emulator.fs.init({\n      'main.js': `console.dir({ hello: \"world\", a: { bbb: \"bbb\" } });console.dir(\"test\");`,\n    });\n\n    const shell = emulator.shell.create();\n    shell.stderr.on('data', (data) => {\n      console.error(data.trim());\n    });\n    shell.stdout.on('data', (data) => {\n      // eslint-disable-next-line no-console\n      console.log(data.trim());\n    });\n    await shell.runCommand('node', ['main.js']);\n  }, emulatorUrl);\n\n  await waitFor(() => {\n    expect(stdout[0]).toEqual(\"{ hello: 'world', a: { bbb: 'bbb' } }\");\n    expect(stdout[1]).toEqual(\"'test'\");\n  });\n});\n\ntest('console#group', async ({ runTestServer, emulatorUrl, page }) => {\n  await runTestServer();\n\n  const stdout: Array<string> = [];\n  const stderr: Array<string> = [];\n  page.on('console', (msg) => {\n    if (msg.type() === 'log') {\n      stdout.push(msg.text());\n    } else if (msg.type() === 'error') {\n      stderr.push(msg.text());\n    }\n  });\n\n  await page.evaluate(async (emulatorUrl) => {\n    const { Nodebox } = window;\n\n    const emulator = new Nodebox({\n      runtimeUrl: emulatorUrl,\n      iframe: document.getElementById('frame') as HTMLIFrameElement,\n    });\n\n    await emulator.connect();\n    await emulator.fs.init({\n      'main.js': `\n      console.group(\"a\", \"b\");\n      console.log(\"test\");\n      console.group(\"bla\");\n      console.warn(\"tada\");\n      console.groupEnd();\n      console.error(\"woops\");\n      console.groupEnd();`,\n    });\n\n    const shell = emulator.shell.create();\n    shell.stderr.on('data', (data) => {\n      console.error(data);\n    });\n    shell.stdout.on('data', (data) => {\n      // eslint-disable-next-line no-console\n      console.log(data);\n    });\n    await shell.runCommand('node', ['main.js']);\n  }, emulatorUrl);\n\n  await waitFor(() => {\n    expect(stdout[0]).toEqual('a b\\n');\n    expect(stdout[1]).toEqual('  test\\n');\n    expect(stdout[2]).toEqual('  bla\\n');\n    expect(stderr[0]).toEqual('    tada\\n');\n    expect(stderr[1]).toEqual('  woops\\n');\n  });\n});\n\ntest('console#table', async ({ runTestServer, emulatorUrl, page }) => {\n  await runTestServer();\n\n  const stdout: Array<string> = [];\n  const stderr: Array<string> = [];\n  page.on('console', (msg) => {\n    if (msg.type() === 'log') {\n      stdout.push(msg.text());\n    } else if (msg.type() === 'error') {\n      stderr.push(msg.text());\n    }\n  });\n\n  await page.evaluate(async (emulatorUrl) => {\n    const { Nodebox } = window;\n\n    const emulator = new Nodebox({\n      runtimeUrl: emulatorUrl,\n      iframe: document.getElementById('frame') as HTMLIFrameElement,\n    });\n\n    await emulator.connect();\n    await emulator.fs.init({\n      'main.js': `\n      console.table([\"a\", \"b\", \"c\"]);\n      console.table({ a: 1, b: 2, c: 3 });\n      console.table([{ a: 1, b: 2 }, {c: 3}], [\"a\", \"c\"]);`,\n    });\n\n    const shell = emulator.shell.create();\n    shell.stderr.on('data', (data) => {\n      console.error(data);\n    });\n    shell.stdout.on('data', (data) => {\n      // eslint-disable-next-line no-console\n      console.log(data);\n    });\n    await shell.runCommand('node', ['main.js']);\n  }, emulatorUrl);\n\n  await waitFor(() => {\n    expect(stdout[0]).toEqual(`────────────────────\n│ (index) │ Values │\n────────────────────\n│ 0       │ a      │\n│ 1       │ b      │\n│ 2       │ c      │\n────────────────────\n`);\n    expect(stdout[1]).toEqual(`────────────────────\n│ (index) │ Values │\n────────────────────\n│ a       │ 1      │\n│ b       │ 2      │\n│ c       │ 3      │\n────────────────────\n`);\n    expect(stdout[2]).toEqual(`───────────────────\n│ (index) │ a │ c │\n───────────────────\n│ 0       │ 1 │   │\n│ 1       │   │ 3 │\n───────────────────\n`);\n  });\n});\n"
  },
  {
    "path": "tests/features/files.start.test.ts",
    "content": "import { test, expect } from 'tests';\nimport type { FileWatchEvent } from '@codesandbox/nodebox';\n\ntest('starts a vanilla project and make sure files are readable', async ({ runTestServer, emulatorUrl, page }) => {\n  await runTestServer();\n\n  const fileContent = await page.evaluate(async (emulatorUrl) => {\n    const { Nodebox } = window;\n\n    const emulator = new Nodebox({\n      runtimeUrl: emulatorUrl,\n      iframe: document.getElementById('frame') as HTMLIFrameElement,\n    });\n\n    await emulator.connect();\n    await emulator.fs.init({});\n\n    await emulator.fs.writeFile('/App.js', 'console.log(\"Hello World\")', 'utf8');\n    return await emulator.fs.readFile('/App.js', 'utf8');\n  }, emulatorUrl);\n\n  expect(fileContent).toBe('console.log(\"Hello World\")');\n});\n\ntest('starts a vanilla project and watch file changes', async ({ runTestServer, emulatorUrl, page }) => {\n  await runTestServer();\n\n  type WatchOutput = FileWatchEvent | undefined;\n\n  const watchOutput = await page.evaluate(async (emulatorUrl) => {\n    const { Nodebox } = window;\n\n    const emulator = new Nodebox({\n      runtimeUrl: emulatorUrl,\n      iframe: document.getElementById('frame') as HTMLIFrameElement,\n    });\n\n    await emulator.connect();\n    await emulator.fs.init({});\n\n    const watchEvents: WatchOutput[] = [];\n    await emulator.fs.watch(['*'], [], (data) => {\n      watchEvents.push(data);\n    });\n\n    await emulator.fs.writeFile('/index.js', `console.log(\"Hello\")`, 'utf8');\n\n    return watchEvents;\n  }, emulatorUrl);\n\n  expect(watchOutput).toEqual([\n    {\n      type: 'create',\n      path: '/index.js',\n    },\n  ]);\n});\n"
  },
  {
    "path": "tests/features/multiple.test.ts",
    "content": "import { test, expect } from '..';\nimport { MockCdn } from '../../tests/setup/MockCdn';\n\nconst mockCdn = new MockCdn({\n  packages: [\n    {\n      name: 'parent-a',\n      version: '1.0.0',\n      files: {\n        '/package.json': JSON.stringify({\n          name: 'parent-a',\n          version: '1.0.0',\n          main: './index.js',\n          dependencies: { child: '1.0.0' },\n        }),\n        '/index.js': `\nconst child = require('child')\nmodule.exports = { childVersion: child.version }`,\n      },\n    },\n    {\n      name: 'parent-b',\n      version: '1.0.0',\n      files: {\n        '/package.json': JSON.stringify({\n          name: 'parent-b',\n          version: '1.0.0',\n          main: './index.js',\n          dependencies: { child: '2.0.0' },\n        }),\n        '/index.js': `\nconst child = require('child')\nmodule.exports = { childVersion: child.version }`,\n      },\n    },\n    {\n      name: 'child',\n      version: '1.0.0',\n      files: {\n        '/package.json': JSON.stringify({\n          name: 'child',\n          version: '1.0.0',\n          main: './index.js',\n        }),\n\n        '/index.js': `module.exports = { version: '1.0.0' }`,\n      },\n    },\n    {\n      name: 'child',\n      version: '2.0.0',\n      files: {\n        '/package.json': JSON.stringify({\n          name: 'child',\n          version: '2.0.0',\n          main: './index.js',\n        }),\n        '/index.js': `module.exports = { version: '2.0.0' }`,\n      },\n    },\n  ],\n});\n\ntest.beforeAll(async () => {\n  await mockCdn.listen({ host: 'localhost', port: 3080 });\n});\n\ntest('supports multiple major versions of the same package', async ({\n  runTestServer,\n  runExample,\n  getPreviewFrame,\n  page,\n}) => {\n  await runTestServer();\n  await runExample(require.resolve('../examples/multiple.example.js'));\n\n  await page.pause();\n\n  const previewFrame = await getPreviewFrame();\n  const parentA = previewFrame.locator('[id=\"parent-a\"]');\n  const parentB = previewFrame.locator('[id=\"parent-b\"]');\n\n  await expect(parentA).toHaveText('1.0.0');\n  await expect(parentB).toHaveText('2.0.0');\n});\n"
  },
  {
    "path": "tests/features/package-manager/hoist-pattern.test.ts",
    "content": "import { test, expect } from 'tests';\nimport { MockCdn } from '../../../tests/setup/MockCdn';\n\nconst mockCdn = new MockCdn({\n  packages: [\n    {\n      name: '@test/a',\n      version: '1.0.0',\n      files: {\n        '/package.json': JSON.stringify({ name: '@test/a', version: '1.0.0' }),\n      },\n    },\n    {\n      name: '@test/b',\n      version: '2.0.0',\n      files: {\n        '/package.json': JSON.stringify({\n          name: '@test/b',\n          version: '2.0.0',\n          dependencies: { '4th-party': '0.0.1' },\n        }),\n      },\n    },\n    {\n      name: '4th-party',\n      version: '0.0.1',\n      files: {\n        '/package.json': JSON.stringify({ name: '4th-party', version: '0.0.1' }),\n      },\n    },\n  ],\n});\n\ntest.beforeAll(async () => {\n  await mockCdn.listen();\n});\n\ntest('respects a custom \"public-hoist-pattern\" in \".npmrc\" file', async ({ runTestServer, emulatorUrl, page }) => {\n  await runTestServer();\n\n  const installedPaths = await page.evaluate(\n    async ([emulatorUrl, cdnUrl]) => {\n      const { Nodebox } = window;\n\n      const nodebox = new Nodebox({\n        runtimeUrl: emulatorUrl,\n        iframe: document.getElementById('frame') as HTMLIFrameElement,\n        cdnUrl,\n      });\n      await nodebox.connect();\n\n      await nodebox.fs.init({\n        '/.npmrc': `public-hoist-pattern[] = @test/*`,\n      });\n      // Writing package.json triggers dependency installation.\n      await nodebox.fs.writeFile(\n        '/package.json',\n        JSON.stringify({\n          name: 'public-hoist-package-test',\n          dependencies: {\n            '@test/a': '1.0.0',\n            '@test/b': '2.0.0',\n          },\n        })\n      );\n\n      /**\n       * @fixme Remove this.\n       * Spawn a dummy command because we don't await the dependency\n       * installation correctly unless you spawn a command.\n       * @see https://linear.app/codesandbox/issue/ECO-310/dependency-installation-is-not-awaited-when-operating-with-nodebox-api\n       */\n      const shell = nodebox.shell.create();\n      await shell.runCommand('exit', ['0']);\n\n      const readdir = (base: string): Promise<Array<string>> => {\n        return nodebox.fs.readdir(base).then((paths) => {\n          return paths.map((path) => `${base}/${path}`);\n        });\n      };\n\n      // Read the installed packages on the root-level \"node_modules\",\n      // assuming that they have been hoisted correctly.\n      return Promise.all([\n        readdir('/node_modules/@test'),\n        readdir('/node_modules/.store/@test'),\n        readdir('/node_modules/.store'),\n      ]).then((paths) => paths.flat());\n    },\n    [emulatorUrl, mockCdn.url]\n  );\n\n  expect(installedPaths).toEqual([\n    // Hoisted packages must be symlinked to the root.\n    '/node_modules/@test/a',\n    '/node_modules/@test/b',\n\n    // Hoisted packages are still physically installed in the store.\n    '/node_modules/.store/@test/a@1.0.0',\n    '/node_modules/.store/@test/b@2.0.0',\n    '/node_modules/.store/@test',\n\n    // A non-hoisted package is installed in the store.\n    '/node_modules/.store/4th-party@0.0.1',\n    '/node_modules/.store/node_modules',\n  ]);\n});\n"
  },
  {
    "path": "tests/features/shell.start.test.ts",
    "content": "import { test, expect } from 'tests';\n\ntest('starts a project successfully', async ({ runTestServer, page, emulatorUrl, getPreviewFrame }) => {\n  await runTestServer();\n\n  await page.evaluate(async (emulatorUrl) => {\n    const { Nodebox } = window;\n    const emulator = new Nodebox({\n      runtimeUrl: emulatorUrl,\n      iframe: document.getElementById('frame') as HTMLIFrameElement,\n    });\n\n    await emulator.connect();\n    await emulator.fs.init({\n      'index.js': `const http = require(\"node:http\");\nconst url = require(\"url\");\n\n// Create an HTTP server\nconst server = http.createServer((req, res) => {\n  // Parse the request url\n  const reqUrl = url.parse(req.url).pathname\n  \n  res.write(\"Hello world\")  \n  res.writeHead(200, { \"Content-Type\": \"text/html\" });\n  res.end()\n});\n\n// Now that server is running\nserver.listen(3000, \"127.0.0.1\", () => {\n  console.log('Server is running');\n});`,\n    });\n\n    const shellProcess = emulator.shell.create();\n\n    await shellProcess.runCommand('node', ['index.js']);\n  }, emulatorUrl);\n\n  // Must setup the HTTP server in the preview iframe.\n  const previewFrame = await getPreviewFrame();\n  const headingLocator = previewFrame.locator('text=\"Hello world\"');\n\n  await expect(headingLocator).toBeVisible({ timeout: 800000 });\n});\n\ntest('starts a project and exit it', async ({ runTestServer, page, emulatorUrl }) => {\n  await runTestServer();\n\n  await page.evaluate(async (emulatorUrl) => {\n    const { Nodebox } = window;\n    const emulator = new Nodebox({\n      runtimeUrl: emulatorUrl,\n      iframe: document.getElementById('frame') as HTMLIFrameElement,\n    });\n\n    await emulator.connect();\n    await emulator.fs.init({\n      'index.js': `const http = require(\"node:http\");\nconst url = require(\"url\");\n\n// Create an HTTP server\nconst server = http.createServer((req, res) => {\n  // Parse the request url\n  const reqUrl = url.parse(req.url).pathname\n  \n  res.write(\"Hello world\")  \n  res.writeHead(200, { \"Content-Type\": \"text/html\" });\n  res.end()\n});\n\n// Now that server is running\nserver.listen(3000, \"127.0.0.1\", () => {\n  console.log('Server is running');\n});`,\n    });\n\n    const shellProcess = emulator.shell.create();\n\n    await shellProcess.runCommand('node', ['index.js']);\n\n    await shellProcess.kill();\n  }, emulatorUrl);\n\n  // Must not setup the HTTP server in the preview iframe.\n  const emulatorFrame = page.frameLocator('#frame');\n  const headingLocator = emulatorFrame.locator('iframe[name=\"preview\"]');\n\n  expect(await headingLocator.count()).toEqual(0);\n});\n\ntest('supports restarting the preview from the consumer', async ({\n  runTestServer,\n  emulatorUrl,\n  page,\n  getPreviewFrame,\n  getBridgeFrameLocator,\n  getPreviewFrameLocator,\n}) => {\n  await runTestServer();\n\n  await page.evaluate(async (emulatorUrl) => {\n    const { Nodebox } = window;\n\n    const emulator = new Nodebox({\n      runtimeUrl: emulatorUrl,\n      iframe: document.getElementById('frame') as HTMLIFrameElement,\n    });\n\n    await emulator.connect();\n\n    await emulator.fs.init({\n      'index.js': `\nconst http = require('http')\n\nconst server = http.createServer((req, res) => {\n  res.write(\"App Preview\")\n  res.writeHead(200, { \"Content-Type\": \"text/html\" })\n  res.end()\n})\n\nserver.listen(3000, \"127.0.0.1\", () => {\n  console.log(\"Server is running\")\n})\n      `,\n    });\n\n    const shell = emulator.shell.create();\n\n    const startPreview = async () => {\n      await shell.runCommand('node', ['index.js']);\n    };\n    const stopPreview = async () => {\n      await shell.kill();\n    };\n\n    // @ts-ignore\n    window.startPreview = startPreview;\n\n    // @ts-ignore\n    window.stopPreview = stopPreview;\n  }, emulatorUrl);\n\n  // Must render the initial preview.\n  await page.evaluate(() => window.startPreview());\n  const initialPreviewFrame = await getPreviewFrame();\n  await expect(initialPreviewFrame.locator('text=App Preview')).toBeVisible({ timeout: 800000 });\n\n  // Stop the preview.\n  await page.evaluate(() => window.stopPreview());\n  const bridgeFrame = await getBridgeFrameLocator();\n  expect(bridgeFrame).not.toBeVisible();\n\n  const previewFrame = await getPreviewFrameLocator();\n  expect(previewFrame).not.toBeVisible();\n\n  // Restart the bridge/preview.\n  await page.evaluate(() => window.startPreview());\n  const incrementalPreviewFrame = await getPreviewFrame();\n  await expect(incrementalPreviewFrame.locator('text=App Preview')).toBeVisible({ timeout: 800000 });\n});\n"
  },
  {
    "path": "tests/features/worker_threads.test.ts",
    "content": "import { test, expect } from 'tests';\nimport waitForExpect from 'wait-for-expect';\n\ntest('increments \"threadId\" of each spawned child worker', async ({ runTestServer, page, emulatorUrl }) => {\n  await runTestServer();\n\n  const logs: Array<string> = [];\n  page.on('console', (msg) => logs.push(msg.text()));\n\n  await page.evaluate(async (emulatorUrl) => {\n    const { Nodebox } = window;\n\n    const emulator = new Nodebox({\n      runtimeUrl: emulatorUrl,\n      iframe: document.getElementById('frame') as HTMLIFrameElement,\n    });\n\n    await emulator.connect();\n\n    await emulator.fs.init({\n      'parent.js': `\nimport { Worker, threadId } from 'worker_threads'\nconsole.log('[parent]:', threadId)\n\n// Standalone child.\nconst standaloneChild = new Worker('./child-standalone.js')\nconsole.log('[parent] standalone child:', standaloneChild.threadId)\n\n// Child that spawns another child.\nconst childWithChildren = new Worker('./child-with-children.js')\nconsole.log('[parent] child with children:', childWithChildren.threadId)\n        `,\n      'child-standalone.js': `\nconsole.log('[child-standalone]:', require('worker_threads').threadId)\n      `,\n      'child-with-children.js': `\nimport { Worker, threadId } from 'worker_threads'\nconsole.log('[child-with-children]:', threadId)\n\nconst child = new Worker('./nested-child.js')\nconsole.log('[child-with-children] nested child:', child.threadId)\n        `,\n      'nested-child.js': `\nconsole.log('[nested-child]:', require('worker_threads').threadId)\n        `,\n    });\n\n    const shell = emulator.shell.create();\n    shell.stderr.on('data', (data) => {\n      console.error(data.trim());\n    });\n    shell.stdout.on('data', (data) => {\n      // eslint-disable-next-line no-console\n      console.log(data.trim());\n    });\n    await shell.runCommand('node', ['parent.js']);\n  }, emulatorUrl);\n\n  await page.pause();\n\n  await waitForExpect(() => {\n    expect(logs).toContain('[parent]: 0');\n\n    // Parent must increment the worker threadId\n    // with each spawned child worker.\n    expect(logs).toContain('[parent] standalone child: 1');\n    expect(logs).toContain('[child-standalone]: 1');\n\n    expect(logs).toContain('[child-with-children]: 2');\n    expect(logs).toContain('[child-with-children] nested child: 21');\n    /**\n     * @todo Uncomment this once we support nested workers.\n     * @see https://linear.app/codesandbox/issue/ECO-302/3rd-level-workers-cannot-be-spawned\n     */\n    // expect(logs).toContain('[nested-child]: 21');\n  });\n});\n\ntest('forwards \"workerData\" from parent to child', async ({ runTestServer, page, emulatorUrl }) => {\n  await runTestServer();\n\n  const logs: Array<string> = [];\n  page.on('console', (msg) => logs.push(msg.text()));\n\n  await page.evaluate(async (emulatorUrl) => {\n    const { Nodebox } = window;\n\n    const emulator = new Nodebox({\n      runtimeUrl: emulatorUrl,\n      iframe: document.getElementById('frame') as HTMLIFrameElement,\n    });\n\n    await emulator.connect();\n\n    await emulator.fs.init({\n      'parent.js': `\nimport { Worker } from 'worker_threads'\n\nconst worker = new Worker('./child.js', { workerData: 'Hello World' })\n        `,\n      'child.js': `\nimport { isMainThread, workerData, parentPort } from 'worker_threads'\n\nconsole.log('child.workerData:', workerData)\n        `,\n    });\n\n    const shell = emulator.shell.create();\n    shell.stderr.on('data', (data) => {\n      console.error(data.trim());\n    });\n    shell.stdout.on('data', (data) => {\n      // eslint-disable-next-line no-console\n      console.log(data.trim());\n    });\n    await shell.runCommand('node', ['parent.js']);\n  }, emulatorUrl);\n\n  await waitForExpect(() => {\n    // The child worker must have access to the \"workerData\"\n    // provided by the parent from the \"worker_threads\" module.\n    expect(logs).toContain('child.workerData: Hello World');\n  });\n});\n\ntest('exposes \"isMainThread: false\" for child workers', async ({ runTestServer, page, emulatorUrl }) => {\n  await runTestServer();\n\n  const logs: Array<string> = [];\n  page.on('console', (msg) => logs.push(msg.text()));\n\n  await page.evaluate(async (emulatorUrl) => {\n    const { Nodebox } = window;\n\n    const emulator = new Nodebox({\n      runtimeUrl: emulatorUrl,\n      iframe: document.getElementById('frame') as HTMLIFrameElement,\n    });\n\n    await emulator.connect();\n\n    await emulator.fs.init({\n      'parent.js': `\nimport { Worker, isMainThread } from 'worker_threads'\n\nconst worker = new Worker('./child.js')\nconsole.log('parent.isMainThread:', isMainThread)\n        `,\n      'child.js': `\nimport { isMainThread } from 'worker_threads'\n\nconsole.log('child.isMainThread:', isMainThread)\n      `,\n    });\n\n    const shell = emulator.shell.create();\n    shell.stderr.on('data', (data) => {\n      console.error(data.trim());\n    });\n    shell.stdout.on('data', (data) => {\n      // eslint-disable-next-line no-console\n      console.log(data.trim());\n    });\n    await shell.runCommand('node', ['parent.js']);\n  }, emulatorUrl);\n\n  await waitForExpect(() => {\n    // The parent worker must be the main thread.\n    expect(logs).toContain('parent.isMainThread: true');\n\n    // The child worker must have access to the \"isMainThread\"\n    // property from the \"worker_threads\" module.\n    expect(logs).toContain('child.isMainThread: false');\n  });\n});\n\ntest('exposes a custom \"resourceLimits\" to the child workd', async ({ runTestServer, page, emulatorUrl }) => {\n  await runTestServer();\n\n  const logs: Array<string> = [];\n  page.on('console', (msg) => logs.push(msg.text()));\n\n  await page.evaluate(async (emulatorUrl) => {\n    const { Nodebox } = window;\n\n    const emulator = new Nodebox({\n      runtimeUrl: emulatorUrl,\n      iframe: document.getElementById('frame') as HTMLIFrameElement,\n    });\n\n    await emulator.connect();\n\n    await emulator.fs.init({\n      'parent.js': `\nimport { Worker, resourceLimits } from 'worker_threads'\n\nconst worker = new Worker('./child.js', {\n  resourceLimits: {\n    stackSizeMb: 2\n  }\n})\n\nconsole.log(\"parent.resourceLimits:\", resourceLimits)\n        `,\n      'child.js': `\nimport { resourceLimits } from 'worker_threads'\n\nconsole.log('child.stackSizeMb:', resourceLimits.stackSizeMb)\n      `,\n    });\n\n    const shell = emulator.shell.create();\n    shell.stderr.on('data', (data) => {\n      console.error(data.trim());\n    });\n    shell.stdout.on('data', (data) => {\n      // eslint-disable-next-line no-console\n      console.log(data.trim());\n    });\n    await shell.runCommand('node', ['parent.js']);\n  }, emulatorUrl);\n\n  await waitForExpect(() => {\n    expect(logs).toContain('parent.resourceLimits: {}');\n    expect(logs).toContain('child.stackSizeMb: 2');\n  });\n});\n\n/**\n * Must expose the \"parentPort\" reference to the child worker\n * to communicate with the parent worker.\n * @see https://nodejs.org/api/worker_threads.html#workerparentport\n */\ntest('exposes a \"parentPort\" to communicate with the parent worker', async ({ runTestServer, page, emulatorUrl }) => {\n  await runTestServer();\n\n  const logs: Array<string> = [];\n  page.on('console', (msg) => logs.push(msg.text()));\n\n  await page.evaluate(async (emulatorUrl) => {\n    const { Nodebox } = window;\n\n    const emulator = new Nodebox({\n      runtimeUrl: emulatorUrl,\n      iframe: document.getElementById('frame') as HTMLIFrameElement,\n    });\n\n    await emulator.connect();\n\n    await emulator.fs.init({\n      'parent.js': `\nimport { Worker } from 'worker_threads'\n\nconst worker = new Worker('./child.js')\n\nworker.once('message', (data) => {\n  console.log('parent (from child):', data)\n})\n\nworker.postMessage('hello from parent')\n        `,\n      'child.js': `\nimport { parentPort } from 'worker_threads'\n\nparentPort.once('message', (data) => {\n  console.log('child (from parent):', data)\n  parentPort.postMessage('hello from child')\n})\n      `,\n    });\n\n    const shell = emulator.shell.create();\n    shell.stderr.on('data', (data) => {\n      console.error(data.trim());\n    });\n    shell.stdout.on('data', (data) => {\n      // eslint-disable-next-line no-console\n      console.log(data.trim());\n    });\n    await shell.runCommand('node', ['parent.js']);\n  }, emulatorUrl);\n\n  await waitForExpect(() => {\n    expect(logs).toContain('child (from parent): hello from parent');\n    expect(logs).toContain('parent (from child): hello from child');\n  });\n});\n\ntest('allows modifying parent env using the \"SHARE_ENV\" flag', async ({ runTestServer, page, emulatorUrl }) => {\n  await runTestServer();\n\n  const logs: Array<string> = [];\n  page.on('console', (msg) => logs.push(msg.text()));\n\n  await page.evaluate(async (emulatorUrl) => {\n    const { Nodebox } = window;\n\n    const emulator = new Nodebox({\n      runtimeUrl: emulatorUrl,\n      iframe: document.getElementById('frame') as HTMLIFrameElement,\n    });\n\n    await emulator.connect();\n\n    await emulator.fs.init({\n      'parent.js': `\nimport { Worker, SHARE_ENV } from 'worker_threads'\n\nprocess.env.PARENT_A = 'parent-a'\nprocess.env.PARENT_B = 'parent-b'\n\nconsole.log('parent (initial):', process.env.PARENT_A, process.env.PARENT_B)\n\nconst worker = new Worker('./child.js', { env: SHARE_ENV })\n\nworker.on('exit', () => {\n  console.log('child (modified):', process.env.PARENT_A)\n  console.log('child (deleted):', process.env.PARENT_B)\n  console.log('child (added):', process.env.CHILD_VALUE)\n})\n        `,\n      'child.js': `\nimport { parentPort } from 'worker_threads'\n\n// Child should be able to read parent env.\nconsole.log('child (read):', process.env.PARENT_A)\n\n// Child should be able to modify parent env.\nprocess.env.PARENT_A = 'parent-a-modified'\ndelete process.env.PARENT_B\n\n// Child should propagate env changes to the parent.\nprocess.env.CHILD_VALUE = 'child'\n\nprocess.exit(0)\n      `,\n    });\n\n    const shell = emulator.shell.create();\n    shell.stderr.on('data', (data) => {\n      console.error(data.trim());\n    });\n    shell.stdout.on('data', (data) => {\n      // eslint-disable-next-line no-console\n      console.log(data.trim());\n    });\n    await shell.runCommand('node', ['parent.js']);\n  }, emulatorUrl);\n\n  await waitForExpect(() => {\n    expect(logs).toContain('parent (initial): parent-a parent-b');\n    expect(logs).toContain('child (read): parent-a');\n\n    expect(logs).toContain('child (modified): parent-a-modified');\n    expect(logs).toContain('child (deleted): undefined');\n    expect(logs).toContain('child (added): child');\n  });\n});\n\ntest('forwards data via \"setEnvironmentData\" and \"getEnvironmentData\"', async ({\n  runTestServer,\n  page,\n  emulatorUrl,\n}) => {\n  await runTestServer();\n\n  const logs: Array<string> = [];\n  page.on('console', (msg) => logs.push(msg.text()));\n\n  await page.evaluate(async (emulatorUrl) => {\n    const { Nodebox } = window;\n\n    const emulator = new Nodebox({\n      runtimeUrl: emulatorUrl,\n      iframe: document.getElementById('frame') as HTMLIFrameElement,\n    });\n\n    await emulator.connect();\n\n    await emulator.fs.init({\n      'parent.js': `\nimport { Worker, getEnvironmentData, setEnvironmentData } from 'worker_threads'\n\nsetEnvironmentData('hello', 'world')\nconst worker = new Worker('./child.js')\n\n// Parent is the main thread, which also receives the env data in Node.js\nconsole.log('parent (get):', getEnvironmentData('hello'))\n        `,\n      'child.js': `\nimport { getEnvironmentData } from 'worker_threads'\n\n// Child must be able to get env data set by the parent worker.\nconsole.log('child (get):', getEnvironmentData('hello'))\n      `,\n    });\n\n    const shell = emulator.shell.create();\n    shell.stderr.on('data', (data) => {\n      console.error(data.trim());\n    });\n    shell.stdout.on('data', (data) => {\n      // eslint-disable-next-line no-console\n      console.log(data.trim());\n    });\n    await shell.runCommand('node', ['parent.js']);\n  }, emulatorUrl);\n\n  await waitForExpect(() => {\n    expect(logs).toContain('parent (get): world');\n    expect(logs).toContain('child (get): world');\n  });\n});\n\ntest('spawn worker_thread from inside a worker_thread', async ({ runTestServer, page, emulatorUrl }) => {\n  await runTestServer();\n\n  const logs: Array<string> = [];\n  page.on('console', (msg) => logs.push(msg.text()));\n\n  await page.evaluate(async (emulatorUrl) => {\n    const { Nodebox } = window;\n\n    const emulator = new Nodebox({\n      runtimeUrl: emulatorUrl,\n      iframe: document.getElementById('frame') as HTMLIFrameElement,\n    });\n\n    await emulator.connect();\n\n    await emulator.fs.init({\n      'parent.js': `\nimport { Worker, getEnvironmentData, setEnvironmentData } from 'worker_threads'\nsetEnvironmentData('hello', 'world')\nconst worker = new Worker('./child.js')\n// Parent is the main thread, should have the same env data as the child.\nconsole.log('parent (get):', getEnvironmentData('hello'))\n        `,\n      'child.js': `\n  import { Worker, getEnvironmentData } from 'worker_threads'\n  const worker = new Worker('./child-two.js')\n  \n  // Child must be able to get env data set by the parent worker.\n  console.log('child (get):', getEnvironmentData('hello'))\n        `,\n      'child-two.js': `\n  import { getEnvironmentData } from 'worker_threads'\n  \n  // Child must be able to get env data set by the parent worker.\n  console.log('child-two (get):', getEnvironmentData('hello'))\n        `,\n    });\n\n    const shell = emulator.shell.create();\n    shell.stderr.on('data', (data) => {\n      console.error(data.trim());\n    });\n    shell.stdout.on('data', (data) => {\n      // eslint-disable-next-line no-console\n      console.log(data.trim());\n    });\n    await shell.runCommand('node', ['parent.js']);\n  }, emulatorUrl);\n\n  await waitForExpect(() => {\n    expect(logs).toContain('parent (get): world');\n    expect(logs).toContain('child (get): world');\n    expect(logs).toContain('child-two (get): world');\n  });\n});\n\ntest('evaluates given code when \"eval\" is set to true', async ({ runTestServer, page, emulatorUrl }) => {\n  await runTestServer();\n\n  const logs: Array<string> = [];\n  page.on('console', (msg) => logs.push(msg.text()));\n\n  await page.evaluate(async (emulatorUrl) => {\n    const { Nodebox } = window;\n\n    const emulator = new Nodebox({\n      runtimeUrl: emulatorUrl,\n      iframe: document.getElementById('frame') as HTMLIFrameElement,\n    });\n\n    await emulator.connect();\n\n    await emulator.fs.init({\n      'worker.js': `\nimport { Worker } from 'worker_threads'\n\nconst worker = new Worker(\\`\nconsole.log('eval: hello')\nconsole.log('__dirname', __dirname)\nconsole.log('__filename', __filename)\n\\`, { eval: true })\n        `,\n    });\n\n    const shell = emulator.shell.create();\n    shell.stderr.on('data', (data) => {\n      console.error(data.trim());\n    });\n    shell.stdout.on('data', (data) => {\n      // eslint-disable-next-line no-console\n      console.log(data.trim());\n    });\n\n    await shell.runCommand('node', ['worker.js']);\n  }, emulatorUrl);\n\n  await waitForExpect(() => {\n    expect(logs).toContain('eval: hello');\n    // These globals are set to specific values in eval worker mode.\n    expect(logs).toContain('__dirname .');\n    expect(logs).toContain('__filename [eval]');\n  });\n});\n"
  },
  {
    "path": "tests/frameworks/astro.start.test.ts",
    "content": "import { test, expect } from 'tests';\n\ntest.fixme('starts an Astro project', async ({ runTestServer, runExample, page, getPreviewFrame }) => {\n  await runTestServer();\n\n  page.setDefaultTimeout(300_000);\n\n  await runExample(require.resolve('../examples/astro.example.js'));\n\n  const previewFrame = await getPreviewFrame();\n  const headingLocator = previewFrame.locator('text=\"Hello world\"');\n\n  await expect(headingLocator).toBeVisible({ timeout: 900_000 });\n});\n"
  },
  {
    "path": "tests/frameworks/express.test.ts",
    "content": "import { test, expect } from 'tests';\n\ntest('runs an Express application', async ({ runTestServer, getPreviewFrame, runExample }) => {\n  await runTestServer();\n\n  await runExample(require.resolve('../examples/express.example.js'));\n\n  // Must render the Vite app in the preview iframe.\n  const previewFrame = await getPreviewFrame();\n  const headingLocator = previewFrame.locator('text=Hello world');\n\n  await expect(headingLocator).toBeVisible({ timeout: 800_000 });\n});\n"
  },
  {
    "path": "tests/frameworks/fastify.test.ts",
    "content": "import { test, expect } from 'tests';\n\ntest('runs a Fastify.js application', async ({ runTestServer, getPreviewFrame, runExample }) => {\n  await runTestServer();\n\n  await runExample(require.resolve('../examples/fastify.example.js'));\n\n  // Must render the Vite app in the preview iframe.\n  const previewFrame = await getPreviewFrame();\n  const headingLocator = previewFrame.locator('text={\"hello\":\"world\"}');\n\n  await expect(headingLocator).toBeVisible({ timeout: 800_000 });\n});\n"
  },
  {
    "path": "tests/frameworks/http-server.start.test.ts",
    "content": "import { test, expect } from 'tests';\n\ntest('starts a vanilla HTTP server project', async ({ runTestServer, getPreviewFrame, runExample }) => {\n  await runTestServer();\n\n  await runExample(require.resolve('../examples/http-server.example.js'));\n\n  const previewFrame = await getPreviewFrame();\n  const headingLocator = previewFrame.locator('text=\"Hello world\"');\n\n  await expect(headingLocator).toBeVisible({ timeout: 800000 });\n});\n"
  },
  {
    "path": "tests/frameworks/next.start.test.ts",
    "content": "import { test, expect } from 'tests';\n\ntest.setTimeout(240_000);\n\n/**\n * @see https://github.com/codesandbox/nodebox/actions/runs/3532894910/jobs/5927821309\n */\ntest.fixme('starts a NextJS project', async ({ runTestServer, page, getPreviewFrame, runExample }) => {\n  await runTestServer();\n\n  page.on('pageerror', (error) => console.error('Page error:', error));\n  page.on('crash', () => console.error('PAGE CRASHED!'));\n  page.on('console', (message) => console.log('Console:', message.type(), message.text()));\n\n  await runExample(require.resolve('../examples/next.example.js'));\n\n  // Must render the Vite app in the preview iframe.\n  const previewFrame = await getPreviewFrame();\n\n  console.warn('preview framwe html:', await previewFrame.locator('body').textContent());\n\n  const nextBlock = previewFrame.locator('#__next');\n  await expect(nextBlock).toBeVisible({ timeout: 300_000 });\n});\n"
  },
  {
    "path": "tests/frameworks/vite.start.test.ts",
    "content": "import { test, expect } from 'tests';\n\ntest('starts a Vite project', async ({ runTestServer, getPreviewFrame, runExample }) => {\n  await runTestServer();\n\n  await runExample(require.resolve('../examples/vite.example.js'));\n\n  // Must render the Vite app in the preview iframe.\n  const previewFrame = await getPreviewFrame();\n  const headingLocator = previewFrame.locator('text=Hello world');\n\n  await expect(headingLocator).toBeVisible({ timeout: 800_000 });\n});\n\ntest('starts a Vite React project', async ({ runTestServer, runExample, getPreviewFrame }) => {\n  await runTestServer();\n\n  await runExample(require.resolve('../examples/vite-react.example.js'));\n\n  // Must render the Vite app in the preview iframe.\n  const previewFrame = await getPreviewFrame();\n  const headingLocator = previewFrame.locator('text=\"Hello world\"');\n\n  await expect(headingLocator).toBeVisible({ timeout: 800000 });\n});\n\ntest('starts a Vite Vue project', async ({ runTestServer, runExample, getPreviewFrame }) => {\n  await runTestServer();\n\n  await runExample(require.resolve('../examples/vite-vue.example.js'));\n\n  // Must render the Vite app in the preview iframe.\n  const previewFrame = await getPreviewFrame();\n  const headingLocator = previewFrame.locator('text=\"Hello world\"');\n\n  await expect(headingLocator).toBeVisible({ timeout: 800000 });\n});\n\ntest('starts a Vite Svelte project', async ({ runTestServer, runExample, getPreviewFrame }) => {\n  await runTestServer();\n\n  await runExample(require.resolve('../examples/vite-svelte.example.js'));\n\n  // Must render the Vite app in the preview iframe.\n  const previewFrame = await getPreviewFrame();\n  const headingLocator = previewFrame.locator('text=\"Hello world\"');\n\n  await expect(headingLocator).toBeVisible({ timeout: 800000 });\n});\n"
  },
  {
    "path": "tests/frameworks/vuepress.start.test.ts",
    "content": "import { test, expect } from 'tests';\n\ntest('starts a Vuepress project', async ({ runTestServer, getPreviewFrame, runExample }) => {\n  await runTestServer();\n\n  await runExample(require.resolve('../examples/vuepress.example.js'));\n\n  const previewFrame = await getPreviewFrame();\n  const headingLocator = previewFrame.locator('h1', { hasText: 'Hello world' });\n\n  await expect(headingLocator).toBeVisible({ timeout: 800_000 });\n});\n"
  },
  {
    "path": "tests/global.d.ts",
    "content": "declare namespace NodeJS {\n  export interface ProcessEnv {\n    EMULATOR_HOST: string;\n    PREVIEW_HOST: string;\n  }\n}\n\ndeclare global {\n  export interface Window {\n    Nodebox: typeof import('../packages/nodebox').Nodebox;\n    downloadProject(packFilePath: string): Promise<Record<string, Uint8Array>>;\n  }\n}\n\nexport {};\n"
  },
  {
    "path": "tests/index.ts",
    "content": "import { test as base, expect, Locator } from '@playwright/test';\nimport { runTestServer } from './setup/runTestServer';\nimport { readFile } from 'node:fs/promises';\n\ndeclare global {\n  interface Window {\n    /**\n     * Function defined inside the page scope by the example file\n     */\n    runExample(emulatorUrl: string): Promise<void>;\n  }\n}\n\ninterface Fixtures {\n  emulatorUrl: string;\n  runTestServer(): Promise<void>;\n  getBridgeFrameLocator(): Promise<Locator>;\n  getPreviewFrameLocator(): Promise<Locator>;\n\n  /**\n   * Returns the preview frame of the application.\n   * @note This awaits both the bridge and the preview locators\n   * before returning.\n   */\n  getPreviewFrame(): Promise<Locator>;\n  runExample(path: string): Promise<void>;\n}\n\nconst EMULATOR_URL = `https://${process.env.EMULATOR_HOST}?layout=debug`;\n\nconst test = base.extend<Fixtures>({\n  emulatorUrl: EMULATOR_URL,\n\n  async runTestServer({ page }, use) {\n    const { app, address } = await runTestServer();\n\n    await use(async () => {\n      await page.goto(address.replace('127.0.0.1', 'localhost'), { waitUntil: 'networkidle' });\n\n      if (process.env.PWDEBUG === '1' || process.env.PWDEBUG === 'true') {\n        await page.evaluate(() => {\n          localStorage.setItem('CSB_EMULATOR_DEBUG', 'true');\n        });\n      }\n\n      await page.waitForFunction(() => {\n        return typeof window.Nodebox !== 'undefined';\n      });\n    });\n\n    await app.close();\n  },\n\n  async getBridgeFrameLocator({ page }, use) {\n    await use(async () => {\n      // First, wait for the \"Previews\" frame to become visible.\n      // This frame hosts the bridge and the app's preview frame.\n      const previewsFrame = page.frameLocator('#frame');\n      await previewsFrame.locator('html').waitFor();\n      return previewsFrame.frameLocator('[name=\"bridge\"]').locator('body');\n    });\n  },\n\n  async getPreviewFrameLocator({ page }, use) {\n    await use(async () => {\n      // First, wait for the \"Previews\" frame to become visible.\n      // This frame hosts the bridge and the app's preview frame.\n      const previewsFrame = page.frameLocator('#frame');\n      await previewsFrame.locator('html').waitFor();\n      return previewsFrame.frameLocator('[name=\"preview\"]').locator('body');\n    });\n  },\n\n  async getPreviewFrame({ getBridgeFrameLocator, getPreviewFrameLocator }, use) {\n    await use(async () => {\n      const bridgeFrame = await getBridgeFrameLocator();\n      await bridgeFrame.waitFor();\n\n      const previewFrame = await getPreviewFrameLocator();\n      await previewFrame.waitFor();\n\n      return previewFrame;\n    });\n  },\n\n  async runExample({ page }, use) {\n    await use(async (exampleFilePath) => {\n      const emulatorUrl = EMULATOR_URL;\n      const content = await readFile(exampleFilePath, 'utf8');\n\n      page.mainFrame().addScriptTag({ content });\n\n      await page.evaluate(async (emulatorUrl) => {\n        await window.runExample(emulatorUrl);\n      }, emulatorUrl);\n    });\n  },\n});\n\nexport { test, expect };\n"
  },
  {
    "path": "tests/node-packages/apollo-server.test.ts",
    "content": "import { test, expect } from 'tests';\n\ntest('should install and run `apollo-server` dependency', async ({ runTestServer, runExample, getPreviewFrame }) => {\n  await runTestServer();\n\n  await runExample(require.resolve('../examples/apollo-server.example.js'));\n\n  // Must render the Vite app in the preview iframe.\n  const previewFrame = await getPreviewFrame();\n  const headingLocator = previewFrame.locator(\"h1\");\n\n  await expect(headingLocator).toBeVisible({ timeout: 800000 });\n});\n"
  },
  {
    "path": "tests/node-packages/eslint.test.ts",
    "content": "import { test, expect } from 'tests';\n\ntest('gets eslint diagnostic', async ({ runTestServer, page, emulatorUrl }) => {\n  await runTestServer();\n\n  const diagnosticOutput = await page.evaluate(async (emulatorUrl) => {\n    const { Nodebox } = window;\n    const emulator = new Nodebox({\n      runtimeUrl: emulatorUrl,\n      iframe: document.getElementById('frame') as HTMLIFrameElement,\n    });\n\n    await emulator.connect();\n\n    await emulator.fs.init({\n      '/index.js': `const http = require('http');\n  const hostname = '127.0.0.1';\n  const port = 3000;\n  const server = http.createServer((req, res) => {\n    res.statusCode = 200;\n    res.setHeader('Content-Type', 'text/html');\n    res.end('Hello world');\n  });\n  \n  console.log(\"foo\");\n  \n  server.listen(port, hostname, () => {\n    console.log(\\`Server running at http://\\${hostname}:\\${port}/\\`);\n  });`,\n\n      '/.eslintrc.js': `module.exports = {\n    env: {\n      browser: true,\n      es2021: true\n    },\n    parserOptions: {\n      ecmaVersion: 'latest',\n      sourceType: 'module'\n    },\n    rules: { \n      \"semi\": [\"error\", \"always\"],\n      \"no-console\": [\"error\", { allow: [\"warn\", \"error\"] }]\n    }\n  }\n  `,\n\n      '/package.json': JSON.stringify({\n        devDependencies: {\n          eslint: '^8.0.1',\n        },\n        scripts: { start: 'eslint index.js' },\n        main: 'index.js',\n      }),\n    });\n\n    const shellProcess = emulator.shell.create();\n\n    return new Promise<string>(async (resolve) => {\n      shellProcess.stdout.on('data', (data) => {\n        resolve(data);\n      });\n\n      await shellProcess.runCommand('eslint', ['index.js']);\n    });\n  }, emulatorUrl);\n\n  expect(diagnosticOutput).toEqual(`\u001b[0m\u001b[0m\n\u001b[0m\u001b[4m/nodebox/index.js\u001b[24m\u001b[0m\n\u001b[0m  \u001b[2m10:3\u001b[22m  \u001b[31merror\u001b[39m  Unexpected console statement  \u001b[2mno-console\u001b[22m\u001b[0m\n\u001b[0m  \u001b[2m13:5\u001b[22m  \u001b[31merror\u001b[39m  Unexpected console statement  \u001b[2mno-console\u001b[22m\u001b[0m\n\u001b[0m\u001b[0m\n\u001b[0m\u001b[31m\u001b[1m✖ 2 problems (2 errors, 0 warnings)\u001b[22m\u001b[39m\u001b[0m\n\u001b[0m\u001b[31m\u001b[1m\u001b[22m\u001b[39m\u001b[0m\n`);\n});\n"
  },
  {
    "path": "tests/node-packages/node-fetch.test.ts",
    "content": "import { test, expect } from 'tests';\n\ntest('starts a `node-fetch` project', async ({ runTestServer, page, emulatorUrl, getPreviewFrame }) => {\n  await runTestServer();\n\n  await page.evaluate(async (emulatorUrl) => {\n    const { Nodebox } = window;\n\n    const emulator = new Nodebox({\n      runtimeUrl: emulatorUrl,\n      iframe: document.getElementById('frame') as HTMLIFrameElement,\n    });\n\n    await emulator.connect();\n\n    // Initialize the file system with a Vite project.\n    await emulator.fs.init({\n      '/index.js': `const http = require('http');\nimport fetch from 'node-fetch';\n\nconst hostname = '127.0.0.1';\nconst port = 3000;\n\nconst server = http.createServer(async(req, res) => {\n  const response = await fetch('https://sandpack-cdn-v2.codesandbox.io/v2/json/deps/bG9hZGFzaEAxLjAuMA==');\n\n  if (!response.ok) {\n    res.statusCode = response.status;\n    res.end(await response.text());\n    return\n  }\n\n  const data = await response.json();\n  \n  res.statusCode = 200;\n  res.setHeader('Content-Type', 'text/json');\n  res.end(JSON.stringify(data));\n});\n\nserver.listen(port, hostname, () => {\n  console.log(\\`Server running at http://\\${hostname}:\\${port}/\\`);\n});`,\n\n      '/package.json': JSON.stringify({\n        dependencies: { 'node-fetch': '3.3.0' },\n        scripts: { start: 'node index.js' },\n        main: 'index.js',\n      }),\n    });\n\n    // Run the Vite app.\n    const shellProcess = emulator.shell.create();\n    await shellProcess.runCommand('node', ['index.js']);\n  }, emulatorUrl);\n\n  // Must render the Vite app in the preview iframe.\n  const previewFrame = await getPreviewFrame();\n  const headingLocator = previewFrame.locator('text=\"{\"loadash@1\":\"1.0.0\"}\"');\n\n  await expect(headingLocator).toBeVisible({ timeout: 800000 });\n});\n"
  },
  {
    "path": "tests/node-packages/nodemon.test.ts",
    "content": "import { test, expect } from 'tests';\n\ntest.skip('starts a `nodemon` project', async ({ runTestServer, runExample, getPreviewFrame }) => {\n  await runTestServer();\n\n  await runExample(require.resolve('../examples/nodemon.example.js'));\n\n  // Must render the Vite app in the preview iframe.\n  const previewFrame = await getPreviewFrame();\n  const headingLocator = previewFrame.locator('text=\"Hello world\"');\n\n  await expect(headingLocator).toBeVisible({ timeout: 800000 });\n});\n"
  },
  {
    "path": "tests/setup/MockCdn.ts",
    "content": "import { invariant } from 'outvariant';\nimport { FastifyInstance, FastifyListenOptions, FastifyReply, FastifyRequest } from 'fastify';\nimport { type FilesMap } from '@codesandbox/nodebox';\nimport { encode } from '@msgpack/msgpack';\nimport { setupApp } from '../../internals/servers/utils';\n\ninterface MockCdnOptions {\n  packages: Array<MockCdnPackage>;\n}\n\ninterface MockCdnPackage {\n  name: string;\n  version: string;\n  files: FilesMap;\n}\n\nexport class MockCdn {\n  private app: FastifyInstance;\n  private packages: Array<MockCdnPackage>;\n  private _url?: string;\n\n  constructor(options: MockCdnOptions) {\n    this.packages = options.packages;\n\n    this.app = setupApp();\n    this.app.log.level = 'error';\n\n    this.app.get('/', (req, res) => {\n      res.send(`This is a mock CDN for testing purposes.`);\n    });\n    this.app.get('/v2/deps/:query', this.dependencyQueryMiddleware.bind(this));\n    this.app.get('/v2/mod/:query', this.moduleQueryMiddleware.bind(this));\n  }\n\n  private respondWith(res: FastifyReply, data: unknown) {\n    res.type('application/octet-stream');\n    res.send(Buffer.from(encode(data)));\n  }\n\n  private dependencyQueryMiddleware(req: FastifyRequest, res: FastifyReply): void {\n    res.header('access-control-allow-origin', '*');\n\n    const responseJson: Record<string, string> = {};\n\n    for (const pkg of this.packages) {\n      const pkgMajorVersion = pkg.version.split('.')[0];\n      responseJson[`${pkg.name}@${pkgMajorVersion}`] = pkg.version;\n    }\n\n    this.respondWith(res, responseJson);\n  }\n\n  private moduleQueryMiddleware(req: FastifyRequest<{ Params: { query: string } }>, res: FastifyReply): void {\n    res.header('access-control-allow-origin', '*');\n    const parsedQuery = atob(req.params.query);\n\n    for (const pkg of this.packages) {\n      const pkgPragma = this.getPackagePragma(pkg.name, pkg.version);\n\n      if (parsedQuery === pkgPragma) {\n        this.respondWith(res, pkg.files);\n        return;\n      }\n    }\n\n    // Otherwise, respond with a 404.\n    res.status(401).send(`Unknown dependency \"${parsedQuery}\"`);\n  }\n\n  private getPackagePragma(pkgName: string, packageVersion: string): string {\n    return `${pkgName}@${packageVersion}`;\n  }\n\n  get url(): string {\n    invariant(this._url, 'Failed to access \"url\" on MockCdn: the server is not running');\n    return this._url;\n  }\n\n  public async listen(options?: FastifyListenOptions): Promise<string> {\n    const serverUrl = await this.app.listen(options);\n    this._url = serverUrl;\n    return serverUrl;\n  }\n}\n"
  },
  {
    "path": "tests/setup/globalSetup.ts",
    "content": "import * as path from 'path';\nimport { config } from 'dotenv';\nimport { format } from 'outvariant';\nimport { Config } from '@playwright/test';\nimport { DeferredPromise } from '@open-draft/deferred-promise';\nimport { ChildProcess, spawn } from 'child_process';\nimport { runSandpackCDNProxy } from './runSandpackCDNProxy';\n\nconfig({\n  path: path.resolve(__dirname, '../..', '.env.test'),\n});\n\n/**\n * @see https://playwright.dev/docs/test-advanced#global-setup-and-teardown\n */\nexport default async function globalSetup(_context: Config): Promise<() => Promise<void>> {\n  const [runtimeIoResult, previewIoResult] = await Promise.allSettled([runRuntimeServer(), runPreviewServer()]);\n\n  if (runtimeIoResult.status === 'rejected' || previewIoResult.status === 'rejected') {\n    if (runtimeIoResult.status === 'fulfilled') {\n      runtimeIoResult.value.kill();\n    } else if (previewIoResult.status === 'fulfilled') {\n      previewIoResult.value.kill();\n    }\n\n    if (runtimeIoResult.status === 'rejected') {\n      throw runtimeIoResult.reason;\n    } else if (previewIoResult.status === 'rejected') {\n      throw previewIoResult.reason;\n    }\n  }\n\n  const cdnProxy = await runSandpackCDNProxy();\n  return async () => {\n    cdnProxy.app.close();\n    runtimeIoResult.value.kill();\n    previewIoResult.value.kill();\n  };\n}\n\nfunction runRuntimeServer(): DeferredPromise<ChildProcess> {\n  return spawnAndWaitForStdout('pnpm', ['start:runtime'], (stdout) => {\n    return stdout.includes('Server is now listening');\n  });\n}\n\nfunction runPreviewServer(): DeferredPromise<ChildProcess> {\n  return spawnAndWaitForStdout('pnpm', ['start:preview'], (stdout) => {\n    return stdout.includes('Server is now listening');\n  });\n}\n\nfunction spawnAndWaitForStdout(\n  command: string,\n  args: string[],\n  predicate: (stdout: string) => boolean\n): DeferredPromise<ChildProcess> {\n  const promise = new DeferredPromise<ChildProcess>();\n  const io = spawn(command, args, {\n    env: {\n      ...process.env,\n      NODE_ENV: 'test',\n    },\n  });\n  let stdout = Buffer.from('');\n\n  io.stdout.on('data', (raw: Buffer) => {\n    console.log(raw.toString('utf8'));\n    stdout = Buffer.concat([stdout, raw]);\n\n    if (predicate(raw.toString('utf8'))) {\n      promise.resolve(io);\n    }\n  });\n\n  io.stderr.on('data', (raw: Buffer) => {\n    console.error(stdout.toString('utf8'));\n    promise.reject(new Error(raw.toString('utf8')));\n    io.kill(1);\n  });\n\n  io.once('error', (error) => promise.reject(error));\n  io.once('exit', (code) => {\n    if (code !== 0) {\n      promise.reject(new Error(format('Process \"%s %j\" exited with code %d', command, args, code)));\n    }\n  });\n\n  return promise;\n}\n"
  },
  {
    "path": "tests/setup/runSandpackCDNProxy.ts",
    "content": "import path from 'path';\nimport { type FastifyInstance } from 'fastify';\nimport fs from 'fs-extra';\nimport fetch from 'node-fetch';\nimport { DeferredPromise } from '@open-draft/deferred-promise';\nimport { setupApp } from '../../internals/servers/utils';\n\ninterface TestServerReturnType {\n  app: FastifyInstance;\n  address: string;\n}\n\nconst TEST_DATA_DIR = path.join(__dirname, '../cdn-proxy');\n\nexport async function runSandpackCDNProxy(): Promise<TestServerReturnType> {\n  const serverReady = new DeferredPromise<TestServerReturnType>();\n  const app = setupApp();\n  app.log.level = 'error';\n\n  app.get('/*', async (req, res) => {\n    console.log(`CDN Proxy: ${req.url}`);\n    const targetPath = path.join(TEST_DATA_DIR, req.url);\n    const dirname = path.dirname(targetPath);\n    try {\n      await fs.mkdir(dirname, { recursive: true });\n    } catch (err) {\n      // do nothing\n    }\n    // Long cache ttl does not matter as it's only for tests and fetching should be near-instant\n    res.header('cache-control', 'public, max-age=900');\n    res.header('access-control-allow-origin', '*');\n    res.header('access-control-allow-headers', '*');\n    res.header('access-control-allow-methods', 'GET, POST, OPTIONS');\n    try {\n      const existingResponse = await fs.readFile(targetPath);\n      res.send(existingResponse);\n      console.log(`Served ${req.url} from local cache`);\n    } catch (err) {\n      console.log(`Fetching ${req.url} from remote`);\n      const response = await fetch('https://sandpack-cdn-v2.codesandbox.io' + req.url);\n      const buf = await response.buffer();\n      await fs.writeFile(targetPath, buf);\n      console.log(`Served ${req.url} from remote`);\n      res.send(buf);\n    }\n  });\n\n  app.listen({ port: 3500 }, (error, address) => {\n    if (error) {\n      app.log.error(error);\n      serverReady.reject(error);\n      return;\n    }\n\n    serverReady.resolve({ app, address });\n  });\n\n  return serverReady;\n}\n"
  },
  {
    "path": "tests/setup/runTestServer.ts",
    "content": "import path from 'path';\nimport { type FastifyInstance } from 'fastify';\nimport fastifyStatic from '@fastify/static';\nimport { DeferredPromise } from '@open-draft/deferred-promise';\nimport { setupApp } from '../../internals/servers/utils';\n\ninterface TestServerReturnType {\n  app: FastifyInstance;\n  address: string;\n}\n\nexport async function runTestServer(): Promise<TestServerReturnType> {\n  const serverReady = new DeferredPromise<TestServerReturnType>();\n  const app = setupApp();\n  app.log.level = 'error';\n\n  app.register(fastifyStatic, {\n    root: path.join(__dirname, 'server'),\n    index: ['index.html'],\n    decorateReply: false,\n  });\n\n  // Serve the Node emulator build.\n  app.register(fastifyStatic, {\n    prefix: '/deps/nodebox/',\n    root: path.join(__dirname, '../..', 'packages/nodebox/build'),\n    decorateReply: false,\n  });\n\n  // Serve project packs to be available in the test server runtime.\n  app.register(fastifyStatic, {\n    prefix: '/projects/',\n    root: path.join(__dirname, 'projects'),\n    decorateReply: false,\n    setHeaders(res, filePath) {\n      const parsedPath = path.parse(filePath);\n\n      if (parsedPath.ext === '.gz') {\n        res.setHeader('Content-Encoding', 'gzip');\n      } else if (parsedPath.ext === '.br') {\n        res.setHeader('Content-Encoding', 'br');\n      }\n    },\n  });\n\n  // Serve Msgpack to unpack project files on runtime.\n  app.register(fastifyStatic, {\n    prefix: '/deps/msgpack/',\n    root: path.join(__dirname, '../..', 'node_modules/@msgpack/msgpack'),\n    decorateReply: false,\n  });\n\n  app.listen({ port: undefined }, (error, address) => {\n    if (error) {\n      app.log.error(error);\n      serverReady.reject(error);\n      return;\n    }\n\n    serverReady.resolve({ app, address });\n  });\n\n  return serverReady;\n}\n"
  },
  {
    "path": "tests/setup/server/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <title>Test Server</title>\n  </head>\n  <body>\n    <!-- Testing setup -->\n    <script type=\"module\">\n      import { decode } from '/deps/msgpack/dist.es5+esm/index.mjs';\n      window.downloadProject = async function (packFilePath) {\n        const buffer = await fetch(packFilePath).then((response) => response.arrayBuffer());\n        return decode(buffer);\n      };\n    </script>\n\n    <!-- Node emulator -->\n    <script type=\"module\">\n      import { Nodebox } from '/deps/nodebox/index.mjs';\n      window.Nodebox = Nodebox;\n    </script>\n\n    <h1>Test server</h1>\n    <iframe id=\"frame\" width=\"2500\" height=\"2500\" sandbox=\"allow-scripts allow-same-origin\"></iframe>\n  </body>\n</html>\n"
  },
  {
    "path": "tests/tsconfig.json",
    "content": "{\n  \"extends\": \"../tsconfig\",\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"noEmit\": true,\n    \"baseUrl\": \"../\",\n    \"paths\": {\n      \"tests\": [\"./tests\"],\n      \"@codesandbox/nodebox\": [\"./packages/nodebox/src\"]\n    }\n  },\n  \"include\": [\"**/*\"]\n}\n"
  },
  {
    "path": "tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"strict\": true,\n    \"noImplicitAny\": true,\n    \"allowSyntheticDefaultImports\": true,\n    \"moduleResolution\": \"node\",\n    \"esModuleInterop\": true,\n    \"inlineSourceMap\": true,\n    \"useUnknownInCatchVariables\": false,\n    \"resolveJsonModule\": true\n  },\n  \"exclude\": [\"node_modules\", \"build\"]\n}\n"
  },
  {
    "path": "turbo.json",
    "content": "{\n  \"$schema\": \"https://turborepo.org/schema.json\",\n  \"pipeline\": {\n    \"build\": {\n      \"dependsOn\": [\"^build\"],\n      \"outputs\": [\"build/**\"]\n    },\n    \"test:unit\": {\n      \"dependsOn\": [],\n      \"outputs\": []\n    }\n  }\n}\n"
  },
  {
    "path": "vercel.json",
    "content": "{\n  \"headers\": [\n    {\n      \"source\": \"/(.*).(js|map|wasm)\",\n      \"headers\": [\n        {\n          \"key\": \"Cache-Control\",\n          \"value\": \"public,max-age=31536000,immutable\"\n        }\n      ]\n    },\n    {\n      \"source\": \"/(.*)\",\n      \"headers\": [\n        {\n          \"key\": \"Cross-Origin-Resource-Policy\",\n          \"value\": \"cross-origin\"\n        }\n      ]\n    }\n  ]\n}\n"
  }
]